ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlOTk0NgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsNzEgQEAKKyogdGV4dD1hdXRvICFlb2wKKworKi5jIHRleHQgIWVvbAorKi5jYyB0ZXh0ICFlb2wKKyouY2xhc3NwYXRoIHRleHQgIWVvbAorKi5jcHAgdGV4dCAhZW9sCisqLmNzcyB0ZXh0ICFlb2wKKyouZHNwIHRleHQgIWVvbAorKi5kc3cgdGV4dCAhZW9sCisqLmZpbHRlcnMgdGV4dCAhZW9sCisqLmggdGV4dCAhZW9sCisqLmh0bSB0ZXh0ICFlb2wKKyouaHRtbCB0ZXh0ICFlb2wKKyouaW4gdGV4dCAhZW9sCisqLmphdmEgdGV4dCAhZW9sCisqLmxhdW5jaCB0ZXh0ICFlb2wKKyoubWFrIHRleHQgIWVvbAorKi5tZCB0ZXh0ICFlb2wKKyouTUYgdGV4dCAhZW9sCisqLm1rIHRleHQgIWVvbAorKi5wbCB0ZXh0ICFlb2wKKyoucG0gdGV4dCAhZW9sCisqLnByb2plY3QgdGV4dCAhZW9sCisqLnByb3BlcnRpZXMgdGV4dCAhZW9sCisqLnB5IHRleHQgIWVvbAorKi5yYyB0ZXh0ICFlb2wKKyouc2ggdGV4dCBlb2w9bGYKKyouc2xuIHRleHQgIWVvbAorKi5zdHViIHRleHQgIWVvbAorKi50eHQgdGV4dCAhZW9sCisqLnVjbSB0ZXh0ICFlb2wKKyoudmNwcm9qIHRleHQgIWVvbAorKi52Y3hwcm9qIHRleHQgIWVvbAorKi54bWwgdGV4dCAhZW9sCisqLnhzbCB0ZXh0ICFlb2wKKyoueHNsdCB0ZXh0ICFlb2wKK01ha2VmaWxlIHRleHQgIWVvbAorY29uZmlndXJlIHRleHQgIWVvbAorTElDRU5TRSB0ZXh0ICFlb2wKK1JFQURNRSB0ZXh0ICFlb2wKKworKi5iaW4gLXRleHQKKyouYnJrIC10ZXh0CisqLmNudiAtdGV4dAorKi5pY3UgLXRleHQKKyoucmVzIC10ZXh0CisqLm5ybSAtdGV4dAorKi5zcHAgLXRleHQKKyoudHJpMiAtdGV4dAorCitzcmMvY29tL2libS9pY3UvZGV2L2RhdGEvVGhhaVdvcmRGcmVxLnhscyAtdGV4dAorc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL2hvbGlkYXlzX2pwLnVjcyAtdGV4dAorc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL3JiYmkvZW5nbGlzaC5kaWN0IC10ZXh0CitzcmMvY29tL2libS9pY3UvZGV2L2RhdGEvdGhhaTYudWNzIC10ZXh0CitzcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lDVUxvY2FsZURhdGEuamFyIC10ZXh0CitzcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL2ludnVjYS5pY3UgLXRleHQKK3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvcG5hbWVzLmljdSAtdGV4dAorc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS90aGFpX2RpY3QgLXRleHQKK3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdWNhZGF0YS5pY3UgLXRleHQKK3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdW5hbWVzLmljdSAtdGV4dAorc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS91bm9ybS5pY3UgLXRleHQKK3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdXByb3BzLmljdSAtdGV4dAorCisjIFRoZSBmb2xsb3dpbmcgZmlsZSB0eXBlcyBhcmUgc3RvcmVkIGluIEdpdC1MRlMuCisqLmphciBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorKi5kYXQgZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKyouemlwIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisqLmd6IGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisqLmJ6MiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorKi5naWYgZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKwpkaWZmIC0tZ2l0IGEvYnVpbGQuYmF0IGIvYnVpbGQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjM2I5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC5iYXQKQEAgLTAsMCArMSwxNSBAQAorQGVjaG8gb2ZmCisKK1JFTSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitSRU0gKiBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAKK1JFTSAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1JFTSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1JFTSAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9BdHRpYy9idWlsZC5iYXQsdiAkIAorUkVNICREYXRlOiAyMDAxLzExLzI5IDE4OjE4OjEwICQgCitSRU0gJFJldmlzaW9uOiAxLjUgJAorCitSRU0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitSRU0gY29udmllbmNlIGJhdCBmaWxlIHRvIGJ1aWxkIHdpdGgKK2phdmEgLWNsYXNzcGF0aCAiJUpBVkFfSE9NRSVcbGliXHRvb2xzLmphcjslQU5UX0hPTUUlXGxpYlxhbnQuamFyOyVDTEFTU1BBVEglIiBvcmcuYXBhY2hlLnRvb2xzLmFudC5NYWluICUxICUyICUzICU0ICU1CmRpZmYgLS1naXQgYS9idWlsZC5zaCBiL2J1aWxkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhNjUzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZC5zaApAQCAtMCwwICsxLDE2IEBACisjLyoKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMqIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisjKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjKgorIyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovQXR0aWMvYnVpbGQuc2gsdiAkIAorIyogJERhdGU6IDIwMDIvMDMvMTggMjI6MTE6MDQgJCAKKyMqICRSZXZpc2lvbjogMS41ICQKKyMqCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyovCisjIS9iaW4vc2gKK0NMQVNTUEFUSD0kSkFWQV9IT01FL3Rvb2xzLmphcjokQU5UX0hPTUUvbGliL2FudC5qYXIKK2VjaG8gamF2YSAtY2xhc3NwYXRoICRDTEFTU1BBVEggb3JnLmFwYWNoZS50b29scy5hbnQuTWFpbiAkKiAKK2phdmEgLWNsYXNzcGF0aCAkQ0xBU1NQQVRIIG9yZy5hcGFjaGUudG9vbHMuYW50Lk1haW4gJCoKZGlmZiAtLWdpdCBhL2J1aWxkLnhtbCBiL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTJlODFjCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQueG1sCkBAIC0wLDAgKzEsMzE0IEBACis8IS0tCisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9idWlsZC54bWwsdiAkCisqICREYXRlOiAyMDAyLzEyLzAzIDA2OjI3OjQzICQKKyogJFJldmlzaW9uOiAxLjU5ICQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVGhpcyBpcyB0aGUgYW50IGJ1aWxkIGZpbGUgZm9yIElDVTRKLiAgU2VlIHJlYWRtZS5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorKi8KKy0tPgorCis8cHJvamVjdCBuYW1lPSJJQ1U0SiIgZGVmYXVsdD0iY29yZSIgYmFzZWRpcj0iLiI+CisKKyAgICA8IS0tICMjIyBiZWdpbiBjbG92ZXIgc2V0dXAgIyMjIC0tPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjbG92ZXIuaW5pdHN0cmluZyIgdmFsdWU9InRtcC9pY3U0ai5kYiIvPgorICAgIDxwYXRoIGlkPSJjbG92ZXIuY2xhc3NwYXRoIj4KKwk8IS0tICoqKioqIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHRoZSBwYXRocyBiZWxvdyB0byBwb2ludAorCSAgICAgICAgICAgdG8gY2xvdmVyLmphciBhbmQgdmVsb2NpdHkuamFyIG9uIHlvdXIgZmlsZXN5c3RlbSAqKioqKiAtLT4KKyAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtqYXZhLmNsYXNzLnBhdGh9LyIvPgorCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xvdmVyLmphciIvPgorCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0idmVsb2NpdHkuamFyIi8+CisgICAgPC9wYXRoPgorCisgICAgPCEtLSB0YXJnZXQgdG8gc3dpdGNoIENsb3ZlciBvbiAtLT4KKyAgICA8dGFyZ2V0IG5hbWU9IndpdGguY2xvdmVyIj4KKwkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmNvbXBpbGVyIiB2YWx1ZT0ib3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMuQ2xvdmVyQ29tcGlsZXJBZGFwdGVyIi8+CisKKwkJPCEtLSBpbnN0cnVjdCBjbG92ZXIgdG8gdXNlIGEgY2xhc3MtYmFzZWQgaW5zdHJ1bWVudGF0aW9uIHN0cmF0ZWd5IHdoZW4gaW5zdHJ1bWVudGluZyBTaW1wbGVUaW1lWm9uZS5qYXZhIC0tPgorCQk8cHJvcGVydHkgbmFtZT0iY2xvdmVyLnVzZWNsYXNzLmluY2x1ZGVzIiB2YWx1ZT0iKiovU2ltcGxlVGltZVpvbmUuamF2YSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPCEtLSB0YXJnZXQgdG8gZ2VuZXJhdGUgYSBDbG92ZXIgaHRtbCByZXBvcnQgLS0+CisgICAgPHRhcmdldCBuYW1lPSJjbG92ZXIucmVwb3J0Ij4KKwk8amF2YSBjbGFzc25hbWU9ImNvbS5jb3J0ZXhlYi50b29scy5jbG92ZXIucmVwb3J0ZXJzLmh0bWwuSHRtbFJlcG9ydGVyIiBmb3JrPSJ5ZXMiPgorCSAgICA8YXJnIGxpbmU9Ii0tb3V0cHV0ZGlyIHRtcC9pY3U0al9odG1sIC0tc2hvd1NyYyAtLWluaXRzdHJpbmcgJHtjbG92ZXIuaW5pdHN0cmluZ30gLS10aXRsZSAnaWN1NGogY29yZSciLz4KKwkgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xvdmVyLmNsYXNzcGF0aCIvPgorCTwvamF2YT4KKyAgICA8L3RhcmdldD4KKyAgICA8IS0tICMjIyBlbmQgY2xvdmVyIHNldHVwICMjIyAtLT4KKworICAgIDx0YXJnZXQgbmFtZT0iYW50aGFjazEiPgorICAgICAgICA8IS0tIEl0J3MgYSByZWFsIHBhaW4gdG8gc2V0IHByb3BlcnRpZXMgY29uZGl0aW9uYWxseS4KKyAgICAgICAgICBBbnQgMS41IGlzbid0IHJlYWxseSBhbnkgYmV0dGVyIHRoYW4gMS40LCBpbiBmYWN0IDEuNSBlbmZvcmNlcyB0aGF0CisgICAgICAgICAgcHJvcGVydGllcyBhcmUgd3JpdGUtb25jZSBzbyB5b3UgY2FuJ3QgZXZlbiBzZXQgYSBkZWZhdWx0IGFuZCB0aGVuCisgICAgICAgICAgb3ZlcnJpZGUgaXQsIHdoaWNoIHdlIHVzZWQgdG8gZG8gZm9yIEFudCAxLjQuIC0tPgorICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJ2ZXJzaW9uLjEuNCI+CisgICAgICAgIDxvcj4KKwkgICAgPGVxdWFscyBhcmcxPSIke2FudC5qYXZhLnZlcnNpb259IiBhcmcyPSIxLjQiLz4KKyAgICAgICAgPC9vcj4KKyAgICAgICAgPC9jb25kaXRpb24+CisKKwk8Y29uZGl0aW9uIHByb3BlcnR5PSJkb2MucGFyYW1zIgorCSAgICB2YWx1ZT0iLWJyZWFraXRlcmF0b3IgLXVzZSAtdGFnbGV0cGF0aCAuL2NsYXNzZXMgLXRhZ2xldCBjb20uaWJtLmljdS5kZXYudG9vbC5kb2NzLklDVVRhZ2xldCI+CisgICAgICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7dmVyc2lvbi4xLjR9IiBhcmcyPSJ0cnVlIi8+CisJPC9jb25kaXRpb24+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImFudGhhY2syIiB1bmxlc3M9ImRvYy5wYXJhbXMiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZG9jLnBhcmFtcyIgdmFsdWU9IiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICAgICAgPHRzdGFtcC8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMuZGlyIiB2YWx1ZT0ic3JjIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5kaXIiIHZhbHVlPSJjbGFzc2VzIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkb2MuZGlyIiB2YWx1ZT0iZG9jIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXIuZmlsZSIgdmFsdWU9ImljdTRqLmphciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaWN1NGoubWFuaWZlc3QiIHZhbHVlPSIke3NyYy5kaXJ9L2NvbS9pYm0vaWN1L21hbmlmZXN0LnN0dWIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InppcC5maWxlIiB2YWx1ZT0iLi4vaWN1NGoke0RTVEFNUH0uemlwIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ6aXBTcmMuZmlsZSIgdmFsdWU9Ii4uL2ljdTRqU3JjJHtEU1RBTVB9LnppcCIvPgorCisJPHBhdGggaWQ9ImJ1aWxkLmNsYXNzcGF0aCI+CisJICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmRpcn0iLz4KKwkgICAgPHBhdGggcmVmaWQ9ImNsb3Zlci5jbGFzc3BhdGgiLz4KKwk8L3BhdGg+CisKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpY2hlZGl0LmRpciIgdmFsdWU9InJpY2hlZGl0Ii8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWNoZWRpdC5kb2MuZGlyIiB2YWx1ZT0iJHtyaWNoZWRpdC5kaXJ9L2RvYyIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0icmljaGVkaXQuamFyLmZpbGUiIHZhbHVlPSIke3JpY2hlZGl0LmRpcn0vcmljaGVkaXQuamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWNoZWRpdC56aXAuZmlsZSIgdmFsdWU9IiR7cmljaGVkaXQuZGlyfS9yaWNoZWRpdC56aXAiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpY2hlZGl0Lm1hbmlmZXN0IiB2YWx1ZT0iJHtzcmMuZGlyfS9jb20vaWJtL3JpY2h0ZXh0L21hbmlmZXN0LnN0dWIiLz4KKworICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmRpcn0iLz4KKwk8dXB0b2RhdGUgcHJvcGVydHk9ImljdTRqLnJlc291cmNlcyIgdGFyZ2V0ZmlsZT0iJHtzcmMuZGlyfS9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSUNVTG9jYWxlRGF0YS5qYXIiPgorCSAgICA8IS0tIG5vdGUgbXVzdCBub3QgaGF2ZSAnLycgYmVmb3JlICdjb20nIGluIHNyY2ZpbGVzIGluY2x1ZGVzIGFyZyEgLS0+CisJICAgIDxzcmNmaWxlcyBkaXI9IiR7YnVpbGQuZGlyfSIgaW5jbHVkZXM9ImNvbS9pYm0vaWN1L2ltcGwvZGF0YS9Mb2NhbGVFbGVtZW50c19pbmRleC5jbGFzcyIvPgorCTwvdXB0b2RhdGU+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImphdmEgaG9tZTogJHtqYXZhLmhvbWV9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImphdmEgdmVyc2lvbjogJHtqYXZhLnZlcnNpb259Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFudCBqYXZhIHZlcnNpb246ICR7YW50LmphdmEudmVyc2lvbn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHthbnQudmVyc2lvbn0iLz4KKyAgICA8L3RhcmdldD4KKworICAgIDwhLS0gYnVpbGQgZXZlcnl0aGluZyBidXQgZGlzdC1yZWxhdGVkIHN0dWZmIC0tPgorICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjb3JlLHRlc3RzLHRvb2xzLHJpY2hlZGl0LGRlbW9zLGphcixkb2NzIi8+CisKKwk8dGFyZ2V0IG5hbWU9InJlc291cmNlcyIgZGVwZW5kcz0iaW5pdCI+CisgICAgCTwhLS0gdXNlIHRoaXMgdGFyZ2V0IHRvIGZvcmNlIHJlc291cmNlcyB0byBiZSByZWJ1aWx0IC0tPgorCQk8dW5qYXIgc3JjPSIke3NyYy5kaXJ9L2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9JQ1VMb2NhbGVEYXRhLmphciIgZGVzdD0iJHtidWlsZC5kaXJ9Ii8+CisgCQk8dG91Y2ggZmlsZT0iJHtidWlsZC5kaXJ9L2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Mb2NhbGVFbGVtZW50c19pbmRleC5jbGFzcyIvPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJfcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0IiBpZj0iaWN1NGoucmVzb3VyY2VzIj4KKyAgICAJPCEtLSB1c2UgdGhpcyB0YXJnZXQgdG8gY29uZGl0aW9uYWxseSBidWlsZCByZXNvdXJjZXMgb25seSBpZiBpY3U0ai5yZXNvdXJjZXMgaXMgc2V0IC0tPgorCQk8dW5qYXIgc3JjPSIke3NyYy5kaXJ9L2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9JQ1VMb2NhbGVEYXRhLmphciIgZGVzdD0iJHtidWlsZC5kaXJ9Ii8+CisgCQk8dG91Y2ggZmlsZT0iJHtidWlsZC5kaXJ9L2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Mb2NhbGVFbGVtZW50c19pbmRleC5jbGFzcyIvPgorCTwvdGFyZ2V0PgorCisJPCEtLSBjb3JlIGRvZXMgbm90IGJ1aWxkIHJpY2hlZGl0IG9yIHRlc3RzIC0tPgorICAgIDx0YXJnZXQgbmFtZT0iY29yZSIgZGVwZW5kcz0iaW5pdCxjb3JlRGF0YSxfcmVzb3VyY2VzIj4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdGhhaV9kaWN0IgorICAgICAgICAgICAgdG9kaXI9IiR7YnVpbGQuZGlyfS9jb20vaWJtL2ljdS9pbXBsL2RhdGEvIi8+PCEtLSBvbmx5IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGh0bWwgcmVwb3J0ZXIgLS0+CisgICAgICAgIDxqYXZhYyBpbmNsdWRlcz0iY29tL2libS9pY3UvdXRpbC8qKi8qLmphdmEsY29tL2libS9pY3UvdGV4dC8qKi8qLmphdmEsY29tL2libS9pY3UvbWF0aC8qKi8qLmphdmEsY29tL2libS9pY3UvaW1wbC8qKi8qLmphdmEsY29tL2libS9pY3UvbGFuZy8qLmphdmEiCisgICAgICAgICAgICBleGNsdWRlcz0iKiovQ1ZTLyoqLyoiCisgICAgICAgICAgICBzcmNkaXI9IiR7c3JjLmRpcn0iCisgICAgCSAgICBkZXN0ZGlyPSIke2J1aWxkLmRpcn0iCisgICAgCSAgICBjbGFzc3BhdGhyZWY9ImJ1aWxkLmNsYXNzcGF0aCIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIgZGVwcmVjYXRpb249Im9mZiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJ0ZXN0cyIgZGVwZW5kcz0iY29yZSx0ZXN0RGF0YSI+CisgICAgICAgIDxqYXZhYyBpbmNsdWRlcz0iY29tL2libS9pY3UvZGV2L3Rlc3QvKiovKi5qYXZhIgorICAgICAgICAgICAgZXhjbHVkZXM9IioqL0NWUy8qKi8qIgorICAgIAkgICAgc3JjZGlyPSIke3NyYy5kaXJ9IgorICAgIAkgICAgZGVzdGRpcj0iJHtidWlsZC5kaXJ9IgorICAgIAkgICAgY2xhc3NwYXRocmVmPSJidWlsZC5jbGFzc3BhdGgiCisgICAgICAgICAgICBkZWJ1Zz0ib24iIGRlcHJlY2F0aW9uPSJvZmYiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVtb3MiIGRlcGVuZHM9ImNvcmUsdGVzdERhdGEiPgorICAgICAgICA8amF2YWMgaW5jbHVkZXM9ImNvbS9pYm0vaWN1L2Rldi9kZW1vLyoqLyouamF2YSIKKyAgICAgICAgICAgIGV4Y2x1ZGVzPSIqKi9DVlMvKiovKiIKKyAgICAJICAgIHNyY2Rpcj0iJHtzcmMuZGlyfSIKKyAgICAJICAgIGRlc3RkaXI9IiR7YnVpbGQuZGlyfSIKKyAgICAJICAgIGNsYXNzcGF0aHJlZj0iYnVpbGQuY2xhc3NwYXRoIgorICAgICAgICAgICAgZGVidWc9Im9uIiBkZXByZWNhdGlvbj0ib2ZmIi8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9Im9uZTR0b29scyIgZGVwZW5kcz0iYW50aGFjazEsYW50aGFjazIiIGlmPSJ2ZXJzaW9uLjEuNCI+CisgICAgICAgIDxqYXZhYyBpbmNsdWRlcz0iY29tL2libS9pY3UvZGV2L3Rvb2wvZG9jcy8qLmphdmEiCisgICAgICAgICAgICBleGNsdWRlcz0iKiovQ1ZTLyoqLyoiCisgICAgCSAgICBzcmNkaXI9IiR7c3JjLmRpcn0iCisgICAgCSAgICBkZXN0ZGlyPSIke2J1aWxkLmRpcn0iCisgICAgCSAgICBjbGFzc3BhdGhyZWY9ImJ1aWxkLmNsYXNzcGF0aCIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIgZGVwcmVjYXRpb249Im9mZiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJ0b29scyIgZGVwZW5kcz0iY29yZSxvbmU0dG9vbHMiPgorICAgICAgICA8amF2YWMgaW5jbHVkZXM9ImNvbS9pYm0vaWN1L2Rldi90b29sLyoqLyouamF2YSIKKyAgICAgICAgICAgIGV4Y2x1ZGVzPSJjb20vaWJtL2ljdS9kZXYvdG9vbC9kb2NzLyosKiovQ1ZTLyoqLyoiCisgICAgCSAgICBzcmNkaXI9IiR7c3JjLmRpcn0iCisgICAgCSAgICBkZXN0ZGlyPSIke2J1aWxkLmRpcn0iCisgICAgCSAgICBjbGFzc3BhdGhyZWY9ImJ1aWxkLmNsYXNzcGF0aCIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIgZGVwcmVjYXRpb249Im9mZiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkb2NzIiBkZXBlbmRzPSJhbnRoYWNrMSxhbnRoYWNrMix0b29scyI+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImRvYyBwYXJhbXM6ICR7ZG9jLnBhcmFtc30iLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtkb2MuZGlyfSIvPgorICAgICAgICA8amF2YWRvYyBwYWNrYWdlbmFtZXM9ImNvbS5pYm0uaWN1LmxhbmcsY29tLmlibS5pY3UuZGV2LnRvb2wudHJhbnNsaXQsY29tLmlibS5pY3UudGV4dCxjb20uaWJtLmljdS5pbXBsLmRhdGEsY29tLmlibS5pY3UuZGV2LnRvb2wuY29tcHJlc3Npb24sY29tLmlibS5pY3UuZGV2LnRvb2wubm9ybWFsaXplcixjb20uaWJtLmljdS51dGlsLGNvbS5pYm0uaWN1LmRldi50b29sLnJiYmksY29tLmlibS5pY3UubWF0aCxjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQsY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMsY29tLmlibS5yaWNodGV4dC5hd3R1aSxjb20uaWJtLnJpY2h0ZXh0LnByaW50LGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dCxjb20uaWJtLnJpY2h0ZXh0LnN3aW5ndWksY29tLmlibS5yaWNodGV4dC50ZXh0YXBwcyxjb20uaWJtLnJpY2h0ZXh0LnRleHRmb3JtYXQsY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwsY29tLmlibS5yaWNodGV4dC51aWltcGwsY29tLmlibS5yaWNodGV4dC51aWltcGwucmVzb3VyY2VzLGNvbS5pYm0ucmljaHRleHQudGV4dGFwcHMucmVzb3VyY2VzIgorICAgICAgICAgICAgc291cmNlcGF0aD0iJHtzcmMuZGlyfSIKKyAgICAgICAgICAgIGRlc3RkaXI9IiR7ZG9jLmRpcn0iCisgICAgICAgICAgICBub2RlcHJlY2F0ZWRsaXN0PSJ0cnVlIgorCSAgICB3aW5kb3d0aXRsZT0iaWN1NGoiCisJICAgIGRvY3RpdGxlPSJpY3U0aiIKKwkgICAgZW5jb2Rpbmc9Imlzby04ODU5LTEiCisJICAgIGRvY2VuY29kaW5nPSJpc28tODg1OS0xIgorCSAgICBib3R0b209IiZsdDtmb250IHNpemU9LTE+Q29weXJpZ2h0IChjKSAyMDAyIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDsvZm9udD4iCisJICAgIGFkZGl0aW9uYWxwYXJhbT0iJHtkb2MucGFyYW1zfSIKKyAgICAgICAgLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZSA9ImNvcmVEYXRhIiBkZXBlbmRzPSJpbml0Ij4KKyAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuZGlyfS9jb20vaWJtL2ljdS9pbXBsL2RhdGEiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vY29tL2libS9pY3UvaW1wbC9kYXRhIgorICAgICAgICAgICAgICAgICBpbmNsdWRlcz0iVHJhbnNsaXRlcmF0b3JfKi50eHQsKi5pY3UiLz4KKyAgICAgICAgPC9jb3B5PgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lID0idGVzdERhdGEiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9pYm0vaWN1L2Rldi9kYXRhL3JiYmkvZW5nbGlzaC5kaWN0IgorICAgIAkgICAgICB0b2Rpcj0iJHtidWlsZC5kaXJ9L2NvbS9pYm0vaWN1L2Rldi9kYXRhL3JiYmkiLz4KKyAgICAJPGphdmFjIGluY2x1ZGVzPSJjb20vaWJtL2ljdS9kZXYvZGF0YS8qLmphdmEiCisJCSAgICAgICAgICAgIGV4Y2x1ZGVzPSIqKi9DVlMvKiovKiIKKwkJICAgIAkgICAgc3JjZGlyPSIke3NyYy5kaXJ9IgorCQkgICAgCSAgICBkZXN0ZGlyPSIke2J1aWxkLmRpcn0iCisJCSAgICAJICAgIGNsYXNzcGF0aHJlZj0iYnVpbGQuY2xhc3NwYXRoIgorICAgICAgICAgICAgZGVidWc9Im9uIiBkZXByZWNhdGlvbj0ib2ZmIi8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8IS0tIGJ1aWxkcyByaWNoZWRpdCBhbmQgcmljaGVkaXQgdGVzdHMgLS0+CisgICAgPHRhcmdldCBuYW1lPSJyaWNoZWRpdCIgZGVwZW5kcz0iaW5pdCI+CisgICAgICAgIDxqYXZhYyBpbmNsdWRlcz0iY29tL2libS9yaWNodGV4dC8qKi8qLmphdmEiCisgICAgICAgICAgICBleGNsdWRlcz0iKiovQ1ZTLyoqLyoiCisgICAgCSAgICBzcmNkaXI9IiR7c3JjLmRpcn0iCisgICAgCSAgICBkZXN0ZGlyPSIke2J1aWxkLmRpcn0iCisgICAgCSAgICBjbGFzc3BhdGhyZWY9ImJ1aWxkLmNsYXNzcGF0aCIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIgZGVwcmVjYXRpb249Im9mZiIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJqYXIiIGRlcGVuZHM9ImNvcmUiPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7amFyLmZpbGV9IgorICAgICAgICAgICAgY29tcHJlc3M9ImZhbHNlIgorICAgICAgICAgICAgaW5jbHVkZXM9ImNvbS9pYm0vaWN1L3V0aWwvKiovKixjb20vaWJtL2ljdS90ZXh0LyoqLyosY29tL2libS9pY3UvbWF0aC8qKi8qLGNvbS9pYm0vaWN1L2ltcGwvKiovKixjb20vaWJtL2ljdS9sYW5nLyoqLyoiCisgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmRpcn0iCisgICAgICAgICAgICBtYW5pZmVzdD0iJHtpY3U0ai5tYW5pZmVzdH0iLz4KKyAgICA8L3RhcmdldD4KKworICAgIDwhLS0gamFycyB1cCByaWNoZWRpdCBidXQgd2l0aG91dCB0ZXN0cyAtLT4KKyAgICA8dGFyZ2V0IG5hbWU9InJpY2hlZGl0SmFyIiBkZXBlbmRzPSJyaWNoZWRpdCI+CisgICAgICAgIDxta2RpciBkaXI9IiR7cmljaGVkaXQuZGlyfSIvPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7cmljaGVkaXQuamFyLmZpbGV9IgorICAgICAgICAgICAgY29tcHJlc3M9ImZhbHNlIgorICAgICAgICAgICAgaW5jbHVkZXM9ImNvbS9pYm0vcmljaHRleHQvKiovKiIKKwkgICAgZXhjbHVkZXM9ImNvbS9pYm0vcmljaHRleHQvdGVzdC8qKi8qIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5kaXJ9IgorICAgICAgICAgICAgbWFuaWZlc3Q9IiR7cmljaGVkaXQubWFuaWZlc3R9Ii8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8IS0tCisgICAgICAgIE5vdGU6ICBJIHVzZWQgdG8gdXNlIC1saW5rb2ZmbGluZSBodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL2pkay8xLjIvZG9jcy9hcGkvIEM6XGpkazEuMi4yXGRvY3NcYXBpCisgICAgICAgIFRoaXMgbGlua3MgdG8gY29yZSBkb2NzIG9uIFN1bidzIHNpdGUgLSBhIHZlcnkgbmljZSBmZWF0dXJlLiAgQnV0IGl0IHJlcXVpcmVzIHRoZSAxLjIgZG9jcyB0byBiZQorICAgICAgICBvbiB0aGUgYnVpbGQgbWFjaGluZSBhdCBhIGtub3duIGxvY2F0aW9uLgorICAgIC0tPgorCisgICAgPCEtLSB0aGUgJ3B1YmxpYycgZG9jcyBmb3IgcmljaGVkaXQgLS0+CisgICAgPHRhcmdldCBuYW1lPSJyaWNoZWRpdERvY3MiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICA8bWtkaXIgZGlyPSIke3JpY2hlZGl0LmRvYy5kaXJ9Ii8+CisgICAgICAgIDxqYXZhZG9jICBwYWNrYWdlbmFtZXM9ImNvbS5pYm0ucmljaHRleHQuYXd0dWksY29tLmlibS5yaWNodGV4dC5zd2luZ3VpLGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dCxjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcyxjb20uaWJtLnJpY2h0ZXh0LnByaW50IgorICAgICAgICAgICAgc291cmNlcGF0aD0iJHtzcmMuZGlyfSIKKyAgICAgICAgICAgIGRlc3RkaXI9IiR7cmljaGVkaXQuZG9jLmRpcn0iCisgICAgICAgICAgICBub2RlcHJlY2F0ZWRsaXN0PSJ0cnVlIgorCSAgICAgICAgd2luZG93dGl0bGU9IlJpY2hFZGl0IENvbnRyb2wiCisJICAgICAgICBkb2N0aXRsZT0iUmljaEVkaXQgQ29udHJvbCIKKwkgICAgICAgIGVuY29kaW5nPSJpc28tODg1OS0xIgorCSAgICAgICAgZG9jZW5jb2Rpbmc9Imlzby04ODU5LTEiCisJICAgICAgICBib3R0b209IiZsdDtmb250IHNpemU9LTE+Q29weXJpZ2h0IChjKSAxOTk4LTIwMDIgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0Oy9mb250PiIKKyAgICAJCSAgICAvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPCEtLSByaWNoZWRpdCBhbHBoYXdvcmtzIGRpc3RyaWJ1dGlvbiAtIGphciBhbmQgZG9jcywgYnV0IG5vIHNvdXJjZSAtLT4KKyAgICA8dGFyZ2V0IG5hbWU9InJpY2hlZGl0WmlwIiBkZXBlbmRzPSJyaWNoZWRpdEphcixyaWNoZWRpdERvY3MiPgorICAgICAgICA8IS0tQ3JlYXRlIGEgemlwIGFyY2hpdmUgb2YgdGhlIHJpY2hlZGl0IGphciBhbmQgcmVhZG1lIC0tPgorCTxjb3B5IGZpbGU9ImxpY2Vuc2UuaHRtbCIgdG9kaXI9IiR7cmljaGVkaXQuZGlyfSIvPgorICAgICAgICA8emlwIHppcGZpbGU9IiR7cmljaGVkaXQuemlwLmZpbGV9IgorICAgICAgICAgICAgYmFzZWRpcj0iJHtyaWNoZWRpdC5kaXJ9IgorICAgICAgICAgICAgaW5jbHVkZXM9ImRvYy8qKi8qLHJpY2hlZGl0LmphcixsaWNlbnNlLmh0bWwiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iemlwIiBkZXBlbmRzPSJkb2NzLGphciI+CisgICAgICAgIDwhLS1DcmVhdGUgYSB6aXAgYXJjaGl2ZSBvZiB0aGUgc291cmNlLCBkb2NzLCBhbmQgamFyIGZpbGUgZm9yCisgICAgICAgIGRpc3RyaWJ1dGlvbi4gIFRoZSB6aXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBhYm92ZQorICAgICAgICB0aGUgcm9vdCBJQ1U0SiBkaXJlY3RvcnkuIFRoZSBleGNsdWRlIHBhdHRlcm4gJHtzcmMuZGlyfS9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL1VuaWNvZGVEYXRhLSoudHh0CisgICAgICAgIGFuZCAke3NyYy5kaXJ9L2RhdGEvdW5pY29kZS9TcGVjaWFsQ2FzaW5nLSoudHh0CisgICAgICAgIGVsaW1pbmF0ZXMgb2xkIGFyY2hpdmUgY29waWVzIGxpa2UgU3BlY2lhbENhc2luZy0yLnR4dCBhbmQKKyAgICAgICAgVW5pY29kZURhdGEtMi4xLjgudHh0IGV0YyAtLT4KKyAgICAgICAgPHppcCB6aXBmaWxlPSIke3ppcC5maWxlfSIKKyAgICAgICAgICAgIGJhc2VkaXI9Ii4iCisgICAgICAgICAgICBleGNsdWRlcz0iJHtyaWNoZWRpdC5kaXJ9LyoqLyosdGVzdF8qLCR7c3JjLmRpcn0vY29tL2libS9pY3UvZGV2L2RhdGEvdW5pY29kZS9Vbmljb2RlRGF0YS0qLnR4dCwke3NyYy5kaXJ9L2NvbS9pYm0vaWN1L2Rldi9kYXRhL3VuaWNvZGUvU3BlY2lhbENhc2luZy0qLnR4dCwke3NyYy5kaXJ9L2NvbS9pYm0vaWN1L2Rldi9kYXRhL3VuaWNvZGUvQ29tcG9zaXRpb25FeGNsdXNpb25zLSoudHh0LCR7b2Jzb2xldGUuZGlyfS8qKiwqKi8qfiwke3NyYy5kaXJ9LyoqLyouY2xhc3MsJHtidWlsZC5kaXJ9LyoqLCoqL0NWUy8qKi8qIi8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InppcFNyYyIgZGVwZW5kcz0iaW5pdCI+CisgICAgICAgIDwhLS1DcmVhdGUgYSB6aXAgYXJjaGl2ZSBvZiBqdXN0IHRoZSBzb3VyY2UgZm9yIGRpc3RyaWJ1dGlvbi4gIFRoZQorICAgICAgICB6aXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBhYm92ZSB0aGUgcm9vdCBJQ1U0SgorICAgICAgICBkaXJlY3RvcnkuIFRoZSBleGNsdWRlIHBhdHRlcm4gJHtzcmMuZGlyfS9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL1VuaWNvZGVEYXRhLSoudHh0CisgICAgICAgIGFuZCAke3NyYy5kaXJ9L2NvbS9pYm0vaWN1L2Rldi9kYXRhL3VuaWNvZGUvU3BlY2lhbENhc2luZy0qLnR4dAorICAgICAgICBlbGltaW5hdGVzIG9sZCBhcmNoaXZlIGNvcGllcyBsaWtlIFNwZWNpYWxDYXNpbmctMi50eHQgYW5kCisgICAgICAgIFVuaWNvZGVEYXRhLTIuMS44LnR4dCAtLT4KKyAgICAgICAgPHppcCB6aXBmaWxlPSIke3ppcFNyYy5maWxlfSIKKyAgICAgICAgICAgIGJhc2VkaXI9Ii4iCisgICAgICAgICAgICBleGNsdWRlcz0iJHtyaWNoZWRpdC5kaXJ9LyoqLyosdGVzdF8qLCR7c3JjLmRpcn0vY29tL2libS9pY3UvZGV2L2RhdGEvdW5pY29kZS8vVW5pY29kZURhdGEtKi50eHQsJHtzcmMuZGlyfS9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL1NwZWNpYWxDYXNpbmctKi50eHQsJHtzcmMuZGlyfS9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL0NvbXBvc2l0aW9uRXhjbHVzaW9ucy0qLnR4dCwke29ic29sZXRlLmRpcn0vKiosKiovKn4sJHtzcmMuZGlyfS8qKi8qLmNsYXNzLCR7YnVpbGQuZGlyfS8qKiwqKi9DVlMvKiovKiwke2RvYy5kaXJ9LyoqLCR7amFyLmZpbGV9Ii8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImNoZWNrIiBkZXBlbmRzPSJ0ZXN0cyI+CisJPGphdmEgY2xhc3NuYW1lPSJjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0QWxsIj4KKwkgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtqYXZhLmNsYXNzLnBhdGh9LyIvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmRpcn0iLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorCTwvamF2YT4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iX3JlcXVpcmVzMTQiIHVubGVzcz0idmVyc2lvbi4xLjQiPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJPbmUgb2YgeW91ciB0YXJnZXRzIHJlcXVpcmVzIEpBVkFfSE9NRSB0byBiZSBzZXQgdG8gSkRLIHZlcnNpb24gMS40Ii8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9Il9jaGVja3RhZ3MiIGRlcGVuZHM9ImFudGhhY2sxLGFudGhhY2syLHRvb2xzIiBpZj0idmVyc2lvbi4xLjQiPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJkb2MgcGFyYW1zOiAke2RvYy5wYXJhbXN9Ii8+CisgICAgICAgIDxqYXZhZG9jIHNvdXJjZXBhdGg9IiR7c3JjLmRpcn0iIAorICAgICAgICAgICAgICAgICBwYWNrYWdlbmFtZXM9ImNvbS5pYm0uaWN1LioiCisgICAgICAgICAgICAgICAgIGV4Y2x1ZGVwYWNrYWdlbmFtZXM9ImNvbS5pYm0uaWN1LmRldi4qLGNvbS5pYm0uaWN1LmltcGwuKiIKKyAgICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2J1aWxkLmRpcn0iPgorICAgICAgICAgICAgPGRvY2xldCBuYW1lPSJjb20uaWJtLmljdS5kZXYudG9vbC5kb2NzLkNoZWNrVGFncyIKKyAgICAgICAgICAgICAgICAgICAgcGF0aD0iJHtidWlsZC5kaXJ9Ij4KKyAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iLWJyaWVmIi8+CisgICAgICAgICAgICA8L2RvY2xldD4gICAgICAgCisgICAgICAgIDwvamF2YWRvYz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iY2hlY2t0YWdzIiBkZXBlbmRzPSJhbnRoYWNrMSxhbnRoYWNrMixfcmVxdWlyZXMxNCxfY2hlY2t0YWdzIi8+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0Ij4KKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGlyfSIvPgorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtkb2MuZGlyfSIvPgorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7amFyLmZpbGV9Ii8+CisJPGRlbGV0ZSBkaXI9IiR7cmljaGVkaXQuZGlyfSIvPgorICAgIDwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9saWNlbnNlLmh0bWwgYi9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiMDc2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDM0IEBACis8aHRtbD4KKworPGhlYWQ+Cis8dGl0bGU+SUNVNEogbGljZW5zZSAtIElDVTRKIDEuMy4xIGFuZCBsYXRlcjwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IEJHQ09MT1I9IiNmZmZmZmYiPgorPGgyPklDVTRKIGxpY2Vuc2UgLSBJQ1U0SiAxLjMuMSBhbmQgbGF0ZXI8L2gyPgorCis8cD5DT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFPC9wPgorCis8cD4KK0NvcHlyaWdodCAoYykgMTk5NS0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycworPC9wPgorPHA+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorPC9wPgorPHA+CitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKK3RvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorPC9wPgorPHA+CitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCis8L3A+Cis8cD4KK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCis8L3A+CisKKzxocj4KKzxzbWFsbD4KK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgorPC9zbWFsbD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3JlYWRtZS5odG1sIGIvcmVhZG1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjMDAzMQotLS0gL2Rldi9udWxsCisrKyBiL3JlYWRtZS5odG1sCkBAIC0wLDAgKzEsNzM0IEBACis8IWRvY3R5cGUgaHRtbCBwdWJsaWMgIi0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vZW4iPgorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+UmVhZE1lIGZvciBJQ1U0SjwvdGl0bGU+Cis8IS0tCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3JlYWRtZS5odG1sLHYgJAorKiAkRGF0ZTogMjAwMi8xMi8wNSAwNjowNjoyNCAkCisqICRSZXZpc2lvbjogMS4zOCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLT4KKzwvaGVhZD4KKworPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4MDAwODAiIGxhbmc9IkVOLVVTIj4KKworICAgIDxoMj5JbnRlcm5hdGlvbmFsIENvbXBvbmVudHMgZm9yIFVuaWNvZGUgZm9yIEphdmE8L2gyPgorICAgIDxoMz5SZWFkIE1lIGZvciBJQ1U0SiAyLjQ8L2gzPgorCis8aHIgc2l6ZT0iMiIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPgorICAgIDxwPjxiPlJlbGVhc2UgRGF0ZTwvYj48YnI+CisgICAgRGVjZW1iZXIgMTV0aCwgMjAwMjwvcD4KKworPHA+Rm9yIHRoZSBtb3N0IHJlY2VudAorICAgICAgcmVsZWFzZSwgc2VlIHRoZSA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG93bmxvYWQvaW5kZXguaHRtbCI+CisgICAgICBJQ1U0SiBkb3dubG9hZCBzaXRlPC9hPi4KKyAgICA8L1A+CisKKzxoMz48dT5Db250ZW50czwvdT48L2gzPgorCis8dWwgdHlwZT0iZGlzYyI+CisgIDxsaT48YSBocmVmPSIjaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb24gdG8gSUNVNEogKEludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgVW5pY29kZSBmb3IgSmF2YSk8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9IiNsaWNlbnNlIj5MaWNlbnNlIEluZm9ybWF0aW9uPC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIjUGxhdGZvcm1EZXBlbmRlbmNpZXMiPlBsYXRmb3JtIERlcGVuZGVuY2llczwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iI2Rvd25sb2FkIj5Ib3cgdG8gRG93bmxvYWQgSUNVNEo8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9IiNXaGF0Q29udGFpbiI+VGhlIFN0cnVjdHVyZSBhbmQgQ29udGVudHMgb2YgSUNVNEo8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9IiNBUEkiPldoZXJlIHRvIEdldCBEb2N1bWVudGF0aW9uPC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIjSG93VG9JbnN0YWxsSmF2YWMiPkhvdyB0byBJbnN0YWxsIGFuZCBCdWlsZDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iI3RyeWluZ291dCI+VHJ5aW5nIE91dCBJQ1U0SjwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iI3Jlc291cmNlcyI+SUNVNEogUmVzb3VyY2UgSW5mb3JtYXRpb248L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9IiNXaGVyZVRvRmluZE1vcmUiPldoZXJlIHRvIEZpbmQgTW9yZSBJbmZvcm1hdGlvbjwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iI1N1Ym1pdHRpbmdDb21tZW50cyI+U3VibWl0dGluZyBDb21tZW50cywgUmVxdWVzdGluZyBGZWF0dXJlcyBhbmQgUmVwb3J0aW5nCisgICAgQnVnczwvYT48L2xpPgorPC91bD4KKworPGgzPjxhIE5BTUU9ImludHJvZHVjdGlvbiI+PC9hPjx1PkludHJvZHVjdGlvbiB0byBJQ1U0SiAoSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIGZvciBKYXZhKTwvdT48L2gzPgorCis8cD5Ub2RheSdzIGdsb2JhbCBtYXJrZXQgZGVtYW5kcyBwcm9ncmFtcyB0aGF0IHN1cHBvcnQgYSB3aWRlIHZhcmlldHkKKyAgICBvZiBsYW5ndWFnZXMgYW5kIG5hdGlvbmFsIGNvbnZlbnRpb25zLiZuYnNwOyBDdXN0b21lcnMgcHJlZmVyIHNvZnR3YXJlCisgICAgYW5kIHdlYiBwYWdlcyB0YWlsb3JlZCB0byB0aGVpciBuZWVkcywgc3R1ZGllcyBjb25maXJtIHRoYXQKKyAgICB0aGlzIGxlYWRzIHRvIGluY3JlYXNlZCBzYWxlcy4mbmJzcDsgIEphdmEgcHJvdmlkZXMgYSBzdHJvbmcKKyAgICBmb3VuZGF0aW9uIGZvciBnbG9iYWwgcHJvZ3JhbXMsIGFuZCBJQk0gYW5kIHRoZSBJQ1U0SiB0ZWFtIHBsYXllZAorICAgIGEga2V5IHJvbGUgaW4gcHJvdmlkaW5nIGdsb2JhbGl6YXRpb24gdGVjaG5vbG9neSB0byBTdW4gZm9yIHVzZSBpbgorICAgIEphdmEuIDwvcD4KKyAgICA8cD4KKyAgICBCdXQgSmF2YSBkb2VzIG5vdCB5ZXQgcHJvdmlkZSBhbGwgdGhlIGZlYXR1cmVzIHRoYXQgc29tZSBwcm9kdWN0cyByZXF1aXJlLiZuYnNwOyBJQ1U0SiBpcyBhbiBhZGQtb24gbGlicmFyeSB0aGF0IGV4dGVuZHMgSmF2YSdzIGdsb2JhbGl6YXRpb24gdGVjaG5vbG9neSBieSBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyB0b29sczoKKyAgICA8dWw+IAorICAgIDxsaT4gCisgICAgVW5pY29kZSBOb3JtYWxpemF0aW9uIJYgTkZDLCBORkQsIE5GS0QsIE5GS0MKKyAgICAJPGJsb2NrcXVvdGU+UHJvZHVjZXMgY2Fub25pY2FsIHRleHQgcmVwcmVzZW50YXRpb25zLCBuZWVkZWQgZm9yIFhNTCBhbmQgdGhlIG5ldC48L2Jsb2NrcXVvdGU+CisgICAgPGxpPgorICAgIEludGVybmF0aW9uYWwgQ2FsZW5kYXJzIJYgQXJhYmljLCBCdWRkaGlzdCwgSGVicmV3LCBhbmQgSmFwYW5lc2U8YnI+CisgICAgICAgIDxibG9ja3F1b3RlPlJlcXVpcmVkIGZvciBjb3JyZWN0IHByZXNlbnRhdGlvbiBvZiBkYXRlcyBpbiBzb21lIGNvdW50cmllcy48L2Jsb2NrcXVvdGU+CisgICAgPGxpPiAKKyAgICBOdW1iZXIgRm9ybWF0IEVuaGFuY2VtZW50cyCWIFNjaWVudGlmaWMgTm90YXRpb24sIFNwZWxsZWQtb3V0IE51bWJlcnMKKyAgICAgICAgICAgICAgPGJsb2NrcXVvdGU+RW5oYW5jZXMgc3RhbmRhcmQgSmF2YSBudW1iZXIgZm9ybWF0dGluZy4gVGhlIHNwZWxsZWQtb3V0IGZvcm1hdCBpcyB1c2VkCitmb3IgY2hlY2tzIGFuZCBzaW1pbGFyIGRvY3VtZW50cy48L2Jsb2NrcXVvdGU+CisKKyAgICA8bGk+RW5oYW5jZWQgd29yZC1icmVhayBkZXRlY3Rpb24gliBSdWxlLWJhc2VkLCBzdXBwb3J0cyBUaGFpCisgICAgICAgICAgICAgIDxibG9ja3F1b3RlPlJlcXVpcmVkIGZvciBjb3JyZWN0IHN1cHBvcnQgb2YgVGhhaS48L2Jsb2NrcXVvdGU+CisKKyAgICA8bGk+VW5pY29kZSBUZXh0IENvbXByZXNzaW9uIJYgU3RhbmRhcmQgY29tcHJlc3Npb24gb2YgVW5pY29kZSB0ZXh0CisgICAgICAgICAgICAgIDxibG9ja3F1b3RlPlN1aXRhYmxlIGZvciBsYXJnZSBudW1iZXJzIG9mIHNtYWxsIGZpZWxkcywgd2hlcmUgTFpXIGFuZCBzaW1pbGFyIHNjaGVtZXMKK2RvIG5vdCBhcHBseS48L2Jsb2NrcXVvdGU+CisgICAgPGxpPkNvbGxhdGlvbiAtIFJ1bGUtYmFzZWQsIHVwLXRvLWRhdGUgVW5pY29kZSBDb2xsYXRpb24gQWxnb3JpdGhtIChVQ0EpIHNvcnRpbmcgb3JkZXIKKyAgICAgICAgPGJsb2NrcXVvdGU+Rm9yIGZhc3QgbXVsdGlsaW5ndWFsIHN0cmluZyBjb21wYXJpc29uPC9ibG9ja3F1b3RlPgorICAgIDwvdWw+CitJbiBzb21lIGNhc2VzLCB0aGUgYWJvdmUgc3VwcG9ydCBoYXMgYmVlbiByb2xsZWQgaW50byBhIGxhdGVyIHJlbGVhc2Ugb2YKK0phdmEuIEZvciBleGFtcGxlLCB0aGUgVGhhaSB3b3JkLWJyZWFrIGlzIG5vdyBpbiBKYXZhIDEuNC4gSG93ZXZlciwgaWYgeW91CithcmUgdXNpbmcgSmF2YSAxLjMsIHlvdSBjYW4gdXNlIHRoZSBJQ1U0SiBwYWNrYWdlIHVudGlsIHlvdSB1cGdyYWRlIHRvIDEuNC4KKzwvcD4KKworPGgzPjxhIG5hbWU9bGljZW5zZT48L2E+PHU+TGljZW5zZSBJbmZvcm1hdGlvbjwvdT48L2gzPgorPHA+CitUaGUgSUNVIHByb2plY3RzIChJQ1U0QyBhbmQgSUNVNEopIHVzZSB0aGUgWCBsaWNlbnNlLiZuYnNwOyBUaGUgWCBsaWNlbnNlIGlzIGEgPGI+bm9uLXZpcmFsPC9iPiBhbmQgcmVjb21tZW5kZWQgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBHTlUgR1BMIGxpY2Vuc2UuJm5ic3A7IFRoaXMgYmVjYW1lIGVmZmVjdGl2ZSB3aXRoIHJlbGVhc2UgMS44LjEgb2YgSUNVNEMgYW5kIHJlbGVhc2UgMS4zLjEgb2YgSUNVNEogaW4gbWlkLTIwMDEuIEFsbCBuZXcgSUNVIHJlbGVhc2VzIHdpbGwgYWRvcHQgdGhlIFggbGljZW5zZTsgcHJldmlvdXMgSUNVIHJlbGVhc2VzIGNvbnRpbnVlIHRvIHV0aWxpemUgdGhlIElQTCAoSUJNIFB1YmxpYyBMaWNlbnNlKS4mbmJzcDsgVXNlcnMgb2YgcHJldmlvdXMgcmVsZWFzZXMgb2YgSUNVIHdobyB3YW50IHRvIGFkb3B0IG5ldyBJQ1UgcmVsZWFzZXMgd2lsbCBuZWVkIHRvIGFjY2VwdCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIFggbGljZW5zZS4KKzwvcD4KKzxwPgorVGhlIG1haW4gZWZmZWN0IG9mIHRoZSBjaGFuZ2UgaXMgdG8gcHJvdmlkZSBHUEwgY29tcGF0aWJpbGl0eS4mbmJzcDsgVGhlIFggbGljZW5zZSBpcyBsaXN0ZWQgYXMgR1BMIGNvbXBhdGlibGUsIHNlZSB0aGUgZ251IHBhZ2UgYXQgPGEgaHJlZj1odHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9saWNlbnNlLWxpc3QuaHRtbCNHUExDb21wYXRpYmxlTGljZW5zZXM+CitodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9saWNlbnNlLWxpc3QuaHRtbCNHUExDb21wYXRpYmxlTGljZW5zZXM8L2E+LiAgVGhpcyBtZWFucyB0aGF0IEdQTCBwcm9qZWN0cyBjYW4gbm93IHVzZSBJQ1UgY29kZSwgaXQgZG9lcyA8Yj5ub3Q8L2I+IG1lYW4gdGhhdCBwcm9qZWN0cyB1c2luZyBJQ1UgYmVjb21lIHN1YmplY3QgdG8gR1BMLgorPC9wPgorPHA+CitUaGUgdGV4dCBvZiB0aGUgWCBsaWNlbnNlIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPWh0dHA6Ly93d3cueC5vcmcvdGVybXMuaHRtPmh0dHA6Ly93d3cueC5vcmcvdGVybXMuaHRtPC9hPi4gVGhlIElCTSB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBlc3NlbnRpYWwgdGV4dCBvZiB0aGUgbGljZW5zZSwgb21pdHRpbmcgdGhlIFgtc3BlY2lmaWMgdHJhZGVtYXJrcyBhbmQgY29weXJpZ2h0IG5vdGljZXMuICBUaGUgZnVsbCBjb3B5IG9mIDxhIGhyZWY9bGljZW5zZS5odG1sPklDVSdzIGxpY2Vuc2U8L2E+IGlzIGluY2x1ZGVkIGluIHRoZSBkb3dubG9hZCBwYWNrYWdlLgorPC9wPgorPHA+CitGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBzZWUgdGhlIDxhIGhyZWY9aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdS9wcmVzcy5odG1sPnByZXNzIGFubm91bmNlbWVudDwvYT4gYW5kIHRoZSA8YSBocmVmPWh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvcHJvamVjdF9mYXEuaHRtbCNsaWNlbnNlPlByb2plY3QgRkFRPC9hPi4KKzwvcD4KKworPGgzPjxhIE5BTUU9IlBsYXRmb3JtRGVwZW5kZW5jaWVzIj48L2E+PHU+UGxhdGZvcm0gRGVwZW5kZW5jaWVzPC91PjwvaDM+CisgICAgICA8UD4KKyAgICAgIFBhcnRzIG9mIElDVTRKIGRlcGVuZCBvbiBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgb25seSBhdmFpbGFibGUgaW4gSkRLIDEuMworICAgICAgb3IgbGF0ZXIsIGFsdGhvdWdoIHNvbWUgY29tcG9uZW50cyB3b3JrIHVuZGVyIGVhcmxpZXIgSlZNcy4gQWxsIAorICAgICAgY29tcG9uZW50cyBzaG91bGQgYmUgY29tcGlsZWQgdXNpbmcgYSBKYXZhMiBjb21waWxlciwgYXMgZXZlbiBjb21wb25lbnRzIAorICAgICAgdGhhdCBydW4gdW5kZXIgZWFybGllciBKVk1zIGNhbiByZXF1aXJlIGxhbmd1YWdlIGZlYXR1cmVzIHRoYXQgYXJlIG9ubHkgCisgICAgICBwcmVzZW50IGluIEphdmEyLiBDdXJyZW50bHkgMS4xLnggYW5kIDEuMi54IEpWTXMgYXJlIHVuc3VwcG9ydGVkIGFuZCB1bnRlc3RlZCwgYW5kIHlvdSB1c2UgCisgICAgICB0aGUgY29tcG9uZW50cyBvbiB0aGVzZSBKVk1zIGF0IHlvdXIgb3duIHJpc2suPC9QPgorICAgICAgPHA+CisgICAgICBUaGUgcmVmZXJlbmNlIHBsYXRmb3JtcyB3aGljaCB3ZSBzdXBwb3J0IGFuZCB0ZXN0IElDVTRKIG9uIGFyZTo8dWw+Cis8bGk+IFdpbjIwMDAsIElCTSBKREsgMS4zPC9saT4KKzxsaT4gU29sYXJpcyAyLjcsIFN1biBKREsgMS4zLjE8L2xpPgorPGxpPiBBSVggNS4xLCBJQk0gSkRLIDEuMzwvbGk+Cis8L3VsPgorPC9wPgorPHA+UGxlYXNlIHVzZSB0aGUgbW9zdCByZWNlbnQgdXBkYXRlcyBvZiB0aGUgc3VwcG9ydGVkIEpESyB2ZXJzaW9ucy48L3A+IAorCis8cD5BZGRpdGlvbmFsbHksIHdlIGhhdmUgYnVpbHQgYW5kIHRlc3RlZCBJQ1U0SiBvbiB0aGUgZm9sbG93aW5nIDxiPnVuc3VwcG9ydGVkPC9iPiBwbGF0Zm9ybXM6Cis8dWw+Cis8bGk+IFdpbjk4LCBXaW5OVCwgV2luWFAgLyBJQk0gSkRLIDEuMywgMS4zLjEsIFN1biBKREsgMS4zLjEsIDEuNCwgMS40LjE8L2xpPgorPGxpPiBXaW4yMDAwIC8gSUJNIEpESyAxLjMuMSwgU3VuIEpESyAxLjMuMSwgMS40LCAxLjQuMTwvbGk+Cis8bGk+IFNvbGFyaXMgMi42ICwgU29sYXJpcyAyLjggLyBTdW4gSkRLIDEuMywgMS4zLjEsIDEuNCwgMS40LjE8L2xpPgorPGxpPiBTb2xhcmlzIDIuNyAvIFN1biBKREsgMS4zLjEsIDEuNCwgMS40LjE8L2xpPgorPGxpPiBBSVggNS4xLCBJQk0gSkRLIDEuMy4xPC9saT4KKzwvdWw+CisKKzxoMz48YSBOQU1FPSJvYnRhaW5pbmciPjwvYT48dT5Ib3cgdG8gRG93bmxvYWQgSUNVNEo8L3U+PC9oMz4KKworPHA+VGhlcmUgYXJlIHR3byB3YXlzIHRvIGRvd25sb2FkIHRoZSBJQ1U0SiByZWxlYXNlcy4KKworPHVsIHR5cGU9ImRpc2MiPgorICA8bGk+PGI+T2ZmaWNpYWwgUmVsZWFzZSBTbmFwc2hvdDo8L2I+PGJyPgorCisgICAgSWYgeW91IHdhbnQgdG8gdXNlIElDVTRKIChhcyBvcHBvc2VkIHRvIGRldmVsb3BpbmcgaXQpLCB5b3VyIGJlc3QKKyAgICBiZXQgaXMgdG8gZG93bmxvYWQgYW4gb2ZmaWNpYWwsIHBhY2thZ2VkIHZlcnNpb24gb2YgdGhlIElDVTRKCisgICAgc291cmNlIGNvZGUuJm5ic3A7IFRoZXNlIHZlcnNpb25zIGFyZSB0ZXN0ZWQgbW9yZSB0aG9yb3VnaGx5IHRoYW4KKyAgICBkYXktdG8tZGF5IGRldmVsb3BtZW50IGJ1aWxkcywgYW5kIHRoZXkgYXJlIHBhY2thZ2VkIGluIHppcCBmaWxlcworICAgIGZvciBjb252ZW5pZW50IGRvd25sb2FkLiZuYnNwOyBUaGVzZSBwYWNrYWdlZCBmaWxlcyBjYW4gYmUgZm91bmQKKyAgICBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG93bmxvYWQvaW5kZXguaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2Rvd25sb2FkL2luZGV4Lmh0bWw8L2E+LiZuYnNwOyBJZiBhIHBhY2thZ2VkIHNuYXBzaG90IGlzIG5hbWVkIDxiPklDVTRKWFhYWFhYLnppcDwvYj4sIHdoZXJlIFhYWFhYWCBpcworICAgIHRoZSByZWxlYXNlIHZlcnNpb24gbnVtYmVyLiZuYnNwOyBQbGVhc2UgdW56aXAgdGhpcyBmaWxlLiZuYnNwOyBJdAorICAgIHdpbGwgcmVjb25zdHJ1Y3QgdGhlIHNvdXJjZSBkaXJlY3RvcnkuIDwvbGk+Cis8L3VsPgorCis8dWwgdHlwZT0iZGlzYyI+CisgIDxsaT48Yj5DVlMgU291cmNlIFJlcG9zaXRvcnk6PC9iPjxicj4KKyAgICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gZGV2ZWxvcGluZyBmZWF0dXJlcywgcGF0Y2hlcywgb3IgYnVnIGZpeGVzIGZvciBJQ1U0SiwgeW91IHNob3VsZAorICAgIHByb2JhYmx5IGJlIHdvcmtpbmcgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIElDVTRKIHNvdXJjZSBjb2RlLiBZb3Ugd2lsbCBuZWVkIHRvCisgICAgY2hlY2sgdGhlIGNvZGUgb3V0IG9mIG91ciBDVlMgcmVwb3NpdG9yeSB0byBlbnN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbgorICAgIG9mIGFsbCBvZiB0aGUgZmlsZXMuIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZG8gdGhpczogPGJyPgorICAgIDx1bCB0eXBlPSJjaXJjbGUiPgorICAgICAgPGxpPldlYkNWUzo8YnI+CisgICAgICAgIElmIHlvdSB3YW50IHRvIGJyb3dzZSB0aGUgY29kZSBhbmQgb25seSBtYWtlIG9jY2FzaW9uYWwgZG93bmxvYWRzLCB5b3UgbWF5IHdhbnQgdG8gdXNlCisgICAgICAgIFdlYkNWUy4gSXQgcHJvdmlkZXMgYSBjb252ZW5pZW50LCB3ZWItYmFzZWQgaW50ZXJmYWNlIGZvciBicm93c2luZyBhbmQgZG93bmxvYWRpbmcgdGhlCisgICAgICAgIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBJQ1U0SiBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gWW91IGNhbiBhbHNvIHZpZXcgZWFjaCBmaWxlJ3MKKyAgICAgICAgcmV2aXNpb24gaGlzdG9yeSwgZGlzcGxheSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBpbmRpdmlkdWFsIHJldmlzaW9ucywgZGV0ZXJtaW5lIHdoaWNoCisgICAgICAgIHJldmlzaW9ucyB3ZXJlIHBhcnQgb2Ygd2hpY2ggb2ZmaWNpYWwgcmVsZWFzZSwgYW5kIHNvIG9uLiA8YnI+CisgICAgICA8L2xpPgorICAgICAgPGxpPldpbkNWUzo8YnI+CisgICAgICAgIElmIHlvdSB3aWxsIGJlIGRvaW5nIHNlcmlvdXMgd29yayBvbiBJQ1U0SiwgeW91IHNob3VsZCBwcm9iYWJseSBpbnN0YWxsIGEgQ1ZTIGNsaWVudCBvbgorICAgICAgICB5b3VyIG93biBtYWNoaW5lIHNvIHRoYXQgeW91IGNhbiBkbyBiYXRjaCBvcGVyYXRpb25zIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgV2ViQ1ZTCisgICAgICAgIGludGVyZmFjZS4gT24gV2luZG93cywgd2Ugc3VnZ2VzdCB0aGUgV2luQ1ZTIGNsaWVudC4gVG8gZG93bmxvYWQgSUNVNEogdmlhIFdpbkNWUzogPG9sPgorICAgICAgICAgIDxsaT5JbnN0YWxsIHRoZSBXaW5DVlMgY2xpZW50LCB3aGljaCB5b3UgY2FuIGRvd25sb2FkIGZyb20gdGhlIDxhCisgICAgICAgICAgICBocmVmPSJodHRwOi8vd3d3LndpbmN2cy5vcmciPmh0dHA6Ly93d3cud2luY3ZzLm9yZzwvYT4uPC9saT4KKyAgICAgICAgICA8bGk+U2VsZWN0IDxzdHJvbmc+UHJlZmVyZW5jZXM8L3N0cm9uZz4gZnJvbSB0aGUgPHN0cm9uZz5BZG1pbjwvc3Ryb25nPiBtZW51LjxvbCB0eXBlPSJhIj4KKyAgICAgICAgICAgICAgPGxpPk9uIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gdGFiIHBhbmVsOiBTZXQgeW91ciA8c3Ryb25nPkNWU1JPT1Q8L3N0cm9uZz4gdG8gJnF1b3Q7PHN0cm9uZz46cHNlcnZlcjphbm9uY3ZzQG9zcy5zb2Z0d2FyZS5pYm0uY29tOi91c3IvY3ZzL2ljdTRqPC9zdHJvbmc+JnF1b3Q7Ljxicj4KKyAgICAgICAgICAgICAgICBMZWF2ZSBvdGhlciBvcHRpb25zIG9uIHRoaXMgcGFnZSBhdCB0aGVpciBkZWZhdWx0LjwvbGk+CisgICAgICAgICAgICAgIDxsaT5PbiB0aGUgPHN0cm9uZz5Qb3J0czwvc3Ryb25nPiB0YWIgcGFuZWw6IENoZWNrIHRoZSA8c3Ryb25nPnBzZXJ2ZXI8L3N0cm9uZz4gY2hlY2tib3ggYW5kCisgICAgICAgICAgICAgICAgZW50ZXIgcG9ydCA8c3Ryb25nPjI0MDE8L3N0cm9uZz4uPC9saT4KKyAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8bGk+Q2xpY2sgb24gdGhlIExvZ2luIG1lbnUgYnV0dG9uICg8c3Ryb25nPkFkbWluPC9zdHJvbmc+IG1lbnUpLiBFbnRlciBpbiAgJnF1b3Q7PHN0cm9uZz5hbm9uY3ZzPC9zdHJvbmc+JnF1b3Q7IHdoZW4gcmVxdWVzdGVkLjwvbGk+CisgICAgICAgICAgPGxpPlRvIGV4dHJhY3QgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgSUNVNEosIHNlbGVjdCA8c3Ryb25nPkNoZWNrb3V0IG1vZHVsZTwvc3Ryb25nPgorICAgICAgICAgICAgZnJvbSB0aGUgPHN0cm9uZz5DcmVhdGU8L3N0cm9uZz4gbWVudS4gU3BlY2lmeSAmcXVvdDs8c3Ryb25nPmljdTRqPC9zdHJvbmc+JnF1b3Q7IGZvciB0aGUKKyAgICAgICAgICAgIG1vZHVsZSBuYW1lLiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGNvcHkgb2YgdGhlIHdvcmtzcGFjZSBvbiB5b3VyIGxvY2FsIGhhcmQgZHJpdmUuPC9saT4KKyAgICAgICAgICA8bGk+SW4gdGhlIGZ1dHVyZSwgeW91IGNhbiBkb3dubG9hZCB1cGRhdGVkIGZpbGVzIGZyb20gdGhlIHJlcG9zaXRvcnkgdG8geW91ciBoYXJkIGRyaXZlCisgICAgICAgICAgICB1c2luZyB0aGUgPHN0cm9uZz5VcGRhdGUgc2VsZWN0aW9uPC9zdHJvbmc+IGl0ZW0gaW4gdGhlIDxzdHJvbmc+TW9kaWZ5PC9zdHJvbmc+IG1lbnUuPGJyPgorICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvb2w+CisgICAgICA8L2xpPgorICAgICAgPGxpPkNWUyBjb21tYW5kIGxpbmU6PGJyPgorICAgICAgICBZb3UgY2FuIGFsc28gY2hlY2sgb3V0IHRoZSByZXBvc2l0b3J5IGFub255bW91c2x5IG9uIFVOSVggdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kcywKKyAgICAgICAgYWZ0ZXIgZmlyc3Qgc2V0dGluZyB5b3VyIENWU1JPT1QgdG8gcG9pbnQgdG8gdGhlIElDVTRKIHJlcG9zaXRvcnk6IDxwcmU+PGNvZGU+ZXhwb3J0IENWU1JPT1Q9OnBzZXJ2ZXI6YW5vbmN2c0Bvc3Muc29mdHdhcmUuaWJtLmNvbTovdXNyL2N2cy9pY3U0aiAKK2N2cyBsb2dpbiBDVlMgcGFzc3dvcmQ6IGFub25jdnMgCitjdnMgY2hlY2tvdXQgaWN1NGogCitjdnMgbG9nb3V0PC9jb2RlPjwvcHJlPgorICAgICAgPC9saT4KKyAgICA8L3VsPgorICA8L2xpPgorPC91bD4KKworPHA+Rm9yIG1vcmUgZGV0YWlscyBvbiBob3cgdG8gZG93bmxvYWQgSUNVNEogZGlyZWN0bHkgZnJvbSB0aGUgd2ViIHNpdGUsIHBsZWFzZSBhbHNvIHNlZSA8YQoraHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2Rvd25sb2FkL2luZGV4Lmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb3dubG9hZC9pbmRleC5odG1sPC9hPgorPC9wPgorCis8aDM+PGEgTkFNRT0iV2hhdENvbnRhaW4iPjwvYT48dT5UaGUgU3RydWN0dXJlIGFuZCBDb250ZW50cyBvZiBJQ1U0SjwvdT48L2gzPgorCis8cD5CZWxvdywgPGI+JFJvb3Q8L2I+IGlzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGljdSBkaXJlY3RvcnkgaW4geW91ciBmaWxlIHN5c3RlbSwgbGlrZQorJnF1b3Q7ZHJpdmU6XC4uLlxpY3U0aiZxdW90OyBpbiB5b3VyIGVudmlyb25tZW50LiAmcXVvdDtkcml2ZTpcLi4uJnF1b3Q7IHN0YW5kcyBmb3IgYW55Citkcml2ZSBhbmQgYW55IGRpcmVjdG9yeSBvbiB0aGF0IGRyaXZlIHRoYXQgeW91IGNob3NlIHRvIGluc3RhbGwgaWN1NGogaW50by4gPC9wPgorCis8cD48Yj5JbmZvcm1hdGlvbiBhbmQgYnVpbGQgZmlsZXM6PC9iPjwvcD4KKworPHRhYmxlIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiPgorICA8dHI+CisgICAgPHRkPnJlYWRtZS5odG1sPGJyPgorICAgICAgICAodGhpcyBmaWxlKTwvdGQ+CisgICAgPHRkPkEgZGVzY3JpcHRpb24gb2YgSUNVNEogKEludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgVW5pY29kZSBmb3IgSmF2YSk8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPnJlbGVhc2Vub3Rlcy5odG1sCisgICAgPHRkPkEgZGVzY3JpcHRpb24gb2YgZmVhdHVyZXMgYW5kIGNoYW5nZXMgaW4gdGhpcyBhbmQgcHJpb3IgcmVsZWFzZXMgb2YgSUNVNEo8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPmxpY2Vuc2UuaHRtbDwvdGQ+CisgICAgPHRkPlRoZSBYIGxpY2Vuc2UsIHVzZWQgYnkgSUNVNEo8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPmJ1aWxkLmJhdDwvdGQ+CisgICAgPHRkPkEgY29udmVuaWVuY2UgYmF0IGZpbGUgZm9yIGJ1aWxkaW5nIElDVTRKIHdpdGggQW50IG9uIFdpbmRvd3M8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPmJ1aWxkLnNoPC90ZD4KKyAgICA8dGQ+QSBjb252ZW5pZW5jZSBzaCBmaWxlIGZvciBidWlsZGluZyBJQ1U0SiB3aXRoIEFudCBvbiBVbml4PC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD5idWlsZC54bWw8L3RkPgorICAgIDx0ZD5BbnQgYnVpbGQgZmlsZS4gU2VlIDxhIGhyZWY9IiNIb3dUb0luc3RhbGxKYXZhYyI+SG93IHRvIEluc3RhbGwgYW5kIEJ1aWxkPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8cD48Yj5UaGUgc291cmNlIGRpcmVjdG9yaWVzIG1pcnJvciB0aGUgcGFja2FnZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGUuPC9iPjxicj48Zm9udCBjb2xvcj0icmVkIj5Db3JlPC9mb250PiBwYWNrYWdlcyBiZWNvbWUgcGFydCBvZiB0aGUgSUNVNEogamFyIGZpbGUuPGJyPjxmb250IGNvbG9yPSJyZWQiPkFQSTwvZm9udD4gcGFja2FnZXMgY29udGFpbiBjbGFzc2VzIHdpdGggc3VwcG9ydGVkIEFQSS4gPGJyPjxmb250IGNvbG9yPSJyZWQiPlJpY2hUZXh0PC9mb250PiBjbGFzc2VzIGFyZSBDb3JlIGFuZCBBUEksIGJ1dCBjYW4gYmUgcmVtb3ZlZCBmcm9tIGljdTRqLmphciwgYW5kIGNhbiBiZSBidWlsdCBpbnRvIHRoZWlyIG93biBqYXIuPC9wPgorCis8dGFibGUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgV0lEVEg9IjYyMyI+CisgIDx0cj4KKyAgICA8dGQ+JFJvb3Qvc3JjL2NvbS9pYm0vaWN1L2Rldjxicj48Zm9udCBjb2xvcj0icmVkIj5Ob24tQ29yZSwgTm9uLUFQSTwvZm9udD48L3RkPgorICAgIDx0ZD5QYWNrYWdlcyB1c2VkIGZvciBpbnRlcm5hbCBkZXZlbG9wbWVudDoKKyAgICA8dWw+CisgICAgPGxpPkRhdGE6IGRhdGEgdXNlZCBieSB0ZXN0cyBhbmQgaW4gYnVpbGRpbmcgSUNVPC9saT4KKyAgICA8bGk+RGVtb3M6IENhbGVuZGFyLCBIb2xpZGF5LCBCcmVhayBJdGVyYXRvciwgUnVsZS1iYXNlZCBOdW1iZXIgRm9ybWF0LCBUcmFuc2Zvcm1hdGlvbnM8YnI+KFNlZSA8YSBocmVmPSIjdHJ5aW5nb3V0Ij5iZWxvdzwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRlbW9zLik8L2xpPgorICAgIDxsaT5UZXN0czogQVBJIGFuZCBjb3ZlcmFnZSB0ZXN0cyBvZiBhbGwgZnVuY3Rpb25hbGl0eS48YnI+Rm9yIGluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgdGhlIHRlc3RzLCBzZWUgJFJvb3Qvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3RBbGwuamF2YS48L2xpPgorICAgIDxsaT5Ub29sczogdG9vbHMgdXNlZCB0byBidWlsZCBkYXRhIHRhYmxlcywgZXRjLjwvbGk+PC91bD48L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPiRSb290L3NyYy9jb20vaWJtL2ljdS9pbXBsPGJyPjxmb250IGNvbG9yPSJyZWQiPkNvcmUsIE5vbi1BUEk8L2ZvbnQ+PC90ZD4KKyAgICA8dGQ+VGhlc2UgYXJlIHV0aWxpdHkgY2xhc3NlcyB1c2VkIGZyb20gZGlmZmVyZW50IElDVTRKIGNvcmUgcGFja2FnZXMuPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD4kUm9vdC9zcmMvY29tL2libS9pY3UvbGFuZzxicj48Zm9udCBjb2xvcj0icmVkIj5Db3JlLCBBUEk8L2ZvbnQ+PC90ZD4KKyAgICA8dGQ+Q2hhcmFjdGVyIHByb3BlcnRpZXMgcGFja2FnZS48L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPiRSb290L3NyYy9jb20vaWJtL2ljdS9tYXRoPGJyPjxmb250IGNvbG9yPSJyZWQiPkNvcmUsIEFQSTwvZm9udD48L3RkPgorICAgIDx0ZD5BZGRpdGlvbmFsIG1hdGggY2xhc3Nlcy48L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPiRSb290L3NyYy9jb20vaWJtL2ljdS90ZXh0PGJyPjxmb250IGNvbG9yPSJyZWQiPkNvcmUsIEFQSTwvZm9udD48L3RkPgorICAgIDx0ZD5BZGRpdGlvbmFsIHRleHQgY2xhc3Nlcy4gIFRoZXNlIGFkZCB0bywgYW5kIGluIHNvbWUgY2FzZXMgcmVwbGFjZSwgcmVsYXRlZCBjb3JlIEphdmEgY2xhc3NlczoKKyAgICAgIDx1bD4KKyAgICAgIDxsaT5BcmFiaWMgc2hhcGluZworICAgICAgPGxpPkJyZWFrIGl0ZXJhdGlvbgorICAgICAgPGxpPkRhdGUgZm9ybWF0dGluZworICAgICAgPGxpPk51bWJlciBmb3JtYXR0aW5nCisgICAgICA8bGk+VHJhbnNsaXRlcmF0aW9uCisgICAgICA8bGk+Tm9ybWFsaXphdGlvbgorICAgICAgPGxpPlN0cmluZyBtYW5pcHVsYXRpb24KKyAgICAgIDxsaT5Db2xsYXRpb24KKyAgICAgIDxsaT5TdHJpbmcgc2VhcmNoCisgICAgICA8bGk+VW5pY29kZSBjb21wcmVzc2lvbgorICAgICAgPGxpPlVuaWNvZGUgc2V0cworICAgIDwvdWw+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD4kUm9vdC9zcmMvY29tL2libS9pY3UvdXRpbDxicj48Zm9udCBjb2xvcj0icmVkIj5Db3JlLCBBUEk8L2ZvbnQ+PC90ZD4KKyAgICA8dGQ+QWRkaXRpb25hbCB1dGlsaXR5IGNsYXNzZXM6CisgICAgPHVsPgorICAgIDxsaT5DYWxlbmRhcnMgLSBHcmVnb3JpYW4sIEJ1ZGRoaXN0LCBIZWJyZXcsIElzbGFtaWMsIEphcGFuZXNlCisgICAgPGxpPkhvbGlkYXk8L2xpPgorICAgIDxsaT5UaW1lWm9uZTwvbGk+CisgICAgPGxpPlZlcnNpb25JbmZvPC9saT4KKyAgICA8bGk+SXRlcmF0aW9uPC9saT4KKyAgICA8L3VsPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+JFJvb3Qvc3JjL2NvbS9pYm0vcmljaHRleHQ8YnI+PGZvbnQgY29sb3I9InJlZCI+UmljaFRleHQ8L2ZvbnQ+PC90ZD4gCisgICAgPHRkPlN0eWxlZCB0ZXh0IGVkaXRpbmcKKyAgICBwYWNrYWdlLiBUaGlzIGluY2x1ZGVzIGRlbW9zLCB0ZXN0cywgYW5kIEdVSXMgZm9yIGVkaXRpbmcgYW5kCisgICAgZGlzcGxheWluZyBzdHlsZWQgdGV4dC4gIFRoZSByaWNodGV4dCBwYWNrYWdlIHByb3ZpZGVzIGEKKyAgICBzY3JvbGxhYmxlIGRpc3BsYXksIHR5cGluZywgYXJyb3cta2V5IHN1cHBvcnQsIHRhYnMsIGFsaWdubWVudCBhbmQKKyAgICBqdXN0aWZpY2F0aW9uLCB3b3JkLSBhbmQgc2VudGVuY2Utc2VsZWN0aW9uIChieSBkb3VibGUtY2xpY2tpbmcKKyAgICBhbmQgdHJpcGxlLWNsaWNraW5nLCByZXNwZWN0aXZlbHkpLCB0ZXh0IHN0eWxlcywgY2xpcGJvYXJkCisgICAgb3BlcmF0aW9ucyAoY3V0LCBjb3B5IGFuZCBwYXN0ZSkgYW5kIGEgbG9nIG9mIGNoYW5nZXMgZm9yCisgICAgdW5kby1yZWRvLiAgUmljaHRleHQgdXNlcyBKYXZhJ3MgVGV4dExheW91dCBhbmQgY29tcGxleAorICAgIHRleHQgc3VwcG9ydCAocHJvdmlkZWQgdG8gU3VuIGJ5IHRoZSBJQ1U0SiB0ZWFtKS48L3RkPgorICA8L3RyPgorPC90YWJsZT4KKworPHA+PGI+QnVpbGRpbmcgSUNVNEogY3JlYXRlcyBhbmQgcG9wdWxhdGVzIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXM6PC9iPiA8L3A+CisKKzx0YWJsZSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIj4KKyAgPHRyPgorICAgIDx0ZD4kUm9vdC9jbGFzc2VzPC90ZD4KKyAgICA8dGQ+Y29udGFpbnMgYWxsIGNsYXNzIGZpbGVzPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD4kUm9vdC9kb2M8L3RkPgorICAgIDx0ZD5jb250YWlucyBKYXZhRG9jIGZvciBhbGwgcGFja2FnZXM8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKworPHA+PGI+RGF0YSBvcmdhbml6YXRpb246PC9iPiA8L3A+CisKKzxwPklDVTRKIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorCis8dGFibGUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgV0lEVEg9IjYyMyI+CisgIDx0cj4KKyAgICA8dGQ+PGNvZGU+Y29tLmlibS5pY3UuaW1wbC5kYXRhPC9jb2RlPjwvdGQ+CisgICAgPHRkPkhvbGRzIGRhdGEgdXNlZCBieSB0aGUgSUNVNEogY29yZSBwYWNrYWdlcyAoPGNvZGU+Y29tLmlibS5pY3UubGFuZzwvY29kZT4sIDxjb2RlPmNvbS5pYm0uaWN1LnRleHQ8L2NvZGU+LCA8Y29kZT5jb20uaWJtLmljdS51dGlsPC9jb2RlPiwgPGNvZGU+Y29tLmlibS5pY3UubWF0aDwvY29kZT4gYW5kIDxjb2RlPmNvbS5pYm0uaWN1LnRleHQ8L2NvZGU+KS4gSW4gcGFydGljdWxhciwgYWxsIHJlc291cmNlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBoZXJlLjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+PGNvZGU+Y29tLmlibS5pY3UuZGV2LmRhdGE8L2NvZGU+PC90ZD4KKyAgICA8dGQ+SG9sZHMgZGF0YSB0aGF0IGlzIG5vdCBwYXJ0IG9mIElDVTRKIGNvcmUsIGJ1dCByYXRoZXIgcGFydCBvZiBhIHRlc3QsIHNhbXBsZSwgb3IgZGVtby48L3RkPgorICA8L3RyPgorPC90YWJsZT4KKworPGgzPjx1PjxhIG5hbWU9IkFQSSI+PC9hPldoZXJlIHRvIGdldCBEb2N1bWVudGF0aW9uPC91PjwvaDM+CisKKzxwPlRoZSA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1L3VzZXJndWlkZS8iPklDVSB1c2VyJ3MgZ3VpZGU8L2E+IGNvbnRhaW5zIGxvdHMgb2YgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBJQ1UsIGluIGl0cyBDLCBDKyssIGFuZCBKYXZhIGluY2FybmF0aW9ucy48L3A+CisKKzxwPlRoZSBjb21wbGV0ZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgSUNVNEogKGphdmFkb2MpIGlzIGF2YWlsYWJsZSBvbiB0aGUgSUNVNEogd2ViIHNpdGUsIGFuZCBjYW4gYmUgYnVpbHQgZnJvbSB0aGUgc291cmNlczogCisKKzx1bD4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvaW5kZXguaHRtbCI+SW5kZXggdG8gYWxsIElDVTRKIEFQSTwvYT48L2xpPgorICA8bGk+SW50ZXJuYXRpb25hbCBDYWxlbmRhcnMgJiMxNTA7IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdXRpbC9Jc2xhbWljQ2FsZW5kYXIuaHRtbCI+SXNsYW1pYzwvYT4sCisgICAgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2RvYy9jb20vaWJtL2ljdS91dGlsL0J1ZGRoaXN0Q2FsZW5kYXIuaHRtbCI+QnVkZGhpc3Q8L2E+LCA8YQorICAgIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdXRpbC9IZWJyZXdDYWxlbmRhci5odG1sIj5IZWJyZXc8L2E+LCA8YQorICAgIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdXRpbC9KYXBhbmVzZUNhbGVuZGFyLmh0bWwiPkphcGFuZXNlPC9hPi48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2RvYy9jb20vaWJtL2ljdS90ZXh0L05vcm1hbGl6ZXIuaHRtbCI+VW5pY29kZSBOb3JtYWxpemF0aW9uPC9hPiAmIzE1MDsKKyAgICBDYW5vbmljYWwgdGV4dCByZXByZXNlbnRhdGlvbiBmb3IgVzNDLjwvbGk+CisgIDxsaT48YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG9jL2NvbS9pYm0vaWN1L3RleHQvTnVtYmVyRm9ybWF0Lmh0bWwiPk51bWJlciBGb3JtYXQgRW5oYW5jZW1lbnRzPC9hPiAmIzE1MDsKKyAgICBTY2llbnRpZmljIE5vdGF0aW9uLCBTcGVsbGVkIG91dC48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2RvYy9jb20vaWJtL2ljdS90ZXh0L0JyZWFrSXRlcmF0b3IuaHRtbCI+RW5oYW5jZWQgd29yZC1icmVhayBkZXRlY3Rpb248L2E+CisgICAgJiMxNTA7IFJ1bGUtYmFzZWQsIHN1cHBvcnRzIFRoYWk8L2xpPgorPGxpPjxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRvci5odG1sIj5UcmFuc2xpdGVyYXRpb248L2E+ICYjMTUwOyBBIGdlbmVyYWwgZnJhbWV3b3JrIGZvciBvbnZlcnRpbmcgdGV4dCBmcm9tIG9uZSBmb3JtYXQgdG8gYW5vdGhlciwgZS5nLiBDeXJpbGxpYyB0byBMYXRpbiwgb3IgSGV4IHRvIFVuaWNvZGUuCisgIDxsaT5Vbmljb2RlIFRleHQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2RvYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVDb21wcmVzc29yLmh0bWwiPkNvbXByZXNzaW9uPC9hPiAmYW1wOworICAgIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlRGVjb21wcmVzc29yLmh0bWwiPkRlY29tcHJlc3Npb248L2E+ICYjMTUwOyAyOjEKKyAgICBjb21wcmVzc2lvbiBvbiBFbmdsaXNoIFVuaWNvZGUgdGV4dC48L2xpPgorICA8bGk+Q29sbGF0aW9uIC0gPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2RvYy9jb20vaWJtL2ljdS90ZXh0L1J1bGVCYXNlZENvbGxhdG9yLmh0bWwiPlJ1bGUtYmFzZWQgc29ydGluZzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdGV4dC9TdHJpbmdTZWFyY2guaHRtbCI+RWZmaWNpZW50IG11bHRpLWxpbmd1YWwgc2VhcmNoaW5nPC9hPiA8L2xpPgorPC91bD4KKworPGgzPjxhIE5BTUU9Ikhvd1RvSW5zdGFsbEphdmFjIj48L2E+PHU+SG93IHRvIEluc3RhbGwgYW5kIEJ1aWxkPC91PjwvaDM+CisKKzxwPlRvIGluc3RhbGwgSUNVNEosIHNpbXBseSBwbGFjZSB0aGUgcHJlYnVpbHQgamFyIGZpbGUgPHN0cm9uZz5pY3U0ai5qYXI8L3N0cm9uZz4gb24geW91cgorSmF2YSBDTEFTU1BBVEguJm5ic3A7IE5vIG90aGVyIGZpbGVzIGFyZSBuZWVkZWQuPC9wPgorCis8cD5UbyBidWlsZCBJQ1U0SiwgeW91IHdpbGwgbmVlZCBhIEphdmEyIEpESyBhbmQgdGhlIEFudCBidWlsZCBzeXN0ZW0uCitXZSBzdHJvbmdseSByZWNvbW1lbmQgdXNpbmcgdGhlIEFudCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgSUNVNEo6PC9wPgorCis8dWw+CisgIDxsaT5JdCdzIHJlY29tbWVuZGVkIHRvIGluc3RhbGwgYm90aCB0aGUgSkRLIGFuZCBBbnQgc29tZXdoZXJlIDxlbT5vdXRzaWRlPC9lbT4gdGhlIElDVTRKCisgICAgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgb24gTGludXggeW91IG1pZ2h0IGluc3RhbGwgdGhlc2UKKyAgICBpbiAvdXNyL2xvY2FsLjwvbGk+CisgIDxsaT5JbnN0YWxsIGEgcmVjZW50IEpESywgdmVyc2lvbiAxLjMueCBvciAxLjQueCB3aWxsIHdvcmsuPC9saT4KKyAgPGxpPjxwPk5leHQgaW5zdGFsbCB0aGUgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9hbnQvIj48c3Ryb25nPkFudDwvc3Ryb25nPjwvYT4gYnVpbGQKKyAgICBzeXN0ZW0sIHBhcnQgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJ3MgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy8iPjxzdHJvbmc+SmFrYXJ0YTwvc3Ryb25nPjwvYT4KKyAgICBwcm9qZWN0LiBBbnQgaXMgYSBwb3J0YWJsZSwgSmF2YS1iYXNlZCBidWlsZCBzeXN0ZW0gc2ltaWxhciB0byBtYWtlLiBJQ1U0SiB1c2VzIEFudAorICAgIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBubyBvdGhlciBkZXBlbmRlbmNpZXMsIGl0J3MgcG9ydGFibGUsIGFuZCBpdCdzIGVhc2llciB0byBtYW5hZ2UgdGhhbgorICAgIGEgY29sbGVjdGlvbiBvZiBtYWtlZmlsZXMuIFdlIGN1cnJlbnRseSBidWlsZCBJQ1U0SiB1c2luZyBhIHNpbmdsZSBtYWtlZmlsZSBvbiBib3RoCisgICAgV2luZG93cyA5eCBhbmQgTGludXggdXNpbmcgQW50LiAgVGhlIGJ1aWxkIHN5c3RlbSByZXF1aXJlcyBBbnQgMS40IG9yIGxhdGVyLjwvcD4KKyAgICA8cD5JbnN0YWxsaW5nIEFudCBpcyBzdHJhaWdodGZvcndhcmQuIERvd25sb2FkIGl0IChzZWUgPGEKKyAgICBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2Rvd25sb2Fkcy9iaW5pbmRleC5odG1sIj5odHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2Rvd25sb2Fkcy9iaW5pbmRleC5odG1sPC9hPiksCisgICAgZXh0cmFjdCBpdCBvbnRvIHlvdXIgc3lzdGVtLCBzZXQgc29tZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZCBhZGQgaXRzIGJpbiBkaXJlY3RvcnkgdG8KKyAgICB5b3VyIHBhdGguIEZvciBleGFtcGxlOjxwcmU+ICAgIHNldCBKQVZBX0hPTUU9QzpcamRrMS4zLjEKKyAgICBzZXQgQU5UX0hPTUU9QzpcamFrYXJ0YS1hbnQKKyAgICBzZXQgUEFUSD0lUEFUSCU7JUFOVF9IT01FJVxiaW48L3ByZT48L3A+CisgICAgPHA+U2VlIHRoZSBjdXJyZW50IEFudCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLjwvcD4KKyAgPC9saT4KKzwvdWw+CisKKzxwPk9uY2UgdGhlIEpESyBhbmQgQW50IGFyZSBpbnN0YWxsZWQsIGJ1aWxkaW5nIGlzIGp1c3QgYSBtYXR0ZXIgb2YKK3R5cGluZyA8c3Ryb25nPmFudDwvc3Ryb25nPiBpbiB0aGUgSUNVNEogcm9vdCBkaXJlY3RvcnkuIFRoaXMgY2F1c2VzCit0aGUgQW50IGJ1aWxkIHN5c3RlbSB0byBwZXJmb3JtIGEgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5IHRoZSBmaWxlCis8c3Ryb25nPmJ1aWxkLnhtbDwvc3Ryb25nPiwgbG9jYXRlZCBpbiB0aGUgSUNVNEogcm9vdCBkaXJlY3RvcnkuIFlvdQorY2FuIGdpdmUgQW50IG9wdGlvbnMgbGlrZSAtdmVyYm9zZSwgYW5kIHlvdSBjYW4gc3BlY2lmeSB0YXJnZXRzLiBBbnQKK3dpbGwgb25seSBidWlsZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIGFuZCB3aWxsIHJlc29sdmUgZGVwZW5kZW5jaWVzCitwcm9wZXJseS4gIEZvciBleGFtcGxlOjwvcD4KKzxibG9ja3F1b3RlPgorICA8cHJlPkY6XGljdTRqJmd0O2FudCB0ZXN0cworQnVpbGRmaWxlOiBidWlsZC54bWwKK1Byb2plY3QgYmFzZSBkaXIgc2V0IHRvOiBGOlxpY3U0agorRXhlY3V0aW5nIFRhcmdldDogY29yZQorQ29tcGlsaW5nIDcxIHNvdXJjZSBmaWxlcyB0byBGOlxpY3U0alxjbGFzc2VzCitFeGVjdXRpbmcgVGFyZ2V0OiB0ZXN0cworQ29tcGlsaW5nIDI0IHNvdXJjZSBmaWxlcyB0byBGOlxpY3U0alxjbGFzc2VzCitDb21wbGV0ZWQgaW4gMTkgc2Vjb25kczwvcHJlPgorPC9ibG9ja3F1b3RlPgorCis8cD5UaGUgZm9sbG93aW5nIGFyZSBzb21lIHRhcmdldHMgdGhhdCB5b3UgY2FuIGdpdmUgYWZ0ZXIgPHN0cm9uZz5hbnQ8L3N0cm9uZz4uICBGb3IgbW9yZQordGFyZ2V0cywgc2VlIHRoZSBidWlsZC54bWwgZmlsZTo8L3A+Cis8ZGl2IGFsaWduPSJsZWZ0Ij4KKworPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjAiPgorICA8dHI+CisgICAgPHRkPmFsbDwvdGQ+CisgICAgPHRkPkJ1aWxkIGFsbCB0YXJnZXRzLjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+Y29yZTwvdGQ+CisgICAgPHRkPkJ1aWxkIHRoZSBtYWluIGNsYXNzIGZpbGVzIGluIHRoZSBzdWJkaXJlY3RvcnkgPHN0cm9uZz5jbGFzc2VzPC9zdHJvbmc+LiBJZiBubyB0YXJnZXQKKyAgICBpcyBzcGVjaWZpZWQsIGNvcmUgaXMgYXNzdW1lZC48L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPnRlc3RzPC90ZD4KKyAgICA8dGQ+QnVpbGQgdGhlIHRlc3QgY2xhc3MgZmlsZXMuPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD5kZW1vczwvdGQ+CisgICAgPHRkPkJ1aWxkIHRoZSBkZW1vcy48L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPnRvb2xzPC90ZD4KKyAgICA8dGQ+QnVpbGQgdGhlIHRvb2xzLjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+ZG9jczwvdGQ+CisgICAgPHRkPlJ1biBqYXZhZG9jIG92ZXIgdGhlIG1haW4gY2xhc3MgZmlsZXMsIGdlbmVyYXRpbmcgYW4gSFRNTCBkb2N1bWVudGF0aW9uIHRyZWUgaW4gdGhlCisgICAgc3ViZGlyZWN0b3J5IDxzdHJvbmc+ZG9jPC9zdHJvbmc+LjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+amFyPC90ZD4KKyAgICA8dGQ+Q3JlYXRlIGEgamFyIGFyY2hpdmUgPHN0cm9uZz5pY3U0ai5qYXI8L3N0cm9uZz4gaW4gdGhlIHJvb3QgSUNVNEogZGlyZWN0b3J5IGNvbnRhaW5pbmcKKyAgICB0aGUgbWFpbiBjbGFzcyBmaWxlcy48L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPnppcDwvdGQ+CisgICAgPHRkPkNyZWF0ZSBhIHppcCBhcmNoaXZlIG9mIHRoZSBzb3VyY2UsIGRvY3MsIGFuZCBqYXIgZmlsZSBmb3IgZGlzdHJpYnV0aW9uLiBUaGUgemlwIGZpbGUgPHN0cm9uZz5pY3U0allZWVlNTURELnppcDwvc3Ryb25nPgorICAgIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZGlyZWN0b3J5IDxlbT5hYm92ZTwvZW0+IHRoZSByb290IElDVTRKIGRpcmVjdG9yeSwgd2hlcmUgWVlZWU1NREQKKyAgICBpcyB0b2RheSdzIGRhdGUuIEFueSBleGlzdGluZyBmaWxlIG9mIHRoYXQgbmFtZSB3aWxsIGJlIG92ZXJ3cml0dGVuLjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+emlwc3JjPC90ZD4KKyAgICA8dGQ+TGlrZSB0aGUgPHN0cm9uZz56aXA8L3N0cm9uZz4gdGFyZ2V0LCB3aXRob3V0IHRoZSBkb2NzIGFuZCB0aGUgamFyIGZpbGUuIFRoZSB6aXAgZmlsZSA8c3Ryb25nPmljdTRqc3JjWVlZWU1NREQuemlwPC9zdHJvbmc+CisgICAgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBkaXJlY3RvcnkgPGVtPmFib3ZlPC9lbT4gdGhlIHJvb3QgSUNVNEogZGlyZWN0b3J5LjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+cmljaGVkaXQ8L3RkPgorICAgIDx0ZD5CdWlsZCB0aGUgcmljaGVkaXQgY29yZSBjbGFzcyBmaWxlcyBhbmQgdGVzdHMuCisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+cmljaGVkaXRKYXI8L3RkPgorICAgIDx0ZD5DcmVhdGUgdGhlIHJpY2hlZGl0IGphciBmaWxlICh3aGljaCBjb250YWlucyBvbmx5IHRoZSByaWNoZWRpdCBjb3JlIGNsYXNzIGZpbGVzKS4KKyAgICBUaGUgZmlsZSA8c3Ryb25nPnJpY2hlZGl0Lmphcjwvc3Ryb25nPgorICAgIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgPHN0cm9uZz4uL3JpY2hlZGl0PC9zdHJvbmc+IHN1YmRpcmVjdG9yeS4gQW55IGV4aXN0aW5nIGZpbGUgb2YgCisgICAgdGhhdCBuYW1lIHdpbGwgYmUgb3ZlcndyaXR0ZW4uPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD5yaWNoZWRpdFppcDwvdGQ+CisgICAgPHRkPkNyZWF0ZSBhIHppcCBhcmNoaXZlIG9mIHRoZSByaWNoZWRpdCBkb2NzIGFuZCBqYXIgZmlsZSBmb3IgZGlzdHJpYnV0aW9uLiBUaGUgemlwIGZpbGUgPHN0cm9uZz5yaWNoZWRpdC56aXA8L3N0cm9uZz4KKyAgICB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIDxzdHJvbmc+Li9yaWNoZWRpdDwvc3Ryb25nPiBzdWJkaXJlY3RvcnkuIEFueSBleGlzdGluZyBmaWxlIG9mIAorICAgIHRoYXQgbmFtZSB3aWxsIGJlIG92ZXJ3cml0dGVuLjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+Y2xlYW48L3RkPgorICAgIDx0ZD5SZW1vdmUgYWxsIGJ1aWx0IHRhcmdldHMsIGxlYXZpbmcgdGhlIHNvdXJjZS48L3RkPgorICA8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorCis8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgQW50IGRvY3VtZW50YXRpb24gYW5kIHRoZSA8c3Ryb25nPmJ1aWxkLnhtbDwvc3Ryb25nPgorZmlsZS48L3A+CisKKzxwPkFmdGVyIGRvaW5nIGEgYnVpbGQgaXQgaXMgYSBnb29kIGlkZWEgdG8gcnVuIGFsbCB0aGUgaWN1NGogdGVzdHMgYnkgdHlwaW5nIDxicj4mcXVvdDtqYXZhCistY2xhc3NwYXRoICRSb290L2NsYXNzZXMgLURVbmljb2RlRGF0YT0kUm9vdC9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvdW5pY29kZSBjb20uaWJtLmRldi50ZXN0LlRlc3RBbGwmcXVvdDsuPC9wPgorCis8cD4oSWYgeW91IGFyZSBhbGxlcmdpYyB0byBidWlsZCBzeXN0ZW1zLCBhcyBhbiBhbHRlcm5hdGl2ZSB0byB1c2luZworQW50IHlvdSBjYW4gYnVpbGQgYnkgcnVubmluZyBqYXZhYyBhbmQgamF2YWRvYyBkaXJlY3RseS4gVGhpcworaXMgbm90IHJlY29tbWVuZGVkLiBZb3UgbWF5IGhhdmUgdG8gbWFudWFsbHkgY3JlYXRlIGRlc3RpbmF0aW9uCitkaXJlY3Rvcmllcy4pPC9wPgorCis8aDM+PGEgbmFtZT0idHJ5aW5nb3V0Ij48L2E+PHU+VHJ5aW5nIE91dCBJQ1U0SjwvdT48L2gzPgorCis8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IHRoZSBkZW1vcyBwcm92aWRlZCB3aXRoIElDVTRKIGFyZSBmb3IgdGhlCittb3N0IHBhcnQgdW5kb2N1bWVudGVkLiAgVGhpcyBsaXN0IGNhbiBzaG93IHlvdSB3aGVyZSB0byBsb29rLCBidXQgeW91J2xsCitoYXZlIHRvIGV4cGVyaW1lbnQgYSBiaXQuICBUaGUgZGVtb3MgKHdpdGggdGhlCitleGNlcHRpb24gb2YgcmljaGVkaXQpIGFyZSA8c3Ryb25nPnVuc3VwcG9ydGVkPC9zdHJvbmc+IGFuZCBtYXkgY2hhbmdlCitvciBkaXNhcHBlYXIgd2l0aG91dCBub3RpY2UuPC9wPgorPHA+VGhlIGljdTRqLmphciBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGNvcmUgSUNVNEogY2xhc3Nlcywgbm90IHRoZQorZGVtbyBjbGFzc2VzLCBzbyB1bmxlc3MgeW91IGJ1aWxkIElDVTRKIHRoZXJlIGlzIGxpdHRsZSB0byB0cnkgb3V0LgorCis8aDQ+UmljaCBFZGl0PC9oND4KK1RvIHRyeSBvdXQgdGhlIDxzdHJvbmc+cmljaGVkaXQ8L3N0cm9uZz4gcGFja2FnZSwgZmlyc3QgYnVpbGQgdGhlIHJpY2hlZGl0SmFyIHRhcmdldC4KK1RoaXMgaXMgYSAncnVubmFibGUnIGphciBmaWxlLiAgVG8gcnVuIHRoZSByaWNoZWRpdCBkZW1vLCB0eXBlOiAKKzx0dD48YmxvY2txdW90ZT4gIGphdmEgLWphciAkUm9vdC9yaWNoZWRpdC9yaWNoZWRpdC5qYXI8L2Jsb2NrcXVvdGU+PC90dD4KKworVGhpcyB3aWxsIHByZXNlbnQgYW4gZW1wdHkgZWRpdCBwYW5lIHdpdGggYW4gYXd0IGludGVyZmFjZS48L3A+CisKKzxwPldpdGggYSBmdWxsZXIgY29tbWFuZCBsaW5lIHlvdSBjYW4gdHJ5IG91dCBvdGhlciBvcHRpb25zLCBmb3IgZXhhbXBsZToKKzx0dD48YmxvY2txdW90ZT4gICBqYXZhIC1jbGFzc3BhdGggJFJvb3QvcmljaGVkaXQvcmljaGVkaXQuamFyIGNvbS5pYm0ucmljaHRleHQuZGVtby5FZGl0RGVtbyBbLXN3aW5nXVtmaWxlXTwvYmxvY2txdW90ZT48L3R0PgorVGhpcyB3aWxsIHVzZSBhbiBhd3QgR1VJLCBvciBhIHN3aW5nIEdVSSBpZgorPHR0Pi1zd2luZzwvdHQ+IGlzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSXQgd2lsbCBvcGVuIGEgdGV4dAorZmlsZSBpZiBvbmUgaXMgcHJvdmlkZWQsIG90aGVyd2lzZSBpdCB3aWxsIG9wZW4gYSBibGFuayBwYWdlLiAgQ2xpY2sKK3RvIHR5cGUuPC9wPgorPHA+CitZb3UgY2FuIGFkZCB0YWJzIHRvIHRoZSB0YWIgcnVsZXIgYnkgY2xpY2tpbmcgaW4gdGhlIHJ1bGVyIHdoaWxlIGhvbGRpbmcgZG93biB0aGUgY29udHJvbCBrZXkuCitDbGlja2luZyBvbiBhbiBleGlzdGluZyB0YWIgY2hhbmdlcyBiZXR3ZWVuIGxlZnQsIHJpZ2h0LCBjZW50ZXIsIGFuZCBkZWNpbWFsIHRhYnMuICBEcmFnZ2luZworYSB0YWIgbW92ZXMgaXQsIGRyYWdnaW5nIGl0IG9mZiB0aGUgcnVsZXIgcmVtb3ZlcyBpdC48L3A+Cis8cD4KK1lvdSBjYW4gZXhwZXJpbWVudCB3aXRoIGNvbXBsZXggdGV4dCBieSB1c2luZyB0aGUga2V5bWFwIGZ1bmN0aW9ucy4KK1BsZWFzZSBub3RlIHRoYXQgdGhlc2UgYXJlIG1haW5seSBmb3IgZGVtbyBwdXJwb3NlcywgZm9yIHJlYWwgd29yaword2l0aCBBcmFiaWMgb3IgSGVicmV3IHlvdSB3aWxsIHdhbnQgdG8gdXNlIGFuIGlucHV0IG1ldGhvZC4gIFlvdSB3aWxsCituZWVkIHRvIHVzZSBhIGZvbnQgdGhhdCBzdXBwb3J0cyBBcmFiaWMgb3IgSGVicmV3LCAnTHVjaWRhIFNhbnMnIChwcm92aWRlZAord2l0aCBKYXZhKSBzdXBwb3J0cyB0aGVzZSBsYW5ndWFnZXMuPC9wPgorCis8aDQ+T3RoZXIgZGVtb3M8L2g0PgorPHA+VGhlIG90aGVyIGRlbW8gcHJvZ3JhbXMgYXJlIDxzdHJvbmc+bm90IHN1cHBvcnRlZDwvc3Ryb25nPiBhbmQgZXhpc3Qgb25seSB0byBsZXQgeW91CitleHBlcmltZW50IHdpdGggdGhlIElDVTRKIGNsYXNzZXMuICBGaXJzdCwgYnVpbGQgSUNVNEogdXNpbmcgPHR0PmFudCZuYnNwO2FsbDwvdHQ+LiAgVGhlbiB0cnkKK29uZSBvZiB0aGUgZm9sbG93aW5nOgorPHVsPgorPGxpPjx0dD5qYXZhIC1jbGFzc3BhdGggY2xhc3NlcyBjb20uaWJtLmljdS5kZXYuZGVtby5jYWxlbmRhci5DYWxlbmRhckFwcDwvdHQ+Cis8bGk+PHR0PmphdmEgLWNsYXNzcGF0aCBjbGFzc2VzIGNvbS5pYm0uaWN1LmRldi5kZW1vLmhvbGlkYXkuSG9saWRheUNhbGVuZGFyRGVtbzwvdHQ+Cis8bGk+PHR0PmphdmEgLWNsYXNzcGF0aCBjbGFzc2VzIGNvbS5pYm0uaWN1LmRldi5kZW1vLnJiYmkuVGV4dEJvdW5kRGVtbzwvdHQ+PGJyPihDbGljayBpbiB0aGUgdGV4dCwgdGhlbiB1c2UgPHR0PmN0cmwtTjwvdHQ+IGFuZCA8dHQ+Y3RybC1QPC90dD4gdG8gc2VsZWN0IHRoZSBuZXh0IG9yIHByZXZpb3VzIGJsb2NrIG9mIHRleHQuKQorPGxpPjx0dD5qYXZhIC1jbGFzc3BhdGggY2xhc3NlcyBjb20uaWJtLmljdS5kZXYuZGVtby5yYm5mLlJibmZEZW1vPC90dD4KKzxsaT48dHQ+amF2YSAtY2xhc3NwYXRoIGNsYXNzZXMgY29tLmlibS5pY3UuZGV2LmRlbW8udHJhbnNsaXQuRGVtbzwvdHQ+Cis8L3VsPgorPC9wPgorCis8YSBuYW1lPSJyZXNvdXJjZXMiPgorPGgzPjx1PklDVTRKIFJlc291cmNlIEluZm9ybWF0aW9uPC91PjwvaDM+Cis8L2E+CitTdGFydGluZyB3aXRoIHJlbGVhc2UgMi4xLCBJQ1U0SiBpbmNsdWRlcyBpdHMgb3duIAorcmVzb3VyY2UgaW5mb3JtYXRpb24KK3doaWNoIGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIEpESyByZXNvdXJjZSBpbmZvcm1hdGlvbi4gIFRoZQorbmV3IElDVTRKIGluZm9ybWF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGluZm9ybWF0aW9uIGluIElDVTRDIGFuZAordWx0aW1hdGVseSBkZXJpdmVzIGZyb20gdGhlIHNhbWUgc291cmNlLiAgVGhpcyBhbGxvd3MgSUNVNEogMi4xIGFuZCBhYm92ZSAKK3RvIGJlCitidWlsdCBvbiwgYW5kIHJ1biBvbiwgSkRLIDEuNC4KKzwvcD4KKzxwPgorQnkgZGVmYXVsdCB0aGUgSUNVNEogZGlzdHJpYnV0aW9uIGluY2x1ZGVzIGFsbCBvZiB0aGUgbmV3IHJlc291cmNlCitpbmZvcm1hdGlvbi4gIEl0IGlzIGxvY2F0ZWQgaW4gdGhlIHBhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhLCBhcyBhCitzZXQgb2YgY2xhc3MgZmlsZXMgbmFtZWQgIkxvY2FsZUVsZW1lbnRzIiBmb2xsb3dlZCBieSB0aGUgbmFtZXMgb2YKK2xvY2FsZXMgaW4gdGhlIGZvcm0gX3h4X1lZX1paWlosIHdoZXJlICd4eCcgaXMgdGhlIHR3by1sZXR0ZXIgbGFuZ3VhZ2UKK2NvZGUsICdZWScgaXMgdGhlIGNvdW50cnkgY29kZSwgYW5kICdaWicgKHdoaWNoIGNhbiBiZSBhbnkgbGVuZ3RoKSBpcworYSB2YXJpYW50LiAgTWFueSBvZiB0aGVzZSBmaWVsZHMgY2FuIGJlIG9taXR0ZWQuICBMb2NhbGUgbmFtaW5nIGlzCitkb2N1bWVudGVkIHRoZSBMb2NhbGUgY2xhc3MsIGphdmEudXRpbC5Mb2NhbGUsIGFuZCB0aGUgdXNlIG9mIHRoZXNlCituYW1lcyBpbiBzZWFyY2hpbmcgZm9yIHJlc291cmNlcyBpcyBkb2N1bWVudGVkIGluCitqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGUuCis8L3A+Cis8cD4KK1NvbWUgb2YgdGhlc2UgZmlsZXMgcmVxdWlyZSBzZXBhcmF0ZSBiaW5hcnkgZGF0YS4gIFRoZSBuYW1lcyBvZiB0aGUKK2JpbmFyeSBkYXRhIGZpbGVzIHN0YXJ0IHdpdGggIkNvbGxhdGlvbkVsZW1lbnRzIiwgdGhlbiB0aGUKK2NvcnJlc3BvbmRpbmcgTG9jYWxlIHN0cmluZywgYW5kIGVuZCB3aXRoICcucmVzJy4gIEFub3RoZXIgZGF0YSBmaWxlCisob25seSBvbmUgYXQgdGhlIG1vbWVudCkgc3RhcnRzIHdpdGggdGhlIG5hbWUgIkJyZWFrRGljdGlvbmFyeURhdGEiLAordGhlIGNvcnJlc3BvbmRpbmcgTG9jYWxlIHN0cmluZywgYW5kIGVuZHMgd2l0aCAnLnVjcycuCis8L3A+Cis8cD4KK1NvbWUgb2YgdGhlIExvY2FsZUVsZW1lbnRzIGZpbGVzIHNoYXJlIGRhdGEgd2l0aCBvdGhlciBMb2NhbGVFbGVtZW50cworZmlsZXMsIGJlY2F1c2Ugc29tZSBMb2NhbGUgbmFtZXMgaGF2ZSBjaGFuZ2VkLiBGb3IgZXhhbXBsZSwgaGVfSUwgdXNlZAordG8gYmUgaXdfSUwuICBJbiBvcmRlciB0byBzdXBwb3J0IGJvdGggbmFtZXMgYnV0IG5vdCBkdXBsaWNhdGUgdGhlCitkYXRhLCBvbmUgb2YgdGhlIGNsYXNzIGZpbGVzIHJlZmVycyB0byB0aGUgb3RoZXIgY2xhc3MgZmlsZSdzIGRhdGEuCis8L3A+Cis8cD4KK1RoZSBsaXN0IG9mIHN1cHBvcnRlZCByZXNvdXJjZXMgaXMgZm91bmQgaW4gYSBmaWxlIGNhbGxlZAorTG9jYWxlRWxlbWVudHNfaW5kZXguY2xhc3MuICBUaGlzIGNvbnRhaW5zIHRoZSBuYW1lcyBvZiBhbGwgdGhlCitMb2NhbGVFbGVtZW50cyByZXNvdXJjZXMgYW5kIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkCitieSBBUEkgc3VjaCBhcyBDYWxlbmRhci5nZXRBdmFpbGFibGVMb2NhbGVzLiAoTm90ZTogZm9yIGVhc2Ugb2YKK2N1c3RvbWl6YXRpb24gdGhpcyBwcm9iYWJseSBzaG91bGQgYmUgYSB0ZXh0IGZpbGUpLgorPC9wPgorPHA+CitMb2NhbGVFbGVtZW50cyBmaWxlcyBmb3JtIGEgaGllcmFyY2h5LCB3aXRoIHVwIHRvIGZvdXIgbGV2ZWxzOiBhIHJvb3QsCitsYW5ndWFnZSwgcmVnaW9uIChjb3VudHJ5KSwgYW5kIHZhcmlhbnQuICBTZWFyY2hlcyBmb3IgbG9jYWxlIGRhdGEKK2F0dGVtcHQgdG8gbWF0Y2ggYXMgZmFyIGRvd24gdGhlIGhpZXJhcmNoeSBhcyBwb3NzaWJsZSwgZm9yIGV4YW1wbGUsCisnaGVfSUwnIHdpbGwgbWF0Y2ggTG9jYWxlRWxlbWVudHNfaGVfSUwsIGJ1dCAnaGVfVVMnIHdpbGwgbWF0Y2gKK0xvY2FsZUVsZW1lbnRzX2hlIChzaW5jZSB0aGVyZSBpcyBubyAnVVMnIHZhcmlhbnQgZm9yICdoZScsIGFuZAorJ3h4X1lZJyB3aWxsIG1hdGNoIExvY2FsZUVsZW1lbnRzIChzaW5jZSB0aGVyZSBpcyBubyAneHgnIGxhbmd1YWdlCitjb2RlIGluIHRoZSBMb2NhbGVFbGVtZW50cyBoaWVyYXJjaHkpLiAgQWdhaW4sIHNlZQoramF2YS51dGlsLlJlc291cmNlQnVuZGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorPC9wPgorPHA+CitXaXRoIHRoaXMgaW4gbWluZCwgdGhlIHdheSB0byByZW1vdmUgTG9jYWxlRGF0YSBpcyB0byBtYWtlIHN1cmUgdG8KK3JlbW92ZSBhbGwgZGVwZW5kZW5jaWVzIG9uIHRoYXQgZGF0YSBhcyB3ZWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdQorcmVtb3ZlIExvY2FsZUVsZW1lbnRzX2hlLmNsYXNzLCB5b3UgbmVlZCB0byByZW1vdmUKK0xvY2FsZUVsZW1lbnRzX2hlX0lMLmNsYXNzLCBzaW5jZSBpdCBpcyBsb3dlciBpbiB0aGUgaGllcmFyY2h5LCBhbmQKK3lvdSBtdXN0IHJlbW92ZSBMb2NhbGVFbGVtZW50c19pdy5jbGFzcywgc2luY2UgaXQgcmVmZXJlbmNlcworTG9jYWxlRWxlbWVudHNfaGUsIGFuZCBMb2NhbGVFTGVtZW50c19pd19JTC5jbGFzcywgc2luY2UgaXQgZGVwZW5kcyBvbgoraXQgKGFuZCBhbHNvIHJlZmVyZW5jZXMgTG9jYWxlRWxlbWVudHNfaGVfSUwpLiAgRm9yIGFub3RoZXIgZXhhbXBsZSwKK2lmIHlvdSByZW1vdmUgQ29sbGF0aW9uRWxlbWVudHNfemhfX1BJTllJTi5yZXMsIHlvdSBtdXN0IGFsc28gcmVtb3ZlCitMb2NhbGVFbGVtZW50c196aF9fUElOWUlOLmNsYXNzLCBzaW5jZSBpdCBkZXBlbmRzIG9uIHRoZQorQ29sbGF0aW9uRWxlbWVudHNfemhfX1BJTllJTi5yZXMuCis8L3A+CisKKzxwPgorVW5mb3J0dW5hdGVseSwgdGhlIGphciB0b29sIGluIHRoZSBKREsgcHJvdmlkZXMgbm8gd2F5IHRvIHJlbW92ZSBpdGVtcworZnJvbSBhIGphciBmaWxlLiAgVGh1cyB5b3UgaGF2ZSB0byBleHRyYWN0IHRoZSByZXNvdXJjZXMsIHJlbW92ZSB0aGUKK29uZXMgeW91IGRvbid0IHdhbnQsIGFuZCB0aGVuIGNyZWF0ZSBhIG5ldyBqYXIgZmlsZSB3aXRoIHRoZSByZW1pbmluZworcmVzb3VyY2VzLiAgU2VlIHRoZSBqYXIgdG9vbCBpbmZvcm1hdGlvbiBmb3IgaG93IHRvIGRvIHRoaXMuICBCZWZvcmUKKydyZWphcmluZycgdGhlIGZpbGVzLCBiZSBzdXJlIHRvIHRob3JvdWdobHkgdGVzdCB5b3VyIGFwcGxpY2F0aW9uIHdpdGgKK3RoZSByZW1haW5pbmcgcmVzb3VyY2VzLCBtYWtpbmcgc3VyZSBlYWNoIHJlcXVpcmVkIHJlc291cmNlIGlzCitwcmVzZW50LgorPC9wPgorCis8aDM+RGV2ZWxvcGluZyBSZXNvdXJjZXMgdG8gYmUgdXNlZCB3aXRoIElDVTRKPC9oMz4KKzxwPgorSUNVNEogMi4xIGFuZCBhYm92ZSB1c2VzIHRoZSBzdGFuZGFyZCBjbGFzcyBsb29rdXAgbWVjaGFuaXNtLiAgVGhpcyBtZWFucyAKK2FueSBwcHJvcHJpYXRlbHkgbmFtZWQgcmVzb3VyY2Ugb24gdGhlIENMQVNTUEFUSCB3aWxsIGJlIGxvY2F0ZWQsIGluIHRoZQorb3JkZXIgbGlzdGVkIGluIHRoZSBjbGFzc3BhdGguCis8L3A+Cis8cD4KK0lmIHlvdSBjcmVhdGUgYSByZXNvdXJjZSBmaWxlCitjb20uaWJtLmljdS5pbXBsLmRhdGEuTG9jYWxlRWxlbWVudHNfeHhfWVkuY2xhc3MsIGFuZCBsaXN0IGl0IG9uIHRoZQorQ0xBU1NQQVRIIGJlZm9yZSBpY3U0ai5qYXIsIHlvdXIgcmVzb3VyY2Ugd2lsbCBiZSB1c2VkIGluIHBsYWNlIG9mIGFueQorZXhpc3RpbmcgTG9jYWxlRWxlbWVudHNfeHhfWVkgcmVzb3VyY2UgaW4gaWN1NGouICBUaGlzIGlzIGEgZ29vZCB3YXkKK3RvIHRyeSBvdXQgY2hhbmdlcyB0byByZXNvdXJjZXMuICBZb3UgY2FuLCBmb3IgZXhhbXBsZSwgaW5jbHVkZSB0aGUKK3Jlc291cmNlIGluIHlvdXIgYXBwbGljYXRpb24ncyBqYXIgZmlsZSBhbmQgbGlzdCBpdCBhaGVhZCBvZgoraWN1NGouamFyLgorPC9wPgorPHA+CitJbiBvcmRlciB0byBjcmVhdGUgbmV3IHJlc291cmNlcywgeW91IGZpcnN0IG11c3QgdGhvcm91Z2hseSB1bmRlcnN0YW5kCit0aGUgdmFyaW91cyBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIHJlc291cmNlIGZpbGVzLCB0aGVpciBzeW50YXggYW5kCitkZXBlbmRlbmNpZXMuICBZb3UgY2Fubm90IHNpbXBseSAncGF0Y2gnIGV4aXN0aW5nIHJlc291cmNlIGZpbGVzIHdpdGgKK2Egc2luZ2xlIGNoYW5nZSBiZWNhdXNlIHRoZSBuZXcgZmlsZSBjb21wbGV0ZWx5IHJlcGxhY2VzIHRoZSBvbGQgZmlsZQoraW4gdGhlIHJlc291cmNlIGhpZXJhcmNoeS4gIEluIGdlbmVyYWwsIHRoZSBuZXcgcmVzb3VyY2UgZmlsZSBzaG91bGQKK2NvbnRhaW4gYWxsIHRoZSBkaWZmZXJlbnQgZGF0YSB0aGF0IHRoZSBvbGQgb25lIGRpZCwgcGx1cyB5b3VyCitjaGFuZ2VzLgorPC9wPgorPHA+CitBZGRpbmcgYSBuZXcgJ2xlYWYnIHJlc291cmNlIGlzIGVhc2llc3QuICBFbGVtZW50cyBkZWZpbmVkIGluIHRoYXQKK3Jlc291cmNlIHdpbGwgb3ZlcnJpZGUgY29ycmVzcG9uZGluZyBvbmVzIGluIHRoZSByZXNvdXJjZXMgZnVydGhlciB1cAordGhlIGhpZXJhcmNoeS4gIFRodXMgeW91IGNhbiwgZm9yIGV4YW1wbGUsIHRyeSBvdXQgbmV3IGxvY2FsaXplZCBuYW1lcworb2YgZGF5cyBvZiB0aGUgd2VlaywgYXMgdGhleSBhcmUgYWxsIGNvbnRhaW5lZCBpbiBvbmUgZWxlbWVudC4gIFRoZQordmFyaWFudCBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdGVtcG9yYXJpbHkgdHJ5IG91dCBuZXcgdmVyc2lvbnMgb2YKK2V4aXN0aW5nIHJlc291cmNlIGVsZW1lbnRzICh0aG91Z2ggd2UgZG9uJ3QgcmVjb21tZW5kIHNoaXBwaW5nIHRoaXMKK3dheSkuICBOb3RlIHRob3VnaCB0aGF0IHNvbWUgcmVzb3VyY2VzIGhhdmUgZGV0YWlsZWQgZGVwZW5kZW5jaWVzIG9uCitlYWNoIG90aGVyLCBzbyB0aGF0IHlvdSBjYW5ub3Qgc2ltcGx5IGFzc3VtZSB0aGF0IGEgbmV3IGVsZW1lbnQgd2l0aAordGhlIHNhbWUgc3RydWN0dXJlIGFuZCBudW1iZXIgb2YgY29udGVudHMgd2lsbCAnanVzdCB3b3JrLicKKzwvcD4KKzxwPgorUGF0Y2hpbmcgYW4gJ2ludGVybmFsJyByZXNvdXJjZSAoc2F5LCBvbmUgY29ycmVzcG9uZGluZyB0byBhbiBleGlzdGluZworbGFuZ3VhZ2UgcmVzb3VyY2UgdGhhdCBoYXMgY2hpbGRyZW4pIHJlcXVpcmVzIGNhcmVmdWwgYW5hbHlzaXMgb2YgdGhlCitjb250ZW50cyBvZiB0aGUgcmVzb3VyY2VzLgorPC9wPgorCis8cD4KK0xvY2FsZUVsZW1lbnRzIHJlc291cmNlIGRhdGEgaW4gSUNVNEogaXMgY2hlY2tlZCBpbiB0byB0aGUKK3JlcG9zaXRvcnkgYXMgcHJlY29tcGlsZWQgY2xhc3MgZmlsZXMuICBUaGlzIG1lYW5zIHRoYXQgaW5zcGVjdGluZyB0aGUKK2NvbnRlbnRzIG9mIHRoZXNlIHJlc291cmNlcyBpcyBkaWZmaWN1bHQuICBUaGV5IGFyZSBjb21waWxlZCBmcm9tIGphdmEKK2ZpbGVzIHRoYXQgaW4gdHVybiBhcmUgbWFjaGluZS1nZW5lcmF0ZWQgZnJvbSBJQ1U0QyBiaW5hcnkgZGF0YSwgdXNpbmcKK3RoZSBnZW5yYiB0b29sIGluIElDVTRDLiAgWW91IGNhbiB2aWV3IHRoZSBjb250ZW50cyBvZiB0aGUgSUNVNEMgdGV4dAorcmVzb3VyY2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGVudHMgb2YgdGhlIElDVTRKIHJlc291cmNlcywgYXMKK3RoZXkgYXJlIHRoZSBzYW1lLgorPC9wPgorCis8aDM+RGV2ZWxvcGluZyBJQ1U0SiBSZXNvdXJjZXM8L2gzPgorPHA+CitDdXJyZW50bHkgb25seSB0aGUgTG9jYWxlRWxlbWVudHMgcmVzb3VyY2UgZGF0YSBpcyBzaGFyZWQsIG90aGVyIElDVQorcmVzb3VyY2VzIChjYWxlbmRhciwgdHJhbnNsaXRlcmF0b3IsIGV0Yy4pIGFyZSBzdGlsbCBjaGVja2VkIGluCitkaXJlY3RseSB0byBJQ1U0SiBhcyBzb3VyY2UgZmlsZXMuICBUaGlzIG1lYW5zIHRoYXQgZGV2ZWxvcG1lbnQgYW5kCittYWludGVuYW5jZSBvZiB0aGVzZSByZXNvdXJjZXMgY29udGludWVzIGFzIGJlZm9yZSwgb25seQorTG9jYWxlRWxlbWVudHMgcmVzb3VyY2UgZGF0YSBoYXMgYmVlbiBjaGFuZ2VkIGluIElDVTRKIDIuMS4gIFRoaXMKK3Byb2JhYmx5IHdpbGwgY2hhbmdlIGluIHRoZSBmdXR1cmUgb25jZSB3ZSB3b3JrIG91dCBhIHJlYXNvbmFibGUKK21lY2hhbmlzbSBmb3Igc3RvcmluZyBhbmQgZ2VuZXJhdGluZyB0aGUgcmVzb3VyY2UgZGF0YS4KKzwvcD4KKzxwPgorT25lIGdvYWwgb2YgdXNpbmcgdGhlIHNhbWUgcmVzb3VyY2UgZGF0YSBhcyBJQ1U0QyBpcyB0byBhdm9pZCBrZWVwaW5nCityZWR1bmRhbnQgY29waWVzIG9mIHRoZSByZXNvdXJjZSBkYXRhLiAgQ3VycmVudGx5IHRoZXJlIGlzIG5vIHNlcGFyYXRlCityZXBvc2l0b3J5IG9mIHRoZSAnbWFzdGVyJyByZXNvdXJjZSBkYXRhLCBpdCBpcyBjaGVja2VkIGluIHRvIElDVTRDLAorYW5kIHRoZSB0b29scyBmb3IgY29udmVydGluZyBpdCB0byAuamF2YSBmaWxlcyBhcmUgSUNVNEMgdG9vbHMuICBUaGlzCitpcyBpbmNvbnZlbmllbnQgZm9yIHdvcmtpbmcgaW4gSmF2YSwgYnV0IHNpbmNlIG1haW50ZW5hbmNlIG9mIElDVTRKCithbmQgSUNVNEMgaXMgc3VwcG9zZWQgdG8gZ28gb24gJ2luIHBhcmFsbGVsLCcgYXMgYSBwcmFjdGljYWwgbWF0dGVyCitwZW9wbGUgd2lsbCBoYXZlIHRvIGJlIGZhbWlsaWFyIHdpdGggZGV2ZWxvcG1lbnQgaW4gYm90aCBDIGFuZCBKYXZhLAorYW5kIHdpdGggdGhlIGNvbnZlbnRpb25zIGFuZCBzdHJ1Y3R1cmUgb2YgZWFjaCBwcm9qZWN0LiAgQWRkaXRpb25hbGx5LAorc2hhcmluZyBvZiBkYXRhIG1lYW5zIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBkYXRhIGltbWVkaWF0ZWx5IGltcGFjdAorYm90aCBwcm9qZWN0cyAoYXMgaXQgc2hvdWxkKSBhbmQgdGh1cyBib3RoIHByb2plY3RzIG5lZWQgdG8gYmUgdGVzdGVkCit3aGVuIHN1Y2ggY2hhbmdlcyBhcmUgbWFkZS4gIFRoZSBidWxrIG9mIHRoZSB0b29scyBhcmUgY3VycmVudGx5IG9uCit0aGUgSUNVNEMgc2lkZSwgYW5kIHdpbGwgbGlrZWx5IHN0YXkgdGhhdCB3YXksIHNvIHRoaXMgc2VlbXMgbGlrZSBhCityZWFzb25hYmxlIGluaXRpYWwgYXBwcm9hY2ggdG8gc2hhcmluZyB0aGUgZGF0YS4KKzwvcD4KKworPHA+CitXaGlsZSBwcm90b3R5cGluZyBvZiBMb2NhbGVFbGVtZW50cyBkYXRhIGNhbiBvY2N1ciBpbiBlaXRoZXIgSmF2YSBvcgorQywgdGhlIGZpbmFsIHZlcnNpb24gc2hvdWxkIGJlIGNoZWNrZWQgaW4gdG8gSUNVNEMgaW4gdGV4dCBmb3JtYXQuCitHZW5yYiBpcyB0aGVuIHJ1biB0byBnZW5lcmF0ZSB0aGUgLmphdmEgYW5kIC5yZXMgZmlsZXMuICBUaGV5IGFyZSB0aGVuCitjb21waWxlZCBhbmQgamFyJ2QgaW50byB0aGUgZmlsZSBJQ1VMb2NhbGVEYXRhLmphci4gIFRoZSByZXN1bHRpbmcgamFyCitmaWxlIGlzIHRoZW4gY2hlY2tlZCBpbiB0byBJQ1U0SiBhcworc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL0lDVUxvY2FsZURhdGEuamFyLiAgKFRoaXMgaXMgbm90IGdyZWF0IGJ1dCBpdAorYWxsb3dzIElDVTRKIHRvIGJlIGRvd25sb2FkZWQgYW5kIGJ1aWx0IGFzIG9uZSBwcm9qZWN0LCBpbnN0ZWFkIG9mCit0d28sIG9uZSBmb3IgbG9jYWxlIGRhdGEgYW5kIG9uZSBmb3IgSUNVNEogcHJvcGVyLiAgR2l2ZW4gdGhlIDIuNAorc2NoZWR1bGUgaXQgd2Fzbid0IHBvc3NpYmxlIHRvIHdvcmsgb3V0IHRoZSBsYXJnZXIgZGF0YSBzaGFyaW5nCitwcm9ibGVtIGluIHRpbWUsIHNvIHdlIHRyaWVkIHRvIGxpbWl0IHRoZSBpbXBhY3QgdG8ganVzdCB3aGF0IHdhcworbmVlZGVkIHRvIGdldCBKREsgMS40IHN1cHBvcnQgdXAgYW5kIHJ1bm5pbmcuKQorPC9wPgorCis8cD4KK1RoZSBmaWxlcyBpbiBJQ1VMb2NhbGVEYXRhLmphciBnZXQgZXh0cmFjdGVkIHRvIGNvbS9pYm0vaWN1L2ltcGwvZGF0YSBpbgordGhlIGJ1aWxkIGRpcmVjdG9yeSB3aGVuIHRoZSAnY29yZScgdGFyZ2V0IGlzIGJ1aWx0LiAgVGhlcmVhZnRlciwgYXMKK2xvbmcgYXMgdGhlIGZpbGUgTG9jYWxlRWxlbWVudHNfaW5kZXguY2xhc3MgZmlsZSBpcyB1bnRvdWNoZWQsIHRoZXkgd2lsbAorbm90IGJlIGV4dHJhY3RlZCBhZ2Fpbi4gIEJ1aWxkaW5nIHRoZSAncmVzb3VyY2UnIHRhcmdldCB3aWxsIGZvcmNlIHRoZQorcmVzb3VyY2VzIHRvIG9uY2UgYWdhaW4gYmUgZXh0cmFjdGVkLiAgRXh0cmFjdGlvbiB3aWxsIAorb3ZlcndyaXRlIGFueSBjb3JyZXNwb25kaW5nIC5jbGFzcyBmaWxlcyBhbHJlYWR5IGluIHRoYXQgZGlyZWN0b3J5LgorPC9wPgorCis8aDM+PGEgbmFtZT0iV2hlcmVUb0ZpbmRNb3JlIj48L2E+PHU+V2hlcmUgdG8gRmluZCBNb3JlIEluZm9ybWF0aW9uPC91PjwvaDM+CisKKzxwPkZvciBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGlzIGN1cnJlbnQgcmVsZWFzZSwgcGxlYXNlIHJlZmVyIHRvIHRoZSA8YSBocmVmPSJyZWxlYXNlbm90ZXMuaHRtbCI+cmVsZWFzZW5vdGVzLmh0bWw8L2E+PC9wPgorCis8cD48YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovPC9hPiBpcyBhCitwb2ludGVyIHRvIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgVW5pY29kZSBpbiBKYXZhIDwvcD4KKworPHA+PGEgaHJlZj0iaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3Blci91bmljb2RlIj5odHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyL3VuaWNvZGU8L2E+IGlzIGEgcG9pbnRlciB0bworaW5mb3JtYXRpb24gb24gaG93IHRvIG1ha2UgYXBwbGljYXRpb25zIGdsb2JhbC4gPC9wPgorCis8aDM+PGEgTkFNRT0iU3VibWl0dGluZ0NvbW1lbnRzIj48L2E+PHU+U3VibWl0dGluZyBDb21tZW50cywgUmVxdWVzdGluZyBGZWF0dXJlcyBhbmQKK1JlcG9ydGluZyBCdWdzPC91PjwvaDM+CisKKzxwPllvdXIgY29tbWVudHMgYXJlIGltcG9ydGFudCB0byBtYWtpbmcgSUNVNEogc3VjY2Vzc2Z1bC4mbmJzcDsgV2UgYXJlIGNvbW1pdHRlZAordG8gZml4aW5nIGFueSBidWdzLCBhbmQgd2lsbCB1c2UgeW91ciBmZWVkYmFjayB0byBoZWxwIHBsYW4gZnV0dXJlIHJlbGVhc2VzLjwvcD4KKworPHA+VG8gc3VibWl0IGNvbW1lbnRzLCByZXF1ZXN0IGZlYXR1cmVzIGFuZCByZXBvcnQgYnVncywgY29udGFjdCB1cyB0aHJvdWdoIHRoZSA8YSBocmVmPWh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9hcmNoaXZlcy9pbmRleC5odG1sPklDVTRKIG1haWxpbmcgbGlzdDwvYT4uPGJyPgorV2hpbGUgd2UgYXJlIG5vdCBhYmxlIHRvIHJlc3BvbmQgaW5kaXZpZHVhbGx5IHRvIGVhY2ggY29tbWVudCwgd2UgZG8gcmV2aWV3IGFsbCBjb21tZW50cy48L3A+Cis8cD5UaGFua3MgZm9yIHlvdXIgaW50ZXJlc3QgaW4gSUNVNEohPC9wPgorCis8aHIgc2l6ZT0iMiIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPgorCis8cD48aT48Zm9udCBzaXplPSItMSI+Q29weXJpZ2h0IKkgMjAwMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMKK1Jlc2VydmVkLjxicj4KKzU2MDAgQ290dGxlIFJvYWQsIFNhbiBKb3PpLCBDQSA5NTE5MworPC9mb250PjwvaT48L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3JlbGVhc2Vub3Rlcy5odG1sIGIvcmVsZWFzZW5vdGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2OTIxNAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2Vub3Rlcy5odG1sCkBAIC0wLDAgKzEsMjIwIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklDVTRKIDIuMiBSZWxlYXNlIE5vdGVzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwhLS0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovQXR0aWMvcmVsZWFzZW5vdGVzLmh0bWwsdiAkCisqICREYXRlOiAyMDAyLzEyLzA1IDA2OjA2OjI1ICQKKyogJFJldmlzaW9uOiAxLjggJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0+Cis8L2hlYWQ+CisKKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiPgorPCEtLSNpbmNsdWRlIHZpcnR1YWw9Ii9pY3Uvc3NpL2hlYWRlci5odG1sIiAtLT4gCisgICAgPGgyPkludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgVW5pY29kZSBmb3IgSmF2YTwvaDI+CisgICAgPGgzPlJlbGVhc2UgTm90ZXMgZm9yIElDVTRKIDIuNDwvaDM+CisKKzxociBzaXplPSIyIiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+CisgICAgPHA+PGI+UmVsZWFzZSBEYXRlPC9iPjxicj4KKyAgICBEZWNlbWJlciAxNXRoLCAyMDAyPC9wPgorCis8cD5Gb3IgdGhlIG1vc3QgcmVjZW50CisgICAgICByZWxlYXNlLCBzZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb3dubG9hZC9pbmRleC5odG1sIj4KKyAgICAgIElDVTRKIGRvd25sb2FkIHNpdGU8L2E+LgorICAgIDwvUD4KKworICAgIDxwPjxCPldoYXQncyBuZXcgaW4gUmVsZWFzZSAyLjQ8L0I+PC9wPgorCis8dWw+CisgIDxsaT48Yj5Vbmljb2RlIDMuMiBzdXBwb3J0PC9iPgorICAgIDx1bD4KKyAgICAgIDxsaT5BbGwgcHJvcGVydGllcyBhbmQgYWxnb3JpdGhtcyBhcmUgdXBncmFkZWQgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMjgvIj5Vbmljb2RlCisgICAgICAgIDMuMjwvYT4uCisgICAgICA8bGk+VGhlIFVDQSAoPGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMTAvIj5Vbmljb2RlCisgICAgICAgIENvbGxhdGlvbiBBbGdvcml0aG08L2E+KSB0YWJsZSBpcyB1cGRhdGVkIHRvIHRoZSBjdXJyZW50IHZlcnNpb24gMy4xLjEsCisgICAgICAgIHdpdGggVW5pY29kZSAzLjItYmFzZWQgY2Fub25pY2FsIGNsb3N1cmUuCisgICAgICA8bGk+TW9zdCBVbmljb2RlIHByb3BlcnRpZXMgYXJlIG5vdyA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vY3ZzL2ljdS9+Y2hlY2tvdXR+L2ljdWh0bWwvZGVzaWduL3VjZF9pY3UuaHRtbCI+YXZhaWxhYmxlCisgICAgICAgIHZpYSBkaXJlY3QgQVBJcywgYW5kIGluIFVuaWNvZGVTZXQ8L2E+LjwvbGk+CisgICAgPC91bD4KKyAgPC9saT4KKyAgPGxpPjxiPkNvbGxhdGlvbjwvYj48YnI+CisgICAgVGhlIGNvbGxhdGlvbiBlbmdpbmUgaGFzIGJlZW4gY29tcGxldGVseSByZXdyaXR0ZW4gdG8gYmUgY29uZm9ybWFudCB0byB0aGUKKyAgICBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgVUNBLCBhbmQgdG8gdXNlIHRoZSBzYW1lIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cworICAgIGF2YWlsYWJsZSBpbiBJQ1U0Qy4gQ29tcGFyZWQgdG8gdGhlIEpESywgaXQgaXMgZHJhbWF0aWNhbGx5IGZhc3RlciwgaGFzIG11Y2gKKyAgICBzbWFsbGVyIHNvcnQga2V5cywgbW9yZSBjdXN0b21pemF0aW9uLCBhbmQgYmV0dGVyIGFuZCBhZGRpdGlvbmFsCisgICAgbG9jYWxlLXNwZWNpZmljIGRhdGEuIEZvciBtb3JlIGRldGFpbHMsIHNlZSA8YSBocmVmPSIjY29sbGF0aW9uIj5Db2xsYXRpb24KKyAgICBFbmhhbmNlbWVudHM8L2E+IGJlbG93LgorICA8bGk+PGI+Tm9ybWFsaXphdGlvbjwvYj48YnI+CisgICAgVGhlIE5vcm1hbGl6YXRpb24gc2VydmljZSBhZGRzIHNldmVyYWwgaGlnaCBwZXJmb3JtYW5jZSBmdW5jdGlvbnMgZm9yOgorICAgIDx1bD4KKyAgICAgIDxsaT5mYXN0IGNvbmNhdGVuYXRpb24sIHByZXNlcnZpbmcgTkZDIGFuZCBORkQuCisgICAgICA8bGk+ZmFzdCBkZXRlY3Rpb24gb2Ygbm9ybWFsaXplZCB0ZXh0CisgICAgICA8bGk+ZmFzdCBjYW5vbmljYWwgZXF1aXZhbGFuY2UgYW5kL29yIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmc8L2xpPgorICAgIDwvdWw+CisgIDxsaT48Yj5UcmFuc2xpdGVyYXRpb248L2I+PGJyPgorICAgIFRoZXJlIGFyZSBub3cgdHJhbnNsaXRlcmF0b3JzIGZvciBhbGwgc2NyaXB0cyB1c2VkIGJ5IElDVSBsb2NhbGVzLiBJbgorICAgIGFkZGl0aW9uLCBtaXhlZC1zY3JpcHQgdGV4dCBjYW4gYmUgYXV0b21hdGljYWxseSB0cmFuc2xpdGVyYXRlZCB0byBhIHRhcmdldAorICAgIHNjcmlwdC4KKyAgPGxpPjxiPkFsdGVybmF0ZSBjdXJyZW5jeSBmb3JtYXR0aW5nPC9iPjxicj4KKyAgICBJQ1UgcGVybWl0cyBhcmJpdHJhcnkgY3VycmVuY2llcyB0byBiZSBmb3JtYXR0ZWQgZm9yIGRpc3BsYXkgYWNjb3JkaW5nIHRvCisgICAgYXJiaXRyYXJ5IGxvY2FsZXMsIHN1Y2ggYXMgZm9ybWF0dGluZyBZZW4gYW1vdW50cyBmb3IgdGhlIFVTLgorICA8bGk+PGI+VW5pY29kZVNldHM8L2I+PGJyPgorICAgIFVuaWNvZGVTZXRzIG5vdyBwZXJtaXQgc3RyaW5ncyBhcyB3ZWxsIGFzIGNoYXJhY3RlcnMsIHNvIHRoYXQgdGhleSBjYW4KKyAgICBjb250YWluIGdyYXBoZW1lLWNsdXN0ZXJzLiBVbmljb2RlU2V0SXRlcmF0b3IgcHJvdmlkZXMgYSBmYXN0IG1lY2hhbmlzbSBmb3IKKyAgICBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgY29udGVudHMgKGNvZGUgcG9pbnRzIGFuZCBzdHJpbmdzKSBvZiBhIFVuaWNvZGVTZXQuCisgICAgRm9yIGNvZGUgcG9pbnRzIHRoZSBpdGVyYXRpb24gaXMgZWl0aGVyIGJ5IGluZGl2aWR1YWwgY29kZSBwb2ludCBvciBieQorICAgIHJhbmdlcy4KKyAgPGxpPjxiPkdlbmVyYWwgaW1wcm92ZW1lbnRzPC9iPjxicj4KKyAgICBQZXJmb3JtYW5jZSBoYXMgYmVlbiBlbmhhbmNlZCBpbiBhIG51bWJlciBvZiBzZXJ2aWNlcywgYW5kIGEgbnVtYmVyIG9mCisgICAgc2lnbmlmaWNhbnQgYnVncyBoYXZlIGJlZW4gZml4ZWQuPC9saT4KKzwvdWw+CisgIDxwPlBsZWFzZSBhbHNvIG5vdGUgdGhlIDxhIGhyZWY9IiNyZXBhY2thZ2UiPnBhY2thZ2luZzwvYT4gYW5kIDxhIGhyZWY9IiNSZXNvdXJjZURhdGEiPnJlc291cmNlIGRhdGE8L2E+IGNoYW5nZXMKKyAgICBpbnRyb2R1Y2VkIHdpdGggSUNVNEogMi4xLCBkZXNjcmliZWQgYmVsb3cuPC9wPgorCisgICAgIDxQPjxCPlJlZmVyZW5jZSBQbGF0Zm9ybXM8L0I+PC9QPgorICAgICAgPHA+CisgICAgICBUaGUgcmVmZXJlbmNlIHBsYXRmb3JtcyBmb3IgdmVyc2lvbiAyLjQgYXJlOjx1bD4KKzxsaT4gV2luMjAwMCwgSUJNIEpESyAxLjMKKzxsaT4gU29sYXJpcyAyLjcsIFN1biBKREsgMS4zLjEKKzxsaT4gQUlYIDUuMSwgSUJNIEpESyAxLjMKKzwvdWw+CisgICAgICA8L3A+CisKKzxwPjxiPkZvciBNb3JlIEluZm9ybWF0aW9uPC9iPjwvcD4KKworICAgICAgPHA+Rm9yIGZ1cnRoZXIgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIElDVTRKIGxpYnJhcnksIHBsZWFzZSByZWZlciB0byB0aGUKKyAgICAgIDxBIGhyZWY9InJlYWRtZS5odG1sIj5yZWFkbWUuPC9BPgorICAgICAgPC9wPgorCis8aHIgc2l6ZT0iMiIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPgorCisgICAgPHA+PGgzPjxhIG5hbWU9ImNvbGxhdGlvbiI+Q29sbGF0aW9uIEVuaGFuY2VtZW50czwvYT48L2gzPjwvcD4gCisKKzxwPklDVTRKJ3MgY29sbGF0aW9uIGhhcyBiZWVuIHVwZ3JhZGVkIGFuZCBub3cgZGlmZmVycyBzaWduaWZpY2FudGx5IGZyb20gdGhlIEpESydzIGltcGxlbWVudGF0aW9uIChvcmlnaW5hbGx5IHByb3ZpZGVkIGJ5IHVzIHNldmVyYWwgeWVhcnMgYWdvKS48L3A+CisKKzxwPklDVSdzIGNvbGxhdGlvbiBpcywgaW4gZ2VuZXJhbCwgbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBKREsncy4gKFRoZSB0aW1lIHRvIGdlbmVyYXRlIHNvcnQga2V5cyBpcyBsb25nZXIsIGJlY2F1c2UgdGhleSBhcmUgc28gbXVjaCBzaG9ydGVyIGFuZCBtb3JlIGVmZmljaWVudCB0byBwcm9jZXNzKS4gIEZvciBpbnN0YW5jZToKKzx1bD4KKyAgPGxpPklDVTRKIGNhbiBjb3JyZWN0bHkgcHJvY2VzcyBGQ0QgZm9ybWF0IHN0cmluZ3Mgd2l0aCBub3JtYWxpemF0aW9uIG9mZi4gIFRoZSBKREsgaGFzIG5vIG5vdGlvbiBvZiBGQ0QuIE11Y2ggdXNlciB0ZXh0IGlzIGluIEZDRCBmb3JtIChmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBGQ0QsIHNlZSA8YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL25vdGVzL3RuNS8iPlVuaWNvZGUgVGVjaG5pY2FsIE5vdGUgIzU8L2E+KS48L2xpPgorICA8bGk+Q29sbGF0aW9uS2V5cyBnZW5lcmF0ZWQgYnkgSUNVNEogYXJlIGNvbXByZXNzZWQsIGFuZCBhcyBjb21wYXJlZCB3aXRoIHRoZSBKREsncywgY2FuIGJlIHVwIHRvIDcwJSBzbWFsbGVyIChlLmcuIGluIHRoZSBjYXNlIG9mIExhdGluIGNoYXJhY3RlcnMpLjwvbGk+CisgIDxsaT5TdHJpbmcgY29tcGFyaXNvbiBpbiBJQ1UgaXMgZmFzdGVyIHRoYW4gdGhlIEpESydzLiBJbiBvdXIgdGVzdHMgb2YgTGF0aW4gY2hhcmFjdGVycywgaXQgdG9vayBqdXN0IDM1JSBvZiB0aGUgSkRLJ3MgdGltZS4gPC9saT4KKzwvdWw+PC9wPgorCis8cD5BbHRob3VnaCBJQ1U0SidzIGNvbGxhdGlvbiBBUEkgaXMgdmVyeSBjb21wYXRhYmxlIHdpdGggdGhlIEpESydzLCB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcy4gIEhlcmUgaXMgYSBsaXN0aW5nIG9mIHRoZSBtYWluIG9uZXM6Cis8dWw+CisgIDxsaT5JQ1U0SiBzdXBwb3J0cyA8Yj5xdWF0ZXJuYXJ5PC9iPiBhbmQgPGI+aWRlbnRpY2FsPC9iPiBzdHJlbmd0aCwgdGhlIEpESyBkb2VzIG5vdC48L2xpPgorICA8bGk+IElDVTRKIHN1cHBvcnRzIGV4dHJhIGNvbGxhdGlvbiBvcHRpb25zLCB0aGUgSkRLIGRvZXMgbm90OjwvbGk+CisgICAgPHVsPgorICAgICAgPGxpPmFsdGVybmF0ZSBoYW5kbGluZzwvbGk+CisgICAgICA8bGk+Y2FzZSBsZXZlbCBzb3J0PC9saT4KKyAgICAgIDxsaT51cHBlciBjYXNlIGZpcnN0IG9yIGxvd2VyIGNhc2UgZmlyc3Qgc3dpdGNoPC9saT4KKyAgICA8L3VsPgorICA8bGk+SUNVNEogc3VwcG9ydHMgVW5pY29kZSAzLjIsIHdoaWxlIHRoZSBKREsgKGFzIG9mIHZlcnNpb24gMS40KSBvbmx5IHN1cHBvcnRzIFVuaWNvZGUgMy4wLjwvbGk+CisgIDxsaT5JQ1U0SiBkb2VzIG5vdCBhbGxvdyB0dXJuaW5nIG9mZiBUaGFpIHJlb3JkZXJpbmcsIHdoaWxlIHRoZSBKREsgZG9lcy4gIFRoaXMgaXMgYmVjYXVzZSBpbiBVbmljb2RlIDMuMiBUaGFpIHJlb3JkZXJpbmcgaXMgYWx3YXlzIHJlcXVpcmVkLiBUaGUgSkRLIHVzZXMgJyEnIGluIHRoZSBydWxlcyB0byB0dXJuIG9mZiBUaGFpIHJlb3JkZXJpbmc7IElDVTRKIGlnbm9yZXMgaXQuPC9saT4KKyAgPGxpPklDVTRKIHN1cHBvcnRzIGFkZGl0aW9uYWwgcnVsZSBzeW50YXggZm9yIHZhcmlvdXMgb3B0aW9ucywgZm9yIGV4YW1wbGUsIHNldHRpbmcgPGI+dmFyaWFibGUtdG9wPC9iPiwgY29kZSBwb2ludCBjb2xsYXRpb24gZWxlbWVudCBwb3NpdGlvbmluZywgYW5kIG90aGVycy4gIEZvciBkZXRhaWxzLCBzZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvdXNlcmd1aWRlL0NvbGxhdGVfQ3VzdG9taXphdGlvbi5odG1sIj51c2VyJ3MgZ3VpZGU8L2E+LgorICA8bGk+SUNVNEoncyB2ZXJzaW9uIG9mIENvbGxhdGlvbktleSBoYXMgYSBwdWJsaWMgY29uc3RydWN0b3IsIHNvIHN1YmNsYXNzZXMgb2YgUnVsZUJhc2VkQ29sbGF0b3IgY2FuIGNyZWF0ZSB0aGVpciBvd24gQ29sbGF0aW9uS2V5cy4gIFRoaXMgd2FzIG92ZXJsb29rZWQgaW4gdGhlIEpESyAobWVhIGN1bHBhKS48L2xpPgorICA8bGk+VGhlIEZVTExfREVDT01QT1NJVElPTiBtb2RlIHVzZWQgaW4gdGhlIEpESyBpcyB1bm5lY2Vzc2FyeSBmb3IgdGhlIFVDQSAoYW5kIGFjdHVhbGx5IGluY29ycmVjdCBpbiBzb21lIGNhc2VzKS4gSUNVNEogZG9lcyBub3QgZGVmaW5lIHRoaXMgbW9kZTsgY2xpZW50cyBzaG91bGQgdXNlIENBTk9OSUNBTF9ERUNPTVBPU0lUSU9OIGluc3RlYWQuCisgIDxsaT5JQ1U0SiB1c2VzIHRoZSBzdGFuZGFyZCBVQ0EgZGVmYXVsdCBvcmRlcmluZywgcGx1cyBmaXhlcyBhbmQgYWRkaXRpb25zIGZvcgorICAgIGRpZmZlcmVudCBsYW5ndWFnZXMsIHNvIHRoZSBzb3J0aW5nIG9yZGVyIHdpbGwgZGlmZmVyIGZyb20gdGhlIEpESydzLgorICA8bGk+VGhlIENvbGxhdGlvbktleXMgZ2VuZXJhdGVkIGJ5IElDVTRKIGFuZCB0aGUgSkRLIGFyZSBkaWZmZXJlbnQsIHNvIHRoZXkgY2Fubm90IGJlIGNvbXBhcmVkLjwvbGk+Cis8L3VsPgorPC9wPgorCis8aHIgc2l6ZT0iMiIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPgorICAgIDxoMz48YSBuYW1lPSJyZXBhY2thZ2UiPlBhY2thZ2UgUmVzdHJ1Y3R1cmluZzwvYT48L2gzPiAKKworPHA+U3RhcnRpbmcgd2l0aCBlbmhhbmNlbWVudCByZWxlYXNlIDIuMSBvZiBJQ1U0SiwgdGhlIGN2cyByZXBvc2l0b3J5CithbmQgcGFja2FnZSBvcmdhbml6YXRpb24gaGFzIGNoYW5nZWQuICBUaGlzIGhlbHBzIHVzIHRvIG1vcmUgY2xlYW5seQorb3JnYW5pemUgdGhlIGNsYXNzZXMsIGFuZCB0byBjbGFyaWZ5IHJlbGF0aW9uc2hpcHMgYW5kIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHBhcnRzIG9mIHRoZSBwcm9qZWN0LjwvcD4KKworPHA+VGhlIG5ldyBoaWdoLWxldmVsIHN0cnVjdHVyZSBpcyBhcyBmb2xsb3dzOjxicj48dHQ+PHByZT4KK2NvbQorICAgLmlibQorICAgICAgIC5yaWNodGV4dCAgICAgICAtLS0gIHJvb3Qgb2YgcmljaCBlZGl0IGNvbnRyb2wKKyAgICAgICAuaWN1ICAgICAgICAgICAgLS0tICByb290IG9mIGljdQorICAgICAgICAgICAgLmRldiAgICAgICAtLS0gIGNsYXNzZXMgZXhjbHVkZWQgZnJvbSBpY3U0ai5qYXIgKGRldmVsb3BtZW50IG9ubHkpCisgICAgICAgICAgICAgICAgLmRhdGEgIC0tLSAgZGF0YSAoZS5nLiB1bmljb2RlIGRhdGEgZmlsZXMpCisgICAgICAgICAgICAgICAgLmRlbW8gIC0tLSAgZGVtb3MgKGUuZy4gY2FsZW5kYXIsIGhvbGlkYXksIHRyYW5zbGl0KQorICAgICAgICAgICAgICAgIC50ZXN0ICAtLS0gIGFwaSB0ZXN0cyBncm91cGVkIGJ5IGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICAudG9vbCAgLS0tICB0b29scyB1c2VkIGluIGRldmVsb3BtZW50CisgICAgICAgICAgICAuaW1wbCAgICAgIC0tLSAgcm9vdCBvZiAnaW50ZXJuYWwnIGNsYXNzZXMgCisgICAgICAgICAgICAgICAgLmRhdGEgIC0tLSAgc2hpcHBlZCBkYXRhICh0ZXh0IGFuZCByZXNvdXJjZXMpCisgICAgICAgICAgICAubGFuZyAgICAgIC0tLSAgc2ltaWxhciB0byBqYXZhLmxhbmcKKyAgICAgICAgICAgIC5tYXRoICAgICAgLS0tICBzaW1pbGFyIHRvIGphdmEubWF0aAorICAgICAgICAgICAgLnRleHQgICAgICAtLS0gIHNpbWlsYXIgdG8gamF2YS50ZXh0CisgICAgICAgICAgICAudXRpbCAgICAgIC0tLSAgc2ltaWxhciB0byBqYXZhLnV0aWwKKzwvcHJlPjwvdHQ+PC9wPgorCis8cD5CeSBhbmQgbGFyZ2UgY2xhc3MgbmFtZXMgZGlkbid0IGNoYW5nZSwgb25seSBwYWNrYWdpbmcsIHNvIGNoYW5naW5nIAordGhlIHBhY2thZ2VzIGluIHlvdXIgc291cmNlIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHJlc29sdmUgbW9zdCBwcm9ibGVtcy4KK1RoZSBwYWNrYWdlIGNoYW5nZSA8Yj53aWxsIGJyZWFrIHNlcmlhbGl6YXRpb248L2I+IGZvciB0aG9zZSBjbGFzc2VzIHRoYXQgYXJlCitzZXJpYWxpemFibGUuPC9wPgorCis8cD5UaGUgY2xhc3NlcyBpbiBjb20uaWJtLmljdS5pbXBsIGFyZSA8Yj5pbnRlcm5hbCB1c2Ugb25seTwvYj4uCitUaGVpciBqYXZhZG9jcyBhcmUgbm90IGdlbmVyYXRlZCwgdGhlaXIgQVBJcyBhcmUgbm90IHN1cHBvcnRlZCwgYW5kCit0aGV5IGNhbiBjaGFuZ2UgQVBJcyBvciBkaXNhcHBlYXIgZW50aXJlbHkgPGI+YXQgYW55Cit0aW1lPC9iPi4gIE1hbnkgY2xhc3NlcyBpbiB0aGlzIHBhY2thZ2UgYXJlIHB1YmxpYyBpbiBvcmRlciB0bworZmFjaWxpdGF0ZSB1c2UgYnkgY2xhc3NlcyBpbiBtdWx0aXBsZSBvdGhlciBwYWNrYWdlcywgYnV0IHRoaXMgc2hvdWxkIG5vdAorYmUgY29uc3RydWVkIHRvIG1lYW4gdGhhdCBzdWNoIGNsYXNzZXMgd2lsbCBuZWNlc3NhcmlseSBiZSAncHJvbW90ZWQnCit0byBmdWxsIHB1YmxpYyBjbGFzc2VzIGluIHRoZSBmdXR1cmUuIENsaWVudHMgYXJlIHdhcm5lZCBub3QgdG8gZGVwZW5kCitvbiBhbnl0aGluZyBpbiB0aGlzIHBhY2thZ2UuPC9wPgorCis8aHIgc2l6ZT0iMiIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPgorICAgIDxoMz48YSBuYW1lPSJSZXNvdXJjZURhdGEiPklDVSBSZXNvdXJjZSBEYXRhIGFkZGVkIHRvIElDVTRKPC9hPjwvaDM+Cis8cD5TdGFydGluZyB3aXRoIEpESyAxLjQsIHRoZSByZXNvdXJjZSBpbmZvcm1hdGlvbiB0aGF0IHVzZWQgdG8gYmUKK2F2YWlsYWJsZSB0aHJvdWdoIHB1YmxpYyBjbGFzc2VzIGluIGphdmEudGV4dC5yZXNvdXJjZXMgaXMgbm8gbG9uZ2VyCithdmFpbGFibGUuICBTdW4gaGFzIG1vdmVkIHRoZXNlIGNsYXNzZXMgdG8gYW4gaW50ZXJuYWwgcGFja2FnZS4gIFRoaXMKK2hhcyB0d28gY29uc2VxdWVuY2VzLiAgT25lLCBib3RoIHRoZSBmb3JtYXQgYW5kIGNvbnRlbnRzIG9mIHRoZQorcmVzb3VyY2VzIGNhbiBub3cgY2hhbmdlIGF0IGFueSB0aW1lLS0gZG90IHJlbGVhc2VzIGFuZCBzcGVjaWFsIGJ1Z2ZpeAorcmVsZWFzZXMgY2FuIGJlIGRpZmZlcmVudC4gIFR3bywgdGhlIHJlc291cmNlcyBhcmUgbm93IG5vIGxvbmdlcgorYWNjZXNzaWJsZSB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24gYnkgdGhlIGphdmEgdXNlci4KKzwvcD4KKzxwPgorRm9yIHRoZXNlIHJlYXNvbnMsIHN0YXJ0aW5nIHdpdGggcmVsZWFzZSAyLjEsIElDVTRKIGluY2x1ZGVzIGl0cyBvd24gCityZXNvdXJjZSBpbmZvcm1hdGlvbgord2hpY2ggaXMgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiB0aGUgSkRLIHJlc291cmNlIGluZm9ybWF0aW9uLiAgVGhlCituZXcgSUNVNEogaW5mb3JtYXRpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgaW5mb3JtYXRpb24gaW4gSUNVNEMgYW5kCit1bHRpbWF0ZWx5IGRlcml2ZXMgZnJvbSB0aGUgc2FtZSBzb3VyY2UuICBUaGlzIGFsbG93cyBJQ1U0SiAyLjEgYW5kIGFib3ZlIAordG8gYmUKK2J1aWx0IG9uLCBhbmQgcnVuIG9uLCBKREsgMS40LgorPC9wPgorPHA+CitUaGVyZSBhcmUgdHdvIG1haW4gY29uc2VxdWVuY2VzIG9mIHRoaXMgZGVjaXNpb24uICBUaGUgZmlyc3QgaXMgYW4KK2luY3JlYXNlIGluIHNpemUgb2YgSUNVNEouICBUaGUgbmV3IHJlc291cmNlIGluZm9ybWF0aW9uLCBjdXJyZW50bHkKK3N0b3JlZCBhcyBjbGFzcyBmaWxlcyByZXNpZGluZyBpbiBhIGphciBmaWxlLCBpcyBhcHByb3hpbWF0ZWx5IDEuMTUKK21lZ2FieXRlcy4gIFRoZSBzZWNvbmQgaXMgYW4gaW5jcmVhc2VkIGRpZmZlcmVuY2UgYmV0d2VlbiBJQ1UncworcmVzb3VyY2UgaW5mb3JtYXRpb24gYW5kIEphdmEncy4gIE5laXRoZXIgaXMgYSBjbGVhciBzdXBlcnNldCBvZiB0aGUKK290aGVyLiAgRm9yIGV4YW1wbGUsIEphdmEgY29yZSBjdXJyZW50bHkgaGFzIG1vcmUgdGltZXpvbmUgaW5mb3JtYXRpb24KK3RoYW4gSUNVLiAgSUNVJ3MgbW9kZWwgZm9yIGhhbmRsaW5nIGN1cnJlbmN5IGlzIGFsc28gZGlmZmVyZW50IHRoYW4KK0phdmEncy4gIFRoaXMgd2lsbCBjaGFuZ2Ugb3ZlciB0aW1lIGFzIG5ldyB2ZXJzaW9ucyBvZiBKYXZhIGFuZCBJQ1UKK2FyZSByZWxlYXNlZC4KKzwvcD4KKzxwPgorSW4gYWRkaXRpb24gdG8gdGhlIHJlc291cmNlIGluZm9ybWF0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIEphdmEKK3Jlc291cmNlIGluZm9ybWF0aW9uLCBJQ1U0SiBhbHNvIGluY2x1ZGVzIHJlc291cmNlIGluZm9ybWF0aW9uIG5lZWRlZAordG8gc3VwcG9ydCBpdHMgYWRkaXRpb25hbCBmZWF0dXJlcywgc3VjaCBhcyBUcmFuc2xpdGVyYXRpb24sIENhbGVuZGFyLAorYW5kIERpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IuICBUaGlzIGluZm9ybWF0aW9uIGhhcyBleGlzdGVkIGluCitzb21lIGZvcm0gaW4gcHJpb3IgcmVsZWFzZXMgb24gSUNVNEogYW5kIGhhcyBub3QgZ3JlYXRseSBjaGFuZ2VkIGluCitzaXplLgorPC9wPgorPHA+Rm9yIGluZm9ybWF0aW9uIGFib3V0IG1vZGlmeWluZyByZXNvdXJjZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZQordGhlIDxhIGhyZWY9cmVhZG1lLmh0bWw+cmVhZG1lPC9hPi48L3A+Cis8aHIgc2l6ZT0iMiIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPgorICAgIDxoMz48Qj5MaWNlbnNlPC9CPjwvaDM+CisgICAgPFA+CisgICAgUGxlYXNlIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIDxhIGhyZWY9Ii4vbGljZW5zZS5odG1sIj5saWNlbnNlPC9hPiAKKyAgICBpbmNsdWRlZCB3aXRoIHRoaXMgcmVsZWFzZSBiZWZvcmUgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIElDVTRKIGxpYnJhcmllcy4gCisgICAgPC9QPgorCis8aHIgc2l6ZT0iMiIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPgorPHA+PGk+PGZvbnQgc2l6ZT0iLTEiPkNvcHlyaWdodCAoQykgMjAwMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLjwvZm9udD48L2k+PC9wPgorPCEtLSNpbmNsdWRlIHZpcnR1YWw9Ii9pY3Uvc3NpL2Zvb3Rlci5odG1sIiAtLT4gCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvVGVzdERhdGFFbGVtZW50c190ZXN0YWxpYXNlcy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL1Rlc3REYXRhRWxlbWVudHNfdGVzdGFsaWFzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI4NjAyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL1Rlc3REYXRhRWxlbWVudHNfdGVzdGFsaWFzZXMuamF2YQpAQCAtMCwwICsxLDcxIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL1Rlc3REYXRhRWxlbWVudHNfdGVzdGFsaWFzZXMuamF2YSx2ICQKKyogJERhdGU6IDIwMDIvMDgvMTMgMjE6Mzk6MDEgJAorKiAkUmV2aXNpb246IDEuNCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBUZXN0RGF0YUVsZW1lbnRzX3Rlc3RhbGlhc2VzIGV4dGVuZHMgSUNVTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHB1YmxpYyBUZXN0RGF0YUVsZW1lbnRzX3Rlc3RhbGlhc2VzICAoKSB7CisgICAgICAgICAgc3VwZXIuY29udGVudHMgPSBkYXRhOworICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RbXVtdIGRhdGEgPSBuZXcgT2JqZWN0W11bXSB7IAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIkNvbGxhdGlvbkVsZW1lbnRzIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxpc3RSZXNvdXJjZUJ1bmRsZS5BbGlhcygiL0lDVURBVEEvdWsiKSwKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiYW5vdGhlcmFsaWFzIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxpc3RSZXNvdXJjZUJ1bmRsZS5BbGlhcygiL0lDVURBVEEvdWsvQ29sbGF0aW9uRWxlbWVudHMiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5vbmV4aXN0aW5nIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxpc3RSZXNvdXJjZUJ1bmRsZS5BbGlhcygiL0lDVURBVEEvdWsiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jaW5nYWxpYXMiLAorICAgICAgICAgICAgICAgICAgICBuZXcgSUNVTGlzdFJlc291cmNlQnVuZGxlLkFsaWFzKCJ0ZXN0YWxpYXNlcy9hbm90aGVyYWxpYXMvU2VxdWVuY2UiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInNpbXBsZWFsaWFzIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxpc3RSZXNvdXJjZUJ1bmRsZS5BbGlhcygidGVzdHR5cGVzL21lbnUvZmlsZS9vcGVuIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJ6b25lU3RyaW5ncyIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJQ1VMaXN0UmVzb3VyY2VCdW5kbGUuQWxpYXMoIi9JQ1VEQVRBL2VuIiksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSUNVTGlzdFJlc291cmNlQnVuZGxlLkFsaWFzKCIvSUNVREFUQS9lbiIpLAorCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJ6b25lVGVzdHMiLAorICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiem9uZUFsaWFzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSUNVTGlzdFJlc291cmNlQnVuZGxlLkFsaWFzKCIvSUNVREFUQS9lbi96b25lU3RyaW5ncyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiem9uZUFsaWFzMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxpc3RSZXNvdXJjZUJ1bmRsZS5BbGlhcygiL0lDVURBVEEvZW4vem9uZVN0cmluZ3MvMyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiem9uZUFsaWFzMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxpc3RSZXNvdXJjZUJ1bmRsZS5BbGlhcygiL0lDVURBVEEvZW4vem9uZVN0cmluZ3MvMy8wIiksCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0sCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9UZXN0RGF0YUVsZW1lbnRzX3Rlc3RjaXJjdWxhcmFsaWFzLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvVGVzdERhdGFFbGVtZW50c190ZXN0Y2lyY3VsYXJhbGlhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZmQ5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvVGVzdERhdGFFbGVtZW50c190ZXN0Y2lyY3VsYXJhbGlhcy5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvVGVzdERhdGFFbGVtZW50c190ZXN0Y2lyY3VsYXJhbGlhcy5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjE6NDM6MzggJAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTGlzdFJlc291cmNlQnVuZGxlOworLyoqCisgKiBAYXV0aG9yIFJhbQorICoKKyAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6CisgKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuCisgKiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHR5cGUgY29tbWVudHMgZ28gdG8KKyAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KKyAqLworcHVibGljIGNsYXNzIFRlc3REYXRhRWxlbWVudHNfdGVzdGNpcmN1bGFyYWxpYXMgIGV4dGVuZHMgSUNVTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBwdWJsaWMgVGVzdERhdGFFbGVtZW50c190ZXN0Y2lyY3VsYXJhbGlhcygpIHsKKyAgICAgICAgICBzdXBlci5jb250ZW50cyA9IGRhdGE7CisgICAgfQorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdFtdW10gZGF0YSA9IG5ldyBPYmplY3RbXVtdIHsgCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiYWFhIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxpc3RSZXNvdXJjZUJ1bmRsZS5BbGlhcygidGVzdGNpcmN1bGFyYWxpYXMvYWFiIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJhYWIiLAorICAgICAgICAgICAgICAgICAgICBuZXcgSUNVTGlzdFJlc291cmNlQnVuZGxlLkFsaWFzKCJ0ZXN0Y2lyY3VsYXJhbGlhcy9hYWMiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImFhYyIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBJQ1VMaXN0UmVzb3VyY2VCdW5kbGUuQWxpYXMoInRlc3RjaXJjdWxhcmFsaWFzL2FhYSIpLAorICAgICAgICAgICAgICAgIH0gCisgICAgfTsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL1Rlc3REYXRhRWxlbWVudHNfdGVzdHR5cGVzLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvVGVzdERhdGFFbGVtZW50c190ZXN0dHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjM4ZThkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL1Rlc3REYXRhRWxlbWVudHNfdGVzdHR5cGVzLmphdmEKQEAgLTAsMCArMSwxNDUgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvVGVzdERhdGFFbGVtZW50c190ZXN0dHlwZXMuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIxOjQ3OjMwICQKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIFRlc3REYXRhRWxlbWVudHNfdGVzdHR5cGVzIGV4dGVuZHMgSUNVTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHB1YmxpYyBUZXN0RGF0YUVsZW1lbnRzX3Rlc3R0eXBlcyAgKCkgeworICAgICAgICAgIHN1cGVyLmNvbnRlbnRzID0gZGF0YTsKKyAgICB9CisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0W11bXSBkYXRhID0gbmV3IE9iamVjdFtdW10geyAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJiaW5hcnl0ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxpc3RSZXNvdXJjZUJ1bmRsZS5Db21wcmVzc2VkQmluYXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAwMFx1MDAwRlx1MDAwMVx1MDIwM1x1MDQwNVx1MDYwN1x1MDgwOVx1MEEwQiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIlx1MEMwRFx1MEUwMCIpLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZW1wdHlhcnJheSIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZW1wdHliaW4iLAorICAgICAgICAgICAgICAgICAgICBuZXcgSUNVTGlzdFJlc291cmNlQnVuZGxlLkNvbXByZXNzZWRCaW5hcnkobnVsbCksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJlbXB0eWV4cGxpY2l0c3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJlbXB0eWludCIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlZ2VyKDApLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZW1wdHlpbnR2IiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IEludGVnZXJbXSB7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJlbXB0eXN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZW1wdHl0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXVtdeworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiaW1wb3J0dGVzdCIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBJQ1VMaXN0UmVzb3VyY2VCdW5kbGUuQ29tcHJlc3NlZEJpbmFyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdTAwMDBcdTAwMEZcdTAwMDFcdTAyMDNcdTA0MDVcdTA2MDdcdTA4MDlcdTBBMEIiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdTBDMERcdTBFMDAiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImludGVnZXJhcnJheSIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlZ2VyW10geworICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVnZXIoMSksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZWdlcigyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlZ2VyKDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVnZXIoLTMpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVnZXIoNCksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZWdlcig1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlZ2VyKDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVnZXIoNyksCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJtZW51IiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhpdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhpdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibWludXNvbmUiLAorICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZWdlcigtMSksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJvbmUiLAorICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZWdlcigxKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm9uZWh1bmRyZWR0d2VudHl0aHJlZSIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlZ2VyKDEyMyksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJwbHVzb25lIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IEludGVnZXIoMSksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInN0cmluZ1RhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3VuZGVyc2NvcmVzIiwKKyAgICAgICAgICAgICAgICAgICAgInRlc3QgbWVzc2FnZSAuLi4uIiwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInRlc3Rlc2NhcGUiLAorICAgICAgICAgICAgICAgICAgICAidGFiOlx1MDAwOSBjcjpcZiBmZjpcdTAwMEMgbmV3bGluZTpcbiBiYWNrc2xhc2g6XFwiICsKKyAgICAgICAgICAgICAgICAgICAgIiBxdW90ZT1cXFwnIGRvdWJsZVF1b3RlPVxcXCIgc2luZ2xlcXVvdXRlcz0nJyIsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJ6ZXJvdGVzdCIsCisgICAgICAgICAgICAgICAgICAgICJhYmNcdTAwMDBkZWYiLAorICAgICAgICAgICAgICAgIH0sCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9UaGFpV29yZEZyZXEueGxzIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL1RoYWlXb3JkRnJlcS54bHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2MjAzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9UaGFpV29yZEZyZXEueGxzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9ob2xpZGF5c19qcC51Y3MgYi9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvaG9saWRheXNfanAudWNzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlNmJjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvaG9saWRheXNfanAudWNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9yYmJpL2VuZ2xpc2guZGljdCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9yYmJpL2VuZ2xpc2guZGljdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMGY0MzBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL3JiYmkvZW5nbGlzaC5kaWN0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9yYmJpL3dvcmRzLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9yYmJpL3dvcmRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hN2UwNmFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL3JiYmkvd29yZHMudHh0CkBAIC0wLDAgKzEsMjk5MCBAQAorLS0KKy0tc3VjaAorYQorYSdiZWwtbWl6cmFpbQorYSdpYWgKK2FiYXRlCithYmF0ZWQKK2FiZGljYXRlZAorYWJlbAorYWJpJ2RhCithYmlkZQorYWJpbSdhLWVsCithYmltJ2VsZWNoCithYmltJ2VsZWNoJ3MKK2FibGUKK2Fib2xpc2gKK2Fib2xpc2hpbmcKK2Fib21pbmF0aW9uCithYm91dAorYWJvdmUKK2FicmFoYW0KK2FicmFoYW0ncworYWJyYW0KK2FicmFtJ3MKK2Ficm9hZAorYWJzZW50CithYnNvbHV0ZQorYWJzb2x2ZWQKK2FidW5kYW5jZQorYWJ1bmRhbnRseQorYWJ1c2VzCithY2NhZAorYWNjZXB0CithY2NlcHRlZAorYWNjb21tb2RhdGlvbgorYWNjb3JkaW5nCithY2NvcmRpbmdseQorYWNjb3VudAorYWNjdXN0b21lZAorYWNoYm9yCithY2tub3dsZWRnZWQKK2FjcXVpZXNjZQorYWNxdWlyZWQKK2Fjcm9zcworYWN0CithY3RzCithZGFoCithZGFtCithZGJlZWwKK2FkZAorYWRkZWQKK2FkbWFoCithZG1pbmlzdHJhdGlvbgorYWR1bGxhbWl0ZQorYWR2YW5jZWQKK2FkdmlzZXIKK2FmYXIKK2FmZmVjdGVkCithZmZsaWN0ZWQKK2FmZmxpY3Rpb24KK2FmcmFpZAorYWZ0ZXIKK2FmdGVyd2FyZAorYWZ0ZXJ3YXJkcworYWdhaW4KK2FnYWluc3QKK2FnZQorYWdlcworYWdpbGUKK2FncmVlCithZ3JlZWQKK2FodXonemF0aAorYWkKK2FpZAorYWlyCitha2FuCithbCdsb24tYmFjdXRoCithbGlnaHRlZAorYWxpdmUKK2FsbAorYWxsZWdpYW5jZQorYWxsaWFuY2VzCithbGxpZXMKK2FsbG93CithbGxvd2FuY2UKK2FsbWlnaHR5CithbG1vJ2RhZAorYWxtb25kCithbG1vbmRzCithbG9uZQorYWxvbmcKK2Fsb3VkCithbHJlYWR5CithbHNvCithbHRhcgorYWx0ZXIKK2FsdGVyaW5nCithbHRob3VnaAorYWx0b2dldGhlcgorYWx2YWgKK2FsdmFuCithbQorYW0nYWxlaworYW0ncmFwaGVsCithbWFsJ2VraXRlcworYW1hemVtZW50CithbWVyaWNhCithbW1vbml0ZXMKK2Ftb25nCithbW9uZ3N0CithbW9yaXRlCithbW9yaXRlcworYW1vdW50CithbgorYW4nYW1pbQorYW5haAorYW5kCithbmVyCithbmdlbAorYW5nZWxzCithbmdlcgorYW5ncnkKK2FuaW1hbAorYW5pbWFscworYW5uaWhpbGF0aW9uCithbm9pbnRlZAorYW5vdGhlcgorYW5vdGhlcidzCithbnN3ZXIKK2Fuc3dlcmVkCithbnkKK2FueXRoaW5nCithbnl3aGVyZQorYXBhcnQKK2FwcGVhbGVkCithcHBlYWxpbmcKK2FwcGVhcgorYXBwZWFyZWQKK2FwcGVhc2UKK2FwcG9pbnQKK2FwcG9pbnRlZAorYXBwcm9hY2hlZAorYXBwcm9hY2hpbmcKK2FwcHJvcHJpYXRpb25zCithcHJvbnMKK2FyJ2FyYXQKK2FyJ2lvY2gKK2FyJ3ZhZGl0ZXMKK2FyYW0KK2FyYW1lYW4KK2FyYW4KK2FyYml0cmFyeQorYXJjaGVycworYXJkCithcmUKK2FyZSdsaQorYXJlYQorYXJpc2UKK2FyaworYXJraXRlcworYXJtZWQKK2FybWllcworYXJtcworYXJteQorYXJvJ2RpCithcm9zZQorYXJvdW5kCithcnBhY2gnc2hhZAorYXJyYXllZAorYXJyaXZlCithcnQKK2FzCithcydlbmF0aAorYXNjZW5kaW5nCithc2gna2VuYXoKK2FzaCd0ZXJvdGgta2FybmEnaW0KK2FzaGFtZWQKK2FzaGJlbAorYXNoZXIKK2FzaGVyJ3MKK2FzaGVzCithc2lkZQorYXNrCithc2tlZAorYXNrcworYXNsZWVwCithc3MKK2FzcydzCithc3NlbWJsZQorYXNzZW1ibGVkCithc3NlbnQKK2Fzc2VzCithc3NodSdyaW0KK2Fzc2h1cgorYXNzdW1lCithc3N1cmVkCithc3N5cmlhCithdAorYXRhZAorYXRlCithdHRhY2sKK2F0dGFja2VkCithdHRhaW5lZAorYXR0ZW1wdHMKK2F0dGVuZAorYXR0ZW5kZWQKK2F0dGVudGlvbgorYXV0aG9yaXR5CithdmVuZ2VkCithdml0aAorYXdheQorYXdlc29tZQorYXdva2UKK2JhJ2FsLWhhJ25hbgorYmEnYmVsCitiYWNrCitiYWNrd2FyZAorYmFkCitiYWRlCitiYWdzCitiYWtlZAorYmFrZXIKK2JhbG0KK2JhbmsKK2JhbmtzCitiYXJiYXJvdXMKK2JhcnJlbgorYmFzJ2VtYXRoCitiYXNrZXQKK2Jhc2tldHMKK2JhdHRsZQorYmRlbGxpdW0KK2JlCitiZSdvcgorYmUtZSdyaQorYmVhcgorYmVhcmluZworYmVhcnMKK2JlYXN0CitiZWFzdHMKK2JlYXV0aWZ1bAorYmVjYW1lCitiZWNhdXNlCitiZWNoZXIKK2JlY29tZQorYmVjb21lcworYmVkCitiZWRhZAorYmVlbgorYmVlci1sYSdoYWktcm9pCitiZWVyLXNoZWJhCitiZWZhbGwKK2JlZmFsbGVuCitiZWZhbGxzCitiZWZvcmUKK2JlZworYmVnYW4KK2JlZ2lubmluZworYmVndWlsZWQKK2JlZ3VuCitiZWhlbGQKK2JlaGluZAorYmVob2xkCitiZWluZworYmVsYQorYmVsaWV2ZQorYmVsaWV2ZWQKK2JlbGx5CitiZWxvbmcKK2JlbG9uZ2luZworYmVsb25ncworYmVsb3cKK2Jlbi1hbW1pCitiZW4tbyduaQorYmVuZWF0aAorYmVuZWZpdHMKK2JlbmphbWluCitiZW5qYW1pbidzCitiZXJhCitiZXJlYXZlZAorYmVyZWQKK2JlcmVmdAorYmVyaSdhaAorYmVzaWRlCitiZXNpZGVzCitiZXNvdWdodAorYmVzdAorYmV0aGVsCitiZXRobGVoZW0KK2JldGh1J2VsCitiZXR0ZXIKK2JldHdlZW4KK2JleW9uZAorYmlsaGFoCitiaWxoYW4KK2JpbmRpbmcKK2JpcmQKK2JpcmRzCitiaXJzaGEKK2JpcnRoCitiaXJ0aGRheQorYmlydGhyaWdodAorYml0ZXMKK2JpdHRlcgorYml0dW1lbgorYmxhY2sKK2JsYW1lCitibGFtZWxlc3MKK2JsZXNzCitibGVzc2VkCitibGVzc2VzCitibGVzc2luZworYmxlc3NpbmdzCitibGlnaHRlZAorYmxpbmRuZXNzCitibG9vZAorYmxvc3NvbXMKK2Jsb3QKK2Jsb3R0ZWQKK2Jsb3cKK2JvZGllcworYm9keQorYm9pbGluZworYm9uZHMKK2JvbmUKK2JvbmVzCitib29rCitib290aHMKK2JvcmRlcgorYm9yZQorYm9ybgorYm9ybmUKK2JvdGgKK2JvdWdoCitib3VnaHQKK2JvdW5kCitib3VuZGFyaWVzCitib3VudGllcworYm93Citib3dlZAorYm93aW5nCitib3dzaG90Citib3lzCitib3pyYWgKK2JyYWNlbGV0cworYnJhbmNoZXMKK2JyZWFjaAorYnJlYWQKK2JyZWFkdGgKK2JyZWFrCiticmVha2luZworYnJlYXN0cworYnJlYXRoCiticmVhdGhlZAorYnJlZAorYnJlZWQKK2JyZWVkaW5nCiticmV0aHJlbgorYnJpY2sKK2JyaWNrcworYnJpbXN0b25lCiticmluZworYnJpdGFpbgorYnJpdGlzaAorYnJva2VuCiticm9uemUKK2Jyb3RoZXIKK2Jyb3RoZXIncworYnJvdGhlci1pbi1sYXcKK2Jyb3RoZXJzCiticm91Z2h0Citicm93CiticnVpc2UKK2J1ZGRlZAorYnVpbGQKK2J1aWxkaW5nCitidWlsdAorYnVsbHMKK2J1bmRsZQorYnVuZGxlcworYnVyaWVkCitidXJuCitidXJuZWQKK2J1cm50CitidXJzdAorYnVyeQorYnVyeWluZworYnVzaGVzCitidXQKK2J1dGxlcgorYnV0bGVyc2hpcAorYnV5CitidXoKK2J5CitjYWluCitjYWtlCitjYWtlcworY2FsYWgKK2NhbGYKK2NhbGwKK2NhbGxlZAorY2FsbHMKK2NhbWUKK2NhbWVsCitjYW1lbCdzCitjYW1lbHMKK2NhbXAKK2NhbXBlZAorY2FuCitjYW5hYW4KK2NhbmFhbicKK2NhbmFhbml0ZQorY2FuYWFuaXRlcworY2FuYWFuaXRpc2gKK2NhbmRpZAorY2Fubm90CitjYXBoJ3RvcmltCitjYXB0YWluCitjYXB0aXZlCitjYXB0aXZlcworY2FwdHVyZWQKK2NhcmF2YW4KK2NhcmNhc3NlcworY2FyZQorY2FyZWZ1bGx5CitjYXJtaQorY2FycmllZAorY2FycnkKK2Nhc2VzCitjYXNsdSdoaW0KK2Nhc3QKK2NhdHRsZQorY2F1Z2h0CitjYXVzZQorY2F1c2VkCitjYXVzZXMKK2NhdmUKK2NlYXNlCitjZWFzZWQKK2NlcnRhaW4KK2NoYWluCitjaGFsZGUnYW5zCitjaGFtYmVyCitjaGFuZ2UKK2NoYW5nZWQKK2NoYXJhY3RlcgorY2hhcmdlCitjaGFyZ2VkCitjaGFyZ2luZworY2hhcmlvdAorY2hhcmlvdHMKK2NoYXJ0ZXJzCitjaGVhdAorY2hlYXRlZAorY2hlZC1vci1sYW8nbWVyCitjaGVyYW4KK2NoZXJ1YmltCitjaGVzZWQKK2NoZXppYgorY2hpZWYKK2NoaWVmcworY2hpbGQKK2NoaWxkYmVhcmluZworY2hpbGRsZXNzCitjaGlsZHJlbgorY2hpbGRyZW4ncworY2hvaWNlCitjaG9pY2VzdAorY2hvc2UKK2Nob3NlbgorY2lyY3VtY2lzZWQKK2NpcmN1bXN0YW5jZXMKK2NpdGllcworY2l0aXplbnMKK2NpdHkKK2NpdmlsCitjaXZpbGl6ZWQKK2NsYW5zCitjbGVhbgorY2xlYXIKK2NsZWF2ZXMKK2Nsb3NlCitjbG9zZWQKK2Nsb3RoZWQKK2Nsb3RoZXMKK2Nsb3RoaW5nCitjbG91ZAorY2xvdWRzCitjbHVzdGVycworY29hc3RsYW5kCitjb2FzdHMKK2NvZmZpbgorY29sZAorY29sb25pZXMKK2NvbG9uaWVzOgorY29sdAorY29sdHMKK2NvbWJpbmVkCitjb21lCitjb21lbHkKK2NvbWVzCitjb21mb3J0Citjb21mb3J0ZWQKK2NvbWZvcnRzCitjb21pbmcKK2NvbW1hbmQKK2NvbW1hbmRlZAorY29tbWFuZGVyCitjb21tYW5kbWVudHMKK2NvbW1lcmNlCitjb21taXQKK2NvbW1pdHRlZAorY29tbW9uCitjb21wYW5pZXMKK2NvbXBhbnkKK2NvbXBsYWluZWQKK2NvbXBsZXRlCitjb21wbGV0ZWQKK2NvbXBsaWFuY2UKK2NvbmNlYWwKK2NvbmNlaXZlZAorY29uY2VybgorY29uY2VybmluZworY29uY2x1ZGUKK2NvbmN1YmluZQorY29uY3ViaW5lcworY29uZGl0aW9uCitjb25kaXRpb25zCitjb25maW5lZAorY29uZnVzZQorY29uZnVzZWQKK2NvbmdyZXNzCitjb25qdXJlZAorY29ubmVjdGVkCitjb25uZWN0aW9uCitjb25uZWN0aW9ucworY29uc2VudAorY29uc2VudDoKK2NvbnNwaXJlZAorY29uc3RpdHV0aW9uCitjb25zdHJhaW5lZAorY29uc3RyYWlucworY29uc3VtZQorY29uc3VtZWQKK2NvbnRlbXB0Citjb250ZW5kZWQKK2NvbnRpbnVhbGx5Citjb250aW51ZQorY29udGludWVkCitjb250cmFjdAorY29udHJvbAorY29udHJvbGxpbmcKK2NvbnZ1bHNpb25zCitjb29sCitjb3JkCitjb3JyZXNwb25kZW5jZQorY29ycnVwdAorY29ycnVwdGVkCitjb3N0bHkKK2NvdWNoCitjb3VjaGVkCitjb3VjaGVzCitjb3VjaGluZworY291bGQKK2NvdW5jaWwKK2NvdW50Citjb3VudGVkCitjb3VudGVuYW5jZQorY291bnRyeQorY291cnNlCitjb3ZlbmFudAorY292ZXIKK2NvdmVyZWQKK2NvdmVyaW5nCitjb3dzCitjcmVhdGVkCitjcmVhdGlvbgorY3JlYXRvcgorY3JlYXR1cmUKK2NyZWF0dXJlcworY3JlZXBpbmcKK2NyZWVwcworY3JpZWQKK2Nyb3NzZWQKK2Nyb3NzaW5nCitjcm91Y2hpbmcKK2Nyb3duCitjcnVlbAorY3J1ZWx0eQorY3J5CitjcnlpbmcKK2N1Yml0CitjdWJpdHMKK2N1cAorY3VyZHMKK2N1cnJlbnQKK2N1cnNlCitjdXJzZWQKK2N1cnNlcworY3VzaAorY3VzdG9keQorY3V0CitjdXR0aW5nCitkYWludGllcworZGFtYXNjdXMKK2RhbgorZGFuZ2VycworZGFyZXMKK2RhcmsKK2RhcmtuZXNzCitkYXVnaHRlcgorZGF1Z2h0ZXItaW4tbGF3CitkYXVnaHRlcnMKK2Rhd25lZAorZGF5CitkYXlzCitkZWFkCitkZWFsCitkZWFsdAorZGVhdGgKK2RlYidvcmFoCitkZWNlaXRmdWxseQorZGVjZWl2ZWQKK2RlY2VudAorZGVjaWRlCitkZWNrcworZGVjbGFyYXRpb24KK2RlY2xhcmUKK2RlY2xhcmluZworZGVkYW4KK2RlZWQKK2RlZXAKK2RlZmVhdAorZGVmZWF0ZWQKK2RlZmlsZWQKK2RlZmluZQorZGVsYXkKK2RlbGF5ZWQKK2RlbGlnaHQKK2RlbGl2ZXIKK2RlbGl2ZXJlZAorZGVsaXZlcnkKK2RlbmllZAorZGVub3VuY2VzCitkZXBhcnQKK2RlcGFydGVkCitkZXBhcnRpbmcKK2RlcGVuZGVudAorZGVwZW5kZW50cworZGVwb3NpdG9yeQorZGVwcml2aW5nCitkZXJpdmluZworZGVzY2VuZGFudHMKK2Rlc2NlbmRpbmcKK2Rlc2lnbgorZGVzaXJlCitkZXNpcmVkCitkZXNvbGF0ZQorZGVzb2xhdGlvbgorZGVzcGlzZWQKK2Rlc3BvdGlzbQorZGVzdHJveQorZGVzdHJveWVkCitkZXN0cm95cworZGVzdHJ1Y3Rpb24KK2Rlc3RydWN0aXZlCitkZXRlcm1pbmVkCitkZXZvdXJlZAorZGV2b3VyaW5nCitkZXcKK2RpY3RhdGUKK2RpZAorZGlkc3QKK2RpZQorZGllZAorZGllcworZGlrbGFoCitkaW0KK2RpbidoYWJhaAorZGluYWgKK2RpbmFoJ3MKK2RpbmUKK2RpcHBlZAorZGlyZWN0CitkaXJlY3Rpb24KK2Rpc2FzdGVyCitkaXNhdm93CitkaXNjcmVldAorZGlzZ3JhY2UKK2Rpc2hhbgorZGlzaG9uCitkaXNtYXllZAorZGlzcGxlYXNlZAorZGlzcGxlYXNpbmcKK2Rpc3Bvc2VkCitkaXNzb2x1dGlvbnMKK2Rpc3NvbHZlCitkaXNzb2x2ZWQKK2Rpc3RhbmNlCitkaXN0YW50CitkaXN0cmVzcworZGlzdHJlc3NlZAorZGlzdHJpY3RzCitkaXZpZGUKK2RpdmlkZWQKK2RpdmlkaW5nCitkaXZpbmF0aW9uCitkaXZpbmUKK2RpdmluZXMKK2RvCitkbydkYW5pbQorZG9lcgorZG9lcworZG9pbmcKK2RvbWVzdGljCitkb21pbmlvbgorZG9uZQorZG9vcgorZG90aGFuCitkb3VibGUKK2RvdWJsaW5nCitkb3VidAorZG92ZQorZG93bgorZG93bmNhc3QKK2Rvd3J5CitkcmFuaworZHJhdworZHJhd24KK2RyZWFkCitkcmVhbQorZHJlYW1lZAorZHJlYW1lcgorZHJlYW1zCitkcmV3CitkcmllZAorZHJpbmsKK2RyaW5raW5nCitkcmlua3MKK2RyaXZlbgorZHJvdmUKK2Ryb3ZlcworZHJ1bmsKK2RyeQorZHVnCitkdW1haAorZHVuZ2VvbgorZHVyaW5nCitkdXN0CitkdXR5Citkd2VsbAorZHdlbGxpbmcKK2R3ZWx0CitlJ2RvbWl0ZXMKK2UncGhyYWltCitlJ3BocmFpbSdzCitlYWNoCitlYXJseQorZWFycworZWFydGgKK2Vhc2lseQorZWFzdAorZWFzdHdhcmQKK2VhdAorZWF0ZW4KK2VhdGluZworZWJhbAorZWJlcgorZWRlbgorZWRlcgorZWRvbQorZWZmZWN0CitlZ3lwdAorZWd5cHRpYW4KK2VneXB0aWFuJ3MKK2VneXB0aWFucworZWhpCitlaWdodAorZWlnaHRlZW4KK2VpZ2h0eQorZWlnaHR5LXNldmVuCitlaWdodHktc2l4CitlaWdodHktdHdvCitlaXRoZXIKK2VsJ2lwaGF6CitlbC1iZXRoZWwKK2VsLWVsJ29oZS1pc3JhZWwKK2VsLXBhcmFuCitlbGFoCitlbGFtCitlbGRhJ2FoCitlbGRlcgorZWxkZXJzCitlbGRlc3QKK2VsZWN0ZWQKK2VsZXZlbgorZWxpJ3NoYWgKK2VsaWUnemVyCitlbGxhJ3NhcgorZWxvbgorZWxzZQorZW1iYWxtCitlbWJhbG1lZAorZW1iYWxtaW5nCitlbWJyYWNlCitlbWJyYWNlZAorZW1pZ3JhdGlvbgorZW1pbQorZW1wdGllZAorZW1wdHkKK2VtcHR5LWhhbmRlZAorZW5haW0KK2VuY2FtcGVkCitlbmNhbXBtZW50cworZW5jb3VyYWdlCitlbmQKK2VuZGVhdm9yZWQKK2VuZGVkCitlbmRpbmcKK2VuZG93ZWQKK2VuZHMKK2VuZW1pZXMKK2VuZW15CitlbmdsaXNoCitlbmxhcmdlCitlbmxhcmdpbmcKK2VubWlzaCdwYXQKK2VubWl0eQorZW5vY2gKK2Vub3NoCitlbm91Z2gKK2VudGVyCitlbnRlcmVkCitlbnRpdGxlCitlbnRyYW5jZQorZW50cmVhdAorZW52aWVkCitlcGhhaAorZXBoZXIKK2VwaHJhdGgKK2VwaHJvbgorZXF1YWwKK2VyCitlcmVjaAorZXJlY3RlZAorZXJpCitlcnJhbmQKK2VzYXUKK2VzYXUncworZXNjYXBlCitlc2NhcGVkCitlc2VrCitlc2hiYW4KK2VzaGNvbAorZXN0YWJsaXNoCitlc3RhYmxpc2hlZAorZXN0YWJsaXNoaW5nCitlc3RhYmxpc2htZW50CitldGVybmFsCitldXBocmEndGVzCitldXBocmF0ZXMKK2V2ZQorZXZlbgorZXZlbmluZworZXZlbnRzCitldmVyCitldmVybGFzdGluZworZXZlcnkKK2V2ZXJ5dGhpbmcKK2V2ZXJ5d2hlcmUKK2V2aWwKK2V2aWxzCitldmluY2VzCitld2UKK2V3ZXMKK2V4YW1wbGUKK2V4Y2VlZGluZ2x5CitleGNlcHQKK2V4Y2hhbmdlCitleGNpdGVkCitleGVjdXRpb25lcnMKK2V4ZXJjaXNlCitleHBlcmllbmNlCitleHBlcnQKK2V4cGxhaW4KK2V4cG9zZWQKK2V4cG9zaW5nCitleHRlbmQKK2V4dGVuZGVkCitleWVzCitlemJvbgorZXplcgorZmFjZQorZmFjZXMKK2ZhY3RzCitmYWlsZWQKK2ZhaW50ZWQKK2ZhaXIKK2ZhaXRoZnVsbmVzcworZmFsbAorZmFsbGVuCitmYWxscworZmFsc2VseQorZmFtaWxpZXMKK2ZhbWlseQorZmFtaW5lCitmYW1pc2hlZAorZmFyCitmYXJlCitmYXJlZAorZmFyZXdlbGwKK2Zhc3QKK2ZhdAorZmF0aGVyCitmYXRoZXIncworZmF0aGVyLWluLWxhdworZmF0aGVycworZmF0aWd1aW5nCitmYXRuZXNzCitmYXVsdHMKK2Zhdm9yCitmYXZvcmFibGUKK2Zhd25zCitmZWFyCitmZWFyZWQKK2ZlYXN0CitmZWQKK2ZlZWJsZXIKK2ZlZWQKK2ZlZWwKK2ZlZXQKK2ZlbGwKK2ZlbGxvdworZmVsdAorZmVtYWxlCitmZXN0YWwKK2ZldGNoCitmZXcKK2ZpZWxkCitmaWVsZHMKK2ZpZXJjZQorZmllcmNlbHkKK2ZpZnRlZW4KK2ZpZnRoCitmaWZ0aHMKK2ZpZnR5CitmaWcKK2ZpbGwKK2ZpbGxlZAorZmluZAorZmluZHMKK2ZpbmUKK2ZpbmlzaAorZmluaXNoZWQKK2ZpcmUKK2Zpcm0KK2Zpcm1hbWVudAorZmlybW5lc3MKK2ZpcnN0CitmaXJzdC0KK2ZpcnN0LWJvcm4KK2ZpcnN0bGluZ3MKK2Zpc2gKK2ZpdAorZml2ZQorZml4ZWQKK2ZsYW1pbmcKK2ZsZWQKK2ZsZWUKK2ZsZWVpbmcKK2ZsZXNoCitmbG9hdGVkCitmbG9jaworZmxvY2tzCitmbG9vZAorZmxvb3IKK2Zsb3dlZAorZmxvd3MKK2ZseQorZm9hbAorZm9sbG93Citmb2xsb3dlZAorZm9sbG93aW5nCitmb2xsb3dzCitmb2xseQorZm9uZGxpbmcKK2Zvb2QKK2Zvb2xpc2hseQorZm9vdAorZm9yCitmb3JiaWRkZW4KK2ZvcmNlCitmb3JjZWQKK2ZvcmNlcworZm9yZAorZm9yZWlnbgorZm9yZWlnbmVyCitmb3JlaWduZXJzCitmb3JlbW9zdAorZm9yZXNraW4KK2ZvcmVza2lucworZm9yZ2VyCitmb3JnZXQKK2ZvcmdldHMKK2ZvcmdpdmUKK2ZvcmdvdAorZm9yZ290dGVuCitmb3JtCitmb3JtZWQKK2Zvcm1lcgorZm9ybWVybHkKK2Zvcm1pZGFibGUKK2Zvcm1zCitmb3JzYWtlbgorZm9ydGgKK2ZvcnR1bmUKK2ZvcnR1bmVzCitmb3J0eQorZm9ydHktZml2ZQorZm9ydHktc2V2ZW4KK2ZvdW5kCitmb3VuZGF0aW9uCitmb3VudGFpbnMKK2ZvdXIKK2ZvdXJ0ZWVuCitmb3VydGVlbnRoCitmb3VydGgKK2ZyYWlsCitmcmVlCitmcmVlbHkKK2ZyZXNoCitmcmVzaGx5CitmcmllbmQKK2ZyaWVuZGx5CitmcmllbmRzCitmcm8KK2Zyb20KK2Zyb250Citmcm9udGllcnMKK2ZydWl0CitmcnVpdGZ1bAorZnJ1aXRzCitmdWdpdGl2ZQorZnVsZmlsCitmdWxmaWxsZWQKK2Z1bGwKK2Z1bmRhbWVudGFsbHkKK2Z1cm5hY2UKK2Z1cnkKK2Z1dHVyZQorZ2FkCitnYWhhbQorZ2FpbmVkCitnYWxlZWQKK2dhbWUKK2dhcmRlbgorZ2FybWVudAorZ2FybWVudHMKK2dhdGFtCitnYXRlCitnYXRoZXIKK2dhdGhlcmVkCitnYXVudAorZ2F2ZQorZ2F2ZXN0CitnYXphCitnYXplZAorZ2VuZWFsb2dpZXMKK2dlbmVyYWwKK2dlbmVyYXRpb24KK2dlbmVyYXRpb25zCitnZXJhCitnZXJhcgorZ2Vyc2hvbgorZ2V0CitnZXRoZXIKK2dpZnQKK2dpZnRzCitnaWhvbgorZ2lsZWFkCitnaXInZ2FzaGl0ZXMKK2dpdmUKK2dpdmVuCitnaXZlc3QKK2dpdmluZworZ28KK2dvYXQKK2dvYXRzCitnb2QKK2dvZCdzCitnb2RzCitnb2VzCitnb2knaW0KK2dvaW5nCitnb2xkCitnb21lcgorZ29tb3IncmFoCitnb25lCitnb29kCitnb29kLWxvb2tpbmcKK2dvb2RzCitnb3BoZXIKK2dvc2hlbgorZ290Citnb3R0ZW4KK2dvdmVybmVkCitnb3Zlcm5tZW50Citnb3Zlcm5tZW50cworZ292ZXJubWVudHM6Citnb3Zlcm5vcgorZ292ZXJub3JzCitncmFjaW91cworZ3JhY2lvdXNseQorZ3JhaW4KK2dyYW5kY2hpbGRyZW4KK2dyYW5kc29uCitncmFudAorZ3JhbnRlZAorZ3JhcGVzCitncmFzcworZ3JhdmUKK2dyYXkKK2dyZWF0CitncmVhdGVyCitncmVhdGx5CitncmVlbgorZ3JldworZ3JpZXZlZAorZ3JpZXZvdXMKK2dyb3BpbmcKK2dyb3VuZAorZ3JvdworZ3Jvd2luZworZ3Jvd24KK2dyb3dzCitndWFyZAorZ3VhcmRzCitndWlsZQorZ3VpbHQKK2d1aWx0eQorZ3VtCitndW5pCitoYSdtYXRoaXRlcworaGFkCitoYWRhZAoraGFkYXIKK2hhZG9yJ2FtCitoYWdhcgoraGFnZ2kKK2hhaXJzCitoYWlyeQoraGFsZgoraGFsbG93ZWQKK2hhbQoraGFtb3IKK2hhbW9yJ3MKK2hhbXN0cmluZworaGFtdWwKK2hhbmQKK2hhbmRzCitoYW5kc29tZQoraGFuZworaGFuZ2VkCitoYW5vY2gKK2hhcHBlbmVkCitoYXBwaW5lc3MKK2hhcHB5CitoYXJhbgoraGFyYXNzCitoYXJhc3NlZAoraGFyZAoraGFyZHNoaXAKK2hhcmxvdAoraGFybG90cnkKK2hhcm0KK2hhcnNobHkKK2hhcnZlc3QKK2hhcnZlc3RzCitoYXMKK2hhc3QKK2hhc3RlCitoYXN0ZW5lZAoraGFzdGlseQoraGF0ZQoraGF0ZWQKK2hhdGgKK2hhdidpbGFoCitoYXZlCitoYXZlbgoraGF2aWxhaAoraGF2aW5nCitoYXonYXpvbi10YSdtYXIKK2hhemFybWEndmV0aAoraGF6bworaGUKK2hlLWFzc2VzCitoZS1nb2F0cworaGVhZAoraGVhZHMKK2hlYWxlZAoraGVhcAoraGVhcgoraGVhcmQKK2hlYXJpbmcKK2hlYXJrZW4KK2hlYXJrZW5lZAoraGVhcnMKK2hlYXJ0CitoZWFydHMKK2hlYXQKK2hlYXZlbgoraGVhdmVucworaGViZXIKK2hlYnJldworaGVicmV3cworaGVicm9uCitoZWVkCitoZWVkZWQKK2hlZWwKK2hlZWxzCitoZWlmZXIKK2hlaWdodAoraGVpcgoraGVsZAoraGVscAoraGVscGVyCitoZW1hbgoraGVtZGFuCitoZXIKK2hlcmIKK2hlcmQKK2hlcmRzCitoZXJkc21lbgoraGVyZQoraGVyc2VsZgoraGV0aAoraGV3ZWQKK2hlenJvbgoraGlkCitoaWRkZW4KK2hpZGUKK2hpZ2gKK2hpbGwKK2hpbGxzCitoaW0KK2hpbXNlbGYKK2hpbmQKK2hpbmRlcgoraGlwCitoaXJhaAoraGlyZQoraGlyZWQKK2hpcworaGlzdG9yeQoraGl0aGVyCitoaXR0aXRlCitoaXR0aXRlcworaGl2aXRlCitoaXZpdGVzCitob2JhaAoraG9sZAoraG9sbG93Citob21lCitob25lc3QKK2hvbmVzdHkKK2hvbmV5Citob25vcgoraG9ub3JlZAoraG9yaQoraG9yaXRlCitob3JpdGVzCitob3JucworaG9yc2UncworaG9yc2VtZW4KK2hvcnNlcworaG9zdAoraG90Citob3RseQoraG91c2UKK2hvdXNlaG9sZAoraG91c2Vob2xkcworaG91c2VzCitob3cKK2h1bAoraHVtYW4KK2h1bWFuZQoraHVtYmxlCitodW1ibGVkCitodW5kcmVkCitodW5kcmVkZm9sZAoraHVuZHJlZHRoCitodW50CitodW50ZWQKK2h1bnRlcgoraHVudGluZworaHVwcGltCitodXNiYW5kCitodXNoYW0KK2h1c2hpbQoraQoraWYKK2lsbAoraWxsLXRyZWF0CitpbWFnZQoraW1hZ2luYXRpb24KK2ltbWVkaWF0ZQoraW1uYWgKK2ltcGVsCitpbXBvcnRhbmNlCitpbXBvc2luZworaW1wb3NzaWJsZQoraW4KK2luYXNtdWNoCitpbmNhcGFibGUKK2luY2x1ZGluZworaW5jcmVhc2VkCitpbmRlZWQKK2luZGVwZW5kZW50CitpbmRpYW4KK2luZGlnbmFudAoraW5lc3RpbWFibGUKK2luZXZpdGFibHkKK2luaGFiaXRhbnRzCitpbmhlcml0YW5jZQoraW5pcXVpdHkKK2luanVyaWVzCitpbmp1cnkKK2lubm9jZW5jZQoraW5ub2NlbnQKK2lucXVpcmUKK2lucXVpcmVkCitpbnNpZGUKK2luc3RlYWQKK2luc3RpdHV0ZQoraW5zdGl0dXRlZAoraW5zdHJ1Y3RlZAoraW5zdHJ1Y3RpbmcKK2luc3RydW1lbnQKK2luc3RydW1lbnRzCitpbnN1bHQKK2luc3VycmVjdGlvbnMKK2ludGVncml0eQoraW50ZW5kZWQKK2ludGVudGlvbnMKK2ludGVycHJldAoraW50ZXJwcmV0YXRpb24KK2ludGVycHJldGF0aW9ucworaW50ZXJwcmV0ZWQKK2ludGVycHJldGVyCitpbnRlcnJ1cHQKK2ludG8KK2ludHJvZHVjaW5nCitpbnZhcmlhYmx5CitpbnZhc2lvbgoraW52YXNpb25zCitpbnZlc3RlZAoraW9iCitpcmFkCitpcmFtCitpcm9uCitpcworaXMnc2FjaGFyCitpc2FhYworaXNhYWMncworaXNjYWgKK2lzaCdtYWVsCitpc2gnbWFlbCdzCitpc2gnbWFlbGl0ZXMKK2lzaGJhaworaXNodmFoCitpc2h2aQoraXNyYWVsCitpc3JhZWwncworaXNyYWVsaXRlcworaXQKK2l0aHJhbgoraXRzCitpdHNlbGYKK2phYmFsCitqYWJib2sKK2phY2hpbgoramFjb2IKK2phY29iJ3MKK2phaCdsZWVsCitqYWh6ZWVsCitqYWxhbQoramFtaW4KK2phcGhldGgKK2phcgoramFyZWQKK2phdmFuCitqZSdnYXItc2FoYWR1J3RoYQoramUndXNoCitqZWFsb3VzCitqZWIndXNpdGVzCitqZW11J2VsCitqZXJhaAoramVzdGluZworamV0aGV0aAoramV0dXIKK2pld2VscnkKK2plemVyCitqaWRsYXBoCitqb2JhYgoram9pbmVkCitqb2ludAoram9rc2hhbgoram9rdGFuCitqb3JkYW4KK2pvc2VwaAoram9zZXBoJ3MKK2pvdXJuZXkKK2pvdXJuZXllZAoranViYWwKK2p1ZGFoCitqdWRhaCdzCitqdWRnZQoranVkZ2VkCitqdWRnZXMKK2p1ZGdtZW50CitqdWRpY2lhcnkKK2p1ZGl0aAoranVyaXNkaWN0aW9uCitqdXJ5OgoranVzdAoranVzdGljZQora2FkJ21vbml0ZXMKK2thZGVzaAora2VkJ2VtYWgKK2tlZGFyCitrZWVwCitrZWVwZXIKK2tlZXBlcnMKK2tlbXUnZWwKK2tlbidpdGVzCitrZW4naXp6aXRlcwora2VuYW4KK2tlbmF6CitrZXB0CitrZXR1J3JhaAora2lkCitraWRzCitraWxsCitraWxsZWQKK2tpbmQKK2tpbmRsZWQKK2tpbmRuZXNzCitraW5kcmVkCitraW5kcwora2luZwora2luZydzCitraW5nZG9tCitraW5ncwora2luc21hbgora2luc21lbgora2lyJ2lhdGgtYXInYmEKK2tpc3MKK2tpc3NlZAora2l0dGltCitrbmVhZAora25lZQora25lZWwKK2tuZWVzCitrbmV3CitrbmlmZQora25vdwora25vd2luZwora25vd2xlZGdlCitrbm93bgora25vd3MKK2tvaGF0aAora29yYWgKK2xhYmFuCitsYWJhbidzCitsYWJvcgorbGFjaworbGFja2luZworbGFkCitsYWQncworbGFkZGVyCitsYWRzCitsYWlkCitsYWluCitsYW1iCitsYW1icworbGFtZWNoCitsYW1lbnRhdGlvbgorbGFtZW50ZWQKK2xhbmQKK2xhbmRzCitsYW5ndWFnZQorbGFuZ3VhZ2VzCitsYW5ndWlzaGVkCitsYXJnZQorbGFzaGEKK2xhc3QKK2xhdGVyCitsYXVnaAorbGF1Z2hlZAorbGF1Z2h0ZXIKK2xhd3MKK2xheQorbGF5aW5nCitsZS11bSdtaW0KK2xlYWQKK2xlYWYKK2xlYWgKK2xlYWgncworbGVhbgorbGVhcAorbGVhcGVkCitsZWFybgorbGVhcm5lZAorbGVhc3QKK2xlYXZlCitsZWF2ZXMKK2xlZAorbGVmdAorbGVnaXNsYXRlCitsZWdpc2xhdGlvbjoKK2xlZ2lzbGF0aXZlCitsZWdpc2xhdHVyZQorbGVnaXNsYXR1cmVzCitsZWhhJ2JpbQorbGVuZ3RoCitsZW50aWxzCitsZXNzZXIKK2xlc3QKK2xldAorbGV0dSdzaGltCitsZXZleQorbGV2aQorbGliZXJ0eQorbGllCitsaWVzCitsaWZlCitsaWZlYmxvb2QKK2xpZnQKK2xpZnRlZAorbGlnaHQKK2xpZ2h0cworbGlrZQorbGlrZWx5CitsaWtlbmVzcworbGlrZXdpc2UKK2xpbXBpbmcKK2xpbmVuCitsaW5nZXJlZAorbGlvbgorbGlvbidzCitsaW9uZXNzCitsaXN0ZW4KK2xpc3RlbmVkCitsaXN0ZW5pbmcKK2xpdHRsZQorbGl2ZQorbGl2ZWQKK2xpdmVzCitsaXZlc3RvY2sKK2xpdmluZworbG8KK2xvYWQKK2xvYWRlZAorbG9kZ2UKK2xvZGdlZAorbG9kZ2luZworbG9pbnMKK2xvbmcKK2xvbmdlZAorbG9uZ2VyCitsb25ncworbG9vaworbG9va2VkCitsb29raW5nCitsb29zZQorbG9yZAorbG9yZCdzCitsb3JkcworbG9zcworbG90Citsb3QncworbG90YW4KK2xvdGFuJ3MKK2xvdWQKK2xvdmUKK2xvdmVkCitsb3ZlbHkKK2xvdmVzCitsb3dlcgorbG93ZXJlZAorbG95YWxseQorbHVkCitsdWRpbQorbHV6CitseWluZworbHlyZQorbWEnYWNhaAorbWEnaGFsYXRoCittYS1oYWwnYWxlbAorbWFjaC0KK21hY2gtcGUnbGFoCittYWNoaXIKK21hZGFpCittYWRlCittYWcnZGllbAorbWFnaWNpYW5zCittYWduYW5pbWl0eQorbWFnb2cKK21haGFuYSdpbQorbWFpZAorbWFpZGVuCittYWlkcworbWFpZHNlcnZhbnRzCittYWtlCittYWtlcgorbWFraW5nCittYWwnY2hpLWVsCittYWxlCittYWxlcworbWFtcmUKK21hbgorbWFuJ2FoYXRoCittYW4ncworbWFuYXMnc2VoCittYW5hcydzZWgncworbWFuZHJha2VzCittYW5raW5kCittYW5seQorbWFubmVyCittYW50bGUKK21hbnkKK21hcmsKK21hcmtlZAorbWFycmlhZ2UKK21hcnJpYWdlcworbWFycmllZAorbWFycmllcworbWFycnkKK21hc2gKK21hc3JlJ2thaAorbWFzc2EKK21hc3RlcgorbWFzdGVyJ3MKK21hdGUKK21hdGluZworbWF0cmVkCittYXR0ZXIKK21heQorbWUKK21lJ3phaGFiCittZS1odSdqYS1lbAorbWUtdGh1J3NoYS1lbAorbWVhbAorbWVhbgorbWVhbmluZworbWVhbnMKK21lYW50CittZWFudGltZQorbWVhbndoaWxlCittZWFzdXJlCittZWFzdXJlZAorbWVhc3VyZXMKK21lZGFuCittZWRpdGF0ZQorbWVldAorbWVldHMKK21laGV0J2FiZWwKK21lbC1jaGl6J2VkZWsKK21lbWJlcnMKK21lbgorbWVuJ3MKK21lbmQKK21lbmRlZAorbWVuc2VydmFudHMKK21lbnRpb24KK21lcmFyJ2kKK21lcmNlbmFyaWVzCittZXJjaGFudHMKK21lcmNpZnVsCittZXJjaWxlc3MKK21lcmN5CittZXJyeQorbWVzaGEKK21lc2hlY2gKK21lc29wb3RhJ21pYQorbWVzc2FnZQorbWVzc2VuZ2VycworbWV0CittZXRodSdzZWxhaAorbWlic2FtCittaWJ6YXIKK21pZCdpYW4KK21pZCdpYW5pdGUKK21pZCdpYW5pdGVzCittaWRzdAorbWlkd2lmZQorbWlnaHQKK21pZ2h0aWVyCittaWdodGlseQorbWlnaHR5CittaWdyYXRlZAorbWlncmF0aW9uCittaWxjYWgKK21pbGNoCittaWxpdGFyeQorbWlsaworbWluZAorbWluZQorbWlydGgKK21pc2NhcnJpZWQKK21pc2htYQorbWlzdAorbWlzdHJlc3MKK21penBhaAorbWl6emFoCittb2FiCittb2FiaXRlcworbW9jaworbW9ja2luZworbW9uZXkKK21vbnN0ZXJzCittb250aAorbW9udGhzCittb29uCittb3JlCittb3JlaAorbW9yZW92ZXIKK21vcmknYWgKK21vcm5pbmcKK21vcnNlbAorbW9ydGFyCittb3N0Cittb3RoZXIKK21vdGhlcidzCittb3RoZXJzCittb3R0bGVkCittb3VudAorbW91bnRhaW4KK21vdW50YWlucworbW91cm4KK21vdXJuZWQKK21vdXJuaW5nCittb3V0aAorbW92ZWQKK21vdmVzCittb3ZpbmcKK211Y2gKK211bHRpcGxpZWQKK211bHRpcGx5CittdWx0aXR1ZGUKK211cHBpbQorbXVyZGVycworbXVzdAorbXV0dWFsbHkKK215CitteXJyaAorbXlzZWxmCituYSdhbWFoCituYSdhbWFuCituYWhhdGgKK25haG9yCituYWhvcidzCituYWtlZAorbmFrZWRuZXNzCituYW1lCituYW1lZAorbmFtZXMKK25hcGgndGFsaQorbmFwaC10dSdoaW0KK25hcGhpc2gKK25hdGlvbgorbmF0aW9ucworbmF0aXZlCituYXR1cmFsaXphdGlvbgorbmF0dXJlCituYXR1cmUncworbmVhcgorbmViYSdpb3RoCituZWNlc3NhcnkKK25lY2Vzc2l0eQorbmVjaworbmVlZAorbmVnZWIKK25lZ2xlY3RlZAorbmVpZ2hib3JpbmcKK25laXRoZXIKK25lcGhpbGltCituZXZlcgorbmV2ZXJ0aGVsZXNzCituZXcKK25leHQKK25pZ2h0CituaWdodHMKK25pbGUKK25pbXJvZAorbmluJ2V2ZWgKK25pbmUKK25pbmV0ZWVuCituaW5ldHkKK25pbmV0eS1maXZlCituaW5ldHktbmluZQorbm8KK25vYWgKK25vYWgncworbm9kCitub25lCitub29uCitub3IKK25vcnRoCitub3J0aHdhcmQKK25vc2UKK25vc3RyaWxzCitub3QKK25vdGhpbmcKK25vdworbnVtYmVyCitudW1iZXJlZAorbnVtYmVycworbnVyc2UKK251dHMKK28KK29haworb2Frcworb2F0aAorb2JhbAorb2JlZGllbmNlCitvYmVpc2FuY2UKK29iZXkKK29iZXllZAorb2JqZWN0CitvYnN0cnVjdGVkCitvYnN0cnVjdGluZworb2J0YWluCitvYnRhaW5lZAorb2NjYXNpb24KK29jY3VwYXRpb24KK29kaW91cworb2Rvcgorb2YKK29mZgorb2ZmZW5kZWQKK29mZmVuc2UKK29mZmVuc2VzOgorb2ZmZXIKK29mZmVyZWQKK29mZmVyaW5nCitvZmZlcmluZ3MKK29mZmljZQorb2ZmaWNlcgorb2ZmaWNlcnMKK29mZmljZXMKK29mZnNwcmluZworb2gKK29oYWQKK29ob2xpYmEnbWFoCitvaWwKK29sZAorb2xkZXIKK29sZGVzdAorb2xpdmUKK29tYXIKK29uCitvbmFtCitvbmFuCitvbmNlCitvbmUKK29uZXMKK29ubHkKK29ueXgKK29wZW4KK29wZW5lZAorb3BlcmF0aW9uCitvcGhpcgorb3BpbmlvbnMKK29wcG9zaW5nCitvcHBvc2l0ZQorb3BwcmVzc2VkCitvcHByZXNzaW9ucworb3IKK29yZGVyCitvcmRlcnMKK29yZ2FuaXppbmcKK29ybmFtZW50cworb3RoZXIKK290aGVycworb3VnaHQKK291cgorb3Vycworb3Vyc2VsdmVzCitvdXQKK291dGNyeQorb3V0c2lkZQorb3V0d2l0dGVkCitvdmVyCitvdmVyZHJpdmVuCitvdmVyc2Vlcgorb3ZlcnNlZXJzCitvdmVyc2lnaHQKK292ZXJ0YWtlCitvdmVydGhyZXcKK292ZXJ0aHJvdworb3ZlcnRvb2sKK293bgorb3ducworb3hlbgorcGFjZQorcGFkZGFuCitwYWRkYW4tYXJhbQorcGFpZAorcGFpbgorcGFpcgorcGFpcnMKK3BhbGx1CitwYXJhbGxlbGVkCitwYXJhbgorcGFydAorcGFydHMKK3Bhc3MKK3Bhc3NlZAorcGFzdAorcGFzdHVyZQorcGFzdHVyZWQKK3Bhc3R1cmluZworcGF0aAorcGF0aHJ1J3NpbQorcGF0aWVudAorcGF1CitwYXkKK3BheW1lbnQKK3BlJ2xhaAorcGVhY2UKK3BlYWNlYWJseQorcGVlbGVkCitwZWxlZworcGVuaSdlbAorcGVudSdlbAorcGVvcGxlCitwZW9wbGVkCitwZW9wbGVzCitwZXInaXp6aXRlcworcGVyZXoKK3BlcmZpZHkKK3BlcmZvcm0KK3BlcmhhcHMKK3BlcmlzaAorcGVybWl0CitwZXJwZXR1YXRlZAorcGVyc29ucworcGV0aXRpb25lZAorcGV0aXRpb25zCitwaGFyYW9oCitwaGFyYW9oJ3MKK3BoaWNvbAorcGhpbGlzdGluZXMKK3BoeXNpY2lhbnMKK3BpZWNlCitwaWVjZXMKK3BpZ2VvbgorcGlsZGFzaAorcGlsbGFyCitwaW5vbgorcGlwZQorcGlzaG9uCitwaXN0YWNoaW8KK3BpdAorcGl0Y2gKK3BpdGNoZWQKK3BpdHMKK3BsYWNlCitwbGFjZWQKK3BsYWNlcworcGxhZ3VlcworcGxhaW4KK3BsYWlubHkKK3BsYW5lCitwbGFubmluZworcGxhbnQKK3BsYW50ZWQKK3BsYW50cworcGxheQorcGxheWVkCitwbGF5aW5nCitwbGVhc2FudAorcGxlYXNlCitwbGVhc2VkCitwbGVhc2VzCitwbGVhc2luZworcGxlYXN1cmUKK3BsZWRnZQorcGxlbnRlb3VzCitwbGVudHkKK3Bsb3dpbmcKK3BsdWNrZWQKK3BsdW1wCitwbHVuZGVyZWQKK3BvaW50Citwb2xpdGljYWwKK3Bvb3IKK3BvcGxhcgorcG9wdWxhdGlvbgorcG9ydGlvbgorcG9ydGlvbnMKK3Bvc3Nlc3MKK3Bvc3Nlc3Npb24KK3Bvc3Nlc3Npb25zCitwb3N0ZXJpdHkKK3BvdAorcG90J2ktcGhhcgorcG90aSdwaGVyYQorcG90dGFnZQorcG91cmVkCitwb3ZlcnR5Citwb3dlcgorcG93ZXJzCitwcmFpc2UKK3ByYWlzZWQKK3ByYXkKK3ByYXllZAorcHJheWVyCitwcmUtZW1pbmVuY2UKK3ByZS1lbWluZW50CitwcmVwYXJlCitwcmVwYXJlZAorcHJlc2VuY2UKK3ByZXNlbnQKK3ByZXNlbnRlZAorcHJlc2VydmUKK3ByZXNlcnZlZAorcHJlc3NlZAorcHJlc3NpbmcKK3ByZXRlbmRlZAorcHJldmFpbAorcHJldmFpbGVkCitwcmV2ZW50CitwcmV2ZW50ZWQKK3ByZXkKK3ByaWNlCitwcmlkZQorcHJpZXN0Citwcmllc3RzCitwcmluY2UKK3ByaW5jZXMKK3ByaW5jaXBsZXMKK3ByaXNvbgorcHJpc29uZXJzCitwcm9jZWVkCitwcm9kdWNlCitwcm9maXQKK3Byb21pc2UKK3Byb21pc2VkCitwcm9ub3VuY2UKK3Byb3BlcnR5Citwcm9waGV0Citwcm9wb3NhbAorcHJvcG9zZQorcHJvc3BlcgorcHJvc3BlcmVkCitwcm90ZWN0aW5nCitwcm90ZWN0aW9uCitwcm92ZQorcHJvdmVuZGVyCitwcm92aWRlCitwcm92aWRlZAorcHJvdmlkZW5jZQorcHJvdmluY2UKK3Byb3Zpc2lvbgorcHJvdmlzaW9ucworcHJ1ZGVuY2UKK3B1YmxpYworcHVibGlzaAorcHVuaXNobWVudAorcHVyY2hhc2VkCitwdXJpZnkKK3B1cnBvc2UKK3B1cnN1ZQorcHVyc3VlZAorcHVyc3VpbmcKK3B1cnN1aXQKK3B1dAorcHV0dGluZworcHV2YWgKK3F1YXJyZWwKK3F1YXJyZWxlZAorcXVhcnRlcmluZworcXVlc3Rpb25lZAorcXVlc3Rpb25zCitxdWlja2x5CitxdWlldAorcXVpdmVyCityYSdhbWFoCityYWNoZWwKK3JhY2hlbCdzCityYWlkCityYWlkZXJzCityYWltZW50CityYWluCityYWluZWQKK3JhaXNlCityYWlzZWQKK3JhaXNpbmcKK3JhbQorcmFtJ2VzZXMKK3JhbXMKK3JhbgorcmF0aGVyCityYXZhZ2VkCityYXZlbgorcmF2ZW5vdXMKK3JlJ3UKK3JlYWNoZWQKK3JlYWR5CityZWFsbHkKK3JlYXBlZAorcmVhc29uCityZWFzc3VyZWQKK3JlYmVrYWgKK3JlYmVrYWgncworcmViZWxsZWQKK3JlYnVrZWQKK3JlY2VkZWQKK3JlY2VpdmUKK3JlY2VpdmVkCityZWNrb25lZAorcmVja29uaW5nCityZWNvZ25pemUKK3JlY29nbml6ZWQKK3JlY29yZHMKK3JlY3RpdHVkZQorcmVkCityZWRlZW1lZAorcmVkcmVzcworcmVkdWNlCityZWVkCityZWZyZXNoCityZWZ1c2VkCityZWZ1c2luZworcmVnYXJkCityZWdhcmRlZAorcmVnYXJkcworcmVobydib3RoCityZWhvJ2JvdGgtaXIKK3JlaWduCityZWlnbmVkCityZWxpYW5jZQorcmVsaWVmCityZWxpbnF1aXNoCityZW1haW4KK3JlbWFpbmVkCityZW1haW5pbmcKK3JlbWFpbnMKK3JlbWVtYmVyCityZW1lbWJlcmVkCityZW1pbmRlZAorcmVtbmFudAorcmVtb3ZlCityZW1vdmVkCityZW1vdmluZworcmVuZGVyCityZW5vd24KK3JlbnQKK3JlcGVhdGVkCityZXBlYXRlZGx5CityZXBoJ2FpbQorcmVwbGFjZQorcmVwbGFjZWQKK3JlcGxpZWQKK3JlcG9ydAorcmVwcmVzZW50YXRpb24KK3JlcHJlc2VudGF0aXZlCityZXByZXNlbnRhdGl2ZXMKK3JlcHJvYWNoCityZXF1aXJlCityZXF1aXJlZAorcmVxdWlyZXMKK3Jlc2N1ZQorcmVzZW4KK3Jlc2VydmUKK3Jlc2VydmVkCityZXNwZWN0CityZXN0CityZXN0ZWQKK3Jlc3RpbmcKK3Jlc3RvcmUKK3Jlc3RvcmVkCityZXN0cmFpbmVkCityZXR1cm4KK3JldHVybmVkCityZXUnZWwKK3JldWJlbgorcmV1bWFoCityZXZlYWxlZAorcmV2aXZlZAorcmV3YXJkCityaWIKK3JpYnMKK3JpY2gKK3JpZGUKK3JpZGVyCityaWdodAorcmlnaHRlZAorcmlnaHRlb3VzCityaWdodGVvdXNuZXNzCityaWdodGx5CityaWdodHMKK3JpbmcKK3JpbmdzCityaXBlbmVkCityaXBoYXRoCityaXNlCityaXNlbgorcml2ZXIKK3JpdmVycworcm9hZAorcm9iZQorcm9jaworcm9kZQorcm9kcworcm9sbAorcm9sbGVkCityb29mCityb29tCityb29tcworcm9zZQorcm9zaAorcm91Z2hseQorcm91bmQKK3JvdXNlCityb3V0ZWQKK3JveWFsCitydWxlCitydWxlcgorcnVsZXIncworcnVuCitydW5uZWxzCitzYWIndGVjYQorc2FidGFoCitzYWNrCitzYWNrY2xvdGgKK3NhY2tzCitzYWNyZWQKK3NhY3JpZmljZQorc2FjcmlmaWNlcworc2FkZGxlCitzYWRkbGVkCitzYWZlbHkKK3NhZmV0eQorc2FpZAorc2FrZQorc2FsYXJpZXMKK3NhbGVtCitzYWx0CitzYWx2YXRpb24KK3NhbWUKK3NhbWxhaAorc2FuZAorc2FuZGFsLXRob25nCitzYXInYWkKK3NhcmFoCitzYXJhaCdzCitzYXQKK3NhdmFnZXMKK3NhdmVkCitzYXZpbmcKK3Nhdm9yeQorc2F3CitzYXkKK3NheWluZworc2F5cworc2NhcmNlbHkKK3NjYXJsZXQKK3NjYXR0ZXIKK3NjYXR0ZXJlZAorc2NlcHRlcgorc2UnaXIKK3NlYQorc2VhcmNoZWQKK3NlYXMKK3NlYXNob3JlCitzZWFzb24KK3NlYXNvbnMKK3NlYmEKK3NlY29uZAorc2VjcmV0bHkKK3NlY3VyZQorc2VjdXJpdHkKK3NlZQorc2VlZAorc2VlZHRpbWUKK3NlZWluZworc2Vlaworc2Vla2luZworc2VlbQorc2VlbWVkCitzZWVuCitzZWVzCitzZWl6ZQorc2VpemVkCitzZWxlY3QKK3NlbGYtZXZpZGVudAorc2VsbAorc2VtZW4KK3NlbmQKK3NlbnQKK3NlcGFyYXRlCitzZXBhcmF0ZWQKK3NlcGFyYXRpb24KK3NlcGhhcgorc2VwdWxjaHJlCitzZXB1bGNocmVzCitzZXJhaAorc2VyZWQKK3NlcnBlbnQKK3NlcnVnCitzZXJ2YW50CitzZXJ2YW50J3MKK3NlcnZhbnRzCitzZXJ2ZQorc2VydmVkCitzZXJ2aWNlCitzZXJ2aW5nCitzZXQKK3NldGgKK3NldHRsZQorc2V0dGxlZAorc2V0dGxlbWVudAorc2V2ZW4KK3NldmVuZm9sZAorc2V2ZW50ZWVuCitzZXZlbnRlZW50aAorc2V2ZW50aAorc2V2ZW50eQorc2V2ZW50eS1maXZlCitzZXZlbnR5LXNldmVuCitzZXZlbnR5LXNldmVuZm9sZAorc2V2ZXJlCitzZXdlZAorc2V4ZXMKK3NoYSd2ZWgta2lyaWF0aGEnaW0KK3NoYWxsCitzaGFtbWFoCitzaGFyZQorc2hhdWwKK3NoYXZlZAorc2hhdmVoCitzaGUKK3NoZS1hc3Nlcworc2hlLWdvYXQKK3NoZS1nb2F0cworc2hlYWYKK3NoZWFyCitzaGVhdmVzCitzaGViYQorc2hlY2hlbQorc2hlY2hlbSdzCitzaGVkCitzaGVkcworc2hlZXAKK3NoZWVwZm9sZHMKK3NoZWVwc2hlYXJlcnMKK3NoZWtlbAorc2hla2Vscworc2hlbGFoCitzaGVsZXBoCitzaGVsdGVyCitzaGVtCitzaGVtZSdiZXIKK3NoZW9sCitzaGVwaGVyZAorc2hlcGhlcmRpbmcKK3NoZXBoZXJkcworc2hlcGhvCitzaGliYWgKK3NoaWVsZAorc2hpbGxlbQorc2hpbXJvbgorc2hpbmFiCitzaGluYXIKK3NoaXBzCitzaG9iYWwKK3Nob3JlCitzaG9ydAorc2hvcnRseQorc2hvdAorc2hvdWxkCitzaG91bGRlcgorc2hvdWxkZXJzCitzaG93CitzaG93ZWQKK3Nob3duCitzaHVhCitzaHVhJ3MKK3NodWFoCitzaHVuaQorc2h1cgorc2h1dAorc2lkZGltCitzaWRlCitzaWRvbgorc2lnaHQKK3NpZ24KK3NpZ25ldAorc2lnbnMKK3NpbGVuY2UKK3NpbHZlcgorc2ltZW9uCitzaW4KK3NpbmNlCitzaW5ldworc2luaXRlcworc2lubmVkCitzaW5uZXJzCitzaW5uaW5nCitzaXN0ZXIKK3Npc3RlcidzCitzaXQKK3NpdG5haAorc2l0dGluZworc2l4CitzaXh0ZWVuCitzaXh0aAorc2l4dHkKK3NpeHR5LWZpdmUKK3NpeHR5LW5pbmUKK3NpeHR5LXNpeAorc2l4dHktdHdvCitza2lsZnVsCitza2luCitza2lucworc2xhaW4KK3NsYXVnaHRlcgorc2xhdmUKK3NsYXZlcworc2xheQorc2xheXMKK3NsZWVrCitzbGVlcAorc2xlZXZlcworc2xlcHQKK3NsZXcKK3Nsb3BlCitzbG93bHkKK3NtYWxsCitzbWVsbAorc21lbGxlZAorc21va2UKK3Ntb2tpbmcKK3Ntb290aAorc28KK3NvZG9tCitzb2lsCitzb2pvdXJuCitzb2pvdXJuZWQKK3Nvam91cm5lcgorc29qb3VybmVycworc29qb3VybmluZworc29qb3VybmluZ3MKK3NvbGQKK3NvbGUKK3NvbGVtbmx5Citzb21lCitzb24KK3NvbidzCitzb25ncworc29ucworc29ucycKK3NvbnMtaW4tbGF3Citzb29uCitzb3JlCitzb3JlbHkKK3NvcnJvdworc29ycm93ZnVsCitzb3JyeQorc29ydAorc29ydHMKK3NvdWdodAorc291bAorc291bmQKK3NvdXRoCitzb3V0aHdhcmQKK3Nvdworc293ZWQKK3NwYWNlCitzcGFyZQorc3BhcmVkCitzcGVhaworc3BlYWtpbmcKK3NwZWFrcworc3BlY2tsZWQKK3NwZWVjaAorc3BlbmQKK3NwZW50CitzcGllcworc3BpbGxlZAorc3Bpcml0CitzcGxlbmRvcgorc3BvaWwKK3Nwb2tlCitzcG9rZW4KK3Nwb3R0ZWQKK3NwcmVhZAorc3ByaW5nCitzcHJpbmdpbmcKK3NwcmluZ3MKK3Nwcm91dGVkCitzcHJ1bmcKK3N0YWZmCitzdGFnZQorc3RhbGsKK3N0YW5kCitzdGFuZGluZworc3RhbmRzCitzdGFycworc3RhdGUKK3N0YXRlcworc3RhdGVzOgorc3RhdGlvbgorc3RhdHV0ZQorc3RhdHV0ZXMKK3N0YXkKK3N0YXllZAorc3RlYWQKK3N0ZWFkZmFzdAorc3RlYWwKK3N0ZXdhcmQKK3N0aWxsCitzdG9sZQorc3RvbGVuCitzdG9uZQorc3RvbmVzCitzdG9vZAorc3Rvb3BlZAorc3RvcAorc3RvcHBlZAorc3RvcmUKK3N0b3JlZAorc3RvcmVob3VzZXMKK3N0b3J5CitzdHJhbmdlcgorc3RyYW5nZXJzCitzdHJhdworc3RyZWFrcworc3RyZWFtCitzdHJlZXQKK3N0cmVuZ3RoCitzdHJldGNoZWQKK3N0cmlmZQorc3RyaWtpbmcKK3N0cmlwZWQKK3N0cmlwcGVkCitzdHJpdmVuCitzdHJvbmcKK3N0cm9uZ2VyCitzdHJvbmdseQorc3RydWNrCitzdHJ1Z2dsZWQKK3N1YmR1ZQorc3ViZHVlZAorc3ViamVjdAorc3VibWl0CitzdWJtaXR0ZWQKK3N1YnNpZGVkCitzdWJzdGFuY2UKK3N1YnRsZQorc3VjY2Vzcworc3VjY2Vzc2Z1bAorc3VjY290aAorc3VjaAorc3Vjaworc3Vja2xlCitzdWZmZXIKK3N1ZmZlcmFibGUKK3N1ZmZlcmFuY2UKK3N1aXRhYmxlCitzdW1tZXIKK3N1bW1vbmVkCitzdW4KK3N1cGVyaW9yCitzdXBwbGFudGVkCitzdXBwbGllZAorc3VwcG9ydAorc3VwcG9zZQorc3VwcmVtZQorc3VyZWx5CitzdXJldHkKK3N1cnJvdW5kZWQKK3N1cnZpdm9ycworc3VzcGVuZGVkCitzdXNwZW5kaW5nCitzdXN0YWluZWQKK3N3YWxsb3dlZAorc3dhcm0KK3N3YXJtaW5nCitzd2FybXMKK3N3ZWFyCitzd2VhdAorc3dvcmQKK3N3b3Jkcworc3dvcmUKK3N3b3JuCitzeXN0ZW0KK3N5c3RlbXMKK3RhYmxlCit0YWhhc2gKK3Rha2UKK3Rha2VuCit0YWtpbmcKK3RhbGtlZAordGFsa2luZwordGFtYXIKK3RhbWFyaXNrCit0YW1ib3VyaW5lCit0YXJyaWVkCit0YXJyeQordGFyc2hpc2gKK3RheGVzCit0ZSdtYW5pdGVzCit0ZWJhaAordGVldGgKK3RlbGwKK3RlbGxzCit0ZW1hCit0ZW1hbgordGVuCit0ZW5kZXIKK3RlbmRlcmx5Cit0ZW50Cit0ZW50aAordGVudHMKK3RlbnVyZQordGVyYWgKK3Rlcm1zOgordGVycml0b3J5Cit0ZXJyb3IKK3Rlc3RlZAordGhhbgordGhhdAordGhlCit0aGVlCit0aGVpcgordGhlaXJzCit0aGVtCit0aGVtc2VsdmVzCit0aGVuCit0aGVuY2UKK3RoZXJlCit0aGVyZWZvcmUKK3RoZXJlaW4KK3RoZXNlCit0aGV5Cit0aGlja2V0Cit0aGlnaAordGhpbgordGhpbmcKK3RoaW5ncwordGhpbmtpbmcKK3RoaXJkCit0aGlydGVlbgordGhpcnRlZW50aAordGhpcnR5Cit0aGlydHktZml2ZQordGhpcnR5LWZvdXIKK3RoaXJ0eS1zZXZlbgordGhpcnR5LXRocmVlCit0aGlydHktdHdvCit0aGlzCit0aGlzdGxlcwordGhvcm5zCit0aG9yb3VnaGx5Cit0aG9zZQordGhvdQordGhvdWdodAordGhvdWdodHMKK3Rob3VzYW5kCit0aG91c2FuZHMKK3RocmVhZAordGhyZWUKK3RocmVzaGluZwordGhyb25lCit0aHJvdWdoCit0aHJvdWdob3V0Cit0aHJvdwordGh1cwordGh5Cit0aWRhbAordGlkaW5ncwordGllcwordGlncmlzCit0aWxsCit0aWxsZXIKK3RpbWUKK3RpbWVzCit0aW1uYQordGltbmFoCit0aXJhcwordG8KK3RvZGF5Cit0b2dhcidtYWgKK3RvZ2V0aGVyCit0b2lsCit0b2xhCit0b2xkCit0b21iCit0b25pZ2h0Cit0b28KK3Rvb2sKK3RvcAordG9wcwordG9yY2gKK3Rvcm4KK3RvdGFsbHkKK3RvdGFseQordG91Y2gKK3RvdWNoZWQKK3RvdWNoZXMKK3Rvd2FyZAordG93ZXIKK3Rvd25zCit0cmFkZQordHJhZGVycwordHJhaW4KK3RyYWluZWQKK3RyYW5zZ3Jlc3Npb24KK3RyYW5zaWVudAordHJhbnNwb3J0aW5nCit0cmF2YWlsZWQKK3RyZWFzdXJlCit0cmVhdAordHJlYXRlZAordHJlZQordHJlZXMKK3RyZW1ibGVkCit0cmVtYmxpbmcKK3RyaWFsCit0cmliZXMKK3RyaWVkCit0cm9vcHMKK3Ryb3VibGUKK3Ryb3VibGVkCit0cm91YmxlcwordHJvdWdoCit0cm91Z2hzCit0cnVseQordHJ1dGgKK3RydXRocwordHViYWwKK3R1YmFsLQordHViYWwtY2FpbgordHVybgordHVybmVkCit0dXJucwordHVydGxlZG92ZQordHdlbHZlCit0d2VudHkKK3R3ZW50eS1uaW5lCit0d2VudHktc2V2ZW4KK3R3ZW50eS1zZXZlbnRoCit0d2ljZQordHdpbnMKK3R3bwordHlyYW5ueQordHlyYW50Cit0eXJhbnRzCit1bmFja25vd2xlZGdlZAordW5hbGllbmFibGUKK3VuYXdhcmVzCit1bmNpcmN1bWNpc2VkCit1bmNvbWZvcnRhYmxlCit1bmNvdmVyZWQKK3VuZGVyCit1bmRlcnN0YW5kCit1bmRlcnN0b29kCit1bmRpc3Rpbmd1aXNoZWQKK3VuZml0Cit1bmdpcmRlZAordW5pdGVkCit1bmtub3duCit1bmxlYXZlbmVkCit1bmxlc3MKK3VubW92ZWQKK3Vuc3RhYmxlCit1bnRpbAordW51c3VhbAordW53YXJyYW50YWJsZQordW53b3J0aAordXAKK3VwYnJhaWRlZAordXBvbgordXBwZXJtb3N0Cit1cHJpZ2h0Cit1cgordXJnZWQKK3VzCit1czoKK3VzZQordXNpbmcKK3VzdXJwYXRpb25zCit1dHRlcmx5Cit1egordXphbAordmFsbGV5Cit2YWx1YWJsZQordmVnZXRhdGlvbgordmVpbAordmVuZ2VhbmNlCit2ZW50Cit2ZW50cwordmVyaWZpZWQKK3ZlcnkKK3Zlc3R1cmUKK3ZpbGxhZ2VzCit2aW5kaWNhdGlvbgordmluZQordmluZXlhcmQKK3Zpb2xlbmNlCit2aW9sZW50bHkKK3ZpcGVyCit2aXJnaW4KK3Zpc2lvbgordmlzaW9ucwordmlzaXQKK3Zpc2l0ZWQKK3ZvaWNlCit2b2lkCit2b3cKK3dhZ2VzCit3YWdpbmcKK3dhZ29ucword2FpdAord2FpdGVkCit3YWxrCit3YWxrZWQKK3dhbGtpbmcKK3dhbGwKK3dhbmRlcgord2FuZGVyZWQKK3dhbmRlcmVyCit3YW5kZXJpbmcKK3dhbnRpbmcKK3dhbnRvbm5lc3MKK3dhcgord2FyZmFyZQord2FybmVkCit3YXMKK3dhc2gKK3dhc2hlZAord2FzaGVzCit3YXRjaAord2F0ZXIKK3dhdGVyZWQKK3dhdGVyaW5nCit3YXRlcnMKK3dheQord2F5c2lkZQord2UKK3dlYWsKK3dlYWtuZXNzCit3ZWFsdGgKK3dlYWx0aHkKK3dlYW5lZAord2VhcG9ucword2Vhcgord2VhcmllZAord2VhcnkKK3dlZWsKK3dlZXAKK3dlZXBpbmcKK3dlaWdoZWQKK3dlaWdoaW5nCit3ZWlnaHQKK3dlaWdodHMKK3dlbGZhcmUKK3dlbGwKK3dlbGwncword2VsbHMKK3dlbnQKK3dlcHQKK3dlcmUKK3dlc3QKK3dlc3R3YXJkCit3aGF0Cit3aGF0ZXZlcgord2hhdHNvZXZlcgord2hlYXQKK3doZWxwCit3aGVuCit3aGVuY2UKK3doZW5ldmVyCit3aGVyZQord2hlcmVieQord2hlcmV2ZXIKK3doZXRoZXIKK3doaWNoCit3aGlsZQord2hpdGUKK3dobword2hvZXZlcgord2hvbGUKK3dob2xlc29tZQord2hvbQord2hvbWV2ZXIKK3dob3NlCit3aHkKK3dpY2tlZAord2lja2VkbHkKK3dpY2tlZG5lc3MKK3dpZG93Cit3aWRvdydzCit3aWRvd2hvb2QKK3dpZmUKK3dpZmUncword2lsZAord2lsZGVybmVzcword2lsbAord2lsbGluZword2lsdAord2luZAord2luZG93Cit3aW5kb3dzCit3aW5lCit3aW5nZWQKK3dpbnRlcgord2lzZQord2l0aAord2l0aGVyZWQKK3dpdGhoZWxkCit3aXRoaG9sZAord2l0aGluCit3aXRob3V0Cit3aXRuZXNzCit3aXZlcword29sZgord29tYW4KK3dvbWFuJ3MKK3dvbWIKK3dvbWJzCit3b21lbgord29vZAord29yZAord29yZHMKK3dvcmUKK3dvcmsKK3dvcmtzCit3b3JsZAord29ybGQ6Cit3b3JzZQord29yc2hpcAord29yc2hpcGVkCit3b3J0aAord29ydGh5Cit3b3VsZAord291bmRpbmcKK3dyYXBwaW5nCit3cmF0aAord3Jlc3RsZWQKK3dyZXN0bGluZ3MKK3dyb25nCit3cm91Z2h0Cit5ZWFyCit5ZWFybmVkCit5ZWFycworeWVzCit5ZXQKK3lpZWxkCit5aWVsZGluZworeW9rZQoreW9uZGVyCit5b3UKK3lvdW5nCit5b3VuZ2VyCit5b3VuZ2VzdAoreW91cgoreW91cnMKK3lvdXJzZWxmCit5b3Vyc2VsdmVzCit5b3V0aAoremEnYXZhbgoremFwaCdlbmF0aC1wYW5lJ2FoCit6ZWIndWx1bgoremVib2knaW0KK3plbSdhcml0ZXMKK3plcGhvCit6ZXJhaAoremliJ2VvbgoremlsbGFoCit6aWxwYWgKK3ppbXJhbgoremlwaCdpb24KK3pvJ2FyCit6b2hhcgorenV6aW0KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS90aDE4MDU3LnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS90aDE4MDU3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzYxMDY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL3RoMTgwNTcudHh0CkBAIC0wLDAgKzEsMTc5MTkgQEAKK++7vyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjKgorIyogICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMqCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjCisjIEAoIykkUkNTZmlsZTogdGgxODA1Ny50eHQsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDIvMDcvMTYgMDA6Mjk6MzkgJAorIyAKKyMgU29ydGVkIFRoYWkgd29yZCBsaXN0IHVzZWQgZm9yIHRlc3RpbmcgdGhlIFRoYWlDb2xsYXRvciBjbGFzcy4KKyMgVGhpcyBsaXN0IHdhcyB0YWtlbiBmcm9tIHRoZSBXZWI6IDxodHRwOi8vc2Vhc3JjLnRoLm5ldC9kaWN0L2RpY3QuaHRtPgorIyBhbmQgc29tZSBvYnZpb3VzIGdhcmJhZ2UgbGluZXMgKG51bGxzLCBldGMpIHdlcmUgZGVsZXRlZAorIworIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyBhcmUgaWdub3JlZDsgb3RoZXJzIGFyZSB0cmVhdGVkIGFzIHNpbmdsZSB3b3JkcworIyBpbiB0aGUgVVRGLTggZW5jb2RpbmcuCisjCisjIFsxMi8xNS85OSBhbGl1XSByZWNvZGVkIGZyb20gVElTLTYyMCB0byBVVEYtOAorIwor4LiBCivguIHguYcKK+C4geC4gQor4LiB4LmK4LiBCivguIHguIHguILguJnguLLguIEKK+C4geC4geC4seC4k+C4j+C4geC4sAor4LiB4LiB4Li44LiPCivguIHguIHguLjguJcKK+C4geC4geC4uOC4mOC4oOC4seC4k+C4keC5jAor4LiB4LiB4Li44Liq4Lix4LiZ4LmC4LiYCivguIHguIcKK+C4geC5iOC4hwor4LiB4LmJ4LiHCivguIHguYrguIcKK+C4geC4h+C4geC4reC4mQor4LiB4LiH4LiB4Liy4LijCivguIHguIfguYLguIHguYkKK+C4geC5ieC4h+C5guC4hOC5ieC4hwor4LiB4LmJ4LiH4LiHCivguIHguIfguInguLLguIEKK+C4geC4h+C5hOC4ieC5iAor4LiB4LiH4LmA4LiV4LmH4LiBCivguIHguIfguKrguLUKK+C4geC4h+C4quC4uOC4pQor4LiB4LiKCivguIHguIrguIHguKMKK+C4geC4juC4uOC4oeC4nuC4tQor4LiB4LiPCivguIHguI/guKvguKHguLLguKIKK+C4geC4j+C4sAor4LiB4LiP4Liy4Lir4LiwCivguIHguI/guLQKK+C4geC4j+C4uOC4gQor4LiB4LiQ4Li04LiZCivguIHguJDguLTguJnguIHguLLguKUKK+C4geC4kOC4tOC4meC4leC5ieC4mQor4LiB4LiQ4Li04LiZ4LiX4Liy4LiZCivguIHguJDguLTguJnguKPguLLguKnguI7guKPguYwKK+C4geC4kOC4tOC4meC4q+C4peC4p+C4hwor4LiB4LiQ4Li04LiZ4Lix4LiV4LiW4Liy4Lij4LiB4Lij4Lij4LihCivguIHguJDguLTguJnguLjguJfguJjguLLguKPguLAKK+C4geC4k+C4tOC4geC4meC4seC4meC4leC5jAor4LiB4LiT4Li04LiB4Liy4Lij4LmMCivguIHguYDguJPguKPguLgKK+C4geC5gOC4k+C4o+C4uOC4geC4sgor4LiB4LiUCivguIHguJTguITguLHguIcKK+C4geC4lOC5geC4lOC4hwor4LiB4LiU4LiX4Liw4LmA4LilCivguIHguJTguYLguJvguYrguLAKK+C4geC4lOC4q+C4seC4p+C5guC4lQor4LiB4LiU4LmA4Lir4Lil4Li34Lit4LiHCivguIHguJXguI3guLLguJMKK+C4geC4leC4oeC4suC4peC4tQor4LiB4LiV4LmA4Lin4LiX4Li04LiV4LiyCivguIHguJXguYDguKfguJfguLUKK+C4geC4leC4seC4jeC4iuC4peC4tQor4LiB4LiV4Lix4LiN4LiN4Li44LiV4LiyCivguIHguJXguLHguI3guI3guLkKK+C4geC4leC4suC4mOC4tOC4geC4suC4owor4LiB4LiV4Liy4Lig4Li04LiZ4Li04Lir4Liy4LijCivguIHguJXguLTguIHguLIKK+C4geC4luC4sgor4LiB4LiW4Li04LiBCivguIHguJbguLTguIHguLLguIjguLLguKPguKLguYwKK+C4geC4l+C4o+C4o+C4mwor4LiB4LiX4Lil4Li04Lih4Lik4LiECivguIHguJfguKXguLUKK+C4geC4mQor4LiB4LmI4LiZCivguIHguYnguJkKK+C4geC4meC4gQor4LiB4LiZ4LiZCivguIHguJnguJnguYDguIrguK0KK+C4geC5iOC4meC4meC5guC4luC4hwor4LiB4LiZ4LiZ4LmA4Lir4Li04LihCivguIHguJnguLTguKnguJDguYwKK+C4geC4meC4tOC4qeC4kOC4sgor4LiB4LiaCivguIHguJrguI8KK+C4geC4muC4lOC4suC4mQor4LiB4Lia4LiU4Liz4LiB4Lia4LmB4LiU4LiHCivguIHguJrguJfguLkKK+C4geC4muC4suC4pQor4LiB4Lia4Li04LiZ4LiX4Lij4LmMCivguIHguJrguLTguKUKK+C4geC4muC4tOC4peC4nuC4seC4quC4lOC4uOC5jAor4LiB4Lia4Li14LmICivguIHguJrguLnguKMKK+C4geC5gOC4muC4meC4l+C4o+C5jAor4LiB4LmC4Lia4LijCivguIHguYLguJrguKUKK+C4geC4m+C4kwor4LiB4Lib4LiT4LiBCivguIHguJvguJPguLIKK+C4geC4m+C4tAor4LiB4Lib4Li04LiV4Lix4LiZCivguIHguKEKK+C4geC5ieC4oQor4LiB4Lih4LiT4LiR4Lil4Liy4Lig4Li04LmA4Lip4LiBCivguIHguKHguJPguJHguYLguKXguJfguIEKK+C4geC4oeC4pQor4LiB4Lih4Lil4LiC4Lix4LiT4LiR4LmMCivguIHguKHguKXguITguKPguKPguKDguYwKK+C4geC4oeC4peC4ieC4seC4meC4l+C5jAor4LiB4Lih4Lil4Lie4Liy4LiZ4LiY4LieCivguIHguKHguKXguLIKK+C4geC4oeC4peC4suC4qAor4LiB4Lih4Lil4Liy4Liq4LiZ4LmMCivguIHguKHguYDguKXguKgKK+C4geC4oeC4seC4k+C4keC4peC4uAor4LiB4Lih4Li44LiXCivguIHguKMKK+C4geC4o+C4gQor4LiB4Lij4LiB4LiOCivguIHguKPguIHguI7guLLguITguKEKK+C4geC4o+C4hwor4LiB4Lij4LiK4LiB4Liy4LiiCivguIHguKPguJPguJHguYwKK+C4geC4o+C4k+C4tOC4geC4suC4o+C5jAor4LiB4Lij4LiT4Li1CivguIHguKPguJPguLXguKLguYwKK+C4geC4o+C4k+C4teC4ouC4sAor4LiB4Lij4LiUCivguIHguKPguJkKK+C4geC4o+C4meC4l+C4sgor4LiB4Lij4LiZ4LiZ4LmA4LiK4LmJ4LiyCivguIHguKPguJoKK+C4geC4o+C4muC4ueC4owor4LiB4Lij4Lie4Li04LiZ4LiY4Li44LmMCivguIHguKPguKDguIEKK+C4geC4o+C4oOC4tOC4mQor4LiB4Lij4Lig4Li14Lij4LmMCivguIHguKPguKDguLjguKEKK+C4geC4o+C4oQor4LiB4Lij4Lih4LiB4Lij4Lit4LihCivguIHguKPguKHguIHguLLguKMKK+C4geC4o+C4oeC4geC4suC4o+C4nuC4tOC5gOC4qOC4qQor4LiB4Lij4Lih4LmA4LiB4Lij4Li14Lii4LihCivguIHguKPguKHguILguLjguJkKK+C4geC4o+C4oeC4iuC4sOC5geC4oeC5iAor4LiB4Lij4Lih4LiX4LmI4LiyCivguIHguKPguKHguJfguYjguLLguIHguKXguLLguIcKK+C4geC4o+C4oeC4l+C5iOC4suC4guC4p+C4sgor4LiB4Lij4Lih4LiX4LmI4Liy4LiL4LmJ4Liy4LiiCivguIHguKPguKHguJjguKPguKPguKHguYwKK+C4geC4o+C4oeC4meC4hOC4o+C4muC4suC4pQor4LiB4Lij4Lih4LiZ4LiyCivguIHguKPguKHguJ7guKPguLAKK+C4geC4o+C4oeC4nuC4o+C4sOC4geC4peC4suC5guC4q+C4oQor4LiB4Lij4Lih4Lie4Lij4Liw4Lii4LiyCivguIHguKPguKHguKHguKvguLLguJTguYTguJfguKIKK+C4geC4o+C4oeC5gOC4oeC4t+C4reC4hwor4LiB4Lij4Lih4Lin4Lix4LiHCivguIHguKPguKHguKjguLHguIHguJTguLQKK+C4geC4o+C4oeC4quC4oeC5gOC4lOC5h+C4iAor4LiB4Lij4Lih4Lir4Lih4Li34LmI4LiZCivguIHguKPguKHguKvguKXguKfguIcKK+C4geC4o+C4oeC4seC4j+C4j+C5jAor4LiB4Lij4LijCivguIHguKPguKPguYTguIHguKMKK+C4geC4o+C4o+C5gOC4iOC4teC4ouC4gQor4LiB4Lij4Lij4LiK4Li04LiHCivguIHguKPguKPguIrguLTguJQKK+C4geC4o+C4o+C5gOC4iuC4rQor4LiB4Lij4Lij4LmA4LiK4LmJ4LiyCivguIHguKPguKPguYDguIrguLXguKLguIcKK+C4geC4o+C4o+C5guC4iuC4gQor4LiB4Lij4Lij4LiL4LmJ4LiZ4LiZCivguIHguKPguKPguYHguIvguIcKK+C4geC4o+C4o+C4kOC5jAor4LiB4Lij4Lij4LiQ4LiyCivguIHguKPguKPguJMKK+C4geC4o+C4o+C4k+C4tOC4geC4suC4o+C5jAor4LiB4Lij4Lij4LiU4Li0CivguIHguKPguKPguJTguLTguIEKK+C4geC4o+C4o+C4lOC4tuC4gQor4LiB4Lij4Lij4LiV4Li4CivguIHguKPguKPguYTguJXguKMKK+C4geC4o+C4o+C4l+C4mgor4LiB4Lij4Lij4LmB4LiX4LiBCivguIHguKPguKPguYHguJfguKPguIEKK+C4geC4o+C4o+C4muC4suC4quC4tOC4gQor4LiB4Lij4Lij4Lia4Li04LiUCivguIHguKPguKPguJrguLnguKMKK+C4geC4o+C4o+C4m+C4suC4quC4tOC4gQor4LiB4Lij4Lij4Lib4Li44Lij4LiwCivguIHguKPguKPguJ7guLjguKEKK+C4geC4o+C4o+C4nuC4uOC5iOC4oQor4LiB4Lij4Lij4Lig4Li04Lij4Lih4Lii4LmMCivguIHguKPguKPguKEKK+C4geC4o+C4o+C4oeC5jAor4LiB4Lij4Lij4Lih4Liy4LiK4Li14LieCivguIHguKPguKPguKHguLLguJjguLTguIHguLLguKMKK+C4geC4o+C4o+C4oeC4suC4owor4LiB4Lij4Lij4Lil4Li1CivguIHguKPguKPguKXguLbguIcKK+C4geC4o+C4o+C4qeC4gQor4LiB4Lij4Lij4Liq4LiwCivguIHguKPguKPguYHguKrguIcKK+C4geC4o+C4o+C4q+C4suC4ogor4LiB4Lij4Lij4LmA4Lir4Li04LihCivguIHguKPguKPguYLguKvguKIKK+C4geC4o+C4o+C5gOC4reC4sgor4LiB4Lij4Lij4Li44LiT4LiyCivguIHguKPguKfguJQKK+C4geC4o+C4p+C4mQor4LiB4Lij4Lin4LiaCivguIHguKPguKfguKEKK+C4geC4o+C5ieC4p+C4oQor4LiB4Lij4Lin4LiiCivguIHguKPguKfguLTguIEKK+C4geC4o+C4quC4suC4m+C4meC5jAor4LiB4Lij4Liq4Li44LiX4LiY4Li04LmMCivguIHguKPguK0KK+C4geC4o+C5ieC4rQor4LiB4Lij4Lit4LiBCivguIHguKPguYfguK3guIHguIHguKPguYvguK3guKIKK+C4geC4o+C4reC4geC5geC4geC4o+C4gQor4LiB4Lij4Lit4LiHCivguIHguKPguK3guIfguIHguKPguK3guKIKK+C4geC4o+C4reC4lAor4LiB4Lij4LmI4Lit4LiZCivguIHguKPguK3guJoKK+C4geC4o+C4reC4oQor4LiB4Lij4LmI4Lit4LihCivguIHguKPguYjguK3guKIKK+C4geC4o+C4sAor4LiB4Lij4Liw4LiB4LijCivguIHguKPguLDguIHguKPguLHguJrguIHguKPguLDguYDguIHguKPguLXguKLguJoKK+C4geC4o+C4sOC4geC4o+C4teC5iuC4lAor4LiB4Lij4Liw4LiB4Lij4Li44LmI4LiZCivguIHguKPguLDguIHguKXguLHguJrguIHguKXguK3guIEKK+C4geC4o+C4sOC4geC4p+C4lAor4LiB4Lij4Liw4LiB4Lit4LiHCivguIHguKPguLDguIHguLHguJQKK+C4geC4o+C4sOC4geC4teC5iQor4LiB4Lij4Liw4LiB4Li54LilCivguIHguKPguLDguYDguIHguKPguK3guIEKK+C4geC4o+C4sOC5gOC4geC4o+C4tOC4gQor4LiB4Lij4Liw4LmA4LiB4Lij4Li04LmI4LiZCivguIHguKPguLDguYDguIHguKPguLXguKLguJoKK+C4geC4o+C4sOC5gOC4geC4o+C4teC4ouC4oQor4LiB4Lij4Liw4LmA4LiB4Lij4Li14Lii4LinCivguIHguKPguLDguYDguIHguKPguLXguYnguKLguKcKK+C4geC4o+C4sOC5gOC4geC4peC4t+C4reC4gQor4LiB4Lij4Liw4LiE4LiZCivguIHguKPguLDguITguLLguKIKK+C4geC4o+C4sOC4hOC4uOC4gQor4LiB4Lij4Liw4LiH4LiB4LiB4Lij4Liw4LiH4Lix4LiZCivguIHguKPguLDguIfguIHguIHguKPguLDguYDguIfguLTguYjguJkKK+C4geC4o+C4sOC4h+C5iOC4reC4h+C4geC4o+C4sOC5geC4h+C5iOC4hwor4LiB4Lij4Liw4LiH4Lit4LiUCivguIHguKPguLDguIfguYjguK3guJnguIHguKPguLDguYHguIfguYjguJkKK+C4geC4o+C4sOC5guC4h+C4gQor4LiB4Lij4Liw4LiI4LiBCivguIHguKPguLDguIjguIcKK+C4geC4o+C4sOC4iOC4owor4LiB4Lij4Liw4LiI4Lit4LiBCivguIHguKPguLDguIjguK3guIfguKvguIfguYjguK3guIcKK+C4geC4o+C4sOC4iOC4reC4h+C4reC5geC4hwor4LiB4Lij4Liw4LiI4LmJ4Lit4LiZCivguIHguKPguLDguIjguK3guJnguKvguLkKK+C4geC4o+C4sOC4iOC5ieC4reC4ogor4LiB4Lij4Liw4LiI4LmL4Lit4Lir4Lin4LitCivguIHguKPguLDguIjguLAKK+C4geC4o+C4sOC4iOC4seC4gQor4LiB4Lij4Liw4LiI4Lix4LiHCivguIHguKPguLDguIjguLHguIfguKvguKXguLHguIfguYDguJrguLXguYnguKIKK+C4geC4o+C4sOC4iOC4seC4lAor4LiB4Lij4Liw4LiI4Lix4LiaCivguIHguKPguLDguIjguLHguJrguJvguLTguYnguIcKK+C4geC4o+C4sOC4iOC4seC4muC4m+C4teC5iAor4LiB4Lij4Liw4LiI4LmI4LiyCivguIHguKPguLDguIjguYjguLLguIcKK+C4geC4o+C4sOC4iOC4suC4lAor4LiB4Lij4Liw4LiI4Liy4LiZCivguIHguKPguLDguIjguLLguJoKK+C4geC4o+C4sOC4iOC4suC4oQor4LiB4Lij4Liw4LiI4Liy4LiiCivguIHguKPguLDguIjguLLguKcKK+C4geC4o+C4sOC4iOC4tOC4gQor4LiB4Lij4Liw4LiI4Li04LmL4LiHCivguIHguKPguLDguIjguLTguJQKK+C4geC4o+C4sOC4iOC4tOC4mgor4LiB4Lij4Liw4LiI4Li04LmL4LihCivguIHguKPguLDguIjguLTguKPguLTguJQKK+C4geC4o+C4sOC4iOC4tOC5i+C4pwor4LiB4Lij4Liw4LiI4Li14LmJCivguIHguKPguLDguIjguLXguYsKK+C4geC4o+C4sOC4iOC4uOC4gQor4LiB4Lij4Liw4LiI4Li44LmL4LiH4LiB4Lij4Liw4LiI4Li04LmL4LiHCivguIHguKPguLDguIjguLjguJoKK+C4geC4o+C4sOC4iOC4uOC5iuC4mgor4LiB4Lij4Liw4LiI4Li44Lia4LiB4Lij4Liw4LiI4Li04LiaCivguIHguKPguLDguIjguLjguYvguKHguIHguKPguLDguIjguLTguYvguKEKK+C4geC4o+C4sOC4iOC4uOC4ogor4LiB4Lij4Liw4LiI4Li54LmJCivguIHguKPguLDguIjguLnguYvguIHguKPguLDguIjguLXguYsKK+C4geC4o+C4sOC4iOC4ueC4lAor4LiB4Lij4Liw4LmA4LiI4Lit4Liw4LiB4Lij4Liw4LmA4LiI4Li04LiHCivguIHguKPguLDguYDguIjguLIKK+C4geC4o+C4sOC5gOC4iOC5iOC4sgor4LiB4Lij4Liw4LmA4LiI4LmJ4LiyCivguIHguKPguLDguYDguIjguLLguLAKK+C4geC4o+C4sOC5gOC4iOC4tOC4hwor4LiB4Lij4Liw4LmA4LiI4Li04LiU4LiB4Lij4Liw4LmA4LiI4Li04LiHCivguIHguKPguLDguYDguIjguLXguYnguKLguIcKK+C4geC4o+C4sOC5gOC4iOC4teC5iuC4ouC4mgor4LiB4Lij4Liw4LmA4LiI4Li14Lii4LinCivguIHguKPguLDguYDguIjguLXguYrguKLguKcKK+C4geC4o+C4sOC5geC4iOC4sAor4LiB4Lij4Liw4LmC4LiI4LiZCivguIHguKPguLDguYLguIjguKEKK+C4geC4o+C4sOC4ieC4hwor4LiB4Lij4Liw4LiJ4Lit4LiBCivguIHguKPguLDguInguYjguK3guJkKK+C4geC4o+C4sOC4ieC4seC4muC4geC4o+C4sOC5gOC4ieC4hwor4LiB4Lij4Liw4LiJ4Li04LmI4LiHCivguIHguKPguLDguInguLXguIEKK+C4geC4o+C4sOC4ieC4uOC4gQor4LiB4Lij4Liw4LiJ4Li54LiUCivguIHguKPguLDguYDguInguIEKK+C4geC4o+C4sOC5gOC4ieC4hwor4LiB4Lij4Liw4LmA4LiJ4LiUCivguIHguKPguLDguYHguInguIEKK+C4geC4o+C4sOC5geC4ieC5iOC4mQor4LiB4Lij4Liw4LmC4LiJ4LiB4LiB4Lij4Liw4LmA4LiJ4LiBCivguIHguKPguLDguYLguInguKEKK+C4geC4o+C4sOC4iuC4hwor4LiB4Lij4Liw4LiK4LiU4LiB4Lij4Liw4LiK4LmJ4Lit4LiiCivguIHguKPguLDguIrguKfguKIKK+C4geC4o+C4sOC4iuC4reC4gQor4LiB4Lij4Liw4LiK4Lit4LiZCivguIHguKPguLDguIrguK3guKEKK+C4geC4o+C4sOC4iuC4reC4oeC4lOC4reC4gQor4LiB4Lij4Liw4LiK4LmJ4Lit4LiiCivguIHguKPguLDguIrguYnguK3guKLguJnguLLguIfguKPguLMKK+C4geC4o+C4sOC4iuC4seC4hwor4LiB4Lij4Liw4LiK4Lix4LmJ4LiZCivguIHguKPguLDguIrguLHguJoKK+C4geC4o+C4sOC4iuC4suC4gQor4LiB4Lij4Liw4LiK4LmI4Liy4LiHCivguIHguKPguLDguIrguLLguYDguJTguLTguKEKK+C4geC4o+C4sOC4iuC4suC4ogor4LiB4Lij4Liw4LiK4Li04LiHCivguIHguKPguLDguIrguLTguJQKK+C4geC4o+C4sOC4iuC4uAor4LiB4Lij4Liw4LiK4Li44LiBCivguIHguKPguLDguIrguLjguYjguKHguIHguKPguLDguIrguKfguKIKK+C4geC4o+C4sOC5gOC4iuC4rQor4LiB4Lij4Liw4LmA4LiK4LiyCivguIHguKPguLDguYDguIrguYnguLIKK+C4geC4o+C4sOC5gOC4iuC4teC4ouC4hwor4LiB4Lij4Liw4LmB4LiK4LiHCivguIHguKPguLDguYHguIrguLAKK+C4geC4o+C4sOC5guC4iuC4gQor4LiB4Lij4Liw4LiL4Lin4LiiCivguIHguKPguLDguIvguYnguK0KK+C4geC4o+C4sOC4i+C5iOC4reC4h+C4geC4o+C4sOC5geC4i+C5iOC4hwor4LiB4Lij4Liw4LiL4Lix4LiaCivguIHguKPguLDguIvguLHguJrguJvguLLguIHguYDguKPguLfguK0KK+C4geC4o+C4sOC4i+C5iOC4suC4hwor4LiB4Lij4Liw4LiL4Liy4LiaCivguIHguKPguLDguIvguLTguIEKK+C4geC4o+C4sOC4i+C4tOC4mgor4LiB4Lij4Liw4LiL4Li14LmJCivguIHguKPguLDguIvguLXguYnguIHguKPguLDguIvguYnguK0KK+C4geC4o+C4sOC4i+C4uOC4hwor4LiB4Lij4Liw4LiL4Li44Lia4LiB4Lij4Liw4LiL4Li04LiaCivguIHguKPguLDguIvguLjguYnguKEKK+C4geC4o+C4sOC4i+C4ueC5iAor4LiB4Lij4Liw4LmA4LiLCivguIHguKPguLDguYDguIvguYfguJkKK+C4geC4o+C4sOC5gOC4i+C4rQor4LiB4Lij4Liw4LmA4LiL4Lit4Liw4LiB4Lij4Liw4LmA4LiL4LitCivguIHguKPguLDguYDguIvguK3guLDguIHguKPguLDguYDguIvguLTguIcKK+C4geC4o+C4sOC5gOC4i+C5ieC4sgor4LiB4Lij4Liw4LmA4LiL4Li04LiHCivguIHguKPguLDguYHguIsKK+C4geC4o+C4sOC5geC4i+C4sAor4LiB4Lij4Liw4LmC4LiL4LiB4Lij4Liw4LmA4LiLCivguIHguKPguLDguI7guLUKK+C4geC4o+C4sOC4juC4uOC4oeC4nuC4tQor4LiB4Lij4Liw4LiU4LiBCivguIHguKPguLDguJTguYnguIcKK+C4geC4o+C4sOC4lOC4meC5guC4lOC5iAor4LiB4Lij4Liw4LiU4Lin4LiHCivguIHguKPguLDguJTguKfguJkKK+C4geC4o+C4sOC4lOC5ieC4p+C4oeC4geC4o+C4sOC5gOC4lOC4teC5ieC4ouC4oQor4LiB4Lij4Liw4LiU4LitCivguIHguKPguLDguJTguK3guIcKK+C4geC4o+C4sOC4lOC4reC4h+C4q+C4suC4ogor4LiB4Lij4Liw4LiU4Lit4LiZCivguIHguKPguLDguJTguK3guKEKK+C4geC4o+C4sOC4lOC4seC4geC4geC4o+C4sOC5gOC4lOC4teC5ieC4ogor4LiB4Lij4Liw4LiU4Lix4LiH4LiH4Lix4LinCivguIHguKPguLDguJTguLHguIfguIfguLIKK+C4geC4o+C4sOC4lOC4suC4gQor4LiB4Lij4Liw4LiU4LmJ4Liy4LiHCivguIHguKPguLDguJTguLLguIfguKXguLLguIcKK+C4geC4o+C4sOC4lOC4suC4lAor4LiB4Lij4Liw4LiU4Liy4LiU4LiC4Liy4LinCivguIHguKPguLDguJTguLLguJkKK+C4geC4o+C4sOC4lOC4suC4qQor4LiB4Lij4Liw4LiU4Liy4Lip4LmA4LiX4LioCivguIHguKPguLDguJTguLPguIHguKPguLDguJTguYjguLLguIcKK+C4geC4o+C4sOC4lOC4tOC4gQor4LiB4Lij4Liw4LiU4Li04LmI4LiHCivguIHguKPguLDguJTguLTguYnguIcKK+C4geC4o+C4sOC4lOC4tOC5iOC4h+C4l+C4reC4hwor4LiB4Lij4Liw4LiU4Li04Lia4LmGCivguIHguKPguLDguJTguLXguYgKK+C4geC4o+C4sOC4lOC4teC5ieC4geC4o+C4sOC5gOC4lOC4teC4ouC4oQor4LiB4Lij4Liw4LiU4Li14LmI4Lir4Lih4LmJ4LitCivguIHguKPguLDguJTguLbguIcKK+C4geC4o+C4sOC4lOC4t+C4mgor4LiB4Lij4Liw4LiU4Li4CivguIHguKPguLDguJTguLjguIHguIHguKPguLDguJTguLTguIEKK+C4geC4o+C4sOC4lOC4uOC5ieC4h+C4geC4o+C4sOC4lOC4tOC5ieC4hwor4LiB4Lij4Liw4LiU4Li44Lia4LmGCivguIHguKPguLDguJTguLjguJrguIHguKPguLDguJTguLTguJoKK+C4geC4o+C4sOC4lOC4uOC4oQor4LiB4Lij4Liw4LiU4Li54LiBCivguIHguKPguLDguYDguJTguYnguIcKK+C4geC4o+C4sOC5gOC4lOC5h+C4mQor4LiB4Lij4Liw4LmA4LiU4LmJ4LiyCivguIHguKPguLDguYDguJTguLLguLAKK+C4geC4o+C4sOC5gOC4lOC4tOC4lAor4LiB4Lij4Liw4LmA4LiU4Li14LmJ4LiiCivguIHguKPguLDguYDguJTguLXguKLguJQKK+C4geC4o+C4sOC5gOC4lOC4teC4ouC4oQor4LiB4Lij4Liw4LmA4LiU4Li14LmJ4Lii4LihCivguIHguKPguLDguYDguJTguLfguK3guIEKK+C4geC4o+C4sOC5gOC4lOC4t+C5iOC4reC4hwor4LiB4Lij4Liw4LmB4LiU4LmH4LiB4LmGCivguIHguKPguLDguYHguJTguYnguIcKK+C4geC4o+C4sOC5geC4lOC5ieC5geC4o+C5iAor4LiB4Lij4Liw4LmB4LiU4LmI4Lin4LmGCivguIHguKPguLDguYHguJTguLAKK+C4geC4o+C4sOC5guC4lOC4gQor4LiB4Lij4Liw4LmC4LiU4LiHCivguIHguKPguLDguYLguJTguIfguYHguJTguIcKK+C4geC4o+C4sOC5guC4lOC4lAor4LiB4Lij4Liw4LmC4LiU4LiZCivguIHguKPguLDguYPguJQKK+C4geC4o+C4sOC5hOC4lAor4LiB4Lij4Liw4LiV4Lij4LiB4LiB4Lij4Liw4LiV4Lij4LizCivguIHguKPguLDguJXguKPguYnguK0KK+C4geC4o+C4sOC4leC4o+C4seC4mgor4LiB4Lij4Liw4LiV4Lij4Liy4LiBCivguIHguKPguLDguJXguKPguLMKK+C4geC4o+C4sOC4leC4o+C4uOC4lAor4LiB4Lij4Liw4LiV4Lij4Li44LihCivguIHguKPguLDguJXguYnguKfguKHguIHguKPguLDguYDguJXguLXguYnguKLguKEKK+C4geC4o+C4sOC4leC5ieC4rQor4LiB4Lij4Liw4LiV4LmI4Lit4LiH4LiB4Lij4Liw4LmB4LiV4LmI4LiHCivguIHguKPguLDguJXguYrguK3guJoKK+C4geC4o+C4sOC4leC5iOC4reC4oSB7IOC4geC4uuC4o+C4sOC4leC5iOC4reC4oSB9CivguIHguKPguLDguJXguYnguK3guKLguJXguLXguKfguLTguJQKK+C4geC4o+C4sOC4leC4seC4gQor4LiB4Lij4Liw4LiV4Lix4LmJ4LinCivguIHguKPguLDguJXguLLguIEKK+C4geC4o+C4sOC4leC5iuC4suC4gQor4LiB4Lij4Liw4LiV4LmI4Liy4LiiCivguIHguKPguLDguJXguLTguIEKK+C4geC4o+C4sOC4leC4tOC5ieC4hwor4LiB4Lij4Liw4LiV4Li04LmK4LiUCivguIHguKPguLDguJXguLTguJoKK+C4geC4o+C4sOC4leC4t+C4reC4o+C4t+C4reC4o+C5ieC4mQor4LiB4Lij4Liw4LiV4Li44LiBCivguIHguKPguLDguJXguLjguIHguIHguKPguLDguJXguLTguIEKK+C4geC4o+C4sOC4leC4uOC5ieC4h+C4geC4o+C4sOC4leC4tOC5ieC4hwor4LiB4Lij4Liw4LiV4Li44LmI4LiZCivguIHguKPguLDguJXguLjguYnguJkKK+C4geC4o+C4sOC4leC4ueC4mgor4LiB4Lij4Liw4LmA4LiV4LiHCivguIHguKPguLDguYDguJXguYfguJkKK+C4geC4o+C4sOC5gOC4leC4reC4sAor4LiB4Lij4Liw4LmA4LiV4LmI4LiyCivguIHguKPguLDguYDguJXguLLguLAKK+C4geC4o+C4sOC5gOC4leC4suC4sOC4geC4o+C4sOC5geC4leC4sAor4LiB4Lij4Liw4LmA4LiV4Li14LmJ4Lii4LihCivguIHguKPguLDguYDguJXguLfguYnguK3guIcKK+C4geC4o+C4sOC5geC4lQor4LiB4Lij4Liw4LmB4LiV4LmI4LiHCivguIHguKPguLDguYHguJXguYHguJXguYnguYHguKfguYnguJQKK+C4geC4o+C4sOC5geC4leC4p+C4seC4mgor4LiB4Lij4Liw4LmB4LiV4LiwCivguIHguKPguLDguYLguJXguIHguIHguKPguLDguJXguLLguIEKK+C4geC4o+C4sOC5guC4leC4mQor4LiB4Lij4Liw4LmE4LiV4LijCivguIHguKPguLDguJbguJQKK+C4geC4o+C4sOC4luC4reC4mgor4LiB4Lij4Liw4LiW4Lix4LmI4LinCivguIHguKPguLDguJbguLLguIcKK+C4geC4o+C4sOC4luC4tOC4gQor4LiB4Lij4Liw4LiW4Li04LiZCivguIHguKPguLDguJbguLbguIEKK+C4geC4o+C4sOC5gOC4luC4tOC4mgor4LiB4Lij4Liw4LmC4LiW4LiZCivguIHguKPguLDguJfguIEKK+C4geC4o+C4sOC4l+C4hwor4LiB4Lij4Liw4LiX4LiH4Lil4Liy4LiiCivguIHguKPguLDguJfguJQKK+C4geC4o+C4sOC4l+C4mgor4LiB4Lij4Liw4LiX4Lij4Lin4LiHCivguIHguKPguLDguJfguKfguKIgeyDguIHguLrguKPguLDguJfguKfguKIgfQor4LiB4Lij4Liw4LiX4Lit4LiBCivguIHguKPguLDguJfguYnguK3guJkKK+C4geC4o+C4sOC4l+C5iOC4reC4meC4geC4o+C4sOC5geC4l+C5iOC4mQor4LiB4Lij4Liw4LiX4LmI4Lit4LihCivguIHguKPguLDguJfguYnguK3guKHguIHguKPguLDguYHguJfguYnguKEKK+C4geC4o+C4sOC4l+C4sAor4LiB4Lij4Liw4LiX4Lix4LmI4LiHCivguIHguKPguLDguJfguLHguYjguIfguJXguLTguJQKK+C4geC4o+C4sOC4l+C4seC4mQor4LiB4Lij4Liw4LiX4Lix4LmJ4LiZCivguIHguKPguLDguJfguLIKK+C4geC4o+C4sOC4l+C4suC4iuC4suC4ogor4LiB4Lij4Liw4LiX4Liy4LiiCivguIHguKPguLDguJfguLLguKLguYDguKvguLTguJkKK+C4geC4o+C4sOC4l+C4suC4quC4tQor4LiB4Lij4Liw4LiX4Liy4Lir4Lit4LiHCivguIHguKPguLDguJfguLMKK+C4geC4o+C4sOC4l+C4tOC4geC4geC4o+C4sOC4l+C4p+C4ogor4LiB4Lij4Liw4LiX4Li04LiHCivguIHguKPguLDguJfguLbguIcKK+C4geC4o+C4sOC4l+C4t+C4mgor4LiB4Lij4Liw4LiX4Li4CivguIHguKPguLDguJfguLjguIcKK+C4geC4o+C4sOC4l+C4uOC5ieC4hwor4LiB4Lij4Liw4LiX4Li44LiH4Lil4Liy4LiiCivguIHguKPguLDguJfguLjguIfguKvguKHguLLguJrguYnguLIKK+C4geC4o+C4sOC4l+C4uOC4h+C5gOC4q+C4pwor4LiB4Lij4Liw4LiX4Li44LmI4LihCivguIHguKPguLDguJfguLjguYjguKHguILguLXguYnguKvguKHguLkKK+C4geC4o+C4sOC4l+C4uOC5iOC4oeC4meC4sgor4LiB4Lij4Liw4LiX4Li44LmI4Lih4Lir4Lih4Li5CivguIHguKPguLDguJfguLnguYkKK+C4geC4o+C4sOC5gOC4l+C5iAor4LiB4Lij4Liw4LmA4LiX4Li14Lii4LiaCivguIHguKPguLDguYDguJfguLXguKLguKEKK+C4geC4o+C4sOC5gOC4l+C4t+C4reC4mQor4LiB4Lij4Liw4LmA4LiX4Li34LmJ4Lit4LihCivguIHguKPguLDguYHguJfguIEKK+C4geC4o+C4sOC5geC4l+C5iOC4mQor4LiB4Lij4Liw4LmB4LiX4LmJ4LihCivguIHguKPguLDguYHguJfguLAKK+C4geC4o+C4sOC5hOC4l+C4iuC4suC4ogor4LiB4Lij4Liw4LiZ4LiBCivguIHguKPguLDguJnguYjguK3guIcKK+C4geC4o+C4sOC4meC4seC5ieC4mQor4LiB4Lij4Liw4LiZ4Li14LmJCivguIHguKPguLDguYLguJnguYnguJkKK+C4geC4o+C4sOC5hOC4mQor4LiB4Lij4Liw4Lia4LiBCivguIHguKPguLDguJrguIHguITguLLguKIKK+C4geC4o+C4sOC4muC4lgor4LiB4Lij4Liw4Lia4Lin4LiZCivguIHguKPguLDguJrguKfguKIKK+C4geC4o+C4sOC4muC4p+C4owor4LiB4Lij4Liw4Lia4Lit4LiBCivguIHguKPguLDguJrguK3guIHguYDguKrguLXguKLguIcKK+C4geC4o+C4sOC4muC4reC4hwor4LiB4Lij4Liw4Lia4Lit4LiH4LiB4Lix4LiZCivguIHguKPguLDguJrguK3guIfguYDguJ7guIrguKMKK+C4geC4o+C4sOC4muC4reC4h+C4o+C4suC4q+C4uQor4LiB4Lij4Liw4Lia4LiwCivguIHguKPguLDguJrguLHguJQKK+C4geC4o+C4sOC4muC4seC5ieC4p+C4geC4o+C4sOC5gOC4muC4teC5ieC4ogor4LiB4Lij4Liw4Lia4LmI4LiyCivguIHguKPguLDguJrguYnguLIKK+C4geC4o+C4sOC4muC4suC4gQor4LiB4Lij4Liw4Lia4Liy4LiiCivguIHguKPguLDguJrguLLguKUgeyDguIHguLrguKPguLDguJrguLLguJkgfQor4LiB4Lij4Liw4Lia4Li0CivguIHguKPguLDguJrguLTguYnguIcKK+C4geC4o+C4sOC4muC4tOC4lAor4LiB4Lij4Liw4Lia4Li04LilCivguIHguKPguLDguJrguLXguYgKK+C4geC4o+C4sOC4muC4t+C4rQor4LiB4Lij4Liw4Lia4Li44LiHCivguIHguKPguLDguJrguLjguKEKK+C4geC4o+C4sOC4muC4uOC5iOC4oeC4geC4o+C4sOC4muC5iOC4suC4oQor4LiB4Lij4Liw4Lia4Li54LmJ4LiB4Lij4Liw4Lia4Li14LmJCivguIHguKPguLDguJrguLnguJkKK+C4geC4o+C4sOC4muC4ueC4owor4LiB4Lij4Liw4LmA4Lia4LiHCivguIHguKPguLDguYDguJrguI0KK+C4geC4o+C4sOC5gOC4muC5h+C4lOC4geC4o+C4sOC4muC4p+C4mQor4LiB4Lij4Liw4LmA4Lia4LiZCivguIHguKPguLDguYDguJrguLIKK+C4geC4o+C4sOC5gOC4muC4tOC4gQor4LiB4Lij4Liw4LmA4Lia4Li14LmJ4LiiCivguIHguKPguLDguYDguJrguLXguKLguJQKK+C4geC4o+C4sOC5gOC4muC4teC4ouC4mQor4LiB4Lij4Liw4LmA4Lia4Li34LmJ4Lit4LiHCivguIHguKPguLDguYDguJrguLfguYnguK3guIfguJbguYnguKfguKIKK+C4geC4o+C4sOC5geC4muC5iAor4LiB4Lij4Liw4LmB4Lia4LiBCivguIHguKPguLDguYHguJrguIHguIfguLIKK+C4geC4o+C4sOC5geC4muC4sAor4LiB4Lij4Liw4LmC4Lia4LihCivguIHguKPguLDguJvguKHguIHguKPguLDguJvguLMKK+C4geC4o+C4sOC4m+C4oeC4geC4o+C4sOC5gOC4m+C4sgor4LiB4Lij4Liw4Lib4Lij4Lit4LiBCivguIHguKPguLDguJvguKPguK3guIHguKfguYjguLLguKcKK+C4geC4o+C4sOC4m+C4o+C4teC5ieC4geC4o+C4sOC5gOC4m+C4o+C5iOC4sgor4LiB4Lij4Liw4Lib4Lit4LiBCivguIHguKPguLDguJvguYnguK3guIHguKPguLDguYHguJvguYkKK+C4geC4o+C4sOC4m+C5iOC4reC4hwor4LiB4Lij4Liw4Lib4LmL4Lit4LiHCivguIHguKPguLDguJvguK3guJTguIHguKPguLDguYHguJvguJQKK+C4geC4o+C4sOC4m+C5i+C4reC4q+C4peC4rQor4LiB4Lij4Liw4Lib4Lix4LmJ4Lin4LiB4Lij4Liw4LmA4Lib4Li14LmJ4LiiCivguIHguKPguLDguJvguYjguLMKK+C4geC4o+C4sOC4m+C4tOC5iOC4oQor4LiB4Lij4Liw4Lib4Li44LiBCivguIHguKPguLDguJvguLjguYjguKEKK+C4geC4o+C4sOC4m+C4uOC5iOC4oeC4geC4o+C4sOC4m+C5iOC4swor4LiB4Lij4Liw4Lib4Li44LmI4Lih4LiB4Lij4Liw4Lib4Li04LmI4LihCivguIHguKPguLDguYDguJvguLIKK+C4geC4o+C4sOC5gOC4m+C5i+C4sgor4LiB4Lij4Liw4LmA4Lib4Liy4LiwCivguIHguKPguLDguYDguJvguLXguYnguKIgeyDguIHguLrguKPguLDguYDguJvguLXguYnguKIgfQor4LiB4Lij4Liw4LmB4Lib4LmJCivguIHguKPguLDguYHguJvguJQKK+C4geC4o+C4sOC5guC4m+C4gQor4LiB4Lij4Liw4LmC4Lib4Lij4LiHCivguIHguKPguLDguYLguJvguKPguIfguJfguK3guIcKK+C4geC4o+C4sOC4nOC4oQor4LiB4Lij4Liw4Lic4Lil4Liy4LihCivguIHguKPguLDguJzguKXguLXguIHguKPguLDguJzguKXguLLguKEKK+C4geC4o+C4sOC4nOC4suC4mQor4LiB4Lij4Liw4Lic4Li14LiBCivguIHguKPguLDguJ7guKPguKfguJkKK+C4geC4o+C4sOC4nuC4o+C4tOC5ieC4oQor4LiB4Lij4Liw4Lie4Lit4LiBCivguIHguKPguLDguJ7guK3guIHguKfguLHguKcKK+C4geC4o+C4sOC4nuC4reC4hwor4LiB4Lij4Liw4Lie4LmJ4Lit4LihCivguIHguKPguLDguJ7guLHguIEKK+C4geC4o+C4sOC4nuC4seC4hwor4LiB4Lij4Liw4Lie4Lix4LiH4LmA4Lir4Li04LijCivguIHguKPguLDguJ7guLHguIfguYLguKvguKEKK+C4geC4o+C4sOC4nuC4seC4lAor4LiB4Lij4Liw4Lie4Lix4LiU4LmB4Lih4LmI4Lih4LmI4Liy4LiiCivguIHguKPguLDguJ7guLHguJXguKMKK+C4geC4o+C4sOC4nuC4seC4mQor4LiB4Lij4Liw4Lie4Lix4LmI4LiZCivguIHguKPguLDguJ7guLIKK+C4geC4o+C4sOC4nuC4suC4gSB7IOC4geC4uuC4o+C4sOC4nuC4suC4gSB9CivguIHguKPguLDguJ7guLXguYkKK+C4geC4o+C4sOC4nuC4t+C4rQor4LiB4Lij4Liw4Lie4Li44LmJ4LiHCivguIHguKPguLDguJ7guLjguYjguKEKK+C4geC4o+C4sOC5gOC4nuC4peC4tOC4qAor4LiB4Lij4Liw4LmA4Lie4Liy4LiwCivguIHguKPguLDguYDguJ7guLLguLDguJvguKXguLIKK+C4geC4o+C4sOC5gOC4nuC4tOC4hwor4LiB4Lij4Liw4LmA4Lie4Li34LmI4Lit4LihCivguIHguKPguLDguYHguJ7guIcKK+C4geC4o+C4sOC5geC4nuC5ieC4hwor4LiB4Lij4Liw4Lif4Lix4LiU4LiB4Lij4Liw4LmA4Lif4Li14Lii4LiUCivguIHguKPguLDguJ/guLLguKIKK+C4geC4o+C4sOC4n+C4ueC4oeC4geC4o+C4sOC4n+C4suC4ogor4LiB4Lij4Liw4LmA4Lif4Li14Lii4LiUCivguIHguKPguLDguKHguKUKK+C4geC4o+C4sOC4oeC4reC4mgor4LiB4Lij4Liw4Lih4Lit4Lih4LiB4Lij4Liw4LmB4Lih4LihCivguIHguKPguLDguKHguLHguIcKK+C4geC4o+C4sOC4oeC4seC4mQor4LiB4Lij4Liw4Lih4Li04LiU4LiB4Lij4Liw4LmA4Lih4Li14LmJ4Lii4LiZCivguIHguKPguLDguKHguLbguJkKK+C4geC4o+C4sOC4oeC4uOC4lwor4LiB4Lij4Liw4LmA4Lih4Liy4LiwCivguIHguKPguLDguYDguKHguLXguYnguKLguJkKK+C4geC4o+C4sOC5geC4oeC4oQor4LiB4Lij4Liw4Lii4LmI4Lit4LiHCivguIHguKPguLDguKLguYjguK3guIfguIHguKPguLDguYHguKLguYjguIcKK+C4geC4o+C4sOC4ouC5iOC4reC4mQor4LiB4Lij4Liw4Lii4LmI4Lit4LihCivguIHguKPguLDguKLguLIKK+C4geC4o+C4sOC4ouC4suC4hwor4LiB4Lij4Liw4Lii4Liy4LiI4LiBCivguIHguKPguLDguKLguLLguJQKK+C4geC4o+C4sOC4ouC4suC4q+C4h+C4seC4mQor4LiB4Lij4Liw4Lii4Li04LiBCivguIHguKPguLDguKLguLTguYnguKHguIHguKPguLDguKLguYjguK3guIcKK+C4geC4o+C4sOC4ouC4tuC4geC4geC4o+C4sOC4ouC4t+C4rQor4LiB4Lij4Liw4Lii4Li24LiU4LiB4Lij4Liw4Lii4Liy4LiUCivguIHguKPguLDguYDguKLguYnguK3guIHguKPguLDguYHguKvguKLguYjguIcKK+C4geC4o+C4sOC5geC4ouC5iOC4hwor4LiB4Lij4Liw4Lij4Lit4LiBCivguIHguKPguLDguKPguK3guIHguJnguYnguLPguILguYnguLLguKcKK+C4geC4o+C4sOC5gOC4o+C4teC4ouC4mQor4LiB4Lij4Liw4LmC4Lij4LiB4LiZ4LmJ4Liz4LiC4LmJ4Liy4LinCivguIHguKPguLDguYLguKPguIHguYPguKvguI3guYgKK+C4geC4o+C4sOC5hOC4owor4LiB4Lij4Liw4Lil4LiUCivguIHguKPguLDguKXguJoKK+C4geC4o+C4sOC4peC4reC4gQor4LiB4Lij4Liw4Lil4Lit4LihCivguIHguKPguLDguKXguLDguKvguKXguYjguLMKK+C4geC4o+C4sOC4peC4seC4lAor4LiB4Lij4Liw4Lil4Lix4LiaCivguIHguKPguLDguKXguLHguKHguJ7guKMKK+C4geC4o+C4sOC4peC4sgor4LiB4Lij4Liw4Lil4Liy4LiB4Liy4LijCivguIHguKPguLDguKXguLLguKLguIHguKPguLDguKXguK3guIEKK+C4geC4o+C4sOC4peC4swor4LiB4Lij4Liw4Lil4Liz4Lie4LijCivguIHguKPguLDguKXguLPguJ7guLHguIEKK+C4geC4o+C4sOC4peC4s+C4nuC4uOC4gQor4LiB4Lij4Liw4Lil4Li04LiHCivguIHguKPguLDguKXguLUKK+C4geC4o+C4sOC4peC4tuC4hwor4LiB4Lij4Liw4Lil4Li44Lih4Lie4Liy4LiHCivguIHguKPguLDguKXguLjguKHguJ7guLjguIEKK+C4geC4o+C4sOC4peC4uOC4oeC4nuC4uQor4LiB4Lij4Liw4Lil4Li54LiZCivguIHguKPguLDguKXguLnguYjguJnguYwKK+C4geC4o+C4sOC5gOC4peC5h+C4mQor4LiB4Lij4Liw4LmA4Lil4Li14Lii4LiUCivguIHguKPguLDguYDguKXguLfguK3guIEKK+C4geC4o+C4sOC5guC4peC4hwor4LiB4Lij4Liw4Lin4LiZCivguIHguKPguLDguKfguLHguJQKK+C4geC4o+C4sOC4p+C5iOC4sgor4LiB4Lij4Liw4Lin4Liy4LiUCivguIHguKPguLDguKfguLLguJkKK+C4geC4o+C4sOC4p+C4suC4ogor4LiB4Lij4Liw4Lin4Li04LiZCivguIHguKPguLDguKfguLUKK+C4geC4o+C4sOC4p+C4teC4geC4o+C4sOC4p+C4suC4lAor4LiB4Lij4Liw4Lin4Li54LiU4LiB4Lij4Liw4Lin4Liy4LiUCivguIHguKPguLDguYDguKfguJkKK+C4geC4o+C4sOC5gOC4p+C4ouC4geC4o+C4sOC4p+C4suC4ogor4LiB4Lij4Liw4LmB4Lin4LiZCivguIHguKPguLDguYLguKfguKLguIHguKPguLDguKfguLLguKIKK+C4geC4o+C4sOC4qOC4gQor4LiB4Lij4Liw4Lio4Lix4LiiCivguIHguKPguLDguKnguLHguJXguKPguLTguKLguYwKK+C4geC4o+C4sOC4qeC4seC4leC4o+C4tQor4LiB4Lij4Liw4Lip4Lix4LiiCivguIHguKPguLDguKnguLLguJvguJPguYwKK+C4geC4o+C4sOC4qeC4tOC4owor4LiB4Lij4Liw4LmA4Lip4LihCivguIHguKPguLDguYDguKnguLXguKLguKMKK+C4geC4o+C4sOC4quC4hwor4LiB4Lij4Liw4Liq4LiZCivguIHguKPguLDguKrguJoKK+C4geC4o+C4sOC4quC4oQor4LiB4Lij4Liw4Liq4Lij4Lin4LilCivguIHguKPguLDguKrguKPguYnguK3guKIKK+C4geC4o+C4sOC4quC4p+C4mQor4LiB4Lij4Liw4Liq4Lin4LiiCivguIHguKPguLDguKrguK3guJoKK+C4geC4o+C4sOC4quC4sAor4LiB4Lij4Liw4Liq4Lix4LiHCivguIHguKPguLDguKrguLHguJkKK+C4geC4o+C4sOC4quC4seC4muC4geC4o+C4sOC4quC5iOC4suC4ogor4LiB4Lij4Liw4Liq4LiyCivguIHguKPguLDguKrguLLguJnguJXguLTguYwKK+C4geC4o+C4sOC4quC4suC4mgor4LiB4Lij4Liw4Liq4Liy4LiiCivguIHguKPguLDguKrguYjguLLguKIKK+C4geC4o+C4sOC4quC4tOC4meC4mOC4uAor4LiB4Lij4Liw4Liq4Li34LitCivguIHguKPguLDguKrguLjguIfguIHguKPguLDguKrguLTguIcKK+C4geC4o+C4sOC4quC4uOC4mQor4LiB4Lij4Liw4Liq4Li54LiX4LiY4Li04LmMCivguIHguKPguLDguKrguLnguJoKK+C4geC4o+C4sOC5gOC4quC4lAor4LiB4Lij4Liw4LmA4Liq4LmH4LiZ4LiB4Lij4Liw4Liq4Liy4LiiCivguIHguKPguLDguYDguKrguYjguLIKK+C4geC4o+C4sOC5gOC4quC4suC4sOC4geC4o+C4sOC5geC4quC4sAor4LiB4Lij4Liw4LmA4Liq4Li14Lii4LiZCivguIHguKPguLDguYDguKrguLXguKLguKMKK+C4geC4o+C4sOC5gOC4quC4t+C4reC4geC4geC4o+C4sOC4quC4mQor4LiB4Lij4Liw4LmB4LiqCivguIHguKPguLDguYHguKrguIcKK+C4geC4o+C4sOC5geC4quC4sCB7IOC4geC4uuC4o+C4sOC5geC4quC4sCB9CivguIHguKPguLDguYLguKrguIcKK+C4geC4o+C4sOC5hOC4qgor4LiB4Lij4Liw4Lir4LiH4LmI4Lit4LiHCivguIHguKPguLDguKvguJkKK+C4geC4o+C4sOC4q+C4meC4gQor4LiB4Lij4Liw4Lir4LiZ4LiB4LiB4Li04LiZ4Lij4Li1CivguIHguKPguLDguKvguJnguIHguJnguKTguKHguLTguJUKK+C4geC4o+C4sOC4q+C4meC4geC4meC4suC4o+C4tQor4LiB4Lij4Liw4Lir4LiZ4LmI4Lit4LiHCivguIHguKPguLDguKvguJnguLLguIEKK+C4geC4o+C4sOC4q+C4meC5iOC4swor4LiB4Lij4Liw4Lir4Lih4Lin4LiUCivguIHguKPguLDguKvguKHguK3guJoKK+C4geC4o+C4sOC4q+C4oeC5iOC4reC4oQor4LiB4Lij4Liw4Lir4Lih4Lix4LmI4LiHCivguIHguKPguLDguKvguKHguYjguLIKK+C4geC4o+C4sOC4q+C4oeC4tOC4lAor4LiB4Lij4Liw4Lir4Lih4Li04LiaCivguIHguKPguLDguKvguKHguLjguJTguIHguKPguLDguKvguKHguLTguJQKK+C4geC4o+C4sOC4q+C4oeC4uOC5iOC4mQor4LiB4Lij4Liw4Lir4Lih4Li44LiaCivguIHguKPguLDguKvguKLguYjguIcKK+C4geC4o+C4sOC4q+C4ouC4lAor4LiB4Lij4Liw4Lir4Lii4LiaCivguIHguKPguLDguKvguKLguYjguK3guJkKK+C4geC4o+C4sOC4q+C4ouC5iOC4reC4oQor4LiB4Lij4Liw4Lir4Lii4LiwCivguIHguKPguLDguKvguKLguLHguIcKK+C4geC4o+C4sOC4q+C4ouC4seC4mgor4LiB4Lij4Liw4Lir4Lii4Li04LmI4LihCivguIHguKPguLDguKvguKPguK3guJQKK+C4geC4o+C4sOC4q+C4o+C4tOC5iOC4hwor4LiB4Lij4Liw4Lir4Lin4LiZCivguIHguKPguLDguKvguKfguLHguJQKK+C4geC4o+C4sOC4q+C4p+C4seC4lOC5gOC4geC4peC5ieC4sgor4LiB4Lij4Liw4Lir4Lin4LmI4LiyCivguIHguKPguLDguKvguK3guIcKK+C4geC4o+C4sOC4q+C4seC4hwor4LiB4Lij4Liw4Lir4Lix4LiUCivguIHguKPguLDguKvguLLguIcgeyDguIHguLrguKPguLDguKvguLLguIcgfQor4LiB4Lij4Liw4Lir4Liy4LiiCivguIHguKPguLDguKvguLbguKEKK+C4geC4o+C4sOC4q+C4tuC5iOC4oQor4LiB4Lij4Liw4Lir4Li34LiU4LiB4Lij4Liw4Lir4Lit4LiaCivguIHguKPguLDguYDguKvguYfguJkKK+C4geC4o+C4sOC5gOC4q+C4meC5h+C4iAor4LiB4Lij4Liw4LmA4Lir4LiZ4Li14Lii4LiUCivguIHguKPguLDguYDguKvguKHguYfguJTguIHguKPguLDguYDguKvguKHguLXguKLguJQKK+C4geC4o+C4sOC5gOC4q+C4oeC5h+C4lOC4geC4o+C4sOC5geC4q+C4oeC5iAor4LiB4Lij4Liw4LmA4Lir4Lih4LmI4LiZCivguIHguKPguLDguYDguKvguKHguYjguLIKK+C4geC4o+C4sOC5gOC4q+C4peC4teC4ouC4gQor4LiB4Lij4Liw4LmA4Lir4Lin4LmI4LiyCivguIHguKPguLDguYDguKvguYjguK0KK+C4geC4o+C4sOC5gOC4q+C4tOC4oQor4LiB4Lij4Liw4LmA4Lir4Li14LmJ4Lii4LiZ4LiB4Lij4Liw4Lir4Li34Lit4Lij4Li34LitCivguIHguKPguLDguYHguKvguJfguK3guIcKK+C4geC4o+C4sOC5geC4q+C4mQor4LiB4Lij4Liw4LmB4Lir4LiZ4LmICivguIHguKPguLDguYHguKvguJnguJoKK+C4geC4o+C4sOC5geC4q+C4meC4sAor4LiB4Lij4Liw4LmB4Lir4Lih4LiaCivguIHguKPguLDguYHguKvguKHguYjguKcKK+C4geC4o+C4sOC5geC4q+C4ouC5iOC4hwor4LiB4Lij4Liw4LmB4Lir4Lij4LmI4LihCivguIHguKPguLDguYHguKvguKXguYjguIcKK+C4geC4o+C4sOC5guC4q+C5iQor4LiB4Lij4Liw4LmC4Lir4LiZ4LiUCivguIHguKPguLDguYLguKvguKEKK+C4geC4o+C4sOC5guC4q+C4ogor4LiB4Lij4Liw4LmC4Lir4Lii4LmI4LiHCivguIHguKPguLDguK3guYjguKfguJkKK+C4geC4o+C4sOC4reC4p+C4pQor4LiB4Lij4Liw4Lit4LmJ4Lit4LiB4Lij4Liw4LmB4Lit4LmJCivguIHguKPguLDguK3guK3guJTguIHguKPguLDguYHguK3guJQKK+C4geC4o+C4sOC4reC4reC4mgor4LiB4Lij4Liw4Lit4Lit4LihCivguIHguKPguLDguK3guYnguK3guKHguIHguKPguLDguYHguK3guYnguKEKK+C4geC4o+C4sOC4reC4reC4oeC4meC5ieC4swor4LiB4Lij4Liw4Lit4Lix4LiBCivguIHguKPguLDguK3guLHguIHguIHguKPguLDguK3guYjguKfguJkKK+C4geC4o+C4sOC4reC4seC4geC4geC4o+C4sOC5hOC4rQor4LiB4Lij4Liw4Lit4Lix4LmJ4Lin4LmB4LiX4LiH4LiE4Lin4Liy4LiiCivguIHguKPguLDguK3guYnguLIKK+C4geC4o+C4sOC4reC4suC4mQor4LiB4Lij4Liw4Lit4Li04LiUCivguIHguKPguLDguK3guLTguJTguIHguKPguLDguYDguK3guLfguYnguK3guJkKK+C4geC4o+C4sOC4reC4tuC4gQor4LiB4Lij4Liw4Lit4Li24LiB4LiB4Lij4Liw4Lit4Lix4LiBCivguIHguKPguLDguK3guLbguJQKK+C4geC4o+C4sOC4reC4t+C4lAor4LiB4Lij4Liw4Lit4Li4CivguIHguKPguLDguK3guLjguIEKK+C4geC4o+C4sOC5gOC4reC4mgor4LiB4Lij4Liw4LmA4Lit4LiyCivguIHguKPguLDguYDguK3guLTguIEKK+C4geC4o+C4sOC5gOC4reC4tOC4mgor4LiB4Lij4Liw4LmB4Lit4LmJCivguIHguKPguLDguYHguK3guIEKK+C4geC4o+C4sOC5geC4reC4lAor4LiB4Lij4Liw4LmB4Lit4LiaCivguIHguKPguLDguYHguK3guKEKK+C4geC4o+C4sOC5geC4reC5ieC4oQor4LiB4Lij4Liw4LmE4LitCivguIHguKPguLHguIEKK+C4geC4o+C4seC4geC4guC4tQor4LiB4Lij4Lix4LiHCivguIHguKPguLHguIrguIHguLLguKIKK+C4geC4o+C4seC4k+C4keC5jAor4LiB4Lij4Lix4LiT4Lii4LmMCivguIHguKPguLHguJkKK+C4geC4o+C4seC4mgor4LiB4Lij4Lix4LihCivguIHguKPguLLguIEKK+C4geC4o+C4suC4hwor4LiB4Lij4LmI4Liy4LiHCivguIHguKPguLLguJQKK+C4geC4o+C4suC4lOC5gOC4geC4o+C4teC5ieC4ouC4pwor4LiB4Lij4Liy4LiU4Lin4LiHCivguIHguKPguLLguJkKK+C4geC4o+C5ieC4suC4mQor4LiB4Lij4Liy4LiaCivguIHguKPguLLguJ8KK+C4geC4o+C4suC4oQor4LiB4Lij4Liy4Lih4Lie4Lil4Li5CivguIHguKPguLLguKIKK+C4geC4o+C5iOC4suC4ogor4LiB4Lij4Liy4LilCivguIHguKPguLLguKcKK+C4geC4o+C5ieC4suC4pwor4LiB4Lij4Liy4Lin4LiU4LmI4Liy4LiHCivguIHguKPguLLguKfguKPguLnguJQKK+C4geC4o+C4suC4quC4tOC4gQor4LiB4Lij4LizCivguIHguKPguYjguLMKK+C4geC4o+C5iOC4s+C4geC4o+C4uOC5iOC4mQor4LiB4Lij4Li04LiBCivguIHguKPguLTguYrguIEKK+C4geC4o+C4tOC4geC4geC4o+C4tOC4pwor4LiB4Lij4Li04LiB4LiB4Lij4Li1CivguIHguKPguLTguYjguIcKK+C4geC4o+C4tOC5iuC4hwor4LiB4Lij4Li04LiH4LiB4Lij4Li04LinCivguIHguKPguLTguYnguIfguIHguKPguLTguYnguKcKK+C4geC4o+C4tOC4igor4LiB4Lij4Li04LiT4Li1CivguIHguKPguLTguJXguKIKK+C4geC4o+C4tOC4mQor4LiB4Lij4Li04LiZ4Li1CivguIHguKPguLTguJoKK+C4geC4o+C4tOC4oQor4LiB4Lij4Li04LmI4LihCivguIHguKPguLTguKLguLIKK+C4geC4o+C4tOC4pwor4LiB4Lij4Li04LmJ4LinCivguIHguKPguLUKK+C4geC4o+C4teC4keC4sgor4LiB4Lij4Li14LiUCivguIHguKPguLXguYrguJQKK+C4geC4o+C4teC4mOC4sgor4LiB4Lij4Li14LipCivguIHguKPguLXguKoKK+C4geC4o+C4tuC4hwor4LiB4Lij4Li4CivguIHguKPguLjguIEKK+C4geC4o+C4uOC4geC4geC4o+C4ueC5igor4LiB4Lij4Li44LiHCivguIHguKPguLjguYnguIfguIHguKPguLTguYjguIcKK+C4geC4o+C4uOC4h+C5gOC4guC4oeC4sgor4LiB4Lij4Li44LiH4Lie4Liy4Lil4Li1CivguIHguKPguLjguJMKK+C4geC4o+C4uOC4k+C4sgor4LiB4Lij4Li44LiZCivguIHguKPguLjguYjguJkKK+C4geC4o+C4uOC4mgor4LiB4Lij4Li44LmI4LihCivguIHguKPguLjguYnguKHguIHguKPguLTguYjguKEKK+C4geC4o+C4uOC4ogor4LiB4Lij4Li44Lii4LmA4LiB4Lij4Li14Lii4LinCivguIHguKPguLkKK+C4geC4o+C4ueC4lAor4LiB4Lij4Li54LihCivguIHguYDguKPguJPguLgKK+C4geC5gOC4o+C4meC4l+C4owor4LiB4LmA4Lij4LiZ4LiX4Lij4LmMCivguIHguKTguIoKK+C4geC4pOC4lOC4ouC4suC5gOC4geC4teC4ouC4o+C4kwor4LiB4Lik4LiU4LiyCivguIHguKTguJTguLLguIHguLLguKMKK+C4geC4pOC4lOC4suC4reC4seC4jeC4iuC4peC4tQor4LiB4Lik4LiU4Li0CivguIHguKTguJTguLXguIHguLIKK+C4geC4pOC4lQor4LiB4Lik4LiV4LiB4LiyCivguIHguKTguJXguKLguI7guLXguIHguLIKK+C4geC4pOC4leC4tOC4geC4sgor4LiB4Lik4LioCivguIHguKTguYLguKjguJfguKMKK+C4geC4pOC4qeC4juC4sgor4LiB4Lik4Lip4LiO4Liy4LiNCivguIHguKTguKnguI7guLLguI3guIrguKXguLTguJUKK+C4geC4pOC4qeC4juC4suC4jeC4iuC4peC4tQor4LiB4Lik4Lip4LiO4Liy4LiN4LiK4Lin4Lil4Li04LiV4Lin4LiyCivguIHguKTguKnguI7guLLguI3guIrguKfguKXguLTguKgKK+C4geC4pOC4qeC4juC4suC4jeC4iuC4p+C5gOC4peC4qAor4LiB4Lik4Lip4LiO4Liy4LiN4LiK4Li44Lil4Li1CivguIHguKTguKnguI7guLLguJjguLLguKMKK+C4geC4pOC4qeC4juC4tQor4LiB4Lik4Lip4LiO4Li14LiB4LiyCivguIHguKTguKnguJMKK+C4geC4pOC4qeC4k+C4sgor4LiB4Lik4Lip4Liy4LiTCivguIHguKTguKnguLQKK+C4geC4pQor4LiB4Lil4LiUCivguIHguKXguYjguJkKK+C4geC4peC4mgor4LiB4Lil4Lia4LiXCivguIHguKXguKEKK+C4geC4peC4oeC4oAor4LiB4Lil4LmA4Lih4LmH4LiUCivguIHguKXguKLguLjguJfguJjguYwKK+C4geC4peC4peC4sAor4LiB4Lil4Lin4LiHCivguIHguKXguKfguKEKK+C4geC4peC5ieC4p+C4ogor4LiB4Lil4LmJ4Lin4Lii4LiZ4LmJ4Lit4LiiCivguIHguKXguYnguKfguKLguYTguKHguYkKK+C4geC4peC5ieC4p+C4ouC4q+C4oeC4ueC4quC4seC4hwor4LiB4Lil4Lin4Li04LiY4Li1CivguIHguKXguKgKK+C4geC4peC4qOC4suC4quC4leC4o+C5jAor4LiB4Lil4Lio4Li24LiBCivguIHguKXguKvguLLguKIKK+C4geC4peC5gOC4q+C4ogor4LiB4Lil4LmJ4LitCivguIHguKXguK3guIEKK+C4geC4peC4reC4hwor4LiB4Lil4LmI4Lit4LiHCivguIHguKXguYnguK3guIcKK+C4geC4peC5ieC4reC4h+C5geC4geC4peC5ieC4hwor4LiB4Lil4Lit4LiZCivguIHguKXguYjguK3guJkKK+C4geC4peC5ieC4reC4mQor4LiB4Lil4LmI4Lit4LihCivguIHguKXguYnguK3guKHguYHguIHguKXguYnguKEKK+C4geC4peC4reC4ogor4LiB4Lil4Lix4LiBCivguIHguKXguLHguIcKK+C4geC4peC4seC4lAor4LiB4Lil4Lix4LmI4LiZCivguIHguKXguLHguYnguJkKK+C4geC4peC4seC4meC4lwor4LiB4Lil4Lix4LiZ4LiX4LiB4LmMCivguIHguKXguLHguJnguJfguIHguJnguLTguKfguLLguJvguKrguJbguLLguJkKK+C4geC4peC4seC4mgor4LiB4Lil4Lix4Lih4Lie4LiBCivguIHguKXguLHguKHguJ7guKMKK+C4geC4peC4seC4oeC4nuC4seC4gQor4LiB4Lil4Lix4LinCivguIHguKXguLHguYnguKcKK+C4geC4peC4sgor4LiB4Lil4LmI4LiyCivguIHguKXguYnguLIKK+C4geC4peC4suC4gQor4LiB4Lil4Liy4LiB4Lil4Liy4LiUCivguIHguKXguLLguIcKK+C4geC4peC4suC5gOC4i+C4teC4ouC4o+C5jAor4LiB4Lil4Liy4LiUCivguIHguKXguLLguJrguLLguJUKK+C4geC4peC4suC4mwor4LiB4Lil4LmJ4Liy4LihCivguIHguKXguLLguKIKK+C4geC4peC5ieC4suC4ogor4LiB4Lil4Liy4Lii4LiB4Lil4Lit4LiBCivguIHguKXguYjguLLguKcKK+C4geC4peC4suC5guC4q+C4oQor4LiB4Lil4LmI4LizCivguIHguKXguYnguLMKK+C4geC4peC4tAor4LiB4Lil4Li04LiB4Liy4LilCivguIHguKXguLTguIHguLjguI3guIjguLTguIHguLIKK+C4geC4peC4tOC5iOC4hwor4LiB4Lil4Li04LmJ4LiHCivguIHguKXguLTguYnguIfguIHguKXguLLguIfguJTguIcKK+C4geC4peC4tOC4h+C4hOC5jAor4LiB4Lil4Li04LmI4LiZCivguIHguKXguLTguJvguKPguLXguKLguYwKK+C4geC4peC4tOC5ieC4oQor4LiB4Lil4Li04Lii4Li44LiECivguIHguKXguLUKK+C4geC4peC4teC5iAor4LiB4Lil4Li14LmA4LiL4Lit4Lij4Li14LiZCivguIHguKXguLXguJoKK+C4geC4peC4tuC4hwor4LiB4Lil4Li24LmJ4LiHCivguIHguKXguLbguIfguIHguKXguYjguK3guKEKK+C4geC4peC4tuC4h+C4hOC5jAor4LiB4Lil4Li34LiZCivguIHguKXguLjguYjguKEKK+C4geC4peC4uOC5ieC4oQor4LiB4Lil4Li54LmICivguIHguKXguLnguYLguITguKoKK+C4geC4peC4ueC4mQor4LiB4Lil4Li54LiZ4LmMCivguIHguYDguKXguKfguKPguLAKK+C4geC4p+C4lAor4LiB4Lin4LiZCivguIHguYrguKfguJkKK+C4geC4p+C4meC4reC4tOC4oQor4LiB4Lin4LihCivguIHguKfguKIKK+C4geC4p+C4ouC4iOC4seC5iuC4mgor4LiB4Lin4Lii4LiI4Li14LmKCivguIHguYvguKfguKLguYDguJXguLXguYvguKLguKcKK+C4geC5i+C4p+C4ouC4quC4peC4suC4gQor4LiB4Lin4Lis4Li04LiH4LiB4Liy4Lij4Liy4Lir4Liy4LijCivguIHguKfguLAKK+C4geC4p+C4sOC4geC4p+C4seC4gQor4LiB4Lin4Liw4LmB4LiB4Lin4LmI4LiHCivguIHguKfguLHguIEKK+C4geC4p+C4seC4lAor4LiB4Lin4LiyCivguIHguKfguYjguLIKK+C4geC4p+C5ieC4sgor4LiB4Lin4Liy4LiHCivguIHguKfguYjguLLguIcKK+C4geC4p+C5ieC4suC4hwor4LiB4Lin4Liy4LiH4LmA4LiC4LiZCivguIHguKfguLLguIfguYLguIjguJkKK+C4geC4p+C5iOC4suC4h+C4iuC4mQor4LiB4Lin4Liy4LiH4LiK4Liw4Lih4LiUCivguIHguKfguYjguLLguIfguYLguIvguYnguIcKK+C4geC4p+C4suC4h+C4leC4uOC5ieC4hwor4LiB4Lin4Liy4LiH4LiX4Lit4LiHCivguIHguKfguLLguIfguJvguYjguLIKK+C4geC4p+C4suC4h+C4oeC5ieC4sgor4LiB4Lin4Liy4LiUCivguIHguKfguLLguJkKK+C4geC4p+C5iOC4suC4mQor4LiB4Lin4LmJ4Liy4LiZCivguIHguKfguYrguLLguJkKK+C4geC4p+C5ieC4suC4pwor4LiB4Lin4Liy4Lin4LmA4LiE4Lij4Li34LitCivguIHguKfguLTguJkKK+C4geC4p+C4tQor4LiB4Lip4LiT4LiwCivguIHguKnguKHguLIKK+C4geC4qeC4seC4leC4owor4LiB4Lip4Lix4LiV4Lij4LiyCivguIHguKnguLHguJXguKPguLTguKLguYwKK+C4geC4qeC4seC4leC4o+C4tQor4LiB4Lip4Lix4LiV4Lij4Li14Lii4LmMCivguIHguKnguLHguJXguKPguLXguKjguLnguKMKK+C4geC4qeC4seC4ogor4LiB4Lip4Lix4Lii4LiB4Liy4LijCivguIHguKnguLLguJvguJPguYwKK+C4geC4qeC4suC4ogor4LiB4Lip4Li04LiU4Li0CivguIHguKnguLTguJTguLTguJnguJfguKMKK+C4geC4qeC4tOC4lOC4tOC4meC4l+C4o+C5jAor4LiB4Lip4Li14LiT4Liy4Lio4Lij4LieCivguIHguKnguLXguJTguLQKK+C4geC4qeC4teC4owor4LiB4Lip4Li14Lij4Liy4Lih4Lie4Li4CivguIHguKnguLXguKPguLLguKPguJPguJ4KK+C4geC4qeC4uOC4mOC4sgor4LiB4Lip4Li44Lij4Li1CivguIHguKrguLLguJnguJXguLTguYwKK+C4geC4quC4tAor4LiB4Liq4Li04LiTCivguIHguKsKK+C4geC4q+C4seC4h+C4m+C4suC4ouC4sgor4LiB4Lir4Liy4Lib4LiT4LiwCivguIHguYDguKzguKfguKPguLLguIEKK+C4geC4rQor4LiB4LmI4LitCivguIHguYnguK0KK+C4geC5iuC4rQor4LiB4Lit4LiBCivguIHguYrguK3guIEKK+C4geC4reC5geC4gQor4LiB4Lit4LiHCivguIHguYjguK3guIcKK+C4geC5ieC4reC4hwor4LiB4Lit4LiH4LiB4Lit4LiiCivguIHguK3guIsKK+C4geC4reC4lAor4LiB4LmI4Lit4LiZCivguIHguYnguK3guJkKK+C4geC4reC4mgor4LiB4Lit4Lia4LiZ4Liy4LiHCivguIHguYrguK3guJrguJvguLXguYkKK+C4geC4reC4m+C4owor4LiB4LmJ4Lit4LihCivguIHguK3guKHguIHguYnguK0KK+C4geC5iOC4reC4oeC4geC5ieC4rQor4LiB4LmJ4Lit4Lih4LiB4LmJ4LitCivguIHguK3guKIKK+C4geC5ieC4reC4ogor4LiB4LmL4Lit4LiiCivguIHguK3guKPguLTguKXguKXguLIKK+C4geC4reC4peC5jOC4nwor4LiB4Lit4LmB4Lir4Lil4LiwCivguIHguK3guYDguK3guLXguYrguKLguLAKK+C4geC4sAor4LiB4Liw4LiB4Lij4LmI4Lit4LihCivguIHguLDguIHguKPguYnguLLguKcKK+C4geC4sOC4geC4peC4tOC5ieC4hwor4LiB4Liw4LiB4LmI4Lit4LiHCivguIHguLDguIHguLHguIcKK+C4geC4sOC4geC4tuC4gQor4LiB4Liw4LmA4LiB4Liy4LiwCivguIHguLDguYLguIHguKPguLAKK+C4geC4sOC4h+C5ieC4reC4meC4geC4sOC5geC4h+C5ieC4mQor4LiB4Liw4LiI4Lix4LiHCivguIHguLDguIjguLHguYrguKcKK+C4geC4sOC5geC4iOC4sAor4LiB4Liw4LiK4LiwCivguIHguLDguIrguLHguIcKK+C4geC4sOC4iuC4suC4oeC4suC4qAor4LiB4Liw4LiK4Li04LiHCivguIHguLDguIrguLbguYjguIHguIHguLDguIrguLHguYjguIEKK+C4geC4sOC5geC4iuC5iAor4LiB4Liw4LiL4Lin4LiBCivguIHguLDguIvguYnguLLguKvguK3guKIKK+C4geC4sOC4i+C4teC5iAor4LiB4Liw4LiL4Li14LmJCivguIHguLDguYLguIvguYgKK+C4geC4sOC5guC4i+C5iQor4LiB4Liw4LiU4LiBCivguIHguLDguJTguIcKK+C4geC4sOC4lOC4p+C4mQor4LiB4Liw4LiU4Lit4LiB4LmGCivguIHguLDguJTguLAKK+C4geC4sOC4lOC4seC4h+C4muC4suC4ogor4LiB4Liw4LiU4Lix4LiUCivguIHguLDguJTguYnguLLguIcKK+C4geC4sOC4lOC4s+C4geC4sOC4lOC5iOC4suC4hwor4LiB4Liw4LiU4Li1CivguIHguLDguJTguLXguYgKK+C4geC4sOC4lOC4uOC5ieC4hwor4LiB4Liw4LmA4LiU4LmJCivguIHguLDguYDguJTguIEKK+C4geC4sOC5gOC4lOC4teC5i+C4ouC4pwor4LiB4Liw4LmE4LiUCivguIHguLDguJXguKPguLjguJQKK+C4geC4sOC4leC4reC4gQor4LiB4Liw4LiV4LmI4Lit4LiiCivguIHguLDguJXguLHguIEKK+C4geC4sOC4leC4seC4hwor4LiB4Liw4LiV4Lix4LiH4LiB4Liw4LiV4Li04LmJ4LinCivguIHguLDguJXguLHguIfguYPguJoKK+C4geC4sOC4leC5iOC4sgor4LiB4Liw4LiV4LmK4Liy4LiBCivguIHguLDguJXguYnguLMKK+C4geC4sOC4leC4tOC5iuC4geC4o+C4tOC4gQor4LiB4Liw4LiV4Li04LiH4LiB4Liw4LmB4LiV4LiHCivguIHguLDguJXguLXguJoKK+C4geC4sOC4leC4tuC4h+C4geC4sOC5geC4leC4hwor4LiB4Liw4LiV4Li44LmK4LiBCivguIHguLDguJXguLjguJQKK+C4geC4sOC4leC4uOC4oeC4uQor4LiB4Liw4LiV4Li54LiBCivguIHguLDguJXguLnguYnguKfguLnguYkKK+C4geC4sOC5gOC4leC4gQor4LiB4Liw4LmA4LiV4LiH4LmGCivguIHguLDguYDguJXguIfguYDguKPguIcKK+C4geC4sOC5geC4leC4pwor4LiB4Liw4LmB4LiV4LmI4LinCivguIHguLDguYLguJXguYrguIEKK+C4geC4sOC5guC4leC4geC4geC4sOC4leC4suC4gQor4LiB4Liw4LmC4LiV4LiH4LiB4Liw4LmA4LiV4LiHCivguIHguLDguYLguJXguYnguIfguYLguKvguYjguIcKK+C4geC4sOC4luC4seC4pwor4LiB4Liw4LiX4LiB4Lij4LiBCivguIHguLDguJfguK0KK+C4geC4sOC4l+C4seC4hwor4LiB4Liw4LiX4Lix4LiU4Lij4Lix4LiUCivguIHguLDguJfguLHguJkKK+C4geC4sOC4l+C4seC4meC4q+C4seC4mQor4LiB4Liw4LiX4Lix4LiaCivguIHguLDguJfguLMKK+C4geC4sOC4l+C4tAor4LiB4Liw4LiX4Li34LitCivguIHguLDguJfguLjguJkKK+C4geC4sOC4l+C4ueC5ieC5gOC4iOC5h+C4lOC4leC4seC4pwor4LiB4Liw4LmA4LiX4LiiCivguIHguLDguYDguJfguYjguYDguKPguYgKK+C4geC4sOC5gOC4l+C4suC4sAor4LiB4Liw4LmB4LiX4LmJCivguIHguLDguYHguJfguYjguIcKK+C4geC4sOC5geC4l+C4mQor4LiB4Liw4LiZ4Lin4LilCivguIHguLDguJnguLHguJQKK+C4geC4sOC4muC4reC4hwor4LiB4Liw4Lia4Lit4LiZ4LiB4Liw4Lia4Li24LiHCivguIHguLDguJrguYjguK3guJnguIHguLDguYHguJrguYjguJkKK+C4geC4sOC4muC4seC4hwor4LiB4Liw4Lia4Lix4LmJ4LiHCivguIHguLDguJrguLHguIfguKPguLHguIfguYDguJ3guLfguK3guIEKK+C4geC4sOC4muC4tAor4LiB4Liw4Lia4Li04LmJ4LiHCivguIHguLDguJrguLTguKUKK+C4geC4sOC4muC4tuC4h+C4geC4sOC4muC4reC4mQor4LiB4Liw4Lia4Li44LiUCivguIHguLDguYDguJrguYnguK0KK+C4geC4sOC5gOC4muC4teC4ouC4mQor4LiB4Liw4LmA4Lia4Li34LitCivguIHguLDguYHguJrguIcKK+C4geC4sOC4m+C4o+C4tOC4lOC4geC4sOC4m+C4o+C4reC4ogor4LiB4Liw4Lib4Lij4Li04LiaCivguIHguLDguJvguKXguIHguIHguLDguYDguJvguKXguLXguYnguKIKK+C4geC4sOC4m+C4p+C4geC4geC4sOC5gOC4m+C4teC4ouC4gQor4LiB4Liw4Lib4Lit4LihCivguIHguLDguJvguK3guKHguILguLLguIcKK+C4geC4sOC4m+C4sAor4LiB4Liw4Lib4Lix4LmI4LiZCivguIHguLDguJvguYnguLPguIHguLDguYDguJvguYvguK0KK+C4geC4sOC4m+C4tAor4LiB4Liw4Lib4Li5CivguIHguLDguJvguLnguJQKK+C4geC4sOC4m+C4ueC4lOC4q+C4peC4ueC4lAor4LiB4Liw4LmA4Lib4LiwCivguIHguLDguYDguJvguLIKK+C4geC4sOC5gOC4m+C4tOC5iuC4muC4geC4sOC4m+C5iuC4suC4mgor4LiB4Liw4LmA4Lib4Li14Lii4LiUCivguIHguLDguYHguJvguYnguJkKK+C4geC4sOC5geC4m+C4sAor4LiB4Liw4LmC4Lib4Lij4LiHCivguIHguLDguYLguJvguYLguKUKK+C4geC4sOC4nOC4peC4tuC4geC4geC4sOC4nOC4peC4suC4oQor4LiB4Liw4Lic4Lil4Li44Lia4LiB4Liw4LmC4Lic4Lil4LmICivguIHguLDguYDguJzguYjguJkKK+C4geC4sOC5gOC4nOC4peC4gQor4LiB4Liw4LmC4Lic4Lil4LiB4LiB4Liw4LmA4Lic4Lil4LiBCivguIHguLDguJ7guIcKK+C4geC4sOC4nuC4o+C4p+C4lOC4geC4sOC4nuC4o+C4suC4lAor4LiB4Liw4Lie4Lij4LmI4Lit4LiH4LiB4Liw4LmB4Lie4Lij4LmI4LiHCivguIHguLDguJ7guKPguLTguJoKK+C4geC4sOC4nuC4o+C4uOC4mQor4LiB4Liw4Lie4Lij4Li54LiU4LiB4Liw4Lie4Lij4Liy4LiUCivguIHguLDguJ7guKXguYnguK0KK+C4geC4sOC4nuC4peC5iOC4reC4h+C4geC4sOC5geC4nuC4peC5iOC4hwor4LiB4Liw4Lie4LmJ4LitCivguIHguLDguJ7guK3guIEKK+C4geC4sOC4nuC4reC4hwor4LiB4Liw4Lie4Lix4LiHCivguIHguLDguYDguJ7guKPguLIKK+C4geC4sOC5gOC4nuC4teC4ouC4lAor4LiB4Liw4LmA4Lie4Li14Lii4LiU4LiK4LmJ4Liy4LiHCivguIHguLDguYDguJ7guLXguKLguJTguKvguJnguLkKK+C4geC4sOC4oeC4tOC4lOC4geC4sOC5gOC4oeC4teC5ieC4ouC4mQor4LiB4Liw4Lih4Li54LiV4Li04LiHCivguIHguLDguYDguKHguYfguIcKK+C4geC4sOC5gOC4oeC4teC4ogor4LiB4Liw4Lii4Liy4Lir4LiH4Lix4LiZCivguIHguLDguKLguLbguIHguIHguLDguKLguLfguK0KK+C4geC4sOC4ouC4uAor4LiB4Liw4Lij4LmI4Lit4LiH4LiB4Liw4LmB4Lij4LmI4LiHCivguIHguLDguKPguLDguJXguLAKK+C4geC4sOC4o+C4sOC4q+C4meC4sAor4LiB4Liw4Lij4Lix4LiHCivguIHguLDguKPguLHguJUKK+C4geC4sOC4o+C4suC4hwor4LiB4Liw4Lij4Li04LiHCivguIHguLDguKPguLTguIfguIHguLDguYDguKPguLXguKLguJQKK+C4geC4sOC4o+C4uOC4h+C4geC4sOC4o+C4seC4hwor4LiB4Liw4Lij4Li44LmI4LiH4LiB4Liw4Lij4Li04LmI4LiHCivguIHguLDguKPguLjguJkKK+C4geC4sOC5gOC4owor4LiB4Liw4LmA4Lij4LiB4Liw4Lij4LmI4Lit4LiZCivguIHguLDguYDguKPguYjguIHguLDguKPguYjguK3guJkKK+C4geC4sOC5gOC4o+C5iOC4rQor4LiB4Liw4LmA4Lij4Li14LmI4Lii4LiB4Liw4Lij4Liy4LiUCivguIHguLDguYLguKPguIHguLDguYDguKMKK+C4geC4sOC4peC4p+C4ogor4LiB4Liw4Lil4LitCivguIHguLDguKXguYjguK3guIHguLDguYHguKXguYgKK+C4geC4sOC4peC4reC4iOC4teC5igor4LiB4Liw4Lil4LmI4Lit4LiZCivguIHguLDguKXguYjguK3guKHguIHguLDguYHguKXguYjguKEKK+C4geC4sOC4peC5iOC4reC4ouC4geC4sOC4q+C4peC4tOC4mgor4LiB4Liw4Lil4Liw4Lib4Lix4LiH4Lir4LiyCivguIHguLDguKXguLDguKHguLHguIcKK+C4geC4sOC4peC4sOC5geC4oQor4LiB4Liw4Lil4Liw4Lit4Lit4LihCivguIHguLDguKXguLHguIfguJXguLHguIfguYTguIHguYgKK+C4geC4sOC4peC4seC4mQor4LiB4Liw4Lil4Lix4LiZ4LiX4LiyCivguIHguLDguKXguLIKK+C4geC4sOC4peC4suC4hwor4LiB4Liw4Lil4Liy4Liq4Li1CivguIHguLDguKXguLLguKvguJnguLIKK+C4geC4sOC4peC4s+C4nuC4rQor4LiB4Liw4Lil4Liz4Lie4Lix4LiBCivguIHguLDguKXguLPguYDguJ7guLLguLAKK+C4geC4sOC4peC4tOC4hwor4LiB4Liw4Lil4Li04LmJ4Lih4LiB4Liw4LmA4Lir4Lil4Li14LmI4LiiCivguIHguLDguKXguLTguK3guYjguK3guIcKK+C4geC4sOC4peC4uOC4oeC4nuC4tQor4LiB4Liw4LmA4Lil4LmH4LiHCivguIHguLDguYDguKXguYjguK3guIHguLDguKXguYjguLIKK+C4geC4sOC5gOC4peC4tOC4lAor4LiB4Liw4LmA4Lil4Li14Lii4LinCivguIHguLDguYHguKUKK+C4geC4sOC5guC4peC5iAor4LiB4Liw4LmC4Lil4LiHCivguIHguLDguKfguK3guIHguIHguLDguYHguKfguIEKK+C4geC4sOC4p+C4sAor4LiB4Liw4Liq4LmJ4Lih4LiK4Li34LmI4LiZCivguIHguLDguKrguYnguLLguKvguK3guKIKK+C4geC4sOC4q+C4meC4reC4geC4sOC5geC4q+C4mQor4LiB4Liw4Lir4LiZ4LmH4Lit4LiH4LiB4Liw4LmB4Lir4LiZ4LmH4LiHCivguIHguLDguKvguJnguLAKK+C4geC4sOC4q+C4meC4uOC4h+C4geC4sOC4q+C4meC4tOC4hwor4LiB4Liw4Lir4Lih4Lit4LiBCivguIHguLDguKvguKPguYjguK3guIcKK+C4geC4sOC4q+C4o+C4reC4lAor4LiB4Liw4Lir4Lij4LmH4Lit4Lih4LiB4Liw4LmB4Lir4Lij4LmH4LihCivguIHguLDguKvguKPguLHguJTguIHguLDguJXguLXguIHguLIKK+C4geC4sOC4q+C4o+C4seC4lOC4leC4sOC4m+C4suC4leC4tQor4LiB4Liw4Lir4Lij4LmI4Liy4LiHCivguIHguLDguKvguKPguLLguJkKK+C4geC4sOC4q+C4o+C4tOC5iOC4hwor4LiB4Liw4Lir4Lij4Li14LmICivguIHguLDguKvguKPguLXguYjguJvguLHguYrguJoKK+C4geC4sOC4q+C4peC4seC4muC4geC4sOC5gOC4q+C4peC4t+C4reC4gQor4LiB4Liw4Lir4Lil4Liy4Lib4LmL4LiyCivguIHguLDguKvguKXguYjguLMKK+C4geC4sOC4q+C4peC4teC5iAor4LiB4Liw4Lir4Lil4Li14LiB4Liw4Lir4Lil4LitCivguIHguLDguKvguKXguLjguIHguIHguLDguKvguKXguLTguIEKK+C4geC4sOC4q+C4swor4LiB4Liw4Lir4Li24LihCivguIHguLDguKvguLfguJTguIHguLDguKvguK3guJoKK+C4geC4sOC4q+C4t+C4rQor4LiB4Liw4Lir4Li54LiUCivguIHguLDguYDguKvguJnguYfguJQKK+C4geC4sOC5gOC4q+C4o+C4teC5iOC4ouC4hwor4LiB4Liw4LmA4Lir4Lil4Liy4Liw4LmA4Lib4Liy4LiwCivguIHguLDguYDguKvguKfguLXguKLguIEKK+C4geC4sOC5geC4qwor4LiB4Liw4LmB4Lir4LiZ4LmICivguIHguLDguYHguKvguJnguLAKK+C4geC4sOC5geC4q+C4ouC4gQor4LiB4Liw4LmB4Lir4LiwCivguIHguLDguYLguKvguYkKK+C4geC4sOC5guC4q+C4peC4gQor4LiB4Liw4LmC4Lir4Lil4LmJ4LiHCivguIHguLDguYTguKvguKXguYgKK+C4geC4sOC4reC4p+C4oQor4LiB4Liw4Lit4LmJ4Lit4LiB4Liw4LmB4Lit4LmJCivguIHguLDguK3guK3guKEKK+C4geC4sOC4reC5ieC4reC4oeC4geC4sOC5geC4reC5ieC4oQor4LiB4Liw4Lit4Lix4LiBCivguIHguLDguK3guLHguIHguIHguLDguYTguK0KK+C4geC4sOC4reC4suC4mQor4LiB4Liw4Lit4Liy4LihCivguIHguLDguK3guLTguJQKK+C4geC4sOC4reC4uOC4mgor4LiB4Liw4LmB4LitCivguIHguLDguYHguK3guIEKK+C4geC4sOC5geC4reC4mQor4LiB4Liw4LmB4Lit4LiaCivguIHguLDguYHguK3guKEKK+C4geC4sOC5geC4reC4pwor4LiB4Lix4LiBCivguIHguLHguYrguIEKK+C4geC4seC5ieC4geC5hgor4LiB4Lix4LiB4LiB4Lij4LiyCivguIHguLHguIHguIHguKrguLAKK+C4geC4seC4geC4geC4sAor4LiB4Lix4LiB4LiB4Liy4Lij4Li1CivguIHguLHguIHguIHguLLguKPguLgKK+C4geC4seC4geC4guC4rOC4sAor4LiB4Lix4LiB4Lip4Lix4LiZ4LiV4Lij4Lix4LiHCivguIHguLHguIcKK+C4geC4seC5ieC4hwor4LiB4Lix4LiH4LiBCivguIHguLHguYnguIfguIHguKPguLDguJTguLLguJkKK+C4geC4seC4h+C4geC5ieC4sgor4LiB4Lix4LiH4LmA4LiB4Li14Lii4LiHCivguIHguLHguIfguILguLIKK+C4geC4seC4h+C4guC4suC4p+C4tOC4leC4o+C4k+C4p+C4tOC4quC4uOC4l+C4mOC4tAor4LiB4Lix4LiH4LiE4Li4CivguIHguLHguIfguInguLTguJkKK+C4geC4seC4h+C4n+C4uQor4LiB4Lix4LiH4Lin4LilCivguIHguLHguIfguKfguLLguJkKK+C4geC4seC4h+C5gOC4p+C4teC4ouC4mQor4LiB4Lix4LiH4LiqCivguIHguLHguIfguKrguJTguLLguKUKK+C4geC4seC4h+C5hOC4qgor4LiB4Lix4LiH4Lir4Lix4LiZCivguIHguLHguIjguInguJvguLAKK+C4geC4seC4iOC4ieC4sAor4LiB4Lix4LiI4LiJ4LiyCivguIHguLHguIjguInguLgKK+C4geC4seC4iOC5guC4ieC4l+C4gQor4LiB4Lix4LiNCivguIHguLHguI3guIjguLjguIEKK+C4geC4seC4jeC4iOC4uOC4geC4suC4o+C4sgor4LiB4Lix4LiN4LiK4LiyCivguIHguLHguI3guI3guLIKK+C4geC4seC4jeC4kOC4geC4sAor4LiB4Lix4LiQCivguIHguLHguJPguI/guIHguLAKK+C4geC4seC4k+C4kOC4gQor4LiB4Lix4LiT4LiQ4Lix4LioCivguIHguLHguJPguJDguLHguKjguKfguYwKK+C4geC4seC4k+C4kOC4sgor4LiB4Lix4LiT4LiQ4Li1CivguIHguLHguJPguJHguYwKK+C4geC4seC4k+C4keC4oeC4suC4meC4p+C4gQor4LiB4Lix4LiT4LiR4Lij4LiyCivguIHguLHguJPguJHguLgKK+C4geC4seC4k+C4keC4ueC4p+C4meC4sAor4LiB4Lix4LiT4LiT4LmMCivguIHguLHguJPguKsKK+C4geC4seC4lAor4LiB4Lix4LiV4LiV4Li04LiB4Lih4Liy4LiqCivguIHguLHguJXguJXguLTguIHguLIKK+C4geC4seC4leC4leC4tOC5gOC4geC4ouC4sgor4LiB4Lix4LiV4Lij4LiX4Lix4LiT4LiR4LmMCivguIHguLHguJXguKPguLIKK+C4geC4seC4l+C4peC4tQor4LiB4Lix4LiZCivguIHguLHguYjguJkKK+C4geC4seC5ieC4mQor4LiB4Lix4LiZ4LmA4LiB4Lij4LiyCivguIHguLHguJnguYTguIHguKMKK+C4geC4seC4meC4iuC4tOC4hwor4LiB4Lix4LiZ4LmA4LiK4LitCivguIHguLHguYnguJnguIvguLnguYgKK+C4geC4seC4meC5geC4i+C4hwor4LiB4Lix4LiZ4LiU4Lit4LiHCivguIHguLHguJnguJTguLLguKMKK+C4geC4seC4meC4lOC4suC4pQor4LiB4Lix4LiZ4LmE4LiUCivguIHguLHguJnguJXguYwKK+C4geC4seC4meC4leC4seC4hwor4LiB4Lix4LiZ4LmE4LiV4LijCivguIHguLHguJnguJfguKMKK+C4geC4seC4meC4l+C4o+C4suC4geC4owor4LiB4Lix4LiZ4LiX4LiwCivguIHguLHguYnguJnguJrguLHguIcKK+C4geC4seC4meC4oOC4seC4ogor4LiB4Lix4LiZ4Lig4Li04Lij4Lih4Lii4LmMCivguIHguLHguJnguYDguKHguLXguKLguIcKK+C4geC4seC4meC4ouC5jAor4LiB4Lix4LiZ4Lii4LiyCivguIHguLHguJnguKXguIcKK+C4geC4seC4meC4peC4reC4hwor4LiB4Lix4LiZ4Lil4Li24LiHCivguIHguLHguJnguYHguKrguIcKK+C4geC4seC5ieC4meC4q+C4ouC4seC5iOC4mQor4LiB4Lix4LiZ4LmA4Lit4LiyCivguIHguLHguJoKK+C4geC4seC4muC5geC4geC5iQor4LiB4Lix4Lia4LmB4LiB4Lil4LmJ4LihCivguIHguLHguJrguJrguLjguYDguKPguKgKK+C4geC4seC4mwor4LiB4Lix4Lib4LiV4Lix4LiZCivguIHguLHguJvguJnguIEKK+C4geC4seC4m+C4muC4suC4quC4tOC4gQor4LiB4Lix4Lib4Lib4Liy4Liq4Li04LiBCivguIHguLHguJvguJvguLTguKLguLAKK+C4geC4seC4m+C4m+C4teC4ouC5jAor4LiB4Lix4Lih4Lia4LiZCivguIHguLHguKHguJvguJnguLLguIHguLLguKMKK+C4geC4seC4oeC4m+C4meC4suC4lwor4LiB4Lix4Lih4Lib4LiZ4Li1CivguIHguLHguKHguJvguKPguLDguYLguJQKK+C4geC4seC4oeC4m+C4tQor4LiB4Lix4Lih4Lie4LilCivguIHguLHguKHguJ7guLjguIoKK+C4geC4seC4oeC4nuC4uOC4iuC4nuC4suC4geC4ouC5jAor4LiB4Lix4Lih4Lie4Li5CivguIHguLHguKHguJ7guLnguIrguLIKK+C4geC4seC4oeC5guC4nuC4igor4LiB4Lix4Lih4Lih4Liq4Lix4LiX4LiY4LiyCivguIHguLHguKHguKHguLHguIrguKfguLLguJUKK+C4geC4seC4oeC4oeC4seC4j+C4kOC4suC4mQor4LiB4Lix4Lih4Lih4Lix4LiZ4LiV4Lig4Liy4Lie4Lij4Lix4LiH4Liq4Li1CivguIHguLHguKHguKHguLHguJnguJXguKPguLHguIfguKrguLUKK+C4geC4seC4oeC4oeC4seC4quC4quC4geC4leC4sgor4LiB4Lix4Lih4Lih4Liy4LijCivguIHguLHguKHguKXguLLguKgKK+C4geC4seC4ouC4p+C4tOC4geC4seC4ogor4LiB4Lix4Lil4LiK4Liy4LiNCivguIHguLHguKXguJrguIEKK+C4geC4seC4peC4m+C5jAor4LiB4Lix4Lil4Lib4LiZ4LiyCivguIHguLHguKXguJvguLHguIfguKvguLIKK+C4geC4seC4peC4m+C4suC4p+C4quC4suC4mQor4LiB4Lix4Lil4Lib4Li04LiVCivguIHguLHguKXguJ7guLjguKEKK+C4geC4seC4peC5gOC4oeC5h+C4lAor4LiB4Lix4Lil4Lii4LiyCivguIHguLHguKXguKLguLLguJPguKHguLTguJXguKMKK+C4geC4seC4peC4ouC4suC4k+C4tQor4LiB4Lix4Lil4LmA4Lin4LmJ4LiyCivguIHguLHguKXguKvguLLguKIKK+C4geC4seC4peC5guC4q+C4ogor4LiB4Lix4Lil4Lit4Lit4LihCivguIHguLHguKXguYDguK3guLIKK+C4geC4seC4qOC4oeC4pQor4LiB4Lix4Lio4Lii4LibCivguIHguLHguKnguJMKK+C4geC4sgor4LiB4LmL4LiyCivguIHguLLguIEKK+C4geC4suC4geC4hOC4leC4tAor4LiB4Liy4LiB4LiT4Li24LiBCivguIHguLLguIHguJnguLLguKrguLnguKMKK+C4geC4suC4geC4muC4suC4lwor4LiB4Liy4LiB4Lig4Liy4Lip4LiyCivguIHguLLguIHguKrguLnguKMKK+C4geC4suC4geC4sOC4l+C4tOC4hwor4LiB4Liy4LiB4Liw4LmA4Lii4Li14LiiCivguIHguLLguIHguLUKK+C4geC4suC4hwor4LiB4LmJ4Liy4LiHCivguIHguLLguIfguYDguIHguIcKK+C4geC4suC4h+C5gOC4geC4teC4ouC4hwor4LiB4Liy4LiH4LiC4Lit4LiHCivguIHguLLguIfguYDguILguJkKK+C4geC4suC4iAor4LiB4LmK4Liy4LiLCivguIHguLLguIvguLDguKXguK3guIcKK+C4geC4suC4i+C4sOC4peC4reC4h+C4hOC4swor4LiB4Liy4LiN4LiI4LiZ4LiyCivguIHguLLguJAKK+C4geC4suC4lAor4LiB4LmK4Liy4LiUCivguIHguLLguJkKK+C4geC5iOC4suC4mQor4LiB4LmJ4Liy4LiZCivguIHguYrguLLguJkKK+C4geC4suC4meC4lOC4sgor4LiB4Liy4LiZ4LiV4LmMCivguIHguLLguJnguJfguYwKK+C4geC4suC4meC4mQor4LiB4Liy4LiZ4Lie4Lil4Li5CivguIHguLLguJnguYnguLIKK+C4geC4suC4mgor4LiB4LmJ4Liy4Lia4LmGCivguIHguLLguJrguJrguLHguKcKK+C4geC4suC4muC4sAor4LiB4Liy4Lia4Li44Lij4Li44LipCivguIHguLLguJrguLkKK+C4geC4suC5gOC4m+C4teC5ieC4ouC4lAor4LiB4Liy4Lie4Lii4LmMCivguIHguLLguYDguJ/guK3guLXguJkKK+C4geC4suC5geC4nwor4LiB4Liy4LihCivguIHguYnguLLguKEKK+C4geC4suC4oeC4geC4p+C4oQor4LiB4LmJ4Liy4Lih4LiB4Li44LmJ4LiHCivguIHguLLguKHguJcKK+C4geC4suC4oeC4mQor4LiB4LmJ4Liy4Lih4Lib4Li5CivguIHguYnguLLguKHguJvguLnguKvguKXguLjguJQKK+C4geC4suC4oeC5guC4oeC4l+C4ogor4LiB4Liy4Lih4Lin4Li04LiV4LiW4Liy4LijCivguIHguLLguKHguLHguIoKK+C4geC4suC4oeC4sgor4LiB4Liy4Lih4Liy4LiX4Li14LiZ4LieCivguIHguLLguKHguLLguJ7guIjguKMKK+C4geC4suC4oeC4suC4oeC4tOC4qAor4LiB4Liy4Lih4Liy4Lij4Lih4LiT4LmMCivguIHguLLguKHguLLguKfguIjguKMKK+C4geC4suC4oeC4tOC4meC4tQor4LiB4Liy4Lih4Li04LioCivguIHguLLguYDguKHguKgKK+C4geC4suC5gOC4oeC4quC4uOC4oeC4tOC4iOC4ieC4suC4iOC4suC4owor4LiB4Liy4LiiCivguIHguYjguLLguKIKK+C4geC4suC4ouC4geC4o+C4o+C4oQor4LiB4Liy4Lii4LiE4LiV4Liy4Liq4LiV4Li0CivguIHguLLguKLguJfguKfguLLguKMKK+C4geC4suC4ouC4l+C4uOC4iOC4o+C4tOC4lQor4LiB4Liy4Lii4Lia4Lij4Li04Lir4Liy4LijCivguIHguLLguKLguJ7guLHguJnguJjguJnguYwKK+C4geC4suC4ouC4oOC4suC4ngor4LiB4Liy4Lii4Lig4Liy4Lie4Lia4Liz4Lia4Lix4LiUCivguIHguLLguKLguKfguLTguKDguLLguITguKjguLLguKrguJXguKPguYwKK+C4geC4suC4ouC4quC4tOC4l+C4mOC4tOC5jAor4LiB4Liy4Lii4Liq4Li44LiI4Lij4Li04LiVCivguIHguLLguKLguLLguJ7guKLguJ4KK+C4geC4suC4ouC4tOC4meC4l+C4o+C4teC4ouC5jAor4LiB4Liy4LmA4Lii4LiZCivguIHguLLguYDguKLguJnguJfguKPguLXguKLguYwKK+C4geC4suC4owor4LiB4Liy4Lij4LiBCivguIHguLLguKPguJPguYwKK+C4geC4suC4o+C5jOC4lAor4LiB4Liy4Lij4LiV4Li04LmA4LiB4Lii4LiwCivguIHguLLguKPguYzguJXguLnguJkKK+C4geC4suC4o+C5gOC4lQor4LiB4Liy4Lij4LmC4LiZ4LmJ4Lih4LiW4LmI4Lin4LiHCivguIHguLLguKPguJrguLnguKMKK+C4geC4suC4o+C4muC4ueC4o+C4m+C5iOC4sgor4LiB4Liy4Lij4Lii4LmMCivguIHguLLguKPguKXguLDguYDguKXguYjguJkKK+C4geC4suC4o+C4p+C4tOC4gQor4LiB4Liy4Lij4LmA4Lin4LiBCivguIHguLLguKPguLDguYDguIHguJQKK+C4geC4suC4o+C4sOC4muC4uOC4q+C4meC4tOC4hwor4LiB4Liy4Lij4Lix4LiT4LiR4Lin4LiwCivguIHguLLguKPguLHguJPguKLguYwKK+C4geC4suC4o+C4seC4meC4leC5jAor4LiB4Liy4Lij4Liy4LiH4Lir4Lix4Lin4LiC4Lin4Liy4LiZCivguIHguLLguKPguLjguI0KK+C4geC4suC4o+C4uOC4k+C4ouC5jAor4LiB4Liy4LmA4Lij4LiB4Liy4Lij4LmI4Lit4LiZCivguIHguLLguYDguKPguLXguKLguJkKK+C4geC4suC4pQor4LiB4Liy4Lil4LiB4Lij4Lij4LiT4Li1CivguIHguLLguKXguIHguLHguI3guIrguLTguIHguLLguKrguLnguKMKK+C4geC4suC4peC4geC4tOC4k+C4tQor4LiB4Liy4Lil4LiI4Lix4LiB4LijCivguIHguLLguKXguLHguI3guI3guLjguJXguLIKK+C4geC4suC4peC4seC4jeC4jeC4uQor4LiB4Liy4Lil4Lix4LiUCivguIHguLLguKXguLLguJnguLjguIHguLLguKUKK+C4geC4suC4peC4suC4oeC4quC4ueC4leC4owor4LiB4Liy4Lil4Li04LiBCivguIHguLLguKXguLUKK+C4geC4suC5geC4peC5h+C4geC4i+C4teC5iAor4LiB4Liy4LinCivguIHguYnguLLguKcKK+C4geC4suC4p+C4p+C4suC4pwor4LiB4Liy4LmB4Lin4LiZCivguIHguLLguKjguLTguIEKK+C4geC4suC4qeC4kOC4sAor4LiB4Liy4Lip4LiyCivguIHguLLguKrguKMKK+C4geC4suC4quC4sAor4LiB4Liy4Liq4LiyCivguIHguLLguKrguLLguKMKK+C4geC4suC4quC4suC4p+C4sAor4LiB4Liy4Liq4Li04LmC4LiZCivguIHguLLguKvguKUKK+C4geC4suC4q+C4peC4sgor4LiB4Liy4Lir4Lil4Li04LiaCivguIHguLLguKvguLHguIEKK+C4geC4suC5gOC4q+C4p+C5iOC4sgor4LiB4Liy4LmE4Lir4Lil4LmICivguIHguLLguKwKK+C4geC4suC4rOC4geC4ueC4jwor4LiB4Liy4Lis4Lib4Lix4LiB4Lip4LmMCivguIHguLLguKzguJvguLHguIHguKnguLUKK+C4geC4suC4rOC4nuC4pOC4geC4qeC5jAor4LiB4Liy4Lis4LmC4Lij4LiECivguIHguLLguKzguKfguLLguJUKK+C4geC4suC4rOC4suC4p+C4gQor4LiB4Liy4Liu4Lix4LiHCivguIHguLMKK+C4geC5iOC4swor4LiB4LmJ4LizCivguIHguLPguIHguKfguKEKK+C4geC4s+C4geC4seC4lAor4LiB4Liz4LiB4Lix4LiaCivguIHguYnguLPguIHguLbguYjguIcKK+C4geC4s+C4geC4ueC4mQor4LiB4LmJ4Liz4LmA4LiB4Li04LiZCivguIHguLPguYDguIHguLXguKLguIcKK+C4geC4s+C4hOC4ueC4mQor4LiB4LmI4Liz4LmA4LiE4Li34LitCivguIHguLPguIjguKMKK+C4geC4s+C4iOC4seC4lAor4LiB4Liz4LiI4Liy4LiiCivguIHguLPguIrguLHguJoKK+C4geC4s+C4iuC4swor4LiB4Liz4LmC4LiK4LiBCivguIHguLPguIvguLLguJoKK+C4geC4s+C4i+C4swor4LiB4Liz4LiU4LmJ4LiZCivguIHguLPguJTguLHguJQKK+C4geC4s+C4lOC4suC4pQor4LiB4Liz4LmA4LiU4LiyCivguIHguLPguYDguJTguLLguLAKK+C4geC4s+C4leC4suC4gQor4LiB4Liz4LiX4Lin4LiUCivguIHguLPguJfguKfguJkKK+C4geC4s+C4mOC4owor4LiB4Liz4LiZ4LilCivguIHguLPguJnguLHguJQKK+C4geC4s+C4meC4seC4mQor4LiB4Liz4LiZ4Lix4LilCivguIHguLPguYDguJnguLTguJQKK+C4geC4s+C5gOC4meC4teC4ouC4iAor4LiB4Liz4Lia4LiUCivguIHguLPguJrguJkKK+C4geC4s+C4muC4seC4hwor4LiB4Liz4Lia4Lix4LiUCivguIHguLPguJrguLTguJQKK+C4geC4s+C5gOC4muC5ieC4rQor4LiB4Liz4LmC4Lia4LilCivguIHguLPguJvguK0KK+C4geC4s+C4m+C4seC5iOC4mQor4LiB4Liz4Lib4Lix4LmJ4LiZCivguIHguLPguJzguKXguLIKK+C4geC4s+C4nuC4hwor4LiB4Liz4Lie4LiUCivguIHguLPguJ7guJUKK+C4geC4s+C4nuC4o+C5ieC4sgor4LiB4Liz4Lie4Lij4Liy4LiBCivguIHguLPguJ7guKfguJQKK+C4geC4s+C4nuC4reC4hwor4LiB4Liz4Lie4Li34LiUCivguIHguLPguJ7guLkKK+C4geC4s+C5gOC4nuC4peC4tOC4hwor4LiB4Liz4LmB4Lie4LiHCivguIHguLPguYHguJ7guYnguIcKK+C4geC4s+C4oOC4uQor4LiB4Liz4Lih4Lie4Lik4LiB4Lip4LmMCivguIHguLPguKHguKXguLLguKjguJnguYwKK+C4geC4s+C4oeC5gOC4peC4qAor4LiB4Liz4Lih4Liw4LiW4Lix4LiZCivguIHguLPguKHguLDguKXguK0KK+C4geC4s+C4oeC4sOC4q+C4ouC4teC5iAor4LiB4Liz4Lih4Liw4Lir4Lij4Li04LiUCivguIHguLPguKHguLHguIfguKXguLDguIHguLLguKMKK+C4geC4s+C4oeC4seC4h+C4p+C4tOC4peC4tOC4lQor4LiB4Liz4Lih4Lix4LiK4Lie4LilCivguIHguLPguKLguLLguJkKK+C4geC4s+C4ouC4swor4LiB4Liz4Lij4LitCivguIHguLPguKPguLLguIEKK+C4geC4s+C4o+C4suC4mgor4LiB4Liz4Lij4Liy4LilCivguIHguLPguKPguLkKK+C4geC4s+C5gOC4o+C4tOC4mgor4LiB4Liz4LmE4LijCivguIHguLPguKXguK3guIcKK+C4geC4s+C4peC4seC4hwor4LiB4Liz4Lil4Lix4LiH4LiK4LmJ4Liy4LiH4LmA4Lic4Li34Lit4LiBCivguIHguLPguKXguLHguIfguIrguYnguLLguIfguKrguLLguKMKK+C4geC4s+C4peC4seC4h+C4p+C4seC4p+C5gOC4luC4peC4tOC4hwor4LiB4Liz4Lil4Li44LiHCivguIHguLPguKXguLnguJkKK+C4geC4s+C5gOC4peC4sgor4LiB4Liz4LmA4Lil4Liy4LiwCivguIHguLPguYTguKUKK+C4geC4s+C4quC4o+C4lAor4LiB4Liz4Liq4Lij4Lin4LilCivguIHguLPguYDguKrguLLguLAKK+C4geC4s+C5geC4quC4hwor4LiB4Liz4Lir4LiZ4LiUCivguIHguLPguKvguJnguLHguJQKK+C4geC4s+C4q+C4o+C4suC4gQor4LiB4Liz4LmA4Lir4LiZ4LmH4LiICivguIHguLPguYHguKvguIcKK+C4geC4tOC4gQor4LiB4Li04LmK4LiBCivguIHguLTguYjguIcKK+C4geC4tOC5ieC4h+C4geC5iOC4sgor4LiB4Li04LmJ4LiH4LiB4Li34LitCivguIHguLTguYnguIfguYLguITguKPguIcKK+C4geC4tOC4h+C4muC4uOC4o+C4uOC4qQor4LiB4Li04LiH4Liq4Li44LiBCivguIHguLTguYjguIfguKvguLLguKIKK+C4geC4tOC4iAor4LiB4Li04LiI4LiI4LiwCivguIHguLTguIjguIjguLDguKXguLHguIHguKnguJPguLAKK+C4geC4tOC4iOC4iOC4sgor4LiB4Li04LiU4Liy4LiB4Liy4LijCivguIHguLTguJTguLLguKvguKLguLHguJkKK+C4geC4tOC4leC4leC4tAor4LiB4Li04LiV4Liy4Lir4Lij4Lix4LiHCivguIHguLTguJkKK+C4geC4tOC4meC5gOC4hOC4o+C4sgor4LiB4Li04LiZ4LiZ4LijCivguIHguLTguJnguKPguLTguJkKK+C4geC4tOC4meC4o+C4tQor4LiB4Li04LiZ4Li54LiZCivguIHguLTguYrguJoKK+C4geC4tOC4oQor4LiB4Li04Lih4LiV4Li24LmL4LiHCivguIHguLTguKHguLTguIrguLLguJXguLQKK+C4geC4tOC4oeC4tOC4p+C4tOC4l+C4ouC4sgor4LiB4Li04LmC4Lih4LmC4LiZCivguIHguLTguYLguKLguJXguLXguJkKK+C4geC4tOC4o+C4sAor4LiB4Li04Lij4Li04LiT4Li1CivguIHguLTguKPguLTguJnguJcKK+C4geC4tOC4o+C4tOC5gOC4meC4qOC4p+C4owor4LiB4Li04Lij4Li04Lii4LiyCivguIHguLTguKXguKHguLAKK+C4geC4tOC5gOC4peC4mQor4LiB4Li04LmA4Lil4LiqCivguIHguLTguYLguKUKK+C4geC4tOC5guC4peC4oeC4geC4sAor4LiB4Li04LmI4LinCivguIHguLTguYvguKcKK+C4geC4teC5iAor4LiB4Li14LmJCivguIHguLXguYsKK+C4geC4teC4jwor4LiB4Li14LiUCivguIHguLXguJXguLLguKPguYwKK+C4geC4teC4mgor4LiB4Li14Lij4LiV4Li0CivguIHguLXguKfguLUKK+C4geC4teC4rOC4sgor4LiB4Li24LiBCivguIHguLbguIHguJbguK3guIcKK+C4geC4tuC4hwor4LiB4Li24LmI4LiHCivguIHguLbguYvguJkKK+C4geC4uAor4LiB4Li44LiBCivguIHguLjguYrguIEKK+C4geC4uOC4geC5huC4geC4seC4geC5hgor4LiB4Li44LmK4LiB4LmG4LiB4Li04LmK4LiB4LmGCivguIHguLjguIHguIHguLHguIEKK+C4geC4uOC5iuC4geC4geC4tOC5iuC4gQor4LiB4Li44LiB4LiB4Li44LiPCivguIHguLjguIHguIHguLjguKMKK+C4geC4uOC4geC4guC4teC5ieC4q+C4oeC4uQor4LiB4Li44LiB4Lij4Lij4LihCivguIHguLjguIHguYjguK3guIcKK+C4geC4uOC4geC4sAor4LiB4Li44LiB4Li44LiY4Lig4Lix4LiT4LiR4LmMCivguIHguLjguYnguIcKK+C4geC4uOC5ieC4h+C5gOC4leC5ieC4mQor4LiB4Li44LmJ4LiH4Lii4Li04LiHCivguIHguLjguIfguK3guJkKK+C4geC4uOC4h+C4suC4mQor4LiB4Li44LmC4LiH4LiBCivguIHguLjguIjguLUKK+C4geC4uOC4jeC5geC4iAor4LiB4Li44LiN4LiK4LijCivguIHguLjguI4KK+C4geC4uOC4juC4sgor4LiB4Li44LiO4Liy4LiY4Liy4LijCivguIHguLjguI7guLUKK+C4geC4uOC4j+C4kOC4seC4hwor4LiB4Li44LiP4Li0CivguIHguLjguJPguJHguYwKK+C4geC4uOC4k+C4keC4pQor4LiB4Li44LiT4LiR4Li04LiZCivguIHguLjguJPguJHguLUKK+C4geC4uOC4k+C5guC4kQor4LiB4Li44LiT4Liy4LilCivguIHguLjguJPguLQKK+C4geC4uOC4k+C4tQor4LiB4Li44LiUCivguIHguLjguJTguLHguIcKK+C4geC4uOC4lOC4seC5iOC4mQor4LiB4Li44LiU4LiyCivguIHguLjguJfguLHguJPguJHguYwKK+C4geC4uOC4mQor4LiB4Li44LmK4LiZCivguIHguLjguJnguYDguIrguLXguKLguIcKK+C4geC4uOC4meC4i+C4t+C4rQor4LiB4Li44LiZ4LiX4Li1CivguIHguLjguYLguJnguIHguLLguKHguK0KK+C4geC4uOC4mgor4LiB4Li44Lia4LiB4Lix4LiaCivguIHguLjguKEKK+C4geC4uOC5iOC4oQor4LiB4Li44Lih4Lid4Lit4LiiCivguIHguLjguKHguKDguYwKK+C4geC4uOC4oeC4oOC4meC4tOC4ouC4sgor4LiB4Li44Lih4Lig4Lix4LiT4LiR4LmMCivguIHguLjguKHguKDguLIKK+C4geC4uOC4oeC4oOC4tOC4pQor4LiB4Li44Lih4Lig4Li14Lil4LmMCivguIHguLjguKHguKHguLLguKoKK+C4geC4uOC4oeC5gOC4q+C4hwor4LiB4Li44Lih4Liy4LijCivguIHguLjguKHguLLguKPguKXguKzguLTguJXguLIKK+C4geC4uOC4oeC4suC4o+C4sgor4LiB4Li44Lih4Liy4Lij4Li04LiB4LiyCivguIHguLjguKHguLLguKPguLUKK+C4geC4uOC4oeC4uOC4lwor4LiB4Li44LiiCivguIHguLjguYrguKIKK+C4geC4uOC5i+C4ogor4LiB4Li44LmL4Lii4LmGCivguIHguLjguKLguIrguYjguLLguKIKK+C4geC4uOC5iOC4ouC4q+C4peC4uOC5iOC4ouC4quC5ieC4oQor4LiB4Li44Lii4LmA4Liu4LiHCivguIHguLjguKPguKMKK+C4geC4uOC4o+C4sAor4LiB4Li44Lij4Li44LmA4LiB4Lip4LiV4LijCivguIHguLjguKPguLjguIcKK+C4geC4uOC4o+C4uOC4nuC4tOC4meC4l+C5jAor4LiB4Li44Lij4Li44LijCivguIHguLjguYDguKPguLIKK+C4geC4uOC4pQor4LiB4Li44Lil4LiB4Lix4Lil4Lii4LiyCivguIHguLjguKXguIHguLnguJPguLUKK+C4geC4uOC4peC4hOC4uOC4o+C4uAor4LiB4Li44Lil4LiK4LiZCivguIHguLjguKXguIrguLLguJUKK+C4geC4uOC4peC4lOC4tOC4peC4gQor4LiB4Li44Lil4LiX4Li54Liq4LiBCivguIHguLjguKXguJjguKPguKPguKEKK+C4geC4uOC4peC4mOC4tOC4lOC4sgor4LiB4Li44Lil4LiZ4Liy4LiECivguIHguLjguKXguJnguLLguKPguLUKK+C4geC4uOC4peC4meC4suC4qAor4LiB4Li44Lil4Lia4LiU4Li1CivguIHguLjguKXguJrguLjguJXguKMKK+C4geC4uOC4peC4muC4uOC4o+C4uOC4qQor4LiB4Li44Lil4Lie4LiY4Li5CivguIHguLjguKXguKHguLHguIjguInguKPguLTguKLguLAKK+C4geC4uOC4peC4oeC4tOC4leC4owor4LiB4Li44Lil4Lin4Liy4LijCivguIHguLjguKXguYDguKfguJfguLTguJXguLIKK+C4geC4uOC4peC4quC4leC4o+C4tQor4LiB4Li44Lil4Liq4Lix4Lih4Lie4Lix4LiZ4LiY4LmMCivguIHguLjguKXguLIKK+C4geC4uOC4peC4suC4q+C4pQor4LiB4Li44Lil4Li1CivguIHguLjguKXguLXguIHguLjguIjguK0KK+C4geC4uOC4peC4uOC4m+C4geC4suC4iOC4suC4o+C4ouC5jAor4LiB4Li44LmA4Lil4LiyCivguIHguLjguYHguKUKK+C4geC4uOC5hOC4pQor4LiB4Li44Lin4LiwCivguIHguLjguYDguKfguKMKK+C4geC4uOC4qOC4o+C4suC4igor4LiB4Li44Lio4LilCivguIHguLjguKjguYLguKXguJrguLLguKIKK+C4geC4uOC4quC4pQor4LiB4Li44Liq4LiwCivguIHguLjguKrguLjguKEKK+C4geC4uOC4quC4uOC4oeC4oOC5jAor4LiB4Li44Liq4Li44Lih4LiyCivguIHguLjguKrguLjguKHguLLguKXguKLguYwKK+C4geC4uOC4quC4uOC4oeC4tOC4leC4peC4lOC4suC5gOC4p+C4peC4peC4tOC4leC4sgor4LiB4Li44Lir4LiBCivguIHguLjguKvguJnguLUKK+C4geC4uOC4q+C4meC4uOC4hwor4LiB4Li44Lir4Lij4LmI4LiyCivguIHguLjguKvguKXguYjguLIKK+C4geC4uOC4q+C4peC4suC4mgor4LiB4Li44LmB4Lir4Lil4LiwCivguIHguLkKK+C4geC4ueC5iAor4LiB4Li54LmJCivguIHguLnguYrguIEKK+C4geC4ueC4jwor4LiB4Li54LiP4LiyCivguIHguLnguYLguI/guJrguLLguKIKK+C4geC4ueC4k+C4keC5jAor4LiB4Li54LiUCivguIHguLnguJkKK+C4geC4ueC4mgor4LiB4Li54Lib4Lij4Li1CivguIHguLnguKPguKHguLAKK+C4geC4ueC4o+C4oeC4suC4p+C4leC4suC4owor4LiB4Li54Lij4LizCivguYDguIEKK+C5gOC4geC5iAor4LmA4LiB4LmKCivguYDguIHguYsKK+C5gOC4geC5ieC5huC4geC4seC4h+C5hgor4LmA4LiB4LiBCivguYDguIHguYrguIEKK+C5gOC4geC4geC4oeC4sOC5gOC4q+C4o+C4gQor4LmA4LiB4LmK4LiB4Liu4Lin4LiiCivguYDguIHguYnguIHguLHguIcKK+C5gOC4geC5h+C4hwor4LmA4LiB4LmI4LiHCivguYDguIHguYnguIcKK+C5gOC4geC5i+C4hwor4LmA4LiB4LiH4LiB4Lit4LiiCivguYDguIHguYnguIfguIHguYnguLLguIcKK+C5gOC4geC4h+C5gOC4guC4hwor4LmA4LiB4LmL4LiH4LmA4LiE4LiHCivguYDguIHguYfguIgKK+C5gOC4geC4iOC4tOC4reC4suC4iOC4suC4o+C4ouC5jAor4LmA4LiB4LiK4LiyCivguYDguIHguJPguJHguYwKK+C5gOC4geC4k+C4keC5jOC4leC4sOC4nuC4seC4lAor4LmA4LiB4LiUCivguYDguIHguYfguJQKK+C5gOC4geC4leC4uAor4LmA4LiB4LiZCivguYDguIHguYjguJkKK+C5gOC4geC4meC5hgor4LmA4LiB4LmH4LiaCivguYDguIHguKEKK+C5gOC4geC4ogor4LmA4LiB4Lii4LmMCivguYDguIHguKLguLnguKMKK+C5gOC4geC4o+C4hwor4LmA4LiB4Lij4LmH4LiHCivguYDguIHguKPguJQKK+C5gOC4geC4o+C5h+C4lAor4LmA4LiB4Lij4LiZCivguYDguIHguKPguYjguK0KK+C5gOC4geC4o+C4reC4sAor4LmA4LiB4Lij4Liy4LiwCivguYDguIHguKPguLLguLDguYDguJ7guIrguKPguYTguJ7guJHguLnguKPguKLguYwKK+C5gOC4geC4o+C4tOC4gQor4LmA4LiB4Lij4Li04LiZCivguYDguIHguKPguLTguYjguJkKK+C5gOC4geC4o+C4teC4ouC4gQor4LmA4LiB4Lij4Li14Lii4LiHCivguYDguIHguKPguLXguKLguJQKK+C5gOC4geC4o+C4teC4ouC4mQor4LmA4LiB4Lij4Li14Lii4LiaCivguYDguIHguKPguLXguKLguKEKK+C5gOC4geC4o+C4teC4ouC4oeC4geC4o+C4oQor4LmA4LiB4Lij4Li14Lii4LinCivguYDguIHguKPguLXguYnguKLguKcKK+C5gOC4geC4o+C4teC5ieC4ouC4p+C5hgor4LmA4LiB4LmA4LijCivguYDguIHguKXguYfguJQKK+C5gOC4geC4peC4qAor4LmA4LiB4Lil4LitCivguYDguIHguKXguLIKK+C5gOC4geC4peC5ieC4sgor4LmA4LiB4Lil4Liy4LiwCivguYDguIHguKXguLXguYjguKIKK+C5gOC4geC4peC4teC5ieC4ogor4LmA4LiB4Lil4Li14Lii4LiHCivguYDguIHguKXguLXguYnguKLguIcKK+C5gOC4geC4peC4teC4ouC4lAor4LmA4LiB4Lil4Li14Lii4LinCivguYDguIHguKXguLXguYjguKLguKfguJTguLMKK+C5gOC4geC4peC4t+C4rQor4LmA4LiB4Lil4Li34LmJ4LitCivguYDguIHguKXguLfguK3guIEKK+C5gOC4geC4peC4t+C5iOC4reC4mQor4LmA4LiB4Lil4Li34LmJ4Lit4LiZCivguYDguIHguYTguKUKK+C5gOC4geC4p+C4pQor4LmA4LiB4Lin4Lil4Liy4LiX4Li1CivguYDguIHguKfguKXguLTguJkKK+C5gOC4geC4p+C4peC4tQor4LmA4LiB4Lin4Lix4LiPCivguYDguIHguKfguLXguKLguJkKK+C5gOC4geC4qAor4LmA4LiB4Lio4LieCivguYDguIHguKjguKcKK+C5gOC4geC4qOC4sgor4LmA4LiB4Lio4Li04LiZ4Li1CivguYDguIHguKjguLUKK+C5gOC4geC4qeC4leC4owor4LmA4LiB4Lip4LiV4Lij4LiB4LijCivguYDguIHguKnguJXguKPguIHguKPguKPguKEKK+C5gOC4geC4qeC4leC4o+C4muC4lOC4tQor4LmA4LiB4Lip4LiV4Lij4Lio4Liy4Liq4LiV4Lij4LmMCivguYDguIHguKnguKEKK+C5gOC4geC4qeC4teC4ouC4kwor4LmA4LiB4Lip4Li14Lii4LiZCivguYDguIHguKnguLXguKLguKMKK+C5gOC4geC4qgor4LmA4LiB4Liq4LiV4Liy4LmC4LibCivguYDguIHguKrguKMKK+C5gOC4geC4quC4o+C4tQor4LmA4LiB4Liq4LiyCivguYDguIHguKrguLUKK+C5gOC4geC5iOC4q+C4peC4tQor4LmA4LiB4LmJ4LitCivguYDguIHguK3guLTguIrguLIKK+C5gOC4geC4sAor4LmA4LiB4Liw4LiB4LiwCivguYDguIHguLIKK+C5gOC4geC5iOC4sgor4LmA4LiB4LmJ4LiyCivguYDguIHguYvguLIKK+C5gOC4geC4suC4leC5jAor4LmA4LiB4Liy4LiX4Lix4LiT4LiR4LmMCivguYDguIHguLLguJfguLjguKHguJ7guKMKK+C5gOC4geC4suC4muC4tOC4mQor4LmA4LiB4Liy4Lia4Li04LilCivguYDguIHguLLguKHguLLguKMKK+C5gOC4geC4suC4peC4seC4lAor4LmA4LiB4Liy4Lil4Li04LiZCivguYDguIHguLLguKjguLHguKXguKLguYwKK+C5gOC4geC4suC5hOC4qOC4ogor4LmA4LiB4Liy4LmA4Lir4Lil4LiyCivguYDguIHguLLguYDguKvguKXguLXguKLguIcKK+C5gOC4geC5ieC4suC4reC4teC5iQor4LmA4LiB4Liy4LiwCivguYDguIHguLLguLDguYHguIHguLAKK+C5gOC4geC4tOC4hwor4LmA4LiB4Li04LmJ4LiHCivguYDguIHguLTguJQKK+C5gOC4geC4tOC4mQor4LmA4LiB4Li04LiaCivguYDguIHguLXguKIKK+C5gOC4geC4teC4ouC4geC4geC4suC4ogor4LmA4LiB4Li14Lii4LiHCivguYDguIHguLXguYjguKLguIcKK+C5gOC4geC4teC5i+C4ouC4hwor4LmA4LiB4Li14Lii4LiICivguYDguIHguLXguKLguJQKK+C5gOC4geC4teC4ouC4mQor4LmA4LiB4Li14LmJ4Lii4Lih4LmE4LiJ4LmICivguYDguIHguLXguYnguKLguKHguK3guLXguYsKK+C5gOC4geC4teC4ouC4o+C4leC4tAor4LmA4LiB4Li14Lii4Lij4LiV4Li04LmMCivguYDguIHguLXguYjguKLguKcKK+C5gOC4geC4teC5ieC4ouC4pwor4LmA4LiB4Li14LmK4Lii4LinCivguYDguIHguLXguYrguKLguLAKK+C5gOC4geC4t+C5ieC4rQor4LmA4LiB4Li34Lit4LiBCivguYDguIHguLfguYnguK3guIHguLnguKUKK+C5gOC4geC4t+C4reC4mgor4LmB4LiBCivguYHguIHguYgKK+C5geC4geC5iQor4LmB4LiB4LiHCivguYHguIHguYjguIcKK+C5geC4geC5ieC4hwor4LmB4LiB4LmK4LiHCivguYHguIHguIfguILguKEKK+C5geC4geC4h+C5hOC4lAor4LmB4LiB4LiH4LmB4LiZ4LiHCivguYHguIHguYjguIfguYHguKLguYjguIcKK+C5geC4geC5guC4lOC4peC4tOC5gOC4meC4teC4ouC4oQor4LmB4LiB4LiZCivguYHguIHguYjguJkKK+C5geC4geC4meC4sAor4LmB4LiB4LmB4LiZCivguYHguIHguYrguJsKK+C5geC4geC4oQor4LmB4LiB4LmJ4LihCivguYHguIHguKHguKHguLIKK+C5geC4geC4o+C4gQor4LmB4LiB4Lij4LmI4LiHCivguYHguIHguKPguYfguJkKK+C5geC4geC4o+C4meC4tOC4lQor4LmB4LiB4Lij4LmE4Lif4LiV4LmMCivguYHguIHguKPguYjguKcKK+C5geC4geC4o+C4sAor4LmB4LiB4LilCivguYHguIHguKXguYgKK+C5geC4geC4peC5ieC4hwor4LmB4LiB4Lil4LiZCivguYHguIHguKXguJoKK+C5geC4geC4peC5ieC4oQor4LmB4LiB4Lil4Lil4Lit4LiZCivguYHguIHguKXguYDguKXguLXguKLguKEKK+C5geC4geC4peC5ieC4pwor4LmB4LiB4Lil4LiwCivguYHguIHguYHguKUKK+C5geC4geC4pwor4LmB4LiB4LmJ4LinCivguYHguIHguKfguYjguIcKK+C5geC4geC4p+C5iOC4mQor4LmB4LiB4LmH4LiqCivguYHguIHguYrguKoKK+C5geC4geC4sAor4LmC4LiBCivguYLguIHguYgKK+C5guC4geC5iQor4LmC4LiB4LmLCivguYLguIHguIEKK+C5guC4geC4geC4meC4uOC4lwor4LmC4LiB4LiB4Li04LilCivguYLguIHguIHguLTguKXguLIKK+C5guC4geC5guC4geC5iQor4LmC4LiB4LiHCivguYLguIHguYjguIcKK+C5guC4geC4h+C4geC4suC4hwor4LmC4LiB4LmJ4LiH4LmA4LiB4LmJ4LiHCivguYLguIHguIfguYLguIHguYkKK+C5guC4geC5ieC4h+C5guC4hOC5ieC4hwor4LmC4LiB4LmA4LiK4Liy4Lin4LmMCivguYLguIHguI3guIjguJkKK+C5guC4geC4jeC4iOC4sgor4LmC4LiB4LiP4Li0CivguYLguIHguJAKK+C5guC4geC4kOC4suC4qgor4LmC4LiB4LiTCivguYLguIHguJPguIEKK+C5guC4geC4k+C4keC4seC4jeC4jeC4sAor4LmC4LiB4LiU4Lix4LiHCivguYLguIHguJXguYTguJUKK+C5guC4geC4l+C4seC4k+C4keC5jAor4LmC4LiB4LiZCivguYLguIHguYjguJkKK+C5guC4geC5i+C4mQor4LmC4LiB4LiZ4Liy4LiE4Lih4LiZ4LmMCivguYLguIHguYLguJnguYDguKPguLXguKIKK+C5guC4geC4m+C4tOC4meC4swor4LmC4LiB4Lih4LilCivguYLguIHguKHguLLguKPguKDguLHguIjguIjguYwKK+C5guC4geC4oeC4uOC4lwor4LmC4LiB4LmA4Lih4LiZCivguYLguIHguYDguKHguKgKK+C5guC4geC4ogor4LmC4LiB4Lij4LmJCivguYLguIHguKPguIEKK+C5guC4geC4o+C4geC4geC4o+C4suC4gQor4LmC4LiB4Lij4LiHCivguYLguIHguKPguYjguIcKK+C5guC4geC4o+C5iOC4h+C4geC4o+C5iOC4suC4hwor4LmC4LiB4Lij4LiH4LmA4LiB4Lij4LiHCivguYLguIHguKPguYvguIfguYDguIHguKPguYvguIcKK+C5guC4geC4o+C4jeC4iAor4LmC4LiB4Lij4LiUCivguYLguIHguKPguJXguYvguJkKK+C5guC4geC4o+C4mAor4LmC4LiB4Lij4LiY4LiyCivguYLguIHguKPguYvguJkKK+C5guC4geC4o+C4oQor4LmC4LiB4Lij4LiiCivguYLguIHguKPguKgKK+C5guC4geC5guC4o+C5guC4geC5gOC4lQor4LmC4LiB4LmC4Lij4LmC4LiB4LmC4Lij4LiBCivguYLguIHguYLguKPguYLguIHguYLguKoKK+C5guC4geC4peC4hwor4LmC4LiB4Lil4LiZCivguYLguIHguKXguLLguKvguKUKK+C5guC4geC5hOC4pQor4LmC4LiB4Lin4Li04LiXCivguYLguIHguKfguLTguKzguLLguKMKK+C5guC4geC4qAor4LmC4LiB4Lio4LilCivguYLguIHguKkKK+C5guC4geC4qeC4oQor4LmC4LiB4Lip4LiiCivguYLguIHguKoKK+C5guC4geC4quC4mQor4LmC4LiB4Liq4Lix4LiKCivguYLguIHguKrguLTguJnguJfguKPguYwKK+C5guC4geC4quC4teC4ouC5jAor4LmC4LiB4Liq4Li44LihCivguYLguIHguYTguKrguKIKK+C5guC4geC4q+C4gQor4LmC4LiB4Lir4Lin4LiyCivguYLguIHguKvguLHguI0KK+C5g+C4geC4peC5iQor4LmE4LiBCivguYTguIHguYgKK+C5hOC4geC5iQor4LmE4LiB4LmKCivguYTguIHguYsKK+C5hOC4geC5iOC4geC4reC4oQor4LmE4LiB4LmL4LmB4LiU4LiHCivguYTguIHguYjguYDguJXguLXguYnguKIKK+C5hOC4geC5iOC4meC4sgor4LmE4LiB4LmI4Lie4Lix4LilCivguYTguIHguYjguJ/guYnguLIKK+C5hOC4geC4owor4LmE4LiB4Lij4LieCivguYTguIHguKPguKXguLLguKoKK+C5hOC4geC4o+C4qOC4owor4LmE4LiB4Lij4Lio4Lij4Li1CivguYTguIHguKPguKrguKMKK+C5hOC4geC4o+C4quC4tOC4l+C4mOC4tAor4LmE4LiB4LilCivguYTguIHguKXguYgKK+C5hOC4geC4peC4suC4qgor4LmE4LiB4LinCivguYTguIHguKfguLHguKUKK+C5hOC4geC5iOC5hOC4q+C5iQor4LiCCivguILguITguLAKK+C4guC4hOC4suC4mOC4tOC4mwor4LiC4LiE4Liy4Lig4Li04Lij4Liy4LihCivguILguITguLLguKrguJnguLAKK+C4guC5gOC4hOC4qOC4p+C4owor4LiC4LiHCivguILguIfguIjguLfguYrguK0KK+C4guC4iOC4owor4LiC4LiI4Lit4LiBCivguILguIjguLHguJQKK+C4guC4iOC5iOC4suC4hwor4LiC4LiI4Liy4LiiCivguILguIjguLLguKcKK+C4guC4iOC4tOC4lQor4LiC4LiI4Li04Lij4Li04LiUCivguILguIjguLUKK+C4guC4iOC4uOC4ogor4LiC4LmA4LiI4LiyCivguILguJPguLAKK+C4guC4k+C4sOC4iOC4tOC4lQor4LiC4LiT4Li04LiBCivguILguJPguLTguIHguKrguKHguLLguJjguLQKK+C4guC4lAor4LiC4LiU4Liy4LiZCivguILguJXguK3guKIKK+C4guC4l+C4tOC4hwor4LiC4LiX4Li24LiHCivguILguJkKK+C4guC5ieC4mQor4LiC4LiZ4LiHCivguILguJnguIfguYDguJnguLfguYnguK0KK+C4guC4meC4lAor4LiC4LiZ4LiZCivguILguJnguJoKK+C4guC4meC4oQor4LiC4LiZ4Lih4LiI4Li14LiZCivguILguJnguKHguYDguJrguLfguYnguK3guIfguI3guKfguJkKK+C4guC4meC4oeC4m+C4seC4hwor4LiC4LiZ4Lih4Lic4Liq4Lih4LiZ4LmJ4Liz4Lii4LiyCivguILguJnguKHguJzguLHguIHguIHguLLguJQKK+C4guC4meC4oeC5gOC4quC5ieC4mQor4LiC4LiZ4Lih4Lir4Lix4Lin4Lic4Lix4LiB4LiB4Liy4LiUCivguILguJnguK3guIcKK+C4guC4meC4reC4mQor4LiC4LiZ4Lit4LiaCivguILguJnguLHguJQKK+C4guC4meC4seC4mQor4LiC4LiZ4Liy4LiBCivguILguJnguLLguIcKK+C4guC4meC4suC4lAor4LiC4LiZ4Liy4LiZCivguILguJnguLLguJoKK+C4guC4meC4suC4ogor4LiC4LiZ4LizCivguILguJnguLTguKnguJAKK+C4guC4meC4tOC4qeC4kOC4sgor4LiC4LiZ4Li44LiZCivguILguJoKK+C4guC4muC4guC4seC4mQor4LiC4Lia4LiWCivguILguJrguKfguJkKK+C4guC4muC4p+C4owor4LiC4Lia4Li54LijCivguILguKEKK+C4guC5iOC4oQor4LiC4Lih4LiH4LmC4LiB4Lij4LiiCivguILguKHguKEKK+C4guC4oeC4p+C4lAor4LiC4Lih4Lin4LiU4Lii4LiyCivguILguKHguKfguJkKK+C4guC4oeC4q+C4tOC4mQor4LiC4Lih4Lit4LiHCivguILguKHguYjguK3guKEKK+C4guC4oeC4reC4ogor4LiC4Lih4Lix4LiB4LmA4LiC4Lih4LmJ4LiZCivguILguKHguLHguIcKK+C4guC4oeC4seC4mgor4LiC4Lih4LiyCivguILguKHguYnguLMKK+C4guC4oeC4tOC5ieC4mQor4LiC4Lih4Li04LiaCivguILguKHguLXguILguKHguLHguJkKK+C4guC4oeC4tuC4hwor4LiC4Lih4Li4CivguILguKHguLjguIHguILguKHguK3guKEKK+C4guC4oeC4uOC4geC4guC4oeC4seC4pwor4LiC4Lih4Li44LiU4LiC4Lih4Li04LiUCivguILguKHguLjguJoKK+C4guC4oeC4uOC4oQor4LiC4LmC4Lih4LiiCivguILguKLguJQKK+C4guC4ouC4oQor4LiC4Lii4LmI4LihCivguILguKLguKUKK+C4guC4ouC4reC4gQor4LiC4Lii4Lit4LiHCivguILguKLguYjguK3guJkKK+C4guC4ouC5ieC4reC4mQor4LiC4Lii4LiwCivguILguKLguLDguYHguILguKLguIcKK+C4guC4ouC4seC4gQor4LiC4Lii4Lix4LiZCivguILguKLguLHguYnguJkKK+C4guC4ouC4seC4mgor4LiC4Lii4Liy4LiUCivguILguKLguLLguJoKK+C4guC4ouC4suC4ogor4LiC4Lii4LizCivguILguKLguYnguLMKK+C4guC4ouC4tOC4gQor4LiC4Lii4Li04LiaCivguILguKLguLTguYjguKEKK+C4guC4ouC4teC5iQor4LiC4Lii4Li14LmI4LiC4Lii4Lix4LiZCivguILguKLguLjguIHguILguKLguLTguIEKK+C4guC4ouC4uOC4geC4guC4ouC4uOC4ogor4LiC4Lii4Li44LiaCivguILguKLguLjguKEKK+C4guC4ouC4uOC5ieC4oQor4LiC4Lii4Li44LmJ4Lih4LiV4Li14LiZ4Lir4Lih4LiyCivguILguKLguLjguKIKK+C4guC4o+C4oQor4LiC4Lij4Lij4LiE4LmMCivguILguKPguLHguKcKK+C4guC4o+C4tOC4mgor4LiC4Lij4Li1CivguILguKPguLbguKEKK+C4guC4o+C4uOC4guC4o+C4sAor4LiC4Lil4LmJ4LiHCivguILguKXguJoKK+C4guC4peC4oQor4LiC4Lil4Lin4LiZCivguILguKXguYnguK0KK+C4guC4peC4seC4hwor4LiC4Lil4Lix4LiaCivguILguKXguLIKK+C4guC4peC4suC4lAor4LiC4Lil4Liy4LiiCivguILguKXguLTguJoKK+C4guC4peC4tOC4muC4l+C4reC4hwor4LiC4Lil4Li24LiHCivguILguKXguLjguIEKK+C4guC4peC4uOC4mgor4LiC4Lil4Li44LihCivguILguKXguLjguKHguJvguKPguLDguYDguIjguLXguKLguJQKK+C4guC4peC4uOC5iOC4ogor4LiC4Lil4Li5CivguILguKXguLnguYgKK+C4guC4p+C4hwor4LiC4LmI4Lin4LiHCivguILguKfguJQKK+C4guC4p+C4mQor4LiC4LmI4Lin4LiZCivguILguKfguJoKK+C4guC4p+C4ogor4LiC4Lin4Liw4LmE4LiC4Lin4LmI4LmA4LiC4Lin4Li14LmI4LiiCivguILguKfguLHguIHguYTguILguKfguYgKK+C4guC4p+C4seC4jQor4LiC4Lin4Lix4LiN4LmA4Lih4Li34Lit4LiHCivguILguKfguLHguI3guK3guYjguK3guJkKK+C4guC4p+C4seC4lAor4LiC4Lin4Lix4LiU4LiC4Lin4Li04LiUCivguILguKfguLHguJTguYHguITguKfguYnguIcKK+C4guC4p+C4seC5ieC4mQor4LiC4Lin4Lix4LiaCivguILguKfguLIKK+C4guC4p+C4suC4gQor4LiC4Lin4Liy4LiHCivguILguKfguYnguLLguIcKK+C4guC4p+C4suC4lAor4LiC4Lin4Liy4LiZCivguILguKfguLLguKLguILguKfguJkKK+C4guC4p+C4suC4pwor4LiC4Lin4LmJ4Liy4LinCivguILguKfguLTguJQKK+C4guC4qeC4k+C4sAor4LiC4Lip4Lix4LiiCivguILguKnguLXguJPguLLguKjguKPguJ4KK+C4guC4qeC4teC4owor4LiC4LitCivguILguYjguK0KK+C4guC5ieC4rQor4LiC4Lit4LiBCivguILguK3guIcKK+C4guC5ieC4reC4hwor4LiC4Lit4LiH4Lij4Liw4Lit4LiyCivguILguK3guInguLLguKIKK+C4guC4reC4lAor4LiC4Lit4LiZCivguILguYjguK3guJkKK+C4guC5ieC4reC4mQor4LiC4Lit4LiaCivguILguK3guJrguILguYjguLLguKIKK+C4guC4reC4muC5gOC4guC4lQor4LiC4Lit4Lia4LiE4Li44LiTCivguILguK3guJrguYPguIgKK+C4guC4reC4muC4nuC4o+C4sOC4hOC4uOC4kwor4LiC4Lit4Lia4LmA4Lir4Lil4LmH4LiBCivguILguK3guKEKK+C4guC5iOC4reC4ogor4LiC4LmJ4Lit4LiiCivguILguLDguILguLMKK+C4guC4sOC5geC4guC5iOC4mQor4LiC4Liw4LmB4LiC4LmJ4LiZCivguILguLDguYHguIjguLAKK+C4guC4sOC5geC4luC4gQor4LiC4Liw4LiZ4Liy4LiZCivguILguLDguYDguJnguYfguJQKK+C4guC4sOC4oeC4reC4oeC4guC4sOC5geC4oeC4oQor4LiC4Liw4LmB4Lih4LiL4LitCivguILguLDguYHguKHguJjguKEKK+C4guC4sOC4ouC4tOC4gQor4LiC4Liw4Lii4Li44LiBCivguILguLDguYDguKLguYnguK3guYHguILguKLguYjguIcKK+C4guC4sOC5geC4ouC4sAor4LiC4Lix4LiECivguILguLHguIcKK+C4guC4seC4h+C4guC4reC4gQor4LiC4Lix4LiKCivguILguLHguIrguIEKK+C4guC4seC4k+C4keC4quC4geC4owor4LiC4Lix4LiUCivguILguLHguJTguKHguK3guJkKK+C4guC4seC4mQor4LiC4Lix4LmJ4LiZCivguILguLHguJnguYHguILguYfguIcKK+C4guC4seC4meC4leC4tAor4LiC4Lix4LiZ4LiV4Li1CivguILguLHguJnguYLguJXguIEKK+C4guC4seC4meC4l+C4reC4h+C4nuC4ouC4suC4muC4suC4lwor4LiC4Lix4LiZ4LiX4Li1CivguILguLHguJnguJjguYwKK+C4guC4seC4meC4mOC4geC4uOC4oeC4suC4owor4LiC4Lix4LiZ4LiY4Liq4Lix4LiZ4LiU4Liy4LiZCivguILguLHguJnguJjguLLguKfguLLguKMKK+C4guC4seC4meC4q+C4oeC4suC4gQor4LiC4Lix4LiaCivguILguLHguKIKK+C4guC4seC4pwor4LiC4Lix4LmJ4LinCivguILguLIKK+C4guC5iOC4sgor4LiC4LmJ4LiyCivguILguLLguIEKK+C4guC4suC4geC5iuC4p+C4ogor4LiC4Liy4LmA4LiB4Lin4Li14Lii4LiZCivguILguLLguIcKK+C4guC5iOC4suC4hwor4LiC4LmJ4Liy4LiHCivguILguYnguLLguIfguIHguKPguLDguJTguLLguJkKK+C4guC5ieC4suC4h+C5gOC4h+C4tOC4mQor4LiC4Liy4LiH4LmB4LiU4LiHCivguILguYnguLLguIfguJXguLDguYDguKDguLIKK+C4guC5ieC4suC4h+C4peC4suC4ogor4LiC4Liy4LiT4Li4CivguILguLLguJQKK+C4guC4suC4l+C4meC4teC4ouC4sAor4LiC4Liy4LiZCivguILguYjguLLguJkKK+C4guC4suC4mgor4LiC4Liy4LihCivguILguYnguLLguKEKK+C4guC4suC4ogor4LiC4LmI4Liy4LiiCivguILguLLguKUKK+C4guC4suC4pwor4LiC4LmI4Liy4LinCivguILguYnguLLguKcKK+C4guC5ieC4suC4p+C4hOC4swor4LiC4LmJ4Liy4Lin4LiI4Li14LmICivguILguLLguKfguIjguLXguJoKK+C4guC5ieC4suC4p+C4leC5ieC4oQor4LiC4LmJ4Liy4Lin4LiV4Lit4LiBCivguILguYnguLLguKfguJnguIEKK+C4guC4suC4p+C4nuC4p+C4hwor4LiC4Liy4Lin4Lih4LmJ4LiyCivguILguYnguLLguKfguKHguLTguYjguJkKK+C4guC5ieC4suC4p+C5gOC4ouC5h+C4meC5g+C4leC5iQor4LiC4LmJ4Liy4Lin4LmA4Lii4LmH4LiZ4LmA4Lir4LiZ4Li34LitCivguILguYnguLLguKfguKrguLLguKMKK+C4guC5ieC4suC4p+C4q+C4suC4h+C4iuC5ieC4suC4hwor4LiC4Liy4Lin4LmD4Lir4LiN4LmICivguILguYnguLLguKfguYPguKvguKHguYjguJnguYnguK3guKIKK+C4guC5ieC4suC4p+C5g+C4q+C4oeC5iOC5g+C4q+C4jeC5iAor4LiC4LmJ4Liy4Lio4Li24LiBCivguILguYnguLLguKvguKXguKfguIcKK+C4guC5ieC4suC4q+C4peC4p+C4h+C4q+C4peC4seC4h+C4peC4suC4ogor4LiC4LizCivguILguYjguLPguYDguILguLXguKLguKcKK+C4guC4tOC4gQor4LiC4Li04LiB4LmGCivguILguLTguIcKK+C4guC4tOC5iOC4hwor4LiC4Li04Lib4Liq4Lix4LiX4LmC4LiXCivguILguLTguKEKK+C4guC4teC5iAor4LiC4Li14LmJCivguILguLXguYnguIHguLIKK+C4guC4teC5ieC4geC4suC4lOC4hwor4LiC4Li14LmJ4LiB4Liy4LmB4LiU4LiHCivguILguLXguYnguIHguLLguYDguKvguKXguLXguYjguKLguKEKK+C4guC4teC5ieC4guC4oQor4LiC4Li14LmJ4LiC4Lin4LiHCivguILguLXguYnguILguLjguKIKK+C4guC4teC5ieC4hOC4o+C4reC4gQor4LiC4Li14LmJ4LiE4Lin4Liy4LiiCivguILguLXguYnguYLguITguKPguIcKK+C4guC4teC4k+C4sAor4LiC4Li14LiT4Liy4Liq4LieCivguILguLXguJQKK+C4guC4teC5ieC4leC4seC4h+C4meC4tQor4LiC4Li14LmJ4LiV4Li04LmJ4LinCivguILguLXguYnguYTguJXguYkKK+C4guC4teC5ieC5hOC4lgor4LiC4Li14Lib4LiZ4Liy4Lin4Li44LiYCivguILguLXguYnguJzguLbguYnguIcKK+C4guC4teC5ieC4oeC4reC4lAor4LiC4Li14LmJ4Lii4Lit4LiBCivguILguLXguYnguKPguLLguJQKK+C4guC4teC5ieC5geC4o+C4lAor4LiC4Li14LmJ4Liq4Li54LiUCivguILguLXguYnguKvguJnguK3guJkKK+C4guC4teC5ieC4q+C4meC5ieC4sgor4LiC4Li14LmJ4Lir4LiZ4Li5CivguILguLXguYnguKvguKHguLkKK+C4guC4teC5ieC5gOC4q+C4peC5h+C4gQor4LiC4Li14LmJ4Lit4LmJ4LiZCivguILguLXguYnguK3guYnguLLguKIKK+C4guC4tuC4hwor4LiC4Li24LmJ4LiHCivguILguLbguYnguJkKK+C4guC4tuC5ieC4meC4ieC5iOC4suC4ogor4LiC4Li34LiZCivguILguLfguYjguJkKK+C4guC4t+C5iOC4rQor4LiC4Li34LmI4Lit4Lic4Li1CivguILguLjguIEKK+C4guC4uOC4lAor4LiC4Li44LiX4LiX4LiB4LiZ4Li04LiB4Liy4LiiCivguILguLjguJkKK+C4guC4uOC5iOC4mQor4LiC4Li44LiZ4LiX4Lit4LiHCivguILguLjguJnguYHguJzguJkKK+C4guC4uOC4meC5gOC4nuC5h+C4lAor4LiC4Li44Lib4Lib4Li04Lib4Liy4Liq4Li04LiB4LmA4Lib4Lij4LiVCivguILguLjguKEKK+C4guC4uOC4ogor4LiC4Li5CivguILguLnguYgKK+C4guC4ueC4lAor4LmA4LiCCivguYDguILguYkKK+C5gOC4guC4gQor4LmA4LiC4LmH4LiHCivguYDguILguYjguIcKK+C5gOC4guC4iOC4owor4LmA4LiC4LmH4LiNCivguYDguILguYfguI3guYPguIgKK+C5gOC4guC5h+C4lAor4LmA4LiC4LiU4LiyCivguYDguILguJUKK+C5gOC4guC4mQor4LmA4LiC4LmH4LiZCivguYDguILguYjguJkKK+C5gOC4guC4meC4hwor4LmA4LiC4LiZ4LmH4LiUCivguYDguILguJnguKIKK+C5gOC4guC4muC5h+C4iOC4guC4muC4p+C4mQor4LmA4LiC4Lia4LmH4LiVCivguYDguILguYfguKEKK+C5gOC4guC5ieC4oQor4LmA4LiC4LmJ4Lih4LiC4Liy4LiaCivguYDguILguKHguYfguIcKK+C5gOC4guC4oeC5h+C4lOC5geC4guC4oeC5iAor4LmA4LiC4Lih4LmI4LiZCivguYDguILguKHguYnguJkKK+C5gOC4guC4oeC5ieC4meC4guC4sOC4oeC4seC4gQor4LmA4LiC4Lih4LijCivguYDguILguKHguLIKK+C5gOC4guC4oeC5iOC4sgor4LmA4LiC4Lih4Liy4LmC4LiB4Lij4LiiCivguYDguILguKHguLfguK3guJoKK+C5gOC4guC4ogor4LmA4LiC4Lii4LiBCivguYDguILguKLguYjguIcKK+C5gOC4guC4ouC4leC4suC4ogor4LmA4LiC4Lii4LmJ4Lit4LmB4LiC4Lii4LmI4LiHCivguYDguILguKLguK3guLDguILguKLguLAKK+C5gOC4guC4ouC5iOC4sgor4LmA4LiC4Lii4Li04LiZCivguYDguILguKLguLTguJoKK+C5gOC4guC4ouC4teC4ouC4p+C4guC4ouC4reC4mQor4LmA4LiC4Lii4Li34LmJ4Lit4LiZCivguYDguILguKPguK3guLAKK+C5gOC4guC4peC4hwor4LmA4LiC4Lil4Lit4LiwCivguYDguILguKXguLAKK+C5gOC4guC4peC4sgor4LmA4LiC4Lil4Liy4LiwCivguYDguILguKcKK+C5gOC4guC4qeC4leC4owor4LmA4LiC4Lip4LihCivguYDguILguKnguLXguKLguKMKK+C5gOC4guC4rOC4sAor4LmA4LiC4Liw4LiC4LiwCivguYDguILguLIKK+C5gOC4guC5iOC4sgor4LmA4LiC4LmJ4LiyCivguYDguILguYnguLLguKvguKHguLTguYnguJkKK+C5gOC4guC4tOC4hwor4LmA4LiC4Li04LiZCivguYDguILguLTguJoKK+C5gOC4guC4teC5iOC4ogor4LmA4LiC4Li14Lii4LiHCivguYDguILguLXguKLguIfguJ7guKPguLDguJnguLLguIfguK3guLXguYgKK+C5gOC4guC4teC4ouC4h+C4nuC4o+C5ieC4sgor4LmA4LiC4Li14Lii4LiUCivguYDguILguLXguKLguJkKK+C5gOC4guC4teC5iOC4ouC4mQor4LmA4LiC4Li14Lii4LihCivguYDguILguLXguKLguKcKK+C5gOC4guC4teC5ieC4ouC4pwor4LmA4LiC4Li14Lii4LiwCivguYDguILguLfguK0KK+C5gOC4guC4t+C4reC4hwor4LmA4LiC4Li34LmI4Lit4LiHCivguYDguILguLfguYjguK3guJkKK+C5gOC4guC4t+C4reC4oQor4LmB4LiCCivguYHguILguYkKK+C5geC4guC4gQor4LmB4LiC4LiB4LmA4LiV4LmJ4LiyCivguYHguILguYfguIcKK+C5geC4guC5iOC4hwor4LmB4LiC4LmJ4LiHCivguYHguILguJkKK+C5geC4guC5iOC4mQor4LmB4LiC4LmJ4LiZCivguYHguILguJnguIcKK+C5geC4guC4meC4sAor4LmB4LiC4LihCivguYHguILguKHguYfguJoKK+C5geC4guC4oeC5iOC4pwor4LmB4LiC4Lii4LmH4LiB4LmGCivguYHguILguKLguIcKK+C5geC4guC4ouC5iOC4hwor4LmB4LiC4Lii4LiH4Lir4LiZ4Li5CivguYHguILguKXguLAKK+C5geC4guC4p+C4gQor4LmB4LiC4Lin4LiHCivguYHguILguKfguJkKK+C5geC4guC4p+C4meC4peC4reC4ogor4LmB4LiC4Lin4LiwCivguYHguILguKrguKPguYwKK+C5guC4ggor4LmC4LiC4LiBCivguYLguILguYjguIcKK+C5guC4guC4lAor4LmC4LiC4LiU4LiHCivguYLguILguJkKK+C5guC4guC4meC4hwor4LmC4LiC4LihCivguYLguILguKHguIcKK+C5guC4guC4oeC4lAor4LmC4LiC4Lih4LiU4Lii4LiyCivguYLguILguKLguIEKK+C5guC4guC4ouC4hwor4LmC4LiC4Lii4LmI4LiHCivguYLguILguKLguJQKK+C5guC4guC4ouC4oQor4LmC4LiC4Lil4LiBCivguYLguILguKXguIHguYYKK+C5guC4guC4peC4hwor4LmC4LiC4Lil4LiZCivguYLguILguKXguJnguJfguKfguLLguKMKK+C5guC4guC4qeC4oQor4LmE4LiCCivguYTguILguYgKK+C5hOC4guC5iQor4LmE4LiC4LmI4LiU4Lix4LiZCivguYTguILguYjguKHguLjguIEKK+C5hOC4guC4o+C4sgor4LmE4LiC4Lin4LmICivguYTguILguKfguYkKK+C5hOC4guC4qeC4ogor4LmE4LiC4Liq4Li34LitCivguYTguILguYDguKrguJnguLXguKLguJQKK+C5hOC4guC4q+C4uQor4LmE4LiC4LmI4LmA4Lir4Lil4Li34Lit4LiHCivguIQKK+C4hOC4gQor4LiE4LiE4LiZ4LiwCivguITguITguJnguLHguKHguJ7guKMKK+C4hOC4hOC4meC4suC4h+C4hOC5jAor4LiE4LiE4LiZ4Liy4LiZ4LiV4LmMCivguITguIcKK+C4hOC4h+C4hOC4sgor4LiE4LiH4LiE4Liy4LmA4LiU4Li34Lit4LiUCivguITguIfguYTguITguKIKK+C4hOC4iuC4o+C4suC4igor4LiE4LiK4Liq4LmI4Liy4LiZCivguITguIrguLLguIrguLLguJXguLQKK+C4hOC4iuC4suC4iuC4teC4ngor4LiE4LiK4Liy4LiY4Liy4LijCivguITguIrguLLguKDguKPguJPguYwKK+C4hOC4iuC4suC4ouC4uOC4o+C5gOC4p+C4igor4LiE4LiK4Liy4Lij4Li1CivguITguIrguLTguJnguJfguKMKK+C4hOC5gOC4iuC4meC4l+C4o+C5jAor4LiE4LiT4LiZCivguITguJPguJnguLIKK+C4hOC4k+C5guC4oOC4iuC4meC5jAor4LiE4LiT4LiwCivguITguJPguLTguIHguLIKK+C4hOC4k+C4tOC4lQor4LiE4LmA4LiT4LioCivguITguJQKK+C4hOC4lOC4tQor4LiE4LiVCivguITguJXguLQKK+C4hOC4l+C4sgor4LiE4LiZCivguITguYnguJkKK+C4hOC4meC4l+C4sgor4LiE4LiZ4LiX4Li04Liq4LitCivguITguJnguJfguLTguKrguK3guJfguLDguYDguKUKK+C4hOC4meC4l+C4tQor4LiE4LiZ4LiX4Li14LmA4LiC4Lih4LiyCivguITguJnguJfguLXguKrguK0KK+C4hOC4meC5guC4lwor4LiE4LiZ4LiY4LmMCivguITguJnguJjguKPguKPguJ7guYwKK+C4hOC4meC4peC4sAor4LiE4LmA4LiZ4LiI4LijCivguITguJoKK+C4hOC4oQor4LiE4Lih4LiZ4LmMCivguITguKHguJnguLLguIHguLLguKMKK+C4hOC4oeC4meC4suC4hOC4oQor4LiE4Lih4Li04LiB4Lig4Lix4LiVCivguITguKPguIEKK+C4hOC4o+C5iOC4hwor4LiE4Lij4LiaCivguITguKPguJrguJbguYnguKfguJkKK+C4hOC4o+C4o+C4iuC4tOC4lQor4LiE4Lij4Lij4LigCivguITguKPguKPguKDguYwKK+C4hOC4o+C4o+C4oOC4mOC4suC4leC4uAor4LiE4Lij4Lij4Lig4Lih4LilCivguITguKPguKPguKDguLLguJjguLLguJkKK+C4hOC4o+C4o+C5guC4oOC4l+C4owor4LiE4Lij4Lij4Lil4Lit4LiHCivguITguKPguKPguYLguKXguIcKK+C4hOC4o+C4o+C5hOC4pQor4LiE4Lij4Lij4Lir4Li04LiVCivguITguKPguKfguI0KK+C4hOC4o+C4p+C4jeC4q+C4sgor4LiE4Lij4Lin4Lix4LiBCivguITguKPguKfguLUKK+C4hOC4o+C4q+C4sgor4LiE4Lij4Lit4LiBCivguITguKPguK3guIcKK+C4hOC4o+C4reC4h+C5geC4hOC4o+C4hwor4LiE4Lij4LmI4Lit4LmA4LiH4Liy4LiwCivguITguKPguYjguK3guYDguJfguLXguKLguJkKK+C4hOC4o+C4reC4mgor4LiE4Lij4Lit4Lia4LiI4Lix4LiB4Lij4Lin4Liy4LilCivguITguKPguK3guJrguJXguKXguLHguJoKK+C4hOC4o+C5iOC4reC4oQor4LiE4Lij4LiwCivguITguKPguLDguYDguKHguLTguJkKK+C4hOC4o+C4sOC5geC4peC4hwor4LiE4Lij4Liw4LmE4LilCivguITguKPguLDguYHguKfguIcKK+C4hOC4o+C4sOC4q+C4mQor4LiE4Lij4Liw4Lir4Lin4LiZCivguITguKPguLDguKvguLLguKIKK+C4hOC4o+C4sOC4q+C4tOC4pwor4LiE4Lij4Liw4LmC4Lir4LiiCivguITguKPguLHguYjguIcKK+C4hOC4o+C4seC5ieC4hwor4LiE4Lij4Lix4LiU4LmA4LiE4Lij4LmI4LiHCivguITguKPguLHguJkKK+C4hOC4o+C4seC5iOC4mQor4LiE4Lij4Lix4LmJ4LiZCivguITguKPguLHguJoKK+C4hOC4o+C4seC4pwor4LiE4Lij4LiyCivguITguKPguYjguLIKK+C4hOC4o+C4suC4gQor4LiE4Lij4Liy4LiHCivguITguKPguLLguI0KK+C4hOC4o+C4suC4lAor4LiE4Lij4LmJ4Liy4LiZCivguITguKPguLLguJoKK+C4hOC4o+C4suC4muC4q+C4oeC4uQor4LiE4Lij4Liy4LihCivguITguKPguYnguLLguKEKK+C4hOC4o+C4suC4oeC4hOC4o+C4seC4mQor4LiE4Lij4Liy4LinCivguITguKPguYjguLLguKcKK+C4hOC4o+C4suC4qgor4LiE4Lij4LizCivguITguKPguYjguLMKK+C4hOC4o+C4tOC4m+C4l+C4reC4mQor4LiE4Lij4Li04Liq4LiV4LmMCivguITguKPguLXguITguKPguK0KK+C4hOC4o+C4teC4mgor4LiE4Lij4Li14LihCivguITguKPguLXguKnguKHguLLguKLguLHguJkKK+C4hOC4o+C4tgor4LiE4Lij4Li24LiB4LiE4Lij4Li34LmJ4LiZCivguITguKPguLbguIHguYLguITguKPguKEKK+C4hOC4o+C4tuC5iOC4hwor4LiE4Lij4Li24LiZCivguITguKPguLbguKEKK+C4hOC4o+C4tuC5ieC4oQor4LiE4Lij4Li24Lih4LiE4Lij4Li4CivguITguKPguLfguJQKK+C4hOC4o+C4t+C4mQor4LiE4Lij4Li34LmJ4LiZCivguITguKPguLfguJnguITguKPguLHguYjguJkKK+C4hOC4o+C4t+C5ieC4meC4hOC4o+C4tuC4gQor4LiE4Lij4Li34LmJ4LiZ4LmA4LiE4Lij4LiHCivguITguKPguLfguK0KK+C4hOC4o+C4uAor4LiE4Lij4Li44LiE4Lij4LiwCivguITguKPguLjguJEKK+C4hOC4o+C4uOC4keC4geC4o+C4sOC4l+C4hwor4LiE4Lij4Li44LmI4LiZCivguITguKPguLjguYjguJnguITguLTguJQKK+C4hOC4o+C4uOC4oeC5gOC4hOC4o+C4t+C4rQor4LiE4Lij4Li44LiiCivguITguKPguLjguKfguJnguLIKK+C4hOC4o+C4uQor4LiE4Lij4Li54LmICivguITguKPguLnguJQKK+C4hOC4pOC5guC4huC4qQor4LiE4Lik4LiZ4LiW4LmMCivguITguKTguKsKK+C4hOC4pOC4q+C4muC4lOC4tQor4LiE4Lik4Lir4Lib4Lix4LiV4LiZ4Li1CivguITguKTguKvguLHguKrguJbguYwKK+C4hOC4pOC4q+C4sgor4LiE4Lik4Lir4Liy4Liq4LiZ4LmMCivguITguKUKK+C4hOC4peC4p+C4hwor4LiE4Lil4LitCivguITguKXguYnguK0KK+C4hOC4peC4reC4gQor4LiE4Lil4Lit4LiHCivguITguKXguYjguK3guIcKK+C4hOC4peC5ieC4reC4hwor4LiE4Lil4Lit4LiUCivguITguKXguK3guJkKK+C4hOC4peC5ieC4reC4ogor4LiE4Lil4Lit4Lij4Li14LiZCivguITguKXguK3guYLguKPguJ/guK3guKPguKHguYwKK+C4hOC4peC4reC5guC4o+C4n+C4teC4peC4peC5jAor4LiE4Lil4LiwCivguITguKXguLDguITguKXguLjguYnguIcKK+C4hOC4peC4seC4gQor4LiE4Lil4Lix4LmI4LiBCivguITguKXguLHguYjguIHguYYKK+C4hOC4peC4seC4hwor4LiE4Lil4Lix4LmI4LiHCivguITguKXguLHguJXguIrguYwKK+C4hOC4peC4seC4mgor4LiE4Lil4Lix4Lia4LiE4Lil4LmJ4Liy4LiiCivguITguKXguLIKK+C4hOC4peC5ieC4sgor4LiE4Lil4Liy4LiH4LmB4LiE4Lil4LiHCivguITguKXguLLguJQKK+C4hOC4peC4suC4mQor4LiE4Lil4Liy4LiiCivguITguKXguYnguLLguKIKK+C4hOC4peC5ieC4suC4ouC4hOC4peC4tuC4hwor4LiE4Lil4LmI4Liy4LinCivguITguKXguLLguKgKK+C4hOC4peC4swor4LiE4Lil4LmI4LizCivguITguKXguYnguLMKK+C4hOC4peC4tOC4hwor4LiE4Lil4Li04LmJ4LiH4LmC4LiE4Lil4LiHCivguITguKXguLTguJnguLTguIEKK+C4hOC4peC4tQor4LiE4Lil4Li14LmICivguITguKXguLbguIcKK+C4hOC4peC4t+C5iOC4mQor4LiE4Lil4Li34LmI4LiZ4LmE4Liq4LmJCivguITguKXguLfguYjguJnguYDguKvguLXguKLguJkKK+C4hOC4peC4uOC4gQor4LiE4Lil4Li44LiB4LiE4Lil4Liy4LiZCivguITguKXguLjguYnguIcKK+C4hOC4peC4uOC4mgor4LiE4Lil4Li44LihCivguITguKXguLjguYjguKEKK+C4hOC4peC4uOC5ieC4oQor4LiE4Lin4LiHCivguITguKfguJMKK+C4hOC4p+C4mQor4LiE4Lin4LiaCivguITguKfguJrguYHguJnguYjguJkKK+C4hOC4p+C4ogor4LiE4Lin4LijCivguITguKfguLHguIEKK+C4hOC4p+C4seC4geC4hOC5ieC4reC4mQor4LiE4Lin4Lix4LmI4LiH4LiE4Lin4LmJ4Liy4LiHCivguITguKfguLHguJkKK+C4hOC4p+C4seC5iOC4mQor4LiE4Lin4LmJ4LiyCivguITguKfguLLguIEKK+C4hOC4p+C5ieC4suC4hwor4LiE4Lin4Liy4LiNCivguITguKfguLLguJkKK+C4hOC4p+C5ieC4suC4mQor4LiE4Lin4Liy4LihCivguITguKfguLLguKHguITguKXguLLguJQKK+C4hOC4p+C4suC4oeC5gOC4hOC4o+C4teC4ouC4lAor4LiE4Lin4Liy4Lih4LmB4LiE4LmJ4LiZCivguITguKfguLLguKHguYDguInguLfguYjguK3guKIKK+C4hOC4p+C4suC4oeC4iuC4t+C5ieC4mQor4LiE4Lin4Liy4Lih4LiW4LmI4Lin4LiHCivguITguKfguLLguKHguJbguLXguYgKK+C4hOC4p+C4suC4oeC4ouC4suC4p+C4hOC4peC4t+C5iOC4mQor4LiE4Lin4Liy4Lih4Lij4Li54LmJ4Liq4Li24LiB4LmA4LiC4Li34LmI4Lit4LiHCivguITguKfguLLguKHguKPguLnguYnguKrguLbguIHguJTguYnguK3guKIKK+C4hOC4p+C4suC4oeC4o+C4ueC5ieC4quC4tuC4geC5gOC4lOC5iOC4mQor4LiE4Lin4Liy4Lih4LmA4Lij4LmI4LiHCivguITguKfguLLguKHguYDguKPguYfguKcKK+C4hOC4p+C4suC4oeC4q+C4meC5iOC4p+C4hwor4LiE4Lin4Liy4LiiCivguITguKfguYjguLLguKcKK+C4hOC4p+C5iOC4swor4LiE4Lin4Li04LiZ4Li04LiZCivguITguKfguLTguKfguYYKK+C4hOC4p+C4tOC4p+C4hOC4p+C4seC4hwor4LiE4Lin4Li04Lin4LiE4Lin4LmI4Liy4LiHCivguITguKfguLTguKfguITguKfguYnguLLguIcKK+C4hOC4p+C4teC4meC4quC4tOC4o+C4tOC4geC4tOC4leC4tOC5jAor4LiE4Lir4Lix4LiQCivguITguK0KK+C4hOC5ieC4rQor4LiE4Lit4LiBCivguITguYfguK3guIHguITguLHguKoKK+C4hOC5h+C4reC4geC5gOC4l+C4pQor4LiE4Lit4LiE4Liy4LiZCivguITguK3guYDguITguIvguK3guKLguJTguYwKK+C4hOC4reC4h+C5gOC4geC4o+C4qgor4LiE4LmI4Lit4LiH4Lit4LmJ4Lit4LiiCivguITguK3guJQKK+C4hOC4reC5gOC4leC5h+C4mgor4LiE4Lit4LiZCivguITguYjguK3guJkKK+C4hOC5ieC4reC4mQor4LiE4Lit4LiZ4LiB4Lij4Li14LiVCivguITguYnguK3guJnguIHguKXguK3guIcKK+C4hOC4reC4meC5gOC4lOC4meC5gOC4i+C4reC4o+C5jAor4LiE4LmJ4Lit4LiZ4LiV4Li14LiZ4Lir4Lih4LiyCivguITguYnguK3guJnguJfguK3guIcKK+C4hOC4reC4meC4p+C4reC4ogor4LiE4Lit4LiZ4LmB4Lin4LiZ4LiV4LmMCivguITguK3guJnguYDguKrguLTguKPguYzguJUKK+C4hOC5ieC4reC4meC4q+C4reC4ogor4LiE4Lit4LiaCivguITguK3guKEKK+C4hOC5iOC4reC4oQor4LiE4LmJ4Lit4LihCivguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYwKK+C4hOC4reC4oeC4oeC4suC4meC5guC4lAor4LiE4Lit4Lih4Lih4Li04Lin4LiZ4Li04Liq4LiV4LmMCivguITguK3guKIKK+C4hOC5iOC4reC4ogor4LiE4LmJ4Lit4LiiCivguITguYjguK3guKLguYYKK+C4hOC4reC4ouC4peC5jAor4LiE4Lit4Lij4LmM4LiUCivguITguK3guKPguYzguJUKK+C4hOC4reC4o+C4seC4m+C4iuC4seC5iOC4mQor4LiE4Lit4Lil4Lix4Lih4LiZ4LmMCivguITguK3guYDguKXguKrguYDguJXguK3guKPguK3guKUKK+C4hOC4reC5geC4peC4mQor4LiE4Lit4Liq4LiV4Li04LiB4LmC4LiL4LiU4LiyCivguITguK3guYHguKvguYnguIcKK+C4hOC4sAor4LiE4LmI4LiwCivguITguLDguYTguILguKfguYgKK+C4hOC4sOC4hOC5ieC4reC4ogor4LiE4Liw4LiE4Liy4LiZCivguITguLDguITguLbguIcKK+C4hOC4sOC4meC4mQor4LiE4Liw4LiZ4Lit4LiHCivguITguLDguJnguYnguLIKK+C4hOC4sOC4meC4tuC4hwor4LiE4Liw4LmA4LiZCivguITguLDguYDguJnguIfguKPguYnguLLguKIKK+C4hOC4sOC5gOC4meC5h+C4lAor4LiE4Liw4LmB4LiZ4LiZCivguITguLDguYPguJkKK+C4hOC4sOC4oeC4swor4LiE4Liw4Lih4Li24LiBCivguITguLDguKLguLHguYnguJnguITguLDguKLguK0KK+C4hOC4sOC5gOC4ouC4rQor4LiE4Lix4LiBCivguITguLHguYjguIEKK+C4hOC4seC4hOC4mQor4LiE4Lix4LiE4LiZ4LiwCivguITguLHguITguJnguLHguKHguJ7guKMKK+C4hOC4seC4hOC4meC4suC4h+C4hOC5jAor4LiE4Lix4LiE4LiZ4Liy4LiZ4LiV4LmMCivguITguLHguYjguIcKK+C4hOC4seC4h+C5hOC4hOC4ogor4LiE4Lix4LiI4LiJCivguITguLHguJPguJHguKHguLLguKXguLIKK+C4hOC4seC4k+C4keC4quC4ueC4leC4owor4LiE4Lix4LiUCivguITguLHguJTguYDguITguYnguLIKK+C4hOC4seC4lOC4iuC5ieC4reC4mQor4LiE4Lix4LiU4Lih4Lit4LiZCivguITguLHguJfguKXguLXguKLguLIKK+C4hOC4seC4mQor4LiE4Lix4LmI4LiZCivguITguLHguYnguJkKK+C4hOC4seC4meC4iOC4suC4oQor4LiE4Lix4LiZ4LiJ4Liy4LiiCivguITguLHguJnguYLguJTguIcKK+C4hOC4seC4meC4l+C4o+C4hwor4LiE4Lix4LiZ4LiYCivguITguLHguJnguJjguYwKK+C4hOC4seC4meC4mOC4suC4o+C4o+C4suC4qeC4juC4o+C5jAor4LiE4Lix4LiZ4Lir4Liy4Lih4LmA4Liq4Li34LitCivguITguLHguJoKK+C4hOC4seC4muC4hOC5ieC4reC4mQor4LiE4Lix4Lia4LiE4LiyCivguITguLHguJrguYHguIQKK+C4hOC4seC4nuC4oOC5jAor4LiE4Lix4Lie4LmC4Lig4LiX4LijCivguITguLHguKHguKDguLXguKPguYwKK+C4hOC4seC4pQor4LiE4Lix4LinCivguITguLHguYjguKcKK+C4hOC4sgor4LiE4LmI4LiyCivguITguYnguLIKK+C4hOC5iOC4suC4hOC4mgor4LiE4Liy4LiHCivguITguYjguLLguIcKK+C4hOC5ieC4suC4hwor4LiE4Liy4LiH4LiE4LiBCivguITguYnguLLguIfguITguLLguKcKK+C4hOC4suC4lAor4LiE4Liy4LiU4LiE4Lix4LmJ4LiZCivguITguLLguJbguLIKK+C4hOC4suC4l+C4reC4peC4tOC4gQor4LiE4LmI4Liy4LiX4Li14LmICivguITguLLguJgKK+C4hOC4suC5gOC4mOC4ouC5jAor4LiE4Liy4LiZCivguITguYnguLLguJkKK+C4hOC4suC4meC5ieC4sgor4LiE4Liy4LiaCivguITguLLguJ7guKLguLjguJUKK+C4hOC4suC4oQor4LiE4Liy4Lih4LiT4Li14Lii4LmMCivguITguLLguKHguKDguLXguKPguYwKK+C4hOC4suC4oeC4tQor4LiE4Liy4LiiCivguITguYjguLLguKIKK+C4hOC4suC4ouC4gQor4LiE4Liy4Lii4Lix4LiZCivguITguLLguKPguYzguJrguK3guJkKK+C4hOC4suC4o+C5jOC4muC4reC4meC5hOC4lOC4reC4reC4geC5hOC4i+C4lOC5jAor4LiE4Liy4Lij4LmM4Lia4Lit4LiZ4Lih4Lit4LiZ4Lit4LiB4LmE4LiL4LiU4LmMCivguITguLLguKPguYzguJrguK3guYDguJnguJUKK+C4hOC4suC4o+C5jOC4muC4reC4peC4tOC4gQor4LiE4Liy4Lij4LmM4Lia4Li54LmA4Lij4LmA4LiV4Lit4Lij4LmMCivguITguLLguKPguYzguYLguJrguKPguLHguJnguJTguLHguKEKK+C4hOC4suC4o+C5jOC5guC4muC5hOC4ruC5gOC4lOC4o+C4lQor4LiE4Liy4Lij4LieCivguITguLLguKPguKEKK+C4hOC4suC4o+C4p+C4sAor4LiE4Liy4Lij4Liy4LmA4LiV4LmJCivguITguLLguKPguLLguKfguLLguJkKK+C4hOC4suC4pwor4LiE4LmI4Liy4LinCivguITguYnguLLguKcKK+C4hOC4suC4p+C4leC4reC4hwor4LiE4Liy4Lin4Li1CivguITguLLguKfguLjguJUKK+C4hOC4suC4qgor4LiE4LmI4Liy4Lir4LiUCivguITguLMKK+C4hOC5iOC4swor4LiE4LmJ4LizCivguITguLPguJTguLXguITguKfguLLguKIKK+C4hOC4s+C5g+C4leC5iQor4LiE4Liz4LiZ4Lin4LiTCivguITguLPguJnguKfguKMKK+C4hOC4s+C4meC4seC4mgor4LiE4Liz4LiZ4Lix4LilCivguITguLPguJnguLbguIcKK+C4hOC4s+C4meC4ueC4kwor4LiE4Liz4LmC4Lia4LilCivguITguLPguJ3guK3guKIKK+C4hOC4s+C5gOC4nuC4peC4tOC4hwor4LiE4Liz4Lij4LiZCivguITguLPguKPguJoKK+C4hOC4s+C4o+C4suC4oQor4LiE4Liz4LmB4Liq4LiUCivguITguLPguYHguKvguIcKK+C4hOC4s+C5guC4reC4hwor4LiE4Li04LiB4LmGCivguITguLTguIcKK+C4hOC4tOC4lAor4LiE4Li04LiZ4Li0CivguITguLTguKHguKsKK+C4hOC4tOC4oeC4q+C4seC4meC4leC5jAor4LiE4Li04Lih4Lir4Liy4LiZ4LiwCivguITguLTguKPguLQKK+C4hOC4tOC4o+C4tQor4LiE4Li04Lil4Liy4LiZ4LiwCivguITguLTguKcKK+C4hOC4tOC5ieC4pwor4LiE4Li04Lir4Li04Liq4Li44LiCCivguITguLXguYgKK+C4hOC4teC4lQor4LiE4Li14LiV4LiB4LiwCivguITguLXguJoKK+C4hOC4teC4oQor4LiE4Li14Lij4Li1CivguITguLXguKPguLXguJrguLnguJkKK+C4hOC4tuC4gQor4LiE4Li24LmI4LiBCivguITguLbguYjguIHguYYKK+C4hOC4tuC4geC4hOC4seC4gQor4LiE4Li24LiB4LiE4Liy4LihCivguITguLfguJkKK+C4hOC4t+C4mgor4LiE4Li34LitCivguITguLgKK+C4hOC4uOC4gQor4LiE4Li44LiB4LiB4Li14LmJCivguITguLjguIHguYDguILguYjguLIKK+C4hOC4uOC4geC4hOC4peC4suC4mQor4LiE4Li44LiB4LiE4Liy4LihCivguITguLjguIHguJ7guLLguJfguKLguYwKK+C4hOC4uOC4hOC4sAor4LiE4Li44LiHCivguITguLjguYnguIcKK+C4hOC4uOC4kwor4LiE4Li44LiT4LiE4LmI4LiyCivguITguLjguJPguJjguKPguKPguKEKK+C4hOC4uOC4k+C4meC4suC4oQor4LiE4Li44LiT4Lia4LiXCivguITguLjguJPguJvguKPguLDguYLguKLguIrguJnguYwKK+C4hOC4uOC4k+C4nuC4tOC5gOC4qOC4qQor4LiE4Li44LiT4Lig4Liy4LieCivguITguLjguJPguKXguLHguIHguKnguJPguLAKK+C4hOC4uOC4k+C4peC4uOC4h+C4hOC4uOC4k+C4m+C5ieC4sgor4LiE4Li44LiT4Lin4Li04LmA4Lio4LipCivguITguLjguJPguKfguLjguJLguLQKK+C4hOC4uOC4k+C4qOC4seC4nuC4l+C5jAor4LiE4Li44LiT4Liq4Lih4Lia4Lix4LiV4Li0CivguITguLjguJPguLLguIHguKMKK+C4hOC4uOC4k+C4suC4peC4seC4ogor4LiE4Li44LiT4Li54Lib4LiB4Liy4LijCivguITguLjguYLguJPguJvguIHguLLguKMKK+C4hOC4uOC4lAor4LiE4Li44LiU4LiX4Liw4Lij4Liy4LiUCivguITguLjguJUKK+C4hOC4uOC4leC4leC4tAor4LiE4Li44LmI4LiZCivguITguLjguYnguJkKK+C4hOC4uOC4mwor4LiE4Li44Lib4LiV4LmMCivguITguLjguJvguJXguLQKK+C4hOC4uOC4oQor4LiE4Li44LmI4LihCivguITguLjguYnguKEKK+C4hOC4uOC5ieC4oeC4lOC4teC4hOC4uOC5ieC4oeC4o+C5ieC4suC4ogor4LiE4Li44LmJ4Lih4LmA4LiX4LmJ4LiyCivguITguLjguKHguJ3guK3guKIKK+C4hOC4uOC4ogor4LiE4Li44LmJ4LiiCivguITguLjguKPguLgKK+C4hOC4uOC4peC4sgor4LiE4Li44Lil4Li04LiB4LmI4LiyCivguITguLjguKXguLXguIHguLLguKMKK+C4hOC4uQor4LiE4Li54LmICivguITguLnguYkKK+C4hOC4ueC4kwor4LiE4Li54LiWCivguITguLnguJkKK+C4hOC4ueC4m+C4reC4hwor4LiE4Li54LmA4Lij4Li14Lii4LihCivguITguLnguKvguLIKK+C5gOC4hOC5ieC5gOC4geC5iQor4LmA4LiE4LmJ4LiHCivguYDguITguIjguIkKK+C5gOC4hOC4k+C4keC4sAor4LmA4LiE4LiUCivguYDguITguJkKK+C5gOC4hOC5gOC4muC4tOC4pQor4LmA4LiE4LmH4LihCivguYDguITguKHguLUKK+C5gOC4hOC4ogor4LmA4LiE4Lij4LiHCivguYDguITguKPguYjguIcKK+C5gOC4hOC4o+C4h+C4hOC4o+C4swor4LmA4LiE4Lij4LiH4LiE4Lij4LmI4LizCivguYDguITguKPguJTguLTguJUKK+C5gOC4hOC4o+C4mQor4LmA4LiE4Lij4LiyCivguYDguITguKPguYjguLIKK+C5gOC4hOC4o+C4suC4q+C4k+C4tQor4LmA4LiE4Lij4Liy4Liw4Lir4LmMCivguYDguITguKPguLXguKLguJQKK+C5gOC4hOC4o+C4teC4ouC4pwor4LmA4LiE4Lij4Li34LitCivguYDguITguKPguLfguK3guYDguILguLLguJnguYnguLMKK+C5gOC4hOC4o+C4t+C4reC5gOC4guC4suC4oeC4p+C4gQor4LmA4LiE4Lij4Li34LmI4Lit4LiHCivguYDguITguKPguLfguK3guIjguLHguIHguKPguKDguJ4KK+C5gOC4hOC4peC5ieC4hwor4LmA4LiE4Lil4LmH4LiUCivguYDguITguKXguYnguJkKK+C5gOC4hOC4peC5ieC4sgor4LmA4LiE4Lil4LmI4Liy4LiE4Lil4LmI4Lit4LiHCivguYDguITguKXguLTguJrguYDguITguKXguLTguYnguKEKK+C5gOC4hOC4peC4tOC5ieC4oQor4LmA4LiE4Lil4Li14LiiCivguYDguITguKXguLXguYnguKLguITguKXguLTguIcKK+C5gOC4hOC4peC4t+C5iOC4reC4mQor4LmA4LiE4Lil4Li34Lit4LiaCivguYDguITguKfguYnguIcKK+C5gOC4hOC4q+C4sAor4LmA4LiE4Lir4LiyCivguYDguITguK3guLAKK+C5gOC4hOC4sgor4LmA4LiE4LmJ4LiyCivguYDguITguLLguJnguYzguYDguJXguK3guKPguYwKK+C5gOC4hOC4suC5gOC4m+C5iwor4LmA4LiE4Liy4Lij4LieCivguYDguITguYnguLLguKrguJnguLLguKHguKvguKXguKfguIcKK+C5gOC4hOC4suC4sAor4LmA4LiE4Liy4Liw4LmB4LiE4LiwCivguYDguITguLXguYnguKIKK+C5gOC4hOC4teC4ouC4hwor4LmA4LiE4Li14Lii4LiUCivguYDguITguLXguKLguJkKK+C5gOC4hOC4teC4ouC4oQor4LmA4LiE4Li14LmI4Lii4LihCivguYDguITguLXguKLguKMKK+C5gOC4hOC4teC4ouC4pwor4LmA4LiE4Li14LmI4Lii4LinCivguYDguITguLXguYnguKLguKcKK+C5gOC4hOC4t+C5ieC4rQor4LmA4LiE4Li34Lit4LiHCivguYHguIQKK+C5geC4hOC5iAor4LmB4LiE4LmJCivguYHguITguYHguIHguKUKK+C5geC4hOC4iuC5gOC4iuC4teC4ouC4o+C5jAor4LmB4LiE4LiU4LmA4Lih4Li14Lii4LihCivguYHguITguYLguJfguJQKK+C5geC4hOC4mQor4LmB4LiE4LmI4LiZCivguYHguITguYnguJkKK+C5geC4hOC4mgor4LmB4LiE4Lia4Lir4Lih4Li5CivguYHguITguJvguIvguLnguKUKK+C5geC4hOC4oQor4LmB4LiE4Lij4LmICivguYHguITguKPguIEKK+C5geC4hOC4o+C4hOC4o+C4seC5iOC4hwor4LmB4LiE4Lij4LiHCivguYHguITguKPguIfguYDguITguKPguLXguKLguKcKK+C5geC4hOC4o+C4sAor4LmB4LiE4Lil4LiE4Li54Lil4Lix4LiqCivguYHguITguKXguIcKK+C5geC4hOC4peC5gOC4i+C4teC4ouC4oQor4LmB4LiE4Lil4LiZCivguYHguITguKXguYnguKcKK+C5geC4hOC4peC5iOC4p+C4hOC4peC5iOC4reC4hwor4LmB4LiE4Lil4Lit4Lij4Li1CivguYHguITguKXguLTguJ/guK3guKPguYzguYDguJnguLXguKLguKEKK+C5geC4hOC5geC4pQor4LmB4LiE4LinCivguYHguITguKfguIEKK+C5geC4hOC4p+C5ieC4hwor4LmB4LiE4Lin4LmJ4LiZCivguYHguITguLAKK+C5guC4hAor4LmC4LiE4LiBCivguYLguITguIHguIHguKPguLDguKrguLjguJkKK+C5guC4hOC4geC4geC4o+C4sOC4reC4reC4oQor4LmC4LiE4LiB4Lih4LmJ4LiyCivguYLguITguITguKXguLLguJkKK+C5guC4hOC5gOC4hOC4mQor4LmC4LiE4LmI4LiHCivguYLguITguYnguIcKK+C5guC4hOC4iOC4owor4LmC4LiE4LiI4Lij4LiE4Liy4LihCivguYLguITguYnguIoKK+C5guC4hOC5gOC4i+C5geC4hOC4meC4leC5jAor4LmC4LiE4LmE4LiL4LiZ4LmMCivguYLguITguJXguKMKK+C5guC4hOC5geC4l+C4meC5gOC4iOC4meC4leC5jAor4LmC4LiE4LiY4LiyCivguYLguITguJkKK+C5guC4hOC5iOC4mQor4LmC4LiE4LiZ4LiU4Li04LiZ4Liq4LitCivguYLguITguJnguJXguLLguKLguJvguKXguLLguKLguYDguJvguYfguJkKK+C5guC4hOC4meC4quC4oeC4rQor4LmC4LiE4Lia4Lit4Lil4LiV4LmMCivguYLguITguJvguJzguIHguLAKK+C5guC4hOC4oQor4LmC4LiE4Lih4LmI4LiyCivguYLguITguKPguIEKK+C5guC4hOC4o+C4geC4hOC4o+C4reC4gQor4LmC4LiE4Lij4LiB4LiE4Lij4Liy4LiBCivguYLguITguKPguIcKK+C5guC4hOC4o+C5iOC4hwor4LmC4LiE4Lij4LmI4LiH4LiE4Lij4LmI4Liy4LiHCivguYLguITguKPguIfguYHguITguKMKK+C5guC4hOC4o+C4oQor4LmC4LiE4Lij4LmA4Lih4Li14Lii4LihCivguYLguITguKPguYLguKHguYLguIvguKEKK+C5guC4hOC4o+C4suC4igor4LmC4LiE4LilCivguYLguITguKXguIcKK+C5guC4hOC4peC4mQor4LmC4LiE4Lin4LiV4LiyCivguYLguITguK3guK3guKPguYzguJTguLTguYDguJnguJUKK+C5g+C4hOC4owor4LmD4LiE4Lij4LmICivguYPguITguKPguYjguITguKPguKfguI0KK+C5hOC4hAor4LmE4LiE4LmJCivguYTguITguKPguYkKK+C5hOC4hOC4o+C5ieC5gOC4hOC4o+C4t+C4rQor4LmE4LiE4LilCivguYTguITguKXguYkKK+C4hgor4LiG4LiHCivguIbguI8KK+C4huC5guC4j+C4l+C4owor4LiG4LiVCivguIbguJkKK+C4huC4meC4suC4geC4owor4LiG4LiZ4Liy4LiE4LihCivguIbguJnguLLguKHguLHguKIKK+C4huC4meC4suC4qOC4seC4ogor4LiG4LmC4LiZ4Lia4LilCivguIbguKPguLLguKfguLLguKoKK+C4huC5ieC4reC4hwor4LiG4LmJ4Lit4LiH4Liq4Liy4Lih4Lii4LmI4Liy4LiZCivguIbguYjguLIKK+C4huC4suC4jwor4LiG4Liy4LiVCivguIbguLLguJkKK+C5gOC4huC4teC5iOC4ouC4mQor4LmC4LiG4Lij4Lin4Li04LiqCivguYLguIbguKkKK+C5guC4huC4qeC4gQor4LmC4LiG4Lip4LiT4LiyCivguYLguIbguKnguJPguLLguIHguLLguKMKK+C5guC4huC4qeC4k+C4suC4iuC4p+C4meC5gOC4iuC4t+C5iOC4rQor4LmC4LiG4Lip4Li04LiVCivguYLguIbguKrguKfguLHguJnguJXguYwKK+C4hwor4LiH4LiBCivguIfguIcKK+C4h+C4h+C4tOC4lAor4LiH4LiUCivguIfguJTguIfguLLguKEKK+C4h+C4mgor4LiH4LihCivguIfguKfguIcKK+C4h+C5iOC4p+C4hwor4LiH4Lin4LiUCivguIfguYjguKfguJkKK+C4h+C5ieC4p+C4mQor4LiH4Lin4Lii4LiH4LiHCivguIfguK0KK+C4h+C5ieC4rQor4LiH4Lit4LiBCivguIfguK3guIHguYHguIfguIEKK+C4h+C5iOC4reC4hwor4LiH4LmI4Lit4LiH4LmB4LiH4LmI4LiHCivguIfguK3guYHguIcKK+C4h+C4reC4lAor4LiH4Lit4LiU4LmB4LiH4LiUCivguIfguK3guJkKK+C4h+C5iOC4reC4mQor4LiH4LmI4Lit4LiZ4LmB4LiH4LmI4LiZCivguIfguK3guJnguKvguIfguYjguK0KK+C4h+C5ieC4reC4meC4q+C4oeC4uQor4LiH4Lit4LiaCivguIfguK3guKEKK+C4h+C5ieC4reC4oQor4LiH4Lit4LiiCivguIfguYjguK3guKIKK+C4h+C4sAor4LiH4Lix4LiB4LmGCivguIfguLHguYjguIHguYYKK+C4h+C4seC5iOC4hwor4LiH4Lix4LiH4LmGCivguIfguLHguJQKK+C4h+C4seC4mQor4LiH4Lix4LiZ4LiH4LiBCivguIfguLHguJoKK+C4h+C4seC4pwor4LiH4Lix4LmI4LinCivguIfguLHguKfguYDguIfguLXguKIKK+C4h+C4seC4p+C4i+C4seC4hwor4LiH4Lix4Lin4LmA4Lil4Li14LiiCivguIfguLIKK+C4h+C5iOC4sgor4LiH4LmJ4Liy4LiHCivguIfguYjguLLguYDguIfguKIKK+C4h+C4suC5hOC4iwor4LiH4Liy4LiZCivguIfguYjguLLguJkKK+C4h+C4suC4muC5hgor4LiH4Liy4LihCivguIfguYjguLLguKEKK+C4h+C4suC4ogor4LiH4LmI4Liy4LiiCivguIfguYjguLLguKLguYnguK3guKIKK+C4h+C5ieC4suC4pwor4LiH4LizCivguIfguYjguLMKK+C4h+C5ieC4swor4LiH4LmI4Liz4LmGCivguIfguLTguYnguKcKK+C4h+C4teC4mgor4LiH4Li24LiB4LmGCivguIfguLbguJkKK+C4h+C4tuC4oQor4LiH4Li24Lih4LiH4LizCivguIfguLjguJQKK+C4h+C4uOC4lOC5hgor4LiH4Li44LiZ4LiH4LiHCivguIfguLjguYjguJnguIfguYjguLLguJkKK+C4h+C4uOC4mgor4LiH4Li44Lia4LmGCivguIfguLjguJrguIfguLTguJoKK+C4h+C4uOC5ieC4oQor4LiH4Li44LmI4Lih4LiH4LmI4Liy4LihCivguIfguLjguKIKK+C4h+C4uQor4LiH4Li54LiaCivguIfguLnguYjguKvguJnguLUKK+C5gOC4h+C5iQor4LmA4LiH4LiBCivguYDguIfguYfguJkKK+C5gOC4h+C4ogor4LmA4LiH4LmI4Lir4Lih4Li24LiHCivguYDguIfguK3guLAKK+C5gOC4h+C4reC4sOC4h+C4sAor4LmA4LiH4LiyCivguYDguIfguYjguLIKK+C5gOC4h+C5ieC4sgor4LmA4LiH4Liy4LiwCivguYDguIfguLTguJkKK+C5gOC4h+C4teC5iOC4ogor4LmA4LiH4Li14LmI4Lii4LiHCivguYDguIfguLXguYjguKLguJkKK+C5gOC4h+C4teC4ouC4mgor4LmA4LiH4Li14LmJ4Lii4LinCivguYDguIfguLXguYnguKLguKfguKPguLDguYDguKPguLTguIcKK+C5gOC4h+C4teC5ieC4ouC4p+C4o+C4s+C4peC4tuC4gQor4LmA4LiH4Li14LmI4Lii4Lir4Li5CivguYDguIfguLfguYnguK0KK+C5gOC4h+C4t+C4reC4gQor4LmA4LiH4Li34LmI4Lit4LiHCivguYDguIfguLfguYjguK3guIfguYYKK+C5gOC4h+C4t+C4reC4lAor4LmA4LiH4Li34Lit4LiU4LiH4LiUCivguYDguIfguLfguK3guJkKK+C5gOC4h+C4t+C5iOC4reC4mQor4LmA4LiH4Li34Lit4LiaCivguYDguIfguLfguYnguK3guKEKK+C5geC4hwor4LmB4LiH4LmICivguYHguIfguYjguIcKK+C5geC4h+C5iOC4mQor4LmB4LiH4LmJ4LihCivguYHguIfguLAKK+C5guC4hwor4LmC4LiH4LmICivguYLguIfguIEKK+C5guC4h+C4geC5gOC4h+C4gQor4LmC4LiH4LiHCivguYLguIfguYnguIcKK+C5guC4h+C5iOC4h+C5hgor4LmC4LiH4LiH4LmA4LiH4LiHCivguYLguIfguYjguIfguYDguIfguYjguIcKK+C5guC4h+C5gOC4hwor4LmC4LiH4LiZCivguYTguIcKK+C5hOC4h+C5iQor4LiICivguIjguIEKK+C4iOC4hwor4LiI4LmI4LiHCivguIjguYvguIcKK+C4iOC4h+C4geC4o+C4oQor4LiI4LiH4LiB4LilCivguIjguIfguIHguKXguJnguLUKK+C4iOC4h+C5guC4hOC4o+C5iOC4hwor4LiI4LiH4Lit4LijCivguIjguIfguK3guLLguIcKK+C4iOC4jQor4LiI4LiUCivguIjguJTguLjguKPguIfguITguYwKK+C4iOC4lOC4uOC4o+C4sAor4LiI4LiV4Li44LiK4Liy4LiV4Li04Liq4Li44LiE4LiZ4LiY4LmMCivguIjguJXguLjguJXguJbguLUKK+C4iOC4leC4uOC4o+C4h+C4hOC5guC4iuC4hAor4LiI4LiV4Li44Lij4Liy4Lia4Liy4Lii4Lig4Li54Lih4Li0CivguIjguJXguLjguKPguLLguKPguLTguKLguKrguLHguIgKK+C4iOC4leC4uOC4quC4lOC4oeC4oOC5jAor4LiI4LiX4Li24LiHCivguIjguJkKK+C4iOC5ieC4mQor4LiI4LiaCivguIjguKEKK+C4iOC5iOC4oQor4LiI4Lih4LijCivguIjguKHguKPguLUKK+C4iOC4oeC4uQor4LiI4Lih4Li54LiBCivguIjguKHguLnguIHguJvguKXguLLguKvguKXguJQKK+C4iOC4oeC4ueC4geC4m+C4peC4suC5hOC4q+C4pQor4LiI4Lih4Li54LiB4Lir4Lil4Lit4LiUCivguIjguKLguLjguJXguLQKK+C4iOC4owor4LiI4Lij4LiBCivguIjguKPguIHguKXguLnguYgKK+C4iOC4o+C4geC4sgor4LiI4Lij4LmB4LiB4Lin4LmI4LiHCivguIjguKPguITguLHguYjguIcKK+C4iOC4o+C4iOC4o+C4seC4pQor4LiI4Lij4LiI4Lix4LiUCivguIjguKPguJPguLAKK+C4iOC4o+C4lAor4LiI4Lij4LiU4LilCivguIjguKPguJrguJkKK+C4iOC4o+C4muC4seC4mQor4LiI4Lij4Lia4Liy4LiXCivguIjguKPguKHguLHguJkKK+C4iOC4o+C4oeC4ueC4gQor4LiI4Lij4Lij4LiI4LiyCivguIjguKPguKPguYLguIjguKkKK+C4iOC4o+C4o+C4oQor4LiI4Lij4Lij4Lii4LiyCivguIjguKPguKPguYLguKXguIcKK+C4iOC4o+C4o+C5iOC4swor4LiI4Lij4Lil4Lin4LiHCivguIjguKPguKXguYjguKfguIcKK+C4iOC4o+C4peC4suC4lAor4LiI4Lij4Lil4Liy4LiiCivguIjguKPguKXguLTguYjguKcKK+C4iOC4o+C4peC4tQor4LiI4Lij4Lil4Li54LmICivguIjguKPguKfguIgKK+C4iOC4o+C4p+C4lAor4LiI4Lij4Lin4LiU4LiI4Lij4Li1CivguIjguKPguKfguLHguIEKK+C4iOC4o+C4qgor4LiI4Lij4Lit4LiBCivguIjguKPguLDguIHguKXguYnguLLguKIKK+C4iOC4o+C4sOC4guC4suC4mgor4LiI4Lij4Liw4LmA4LiC4LmJCivguIjguKPguLDguITguKXguLHguJoKK+C4iOC4o+C4sOC4hOC4peC5ieC4suC4ogor4LiI4Lij4Liw4LiE4Lil4Li44LmI4LihCivguIjguKPguLDguYHguITguIcKK+C4iOC4o+C4sOC4iOC4uOC5iOC4oQor4LiI4Lij4Liw4LiX4LiBCivguIjguKPguLDguYDguJfguLTguJkKK+C4iOC4o+C4sOC4meC4swor4LiI4Lij4Liw4Lia4Liy4LiZCivguIjguKPguLDguJrguLUKK+C4iOC4o+C4sOC4peC4tOC5iOC4hwor4LiI4Lij4Liw4Lil4Li24LiHCivguIjguKPguLDguKXguLjguIcKK+C4iOC4o+C4seC4pQor4LiI4Lij4Lix4LiqCivguIjguKPguLLguIEKK+C4iOC4o+C4suC4hwor4LiI4Lij4Liy4LiI4LijCivguIjguKPguLLguI0KK+C4iOC4o+C4suC4ogor4LiI4Lij4Liy4LinCivguIjguKPguLLguKoKK+C4iOC4o+C4tOC4gQor4LiI4Lij4Li04LiHCivguIjguKPguLTguIfguYYKK+C4iOC4o+C4tOC4kwor4LiI4Lij4Li04LiVCivguIjguKPguLTguKLguLIKK+C4iOC4o+C4tOC4pwor4LiI4Lij4Li1CivguIjguKPguLbguIcKK+C4iOC4o+C4uOC4gQor4LiI4Lij4Li44LiHCivguIjguKPguLnguIcKK+C4iOC4o+C4ueC4jQor4LiI4Lij4Li54LiqCivguIjguYDguKMKK+C4iOC4pQor4LiI4Lil4LiZ4Lie4Lil4Lio4Liy4Liq4LiV4Lij4LmMCivguIjguKXguJnguKjguLLguKrguJXguKPguYwKK+C4iOC4peC4meC4tQor4LiI4Lil4LiyCivguIjguKXguLLguIjguKUKK+C4iOC4p+C4gQor4LiI4LmK4Lin4LiBCivguIjguKfguIcKK+C4iOC5ieC4p+C4hwor4LiI4LmL4Lin4LiHCivguIjguKfguIfguKvguK3guKEKK+C4iOC4p+C4lAor4LiI4Lin4LiU4Lil4Liy4LiBCivguIjguKfguJkKK+C4iOC4p+C4mgor4LiI4Lin4Lix4LiBCivguIjguK0KK+C4iOC5iOC4rQor4LiI4LmJ4LitCivguIjguYvguK0KK+C4iOC4reC4gQor4LiI4LmJ4Lit4LiBCivguIjguYrguK3guIEKK+C4iOC5ieC4reC4geC5hgor4LiI4LmK4Lit4LiB4LmGCivguIjguYnguK3guIHguYHguIjguYnguIEKK+C4iOC5ieC4reC4geC4p+C4reC4gQor4LiI4Lit4LiHCivguIjguYjguK3guIcKK+C4iOC5ieC4reC4hwor4LiI4LmL4Lit4LiHCivguIjguYnguK3guIfguYDguJUKK+C4iOC4reC4h+C5gOC4m+C4o+C4teC4ouC4hwor4LiI4Lit4LiH4Lir4LiH4LmI4Lit4LiHCivguIjguYnguK3guIfguKvguJnguYjguK3guIcKK+C4iOC4reC4h+C4q+C4reC4hwor4LiI4Lit4LmB4LiICivguIjguYvguK3guYHguIjguYsKK+C4iOC5ieC4reC4iuC5ieC4suC4hwor4LiI4Lit4LiUCivguIjguK3guJkKK+C4iOC5ieC4reC4mQor4LiI4Lit4LiZ4LiI4LmI4LitCivguIjguK3guJnguKvguLkKK+C4iOC4reC4mgor4LiI4Lit4LihCivguIjguYjguK3guKEKK+C4iOC5iOC4reC4oeC4iOC5iOC4suC4ogor4LiI4Lit4Lih4LiX4Lit4LiHCivguIjguK3guKHguJvguKXguK3guKEKK+C4iOC5ieC4reC4oeC4m+C5ieC4reC4oQor4LiI4Lit4Lih4LmA4Lib4Liy4LiwCivguIjguK3guKHguKrguLjguKPguLLguIfguITguYwKK+C4iOC5iOC4reC4ogor4LiI4LmJ4Lit4LiiCivguIjguYvguK3guKIKK+C4iOC4sAor4LiI4LmJ4LiwCivguIjguYrguLAKK+C4iOC5i+C4sAor4LiI4Liw4LiB4Lij4Lix4LiU4LiI4Liw4LiB4Lij4Liy4LiUCivguIjguLDguIHguKPguLjguJkKK+C4iOC4sOC4geC4o+C4uOC4oeC4iOC4sOC4geC4o+C4suC4oQor4LiI4Liw4LiB4Lij4Li54LiZCivguIjguLDguIHguKXguLAKK+C4iOC4sOC4geC4p+C4lAor4LiI4Liw4LmA4LiB4Lij4LmH4LiHCivguIjguLDguILguLLguJoKK+C4iOC4sOC5gOC4guC5iQor4LiI4Liw4LmA4LiC4LmH4LiaCivguIjguLDguIfguK3guKIKK+C4iOC4sOC4iOC4sAor4LiI4Liw4LiI4LmJ4LiyCivguIjguLDguYHguIgKK+C4iOC4sOC5geC4iOC5ieC4hwor4LiI4Liw4LmB4LiI4LmJ4LiZCivguIjguLDguYHguIjguYjguKEKK+C4iOC4sOC5hOC4iOC5iQor4LiI4Liw4Lia4Lix4LiZCivguIjguLDguJvguLTguYnguIcKK+C4iOC4sOC5gOC4nuC4peC4tOC4hwor4LiI4Liw4Lil4Liw4LmA4Lih4LmH4LiUCivguIjguLDguKXguLDguKvguKfguLHguYjguJkKK+C4iOC4sOC4peC4uOC4hwor4LiI4Lix4LiBCivguIjguLHguYnguIHguYYKK+C4iOC4seC4geC4geC4suC4ogor4LiI4Lix4LmK4LiB4LiB4Li04LmJ4LihCivguIjguLHguIHguILguLgKK+C4iOC4seC4geC4iOC4seC5iOC4mQor4LiI4Lix4LiB4LiI4Li14LmJCivguIjguLHguYrguIHguIjguLXguYkKK+C4iOC4seC5iuC4geC5gOC4lOC4teC4ouC4oQor4LiI4Lix4LiB4LijCivguIjguLHguIHguKPguJ7guLLguIEKK+C4iOC4seC4geC4o+C4p+C4suC4gQor4LiI4Lix4LiB4Lij4Li04LiZCivguIjguLHguIHguKPguLUKK+C4iOC4seC5iuC4geC5gOC4peC5ieC4rQor4LiI4Lix4LiB4Lip4Li4CivguIjguLHguIHguYHguKvguKXguYjguJkKK+C4iOC4seC4hwor4LiI4Lix4LmJ4LiHCivguIjguLHguYvguIcKK+C4iOC4seC4h+C4geC4p+C4lAor4LiI4Lix4LiH4LiB4Lit4LiaCivguIjguLHguIfguIHguLIKK+C4iOC4seC4h+C4geC4ueC4lAor4LiI4Lix4LiH4LmA4LiBCivguIjguLHguIfguYLguIEKK+C4iOC4seC4h+C5guC4geC5iwor4LiI4Lix4LiH4LmC4LiB4LiP4LiB4LmMCivguIjguLHguIfguIfguLHguIcKK+C4iOC4seC4h+C4oeC4seC4hwor4LiI4Lix4LiH4LmE4LijCivguIjguLHguIfguKXguK3guJkKK+C4iOC4seC4h+C5gOC4p+C5h+C4iAor4LiI4Lix4LiH4Lir4LiZ4Lix4LiaCivguIjguLHguIfguKvguKPguLXguJQKK+C4iOC4seC4h+C4q+C4peC5iOC4rQor4LiI4Lix4LiH4Lir4Lin4LiwCivguIjguLHguIfguKvguKfguLHguJQKK+C4iOC4seC4h+C4q+C4seC4mQor4LiI4Lix4LiH4Lit4Lit4LiZCivguIjguLHguI3guYTguKMKK+C4iOC4seC4k+C4keC5jAor4LiI4Lix4LiT4LiR4Liy4LilCivguIjguLHguJQKK+C4iOC4seC4lOC4iOC4reC4hwor4LiI4Lix4LiV4LiV4Liy4Lis4Li14LiqCivguIjguLHguJXguKfguLIKK+C4iOC4seC4leC4uAor4LiI4Lix4LiV4Li44LijCivguIjguLHguJXguLjguYLguKXguIHguJrguLLguKUKK+C4iOC4seC4leC4uOC4quC4lOC4oeC4oOC5jAor4LiI4Lix4LiZCivguIjguLHguYjguJkKK+C4iOC4seC4meC5guC4iOC4qQor4LiI4Lix4LiZ4LiX4LmMCivguIjguLHguJnguJfguJnguYwKK+C4iOC4seC4meC4l+C4meC4sgor4LiI4Lix4LiZ4LiX4Lij4LmMCivguIjguLHguJnguJfguKPguIHguKXguLIKK+C4iOC4seC4meC4l+C4o+C4geC4qeC4seC4ogor4LiI4Lix4LiZ4LiX4Lij4LiB4Liy4LiZ4LiV4LmMCivguIjguLHguJnguJfguKPguIHguLjguI4KK+C4iOC4seC4meC4l+C4o+C5gOC4geC4leC4uAor4LiI4Lix4LiZ4LiX4Lij4LiE4LiV4Li0CivguIjguLHguJnguJfguKPguITguKPguLLguKoKK+C4iOC4seC4meC4l+C4o+C5gOC4hOC4o+C4suC4sOC4q+C5jAor4LiI4Lix4LiZ4LiX4Lij4LiK4LiZ4LiBCivguIjguLHguJnguJfguKPguJfguLHguIHguKnguLTguJMKK+C4iOC4seC4meC4l+C4o+C4l+C4suC4owor4LiI4Lix4LiZ4LiX4Lij4LiZ4Li04Lig4LiyCivguIjguLHguJnguJfguKPguJrguLjguJXguKMKK+C4iOC4seC4meC4l+C4o+C4m+C4o+C4sOC4oOC4suC4ngor4LiI4Lix4LiZ4LiX4Lij4Lie4Li04Lih4Lie4LmMCivguIjguLHguJnguJfguKPguKDguLLguKoKK+C4iOC4seC4meC4l+C4o+C4oOC4ueC4leC4tAor4LiI4Lix4LiZ4LiX4Lij4Lih4LiT4LiR4LilCivguIjguLHguJnguJfguKPguYDguKHguYfguJQKK+C4iOC4seC4meC4l+C4o+C5gOC4oeC4suC4sOC4q+C5jAor4LiI4Lix4LiZ4LiX4Lij4Lij4Lix4LiV4LiZ4LmMCivguIjguLHguJnguJfguKPguKfguIfguKjguYwKK+C4iOC4seC4meC4l+C4o+C4p+C4o+C4o+C4kwor4LiI4Lix4LiZ4LiX4Lij4LmA4Lio4LiC4LijCivguIjguLHguJnguJfguKPguLLguKPguLQKK+C4iOC4seC4meC4l+C4o+C4uOC4m+C4o+C4suC4hOC4sgor4LiI4Lix4LiZ4LiX4LmC4Lij4LiX4Lix4LiiCivguIjguLHguJnguJfguLHguJkKK+C4iOC4seC4meC4peC4reC4hwor4LiI4Lix4LiZ4LmA4Lil4LiyCivguIjguLHguJnguYDguKXguLLguLAKK+C4iOC4seC5ieC4meC4q+C4peC5iOC4rQor4LiI4Lix4LiZ4Lit4Lix4LiaCivguIjguLHguJoKK+C4iOC4seC4muC4geC4seC4hwor4LiI4Lix4Lia4LiI4LmI4Liy4LiiCivguIjguLHguJrguYDguIjguLXguYvguKLguKcKK+C4iOC4seC4muC4ieC5iOC4suC4ogor4LiI4Lix4Lia4LmA4LiU4Li04LihCivguIjguLHguJrguJvguLTguYnguIcKK+C4iOC4seC4muC5guC4m+C4hwor4LiI4Lix4Lia4Lii4Li14LmI4LiB4Li1CivguIjguLHguJrguKrguLHguYjguJkKK+C4iOC4seC4oeC4muC4gQor4LiI4Lix4Lih4Lib4LiBCivguIjguLHguKHguKHguLAKK+C4iOC4seC5iOC4pwor4LiI4Lix4Lin4LiI4Li14LmK4LiUCivguIjguLHguYrguKfguLAKK+C4iOC4sgor4LiI4LmI4LiyCivguIjguYnguLIKK+C4iOC5i+C4sgor4LiI4Liy4LiBCivguIjguLLguIHguJ7guKPguLLguIEKK+C4iOC4suC4geC4nuC4suC4gQor4LiI4Liy4LiE4LiwCivguIjguLLguITguLUKK+C4iOC4suC4hwor4LiI4LmI4Liy4LiHCivguIjguYnguLLguIcKK+C4iOC4suC4h+C4p+C4suC4hwor4LiI4Liy4LiUCivguIjguLLguJXguLgKK+C4iOC4suC4leC4uOC4o+C4h+C4hOC5jAor4LiI4Liy4LiV4Li44Lij4LiZ4LiV4LmMCivguIjguLLguJXguLjguKPguLHguJnguJXguYwKK+C4iOC4suC4leC4uOC4o+C4tOC4gQor4LiI4Liy4LiZCivguIjguYnguLLguJkKK+C4iOC4suC4mgor4LiI4Liy4Lia4Lix4LilCivguIjguLLguJrguLHguKXguKLguYwKK+C4iOC4suC4mwor4LiI4Liy4Lib4LiE4Li44LiTCivguIjguLLguJvguJjguKMKK+C4iOC4suC4m+C5gOC4p+C4lwor4LiI4Liy4LihCivguIjguLLguKHguIjguLjguKPguLUKK+C4iOC4suC4oeC4owor4LiI4Liy4Lih4Lij4Li1CivguIjguLLguKHguLXguIHguKMKK+C4iOC5iOC4suC4ogor4LiI4Liy4LijCivguIjguYjguLLguKPguIcKK+C4iOC4suC4o+C4p+C4suC4gQor4LiI4Liy4Lij4Liw4LmE4LiZCivguIjguLLguKPguLDguJrguLUKK+C4iOC4suC4o+C4tOC4gQor4LiI4Liy4Lij4Li1CivguIjguLLguKPguLXguJUKK+C4iOC4suC4o+C4tuC4gQor4LiI4Liy4Lij4Li4CivguIjguYnguLLguKXguLDguKvguKfguLHguYjguJkKK+C4iOC4suC4pwor4LiI4LmI4Liy4LinCivguIjguYnguLLguKcKK+C4iOC5iOC4suC4q+C4p+C4seC4gQor4LiI4LizCivguIjguYnguLMKK+C4iOC4s+C4geC4p+C5iOC4sgor4LiI4Liz4LiB4Lix4LiUCivguIjguLPguIfguLLguKIKK+C4iOC5ieC4s+C4iOC4teC5iQor4LiI4Liz4LmA4LiICivguIjguLPguYDguJTguLTguKEKK+C4iOC4s+C4l+C4p+C4ogor4LiI4Liz4LiX4Lix4LiaCivguIjguLPguJfguLLguJoKK+C4iOC4s+C5gOC4l+C4tOC4lAor4LiI4Liz4LmB4LiX4LiHCivguIjguLPguJnguIcKK+C4iOC4s+C4meC4mQor4LiI4Liz4LiZ4Lij4Lij4LiI4LmMCivguIjguLPguJnguKPguKPguIjguLIKK+C4iOC4s+C4meC4p+C4mQor4LiI4Liz4LiZ4Lit4LiHCivguIjguLPguJnguLHguJoKK+C4iOC4s+C4meC4seC4pQor4LiI4Liz4LiZ4LizCivguIjguLPguYDguJnguLXguKLguJkKK+C4iOC4s+C5gOC4meC4teC4ouC4oQor4LiI4Liz4LmA4LiZ4Li14Lii4LijCivguIjguLPguYHguJnguIEKK+C4iOC4s+C5guC4meC4l+C4ouC5jAor4LiI4Liz4Lia4LmI4LihCivguIjguYnguLPguJrguYrguLAKK+C4iOC4s+C4muC4seC4hwor4LiI4Liz4Lia4Lix4LiaCivguIjguLPguYDguJrguKgKK+C4iOC5ieC4s+C5gOC4muC5ieC4sgor4LiI4Liz4LmB4LiaCivguIjguLPguJvguLIKK+C4iOC4s+C4m+C4suC4lOC4sAor4LiI4Liz4Lib4Li1CivguIjguLPguJvguLnguJkKK+C4iOC4s+C4nuC4p+C4gQor4LiI4Liz4LmA4Lie4Liy4LiwCivguIjguLPguYHguJ7guKPguIEKK+C4iOC5ieC4s+C4oeC5iOC4swor4LiI4Liz4Lij4LiUCivguIjguLPguKPguLHguKoKK+C4iOC4s+C4o+C4suC4jQor4LiI4Liz4Lij4Liy4LiiCivguIjguLPguKPguLnguI0KK+C4iOC4s+C5gOC4o+C4tOC4jQor4LiI4Liz4LmA4Lij4Li14Lii4LiHCivguIjguLPguKXguK3guIcKK+C4iOC4s+C4peC4suC4ogor4LiI4Liz4LmA4Lil4Liy4LiwCivguIjguLPguYDguKXguLLguLDguJXguLIKK+C4iOC4s+C5geC4peC4hwor4LiI4Liz4LmB4Lil4LmI4LiZCivguIjguLPguKvguJnguLHguJoKK+C4iOC5i+C4s+C4q+C4meC4seC4mgor4LiI4Liz4Lir4LiZ4LmI4Liy4LiiCivguIjguLPguKvguKPguLAKK+C4iOC4s+C4q+C4peC5iOC4rQor4LiI4Liz4Lir4Lil4Lit4LiBCivguIjguLPguKvguKXguLHguIEKK+C4iOC4s+C4q+C4seC4mQor4LiI4Liz4Lir4Liy4LiiCivguIjguLPguKvguLjguJQKK+C4iOC4s+C5gOC4q+C4teC4ouC4hwor4LiI4Liz4Lit4Lin4LiUCivguIjguLPguK3guLfguYjguJkKK+C4iOC4tAor4LiI4Li04LiBCivguIjguLTguYrguIHguYLguIHguYsKK+C4iOC4tOC5iOC4hwor4LiI4Li04LmJ4LiH4LiI4LiBCivguIjguLTguIfguIjguYnguK0KK+C4iOC4tOC5ieC4h+C4iOC4reC4gQor4LiI4Li04LiH4LiI4Lix4LiHCivguIjguLTguYnguIfguIjguLHguIcKK+C4iOC4tOC4h+C5guC4iOC5iQor4LiI4Li04LmJ4LiH4Lir4Lij4Li14LiUCivguIjguLTguYnguIfguKvguKPguLXguJTguJzguLUKK+C4iOC4tOC4h+C4q+C4seC4mQor4LiI4Li04LiH4Lir4Li44LiZCivguIjguLTguYnguIfguYDguKvguKXguJkKK+C4iOC4tOC4lQor4LiI4Li04LiV4LiB4Liy4LiY4Liy4LiZCivguIjguLTguJXguIHguLbguYjguIfguKrguLPguJnguLbguIEKK+C4iOC4tOC4leC5g+C4iAor4LiI4Li04LiV4LiV4LmMCivguIjguLTguJXguJXguLLguJnguLjguJvguLHguKrguKrguJnguLIKK+C4iOC4tOC4leC4meC4suC4lgor4LiI4Li04LiV4LiZ4Li04Lii4LihCivguIjguLTguJXguJrguLPguJrguLHguJQKK+C4iOC4tOC4leC5geC4nuC4l+C4ouC5jAor4LiI4Li04LiV4Lig4Liy4LieCivguIjguLTguJXguKDguLkKK+C4iOC4tOC4leC4owor4LiI4Li04LiV4Lij4LiI4Li44LilCivguIjguLTguJXguKPguKXguJTguLIKK+C4iOC4tOC4leC4o+C4sgor4LiI4Li04LiV4Lij4Liy4Lij4LiI4Li04LiqCivguIjguLTguJXguYTguKPguYnguKrguLPguJnguLbguIEKK+C4iOC4tOC4leC4p+C4tOC4l+C4ouC4sgor4LiI4Li04LiV4Lin4Li04Liq4Lix4LiiCivguIjguLTguJXguYDguKfguIrguKjguLLguKrguJXguKPguYwKK+C4iOC4tOC4leC4qOC4suC4quC4leC4o+C5jAor4LiI4Li04LiV4Liq4Liz4LiZ4Li24LiBCivguIjguLTguJnguYDguIjguLIKK+C4iOC4tOC4meC4lOC4sgor4LiI4Li04LiZ4LiU4Liy4Liq4LmI4Liy4Lir4Lij4Li1CivguIjguLTguJnguJTguLLguKvguJnguLIKK+C4iOC4tOC4meC4lOC4suC4q+C4o+C4sgor4LiI4Li04LiZ4LiU4Liy4Lit4Lij4Liq4LiyCivguIjguLTguJnguJXguYwKK+C4iOC4tOC4mgor4LiI4Li04LmK4Lia4LiI4LmK4Lit4LiiCivguIjguLTguJvguLLguJbguLAKK+C4iOC4tOC5iOC4oQor4LiI4Li04LmJ4LihCivguIjguLTguYvguKEKK+C4iOC4tOC5ieC4oeC4geC5ieC4reC4hwor4LiI4Li04LmJ4Lih4Lil4Li04LmJ4LihCivguIjguLTguKPguLHguJnguJTguKMKK+C4iOC4tOC4o+C4suC4ouC4uOC4qgor4LiI4Li04LmK4LinCivguIjguLTguYvguKcKK+C4iOC4tQor4LiI4Li14LmICivguIjguLXguYkKK+C4iOC4teC5iwor4LiI4Li14LmL4LiI4LmJ4LitCivguIjguLXguIjguLnguYkKK+C4iOC4teC5iuC4iOC4ueC5iQor4LiI4Li14LmB4LiI4LmK4LiaCivguIjguLXguYrguJQKK+C4iOC4teC4mQor4LiI4Li14LiZ4LmB4LiqCivguIjguLXguJoKK+C4iOC4teC5guC4mgor4LiI4Li14Lie4LijCivguIjguLXguKEKK+C4iOC4teC4p+C4owor4LiI4Li24LiHCivguIjguLbguYjguIcKK+C4iOC4tuC5ieC4hwor4LiI4Li34LiUCivguIjguLfguYnguJnguYDguIjguLfguK3guIEKK+C4iOC4uAor4LiI4Li44LiBCivguIjguLjguYrguIHguIHguKPguLnguYoKK+C4iOC4uOC4geC4iOC4tOC4gQor4LiI4Li44LiB4LiK4Li1CivguIjguLjguIHguJzguLLguKEKK+C4iOC4uOC4geC4nuC4o+C4suC4q+C4oeC4k+C5jAor4LiI4Li44LiB4LmC4Lij4Lir4Li04LiZ4Li1CivguIjguLjguYjguIcKK+C4iOC4uOC5ieC4h+C4iOC4seC4hwor4LiI4Li44LmL4LiH4LiI4Li04LmL4LiHCivguIjguLjguYvguIjguLXguYsKK+C4iOC4uOC4keC4sgor4LiI4Li44LiTCivguIjguLjguJPguJPguLXguKLguJrguJcKK+C4iOC4uOC4lAor4LiI4Li44LiV4Li0CivguIjguLjguJXguLnguJvguJvguLLguJXguI3guLLguJMKK+C4iOC4uOC4l+C4qgor4LiI4Li44LiZCivguIjguLjguYjguJkKK+C4iOC4uOC5ieC4mQor4LiI4Li44LmJ4LiZ4LiI4LmJ4Liy4LiZCivguIjguLjguJnguIjguLnguYsKK+C4iOC4uOC5ieC4meC4iOC4ueC5igor4LiI4Li44LiZ4LiX4LiB4Liy4LijCivguIjguLjguJnguKrguLUKK+C4iOC4uOC4mgor4LiI4Li44LmK4LiaCivguIjguLjguJrguIjguLTguJoKK+C4iOC4uOC5iuC4muC5geC4iOC4hwor4LiI4Li44LmI4LihCivguIjguLjguYnguKEKK+C4iOC4uOC5i+C4oeC4iOC4tOC5i+C4oQor4LiI4Li44Lih4Lie4LiPCivguIjguLjguKHguJ7guKPguKfguJQKK+C4iOC4uOC4oeC4nuC4pQor4LiI4Li44Lih4Lie4Li04LiVCivguIjguLjguKHguYLguJ7guKXguYgKK+C4iOC4uOC5iOC4ogor4LiI4Li44LmJ4LiiCivguIjguLjguKPguJMKK+C4iOC4uOC4o+C4tQor4LiI4Li44LmE4LijCivguIjguLjguKXguIjguK3guKHguYDguIHguKXguYnguLIKK+C4iOC4uOC4peC4p+C4h+C4qOC5jAor4LiI4Li44Lis4LiyCivguIjguLjguKzguLLguKPguLLguIrguKHguJnguJXguKPguLUKK+C4iOC4uQor4LiI4Li54LmICivguIjguLnguYkKK+C4iOC4ueC5iwor4LiI4Li54LiHCivguIjguLnguYnguIjguLXguYkKK+C4iOC4ueC5iuC4lAor4LiI4Li54LiaCivguIjguLnguKPguJMKK+C5gOC4iAor4LmA4LiI4LmKCivguYDguIjguYrguIEKK+C5gOC4iOC5iOC4hwor4LmA4LiI4LmK4LiHCivguYDguIjguYfguJQKK+C5gOC4iOC5h+C4lOC4leC4sOC4hOC4peC4tQor4LmA4LiI4LiU4Li14Lii4LmMCivguYDguIjguJUKK+C5gOC4iOC4leC4meC4sgor4LmA4LiI4LiV4Lie4Lix4LiH4LiE4Li1CivguYDguIjguJXguKHguLnguKXguYDguJ7guKXguLTguIcKK+C5gOC4iOC4leC4quC4tOC4gQor4LmA4LiI4LiV4Li04LiiCivguYDguIjguYLguJXguJvguKPguLTguKLguI3guLLguJMKK+C5gOC4iOC5guC4leC4p+C4tOC4oeC4uOC4leC4tAor4LmA4LiI4LiZCivguYDguIjguYfguJoKK+C5gOC4iOC4o+C4iOC4sgor4LmA4LiI4Lij4Li04LiNCivguYDguIjguKPguLTguJQKK+C5gOC4iOC4o+C4teC4ouC4hwor4LmA4LiI4Lil4Li14Lii4LiHCivguYDguIjguKfguYfguJQKK+C5gOC4iOC4qeC4juC4sgor4LmA4LiI4LmK4Liq4Lix4LinCivguYDguIjguK0KK+C5gOC4iOC5iOC4rQor4LmA4LiI4LmL4LitCivguYDguIjguYvguK3guYDguIjguYrguK3guLAKK+C5gOC4iOC4reC4o+C5jOC5gOC4oeC5gOC4meC4teC4ouC4oQor4LmA4LiI4Lit4LiwCivguYDguIjguLIKK+C5gOC4iOC5iOC4sgor4LmA4LiI4LmJ4LiyCivguYDguIjguYrguLIKK+C5gOC4iOC5ieC4suC4nuC4o+C4sOC4ouC4sgor4LmA4LiI4LmJ4Liy4Lif4LmJ4Liy4Lir4LiN4Li04LiH4Liq4Li04Lij4Li04LiZ4LiY4LijCivguYDguIjguLLguLAKK+C5gOC4iOC4tOC5iOC4hwor4LmA4LiI4Li04LiUCivguYDguIjguLTguYjguJkKK+C5gOC4iOC4tOC4oQor4LmA4LiI4Li14LmK4Lii4LiBCivguYDguIjguLXguKLguIcKK+C5gOC4iOC4teC4ouC4lAor4LmA4LiI4Li14Lii4LiZCivguYDguIjguLXguYvguKLguJkKK+C5gOC4iOC4teC5iuC4ouC4mgor4LmA4LiI4Li14Lii4LihCivguYDguIjguLXguYvguKLguKHguYDguIjguLXguYnguKLguKEKK+C5gOC4iOC4teC4ouC4owor4LmA4LiI4Li14Lii4Lij4Liw4LmE4LiZCivguYDguIjguLXguKLguKPguLDguJrguLLguJQKK+C5gOC4iOC4teC4ouC4pwor4LmA4LiI4Li14LmK4Lii4Lin4LiI4LmK4Liy4LinCivguYDguIjguLfguK0KK+C5gOC4iOC4t+C5iOC4reC4mQor4LmA4LiI4Li34LmJ4Lit4LiiCivguYDguIjguLfguK3guKrguKEKK+C5geC4iAor4LmB4LiI4LmJCivguYHguIjguYsKK+C5geC4iOC4gQor4LmB4LiI4LiHCivguYHguIjguYnguIcKK+C5geC4iOC4h+C4peC4reC4mQor4LmB4LiI4LmK4LiUCivguYHguIjguJTguYHguIjguYkKK+C5geC4iOC5iuC4lOC5geC4iOC5iwor4LmB4LiI4LiV4LijCivguYHguIjguYnguJkKK+C5geC4iOC4mgor4LmB4LiI4LmI4LihCivguYHguIjguYjguKHguIjguLHguJnguJfguKPguYwKK+C5geC4iOC4owor4LmB4LiI4Lij4LiBCivguYHguIjguKPguIcKK+C5geC4iOC4pwor4LmB4LiI4LmJ4LinCivguYHguIjguYvguKcKK+C5geC4iOC5ieC4p+C5hgor4LmB4LiI4LiwCivguYLguIjguIEKK+C5guC4iOC5iuC4gQor4LmC4LiI4LiHCivguYLguIjguIfguIHguKPguLDguYDguJrguJnguJXguLXguYDguKvguKXguYfguIEKK+C5guC4iOC5iOC4h+C4hOC4o+C4tuC5iOC4oQor4LmC4LiI4LmL4LiH4LiE4Lij4Li24LmI4LihCivguYLguIjguYjguIfguITguKPguLjguYjguKEKK+C5guC4iOC4h+C5guC4hOC4o+C5iOC4hwor4LmC4LiI4LmL4LiH4LmA4LiI4LmL4LiHCivguYLguIjguYjguIfguYHguIjguYnguIcKK+C5guC4iOC4lwor4LmC4LiI4LiX4LiB4LmMCivguYLguIjguJfguJnguLIKK+C5guC4iOC4l+C4ouC5jAor4LmC4LiI4LiZCivguYLguIjguKEKK+C5guC4iOC4owor4LmC4LiI4Lij4LiB4Lij4Lij4LihCivguYLguIjguKUKK+C5guC4iOC4qQor4LmC4LiI4Lip4LiI4Lix4LiZCivguYPguIgKK+C5hOC4iAor4LmE4LiI4LmJCivguYTguIjguYnguYYKK+C5hOC4iOC4owor4LiJCivguInguIEKK+C4ieC4geC4oeC4suC4p+C4iOC4owor4LiJ4LiB4Lij4Lij4LiI4LmMCivguInguIHguLLguIgKK+C4ieC4geC4suC4iOC4ieC4geC4o+C4o+C4iOC5jAor4LiJ4LiB4Liy4Lih4Liy4Lie4LiI4LijCivguInguIfguJkKK+C4ieC4h+C4suC4ogor4LiJ4LiT4LiwCivguInguJfguKfguLLguKMKK+C4ieC4l+C4sAor4LiJ4LiX4Liy4LiZ4Lio4Liy4Lil4LiyCivguInguJfguLbguIcKK+C4ieC4meC4p+C4mQor4LiJ4LiZ4Lix4LiHCivguInguJnguLLguIEKK+C4ieC4meC4swor4LiJ4Lia4LiaCivguInguJrguLHguIcKK+C4ieC4muC4seC4lAor4LiJ4Lia4Lix4LiaCivguInguJrguLMKK+C4ieC4oQor4LiJ4Lih4LiaCivguInguKHguKfguIEKK+C4ieC4oeC4p+C4ogor4LiJ4Lih4LmI4Lit4LiHCivguInguKHguLHguIcKK+C4ieC4oeC4seC4mQor4LiJ4Lih4LiyCivguInguKHguLMKK+C4ieC4pQor4LiJ4Lil4Lin4LiiCivguInguKXguK3guIcKK+C4ieC4peC4reC4oQor4LiJ4Lil4Lix4LiBCivguInguKXguLHguJoKK+C4ieC4peC4suC4gQor4LiJ4Lil4Liy4LiB4Lia4Liy4LiHCivguInguKXguLLguIcKK+C4ieC4peC4suC4lAor4LiJ4Lil4Liy4LihCivguInguKXguLLguKIKK+C4ieC4peC4tOC4pwor4LiJ4Lil4Li14LiBCivguInguKXguLgKK+C4ieC4peC4uOC4geC4ieC4peC4p+C4ogor4LiJ4Lil4Li5CivguInguKfguKIKK+C4ieC4p+C4sAor4LiJ4Lin4Lix4LiU4LmA4LiJ4Lin4Li14Lii4LiZCivguInguKfguLLguIcKK+C4ieC4p+C4tQor4LiJ4Liq4LiBCivguInguKzguKDguLTguI3guYLguI0KK+C4ieC5ieC4rQor4LiJ4Lit4LiBCivguInguK3guIHguKnguLHguJXguKPguLTguKLguYwKK+C4ieC5iOC4reC4hwor4LiJ4Lit4LiU4LmGCivguInguLAKK+C4ieC4sOC4geC4sAor4LiJ4Liw4LiJ4Liy4LiUCivguInguLDguInguLLguJkKK+C4ieC4sOC4ieC5iOC4swor4LiJ4Liw4LiJ4Li14LmICivguInguLDguYDguInguLfguYjguK3guKIKK+C4ieC4sOC4leC5ieC4sgor4LiJ4Liw4LiZ4Lix4LmJ4LiZCivguInguLDguJnguLXguYkKK+C4ieC4sOC4reC5ieC4reC4mQor4LiJ4Lix4LiB4LiB4LiwCivguInguLHguJAKK+C4ieC4seC4kOC4oeC4sAor4LiJ4Lix4LiUCivguInguLHguJXguKMKK+C4ieC4seC4l+C4l+C4seC4meC4leC5jAor4LiJ4Lix4LiZCivguInguLHguJnguJfguYwKK+C4ieC4seC4meC4l+C4sAor4LiJ4Lix4LiZ4LiX4Li04LiVCivguInguLHguJnguKfguLjguJLguLQKK+C4ieC4seC4mgor4LiJ4Lix4Lia4LmGCivguInguLHguJ7guJ7guKPguKPguJPguKPguLHguIfguKrguLUKK+C4ieC4seC4ouC4ouC4sgor4LiJ4Liy4LiBCivguInguLLguIcKK+C4ieC5iOC4suC4hwor4LiJ4LmI4Liy4LiJ4Liy4LinCivguInguLLguJQKK+C4ieC4suC4lOC4ieC4suC4mQor4LiJ4Liy4LiV4LiB4Lig4Lix4LiiCivguInguLLguJfguJnguLAKK+C4ieC4suC4mQor4LiJ4Liy4LiaCivguInguLLguJrguInguKfguKIKK+C4ieC4suC4mwor4LiJ4Liy4LiiCivguInguLLguKLguLIKK+C4ieC4suC4o+C4tOC4geC4sgor4LiJ4Liy4LinCivguInguYjguLMKK+C4ieC4s+C4ieC4sgor4LiJ4Liz4LmA4LiJ4LiHCivguInguLPguYHguInguLAKK+C4ieC4tOC5iOC4hwor4LiJ4Li04LiZCivguInguLTguJnguJfguYwKK+C4ieC4tOC4mgor4LiJ4Li04Lih4Lie4Lil4Li1CivguInguLTguKcKK+C4ieC4teC5iAor4LiJ4Li14LiBCivguInguLXguJQKK+C4ieC4uAor4LiJ4Li44LiBCivguInguLjguJQKK+C4ieC4uOC4mQor4LiJ4Li44LibCivguInguLjguKIKK+C4ieC4uOC4ouC4ieC4suC4ogor4LiJ4Li44Lij4Li04LiB4LiyCivguInguLnguYgKK+C4ieC4ueC5iOC4ieC4teC5iAor4LiJ4Li54LiUCivguInguLnguJTguInguLLguJQKK+C5gOC4iQor4LmA4LiJ4LiBCivguYDguInguYLguIEKK+C5gOC4ieC5iOC4hwor4LmA4LiJ4LiUCivguYDguInguJcKK+C5gOC4ieC4meC4teC4ouC4mQor4LmA4LiJ4Lie4Liy4LiwCivguYDguInguKIKK+C5gOC4ieC4peC4ogor4LmA4LiJ4Lil4LinCivguYDguInguKXguLIKK+C5gOC4ieC4peC4tOC4oQor4LmA4LiJ4Lil4Li14LmI4LiiCivguYDguInguKXguLXguKLguIcKK+C5gOC4ieC4peC4teC5iOC4ouC4hwor4LmA4LiJ4Lil4Li14Lii4LiaCivguYDguInguKXguLXguKLguKcKK+C5gOC4ieC4p+C4teC4ouC4hwor4LmA4LiJ4Lin4Li14Lii4LiZCivguYDguInguK3guLAKK+C5gOC4ieC4sgor4LmA4LiJ4Liy4LiB4LmK4Lin4LiiCivguYDguInguLLguYLguInguJQKK+C5gOC4ieC4suC4ruC4t+C5ieC4rQor4LmA4LiJ4Liy4LiwCivguYDguInguLTguJQKK+C5gOC4ieC4tOC4mgor4LmA4LiJ4Li04Lia4LmGCivguYDguInguLXguKLguIcKK+C5gOC4ieC4teC4ouC4h+C4nuC4o+C5ieC4suC4lOC4swor4LmA4LiJ4Li14Lii4LiH4Lie4Lij4LmJ4Liy4LiZ4Liy4LiH4LmB4LitCivguYDguInguLXguKLguIfguJ7guKPguYnguLLguKHguK3guI0KK+C5gOC4ieC4teC4ouC4lAor4LmA4LiJ4Li14Lii4LiaCivguYDguInguLXguYjguKLguKcKK+C5gOC4ieC4t+C4reC4mQor4LmA4LiJ4Li34LmI4Lit4LiiCivguYHguIkKK+C5geC4ieC5iAor4LmB4LiJ4LiBCivguYHguInguIHguYYKK+C5geC4ieC4hwor4LmB4LiJ4LmI4LiHCivguYHguInguKXguJoKK+C5geC4ieC4peC5ieC4oQor4LmB4LiJ4Lil4LmJ4Lih4LmB4LiK4LmI4Lih4LiK4LmJ4Lit4LiiCivguYHguInguKXguLAKK+C5geC4ieC4pwor4LmB4LiJ4LiwCivguYLguIkKK+C5guC4ieC5iAor4LmC4LiJ4LmA4LiBCivguYLguInguYjguIfguInguYjguLLguIcKK+C5guC4ieC4h+C5gOC4ieC4hwor4LmC4LiJ4LiUCivguYLguInguJnguJQKK+C5guC4ieC4mgor4LmC4LiJ4LmA4Lia4LmKCivguYLguInguKEKK+C5guC4ieC4oeC4h+C4suC4oQor4LmC4LiJ4Lil4LiBCivguYTguInguJkKK+C5hOC4ieC5hOC4pQor4LiKCivguIrguIEKK+C4iuC4geC4sgor4LiK4LiE4LijCivguIrguITguLHguJUKK+C4iuC4hOC4seC4lwor4LiK4LiE4Lix4LiZCivguIrguIcKK+C4iuC4h+C4hOC4sgor4LiK4LiH4LmC4LiECivguIrguIfguIbguYwKK+C4iuC4h+C4huC4sgor4LiK4LiO4LiyCivguIrguI7guLTguKUKK+C4iuC4lAor4LiK4LiX4Li24LiHCivguIrguJkKK+C4iuC4meC4gQor4LiK4LiZ4LiB4LiB4Lij4Lij4LihCivguIrguJnguJnguLUKK+C4iuC4meC4muC4lwor4LiK4LiZ4Lih4LmMCivguIrguJnguKfguJkKK+C4iuC4meC4sAor4LiK4LiZ4Lix4LiBCivguIrguJnguLIKK+C4iuC4meC4suC4hwor4LiK4LiZ4Li0CivguIrguJnguLTguIEKK+C4iuC4meC4tOC4geC4sgor4LiK4LiZ4Li04LiUCivguIrguJnguLTguJTguLIKK+C4iuC4meC4tOC4qAor4LiK4LmA4LiZ4LiV4LiV4Li1CivguIrguJrguLIKK+C4iuC4m+C4mQor4LiK4Lib4LmC4Lii4LiECivguIrguKEKK+C4iuC4oeC4iuC4p+C4mQor4LiK4Lih4LiU4LiK4Lih4LmJ4Lit4LiiCivguIrguKHguJnguLLguJQKK+C4iuC4oeC4mgor4LiK4Lih4Lie4Li5CivguIrguKHguJ7guLnguYgKK+C4iuC4oeC4nuC4ueC4nuC4suC4lOC4muC5iOC4sgor4LiK4Lih4Lij4LihCivguIrguKHguYDguKXguLLguLAKK+C4iuC4oeC4quC4p+C4meC4quC4p+C4o+C4o+C4hOC5jAor4LiK4Lih4LmJ4Lit4LiiCivguIrguKHguLHguJkKK+C4iuC4oeC4sgor4LiK4Lih4LmJ4Liy4LiiCivguIrguYTguKEKK+C4iuC4ogor4LiK4Lii4Lix4Lih4Lia4LiU4Li1CivguIrguKLguLIKK+C4iuC4ouC4uOC4leC4tAor4LiK4LmC4LiiCivguIrguKMKK+C4iuC4o+C4leC4sgor4LiK4Lij4LiX4Li24LiHCivguIrguKPguYLguKHguKUKK+C4iuC4o+C5hOC4oQor4LiK4Lij4Lij4Liy4LiHCivguIrguKPguKPguLTguJkKK+C4iuC4o+C5geC4o+C4hwor4LiK4Lij4LmB4Lij4LmI4LiHCivguIrguKPguYDguKXguLfguK3guJQKK+C4iuC4o+C5guC4peC4hwor4LiK4Lij4Lit4LiB4LiK4Lij4Lix4LiHCivguIrguKPguK3guK3guJoKK+C4iuC4o+C4reC4seC4lAor4LiK4Lij4Lit4LmI4LizCivguIrguKPguK3guLfguYnguK0KK+C4iuC4o+C4reC4uOC5iOC4oQor4LiK4Lij4LiwCivguIrguKPguLDguIfguKEKK+C4iuC4o+C4sOC4h+C5iOC4reC4mQor4LiK4Lij4Liw4LiH4LizCivguIrguKPguLDguJTguLHguJQKK+C4iuC4o+C4sOC4lOC4t+C5iOC4mQor4LiK4Lij4Liw4LmA4LiU4Li14Lii4LiUCivguIrguKPguLDguJrguK3guJoKK+C4iuC4o+C4sOC4muC4suC4mgor4LiK4Lij4Liw4Lih4LiUCivguIrguKPguLDguKHguLHguKcKK+C4iuC4o+C4sOC4oeC4t+C5iOC4mQor4LiK4Lij4Liw4Lih4Li44LiB4LiK4Lij4Liw4Lih4Lit4LihCivguIrguKPguLDguKHguLjguYjguJkKK+C4iuC4o+C4sOC5gOC4oeC4teC4ouC4hwor4LiK4Lij4Liw4LmA4Lih4Li14Lii4LiZCivguIrguKPguLDguKXguK0KK+C4iuC4o+C4sOC4peC4reC4hwor4LiK4Lij4Liw4Lil4LmI4Lit4LiHCivguIrguKPguLDguKXguLHguYjguIcKK+C4iuC4o+C4sOC4peC4seC4lAor4LiK4Lij4Liw4Lil4LmJ4LizCivguIrguKPguLDguKXguLgKK+C4iuC4o+C4sOC5geC4peC4hwor4LiK4Lij4Liw4Lit4Lix4LiaCivguIrguKPguLDguK3guLLguJoKK+C4iuC4o+C4sOC5gOC4reC4oQor4LiK4Lij4Lix4LiUCivguIrguKPguLHguKcKK+C4iuC4o+C4sgor4LiK4Lij4Liy4LiB4Liy4LiB4Li1CivguIrguKPguLLguJoKK+C4iuC4o+C4suC4muC4iuC4o+C4seC4mgor4LiK4Lij4Liy4Lii4Li4CivguIrguKPguLTguJkKK+C4iuC4o+C4uOC4gQor4LiK4Lij4Li54LiaCivguIrguKUKK+C4iuC4peC4tQor4LiK4Lil4Li54LiB4LiyCivguIrguYDguKUKK+C4iuC5guC4peC4hwor4LiK4LmC4Lil4LihCivguIrguYjguKfguIcKK+C4iuC5iOC4p+C4h+C4l+C4o+C4seC4nuC4ouC5jAor4LiK4LmI4Lin4LiH4Liq4Li04LiX4LiY4Li04LmMCivguIrguKfguJQKK+C4iuC4p+C4mQor4LiK4Lin4LiiCivguIrguYjguKfguKIKK+C4iuC4p+C4owor4LiK4Lin4Lil4Li04LiVCivguIrguKfguLHguIEKK+C4iuC4p+C4sgor4LiK4Lin4Liy4LilCivguIrguKfguLLguKXguLIKK+C4iuC5geC4p+C4hwor4LiK4LmI4LitCivguIrguK3guIEKK+C4iuC5h+C4reC4gQor4LiK4LmH4Lit4LiB4LiB4Liy4Lij4Li1CivguIrguYfguK3guIHguYLguIHguYDguKXguJUKK+C4iuC5h+C4reC4geC5guC4geC5geC4peC4lQor4LiK4Lit4LiHCivguIrguYjguK3guIcKK+C4iuC5ieC4reC4hwor4LiK4LmJ4Lit4LiH4LiZ4Liy4LiHCivguIrguYnguK3guIfguJnguLLguIfguITguKXguLXguYgKK+C4iuC5ieC4reC4h+C5geC4oeC4pwor4LiK4Lit4LiZCivguIrguYjguK3guJkKK+C4iuC5ieC4reC4mQor4LiK4LmJ4Lit4LiZ4LiZ4Liy4LiHCivguIrguK3guJoKK+C4iuC4reC4oQor4LiK4LmI4Lit4LiiCivguIrguYnguK3guKIKK+C4iuC5ieC4reC4ouC4iuC5iOC4suC4h+C4o+C4swor4LiK4LmJ4Lit4Lii4LiZ4Liy4LiH4Lij4LizCivguIrguK3guKXguYzguIEKK+C4iuC4reC5iOC4swor4LiK4Lit4Li34LmJ4LitCivguIrguK3guLjguYjguKEKK+C4iuC4sAor4LiK4Liw4LiE4Lij4Liy4LihCivguIrguLDguIfguK3guIEKK+C4iuC4sOC4h+C5iOC4reC4mQor4LiK4Liw4LiH4Lix4LiBCivguIrguLDguIfguLHguJQKK+C4iuC4sOC4h+C4suC4mgor4LiK4Liw4LiH4LmJ4LizCivguIrguLDguIfguLjguYnguKEKK+C4iuC4sOC5gOC4h+C5ieC4rQor4LiK4Liw4LmA4LiH4Li34LmJ4Lit4LihCivguIrguLDguYHguIfguYkKK+C4iuC4sOC5guC4h+C4gQor4LiK4Liw4LiJ4LmI4LiyCivguIrguLDguIrguYjguK3guIcKK+C4iuC4sOC4iuC5ieC4sgor4LiK4Liw4LiK4Li04LiUCivguIrguLDguJTguLXguIrguLDguKPguYnguLLguKIKK+C4iuC4sOC5guC4lAor4LiK4Liw4LiV4LiyCivguIrguLDguJXguYnguLIKK+C4iuC4sOC4meC4tQor4LiK4Liw4LiZ4Li44LiHCivguIrguLDguYDguJnguLLguLAKK+C4iuC4sOC4nuC4peC4uQor4LiK4Liw4LmA4Lie4Lil4Li04LiHCivguIrguLDguKHguJQKK+C4iuC4sOC4oeC4lOC4leC5ieC4mQor4LiK4Liw4Lih4LiaCivguIrguLDguKHguKfguIcKK+C4iuC4sOC4oeC4seC4hwor4LiK4Liw4Lih4Lix4LiUCivguIrguLDguYHguKHguYgKK+C4iuC4sOC4o+C4reC4ogor4LiK4Liw4Lil4LitCivguIrguLDguKXguK3guKEKK+C4iuC4sOC4peC4sOC4geC4sgor4LiK4Liw4Lil4LmI4LiyCivguIrguLDguKXguLTguJkKK+C4iuC4sOC4peC4ueC4lAor4LiK4Liw4LmA4Lil4LiHCivguIrguLDguYDguKXguKIKK+C4iuC4sOC5geC4peC5h+C4gQor4LiK4Liw4LmB4Lil4LiHCivguIrguLDguKfguLHguIcKK+C4iuC4sOC4p+C4suC4gQor4LiK4Liw4Lin4Liy4LiUCivguIrguLDguKfguLjguYnguIcKK+C4iuC4sOC5gOC4p+C4tOC4geC4iuC4sOC4p+C4suC4gQor4LiK4Liw4LmB4Lin4LiHCivguIrguLDguK3guKEKK+C4iuC4sOC4reC5ieC4reC4mQor4LiK4Liw4LmA4Lit4LihCivguIrguLDguYLguK3guJkKK+C4iuC4seC4gQor4LiK4Lix4LiB4LiE4Lij4Liy4LihCivguIrguLHguIHguIrguYnguLIKK+C4iuC4seC4geC4q+C4meC5ieC4sgor4LiK4Lix4LiHCivguIrguLHguYjguIcKK+C4iuC4seC4h+C4hOC4sgor4LiK4Lix4LiH4LmA4LiG4Lii4Lii4LiB4LiwCivguIrguLHguIrguKfguLLguKUKK+C4iuC4seC4jwor4LiK4Lix4LiUCivguIrguLHguJTguIrguYnguLIKK+C4iuC4seC4mQor4LiK4Lix4LmJ4LiZCivguIrguLHguJnguIHguLLguJQKK+C4iuC4seC4meC4iuC4tQor4LiK4Lix4LiZ4LiV4Liy4LiG4LijCivguIrguLHguJnguJXguLgKK+C4iuC4seC4meC4meC4sOC4leC4uAor4LiK4Lix4LiZ4LiZ4Li4CivguIrguLHguJnguJnguLjguIHguLAKK+C4iuC4seC4meC5guC4o+C4hwor4LiK4Lix4LiZ4Lip4LiyCivguIrguLHguJnguKrguLnguJXguKMKK+C4iuC4seC4m+C4mQor4LiK4Lix4LieCivguIrguLHguKHguJ7guLnguJnguJcKK+C4iuC4seC4ogor4LiK4Lix4Lii4LiB4Lij4Liw4Liq4LieCivguIrguLHguKLguJrguLLguJkKK+C4iuC4seC4ouC4nuC4pOC4geC4qeC5jAor4LiK4Lix4Lii4Lig4Li54Lih4Li0CivguIrguLHguKLguYDguKDguKPguLUKK+C4iuC4seC4ouC4oeC4h+C4hOC4pQor4LiK4Lix4Lii4Lih4LiH4LiE4Lil4LiE4Liy4LiW4LiyCivguIrguLHguKXguKXguLjguIHguLIKK+C4iuC4seC5iOC4pwor4LiK4Lix4LmJ4LinCivguIrguLHguKfguIrguKEKK+C4iuC4seC5iOC4p+C5geC4leC5iOC4p+C5iOC4sgor4LiK4LiyCivguIrguYnguLIKK+C4iuC4suC4hOC4owor4LiK4Liy4LiE4Lij4Li04LiVCivguIrguLLguITguKPguLTguKLguLLguJnguLjguYLguKLguIQKK+C4iuC5iOC4suC4hwor4LiK4LmJ4Liy4LiHCivguIrguYnguLLguIfguIHguKPguLAKK+C4iuC5iOC4suC4h+C4geC4o+C4sOC5hOC4owor4LiK4LmJ4Liy4LiH4LiU4LizCivguIrguYnguLLguIfguYHguJTguIcKK+C4iuC5iOC4suC4h+C4l+C4reC4hwor4LiK4LmI4Liy4LiH4LiZ4LmJ4Liy4LinCivguIrguYnguLLguIfguYDguJzguLfguK3guIEKK+C4iuC5iOC4suC4h+C5gOC4q+C4peC5h+C4gQor4LiK4LmJ4Liy4LiK4LmI4Lit4LiZCivguIrguLLguI0KK+C4iuC4suC4lAor4LiK4Liy4LiU4LiBCivguIrguLLguJXguJrguLjguKnguKLguYwKK+C4iuC4suC4leC4o+C4tQor4LiK4Liy4LiV4LiwCivguIrguLLguJXguLIKK+C4iuC4suC4leC4tAor4LiK4Liy4LiV4Li04LiY4Lij4Lij4LihCivguIrguLLguJXguLTguJ7guLHguJnguJjguLjguYwKK+C4iuC4suC4leC4tOC4nuC4seC4meC4mOC4uOC5jOC4p+C4o+C4o+C4k+C4meC4sgor4LiK4Liy4LiV4Li04Lie4Lix4LiZ4LiY4Li44LmM4Lin4Li04LiX4Lii4LiyCivguIrguLLguJXguLTguKDguLnguKHguLQKK+C4iuC4suC4leC4tOC4oeC4suC4peC4sgor4LiK4Liy4LiV4Li04Lij4LiqCivguIrguLLguJXguLTguKrguLHguKHguJrguLHguJnguJnguYwKK+C4iuC4suC4mQor4LiK4Liy4LiZ4Lin4Liy4LiX4Li04LiBCivguIrguLLguJnguLgKK+C4iuC4suC4meC4uOC4geC4sAor4LiK4LmJ4Liy4Lib4Li14LmICivguIrguYnguLLguJvguLXguYjguYTguKvguJkKK+C4iuC5ieC4suC5geC4m+C5ieC4mQor4LiK4LmJ4Liy4Lie4Lil4Li5CivguIrguLLguKEKK+C4iuC4suC4oeC4nuC4ueC4meC4lwor4LiK4Liy4Lih4Liy4LiU4LijCivguIrguLLguKHguLLguJTguLIKK+C4iuC4suC4oeC4suC4leC4uAor4LiK4Liy4LiiCivguIrguLLguKLguJjguIcKK+C4iuC4suC4ouC4nOC5ieC4suC4quC4teC4lOC4sgor4LiK4Liy4Lii4LiyCivguIrguLLguKMKK+C4iuC4suC4o+C4tQor4LiK4Liy4LilCivguIrguLLguKXguLIKK+C4iuC4suC4peC4tOC4meC4tQor4LiK4LmJ4Liy4LmA4Lil4Li34Lit4LiUCivguIrguLLguKcKK+C4iuC4suC4p+C4tQor4LiK4Liy4Lir4LmMCivguIrguYnguLLguKvguKHguK3guIcKK+C4iuC4suC4q+C4o+C4seC4meC4meC4suC4p+C4tQor4LiK4LizCivguIrguYjguLMKK+C4iuC5ieC4swor4LiK4Liz4LiH4Lix4LiUCivguIrguLPguIfguLLguKIKK+C4iuC4s+C4h+C4t+C4rQor4LiK4LmI4Liz4LiK4Lit4LiHCivguIrguYjguLPguIrguYjguLIKK+C4iuC4s+C4meC4mQor4LiK4Liz4LiZ4Lij4LijCivguIrguLPguJnguLAKK+C4iuC4s+C4meC4seC4jQor4LiK4Liz4LiZ4Lix4LiZCivguIrguLPguJnguLLguI0KK+C4iuC4s+C4meC4tAor4LiK4Liz4LmA4LiZ4Li14Lii4LiZCivguIrguLPguYDguJnguLXguKLguKMKK+C4iuC4s+C4oeC4sOC4meC4suC4lAor4LiK4Liz4Lih4Liw4LmA4Lil4Li14Lii4LiHCivguIrguLPguKPguYjguKfguKIKK+C4iuC4s+C4o+C4sAor4LiK4LmJ4Liz4Lij4Lix4LmI4LinCivguIrguLPguKPguLjguJQKK+C4iuC4s+C5gOC4o+C4sgor4LiK4Liz4LmA4Lij4Liy4LiwCivguIrguLPguKXguLIKK+C4iuC4s+C5gOC4peC4t+C4reC4hwor4LiK4Liz4LmB4Lir4Lil4LiwCivguIrguLQKK+C4iuC4tOC4hwor4LiK4Li04LmI4LiHCivguIrguLTguIfguIrguLHguIcKK+C4iuC4tOC4h+C4iuC4seC4mQor4LiK4Li04LiH4LiK4LmJ4LiyCivguIrguLTguIfguIrguYnguLLguIrguLLguKXguLUKK+C4iuC4tOC4h+C4iuC4teC5iAor4LiK4Li04LiH4Lie4Lil4LiaCivguIrguLTguIfguK7guLfguYnguK0KK+C4iuC4tOC4iuC4sAor4LiK4Li04LiK4Li0CivguIrguLTguJPguJPguLAKK+C4iuC4tOC4lAor4LiK4Li04LmA4LiU4LiZ4LiX4Lij4Li14Lii4LmMCivguIrguLTguJUKK+C4iuC4tOC4mQor4LiK4Li04LmI4LiZCivguIrguLTguYnguJkKK+C4iuC4tOC4meC5guC4lQor4LiK4Li04LiZ4Lia4Li44LiV4LijCivguIrguLTguJnguKrguLLguKrguJnguYwKK+C4iuC4tOC4oQor4LiK4Li04Lih4LmB4Lib4LiZ4LiL4Li1CivguIrguLTguKLguLIKK+C4iuC4tOC4o+C4k+C4sAor4LiK4Li04Lij4LiwCivguIrguLTguKfguKvguLIKK+C4iuC4tOC4quC4sgor4LiK4Li1CivguIrguLXguYgKK+C4iuC4teC5iQor4LiK4Li14LieCivguIrguLXguJ/guK3guIcKK+C4iuC4teC4o+C4kwor4LiK4Li14Lij4LiwCivguIrguLXguKfguLAKK+C4iuC4teC4reC4sOC4q+C5jAor4LiK4Li34LiUCivguIrguLfguYjguJkKK+C4iuC4t+C5ieC4mQor4LiK4Li34LmI4LitCivguIrguLfguYnguK0KK+C4iuC4uAor4LiK4Li44LiBCivguIrguLjguIHguIrguLUKK+C4iuC4uOC5iOC4hwor4LiK4Li44LmJ4LiHCivguIrguLjguJQKK+C4iuC4uOC4leC4tAor4LiK4Li44LiZCivguIrguLjguJoKK+C4iuC4uOC4muC4iuC4uQor4LiK4Li44LihCivguIrguLjguYjguKEKK+C4iuC4uOC4oeC4meC4uOC4oQor4LiK4Li44Lih4Lie4LijCivguIrguLjguKHguJ7guLIKK+C4iuC4uOC4oeC5gOC4nuC5h+C4lAor4LiK4Li44Lih4LmB4Lie4Lij4LiBCivguIrguLjguKHguKPguLjguKEKK+C4iuC4uOC4oeC4quC4suC4ogor4LiK4Li44Lih4LmB4Liq4LiHCivguIrguLjguKHguYDguKvguYfguJQKK+C4iuC4uOC5iOC4ogor4LiK4Li44LmI4Lii4LmGCivguIrguLjguKXguKHguLjguJkKK+C4iuC4uOC4peC4tQor4LiK4Li44Lip4LiT4LiwCivguIrguLkKK+C4iuC4ueC5iQor4LmA4LiK4LmH4LiECivguYDguIrguYnguIcKK+C5gOC4iuC4h+C5gOC4peC4hwor4LmA4LiK4LmJ4LiH4Lin4Lix4LiaCivguYDguIrguYfguJQKK+C5gOC4iuC5h+C4lOC4q+C4meC5ieC4sgor4LmA4LiK4LiZCivguYDguIrguYjguJkKK+C5gOC4iuC4ogor4LmA4LiK4Lij4LiyCivguYDguIrguKPguLLguLAKK+C5gOC4iuC4o+C4tOC4lAor4LmA4LiK4Lil4LiHCivguYDguIrguKXguKIKK+C5gOC4iuC4peC5geC4peC5h+C4gQor4LmA4LiK4Lil4Li14Lii4LiHCivguYDguIrguKfguIcKK+C5gOC4iuC4qeC4kOC4sgor4LmA4LiK4LitCivguYDguIrguYjguLIKK+C5gOC4iuC5ieC4sgor4LmA4LiK4Liy4Lin4LmMCivguYDguIrguLLguKfguJnguYwKK+C5gOC4iuC4tOC4hwor4LmA4LiK4Li04LiH4LiB4LilCivguYDguIrguLTguIfguIvguYnguK3guJkKK+C5gOC4iuC4tOC4h+C5gOC4lOC4teC4ouC4pwor4LmA4LiK4Li04LiH4LmA4LiU4Li14LmI4Lii4LinCivguYDguIrguLTguIfguKHguLjguKEKK+C5gOC4iuC4tOC4h+C5gOC4p+C4teC4ouC4mQor4LmA4LiK4Li04LiH4Lit4Lij4Lij4LiWCivguYDguIrguLTguI0KK+C5gOC4iuC4tOC4lAor4LmA4LiK4Li04LmJ4LiVCivguYDguIrguLXguKIKK+C5gOC4iuC4teC5ieC4ogor4LmA4LiK4Li14Lii4LiHCivguYDguIrguLXguYjguKLguJkKK+C5gOC4iuC4teC5iOC4ouC4meC4q+C4oeC4suC4gQor4LmA4LiK4Li14Lii4LiaCivguYDguIrguLXguYjguKLguKEKK+C5gOC4iuC4teC4ouC4owor4LmA4LiK4Li14Lii4Lij4LmMCivguYDguIrguLXguKLguKPguJPguYwKK+C5gOC4iuC4teC4ouC4pwor4LmA4LiK4Li14LmI4Lii4LinCivguYDguIrguLfguYjguK0KK+C5gOC4iuC4t+C5ieC4rQor4LmA4LiK4Li34Lit4LiBCivguYDguIrguLfguYjguK3guIcKK+C5gOC4iuC4t+C5iOC4reC4h+C4iuC5ieC4sgor4LmA4LiK4Li34Lit4LiUCivguYDguIrguLfguK3guJkKK+C5gOC4iuC4t+C5iOC4reC4oQor4LmA4LiK4Li34LmI4Lit4Lin4Lix4LiZCivguYHguIoKK+C5geC4iuC5iAor4LmB4LiK4LmI4LiHCivguYHguIrguIfguKHguLIKK+C5geC4iuC4muC5iuC4p+C4ogor4LmB4LiK4LmI4LihCivguYHguIrguKHguYDguJvguI0KK+C5geC4iuC4oeC4oOC4uQor4LmB4LiK4Lij4LmMCivguYHguIrguKPguIcKK+C5geC4iuC4peC5iOC4oQor4LmB4LiK4LiwCivguYLguIrguIEKK+C5guC4iuC4geC5hgor4LmC4LiK4LiB4Li44LiZCivguYLguIrguIQKK+C5guC4iuC4h+C5guC4peC4hwor4LmC4LiK4LiU4LiBCivguYLguIrguJTguLbguIEKK+C5guC4iuC4lQor4LmC4LiK4LiV4LiBCivguYLguIrguJXguLQKK+C5guC4iuC4mQor4LmC4LiK4Lih4LmC4Lij4LihCivguYLguIrguKIKK+C5guC4iuC4ouC4h+C4geC4suC4owor4LmC4LiK4Lii4LiK4Liy4LiiCivguYLguIrguKLguJXguLTguKoKK+C5guC4iuC4o+C4oQor4LmC4LiK4Lin4LmMCivguYPguIrguYgKK+C5g+C4iuC5iQor4LmE4LiKCivguYTguIrguJnguLAKK+C5hOC4iuC4ogor4LmE4LiK4LmC4LiiCivguIsKK+C4i+C4gQor4LiL4LmI4LiBCivguIvguIfguJTguLMKK+C4i+C5iOC4h+C4ruC4t+C5ieC4rQor4LiL4LiH4LmJ4LiyCivguIvguJQKK+C4i+C4mQor4LiL4LmI4LiZCivguIvguYnguJkKK+C4i+C4mgor4LiL4LihCivguIvguKPguK3guIHguIvguKPguLHguIcKK+C4i+C4p+C4lAor4LiL4Lin4LiU4LmA4LiLCivguIvguKfguJTguJfguKPguIcKK+C4i+C4p+C4mQor4LiL4Lin4LiiCivguIvguK0KK+C4i+C4reC4gQor4LiL4Lit4LiHCivguIvguYjguK3guIcKK+C4i+C5ieC4reC4hwor4LiL4Lit4LiH4Lie4Lil4Li5CivguIvguK3guIfguYHguKHguKcKK+C4i+C5ieC4reC4h+C5geC4oeC4pwor4LiL4Lit4LmB4LiLCivguIvguYnguK3guYHguIvguYkKK+C4i+C4reC4mQor4LiL4LmI4Lit4LiZCivguIvguYnguK3guJkKK+C4i+C5iOC4reC4meC4geC4peC4tOC5iOC4mQor4LiL4LmI4Lit4LiZ4LiX4Lij4Liy4LiiCivguIvguK3guKEKK+C4i+C5iOC4reC4oQor4LiL4LmJ4Lit4LihCivguIvguK3guKHguIvguYjguK0KK+C4i+C4reC4ogor4LiL4Lit4LiqCivguIvguLDguIvguKPguYnguLLguKcKK+C4i+C4sOC4i+C5iOC4reC4hwor4LiL4Liw4LiL4Lit4LmA4LiL4Li14LiiCivguIvguLDguIvguLTguIHguIvguLDguYHguIsKK+C4i+C4sOC4i+C4tOC4mgor4LiL4Liw4LmA4LiL4Liy4LiwCivguIvguLDguYDguIvguLXguKLguJoKK+C4i+C4seC4gQor4LiL4Lix4LiB4Liq4LmJ4Liy4LinCivguIvguLHguIcKK+C4i+C4seC5ieC4hwor4LiL4Lix4LiH4LiB4Liw4LiV4Liy4LiiCivguIvguLHguIfguYHguIvguKcKK+C4i+C4seC4h+C4leC4suC4ogor4LiL4Lix4LiUCivguIvguLHguYnguJkKK+C4i+C4seC4meC4leC4suC4hOC4peC4reC4qgor4LiL4Lix4LiaCivguIvguLHguJrguIvguLXguYgKK+C4i+C4seC4oQor4LiL4Lix4Lil4Lif4LiyCivguIvguLHguKXguYLguKcKK+C4i+C4seC5ieC4pwor4LiL4Lix4Lin4Lib4LiyCivguIvguLIKK+C4i+C5iOC4sgor4LiL4Liy4LiBCivguIvguLLguIHguLjguKPguLAKK+C4i+C4suC5hOC4gQor4LiL4Liy4LiHCivguIvguYjguLLguIcKK+C4i+C4suC4lAor4LiL4Liy4LiZCivguIvguYjguLLguJkKK+C4i+C4suC4muC4i+C5iOC4suC4mQor4LiL4Liy4Lia4LiL4Li24LmJ4LiHCivguIvguYjguLLguYLguJrguLAKK+C4i+C4suC4m+C4seC5iuC4pwor4LiL4Liy4LmB4Lih4LmA4Lij4Li14Lii4LihCivguIvguYnguLLguKIKK+C4i+C4suC5guC4ouC4meC4suC4o+C4sAor4LiL4Liy4Lij4LmMCivguIvguLLguKPguLTguJnguLIKK+C4i+C4suC4peC4suC5gOC4m+C4sgor4LiL4Liy4LinCivguIvguYjguLLguKvguKPguLTguYjguKEKK+C4i+C5ieC4swor4LiL4Li0CivguIvguLTguIEKK+C4i+C4tOC4geC4i+C4teC5iQor4LiL4Li04LiB4LmB4LiL4LmH4LiBCivguIvguLTguIHguLLguKPguYwKK+C4i+C4tOC4h+C5guC4hOC4meC4sgor4LiL4Li04LmI4LiZCivguIvguLTguJnguJXguLbguYrguIcKK+C4i+C4tOC4meC4meC4suC4oeC4tOC4gQor4LiL4Li04LiZ4LmB4LiqCivguIvguLTguJoKK+C4i+C4tOC4muC5hgor4LiL4Li04LibCivguIvguLTguJ/guLTguKXguLTguKoKK+C4i+C4tOC5ieC4oQor4LiL4Li04Lil4Li04LiE4Lit4LiZCivguIvguLTguKcKK+C4i+C4tQor4LiL4Li14LmICivguIvguLXguIEKK+C4i+C4teC5ieC4i+C4reC4mQor4LiL4Li14LmJ4LiL4Lix4LmJ4LinCivguIvguLXguYDguIvguYfguIHguYTguInguYgKK+C4i+C4teC5gOC4i+C4teC4ouC4oQor4LiL4Li14LiUCivguIvguLXguJnguK3guJkKK+C4i+C4teC4m+C5iOC4suC4ogor4LiL4Li14LmA4Lih4LiZ4LiV4LmMCivguIvguLXguYDguKPguLXguKLguKEKK+C4i+C4teC4peC4teC5gOC4meC4teC4ouC4oQor4LiL4Li14Lit4Li04LmJ4LinCivguIvguLbguIEKK+C4i+C4tuC5iOC4hwor4LiL4Li24LmJ4LiHCivguIvguLbguKEKK+C4i+C4t+C5iOC4rQor4LiL4Li34LmJ4LitCivguIvguLfguYjguK3guYYKK+C4i+C4t+C5ieC4reC4q+C4meC5ieC4sgor4LiL4Li44LiBCivguIvguLjguIHguIvguJkKK+C4i+C4uOC4hwor4LiL4Li44LiZCivguIvguLjguJoKK+C4i+C4uOC4muC4i+C4tOC4mgor4LiL4Li44Lia4LiL4Li54LmICivguIvguLjguJsKK+C4i+C4uOC5iOC4oQor4LiL4Li44LmJ4LihCivguIvguLjguYnguKHguIHguKPguLDguJXguYjguLLguKIKK+C4i+C4uOC5iOC4oeC4i+C5iOC4suC4oQor4LiL4Li44Lih4LmB4LiL4LinCivguIvguLjguYjguKHguYDguKrguLXguKLguIcKK+C4i+C4uOC4ogor4LiL4Li54LmICivguIvguLnguYjguIHguLHguYnguJnguKPguLHguYnguKfguYTguIvguKHguLLguJkKK+C4i+C4ueC5guC4hOC4o+C4qgor4LiL4Li54LiUCivguIvguLnguYnguJQKK+C4i+C4ueC4lOC4i+C4suC4lAor4LiL4Li54LiaCivguYDguIsKK+C5gOC4i+C5h+C4gQor4LmA4LiL4LmB4LiE4LiZ4LiV4LmMCivguYDguIvguYfguIcKK+C5gOC4i+C5iOC4hwor4LmA4LiL4LmJ4LiHCivguYDguIvguYfguIfguYHguIvguYgKK+C5gOC4i+C4lQor4LmA4LiL4LiZCivguYDguIvguYfguJkKK+C5gOC4i+C5iOC4mQor4LmA4LiL4LiZ4LiV4Li04LiB4Lij4Lix4LihCivguYDguIvguJnguJXguLTguYDguKHguJXguKMKK+C5gOC4i+C4meC4leC4tOC4peC4tOC4leC4owor4LmA4LiL4LmI4LiZ4LmA4Lir4Lil4LmJ4LiyCivguYDguIvguJvguLHguIHguJXguLDguIHguKPguYnguK0KK+C5gOC4i+C4nwor4LmA4LiL4Lij4LiyCivguYDguIvguKPguLLguLAKK+C5gOC4i+C4o+C4uOC5iOC4oQor4LmA4LiL4Lil4LmA4LiL4Li14Lii4LiqCivguYDguIvguKXguKXguYwKK+C5gOC4i+C4peC4peC4ueC4peC4reC4ouC4lOC5jAor4LmA4LiL4Lil4Lil4Li54LmC4Lil4LiqCivguYDguIvguKXguKrguYzguYHguKHguJkKK+C5gOC4i+C5iOC4rQor4LmA4LiL4Lit4Lij4LmMCivguYDguIvguK3guKPguYzguYLguITguYDguJnguLXguKLguKEKK+C5gOC4i+C4reC4sAor4LmA4LiL4LiyCivguYDguIvguYnguLLguIvguLXguYkKK+C5gOC4i+C4suC4sAor4LmA4LiL4Li04LiHCivguYDguIvguLTguYnguIcKK+C5gOC4i+C4teC4ouC4mQor4LmA4LiL4Li14Lii4LiaCivguYDguIvguLXguKLguKHguIvguLUKK+C5gOC4i+C4teC4ouC4pwor4LmA4LiL4Li14LmI4Lii4LinCivguYDguIvguLXguYnguKLguKcKK+C5gOC4i+C4teC5iOC4ouC4p+C4geC4suC4hwor4LmA4LiL4Li34LmI4Lit4LiHCivguYHguIsKK+C5geC4i+C5iAor4LmB4LiL4LmH4LiB4LiE4Liy4Lij4Li04LiZCivguYHguIvguIHguLjguKIKK+C5geC4i+C4hwor4LmB4LiL4LiH4LmB4LiL4LinCivguYHguIvguJQKK+C5geC4i+C4lOC5hgor4LmB4LiL4LiZ4LiU4LmM4Lin4Li04LiKCivguYHguIvguJoKK+C5geC4i+C4oQor4LmB4LiL4Lii4Li04LiUCivguYHguIvguYjguKcKK+C5geC4i+C4sAor4LmC4LiLCivguYLguIvguYgKK+C5guC4i+C4gQor4LmC4LiL4LmI4LiHCivguYLguIvguIfguYLguILguJTguIcKK+C5guC4i+C5gOC4iwor4LmC4LiL4LiU4LiyCivguYLguIvguJTguLLguYHguJzguJTguYDguJzguLIKK+C5guC4i+C4lOC4suC5hOC4nwor4LmC4LiL4LmA4LiU4Li14Lii4LihCivguYLguIvguKEKK+C5guC4i+C4o+C4oQor4LmC4LiL4Lil4LiyCivguYTguIsKK+C5hOC4i+C5iQor4LmE4LiL4LmA4LiB4Li04LilCivguYTguIvguYLguITguKXguJkKK+C5hOC4i+C4meC5jAor4LmE4LiL4Lii4Liy4LmE4LiZ4LiU4LmMCivguYTguIvguKPguYkKK+C5hOC4i+C5gOC4o+C4mQor4LmE4LiL4LmC4LilCivguYTguIvguYjguKvguLnguYkKK+C4jAor4LiM4Lil4LiyCivguIzguKXguLQKK+C4jOC4qQor4LiM4Lix4Lil4Lil4LmMCivguIzguLHguKXguKXguIHguLHguJPguJDguYwKK+C4jOC4suC4mQor4LiM4Liy4LiZ4Lil4Liy4Lig4Li1CivguIzguLLguJnguLLguJfguLTguKrguLHguIfguIHguLTguYDguKXguKrguLLguJfguLTguIzguLLguJkKK+C4jOC4ueC4gQor4LmA4LiM4LitCivguYLguIzguJEKK+C4jQor4LiN4LiN4LmI4Liy4LiiCivguI3guKfguJkKK+C4jeC4seC4leC4leC4tAor4LiN4Liy4LiT4Li1CivguI3guLLguJTguLIKK+C4jeC4suC4leC4m+C4o+C4tOC4jeC4jeC4sgor4LiN4Liy4LiV4Lix4LiV4LiW4LiI4Lij4Li04Lii4LiyCivguI3guLLguJXguLQKK+C4jeC4suC4mQor4LiN4Liy4Lib4LiBCivguI3guLLguKLguJvguI/guLTguJrguLHguJXguLQKK+C4jeC4suC4ouC4m+C4j+C4tOC4m+C4seC4meC5guC4mQor4LiN4Li04LiZCivguI3guLTguJoKK+C4jeC4teC5iAor4LiN4Li14LmI4Lib4Li44LmI4LiZCivguYDguI3guKLguJjguKPguKPguKEKK+C5hOC4jeC4ouC4mOC4o+C4o+C4oQor4LiOCivguI7guITguKPguLAKK+C4juC4teC4geC4sgor4LiPCivguI/guLHguIfguIHguJrguJTguLUKK+C4j+C4seC4h+C4geC4qOC4suC4peC4sgor4LiP4Lix4LiH4LiB4LiwCivguI/guLHguIfguIHguLLguKMKK+C4j+C4seC4h+C4hOC4sAor4LiP4Lix4LiH4LiE4LiyCivguI/guLHguI/guI/guJnguLUKK+C4j+C4suC4h+C4geC4owor4LiP4Liy4LijCivguI/guLjguJPguJDguLjguIEKK+C4kAor4LiQ4LiB4Lix4LiUCivguJDguLLguIHguLnguKMKK+C4kOC4suC4mQor4LiQ4Liy4LiZ4LiwCivguJDguLLguJnguLXguKLguLAKK+C4kOC4suC4m+C4meC4sgor4LiQ4Liy4Lii4Li1CivguJDguLTguJUKK+C4kOC4tOC4leC4tAor4LiRCivguJHguLLguKvguIEKK+C4keC4suC4q+C4sAor4LiR4Li04Lih4Lig4LmMCivguJIKK+C5gOC4kuC5iOC4sgor4LiTCivguJPguKPguIfguITguYwKK+C4k+C4seC4kAor4LmA4LiT4LijCivguJQKK+C4lOC4gQor4LiU4LiHCivguJTguYnguIcKK+C4lOC4h+C4p+C4suC4ogor4LiU4LmJ4LiZCivguJTguJnguYLguJTguYgKK+C4lOC4meC4leC4o+C4tQor4LiU4LiZ4LiiCivguJTguJnguKLguLIKK+C4lOC4meC4seC4ogor4LiU4LiZ4Li4CivguJTguJnguLkKK+C4lOC4muC4seC4mQor4LiU4Lia4Lix4Liq4Lin4Li04LiZCivguJTguJrguLHguKrguKfguLTguJnguLUKK+C4lOC4muC4seC4quC4p+C4tQor4LiU4LihCivguJTguKHguYTguKMKK+C4lOC4owor4LiU4Lij4LiH4LiE4LmMCivguJTguKPguJPguLQKK+C4lOC4o+C4k+C4tQor4LiU4Lij4LiY4Liy4LiZCivguJTguKPguKPguIrguJnguLUKK+C4lOC4o+C4peC4sgor4LiU4Lij4Liy4Lif4LiV4LmMCivguJTguKPguLQKK+C4lOC4o+C4tQor4LiU4Lij4Li4CivguJTguKPguLjguJMKK+C4lOC4o+C4uOC4k+C4tQor4LiU4Lik4LiW4Li1CivguJTguKUKK+C4lOC4peC4oOC4suC4hAor4LiU4Lin4LiHCivguJTguYnguKfguIcKK+C4lOC4p+C4iAor4LiU4Lin4LiUCivguJTguYjguKfguJkKK+C4lOC5ieC4p+C4mQor4LiU4LmJ4Lin4Lih4LmA4LiU4Li14LmJ4Lii4LihCivguJTguYnguKfguKIKK+C4lOC4p+C4pQor4LiU4Lit4LiBCivguJTguK3guIHguIHguLDguJfguLfguK0KK+C4lOC4reC4geC4l+C4reC4hwor4LiU4Lit4LiB4Lif4LmJ4Lit4LiZCivguJTguK3guIHguYTguKHguYnguJfguLDguYDguKUKK+C4lOC4reC4geC4quC4o+C5ieC4reC4ogor4LiU4Lit4LiB4Lit4Liy4LinCivguJTguK3guIcKK+C4lOC5ieC4reC4hwor4LiU4LmI4Lit4LiH4LmGCivguJTguYnguK3guIfguYYKK+C4lOC4reC4h+C4ieC4suC4ogor4LiU4Lit4LiH4LiU4Li24LiHCivguJTguK3guIfguKvguLLguKIKK+C4lOC4reC4lAor4LiU4Lit4LiZCivguJTguYjguK3guJkKK+C4lOC4reC4oQor4LiU4LmJ4Lit4LihCivguJTguK3guKIKK+C4lOC5ieC4reC4ogor4LiU4Lit4Lil4Lil4Liy4Lij4LmMCivguJTguLAKK+C4lOC4sOC5guC4leC5iuC4sOC4ouC4uOC4leC4tOC4mOC4o+C4o+C4oQor4LiU4Liw4Lir4Lih4Lix4LiHCivguJTguLHguIEKK+C4lOC4seC4geC4lOC4mQor4LiU4Lix4LiB4LiU4Liy4LiZCivguJTguLHguIHguYDguJTguLXguYnguKIKK+C4lOC4seC4geC5geC4lOC5iQor4LiU4Lix4LiB4Lip4LiBCivguJTguLHguIHguKnguJMKK+C4lOC4seC4geC4qeC4k+C4tQor4LiU4Lix4LiB4Lip4Lix4LiZCivguJTguLHguIcKK+C4lOC4seC5iOC4hwor4LiU4Lix4LmJ4LiHCivguJTguLHguYnguIfguYDguJTguLTguKEKK+C4lOC4seC4iuC4meC4tQor4LiU4Lix4LiUCivguJTguLHguJTguJvguKXguLHguIEKK+C4lOC4seC4leC4iuC5jAor4LiU4Lix4LiZCivguJTguLHguYnguJkKK+C4lOC4seC4meC5gOC4q+C4tOC4oQor4LiU4Lix4LiaCivguJTguLHguKHguJ7guYwKK+C4lOC4seC5ieC4p+C5gOC4lOC4teC5ieC4ogor4LiU4Lix4Liq4LiB4LijCivguJTguLHguKrguIHguKPguLUKK+C4lOC4sgor4LiU4LmI4LiyCivguJTguLLguIEKK+C4lOC5iOC4suC4hwor4LiU4LmJ4Liy4LiHCivguJTguLLguJQKK+C4lOC4suC4lOC4leC4sOC4geC4seC5iOC4pwor4LiU4Liy4LiZCivguJTguYjguLLguJkKK+C4lOC5ieC4suC4mQor4LiU4Liy4LiaCivguJTguLLguJrguKoKK+C4lOC4suC4oQor4LiU4LmJ4Liy4LihCivguJTguYnguLLguKHguIjguLTguYnguKcKK+C4lOC4suC4oeC4nuC5jAor4LiU4Liy4Lih4LijCivguJTguLLguKIKK+C4lOC5ieC4suC4ogor4LiU4Liy4LijCivguJTguLLguKPguIEKK+C4lOC4suC4o+C4k+C4tQor4LiU4Liy4Lij4LiU4Liy4LipCivguJTguLLguKPguLIKK+C4lOC4suC4pQor4LiU4Liy4Lil4Lix4LiUCivguJTguLLguKXguLgKK+C4lOC4suC4peC4uOC4igor4LiU4Liy4LmE4Lil4Lil4Liy4Lih4LiwCivguJTguLLguKcKK+C4lOC5iOC4suC4pwor4LiU4LmJ4Liy4LinCivguJTguLLguKfguIHguKPguLDguIjguLLguKIKK+C4lOC4suC4p+C4lOC4tuC4h+C4quC5jAor4LiU4Liy4Lin4Lia4LiqCivguJTguLLguKfguYDguKPguLfguK3guIcKK+C4lOC4suC4qQor4LiU4Liy4Lir4LiH4Lix4LiZCivguJTguLLguKvguKXguLHguIcKK+C4lOC4suC4rAor4LiU4LizCivguJTguYjguLMKK+C4lOC5ieC4swor4LiU4Liz4LmG4LmB4LiU4LiH4LmGCivguJTguLPguIHguKUKK+C4lOC4s+C5gOC4geC4tOC4hwor4LiU4Liz4LmB4LiE4LiHCivguJTguLPguJTguIcKK+C4lOC4s+C4meC4suC4kwor4LiU4Liz4LiZ4Liy4LiZCivguJTguLPguJnguLkKK+C4lOC4s+C5gOC4meC4tOC4mQor4LiU4Liz4LmA4LiZ4Li14Lii4LiZCivguJTguLPguYDguJnguLXguKLguKMKK+C4lOC4s+C4muC4pQor4LiU4Liz4Lie4Lit4LiHCivguJTguLPguKPguLHguKoKK+C4lOC4s+C4o+C4tAor4LiU4Liz4Lij4Li1CivguJTguLPguKPguLkKK+C4lOC4s+C5hOC4owor4LiU4Liz4Lik4Lip4LiT4LiyCivguJTguLPguYDguKXguLTguIcKK+C4lOC4s+C5geC4peC4hwor4LiU4Liz4Lir4LiZ4Lix4LiBCivguJTguLPguKvguJnguLQKK+C4lOC4s+C4reC4p+C4lAor4LiU4Li04LiBCivguJTguLTguIHguYYKK+C4lOC4tOC4hwor4LiU4Li04LmI4LiHCivguJTguLTguInguLHguJkKK+C4lOC4tOC4kAor4LiU4Li04LiV4LiW4LmMCivguJTguLTguJbguLUKK+C4lOC4tOC4mQor4LiU4Li04LmJ4LiZCivguJTguLTguJoKK+C4lOC4tOC4muC4lOC4tQor4LiU4Li04Lij4Lix4LiI4LiJ4Liy4LiZCivguJTguLTguYDguKPguIEKK+C4lOC4tOC4peC4gQor4LiU4Li04LmI4LinCivguJTguLTguYnguKcKK+C4lOC4tOC5ieC4p+C5gOC4lOC4teC5ieC4ouC4pwor4LiU4Li04Lip4LiQ4LmMCivguJTguLTguKrguYLguJ7guKPguYDguIvguLXguKLguKEKK+C4lOC4tQor4LiU4Li14LiB4Lij4Li1CivguJTguLXguInguLHguJkKK+C4lOC4teC5gOC4i+C4pQor4LiU4Li14LiUCivguJTguLXguJTguLXguJfguLUKK+C4lOC4teC4meC4suC4hOC4o+C4suC4igor4LiU4Li14Lia4Li44LiBCivguJTguLXguJvguKXguLUKK+C4lOC4teC5gOC4m+C4o+C4quC4iuC4seC4mQor4LiU4Li14Lic4LiyCivguJTguLXguJ7guKMKK+C4lOC4teC4ouC4sgor4LiU4Li14Lir4Lih4Li1CivguJTguLXguKvguKXguLUKK+C4lOC4tuC4gQor4LiU4Li24LiHCivguJTguLbguYjguIcKK+C4lOC4tuC4h+C4quC4sAor4LiU4Li24LmI4LihCivguJTguLfguYjguJkKK+C4lOC4t+C5iOC4oQor4LiU4Li34LitCivguJTguLfguYnguK0KK+C4lOC4uAor4LiU4Li44LiBCivguJTguLjguIHguJTguLTguIEKK+C4lOC4uOC4geC4l+C4sOC5gOC4pQor4LiU4Li44LmJ4LiHCivguJTguLjguYnguIfguJTguLTguYnguIcKK+C4lOC4uOC4iAor4LiU4Li44LiI4LiU4Lix4LiHCivguJTguLjguIjguKvguJnguLbguYjguIcKK+C4lOC4uOC4lAor4LiU4Li44LiZCivguJTguLjguYnguJkKK+C4lOC4uOC4muC5hgor4LiU4Li44LihCivguJTguLjguYjguKEKK+C4lOC4uOC5iOC4oeC5hgor4LiU4Li44LmI4LiiCivguJTguLjguKPguIQKK+C4lOC4uOC4o+C4h+C4hOC5jAor4LiU4Li44Lij4LiH4LiE4Li1CivguJTguLjguKPguLTguKLguLAKK+C4lOC4uOC4o+C4tOC4ouC4suC4h+C4hOC5jAor4LiU4Li44LilCivguJTguLjguKnguI7guLUKK+C4lOC4uOC4qeC4k+C4tQor4LiU4Li44Lip4LiT4Li14Lig4Liy4LieCivguJTguLjguKnguLTguJUKK+C4lOC4uOC4quC4tOC4lQor4LiU4Li44LmA4Lir4Lin4LmI4LiyCivguJTguLkKK+C4lOC4ueC4geC5hOC4geC5iOC4lOC4swor4LiU4Li54LiB4LiE4LmI4Liy4LiHCivguJTguLnguIHguIrguYnguLLguIcKK+C4lOC4ueC4geC4owor4LiU4Li54LiUCivguYDguJQKK+C5gOC4lOC5iAor4LmA4LiU4LiBCivguYDguJTguYfguIEKK+C5gOC4lOC4geC4i+C5jOC5guC4l+C4o+C4qgor4LmA4LiU4LiE4Liy4LiB4Lij4Lix4LihCivguYDguJTguITguLLguYDguKHguJXguKMKK+C5gOC4lOC4hOC4suC4peC4tOC4leC4owor4LmA4LiU4LmJ4LiHCivguYDguJTguYfguIgKK+C5gOC4lOC4igor4LmA4LiU4LiK4LiZ4LmMCivguYDguJTguIrguJnguLAKK+C5gOC4lOC4iuC4sAor4LmA4LiU4LmC4LiKCivguYDguJTguIvguLTguIHguKPguLHguKEKK+C5gOC4lOC4i+C4tOC5gOC4oeC4leC4owor4LmA4LiU4LiL4Li04Lil4Li04LiV4LijCivguYDguJTguYfguJQKK+C5gOC4lOC4mQor4LmA4LiU4LmI4LiZCivguYDguJTguJnguKHguLLguKPguYzguIEKK+C5gOC4lOC4o+C4seC4iOC4ieC4suC4mQor4LmA4LiU4LmL4LitCivguYDguJTguYvguK3guJTguYvguLIKK+C5gOC4lOC4sgor4LmA4LiU4LmI4LiyCivguYDguJTguYnguLIKK+C5gOC4lOC5iOC4suC5hgor4LmA4LiU4LmJ4Liy4LiU4Li04LiZCivguYDguJTguYnguLLguKXguKEKK+C5gOC4lOC4suC4sAor4LmA4LiU4Li04LiZCivguYDguJTguLTguYjguJkKK+C5gOC4lOC4tOC4oQor4LmA4LiU4Li14LmJ4LiiCivguYDguJTguLXguKLguIcKK+C5gOC4lOC4teC4ouC4lAor4LmA4LiU4Li14Lii4LijCivguYDguJTguLXguKLguKPguJTguLLguKkKK+C5gOC4lOC4teC4ouC4o+C4luC5jAor4LmA4LiU4Li14Lii4Lij4LiW4Li14Lii4LmMCivguYDguJTguLXguKLguKPguLHguIjguInguLLguJkKK+C5gOC4lOC4teC4ouC4pwor4LmA4LiU4Li14LmI4Lii4LinCivguYDguJTguLXguYvguKLguKcKK+C5gOC4lOC4teC4ouC4sAor4LmA4LiU4Li34LmI4LitCivguYDguJTguLfguK3guIEKK+C5gOC4lOC4t+C5iOC4reC4hwor4LmA4LiU4Li34Lit4LiUCivguYDguJTguLfguK3guJkKK+C5gOC4lOC4t+C4reC4ogor4LmB4LiUCivguYHguJTguYgKK+C5geC4lOC4gQor4LmB4LiU4LmH4LiB4LmGCivguYHguJTguIHguIfguLIKK+C5geC4lOC4geC5geC4lOC5iQor4LmB4LiU4LmH4LiB4LmB4LiU4LmJCivguYHguJTguIcKK+C5geC4lOC4h+C4meC5ieC4swor4LmB4LiU4LiUCivguYHguJTguJkKK+C5geC4lOC5iOC4mQor4LmB4LiU4LmI4Lin4LmGCivguYHguJTguLAKK+C5guC4lAor4LmC4LiU4LmICivguYLguJTguIHguYDguJTguIEKK+C5guC4lOC5iOC4hwor4LmC4LiU4LiUCivguYLguJTguJkKK+C5guC4lOC4meC4seC4lQor4LmC4LiU4LmK4Lib4Lii4LiyCivguYLguJTguKEKK+C5guC4lOC4oeC4owor4LmC4LiU4LiiCivguYLguJTguKMKK+C5guC4lOC4o+C4kwor4LmD4LiUCivguYTguJQKK+C5hOC4lOC5iQor4LmE4LiU4LmB4LiL4LmH4LiB4LiE4Liy4LmE4Lij4LiE4LmMCivguYTguJTguJnguLLguYTguKHguJXguYwKK+C5hOC4lOC5guC4meC5gOC4quC4suC4o+C5jAor4LmE4LiU4LmA4Lij4LiB4LiV4Lij4Li04LiB4LiL4LmMCivguYTguJTguK3guLLguKPguLUKK+C4lQor4LiV4LiBCivguJXguYrguIHguYLguJUKK+C4leC4hwor4LiV4LmL4LiHCivguJXguIfguInguLTguJkKK+C4leC4h+C4tOC4lAor4LiV4LiH4Li44LmI4LiZCivguJXguJQKK+C4leC4luC4suC4hOC4lQor4LiV4LiX4Lix4LiH4LiE4Lin4Li04Lih4Li44LiV4LiV4Li0CivguJXguJkKK+C4leC5ieC4mQor4LiV4LiZ4Lix4LiiCivguJXguJnguLgKK+C4leC4mgor4LiV4Lia4Lii4Li44LiHCivguJXguJrguLAKK+C4leC4m+C4sOC4meC4teC4ouC4sAor4LiV4LihCivguJXguYnguKEKK+C4leC4oeC4ueC4gQor4LiV4LmC4Lih4LmC4LiK4LiV4Li04Lib4Lij4Liy4Lii4LmC4LiZCivguJXguYLguKHguJXguKHguJvguKPguLLguKLguYLguJkKK+C4leC5guC4oeC4meC4uOC4lwor4LiV4LmC4Lih4LmE4Lie4Lij4Li1CivguJXguYLguKHguKvguKMKK+C4leC4ouC4suC4hAor4LiV4Lii4Liy4LiE4Li1CivguJXguKLguLjguJXguLQKK+C4leC4o+C4hwor4LiV4Lij4LiH4LmGCivguJXguKPguJPguLUKK+C4leC4o+C4oQor4LiV4Lij4Lih4Lin4LilCivguJXguKPguKPguIHguLAKK+C4leC4o+C4peC4mgor4LiV4Lij4Lil4Lit4LiUCivguJXguKPguKXguLAKK+C4leC4o+C4peC4sgor4LiV4Lij4Lil4Liy4LiUCivguJXguKPguYDguKXguLTguJQKK+C4leC4o+C4p+C4iAor4LiV4Lij4Lin4LiUCivguJXguKPguKfguJkKK+C4leC4o+C4p+C4ogor4LiV4Lij4Lit4LiBCivguJXguKPguK3guIcKK+C4leC4o+C4reC4oeC5g+C4iAor4LiV4Lij4Lit4Lih4LiV4Lij4LihCivguJXguKPguLAKK+C4leC4o+C4sOC4geC4pQor4LiV4Lij4Liw4LiB4Lin4LiZCivguJXguKPguLDguIHguK3guIcKK+C4leC4o+C4sOC4geC4seC4lAor4LiV4Lij4Liw4LiB4Liy4LijCivguJXguKPguLDguIHguLnguKUKK+C4leC4o+C4sOC4hOC4seC4owor4LiV4Lij4Liw4LiH4LmI4Lit4LiHCivguJXguKPguLDguIjguLHguIEKK+C4leC4o+C4sOC4iuC4seC4gQor4LiV4Lij4Liw4LiU4LiBCivguJXguKPguLDguJTguLLguKkKK+C4leC4o+C4sOC5gOC4leC4o+C4teC4ouC4oQor4LiV4Lij4Liw4LmB4LiV4LmJ4LiZCivguJXguKPguLDguJfguKPguKfguIcKK+C4leC4o+C4sOC4meC4suC4pwor4LiV4Lij4Liw4LmE4LiZCivguJXguKPguLDguJrguIEKK+C4leC4o+C4sOC4muC4reC4gQor4LiV4Lij4Liw4Lia4Lit4LiHCivguJXguKPguLDguJrguLHguJQKK+C4leC4o+C4sOC4muC4seC4mQor4LiV4Lij4Liw4LmA4Lia4LmH4LiHCivguJXguKPguLDguYHguJrguYgKK+C4leC4o+C4sOC5geC4muC4gQor4LiV4Lij4Liw4LmB4Lia4LiHCivguJXguKPguLDguYHguJrguJkKK+C4leC4o+C4sOC5geC4muC5iOC4mQor4LiV4Lij4Liw4LmC4Lia4LihCivguJXguKPguLDguJ7guK3guIcKK+C4leC4o+C4sOC4nuC4seC4hwor4LiV4Lij4Liw4Lih4Li34LmI4LiZCivguJXguKPguLDguYLguKHguIgKK+C4leC4o+C4sOC4peC4suC4geC4suC4owor4LiV4Lij4Liw4Lin4Lix4LiZCivguJXguKPguLDguYDguKfguYfguJQKK+C4leC4o+C4sOC5gOC4p+C4mQor4LiV4Lij4Liw4LmA4Lin4LiZ4LmE4Lie4LijCivguJXguKPguLDguYDguKfguJnguKfguLHguJkKK+C4leC4o+C4sOC4quC4seC4gQor4LiV4Lij4Liw4Lir4LiH4LmI4Lit4LiHCivguJXguKPguLDguKvguIfguYjguLLguJkKK+C4leC4o+C4sOC4q+C4meC4gQor4LiV4Lij4Liw4Lir4LiZ4Lix4LiBCivguJXguKPguLDguKvguJnguYjguLMKK+C4leC4o+C4sOC4q+C4meC4teC5iAor4LiV4Lij4Liw4Lit4LijCivguJXguKPguLDguK3guLLguKUKK+C4leC4o+C4sOC5guC4reC4oQor4LiV4Lij4Lix4LiHCivguJXguKPguLHguIfguITguYwKK+C4leC4o+C4seC4mgor4LiV4Lij4Lix4Lia4Lif4Lix4LiHCivguJXguKPguLHguKIKK+C4leC4o+C4seC4ouC4leC4o+C4tuC4h+C4qOC5jAor4LiV4Lij4Lix4LiqCivguJXguKPguLHguKrguKrguLIKK+C4leC4o+C4sgor4LiV4Lij4Liy4LiB4LiV4Lij4LizCivguJXguKPguLLguIrguLkKK+C4leC4o+C4suC4mgor4LiV4Lij4Liy4Liq4Lix4LiHCivguJXguKPguLMKK+C4leC4o+C5iOC4swor4LiV4Lij4Li0CivguJXguKPguLTguKcKK+C4leC4o+C4tQor4LiV4Lij4Li14Lib4Lij4Liw4LiU4Lix4LiaCivguJXguKPguLXguJvguKfguLLguKIKK+C4leC4o+C4teC4nuC4tOC4mOC4nuC4o+C4o+C4kwor4LiV4Lij4Li14LmA4Lie4LiK4Lij4LiX4Lix4LiT4LiR4Li1CivguJXguKPguLXguYDguJ7guIrguKPguJ7guKfguIcKK+C4leC4o+C4teC4ouC4oeC4gQor4LiV4Lij4Li14Lii4Lix4Lih4Lib4Lin4Liy4LiiCivguJXguKPguLbguIEKK+C4leC4o+C4tuC4hwor4LiV4Lij4Li4CivguJXguKPguLjguJMKK+C4leC4o+C4uOC4ogor4LiV4Lij4Li44LipCivguJXguKPguLjguKnguIjguLXguJkKK+C4leC4o+C4uQor4LiV4Lij4Li54LmICivguJXguKTguJMKK+C4leC4pOC4leC4teC4ouC4sAor4LiV4Lik4LiXCivguJXguKTguJsKK+C4leC4pOC4qeC4k+C4sgor4LiV4Lik4LmFCivguJXguKUKK+C4leC4peC4gQor4LiV4Lil4LiB4Lia4Liy4LiV4LijCivguJXguKXguJoKK+C4leC4peC4reC4lAor4LiV4Lil4LiwCivguJXguKXguLHguJoKK+C4leC4peC4seC4muC4meC4suC4gQor4LiV4Lil4Liy4LiUCivguJXguKXguLTguYjguIcKK+C4leC4peC4tuC4hwor4LiV4Lin4LiHCivguJXguYjguKfguJkKK+C4leC5ieC4p+C4oeC5gOC4leC4teC5ieC4ouC4oQor4LiV4Lin4Lix4LiBCivguJXguKfguLHguJQKK+C4leC4p+C4suC4lAor4LiV4LitCivguJXguYjguK0KK+C4leC5ieC4rQor4LiV4Lit4LiBCivguJXguYrguK3guIEKK+C4leC5iuC4reC4geC4leC5i+C4reC4ogor4LiV4Lit4LiHCivguJXguYnguK3guIcKK+C4leC4reC4h+C4geC4o+C4suC4ogor4LiV4LmJ4Lit4LiH4LiB4Liy4LijCivguJXguK3guIfguJXguK3guKIKK+C4leC4reC4h+C4leC4tuC4hwor4LiV4LmJ4Lit4LiH4LmA4LiVCivguJXguK3guIfguYHguJXguIEKK+C4leC5iOC4reC4h+C5geC4leC5iOC4hwor4LiV4Lit4LiH4LmA4Lib4Lij4Li14Lii4LiHCivguJXguYnguK3guIfguKrguLnguYkKK+C4leC4reC4h+C5gOC4q+C4peC4t+C4reC4hwor4LiV4Lit4LiUCivguJXguK3guJTguJXguYjguK0KK+C4leC4reC4mQor4LiV4LmJ4Lit4LiZCivguJXguK3guJoKK+C4leC4reC5gOC4muC4sgor4LiV4Lit4LihCivguJXguYjguK3guKEKK+C4leC5i+C4reC4oQor4LiV4LmI4Lit4Lih4LiZ4LmJ4LizCivguJXguYjguK3guKIKK+C4leC5ieC4reC4ogor4LiV4LmJ4Lit4Lii4LiV4Lij4Li04LmI4LiHCivguJXguYnguK3guKLguJXguLTguYjguIcKK+C4leC5ieC4reC4ouC4leC4teC4p+C4tOC4lAor4LiV4Lit4LmB4LiiCivguJXguK3guKPguYzguJvguLTguYLguJQKK+C4leC5iOC4reC5hOC4quC5iQor4LiV4Lit4LmB4Lir4LilCivguJXguLAKK+C4leC4sOC4geC4o+C4mQor4LiV4Liw4LiB4Lij4LihCivguJXguLDguIHguKPguKfguKIKK+C4leC4sOC4geC4o+C5ieC4rQor4LiV4Liw4LiB4Lij4LmI4Lit4LihCivguJXguLDguIHguKPguLHguJkKK+C4leC4sOC4geC4o+C4seC4mgor4LiV4Liw4LiB4Lij4LmJ4LiyCivguJXguLDguIHguKPguLLguKEKK+C4leC4sOC4geC4o+C4uOC4lAor4LiV4Liw4LiB4Lij4Li44LihCivguJXguLDguIHguKPguLjguKHguJXguLDguIHguKPguLLguKEKK+C4leC4sOC4geC4peC4sAor4LiV4Liw4LiB4Lil4Liy4LihCivguJXguLDguIHguKfguJQKK+C4leC4sOC4geC4rQor4LiV4Liw4LiB4Lit4LiZCivguJXguLDguIHguLHguIcKK+C4leC4sOC4geC4seC5iOC4pwor4LiV4Liw4LiB4Liy4LiHCivguJXguLDguIHguLLguJQKK+C4leC4sOC4geC4suC4ogor4LiV4Liw4LiB4Liy4LinCivguJXguLDguIHguLXguYkKK+C4leC4sOC4geC4uOC4geC4leC4sOC4geC4seC4gQor4LiV4Liw4LiB4Li44LiiCivguJXguLDguIHguLkKK+C4leC4sOC4geC4ueC4lAor4LiV4Liw4LmA4LiB4Li14Lii4LiB4LiV4Liw4LiB4Liy4LiiCivguJXguLDguYDguIHguLXguKLguIcKK+C4leC4sOC5gOC4geC4teC4ouC4mgor4LiV4Liw4LmB4LiBCivguJXguLDguYHguIHguYgKK+C4leC4sOC5geC4geC4o+C4hwor4LiV4Liw4LmC4LiBCivguJXguLDguYLguIHguYkKK+C4leC4sOC5guC4geC4gQor4LiV4Liw4LmC4LiB4LiZCivguJXguLDguYLguIHguKPguIcKK+C4leC4sOC5guC4geC4o+C4oQor4LiV4Liw4LmE4LiB4LijCivguJXguLDguILguJoKK+C4leC4sOC4guC4rQor4LiV4Liw4LiC4Liy4LiaCivguJXguLDguILguLTguJTguJXguLDguILguKfguIcKK+C4leC4sOC5gOC4guC5iQor4LiV4Liw4LmA4LiC4LmH4LiaCivguJXguLDguYDguILguLTguIcKK+C4leC4sOC5guC4guC4hwor4LiV4Liw4LiE4Lij4LmJ4LitCivguJXguLDguITguKPguK3guIcKK+C4leC4sOC4hOC4o+C4seC5iOC4meC4leC4sOC4hOC4o+C4rQor4LiV4Liw4LiE4Lij4LmJ4LizCivguJXguLDguITguKPguLTguKcKK+C4leC4sOC4hOC4o+C4uOC4mgor4LiV4Liw4LiE4Lil4Lix4Lia4LiV4Liw4LiE4Lil4LmJ4Liy4LiiCivguJXguLDguITguK3guIEKK+C4leC4sOC4hOC4seC4mQor4LiV4Liw4LiE4LmJ4LiyCivguJXguLDguITguLLguIEKK+C4leC4sOC4hOC4suC4hwor4LiV4Liw4LiE4LmJ4Liy4LiZCivguJXguLDguITguLTguKcKK+C4leC4sOC4hOC4uOC5iOC4oQor4LiV4Liw4LmA4LiE4Lij4Li14Lii4LinCivguJXguLDguYDguITguLXguKLguJkKK+C4leC4sOC5gOC4hOC4teC4ouC4meC4l+C4reC4hwor4LiV4Liw4LmA4LiE4Li14Lii4LinCivguJXguLDguYHguITguIcKK+C4leC4sOC5hOC4hOC4o+C5iAor4LiV4Liw4LmE4LiE4Lij4LmJCivguJXguLDguYDguIbguYgKK+C4leC4sOC5geC4h+C5iQor4LiV4Liw4LiV4Li04LiZCivguJXguLDguYHguJXguKPguYnguJkKK+C4leC4sOC4meC4reC4ogor4LiV4Liw4LiZ4Liy4LinCivguJXguLDguJrguKEKK+C4leC4sOC4muC4reC4hwor4LiV4Liw4Lia4Lit4LiH4LiB4Lix4LiZCivguJXguLDguJrguK3guIfguYDguJ7guIrguKMKK+C4leC4sOC4muC4reC4ogor4LiV4Liw4Lia4Lix4LiZCivguJXguLDguJrguLTguYnguIcKK+C4leC4sOC4muC4tOC4lAor4LiV4Liw4Lia4Li04LiU4LiV4Liw4Lia4Lit4LiiCivguJXguLDguJrguLXguYnguJXguLDguJrguLHguJkKK+C4leC4sOC4muC4tuC4hwor4LiV4Liw4Lia4Li44LmJ4LiiCivguJXguLDguJrguLjguYnguKLguYYKK+C4leC4sOC4muC4ueC4mQor4LiV4Liw4LmA4Lia4LmH4LiHCivguJXguLDguYDguJrguYfguIfguKHguLLguJkKK+C4leC4sOC5geC4muC4gQor4LiV4Liw4LmB4Lia4LiHCivguJXguLDguYLguJrguKEKK+C4leC4sOC5hOC4mgor4LiV4Liw4Lib4LiaCivguJXguLDguJvguKXguLTguIcKK+C4leC4sOC4m+C4seC4lOC4leC4sOC4m+C5iOC4reC4hwor4LiV4Liw4Lib4Li04LmJ4LiHCivguJXguLDguJvguLjguYjguKHguJXguLDguJvguYjguLMKK+C4leC4sOC4m+C4uQor4LiV4Liw4Lie4LiHCivguJXguLDguJ7guJQKK+C4leC4sOC4nuC4reC4hwor4LiV4Liw4Lie4Lix4LiBCivguJXguLDguJ7guLHguIcKK+C4leC4sOC4nuC4seC4lAor4LiV4Liw4Lie4Lix4LmJ4LiZCivguJXguLDguJ7guLLguIEKK+C4leC4sOC4nuC4suC4mQor4LiV4Liw4Lie4Liy4LiaCivguJXguLDguJ7guLLguJrguJnguYnguLMKK+C4leC4sOC4nuC4suC4ogor4LiV4Liw4Lie4Li24LiUCivguJXguLDguJ7guLjguYjguJkKK+C4leC4sOC5gOC4nuC4o+C4sgor4LiV4Liw4LmA4Lie4Li04LiHCivguJXguLDguYDguJ7guLTguJQKK+C4leC4sOC5gOC4nuC4tOC5iOC4mQor4LiV4Liw4LmA4Lie4Li14Lii4LiZCivguJXguLDguYLguJ7guIEKK+C4leC4sOC5guC4nuC4hwor4LiV4Liw4LmC4Lie4LiZCivguJXguLDguYDguKDguLIKK+C4leC4sOC5g+C4oOC5iQor4LiV4Liw4Lih4LmI4LitCivguJXguLDguKHguK3guKIKK+C4leC4sOC4oeC4reC4ouC4quC4sOC4peC4sgor4LiV4Liw4Lij4Lix4LiHCivguJXguLDguKPguLHguIfguIHguLDguJnguLkKK+C4leC4sOC4o+C4seC4h+C4leC4seC4hwor4LiV4Liw4Lij4Liy4LiHCivguJXguLDguKXguK3guIcKK+C4leC4sOC4peC4reC4mQor4LiV4Liw4Lil4LmI4Lit4LihCivguJXguLDguKXguYjguK3guKHguJvguYnguK3guKEKK+C4leC4sOC4peC4sAor4LiV4Liw4Lil4Liy4LiZCivguJXguLDguKXguLTguIfguJvguKXguLTguIcKK+C4leC4sOC4peC4tOC4mgor4LiV4Liw4Lil4Li14LiV4Liw4Lil4Liy4LiZCivguJXguLDguKXguLbguIcKK+C4leC4sOC4peC4uOC4hwor4LiV4Liw4Lil4Li44LmI4LihCivguJXguLDguKXguLjguKHguJrguK3guJkKK+C4leC4sOC4peC4uOC5iOC4oeC5guC4m+C4hwor4LiV4Liw4Lil4Li44Lih4Lie4LitCivguJXguLDguKXguLjguKHguJ7guLjguIEKK+C4leC4sOC4peC4uOC5iOC4oeC4reC4tOC4lAor4LiV4Liw4Lil4Li44LiiCivguJXguLDguYDguKXguIcKK+C4leC4sOC5geC4peC4h+C5geC4geC4hwor4LiV4Liw4LmE4LilCivguJXguLDguKfguLHguJkKK+C4leC4sOC4p+C4suC4hwor4LiV4Liw4LmA4Lin4LiZCivguJXguLDguKvguJnguLbguYjguIfguKPguLHguJQKK+C4leC4sOC4q+C4peC4tOC4pwor4LiV4Liw4Lir4Lil4Li44LiBCivguJXguLDguKvguKXguLjguIcKK+C4leC4sOC5gOC4q+C4peC4meC5geC4m+C5i+C4mQor4LiV4Liw4LmA4Lir4Lil4Liy4Liw4LmA4Lib4Liy4LiwCivguJXguLDguYHguKvguIfguYjguKcKK+C4leC4sOC5geC4q+C4oeC4sOC5geC4guC4sAor4LiV4Liw4LmB4Lir4Lil4LiZ4LmB4Lib4LmL4LiZCivguJXguLDguYLguKvguIfguIEKK+C4leC4seC5iuC4gQor4LiV4Lix4LiB4LiB4LiwCivguJXguLHguIHguYDguJXguLfguK3guJkKK+C4leC4seC5iuC4geC5geC4leC4mQor4LiV4Lix4LiB4LijCivguJXguLHguIHguKnguIEKK+C4leC4seC4geC4qeC4kwor4LiV4Lix4LiB4Lip4LiT4Li1CivguJXguLHguIHguKnguLHguKIKK+C4leC4seC4hwor4LiV4Lix4LmI4LiHCivguJXguLHguYnguIcKK+C4leC4seC4h+C5gOC4gQor4LiV4Lix4LiH4LiJ4LmI4Liy4LiiCivguJXguLHguIfguJXguLTguJQKK+C4leC4seC4h+C5gOC4oQor4LiV4Lix4LiH4Lin4Liy4LiiCivguJXguLHguIfguYLguK3guYsKK+C4leC4seC4iOC4ieC4gQor4LiV4Lix4LiI4LiJ4LiZ4Li1CivguJXguLHguJPguJHguLjguKUKK+C4leC4seC4k+C4q+C4seC4geC4qeC4seC4ogor4LiV4Lix4LiT4Lir4LiyCivguJXguLHguJQKK+C4leC4seC4luC4ouC5jAor4LiV4Lix4LiZCivguJXguLHguJnguJXguKPguLAKK+C4leC4seC4meC4leC4tAor4LiV4Lix4LiZ4Lir4LiBCivguJXguLHguJnguKvguKLguIcKK+C4leC4seC4meC5gOC4q+C4tOC4oQor4LiV4Lix4LiaCivguJXguLHguJrguYDguJXguYjguLIKK+C4leC4seC4muC4m+C4tOC5ieC4hwor4LiV4Lix4Lia4LmA4Lib4LmH4LiUCivguJXguLHguKcKK+C4leC4seC5i+C4pwor4LiV4Lix4Lin4LiV4Li34LiUCivguJXguLHguYnguKfguYLguJwKK+C4leC4seC5ieC4p+C4quC4tOC4pwor4LiV4Lix4LmJ4Lin4LmA4Lir4Li14LmI4LiiCivguJXguLIKK+C4leC4suC4gQor4LiV4Liy4LiHCivguJXguYjguLLguIcKK+C4leC4suC4lAor4LiV4Liy4LiZCivguJXguYjguLLguJkKK+C4leC5ieC4suC4mQor4LiV4Liy4LiZ4LiZ4LiB4LiB4LiUCivguJXguLLguJnguYDguKrguLXguYnguKLguJkKK+C4leC4suC4meC4q+C4gQor4LiV4Liy4LiZ4Lir4Lih4LmI4Lit4LiZCivguJXguLLguJnguYDguKvguKXguLfguK3guIcKK+C4leC4suC4meC4tQor4LiV4Liy4LiaCivguJXguLLguJ3guLHguYjguIcKK+C4leC4suC4oQor4LiV4Liy4Lih4Lie4LiwCivguJXguLLguKHguLDguYHguJkKK+C4leC4suC4oeC4tOC4mQor4LiV4Liy4LiiCivguJXguYnguLLguKIKK+C4leC5iuC4suC4ouC4leC4suC4ogor4LiV4Liy4Lij4Liy4LmE4LiVCivguJXguLLguYDguKPguLfguK3guIrguLHguKIKK+C4leC4suC4pQor4LiV4Liy4Lil4Liy4LiZCivguJXguLLguKXguLgKK+C4leC4suC4peC4uOC4igor4LiV4Liy4LinCivguJXguLLguYDguKrguLfguK0KK+C4leC4suC4q+C4peC4tOC5iOC4hwor4LiV4Liy4LisCivguJXguLMKK+C4leC5iOC4swor4LiV4Liz4LiZ4Liy4LiZCivguJXguLPguYDguJnguLTguJkKK+C4leC4s+C5gOC4meC4teC4ouC4mQor4LiV4Liz4Lia4LilCivguJXguLPguYHguJoKK+C4leC5ieC4s+C4m+C4uOC4gQor4LiV4LmJ4Liz4Lic4Liy4LiHCivguJXguYnguLPguJ7guKPguKfguJQKK+C4leC4s+C4oeC4sOC4q+C4h+C4hwor4LiV4Liz4LmB4LiiCivguJXguLPguKPguKfguIgKK+C4leC4s+C4o+C4seC4mgor4LiV4Liz4Lij4LiyCivguJXguLPguKPguLgKK+C4leC4s+C4peC4tuC4hwor4LiV4Liz4LmA4Liq4LiyCivguJXguLPguKvguJnguLHguIEKK+C4leC4s+C4q+C4meC4tAor4LiV4Liz4Lir4Lij4LiwCivguJXguLPguYHguKvguJnguYjguIcKK+C4leC4tAor4LiV4Li04LiB4LiC4LiN4Liy4LiTCivguJXguLTguIHguLAKK+C4leC4tOC4geC4suC4q+C4peC4seC4hwor4LiV4Li04LiHCivguJXguLTguYjguIcKK+C4leC4tOC5i+C4hwor4LiV4Li04LmL4LiH4LmGCivguJXguLTguYjguIfguJXguLHguYjguIcKK+C4leC4tOC4h+C4quC4leC4tAor4LiV4Li04LmI4LiH4Lir4Liy4LiiCivguJXguLTguJMKK+C4leC4tOC4k+C4p+C4seC4leC4luC4suC4o+C4geC4p+C4tOC4meC4seC4ogor4LiV4Li04LiUCivguJXguLTguJTguYYKK+C4leC4tOC4leC4leC4tOC4gQor4LiV4Li04LiV4LiV4Li04LijCivguJXguLTguJXguJYKK+C4leC4tOC4luC4tQor4LiV4Li04Lib4LiyCivguJXguLTguJvguLLguJbguLAKK+C4leC4tOC4oeC4tAor4LiV4Li04Lih4Li04LiH4LiE4Lil4LiwCivguJXguLTguKMKK+C4leC4tOC4o+C4seC4iOC4ieC4suC4mQor4LiV4Li04LilCivguJXguLTguKXguIEKK+C4leC4tOC5ieC4pwor4LiV4Li04Liq4Lij4LiT4LiE4Lih4LiZ4Li54Lib4Liq4Lix4Lih4Lib4LiX4LiyCivguJXguLUKK+C4leC4teC5iAor4LiV4Li14LmLCivguJXguLXguJfguK3guIcKK+C4leC4teC4mQor4LiV4Li14LiZ4LiI4LmJ4LizCivguJXguLXguJnguYDguJfguLXguKLguJkKK+C4leC4teC4meC5geC4o+C4lAor4LiV4Li14LiaCivguJXguLXguKPguJbguLAKK+C4leC4teC4o+C4sAor4LiV4Li14Lir4Lih4LiyCivguJXguLYKK+C4leC4tuC5hgor4LiV4Li24LiBCivguJXguLbguIHguYYKK+C4leC4tuC5ieC4geC5hgor4LiV4Li24LmJ4LiB4LiV4Lix4LmJ4LiBCivguJXguLbguIcKK+C4leC4tuC4lOC4leC4t+C5i+C4rQor4LiV4Li24LmK4LiU4LiV4Li34LmL4LitCivguJXguLfguJQKK+C4leC4t+C5iOC4mQor4LiV4Li34LmJ4LiZCivguJXguLfguYnguK0KK+C4leC4t+C5iuC4rQor4LiV4Li34LmL4LitCivguJXguLfguK3guK7guKfguJkKK+C4leC4uAor4LiV4Li44LmKCivguJXguLjguYYKK+C4leC4uOC5iuC4geC5geC4gQor4LiV4Li44LmK4LiB4LiV4LiyCivguJXguLjguYrguIHguJXguYjguLMKK+C4leC4uOC5iuC4geC4leC5iOC4s+C4meC5ieC4s+C4l+C4reC4hwor4LiV4Li44LiB4LiV4Li04LiBCivguJXguLjguYrguIHguJXguLTguYrguIEKK+C4leC4uOC5iuC4geC4leC4uOC5iOC4mQor4LiV4Li44LmK4LiB4LiV4Li44LmL4LiiCivguJXguLjguIcKK+C4leC4uOC5ieC4h+C4geC5iOC4sgor4LiV4Li44LmJ4LiH4LiV4Li04LmJ4LiHCivguJXguLjguYrguJTguJXguLnguYgKK+C4leC4uOC4mQor4LiV4Li44LmI4LiZCivguJXguLjguYvguJkKK+C4leC4uOC5ieC4meC5geC4i+C4sAor4LiV4Li44LmI4LiZ4LiV4LmI4Liy4LiZCivguJXguLjguJnguLLguKvguIfguLHguJkKK+C4leC4uOC4muC5hgor4LiV4Li44LmJ4Lia4LmGCivguJXguLjguYrguJrguJvguYjguK3guIcKK+C4leC4uOC4m+C4seC4lOC4leC4uOC4m+C5iOC4reC4hwor4LiV4Li44Lib4Lix4LiU4LiV4Li44LmA4Lib4LmLCivguJXguLjguYjguKEKK+C4leC4uOC5ieC4oQor4LiV4Li44LmL4LihCivguJXguLjguYrguKHguYYKK+C4leC4uOC5iuC4oeC5huC4leC5ieC4reC4oeC5hgor4LiV4Li44LmJ4Lih4LiB4Lin4LmJ4Liy4LinCivguJXguLjguKHguIHguLIKK+C4leC4uOC5ieC4oeC5geC4i+C4sAor4LiV4Li44Lih4LiV4Lix4LiHCivguJXguLjguYnguKHguYDguJXguYvguJkKK+C4leC4uOC5ieC4oeC4m+C4teC5iAor4LiV4Li44Lih4LieCivguJXguLjguYjguKIKK+C4leC4uOC5ieC4ogor4LiV4Li44LmK4LiiCivguJXguLjguYjguKLguYYKK+C4leC4uOC5ieC4ouC5hgor4LiV4Li44LmL4Lii4LiV4Li44LmI4LiiCivguJXguLjguKPguIQKK+C4leC4uOC4o+C4h+C4hOC5jAor4LiV4Li44Lij4Li04Lii4Liy4LiH4LiE4LmMCivguJXguLjguKXguKrguLQKK+C4leC4uOC4peC4sgor4LiV4Li44Lir4Lij4Lix4LiU4LiV4Li44LmA4Lir4Lij4LmICivguJXguLkKK+C4leC4ueC5iAor4LiV4Li54LmJCivguJXguLnguIEKK+C4leC4ueC4lAor4LiV4Li54LiU4LiH4Lit4LiZCivguJXguLnguJoKK+C4leC4ueC4oQor4LiV4Li54Lil4Li04LmI4LiZ4Liu4Li34LmJ4LitCivguJXguLnguKvguJnguLIKK+C5gOC4lQor4LmA4LiV4LiBCivguYDguJXguYfguIEKK+C5gOC4leC5h+C4hwor4LmA4LiV4LmI4LiHCivguYDguJXguIoKK+C5gOC4leC5guC4igor4LmA4LiV4LmJ4LiZCivguYDguJXguYfguJnguJfguYwKK+C5gOC4leC5h+C4oQor4LmA4LiV4LiiCivguYDguJXguYnguKIKK+C5gOC4leC5iuC4ogor4LmA4LiV4Lij4LmICivguYDguJXguKPguYfguJQKK+C5gOC4leC4o+C5h+C4lOC5gOC4leC4o+C5iAor4LmA4LiV4Lij4LmH4LiU4LmA4LiV4Lij4LiZCivguYDguJXguKPguJkKK+C5gOC4leC4o+C4tOC4hwor4LmA4LiV4Lij4Li14Lii4LiUCivguYDguJXguKPguLXguKLguJoKK+C5gOC4leC4o+C4teC4ouC4oQor4LmA4LiV4Lij4Li14Lii4Lih4LiV4Lij4LihCivguYDguJXguKXguLAKK+C5gOC4leC4peC4tOC4lAor4LmA4LiV4Lin4LmH4LiUCivguYDguJXguYjguK0KK+C5gOC4leC4reC4sAor4LmA4LiV4LiwCivguYDguJXguYrguLAKK+C5gOC4leC5iuC4sOC4iOC4uOC5iuC4ogor4LmA4LiV4LmK4Liw4LiX4LmI4LiyCivguYDguJXguLIKK+C5gOC4leC5iOC4sgor4LmA4LiV4LmJ4LiyCivguYDguJXguYvguLIKK+C5gOC4leC5iOC4suC4geC4o+C4sOC4quC4uOC4mQor4LmA4LiV4LmI4Liy4LiB4Li04LiZ4Lic4Lix4LiB4Lia4Li44LmJ4LiHCivguYDguJXguYjguLLguYDguIHguLXguKLguJQKK+C5gOC4leC5ieC4suC5gOC4iOC4teC5ieC4ouC4pwor4LmA4LiV4LmI4Liy4LiX4Lit4LiHCivguYDguJXguYjguLLguJfguK3guYDguKrguLfguYjguK0KK+C5gOC4leC5ieC4suC4l+C4tuC4hwor4LmA4LiV4LmI4Liy4Lia4LmJ4LiyCivguYDguJXguYjguLLguKPguLHguYnguIcKK+C5gOC4leC5iOC4suC4o+C5ieC4suC4hwor4LmA4LiV4LmI4Liy4LmA4Lil4Li34Lit4LiZCivguYDguJXguYnguLLguKrguYjguKfguJkKK+C5gOC4leC5ieC4suC5gOC4quC4teC4ouC4mgor4LmA4LiV4LmI4Liy4Lir4Lix4LiaCivguYDguJXguYnguLLguKvguLnguYkKK+C5gOC4leC5ieC4suC4ruC4p+C4ogor4LmA4LiV4LmK4Liy4LiwCivguYDguJXguLLguLDguYHguJXguLAKK+C5gOC4leC4tOC5iOC4hwor4LmA4LiV4Li04LiZ4LmA4LiV4LmI4LitCivguYDguJXguLTguJoKK+C5gOC4leC4tOC4oQor4LmA4LiV4Li14LmI4LiiCivguYDguJXguLXguYnguKIKK+C5gOC4leC4teC4ouC4hwor4LmA4LiV4Li14Lii4LiZCivguYDguJXguLXguKLguJoKK+C5gOC4leC4teC5iuC4ouC4oQor4LmA4LiV4Li14LmL4Lii4LihCivguYDguJXguLXguKLguKPguJbguYwKK+C5gOC4leC4teC4ouC4pwor4LmA4LiV4Li14LmI4Lii4LinCivguYDguJXguLfguYnguK0KK+C5gOC4leC4t+C4reC4mQor4LmB4LiV4LmICivguYHguJXguYkKK+C5geC4leC5iOC5hgor4LmB4LiV4LiBCivguYHguJXguYjguIHguYjguK3guJnguYHguJXguYjguIHguLXguYkKK+C5geC4leC5iOC4geC4teC5ieC5geC4leC5iOC4geC5iOC4reC4mQor4LmB4LiV4LiHCivguYHguJXguYjguIcKK+C5geC4leC4h+C5gOC4oQor4LmB4LiV4LmJ4LiI4Li04LmL4LinCivguYHguJXguJQKK+C5geC4leC5iuC4lOC5geC4leC5iwor4LmB4LiV4LiZCivguYHguJXguYnguKEKK+C5geC4leC4owor4LmB4LiV4Lij4LiwCivguYHguJXguYnguKfguYHguKPguYnguKcKK+C5geC4leC4sAor4LmC4LiVCivguYLguJXguYkKK+C5guC4leC4gQor4LmC4LiV4LmJ4LiHCivguYLguJXguYnguIfguYYKK+C5guC4leC4h+C5huC5gOC4leC4h+C5hgor4LmC4LiV4LiH4LmA4LiV4LiHCivguYLguJXguI7guIEKK+C5guC4leC5iuC4lAor4LmC4LiV4LmL4LmA4LiV4LmLCivguYLguJXguJkKK+C5guC4leC4meC4lAor4LmC4LiV4LmJ4LmC4LicCivguYLguJXguKHguKMKK+C5guC4leC4oeC4o+C4mOC4owor4LmC4LiV4LiiCivguYLguJXguKPguIEKK+C5guC4leC4o+C4geC5hOC4leC4owor4LmC4LiV4Lij4LiUCivguYLguJXguYnguKvguKXguIcKK+C5guC4leC5iuC4sAor4LmD4LiV4LmJCivguYTguJUKK+C5hOC4leC5iAor4LmE4LiV4LmJCivguYTguJXguYsKK+C5hOC4leC5ieC4geC5i+C4hwor4LmE4LiV4LmJ4Lid4Li44LmI4LiZCivguYTguJXguYjguYTguKHguYkKK+C5hOC4leC4owor4LmE4LiV4Lij4LiB4Li04Lio4Lii4LiyCivguYTguJXguKPguJTguLLguKLguLjguIQKK+C5hOC4leC4o+C5iOC4leC4o+C4reC4hwor4LmE4LiV4Lij4LiiCivguYTguJXguYnguKvguKfguLHguJkKK+C5hOC4leC5ieC4reC5i+C4reC4hwor4LiWCivguJbguIEKK+C4luC4geC4pQor4LiW4LiH4Lix4LiZCivguJbguIfguLLguJQKK+C4luC4lAor4LiW4LiZCivguJbguJnguJkKK+C4luC4meC4mwor4LiW4LiZ4Lit4LihCivguJbguJnguLHguJQKK+C4luC4meC4seC4mQor4LiW4LiZ4LizCivguJbguJnguLTguKEKK+C4luC4meC4tOC4oeC4quC4o+C5ieC4reC4ogor4LiW4LiaCivguJbguJrguJTguLUKK+C4luC4oQor4LiW4LmI4LihCivguJbguKHguK0KK+C4luC4oeC4tuC4h+C4l+C4tuC4hwor4LiW4LilCivguJbguKXguIEKK+C4luC4peC4geC4muC4suC4leC4owor4LiW4Lil4LiZCivguJbguKXguKEKK+C4luC4peC5iOC4oQor4LiW4Lil4Lit4LiBCivguJbguKXguLHguIEKK+C4luC4peC4seC4mQor4LiW4Lil4LiyCivguJbguKXguLLguIEKK+C4luC4peC4suC4ogor4LiW4Lil4LizCivguJbguKXguLXguJbguKXguLMKK+C4luC4peC4tuC4h+C4leC4sgor4LiW4Lil4Li44LiHCivguJbguKXguLjguJkKK+C4luC5iOC4p+C4hwor4LiW4LmJ4Lin4LiZCivguJbguYnguKfguKIKK+C4luC5ieC4p+C4ouC5guC4luC4hwor4LiW4Lin4Lix4LiUCivguJbguKfguLHguKUKK+C4luC4p+C4seC4peC4ouC5jAor4LiW4Lin4Liy4LiiCivguJbguKfguLTguJkKK+C4luC4p+C4tOC4pQor4LiW4LmI4LitCivguJbguYnguK0KK+C4luC4reC4gQor4LiW4Lit4LiHCivguJbguYjguK3guIcKK+C4luC5ieC4reC4hwor4LiW4Lit4LiUCivguJbguK3guJkKK+C4luC4reC4mgor4LiW4Lit4Lia4LmB4LiW4LiaCivguJbguYjguK3guKEKK+C4luC4reC4ogor4LiW4LmI4Lit4LiiCivguJbguYnguK3guKIKK+C4luC4sAor4LiW4Liw4LiB4Lix4LiUCivguJbguLDguYDguIHguLTguJkKK+C4luC4sOC5guC4geC4mQor4LiW4Liw4LiW4Lix4LmI4LiZCivguJbguLDguJbguLHguJoKK+C4luC4sOC4luC4uOC4meC4luC4sOC4luC4seC4mQor4LiW4Liw4Lih4Lix4LiU4LiW4Liw4LmB4Lih4LiHCivguJbguLHguIEKK+C4luC4seC4hwor4LiW4Lix4LmI4LiHCivguJbguLHguJPguJHguLTguKUKK+C4luC4seC4lAor4LiW4Lix4LiX4LiYCivguJbguLHguJkKK+C4luC4seC5iOC4mQor4LiW4Lix4LmI4LiZ4LmGCivguJbguLHguJoKK+C4luC4seC4muC5hgor4LiW4Lix4Lih4Lig4LmMCivguJbguLHguKcKK+C4luC4seC5iOC4pwor4LiW4Lix4LmI4Lin4LiC4Liy4LinCivguJbguLIKK+C4luC5ieC4sgor4LiW4Liy4LiBCivguJbguLLguIcKK+C4luC5iOC4suC4hwor4LiW4Liy4LiUCivguJbguLLguJkKK+C4luC5iOC4suC4mQor4LiW4Liy4LiaCivguJbguLLguKEKK+C4luC4suC4oeC4sAor4LiW4LmI4Liy4LiiCivguJbguYjguLLguKLguYDguJTguLXguKLguKcKK+C4luC5iOC4suC4pwor4LiW4Liy4Lin4LijCivguJbguLLguKfguKPguJjguLTguKPguLIKK+C4luC4suC4p+C4o+C4p+C4seC4leC4luC4uAor4LiW4LmJ4LizCivguJbguLTguYjguJkKK+C4luC4tQor4LiW4Li14LmICivguJbguLXguYjguYYKK+C4luC4teC4mgor4LiW4Li14Lia4LiJ4Lix4LiUCivguJbguLbguIEKK+C4luC4tuC4hwor4LiW4Li34LitCivguJbguLjguIcKK+C4luC4uOC4mQor4LiW4Li44LiiCivguJbguLjguKUKK+C4luC4uOC4peC4peC4sAor4LiW4Li5CivguJbguLnguIEKK+C5gOC4luC4geC4tOC4hwor4LmA4LiW4LiZCivguYDguJbguKHguLTguJkKK+C5gOC4luC4owor4LmA4LiW4Lij4LiwCivguYDguJbguKXguYTguJbguKUKK+C5gOC4luC4peC4tOC4gQor4LmA4LiW4Lil4Li04LiHCivguYDguJbguKXguLfguK3guIHguJbguKXguJkKK+C5gOC4luC5iOC4rQor4LmA4LiW4Lit4LiwCivguYDguJbguLIKK+C5gOC4luC5ieC4sgor4LmA4LiW4Liy4LiE4Lix4LiZCivguYDguJbguLLguITguLHguJnguYDguKvguKXguYfguIEKK+C5gOC4luC4suC5gOC4h+C4suC4sAor4LmA4LiW4Liy4Lih4Lin4LiBCivguYDguJbguLLguKfguLHguKXguKLguYzguYDguILguLXguKLguKcKK+C5gOC4luC4suC4p+C4seC4peC4ouC5jOC4m+C4ueC4mQor4LmA4LiW4Liy4Lin4Lix4Lil4Lii4LmM4LmA4Lib4Lij4Li14Lii4LiHCivguYDguJbguLLguKfguLHguKXguKLguYzguKLguK3guJTguJTguYnguKfguJkKK+C5gOC4luC4suC4p+C4seC4peC4ouC5jOC5gOC4q+C4peC5h+C4gQor4LmA4LiW4Liy4Liq4Li04LiH4LmC4LiVCivguYDguJbguLLguKvguLHguKfguJTguYnguKfguJkKK+C5gOC4luC4suC4sAor4LmA4LiW4Li04LiBCivguYDguJbguLTguIcKK+C5gOC4luC4tOC4lAor4LmA4LiW4Li04LiU4LmA4LiX4Li04LiHCivguYDguJbguLTguJkKK+C5gOC4luC4teC4ouC4hwor4LmA4LiW4Li14Lii4LijCivguYDguJbguLfguK0KK+C5gOC4luC4t+C4reC4gQor4LmA4LiW4Li34LmI4Lit4LiZCivguYHguJYKK+C5geC4luC4gQor4LmB4LiW4LiHCivguYHguJbguJkKK+C5geC4luC4mgor4LmB4LiW4LihCivguYHguJbguKXguIcKK+C5geC4luC4peC4mgor4LmB4LiW4LinCivguYLguJYKK+C5guC4luC4hwor4LmC4LiW4LiH4LmA4LiW4LiHCivguYLguJbguJoKK+C5guC4luC4oQor4LmC4LiW4Lih4LiZ4Liy4LiB4Liy4LijCivguYTguJYKK+C5hOC4luC5iAor4LmE4LiW4LmJCivguYTguJbguIcKK+C5hOC4luC4pQor4LiXCivguJfguIEKK+C4l+C4geC4peC5ieC4sgor4LiX4LmB4LiB4Lil4LmJ4LinCivguJfguYjguIcKK+C4l+C4h+C4seC4mQor4LiX4LiK4Li1CivguJfguJQKK+C4l+C4lOC5guC4l+C4o+C5iOC4qwor4LiX4LiXCivguJfguJjguLQKK+C4l+C4mQor4LiX4LmJ4LiZCivguJfguJnguJTguLUKK+C4l+C4meC4leC5jAor4LiX4LiZ4LmC4LiX4LmICivguJfguJnguKEKK+C4l+C4meC4quC4oeC4uOC4l+C4owor4LiX4LiZ4Liy4LiiCivguJfguJoKK+C4l+C4muC4p+C4hwor4LiX4LihCivguJfguKHguIEKK+C4l+C4oeC4mQor4LiX4Lih4LiaCivguJfguKHguK0KK+C4l+C4oeC4tOC4rAor4LiX4LmA4Lih4Li04LiZCivguJfguYLguKHguJkKK+C4l+C4ouC4reC4ogor4LiX4Lii4LiyCivguJfguYHguKLguIcKK+C4l+C4owor4LiX4Lij4LiHCivguJfguKPguIfguIHguKPguLDguYDguJfguLXguKLguKEKK+C4l+C4o+C4h+C4muC4suC4lOC4suC4pQor4LiX4Lij4LiX4Li24LiHCivguJfguKPguJ7guLUKK+C4l+C4o+C4oeC4suC4l+C4o+C4geC4o+C4o+C4oQor4LiX4Lij4Lih4Liy4LiZCivguJfguKPguKHguLjguIEKK+C4l+C4o+C4o+C4l+C4tuC4hwor4LiX4Lij4Lij4LibCivguJfguKPguKPguJvguJPguYwKK+C4l+C4o+C4o+C4m+C4k+C4sAor4LiX4Lij4Lij4Lio4LiZ4LiwCivguJfguKPguKPguKjguJnguLXguKLguYwKK+C4l+C4o+C5gOC4peC5iOC4q+C5jAor4LiX4Lij4Lin4LiHCivguJfguKPguKfguJQKK+C4l+C4o+C4p+C4lOC4l+C4o+C4hwor4LiX4Lij4Lin4Liy4LijCivguJfguKPguKrguK3guIfguJfguKPguKrguLjguKEKK+C4l+C4o+C4quC4suC4ogor4LiX4Lij4Liq4Li44LihCivguJfguKPguKvguJQKK+C4l+C4o+C4q+C4mQor4LiX4Lij4Lir4Lin4LilCivguJfguKPguKvguLbguIcKK+C4l+C4o+C4q+C4tuC4h+C4l+C4o+C4q+C4p+C4pQor4LiX4Lij4Lir4Li5CivguJfguKPguYDguKvguKUKK+C4l+C4o+C4rQor4LiX4Lij4Lit4Lih4LmC4Lia4LiZCivguJfguKPguK3guLbguIcKK+C4l+C4o+C4reC4uOC5ieC4oQor4LiX4Lij4Liw4LiZ4LiHCivguJfguKPguLDguJnguLLguKcKK+C4l+C4o+C4seC4nuC4ouC5jAor4LiX4Lij4Lix4Lih4LmA4Lib4LmH4LiVCivguJfguKPguLHguKrguJXguYwKK+C4l+C4o+C4suC4meC4i+C4tOC4quC5gOC4leC4reC4o+C5jAor4LiX4Lij4Liy4LiaCivguJfguKPguLLguKEKK+C4l+C4o+C4suC4ogor4LiX4Lij4Liy4Lii4LiC4Liy4LinCivguJfguKPguLTguJfguKMKK+C4l+C4o+C4uOC4lAor4LiX4Lij4Li44LihCivguJfguKPguLjguKHguILguLHguJPguJHguYwKK+C4l+C4o+C4uOC4oeC4oeC4seC4ogor4LiX4Lij4Li44Lih4Lin4Liy4Liq4Li1CivguJfguKPguLjguKHguYDguKjguKPguKnguJDguYwKK+C4l+C4o+C4uOC4oeC4suC4o+C4tAor4LiX4Lij4Li44Lih4Liy4Lil4Lix4LiiCivguJfguKPguLnguYgKK+C4l+C4pOC4qeC4juC4tQor4LiX4LilCivguJfguKXguJrguKEKK+C4l+C4peC4reC4tuC4hwor4LiX4Lil4Liy4LiiCivguJfguKXguLTguJcKK+C4l+C4peC4tOC4l+C4l+C4gQor4LiX4Lin4LiHCivguJfguYnguKfguIcKK+C4l+C5iOC4p+C4h+C4l+C5iOC4sgor4LiX4LmI4Lin4LiH4LiX4Liz4LiZ4Lit4LiHCivguJfguYjguKfguIfguJfguLUKK+C4l+C4p+C4lAor4LiX4Lin4LiU4Li24LiH4Liq4LmMCivguJfguKfguJkKK+C4l+C5ieC4p+C4mQor4LiX4LmI4Lin4LihCivguJfguYnguKfguKEKK+C4l+C5ieC4p+C4oeC5hgor4LiX4Lin4LiiCivguJfguYjguKfguKIKK+C4l+C5ieC4p+C4ogor4LiX4Lin4Lii4LiwCivguJfguKfguK3guKIKK+C4l+C4p+C4seC4leC4lOC4tuC4h+C4quC5jAor4LiX4Lin4Lix4LiiCivguJfguKfguLIKK+C4l+C4p+C5iOC4sgor4LiX4Lin4Liy4Lia4Lij4Lii4Li44LiECivguJfguKfguLLguKIKK+C4l+C4p+C4suC4owor4LiX4Lin4Liy4Lij4Liy4Lin4LiU4Li1CivguJfguKfguLQKK+C4l+C4p+C4tOC4igor4LiX4Lin4Li04LiV4Li14LiiCivguJfguKfguLTguJXguLXguKLguLIKK+C4l+C4p+C4tOC4owor4LiX4Lin4Li1CivguJfguKfguLXguJsKK+C4l+C4p+C4teC4m+C4tQor4LiX4LioCivguJfguKjguLIKK+C4l+C4qOC4suC4h+C4hOC5jAor4LiX4Liq4Lih4Li1CivguJfguKrguLIKK+C4l+C4q+C4o+C4sAor4LiX4Lir4Liy4LijCivguJfguK0KK+C4l+C5iOC4rQor4LiX4LmJ4LitCivguJfguK3guIEKK+C4l+C4reC4hwor4LiX4LmI4Lit4LiHCivguJfguYnguK3guIcKK+C4l+C4reC4h+C4geC4p+C4suC4pwor4LiX4Lit4LiH4LmA4LiE4Lij4Li34LitCivguJfguK3guIfguJjguKPguKPguKHguIrguLLguJXguLQKK+C4l+C4reC4h+C5gOC4nOC4t+C4reC4gQor4LiX4Lit4LiH4Lie4Lij4Liw4LiC4Li44LiZCivguJfguK3guIfguJ7guKXguLgKK+C4l+C5ieC4reC4h+C4nuC4peC4uAor4LiX4Lit4LiH4Lie4Lix4LiZ4LiK4LmI4Liy4LiHCivguJfguK3guIfguJ7guLHguJnguJTguLjguKUKK+C4l+C4reC4h+C4oOC4uQor4LiX4Lit4LiH4Lih4LmJ4Lin4LiZCivguJfguK3guIfguKLguYnguK3guKIKK+C4l+C4reC4h+C4peC4tOC4mQor4LiX4Lit4LiH4Lir4Lil4Liy4LiHCivguJfguK3guIfguYLguKvguKXguIcKK+C4l+C4reC4h+C4reC4uOC5hOC4owor4LiX4Lit4LiUCivguJfguK3guJkKK+C4l+C5iOC4reC4mQor4LiX4Lit4LiZ4LiL4Li04LilCivguJfguK3guJ/guJ/guLXguYgKK+C4l+C4reC4oQor4LiX4LmI4Lit4Lih4LmGCivguJfguK3guKIKK+C4l+C4reC4o+C5jOC4meC4suC5guC4lAor4LiX4Lit4LmA4Lij4Li14Lii4LihCivguJfguLAKK+C4l+C4sOC4h+C4seC4mQor4LiX4Liw4LiX4LmI4Liy4LinCivguJfguLDguYDguJfguLXguKLguJQKK+C4l+C4sOC4meC4hwor4LiX4Liw4LiZ4LiZCivguJfguLDguJnguLAKK+C4l+C4sOC4meC4sgor4LiX4Liw4LiZ4Liy4LiZCivguJfguLDguJnguLgKK+C4l+C4sOC4muC4uQor4LiX4Liw4LmA4Lia4Li14Lii4LiZCivguJfguLDguKHguLHguJTguJfguLDguYHguKHguIcKK+C4l+C4sOC4oeC4tuC4mQor4LiX4Liw4Lih4Li34LmI4LiZCivguJfguLDguYHguKHguYjguIcKK+C4l+C4sOC4ouC4suC4l+C4sOC5geC4ouC5geC4qgor4LiX4Liw4Lii4Liy4LiZCivguJfguLDguYDguKLguK3guJfguLDguKLguLLguJkKK+C4l+C4sOC5geC4ogor4LiX4Liw4Lij4LmI4Lit4LiX4Liw4LmB4Lij4LmICivguJfguLDguKXguKfguIcKK+C4l+C4sOC4peC4reC4gQor4LiX4Liw4Lil4LmI4Lit4LiX4Liw4Lil4LmI4LiyCivguJfguLDguKXguLHguIEKK+C4l+C4sOC4peC4seC4geC4l+C4sOC5geC4peC4hwor4LiX4Liw4Lil4Liy4LiiCivguJfguLDguKXguLTguYjguJkKK+C4l+C4sOC4peC4tuC5iOC4hwor4LiX4Liw4Lil4Li4CivguJfguLDguKXguLjguJfguLDguKXguLLguJQKK+C4l+C4sOC5gOC4pQor4LiX4Liw4LmA4Lil4LmJ4LiZCivguJfguLDguYDguKXguLLguLAKK+C4l+C4sOC4p+C4suC4ogor4LiX4Liw4LmA4Lin4LiZCivguJfguLHguIEKK+C4l+C4seC4geC4guC5jAor4LiX4Lix4LiB4LiC4Li04LiNCivguJfguLHguIHguILguLTguJMKK+C4l+C4seC4geC4guC4tOC4k+C4sgor4LiX4Lix4LiB4LiC4Li04LiT4Liy4Lia4LiWCivguJfguLHguIHguILguLTguJPguLLguKfguLHguI8KK+C4l+C4seC4geC4guC4tOC5guC4k+C4l+C4gQor4LiX4Lix4LiB4LiC4Li04LmE4LiT4Lii4Lia4Li44LiE4LiE4LilCivguJfguLHguIHguJfguK0KK+C4l+C4seC4geC4l+C4tOC4mQor4LiX4Lix4LiB4Lip4LiwCivguJfguLHguIHguKnguLIKK+C4l+C4seC4geC4qeC4tOC4kwor4LiX4Lix4LiB4Lip4Li04LiT4LiyCivguJfguLHguITguJjguYwKK+C4l+C4seC4hwor4LiX4Lix4LmI4LiHCivguJfguLHguYnguIcKK+C4l+C4seC4h+C4p+C4pQor4LiX4Lix4LiH4Lin4Li14LmJ4LiX4Lix4LiH4Lin4LilCivguJfguLHguIfguKrguYDguJXguJkKK+C4l+C4seC4k+C4keC4geC4o+C4o+C4oQor4LiX4Lix4LiT4LiR4LiG4Liy4LiVCivguJfguLHguJPguJHguJjguKMKK+C4l+C4seC4k+C4keC4meC4suC4ouC4gQor4LiX4Lix4LiT4LiR4LiZ4Li04LiE4LihCivguJfguLHguJPguJHguJnguLXguJXguLQKK+C4l+C4seC4k+C4keC5jOC4muC4mQor4LiX4Lix4LiT4LiR4Lib4Liy4Lio4LiBCivguJfguLHguJPguJHguKDguLHguKIKK+C4l+C4seC4k+C4keC4oeC4uOC4ggor4LiX4Lix4LiT4LiR4Lii4Liy4LiV4Lij4LiyCivguJfguLHguJPguJHguKfguLTguJfguKLguLIKK+C4l+C4seC4k+C4keC4quC4luC4suC4mQor4LiX4Lix4LiT4LiR4Liq4Lii4Liy4LihCivguJfguLHguJPguJHguLAKK+C4l+C4seC4k+C4keC4tOC4geC4sgor4LiX4Lix4LiT4LiR4Li04Lih4LiyCivguJfguLHguJPguJHguLUKK+C4l+C4seC4k+C4keC4teC4muC4lwor4LiX4Lix4LiUCivguJfguLHguJTguJfguLIKK+C4l+C4seC4lQor4LiX4Lix4LiZCivguJfguLHguJnguJXguYwKK+C4l+C4seC4meC4leC4tOC4mQor4LiX4Lix4LiZ4LiV4Li1CivguJfguLHguJnguJjguYwKK+C4l+C4seC4mgor4LiX4Lix4Lia4LmA4LiB4Lip4LiV4LijCivguJfguLHguJrguJfguLTguKEKK+C4l+C4seC4muC5gOC4peC5h+C4gQor4LiX4Lix4Lia4Liq4Lih4Li04LiH4LiE4Lil4LiyCivguJfguLHguJsKK+C4l+C4seC4m+C4mQor4LiX4Lix4LieCivguJfguLHguJ7guJ7guLAKK+C4l+C4seC4nuC4nuC4tQor4LiX4Lix4Lih4Lih4LiwCivguJfguLHguYjguKcKK+C4l+C4seC4qAor4LiX4Lix4Lio4LiZ4LmMCivguJfguLHguKjguJnguLAKK+C4l+C4seC4qOC4meC4sgor4LiX4Lix4Lio4LiZ4Li14Lii4LmMCivguJfguLHguKjguYTguJnguKIKK+C4l+C4seC4quC4meC4suC4meC4uOC4leC4o+C4tOC4ouC4sAor4LiX4Lix4Lis4LirCivguJfguLHguKzguKvguLTguIHguKPguJPguYwKK+C4l+C4seC4rOC4q+C4teC4geC4o+C4o+C4oQor4LiX4LiyCivguJfguYjguLIKK+C4l+C5ieC4sgor4LiX4Liy4LiBCivguJfguLLguIcKK+C4l+C5ieC4suC4hwor4LiX4Liy4LiQ4LiwCivguJfguLLguJDguLTguIHguLAKK+C4l+C4suC4kuC4sAor4LiX4Liy4LiS4Li04LiB4LiwCivguJfguLLguJkKK+C4l+C5iOC4suC4mQor4LiX4Liy4LiZ4LiB4Lix4LiT4LiR4LmMCivguJfguLLguJnguIHguLLguKEKK+C4l+C4suC4meC4leC5jAor4LiX4Liy4LiZ4LiV4Liw4Lin4Lix4LiZCivguJfguLLguJnguJjguKPguKPguKEKK+C4l+C4suC4meC4muC4lOC4tQor4LiX4Liy4LiZ4Lia4Liy4Lij4Lih4Li1CivguJfguLLguJnguJ4KK+C4l+C4suC4meC4qOC4teC4pQor4LiX4Liy4LiZ4Liq4Lih4Liy4Lia4Lix4LiV4Li0CivguJfguLLguJnguLLguJjguLTguJrguJTguLUKK+C4l+C4suC4mgor4LiX4Liy4LihCivguJfguYjguLLguKHguIHguKXguLLguIcKK+C4l+C4suC4oeC4o+C4tOC4gQor4LiX4Liy4LiiCivguJfguYnguLLguKIKK+C4l+C4suC4ouC4gQor4LiX4Liy4Lii4Lix4LiKCivguJfguLLguKLguLIKK+C4l+C4suC4ouC4suC4lAor4LiX4Liy4Lii4Liy4LiXCivguJfguLLguKPguIEKK+C4l+C4suC4o+C5jOC4i+C4suC4mQor4LiX4Liy4Lij4Lie4Li1CivguJfguLLguKPguLTguIHguLIKK+C4l+C4suC4o+C4uAor4LiX4Liy4Lij4Li44LiTCivguJfguLLguKPguLjguJPguIHguKPguKPguKEKK+C4l+C4suC4pwor4LiX4LmI4Liy4LinCivguJfguYnguLLguKcKK+C4l+C4suC4qQor4LiX4Liy4LiqCivguJfguLLguKrguLUKK+C4l+C4swor4LiX4Liz4LiH4LiZCivguJfguLPguJnguJoKK+C4l+C4s+C4meC4p+C4ogor4LiX4Liz4LiZ4Lit4LiHCivguJfguLPguJnguLLguKIKK+C4l+C4s+C4meC4uAor4LiX4Liz4LiZ4Li54LilCivguJfguLPguYDguJnguLIKK+C4l+C4s+C5gOC4meC4teC4ouC4mgor4LiX4Liz4LmA4LiZ4Li14Lii4LihCivguJfguLPguKHguLHguIcKK+C4l+C4s+C5hOC4oQor4LiX4Liz4Lil4Liy4LiiCivguJfguLPguYDguKUKK+C4l+C4s+C4p+C4mQor4LiX4Li04LiE4Lix4Lih4Lie4LijCivguJfguLTguIbguLHguKHguJ7guKMKK+C4l+C4tOC5ieC4hwor4LiX4Li04LiH4LmA4LiI4Lit4Lij4LmMCivguJfguLTguYnguIfguJbguYjguK3guJkKK+C4l+C4tOC5ieC4h+C4l+C4ueC4lAor4LiX4Li04LiKCivguJfguLTguI/guJDguIrguLjguIHguKPguKPguKEKK+C4l+C4tOC4j+C4kOC4sAor4LiX4Li04LiP4LiQ4Liy4LiZ4Li44LiE4LiV4Li0CivguJfguLTguJDguLQKK+C4l+C4tOC4lAor4LiX4Li04LiVCivguJfguLTguJkKK+C4l+C4tOC4meC4suC4lwor4LiX4Li04LieCivguJfguLTguJ7guKLguYwKK+C4l+C4tOC4nuC4sgor4LiX4Li04LihCivguJfguLTguYjguKEKK+C4l+C4tOC4oeC4l+C4reC4hwor4LiX4Li04LinCivguJfguLTguKfguIfguITguJUKK+C4l+C4tOC4p+C4l+C4seC4qOC4meC5jAor4LiX4Li04Lin4Liq4LiwCivguJfguLTguKfguLIKK+C4l+C4tOC4qAor4LiX4Li04Lio4LiyCivguJfguLUKK+C4l+C4teC5iAor4LiX4Li14LibCivguJfguLXguKEKK+C4l+C4teC4p+C4tQor4LiX4Li14LmA4Lit4LiZ4LiX4Li1CivguJfguLbguIEKK+C4l+C4tuC5iOC4hwor4LiX4Li24LmJ4LiHCivguJfguLbguJTguJfguLfguK0KK+C4l+C4tuC4meC4l+C4tuC4gQor4LiX4Li24LiaCivguJfguLbguKEKK+C4l+C4tuC5iOC4oQor4LiX4Li34LmI4LitCivguJfguLgKK+C4l+C4uOC4gQor4LiX4Li44LiB4LiCCivguJfguLjguIHguILguYwKK+C4l+C4uOC4geC4guC4seC4geC4qeC4seC4ogor4LiX4Li44LiB4LiPCivguJfguLjguIHguKnguJTguKMKK+C4l+C4uOC4geC4sAor4LiX4Li44LiB4Lix4LiHCivguJfguLjguIHguLnguKUKK+C4l+C4uOC4hOC4leC4sAor4LiX4Li44LiE4LiV4Li0CivguJfguLjguYjguIcKK+C4l+C4uOC5ieC4hwor4LiX4Li44LiH4LiH4LiwCivguJfguLjguIfguYDguJfguIcKK+C4l+C4uOC4iOC4iOC4tOC4k+C4k+C4sAor4LiX4Li44LiI4Lij4Li04LiVCivguJfguLjguI/guJDguLAKK+C4l+C4uOC4j+C4kOC4uOC4peC4peC4sAor4LiX4Li44LiUCivguJfguLjguJXguKfguLTguKXguLHguKHguJ7guLTguJXguKHguLLguKXguLIKK+C4l+C4uOC4leC4tOC4ouC4suC4quC4suC4rOC4qwor4LiX4Li44LiX4Lij4Lij4Lio4LiZ4LiZ4Li04Lii4LihCivguJfguLjguJkKK+C4l+C4uOC5iOC4mQor4LiX4Li44LiZ4LiZ4Li04Lih4Li04LiVCivguJfguLjguJnguLTguKLguKEKK+C4l+C4uOC4mgor4LiX4Li44Lia4LiX4Li5CivguJfguLjguJvguJvguLHguI3guI3guLIKK+C4l+C4uOC4nuC4nuC4o+C4o+C4kwor4LiX4Li44Lie4Lie4LilCivguJfguLjguJ7guJ7guKXguKDguLLguJ4KK+C4l+C4uOC4nuC4oOC4tOC4geC4guC4oOC4seC4ogor4LiX4Li44Lie4Lig4Li04LiB4LiC4Lix4LiZ4LiU4Lij4LiB4Lix4LibCivguJfguLjguKEKK+C4l+C4uOC5iOC4oQor4LiX4Li44LmJ4LihCivguJfguLjguKHguYLguJkKK+C4l+C4uOC4ogor4LiX4Li44LmJ4LiiCivguJfguLjguKPguJkKK+C4l+C4uOC4o+C4seC4luC4ouC4sgor4LiX4Li44Lij4Lix4LioCivguJfguLjguKPguLLguITguKEKK+C4l+C4uOC4o+C4suC4iOC4suC4owor4LiX4Li44Lij4Liy4LiY4Lin4LiyCivguJfguLjguYDguKPguKgKK+C4l+C4uOC5gOC4o+C4teC4ouC4mQor4LiX4Li44LmA4Lij4Li14Lii4LiZ4LmB4LiC4LiBCivguJfguLjguKXguLHguIHguJfguLjguYDguKUKK+C4l+C4uOC5gOC4peC4sgor4LiX4Li44Lin4Li04LiK4Liy4LiZCivguJfguLjguKfguLTguJgKK+C4l+C4uOC4qOC4teC4pQor4LiX4Li44Liq4Liq4LiwCivguJfguLjguKrguKrguLXguKUKK+C4l+C4uQor4LiX4Li54LmICivguJfguLnguYkKK+C4l+C4ueC5iOC4i+C4teC5iQor4LiX4Li54LiVCivguJfguLnguJXguLLguJnguLjguJfguLnguJUKK+C4l+C4ueC4mQor4LiX4Li54LiaCivguJfguLnguKEKK+C4l+C4ueC5gOC4o+C4meC4tOC4l+C4suC4mQor4LiX4Li54LilCivguJfguLnguYDguKXguLXguKLguKEKK+C4l+C4ueC4qeC4gQor4LmA4LiXCivguYDguJfguYgKK+C5gOC4l+C4hOC4meC4tOC4hAor4LmA4LiX4LiE4LiZ4Li14LmA4LiL4Li14Lii4LihCivguYDguJfguITguYLguJnguYLguKXguKLguLUKK+C5gOC4l+C4hwor4LmA4LiX4LmJ4LiHCivguYDguJfguYnguIfguYDguJXguYnguIcKK+C5gOC4l+C5ieC4h+C4l+C4ueC4lAor4LmA4LiX4LmH4LiICivguYDguJfguJnguJnguLTguKoKK+C5gOC4l+C5gOC4muC4tOC4peC5gOC4l+C4meC4meC4tOC4qgor4LmA4LiX4LibCivguYDguJfguJ4KK+C5gOC4l+C4nuC4l+C4suC4o+C4uQor4LmA4LiX4Lie4LiX4Liy4LmC4LijCivguYDguJfguJ7guLIKK+C5gOC4l+C4nuC4tOC4mQor4LmA4LiX4Lie4Li1CivguYDguJfguJ7guLXguJvguLHguIHguKnguLUKK+C5gOC4l+C5guC4ngor4LmA4LiX4Lih4Lib4Li44Lij4LiwCivguYDguJfguKPguLTguJQKK+C5gOC4l+C4peC4peC4ueC5gOC4o+C4teC4ouC4oQor4LmA4LiX4Lin4LiU4LiyCivguYDguJfguKfguJnguLAKK+C5gOC4l+C4p+C4oOC4suC4p+C4sAor4LmA4LiX4Lin4Lij4LiwCivguYDguJfguKfguKfguLLguIjguLTguIHguLAKK+C5gOC4l+C4p+C4p+C4suC4iOC4tOC4quC4o+C4k+C4hOC4oeC4meC5jAor4LmA4LiX4Lin4LioCivguYDguJfguKfguKkKK+C5gOC4l+C4p+C4quC4uOC4hOC4meC4mOC5jAor4LmA4LiX4Lin4LitCivguYDguJfguKfguLHguI0KK+C5gOC4l+C4p+C4seC4mQor4LmA4LiX4Lin4Li1CivguYDguJfguKgKK+C5gOC4l+C4qOC4gQor4LmA4LiX4Lio4LiZ4LmMCivguYDguJfguKjguJnguLIKK+C5gOC4l+C4qOC4sAor4LmA4LiX4Lir4LmMCivguYDguJfguYjguKvguYwKK+C5gOC4l+C5iOC4rQor4LmA4LiX4LmJ4LitCivguYDguJfguK3guI0KK+C5gOC4l+C4reC4oQor4LmA4LiX4Lit4Lij4LmM4LmA4Lia4Li14Lii4LihCivguYDguJfguK3guKPguYzguYLguKHguKHguLTguYDguJXguK3guKPguYwKK+C5gOC4l+C4reC4sOC4l+C4sAor4LmA4LiX4LiyCivguYDguJfguYjguLIKK+C5gOC4l+C5ieC4sgor4LmA4LiX4LmJ4Liy4LiK4LmJ4Liy4LiHCivguYDguJfguYjguLLguKHguLHguIEKK+C5gOC4l+C5ieC4suC4ouC4suC4ouC4oeC5iOC4reC4oQor4LmA4LiX4LmI4Liy4Lij4Li24LiHCivguYDguJfguYnguLLguKrguLLguJkKK+C5gOC4l+C4suC4sOC4q+C5jAor4LmA4LiX4Li04LiBCivguYDguJfguLTguYjguIcKK+C5gOC4l+C4tOC4h+C4muC4reC4hwor4LmA4LiX4Li04LiUCivguYDguJfguLTguJkKK+C5gOC4l+C4tOC4mgor4LmA4LiX4Li04Lia4LmGCivguYDguJfguLTguYnguKEKK+C5gOC4l+C4teC4ouC4hwor4LmA4LiX4Li14Lii4LiZCivguYDguJfguLXguYnguKLguJkKK+C5gOC4l+C4teC4ouC4mgor4LmA4LiX4Li14Lii4LijCivguYDguJfguLXguYnguKLguKMKK+C5gOC4l+C4teC4ouC4pwor4LmA4LiX4Li14LmI4Lii4LinCivguYDguJfguLfguK0KK+C5gOC4l+C4t+C5iOC4rQor4LmA4LiX4Li34LmJ4LitCivguYDguJfguLfguK3guIEKK+C5gOC4l+C4t+C4reC4geC5gOC4guC4sgor4LmA4LiX4Li34Lit4LiB4LmA4LiW4Liy4LmA4Lir4Lil4LmI4Liy4LiB4LitCivguYDguJfguLfguK3guJkKK+C5geC4l+C5iAor4LmB4LiX4LmJCivguYHguJfguYfguIHguIvguLXguYgKK+C5geC4l+C4hwor4LmB4LiX4LmI4LiHCivguYHguJfguYnguIcKK+C5geC4l+C5h+C4h+C4geC5jOC4meC5ieC4swor4LmB4LiX4LiH4LiX4Lin4LiiCivguYHguJfguIfguKfguLTguKrguLHguKIKK+C5geC4l+C4leC4ouC5jAor4LmB4LiX4LiZCivguYHguJfguYjguJkKK+C5geC4l+C4meC5gOC4iOC4meC4leC5jAor4LmB4LiX4LiZ4LiX4Liy4Lil4Lix4LihCivguYHguJfguJoKK+C5geC4l+C4o+C4gQor4LmB4LiX4Lij4LiB4LmA4LiV4Lit4Lij4LmMCivguYHguJfguKXguYDguKXguLXguKLguKEKK+C5geC4l+C4sAor4LmC4LiXCivguYLguJfguYgKK+C5guC4l+C4geC5gOC4l+C4gQor4LmC4LiX4LiH4LmGCivguYLguJfguIfguYDguJfguIcKK+C5guC4l+C4k+C4sAor4LmC4LiX4LiY4LiBCivguYLguJfguJkKK+C5guC4l+C4meC5guC4l+C5iAor4LmC4LiX4Lih4LiZ4Lix4LiqCivguYLguJfguKPguJMKK+C5guC4l+C4o+C4oQor4LmC4LiX4Lij4Liy4Lin4Li04LiBCivguYLguJfguKXguLIKK+C5guC4l+C4qQor4LmC4LiX4Lip4LiB4Lij4LiT4LmMCivguYLguJfguKnguITguLjguJMKK+C5guC4l+C4qeC4leC4o+C4seC4ogor4LmC4LiX4Lip4LiX4Lix4LiT4LiR4LmMCivguYLguJfguKnguYLguJ7guKIKK+C5guC4l+C4qeC4oeC4q+C4seC4meC4leC5jAor4LmC4LiX4Lip4LiyCivguYLguJfguKrguLAKK+C5guC4l+C5guC4qgor4LmC4LiX4Lir4Lis4LiwCivguYLguJfguKvguKzguLTguJnguLUKK+C5hOC4lwor4LmE4LiX4LmJCivguYTguJfguIHguK0KK+C5hOC4l+C5gOC4l+C5gOC4meC4teC4ouC4oQor4LmE4LiX4Lif4Lit4Lii4LiU4LmMCivguYTguJfguKIKK+C5hOC4l+C4ouC4mOC4o+C4o+C4oQor4LmE4LiX4LijCivguYTguJfguKPguK3guKLguJTguYwKK+C5hOC4l+C4p+C4sAor4LiYCivguJjguIcKK+C4mOC4h+C4geC5jAor4LiY4LiKCivguJjguIrguLUKK+C4mOC4leC4o+C4kAor4LiY4LiZCivguJjguJnguLHguIcKK+C4mOC4meC4suC4hOC4suC4owor4LiY4LiZ4Liy4LiT4Lix4LiV4Li0CivguJjguJnguLLguJXguKEKK+C4mOC4meC4suC4mOC4suC4owor4LiY4LiZ4Liy4LiY4Li04Lia4LiU4Li1CivguJjguJnguLLguJjguLTguJsKK+C4mOC4meC4suC4mOC4tOC4m+C4seC4leC4ouC5jAor4LiY4LiZ4Liy4LiZ4Li44LmA4LiE4Lij4Liy4Liw4Lir4LmMCivguJjguJnguLLguKPguLHguIHguKnguYwKK+C4mOC4meC4tOC4lQor4LiY4LiZ4Li04Lip4LiQ4LiyCivguJjguJnguLgKK+C4mOC4meC4uQor4LiY4LmA4LiZ4LioCivguJjguYDguJnguKjguKfguKMKK+C4mOC5guC4meC4m+C4iOC4seC4ogor4LiY4LmE4LiZ4Lio4Lin4Lij4Lij4Lii4LmMCivguJjguKEKK+C4mOC4oeC4geC4o+C4gQor4LiY4LijCivguJjguKPguIcKK+C4mOC4o+C4kwor4LiY4Lij4LiT4Li04LiZCivguJjguKPguJPguLTguJnguJfguKPguYwKK+C4mOC4o+C4k+C4tOC4qAor4LiY4Lij4LiT4Li04Lio4LijCivguJjguKPguJPguLTguKjguKfguKPguYwKK+C4mOC4o+C4k+C4tQor4LiY4Lij4Lih4Liy4LiZCivguJjguKPguKPguKEKK+C4mOC4o+C4o+C4oeC4sAor4LiY4Lij4LiyCivguJjguKPguLTguKnguJXguKPguLUKK+C4mOC5gOC4o+C4qAor4LiY4LmA4Lij4Lip4LiV4Lij4Li1CivguJjguKfguLHguIoKK+C4mOC4seC4h+C4gQor4LiY4Lix4LiKCivguJjguLHguI0KK+C4mOC4seC4meC4ouC4sgor4LiY4Lix4LiZ4Lii4Liy4Lin4Liy4LiXCivguJjguLHguJnguKfguLLguITguKEKK+C4mOC4seC4oeC4oeC4sAor4LiY4Liy4LiU4LiyCivguJjguLLguJXguKPguLUKK+C4mOC4suC4leC4p+C4suC4geC4owor4LiY4Liy4LiV4Li4CivguJjguLLguJXguLjguKHguKHguLTguKrguKrguLIKK+C4mOC4suC4meC4tOC4mQor4LiY4Liy4LiZ4Li04LiZ4LiX4Lij4LmMCivguJjguLLguJnguLUKK+C4mOC4suC4owor4LiY4Liy4Lij4LiB4Liz4LiZ4Lix4LilCivguJjguLLguKPguITguLPguJnguLHguKUKK+C4mOC4suC4o+C4kwor4LiY4Liy4Lij4LiT4LiwCivguJjguLLguKPguJPguLIKK+C4mOC4suC4o+C4sgor4LiY4Liy4Lip4LiV4Lij4Li1CivguJjguLPguKHguKPguIfguITguYwKK+C4mOC4s+C4o+C4hwor4LiY4Li04LiU4LiyCivguJjguLTguJXguLQKK+C4mOC4teC4o+C4sAor4LiY4Li44LiKCivguJjguLjguJTguIfguITguYwKK+C4mOC4uOC4lQor4LiY4Li44LiV4LiV4LiwCivguJjguLjguKEKK+C4mOC4uOC4oeC4sAor4LiY4Li44Lij4LiwCivguJjguLjguKPguLMKK+C4mOC4uOC4peC4tQor4LiY4Li44Lir4Lij4LmI4LizCivguJjguLnguJsKK+C5gOC4mOC4meC4uAor4LmA4LiY4LitCivguYDguJjguLXguKLguKMKK+C5guC4mOC5iAor4LmC4LiY4Lin4LiZCivguJkKK+C4meC4gQor4LiZ4LiB4LiB4Lij4Liw4LiX4Li44LiHCivguJnguIHguLjguKUKK+C4meC4ggor4LiZ4LiECivguJnguITguKMKK+C4meC4hOC4o+C4geC4seC4k+C4keC5jAor4LiZ4LiE4Lij4Lia4Liy4LilCivguJnguITguKPguKHguLHguJPguJHguJnguLIKK+C4meC4hOC4o+C4o+C4seC4kAor4LiZ4LiE4Lij4Lin4Liy4Liq4Li1CivguJnguITguKPguYLguKrguKDguLTguJPguLUKK+C4meC4hOC4o+C5guC4quC5gOC4oOC4k+C4tQor4LiZ4LiE4Lij4Lir4Lil4Lin4LiHCivguJnguITguKPguLLguJfguKMKK+C4meC4hOC4o+C4tOC4meC4l+C4o+C5jAor4LiZ4LiE4LmA4Lij4LioCivguJnguIcKK+C4meC4h+C4hOC4uOC4kAor4LiZ4LiXCivguJnguJfguLUKK+C4meC4meC4leC4o+C4sgor4LiZ4LiZ4LiX4LmMCivguJnguJnguJfguIEKK+C4meC4meC4l+C4o+C4tQor4LiZ4LiZ4LiX4Lil4Li1CivguJnguJnguJfguLQKK+C4meC4mgor4LiZ4Lib4Li44LiH4Liq4LiB4Lil4Li04LiH4LiE4LmMCivguJnguJvguLjguIfguKrguIHguKXguLbguIfguITguYwKK+C4meC4nuC5gOC4geC4leC4meC5jAor4LiZ4Lie4LmA4LiB4LmJ4LiyCivguJnguJ7guITguLjguJMKK+C4meC4nuC5gOC4hOC4o+C4suC4sOC4q+C5jAor4LiZ4Lie4LiZ4Li04LiVCivguJnguJ7guJvguI7guKUKK+C4meC4nuC4nuC4pQor4LiZ4Lie4Lie4Lin4LiHCivguJnguJ7guJ7guLHguJkKK+C4meC4nuC4o+C4seC4leC4meC5jAor4LiZ4Lie4Lio4LiBCivguJnguJ7guKjguLnguKUKK+C4meC4oOC4geC4suC4meC4leC5jAor4LiZ4Lig4LiE4LiKCivguJnguKDguITguJXguLQKK+C4meC4oOC4iOC4owor4LiZ4Lig4LiI4Lix4LiB4Lip4Li4CivguJnguKDguJTguKUKK+C4meC4oOC4l+C4p+C4teC4mwor4LiZ4Lig4Lib4Lij4Liy4LiTCivguJnguKDguKHguJPguJHguKUKK+C4meC4oOC4oeC4k+C4tQor4LiZ4Lig4Lih4Lix4LiiCivguJnguKDguKPguLnguJsKK+C4meC4oOC5gOC4o+C4k+C4uQor4LiZ4Lig4Lin4Li04LiW4Li1CivguJnguKDguKjguLnguKUKK+C4meC4oOC4quC4tOC4meC4mOC4uOC5jAor4LiZ4Lig4LiyCivguJnguKDguLLguIHguLLguKgKK+C4meC4oOC4suC4peC4seC4ogor4LiZ4LihCivguJnguKHguJnguLLguJkKK+C4meC4oeC4sAor4LiZ4Lih4Lix4LiB4LiB4Liy4LijCivguJnguKHguLHguKrguIHguLLguKMKK+C4meC4oeC4suC4iwor4LiZ4Lii4LiZ4LiwCivguJnguKLguJnguLIKK+C4meC4ouC4sAor4LiZ4Lii4Lix4LiB4Lip4LmMCivguJnguKPguIEKK+C4meC4o+C4geC4suC4owor4LiZ4Lij4Liy4LiY4Li04LibCivguJnguKPguLTguJnguJfguKPguYwKK+C4meC4o+C4tOC4qAor4LiZ4Lij4Li04Lio4Lin4LijCivguJnguKPguLUKK+C4meC5gOC4o+C4meC4l+C4o+C4quC4ueC4owor4LiZ4LmA4Lij4LioCivguJnguYDguKPguKjguKfguKMKK+C4meC5gOC4o+C4qOC4p+C4o+C5jOC4iuC4meC4iuC5ieC4suC4hwor4LiZ4LmA4Lij4Lio4Li54LijCivguJnguKTguYLguIbguKkKK+C4meC4pOC4leC4ouC5jAor4LiZ4Lik4LiZ4Liy4LiXCivguJnguKTguJ7guLLguJkKK+C4meC4pOC4oeC4pQor4LiZ4Lik4Lih4Liy4LiTCivguJnguKTguKHguLTguJUKK+C4meC4peC4suC4jwor4LiZ4Lil4Li04LiZCivguJnguKfguIHguLAKK+C4meC4p+C4lAor4LiZ4Lin4LiZ4Li04Lii4Liy4LiiCivguJnguKfguKEKK+C4meC5iOC4p+C4oQor4LiZ4Lin4LiiCivguJnguKfguKUKK+C4meC4p+C4reC4o+C4q+C4suC4l+C4tOC4hOC4uOC4kwor4LiZ4Lin4Lix4LiH4LiE4Liq4Lix4LiV4LiW4Li44Lio4Liy4Liq4LiZ4LmMCivguJnguKfguLLguKPguLAKK+C4meC4p+C4suC4reC4o+C4q+C4suC4mOC4tOC4hOC4uOC4kwor4LiZ4Lir4Liy4LiU4LiBCivguJnguKvguLLguJkKK+C4meC4q+C4suC4o+C4uAor4LiZ4Lir4Li44LiVCivguJnguKwKK+C4meC4rOC4mwor4LiZ4LitCivguJnguK3guIEKK+C4meC4reC4hwor4LiZ4LmI4Lit4LiHCivguJnguYnguK3guIcKK+C4meC5iOC4reC4h+C5geC4meC5iOC4hwor4LiZ4Lit4LiVCivguJnguK3guJkKK+C4meC4reC4mgor4LiZ4LmJ4Lit4LihCivguJnguYnguK3guKIKK+C4meC5ieC4reC4ouC4q+C4meC5iOC4sgor4LiZ4LmJ4Lit4Lii4LmC4Lir4LiZ4LmI4LiHCivguJnguLAKK+C4meC4sOC5geC4meC5iOC4hwor4LiZ4Lix4LiBCivguJnguLHguIHguIHguLAKK+C4meC4seC4geC4guC4seC4lQor4LiZ4Lix4LiB4LiH4Liy4LiZCivguJnguLHguIHguJXguLAKK+C4meC4seC4geC4owor4LiZ4Lix4LiB4Lip4Lix4LiV4LijCivguJnguLHguIHguKrguKPguLLguIoKK+C4meC4seC4ggor4LiZ4Lix4LiECivguJnguLHguITguITguLAKK+C4meC4seC4hwor4LiZ4Lix4LmI4LiHCivguJnguLHguIfguITguLHguKUKK+C4meC4seC4iAor4LiZ4Lix4LiPCivguJnguLHguI/guIEKK+C4meC4seC4kQor4LiZ4Lix4LiUCivguJnguLHguJTguJTguLIKK+C4meC4seC4leC4luC4uOC5jAor4LiZ4Lix4LmI4LiZCivguJnguLHguYnguJkKK+C4meC4seC4meC4l+C4l+C4suC4ouC4tQor4LiZ4Lix4LiZ4LiX4LiZ4LmMCivguJnguLHguJnguJfguJnguLLguIHguLLguKMKK+C4meC4seC4meC4l+C4tAor4LiZ4Lix4LiaCivguJnguLHguJrguJvguKPguLDguKrguLIKK+C4meC4seC4muC4m+C4o+C4sOC4quC4suC4reC4sOC5hOC4owor4LiZ4Lix4LiiCivguJnguLHguKLguJnguYwKK+C4meC4seC4ouC4meC4sgor4LiZ4Lix4LinCivguJnguLIKK+C4meC5iOC4sgor4LiZ4LmJ4LiyCivguJnguLLguIEKK+C4meC4suC4geC4muC4uOC4lAor4LiZ4Liy4LiB4Liy4Liq4Liy4Lir4Lij4Li1CivguJnguLLguIQKK+C4meC4suC4hOC4owor4LiZ4Liy4LiE4LiyCivguJnguLLguITguLLguKfguYLguKXguIEKK+C4meC4suC4hOC4suC4quC4meC5jAor4LiZ4Liy4LiE4Li04LiZ4LiX4Lij4LmMCivguJnguLLguITguLUKK+C4meC4suC5gOC4hOC4meC4l+C4o+C5jAor4LiZ4Liy4LmA4LiE4LioCivguJnguLLguYDguITguKjguKfguKMKK+C4meC4suC5guC4hOC4o+C4hOC4tOC4meC4l+C4owor4LiZ4Liy4LiHCivguJnguLLguIfguJnguKfguKUKK+C4meC4suC4h+C4meC4ueC4mQor4LiZ4Liy4LiH4LmB4Lii4LmJ4LihCivguJnguLLguIfguKPguKEKK+C4meC4suC4h+C5gOC4peC5h+C4lAor4LiZ4Liy4LiH4LmA4Lil4Li04LmJ4LiHCivguJnguLLguIfguKvguIfguKrguYwKK+C4meC4suC4h+C4reC4suC4ogor4LiZ4Liy4LiH4LmB4Lit4LmI4LiZCivguJnguLLguIvguLIKK+C4meC4suC4i+C4tQor4LiZ4Liy4LiPCivguJnguLLguI/guIEKK+C4meC4suC4j+C4geC4o+C4o+C4oQor4LiZ4Liy4LiP4LiU4LiZ4LiV4Lij4Li1CivguJnguLLguI/guKjguLTguKXguJvguYwKK+C4meC4suC4lAor4LiZ4Liy4LiWCivguJnguLLguJcKK+C4meC4suC4l+C4tQor4LiZ4Liy4LiZCivguJnguYjguLLguJkKK+C4meC4suC4meC4seC4hOC4o+C4qgor4LiZ4Liy4LiZ4Lix4LiV4LinCivguJnguLLguJnguLHguJvguIHguLLguKMKK+C4meC4suC4meC4sgor4LiZ4Liy4LmA4LiZ4LiBCivguJnguLLguJoKK+C4meC4suC4oOC4tAor4LiZ4Liy4Lig4Li1CivguJnguLLguKEKK+C4meC4suC4oeC4muC4seC4leC4owor4LiZ4Liy4Lih4Lib4Liy4LiB4LiB4LiyCivguJnguLLguKHguYHguJ3guIcKK+C4meC4suC4oeC4quC4geC4uOC4pQor4LiZ4Liy4LiiCivguJnguYjguLLguKIKK+C4meC4suC4ouC4gQor4LiZ4Liy4Lii4Li04LiB4LiyCivguJnguLLguKPguJcKK+C4meC4suC4o+C4sgor4LiZ4Liy4Lij4Liy4Lii4LiT4LmMCivguJnguLLguKPguLUKK+C4meC4suC5gOC4o+C4qAor4LiZ4Liy4Lil4Li04Lin4Lix4LiZCivguJnguLLguKXguLUKK+C4meC4suC4pwor4LiZ4LmJ4Liy4LinCivguJnguLLguKfguLIKK+C4meC4suC4p+C4tOC4gQor4LiZ4Liy4Lin4Li04LiZCivguJnguLLguKfguLUKK+C4meC4suC5gOC4p+C4qAor4LiZ4Liy4LioCivguJnguLLguKrguJnguLAKK+C4meC4suC4quC4sgor4LiZ4Liy4Liq4Li04LiBCivguJnguLLguKzguLTguIHguLIKK+C4meC4suC4rOC4tOC5gOC4gQor4LiZ4Liy4Lis4Li1CivguJnguLMKK+C4meC5ieC4swor4LiZ4LmJ4Liz4LiV4Liw4LiB4Li5CivguJnguYnguLPguJXguLDguYLguIEKK+C4meC4tAor4LiZ4Li04LiB4LiC4LiwCivguJnguLTguIHguILguLHguJnguJXguYwKK+C4meC4tOC4geC5gOC4guC4mwor4LiZ4Li04LiB4LijCivguJnguLTguIHguKPguK3guKLguJTguYwKK+C4meC4tOC4geC4suC4ogor4LiZ4Li04LmA4LiB4Li04LilCivguJnguLTguITguKEKK+C4meC4tOC4hOC4o+C4meC4luC5jAor4LiZ4Li04LiE4Lir4LiwCivguJnguLTguITguKvguLTguJUKK+C4meC4tOC4hOC4suC4peC4seC4ogor4LiZ4Li04LmA4LiE4Lij4Liy4Liw4Lir4LmMCivguJnguLTguYLguITguJXguLTguJkKK+C4meC4tOC5guC4hOC4o+C4mAor4LiZ4Li04LmC4LiE4Lij4LihCivguJnguLTguIcKK+C4meC4tOC5iOC4hwor4LiZ4Li04LiICivguJnguLTguJQKK+C4meC4tOC4leC4ouC5jAor4LiZ4Li04LiV4Li0CivguJnguLTguJfguKMKK+C4meC4tOC4l+C4o+C4o+C4qOC4geC4suC4owor4LiZ4Li04LiX4Lij4LiyCivguJnguLTguJfguLHguKjguJnguYwKK+C4meC4tOC4l+C4suC4hgor4LiZ4Li04LiX4Liy4LiZCivguJnguLTguYDguJfguKgKK+C4meC4tOC5gOC4l+C4qOC4geC5jAor4LiZ4Li04LiY4Liy4LiZCivguJnguLTguJjguLQKK+C4meC4tOC4meC4l+C4sgor4LiZ4Li04LiZ4LiZ4LiwCivguJnguLTguJnguJnguLLguJcKK+C4meC4tOC4meC4q+C4uOC4lQor4LiZ4Li04LiZ4Liy4LiXCivguJnguLTguJrguLLguJUKK+C4meC4tOC4m+C4o+C4tOC4ouC4suC4ogor4LiZ4Li04Lib4Lix4LiI4LiB4Liy4LijCivguJnguLTguJ7guIjguJnguYwKK+C4meC4tOC4nuC4meC4mOC5jAor4LiZ4Li04Lie4Lie4Liy4LiZCivguJnguLTguJ7guJ7guLTguJfguLIKK+C4meC4tOC4nuC4seC4l+C4mOC5jAor4LiZ4Li04Lie4Lix4LiZ4LiY4LmMCivguJnguLTguJ7guLTguJcKK+C4meC4tOC5gOC4nuC4lwor4LiZ4Li04Lig4LiyCivguJnguLTguYjguKEKK+C4meC4tOC5ieC4oQor4LiZ4Li04Lih4LiZ4LiV4LmMCivguJnguLTguKHguKHguLLguJkKK+C4meC4tOC4oeC4oeC4suC4meC4o+C4lOC4tQor4LiZ4Li04Lih4Li04LiVCivguJnguLTguKLguJUKK+C4meC4tOC4ouC4oQor4LiZ4Li04Lii4Lii4Liy4LiZCivguJnguLTguKLguKLguLLguJnguLTguIEKK+C4meC4tOC4ouC4seC4leC4tOC4meC4tOC4ouC4oQor4LiZ4Li04Lii4Liy4LihCivguJnguLTguKLguLLguKIKK+C4meC4tOC4ouC4uOC4lQor4LiZ4Li04Lij4Lie4Lix4LiV4LijCivguJnguLTguKPguKHguLLguJMKK+C4meC4tOC4o+C4oeC4tOC4lQor4LiZ4Li04Lij4Lix4Lie4Lie4Li44LiXCivguJnguLTguKPguLLguKgKK+C4meC4tOC4o+C4uOC4geC4leC4tAor4LiZ4Li04Lij4Li44LiV4LiV4Li0CivguJnguLTguKPguLjguJfguJjguYwKK+C4meC4tOC5guC4o+C4mAor4LiZ4Li04LilCivguJnguLTguYjguKcKK+C4meC4tOC5ieC4pwor4LiZ4Li04Lin4LiE4Lil4Li14Lit4Li04LiBCivguJnguLTguKfguYDguITguKXguLXguKLguKPguYwKK+C4meC4tOC4p+C5gOC4hOC4peC4teC4ouC4qgor4LiZ4Li04Lin4LiV4Lij4Lit4LiZCivguJnguLTguKfguKPguJPguYwKK+C4meC4tOC4p+C4seC4leC4meC5jAor4LiZ4Li04Lin4Lix4LiV4Li0CivguJnguLTguKfguLLguJUKK+C4meC4tOC4p+C4suC4qgor4LiZ4Li04Lin4Liy4Liq4LiZ4LmMCivguJnguLTguYDguKfguKgKK+C4meC4tOC5gOC4p+C4qOC4meC5jAor4LiZ4Li04Lio4LiyCivguJnguLTguKnguIHguKPguKEKK+C4meC4tOC4qeC4suC4lwor4LiZ4Li04Liq4Liq4Lix4LiE4LiE4Li04Lii4Lin4Lix4LiV4LiW4Li4CivguJnguLTguKrguKrguLHguITguITguLXguKLguYwKK+C4meC4tOC4quC4seC4igor4LiZ4Li04Liq4Lix4LiiCivguJnguLTguKrguLLguJcKK+C4meC4tOC4quC4tOC4lQor4LiZ4Li04Liq4Li14LiX4LiZ4LiwCivguJnguLTguYDguKrguJgKK+C4meC4tOC4q+C4teC4meC4sAor4LiZ4Li14LmICivguJnguLXguYkKK+C4meC4teC4leC4tAor4LiZ4Li14LmI4LiZ4Lix4LiZCivguJnguLXguKPguJnguLLguJcKK+C4meC4teC4reC4reC4mQor4LiZ4Li14LmC4Lit4LiU4Li14LmA4Lih4Li14Lii4LihCivguJnguLbguIEKK+C4meC4tuC4hwor4LiZ4Li24LmI4LiHCivguJnguLgKK+C4meC4uOC4hwor4LiZ4Li44LmI4LiHCivguJnguLjguIoKK+C4meC4uOC4lAor4LiZ4Li44LiVCivguJnguLjguYjguJkKK+C4meC4uOC5ieC4ogor4LiZ4Li54LiZCivguJnguLnguYjguJkKK+C4meC4ueC5ieC4mQor4LmA4LiZ4LiB4LiC4LiwCivguYDguJnguIHguILguLHguKEKK+C5gOC4meC4hOC5hOC4lwor4LmA4LiZ4LiVCivguYDguJnguJXguJrguK3guKUKK+C5gOC4meC4leC4owor4LmA4LiZ4LiV4Li0CivguYDguJnguYnguJkKK+C5gOC4meC4muC4tOC4p+C4peC4sgor4LmA4LiZ4Lib4LiI4Li54LiZCivguYDguJnguJvguJfguLnguYDguJnguLXguKLguKEKK+C5gOC4meC4oeC4tAor4LmA4LiZ4Lih4Li04LiV4LiB4LiwCivguYDguJnguKHguLTguJnguJjguKMKK+C5gOC4meC4ogor4LmA4LiZ4Lii4Lii4LiwCivguYDguJnguKPguIHguLHguJPguJDguLUKK+C5gOC4meC4o+C4hOC4uOC4kwor4LmA4LiZ4Lij4LmA4LiX4LioCivguYDguJnguKPguJnguLLguJYKK+C5gOC4meC4o+C4oeC4tOC4lQor4LmA4LiZ4Lij4Liw4Lie4Li54Liq4Li1CivguYDguJnguKnguLLguJcKK+C5gOC4meC4rQor4LmA4LiZ4LmJ4LitCivguYDguJnguLIKK+C5gOC4meC5iOC4sgor4LmA4LiZ4Liy4Lin4LiZ4Li04LiVCivguYDguJnguLTguJkKK+C5gOC4meC4tOC5iOC4mQor4LmA4LiZ4Li04LiaCivguYDguJnguLXguKLguIcKK+C5gOC4meC4teC4ouC4mQor4LmA4LiZ4Li14Lii4LihCivguYDguJnguLXguKLguKMKK+C5gOC4meC4teC4ouC4o+C4l+C4uOC4geC4guC5jAor4LmA4LiZ4Li14Lii4Lij4LmA4LiX4LioCivguYDguJnguLXguKLguKPguJnguLLguJcKK+C5gOC4meC4t+C5ieC4rQor4LmA4LiZ4Li34Lit4LiHCivguYDguJnguLfguYjguK3guIcKK+C5gOC4meC4t+C4reC4ogor4LmA4LiZ4Li34LmJ4Lit4LmA4Lii4Li34LmJ4LitCivguYHguJnguYgKK+C5geC4meC5iOC4hwor4LmB4LiZ4LmI4LiZCivguYHguJnguJoKK+C5geC4meC4oQor4LmB4LiZ4LinCivguYHguJnguYjguKcKK+C5geC4meC4sAor4LmB4LiZ4Liw4LmB4Lir4LiZCivguYLguJkKK+C5guC4meC5ieC4lQor4LmC4LiZ4LiZCivguYLguJnguYjguJkKK+C5guC4meC5ieC4mQor4LmC4LiZ4LmA4LiZCivguYLguJnguYDguJrguYDguKXguLXguKLguKEKK+C5guC4meC5ieC4oQor4LmC4LiZ4Lih4Lie4Lij4Lij4LiTCivguYLguJnguKPguLIKK+C5guC4meC4o+C4tQor4LmD4LiZCivguYTguJkKK+C5hOC4meC4leC5jOC4hOC4peC4seC4mgor4LmE4LiZ4LmC4LiV4Lij4LmA4LiI4LiZCivguYTguJnguJfguYzguITguKXguLHguJoKK+C5hOC4meC4peC4reC4mQor4LmE4LiZ4Lit4Liy4LiL4Li14LiZCivguYTguJnguYLguK3guYDguJrguLXguKLguKEKK+C4mgor4Lia4LmICivguJrguIEKK+C4muC4hwor4Lia4LmI4LiHCivguJrguIfguIHguYwKK+C4muC5iuC4h+C5gOC4muC5iuC4hwor4Lia4LiH4Liq4Li44LmMCivguJrguIfguK3guLHguJrguJrguIfguKPguLIKK+C4muC5iOC4h+C4reC4seC4muC4muC5iOC4h+C4o+C4sgor4Lia4LiPCivguJrguJQKK+C4muC4lOC4tOC4meC4l+C4o+C5jAor4Lia4LiU4Li1CivguJrguJYKK+C4muC4lwor4Lia4LiX4LiZ4Li1CivguJrguJfguJrguIfguIHguIoKK+C4muC4l+C4muC4h+C4quC4uOC5jAor4Lia4LiX4Lia4Li54Lij4LiT4LmMCivguJrguJfguJ7guLHguJnguJjguYwKK+C4muC4l+C4oOC4suC4iuC4meC5jAor4Lia4LiX4Lig4Liy4LiK4LiZ4Li14Lii4LmMCivguJrguJfguKHguLLguKXguKLguYwKK+C4muC4l+C4o+C4seC4igor4Lia4LiX4Lin4LmA4Lij4LioCivguJrguJfguKfguKXguLHguI3guIrguYwKK+C4muC4l+C4p+C4suC4owor4Lia4LiX4Lio4Lij4Li1CivguJrguJfguKjguLHguJ7guJfguYwKK+C4muC4l+C4quC4luC4suC4mQor4Lia4LiX4Liy4Lih4Lie4Li44LiKCivguJrguYLguJfguJkKK+C4muC4mQor4Lia4LmI4LiZCivguJrguJ7guLTguJXguKMKK+C4muC4nuC4tOC4mAor4Lia4LmI4LihCivguJrguKPguKEKK+C4muC4o+C4oeC4seC4leC4luC5jAor4Lia4Lij4Lij4LiB4Lin4LiUCivguJrguKPguKPguIjguIcKK+C4muC4o+C4o+C4iOC4luC4o+C4k+C5jAor4Lia4Lij4Lij4LiI4LiaCivguJrguKPguKPguIjguKfguJoKK+C4muC4o+C4o+C4iOC4uAor4Lia4Lij4Lij4LmA4LiI4Li04LiUCivguJrguKPguKPguJMKK+C4muC4o+C4o+C4k+C4suC4geC4suC4owor4Lia4Lij4Lij4LiT4Liy4LiE4LihCivguJrguKPguKPguJPguLLguJjguLTguIHguLLguKMKK+C4muC4o+C4o+C4k+C4suC4meC4uOC4geC4o+C4oQor4Lia4Lij4Lij4LiT4Liy4Lij4Lix4LiB4Lip4LmMCivguJrguKPguKPguJPguLLguKPguLHguIHguKnguKjguLLguKrguJXguKPguYwKK+C4muC4o+C4o+C4lOC4sgor4Lia4Lij4Lij4LiU4Liy4LiBCivguJrguKPguKPguJTguLLguKjguLHguIHguJTguLTguYwKK+C4muC4o+C4o+C4leC4suC4meC4tuC4gQor4Lia4Lij4Lij4LiW4LijCivguJrguKPguKPguJfguKEKK+C4muC4o+C4o+C4l+C4seC4lAor4Lia4Lij4Lij4LiX4Lix4LiaCivguJrguKPguKPguJfguLLguJkKK+C4muC4o+C4o+C4l+C4uOC4gQor4Lia4Lij4Lij4LmA4LiX4LiyCivguJrguKPguKPguYDguJfguLfguK3guIcKK+C4muC4o+C4o+C4ngor4Lia4Lij4Lij4Lie4LmMCivguJrguKPguKPguJ7guIrguLIKK+C4muC4o+C4o+C4nuC4iuC4tOC4lQor4Lia4Lij4Lij4Lie4LiVCivguJrguKPguKPguKLguIcKK+C4muC4o+C4o+C4ouC4h+C4hOC5jAor4Lia4Lij4Lij4Lii4LmA4Lin4LiB4Lip4LiB4LmMCivguJrguKPguKPguKLguLLguIHguLLguKgKK+C4muC4o+C4o+C4ouC4suC4ogor4Lia4Lij4Lij4Lil4Lix4LiiCivguJrguKPguKPguKXguLLguKIKK+C4muC4o+C4o+C4peC4uAor4Lia4Lij4Lij4LmA4Lil4LiHCivguJrguKPguKPguYLguKXguKEKK+C4muC4o+C4o+C4qeC4seC4lwor4Lia4Lij4Lij4Liq4LiaCivguJrguKPguKPguKrguJ4KK+C4muC4o+C4o+C4quC4oQor4Lia4Lij4Lij4Liq4Liy4LiZCivguJrguKPguKPguKrguLLguKMKK+C4muC4o+C4o+C4q+C4suC4mQor4Lia4Lij4Lij4Lir4Liy4LijCivguJrguKPguLHguJQKK+C4muC4o+C4seC5iOC4meC4lOC4tQor4Lia4Lij4Lix4Lio4Lin4LmMCivguJrguKPguLLguIHguKPguKEKK+C4muC4o+C4suC4l+C4uOC4geC4o+C4sgor4Lia4Lij4Liy4Lil4Li1CivguJrguKPguLTguIHguKPguKEKK+C4muC4o+C4tOC4geC4o+C4o+C4oQor4Lia4Lij4Li04LiB4Lix4LibCivguJrguKPguLTguIHguLLguKMKK+C4muC4o+C4tOC4guC4sgor4Lia4Lij4Li04LiC4Liy4LijCivguJrguKPguLTguITguJPguKvguYwKK+C4muC4o+C4tOC4iOC4suC4hAor4Lia4Lij4Li04LiI4Liy4Lij4LiBCivguJrguKPguLTguIjguLLguKPguLTguIHguLIKK+C4muC4o+C4tOC5gOC4ieC4lwor4Lia4Lij4Li04LiK4LiZCivguJrguKPguLTguJPguLLguKLguIEKK+C4muC4o+C4tOC4lOC4iOC5jAor4Lia4Lij4Li04Lia4LiXCivguJrguKPguLTguJrguKfguKPguJPguYwKK+C4muC4o+C4tOC4muC4suC4pQor4Lia4Lij4Li04Lia4Li54Lij4LiT4LmMCivguJrguKPguLTguJ7guJnguJjguYwKK+C4muC4o+C4tOC4nuC4seC4leC4owor4Lia4Lij4Li04Lie4Lix4LiZ4LiY4LmMCivguJrguKPguLTguJ7guLLguIrguIEKK+C4muC4o+C4tOC4nuC4suC4iuC4tOC4geC4sgor4Lia4Lij4Li04Lie4Liy4LiK4Li1CivguJrguKPguLTguJ7guLLguKMKK+C4muC4o+C4tOC4oOC4seC4k+C4keC5jAor4Lia4Lij4Li04Lig4Liy4LipCivguJrguKPguLTguYLguKDguIQKK+C4muC4o+C4tOC4oeC4suC4qgor4Lia4Lij4Li04Lii4Liy4LiiCivguJrguKPguLTguKPguKEKK+C4muC4o+C4tOC4o+C4seC4geC4qeC5jAor4Lia4Lij4Li04Lij4Liy4LiKCivguJrguKPguLTguKfguKPguKPguJUKK+C4muC4o+C4tOC4p+C4suC4owor4Lia4Lij4Li04Lin4Liy4LiqCivguJrguKPguLTguYDguKfguJMKK+C4muC4o+C4tOC4qeC4geC4suC4owor4Lia4Lij4Li04Lip4Lix4LiXCivguJrguKPguLTguKrguIrguJkKK+C4muC4o+C4tOC4quC4uOC4l+C4mOC4tOC5jAor4Lia4Lij4Li04Lir4Liy4LijCivguJrguKPguLTguKvguLLguKoKK+C4muC4o+C4t+C5i+C4rQor4Lia4Lik4LiH4LiE4LieCivguJrguKXguYfguK3guIEKK+C4muC4p+C4gQor4Lia4Lin4LiHCivguJrguYjguKfguIcKK+C4muC4p+C4igor4Lia4Lin4LiZCivguJrguYnguKfguJkKK+C4muC4p+C4mgor4Lia4Lin4LihCivguJrguYrguKfguKIKK+C4muC4p+C4owor4Lia4Lin4Lij4LmC4LiV4LiO4LiBCivguJrguKvguKXguLTguYjguKEKK+C4muC4rQor4Lia4LmI4LitCivguJrguYnguK0KK+C4muC4reC4gQor4Lia4Lit4LiHCivguJrguYjguK3guIcKK+C4muC5ieC4reC4hwor4Lia4LmK4Lit4LiHCivguJrguYrguK3guIfguYYKK+C4muC5ieC4reC4h+C4leC4sOC4peC4sgor4Lia4LmJ4Lit4LiH4LmB4Lia4LmK4LinCivguJrguK3guIfguKvguKXguLIKK+C4muC4reC4lAor4Lia4Lit4LiZCivguJrguYjguK3guJkKK+C4muC4reC4meC4peC4suC4ouC4geC4o+C4sOC4q+C4meC4gQor4Lia4Lit4LiaCivguJrguYnguK3guKEKK+C4muC5i+C4reC4oQor4Lia4Lit4Lih4Lia4LmMCivguJrguYjguK3guKIKK+C4muC5i+C4reC4ogor4Lia4LmI4Lit4Lii4LmGCivguJrguK3guKPguLDguYDguJ7guYfguJQKK+C4muC4reC4o+C4sOC4oeC4suC4mQor4Lia4Lit4LilCivguJrguK3guKXguKXguLnguJkKK+C4muC5ieC4reC4q+C4uOC5ieC4mQor4Lia4LmK4LiwCivguJrguLDguInguYjguK0KK+C4muC4sOC4q+C4oeC4teC5iAor4Lia4Lix4LiBCivguJrguLHguITguYDguJXguKPguLUKK+C4muC4seC4hwor4Lia4Lix4LmJ4LiHCivguJrguLHguIfguIHguLDguYLguKUKK+C4muC4seC4h+C4geC4seC4lAor4Lia4Lix4LiH4LmA4LiB4Li04LiUCivguJrguLHguIfguYLguIHguKPguKLguJXguLHguKfguJzguLnguYkKK+C4muC4seC4h+C5guC4geC4o+C4ouC4leC4seC4p+C5gOC4oeC4teC4ogor4Lia4Lix4LiH4LmC4LiB4Lil4LiZCivguJrguLHguIfguITguJkKK+C4muC4seC4h+C4hOC4oQor4Lia4Lix4LiH4LiE4LilCivguJrguLHguIfguITguKfguKMKK+C4muC4seC4h+C4hOC4seC4mgor4Lia4Lix4LiH4LiE4Lix4LilCivguJrguLHguIfguYLguITguKXguJkKK+C4muC4seC4h+C5geC4l+C4o+C4gQor4Lia4Lix4LiH4Lin4Liy4LiiCivguJrguLHguIfguYDguKfguLXguKLguJkKK+C4muC4seC4h+C4quC4uOC4geC4uOC4pQor4Lia4Lix4LiH4Liq4Li44LiB4Li54Lil4Li04LiBCivguJrguLHguIfguKrguLnguKPguKLguYwKK+C4muC4seC4h+C4q+C4p+C4mQor4Lia4Lix4LiH4Lir4Lin4LiZ4LiE4Lin4Lix4LiZCivguJrguLHguIfguYDguKvguJXguLgKK+C4muC4seC4h+C5gOC4q+C4tOC4mQor4Lia4Lix4LiH4LmA4Lir4Li14Lii4LiZCivguJrguLHguIfguK3guKMKK+C4muC4seC4h+C4reC4p+C4iAor4Lia4Lix4LiH4Lit4Liy4LiICivguJrguLHguIfguK3guLTguIcKK+C4muC4seC4h+C4reC4ueC4owor4Lia4Lix4LiH4LmA4Lit4Li04LiNCivguJrguLHguI3guIjguIEKK+C4muC4seC4jeC4iOC4o+C4h+C4hOC5jAor4Lia4Lix4LiN4LiK4LijCivguJrguLHguI3guIrguLIKK+C4muC4seC4jeC4iuC4tQor4Lia4Lix4LiN4LiN4Lix4LiV4Li0CivguJrguLHguI3guKvguLIKK+C4muC4seC4jwor4Lia4Lix4LiQ4Lii4Liy4Lie4Lik4LiVCivguJrguLHguJPguJHguKMKK+C4muC4seC4k+C4keC4tOC4lQor4Lia4Lix4LiT4LiR4Li04LiV4Lii4LmMCivguJrguLHguJPguJHguLgKK+C4muC4seC4k+C4keC4ueC4owor4Lia4Lix4LiT4LmA4LiR4Liy4Liw4LiB4LmMCivguJrguLHguJPguJPguLLguKoKK+C4muC4seC4k+C4o+C4qgor4Lia4Lix4LiT4Lij4Liq4Li1CivguJrguLHguJQKK+C4muC4seC4lOC4geC4o+C4tQor4Lia4Lix4LiU4LiL4LiaCivguJrguLHguJTguJrguIcKK+C4muC4seC4lOC4quC4tQor4Lia4Lix4LiV4LijCivguJrguLHguJfguKHguYwKK+C4muC4seC4mQor4Lia4Lix4LmI4LiZCivguJrguLHguYnguJkKK+C4muC4seC4meC4geC4p+C4lAor4Lia4Lix4LiZ4LiI4Lin4LiaCivguJrguLHguJnguIjguK3guKIKK+C4muC4seC4meC4lOC4pQor4Lia4Lix4LiZ4LiU4Liy4LilCivguJrguLHguJnguYDguJTguLTguJkKK+C4muC4seC4meC5guC4lOC4ogor4Lia4Lix4LiZ4LmE4LiUCivguJrguLHguJnguJfguLLguKIKK+C4muC4seC4meC4l+C4tuC4gQor4Lia4Lix4LiZ4LiX4Li24LiHCivguJrguLHguJnguYDguJfguLTguIcKK+C4muC4seC4meC4ouC4sOC4muC4seC4meC4ouC4seC4hwor4Lia4Lix4LiZ4Lil4Li34LitCivguJrguLHguJnguYDguKvguLTguJkKK+C4muC4seC4m+C4nOC4suC4quC4sAor4Lia4Lix4LieCivguJrguLHguJ7guIrguLIKK+C4muC4seC4nuC4iuC4tOC4lQor4Lia4Lix4Lie4Lie4Liy4LiKCivguJrguLHguJ7guJ7guLLguIrguJnguYwKK+C4muC4seC4nuC4nuC4suC4iuC4meC4teC4ouC4geC4o+C4o+C4oQor4Lia4Lix4LilCivguJrguLHguKXguKXguJ4KK+C4muC4seC4peC4peC4seC4h+C4geC5jAor4Lia4Lix4Lil4Lil4Li54LiZCivguJrguLHguKXguYDguKXguYjguJXguYwKK+C4muC4seC4peC4p+C4sAor4Lia4Lix4LinCivguJrguLHguKfguYDguJTguLfguYjguK0KK+C4muC4seC4p+C4leC4ueC4oQor4Lia4Lix4Lin4Lia4LiBCivguJrguLHguKfguKrguKfguKPguKPguITguYwKK+C4muC4sgor4Lia4LmI4LiyCivguJrguYnguLIKK+C4muC5ieC4suC5hgor4Lia4Liy4LiBCivguJrguLLguIcKK+C4muC5iOC4suC4hwor4Lia4LmJ4Liy4LiHCivguJrguLLguIfguIHguK3guIEKK+C4muC4suC4h+C4quC4uAor4Lia4Liy4LiI4LiBCivguJrguLLguIjguKPguLXguKLguYwKK+C4muC4suC4iOC4tOC4geC4sgor4Lia4Liy4LiL4Liy4Lij4LmMCivguJrguLLguIvguLTguKXguKXguLHguKoKK+C4muC4suC4lAor4Lia4Liy4LiU4LiX4Liw4LiI4Li04LiVCivguJrguLLguJTguJfguLDguJ7guLTguKkKK+C4muC4suC4lOC4l+C4sOC4ouC4seC4gQor4Lia4Liy4LiU4Lir4Lih4Liy4LiiCivguJrguLLguJTguYTguKvguKEKK+C4muC4suC4lOC4suC4pQor4Lia4Liy4LmB4LiU4LiHCivguJrguLLguJUKK+C4muC4suC4leC4owor4Lia4Liy4LiXCivguJrguLLguJfguJoKK+C4muC4suC4l+C4muC4h+C4geC4igor4Lia4Liy4LiX4Lia4Lij4Li04LiI4Liy4Lij4Li04LiB4LiyCivguJrguLLguJfguKfguLTguJbguLUKK+C4muC4suC4l+C4quC4geC4uOC4k+C4tQor4Lia4Liy4LiX4Lir4Lil4Lin4LiHCivguJrguLLguJfguLLguJjguLbguIEKK+C4muC4suC4l+C4uOC4geC4sgor4Lia4Liy4LiZCivguJrguYnguLLguJkKK+C4muC4suC4meC4oeC4h+C4hOC4pQor4Lia4Liy4LiZ4Li14Lii4LiwCivguJrguYnguLLguJrguYjguJkKK+C4muC5ieC4suC4muC5i+C4sgor4Lia4Liy4Lia4Li1CivguJrguLLguJrguLkKK+C4muC4suC4muC4ueC4mQor4Lia4Liy4LibCivguJrguLLguJvguYDguITguKPguLLguLDguKvguYwKK+C4muC4suC4m+C4l+C4pOC4qeC4juC4tQor4Lia4Liy4Lib4Lih4Li04LiV4LijCivguJrguLLguJvguKfguLLguJcKK+C4muC4suC4nuC4gQor4Lia4LmI4Liy4Lie4LiBCivguJrguLLguKIKK+C4muC5iOC4suC4ogor4Lia4LmJ4Liy4LiiCivguJrguLLguKLguKrguLjguKvguKPguLUKK+C4muC4suC5gOC4ouC4teC4ogor4Lia4Liy4LmC4LiiCivguJrguLLguKPguYwKK+C4muC4suC4o+C4meC4tQor4Lia4Liy4Lij4LmM4Lia4Li04LiE4Li04LinCivguJrguLLguKPguYzguYDguJrguKUKK+C4muC4suC4o+C4oeC4tQor4Lia4Liy4Lij4LmM4LmA4Lij4LilCivguJrguLLguKPguYzguYDguKXguKLguYwKK+C4muC4suC4o+C4reC4oeC4tOC5gOC4leC4reC4o+C5jAor4Lia4LmJ4Liy4Lij4Liw4Lia4Li44LmI4LiZCivguJrguYnguLLguKPguYjguLLguJfguYjguLIKK+C4muC4suC5gOC4o+C4teC4ouC4mQor4Lia4Liy4LmA4Lij4Li14Lii4LihCivguJrguLLguKUKK+C4muC4suC4peC4tQor4Lia4LmI4Liy4LinCivguJrguYjguLLguKfguILguLjguJkKK+C4muC4suC4qAor4Lia4Liy4Lio4LiB4LmMCivguJrguLLguKrguYDguIHguJXguJrguK3guKUKK+C4muC5ieC4suC4q+C4oeC4uQor4Lia4Liy4Lir4Lil4Li1CivguJrguYnguLLguKvguKfguYjguLIKK+C4muC5iOC4suC4reC5ieC4suC4ogor4Lia4LmL4LizCivguJrguLPguYDguJfguLTguIcKK+C4muC4s+C4meC4suC4jQor4Lia4Liz4Lia4Lin4LiHCivguJrguLPguJrguLHguJQKK+C4muC4s+C5guC4mgor4Lia4Liz4LmC4Lia4LiiCivguJrguLPguYLguJrguKUKK+C4muC4s+C5gOC4nuC5h+C4jQor4Lia4Liz4Lij4Liy4LiaCivguJrguLPguKPguLLguKgKK+C4muC4s+C4o+C4uOC4hwor4Lia4Liz4Lij4Li5CivguJrguLPguYDguKPguK0KK+C4muC4s+C4q+C4ouC4seC4lAor4Lia4Liz4LmA4Lir4LiZ4LmH4LiICivguJrguLQKK+C4muC4tOC4geC4uQor4Lia4Li04LiQCivguJrguLTguJQKK+C4muC4tOC4lOC4owor4Lia4Li04LiU4Lir4Lil4LmI4LiyCivguJrguLTguJTguLIKK+C4muC4tOC4leC4uAor4Lia4Li04LiV4Li44LiI4LiJ4LiyCivguJrguLTguJXguLjguKPguIfguITguYwKK+C4muC4tOC4leC4uOC5gOC4o+C4qAor4Lia4Li04LiV4Li44LilCivguJrguLTguJXguLjguKXguLIKK+C4muC4tOC4leC4uOC4peC4suC4meC4tQor4Lia4Li04LiZCivguJrguLTguYjguJkKK+C4muC4tOC4meC4ouC4sgor4Lia4Li04Lil4LmA4Lil4Li14Lii4LiUCivguJrguLTguKfguYDguKPguJXguJXguYwKK+C4muC4tOC4qOC4suC4iAor4Lia4Li04Liq4Lih4Lix4LiXCivguJrguLXguYkKK+C4muC4teC4geC4uQor4Lia4Li14LiR4LiyCivguJrguLXguJXguLIKK+C4muC4teC4mgor4Lia4Li14LmA4Lii4LioCivguJrguLbguIEKK+C4muC4tuC4geC4muC4tuC4mQor4Lia4Li24LiHCivguJrguLbguYjguIcKK+C4muC4tuC5ieC4hwor4Lia4Li4CivguJrguLjguIEKK+C4muC4uOC4hOC4hOC4pQor4Lia4Li44LiE4Lil4Liy4LiB4LijCivguJrguLjguITguKXguLLguJjguLTguKnguJDguLLguJkKK+C4muC4uOC4hOC4peC4tOC4gQor4Lia4Li44LiHCivguJrguLjguYjguIcKK+C4muC4uOC5ieC4hwor4Lia4Li44LiNCivguJrguLjguI3guYDguILguJUKK+C4muC4uOC4jeC4jeC4suC4meC4uOC4oOC4suC4ngor4Lia4Li44LiN4LiN4Liy4Lig4Li04LiZ4Li04Lir4Liy4LijCivguJrguLjguI3guI3guLLguKDguLTguKrguLHguIfguILguLLguKMKK+C4muC4uOC4jeC4meC4tOC4mOC4tAor4Lia4Li44LiN4Lij4Liy4Lio4Li1CivguJrguLjguI3guKTguJfguJjguLTguYwKK+C4muC4uOC4k+C4keC4o+C4tOC4gQor4Lia4Li44LiT4Lih4Li1CivguJrguLjguJPguKLguYwKK+C4muC4uOC4leC4owor4Lia4Li44LiV4Lij4LiY4Lij4Lij4LihCivguJrguLjguJXguKPguLIKK+C4muC4uOC4leC4o+C4tQor4Lia4Li44LiV4Lij4Li14LiV4Lij4Liw4Liq4Li44LihCivguJrguLjguJbguLjguIrguJkKK+C4muC4uOC4l+C4hOC4pQor4Lia4Li44LmL4LiZCivguJrguLjguJnguJnguLDguJrguLjguJnguJnguLHguIcKK+C4muC4uOC4meC4meC4suC4hAor4Lia4Li44LiaCivguJrguLjguJ7guYDguJ7guJnguLTguKfguLLguKrguLLguJnguLjguKrguJXguLTguI3guLLguJMKK+C4muC4uOC4nuC5gOC4nuC4quC4seC4meC4meC4tOC4p+C4suC4qgor4Lia4Li44Lie4LmC4LieCivguJrguLjguJ/guYDguJ/guYjguJXguYwKK+C4muC4uOC5i+C4oQor4Lia4Li44LmI4Lih4Lia4LmI4Liy4LihCivguJrguLjguYnguKIKK+C4muC4uOC5ieC4ouC4m+C4suC4gQor4Lia4Li44Lij4LiT4LiwCivguJrguLjguKPguJ7guIHguLjguKjguKUKK+C4muC4uOC4o+C4nuC4l+C4tOC4qAor4Lia4Li44Lij4Lie4LiZ4Li04Lih4Li04LiVCivguJrguLjguKPguJ7guJrguJcKK+C4muC4uOC4o+C4nuC4oOC4seC4l+C4o+C4muC4lwor4Lia4Li44Lij4Lie4Liy4LiI4Liy4Lij4Lii4LmMCivguJrguLjguKPguJ7guLLguKnguLLguJIKK+C4muC4uOC4o+C4sAor4Lia4Li44Lij4Lix4LiV4LiW4Li04Lih4LiX4Li04LioCivguJrguLjguKPguLLguJMKK+C4muC4uOC4o+C4suC4k+C4l+C4uOC4leC4tOC4ouC4tOC4geC4sgor4Lia4Li44Lij4Li04LiZ4LiX4Lij4LmMCivguJrguLjguKPguLTguKHguJfguLTguKgKK+C4muC4uOC4o+C4tOC4oeC4nuC4o+C4o+C4qeC4sgor4Lia4Li44Lij4Li04Lih4Liq4Li04LiX4LiY4Li0CivguJrguLjguKPguLUKK+C4muC4uOC4o+C4uOC4qQor4Lia4Li44Lij4Li44Lip4LmC4LiX4LipCivguJrguLjguKPguLjguKnguJjguKPguKPguKEKK+C4muC4uOC5gOC4o+C4oOC4ngor4Lia4Li44LmA4Lij4Lig4Lix4LiVCivguJrguLjguYLguKPguJfguLHguYjguIcKK+C4muC4uOC4qeC4geC4owor4Lia4Li44Lip4Lia4LiBCivguJrguLjguKnguJrguIcKK+C4muC4uOC4qeC4muC4seC4mQor4Lia4Li44Lip4Lia4LiyCivguJrguLjguKnguJrguLLguKHguLTguJnguJXguKPguLIKK+C4muC4uOC4qeC4m+C4o+C4suC4hAor4Lia4Li44Lip4Lib4LiwCivguJrguLjguKnguKIKK+C4muC4uOC4qeC4ouC5jAor4Lia4Li44Lip4Lii4LmM4LiZ4LmJ4Liz4LiX4Lit4LiHCivguJrguLjguKnguKPguLLguITguLHguKEKK+C4muC4uOC4q+C4h+C4hwor4Lia4Li44Lir4LiH4Lix4LiZCivguJrguLjguKvguIfguLIKK+C4muC4uOC4q+C4o+C4hwor4Lia4Li44Lir4Lij4Li14LmICivguJrguLjguKvguKPguLXguYjguJ7guKPguLDguKPguLLguKEKK+C4muC4uOC4q+C4peC4seC4mQor4Lia4Li54LmICivguJrguLnguYkKK+C4muC4ueC5igor4Lia4Li54LiK4LiZ4Li14Lii4Liq4LiW4Liy4LiZCivguJrguLnguIrguLIKK+C4muC4ueC4iuC4tOC5guC4lAor4Lia4Li54LiK4Li04LiVCivguJrguLnguJQKK+C4muC4ueC4lOC4uQor4Lia4Li54LijCivguJrguLnguKPguJPguYwKK+C4muC4ueC4o+C4k+C4sAor4Lia4Li54Lij4LieCivguJrguLnguKPguJ7guLIKK+C4muC4ueC4o+C4nuC4suC4iOC4suC4o+C4ouC5jAor4Lia4Li54Lij4Li1CivguYDguJrguYkKK+C5gOC4muC5igor4LmA4Lia4LiE4Lit4LiZCivguYDguJrguYjguIcKK+C5gOC4muC4h+C4geC4suC4peC4sOC4meC4tQor4LmA4Lia4LmK4LiI4Li14LmLCivguYDguJrguI3guIHguLLguJnguLUKK+C5gOC4muC4jeC4iAor4LmA4Lia4LiN4LiI4LiBCivguYDguJrguI3guIjguKHguLLguKgKK+C5gOC4muC4jeC4iOC4sgor4LmA4Lia4LiN4LiI4Liy4LiH4LiE4LmMCivguYDguJrguI3guI3guLIKK+C5gOC4muC4jeC4nuC4suC4lAor4LmA4Lia4LmH4LiUCivguYDguJrguYfguJTguYDguJXguKXguYfguJQKK+C5gOC4muC5h+C4lOC5gOC4quC4o+C5h+C4iAor4LmA4Lia4LiV4LiyCivguYDguJrguJnguIvguLTguJkKK+C5gOC4muC4meC5hOC4i+C4meC5jAor4LmA4Lia4Lij4LiBCivguYDguJrguKPguLTguKXguYDguKXguLXguKLguKEKK+C5gOC4muC4o+C4teC4ouC4mQor4LmA4Lia4LmA4Lij4LmI4LiV4LmMCivguYDguJrguKoKK+C5gOC4muC4quC4muC4reC4pQor4LmA4Lia4LmJ4LitCivguYDguJrguK3guKPguYwKK+C5gOC4muC4reC4o+C5jOC4hOC4teC5gOC4peC4teC4ouC4oQor4LmA4Lia4LmJ4Lit4LmA4Lij4LmI4LitCivguYDguJrguYnguK3guYDguKPguYjguK3guYDguJfguYjguK0KK+C5gOC4muC5ieC4reC5gOC4o+C4tOC5iOC4oQor4LmA4Lia4LmJ4Lit4LmA4Lij4Li04LmI4Lih4LmA4LiX4Li04LmI4LihCivguYDguJrguK3guLAKK+C5gOC4muC4sAor4LmA4Lia4LiyCivguYDguJrguYnguLIKK+C5gOC4muC4suC4o+C4suC4kwor4LmA4Lia4Liy4LiwCivguYDguJrguLTguIEKK+C5gOC4muC4tOC5iOC4hwor4LmA4Lia4Li14LmJ4LiiCivguYDguJrguLXguKLguIEKK+C5gOC4muC4teC5iOC4ouC4hwor4LmA4Lia4Li14Lii4LiUCivguYDguJrguLXguKLguJkKK+C5gOC4muC4teC4ouC4o+C5jAor4LmA4Lia4Li14LmJ4Lii4LinCivguYDguJrguLfguK0KK+C5gOC4muC4t+C5iOC4rQor4LmA4Lia4Li34LmJ4LitCivguYDguJrguLfguYnguK3guIcKK+C5gOC4muC4t+C4reC4mQor4LmB4LiaCivguYHguJrguYkKK+C5geC4muC4gQor4LmB4Lia4LiE4LiX4Li14LmA4Lij4Li14LiiIEUKK+C5geC4muC5iOC4hwor4LmB4Lia4LiH4LiE4LmMCivguYHguJrguJTguKHguLTguJnguJXguLHguJkKK+C5geC4muC4leC5gOC4leC4reC4o+C4teC5iAor4LmB4Lia4LiZCivguYHguJrguJnguYLguIgKK+C5geC4muC4mgor4LmB4Lia4LmH4LiaCivguYHguJrguKPguIEKK+C5geC4muC5gOC4o+C4teC4ouC4oQor4LmB4Lia4Lir4Lil4LiyCivguYHguJrguLAKK+C5geC4muC4sOC5geC4iwor4LmC4LiaCivguYLguJrguYkKK+C5guC4muC5iwor4LmC4Lia4LiBCivguYLguJrguIHguILguKPguJPguLUKK+C5guC4muC4geC4teC5iQor4LmC4Lia4LiK4Li44LiBCivguYLguJrguJTguIEKK+C5guC4muC4lQor4LmC4Lia4LiV4Lix4LmL4LiZCivguYLguJrguJnguLHguKoKK+C5guC4muC5iuC5gOC4muC5igor4LmC4Lia4LiiCivguYLguJrguKPguKHguLXguJkKK+C5guC4muC4o+C4reC4mQor4LmC4Lia4Lij4Liy4LiTCivguYLguJrguKfguYzguKXguLTguYjguIcKK+C5guC4muC4quC4luC5jAor4LmD4LiaCivguYPguJrguYkKK+C5g+C4muC4o+C4sOC4geC4sgor4LmE4Lia4LmI4LmGCivguYTguJrguITguLLguKPguYzguJrguK3guYDguJnguJUKK+C5hOC4muC5gOC4muC4tOC4pQor4LibCivguJvguIEKK+C4m+C4geC4leC4tAor4Lib4LiB4Lij4LiT4LmMCivguJvguIHguKPguJPguLHguKEKK+C4m+C4geC4suC4owor4Lib4LiB4Li04LiT4LiB4LiwCivguJvguIHguLXguKPguJPguLHguKEKK+C4m+C5guC4geC4j+C4tAor4Lib4LiE4Li44LiTCivguJvguIcKK+C4m+C5iOC4hwor4Lib4LiH4Lib4Lix4LiHCivguJvguIrguLLguJrguJTguLUKK+C4m+C4juC4pQor4Lib4LiP4Lix4LiBCivguJvguI/guLTguIHguKPguJPguYwKK+C4m+C4j+C4tOC4geC4o+C4o+C4oQor4Lib4LiP4Li04LiB4Lij4Lij4Lih4Liq4LiH4LiE4Lij4Liy4LihCivguJvguI/guLTguIHguLLguKPguLAKK+C4m+C4j+C4tOC4geC4tOC4o+C4tOC4ouC4sgor4Lib4LiP4Li04LiB4Li54LilCivguJvguI/guLTguITguITguKvguLTguJUKK+C4m+C4j+C4tOC4hOC4oQor4Lib4LiP4Li04LiE4Liy4Lir4LiBCivguJvguI/guLTguIbguLAKK+C4m+C4j+C4tOC4iOC4iOC4quC4oeC4uOC4m+C4muC4suC4lwor4Lib4LiP4Li04LiK4Li14Lin4LiZ4LiwCivguJvguI/guLTguI3guI3guLIKK+C4m+C4j+C4tOC4jeC4suC4kwor4Lib4LiP4Li04LiX4Li04LiZCivguJvguI/guLTguJrguJYKK+C4m+C4j+C4tOC4muC4seC4leC4tAor4Lib4LiP4Li04Lib4LiX4LiyCivguJvguI/guLTguJvguLHguIHguKnguYwKK+C4m+C4j+C4tOC4m+C4seC4mQor4Lib4LiP4Li04Lib4Li44LiI4LiJ4Liy4Lie4Lii4Liy4LiB4Lij4LiT4LmMCivguJvguI/guLTguJvguLjguIjguInguLLguKfguLLguJfguLUKK+C4m+C4j+C4tOC4nuC4seC4l+C4mOC5jAor4Lib4LiP4Li04Lie4Liy4LiB4Lii4LmMCivguJvguI/guLTguKDguLLguIQKK+C4m+C4j+C4tOC4oOC4suC4kwor4Lib4LiP4Li04Lig4Liy4LiT4LiB4Lin4Li1CivguJvguI/guLTguKDguLLguJPguJvguI/guLTguKrguLHguKHguKDguLTguJfguLIKK+C4m+C4j+C4tOC4oOC4suC4k+C5guC4p+C4q+C4suC4owor4Lib4LiP4Li04Lih4LiyCivguJvguI/guLTguKHguLLguIHguKMKK+C4m+C4j+C4tOC4ouC4suC4ogor4Lib4LiP4Li04Lii4Li44LiX4LiY4LmMCivguJvguI/guLTguKPguJ4KK+C4m+C4j+C4tOC4o+C4ueC4mwor4Lib4LiP4Li04LmC4Lil4LihCivguJvguI/guLTguKfguLHguJXguLQKK+C4m+C4j+C4tOC4p+C4suC4lQor4Lib4LiP4Li04Lin4Liy4LiXCivguJvguI/guLTguYDguKfguJgKK+C4m+C4j+C4tOC4quC4meC4mOC4tAor4Lib4LiP4Li04Liq4Lin4LiwCivguJvguI/guLTguKrguLHguIfguILguKPguJPguYwKK+C4m+C4j+C4tOC4quC4seC4meC4luC4suC4owor4Lib4LiP4Li04Liq4Lix4Lih4Lig4Li04LiX4LiyCivguJvguI/guLTguYDguKrguJgKK+C4m+C4kOC4nuC4tQor4Lib4LiQ4LihCivguJvguJDguKHguJTguLjguKrguLTguJUKK+C4m+C4kOC4oeC4nuC4ouC4suC4muC4suC4pQor4Lib4LiQ4Lih4Liq4Lih4LmC4Lie4LiY4Li0CivguJvguJDguKHguLLguKrguLLguJIKK+C4m+C4kOC4p+C4tQor4Lib4LiT4LiVCivguJvguJPguLLguKEKK+C4m+C4k+C4tOC4mOC4suC4mQor4Lib4LiT4Li04LiY4Li0CivguJvguJPguLXguJUKK+C4m+C4lAor4Lib4LiU4LmC4Lib4LmJCivguJvguJTguLTguKfguKPguLHguJTguLIKK+C4m+C4leC4seC4leC4o+C4tQor4Lib4LiV4Li0CivguJvguJXguLTguKLguLHguJUKK+C4m+C4luC4nuC4tQor4Lib4LiW4Lih4Lix4LiHCivguJvguJbguKfguLUKK+C4m+C4l+C4seC4geC4guC4tOC4kwor4Lib4LiX4Lix4LiP4LiQ4Liy4LiZCivguJvguJfguLHguKrguJbguLLguJkKK+C4m+C4l+C4suC4mQor4Lib4LiX4Liy4LiZ4Li44LiB4Lij4LihCivguJvguJfguLXguJsKK+C4m+C4l+C4uOC4oQor4Lib4LiY4Liy4LiZCivguJvguJkKK+C4m+C5iOC4mQor4Lib4LiZ4Lix4LiU4LiU4LiyCivguJvguJnguLjguJcKK+C4m+C4mgor4Lib4Lib4Lix4LiN4LiI4LiwCivguJvguKEKK+C4m+C4o+C4gQor4Lib4Lij4LiB4LiV4Li0CivguJvguKPguIcKK+C4m+C4o+C4lAor4Lib4Lij4LiV4Lii4Lix4LiB4Lip4LmMCivguJvguKPguJXguKLguLLguIQKK+C4m+C4o+C4leC5gOC4ouC4gQor4Lib4Lij4LiX4Lix4LiV4LiV4Li54Lib4LiK4Li14Lin4Li1CivguJvguKPguJkKK+C4m+C4o+C4meC4meC4tOC4muC4seC4leC4tAor4Lib4Lij4LiZ4Lix4LiiCivguJvguKPguJoKK+C4m+C4o+C4m+C4seC4geC4qeC5jAor4Lib4Lij4LmA4Lih4Lir4LiwCivguJvguKPguYLguKXguIEKK+C4m+C4o+C4p+C4lAor4Lib4Lij4Lin4LiZ4LmB4Lib4LijCivguJvguKPguKfguLLguJfguLUKK+C4m+C4o+C4p+C4tOC4quC4seC4ouC4quC4teC4oeC4sgor4Lib4Lij4Lio4Li4CivguJvguKPguKrguLTguJUKK+C4m+C4o+C5i+C4rQor4Lib4Lij4Lit4LiH4LiU4Lit4LiHCivguJvguKPguK3guJQKK+C4m+C4o+C4reC4lOC5hgor4Lib4Lij4Lit4LiXCivguJvguKPguK3guKIKK+C4m+C4o+C4reC4ouC5hgor4Lib4Lij4LiwCivguJvguKPguLDguIHguJoKK+C4m+C4o+C4sOC4geC4pOC4lQor4Lib4Lij4Liw4LiB4Lik4LiV4Li0CivguJvguKPguLDguIHguKUKK+C4m+C4o+C4sOC4geC4p+C4lAor4Lib4Lij4Liw4LiB4Lit4LiaCivguJvguKPguLDguIHguLHguJkKK+C4m+C4o+C4sOC4geC4seC4mgor4Lib4Lij4Liw4LiB4Liy4LiiCivguJvguKPguLDguIHguLLguKMKK+C4m+C4o+C4sOC4geC4suC4qAor4Lib4Lij4Liw4LiB4Liy4Lio4LiBCivguJvguKPguLDguIHguLLguKjguJnguLXguKLguIHguKPguKPguKEKK+C4m+C4o+C4sOC4geC4suC4qOC4meC4teC4ouC4muC4seC4leC4owor4Lib4Lij4Liw4LiB4Liy4Lio4Li04LiVCivguJvguKPguLDguIHguLMKK+C4m+C4o+C4sOC4geC4tOC4lAor4Lib4Lij4Liw4LiB4Li04LiVCivguJvguKPguLDguIHguLXguKPguJPguIEKK+C4m+C4o+C4sOC5gOC4geC4teC4ouC4o+C4k+C4gQor4Lib4Lij4Liw4LmB4LiB4LiBCivguJvguKPguLDguITguJQKK+C4m+C4o+C4sOC4hOC4meC4mOC4o+C4o+C4ngor4Lib4Lij4Liw4LiE4LiZ4LiY4Lij4Lij4Lie4LmMCivguJvguKPguLDguITguJoKK+C4m+C4o+C4sOC4hOC4reC4hwor4Lib4Lij4Liw4LiE4Lix4Lia4Lib4Lij4Liw4LiE4Lit4LiHCivguJvguKPguLDguITguLHguKXguKDguYwKK+C4m+C4o+C4sOC4hOC4swor4Lib4Lij4Liw4LiE4Liz4LmE4LiB4LmICivguJvguKPguLDguITguLPguJTguLXguITguKfguLLguKIKK+C4m+C4o+C4sOC4hOC4tOC5iOC4mQor4Lib4Lij4Liw4LiE4Li04LmI4LiZ4Lin4Li04LiZ4LiK4LiyCivguJvguKPguLDguITguLjguJMKK+C4m+C4o+C4sOC5gOC4hOC4mQor4Lib4Lij4Liw4LmA4LiE4Lij4Liy4Liw4Lir4LmMCivguJvguKPguLDguYLguITguJkKK+C4m+C4o+C4sOC5guC4hOC4meC4mOC4o+C4o+C4mgor4Lib4Lij4Liw4LmC4LiE4LiZ4LiY4Lij4Lij4Lie4LmMCivguJvguKPguLDguYLguITguKEKK+C4m+C4o+C4sOC4iOC4hwor4Lib4Lij4Liw4LiI4LiNCivguJvguKPguLDguIjguJoKK+C4m+C4o+C4sOC4iOC4p+C4mgor4Lib4Lij4Liw4LiI4LmL4Lit4Lib4Lij4Liw4LmB4LiI4LmLCivguJvguKPguLDguIjguLHguIHguKnguYwKK+C4m+C4o+C4sOC4iOC4seC4jQor4Lib4Lij4Liw4LiI4Lix4LiZCivguJvguKPguLDguIjguLLguIEKK+C4m+C4o+C4sOC4iOC4suC4hAor4Lib4Lij4Liw4LiI4Liy4LiZCivguJvguKPguLDguIjguLMKK+C4m+C4o+C4sOC4iOC4tOC4oQor4Lib4Lij4Liw4LiI4Li04LmJ4Lih4Lib4Lij4Liw4LiI4LmI4Lit4LiHCivguJvguKPguLDguIjguLTguYnguKHguJvguKPguLDguYDguIjguYvguK0KK+C4m+C4o+C4sOC4iOC4uAor4Lib4Lij4Liw4LiI4Li44LiE4Lih4LiZ4LmMCivguJvguKPguLDguIjguLjguJrguLHguJkKK+C4m+C4o+C4sOC5gOC4iOC4gQor4Lib4Lij4Liw4LmA4LiI4Li04LiUCivguJvguKPguLDguYDguIjguLXguKLguJQKK+C4m+C4o+C4sOC5geC4iAor4Lib4Lij4Liw4LiK4LiUCivguJvguKPguLDguIrguJkKK+C4m+C4o+C4sOC4iuC4p+C4oQor4Lib4Lij4Liw4LiK4Lin4LijCivguJvguKPguLDguIrguLHguJkKK+C4m+C4o+C4sOC4iuC4sgor4Lib4Lij4Liw4LiK4Li04LiUCivguJvguKPguLDguIrguLUKK+C4m+C4o+C4sOC4iuC4uOC4oQor4Lib4Lij4Liw4LmA4LiK4Li04LiNCivguJvguKPguLDguJPguJUKK+C4m+C4o+C4sOC4k+C4oQor4Lib4Lij4Liw4LiT4Liy4LihCivguJvguKPguLDguJPguLTguJjguLLguJkKK+C4m+C4o+C4sOC4k+C4tOC4mOC4tAor4Lib4Lij4Liw4LiT4Li14LiVCivguJvguKPguLDguJPguLjguJcKK+C4m+C4o+C4sOC4lOC4hwor4Lib4Lij4Liw4LiU4LiH4LmB4LiU4LiHCivguJvguKPguLDguJTguJkKK+C4m+C4o+C4sOC4lOC4p+C4mQor4Lib4Lij4Liw4LiU4Lit4LiZCivguJvguKPguLDguJTguK3guKIKK+C4m+C4o+C4sOC4lOC4seC4gQor4Lib4Lij4Liw4LiU4Lix4LiHCivguJvguKPguLDguJTguLHguJoKK+C4m+C4o+C4sOC4lOC4sgor4Lib4Lij4Liw4LiU4Liy4LiBCivguJvguKPguLDguJTguLLguJsKK+C4m+C4o+C4sOC4lOC4suC4qQor4Lib4Lij4Liw4LiU4Li04LiK4LiN4LiyCivguJvguKPguLDguJTguLTguJTguJvguKPguLDguJTguK3guKIKK+C4m+C4o+C4sOC4lOC4tOC4l+C4tOC4mQor4Lib4Lij4Liw4LiU4Li04Lij4LieCivguJvguKPguLDguJTguLTguKnguJDguYwKK+C4m+C4o+C4sOC4lOC4tOC4qeC4kOC4suC4mQor4Lib4Lij4Liw4LiU4Li4CivguJvguKPguLDguJTguLjguIcKK+C4m+C4o+C4sOC4lOC4uOC4iAor4Lib4Lij4Liw4LiU4Li54LmICivguJvguKPguLDguYDguJQKK+C4m+C4o+C4sOC5gOC4lOC5h+C4mQor4Lib4Lij4Liw4LmA4LiU4Lii4LiBCivguJvguKPguLDguYDguJTguLTguKEKK+C4m+C4o+C4sOC5gOC4lOC4teC4ouC4hwor4Lib4Lij4Liw4LmA4LiU4Li14LmL4Lii4LinCivguJvguKPguLDguYHguJTguIcKK+C4m+C4o+C4sOC5geC4lOC4sAor4Lib4Lij4Liw4LmC4LiU4LiiCivguJvguKPguLDguJXguIcKK+C4m+C4o+C4sOC4leC4ouC4suC4hAor4Lib4Lij4Liw4LiV4Lix4LiBCivguJvguKPguLDguJXguLLguJvguLAKK+C4m+C4o+C4sOC4leC4tOC4iuC4jeC4sgor4Lib4Lij4Liw4LiV4Li04LiN4Liy4LiTCivguJvguKPguLDguJXguLTguJfguLTguJkKK+C4m+C4o+C4sOC4leC4tOC4oeC4suC4geC4o+C4o+C4oQor4Lib4Lij4Liw4LiV4Li04Lij4LieCivguJvguKPguLDguJXguLTguKjguKPguLHguJ4KK+C4m+C4o+C4sOC4leC4uQor4Lib4Lij4Liw4LiW4LihCivguJvguKPguLDguJbguKHguIjguLTguJnguJTguLIKK+C4m+C4o+C4sOC4l+C4oQor4Lib4Lij4Liw4LiX4Lii4LiUCivguJvguKPguLDguJfguYnguKfguIcKK+C4m+C4o+C4sOC4l+C4p+C4mQor4Lib4Lij4Liw4LiX4Lix4LiB4Lip4LmMCivguJvguKPguLDguJfguLHguIHguKnguLTguJMKK+C4m+C4o+C4sOC4l+C4seC4hwor4Lib4Lij4Liw4LiX4Lix4LiUCivguJvguKPguLDguJfguLHguJoKK+C4m+C4o+C4sOC4l+C5iOC4sgor4Lib4Lij4Liw4LiX4Liy4LiB4Lil4LmJ4Lit4LiHCivguJvguKPguLDguJfguLLguJkKK+C4m+C4o+C4sOC4l+C4suC4ogor4Lib4Lij4Liw4LiX4Liy4Lio4Li1CivguJvguKPguLDguJfguLTguJkKK+C4m+C4o+C4sOC4l+C4tOC5iOC4mQor4Lib4Lij4Liw4LiX4Li14LibCivguJvguKPguLDguJfguLjguIEKK+C4m+C4o+C4sOC4l+C4uOC4kAor4Lib4Lij4Liw4LiX4Li44LiQ4LiI4Li04LiVCivguJvguKPguLDguJfguLjguJkKK+C4m+C4o+C4sOC4l+C4uOC4oeC4o+C4suC4hAor4Lib4Lij4Liw4LiX4Li44LipCivguJvguKPguLDguJfguLjguKnguI/guYwKK+C4m+C4o+C4sOC4l+C4uOC4qeC4j+C4iOC4tOC4lQor4Lib4Lij4Liw4LiX4Li44Lip4LiQ4LmMCivguJvguKPguLDguJfguLjguKnguJDguIjguLTguJUKK+C4m+C4o+C4sOC5gOC4l+C4qAor4Lib4Lij4Liw4LmA4LiX4LiyCivguJvguKPguLDguYDguJfguYnguLIKK+C4m+C4o+C4sOC5gOC4l+C4teC4ouC4lAor4Lib4Lij4Liw4LmA4LiX4Li14Lii4LiaCivguJvguKPguLDguYDguJfguLfguK3guIcKK+C4m+C4o+C4sOC4mOC4suC4mQor4Lib4Lij4Liw4LiY4Liy4LiZ4Liy4LiY4Li04Lia4LiU4Li1CivguJvguKPguLDguJnguKEKK+C4m+C4o+C4sOC4meC4rQor4Lib4Lij4Liw4LiZ4Lit4LihCivguJvguKPguLDguJnguLHguIcKK+C4m+C4o+C4sOC4meC4seC4m+C4lOC4sgor4Lib4Lij4Liw4LiZ4Li14LmJCivguJvguKPguLDguJnguLXguJvguKPguLDguJnguK3guKEKK+C4m+C4o+C4sOC4muC4seC4lAor4Lib4Lij4Liw4Lia4Liy4LiVCivguJvguKPguLDguJvguKPguLLguJkKK+C4m+C4o+C4sOC4m+C4o+C4suC4ogor4Lib4Lij4Liw4Lib4LiyCivguJvguKPguLDguYDguJvguKPguLXguYnguKLguIcKK+C4m+C4o+C4sOC5gOC4m+C4o+C4teC5ieC4ouC4pwor4Lib4Lij4Liw4LmB4Lib4Lij4LmJ4LiZCivguJvguKPguLDguJ7guIjguJnguYwKK+C4m+C4o+C4sOC4nuC4meC4mOC5jAor4Lib4Lij4Liw4Lie4Lij4LihCivguJvguKPguLDguJ7guKTguJXguLQKK+C4m+C4o+C4sOC4nuC4pOC4l+C4mOC4tOC5jAor4Lib4Lij4Liw4Lie4Lix4LiUCivguJvguKPguLDguJ7guLHguJfguJjguYwKK+C4m+C4o+C4sOC4nuC4seC4meC4mOC5jAor4Lib4Lij4Liw4Lie4Liy4LiVCivguJvguKPguLDguJ7guLLguKjguKHguKvguKPguJPguJ4KK+C4m+C4o+C4sOC4nuC4suC4qgor4Lib4Lij4Liw4Lie4Liy4LisCivguJvguKPguLDguJ7guLTguJMKK+C4m+C4o+C4sOC4nuC4tOC4oeC4nuC5jOC4m+C4o+C4sOC4nuC4suC4ogor4Lib4Lij4Liw4Lie4Li44LiX4LiY4LmMCivguJvguKPguLDguYDguJ7guJPguLUKK+C4m+C4o+C4sOC5gOC4nuC5ieC4rQor4Lib4Lij4Liw4LmB4Lie4Lij4LmI4LiH4Lib4Lij4Liw4LmB4Lie4Lij4LinCivguJvguKPguLDguYLguJ7guJgKK+C4m+C4o+C4sOC5hOC4ngor4Lib4Lij4Liw4LmE4Lie4LijCivguJvguKPguLDguKDguJ4KK+C4m+C4o+C4sOC4oOC4seC4quC4quC4owor4Lib4Lij4Liw4Lig4LiyCivguJvguKPguLDguKDguLLguJ4KK+C4m+C4o+C4sOC4oOC4suC4qQor4Lib4Lij4Liw4Lig4Liy4LiqCivguJvguKPguLDguKDguLnguKjguLHguIHguJTguLTguYwKK+C4m+C4o+C4sOC5gOC4oOC4lwor4Lib4Lij4Liw4Lih4LiHCivguJvguKPguLDguKHguKfguI0KK+C4m+C4o+C4sOC4oeC4p+C4pQor4Lib4Lij4Liw4Lih4Lix4LiV4LiV4LiwCivguJvguKPguLDguKHguLLguJMKK+C4m+C4o+C4sOC4oeC4suC4lwor4Lib4Lij4Liw4Lih4Li44LiCCivguJvguKPguLDguKHguLjguJcKK+C4m+C4o+C4sOC4oeC4ueC4pQor4Lib4Lij4Liw4LmA4Lih4Li04LiZCivguJvguKPguLDguYLguKHguIcKK+C4m+C4o+C4sOC5guC4oeC4l+C4ouC5jAor4Lib4Lij4Liw4Lii4LiH4LiE4LmMCivguJvguKPguLDguKLguLjguIHguJXguYwKK+C4m+C4o+C4sOC4ouC4uOC4l+C4mOC5jAor4Lib4Lij4Liw4Lii4Li44LijCivguJvguKPguLDguKLguLnguKMKK+C4m+C4o+C4sOC5guC4ouC4hAor4Lib4Lij4Liw4LmC4Lii4LiE4Liq4Lix4Lih4Lib4LiX4LiyCivguJvguKPguLDguYLguKLguIrguJnguYwKK+C4m+C4o+C4sOC5guC4o+C4q+C4tOC4lQor4Lib4Lij4Liw4Lil4Lih4Lie4LmMCivguJvguKPguLDguKXguK3guIcKK+C4m+C4o+C4sOC4peC4seC4ogor4Lib4Lij4Liw4Lil4Liy4LiVCivguJvguKPguLDguKXguLLguKIKK+C4m+C4o+C4sOC4peC4tuC4hwor4Lib4Lij4Liw4Lil4Li4CivguJvguKPguLDguKXguLjguIcKK+C4m+C4o+C4sOC5gOC4peC5iOC4q+C5jAor4Lib4Lij4Liw4LmA4Lil4LmJ4Liy4Lib4Lij4Liw4LmC4Lil4LihCivguJvguKPguLDguYLguKXguJvguKPguLDguYDguKUKK+C4m+C4o+C4sOC5guC4peC4oQor4Lib4Lij4Liw4Lin4Lij4Lij4LiVCivguJvguKPguLDguKfguKPguKPguJXguJnguYwKK+C4m+C4o+C4sOC4p+C4seC4leC4tAor4Lib4Lij4Liw4Lin4Liy4LiVCivguJvguKPguLDguKfguLLguJfguLUKK+C4m+C4o+C4sOC4p+C4suC4pQor4Lib4Lij4Liw4Lin4Liy4Lil4Lib4Lix4LiX4Lih4LmMCivguJvguKPguLDguKfguLLguKXguJzguKUKK+C4m+C4o+C4sOC4p+C4suC4peC4p+C4o+C4o+C4kwor4Lib4Lij4Liw4Lin4Liy4LiqCivguJvguKPguLDguKfguLTguIcKK+C4m+C4o+C4sOC4p+C4tOC4igor4Lib4Lij4Liw4Lin4Li04LiV4LijCivguJvguKPguLDguKfguLXguJMKK+C4m+C4o+C4sOC5gOC4p+C4k+C4tQor4Lib4Lij4Liw4LmA4Lin4Lib4Lij4Liw4Lin4Li04LiHCivguJvguKPguLDguYDguKfguKgKK+C4m+C4o+C4sOC5gOC4p+C4qOC4meC5jAor4Lib4Lij4Liw4Lio4LihCivguJvguKPguLDguKjguLLguKrguJnguYwKK+C4m+C4o+C4sOC4qOC4uAor4Lib4Lij4Liw4Liq4LiBCivguJvguKPguLDguKrguIfguITguYwKK+C4m+C4o+C4sOC4quC4mgor4Lib4Lij4Liw4Liq4LieCivguJvguKPguLDguKrguKEKK+C4m+C4o+C4sOC4quC4sAor4Lib4Lij4Liw4Liq4Lix4LiBCivguJvguKPguLDguKrguLHguJnguJnguLLguIHguLLguKMKK+C4m+C4o+C4sOC4quC4seC4ouC4q+C5jAor4Lib4Lij4Liw4Liq4LiyCivguJvguKPguLDguKrguLLguJcKK+C4m+C4o+C4sOC4quC4suC4l+C4geC4suC4owor4Lib4Lij4Liw4Liq4Liy4LiX4Lij4Li54LibCivguJvguKPguLDguKrguLLguJjguJnguYwKK+C4m+C4o+C4sOC4quC4suC4mQor4Lib4Lij4Liw4Liq4Liy4LijCivguJvguKPguLDguKrguLTguJfguJjguLTguYwKK+C4m+C4o+C4sOC4quC4teC4m+C4o+C4sOC4quC4sgor4Lib4Lij4Liw4Liq4Li54LiVCivguJvguKPguLDguKrguLnguJXguLQKK+C4m+C4o+C4sOC5gOC4quC4muC4seC4meC4reC4suC4geC4hwor4Lib4Lij4Liw4LmA4Liq4Lij4Li04LiQCivguJvguKPguLDguYHguKrguJrguLHguJkKK+C4m+C4o+C4sOC4q+C4meC4tuC5iOC4hwor4Lib4Lij4Liw4Lir4Lih4Lix4LiZCivguJvguKPguLDguKvguKHguYjguLIKK+C4m+C4o+C4sOC4q+C4ouC4seC4lAor4Lib4Lij4Liw4Lir4Lij4LiT4LmMCivguJvguKPguLDguKvguKXguLLguJQKK+C4m+C4o+C4sOC4q+C4peC4suC4lwor4Lib4Lij4Liw4Lir4Lil4LmI4LizCivguJvguKPguLDguKvguKXguLTguYjguKEKK+C4m+C4o+C4sOC4q+C4p+C4seC4lAor4Lib4Lij4Liw4Lir4Lin4Lix4LmI4LiZCivguJvguKPguLDguKvguKfguYjguLIKK+C4m+C4o+C4sOC4q+C4seC4lQor4Lib4Lij4Liw4Lir4Liy4LiTCivguJvguKPguLDguKvguLLguKMKK+C4m+C4o+C4sOC4q+C4suC4qgor4Lib4Lij4Liw4LmA4Lir4LilCivguJvguKPguLDguYDguKvguKoKK+C4m+C4o+C4sOC5gOC4q+C4teC4ouC4pQor4Lib4Lij4Liw4LmE4Lir4Lih4Liq4Li44Lir4Lij4Li1CivguJvguKPguLDguK3guJoKK+C4m+C4o+C4sOC4reC4owor4Lib4Lij4Liw4Lit4Li24LiHCivguJvguKPguLDguK3guLjguIEKK+C4m+C4o+C4sOC5gOC4reC4teC4ouC4hwor4Lib4Lij4Liw4LmB4Lit4LiBCivguJvguKPguLDguK7guLLguKEKK+C4m+C4o+C4seC4gQor4Lib4Lij4Lix4LiB4Lib4Lij4LizCivguJvguKPguLHguIHguKHguLAKK+C4m+C4o+C4seC4geC4q+C4seC4geC4nuC4seC4hwor4Lib4Lij4Lix4LiHCivguJvguKPguLHguIrguI3guLIKK+C4m+C4o+C4seC4lAor4Lib4Lij4Lix4LiV4LiW4LiI4Lij4Li04Lii4LiyCivguJvguKPguLHguJXguKLguJnguJXguYwKK+C4m+C4o+C4seC4leC4ouC4seC4geC4qeC5jAor4Lib4Lij4Lix4LiV4Lii4Lix4LiZ4LiV4LmMCivguJvguKPguLHguJXguKLguLHguKIKK+C4m+C4o+C4seC4leC4ouC4uOC4leC4muC4seC4mQor4Lib4Lij4Lix4LiV4Lii4Li44Lia4Lix4LiZCivguJvguKPguLHguJXguKLguLnguKkKK+C4m+C4o+C4seC4leC4ouC4ueC4q+C5jAor4Lib4Lij4Lix4LiV4LmA4Lii4LiBCivguJvguKPguLHguJkKK+C4m+C4o+C4seC5iOC4mQor4Lib4Lij4Lix4LmJ4LiZCivguJvguKPguLHguJoKK+C4m+C4o+C4seC4m+C4p+C4suC4lwor4Lib4Lij4Lix4Lih4Lib4Lij4LiyCivguJvguKPguLHguKHguKHguLjguILguLIKK+C4m+C4o+C4seC4qOC4iOC4tOC4oQor4Lib4Lij4Lix4Lio4LiZ4LiyCivguJvguKPguLHguKjguJnguLUKK+C4m+C4o+C4seC4qOC4p+C5jAor4Lib4Lij4LmI4LiyCivguJvguKPguLLguIHguI8KK+C4m+C4o+C4suC4geC4o+C4oQor4Lib4Lij4Liy4LiB4Lik4LiVCivguJvguKPguLLguIHguLLguKMKK+C4m+C4o+C4suC4hOC4oOC4suC4owor4Lib4Lij4Liy4LiE4Liy4LijCivguJvguKPguLLguIcKK+C4m+C4o+C4suC4h+C4hOC5jAor4Lib4Lij4Liy4LiH4LiE4LiT4LiwCivguJvguKPguLLguIjguLXguJkKK+C4m+C4o+C4suC4iuC4jeC5jAor4Lib4Lij4Liy4LiK4LiN4LiyCivguJvguKPguLLguIrguLHguKIKK+C4m+C4o+C4suC4iuC4suC4m+C4seC4leC4ouC4p+C4tOC4p+C4suC4q+C4sAor4Lib4Lij4Liy4LiK4Li04LiVCivguJvguKPguLLguJMKK+C4m+C4o+C4suC4k+C4tQor4Lib4Lij4Liy4LiUCivguJvguKPguLLguJXguLTguKvguLLguKPguKLguYwKK+C4m+C4o+C4suC4l+C4uOC4geC4o+C4sgor4Lib4Lij4Liy4LiZCivguJvguKPguLLguJnguLUKK+C4m+C4o+C4suC4mgor4Lib4Lij4Liy4Lia4LiU4Liy4Lig4Li04LmA4Lip4LiBCivguJvguKPguLLguJvguJXguYwKK+C4m+C4o+C4suC4oOC4ngor4Lib4Lij4Liy4LihCivguJvguKPguLLguKHguLLguKoKK+C4m+C4o+C4suC5guC4oeC4igor4Lib4Lij4Liy4LmC4Lih4LiX4Lii4LmMCivguJvguKPguLLguKIKK+C4m+C4o+C4suC4o+C4luC4meC4sgor4Lib4Lij4Liy4Lij4LigCivguJvguKPguLLguKPguKHguKDguYwKK+C4m+C4o+C4suC4qAor4Lib4Lij4Liy4Lio4LiI4Liy4LiBCivguJvguKPguLLguKjguLHguKIKK+C4m+C4o+C4suC4qeC4k+C4tQor4Lib4Lij4Liy4Lip4Liy4LiTCivguJvguKPguLLguKrguLHguKIKK+C4m+C4o+C4suC4quC4suC4lwor4Lib4Lij4LizCivguJvguKPguLQKK+C4m+C4o+C4tOC4gQor4Lib4Lij4Li04LiB4LiC4Liy4LijCivguJvguKPguLTguIHguKPguKPguKEKK+C4m+C4o+C4tOC4geC4seC4mwor4Lib4Lij4Li04LiC4LiyCivguJvguKPguLTguITguJPguKvguYwKK+C4m+C4o+C4tOC4hgor4Lib4Lij4Li04LiI4Liy4LiECivguJvguKPguLTguIjguLLguKPguLTguIHguLIKK+C4m+C4o+C4tOC5gOC4ieC4lwor4Lib4Lij4Li04LiK4LiZCivguJvguKPguLTguIvguLbguKEKK+C4m+C4o+C4tOC4jeC4jeC4sgor4Lib4Lij4Li04LiT4Liy4LihCivguJvguKPguLTguJPguLLguKLguIEKK+C4m+C4o+C4tOC4leC4leC4sAor4Lib4Lij4Li04LiV4LmC4LiV4LiX4LiBCivguJvguKPguLTguJXguKLguLLguIQKK+C4m+C4o+C4tOC4leC4owor4Lib4Lij4Li04LiX4Lij4Lij4Lio4LiZ4LmMCivguJvguKPguLTguJfguLHguKLguKvguLHguITguITguLUKK+C4m+C4o+C4tOC4l+C4seC4qOC4meC5jAor4Lib4Lij4Li04LmA4LiX4LieCivguJvguKPguLTguYDguJfguJ7guJnguYwKK+C4m+C4o+C4tOC5gOC4l+C4p+C4meC4sAor4Lib4Lij4Li04LmA4LiX4Lin4LiwCivguJvguKPguLTguJnguLTguJ7guJ7guLLguJkKK+C4m+C4o+C4tOC4mgor4Lib4Lij4Li04Lib4Lix4LiZ4LiW4LmMCivguJvguKPguLTguJ7guJnguJjguYwKK+C4m+C4o+C4tOC4nuC4seC4leC4owor4Lib4Lij4Li04Lie4Lix4LiZ4LiY4LmMCivguJvguKPguLTguJ7guLLguIrguIEKK+C4m+C4o+C4tOC4oOC4seC4k+C4keC5jAor4Lib4Lij4Li04Lig4Liy4LipCivguJvguKPguLTguKDguLLguKnguJPguYwKK+C4m+C4o+C4tOC4oOC4uOC4jeC4iuC5jAor4Lib4Lij4Li04Lig4Li54Lih4Li0CivguJvguKPguLTguYLguKDguIQKK+C4m+C4o+C4tOC5iOC4oQor4Lib4Lij4Li04Lih4LiT4LiR4LilCivguJvguKPguLTguKHguLHguJcKK+C4m+C4o+C4tOC4oeC4suC4kwor4Lib4Lij4Li04Lih4Liy4LiV4LijCivguJvguKPguLTguKLguLHguJXguLQKK+C4m+C4o+C4tOC4ouC4seC4leC4tOC4mOC4o+C4o+C4oQor4Lib4Lij4Li04Lii4Liy4LiiCivguJvguKPguLTguYDguKLguKgKK+C4m+C4o+C4tOC5guC4ouC4quC4suC4mQor4Lib4Lij4Li04Lin4Lij4Lij4LiVCivguJvguKPguLTguKfguLHguJXguKMKK+C4m+C4o+C4tOC4p+C4suC4owor4Lib4Lij4Li04Lin4Liy4LiqCivguJvguKPguLTguKfguLTguJXguIEKK+C4m+C4o+C4tOC5gOC4p+C4kwor4Lib4Lij4Li04Lio4LiZ4LiyCivguJvguKPguLTguKnguIHguLLguKMKK+C4m+C4o+C4tOC4qeC4seC4lwor4Lib4Lij4Li04Liq4Lix4LiN4LiN4Li5CivguJvguKPguLTguKrguLjguJfguJjguLQKK+C4m+C4o+C4tOC4q+C4suC4mQor4Lib4Lij4Li04Lir4Liy4LijCivguJvguKPguLTguKvguLLguKoKK+C4m+C4o+C4teC5iAor4Lib4Lij4Li14LiK4LiN4LiyCivguJvguKPguLXguIrguLIKK+C4m+C4o+C4teC5iuC4lAor4Lib4Lij4Li14LiU4LiyCivguJvguKPguLXguJTguLQKK+C4m+C4o+C4teC4lOC4tOC5jAor4Lib4Lij4Li14LiU4Li1CivguJvguKPguLXguJXguLQKK+C4m+C4o+C4teC4ogor4Lib4Lij4Li14Lii4LiyCivguJvguKPguLbguIEKK+C4m+C4o+C4tuC4geC4qeC4sgor4Lib4Lij4Li24LiHCivguJvguKPguLfguK0KK+C4m+C4o+C4t+C5i+C4rQor4Lib4Lij4Li4CivguJvguKPguLjguIcKK+C4m+C4o+C4uQor4Lib4Lij4Li54LmLCivguJvguKPguLnguJQKK+C4m+C4o+C4ueC5iuC4nwor4Lib4Lik4LiH4LiE4LieCivguJvguKTguIjguInguLIKK+C4m+C4pOC4qeC4juC4suC4h+C4hOC5jAor4Lib4Lik4Lip4LiQCivguJvguKTguKnguJPguYwKK+C4m+C4peC4gQor4Lib4Lil4LiB4LmA4Lib4Lil4Li14LmJ4LiiCivguJvguKXguIcKK+C4m+C4peC5iOC4hwor4Lib4Lil4LiUCivguJvguKXguYnguJkKK+C4m+C4peC4p+C4gQor4Lib4Lil4Lit4LiBCivguJvguKXguYjguK3guIcKK+C4m+C4peC5ieC4reC4hwor4Lib4Lil4Lit4LiUCivguJvguKXguYnguK3guJkKK+C4m+C4peC4reC4mgor4Lib4Lil4Lit4LihCivguJvguKXguYjguK3guKIKK+C4m+C4peC4sAor4Lib4Lil4Lix4LiBCivguJvguKXguLHguYrguIEKK+C4m+C4peC4seC5iuC4geC5hOC4nwor4Lib4Lil4Lix4LiHCivguJvguKXguLHguYjguIcKK+C4m+C4peC4seC4lAor4Lib4Lil4Lix4LiU4LiC4Li04LiBCivguJvguKXguLIKK+C4m+C4peC4suC4gQor4Lib4Lil4Liy4LiU4Liy4LinCivguJvguKXguLLguJUKK+C4m+C4peC4suC4mgor4Lib4Lil4Liy4Lid4LiyCivguJvguKXguLLguKIKK+C4m+C4peC4suC4ouC4meC4suC4geC4suC4owor4Lib4Lil4Liy4LmC4Lil4Lih4LiyCivguJvguKXguLLguKfguLLguKwKK+C4m+C4peC4suC4quC5gOC4leC4reC4o+C5jAor4Lib4Lil4Liy4Liq4LiZ4Liy4LiB4Liy4LijCivguJvguKXguLLguKvguKHguLbguIEKK+C4m+C4peC5ieC4swor4Lib4Lil4LmJ4Liz4Lib4Lil4Li44LiBCivguJvguKXguLTguIcKK+C4m+C4peC4tOC4lAor4Lib4Lil4Li04LmJ4LiZCivguJvguKXguLTguYLguJ7guJgKK+C4m+C4peC4tOC4oQor4Lib4Lil4Li04LmI4LihCivguJvguKXguLTguKcKK+C4m+C4peC4tQor4Lib4Lil4Li14LiBCivguJvguKXguLfguYnguKEKK+C4m+C4peC4uOC4gQor4Lib4Lil4Li54LiBCivguJvguKfguIHguYDguJvguLXguKLguIEKK+C4m+C4p+C4hwor4Lib4LmI4Lin4LiHCivguJvguKfguJQKK+C4m+C5iOC4p+C4mQor4Lib4LmJ4Lin4LiZCivguJvguYnguKfguJnguYDguJvguLXguYnguKLguJkKK+C4m+C5iOC4p+C4ogor4Lib4Lin4Lix4LiV4LiZ4LmMCivguJvguKfguLHguJXguKLguLLguIHguLLguKMKK+C4m+C4p+C4suC4lQor4Lib4Lin4Liy4Lij4LiT4LiyCivguJvguKfguLLguKUKK+C4m+C4p+C4suC4qgor4Lib4Lin4Liy4LisCivguJvguKfguLTguIoKK+C4m+C4p+C4tOC4leC4owor4Lib4Lin4Li04LiYCivguJvguKfguLTguYDguKfguIEKK+C4m+C4p+C4teC4kwor4Lib4Lin4Li44LiV4Li0CivguJvguYDguKfguJPguLUKK+C4m+C5gOC4p+C4qgor4Lib4LmA4Lin4Liq4LiZ4LmMCivguJvguKjguLgKK+C4m+C4quC4ngor4Lib4Liq4Lix4LiZ4LiZ4LiwCivguJvguKrguLHguKLguKvguLAKK+C4m+C4quC4suC4lwor4Lib4Liq4Liy4LiZCivguJvguKrguLLguKrguJnguYwKK+C4m+C4quC4uAor4Lib4Liq4Li44LiVCivguJvguKrguLnguJXguLQKK+C4m+C4q+C4seC4h+C4qgor4Lib4Lir4Lix4LiH4Liq4LiZCivguJvguKvguLLguJkKK+C4m+C4q+C4suC4owor4Lib4Lir4Liy4LiqCivguJvguK0KK+C4m+C5ieC4rQor4Lib4LmL4LitCivguJvguK3guIEKK+C4m+C4reC4hwor4Lib4LmI4Lit4LiHCivguJvguYnguK3guIcKK+C4m+C4reC4lAor4Lib4Lit4LiZCivguJvguYnguK3guJkKK+C4m+C4reC4meC5hgor4Lib4Lit4LiZ4LiU4LmMCivguJvguK3guYDguJnguLLguLAKK+C4m+C4reC4mgor4Lib4Lit4LihCivguJvguYnguK3guKEKK+C4m+C5i+C4reC4oQor4Lib4Lit4LiiCivguJvguYnguK3guKIKK+C4m+C4sAor4Lib4Liw4LiB4LiZCivguJvguLDguIHguLHguIcKK+C4m+C4sOC4geC4suC4m+C4sOC4geC4seC4hwor4Lib4Liw4LiB4Liy4Lij4Lix4LiHCivguJvguLDguIHguLMKK+C4m+C4sOC4guC4suC4pwor4Lib4Liw4LiH4Lix4Lia4Lib4Liw4LiH4LmI4Lit4LiZCivguJvguLDguJXguLLguJnguLUKK+C4m+C4sOC4leC4suC4m+C4sgor4Lib4Liw4LiV4Liy4Lij4Liw4LiB4Liy4Lir4Lil4LiyCivguJvguLDguJXguLTguJTguJvguLDguJXguYjguK0KK+C4m+C4sOC4leC4tOC4ouC4suC4mQor4Lib4Liw4LmA4LiV4LiwCivguJvguLDguJfguLAKK+C4m+C4sOC4l+C4sOC4m+C4sOC4l+C4seC4hwor4Lib4Liw4LiX4Li4CivguJvguLDguJfguLjguJkKK+C4m+C4sOC4muC4uOC4gQor4Lib4Liw4Lib4LiZCivguJvguLDguKHguIcKK+C4m+C4sOC4o+C4suC4peC4tQor4Lib4Liw4Lij4LizCivguJvguLDguKXguK3guKEKK+C4m+C4sOC5gOC4peC4hwor4Lib4Liw4LmB4Lil4LmI4LihCivguJvguLDguYHguKXguYjguKHguYYKK+C4m+C4sOC5guC4peC4hwor4Lib4Liw4Lin4Liw4Lir4Lil4LizCivguJvguLDguKfguLDguKvguKXguLTguYjguKEKK+C4m+C4sOC5gOC4quC4q+C4o+C4seC4meC4reC4suC4geC4hwor4Lib4Liw4Lir4LiH4Lix4LiaCivguJvguLDguKvguIfguLHguJrguYYKK+C4m+C4sOC4q+C4meC4seC4mQor4Lib4Liw4Lir4Lih4Lix4LiZ4Lit4Liy4Lir4Lii4Li1CivguJvguLDguKvguKXguLTguYjguKEKK+C4m+C4sOC4q+C4seC4hwor4Lib4Liw4LmA4Lir4Lil4Liy4LiwCivguJvguLDguYDguKvguKXguLLguLDguJvguLDguYHguKvguKXguLAKK+C4m+C4seC4gQor4Lib4Lix4LiB4LiC4LmMCivguJvguLHguIHguYDguJvguYnguLIKK+C4m+C4seC4geC4qeC5jAor4Lib4Lix4LiB4Lip4LiyCivguJvguLHguIHguKnguLLguKrguKfguKPguKPguITguYwKK+C4m+C4seC4geC4qeC4tOC4mQor4Lib4Lix4LiB4Lip4Li04Lia4LiU4Li1CivguJvguLHguIHguKnguLTguKHguLLguKPguIQKK+C4m+C4seC4geC4qeC4tOC4o+C4suC4igor4Lib4Lix4LiB4Lip4Li04Liq4Li04LiH4Lir4LmMCivguJvguLHguIHguKnguLUKK+C4m+C4seC4hOC4q+C4sAor4Lib4Lix4LiHCivguJvguLHguYjguIcKK+C4m+C4seC4h+C4quC4uOC5jAor4Lib4Lix4LiH4Liq4Li44LiB4Li44LilCivguJvguLHguIjguIjguLHguJXguJXguLAKK+C4m+C4seC4iOC4iOC4seC4ogor4Lib4Lix4LiI4LiI4Liy4Lih4Li04LiV4LijCivguJvguLHguIjguIjguLjguITguKHguJnguYwKK+C4m+C4seC4iOC4iOC4uOC4l+C4mOC4o+C4k+C5jAor4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZCivguJvguLHguIjguIjguLnguKoKK+C4m+C4seC4iOC4iOC4ueC4q+C4sAor4Lib4Lix4LiI4LmA4LiI4LiBCivguJvguLHguIjguYDguIjguIHguIrguJkKK+C4m+C4seC4iOC5gOC4iOC4geC4muC4uOC4hOC4hOC4pQor4Lib4Lix4LiI4LmA4LiI4LiB4Lie4Li44LiX4LiY4LiwCivguJvguLHguIjguYDguIjguIHguYLguJ7guJjguLQKK+C4m+C4seC4iOC5gOC4iOC4geC4quC4oeC4suC4l+C4suC4mQor4Lib4Lix4LiI4LmC4LiI4Lib4LiB4Liy4Lij4LiB4Li04LiICivguJvguLHguIjguInguLIKK+C4m+C4seC4iOC4ieC4tOC4oQor4Lib4Lix4LiI4LiW4Lij4LiT4LmMCivguJvguLHguIjguJnguLbguIEKK+C4m+C4seC4iOC4ouC4suC4geC4suC4owor4Lib4Lix4LiI4LmA4Lin4LiB4LiC4LiT4LmMCivguJvguLHguIrguIrguKMKK+C4m+C4seC4iuC4iuC4uOC4mQor4Lib4Lix4LiN4LiI4LiBCivguJvguLHguI3guIjguKEKK+C4m+C4seC4jeC4iOC4p+C4teC4quC4leC4tAor4Lib4Lix4LiN4LiN4Lix4LiV4Li0CivguJvguLHguI3guI3guLIKK+C4m+C4seC4jeC4q+C4sgor4Lib4Lix4LiPCivguJvguLHguI/guJnguLAKK+C4m+C4seC4kOC4ouC4suC4p+C4seC4lQor4Lib4Lix4LiT4LiR4Lij4Lir4Lix4LiV4LiW4Li1CivguJvguLHguJPguJHguLjguJvguKXguLLguKoKK+C4m+C4seC4k+C4k+C4sAor4Lib4Lix4LiT4LiT4Lix4LiV4LiV4Li04LiB4Lin4Lix4LiK4LiK4LiwCivguJvguLHguJPguJPguLLguKoKK+C4m+C4seC4k+C4k+C4suC4quC4geC5jAor4Lib4Lix4LiT4Lij4Liq4LihCivguJvguLHguJPguKPguKrguLUKK+C4m+C4seC4k+C4q+C4tAor4Lib4Lix4LiUCivguJvguLHguJTguYYKK+C4m+C4seC4lOC5hOC4luC4oQor4Lib4Lix4LiV4LiE4Liy4LiUCivguJvguLHguJXguIjguLHguJXguJbguKPguJPguYwKK+C4m+C4seC4leC4iOC4seC4meC4leC5jAor4Lib4Lix4LiV4LiV4LiwCivguJvguLHguJXguJXguLDguYDguKXguLXguYjguKLguJkKK+C4m+C4seC4leC4leC4suC4meC4teC4geC4sAor4Lib4Lix4LiV4LiV4Liy4LiZ4Li24LiBCivguJvguLHguJXguJXguLLguKHguLjguYLguKHguJfguJnguLIKK+C4m+C4seC4leC4leC4suC5gOC4p+C4teC4ogor4Lib4Lix4LiV4LiV4Li0CivguJvguLHguJXguJXguLTguIEKK+C4m+C4seC4leC4luC4owor4Lib4Lix4LiV4LiW4LiwCivguJvguLHguJXguJnguLQKK+C4m+C4seC4leC4meC4tQor4Lib4Lix4LiV4Lii4Lix4LiiCivguJvguLHguJXguKvguKXguYjguLIKK+C4m+C4seC4luC4nuC4tQor4Lib4Lix4LiW4Lin4Li1CivguJvguLHguJkKK+C4m+C4seC5iOC4mQor4Lib4Lix4LmJ4LiZCivguJvguLHguYnguJnguIjguLHguYjguJkKK+C4m+C4seC4meC4iOC4uOC5gOC4q+C4o+C5h+C4iAor4Lib4Lix4LiZ4Lil4LihCivguJvguLHguYnguJnguKvguKLguLIKK+C4m+C4seC5ieC4meC5gOC4q+C4meC5iOC4hwor4Lib4Lix4LiaCivguJvguLHguYrguJoKK+C4m+C4seC4m+C4nOC4suC4quC4sAor4Lib4Lix4Lie4Lie4Liy4LiK4LiZ4LiwCivguJvguLHguJ7guJ7guLLguIrguJnguLXguKLguIHguKPguKPguKEKK+C4m+C4seC4nuC4oOC4suC4o+C4sAor4Lib4Lix4LmK4LihCivguJvguLHguYrguKHguYHguIHguYfguKoKK+C4m+C4seC5iuC4oeC4meC5ieC4s+C4oeC4seC4mQor4Lib4Lix4Lii4LiB4LiwCivguJvguLHguKLguIHguLIKK+C4m+C4seC4ouC4ouC4tOC4geC4sgor4Lib4Lix4LmI4LinCivguJvguLHguKfguYDguJvguLXguKIKK+C4m+C4seC5ieC4p+C5gOC4m+C4teC5ieC4ogor4Lib4Lix4Lio4LiI4Li04LihCivguJvguLHguKjguJXguLHguJkKK+C4m+C4seC4qOC4leC4uQor4Lib4Lix4Liq4Liq4Lix4LiX4LiY4Li0CivguJvguLHguKrguKrguLLguKfguLAKK+C4m+C4seC4quC4quC4suC4quC4sAor4Lib4LiyCivguJvguYjguLIKK+C4m+C5ieC4sgor4Lib4LmL4LiyCivguJvguLLguIEKK+C4m+C4suC4hwor4Lib4LmI4Liy4LiHCivguJvguYnguLLguIcKK+C4m+C5ieC4suC4h+C4m+C5iOC4sgor4Lib4Liy4LiI4LiZ4LiwCivguJvguLLguIjguKPguLXguKLguYwKK+C4m+C4suC4iOC4suC4o+C4ouC5jAor4Lib4Liy4LiI4Li04LiV4LiV4Li14Lii4LmMCivguJvguLLguIjguLXguJkKK+C4m+C4suC4j+C4peC4tAor4Lib4Liy4LiP4Li04Lia4LiXCivguJvguLLguI/guLTguJrguLjguITguITguKXguLTguIEKK+C4m+C4suC4j+C4tOC5guC4oOC4hAor4Lib4Liy4LiP4Li04Lir4Liy4Lij4Li04Lii4LmMCivguJvguLLguJDguLAKK+C4m+C4suC4k+C4sAor4Lib4Liy4LiT4Li0CivguJvguLLguJPguLUKK+C4m+C4suC4lAor4Lib4Liy4LiU4Lir4Liy4LinCivguJvguLLguJXguLTguYLguKHguIHguILguYwKK+C4m+C4suC4leC4tQor4Lib4Liy4LmA4LiV4LmK4LiwCivguJvguLLguJcKK+C4m+C4suC4l+C4mwor4Lib4Liy4LiX4LmI4Lit4LiH4LmC4LiB4LmLCivguJvguLLguJfguLHguIfguIHguLIKK+C4m+C4suC4l+C4suC4mQor4Lib4Liy4LiX4Li44LiB4LiyCivguJvguLLguJkKK+C4m+C5iOC4suC4mQor4Lib4LmJ4Liy4LiZCivguJvguLLguJnguJTguIcKK+C4m+C5ieC4suC4meC4peC4oQor4Lib4Liy4LiZ4LiwCivguJvguLLguJnguLTguYDguKLguJkKK+C4m+C4suC4meC4teC4ouC4sAor4Lib4LmJ4Liy4LiaCivguJvguYrguLLguJoKK+C4m+C4suC4m+C4reC4q+C4ouC4teC4quC4seC4h+C4huC4suC4leC4sgor4Lib4Liy4Lie4LiI4LiZ4LmMCivguJvguLLguKEKK+C4m+C4suC5guC4oeC4geC4guC5jAor4Lib4LmI4Liy4LiiCivguJvguYnguLLguKIKK+C4m+C4suC4ouC4suC4qgor4Lib4Liy4Lij4LmM4LiBCivguJvguLLguKPguYzguYDguIHguJXguYwKK+C4m+C4suC4o+C5jOC4leC4tQor4Lib4Liy4Lij4Lih4Li1CivguJvguLLguKPguKnguJPguLUKK+C4m+C4suC4o+C4suC4iuC4tOC4gQor4Lib4Liy4Lij4Li04LiJ4Lix4LiV4LijCivguJvguLLguKPguLTguIrguLLguJUKK+C4m+C4suC4o+C4tOC4quC4uOC4l+C4mOC4tOC4qOC4teC4pQor4Lib4Liy4Lij4Li44Lib4LiZ4LiwCivguJvguLLguKUKK+C4m+C4suC4peC5jOC4oQor4Lib4Liy4Lil4Li04LmE4Lil4Lii4LiB4LmMCivguJvguLLguKXguLUKK+C4m+C5iOC4suC4pwor4Lib4LmK4Liy4LinCivguJvguLLguKfguYYKK+C4m+C4suC4p+C4gQor4Lib4Liy4Lin4LiI4LiZ4LiwCivguJvguLLguKfguLLguKMKK+C4m+C4suC4qeC4suC4kwor4Lib4Liy4LiqCivguJvguLLguKrguLLguJMKK+C4m+C4suC4quC4suC4l+C4tOC4geC4sAor4Lib4Liy4Lir4LiZ4Lix4LiZCivguJvguLLguKvguLXguYgKK+C4m+C4suC4q+C4uOC4kwor4Lib4LizCivguJvguYnguLMKK+C4m+C5ieC4s+C5huC5gOC4m+C5i+C4reC5hgor4Lib4LmJ4Liz4LmA4Lib4LmJ4LitCivguJvguYnguLPguYDguJvguYvguK0KK+C4m+C4tOC4geC4meC4tOC4gQor4Lib4Li04LiB4Lit4Lix4LieCivguJvguLTguIfguITguKUKK+C4m+C4tOC4h+C4hOC4peC4sAor4Lib4Li04LiH4Lib4Lit4LiHCivguJvguLTguI7guIEKK+C4m+C4tOC4j+C4kOC4sAor4Lib4Li04LiQ4Li0CivguJvguLTguJPguJHguLAKK+C4m+C4tOC4lAor4Lib4Li04LiU4LmA4LiV4LmK4Liy4LiwCivguJvguLTguJXguJXguLAKK+C4m+C4tOC4leC4sgor4Lib4Li04LiV4Li4CivguJvguLTguJXguLjguIjguInguLIKK+C4m+C4tOC4leC4uOC4pQor4Lib4Li04LiV4Li44Lil4LiyCivguJvguLTguJXguLjguKXguLLguJnguLUKK+C4m+C4tOC5guC4leC4o+C5gOC4peC4teC4ouC4oQor4Lib4Li04LmI4LiZCivguJvguLTguYrguJkKK+C4m+C4tOC5iuC4meC5hgor4Lib4Li04LmI4LiZ4LiV4LitCivguJvguLTguYjguJnguYLguJUKK+C4m+C4tOC4m+C4nOC4peC4tQor4Lib4Li04LmI4LihCivguJvguLTguYnguKEKK+C4m+C4tOC4ouC4seC4h+C4hOC4uAor4Lib4Li04Lij4Lix4LiZ4Liu4LiyCivguJvguLTguKXguLHguJnguJjguJnguYwKK+C4m+C4tOC5i+C4pwor4Lib4Li04Lio4Liy4LiICivguJvguLTguKrguLHguIcKK+C4m+C4tOC5hOC4qgor4Lib4Li04Lir4LiBCivguJvguLTguKvguKXguLHguYjguJkKK+C4m+C4tQor4Lib4Li14LmICivguJvguLXguYkKK+C4m+C4teC5iwor4Lib4Li14LiBCivguJvguLXguI7guIHguIbguKMKK+C4m+C4teC4kOC4geC4sAor4Lib4Li14LiQ4LiwCivguJvguLXguYrguJQKK+C4m+C4teC4leC4geC4quC4tOC4kwor4Lib4Li14LiV4Li0CivguJvguLXguJkKK+C4m+C4teC4mgor4Lib4Li14LmK4LiaCivguJvguLXguYLguJvguYoKK+C4m+C4teC4qOC4suC4iAor4Lib4Li14LisCivguJvguLXguKzguIEKK+C4m+C4teC4rOC4sgor4Lib4Li24LiBCivguJvguLbguIcKK+C4m+C4tuC5iOC4hwor4Lib4Li24LmK4LiHCivguJvguLbguYvguIcKK+C4m+C4tuC5ieC4lAor4Lib4Li24LmJ4LiZCivguJvguLbguKHguJvguLfguYnguK0KK+C4m+C4t+C4lOC4m+C4tuC4hwor4Lib4Li34LiZCivguJvguLfguK0KK+C4m+C4t+C5ieC4rQor4Lib4Li34LmL4LitCivguJvguLgKK+C4m+C4uOC5igor4Lib4Li44LiBCivguJvguLjguIHguJvguLjguKIKK+C4m+C4uOC5iuC4geC4peC4uOC4gQor4Lib4Li44LiE4Lil4LiwCivguJvguLjguYnguIfguIHguLXguYsKK+C4m+C4uOC4h+C4hOC4ngor4Lib4Li44LiH4LiE4Lin4LiwCivguJvguLjguIfguKXguLTguIfguITguYwKK+C4m+C4uOC4h+C4peC4tuC4h+C4hOC5jAor4Lib4Li44LiI4LiJ4LiyCivguJvguLjguI8KK+C4m+C4uOC4k+C4keC4o+C4tOC4gQor4Lib4Li44LiUCivguJvguLjguJXguJXguLAKK+C4m+C4uOC4leC4l+C4suC4o+C4l+C4suC4mQor4Lib4Li44LiW4Li44LiK4LiZCivguJvguLjguJnguYDguJfguYjguLLguIHguYvguIcKK+C4m+C4uOC4meC4meC4suC4hAor4Lib4Li44LiZ4Lig4LieCivguJvguLjguJnguLHguJrguJvguLjguJnguLHguIcKK+C4m+C4uOC4meC4seC4nuC4quC4uAor4Lib4Li44LiaCivguJvguLjguYrguJoKK+C4m+C4uOC4muC4m+C4seC4mgor4Lib4Li44LmK4Lia4Lib4Lix4LmK4LiaCivguJvguLjguJvguJzguLAKK+C4m+C4uOC4m+C4sAor4Lib4Li44Lie4Lie4LiwCivguJvguLjguYjguKEKK+C4m+C4uOC5ieC4oQor4Lib4Li44LmL4LihCivguJvguLjguYjguKHguJvguKXguLIKK+C4m+C4uOC5ieC4oeC5gOC4m+C5ieC4hwor4Lib4Li44LmI4Lih4LmA4Lib4Li34Lit4LiBCivguJvguLjguYnguKHguYDguJvguLfguK3guIEKK+C4m+C4uOC4oeC4sgor4Lib4Li44LiiCivguJvguLjguYnguKIKK+C4m+C4uOC5i+C4ogor4Lib4Li44LijCivguJvguLjguKPguJPguLAKK+C4m+C4uOC4o+C4seC4leC4luC4tOC4oeC4l+C4tOC4qAor4Lib4Li44Lij4Liy4LiTCivguJvguLjguKPguLLguJPguLAKK+C4m+C4uOC4o+C4tOC4oeC4l+C4tOC4qAor4Lib4Li44Lij4Li04Lih4Lie4Lij4Lij4Lip4LiyCivguJvguLjguKPguLTguKrguKDguLLguKfguLAKK+C4m+C4uOC4o+C4tOC5guC4quC4lOC4oQor4Lib4Li44LmA4Lij4LiI4Liy4Lij4Li04LiBCivguJvguLjguYLguKPguKvguLTguJUKK+C4m+C4uOC4peC4peC4tOC4h+C4hOC5jAor4Lib4Li44Lil4Lil4Li24LiH4LiE4LmMCivguJvguLjguKXguLTguJnguJfguYwKK+C4m+C4uOC4peC4uQor4Lib4Li44LmA4Lil4LiHCivguJvguLjguYDguKXguIfguYYKK+C4m+C4uOC5guC4peC4m+C4uOC5gOC4pQor4Lib4Li44LmB4Lir4Lil4LiwCivguJvguLjguKzguKfguLAKK+C4m+C4uQor4Lib4Li54LmICivguJvguLnguIrguIHguLAKK+C4m+C4ueC4iuC4meC4teC4ouC4sAor4Lib4Li54LiK4LiyCivguJvguLnguIrguLTguJUKK+C4m+C4ueC4lAor4Lib4Li54LiU4LiB4LiB4Liq4LmJ4Lih4Lih4LitCivguJvguLnguJXguLQKK+C4m+C4ueC4mQor4Lib4Li54LihCivguJvguLnguYnguKLguKLguLXguYnguJvguLnguYnguKLguLMKK+C4m+C4ueC5iOC4ouC5iOC4sgor4Lib4Li54Lij4LiwCivguJvguLnguKXguLkKK+C4m+C4ueC4p+C4sgor4LmA4Lib4LmJCivguYDguJvguYsKK+C5gOC4m+C4gQor4LmA4Lib4LmK4LiBCivguYDguJvguIHguILguYwKK+C5gOC4m+C5iOC4hwor4LmA4Lib4LmJ4LiHCivguYDguJvguYrguIcKK+C5gOC4m+C5i+C4hwor4LmA4Lib4LmH4LiUCivguYDguJvguYfguJTguYTguIvguYnguYTguIHguYjguJXguK3guJTguKrguKXguLHguIHguKPguK3guJTguKvguKHguLnguKrguLUKK+C5gOC4m+C5h+C4mQor4LmA4Lib4LmH4LiZ4LiV4LmJ4LiZCivguYDguJvguKLguKLguLLguKUKK+C5gOC4m+C4owor4LmA4Lib4Lij4LmH4LiHCivguYDguJvguKPguJUKK+C5gOC4m+C4o+C4oQor4LmA4Lib4Lij4LiiCivguYDguJvguKPguKLguYYKK+C5gOC4m+C4o+C4rQor4LmA4Lib4Lij4Lit4LiwCivguYDguJvguKPguLIKK+C5gOC4m+C4o+C4suC4sAor4LmA4Lib4Lij4Liy4Liw4LmB4Lib4Lij4LiwCivguYDguJvguKPguLXguKLguIcKK+C5gOC4m+C4o+C4teC5ieC4ouC4hwor4LmA4Lib4Lij4Li14Lii4LiNCivguYDguJvguKPguLXguKLguJoKK+C5gOC4m+C4o+C4teC5iOC4ouC4oQor4LmA4Lib4Lij4Li14Lii4LinCivguYDguJvguKPguLXguYnguKLguKcKK+C5gOC4m+C4o+C4teC5ieC4ouC4p+C4q+C4p+C4suC4mQor4LmA4Lib4Lij4Li14Lii4LiwCivguYDguJvguKPguLXguYrguKLguLAKK+C5gOC4m+C4o+C4t+C5iOC4reC4hwor4LmA4Lib4Lij4Li34LmJ4Lit4LiiCivguYDguJvguKUKK+C5gOC4m+C4peC5iOC4hwor4LmA4Lib4Lil4LinCivguYDguJvguKXguLIKK+C5gOC4m+C4peC5iOC4sgor4LmA4Lib4Lil4LmJ4LiyCivguYDguJvguKXguLLguLAKK+C5gOC4m+C4peC4teC5ieC4ogor4LmA4Lib4Lil4Li14LmI4Lii4LiZCivguYDguJvguKXguLXguYjguKLguKEKK+C5gOC4m+C4peC4teC5iOC4ouC4pwor4LmA4Lib4Lil4Li14LmI4Lii4Lin4LiU4LizCivguYDguJvguKXguLfguK3guIEKK+C5gOC4m+C4peC4t+C4reC4geC4geC4o+C4sOC5gOC4l+C4teC4ouC4oQor4LmA4Lib4Lil4Li34Lit4LiHCivguYDguJvguKXguLfguYnguK3guIcKK+C5gOC4m+C4peC4t+C4reC4ogor4LmA4Lib4LioCivguYDguJvguKjguKUKK+C5gOC4m+C4qOC4seC4qgor4LmA4Lib4Liq4LiB4Liy4LijCivguYDguJvguKrguKUKK+C5gOC4m+C4quC4uOC4jQor4LmA4Lib4Liq4Li44LmE4LiT4LiiCivguYDguJvguYvguK0KK+C5gOC4m+C5ieC4reC5gOC4ouC5ieC4rQor4LmA4Lib4Lit4Lij4LmM4LmA4LiL4LmH4LiZ4LiV4LmMCivguYDguJvguYvguK3guYDguKvguKXguK0KK+C5gOC4m+C4sAor4LmA4Lib4Liw4Lib4LiwCivguYDguJvguLIKK+C5gOC4m+C5iOC4sgor4LmA4Lib4LmJ4LiyCivguYDguJvguYrguLIKK+C5gOC4m+C5i+C4sgor4LmA4Lib4LmL4Liy4Liu4Li34LmJ4LitCivguYDguJvguLLguLAKK+C5gOC4m+C4suC4sOC5gOC4m+C4teC5iuC4ouC4sAor4LmA4Lib4Liy4Liw4LmB4Lib4LiwCivguYDguJvguLLguLDguYDguKvguKXguLLguLAKK+C5gOC4m+C4tOC4gQor4LmA4Lib4Li04LiHCivguYDguJvguLTguIfguYYKK+C5gOC4m+C4tOC4h+C4oeC4suC4hwor4LmA4Lib4Li04LiUCivguYDguJvguLTguYjguJkKK+C5gOC4m+C4tOC4mgor4LmA4Lib4Li04LmK4LiaCivguYDguJvguLTguJrguILguYnguLLguKcKK+C5gOC4m+C4teC4ogor4LmA4Lib4Li14Lii4LiBCivguYDguJvguLXguYrguKLguIEKK+C5gOC4m+C4teC4ouC5geC4iuC4o+C5jAor4LmA4Lib4Li14LmK4Lii4LiaCivguYDguJvguLXguYjguKLguKEKK+C5gOC4m+C4teC4ouC4pwor4LmA4Lib4Li14LmJ4Lii4LinCivguYDguJvguLXguKLguKvguKfguKIKK+C5gOC4m+C4teC4ouC4sAor4LmA4Lib4Li34Lit4LiBCivguYDguJvguLfguYnguK3guJkKK+C5geC4mwor4LmB4Lib4LmJ4LiHCivguYHguJvguYvguIcKK+C5geC4m+C5ieC4h+C5geC4iuC5iAor4LmB4Lib4LiUCivguYHguJvguYrguJQKK+C5geC4m+C4l+C4uQor4LmB4Lib4LmJ4LiZCivguYHguJvguJoKK+C5geC4m+C5iuC4mgor4LmB4Lib4LihCivguYHguJvguKMKK+C5geC4m+C4o+C5iwor4LmB4Lib4Lij4LiBCivguYHguJvguKPguIcKK+C5geC4m+C4o+C5iOC4hwor4LmB4Lib4Lij4LiH4Lil4LmJ4Liy4LiH4LiC4Lin4LiUCivguYHguJvguKPguIfguKvguLnguKvguJnguLkKK+C5geC4m+C4o+C5iuC4lAor4LmB4Lib4Lij4LmJ4LiZCivguYHguJvguKPguYvguJkKK+C5geC4m+C4o+C5i+C5geC4m+C4o+C5ieC4mQor4LmB4Lib4Lij4LiwCivguYHguJvguKUKK+C5geC4m+C4peC5iQor4LmB4Lib4Lil4LiBCivguYHguJvguKXguIcKK+C5geC4m+C4peC4mQor4LmB4Lib4Lil4LiaCivguYHguJvguYnguKcKK+C5geC4m+C5iuC4pwor4LmB4Lib4LmL4LinCivguYHguJvguLAKK+C5geC4m+C5iuC4sAor4LmB4Lib4LmK4Liw4LiL4LiwCivguYLguJsKK+C5guC4m+C5iAor4LmC4Lib4LmJCivguYLguJvguYoKK+C5guC4m+C4gQor4LmC4Lib4LmK4LiBCivguYLguJvguYrguIHguYDguIHguK3guKPguYwKK+C5guC4m+C4geC4guC4o+C4k+C4tQor4LmC4Lib4LmA4LiBCivguYLguJvguIcKK+C5guC4m+C5iOC4hwor4LmC4Lib4LmJ4LiHCivguYLguJvguYjguIfguILguYjguLLguKEKK+C5guC4m+C4h+C4peC4suC4hwor4LmC4Lib4LmI4LiH4Lin4Li04LiUCivguYLguJvguYnguIfguYLguKvguKLguIcKK+C5guC4m+C4kOC4m+C4l+C4sgor4LmC4Lib4LiU4LiBCivguYLguJvguJXguJbguIHguLAKK+C5guC4m+C4mQor4LmC4Lib4LibCivguYLguJvguYrguKLguIHguLHguYnguIEKK+C5guC4m+C5iuC4ouC5gOC4i+C4teC4ouC4mQor4LmC4Lib4Lij4LiHCivguYLguJvguKPguYjguIcKK+C5guC4m+C4o+C4lAor4LmC4Lib4Lij4LiV4Lit4LiZCivguYLguJvguKPguJXguLXguJkKK+C5guC4m+C4o+C5gOC4leC4quC5geC4leC4meC4leC5jAor4LmC4Lib4Lij4LmB4LiX4Lij4LiB4LmA4LiV4Lit4Lij4LmMCivguYLguJvguKPguKIKK+C5guC4m+C4o+C4teC4quC4oOC4sgor4LmC4Lib4Lil4LmI4LiHCivguYLguJvguKXguLTguYLguK0KK+C5guC4m+C5guC4pQor4LmC4Lib4LiqCivguYLguJvguKrguIEKK+C5guC4m+C4quC4geC4suC4o+C5jOC4lAor4LmC4Lib4Liq4LmA4LiV4Lit4Lij4LmMCivguYLguJvguKrguLLguKfguJnguLTguIHguKHguLnguKUKK+C5guC4m+C4sAor4LmC4Lib4LmK4LiwCivguYLguJvguYrguLDguIjguYnguLLguKIKK+C5hOC4mwor4LmE4Lib4LmICivguYTguJvguYsKK+C5hOC4m+C5i+C5gOC4m+C5iwor4LmE4Lib4Lii4Liy4LilCivguYTguJvguKPguKnguJPguLXguKLguYwKK+C5hOC4m+C4peC5iAor4LmE4Lib4Lio4Liy4LiICivguYTguJvguKjguLLguIjguLUKK+C4nAor4Lic4LiBCivguJzguIHguYDguKPguLfguK3guIEKK+C4nOC4geC4sgor4Lic4LiB4Liy4LiiCivguJzguITguKEKK+C4nOC4hwor4Lic4LiH4LiBCivguJzguIfguKEKK+C4nOC4h+C4owor4Lic4LiH4Lit4LiZCivguJzguIfguK3guJoKK+C4nOC4h+C4sAor4Lic4LiH4Liy4LiUCivguJzguIfguYjguLLguJkKK+C4nOC4iOC4hwor4Lic4LiI4LiNCivguJzguIjguLHguI0KK+C4nOC4iOC4suC4mQor4Lic4LiK4Li44LihCivguJzguI3guLIKK+C4nOC4k+C4sAor4Lic4LiT4Li04LiZCivguJzguJQKK+C4nOC4lOC4uOC4hwor4Lic4LmA4LiU4Li04LiZCivguJzguJfguKEKK+C4nOC4meC4p+C4gQor4Lic4LiZ4Lin4LiKCivguJzguJnguLHguIcKK+C4nOC4meC4tOC4lAor4Lic4LiZ4Li24LiBCivguJzguKEKK+C4nOC4oeC4meC4suC4hwor4Lic4Lii4Lit4LiHCivguJzguKLguYjguLPguYDguJzguKLguK0KK+C4nOC4o+C4quC4uAor4Lic4Lij4Li04LiVCivguJzguKPguLjguJ7guIEKK+C4nOC4pQor4Lic4Lil4LiBCivguJzguKXguITguLjguJkKK+C4nOC4peC4hOC4uOC4meC4tQor4Lic4Lil4LiHCivguJzguKXguK0KK+C4nOC4peC5h+C4reC4hwor4Lic4Lil4LmH4Lit4LiiCivguJzguKXguLAKK+C4nOC4peC4seC4gQor4Lic4Lil4Lix4LiUCivguJzguKXguLHguJoKK+C4nOC4peC4seC4p+C4sAor4Lic4Lil4LiyCivguJzguKXguLLguI0KK+C4nOC4peC4tAor4Lic4Lil4Li04LiB4LiwCivguJzguKXguLTguJUKK+C4nOC4peC4tOC4mQor4Lic4Lil4Li1CivguJzguKXguLXguJzguKXguLLguKEKK+C4nOC4peC4tuC4gQor4Lic4Lil4Li24LmI4LiHCivguJzguKXguLfguK0KK+C4nOC4peC4uAor4Lic4Lil4Li44LiHCivguJzguKXguLjguJQKK+C4nOC4peC4uOC4mQor4Lic4Lil4Li44LiaCivguJzguKXguLjguKIKK+C4nOC4peC4uQor4Lic4Lin4LiyCivguJzguKrguKEKK+C4nOC4quC4oeC5gOC4quC4o+C5h+C4iAor4Lic4Liq4Liy4LiZCivguJzguKrguLLguKIKK+C4nOC4quC4suC4owor4Lic4Lit4LiBCivguJzguK3guIcKK+C4nOC5iOC4reC4hwor4Lic4LmI4Lit4LiZCivguJzguK3guJoKK+C4nOC4reC4oQor4Lic4LmH4Lit4LiiCivguJzguYjguK3guKIKK+C4nOC4reC4p+C4lAor4Lic4Lit4Li54LiZCivguJzguLAKK+C4nOC4sOC5geC4hOC4hwor4Lic4Liw4LiU4LiyCivguJzguLDguKrguLIKK+C4nOC4sOC4q+C4oeC4tQor4Lic4Liw4Lit4Lit4LiaCivguJzguLDguK3guLfguJTguJzguLDguK3guKEKK+C4nOC4seC4gQor4Lic4Lix4LiB4LmE4LiBCivguJzguLHguIHguILguKfguIcKK+C4nOC4seC4geC4guC4teC5ieC4guC4p+C4hwor4Lic4Lix4LiB4LmC4LiJ4LihCivguJzguLHguIHguIrguLUKK+C4nOC4seC4geC4leC4muC4iuC4p+C4sgor4Lic4Lix4LiB4LiX4Lit4LiU4Lii4Lit4LiUCivguJzguLHguIHguJrguLjguYnguIcKK+C4nOC4seC4geC4muC4uOC5ieC4h+C4guC4seC4mQor4Lic4Lix4LiB4Lia4Li44LmJ4LiH4LiI4Li14LiZCivguJzguLHguIHguJrguLjguYnguIfguJfguLDguYDguKUKK+C4nOC4seC4geC4muC4uOC5ieC4h+C4neC4o+C4seC5iOC4hwor4Lic4Lix4LiB4Lia4Li44LmJ4LiH4Lij4LmJ4Lin4LihCivguJzguLHguIHguJrguLjguYnguIfguKPguLHguYnguKcKK+C4nOC4seC4geC5gOC4muC4teC5ieC4ogor4Lic4Lix4LiB4LmA4Lia4Li14LmJ4Lii4LmD4Lir4LiN4LmICivguJzguLHguIHguJvguKXguLHguIcKK+C4nOC4seC4geC4m+C4uOC5iOC4oeC4m+C4peC4sgor4Lic4Lix4LiB4LmA4Lic4LmH4LiUCivguJzguLHguIHguYTguJzguYgKK+C4nOC4seC4geC4o+C4ueC5ieC4meC4reC4mQor4Lic4Lix4LiB4LmB4Lin4LmI4LiZCivguJzguLHguIHguKrguLLguJoKK+C4nOC4seC4geC4quC4suC4oeC4q+C4suC4pwor4Lic4Lix4LiB4LmA4Liq4Li14LmJ4Lii4LiZCivguJzguLHguIHguKvguJnguK3guIEKK+C4nOC4seC4geC4q+C4meC4reC4hwor4Lic4Lix4LiB4Lir4LiZ4Liy4LihCivguJzguLHguIHguKvguKfguLLguJkKK+C4nOC4seC4geC5hOC4q+C4oQor4Lic4Lix4LiB4Lit4Li14LmB4Lib4LiwCivguJzguLHguITguITguLjguJMKK+C4nOC4seC4hOC4hOC4uOC4k+C4tQor4Lic4Lix4LiHCivguJzguLHguJQKK+C4nOC4seC4mQor4Lic4Lix4LiaCivguJzguLHguKXguITguLjguJnguLUKK+C4nOC4seC4pwor4Lic4Lix4Lin4LiwCivguJzguLHguKrguKrguLAKK+C4nOC4sgor4Lic4LmI4LiyCivguJzguYnguLIKK+C4nOC4suC4gQor4Lic4Liy4LiHCivguJzguYjguLLguIcKK+C4nOC4suC4k+C4tOC4lQor4Lic4Liy4LiUCivguJzguLLguJXguLQKK+C4nOC5iOC4suC4mQor4Lic4Liy4LihCivguJzguLLguKIKK+C4nOC5iOC4suC4ogor4Lic4LmJ4Liy4LiiCivguJzguLLguKUKK+C4nOC4suC4peC4hOC4uOC4mQor4Lic4Liy4Lil4LiyCivguJzguYjguLLguKcKK+C4nOC4suC4quC4uOC4gQor4Lic4LmJ4Liy4Liu4Liy4LiUCivguJzguLMKK+C4nOC5ieC4s+C5hgor4Lic4Li0CivguJzguLTguIcKK+C4nOC4tOC4lAor4Lic4Li04LiU4LiBCivguJzguLTguJUKK+C4nOC4tOC4mQor4Lic4Li04LinCivguJzguLUKK+C4nOC4teC4leC4reC4h+C5gOC4q+C4peC4t+C4reC4hwor4Lic4Li14LmJ4Lin4LmMCivguJzguLbguIcKK+C4nOC4tuC5iOC4hwor4Lic4Li24LmJ4LiHCivguJzguLfguYjguJkKK+C4nOC4uAor4Lic4Li44LiUCivguJzguLjguKLguJzguIcKK+C4nOC4uOC4quC4o+C4suC4hOC4sgor4Lic4Li54LmJCivguJzguLnguIEKK+C5gOC4nAor4LmA4Lic4LiHCivguYDguJzguIrguLTguI0KK+C5gOC4nOC5h+C4lAor4LmA4Lic4LiU4LmH4LiICivguYDguJzguJTguLTguKEKK+C5gOC4nOC4lOC4teC4ouC4hwor4LmA4Lic4LmI4LiZCivguYDguJzguJnguLTguIEKK+C5gOC4nOC4ogor4LmA4Lic4Lii4LitCivguYDguJzguKLguLTguJoKK+C5gOC4nOC4pQor4LmA4Lic4Lil4LmICivguYDguJzguKXguYkKK+C5gOC4nOC4peC5h+C4lAor4LmA4Lic4Lil4LitCivguYDguJzguKXguLAKK+C5gOC4nOC4peC4suC4sAor4LmA4Lic4Lil4Liy4Liw4LmB4Lic4Lil4LiwCivguYDguJzguKXguLXguKLguIcKK+C5gOC4nOC4reC5gOC4o+C4rQor4LmA4Lic4Lit4Li04LiNCivguYDguJzguK3guLTguKUKK+C5gOC4nOC4sAor4LmA4Lic4LiyCivguYDguJzguYjguLIKK+C5gOC4nOC5ieC4sgor4LmA4Lic4LmJ4Liy4Lic4LiHCivguYDguJzguLLguLAKK+C5gOC4nOC4tOC5ieC4hwor4LmA4Lic4Li04LiZCivguYDguJzguLTguJnguYYKK+C5gOC4nOC4teC4ouC4mQor4LmA4Lic4Li14Lii4LiwCivguYDguJzguLfguK0KK+C5gOC4nOC4t+C5iOC4rQor4LmA4Lic4Li34Lit4LiBCivguYDguJzguLfguK3guJQKK+C5gOC4nOC4t+C4reC4mQor4LmA4Lic4Li34LmI4Lit4LiZCivguYHguJzguYgKK+C5geC4nOC4gQor4LmB4Lic4LiHCivguYHguJzguJQKK+C5geC4nOC4lOC5gOC4nOC4sgor4LmB4Lic4LiU4LmA4Liq4Li14Lii4LiHCivguYHguJzguJkKK+C5geC4nOC5iOC4mQor4LmB4Lic4LiZ4LiBCivguYHguJzguKUKK+C5geC4nOC4peC4hwor4LmB4Lic4Lil4LmH4LiaCivguYHguJzguKXguYfguJrguYYKK+C5geC4nOC4peC5h+C4pwor4LmB4Lic4Lil4LiwCivguYHguJzguYjguKcKK+C5geC4nOC5ieC4pwor4LmC4LicCivguYLguJzguIcKK+C5guC4nOC4j+C4kOC4seC4nuC4nuC4sAor4LmC4Lic4LiZCivguYLguJzguKIKK+C5guC4nOC4peC5iAor4LmC4Lic4Lil4LiB4LmA4Lic4Lil4LiBCivguYLguJzguKXguLAKK+C5guC4nOC4reC4mQor4LmC4Lic4LiwCivguYTguJwKK+C5hOC4nOC5iAor4LmE4Lic4LiXCivguYTguJzguYjguJzguLHguIcKK+C4nQor4Lid4LiZCivguJ3guKPguLHguYjguIcKK+C4neC4o+C4seC5iOC4h+C5gOC4qOC4qgor4Lid4Lij4Lix4LmI4LiZCivguJ3guYjguK0KK+C4neC4reC4ogor4Lid4Lix4LiBCivguJ3guLHguIHguJ3guYjguLLguKIKK+C4neC4seC4geC5g+C4neC5iAor4Lid4Lix4LiHCivguJ3guLHguYjguIcKK+C4neC4seC4lAor4Lid4Lix4LiZCivguJ3guLIKK+C4neC5iOC4sgor4Lid4LmJ4LiyCivguJ3guLLguIEKK+C4neC4suC4hwor4Lid4Liy4LiUCivguJ3guLLguJkKK+C4neC4suC4ogor4Lid4LmI4Liy4LiiCivguJ3guYnguLLguKIKK+C4neC4tOC5iOC4mQor4Lid4Li1CivguJ3guLXguYgKK+C4neC4teC4gQor4Lid4Li14Lir4Lih4Lit4LiaCivguJ3guLbguIEKK+C4neC4t+C4lAor4Lid4Li34LiZCivguJ3guLjguYjguJkKK+C4neC4ueC4hwor4LmA4Lid4LmJ4LiyCivguYDguJ3guLfguK0KK+C5gOC4neC4t+C4reC4gQor4LmA4Lid4Li34Lit4LiHCivguYDguJ3guLfguYjguK3guJkKK+C5geC4neC4gQor4LmB4Lid4LiHCivguYHguJ3guJQKK+C5g+C4neC5iAor4LmE4LidCivguJ4KK+C4nuC4gQor4Lie4LiB4LiI4LijCivguJ7guIHguJnguLjguYjguJkKK+C4nuC4geC4nuC5iOC4suC4ogor4Lie4LiB4Lil4LihCivguJ7guIHguKvguLTguJkKK+C4nuC4geC4reC4suC4p+C4uOC4mAor4Lie4LiB4LiyCivguJ7guIHguLjguKPguLAKK+C4nuC4geC4uOC4pQor4Lie4LiHCivguJ7guIfguKjguYwKK+C4nuC4iOC4meC5jAor4Lie4LiI4LiZ4LiyCivguJ7guIjguJnguLLguKPguJYKK+C4nuC4iOC4meC4teC4ouC5jAor4Lie4LiI4Lih4Liy4LiZCivguJ7guIjguLUKK+C4nuC4iuC4o+C4sAor4Lie4LiN4LiyCivguJ7guI3guLLguJMKK+C4nuC4jeC4suC5hOC4nwor4Lie4LiN4Liy4Lil4LitCivguJ7guJPguLTguIoKK+C4nuC4k+C4tOC4iuC4ouC5jAor4Lie4LiUCivguJ7guJjguLkKK+C4nuC4mQor4Lie4LmI4LiZCivguJ7guYnguJkKK+C4nuC4meC4oQor4Lie4LiZ4Lit4LiHCivguJ7guJnguK3guKEKK+C4nuC4meC4seC4gQor4Lie4LiZ4Lix4LiB4LiH4Liy4LiZCivguJ7guJnguLHguIcKK+C4nuC4meC4seC4lOC4owor4Lie4LiZ4Lix4LiZCivguJ7guJnguLHguKoKK+C4nuC4meC4sgor4Lie4LiZ4Liy4LiUCivguJ7guJnguLLguJnguJTguKMKK+C4nuC4meC4suC4meC4leC5jAor4Lie4LiZ4Liy4LiiCivguJ7guJnguLTguJTguLIKK+C4nuC4meC4tOC4lQor4Lie4LiZ4Li14Lii4LiBCivguJ7guYDguJnguIEKK+C4nuC5gOC4meC4iOC4owor4Lie4LiaCivguJ7guJrguLkKK+C4nuC4oeC5iOC4sgor4Lie4Lii4LiKCivguJ7guKLguIrguJnguYwKK+C4nuC4ouC4leC4tOC5gOC4o+C4gQor4Lie4Lii4LiZ4LiV4LmMCivguJ7guKLguKgKK+C4nuC4ouC4seC4gQor4Lie4Lii4Lix4LiE4LiG4LmMCivguJ7guKLguLHguIrguJnguYwKK+C4nuC4ouC4seC4jeC4iuC4meC4sAor4Lie4Lii4Lix4LiVCivguJ7guKLguLHguJoKK+C4nuC4ouC4suC4geC4o+C4k+C5jAor4Lie4Lii4Liy4LiG4Lij4LmMCivguJ7guKLguLLguIfguITguYwKK+C4nuC4ouC4suC4mOC4tAor4Lie4Lii4Liy4LiZCivguJ7guKLguLLguJrguLLguJcKK+C4nuC4ouC4suC4muC4suC4pQor4Lie4Lii4Liy4LihCivguJ7guKLguLLguKLguLLguKEKK+C4nuC4ouC4suC4pQor4Lie4Lii4Li4CivguJ7guKLguLjguIcKK+C4nuC4ouC4uOC4q+C4owor4Lie4Lii4Li44Lir4LiwCivguJ7guKLguLnguYjguKvguYwKK+C4nuC5gOC4ouC4teC4ogor4Lie4LijCivguJ7guKPguJUKK+C4nuC4o+C4oQor4Lie4Lij4Lih4LiE4LiUCivguJ7guKPguKHguYHguJTguJkKK+C4nuC4o+C4oeC4oeC4tAor4Lie4Lij4Lij4LiECivguJ7guKPguKPguITguYwKK+C4nuC4o+C4o+C4hOC4suC4meC4leC5jAor4Lie4Lij4Lij4LiTCivguJ7guKPguKPguJPguJnguLIKK+C4nuC4o+C4o+C4k+C4o+C4suC4ogor4Lie4Lij4Lij4LiU4Li24LiBCivguJ7guKPguKPguKXguLLguKIKK+C4nuC4o+C4o+C4qQor4Lie4Lij4Lij4LmA4Lir4LiyCivguJ7guKPguKPguYDguK3guLTguI0KK+C4nuC4o+C4p+C4h+C5gOC4nuC4o+C4teC4ouC4hwor4Lie4Lij4Lin4LiUCivguJ7guKPguKfguJkKK+C4nuC4o+C4q+C4oQor4Lie4Lij4Lit4LiBCivguJ7guKPguYjguK3guIcKK+C4nuC4o+C5ieC4reC4hwor4Lie4Lij4Lit4LiUCivguJ7guKPguYnguK3guKEKK+C4nuC4o+C5iOC4reC4oeC4nuC4o+C5ieC4rQor4Lie4Lij4LmI4Lit4LiiCivguJ7guKPguYnguK3guKIKK+C4nuC4o+C4sAor4Lie4Lij4Liw4LiI4Lix4LiZ4LiX4Lij4LmM4LiE4Lij4Li24LmI4LiH4LiL4Li14LiBCivguJ7guKPguLDguYDguIjguYnguLLguKXguK3guKLguJbguLLguJQKK+C4nuC4o+C4sOC5gOC4iOC5ieC4suC4q+C5ieC4suC4nuC4o+C4sOC4reC4h+C4hOC5jAor4Lie4Lij4Liw4LiZ4Lit4LihCivguJ7guKPguLDguJnguLLguJQKK+C4nuC4o+C4sOC4ouC4suC5gOC4peC5h+C4muC4hOC4o+C4uOC4kQor4Lie4Lij4Liw4Lii4Liy4Lin4Lix4LiZCivguJ7guKPguLDguKXguJoKK+C4nuC4o+C4sOC4peC4t+C4rQor4Lie4Lij4Liw4LmB4Lin4LinCivguJ7guKPguLDguKvguLIKK+C4nuC4o+C4sOC4q+C4suC4oQor4Lie4Lij4Liw4Lir4Li04LiUCivguJ7guKPguLDguK7guLLguKEKK+C4nuC4o+C4seC4geC4nuC4o+C5ieC4reC4oQor4Lie4Lij4Lix4LmI4LiHCivguJ7guKPguLHguJQKK+C4nuC4o+C4seC5iOC4mQor4Lie4Lij4Lix4LiaCivguJ7guKPguYjguLIKK+C4nuC4o+C5ieC4sgor4Lie4Lij4Liy4LiBCivguJ7guKPguLLguIcKK+C4nuC4o+C5iOC4suC4hwor4Lie4Lij4Liy4LiUCivguJ7guKPguLLguJkKK+C4nuC4o+C4suC4ogor4Lie4Lij4Liy4LinCivguJ7guKPguLLguKvguKHguJPguYwKK+C4nuC4o+C4suC4q+C4oeC4k+C4tQor4Lie4Lij4Liy4Lir4Lih4Li1CivguJ7guKPguLMKK+C4nuC4o+C5iOC4swor4Lie4Lij4LmJ4LizCivguJ7guKPguLPguYYKK+C4nuC4o+C4tOC4gQor4Lie4Lij4Li04LmJ4LiHCivguJ7guKPguLTguJoKK+C4nuC4o+C4tOC4muC5hOC4q+C4pwor4Lie4Lij4Li04LmJ4LihCivguJ7guKPguLbguIcKK+C4nuC4o+C4tuC4mQor4Lie4Lij4Li24LiaCivguJ7guKPguLfguJQKK+C4nuC4o+C4t+C5ieC4rQor4Lie4Lij4Li4CivguJ7guKPguLjguIEKK+C4nuC4o+C4uOC5iOC4hwor4Lie4Lij4Li44LmI4LiH4LiZ4Li14LmJCivguJ7guKPguLjguJkKK+C4nuC4o+C4uQor4Lie4Lij4Li54LiUCivguJ7guKTguIHguKnguYwKK+C4nuC4pOC4kgor4Lie4Lik4LiS4LiyCivguJ7guKTguJLguLQKK+C4nuC4pOC4lQor4Lie4Lik4LiV4Li0CivguJ7guKTguJfguJjguYwKK+C4nuC4pOC4l+C4mOC4tOC5jAor4Lie4Lik4LiZ4LiV4LmMCivguJ7guKTguJnguJfguYwKK+C4nuC4pOC4meC4l+C4suC4owor4Lie4Lik4LiZ4LiX4Li04LmMCivguJ7guKTguKDguLnguKnguJMKK+C4nuC4pOC4oOC4ueC4qeC4tOC4lQor4Lie4Lik4Lip4LiI4Li04LiBCivguJ7guKTguKnguKAKK+C4nuC4pOC4q+C4seC4quC4muC4lOC4tQor4Lie4LilCivguJ7guKXguIHguLLguKIKK+C4nuC4peC4geC4suC4owor4Lie4Lil4LiC4Lix4LiZ4LiY4LmMCivguJ7guKXguITguKfguLLguKEKK+C4nuC4peC5gOC4l+C4ngor4Lie4Lil4LiaCivguJ7guKXguYDguKHguLfguK3guIcKK+C4nuC4peC5gOC4o+C4t+C4reC4mQor4Lie4Lil4LmC4Lil4LiBCivguJ7guKXguKfguIEKK+C4nuC4peC4p+C4hwor4Lie4Lil4Lin4LiU4LiB4Li04LiZ4Lil4Li54LiBCivguJ7guKXguKfguJTguYPguKvguI3guYgKK+C4nuC4peC4p+C4seC4lQor4Lie4Lil4Lio4Liy4Liq4LiV4Lij4LmMCivguJ7guKXguKjguLXguIHguKnguLIKK+C4nuC4peC4quC4tOC4h+C4q+C5jAor4Lie4Lil4LitCivguJ7guKXguYnguK0KK+C4nuC4peC4reC4hwor4Lie4Lil4Lit4LiUCivguJ7guKXguK3guJkKK+C4nuC4peC4reC4oeC5geC4nuC4peC4oQor4Lie4Lil4Lit4LiiCivguJ7guKXguYjguK3guKIKK+C4nuC4peC4sAor4Lie4Lil4Liw4LiB4Liz4Lil4Lix4LiHCivguJ7guKXguLDguJ7guKXguLIKK+C4nuC4peC4seC5iOC4gQor4Lie4Lil4Lix4LiHCivguJ7guKXguLHguYjguIcKK+C4nuC4peC4seC5ieC4hwor4Lie4Lil4Lix4LiUCivguJ7guKXguLHguJkKK+C4nuC4peC4seC4mgor4Lie4Lil4Lix4Lia4Lie4Lil4LiyCivguJ7guKXguLHguJrguJ7guKXguLbguIcKK+C4nuC4peC4seC5iOC4pwor4Lie4Lil4LmI4LiyCivguJ7guKXguLLguIHguKMKK+C4nuC4peC4suC4hwor4Lie4Lil4Liy4LiNCivguJ7guKXguLLguJQKK+C4nuC4peC4suC4lOC4tOC4qOC4seC4ogor4Lie4Lil4Liy4LiY4Li04LiB4Liy4LijCivguJ7guKXguYjguLLguJkKK+C4nuC4peC4suC4meC4suC4oeC4seC4ogor4Lie4Lil4Liy4LiZ4Li24LiBCivguJ7guKXguLLguKEKK+C4nuC4peC5iOC4suC4oQor4Lie4Lil4Liy4LiiCivguJ7guKXguLLguKLguKHguYnguLIKK+C4nuC4peC4suC4quC4leC4tOC4gQor4Lie4Lil4Liy4Liq4Lih4LiyCivguJ7guKXguLLguKvguIEKK+C4nuC4peC4swor4Lie4Lil4LmJ4LizCivguJ7guKXguLPguKDguLHguIcKK+C4nuC4peC4tAor4Lie4Lil4Li04LiBCivguJ7guKXguLTguJ7guLHguJcKK+C4nuC4peC4tOC5ieC4pwor4Lie4Lil4Li1CivguJ7guKXguLXguKHguLjguIIKK+C4nuC4peC4uAor4Lie4Lil4Li44LiBCivguJ7guKXguLjguYjguIEKK+C4nuC4peC4uOC4geC4nuC4peC5iOC4suC4mQor4Lie4Lil4Li44LmI4LiHCivguJ7guKXguLjguYnguJkKK+C4nuC4peC4uOC5iOC4oeC4nuC4peC5iOC4suC4oQor4Lie4Lil4Li44LmI4LiiCivguJ7guKXguLjguYnguKIKK+C4nuC4peC4uQor4Lie4Lil4Li54LmB4LiBCivguJ7guKXguLnguITguLLguKcKK+C4nuC4peC4ueC4leC5ieC4mQor4Lie4Lil4Li54LmC4LiVCivguJ7guKXguLnguYLguJfguYDguJnguLXguKLguKEKK+C4nuC4p+C4gQor4Lie4Lin4LiHCivguJ7guYjguKfguIcKK+C4nuC4p+C4mQor4Lie4Lin4LiiCivguJ7guKrguIEKK+C4nuC4quC4mQor4Lie4Liq4Li4CivguJ7guKrguLjguKrguIfguIHguKPguLLguJnguJXguYwKK+C4nuC4q+C4pQor4Lie4Lir4Li4CivguJ7guKvguLjguKUKK+C4nuC4q+C4uQor4Lie4LitCivguJ7guYjguK0KK+C4nuC5ieC4rQor4Lie4Lit4LiBCivguJ7guK3guIHguJ7guLnguJkKK+C4nuC4reC4hOC5gOC4geC4leC4muC4uOC4hAor4Lie4LmI4Lit4LiE4LmJ4Liy4LiV4Li14LmA4Lih4Li14LiiCivguJ7guK3guIcKK+C4nuC5ieC4reC4hwor4Lie4Lit4LiZCivguJ7guYnguK3guKEKK+C4nuC4reC5guC4peC5gOC4meC4teC4ouC4oQor4Lie4LiwCivguJ7guYjguLAKK+C4nuC4sOC4h+C4sgor4Lie4Liw4LiH4Liy4LiaCivguJ7guLDguIfguLLguJrguYYKK+C4nuC4sOC4iOC4hwor4Lie4Liw4LiX4Liz4Lih4Liw4Lij4LiHCivguJ7guLDguJnguK0KK+C4nuC4sOC5gOC4meC5ieC4suC4nuC4sOC4meC4rQor4Lie4Liw4LmA4LiZ4LmJ4Liy4Lie4Liw4LiZ4Li24LiHCivguJ7guLDguYDguJnguLTguJkKK+C4nuC4sOC5gOC4meC4teC4ouC4hwor4Lie4Liw4LmB4LiZ4LiHCivguJ7guLDguYTguJnguKIKK+C4nuC4sOC4nuC4suC4mQor4Lie4Liw4Lie4Li04LiHCivguJ7guLDguYDguJ7guLTguIcKK+C4nuC4sOC4ouC4reC4oQor4Lie4Liw4Lii4Li44Lie4Lii4Li44LiHCivguJ7guLDguKLguLnguIcKK+C4nuC4sOC4ouC4ueC4mQor4Lie4Liw4LmA4Lii4Li04LiaCivguJ7guLDguYDguKLguLTguJrguYYKK+C4nuC4sOC5gOC4ouC4teC4ogor4Lie4Liw4Lij4Li44LiH4Lie4Liw4Lij4Lix4LiHCivguJ7guLDguYDguKXguKIKK+C4nuC4sOC5guC4peC5iQor4Lie4Liw4LmE4LilCivguJ7guLDguKfguIcKK+C4nuC4sOC4p+C4seC4geC4nuC4sOC4p+C4mQor4Lie4Liw4Lin4LiyCivguJ7guLDguKfguYnguLLguJ7guLDguKfguLHguIcKK+C4nuC4sOC4reC4hwor4Lie4Liw4Lit4Liy4LiB4Lie4Liw4Lit4LizCivguJ7guLDguK3guLfguJTguJ7guLDguK3guKEKK+C4nuC4seC4gQor4Lie4Lix4LiB4LiV4Lij4LmMCivguJ7guLHguIHguJXguKPguLIKK+C4nuC4seC4geC4leC4sgor4Lie4Lix4LiB4LmB4Lie4LinCivguJ7guLHguIHguKMKK+C4nuC4seC4hwor4Lie4Lix4LiH4LiB4LiyCivguJ7guLHguIfguITguLIKK+C4nuC4seC4h+C4h+C4sgor4Lie4Lix4LiH4Lic4Li34LiUCivguJ7guLHguIfguJ7guKfguKIKK+C4nuC4seC4h+C4nuC4reC4mQor4Lie4Lix4LiH4Lie4Liy4LiZCivguJ7guLHguIfguJ7guLLguJoKK+C4nuC4seC4h+C5gOC4nuC4ogor4Lie4Lix4LiH4Lil4Liy4LiHCivguJ7guLHguIoKK+C4nuC4seC4iuC4meC4tQor4Lie4Lix4LiK4LijCivguJ7guLHguI3guIjguIEKK+C4nuC4seC4jeC4iOC4meC5jAor4Lie4Lix4LiS4LiB4Li1CivguJ7guLHguJLguJnguLAKK+C4nuC4seC4kuC4meC4sgor4Lie4Lix4LiUCivguJ7guLHguJTguIrguLIKK+C4nuC4seC4lOC4i+C4suC4lAor4Lie4Lix4LiU4LiU4Li24LiH4Liq4LmMCivguJ7guLHguJTguYHguJ7guKcKK+C4nuC4seC4lOC4q+C4peC4p+C4hwor4Lie4Lix4LiV4LiV4Li04LiH4Liq4LiwCivguJ7guLHguJXguKMKK+C4nuC4seC4l+C4mOC5jAor4Lie4Lix4LiX4LiY4Lii4LiyCivguJ7guLHguJfguKMKK+C4nuC4seC4mQor4Lie4Lix4LiZ4LiH4Li5CivguJ7guLHguJnguIjguLMKK+C4nuC4seC4meC5hOC4ieC4mQor4Lie4Lix4LiZ4LiV4Lix4LiZCivguJ7guLHguJnguJXguLkKK+C4nuC4seC4meC4l+C4suC4hwor4Lie4Lix4LiZ4LiY4LmMCivguJ7guLHguJnguJjguJnguLAKK+C4nuC4seC4meC4mOC4meC4swor4Lie4Lix4LiZ4LiY4LiwCivguJ7guLHguJnguJjguLgKK+C4nuC4seC4meC4mOC4uOC5jAor4Lie4Lix4LiZ4Lil4Lit4LiBCivguJ7guLHguJnguKXguLLguKIKK+C4nuC4seC4meC4peC4swor4Lie4Lix4LiZ4Lil4Li24LiBCivguJ7guLHguJnguKXguLbguIHguJ7guLHguJnguKXguLfguK0KK+C4nuC4seC4meC5gOC4peC4tOC4qAor4Lie4Lix4LiZ4LmA4Lit4Li04LiNCivguJ7guLHguJoKK+C4nuC4seC4muC4nOC5iOC4sgor4Lie4Lix4LifCivguJ7guLHguKXguKXguKAKK+C4nuC4seC4peC4p+C4seC4mQor4Lie4Lix4LinCivguJ7guLHguKfguLAKK+C4nuC4seC4qOC4lOC4tQor4Lie4Lix4Liq4LiU4Li4CivguJ7guLHguKrguYDguJTguLIKK+C4nuC4seC4quC4leC4o+C5jAor4Lie4Lix4Liq4LiW4Liy4LiZCivguJ7guLIKK+C4nuC4suC4gQor4Lie4Liy4LiB4LmA4Lie4Li14Lii4LijCivguJ7guLLguIHguKLguYwKK+C4nuC4suC4hwor4Lie4LmI4Liy4LiHCivguJ7guLLguIrguLUKK+C4nuC4suC4kwor4Lie4Liy4LiT4Li04LiKCivguJ7guLLguJPguLTguIrguKLguYwKK+C4nuC4suC4k+C4tOC4meC4tQor4Lie4Liy4LiT4Li1CivguJ7guLLguJQKK+C4nuC4suC4lOC5hOC4ieC4mQor4Lie4Liy4LiVCivguJ7guLLguJcKK+C4nuC4suC4l+C4ouC5jAor4Lie4Liy4LiYCivguJ7guLLguJjguLIKK+C4nuC4suC4mQor4Lie4LmI4Liy4LiZCivguJ7guLLguJnguKMKK+C4nuC4suC4oQor4Lie4Liy4LiiCivguJ7guYjguLLguKIKK+C4nuC4suC4ouC4oeC5ieC4sgor4Lie4Liy4Lii4Lix4LieCivguJ7guLLguKLguLgKK+C4nuC4suC4o+C5jOC5gOC4i+C4gQor4Lie4Liy4Lij4LiTCivguJ7guLLguKPguJPguLAKK+C4nuC4suC4o+C5jOC4leC5gOC4meC4reC4o+C5jAor4Lie4Liy4Lij4LiyCivguJ7guLLguKPguLLguJ/guLTguJkKK+C4nuC4suC4pQor4Lie4Liy4Lil4LiyCivguJ7guLLguKXguLUKK+C4nuC4suC4peC4teC4q+C4peC4suC4ouC4q+C4meC5ieC4sgor4Lie4Liy4Lil4Li44LiBCivguJ7guLLguYLguKUKK+C4nuC4suC5hOC4pQor4Lie4Liy4LiqCivguJ7guLLguKrguJnguYwKK+C4nuC4suC4quC4meC4sgor4Lie4Liy4Liq4Li44LiB4Lij4Li1CivguJ7guYjguLLguKvguYwKK+C4nuC4suC4q+C4meC4sAor4Lie4Liy4Lir4LiwCivguJ7guLLguKvguLIKK+C4nuC4suC4q+C4tOC4o+C4geC4sAor4Lie4Liy4Lir4Li04Lij4LiwCivguJ7guLLguKvguLgKK+C4nuC4suC5gOC4q+C4o+C4lAor4Lie4Liy4LmA4Lir4Li14Lii4LijCivguJ7guLLguKwKK+C4nuC4suC4rOC4q+C4sAor4Lie4Liy4Lis4LiwCivguJ7guLMKK+C4nuC4s+C5huC4nuC4tuC4oeC5hgor4Lie4Liz4LiZ4Lix4LiBCivguJ7guLPguJ7guKfguIEKK+C4nuC4s+C4nuC4tuC4oQor4Lie4Liz4Lil4LiyCivguJ7guLTguIHguKUKK+C4nuC4tOC4geC4quC4tOC4lQor4Lie4Li04LiB4Lix4LiUCivguJ7guLTguIHguLHguJXguLQKK+C4nuC4tOC4geC4seC4mQor4Lie4Li04LiB4Liy4LijCivguJ7guLTguIHguLjguKUKK+C4nuC4tOC5gOC4hOC4o+C4suC4sOC4q+C5jAor4Lie4Li04LiG4LiZ4LmMCivguJ7guLTguIbguYDguJnguKgKK+C4nuC4tOC4huC5gOC4meC4qOC4p+C4owor4Lie4Li04LiG4Liy4LiVCivguJ7guLTguIcKK+C4nuC4tOC4iOC4pQor4Lie4Li04LiI4Lix4LiiCivguJ7guLTguIjguLLguKMKK+C4nuC4tOC4iOC4suC4o+C4k+C5jAor4Lie4Li04LiI4Liy4Lij4LiT4LiyCivguJ7guLTguIjguLTguJUKK+C4nuC4tOC4iOC4tOC4leC4owor4Lie4Li04LiK4LiN4LmMCivguJ7guLTguIrguKIKK+C4nuC4tOC4iuC4seC4ogor4Lie4Li04LiK4Liy4LiZCivguJ7guLTguIrguLTguJUKK+C4nuC4tOC5gOC4iuC4kAor4Lie4Li04LmA4LiK4Li14Lii4LijCivguJ7guLTguJHguLnguKPguKLguYwKK+C4nuC4tOC4kwor4Lie4Li04LiU4LiX4Li54LilCivguJ7guLTguJTguKPguIEKK+C4nuC4tOC4lOC4suC4mQor4Lie4Li04LmC4LiU4LijCivguJ7guLTguJXguKMKK+C4nuC4tOC4luC4tQor4Lie4Li04LiW4Li14Lie4Li04LiW4Lix4LiZCivguJ7guLTguJfguKLguYwKK+C4nuC4tOC4l+C4ouC4sgor4Lie4Li04LiX4Lix4LiB4Lip4LmMCivguJ7guLTguJfguLHguIHguKnguYzguKrguLHguJnguJXguLQKK+C4nuC4tOC4l+C4ueC4owor4Lie4Li04LmA4LiX4LioCivguJ7guLTguJjguLLguJkKK+C4nuC4tOC4mOC4tQor4Lie4Li04LiY4Li4CivguJ7guLTguJjguLjguKMKK+C4nuC4tOC5guC4mOC5iAor4Lie4Li04LiZ4LiX4Li4CivguJ7guLTguJnguJ7guIcKK+C4nuC4tOC5iOC4meC4nuC4seC5iOC4hwor4Lie4Li04LiZ4Lit4Lia4Lie4Li04LmA4LiX4LiyCivguJ7guLTguJnguLHguKIKK+C4nuC4tOC4meC4suC4qAor4Lie4Li04LiZ4Li04LiICivguJ7guLTguJnguLTguJUKK+C4nuC4tOC4meC4tOC4qAor4Lie4Li04LiZ4Li04Lio4LiI4Lix4LiiCivguJ7guLTguYDguJnguJUKK+C4nuC4tOC4muC4seC4leC4tAor4Lie4Li04Lia4Liy4LiBCivguJ7guLTguJrguLjguKUKK+C4nuC4tOC4muC4ueC4pQor4Lie4Li04Lib4Lij4Li04LiVCivguJ7guLTguJvguKXguLLguKgKK+C4nuC4tOC4m+C4seC4quC4quC4meC4sgor4Lie4Li04Lie4Lij4Lij4LiYCivguJ7guLTguJ7guKPguKPguJjguJnguYwKK+C4nuC4tOC4nuC4seC4geC4nuC4tOC4nuC5iOC4p+C4mQor4Lie4Li04Lie4Lix4LiSCivguJ7guLTguJ7guLHguJLguJnguYwKK+C4nuC4tOC4nuC4suC4geC4qeC5jAor4Lie4Li04Lie4Liy4LiB4Lip4LiyCivguJ7guLTguJ7guLLguJcKK+C4nuC4tOC4nuC4tOC4mAor4Lie4Li04Lig4LieCivguJ7guLTguKDguLHguIoKK+C4nuC4tOC4oOC4suC4hAor4Lie4Li04Lig4Li54Lip4LiT4LiwCivguJ7guLTguYDguKDguIEKK+C4nuC4tOC4oeC4nuC5jAor4Lie4Li04Lih4Lie4LiB4Liy4Lij4Lix4LiHCivguJ7guLTguKHguJ7guLIKK+C4nuC4tOC4oeC5guC4nuC4q+C4meC4sAor4Lie4Li04Lih4LilCivguJ7guLTguKHguYDguKrguJkKK+C4nuC4tOC4oeC4suC4mQor4Lie4Li04Lih4Li44LiCCivguJ7guLTguYLguKHguIHguILguYwKK+C4nuC4tOC5guC4oeC4geC4qeC5jAor4Lie4Li04LmC4Lii4LiB4Lie4Li04LmA4LiB4LiZCivguJ7guLTguYLguKLguIQKK+C4nuC4tOC4owor4Lie4Li04Lij4Lit4LiUCivguJ7guLTguKPguLLguIHguKUKK+C4nuC4tOC4o+C4suC4mgor4Lie4Li04Lij4Liy4LihCivguJ7guLTguKPguLLguKXguLHguKIKK+C4nuC4tOC4o+C4tOC4ouC4sAor4Lie4Li04Lij4Li14LmJ4Lie4Li04LmE4LijCivguJ7guLTguKPguLjguJMKK+C4nuC4tOC4o+C4uOC4mAor4Lie4Li04Lij4Li44Lis4Lir4LmMCivguJ7guLTguYDguKPguJnguJfguKPguYwKK+C4nuC4tOC5gOC4o+C4suC4sAor4Lie4Li04LmC4Lij4LiYCivguJ7guLTguYLguKPguJjguJnguLAKK+C4nuC4tOC5hOC4owor4Lie4Li04Lil4Lix4LiH4LiB4Liy4Liq4LiyCivguJ7guLTguKXguLLguJsKK+C4nuC4tOC4peC4suC4peC4qgor4Lie4Li04Lil4Liy4LiqCivguJ7guLTguKXguLTguJvguJTguLIKK+C4nuC4tOC5guC4peC4pQor4Lie4Li04LmE4LilCivguJ7guLTguKgKK+C4nuC4tOC4qOC4p+C4hwor4Lie4Li04Lio4Lin4Liy4LiqCivguJ7guLTguKjguLLguKUKK+C4nuC4tOC4qOC4uOC4l+C4mOC4tOC5jAor4Lie4Li04LmA4Lio4LipCivguJ7guLTguKkKK+C4nuC4tOC4qeC4kOC4suC4mQor4Lie4Li04Lip4LiZ4Liy4Lio4LiZ4LmMCivguJ7guLTguKrguJTguLLguKMKK+C4nuC4tOC4quC4oeC4owor4Lie4Li04Liq4Lih4Lix4LiiCivguJ7guLTguKrguLHguIcKK+C4nuC4tOC4quC4seC4igor4Lie4Li04Liq4Lix4LiN4LiN4Li1CivguJ7guLTguKrguLHguKIKK+C4nuC4tOC4quC4tOC4kAor4Lie4Li04Liq4Li44LiX4LiY4Li04LmMCivguJ7guLTguKrguLnguIjguJnguYwKK+C4nuC4tOC4q+C4hAor4Lie4Li04Lir4Liy4LijCivguJ7guLTguKzguLLguKMKK+C4nuC4tQor4Lie4Li14LmICivguJ7guLXguYkKK+C4nuC4teC4igor4Lie4Li14LiK4LiE4LiT4Li04LiVCivguJ7guLXguYnguYLguJ7guYkKK+C4nuC4teC4o+C4sOC4oeC4tOC4lAor4Lie4Li24LiHCivguJ7guLbguYjguIcKK+C4nuC4tuC5iOC4mgor4Lie4Li24LihCivguJ7guLbguKHguJ7guLMKK+C4nuC4t+C4igor4Lie4Li34LiUCivguJ7guLfguYnguJkKK+C4nuC4uAor4Lie4Li44LiBCivguJ7guLjguIHguLLguKEKK+C4nuC4uOC4hwor4Lie4Li44LmI4LiHCivguJ7guLjguIfguYHguIEKK+C4nuC4uOC4h+C4iOC4hwor4Lie4Li44LiH4LiU4LitCivguJ7guLjguIfguJfguLDguKXguLLguKIKK+C4nuC4uOC4h+C4m+C4peC4sgor4Lie4Li44LiSCivguJ7guLjguJLguLQKK+C4nuC4uOC4lAor4Lie4Li44LiU4LiV4Liy4LiZCivguJ7guLjguJfguJgKK+C4nuC4uOC4l+C4mOC4iuC4suC4lAor4Lie4Li44LiX4LiY4Lij4Lix4LiB4Lip4LiyCivguJ7guLjguJfguJjguLAKK+C4nuC4uOC4l+C4mOC4tAor4Lie4Li44LiX4LmC4LiY4LmICivguJ7guLjguJfguKPguLIKK+C4nuC4uOC4mAor4Lie4Li44LmI4LihCivguJ7guLjguKHguYDguKPguLXguKLguIcKK+C4nuC4uOC5ieC4ogor4Lie4Li5CivguJ7guLnguYgKK+C4nuC4ueC4geC4suC4oQor4Lie4Li54LiUCivguJ7guLnguJkKK+C4nuC4ueC5ieC4mQor4LmA4LieCivguYDguJ7guYfguIEKK+C5gOC4nuC4geC4sgor4LmA4Lie4LiE4LiwCivguYDguJ7guYfguIcKK+C5gOC4nuC5iOC4hwor4LmA4Lie4LmH4LiICivguYDguJ7guIrguInguKXguLnguIHguKPguKPguKEKK+C5gOC4nuC4iuC4jOC4huC4suC4lQor4LmA4Lie4LiK4LijCivguYDguJ7guIrguKPguIHguKXguLHguJoKK+C5gOC4nuC4iuC4o+C4lOC4sgor4LmA4Lie4LiK4Lij4LiZ4Li04Lil4LiI4Li04LiZ4LiU4LiyCivguYDguJ7guIrguKPguJvguKPguLLguJPguLUKK+C5gOC4nuC4iuC4o+C4pOC4geC4qeC5jAor4LmA4Lie4LiK4Lij4Liq4Lix4LiH4LiG4Liy4LiVCivguYDguJ7guIrguKPguKvguKXguLXguIEKK+C5gOC4nuC4iuC4o+C4q+C4tuC4hwor4LmA4Lie4LiK4Lij4Liy4Lii4Li44LiYCivguYDguJ7guYfguI0KK+C5gOC4nuC4keC4ueC4o+C4tOC4ouC5jAor4LmA4Lie4LiT4Li1CivguYDguJ7guYfguJTguJfguLnguKUKK+C5gOC4nuC4lOC4suC4mQor4LmA4Lie4LiV4LijCivguYDguJ7guJcKK+C5gOC4nuC4l+C4meC4sgor4LmA4Lie4LiX4Lii4Liy4LiY4LijCivguYDguJ7guJfguLLguKIKK+C5gOC4nuC4l+C4uOC4muC4suC4ogor4LmA4Lie4LmC4LiX4Lia4Liy4LiiCivguYDguJ7guJnguIHguKfguLTguJkKK+C5gOC4nuC5iOC4meC4nuC5iOC4suC4mQor4LmA4Lie4LiZ4Li14Lii4LiUCivguYDguJ7guYnguKIKK+C5gOC4nuC4o+C4hwor4LmA4Lie4Lij4LiL4Li14LmC4Lit4LiU4Li14LmA4Lih4Li14Lii4LihCivguYDguJ7guKPguLIKK+C5gOC4nuC4o+C4suC4sAor4LmA4Lie4Lij4Li04LiUCivguYDguJ7guKPguLTguKgKK+C5gOC4nuC4o+C4teC4ouC4gQor4LmA4Lie4Lij4Li14Lii4LiHCivguYDguJ7guKPguLXguKLguJoKK+C5gOC4nuC4o+C4teC5ieC4ouC4oQor4LmA4Lie4Lij4Li14Lii4LinCivguYDguJ7guKPguLfguYjguK0KK+C5gOC4nuC4o+C4t+C4reC4hwor4LmA4Lie4LilCivguYDguJ7guKXguIcKK+C5gOC4nuC4peC5h+C4lAor4LmA4Lie4Lil4LmJ4LmC4Lie4Lil4LmJCivguYDguJ7guKXguLIKK+C5gOC4nuC4peC4suC4sAor4LmA4Lie4Lil4Liy4Liw4LmB4Lie4Lil4LiwCivguYDguJ7guKXguLTguIcKK+C5gOC4nuC4peC4tOC4lOC5gOC4nuC4peC4tOC4mQor4LmA4Lie4Lil4Li04LiZCivguYDguJ7guKXguLXguKIKK+C5gOC4nuC4peC4teC5ieC4ogor4LmA4Lie4Lil4Li14LmI4Lii4LiHCivguYDguJ7guKgKK+C5gOC4nuC4qOC4ouC4seC4meC4lOC4owor4LmA4Lie4LiqCivguYDguJ7guKrguKXguLLguJQKK+C5gOC4nuC5iOC4rQor4LmA4Lie4LmJ4LitCivguYDguJ7guK3guLTguI0KK+C5gOC4nuC4sAor4LmA4Lie4Li04LiBCivguYDguJ7guLTguIHguYDguInguKIKK+C5gOC4nuC4tOC4hwor4LmA4Lie4Li04LmI4LiHCivguYDguJ7guLTguJTguYDguJ7guYnguKIKK+C5gOC4nuC4tOC5iOC4oQor4LmA4Lie4Li14LmJ4LiiCivguYDguJ7guLXguKLguIcKK+C5gOC4nuC4teC5ieC4ouC4hwor4LmA4Lie4Li14Lii4LiH4Lit4LitCivguYDguJ7guLXguKLguIrguJnguYwKK+C5gOC4nuC4teC4ouC4mQor4LmA4Lie4Li14LmJ4Lii4LiZCivguYDguJ7guLXguKLguJoKK+C5gOC4nuC4teC4ouC4owor4LmA4Lie4Li34LmI4LitCivguYDguJ7guLfguYjguK3guJkKK+C5geC4ngor4LmB4Lie4LmJCivguYHguJ7guIcKK+C5geC4nuC5iOC4hwor4LmB4Lie4LiH4Lie4Lin4LiiCivguYHguJ7guIfguJ7guKfguKLguJ3guKPguLHguYjguIcKK+C5geC4nuC5h+C4h+C5geC4nuC4pwor4LmB4Lie4LiX4Lii4LmMCivguYHguJ7guJfguKLguLIKK+C5geC4nuC4mQor4LmB4Lie4LmI4LiZCivguYHguJ7guJnguIEKK+C5geC4nuC4meC4h+C5gOC4iuC4tOC4hwor4LmB4Lie4LiZ4LiU4LiyCivguYHguJ7guKMKK+C5geC4nuC4o+C5iAor4LmB4Lie4Lij4LiBCivguYHguJ7guKPguYjguIcKK+C5geC4nuC4o+C4pwor4LmB4Lie4Lij4LmJ4LinCivguYHguJ7guKXguIcKK+C5geC4nuC4peC4l+C4tOC4meC4seC4oQor4LmB4Lie4Lil4LihCivguYHguJ7guKXguYDguKXguYDguJTguLXguKLguKEKK+C5geC4nuC4peC4sAor4LmB4Lie4Lil4Liw4LmC4Lil4LihCivguYHguJ7guKcKK+C5geC4nuC5ieC4pwor4LmB4Lie4Lio4Lii4LmMCivguYHguJ7guKjguKLguLIKK+C5geC4nuC4sAor4LmB4Lie4Liw4LmC4Lil4LihCivguYLguJ4KK+C5guC4nuC4gQor4LmC4Lie4LiB4Lie4Liy4LiiCivguYLguJ7guIcKK+C5guC4nuC4h+C4nuC4suC4hwor4LmC4Lie4LiK4LiM4LiH4LiE4LmMCivguYLguJ7guIvguLTguJXguKPguK3guJkKK+C5guC4nuC4lAor4LmC4Lie4LmB4LiX4Liq4LmA4LiL4Li14Lii4LihCivguYLguJ7guJgKK+C5guC4nuC4mOC4tOC5jAor4LmC4Lie4LiZCivguYLguJ7guYnguJkKK+C5guC4nuC4meC4l+C4sOC4meC4sgor4LmC4Lie4Lia4Liy4LiiCivguYLguJ7guJzguLHguJkKK+C5guC4nuC4ogor4LmC4Lie4Lii4LihCivguYLguJ7guKLguKHguLHguJkKK+C5guC4nuC4ouC4oeC4suC4mQor4LmC4Lie4Lij4LiBCivguYLguJ7guKPguIcKK+C5guC4nuC4o+C5guC4l+C5geC4reC4geC4l+C4tOC5gOC4meC4teC4ouC4oQor4LmC4Lie4Lij4Lih4Li14LmA4LiX4Li14Lii4LihCivguYLguJ7guKPguLDguJTguIEKK+C5guC4nuC4peC5iAor4LmC4Lie4Lil4LiHCivguYLguJ7guKXguYjguIcKK+C5guC4nuC4peC5ieC4hwor4LmC4Lie4Lil4LiZCivguYLguJ7guKXguYnguYDguJ7guKXguYkKK+C5guC4nuC4peC4sAor4LmC4Lie4Liq4LieCivguYTguJ4KK+C5hOC4nuC5iAor4LmE4Lie4LiI4Li04LiV4LijCivguYTguJ7guIrguJkKK+C5hOC4nuC4iuC4ouC4meC4leC5jAor4LmE4Lie4LiR4Li54Lij4Lii4LmMCivguYTguJ7guYLguJTguKMKK+C5hOC4nuC4l+C4tQor4LmE4Lie4Lia4Li54Lil4Lii4LmMCivguYTguJ7guJ7guKPguKPguJMKK+C5hOC4nuC5gOC4nuC4tOC4lAor4LmE4Lie4Lih4Lit4LiBCivguYTguJ7guKHguYnguLIKK+C5hOC4nuC4owor4LmE4Lie4Lij4LmICivguYTguJ7guKPguIjguLTguJXguKMKK+C5hOC4nuC4o+C4iuC4mQor4LmE4Lie4Lij4LiK4Lii4LiZ4LiV4LmMCivguYTguJ7guKPguJHguLnguKPguKLguYwKK+C5hOC4nuC4o+C4l+C4tQor4LmE4Lie4Lij4Lia4Li54Lil4Lii4LmMCivguYTguJ7guKPguYDguKPguLLguLAKK+C5hOC4nuC4o+C4quC4suC4oeC4geC4rQor4LmE4Lie4Lij4Lix4LiKCivguYTguJ7guKPguLMKK+C5hOC4nuC4o+C4tOC4mQor4LmE4Lie4Lij4Li1CivguYTguJ7guKPguLkKK+C5hOC4nuC5gOC4o+C4suC4sAor4LmE4Lie4LmC4Lij4LiI4LiZ4LmMCivguYTguJ7guKUKK+C5hOC4nuC4peC5iAor4LmE4Lie4Lio4Liy4LiCCivguYTguJ7guKjguLLguKUKK+C5hOC4nuC5gOC4qOC4qQor4LmE4Lie4Liq4LieCivguYTguJ7guKrguLTguJAKK+C5hOC4nuC4q+C4suC4owor4LifCivguJ/guIEKK+C4n+C5ieC4hwor4Lif4Lij4Lix4LiB4LmC4LiX4LiqCivguJ/guKPguLUKK+C4n+C4peC4reC4o+C5jOC5guC4iuC4p+C5jAor4Lif4Lil4Li54Lit4Lit4Lij4Li14LiZCivguJ/guYjguK0KK+C4n+C5ieC4rQor4Lif4Lit4LiBCivguJ/guK3guIcKK+C4n+C5iOC4reC4hwor4Lif4LmJ4Lit4LiHCivguJ/guK3guJQKK+C4n+C4reC4mQor4Lif4LmI4Lit4LiZCivguJ/guYnguK3guJkKK+C4n+C5ieC4reC5geC4n+C5iQor4Lif4Lit4Lij4LmM4LihCivguJ/guK3guKPguYzguKHguLLguKXguJTguLXguYTguK7guJTguYwKK+C4n+C4reC4o+C5jOC4oeC4suC4peC4tOC4mQor4Lif4Lit4Liq4LiL4Li04LilCivguJ/guK3guKrguJ/guK3guKPguLHguKoKK+C4n+C4reC4quC5gOC4n+C4lQor4Lif4Liw4Lif4Lix4LiUCivguJ/guLDguJ/guLHguYjguJkKK+C4n+C4sOC4n+C5iOC4suC4ogor4Lif4Lix4LiBCivguJ/guLHguIHguJ/guLjguYnguJkKK+C4n+C4seC4hwor4Lif4Lix4LiH4LiB4LmM4LiK4Lix4LiZCivguJ/guLHguIfguYDguJ7guKPguLLguLAKK+C4n+C4seC4lAor4Lif4Lix4LiZCivguJ/guLHguYjguJkKK+C4n+C4seC5ieC4mQor4Lif4Lix4LiZ4LiK4LmJ4Liy4LiHCivguJ/guYnguLIKK+C4n+C4suC4gQor4Lif4Liy4LiHCivguJ/guYjguLLguIcKK+C4n+C4suC4lAor4Lif4Liy4LiX4Lit4LihCivguJ/guLLguJkKK+C4n+C5ieC4suC4neC5iOC4rQor4Lif4LmI4Liy4LihCivguJ/guYnguLLguKHguLjguYjguKIKK+C4n+C4suC4ogor4Lif4Liy4Lij4LmM4LihCivguJ/guLLguKrguIvguLTguKrguJXguYwKK+C4n+C4tOC4gQor4Lif4Li04LiUCivguJ/guLTguJUKK+C4n+C4tOC4mgor4Lif4Li04Lil4LmM4LihCivguJ/guLTguKfguKrguYwKK+C4n+C4tOC4quC4tOC4geC4quC5jAor4Lif4Li14LmICivguJ/guLXguYkKK+C4n+C4t+C4mQor4Lif4Li34LmJ4LiZCivguJ/guLfguKEKK+C4n+C4uAor4Lif4Li44LmJ4LiHCivguJ/guLjguJUKK+C4n+C4uOC4mQor4Lif4Li44LiaCivguJ/guLjguYjguJoKK+C4n+C4uOC4n+C4sAor4Lif4Li44LmI4Lih4LmA4Lif4Li34Lit4LiiCivguJ/guLjguKXguKrguYHguIHguYrguJsKK+C4n+C4uQor4Lif4Li54LmICivguJ/guLnguIEKK+C4n+C4ueC4lAor4Lif4Li54LihCivguYDguJ/guYfguJQKK+C5gOC4n+C5ieC4mQor4LmA4Lif4Lil4LiU4LmM4Liq4Lib4Liy4Lij4LmMCivguYDguJ/guYnguK0KK+C5gOC4n+C4reC4o+C5jOC4meC4tOC5gOC4iOC4reC4o+C5jAor4LmA4Lif4Lit4Lij4LmM4LmA4Lih4Li14Lii4LihCivguYDguJ/guK3guLAKK+C5gOC4n+C4sAor4LmA4Lif4Li04LiZCivguYDguJ/guLTguKPguYzguJkKK+C5gOC4n+C4teC5ieC4ouC4oQor4LmA4Lif4Li14LmJ4Lii4LinCivguYDguJ/guLfguK0KK+C5gOC4n+C4t+C5iOC4rQor4LmA4Lif4Li34LmJ4LitCivguYDguJ/guLfguK3guIcKK+C5gOC4n+C4t+C5ieC4reC4hwor4LmA4Lif4Li34Lit4LiZCivguYDguJ/guLfguK3guKIKK+C5geC4n+C5iAor4LmB4Lif4LiHCivguYHguJ/guIrguLHguYjguJkKK+C5geC4n+C4mQor4LmB4Lif4LiZ4LiL4Li1CivguYHguJ/guJoKK+C5geC4n+C5ieC4oQor4LmB4Lif4Lij4LmMCivguYHguJ/guKPguJnguYDguIvguLXguKLguKEKK+C5geC4n+C4peC4geC4i+C5jAor4LmB4Lif4Lil4LiVCivguYHguJ/guLAKK+C5guC4n+C4geC4seC4qgor4LmE4LifCivguKAKK+C4oOC4hAor4Lig4LiE4Lin4LiU4Li1CivguKDguITguKfguLHguJUKK+C4oOC4hOC4p+C4seC4l+C4hOC4teC4leC4sgor4Lig4LiE4Lin4Lix4LiZ4LiV4LmMCivguKDguITguKfguLHguKEKK+C4oOC4hOC4p+C4sgor4Lig4LiE4Lin4Liy4LiZCivguKDguITguLHguJnguJfguKXguLIKK+C4oOC4hOC4tOC4meC4tQor4Lig4LiTCivguKDguJPguLTguJTguLIKK+C4oOC4ngor4Lig4Lih4LiB4Liy4LijCivguKDguKHguKMKK+C4oOC4oeC4uAor4Lig4Lih4Li44LiB4LiwCivguKDguKHguLjguIHguLIKK+C4oOC4ouC4seC4meC4leC4o+C4suC4ogor4Lig4Lii4Liy4LiE4LiV4Li0CivguKDguKMKK+C4oOC4o+C4k+C4tQor4Lig4Lij4LiVCivguKDguKPguJXguKfguKPguKPguKkKK+C4oOC4o+C4leC4qOC4suC4quC4leC4o+C5jAor4Lig4Lij4Lij4LiU4LijCivguKDguKPguKPguJTguLIKK+C4oOC4o+C4o+C4ouC4sgor4Lig4Lij4Liw4Lih4LijCivguKDguKPguLDguKHguKPguLUKK+C4oOC4o+C4seC4quC4lOC4suC4qQor4Lig4Lij4Liy4LiU4LijCivguKDguKPguLLguJTguLIKK+C4oOC4o+C4tOC4ouC4sgor4Lig4Lij4Li5CivguKDguKTguIfguITguLLguKMKK+C4oOC4pOC4lOC4gQor4Lig4Lik4LiU4Li1CivguKDguKTguJXguKLguYwKK+C4oOC4pOC4qAor4Lig4Lik4Lip4LiP4LmMCivguKDguKcKK+C4oOC4p+C4seC4hOC4owor4Lig4Lin4Lix4LiH4LiE4LmMCivguKDguLHguIHguILguLAKK+C4oOC4seC4geC4lOC4tQor4Lig4Lix4LiB4LiV4LiwCivguKDguLHguIHguJXguLQKK+C4oOC4seC4geC4qeC5jAor4Lig4Lix4LiECivguKDguLHguITguJnguYwKK+C4oOC4seC4h+C4hOC4sAor4Lig4Lix4LiH4LiE4Li1CivguKDguLHguIgKK+C4oOC4seC4jeC4iuC4sAor4Lig4Lix4LiT4LiR4LmMCivguKDguLHguJPguJHguITguKPguKPguKAKK+C4oOC4seC4k+C4keC4meC4sAor4Lig4Lix4LiT4LiR4Liy4LiE4Liy4LijCivguKDguLHguJPguJHguLLguITguLLguKPguLTguIEKK+C4oOC4seC4k+C4keC4suC4o+C4seC4geC4qeC5jAor4Lig4Lix4LiT4LiR4Li5CivguKDguLHguJUKK+C4oOC4seC4leC4owor4Lig4Lix4LiX4LijCivguKDguLHguJ4KK+C4oOC4seC4ogor4Lig4Lix4Liq4LiU4LiyCivguKDguLHguKrguJXguKPguLIKK+C4oOC4seC4quC4oeC4sAor4Lig4Lix4Liq4Liq4LijCivguKDguLIKK+C4oOC4suC4hAor4Lig4Liy4LiE4Lig4Li54Lih4Li0CivguKDguLLguITguKLguYwKK+C4oOC4suC4hOC4ouC4suC4meC4uOC4p+C4seC4leC4tAor4Lig4Liy4LiE4Li04LiZ4Li1CivguKDguLLguITguLTguYTguJnguKIKK+C4oOC4suC4hOC4tQor4Lig4Liy4LiE4Li14Lii4LiwCivguKDguLLguIrguJnguLAKK+C4oOC4suC4iuC4tQor4Lig4Liy4LiTCivguKDguLLguJPguIEKK+C4oOC4suC4k+C4tQor4Lig4Liy4LiT4Li4CivguKDguLLguJTguKMKK+C4oOC4suC4lOC4sgor4Lig4Liy4LiV4LijCivguKDguLLguJXguLIKK+C4oOC4suC4leC4tOC4geC4sAor4Lig4Liy4LiV4Li04Lii4LiwCivguKDguLLguJXguLgKK+C4oOC4suC4ngor4Lig4Liy4Lie4Lii4LmMCivguKDguLLguJ7guKLguJnguJXguYwKK+C4oOC4suC4oQor4Lig4Liy4LiiCivguKDguLLguKMKK+C4oOC4suC4o+C4lOC4tQor4Lig4Liy4Lij4LiVCivguKDguLLguKPguJXguLUKK+C4oOC4suC4o+C4ouC4l+C4o+C4seC4nuC4ouC5jAor4Lig4Liy4Lij4Lii4LiyCivguKDguLLguKPguYLguKPguIcKK+C4oOC4suC4o+C4sAor4Lig4Liy4Lij4LiyCivguKDguLLguKfguJnguLIKK+C4oOC4suC4p+C4sAor4Lig4Liy4LipCivguKDguLLguKnguIEKK+C4oOC4suC4qeC4k+C5jAor4Lig4Liy4Lip4LiyCivguKDguLLguKnguLTguJUKK+C4oOC4suC4qeC4tQor4Lig4Liy4LiqCivguKDguLLguKrguJnguYwKK+C4oOC4suC4quC4sgor4Lig4Liy4Liq4Li44LijCivguKDguLTguIHguILguLIKK+C4oOC4tOC4geC4guC4uAor4Lig4Li04LiB4LiC4Li44LiZ4Li1CivguKDguLTguIHguKnguLIKK+C4oOC4tOC4geC4qeC4uAor4Lig4Li04LiB4Lip4Li44LiT4Li1CivguKDguLTguIfguITguLLguKMKK+C4oOC4tOC4h+C4qgor4Lig4Li04LiH4Liq4LiZ4LiwCivguKDguLTguIfguKrguKMKK+C4oOC4tOC4jeC5guC4jQor4Lig4Li04LiV4LiV4Li0CivguKDguLTguJcKK+C4oOC4tOC4meC4l+C5jAor4Lig4Li04Lii4LmC4LiiCivguKDguLTguKPguKHguKLguYwKK+C4oOC4tOC4o+C4oeC4ouC5jOC4quC4uOC4o+C4suC4h+C4hOC5jAor4Lig4Li04Lip4Lix4LiKCivguKDguLTguKoKK+C4oOC4tOC4quC4seC4gQor4Lig4Li14LiV4LiwCivguKDguLXguKEKK+C4oOC4teC4o+C4uAor4Lig4Li44LiB4LiV4LmMCivguKDguLjguILguLHguJkKK+C4oOC4uOC4igor4Lig4Li44LiN4LiKCivguKDguLjguJUKK+C4oOC4uOC4oQor4Lig4Li44Lih4Lij4LiwCivguKDguLjguKHguKPguLIKK+C4oOC4uOC4oeC4o+C4tOC4mQor4Lig4Li44Lih4Lij4Li1CivguKDguLjguKHguYDguKPguKgKK+C4oOC4uOC4qgor4Lig4Li5CivguKDguLnguYgKK+C4oOC4ueC5guC4igor4Lig4Li54LiU4Liy4LiUCivguKDguLnguJUKK+C4oOC4ueC4leC4tAor4Lig4Li54LiV4Li1CivguKDguLnguKEKK+C4oOC4ueC4oeC4tAor4Lig4Li54Lih4Li04LiE4Li44LmJ4Lih4LiB4Lix4LiZCivguKDguLnguKHguLTguYHguJ7guYkKK+C4oOC4ueC4oeC4tQor4Lig4Li54Lij4LmC4Lil4LiBCivguKDguLnguKPguLQKK+C4oOC4ueC4o+C4tQor4Lig4Li54Lip4LiyCivguKDguLnguKnguLTguJUKK+C5gOC4oOC4geC4sAor4LmA4Lig4LiE4LiwCivguYDguKDguJXguKPguLIKK+C5gOC4oOC4lwor4LmA4Lig4Lij4LinCivguYDguKDguKPguLQKK+C5gOC4oOC4o+C4tQor4LmA4Lig4Liq4Lix4LiKCivguYDguKDguKrguLHguIrguYDguJ7guKXguLIKK+C5guC4oOC4hAor4LmC4Lig4LiE4LiX4Lij4Lix4Lie4Lii4LmMCivguYLguKDguITguKDguLHguJPguJHguYwKK+C5guC4oOC4hOC4ouC4l+C4o+C4seC4nuC4ouC5jAor4LmC4Lig4LiE4Li04LiZCivguYLguKDguITguLUKK+C5guC4oOC5hOC4hOC4ogor4LmC4Lig4LmE4LiE4Lio4Lin4Lij4Lij4Lii4LmMCivguYLguKDguIoKK+C5guC4oOC4iuC4gQor4LmC4Lig4LiK4LiZ4LmMCivguYLguKDguIrguJnguLAKK+C5guC4oOC4iuC4meC4suC4geC4owor4LmC4Lig4LiK4LiZ4Liy4LiB4Liy4LijCivguYLguKDguIrguJnguLLguKvguLLguKMKK+C5hOC4oOC4o+C4ngor4LmE4Lig4Lij4Li04LiZCivguYTguKDguKPguLUKK+C5hOC4oOC4qeC4seC4iuC4hOC4uOC4o+C4uAor4LmE4Lig4Lip4Lix4LiK4Lii4LmMCivguKEKK+C4oeC4gQor4Lih4LiB4LijCivguKHguIHguKPguIHguLjguJPguJHguKUKK+C4oeC4geC4o+C5gOC4geC4leC4meC5jAor4Lih4LiB4Lij4LiY4Lin4Lix4LiKCivguKHguIHguKPguJ7guLLguKvguJkKK+C4oeC4geC4o+C4suC4geC4owor4Lih4LiB4Lij4Liy4LiE4LihCivguKHguIHguKPguLLguKXguLHguKIKK+C4oeC4geC4o+C4suC4p+C4suC4qgor4Lih4LiB4LiqCivguKHguIHguLjguI4KK+C4oeC4geC4uOC4pQor4Lih4LiE4LiYCivguKHguIYKK+C4oeC4huC4p+C4seC4mQor4Lih4LiG4LiyCivguKHguYjguIcKK+C4oeC4h+C4geC4uOC4jgor4Lih4LiH4LmC4LiB4Lij4LiiCivguKHguIfguITguKUKK+C4oeC4h+C4hOC4peC4iOC4seC4geC4owor4Lih4LiH4LiE4Lil4Lie4Li04LiY4Li1CivguKHguIfguITguKXguKfguLLguJcKK+C4oeC4h+C4hOC4peC4p+C4suC4owor4Lih4LiH4LiE4Lil4Liq4Lih4Lij4LiqCivguKHguIfguITguKXguKrguKHguLHguKIKK+C4oeC4h+C4hOC4peC4quC4ueC4leC4owor4Lih4LiH4LiE4Lil4Lir4Lix4LiV4LiW4Li1CivguKHguJPguJHguYwKK+C4oeC4k+C4keC4gQor4Lih4LiT4LiR4LiZ4LiwCivguKHguJPguJHguJsKK+C4oeC4k+C4keC4pQor4Lih4LiT4LiR4LiyCivguKHguJPguJHguLLguKPguJ4KK+C4oeC4k+C4keC4tOC4owor4Lih4LiT4LmA4LiR4Li14Lii4LijCivguKHguJPguLUKK+C4oeC4lAor4Lih4LiU4LmA4LiX4LmH4LiICivguKHguJTguKLguK3guJoKK+C4oeC4lOC4peC4ueC4gQor4Lih4LiU4Liy4LiiCivguKHguJTguLUKK+C4oeC4leC4sAor4Lih4LiV4Li0CivguKHguJcKK+C4oeC4l+C4meC4sAor4Lih4LiX4LiZ4Li14Lii4LiwCivguKHguJjguLgKK+C4oeC4mOC4uOC4o+C4sAor4Lih4LiZCivguKHguYjguJkKK+C4oeC4meC4leC5jAor4Lih4LiZ4LiV4Lij4LmMCivguKHguJnguJXguKPguLUKK+C4oeC4meC4l+C5jAor4Lih4LiZ4LiX4Li04LijCivguKHguJnguJfguLTguKPguLLguKXguLHguKIKK+C4oeC4meC5gOC4l+C4teC4ouC4owor4Lih4LiZ4Liq4Li04LiB4Liy4LijCivguKHguJnguLHguKoKK+C4oeC4meC4suC5guC4mwor4Lih4LiZ4Li04Lih4LiZ4LiyCivguKHguJnguLTguKXguLIKK+C4oeC4meC4teC4oeC4meC4sgor4Lih4LiZ4Li4CivguKHguJnguLjguI0KK+C4oeC4meC4uOC4qeC4ouC5jAor4Lih4LiZ4Li44Liq4Liy4LijCivguKHguJnguLkKK+C4oeC4meC4ueC4quC4suC4owor4Lih4LmC4LiZCivguKHguYLguJnguKPguLLguKvguYwKK+C4oeC5guC4meC4quC4suC4owor4Lih4LmC4LiZ4Liq4Liy4LmA4Lij4LmICivguKHguYLguJnguKvguYzguKPguLIKK+C4oeC4oeC4seC4h+C4geC4suC4owor4Lih4Lih4Liy4LiBCivguKHguKLguLjguKPguLAKK+C4oeC4ouC4ueC4ggor4Lih4Lii4Li54LijCivguKHguKMKK+C4oeC4o+C4geC4lQor4Lih4Lij4LiE4LiyCivguKHguKPguJHguJsKK+C4oeC4o+C4k+C5jAor4Lih4Lij4LiT4LiwCivguKHguKPguJTguIEKK+C4oeC4o+C4o+C4hAor4Lih4Lij4Lij4LiE4LiyCivguKHguKPguKPguJXguKIKK+C4oeC4o+C4o+C4leC4seC4ogor4Lih4Lij4Lij4LiX4LiZCivguKHguKPguKPguKLguLLguJcKK+C4oeC4o+C4o+C4qQor4Lih4Lij4Liq4Li44LihCivguKHguKPguLHguKHguYDguJfguKgKK+C4oeC4o+C4suC4meC4hOC4p+C4suC4mQor4Lih4Lij4Li04LiICivguKHguKPguLTguKLguLLguJcKK+C4oeC4o+C4teC4iOC4tAor4Lih4Lij4Li4CivguKHguKPguLjguJUKK+C4oeC4pOC4hAor4Lih4Lik4LiE4Lii4LmMCivguKHguKTguIjguInguLIKK+C4oeC4pOC4lOC4gQor4Lih4Lik4LiVCivguKHguKTguJXguIEKK+C4oeC4pOC4leC4ouC4uQor4Lih4Lik4LiX4Li04LiH4LiE4LmMCivguKHguKTguJfguLgKK+C4oeC4pOC4mOC4uAor4Lih4Lik4Lip4LiyCivguKHguKUKK+C4oeC4peC5guC4hAor4Lih4Lil4LiX4Li04LiZCivguKHguKXguJkKK+C4oeC4peC5iOC4mQor4Lih4Lil4Lin4LiBCivguKHguKXguYjguK3guJkKK+C4oeC4peC5iOC4reC4ogor4Lih4Lil4LiwCivguKHguKXguLHguIEKK+C4oeC4peC4seC4h+C5gOC4oeC4peC4t+C4reC4hwor4Lih4Lil4LmJ4LiyCivguKHguKXguLLguIEKK+C4oeC4peC5ieC4suC4hwor4Lih4Lil4Liy4LiZCivguKHguKXguYjguLLguJkKK+C4oeC4peC4suC4ogor4Lih4Lil4Liy4Lii4Li5CivguKHguKXguLLguKcKK+C4oeC4peC5iOC4suC4p+C5gOC4oeC4peC4sgor4Lih4Lil4Liy4Lir4Lij4LiyCivguKHguKXguLTguJkKK+C4oeC4peC4tOC5ieC4mQor4Lih4Lil4Li34LmI4LiZCivguKHguKfguIEKK+C4oeC5iOC4p+C4hwor4Lih4Lin4LiZCivguKHguYjguKfguJkKK+C4oeC5ieC4p+C4mQor4Lih4Lin4LiiCivguKHguYjguKfguKIKK+C4oeC5ieC4p+C4ogor4Lih4Lin4LilCivguKHguKrguLLguKMKK+C4oeC4quC4suC4o+C4gQor4Lih4Liq4Liy4Lij4LiE4Lix4LilCivguKHguKrguLQKK+C4oeC4q+C4geC4o+C4o+C4oQor4Lih4Lir4Lij4LiT4LieCivguKHguKvguKPguKPguIYKK+C4oeC4q+C4o+C4o+C4k+C4ngor4Lih4Lir4Lij4Liq4LieCivguKHguKvguLHguIjguInguKPguLTguKLguLAKK+C4oeC4q+C4seC4k+C4k+C4ngor4Lih4Lir4Lix4LiVCivguKHguKvguLHguJXguIYKK+C4oeC4q+C4seC4l+C4mOC4meC4sAor4Lih4Lir4Lix4LiZ4LiV4LmMCivguKHguKvguLHguJ7guKDguLLguIQKK+C4oeC4q+C4seC4pQor4Lih4Lir4Lix4Lil4LiB4LiwCivguKHguKvguLHguKjguIjguKPguKPguKLguYwKK+C4oeC4q+C4sgor4Lih4Lir4Liy4LiB4LiQ4Li04LiZCivguKHguKvguLLguIHguLLguKwKK+C4oeC4q+C4suC4guC4seC4meC4mOC4gQor4Lih4Lir4Liy4LiI4Lix4LiB4LijCivguKHguKvguLLguIrguJkKK+C4oeC4q+C4suC4iuC4seC4ogor4Lih4Lir4Liy4LiK4Liy4LiV4Li0CivguKHguKvguLLguYLguIrguJXguKPguLHguJUKK+C4oeC4q+C4suC4lOC5hOC4l+C4ogor4Lih4Lir4Liy4LiU4LmA4Lil4LmH4LiBCivguKHguKvguLLguJXguKHguLAKK+C4oeC4q+C4suC5hOC4luC5iAor4Lih4Lir4Liy4LiX4Lin4Li14LibCivguKHguKvguLLguYDguJfguJ4KK+C4oeC4q+C4suC5gOC4l+C4nuC4tQor4Lih4Lir4Liy4LmA4LiX4Lin4Li1CivguKHguKvguLLguJjguLLguJXguLgKK+C4oeC4q+C4suC4meC4o+C4gQor4Lih4Lir4Liy4LiZ4Liq4LiwCivguKHguKvguLLguJnguLTguIHguLLguKIKK+C4oeC4q+C4suC4meC4tOC4pQor4Lih4Lir4Liy4Lia4Lie4Li04LiV4LijCivguKHguKvguLLguJrguKPguLTguIjguLLguIQKK+C4oeC4q+C4suC4muC4seC4k+C4keC4tOC4lQor4Lih4Lir4Liy4Lia4Li44Lij4Li44LipCivguKHguKvguLLguJ7guJkKK+C4oeC4q+C4suC4nuC4o+C4q+C4oQor4Lih4Lir4Liy4Lig4Liy4Lij4LiVCivguKHguKvguLLguKDguLTguYDguJnguKnguIHguKPguKHguJPguYwKK+C4oeC4q+C4suC4oOC4ueC4lQor4Lih4Lir4Liy4LmA4Lih4LiGCivguKHguKvguLLguKLguLLguJkKK+C4oeC4q+C4suC4ouC4uOC4hAor4Lih4Lir4Liy4Lij4LiT4LieCivguKHguKvguLLguKPguLLguIoKK+C4oeC4q+C4suC4o+C4suC4iuC4peC4teC4peC4sgor4Lih4Lir4Liy4Lik4LiB4Lip4LmMCivguKHguKvguLLguKXguLDguKXguKfguKIKK+C4oeC4q+C4suC4peC4sOC4peC4suC4ogor4Lih4Lir4Liy4Lin4LiH4Lio4LmMCivguKHguKvguLLguKfguKPguKPguIQKK+C4oeC4q+C4suC4p+C4seC4lQor4Lih4Lir4Liy4Lin4Li04LiX4Lii4Liy4Lil4Lix4LiiCivguKHguKvguLLguKjguLHguIHguKPguLLguIoKK+C4oeC4q+C4suC4qOC4suC4pQor4Lih4Lir4Liy4Lio4Li54LiZ4Lii4LmMCivguKHguKvguLLguYDguKjguKPguKnguJDguLUKK+C4oeC4q+C4suC4quC4h+C4geC4o+C4suC4meC4leC5jAor4Lih4Lir4Liy4Liq4LiH4LiE4Lij4Liy4LihCivguKHguKvguLLguKrguJTguKHguKDguYwKK+C4oeC4q+C4suC4quC4lOC4swor4Lih4Lir4Liy4Liq4Lih4Li44LiX4LijCivguKHguKvguLLguKrguLHguJnguJnguLTguJrguLLguJUKK+C4oeC4q+C4suC4quC4suC4p+C4gQor4Lih4Lir4Liy4Liq4Liy4Lin4Li04LiB4LiyCivguKHguKvguLLguKrguLTguJfguJjguLTguYLguIrguIQKK+C4oeC4q+C4suC4quC4teC4oeC4sgor4Lih4Lir4Liy4LmA4Liq4Lin4LiBCivguKHguKvguLLguKvguIfguKrguYwKK+C4oeC4q+C4suC4q+C4tOC4h+C4hOC4uOC5jAor4Lih4Lir4Liy4Lit4Liz4LiZ4Liy4LiICivguKHguKvguLLguK3guLPguKHguLLguJXguKLguYwKK+C4oeC4q+C4suC4reC4uOC4iAor4Lih4Lir4Liy4Lit4Li44LiUCivguKHguKvguLLguK3guLjguJvguKPguLLguIHguKMKK+C4oeC4q+C4tAor4Lih4Lir4Li04LiH4Liq4LmMCivguKHguKvguLTguJfguJjguLQKK+C4oeC4q+C4tOC4meC4l+C5jAor4Lih4Lir4Li04Lih4LiyCivguKHguKvguLTguKjguKMKK+C4oeC4q+C4tOC4qOC4p+C4owor4Lih4Lir4Li04LipCivguKHguKvguLTguKnguLUKK+C4oeC4q+C4tuC4oeC4sgor4Lih4Lir4Li44LiU4Li04Lik4LiB4Lip4LmMCivguKHguKvguLjguKPguJTguLUKK+C4oeC4q+C4uOC4o+C4leC4tOC4quC4seC4jeC4jeC4sgor4Lih4Lir4Li5CivguKHguYDguKvguJnguJfguKPguYwKK+C4oeC5gOC4q+C4ouC4h+C4hOC5jAor4Lih4LmA4Lir4LioCivguKHguYDguKvguKjguKfguKMKK+C4oeC5gOC4q+C4qOC4seC4geC4lOC4tOC5jAor4Lih4LmA4Lir4Liq4Lix4LiB4LiC4LmMCivguKHguYDguKvguKrguLQKK+C4oeC5gOC4q+C4quC4tQor4Lih4LmA4Lir4Liy4Lip4LiYCivguKHguYDguKvguLLguKzguLLguKMKK+C4oeC5guC4q+C4hgor4Lih4LmC4Lir4Lij4LiX4Li24LiBCivguKHguYLguKvguKPguKrguJ4KK+C4oeC5guC4q+C4o+C4tQor4Lih4LmC4Lir4Lip4LiYCivguKHguYLguKvguKzguLLguKMKK+C4oeC5hOC4q+C4qOC4p+C4o+C4o+C4ouC5jAor4Lih4LitCivguKHguK3guIcKK+C4oeC5iOC4reC4hwor4Lih4Lit4LiH4LmC4LiB4Lil4Lit4Lii4LiU4LmMCivguKHguK3guIfguITguKPguYjguK0KK+C4oeC5iOC4reC4h+C5gOC4l+C5iOC4hwor4Lih4Lit4LiNCivguKHguYjguK3guJXguYnguK0KK+C4oeC4reC5gOC4leC4reC4o+C5jAor4Lih4Lit4LiZCivguKHguYjguK3guJkKK+C4oeC4reC4meC5hOC4guC5iAor4Lih4Lit4LiaCivguKHguYjguK3guKIKK+C4oeC4reC4o+C5jOC4n+C4teC4mQor4Lih4Lit4Lij4Liw4LiB4Li54LmICivguKHguK3guKXguYLguJfguKoKK+C4oeC5iOC4reC4peC4reC4geC4oeC5iOC4reC5geC4peC4gQor4Lih4LmI4Lit4Liu4LmI4Lit4LihCivguKHguLAKK+C4oeC4sOC4geC4o+C4ueC4lAor4Lih4Liw4LiB4Lil4LmI4LizCivguKHguLDguIHguK3guIEKK+C4oeC4sOC4geC5iOC4reC4hwor4Lih4Liw4LiB4LmI4Lit4LiV4Liy4Lir4Lih4Li5CivguKHguLDguIHguLDguYLguKPguJnguLUKK+C4oeC4sOC4geC4sgor4Lih4Liw4LmA4LiB4Lil4Li34LitCivguKHguLDguYDguIHguLXguYvguKLguIcKK+C4oeC4sOC4guC5iOC4p+C4hwor4Lih4Liw4LiC4Lin4Li04LiUCivguKHguLDguILguLLguKEKK+C4oeC4sOC4guC4suC4oeC5gOC4l+C4qAor4Lih4Liw4LiC4Liy4Lih4Lib4LmJ4Lit4Lih4LiU4Li04LiZCivguKHguLDguYDguILguLfguK0KK+C4oeC4sOC5gOC4guC4t+C4reC4l+C4p+C4suC4ogor4Lih4Liw4LmA4LiC4Li34Lit4LmA4LiX4LioCivguKHguLDguYDguILguLfguK3guJ7guKfguIcKK+C4oeC4sOC5gOC4guC4t+C4reC4oeC4reC4jQor4Lih4Liw4LmB4LiC4LmI4LiZCivguKHguLDguITguLAKK+C4oeC4sOC4hOC4seC4h+C5geC4lOC4hwor4Lih4Liw4LiE4LmI4LiyCivguKHguLDguITguLPguYTguIHguYgKK+C4oeC4sOC4hOC4s+C4lOC4teC4hOC4p+C4suC4ogor4Lih4Liw4LiH4Lix4LiZCivguKHguLDguIfguLHguYjguKcKK+C4oeC4sOC4h+C4uOC4oeC4oeC4sOC4h+C4suC4q+C4peC4sgor4Lih4Liw4LiL4Lix4LiBCivguKHguLDguIvguLLguIcKK+C4oeC4sOC4i+C5iOC4suC4mQor4Lih4Liw4LiU4Liw4LiC4Li14LmJ4LiZ4LiBCivguKHguLDguJTguLHguJkKK+C4oeC4sOC4lOC4sgor4Lih4Liw4LiU4Li54LiBCivguKHguLDguYDguJTguKvguKfguLUKK+C4oeC4sOC5gOC4lOC4t+C5iOC4rQor4Lih4Liw4LiV4LmJ4Lit4LiHCivguKHguLDguJXguLDguJrguLAKK+C4oeC4sOC4leC4suC4lAor4Lih4Liw4LiV4Liy4Lir4Liw4Lij4Li1CivguKHguLDguJXguLUKK+C4oeC4sOC4leC4tuC5iOC4hwor4Lih4Liw4LiV4Li34LmL4LiZCivguKHguLDguJXguLnguKEKK+C4oeC4sOC5geC4leC4gQor4Lih4Liw4LiZ4Liy4LinCivguKHguLDguJvguKPguLLguIcKK+C4oeC4sOC4m+C4o+C4tOC4hwor4Lih4Liw4Lib4LmI4Lit4LiHCivguKHguLDguJ3guYjguK0KK+C4oeC4sOC4nuC4o+C5ieC4suC4pwor4Lih4Liw4Lie4Lil4Lix4LiaCivguKHguLDguJ7guLnguJQKK+C4oeC4sOC5geC4nuC4mQor4Lih4Liw4LmB4Lie4Lij4LmJ4LinCivguKHguLDguYDguJ/guLfguK3guIcKK+C4oeC4sOC5geC4n+C4mQor4Lih4Liw4LmE4LifCivguKHguLDguKHguYjguKfguIcKK+C4oeC4sOC4oeC5iOC4suC4pwor4Lih4Liw4Lih4Li14LmICivguKHguLDguKHguLfguYjguJkKK+C4oeC4sOC4oeC4uOC4lAor4Lih4Liw4LmA4Lih4LitCivguKHguLDguYDguKHguLXguKIKK+C4oeC4sOC5gOC4oeC4t+C5iOC4reC4ogor4Lih4Liw4LmB4LihCivguKHguLDguKLguIcKK+C4oeC4sOC4ouC4oQor4Lih4Liw4Lij4LiwCivguKHguLDguKPguLTguJQKK+C4oeC4sOC4o+C4t+C4mQor4Lih4Liw4Lij4Li44LihCivguKHguLDguKPguLjguKHguKHguLDguJXguLjguYnguKEKK+C4oeC4sOC5gOC4o+C5h+C4hwor4Lih4Liw4LmA4Lij4Li34LmI4Lit4LiHCivguKHguLDguYLguKPguIcKK+C4oeC4sOC4peC4sOC4geC4rQor4Lih4Liw4Lil4Liy4Lij4Lit4LiB4Lix4LiZCivguKHguLDguKXguLMKK+C4oeC4sOC4peC4tAor4Lih4Liw4Lil4Li04LiZCivguKHguLDguKXguLTguYjguKEKK+C4oeC4sOC4peC4tOC5gOC4peC4t+C5ieC4reC4ogor4Lih4Liw4Lil4Li04Lit4LmI4Lit4LiHCivguKHguLDguKXguLfguYjguJkKK+C4oeC4sOC4peC4t+C4oeC4lOC4swor4Lih4Liw4Lil4Li44Lil4Li1CivguKHguLDguKfguLLguKMKK+C4oeC4sOC4q+C4peC4tOC5iOC4oQor4Lih4Liw4Lir4Lin4LiUCivguKHguLDguKvguLDguKvguKHguLHguJQKK+C4oeC4sOC4q+C4seC4pQor4Lih4Liw4Lir4Liy4LiUCivguKHguLDguKvguLTguYjguIcKK+C4oeC4sOC5gOC4q+C4oeC4t+C5iOC4reC4ogor4Lih4Liw4Lit4Li24LiBCivguKHguLDguK7guK3guIHguIHguLLguJnguLUKK+C4oeC4seC4gQor4Lih4Lix4LiB4LiB4Liw4Lil4Li14Lic4LilCivguKHguLHguIHguIHguLDguKrguLHguJkKK+C4oeC4seC4geC4guC4sAor4Lih4Lix4LmI4LiB4LiC4Lix4LmJ4LiBCivguKHguLHguIHguILguLTguIHguLIKK+C4oeC4seC4geC4guC4tOC4geC4suC4iuC4suC4leC4tAor4Lih4Lix4LiB4LiP4LiB4LiwCivguKHguLHguIHguI/guLAKK+C4oeC4seC4hOC4hOC4sAor4Lih4Lix4LiE4LiE4Li44LmA4LiX4Lio4LiB4LmMCivguKHguLHguITguKrguLTguKPguLAKK+C4oeC4seC4huC4p+C4sgor4Lih4Lix4LiG4Lin4Liy4LiZCivguKHguLHguYjguIcKK+C4oeC4seC4h+C4geC4hwor4Lih4Lix4LiH4LiB4LijCivguKHguLHguIfguIHguLgKK+C4oeC4seC4h+C4hOC4peC4sAor4Lih4Lix4LiH4LiE4LmI4LiyCivguKHguLHguIfguITguLjguJQKK+C4oeC4seC4h+C4leC4suC4mQor4Lih4Lix4LiH4Liq4LiwCivguKHguLHguIfguKrguLUKK+C4oeC4seC4h+C4q+C4h+C4seC4mQor4Lih4Lix4LiI4LiI4LiwCivguKHguLHguIjguIjguLgKK+C4oeC4seC4iOC4ieC4o+C4sAor4Lih4Lix4LiI4LiJ4Lij4Li04Lii4LiwCivguKHguLHguIjguInguKPguLUKK+C4oeC4seC4iOC4ieC4sAor4Lih4Lix4LiI4LiJ4LiyCivguKHguLHguIrguIrguLAKK+C4oeC4seC4iuC4iuC4suC4owor4Lih4Lix4LiN4LiI4LiBCivguKHguLHguI3guIjguLIKK+C4oeC4seC4jeC4iuC4tOC4qeC4kAor4Lih4Lix4LiN4LiK4Li04Lip4LiQ4LiyCivguKHguLHguI3guIrguLXguKMKK+C4oeC4seC4jeC4iuC4uAor4Lih4Lix4LiN4LiK4Li44Liq4LiyCivguKHguLHguI3guIrguLnguKrguLIKK+C4oeC4seC4jeC5gOC4iuC4j+C4kOC4sAor4Lih4Lix4LiN4LmA4LiK4LiP4LiQ4Li04LiB4LiyCivguKHguLHguI3guYDguIrguLXguKLguKMKK+C4oeC4seC4j+C4kOC4sAor4Lih4Lix4LiT4LiR4LiZ4LiyCivguKHguLHguJPguJHguLjguIEKK+C4oeC4seC4lAor4Lih4Lix4LiU4Lir4Lih4Li14LmICivguKHguLHguJTguKvguKHguLkKK+C4oeC4seC4lOC4q+C4p+C4suC4ogor4Lih4Lix4LiV4LiV4LiwCivguKHguLHguJXguJXguLHguKIKK+C4oeC4seC4leC4leC4sgor4Lih4Lix4LiV4LiV4Li04LiB4LiyCivguKHguLHguJXguJbguIEKK+C4oeC4seC4leC4luC4peC4uOC4h+C4hOC5jAor4Lih4Lix4LiV4LiiCivguKHguLHguJXguKrguKLguLAKK+C4oeC4seC4leC4quC4ouC4sgor4Lih4Lix4LiV4Liq4LijCivguKHguLHguJXguKrguKPguKPguKLguYwKK+C4oeC4seC4l+C4meC4sAor4Lih4Lix4LiX4LiZ4Li14Lii4LiwCivguKHguLHguJfguKLguLAKK+C4oeC4seC4mOC4ouC4oQor4Lih4Lix4LiY4Lii4Lih4LiyCivguKHguLHguJjguKLguLHguJnguKvguYwKK+C4oeC4seC4mOC4ouC4seC4quC4luC5jAor4Lih4Lix4LiZCivguKHguLHguYjguJkKK+C4oeC4seC4meC4lOC4tQor4Lih4Lix4LiZ4LiV4LiyCivguKHguLHguJnguJbguLAKK+C4oeC4seC4meC4l+C4tOC4owor4Lih4Lix4LiZ4LiX4Li04Lij4Liy4Lil4Lix4LiiCivguKHguLHguJnguYTguKrguYkKK+C4oeC4seC4mgor4Lih4Lix4Lia4LmGCivguKHguLHguYnguKEKK+C4oeC4seC4oeC4oeC4teC5iAor4Lih4Lix4LiiCivguKHguLHguKXguIEKK+C4oeC4seC4peC4peC4sAor4Lih4Lix4Lil4Lil4Li04LiB4LiyCivguKHguLHguKcKK+C4oeC4seC5iOC4pwor4Lih4Lix4Lio4Lii4LiyCivguKHguLHguKrguJTguIEKK+C4oeC4seC4quC4lOC4uAor4Lih4Lix4Liq4LiV4Liy4Lij4LmM4LiUCivguKHguLHguKrguJXguLgKK+C4oeC4seC4quC4oeC4seC5iOC4mQor4Lih4Lix4Liq4Lii4Li04LiUCivguKHguLHguKrguKPguLnguYgKK+C4oeC4seC4quC4peC4tOC4mQor4Lih4Lix4Liq4Liq4Li4CivguKHguLIKK+C4oeC5ieC4sgor4Lih4Liy4LiBCivguKHguLLguITguKrguLTguKPguLAKK+C4oeC4suC4huC4sAor4Lih4LmJ4Liy4LiHCivguKHguLLguIfguKrguLAKK+C4oeC4suC4k+C4ngor4Lih4Liy4LiT4Lin4Li04LiB4LiyCivguKHguLLguJQKK+C4oeC4suC4lOC4sgor4Lih4Liy4LiV4LiH4LiE4LmMCivguKHguLLguJXguKMKK+C4oeC4suC4leC4o+C4geC4suC4owor4Lih4Liy4LiV4Lij4LiI4Lit4LiU4Lij4LiWCivguKHguLLguJXguKPguJDguLLguJkKK+C4oeC4suC4leC4o+C5geC4oeC5ieC4mQor4Lih4Liy4LiV4Lij4Lin4LmI4LiyCivguKHguLLguJXguKPguLIKK+C4oeC4suC4leC4pAor4Lih4Liy4LiV4Lik4LiB4LiwCivguKHguLLguJXguKrguKPguKPguKLguYwKK+C4oeC4suC4leC4seC4h+C4hAor4Lih4Liy4LiV4LiyCivguKHguLLguJXguLLguKHguKvguLAKK+C4oeC4suC4leC4suC4oeC4q+C4seC4ouC4geC4sAor4Lih4Liy4LiV4Liy4Lih4Lir4Lix4Lii4LiB4LiyCivguKHguLLguJXguLLguKHguKvguLHguKLguKLguLTguIHguLIKK+C4oeC4suC4leC4suC4oeC4q+C4sgor4Lih4Liy4LiV4Li04LiBCivguKHguLLguJXguLTguIHguLIKK+C4oeC4suC4leC4tQor4Lih4Liy4LiV4Li4CivguKHguLLguJXguLjguIjguInguLIKK+C4oeC4suC4leC4uOC4o+C4h+C4hOC5jAor4Lih4Liy4LiV4Li44LmA4Lij4LioCivguKHguLLguJXguLjguKXguLAKK+C4oeC4suC4leC4uOC4peC4sgor4Lih4Liy4LiV4Li44Lil4Liy4LiZ4Li1CivguKHguLLguJXguLjguKXguLjguIfguITguYwKK+C4oeC4suC4lwor4Lih4Liy4LiX4LiZCivguKHguYnguLLguJfguKXguLLguKLguYLguKPguIcKK+C4oeC4suC4mOC4ouC4oeC4tOC4geC4sAor4Lih4Liy4LiY4Li44LijCivguKHguLLguJjguLjguKrguKMKK+C4oeC4suC4mOC4ueC4owor4Lih4Liy4LiZCivguKHguYjguLLguJkKK+C4oeC5ieC4suC4mQor4Lih4Liy4LiZ4LieCivguKHguYjguLLguJnguKXguLLguKIKK+C4oeC5iOC4suC4meC4reC4tOC4meC4l+C4meC4tOC4pQor4Lih4Liy4LiZ4LiwCivguKHguLLguJnguLHguJUKK+C4oeC4suC4meC4seC4qgor4Lih4Liy4LiZ4Li04LiVCivguKHguLLguJnguLUKK+C4oeC4suC4meC4uOC4qQor4Lih4Liy4LmC4LiZ4LiK4LiN4LmMCivguKHguLLguJoKK+C4oeC4suC4m+C4gQor4Lih4Liy4Lig4LiyCivguKHguYnguLLguKEKK+C4oeC4suC4ogor4Lih4LmI4Liy4LiiCivguKHguYnguLLguKIKK+C4oeC4suC4ouC4seC4hwor4Lih4Liy4Lii4LiyCivguKHguLLguKMKK+C4oeC4suC4o+C4hAor4Lih4Liy4Lij4LiE4Lit4Lir4Lit4LiiCivguKHguLLguKPguIrguLQKK+C4oeC4suC4o+C4iuC4tOC4lQor4Lih4Liy4Lij4LiU4LijCivguKHguLLguKPguJTguLIKK+C4oeC4suC4o+C5jOC4lOC4tOC4geC4o+C4suC4quC5jAor4Lih4Liy4Lij4Lic4LiI4LiNCivguKHguLLguKPguKLguLIKK+C4oeC4suC4o+C4ouC4suC4lwor4Lih4Liy4Lij4Lin4Li04LiK4Lix4LiiCivguKHguLLguKPguKfguLTguIrguLTguJUKK+C4oeC4suC4o+C5gOC4p+C4leC4suC4pQor4Lih4Liy4Lij4Lio4Lij4Li1CivguKHguLLguKPguKnguLIKK+C4oeC4suC4o+C4quC4seC4h+C4hOC4oQor4Lih4Liy4Lij4Lir4Lix4Lin4LiC4LiZCivguKHguLLguKPguKvguLHguKfguYPguIgKK+C4oeC4suC4o+C4sAor4Lih4Liy4Lij4Liy4LiY4Lit4LiZCivguKHguYnguLLguKPguLMKK+C4oeC4suC4o+C4tAor4Lih4Liy4Lij4Li04LiVCivguKHguLLguKPguLTguKnguLAKK+C4oeC4suC4o+C4tOC4quC4sAor4Lih4Liy4Lij4Li44LiVCivguKHguLLguKPguLjguKHguKHguLLguJXguLjguYnguKEKK+C4oeC4suC4peC4ouC5jAor4Lih4Liy4Lil4Lix4LiiCivguKHguLLguKXguLIKK+C4oeC4suC4peC4suC4leC4tQor4Lih4Liy4Lil4Liy4LmA4Lij4Li14LiiCivguKHguLLguKXguLMKK+C4oeC4suC4peC4tOC4meC4tQor4Lih4Liy4Lil4Li1CivguKHguLLguKXguLjguJUKK+C4oeC4suC4p+C4quC4sAor4Lih4Liy4Lin4Liy4LijCivguKHguLLguKgKK+C4oeC4suC4qgor4Lih4Liy4Liq4LiBCivguKHguYnguLLguKrguLDguJrguLHguJTguIHguLXguJoKK+C4oeC4suC4q+C5jAor4Lih4LmI4Liy4Lir4LmMCivguKHguLLguKvguLTguKoKK+C4oeC5iOC4suC5gOC4q+C4oeC4teC5iOC4ouC4pwor4Lih4Liy4Lis4LiBCivguKHguYnguLLguK3guYnguKfguJkKK+C4oeC4s+C5gOC4peC4t+C4reC4hwor4Lih4Li0CivguKHguLTguIQKK+C4oeC4tOC5iOC4hwor4Lih4Li04LiH4LmC4LiECivguKHguLTguIjguInguLIKK+C4oeC4tOC4iuC4iuC4seC4meC4meC4suC4o+C4tQor4Lih4Li04LiL4LiL4Lix4LiHCivguKHguLTguJQKK+C4oeC4tOC4lOC4q+C4oeC4tQor4Lih4Li04LiV4LijCivguKHguLTguJXguLQKK+C4oeC4tOC4luC4ouC4sgor4Lih4Li04LiW4Li44LiZCivguKHguLTguJfguJjguLAKK+C4oeC4tOC4l+C4mOC4tQor4Lih4Li04LiZ4LiV4Lij4LiyCivguKHguLTguJnguJXguLIKK+C4oeC4tOC4meC4q+C4oeC5ieC4rQor4Lih4Li04LiZ4LmI4LiyCivguKHguLTguJnguYjguLLguKXguYjguLAKK+C4oeC4tOC4meC5iOC4suC5gOC4peC5iOC4sgor4Lih4Li04LmJ4LihCivguKHguLTguKLguLIKK+C4oeC4tOC5hOC4ogor4Lih4Li04Lij4Lix4LiZ4LiV4Li1CivguKHguLTguKXguKXguLTguIHguKPguLHguKEKK+C4oeC4tOC4peC4peC4tOC4muC4suC4o+C5jAor4Lih4Li04Lil4Lix4LiB4LiC4LiwCivguKHguLTguKXguLHguIHguILguLkKK+C4oeC4tOC4peC4suC4lQor4Lih4Li04Lil4Li04LmA4Lih4LiV4LijCivguKHguLTguKrguIHguKPguLUKK+C4oeC4tOC4quC4i+C4sgor4Lih4Li1CivguKHguLXguYgKK+C4oeC4teC4lAor4Lih4Li14LiU4Lii4Lix4LiaCivguKHguLXguYDguJfguJkKK+C4oeC4teC4mQor4Lih4Li14LmI4Liq4Lix4LmJ4LinCivguKHguLbguIEKK+C4oeC4tuC4hwor4Lih4Li24LiH4Lin4Liy4Lie4Liy4LmC4Lin4LiiCivguKHguLbguJkKK+C4oeC4t+C4lAor4Lih4Li34LiZCivguKHguLfguYjguJkKK+C4oeC4t+C4rQor4Lih4Li34LmJ4LitCivguKHguLgKK+C4oeC4uOC4gQor4Lih4Li44LiB4LiU4LiyCivguKHguLjguIHguJTguLLguKvguLLguKMKK+C4oeC4uOC4geC4uOC4owor4Lih4Li44LiB4Li44LilCivguKHguLjguIIKK+C4oeC4uOC5guC4guC5guC4peC4geC4meC4sAor4Lih4Li44LiE4LiE4LiwCivguKHguLjguITguJjguYwKK+C4oeC4uOC4hOC4owor4Lih4Li44LiHCivguKHguLjguYjguIcKK+C4oeC4uOC5ieC4hwor4Lih4Li44LiH4LiB4Lij4Liw4LiV4LmI4Liy4LiiCivguKHguLjguIjguInguLIKK+C4oeC4uOC4iOC4mQor4Lih4Li44LiI4Lil4Li04LiZ4LiX4LmMCivguKHguLjguI3guIjguJnguLAKK+C4oeC4uOC4jeC4igor4Lih4Li44LiQ4Li0CivguKHguLjguJPguJEKK+C4oeC4uOC4k+C4keC4gQor4Lih4Li44LiUCivguKHguLjguJUKK+C4oeC4uOC4leC4leC4sAor4Lih4Li44LiV4LiV4LiyCivguKHguLjguJXguJXguLQKK+C4oeC4uOC4leC4tAor4Lih4Li44LiV4Li04LiH4LiE4LmMCivguKHguLjguJfguIQKK+C4oeC4uOC4l+C4hOC4owor4Lih4Li44LiX4LiX4LiyCivguKHguLjguJfguJjguIrguLAKK+C4oeC4uOC4l+C4mOC4sgor4Lih4Li44LiX4Lij4LiyCivguKHguLjguJfguKPguLTguIHguLIKK+C4oeC4uOC4l+C4sOC4peC4uAor4Lih4Li44LiX4LiyCivguKHguLjguJfguLTguIHguLIKK+C4oeC4uOC4l+C4tOC4h+C4hOC5jAor4Lih4Li44LiX4Li04LiV4LiyCivguKHguLjguJfguLTguJkKK+C4oeC4uOC4l+C4uAor4Lih4Li44LmI4LiZCivguKHguLjguJnguLQKK+C4oeC4uOC4meC4tQor4Lih4Li44LiaCivguKHguLjguJrguYYKK+C4oeC4uOC4oQor4Lih4Li44LmI4LihCivguKHguLjguYnguKEKK+C4oeC4uOC5iOC4ogor4Lih4Li44Lij4LiKCivguKHguLjguKPguJjguLIKK+C4oeC4uOC4peC4quC4sAor4Lih4Li44Lil4Li44LiVCivguKHguLjguKXguLkKK+C4oeC4uOC4quC4peC4tOC4oQor4Lih4Li44Liq4LiwCivguKHguLjguKrguLIKK+C4oeC4uOC4quC4tOC4gQor4Lih4Li44Lir4LiH4Li04LiUCivguKHguLjguKvguJnguYjguLLguKIKK+C4oeC4uOC4q+C4uOC4lQor4Lih4Li54LiBCivguKHguLnguIHguKHguLHguJkKK+C4oeC4ueC4geC4q+C4peC4p+C4hwor4Lih4Li54LiL4Lix4LiHCivguKHguLnguYDguIvguK0KK+C4oeC4ueC4leC4owor4Lih4Li54LmI4LiX4Li54LmICivguKHguLnguJkKK+C4oeC4ueC4oeC4oeC4suC4oQor4Lih4Li54Lij4LiU4Li1CivguKHguLnguKPguJXguLQKK+C4oeC4ueC4o+C4mOC4sgor4Lih4Li54LilCivguKHguLnguKXguLIKK+C4oeC4ueC4peC4tOC4geC4suC4geC4owor4Lih4Li54LmI4Lil4Li14LmICivguKHguLnguYjguYDguKXguYgKK+C4oeC4ueC4quC4tOC4gQor4LmA4LihCivguYDguKHguYfguIEKK+C5gOC4oeC4geC4sOC5gOC4ruC4tOC4o+C4leC4i+C5jAor4LmA4Lih4LiC4Lil4LiyCivguYDguKHguIYKK+C5gOC4oeC4huC4ieC4suC4ogor4LmA4Lih4LiG4Lie4Lix4LiUCivguYDguKHguYfguIcKK+C5gOC4oeC4h+C4reC4sOC4m+C4sgor4LmA4Lih4LmH4LiUCivguYDguKHguJXguJXguLIKK+C5gOC4oeC4leC5hOC4leC4o+C4ogor4LmA4Lih4LiV4LijCivguYDguKHguJXguKPguLTguIEKK+C5gOC4oeC4leC4o+C4tOC4geC4leC4seC4mQor4LmA4Lih4LiW4Li44LiZCivguYDguKHguJcKK+C5gOC4oeC4l+C4meC4tQor4LmA4Lih4LiX4Li04LiZ4Li1CivguYDguKHguJfguLTguKXguYHguK3guKXguIHguK3guK7guK3guKXguYwKK+C5gOC4oeC5guC4lwor4LmA4Lih4LiYCivguYDguKHguJjguLIKK+C5gOC4oeC4mOC4suC4p+C4tQor4LmA4Lih4LiY4Li1CivguYDguKHguJkKK+C5gOC4oeC5iOC4mQor4LmA4Lih4LmJ4LiZCivguYDguKHguJnguYDguJTguKfguLXguYDguKXguLXguKLguKEKK+C5gOC4oeC4meC4l+C4reC4pQor4LmA4Lih4LiZ4Li5CivguYDguKHguYnguKEKK+C5gOC4oeC4ouC5jOC5gOC4lOC4ouC5jAor4LmA4Lih4Lij4Lix4LiiCivguYDguKHguKPguLgKK+C5gOC4oeC4peC5jAor4LmA4Lih4Lil4LiBCivguYDguKHguKXguYfguJQKK+C5gOC4oeC4peC4t+C4reC4hwor4LmA4Lih4Lil4Li34LmI4Lit4LiiCivguYDguKHguKXguLfguYnguK3guKIKK+C5gOC4oeC4qQor4LmA4Lih4LirCivguYDguKHguKvguYwKK+C5gOC4oeC4q+C4mQor4LmA4Lih4LiwCivguYDguKHguLIKK+C5gOC4oeC5iOC4sgor4LmA4Lih4LmJ4LiyCivguYDguKHguYnguLLguYDguITguYnguLIKK+C5gOC4oeC4suC4o+C4tQor4LmA4Lih4Liy4Lil4Li04LiUCivguYDguKHguLLguKXguLUKK+C5gOC4oeC4suC4q+C5jAor4LmA4Lih4Liy4LiwCivguYDguKHguLLguLDguJXguLLguYLguKLguIHguLHguIEKK+C5gOC4oeC4tOC4hwor4LmA4Lih4Li04LiZCivguYDguKHguLTguKUKK+C5gOC4oeC4teC4ogor4LmA4Lih4Li14Lii4LiHCivguYDguKHguLXguYjguKLguIcKK+C5gOC4oeC4teC5ieC4ouC4mQor4LmA4Lih4Li14LmJ4Lii4Lin4LmGCivguYDguKHguLfguK0KK+C5gOC4oeC4t+C5iOC4rQor4LmA4Lih4Li34LmJ4LitCivguYDguKHguLfguK3guIEKK+C5gOC4oeC4t+C4reC4hwor4LmA4Lih4Li34Lit4LiaCivguYDguKHguLfguYjguK3guKIKK+C5geC4oeC5iAor4LmB4Lih4LmJCivguYHguKHguIEKK+C5geC4oeC4geC4meC4teC5gOC4i+C4teC4ouC4oQor4LmB4Lih4LiHCivguYHguKHguIfguIHguLLguJnguLTguJkKK+C5geC4oeC4h+C4geC4suC4meC4teC4qgor4LmB4Lih4LiH4Lib4Liy4LiB4LiI4Lit4LiaCivguYHguKHguIfguYTguJ/guYDguJTguLfguK3guJnguKvguYnguLIKK+C5geC4oeC5iOC4h+C4oeC5ieC4suC4hwor4LmB4Lih4LiH4Lil4Lix4LiBCivguYHguKHguYjguJXguLDguIfguLLguKcKK+C5geC4oeC5iOC4leC4suC4ogor4LmB4Lih4LiZCivguYHguKHguYjguJkKK+C5geC4oeC5ieC4mQor4LmB4Lih4LmJ4LiZ4LmA4LiC4Li14Lii4LiZCivguYHguKHguJnguJTguLLguKPguLTguJkKK+C5geC4oeC5iOC4oeC5iOC4suC4meC4peC4reC4h+C5hOC4mQor4LmB4Lih4LijCivguYHguKHguKXguIcKK+C5geC4oeC4peC4mgor4LmB4Lih4LinCivguYHguKHguYnguKcKK+C5geC4oeC4sAor4LmC4LihCivguYLguKHguYgKK+C5guC4oeC5iQor4LmC4Lih4LiBCivguYLguKHguIHguILguYwKK+C5guC4oeC4geC5guC4hOC4gQor4LmC4Lih4LiB4Lip4LiwCivguYLguKHguIHguLjguKUKK+C5guC4oeC4huC4sAor4LmC4Lih4LiG4Li14Lii4LiwCivguYLguKHguIcKK+C5guC4oeC5iOC4hwor4LmC4Lih4LiH4LiE4Lij4Li44LmI4LihCivguYLguKHguYDguJXguYfguKUKK+C5guC4oeC4l+C4meC4sgor4LmC4Lih4LiZCivguYLguKHguYDguJnguJXguYwKK+C5guC4oeC5guC4meC5geC4i+C5h+C4geC4hOC4suC5hOC4o+C4lOC5jAor4LmC4Lih4LmE4LiZ4LiiCivguYLguKHguKHguLnguKvguYwKK+C5guC4oeC4oeC4ueC4q+C4sAor4LmC4Lih4LmA4LihCivguYLguKHguKPguLIKK+C5guC4oeC4o+C4tQor4LmC4Lih4LmA4Lij4LioCivguYLguKHguKXguLTguJrguJTguLXguJnguLHguKEKK+C5guC4oeC4peC4tQor4LmC4Lih4LmA4Lil4LiB4Li44LilCivguYLguKHguKkKK+C5guC4oeC4qeC4gQor4LmC4Lih4Lip4LiTCivguYLguKHguYDguKrguKoKK+C5guC4oeC5iOC4q+C5jAor4LmC4Lih4Lir4LiwCivguYLguKHguYLguKsKK+C5hOC4oeC4geC4sgor4LmE4Lih4LiE4Lij4Lit4LiZCivguYTguKHguYLguITguIHguKPguLHguKEKK+C5hOC4oeC5guC4hOC4o+C4n+C4tOC4peC5jOC4oQor4LmE4Lih4LmC4LiE4Lij4LmC4Lif4LiZCivguYTguKHguYLguITguKPguKHguLTguYDguJXguK3guKPguYwKK+C5hOC4oeC5guC4hOC4o+C5gOC4oeC4leC4owor4LmE4Lih4LmC4LiE4Lij4Lil4Li04LiV4LijCivguYTguKHguYLguITguKPguYDguKfguJ8KK+C5hOC4oeC4leC4o+C4tQor4LmE4Lih4LmI4LmE4Lih4LmJCivguYTguKHguKLguKPguLLguJoKK+C5hOC4oeC4peC5jAor4LiiCivguKLguIEKK+C4ouC4geC4geC4o+C4sOC4muC4seC4leC4owor4Lii4LiB4LiZCivguKLguIcKK+C4ouC4h+C4ouC4uOC4l+C4mOC5jAor4Lii4LiH4LmC4Lii4LmICivguKLguIrguLjguKPguYDguKfguJcKK+C4ouC4leC4tAor4Lii4LiW4LiyCivguKLguYjguJkKK+C4ouC4meC4leC5jAor4Lii4LiZ4LiV4Lij4LmMCivguKLguKEKK+C4ouC4oeC4gQor4Lii4Lih4LmC4LiU4LiiCivguKLguKHguJnguLIKK+C4ouC4oeC4pQor4Lii4Lij4Lij4Lii4LiHCivguKLguKUKK+C4ouC4pwor4Lii4Lin4LiB4Liq4LiyCivguKLguKfguIcKK+C4ouC4p+C4lAor4Lii4Lin4LiU4Lii4Liy4LiZCivguKLguKfguJkKK+C4ouC4p+C4mgor4Lii4LmJ4Lin4LiiCivguKLguKfguKPguKLguLLguJXguKMKK+C4ouC4p+C4sgor4Lii4Lin4Liy4LiE4Li4CivguKLguKgKK+C4ouC5guC4qgor4Lii4LitCivguKLguK3guIEKK+C4ouC4reC4geC4ouC5ieC4reC4mQor4Lii4LmH4Lit4LiB4LmB4Lii4LmH4LiBCivguKLguYfguK3guIHguYHguKLguYfguIHguYYKK+C4ouC4reC4hwor4Lii4LmI4Lit4LiHCivguKLguYnguK3guIcKK+C4ouC4reC4h+C5hgor4Lii4LmI4Lit4LiH4LmA4Lir4LiH4LmH4LiUCivguKLguK3guJQKK+C4ouC4reC4lOC4iOC4suC4gQor4Lii4Lit4LiZCivguKLguYnguK3guJkKK+C4ouC4reC4mgor4Lii4Lit4LihCivguKLguYjguK3guKEKK+C4ouC5ieC4reC4oQor4Lii4LmI4Lit4LiiCivguKLguYnguK3guKIKK+C4ouC5ieC4reC5geC4ouC5iQor4Lii4LiwCivguKLguYjguLAKK+C4ouC4sOC4h+C4seC4meC4iOC4sOC4hOC4seC4mgor4Lii4Liw4Lii4Lit4LiaCivguKLguLDguKLguLHguJkKK+C4ouC4sOC4ouC4seC4mgor4Lii4Liw4Lii4Liy4LiZCivguKLguLDguKLguYnguLLguKIKK+C4ouC4sOC4ouC5ieC4suC4pwor4Lii4Liw4LmB4Lii4LmJ4LiHCivguKLguLDguKvguLTguJfguLIKK+C4ouC4seC4gQor4Lii4Lix4LiB4LiC4LmMCivguKLguLHguIHguILguLTguJnguLUKK+C4ouC4seC4geC5gOC4nuC4o+C4teC4ogor4Lii4Lix4LiB4Lii4Li14LmI4Lii4Lix4LiB4Lii4Lix4LiZCivguKLguLHguIHguKLguLXguYjguKLguLHguIHguKvguKLguLIKK+C4ouC4seC4geC5geC4ouC5iOC4ouC4seC4geC4ouC4seC4mQor4Lii4Lix4LiB4Lip4LmMCivguKLguLHguIHguKnguLTguJPguLUKK+C4ouC4seC4geC4qeC4tQor4Lii4Lix4LiB4Lir4Lii4Liy4LinCivguKLguLHguIcKK+C4ouC4seC5ieC4hwor4Lii4Lix4LiH4LiB4Liy4Lir4Lil4LiyCivguKLguLHguYjguIfguKLguLfguJkKK+C4ouC4seC4h+C4q+C4ouC4seC4hwor4Lii4Lix4LiK4LmC4LiN4Lib4Lin4Li14LiVCivguKLguLHguIrguJkKK+C4ouC4seC4iuC4oeC4suC4mQor4Lii4Lix4LiNCivguKLguLHguI3guI3guLAKK+C4ouC4seC4jeC4jeC4seC4h+C4hOC5jAor4Lii4Lix4LiQ4Li0CivguKLguLHguJDguLTguKHguJjguLjguIHguLIKK+C4ouC4seC4lAor4Lii4Lix4LiV4Li04Lig4Lix4LiH4LiE4LmMCivguKLguLHguJkKK+C4ouC4seC5iOC4mQor4Lii4Lix4LiZ4LiV4LmMCivguKLguLHguJnguJXguKPguYwKK+C4ouC4seC5iOC4meC4leC4sOC4meC4tQor4Lii4Lix4LiZ4LmA4Lii4LmJ4LiyCivguKLguLHguJoKK+C4ouC4seC4muC5hgor4Lii4Lix4Lia4Lii4Lix4LmJ4LiHCivguKLguLHguYjguKcKK+C4ouC4seC5ieC4pwor4Lii4Lix4LmJ4Lin4LmA4Lii4Li14LmJ4LiiCivguKLguLHguKfguKPguKLguLLguJXguKMKK+C4ouC4seC4qeC4j+C4tAor4Lii4LiyCivguKLguYjguLIKK+C4ouC4suC4gQor4Lii4Liy4LiECivguKLguLLguITguLgKK+C4ouC4suC4hOC4uQor4Lii4Liy4LiHCivguKLguYjguLLguIcKK+C4ouC5iOC4suC4h+C4l+C4o+C4suC4ogor4Lii4Liy4LiI4LiBCivguKLguLLguIjguJkKK+C4ouC4suC4iOC4meC4gQor4Lii4Liy4LiI4LiZ4LiyCivguKLguLLguYTguInguJkKK+C4ouC4suC4iuC4gQor4Lii4Liy4LiUCivguKLguLLguJTguLIKK+C4ouC4suC4leC4meC4sgor4Lii4Liy4LiV4LijCivguKLguLLguJXguKPguLIKK+C4ouC4suC4mQor4Lii4LmI4Liy4LiZCivguKLguLLguJnguIEKK+C4ouC5iOC4suC4meC4geC4reC4muC4meC4suC4hwor4Lii4LmI4Liy4LiZ4LiX4Lij4Liy4LiiCivguKLguYjguLLguJnguJ7guLLguYLguKvguKEKK+C4ouC5iOC4suC4meC4oeC4hOC4p+C4suC4ogor4Lii4Liy4LiZ4Lih4Liy4LioCivguKLguYjguLLguJnguKXguLTguYDguKDguLIKK+C4ouC5iOC4suC4meC4suC4hwor4Lii4LmI4Liy4LiZ4Liy4LiH4LiK4LmJ4Liy4LiHCivguKLguLLguJnguLUKK+C4ouC4suC4meC4uOC4oeC4suC4qAor4Lii4Liy4LiaCivguKLguLLguJrguYYKK+C4ouC5iOC4suC4oQor4Lii4Liy4Lih4LiB4Liy4Lil4Li04LiBCivguKLguLLguKHguYDguIHguLIKK+C4ouC4suC4oeC4seC4geC4geC4suC4owor4Lii4Liy4Lih4Li04LiBCivguKLguLLguKIKK+C4ouC5ieC4suC4ogor4Lii4Liy4Lii4Li1CivguKLguLLguKcKK+C4ouC5ieC4suC4pwor4Lii4Liy4Lin4LiB4Liy4Lil4Li04LiBCivguKLguLLguKfguIrguLXguKfguLTguIEKK+C4ouC4suC4p+C4seC4qgor4Lii4Liy4Lir4Lii4Lix4LiHCivguKLguLLguKvguKLguLIKK+C4ouC4suC4q+C4ouC4tQor4Lii4LizCivguKLguYjguLMKK+C4ouC5ieC4swor4Lii4Liz4Lii4Liy4LihCivguKLguLPguYDguKLguLXguKIKK+C4ouC5iOC4s+C5geC4ouC5iAor4Lii4LmJ4Liz4LmA4Lir4Lii4LitCivguKLguLTguIEKK+C4ouC4tOC4geC5hgor4Lii4Li04LiHCivguKLguLTguYjguIcKK+C4ouC4tOC4h+C4n+C4seC4mQor4Lii4Li04LiP4LiQ4LiwCivguKLguLTguJAKK+C4ouC4tOC4mQor4Lii4Li04LiaCivguKLguLTguJrguYYKK+C4ouC4tOC4m+C4i+C4seC4oQor4Lii4Li04Lib4LiL4Li1CivguKLguLTguYnguKEKK+C4ouC4tOC4oeC4meC4suC4quC4leC4tOC4gQor4Lii4Li04Lir4Lin4LiyCivguKLguLUKK+C4ouC4teC5iAor4Lii4Li14LmI4LiB4LmI4LiyCivguKLguLXguYjguYDguIEKK+C4ouC4teC5iOC5gOC4guC5iOC4hwor4Lii4Li14LmI4LmC4LiWCivguKLguLXguJkKK+C4ouC4teC5iOC5guC4m+C5iQor4Lii4Li14LmI4Lig4Li54LmICivguKLguLXguKPguLLguJ8KK+C4ouC4teC5iOC4quC4gQor4Lii4Li14LmI4Liq4LiHCivguKLguLXguYjguKrguJkKK+C4ouC4teC5iOC4quC4suC4mQor4Lii4Li14LmI4Liq4LmI4Liy4LiZCivguKLguLXguYjguKrguLTguJoKK+C4ouC4teC5iOC4quC4uOC5iOC4mQor4Lii4Li14LmI4Lir4Lij4LiwCivguKLguLXguYjguKvguKPguYjguLIKK+C4ouC4teC5iOC4q+C5ieC4rQor4Lii4Li14LmI4Lir4Li44LiaCivguKLguLbguIHguKLguLfguK0KK+C4ouC4t+C4lAor4Lii4Li34LiZCivguKLguLfguYjguJkKK+C4ouC4t+C4oQor4Lii4Li34LmJ4LitCivguKLguLgKK+C4ouC4uOC4geC4geC4o+C4sOC4muC4seC4leC4owor4Lii4Li44LiB4LiU4Li0CivguKLguLjguIHguJXguYwKK+C4ouC4uOC4geC4leC4tAor4Lii4Li44LiECivguKLguLjguITguJnguJjguKMKK+C4ouC4uOC4hOC4pQor4Lii4Li44LiE4Lil4Lia4Liy4LiXCivguKLguLjguITguLHguJnguJXguYwKK+C4ouC4uOC4hOC4seC4meC4mOC4owor4Lii4Li44LiE4Li44LiZ4LiY4LijCivguKLguLjguIcKK+C4ouC4uOC5iOC4hwor4Lii4Li44LmJ4LiHCivguKLguLjguIfguIHguKfguLLguJQKK+C4ouC4uOC4h+C4m+C4seC4lAor4Lii4Li44LiUCivguKLguLjguJUKK+C4ouC4uOC4leC4tAor4Lii4Li44LiX4LiY4LmMCivguKLguLjguJfguJjguJnguLIKK+C4ouC4uOC4mgor4Lii4Li44LmI4Lia4Lii4Lix4LmI4LiaCivguKLguLjguJrguKLguLTguJoKK+C4ouC4uOC4muC4pQor4Lii4Li44Lie4LiU4Li1CivguKLguLjguJ7guLIKK+C4ouC4uOC4nuC4suC4mQor4Lii4Li44Lie4Liy4Lie4Liy4LilCivguKLguLjguJ7guLLguJ7guLTguJkKK+C4ouC4uOC5iOC4oeC4ouC5iOC4suC4oQor4Lii4Li44LmI4LiiCivguKLguLjguYnguKIKK+C4ouC4uOC4o+C4muC4suC4leC4owor4Lii4Li44Lij4Lii4Liy4LiV4LijCivguKLguLjguKfguJTguLUKK+C4ouC4uOC4p+C4sgor4Lii4Li44Lin4Liy4LiZCivguKLguLjguKvguJrguLLguJXguKMKK+C4ouC4uQor4Lii4Li54LmICivguKLguLnguITguLLguKXguLTguJvguJXguLHguKoKK+C4ouC4ueC4hwor4Lii4Li54LmC4LiUCivguKLguLnguJbguLAKK+C4ouC4ueC4luC4tOC4geC4sgor4Lii4Li54Lib4LiwCivguKLguLnguKPguKLguLLguJXguKMKK+C4ouC4ueC4o+C4tOC4gQor4Lii4Li54LmA4Lij4LiZ4Lix4LiqCivguKLguLnguYDguKPguYDguJnguLXguKLguKEKK+C4ouC4ueC5guC4o+C5gOC4nuC4teC4ouC4oQor4Lii4Li54Lip4LiwCivguKLguLnguYjguK3guLXguYgKK+C5gOC4ouC5iQor4LmA4Lii4LmGCivguYDguKLguIcKK+C5gOC4ouC4i+C4uQor4LmA4Lii4LmH4LiUCivguYDguKLguYfguJkKK+C5gOC4ouC5h+C4meC4leC4suC5guC4nwor4LmA4Lii4LmH4LiZ4LmA4LiV4Liy4LmC4LifCivguYDguKLguYfguJoKK+C5gOC4ouC4oOC4uOC4ouC4ouC4sAor4LmA4Lii4LmJ4LiiCivguYDguKLguK0KK+C5gOC4ouC5iOC4rQor4LmA4Lii4Lit4Lij4Lih4Lix4LiZCivguYDguKLguK3guKcKK+C5gOC4ouC5iOC4reC4q+C4ouC4tOC5iOC4hwor4LmA4Lii4Lit4LiwCivguYDguKLguLIKK+C5gOC4ouC5ieC4sgor4LmA4Lii4Liy4Lin4LmMCivguYDguKLguLLguKfguJ7guLIKK+C5gOC4ouC4suC4p+C4nuC4suC4k+C4tQor4LmA4Lii4Liy4Lin4Lie4Liy4LiZCivguYDguKLguLTguIcKK+C5gOC4ouC4tOC4mQor4LmA4Lii4Li04LmI4LiZCivguYDguKLguLTguJnguKLguK0KK+C5gOC4ouC4tOC4muC5hgor4LmA4Lii4Li04Lia4Lii4Liy4LiaCivguYDguKLguLTguYnguKEKK+C5gOC4ouC4teC4ogor4LmA4Lii4Li14LmI4Lii4LiHCivguYDguKLguLXguKLguIfguJzguLIKK+C5gOC4ouC4teC5iOC4ouC4h+C4reC4ouC5iOC4suC4hwor4LmA4Lii4Li14Lii4LiU4Lii4Lix4LiUCivguYDguKLguLXguKLguJkKK+C5gOC4ouC4teC4ouC4mgor4LmA4Lii4Li14LmI4Lii4LihCivguYDguKLguLXguYjguKLguKHguKfguLTguKHguLLguJkKK+C5gOC4ouC4teC4ouC4o+C4muC4seC4mgor4LmA4Lii4Li14Lii4Lij4Lii4LiHCivguYDguKLguLXguKLguKcKK+C5gOC4ouC4teC5iOC4ouC4pwor4LmA4Lii4Li14LmI4Lii4Lin4LiH4Li14LinCivguYDguKLguLXguKLguKfguKLguIcKK+C5gOC4ouC4teC4ouC4p+C4ouC4sgor4LmA4Lii4Li34LitCivguYDguKLguLfguYjguK0KK+C5gOC4ouC4t+C5ieC4rQor4LmA4Lii4Li34Lit4LiBCivguYDguKLguLfguK3guIcKK+C5gOC4ouC4t+C5iOC4reC4hwor4LmA4Lii4Li34LmJ4Lit4LiHCivguYDguKLguLfguK3guJkKK+C5gOC4ouC4t+C5ieC4reC4mQor4LmB4Lii4LmICivguYHguKLguYkKK+C5geC4ouC4gQor4LmB4Lii4LiHCivguYHguKLguYjguIcKK+C5geC4ouC5ieC4hwor4LmB4Lii4LiH4LmB4Lii4LmICivguYHguKLguIfguYHguKLguYkKK+C5geC4ouC4mgor4LmB4Lii4LmH4LiaCivguYHguKLguKEKK+C5geC4ouC5ieC4oQor4LmB4Lii4LmB4LiqCivguYHguKLguLAKK+C5guC4ogor4LmC4Lii4LmJCivguYLguKLguIEKK+C5guC4ouC4geC4leC4o+C5jAor4LmC4Lii4LiE4LmA4LiB4LiT4LiR4LmMCivguYLguKLguITguKLguLAKK+C5guC4ouC4hOC4sAor4LmC4Lii4LiE4Li04LiZCivguYLguKLguITguLUKK+C5guC4ouC4hwor4LmC4Lii4LmI4LiH4LmGCivguYLguKLguIfguYLguKLguYgKK+C5guC4ouC4iuC4gQor4LmC4Lii4LiK4LiZ4LmMCivguYLguKLguIrguJnguLIKK+C5guC4ouC4lAor4LmC4Lii4LiVCivguYLguKLguJbguLTguIHguLAKK+C5guC4ouC4l+C4sOC4geC4sgor4LmC4Lii4LiY4LiyCivguYLguKLguJkKK+C5guC4ouC4meC4gQor4LmC4Lii4LiZ4Li04LmC4LiqCivguYLguKLguJnguLTguYLguKrguKHguJnguKrguLTguIHguLLguKMKK+C5guC4ouC4meC4tQor4LmC4Lii4Lie4LiZ4LiwCivguYLguKLguKEKK+C5guC4ouC5guC4qgor4LmD4LiiCivguYTguKIKK+C5hOC4ouC5iAor4LmE4Lii4LiU4Li1CivguYTguKLguYTguJ4KK+C5hOC4ouC5hOC4ogor4LmE4Lii4LmI4LmE4Lii4LmICivguKMKK+C4o+C4gQor4Lij4LiB4LiK4LmJ4Liy4LiHCivguKPguIHguJ/guYnguLIKK+C4o+C4hwor4Lij4LiH4LiB4Li44LmMCivguKPguIfguITguYwKK+C4o+C4h+C4o+C4reC4hwor4Lij4LiI4LiZ4LiyCivguKPguIjguYDguKPguIIKK+C4o+C4iOC5gOC4peC4ggor4Lij4LiI4Li04LiVCivguKPguIrguIHguLAKK+C4o+C4iuC4leC4sAor4Lij4LiK4LiZ4Li0CivguKPguIrguJnguLUKK+C4o+C4iuC4meC4teC4ouC5jAor4Lij4LiK4LiwCivguKPguJMKK+C4o+C4lAor4Lij4LiU4Li1CivguKPguJXguJnguLAKK+C4o+C4leC4sAor4Lij4LiV4Li0CivguKPguJYKK+C4o+C4luC4m+C4uOC4h+C4hOC4ngor4Lij4LiW4Lib4Li44LiH4LiE4LinCivguKPguJbguKLguLIKK+C4o+C4luC4suC4meC4tuC4gQor4Lij4LmA4LiW4Liq4Lig4LiwCivguKPguJcKK+C4o+C4l+C4meC4sAor4Lij4LiZCivguKPguYjguJkKK+C4o+C5ieC4mQor4Lij4LiZ4LiUCivguKPguJoKK+C4o+C4muC4qgor4Lij4Lia4Liy4LiNCivguKPguJ4KK+C4o+C4nuC4sgor4Lij4Lie4Li0CivguKPguJ7guLUKK+C4o+C4oQor4Lij4Lih4LiT4Li14Lii4LmMCivguKPguKHguKLguYwKK+C4o+C4oeC5gOC4ouC4qAor4Lij4Lii4LiwCivguKPguKfguIEKK+C4o+C4p+C4hwor4Lij4LmI4Lin4LiHCivguKPguKfguJQKK+C4o+C4p+C4mQor4Lij4LmI4Lin4LiZCivguKPguKfguJoKK+C4o+C4p+C4oQor4Lij4LmI4Lin4LihCivguKPguKfguKIKK+C4o+C4p+C4ouC5hgor4Lij4Lin4LiwCivguKPguKfguLQKK+C4o+C4p+C4tQor4Lij4Lio4LiZ4LiyCivguKPguKoKK+C4o+C4quC4gQor4Lij4Liq4LiZ4LiyCivguKPguKrguKrguLjguITguJnguJjguYwKK+C4o+C4quC4suC4ouC4meC5gOC4p+C4lwor4Lij4Liq4Li04LiBCivguKPguKvguLHguJcKK+C4o+C4q+C4seC4qgor4Lij4Lir4Lix4Liq4Lii4LmMCivguKPguKvguLTguJUKK+C4o+C5guC4qwor4Lij4LitCivguKPguYjguK0KK+C4o+C4reC4gQor4Lij4Lit4LiHCivguKPguYjguK3guIcKK+C4o+C5ieC4reC4hwor4Lij4Lit4LiH4LmA4LiH4LmH4LiHCivguKPguYjguK3guIfguYHguKPguYjguIcKK+C4o+C4reC4lAor4Lij4Lit4LiZCivguKPguYjguK3guJkKK+C4o+C5ieC4reC4mQor4Lij4LmI4Lit4LiZ4LiX4Lit4LiHCivguKPguK3guJoKK+C4o+C4reC4oQor4Lij4Lit4Lih4LiK4Lit4LihCivguKPguK3guKHguKPguYjguK0KK+C4o+C4reC4ogor4Lij4LmI4Lit4LiiCivguKPguYnguK3guKIKK+C4o+C5ieC4reC4ouC4o+C4uQor4Lij4LmI4Lit4LmB4Lij4LmICivguKPguLAKK+C4o+C4sOC4geC4sAor4Lij4Liw4LiB4LiyCivguKPguLDguIHguLMKK+C4o+C4sOC5gOC4geC4sOC4o+C4sOC4geC4sAor4Lij4Liw4LiE4LiZCivguKPguLDguITguLLguIcKK+C4o+C4sOC4hOC4suC4ogor4Lij4Liw4LmA4LiE4LmH4LiU4Lij4Liw4LiE4Liy4LiiCivguKPguLDguYHguITguLAKK+C4o+C4sOC4huC4seC4hwor4Lij4Liw4LiH4LihCivguKPguLDguIfguKHguYTguJ7guKMKK+C4o+C4sOC4h+C4seC4mgor4Lij4Liw4LiH4Lix4Lia4Lie4Li04LipCivguKPguLDguIfguLXguYgKK+C4o+C4sOC5geC4h+C5iQor4Lij4Liw4LmC4LiH4LiB4Lir4Li04LiZCivguKPguLDguIrguKfguKIKK+C4o+C4sOC4lOC4oQor4Lij4Liw4LiU4LiwCivguKPguLDguJTguLHguJoKK+C4o+C4sOC4lOC4sgor4Lij4Liw4LiU4LmI4Liy4LinCivguKPguLDguJTguLkKK+C4o+C4sOC5gOC4lOC5iOC4mQor4Lij4Liw4LmA4LiU4Li14Lii4LiHCivguKPguLDguYHguJQKK+C4o+C4sOC4leC4uQor4Lij4Liw4LiX4LiBCivguKPguLDguJfguJQKK+C4o+C4sOC4l+C4oQor4Lij4Liw4LiX4Lin4LiiCivguKPguLDguJfguK3guJQKK+C4o+C4sOC4l+C4sgor4Lij4Liw4LiX4Li24LiBCivguKPguLDguJfguLbguIcKK+C4o+C4sOC5geC4l+C4sAor4Lij4Liw4LiZ4Lix4LihCivguKPguLDguJnguLLguJQKK+C4o+C4sOC4meC4suC4mgor4Lij4Liw4LiZ4Liy4LihCivguKPguLDguJnguLLguKcKK+C4o+C4sOC5gOC4meC4mQor4Lij4Liw4LmA4LiZ4LiZ4Lij4Liw4LiZ4Liy4LiUCivguKPguLDguYDguJnguKPguLDguJnguLLguJQKK+C4o+C4sOC5gOC4meC4teC4ouC4lAor4Lij4Liw4LmB4LiZ4LiHCivguKPguLDguYHguJnguLAKK+C4o+C4sOC4muC4mgor4Lij4Liw4Lia4LihCivguKPguLDguJrguK3guJoKK+C4o+C4sOC4muC4seC4lAor4Lij4Liw4Lia4Lix4LiaCivguKPguLDguJrguLLguI0KK+C4o+C4sOC4muC4suC4lAor4Lij4Liw4Lia4Liy4LiZ4Li1CivguKPguLDguJrguLLguJnguLXguYkKK+C4o+C4sOC4muC4suC4ogor4Lij4Liw4Lia4LizCivguKPguLDguJrguLQKK+C4o+C4sOC4muC4tOC4pQor4Lij4Liw4Lia4Li34LitCivguKPguLDguJrguLgKK+C4o+C4sOC4muC4uQor4Lij4Liw4LmA4Lia4LiHCivguKPguLDguYDguJrguYfguIcKK+C4o+C4sOC5gOC4muC4tOC4lAor4Lij4Liw4LmA4Lia4Li14Lii4LiHCivguKPguLDguYDguJrguLXguKLguJkKK+C4o+C4sOC5gOC4muC4teC4ouC4mgor4Lij4Liw4LmB4Lia4LiaCivguKPguLDguYPguJoKK+C4o+C4sOC4oeC4seC4lOC4o+C4sOC4p+C4seC4hwor4Lij4Liw4Lih4LiyCivguKPguLDguKHguLLguJQKK+C4o+C4sOC5gOC4oeC4teC4ouC4owor4Lij4Liw4Lii4LmI4LitCivguKPguLDguKLguYjguK3guKEKK+C4o+C4sOC4ouC4sAor4Lij4Liw4Lii4Lix4LiHCivguKPguLDguKLguLHguYnguIcKK+C4o+C4sOC4ouC4seC4lAor4Lij4Liw4Lii4Lix4LiaCivguKPguLDguKLguYnguLIKK+C4o+C4sOC4ouC4suC4mQor4Lij4Liw4Lii4Liy4LiaCivguKPguLDguKLguLLguKHguKPguLDguKLguLHguJoKK+C4o+C4sOC4ouC4swor4Lij4Liw4Lii4Li04Lia4Lij4Liw4Lii4Lix4LiaCivguKPguLDguYLguKLguIcKK+C4o+C4sOC4o+C4p+C4ogor4Lij4Liw4Lij4Lit4LiHCivguKPguLDguKPguYjguK3guJkKK+C4o+C4sOC4o+C4seC4pwor4Lij4Liw4Lij4Liy4LiZCivguKPguLDguKPguYjguLLguKIKK+C4o+C4sOC4o+C4suC4pwor4Lij4Liw4Lij4Li04LiBCivguKPguLDguKPguLXguYgKK+C4o+C4sOC4o+C4tuC4hwor4Lij4Liw4Lij4Li34LmI4LiZCivguKPguLDguKPguLfguYnguJkKK+C4o+C4sOC5gOC4owor4Lij4Liw4LmA4Lij4LmICivguKPguLDguYDguKPguYnguIcKK+C4o+C4sOC5gOC4o+C5h+C4pwor4Lij4Liw4LmA4Lij4Li04LiHCivguKPguLDguYDguKPguLXguKLguIcKK+C4o+C4sOC5gOC4o+C4teC4ouC4oQor4Lij4Liw4LmA4Lij4Li34LmI4Lit4LiiCivguKPguLDguYHguKPguYgKK+C4o+C4sOC5geC4o+C4hwor4Lij4Liw4Lil4LiHCivguKPguLDguKXguKfguIcKK+C4o+C4sOC4peC4reC4gQor4Lij4Liw4Lil4Lix4LiUCivguKPguLDguKXguLbguIEKK+C4o+C4sOC4peC4uOC4gQor4Lij4Liw4Lil4Li44LiHCivguKPguLDguYDguKXguLTguIcKK+C4o+C4sOC5gOC4peC4teC4ouC4lAor4Lij4Liw4Lin4Lix4LiHCivguKPguLDguKfguLHguIfguYTguJ7guKMKK+C4o+C4sOC4p+C4seC4h+C4p+C4seC4mQor4Lij4Liw4Lin4Liy4LiHCivguKPguLDguKfguLLguJTguKPguLDguYTguKcKK+C4o+C4sOC4p+C4suC4oQor4Lij4Liw4Lin4Liy4LiiCivguKPguLDguKfguLTguIcKK+C4o+C4sOC5geC4p+C4hwor4Lij4Liw4LmB4Lin4LiU4Lij4Liw4Lin4Lix4LiHCivguKPguLDguYTguKcKK+C4o+C4sOC4quC4suC4ogor4Lij4Liw4Liq4LmI4Liz4Lij4Liw4Liq4Liy4LiiCivguKPguLDguKrguLUKK+C4o+C4sOC5gOC4quC4tOC4lOC4o+C4sOC4quC4seC4hwor4Lij4Liw4Lir4LiB4Lij4Liw4LmA4Lir4Li04LiZCivguKPguLDguKvguIcKK+C4o+C4sOC4q+C4p+C4ogor4Lij4Liw4Lir4Lin4LmI4Liy4LiHCivguKPguLDguKvguK3guIfguKPguLDguYHguKvguIcKK+C4o+C4sOC4q+C4reC4mgor4Lij4Liw4Lir4Lix4LiUCivguKPguLDguKvguLLguKIKK+C4o+C4sOC4q+C4uOC4ogor4Lij4Liw4LmA4Lir4LmH4LiICivguKPguLDguYDguKvguKIKK+C4o+C4sOC5gOC4q+C4o+C4sOC4q+C4mQor4Lij4Liw4LmA4Lir4Lir4LiZCivguKPguLDguYDguKvguKvguLHguJkKK+C4o+C4sOC5gOC4q+C4tOC4lAor4Lij4Liw4LmA4Lir4Li04LiZ4Lij4Liw4Lir4LiBCivguKPguLDguYHguKvguIEKK+C4o+C4sOC5geC4q+C4hwor4Lij4Liw4LmC4Lir4LiiCivguKPguLDguK3guKHguKPguLDguK3guLIKK+C4o+C4sOC4reC4sgor4Lij4Liw4Lit4Li04LiU4Lij4Liw4Lit4LiyCivguKPguLDguK3guLbguIEKK+C4o+C4sOC4reC4uAor4Lij4Liw4LmB4Lit4LiZCivguKPguLHguIEKK+C4o+C4seC4geC4guC5jAor4Lij4Lix4LiB4LiC4Liq4LiwCivguKPguLHguIHguILguLIKK+C4o+C4seC4geC4guC4tOC4lQor4Lij4Lix4LiB4LiU4LibCivguKPguLHguIHguJTguLAKK+C4o+C4seC4geC4leC4sAor4Lij4Lix4LiB4Lia4Li14LmJCivguKPguLHguIHguYDguKPguYgKK+C4o+C4seC4geC5geC4o+C5iQor4Lij4Lix4LiB4Lip4LmMCivguKPguLHguIHguKnguLIKK+C4o+C4seC4hwor4Lij4Lix4LmJ4LiHCivguKPguLHguIfguYHguIEKK+C4o+C4seC4h+C4hOC5jAor4Lij4Lix4LiH4LiE4Lin4Liy4LiZCivguKPguLHguIfguYHguIQKK+C4o+C4seC4h+C4meC4suC4mQor4Lij4Lix4LiH4Lij4Lit4LiHCivguKPguLHguIfguKfguLHguJQKK+C4o+C4seC4h+C4quC4tAor4Lij4Lix4LiH4Liq4Li04Lih4Lix4LiZ4LiV4Li44LmMCivguKPguLHguIfguKrguLTguKHguLIKK+C4o+C4seC4h+C4quC4tQor4Lij4Lix4LiH4Lir4Lii4Liy4LinCivguKPguLHguIjguInguLIKK+C4o+C4seC4igor4Lij4Lix4LiK4LiB4LiwCivguKPguLHguIrguIrguLgKK+C4o+C4seC4iuC4juC4suC4oOC4tOC5gOC4qeC4gQor4Lij4Lix4LiK4LiZ4LiwCivguKPguLHguIrguJnguLUKK+C4o+C4seC4jeC4iOC4p+C4mQor4Lij4Lix4LiP4LiQ4Liy4Lig4Li04Lib4Liy4Lil4LmC4LiZ4Lia4Liy4LiiCivguKPguLHguJAKK+C4o+C4seC4lAor4Lij4Lix4LiVCivguKPguLHguJXguITguJkKK+C4o+C4seC4leC4leC4seC4jeC4jeC4uQor4Lij4Lix4LiV4LiV4Li0CivguKPguLHguJXguJnguYwKK+C4o+C4seC4leC4meC4sAor4Lij4Lix4LiV4Lih4LiyCivguKPguLHguJYKK+C4o+C4seC4luC4ouC4sgor4Lij4Lix4LiX4LmA4LiX4Lit4Lij4LmM4Lif4Lit4Lij4LmM4LmA4LiU4Li14Lii4LihCivguKPguLHguJkKK+C4o+C4seC5ieC4mQor4Lij4Lix4LiZ4LiK4LiZ4Lij4Lix4LiZ4LmB4LiK4LiHCivguKPguLHguJnguJfguJQKK+C4o+C4seC4meC4l+C4p+C4ogor4Lij4Lix4LiZ4LiX4LizCivguKPguLHguJnguYHguJfguLAKK+C4o+C4seC4meC4mOC4sAor4Lij4Lix4LiaCivguKPguLHguKHguKDguLIKK+C4o+C4seC4oeC4oeC4teC5iAor4Lij4Lix4Lih4Lii4LmMCivguKPguLHguKIKK+C4o+C4seC4pwor4Lij4Lix4LmI4LinCivguKPguLHguYnguKcKK+C4o+C4seC4qOC4oeC4tOC4oeC4seC4leC4tAor4Lij4Lix4Lio4Lih4Li04Lih4Liy4LiZCivguKPguLHguKjguKHguLUKK+C4o+C4seC4qeC4juC4suC4geC4owor4Lij4Lix4Liq4Liq4LiwCivguKPguLIKK+C4o+C5iOC4sgor4Lij4LmJ4LiyCivguKPguLLguIEKK+C4o+C4suC4geC4qeC4qgor4Lij4Liy4LiB4LmC4Lip4LiqCivguKPguLLguIHguKrguLLguJQKK+C4o+C4suC4hOC4sAor4Lij4Liy4LiE4LiyCivguKPguLLguITguLTguJkKK+C4o+C4suC4hOC4tQor4Lij4Liy4LiHCivguKPguYjguLLguIcKK+C4o+C5ieC4suC4hwor4Lij4Liy4LiH4LiI4Li34LiUCivguKPguLLguIfguIrguLLguIcKK+C4o+C4suC4h+C4lOC4swor4Lij4Liy4LiH4LmB4LiU4LiHCivguKPguLLguIfguJnguLLguJkKK+C4o+C4suC4h+C4p+C4seC4pQor4Lij4Liy4LiKCivguKPguLLguIrguI3guLUKK+C4o+C4suC4iuC4lOC4seC4lAor4Lij4Liy4LiK4Lie4Lik4LiB4Lip4LmMCivguKPguLLguIrguKHguLLguJPguJ4KK+C4o+C4suC4iuC4ouC5jAor4Lij4Liy4LiK4LiwCivguKPguLLguIrguLHguJkKK+C4o+C4suC4iuC4seC4meC4ouC5jAor4Lij4Liy4LiK4Lix4LiiCivguKPguLLguIrguLIKK+C4o+C4suC4iuC4suC4ouC4leC4meC4sAor4Lij4Liy4LiK4Liy4Lin4LiU4Li1CivguKPguLLguIrguLQKK+C4o+C4suC4iuC4tOC4meC4tQor4Lij4Liy4LiK4Li1CivguKPguLLguYDguIrguJkKK+C4o+C4suC5gOC4iuC4meC4l+C4o+C4ouC4suC4mQor4Lij4Liy4LiNCivguKPguLLguI3guKPguK3guJkKK+C4o+C4suC4lAor4Lij4Liy4LiVCivguKPguLLguJXguKMKK+C4o+C4suC4leC4o+C4tQor4Lij4Liy4LiV4Lij4Li14Lib4Lij4Liw4LiU4Lix4Lia4LiU4Liy4LinCivguKPguLLguYLguJcKK+C4o+C4suC4mOC4sgor4Lij4Liy4LiZCivguKPguYjguLLguJkKK+C4o+C5ieC4suC4mQor4Lij4Liy4LiaCivguKPguLLguJ7guJPguYwKK+C4o+C4suC4oQor4Lij4Liy4Lih4LmA4LiB4Li14Lii4Lij4LiV4Li04LmMCivguKPguLLguKHguKrguLnguKMKK+C4o+C4suC4oeC4seC4jQor4Lij4Liy4Lih4LiyCivguKPguLLguKIKK+C4o+C5iOC4suC4ogor4Lij4LmJ4Liy4LiiCivguKPguYjguLLguKLguKPguLHguIcKK+C4o+C4suC4pwor4Lij4LmJ4Liy4LinCivguKPguLLguKfguLUKK+C4o+C4suC4qOC4tQor4Lij4Liy4Lip4LiO4LijCivguKPguLLguKnguI7guKPguYwKK+C4o+C4suC4qeC4leC4o+C4tQor4Lij4Liy4Lip4Lij4Liy4LiV4Lij4Li04LiZCivguKPguLLguKnguKPguLLguJXguKPguLUKK+C4o+C4suC4quC4tQor4Lij4Liy4Lir4Li4CivguKPguYjguLLguKvguLjguYwKK+C4o+C4suC4q+C4uQor4Lij4LizCivguKPguYjguLMKK+C4o+C4s+C4hOC4suC4jQor4Lij4Liz4LiH4Lix4LiaCivguKPguLPguIjguKfguJkKK+C4o+C4s+C4i+C4uOC4ogor4Lij4Liz4Lia4Liy4LiNCivguKPguLPguJ7guLHguJkKK+C4o+C4s+C4nuC4suC4ogor4Lij4Liz4Lie4Li24LiHCivguKPguLPguYDguJ7guKIKK+C4o+C4s+C5hOC4ngor4Lij4Liz4Lih4Liw4LmA4LiCCivguKPguLPguKHguLDguJnguLIKK+C4o+C4s+C4oeC4sOC4meC4suC4lAor4Lij4Liz4Lih4Liw4Lij4LmI4LitCivguKPguLPguKLguKfguJkKK+C4o+C4s+C4ouC5ieC4reC4ogor4Lij4Liz4LmB4Lii4LmJCivguKPguYjguLPguKPguKfguKIKK+C4o+C4s+C4o+C4suC4jQor4Lij4Liz4Lij4LizCivguKPguLPguYDguKMKK+C4o+C4s+C5hOC4owor4Lij4Liz4Lil4Li24LiBCivguKPguLPguKvguLHguJQKK+C4o+C4s+C4q+C4seC4qgor4Lij4Li0CivguKPguLTguIEKK+C4o+C4tOC4geC5hgor4Lij4Li04LiU4Liq4Li14LiU4Lin4LiHCivguKPguLTguJkKK+C4o+C4tOC5ieC4mQor4Lij4Li04LiZ4LmGCivguKPguLTguJoKK+C4o+C4tOC4muC4muC4tOC5ieC4mQor4Lij4Li04Lia4Lij4Li14LmICivguKPguLTguJrguKvguKPguLXguYgKK+C4o+C4tOC4m+C4uAor4Lij4Li04Lib4Li5CivguKPguLTguKEKK+C4o+C4tOC5ieC4pwor4Lij4Li04Lip4Lii4LiyCivguKPguLUKK+C4o+C4teC5iAor4Lij4Li14LmJCivguKPguLXguYbguILguKfguLLguIfguYYKK+C4o+C4teC5huC4o+C4reC5hgor4Lij4Li14LiUCivguKPguLXguJTguLHguIHguIrguLHguJkKK+C4o+C4teC4lQor4Lij4Li14LmA4LiZ4Li14Lii4LihCivguKPguLXguJoKK+C4o+C4teC4oQor4Lij4Li14Lij4LitCivguKPguLXguYnguKPguLTguIEKK+C4o+C4tuC4geC4leC5jAor4Lij4Li24LiHCivguKPguLbguYnguIcKK+C4o+C4t+C5iOC4mQor4Lij4Li34LmJ4LiZCivguKPguLfguYnguK0KK+C4o+C4uAor4Lij4Li44LiBCivguKPguLjguIHguILguYwKK+C4o+C4uOC4geC4guC4geC4sAor4Lij4Li44LiB4LiC4LiyCivguKPguLjguIHguKPguLjguKIKK+C4o+C4uOC4geC4qeC4sAor4Lij4Li44LmI4LiHCivguKPguLjguYnguIcKK+C4o+C4uOC4h+C4o+C4seC4hwor4Lij4Li44LiICivguKPguLjguIjguJkKK+C4o+C4uOC4iOC4sgor4Lij4Li44LiI4Li0CivguKPguLjguIjguLTguKPguLAKK+C4o+C4uOC4iOC4tOC4o+C4sgor4Lij4Li44LiI4Li1CivguKPguLjguIrguLIKK+C4o+C4uOC4lAor4Lij4Li44LiVCivguKPguLjguJfguJjguYwKK+C4o+C4uOC4l+C4owor4Lij4Li44LiY4Li04LijCivguKPguLjguYDguJjguLXguKLguKMKK+C4o+C4uOC4mQor4Lij4Li44LmI4LiZCivguKPguLjguJrguKPguLnguYgKK+C4o+C4uOC4muC4suC4geC4suC4owor4Lij4Li44LihCivguKPguLjguYjguKEKK+C4o+C4uOC5iOC4oeC4o+C5iOC4suC4oQor4Lij4Li44LiiCivguKPguLjguYjguKIKK+C4o+C4uOC4o+C4uAor4Lij4Li44Lip4LiP4LmMCivguKPguLjguKvguLAKK+C4o+C4uOC4q+C4suC4jQor4Lij4Li5CivguKPguLnguYgKK+C4o+C4ueC5iQor4Lij4Li54LiI4Li1CivguKPguLnguJQKK+C4o+C4ueC4l+C4teC5gOC4meC4teC4ouC4oQor4Lij4Li54LmJ4LiZ4Lit4LiZCivguKPguLnguJrguLTguYDguJTguLXguKLguKEKK+C4o+C4ueC4mwor4Lij4Li54Lib4Li04Lii4LiwCivguKPguLnguJvguLUKK+C4o+C4ueC5gOC4peC5h+C4leC4leC5jAor4Lij4Li54Lir4LiyCivguYDguKPguYgKK+C5gOC4o+C4ggor4LmA4Lij4LiC4LiyCivguYDguKPguILguLLguITguJPguLTguJUKK+C5gOC4o+C5h+C4hwor4LmA4Lij4LmI4LiHCivguYDguKPguYnguIcKK+C5gOC4o+C4k+C4uAor4LmA4Lij4LiT4Li44LiBCivguYDguKPguJPguLkKK+C5gOC4o+C4lOC4reC4mQor4LmA4Lij4LiU4Liy4Lij4LmMCivguYDguKPguYDguJTguLXguKLguKEKK+C5gOC4o+C5ieC4mQor4LmA4Lij4Lii4Lit4LiHCivguYDguKPguKPguKfguJkKK+C5gOC4o+C5hOC4owor4LmA4Lij4LmH4LinCivguYDguKPguYjguKcKK+C5gOC4o+C4p+C4lOC4tQor4LmA4Lij4LitCivguYDguKPguYjguK0KK+C5gOC4o+C4sgor4LmA4Lij4LmI4LiyCivguYDguKPguYnguLIKK+C5gOC4o+C5iOC4suC5hgor4LmA4Lij4Liy4LiwCivguYDguKPguLTguIcKK+C5gOC4o+C4tOC4lAor4LmA4Lij4Li04LihCivguYDguKPguLTguYjguKEKK+C5gOC4o+C4tOC5ieC4oQor4LmA4Lij4Li04Lio4Lij4LmJ4Liy4LiHCivguYDguKPguLXguYjguKIKK+C5gOC4o+C4teC5ieC4ouC5hgor4LmA4Lij4Li14Lii4LiBCivguYDguKPguLXguKLguIcKK+C5gOC4o+C4teC4ouC4h+C5hgor4LmA4Lij4Li14Lii4LiUCivguYDguKPguLXguKLguJkKK+C5gOC4o+C4teC4ouC4mgor4LmA4Lij4Li14Lii4LihCivguYDguKPguLXguYjguKLguKEKK+C5gOC4o+C4teC4ouC4pwor4LmA4Lij4Li14LmI4Lii4LinCivguYDguKPguLXguYnguKLguKfguKPguIEKK+C5gOC4o+C4t+C4rQor4LmA4Lij4Li34LmI4LitCivguYDguKPguLfguYnguK0KK+C5gOC4o+C4t+C4reC4gQor4LmA4Lij4Li34Lit4LiB4Liq4Lin4LiZCivguYDguKPguLfguK3guIcKK+C5gOC4o+C4t+C5iOC4reC4hwor4LmA4Lij4Li34LmJ4Lit4LiHCivguYDguKPguLfguK3guIfguKPguK3guIcKK+C5gOC4o+C4t+C4reC4lAor4LmA4Lij4Li34Lit4LiZCivguYDguKPguLfguYnguK3guJkKK+C5gOC4o+C4t+C5ieC4reC4ogor4LmB4LijCivguYHguKPguYgKK+C5geC4o+C4gQor4LmB4Lij4LmH4LiB4LmA4LiB4LiVCivguYHguKPguIcKK+C5geC4o+C5iOC4hwor4LmB4Lij4LmJ4LiHCivguYHguKPguYjguIfguKPguLTguYnguKcKK+C5geC4o+C5iOC4h+C5hOC4q+C4oQor4LmB4Lij4LiUCivguYHguKPguYnguJnguYHguITguYnguJkKK+C5geC4o+C4oQor4LmB4Lij4LmJ4LinCivguYHguKPguLAKK+C5guC4owor4LmC4Lij4LmICivguYLguKPguIQKK+C5guC4o+C4hwor4LmC4Lij4LiICivguYLguKPguIjguJnguYwKK+C5guC4o+C5gOC4lOC4teC4ouC4oQor4LmC4Lij4LiV4Li1CivguYLguKPguJcKK+C5guC4o+C4l+C4meC4sAor4LmC4Lij4LiYCivguYLguKPguJjguKMKK+C5guC4o+C5gOC4meC4teC4ouC4pwor4LmC4Lij4Lib4LiZ4LiwCivguYLguKPguKEKK+C5guC4o+C4oeC4seC4jeC4iAor4LmC4Lij4Lih4Lix4LiZCivguYLguKPguKHguLHguJnguITguLLguJfguK3guKXguLTguIEKK+C5guC4o+C5gOC4oeC4reC4o+C5jAor4LmC4Lij4LiiCivguYLguKPguYDguKMKK+C5guC4o+C4qQor4LmC4Lij4Lip4LiT4LiwCivguYLguKPguKvguLTguJPguLUKK+C5guC4o+C4q+C4tOC4lQor4LmE4LijCivguYTguKPguYgKK+C5hOC4o+C5iQor4LmE4Lij4Lif4Lix4LiZCivguYTguKPguKLguYwKK+C4pAor4Lik4LiB4Lip4LmMCivguKTguIHguKnguJPguLAKK+C4pOC4hOC5gOC4p+C4lwor4Lik4LiK4LiyCivguKTguIrguLgKK+C4pOC4kwor4Lik4LiU4Li1CivguKTguJTguLXguKLguLIKK+C4pOC4lOC4uQor4Lik4LiVCivguKTguJXguLTguKLguLIKK+C4pOC4leC4uAor4Lik4LiV4Li44Liq4LiZ4Liy4LiZCivguKTguJfguJjguLIKK+C4pOC4l+C4mOC4tOC5jAor4Lik4LiX4Lix4LiiCivguKTguKnguKAKK+C4pOC4qeC4ouC4sgor4Lik4Lip4Li1CivguKTguYUKK+C4pOC5heC4iuC4uAor4Lik4LmF4LiU4Li1CivguKTguYXguJfguLHguKIKK+C4pOC5heC4qeC4tQor4Lik4LmF4Liq4Liy4LiiCivguKUKK+C4peC4gQor4Lil4LiB4Liy4LijCivguKXguIHguLjguIgKK+C4peC4hOC4uOC4kQor4Lil4LiE4Li44LisCivguKXguIbguLgKK+C4peC4hwor4Lil4LmI4LiHCivguKXguIfguIHguLIKK+C4peC5ieC4h+C5gOC4peC5ieC4hwor4Lil4LiUCivguKXguJTguLIKK+C4peC4mQor4Lil4LmI4LiZCivguKXguYnguJkKK+C4peC4mgor4Lil4Lia4LihCivguKXguJrguK3guIcKK+C4peC4m+C4gQor4Lil4Lib4LiZCivguKXguJ4KK+C4peC4nuC4uOC4igor4Lil4LihCivguKXguYjguKEKK+C4peC5ieC4oQor4Lil4Lih4Liy4LiUCivguKXguKPguKPguKXguLjguIcKK+C4peC4peC4meC4sgor4Lil4Lil4Liy4LiPCivguKXguKXguLTguJUKK+C4peC4p+C4gQor4Lil4Lin4LiHCivguKXguYjguKfguIcKK+C4peC5ieC4p+C4hwor4Lil4Lin4LiH4LiE4LmMCivguKXguKfguIfguYDguKXguYnguLIKK+C4peC4p+C4k+C4sAor4Lil4Lin4LiUCivguKXguYnguKfguJkKK+C4peC4p+C4meC4peC4suC4oQor4Lil4Lin4LiZ4LiwCivguKXguYjguKfguKEKK+C4peC4p+C4sAor4Lil4Lin4Li04LiV4LijCivguKXguKvguLgKK+C4peC4q+C4uOC4geC4sAor4Lil4LmI4LitCivguKXguYnguK0KK+C4peC4reC4gQor4Lil4LmH4Lit4LiB4LmA4LiB4LiVCivguKXguK3guIHguYHguKXguIEKK+C4peC4reC4geC4suC4o+C4tOC4l+C4tuC4oQor4Lil4Lit4LiHCivguKXguYjguK3guIcKK+C4peC4reC4h+C4geC4reC4hwor4Lil4Lit4LiH4LiI4Li04LiI4Li54LiUCivguKXguK3guIfguYTguJkKK+C4peC4reC4lAor4Lil4Lit4LiV4LmA4LiV4Lit4Lij4Li14LmICivguKXguK3guJkKK+C4peC5iOC4reC4mQor4Lil4Lit4LiaCivguKXguK3guKEKK+C4peC5ieC4reC4oQor4Lil4Lit4Lih4LiK4Lit4LihCivguKXguYnguK3guKHguJvguKPguKfguJQKK+C4peC4reC4oeC4nuC4reC4gQor4Lil4Lit4LiiCivguKXguYjguK3guKIKK+C4peC5iOC4reC5geC4peC5iAor4Lil4Lit4Lin4LmM4LmA4Lij4LiZ4LmA4LiL4Li14Lii4LihCivguKXguK3guK0KK+C4peC4sAor4Lil4LmI4LiwCivguKXguLDguIHguKUKK+C4peC4sOC4geC4ueC4oeC4sOC4meC4tOC4qgor4Lil4Liw4LiC4Lix4LiU4Lil4Liw4LiC4Li34LiZCivguKXguLDguITguKMKK+C4peC4sOC4hOC4tAor4Lil4Liw4LiE4Li24LiBCivguKXguLDguIfguLLguJQKK+C4peC4sOC4h+C4tOC4lAor4Lil4Liw4LiV4Li04LiI4Li54LiUCivguKXguLDguJrguKHguKXguLDguJrguK3guIcKK+C4peC4sOC4muC4seC4lAor4Lil4Liw4Lia4Li34LitCivguKXguLDguYDguJrguYfguIcKK+C4peC4sOC5guC4muC4oQor4Lil4Liw4Lih4LmI4Lit4LihCivguKXguLDguKHguLHguYjguIcKK+C4peC4sOC4oeC4sgor4Lil4Liw4Lih4Liy4LiZCivguKXguLDguKHguYnguLLguKIKK+C4peC4sOC4oeC4uAor4Lil4Liw4Lih4Li44LiUCivguKXguLDguKHguLjguJkKK+C4peC4sOC5gOC4oeC5h+C4h+C4peC4sOC4hOC4owor4Lil4Liw4LmA4Lih4LmH4LiUCivguKXguLDguYDguKHguK0KK+C4peC4sOC5gOC4oeC4suC4sAor4Lil4Liw4LmA4Lih4Li04LiUCivguKXguLDguYDguKHguLXguKLguJQKK+C4peC4sOC5gOC4oeC4teC4ouC4mgor4Lil4Liw4LmB4Lih4LiwCivguKXguLDguYLguKHguIEKK+C4peC4sOC5guC4oeC4mgor4Lil4Liw4LmE4LihCivguKXguLDguKPguLUKK+C4peC4sOC4peC4meC4peC4sOC4peC4suC4mQor4Lil4Liw4Lil4Lih4Lil4Liw4Lil4Liy4LiiCivguKXguLDguKXguKfguKIKK+C4peC4sOC4peC4reC4gQor4Lil4Liw4Lil4Lit4Lia4Lil4Liw4LmA4Lil4LmJ4LiyCivguKXguLDguKXguLHguIcKK+C4peC4sOC4peC4seC4lAor4Lil4Liw4Lil4LmJ4LiyCivguKXguLDguKXguLLguJkKK+C4peC4sOC4peC4suC4muC4peC4sOC4peC5ieC4p+C4hwor4Lil4Liw4Lil4Liy4LiiCivguKXguLDguKXguYnguLLguKcKK+C4peC4sOC4peC5iOC4s+C4peC4sOC4peC4seC4gQor4Lil4Liw4Lil4Li04LiaCivguKXguLDguKXguLjguIcKK+C4peC4sOC4peC4uOC4oQor4Lil4Liw4LmA4Lil4LiHCivguKXguLDguYDguKXguYnguLIKK+C4peC4sOC5gOC4peC4suC4sAor4Lil4Liw4LmA4Lil4Liy4Liw4Lil4Liw4Lil4Lit4LiHCivguKXguLDguYDguKXguLTguIcKK+C4peC4sOC5gOC4peC4teC4ouC4lAor4Lil4Liw4LmA4Lil4Li14Lii4LiaCivguKXguLDguYDguKXguLfguK3guIEKK+C4peC4sOC5hOC4peC5iQor4Lil4Liw4Lin4LilCivguKXguLDguKfguYnguK0KK+C4peC4sOC4p+C5ieC4sgor4Lil4Liw4Lin4Liy4LiUCivguKXguLDguYDguKfguIcKK+C4peC4sOC5geC4p+C4gQor4Lil4Liw4LmC4Lin4LmJCivguKXguLDguKvguKHguLLguJQKK+C4peC4sOC4q+C4oeC4suC4lOC4jeC4suC4meC4suC4i+C4sOC4ruC5jAor4Lil4Liw4Lir4Lil4Lix4LiUCivguKXguLDguKvguYnguK3guKIKK+C4peC4sOC4q+C4suC4mQor4Lil4Liw4Lir4Li44LmI4LiHCivguKXguLDguYDguKvguKIKK+C4peC4sOC5gOC4q+C4teC5iOC4ogor4Lil4Liw4Lit4Lit4LiHCivguKXguLDguK3guK3guIfguKHguLHguYjguIcKK+C4peC4sOC4reC4suC4ogor4Lil4Liw4LmA4Lit4Li14Lii4LiUCivguKXguLDguYHguK3guJkKK+C4peC4seC4gQor4Lil4Lix4LiB4LiC4LiT4LiwCivguKXguLHguIHguILguJPguLIKK+C4peC4seC4geC4guC4sAor4Lil4Lix4LiB4LiI4Lix4LmI4LiZCivguKXguLHguIHguJvguLTguJTguKXguLHguIHguYDguJvguLTguJQKK+C4peC4seC4geC4qeC4k+C4sAor4Lil4Lix4LiB4Lip4Lih4LiT4LmMCivguKXguLHguIHguKnguKHguLLguJPguLIKK+C4peC4seC4geC4qeC4oeC4tQor4Lil4Lix4LiB4Lip4LiwCivguKXguLHguITguITguLAKK+C4peC4seC4hOC4meC5jAor4Lil4Lix4LiE4LiZ4LiyCivguKXguLHguIcKK+C4peC4seC5iOC4hwor4Lil4Lix4LiH4LiB4LiyCivguKXguLHguIfguITguLQKK+C4peC4seC4h+C4hOC4tQor4Lil4Lix4LiH4LiW4Li24LiHCivguKXguLHguIfguKXguK3guIcKK+C4peC4seC4h+C5gOC4pQor4Lil4Lix4LiH4Liq4Liy4LiUCivguKXguLHguIrguIrguLIKK+C4peC4seC4iuC4iuC4tQor4Lil4Lix4LiN4LiI4LmMCivguKXguLHguI3guIjguIHguKMKK+C4peC4seC4jeC4iQor4Lil4Lix4LiN4LiJ4LiB4LijCivguKXguLHguI3guInguJnguYwKK+C4peC4seC4kOC4tAor4Lil4Lix4LiQ4Li04LiB4LiyCivguKXguLHguJQKK+C4peC4seC4lOC4sgor4Lil4Lix4LiX4LiY4LmMCivguKXguLHguJfguJjguLQKK+C4peC4seC4mQor4Lil4Lix4LmI4LiZCivguKXguLHguJnguYDguJUKK+C4peC4seC4meC5gOC4leC4sgor4Lil4Lix4LiZ4LmE4LiVCivguKXguLHguYjguJnguJbguLHguJkKK+C4peC4seC5iOC4meC4l+C4oQor4Lil4Lix4LiZ4LiX4Lin4LiiCivguKXguLHguJnguYLguJfguKEKK+C4peC4seC4mgor4Lil4Lix4Lie4LiY4LmMCivguKXguLHguJ7guJjguLQKK+C4peC4seC4oAor4Lil4Lix4Lig4LiZ4LiwCivguKXguLHguKDguKLguYwKK+C4peC4seC4oeC4nuC5jAor4Lil4Lix4LiiCivguKXguLHguKfguLAKK+C4peC4sgor4Lil4LmI4LiyCivguKXguYnguLIKK+C4peC4suC4gQor4Lil4Liy4LiB4Lip4LiyCivguKXguLLguILguLIKK+C4peC4suC4hwor4Lil4LmI4Liy4LiHCivguKXguYnguLLguIcKK+C4peC4suC4h+C4hOC4seC4pQor4Lil4Liy4LiH4LiH4Li04LiUCivguKXguLLguIfguKXguLTguIcKK+C4peC4suC4h+C4quC4suC4lAor4Lil4Liy4LiH4Liy4LiUCivguKXguYnguLLguIfguLLguJQKK+C4peC4suC5gOC4h+C5h+C4lAor4Lil4Liy4LiKCivguKXguLLguIrguLIKK+C4peC4suC4jQor4Lil4Liy4LiUCivguKXguLLguJTguYDguKXguLIKK+C4peC5ieC4suC4leC5ieC4sgor4Lil4LmI4Liy4LmA4LiV4Li14Lii4LiHCivguKXguYnguLLguYDguJXguLXguKLguIcKK+C4peC4suC4mQor4Lil4LmI4Liy4LiZCivguKXguLLguJoKK+C4peC4suC4mwor4Lil4Liy4Lie4Lit4LiZCivguKXguLLguJ7guLgKK+C4peC4suC5gOC4ngor4Lil4Liy4LmA4Lie4LiyCivguKXguLLguKAKK+C4peC4suC4oQor4Lil4LmI4Liy4LihCivguKXguLLguKHguLAKK+C4peC4suC4ogor4Lil4LmJ4Liy4LiiCivguKXguLLguKXguJnguLAKK+C4peC4suC4peC4qgor4Lil4Liy4Lil4LiyCivguKXguLLguKcKK+C4peC4suC4p+C4gQor4Lil4Liy4Lin4Lix4LiT4Lii4LmMCivguKXguLLguKfguLIKK+C4peC4suC4quC4meC4sAor4Lil4LizCivguKXguYjguLMKK+C4peC5ieC4swor4Lil4Liz4LmA4LiC4LmH4LiNCivguKXguLPguYHguIIKK+C4peC4s+C5gOC4hOC5h+C4jQor4Lil4Liz4LmA4LiE4Li34Lit4LiHCivguKXguLPguIfguLLguJQKK+C4peC4s+C5gOC4iOC4teC4ouC4gQor4Lil4Liz4LiU4Lin4LiZCivguKXguLPguJTguLHguJoKK+C4peC4s+C4meC4seC4gQor4Lil4Liz4LmA4LiZ4LiyCivguKXguLPguJrguK3guIcKK+C4peC4s+C4muC4suC4gQor4Lil4Liz4Lia4Li4CivguKXguLPguJvguLMKK+C4peC4s+C4nuC4p+C4mQor4Lil4Liz4Lie4Lit4LiHCivguKXguLPguJ7guLHguIcKK+C4peC4s+C4nuC4uQor4Lil4Liz4LmA4Lie4LmH4LiNCivguKXguLPguYDguJ7guLIKK+C4peC4s+C5geC4nuC4hwor4Lil4Liz4LmB4Lie4LiZCivguKXguLPguYLguJ7guIcKK+C4peC4s+C5hOC4nuC5iAor4Lil4Liz4Lig4Li44LiC4Lix4LiZCivguKXguLPguKHguLDguKXguK3guIEKK+C4peC4s+C4oeC4suC4lAor4Lil4Liz4LmA4Lih4Liy4LiwCivguKXguLPguYDguKHguLXguKLguJoKK+C4peC4s+C4ouC4reC4hwor4Lil4Liz4Lii4LiyCivguKXguLPguYTguKIKK+C4peC4s+C4peC4reC4hwor4Lil4LmI4Liz4Lil4LiyCivguKXguLPguKXguLLguJoKK+C4peC4s+C4peC4swor4Lil4Liz4Lil4Li24LiBCivguKXguLPguYDguKXguLLguLAKK+C4peC4s+C5gOC4peC4tOC4gQor4Lil4Liz4LmA4Lil4Li14Lii4LiHCivguKXguLPguYDguKXguLXguKLguJoKK+C4peC4s+C5gOC4p+C4teC4ouC4hwor4Lil4Liz4LmA4Lin4Li14Lii4LiZCivguKXguLPguK3guLjguJQKK+C4peC4s+C5gOC4reC4teC4ouC4gQor4Lil4Liz4LmC4Lit4LiHCivguKXguLQKK+C4peC4tOC4geC4guC4sgor4Lil4Li04LiB4LmE4LiZ4LiV4LmMCivguKXguLTguIHguKnguLIKK+C4peC4tOC4geC4uOC4iAor4Lil4Li04LmA4LiBCivguKXguLTguILguJnguLAKK+C4peC4tOC4guC4quC4tOC4l+C4mOC5jAor4Lil4Li04LiC4Li04LiVCivguKXguLTguIcKK+C4peC4tOC4h+C4hOC5jAor4Lil4Li04LiH4LmC4Lil4LiUCivguKXguLTguJQKK+C4peC4tOC4lQor4Lil4Li04LiV4Lih4Lix4LiqCivguKXguLTguJXguKMKK+C4peC4tOC5gOC4l+C4teC4ouC4oQor4Lil4Li04LmI4LiZCivguKXguLTguYnguJkKK+C4peC4tOC4meC5guC4geC4o+C4ogor4Lil4Li04LiZ4LiI4LiHCivguKXguLTguYnguJnguIjguLXguYgKK+C4peC4tOC5iOC4meC4leC5ieC4mQor4Lil4Li04LmI4LiZ4LiX4Liw4LmA4LilCivguKXguLTguYjguJnguK7guLfguYnguK0KK+C4peC4tOC4meC4tOC4mQor4Lil4Li04LiaCivguKXguLTguJvguJTguLIKK+C4peC4tOC4m+C4leC5jAor4Lil4Li04Lib4Liq4LiV4Li04LiBCivguKXguLTguJvguLQKK+C4peC4tOC4n+C4leC5jAor4Lil4Li04LmA4Lig4LiyCivguKXguLTguYjguKEKK+C4peC4tOC5ieC4oQor4Lil4Li04Lih4Lib4LmMCivguKXguLTguKHguJvguJnguLAKK+C4peC4tOC4peC4tOC4lQor4Lil4Li04LinCivguKXguLTguYjguKcKK+C4peC4tOC4quC4hwor4Lil4Li1CivguKXguLXguYgKK+C4peC4teC5iQor4Lil4Li14LiL4LitCivguKXguLXguJoKK+C4peC4teC4peC4sgor4Lil4Li14Lil4Liy4LioCivguKXguLXguKzguKvguLIKK+C4peC4tuC4gQor4Lil4Li24LiH4LiE4LmMCivguKXguLbguIfguITguYzguJnguLLguKLguJ7guKPguLLguJkKK+C4peC4t+C4lAor4Lil4Li34LmI4LiZCivguKXguLfguYnguJkKK+C4peC4t+C4mgor4Lil4Li34LihCivguKXguLfguK0KK+C4peC4t+C5iOC4rQor4Lil4Li34LmJ4LitCivguKXguLgKK+C4peC4uOC4gQor4Lil4Li44LiB4Lil4LiZCivguKXguLjguIHguKXguLXguYnguKXguLjguIHguKXguJkKK+C4peC4uOC4hwor4Lil4Li44LmJ4LiHCivguKXguLjguJUKK+C4peC4uOC4lwor4Lil4Li44LiX4LiB4LiwCivguKXguLjguJfguJjguYwKK+C4peC4uOC5iOC4mQor4Lil4Li44Lib4LiV4LmMCivguKXguLjguJ7guJjguYwKK+C4peC4uOC4nuC4mOC4geC4sAor4Lil4Li44LmI4LihCivguKXguLjguYjguKHguYDguJnguLfguYnguK0KK+C4peC4uOC4oeC4m+C5jAor4Lil4Li44Lih4Lie4Li1CivguKXguLjguKHguJ7guLkKK+C4peC4uOC4oeC4q+C4oeC4sgor4Lil4Li44LiiCivguKXguLjguYjguKIKK+C4peC4uOC5ieC4ogor4Lil4Li44Lil4Liy4LiiCivguKXguLjguKrguLIKK+C4peC4ueC5iAor4Lil4Li54LiBCivguKXguLnguIHguYDguILguKLguJXguLLguKLguYHguKHguYjguKLguLLguKLguIrguLHguIHguJvguKPguIEKK+C4peC4ueC4geC5gOC4hOC4peC5ieC4sgor4Lil4Li54LiB4Lib4Lij4Liw4LiE4Liz4Lic4Li1CivguKXguLnguIHguJvguLfguJnguYPguKvguI3guYgKK+C4peC4ueC4geC5gOC4reC5h+C4mQor4Lil4Li54LiB4LmA4Lit4LmH4LilCivguKXguLnguILguLAKK+C4peC4ueC4leC4sgor4Lil4Li54LiV4Li04LiB4LiyCivguKXguLnguJfguLXguYDguIrguLXguKLguKEKK+C4peC4ueC4meC4sAor4Lil4Li54LiaCivguKXguLnguYjguKvguKXguLXguYgKK+C5gOC4peC4gQor4LmA4Lil4LmH4LiBCivguYDguKXguYfguIHguJTguLIKK+C5gOC4peC5h+C4geC4ruC4reC4o+C5jOC4mQor4LmA4Lil4LiCCivguYDguKXguILguIHguLAKK+C5gOC4peC4guC4meC4sAor4LmA4Lil4LiC4Lii4LiwCivguYDguKXguILguLIKK+C5gOC4peC5h+C4hwor4LmA4Lil4LmJ4LiHCivguYDguKXguYjguIfguK7guLfguYnguK0KK+C5gOC4peC5gOC4i+C4reC4o+C5jAor4LmA4Lil4LiR4LiR4Li4CivguYDguKXguJMKK+C5gOC4peC4k+C4keC4uAor4LmA4Lil4LmH4LiUCivguYDguKXguJUKK+C5gOC4peC4mQor4LmA4Lil4LmH4LiZCivguYDguKXguYjguJkKK+C5gOC4peC4meC4iOC4hwor4LmA4Lil4LiZ4Liq4LmMCivguYDguKXguJnguKvguLDguKPguLUKK+C5gOC4peC5h+C4mgor4LmA4Lil4Lia4LiHCivguYDguKXguJvguIHguKMKK+C5gOC4peC4m+C4meC5jAor4LmA4Lil4LmA4LibCivguYDguKXguYDguJ4KK+C5gOC4peC5h+C4oQor4LmA4Lil4LmI4LihCivguYDguKXguKIKK+C5gOC4peC4pwor4LmA4Lil4Lin4LiHCivguYDguKXguKfguLnguYLguKXguKoKK+C5gOC4peC4qAor4LmA4Lil4Lip4LiP4Li4CivguYDguKXguKrguYDguJrguLXguKLguJkKK+C5gOC4peC4qwor4LmA4Lil4LmI4Lir4LmMCivguYDguKXguKvguKLguLAKK+C5gOC4peC4q+C4peC4seC4hwor4LmA4Lil4Lir4Lil4LiyCivguYDguKXguKvguLAKK+C5gOC4peC4rQor4LmA4Lil4LiwCivguYDguKXguLIKK+C5gOC4peC5iOC4sgor4LmA4Lil4LmJ4LiyCivguYDguKXguLLguIHguLHguKIKK+C5gOC4peC5iOC4suC5gOC4leC5iuC4hwor4LmA4Lil4LmJ4Liy4LmC4Lil4LihCivguYDguKXguLLguLAKK+C5gOC4peC4tOC4gQor4LmA4Lil4Li04LmJ4LiHCivguYDguKXguLTguJnguYDguKXguYjguK0KK+C5gOC4peC4tOC4qAor4LmA4Lil4Li14LiiCivguYDguKXguLXguKLguIcKK+C5gOC4peC4teC5iOC4ouC4hwor4LmA4Lil4Li14LmJ4Lii4LiHCivguYDguKXguLXguKLguIfguILguLLguKcKK+C5gOC4peC4teC4ouC4h+C4nOC4sgor4LmA4Lil4Li14Lii4LiH4Lid4LmJ4Liy4LiiCivguYDguKXguLXguKLguIfguKHguLHguJkKK+C5gOC4peC4teC4ouC4mQor4LmA4Lil4Li14LmI4Lii4LiZCivguYDguKXguLXguKLguJnguYTguJ8KK+C5gOC4peC4teC4ouC4mgor4LmA4Lil4Li14Lii4LihCivguYDguKXguLXguYjguKLguKEKK+C5gOC4peC4teC4ouC4pwor4LmA4Lil4Li14LmJ4Lii4LinCivguYDguKXguLfguK3guIEKK+C5gOC4peC4t+C4reC4hwor4LmA4Lil4Li34LmI4Lit4LiHCivguYDguKXguLfguK3guJQKK+C5gOC4peC4t+C4reC4mQor4LmA4Lil4Li34LmI4Lit4LiZCivguYDguKXguLfguYjguK3guKEKK+C5gOC4peC4t+C5iOC4reC4oeC5g+C4qgor4LmA4Lil4Li34LmI4Lit4LiiCivguYDguKXguLfguYnguK3guKIKK+C5gOC4peC4t+C5iOC4reC4ouC4peC5ieC4sgor4LmB4LilCivguYHguKXguYgKK+C5geC4peC5iQor4LmB4Lil4LiBCivguYHguKXguYfguIHguYLguJfguKoKK+C5geC4peC4hwor4LmB4Lil4LmI4LiHCivguYHguKXguYnguIcKK+C5geC4peC4mQor4LmB4Lil4LmI4LiZCivguYHguKXguJnguJfguLLguJnguLHguKEKK+C5geC4peC4mgor4LmB4Lil4LmJ4LinCivguYHguKXguLAKK+C5guC4peC5iAor4LmC4Lil4LmJCivguYLguKXguIEKK+C5guC4peC4geC4hOC4leC4tAor4LmC4Lil4LiB4LiI4Lix4LiB4Lip4Li4CivguYLguKXguIHguIrguJnguJnguLUKK+C5guC4peC4geC5gOC4iuC4qeC4kOC5jAor4LmC4Lil4LiB4LiY4Lij4Lij4LihCivguYLguKXguIHguJjguLLguJTguLIKK+C5guC4peC4geC4mOC4suC4leC4uAor4LmC4Lil4LiB4LiZ4Liy4LiWCivguYLguKXguIHguJrguJYKK+C5guC4peC4geC4muC4suC4pQor4LmC4Lil4LiB4Lia4Li04LiU4LijCivguYLguKXguIHguJvguKPguLDguJfguLXguJsKK+C5guC4peC4geC4oeC4suC4o+C4lOC4sgor4LmC4Lil4LiB4Lii4LmMCivguYLguKXguIHguKLguLLguJXguKPguLIKK+C5guC4peC4geC4p+C4seC4iuC4iuC4sAor4LmC4Lil4LiB4Lin4Li04LiX4Li5CivguYLguKXguIHguKjguLHguJ7guJfguYwKK+C5guC4peC4geC4quC4luC4tOC4leC4tAor4LmC4Lil4LiB4Lit4Li44LiU4LijCivguYLguKXguIHguLHguJXguJbguIjguKPguLTguKLguLIKK+C5guC4peC4geC4seC4meC4leC4o+C5jAor4LmC4Lil4LiB4LiyCivguYLguKXguIHguLTguKLguLAKK+C5guC4peC4geC4teC4ouC5jAor4LmC4Lil4LiB4Li14Lii4LiK4LiZCivguYLguKXguIHguLXguKLguKfguLHguJXguKMKK+C5guC4peC4geC4uOC4leC4owor4LmC4Lil4LiB4Li44LiV4Lij4LiY4Lij4Lij4LihCivguYLguKXguIHguLjguJXguKPguKDguLnguKHguLQKK+C5guC4peC5gOC4geC4qAor4LmC4Lil4LiHCivguYLguKXguYjguIcKK+C5guC4peC5ieC4hwor4LmC4Lil4LmJ4LiH4LmC4LiV4LmJ4LiHCivguYLguKXguIjguJnguLAKK+C5guC4peC4k+C4sAor4LmC4Lil4LiUCivguYLguKXguJTguJfguLDguJnguIcKK+C5guC4peC5iOC4leC4tOC5iuC4mQor4LmC4Lil4LmC4LiVCivguYLguKXguJcKK+C5guC4peC4mQor4LmC4Lil4LmJ4LiZCivguYLguKXguJvguLAKK+C5guC4peC4oAor4LmC4Lil4LihCivguYLguKXguKHguLAKK+C5guC4peC4oeC4sgor4LmC4Lil4LilCivguYLguKXguKXguLjguJsKK+C5guC4peC5gOC4pQor4LmC4Lil4LmJ4LmA4Lil4LmJCivguYLguKXguYLguKUKK+C5guC4peC5guC4peC5iQor4LmC4Lil4Lir4LiwCivguYLguKXguKvguLHguIoKK+C5guC4peC4q+C4tOC4lQor4LmC4Lil4LiwCivguYTguKXguYgKK+C5hOC4peC5iQor4LmE4Lil4LiiCivguYTguKXguKXguLIKK+C5hOC4peC5gOC4peC4ogor4LmE4Lil4LmE4Lil4LmJCivguKcKK+C4p+C4gQor4Lin4LiB4LiwCivguKfguIHguLjguKUKK+C4p+C4hwor4Lin4LiH4LiB4LmMCivguKfguIfguIHguJUKK+C4p+C4h+C4qOC5jAor4Lin4LiH4Lio4LiyCivguKfguIfguKnguYwKK+C4p+C4iOC4meC4sAor4Lin4LiI4LiwCivguKfguIjguLIKK+C4p+C4iOC4tQor4Lin4LiK4LiwCivguKfguIrguLTguKPguLAKK+C4p+C4j+C4sAor4Lin4LiP4Liy4LiB4Liy4LijCivguKfguI/guLjguKHguLAKK+C4p+C4k+C4sAor4Lin4LiT4Li04LiKCivguKfguJPguLTguIrguIrguLIKK+C4p+C4k+C4tOC4iuC4ouC5jAor4Lin4LiT4Li04LiK4Lii4LiyCivguKfguJPguLTguJ7guIEKK+C4p+C4lOC4o+C4meC4uQor4Lin4LiU4Li1CivguKfguJXguLAKK+C4p+C4l+C4meC4sAor4Lin4LiX4LiwCivguKfguJfguLHguI3guI3guLjguJXguLIKK+C4p+C4l+C4seC4jeC4jeC4uQor4Lin4LiY4Li44LiB4LiyCivguKfguJjguLkKK+C4p+C4mQor4Lin4LiZ4LiI4LijCivguKfguJnguLHguJvguJXguLQKK+C4p+C4meC4seC4qgor4Lin4LiZ4LiyCivguKfguJnguLLguJnguJXguYwKK+C4p+C4meC4tOC4lOC4sgor4Lin4LiZ4Li04Lie4LiBCivguKfguYDguJnguIjguKMKK+C4p+C5guC4meC4l+C4ouC4suC4mQor4Lin4Lib4LiZ4LiwCivguKfguJvguLgKK+C4p+C4ouC4seC4hOC4huC5jAor4Lin4Lii4Lix4LiN4LiK4LiZ4LiwCivguKfguKLguLHguKHguKvguLAKK+C4p+C4ouC4seC4quC4ouC5jAor4Lin4Lii4Liy4LiB4Lij4LiT4LmMCivguKfguKLguLLguIbguKPguYwKK+C4p+C4ouC4suC4mOC4tAor4Lin4Lii4Liy4LihCivguKfguKLguLLguKLguLLguKEKK+C4p+C4o+C4geC4seC4jeC4jeC4sgor4Lin4Lij4LiB4Liy4LiiCivguKfguKPguIfguITguYwKK+C4p+C4o+C4k+C4sAor4Lin4Lij4LiXCivguKfguKPguJfguLLguJkKK+C4p+C4o+C4meC4suC4o+C4tQor4Lin4Lij4Lib4Lix4LiB4Lip4LmMCivguKfguKPguJ7guJnguLTguJUKK+C4p+C4o+C4oeC4q+C4suC4p+C4tOC4q+C4suC4owor4Lin4Lij4Lii4Li04LiV4LiyCivguKfguKPguKPguIQKK+C4p+C4o+C4o+C4hOC4ouC5jAor4Lin4Lij4Lij4LiKCivguKfguKPguKPguIrguKLguYwKK+C4p+C4o+C4o+C4k+C4meC4sgor4Lin4Lij4Lij4LiT4Lie4Lik4LiV4Li0CivguKfguKPguKPguJPguLAKK+C4p+C4o+C4o+C4k+C4tuC4gQor4Lin4Lij4Lij4LiY4LiBCivguKfguKPguKPguJjguJnguLAKK+C4p+C4o+C4o+C4qQor4Lin4Lij4Lij4Lip4LiyCivguKfguKPguKPguLnguJsKK+C4p+C4o+C4p+C4o+C4o+C4k+C4tOC4meC4tQor4Lin4Lij4Lin4Li04Lir4Liy4LijCivguKfguKPguLHguI3guI3guLkKK+C4p+C4o+C4suC4geC4sAor4Lin4Lij4Liy4LiH4LiE4LiT4LiyCivguKfguKPguLLguKDguKPguJPguYwKK+C4p+C4o+C4suC4ouC4uOC4l+C4mAor4Lin4Lij4Liy4LmC4Lij4Lir4Liy4LijCivguKfguKPguLLguKvguYwKK+C4p+C4o+C4suC4q+C4owor4Lin4Lij4Liy4Lir4LiwCivguKfguKPguLjguJMKK+C4p+C4o+C4uOC4leC4lOC4oQor4Lin4Lij4Li44LiV4Lih4LiwCivguKfguKPguLnguJYKK+C4p+C5guC4o+C4lOC4oQor4Lin4LmC4Lij4LiV4Lih4LiwCivguKfguKTguIEKK+C4p+C4pOC4qeC4oAor4Lin4Lik4Lip4LilCivguKfguKXguLHguIoKK+C4p+C4peC4seC4jeC4iuC5jAor4Lin4Lil4Lix4LiT4LiK4LiZ4LmMCivguKfguKXguLHguKIKK+C4p+C4peC4suC4q+C4gQor4Lin4Lil4Li1CivguKfguKjguIQKK+C4p+C4qOC4sAor4Lin4Lio4Li04LiZCivguKfguKrguJnguLAKK+C4p+C4quC4oOC4sAor4Lin4Liq4Lil4LiwCivguKfguKrguKXguLUKK+C4p+C4quC4p+C4seC4lOC4lOC4tQor4Lin4Liq4Lin4Lix4LiV4LiV4Li1CivguKfguKrguLAKK+C4p+C4quC4seC4meC4leC5jAor4Lin4Liq4Lix4LiZ4LiV4LiU4Li04Lil4LiBCivguKfguKrguLIKK+C4p+C4quC4tQor4Lin4Liq4Li4CivguKfguKrguLjguJjguLIKK+C4p+C4quC4uOC4meC4mOC4o+C4sgor4Lin4Liq4Li44Lih4LiU4Li1CivguKfguKvguLAKK+C4p+C4q+C4sgor4Lin4LitCivguKfguK3guIEKK+C4p+C4reC4geC5geC4p+C4gQor4Lin4LmI4Lit4LiHCivguKfguYjguK3guIfguYTguKcKK+C4p+C4reC4lAor4Lin4Lit4LiZCivguKfguYjguK3guJkKK+C4p+C4reC4peC5gOC4peC4ouC5jOC4muC4reC4pQor4Lin4Lit4LmB4LinCivguKfguLAKK+C4p+C4seC4gQor4Lin4Lix4LiB4LiB4LiwCivguKfguLHguIQKK+C4p+C4seC4hOC4hOC4tOC4ogor4Lin4Lix4LiE4LiE4Li14Lii4LmMCivguKfguLHguITguITguLgKK+C4p+C4seC4hOC4i+C4teC4mQor4Lin4Lix4LiHCivguKfguLHguIfguIHguYwKK+C4p+C4seC4h+C4iuC4sgor4Lin4Lix4LiH4LmA4Lin4LiHCivguKfguLHguIfguKjguLAKK+C4p+C4seC4h+C4quC4sAor4Lin4Lix4LiI4LiI4LiwCivguKfguLHguIjguInguYwKK+C4p+C4seC4iOC4ieC4gQor4Lin4Lix4LiI4LiJ4Lil4LiwCivguKfguLHguIjguJnguYwKK+C4p+C4seC4igor4Lin4Lix4LiK4LiK4LiwCivguKfguLHguIrguIzguYwKK+C4p+C4seC4iuC4nuC4t+C4igor4Lin4Lix4LiK4Lij4LiwCivguKfguLHguI3guIjguIEKK+C4p+C4seC4jeC4iOC4meC4sAor4Lin4Lix4LiN4LiM4LmMCivguKfguLHguI/guIHguLAKK+C4p+C4seC4j+C4j+C4sAor4Lin4Lix4LiP4LiP4Li0CivguKfguLHguJLguIHguLAKK+C4p+C4seC4kuC4geC4tQor4Lin4Lix4LiS4LiZ4LiwCivguKfguLHguJLguJnguLIKK+C4p+C4seC4kwor4Lin4Lix4LiT4LiP4LmMCivguKfguLHguJPguJPguLAKK+C4p+C4seC4k+C4meC4sgor4Lin4Lix4LiUCivguKfguLHguJUKK+C4p+C4seC4leC4leC5jAor4Lin4Lix4LiV4LiV4LiyCivguKfguLHguJXguJbguYwKK+C4p+C4seC4leC4luC4uAor4Lin4Lix4LiV4LiZ4LiwCivguKfguLHguJXguKMKK+C4p+C4seC4leC4o+C4m+C4j+C4tOC4muC4seC4leC4tAor4Lin4Lix4LiV4Liq4LiU4LijCivguKfguLHguJXguKrguLAKK+C4p+C4seC4leC4tAor4Lin4Lix4LiX4LiZ4LmMCivguKfguLHguJkKK+C4p+C4seC4meC4leC5jAor4Lin4Lix4LiZ4LiX4LiZ4LiyCivguKfguLHguJnguJfguJnguLXguKLguYwKK+C4p+C4seC4meC4l+C4sgor4Lin4Lix4LiZ4LiX4Li0CivguKfguLHguJnguJnguLTguJ7guIEKK+C4p+C4seC4meC5gOC4p+C4ouC5jAor4Lin4Lix4LiaCivguKfguLHguJrguYbguKvguKfguLPguYYKK+C4p+C4seC4m+C4m+C4sAor4Lin4Lix4Lih4Lih4Li04LiBCivguKfguLHguKIKK+C4p+C4seC4peC4geC5jAor4Lin4Lix4Lil4LiE4Li4CivguKfguLHguKXguKLguYwKK+C4p+C4seC4peC4peC4oAor4Lin4Lix4Lil4Lil4Li1CivguKfguLHguKcKK+C4p+C4seC4quC4lOC4uAor4Lin4Lix4Liq4LiV4Lij4LmMCivguKfguLHguKrguJnguYwKK+C4p+C4seC4quC4meC4sAor4Lin4Lix4Liq4Liq4LiwCivguKfguLIKK+C4p+C5iOC4sgor4Lin4LmJ4LiyCivguKfguLLguIEKK+C4p+C5ieC4suC4geC5gOC4nuC5ieC4ogor4Lin4Liy4LiB4Lii4LiwCivguKfguLLguIHguKPguLIKK+C4p+C4suC4geC4sAor4Lin4Liy4LiHCivguKfguYjguLLguIcKK+C4p+C5ieC4suC4hwor4Lin4Liy4LiI4LiBCivguKfguLLguIjguLIKK+C4p+C4suC4iOC4suC5hOC4m+C4ouC4sAor4Lin4Liy4LiI4Liy4LilCivguKfguLLguIrguYDguJvguKLguLAKK+C4p+C4suC4j+C4geC4sAor4Lin4Liy4LiT4Li04LiKCivguKfguLLguJPguLTguIrguIHguLAKK+C4p+C4suC4k+C4tOC4iuC4ouC5jAor4Lin4Liy4LiT4Li1CivguKfguLLguJQKK+C4p+C4suC4leC4sAor4Lin4Liy4LiXCivguKfguLLguJfguIEKK+C4p+C4suC4l+C4mQor4Lin4Liy4LiX4Lii4LmMCivguKfguLLguJfguLTguJUKK+C4p+C4suC4l+C4tOC4mQor4Lin4Liy4LiX4Li1CivguKfguLLguJkKK+C4p+C5iOC4suC4mQor4Lin4LmI4Liy4LiZ4LmA4LiE4Lij4Li34LitCivguKfguLLguJnguKMKK+C4p+C4suC5gOC4meC5gOC4lOC4teC4ouC4oQor4Lin4Liy4LiaCivguKfguLLguJvguLAKK+C4p+C4suC4m+C4tOC4leC4sAor4Lin4Liy4Lib4Li1CivguKfguLLguKEKK+C4p+C4suC4oeC4sAor4Lin4Liy4LmC4Lih4LijCivguKfguLLguKIKK+C4p+C5iOC4suC4ogor4Lin4LmJ4Liy4LiiCivguKfguLLguKLguKrguLAKK+C4p+C4suC4ouC4sAor4Lin4Liy4Lii4Lix4LiHCivguKfguLLguKLguLLguKHguLAKK+C4p+C4suC4ouC4uAor4Lin4Liy4Lii4Li44LiB4Li54LilCivguKfguLLguKLguLjguJrguLjguJXguKPguKLguLLguJXguKPguLIKK+C4p+C4suC5guC4ogor4Lin4Liy4LijCivguKfguLLguKPguKfguLLguKPguLQKK+C4p+C4suC4o+C4sAor4Lin4Liy4Lij4Li0CivguKfguLLguKPguLUKK+C4p+C4suC4o+C4uOC4kwor4Lin4Liy4Lij4Li44LiT4Li1CivguKfguLLguKUKK+C4p+C4suC4peC5jOC4pwor4Lin4Liy4Lil4Li04LiB4LiyCivguKfguLLguKXguLjguIHguLIKK+C4p+C4suC4pwor4Lin4LmI4Liy4LinCivguKfguYnguLLguKfguYjguK3guJkKK+C4p+C5ieC4suC4p+C4uOC5iOC4mQor4Lin4Liy4Liq4LiZ4LiwCivguKfguLLguKrguJnguLIKK+C4p+C4suC4quC4ngor4Lin4Liy4Liq4LiwCivguKfguLLguKrguLTguJkKK+C4p+C4suC4quC4tQor4Lin4Liy4Liq4Li44LiB4Lij4Li1CivguKfguLLguKrguLjguIHguLUKK+C4p+C4suC4quC4uOC5gOC4l+C4ngor4Lin4Liy4Lir4LiZ4LiwCivguKfguLLguKvguLAKK+C4p+C4suC4q+C4tOC4meC4tQor4Lin4Liy4LisCivguKfguLQKK+C4p+C4tOC4gQor4Lin4Li04LiB4LiC4Lix4Lih4Lig4LmMCivguKfguLTguIHguILguLHguKHguKDguJnguLAKK+C4p+C4tOC4geC5gOC4guC4mwor4Lin4Li04LiB4LiI4LiwCivguKfguLTguIHguKPguKEKK+C4p+C4tOC4geC4o+C4seC4ogor4Lin4Li04LiB4Lij4Liy4LiZ4LiV4LmMCivguKfguLTguIHguKTguJUKK+C4p+C4tOC4geC4pOC4leC4tAor4Lin4Li04LiB4LilCivguKfguLTguIHguKXguIjguKPguLTguJUKK+C4p+C4tOC4geC4quC4tOC4lQor4Lin4Li04LiB4Lix4LiVCivguKfguLTguIHguLHguJXguLQKK+C4p+C4tOC4geC4seC4mwor4Lin4Li04LiB4Lix4LiiCivguKfguLTguIHguLLguKMKK+C4p+C4tOC4geC4suC4pQor4Lin4Li04LiE4LiV4Lib4Lix4LiI4LiI4Lix4LiiCivguKfguLTguITguKvguLAKK+C4p+C4tOC5gOC4hOC4o+C4suC4sOC4q+C5jAor4Lin4Li04LiG4LiZ4LiwCivguKfguLTguIbguYDguJnguKgKK+C4p+C4tOC4huC5gOC4meC4qOC4p+C4owor4Lin4Li04LiG4Liy4LiVCivguKfguLTguIbguLLguKoKK+C4p+C4tOC4hwor4Lin4Li04LmI4LiHCivguKfguLTguIfguKfguK3guJkKK+C4p+C4tOC4iOC4ieC4tOC4geC4sAor4Lin4Li04LiI4Lii4Li44LiVCivguKfguLTguIjguKPguJPguLAKK+C4p+C4tOC4iOC4pQor4Lin4Li04LiI4Lix4LiB4LiC4LiT4LmMCivguKfguLTguIjguLHguIHguKnguJPguYwKK+C4p+C4tOC4iOC4seC4ogor4Lin4Li04LiI4Liy4LijCivguKfguLTguIjguLLguKPguJPguYwKK+C4p+C4tOC4iOC4tAor4Lin4Li04LiI4Li04LiB4Li04LiI4LiJ4LiyCivguKfguLTguIjguLTguJUKK+C4p+C4tOC4iOC4tOC4leC4owor4Lin4Li04LiI4Li04LiZCivguKfguLTguIjguLjguJMKK+C4p+C4tOC4iOC4uOC4o+C4kwor4Lin4Li04LiK4LiK4LiyCivguKfguLTguIrguIrguLgKK+C4p+C4tOC4iuC4iuC4uOC4lOC4sgor4Lin4Li04LiK4LiK4Li44LiV4LiyCivguKfguLTguIrguIrguLjguKXguJTguLIKK+C4p+C4tOC4iuC4jeC4sAor4Lin4Li04LiK4LiZCivguKfguLTguIrguJnguLUKK+C4p+C4tOC4iuC4seC4ogor4Lin4Li04LiK4LiyCivguKfguLTguIrguLLguJnguJnguLAKK+C4p+C4tOC4iuC4tOC4lQor4Lin4Li04LmA4LiK4Li14Lii4LijCivguKfguLTguI3guI3guLHguJXguJXguLQKK+C4p+C4tOC4jeC4jeC4suC4kwor4Lin4Li04LiN4LiN4Liy4LiT4LiB4LiX4Lij4Lix4Lie4Lii4LmMCivguKfguLTguI3guI3guLkKK+C4p+C4tOC4keC4ueC4o+C4ouC5jAor4Lin4Li04LiT4Lir4Li4CivguKfguLTguJQKK+C4p+C4tOC4lOC4teC4quC4lOC4tQor4Lin4Li04LiV4LiBCivguKfguLTguJXguJbguLLguKMKK+C4p+C4tOC4leC4suC4oeC4tOC4mQor4Lin4Li04LiW4Li1CivguKfguLTguJfguJjguLAKK+C4p+C4tOC4l+C4mOC4seC4h+C4quC4sAor4Lin4Li04LiX4Lii4LiyCivguKfguLTguJfguKLguLgKK+C4p+C4tOC4l+C4ouC4uOC4lQor4Lin4Li04LiX4Lij4Li44Lih4LiwCivguKfguLTguJfguKfguLHguKoKK+C4p+C4tOC4l+C4seC4leC4luC4tAor4Lin4Li04LiX4Liy4Lij4LiT4LmMCivguKfguLTguJfguLLguKXguJnguYwKK+C4p+C4tOC4l+C4tOC4lQor4Lin4Li04LiX4Li5CivguKfguLTguJfguLnguKMKK+C4p+C4tOC5gOC4l+C4p+C4qQor4Lin4Li04LmA4LiX4LioCivguKfguLTguJgKK+C4p+C4tOC4mOC4p+C4sgor4Lin4Li04LiY4LiyCivguKfguLTguJjguLLguJkKK+C4p+C4tOC4mOC4tQor4Lin4Li04LiY4Li44Lij4LiwCivguKfguLTguJjguLkKK+C4p+C4tOC4mOC4ueC4m+C4meC4sAor4Lin4Li04LiZCivguKfguLTguYjguJkKK+C4p+C4tOC4meC4l+C5jAor4Lin4Li04LiZ4Lix4LiZ4LiV4Li5CivguKfguLTguJnguLHguKIKK+C4p+C4tOC4meC4suC4l+C4tQor4Lin4Li04LiZ4Liy4Lii4LiBCivguKfguLTguJnguLLguKgKK+C4p+C4tOC4meC4tOC4iAor4Lin4Li04LiZ4Li04LiI4LiJ4Lix4LiiCivguKfguLTguJnguLTguJUKK+C4p+C4tOC4meC4tOC4muC4suC4lQor4Lin4Li04LiZ4Li04Lib4Liy4LiV4Li04LiBCivguKfguLTguJnguLXguJUKK+C4p+C4tOC5gOC4meC4lQor4Lin4Li04LmC4LiZ4LiX4LiBCivguKfguLTguJrguLHguJXguLQKK+C4p+C4tOC4muC4suC4gQor4Lin4Li04Lia4Li44LilCivguKfguLTguJrguLnguKUKK+C4p+C4tOC4m+C4geC4suC4owor4Lin4Li04Lib4LiP4Li04Liq4Liy4LijCivguKfguLTguJvguYLguKLguIQKK+C4p+C4tOC4m+C4o+C4sOC4geC4suC4owor4Lin4Li04Lib4Lij4Liw4LiV4Li04Liq4Liy4LijCivguKfguLTguJvguKPguLDguYLguKLguIQKK+C4p+C4tOC4m+C4o+C4sOC4peC4suC4mwor4Lin4Li04Lib4Lij4Liw4Lin4Liy4LiqCivguKfguLTguJvguKPguLTguJPguLLguKHguJfguLjguIHguILguYwKK+C4p+C4tOC4m+C4o+C4tOC4lQor4Lin4Li04Lib4Lil4Liy4LibCivguKfguLTguJvguKXguLLguKoKK+C4p+C4tOC4m+C4p+C4suC4qgor4Lin4Li04Lib4Lix4LiB4Lip4LmMCivguKfguLTguJvguLHguKrguKrguIEKK+C4p+C4tOC4m+C4seC4quC4quC4meC4sgor4Lin4Li04Lib4Liy4LiB4LiC4Lix4LiZ4LiY4LmMCivguKfguLTguJ7guLLguIHguKnguYwKK+C4p+C4tOC4nuC4suC4geC4qeC5jOC4p+C4tOC4iOC4suC4o+C4k+C5jAor4Lin4Li04Lie4Li04LiY4LiX4Lix4Lio4LiZ4LiyCivguKfguLTguJ7guLjguJgKK+C4p+C4tOC4oOC4seC4h+C4hOC5jAor4Lin4Li04Lig4Lix4LiKCivguKfguLTguKDguLHguJXguJXguLQKK+C4p+C4tOC4oOC4sgor4Lin4Li04Lig4Liy4LiECivguKfguLTguKDguLLguIoKK+C4p+C4tOC4oOC4suC4lOC4sgor4Lin4Li04Lig4Liy4Lin4Li1CivguKfguLTguKDguLLguKkKK+C4p+C4tOC4oOC4suC4qgor4Lin4Li04Lig4Li5CivguKfguLTguKDguLnguKnguJPguLAKK+C4p+C4tOC4oOC4ueC4qeC4sgor4Lin4Li04Lig4Li54Lip4Li04LiVCivguKfguLTguYDguKDguJXguIHguYwKK+C4p+C4tOC5gOC4oOC4l+C4geC5jAor4Lin4Li04Lih4LiZCivguKfguLTguKHguKUKK+C4p+C4tOC4oeC4peC4seC4gQor4Lin4Li04Lih4Lil4Liy4LiBCivguKfguLTguKHguLHguIfguKrguLIKK+C4p+C4tOC4oeC4seC4leC4tAor4Lin4Li04Lih4Liy4LiZCivguKfguLTguKHguLLguJnguLTguIHguYDguJvguKPguJUKK+C4p+C4tOC4oeC4uOC4ggor4Lin4Li04Lih4Li44LiVCivguKfguLTguKHguLjguJXguJXguLQKK+C4p+C4tOC5gOC4oeC4peC4t+C4reC4hwor4Lin4Li04LmC4Lih4LiB4LiC4LmMCivguKfguLTguYLguKHguIHguKnguKfguLTguJbguLUKK+C4p+C4tOC5gOC4ouC4mQor4Lin4Li04LmC4Lii4LiECivguKfguLTguKPguIfguKPguK3guIcKK+C4p+C4tOC4o+C4leC4sAor4Lin4Li04Lij4Lih4LiT4LiwCivguKfguLTguKPguKfguLAKK+C4p+C4tOC4o+C4sAor4Lin4Li04Lij4Lix4LiH4Lij4Lit4LiHCivguKfguLTguKPguLHguIoKK+C4p+C4tOC4o+C4seC4lQor4Lin4Li04Lij4Lix4LiV4Li0CivguKfguLTguKPguLLguITguLAKK+C4p+C4tOC4o+C4suC4oQor4Lin4Li04Lij4Liy4Lin4LiwCivguKfguLTguKPguLjguJgKK+C4p+C4tOC4o+C4uOC4rOC4q+C5jAor4Lin4Li04Lij4Li44Lis4Lir4LiBCivguKfguLTguKPguLnguJsKK+C4p+C4tOC4o+C4ueC4m+C4seC4geC4qeC5jAor4Lin4Li04LmA4Lij4LiBCivguKfguLTguYDguKPguJnguJfguKPguYwKK+C4p+C4tOC5guC4o+C4hAor4Lin4Li04LmC4Lij4LiICivguKfguLTguYLguKPguIjguJnguYwKK+C4p+C4tOC5guC4o+C4kgor4Lin4Li04LmC4Lij4LiYCivguKfguLTguYLguKPguJjguJnguYwKK+C4p+C4tOC4peC4seC4meC4lOC4sgor4Lin4Li04Lil4Lix4LiiCivguKfguLTguKXguLLguJQKK+C4p+C4tOC4peC4suC4mwor4Lin4Li04Lil4Liy4Lin4Lix4LiT4Lii4LmMCivguKfguLTguKXguLLguKgKK+C4p+C4tOC4peC4suC4qgor4Lin4Li04Lil4Liy4Liq4Li04LiZ4Li1CivguKfguLTguKXguLTguJvguJTguLIKK+C4p+C4tOC4peC4tOC4qOC4oeC4suC4q+C4o+C4sgor4Lin4Li04LmA4Lil4LibCivguKfguLTguYDguKXguJvguJnguLAKK+C4p+C4tOC5guC4peC4gQor4Lin4Li04LmC4Lil4LiB4LiZ4LiwCivguKfguLTguYLguKXguIjguJnguLAKK+C4p+C4tOC5guC4peC4oQor4Lin4Li04LmE4LilCivguKfguLTguKcKK+C4p+C4tOC4p+C4o+C4k+C5jAor4Lin4Li04Lin4Lij4Lij4LiY4LiZ4LmMCivguKfguLTguKfguKPguLAKK+C4p+C4tOC4p+C4seC4jwor4Lin4Li04Lin4Lix4LiS4LiZ4LmMCivguKfguLTguKfguLHguJkKK+C4p+C4tOC4p+C4suC4lwor4Lin4Li04Lin4Liy4Lir4LmMCivguKfguLTguKfguLLguKvguLAKK+C4p+C4tOC4p+C4tOC4iAor4Lin4Li04Lin4Li04LiVCivguKfguLTguKfguLTguJgKK+C4p+C4tOC5gOC4p+C4gQor4Lin4Li04Lio4Lij4Li44LiVCivguKfguLTguKjguLHguJcKK+C4p+C4tOC4qOC4seC4peC4ouC5jAor4Lin4Li04Lio4Liy4LiC4LiwCivguKfguLTguKjguLLguILguLIKK+C4p+C4tOC4qOC4suC4h+C4hOC5jAor4Lin4Li04Lio4Liy4LilCivguKfguLTguKjguLTguKnguI/guYwKK+C4p+C4tOC4qOC4uOC4l+C4mOC5jAor4Lin4Li04Lio4Li44LiX4LiY4Li04LmMCivguKfguLTguYDguKjguKkKK+C4p+C4tOC5gOC4qOC4qeC4k+C5jAor4Lin4Li04Lip4LiT4Li4CivguKfguLTguKnguJPguLjguIHguKPguKPguKEKK+C4p+C4tOC4qeC4mOC4owor4Lin4Li04Lip4Lix4LiB4LiV4LmMCivguKfguLTguKnguLHguKIKK+C4p+C4tOC4qeC4suC4kwor4Lin4Li04Lip4Li44Lin4Lix4LiVCivguKfguLTguKrguIHguLXguYkKK+C4p+C4tOC4quC4o+C4o+C4iuC4meC4teC4ouC5jAor4Lin4Li04Liq4Lik4LiVCivguKfguLTguKrguKrguLjguIHguKPguKPguKEKK+C4p+C4tOC4quC4seC4h+C5guC4ouC4hAor4Lin4Li04Liq4Lix4LiK4LiZ4LiyCivguKfguLTguKrguLHguI3guI3guLUKK+C4p+C4tOC4quC4seC4ogor4Lin4Li04Liq4Liy4LiC4LiwCivguKfguLTguKrguLLguILguLIKK+C4p+C4tOC4quC4suC4oeC4seC4jQor4Lin4Li04Liq4Liy4LijCivguKfguLTguKrguLLguKPguJcKK+C4p+C4tOC4quC4suC4pQor4Lin4Li04Liq4Liy4Liq4LiwCivguKfguLTguKrguLLguKvguIHguLTguIgKK+C4p+C4tOC4quC4tOC4kAor4Lin4Li04Liq4Li44LiH4LiE4Liy4Lih4Liq4Li14Lih4LiyCivguKfguLTguKrguLjguJfguJjguYwKK+C4p+C4tOC4quC4uOC4l+C4mOC4tOC5jAor4Lin4Li04Liq4Li54LiV4LijCivguKfguLTguYDguKrguJcKK+C4p+C4tOC5gOC4quC4quC4meC4sAor4Lin4Li04Lir4LiECivguKfguLTguKvguIfguITguYwKK+C4p+C4tOC4q+C4peC4seC5iOC4mQor4Lin4Li04Lir4Lix4Lib4Lib4LiV4Li0CivguKfguLTguKvguLLguKLguKrguLAKK+C4p+C4tOC4q+C4suC4owor4Lin4Li04Lir4Li0CivguKfguLTguKvguLTguIfguKrguLAKK+C4p+C4tOC4q+C4tOC4h+C4quC4sgor4Lin4Li04LmA4Lir4Liq4Lig4Liy4LiE4Li1CivguKfguLTguYDguKvguKrguLIKK+C4p+C4tOC4rOC4seC4h+C4hOC5jAor4Lin4Li04Lis4Liy4LijCivguKfguLUKK+C4p+C4teC4iOC4tAor4Lin4Li14LiK4LiZ4Li1CivguKfguLXguIvguYjguLIKK+C4p+C4teC4k+C4sgor4Lin4Li14LmJ4LiUCivguKfguLXguYjguKfguLHguJkKK+C4p+C4teC5iOC5geC4p+C4pwor4Lin4Li14Liq4LiwCivguKfguLjguYnguIcKK+C4p+C4uOC4kOC4tAor4Lin4Li44LiSCivguKfguLjguJLguLQKK+C4p+C4uOC4lAor4Lin4Li44LmI4LiZCivguKfguLjguYnguJkKK+C4p+C4uOC4mgor4Lin4Li44LmJ4LiiCivguKfguLjguKXguYHguJ/guKPguKEKK+C4p+C4ueC5iQor4Lin4Li54LiU4Lin4Liy4LiUCivguKfguLnguJoKK+C4p+C4ueC5iOC4p+C4suC4oQor4LmA4Lin4LmJCivguYDguKfguIQKK+C5gOC4p+C4hOC4tOC4mQor4LmA4Lin4LiE4Li1CivguYDguKfguIgKK+C5gOC4p+C4igor4LmA4Lin4LiK4Lii4Lix4LiZ4LiV4LmMCivguYDguKfguYTguIrguKLguKLguLHguJnguJXguYzguKPguLLguIrguKPguJYKK+C5gOC4p+C4kOC4meC5jAor4LmA4Lin4LiT4LiwCivguYDguKfguJPguLQKK+C5gOC4p+C4k+C4tOC4gQor4LmA4Lin4LiT4Li4CivguYDguKfguJXguJnguYwKK+C5gOC4p+C4leC4owor4LmA4Lin4LiV4Liy4LilCivguYDguKfguJcKK+C5gOC4p+C4l+C4meC4sgor4LmA4Lin4LiX4Lii4LmMCivguYDguKfguJfguLLguIfguITguYwKK+C5gOC4p+C4l+C4suC4h+C4hOC4qOC4suC4quC4leC4o+C5jAor4LmA4Lin4LiX4Liy4LiZ4LiV4LmMCivguYDguKfguJfguLLguJnguJXguLAKK+C5gOC4p+C4l+C4tAor4LmA4Lin4LiX4Li1CivguYDguKfguJjguLAKK+C5gOC4p+C4mOC4tQor4LmA4Lin4LiZCivguYDguKfguYnguJkKK+C5gOC4p+C4meC5hOC4leC4ogor4LmA4Lin4LmE4LiZ4LiiCivguYDguKfguKHguLAKK+C5gOC4p+C4oeC4seC4lQor4LmA4Lin4Lih4Liy4LiV4Li04LiBCivguYDguKfguYnguKIKK+C5gOC4p+C4owor4LmA4Lin4Lij4Lih4LiT4Li1CivguYDguKfguKPguLUKK+C5gOC4p+C5guC4o+C4iOC4meC5jAor4LmA4Lin4Lil4LiyCivguYDguKfguYDguKXguJnguIvguLUKK+C5gOC4p+C4p+C4seC4kwor4LmA4Lin4Lin4Lix4LiT4LiT4Li04Lii4LiwCivguYDguKfguKjguKHguYwKK+C5gOC4p+C4qOC4ouC5jAor4LmA4Lin4Lio4Lii4LiyCivguYDguKfguKrguJnguYwKK+C5gOC4p+C4quC4oOC4uQor4LmA4Lin4Liq4Lih4LmMCivguYDguKfguKrguKHguLAKK+C5gOC4p+C4quC4p+C4seC4kwor4LmA4Lin4Liq4Liq4LiwCivguYDguKfguKrguKrguLHguJnguJTguKMKK+C5gOC4p+C4quC4quC4uOC4geC4o+C4o+C4oQor4LmA4Lin4Liq4Liq4Li44Lin4Lix4LiTCivguYDguKfguKrguLLguKPguLHguIoKK+C5gOC4p+C4quC4tAor4LmA4Lin4Liq4Li04Lii4LiyCivguYDguKfguKvguJkKK+C5gOC4p+C4q+C4sAor4LmA4Lin4Lir4Lix4LiH4LiE4LmMCivguYDguKfguKvguLHguJvguJXguLQKK+C5gOC4p+C4q+C4sgor4LmA4Lin4Lir4Liy4Lii4LiqCivguYDguKfguKzguLgKK+C5gOC4p+C4rOC4uOC4o+C4tOC4ogor4LmA4Lin4LmI4LitCivguYDguKfguYnguLIKK+C5gOC4p+C4tOC4gQor4LmA4Lin4Li04LmJ4LiHCivguYDguKfguLXguYjguKIKK+C5gOC4p+C4teC4ouC4hwor4LmA4Lin4Li14Lii4LiZCivguYDguKfguLXguKLguKMKK+C5gOC4p+C4teC5iOC4ouC4pwor4LmB4Lin4LmJCivguYHguKfguIcKK+C5geC4p+C5ieC4hwor4LmB4Lin4LiUCivguYHguKfguJXguKMKK+C5geC4p+C4mQor4LmB4Lin4LmI4LiZCivguYHguKfguJnguJTguLIKK+C5geC4p+C4mgor4LmB4Lin4LihCivguYHguKfguKcKK+C5geC4p+C5iOC4pwor4LmB4Lin4Lin4Lin4Li04LmA4LiK4Li14Lii4LijCivguYHguKfguLAKK+C5guC4pwor4LmC4Lin4LmICivguYLguKfguIHguLLguKMKK+C5guC4p+C5iOC4hwor4LmC4Lin4LiVCivguYLguKfguJfguLLguJkKK+C5guC4p+C4ogor4LmC4Lin4LmJ4LiiCivguYLguKfguKLguKfguLLguKIKK+C5guC4p+C5ieC5gOC4p+C5iQor4LmC4Lin4Liq4Liy4LiZCivguYLguKfguKvguLLguKMKK+C5hOC4pwor4LmE4Lin4LmJCivguYTguKfguIHguLnguJPguJDguYwKK+C5hOC4p+C4keC4ueC4o+C4ouC5jAor4LmE4Lin4LiX4Lii4LmMCivguYTguKfguJ7guIjguJnguYwKK+C5hOC4p+C4ouC4suC4geC4o+C4k+C5jAor4LmE4Lin4Lii4Liy4Lin4Lix4LiI4LiB4LijCivguYTguKfguKLguLLguKfguLHguIjguKHguLHguKIKK+C5hOC4p+C4o+C4seC4qgor4LmE4Lin4Lin4Lij4Lij4LiTCivguYTguKfguKnguJPguJ4KK+C5hOC4p+C5guC4reC4peC4tOC4mQor4LioCivguKjguIEKK+C4qOC4geC4jwor4Lio4LiB4LilCivguKjguIHguLjguJkKK+C4qOC4geC4uOC4meC4tAor4Lio4LiB4Li44LiZ4Li1CivguKjguIfguIHguLIKK+C4qOC4iOC4tOC4muC4lOC4tQor4Lio4LiI4Li1CivguKjguJAKK+C4qOC4lOC4gQor4Lio4LiVCivguKjguJXguIEKK+C4qOC4meC4tAor4Lio4LmE4LiZ4Liq4LmMCivguKjguJ4KK+C4qOC4nuC4pQor4Lio4LihCivguKjguKHguJkKK+C4qOC4oeC4meC4tQor4Lio4Lih4LiZ4Li14Lii4LmMCivguKjguKHguKjguLLguJkKK+C4qOC4ogor4Lio4Lii4LiZ4LiwCivguKjguKLguJnguLXguKLguYwKK+C4qOC4ouC4suC4oQor4Lio4Lii4Liy4Lih4LiB4Lix4LiT4LiQ4LmMCivguKjguKLguLLguKHguKUKK+C4qOC4owor4Lio4Lij4LiT4Li0CivguKjguKPguJnguLLguKPguLLguKLguJPguYwKK+C4qOC4o+C4oAor4Lio4Lij4Lih4LiT4LiwCivguKjguKPguKPguIHguKMKK+C4qOC4o+C4o+C4geC4o+C4sgor4Lio4Lij4Lij4Lie4Lij4Li1CivguKjguKPguKfguJPguLAKK+C4qOC4o+C4p+C4k+C4teC4ouC5jAor4Lio4Lij4Lin4Li04Lip4LiQ4LiyCivguKjguKPguLHguJYKK+C4qOC4o+C4seC4luC4meC4sAor4Lio4Lij4Lix4LiXCivguKjguKPguLHguJfguJjguLIKK+C4qOC4o+C4seC4meC4luC5jAor4Lio4Lij4Lix4LiZ4Lii4LmMCivguKjguKPguLHguJnguKLguLkKK+C4qOC4o+C4seC4ogor4Lio4Lij4Liy4LiX4LiY4LmMCivguKjguKPguLLguJnguJXguYwKK+C4qOC4o+C4suC4ngor4Lio4Lij4Liy4Lie4LiBCivguKjguKPguLLguKLguLAKK+C4qOC4o+C4suC4p+C4gQor4Lio4Lij4Liy4Lin4LiT4LiwCivguKjguKPguLLguKfguKPguJPguYwKK+C4qOC4o+C4suC4p+C4uOC4mAor4Lio4Lij4Liy4Liq4LiZ4LmMCivguKjguKPguLUKK+C4qOC4o+C4teC4leC4o+C4seC4hwor4Lio4Lij4Li14Lip4LiwCivguKjguKPguLXguKrguLHguIfguITguLXguJUKK+C4qOC4o+C4uOC4lQor4Lio4Lij4Li44LiV4Li0CivguKjguKTguIHguLLguKUKK+C4qOC4pOC4hOC4suC4pQor4Lio4Lik4LiH4LiE4LmMCivguKjguKTguIfguITguLLguKMKK+C4qOC4pOC4h+C4hOC4suC4o+C4tOC4mQor4Lio4Lik4LiH4LiE4Liy4Lij4Li1CivguKjguKXguKAKK+C4qOC4peC4seC4lgor4Lio4Lil4Li04Lip4LiP4LmMCivguKjguKXguLTguKnguLIKK+C4qOC4pwor4Lio4Lin4Lio4Li44LijCivguKjguKfguLHguKjguJkKK+C4qOC4p+C4seC4qgor4Lio4Lin4LiyCivguKjguKfguLLguJkKK+C4qOC4p+C4suC4qgor4Lio4Lin4Li04LiVCivguKjguKfguLTguJXguKMKK+C4qOC4qOC4sAor4Lio4Lio4Li0CivguKjguKjguLTguJkKK+C4qOC4qOC4tQor4Lio4Liq4LiyCivguKjguK0KK+C4qOC4reC4gQor4Lio4Lix4LiB4LiU4LiyCivguKjguLHguIHguJTguLQKK+C4qOC4seC4geC4lOC4tOC5jAor4Lio4Lix4LiB4LiV4Li0CivguKjguLHguIHguKLguYwKK+C4qOC4seC4geC4ouC4sAor4Lio4Lix4LiB4Lij4Liy4LiKCivguKjguLHguIfguIHguKMKK+C4qOC4seC4h+C4geC4sgor4Lio4Lix4LiH4LiB4Li4CivguKjguLHguJXguKPguLgKK+C4qOC4seC4leC4o+C4uQor4Lio4Lix4LiX4LiY4LiZ4LiwCivguKjguLHguJnguKrguJnguLAKK+C4qOC4seC4meC4quC4meC4teC4ouC5jAor4Lio4Lix4Lie4LiX4LmMCivguKjguLHguKHguKLguLgKK+C4qOC4seC4ouC4ouC4sgor4Lio4Lix4LilCivguKjguLHguKXguIEKK+C4qOC4seC4peC4geC4tQor4Lio4Lix4Liq4LiU4LijCivguKjguLHguKrguJXguKPguLIKK+C4qOC4seC4quC4leC4o+C4tQor4Lio4Lix4Liq4LiiCivguKjguLLguIEKK+C4qOC4suC4geC4leC4sAor4Lio4Liy4LiB4Lii4LiwCivguKjguLLguIHguKfguKMKK+C4qOC4suC4geC4suC4h+C4hOC5jAor4Lio4Liy4LiB4Li04LiZ4Li1CivguKjguLLguI7guIEKK+C4qOC4suC4kOC4ouC4sAor4Lio4Liy4LiTCivguKjguLLguJUKK+C4qOC4suC4mQor4Lio4Liy4LiZ4LiV4LmMCivguKjguLLguJnguJXguLQKK+C4qOC4suC4meC4tOC4lQor4Lio4Liy4LibCivguKjguLLguJ7guJfguYwKK+C4qOC4suC4nuC4owor4Lio4Liy4Lih4LiwCivguKjguLLguKHguLIKK+C4qOC4suC4oeC4teC4pQor4Lio4Liy4Lij4LiXCivguKjguLLguKPguJfguLnguKUKK+C4qOC4suC4o+C4tOC4geC4sgor4Lio4Liy4LilCivguKjguLLguKXguLIKK+C4qOC4suC4peC4tAor4Lio4Liy4Lio4Lin4Lix4LiVCivguKjguLLguKrguIEKK+C4qOC4suC4quC4lOC4sgor4Lio4Liy4Liq4LiV4Lij4LmMCivguKjguLLguKrguJXguKPguLIKK+C4qOC4suC4quC4meC5jAor4Lio4Liy4Liq4LiZ4LiyCivguKjguLLguKrguJnguLXguKLguYwKK+C4qOC4suC4quC5guC4meC4p+C4suC4lwor4Lio4Li04LiB4Lip4LiBCivguKjguLTguIHguLLguKMKK+C4qOC4tOC4guC4owor4Lio4Li04LiC4Lij4Li04LiZCivguKjguLTguILguKPguLUKK+C4qOC4tOC4guC4seC4k+C4keC5jAor4Lio4Li04LiC4LiyCivguKjguLTguITguLLguKUKK+C4qOC4tOC4h+C4guC4owor4Lio4Li04LiH4LiC4Lij4Li04LiZCivguKjguLTguJUKK+C4qOC4tOC4luC4tQor4Lio4Li04Lie4Li04Lij4LiwCivguKjguLTguKPguLAKK+C4qOC4tOC4o+C4sgor4Lio4Li04Lij4Liy4Lih4Lie4Li44LiKCivguKjguLTguYLguKPguKPguLLguJoKK+C4qOC4tOC4peC4m+C5jAor4Lio4Li04Lil4Lib4LiwCivguKjguLTguKXguLIKK+C4qOC4tOC4p+C4sAor4Lio4Li04Lin4Li04LiB4LiyCivguKjguLTguKjguLXguKPguLAKK+C4qOC4tOC4qOC4uAor4Lio4Li04Lip4LiO4Li0CivguKjguLTguKnguI/guYwKK+C4qOC4tOC4qeC4ouC5jAor4Lio4Li14LiB4LijCivguKjguLXguILguKMKK+C4qOC4teC4leC4pQor4Lio4Li14LilCivguKjguLbguIEKK+C4qOC4tuC4geC4qeC4sgor4Lio4Li44LiB4Lij4LmMCivguKjguLjguIHguKXguLHguKEKK+C4qOC4uOC4geC4sAor4Lio4Li44LiI4Li0CivguKjguLjguJPguJHguLIKK+C4qOC4uOC4k+C4keC4tQor4Lio4Li44LiX4LiYCivguKjguLjguJfguJjguLQKK+C4qOC4uOC4mQor4Lio4Li44LiZ4Lix4LiBCivguKjguLjguJnguLQKK+C4qOC4uOC4peC4tQor4Lio4Li44Lip4Li04LijCivguKjguLjguKnguLTguKUKK+C4qOC4ueC4geC4owor4Lio4Li54LiX4LijCivguKjguLnguJnguKLguYwKK+C4qOC4ueC4pQor4Lio4Li54Lil4Li04LiZCivguYDguKjguKPguJPguLUKK+C5gOC4qOC4o+C4qeC4kOC5jAor4LmA4Lio4Lij4Lip4LiQ4Li1CivguYDguKjguKPguYnguLIKK+C5gOC4qOC4peC4qQor4LmA4Lio4Lin4LiU4LiH4LiE4LmMCivguYDguKjguKfguJTguLXguKAKK+C5gOC4qOC4p+C4lQor4LmA4Lio4Lin4LiV4LijCivguYDguKjguKfguLLguKUKK+C5gOC4qOC4qQor4LmA4Lio4Liy4LmE4LiI4LiiCivguYDguKjguLLguKPguYwKK+C5gOC4qOC4suC4o+C4ouC4sAor4LmA4Lio4Li04LiBCivguYDguKjguLXguKLguKMKK+C5guC4qOC4gQor4LmC4Lio4LiB4LiyCivguYLguKjguIHguLUKK+C5guC4qOC4iOC4meC4sAor4LmC4Lio4LiI4LiZ4Li14Lii4LiwCivguYLguKjguIjguLQKK+C5guC4qOC4luC4sAor4LmC4Lio4LiY4LiZ4LiwCivguYLguKjguJzguLAKK+C5guC4qOC4oAor4LmC4Lio4Lig4LiZCivguYLguKjguKDguLIKK+C5guC4qOC4oOC4tOC4lQor4LmC4Lio4Lig4Li04LiZCivguYLguKjguKDguLTguKnguJDguYwKK+C5guC4qOC4oOC4tQor4LmC4Lio4Lij4LiT4Li0CivguYLguKjguKPguJPguLUKK+C5guC4qOC4o+C4lOC4sgor4LmC4Lio4Lij4LiV4LijCivguYLguKjguKXguIEKK+C5guC4qOC4p+C4oOC4suC4ngor4LmE4Lio4LilCivguYTguKjguKfguLAKK+C4qQor4Lip4Lih4LiyCivguKnguLHguI8KK+C4qeC4seC4j+C4geC4sAor4Lip4Lix4LiRCivguKnguLHguJMKK+C4qeC4seC4qQor4Lip4Lix4Lip4LiP4Li1CivguKnguLHguKnguJAKK+C4qeC4seC4qeC4kOC4tQor4Lip4Liy4Lij4Lig4Liy4LiE4Lit4LijCivguYLguKnguJHguKgKK+C5guC4qeC4keC4qOC4seC4mQor4LiqCivguKrguIEKK+C4quC4geC4j+C4sAor4Liq4LiB4LiQ4Liy4LiZCivguKrguIHguJfguLLguITguLLguKHguLUKK+C4quC4geC4meC4mOC5jAor4Liq4LiB4Lib4Lij4LiBCivguKrguIHguKPguJPguLXguKLguYwKK+C4quC4geC4o+C4o+C4iOC5jAor4Liq4LiB4Lij4Lij4LiWCivguKrguIHguKPguKPguKHguIHguKPguLTguKLguLIKK+C4quC4geC4o+C4seC4oQor4Liq4LiB4Lij4Li5CivguKrguIHguKUKK+C4quC4geC4seC4lAor4Liq4LiB4Lix4LiU4LmB4LiE4Lij4LmICivguKrguIHguLIKK+C4quC4geC4suC4ouC5geC4peC4mgor4Liq4LiB4Liy4LinCivguKrguIHguLTguJfguLLguITguLLguKHguLUKK+C4quC4geC4tQor4Liq4LiB4Li44LiTCivguKrguIHguLjguJPguLIKK+C4quC4geC4uOC4k+C4tQor4Liq4LiB4Li44LiZCivguKrguIHguLjguJnguJXguYwKK+C4quC4geC4uOC4pQor4Liq4LmA4LiB4LiVCivguKrguYHguIHguJnguYDguJTguLXguKLguKEKK+C4quC4guC4sAor4Liq4LiC4LiyCivguKrguILguLQKK+C4quC4hwor4Liq4LmI4LiHCivguKrguIfguIHguKMKK+C4quC4h+C4geC4o+C4suC4meC4leC5jAor4Liq4LiH4LiB4LiyCivguKrguIfguYLguIHguIgKK+C4quC4h+C4hOC5jAor4Liq4LiH4LiE4LijCivguKrguIfguITguKPguLLguKEKK+C4quC4h+C5gOC4hOC4o+C4suC4sOC4q+C5jAor4Liq4LiH4LiG4LmMCivguKrguIfguJoKK+C4quC4h+C4p+C4mQor4Liq4LiH4LmA4Lip4LibCivguKrguYjguIfguKrguIHguLLguKMKK+C4quC4h+C4quC4seC4ogor4Liq4LiH4Liq4Liy4LijCivguKrguIfguLHguJQKK+C4quC4h+C5iOC4sgor4Liq4LiI4LmK4Lin4LiUCivguKrguJAKK+C4quC4k+C4keC5jAor4Liq4LiUCivguKrguJTguIEKK+C4quC4lOC4mQor4Liq4LiU4Lih4Lig4LmMCivguKrguJTguLHguJkKK+C4quC4lOC4seC4mgor4Liq4LiU4Lix4Lia4Lib4LiB4Lij4LiT4LmMCivguKrguJTguLMKK+C4quC4lOC4tQor4Liq4LiU4Li44LiU4Li1CivguKrguJTguLnguJsKK+C4quC4lQor4Liq4LiV4LiBCivguKrguJXguJkKK+C4quC4leC4o+C4reC4meC5gOC4iuC4teC4ouC4oQor4Liq4LiV4Lij4Li04LiB4LiZ4Li04LiZCivguKrguJXguKPguLUKK+C4quC4leC4seC4mQor4Liq4LiV4Lix4LiZ4Lii4LmMCivguKrguJXguLHguJ7guJjguYwKK+C4quC4leC4seC4n+C4n+C5jAor4Liq4LiV4Lix4Lih4Lig4LmMCivguKrguJXguLLguIfguITguYwKK+C4quC4leC4suC4n+C4n+C5jAor4Liq4LiV4Li0CivguKrguJXguLTguYrguIEKK+C4quC4leC4tQor4Liq4LiV4Li14LihCivguKrguJXguLkKK+C4quC4leC4ueC4mwor4Liq4LmA4LiV4LmH4LiBCivguKrguYDguJXguJnguYDguKXguKoKK+C4quC5gOC4leC4ouC5jAor4Liq4LmE4LiV4Lij4LmK4LiE4LmMCivguKrguJbguJkKK+C4quC4luC4muC4lOC4tQor4Liq4LiW4LilCivguKrguJbguKfguLXguKPguLAKK+C4quC4luC4suC4mQor4Liq4LiW4Liy4LiZ4LiwCivguKrguJbguLLguJnguLUKK+C4quC4luC4suC4muC4gQor4Liq4LiW4Liy4Lia4Lix4LiZCivguKrguJbguLLguJvguJnguLIKK+C4quC4luC4suC4m+C4meC4tOC4gQor4Liq4LiW4Liy4Lib4LiZ4Li14Lii4Lie4Lii4Liy4LiB4Lij4LiT4LmMCivguKrguJbguLLguJvguJnguLXguKLguKfguLLguJfguLUKK+C4quC4luC4suC4m+C4seC4leC4ouC4geC4o+C4o+C4oQor4Liq4LiW4Liy4Lie4LijCivguKrguJbguLLguKUKK+C4quC4luC4suC4p+C4owor4Liq4LiW4Li04LiVCivguKrguJbguLTguJXguJnguKjguLLguKrguJXguKPguYwKK+C4quC4luC4tOC4leC4tAor4Liq4LiW4Li44LilCivguKrguJbguLnguJsKK+C4quC4l+C4suC4owor4Liq4LiX4Li24LiHCivguKrguJfguLjguKEKK+C4quC4mOC4mQor4Liq4LiY4Li44Liq4LiwCivguKrguJkKK+C4quC5ieC4mQor4Liq4LiZ4LmA4LiU4LiBCivguKrguJnguJfguJnguLIKK+C4quC4meC4l+C4o+C4o+C4qAor4Liq4LiZ4LiX4Lij4Lij4Lio4LiZ4LmMCivguKrguJnguJfguLTguKgKK+C4quC4meC5gOC4l+C4qAor4Liq4LiZ4LmA4LiX4LmI4Lir4LmMCivguKrguJnguJjguKLguLIKK+C4quC4meC4mOC4tAor4Liq4LiZ4LiY4Li04Lit4Lil4LiH4LiB4LiVCivguKrguJnguJnguKPguLLguITguLIKK+C4quC4meC4oQor4Liq4LiZ4Lin4LiZCivguKrguJnguKrguKPguYnguK3guKIKK+C4quC4meC4reC4hwor4Liq4LiZ4Lit4LiaCivguKrguJnguK3guKEKK+C4quC4meC4sAor4Liq4LiZ4Lix4LiUCivguKrguJnguLHguYjguJkKK+C4quC4meC4seC4mgor4Liq4LiZ4Lix4Lia4Liq4LiZ4Li44LiZCivguKrguJnguLLguJTguIEKK+C4quC4meC4suC4mQor4Liq4LiZ4Liy4Lia4LiBCivguKrguJnguLLguJrguLHguJkKK+C4quC4meC4suC4oQor4Liq4LiZ4Liy4Lii4Li4CivguKrguJnguLTguIEKK+C4quC4meC4tOC4lwor4Liq4LiZ4Li04LiYCivguKrguJnguLTguKEKK+C4quC4meC4tOC4oeC4quC4o+C5ieC4reC4ogor4Liq4LiZ4Li44LiBCivguKrguJnguLjguIHguYDguIHguK3guKPguYwKK+C4quC4meC4uOC4ggor4Liq4LiZ4Li44LiVCivguKrguJnguLjguYjguJkKK+C4quC4mgor4Liq4Lia4LiHCivguKrguJrguIgKK+C4quC4muC4lgor4Liq4Lia4LmA4Liq4Li14LiiCivguKrguJrguLHguJkKK+C4quC4muC4suC4ogor4Liq4Lia4Li54LmICivguKrguYTguJoKK+C4quC4m+C4o+C4tOC4hwor4Liq4Lib4Liy4LmA4LiB4LiV4LiV4Li1CivguKrguJvguLLguKIKK+C4quC4m+C4tOC4o+C4tOC4lQor4Liq4LmA4Lib4LiB4LiV4Lij4Lix4LihCivguKrguYDguJvguIHguYLguJfguKPguKrguYLguITguJsKK+C4quC5hOC4m+C4o+C4tOC4peC4peC4seC4oQor4Liq4Lie4Lix4LmJ4LiZCivguKrguJ7guLLguJoKK+C4quC4oOC4seC4h+C4hOC4oeC4k+C4keC4pQor4Liq4Lig4LiyCivguKrguKDguLLguIQKK+C4quC4oOC4suC4ngor4Liq4Lig4Liy4Lin4LiwCivguKrguKEKK+C4quC5ieC4oQor4Liq4Lih4LiB4Liy4LijCivguKrguKHguIjguLLguKPguLUKK+C4quC4oeC4iuC4teC4p+C4tOC4leC4sgor4Liq4Lih4LiK4Li14Lin4Li04LiY4Lij4Lij4LihCivguKrguKHguI3guLIKK+C4quC4oeC5gOC4jeC4qAor4Liq4Lih4LiT4LiwCivguKrguKHguJTguLbguIfguKrguYwKK+C4quC4oeC4lOC4uOC4pQor4Liq4Lih4LmA4LiU4LmH4LiICivguKrguKHguJbguLAKK+C4quC4oeC4meC4suC4hOC4uOC4kwor4Liq4Lih4Lia4Lix4LiV4Li0CivguKrguKHguJrguLjguIHguKrguKHguJrguLHguJkKK+C4quC4oeC4muC4ueC4o+C4k+C5jAor4Liq4Lih4Lia4Li54Lij4LiT4Liy4LiN4Liy4Liq4Li04LiX4LiY4Li04Lij4Liy4LiK4Lii4LmMCivguKrguKHguJvguKPguLDguJTguLUKK+C4quC4oeC4m+C4pOC4lOC4tQor4Liq4Lih4Lib4Lik4LmF4LiU4Li1CivguKrguKHguJzguLjguKoKK+C4quC4oeC4nuC4h+C4qOC5jAor4Liq4Lih4Lie4LilCivguKrguKHguJ7guLHguIHguJnguLHguIHguIHguLLguKMKK+C4quC4oeC4nuC4seC4leC4quC4owor4Liq4Lih4Lie4Liy4LiqCivguKrguKHguYDguJ7guIoKK+C4quC4oeC5guC4nuC4mOC4meC5jAor4Liq4Lih4LmC4Lie4LiY4Li0CivguKrguKHguKDguJ4KK+C4quC4oeC4oOC4suC4owor4Liq4Lih4LmC4Lig4LiECivguKrguKHguYLguKDguIoKK+C4quC4oeC4oeC4lQor4Liq4Lih4Lih4LiV4Li0CivguKrguKHguKHguLLguJXguKMKK+C4quC4oeC4oeC4uOC4leC4tAor4Liq4Lih4Lih4Li54LilCivguKrguKHguYLguKHguJcKK+C4quC4oeC5guC4ouC4hAor4Liq4Lih4LijCivguKrguKHguKPguJQKK+C4quC4oeC4o+C4o+C4lgor4Liq4Lih4Lij4LiqCivguKrguKHguKTguJTguLUKK+C4quC4oeC4pOC4leC4tAor4Liq4Lih4Lik4LmF4LiU4Li1CivguKrguKHguKfguLHguKIKK+C4quC4oeC4p+C4suC4ouC4sAor4Liq4Lih4LmA4Liq4Lij4LmH4LiICivguKrguKHguK0KK+C4quC4oeC4reC4hwor4Liq4Lih4Lit4Liq4Liz4LmA4Lig4LiyCivguKrguKHguLHguIQKK+C4quC4oeC4seC4hOC4owor4Liq4Lih4Lix4LiH4LiE4Li1CivguKrguKHguLHguIoKK+C4quC4oeC4seC4iuC4iuC4sgor4Liq4Lih4Lix4LiVCivguKrguKHguLHguJkKK+C4quC4oeC4seC4meC4leC5jAor4Liq4Lih4Lix4LiiCivguKrguKHguLIKK+C4quC4oeC4suC4hOC4oQor4Liq4Lih4Liy4LiI4Liy4LijCivguKrguKHguLLguIrguLTguIEKK+C4quC4oeC4suC4l+C4suC4mQor4Liq4Lih4Liy4LiY4Li0CivguKrguKHguLLguJkKK+C4quC4oeC4suC4meC4seC4leC4leC4sgor4Liq4Lih4Liy4LmC4LiZ4LiV4Lih4LmMCivguKrguKHguLLguJrguLHguJXguLQKK+C4quC4oeC4suC4nuC4seC4meC4mOC4o+C4seC4kAor4Liq4Lih4Liy4LiqCivguKrguKHguYjguLPguYDguKrguKHguK0KK+C4quC4oeC4tOC4hwor4Liq4Lih4Li04LiH4LiX4Lit4LiHCivguKrguKHguLTguJUKK+C4quC4oeC4tOC4leC4tAor4Liq4Lih4Li04LiX4LiY4LmMCivguKrguKHguLTguJfguJjguLQKK+C4quC4oeC4tQor4Liq4Lih4Li14LibCivguKrguKHguLXguKMKK+C4quC4oeC4uOC4gQor4Liq4Lih4Li44LiI4LiI4Lix4LiiCivguKrguKHguLjguIjguYDguInguJcKK+C4quC4oeC4uOC4j+C4kOC4suC4mQor4Liq4Lih4Li44LiUCivguKrguKHguLjguJXguJbguLLguJkKK+C4quC4oeC4uOC4l+C4owor4Liq4Lih4Li44LiX4Lij4LiBCivguKrguKHguLjguJfguLHguKIKK+C4quC4oeC4uOC4l+C4tOC4lQor4Liq4Lih4Li44LiZCivguKrguKHguLjguJnguYTguJ7guKMKK+C4quC4oeC4uOC4peC5geC4p+C5ieC4hwor4Liq4Lih4Li44Lir4LmMCivguKrguYLguKHguJjguLLguJkKK+C4quC5guC4oeC4quC4owor4Liq4Lii4LiUCivguKrguKLguJnguLAKK+C4quC4ouC4mgor4Liq4Lii4Lih4Lie4LijCivguKrguKLguKHguKDguLkKK+C4quC4ouC4reC4hwor4Liq4Lii4Lit4LiZCivguKrguKLguLHguKHguJ7guKMKK+C4quC4ouC4seC4oeC4p+C4o+C4sgor4Liq4Lii4Liy4LihCivguKrguKLguLLguKIKK+C4quC4ouC4tOC4pwor4Liq4Lii4Li04LmJ4LinCivguKrguKLguLjguYjguJkKK+C4quC4ouC4uOC4oeC4nuC4owor4Liq4Lii4Li44Lih4Lig4Li5CivguKrguKMKK+C4quC4o+C4gQor4Liq4Lij4LiHCivguKrguKPguYjguIcKK+C4quC4o+C4j+C4sAor4Liq4Lij4LiT4LiwCivguKrguKPguJTguLHguIEKK+C4quC4o+C4lOC4tuC5iOC4mQor4Liq4Lij4LiU4Li34LmI4LiZCivguKrguKPguJXguLAKK+C4quC4o+C4leC4seC4gQor4Liq4Lij4LiX4LiwCivguKrguKPguJfguLbguIcKK+C4quC4o+C5geC4l+C4mgor4Liq4Lij4LiZ4Li44LiBCivguKrguKPguYDguJnguLLguLAKK+C4quC4o+C5hOC4mQor4Liq4Lij4LiaCivguKrguKPguJrguJoKK+C4quC4o+C4muC4seC4mgor4Liq4Lij4LieCivguKrguKPguYDguJ7guIrguI0KK+C4quC4o+C4oOC4sAor4Liq4Lij4Lig4Lix4LiN4LiN4LiwCivguKrguKPguKDguLkKK+C4quC4o+C4oQor4Liq4Lij4LijCivguKrguKPguKPguITguYwKK+C4quC4o+C4o+C4ngor4Liq4Lij4Lij4Lie4Lix4LiK4LiNCivguKrguKPguKPguYDguJ7guIrguI0KK+C4quC4o+C4o+C5gOC4nuC4iuC4uOC4lOC4sgor4Liq4Lij4Lij4Lin4LiHCivguKrguKPguKPguYDguKrguKPguLTguI0KK+C4quC4o+C4peC4mQor4Liq4Lij4Lil4LihCivguKrguKPguKXguKHguKrguKXguKfguJkKK+C4quC4o+C4peC4reC4lAor4Liq4Lij4Lil4Lit4LiZCivguKrguKPguKXguLAKK+C4quC4o+C4peC5ieC4suC4ogor4Liq4Lij4Lil4Li04LiUCivguKrguKPguYDguKXguIIKK+C4quC4o+C4p+C4hwor4Liq4Lij4Lin4LibCivguKrguKPguKfguKEKK+C4quC4o+C4p+C4pQor4Liq4Lij4Lin4Lil4LmA4LiqCivguKrguKPguKfguKXguYDguKrguYDguK7guK7guLIKK+C4quC4o+C5gOC4quC4o+C4tOC4jQor4Liq4Lij4LmJ4Lit4LiiCivguKrguKPguYnguK3guKLguJfguLDguYHguKIKK+C4quC4o+C4sAor4Liq4Lij4Liw4LiB4LitCivguKrguKPguLDguITguKPguLLguI0KK+C4quC4o+C4sOC4lOC4sAor4Liq4Lij4Liw4LiX4LmJ4Lit4LiZCivguKrguKPguLDguJ7guKPguLHguYjguIcKK+C4quC4o+C4sOC4reC4suC4lAor4Liq4Lij4Liw4Lit4Li34LmJ4LiZCivguKrguKPguLHguYjguIcKK+C4quC4o+C4seC4quC4p+C4lOC4tQor4Liq4Lij4LmI4Liy4LiHCivguKrguKPguYnguLLguIcKK+C4quC4o+C4suC4jQor4Liq4Lij4LmJ4Liy4Lin4LmA4Liq4Li14Lii4LinCivguKrguKPguLTguJUKK+C4quC4o+C4teC5iQor4Liq4Lij4Li14Lij4LiwCivguKrguKPguLXguKrguKTguJoKK+C4quC4o+C4uOC4gQor4Liq4Lij4Li44LiHCivguKrguKPguLjguYLguJnguIEKK+C4quC4o+C4uOC4mwor4Liq4Lij4Li44Liq4Lij4LiwCivguKrguKPguLnguJsKK+C4quC5guC4o+C4igor4Liq4Lik4LiBCivguKrguKTguITguLLguKUKK+C4quC4pOC4lQor4Liq4Lik4Lip4LiO4LmMCivguKrguKTguKnguI7guLUKK+C4quC4pQor4Liq4Lil4LiUCivguKrguKXguJoKK+C4quC4peC4p+C4mQor4Liq4Lil4Lin4LiiCivguKrguKXguK3guJQKK+C4quC4peC4reC4mQor4Liq4Lil4Lit4LiiCivguKrguKXguLAKK+C4quC4peC4sOC4quC4peC4p+C4ogor4Liq4Lil4Lix4LiBCivguKrguKXguLHguIHguYDguJXguYkKK+C4quC4peC4seC4geC4quC4s+C4hOC4seC4jQor4Liq4Lil4Lix4LiUCivguKrguKXguLHguJTguYTguJQKK+C4quC4peC4seC4mgor4Liq4Lil4Lix4LihCivguKrguKXguLHguKcKK+C4quC4peC4sgor4Liq4Lil4Liy4LiBCivguKrguKXguLLguIHguLIKK+C4quC4peC4suC4hwor4Liq4Lil4LmJ4Liy4LiHCivguKrguKXguLLguJQKK+C4quC4peC4suC4leC4seC4mQor4Liq4Lil4Liy4LiaCivguKrguKXguLLguKEKK+C4quC4peC4suC4ogor4Liq4Lil4Li04LiUCivguKrguKXguLTguKUKK+C4quC4peC4tuC4gQor4Liq4Lil4Li24LiHCivguKrguKXguLjguJUKK+C4quC4peC4uOC4mgor4Liq4Lil4Li44Lih4Lie4LijCivguKrguYHguKXguIcKK+C4quC5guC4peC4lAor4Liq4LmE4Lil4LiU4LmMCivguKrguKfguIEKK+C4quC5ieC4p+C4hwor4Liq4Lin4LiUCivguKrguKfguJkKK+C4quC5iOC4p+C4mQor4Liq4Lin4LiZ4LiwCivguKrguKfguJnguLTguJUKK+C4quC4p+C4mgor4Liq4Lin4LihCivguKrguYnguKfguKEKK+C4quC4p+C4ogor4Liq4LmI4Lin4LiiCivguKrguYnguKfguKIKK+C4quC4p+C4ouC4oQor4Liq4Lin4LijCivguKrguKfguKPguKPguITguYwKK+C4quC4p+C4o+C4o+C4ouC4sgor4Liq4Lin4LiwCivguKrguKfguLHguKrguJTguLTguYwKK+C4quC4p+C4seC4quC4lOC4tQor4Liq4Lin4Lix4Liq4LiV4Li04LiB4LiwCivguKrguKfguLIKK+C4quC4p+C4suC4hOC4lQor4Liq4Lin4Liy4LiHCivguKrguKfguYjguLLguIcKK+C4quC4p+C4suC4lAor4Liq4Lin4Liy4LiU4Li0CivguKrguKfguLLguJcKK+C4quC4p+C4suC4mQor4Liq4Lin4LmI4Liy4LiZCivguKrguKfguYnguLLguJkKK+C4quC4p+C4suC4mgor4Liq4Lin4Liy4Lih4Li0CivguKrguKfguLLguKHguLUKK+C4quC4p+C4suC4ogor4Liq4Lin4Liy4Liq4LiU4Li04LmMCivguKrguKfguLLguKvguLAKK+C4quC4p+C4tOC4hwor4Liq4Lin4Li04LiH4Liq4Lin4Liy4LiiCivguKrguKfguLTguI3guI3guLLguJPguIHguJfguKPguLHguJ7guKLguYwKK+C4quC4p+C4tOC4leC4i+C5jAor4Liq4Liq4Liy4LijCivguKrguKrguLjguKPguLAKK+C4quC4quC4uOC4o+C4tQor4Liq4Lir4Lix4Lih4Lia4LiU4Li1CivguKrguKvguLHguKrguKPguLHguIfguKrguLUKK+C4quC4q+C4seC4quC4quC4sAor4Liq4Lir4Lix4Liq4LiyCivguKrguK0KK+C4quC5iOC4rQor4Liq4Lit4LiHCivguKrguYjguK3guIcKK+C4quC5ieC4reC4hwor4Liq4Lit4LiUCivguKrguK3guJkKK+C4quC5iOC4reC4mQor4Liq4Lit4LiaCivguKrguK3guJ7guKXguK0KK+C4quC5ieC4reC4oQor4Liq4Lit4LiiCivguKrguYjguK3guYDguKrguLXguKLguJQKK+C4quC4sAor4Liq4Liw4LiB4LiUCivguKrguLDguIHguK0KK+C4quC4sOC4geC4suC4hwor4Liq4Liw4LiB4Liy4Lij4LiwCivguKrguLDguIHguLLguKPguLDguJXguLLguKvguKPguLIKK+C4quC4sOC4geC4tOC4lAor4Liq4Liw4LmA4LiB4LmH4LiUCivguKrguLDguYHguIEKK+C4quC4sOC4hOC4o+C5ieC4rQor4Liq4Liw4LiE4Lij4Liy4LiNCivguKrguLDguITguYnguLLguJkKK+C4quC4sOC5gOC4h+C4suC4sOC4quC4sOC5geC4h+C4sAor4Liq4Liw4LmD4LiICivguKrguLDguJTguKEKK+C4quC4sOC4lOC4p+C4gQor4Liq4Liw4LiU4Lix4LiBCivguKrguLDguJTguLTguYnguIcKK+C4quC4sOC4lOC4tuC4hwor4Liq4Liw4LiU4Li34LitCivguKrguLDguJTguLjguYnguIcKK+C4quC4sOC4lOC4uOC4lAor4Liq4Liw4LmA4LiU4LmH4LiUCivguKrguLDguYDguJTguLIKK+C4quC4sOC5gOC4lOC4suC4sAor4Liq4Liw4LiV4LitCivguKrguLDguJXguLLguKvguKHguLHguJkKK+C4quC4sOC4leC4tgor4Liq4Liw4LiV4Li34LitCivguKrguLDguJXguLgKK+C4quC4sOC5gOC4leC5iuC4sAor4Liq4Liw4LmC4LiV4LiBCivguKrguLDguJfguIEKK+C4quC4sOC4l+C4mQor4Liq4Liw4LiX4LmJ4Lit4LiZCivguKrguLDguJfguYnguLLguJkKK+C4quC4sOC4l+C4tuC4gQor4Liq4Liw4LiX4Li24LiZCivguKrguLDguJfguLbguYjguJkKK+C4quC4sOC5gOC4l+C4tOC4mQor4Liq4Liw4LmA4LiX4Li04LmJ4LiZCivguKrguLDguYDguJfguLfguK3guJkKK+C4quC4sOC5gOC4l+C4t+C5ieC4reC4mQor4Liq4Liw4Lia4LiwCivguKrguLDguJrguLHguIEKK+C4quC4sOC4muC4seC4lAor4Liq4Liw4Lia4Lix4LmJ4LiZCivguKrguLDguJrguLHguJnguIfguLIKK+C4quC4sOC4muC4seC4meC4h+C4suC4leC5ieC4mQor4Liq4Liw4Lia4LmJ4LiyCivguKrguLDguJrguLkKK+C4quC4sOC5geC4muC4hwor4Liq4Liw4LmA4Lib4Liw4Liq4Liw4Lib4LiwCivguKrguLDguJ7guKPguLHguIEKK+C4quC4sOC4nuC4o+C4seC5iOC4hwor4Liq4Liw4Lie4Lij4Li24LiH4LiB4Lil4Lix4LinCivguKrguLDguJ7guKPguLbguJoKK+C4quC4sOC4nuC4seC4gQor4Liq4Liw4Lie4Lix4LiHCivguKrguLDguJ7guLHguJQKK+C4quC4sOC4nuC4seC5ieC4mQor4Liq4Liw4Lie4Liy4LiZCivguKrguLDguJ7guLLguKIKK+C4quC4sOC5gOC4nuC4o+C5iOC4sgor4Liq4Liw4LmC4Lie4LiBCivguKrguLDguYDguKDguLIKK+C4quC4sOC5g+C4oOC5iQor4Liq4Liw4LmC4Lih4LiHCivguKrguLDguKPguLDguJXguLAKK+C4quC4sOC4o+C4sOC5geC4q+C4meC5iAor4Liq4Liw4Lij4Li14LiV4Lie4LiH4Lio4LmMCivguKrguLDguKXguLDguJvguLDguJXguLjguYjguJkKK+C4quC4sOC4peC4suC4hwor4Liq4Liw4Lil4Li24Lih4Liq4Liw4Lil4Li34LitCivguKrguLDguKfguLXguYnguJTguKrguLDguKfguYnguLLguJQKK+C4quC4sOC4quC4oQor4Liq4Liw4Liq4Liy4LiHCivguKrguLDguK3guLLguIcKK+C4quC4sOC4reC4suC4lAor4Liq4Liw4Lit4LmJ4Liy4LiZCivguKrguLDguK3guLTguYnguIcKK+C4quC4sOC4reC4tOC4lOC4quC4sOC5gOC4reC4teC4ouC4mQor4Liq4Liw4Lit4Li24LiBCivguKrguLDguK3guLfguYnguJkKK+C4quC4sOC5gOC4reC4pwor4Liq4Liw4LmA4Lit4Lit4LiwCivguKrguLDguYLguK3guJTguKrguLDguK3guIcKK+C4quC4sOC5hOC4rQor4Liq4Lix4LiBCivguKrguLHguIHguIHguLAKK+C4quC4seC4geC4geC4seC4iOC4iOC4sAor4Liq4Lix4LiB4LiB4Liy4Lij4LiwCivguKrguLHguIHguILguKPguLIKK+C4quC4seC4geC4guC4tQor4Liq4Lix4LiB4LiP4LiwCivguKrguLHguIHguJXguLAKK+C4quC4seC4geC4ouC4sAor4Liq4Lix4LiB4Lin4LiyCivguKrguLHguIHguKvguKXguLLguJQKK+C4quC4seC4guC4ouC4sAor4Liq4Lix4LiECivguKrguLHguITguITguLAKK+C4quC4seC5iOC4hwor4Liq4Lix4LiH4LiB4Lih4LiX4Lij4Lix4Lie4Lii4LmMCivguKrguLHguIfguIHguKMKK+C4quC4seC4h+C4geC4sOC4leC4seC4hwor4Liq4Lix4LiH4LiB4Liw4Lin4Lix4LiHCivguKrguLHguIfguIHguLDguKfguLLguJQKK+C4quC4seC4h+C4geC4sOC4quC4tQor4Liq4Lix4LiH4LiB4Lix4LiUCivguKrguLHguIfguIHguLHguJvguJvguLAKK+C4quC4seC4h+C4geC4sgor4Liq4Lix4LiH4LiB4Liy4LijCivguKrguLHguIfguIHguLLguKgKK+C4quC4seC4h+C4geC4tOC5gOC4peC4qgor4Liq4Lix4LiH4LmA4LiB4LiVCivguKrguLHguIfguILguYwKK+C4quC4seC4h+C4guC4leC4sAor4Liq4Lix4LiH4LiC4Lii4LiyCivguKrguLHguIfguILguKXguLTguIEKK+C4quC4seC4h+C4guC4peC4tOC4geC4sgor4Liq4Lix4LiH4LiC4Lin4Liy4LiZ4LijCivguKrguLHguIfguILguLLguKMKK+C4quC4seC4h+C4guC4suC4o+C4l+C4uOC4geC4guC5jAor4Liq4Lix4LiH4LiC4Liy4Lij4LiY4Lij4Lij4LihCivguKrguLHguIfguILguLLguKPguYLguKXguIEKK+C4quC4seC4h+C4guC4suC4o+C4reC4uOC5gOC4muC4geC4guC4sgor4Liq4Lix4LiH4LmA4LiC4LibCivguKrguLHguIfguYLguILguKAKK+C4quC4seC4h+C4hOC5jAor4Liq4Lix4LiH4LiE4LihCivguKrguLHguIfguITguKHguJnguLTguKLguKEKK+C4quC4seC4h+C4hOC4oeC4p+C4tOC4l+C4ouC4sgor4Liq4Lix4LiH4LiE4Lih4Lio4Liy4Liq4LiV4Lij4LmMCivguKrguLHguIfguITguKHguKjguLbguIHguKnguLIKK+C4quC4seC4h+C4hOC4oeC4quC4h+C5gOC4hOC4o+C4suC4sOC4q+C5jAor4Liq4Lix4LiH4LiE4Lir4LiwCivguKrguLHguIfguITguLHguIcKK+C4quC4seC4h+C4hOC4suC4leC4sgor4Liq4Lix4LiH4LiE4Liy4Lii4LiZ4LiyCivguKrguLHguIfguITguLLguKLguJnguLLguKIKK+C4quC4seC4h+C4hOC4teC4lQor4Liq4Lix4LiH4LiE4Li14LiV4Li0CivguKrguLHguIfguYDguITguYfguJQKK+C4quC4seC4h+C5gOC4hOC4o+C4suC4sOC4q+C5jAor4Liq4Lix4LiH4LiG4Liy4LiP4Li0CivguKrguLHguIfguJTguLHguIEKK+C4quC4seC4h+C4m+C4sOC4leC4tOC5gOC4q+C4h+C4sAor4Liq4Lix4LiH4Lib4Liw4Lil4Li04LmA4Lir4LiH4LiwCivguKrguLHguIfguYLguKLguIQKK+C4quC4seC4h+C5guC4ouC4iuC4meC5jAor4Liq4Lix4LiH4Lin4LijCivguKrguLHguIfguKfguLHguIjguInguKPguLAKK+C4quC4seC4h+C4p+C4seC4mOC4ouC4suC4ogor4Liq4Lix4LiH4Lin4Liy4LilCivguKrguLHguIfguKfguLLguKoKK+C4quC4seC4h+C5gOC4p+C4igor4Liq4Lix4LiH4LmA4Lin4LiiCivguKrguLHguIfguYDguKfguLXguKLguJkKK+C4quC4seC4h+C4quC4geC4pOC4lQor4Liq4Lix4LiH4Liq4LiB4Liy4LijCivguKrguLHguIfguKrguJTguKHguKDguYwKK+C4quC4seC4h+C4quC4meC4l+C4meC4sgor4Liq4Lix4LmI4LiH4Liq4LiZ4LiX4LiZ4LiyCivguKrguLHguIfguKrguKPguKPguITguYwKK+C4quC4seC4h+C4quC4suC4o+C4p+C4seC4jwor4Liq4Lix4LiH4Liq4Li04LiX4LiY4Li0CivguKrguLHguIfguKrguLjguJfguJjguYwKK+C4quC4seC4h+C4quC4uOC4l+C4mOC4tAor4Liq4Lix4LiH4Lir4LijCivguKrguLHguIfguKvguKPguJPguYwKK+C4quC4seC4h+C4q+C4o+C4o+C4qQor4Liq4Lix4LiH4Lir4Liy4LijCivguKrguLHguIfguKvguLLguKPguLTguKHguJfguKPguLHguJ7guKLguYwKK+C4quC4seC4h+C4q+C4suC4o+C4tOC4oeC4sAor4Liq4Lix4LiH4Lir4Li04LiVCivguKrguLHguIgKK+C4quC4seC4iOC4iOC4sAor4Liq4Lix4LiI4LiI4LiyCivguKrguLHguIrguIzguLAKK+C4quC4seC4iuC4jOC4suC4ouC4sAor4Liq4Lix4LiK4LiM4Li4CivguKrguLHguI3guIjguKMKK+C4quC4seC4jeC4iOC4suC4owor4Liq4Lix4LiN4LmA4LiI4LiV4LiZ4LiyCivguKrguLHguI3guIrguLLguJXguI3guLLguJMKK+C4quC4seC4jeC4iuC4suC4leC4quC4o+C4sAor4Liq4Lix4LiN4LiK4Liy4LiV4Li0CivguKrguLHguI3guIrguLXguJ7guJnguKPguIEKK+C4quC4seC4jeC4jOC4sgor4Liq4Lix4LiN4LiN4LiyCivguKrguLHguI3guI3guLLguJMKK+C4quC4seC4jeC4jeC4tQor4Liq4Lix4LiN4LmC4LiN4LiK4LiZ4LmMCivguKrguLHguI3guYLguKLguIQKK+C4quC4seC4jeC4peC4seC4geC4qeC4k+C5jAor4Liq4Lix4LiQ4Li0CivguKrguLHguJPguJDguLLguJkKK+C4quC4seC4k+C4kOC4tOC4leC4tAor4Liq4Lix4LiT4LiR4LmMCivguKrguLHguJPguKvguYwKK+C4quC4seC4lAor4Liq4Lix4LiU4LiI4Lit4LiHCivguKrguLHguJUKK+C4quC4seC4leC4leC4muC4h+C4geC4igor4Liq4Lix4LiV4LiV4Lia4Lij4Lij4LiTCivguKrguLHguJXguJXguJrguLjguKnguKLguYwKK+C4quC4seC4leC4leC4p+C4k+C4tOC4iuC4iuC4sgor4Liq4Lix4LiV4LiV4LiwCivguKrguLHguJXguJXguLkKK+C4quC4seC4leC4lgor4Liq4Lix4LiV4LiW4Lix4LiZ4LiU4LijCivguKrguLHguJXguJbguLIKK+C4quC4seC4leC4luC4tAor4Liq4Lix4LiV4LiW4Li4CivguKrguLHguJXguJrguKPguKPguJMKK+C4quC4seC4leC4muC4o+C4tOC4oOC4seC4k+C4keC5jAor4Liq4Lix4LiV4Lii4LmMCivguKrguLHguJXguKfguYwKK+C4quC4seC4leC4p+C4sgor4Liq4Lix4LiX4LiY4Lij4Lij4LihCivguKrguLHguJfguJjguLIKK+C4quC4seC4l+C4mOC4tOC4h+C4p+C4tOC4q+C4suC4o+C4tOC4gQor4Liq4Lix4LiX4LiY4Li04Lin4Li04Lir4Liy4Lij4Li04LiBCivguKrguLHguJfguKjguLLguKrguJXguKPguYwKK+C4quC4seC4mQor4Liq4Lix4LmI4LiZCivguKrguLHguYnguJkKK+C4quC4seC4meC4lOC4suC4mQor4Liq4Lix4LiZ4LiU4Liy4LibCivguKrguLHguJnguJTguLjguKnguI7guLUKK+C4quC4seC4meC5gOC4lOC4gQor4Liq4Lix4LiZ4LmC4LiU4LipCivguKrguLHguJnguJXguYwKK+C4quC4seC4meC4leC4leC4tAor4Liq4Lix4LiZ4LiV4Liw4Lib4Liy4Lib4LiyCivguKrguLHguJnguJXguLDguYLguKMKK+C4quC4seC4meC4leC4sOC4p+C4sgor4Liq4Lix4LiZ4LiV4Li0CivguKrguLHguJnguJXguLTguIHguLAKK+C4quC4seC4meC4leC4tOC5gOC4geC4meC4tOC4l+C4suC4mQor4Liq4Lix4LiZ4LiV4Li44LiP4LiQ4Li1CivguKrguLHguJnguJbguKPguLAKK+C4quC4seC4meC4luC4p+C4sAor4Liq4Lix4LiZ4LiW4Lix4LiVCivguKrguLHguJnguJbguLLguKMKK+C4quC4seC4meC4l+C4meC4sAor4Liq4Lix4LiZ4LiX4LiZ4Liy4LiB4Liy4LijCivguKrguLHguJnguJfguLAKK+C4quC4seC4meC4l+C4seC4lAor4Liq4Lix4LiZ4LiX4Lix4Liq4LiZ4LiwCivguKrguLHguJnguJfguLLguJkKK+C4quC4seC4meC4l+C4tOC4kOC4tAor4Liq4Lix4LiZ4LiX4Li04LiqCivguKrguLHguJnguYDguJfguKoKK+C4quC4seC4meC5gOC4l+C4qwor4Liq4Lix4LiZ4LmA4LiX4LmI4Lir4LmMCivguKrguLHguJnguJjguLLguJkKK+C4quC4seC4meC4meC4tOC4mOC4tAor4Liq4Lix4LiZ4LiZ4Li04Lia4Liy4LiVCivguKrguLHguJnguJnguLTguKfguLLguKoKK+C4quC4seC4meC4meC4tOC5gOC4p+C4qgor4Liq4Lix4LiZ4LiZ4Li04Lip4LiQ4Liy4LiZCivguKrguLHguJnguJ7guKPguYnguLLguJnguLLguIfguYHguK0KK+C4quC4seC4meC4nuC4o+C5ieC4suC4oeC4reC4jQor4Liq4Lix4LiZ4Lie4Lij4LmJ4Liy4Lir4Lit4LihCivguKrguLHguJnguKPguKfguIcKK+C4quC4seC4meC4peC4tuC4gQor4Liq4Lix4LiZ4Liq4LiB4Lik4LiVCivguKrguLHguJoKK+C4quC4seC4muC4m+C4peC4seC4mgor4Liq4Lix4Lia4Lib4Lil4Li14LmJCivguKrguLHguJrguJvguLDguKPguLHguIfguYDguIQKK+C4quC4seC4muC4m+C4suC4gQor4Liq4Lix4Lib4LiE4Lix4LiaCivguKrguLHguJvguJTguJkKK+C4quC4seC4m+C5guC4lOC4gQor4Liq4Lix4Lib4LmC4LiU4LiB4Liq4Lix4Lib4LiU4LiZCivguKrguLHguJvguJfguJkKK+C4quC4seC4m+C4m+C4sAor4Liq4Lix4Lib4Lib4Liy4Lii4LiB4Liy4Lij4Li1CivguKrguLHguJvguJvguLQKK+C4quC4seC4m+C4m+C4uOC4o+C4uOC4qQor4Liq4Lix4Lib4Lij4Liw4Lii4Li44LiX4LiY4LmMCivguKrguLHguJvguKvguIfguIEKK+C4quC4seC4m+C5gOC4q+C4o+C5iOC4rQor4Liq4Lix4LieCivguKrguLHguJ7guJ7guLAKK+C4quC4seC4nuC4nuC4seC4jeC4jeC4uQor4Liq4Lix4Lie4LmA4Lie4Liq4Lix4LiV4LiV4LiyCivguKrguLHguJ7guYDguJ7guYDguKvguKPguLAKK+C4quC4seC4nuC4ouC4reC4gQor4Liq4Lix4Lif4Lix4LiZ4LiE4LiZ4LiX4LiyCivguKrguLHguKHguI3guI3guLIKK+C4quC4seC4oeC4muC4ueC4o+C4k+C5jAor4Liq4Lix4Lih4Lib4LiK4Lix4LiN4LiN4LiwCivguKrguLHguKHguJvguJfguLIKK+C4quC4seC4oeC4m+C4l+C4suC4mQor4Liq4Lix4Lih4Lib4Lii4Li44LiVCivguKrguLHguKHguJvguYLguKLguIQKK+C4quC4seC4oeC4m+C4o+C4sOC4quC4tOC4l+C4mOC4tOC5jAor4Liq4Lix4Lih4Lib4Lij4Liw4Lir4Liy4LijCivguKrguLHguKHguJvguKPguLLguKLguKDguJ4KK+C4quC4seC4oeC4m+C4o+C4suC4ouC4tOC4geC4oOC4ngor4Liq4Lix4Lih4Lib4Lix4LiV4LiV4Li0CivguKrguLHguKHguJzguLHguJvguKXguLLguJsKK+C4quC4seC4oeC4nOC4seC4qgor4Liq4Lix4Lih4Lie4LilCivguKrguLHguKHguJ7guKvguLjguKXguLIKK+C4quC4seC4oeC4nuC4seC4leC4quC4owor4Liq4Lix4Lih4Lie4Lix4LiX4LiY4LmMCivguKrguLHguKHguJ7guLHguJnguJjguYwKK+C4quC4seC4oeC4nuC4seC4meC4mOC4meC5jAor4Liq4Lix4Lih4Lie4Liy4LiY4LiwCivguKrguLHguKHguJ7guLLguKPguLAKK+C4quC4seC4oeC4nuC4suC4q+C4meC5jAor4Liq4Lix4Lih4Lie4Liy4Lir4LiwCivguKrguLHguKHguJ7guLjguJfguJjguLAKK+C4quC4seC4oeC5guC4nuC4mOC4tAor4Liq4Lix4Lih4Lig4Lin4LiwCivguKrguLHguKHguKDguYDguKfguKrguLUKK+C4quC4seC4oeC4oOC4seC4lQor4Liq4Lix4Lih4Lig4Lix4LiV4LiV4LiwCivguKrguLHguKHguKDguLLguKnguJPguYwKK+C4quC4seC4oeC5gOC4oOC4l+C4sAor4Liq4Lix4Lih4LmC4Lig4LiE4LiB4Liy4LiiCivguKrguLHguKHguKHguJnguLIKK+C4quC4seC4oeC4oeC4seC4m+C4mOC4suC4mQor4Liq4Lix4Lih4Lih4LiyCivguKrguLHguKHguYLguKHguJfguJnguLXguKLguIHguJbguLIKK+C4quC4seC4oeC4pOC4l+C4mOC4tAor4Liq4Lix4Lih4Lik4LiX4LiY4Li04LmMCivguKrguLHguKLguJnguYwKK+C4quC4seC4peC4peC4sAor4Liq4Lix4Lil4Lil4Liy4LibCivguKrguLHguKrguJTguLUKK+C4quC4seC4quC4quC4sAor4Liq4Lix4Liq4Liq4Li4CivguKrguLHguKrguKrguLkKK+C4quC4seC4quC4uOC4o+C4tQor4Liq4LiyCivguKrguYjguLIKK+C4quC4suC4gQor4Liq4Liy4LiB4Lij4Lij4LiI4LmMCivguKrguLLguIHguKUKK+C4quC4suC4geC4qeC4tOC4mQor4Liq4Liy4LiB4Lip4Li1CivguKrguLLguIHguLHguIjguInguLIKK+C4quC4suC4geC4seC4peC4ouC5jAor4Liq4Liy4LiB4Li04Lii4LiwCivguKrguLLguYDguIEKK+C4quC4suC4guC4sgor4Liq4Liy4LiE4LijCivguKrguLLguITguYDguKPguKgKK+C4quC4suC4hOC4uQor4Liq4Liy4LiHCivguKrguLLguIfguKvguYjguLIKK+C4quC4suC4juC4gQor4Liq4Liy4LiT4Li1CivguKrguLLguJQKK+C4quC4suC4lQor4Liq4Liy4LiV4Lij4LiyCivguKrguLLguYTguJbguKIKK+C4quC4suC4l+C4owor4Liq4Liy4LiX4Li04LiqCivguKrguLLguJfguLgKK+C4quC4suC5guC4lwor4Liq4Liy4LiY4LiBCivguKrguLLguJjguJkKK+C4quC4suC4mOC4ouC4sAor4Liq4Liy4LiY4Lii4Liy4LiiCivguKrguLLguJjguLLguKPguJPguYwKK+C4quC4suC4mOC4suC4o+C4k+C4sAor4Liq4Liy4LiY4Li04LiVCivguKrguLLguJjguLgKK+C4quC4suC4mOC4uOC4quC4sAor4Liq4Liy4LiZCivguKrguLLguJnguJXguKfguLAKK+C4quC4suC4meC4uAor4Liq4Liy4LiZ4Li44Lio4Li04Lip4Lii4LmMCivguKrguLLguJnguLkKK+C4quC4suC4mgor4Liq4Liy4Lia4Liq4Li54LiNCivguKrguLLguJrguLLguJkKK+C4quC4suC4mwor4Liq4Liy4Lib4LmE4LiV4LiiCivguKrguLLguJvguKrguKPguKMKK+C4quC4suC4oQor4Liq4Liy4Lih4LiK4Li44LiBCivguKrguLLguKHguYDguJPguKMKK+C4quC4suC4oeC5gOC4k+C4o+C4tQor4Liq4Liy4Lih4LiZ4LiV4LmMCivguKrguLLguKHguKLguJfguKPguLHguJ7guKLguYwKK+C4quC4suC4oeC4o+C4qgor4Liq4Liy4Lih4LilCivguKrguLLguKHguKrguLTguJoKK+C4quC4suC4oeC4seC4hOC4hOC4tQor4Liq4Liy4Lih4Lix4LiNCivguKrguLLguKHguLHguJXguJbguLTguKLguLAKK+C4quC4suC4oeC4suC4meC4ouC5jAor4Liq4Liy4Lih4Liy4Lij4LiWCivguKrguLLguKHguLTguIEKK+C4quC4suC4oeC4tOC4lQor4Liq4Liy4Lih4Li04LiZ4Li1CivguKrguLLguKHguLTguKDguLHguIHguJTguLTguYwKK+C4quC4suC4oeC4tOC4qgor4Liq4Liy4Lih4Li1CivguKrguLLguKHguLXguIjguLTguIHguKPguKPguKEKK+C4quC4suC4ogor4Liq4LmI4Liy4LiiCivguKrguYnguLLguKIKK+C4quC4suC4ouC4iuC4uQor4Liq4Liy4Lii4LiV4LiyCivguKrguLLguKLguYDguKfguJfguKLguYwKK+C4quC4suC4ouC4seC4k+C4q+C5jAor4Liq4Liy4Lii4Liy4Lir4LmMCivguKrguLLguKMKK+C4quC4suC4o+C4geC4o+C4oeC4mOC4o+C4o+C4oeC5jAor4Liq4Liy4Lij4LiE4LiU4Li1CivguKrguLLguKPguYDguITguKHguLUKK+C4quC4suC4o+C4k+C4teC4ouC4mOC4o+C4o+C4oQor4Liq4Liy4Lij4LiV4Lij4LiyCivguKrguLLguKPguJbguLUKK+C4quC4suC4o+C4lwor4Liq4Liy4Lij4LiX4LiyCivguKrguLLguKPguJfguLTguKgKK+C4quC4suC4o+C4l+C4uOC4geC4guC5jAor4Liq4Liy4Lij4LiY4Lij4Lij4LihCivguKrguLLguKPguJnguLTguYDguJfguKgKK+C4quC4suC4o+C4muC4mgor4Liq4Liy4Lij4Lia4Lij4Lij4LiTCivguKrguLLguKPguJrguKPguLTguKrguLjguJfguJjguLTguYwKK+C4quC4suC4o+C4muC4seC4jQor4Liq4Liy4Lij4Lia4Lix4LiaCivguKrguYnguLLguKPguJrguLHguJoKK+C4quC4suC4o+C4muC4suC4jQor4Liq4Liy4Lij4Lib4Lij4Liw4LiB4Lit4LiaCivguKrguLLguKPguJvguKPguLDguYLguKLguIrguJnguYwKK+C4quC4suC4o+C4nuC4seC4lAor4Liq4Liy4Lij4Lie4Lix4LiZCivguKrguLLguKPguJ7guLLguIfguITguYwKK+C4quC4suC4o+C4oOC4suC4ngor4Liq4Liy4Lij4Lig4Li1CivguKrguLLguKPguYTguKHguKIKK+C4quC4suC4o+C4o+C4seC4gQor4Liq4Liy4Lij4Lil4Liw4Lil4Liy4LiiCivguKrguLLguKPguYDguKXguKcKK+C4quC4suC4o+C4p+C4seC4lAor4Liq4Liy4Lij4Lin4Lix4LiV4LijCivguKrguLLguKPguKrguYnguKEKK+C4quC4suC4o+C4q+C4meC4uQor4Liq4Liy4Lij4LiwCivguKrguLLguKPguLDguYLguIHguIEKK+C4quC4suC4o+C4sOC5gOC4mQor4Liq4Liy4Lij4Liw4Lie4LiyCivguKrguLLguKPguLDguJ7guLLguYDguK7guYLguKUKK+C4quC4suC4o+C4sOC4p+C4reC4mQor4Liq4Liy4Lij4Liw4Lin4Liy4Lij4Li1CivguKrguLLguKPguLDguKrguLDguKHguLIKK+C4quC4suC4o+C4sOC4quC4s+C4hOC4seC4jQor4Liq4Liy4Lij4Lix4LiV4LiW4LiwCivguKrguLLguKPguLHguJfguJjguYwKK+C4quC4suC4o+C4seC4oeC4oOC5jAor4Liq4Liy4Lij4Liy4LiT4Li14Lii4LiB4LijCivguKrguLLguKPguLLguJPguLXguKLguLAKK+C4quC4suC4o+C4suC4meC4uOC4geC4o+C4oQor4Liq4Liy4Lij4Li14Lij4Li04LiB4LiY4Liy4LiV4Li4CivguKrguLLguKPguLnguJsKK+C4quC4suC5guC4o+C4igor4Liq4Liy4Lil4LiwCivguKrguLLguKXguLDguKfguJkKK+C4quC4suC4peC4tAor4Liq4Liy4Lil4Li04LiB4LiyCivguKrguLLguKXguLTguJnguLUKK+C4quC4suC4peC4tQor4Liq4Liy4Lil4Li14LmICivguKrguLLguKXguLkKK+C4quC4suC5guC4peC4q+C4tOC4lQor4Liq4Liy4LinCivguKrguLLguKfguIEKK+C4quC4suC4p+C4geC4o+C4sOC4l+C4t+C4muC4q+C4rQor4Liq4Liy4Lin4LiZ4LmJ4Lit4Lii4LmA4Lil4LmI4LiZ4LiZ4LmJ4LizCivguKrguLLguKfguJnguLAKK+C4quC4suC4p+C4tOC4geC4sgor4Liq4Liy4Lin4Li04LiV4LijCivguKrguLLguKfguLTguJXguKPguLUKK+C4quC4suC4quC4meC5jAor4Liq4Liy4Liq4LiZ4LiyCivguKrguLLguKvguKPguYjguLLguKIKK+C4quC4suC4q+C4o+C4tQor4Liq4LmI4Liy4Lir4Lij4Li1CivguKrguLLguKvguLHguKoKK+C4quC4suC5gOC4q+C4leC4uAor4Liq4Liy4LmB4Lir4Lij4LiBCivguKrguLLguKzguLjguKPguLAKK+C4quC4swor4Liq4LmI4LizCivguKrguLPguITguLHguI0KK+C4quC4s+C4i+C5iOC4suC4hwor4Liq4Liz4LmB4LiU4LiHCivguKrguLPguJfguLHguJoKK+C4quC4s+C4meC4p+C4lAor4Liq4Liz4LiZ4Lin4LiZCivguKrguLPguJnguK3guIcKK+C4quC4s+C4meC4seC4gQor4Liq4Liz4LiZ4Liy4LiZCivguKrguLPguJnguLbguIcKK+C4quC4s+C5gOC4meC4sgor4Liq4Liz4LmA4LiZ4Li14Lii4LiHCivguKrguLPguYDguJnguLXguKLguJkKK+C4quC4s+C4muC4reC4gQor4Liq4Liz4Lia4Lix4LiU4Liq4Liz4LiZ4Lin4LiZCivguKrguLPguJvguLDguKXguK0KK+C4quC4s+C4m+C4sOC4q+C4peC4seC4hwor4Liq4Liz4Lib4Lix4LmJ4LiZCivguKrguLPguJvguLHguJnguJnguLUKK+C4quC4s+C5gOC4oOC4sgor4Liq4Liz4LmA4Lig4Liy4LiX4Lit4LiHCivguKrguLPguKHguLDguIfguLIKK+C4quC4s+C4oeC4sOC5guC4meC4hOC4o+C4seC4pwor4Liq4Liz4Lih4Liw4LmC4LiZ4Lib4Liw4LiK4Liy4LiB4LijCivguKrguLPguKHguLDguKXguK0KK+C4quC4s+C4oeC4sOC5gOC4peC5gOC4l+C5gOC4oeC4sgor4Liq4Liz4Lih4Liw4Lir4LiyCivguKrguLPguKPguJQKK+C4quC4s+C4o+C4p+C4iAor4Liq4Liz4Lij4Lin4LihCivguKrguLPguKPguKfguKIKK+C4quC4s+C4o+C4p+C4pQor4Liq4Liz4Lij4Lit4LiBCivguKrguLPguKPguK3guIcKK+C4quC4s+C4o+C4seC4mgor4Liq4Liz4Lij4Liy4LiBCivguKrguLPguKPguLLguI0KK+C4quC4s+C4o+C4tOC4lAor4Liq4Liz4LmA4Lij4LmH4LiICivguKrguLPguYDguKPguLIKK+C4quC4s+C5gOC4o+C4tOC4hwor4Liq4Liz4LmC4Lij4LiHCivguKrguLPguKXguLHguIEKK+C4quC4s+C4peC4suC4mQor4Liq4Liz4Lil4Li1CivguKrguLPguYHguKXguIcKK+C4quC4s+C4quC4o+C5ieC4suC4hwor4Liq4Liz4Liq4LiyCivguKrguLPguYDguKrguYfguJQKK+C4quC5iOC4s+C5gOC4quC4teC4ogor4Liq4Liz4Lir4Lij4Lin4LiUCivguKrguLPguKvguKPguLHguJoKK+C4quC4s+C4q+C4sgor4Liq4Liz4LmA4Lir4LiZ4Li14Lii4LiBCivguKrguLPguYDguKvguKPguYgKK+C4quC4s+C4reC4reC4ogor4Liq4Liz4Lit4Liy4LiHCivguKrguLQKK+C4quC4tOC4geC4guC5jAor4Liq4Li04LiB4LiC4Lih4Liy4LiZ4LiyCivguKrguLTguIHguILguLIKK+C4quC4tOC4guC4owor4Liq4Li04LiC4Lij4Li1CivguKrguLTguILguYDguKPguKgKK+C4quC4tOC4guC4sgor4Liq4Li04LiC4Li1CivguKrguLTguITguLLguKUKK+C4quC4tOC4hwor4Liq4Li04LmI4LiHCivguKrguLTguIfguILguKMKK+C4quC4tOC4h+C4hOC5jAor4Liq4Li04LiH4LiE4Lil4Li04LmJ4LiHCivguKrguLTguIfguITguKXguLUKK+C4quC4tOC4h+C4hOC4suC4owor4Liq4Li04LiH4LiE4Liy4LilCivguKrguLTguIfguITguLUKK+C4quC4tOC4h+C5guC4lQor4Liq4Li04LiH4LmC4LiV4LiX4Liw4LmA4LilCivguKrguLTguIfguKrguLLguKPguLLguKrguLHguJXguKfguYwKK+C4quC4tOC4h+C4q+C5jAor4Liq4Li04LiH4Lir4LilCivguKrguLTguI3guIjguJnguYwKK+C4quC4tOC4lQor4Liq4Li04LmC4LiV4LiX4LiB4Lin4Liy4Lij4Li1CivguKrguLTguJbguLTguKUKK+C4quC4tOC4l+C4mOC5jAor4Liq4Li04LiX4LiY4Li0CivguKrguLTguJfguJjguLTguYwKK+C4quC4tOC4mOC4ouC4sAor4Liq4Li04LiZCivguKrguLTguYnguJkKK+C4quC4tOC4meC4l+C4ueC4o+C4sAor4Liq4Li04LiZ4LiY4LieCivguKrguLTguJnguJjguLgKK+C4quC4tOC4meC4mOC4uOC4o+C4sAor4Liq4Li04LiZ4LmA4LiY4Liy4Lin4LmMCivguKrguLTguJnguLAKK+C4quC4tOC4meC4suC4lAor4Liq4Li04LiZ4Li04LiX4LiY4LmMCivguKrguLTguJnguLUKK+C4quC4tOC5gOC4meC4o+C4uAor4Liq4Li04LmA4LiZ4Lir4LiBCivguKrguLTguYDguJnguKvguJnguLXguKLguLAKK+C4quC4tOC5gOC4meC4q+C4sAor4Liq4Li04LmA4LiZ4Lir4LiyCivguKrguLTguYDguJnguYjguKvguLIKK+C4quC4tOC4mgor4Liq4Li04Lib4Lib4LiwCivguKrguLTguJ7guJnguLAKK+C4quC4tOC4oeC4nuC4peC4tQor4Liq4Li04Lij4LiwCivguKrguLTguKPguLQKK+C4quC4tOC4o+C4tQor4Liq4Li04Lil4LiyCivguKrguLTguYLguKXguIEKK+C4quC4tOC4pwor4Liq4Li04LmI4LinCivguKrguLTguKfguLAKK+C4quC4tOC4p+C4tOC4geC4sgor4Liq4Li04Lir4LiZ4LiyCivguKrguLUKK+C4quC4teC5iAor4Liq4Li14LmJCivguKrguLXguIHguKPguLjguJQKK+C4quC4teC4geC4sgor4Liq4Li14LiB4Li44LiZCivguKrguLXguILguYnguLLguIcKK+C4quC4teC4iOC4seC4gQor4Liq4Li14LiK4Lih4Lie4Li54LiU4LiHCivguKrguLXguIrguKHguJ7guLnguKrguKfguJkKK+C4quC4teC4lAor4Liq4Li14LiU4LitCivguKrguLXguJXguYnguJkKK+C4quC4teC4l+C4seC4meC4lOC4owor4Liq4Li14LmI4Lia4LiXCivguKrguLXguJ/guLHguJnguJnguLLguIfguYHguK0KK+C4quC4teC4oeC4seC4meC4leC5jAor4Liq4Li14Lih4LiyCivguKrguLXguKXguLDguKHguLHguJkKK+C4quC4teC4peC4seC4nuC4nuC4leC4m+C4o+C4suC4oeC4suC4qgor4Liq4Li14Lin4Li04LiB4LiyCivguKrguLXguKfguLTguKDguLIKK+C4quC4teC4quC4rQor4Liq4Li14Liq4LiwCivguKrguLXguKrguLIKK+C4quC4teC4quC4uOC4gQor4Liq4Li14LmA4Liq4Li14Lii4LiUCivguKrguLXguYDguKrguLfguYnguK3guJnguYnguK3guKIKK+C4quC4teC4q+C5jAor4Liq4Li14Lir4LiwCivguKrguLbguIEKK+C4quC4tuC4hwor4Liq4Li34LiaCivguKrguLfguYjguK0KK+C4quC4uAor4Liq4Li44LiBCivguKrguLjguIHguILguYwKK+C4quC4uOC4geC4owor4Liq4Li44LiB4Lij4LihCivguKrguLjguIHguLMKK+C4quC4uOC4geC4teC5ieC4ouC4suC4geC4teC5iQor4Liq4Li44LiCCivguKrguLjguILguLTguJkKK+C4quC4uOC4guC4tQor4Liq4Li44LiC4Li44LihCivguKrguLjguILguLjguKHguLLguKUKK+C4quC4uOC4hOC4lQor4Liq4Li44LiE4LiV4Li0CivguKrguLjguITguJnguJjguYwKK+C4quC4uOC4hOC4seC4meC4mOC5jAor4Liq4Li44LiH4LiB4LiwCivguKrguLjguIfguKrguLTguIcKK+C4quC4uOC4h+C4quC4uOC4oeC4suC4owor4Liq4Li44LiH4Liq4Li44Lih4Liy4Lij4Li1CivguKrguLjguIjguKPguLTguJUKK+C4quC4uOC4iOC4q+C4meC4teC5iAor4Liq4Li44LiI4LiwCivguKrguLjguIjguLQKK+C4quC4uOC4iOC4tOC4lQor4Liq4Li44LiI4Li04LiV4LijCivguKrguLjguIrguJkKK+C4quC4uOC4iuC4seC4oeC4muC4lOC4tQor4Liq4Li44LiK4LiyCivguKrguLjguIrguLLguJTguLIKK+C4quC4uOC4jQor4Liq4Li44LiTCivguKrguLjguJPguKvguLIKK+C4quC4uOC4k+C4tOC4quC4sgor4Liq4Li44LiUCivguKrguLjguJTguKrguIfguKfguJkKK+C4quC4uOC4lOC4sgor4Liq4Li44LiVCivguKrguLjguJXguJXguLAKK+C4quC4uOC4leC4leC4seC4meC4leC4sAor4Liq4Li44LiV4LiV4Lix4LiZ4LiV4Liw4Lib4Li04LiO4LiBCivguKrguLjguJXguLQKK+C4quC4uOC4l+C4mOC5jAor4Liq4Li44LiX4LiY4Li0CivguKrguLjguJfguKPguKPguKjguJnguYwKK+C4quC4uOC4l+C4seC4qOC4meC5jAor4Liq4Li44LiY4Lij4Lij4Lih4LmA4LiX4Lin4Liq4Lig4LiyCivguKrguLjguJjguLIKK+C4quC4uOC4mOC4tQor4Liq4Li44LiZ4LiX4LijCivguKrguLjguJnguJfguKPguLUKK+C4quC4uOC4meC4l+C4o+C4teC4ouC4sAor4Liq4Li44LiZ4Lix4LiCCivguKrguLjguJnguLHguJnguJfguYwKK+C4quC4uOC5guC4meC4gQor4Liq4Li44Lia4LiU4Li1CivguKrguLjguJrguKPguKPguJMKK+C4quC4uOC4muC4tOC4mQor4Liq4Li44Lib4Lij4Li14LiU4Li04LmMCivguKrguLjguJvguKPguLXguKLguYwKK+C4quC4uOC4m+C4suC4k+C4tQor4Liq4Li44Lie4Lie4Lix4LiVCivguKrguLjguJ7guKPguKPguJMKK+C4quC4uOC4nuC4o+C4o+C4k+C4luC4seC4mQor4Liq4Li44Lie4Lij4Lij4LiT4Li04LiB4Liy4Lij4LmMCivguKrguLjguKDguKMKK+C4quC4uOC4oOC4seC4hAor4Liq4Li44Lig4LiyCivguKrguLjguKDguLLguJ4KK+C4quC4uOC4oOC4suC4qeC4tOC4lQor4Liq4Li44LihCivguKrguLjguYjguKEKK+C4quC4uOC4oeC4l+C4uOC4oQor4Liq4Li44Lih4LiZCivguKrguLjguKHguJnguLAKK+C4quC4uOC4oeC4meC4seC4qgor4Liq4Li44Lih4LiZ4LiyCivguKrguLjguYnguKHguYDguKrguLXguKLguIcKK+C4quC4uOC4oeC4sAor4Liq4Li44Lih4Liy4Lil4Li1CivguKrguLjguYDguKHguJgKK+C4quC4uOC5gOC4oeC4o+C4uAor4Liq4Li44LmJ4LiiCivguKrguLjguKPguIfguITguYwKK+C4quC4uOC4o+C4oOC4tQor4Liq4Li44Lij4Lix4LiH4LiE4LmMCivguKrguLjguKPguLHguJXguLQKK+C4quC4uOC4o+C4seC4quC4p+C4lOC4tQor4Liq4Li44Lij4LiyCivguKrguLjguKPguLLguIfguITguYzguIjguLPguYDguKPguLXguKLguIcKK+C4quC4uOC4o+C4suC4mOC4tOC4m+C5hOC4leC4ogor4Liq4Li44Lij4Li04LiZ4LiX4Lij4Liy4Lir4Li5CivguKrguLjguKPguLTguKLguIcKK+C4quC4uOC4o+C4tOC4ouC4mQor4Liq4Li44Lij4Li04Lii4LiwCivguKrguLjguKPguLTguKLguLHguJkKK+C4quC4uOC4o+C4tOC4ouC4sgor4Liq4Li44Lij4Li04Lii4Li44Lib4Lij4Liy4LiE4LiyCivguKrguLjguKPguLTguYDguKLguJnguJfguKPguYwKK+C4quC4uOC4o+C4tOC5gOC4ouC4qAor4Liq4Li44Lij4Li04LmC4LiiCivguKrguLjguKPguLjguYjguKLguKrguLjguKPguYjguLLguKIKK+C4quC4uOC4peC4leC5iOC4suC4mQor4Liq4Li44LinCivguKrguLjguKfguKDguLLguJ4KK+C4quC4uOC4p+C4o+C4o+C4kwor4Liq4Li44Lin4Liy4LiZCivguKrguLjguKfguLTguJnguLHguKIKK+C4quC4uOC4p+C4tOC4oeC4pQor4Liq4Li44Lip4Li04LijCivguKrguLjguKrguLLguJkKK+C4quC4uOC4q+C4meC4seC4lQor4Liq4Li44Lir4Lij4LmI4LiHCivguKrguLjguKvguKPguYjguLLguKIKK+C4quC4uOC4q+C4pOC4lwor4Liq4Li44Lir4Lix4LiXCivguKrguLjguYDguKvguKPguYjguLIKK+C4quC4uQor4Liq4Li54LmJCivguKrguLnguIHguKnguKEKK+C4quC4ueC4hwor4Liq4Li54LiI4LiB4LiwCivguKrguLnguIjguJnguLAKK+C4quC4ueC4iOC4tAor4Liq4Li54LiNCivguKrguLnguJQKK+C4quC4ueC4lQor4Liq4Li54LiV4LijCivguKrguLnguJXguLQKK+C4quC4ueC4lwor4Liq4Li54LiZ4Li4CivguKrguLnguJoKK+C4quC4ueC4m+C4sAor4Liq4Li54LijCivguKrguLnguKPguKLguYwKK+C4quC4ueC4o+C4tAor4Liq4Li54Liq4Li1CivguYDguKoKK+C5gOC4quC4gQor4LmA4Liq4LiB4LiC4LiwCivguYDguKrguILguLAKK+C5gOC4quC5h+C4hwor4LmA4Liq4LmJ4LiHCivguYDguKrguIfguLXguYjguKLguKEKK+C5gOC4quC4ieC4p+C4mQor4LmA4Liq4LiP4LiQ4Li1CivguYDguKrguJPguLUKK+C5gOC4quC4lAor4LmA4Liq4LiU4LmH4LiICivguYDguKrguJXguLgKK+C5gOC4quC4luC4teC4ouC4owor4LmA4Liq4LmC4LiXCivguYDguKrguJkKK+C5gOC4quC5ieC4mQor4LmA4Liq4LiZ4LiHCivguYDguKrguJnguYjguIcKK+C5gOC4quC4meC5iOC4q+C5jAor4LmA4Liq4LiZ4LmI4Lir4LmM4LiI4Lix4LiZ4LiX4Lij4LmM4LiC4Liy4LinCivguYDguKrguJnguYjguKvguYzguIjguLHguJnguJfguKPguYzguYHguJTguIcKK+C5gOC4quC4meC4q+C4sgor4LmA4Liq4LiZ4LmI4Lir4LiyCivguYDguKrguJnguK0KK+C5gOC4quC4meC4sAor4LmA4Liq4LiZ4LiyCivguYDguKrguJnguYjguLIKK+C5gOC4quC4meC4suC4geC4uOC4jgor4LmA4Liq4LiZ4Liy4LiH4LiE4LmMCivguYDguKrguJnguLLguIfguITguJnguLTguIHguKMKK+C5gOC4quC4meC4suC4meC4tQor4LmA4Liq4LiZ4Liy4Liq4LiZ4LiwCivguYDguKrguJnguLLguLAKK+C5gOC4quC4meC4tQor4LmA4Liq4LiZ4Li14Lii4LmMCivguYDguKrguJnguLXguKLguJQKK+C5gOC4quC4meC4teC4ouC4sAor4LmA4Liq4Lia4LiiCivguYDguKrguJrguLXguKLguIcKK+C5gOC4quC4ngor4LmA4Liq4Lie4Lii4LmMCivguYDguKrguYDguJ7guKUKK+C5gOC4quC4oOC4sgor4LmA4Liq4Lih4LmH4LiUCivguYDguKrguKHguK0KK+C5gOC4quC4oeC4sgor4LmA4Liq4Lih4Li14Lii4LiZCivguYDguKrguKHguLfguK3guJkKK+C5gOC4quC4ogor4LmA4Liq4Lij4LmH4LiICivguYDguKrguKPguLTguJQKK+C5gOC4quC4o+C4tOC4oQor4LmA4Liq4Lij4Li1CivguYDguKrguKXguJQKK+C5gOC4quC4peC4lOC4nuC4seC4h+C4nuC4reC4mQor4LmA4Liq4Lil4LiyCivguYDguKrguKXguLXguYjguKLguIcKK+C5gOC4quC4peC4t+C4reC4geC4quC4peC4mQor4LmA4Liq4LmC4LilCivguYDguKrguKfguIEKK+C5gOC4quC4p+C4geC4suC4oeC4suC4leC4ouC5jAor4LmA4Liq4Lin4LiZ4LiwCivguYDguKrguKfguJnguLIKK+C5gOC4quC4p+C4ogor4LmA4Liq4Lin4Lii4Lie4Lij4Liw4LiK4Liy4LiV4Li0CivguYDguKrguKfguLXguKLguJkKK+C5gOC4quC4quC4o+C4p+C4hwor4LmA4Liq4Liq4Lij4Lin4LilCivguYDguKrguLIKK+C5gOC4quC5ieC4sgor4LmA4Liq4Liy4Lij4LmMCivguYDguKrguLLguKPguKDguKLguYwKK+C5gOC4quC4suC4o+C4tQor4LmA4Liq4Liy4Lin4LiT4Li04LiVCivguYDguKrguLLguKfguJnguLAKK+C5gOC4quC4suC4p+C4meC4sgor4LmA4Liq4Liy4Lin4LiZ4Liy4LiB4Liy4LijCivguYDguKrguLLguKfguJnguLXguKLguYwKK+C5gOC4quC4suC4q+C4pOC4lwor4LmA4Liq4Liy4LiwCivguYDguKrguLLguLDguYHguKrguLAKK+C5gOC4quC4tOC4o+C5jOC4iAor4LmA4Liq4Li04Lij4LmM4LifCivguYDguKrguLXguKIKK+C5gOC4quC4teC5iOC4ogor4LmA4Liq4Li14Lii4LiHCivguYDguKrguLXguYjguKLguIcKK+C5gOC4quC4teC4ouC4lAor4LmA4Liq4Li14LmJ4Lii4LiZCivguYDguKrguLXguKLguJoKK+C5gOC4quC4teC4ouC4oQor4LmA4Liq4Li14LmI4Lii4LihCivguYDguKrguLXguYnguKLguKEKK+C5gOC4quC4teC4ouC4pwor4LmA4Liq4Li14LmI4Lii4LinCivguYDguKrguLXguYnguKLguKcKK+C5gOC4quC4t+C4rQor4LmA4Liq4Li34LmI4LitCivguYDguKrguLfguYnguK0KK+C5gOC4quC4t+C4reC4gQor4LmA4Liq4Li34LmI4Lit4LihCivguYHguKoKK+C5geC4quC5iAor4LmB4Liq4LmJCivguYHguKrguIEKK+C5geC4quC4hwor4LmB4Liq4LiUCivguYHguKrguJTguIcKK+C5geC4quC4leC4oeC4m+C5jAor4LmB4Liq4LiZCivguYHguKrguJnguIcKK+C5geC4quC4meC4ouC5jAor4LmB4Liq4LiZ4LmA4Liq4LiZ4Liy4LiwCivguYHguKrguJoKK+C5geC4quC4muC4gQor4LmB4Liq4LihCivguYHguKrguKLguIEKK+C5geC4quC4ouC4hwor4LmB4Liq4Lii4LiwCivguYHguKrguKPguIEKK+C5geC4quC4o+C5ieC4hwor4LmB4Liq4Lil4LiHCivguYHguKrguKXguIfguYPguIgKK+C5geC4quC4peC4h+C5gOC4muC4t+C5iOC4rQor4LmB4Liq4Lin4LiHCivguYHguKrguK3guIEKK+C5geC4quC4sAor4LmC4Liq4LiBCivguYLguKrguIHguYLguJTguIEKK+C5guC4quC4geC4seC4meC4leC5jAor4LmC4Liq4LiB4Liy4LiU4Liy4LiZ4LiyCivguYLguKrguYLguITguKPguIEKK+C5guC4quC4kwor4LmC4Liq4LiT4LiR4LmMCivguYLguKrguJPguLQKK+C5guC4quC4k+C4tQor4LmC4Liq4LiUCivguYLguKrguJTguIEKK+C5guC4quC4lOC4oQor4LmC4Liq4LiU4LiyCivguYLguKrguJUKK+C5guC4quC4leC4luC4tAor4LmC4Liq4LiX4LiBCivguYLguKrguJfguKMKK+C5guC4quC4mOC4gQor4LmC4Liq4LiY4LiZ4LiwCivguYLguKrguJkKK+C5guC4quC4m+C4suC4mQor4LmC4Liq4Lig4LiTCivguYLguKrguKDguLIKK+C5guC4quC4oOC4tOC4k+C4tQor4LmC4Liq4Lig4Li1CivguYLguKrguYDguKDguJPguLUKK+C5guC4quC4oQor4LmC4Liq4Lih4LiZ4Lix4LiqCivguYLguKrguKHguKEKK+C5guC4quC4oeC4ouC5jAor4LmC4Liq4Lih4Liq4LmI4Lit4LiH4LmB4Liq4LiHCivguYLguKrguKPguYjguIcKK+C5guC4quC4o+C4iAor4LmC4Liq4Lij4Lix4LiI4LiI4LiwCivguYLguKrguKfguKPguKPguJMKK+C5guC4quC4q+C4uOC5ieC4ogor4LmC4Liq4Lis4LiqCivguYPguKoKK+C5g+C4quC5iAor4LmE4LiqCivguYTguKrguYkKK+C5hOC4quC4ogor4LmE4Liq4Lii4LiyCivguYTguKrguKPguYkKK+C5hOC4quC4pwor4LmE4Liq4LmJ4Lir4Li54LmJCivguKsKK+C4q+C4gQor4Lir4LiB4Lia4LiXCivguKvguIHguYLguKXguYgKK+C4q+C4hwor4Lir4LiH4LiBCivguKvguIfguKrguYwKK+C4q+C4h+C4quC5jOC4l+C4reC4hwor4Lir4LiH4Liq4LmM4Lir4Lii4LiBCivguKvguIfguK0KK+C4q+C4h+C4reC4gQor4Lir4LiH4LmI4Lit4LiHCivguKvguIfguK3guIfguYHguKvguIfguIcKK+C4q+C4h+C4reC4lAor4Lir4LiH4Lit4LiU4LmGCivguKvguIfguK3guJkKK+C4q+C4h+C5iOC4reC4oQor4Lir4LiH4Lit4LiiCivguKvguIfguYjguK3guKIKK+C4q+C4h+C4seC4gQor4Lir4LiH4Lix4LiaCivguKvguIfguYjguLLguIcKK+C4q+C4h+C4suC4ogor4Lir4LiH4LmI4Liy4LinCivguKvguIfguLMKK+C4q+C4h+C4tOC4gQor4Lir4LiH4Li04LiHCivguKvguIfguLTguKEKK+C4q+C4h+C4tuC4gQor4Lir4LiH4Li44LiH4Lir4LiH4Li04LiHCivguKvguIfguLjguJTguKvguIfguLTguJQKK+C4q+C4h+C4uOC4mgor4Lir4LiH4Li44Lia4Lir4LiH4Lix4LiaCivguKvguIfguLjguYjguKIKK+C4q+C4jeC5ieC4sgor4Lir4LiN4LmJ4Liy4Lib4Liy4LiB4LiE4Lit4LiBCivguKvguI3guYnguLLguJ3guKPguLHguYjguJkKK+C4q+C4jeC5ieC4suC4ouC4reC4h+C5hOC4nwor4Lir4LiN4LmJ4Liy4Lir4LiZ4Lin4LiU4LmB4Lih4LinCivguKvguI3guLTguIcKK+C4q+C4jeC4tOC4mgor4Lir4LiUCivguKvguJXguLAKK+C4q+C4l+C4seC4ogor4Lir4LiZCivguKvguJnguKfguIEKK+C4q+C4meC5iOC4p+C4hwor4Lir4LiZ4Lin4LiUCivguKvguJnguKfguJTguJnguLLguITguKPguLLguIoKK+C4q+C4meC4p+C4lOC4nuC4o+C4suC4q+C4oeC4k+C5jAor4Lir4LiZ4Lin4LiU4LmB4Lih4LinCivguKvguJnguYjguKfguKIKK+C4q+C4meC5iOC4p+C4ouC4geC4tOC4lQor4Lir4LiZ4LitCivguKvguJnguYjguK0KK+C4q+C4meC4reC4gQor4Lir4LiZ4Lit4LiB4LiK4LmJ4Liy4LiHCivguKvguJnguK3guIcKK+C4q+C4meC4reC4h+C5geC4i+C4hwor4Lir4LiZ4Lit4LiZCivguKvguJnguK3guJnguJXguLLguJnguKvguKLguLLguIEKK+C4q+C4meC5iOC4reC4ogor4Lir4LiZ4LmH4Lit4Lii4LmB4LiZ4LmICivguKvguJnguLAKK+C4q+C4meC4seC4gQor4Lir4LiZ4Lix4LiHCivguKvguJnguLHguIfguIHguKXguLLguIfguKfguLHguJkKK+C4q+C4meC4seC4h+C4quC4t+C4rQor4Lir4LiZ4Lix4LmI4LiZCivguKvguJnguLHguJoKK+C4q+C4meC4sgor4Lir4LiZ4LmJ4LiyCivguKvguJnguLLguIHguLLguKrguKPguLUKK+C4q+C4meC5iOC4suC4hwor4Lir4LiZ4Liy4LiUCivguKvguJnguLLguJkKK+C4q+C4meC4suC4oQor4Lir4LiZ4LmI4Liy4LiiCivguKvguJnguLLguKcKK+C4q+C4meC4swor4Lir4LiZ4Liz4LmA4Lil4Li14LmJ4Lii4LiaCivguKvguJnguLUKK+C4q+C4meC4teC5iQor4Lir4LiZ4Li14LiaCivguKvguJnguLXguYDguKrguLfguK0KK+C4q+C4meC4tuC4gQor4Lir4LiZ4Li24LmI4LiHCivguKvguJnguLbguJoKK+C4q+C4meC4t+C4lAor4Lir4LiZ4Li4CivguKvguJnguLjguIfguKvguJnguLTguIcKK+C4q+C4meC4uOC4mQor4Lir4LiZ4Li44LiaCivguKvguJnguLjguYjguKEKK+C4q+C4meC4uOC5iOC4ogor4Lir4LiZ4Li5CivguKvguYjguKEKK+C4q+C4oeC4gQor4Lir4Lih4LiUCivguKvguKHguYjguJkKK+C4q+C4oeC4p+C4gQor4Lir4Lih4Lin4LiUCivguKvguKHguK0KK+C4q+C4oeC5iOC4rQor4Lir4Lih4LmJ4LitCivguKvguKHguK3guIEKK+C4q+C4oeC4reC4hwor4Lir4Lih4LmI4Lit4LiHCivguKvguKHguK3guJkKK+C4q+C4oeC5iOC4reC4mQor4Lir4Lih4Lit4LiaCivguKvguKHguYjguK3guKEKK+C4q+C4oeC4reC4ogor4Lir4Lih4Lix4LiBCivguKvguKHguLHguJQKK+C4q+C4oeC4seC4mQor4Lir4Lih4Lix4LmI4LiZCivguKvguKHguLHguYnguJkKK+C4q+C4oeC4seC5iOC4meC5hOC4quC5iQor4Lir4Lih4Lix4LiaCivguKvguKHguLIKK+C4q+C4oeC5iOC4sgor4Lir4Lih4LmJ4LiyCivguKvguKHguLLguIEKK+C4q+C4oeC4suC4hwor4Lir4Lih4Liy4LiI4LmI4LitCivguKvguKHguLLguJQKK+C4q+C4oeC4suC4leC5i+C4sgor4Lir4Lih4Liy4Lih4Li44LmI4LiiCivguKvguKHguLLguKHguLjguYnguKIKK+C4q+C4oeC4suC5hOC4oeC5iQor4Lir4Lih4Liy4LiiCivguKvguKHguYnguLLguKIKK+C4q+C4oeC4suC4o+C5iOC4sgor4Lir4Lih4LmI4LizCivguKvguKHguLTguYjguJkKK+C4q+C4oeC4tQor4Lir4Lih4Li14LmICivguKvguKHguLXguYDguKvguKHguYfguJkKK+C4q+C4oeC4tuC4gQor4Lir4Lih4Li34LiZCivguKvguKHguLfguYjguJkKK+C4q+C4oeC4uOC4lAor4Lir4Lih4Li44LiZCivguKvguKHguLjguJoKK+C4q+C4oeC4uOC5iOC4ogor4Lir4Lih4Li44Lii4LiC4Liy4LinCivguKvguKHguLkKK+C4q+C4oeC4ueC5iAor4Lir4Lih4Li54Liq4Lix4LiHCivguKvguKHguLnguKrguLUKK+C4q+C4ouC4gQor4Lir4Lii4LmI4LiHCivguKvguKLguJQKK+C4q+C4ouC4p+C4gQor4Lir4Lii4Lin4LiZCivguKvguKLguKfguJnguYLguKXguYkKK+C4q+C4ouC4p+C4mgor4Lir4Lii4Lit4LiBCivguKvguKLguYfguK3guIHguKvguKLguYfguK3guKIKK+C4q+C4ouC4reC4hwor4Lir4Lii4LmI4Lit4LiHCivguKvguKLguYfguK3guIfguYHguKvguKLguYfguIcKK+C4q+C4ouC4reC4lAor4Lir4Lii4Lit4LiZCivguKvguKLguYjguK3guJkKK+C4q+C4ouC5iOC4reC4oQor4Lir4Lii4Lit4Lih4LmB4Lir4Lii4LihCivguKvguKLguK3guKIKK+C4q+C4ouC5iOC4reC4ogor4Lir4Lii4Lix4LiBCivguKvguKLguLHguIHguYDguKvguKLguLIKK+C4q+C4ouC4seC4hwor4Lir4Lii4Lix4LmI4LiHCivguKvguKLguLHguIfguKvguKLguLHguIcKK+C4q+C4ouC4seC4lAor4Lir4Lii4Lix4LiZCivguKvguKLguLHguJoKK+C4q+C4ouC4seC5iOC4p+C5gOC4oeC4t+C4reC4hwor4Lir4Lii4LmI4LiyCivguKvguKLguLLguIHguYDguKLguLfguYjguK0KK+C4q+C4ouC4suC4geC5hOC4ouC5iAor4Lir4Lii4LmI4Liy4LiH4LiE4LmJ4LizCivguKvguKLguLLguJQKK+C4q+C4ouC4suC4mgor4Lir4Lii4Liy4LihCivguKvguKLguLLguKcKK+C4q+C4ouC5ieC4suC4pwor4Lir4Lii4Liz4LiJ4LmI4LiyCivguKvguKLguLPguYDguJsKK+C4q+C4ouC4s+C5geC4q+C4ouC4reC4sAor4Lir4Lii4Liz4LmB4Lir4Lii4LiwCivguKvguKLguLTguIEKK+C4q+C4ouC4tOC5iOC4hwor4Lir4Lii4Li04LiaCivguKvguKLguLTguKEKK+C4q+C4ouC4tQor4Lir4Lii4Li14LmICivguKvguKLguLgKK+C4q+C4ouC4uOC4geC4q+C4ouC4tOC4gQor4Lir4Lii4Li44LiUCivguKvguKLguLjguYjguJkKK+C4q+C4ouC4uOC4muC5hgor4Lir4Lii4Li44Lih4Lir4Lii4Li04LihCivguKvguKLguLnguIHguKLguLIKK+C4q+C4owor4Lir4Lij4LiE4Li44LiTCivguKvguKPguJTguLLguKUKK+C4q+C4o+C4lOC4tQor4Lir4Lij4LiaCivguKvguKPguKPguKkKK+C4q+C4o+C4o+C4qeC4sgor4Lir4Lij4LitCivguKvguKPguK3guIEKK+C4q+C4o+C5h+C4reC4oeC5geC4q+C4o+C5h+C4oQor4Lir4Lij4Lit4Lii4LmGCivguKvguKPguLAKK+C4q+C4o+C4seC4muC5hgor4Lir4Lij4LiyCivguKvguKPguLQKK+C4q+C4o+C4tOC5iOC4hwor4Lir4Lij4Li04LiT4LiwCivguKvguKPguLTguJPguLHguIfguITguYwKK+C4q+C4o+C4tOC4lQor4Lir4Lij4Li04LiV4LiB4Li1CivguKvguKPguLXguYgKK+C4q+C4o+C4teC4lAor4Lir4Lij4Li14LiV4LiB4Li1CivguKvguKPguLfguK0KK+C4q+C4o+C4uOC5iOC4mQor4Lir4Lij4Li44Lia4LmGCivguKvguKPguLjguJrguKPguLnguYgKK+C4q+C4o+C4uOC4muC4q+C4o+C4ueC5iAor4Lir4Lij4Li44LmI4LihCivguKvguKPguLkKK+C4q+C4o+C4ueC4q+C4o+C4sgor4Lir4Lik4LiX4LiiCivguKvguKTguJfguKLguYwKK+C4q+C4pOC4l+C4seC4ogor4Lir4Lik4Lip4LiO4LmMCivguKvguKTguKnguI7guLUKK+C4q+C4pOC4q+C4o+C4o+C4qeC5jAor4Lir4Lik4LmC4Lir4LiUCivguKvguKUKK+C4q+C4peC4hwor4Lir4Lil4LiUCivguKvguKXguJkKK+C4q+C4peC5iOC4mQor4Lir4Lil4LiaCivguKvguKXguYjguKEKK+C4q+C4peC4p+C4hwor4Lir4Lil4Lin4LihCivguKvguKXguK0KK+C4q+C4peC5iOC4rQor4Lir4Lil4Lit4LiBCivguKvguKXguK3guJQKK+C4q+C4peC4reC4mQor4Lir4Lil4LmH4Lit4LiZCivguKvguKXguYjguK3guJkKK+C4q+C4peC5h+C4reC4meC5hgor4Lir4Lil4Lit4LihCivguKvguKXguLAKK+C4q+C4peC4sOC4q+C4peC4p+C4oQor4Lir4Lil4Lix4LiBCivguKvguKXguLHguIcKK+C4q+C4peC4seC5iOC4hwor4Lir4Lil4Lix4LiU4LmGCivguKvguKXguLHguYjguJkKK+C4q+C4peC4seC4mgor4Lir4Lil4Lix4LinCivguKvguKXguLIKK+C4q+C4peC5ieC4sgor4Lir4Lil4Liy4LiBCivguKvguKXguLLguJcKK+C4q+C4peC4suC4l+C4p+C4lAor4Lir4Lil4Liy4LiZCivguKvguKXguLLguJoKK+C4q+C4peC4suC4oQor4Lir4Lil4Liy4LiiCivguKvguKXguLLguKcKK+C4q+C4peC4suC4q+C4pQor4Lir4Lil4Li04LiBCivguKvguKXguLTguYjguIcKK+C4q+C4peC4tOC4lwor4Lir4Lil4Li04LiZCivguKvguKXguLTguKEKK+C4q+C4peC4tOC4pwor4Lir4Lil4Li04LmI4LinCivguKvguKXguLUKK+C4q+C4peC4teC4gQor4Lir4Lil4Li14LmC4LiBCivguKvguKXguLXguJoKK+C4q+C4peC4teC4ruC4t+C5ieC4rQor4Lir4Lil4Li34LiaCivguKvguKXguLjguIHguKvguKXguLTguIEKK+C4q+C4peC4uOC4lAor4Lir4Lil4Li44LiZ4LmGCivguKvguKXguLjguJoKK+C4q+C4peC4uOC4oQor4Lir4Lil4Li44Lih4Lie4LitCivguKvguKXguLjguKHguJ7guLUKK+C4q+C4peC4ueC5iAor4Lir4Lin4LiHCivguKvguYjguKfguIcKK+C4q+C5ieC4p+C4hwor4Lir4Lin4LiUCivguKvguKfguJkKK+C4q+C5ieC4p+C4mQor4Lir4Lin4LiZ4LiE4Liz4LiZ4Li24LiHCivguKvguKfguKIKK+C4q+C5iOC4p+C4ogor4Lir4LmJ4Lin4LiiCivguKvguKfguK0KK+C4q+C4p+C4reC4lAor4Lir4Lin4LmH4Lit4Lii4LmGCivguKvguKfguLAKK+C4q+C4p+C4seC4hwor4Lir4Lin4Lix4LiUCivguKvguKfguLHguYjguJkKK+C4q+C4p+C4seC4meC4ouC4tOC4q+C4p+C4sgor4Lir4Lin4Lix4LinCivguKvguKfguLHguKfguKPguYjguK0KK+C4q+C4p+C4seC4p+C5gOC4o+C4suC4sAor4Lir4Lin4LiyCivguKvguKfguYjguLIKK+C4q+C4p+C5ieC4sgor4Lir4Lin4Liy4LiBCivguKvguKfguYjguLLguIcKK+C4q+C4p+C4suC4lAor4Lir4Lin4Liy4LiZCivguKvguKfguYjguLLguJkKK+C4q+C4p+C4suC4oQor4Lir4Lin4Liy4LiiCivguKvguKfguLMKK+C4q+C4p+C4tOC4lAor4Lir4Lin4Li04LinCivguKvguKfguLUKK+C4q+C4p+C4teC5iAor4Lir4Lin4Li14LiUCivguKvguKfguLfguK0KK+C4q+C4p+C4uOC4lOC4q+C4p+C4tOC4lAor4Lir4Lin4Li44LihCivguKvguKfguLnguJQKK+C4q+C4rQor4Lir4LmI4LitCivguKvguYnguK0KK+C4q+C4reC4gQor4Lir4Lit4LiHCivguKvguYnguK3guIcKK+C4q+C4reC4mQor4Lir4LmI4Lit4LiZCivguKvguK3guJoKK+C4q+C4reC4oQor4Lir4LmJ4Lit4LihCivguKvguK3guKEw77+9CivguYDguKvguKHguLHguJnguJXguYwKK+C5gOC4q+C4oeC4sgor4LmA4Lir4Lih4Liy4Lii4Lix4LiZCivguYDguKvguKHguLLguLAKK+C5gOC4q+C4oeC4teC4ouC4pwor4LmA4Lir4Lih4Li14LmI4Lii4LinCivguYDguKvguKHguLfguK3guIcKK+C5gOC4q+C4oeC4t+C4reC4lAor4LmA4Lir4Lih4Li34Lit4LiU4LiE4LiZCivguYDguKvguKHguLfguK3guJTguYLguKXguJQKK+C5gOC4q+C4oeC4t+C4reC4mQor4LmA4Lir4Lih4Li34LmI4Lit4LiiCivguYDguKvguKHguLfguYjguK3guKLguYYKK+C5gOC4q+C4ogor4LmA4Lir4Lii4LiHCivguYDguKvguKLguYjguK3guKIKK+C5gOC4q+C4ouC4sgor4LmA4Lir4Lii4LmI4LiyCivguYDguKvguKLguYnguLIKK+C5gOC4q+C4ouC5iOC4suC5hgor4LmA4Lir4Lii4Liy4LiwCivguYDguKvguKLguLLguLDguYYKK+C5gOC4q+C4ouC4suC4sOC4ouC5iOC4suC4hwor4LmA4Lir4Lii4Liy4Liw4LmB4Lir4Lii4LiwCivguYDguKvguKLguLTguIcKK+C5gOC4q+C4ouC4tOC4muC5hgor4LmA4Lir4Lii4Li14Lii4LiUCivguYDguKvguKLguLXguKLguJoKK+C5gOC4q+C4ouC4teC5iOC4ouC4pwor4LmA4Lir4Lii4Li34LmI4LitCivguYDguKvguKLguLfguK3guIEKK+C5gOC4q+C4o+C4seC4jeC4jeC4tOC4gQor4LmA4Lir4Lij4LiyCivguYDguKvguKPguLLguLDguYYKK+C5gOC4q+C4o+C4teC4ouC4jQor4LmA4Lir4Lil4LmICivguYDguKvguKXguYfguIEKK+C5gOC4q+C4peC4mQor4LmA4Lir4Lil4LinCivguYDguKvguKXguK0KK+C5gOC4q+C4peC4sgor4LmA4Lir4Lil4LmI4LiyCivguYDguKvguKXguYnguLIKK+C5gOC4q+C4peC4suC4iuC4sOC5guC4reC4mQor4LmA4Lir4Lil4Liy4Lir4Lil4LiBCivguYDguKvguKXguLLguYDguKvguKLguYgKK+C5gOC4q+C4peC4suC4sOC5geC4q+C4peC4sAor4LmA4Lir4Lil4Li04LiHCivguYDguKvguKXguLTguIfguYDguIjguLTguYnguIcKK+C5gOC4q+C4peC4teC4ouC4mQor4LmA4Lir4Lil4Li14LmI4Lii4LihCivguYDguKvguKXguLXguKLguKcKK+C5gOC4q+C4peC4t+C4rQor4LmA4Lir4Lil4Li34Lit4LiBCivguYDguKvguKXguLfguK3guIcKK+C5gOC4q+C4peC4t+C4reC4mgor4LmA4Lir4Lil4Li34Lit4LihCivguYDguKvguKXguLfguYjguK3guKEKK+C5gOC4q+C4pwor4LmA4Lir4Lin4LmICivguYDguKvguKfguIcKK+C5gOC4q+C4p+C4ogor4LmA4Lir4Lin4Lit4LiwCivguYDguKvguKfguK3guLDguKvguKfguLAKK+C5gOC4q+C4p+C4teC5iOC4ouC4hwor4LmA4Lir4LmI4LitCivguYDguKvguK3guLAKK+C5gOC4q+C4sAor4LmA4Lir4Liw4Lir4LiwCivguYDguKvguLIKK+C5gOC4q+C5iOC4sgor4LmA4Lir4Liy4LiwCivguYDguKvguLTguJkKK+C5gOC4q+C4tOC4oQor4LmA4Lir4Li14LmJ4LiiCivguYDguKvguLXguKLguIcKK+C5gOC4q+C4teC4ouC4mQor4LmA4Lir4Li14LmJ4Lii4LiZCivguYDguKvguLXguYnguKLguKEKK+C5gOC4q+C4teC5iOC4ouC4pwor4LmA4Lir4Li34LmI4LitCivguYDguKvguLfguK3guJQKK+C5geC4qwor4LmB4Lir4LmICivguYHguKvguYkKK+C5geC4q+C4gQor4LmB4Lir4LiHCivguYHguKvguIfguYgKK+C5geC4q+C5iOC4hwor4LmB4Lir4LmJ4LiHCivguYHguKvguIfguYfguIEKK+C5geC4q+C4h+C5geC4geC5iwor4LmB4Lir4LiH4LmI4LiHCivguYHguKvguIfguJkKK+C5geC4q+C4mQor4LmB4Lir4LmJ4LiZCivguYHguKvguJnguIcKK+C5geC4q+C4meC4mgor4LmB4Lir4LiZ4LihCivguYHguKvguJoKK+C5geC4q+C4oQor4LmB4Lir4Lih4LmICivguYHguKvguKHguYjguKEKK+C5geC4q+C4oeC4sAor4LmB4Lir4LiiCivguYHguKvguKLguYgKK+C5geC4q+C4ouC4hwor4LmB4Lir4Lii4LmI4LiHCivguYHguKvguKLguKEKK+C5geC4q+C4ouC4sAor4LmB4Lir4Lii4Liw4LmGCivguYHguKvguKUKK+C5geC4q+C4peC5iAor4LmB4Lir4Lil4LiBCivguYHguKvguKXguYjguIcKK+C5geC4q+C4peC4mQor4LmB4Lir4Lil4LihCivguYHguKvguKXguLAKK+C5geC4q+C4pwor4LmB4Lir4LmJ4LinCivguYHguKvguKfguIEKK+C5geC4q+C4p+C5iOC4hwor4LmB4Lir4Lin4LiUCivguYHguKvguKfguJkKK+C5geC4q+C4p+C4sAor4LmB4Lir4LiwCivguYHguKvguLDguYYKK+C5guC4q+C5iAor4LmC4Lir4LiBCivguYLguKvguIcKK+C5guC4q+C4lAor4LmC4Lir4LiZCivguYLguKvguJnguIEKK+C5guC4q+C4meC5iOC4hwor4LmC4Lir4LihCivguYLguKvguKHguYgKK+C5guC4q+C4oeC4geC4o+C4o+C4oQor4LmC4Lir4Lih4LiB4Li54LiT4LiR4LmMCivguYLguKvguKHguYjguIcKK+C5guC4q+C4oeC4lAor4LmC4Lir4LiiCivguYLguKvguKLguIHguYDguKvguKLguIEKK+C5guC4q+C4ouC4hwor4LmC4Lir4Lii4LmI4LiHCivguYLguKvguKMKK+C5guC4q+C4o+C4hwor4LmC4Lir4Lij4LiH4LmA4Lir4Lij4LiHCivguYLguKvguKPguJTguLLguIjguLLguKPguKLguYwKK+C5guC4q+C4o+C4sOC4nuC4sgor4LmC4Lir4LilCivguYLguKvguKXguYgKK+C5guC4q+C4peC4h+C5guC4iOC5ieC4hwor4LmC4Lir4LinCivguYLguKvguKfguYgKK+C5guC4q+C4p+C5iQor4LmC4Lir4Lin4LiB4LmA4Lir4Lin4LiBCivguYLguKvguKfguIcKK+C5guC4q+C4p+C4lAor4LmC4Lir4Lin4LiVCivguYPguKvguYkKK+C5g+C4q+C4jeC5iAor4LmD4Lir4Lih4LmICivguYTguKsKK+C5hOC4q+C5iAor4LmE4Lir4LmJCivguYTguKvguJkKK+C5hOC4q+C4oQor4LmE4Lir4Lih4LmJCivguYTguKvguKPguJMKK+C5hOC4q+C4pQor4LmE4Lir4Lil4LmICivguYTguKvguKcKK+C5hOC4q+C4p+C5iQor4LmE4Lir4Lin4LmGCivguYTguKvguKvguKXguLMKK+C4rQor4Lit4LiBCivguK3guIHguJXguLHguI3guI3guLjguJXguLIKK+C4reC4geC4leC4seC4jeC4jeC4uQor4Lit4LiB4LiZ4Li04Lip4LiQ4LmMCivguK3guIHguKPguJPguLXguKLguYwKK+C4reC4geC4o+C4o+C4oeC4geC4o+C4tOC4ouC4sgor4Lit4LiB4Lix4Lib4Lib4Li04Lii4LiwCivguK3guIHguLLguKXguIjguLXguKfguKMKK+C4reC4geC4suC4peC4tOC5guC4gQor4Lit4LiB4Li04Lij4Li04Lii4LiX4Li04LiQ4Li0CivguK3guIHguLjguKjguKUKK+C4reC4hOC4leC4tAor4Lit4LiE4LmA4LiZ4Liq4Lix4LiZCivguK3guITguLLguJgKK+C4reC4hgor4Lit4LiHCivguK3guIfguIHguYwKK+C4reC4h+C4hOC5jAor4Lit4LiH4LiE4Lih4LiZ4LiV4Lij4Li1CivguK3guIfguITguKHguKPguKPguKkKK+C4reC4h+C4hOC4uOC4pQor4Lit4LiH4LiE4Li44Lil4Li1CivguK3guIfguKjguYwKK+C4reC4h+C4qOC4sgor4Lit4LiH4Lit4Liy4LiICivguK3guIfguLjguYjguJkKK+C4reC4iOC4owor4Lit4LiI4Lil4LiyCivguK3guIjguLTguJXguJXguLQKK+C4reC4iOC4tOC4meC4leC4sgor4Lit4LiI4Li04LiZ4LmE4LiV4LiiCivguK3guIjguLTguKPguLAKK+C4reC5gOC4iOC4peC4gQor4Lit4LmA4LiI4Lil4LiwCivguK3guIoKK+C4reC4iuC4tOC4mQor4Lit4LiK4Li04LiZ4Li1CivguK3guIrguLTguKMKK+C4reC4iuC4teC4p+C4p+C4tOC4l+C4ogor4Lit4LiP4Lin4Li1CivguK3guJPguLQKK+C4reC4k+C4uAor4Lit4LiT4Li5CivguK3guYLguJPguJfguLHguKIKK+C4reC4lAor4Lit4LiU4Li0CivguK3guJTguLTguJbguLUKK+C4reC4lOC4tOC5gOC4l+C4ngor4Lit4LiU4Li04LmA4Lij4LiBCivguK3guJTguLTguKjguKMKK+C4reC4lOC4tOC4qOC4p+C4owor4Lit4LiU4Li04Lio4Lix4LiiCivguK3guJTguLXguJUKK+C4reC4lOC4uOC4pQor4Lit4LiU4Li44Lil4Lii4LmMCivguK3guJXguLQKK+C4reC4leC4tOC4iuC4suC4lQor4Lit4LiV4Li04LiV4Lix4LiT4Lir4LiyCivguK3guJXguLTguJbguLTguJ7guKXguLUKK+C4reC4leC4tOC5gOC4l+C4ngor4Lit4LiV4Li04Lij4Liy4LiKCivguK3guJXguLTguYDguKPguIEKK+C4reC4leC4tOC4quC4suC4owor4Lit4LiV4Li04Liy4Lih4LiZ4LiwCivguK3guJXguLXguJXguLHguIfguKrguI3guLLguJMKK+C4reC4luC4o+C4o+C4nuC5gOC4p+C4lwor4Lit4LiX4Li04LiV4Li0CivguK3guJfguLTguJnguJnguLLguJfguLLguJkKK+C4reC4l+C4tOC4meC4meC4suC4l+C4suC4ouC4tQor4Lit4LiY4Lij4Lij4LihCivguK3guJjguLQKK+C4reC4mOC4tOC4geC4o+C4k+C5jAor4Lit4LiY4Li04LiB4Liy4LijCivguK3guJjguLTguITguKEKK+C4reC4mOC4tOC4iOC4tOC4lQor4Lit4LiY4Li04LiP4LiQ4Liy4LiZCivguK3guJjguLTguJrguJTguLUKK+C4reC4mOC4tOC4muC4suC4ogor4Lit4LiY4Li04LibCivguK3guJjguLTguKHguLLguJXguKMKK+C4reC4mOC4tOC4oeC4uOC4leC4leC4tAor4Lit4LiY4Li04LmC4Lih4LiB4LiC4LmMCivguK3guJjguLTguKPguLLguIoKK+C4reC4mOC4tOC4p+C4suC4qgor4Lit4LiY4Li04Lin4Liy4Liq4LiZ4LiwCivguK3guJjguLTguKjguLXguKUKK+C4reC4mOC4tOC4qeC4kOC4suC4mQor4Lit4LiY4Li24LiBCivguK3guYnguJkKK+C4reC4meC4h+C4hOC5jAor4Lit4LiZ4LiH4LiE4LiT4LiwCivguK3guJnguJjguLTguKfguKMKK+C4reC4meC4meC4leC5jAor4Lit4LiZ4Lig4Li04Lij4LiV4Li0CivguK3guJnguKLguLAKK+C4reC4meC4o+C4o+C4hgor4Lit4LiZ4Lij4Lij4LiWCivguK3guJnguKPguLTguKLguJvguKPguLTguYDguKLguKrguJnguLIKK+C4reC4meC4pQor4Lit4LiZ4Lin4Lix4LiKCivguK3guYnguJnguK3guYnguK0KK+C4reC4meC4seC4jQor4Lit4LiZ4Lix4LiV4LiV4Lil4Lix4LiB4Lip4LiT4LiwCivguK3guJnguLHguJXguJXguLIKK+C4reC4meC4seC4meC4leC5jAor4Lit4LiZ4Lix4LihCivguK3guJnguLLguITguJUKK+C4reC4meC4suC4hOC4suC4oeC4tQor4Lit4LiZ4Liy4LiE4Liy4Lij4Li04LiBCivguK3guJnguLLguITguLLguKPguLTguKLguYDguJ7guKgKK+C4reC4meC4suC4iOC4suC4owor4Lit4LiZ4Liy4LiWCivguK3guJnguLLguJbguLIKK+C4reC4meC4suC4l+C4owor4Lit4LiZ4Liy4LiY4Li04Lib4LmE4LiV4LiiCivguK3guJnguLLguKHguLHguKIKK+C4reC4meC4suC4o+C4ouC4sAor4Lit4LiZ4Liy4Lil4Lix4LiiCivguK3guJnguLLguKfguKPguJPguI3guLLguJMKK+C4reC4meC4swor4Lit4LiZ4Li04LiICivguK3guJnguLTguIjguIjguLHguIcKK+C4reC4meC4tOC4iOC4iOC4sgor4Lit4LiZ4Li04LiP4LiQ4Liy4Lij4Lih4LiT4LmMCivguK3guJnguLTguKLguJUKK+C4reC4meC4tOC4ouC4oQor4Lit4LiZ4Li04LilCivguK3guJnguLTguKfguKPguKPguJUKK+C4reC4meC4tOC4p+C4o+C4o+C4leC4meC5jAor4Lit4LiZ4Li04Lip4LiP4LmMCivguK3guJnguLXguIHguLAKK+C4reC4meC4teC4iAor4Lit4LiZ4Li24LiBCivguK3guJnguLbguYjguIcKK+C4reC4meC4uAor4Lit4LiZ4Li44LiB4LijCivguK3guJnguLjguIHguKPguKEKK+C4reC4meC4uOC4geC4o+C4o+C4oeC4geC4suC4owor4Lit4LiZ4Li44LiB4Lij4Liw4LmA4Lia4Li14Lii4LiUCivguK3guJnguLjguIHguLLguIrguLLguJQKK+C4reC4meC4uOC4geC4suC4owor4Lit4LiZ4Li44LiB4Li54LilCivguK3guJnguLjguITguLLguKHguLTguIEKK+C4reC4meC4uOC4hOC4suC4oeC4tQor4Lit4LiZ4Li44LmA4LiE4Lij4Liy4Liw4Lir4LmMCivguK3guJnguLjguIjguKMKK+C4reC4meC4uOC4igor4Lit4LiZ4Li44LiK4LiyCivguK3guJnguLjguIrguLLguJUKK+C4reC4meC4uOC4iuC4tOC4lQor4Lit4LiZ4Li44LiN4Liy4LiVCivguK3guJnguLjguI3guLLguYLguJXguJXguLjguKXguLLguIHguLLguKMKK+C4reC4meC4uOC5gOC4luC4o+C4sAor4Lit4LiZ4Li44LiX4Li04LiZCivguK3guJnguLjguJrguJcKK+C4reC4meC4uOC4muC4suC4pQor4Lit4LiZ4Li44Lia4Li44LieCivguK3guJnguLjguJvguKPguLTguI3guI3guLIKK+C4reC4meC4uOC4m+C4quC4seC4oeC4muC4seC4mQor4Lit4LiZ4Li44Lib4Lix4Liq4LiZ4LiyCivguK3guJnguLjguJ7guIfguKjguYwKK+C4reC4meC4uOC4nuC4meC4mOC5jAor4Lit4LiZ4Li44Lie4Lix4LiZ4LiY4LmMCivguK3guJnguLjguYLguJ7guJgKK+C4reC4meC4uOC4oOC4o+C4o+C4ouC4sgor4Lit4LiZ4Li44Lig4Liy4LiECivguK3guJnguLjguKDguLLguKkKK+C4reC4meC4uOC4oeC4seC4leC4tAor4Lit4LiZ4Li44Lih4Liy4LiV4Lij4LiyCivguK3guJnguLjguKHguLLguJkKK+C4reC4meC4uOC4oeC4ueC4pQor4Lit4LiZ4Li44LmC4Lih4LiX4LiZ4LiyCivguK3guJnguLjguYLguKLguIQKK+C4reC4meC4uOC4o+C4seC4geC4qeC5jAor4Lit4LiZ4Li44Lij4Liy4LiKCivguK3guJnguLjguKPguLLguJjguLIKK+C4reC4meC4uOC4o+C4ueC4mwor4Lit4LiZ4Li44LmC4Lil4LihCivguK3guJnguLjguKfguIfguKjguYwKK+C4reC4meC4uOC4p+C4seC4lQor4Lit4LiZ4Li44Lin4Liy4LiVCivguK3guJnguLjguKjguLLguKrguIEKK+C4reC4meC4uOC4qOC4suC4quC4meC5jAor4Lit4LiZ4Li44Lio4Liy4Liq4LiZ4Liy4LiI4Liy4Lij4Lii4LmMCivguK3guJnguLjguKjguLTguKnguI/guYwKK+C4reC4meC4uOC4quC4leC4tAor4Lit4LiZ4Li44Liq4LiZ4LiY4Li0CivguK3guJnguLjguKrguKDguLLguIHguLLguIrguLLguJQKK+C4reC4meC4uOC4quC4owor4Lit4LiZ4Li44Liq4Lij4LiT4LmMCivguK3guJnguLjguKrguLHguI3guI3guLIKK+C4reC4meC4uOC4quC4seC4ogor4Lit4LiZ4Li44Liq4Liy4Lin4Lij4Li14Lii4LmMCivguK3guJnguLjguKrguLLguKrguJnguLUKK+C4reC5gOC4meC4gQor4Lit4LmA4LiZ4LiB4LiE4Li44LiTCivguK3guYDguJnguIHguKfguLTguJgKK+C4reC5gOC4meC4iOC4reC4meC4suC4lgor4Lit4LmA4LiZ4LiN4LiK4Liy4Lig4Li04Liq4Lix4LiH4LiC4Liy4LijCivguK3guYDguJnguKrguJnguLIKK+C4reC5guC4meC4iuC4sgor4Lit4LmC4LiZ4LiU4Liy4LiVCivguK3guJoKK+C4reC4muC5gOC4iuC4ogor4Lit4Lia4Liy4LiiCivguK3guJsKK+C4reC4m+C4geC4suC4owor4Lit4Lib4LiX4Liy4LiZCivguK3guJvguYDguJfguKgKK+C4reC4m+C4oOC4suC4hOC4ouC5jAor4Lit4Lib4Lih4LiH4LiE4LilCivguK3guJvguKHguLLguJkKK+C4reC4m+C4ouC4qAor4Lit4Lib4Lij4LiB4LiV4Li0CivguK3guJvguKPguLDguKHguLLguJMKK+C4reC4m+C4o+C4sOC4oeC4suC4lwor4Lit4Lib4Lij4Liw4LmE4Lih4LiiCivguK3guJvguKPguLHguJMKK+C4reC4m+C4o+C4sgor4Lit4Lib4Lij4Liy4LiK4Lix4LiiCivguK3guJvguKPguLLguIrguLTguJUKK+C4reC4m+C4o+C4suC4mAor4Lit4Lib4Lij4Liy4Lib4Lij4LmA4LiI4LiV4LiZ4LiyCivguK3guJvguKPguLLguJvguKPguYDguKfguJfguJnguLXguKLguIHguKPguKPguKEKK+C4reC4m+C4o+C4tOC4oeC4suC4kwor4Lit4Lib4Lij4Li04Lir4Liy4Lij4Li04Lii4LiY4Lij4Lij4LihCivguK3guJvguKXguLHguIHguKnguJPguYwKK+C4reC4m+C5guC4peC4geC4meC5jAor4Lit4Lib4Lin4Liy4LiXCivguK3guJvguKvguLLguKMKK+C4reC4m+C4seC4k+C4k+C4geC4m+C4j+C4tOC4m+C4l+C4sgor4Lit4Lib4Lix4LiX4Lij4LieCivguK3guJvguLLguIjguLLguKLguJnguLAKK+C4reC4m+C4suC4iOC4tQor4Lit4Lib4Liy4LiI4Li14LiZCivguK3guJvguLjguI3guI3guLLguKDguLTguKrguLHguIfguILguLLguKMKK+C4reC5gOC4m+C4q+C4tAor4Lit4Lie4LiI4LiZ4LmMCivguK3guJ7guJ7guLAKK+C4reC4nuC4ouC4ngor4Lit4Lie4Lii4Liy4Lia4Liy4LiX4Lin4Li04LiV4LiBCivguK3guJ7guKUKK+C4reC4nuC4peC4sgor4Lit4Lie4Liy4Lij4LmM4LiV4LmA4Lih4LiZ4LiV4LmMCivguK3guKDguKcKK+C4reC4oOC4seC4ngor4Lit4Lig4Lix4LiiCivguK3guKDguLQKK+C4reC4oOC4tOC4hOC4oQor4Lit4Lig4Li04LiG4Liy4LiVCivguK3guKDguLTguIjguInguLIKK+C4reC4oOC4tOC4iOC4jOC4sgor4Lit4Lig4Li04LiK4LiZCivguK3guKDguLTguIrguLHguKIKK+C4reC4oOC4tOC4iuC4suC4lQor4Lit4Lig4Li04LiK4Li04LiVCivguK3guKDguLTguI3guI3guLIKK+C4reC4oOC4tOC4jeC4jeC4suC4kwor4Lit4Lig4Li04LiQ4Liy4LiZCivguK3guKDguLTguJjguKPguKPguKEKK+C4reC4oOC4tOC4mOC4suC4mQor4Lit4Lig4Li04LmE4LiY4LiiCivguK3guKDguLTguJnguLHguJnguJfguYwKK+C4reC4oOC4tOC4meC4seC4ogor4Lit4Lig4Li04LiZ4Liy4LiXCivguK3guKDguLTguJnguLTguKvguLLguKMKK+C4reC4oOC4tOC5gOC4meC4qeC4geC4o+C4oeC4k+C5jAor4Lit4Lig4Li04Lia4Liy4LilCivguK3guKDguLTguJvguKPguLHguIrguI3guLIKK+C4reC4oOC4tOC4m+C4o+C4suC4ogor4Lit4Lig4Li04Lih4Lir4Liy4Lit4Liz4LiZ4Liy4LiICivguK3guKDguLTguKHguLLguJnguLAKK+C4reC4oOC4tOC4oeC4uOC4ggor4Lit4Lig4Li04Lij4LiU4Li1CivguK3guKDguLTguKPguJXguLQKK+C4reC4oOC4tOC4o+C4oeC4ouC5jAor4Lit4Lig4Li04Lij4Lix4LiB4Lip4LmMCivguK3guKDguLTguKPguLHguJDguKHguJnguJXguKPguLUKK+C4reC4oOC4tOC4o+C4suC4oQor4Lit4Lig4Li04Lij4Li44LiVCivguK3guKDguLTguKPguLjguKEKK+C4reC4oOC4tOC4o+C4ueC4mwor4Lit4Lig4Li04Lil4Lix4LiB4LiC4Li04LiVCivguK3guKDguLTguKXguLLguKoKK+C4reC4oOC4tOC5gOC4peC4m+C4meC5jAor4Lit4Lig4Li04Lin4Lix4LiZ4LiX4LmMCivguK3guKDguLTguKfguLLguJcKK+C4reC4oOC4tOC4p+C4suC4l+C4meC5jAor4Lit4Lig4Li04LmA4Lip4LiBCivguK3guKDguLTguKrguJfguJjguLTguYwKK+C4reC4oOC4tOC4quC4oeC5guC4nuC4mOC4tAor4Lit4Lig4Li04Liq4Lih4Lix4LiiCivguK3guKDguLTguKrguLHguIfguILguLLguKMKK+C4reC4oOC4tOC4quC4seC4oeC5guC4nuC4mOC4tAor4Lit4Lig4Li04Liq4Li04LiVCivguK3guKDguLnguJUKK+C4reC4oQor4Lit4LmJ4LihCivguK3guKHguJXguLAKK+C4reC4oeC4meC4uOC4qeC4ouC5jAor4Lit4Lih4LijCivguK3guKHguKPguJrguJTguLUKK+C4reC4oeC4o+C4m+C4uOC4o+C4sAor4Lit4Lih4Lij4Lij4Lix4LiV4LiZ4LmMCivguK3guKHguKPguKPguLLguIoKK+C4reC4oeC4o+C4quC4leC4o+C4tQor4Lit4Lih4LmA4Lij4LioCivguK3guKHguYDguKPguKjguKfguKMKK+C4reC4oeC4pOC4lQor4Lit4Lih4Lik4LiV4Lii4Li5CivguK3guKHguLHguIjguIjguLAKK+C4reC4oeC4seC4leC4owor4Lit4Lih4Liy4LiV4Lii4LmMCivguK3guKHguLLguKfguKrguLgKK+C4reC4oeC4suC4p+C4suC4quC4tQor4Lit4Lih4Li04LiV4LijCivguK3guYDguKHguKPguLTguIHguLHguJkKK+C4reC4ogor4Lit4Lii4LiZCivguK3guKLguLHguKoKK+C4reC4ouC5iOC4sgor4Lit4Lii4Liy4LiBCivguK3guKLguYjguLLguIcKK+C4reC4ouC4uOC4leC4tOC4mOC4o+C4o+C4oQor4Lit4Lii4Li44LiX4LiY4LmMCivguK3guKLguLnguYgKK+C4reC4owor4Lit4Lij4LiKCivguK3guKPguIrguKMKK+C4reC4o+C4iuC4uOC4mQor4Lit4Lij4LiTCivguK3guKPguJTguLUKK+C4reC4o+C4leC4tAor4Lit4Lij4LmE4LiXCivguK3guKPguJjguLLguJkKK+C4reC4o+C4meC4uOC4igor4Lit4Lij4Lie4Li04LiZ4LiX4LmMCivguK3guKPguJ7guLTguKEKK+C4reC4o+C4o+C4hAor4Lit4Lij4Lij4LiGCivguK3guKPguKPguIbguKLguYwKK+C4reC4o+C4o+C4iOC4meC5jAor4Lit4Lij4Lij4LiT4LieCivguK3guKPguKPguJYKK+C4reC4o+C4o+C4mAor4Lit4Lij4Lij4LiY4Liy4LiH4LiE4LmMCivguK3guKPguKrguLjguKEKK+C4reC4o+C4q+C4sAor4Lit4Lij4Lir4Lix4LiHCivguK3guKPguKvguLHguJUKK+C4reC4o+C4q+C4seC4mQor4Lit4Lij4Lir4Lix4LiZ4LiV4LmMCivguK3guKPguYjguK3guKIKK+C4reC4o+C4seC4jQor4Lit4Lij4Lix4LiZ4LiV4LmMCivguK3guKPguLLguJTguLUKK+C4reC4o+C4suC4leC4tAor4Lit4Lij4LmI4Liy4LihCivguK3guKPguLQKK+C4reC4o+C4tOC4mQor4Lit4Lij4Li04Lii4LiB4LiwCivguK3guKPguLTguKLguLAKK+C4reC4o+C4uAor4Lit4Lij4Li44LiTCivguK3guKPguLjguYjguKEKK+C4reC4o+C4ueC4mwor4Lit4Lil4LiH4LiB4LiVCivguK3guKXguIfguIHguKPguJPguYwKK+C4reC4peC4h+C4geC4suC4owor4Lit4Lil4Lin4LiZCivguK3guKXguYDguKfguIcKK+C4reC4peC4q+C4oeC5iOC4suC4mQor4Lit4Lil4LmI4Lit4LiH4LiJ4LmI4Lit4LiHCivguK3guKXguLHguIHguYDguK3guKXguLfguYjguK0KK+C4reC4peC4seC4iuC4iuC4tQor4Lit4Lil4LmI4Liy4LiH4LiJ4LmI4Liy4LiHCivguK3guKXguLQKK+C4reC4peC4tOC4h+C4hOC5jAor4Lit4Lil4Li24LiH4LiE4LmMCivguK3guKXguLbguYjguIfguInguLbguYjguIcKK+C4reC5guC4peC4q+C4sAor4Lit4Lin4LiBCivguK3guYnguKfguIEKK+C4reC4p+C4geC4suC4qAor4Lit4Lin4LmA4LiE4Lij4Liy4Liw4Lir4LmMCivguK3guKfguIjguKMKK+C4reC4p+C4iuC4seC4ogor4Lit4Lin4LiK4Liy4LiVCivguK3guKfguJQKK+C4reC4p+C4leC4suC4owor4Lit4Lin4LiZCivguK3guYnguKfguJkKK+C4reC4p+C4meC4tAor4Lit4Lin4LiaCivguK3guKfguKHguIfguITguKUKK+C4reC4p+C4oeC4reC4swor4Lit4LmJ4Lin4Lih4LmA4Lit4Li14LiiCivguK3guKfguKIKK+C4reC4p+C4ouC4p+C4sAor4Lit4Lin4Lij4Li44LiX4LiY4LmMCivguK3guKfguKPguLjguJjguJfguIEKK+C4reC4p+C4pQor4Lit4Lin4Liq4Liy4LiZCivguK3guKfguKvguLLguKMKK+C4reC4p+C4seC4leC4luC4sgor4Lit4Lin4Lix4Lii4Lin4LiwCivguK3guKfguLHguKrguJTguLIKK+C4reC4p+C4suC4iOC4tQor4Lit4Lin4Li04LiI4Li1CivguK3guKfguLTguIrguIrguLIKK+C4reC4p+C4tOC4jeC4jeC4uQor4Lit4Lin4Li04Lij4Li44LiX4LiY4LmMCivguK3guKfguLTguYLguKPguJjguJnguYwKK+C4reC4p+C4teC4iOC4tAor4Lit4LmA4Lin4LiI4Li1CivguK3guYDguKfguYTguJnguKLguKrguLHguJXguKfguYwKK+C4reC5guC4qOC4gQor4Lit4Liq4LiH4LmE4LiC4LiiCivguK3guKrguJnguLUKK+C4reC4quC4oAor4Lit4Liq4Lih4LiB4Liy4LijCivguK3guKrguKHguKHguLLguJXguKMKK+C4reC4quC4o+C4nuC4tOC4qQor4Lit4Liq4Lix4LiH4LiB4Lih4LiX4Lij4Lix4Lie4Lii4LmMCivguK3guKrguLHguIfguILguJXguJjguKPguKPguKEKK+C4reC4quC4seC4h+C4q+C4suC4o+C4tOC4oeC4sAor4Lit4Liq4Lix4LiN4LiN4Li1CivguK3guKrguLHguI3guYHguJTguKvguKfguLIKK+C4reC4quC4seC4leC4luC4nuC4pOC4geC4qeC5jAor4Lit4Liq4Lix4LiV4Lii4LmMCivguK3guKrguLLguJjguKMKK+C4reC4quC4suC4mOC4uAor4Lit4Liq4Liy4Lie4LiV4Li0CivguK3guKrguLQKK+C4reC4quC4tOC4lQor4Lit4Liq4Li14LiV4Lii4Liy4LiZ4Li44Lie4Lii4Lix4LiN4LiK4LiZ4LiwCivguK3guKrguLXguJXguLQKK+C4reC4quC4uAor4Lit4Liq4Li44LiI4Li0CivguK3guKrguLjguI3guIHguLHguKXguJvguYwKK+C4reC4quC4uOC4meC4teC4muC4suC4lQor4Lit4Liq4Li44LigCivguK3guKrguLjguKPguLTguJnguJfguKPguYwKK+C4reC4quC4uOC4o+C4tQor4Lit4Liq4Li44LmA4Lij4LiZ4LiX4Lij4LmMCivguK3guKrguLjguYDguKPguKgKK+C4reC4quC4ueC4owor4Lit4LmA4LiqCivguK3guYDguKrguIHguILguLAKK+C4reC5gOC4quC4guC4sAor4Lit4LmA4Liq4Lin4LiZ4LiwCivguK3guYDguKrguKfguJnguLIKK+C4reC4qwor4Lit4Lir4Lix4LiH4LiB4Liy4LijCivguK3guKvguLQKK+C4reC4q+C4tOC4h+C4quC4sgor4Lit4Lir4Li24LiH4Liq4LiyCivguK3guYDguKvguJXguLjguIHguJfguLTguJDguLQKK+C4reC5guC4q+C4quC4tAor4Lit4LitCivguK3guYnguK0KK+C4reC5i+C4rQor4Lit4Lit4LiBCivguK3guK3guIHguIvguLTguYDguIjguJkKK+C4reC4reC4geC4i+C4tOC5gOC4lOC4iuC4seC4mQor4Lit4Lit4LiB4LmE4LiL4LiU4LmMCivguK3guYjguK3guIcKK+C4reC5i+C4reC4hwor4Lit4LmJ4Lit4LiH4LmB4Lit4LmJ4LiHCivguK3guK3guYDguIvguLLguLAKK+C4reC4reC4lAor4Lit4LmK4Lit4LiU4LmG4LmB4Lit4LmK4LiU4LmGCivguK3guYrguK3guJTguYHguK3guYrguJQKK+C4reC5iOC4reC4mQor4Lit4LmJ4Lit4LiZCivguK3guK3guJnguIvguYwKK+C4reC4reC4meC4i+C4reC4mQor4Lit4LmI4Lit4LiZ4LiL4Lit4LiZCivguK3guYnguK3guJnguYHguK3guYnguJkKK+C4reC4reC4n+C4n+C4tOC4qAor4Lit4Lit4LihCivguK3guYjguK3guKEKK+C4reC5ieC4reC4oQor4Lit4Lit4Lih4LiE4Lij4Lit4LihCivguK3guK3guKHguIrguK3guKEKK+C4reC4reC4oeC4i+C4reC4oQor4Lit4LmJ4Lit4Lih4LmB4Lit4LmJ4LihCivguK3guYjguK3guKIKK+C4reC5ieC4reC4ogor4Lit4LmL4Lit4LiiCivguK3guYnguK3guKLguKrguYnguK3guKIKK+C4reC5ieC4reC4ouC4reC4tOC5iOC4hwor4Lit4Lit4Lij4LmM4LmB4LiB4LiZCivguK3guK3guKPguYzguYDguJTguLTguKPguYzguJ8KK+C4reC4reC4quC5gOC4oeC4teC4ouC4oQor4Lit4LmJ4Lit4LmB4Lit4LmJCivguK3guYrguLAKK+C4reC4sOC4hOC4o+C5ieC4suC4pwor4Lit4Liw4LmA4LiE4Li34LmJ4LitCivguK3guLDguIjguLXguJkKK+C4reC4sOC5geC4iAor4Lit4Liw4LmA4LiL4LiX4Li04Lil4Li14LiZCivguK3guLDguJTguKPguLfguJnguLLguKXguLTguJkKK+C4reC4sOC4lOC4seC4gQor4Lit4Liw4LiU4Li44LiHCivguK3guLDguJXguK3guKEKK+C4reC4sOC4meC4sAor4Lit4Liw4LiZ4Lix4LmJ4LiZCivguK3guLDguJnguLXguYkKK+C4reC4sOC4oeC4teC4muC4sgor4Lit4Liw4LmA4Lih4Lij4Li04LmA4LiL4Li14Lii4LihCivguK3guLDguKPguYnguLLguK3guKPguYjguLLguKEKK+C4reC4sOC5hOC4owor4Lit4Liw4Lil4Lix4LiH4LiB4Liy4LijCivguK3guLDguKXguLjguYjguKHguK3guKXguYjguKfguKIKK+C4reC4sOC4peC4uOC5ieC4oeC4reC4peC5iOC4p+C4ogor4Lit4Liw4Lil4Li54Lih4Li04LmA4LiZ4Li14Lii4LihCivguK3guLDguKvguKEKK+C4reC4sOC5hOC4q+C4peC5iAor4Lit4Liw4Lit4Li34LmJ4LitCivguK3guLDguYDguK3guLfguYnguK3guKIKK+C4reC4seC4gQor4Lit4Lix4LmJ4LiBCivguK3guLHguYrguIEKK+C4reC4seC5ieC4geC5hgor4Lit4Lix4LmK4LiB4LmGCivguK3guLHguIHguIHguLAKK+C4reC4seC4geC5guC4geC4mOC4sAor4Lit4Lix4LiB4LmC4LiB4Liq4Lin4Lix4LiV4LiW4Li4CivguK3guLHguIHguIIKK+C4reC4seC4geC4guC4o+C4sAor4Lit4Lix4LiB4LiC4Lij4Liy4LiZ4Li44LiB4Lij4Lih4Lig4Li54Lih4Li04Lio4Liy4Liq4LiV4Lij4LmMCivguK3guLHguIHguILguLLguJkKK+C4reC4seC4geC5guC4ggor4Lit4Lix4LiB4LmC4LiC4Lig4Li04LiT4Li1CivguK3guLHguIHguYLguILguYDguKDguJPguLUKK+C4reC4seC4geC4qeC4owor4Lit4Lix4LiB4Lip4LiwCivguK3guLHguIHguYDguKnguLLguKvguLTguJPguLUKK+C4reC4seC4geC5gOC4quC4mgor4Lit4Lix4LiB4Lit4LmI4Lin4LiZCivguK3guLHguITguITguLAKK+C4reC4seC4hOC4hOC4tAor4Lit4Lix4LiE4LiE4Li1CivguK3guLHguITguJnguLQKK+C4reC4seC4hOC4meC4tQor4Lit4Lix4LiE4LiZ4Li14LiB4Lij4Li14LiR4LiyCivguK3guLHguIcKK+C4reC4seC4h+C4geC5jAor4Lit4Lix4LiH4LiB4LiZ4LiwCivguK3guLHguIfguIHguKTguKkKK+C4reC4seC4h+C4geC4p+C4lAor4Lit4Lix4LiH4LiB4Liw4Lil4Li44LiHCivguK3guLHguIfguIHguLIKK+C4reC4seC4h+C4geC4suC4mgor4Lit4Lix4LiH4LiB4Li44LijCivguK3guLHguIfguIHguLjguKgKK+C4reC4seC4h+C4geC4ueC4owor4Lit4Lix4LiH4LiE4LiT4LiwCivguK3guLHguIfguITguJPguLIKK+C4reC4seC4h+C4hOC4sAor4Lit4Lix4LiH4LiE4Liy4LijCivguK3guLHguIfguITguLLguKoKK+C4reC4seC4h+C4hOC4teC4o+C4qgor4Lit4Lix4LiH4LiE4Li44LiQCivguK3guLHguIfguIbguLLguJUKK+C4reC4seC5ieC4h+C5gOC4m+C4sgor4Lit4Lix4LmJ4LiH4Lih4LmJ4LitCivguK3guLHguYnguIfguKLguLXguYgKK+C4reC4seC5ieC4h+C5guC4peC5iAor4Lit4Lix4LiH4Lio4LiwCivguK3guLHguIfguKjguLgKK+C4reC4seC4h+C4qOC4uOC4gQor4Lit4Lix4LiH4Liq4LiV4Lij4Lit4LihCivguK3guLHguIfguKrguJnguLIKK+C4reC4seC4h+C4quC4sAor4Lit4Lix4LiI4LiB4Lil4Lix4LiaCivguK3guLHguIjguIjguLHguJnguJXguYwKK+C4reC4seC4iOC4iOC4seC4ogor4Lit4Lix4LiI4LiI4Li0CivguK3guLHguIjguIjguLjguJUKK+C4reC4seC4iOC5gOC4iOC4geC4sAor4Lit4Lix4LiI4LiJ4Lij4LiyCivguK3guLHguIjguInguKPguLTguKLguLAKK+C4reC4seC4iOC4meC4sgor4Lit4Lix4LiK4LiM4LiyCivguK3guLHguIrguIzguLLguIjguLLguKMKK+C4reC4seC4iuC4jOC4suC4qOC4seC4ogor4Lit4Lix4LiK4LiM4Liy4Liq4Lix4LiiCivguK3guLHguIrguJrguLLguKUKK+C4reC4seC4jeC4guC4ouC4oQor4Lit4Lix4LiN4LiK4LiZ4LiwCivguK3guLHguI3guIrguKXguLUKK+C4reC4seC4jeC4iuC4seC4mQor4Lit4Lix4LiN4LmA4LiK4Li04LiNCivguK3guLHguI3guI3guLAKK+C4reC4seC4jeC4m+C4o+C4sOC4geC4suC4qAor4Lit4Lix4LiN4Lih4Lix4LiN4LiN4LiwCivguK3guLHguI3guKPguLnguJsKK+C4reC4seC4jwor4Lit4Lix4LiP4LiQCivguK3guLHguI/guJnguLIKK+C4reC4seC4kAor4Lit4Lix4LiQ4Lih4LiwCivguK3guLHguJDguKzguKoKK+C4reC4seC4kOC4tAor4Lit4Lix4LiT4LiR4LiwCivguK3guLHguJPguJPguJ4KK+C4reC4seC4lAor4Lit4Lix4LiU4LmB4LiICivguK3guLHguJXguITguLHguJQKK+C4reC4seC4leC4iOC4o+C4tOC4ouC4sgor4Lit4Lix4LiV4LiV4LiwCivguK3guLHguJXguJXguLIKK+C4reC4seC4leC4luC5jAor4Lit4Lix4LiV4LiW4LiwCivguK3guLHguJXguYLguJnguKHguLHguJXguLQKK+C4reC4seC4leC4o+C4iuC4sAor4Lit4Lix4LiV4Lij4LiyCivguK3guLHguJXguKXguLHguJQKK+C4reC4seC4l+C4l+C4sgor4Lit4Lix4LiX4LiY4LmMCivguK3guLHguJfguJjguLIKK+C4reC4seC4l+C4mOC4suC4mQor4Lit4Lix4LiY4Lii4Liy4LiV4Lih4Lin4Li04LiX4Lii4LiyCivguK3guLHguJjguKLguLLguKIKK+C4reC4seC4mOC4ouC4suC4qOC4seC4ogor4Lit4Lix4LiZCivguK3guLHguYnguJkKK+C4reC4seC5i+C4mQor4Lit4Lix4LiZ4LiU4LiBCivguK3guLHguJnguJTguKMKK+C4reC4seC4meC4lOC4seC4mgor4Lit4Lix4LiZ4LiU4LmK4Liy4LiBCivguK3guLHguJnguYLguJTguYrguIEKK+C4reC4seC4meC4leC4owor4Lit4Lix4LiZ4LiV4Lij4LiY4Liy4LiZCivguK3guLHguJnguJXguKPguLIKK+C4reC4seC4meC4leC4o+C4suC4ogor4Lit4Lix4LiZ4LiV4Li04LiBCivguK3guLHguJnguJXguLTguKHguLAKK+C4reC4seC4meC5gOC4lQor4Lit4Lix4LiZ4LmC4LiVCivguK3guLHguJnguYHguJbguYnguIcKK+C4reC4seC4meC4l+C4uAor4Lit4Lix4LiZ4LmC4LiX4LilCivguK3guLHguJnguJnguLAKK+C4reC4seC4meC4ouC4sAor4Lit4Lix4LiZ4LmC4Lii4LiZ4Lii4LiwCivguK3guLHguJnguKfguLHguKIKK+C4reC4seC4meC5gOC4p+C4qgor4Lit4Lix4LiaCivguK3guLHguJrguJvguLLguIcKK+C4reC4seC4m+C4geC4sAor4Lit4Lix4Lib4LiB4Liy4LijCivguK3guLHguJvguI/guLTguIbguLAKK+C4reC4seC4m+C4j+C4tOC4oOC4suC4hAor4Lit4Lix4Lib4Lib4LiwCivguK3guLHguJvguKDguLLguITguKLguYwKK+C4reC4seC4m+C4oeC4h+C4hOC4pQor4Lit4Lix4Lib4Lii4LioCivguK3guLHguJvguKPguLDguKHguLLguJMKK+C4reC4seC4m+C4o+C4sOC4oeC4suC4lwor4Lit4Lix4Lib4Lij4Liw4LmE4Lih4LiiCivguK3guLHguJvguKPguLLguIrguLHguKIKK+C4reC4seC4m+C4o+C4teC4ouC5jAor4Lit4Lix4Lib4Lil4Lix4LiB4Lip4LiT4LmMCivguK3guLHguJvguKrguKMKK+C4reC4seC4nuC4nuC4uOC4lwor4Lit4Lix4Lie4LmC4Lie4Lir4Liy4Lij4Li04LiBCivguK3guLHguJ7guKDguLHguJnguJTguKMKK+C4reC4seC4nuC4oOC4suC4mQor4Lit4Lix4Lie4Lig4Liy4LiqCivguK3guLHguKEKK+C4reC4seC4oeC4nuC4owor4Lit4Lix4Lih4Lie4LiyCivguK3guLHguKHguJ7guLTguKUKK+C4reC4seC4oeC4nuC4uAor4Lit4Lix4Lii4LiB4LiwCivguK3guLHguKLguIHguLIKK+C4reC4seC4ouC4geC4suC4owor4Lit4Lix4Lii4LiB4Li1CivguK3guLHguKLguKLguLAKK+C4reC4seC4ouC4ouC4suC4oOC4o+C4tOC4ouC4sgor4Lit4Lix4Lii4Lii4Li04LiB4LiyCivguK3guLHguKXguJXguKPguLLguYTguKfguYLguK3guYDguKXguJUKK+C4reC4seC5iOC4pwor4Lit4Lix4LmK4LinCivguK3guLHguKjguIjguKPguKPguKLguYwKK+C4reC4seC4qOC5gOC4iOC4o+C4teC4ouC5jAor4Lit4Lix4Lip4LiO4Lih4LiwCivguK3guLHguKrguJTguIcKK+C4reC4seC4quC4lOC4oQor4Lit4Lix4Liq4LiZ4Li1CivguK3guLHguKrguKHguLTguKHguLLguJnguLAKK+C4reC4seC4quC4quC4sAor4Lit4Lix4Liq4Liq4Lix4LiV4LiW4Lie4Lik4LiB4Lip4LmMCivguK3guLHguKrguKrguLgKK+C4reC4sgor4Lit4LmI4LiyCivguK3guYnguLIKK+C4reC4suC4geC4hwor4Lit4Liy4LiB4LijCivguK3guLLguIHguLHguIfguILguLIKK+C4reC4suC4geC4seC4mwor4Lit4Liy4LiB4Lix4Lih4Lib4LiZ4LiwCivguK3guLLguIHguLHguKHguJvguLAKK+C4reC4suC4geC4suC4owor4Lit4Liy4LiB4Liy4LioCivguK3guLLguIHguLTguI3guIjguLHguI3guI3guLAKK+C4reC4suC4geC4ueC4pQor4Lit4Liy4LmA4LiB4Li14Lii4Lij4LiT4LmMCivguK3guLLguILguKLguLLguJUKK+C4reC4suC4guC4ouC4suC4mQor4Lit4Liy4LiE4LmA4LiZ4Lii4LmMCivguK3guLLguITguKEKK+C4reC4suC4hOC4o+C4q+C4suC4ouC4k+C4tQor4Lit4Liy4LiE4Lix4LiZ4LiV4Li44LiB4LiwCivguK3guLLguITguLLguKMKK+C4reC4suC4huC4suC4lQor4Lit4Liy4LiG4Liy4LiV4LiZ4LiwCivguK3guYjguLLguIcKK+C4reC5ieC4suC4hwor4Lit4Liy4LiH4LiC4LiZ4Liy4LiHCivguK3guYnguLLguIfguKfguYnguLLguIcKK+C4reC4suC4iAor4Lit4Liy4LiI4LihCivguK3guLLguIjguKHguJkKK+C4reC4suC4iOC4suC4lAor4Lit4Liy4LiI4Liy4LijCivguK3guLLguIjguLLguKPguKLguYwKK+C4reC4suC4iOC4tOC4kwor4Lit4Liy4LmA4LiI4Li14Lii4LiZCivguK3guLLguIrguI3guLHguJvguJXguLQKK+C4reC4suC4iuC4jeC4seC4m+C4leC4tOC5jAor4Lit4Liy4LiK4LiN4LiyCivguK3guLLguIrguKfguLAKK+C4reC4suC4iuC4sgor4Lit4Liy4LiK4Liy4LiZCivguK3guLLguIrguLLguJnguLQKK+C4reC4suC4iuC4suC5hOC4meC4ogor4Lit4Liy4LiK4Li14LieCivguK3guLLguIrguLXguKfguIEKK+C4reC4suC4iuC4teC4p+C4meC4sAor4Lit4Liy4LiK4Li14Lin4LiwCivguK3guLLguI3guLIKK+C4reC4suC4j+C4suC4leC4sgor4Lit4Liy4LiT4Lix4LiV4Li0CivguK3guLLguJPguLIKK+C4reC4suC4k+C4suC4m+C4gQor4Lit4Liy4LiT4Liy4Lib4LiZCivguK3guLLguJQKK+C4reC4suC4lOC5hgor4Lit4Liy4LiU4Li44Lil4Lii4LmMCivguK3guLLguJTguLnguKMKK+C4reC4suC4lOC4ueC4peC4ouC5jAor4Lit4Liy4LmA4LiU4LmK4LiwCivguK3guLLguJXguKHguLHguJkKK+C4reC4suC4leC4uOC4owor4Lit4Liy4LiW4Lij4Lij4Lie4LmMCivguK3guLLguJbguKPguKPguJ7guJPguYwKK+C4reC4suC4luC4o+C4o+C4nuC4k+C4sAor4Lit4Liy4LiX4Lih4Liy4LiPCivguK3guLLguJfguKMKK+C4reC4suC4l+C4suC4leC4sgor4Lit4Liy4LiX4Liy4LiZCivguK3guLLguJfguLTguIHguKfguLUKK+C4reC4suC4l+C4tOC4leC4ouC5jAor4Lit4Liy4LiX4Li14LiZ4LieCivguK3guLLguJfguLXguJnguKcKK+C4reC4suC4l+C4tuC4gQor4Lit4Liy4LmA4LiX4LioCivguK3guLLguJjguKPguKPguKEKK+C4reC4suC4mOC4o+C4o+C4oeC5jAor4Lit4Liy4LiY4Lij4Lij4Lih4Li04LiBCivguK3guLLguJjguKPguKPguKHguLbguIEKK+C4reC4suC4mOC4suC4mQor4Lit4Liy4LiY4Liy4LijCivguK3guLLguJkKK+C4reC5iOC4suC4mQor4Lit4Liy4LiZ4LiBCivguK3guLLguJnguJkKK+C4reC4suC4meC4meC4l+C5jAor4Lit4Liy4LiZ4LiwCivguK3guLLguJnguLHguJnguJfguYwKK+C4reC4suC4meC4seC4meC4l+C4meC4sAor4Lit4Liy4LiZ4Lix4LihCivguK3guLLguJnguLMKK+C4reC4suC4meC4tOC4gQor4Lit4Liy4LiZ4Li04Liq4LiH4LiG4LmMCivguK3guLLguJnguLjguKDguLLguJ4KK+C4reC4suC4meC4uOC4oOC4suC4p+C4sAor4Lit4Liy4LiaCivguK3guLLguJrguLHguIcKK+C4reC4suC4muC4seC4leC4tAor4Lit4Liy4Lia4Lix4LiZCivguK3guLLguJrguLkKK+C4reC4suC4m+C4k+C4sAor4Lit4Liy4Lib4LiwCivguK3guLLguJvguLLguJnguLAKK+C4reC4suC5guC4mwor4Lit4Liy4Lie4Lix4LiUCivguK3guLLguJ7guLHguJfguJjguYwKK+C4reC4suC4nuC4seC4meC4mOC5jAor4Lit4Liy4Lie4Lix4LiZ4LiY4LiZ4LiwCivguK3guLLguJ7guLLguJgKK+C4reC4suC4nuC4tOC4pQor4Lit4Liy4LmA4Lie4LioCivguK3guLLguKDguKPguJPguYwKK+C4reC4suC4oOC4seC4ngor4Lit4Liy4Lig4Lix4Liq4Lij4LiwCivguK3guLLguKDguLIKK+C4reC4suC4oOC4suC4qgor4Lit4Liy4LmC4Lig4LiECivguK3guLLguKHguKXguIEKK+C4reC4suC4oeC4seC4ogor4Lit4Liy4Lih4LiyCivguK3guLLguKHguLTguKkKK+C4reC4suC4oeC4tOC4qgor4Lit4Liy4LiiCivguK3guYnguLLguKIKK+C4reC4suC4ouC4lQor4Lit4Liy4Lii4LiV4LiZ4LiwCivguK3guLLguKLguJkKK+C4reC4suC4ouC4seC4lAor4Lit4Liy4Lii4Lix4LiVCivguK3guLLguKLguLHguJkKK+C4reC4suC4ouC4suC4iOC4meC4sAor4Lit4Liy4Lii4Liy4LiZCivguK3guLLguKLguLgKK+C4reC4suC4ouC4uOC4geC4leC4geC4sAor4Lit4Liy4Lii4Li44LiV4LiB4LiwCivguK3guLLguKLguLjguJgKK+C4reC4suC4ouC4uOC4qQor4Lit4Liy4Lij4LmM4LiB4Lit4LiZCivguK3guLLguKPguJTguLUKK+C4reC4suC4o+C5jOC4lQor4Lit4Liy4Lij4LiV4Li0CivguK3guLLguKPguJfguKPguLIKK+C4reC4suC4o+C4muC4tOC4hAor4Lit4Liy4Lij4LmM4LihCivguK3guLLguKPguKHguJPguYwKK+C4reC4suC4o+C4ouC4sAor4Lit4Liy4Lij4LiwCivguK3guLLguKPguLHguIHguILguLIKK+C4reC4suC4o+C4seC4geC4qeC5jAor4Lit4Liy4Lij4Lix4LiNCivguK3guLLguKPguLHguI3guI3guLTguIEKK+C4reC4suC4o+C4seC4k+C4ouC5jAor4Lit4Liy4Lij4Lix4LiT4Lii4LiB4LiwCivguK3guLLguKPguLHguJXguLQKK+C4reC4suC4o+C4seC4oeC4oOC5jAor4Lit4Liy4Lij4Liy4LiY4LiZ4LmMCivguK3guLLguKPguLLguJjguJnguLIKK+C4reC4suC4o+C4suC4oQor4Lit4Liy4Lij4Li1CivguK3guLLguKPguLjguKEKK+C4reC4suC4peC4m+C4meC5jAor4Lit4Liy4Lil4Lib4LiZ4LiwCivguK3guLLguKXguLDguKfguLLguJQKK+C4reC4suC4peC4seC4geC4qeC4k+C5jAor4Lit4Liy4Lil4Lix4LiiCivguK3guLLguKXguLHguKcKK+C4reC4suC4peC4tAor4Lit4Liy4Lil4Li1CivguK3guLLguYLguKXguIEKK+C4reC4suC4pwor4Lit4LmI4Liy4LinCivguK3guYnguLLguKcKK+C4reC4suC4p+C4o+C4k+C5jAor4Lit4Liy4Lin4Lix4LiK4LiZ4Liy4LiB4Liy4LijCivguK3guLLguKfguLLguKoKK+C4reC4suC4p+C4suC4q+C4sAor4Lit4Liy4Lin4Li04LilCivguK3guLLguKfguLjguJUKK+C4reC4suC4p+C4uOC4mAor4Lit4Liy4Lin4Li44LmC4LiqCivguK3guLLguYDguKfguIQKK+C4reC4suC5gOC4p+C4qAor4Lit4Liy4Lio4Lij4LihCivguK3guLLguKjguKPguKHguJrguJcKK+C4reC4suC4qOC5gOC4peC4qeC4sgor4Lit4Liy4Lio4Lix4LiiCivguK3guLLguKjguLgKK+C4reC4suC5gOC4qOC4teC4ouC4owor4Lit4Liy4Lip4Liy4LiSCivguK3guLLguKrguJnguLAKK+C4reC4suC4quC4oOC4tOC4p+C4suC4iOC4sgor4Lit4Liy4Liq4Lii4Liy4LiZ4Li44Liq4Lix4LiiCivguK3guLLguKrguKfguIHguKnguLHguKIKK+C4reC4suC4quC4p+C4geC4tOC5gOC4peC4qgor4Lit4Liy4Liq4Lix4LiNCivguK3guLLguKrguLHguJXguKLguYwKK+C4reC4suC4quC4seC4meC4meC4sAor4Lit4Liy4Liq4LiyCivguK3guLLguKrguLLguKzguKvguYwKK+C4reC4suC4quC4tOC4jeC4iOC5jAor4Lit4Liy4Liq4Li04LiZCivguK3guLLguKrguLnguKMKK+C4reC4suC5gOC4quC4teC5iOC4ogor4Lit4Liy4LmB4Liq4LiwCivguK3guLLguKvguJUKK+C4reC4suC4q+C4leC4tQor4Lit4Liy4Lir4LiZ4Li1CivguK3guLLguKvguJnguLkKK+C4reC4suC4q+C4oQor4Lit4Liy4Lir4Lii4Lix4LiHCivguK3guLLguKvguKLguLHguJkKK+C4reC4suC4q+C4owor4Lit4Liy4Lir4Lij4Lix4LiU4LiB4Lix4LiU4LiV4Li04LiB4LiyCivguK3guLLguKvguKPguLHguJoKK+C4reC4suC4q+C4peC4seC4geC4reC4suC5gOC4q+C4peC4t+C5iOC4rQor4Lit4Liy4Lir4Liy4LijCivguK3guLLguKvguLjguJTguLUKK+C4reC4suC4rOC4q+C4gQor4Lit4Liy4Lis4Liy4Lir4LiZ4LiwCivguK3guLMKK+C4reC5iOC4swor4Lit4Liz4LmB4LiU4LiHCivguK3guLPguJnguJQKK+C4reC4s+C4meC4meC4leC5jAor4Lit4Liz4LiZ4Lij4Lij4LiGCivguK3guLPguJnguKfguKIKK+C4reC4s+C4meC4suC4iAor4Lit4Liz4LiZ4Liy4LiWCivguK3guLPguJnguLTguJAKK+C4reC4s+C4meC4tOC4qeC4kOC5jAor4Lit4Liz4Lib4Lil4Lix4LiHCivguK3guLPguJ7guJkKK+C4reC4s+C4nuC4sOC4meC4swor4Lit4Liz4Lie4Lix4LiZCivguK3guLPguYTguJ4KK+C4reC4s+C5gOC4oOC4rQor4Lit4Liz4LmA4Lig4Lit4LmD4LiICivguK3guLPguKHguKMKK+C4reC4s+C4oeC4pOC4hOC5guC4iuC4hAor4Lit4Liz4Lih4Lik4LiVCivguK3guLPguKHguKvguLTguJUKK+C4reC4s+C4oeC4suC4leC4ouC5jAor4Lit4Liz4Lii4Lin4LiZCivguK3guLPguKPguLjguIcKK+C4reC4s+C4peC4sgor4Lit4Liz4Lit4Lin4LihCivguK3guYnguLPguK3guLbguYnguIcKK+C4reC4tOC4gQor4Lit4Li04LiHCivguK3guLTguIfguITguYwKK+C4reC4tOC4h+C4reC4owor4Lit4Li04LiI4LiJ4LiyCivguK3guLTguInguLHguJkKK+C4reC4tOC4iuC4ouC4sgor4Lit4Li04LiQCivguK3guLTguJMKK+C4reC4tOC4lAor4Lit4Li04LiV4LiW4Li1CivguK3guLTguJXguYDguJfguKPguLXguKLguKEKK+C4reC4tOC4leC5gOC4l+C4reC4o+C5jOC5gOC4muC4teC4ouC4oQor4Lit4Li04LiV4Li04Lir4Liy4LiqCivguK3guLTguJfguJjguLQKK+C4reC4tOC4mOC5guC4peC4gQor4Lit4Li04LiZCivguK3guLTguJnguIvguLnguKXguLTguJkKK+C4reC4tOC4meC5gOC4lOC4teC4ogor4Lit4Li04LiZ4LmA4LiU4Li14Lii4LiZ4LmB4LiU4LiHCivguK3guLTguJnguYDguJTguLXguKLguKEKK+C4reC4tOC4meC4l+C5jAor4Lit4Li04LiZ4LiX4LiC4Li14LilCivguK3guLTguJnguJfguJnguLTguKUKK+C4reC4tOC4meC4l+C4meC4tOC4peC4meC5ieC4swor4Lit4Li04LiZ4LiX4Lic4Lil4Lix4LihCivguK3guLTguJnguJfguKPguYwKK+C4reC4tOC4meC4l+C4o+C4tQor4Lit4Li04LiZ4LiX4Lij4Li14Lii4LmMCivguK3guLTguJnguJfguLXguKfguKMKK+C4reC4tOC4meC4l+C4uAor4Lit4Li04LiZ4LiY4LiZ4LmMCivguK3guLTguJnguJ/guKPguLLguYDguKPguJQKK+C4reC4tOC4meC5geC4peC4sOC4q+C4ouC4seC4hwor4Lit4Li04LiZ4Lin4Lit4Lii4LiL4LmMCivguK3guLTguYjguKEKK+C4reC4tOC4oeC4seC4peC4iuC4seC4mQor4Lit4Li04Lij4Li04LmA4LiU4Li14Lii4LihCivguK3guLTguKPguLTguKLguLIKK+C4reC4tOC4o+C4uOC4nuC5gOC4nuC4lwor4Lit4Li04Lil4Li5CivguK3guLTguYDguKXguYfguIHguJXguKPguK3guJkKK+C4reC4tOC5gOC4peC5h+C4geC4l+C4o+C4reC4meC4tOC4geC4quC5jAor4Lit4Li04LmA4Lil4LmH4LiB4LmC4LiX4LiZCivguK3guLTguKgKK+C4reC4tOC4qOC4owor4Lit4Li04Lio4Lin4LijCivguK3guLTguKnguI/guYwKK+C4reC4tOC4qeC4j+C4tQor4Lit4Li04LiqCivguK3guLTguKrguJXguKPguLUKK+C4reC4tOC4quC4o+C4sAor4Lit4Li04Liq4Lij4Li04Lii4LiwCivguK3guLTguKrguKrguLIKK+C4reC4tOC4quC4seC4leC4o+C4tQor4Lit4Li04Liq4Li0CivguK3guLTguKrguLUKK+C4reC4tOC4q+C4oeC5iOC4suC4oQor4Lit4Li1CivguK3guLXguYgKK+C4reC4teC5iQor4Lit4Li14LmKCivguK3guLXguYsKK+C4reC4teC4gQor4Lit4Li14LiB4LmJ4LitCivguK3guLXguIHguYvguK3guKIKK+C4reC4teC4geC4sgor4Lit4Li14LiB4LmL4LiyCivguK3guLXguYDguIHguYnguIcKK+C4reC4teC5gOC4geC4o+C5h+C4hwor4Lit4Li14LmA4LiB4LmJ4Lit4Li14LiB4Lix4LiHCivguK3guLXguYHguIEKK+C4reC4teC5geC4geC5iAor4Lit4Li14LmB4LiB4LmJCivguK3guLXguYLguIHguYnguIcKK+C4reC4teC5guC4geC5iuC4sAor4Lit4Li14LiE4Lin4LmI4Liz4Lit4Li14Lir4LiH4Liy4LiiCivguK3guLXguIjguLnguYkKK+C4reC4teC4ieC4seC4mQor4Lit4Li14LiJ4Li44Lii4Lit4Li14LmB4LiJ4LiBCivguK3guLXguIrguLjguIEKK+C4reC4teC5iuC4lAor4Lit4Li14LiU4Lit4LiBCivguK3guLXguJTguLPguK3guLXguYHguJTguIcKK+C4reC4teC4leC4seC4pwor4Lit4Li14LiV4Liy4LilCivguK3guLXguYDguJXguYnguK0KK+C4reC4teC5guC4leC5iQor4Lit4Li14LiW4LmI4Liy4LiHCivguK3guLXguJfguLjguIEKK+C4reC4teC4l+C4uOC4mgor4Lit4Li14LmA4LiX4Lit4Lij4LmMCivguK3guLXguJnguLjguIfguJXguLjguIfguJnguLHguIcKK+C4reC4teC4meC4ueC4mQor4Lit4Li14LmC4LiZCivguK3guLXguYLguJnguIfguYLguJXguIfguYDguJnguIcKK+C4reC4teC4muC4tuC5ieC4hwor4Lit4Li14Lib4Li44LiUCivguK3guLXguYDguJvguYfguJQKK+C4reC4teC5gOC4m+C5ieC4sgor4Lit4Li14LmB4Lib4LiwCivguK3guLXguYLguJvguIcKK+C4reC4teC5gOC4nuC4sgor4Lit4Li14Lih4Li5CivguK3guLXguKPguKEKK+C4reC4teC4o+C4uOC5ieC4hwor4Lit4Li14LmB4Lij4LiU4LmB4LiI4LmK4LiU4LmB4LiI4LmLCivguK3guLXguYHguKPguYnguYHguJfguYnguYHguJXguYgKK+C4reC4teC4peC4reC4hwor4Lit4Li14Lil4LmI4Lit4Lii4Lib4LmI4Lit4Lii4LmB4LitCivguK3guLXguKXguLjguYnguKEKK+C4reC4teC4peC4uOC5iOC4ouC4ieC4uOC4ouC5geC4ieC4gQor4Lit4Li14LmA4Lil4Li04LmJ4LiHCivguK3guLXguYHguKXguYjguIcKK+C4reC4teC5guC4peC4hwor4Lit4Li14Lio4Lin4LijCivguK3guLXguKoKK+C4reC4teC4quC5gOC4leC4reC4o+C5jAor4Lit4Li14Liq4LiyCivguK3guLXguKrguLLguJkKK+C4reC4teC4quC4uOC4geC4reC4teC5g+C4qgor4Lit4Li14Lir4LiZ4Lit4LiH4Lit4Li14LmB4Lir4LiZ4LiHCivguK3guLXguKvguKPguK3guJoKK+C4reC4teC4q+C4peC4seC4geC4reC4teC5gOC4q+C4peC4t+C5iOC4rQor4Lit4Li14Lir4Lil4Lix4LiU4LiW4Lix4LiU4LiX4LiyCivguK3guLXguKvguKXguLUKK+C4reC4teC4q+C4peC4uOC4geC4guC4peC4uOC4geC4guC4peC4seC4gQor4Lit4Li14Lir4Lil4Li44LiB4LiC4Lil4Li44LiB4LiC4Lil4Li44LmI4LiiCivguK3guLXguKvguKXguLjguKLguInguLjguKLguYHguInguIEKK+C4reC4teC5gOC4q+C5h+C4mQor4Lit4Li14LmA4Lir4LiZ4LmH4LiaCivguK3guLXguYDguKvguJnguLXguKLguKcKK+C4reC4teC5gOC4q+C4ouC4teC5iOC4ouC4pwor4Lit4Li14LmA4Lir4Lil4Liw4LmA4LiC4Lil4Liw4LiC4Lil4LiwCivguK3guLXguYDguKvguKXguLDguYDguILguLDguILguLAKK+C4reC4teC5guC4q+C4meC5iOC4reC4teC5gOC4q+C4meC5iAor4Lit4Li14LmC4Lir4Lil4LiB4LmC4LiC4Lil4LiB4LmA4LiC4Lil4LiBCivguK3guLXguYHguK3guYjguJkKK+C4reC4tgor4Lit4Li24LiBCivguK3guLbguYrguIEKK+C4reC4tuC4geC4l+C4tuC4gQor4Lit4Li24LiB4Lit4Lix4LiBCivguK3guLbguIcKK+C4reC4tuC5iOC4hwor4Lit4Li24LmJ4LiHCivguK3guLbguJQKK+C4reC4tuC4lOC4leC4sOC4m+C4t+C4rQor4Lit4Li24LmJ4LiU4LiX4Li24LmI4LiUCivguK3guLbguJkKK+C4reC4t+C4lAor4Lit4Li34LmI4LiZCivguK3guLfguYnguJkKK+C4reC4t+C4rQor4Lit4Li34LmJ4LitCivguK3guLgKK+C4reC4uOC4gQor4Lit4Li44LiB4LiB4LiyCivguK3guLjguIHguKTguKnguI/guYwKK+C4reC4uOC4geC4peC4sgor4Lit4Li44LiECivguK3guLjguITguKMKK+C4reC4uOC4hOC4q+C4meC4tOC4oeC4tOC4lQor4Lit4Li44LiE4Lir4LiwCivguK3guLjguYLguIbguKkKK+C4reC4uOC5ieC4hwor4Lit4Li44LiICivguK3guLjguIjguIjguLLguKPguLAKK+C4reC4uOC4iOC4ieC4uAor4Lit4Li44LiI4LmA4LiJ4LiXCivguK3guLjguIjguLLguJQKK+C4reC4uOC4iuC4uAor4Lit4Li44LiN4LiJ4Liy4LiI4Lij4Li04Lii4LiyCivguK3guLjguI/guJDguLLguIHguLLguKMKK+C4reC4uOC4k+C4q+C4sAor4Lit4Li44LiT4Lir4Li04LiqCivguK3guLjguJPguLIKK+C4reC4uOC4lAor4Lit4Li44LiU4LmA4LiV4LiyCivguK3guLjguJTguKEKK+C4reC4uOC4lOC4owor4Lit4Li44LiU4Lir4LiZ4Li44LiZCivguK3guLjguJTguLLguIHguLHguJkKK+C4reC4uOC4leC4lOC4oQor4Lit4Li44LiV4LiU4LijCivguK3guLjguJXguJXguKHguLAKK+C4reC4uOC4leC4muC4pQor4Lit4Li44LiV4Lie4Li04LiUCivguK3guLjguJXguKPguLIKK+C4reC4uOC4leC4o+C4tAor4Lit4Li44LiV4Lil4Li44LiUCivguK3guLjguJXguKrguYjguLLguKvguYwKK+C4reC4uOC4leC4quC4suC4q+C4sAor4Lit4Li44LiV4Li4CivguK3guLjguJfguIEKK+C4reC4uOC4l+C4l+C4suC4oQor4Lit4Li44LiX4LiY4Lij4LiT4LmMCivguK3guLjguJfguJjguLHguIgKK+C4reC4uOC4l+C4ouC4suC4mQor4Lit4Li44LiX4LijCivguK3guLjguJfguKPguLTguKLguLAKK+C4reC4uOC4l+C4peC4uOC4oQor4Lit4Li44LiX4Lix4LiiCivguK3guLjguJfguLLguJkKK+C4reC4uOC4l+C4suC4owor4Lit4Li44LiX4Liy4Lir4Lij4LiT4LmMCivguK3guLjguJfguLTguKgKK+C4reC4uOC4l+C4uOC4oeC4nuC4owor4Lit4Li44LmA4LiX4LioCivguK3guLjguYDguJfguKrguLTguIHguYDguIjguJTguLXguKLguYwKK+C4reC4uOC4mOC4seC4iAor4Lit4Li44LmI4LiZCivguK3guLjguJnguLLguIHguLHguJkKK+C4reC4uOC4mgor4Lit4Li44Lia4LilCivguK3guLjguJrguLAKK+C4reC4uOC4muC5iuC4sAor4Lit4Li44Lia4Lix4LiV4Li0CivguK3guLjguJrguLLguJcKK+C4reC4uOC4muC4suC4l+C4p+C5jAor4Lit4Li44Lia4Liy4LiiCivguK3guLjguJrguLLguKrguIEKK+C4reC4uOC4muC4suC4quC4tOC4geC4sgor4Lit4Li44LmA4Lia4LiB4LiC4LiyCivguK3guLjguYLguJrguKrguJYKK+C4reC4uOC5guC4muC4quC4luC4q+C4seC4leC4luC4tQor4Lit4Li44LibCivguK3guLjguJvguIHguKPguJPguYwKK+C4reC4uOC4m+C4geC4o+C4oQor4Lit4Li44Lib4LiB4Liy4LijCivguK3guLjguJvguIHguLLguKPguLAKK+C4reC4uOC4m+C4geC4suC4qOC4quC4suC4owor4Lit4Li44Lib4LiB4Li04LiT4LiT4LiwCivguK3guLjguJvguIHguLTguYDguKXguKoKK+C4reC4uOC4m+C4huC4suC4leC4geC4geC4o+C4o+C4oQor4Lit4Li44Lib4LiI4Liy4LijCivguK3guLjguJvguJbguLHguKHguKDguYwKK+C4reC4uOC4m+C4luC4seC4oeC4oOC4gQor4Lit4Li44Lib4LiX4LihCivguK3guLjguJvguJfguLnguJUKK+C4reC4uOC4m+C5gOC4l+C4qAor4Lit4Li44Lib4LmA4LiX4LmI4Lir4LmMCivguK3guLjguJvguJjguLQKK+C4reC4uOC4m+C4mOC4tOC4p+C4tOC5gOC4p+C4gQor4Lit4Li44Lib4LiZ4Lix4LiiCivguK3guLjguJvguJnguLLguKLguIEKK+C4reC4uOC4m+C4meC4suC4ouC4mQor4Lit4Li44Lib4LiZ4Li04LiB4LiC4Li04LiVCivguK3guLjguJvguJnguLTguIHguKnguLTguJUKK+C4reC4uOC4m+C4meC4tOC4qeC4seC4lwor4Lit4Li44Lib4LiZ4Li04Liq4Lix4LiiCivguK3guLjguJvguJrguKUKK+C4reC4uOC4m+C4muC4seC4leC4tAor4Lit4Li44Lib4Lia4Liy4LiXCivguK3guLjguJvguJ7guLHguJfguJjguYwKK+C4reC4uOC4m+C4nuC4seC4meC4mOC5jAor4Lit4Li44Lib4Lig4Li04LmA4Lip4LiBCivguK3guLjguJvguYLguKDguIQKK+C4reC4uOC4m+C4oeC4sgor4Lit4Li44Lib4Lih4Liy4LiZCivguK3guLjguJvguKHguLLguK3guLjguJvguYTguKHguKIKK+C4reC4uOC4m+C5hOC4oeC4ogor4Lit4Li44Lib4Lii4Li44Lin4Lij4Liy4LiKCivguK3guLjguJvguYLguKLguIQKK+C4reC4uOC4m+C5guC4ouC4o+C4suC4igor4Lit4Li44Lib4Lij4Liy4LiB4LijCivguK3guLjguJvguKPguLLguITguLIKK+C4reC4uOC4m+C4o+C4suC4igor4Lit4Li44Lib4Lij4Li0CivguK3guLjguJvguYLguKXguIHguJnguYwKK+C4reC4uOC4m+C5guC4peC4geC4q+C5jAor4Lit4Li44Lib4Liq4Lih4Lia4LiXCivguK3guLjguJvguKrguKHguJrguLHguJkKK+C4reC4uOC4m+C4quC4o+C4o+C4hAor4Lit4Li44Lib4Liq4Lix4Lih4Lia4Lix4LiZCivguK3guLjguJvguKrguLHguKHguJvguJfguLIKK+C4reC4uOC4m+C4ruC4suC4lAor4Lit4Li44Lib4Lix4LiK4LiM4Liy4Lii4LmMCivguK3guLjguJvguLHguIrguIzguLLguKLguLAKK+C4reC4uOC4m+C4seC4j+C4kOC4suC4gQor4Lit4Li44Lib4Lix4LiP4LiQ4Liy4LiZ4LiwCivguK3guLjguJvguLHguJfguKfguLAKK+C4reC4uOC4m+C4suC4guC4ouC4suC4mQor4Lit4Li44Lib4Liy4LiY4Lii4Liy4LiiCivguK3guLjguJvguLLguKLguLLguKoKK+C4reC4uOC4m+C4suC4q+C4meC4sgor4Lit4Li44Lig4LmC4LiV4Liq4LiH4LiG4LmMCivguK3guLjguKDguLHguKIKK+C4reC4uOC5ieC4oQor4Lit4Li44Lih4LiH4LiE4LmMCivguK3guLjguKHguKHguLHguJUKK+C4reC4uOC4oeC4sgor4Lit4Li44LmC4Lih4LiH4LiE4LmMCivguK3guLjguKIKK+C4reC4uOC5ieC4ogor4Lit4Li44LmK4LiiCivguK3guLjguKLguKLguLLguJkKK+C4reC4uOC4ouC4ouC4suC4oQor4Lit4Li44Lii4LmC4Lii4LiECivguK3guLjguKPguIQKK+C4reC4uOC4o+C4kwor4Lit4Li44Lij4Lie4Li1CivguK3guLjguKPguKoKK+C4reC4uOC4o+C4sAor4Lit4Li44Lij4Lix4LiH4Lit4Li44LiV4Lix4LiHCivguK3guLjguKPguLHguIjguInguJfguLAKK+C4reC4uOC4o+C4seC4iOC4ieC4seC4lwor4Lit4Li44Lij4LiyCivguK3guLjguKPguLgKK+C4reC4uOC5hOC4owor4Lit4Li44Lil4Lib4LiZ4LiwCivguK3guLjguKXguYLguKXguIgKK+C4reC4uOC4peC5guC4peC4peC4sAor4Lit4Li44Lil4Liy4Lih4LiBCivguK3guLjguKXguLTguJQKK+C4reC4uOC4peC4ueC4gQor4Lit4Li44LmC4Lil4LiBCivguK3guLjguKfguLAKK+C4reC4uOC5geC4p+C5iQor4Lit4Li44Lip4LiT4Li14Lip4LmMCivguK3guLjguKnguKEKK+C4reC4uOC4qeC4oeC4seC4mQor4Lit4Li44Lip4LiyCivguK3guLjguKnguLLguKvguLAKK+C4reC4uOC4quC4oAor4Lit4Li44Liq4Lin4LiwCivguK3guLjguKrguKrguYjguLLguKvguYwKK+C4reC4uOC4quC4quC4suC4q+C4sAor4Lit4Li44Liq4LiyCivguK3guLjguKrguLgKK+C4reC4uOC4quC4uOC4oAor4Lit4Li44Liq4Li44LihCivguK3guLjguKvguKPguLHguJoKK+C4reC4uOC4q+C4peC4mgor4Lit4Li44LmA4Lir4Lih4LmICivguK3guLjguKzguLLguKMKK+C4reC4uQor4Lit4Li54LmICivguK3guLnguYkKK+C4reC4ueC5iwor4Lit4Li54LiQCivguK3guLnguJQKK+C4reC4ueC4oQor4Lit4Li54Lij4Li5CivguK3guLnguYvguK3guLXguYsKK+C5gOC4rQor4LmA4Lit4LmJCivguYDguK3guYnguYbguYHguK3guYjguJkKK+C5gOC4reC4gQor4LmA4Lit4LmK4LiBCivguYDguK3guIHguYDguILguJnguIEKK+C5gOC4reC4geC4iOC4seC4geC4qeC4uAor4LmA4Lit4LiB4LiI4Li04LiVCivguYDguK3guIHguInguLHguJnguJfguYwKK+C5gOC4reC4geC4iuC4mQor4LmA4Lit4LiB4LiL4LmC4LibCivguYDguK3guIHguIvguYDguKPguKLguYwKK+C5gOC4reC4geC5gOC4l+C4qAor4LmA4Lit4LiB4LmC4LiX4LipCivguYDguK3guIHguJnguLHguKIKK+C5gOC4reC4geC4muC4uOC4hOC4hOC4pQor4LmA4Lit4LiB4Lia4Li44Lij4Li44LipCivguYDguK3guIHguJ7guIjguJnguYwKK+C5gOC4reC4geC4nuC4seC4meC4mOC5jAor4LmA4Lit4LiB4Lig4LieCivguYDguK3guIHguKDguKPguLTguKLguLIKK+C5gOC4reC4geC4oOC4seC4geC4lOC4tOC5jAor4LmA4Lit4LiB4Lig4Liy4LiE4Li1CivguYDguK3guIHguKDguLLguJ4KK+C5gOC4reC4geC4oQor4LmA4Lit4LiB4Lih4LiV4Li0CivguYDguK3guIHguKHguLHguKIKK+C5gOC4reC4geC4o+C4o+C4luC4m+C4o+C4sOC5guC4ouC4hAor4LmA4Lit4LiB4Lij4LiqCivguYDguK3guIHguKPguLAKK+C5gOC4reC4geC4o+C4suC4igor4LmA4Lit4LiB4Lil4Lix4LiB4Lip4LiT4LmMCivguYDguK3guIHguKjguIEKK+C5gOC4reC4geC4qgor4LmA4Lit4LiB4Liq4Lih4Lix4LiH4LiE4Li1CivguYDguK3guIHguKrguLLguKMKK+C5gOC4reC4geC4quC4tOC4l+C4mOC4tOC5jAor4LmA4Lit4LiB4Lit4Lix4LiE4Lij4Lij4Liy4LiK4LiX4Li54LiVCivguYDguK3guIHguK3guLgKK+C5gOC4reC4geC4seC4hOC4leC4sgor4LmA4Lit4LiB4Lix4LiH4Liq4Lie4Lii4Liy4LiB4Lij4LiT4LmMCivguYDguK3guIHguLHguIfguKrguKfguLLguJfguLUKK+C5gOC4reC4geC4seC4leC4oOC4suC4ngor4LmA4Lit4LiB4LiyCivguYDguK3guYnguIHguLIKK+C5gOC4reC4geC4tOC4geC4sgor4LmA4Lit4LiB4Li14Lig4Li54LiVCivguYDguK3guYDguITguK3guKPguYwKK+C5gOC4reC4hwor4LmA4Lit4LmH4LiHCivguYDguK3guYvguIcKK+C5gOC4reC5gOC4iuC4teC5iOC4ouC4meC5gOC4geC4oeC4quC5jAor4LmA4Lit4LmH4LiUCivguYDguK3guJTguKrguYwKK+C5gOC4reC4leC4l+C4seC4hOC4hOC4sAor4LmA4Lit4LmJ4LmA4LiVCivguYDguK3guJfguLTguKXguYHguK3guKXguIHguK3guK7guK3guKXguYwKK+C5gOC4reC4mQor4LmA4Lit4LmH4LiZCivguYDguK3guJnguYTguIvguKHguYwKK+C5gOC4reC5h+C4meC4lOC4uQor4LmA4Lit4LiZ4LiX4Lij4Liy4LiZ4LiL4LmMCivguYDguK3guKEKK+C5gOC4reC5h+C4oeC4muC4o+C4tOC5guC4rQor4LmA4Lit4LiiCivguYDguK3guYjguKIKK+C5gOC4reC5iuC4ogor4LmA4Lit4LmL4LiiCivguYDguK3guYDguKLguYjguJnguJXguYwKK+C5gOC4reC4o+C5h+C4lOC4reC4o+C5iOC4reC4ogor4LmA4Lit4Lij4Liy4Lin4Lix4LiTCivguYDguK3guKXguLIKK+C5gOC4reC4peC4suC4rOC4uOC4gQor4LmA4Lit4LinCivguYDguK3guYrguKcKK+C5gOC4reC4p+C4seC4hwor4LmA4Lit4LmJ4Lir4Lih4Li24LiHCivguYDguK3guKvguLTguJvguLHguKrguKrguLTguYLguIEKK+C5gOC4reC4q+C4tOC4oOC4tOC4geC4guC4uOC4reC4uOC4m+C4quC4seC4oeC4m+C4l+C4sgor4LmA4Lit4Lis4LiBCivguYDguK3guKzguLIKK+C5gOC4reC4rQor4LmA4Lit4LmI4LitCivguYDguK3guK3guKPguYzguYDguJrguLXguKLguKEKK+C5gOC4reC5ieC4reC4o+C4sOC5gOC4q+C4ogor4LmA4Lit4LmJ4Lit4LmA4Lij4LmJ4LitCivguYDguK3guYnguK3guYDguK7guK0KK+C5gOC4reC5ieC5geC4reC5iOC4mQor4LmA4Lit4LmK4LiwCivguYDguK3guLDguYPguIgKK+C5gOC4reC4sOC4reC4sAor4LmA4Lit4LiyCivguYDguK3guYnguLIKK+C5gOC4reC4suC4l+C4suC4owor4LmA4Lit4Liy4LiX4Liy4Lij4Lii4LmMCivguYDguK3guLLguKPguKoKK+C5gOC4reC4suC4rOC4suC4owor4LmA4Lit4Liy4Liw4Lil4Liy4LiiCivguYDguK3guLTguIEKK+C5gOC4reC4tOC5ieC4gQor4LmA4Lit4Li04LiZCivguYDguK3guLTguYnguJkKK+C5gOC4reC4tOC4mgor4LmA4Lit4Li14Lii4LiHCivguYDguK3guLXguYnguKLguIcKK+C5gOC4reC4teC4ouC4lAor4LmA4Lit4Li14LmK4Lii4LiUCivguYDguK3guLXguKLguJkKK+C5gOC4reC4teC5iOC4ouC4mQor4LmA4Lit4Li14LmI4Lii4LihCivguYDguK3guLXguYrguKLguKEKK+C5gOC4reC4teC5ieC4ouC4oeC4iOC4uOC5iuC4mQor4LmA4Lit4Li14LmJ4Lii4Lih4LmA4Lif4Li14LmJ4Lii4LihCivguYDguK3guLXguYjguKLguKcKK+C5gOC4reC4teC5ieC4ouC4pwor4LmA4Lit4Li34LmJ4LitCivguYDguK3guLfguYnguK3guIcKK+C5gOC4reC4t+C5ieC4reC4h+C4iuC4seC4mQor4LmA4Lit4Li34Lit4LiUCivguYDguK3guLfguK3guJkKK+C5gOC4reC4t+C5ieC4reC4mQor4LmA4Lit4Li34Lit4LihCivguYDguK3guLfguYnguK3guKEKK+C5gOC4reC4t+C5iOC4reC4ogor4LmA4Lit4Li34LmJ4Lit4LiiCivguYDguK3guLfguYjguK3guKLguYYKK+C5geC4rQor4LmB4Lit4LmJCivguYHguK3guYsKK+C5geC4reC4gQor4LmB4Lit4LiB4LiX4Li04LmA4LiZ4Li14Lii4LihCivguYHguK3guYjguIcKK+C5geC4reC5ieC4h+C5geC4oeC5ieC4hwor4LmB4Lit4LiUCivguYHguK3guYnguJQKK+C5geC4reC5iuC4lAor4LmB4Lit4LiU4LmGCivguYHguK3guYrguJTguYYKK+C5geC4reC5iOC4mQor4LmB4Lit4LiZ4LiV4Li04LmA4LiI4LiZCivguYHguK3guJnguJXguLTguJrguK3guJTguLUKK+C5geC4reC4meC4leC4tOC4reC4tOC5gOC4peC5h+C4geC4leC4o+C4reC4mQor4LmB4Lit4LmI4LiZ4Lil4LihCivguYHguK3guYLguJnguJQKK+C5geC4reC4mgor4LmB4Lit4LmJ4LihCivguYHguK3guKHguYHguJvguKPguYwKK+C5geC4reC4oeC5gOC4n+C4leC4suC4oeC4teC4mQor4LmB4Lit4Lih4Lih4Li04LmA4LiV4Lit4Lij4LmMCivguYHguK3guKHguYLguKHguYDguJnguLXguKIKK+C5geC4reC4o+C5iOC4oQor4LmB4Lit4Lij4LmM4LmC4Liu4Liq4LmA4LiV4LiqCivguYHguK3guKXguIHguK3guK7guK3guKXguYwKK+C5geC4reC4peC4n+C4sgor4LmB4Lit4LinCivguYHguK3guYjguKcKK+C5geC4reC5ieC4p+C5geC4i+C5iOC4pwor4LmB4Lit4Liq4LiX4Liy4LiX4Li14LiZCivguYHguK3guKrguYTguJ7guKPguLTguJkKK+C5geC4reC4quC4n+C4seC4peC4leC5jAor4LmB4Lit4Lir4LiZ4Lix4LiHCivguYHguK3guK3guKfguKIKK+C5geC4reC4reC4seC4lAor4LmC4LitCivguYLguK3guYgKK+C5guC4reC5iQor4LmC4Lit4LmLCivguYLguK3guIEKK+C5guC4reC5ieC4gQor4LmC4Lit4LmK4LiBCivguYLguK3guIHguLLguKoKK+C5guC4reC4huC4sAor4LmC4Lit4LmI4LiHCivguYLguK3guIfguIHguLLguKMKK+C5guC4reC4h+C5guC4guC4lOC4hwor4LmC4Lit4LiK4LiwCivguYLguK3guIrguLIKK+C5guC4reC5guC4i+C4mQor4LmC4Lit4LiQCivguYLguK3guJQKK+C5guC4reC4lQor4LmC4Lit4LiV4LiV4Lix4Lib4Lib4LiwCivguYLguK3guJfguJnguLAKK+C5guC4reC4mQor4LmC4Lit4LiaCivguYLguK3guJvguJvguLLguJXguLTguIHguLAKK+C5guC4reC5gOC4m+C4gQor4LmC4Lit4Lig4LiyCivguYLguK3guKDguLLguKoKK+C5guC4reC4oQor4LmC4Lit4LiiCivguYLguK3guYrguKIKK+C5guC4reC4o+C4qgor4LmC4Lit4Lil4Liw4Lie4LmI4LitCivguYLguK3guKXguLTguKHguJvguLTguIEKK+C5guC4reC5gOC4peC4teC5ieC4ouC4hwor4LmC4Lit4Lin4Liy4LiXCivguYLguK3guKnguJDguYwKK+C5guC4reC4quC4lgor4LmC4Lit4Liq4Liy4LiZCivguYLguK3guKvguJnguK0KK+C5guC4reC4q+C5jOC4oQor4LmC4Lit4Lir4Lix4LiHCivguYLguK3guKzguLLguKMKK+C5guC4reC5ieC5gOC4reC5iQor4LmC4Lit4LmA4Lit4LiL4Li04LiqCivguYLguK3guYnguYLguK4KK+C5hOC4rQor4LmE4Lit4LmJ4LmA4LiC4LmJCivguYTguK3guYLguIvguYLguJfguJsKK+C5hOC4reC4meC5jOC4quC5hOC4leC5gOC4meC4teC4ouC4oQor4LmE4Lit4Lii4Lij4LiyCivguYTguK3guKLguYDguKPguKgKK+C5hOC4reC4o+C4suC4nuC4lQor4LmE4Lit4Lij4Liy4Lin4Lix4LiTCivguYTguK3guKjguIHguKPguLXguKEKK+C5hOC4reC4qOC4p+C4o+C4o+C4ouC5jAor4LmE4Lit4Lit4Lit4LiZCivguYTguK3guYLguK3guJTguLXguJkKK+C4rgor4Liu4LiB4LmA4LiB4Li14LmJ4Lii4LiZCivguK7guIHguKXguIHguIvguLTguYjguKcKK+C4ruC5ieC4hwor4Liu4LiUCivguK7guKfguIfguIvguLjguYnguKIKK+C4ruC4p+C4mQor4Liu4LmJ4Lin4LiZCivguK7guYnguKfguJnguKvguKHguLkKK+C4ruC4p+C4mgor4Liu4Lin4LiiCivguK7guYjguK0KK+C4ruC5ieC4rQor4Liu4Lit4LiB4LiB4Li14LmJCivguK7guYjguK3guIcKK+C4ruC5iOC4reC4h+C5gOC4leC5iQor4Liu4Lit4LiH4LmA4Liu4LiyCivguK7guK3guJQKK+C4ruC4reC4leC4lOC4reC4gQor4Liu4LmI4Lit4LihCivguK7guYjguK3guKHguJTguIcKK+C4ruC5iOC4reC4oeC5gOC4oeC4t+C4reC4hwor4Liu4LmI4Lit4Lih4Lij4Li04LiZCivguK7guK3guKPguYzguYLguKHguJkKK+C4ruC4reC4peC5geC4peC4meC4lOC5jAor4Liu4Lit4Lil4Lix4LiZ4LiU4LiyCivguK7guLAKK+C4ruC4seC4gQor4Liu4Lix4LiB4LmGCivguK7guLHguIfguYDguKUKK+C4ruC4seC4lOC5gOC4iuC5ieC4ogor4Liu4Lix4LmI4LiZCivguK7guLHguYnguKcKK+C4ruC4sgor4Liu4LmJ4LiyCivguK7guYjguLLguYYKK+C4ruC5iOC4suC4h+C4q+C4peC4p+C4hwor4Liu4Liy4LihCivguK7guLLguKPguLLguITguLXguKPguLUKK+C4ruC4suC5gOC4o+C5h+C4oQor4Liu4Liy4Lir4LmM4LmA4LiZ4Li14Lii4LihCivguK7guLTguYYKK+C4ruC4tOC4iOC5gOC4o+C4suC4sOC4q+C5jAor4Liu4Li04LiZ4LiU4Li5CivguK7guLTguJvguJvguLXguYkKK+C4ruC4tOC4m+C5guC4m+C5guC4m+C5gOC4leC4oeC4seC4qgor4Liu4Li04Liq4LiX4Li14LmA4Lij4Li14LiiCivguK7guLXguYkKK+C4ruC4teC5gOC4peC4teC4ouC4oQor4Liu4Li2CivguK7guLbguIEKK+C4ruC4tuC4lAor4Liu4Li24LihCivguK7guLbguYjguKEKK+C4ruC4tuC4ogor4Liu4Li34LiU4Liu4Liy4LiUCivguK7guLfguK0KK+C4ruC4t+C5iOC4rQor4Liu4Li34LmJ4LitCivguK7guLjguJQKK+C4ruC4uOC4mgor4Liu4Li44Lii4LmA4Lil4Liu4Li44LiiCivguK7guLnguYkKK+C4ruC4ueC4gQor4Liu4Li54LihCivguYDguK4KK+C5gOC4ruC5iQor4LmA4Liu4LiB4LiV4Liy4Lij4LmMCivguYDguK7guIHguYLguJXguIHguKPguLHguKEKK+C5gOC4ruC4geC5guC4leC5gOC4oeC4leC4owor4LmA4Liu4LiB4LmC4LiV4Lil4Li04LiV4LijCivguYDguK7guIcKK+C5gOC4ruC5guC4oeC5guC4geC4peC4muC4tOC4mQor4LmA4Liu4LiiCivguYDguK7guYnguKIKK+C5gOC4ruC5guC4o+C4reC4teC4mQor4LmA4Liu4Lil4Li04LiE4Lit4Lib4LmA4LiV4Lit4Lij4LmMCivguYDguK7guYnguKcKK+C5gOC4ruC4rQor4LmA4Liu4LmJ4LitCivguYDguK7guLTguKPguJXguIvguYwKK+C5gOC4ruC4teC4ogor4LmA4Liu4Li14LmJ4Lii4LiZCivguYDguK7guLXguYnguKLguJoKK+C5gOC4ruC4teC5ieC4ouC4pwor4LmA4Liu4Li34Lit4LiBCivguYDguK7guLfguK3guJkKK+C5geC4rgor4LmB4Liu4LmICivguYHguK7guYjguIHguLbguYrguJkKK+C5geC4ruC4meC4lOC5jOC4muC4reC4pQor4LmB4Liu4Lif4LmA4LiZ4Li14Lii4LihCivguYHguK7guKEKK+C5geC4ruC4oeC5gOC4muC4reC4o+C5jOC5gOC4geC4reC4o+C5jAor4LmB4Liu4LiwCivguYLguK4KK+C5guC4ruC4gQor4LmC4Liu4LmA4LiV4LmH4LilCivguYLguK7guKXguYDguKHguLXguKLguKEKK+C5guC4ruC4sAor4LmE4Liu4LmJCivguYTguK7guYLguIHguKPguKHguLTguYDguJXguK3guKPguYwKK+C5hOC4ruC4lOC5jOC4m+C4suC4o+C5jOC4gQor4LmE4Liu4LiU4Lij4LiyCivguYTguK7guYLguJTguKPguITguLLguKPguYzguJrguK3guJkKK+C5hOC4ruC5guC4lOC4o+C5gOC4iOC4mQor4LmE4Liu4LmC4LiU4Lij4LmA4LiI4LiZ4LiL4Lix4Lil4LmE4Lif4LiU4LmMCivguYTguK7guYLguJTguKPguYDguIjguJnguYDguJ7guK3guKPguYzguK3guK3guIHguYTguIvguJTguYwKK+C5hOC4ruC5guC4lOC4o+C4oeC4tOC5gOC4leC4reC4o+C5jAor4LmE4Liu4LmE4LifCivguYTguK7guYLguKUKK+C5hOC4ruC4ruC4tQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL3RoYWk2LnVjcyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS90aGFpNi51Y3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmFiMDU0MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS90aGFpNi51Y3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL3VuaWNvZGUvQ29tcG9zaXRpb25FeGNsdXNpb25zLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL0NvbXBvc2l0aW9uRXhjbHVzaW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDcxNzA0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL0NvbXBvc2l0aW9uRXhjbHVzaW9ucy50eHQKQEAgLTAsMCArMSwxNjMgQEAKKyMgQ29tcG9zaXRpb25FeGNsdXNpb25zLTMudHh0CisjCisjIENvbXBvc2l0aW9uIEV4Y2x1c2lvbnMKKyMgVGhpcyBmaWxlIGxpc3RzIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVBWCAjMTUgQ29tcG9zaXRpb24gRXhjbHVzaW9uIFRhYmxlLgorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisjIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMTUvI1ByaW1hcnkgRXhjbHVzaW9uIExpc3QgVGFibGUKKworIyAoMSkgU2NyaXB0IFNwZWNpZmljcworIyBUaGlzIGxpc3Qgb2YgY2hhcmFjdGVycyBjYW5ub3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBVbmljb2RlRGF0YSBmaWxlLgorCiswOTU4ICMgREVWQU5BR0FSSSBMRVRURVIgUUEKKzA5NTkgIyBERVZBTkFHQVJJIExFVFRFUiBLSEhBCiswOTVBICMgREVWQU5BR0FSSSBMRVRURVIgR0hIQQorMDk1QiAjIERFVkFOQUdBUkkgTEVUVEVSIFpBCiswOTVDICMgREVWQU5BR0FSSSBMRVRURVIgRERESEEKKzA5NUQgIyBERVZBTkFHQVJJIExFVFRFUiBSSEEKKzA5NUUgIyBERVZBTkFHQVJJIExFVFRFUiBGQQorMDk1RiAjIERFVkFOQUdBUkkgTEVUVEVSIFlZQQorMDlEQyAjIEJFTkdBTEkgTEVUVEVSIFJSQQorMDlERCAjIEJFTkdBTEkgTEVUVEVSIFJIQQorMDlERiAjIEJFTkdBTEkgTEVUVEVSIFlZQQorMEEzMyAjIEdVUk1VS0hJIExFVFRFUiBMTEEKKzBBMzYgIyBHVVJNVUtISSBMRVRURVIgU0hBCiswQTU5ICMgR1VSTVVLSEkgTEVUVEVSIEtISEEKKzBBNUEgIyBHVVJNVUtISSBMRVRURVIgR0hIQQorMEE1QiAjIEdVUk1VS0hJIExFVFRFUiBaQQorMEE1RSAjIEdVUk1VS0hJIExFVFRFUiBGQQorMEI1QyAjIE9SSVlBIExFVFRFUiBSUkEKKzBCNUQgIyBPUklZQSBMRVRURVIgUkhBCiswRjQzICMgVElCRVRBTiBMRVRURVIgR0hBCiswRjREICMgVElCRVRBTiBMRVRURVIgRERIQQorMEY1MiAjIFRJQkVUQU4gTEVUVEVSIERIQQorMEY1NyAjIFRJQkVUQU4gTEVUVEVSIEJIQQorMEY1QyAjIFRJQkVUQU4gTEVUVEVSIERaSEEKKzBGNjkgIyBUSUJFVEFOIExFVFRFUiBLU1NBCiswRjc2ICMgVElCRVRBTiBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorMEY3OCAjIFRJQkVUQU4gVk9XRUwgU0lHTiBWT0NBTElDIEwKKzBGOTMgIyBUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgR0hBCiswRjlEICMgVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIERESEEKKzBGQTIgIyBUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgREhBCiswRkE3ICMgVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIEJIQQorMEZBQyAjIFRJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBEWkhBCiswRkI5ICMgVElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIEtTU0EKK0ZCMUQgIyBIRUJSRVcgTEVUVEVSIFlPRCBXSVRIIEhJUklRCitGQjFGICMgSEVCUkVXIExJR0FUVVJFIFlJRERJU0ggWU9EIFlPRCBQQVRBSAorRkIyQSAjIEhFQlJFVyBMRVRURVIgU0hJTiBXSVRIIFNISU4gRE9UCitGQjJCICMgSEVCUkVXIExFVFRFUiBTSElOIFdJVEggU0lOIERPVAorRkIyQyAjIEhFQlJFVyBMRVRURVIgU0hJTiBXSVRIIERBR0VTSCBBTkQgU0hJTiBET1QKK0ZCMkQgIyBIRUJSRVcgTEVUVEVSIFNISU4gV0lUSCBEQUdFU0ggQU5EIFNJTiBET1QKK0ZCMkUgIyBIRUJSRVcgTEVUVEVSIEFMRUYgV0lUSCBQQVRBSAorRkIyRiAjIEhFQlJFVyBMRVRURVIgQUxFRiBXSVRIIFFBTUFUUworRkIzMCAjIEhFQlJFVyBMRVRURVIgQUxFRiBXSVRIIE1BUElRCitGQjMxICMgSEVCUkVXIExFVFRFUiBCRVQgV0lUSCBEQUdFU0gKK0ZCMzIgIyBIRUJSRVcgTEVUVEVSIEdJTUVMIFdJVEggREFHRVNICitGQjMzICMgSEVCUkVXIExFVFRFUiBEQUxFVCBXSVRIIERBR0VTSAorRkIzNCAjIEhFQlJFVyBMRVRURVIgSEUgV0lUSCBNQVBJUQorRkIzNSAjIEhFQlJFVyBMRVRURVIgVkFWIFdJVEggREFHRVNICitGQjM2ICMgSEVCUkVXIExFVFRFUiBaQVlJTiBXSVRIIERBR0VTSAorRkIzOCAjIEhFQlJFVyBMRVRURVIgVEVUIFdJVEggREFHRVNICitGQjM5ICMgSEVCUkVXIExFVFRFUiBZT0QgV0lUSCBEQUdFU0gKK0ZCM0EgIyBIRUJSRVcgTEVUVEVSIEZJTkFMIEtBRiBXSVRIIERBR0VTSAorRkIzQiAjIEhFQlJFVyBMRVRURVIgS0FGIFdJVEggREFHRVNICitGQjNDICMgSEVCUkVXIExFVFRFUiBMQU1FRCBXSVRIIERBR0VTSAorRkIzRSAjIEhFQlJFVyBMRVRURVIgTUVNIFdJVEggREFHRVNICitGQjQwICMgSEVCUkVXIExFVFRFUiBOVU4gV0lUSCBEQUdFU0gKK0ZCNDEgIyBIRUJSRVcgTEVUVEVSIFNBTUVLSCBXSVRIIERBR0VTSAorRkI0MyAjIEhFQlJFVyBMRVRURVIgRklOQUwgUEUgV0lUSCBEQUdFU0gKK0ZCNDQgIyBIRUJSRVcgTEVUVEVSIFBFIFdJVEggREFHRVNICitGQjQ2ICMgSEVCUkVXIExFVFRFUiBUU0FESSBXSVRIIERBR0VTSAorRkI0NyAjIEhFQlJFVyBMRVRURVIgUU9GIFdJVEggREFHRVNICitGQjQ4ICMgSEVCUkVXIExFVFRFUiBSRVNIIFdJVEggREFHRVNICitGQjQ5ICMgSEVCUkVXIExFVFRFUiBTSElOIFdJVEggREFHRVNICitGQjRBICMgSEVCUkVXIExFVFRFUiBUQVYgV0lUSCBEQUdFU0gKK0ZCNEIgIyBIRUJSRVcgTEVUVEVSIFZBViBXSVRIIEhPTEFNCitGQjRDICMgSEVCUkVXIExFVFRFUiBCRVQgV0lUSCBSQUZFCitGQjREICMgSEVCUkVXIExFVFRFUiBLQUYgV0lUSCBSQUZFCitGQjRFICMgSEVCUkVXIExFVFRFUiBQRSBXSVRIIFJBRkUKKworIyAoMikgUG9zdCBDb21wb3NpdGlvbiBWZXJzaW9uIHByZWNvbXBvc2VkIGNoYXJhY3RlcnMKKyMgVGhlc2UgY2hhcmFjdGVycyBjYW5ub3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBVbmljb2RlRGF0YSBmaWxlLgorCisxRDE1RSAjIE1VU0lDQUwgU1lNQk9MIEhBTEYgTk9URQorMUQxNUYgIyBNVVNJQ0FMIFNZTUJPTCBRVUFSVEVSIE5PVEUKKzFEMTYwICMgTVVTSUNBTCBTWU1CT0wgRUlHSFRIIE5PVEUKKzFEMTYxICMgTVVTSUNBTCBTWU1CT0wgU0lYVEVFTlRIIE5PVEUKKzFEMTYyICMgTVVTSUNBTCBTWU1CT0wgVEhJUlRZLVNFQ09ORCBOT1RFCisxRDE2MyAjIE1VU0lDQUwgU1lNQk9MIFNJWFRZLUZPVVJUSCBOT1RFCisxRDE2NCAjIE1VU0lDQUwgU1lNQk9MIE9ORSBIVU5EUkVEIFRXRU5UWS1FSUdIVEggTk9URQorMUQxQkIgIyBNVVNJQ0FMIFNZTUJPTCBNSU5JTUEKKzFEMUJDICMgTVVTSUNBTCBTWU1CT0wgTUlOSU1BIEJMQUNLCisxRDFCRCAjIE1VU0lDQUwgU1lNQk9MIFNFTUlNSU5JTUEgV0hJVEUKKzFEMUJFICMgTVVTSUNBTCBTWU1CT0wgU0VNSU1JTklNQSBCTEFDSworMUQxQkYgIyBNVVNJQ0FMIFNZTUJPTCBGVVNBIFdISVRFCisxRDFDMCAjIE1VU0lDQUwgU1lNQk9MIEZVU0EgQkxBQ0sKKworIyAoMykgU2luZ2xldG9uIERlY29tcG9zaXRpb25zCisjIFRoZXNlIGNoYXJhY3RlcnMgY2FuIGJlIGRlcml2ZWQgZnJvbSB0aGUgVW5pY29kZURhdGEgZmlsZQorIyBieSBpbmNsdWRpbmcgYWxsIGNoYXJhY3RlcnMgd2hvc2UgY2Fub25pY2FsIGRlY29tcG9zaXRpb24KKyMgY29uc2lzdHMgb2YgYSBzaW5nbGUgY2hhcmFjdGVyLgorIyBUaGVzZSBjaGFyYWN0ZXJzIGFyZSBzaW1wbHkgcXVvdGVkIGhlcmUgZm9yIHJlZmVyZW5jZS4KKworIyAwMzQwIENPTUJJTklORyBHUkFWRSBUT05FIE1BUksKKyMgMDM0MSBDT01CSU5JTkcgQUNVVEUgVE9ORSBNQVJLCisjIDAzNDMgQ09NQklOSU5HIEdSRUVLIEtPUk9OSVMKKyMgMDM3NCBHUkVFSyBOVU1FUkFMIFNJR04KKyMgMDM3RSBHUkVFSyBRVUVTVElPTiBNQVJLCisjIDAzODcgR1JFRUsgQU5PIFRFTEVJQQorIyAxRjcxIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIE9YSUEKKyMgMUY3MyBHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIE9YSUEKKyMgMUY3NSBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggT1hJQQorIyAxRjc3IEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggT1hJQQorIyAxRjc5IEdSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggT1hJQQorIyAxRjdCIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggT1hJQQorIyAxRjdEIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIE9YSUEKKyMgMUZCQiBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIE9YSUEKKyMgMUZCRSBHUkVFSyBQUk9TR0VHUkFNTUVOSQorIyAxRkM5IEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBPWElBCisjIDFGQ0IgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggT1hJQQorIyAxRkQzIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBPWElBCisjIDFGREIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIE9YSUEKKyMgMUZFMyBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQSBBTkQgT1hJQQorIyAxRkVCIEdSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBPWElBCisjIDFGRUUgR1JFRUsgRElBTFlUSUtBIEFORCBPWElBCisjIDFGRUYgR1JFRUsgVkFSSUEKKyMgMUZGOSBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggT1hJQQorIyAxRkZCIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggT1hJQQorIyAxRkZEIEdSRUVLIE9YSUEKKyMgMjAwMCBFTiBRVUFECisjIDIwMDEgRU0gUVVBRAorIyAyMTI2IE9ITSBTSUdOCisjIDIxMkEgS0VMVklOIFNJR04KKyMgMjEyQiBBTkdTVFJPTSBTSUdOCisjIDIzMjkgTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUCisjIDIzMkEgUklHSFQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVAorIyBGOTAwIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTAwCisjLi4gRkEwRCBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwRAorIyBGQTEwIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTEwCisjIEZBMTIgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMTIKKyMgRkExNSBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExNQorIy4uIEZBMUUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMUUKKyMgRkEyMCBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyMAorIyBGQTIyIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTIyCisjIEZBMjUgQ0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMjUKKyMgRkEyNiBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyNgorIyBGQTJBIENKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTJBCisjLi4gRkEyRCBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyRAorIyAyRjgwMCBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MDAKKyMuLiAyRkExRCBDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMUQKKworIyAoNCkgTm9uLVN0YXJ0ZXIgRGVjb21wb3NpdGlvbnMKKyMgVGhlc2UgY2hhcmFjdGVycyBjYW4gYmUgZGVyaXZlZCBmcm9tIHRoZSBVbmljb2RlRGF0YSBmaWxlCisjIGJ5IGluY2x1ZGluZyBhbGwgY2hhcmFjdGVycyB3aG9zZSBjYW5vbmljYWwgZGVjb21wb3NpdGlvbiBjb25zaXN0cworIyBvZiBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMsIHRoZSBmaXJzdCBvZiB3aGljaCBoYXMgYSBub24temVybworIyBjb21iaW5pbmcgY2xhc3MuCisjIFRoZXNlIGNoYXJhY3RlcnMgYXJlIHNpbXBseSBxdW90ZWQgaGVyZSBmb3IgcmVmZXJlbmNlLgorCisjIDAzNDQgQ09NQklOSU5HIEdSRUVLIERJQUxZVElLQSBUT05PUworIyAwRjczIFRJQkVUQU4gVk9XRUwgU0lHTiBJSQorIyAwRjc1IFRJQkVUQU4gVk9XRUwgU0lHTiBVVQorIyAwRjgxIFRJQkVUQU4gVk9XRUwgU0lHTiBSRVZFUlNFRCBJSQorCisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL05vcm1hbGl6YXRpb25UZXN0LnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL05vcm1hbGl6YXRpb25UZXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGRlYzRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL3VuaWNvZGUvTm9ybWFsaXphdGlvblRlc3QudHh0CkBAIC0wLDAgKzEsMTcwMzUgQEAKKyMgTm9ybWFsaXphdGlvblRlc3QtMy4yLjAudHh0CisjIERhdGU6IDIwMDItMDMtMTksMjM6MzE6MTggR01UIFtNRF0KKyMKKyMgTm9ybWFsaXphdGlvbiBUZXN0IFN1aXRlCisjIEZvcm1hdDoKKyMKKyMgICBDb2x1bW5zIChjMSwgYzIsLi4uKSBhcmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMKKyMgICBDb21tZW50cyBhcmUgaW5kaWNhdGVkIHdpdGggaGFzaCBtYXJrcworIworIyBDT05GT1JNQU5DRToKKyMgMS4gVGhlIGZvbGxvd2luZyBpbnZhcmlhbnRzIG11c3QgYmUgdHJ1ZSBmb3IgYWxsIGNvbmZvcm1hbnQgaW1wbGVtZW50YXRpb25zCisjCisjICAgIE5GQworIyAgICAgIGMyID09ICBORkMoYzEpID09ICBORkMoYzIpID09ICBORkMoYzMpCisjICAgICAgYzQgPT0gIE5GQyhjNCkgPT0gIE5GQyhjNSkKKyMKKyMgICAgTkZECisjICAgICAgYzMgPT0gIE5GRChjMSkgPT0gIE5GRChjMikgPT0gIE5GRChjMykKKyMgICAgICBjNSA9PSAgTkZEKGM0KSA9PSAgTkZEKGM1KQorIworIyAgICBORktDCisjICAgICAgYzQgPT0gTkZLQyhjMSkgPT0gTkZLQyhjMikgPT0gTkZLQyhjMykgPT0gTkZLQyhjNCkgPT0gTkZLQyhjNSkKKyMKKyMgICAgTkZLRAorIyAgICAgIGM1ID09IE5GS0QoYzEpID09IE5GS0QoYzIpID09IE5GS0QoYzMpID09IE5GS0QoYzQpID09IE5GS0QoYzUpCisjCisjIDIuIEZvciBldmVyeSBhc3NpZ25lZCBVbmljb2RlIDMuMS4wIGNvZGUgcG9pbnQgWCB0aGF0IGlzIG5vdCBzcGVjaWZpY2FsbHkKKyMgICAgbGlzdGVkIGluIFBhcnQgMSwgdGhlIGZvbGxvd2luZyBpbnZhcmlhbnRzIG11c3QgYmUgdHJ1ZSBmb3IgYWxsIGNvbmZvcm1hbnQKKyMgICAgaW1wbGVtZW50YXRpb25zOgorIworIyAgICAgIFggPT0gTkZDKFgpID09IE5GRChYKSA9PSBORktDKFgpID09IE5GS0QoWCkKKyMKK0BQYXJ0MCAjIFNwZWNpZmljIGNhc2VzCisjCisxRTBBOzFFMEE7MDA0NCAwMzA3OzFFMEE7MDA0NCAwMzA3OworMUUwQzsxRTBDOzAwNDQgMDMyMzsxRTBDOzAwNDQgMDMyMzsKKzFFMEEgMDMyMzsxRTBDIDAzMDc7MDA0NCAwMzIzIDAzMDc7MUUwQyAwMzA3OzAwNDQgMDMyMyAwMzA3OworMUUwQyAwMzA3OzFFMEMgMDMwNzswMDQ0IDAzMjMgMDMwNzsxRTBDIDAzMDc7MDA0NCAwMzIzIDAzMDc7CiswMDQ0IDAzMDcgMDMyMzsxRTBDIDAzMDc7MDA0NCAwMzIzIDAzMDc7MUUwQyAwMzA3OzAwNDQgMDMyMyAwMzA3OworMDA0NCAwMzIzIDAzMDc7MUUwQyAwMzA3OzAwNDQgMDMyMyAwMzA3OzFFMEMgMDMwNzswMDQ0IDAzMjMgMDMwNzsKKzFFMEEgMDMxQjsxRTBBIDAzMUI7MDA0NCAwMzFCIDAzMDc7MUUwQSAwMzFCOzAwNDQgMDMxQiAwMzA3OworMUUwQyAwMzFCOzFFMEMgMDMxQjswMDQ0IDAzMUIgMDMyMzsxRTBDIDAzMUI7MDA0NCAwMzFCIDAzMjM7CisxRTBBIDAzMUIgMDMyMzsxRTBDIDAzMUIgMDMwNzswMDQ0IDAzMUIgMDMyMyAwMzA3OzFFMEMgMDMxQiAwMzA3OzAwNDQgMDMxQiAwMzIzIDAzMDc7CisxRTBDIDAzMUIgMDMwNzsxRTBDIDAzMUIgMDMwNzswMDQ0IDAzMUIgMDMyMyAwMzA3OzFFMEMgMDMxQiAwMzA3OzAwNDQgMDMxQiAwMzIzIDAzMDc7CiswMDQ0IDAzMUIgMDMwNyAwMzIzOzFFMEMgMDMxQiAwMzA3OzAwNDQgMDMxQiAwMzIzIDAzMDc7MUUwQyAwMzFCIDAzMDc7MDA0NCAwMzFCIDAzMjMgMDMwNzsKKzAwNDQgMDMxQiAwMzIzIDAzMDc7MUUwQyAwMzFCIDAzMDc7MDA0NCAwMzFCIDAzMjMgMDMwNzsxRTBDIDAzMUIgMDMwNzswMDQ0IDAzMUIgMDMyMyAwMzA3OworMDBDODswMEM4OzAwNDUgMDMwMDswMEM4OzAwNDUgMDMwMDsKKzAxMTI7MDExMjswMDQ1IDAzMDQ7MDExMjswMDQ1IDAzMDQ7CiswMDQ1IDAzMDA7MDBDODswMDQ1IDAzMDA7MDBDODswMDQ1IDAzMDA7CiswMDQ1IDAzMDQ7MDExMjswMDQ1IDAzMDQ7MDExMjswMDQ1IDAzMDQ7CisxRTE0OzFFMTQ7MDA0NSAwMzA0IDAzMDA7MUUxNDswMDQ1IDAzMDQgMDMwMDsKKzAxMTIgMDMwMDsxRTE0OzAwNDUgMDMwNCAwMzAwOzFFMTQ7MDA0NSAwMzA0IDAzMDA7CisxRTE0IDAzMDQ7MUUxNCAwMzA0OzAwNDUgMDMwNCAwMzAwIDAzMDQ7MUUxNCAwMzA0OzAwNDUgMDMwNCAwMzAwIDAzMDQ7CiswMDQ1IDAzMDQgMDMwMDsxRTE0OzAwNDUgMDMwNCAwMzAwOzFFMTQ7MDA0NSAwMzA0IDAzMDA7CiswMDQ1IDAzMDAgMDMwNDswMEM4IDAzMDQ7MDA0NSAwMzAwIDAzMDQ7MDBDOCAwMzA0OzAwNDUgMDMwMCAwMzA0OworMDVCOCAwNUI5IDA1QjEgMDU5MSAwNUMzIDA1QjAgMDVBQyAwNTlGOzA1QjEgMDVCOCAwNUI5IDA1OTEgMDVDMyAwNUIwIDA1QUMgMDU5RjswNUIxIDA1QjggMDVCOSAwNTkxIDA1QzMgMDVCMCAwNUFDIDA1OUY7MDVCMSAwNUI4IDA1QjkgMDU5MSAwNUMzIDA1QjAgMDVBQyAwNTlGOzA1QjEgMDVCOCAwNUI5IDA1OTEgMDVDMyAwNUIwIDA1QUMgMDU5RjsKKzA1OTIgMDVCNyAwNUJDIDA1QTUgMDVCMCAwNUMwIDA1QzQgMDVBRDswNUIwIDA1QjcgMDVCQyAwNUE1IDA1OTIgMDVDMCAwNUFEIDA1QzQ7MDVCMCAwNUI3IDA1QkMgMDVBNSAwNTkyIDA1QzAgMDVBRCAwNUM0OzA1QjAgMDVCNyAwNUJDIDA1QTUgMDU5MiAwNUMwIDA1QUQgMDVDNDswNUIwIDA1QjcgMDVCQyAwNUE1IDA1OTIgMDVDMCAwNUFEIDA1QzQ7CisjCitAUGFydDEgIyBDaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIHRlc3QKKyMgQWxsIGNoYXJhY3RlcnMgbm90IGV4cGxpY2l0bHkgb2NjdXJyaW5nIGluIGMxIG9mIFBhcnQgMSBoYXZlIGlkZW50aWNhbCBORkMsIEQsIEtDLCBLRCBmb3Jtcy4KKyMKKzAwQTA7MDBBMDswMEEwOzAwMjA7MDAyMDsKKzAwQTg7MDBBODswMEE4OzAwMjAgMDMwODswMDIwIDAzMDg7CiswMEFBOzAwQUE7MDBBQTswMDYxOzAwNjE7CiswMEFGOzAwQUY7MDBBRjswMDIwIDAzMDQ7MDAyMCAwMzA0OworMDBCMjswMEIyOzAwQjI7MDAzMjswMDMyOworMDBCMzswMEIzOzAwQjM7MDAzMzswMDMzOworMDBCNDswMEI0OzAwQjQ7MDAyMCAwMzAxOzAwMjAgMDMwMTsKKzAwQjU7MDBCNTswMEI1OzAzQkM7MDNCQzsKKzAwQjg7MDBCODswMEI4OzAwMjAgMDMyNzswMDIwIDAzMjc7CiswMEI5OzAwQjk7MDBCOTswMDMxOzAwMzE7CiswMEJBOzAwQkE7MDBCQTswMDZGOzAwNkY7CiswMEJDOzAwQkM7MDBCQzswMDMxIDIwNDQgMDAzNDswMDMxIDIwNDQgMDAzNDsKKzAwQkQ7MDBCRDswMEJEOzAwMzEgMjA0NCAwMDMyOzAwMzEgMjA0NCAwMDMyOworMDBCRTswMEJFOzAwQkU7MDAzMyAyMDQ0IDAwMzQ7MDAzMyAyMDQ0IDAwMzQ7CiswMEMwOzAwQzA7MDA0MSAwMzAwOzAwQzA7MDA0MSAwMzAwOworMDBDMTswMEMxOzAwNDEgMDMwMTswMEMxOzAwNDEgMDMwMTsKKzAwQzI7MDBDMjswMDQxIDAzMDI7MDBDMjswMDQxIDAzMDI7CiswMEMzOzAwQzM7MDA0MSAwMzAzOzAwQzM7MDA0MSAwMzAzOworMDBDNDswMEM0OzAwNDEgMDMwODswMEM0OzAwNDEgMDMwODsKKzAwQzU7MDBDNTswMDQxIDAzMEE7MDBDNTswMDQxIDAzMEE7CiswMEM3OzAwQzc7MDA0MyAwMzI3OzAwQzc7MDA0MyAwMzI3OworMDBDODswMEM4OzAwNDUgMDMwMDswMEM4OzAwNDUgMDMwMDsKKzAwQzk7MDBDOTswMDQ1IDAzMDE7MDBDOTswMDQ1IDAzMDE7CiswMENBOzAwQ0E7MDA0NSAwMzAyOzAwQ0E7MDA0NSAwMzAyOworMDBDQjswMENCOzAwNDUgMDMwODswMENCOzAwNDUgMDMwODsKKzAwQ0M7MDBDQzswMDQ5IDAzMDA7MDBDQzswMDQ5IDAzMDA7CiswMENEOzAwQ0Q7MDA0OSAwMzAxOzAwQ0Q7MDA0OSAwMzAxOworMDBDRTswMENFOzAwNDkgMDMwMjswMENFOzAwNDkgMDMwMjsKKzAwQ0Y7MDBDRjswMDQ5IDAzMDg7MDBDRjswMDQ5IDAzMDg7CiswMEQxOzAwRDE7MDA0RSAwMzAzOzAwRDE7MDA0RSAwMzAzOworMDBEMjswMEQyOzAwNEYgMDMwMDswMEQyOzAwNEYgMDMwMDsKKzAwRDM7MDBEMzswMDRGIDAzMDE7MDBEMzswMDRGIDAzMDE7CiswMEQ0OzAwRDQ7MDA0RiAwMzAyOzAwRDQ7MDA0RiAwMzAyOworMDBENTswMEQ1OzAwNEYgMDMwMzswMEQ1OzAwNEYgMDMwMzsKKzAwRDY7MDBENjswMDRGIDAzMDg7MDBENjswMDRGIDAzMDg7CiswMEQ5OzAwRDk7MDA1NSAwMzAwOzAwRDk7MDA1NSAwMzAwOworMDBEQTswMERBOzAwNTUgMDMwMTswMERBOzAwNTUgMDMwMTsKKzAwREI7MDBEQjswMDU1IDAzMDI7MDBEQjswMDU1IDAzMDI7CiswMERDOzAwREM7MDA1NSAwMzA4OzAwREM7MDA1NSAwMzA4OworMDBERDswMEREOzAwNTkgMDMwMTswMEREOzAwNTkgMDMwMTsKKzAwRTA7MDBFMDswMDYxIDAzMDA7MDBFMDswMDYxIDAzMDA7CiswMEUxOzAwRTE7MDA2MSAwMzAxOzAwRTE7MDA2MSAwMzAxOworMDBFMjswMEUyOzAwNjEgMDMwMjswMEUyOzAwNjEgMDMwMjsKKzAwRTM7MDBFMzswMDYxIDAzMDM7MDBFMzswMDYxIDAzMDM7CiswMEU0OzAwRTQ7MDA2MSAwMzA4OzAwRTQ7MDA2MSAwMzA4OworMDBFNTswMEU1OzAwNjEgMDMwQTswMEU1OzAwNjEgMDMwQTsKKzAwRTc7MDBFNzswMDYzIDAzMjc7MDBFNzswMDYzIDAzMjc7CiswMEU4OzAwRTg7MDA2NSAwMzAwOzAwRTg7MDA2NSAwMzAwOworMDBFOTswMEU5OzAwNjUgMDMwMTswMEU5OzAwNjUgMDMwMTsKKzAwRUE7MDBFQTswMDY1IDAzMDI7MDBFQTswMDY1IDAzMDI7CiswMEVCOzAwRUI7MDA2NSAwMzA4OzAwRUI7MDA2NSAwMzA4OworMDBFQzswMEVDOzAwNjkgMDMwMDswMEVDOzAwNjkgMDMwMDsKKzAwRUQ7MDBFRDswMDY5IDAzMDE7MDBFRDswMDY5IDAzMDE7CiswMEVFOzAwRUU7MDA2OSAwMzAyOzAwRUU7MDA2OSAwMzAyOworMDBFRjswMEVGOzAwNjkgMDMwODswMEVGOzAwNjkgMDMwODsKKzAwRjE7MDBGMTswMDZFIDAzMDM7MDBGMTswMDZFIDAzMDM7CiswMEYyOzAwRjI7MDA2RiAwMzAwOzAwRjI7MDA2RiAwMzAwOworMDBGMzswMEYzOzAwNkYgMDMwMTswMEYzOzAwNkYgMDMwMTsKKzAwRjQ7MDBGNDswMDZGIDAzMDI7MDBGNDswMDZGIDAzMDI7CiswMEY1OzAwRjU7MDA2RiAwMzAzOzAwRjU7MDA2RiAwMzAzOworMDBGNjswMEY2OzAwNkYgMDMwODswMEY2OzAwNkYgMDMwODsKKzAwRjk7MDBGOTswMDc1IDAzMDA7MDBGOTswMDc1IDAzMDA7CiswMEZBOzAwRkE7MDA3NSAwMzAxOzAwRkE7MDA3NSAwMzAxOworMDBGQjswMEZCOzAwNzUgMDMwMjswMEZCOzAwNzUgMDMwMjsKKzAwRkM7MDBGQzswMDc1IDAzMDg7MDBGQzswMDc1IDAzMDg7CiswMEZEOzAwRkQ7MDA3OSAwMzAxOzAwRkQ7MDA3OSAwMzAxOworMDBGRjswMEZGOzAwNzkgMDMwODswMEZGOzAwNzkgMDMwODsKKzAxMDA7MDEwMDswMDQxIDAzMDQ7MDEwMDswMDQxIDAzMDQ7CiswMTAxOzAxMDE7MDA2MSAwMzA0OzAxMDE7MDA2MSAwMzA0OworMDEwMjswMTAyOzAwNDEgMDMwNjswMTAyOzAwNDEgMDMwNjsKKzAxMDM7MDEwMzswMDYxIDAzMDY7MDEwMzswMDYxIDAzMDY7CiswMTA0OzAxMDQ7MDA0MSAwMzI4OzAxMDQ7MDA0MSAwMzI4OworMDEwNTswMTA1OzAwNjEgMDMyODswMTA1OzAwNjEgMDMyODsKKzAxMDY7MDEwNjswMDQzIDAzMDE7MDEwNjswMDQzIDAzMDE7CiswMTA3OzAxMDc7MDA2MyAwMzAxOzAxMDc7MDA2MyAwMzAxOworMDEwODswMTA4OzAwNDMgMDMwMjswMTA4OzAwNDMgMDMwMjsKKzAxMDk7MDEwOTswMDYzIDAzMDI7MDEwOTswMDYzIDAzMDI7CiswMTBBOzAxMEE7MDA0MyAwMzA3OzAxMEE7MDA0MyAwMzA3OworMDEwQjswMTBCOzAwNjMgMDMwNzswMTBCOzAwNjMgMDMwNzsKKzAxMEM7MDEwQzswMDQzIDAzMEM7MDEwQzswMDQzIDAzMEM7CiswMTBEOzAxMEQ7MDA2MyAwMzBDOzAxMEQ7MDA2MyAwMzBDOworMDEwRTswMTBFOzAwNDQgMDMwQzswMTBFOzAwNDQgMDMwQzsKKzAxMEY7MDEwRjswMDY0IDAzMEM7MDEwRjswMDY0IDAzMEM7CiswMTEyOzAxMTI7MDA0NSAwMzA0OzAxMTI7MDA0NSAwMzA0OworMDExMzswMTEzOzAwNjUgMDMwNDswMTEzOzAwNjUgMDMwNDsKKzAxMTQ7MDExNDswMDQ1IDAzMDY7MDExNDswMDQ1IDAzMDY7CiswMTE1OzAxMTU7MDA2NSAwMzA2OzAxMTU7MDA2NSAwMzA2OworMDExNjswMTE2OzAwNDUgMDMwNzswMTE2OzAwNDUgMDMwNzsKKzAxMTc7MDExNzswMDY1IDAzMDc7MDExNzswMDY1IDAzMDc7CiswMTE4OzAxMTg7MDA0NSAwMzI4OzAxMTg7MDA0NSAwMzI4OworMDExOTswMTE5OzAwNjUgMDMyODswMTE5OzAwNjUgMDMyODsKKzAxMUE7MDExQTswMDQ1IDAzMEM7MDExQTswMDQ1IDAzMEM7CiswMTFCOzAxMUI7MDA2NSAwMzBDOzAxMUI7MDA2NSAwMzBDOworMDExQzswMTFDOzAwNDcgMDMwMjswMTFDOzAwNDcgMDMwMjsKKzAxMUQ7MDExRDswMDY3IDAzMDI7MDExRDswMDY3IDAzMDI7CiswMTFFOzAxMUU7MDA0NyAwMzA2OzAxMUU7MDA0NyAwMzA2OworMDExRjswMTFGOzAwNjcgMDMwNjswMTFGOzAwNjcgMDMwNjsKKzAxMjA7MDEyMDswMDQ3IDAzMDc7MDEyMDswMDQ3IDAzMDc7CiswMTIxOzAxMjE7MDA2NyAwMzA3OzAxMjE7MDA2NyAwMzA3OworMDEyMjswMTIyOzAwNDcgMDMyNzswMTIyOzAwNDcgMDMyNzsKKzAxMjM7MDEyMzswMDY3IDAzMjc7MDEyMzswMDY3IDAzMjc7CiswMTI0OzAxMjQ7MDA0OCAwMzAyOzAxMjQ7MDA0OCAwMzAyOworMDEyNTswMTI1OzAwNjggMDMwMjswMTI1OzAwNjggMDMwMjsKKzAxMjg7MDEyODswMDQ5IDAzMDM7MDEyODswMDQ5IDAzMDM7CiswMTI5OzAxMjk7MDA2OSAwMzAzOzAxMjk7MDA2OSAwMzAzOworMDEyQTswMTJBOzAwNDkgMDMwNDswMTJBOzAwNDkgMDMwNDsKKzAxMkI7MDEyQjswMDY5IDAzMDQ7MDEyQjswMDY5IDAzMDQ7CiswMTJDOzAxMkM7MDA0OSAwMzA2OzAxMkM7MDA0OSAwMzA2OworMDEyRDswMTJEOzAwNjkgMDMwNjswMTJEOzAwNjkgMDMwNjsKKzAxMkU7MDEyRTswMDQ5IDAzMjg7MDEyRTswMDQ5IDAzMjg7CiswMTJGOzAxMkY7MDA2OSAwMzI4OzAxMkY7MDA2OSAwMzI4OworMDEzMDswMTMwOzAwNDkgMDMwNzswMTMwOzAwNDkgMDMwNzsKKzAxMzI7MDEzMjswMTMyOzAwNDkgMDA0QTswMDQ5IDAwNEE7CiswMTMzOzAxMzM7MDEzMzswMDY5IDAwNkE7MDA2OSAwMDZBOworMDEzNDswMTM0OzAwNEEgMDMwMjswMTM0OzAwNEEgMDMwMjsKKzAxMzU7MDEzNTswMDZBIDAzMDI7MDEzNTswMDZBIDAzMDI7CiswMTM2OzAxMzY7MDA0QiAwMzI3OzAxMzY7MDA0QiAwMzI3OworMDEzNzswMTM3OzAwNkIgMDMyNzswMTM3OzAwNkIgMDMyNzsKKzAxMzk7MDEzOTswMDRDIDAzMDE7MDEzOTswMDRDIDAzMDE7CiswMTNBOzAxM0E7MDA2QyAwMzAxOzAxM0E7MDA2QyAwMzAxOworMDEzQjswMTNCOzAwNEMgMDMyNzswMTNCOzAwNEMgMDMyNzsKKzAxM0M7MDEzQzswMDZDIDAzMjc7MDEzQzswMDZDIDAzMjc7CiswMTNEOzAxM0Q7MDA0QyAwMzBDOzAxM0Q7MDA0QyAwMzBDOworMDEzRTswMTNFOzAwNkMgMDMwQzswMTNFOzAwNkMgMDMwQzsKKzAxM0Y7MDEzRjswMTNGOzAwNEMgMDBCNzswMDRDIDAwQjc7CiswMTQwOzAxNDA7MDE0MDswMDZDIDAwQjc7MDA2QyAwMEI3OworMDE0MzswMTQzOzAwNEUgMDMwMTswMTQzOzAwNEUgMDMwMTsKKzAxNDQ7MDE0NDswMDZFIDAzMDE7MDE0NDswMDZFIDAzMDE7CiswMTQ1OzAxNDU7MDA0RSAwMzI3OzAxNDU7MDA0RSAwMzI3OworMDE0NjswMTQ2OzAwNkUgMDMyNzswMTQ2OzAwNkUgMDMyNzsKKzAxNDc7MDE0NzswMDRFIDAzMEM7MDE0NzswMDRFIDAzMEM7CiswMTQ4OzAxNDg7MDA2RSAwMzBDOzAxNDg7MDA2RSAwMzBDOworMDE0OTswMTQ5OzAxNDk7MDJCQyAwMDZFOzAyQkMgMDA2RTsKKzAxNEM7MDE0QzswMDRGIDAzMDQ7MDE0QzswMDRGIDAzMDQ7CiswMTREOzAxNEQ7MDA2RiAwMzA0OzAxNEQ7MDA2RiAwMzA0OworMDE0RTswMTRFOzAwNEYgMDMwNjswMTRFOzAwNEYgMDMwNjsKKzAxNEY7MDE0RjswMDZGIDAzMDY7MDE0RjswMDZGIDAzMDY7CiswMTUwOzAxNTA7MDA0RiAwMzBCOzAxNTA7MDA0RiAwMzBCOworMDE1MTswMTUxOzAwNkYgMDMwQjswMTUxOzAwNkYgMDMwQjsKKzAxNTQ7MDE1NDswMDUyIDAzMDE7MDE1NDswMDUyIDAzMDE7CiswMTU1OzAxNTU7MDA3MiAwMzAxOzAxNTU7MDA3MiAwMzAxOworMDE1NjswMTU2OzAwNTIgMDMyNzswMTU2OzAwNTIgMDMyNzsKKzAxNTc7MDE1NzswMDcyIDAzMjc7MDE1NzswMDcyIDAzMjc7CiswMTU4OzAxNTg7MDA1MiAwMzBDOzAxNTg7MDA1MiAwMzBDOworMDE1OTswMTU5OzAwNzIgMDMwQzswMTU5OzAwNzIgMDMwQzsKKzAxNUE7MDE1QTswMDUzIDAzMDE7MDE1QTswMDUzIDAzMDE7CiswMTVCOzAxNUI7MDA3MyAwMzAxOzAxNUI7MDA3MyAwMzAxOworMDE1QzswMTVDOzAwNTMgMDMwMjswMTVDOzAwNTMgMDMwMjsKKzAxNUQ7MDE1RDswMDczIDAzMDI7MDE1RDswMDczIDAzMDI7CiswMTVFOzAxNUU7MDA1MyAwMzI3OzAxNUU7MDA1MyAwMzI3OworMDE1RjswMTVGOzAwNzMgMDMyNzswMTVGOzAwNzMgMDMyNzsKKzAxNjA7MDE2MDswMDUzIDAzMEM7MDE2MDswMDUzIDAzMEM7CiswMTYxOzAxNjE7MDA3MyAwMzBDOzAxNjE7MDA3MyAwMzBDOworMDE2MjswMTYyOzAwNTQgMDMyNzswMTYyOzAwNTQgMDMyNzsKKzAxNjM7MDE2MzswMDc0IDAzMjc7MDE2MzswMDc0IDAzMjc7CiswMTY0OzAxNjQ7MDA1NCAwMzBDOzAxNjQ7MDA1NCAwMzBDOworMDE2NTswMTY1OzAwNzQgMDMwQzswMTY1OzAwNzQgMDMwQzsKKzAxNjg7MDE2ODswMDU1IDAzMDM7MDE2ODswMDU1IDAzMDM7CiswMTY5OzAxNjk7MDA3NSAwMzAzOzAxNjk7MDA3NSAwMzAzOworMDE2QTswMTZBOzAwNTUgMDMwNDswMTZBOzAwNTUgMDMwNDsKKzAxNkI7MDE2QjswMDc1IDAzMDQ7MDE2QjswMDc1IDAzMDQ7CiswMTZDOzAxNkM7MDA1NSAwMzA2OzAxNkM7MDA1NSAwMzA2OworMDE2RDswMTZEOzAwNzUgMDMwNjswMTZEOzAwNzUgMDMwNjsKKzAxNkU7MDE2RTswMDU1IDAzMEE7MDE2RTswMDU1IDAzMEE7CiswMTZGOzAxNkY7MDA3NSAwMzBBOzAxNkY7MDA3NSAwMzBBOworMDE3MDswMTcwOzAwNTUgMDMwQjswMTcwOzAwNTUgMDMwQjsKKzAxNzE7MDE3MTswMDc1IDAzMEI7MDE3MTswMDc1IDAzMEI7CiswMTcyOzAxNzI7MDA1NSAwMzI4OzAxNzI7MDA1NSAwMzI4OworMDE3MzswMTczOzAwNzUgMDMyODswMTczOzAwNzUgMDMyODsKKzAxNzQ7MDE3NDswMDU3IDAzMDI7MDE3NDswMDU3IDAzMDI7CiswMTc1OzAxNzU7MDA3NyAwMzAyOzAxNzU7MDA3NyAwMzAyOworMDE3NjswMTc2OzAwNTkgMDMwMjswMTc2OzAwNTkgMDMwMjsKKzAxNzc7MDE3NzswMDc5IDAzMDI7MDE3NzswMDc5IDAzMDI7CiswMTc4OzAxNzg7MDA1OSAwMzA4OzAxNzg7MDA1OSAwMzA4OworMDE3OTswMTc5OzAwNUEgMDMwMTswMTc5OzAwNUEgMDMwMTsKKzAxN0E7MDE3QTswMDdBIDAzMDE7MDE3QTswMDdBIDAzMDE7CiswMTdCOzAxN0I7MDA1QSAwMzA3OzAxN0I7MDA1QSAwMzA3OworMDE3QzswMTdDOzAwN0EgMDMwNzswMTdDOzAwN0EgMDMwNzsKKzAxN0Q7MDE3RDswMDVBIDAzMEM7MDE3RDswMDVBIDAzMEM7CiswMTdFOzAxN0U7MDA3QSAwMzBDOzAxN0U7MDA3QSAwMzBDOworMDE3RjswMTdGOzAxN0Y7MDA3MzswMDczOworMDFBMDswMUEwOzAwNEYgMDMxQjswMUEwOzAwNEYgMDMxQjsKKzAxQTE7MDFBMTswMDZGIDAzMUI7MDFBMTswMDZGIDAzMUI7CiswMUFGOzAxQUY7MDA1NSAwMzFCOzAxQUY7MDA1NSAwMzFCOworMDFCMDswMUIwOzAwNzUgMDMxQjswMUIwOzAwNzUgMDMxQjsKKzAxQzQ7MDFDNDswMUM0OzAwNDQgMDE3RDswMDQ0IDAwNUEgMDMwQzsKKzAxQzU7MDFDNTswMUM1OzAwNDQgMDE3RTswMDQ0IDAwN0EgMDMwQzsKKzAxQzY7MDFDNjswMUM2OzAwNjQgMDE3RTswMDY0IDAwN0EgMDMwQzsKKzAxQzc7MDFDNzswMUM3OzAwNEMgMDA0QTswMDRDIDAwNEE7CiswMUM4OzAxQzg7MDFDODswMDRDIDAwNkE7MDA0QyAwMDZBOworMDFDOTswMUM5OzAxQzk7MDA2QyAwMDZBOzAwNkMgMDA2QTsKKzAxQ0E7MDFDQTswMUNBOzAwNEUgMDA0QTswMDRFIDAwNEE7CiswMUNCOzAxQ0I7MDFDQjswMDRFIDAwNkE7MDA0RSAwMDZBOworMDFDQzswMUNDOzAxQ0M7MDA2RSAwMDZBOzAwNkUgMDA2QTsKKzAxQ0Q7MDFDRDswMDQxIDAzMEM7MDFDRDswMDQxIDAzMEM7CiswMUNFOzAxQ0U7MDA2MSAwMzBDOzAxQ0U7MDA2MSAwMzBDOworMDFDRjswMUNGOzAwNDkgMDMwQzswMUNGOzAwNDkgMDMwQzsKKzAxRDA7MDFEMDswMDY5IDAzMEM7MDFEMDswMDY5IDAzMEM7CiswMUQxOzAxRDE7MDA0RiAwMzBDOzAxRDE7MDA0RiAwMzBDOworMDFEMjswMUQyOzAwNkYgMDMwQzswMUQyOzAwNkYgMDMwQzsKKzAxRDM7MDFEMzswMDU1IDAzMEM7MDFEMzswMDU1IDAzMEM7CiswMUQ0OzAxRDQ7MDA3NSAwMzBDOzAxRDQ7MDA3NSAwMzBDOworMDFENTswMUQ1OzAwNTUgMDMwOCAwMzA0OzAxRDU7MDA1NSAwMzA4IDAzMDQ7CiswMUQ2OzAxRDY7MDA3NSAwMzA4IDAzMDQ7MDFENjswMDc1IDAzMDggMDMwNDsKKzAxRDc7MDFENzswMDU1IDAzMDggMDMwMTswMUQ3OzAwNTUgMDMwOCAwMzAxOworMDFEODswMUQ4OzAwNzUgMDMwOCAwMzAxOzAxRDg7MDA3NSAwMzA4IDAzMDE7CiswMUQ5OzAxRDk7MDA1NSAwMzA4IDAzMEM7MDFEOTswMDU1IDAzMDggMDMwQzsKKzAxREE7MDFEQTswMDc1IDAzMDggMDMwQzswMURBOzAwNzUgMDMwOCAwMzBDOworMDFEQjswMURCOzAwNTUgMDMwOCAwMzAwOzAxREI7MDA1NSAwMzA4IDAzMDA7CiswMURDOzAxREM7MDA3NSAwMzA4IDAzMDA7MDFEQzswMDc1IDAzMDggMDMwMDsKKzAxREU7MDFERTswMDQxIDAzMDggMDMwNDswMURFOzAwNDEgMDMwOCAwMzA0OworMDFERjswMURGOzAwNjEgMDMwOCAwMzA0OzAxREY7MDA2MSAwMzA4IDAzMDQ7CiswMUUwOzAxRTA7MDA0MSAwMzA3IDAzMDQ7MDFFMDswMDQxIDAzMDcgMDMwNDsKKzAxRTE7MDFFMTswMDYxIDAzMDcgMDMwNDswMUUxOzAwNjEgMDMwNyAwMzA0OworMDFFMjswMUUyOzAwQzYgMDMwNDswMUUyOzAwQzYgMDMwNDsKKzAxRTM7MDFFMzswMEU2IDAzMDQ7MDFFMzswMEU2IDAzMDQ7CiswMUU2OzAxRTY7MDA0NyAwMzBDOzAxRTY7MDA0NyAwMzBDOworMDFFNzswMUU3OzAwNjcgMDMwQzswMUU3OzAwNjcgMDMwQzsKKzAxRTg7MDFFODswMDRCIDAzMEM7MDFFODswMDRCIDAzMEM7CiswMUU5OzAxRTk7MDA2QiAwMzBDOzAxRTk7MDA2QiAwMzBDOworMDFFQTswMUVBOzAwNEYgMDMyODswMUVBOzAwNEYgMDMyODsKKzAxRUI7MDFFQjswMDZGIDAzMjg7MDFFQjswMDZGIDAzMjg7CiswMUVDOzAxRUM7MDA0RiAwMzI4IDAzMDQ7MDFFQzswMDRGIDAzMjggMDMwNDsKKzAxRUQ7MDFFRDswMDZGIDAzMjggMDMwNDswMUVEOzAwNkYgMDMyOCAwMzA0OworMDFFRTswMUVFOzAxQjcgMDMwQzswMUVFOzAxQjcgMDMwQzsKKzAxRUY7MDFFRjswMjkyIDAzMEM7MDFFRjswMjkyIDAzMEM7CiswMUYwOzAxRjA7MDA2QSAwMzBDOzAxRjA7MDA2QSAwMzBDOworMDFGMTswMUYxOzAxRjE7MDA0NCAwMDVBOzAwNDQgMDA1QTsKKzAxRjI7MDFGMjswMUYyOzAwNDQgMDA3QTswMDQ0IDAwN0E7CiswMUYzOzAxRjM7MDFGMzswMDY0IDAwN0E7MDA2NCAwMDdBOworMDFGNDswMUY0OzAwNDcgMDMwMTswMUY0OzAwNDcgMDMwMTsKKzAxRjU7MDFGNTswMDY3IDAzMDE7MDFGNTswMDY3IDAzMDE7CiswMUY4OzAxRjg7MDA0RSAwMzAwOzAxRjg7MDA0RSAwMzAwOworMDFGOTswMUY5OzAwNkUgMDMwMDswMUY5OzAwNkUgMDMwMDsKKzAxRkE7MDFGQTswMDQxIDAzMEEgMDMwMTswMUZBOzAwNDEgMDMwQSAwMzAxOworMDFGQjswMUZCOzAwNjEgMDMwQSAwMzAxOzAxRkI7MDA2MSAwMzBBIDAzMDE7CiswMUZDOzAxRkM7MDBDNiAwMzAxOzAxRkM7MDBDNiAwMzAxOworMDFGRDswMUZEOzAwRTYgMDMwMTswMUZEOzAwRTYgMDMwMTsKKzAxRkU7MDFGRTswMEQ4IDAzMDE7MDFGRTswMEQ4IDAzMDE7CiswMUZGOzAxRkY7MDBGOCAwMzAxOzAxRkY7MDBGOCAwMzAxOworMDIwMDswMjAwOzAwNDEgMDMwRjswMjAwOzAwNDEgMDMwRjsKKzAyMDE7MDIwMTswMDYxIDAzMEY7MDIwMTswMDYxIDAzMEY7CiswMjAyOzAyMDI7MDA0MSAwMzExOzAyMDI7MDA0MSAwMzExOworMDIwMzswMjAzOzAwNjEgMDMxMTswMjAzOzAwNjEgMDMxMTsKKzAyMDQ7MDIwNDswMDQ1IDAzMEY7MDIwNDswMDQ1IDAzMEY7CiswMjA1OzAyMDU7MDA2NSAwMzBGOzAyMDU7MDA2NSAwMzBGOworMDIwNjswMjA2OzAwNDUgMDMxMTswMjA2OzAwNDUgMDMxMTsKKzAyMDc7MDIwNzswMDY1IDAzMTE7MDIwNzswMDY1IDAzMTE7CiswMjA4OzAyMDg7MDA0OSAwMzBGOzAyMDg7MDA0OSAwMzBGOworMDIwOTswMjA5OzAwNjkgMDMwRjswMjA5OzAwNjkgMDMwRjsKKzAyMEE7MDIwQTswMDQ5IDAzMTE7MDIwQTswMDQ5IDAzMTE7CiswMjBCOzAyMEI7MDA2OSAwMzExOzAyMEI7MDA2OSAwMzExOworMDIwQzswMjBDOzAwNEYgMDMwRjswMjBDOzAwNEYgMDMwRjsKKzAyMEQ7MDIwRDswMDZGIDAzMEY7MDIwRDswMDZGIDAzMEY7CiswMjBFOzAyMEU7MDA0RiAwMzExOzAyMEU7MDA0RiAwMzExOworMDIwRjswMjBGOzAwNkYgMDMxMTswMjBGOzAwNkYgMDMxMTsKKzAyMTA7MDIxMDswMDUyIDAzMEY7MDIxMDswMDUyIDAzMEY7CiswMjExOzAyMTE7MDA3MiAwMzBGOzAyMTE7MDA3MiAwMzBGOworMDIxMjswMjEyOzAwNTIgMDMxMTswMjEyOzAwNTIgMDMxMTsKKzAyMTM7MDIxMzswMDcyIDAzMTE7MDIxMzswMDcyIDAzMTE7CiswMjE0OzAyMTQ7MDA1NSAwMzBGOzAyMTQ7MDA1NSAwMzBGOworMDIxNTswMjE1OzAwNzUgMDMwRjswMjE1OzAwNzUgMDMwRjsKKzAyMTY7MDIxNjswMDU1IDAzMTE7MDIxNjswMDU1IDAzMTE7CiswMjE3OzAyMTc7MDA3NSAwMzExOzAyMTc7MDA3NSAwMzExOworMDIxODswMjE4OzAwNTMgMDMyNjswMjE4OzAwNTMgMDMyNjsKKzAyMTk7MDIxOTswMDczIDAzMjY7MDIxOTswMDczIDAzMjY7CiswMjFBOzAyMUE7MDA1NCAwMzI2OzAyMUE7MDA1NCAwMzI2OworMDIxQjswMjFCOzAwNzQgMDMyNjswMjFCOzAwNzQgMDMyNjsKKzAyMUU7MDIxRTswMDQ4IDAzMEM7MDIxRTswMDQ4IDAzMEM7CiswMjFGOzAyMUY7MDA2OCAwMzBDOzAyMUY7MDA2OCAwMzBDOworMDIyNjswMjI2OzAwNDEgMDMwNzswMjI2OzAwNDEgMDMwNzsKKzAyMjc7MDIyNzswMDYxIDAzMDc7MDIyNzswMDYxIDAzMDc7CiswMjI4OzAyMjg7MDA0NSAwMzI3OzAyMjg7MDA0NSAwMzI3OworMDIyOTswMjI5OzAwNjUgMDMyNzswMjI5OzAwNjUgMDMyNzsKKzAyMkE7MDIyQTswMDRGIDAzMDggMDMwNDswMjJBOzAwNEYgMDMwOCAwMzA0OworMDIyQjswMjJCOzAwNkYgMDMwOCAwMzA0OzAyMkI7MDA2RiAwMzA4IDAzMDQ7CiswMjJDOzAyMkM7MDA0RiAwMzAzIDAzMDQ7MDIyQzswMDRGIDAzMDMgMDMwNDsKKzAyMkQ7MDIyRDswMDZGIDAzMDMgMDMwNDswMjJEOzAwNkYgMDMwMyAwMzA0OworMDIyRTswMjJFOzAwNEYgMDMwNzswMjJFOzAwNEYgMDMwNzsKKzAyMkY7MDIyRjswMDZGIDAzMDc7MDIyRjswMDZGIDAzMDc7CiswMjMwOzAyMzA7MDA0RiAwMzA3IDAzMDQ7MDIzMDswMDRGIDAzMDcgMDMwNDsKKzAyMzE7MDIzMTswMDZGIDAzMDcgMDMwNDswMjMxOzAwNkYgMDMwNyAwMzA0OworMDIzMjswMjMyOzAwNTkgMDMwNDswMjMyOzAwNTkgMDMwNDsKKzAyMzM7MDIzMzswMDc5IDAzMDQ7MDIzMzswMDc5IDAzMDQ7CiswMkIwOzAyQjA7MDJCMDswMDY4OzAwNjg7CiswMkIxOzAyQjE7MDJCMTswMjY2OzAyNjY7CiswMkIyOzAyQjI7MDJCMjswMDZBOzAwNkE7CiswMkIzOzAyQjM7MDJCMzswMDcyOzAwNzI7CiswMkI0OzAyQjQ7MDJCNDswMjc5OzAyNzk7CiswMkI1OzAyQjU7MDJCNTswMjdCOzAyN0I7CiswMkI2OzAyQjY7MDJCNjswMjgxOzAyODE7CiswMkI3OzAyQjc7MDJCNzswMDc3OzAwNzc7CiswMkI4OzAyQjg7MDJCODswMDc5OzAwNzk7CiswMkQ4OzAyRDg7MDJEODswMDIwIDAzMDY7MDAyMCAwMzA2OworMDJEOTswMkQ5OzAyRDk7MDAyMCAwMzA3OzAwMjAgMDMwNzsKKzAyREE7MDJEQTswMkRBOzAwMjAgMDMwQTswMDIwIDAzMEE7CiswMkRCOzAyREI7MDJEQjswMDIwIDAzMjg7MDAyMCAwMzI4OworMDJEQzswMkRDOzAyREM7MDAyMCAwMzAzOzAwMjAgMDMwMzsKKzAyREQ7MDJERDswMkREOzAwMjAgMDMwQjswMDIwIDAzMEI7CiswMkUwOzAyRTA7MDJFMDswMjYzOzAyNjM7CiswMkUxOzAyRTE7MDJFMTswMDZDOzAwNkM7CiswMkUyOzAyRTI7MDJFMjswMDczOzAwNzM7CiswMkUzOzAyRTM7MDJFMzswMDc4OzAwNzg7CiswMkU0OzAyRTQ7MDJFNDswMjk1OzAyOTU7CiswMzQwOzAzMDA7MDMwMDswMzAwOzAzMDA7CiswMzQxOzAzMDE7MDMwMTswMzAxOzAzMDE7CiswMzQzOzAzMTM7MDMxMzswMzEzOzAzMTM7CiswMzQ0OzAzMDggMDMwMTswMzA4IDAzMDE7MDMwOCAwMzAxOzAzMDggMDMwMTsKKzAzNzQ7MDJCOTswMkI5OzAyQjk7MDJCOTsKKzAzN0E7MDM3QTswMzdBOzAwMjAgMDM0NTswMDIwIDAzNDU7CiswMzdFOzAwM0I7MDAzQjswMDNCOzAwM0I7CiswMzg0OzAzODQ7MDM4NDswMDIwIDAzMDE7MDAyMCAwMzAxOworMDM4NTswMzg1OzAwQTggMDMwMTswMDIwIDAzMDggMDMwMTswMDIwIDAzMDggMDMwMTsKKzAzODY7MDM4NjswMzkxIDAzMDE7MDM4NjswMzkxIDAzMDE7CiswMzg3OzAwQjc7MDBCNzswMEI3OzAwQjc7CiswMzg4OzAzODg7MDM5NSAwMzAxOzAzODg7MDM5NSAwMzAxOworMDM4OTswMzg5OzAzOTcgMDMwMTswMzg5OzAzOTcgMDMwMTsKKzAzOEE7MDM4QTswMzk5IDAzMDE7MDM4QTswMzk5IDAzMDE7CiswMzhDOzAzOEM7MDM5RiAwMzAxOzAzOEM7MDM5RiAwMzAxOworMDM4RTswMzhFOzAzQTUgMDMwMTswMzhFOzAzQTUgMDMwMTsKKzAzOEY7MDM4RjswM0E5IDAzMDE7MDM4RjswM0E5IDAzMDE7CiswMzkwOzAzOTA7MDNCOSAwMzA4IDAzMDE7MDM5MDswM0I5IDAzMDggMDMwMTsKKzAzQUE7MDNBQTswMzk5IDAzMDg7MDNBQTswMzk5IDAzMDg7CiswM0FCOzAzQUI7MDNBNSAwMzA4OzAzQUI7MDNBNSAwMzA4OworMDNBQzswM0FDOzAzQjEgMDMwMTswM0FDOzAzQjEgMDMwMTsKKzAzQUQ7MDNBRDswM0I1IDAzMDE7MDNBRDswM0I1IDAzMDE7CiswM0FFOzAzQUU7MDNCNyAwMzAxOzAzQUU7MDNCNyAwMzAxOworMDNBRjswM0FGOzAzQjkgMDMwMTswM0FGOzAzQjkgMDMwMTsKKzAzQjA7MDNCMDswM0M1IDAzMDggMDMwMTswM0IwOzAzQzUgMDMwOCAwMzAxOworMDNDQTswM0NBOzAzQjkgMDMwODswM0NBOzAzQjkgMDMwODsKKzAzQ0I7MDNDQjswM0M1IDAzMDg7MDNDQjswM0M1IDAzMDg7CiswM0NDOzAzQ0M7MDNCRiAwMzAxOzAzQ0M7MDNCRiAwMzAxOworMDNDRDswM0NEOzAzQzUgMDMwMTswM0NEOzAzQzUgMDMwMTsKKzAzQ0U7MDNDRTswM0M5IDAzMDE7MDNDRTswM0M5IDAzMDE7CiswM0QwOzAzRDA7MDNEMDswM0IyOzAzQjI7CiswM0QxOzAzRDE7MDNEMTswM0I4OzAzQjg7CiswM0QyOzAzRDI7MDNEMjswM0E1OzAzQTU7CiswM0QzOzAzRDM7MDNEMiAwMzAxOzAzOEU7MDNBNSAwMzAxOworMDNENDswM0Q0OzAzRDIgMDMwODswM0FCOzAzQTUgMDMwODsKKzAzRDU7MDNENTswM0Q1OzAzQzY7MDNDNjsKKzAzRDY7MDNENjswM0Q2OzAzQzA7MDNDMDsKKzAzRjA7MDNGMDswM0YwOzAzQkE7MDNCQTsKKzAzRjE7MDNGMTswM0YxOzAzQzE7MDNDMTsKKzAzRjI7MDNGMjswM0YyOzAzQzI7MDNDMjsKKzAzRjQ7MDNGNDswM0Y0OzAzOTg7MDM5ODsKKzAzRjU7MDNGNTswM0Y1OzAzQjU7MDNCNTsKKzA0MDA7MDQwMDswNDE1IDAzMDA7MDQwMDswNDE1IDAzMDA7CiswNDAxOzA0MDE7MDQxNSAwMzA4OzA0MDE7MDQxNSAwMzA4OworMDQwMzswNDAzOzA0MTMgMDMwMTswNDAzOzA0MTMgMDMwMTsKKzA0MDc7MDQwNzswNDA2IDAzMDg7MDQwNzswNDA2IDAzMDg7CiswNDBDOzA0MEM7MDQxQSAwMzAxOzA0MEM7MDQxQSAwMzAxOworMDQwRDswNDBEOzA0MTggMDMwMDswNDBEOzA0MTggMDMwMDsKKzA0MEU7MDQwRTswNDIzIDAzMDY7MDQwRTswNDIzIDAzMDY7CiswNDE5OzA0MTk7MDQxOCAwMzA2OzA0MTk7MDQxOCAwMzA2OworMDQzOTswNDM5OzA0MzggMDMwNjswNDM5OzA0MzggMDMwNjsKKzA0NTA7MDQ1MDswNDM1IDAzMDA7MDQ1MDswNDM1IDAzMDA7CiswNDUxOzA0NTE7MDQzNSAwMzA4OzA0NTE7MDQzNSAwMzA4OworMDQ1MzswNDUzOzA0MzMgMDMwMTswNDUzOzA0MzMgMDMwMTsKKzA0NTc7MDQ1NzswNDU2IDAzMDg7MDQ1NzswNDU2IDAzMDg7CiswNDVDOzA0NUM7MDQzQSAwMzAxOzA0NUM7MDQzQSAwMzAxOworMDQ1RDswNDVEOzA0MzggMDMwMDswNDVEOzA0MzggMDMwMDsKKzA0NUU7MDQ1RTswNDQzIDAzMDY7MDQ1RTswNDQzIDAzMDY7CiswNDc2OzA0NzY7MDQ3NCAwMzBGOzA0NzY7MDQ3NCAwMzBGOworMDQ3NzswNDc3OzA0NzUgMDMwRjswNDc3OzA0NzUgMDMwRjsKKzA0QzE7MDRDMTswNDE2IDAzMDY7MDRDMTswNDE2IDAzMDY7CiswNEMyOzA0QzI7MDQzNiAwMzA2OzA0QzI7MDQzNiAwMzA2OworMDREMDswNEQwOzA0MTAgMDMwNjswNEQwOzA0MTAgMDMwNjsKKzA0RDE7MDREMTswNDMwIDAzMDY7MDREMTswNDMwIDAzMDY7CiswNEQyOzA0RDI7MDQxMCAwMzA4OzA0RDI7MDQxMCAwMzA4OworMDREMzswNEQzOzA0MzAgMDMwODswNEQzOzA0MzAgMDMwODsKKzA0RDY7MDRENjswNDE1IDAzMDY7MDRENjswNDE1IDAzMDY7CiswNEQ3OzA0RDc7MDQzNSAwMzA2OzA0RDc7MDQzNSAwMzA2OworMDREQTswNERBOzA0RDggMDMwODswNERBOzA0RDggMDMwODsKKzA0REI7MDREQjswNEQ5IDAzMDg7MDREQjswNEQ5IDAzMDg7CiswNERDOzA0REM7MDQxNiAwMzA4OzA0REM7MDQxNiAwMzA4OworMDRERDswNEREOzA0MzYgMDMwODswNEREOzA0MzYgMDMwODsKKzA0REU7MDRERTswNDE3IDAzMDg7MDRERTswNDE3IDAzMDg7CiswNERGOzA0REY7MDQzNyAwMzA4OzA0REY7MDQzNyAwMzA4OworMDRFMjswNEUyOzA0MTggMDMwNDswNEUyOzA0MTggMDMwNDsKKzA0RTM7MDRFMzswNDM4IDAzMDQ7MDRFMzswNDM4IDAzMDQ7CiswNEU0OzA0RTQ7MDQxOCAwMzA4OzA0RTQ7MDQxOCAwMzA4OworMDRFNTswNEU1OzA0MzggMDMwODswNEU1OzA0MzggMDMwODsKKzA0RTY7MDRFNjswNDFFIDAzMDg7MDRFNjswNDFFIDAzMDg7CiswNEU3OzA0RTc7MDQzRSAwMzA4OzA0RTc7MDQzRSAwMzA4OworMDRFQTswNEVBOzA0RTggMDMwODswNEVBOzA0RTggMDMwODsKKzA0RUI7MDRFQjswNEU5IDAzMDg7MDRFQjswNEU5IDAzMDg7CiswNEVDOzA0RUM7MDQyRCAwMzA4OzA0RUM7MDQyRCAwMzA4OworMDRFRDswNEVEOzA0NEQgMDMwODswNEVEOzA0NEQgMDMwODsKKzA0RUU7MDRFRTswNDIzIDAzMDQ7MDRFRTswNDIzIDAzMDQ7CiswNEVGOzA0RUY7MDQ0MyAwMzA0OzA0RUY7MDQ0MyAwMzA0OworMDRGMDswNEYwOzA0MjMgMDMwODswNEYwOzA0MjMgMDMwODsKKzA0RjE7MDRGMTswNDQzIDAzMDg7MDRGMTswNDQzIDAzMDg7CiswNEYyOzA0RjI7MDQyMyAwMzBCOzA0RjI7MDQyMyAwMzBCOworMDRGMzswNEYzOzA0NDMgMDMwQjswNEYzOzA0NDMgMDMwQjsKKzA0RjQ7MDRGNDswNDI3IDAzMDg7MDRGNDswNDI3IDAzMDg7CiswNEY1OzA0RjU7MDQ0NyAwMzA4OzA0RjU7MDQ0NyAwMzA4OworMDRGODswNEY4OzA0MkIgMDMwODswNEY4OzA0MkIgMDMwODsKKzA0Rjk7MDRGOTswNDRCIDAzMDg7MDRGOTswNDRCIDAzMDg7CiswNTg3OzA1ODc7MDU4NzswNTY1IDA1ODI7MDU2NSAwNTgyOworMDYyMjswNjIyOzA2MjcgMDY1MzswNjIyOzA2MjcgMDY1MzsKKzA2MjM7MDYyMzswNjI3IDA2NTQ7MDYyMzswNjI3IDA2NTQ7CiswNjI0OzA2MjQ7MDY0OCAwNjU0OzA2MjQ7MDY0OCAwNjU0OworMDYyNTswNjI1OzA2MjcgMDY1NTswNjI1OzA2MjcgMDY1NTsKKzA2MjY7MDYyNjswNjRBIDA2NTQ7MDYyNjswNjRBIDA2NTQ7CiswNjc1OzA2NzU7MDY3NTswNjI3IDA2NzQ7MDYyNyAwNjc0OworMDY3NjswNjc2OzA2NzY7MDY0OCAwNjc0OzA2NDggMDY3NDsKKzA2Nzc7MDY3NzswNjc3OzA2QzcgMDY3NDswNkM3IDA2NzQ7CiswNjc4OzA2Nzg7MDY3ODswNjRBIDA2NzQ7MDY0QSAwNjc0OworMDZDMDswNkMwOzA2RDUgMDY1NDswNkMwOzA2RDUgMDY1NDsKKzA2QzI7MDZDMjswNkMxIDA2NTQ7MDZDMjswNkMxIDA2NTQ7CiswNkQzOzA2RDM7MDZEMiAwNjU0OzA2RDM7MDZEMiAwNjU0OworMDkyOTswOTI5OzA5MjggMDkzQzswOTI5OzA5MjggMDkzQzsKKzA5MzE7MDkzMTswOTMwIDA5M0M7MDkzMTswOTMwIDA5M0M7CiswOTM0OzA5MzQ7MDkzMyAwOTNDOzA5MzQ7MDkzMyAwOTNDOworMDk1ODswOTE1IDA5M0M7MDkxNSAwOTNDOzA5MTUgMDkzQzswOTE1IDA5M0M7CiswOTU5OzA5MTYgMDkzQzswOTE2IDA5M0M7MDkxNiAwOTNDOzA5MTYgMDkzQzsKKzA5NUE7MDkxNyAwOTNDOzA5MTcgMDkzQzswOTE3IDA5M0M7MDkxNyAwOTNDOworMDk1QjswOTFDIDA5M0M7MDkxQyAwOTNDOzA5MUMgMDkzQzswOTFDIDA5M0M7CiswOTVDOzA5MjEgMDkzQzswOTIxIDA5M0M7MDkyMSAwOTNDOzA5MjEgMDkzQzsKKzA5NUQ7MDkyMiAwOTNDOzA5MjIgMDkzQzswOTIyIDA5M0M7MDkyMiAwOTNDOworMDk1RTswOTJCIDA5M0M7MDkyQiAwOTNDOzA5MkIgMDkzQzswOTJCIDA5M0M7CiswOTVGOzA5MkYgMDkzQzswOTJGIDA5M0M7MDkyRiAwOTNDOzA5MkYgMDkzQzsKKzA5Q0I7MDlDQjswOUM3IDA5QkU7MDlDQjswOUM3IDA5QkU7CiswOUNDOzA5Q0M7MDlDNyAwOUQ3OzA5Q0M7MDlDNyAwOUQ3OworMDlEQzswOUExIDA5QkM7MDlBMSAwOUJDOzA5QTEgMDlCQzswOUExIDA5QkM7CiswOUREOzA5QTIgMDlCQzswOUEyIDA5QkM7MDlBMiAwOUJDOzA5QTIgMDlCQzsKKzA5REY7MDlBRiAwOUJDOzA5QUYgMDlCQzswOUFGIDA5QkM7MDlBRiAwOUJDOworMEEzMzswQTMyIDBBM0M7MEEzMiAwQTNDOzBBMzIgMEEzQzswQTMyIDBBM0M7CiswQTM2OzBBMzggMEEzQzswQTM4IDBBM0M7MEEzOCAwQTNDOzBBMzggMEEzQzsKKzBBNTk7MEExNiAwQTNDOzBBMTYgMEEzQzswQTE2IDBBM0M7MEExNiAwQTNDOworMEE1QTswQTE3IDBBM0M7MEExNyAwQTNDOzBBMTcgMEEzQzswQTE3IDBBM0M7CiswQTVCOzBBMUMgMEEzQzswQTFDIDBBM0M7MEExQyAwQTNDOzBBMUMgMEEzQzsKKzBBNUU7MEEyQiAwQTNDOzBBMkIgMEEzQzswQTJCIDBBM0M7MEEyQiAwQTNDOworMEI0ODswQjQ4OzBCNDcgMEI1NjswQjQ4OzBCNDcgMEI1NjsKKzBCNEI7MEI0QjswQjQ3IDBCM0U7MEI0QjswQjQ3IDBCM0U7CiswQjRDOzBCNEM7MEI0NyAwQjU3OzBCNEM7MEI0NyAwQjU3OworMEI1QzswQjIxIDBCM0M7MEIyMSAwQjNDOzBCMjEgMEIzQzswQjIxIDBCM0M7CiswQjVEOzBCMjIgMEIzQzswQjIyIDBCM0M7MEIyMiAwQjNDOzBCMjIgMEIzQzsKKzBCOTQ7MEI5NDswQjkyIDBCRDc7MEI5NDswQjkyIDBCRDc7CiswQkNBOzBCQ0E7MEJDNiAwQkJFOzBCQ0E7MEJDNiAwQkJFOworMEJDQjswQkNCOzBCQzcgMEJCRTswQkNCOzBCQzcgMEJCRTsKKzBCQ0M7MEJDQzswQkM2IDBCRDc7MEJDQzswQkM2IDBCRDc7CiswQzQ4OzBDNDg7MEM0NiAwQzU2OzBDNDg7MEM0NiAwQzU2OworMENDMDswQ0MwOzBDQkYgMENENTswQ0MwOzBDQkYgMENENTsKKzBDQzc7MENDNzswQ0M2IDBDRDU7MENDNzswQ0M2IDBDRDU7CiswQ0M4OzBDQzg7MENDNiAwQ0Q2OzBDQzg7MENDNiAwQ0Q2OworMENDQTswQ0NBOzBDQzYgMENDMjswQ0NBOzBDQzYgMENDMjsKKzBDQ0I7MENDQjswQ0M2IDBDQzIgMENENTswQ0NCOzBDQzYgMENDMiAwQ0Q1OworMEQ0QTswRDRBOzBENDYgMEQzRTswRDRBOzBENDYgMEQzRTsKKzBENEI7MEQ0QjswRDQ3IDBEM0U7MEQ0QjswRDQ3IDBEM0U7CiswRDRDOzBENEM7MEQ0NiAwRDU3OzBENEM7MEQ0NiAwRDU3OworMEREQTswRERBOzBERDkgMERDQTswRERBOzBERDkgMERDQTsKKzBEREM7MEREQzswREQ5IDBEQ0Y7MEREQzswREQ5IDBEQ0Y7CiswREREOzBEREQ7MEREOSAwRENGIDBEQ0E7MERERDswREQ5IDBEQ0YgMERDQTsKKzBEREU7MERERTswREQ5IDBEREY7MERERTswREQ5IDBEREY7CiswRTMzOzBFMzM7MEUzMzswRTREIDBFMzI7MEU0RCAwRTMyOworMEVCMzswRUIzOzBFQjM7MEVDRCAwRUIyOzBFQ0QgMEVCMjsKKzBFREM7MEVEQzswRURDOzBFQUIgMEU5OTswRUFCIDBFOTk7CiswRUREOzBFREQ7MEVERDswRUFCIDBFQTE7MEVBQiAwRUExOworMEYwQzswRjBDOzBGMEM7MEYwQjswRjBCOworMEY0MzswRjQyIDBGQjc7MEY0MiAwRkI3OzBGNDIgMEZCNzswRjQyIDBGQjc7CiswRjREOzBGNEMgMEZCNzswRjRDIDBGQjc7MEY0QyAwRkI3OzBGNEMgMEZCNzsKKzBGNTI7MEY1MSAwRkI3OzBGNTEgMEZCNzswRjUxIDBGQjc7MEY1MSAwRkI3OworMEY1NzswRjU2IDBGQjc7MEY1NiAwRkI3OzBGNTYgMEZCNzswRjU2IDBGQjc7CiswRjVDOzBGNUIgMEZCNzswRjVCIDBGQjc7MEY1QiAwRkI3OzBGNUIgMEZCNzsKKzBGNjk7MEY0MCAwRkI1OzBGNDAgMEZCNTswRjQwIDBGQjU7MEY0MCAwRkI1OworMEY3MzswRjcxIDBGNzI7MEY3MSAwRjcyOzBGNzEgMEY3MjswRjcxIDBGNzI7CiswRjc1OzBGNzEgMEY3NDswRjcxIDBGNzQ7MEY3MSAwRjc0OzBGNzEgMEY3NDsKKzBGNzY7MEZCMiAwRjgwOzBGQjIgMEY4MDswRkIyIDBGODA7MEZCMiAwRjgwOworMEY3NzswRjc3OzBGNzc7MEZCMiAwRjcxIDBGODA7MEZCMiAwRjcxIDBGODA7CiswRjc4OzBGQjMgMEY4MDswRkIzIDBGODA7MEZCMyAwRjgwOzBGQjMgMEY4MDsKKzBGNzk7MEY3OTswRjc5OzBGQjMgMEY3MSAwRjgwOzBGQjMgMEY3MSAwRjgwOworMEY4MTswRjcxIDBGODA7MEY3MSAwRjgwOzBGNzEgMEY4MDswRjcxIDBGODA7CiswRjkzOzBGOTIgMEZCNzswRjkyIDBGQjc7MEY5MiAwRkI3OzBGOTIgMEZCNzsKKzBGOUQ7MEY5QyAwRkI3OzBGOUMgMEZCNzswRjlDIDBGQjc7MEY5QyAwRkI3OworMEZBMjswRkExIDBGQjc7MEZBMSAwRkI3OzBGQTEgMEZCNzswRkExIDBGQjc7CiswRkE3OzBGQTYgMEZCNzswRkE2IDBGQjc7MEZBNiAwRkI3OzBGQTYgMEZCNzsKKzBGQUM7MEZBQiAwRkI3OzBGQUIgMEZCNzswRkFCIDBGQjc7MEZBQiAwRkI3OworMEZCOTswRjkwIDBGQjU7MEY5MCAwRkI1OzBGOTAgMEZCNTswRjkwIDBGQjU7CisxMDI2OzEwMjY7MTAyNSAxMDJFOzEwMjY7MTAyNSAxMDJFOworMUUwMDsxRTAwOzAwNDEgMDMyNTsxRTAwOzAwNDEgMDMyNTsKKzFFMDE7MUUwMTswMDYxIDAzMjU7MUUwMTswMDYxIDAzMjU7CisxRTAyOzFFMDI7MDA0MiAwMzA3OzFFMDI7MDA0MiAwMzA3OworMUUwMzsxRTAzOzAwNjIgMDMwNzsxRTAzOzAwNjIgMDMwNzsKKzFFMDQ7MUUwNDswMDQyIDAzMjM7MUUwNDswMDQyIDAzMjM7CisxRTA1OzFFMDU7MDA2MiAwMzIzOzFFMDU7MDA2MiAwMzIzOworMUUwNjsxRTA2OzAwNDIgMDMzMTsxRTA2OzAwNDIgMDMzMTsKKzFFMDc7MUUwNzswMDYyIDAzMzE7MUUwNzswMDYyIDAzMzE7CisxRTA4OzFFMDg7MDA0MyAwMzI3IDAzMDE7MUUwODswMDQzIDAzMjcgMDMwMTsKKzFFMDk7MUUwOTswMDYzIDAzMjcgMDMwMTsxRTA5OzAwNjMgMDMyNyAwMzAxOworMUUwQTsxRTBBOzAwNDQgMDMwNzsxRTBBOzAwNDQgMDMwNzsKKzFFMEI7MUUwQjswMDY0IDAzMDc7MUUwQjswMDY0IDAzMDc7CisxRTBDOzFFMEM7MDA0NCAwMzIzOzFFMEM7MDA0NCAwMzIzOworMUUwRDsxRTBEOzAwNjQgMDMyMzsxRTBEOzAwNjQgMDMyMzsKKzFFMEU7MUUwRTswMDQ0IDAzMzE7MUUwRTswMDQ0IDAzMzE7CisxRTBGOzFFMEY7MDA2NCAwMzMxOzFFMEY7MDA2NCAwMzMxOworMUUxMDsxRTEwOzAwNDQgMDMyNzsxRTEwOzAwNDQgMDMyNzsKKzFFMTE7MUUxMTswMDY0IDAzMjc7MUUxMTswMDY0IDAzMjc7CisxRTEyOzFFMTI7MDA0NCAwMzJEOzFFMTI7MDA0NCAwMzJEOworMUUxMzsxRTEzOzAwNjQgMDMyRDsxRTEzOzAwNjQgMDMyRDsKKzFFMTQ7MUUxNDswMDQ1IDAzMDQgMDMwMDsxRTE0OzAwNDUgMDMwNCAwMzAwOworMUUxNTsxRTE1OzAwNjUgMDMwNCAwMzAwOzFFMTU7MDA2NSAwMzA0IDAzMDA7CisxRTE2OzFFMTY7MDA0NSAwMzA0IDAzMDE7MUUxNjswMDQ1IDAzMDQgMDMwMTsKKzFFMTc7MUUxNzswMDY1IDAzMDQgMDMwMTsxRTE3OzAwNjUgMDMwNCAwMzAxOworMUUxODsxRTE4OzAwNDUgMDMyRDsxRTE4OzAwNDUgMDMyRDsKKzFFMTk7MUUxOTswMDY1IDAzMkQ7MUUxOTswMDY1IDAzMkQ7CisxRTFBOzFFMUE7MDA0NSAwMzMwOzFFMUE7MDA0NSAwMzMwOworMUUxQjsxRTFCOzAwNjUgMDMzMDsxRTFCOzAwNjUgMDMzMDsKKzFFMUM7MUUxQzswMDQ1IDAzMjcgMDMwNjsxRTFDOzAwNDUgMDMyNyAwMzA2OworMUUxRDsxRTFEOzAwNjUgMDMyNyAwMzA2OzFFMUQ7MDA2NSAwMzI3IDAzMDY7CisxRTFFOzFFMUU7MDA0NiAwMzA3OzFFMUU7MDA0NiAwMzA3OworMUUxRjsxRTFGOzAwNjYgMDMwNzsxRTFGOzAwNjYgMDMwNzsKKzFFMjA7MUUyMDswMDQ3IDAzMDQ7MUUyMDswMDQ3IDAzMDQ7CisxRTIxOzFFMjE7MDA2NyAwMzA0OzFFMjE7MDA2NyAwMzA0OworMUUyMjsxRTIyOzAwNDggMDMwNzsxRTIyOzAwNDggMDMwNzsKKzFFMjM7MUUyMzswMDY4IDAzMDc7MUUyMzswMDY4IDAzMDc7CisxRTI0OzFFMjQ7MDA0OCAwMzIzOzFFMjQ7MDA0OCAwMzIzOworMUUyNTsxRTI1OzAwNjggMDMyMzsxRTI1OzAwNjggMDMyMzsKKzFFMjY7MUUyNjswMDQ4IDAzMDg7MUUyNjswMDQ4IDAzMDg7CisxRTI3OzFFMjc7MDA2OCAwMzA4OzFFMjc7MDA2OCAwMzA4OworMUUyODsxRTI4OzAwNDggMDMyNzsxRTI4OzAwNDggMDMyNzsKKzFFMjk7MUUyOTswMDY4IDAzMjc7MUUyOTswMDY4IDAzMjc7CisxRTJBOzFFMkE7MDA0OCAwMzJFOzFFMkE7MDA0OCAwMzJFOworMUUyQjsxRTJCOzAwNjggMDMyRTsxRTJCOzAwNjggMDMyRTsKKzFFMkM7MUUyQzswMDQ5IDAzMzA7MUUyQzswMDQ5IDAzMzA7CisxRTJEOzFFMkQ7MDA2OSAwMzMwOzFFMkQ7MDA2OSAwMzMwOworMUUyRTsxRTJFOzAwNDkgMDMwOCAwMzAxOzFFMkU7MDA0OSAwMzA4IDAzMDE7CisxRTJGOzFFMkY7MDA2OSAwMzA4IDAzMDE7MUUyRjswMDY5IDAzMDggMDMwMTsKKzFFMzA7MUUzMDswMDRCIDAzMDE7MUUzMDswMDRCIDAzMDE7CisxRTMxOzFFMzE7MDA2QiAwMzAxOzFFMzE7MDA2QiAwMzAxOworMUUzMjsxRTMyOzAwNEIgMDMyMzsxRTMyOzAwNEIgMDMyMzsKKzFFMzM7MUUzMzswMDZCIDAzMjM7MUUzMzswMDZCIDAzMjM7CisxRTM0OzFFMzQ7MDA0QiAwMzMxOzFFMzQ7MDA0QiAwMzMxOworMUUzNTsxRTM1OzAwNkIgMDMzMTsxRTM1OzAwNkIgMDMzMTsKKzFFMzY7MUUzNjswMDRDIDAzMjM7MUUzNjswMDRDIDAzMjM7CisxRTM3OzFFMzc7MDA2QyAwMzIzOzFFMzc7MDA2QyAwMzIzOworMUUzODsxRTM4OzAwNEMgMDMyMyAwMzA0OzFFMzg7MDA0QyAwMzIzIDAzMDQ7CisxRTM5OzFFMzk7MDA2QyAwMzIzIDAzMDQ7MUUzOTswMDZDIDAzMjMgMDMwNDsKKzFFM0E7MUUzQTswMDRDIDAzMzE7MUUzQTswMDRDIDAzMzE7CisxRTNCOzFFM0I7MDA2QyAwMzMxOzFFM0I7MDA2QyAwMzMxOworMUUzQzsxRTNDOzAwNEMgMDMyRDsxRTNDOzAwNEMgMDMyRDsKKzFFM0Q7MUUzRDswMDZDIDAzMkQ7MUUzRDswMDZDIDAzMkQ7CisxRTNFOzFFM0U7MDA0RCAwMzAxOzFFM0U7MDA0RCAwMzAxOworMUUzRjsxRTNGOzAwNkQgMDMwMTsxRTNGOzAwNkQgMDMwMTsKKzFFNDA7MUU0MDswMDREIDAzMDc7MUU0MDswMDREIDAzMDc7CisxRTQxOzFFNDE7MDA2RCAwMzA3OzFFNDE7MDA2RCAwMzA3OworMUU0MjsxRTQyOzAwNEQgMDMyMzsxRTQyOzAwNEQgMDMyMzsKKzFFNDM7MUU0MzswMDZEIDAzMjM7MUU0MzswMDZEIDAzMjM7CisxRTQ0OzFFNDQ7MDA0RSAwMzA3OzFFNDQ7MDA0RSAwMzA3OworMUU0NTsxRTQ1OzAwNkUgMDMwNzsxRTQ1OzAwNkUgMDMwNzsKKzFFNDY7MUU0NjswMDRFIDAzMjM7MUU0NjswMDRFIDAzMjM7CisxRTQ3OzFFNDc7MDA2RSAwMzIzOzFFNDc7MDA2RSAwMzIzOworMUU0ODsxRTQ4OzAwNEUgMDMzMTsxRTQ4OzAwNEUgMDMzMTsKKzFFNDk7MUU0OTswMDZFIDAzMzE7MUU0OTswMDZFIDAzMzE7CisxRTRBOzFFNEE7MDA0RSAwMzJEOzFFNEE7MDA0RSAwMzJEOworMUU0QjsxRTRCOzAwNkUgMDMyRDsxRTRCOzAwNkUgMDMyRDsKKzFFNEM7MUU0QzswMDRGIDAzMDMgMDMwMTsxRTRDOzAwNEYgMDMwMyAwMzAxOworMUU0RDsxRTREOzAwNkYgMDMwMyAwMzAxOzFFNEQ7MDA2RiAwMzAzIDAzMDE7CisxRTRFOzFFNEU7MDA0RiAwMzAzIDAzMDg7MUU0RTswMDRGIDAzMDMgMDMwODsKKzFFNEY7MUU0RjswMDZGIDAzMDMgMDMwODsxRTRGOzAwNkYgMDMwMyAwMzA4OworMUU1MDsxRTUwOzAwNEYgMDMwNCAwMzAwOzFFNTA7MDA0RiAwMzA0IDAzMDA7CisxRTUxOzFFNTE7MDA2RiAwMzA0IDAzMDA7MUU1MTswMDZGIDAzMDQgMDMwMDsKKzFFNTI7MUU1MjswMDRGIDAzMDQgMDMwMTsxRTUyOzAwNEYgMDMwNCAwMzAxOworMUU1MzsxRTUzOzAwNkYgMDMwNCAwMzAxOzFFNTM7MDA2RiAwMzA0IDAzMDE7CisxRTU0OzFFNTQ7MDA1MCAwMzAxOzFFNTQ7MDA1MCAwMzAxOworMUU1NTsxRTU1OzAwNzAgMDMwMTsxRTU1OzAwNzAgMDMwMTsKKzFFNTY7MUU1NjswMDUwIDAzMDc7MUU1NjswMDUwIDAzMDc7CisxRTU3OzFFNTc7MDA3MCAwMzA3OzFFNTc7MDA3MCAwMzA3OworMUU1ODsxRTU4OzAwNTIgMDMwNzsxRTU4OzAwNTIgMDMwNzsKKzFFNTk7MUU1OTswMDcyIDAzMDc7MUU1OTswMDcyIDAzMDc7CisxRTVBOzFFNUE7MDA1MiAwMzIzOzFFNUE7MDA1MiAwMzIzOworMUU1QjsxRTVCOzAwNzIgMDMyMzsxRTVCOzAwNzIgMDMyMzsKKzFFNUM7MUU1QzswMDUyIDAzMjMgMDMwNDsxRTVDOzAwNTIgMDMyMyAwMzA0OworMUU1RDsxRTVEOzAwNzIgMDMyMyAwMzA0OzFFNUQ7MDA3MiAwMzIzIDAzMDQ7CisxRTVFOzFFNUU7MDA1MiAwMzMxOzFFNUU7MDA1MiAwMzMxOworMUU1RjsxRTVGOzAwNzIgMDMzMTsxRTVGOzAwNzIgMDMzMTsKKzFFNjA7MUU2MDswMDUzIDAzMDc7MUU2MDswMDUzIDAzMDc7CisxRTYxOzFFNjE7MDA3MyAwMzA3OzFFNjE7MDA3MyAwMzA3OworMUU2MjsxRTYyOzAwNTMgMDMyMzsxRTYyOzAwNTMgMDMyMzsKKzFFNjM7MUU2MzswMDczIDAzMjM7MUU2MzswMDczIDAzMjM7CisxRTY0OzFFNjQ7MDA1MyAwMzAxIDAzMDc7MUU2NDswMDUzIDAzMDEgMDMwNzsKKzFFNjU7MUU2NTswMDczIDAzMDEgMDMwNzsxRTY1OzAwNzMgMDMwMSAwMzA3OworMUU2NjsxRTY2OzAwNTMgMDMwQyAwMzA3OzFFNjY7MDA1MyAwMzBDIDAzMDc7CisxRTY3OzFFNjc7MDA3MyAwMzBDIDAzMDc7MUU2NzswMDczIDAzMEMgMDMwNzsKKzFFNjg7MUU2ODswMDUzIDAzMjMgMDMwNzsxRTY4OzAwNTMgMDMyMyAwMzA3OworMUU2OTsxRTY5OzAwNzMgMDMyMyAwMzA3OzFFNjk7MDA3MyAwMzIzIDAzMDc7CisxRTZBOzFFNkE7MDA1NCAwMzA3OzFFNkE7MDA1NCAwMzA3OworMUU2QjsxRTZCOzAwNzQgMDMwNzsxRTZCOzAwNzQgMDMwNzsKKzFFNkM7MUU2QzswMDU0IDAzMjM7MUU2QzswMDU0IDAzMjM7CisxRTZEOzFFNkQ7MDA3NCAwMzIzOzFFNkQ7MDA3NCAwMzIzOworMUU2RTsxRTZFOzAwNTQgMDMzMTsxRTZFOzAwNTQgMDMzMTsKKzFFNkY7MUU2RjswMDc0IDAzMzE7MUU2RjswMDc0IDAzMzE7CisxRTcwOzFFNzA7MDA1NCAwMzJEOzFFNzA7MDA1NCAwMzJEOworMUU3MTsxRTcxOzAwNzQgMDMyRDsxRTcxOzAwNzQgMDMyRDsKKzFFNzI7MUU3MjswMDU1IDAzMjQ7MUU3MjswMDU1IDAzMjQ7CisxRTczOzFFNzM7MDA3NSAwMzI0OzFFNzM7MDA3NSAwMzI0OworMUU3NDsxRTc0OzAwNTUgMDMzMDsxRTc0OzAwNTUgMDMzMDsKKzFFNzU7MUU3NTswMDc1IDAzMzA7MUU3NTswMDc1IDAzMzA7CisxRTc2OzFFNzY7MDA1NSAwMzJEOzFFNzY7MDA1NSAwMzJEOworMUU3NzsxRTc3OzAwNzUgMDMyRDsxRTc3OzAwNzUgMDMyRDsKKzFFNzg7MUU3ODswMDU1IDAzMDMgMDMwMTsxRTc4OzAwNTUgMDMwMyAwMzAxOworMUU3OTsxRTc5OzAwNzUgMDMwMyAwMzAxOzFFNzk7MDA3NSAwMzAzIDAzMDE7CisxRTdBOzFFN0E7MDA1NSAwMzA0IDAzMDg7MUU3QTswMDU1IDAzMDQgMDMwODsKKzFFN0I7MUU3QjswMDc1IDAzMDQgMDMwODsxRTdCOzAwNzUgMDMwNCAwMzA4OworMUU3QzsxRTdDOzAwNTYgMDMwMzsxRTdDOzAwNTYgMDMwMzsKKzFFN0Q7MUU3RDswMDc2IDAzMDM7MUU3RDswMDc2IDAzMDM7CisxRTdFOzFFN0U7MDA1NiAwMzIzOzFFN0U7MDA1NiAwMzIzOworMUU3RjsxRTdGOzAwNzYgMDMyMzsxRTdGOzAwNzYgMDMyMzsKKzFFODA7MUU4MDswMDU3IDAzMDA7MUU4MDswMDU3IDAzMDA7CisxRTgxOzFFODE7MDA3NyAwMzAwOzFFODE7MDA3NyAwMzAwOworMUU4MjsxRTgyOzAwNTcgMDMwMTsxRTgyOzAwNTcgMDMwMTsKKzFFODM7MUU4MzswMDc3IDAzMDE7MUU4MzswMDc3IDAzMDE7CisxRTg0OzFFODQ7MDA1NyAwMzA4OzFFODQ7MDA1NyAwMzA4OworMUU4NTsxRTg1OzAwNzcgMDMwODsxRTg1OzAwNzcgMDMwODsKKzFFODY7MUU4NjswMDU3IDAzMDc7MUU4NjswMDU3IDAzMDc7CisxRTg3OzFFODc7MDA3NyAwMzA3OzFFODc7MDA3NyAwMzA3OworMUU4ODsxRTg4OzAwNTcgMDMyMzsxRTg4OzAwNTcgMDMyMzsKKzFFODk7MUU4OTswMDc3IDAzMjM7MUU4OTswMDc3IDAzMjM7CisxRThBOzFFOEE7MDA1OCAwMzA3OzFFOEE7MDA1OCAwMzA3OworMUU4QjsxRThCOzAwNzggMDMwNzsxRThCOzAwNzggMDMwNzsKKzFFOEM7MUU4QzswMDU4IDAzMDg7MUU4QzswMDU4IDAzMDg7CisxRThEOzFFOEQ7MDA3OCAwMzA4OzFFOEQ7MDA3OCAwMzA4OworMUU4RTsxRThFOzAwNTkgMDMwNzsxRThFOzAwNTkgMDMwNzsKKzFFOEY7MUU4RjswMDc5IDAzMDc7MUU4RjswMDc5IDAzMDc7CisxRTkwOzFFOTA7MDA1QSAwMzAyOzFFOTA7MDA1QSAwMzAyOworMUU5MTsxRTkxOzAwN0EgMDMwMjsxRTkxOzAwN0EgMDMwMjsKKzFFOTI7MUU5MjswMDVBIDAzMjM7MUU5MjswMDVBIDAzMjM7CisxRTkzOzFFOTM7MDA3QSAwMzIzOzFFOTM7MDA3QSAwMzIzOworMUU5NDsxRTk0OzAwNUEgMDMzMTsxRTk0OzAwNUEgMDMzMTsKKzFFOTU7MUU5NTswMDdBIDAzMzE7MUU5NTswMDdBIDAzMzE7CisxRTk2OzFFOTY7MDA2OCAwMzMxOzFFOTY7MDA2OCAwMzMxOworMUU5NzsxRTk3OzAwNzQgMDMwODsxRTk3OzAwNzQgMDMwODsKKzFFOTg7MUU5ODswMDc3IDAzMEE7MUU5ODswMDc3IDAzMEE7CisxRTk5OzFFOTk7MDA3OSAwMzBBOzFFOTk7MDA3OSAwMzBBOworMUU5QTsxRTlBOzFFOUE7MDA2MSAwMkJFOzAwNjEgMDJCRTsKKzFFOUI7MUU5QjswMTdGIDAzMDc7MUU2MTswMDczIDAzMDc7CisxRUEwOzFFQTA7MDA0MSAwMzIzOzFFQTA7MDA0MSAwMzIzOworMUVBMTsxRUExOzAwNjEgMDMyMzsxRUExOzAwNjEgMDMyMzsKKzFFQTI7MUVBMjswMDQxIDAzMDk7MUVBMjswMDQxIDAzMDk7CisxRUEzOzFFQTM7MDA2MSAwMzA5OzFFQTM7MDA2MSAwMzA5OworMUVBNDsxRUE0OzAwNDEgMDMwMiAwMzAxOzFFQTQ7MDA0MSAwMzAyIDAzMDE7CisxRUE1OzFFQTU7MDA2MSAwMzAyIDAzMDE7MUVBNTswMDYxIDAzMDIgMDMwMTsKKzFFQTY7MUVBNjswMDQxIDAzMDIgMDMwMDsxRUE2OzAwNDEgMDMwMiAwMzAwOworMUVBNzsxRUE3OzAwNjEgMDMwMiAwMzAwOzFFQTc7MDA2MSAwMzAyIDAzMDA7CisxRUE4OzFFQTg7MDA0MSAwMzAyIDAzMDk7MUVBODswMDQxIDAzMDIgMDMwOTsKKzFFQTk7MUVBOTswMDYxIDAzMDIgMDMwOTsxRUE5OzAwNjEgMDMwMiAwMzA5OworMUVBQTsxRUFBOzAwNDEgMDMwMiAwMzAzOzFFQUE7MDA0MSAwMzAyIDAzMDM7CisxRUFCOzFFQUI7MDA2MSAwMzAyIDAzMDM7MUVBQjswMDYxIDAzMDIgMDMwMzsKKzFFQUM7MUVBQzswMDQxIDAzMjMgMDMwMjsxRUFDOzAwNDEgMDMyMyAwMzAyOworMUVBRDsxRUFEOzAwNjEgMDMyMyAwMzAyOzFFQUQ7MDA2MSAwMzIzIDAzMDI7CisxRUFFOzFFQUU7MDA0MSAwMzA2IDAzMDE7MUVBRTswMDQxIDAzMDYgMDMwMTsKKzFFQUY7MUVBRjswMDYxIDAzMDYgMDMwMTsxRUFGOzAwNjEgMDMwNiAwMzAxOworMUVCMDsxRUIwOzAwNDEgMDMwNiAwMzAwOzFFQjA7MDA0MSAwMzA2IDAzMDA7CisxRUIxOzFFQjE7MDA2MSAwMzA2IDAzMDA7MUVCMTswMDYxIDAzMDYgMDMwMDsKKzFFQjI7MUVCMjswMDQxIDAzMDYgMDMwOTsxRUIyOzAwNDEgMDMwNiAwMzA5OworMUVCMzsxRUIzOzAwNjEgMDMwNiAwMzA5OzFFQjM7MDA2MSAwMzA2IDAzMDk7CisxRUI0OzFFQjQ7MDA0MSAwMzA2IDAzMDM7MUVCNDswMDQxIDAzMDYgMDMwMzsKKzFFQjU7MUVCNTswMDYxIDAzMDYgMDMwMzsxRUI1OzAwNjEgMDMwNiAwMzAzOworMUVCNjsxRUI2OzAwNDEgMDMyMyAwMzA2OzFFQjY7MDA0MSAwMzIzIDAzMDY7CisxRUI3OzFFQjc7MDA2MSAwMzIzIDAzMDY7MUVCNzswMDYxIDAzMjMgMDMwNjsKKzFFQjg7MUVCODswMDQ1IDAzMjM7MUVCODswMDQ1IDAzMjM7CisxRUI5OzFFQjk7MDA2NSAwMzIzOzFFQjk7MDA2NSAwMzIzOworMUVCQTsxRUJBOzAwNDUgMDMwOTsxRUJBOzAwNDUgMDMwOTsKKzFFQkI7MUVCQjswMDY1IDAzMDk7MUVCQjswMDY1IDAzMDk7CisxRUJDOzFFQkM7MDA0NSAwMzAzOzFFQkM7MDA0NSAwMzAzOworMUVCRDsxRUJEOzAwNjUgMDMwMzsxRUJEOzAwNjUgMDMwMzsKKzFFQkU7MUVCRTswMDQ1IDAzMDIgMDMwMTsxRUJFOzAwNDUgMDMwMiAwMzAxOworMUVCRjsxRUJGOzAwNjUgMDMwMiAwMzAxOzFFQkY7MDA2NSAwMzAyIDAzMDE7CisxRUMwOzFFQzA7MDA0NSAwMzAyIDAzMDA7MUVDMDswMDQ1IDAzMDIgMDMwMDsKKzFFQzE7MUVDMTswMDY1IDAzMDIgMDMwMDsxRUMxOzAwNjUgMDMwMiAwMzAwOworMUVDMjsxRUMyOzAwNDUgMDMwMiAwMzA5OzFFQzI7MDA0NSAwMzAyIDAzMDk7CisxRUMzOzFFQzM7MDA2NSAwMzAyIDAzMDk7MUVDMzswMDY1IDAzMDIgMDMwOTsKKzFFQzQ7MUVDNDswMDQ1IDAzMDIgMDMwMzsxRUM0OzAwNDUgMDMwMiAwMzAzOworMUVDNTsxRUM1OzAwNjUgMDMwMiAwMzAzOzFFQzU7MDA2NSAwMzAyIDAzMDM7CisxRUM2OzFFQzY7MDA0NSAwMzIzIDAzMDI7MUVDNjswMDQ1IDAzMjMgMDMwMjsKKzFFQzc7MUVDNzswMDY1IDAzMjMgMDMwMjsxRUM3OzAwNjUgMDMyMyAwMzAyOworMUVDODsxRUM4OzAwNDkgMDMwOTsxRUM4OzAwNDkgMDMwOTsKKzFFQzk7MUVDOTswMDY5IDAzMDk7MUVDOTswMDY5IDAzMDk7CisxRUNBOzFFQ0E7MDA0OSAwMzIzOzFFQ0E7MDA0OSAwMzIzOworMUVDQjsxRUNCOzAwNjkgMDMyMzsxRUNCOzAwNjkgMDMyMzsKKzFFQ0M7MUVDQzswMDRGIDAzMjM7MUVDQzswMDRGIDAzMjM7CisxRUNEOzFFQ0Q7MDA2RiAwMzIzOzFFQ0Q7MDA2RiAwMzIzOworMUVDRTsxRUNFOzAwNEYgMDMwOTsxRUNFOzAwNEYgMDMwOTsKKzFFQ0Y7MUVDRjswMDZGIDAzMDk7MUVDRjswMDZGIDAzMDk7CisxRUQwOzFFRDA7MDA0RiAwMzAyIDAzMDE7MUVEMDswMDRGIDAzMDIgMDMwMTsKKzFFRDE7MUVEMTswMDZGIDAzMDIgMDMwMTsxRUQxOzAwNkYgMDMwMiAwMzAxOworMUVEMjsxRUQyOzAwNEYgMDMwMiAwMzAwOzFFRDI7MDA0RiAwMzAyIDAzMDA7CisxRUQzOzFFRDM7MDA2RiAwMzAyIDAzMDA7MUVEMzswMDZGIDAzMDIgMDMwMDsKKzFFRDQ7MUVENDswMDRGIDAzMDIgMDMwOTsxRUQ0OzAwNEYgMDMwMiAwMzA5OworMUVENTsxRUQ1OzAwNkYgMDMwMiAwMzA5OzFFRDU7MDA2RiAwMzAyIDAzMDk7CisxRUQ2OzFFRDY7MDA0RiAwMzAyIDAzMDM7MUVENjswMDRGIDAzMDIgMDMwMzsKKzFFRDc7MUVENzswMDZGIDAzMDIgMDMwMzsxRUQ3OzAwNkYgMDMwMiAwMzAzOworMUVEODsxRUQ4OzAwNEYgMDMyMyAwMzAyOzFFRDg7MDA0RiAwMzIzIDAzMDI7CisxRUQ5OzFFRDk7MDA2RiAwMzIzIDAzMDI7MUVEOTswMDZGIDAzMjMgMDMwMjsKKzFFREE7MUVEQTswMDRGIDAzMUIgMDMwMTsxRURBOzAwNEYgMDMxQiAwMzAxOworMUVEQjsxRURCOzAwNkYgMDMxQiAwMzAxOzFFREI7MDA2RiAwMzFCIDAzMDE7CisxRURDOzFFREM7MDA0RiAwMzFCIDAzMDA7MUVEQzswMDRGIDAzMUIgMDMwMDsKKzFFREQ7MUVERDswMDZGIDAzMUIgMDMwMDsxRUREOzAwNkYgMDMxQiAwMzAwOworMUVERTsxRURFOzAwNEYgMDMxQiAwMzA5OzFFREU7MDA0RiAwMzFCIDAzMDk7CisxRURGOzFFREY7MDA2RiAwMzFCIDAzMDk7MUVERjswMDZGIDAzMUIgMDMwOTsKKzFFRTA7MUVFMDswMDRGIDAzMUIgMDMwMzsxRUUwOzAwNEYgMDMxQiAwMzAzOworMUVFMTsxRUUxOzAwNkYgMDMxQiAwMzAzOzFFRTE7MDA2RiAwMzFCIDAzMDM7CisxRUUyOzFFRTI7MDA0RiAwMzFCIDAzMjM7MUVFMjswMDRGIDAzMUIgMDMyMzsKKzFFRTM7MUVFMzswMDZGIDAzMUIgMDMyMzsxRUUzOzAwNkYgMDMxQiAwMzIzOworMUVFNDsxRUU0OzAwNTUgMDMyMzsxRUU0OzAwNTUgMDMyMzsKKzFFRTU7MUVFNTswMDc1IDAzMjM7MUVFNTswMDc1IDAzMjM7CisxRUU2OzFFRTY7MDA1NSAwMzA5OzFFRTY7MDA1NSAwMzA5OworMUVFNzsxRUU3OzAwNzUgMDMwOTsxRUU3OzAwNzUgMDMwOTsKKzFFRTg7MUVFODswMDU1IDAzMUIgMDMwMTsxRUU4OzAwNTUgMDMxQiAwMzAxOworMUVFOTsxRUU5OzAwNzUgMDMxQiAwMzAxOzFFRTk7MDA3NSAwMzFCIDAzMDE7CisxRUVBOzFFRUE7MDA1NSAwMzFCIDAzMDA7MUVFQTswMDU1IDAzMUIgMDMwMDsKKzFFRUI7MUVFQjswMDc1IDAzMUIgMDMwMDsxRUVCOzAwNzUgMDMxQiAwMzAwOworMUVFQzsxRUVDOzAwNTUgMDMxQiAwMzA5OzFFRUM7MDA1NSAwMzFCIDAzMDk7CisxRUVEOzFFRUQ7MDA3NSAwMzFCIDAzMDk7MUVFRDswMDc1IDAzMUIgMDMwOTsKKzFFRUU7MUVFRTswMDU1IDAzMUIgMDMwMzsxRUVFOzAwNTUgMDMxQiAwMzAzOworMUVFRjsxRUVGOzAwNzUgMDMxQiAwMzAzOzFFRUY7MDA3NSAwMzFCIDAzMDM7CisxRUYwOzFFRjA7MDA1NSAwMzFCIDAzMjM7MUVGMDswMDU1IDAzMUIgMDMyMzsKKzFFRjE7MUVGMTswMDc1IDAzMUIgMDMyMzsxRUYxOzAwNzUgMDMxQiAwMzIzOworMUVGMjsxRUYyOzAwNTkgMDMwMDsxRUYyOzAwNTkgMDMwMDsKKzFFRjM7MUVGMzswMDc5IDAzMDA7MUVGMzswMDc5IDAzMDA7CisxRUY0OzFFRjQ7MDA1OSAwMzIzOzFFRjQ7MDA1OSAwMzIzOworMUVGNTsxRUY1OzAwNzkgMDMyMzsxRUY1OzAwNzkgMDMyMzsKKzFFRjY7MUVGNjswMDU5IDAzMDk7MUVGNjswMDU5IDAzMDk7CisxRUY3OzFFRjc7MDA3OSAwMzA5OzFFRjc7MDA3OSAwMzA5OworMUVGODsxRUY4OzAwNTkgMDMwMzsxRUY4OzAwNTkgMDMwMzsKKzFFRjk7MUVGOTswMDc5IDAzMDM7MUVGOTswMDc5IDAzMDM7CisxRjAwOzFGMDA7MDNCMSAwMzEzOzFGMDA7MDNCMSAwMzEzOworMUYwMTsxRjAxOzAzQjEgMDMxNDsxRjAxOzAzQjEgMDMxNDsKKzFGMDI7MUYwMjswM0IxIDAzMTMgMDMwMDsxRjAyOzAzQjEgMDMxMyAwMzAwOworMUYwMzsxRjAzOzAzQjEgMDMxNCAwMzAwOzFGMDM7MDNCMSAwMzE0IDAzMDA7CisxRjA0OzFGMDQ7MDNCMSAwMzEzIDAzMDE7MUYwNDswM0IxIDAzMTMgMDMwMTsKKzFGMDU7MUYwNTswM0IxIDAzMTQgMDMwMTsxRjA1OzAzQjEgMDMxNCAwMzAxOworMUYwNjsxRjA2OzAzQjEgMDMxMyAwMzQyOzFGMDY7MDNCMSAwMzEzIDAzNDI7CisxRjA3OzFGMDc7MDNCMSAwMzE0IDAzNDI7MUYwNzswM0IxIDAzMTQgMDM0MjsKKzFGMDg7MUYwODswMzkxIDAzMTM7MUYwODswMzkxIDAzMTM7CisxRjA5OzFGMDk7MDM5MSAwMzE0OzFGMDk7MDM5MSAwMzE0OworMUYwQTsxRjBBOzAzOTEgMDMxMyAwMzAwOzFGMEE7MDM5MSAwMzEzIDAzMDA7CisxRjBCOzFGMEI7MDM5MSAwMzE0IDAzMDA7MUYwQjswMzkxIDAzMTQgMDMwMDsKKzFGMEM7MUYwQzswMzkxIDAzMTMgMDMwMTsxRjBDOzAzOTEgMDMxMyAwMzAxOworMUYwRDsxRjBEOzAzOTEgMDMxNCAwMzAxOzFGMEQ7MDM5MSAwMzE0IDAzMDE7CisxRjBFOzFGMEU7MDM5MSAwMzEzIDAzNDI7MUYwRTswMzkxIDAzMTMgMDM0MjsKKzFGMEY7MUYwRjswMzkxIDAzMTQgMDM0MjsxRjBGOzAzOTEgMDMxNCAwMzQyOworMUYxMDsxRjEwOzAzQjUgMDMxMzsxRjEwOzAzQjUgMDMxMzsKKzFGMTE7MUYxMTswM0I1IDAzMTQ7MUYxMTswM0I1IDAzMTQ7CisxRjEyOzFGMTI7MDNCNSAwMzEzIDAzMDA7MUYxMjswM0I1IDAzMTMgMDMwMDsKKzFGMTM7MUYxMzswM0I1IDAzMTQgMDMwMDsxRjEzOzAzQjUgMDMxNCAwMzAwOworMUYxNDsxRjE0OzAzQjUgMDMxMyAwMzAxOzFGMTQ7MDNCNSAwMzEzIDAzMDE7CisxRjE1OzFGMTU7MDNCNSAwMzE0IDAzMDE7MUYxNTswM0I1IDAzMTQgMDMwMTsKKzFGMTg7MUYxODswMzk1IDAzMTM7MUYxODswMzk1IDAzMTM7CisxRjE5OzFGMTk7MDM5NSAwMzE0OzFGMTk7MDM5NSAwMzE0OworMUYxQTsxRjFBOzAzOTUgMDMxMyAwMzAwOzFGMUE7MDM5NSAwMzEzIDAzMDA7CisxRjFCOzFGMUI7MDM5NSAwMzE0IDAzMDA7MUYxQjswMzk1IDAzMTQgMDMwMDsKKzFGMUM7MUYxQzswMzk1IDAzMTMgMDMwMTsxRjFDOzAzOTUgMDMxMyAwMzAxOworMUYxRDsxRjFEOzAzOTUgMDMxNCAwMzAxOzFGMUQ7MDM5NSAwMzE0IDAzMDE7CisxRjIwOzFGMjA7MDNCNyAwMzEzOzFGMjA7MDNCNyAwMzEzOworMUYyMTsxRjIxOzAzQjcgMDMxNDsxRjIxOzAzQjcgMDMxNDsKKzFGMjI7MUYyMjswM0I3IDAzMTMgMDMwMDsxRjIyOzAzQjcgMDMxMyAwMzAwOworMUYyMzsxRjIzOzAzQjcgMDMxNCAwMzAwOzFGMjM7MDNCNyAwMzE0IDAzMDA7CisxRjI0OzFGMjQ7MDNCNyAwMzEzIDAzMDE7MUYyNDswM0I3IDAzMTMgMDMwMTsKKzFGMjU7MUYyNTswM0I3IDAzMTQgMDMwMTsxRjI1OzAzQjcgMDMxNCAwMzAxOworMUYyNjsxRjI2OzAzQjcgMDMxMyAwMzQyOzFGMjY7MDNCNyAwMzEzIDAzNDI7CisxRjI3OzFGMjc7MDNCNyAwMzE0IDAzNDI7MUYyNzswM0I3IDAzMTQgMDM0MjsKKzFGMjg7MUYyODswMzk3IDAzMTM7MUYyODswMzk3IDAzMTM7CisxRjI5OzFGMjk7MDM5NyAwMzE0OzFGMjk7MDM5NyAwMzE0OworMUYyQTsxRjJBOzAzOTcgMDMxMyAwMzAwOzFGMkE7MDM5NyAwMzEzIDAzMDA7CisxRjJCOzFGMkI7MDM5NyAwMzE0IDAzMDA7MUYyQjswMzk3IDAzMTQgMDMwMDsKKzFGMkM7MUYyQzswMzk3IDAzMTMgMDMwMTsxRjJDOzAzOTcgMDMxMyAwMzAxOworMUYyRDsxRjJEOzAzOTcgMDMxNCAwMzAxOzFGMkQ7MDM5NyAwMzE0IDAzMDE7CisxRjJFOzFGMkU7MDM5NyAwMzEzIDAzNDI7MUYyRTswMzk3IDAzMTMgMDM0MjsKKzFGMkY7MUYyRjswMzk3IDAzMTQgMDM0MjsxRjJGOzAzOTcgMDMxNCAwMzQyOworMUYzMDsxRjMwOzAzQjkgMDMxMzsxRjMwOzAzQjkgMDMxMzsKKzFGMzE7MUYzMTswM0I5IDAzMTQ7MUYzMTswM0I5IDAzMTQ7CisxRjMyOzFGMzI7MDNCOSAwMzEzIDAzMDA7MUYzMjswM0I5IDAzMTMgMDMwMDsKKzFGMzM7MUYzMzswM0I5IDAzMTQgMDMwMDsxRjMzOzAzQjkgMDMxNCAwMzAwOworMUYzNDsxRjM0OzAzQjkgMDMxMyAwMzAxOzFGMzQ7MDNCOSAwMzEzIDAzMDE7CisxRjM1OzFGMzU7MDNCOSAwMzE0IDAzMDE7MUYzNTswM0I5IDAzMTQgMDMwMTsKKzFGMzY7MUYzNjswM0I5IDAzMTMgMDM0MjsxRjM2OzAzQjkgMDMxMyAwMzQyOworMUYzNzsxRjM3OzAzQjkgMDMxNCAwMzQyOzFGMzc7MDNCOSAwMzE0IDAzNDI7CisxRjM4OzFGMzg7MDM5OSAwMzEzOzFGMzg7MDM5OSAwMzEzOworMUYzOTsxRjM5OzAzOTkgMDMxNDsxRjM5OzAzOTkgMDMxNDsKKzFGM0E7MUYzQTswMzk5IDAzMTMgMDMwMDsxRjNBOzAzOTkgMDMxMyAwMzAwOworMUYzQjsxRjNCOzAzOTkgMDMxNCAwMzAwOzFGM0I7MDM5OSAwMzE0IDAzMDA7CisxRjNDOzFGM0M7MDM5OSAwMzEzIDAzMDE7MUYzQzswMzk5IDAzMTMgMDMwMTsKKzFGM0Q7MUYzRDswMzk5IDAzMTQgMDMwMTsxRjNEOzAzOTkgMDMxNCAwMzAxOworMUYzRTsxRjNFOzAzOTkgMDMxMyAwMzQyOzFGM0U7MDM5OSAwMzEzIDAzNDI7CisxRjNGOzFGM0Y7MDM5OSAwMzE0IDAzNDI7MUYzRjswMzk5IDAzMTQgMDM0MjsKKzFGNDA7MUY0MDswM0JGIDAzMTM7MUY0MDswM0JGIDAzMTM7CisxRjQxOzFGNDE7MDNCRiAwMzE0OzFGNDE7MDNCRiAwMzE0OworMUY0MjsxRjQyOzAzQkYgMDMxMyAwMzAwOzFGNDI7MDNCRiAwMzEzIDAzMDA7CisxRjQzOzFGNDM7MDNCRiAwMzE0IDAzMDA7MUY0MzswM0JGIDAzMTQgMDMwMDsKKzFGNDQ7MUY0NDswM0JGIDAzMTMgMDMwMTsxRjQ0OzAzQkYgMDMxMyAwMzAxOworMUY0NTsxRjQ1OzAzQkYgMDMxNCAwMzAxOzFGNDU7MDNCRiAwMzE0IDAzMDE7CisxRjQ4OzFGNDg7MDM5RiAwMzEzOzFGNDg7MDM5RiAwMzEzOworMUY0OTsxRjQ5OzAzOUYgMDMxNDsxRjQ5OzAzOUYgMDMxNDsKKzFGNEE7MUY0QTswMzlGIDAzMTMgMDMwMDsxRjRBOzAzOUYgMDMxMyAwMzAwOworMUY0QjsxRjRCOzAzOUYgMDMxNCAwMzAwOzFGNEI7MDM5RiAwMzE0IDAzMDA7CisxRjRDOzFGNEM7MDM5RiAwMzEzIDAzMDE7MUY0QzswMzlGIDAzMTMgMDMwMTsKKzFGNEQ7MUY0RDswMzlGIDAzMTQgMDMwMTsxRjREOzAzOUYgMDMxNCAwMzAxOworMUY1MDsxRjUwOzAzQzUgMDMxMzsxRjUwOzAzQzUgMDMxMzsKKzFGNTE7MUY1MTswM0M1IDAzMTQ7MUY1MTswM0M1IDAzMTQ7CisxRjUyOzFGNTI7MDNDNSAwMzEzIDAzMDA7MUY1MjswM0M1IDAzMTMgMDMwMDsKKzFGNTM7MUY1MzswM0M1IDAzMTQgMDMwMDsxRjUzOzAzQzUgMDMxNCAwMzAwOworMUY1NDsxRjU0OzAzQzUgMDMxMyAwMzAxOzFGNTQ7MDNDNSAwMzEzIDAzMDE7CisxRjU1OzFGNTU7MDNDNSAwMzE0IDAzMDE7MUY1NTswM0M1IDAzMTQgMDMwMTsKKzFGNTY7MUY1NjswM0M1IDAzMTMgMDM0MjsxRjU2OzAzQzUgMDMxMyAwMzQyOworMUY1NzsxRjU3OzAzQzUgMDMxNCAwMzQyOzFGNTc7MDNDNSAwMzE0IDAzNDI7CisxRjU5OzFGNTk7MDNBNSAwMzE0OzFGNTk7MDNBNSAwMzE0OworMUY1QjsxRjVCOzAzQTUgMDMxNCAwMzAwOzFGNUI7MDNBNSAwMzE0IDAzMDA7CisxRjVEOzFGNUQ7MDNBNSAwMzE0IDAzMDE7MUY1RDswM0E1IDAzMTQgMDMwMTsKKzFGNUY7MUY1RjswM0E1IDAzMTQgMDM0MjsxRjVGOzAzQTUgMDMxNCAwMzQyOworMUY2MDsxRjYwOzAzQzkgMDMxMzsxRjYwOzAzQzkgMDMxMzsKKzFGNjE7MUY2MTswM0M5IDAzMTQ7MUY2MTswM0M5IDAzMTQ7CisxRjYyOzFGNjI7MDNDOSAwMzEzIDAzMDA7MUY2MjswM0M5IDAzMTMgMDMwMDsKKzFGNjM7MUY2MzswM0M5IDAzMTQgMDMwMDsxRjYzOzAzQzkgMDMxNCAwMzAwOworMUY2NDsxRjY0OzAzQzkgMDMxMyAwMzAxOzFGNjQ7MDNDOSAwMzEzIDAzMDE7CisxRjY1OzFGNjU7MDNDOSAwMzE0IDAzMDE7MUY2NTswM0M5IDAzMTQgMDMwMTsKKzFGNjY7MUY2NjswM0M5IDAzMTMgMDM0MjsxRjY2OzAzQzkgMDMxMyAwMzQyOworMUY2NzsxRjY3OzAzQzkgMDMxNCAwMzQyOzFGNjc7MDNDOSAwMzE0IDAzNDI7CisxRjY4OzFGNjg7MDNBOSAwMzEzOzFGNjg7MDNBOSAwMzEzOworMUY2OTsxRjY5OzAzQTkgMDMxNDsxRjY5OzAzQTkgMDMxNDsKKzFGNkE7MUY2QTswM0E5IDAzMTMgMDMwMDsxRjZBOzAzQTkgMDMxMyAwMzAwOworMUY2QjsxRjZCOzAzQTkgMDMxNCAwMzAwOzFGNkI7MDNBOSAwMzE0IDAzMDA7CisxRjZDOzFGNkM7MDNBOSAwMzEzIDAzMDE7MUY2QzswM0E5IDAzMTMgMDMwMTsKKzFGNkQ7MUY2RDswM0E5IDAzMTQgMDMwMTsxRjZEOzAzQTkgMDMxNCAwMzAxOworMUY2RTsxRjZFOzAzQTkgMDMxMyAwMzQyOzFGNkU7MDNBOSAwMzEzIDAzNDI7CisxRjZGOzFGNkY7MDNBOSAwMzE0IDAzNDI7MUY2RjswM0E5IDAzMTQgMDM0MjsKKzFGNzA7MUY3MDswM0IxIDAzMDA7MUY3MDswM0IxIDAzMDA7CisxRjcxOzAzQUM7MDNCMSAwMzAxOzAzQUM7MDNCMSAwMzAxOworMUY3MjsxRjcyOzAzQjUgMDMwMDsxRjcyOzAzQjUgMDMwMDsKKzFGNzM7MDNBRDswM0I1IDAzMDE7MDNBRDswM0I1IDAzMDE7CisxRjc0OzFGNzQ7MDNCNyAwMzAwOzFGNzQ7MDNCNyAwMzAwOworMUY3NTswM0FFOzAzQjcgMDMwMTswM0FFOzAzQjcgMDMwMTsKKzFGNzY7MUY3NjswM0I5IDAzMDA7MUY3NjswM0I5IDAzMDA7CisxRjc3OzAzQUY7MDNCOSAwMzAxOzAzQUY7MDNCOSAwMzAxOworMUY3ODsxRjc4OzAzQkYgMDMwMDsxRjc4OzAzQkYgMDMwMDsKKzFGNzk7MDNDQzswM0JGIDAzMDE7MDNDQzswM0JGIDAzMDE7CisxRjdBOzFGN0E7MDNDNSAwMzAwOzFGN0E7MDNDNSAwMzAwOworMUY3QjswM0NEOzAzQzUgMDMwMTswM0NEOzAzQzUgMDMwMTsKKzFGN0M7MUY3QzswM0M5IDAzMDA7MUY3QzswM0M5IDAzMDA7CisxRjdEOzAzQ0U7MDNDOSAwMzAxOzAzQ0U7MDNDOSAwMzAxOworMUY4MDsxRjgwOzAzQjEgMDMxMyAwMzQ1OzFGODA7MDNCMSAwMzEzIDAzNDU7CisxRjgxOzFGODE7MDNCMSAwMzE0IDAzNDU7MUY4MTswM0IxIDAzMTQgMDM0NTsKKzFGODI7MUY4MjswM0IxIDAzMTMgMDMwMCAwMzQ1OzFGODI7MDNCMSAwMzEzIDAzMDAgMDM0NTsKKzFGODM7MUY4MzswM0IxIDAzMTQgMDMwMCAwMzQ1OzFGODM7MDNCMSAwMzE0IDAzMDAgMDM0NTsKKzFGODQ7MUY4NDswM0IxIDAzMTMgMDMwMSAwMzQ1OzFGODQ7MDNCMSAwMzEzIDAzMDEgMDM0NTsKKzFGODU7MUY4NTswM0IxIDAzMTQgMDMwMSAwMzQ1OzFGODU7MDNCMSAwMzE0IDAzMDEgMDM0NTsKKzFGODY7MUY4NjswM0IxIDAzMTMgMDM0MiAwMzQ1OzFGODY7MDNCMSAwMzEzIDAzNDIgMDM0NTsKKzFGODc7MUY4NzswM0IxIDAzMTQgMDM0MiAwMzQ1OzFGODc7MDNCMSAwMzE0IDAzNDIgMDM0NTsKKzFGODg7MUY4ODswMzkxIDAzMTMgMDM0NTsxRjg4OzAzOTEgMDMxMyAwMzQ1OworMUY4OTsxRjg5OzAzOTEgMDMxNCAwMzQ1OzFGODk7MDM5MSAwMzE0IDAzNDU7CisxRjhBOzFGOEE7MDM5MSAwMzEzIDAzMDAgMDM0NTsxRjhBOzAzOTEgMDMxMyAwMzAwIDAzNDU7CisxRjhCOzFGOEI7MDM5MSAwMzE0IDAzMDAgMDM0NTsxRjhCOzAzOTEgMDMxNCAwMzAwIDAzNDU7CisxRjhDOzFGOEM7MDM5MSAwMzEzIDAzMDEgMDM0NTsxRjhDOzAzOTEgMDMxMyAwMzAxIDAzNDU7CisxRjhEOzFGOEQ7MDM5MSAwMzE0IDAzMDEgMDM0NTsxRjhEOzAzOTEgMDMxNCAwMzAxIDAzNDU7CisxRjhFOzFGOEU7MDM5MSAwMzEzIDAzNDIgMDM0NTsxRjhFOzAzOTEgMDMxMyAwMzQyIDAzNDU7CisxRjhGOzFGOEY7MDM5MSAwMzE0IDAzNDIgMDM0NTsxRjhGOzAzOTEgMDMxNCAwMzQyIDAzNDU7CisxRjkwOzFGOTA7MDNCNyAwMzEzIDAzNDU7MUY5MDswM0I3IDAzMTMgMDM0NTsKKzFGOTE7MUY5MTswM0I3IDAzMTQgMDM0NTsxRjkxOzAzQjcgMDMxNCAwMzQ1OworMUY5MjsxRjkyOzAzQjcgMDMxMyAwMzAwIDAzNDU7MUY5MjswM0I3IDAzMTMgMDMwMCAwMzQ1OworMUY5MzsxRjkzOzAzQjcgMDMxNCAwMzAwIDAzNDU7MUY5MzswM0I3IDAzMTQgMDMwMCAwMzQ1OworMUY5NDsxRjk0OzAzQjcgMDMxMyAwMzAxIDAzNDU7MUY5NDswM0I3IDAzMTMgMDMwMSAwMzQ1OworMUY5NTsxRjk1OzAzQjcgMDMxNCAwMzAxIDAzNDU7MUY5NTswM0I3IDAzMTQgMDMwMSAwMzQ1OworMUY5NjsxRjk2OzAzQjcgMDMxMyAwMzQyIDAzNDU7MUY5NjswM0I3IDAzMTMgMDM0MiAwMzQ1OworMUY5NzsxRjk3OzAzQjcgMDMxNCAwMzQyIDAzNDU7MUY5NzswM0I3IDAzMTQgMDM0MiAwMzQ1OworMUY5ODsxRjk4OzAzOTcgMDMxMyAwMzQ1OzFGOTg7MDM5NyAwMzEzIDAzNDU7CisxRjk5OzFGOTk7MDM5NyAwMzE0IDAzNDU7MUY5OTswMzk3IDAzMTQgMDM0NTsKKzFGOUE7MUY5QTswMzk3IDAzMTMgMDMwMCAwMzQ1OzFGOUE7MDM5NyAwMzEzIDAzMDAgMDM0NTsKKzFGOUI7MUY5QjswMzk3IDAzMTQgMDMwMCAwMzQ1OzFGOUI7MDM5NyAwMzE0IDAzMDAgMDM0NTsKKzFGOUM7MUY5QzswMzk3IDAzMTMgMDMwMSAwMzQ1OzFGOUM7MDM5NyAwMzEzIDAzMDEgMDM0NTsKKzFGOUQ7MUY5RDswMzk3IDAzMTQgMDMwMSAwMzQ1OzFGOUQ7MDM5NyAwMzE0IDAzMDEgMDM0NTsKKzFGOUU7MUY5RTswMzk3IDAzMTMgMDM0MiAwMzQ1OzFGOUU7MDM5NyAwMzEzIDAzNDIgMDM0NTsKKzFGOUY7MUY5RjswMzk3IDAzMTQgMDM0MiAwMzQ1OzFGOUY7MDM5NyAwMzE0IDAzNDIgMDM0NTsKKzFGQTA7MUZBMDswM0M5IDAzMTMgMDM0NTsxRkEwOzAzQzkgMDMxMyAwMzQ1OworMUZBMTsxRkExOzAzQzkgMDMxNCAwMzQ1OzFGQTE7MDNDOSAwMzE0IDAzNDU7CisxRkEyOzFGQTI7MDNDOSAwMzEzIDAzMDAgMDM0NTsxRkEyOzAzQzkgMDMxMyAwMzAwIDAzNDU7CisxRkEzOzFGQTM7MDNDOSAwMzE0IDAzMDAgMDM0NTsxRkEzOzAzQzkgMDMxNCAwMzAwIDAzNDU7CisxRkE0OzFGQTQ7MDNDOSAwMzEzIDAzMDEgMDM0NTsxRkE0OzAzQzkgMDMxMyAwMzAxIDAzNDU7CisxRkE1OzFGQTU7MDNDOSAwMzE0IDAzMDEgMDM0NTsxRkE1OzAzQzkgMDMxNCAwMzAxIDAzNDU7CisxRkE2OzFGQTY7MDNDOSAwMzEzIDAzNDIgMDM0NTsxRkE2OzAzQzkgMDMxMyAwMzQyIDAzNDU7CisxRkE3OzFGQTc7MDNDOSAwMzE0IDAzNDIgMDM0NTsxRkE3OzAzQzkgMDMxNCAwMzQyIDAzNDU7CisxRkE4OzFGQTg7MDNBOSAwMzEzIDAzNDU7MUZBODswM0E5IDAzMTMgMDM0NTsKKzFGQTk7MUZBOTswM0E5IDAzMTQgMDM0NTsxRkE5OzAzQTkgMDMxNCAwMzQ1OworMUZBQTsxRkFBOzAzQTkgMDMxMyAwMzAwIDAzNDU7MUZBQTswM0E5IDAzMTMgMDMwMCAwMzQ1OworMUZBQjsxRkFCOzAzQTkgMDMxNCAwMzAwIDAzNDU7MUZBQjswM0E5IDAzMTQgMDMwMCAwMzQ1OworMUZBQzsxRkFDOzAzQTkgMDMxMyAwMzAxIDAzNDU7MUZBQzswM0E5IDAzMTMgMDMwMSAwMzQ1OworMUZBRDsxRkFEOzAzQTkgMDMxNCAwMzAxIDAzNDU7MUZBRDswM0E5IDAzMTQgMDMwMSAwMzQ1OworMUZBRTsxRkFFOzAzQTkgMDMxMyAwMzQyIDAzNDU7MUZBRTswM0E5IDAzMTMgMDM0MiAwMzQ1OworMUZBRjsxRkFGOzAzQTkgMDMxNCAwMzQyIDAzNDU7MUZBRjswM0E5IDAzMTQgMDM0MiAwMzQ1OworMUZCMDsxRkIwOzAzQjEgMDMwNjsxRkIwOzAzQjEgMDMwNjsKKzFGQjE7MUZCMTswM0IxIDAzMDQ7MUZCMTswM0IxIDAzMDQ7CisxRkIyOzFGQjI7MDNCMSAwMzAwIDAzNDU7MUZCMjswM0IxIDAzMDAgMDM0NTsKKzFGQjM7MUZCMzswM0IxIDAzNDU7MUZCMzswM0IxIDAzNDU7CisxRkI0OzFGQjQ7MDNCMSAwMzAxIDAzNDU7MUZCNDswM0IxIDAzMDEgMDM0NTsKKzFGQjY7MUZCNjswM0IxIDAzNDI7MUZCNjswM0IxIDAzNDI7CisxRkI3OzFGQjc7MDNCMSAwMzQyIDAzNDU7MUZCNzswM0IxIDAzNDIgMDM0NTsKKzFGQjg7MUZCODswMzkxIDAzMDY7MUZCODswMzkxIDAzMDY7CisxRkI5OzFGQjk7MDM5MSAwMzA0OzFGQjk7MDM5MSAwMzA0OworMUZCQTsxRkJBOzAzOTEgMDMwMDsxRkJBOzAzOTEgMDMwMDsKKzFGQkI7MDM4NjswMzkxIDAzMDE7MDM4NjswMzkxIDAzMDE7CisxRkJDOzFGQkM7MDM5MSAwMzQ1OzFGQkM7MDM5MSAwMzQ1OworMUZCRDsxRkJEOzFGQkQ7MDAyMCAwMzEzOzAwMjAgMDMxMzsKKzFGQkU7MDNCOTswM0I5OzAzQjk7MDNCOTsKKzFGQkY7MUZCRjsxRkJGOzAwMjAgMDMxMzswMDIwIDAzMTM7CisxRkMwOzFGQzA7MUZDMDswMDIwIDAzNDI7MDAyMCAwMzQyOworMUZDMTsxRkMxOzAwQTggMDM0MjswMDIwIDAzMDggMDM0MjswMDIwIDAzMDggMDM0MjsKKzFGQzI7MUZDMjswM0I3IDAzMDAgMDM0NTsxRkMyOzAzQjcgMDMwMCAwMzQ1OworMUZDMzsxRkMzOzAzQjcgMDM0NTsxRkMzOzAzQjcgMDM0NTsKKzFGQzQ7MUZDNDswM0I3IDAzMDEgMDM0NTsxRkM0OzAzQjcgMDMwMSAwMzQ1OworMUZDNjsxRkM2OzAzQjcgMDM0MjsxRkM2OzAzQjcgMDM0MjsKKzFGQzc7MUZDNzswM0I3IDAzNDIgMDM0NTsxRkM3OzAzQjcgMDM0MiAwMzQ1OworMUZDODsxRkM4OzAzOTUgMDMwMDsxRkM4OzAzOTUgMDMwMDsKKzFGQzk7MDM4ODswMzk1IDAzMDE7MDM4ODswMzk1IDAzMDE7CisxRkNBOzFGQ0E7MDM5NyAwMzAwOzFGQ0E7MDM5NyAwMzAwOworMUZDQjswMzg5OzAzOTcgMDMwMTswMzg5OzAzOTcgMDMwMTsKKzFGQ0M7MUZDQzswMzk3IDAzNDU7MUZDQzswMzk3IDAzNDU7CisxRkNEOzFGQ0Q7MUZCRiAwMzAwOzAwMjAgMDMxMyAwMzAwOzAwMjAgMDMxMyAwMzAwOworMUZDRTsxRkNFOzFGQkYgMDMwMTswMDIwIDAzMTMgMDMwMTswMDIwIDAzMTMgMDMwMTsKKzFGQ0Y7MUZDRjsxRkJGIDAzNDI7MDAyMCAwMzEzIDAzNDI7MDAyMCAwMzEzIDAzNDI7CisxRkQwOzFGRDA7MDNCOSAwMzA2OzFGRDA7MDNCOSAwMzA2OworMUZEMTsxRkQxOzAzQjkgMDMwNDsxRkQxOzAzQjkgMDMwNDsKKzFGRDI7MUZEMjswM0I5IDAzMDggMDMwMDsxRkQyOzAzQjkgMDMwOCAwMzAwOworMUZEMzswMzkwOzAzQjkgMDMwOCAwMzAxOzAzOTA7MDNCOSAwMzA4IDAzMDE7CisxRkQ2OzFGRDY7MDNCOSAwMzQyOzFGRDY7MDNCOSAwMzQyOworMUZENzsxRkQ3OzAzQjkgMDMwOCAwMzQyOzFGRDc7MDNCOSAwMzA4IDAzNDI7CisxRkQ4OzFGRDg7MDM5OSAwMzA2OzFGRDg7MDM5OSAwMzA2OworMUZEOTsxRkQ5OzAzOTkgMDMwNDsxRkQ5OzAzOTkgMDMwNDsKKzFGREE7MUZEQTswMzk5IDAzMDA7MUZEQTswMzk5IDAzMDA7CisxRkRCOzAzOEE7MDM5OSAwMzAxOzAzOEE7MDM5OSAwMzAxOworMUZERDsxRkREOzFGRkUgMDMwMDswMDIwIDAzMTQgMDMwMDswMDIwIDAzMTQgMDMwMDsKKzFGREU7MUZERTsxRkZFIDAzMDE7MDAyMCAwMzE0IDAzMDE7MDAyMCAwMzE0IDAzMDE7CisxRkRGOzFGREY7MUZGRSAwMzQyOzAwMjAgMDMxNCAwMzQyOzAwMjAgMDMxNCAwMzQyOworMUZFMDsxRkUwOzAzQzUgMDMwNjsxRkUwOzAzQzUgMDMwNjsKKzFGRTE7MUZFMTswM0M1IDAzMDQ7MUZFMTswM0M1IDAzMDQ7CisxRkUyOzFGRTI7MDNDNSAwMzA4IDAzMDA7MUZFMjswM0M1IDAzMDggMDMwMDsKKzFGRTM7MDNCMDswM0M1IDAzMDggMDMwMTswM0IwOzAzQzUgMDMwOCAwMzAxOworMUZFNDsxRkU0OzAzQzEgMDMxMzsxRkU0OzAzQzEgMDMxMzsKKzFGRTU7MUZFNTswM0MxIDAzMTQ7MUZFNTswM0MxIDAzMTQ7CisxRkU2OzFGRTY7MDNDNSAwMzQyOzFGRTY7MDNDNSAwMzQyOworMUZFNzsxRkU3OzAzQzUgMDMwOCAwMzQyOzFGRTc7MDNDNSAwMzA4IDAzNDI7CisxRkU4OzFGRTg7MDNBNSAwMzA2OzFGRTg7MDNBNSAwMzA2OworMUZFOTsxRkU5OzAzQTUgMDMwNDsxRkU5OzAzQTUgMDMwNDsKKzFGRUE7MUZFQTswM0E1IDAzMDA7MUZFQTswM0E1IDAzMDA7CisxRkVCOzAzOEU7MDNBNSAwMzAxOzAzOEU7MDNBNSAwMzAxOworMUZFQzsxRkVDOzAzQTEgMDMxNDsxRkVDOzAzQTEgMDMxNDsKKzFGRUQ7MUZFRDswMEE4IDAzMDA7MDAyMCAwMzA4IDAzMDA7MDAyMCAwMzA4IDAzMDA7CisxRkVFOzAzODU7MDBBOCAwMzAxOzAwMjAgMDMwOCAwMzAxOzAwMjAgMDMwOCAwMzAxOworMUZFRjswMDYwOzAwNjA7MDA2MDswMDYwOworMUZGMjsxRkYyOzAzQzkgMDMwMCAwMzQ1OzFGRjI7MDNDOSAwMzAwIDAzNDU7CisxRkYzOzFGRjM7MDNDOSAwMzQ1OzFGRjM7MDNDOSAwMzQ1OworMUZGNDsxRkY0OzAzQzkgMDMwMSAwMzQ1OzFGRjQ7MDNDOSAwMzAxIDAzNDU7CisxRkY2OzFGRjY7MDNDOSAwMzQyOzFGRjY7MDNDOSAwMzQyOworMUZGNzsxRkY3OzAzQzkgMDM0MiAwMzQ1OzFGRjc7MDNDOSAwMzQyIDAzNDU7CisxRkY4OzFGRjg7MDM5RiAwMzAwOzFGRjg7MDM5RiAwMzAwOworMUZGOTswMzhDOzAzOUYgMDMwMTswMzhDOzAzOUYgMDMwMTsKKzFGRkE7MUZGQTswM0E5IDAzMDA7MUZGQTswM0E5IDAzMDA7CisxRkZCOzAzOEY7MDNBOSAwMzAxOzAzOEY7MDNBOSAwMzAxOworMUZGQzsxRkZDOzAzQTkgMDM0NTsxRkZDOzAzQTkgMDM0NTsKKzFGRkQ7MDBCNDswMEI0OzAwMjAgMDMwMTswMDIwIDAzMDE7CisxRkZFOzFGRkU7MUZGRTswMDIwIDAzMTQ7MDAyMCAwMzE0OworMjAwMDsyMDAyOzIwMDI7MDAyMDswMDIwOworMjAwMTsyMDAzOzIwMDM7MDAyMDswMDIwOworMjAwMjsyMDAyOzIwMDI7MDAyMDswMDIwOworMjAwMzsyMDAzOzIwMDM7MDAyMDswMDIwOworMjAwNDsyMDA0OzIwMDQ7MDAyMDswMDIwOworMjAwNTsyMDA1OzIwMDU7MDAyMDswMDIwOworMjAwNjsyMDA2OzIwMDY7MDAyMDswMDIwOworMjAwNzsyMDA3OzIwMDc7MDAyMDswMDIwOworMjAwODsyMDA4OzIwMDg7MDAyMDswMDIwOworMjAwOTsyMDA5OzIwMDk7MDAyMDswMDIwOworMjAwQTsyMDBBOzIwMEE7MDAyMDswMDIwOworMjAxMTsyMDExOzIwMTE7MjAxMDsyMDEwOworMjAxNzsyMDE3OzIwMTc7MDAyMCAwMzMzOzAwMjAgMDMzMzsKKzIwMjQ7MjAyNDsyMDI0OzAwMkU7MDAyRTsKKzIwMjU7MjAyNTsyMDI1OzAwMkUgMDAyRTswMDJFIDAwMkU7CisyMDI2OzIwMjY7MjAyNjswMDJFIDAwMkUgMDAyRTswMDJFIDAwMkUgMDAyRTsKKzIwMkY7MjAyRjsyMDJGOzAwMjA7MDAyMDsKKzIwMzM7MjAzMzsyMDMzOzIwMzIgMjAzMjsyMDMyIDIwMzI7CisyMDM0OzIwMzQ7MjAzNDsyMDMyIDIwMzIgMjAzMjsyMDMyIDIwMzIgMjAzMjsKKzIwMzY7MjAzNjsyMDM2OzIwMzUgMjAzNTsyMDM1IDIwMzU7CisyMDM3OzIwMzc7MjAzNzsyMDM1IDIwMzUgMjAzNTsyMDM1IDIwMzUgMjAzNTsKKzIwM0M7MjAzQzsyMDNDOzAwMjEgMDAyMTswMDIxIDAwMjE7CisyMDNFOzIwM0U7MjAzRTswMDIwIDAzMDU7MDAyMCAwMzA1OworMjA0NzsyMDQ3OzIwNDc7MDAzRiAwMDNGOzAwM0YgMDAzRjsKKzIwNDg7MjA0ODsyMDQ4OzAwM0YgMDAyMTswMDNGIDAwMjE7CisyMDQ5OzIwNDk7MjA0OTswMDIxIDAwM0Y7MDAyMSAwMDNGOworMjA1NzsyMDU3OzIwNTc7MjAzMiAyMDMyIDIwMzIgMjAzMjsyMDMyIDIwMzIgMjAzMiAyMDMyOworMjA1RjsyMDVGOzIwNUY7MDAyMDswMDIwOworMjA3MDsyMDcwOzIwNzA7MDAzMDswMDMwOworMjA3MTsyMDcxOzIwNzE7MDA2OTswMDY5OworMjA3NDsyMDc0OzIwNzQ7MDAzNDswMDM0OworMjA3NTsyMDc1OzIwNzU7MDAzNTswMDM1OworMjA3NjsyMDc2OzIwNzY7MDAzNjswMDM2OworMjA3NzsyMDc3OzIwNzc7MDAzNzswMDM3OworMjA3ODsyMDc4OzIwNzg7MDAzODswMDM4OworMjA3OTsyMDc5OzIwNzk7MDAzOTswMDM5OworMjA3QTsyMDdBOzIwN0E7MDAyQjswMDJCOworMjA3QjsyMDdCOzIwN0I7MjIxMjsyMjEyOworMjA3QzsyMDdDOzIwN0M7MDAzRDswMDNEOworMjA3RDsyMDdEOzIwN0Q7MDAyODswMDI4OworMjA3RTsyMDdFOzIwN0U7MDAyOTswMDI5OworMjA3RjsyMDdGOzIwN0Y7MDA2RTswMDZFOworMjA4MDsyMDgwOzIwODA7MDAzMDswMDMwOworMjA4MTsyMDgxOzIwODE7MDAzMTswMDMxOworMjA4MjsyMDgyOzIwODI7MDAzMjswMDMyOworMjA4MzsyMDgzOzIwODM7MDAzMzswMDMzOworMjA4NDsyMDg0OzIwODQ7MDAzNDswMDM0OworMjA4NTsyMDg1OzIwODU7MDAzNTswMDM1OworMjA4NjsyMDg2OzIwODY7MDAzNjswMDM2OworMjA4NzsyMDg3OzIwODc7MDAzNzswMDM3OworMjA4ODsyMDg4OzIwODg7MDAzODswMDM4OworMjA4OTsyMDg5OzIwODk7MDAzOTswMDM5OworMjA4QTsyMDhBOzIwOEE7MDAyQjswMDJCOworMjA4QjsyMDhCOzIwOEI7MjIxMjsyMjEyOworMjA4QzsyMDhDOzIwOEM7MDAzRDswMDNEOworMjA4RDsyMDhEOzIwOEQ7MDAyODswMDI4OworMjA4RTsyMDhFOzIwOEU7MDAyOTswMDI5OworMjBBODsyMEE4OzIwQTg7MDA1MiAwMDczOzAwNTIgMDA3MzsKKzIxMDA7MjEwMDsyMTAwOzAwNjEgMDAyRiAwMDYzOzAwNjEgMDAyRiAwMDYzOworMjEwMTsyMTAxOzIxMDE7MDA2MSAwMDJGIDAwNzM7MDA2MSAwMDJGIDAwNzM7CisyMTAyOzIxMDI7MjEwMjswMDQzOzAwNDM7CisyMTAzOzIxMDM7MjEwMzswMEIwIDAwNDM7MDBCMCAwMDQzOworMjEwNTsyMTA1OzIxMDU7MDA2MyAwMDJGIDAwNkY7MDA2MyAwMDJGIDAwNkY7CisyMTA2OzIxMDY7MjEwNjswMDYzIDAwMkYgMDA3NTswMDYzIDAwMkYgMDA3NTsKKzIxMDc7MjEwNzsyMTA3OzAxOTA7MDE5MDsKKzIxMDk7MjEwOTsyMTA5OzAwQjAgMDA0NjswMEIwIDAwNDY7CisyMTBBOzIxMEE7MjEwQTswMDY3OzAwNjc7CisyMTBCOzIxMEI7MjEwQjswMDQ4OzAwNDg7CisyMTBDOzIxMEM7MjEwQzswMDQ4OzAwNDg7CisyMTBEOzIxMEQ7MjEwRDswMDQ4OzAwNDg7CisyMTBFOzIxMEU7MjEwRTswMDY4OzAwNjg7CisyMTBGOzIxMEY7MjEwRjswMTI3OzAxMjc7CisyMTEwOzIxMTA7MjExMDswMDQ5OzAwNDk7CisyMTExOzIxMTE7MjExMTswMDQ5OzAwNDk7CisyMTEyOzIxMTI7MjExMjswMDRDOzAwNEM7CisyMTEzOzIxMTM7MjExMzswMDZDOzAwNkM7CisyMTE1OzIxMTU7MjExNTswMDRFOzAwNEU7CisyMTE2OzIxMTY7MjExNjswMDRFIDAwNkY7MDA0RSAwMDZGOworMjExOTsyMTE5OzIxMTk7MDA1MDswMDUwOworMjExQTsyMTFBOzIxMUE7MDA1MTswMDUxOworMjExQjsyMTFCOzIxMUI7MDA1MjswMDUyOworMjExQzsyMTFDOzIxMUM7MDA1MjswMDUyOworMjExRDsyMTFEOzIxMUQ7MDA1MjswMDUyOworMjEyMDsyMTIwOzIxMjA7MDA1MyAwMDREOzAwNTMgMDA0RDsKKzIxMjE7MjEyMTsyMTIxOzAwNTQgMDA0NSAwMDRDOzAwNTQgMDA0NSAwMDRDOworMjEyMjsyMTIyOzIxMjI7MDA1NCAwMDREOzAwNTQgMDA0RDsKKzIxMjQ7MjEyNDsyMTI0OzAwNUE7MDA1QTsKKzIxMjY7MDNBOTswM0E5OzAzQTk7MDNBOTsKKzIxMjg7MjEyODsyMTI4OzAwNUE7MDA1QTsKKzIxMkE7MDA0QjswMDRCOzAwNEI7MDA0QjsKKzIxMkI7MDBDNTswMDQxIDAzMEE7MDBDNTswMDQxIDAzMEE7CisyMTJDOzIxMkM7MjEyQzswMDQyOzAwNDI7CisyMTJEOzIxMkQ7MjEyRDswMDQzOzAwNDM7CisyMTJGOzIxMkY7MjEyRjswMDY1OzAwNjU7CisyMTMwOzIxMzA7MjEzMDswMDQ1OzAwNDU7CisyMTMxOzIxMzE7MjEzMTswMDQ2OzAwNDY7CisyMTMzOzIxMzM7MjEzMzswMDREOzAwNEQ7CisyMTM0OzIxMzQ7MjEzNDswMDZGOzAwNkY7CisyMTM1OzIxMzU7MjEzNTswNUQwOzA1RDA7CisyMTM2OzIxMzY7MjEzNjswNUQxOzA1RDE7CisyMTM3OzIxMzc7MjEzNzswNUQyOzA1RDI7CisyMTM4OzIxMzg7MjEzODswNUQzOzA1RDM7CisyMTM5OzIxMzk7MjEzOTswMDY5OzAwNjk7CisyMTNEOzIxM0Q7MjEzRDswM0IzOzAzQjM7CisyMTNFOzIxM0U7MjEzRTswMzkzOzAzOTM7CisyMTNGOzIxM0Y7MjEzRjswM0EwOzAzQTA7CisyMTQwOzIxNDA7MjE0MDsyMjExOzIyMTE7CisyMTQ1OzIxNDU7MjE0NTswMDQ0OzAwNDQ7CisyMTQ2OzIxNDY7MjE0NjswMDY0OzAwNjQ7CisyMTQ3OzIxNDc7MjE0NzswMDY1OzAwNjU7CisyMTQ4OzIxNDg7MjE0ODswMDY5OzAwNjk7CisyMTQ5OzIxNDk7MjE0OTswMDZBOzAwNkE7CisyMTUzOzIxNTM7MjE1MzswMDMxIDIwNDQgMDAzMzswMDMxIDIwNDQgMDAzMzsKKzIxNTQ7MjE1NDsyMTU0OzAwMzIgMjA0NCAwMDMzOzAwMzIgMjA0NCAwMDMzOworMjE1NTsyMTU1OzIxNTU7MDAzMSAyMDQ0IDAwMzU7MDAzMSAyMDQ0IDAwMzU7CisyMTU2OzIxNTY7MjE1NjswMDMyIDIwNDQgMDAzNTswMDMyIDIwNDQgMDAzNTsKKzIxNTc7MjE1NzsyMTU3OzAwMzMgMjA0NCAwMDM1OzAwMzMgMjA0NCAwMDM1OworMjE1ODsyMTU4OzIxNTg7MDAzNCAyMDQ0IDAwMzU7MDAzNCAyMDQ0IDAwMzU7CisyMTU5OzIxNTk7MjE1OTswMDMxIDIwNDQgMDAzNjswMDMxIDIwNDQgMDAzNjsKKzIxNUE7MjE1QTsyMTVBOzAwMzUgMjA0NCAwMDM2OzAwMzUgMjA0NCAwMDM2OworMjE1QjsyMTVCOzIxNUI7MDAzMSAyMDQ0IDAwMzg7MDAzMSAyMDQ0IDAwMzg7CisyMTVDOzIxNUM7MjE1QzswMDMzIDIwNDQgMDAzODswMDMzIDIwNDQgMDAzODsKKzIxNUQ7MjE1RDsyMTVEOzAwMzUgMjA0NCAwMDM4OzAwMzUgMjA0NCAwMDM4OworMjE1RTsyMTVFOzIxNUU7MDAzNyAyMDQ0IDAwMzg7MDAzNyAyMDQ0IDAwMzg7CisyMTVGOzIxNUY7MjE1RjswMDMxIDIwNDQ7MDAzMSAyMDQ0OworMjE2MDsyMTYwOzIxNjA7MDA0OTswMDQ5OworMjE2MTsyMTYxOzIxNjE7MDA0OSAwMDQ5OzAwNDkgMDA0OTsKKzIxNjI7MjE2MjsyMTYyOzAwNDkgMDA0OSAwMDQ5OzAwNDkgMDA0OSAwMDQ5OworMjE2MzsyMTYzOzIxNjM7MDA0OSAwMDU2OzAwNDkgMDA1NjsKKzIxNjQ7MjE2NDsyMTY0OzAwNTY7MDA1NjsKKzIxNjU7MjE2NTsyMTY1OzAwNTYgMDA0OTswMDU2IDAwNDk7CisyMTY2OzIxNjY7MjE2NjswMDU2IDAwNDkgMDA0OTswMDU2IDAwNDkgMDA0OTsKKzIxNjc7MjE2NzsyMTY3OzAwNTYgMDA0OSAwMDQ5IDAwNDk7MDA1NiAwMDQ5IDAwNDkgMDA0OTsKKzIxNjg7MjE2ODsyMTY4OzAwNDkgMDA1ODswMDQ5IDAwNTg7CisyMTY5OzIxNjk7MjE2OTswMDU4OzAwNTg7CisyMTZBOzIxNkE7MjE2QTswMDU4IDAwNDk7MDA1OCAwMDQ5OworMjE2QjsyMTZCOzIxNkI7MDA1OCAwMDQ5IDAwNDk7MDA1OCAwMDQ5IDAwNDk7CisyMTZDOzIxNkM7MjE2QzswMDRDOzAwNEM7CisyMTZEOzIxNkQ7MjE2RDswMDQzOzAwNDM7CisyMTZFOzIxNkU7MjE2RTswMDQ0OzAwNDQ7CisyMTZGOzIxNkY7MjE2RjswMDREOzAwNEQ7CisyMTcwOzIxNzA7MjE3MDswMDY5OzAwNjk7CisyMTcxOzIxNzE7MjE3MTswMDY5IDAwNjk7MDA2OSAwMDY5OworMjE3MjsyMTcyOzIxNzI7MDA2OSAwMDY5IDAwNjk7MDA2OSAwMDY5IDAwNjk7CisyMTczOzIxNzM7MjE3MzswMDY5IDAwNzY7MDA2OSAwMDc2OworMjE3NDsyMTc0OzIxNzQ7MDA3NjswMDc2OworMjE3NTsyMTc1OzIxNzU7MDA3NiAwMDY5OzAwNzYgMDA2OTsKKzIxNzY7MjE3NjsyMTc2OzAwNzYgMDA2OSAwMDY5OzAwNzYgMDA2OSAwMDY5OworMjE3NzsyMTc3OzIxNzc7MDA3NiAwMDY5IDAwNjkgMDA2OTswMDc2IDAwNjkgMDA2OSAwMDY5OworMjE3ODsyMTc4OzIxNzg7MDA2OSAwMDc4OzAwNjkgMDA3ODsKKzIxNzk7MjE3OTsyMTc5OzAwNzg7MDA3ODsKKzIxN0E7MjE3QTsyMTdBOzAwNzggMDA2OTswMDc4IDAwNjk7CisyMTdCOzIxN0I7MjE3QjswMDc4IDAwNjkgMDA2OTswMDc4IDAwNjkgMDA2OTsKKzIxN0M7MjE3QzsyMTdDOzAwNkM7MDA2QzsKKzIxN0Q7MjE3RDsyMTdEOzAwNjM7MDA2MzsKKzIxN0U7MjE3RTsyMTdFOzAwNjQ7MDA2NDsKKzIxN0Y7MjE3RjsyMTdGOzAwNkQ7MDA2RDsKKzIxOUE7MjE5QTsyMTkwIDAzMzg7MjE5QTsyMTkwIDAzMzg7CisyMTlCOzIxOUI7MjE5MiAwMzM4OzIxOUI7MjE5MiAwMzM4OworMjFBRTsyMUFFOzIxOTQgMDMzODsyMUFFOzIxOTQgMDMzODsKKzIxQ0Q7MjFDRDsyMUQwIDAzMzg7MjFDRDsyMUQwIDAzMzg7CisyMUNFOzIxQ0U7MjFENCAwMzM4OzIxQ0U7MjFENCAwMzM4OworMjFDRjsyMUNGOzIxRDIgMDMzODsyMUNGOzIxRDIgMDMzODsKKzIyMDQ7MjIwNDsyMjAzIDAzMzg7MjIwNDsyMjAzIDAzMzg7CisyMjA5OzIyMDk7MjIwOCAwMzM4OzIyMDk7MjIwOCAwMzM4OworMjIwQzsyMjBDOzIyMEIgMDMzODsyMjBDOzIyMEIgMDMzODsKKzIyMjQ7MjIyNDsyMjIzIDAzMzg7MjIyNDsyMjIzIDAzMzg7CisyMjI2OzIyMjY7MjIyNSAwMzM4OzIyMjY7MjIyNSAwMzM4OworMjIyQzsyMjJDOzIyMkM7MjIyQiAyMjJCOzIyMkIgMjIyQjsKKzIyMkQ7MjIyRDsyMjJEOzIyMkIgMjIyQiAyMjJCOzIyMkIgMjIyQiAyMjJCOworMjIyRjsyMjJGOzIyMkY7MjIyRSAyMjJFOzIyMkUgMjIyRTsKKzIyMzA7MjIzMDsyMjMwOzIyMkUgMjIyRSAyMjJFOzIyMkUgMjIyRSAyMjJFOworMjI0MTsyMjQxOzIyM0MgMDMzODsyMjQxOzIyM0MgMDMzODsKKzIyNDQ7MjI0NDsyMjQzIDAzMzg7MjI0NDsyMjQzIDAzMzg7CisyMjQ3OzIyNDc7MjI0NSAwMzM4OzIyNDc7MjI0NSAwMzM4OworMjI0OTsyMjQ5OzIyNDggMDMzODsyMjQ5OzIyNDggMDMzODsKKzIyNjA7MjI2MDswMDNEIDAzMzg7MjI2MDswMDNEIDAzMzg7CisyMjYyOzIyNjI7MjI2MSAwMzM4OzIyNjI7MjI2MSAwMzM4OworMjI2RDsyMjZEOzIyNEQgMDMzODsyMjZEOzIyNEQgMDMzODsKKzIyNkU7MjI2RTswMDNDIDAzMzg7MjI2RTswMDNDIDAzMzg7CisyMjZGOzIyNkY7MDAzRSAwMzM4OzIyNkY7MDAzRSAwMzM4OworMjI3MDsyMjcwOzIyNjQgMDMzODsyMjcwOzIyNjQgMDMzODsKKzIyNzE7MjI3MTsyMjY1IDAzMzg7MjI3MTsyMjY1IDAzMzg7CisyMjc0OzIyNzQ7MjI3MiAwMzM4OzIyNzQ7MjI3MiAwMzM4OworMjI3NTsyMjc1OzIyNzMgMDMzODsyMjc1OzIyNzMgMDMzODsKKzIyNzg7MjI3ODsyMjc2IDAzMzg7MjI3ODsyMjc2IDAzMzg7CisyMjc5OzIyNzk7MjI3NyAwMzM4OzIyNzk7MjI3NyAwMzM4OworMjI4MDsyMjgwOzIyN0EgMDMzODsyMjgwOzIyN0EgMDMzODsKKzIyODE7MjI4MTsyMjdCIDAzMzg7MjI4MTsyMjdCIDAzMzg7CisyMjg0OzIyODQ7MjI4MiAwMzM4OzIyODQ7MjI4MiAwMzM4OworMjI4NTsyMjg1OzIyODMgMDMzODsyMjg1OzIyODMgMDMzODsKKzIyODg7MjI4ODsyMjg2IDAzMzg7MjI4ODsyMjg2IDAzMzg7CisyMjg5OzIyODk7MjI4NyAwMzM4OzIyODk7MjI4NyAwMzM4OworMjJBQzsyMkFDOzIyQTIgMDMzODsyMkFDOzIyQTIgMDMzODsKKzIyQUQ7MjJBRDsyMkE4IDAzMzg7MjJBRDsyMkE4IDAzMzg7CisyMkFFOzIyQUU7MjJBOSAwMzM4OzIyQUU7MjJBOSAwMzM4OworMjJBRjsyMkFGOzIyQUIgMDMzODsyMkFGOzIyQUIgMDMzODsKKzIyRTA7MjJFMDsyMjdDIDAzMzg7MjJFMDsyMjdDIDAzMzg7CisyMkUxOzIyRTE7MjI3RCAwMzM4OzIyRTE7MjI3RCAwMzM4OworMjJFMjsyMkUyOzIyOTEgMDMzODsyMkUyOzIyOTEgMDMzODsKKzIyRTM7MjJFMzsyMjkyIDAzMzg7MjJFMzsyMjkyIDAzMzg7CisyMkVBOzIyRUE7MjJCMiAwMzM4OzIyRUE7MjJCMiAwMzM4OworMjJFQjsyMkVCOzIyQjMgMDMzODsyMkVCOzIyQjMgMDMzODsKKzIyRUM7MjJFQzsyMkI0IDAzMzg7MjJFQzsyMkI0IDAzMzg7CisyMkVEOzIyRUQ7MjJCNSAwMzM4OzIyRUQ7MjJCNSAwMzM4OworMjMyOTszMDA4OzMwMDg7MzAwODszMDA4OworMjMyQTszMDA5OzMwMDk7MzAwOTszMDA5OworMjQ2MDsyNDYwOzI0NjA7MDAzMTswMDMxOworMjQ2MTsyNDYxOzI0NjE7MDAzMjswMDMyOworMjQ2MjsyNDYyOzI0NjI7MDAzMzswMDMzOworMjQ2MzsyNDYzOzI0NjM7MDAzNDswMDM0OworMjQ2NDsyNDY0OzI0NjQ7MDAzNTswMDM1OworMjQ2NTsyNDY1OzI0NjU7MDAzNjswMDM2OworMjQ2NjsyNDY2OzI0NjY7MDAzNzswMDM3OworMjQ2NzsyNDY3OzI0Njc7MDAzODswMDM4OworMjQ2ODsyNDY4OzI0Njg7MDAzOTswMDM5OworMjQ2OTsyNDY5OzI0Njk7MDAzMSAwMDMwOzAwMzEgMDAzMDsKKzI0NkE7MjQ2QTsyNDZBOzAwMzEgMDAzMTswMDMxIDAwMzE7CisyNDZCOzI0NkI7MjQ2QjswMDMxIDAwMzI7MDAzMSAwMDMyOworMjQ2QzsyNDZDOzI0NkM7MDAzMSAwMDMzOzAwMzEgMDAzMzsKKzI0NkQ7MjQ2RDsyNDZEOzAwMzEgMDAzNDswMDMxIDAwMzQ7CisyNDZFOzI0NkU7MjQ2RTswMDMxIDAwMzU7MDAzMSAwMDM1OworMjQ2RjsyNDZGOzI0NkY7MDAzMSAwMDM2OzAwMzEgMDAzNjsKKzI0NzA7MjQ3MDsyNDcwOzAwMzEgMDAzNzswMDMxIDAwMzc7CisyNDcxOzI0NzE7MjQ3MTswMDMxIDAwMzg7MDAzMSAwMDM4OworMjQ3MjsyNDcyOzI0NzI7MDAzMSAwMDM5OzAwMzEgMDAzOTsKKzI0NzM7MjQ3MzsyNDczOzAwMzIgMDAzMDswMDMyIDAwMzA7CisyNDc0OzI0NzQ7MjQ3NDswMDI4IDAwMzEgMDAyOTswMDI4IDAwMzEgMDAyOTsKKzI0NzU7MjQ3NTsyNDc1OzAwMjggMDAzMiAwMDI5OzAwMjggMDAzMiAwMDI5OworMjQ3NjsyNDc2OzI0NzY7MDAyOCAwMDMzIDAwMjk7MDAyOCAwMDMzIDAwMjk7CisyNDc3OzI0Nzc7MjQ3NzswMDI4IDAwMzQgMDAyOTswMDI4IDAwMzQgMDAyOTsKKzI0Nzg7MjQ3ODsyNDc4OzAwMjggMDAzNSAwMDI5OzAwMjggMDAzNSAwMDI5OworMjQ3OTsyNDc5OzI0Nzk7MDAyOCAwMDM2IDAwMjk7MDAyOCAwMDM2IDAwMjk7CisyNDdBOzI0N0E7MjQ3QTswMDI4IDAwMzcgMDAyOTswMDI4IDAwMzcgMDAyOTsKKzI0N0I7MjQ3QjsyNDdCOzAwMjggMDAzOCAwMDI5OzAwMjggMDAzOCAwMDI5OworMjQ3QzsyNDdDOzI0N0M7MDAyOCAwMDM5IDAwMjk7MDAyOCAwMDM5IDAwMjk7CisyNDdEOzI0N0Q7MjQ3RDswMDI4IDAwMzEgMDAzMCAwMDI5OzAwMjggMDAzMSAwMDMwIDAwMjk7CisyNDdFOzI0N0U7MjQ3RTswMDI4IDAwMzEgMDAzMSAwMDI5OzAwMjggMDAzMSAwMDMxIDAwMjk7CisyNDdGOzI0N0Y7MjQ3RjswMDI4IDAwMzEgMDAzMiAwMDI5OzAwMjggMDAzMSAwMDMyIDAwMjk7CisyNDgwOzI0ODA7MjQ4MDswMDI4IDAwMzEgMDAzMyAwMDI5OzAwMjggMDAzMSAwMDMzIDAwMjk7CisyNDgxOzI0ODE7MjQ4MTswMDI4IDAwMzEgMDAzNCAwMDI5OzAwMjggMDAzMSAwMDM0IDAwMjk7CisyNDgyOzI0ODI7MjQ4MjswMDI4IDAwMzEgMDAzNSAwMDI5OzAwMjggMDAzMSAwMDM1IDAwMjk7CisyNDgzOzI0ODM7MjQ4MzswMDI4IDAwMzEgMDAzNiAwMDI5OzAwMjggMDAzMSAwMDM2IDAwMjk7CisyNDg0OzI0ODQ7MjQ4NDswMDI4IDAwMzEgMDAzNyAwMDI5OzAwMjggMDAzMSAwMDM3IDAwMjk7CisyNDg1OzI0ODU7MjQ4NTswMDI4IDAwMzEgMDAzOCAwMDI5OzAwMjggMDAzMSAwMDM4IDAwMjk7CisyNDg2OzI0ODY7MjQ4NjswMDI4IDAwMzEgMDAzOSAwMDI5OzAwMjggMDAzMSAwMDM5IDAwMjk7CisyNDg3OzI0ODc7MjQ4NzswMDI4IDAwMzIgMDAzMCAwMDI5OzAwMjggMDAzMiAwMDMwIDAwMjk7CisyNDg4OzI0ODg7MjQ4ODswMDMxIDAwMkU7MDAzMSAwMDJFOworMjQ4OTsyNDg5OzI0ODk7MDAzMiAwMDJFOzAwMzIgMDAyRTsKKzI0OEE7MjQ4QTsyNDhBOzAwMzMgMDAyRTswMDMzIDAwMkU7CisyNDhCOzI0OEI7MjQ4QjswMDM0IDAwMkU7MDAzNCAwMDJFOworMjQ4QzsyNDhDOzI0OEM7MDAzNSAwMDJFOzAwMzUgMDAyRTsKKzI0OEQ7MjQ4RDsyNDhEOzAwMzYgMDAyRTswMDM2IDAwMkU7CisyNDhFOzI0OEU7MjQ4RTswMDM3IDAwMkU7MDAzNyAwMDJFOworMjQ4RjsyNDhGOzI0OEY7MDAzOCAwMDJFOzAwMzggMDAyRTsKKzI0OTA7MjQ5MDsyNDkwOzAwMzkgMDAyRTswMDM5IDAwMkU7CisyNDkxOzI0OTE7MjQ5MTswMDMxIDAwMzAgMDAyRTswMDMxIDAwMzAgMDAyRTsKKzI0OTI7MjQ5MjsyNDkyOzAwMzEgMDAzMSAwMDJFOzAwMzEgMDAzMSAwMDJFOworMjQ5MzsyNDkzOzI0OTM7MDAzMSAwMDMyIDAwMkU7MDAzMSAwMDMyIDAwMkU7CisyNDk0OzI0OTQ7MjQ5NDswMDMxIDAwMzMgMDAyRTswMDMxIDAwMzMgMDAyRTsKKzI0OTU7MjQ5NTsyNDk1OzAwMzEgMDAzNCAwMDJFOzAwMzEgMDAzNCAwMDJFOworMjQ5NjsyNDk2OzI0OTY7MDAzMSAwMDM1IDAwMkU7MDAzMSAwMDM1IDAwMkU7CisyNDk3OzI0OTc7MjQ5NzswMDMxIDAwMzYgMDAyRTswMDMxIDAwMzYgMDAyRTsKKzI0OTg7MjQ5ODsyNDk4OzAwMzEgMDAzNyAwMDJFOzAwMzEgMDAzNyAwMDJFOworMjQ5OTsyNDk5OzI0OTk7MDAzMSAwMDM4IDAwMkU7MDAzMSAwMDM4IDAwMkU7CisyNDlBOzI0OUE7MjQ5QTswMDMxIDAwMzkgMDAyRTswMDMxIDAwMzkgMDAyRTsKKzI0OUI7MjQ5QjsyNDlCOzAwMzIgMDAzMCAwMDJFOzAwMzIgMDAzMCAwMDJFOworMjQ5QzsyNDlDOzI0OUM7MDAyOCAwMDYxIDAwMjk7MDAyOCAwMDYxIDAwMjk7CisyNDlEOzI0OUQ7MjQ5RDswMDI4IDAwNjIgMDAyOTswMDI4IDAwNjIgMDAyOTsKKzI0OUU7MjQ5RTsyNDlFOzAwMjggMDA2MyAwMDI5OzAwMjggMDA2MyAwMDI5OworMjQ5RjsyNDlGOzI0OUY7MDAyOCAwMDY0IDAwMjk7MDAyOCAwMDY0IDAwMjk7CisyNEEwOzI0QTA7MjRBMDswMDI4IDAwNjUgMDAyOTswMDI4IDAwNjUgMDAyOTsKKzI0QTE7MjRBMTsyNEExOzAwMjggMDA2NiAwMDI5OzAwMjggMDA2NiAwMDI5OworMjRBMjsyNEEyOzI0QTI7MDAyOCAwMDY3IDAwMjk7MDAyOCAwMDY3IDAwMjk7CisyNEEzOzI0QTM7MjRBMzswMDI4IDAwNjggMDAyOTswMDI4IDAwNjggMDAyOTsKKzI0QTQ7MjRBNDsyNEE0OzAwMjggMDA2OSAwMDI5OzAwMjggMDA2OSAwMDI5OworMjRBNTsyNEE1OzI0QTU7MDAyOCAwMDZBIDAwMjk7MDAyOCAwMDZBIDAwMjk7CisyNEE2OzI0QTY7MjRBNjswMDI4IDAwNkIgMDAyOTswMDI4IDAwNkIgMDAyOTsKKzI0QTc7MjRBNzsyNEE3OzAwMjggMDA2QyAwMDI5OzAwMjggMDA2QyAwMDI5OworMjRBODsyNEE4OzI0QTg7MDAyOCAwMDZEIDAwMjk7MDAyOCAwMDZEIDAwMjk7CisyNEE5OzI0QTk7MjRBOTswMDI4IDAwNkUgMDAyOTswMDI4IDAwNkUgMDAyOTsKKzI0QUE7MjRBQTsyNEFBOzAwMjggMDA2RiAwMDI5OzAwMjggMDA2RiAwMDI5OworMjRBQjsyNEFCOzI0QUI7MDAyOCAwMDcwIDAwMjk7MDAyOCAwMDcwIDAwMjk7CisyNEFDOzI0QUM7MjRBQzswMDI4IDAwNzEgMDAyOTswMDI4IDAwNzEgMDAyOTsKKzI0QUQ7MjRBRDsyNEFEOzAwMjggMDA3MiAwMDI5OzAwMjggMDA3MiAwMDI5OworMjRBRTsyNEFFOzI0QUU7MDAyOCAwMDczIDAwMjk7MDAyOCAwMDczIDAwMjk7CisyNEFGOzI0QUY7MjRBRjswMDI4IDAwNzQgMDAyOTswMDI4IDAwNzQgMDAyOTsKKzI0QjA7MjRCMDsyNEIwOzAwMjggMDA3NSAwMDI5OzAwMjggMDA3NSAwMDI5OworMjRCMTsyNEIxOzI0QjE7MDAyOCAwMDc2IDAwMjk7MDAyOCAwMDc2IDAwMjk7CisyNEIyOzI0QjI7MjRCMjswMDI4IDAwNzcgMDAyOTswMDI4IDAwNzcgMDAyOTsKKzI0QjM7MjRCMzsyNEIzOzAwMjggMDA3OCAwMDI5OzAwMjggMDA3OCAwMDI5OworMjRCNDsyNEI0OzI0QjQ7MDAyOCAwMDc5IDAwMjk7MDAyOCAwMDc5IDAwMjk7CisyNEI1OzI0QjU7MjRCNTswMDI4IDAwN0EgMDAyOTswMDI4IDAwN0EgMDAyOTsKKzI0QjY7MjRCNjsyNEI2OzAwNDE7MDA0MTsKKzI0Qjc7MjRCNzsyNEI3OzAwNDI7MDA0MjsKKzI0Qjg7MjRCODsyNEI4OzAwNDM7MDA0MzsKKzI0Qjk7MjRCOTsyNEI5OzAwNDQ7MDA0NDsKKzI0QkE7MjRCQTsyNEJBOzAwNDU7MDA0NTsKKzI0QkI7MjRCQjsyNEJCOzAwNDY7MDA0NjsKKzI0QkM7MjRCQzsyNEJDOzAwNDc7MDA0NzsKKzI0QkQ7MjRCRDsyNEJEOzAwNDg7MDA0ODsKKzI0QkU7MjRCRTsyNEJFOzAwNDk7MDA0OTsKKzI0QkY7MjRCRjsyNEJGOzAwNEE7MDA0QTsKKzI0QzA7MjRDMDsyNEMwOzAwNEI7MDA0QjsKKzI0QzE7MjRDMTsyNEMxOzAwNEM7MDA0QzsKKzI0QzI7MjRDMjsyNEMyOzAwNEQ7MDA0RDsKKzI0QzM7MjRDMzsyNEMzOzAwNEU7MDA0RTsKKzI0QzQ7MjRDNDsyNEM0OzAwNEY7MDA0RjsKKzI0QzU7MjRDNTsyNEM1OzAwNTA7MDA1MDsKKzI0QzY7MjRDNjsyNEM2OzAwNTE7MDA1MTsKKzI0Qzc7MjRDNzsyNEM3OzAwNTI7MDA1MjsKKzI0Qzg7MjRDODsyNEM4OzAwNTM7MDA1MzsKKzI0Qzk7MjRDOTsyNEM5OzAwNTQ7MDA1NDsKKzI0Q0E7MjRDQTsyNENBOzAwNTU7MDA1NTsKKzI0Q0I7MjRDQjsyNENCOzAwNTY7MDA1NjsKKzI0Q0M7MjRDQzsyNENDOzAwNTc7MDA1NzsKKzI0Q0Q7MjRDRDsyNENEOzAwNTg7MDA1ODsKKzI0Q0U7MjRDRTsyNENFOzAwNTk7MDA1OTsKKzI0Q0Y7MjRDRjsyNENGOzAwNUE7MDA1QTsKKzI0RDA7MjREMDsyNEQwOzAwNjE7MDA2MTsKKzI0RDE7MjREMTsyNEQxOzAwNjI7MDA2MjsKKzI0RDI7MjREMjsyNEQyOzAwNjM7MDA2MzsKKzI0RDM7MjREMzsyNEQzOzAwNjQ7MDA2NDsKKzI0RDQ7MjRENDsyNEQ0OzAwNjU7MDA2NTsKKzI0RDU7MjRENTsyNEQ1OzAwNjY7MDA2NjsKKzI0RDY7MjRENjsyNEQ2OzAwNjc7MDA2NzsKKzI0RDc7MjRENzsyNEQ3OzAwNjg7MDA2ODsKKzI0RDg7MjREODsyNEQ4OzAwNjk7MDA2OTsKKzI0RDk7MjREOTsyNEQ5OzAwNkE7MDA2QTsKKzI0REE7MjREQTsyNERBOzAwNkI7MDA2QjsKKzI0REI7MjREQjsyNERCOzAwNkM7MDA2QzsKKzI0REM7MjREQzsyNERDOzAwNkQ7MDA2RDsKKzI0REQ7MjRERDsyNEREOzAwNkU7MDA2RTsKKzI0REU7MjRERTsyNERFOzAwNkY7MDA2RjsKKzI0REY7MjRERjsyNERGOzAwNzA7MDA3MDsKKzI0RTA7MjRFMDsyNEUwOzAwNzE7MDA3MTsKKzI0RTE7MjRFMTsyNEUxOzAwNzI7MDA3MjsKKzI0RTI7MjRFMjsyNEUyOzAwNzM7MDA3MzsKKzI0RTM7MjRFMzsyNEUzOzAwNzQ7MDA3NDsKKzI0RTQ7MjRFNDsyNEU0OzAwNzU7MDA3NTsKKzI0RTU7MjRFNTsyNEU1OzAwNzY7MDA3NjsKKzI0RTY7MjRFNjsyNEU2OzAwNzc7MDA3NzsKKzI0RTc7MjRFNzsyNEU3OzAwNzg7MDA3ODsKKzI0RTg7MjRFODsyNEU4OzAwNzk7MDA3OTsKKzI0RTk7MjRFOTsyNEU5OzAwN0E7MDA3QTsKKzI0RUE7MjRFQTsyNEVBOzAwMzA7MDAzMDsKKzJBMEM7MkEwQzsyQTBDOzIyMkIgMjIyQiAyMjJCIDIyMkI7MjIyQiAyMjJCIDIyMkIgMjIyQjsKKzJBNzQ7MkE3NDsyQTc0OzAwM0EgMDAzQSAwMDNEOzAwM0EgMDAzQSAwMDNEOworMkE3NTsyQTc1OzJBNzU7MDAzRCAwMDNEOzAwM0QgMDAzRDsKKzJBNzY7MkE3NjsyQTc2OzAwM0QgMDAzRCAwMDNEOzAwM0QgMDAzRCAwMDNEOworMkFEQzsyQUREIDAzMzg7MkFERCAwMzM4OzJBREQgMDMzODsyQUREIDAzMzg7CisyRTlGOzJFOUY7MkU5Rjs2QkNEOzZCQ0Q7CisyRUYzOzJFRjM7MkVGMzs5RjlGOzlGOUY7CisyRjAwOzJGMDA7MkYwMDs0RTAwOzRFMDA7CisyRjAxOzJGMDE7MkYwMTs0RTI4OzRFMjg7CisyRjAyOzJGMDI7MkYwMjs0RTM2OzRFMzY7CisyRjAzOzJGMDM7MkYwMzs0RTNGOzRFM0Y7CisyRjA0OzJGMDQ7MkYwNDs0RTU5OzRFNTk7CisyRjA1OzJGMDU7MkYwNTs0RTg1OzRFODU7CisyRjA2OzJGMDY7MkYwNjs0RThDOzRFOEM7CisyRjA3OzJGMDc7MkYwNzs0RUEwOzRFQTA7CisyRjA4OzJGMDg7MkYwODs0RUJBOzRFQkE7CisyRjA5OzJGMDk7MkYwOTs1MTNGOzUxM0Y7CisyRjBBOzJGMEE7MkYwQTs1MTY1OzUxNjU7CisyRjBCOzJGMEI7MkYwQjs1MTZCOzUxNkI7CisyRjBDOzJGMEM7MkYwQzs1MTgyOzUxODI7CisyRjBEOzJGMEQ7MkYwRDs1MTk2OzUxOTY7CisyRjBFOzJGMEU7MkYwRTs1MUFCOzUxQUI7CisyRjBGOzJGMEY7MkYwRjs1MUUwOzUxRTA7CisyRjEwOzJGMTA7MkYxMDs1MUY1OzUxRjU7CisyRjExOzJGMTE7MkYxMTs1MjAwOzUyMDA7CisyRjEyOzJGMTI7MkYxMjs1MjlCOzUyOUI7CisyRjEzOzJGMTM7MkYxMzs1MkY5OzUyRjk7CisyRjE0OzJGMTQ7MkYxNDs1MzE1OzUzMTU7CisyRjE1OzJGMTU7MkYxNTs1MzFBOzUzMUE7CisyRjE2OzJGMTY7MkYxNjs1MzM4OzUzMzg7CisyRjE3OzJGMTc7MkYxNzs1MzQxOzUzNDE7CisyRjE4OzJGMTg7MkYxODs1MzVDOzUzNUM7CisyRjE5OzJGMTk7MkYxOTs1MzY5OzUzNjk7CisyRjFBOzJGMUE7MkYxQTs1MzgyOzUzODI7CisyRjFCOzJGMUI7MkYxQjs1M0I2OzUzQjY7CisyRjFDOzJGMUM7MkYxQzs1M0M4OzUzQzg7CisyRjFEOzJGMUQ7MkYxRDs1M0UzOzUzRTM7CisyRjFFOzJGMUU7MkYxRTs1NkQ3OzU2RDc7CisyRjFGOzJGMUY7MkYxRjs1NzFGOzU3MUY7CisyRjIwOzJGMjA7MkYyMDs1OEVCOzU4RUI7CisyRjIxOzJGMjE7MkYyMTs1OTAyOzU5MDI7CisyRjIyOzJGMjI7MkYyMjs1OTBBOzU5MEE7CisyRjIzOzJGMjM7MkYyMzs1OTE1OzU5MTU7CisyRjI0OzJGMjQ7MkYyNDs1OTI3OzU5Mjc7CisyRjI1OzJGMjU7MkYyNTs1OTczOzU5NzM7CisyRjI2OzJGMjY7MkYyNjs1QjUwOzVCNTA7CisyRjI3OzJGMjc7MkYyNzs1QjgwOzVCODA7CisyRjI4OzJGMjg7MkYyODs1QkY4OzVCRjg7CisyRjI5OzJGMjk7MkYyOTs1QzBGOzVDMEY7CisyRjJBOzJGMkE7MkYyQTs1QzIyOzVDMjI7CisyRjJCOzJGMkI7MkYyQjs1QzM4OzVDMzg7CisyRjJDOzJGMkM7MkYyQzs1QzZFOzVDNkU7CisyRjJEOzJGMkQ7MkYyRDs1QzcxOzVDNzE7CisyRjJFOzJGMkU7MkYyRTs1RERCOzVEREI7CisyRjJGOzJGMkY7MkYyRjs1REU1OzVERTU7CisyRjMwOzJGMzA7MkYzMDs1REYxOzVERjE7CisyRjMxOzJGMzE7MkYzMTs1REZFOzVERkU7CisyRjMyOzJGMzI7MkYzMjs1RTcyOzVFNzI7CisyRjMzOzJGMzM7MkYzMzs1RTdBOzVFN0E7CisyRjM0OzJGMzQ7MkYzNDs1RTdGOzVFN0Y7CisyRjM1OzJGMzU7MkYzNTs1RUY0OzVFRjQ7CisyRjM2OzJGMzY7MkYzNjs1RUZFOzVFRkU7CisyRjM3OzJGMzc7MkYzNzs1RjBCOzVGMEI7CisyRjM4OzJGMzg7MkYzODs1RjEzOzVGMTM7CisyRjM5OzJGMzk7MkYzOTs1RjUwOzVGNTA7CisyRjNBOzJGM0E7MkYzQTs1RjYxOzVGNjE7CisyRjNCOzJGM0I7MkYzQjs1RjczOzVGNzM7CisyRjNDOzJGM0M7MkYzQzs1RkMzOzVGQzM7CisyRjNEOzJGM0Q7MkYzRDs2MjA4OzYyMDg7CisyRjNFOzJGM0U7MkYzRTs2MjM2OzYyMzY7CisyRjNGOzJGM0Y7MkYzRjs2MjRCOzYyNEI7CisyRjQwOzJGNDA7MkY0MDs2NTJGOzY1MkY7CisyRjQxOzJGNDE7MkY0MTs2NTM0OzY1MzQ7CisyRjQyOzJGNDI7MkY0Mjs2NTg3OzY1ODc7CisyRjQzOzJGNDM7MkY0Mzs2NTk3OzY1OTc7CisyRjQ0OzJGNDQ7MkY0NDs2NUE0OzY1QTQ7CisyRjQ1OzJGNDU7MkY0NTs2NUI5OzY1Qjk7CisyRjQ2OzJGNDY7MkY0Njs2NUUwOzY1RTA7CisyRjQ3OzJGNDc7MkY0Nzs2NUU1OzY1RTU7CisyRjQ4OzJGNDg7MkY0ODs2NkYwOzY2RjA7CisyRjQ5OzJGNDk7MkY0OTs2NzA4OzY3MDg7CisyRjRBOzJGNEE7MkY0QTs2NzI4OzY3Mjg7CisyRjRCOzJGNEI7MkY0Qjs2QjIwOzZCMjA7CisyRjRDOzJGNEM7MkY0Qzs2QjYyOzZCNjI7CisyRjREOzJGNEQ7MkY0RDs2Qjc5OzZCNzk7CisyRjRFOzJGNEU7MkY0RTs2QkIzOzZCQjM7CisyRjRGOzJGNEY7MkY0Rjs2QkNCOzZCQ0I7CisyRjUwOzJGNTA7MkY1MDs2QkQ0OzZCRDQ7CisyRjUxOzJGNTE7MkY1MTs2QkRCOzZCREI7CisyRjUyOzJGNTI7MkY1Mjs2QzBGOzZDMEY7CisyRjUzOzJGNTM7MkY1Mzs2QzE0OzZDMTQ7CisyRjU0OzJGNTQ7MkY1NDs2QzM0OzZDMzQ7CisyRjU1OzJGNTU7MkY1NTs3MDZCOzcwNkI7CisyRjU2OzJGNTY7MkY1Njs3MjJBOzcyMkE7CisyRjU3OzJGNTc7MkY1Nzs3MjM2OzcyMzY7CisyRjU4OzJGNTg7MkY1ODs3MjNCOzcyM0I7CisyRjU5OzJGNTk7MkY1OTs3MjNGOzcyM0Y7CisyRjVBOzJGNUE7MkY1QTs3MjQ3OzcyNDc7CisyRjVCOzJGNUI7MkY1Qjs3MjU5OzcyNTk7CisyRjVDOzJGNUM7MkY1Qzs3MjVCOzcyNUI7CisyRjVEOzJGNUQ7MkY1RDs3MkFDOzcyQUM7CisyRjVFOzJGNUU7MkY1RTs3Mzg0OzczODQ7CisyRjVGOzJGNUY7MkY1Rjs3Mzg5OzczODk7CisyRjYwOzJGNjA7MkY2MDs3NERDOzc0REM7CisyRjYxOzJGNjE7MkY2MTs3NEU2Ozc0RTY7CisyRjYyOzJGNjI7MkY2Mjs3NTE4Ozc1MTg7CisyRjYzOzJGNjM7MkY2Mzs3NTFGOzc1MUY7CisyRjY0OzJGNjQ7MkY2NDs3NTI4Ozc1Mjg7CisyRjY1OzJGNjU7MkY2NTs3NTMwOzc1MzA7CisyRjY2OzJGNjY7MkY2Njs3NThCOzc1OEI7CisyRjY3OzJGNjc7MkY2Nzs3NTkyOzc1OTI7CisyRjY4OzJGNjg7MkY2ODs3Njc2Ozc2NzY7CisyRjY5OzJGNjk7MkY2OTs3NjdEOzc2N0Q7CisyRjZBOzJGNkE7MkY2QTs3NkFFOzc2QUU7CisyRjZCOzJGNkI7MkY2Qjs3NkJGOzc2QkY7CisyRjZDOzJGNkM7MkY2Qzs3NkVFOzc2RUU7CisyRjZEOzJGNkQ7MkY2RDs3N0RCOzc3REI7CisyRjZFOzJGNkU7MkY2RTs3N0UyOzc3RTI7CisyRjZGOzJGNkY7MkY2Rjs3N0YzOzc3RjM7CisyRjcwOzJGNzA7MkY3MDs3OTNBOzc5M0E7CisyRjcxOzJGNzE7MkY3MTs3OUI4Ozc5Qjg7CisyRjcyOzJGNzI7MkY3Mjs3OUJFOzc5QkU7CisyRjczOzJGNzM7MkY3Mzs3QTc0OzdBNzQ7CisyRjc0OzJGNzQ7MkY3NDs3QUNCOzdBQ0I7CisyRjc1OzJGNzU7MkY3NTs3QUY5OzdBRjk7CisyRjc2OzJGNzY7MkY3Njs3QzczOzdDNzM7CisyRjc3OzJGNzc7MkY3Nzs3Q0Y4OzdDRjg7CisyRjc4OzJGNzg7MkY3ODs3RjM2OzdGMzY7CisyRjc5OzJGNzk7MkY3OTs3RjUxOzdGNTE7CisyRjdBOzJGN0E7MkY3QTs3RjhBOzdGOEE7CisyRjdCOzJGN0I7MkY3Qjs3RkJEOzdGQkQ7CisyRjdDOzJGN0M7MkY3Qzs4MDAxOzgwMDE7CisyRjdEOzJGN0Q7MkY3RDs4MDBDOzgwMEM7CisyRjdFOzJGN0U7MkY3RTs4MDEyOzgwMTI7CisyRjdGOzJGN0Y7MkY3Rjs4MDMzOzgwMzM7CisyRjgwOzJGODA7MkY4MDs4MDdGOzgwN0Y7CisyRjgxOzJGODE7MkY4MTs4MDg5OzgwODk7CisyRjgyOzJGODI7MkY4Mjs4MUUzOzgxRTM7CisyRjgzOzJGODM7MkY4Mzs4MUVBOzgxRUE7CisyRjg0OzJGODQ7MkY4NDs4MUYzOzgxRjM7CisyRjg1OzJGODU7MkY4NTs4MUZDOzgxRkM7CisyRjg2OzJGODY7MkY4Njs4MjBDOzgyMEM7CisyRjg3OzJGODc7MkY4Nzs4MjFCOzgyMUI7CisyRjg4OzJGODg7MkY4ODs4MjFGOzgyMUY7CisyRjg5OzJGODk7MkY4OTs4MjZFOzgyNkU7CisyRjhBOzJGOEE7MkY4QTs4MjcyOzgyNzI7CisyRjhCOzJGOEI7MkY4Qjs4Mjc4OzgyNzg7CisyRjhDOzJGOEM7MkY4Qzs4NjREOzg2NEQ7CisyRjhEOzJGOEQ7MkY4RDs4NjZCOzg2NkI7CisyRjhFOzJGOEU7MkY4RTs4ODQwOzg4NDA7CisyRjhGOzJGOEY7MkY4Rjs4ODRDOzg4NEM7CisyRjkwOzJGOTA7MkY5MDs4ODYzOzg4NjM7CisyRjkxOzJGOTE7MkY5MTs4OTdFOzg5N0U7CisyRjkyOzJGOTI7MkY5Mjs4OThCOzg5OEI7CisyRjkzOzJGOTM7MkY5Mzs4OUQyOzg5RDI7CisyRjk0OzJGOTQ7MkY5NDs4QTAwOzhBMDA7CisyRjk1OzJGOTU7MkY5NTs4QzM3OzhDMzc7CisyRjk2OzJGOTY7MkY5Njs4QzQ2OzhDNDY7CisyRjk3OzJGOTc7MkY5Nzs4QzU1OzhDNTU7CisyRjk4OzJGOTg7MkY5ODs4Qzc4OzhDNzg7CisyRjk5OzJGOTk7MkY5OTs4QzlEOzhDOUQ7CisyRjlBOzJGOUE7MkY5QTs4RDY0OzhENjQ7CisyRjlCOzJGOUI7MkY5Qjs4RDcwOzhENzA7CisyRjlDOzJGOUM7MkY5Qzs4REIzOzhEQjM7CisyRjlEOzJGOUQ7MkY5RDs4RUFCOzhFQUI7CisyRjlFOzJGOUU7MkY5RTs4RUNBOzhFQ0E7CisyRjlGOzJGOUY7MkY5Rjs4RjlCOzhGOUI7CisyRkEwOzJGQTA7MkZBMDs4RkIwOzhGQjA7CisyRkExOzJGQTE7MkZBMTs4RkI1OzhGQjU7CisyRkEyOzJGQTI7MkZBMjs5MDkxOzkwOTE7CisyRkEzOzJGQTM7MkZBMzs5MTQ5OzkxNDk7CisyRkE0OzJGQTQ7MkZBNDs5MUM2OzkxQzY7CisyRkE1OzJGQTU7MkZBNTs5MUNDOzkxQ0M7CisyRkE2OzJGQTY7MkZBNjs5MUQxOzkxRDE7CisyRkE3OzJGQTc7MkZBNzs5NTc3Ozk1Nzc7CisyRkE4OzJGQTg7MkZBODs5NTgwOzk1ODA7CisyRkE5OzJGQTk7MkZBOTs5NjFDOzk2MUM7CisyRkFBOzJGQUE7MkZBQTs5NkI2Ozk2QjY7CisyRkFCOzJGQUI7MkZBQjs5NkI5Ozk2Qjk7CisyRkFDOzJGQUM7MkZBQzs5NkU4Ozk2RTg7CisyRkFEOzJGQUQ7MkZBRDs5NzUxOzk3NTE7CisyRkFFOzJGQUU7MkZBRTs5NzVFOzk3NUU7CisyRkFGOzJGQUY7MkZBRjs5NzYyOzk3NjI7CisyRkIwOzJGQjA7MkZCMDs5NzY5Ozk3Njk7CisyRkIxOzJGQjE7MkZCMTs5N0NCOzk3Q0I7CisyRkIyOzJGQjI7MkZCMjs5N0VEOzk3RUQ7CisyRkIzOzJGQjM7MkZCMzs5N0YzOzk3RjM7CisyRkI0OzJGQjQ7MkZCNDs5ODAxOzk4MDE7CisyRkI1OzJGQjU7MkZCNTs5OEE4Ozk4QTg7CisyRkI2OzJGQjY7MkZCNjs5OERCOzk4REI7CisyRkI3OzJGQjc7MkZCNzs5OERGOzk4REY7CisyRkI4OzJGQjg7MkZCODs5OTk2Ozk5OTY7CisyRkI5OzJGQjk7MkZCOTs5OTk5Ozk5OTk7CisyRkJBOzJGQkE7MkZCQTs5OUFDOzk5QUM7CisyRkJCOzJGQkI7MkZCQjs5QUE4OzlBQTg7CisyRkJDOzJGQkM7MkZCQzs5QUQ4OzlBRDg7CisyRkJEOzJGQkQ7MkZCRDs5QURGOzlBREY7CisyRkJFOzJGQkU7MkZCRTs5QjI1OzlCMjU7CisyRkJGOzJGQkY7MkZCRjs5QjJGOzlCMkY7CisyRkMwOzJGQzA7MkZDMDs5QjMyOzlCMzI7CisyRkMxOzJGQzE7MkZDMTs5QjNDOzlCM0M7CisyRkMyOzJGQzI7MkZDMjs5QjVBOzlCNUE7CisyRkMzOzJGQzM7MkZDMzs5Q0U1OzlDRTU7CisyRkM0OzJGQzQ7MkZDNDs5RTc1OzlFNzU7CisyRkM1OzJGQzU7MkZDNTs5RTdGOzlFN0Y7CisyRkM2OzJGQzY7MkZDNjs5RUE1OzlFQTU7CisyRkM3OzJGQzc7MkZDNzs5RUJCOzlFQkI7CisyRkM4OzJGQzg7MkZDODs5RUMzOzlFQzM7CisyRkM5OzJGQzk7MkZDOTs5RUNEOzlFQ0Q7CisyRkNBOzJGQ0E7MkZDQTs5RUQxOzlFRDE7CisyRkNCOzJGQ0I7MkZDQjs5RUY5OzlFRjk7CisyRkNDOzJGQ0M7MkZDQzs5RUZEOzlFRkQ7CisyRkNEOzJGQ0Q7MkZDRDs5RjBFOzlGMEU7CisyRkNFOzJGQ0U7MkZDRTs5RjEzOzlGMTM7CisyRkNGOzJGQ0Y7MkZDRjs5RjIwOzlGMjA7CisyRkQwOzJGRDA7MkZEMDs5RjNCOzlGM0I7CisyRkQxOzJGRDE7MkZEMTs5RjRBOzlGNEE7CisyRkQyOzJGRDI7MkZEMjs5RjUyOzlGNTI7CisyRkQzOzJGRDM7MkZEMzs5RjhEOzlGOEQ7CisyRkQ0OzJGRDQ7MkZENDs5RjlDOzlGOUM7CisyRkQ1OzJGRDU7MkZENTs5RkEwOzlGQTA7CiszMDAwOzMwMDA7MzAwMDswMDIwOzAwMjA7CiszMDM2OzMwMzY7MzAzNjszMDEyOzMwMTI7CiszMDM4OzMwMzg7MzAzODs1MzQxOzUzNDE7CiszMDM5OzMwMzk7MzAzOTs1MzQ0OzUzNDQ7CiszMDNBOzMwM0E7MzAzQTs1MzQ1OzUzNDU7CiszMDRDOzMwNEM7MzA0QiAzMDk5OzMwNEM7MzA0QiAzMDk5OworMzA0RTszMDRFOzMwNEQgMzA5OTszMDRFOzMwNEQgMzA5OTsKKzMwNTA7MzA1MDszMDRGIDMwOTk7MzA1MDszMDRGIDMwOTk7CiszMDUyOzMwNTI7MzA1MSAzMDk5OzMwNTI7MzA1MSAzMDk5OworMzA1NDszMDU0OzMwNTMgMzA5OTszMDU0OzMwNTMgMzA5OTsKKzMwNTY7MzA1NjszMDU1IDMwOTk7MzA1NjszMDU1IDMwOTk7CiszMDU4OzMwNTg7MzA1NyAzMDk5OzMwNTg7MzA1NyAzMDk5OworMzA1QTszMDVBOzMwNTkgMzA5OTszMDVBOzMwNTkgMzA5OTsKKzMwNUM7MzA1QzszMDVCIDMwOTk7MzA1QzszMDVCIDMwOTk7CiszMDVFOzMwNUU7MzA1RCAzMDk5OzMwNUU7MzA1RCAzMDk5OworMzA2MDszMDYwOzMwNUYgMzA5OTszMDYwOzMwNUYgMzA5OTsKKzMwNjI7MzA2MjszMDYxIDMwOTk7MzA2MjszMDYxIDMwOTk7CiszMDY1OzMwNjU7MzA2NCAzMDk5OzMwNjU7MzA2NCAzMDk5OworMzA2NzszMDY3OzMwNjYgMzA5OTszMDY3OzMwNjYgMzA5OTsKKzMwNjk7MzA2OTszMDY4IDMwOTk7MzA2OTszMDY4IDMwOTk7CiszMDcwOzMwNzA7MzA2RiAzMDk5OzMwNzA7MzA2RiAzMDk5OworMzA3MTszMDcxOzMwNkYgMzA5QTszMDcxOzMwNkYgMzA5QTsKKzMwNzM7MzA3MzszMDcyIDMwOTk7MzA3MzszMDcyIDMwOTk7CiszMDc0OzMwNzQ7MzA3MiAzMDlBOzMwNzQ7MzA3MiAzMDlBOworMzA3NjszMDc2OzMwNzUgMzA5OTszMDc2OzMwNzUgMzA5OTsKKzMwNzc7MzA3NzszMDc1IDMwOUE7MzA3NzszMDc1IDMwOUE7CiszMDc5OzMwNzk7MzA3OCAzMDk5OzMwNzk7MzA3OCAzMDk5OworMzA3QTszMDdBOzMwNzggMzA5QTszMDdBOzMwNzggMzA5QTsKKzMwN0M7MzA3QzszMDdCIDMwOTk7MzA3QzszMDdCIDMwOTk7CiszMDdEOzMwN0Q7MzA3QiAzMDlBOzMwN0Q7MzA3QiAzMDlBOworMzA5NDszMDk0OzMwNDYgMzA5OTszMDk0OzMwNDYgMzA5OTsKKzMwOUI7MzA5QjszMDlCOzAwMjAgMzA5OTswMDIwIDMwOTk7CiszMDlDOzMwOUM7MzA5QzswMDIwIDMwOUE7MDAyMCAzMDlBOworMzA5RTszMDlFOzMwOUQgMzA5OTszMDlFOzMwOUQgMzA5OTsKKzMwOUY7MzA5RjszMDlGOzMwODggMzA4QTszMDg4IDMwOEE7CiszMEFDOzMwQUM7MzBBQiAzMDk5OzMwQUM7MzBBQiAzMDk5OworMzBBRTszMEFFOzMwQUQgMzA5OTszMEFFOzMwQUQgMzA5OTsKKzMwQjA7MzBCMDszMEFGIDMwOTk7MzBCMDszMEFGIDMwOTk7CiszMEIyOzMwQjI7MzBCMSAzMDk5OzMwQjI7MzBCMSAzMDk5OworMzBCNDszMEI0OzMwQjMgMzA5OTszMEI0OzMwQjMgMzA5OTsKKzMwQjY7MzBCNjszMEI1IDMwOTk7MzBCNjszMEI1IDMwOTk7CiszMEI4OzMwQjg7MzBCNyAzMDk5OzMwQjg7MzBCNyAzMDk5OworMzBCQTszMEJBOzMwQjkgMzA5OTszMEJBOzMwQjkgMzA5OTsKKzMwQkM7MzBCQzszMEJCIDMwOTk7MzBCQzszMEJCIDMwOTk7CiszMEJFOzMwQkU7MzBCRCAzMDk5OzMwQkU7MzBCRCAzMDk5OworMzBDMDszMEMwOzMwQkYgMzA5OTszMEMwOzMwQkYgMzA5OTsKKzMwQzI7MzBDMjszMEMxIDMwOTk7MzBDMjszMEMxIDMwOTk7CiszMEM1OzMwQzU7MzBDNCAzMDk5OzMwQzU7MzBDNCAzMDk5OworMzBDNzszMEM3OzMwQzYgMzA5OTszMEM3OzMwQzYgMzA5OTsKKzMwQzk7MzBDOTszMEM4IDMwOTk7MzBDOTszMEM4IDMwOTk7CiszMEQwOzMwRDA7MzBDRiAzMDk5OzMwRDA7MzBDRiAzMDk5OworMzBEMTszMEQxOzMwQ0YgMzA5QTszMEQxOzMwQ0YgMzA5QTsKKzMwRDM7MzBEMzszMEQyIDMwOTk7MzBEMzszMEQyIDMwOTk7CiszMEQ0OzMwRDQ7MzBEMiAzMDlBOzMwRDQ7MzBEMiAzMDlBOworMzBENjszMEQ2OzMwRDUgMzA5OTszMEQ2OzMwRDUgMzA5OTsKKzMwRDc7MzBENzszMEQ1IDMwOUE7MzBENzszMEQ1IDMwOUE7CiszMEQ5OzMwRDk7MzBEOCAzMDk5OzMwRDk7MzBEOCAzMDk5OworMzBEQTszMERBOzMwRDggMzA5QTszMERBOzMwRDggMzA5QTsKKzMwREM7MzBEQzszMERCIDMwOTk7MzBEQzszMERCIDMwOTk7CiszMEREOzMwREQ7MzBEQiAzMDlBOzMwREQ7MzBEQiAzMDlBOworMzBGNDszMEY0OzMwQTYgMzA5OTszMEY0OzMwQTYgMzA5OTsKKzMwRjc7MzBGNzszMEVGIDMwOTk7MzBGNzszMEVGIDMwOTk7CiszMEY4OzMwRjg7MzBGMCAzMDk5OzMwRjg7MzBGMCAzMDk5OworMzBGOTszMEY5OzMwRjEgMzA5OTszMEY5OzMwRjEgMzA5OTsKKzMwRkE7MzBGQTszMEYyIDMwOTk7MzBGQTszMEYyIDMwOTk7CiszMEZFOzMwRkU7MzBGRCAzMDk5OzMwRkU7MzBGRCAzMDk5OworMzBGRjszMEZGOzMwRkY7MzBCMyAzMEM4OzMwQjMgMzBDODsKKzMxMzE7MzEzMTszMTMxOzExMDA7MTEwMDsKKzMxMzI7MzEzMjszMTMyOzExMDE7MTEwMTsKKzMxMzM7MzEzMzszMTMzOzExQUE7MTFBQTsKKzMxMzQ7MzEzNDszMTM0OzExMDI7MTEwMjsKKzMxMzU7MzEzNTszMTM1OzExQUM7MTFBQzsKKzMxMzY7MzEzNjszMTM2OzExQUQ7MTFBRDsKKzMxMzc7MzEzNzszMTM3OzExMDM7MTEwMzsKKzMxMzg7MzEzODszMTM4OzExMDQ7MTEwNDsKKzMxMzk7MzEzOTszMTM5OzExMDU7MTEwNTsKKzMxM0E7MzEzQTszMTNBOzExQjA7MTFCMDsKKzMxM0I7MzEzQjszMTNCOzExQjE7MTFCMTsKKzMxM0M7MzEzQzszMTNDOzExQjI7MTFCMjsKKzMxM0Q7MzEzRDszMTNEOzExQjM7MTFCMzsKKzMxM0U7MzEzRTszMTNFOzExQjQ7MTFCNDsKKzMxM0Y7MzEzRjszMTNGOzExQjU7MTFCNTsKKzMxNDA7MzE0MDszMTQwOzExMUE7MTExQTsKKzMxNDE7MzE0MTszMTQxOzExMDY7MTEwNjsKKzMxNDI7MzE0MjszMTQyOzExMDc7MTEwNzsKKzMxNDM7MzE0MzszMTQzOzExMDg7MTEwODsKKzMxNDQ7MzE0NDszMTQ0OzExMjE7MTEyMTsKKzMxNDU7MzE0NTszMTQ1OzExMDk7MTEwOTsKKzMxNDY7MzE0NjszMTQ2OzExMEE7MTEwQTsKKzMxNDc7MzE0NzszMTQ3OzExMEI7MTEwQjsKKzMxNDg7MzE0ODszMTQ4OzExMEM7MTEwQzsKKzMxNDk7MzE0OTszMTQ5OzExMEQ7MTEwRDsKKzMxNEE7MzE0QTszMTRBOzExMEU7MTEwRTsKKzMxNEI7MzE0QjszMTRCOzExMEY7MTEwRjsKKzMxNEM7MzE0QzszMTRDOzExMTA7MTExMDsKKzMxNEQ7MzE0RDszMTREOzExMTE7MTExMTsKKzMxNEU7MzE0RTszMTRFOzExMTI7MTExMjsKKzMxNEY7MzE0RjszMTRGOzExNjE7MTE2MTsKKzMxNTA7MzE1MDszMTUwOzExNjI7MTE2MjsKKzMxNTE7MzE1MTszMTUxOzExNjM7MTE2MzsKKzMxNTI7MzE1MjszMTUyOzExNjQ7MTE2NDsKKzMxNTM7MzE1MzszMTUzOzExNjU7MTE2NTsKKzMxNTQ7MzE1NDszMTU0OzExNjY7MTE2NjsKKzMxNTU7MzE1NTszMTU1OzExNjc7MTE2NzsKKzMxNTY7MzE1NjszMTU2OzExNjg7MTE2ODsKKzMxNTc7MzE1NzszMTU3OzExNjk7MTE2OTsKKzMxNTg7MzE1ODszMTU4OzExNkE7MTE2QTsKKzMxNTk7MzE1OTszMTU5OzExNkI7MTE2QjsKKzMxNUE7MzE1QTszMTVBOzExNkM7MTE2QzsKKzMxNUI7MzE1QjszMTVCOzExNkQ7MTE2RDsKKzMxNUM7MzE1QzszMTVDOzExNkU7MTE2RTsKKzMxNUQ7MzE1RDszMTVEOzExNkY7MTE2RjsKKzMxNUU7MzE1RTszMTVFOzExNzA7MTE3MDsKKzMxNUY7MzE1RjszMTVGOzExNzE7MTE3MTsKKzMxNjA7MzE2MDszMTYwOzExNzI7MTE3MjsKKzMxNjE7MzE2MTszMTYxOzExNzM7MTE3MzsKKzMxNjI7MzE2MjszMTYyOzExNzQ7MTE3NDsKKzMxNjM7MzE2MzszMTYzOzExNzU7MTE3NTsKKzMxNjQ7MzE2NDszMTY0OzExNjA7MTE2MDsKKzMxNjU7MzE2NTszMTY1OzExMTQ7MTExNDsKKzMxNjY7MzE2NjszMTY2OzExMTU7MTExNTsKKzMxNjc7MzE2NzszMTY3OzExQzc7MTFDNzsKKzMxNjg7MzE2ODszMTY4OzExQzg7MTFDODsKKzMxNjk7MzE2OTszMTY5OzExQ0M7MTFDQzsKKzMxNkE7MzE2QTszMTZBOzExQ0U7MTFDRTsKKzMxNkI7MzE2QjszMTZCOzExRDM7MTFEMzsKKzMxNkM7MzE2QzszMTZDOzExRDc7MTFENzsKKzMxNkQ7MzE2RDszMTZEOzExRDk7MTFEOTsKKzMxNkU7MzE2RTszMTZFOzExMUM7MTExQzsKKzMxNkY7MzE2RjszMTZGOzExREQ7MTFERDsKKzMxNzA7MzE3MDszMTcwOzExREY7MTFERjsKKzMxNzE7MzE3MTszMTcxOzExMUQ7MTExRDsKKzMxNzI7MzE3MjszMTcyOzExMUU7MTExRTsKKzMxNzM7MzE3MzszMTczOzExMjA7MTEyMDsKKzMxNzQ7MzE3NDszMTc0OzExMjI7MTEyMjsKKzMxNzU7MzE3NTszMTc1OzExMjM7MTEyMzsKKzMxNzY7MzE3NjszMTc2OzExMjc7MTEyNzsKKzMxNzc7MzE3NzszMTc3OzExMjk7MTEyOTsKKzMxNzg7MzE3ODszMTc4OzExMkI7MTEyQjsKKzMxNzk7MzE3OTszMTc5OzExMkM7MTEyQzsKKzMxN0E7MzE3QTszMTdBOzExMkQ7MTEyRDsKKzMxN0I7MzE3QjszMTdCOzExMkU7MTEyRTsKKzMxN0M7MzE3QzszMTdDOzExMkY7MTEyRjsKKzMxN0Q7MzE3RDszMTdEOzExMzI7MTEzMjsKKzMxN0U7MzE3RTszMTdFOzExMzY7MTEzNjsKKzMxN0Y7MzE3RjszMTdGOzExNDA7MTE0MDsKKzMxODA7MzE4MDszMTgwOzExNDc7MTE0NzsKKzMxODE7MzE4MTszMTgxOzExNEM7MTE0QzsKKzMxODI7MzE4MjszMTgyOzExRjE7MTFGMTsKKzMxODM7MzE4MzszMTgzOzExRjI7MTFGMjsKKzMxODQ7MzE4NDszMTg0OzExNTc7MTE1NzsKKzMxODU7MzE4NTszMTg1OzExNTg7MTE1ODsKKzMxODY7MzE4NjszMTg2OzExNTk7MTE1OTsKKzMxODc7MzE4NzszMTg3OzExODQ7MTE4NDsKKzMxODg7MzE4ODszMTg4OzExODU7MTE4NTsKKzMxODk7MzE4OTszMTg5OzExODg7MTE4ODsKKzMxOEE7MzE4QTszMThBOzExOTE7MTE5MTsKKzMxOEI7MzE4QjszMThCOzExOTI7MTE5MjsKKzMxOEM7MzE4QzszMThDOzExOTQ7MTE5NDsKKzMxOEQ7MzE4RDszMThEOzExOUU7MTE5RTsKKzMxOEU7MzE4RTszMThFOzExQTE7MTFBMTsKKzMxOTI7MzE5MjszMTkyOzRFMDA7NEUwMDsKKzMxOTM7MzE5MzszMTkzOzRFOEM7NEU4QzsKKzMxOTQ7MzE5NDszMTk0OzRFMDk7NEUwOTsKKzMxOTU7MzE5NTszMTk1OzU2REI7NTZEQjsKKzMxOTY7MzE5NjszMTk2OzRFMEE7NEUwQTsKKzMxOTc7MzE5NzszMTk3OzRFMkQ7NEUyRDsKKzMxOTg7MzE5ODszMTk4OzRFMEI7NEUwQjsKKzMxOTk7MzE5OTszMTk5Ozc1MzI7NzUzMjsKKzMxOUE7MzE5QTszMTlBOzRFNTk7NEU1OTsKKzMxOUI7MzE5QjszMTlCOzRFMTk7NEUxOTsKKzMxOUM7MzE5QzszMTlDOzRFMDE7NEUwMTsKKzMxOUQ7MzE5RDszMTlEOzU5Mjk7NTkyOTsKKzMxOUU7MzE5RTszMTlFOzU3MzA7NTczMDsKKzMxOUY7MzE5RjszMTlGOzRFQkE7NEVCQTsKKzMyMDA7MzIwMDszMjAwOzAwMjggMTEwMCAwMDI5OzAwMjggMTEwMCAwMDI5OworMzIwMTszMjAxOzMyMDE7MDAyOCAxMTAyIDAwMjk7MDAyOCAxMTAyIDAwMjk7CiszMjAyOzMyMDI7MzIwMjswMDI4IDExMDMgMDAyOTswMDI4IDExMDMgMDAyOTsKKzMyMDM7MzIwMzszMjAzOzAwMjggMTEwNSAwMDI5OzAwMjggMTEwNSAwMDI5OworMzIwNDszMjA0OzMyMDQ7MDAyOCAxMTA2IDAwMjk7MDAyOCAxMTA2IDAwMjk7CiszMjA1OzMyMDU7MzIwNTswMDI4IDExMDcgMDAyOTswMDI4IDExMDcgMDAyOTsKKzMyMDY7MzIwNjszMjA2OzAwMjggMTEwOSAwMDI5OzAwMjggMTEwOSAwMDI5OworMzIwNzszMjA3OzMyMDc7MDAyOCAxMTBCIDAwMjk7MDAyOCAxMTBCIDAwMjk7CiszMjA4OzMyMDg7MzIwODswMDI4IDExMEMgMDAyOTswMDI4IDExMEMgMDAyOTsKKzMyMDk7MzIwOTszMjA5OzAwMjggMTEwRSAwMDI5OzAwMjggMTEwRSAwMDI5OworMzIwQTszMjBBOzMyMEE7MDAyOCAxMTBGIDAwMjk7MDAyOCAxMTBGIDAwMjk7CiszMjBCOzMyMEI7MzIwQjswMDI4IDExMTAgMDAyOTswMDI4IDExMTAgMDAyOTsKKzMyMEM7MzIwQzszMjBDOzAwMjggMTExMSAwMDI5OzAwMjggMTExMSAwMDI5OworMzIwRDszMjBEOzMyMEQ7MDAyOCAxMTEyIDAwMjk7MDAyOCAxMTEyIDAwMjk7CiszMjBFOzMyMEU7MzIwRTswMDI4IEFDMDAgMDAyOTswMDI4IDExMDAgMTE2MSAwMDI5OworMzIwRjszMjBGOzMyMEY7MDAyOCBCMDk4IDAwMjk7MDAyOCAxMTAyIDExNjEgMDAyOTsKKzMyMTA7MzIxMDszMjEwOzAwMjggQjJFNCAwMDI5OzAwMjggMTEwMyAxMTYxIDAwMjk7CiszMjExOzMyMTE7MzIxMTswMDI4IEI3N0MgMDAyOTswMDI4IDExMDUgMTE2MSAwMDI5OworMzIxMjszMjEyOzMyMTI7MDAyOCBCOUM4IDAwMjk7MDAyOCAxMTA2IDExNjEgMDAyOTsKKzMyMTM7MzIxMzszMjEzOzAwMjggQkMxNCAwMDI5OzAwMjggMTEwNyAxMTYxIDAwMjk7CiszMjE0OzMyMTQ7MzIxNDswMDI4IEMwQUMgMDAyOTswMDI4IDExMDkgMTE2MSAwMDI5OworMzIxNTszMjE1OzMyMTU7MDAyOCBDNTQ0IDAwMjk7MDAyOCAxMTBCIDExNjEgMDAyOTsKKzMyMTY7MzIxNjszMjE2OzAwMjggQzc5MCAwMDI5OzAwMjggMTEwQyAxMTYxIDAwMjk7CiszMjE3OzMyMTc7MzIxNzswMDI4IENDMjggMDAyOTswMDI4IDExMEUgMTE2MSAwMDI5OworMzIxODszMjE4OzMyMTg7MDAyOCBDRTc0IDAwMjk7MDAyOCAxMTBGIDExNjEgMDAyOTsKKzMyMTk7MzIxOTszMjE5OzAwMjggRDBDMCAwMDI5OzAwMjggMTExMCAxMTYxIDAwMjk7CiszMjFBOzMyMUE7MzIxQTswMDI4IEQzMEMgMDAyOTswMDI4IDExMTEgMTE2MSAwMDI5OworMzIxQjszMjFCOzMyMUI7MDAyOCBENTU4IDAwMjk7MDAyOCAxMTEyIDExNjEgMDAyOTsKKzMyMUM7MzIxQzszMjFDOzAwMjggQzhGQyAwMDI5OzAwMjggMTEwQyAxMTZFIDAwMjk7CiszMjIwOzMyMjA7MzIyMDswMDI4IDRFMDAgMDAyOTswMDI4IDRFMDAgMDAyOTsKKzMyMjE7MzIyMTszMjIxOzAwMjggNEU4QyAwMDI5OzAwMjggNEU4QyAwMDI5OworMzIyMjszMjIyOzMyMjI7MDAyOCA0RTA5IDAwMjk7MDAyOCA0RTA5IDAwMjk7CiszMjIzOzMyMjM7MzIyMzswMDI4IDU2REIgMDAyOTswMDI4IDU2REIgMDAyOTsKKzMyMjQ7MzIyNDszMjI0OzAwMjggNEU5NCAwMDI5OzAwMjggNEU5NCAwMDI5OworMzIyNTszMjI1OzMyMjU7MDAyOCA1MTZEIDAwMjk7MDAyOCA1MTZEIDAwMjk7CiszMjI2OzMyMjY7MzIyNjswMDI4IDRFMDMgMDAyOTswMDI4IDRFMDMgMDAyOTsKKzMyMjc7MzIyNzszMjI3OzAwMjggNTE2QiAwMDI5OzAwMjggNTE2QiAwMDI5OworMzIyODszMjI4OzMyMjg7MDAyOCA0RTVEIDAwMjk7MDAyOCA0RTVEIDAwMjk7CiszMjI5OzMyMjk7MzIyOTswMDI4IDUzNDEgMDAyOTswMDI4IDUzNDEgMDAyOTsKKzMyMkE7MzIyQTszMjJBOzAwMjggNjcwOCAwMDI5OzAwMjggNjcwOCAwMDI5OworMzIyQjszMjJCOzMyMkI7MDAyOCA3MDZCIDAwMjk7MDAyOCA3MDZCIDAwMjk7CiszMjJDOzMyMkM7MzIyQzswMDI4IDZDMzQgMDAyOTswMDI4IDZDMzQgMDAyOTsKKzMyMkQ7MzIyRDszMjJEOzAwMjggNjcyOCAwMDI5OzAwMjggNjcyOCAwMDI5OworMzIyRTszMjJFOzMyMkU7MDAyOCA5MUQxIDAwMjk7MDAyOCA5MUQxIDAwMjk7CiszMjJGOzMyMkY7MzIyRjswMDI4IDU3MUYgMDAyOTswMDI4IDU3MUYgMDAyOTsKKzMyMzA7MzIzMDszMjMwOzAwMjggNjVFNSAwMDI5OzAwMjggNjVFNSAwMDI5OworMzIzMTszMjMxOzMyMzE7MDAyOCA2ODJBIDAwMjk7MDAyOCA2ODJBIDAwMjk7CiszMjMyOzMyMzI7MzIzMjswMDI4IDY3MDkgMDAyOTswMDI4IDY3MDkgMDAyOTsKKzMyMzM7MzIzMzszMjMzOzAwMjggNzkzRSAwMDI5OzAwMjggNzkzRSAwMDI5OworMzIzNDszMjM0OzMyMzQ7MDAyOCA1NDBEIDAwMjk7MDAyOCA1NDBEIDAwMjk7CiszMjM1OzMyMzU7MzIzNTswMDI4IDcyNzkgMDAyOTswMDI4IDcyNzkgMDAyOTsKKzMyMzY7MzIzNjszMjM2OzAwMjggOENBMSAwMDI5OzAwMjggOENBMSAwMDI5OworMzIzNzszMjM3OzMyMzc7MDAyOCA3OTVEIDAwMjk7MDAyOCA3OTVEIDAwMjk7CiszMjM4OzMyMzg7MzIzODswMDI4IDUyQjQgMDAyOTswMDI4IDUyQjQgMDAyOTsKKzMyMzk7MzIzOTszMjM5OzAwMjggNEVFMyAwMDI5OzAwMjggNEVFMyAwMDI5OworMzIzQTszMjNBOzMyM0E7MDAyOCA1NDdDIDAwMjk7MDAyOCA1NDdDIDAwMjk7CiszMjNCOzMyM0I7MzIzQjswMDI4IDVCNjYgMDAyOTswMDI4IDVCNjYgMDAyOTsKKzMyM0M7MzIzQzszMjNDOzAwMjggNzZFMyAwMDI5OzAwMjggNzZFMyAwMDI5OworMzIzRDszMjNEOzMyM0Q7MDAyOCA0RjAxIDAwMjk7MDAyOCA0RjAxIDAwMjk7CiszMjNFOzMyM0U7MzIzRTswMDI4IDhDQzcgMDAyOTswMDI4IDhDQzcgMDAyOTsKKzMyM0Y7MzIzRjszMjNGOzAwMjggNTM1NCAwMDI5OzAwMjggNTM1NCAwMDI5OworMzI0MDszMjQwOzMyNDA7MDAyOCA3OTZEIDAwMjk7MDAyOCA3OTZEIDAwMjk7CiszMjQxOzMyNDE7MzI0MTswMDI4IDRGMTEgMDAyOTswMDI4IDRGMTEgMDAyOTsKKzMyNDI7MzI0MjszMjQyOzAwMjggODFFQSAwMDI5OzAwMjggODFFQSAwMDI5OworMzI0MzszMjQzOzMyNDM7MDAyOCA4MUYzIDAwMjk7MDAyOCA4MUYzIDAwMjk7CiszMjUxOzMyNTE7MzI1MTswMDMyIDAwMzE7MDAzMiAwMDMxOworMzI1MjszMjUyOzMyNTI7MDAzMiAwMDMyOzAwMzIgMDAzMjsKKzMyNTM7MzI1MzszMjUzOzAwMzIgMDAzMzswMDMyIDAwMzM7CiszMjU0OzMyNTQ7MzI1NDswMDMyIDAwMzQ7MDAzMiAwMDM0OworMzI1NTszMjU1OzMyNTU7MDAzMiAwMDM1OzAwMzIgMDAzNTsKKzMyNTY7MzI1NjszMjU2OzAwMzIgMDAzNjswMDMyIDAwMzY7CiszMjU3OzMyNTc7MzI1NzswMDMyIDAwMzc7MDAzMiAwMDM3OworMzI1ODszMjU4OzMyNTg7MDAzMiAwMDM4OzAwMzIgMDAzODsKKzMyNTk7MzI1OTszMjU5OzAwMzIgMDAzOTswMDMyIDAwMzk7CiszMjVBOzMyNUE7MzI1QTswMDMzIDAwMzA7MDAzMyAwMDMwOworMzI1QjszMjVCOzMyNUI7MDAzMyAwMDMxOzAwMzMgMDAzMTsKKzMyNUM7MzI1QzszMjVDOzAwMzMgMDAzMjswMDMzIDAwMzI7CiszMjVEOzMyNUQ7MzI1RDswMDMzIDAwMzM7MDAzMyAwMDMzOworMzI1RTszMjVFOzMyNUU7MDAzMyAwMDM0OzAwMzMgMDAzNDsKKzMyNUY7MzI1RjszMjVGOzAwMzMgMDAzNTswMDMzIDAwMzU7CiszMjYwOzMyNjA7MzI2MDsxMTAwOzExMDA7CiszMjYxOzMyNjE7MzI2MTsxMTAyOzExMDI7CiszMjYyOzMyNjI7MzI2MjsxMTAzOzExMDM7CiszMjYzOzMyNjM7MzI2MzsxMTA1OzExMDU7CiszMjY0OzMyNjQ7MzI2NDsxMTA2OzExMDY7CiszMjY1OzMyNjU7MzI2NTsxMTA3OzExMDc7CiszMjY2OzMyNjY7MzI2NjsxMTA5OzExMDk7CiszMjY3OzMyNjc7MzI2NzsxMTBCOzExMEI7CiszMjY4OzMyNjg7MzI2ODsxMTBDOzExMEM7CiszMjY5OzMyNjk7MzI2OTsxMTBFOzExMEU7CiszMjZBOzMyNkE7MzI2QTsxMTBGOzExMEY7CiszMjZCOzMyNkI7MzI2QjsxMTEwOzExMTA7CiszMjZDOzMyNkM7MzI2QzsxMTExOzExMTE7CiszMjZEOzMyNkQ7MzI2RDsxMTEyOzExMTI7CiszMjZFOzMyNkU7MzI2RTtBQzAwOzExMDAgMTE2MTsKKzMyNkY7MzI2RjszMjZGO0IwOTg7MTEwMiAxMTYxOworMzI3MDszMjcwOzMyNzA7QjJFNDsxMTAzIDExNjE7CiszMjcxOzMyNzE7MzI3MTtCNzdDOzExMDUgMTE2MTsKKzMyNzI7MzI3MjszMjcyO0I5Qzg7MTEwNiAxMTYxOworMzI3MzszMjczOzMyNzM7QkMxNDsxMTA3IDExNjE7CiszMjc0OzMyNzQ7MzI3NDtDMEFDOzExMDkgMTE2MTsKKzMyNzU7MzI3NTszMjc1O0M1NDQ7MTEwQiAxMTYxOworMzI3NjszMjc2OzMyNzY7Qzc5MDsxMTBDIDExNjE7CiszMjc3OzMyNzc7MzI3NztDQzI4OzExMEUgMTE2MTsKKzMyNzg7MzI3ODszMjc4O0NFNzQ7MTEwRiAxMTYxOworMzI3OTszMjc5OzMyNzk7RDBDMDsxMTEwIDExNjE7CiszMjdBOzMyN0E7MzI3QTtEMzBDOzExMTEgMTE2MTsKKzMyN0I7MzI3QjszMjdCO0Q1NTg7MTExMiAxMTYxOworMzI4MDszMjgwOzMyODA7NEUwMDs0RTAwOworMzI4MTszMjgxOzMyODE7NEU4Qzs0RThDOworMzI4MjszMjgyOzMyODI7NEUwOTs0RTA5OworMzI4MzszMjgzOzMyODM7NTZEQjs1NkRCOworMzI4NDszMjg0OzMyODQ7NEU5NDs0RTk0OworMzI4NTszMjg1OzMyODU7NTE2RDs1MTZEOworMzI4NjszMjg2OzMyODY7NEUwMzs0RTAzOworMzI4NzszMjg3OzMyODc7NTE2Qjs1MTZCOworMzI4ODszMjg4OzMyODg7NEU1RDs0RTVEOworMzI4OTszMjg5OzMyODk7NTM0MTs1MzQxOworMzI4QTszMjhBOzMyOEE7NjcwODs2NzA4OworMzI4QjszMjhCOzMyOEI7NzA2Qjs3MDZCOworMzI4QzszMjhDOzMyOEM7NkMzNDs2QzM0OworMzI4RDszMjhEOzMyOEQ7NjcyODs2NzI4OworMzI4RTszMjhFOzMyOEU7OTFEMTs5MUQxOworMzI4RjszMjhGOzMyOEY7NTcxRjs1NzFGOworMzI5MDszMjkwOzMyOTA7NjVFNTs2NUU1OworMzI5MTszMjkxOzMyOTE7NjgyQTs2ODJBOworMzI5MjszMjkyOzMyOTI7NjcwOTs2NzA5OworMzI5MzszMjkzOzMyOTM7NzkzRTs3OTNFOworMzI5NDszMjk0OzMyOTQ7NTQwRDs1NDBEOworMzI5NTszMjk1OzMyOTU7NzI3OTs3Mjc5OworMzI5NjszMjk2OzMyOTY7OENBMTs4Q0ExOworMzI5NzszMjk3OzMyOTc7Nzk1RDs3OTVEOworMzI5ODszMjk4OzMyOTg7NTJCNDs1MkI0OworMzI5OTszMjk5OzMyOTk7NzlEODs3OUQ4OworMzI5QTszMjlBOzMyOUE7NzUzNzs3NTM3OworMzI5QjszMjlCOzMyOUI7NTk3Mzs1OTczOworMzI5QzszMjlDOzMyOUM7OTA2OTs5MDY5OworMzI5RDszMjlEOzMyOUQ7NTEyQTs1MTJBOworMzI5RTszMjlFOzMyOUU7NTM3MDs1MzcwOworMzI5RjszMjlGOzMyOUY7NkNFODs2Q0U4OworMzJBMDszMkEwOzMyQTA7OTgwNTs5ODA1OworMzJBMTszMkExOzMyQTE7NEYxMTs0RjExOworMzJBMjszMkEyOzMyQTI7NTE5OTs1MTk5OworMzJBMzszMkEzOzMyQTM7NkI2Mzs2QjYzOworMzJBNDszMkE0OzMyQTQ7NEUwQTs0RTBBOworMzJBNTszMkE1OzMyQTU7NEUyRDs0RTJEOworMzJBNjszMkE2OzMyQTY7NEUwQjs0RTBCOworMzJBNzszMkE3OzMyQTc7NURFNjs1REU2OworMzJBODszMkE4OzMyQTg7NTNGMzs1M0YzOworMzJBOTszMkE5OzMyQTk7NTMzQjs1MzNCOworMzJBQTszMkFBOzMyQUE7NUI5Nzs1Qjk3OworMzJBQjszMkFCOzMyQUI7NUI2Njs1QjY2OworMzJBQzszMkFDOzMyQUM7NzZFMzs3NkUzOworMzJBRDszMkFEOzMyQUQ7NEYwMTs0RjAxOworMzJBRTszMkFFOzMyQUU7OENDNzs4Q0M3OworMzJBRjszMkFGOzMyQUY7NTM1NDs1MzU0OworMzJCMDszMkIwOzMyQjA7NTkxQzs1OTFDOworMzJCMTszMkIxOzMyQjE7MDAzMyAwMDM2OzAwMzMgMDAzNjsKKzMyQjI7MzJCMjszMkIyOzAwMzMgMDAzNzswMDMzIDAwMzc7CiszMkIzOzMyQjM7MzJCMzswMDMzIDAwMzg7MDAzMyAwMDM4OworMzJCNDszMkI0OzMyQjQ7MDAzMyAwMDM5OzAwMzMgMDAzOTsKKzMyQjU7MzJCNTszMkI1OzAwMzQgMDAzMDswMDM0IDAwMzA7CiszMkI2OzMyQjY7MzJCNjswMDM0IDAwMzE7MDAzNCAwMDMxOworMzJCNzszMkI3OzMyQjc7MDAzNCAwMDMyOzAwMzQgMDAzMjsKKzMyQjg7MzJCODszMkI4OzAwMzQgMDAzMzswMDM0IDAwMzM7CiszMkI5OzMyQjk7MzJCOTswMDM0IDAwMzQ7MDAzNCAwMDM0OworMzJCQTszMkJBOzMyQkE7MDAzNCAwMDM1OzAwMzQgMDAzNTsKKzMyQkI7MzJCQjszMkJCOzAwMzQgMDAzNjswMDM0IDAwMzY7CiszMkJDOzMyQkM7MzJCQzswMDM0IDAwMzc7MDAzNCAwMDM3OworMzJCRDszMkJEOzMyQkQ7MDAzNCAwMDM4OzAwMzQgMDAzODsKKzMyQkU7MzJCRTszMkJFOzAwMzQgMDAzOTswMDM0IDAwMzk7CiszMkJGOzMyQkY7MzJCRjswMDM1IDAwMzA7MDAzNSAwMDMwOworMzJDMDszMkMwOzMyQzA7MDAzMSA2NzA4OzAwMzEgNjcwODsKKzMyQzE7MzJDMTszMkMxOzAwMzIgNjcwODswMDMyIDY3MDg7CiszMkMyOzMyQzI7MzJDMjswMDMzIDY3MDg7MDAzMyA2NzA4OworMzJDMzszMkMzOzMyQzM7MDAzNCA2NzA4OzAwMzQgNjcwODsKKzMyQzQ7MzJDNDszMkM0OzAwMzUgNjcwODswMDM1IDY3MDg7CiszMkM1OzMyQzU7MzJDNTswMDM2IDY3MDg7MDAzNiA2NzA4OworMzJDNjszMkM2OzMyQzY7MDAzNyA2NzA4OzAwMzcgNjcwODsKKzMyQzc7MzJDNzszMkM3OzAwMzggNjcwODswMDM4IDY3MDg7CiszMkM4OzMyQzg7MzJDODswMDM5IDY3MDg7MDAzOSA2NzA4OworMzJDOTszMkM5OzMyQzk7MDAzMSAwMDMwIDY3MDg7MDAzMSAwMDMwIDY3MDg7CiszMkNBOzMyQ0E7MzJDQTswMDMxIDAwMzEgNjcwODswMDMxIDAwMzEgNjcwODsKKzMyQ0I7MzJDQjszMkNCOzAwMzEgMDAzMiA2NzA4OzAwMzEgMDAzMiA2NzA4OworMzJEMDszMkQwOzMyRDA7MzBBMjszMEEyOworMzJEMTszMkQxOzMyRDE7MzBBNDszMEE0OworMzJEMjszMkQyOzMyRDI7MzBBNjszMEE2OworMzJEMzszMkQzOzMyRDM7MzBBODszMEE4OworMzJENDszMkQ0OzMyRDQ7MzBBQTszMEFBOworMzJENTszMkQ1OzMyRDU7MzBBQjszMEFCOworMzJENjszMkQ2OzMyRDY7MzBBRDszMEFEOworMzJENzszMkQ3OzMyRDc7MzBBRjszMEFGOworMzJEODszMkQ4OzMyRDg7MzBCMTszMEIxOworMzJEOTszMkQ5OzMyRDk7MzBCMzszMEIzOworMzJEQTszMkRBOzMyREE7MzBCNTszMEI1OworMzJEQjszMkRCOzMyREI7MzBCNzszMEI3OworMzJEQzszMkRDOzMyREM7MzBCOTszMEI5OworMzJERDszMkREOzMyREQ7MzBCQjszMEJCOworMzJERTszMkRFOzMyREU7MzBCRDszMEJEOworMzJERjszMkRGOzMyREY7MzBCRjszMEJGOworMzJFMDszMkUwOzMyRTA7MzBDMTszMEMxOworMzJFMTszMkUxOzMyRTE7MzBDNDszMEM0OworMzJFMjszMkUyOzMyRTI7MzBDNjszMEM2OworMzJFMzszMkUzOzMyRTM7MzBDODszMEM4OworMzJFNDszMkU0OzMyRTQ7MzBDQTszMENBOworMzJFNTszMkU1OzMyRTU7MzBDQjszMENCOworMzJFNjszMkU2OzMyRTY7MzBDQzszMENDOworMzJFNzszMkU3OzMyRTc7MzBDRDszMENEOworMzJFODszMkU4OzMyRTg7MzBDRTszMENFOworMzJFOTszMkU5OzMyRTk7MzBDRjszMENGOworMzJFQTszMkVBOzMyRUE7MzBEMjszMEQyOworMzJFQjszMkVCOzMyRUI7MzBENTszMEQ1OworMzJFQzszMkVDOzMyRUM7MzBEODszMEQ4OworMzJFRDszMkVEOzMyRUQ7MzBEQjszMERCOworMzJFRTszMkVFOzMyRUU7MzBERTszMERFOworMzJFRjszMkVGOzMyRUY7MzBERjszMERGOworMzJGMDszMkYwOzMyRjA7MzBFMDszMEUwOworMzJGMTszMkYxOzMyRjE7MzBFMTszMEUxOworMzJGMjszMkYyOzMyRjI7MzBFMjszMEUyOworMzJGMzszMkYzOzMyRjM7MzBFNDszMEU0OworMzJGNDszMkY0OzMyRjQ7MzBFNjszMEU2OworMzJGNTszMkY1OzMyRjU7MzBFODszMEU4OworMzJGNjszMkY2OzMyRjY7MzBFOTszMEU5OworMzJGNzszMkY3OzMyRjc7MzBFQTszMEVBOworMzJGODszMkY4OzMyRjg7MzBFQjszMEVCOworMzJGOTszMkY5OzMyRjk7MzBFQzszMEVDOworMzJGQTszMkZBOzMyRkE7MzBFRDszMEVEOworMzJGQjszMkZCOzMyRkI7MzBFRjszMEVGOworMzJGQzszMkZDOzMyRkM7MzBGMDszMEYwOworMzJGRDszMkZEOzMyRkQ7MzBGMTszMEYxOworMzJGRTszMkZFOzMyRkU7MzBGMjszMEYyOworMzMwMDszMzAwOzMzMDA7MzBBMiAzMEQxIDMwRkMgMzBDODszMEEyIDMwQ0YgMzA5QSAzMEZDIDMwQzg7CiszMzAxOzMzMDE7MzMwMTszMEEyIDMwRUIgMzBENSAzMEExOzMwQTIgMzBFQiAzMEQ1IDMwQTE7CiszMzAyOzMzMDI7MzMwMjszMEEyIDMwRjMgMzBEQSAzMEEyOzMwQTIgMzBGMyAzMEQ4IDMwOUEgMzBBMjsKKzMzMDM7MzMwMzszMzAzOzMwQTIgMzBGQyAzMEVCOzMwQTIgMzBGQyAzMEVCOworMzMwNDszMzA0OzMzMDQ7MzBBNCAzMENCIDMwRjMgMzBCMDszMEE0IDMwQ0IgMzBGMyAzMEFGIDMwOTk7CiszMzA1OzMzMDU7MzMwNTszMEE0IDMwRjMgMzBDMTszMEE0IDMwRjMgMzBDMTsKKzMzMDY7MzMwNjszMzA2OzMwQTYgMzBBOSAzMEYzOzMwQTYgMzBBOSAzMEYzOworMzMwNzszMzA3OzMzMDc7MzBBOCAzMEI5IDMwQUYgMzBGQyAzMEM5OzMwQTggMzBCOSAzMEFGIDMwRkMgMzBDOCAzMDk5OworMzMwODszMzA4OzMzMDg7MzBBOCAzMEZDIDMwQUIgMzBGQzszMEE4IDMwRkMgMzBBQiAzMEZDOworMzMwOTszMzA5OzMzMDk7MzBBQSAzMEYzIDMwQjk7MzBBQSAzMEYzIDMwQjk7CiszMzBBOzMzMEE7MzMwQTszMEFBIDMwRkMgMzBFMDszMEFBIDMwRkMgMzBFMDsKKzMzMEI7MzMwQjszMzBCOzMwQUIgMzBBNCAzMEVBOzMwQUIgMzBBNCAzMEVBOworMzMwQzszMzBDOzMzMEM7MzBBQiAzMEU5IDMwQzMgMzBDODszMEFCIDMwRTkgMzBDMyAzMEM4OworMzMwRDszMzBEOzMzMEQ7MzBBQiAzMEVEIDMwRUEgMzBGQzszMEFCIDMwRUQgMzBFQSAzMEZDOworMzMwRTszMzBFOzMzMEU7MzBBQyAzMEVEIDMwRjM7MzBBQiAzMDk5IDMwRUQgMzBGMzsKKzMzMEY7MzMwRjszMzBGOzMwQUMgMzBGMyAzMERFOzMwQUIgMzA5OSAzMEYzIDMwREU7CiszMzEwOzMzMTA7MzMxMDszMEFFIDMwQUM7MzBBRCAzMDk5IDMwQUIgMzA5OTsKKzMzMTE7MzMxMTszMzExOzMwQUUgMzBDQiAzMEZDOzMwQUQgMzA5OSAzMENCIDMwRkM7CiszMzEyOzMzMTI7MzMxMjszMEFEIDMwRTUgMzBFQSAzMEZDOzMwQUQgMzBFNSAzMEVBIDMwRkM7CiszMzEzOzMzMTM7MzMxMzszMEFFIDMwRUIgMzBDMCAzMEZDOzMwQUQgMzA5OSAzMEVCIDMwQkYgMzA5OSAzMEZDOworMzMxNDszMzE0OzMzMTQ7MzBBRCAzMEVEOzMwQUQgMzBFRDsKKzMzMTU7MzMxNTszMzE1OzMwQUQgMzBFRCAzMEIwIDMwRTkgMzBFMDszMEFEIDMwRUQgMzBBRiAzMDk5IDMwRTkgMzBFMDsKKzMzMTY7MzMxNjszMzE2OzMwQUQgMzBFRCAzMEUxIDMwRkMgMzBDOCAzMEVCOzMwQUQgMzBFRCAzMEUxIDMwRkMgMzBDOCAzMEVCOworMzMxNzszMzE3OzMzMTc7MzBBRCAzMEVEIDMwRUYgMzBDMyAzMEM4OzMwQUQgMzBFRCAzMEVGIDMwQzMgMzBDODsKKzMzMTg7MzMxODszMzE4OzMwQjAgMzBFOSAzMEUwOzMwQUYgMzA5OSAzMEU5IDMwRTA7CiszMzE5OzMzMTk7MzMxOTszMEIwIDMwRTkgMzBFMCAzMEM4IDMwRjM7MzBBRiAzMDk5IDMwRTkgMzBFMCAzMEM4IDMwRjM7CiszMzFBOzMzMUE7MzMxQTszMEFGIDMwRUIgMzBCQyAzMEE0IDMwRUQ7MzBBRiAzMEVCIDMwQkIgMzA5OSAzMEE0IDMwRUQ7CiszMzFCOzMzMUI7MzMxQjszMEFGIDMwRUQgMzBGQyAzMENEOzMwQUYgMzBFRCAzMEZDIDMwQ0Q7CiszMzFDOzMzMUM7MzMxQzszMEIxIDMwRkMgMzBCOTszMEIxIDMwRkMgMzBCOTsKKzMzMUQ7MzMxRDszMzFEOzMwQjMgMzBFQiAzMENBOzMwQjMgMzBFQiAzMENBOworMzMxRTszMzFFOzMzMUU7MzBCMyAzMEZDIDMwREQ7MzBCMyAzMEZDIDMwREIgMzA5QTsKKzMzMUY7MzMxRjszMzFGOzMwQjUgMzBBNCAzMEFGIDMwRUI7MzBCNSAzMEE0IDMwQUYgMzBFQjsKKzMzMjA7MzMyMDszMzIwOzMwQjUgMzBGMyAzMEMxIDMwRkMgMzBFMDszMEI1IDMwRjMgMzBDMSAzMEZDIDMwRTA7CiszMzIxOzMzMjE7MzMyMTszMEI3IDMwRUEgMzBGMyAzMEIwOzMwQjcgMzBFQSAzMEYzIDMwQUYgMzA5OTsKKzMzMjI7MzMyMjszMzIyOzMwQkIgMzBGMyAzMEMxOzMwQkIgMzBGMyAzMEMxOworMzMyMzszMzIzOzMzMjM7MzBCQiAzMEYzIDMwQzg7MzBCQiAzMEYzIDMwQzg7CiszMzI0OzMzMjQ7MzMyNDszMEMwIDMwRkMgMzBCOTszMEJGIDMwOTkgMzBGQyAzMEI5OworMzMyNTszMzI1OzMzMjU7MzBDNyAzMEI3OzMwQzYgMzA5OSAzMEI3OworMzMyNjszMzI2OzMzMjY7MzBDOSAzMEVCOzMwQzggMzA5OSAzMEVCOworMzMyNzszMzI3OzMzMjc7MzBDOCAzMEYzOzMwQzggMzBGMzsKKzMzMjg7MzMyODszMzI4OzMwQ0EgMzBDRTszMENBIDMwQ0U7CiszMzI5OzMzMjk7MzMyOTszMENFIDMwQzMgMzBDODszMENFIDMwQzMgMzBDODsKKzMzMkE7MzMyQTszMzJBOzMwQ0YgMzBBNCAzMEM0OzMwQ0YgMzBBNCAzMEM0OworMzMyQjszMzJCOzMzMkI7MzBEMSAzMEZDIDMwQkIgMzBGMyAzMEM4OzMwQ0YgMzA5QSAzMEZDIDMwQkIgMzBGMyAzMEM4OworMzMyQzszMzJDOzMzMkM7MzBEMSAzMEZDIDMwQzQ7MzBDRiAzMDlBIDMwRkMgMzBDNDsKKzMzMkQ7MzMyRDszMzJEOzMwRDAgMzBGQyAzMEVDIDMwRUI7MzBDRiAzMDk5IDMwRkMgMzBFQyAzMEVCOworMzMyRTszMzJFOzMzMkU7MzBENCAzMEEyIDMwQjkgMzBDOCAzMEVCOzMwRDIgMzA5QSAzMEEyIDMwQjkgMzBDOCAzMEVCOworMzMyRjszMzJGOzMzMkY7MzBENCAzMEFGIDMwRUI7MzBEMiAzMDlBIDMwQUYgMzBFQjsKKzMzMzA7MzMzMDszMzMwOzMwRDQgMzBCMzszMEQyIDMwOUEgMzBCMzsKKzMzMzE7MzMzMTszMzMxOzMwRDMgMzBFQjszMEQyIDMwOTkgMzBFQjsKKzMzMzI7MzMzMjszMzMyOzMwRDUgMzBBMSAzMEU5IDMwQzMgMzBDOTszMEQ1IDMwQTEgMzBFOSAzMEMzIDMwQzggMzA5OTsKKzMzMzM7MzMzMzszMzMzOzMwRDUgMzBBMyAzMEZDIDMwQzg7MzBENSAzMEEzIDMwRkMgMzBDODsKKzMzMzQ7MzMzNDszMzM0OzMwRDYgMzBDMyAzMEI3IDMwQTcgMzBFQjszMEQ1IDMwOTkgMzBDMyAzMEI3IDMwQTcgMzBFQjsKKzMzMzU7MzMzNTszMzM1OzMwRDUgMzBFOSAzMEYzOzMwRDUgMzBFOSAzMEYzOworMzMzNjszMzM2OzMzMzY7MzBEOCAzMEFGIDMwQkYgMzBGQyAzMEVCOzMwRDggMzBBRiAzMEJGIDMwRkMgMzBFQjsKKzMzMzc7MzMzNzszMzM3OzMwREEgMzBCRDszMEQ4IDMwOUEgMzBCRDsKKzMzMzg7MzMzODszMzM4OzMwREEgMzBDQiAzMEQyOzMwRDggMzA5QSAzMENCIDMwRDI7CiszMzM5OzMzMzk7MzMzOTszMEQ4IDMwRUIgMzBDNDszMEQ4IDMwRUIgMzBDNDsKKzMzM0E7MzMzQTszMzNBOzMwREEgMzBGMyAzMEI5OzMwRDggMzA5QSAzMEYzIDMwQjk7CiszMzNCOzMzM0I7MzMzQjszMERBIDMwRkMgMzBCODszMEQ4IDMwOUEgMzBGQyAzMEI3IDMwOTk7CiszMzNDOzMzM0M7MzMzQzszMEQ5IDMwRkMgMzBCRjszMEQ4IDMwOTkgMzBGQyAzMEJGOworMzMzRDszMzNEOzMzM0Q7MzBERCAzMEE0IDMwRjMgMzBDODszMERCIDMwOUEgMzBBNCAzMEYzIDMwQzg7CiszMzNFOzMzM0U7MzMzRTszMERDIDMwRUIgMzBDODszMERCIDMwOTkgMzBFQiAzMEM4OworMzMzRjszMzNGOzMzM0Y7MzBEQiAzMEYzOzMwREIgMzBGMzsKKzMzNDA7MzM0MDszMzQwOzMwREQgMzBGMyAzMEM5OzMwREIgMzA5QSAzMEYzIDMwQzggMzA5OTsKKzMzNDE7MzM0MTszMzQxOzMwREIgMzBGQyAzMEVCOzMwREIgMzBGQyAzMEVCOworMzM0MjszMzQyOzMzNDI7MzBEQiAzMEZDIDMwRjM7MzBEQiAzMEZDIDMwRjM7CiszMzQzOzMzNDM7MzM0MzszMERFIDMwQTQgMzBBRiAzMEVEOzMwREUgMzBBNCAzMEFGIDMwRUQ7CiszMzQ0OzMzNDQ7MzM0NDszMERFIDMwQTQgMzBFQjszMERFIDMwQTQgMzBFQjsKKzMzNDU7MzM0NTszMzQ1OzMwREUgMzBDMyAzMENGOzMwREUgMzBDMyAzMENGOworMzM0NjszMzQ2OzMzNDY7MzBERSAzMEVCIDMwQUY7MzBERSAzMEVCIDMwQUY7CiszMzQ3OzMzNDc7MzM0NzszMERFIDMwRjMgMzBCNyAzMEU3IDMwRjM7MzBERSAzMEYzIDMwQjcgMzBFNyAzMEYzOworMzM0ODszMzQ4OzMzNDg7MzBERiAzMEFGIDMwRUQgMzBGMzszMERGIDMwQUYgMzBFRCAzMEYzOworMzM0OTszMzQ5OzMzNDk7MzBERiAzMEVBOzMwREYgMzBFQTsKKzMzNEE7MzM0QTszMzRBOzMwREYgMzBFQSAzMEQwIDMwRkMgMzBFQjszMERGIDMwRUEgMzBDRiAzMDk5IDMwRkMgMzBFQjsKKzMzNEI7MzM0QjszMzRCOzMwRTEgMzBBQzszMEUxIDMwQUIgMzA5OTsKKzMzNEM7MzM0QzszMzRDOzMwRTEgMzBBQyAzMEM4IDMwRjM7MzBFMSAzMEFCIDMwOTkgMzBDOCAzMEYzOworMzM0RDszMzREOzMzNEQ7MzBFMSAzMEZDIDMwQzggMzBFQjszMEUxIDMwRkMgMzBDOCAzMEVCOworMzM0RTszMzRFOzMzNEU7MzBFNCAzMEZDIDMwQzk7MzBFNCAzMEZDIDMwQzggMzA5OTsKKzMzNEY7MzM0RjszMzRGOzMwRTQgMzBGQyAzMEVCOzMwRTQgMzBGQyAzMEVCOworMzM1MDszMzUwOzMzNTA7MzBFNiAzMEEyIDMwRjM7MzBFNiAzMEEyIDMwRjM7CiszMzUxOzMzNTE7MzM1MTszMEVBIDMwQzMgMzBDOCAzMEVCOzMwRUEgMzBDMyAzMEM4IDMwRUI7CiszMzUyOzMzNTI7MzM1MjszMEVBIDMwRTk7MzBFQSAzMEU5OworMzM1MzszMzUzOzMzNTM7MzBFQiAzMEQ0IDMwRkM7MzBFQiAzMEQyIDMwOUEgMzBGQzsKKzMzNTQ7MzM1NDszMzU0OzMwRUIgMzBGQyAzMEQ2IDMwRUI7MzBFQiAzMEZDIDMwRDUgMzA5OSAzMEVCOworMzM1NTszMzU1OzMzNTU7MzBFQyAzMEUwOzMwRUMgMzBFMDsKKzMzNTY7MzM1NjszMzU2OzMwRUMgMzBGMyAzMEM4IDMwQjIgMzBGMzszMEVDIDMwRjMgMzBDOCAzMEIxIDMwOTkgMzBGMzsKKzMzNTc7MzM1NzszMzU3OzMwRUYgMzBDMyAzMEM4OzMwRUYgMzBDMyAzMEM4OworMzM1ODszMzU4OzMzNTg7MDAzMCA3MEI5OzAwMzAgNzBCOTsKKzMzNTk7MzM1OTszMzU5OzAwMzEgNzBCOTswMDMxIDcwQjk7CiszMzVBOzMzNUE7MzM1QTswMDMyIDcwQjk7MDAzMiA3MEI5OworMzM1QjszMzVCOzMzNUI7MDAzMyA3MEI5OzAwMzMgNzBCOTsKKzMzNUM7MzM1QzszMzVDOzAwMzQgNzBCOTswMDM0IDcwQjk7CiszMzVEOzMzNUQ7MzM1RDswMDM1IDcwQjk7MDAzNSA3MEI5OworMzM1RTszMzVFOzMzNUU7MDAzNiA3MEI5OzAwMzYgNzBCOTsKKzMzNUY7MzM1RjszMzVGOzAwMzcgNzBCOTswMDM3IDcwQjk7CiszMzYwOzMzNjA7MzM2MDswMDM4IDcwQjk7MDAzOCA3MEI5OworMzM2MTszMzYxOzMzNjE7MDAzOSA3MEI5OzAwMzkgNzBCOTsKKzMzNjI7MzM2MjszMzYyOzAwMzEgMDAzMCA3MEI5OzAwMzEgMDAzMCA3MEI5OworMzM2MzszMzYzOzMzNjM7MDAzMSAwMDMxIDcwQjk7MDAzMSAwMDMxIDcwQjk7CiszMzY0OzMzNjQ7MzM2NDswMDMxIDAwMzIgNzBCOTswMDMxIDAwMzIgNzBCOTsKKzMzNjU7MzM2NTszMzY1OzAwMzEgMDAzMyA3MEI5OzAwMzEgMDAzMyA3MEI5OworMzM2NjszMzY2OzMzNjY7MDAzMSAwMDM0IDcwQjk7MDAzMSAwMDM0IDcwQjk7CiszMzY3OzMzNjc7MzM2NzswMDMxIDAwMzUgNzBCOTswMDMxIDAwMzUgNzBCOTsKKzMzNjg7MzM2ODszMzY4OzAwMzEgMDAzNiA3MEI5OzAwMzEgMDAzNiA3MEI5OworMzM2OTszMzY5OzMzNjk7MDAzMSAwMDM3IDcwQjk7MDAzMSAwMDM3IDcwQjk7CiszMzZBOzMzNkE7MzM2QTswMDMxIDAwMzggNzBCOTswMDMxIDAwMzggNzBCOTsKKzMzNkI7MzM2QjszMzZCOzAwMzEgMDAzOSA3MEI5OzAwMzEgMDAzOSA3MEI5OworMzM2QzszMzZDOzMzNkM7MDAzMiAwMDMwIDcwQjk7MDAzMiAwMDMwIDcwQjk7CiszMzZEOzMzNkQ7MzM2RDswMDMyIDAwMzEgNzBCOTswMDMyIDAwMzEgNzBCOTsKKzMzNkU7MzM2RTszMzZFOzAwMzIgMDAzMiA3MEI5OzAwMzIgMDAzMiA3MEI5OworMzM2RjszMzZGOzMzNkY7MDAzMiAwMDMzIDcwQjk7MDAzMiAwMDMzIDcwQjk7CiszMzcwOzMzNzA7MzM3MDswMDMyIDAwMzQgNzBCOTswMDMyIDAwMzQgNzBCOTsKKzMzNzE7MzM3MTszMzcxOzAwNjggMDA1MCAwMDYxOzAwNjggMDA1MCAwMDYxOworMzM3MjszMzcyOzMzNzI7MDA2NCAwMDYxOzAwNjQgMDA2MTsKKzMzNzM7MzM3MzszMzczOzAwNDEgMDA1NTswMDQxIDAwNTU7CiszMzc0OzMzNzQ7MzM3NDswMDYyIDAwNjEgMDA3MjswMDYyIDAwNjEgMDA3MjsKKzMzNzU7MzM3NTszMzc1OzAwNkYgMDA1NjswMDZGIDAwNTY7CiszMzc2OzMzNzY7MzM3NjswMDcwIDAwNjM7MDA3MCAwMDYzOworMzM3QjszMzdCOzMzN0I7NUU3MyA2MjEwOzVFNzMgNjIxMDsKKzMzN0M7MzM3QzszMzdDOzY2MkQgNTQ4Qzs2NjJEIDU0OEM7CiszMzdEOzMzN0Q7MzM3RDs1OTI3IDZCNjM7NTkyNyA2QjYzOworMzM3RTszMzdFOzMzN0U7NjYwRSA2Q0JCOzY2MEUgNkNCQjsKKzMzN0Y7MzM3RjszMzdGOzY4MkEgNUYwRiA0RjFBIDc5M0U7NjgyQSA1RjBGIDRGMUEgNzkzRTsKKzMzODA7MzM4MDszMzgwOzAwNzAgMDA0MTswMDcwIDAwNDE7CiszMzgxOzMzODE7MzM4MTswMDZFIDAwNDE7MDA2RSAwMDQxOworMzM4MjszMzgyOzMzODI7MDNCQyAwMDQxOzAzQkMgMDA0MTsKKzMzODM7MzM4MzszMzgzOzAwNkQgMDA0MTswMDZEIDAwNDE7CiszMzg0OzMzODQ7MzM4NDswMDZCIDAwNDE7MDA2QiAwMDQxOworMzM4NTszMzg1OzMzODU7MDA0QiAwMDQyOzAwNEIgMDA0MjsKKzMzODY7MzM4NjszMzg2OzAwNEQgMDA0MjswMDREIDAwNDI7CiszMzg3OzMzODc7MzM4NzswMDQ3IDAwNDI7MDA0NyAwMDQyOworMzM4ODszMzg4OzMzODg7MDA2MyAwMDYxIDAwNkM7MDA2MyAwMDYxIDAwNkM7CiszMzg5OzMzODk7MzM4OTswMDZCIDAwNjMgMDA2MSAwMDZDOzAwNkIgMDA2MyAwMDYxIDAwNkM7CiszMzhBOzMzOEE7MzM4QTswMDcwIDAwNDY7MDA3MCAwMDQ2OworMzM4QjszMzhCOzMzOEI7MDA2RSAwMDQ2OzAwNkUgMDA0NjsKKzMzOEM7MzM4QzszMzhDOzAzQkMgMDA0NjswM0JDIDAwNDY7CiszMzhEOzMzOEQ7MzM4RDswM0JDIDAwNjc7MDNCQyAwMDY3OworMzM4RTszMzhFOzMzOEU7MDA2RCAwMDY3OzAwNkQgMDA2NzsKKzMzOEY7MzM4RjszMzhGOzAwNkIgMDA2NzswMDZCIDAwNjc7CiszMzkwOzMzOTA7MzM5MDswMDQ4IDAwN0E7MDA0OCAwMDdBOworMzM5MTszMzkxOzMzOTE7MDA2QiAwMDQ4IDAwN0E7MDA2QiAwMDQ4IDAwN0E7CiszMzkyOzMzOTI7MzM5MjswMDREIDAwNDggMDA3QTswMDREIDAwNDggMDA3QTsKKzMzOTM7MzM5MzszMzkzOzAwNDcgMDA0OCAwMDdBOzAwNDcgMDA0OCAwMDdBOworMzM5NDszMzk0OzMzOTQ7MDA1NCAwMDQ4IDAwN0E7MDA1NCAwMDQ4IDAwN0E7CiszMzk1OzMzOTU7MzM5NTswM0JDIDAwNkM7MDNCQyAwMDZDOworMzM5NjszMzk2OzMzOTY7MDA2RCAwMDZDOzAwNkQgMDA2QzsKKzMzOTc7MzM5NzszMzk3OzAwNjQgMDA2QzswMDY0IDAwNkM7CiszMzk4OzMzOTg7MzM5ODswMDZCIDAwNkM7MDA2QiAwMDZDOworMzM5OTszMzk5OzMzOTk7MDA2NiAwMDZEOzAwNjYgMDA2RDsKKzMzOUE7MzM5QTszMzlBOzAwNkUgMDA2RDswMDZFIDAwNkQ7CiszMzlCOzMzOUI7MzM5QjswM0JDIDAwNkQ7MDNCQyAwMDZEOworMzM5QzszMzlDOzMzOUM7MDA2RCAwMDZEOzAwNkQgMDA2RDsKKzMzOUQ7MzM5RDszMzlEOzAwNjMgMDA2RDswMDYzIDAwNkQ7CiszMzlFOzMzOUU7MzM5RTswMDZCIDAwNkQ7MDA2QiAwMDZEOworMzM5RjszMzlGOzMzOUY7MDA2RCAwMDZEIDAwMzI7MDA2RCAwMDZEIDAwMzI7CiszM0EwOzMzQTA7MzNBMDswMDYzIDAwNkQgMDAzMjswMDYzIDAwNkQgMDAzMjsKKzMzQTE7MzNBMTszM0ExOzAwNkQgMDAzMjswMDZEIDAwMzI7CiszM0EyOzMzQTI7MzNBMjswMDZCIDAwNkQgMDAzMjswMDZCIDAwNkQgMDAzMjsKKzMzQTM7MzNBMzszM0EzOzAwNkQgMDA2RCAwMDMzOzAwNkQgMDA2RCAwMDMzOworMzNBNDszM0E0OzMzQTQ7MDA2MyAwMDZEIDAwMzM7MDA2MyAwMDZEIDAwMzM7CiszM0E1OzMzQTU7MzNBNTswMDZEIDAwMzM7MDA2RCAwMDMzOworMzNBNjszM0E2OzMzQTY7MDA2QiAwMDZEIDAwMzM7MDA2QiAwMDZEIDAwMzM7CiszM0E3OzMzQTc7MzNBNzswMDZEIDIyMTUgMDA3MzswMDZEIDIyMTUgMDA3MzsKKzMzQTg7MzNBODszM0E4OzAwNkQgMjIxNSAwMDczIDAwMzI7MDA2RCAyMjE1IDAwNzMgMDAzMjsKKzMzQTk7MzNBOTszM0E5OzAwNTAgMDA2MTswMDUwIDAwNjE7CiszM0FBOzMzQUE7MzNBQTswMDZCIDAwNTAgMDA2MTswMDZCIDAwNTAgMDA2MTsKKzMzQUI7MzNBQjszM0FCOzAwNEQgMDA1MCAwMDYxOzAwNEQgMDA1MCAwMDYxOworMzNBQzszM0FDOzMzQUM7MDA0NyAwMDUwIDAwNjE7MDA0NyAwMDUwIDAwNjE7CiszM0FEOzMzQUQ7MzNBRDswMDcyIDAwNjEgMDA2NDswMDcyIDAwNjEgMDA2NDsKKzMzQUU7MzNBRTszM0FFOzAwNzIgMDA2MSAwMDY0IDIyMTUgMDA3MzswMDcyIDAwNjEgMDA2NCAyMjE1IDAwNzM7CiszM0FGOzMzQUY7MzNBRjswMDcyIDAwNjEgMDA2NCAyMjE1IDAwNzMgMDAzMjswMDcyIDAwNjEgMDA2NCAyMjE1IDAwNzMgMDAzMjsKKzMzQjA7MzNCMDszM0IwOzAwNzAgMDA3MzswMDcwIDAwNzM7CiszM0IxOzMzQjE7MzNCMTswMDZFIDAwNzM7MDA2RSAwMDczOworMzNCMjszM0IyOzMzQjI7MDNCQyAwMDczOzAzQkMgMDA3MzsKKzMzQjM7MzNCMzszM0IzOzAwNkQgMDA3MzswMDZEIDAwNzM7CiszM0I0OzMzQjQ7MzNCNDswMDcwIDAwNTY7MDA3MCAwMDU2OworMzNCNTszM0I1OzMzQjU7MDA2RSAwMDU2OzAwNkUgMDA1NjsKKzMzQjY7MzNCNjszM0I2OzAzQkMgMDA1NjswM0JDIDAwNTY7CiszM0I3OzMzQjc7MzNCNzswMDZEIDAwNTY7MDA2RCAwMDU2OworMzNCODszM0I4OzMzQjg7MDA2QiAwMDU2OzAwNkIgMDA1NjsKKzMzQjk7MzNCOTszM0I5OzAwNEQgMDA1NjswMDREIDAwNTY7CiszM0JBOzMzQkE7MzNCQTswMDcwIDAwNTc7MDA3MCAwMDU3OworMzNCQjszM0JCOzMzQkI7MDA2RSAwMDU3OzAwNkUgMDA1NzsKKzMzQkM7MzNCQzszM0JDOzAzQkMgMDA1NzswM0JDIDAwNTc7CiszM0JEOzMzQkQ7MzNCRDswMDZEIDAwNTc7MDA2RCAwMDU3OworMzNCRTszM0JFOzMzQkU7MDA2QiAwMDU3OzAwNkIgMDA1NzsKKzMzQkY7MzNCRjszM0JGOzAwNEQgMDA1NzswMDREIDAwNTc7CiszM0MwOzMzQzA7MzNDMDswMDZCIDAzQTk7MDA2QiAwM0E5OworMzNDMTszM0MxOzMzQzE7MDA0RCAwM0E5OzAwNEQgMDNBOTsKKzMzQzI7MzNDMjszM0MyOzAwNjEgMDAyRSAwMDZEIDAwMkU7MDA2MSAwMDJFIDAwNkQgMDAyRTsKKzMzQzM7MzNDMzszM0MzOzAwNDIgMDA3MTswMDQyIDAwNzE7CiszM0M0OzMzQzQ7MzNDNDswMDYzIDAwNjM7MDA2MyAwMDYzOworMzNDNTszM0M1OzMzQzU7MDA2MyAwMDY0OzAwNjMgMDA2NDsKKzMzQzY7MzNDNjszM0M2OzAwNDMgMjIxNSAwMDZCIDAwNjc7MDA0MyAyMjE1IDAwNkIgMDA2NzsKKzMzQzc7MzNDNzszM0M3OzAwNDMgMDA2RiAwMDJFOzAwNDMgMDA2RiAwMDJFOworMzNDODszM0M4OzMzQzg7MDA2NCAwMDQyOzAwNjQgMDA0MjsKKzMzQzk7MzNDOTszM0M5OzAwNDcgMDA3OTswMDQ3IDAwNzk7CiszM0NBOzMzQ0E7MzNDQTswMDY4IDAwNjE7MDA2OCAwMDYxOworMzNDQjszM0NCOzMzQ0I7MDA0OCAwMDUwOzAwNDggMDA1MDsKKzMzQ0M7MzNDQzszM0NDOzAwNjkgMDA2RTswMDY5IDAwNkU7CiszM0NEOzMzQ0Q7MzNDRDswMDRCIDAwNEI7MDA0QiAwMDRCOworMzNDRTszM0NFOzMzQ0U7MDA0QiAwMDREOzAwNEIgMDA0RDsKKzMzQ0Y7MzNDRjszM0NGOzAwNkIgMDA3NDswMDZCIDAwNzQ7CiszM0QwOzMzRDA7MzNEMDswMDZDIDAwNkQ7MDA2QyAwMDZEOworMzNEMTszM0QxOzMzRDE7MDA2QyAwMDZFOzAwNkMgMDA2RTsKKzMzRDI7MzNEMjszM0QyOzAwNkMgMDA2RiAwMDY3OzAwNkMgMDA2RiAwMDY3OworMzNEMzszM0QzOzMzRDM7MDA2QyAwMDc4OzAwNkMgMDA3ODsKKzMzRDQ7MzNENDszM0Q0OzAwNkQgMDA2MjswMDZEIDAwNjI7CiszM0Q1OzMzRDU7MzNENTswMDZEIDAwNjkgMDA2QzswMDZEIDAwNjkgMDA2QzsKKzMzRDY7MzNENjszM0Q2OzAwNkQgMDA2RiAwMDZDOzAwNkQgMDA2RiAwMDZDOworMzNENzszM0Q3OzMzRDc7MDA1MCAwMDQ4OzAwNTAgMDA0ODsKKzMzRDg7MzNEODszM0Q4OzAwNzAgMDAyRSAwMDZEIDAwMkU7MDA3MCAwMDJFIDAwNkQgMDAyRTsKKzMzRDk7MzNEOTszM0Q5OzAwNTAgMDA1MCAwMDREOzAwNTAgMDA1MCAwMDREOworMzNEQTszM0RBOzMzREE7MDA1MCAwMDUyOzAwNTAgMDA1MjsKKzMzREI7MzNEQjszM0RCOzAwNzMgMDA3MjswMDczIDAwNzI7CiszM0RDOzMzREM7MzNEQzswMDUzIDAwNzY7MDA1MyAwMDc2OworMzNERDszM0REOzMzREQ7MDA1NyAwMDYyOzAwNTcgMDA2MjsKKzMzRTA7MzNFMDszM0UwOzAwMzEgNjVFNTswMDMxIDY1RTU7CiszM0UxOzMzRTE7MzNFMTswMDMyIDY1RTU7MDAzMiA2NUU1OworMzNFMjszM0UyOzMzRTI7MDAzMyA2NUU1OzAwMzMgNjVFNTsKKzMzRTM7MzNFMzszM0UzOzAwMzQgNjVFNTswMDM0IDY1RTU7CiszM0U0OzMzRTQ7MzNFNDswMDM1IDY1RTU7MDAzNSA2NUU1OworMzNFNTszM0U1OzMzRTU7MDAzNiA2NUU1OzAwMzYgNjVFNTsKKzMzRTY7MzNFNjszM0U2OzAwMzcgNjVFNTswMDM3IDY1RTU7CiszM0U3OzMzRTc7MzNFNzswMDM4IDY1RTU7MDAzOCA2NUU1OworMzNFODszM0U4OzMzRTg7MDAzOSA2NUU1OzAwMzkgNjVFNTsKKzMzRTk7MzNFOTszM0U5OzAwMzEgMDAzMCA2NUU1OzAwMzEgMDAzMCA2NUU1OworMzNFQTszM0VBOzMzRUE7MDAzMSAwMDMxIDY1RTU7MDAzMSAwMDMxIDY1RTU7CiszM0VCOzMzRUI7MzNFQjswMDMxIDAwMzIgNjVFNTswMDMxIDAwMzIgNjVFNTsKKzMzRUM7MzNFQzszM0VDOzAwMzEgMDAzMyA2NUU1OzAwMzEgMDAzMyA2NUU1OworMzNFRDszM0VEOzMzRUQ7MDAzMSAwMDM0IDY1RTU7MDAzMSAwMDM0IDY1RTU7CiszM0VFOzMzRUU7MzNFRTswMDMxIDAwMzUgNjVFNTswMDMxIDAwMzUgNjVFNTsKKzMzRUY7MzNFRjszM0VGOzAwMzEgMDAzNiA2NUU1OzAwMzEgMDAzNiA2NUU1OworMzNGMDszM0YwOzMzRjA7MDAzMSAwMDM3IDY1RTU7MDAzMSAwMDM3IDY1RTU7CiszM0YxOzMzRjE7MzNGMTswMDMxIDAwMzggNjVFNTswMDMxIDAwMzggNjVFNTsKKzMzRjI7MzNGMjszM0YyOzAwMzEgMDAzOSA2NUU1OzAwMzEgMDAzOSA2NUU1OworMzNGMzszM0YzOzMzRjM7MDAzMiAwMDMwIDY1RTU7MDAzMiAwMDMwIDY1RTU7CiszM0Y0OzMzRjQ7MzNGNDswMDMyIDAwMzEgNjVFNTswMDMyIDAwMzEgNjVFNTsKKzMzRjU7MzNGNTszM0Y1OzAwMzIgMDAzMiA2NUU1OzAwMzIgMDAzMiA2NUU1OworMzNGNjszM0Y2OzMzRjY7MDAzMiAwMDMzIDY1RTU7MDAzMiAwMDMzIDY1RTU7CiszM0Y3OzMzRjc7MzNGNzswMDMyIDAwMzQgNjVFNTswMDMyIDAwMzQgNjVFNTsKKzMzRjg7MzNGODszM0Y4OzAwMzIgMDAzNSA2NUU1OzAwMzIgMDAzNSA2NUU1OworMzNGOTszM0Y5OzMzRjk7MDAzMiAwMDM2IDY1RTU7MDAzMiAwMDM2IDY1RTU7CiszM0ZBOzMzRkE7MzNGQTswMDMyIDAwMzcgNjVFNTswMDMyIDAwMzcgNjVFNTsKKzMzRkI7MzNGQjszM0ZCOzAwMzIgMDAzOCA2NUU1OzAwMzIgMDAzOCA2NUU1OworMzNGQzszM0ZDOzMzRkM7MDAzMiAwMDM5IDY1RTU7MDAzMiAwMDM5IDY1RTU7CiszM0ZEOzMzRkQ7MzNGRDswMDMzIDAwMzAgNjVFNTswMDMzIDAwMzAgNjVFNTsKKzMzRkU7MzNGRTszM0ZFOzAwMzMgMDAzMSA2NUU1OzAwMzMgMDAzMSA2NUU1OworQUMwMDtBQzAwOzExMDAgMTE2MTtBQzAwOzExMDAgMTE2MTsKK0FDMDE7QUMwMTsxMTAwIDExNjEgMTFBODtBQzAxOzExMDAgMTE2MSAxMUE4OworQUMwMjtBQzAyOzExMDAgMTE2MSAxMUE5O0FDMDI7MTEwMCAxMTYxIDExQTk7CitBQzAzO0FDMDM7MTEwMCAxMTYxIDExQUE7QUMwMzsxMTAwIDExNjEgMTFBQTsKK0FDMDQ7QUMwNDsxMTAwIDExNjEgMTFBQjtBQzA0OzExMDAgMTE2MSAxMUFCOworQUMwNTtBQzA1OzExMDAgMTE2MSAxMUFDO0FDMDU7MTEwMCAxMTYxIDExQUM7CitBQzA2O0FDMDY7MTEwMCAxMTYxIDExQUQ7QUMwNjsxMTAwIDExNjEgMTFBRDsKK0FDMDc7QUMwNzsxMTAwIDExNjEgMTFBRTtBQzA3OzExMDAgMTE2MSAxMUFFOworQUMwODtBQzA4OzExMDAgMTE2MSAxMUFGO0FDMDg7MTEwMCAxMTYxIDExQUY7CitBQzA5O0FDMDk7MTEwMCAxMTYxIDExQjA7QUMwOTsxMTAwIDExNjEgMTFCMDsKK0FDMEE7QUMwQTsxMTAwIDExNjEgMTFCMTtBQzBBOzExMDAgMTE2MSAxMUIxOworQUMwQjtBQzBCOzExMDAgMTE2MSAxMUIyO0FDMEI7MTEwMCAxMTYxIDExQjI7CitBQzBDO0FDMEM7MTEwMCAxMTYxIDExQjM7QUMwQzsxMTAwIDExNjEgMTFCMzsKK0FDMEQ7QUMwRDsxMTAwIDExNjEgMTFCNDtBQzBEOzExMDAgMTE2MSAxMUI0OworQUMwRTtBQzBFOzExMDAgMTE2MSAxMUI1O0FDMEU7MTEwMCAxMTYxIDExQjU7CitBQzBGO0FDMEY7MTEwMCAxMTYxIDExQjY7QUMwRjsxMTAwIDExNjEgMTFCNjsKK0FDMTA7QUMxMDsxMTAwIDExNjEgMTFCNztBQzEwOzExMDAgMTE2MSAxMUI3OworQUMxMTtBQzExOzExMDAgMTE2MSAxMUI4O0FDMTE7MTEwMCAxMTYxIDExQjg7CitBQzEyO0FDMTI7MTEwMCAxMTYxIDExQjk7QUMxMjsxMTAwIDExNjEgMTFCOTsKK0FDMTM7QUMxMzsxMTAwIDExNjEgMTFCQTtBQzEzOzExMDAgMTE2MSAxMUJBOworQUMxNDtBQzE0OzExMDAgMTE2MSAxMUJCO0FDMTQ7MTEwMCAxMTYxIDExQkI7CitBQzE1O0FDMTU7MTEwMCAxMTYxIDExQkM7QUMxNTsxMTAwIDExNjEgMTFCQzsKK0FDMTY7QUMxNjsxMTAwIDExNjEgMTFCRDtBQzE2OzExMDAgMTE2MSAxMUJEOworQUMxNztBQzE3OzExMDAgMTE2MSAxMUJFO0FDMTc7MTEwMCAxMTYxIDExQkU7CitBQzE4O0FDMTg7MTEwMCAxMTYxIDExQkY7QUMxODsxMTAwIDExNjEgMTFCRjsKK0FDMTk7QUMxOTsxMTAwIDExNjEgMTFDMDtBQzE5OzExMDAgMTE2MSAxMUMwOworQUMxQTtBQzFBOzExMDAgMTE2MSAxMUMxO0FDMUE7MTEwMCAxMTYxIDExQzE7CitBQzFCO0FDMUI7MTEwMCAxMTYxIDExQzI7QUMxQjsxMTAwIDExNjEgMTFDMjsKK0FDMUM7QUMxQzsxMTAwIDExNjI7QUMxQzsxMTAwIDExNjI7CitBQzFEO0FDMUQ7MTEwMCAxMTYyIDExQTg7QUMxRDsxMTAwIDExNjIgMTFBODsKK0FDMUU7QUMxRTsxMTAwIDExNjIgMTFBOTtBQzFFOzExMDAgMTE2MiAxMUE5OworQUMxRjtBQzFGOzExMDAgMTE2MiAxMUFBO0FDMUY7MTEwMCAxMTYyIDExQUE7CitBQzIwO0FDMjA7MTEwMCAxMTYyIDExQUI7QUMyMDsxMTAwIDExNjIgMTFBQjsKK0FDMjE7QUMyMTsxMTAwIDExNjIgMTFBQztBQzIxOzExMDAgMTE2MiAxMUFDOworQUMyMjtBQzIyOzExMDAgMTE2MiAxMUFEO0FDMjI7MTEwMCAxMTYyIDExQUQ7CitBQzIzO0FDMjM7MTEwMCAxMTYyIDExQUU7QUMyMzsxMTAwIDExNjIgMTFBRTsKK0FDMjQ7QUMyNDsxMTAwIDExNjIgMTFBRjtBQzI0OzExMDAgMTE2MiAxMUFGOworQUMyNTtBQzI1OzExMDAgMTE2MiAxMUIwO0FDMjU7MTEwMCAxMTYyIDExQjA7CitBQzI2O0FDMjY7MTEwMCAxMTYyIDExQjE7QUMyNjsxMTAwIDExNjIgMTFCMTsKK0FDMjc7QUMyNzsxMTAwIDExNjIgMTFCMjtBQzI3OzExMDAgMTE2MiAxMUIyOworQUMyODtBQzI4OzExMDAgMTE2MiAxMUIzO0FDMjg7MTEwMCAxMTYyIDExQjM7CitBQzI5O0FDMjk7MTEwMCAxMTYyIDExQjQ7QUMyOTsxMTAwIDExNjIgMTFCNDsKK0FDMkE7QUMyQTsxMTAwIDExNjIgMTFCNTtBQzJBOzExMDAgMTE2MiAxMUI1OworQUMyQjtBQzJCOzExMDAgMTE2MiAxMUI2O0FDMkI7MTEwMCAxMTYyIDExQjY7CitBQzJDO0FDMkM7MTEwMCAxMTYyIDExQjc7QUMyQzsxMTAwIDExNjIgMTFCNzsKK0FDMkQ7QUMyRDsxMTAwIDExNjIgMTFCODtBQzJEOzExMDAgMTE2MiAxMUI4OworQUMyRTtBQzJFOzExMDAgMTE2MiAxMUI5O0FDMkU7MTEwMCAxMTYyIDExQjk7CitBQzJGO0FDMkY7MTEwMCAxMTYyIDExQkE7QUMyRjsxMTAwIDExNjIgMTFCQTsKK0FDMzA7QUMzMDsxMTAwIDExNjIgMTFCQjtBQzMwOzExMDAgMTE2MiAxMUJCOworQUMzMTtBQzMxOzExMDAgMTE2MiAxMUJDO0FDMzE7MTEwMCAxMTYyIDExQkM7CitBQzMyO0FDMzI7MTEwMCAxMTYyIDExQkQ7QUMzMjsxMTAwIDExNjIgMTFCRDsKK0FDMzM7QUMzMzsxMTAwIDExNjIgMTFCRTtBQzMzOzExMDAgMTE2MiAxMUJFOworQUMzNDtBQzM0OzExMDAgMTE2MiAxMUJGO0FDMzQ7MTEwMCAxMTYyIDExQkY7CitBQzM1O0FDMzU7MTEwMCAxMTYyIDExQzA7QUMzNTsxMTAwIDExNjIgMTFDMDsKK0FDMzY7QUMzNjsxMTAwIDExNjIgMTFDMTtBQzM2OzExMDAgMTE2MiAxMUMxOworQUMzNztBQzM3OzExMDAgMTE2MiAxMUMyO0FDMzc7MTEwMCAxMTYyIDExQzI7CitBQzM4O0FDMzg7MTEwMCAxMTYzO0FDMzg7MTEwMCAxMTYzOworQUMzOTtBQzM5OzExMDAgMTE2MyAxMUE4O0FDMzk7MTEwMCAxMTYzIDExQTg7CitBQzNBO0FDM0E7MTEwMCAxMTYzIDExQTk7QUMzQTsxMTAwIDExNjMgMTFBOTsKK0FDM0I7QUMzQjsxMTAwIDExNjMgMTFBQTtBQzNCOzExMDAgMTE2MyAxMUFBOworQUMzQztBQzNDOzExMDAgMTE2MyAxMUFCO0FDM0M7MTEwMCAxMTYzIDExQUI7CitBQzNEO0FDM0Q7MTEwMCAxMTYzIDExQUM7QUMzRDsxMTAwIDExNjMgMTFBQzsKK0FDM0U7QUMzRTsxMTAwIDExNjMgMTFBRDtBQzNFOzExMDAgMTE2MyAxMUFEOworQUMzRjtBQzNGOzExMDAgMTE2MyAxMUFFO0FDM0Y7MTEwMCAxMTYzIDExQUU7CitBQzQwO0FDNDA7MTEwMCAxMTYzIDExQUY7QUM0MDsxMTAwIDExNjMgMTFBRjsKK0FDNDE7QUM0MTsxMTAwIDExNjMgMTFCMDtBQzQxOzExMDAgMTE2MyAxMUIwOworQUM0MjtBQzQyOzExMDAgMTE2MyAxMUIxO0FDNDI7MTEwMCAxMTYzIDExQjE7CitBQzQzO0FDNDM7MTEwMCAxMTYzIDExQjI7QUM0MzsxMTAwIDExNjMgMTFCMjsKK0FDNDQ7QUM0NDsxMTAwIDExNjMgMTFCMztBQzQ0OzExMDAgMTE2MyAxMUIzOworQUM0NTtBQzQ1OzExMDAgMTE2MyAxMUI0O0FDNDU7MTEwMCAxMTYzIDExQjQ7CitBQzQ2O0FDNDY7MTEwMCAxMTYzIDExQjU7QUM0NjsxMTAwIDExNjMgMTFCNTsKK0FDNDc7QUM0NzsxMTAwIDExNjMgMTFCNjtBQzQ3OzExMDAgMTE2MyAxMUI2OworQUM0ODtBQzQ4OzExMDAgMTE2MyAxMUI3O0FDNDg7MTEwMCAxMTYzIDExQjc7CitBQzQ5O0FDNDk7MTEwMCAxMTYzIDExQjg7QUM0OTsxMTAwIDExNjMgMTFCODsKK0FDNEE7QUM0QTsxMTAwIDExNjMgMTFCOTtBQzRBOzExMDAgMTE2MyAxMUI5OworQUM0QjtBQzRCOzExMDAgMTE2MyAxMUJBO0FDNEI7MTEwMCAxMTYzIDExQkE7CitBQzRDO0FDNEM7MTEwMCAxMTYzIDExQkI7QUM0QzsxMTAwIDExNjMgMTFCQjsKK0FDNEQ7QUM0RDsxMTAwIDExNjMgMTFCQztBQzREOzExMDAgMTE2MyAxMUJDOworQUM0RTtBQzRFOzExMDAgMTE2MyAxMUJEO0FDNEU7MTEwMCAxMTYzIDExQkQ7CitBQzRGO0FDNEY7MTEwMCAxMTYzIDExQkU7QUM0RjsxMTAwIDExNjMgMTFCRTsKK0FDNTA7QUM1MDsxMTAwIDExNjMgMTFCRjtBQzUwOzExMDAgMTE2MyAxMUJGOworQUM1MTtBQzUxOzExMDAgMTE2MyAxMUMwO0FDNTE7MTEwMCAxMTYzIDExQzA7CitBQzUyO0FDNTI7MTEwMCAxMTYzIDExQzE7QUM1MjsxMTAwIDExNjMgMTFDMTsKK0FDNTM7QUM1MzsxMTAwIDExNjMgMTFDMjtBQzUzOzExMDAgMTE2MyAxMUMyOworQUM1NDtBQzU0OzExMDAgMTE2NDtBQzU0OzExMDAgMTE2NDsKK0FDNTU7QUM1NTsxMTAwIDExNjQgMTFBODtBQzU1OzExMDAgMTE2NCAxMUE4OworQUM1NjtBQzU2OzExMDAgMTE2NCAxMUE5O0FDNTY7MTEwMCAxMTY0IDExQTk7CitBQzU3O0FDNTc7MTEwMCAxMTY0IDExQUE7QUM1NzsxMTAwIDExNjQgMTFBQTsKK0FDNTg7QUM1ODsxMTAwIDExNjQgMTFBQjtBQzU4OzExMDAgMTE2NCAxMUFCOworQUM1OTtBQzU5OzExMDAgMTE2NCAxMUFDO0FDNTk7MTEwMCAxMTY0IDExQUM7CitBQzVBO0FDNUE7MTEwMCAxMTY0IDExQUQ7QUM1QTsxMTAwIDExNjQgMTFBRDsKK0FDNUI7QUM1QjsxMTAwIDExNjQgMTFBRTtBQzVCOzExMDAgMTE2NCAxMUFFOworQUM1QztBQzVDOzExMDAgMTE2NCAxMUFGO0FDNUM7MTEwMCAxMTY0IDExQUY7CitBQzVEO0FDNUQ7MTEwMCAxMTY0IDExQjA7QUM1RDsxMTAwIDExNjQgMTFCMDsKK0FDNUU7QUM1RTsxMTAwIDExNjQgMTFCMTtBQzVFOzExMDAgMTE2NCAxMUIxOworQUM1RjtBQzVGOzExMDAgMTE2NCAxMUIyO0FDNUY7MTEwMCAxMTY0IDExQjI7CitBQzYwO0FDNjA7MTEwMCAxMTY0IDExQjM7QUM2MDsxMTAwIDExNjQgMTFCMzsKK0FDNjE7QUM2MTsxMTAwIDExNjQgMTFCNDtBQzYxOzExMDAgMTE2NCAxMUI0OworQUM2MjtBQzYyOzExMDAgMTE2NCAxMUI1O0FDNjI7MTEwMCAxMTY0IDExQjU7CitBQzYzO0FDNjM7MTEwMCAxMTY0IDExQjY7QUM2MzsxMTAwIDExNjQgMTFCNjsKK0FDNjQ7QUM2NDsxMTAwIDExNjQgMTFCNztBQzY0OzExMDAgMTE2NCAxMUI3OworQUM2NTtBQzY1OzExMDAgMTE2NCAxMUI4O0FDNjU7MTEwMCAxMTY0IDExQjg7CitBQzY2O0FDNjY7MTEwMCAxMTY0IDExQjk7QUM2NjsxMTAwIDExNjQgMTFCOTsKK0FDNjc7QUM2NzsxMTAwIDExNjQgMTFCQTtBQzY3OzExMDAgMTE2NCAxMUJBOworQUM2ODtBQzY4OzExMDAgMTE2NCAxMUJCO0FDNjg7MTEwMCAxMTY0IDExQkI7CitBQzY5O0FDNjk7MTEwMCAxMTY0IDExQkM7QUM2OTsxMTAwIDExNjQgMTFCQzsKK0FDNkE7QUM2QTsxMTAwIDExNjQgMTFCRDtBQzZBOzExMDAgMTE2NCAxMUJEOworQUM2QjtBQzZCOzExMDAgMTE2NCAxMUJFO0FDNkI7MTEwMCAxMTY0IDExQkU7CitBQzZDO0FDNkM7MTEwMCAxMTY0IDExQkY7QUM2QzsxMTAwIDExNjQgMTFCRjsKK0FDNkQ7QUM2RDsxMTAwIDExNjQgMTFDMDtBQzZEOzExMDAgMTE2NCAxMUMwOworQUM2RTtBQzZFOzExMDAgMTE2NCAxMUMxO0FDNkU7MTEwMCAxMTY0IDExQzE7CitBQzZGO0FDNkY7MTEwMCAxMTY0IDExQzI7QUM2RjsxMTAwIDExNjQgMTFDMjsKK0FDNzA7QUM3MDsxMTAwIDExNjU7QUM3MDsxMTAwIDExNjU7CitBQzcxO0FDNzE7MTEwMCAxMTY1IDExQTg7QUM3MTsxMTAwIDExNjUgMTFBODsKK0FDNzI7QUM3MjsxMTAwIDExNjUgMTFBOTtBQzcyOzExMDAgMTE2NSAxMUE5OworQUM3MztBQzczOzExMDAgMTE2NSAxMUFBO0FDNzM7MTEwMCAxMTY1IDExQUE7CitBQzc0O0FDNzQ7MTEwMCAxMTY1IDExQUI7QUM3NDsxMTAwIDExNjUgMTFBQjsKK0FDNzU7QUM3NTsxMTAwIDExNjUgMTFBQztBQzc1OzExMDAgMTE2NSAxMUFDOworQUM3NjtBQzc2OzExMDAgMTE2NSAxMUFEO0FDNzY7MTEwMCAxMTY1IDExQUQ7CitBQzc3O0FDNzc7MTEwMCAxMTY1IDExQUU7QUM3NzsxMTAwIDExNjUgMTFBRTsKK0FDNzg7QUM3ODsxMTAwIDExNjUgMTFBRjtBQzc4OzExMDAgMTE2NSAxMUFGOworQUM3OTtBQzc5OzExMDAgMTE2NSAxMUIwO0FDNzk7MTEwMCAxMTY1IDExQjA7CitBQzdBO0FDN0E7MTEwMCAxMTY1IDExQjE7QUM3QTsxMTAwIDExNjUgMTFCMTsKK0FDN0I7QUM3QjsxMTAwIDExNjUgMTFCMjtBQzdCOzExMDAgMTE2NSAxMUIyOworQUM3QztBQzdDOzExMDAgMTE2NSAxMUIzO0FDN0M7MTEwMCAxMTY1IDExQjM7CitBQzdEO0FDN0Q7MTEwMCAxMTY1IDExQjQ7QUM3RDsxMTAwIDExNjUgMTFCNDsKK0FDN0U7QUM3RTsxMTAwIDExNjUgMTFCNTtBQzdFOzExMDAgMTE2NSAxMUI1OworQUM3RjtBQzdGOzExMDAgMTE2NSAxMUI2O0FDN0Y7MTEwMCAxMTY1IDExQjY7CitBQzgwO0FDODA7MTEwMCAxMTY1IDExQjc7QUM4MDsxMTAwIDExNjUgMTFCNzsKK0FDODE7QUM4MTsxMTAwIDExNjUgMTFCODtBQzgxOzExMDAgMTE2NSAxMUI4OworQUM4MjtBQzgyOzExMDAgMTE2NSAxMUI5O0FDODI7MTEwMCAxMTY1IDExQjk7CitBQzgzO0FDODM7MTEwMCAxMTY1IDExQkE7QUM4MzsxMTAwIDExNjUgMTFCQTsKK0FDODQ7QUM4NDsxMTAwIDExNjUgMTFCQjtBQzg0OzExMDAgMTE2NSAxMUJCOworQUM4NTtBQzg1OzExMDAgMTE2NSAxMUJDO0FDODU7MTEwMCAxMTY1IDExQkM7CitBQzg2O0FDODY7MTEwMCAxMTY1IDExQkQ7QUM4NjsxMTAwIDExNjUgMTFCRDsKK0FDODc7QUM4NzsxMTAwIDExNjUgMTFCRTtBQzg3OzExMDAgMTE2NSAxMUJFOworQUM4ODtBQzg4OzExMDAgMTE2NSAxMUJGO0FDODg7MTEwMCAxMTY1IDExQkY7CitBQzg5O0FDODk7MTEwMCAxMTY1IDExQzA7QUM4OTsxMTAwIDExNjUgMTFDMDsKK0FDOEE7QUM4QTsxMTAwIDExNjUgMTFDMTtBQzhBOzExMDAgMTE2NSAxMUMxOworQUM4QjtBQzhCOzExMDAgMTE2NSAxMUMyO0FDOEI7MTEwMCAxMTY1IDExQzI7CitBQzhDO0FDOEM7MTEwMCAxMTY2O0FDOEM7MTEwMCAxMTY2OworQUM4RDtBQzhEOzExMDAgMTE2NiAxMUE4O0FDOEQ7MTEwMCAxMTY2IDExQTg7CitBQzhFO0FDOEU7MTEwMCAxMTY2IDExQTk7QUM4RTsxMTAwIDExNjYgMTFBOTsKK0FDOEY7QUM4RjsxMTAwIDExNjYgMTFBQTtBQzhGOzExMDAgMTE2NiAxMUFBOworQUM5MDtBQzkwOzExMDAgMTE2NiAxMUFCO0FDOTA7MTEwMCAxMTY2IDExQUI7CitBQzkxO0FDOTE7MTEwMCAxMTY2IDExQUM7QUM5MTsxMTAwIDExNjYgMTFBQzsKK0FDOTI7QUM5MjsxMTAwIDExNjYgMTFBRDtBQzkyOzExMDAgMTE2NiAxMUFEOworQUM5MztBQzkzOzExMDAgMTE2NiAxMUFFO0FDOTM7MTEwMCAxMTY2IDExQUU7CitBQzk0O0FDOTQ7MTEwMCAxMTY2IDExQUY7QUM5NDsxMTAwIDExNjYgMTFBRjsKK0FDOTU7QUM5NTsxMTAwIDExNjYgMTFCMDtBQzk1OzExMDAgMTE2NiAxMUIwOworQUM5NjtBQzk2OzExMDAgMTE2NiAxMUIxO0FDOTY7MTEwMCAxMTY2IDExQjE7CitBQzk3O0FDOTc7MTEwMCAxMTY2IDExQjI7QUM5NzsxMTAwIDExNjYgMTFCMjsKK0FDOTg7QUM5ODsxMTAwIDExNjYgMTFCMztBQzk4OzExMDAgMTE2NiAxMUIzOworQUM5OTtBQzk5OzExMDAgMTE2NiAxMUI0O0FDOTk7MTEwMCAxMTY2IDExQjQ7CitBQzlBO0FDOUE7MTEwMCAxMTY2IDExQjU7QUM5QTsxMTAwIDExNjYgMTFCNTsKK0FDOUI7QUM5QjsxMTAwIDExNjYgMTFCNjtBQzlCOzExMDAgMTE2NiAxMUI2OworQUM5QztBQzlDOzExMDAgMTE2NiAxMUI3O0FDOUM7MTEwMCAxMTY2IDExQjc7CitBQzlEO0FDOUQ7MTEwMCAxMTY2IDExQjg7QUM5RDsxMTAwIDExNjYgMTFCODsKK0FDOUU7QUM5RTsxMTAwIDExNjYgMTFCOTtBQzlFOzExMDAgMTE2NiAxMUI5OworQUM5RjtBQzlGOzExMDAgMTE2NiAxMUJBO0FDOUY7MTEwMCAxMTY2IDExQkE7CitBQ0EwO0FDQTA7MTEwMCAxMTY2IDExQkI7QUNBMDsxMTAwIDExNjYgMTFCQjsKK0FDQTE7QUNBMTsxMTAwIDExNjYgMTFCQztBQ0ExOzExMDAgMTE2NiAxMUJDOworQUNBMjtBQ0EyOzExMDAgMTE2NiAxMUJEO0FDQTI7MTEwMCAxMTY2IDExQkQ7CitBQ0EzO0FDQTM7MTEwMCAxMTY2IDExQkU7QUNBMzsxMTAwIDExNjYgMTFCRTsKK0FDQTQ7QUNBNDsxMTAwIDExNjYgMTFCRjtBQ0E0OzExMDAgMTE2NiAxMUJGOworQUNBNTtBQ0E1OzExMDAgMTE2NiAxMUMwO0FDQTU7MTEwMCAxMTY2IDExQzA7CitBQ0E2O0FDQTY7MTEwMCAxMTY2IDExQzE7QUNBNjsxMTAwIDExNjYgMTFDMTsKK0FDQTc7QUNBNzsxMTAwIDExNjYgMTFDMjtBQ0E3OzExMDAgMTE2NiAxMUMyOworQUNBODtBQ0E4OzExMDAgMTE2NztBQ0E4OzExMDAgMTE2NzsKK0FDQTk7QUNBOTsxMTAwIDExNjcgMTFBODtBQ0E5OzExMDAgMTE2NyAxMUE4OworQUNBQTtBQ0FBOzExMDAgMTE2NyAxMUE5O0FDQUE7MTEwMCAxMTY3IDExQTk7CitBQ0FCO0FDQUI7MTEwMCAxMTY3IDExQUE7QUNBQjsxMTAwIDExNjcgMTFBQTsKK0FDQUM7QUNBQzsxMTAwIDExNjcgMTFBQjtBQ0FDOzExMDAgMTE2NyAxMUFCOworQUNBRDtBQ0FEOzExMDAgMTE2NyAxMUFDO0FDQUQ7MTEwMCAxMTY3IDExQUM7CitBQ0FFO0FDQUU7MTEwMCAxMTY3IDExQUQ7QUNBRTsxMTAwIDExNjcgMTFBRDsKK0FDQUY7QUNBRjsxMTAwIDExNjcgMTFBRTtBQ0FGOzExMDAgMTE2NyAxMUFFOworQUNCMDtBQ0IwOzExMDAgMTE2NyAxMUFGO0FDQjA7MTEwMCAxMTY3IDExQUY7CitBQ0IxO0FDQjE7MTEwMCAxMTY3IDExQjA7QUNCMTsxMTAwIDExNjcgMTFCMDsKK0FDQjI7QUNCMjsxMTAwIDExNjcgMTFCMTtBQ0IyOzExMDAgMTE2NyAxMUIxOworQUNCMztBQ0IzOzExMDAgMTE2NyAxMUIyO0FDQjM7MTEwMCAxMTY3IDExQjI7CitBQ0I0O0FDQjQ7MTEwMCAxMTY3IDExQjM7QUNCNDsxMTAwIDExNjcgMTFCMzsKK0FDQjU7QUNCNTsxMTAwIDExNjcgMTFCNDtBQ0I1OzExMDAgMTE2NyAxMUI0OworQUNCNjtBQ0I2OzExMDAgMTE2NyAxMUI1O0FDQjY7MTEwMCAxMTY3IDExQjU7CitBQ0I3O0FDQjc7MTEwMCAxMTY3IDExQjY7QUNCNzsxMTAwIDExNjcgMTFCNjsKK0FDQjg7QUNCODsxMTAwIDExNjcgMTFCNztBQ0I4OzExMDAgMTE2NyAxMUI3OworQUNCOTtBQ0I5OzExMDAgMTE2NyAxMUI4O0FDQjk7MTEwMCAxMTY3IDExQjg7CitBQ0JBO0FDQkE7MTEwMCAxMTY3IDExQjk7QUNCQTsxMTAwIDExNjcgMTFCOTsKK0FDQkI7QUNCQjsxMTAwIDExNjcgMTFCQTtBQ0JCOzExMDAgMTE2NyAxMUJBOworQUNCQztBQ0JDOzExMDAgMTE2NyAxMUJCO0FDQkM7MTEwMCAxMTY3IDExQkI7CitBQ0JEO0FDQkQ7MTEwMCAxMTY3IDExQkM7QUNCRDsxMTAwIDExNjcgMTFCQzsKK0FDQkU7QUNCRTsxMTAwIDExNjcgMTFCRDtBQ0JFOzExMDAgMTE2NyAxMUJEOworQUNCRjtBQ0JGOzExMDAgMTE2NyAxMUJFO0FDQkY7MTEwMCAxMTY3IDExQkU7CitBQ0MwO0FDQzA7MTEwMCAxMTY3IDExQkY7QUNDMDsxMTAwIDExNjcgMTFCRjsKK0FDQzE7QUNDMTsxMTAwIDExNjcgMTFDMDtBQ0MxOzExMDAgMTE2NyAxMUMwOworQUNDMjtBQ0MyOzExMDAgMTE2NyAxMUMxO0FDQzI7MTEwMCAxMTY3IDExQzE7CitBQ0MzO0FDQzM7MTEwMCAxMTY3IDExQzI7QUNDMzsxMTAwIDExNjcgMTFDMjsKK0FDQzQ7QUNDNDsxMTAwIDExNjg7QUNDNDsxMTAwIDExNjg7CitBQ0M1O0FDQzU7MTEwMCAxMTY4IDExQTg7QUNDNTsxMTAwIDExNjggMTFBODsKK0FDQzY7QUNDNjsxMTAwIDExNjggMTFBOTtBQ0M2OzExMDAgMTE2OCAxMUE5OworQUNDNztBQ0M3OzExMDAgMTE2OCAxMUFBO0FDQzc7MTEwMCAxMTY4IDExQUE7CitBQ0M4O0FDQzg7MTEwMCAxMTY4IDExQUI7QUNDODsxMTAwIDExNjggMTFBQjsKK0FDQzk7QUNDOTsxMTAwIDExNjggMTFBQztBQ0M5OzExMDAgMTE2OCAxMUFDOworQUNDQTtBQ0NBOzExMDAgMTE2OCAxMUFEO0FDQ0E7MTEwMCAxMTY4IDExQUQ7CitBQ0NCO0FDQ0I7MTEwMCAxMTY4IDExQUU7QUNDQjsxMTAwIDExNjggMTFBRTsKK0FDQ0M7QUNDQzsxMTAwIDExNjggMTFBRjtBQ0NDOzExMDAgMTE2OCAxMUFGOworQUNDRDtBQ0NEOzExMDAgMTE2OCAxMUIwO0FDQ0Q7MTEwMCAxMTY4IDExQjA7CitBQ0NFO0FDQ0U7MTEwMCAxMTY4IDExQjE7QUNDRTsxMTAwIDExNjggMTFCMTsKK0FDQ0Y7QUNDRjsxMTAwIDExNjggMTFCMjtBQ0NGOzExMDAgMTE2OCAxMUIyOworQUNEMDtBQ0QwOzExMDAgMTE2OCAxMUIzO0FDRDA7MTEwMCAxMTY4IDExQjM7CitBQ0QxO0FDRDE7MTEwMCAxMTY4IDExQjQ7QUNEMTsxMTAwIDExNjggMTFCNDsKK0FDRDI7QUNEMjsxMTAwIDExNjggMTFCNTtBQ0QyOzExMDAgMTE2OCAxMUI1OworQUNEMztBQ0QzOzExMDAgMTE2OCAxMUI2O0FDRDM7MTEwMCAxMTY4IDExQjY7CitBQ0Q0O0FDRDQ7MTEwMCAxMTY4IDExQjc7QUNENDsxMTAwIDExNjggMTFCNzsKK0FDRDU7QUNENTsxMTAwIDExNjggMTFCODtBQ0Q1OzExMDAgMTE2OCAxMUI4OworQUNENjtBQ0Q2OzExMDAgMTE2OCAxMUI5O0FDRDY7MTEwMCAxMTY4IDExQjk7CitBQ0Q3O0FDRDc7MTEwMCAxMTY4IDExQkE7QUNENzsxMTAwIDExNjggMTFCQTsKK0FDRDg7QUNEODsxMTAwIDExNjggMTFCQjtBQ0Q4OzExMDAgMTE2OCAxMUJCOworQUNEOTtBQ0Q5OzExMDAgMTE2OCAxMUJDO0FDRDk7MTEwMCAxMTY4IDExQkM7CitBQ0RBO0FDREE7MTEwMCAxMTY4IDExQkQ7QUNEQTsxMTAwIDExNjggMTFCRDsKK0FDREI7QUNEQjsxMTAwIDExNjggMTFCRTtBQ0RCOzExMDAgMTE2OCAxMUJFOworQUNEQztBQ0RDOzExMDAgMTE2OCAxMUJGO0FDREM7MTEwMCAxMTY4IDExQkY7CitBQ0REO0FDREQ7MTEwMCAxMTY4IDExQzA7QUNERDsxMTAwIDExNjggMTFDMDsKK0FDREU7QUNERTsxMTAwIDExNjggMTFDMTtBQ0RFOzExMDAgMTE2OCAxMUMxOworQUNERjtBQ0RGOzExMDAgMTE2OCAxMUMyO0FDREY7MTEwMCAxMTY4IDExQzI7CitBQ0UwO0FDRTA7MTEwMCAxMTY5O0FDRTA7MTEwMCAxMTY5OworQUNFMTtBQ0UxOzExMDAgMTE2OSAxMUE4O0FDRTE7MTEwMCAxMTY5IDExQTg7CitBQ0UyO0FDRTI7MTEwMCAxMTY5IDExQTk7QUNFMjsxMTAwIDExNjkgMTFBOTsKK0FDRTM7QUNFMzsxMTAwIDExNjkgMTFBQTtBQ0UzOzExMDAgMTE2OSAxMUFBOworQUNFNDtBQ0U0OzExMDAgMTE2OSAxMUFCO0FDRTQ7MTEwMCAxMTY5IDExQUI7CitBQ0U1O0FDRTU7MTEwMCAxMTY5IDExQUM7QUNFNTsxMTAwIDExNjkgMTFBQzsKK0FDRTY7QUNFNjsxMTAwIDExNjkgMTFBRDtBQ0U2OzExMDAgMTE2OSAxMUFEOworQUNFNztBQ0U3OzExMDAgMTE2OSAxMUFFO0FDRTc7MTEwMCAxMTY5IDExQUU7CitBQ0U4O0FDRTg7MTEwMCAxMTY5IDExQUY7QUNFODsxMTAwIDExNjkgMTFBRjsKK0FDRTk7QUNFOTsxMTAwIDExNjkgMTFCMDtBQ0U5OzExMDAgMTE2OSAxMUIwOworQUNFQTtBQ0VBOzExMDAgMTE2OSAxMUIxO0FDRUE7MTEwMCAxMTY5IDExQjE7CitBQ0VCO0FDRUI7MTEwMCAxMTY5IDExQjI7QUNFQjsxMTAwIDExNjkgMTFCMjsKK0FDRUM7QUNFQzsxMTAwIDExNjkgMTFCMztBQ0VDOzExMDAgMTE2OSAxMUIzOworQUNFRDtBQ0VEOzExMDAgMTE2OSAxMUI0O0FDRUQ7MTEwMCAxMTY5IDExQjQ7CitBQ0VFO0FDRUU7MTEwMCAxMTY5IDExQjU7QUNFRTsxMTAwIDExNjkgMTFCNTsKK0FDRUY7QUNFRjsxMTAwIDExNjkgMTFCNjtBQ0VGOzExMDAgMTE2OSAxMUI2OworQUNGMDtBQ0YwOzExMDAgMTE2OSAxMUI3O0FDRjA7MTEwMCAxMTY5IDExQjc7CitBQ0YxO0FDRjE7MTEwMCAxMTY5IDExQjg7QUNGMTsxMTAwIDExNjkgMTFCODsKK0FDRjI7QUNGMjsxMTAwIDExNjkgMTFCOTtBQ0YyOzExMDAgMTE2OSAxMUI5OworQUNGMztBQ0YzOzExMDAgMTE2OSAxMUJBO0FDRjM7MTEwMCAxMTY5IDExQkE7CitBQ0Y0O0FDRjQ7MTEwMCAxMTY5IDExQkI7QUNGNDsxMTAwIDExNjkgMTFCQjsKK0FDRjU7QUNGNTsxMTAwIDExNjkgMTFCQztBQ0Y1OzExMDAgMTE2OSAxMUJDOworQUNGNjtBQ0Y2OzExMDAgMTE2OSAxMUJEO0FDRjY7MTEwMCAxMTY5IDExQkQ7CitBQ0Y3O0FDRjc7MTEwMCAxMTY5IDExQkU7QUNGNzsxMTAwIDExNjkgMTFCRTsKK0FDRjg7QUNGODsxMTAwIDExNjkgMTFCRjtBQ0Y4OzExMDAgMTE2OSAxMUJGOworQUNGOTtBQ0Y5OzExMDAgMTE2OSAxMUMwO0FDRjk7MTEwMCAxMTY5IDExQzA7CitBQ0ZBO0FDRkE7MTEwMCAxMTY5IDExQzE7QUNGQTsxMTAwIDExNjkgMTFDMTsKK0FDRkI7QUNGQjsxMTAwIDExNjkgMTFDMjtBQ0ZCOzExMDAgMTE2OSAxMUMyOworQUNGQztBQ0ZDOzExMDAgMTE2QTtBQ0ZDOzExMDAgMTE2QTsKK0FDRkQ7QUNGRDsxMTAwIDExNkEgMTFBODtBQ0ZEOzExMDAgMTE2QSAxMUE4OworQUNGRTtBQ0ZFOzExMDAgMTE2QSAxMUE5O0FDRkU7MTEwMCAxMTZBIDExQTk7CitBQ0ZGO0FDRkY7MTEwMCAxMTZBIDExQUE7QUNGRjsxMTAwIDExNkEgMTFBQTsKK0FEMDA7QUQwMDsxMTAwIDExNkEgMTFBQjtBRDAwOzExMDAgMTE2QSAxMUFCOworQUQwMTtBRDAxOzExMDAgMTE2QSAxMUFDO0FEMDE7MTEwMCAxMTZBIDExQUM7CitBRDAyO0FEMDI7MTEwMCAxMTZBIDExQUQ7QUQwMjsxMTAwIDExNkEgMTFBRDsKK0FEMDM7QUQwMzsxMTAwIDExNkEgMTFBRTtBRDAzOzExMDAgMTE2QSAxMUFFOworQUQwNDtBRDA0OzExMDAgMTE2QSAxMUFGO0FEMDQ7MTEwMCAxMTZBIDExQUY7CitBRDA1O0FEMDU7MTEwMCAxMTZBIDExQjA7QUQwNTsxMTAwIDExNkEgMTFCMDsKK0FEMDY7QUQwNjsxMTAwIDExNkEgMTFCMTtBRDA2OzExMDAgMTE2QSAxMUIxOworQUQwNztBRDA3OzExMDAgMTE2QSAxMUIyO0FEMDc7MTEwMCAxMTZBIDExQjI7CitBRDA4O0FEMDg7MTEwMCAxMTZBIDExQjM7QUQwODsxMTAwIDExNkEgMTFCMzsKK0FEMDk7QUQwOTsxMTAwIDExNkEgMTFCNDtBRDA5OzExMDAgMTE2QSAxMUI0OworQUQwQTtBRDBBOzExMDAgMTE2QSAxMUI1O0FEMEE7MTEwMCAxMTZBIDExQjU7CitBRDBCO0FEMEI7MTEwMCAxMTZBIDExQjY7QUQwQjsxMTAwIDExNkEgMTFCNjsKK0FEMEM7QUQwQzsxMTAwIDExNkEgMTFCNztBRDBDOzExMDAgMTE2QSAxMUI3OworQUQwRDtBRDBEOzExMDAgMTE2QSAxMUI4O0FEMEQ7MTEwMCAxMTZBIDExQjg7CitBRDBFO0FEMEU7MTEwMCAxMTZBIDExQjk7QUQwRTsxMTAwIDExNkEgMTFCOTsKK0FEMEY7QUQwRjsxMTAwIDExNkEgMTFCQTtBRDBGOzExMDAgMTE2QSAxMUJBOworQUQxMDtBRDEwOzExMDAgMTE2QSAxMUJCO0FEMTA7MTEwMCAxMTZBIDExQkI7CitBRDExO0FEMTE7MTEwMCAxMTZBIDExQkM7QUQxMTsxMTAwIDExNkEgMTFCQzsKK0FEMTI7QUQxMjsxMTAwIDExNkEgMTFCRDtBRDEyOzExMDAgMTE2QSAxMUJEOworQUQxMztBRDEzOzExMDAgMTE2QSAxMUJFO0FEMTM7MTEwMCAxMTZBIDExQkU7CitBRDE0O0FEMTQ7MTEwMCAxMTZBIDExQkY7QUQxNDsxMTAwIDExNkEgMTFCRjsKK0FEMTU7QUQxNTsxMTAwIDExNkEgMTFDMDtBRDE1OzExMDAgMTE2QSAxMUMwOworQUQxNjtBRDE2OzExMDAgMTE2QSAxMUMxO0FEMTY7MTEwMCAxMTZBIDExQzE7CitBRDE3O0FEMTc7MTEwMCAxMTZBIDExQzI7QUQxNzsxMTAwIDExNkEgMTFDMjsKK0FEMTg7QUQxODsxMTAwIDExNkI7QUQxODsxMTAwIDExNkI7CitBRDE5O0FEMTk7MTEwMCAxMTZCIDExQTg7QUQxOTsxMTAwIDExNkIgMTFBODsKK0FEMUE7QUQxQTsxMTAwIDExNkIgMTFBOTtBRDFBOzExMDAgMTE2QiAxMUE5OworQUQxQjtBRDFCOzExMDAgMTE2QiAxMUFBO0FEMUI7MTEwMCAxMTZCIDExQUE7CitBRDFDO0FEMUM7MTEwMCAxMTZCIDExQUI7QUQxQzsxMTAwIDExNkIgMTFBQjsKK0FEMUQ7QUQxRDsxMTAwIDExNkIgMTFBQztBRDFEOzExMDAgMTE2QiAxMUFDOworQUQxRTtBRDFFOzExMDAgMTE2QiAxMUFEO0FEMUU7MTEwMCAxMTZCIDExQUQ7CitBRDFGO0FEMUY7MTEwMCAxMTZCIDExQUU7QUQxRjsxMTAwIDExNkIgMTFBRTsKK0FEMjA7QUQyMDsxMTAwIDExNkIgMTFBRjtBRDIwOzExMDAgMTE2QiAxMUFGOworQUQyMTtBRDIxOzExMDAgMTE2QiAxMUIwO0FEMjE7MTEwMCAxMTZCIDExQjA7CitBRDIyO0FEMjI7MTEwMCAxMTZCIDExQjE7QUQyMjsxMTAwIDExNkIgMTFCMTsKK0FEMjM7QUQyMzsxMTAwIDExNkIgMTFCMjtBRDIzOzExMDAgMTE2QiAxMUIyOworQUQyNDtBRDI0OzExMDAgMTE2QiAxMUIzO0FEMjQ7MTEwMCAxMTZCIDExQjM7CitBRDI1O0FEMjU7MTEwMCAxMTZCIDExQjQ7QUQyNTsxMTAwIDExNkIgMTFCNDsKK0FEMjY7QUQyNjsxMTAwIDExNkIgMTFCNTtBRDI2OzExMDAgMTE2QiAxMUI1OworQUQyNztBRDI3OzExMDAgMTE2QiAxMUI2O0FEMjc7MTEwMCAxMTZCIDExQjY7CitBRDI4O0FEMjg7MTEwMCAxMTZCIDExQjc7QUQyODsxMTAwIDExNkIgMTFCNzsKK0FEMjk7QUQyOTsxMTAwIDExNkIgMTFCODtBRDI5OzExMDAgMTE2QiAxMUI4OworQUQyQTtBRDJBOzExMDAgMTE2QiAxMUI5O0FEMkE7MTEwMCAxMTZCIDExQjk7CitBRDJCO0FEMkI7MTEwMCAxMTZCIDExQkE7QUQyQjsxMTAwIDExNkIgMTFCQTsKK0FEMkM7QUQyQzsxMTAwIDExNkIgMTFCQjtBRDJDOzExMDAgMTE2QiAxMUJCOworQUQyRDtBRDJEOzExMDAgMTE2QiAxMUJDO0FEMkQ7MTEwMCAxMTZCIDExQkM7CitBRDJFO0FEMkU7MTEwMCAxMTZCIDExQkQ7QUQyRTsxMTAwIDExNkIgMTFCRDsKK0FEMkY7QUQyRjsxMTAwIDExNkIgMTFCRTtBRDJGOzExMDAgMTE2QiAxMUJFOworQUQzMDtBRDMwOzExMDAgMTE2QiAxMUJGO0FEMzA7MTEwMCAxMTZCIDExQkY7CitBRDMxO0FEMzE7MTEwMCAxMTZCIDExQzA7QUQzMTsxMTAwIDExNkIgMTFDMDsKK0FEMzI7QUQzMjsxMTAwIDExNkIgMTFDMTtBRDMyOzExMDAgMTE2QiAxMUMxOworQUQzMztBRDMzOzExMDAgMTE2QiAxMUMyO0FEMzM7MTEwMCAxMTZCIDExQzI7CitBRDM0O0FEMzQ7MTEwMCAxMTZDO0FEMzQ7MTEwMCAxMTZDOworQUQzNTtBRDM1OzExMDAgMTE2QyAxMUE4O0FEMzU7MTEwMCAxMTZDIDExQTg7CitBRDM2O0FEMzY7MTEwMCAxMTZDIDExQTk7QUQzNjsxMTAwIDExNkMgMTFBOTsKK0FEMzc7QUQzNzsxMTAwIDExNkMgMTFBQTtBRDM3OzExMDAgMTE2QyAxMUFBOworQUQzODtBRDM4OzExMDAgMTE2QyAxMUFCO0FEMzg7MTEwMCAxMTZDIDExQUI7CitBRDM5O0FEMzk7MTEwMCAxMTZDIDExQUM7QUQzOTsxMTAwIDExNkMgMTFBQzsKK0FEM0E7QUQzQTsxMTAwIDExNkMgMTFBRDtBRDNBOzExMDAgMTE2QyAxMUFEOworQUQzQjtBRDNCOzExMDAgMTE2QyAxMUFFO0FEM0I7MTEwMCAxMTZDIDExQUU7CitBRDNDO0FEM0M7MTEwMCAxMTZDIDExQUY7QUQzQzsxMTAwIDExNkMgMTFBRjsKK0FEM0Q7QUQzRDsxMTAwIDExNkMgMTFCMDtBRDNEOzExMDAgMTE2QyAxMUIwOworQUQzRTtBRDNFOzExMDAgMTE2QyAxMUIxO0FEM0U7MTEwMCAxMTZDIDExQjE7CitBRDNGO0FEM0Y7MTEwMCAxMTZDIDExQjI7QUQzRjsxMTAwIDExNkMgMTFCMjsKK0FENDA7QUQ0MDsxMTAwIDExNkMgMTFCMztBRDQwOzExMDAgMTE2QyAxMUIzOworQUQ0MTtBRDQxOzExMDAgMTE2QyAxMUI0O0FENDE7MTEwMCAxMTZDIDExQjQ7CitBRDQyO0FENDI7MTEwMCAxMTZDIDExQjU7QUQ0MjsxMTAwIDExNkMgMTFCNTsKK0FENDM7QUQ0MzsxMTAwIDExNkMgMTFCNjtBRDQzOzExMDAgMTE2QyAxMUI2OworQUQ0NDtBRDQ0OzExMDAgMTE2QyAxMUI3O0FENDQ7MTEwMCAxMTZDIDExQjc7CitBRDQ1O0FENDU7MTEwMCAxMTZDIDExQjg7QUQ0NTsxMTAwIDExNkMgMTFCODsKK0FENDY7QUQ0NjsxMTAwIDExNkMgMTFCOTtBRDQ2OzExMDAgMTE2QyAxMUI5OworQUQ0NztBRDQ3OzExMDAgMTE2QyAxMUJBO0FENDc7MTEwMCAxMTZDIDExQkE7CitBRDQ4O0FENDg7MTEwMCAxMTZDIDExQkI7QUQ0ODsxMTAwIDExNkMgMTFCQjsKK0FENDk7QUQ0OTsxMTAwIDExNkMgMTFCQztBRDQ5OzExMDAgMTE2QyAxMUJDOworQUQ0QTtBRDRBOzExMDAgMTE2QyAxMUJEO0FENEE7MTEwMCAxMTZDIDExQkQ7CitBRDRCO0FENEI7MTEwMCAxMTZDIDExQkU7QUQ0QjsxMTAwIDExNkMgMTFCRTsKK0FENEM7QUQ0QzsxMTAwIDExNkMgMTFCRjtBRDRDOzExMDAgMTE2QyAxMUJGOworQUQ0RDtBRDREOzExMDAgMTE2QyAxMUMwO0FENEQ7MTEwMCAxMTZDIDExQzA7CitBRDRFO0FENEU7MTEwMCAxMTZDIDExQzE7QUQ0RTsxMTAwIDExNkMgMTFDMTsKK0FENEY7QUQ0RjsxMTAwIDExNkMgMTFDMjtBRDRGOzExMDAgMTE2QyAxMUMyOworQUQ1MDtBRDUwOzExMDAgMTE2RDtBRDUwOzExMDAgMTE2RDsKK0FENTE7QUQ1MTsxMTAwIDExNkQgMTFBODtBRDUxOzExMDAgMTE2RCAxMUE4OworQUQ1MjtBRDUyOzExMDAgMTE2RCAxMUE5O0FENTI7MTEwMCAxMTZEIDExQTk7CitBRDUzO0FENTM7MTEwMCAxMTZEIDExQUE7QUQ1MzsxMTAwIDExNkQgMTFBQTsKK0FENTQ7QUQ1NDsxMTAwIDExNkQgMTFBQjtBRDU0OzExMDAgMTE2RCAxMUFCOworQUQ1NTtBRDU1OzExMDAgMTE2RCAxMUFDO0FENTU7MTEwMCAxMTZEIDExQUM7CitBRDU2O0FENTY7MTEwMCAxMTZEIDExQUQ7QUQ1NjsxMTAwIDExNkQgMTFBRDsKK0FENTc7QUQ1NzsxMTAwIDExNkQgMTFBRTtBRDU3OzExMDAgMTE2RCAxMUFFOworQUQ1ODtBRDU4OzExMDAgMTE2RCAxMUFGO0FENTg7MTEwMCAxMTZEIDExQUY7CitBRDU5O0FENTk7MTEwMCAxMTZEIDExQjA7QUQ1OTsxMTAwIDExNkQgMTFCMDsKK0FENUE7QUQ1QTsxMTAwIDExNkQgMTFCMTtBRDVBOzExMDAgMTE2RCAxMUIxOworQUQ1QjtBRDVCOzExMDAgMTE2RCAxMUIyO0FENUI7MTEwMCAxMTZEIDExQjI7CitBRDVDO0FENUM7MTEwMCAxMTZEIDExQjM7QUQ1QzsxMTAwIDExNkQgMTFCMzsKK0FENUQ7QUQ1RDsxMTAwIDExNkQgMTFCNDtBRDVEOzExMDAgMTE2RCAxMUI0OworQUQ1RTtBRDVFOzExMDAgMTE2RCAxMUI1O0FENUU7MTEwMCAxMTZEIDExQjU7CitBRDVGO0FENUY7MTEwMCAxMTZEIDExQjY7QUQ1RjsxMTAwIDExNkQgMTFCNjsKK0FENjA7QUQ2MDsxMTAwIDExNkQgMTFCNztBRDYwOzExMDAgMTE2RCAxMUI3OworQUQ2MTtBRDYxOzExMDAgMTE2RCAxMUI4O0FENjE7MTEwMCAxMTZEIDExQjg7CitBRDYyO0FENjI7MTEwMCAxMTZEIDExQjk7QUQ2MjsxMTAwIDExNkQgMTFCOTsKK0FENjM7QUQ2MzsxMTAwIDExNkQgMTFCQTtBRDYzOzExMDAgMTE2RCAxMUJBOworQUQ2NDtBRDY0OzExMDAgMTE2RCAxMUJCO0FENjQ7MTEwMCAxMTZEIDExQkI7CitBRDY1O0FENjU7MTEwMCAxMTZEIDExQkM7QUQ2NTsxMTAwIDExNkQgMTFCQzsKK0FENjY7QUQ2NjsxMTAwIDExNkQgMTFCRDtBRDY2OzExMDAgMTE2RCAxMUJEOworQUQ2NztBRDY3OzExMDAgMTE2RCAxMUJFO0FENjc7MTEwMCAxMTZEIDExQkU7CitBRDY4O0FENjg7MTEwMCAxMTZEIDExQkY7QUQ2ODsxMTAwIDExNkQgMTFCRjsKK0FENjk7QUQ2OTsxMTAwIDExNkQgMTFDMDtBRDY5OzExMDAgMTE2RCAxMUMwOworQUQ2QTtBRDZBOzExMDAgMTE2RCAxMUMxO0FENkE7MTEwMCAxMTZEIDExQzE7CitBRDZCO0FENkI7MTEwMCAxMTZEIDExQzI7QUQ2QjsxMTAwIDExNkQgMTFDMjsKK0FENkM7QUQ2QzsxMTAwIDExNkU7QUQ2QzsxMTAwIDExNkU7CitBRDZEO0FENkQ7MTEwMCAxMTZFIDExQTg7QUQ2RDsxMTAwIDExNkUgMTFBODsKK0FENkU7QUQ2RTsxMTAwIDExNkUgMTFBOTtBRDZFOzExMDAgMTE2RSAxMUE5OworQUQ2RjtBRDZGOzExMDAgMTE2RSAxMUFBO0FENkY7MTEwMCAxMTZFIDExQUE7CitBRDcwO0FENzA7MTEwMCAxMTZFIDExQUI7QUQ3MDsxMTAwIDExNkUgMTFBQjsKK0FENzE7QUQ3MTsxMTAwIDExNkUgMTFBQztBRDcxOzExMDAgMTE2RSAxMUFDOworQUQ3MjtBRDcyOzExMDAgMTE2RSAxMUFEO0FENzI7MTEwMCAxMTZFIDExQUQ7CitBRDczO0FENzM7MTEwMCAxMTZFIDExQUU7QUQ3MzsxMTAwIDExNkUgMTFBRTsKK0FENzQ7QUQ3NDsxMTAwIDExNkUgMTFBRjtBRDc0OzExMDAgMTE2RSAxMUFGOworQUQ3NTtBRDc1OzExMDAgMTE2RSAxMUIwO0FENzU7MTEwMCAxMTZFIDExQjA7CitBRDc2O0FENzY7MTEwMCAxMTZFIDExQjE7QUQ3NjsxMTAwIDExNkUgMTFCMTsKK0FENzc7QUQ3NzsxMTAwIDExNkUgMTFCMjtBRDc3OzExMDAgMTE2RSAxMUIyOworQUQ3ODtBRDc4OzExMDAgMTE2RSAxMUIzO0FENzg7MTEwMCAxMTZFIDExQjM7CitBRDc5O0FENzk7MTEwMCAxMTZFIDExQjQ7QUQ3OTsxMTAwIDExNkUgMTFCNDsKK0FEN0E7QUQ3QTsxMTAwIDExNkUgMTFCNTtBRDdBOzExMDAgMTE2RSAxMUI1OworQUQ3QjtBRDdCOzExMDAgMTE2RSAxMUI2O0FEN0I7MTEwMCAxMTZFIDExQjY7CitBRDdDO0FEN0M7MTEwMCAxMTZFIDExQjc7QUQ3QzsxMTAwIDExNkUgMTFCNzsKK0FEN0Q7QUQ3RDsxMTAwIDExNkUgMTFCODtBRDdEOzExMDAgMTE2RSAxMUI4OworQUQ3RTtBRDdFOzExMDAgMTE2RSAxMUI5O0FEN0U7MTEwMCAxMTZFIDExQjk7CitBRDdGO0FEN0Y7MTEwMCAxMTZFIDExQkE7QUQ3RjsxMTAwIDExNkUgMTFCQTsKK0FEODA7QUQ4MDsxMTAwIDExNkUgMTFCQjtBRDgwOzExMDAgMTE2RSAxMUJCOworQUQ4MTtBRDgxOzExMDAgMTE2RSAxMUJDO0FEODE7MTEwMCAxMTZFIDExQkM7CitBRDgyO0FEODI7MTEwMCAxMTZFIDExQkQ7QUQ4MjsxMTAwIDExNkUgMTFCRDsKK0FEODM7QUQ4MzsxMTAwIDExNkUgMTFCRTtBRDgzOzExMDAgMTE2RSAxMUJFOworQUQ4NDtBRDg0OzExMDAgMTE2RSAxMUJGO0FEODQ7MTEwMCAxMTZFIDExQkY7CitBRDg1O0FEODU7MTEwMCAxMTZFIDExQzA7QUQ4NTsxMTAwIDExNkUgMTFDMDsKK0FEODY7QUQ4NjsxMTAwIDExNkUgMTFDMTtBRDg2OzExMDAgMTE2RSAxMUMxOworQUQ4NztBRDg3OzExMDAgMTE2RSAxMUMyO0FEODc7MTEwMCAxMTZFIDExQzI7CitBRDg4O0FEODg7MTEwMCAxMTZGO0FEODg7MTEwMCAxMTZGOworQUQ4OTtBRDg5OzExMDAgMTE2RiAxMUE4O0FEODk7MTEwMCAxMTZGIDExQTg7CitBRDhBO0FEOEE7MTEwMCAxMTZGIDExQTk7QUQ4QTsxMTAwIDExNkYgMTFBOTsKK0FEOEI7QUQ4QjsxMTAwIDExNkYgMTFBQTtBRDhCOzExMDAgMTE2RiAxMUFBOworQUQ4QztBRDhDOzExMDAgMTE2RiAxMUFCO0FEOEM7MTEwMCAxMTZGIDExQUI7CitBRDhEO0FEOEQ7MTEwMCAxMTZGIDExQUM7QUQ4RDsxMTAwIDExNkYgMTFBQzsKK0FEOEU7QUQ4RTsxMTAwIDExNkYgMTFBRDtBRDhFOzExMDAgMTE2RiAxMUFEOworQUQ4RjtBRDhGOzExMDAgMTE2RiAxMUFFO0FEOEY7MTEwMCAxMTZGIDExQUU7CitBRDkwO0FEOTA7MTEwMCAxMTZGIDExQUY7QUQ5MDsxMTAwIDExNkYgMTFBRjsKK0FEOTE7QUQ5MTsxMTAwIDExNkYgMTFCMDtBRDkxOzExMDAgMTE2RiAxMUIwOworQUQ5MjtBRDkyOzExMDAgMTE2RiAxMUIxO0FEOTI7MTEwMCAxMTZGIDExQjE7CitBRDkzO0FEOTM7MTEwMCAxMTZGIDExQjI7QUQ5MzsxMTAwIDExNkYgMTFCMjsKK0FEOTQ7QUQ5NDsxMTAwIDExNkYgMTFCMztBRDk0OzExMDAgMTE2RiAxMUIzOworQUQ5NTtBRDk1OzExMDAgMTE2RiAxMUI0O0FEOTU7MTEwMCAxMTZGIDExQjQ7CitBRDk2O0FEOTY7MTEwMCAxMTZGIDExQjU7QUQ5NjsxMTAwIDExNkYgMTFCNTsKK0FEOTc7QUQ5NzsxMTAwIDExNkYgMTFCNjtBRDk3OzExMDAgMTE2RiAxMUI2OworQUQ5ODtBRDk4OzExMDAgMTE2RiAxMUI3O0FEOTg7MTEwMCAxMTZGIDExQjc7CitBRDk5O0FEOTk7MTEwMCAxMTZGIDExQjg7QUQ5OTsxMTAwIDExNkYgMTFCODsKK0FEOUE7QUQ5QTsxMTAwIDExNkYgMTFCOTtBRDlBOzExMDAgMTE2RiAxMUI5OworQUQ5QjtBRDlCOzExMDAgMTE2RiAxMUJBO0FEOUI7MTEwMCAxMTZGIDExQkE7CitBRDlDO0FEOUM7MTEwMCAxMTZGIDExQkI7QUQ5QzsxMTAwIDExNkYgMTFCQjsKK0FEOUQ7QUQ5RDsxMTAwIDExNkYgMTFCQztBRDlEOzExMDAgMTE2RiAxMUJDOworQUQ5RTtBRDlFOzExMDAgMTE2RiAxMUJEO0FEOUU7MTEwMCAxMTZGIDExQkQ7CitBRDlGO0FEOUY7MTEwMCAxMTZGIDExQkU7QUQ5RjsxMTAwIDExNkYgMTFCRTsKK0FEQTA7QURBMDsxMTAwIDExNkYgMTFCRjtBREEwOzExMDAgMTE2RiAxMUJGOworQURBMTtBREExOzExMDAgMTE2RiAxMUMwO0FEQTE7MTEwMCAxMTZGIDExQzA7CitBREEyO0FEQTI7MTEwMCAxMTZGIDExQzE7QURBMjsxMTAwIDExNkYgMTFDMTsKK0FEQTM7QURBMzsxMTAwIDExNkYgMTFDMjtBREEzOzExMDAgMTE2RiAxMUMyOworQURBNDtBREE0OzExMDAgMTE3MDtBREE0OzExMDAgMTE3MDsKK0FEQTU7QURBNTsxMTAwIDExNzAgMTFBODtBREE1OzExMDAgMTE3MCAxMUE4OworQURBNjtBREE2OzExMDAgMTE3MCAxMUE5O0FEQTY7MTEwMCAxMTcwIDExQTk7CitBREE3O0FEQTc7MTEwMCAxMTcwIDExQUE7QURBNzsxMTAwIDExNzAgMTFBQTsKK0FEQTg7QURBODsxMTAwIDExNzAgMTFBQjtBREE4OzExMDAgMTE3MCAxMUFCOworQURBOTtBREE5OzExMDAgMTE3MCAxMUFDO0FEQTk7MTEwMCAxMTcwIDExQUM7CitBREFBO0FEQUE7MTEwMCAxMTcwIDExQUQ7QURBQTsxMTAwIDExNzAgMTFBRDsKK0FEQUI7QURBQjsxMTAwIDExNzAgMTFBRTtBREFCOzExMDAgMTE3MCAxMUFFOworQURBQztBREFDOzExMDAgMTE3MCAxMUFGO0FEQUM7MTEwMCAxMTcwIDExQUY7CitBREFEO0FEQUQ7MTEwMCAxMTcwIDExQjA7QURBRDsxMTAwIDExNzAgMTFCMDsKK0FEQUU7QURBRTsxMTAwIDExNzAgMTFCMTtBREFFOzExMDAgMTE3MCAxMUIxOworQURBRjtBREFGOzExMDAgMTE3MCAxMUIyO0FEQUY7MTEwMCAxMTcwIDExQjI7CitBREIwO0FEQjA7MTEwMCAxMTcwIDExQjM7QURCMDsxMTAwIDExNzAgMTFCMzsKK0FEQjE7QURCMTsxMTAwIDExNzAgMTFCNDtBREIxOzExMDAgMTE3MCAxMUI0OworQURCMjtBREIyOzExMDAgMTE3MCAxMUI1O0FEQjI7MTEwMCAxMTcwIDExQjU7CitBREIzO0FEQjM7MTEwMCAxMTcwIDExQjY7QURCMzsxMTAwIDExNzAgMTFCNjsKK0FEQjQ7QURCNDsxMTAwIDExNzAgMTFCNztBREI0OzExMDAgMTE3MCAxMUI3OworQURCNTtBREI1OzExMDAgMTE3MCAxMUI4O0FEQjU7MTEwMCAxMTcwIDExQjg7CitBREI2O0FEQjY7MTEwMCAxMTcwIDExQjk7QURCNjsxMTAwIDExNzAgMTFCOTsKK0FEQjc7QURCNzsxMTAwIDExNzAgMTFCQTtBREI3OzExMDAgMTE3MCAxMUJBOworQURCODtBREI4OzExMDAgMTE3MCAxMUJCO0FEQjg7MTEwMCAxMTcwIDExQkI7CitBREI5O0FEQjk7MTEwMCAxMTcwIDExQkM7QURCOTsxMTAwIDExNzAgMTFCQzsKK0FEQkE7QURCQTsxMTAwIDExNzAgMTFCRDtBREJBOzExMDAgMTE3MCAxMUJEOworQURCQjtBREJCOzExMDAgMTE3MCAxMUJFO0FEQkI7MTEwMCAxMTcwIDExQkU7CitBREJDO0FEQkM7MTEwMCAxMTcwIDExQkY7QURCQzsxMTAwIDExNzAgMTFCRjsKK0FEQkQ7QURCRDsxMTAwIDExNzAgMTFDMDtBREJEOzExMDAgMTE3MCAxMUMwOworQURCRTtBREJFOzExMDAgMTE3MCAxMUMxO0FEQkU7MTEwMCAxMTcwIDExQzE7CitBREJGO0FEQkY7MTEwMCAxMTcwIDExQzI7QURCRjsxMTAwIDExNzAgMTFDMjsKK0FEQzA7QURDMDsxMTAwIDExNzE7QURDMDsxMTAwIDExNzE7CitBREMxO0FEQzE7MTEwMCAxMTcxIDExQTg7QURDMTsxMTAwIDExNzEgMTFBODsKK0FEQzI7QURDMjsxMTAwIDExNzEgMTFBOTtBREMyOzExMDAgMTE3MSAxMUE5OworQURDMztBREMzOzExMDAgMTE3MSAxMUFBO0FEQzM7MTEwMCAxMTcxIDExQUE7CitBREM0O0FEQzQ7MTEwMCAxMTcxIDExQUI7QURDNDsxMTAwIDExNzEgMTFBQjsKK0FEQzU7QURDNTsxMTAwIDExNzEgMTFBQztBREM1OzExMDAgMTE3MSAxMUFDOworQURDNjtBREM2OzExMDAgMTE3MSAxMUFEO0FEQzY7MTEwMCAxMTcxIDExQUQ7CitBREM3O0FEQzc7MTEwMCAxMTcxIDExQUU7QURDNzsxMTAwIDExNzEgMTFBRTsKK0FEQzg7QURDODsxMTAwIDExNzEgMTFBRjtBREM4OzExMDAgMTE3MSAxMUFGOworQURDOTtBREM5OzExMDAgMTE3MSAxMUIwO0FEQzk7MTEwMCAxMTcxIDExQjA7CitBRENBO0FEQ0E7MTEwMCAxMTcxIDExQjE7QURDQTsxMTAwIDExNzEgMTFCMTsKK0FEQ0I7QURDQjsxMTAwIDExNzEgMTFCMjtBRENCOzExMDAgMTE3MSAxMUIyOworQURDQztBRENDOzExMDAgMTE3MSAxMUIzO0FEQ0M7MTEwMCAxMTcxIDExQjM7CitBRENEO0FEQ0Q7MTEwMCAxMTcxIDExQjQ7QURDRDsxMTAwIDExNzEgMTFCNDsKK0FEQ0U7QURDRTsxMTAwIDExNzEgMTFCNTtBRENFOzExMDAgMTE3MSAxMUI1OworQURDRjtBRENGOzExMDAgMTE3MSAxMUI2O0FEQ0Y7MTEwMCAxMTcxIDExQjY7CitBREQwO0FERDA7MTEwMCAxMTcxIDExQjc7QUREMDsxMTAwIDExNzEgMTFCNzsKK0FERDE7QUREMTsxMTAwIDExNzEgMTFCODtBREQxOzExMDAgMTE3MSAxMUI4OworQUREMjtBREQyOzExMDAgMTE3MSAxMUI5O0FERDI7MTEwMCAxMTcxIDExQjk7CitBREQzO0FERDM7MTEwMCAxMTcxIDExQkE7QUREMzsxMTAwIDExNzEgMTFCQTsKK0FERDQ7QURENDsxMTAwIDExNzEgMTFCQjtBREQ0OzExMDAgMTE3MSAxMUJCOworQURENTtBREQ1OzExMDAgMTE3MSAxMUJDO0FERDU7MTEwMCAxMTcxIDExQkM7CitBREQ2O0FERDY7MTEwMCAxMTcxIDExQkQ7QURENjsxMTAwIDExNzEgMTFCRDsKK0FERDc7QURENzsxMTAwIDExNzEgMTFCRTtBREQ3OzExMDAgMTE3MSAxMUJFOworQUREODtBREQ4OzExMDAgMTE3MSAxMUJGO0FERDg7MTEwMCAxMTcxIDExQkY7CitBREQ5O0FERDk7MTEwMCAxMTcxIDExQzA7QUREOTsxMTAwIDExNzEgMTFDMDsKK0FEREE7QUREQTsxMTAwIDExNzEgMTFDMTtBRERBOzExMDAgMTE3MSAxMUMxOworQUREQjtBRERCOzExMDAgMTE3MSAxMUMyO0FEREI7MTEwMCAxMTcxIDExQzI7CitBRERDO0FEREM7MTEwMCAxMTcyO0FEREM7MTEwMCAxMTcyOworQURERDtBREREOzExMDAgMTE3MiAxMUE4O0FEREQ7MTEwMCAxMTcyIDExQTg7CitBRERFO0FEREU7MTEwMCAxMTcyIDExQTk7QURERTsxMTAwIDExNzIgMTFBOTsKK0FEREY7QURERjsxMTAwIDExNzIgMTFBQTtBRERGOzExMDAgMTE3MiAxMUFBOworQURFMDtBREUwOzExMDAgMTE3MiAxMUFCO0FERTA7MTEwMCAxMTcyIDExQUI7CitBREUxO0FERTE7MTEwMCAxMTcyIDExQUM7QURFMTsxMTAwIDExNzIgMTFBQzsKK0FERTI7QURFMjsxMTAwIDExNzIgMTFBRDtBREUyOzExMDAgMTE3MiAxMUFEOworQURFMztBREUzOzExMDAgMTE3MiAxMUFFO0FERTM7MTEwMCAxMTcyIDExQUU7CitBREU0O0FERTQ7MTEwMCAxMTcyIDExQUY7QURFNDsxMTAwIDExNzIgMTFBRjsKK0FERTU7QURFNTsxMTAwIDExNzIgMTFCMDtBREU1OzExMDAgMTE3MiAxMUIwOworQURFNjtBREU2OzExMDAgMTE3MiAxMUIxO0FERTY7MTEwMCAxMTcyIDExQjE7CitBREU3O0FERTc7MTEwMCAxMTcyIDExQjI7QURFNzsxMTAwIDExNzIgMTFCMjsKK0FERTg7QURFODsxMTAwIDExNzIgMTFCMztBREU4OzExMDAgMTE3MiAxMUIzOworQURFOTtBREU5OzExMDAgMTE3MiAxMUI0O0FERTk7MTEwMCAxMTcyIDExQjQ7CitBREVBO0FERUE7MTEwMCAxMTcyIDExQjU7QURFQTsxMTAwIDExNzIgMTFCNTsKK0FERUI7QURFQjsxMTAwIDExNzIgMTFCNjtBREVCOzExMDAgMTE3MiAxMUI2OworQURFQztBREVDOzExMDAgMTE3MiAxMUI3O0FERUM7MTEwMCAxMTcyIDExQjc7CitBREVEO0FERUQ7MTEwMCAxMTcyIDExQjg7QURFRDsxMTAwIDExNzIgMTFCODsKK0FERUU7QURFRTsxMTAwIDExNzIgMTFCOTtBREVFOzExMDAgMTE3MiAxMUI5OworQURFRjtBREVGOzExMDAgMTE3MiAxMUJBO0FERUY7MTEwMCAxMTcyIDExQkE7CitBREYwO0FERjA7MTEwMCAxMTcyIDExQkI7QURGMDsxMTAwIDExNzIgMTFCQjsKK0FERjE7QURGMTsxMTAwIDExNzIgMTFCQztBREYxOzExMDAgMTE3MiAxMUJDOworQURGMjtBREYyOzExMDAgMTE3MiAxMUJEO0FERjI7MTEwMCAxMTcyIDExQkQ7CitBREYzO0FERjM7MTEwMCAxMTcyIDExQkU7QURGMzsxMTAwIDExNzIgMTFCRTsKK0FERjQ7QURGNDsxMTAwIDExNzIgMTFCRjtBREY0OzExMDAgMTE3MiAxMUJGOworQURGNTtBREY1OzExMDAgMTE3MiAxMUMwO0FERjU7MTEwMCAxMTcyIDExQzA7CitBREY2O0FERjY7MTEwMCAxMTcyIDExQzE7QURGNjsxMTAwIDExNzIgMTFDMTsKK0FERjc7QURGNzsxMTAwIDExNzIgMTFDMjtBREY3OzExMDAgMTE3MiAxMUMyOworQURGODtBREY4OzExMDAgMTE3MztBREY4OzExMDAgMTE3MzsKK0FERjk7QURGOTsxMTAwIDExNzMgMTFBODtBREY5OzExMDAgMTE3MyAxMUE4OworQURGQTtBREZBOzExMDAgMTE3MyAxMUE5O0FERkE7MTEwMCAxMTczIDExQTk7CitBREZCO0FERkI7MTEwMCAxMTczIDExQUE7QURGQjsxMTAwIDExNzMgMTFBQTsKK0FERkM7QURGQzsxMTAwIDExNzMgMTFBQjtBREZDOzExMDAgMTE3MyAxMUFCOworQURGRDtBREZEOzExMDAgMTE3MyAxMUFDO0FERkQ7MTEwMCAxMTczIDExQUM7CitBREZFO0FERkU7MTEwMCAxMTczIDExQUQ7QURGRTsxMTAwIDExNzMgMTFBRDsKK0FERkY7QURGRjsxMTAwIDExNzMgMTFBRTtBREZGOzExMDAgMTE3MyAxMUFFOworQUUwMDtBRTAwOzExMDAgMTE3MyAxMUFGO0FFMDA7MTEwMCAxMTczIDExQUY7CitBRTAxO0FFMDE7MTEwMCAxMTczIDExQjA7QUUwMTsxMTAwIDExNzMgMTFCMDsKK0FFMDI7QUUwMjsxMTAwIDExNzMgMTFCMTtBRTAyOzExMDAgMTE3MyAxMUIxOworQUUwMztBRTAzOzExMDAgMTE3MyAxMUIyO0FFMDM7MTEwMCAxMTczIDExQjI7CitBRTA0O0FFMDQ7MTEwMCAxMTczIDExQjM7QUUwNDsxMTAwIDExNzMgMTFCMzsKK0FFMDU7QUUwNTsxMTAwIDExNzMgMTFCNDtBRTA1OzExMDAgMTE3MyAxMUI0OworQUUwNjtBRTA2OzExMDAgMTE3MyAxMUI1O0FFMDY7MTEwMCAxMTczIDExQjU7CitBRTA3O0FFMDc7MTEwMCAxMTczIDExQjY7QUUwNzsxMTAwIDExNzMgMTFCNjsKK0FFMDg7QUUwODsxMTAwIDExNzMgMTFCNztBRTA4OzExMDAgMTE3MyAxMUI3OworQUUwOTtBRTA5OzExMDAgMTE3MyAxMUI4O0FFMDk7MTEwMCAxMTczIDExQjg7CitBRTBBO0FFMEE7MTEwMCAxMTczIDExQjk7QUUwQTsxMTAwIDExNzMgMTFCOTsKK0FFMEI7QUUwQjsxMTAwIDExNzMgMTFCQTtBRTBCOzExMDAgMTE3MyAxMUJBOworQUUwQztBRTBDOzExMDAgMTE3MyAxMUJCO0FFMEM7MTEwMCAxMTczIDExQkI7CitBRTBEO0FFMEQ7MTEwMCAxMTczIDExQkM7QUUwRDsxMTAwIDExNzMgMTFCQzsKK0FFMEU7QUUwRTsxMTAwIDExNzMgMTFCRDtBRTBFOzExMDAgMTE3MyAxMUJEOworQUUwRjtBRTBGOzExMDAgMTE3MyAxMUJFO0FFMEY7MTEwMCAxMTczIDExQkU7CitBRTEwO0FFMTA7MTEwMCAxMTczIDExQkY7QUUxMDsxMTAwIDExNzMgMTFCRjsKK0FFMTE7QUUxMTsxMTAwIDExNzMgMTFDMDtBRTExOzExMDAgMTE3MyAxMUMwOworQUUxMjtBRTEyOzExMDAgMTE3MyAxMUMxO0FFMTI7MTEwMCAxMTczIDExQzE7CitBRTEzO0FFMTM7MTEwMCAxMTczIDExQzI7QUUxMzsxMTAwIDExNzMgMTFDMjsKK0FFMTQ7QUUxNDsxMTAwIDExNzQ7QUUxNDsxMTAwIDExNzQ7CitBRTE1O0FFMTU7MTEwMCAxMTc0IDExQTg7QUUxNTsxMTAwIDExNzQgMTFBODsKK0FFMTY7QUUxNjsxMTAwIDExNzQgMTFBOTtBRTE2OzExMDAgMTE3NCAxMUE5OworQUUxNztBRTE3OzExMDAgMTE3NCAxMUFBO0FFMTc7MTEwMCAxMTc0IDExQUE7CitBRTE4O0FFMTg7MTEwMCAxMTc0IDExQUI7QUUxODsxMTAwIDExNzQgMTFBQjsKK0FFMTk7QUUxOTsxMTAwIDExNzQgMTFBQztBRTE5OzExMDAgMTE3NCAxMUFDOworQUUxQTtBRTFBOzExMDAgMTE3NCAxMUFEO0FFMUE7MTEwMCAxMTc0IDExQUQ7CitBRTFCO0FFMUI7MTEwMCAxMTc0IDExQUU7QUUxQjsxMTAwIDExNzQgMTFBRTsKK0FFMUM7QUUxQzsxMTAwIDExNzQgMTFBRjtBRTFDOzExMDAgMTE3NCAxMUFGOworQUUxRDtBRTFEOzExMDAgMTE3NCAxMUIwO0FFMUQ7MTEwMCAxMTc0IDExQjA7CitBRTFFO0FFMUU7MTEwMCAxMTc0IDExQjE7QUUxRTsxMTAwIDExNzQgMTFCMTsKK0FFMUY7QUUxRjsxMTAwIDExNzQgMTFCMjtBRTFGOzExMDAgMTE3NCAxMUIyOworQUUyMDtBRTIwOzExMDAgMTE3NCAxMUIzO0FFMjA7MTEwMCAxMTc0IDExQjM7CitBRTIxO0FFMjE7MTEwMCAxMTc0IDExQjQ7QUUyMTsxMTAwIDExNzQgMTFCNDsKK0FFMjI7QUUyMjsxMTAwIDExNzQgMTFCNTtBRTIyOzExMDAgMTE3NCAxMUI1OworQUUyMztBRTIzOzExMDAgMTE3NCAxMUI2O0FFMjM7MTEwMCAxMTc0IDExQjY7CitBRTI0O0FFMjQ7MTEwMCAxMTc0IDExQjc7QUUyNDsxMTAwIDExNzQgMTFCNzsKK0FFMjU7QUUyNTsxMTAwIDExNzQgMTFCODtBRTI1OzExMDAgMTE3NCAxMUI4OworQUUyNjtBRTI2OzExMDAgMTE3NCAxMUI5O0FFMjY7MTEwMCAxMTc0IDExQjk7CitBRTI3O0FFMjc7MTEwMCAxMTc0IDExQkE7QUUyNzsxMTAwIDExNzQgMTFCQTsKK0FFMjg7QUUyODsxMTAwIDExNzQgMTFCQjtBRTI4OzExMDAgMTE3NCAxMUJCOworQUUyOTtBRTI5OzExMDAgMTE3NCAxMUJDO0FFMjk7MTEwMCAxMTc0IDExQkM7CitBRTJBO0FFMkE7MTEwMCAxMTc0IDExQkQ7QUUyQTsxMTAwIDExNzQgMTFCRDsKK0FFMkI7QUUyQjsxMTAwIDExNzQgMTFCRTtBRTJCOzExMDAgMTE3NCAxMUJFOworQUUyQztBRTJDOzExMDAgMTE3NCAxMUJGO0FFMkM7MTEwMCAxMTc0IDExQkY7CitBRTJEO0FFMkQ7MTEwMCAxMTc0IDExQzA7QUUyRDsxMTAwIDExNzQgMTFDMDsKK0FFMkU7QUUyRTsxMTAwIDExNzQgMTFDMTtBRTJFOzExMDAgMTE3NCAxMUMxOworQUUyRjtBRTJGOzExMDAgMTE3NCAxMUMyO0FFMkY7MTEwMCAxMTc0IDExQzI7CitBRTMwO0FFMzA7MTEwMCAxMTc1O0FFMzA7MTEwMCAxMTc1OworQUUzMTtBRTMxOzExMDAgMTE3NSAxMUE4O0FFMzE7MTEwMCAxMTc1IDExQTg7CitBRTMyO0FFMzI7MTEwMCAxMTc1IDExQTk7QUUzMjsxMTAwIDExNzUgMTFBOTsKK0FFMzM7QUUzMzsxMTAwIDExNzUgMTFBQTtBRTMzOzExMDAgMTE3NSAxMUFBOworQUUzNDtBRTM0OzExMDAgMTE3NSAxMUFCO0FFMzQ7MTEwMCAxMTc1IDExQUI7CitBRTM1O0FFMzU7MTEwMCAxMTc1IDExQUM7QUUzNTsxMTAwIDExNzUgMTFBQzsKK0FFMzY7QUUzNjsxMTAwIDExNzUgMTFBRDtBRTM2OzExMDAgMTE3NSAxMUFEOworQUUzNztBRTM3OzExMDAgMTE3NSAxMUFFO0FFMzc7MTEwMCAxMTc1IDExQUU7CitBRTM4O0FFMzg7MTEwMCAxMTc1IDExQUY7QUUzODsxMTAwIDExNzUgMTFBRjsKK0FFMzk7QUUzOTsxMTAwIDExNzUgMTFCMDtBRTM5OzExMDAgMTE3NSAxMUIwOworQUUzQTtBRTNBOzExMDAgMTE3NSAxMUIxO0FFM0E7MTEwMCAxMTc1IDExQjE7CitBRTNCO0FFM0I7MTEwMCAxMTc1IDExQjI7QUUzQjsxMTAwIDExNzUgMTFCMjsKK0FFM0M7QUUzQzsxMTAwIDExNzUgMTFCMztBRTNDOzExMDAgMTE3NSAxMUIzOworQUUzRDtBRTNEOzExMDAgMTE3NSAxMUI0O0FFM0Q7MTEwMCAxMTc1IDExQjQ7CitBRTNFO0FFM0U7MTEwMCAxMTc1IDExQjU7QUUzRTsxMTAwIDExNzUgMTFCNTsKK0FFM0Y7QUUzRjsxMTAwIDExNzUgMTFCNjtBRTNGOzExMDAgMTE3NSAxMUI2OworQUU0MDtBRTQwOzExMDAgMTE3NSAxMUI3O0FFNDA7MTEwMCAxMTc1IDExQjc7CitBRTQxO0FFNDE7MTEwMCAxMTc1IDExQjg7QUU0MTsxMTAwIDExNzUgMTFCODsKK0FFNDI7QUU0MjsxMTAwIDExNzUgMTFCOTtBRTQyOzExMDAgMTE3NSAxMUI5OworQUU0MztBRTQzOzExMDAgMTE3NSAxMUJBO0FFNDM7MTEwMCAxMTc1IDExQkE7CitBRTQ0O0FFNDQ7MTEwMCAxMTc1IDExQkI7QUU0NDsxMTAwIDExNzUgMTFCQjsKK0FFNDU7QUU0NTsxMTAwIDExNzUgMTFCQztBRTQ1OzExMDAgMTE3NSAxMUJDOworQUU0NjtBRTQ2OzExMDAgMTE3NSAxMUJEO0FFNDY7MTEwMCAxMTc1IDExQkQ7CitBRTQ3O0FFNDc7MTEwMCAxMTc1IDExQkU7QUU0NzsxMTAwIDExNzUgMTFCRTsKK0FFNDg7QUU0ODsxMTAwIDExNzUgMTFCRjtBRTQ4OzExMDAgMTE3NSAxMUJGOworQUU0OTtBRTQ5OzExMDAgMTE3NSAxMUMwO0FFNDk7MTEwMCAxMTc1IDExQzA7CitBRTRBO0FFNEE7MTEwMCAxMTc1IDExQzE7QUU0QTsxMTAwIDExNzUgMTFDMTsKK0FFNEI7QUU0QjsxMTAwIDExNzUgMTFDMjtBRTRCOzExMDAgMTE3NSAxMUMyOworQUU0QztBRTRDOzExMDEgMTE2MTtBRTRDOzExMDEgMTE2MTsKK0FFNEQ7QUU0RDsxMTAxIDExNjEgMTFBODtBRTREOzExMDEgMTE2MSAxMUE4OworQUU0RTtBRTRFOzExMDEgMTE2MSAxMUE5O0FFNEU7MTEwMSAxMTYxIDExQTk7CitBRTRGO0FFNEY7MTEwMSAxMTYxIDExQUE7QUU0RjsxMTAxIDExNjEgMTFBQTsKK0FFNTA7QUU1MDsxMTAxIDExNjEgMTFBQjtBRTUwOzExMDEgMTE2MSAxMUFCOworQUU1MTtBRTUxOzExMDEgMTE2MSAxMUFDO0FFNTE7MTEwMSAxMTYxIDExQUM7CitBRTUyO0FFNTI7MTEwMSAxMTYxIDExQUQ7QUU1MjsxMTAxIDExNjEgMTFBRDsKK0FFNTM7QUU1MzsxMTAxIDExNjEgMTFBRTtBRTUzOzExMDEgMTE2MSAxMUFFOworQUU1NDtBRTU0OzExMDEgMTE2MSAxMUFGO0FFNTQ7MTEwMSAxMTYxIDExQUY7CitBRTU1O0FFNTU7MTEwMSAxMTYxIDExQjA7QUU1NTsxMTAxIDExNjEgMTFCMDsKK0FFNTY7QUU1NjsxMTAxIDExNjEgMTFCMTtBRTU2OzExMDEgMTE2MSAxMUIxOworQUU1NztBRTU3OzExMDEgMTE2MSAxMUIyO0FFNTc7MTEwMSAxMTYxIDExQjI7CitBRTU4O0FFNTg7MTEwMSAxMTYxIDExQjM7QUU1ODsxMTAxIDExNjEgMTFCMzsKK0FFNTk7QUU1OTsxMTAxIDExNjEgMTFCNDtBRTU5OzExMDEgMTE2MSAxMUI0OworQUU1QTtBRTVBOzExMDEgMTE2MSAxMUI1O0FFNUE7MTEwMSAxMTYxIDExQjU7CitBRTVCO0FFNUI7MTEwMSAxMTYxIDExQjY7QUU1QjsxMTAxIDExNjEgMTFCNjsKK0FFNUM7QUU1QzsxMTAxIDExNjEgMTFCNztBRTVDOzExMDEgMTE2MSAxMUI3OworQUU1RDtBRTVEOzExMDEgMTE2MSAxMUI4O0FFNUQ7MTEwMSAxMTYxIDExQjg7CitBRTVFO0FFNUU7MTEwMSAxMTYxIDExQjk7QUU1RTsxMTAxIDExNjEgMTFCOTsKK0FFNUY7QUU1RjsxMTAxIDExNjEgMTFCQTtBRTVGOzExMDEgMTE2MSAxMUJBOworQUU2MDtBRTYwOzExMDEgMTE2MSAxMUJCO0FFNjA7MTEwMSAxMTYxIDExQkI7CitBRTYxO0FFNjE7MTEwMSAxMTYxIDExQkM7QUU2MTsxMTAxIDExNjEgMTFCQzsKK0FFNjI7QUU2MjsxMTAxIDExNjEgMTFCRDtBRTYyOzExMDEgMTE2MSAxMUJEOworQUU2MztBRTYzOzExMDEgMTE2MSAxMUJFO0FFNjM7MTEwMSAxMTYxIDExQkU7CitBRTY0O0FFNjQ7MTEwMSAxMTYxIDExQkY7QUU2NDsxMTAxIDExNjEgMTFCRjsKK0FFNjU7QUU2NTsxMTAxIDExNjEgMTFDMDtBRTY1OzExMDEgMTE2MSAxMUMwOworQUU2NjtBRTY2OzExMDEgMTE2MSAxMUMxO0FFNjY7MTEwMSAxMTYxIDExQzE7CitBRTY3O0FFNjc7MTEwMSAxMTYxIDExQzI7QUU2NzsxMTAxIDExNjEgMTFDMjsKK0FFNjg7QUU2ODsxMTAxIDExNjI7QUU2ODsxMTAxIDExNjI7CitBRTY5O0FFNjk7MTEwMSAxMTYyIDExQTg7QUU2OTsxMTAxIDExNjIgMTFBODsKK0FFNkE7QUU2QTsxMTAxIDExNjIgMTFBOTtBRTZBOzExMDEgMTE2MiAxMUE5OworQUU2QjtBRTZCOzExMDEgMTE2MiAxMUFBO0FFNkI7MTEwMSAxMTYyIDExQUE7CitBRTZDO0FFNkM7MTEwMSAxMTYyIDExQUI7QUU2QzsxMTAxIDExNjIgMTFBQjsKK0FFNkQ7QUU2RDsxMTAxIDExNjIgMTFBQztBRTZEOzExMDEgMTE2MiAxMUFDOworQUU2RTtBRTZFOzExMDEgMTE2MiAxMUFEO0FFNkU7MTEwMSAxMTYyIDExQUQ7CitBRTZGO0FFNkY7MTEwMSAxMTYyIDExQUU7QUU2RjsxMTAxIDExNjIgMTFBRTsKK0FFNzA7QUU3MDsxMTAxIDExNjIgMTFBRjtBRTcwOzExMDEgMTE2MiAxMUFGOworQUU3MTtBRTcxOzExMDEgMTE2MiAxMUIwO0FFNzE7MTEwMSAxMTYyIDExQjA7CitBRTcyO0FFNzI7MTEwMSAxMTYyIDExQjE7QUU3MjsxMTAxIDExNjIgMTFCMTsKK0FFNzM7QUU3MzsxMTAxIDExNjIgMTFCMjtBRTczOzExMDEgMTE2MiAxMUIyOworQUU3NDtBRTc0OzExMDEgMTE2MiAxMUIzO0FFNzQ7MTEwMSAxMTYyIDExQjM7CitBRTc1O0FFNzU7MTEwMSAxMTYyIDExQjQ7QUU3NTsxMTAxIDExNjIgMTFCNDsKK0FFNzY7QUU3NjsxMTAxIDExNjIgMTFCNTtBRTc2OzExMDEgMTE2MiAxMUI1OworQUU3NztBRTc3OzExMDEgMTE2MiAxMUI2O0FFNzc7MTEwMSAxMTYyIDExQjY7CitBRTc4O0FFNzg7MTEwMSAxMTYyIDExQjc7QUU3ODsxMTAxIDExNjIgMTFCNzsKK0FFNzk7QUU3OTsxMTAxIDExNjIgMTFCODtBRTc5OzExMDEgMTE2MiAxMUI4OworQUU3QTtBRTdBOzExMDEgMTE2MiAxMUI5O0FFN0E7MTEwMSAxMTYyIDExQjk7CitBRTdCO0FFN0I7MTEwMSAxMTYyIDExQkE7QUU3QjsxMTAxIDExNjIgMTFCQTsKK0FFN0M7QUU3QzsxMTAxIDExNjIgMTFCQjtBRTdDOzExMDEgMTE2MiAxMUJCOworQUU3RDtBRTdEOzExMDEgMTE2MiAxMUJDO0FFN0Q7MTEwMSAxMTYyIDExQkM7CitBRTdFO0FFN0U7MTEwMSAxMTYyIDExQkQ7QUU3RTsxMTAxIDExNjIgMTFCRDsKK0FFN0Y7QUU3RjsxMTAxIDExNjIgMTFCRTtBRTdGOzExMDEgMTE2MiAxMUJFOworQUU4MDtBRTgwOzExMDEgMTE2MiAxMUJGO0FFODA7MTEwMSAxMTYyIDExQkY7CitBRTgxO0FFODE7MTEwMSAxMTYyIDExQzA7QUU4MTsxMTAxIDExNjIgMTFDMDsKK0FFODI7QUU4MjsxMTAxIDExNjIgMTFDMTtBRTgyOzExMDEgMTE2MiAxMUMxOworQUU4MztBRTgzOzExMDEgMTE2MiAxMUMyO0FFODM7MTEwMSAxMTYyIDExQzI7CitBRTg0O0FFODQ7MTEwMSAxMTYzO0FFODQ7MTEwMSAxMTYzOworQUU4NTtBRTg1OzExMDEgMTE2MyAxMUE4O0FFODU7MTEwMSAxMTYzIDExQTg7CitBRTg2O0FFODY7MTEwMSAxMTYzIDExQTk7QUU4NjsxMTAxIDExNjMgMTFBOTsKK0FFODc7QUU4NzsxMTAxIDExNjMgMTFBQTtBRTg3OzExMDEgMTE2MyAxMUFBOworQUU4ODtBRTg4OzExMDEgMTE2MyAxMUFCO0FFODg7MTEwMSAxMTYzIDExQUI7CitBRTg5O0FFODk7MTEwMSAxMTYzIDExQUM7QUU4OTsxMTAxIDExNjMgMTFBQzsKK0FFOEE7QUU4QTsxMTAxIDExNjMgMTFBRDtBRThBOzExMDEgMTE2MyAxMUFEOworQUU4QjtBRThCOzExMDEgMTE2MyAxMUFFO0FFOEI7MTEwMSAxMTYzIDExQUU7CitBRThDO0FFOEM7MTEwMSAxMTYzIDExQUY7QUU4QzsxMTAxIDExNjMgMTFBRjsKK0FFOEQ7QUU4RDsxMTAxIDExNjMgMTFCMDtBRThEOzExMDEgMTE2MyAxMUIwOworQUU4RTtBRThFOzExMDEgMTE2MyAxMUIxO0FFOEU7MTEwMSAxMTYzIDExQjE7CitBRThGO0FFOEY7MTEwMSAxMTYzIDExQjI7QUU4RjsxMTAxIDExNjMgMTFCMjsKK0FFOTA7QUU5MDsxMTAxIDExNjMgMTFCMztBRTkwOzExMDEgMTE2MyAxMUIzOworQUU5MTtBRTkxOzExMDEgMTE2MyAxMUI0O0FFOTE7MTEwMSAxMTYzIDExQjQ7CitBRTkyO0FFOTI7MTEwMSAxMTYzIDExQjU7QUU5MjsxMTAxIDExNjMgMTFCNTsKK0FFOTM7QUU5MzsxMTAxIDExNjMgMTFCNjtBRTkzOzExMDEgMTE2MyAxMUI2OworQUU5NDtBRTk0OzExMDEgMTE2MyAxMUI3O0FFOTQ7MTEwMSAxMTYzIDExQjc7CitBRTk1O0FFOTU7MTEwMSAxMTYzIDExQjg7QUU5NTsxMTAxIDExNjMgMTFCODsKK0FFOTY7QUU5NjsxMTAxIDExNjMgMTFCOTtBRTk2OzExMDEgMTE2MyAxMUI5OworQUU5NztBRTk3OzExMDEgMTE2MyAxMUJBO0FFOTc7MTEwMSAxMTYzIDExQkE7CitBRTk4O0FFOTg7MTEwMSAxMTYzIDExQkI7QUU5ODsxMTAxIDExNjMgMTFCQjsKK0FFOTk7QUU5OTsxMTAxIDExNjMgMTFCQztBRTk5OzExMDEgMTE2MyAxMUJDOworQUU5QTtBRTlBOzExMDEgMTE2MyAxMUJEO0FFOUE7MTEwMSAxMTYzIDExQkQ7CitBRTlCO0FFOUI7MTEwMSAxMTYzIDExQkU7QUU5QjsxMTAxIDExNjMgMTFCRTsKK0FFOUM7QUU5QzsxMTAxIDExNjMgMTFCRjtBRTlDOzExMDEgMTE2MyAxMUJGOworQUU5RDtBRTlEOzExMDEgMTE2MyAxMUMwO0FFOUQ7MTEwMSAxMTYzIDExQzA7CitBRTlFO0FFOUU7MTEwMSAxMTYzIDExQzE7QUU5RTsxMTAxIDExNjMgMTFDMTsKK0FFOUY7QUU5RjsxMTAxIDExNjMgMTFDMjtBRTlGOzExMDEgMTE2MyAxMUMyOworQUVBMDtBRUEwOzExMDEgMTE2NDtBRUEwOzExMDEgMTE2NDsKK0FFQTE7QUVBMTsxMTAxIDExNjQgMTFBODtBRUExOzExMDEgMTE2NCAxMUE4OworQUVBMjtBRUEyOzExMDEgMTE2NCAxMUE5O0FFQTI7MTEwMSAxMTY0IDExQTk7CitBRUEzO0FFQTM7MTEwMSAxMTY0IDExQUE7QUVBMzsxMTAxIDExNjQgMTFBQTsKK0FFQTQ7QUVBNDsxMTAxIDExNjQgMTFBQjtBRUE0OzExMDEgMTE2NCAxMUFCOworQUVBNTtBRUE1OzExMDEgMTE2NCAxMUFDO0FFQTU7MTEwMSAxMTY0IDExQUM7CitBRUE2O0FFQTY7MTEwMSAxMTY0IDExQUQ7QUVBNjsxMTAxIDExNjQgMTFBRDsKK0FFQTc7QUVBNzsxMTAxIDExNjQgMTFBRTtBRUE3OzExMDEgMTE2NCAxMUFFOworQUVBODtBRUE4OzExMDEgMTE2NCAxMUFGO0FFQTg7MTEwMSAxMTY0IDExQUY7CitBRUE5O0FFQTk7MTEwMSAxMTY0IDExQjA7QUVBOTsxMTAxIDExNjQgMTFCMDsKK0FFQUE7QUVBQTsxMTAxIDExNjQgMTFCMTtBRUFBOzExMDEgMTE2NCAxMUIxOworQUVBQjtBRUFCOzExMDEgMTE2NCAxMUIyO0FFQUI7MTEwMSAxMTY0IDExQjI7CitBRUFDO0FFQUM7MTEwMSAxMTY0IDExQjM7QUVBQzsxMTAxIDExNjQgMTFCMzsKK0FFQUQ7QUVBRDsxMTAxIDExNjQgMTFCNDtBRUFEOzExMDEgMTE2NCAxMUI0OworQUVBRTtBRUFFOzExMDEgMTE2NCAxMUI1O0FFQUU7MTEwMSAxMTY0IDExQjU7CitBRUFGO0FFQUY7MTEwMSAxMTY0IDExQjY7QUVBRjsxMTAxIDExNjQgMTFCNjsKK0FFQjA7QUVCMDsxMTAxIDExNjQgMTFCNztBRUIwOzExMDEgMTE2NCAxMUI3OworQUVCMTtBRUIxOzExMDEgMTE2NCAxMUI4O0FFQjE7MTEwMSAxMTY0IDExQjg7CitBRUIyO0FFQjI7MTEwMSAxMTY0IDExQjk7QUVCMjsxMTAxIDExNjQgMTFCOTsKK0FFQjM7QUVCMzsxMTAxIDExNjQgMTFCQTtBRUIzOzExMDEgMTE2NCAxMUJBOworQUVCNDtBRUI0OzExMDEgMTE2NCAxMUJCO0FFQjQ7MTEwMSAxMTY0IDExQkI7CitBRUI1O0FFQjU7MTEwMSAxMTY0IDExQkM7QUVCNTsxMTAxIDExNjQgMTFCQzsKK0FFQjY7QUVCNjsxMTAxIDExNjQgMTFCRDtBRUI2OzExMDEgMTE2NCAxMUJEOworQUVCNztBRUI3OzExMDEgMTE2NCAxMUJFO0FFQjc7MTEwMSAxMTY0IDExQkU7CitBRUI4O0FFQjg7MTEwMSAxMTY0IDExQkY7QUVCODsxMTAxIDExNjQgMTFCRjsKK0FFQjk7QUVCOTsxMTAxIDExNjQgMTFDMDtBRUI5OzExMDEgMTE2NCAxMUMwOworQUVCQTtBRUJBOzExMDEgMTE2NCAxMUMxO0FFQkE7MTEwMSAxMTY0IDExQzE7CitBRUJCO0FFQkI7MTEwMSAxMTY0IDExQzI7QUVCQjsxMTAxIDExNjQgMTFDMjsKK0FFQkM7QUVCQzsxMTAxIDExNjU7QUVCQzsxMTAxIDExNjU7CitBRUJEO0FFQkQ7MTEwMSAxMTY1IDExQTg7QUVCRDsxMTAxIDExNjUgMTFBODsKK0FFQkU7QUVCRTsxMTAxIDExNjUgMTFBOTtBRUJFOzExMDEgMTE2NSAxMUE5OworQUVCRjtBRUJGOzExMDEgMTE2NSAxMUFBO0FFQkY7MTEwMSAxMTY1IDExQUE7CitBRUMwO0FFQzA7MTEwMSAxMTY1IDExQUI7QUVDMDsxMTAxIDExNjUgMTFBQjsKK0FFQzE7QUVDMTsxMTAxIDExNjUgMTFBQztBRUMxOzExMDEgMTE2NSAxMUFDOworQUVDMjtBRUMyOzExMDEgMTE2NSAxMUFEO0FFQzI7MTEwMSAxMTY1IDExQUQ7CitBRUMzO0FFQzM7MTEwMSAxMTY1IDExQUU7QUVDMzsxMTAxIDExNjUgMTFBRTsKK0FFQzQ7QUVDNDsxMTAxIDExNjUgMTFBRjtBRUM0OzExMDEgMTE2NSAxMUFGOworQUVDNTtBRUM1OzExMDEgMTE2NSAxMUIwO0FFQzU7MTEwMSAxMTY1IDExQjA7CitBRUM2O0FFQzY7MTEwMSAxMTY1IDExQjE7QUVDNjsxMTAxIDExNjUgMTFCMTsKK0FFQzc7QUVDNzsxMTAxIDExNjUgMTFCMjtBRUM3OzExMDEgMTE2NSAxMUIyOworQUVDODtBRUM4OzExMDEgMTE2NSAxMUIzO0FFQzg7MTEwMSAxMTY1IDExQjM7CitBRUM5O0FFQzk7MTEwMSAxMTY1IDExQjQ7QUVDOTsxMTAxIDExNjUgMTFCNDsKK0FFQ0E7QUVDQTsxMTAxIDExNjUgMTFCNTtBRUNBOzExMDEgMTE2NSAxMUI1OworQUVDQjtBRUNCOzExMDEgMTE2NSAxMUI2O0FFQ0I7MTEwMSAxMTY1IDExQjY7CitBRUNDO0FFQ0M7MTEwMSAxMTY1IDExQjc7QUVDQzsxMTAxIDExNjUgMTFCNzsKK0FFQ0Q7QUVDRDsxMTAxIDExNjUgMTFCODtBRUNEOzExMDEgMTE2NSAxMUI4OworQUVDRTtBRUNFOzExMDEgMTE2NSAxMUI5O0FFQ0U7MTEwMSAxMTY1IDExQjk7CitBRUNGO0FFQ0Y7MTEwMSAxMTY1IDExQkE7QUVDRjsxMTAxIDExNjUgMTFCQTsKK0FFRDA7QUVEMDsxMTAxIDExNjUgMTFCQjtBRUQwOzExMDEgMTE2NSAxMUJCOworQUVEMTtBRUQxOzExMDEgMTE2NSAxMUJDO0FFRDE7MTEwMSAxMTY1IDExQkM7CitBRUQyO0FFRDI7MTEwMSAxMTY1IDExQkQ7QUVEMjsxMTAxIDExNjUgMTFCRDsKK0FFRDM7QUVEMzsxMTAxIDExNjUgMTFCRTtBRUQzOzExMDEgMTE2NSAxMUJFOworQUVENDtBRUQ0OzExMDEgMTE2NSAxMUJGO0FFRDQ7MTEwMSAxMTY1IDExQkY7CitBRUQ1O0FFRDU7MTEwMSAxMTY1IDExQzA7QUVENTsxMTAxIDExNjUgMTFDMDsKK0FFRDY7QUVENjsxMTAxIDExNjUgMTFDMTtBRUQ2OzExMDEgMTE2NSAxMUMxOworQUVENztBRUQ3OzExMDEgMTE2NSAxMUMyO0FFRDc7MTEwMSAxMTY1IDExQzI7CitBRUQ4O0FFRDg7MTEwMSAxMTY2O0FFRDg7MTEwMSAxMTY2OworQUVEOTtBRUQ5OzExMDEgMTE2NiAxMUE4O0FFRDk7MTEwMSAxMTY2IDExQTg7CitBRURBO0FFREE7MTEwMSAxMTY2IDExQTk7QUVEQTsxMTAxIDExNjYgMTFBOTsKK0FFREI7QUVEQjsxMTAxIDExNjYgMTFBQTtBRURCOzExMDEgMTE2NiAxMUFBOworQUVEQztBRURDOzExMDEgMTE2NiAxMUFCO0FFREM7MTEwMSAxMTY2IDExQUI7CitBRUREO0FFREQ7MTEwMSAxMTY2IDExQUM7QUVERDsxMTAxIDExNjYgMTFBQzsKK0FFREU7QUVERTsxMTAxIDExNjYgMTFBRDtBRURFOzExMDEgMTE2NiAxMUFEOworQUVERjtBRURGOzExMDEgMTE2NiAxMUFFO0FFREY7MTEwMSAxMTY2IDExQUU7CitBRUUwO0FFRTA7MTEwMSAxMTY2IDExQUY7QUVFMDsxMTAxIDExNjYgMTFBRjsKK0FFRTE7QUVFMTsxMTAxIDExNjYgMTFCMDtBRUUxOzExMDEgMTE2NiAxMUIwOworQUVFMjtBRUUyOzExMDEgMTE2NiAxMUIxO0FFRTI7MTEwMSAxMTY2IDExQjE7CitBRUUzO0FFRTM7MTEwMSAxMTY2IDExQjI7QUVFMzsxMTAxIDExNjYgMTFCMjsKK0FFRTQ7QUVFNDsxMTAxIDExNjYgMTFCMztBRUU0OzExMDEgMTE2NiAxMUIzOworQUVFNTtBRUU1OzExMDEgMTE2NiAxMUI0O0FFRTU7MTEwMSAxMTY2IDExQjQ7CitBRUU2O0FFRTY7MTEwMSAxMTY2IDExQjU7QUVFNjsxMTAxIDExNjYgMTFCNTsKK0FFRTc7QUVFNzsxMTAxIDExNjYgMTFCNjtBRUU3OzExMDEgMTE2NiAxMUI2OworQUVFODtBRUU4OzExMDEgMTE2NiAxMUI3O0FFRTg7MTEwMSAxMTY2IDExQjc7CitBRUU5O0FFRTk7MTEwMSAxMTY2IDExQjg7QUVFOTsxMTAxIDExNjYgMTFCODsKK0FFRUE7QUVFQTsxMTAxIDExNjYgMTFCOTtBRUVBOzExMDEgMTE2NiAxMUI5OworQUVFQjtBRUVCOzExMDEgMTE2NiAxMUJBO0FFRUI7MTEwMSAxMTY2IDExQkE7CitBRUVDO0FFRUM7MTEwMSAxMTY2IDExQkI7QUVFQzsxMTAxIDExNjYgMTFCQjsKK0FFRUQ7QUVFRDsxMTAxIDExNjYgMTFCQztBRUVEOzExMDEgMTE2NiAxMUJDOworQUVFRTtBRUVFOzExMDEgMTE2NiAxMUJEO0FFRUU7MTEwMSAxMTY2IDExQkQ7CitBRUVGO0FFRUY7MTEwMSAxMTY2IDExQkU7QUVFRjsxMTAxIDExNjYgMTFCRTsKK0FFRjA7QUVGMDsxMTAxIDExNjYgMTFCRjtBRUYwOzExMDEgMTE2NiAxMUJGOworQUVGMTtBRUYxOzExMDEgMTE2NiAxMUMwO0FFRjE7MTEwMSAxMTY2IDExQzA7CitBRUYyO0FFRjI7MTEwMSAxMTY2IDExQzE7QUVGMjsxMTAxIDExNjYgMTFDMTsKK0FFRjM7QUVGMzsxMTAxIDExNjYgMTFDMjtBRUYzOzExMDEgMTE2NiAxMUMyOworQUVGNDtBRUY0OzExMDEgMTE2NztBRUY0OzExMDEgMTE2NzsKK0FFRjU7QUVGNTsxMTAxIDExNjcgMTFBODtBRUY1OzExMDEgMTE2NyAxMUE4OworQUVGNjtBRUY2OzExMDEgMTE2NyAxMUE5O0FFRjY7MTEwMSAxMTY3IDExQTk7CitBRUY3O0FFRjc7MTEwMSAxMTY3IDExQUE7QUVGNzsxMTAxIDExNjcgMTFBQTsKK0FFRjg7QUVGODsxMTAxIDExNjcgMTFBQjtBRUY4OzExMDEgMTE2NyAxMUFCOworQUVGOTtBRUY5OzExMDEgMTE2NyAxMUFDO0FFRjk7MTEwMSAxMTY3IDExQUM7CitBRUZBO0FFRkE7MTEwMSAxMTY3IDExQUQ7QUVGQTsxMTAxIDExNjcgMTFBRDsKK0FFRkI7QUVGQjsxMTAxIDExNjcgMTFBRTtBRUZCOzExMDEgMTE2NyAxMUFFOworQUVGQztBRUZDOzExMDEgMTE2NyAxMUFGO0FFRkM7MTEwMSAxMTY3IDExQUY7CitBRUZEO0FFRkQ7MTEwMSAxMTY3IDExQjA7QUVGRDsxMTAxIDExNjcgMTFCMDsKK0FFRkU7QUVGRTsxMTAxIDExNjcgMTFCMTtBRUZFOzExMDEgMTE2NyAxMUIxOworQUVGRjtBRUZGOzExMDEgMTE2NyAxMUIyO0FFRkY7MTEwMSAxMTY3IDExQjI7CitBRjAwO0FGMDA7MTEwMSAxMTY3IDExQjM7QUYwMDsxMTAxIDExNjcgMTFCMzsKK0FGMDE7QUYwMTsxMTAxIDExNjcgMTFCNDtBRjAxOzExMDEgMTE2NyAxMUI0OworQUYwMjtBRjAyOzExMDEgMTE2NyAxMUI1O0FGMDI7MTEwMSAxMTY3IDExQjU7CitBRjAzO0FGMDM7MTEwMSAxMTY3IDExQjY7QUYwMzsxMTAxIDExNjcgMTFCNjsKK0FGMDQ7QUYwNDsxMTAxIDExNjcgMTFCNztBRjA0OzExMDEgMTE2NyAxMUI3OworQUYwNTtBRjA1OzExMDEgMTE2NyAxMUI4O0FGMDU7MTEwMSAxMTY3IDExQjg7CitBRjA2O0FGMDY7MTEwMSAxMTY3IDExQjk7QUYwNjsxMTAxIDExNjcgMTFCOTsKK0FGMDc7QUYwNzsxMTAxIDExNjcgMTFCQTtBRjA3OzExMDEgMTE2NyAxMUJBOworQUYwODtBRjA4OzExMDEgMTE2NyAxMUJCO0FGMDg7MTEwMSAxMTY3IDExQkI7CitBRjA5O0FGMDk7MTEwMSAxMTY3IDExQkM7QUYwOTsxMTAxIDExNjcgMTFCQzsKK0FGMEE7QUYwQTsxMTAxIDExNjcgMTFCRDtBRjBBOzExMDEgMTE2NyAxMUJEOworQUYwQjtBRjBCOzExMDEgMTE2NyAxMUJFO0FGMEI7MTEwMSAxMTY3IDExQkU7CitBRjBDO0FGMEM7MTEwMSAxMTY3IDExQkY7QUYwQzsxMTAxIDExNjcgMTFCRjsKK0FGMEQ7QUYwRDsxMTAxIDExNjcgMTFDMDtBRjBEOzExMDEgMTE2NyAxMUMwOworQUYwRTtBRjBFOzExMDEgMTE2NyAxMUMxO0FGMEU7MTEwMSAxMTY3IDExQzE7CitBRjBGO0FGMEY7MTEwMSAxMTY3IDExQzI7QUYwRjsxMTAxIDExNjcgMTFDMjsKK0FGMTA7QUYxMDsxMTAxIDExNjg7QUYxMDsxMTAxIDExNjg7CitBRjExO0FGMTE7MTEwMSAxMTY4IDExQTg7QUYxMTsxMTAxIDExNjggMTFBODsKK0FGMTI7QUYxMjsxMTAxIDExNjggMTFBOTtBRjEyOzExMDEgMTE2OCAxMUE5OworQUYxMztBRjEzOzExMDEgMTE2OCAxMUFBO0FGMTM7MTEwMSAxMTY4IDExQUE7CitBRjE0O0FGMTQ7MTEwMSAxMTY4IDExQUI7QUYxNDsxMTAxIDExNjggMTFBQjsKK0FGMTU7QUYxNTsxMTAxIDExNjggMTFBQztBRjE1OzExMDEgMTE2OCAxMUFDOworQUYxNjtBRjE2OzExMDEgMTE2OCAxMUFEO0FGMTY7MTEwMSAxMTY4IDExQUQ7CitBRjE3O0FGMTc7MTEwMSAxMTY4IDExQUU7QUYxNzsxMTAxIDExNjggMTFBRTsKK0FGMTg7QUYxODsxMTAxIDExNjggMTFBRjtBRjE4OzExMDEgMTE2OCAxMUFGOworQUYxOTtBRjE5OzExMDEgMTE2OCAxMUIwO0FGMTk7MTEwMSAxMTY4IDExQjA7CitBRjFBO0FGMUE7MTEwMSAxMTY4IDExQjE7QUYxQTsxMTAxIDExNjggMTFCMTsKK0FGMUI7QUYxQjsxMTAxIDExNjggMTFCMjtBRjFCOzExMDEgMTE2OCAxMUIyOworQUYxQztBRjFDOzExMDEgMTE2OCAxMUIzO0FGMUM7MTEwMSAxMTY4IDExQjM7CitBRjFEO0FGMUQ7MTEwMSAxMTY4IDExQjQ7QUYxRDsxMTAxIDExNjggMTFCNDsKK0FGMUU7QUYxRTsxMTAxIDExNjggMTFCNTtBRjFFOzExMDEgMTE2OCAxMUI1OworQUYxRjtBRjFGOzExMDEgMTE2OCAxMUI2O0FGMUY7MTEwMSAxMTY4IDExQjY7CitBRjIwO0FGMjA7MTEwMSAxMTY4IDExQjc7QUYyMDsxMTAxIDExNjggMTFCNzsKK0FGMjE7QUYyMTsxMTAxIDExNjggMTFCODtBRjIxOzExMDEgMTE2OCAxMUI4OworQUYyMjtBRjIyOzExMDEgMTE2OCAxMUI5O0FGMjI7MTEwMSAxMTY4IDExQjk7CitBRjIzO0FGMjM7MTEwMSAxMTY4IDExQkE7QUYyMzsxMTAxIDExNjggMTFCQTsKK0FGMjQ7QUYyNDsxMTAxIDExNjggMTFCQjtBRjI0OzExMDEgMTE2OCAxMUJCOworQUYyNTtBRjI1OzExMDEgMTE2OCAxMUJDO0FGMjU7MTEwMSAxMTY4IDExQkM7CitBRjI2O0FGMjY7MTEwMSAxMTY4IDExQkQ7QUYyNjsxMTAxIDExNjggMTFCRDsKK0FGMjc7QUYyNzsxMTAxIDExNjggMTFCRTtBRjI3OzExMDEgMTE2OCAxMUJFOworQUYyODtBRjI4OzExMDEgMTE2OCAxMUJGO0FGMjg7MTEwMSAxMTY4IDExQkY7CitBRjI5O0FGMjk7MTEwMSAxMTY4IDExQzA7QUYyOTsxMTAxIDExNjggMTFDMDsKK0FGMkE7QUYyQTsxMTAxIDExNjggMTFDMTtBRjJBOzExMDEgMTE2OCAxMUMxOworQUYyQjtBRjJCOzExMDEgMTE2OCAxMUMyO0FGMkI7MTEwMSAxMTY4IDExQzI7CitBRjJDO0FGMkM7MTEwMSAxMTY5O0FGMkM7MTEwMSAxMTY5OworQUYyRDtBRjJEOzExMDEgMTE2OSAxMUE4O0FGMkQ7MTEwMSAxMTY5IDExQTg7CitBRjJFO0FGMkU7MTEwMSAxMTY5IDExQTk7QUYyRTsxMTAxIDExNjkgMTFBOTsKK0FGMkY7QUYyRjsxMTAxIDExNjkgMTFBQTtBRjJGOzExMDEgMTE2OSAxMUFBOworQUYzMDtBRjMwOzExMDEgMTE2OSAxMUFCO0FGMzA7MTEwMSAxMTY5IDExQUI7CitBRjMxO0FGMzE7MTEwMSAxMTY5IDExQUM7QUYzMTsxMTAxIDExNjkgMTFBQzsKK0FGMzI7QUYzMjsxMTAxIDExNjkgMTFBRDtBRjMyOzExMDEgMTE2OSAxMUFEOworQUYzMztBRjMzOzExMDEgMTE2OSAxMUFFO0FGMzM7MTEwMSAxMTY5IDExQUU7CitBRjM0O0FGMzQ7MTEwMSAxMTY5IDExQUY7QUYzNDsxMTAxIDExNjkgMTFBRjsKK0FGMzU7QUYzNTsxMTAxIDExNjkgMTFCMDtBRjM1OzExMDEgMTE2OSAxMUIwOworQUYzNjtBRjM2OzExMDEgMTE2OSAxMUIxO0FGMzY7MTEwMSAxMTY5IDExQjE7CitBRjM3O0FGMzc7MTEwMSAxMTY5IDExQjI7QUYzNzsxMTAxIDExNjkgMTFCMjsKK0FGMzg7QUYzODsxMTAxIDExNjkgMTFCMztBRjM4OzExMDEgMTE2OSAxMUIzOworQUYzOTtBRjM5OzExMDEgMTE2OSAxMUI0O0FGMzk7MTEwMSAxMTY5IDExQjQ7CitBRjNBO0FGM0E7MTEwMSAxMTY5IDExQjU7QUYzQTsxMTAxIDExNjkgMTFCNTsKK0FGM0I7QUYzQjsxMTAxIDExNjkgMTFCNjtBRjNCOzExMDEgMTE2OSAxMUI2OworQUYzQztBRjNDOzExMDEgMTE2OSAxMUI3O0FGM0M7MTEwMSAxMTY5IDExQjc7CitBRjNEO0FGM0Q7MTEwMSAxMTY5IDExQjg7QUYzRDsxMTAxIDExNjkgMTFCODsKK0FGM0U7QUYzRTsxMTAxIDExNjkgMTFCOTtBRjNFOzExMDEgMTE2OSAxMUI5OworQUYzRjtBRjNGOzExMDEgMTE2OSAxMUJBO0FGM0Y7MTEwMSAxMTY5IDExQkE7CitBRjQwO0FGNDA7MTEwMSAxMTY5IDExQkI7QUY0MDsxMTAxIDExNjkgMTFCQjsKK0FGNDE7QUY0MTsxMTAxIDExNjkgMTFCQztBRjQxOzExMDEgMTE2OSAxMUJDOworQUY0MjtBRjQyOzExMDEgMTE2OSAxMUJEO0FGNDI7MTEwMSAxMTY5IDExQkQ7CitBRjQzO0FGNDM7MTEwMSAxMTY5IDExQkU7QUY0MzsxMTAxIDExNjkgMTFCRTsKK0FGNDQ7QUY0NDsxMTAxIDExNjkgMTFCRjtBRjQ0OzExMDEgMTE2OSAxMUJGOworQUY0NTtBRjQ1OzExMDEgMTE2OSAxMUMwO0FGNDU7MTEwMSAxMTY5IDExQzA7CitBRjQ2O0FGNDY7MTEwMSAxMTY5IDExQzE7QUY0NjsxMTAxIDExNjkgMTFDMTsKK0FGNDc7QUY0NzsxMTAxIDExNjkgMTFDMjtBRjQ3OzExMDEgMTE2OSAxMUMyOworQUY0ODtBRjQ4OzExMDEgMTE2QTtBRjQ4OzExMDEgMTE2QTsKK0FGNDk7QUY0OTsxMTAxIDExNkEgMTFBODtBRjQ5OzExMDEgMTE2QSAxMUE4OworQUY0QTtBRjRBOzExMDEgMTE2QSAxMUE5O0FGNEE7MTEwMSAxMTZBIDExQTk7CitBRjRCO0FGNEI7MTEwMSAxMTZBIDExQUE7QUY0QjsxMTAxIDExNkEgMTFBQTsKK0FGNEM7QUY0QzsxMTAxIDExNkEgMTFBQjtBRjRDOzExMDEgMTE2QSAxMUFCOworQUY0RDtBRjREOzExMDEgMTE2QSAxMUFDO0FGNEQ7MTEwMSAxMTZBIDExQUM7CitBRjRFO0FGNEU7MTEwMSAxMTZBIDExQUQ7QUY0RTsxMTAxIDExNkEgMTFBRDsKK0FGNEY7QUY0RjsxMTAxIDExNkEgMTFBRTtBRjRGOzExMDEgMTE2QSAxMUFFOworQUY1MDtBRjUwOzExMDEgMTE2QSAxMUFGO0FGNTA7MTEwMSAxMTZBIDExQUY7CitBRjUxO0FGNTE7MTEwMSAxMTZBIDExQjA7QUY1MTsxMTAxIDExNkEgMTFCMDsKK0FGNTI7QUY1MjsxMTAxIDExNkEgMTFCMTtBRjUyOzExMDEgMTE2QSAxMUIxOworQUY1MztBRjUzOzExMDEgMTE2QSAxMUIyO0FGNTM7MTEwMSAxMTZBIDExQjI7CitBRjU0O0FGNTQ7MTEwMSAxMTZBIDExQjM7QUY1NDsxMTAxIDExNkEgMTFCMzsKK0FGNTU7QUY1NTsxMTAxIDExNkEgMTFCNDtBRjU1OzExMDEgMTE2QSAxMUI0OworQUY1NjtBRjU2OzExMDEgMTE2QSAxMUI1O0FGNTY7MTEwMSAxMTZBIDExQjU7CitBRjU3O0FGNTc7MTEwMSAxMTZBIDExQjY7QUY1NzsxMTAxIDExNkEgMTFCNjsKK0FGNTg7QUY1ODsxMTAxIDExNkEgMTFCNztBRjU4OzExMDEgMTE2QSAxMUI3OworQUY1OTtBRjU5OzExMDEgMTE2QSAxMUI4O0FGNTk7MTEwMSAxMTZBIDExQjg7CitBRjVBO0FGNUE7MTEwMSAxMTZBIDExQjk7QUY1QTsxMTAxIDExNkEgMTFCOTsKK0FGNUI7QUY1QjsxMTAxIDExNkEgMTFCQTtBRjVCOzExMDEgMTE2QSAxMUJBOworQUY1QztBRjVDOzExMDEgMTE2QSAxMUJCO0FGNUM7MTEwMSAxMTZBIDExQkI7CitBRjVEO0FGNUQ7MTEwMSAxMTZBIDExQkM7QUY1RDsxMTAxIDExNkEgMTFCQzsKK0FGNUU7QUY1RTsxMTAxIDExNkEgMTFCRDtBRjVFOzExMDEgMTE2QSAxMUJEOworQUY1RjtBRjVGOzExMDEgMTE2QSAxMUJFO0FGNUY7MTEwMSAxMTZBIDExQkU7CitBRjYwO0FGNjA7MTEwMSAxMTZBIDExQkY7QUY2MDsxMTAxIDExNkEgMTFCRjsKK0FGNjE7QUY2MTsxMTAxIDExNkEgMTFDMDtBRjYxOzExMDEgMTE2QSAxMUMwOworQUY2MjtBRjYyOzExMDEgMTE2QSAxMUMxO0FGNjI7MTEwMSAxMTZBIDExQzE7CitBRjYzO0FGNjM7MTEwMSAxMTZBIDExQzI7QUY2MzsxMTAxIDExNkEgMTFDMjsKK0FGNjQ7QUY2NDsxMTAxIDExNkI7QUY2NDsxMTAxIDExNkI7CitBRjY1O0FGNjU7MTEwMSAxMTZCIDExQTg7QUY2NTsxMTAxIDExNkIgMTFBODsKK0FGNjY7QUY2NjsxMTAxIDExNkIgMTFBOTtBRjY2OzExMDEgMTE2QiAxMUE5OworQUY2NztBRjY3OzExMDEgMTE2QiAxMUFBO0FGNjc7MTEwMSAxMTZCIDExQUE7CitBRjY4O0FGNjg7MTEwMSAxMTZCIDExQUI7QUY2ODsxMTAxIDExNkIgMTFBQjsKK0FGNjk7QUY2OTsxMTAxIDExNkIgMTFBQztBRjY5OzExMDEgMTE2QiAxMUFDOworQUY2QTtBRjZBOzExMDEgMTE2QiAxMUFEO0FGNkE7MTEwMSAxMTZCIDExQUQ7CitBRjZCO0FGNkI7MTEwMSAxMTZCIDExQUU7QUY2QjsxMTAxIDExNkIgMTFBRTsKK0FGNkM7QUY2QzsxMTAxIDExNkIgMTFBRjtBRjZDOzExMDEgMTE2QiAxMUFGOworQUY2RDtBRjZEOzExMDEgMTE2QiAxMUIwO0FGNkQ7MTEwMSAxMTZCIDExQjA7CitBRjZFO0FGNkU7MTEwMSAxMTZCIDExQjE7QUY2RTsxMTAxIDExNkIgMTFCMTsKK0FGNkY7QUY2RjsxMTAxIDExNkIgMTFCMjtBRjZGOzExMDEgMTE2QiAxMUIyOworQUY3MDtBRjcwOzExMDEgMTE2QiAxMUIzO0FGNzA7MTEwMSAxMTZCIDExQjM7CitBRjcxO0FGNzE7MTEwMSAxMTZCIDExQjQ7QUY3MTsxMTAxIDExNkIgMTFCNDsKK0FGNzI7QUY3MjsxMTAxIDExNkIgMTFCNTtBRjcyOzExMDEgMTE2QiAxMUI1OworQUY3MztBRjczOzExMDEgMTE2QiAxMUI2O0FGNzM7MTEwMSAxMTZCIDExQjY7CitBRjc0O0FGNzQ7MTEwMSAxMTZCIDExQjc7QUY3NDsxMTAxIDExNkIgMTFCNzsKK0FGNzU7QUY3NTsxMTAxIDExNkIgMTFCODtBRjc1OzExMDEgMTE2QiAxMUI4OworQUY3NjtBRjc2OzExMDEgMTE2QiAxMUI5O0FGNzY7MTEwMSAxMTZCIDExQjk7CitBRjc3O0FGNzc7MTEwMSAxMTZCIDExQkE7QUY3NzsxMTAxIDExNkIgMTFCQTsKK0FGNzg7QUY3ODsxMTAxIDExNkIgMTFCQjtBRjc4OzExMDEgMTE2QiAxMUJCOworQUY3OTtBRjc5OzExMDEgMTE2QiAxMUJDO0FGNzk7MTEwMSAxMTZCIDExQkM7CitBRjdBO0FGN0E7MTEwMSAxMTZCIDExQkQ7QUY3QTsxMTAxIDExNkIgMTFCRDsKK0FGN0I7QUY3QjsxMTAxIDExNkIgMTFCRTtBRjdCOzExMDEgMTE2QiAxMUJFOworQUY3QztBRjdDOzExMDEgMTE2QiAxMUJGO0FGN0M7MTEwMSAxMTZCIDExQkY7CitBRjdEO0FGN0Q7MTEwMSAxMTZCIDExQzA7QUY3RDsxMTAxIDExNkIgMTFDMDsKK0FGN0U7QUY3RTsxMTAxIDExNkIgMTFDMTtBRjdFOzExMDEgMTE2QiAxMUMxOworQUY3RjtBRjdGOzExMDEgMTE2QiAxMUMyO0FGN0Y7MTEwMSAxMTZCIDExQzI7CitBRjgwO0FGODA7MTEwMSAxMTZDO0FGODA7MTEwMSAxMTZDOworQUY4MTtBRjgxOzExMDEgMTE2QyAxMUE4O0FGODE7MTEwMSAxMTZDIDExQTg7CitBRjgyO0FGODI7MTEwMSAxMTZDIDExQTk7QUY4MjsxMTAxIDExNkMgMTFBOTsKK0FGODM7QUY4MzsxMTAxIDExNkMgMTFBQTtBRjgzOzExMDEgMTE2QyAxMUFBOworQUY4NDtBRjg0OzExMDEgMTE2QyAxMUFCO0FGODQ7MTEwMSAxMTZDIDExQUI7CitBRjg1O0FGODU7MTEwMSAxMTZDIDExQUM7QUY4NTsxMTAxIDExNkMgMTFBQzsKK0FGODY7QUY4NjsxMTAxIDExNkMgMTFBRDtBRjg2OzExMDEgMTE2QyAxMUFEOworQUY4NztBRjg3OzExMDEgMTE2QyAxMUFFO0FGODc7MTEwMSAxMTZDIDExQUU7CitBRjg4O0FGODg7MTEwMSAxMTZDIDExQUY7QUY4ODsxMTAxIDExNkMgMTFBRjsKK0FGODk7QUY4OTsxMTAxIDExNkMgMTFCMDtBRjg5OzExMDEgMTE2QyAxMUIwOworQUY4QTtBRjhBOzExMDEgMTE2QyAxMUIxO0FGOEE7MTEwMSAxMTZDIDExQjE7CitBRjhCO0FGOEI7MTEwMSAxMTZDIDExQjI7QUY4QjsxMTAxIDExNkMgMTFCMjsKK0FGOEM7QUY4QzsxMTAxIDExNkMgMTFCMztBRjhDOzExMDEgMTE2QyAxMUIzOworQUY4RDtBRjhEOzExMDEgMTE2QyAxMUI0O0FGOEQ7MTEwMSAxMTZDIDExQjQ7CitBRjhFO0FGOEU7MTEwMSAxMTZDIDExQjU7QUY4RTsxMTAxIDExNkMgMTFCNTsKK0FGOEY7QUY4RjsxMTAxIDExNkMgMTFCNjtBRjhGOzExMDEgMTE2QyAxMUI2OworQUY5MDtBRjkwOzExMDEgMTE2QyAxMUI3O0FGOTA7MTEwMSAxMTZDIDExQjc7CitBRjkxO0FGOTE7MTEwMSAxMTZDIDExQjg7QUY5MTsxMTAxIDExNkMgMTFCODsKK0FGOTI7QUY5MjsxMTAxIDExNkMgMTFCOTtBRjkyOzExMDEgMTE2QyAxMUI5OworQUY5MztBRjkzOzExMDEgMTE2QyAxMUJBO0FGOTM7MTEwMSAxMTZDIDExQkE7CitBRjk0O0FGOTQ7MTEwMSAxMTZDIDExQkI7QUY5NDsxMTAxIDExNkMgMTFCQjsKK0FGOTU7QUY5NTsxMTAxIDExNkMgMTFCQztBRjk1OzExMDEgMTE2QyAxMUJDOworQUY5NjtBRjk2OzExMDEgMTE2QyAxMUJEO0FGOTY7MTEwMSAxMTZDIDExQkQ7CitBRjk3O0FGOTc7MTEwMSAxMTZDIDExQkU7QUY5NzsxMTAxIDExNkMgMTFCRTsKK0FGOTg7QUY5ODsxMTAxIDExNkMgMTFCRjtBRjk4OzExMDEgMTE2QyAxMUJGOworQUY5OTtBRjk5OzExMDEgMTE2QyAxMUMwO0FGOTk7MTEwMSAxMTZDIDExQzA7CitBRjlBO0FGOUE7MTEwMSAxMTZDIDExQzE7QUY5QTsxMTAxIDExNkMgMTFDMTsKK0FGOUI7QUY5QjsxMTAxIDExNkMgMTFDMjtBRjlCOzExMDEgMTE2QyAxMUMyOworQUY5QztBRjlDOzExMDEgMTE2RDtBRjlDOzExMDEgMTE2RDsKK0FGOUQ7QUY5RDsxMTAxIDExNkQgMTFBODtBRjlEOzExMDEgMTE2RCAxMUE4OworQUY5RTtBRjlFOzExMDEgMTE2RCAxMUE5O0FGOUU7MTEwMSAxMTZEIDExQTk7CitBRjlGO0FGOUY7MTEwMSAxMTZEIDExQUE7QUY5RjsxMTAxIDExNkQgMTFBQTsKK0FGQTA7QUZBMDsxMTAxIDExNkQgMTFBQjtBRkEwOzExMDEgMTE2RCAxMUFCOworQUZBMTtBRkExOzExMDEgMTE2RCAxMUFDO0FGQTE7MTEwMSAxMTZEIDExQUM7CitBRkEyO0FGQTI7MTEwMSAxMTZEIDExQUQ7QUZBMjsxMTAxIDExNkQgMTFBRDsKK0FGQTM7QUZBMzsxMTAxIDExNkQgMTFBRTtBRkEzOzExMDEgMTE2RCAxMUFFOworQUZBNDtBRkE0OzExMDEgMTE2RCAxMUFGO0FGQTQ7MTEwMSAxMTZEIDExQUY7CitBRkE1O0FGQTU7MTEwMSAxMTZEIDExQjA7QUZBNTsxMTAxIDExNkQgMTFCMDsKK0FGQTY7QUZBNjsxMTAxIDExNkQgMTFCMTtBRkE2OzExMDEgMTE2RCAxMUIxOworQUZBNztBRkE3OzExMDEgMTE2RCAxMUIyO0FGQTc7MTEwMSAxMTZEIDExQjI7CitBRkE4O0FGQTg7MTEwMSAxMTZEIDExQjM7QUZBODsxMTAxIDExNkQgMTFCMzsKK0FGQTk7QUZBOTsxMTAxIDExNkQgMTFCNDtBRkE5OzExMDEgMTE2RCAxMUI0OworQUZBQTtBRkFBOzExMDEgMTE2RCAxMUI1O0FGQUE7MTEwMSAxMTZEIDExQjU7CitBRkFCO0FGQUI7MTEwMSAxMTZEIDExQjY7QUZBQjsxMTAxIDExNkQgMTFCNjsKK0FGQUM7QUZBQzsxMTAxIDExNkQgMTFCNztBRkFDOzExMDEgMTE2RCAxMUI3OworQUZBRDtBRkFEOzExMDEgMTE2RCAxMUI4O0FGQUQ7MTEwMSAxMTZEIDExQjg7CitBRkFFO0FGQUU7MTEwMSAxMTZEIDExQjk7QUZBRTsxMTAxIDExNkQgMTFCOTsKK0FGQUY7QUZBRjsxMTAxIDExNkQgMTFCQTtBRkFGOzExMDEgMTE2RCAxMUJBOworQUZCMDtBRkIwOzExMDEgMTE2RCAxMUJCO0FGQjA7MTEwMSAxMTZEIDExQkI7CitBRkIxO0FGQjE7MTEwMSAxMTZEIDExQkM7QUZCMTsxMTAxIDExNkQgMTFCQzsKK0FGQjI7QUZCMjsxMTAxIDExNkQgMTFCRDtBRkIyOzExMDEgMTE2RCAxMUJEOworQUZCMztBRkIzOzExMDEgMTE2RCAxMUJFO0FGQjM7MTEwMSAxMTZEIDExQkU7CitBRkI0O0FGQjQ7MTEwMSAxMTZEIDExQkY7QUZCNDsxMTAxIDExNkQgMTFCRjsKK0FGQjU7QUZCNTsxMTAxIDExNkQgMTFDMDtBRkI1OzExMDEgMTE2RCAxMUMwOworQUZCNjtBRkI2OzExMDEgMTE2RCAxMUMxO0FGQjY7MTEwMSAxMTZEIDExQzE7CitBRkI3O0FGQjc7MTEwMSAxMTZEIDExQzI7QUZCNzsxMTAxIDExNkQgMTFDMjsKK0FGQjg7QUZCODsxMTAxIDExNkU7QUZCODsxMTAxIDExNkU7CitBRkI5O0FGQjk7MTEwMSAxMTZFIDExQTg7QUZCOTsxMTAxIDExNkUgMTFBODsKK0FGQkE7QUZCQTsxMTAxIDExNkUgMTFBOTtBRkJBOzExMDEgMTE2RSAxMUE5OworQUZCQjtBRkJCOzExMDEgMTE2RSAxMUFBO0FGQkI7MTEwMSAxMTZFIDExQUE7CitBRkJDO0FGQkM7MTEwMSAxMTZFIDExQUI7QUZCQzsxMTAxIDExNkUgMTFBQjsKK0FGQkQ7QUZCRDsxMTAxIDExNkUgMTFBQztBRkJEOzExMDEgMTE2RSAxMUFDOworQUZCRTtBRkJFOzExMDEgMTE2RSAxMUFEO0FGQkU7MTEwMSAxMTZFIDExQUQ7CitBRkJGO0FGQkY7MTEwMSAxMTZFIDExQUU7QUZCRjsxMTAxIDExNkUgMTFBRTsKK0FGQzA7QUZDMDsxMTAxIDExNkUgMTFBRjtBRkMwOzExMDEgMTE2RSAxMUFGOworQUZDMTtBRkMxOzExMDEgMTE2RSAxMUIwO0FGQzE7MTEwMSAxMTZFIDExQjA7CitBRkMyO0FGQzI7MTEwMSAxMTZFIDExQjE7QUZDMjsxMTAxIDExNkUgMTFCMTsKK0FGQzM7QUZDMzsxMTAxIDExNkUgMTFCMjtBRkMzOzExMDEgMTE2RSAxMUIyOworQUZDNDtBRkM0OzExMDEgMTE2RSAxMUIzO0FGQzQ7MTEwMSAxMTZFIDExQjM7CitBRkM1O0FGQzU7MTEwMSAxMTZFIDExQjQ7QUZDNTsxMTAxIDExNkUgMTFCNDsKK0FGQzY7QUZDNjsxMTAxIDExNkUgMTFCNTtBRkM2OzExMDEgMTE2RSAxMUI1OworQUZDNztBRkM3OzExMDEgMTE2RSAxMUI2O0FGQzc7MTEwMSAxMTZFIDExQjY7CitBRkM4O0FGQzg7MTEwMSAxMTZFIDExQjc7QUZDODsxMTAxIDExNkUgMTFCNzsKK0FGQzk7QUZDOTsxMTAxIDExNkUgMTFCODtBRkM5OzExMDEgMTE2RSAxMUI4OworQUZDQTtBRkNBOzExMDEgMTE2RSAxMUI5O0FGQ0E7MTEwMSAxMTZFIDExQjk7CitBRkNCO0FGQ0I7MTEwMSAxMTZFIDExQkE7QUZDQjsxMTAxIDExNkUgMTFCQTsKK0FGQ0M7QUZDQzsxMTAxIDExNkUgMTFCQjtBRkNDOzExMDEgMTE2RSAxMUJCOworQUZDRDtBRkNEOzExMDEgMTE2RSAxMUJDO0FGQ0Q7MTEwMSAxMTZFIDExQkM7CitBRkNFO0FGQ0U7MTEwMSAxMTZFIDExQkQ7QUZDRTsxMTAxIDExNkUgMTFCRDsKK0FGQ0Y7QUZDRjsxMTAxIDExNkUgMTFCRTtBRkNGOzExMDEgMTE2RSAxMUJFOworQUZEMDtBRkQwOzExMDEgMTE2RSAxMUJGO0FGRDA7MTEwMSAxMTZFIDExQkY7CitBRkQxO0FGRDE7MTEwMSAxMTZFIDExQzA7QUZEMTsxMTAxIDExNkUgMTFDMDsKK0FGRDI7QUZEMjsxMTAxIDExNkUgMTFDMTtBRkQyOzExMDEgMTE2RSAxMUMxOworQUZEMztBRkQzOzExMDEgMTE2RSAxMUMyO0FGRDM7MTEwMSAxMTZFIDExQzI7CitBRkQ0O0FGRDQ7MTEwMSAxMTZGO0FGRDQ7MTEwMSAxMTZGOworQUZENTtBRkQ1OzExMDEgMTE2RiAxMUE4O0FGRDU7MTEwMSAxMTZGIDExQTg7CitBRkQ2O0FGRDY7MTEwMSAxMTZGIDExQTk7QUZENjsxMTAxIDExNkYgMTFBOTsKK0FGRDc7QUZENzsxMTAxIDExNkYgMTFBQTtBRkQ3OzExMDEgMTE2RiAxMUFBOworQUZEODtBRkQ4OzExMDEgMTE2RiAxMUFCO0FGRDg7MTEwMSAxMTZGIDExQUI7CitBRkQ5O0FGRDk7MTEwMSAxMTZGIDExQUM7QUZEOTsxMTAxIDExNkYgMTFBQzsKK0FGREE7QUZEQTsxMTAxIDExNkYgMTFBRDtBRkRBOzExMDEgMTE2RiAxMUFEOworQUZEQjtBRkRCOzExMDEgMTE2RiAxMUFFO0FGREI7MTEwMSAxMTZGIDExQUU7CitBRkRDO0FGREM7MTEwMSAxMTZGIDExQUY7QUZEQzsxMTAxIDExNkYgMTFBRjsKK0FGREQ7QUZERDsxMTAxIDExNkYgMTFCMDtBRkREOzExMDEgMTE2RiAxMUIwOworQUZERTtBRkRFOzExMDEgMTE2RiAxMUIxO0FGREU7MTEwMSAxMTZGIDExQjE7CitBRkRGO0FGREY7MTEwMSAxMTZGIDExQjI7QUZERjsxMTAxIDExNkYgMTFCMjsKK0FGRTA7QUZFMDsxMTAxIDExNkYgMTFCMztBRkUwOzExMDEgMTE2RiAxMUIzOworQUZFMTtBRkUxOzExMDEgMTE2RiAxMUI0O0FGRTE7MTEwMSAxMTZGIDExQjQ7CitBRkUyO0FGRTI7MTEwMSAxMTZGIDExQjU7QUZFMjsxMTAxIDExNkYgMTFCNTsKK0FGRTM7QUZFMzsxMTAxIDExNkYgMTFCNjtBRkUzOzExMDEgMTE2RiAxMUI2OworQUZFNDtBRkU0OzExMDEgMTE2RiAxMUI3O0FGRTQ7MTEwMSAxMTZGIDExQjc7CitBRkU1O0FGRTU7MTEwMSAxMTZGIDExQjg7QUZFNTsxMTAxIDExNkYgMTFCODsKK0FGRTY7QUZFNjsxMTAxIDExNkYgMTFCOTtBRkU2OzExMDEgMTE2RiAxMUI5OworQUZFNztBRkU3OzExMDEgMTE2RiAxMUJBO0FGRTc7MTEwMSAxMTZGIDExQkE7CitBRkU4O0FGRTg7MTEwMSAxMTZGIDExQkI7QUZFODsxMTAxIDExNkYgMTFCQjsKK0FGRTk7QUZFOTsxMTAxIDExNkYgMTFCQztBRkU5OzExMDEgMTE2RiAxMUJDOworQUZFQTtBRkVBOzExMDEgMTE2RiAxMUJEO0FGRUE7MTEwMSAxMTZGIDExQkQ7CitBRkVCO0FGRUI7MTEwMSAxMTZGIDExQkU7QUZFQjsxMTAxIDExNkYgMTFCRTsKK0FGRUM7QUZFQzsxMTAxIDExNkYgMTFCRjtBRkVDOzExMDEgMTE2RiAxMUJGOworQUZFRDtBRkVEOzExMDEgMTE2RiAxMUMwO0FGRUQ7MTEwMSAxMTZGIDExQzA7CitBRkVFO0FGRUU7MTEwMSAxMTZGIDExQzE7QUZFRTsxMTAxIDExNkYgMTFDMTsKK0FGRUY7QUZFRjsxMTAxIDExNkYgMTFDMjtBRkVGOzExMDEgMTE2RiAxMUMyOworQUZGMDtBRkYwOzExMDEgMTE3MDtBRkYwOzExMDEgMTE3MDsKK0FGRjE7QUZGMTsxMTAxIDExNzAgMTFBODtBRkYxOzExMDEgMTE3MCAxMUE4OworQUZGMjtBRkYyOzExMDEgMTE3MCAxMUE5O0FGRjI7MTEwMSAxMTcwIDExQTk7CitBRkYzO0FGRjM7MTEwMSAxMTcwIDExQUE7QUZGMzsxMTAxIDExNzAgMTFBQTsKK0FGRjQ7QUZGNDsxMTAxIDExNzAgMTFBQjtBRkY0OzExMDEgMTE3MCAxMUFCOworQUZGNTtBRkY1OzExMDEgMTE3MCAxMUFDO0FGRjU7MTEwMSAxMTcwIDExQUM7CitBRkY2O0FGRjY7MTEwMSAxMTcwIDExQUQ7QUZGNjsxMTAxIDExNzAgMTFBRDsKK0FGRjc7QUZGNzsxMTAxIDExNzAgMTFBRTtBRkY3OzExMDEgMTE3MCAxMUFFOworQUZGODtBRkY4OzExMDEgMTE3MCAxMUFGO0FGRjg7MTEwMSAxMTcwIDExQUY7CitBRkY5O0FGRjk7MTEwMSAxMTcwIDExQjA7QUZGOTsxMTAxIDExNzAgMTFCMDsKK0FGRkE7QUZGQTsxMTAxIDExNzAgMTFCMTtBRkZBOzExMDEgMTE3MCAxMUIxOworQUZGQjtBRkZCOzExMDEgMTE3MCAxMUIyO0FGRkI7MTEwMSAxMTcwIDExQjI7CitBRkZDO0FGRkM7MTEwMSAxMTcwIDExQjM7QUZGQzsxMTAxIDExNzAgMTFCMzsKK0FGRkQ7QUZGRDsxMTAxIDExNzAgMTFCNDtBRkZEOzExMDEgMTE3MCAxMUI0OworQUZGRTtBRkZFOzExMDEgMTE3MCAxMUI1O0FGRkU7MTEwMSAxMTcwIDExQjU7CitBRkZGO0FGRkY7MTEwMSAxMTcwIDExQjY7QUZGRjsxMTAxIDExNzAgMTFCNjsKK0IwMDA7QjAwMDsxMTAxIDExNzAgMTFCNztCMDAwOzExMDEgMTE3MCAxMUI3OworQjAwMTtCMDAxOzExMDEgMTE3MCAxMUI4O0IwMDE7MTEwMSAxMTcwIDExQjg7CitCMDAyO0IwMDI7MTEwMSAxMTcwIDExQjk7QjAwMjsxMTAxIDExNzAgMTFCOTsKK0IwMDM7QjAwMzsxMTAxIDExNzAgMTFCQTtCMDAzOzExMDEgMTE3MCAxMUJBOworQjAwNDtCMDA0OzExMDEgMTE3MCAxMUJCO0IwMDQ7MTEwMSAxMTcwIDExQkI7CitCMDA1O0IwMDU7MTEwMSAxMTcwIDExQkM7QjAwNTsxMTAxIDExNzAgMTFCQzsKK0IwMDY7QjAwNjsxMTAxIDExNzAgMTFCRDtCMDA2OzExMDEgMTE3MCAxMUJEOworQjAwNztCMDA3OzExMDEgMTE3MCAxMUJFO0IwMDc7MTEwMSAxMTcwIDExQkU7CitCMDA4O0IwMDg7MTEwMSAxMTcwIDExQkY7QjAwODsxMTAxIDExNzAgMTFCRjsKK0IwMDk7QjAwOTsxMTAxIDExNzAgMTFDMDtCMDA5OzExMDEgMTE3MCAxMUMwOworQjAwQTtCMDBBOzExMDEgMTE3MCAxMUMxO0IwMEE7MTEwMSAxMTcwIDExQzE7CitCMDBCO0IwMEI7MTEwMSAxMTcwIDExQzI7QjAwQjsxMTAxIDExNzAgMTFDMjsKK0IwMEM7QjAwQzsxMTAxIDExNzE7QjAwQzsxMTAxIDExNzE7CitCMDBEO0IwMEQ7MTEwMSAxMTcxIDExQTg7QjAwRDsxMTAxIDExNzEgMTFBODsKK0IwMEU7QjAwRTsxMTAxIDExNzEgMTFBOTtCMDBFOzExMDEgMTE3MSAxMUE5OworQjAwRjtCMDBGOzExMDEgMTE3MSAxMUFBO0IwMEY7MTEwMSAxMTcxIDExQUE7CitCMDEwO0IwMTA7MTEwMSAxMTcxIDExQUI7QjAxMDsxMTAxIDExNzEgMTFBQjsKK0IwMTE7QjAxMTsxMTAxIDExNzEgMTFBQztCMDExOzExMDEgMTE3MSAxMUFDOworQjAxMjtCMDEyOzExMDEgMTE3MSAxMUFEO0IwMTI7MTEwMSAxMTcxIDExQUQ7CitCMDEzO0IwMTM7MTEwMSAxMTcxIDExQUU7QjAxMzsxMTAxIDExNzEgMTFBRTsKK0IwMTQ7QjAxNDsxMTAxIDExNzEgMTFBRjtCMDE0OzExMDEgMTE3MSAxMUFGOworQjAxNTtCMDE1OzExMDEgMTE3MSAxMUIwO0IwMTU7MTEwMSAxMTcxIDExQjA7CitCMDE2O0IwMTY7MTEwMSAxMTcxIDExQjE7QjAxNjsxMTAxIDExNzEgMTFCMTsKK0IwMTc7QjAxNzsxMTAxIDExNzEgMTFCMjtCMDE3OzExMDEgMTE3MSAxMUIyOworQjAxODtCMDE4OzExMDEgMTE3MSAxMUIzO0IwMTg7MTEwMSAxMTcxIDExQjM7CitCMDE5O0IwMTk7MTEwMSAxMTcxIDExQjQ7QjAxOTsxMTAxIDExNzEgMTFCNDsKK0IwMUE7QjAxQTsxMTAxIDExNzEgMTFCNTtCMDFBOzExMDEgMTE3MSAxMUI1OworQjAxQjtCMDFCOzExMDEgMTE3MSAxMUI2O0IwMUI7MTEwMSAxMTcxIDExQjY7CitCMDFDO0IwMUM7MTEwMSAxMTcxIDExQjc7QjAxQzsxMTAxIDExNzEgMTFCNzsKK0IwMUQ7QjAxRDsxMTAxIDExNzEgMTFCODtCMDFEOzExMDEgMTE3MSAxMUI4OworQjAxRTtCMDFFOzExMDEgMTE3MSAxMUI5O0IwMUU7MTEwMSAxMTcxIDExQjk7CitCMDFGO0IwMUY7MTEwMSAxMTcxIDExQkE7QjAxRjsxMTAxIDExNzEgMTFCQTsKK0IwMjA7QjAyMDsxMTAxIDExNzEgMTFCQjtCMDIwOzExMDEgMTE3MSAxMUJCOworQjAyMTtCMDIxOzExMDEgMTE3MSAxMUJDO0IwMjE7MTEwMSAxMTcxIDExQkM7CitCMDIyO0IwMjI7MTEwMSAxMTcxIDExQkQ7QjAyMjsxMTAxIDExNzEgMTFCRDsKK0IwMjM7QjAyMzsxMTAxIDExNzEgMTFCRTtCMDIzOzExMDEgMTE3MSAxMUJFOworQjAyNDtCMDI0OzExMDEgMTE3MSAxMUJGO0IwMjQ7MTEwMSAxMTcxIDExQkY7CitCMDI1O0IwMjU7MTEwMSAxMTcxIDExQzA7QjAyNTsxMTAxIDExNzEgMTFDMDsKK0IwMjY7QjAyNjsxMTAxIDExNzEgMTFDMTtCMDI2OzExMDEgMTE3MSAxMUMxOworQjAyNztCMDI3OzExMDEgMTE3MSAxMUMyO0IwMjc7MTEwMSAxMTcxIDExQzI7CitCMDI4O0IwMjg7MTEwMSAxMTcyO0IwMjg7MTEwMSAxMTcyOworQjAyOTtCMDI5OzExMDEgMTE3MiAxMUE4O0IwMjk7MTEwMSAxMTcyIDExQTg7CitCMDJBO0IwMkE7MTEwMSAxMTcyIDExQTk7QjAyQTsxMTAxIDExNzIgMTFBOTsKK0IwMkI7QjAyQjsxMTAxIDExNzIgMTFBQTtCMDJCOzExMDEgMTE3MiAxMUFBOworQjAyQztCMDJDOzExMDEgMTE3MiAxMUFCO0IwMkM7MTEwMSAxMTcyIDExQUI7CitCMDJEO0IwMkQ7MTEwMSAxMTcyIDExQUM7QjAyRDsxMTAxIDExNzIgMTFBQzsKK0IwMkU7QjAyRTsxMTAxIDExNzIgMTFBRDtCMDJFOzExMDEgMTE3MiAxMUFEOworQjAyRjtCMDJGOzExMDEgMTE3MiAxMUFFO0IwMkY7MTEwMSAxMTcyIDExQUU7CitCMDMwO0IwMzA7MTEwMSAxMTcyIDExQUY7QjAzMDsxMTAxIDExNzIgMTFBRjsKK0IwMzE7QjAzMTsxMTAxIDExNzIgMTFCMDtCMDMxOzExMDEgMTE3MiAxMUIwOworQjAzMjtCMDMyOzExMDEgMTE3MiAxMUIxO0IwMzI7MTEwMSAxMTcyIDExQjE7CitCMDMzO0IwMzM7MTEwMSAxMTcyIDExQjI7QjAzMzsxMTAxIDExNzIgMTFCMjsKK0IwMzQ7QjAzNDsxMTAxIDExNzIgMTFCMztCMDM0OzExMDEgMTE3MiAxMUIzOworQjAzNTtCMDM1OzExMDEgMTE3MiAxMUI0O0IwMzU7MTEwMSAxMTcyIDExQjQ7CitCMDM2O0IwMzY7MTEwMSAxMTcyIDExQjU7QjAzNjsxMTAxIDExNzIgMTFCNTsKK0IwMzc7QjAzNzsxMTAxIDExNzIgMTFCNjtCMDM3OzExMDEgMTE3MiAxMUI2OworQjAzODtCMDM4OzExMDEgMTE3MiAxMUI3O0IwMzg7MTEwMSAxMTcyIDExQjc7CitCMDM5O0IwMzk7MTEwMSAxMTcyIDExQjg7QjAzOTsxMTAxIDExNzIgMTFCODsKK0IwM0E7QjAzQTsxMTAxIDExNzIgMTFCOTtCMDNBOzExMDEgMTE3MiAxMUI5OworQjAzQjtCMDNCOzExMDEgMTE3MiAxMUJBO0IwM0I7MTEwMSAxMTcyIDExQkE7CitCMDNDO0IwM0M7MTEwMSAxMTcyIDExQkI7QjAzQzsxMTAxIDExNzIgMTFCQjsKK0IwM0Q7QjAzRDsxMTAxIDExNzIgMTFCQztCMDNEOzExMDEgMTE3MiAxMUJDOworQjAzRTtCMDNFOzExMDEgMTE3MiAxMUJEO0IwM0U7MTEwMSAxMTcyIDExQkQ7CitCMDNGO0IwM0Y7MTEwMSAxMTcyIDExQkU7QjAzRjsxMTAxIDExNzIgMTFCRTsKK0IwNDA7QjA0MDsxMTAxIDExNzIgMTFCRjtCMDQwOzExMDEgMTE3MiAxMUJGOworQjA0MTtCMDQxOzExMDEgMTE3MiAxMUMwO0IwNDE7MTEwMSAxMTcyIDExQzA7CitCMDQyO0IwNDI7MTEwMSAxMTcyIDExQzE7QjA0MjsxMTAxIDExNzIgMTFDMTsKK0IwNDM7QjA0MzsxMTAxIDExNzIgMTFDMjtCMDQzOzExMDEgMTE3MiAxMUMyOworQjA0NDtCMDQ0OzExMDEgMTE3MztCMDQ0OzExMDEgMTE3MzsKK0IwNDU7QjA0NTsxMTAxIDExNzMgMTFBODtCMDQ1OzExMDEgMTE3MyAxMUE4OworQjA0NjtCMDQ2OzExMDEgMTE3MyAxMUE5O0IwNDY7MTEwMSAxMTczIDExQTk7CitCMDQ3O0IwNDc7MTEwMSAxMTczIDExQUE7QjA0NzsxMTAxIDExNzMgMTFBQTsKK0IwNDg7QjA0ODsxMTAxIDExNzMgMTFBQjtCMDQ4OzExMDEgMTE3MyAxMUFCOworQjA0OTtCMDQ5OzExMDEgMTE3MyAxMUFDO0IwNDk7MTEwMSAxMTczIDExQUM7CitCMDRBO0IwNEE7MTEwMSAxMTczIDExQUQ7QjA0QTsxMTAxIDExNzMgMTFBRDsKK0IwNEI7QjA0QjsxMTAxIDExNzMgMTFBRTtCMDRCOzExMDEgMTE3MyAxMUFFOworQjA0QztCMDRDOzExMDEgMTE3MyAxMUFGO0IwNEM7MTEwMSAxMTczIDExQUY7CitCMDREO0IwNEQ7MTEwMSAxMTczIDExQjA7QjA0RDsxMTAxIDExNzMgMTFCMDsKK0IwNEU7QjA0RTsxMTAxIDExNzMgMTFCMTtCMDRFOzExMDEgMTE3MyAxMUIxOworQjA0RjtCMDRGOzExMDEgMTE3MyAxMUIyO0IwNEY7MTEwMSAxMTczIDExQjI7CitCMDUwO0IwNTA7MTEwMSAxMTczIDExQjM7QjA1MDsxMTAxIDExNzMgMTFCMzsKK0IwNTE7QjA1MTsxMTAxIDExNzMgMTFCNDtCMDUxOzExMDEgMTE3MyAxMUI0OworQjA1MjtCMDUyOzExMDEgMTE3MyAxMUI1O0IwNTI7MTEwMSAxMTczIDExQjU7CitCMDUzO0IwNTM7MTEwMSAxMTczIDExQjY7QjA1MzsxMTAxIDExNzMgMTFCNjsKK0IwNTQ7QjA1NDsxMTAxIDExNzMgMTFCNztCMDU0OzExMDEgMTE3MyAxMUI3OworQjA1NTtCMDU1OzExMDEgMTE3MyAxMUI4O0IwNTU7MTEwMSAxMTczIDExQjg7CitCMDU2O0IwNTY7MTEwMSAxMTczIDExQjk7QjA1NjsxMTAxIDExNzMgMTFCOTsKK0IwNTc7QjA1NzsxMTAxIDExNzMgMTFCQTtCMDU3OzExMDEgMTE3MyAxMUJBOworQjA1ODtCMDU4OzExMDEgMTE3MyAxMUJCO0IwNTg7MTEwMSAxMTczIDExQkI7CitCMDU5O0IwNTk7MTEwMSAxMTczIDExQkM7QjA1OTsxMTAxIDExNzMgMTFCQzsKK0IwNUE7QjA1QTsxMTAxIDExNzMgMTFCRDtCMDVBOzExMDEgMTE3MyAxMUJEOworQjA1QjtCMDVCOzExMDEgMTE3MyAxMUJFO0IwNUI7MTEwMSAxMTczIDExQkU7CitCMDVDO0IwNUM7MTEwMSAxMTczIDExQkY7QjA1QzsxMTAxIDExNzMgMTFCRjsKK0IwNUQ7QjA1RDsxMTAxIDExNzMgMTFDMDtCMDVEOzExMDEgMTE3MyAxMUMwOworQjA1RTtCMDVFOzExMDEgMTE3MyAxMUMxO0IwNUU7MTEwMSAxMTczIDExQzE7CitCMDVGO0IwNUY7MTEwMSAxMTczIDExQzI7QjA1RjsxMTAxIDExNzMgMTFDMjsKK0IwNjA7QjA2MDsxMTAxIDExNzQ7QjA2MDsxMTAxIDExNzQ7CitCMDYxO0IwNjE7MTEwMSAxMTc0IDExQTg7QjA2MTsxMTAxIDExNzQgMTFBODsKK0IwNjI7QjA2MjsxMTAxIDExNzQgMTFBOTtCMDYyOzExMDEgMTE3NCAxMUE5OworQjA2MztCMDYzOzExMDEgMTE3NCAxMUFBO0IwNjM7MTEwMSAxMTc0IDExQUE7CitCMDY0O0IwNjQ7MTEwMSAxMTc0IDExQUI7QjA2NDsxMTAxIDExNzQgMTFBQjsKK0IwNjU7QjA2NTsxMTAxIDExNzQgMTFBQztCMDY1OzExMDEgMTE3NCAxMUFDOworQjA2NjtCMDY2OzExMDEgMTE3NCAxMUFEO0IwNjY7MTEwMSAxMTc0IDExQUQ7CitCMDY3O0IwNjc7MTEwMSAxMTc0IDExQUU7QjA2NzsxMTAxIDExNzQgMTFBRTsKK0IwNjg7QjA2ODsxMTAxIDExNzQgMTFBRjtCMDY4OzExMDEgMTE3NCAxMUFGOworQjA2OTtCMDY5OzExMDEgMTE3NCAxMUIwO0IwNjk7MTEwMSAxMTc0IDExQjA7CitCMDZBO0IwNkE7MTEwMSAxMTc0IDExQjE7QjA2QTsxMTAxIDExNzQgMTFCMTsKK0IwNkI7QjA2QjsxMTAxIDExNzQgMTFCMjtCMDZCOzExMDEgMTE3NCAxMUIyOworQjA2QztCMDZDOzExMDEgMTE3NCAxMUIzO0IwNkM7MTEwMSAxMTc0IDExQjM7CitCMDZEO0IwNkQ7MTEwMSAxMTc0IDExQjQ7QjA2RDsxMTAxIDExNzQgMTFCNDsKK0IwNkU7QjA2RTsxMTAxIDExNzQgMTFCNTtCMDZFOzExMDEgMTE3NCAxMUI1OworQjA2RjtCMDZGOzExMDEgMTE3NCAxMUI2O0IwNkY7MTEwMSAxMTc0IDExQjY7CitCMDcwO0IwNzA7MTEwMSAxMTc0IDExQjc7QjA3MDsxMTAxIDExNzQgMTFCNzsKK0IwNzE7QjA3MTsxMTAxIDExNzQgMTFCODtCMDcxOzExMDEgMTE3NCAxMUI4OworQjA3MjtCMDcyOzExMDEgMTE3NCAxMUI5O0IwNzI7MTEwMSAxMTc0IDExQjk7CitCMDczO0IwNzM7MTEwMSAxMTc0IDExQkE7QjA3MzsxMTAxIDExNzQgMTFCQTsKK0IwNzQ7QjA3NDsxMTAxIDExNzQgMTFCQjtCMDc0OzExMDEgMTE3NCAxMUJCOworQjA3NTtCMDc1OzExMDEgMTE3NCAxMUJDO0IwNzU7MTEwMSAxMTc0IDExQkM7CitCMDc2O0IwNzY7MTEwMSAxMTc0IDExQkQ7QjA3NjsxMTAxIDExNzQgMTFCRDsKK0IwNzc7QjA3NzsxMTAxIDExNzQgMTFCRTtCMDc3OzExMDEgMTE3NCAxMUJFOworQjA3ODtCMDc4OzExMDEgMTE3NCAxMUJGO0IwNzg7MTEwMSAxMTc0IDExQkY7CitCMDc5O0IwNzk7MTEwMSAxMTc0IDExQzA7QjA3OTsxMTAxIDExNzQgMTFDMDsKK0IwN0E7QjA3QTsxMTAxIDExNzQgMTFDMTtCMDdBOzExMDEgMTE3NCAxMUMxOworQjA3QjtCMDdCOzExMDEgMTE3NCAxMUMyO0IwN0I7MTEwMSAxMTc0IDExQzI7CitCMDdDO0IwN0M7MTEwMSAxMTc1O0IwN0M7MTEwMSAxMTc1OworQjA3RDtCMDdEOzExMDEgMTE3NSAxMUE4O0IwN0Q7MTEwMSAxMTc1IDExQTg7CitCMDdFO0IwN0U7MTEwMSAxMTc1IDExQTk7QjA3RTsxMTAxIDExNzUgMTFBOTsKK0IwN0Y7QjA3RjsxMTAxIDExNzUgMTFBQTtCMDdGOzExMDEgMTE3NSAxMUFBOworQjA4MDtCMDgwOzExMDEgMTE3NSAxMUFCO0IwODA7MTEwMSAxMTc1IDExQUI7CitCMDgxO0IwODE7MTEwMSAxMTc1IDExQUM7QjA4MTsxMTAxIDExNzUgMTFBQzsKK0IwODI7QjA4MjsxMTAxIDExNzUgMTFBRDtCMDgyOzExMDEgMTE3NSAxMUFEOworQjA4MztCMDgzOzExMDEgMTE3NSAxMUFFO0IwODM7MTEwMSAxMTc1IDExQUU7CitCMDg0O0IwODQ7MTEwMSAxMTc1IDExQUY7QjA4NDsxMTAxIDExNzUgMTFBRjsKK0IwODU7QjA4NTsxMTAxIDExNzUgMTFCMDtCMDg1OzExMDEgMTE3NSAxMUIwOworQjA4NjtCMDg2OzExMDEgMTE3NSAxMUIxO0IwODY7MTEwMSAxMTc1IDExQjE7CitCMDg3O0IwODc7MTEwMSAxMTc1IDExQjI7QjA4NzsxMTAxIDExNzUgMTFCMjsKK0IwODg7QjA4ODsxMTAxIDExNzUgMTFCMztCMDg4OzExMDEgMTE3NSAxMUIzOworQjA4OTtCMDg5OzExMDEgMTE3NSAxMUI0O0IwODk7MTEwMSAxMTc1IDExQjQ7CitCMDhBO0IwOEE7MTEwMSAxMTc1IDExQjU7QjA4QTsxMTAxIDExNzUgMTFCNTsKK0IwOEI7QjA4QjsxMTAxIDExNzUgMTFCNjtCMDhCOzExMDEgMTE3NSAxMUI2OworQjA4QztCMDhDOzExMDEgMTE3NSAxMUI3O0IwOEM7MTEwMSAxMTc1IDExQjc7CitCMDhEO0IwOEQ7MTEwMSAxMTc1IDExQjg7QjA4RDsxMTAxIDExNzUgMTFCODsKK0IwOEU7QjA4RTsxMTAxIDExNzUgMTFCOTtCMDhFOzExMDEgMTE3NSAxMUI5OworQjA4RjtCMDhGOzExMDEgMTE3NSAxMUJBO0IwOEY7MTEwMSAxMTc1IDExQkE7CitCMDkwO0IwOTA7MTEwMSAxMTc1IDExQkI7QjA5MDsxMTAxIDExNzUgMTFCQjsKK0IwOTE7QjA5MTsxMTAxIDExNzUgMTFCQztCMDkxOzExMDEgMTE3NSAxMUJDOworQjA5MjtCMDkyOzExMDEgMTE3NSAxMUJEO0IwOTI7MTEwMSAxMTc1IDExQkQ7CitCMDkzO0IwOTM7MTEwMSAxMTc1IDExQkU7QjA5MzsxMTAxIDExNzUgMTFCRTsKK0IwOTQ7QjA5NDsxMTAxIDExNzUgMTFCRjtCMDk0OzExMDEgMTE3NSAxMUJGOworQjA5NTtCMDk1OzExMDEgMTE3NSAxMUMwO0IwOTU7MTEwMSAxMTc1IDExQzA7CitCMDk2O0IwOTY7MTEwMSAxMTc1IDExQzE7QjA5NjsxMTAxIDExNzUgMTFDMTsKK0IwOTc7QjA5NzsxMTAxIDExNzUgMTFDMjtCMDk3OzExMDEgMTE3NSAxMUMyOworQjA5ODtCMDk4OzExMDIgMTE2MTtCMDk4OzExMDIgMTE2MTsKK0IwOTk7QjA5OTsxMTAyIDExNjEgMTFBODtCMDk5OzExMDIgMTE2MSAxMUE4OworQjA5QTtCMDlBOzExMDIgMTE2MSAxMUE5O0IwOUE7MTEwMiAxMTYxIDExQTk7CitCMDlCO0IwOUI7MTEwMiAxMTYxIDExQUE7QjA5QjsxMTAyIDExNjEgMTFBQTsKK0IwOUM7QjA5QzsxMTAyIDExNjEgMTFBQjtCMDlDOzExMDIgMTE2MSAxMUFCOworQjA5RDtCMDlEOzExMDIgMTE2MSAxMUFDO0IwOUQ7MTEwMiAxMTYxIDExQUM7CitCMDlFO0IwOUU7MTEwMiAxMTYxIDExQUQ7QjA5RTsxMTAyIDExNjEgMTFBRDsKK0IwOUY7QjA5RjsxMTAyIDExNjEgMTFBRTtCMDlGOzExMDIgMTE2MSAxMUFFOworQjBBMDtCMEEwOzExMDIgMTE2MSAxMUFGO0IwQTA7MTEwMiAxMTYxIDExQUY7CitCMEExO0IwQTE7MTEwMiAxMTYxIDExQjA7QjBBMTsxMTAyIDExNjEgMTFCMDsKK0IwQTI7QjBBMjsxMTAyIDExNjEgMTFCMTtCMEEyOzExMDIgMTE2MSAxMUIxOworQjBBMztCMEEzOzExMDIgMTE2MSAxMUIyO0IwQTM7MTEwMiAxMTYxIDExQjI7CitCMEE0O0IwQTQ7MTEwMiAxMTYxIDExQjM7QjBBNDsxMTAyIDExNjEgMTFCMzsKK0IwQTU7QjBBNTsxMTAyIDExNjEgMTFCNDtCMEE1OzExMDIgMTE2MSAxMUI0OworQjBBNjtCMEE2OzExMDIgMTE2MSAxMUI1O0IwQTY7MTEwMiAxMTYxIDExQjU7CitCMEE3O0IwQTc7MTEwMiAxMTYxIDExQjY7QjBBNzsxMTAyIDExNjEgMTFCNjsKK0IwQTg7QjBBODsxMTAyIDExNjEgMTFCNztCMEE4OzExMDIgMTE2MSAxMUI3OworQjBBOTtCMEE5OzExMDIgMTE2MSAxMUI4O0IwQTk7MTEwMiAxMTYxIDExQjg7CitCMEFBO0IwQUE7MTEwMiAxMTYxIDExQjk7QjBBQTsxMTAyIDExNjEgMTFCOTsKK0IwQUI7QjBBQjsxMTAyIDExNjEgMTFCQTtCMEFCOzExMDIgMTE2MSAxMUJBOworQjBBQztCMEFDOzExMDIgMTE2MSAxMUJCO0IwQUM7MTEwMiAxMTYxIDExQkI7CitCMEFEO0IwQUQ7MTEwMiAxMTYxIDExQkM7QjBBRDsxMTAyIDExNjEgMTFCQzsKK0IwQUU7QjBBRTsxMTAyIDExNjEgMTFCRDtCMEFFOzExMDIgMTE2MSAxMUJEOworQjBBRjtCMEFGOzExMDIgMTE2MSAxMUJFO0IwQUY7MTEwMiAxMTYxIDExQkU7CitCMEIwO0IwQjA7MTEwMiAxMTYxIDExQkY7QjBCMDsxMTAyIDExNjEgMTFCRjsKK0IwQjE7QjBCMTsxMTAyIDExNjEgMTFDMDtCMEIxOzExMDIgMTE2MSAxMUMwOworQjBCMjtCMEIyOzExMDIgMTE2MSAxMUMxO0IwQjI7MTEwMiAxMTYxIDExQzE7CitCMEIzO0IwQjM7MTEwMiAxMTYxIDExQzI7QjBCMzsxMTAyIDExNjEgMTFDMjsKK0IwQjQ7QjBCNDsxMTAyIDExNjI7QjBCNDsxMTAyIDExNjI7CitCMEI1O0IwQjU7MTEwMiAxMTYyIDExQTg7QjBCNTsxMTAyIDExNjIgMTFBODsKK0IwQjY7QjBCNjsxMTAyIDExNjIgMTFBOTtCMEI2OzExMDIgMTE2MiAxMUE5OworQjBCNztCMEI3OzExMDIgMTE2MiAxMUFBO0IwQjc7MTEwMiAxMTYyIDExQUE7CitCMEI4O0IwQjg7MTEwMiAxMTYyIDExQUI7QjBCODsxMTAyIDExNjIgMTFBQjsKK0IwQjk7QjBCOTsxMTAyIDExNjIgMTFBQztCMEI5OzExMDIgMTE2MiAxMUFDOworQjBCQTtCMEJBOzExMDIgMTE2MiAxMUFEO0IwQkE7MTEwMiAxMTYyIDExQUQ7CitCMEJCO0IwQkI7MTEwMiAxMTYyIDExQUU7QjBCQjsxMTAyIDExNjIgMTFBRTsKK0IwQkM7QjBCQzsxMTAyIDExNjIgMTFBRjtCMEJDOzExMDIgMTE2MiAxMUFGOworQjBCRDtCMEJEOzExMDIgMTE2MiAxMUIwO0IwQkQ7MTEwMiAxMTYyIDExQjA7CitCMEJFO0IwQkU7MTEwMiAxMTYyIDExQjE7QjBCRTsxMTAyIDExNjIgMTFCMTsKK0IwQkY7QjBCRjsxMTAyIDExNjIgMTFCMjtCMEJGOzExMDIgMTE2MiAxMUIyOworQjBDMDtCMEMwOzExMDIgMTE2MiAxMUIzO0IwQzA7MTEwMiAxMTYyIDExQjM7CitCMEMxO0IwQzE7MTEwMiAxMTYyIDExQjQ7QjBDMTsxMTAyIDExNjIgMTFCNDsKK0IwQzI7QjBDMjsxMTAyIDExNjIgMTFCNTtCMEMyOzExMDIgMTE2MiAxMUI1OworQjBDMztCMEMzOzExMDIgMTE2MiAxMUI2O0IwQzM7MTEwMiAxMTYyIDExQjY7CitCMEM0O0IwQzQ7MTEwMiAxMTYyIDExQjc7QjBDNDsxMTAyIDExNjIgMTFCNzsKK0IwQzU7QjBDNTsxMTAyIDExNjIgMTFCODtCMEM1OzExMDIgMTE2MiAxMUI4OworQjBDNjtCMEM2OzExMDIgMTE2MiAxMUI5O0IwQzY7MTEwMiAxMTYyIDExQjk7CitCMEM3O0IwQzc7MTEwMiAxMTYyIDExQkE7QjBDNzsxMTAyIDExNjIgMTFCQTsKK0IwQzg7QjBDODsxMTAyIDExNjIgMTFCQjtCMEM4OzExMDIgMTE2MiAxMUJCOworQjBDOTtCMEM5OzExMDIgMTE2MiAxMUJDO0IwQzk7MTEwMiAxMTYyIDExQkM7CitCMENBO0IwQ0E7MTEwMiAxMTYyIDExQkQ7QjBDQTsxMTAyIDExNjIgMTFCRDsKK0IwQ0I7QjBDQjsxMTAyIDExNjIgMTFCRTtCMENCOzExMDIgMTE2MiAxMUJFOworQjBDQztCMENDOzExMDIgMTE2MiAxMUJGO0IwQ0M7MTEwMiAxMTYyIDExQkY7CitCMENEO0IwQ0Q7MTEwMiAxMTYyIDExQzA7QjBDRDsxMTAyIDExNjIgMTFDMDsKK0IwQ0U7QjBDRTsxMTAyIDExNjIgMTFDMTtCMENFOzExMDIgMTE2MiAxMUMxOworQjBDRjtCMENGOzExMDIgMTE2MiAxMUMyO0IwQ0Y7MTEwMiAxMTYyIDExQzI7CitCMEQwO0IwRDA7MTEwMiAxMTYzO0IwRDA7MTEwMiAxMTYzOworQjBEMTtCMEQxOzExMDIgMTE2MyAxMUE4O0IwRDE7MTEwMiAxMTYzIDExQTg7CitCMEQyO0IwRDI7MTEwMiAxMTYzIDExQTk7QjBEMjsxMTAyIDExNjMgMTFBOTsKK0IwRDM7QjBEMzsxMTAyIDExNjMgMTFBQTtCMEQzOzExMDIgMTE2MyAxMUFBOworQjBENDtCMEQ0OzExMDIgMTE2MyAxMUFCO0IwRDQ7MTEwMiAxMTYzIDExQUI7CitCMEQ1O0IwRDU7MTEwMiAxMTYzIDExQUM7QjBENTsxMTAyIDExNjMgMTFBQzsKK0IwRDY7QjBENjsxMTAyIDExNjMgMTFBRDtCMEQ2OzExMDIgMTE2MyAxMUFEOworQjBENztCMEQ3OzExMDIgMTE2MyAxMUFFO0IwRDc7MTEwMiAxMTYzIDExQUU7CitCMEQ4O0IwRDg7MTEwMiAxMTYzIDExQUY7QjBEODsxMTAyIDExNjMgMTFBRjsKK0IwRDk7QjBEOTsxMTAyIDExNjMgMTFCMDtCMEQ5OzExMDIgMTE2MyAxMUIwOworQjBEQTtCMERBOzExMDIgMTE2MyAxMUIxO0IwREE7MTEwMiAxMTYzIDExQjE7CitCMERCO0IwREI7MTEwMiAxMTYzIDExQjI7QjBEQjsxMTAyIDExNjMgMTFCMjsKK0IwREM7QjBEQzsxMTAyIDExNjMgMTFCMztCMERDOzExMDIgMTE2MyAxMUIzOworQjBERDtCMEREOzExMDIgMTE2MyAxMUI0O0IwREQ7MTEwMiAxMTYzIDExQjQ7CitCMERFO0IwREU7MTEwMiAxMTYzIDExQjU7QjBERTsxMTAyIDExNjMgMTFCNTsKK0IwREY7QjBERjsxMTAyIDExNjMgMTFCNjtCMERGOzExMDIgMTE2MyAxMUI2OworQjBFMDtCMEUwOzExMDIgMTE2MyAxMUI3O0IwRTA7MTEwMiAxMTYzIDExQjc7CitCMEUxO0IwRTE7MTEwMiAxMTYzIDExQjg7QjBFMTsxMTAyIDExNjMgMTFCODsKK0IwRTI7QjBFMjsxMTAyIDExNjMgMTFCOTtCMEUyOzExMDIgMTE2MyAxMUI5OworQjBFMztCMEUzOzExMDIgMTE2MyAxMUJBO0IwRTM7MTEwMiAxMTYzIDExQkE7CitCMEU0O0IwRTQ7MTEwMiAxMTYzIDExQkI7QjBFNDsxMTAyIDExNjMgMTFCQjsKK0IwRTU7QjBFNTsxMTAyIDExNjMgMTFCQztCMEU1OzExMDIgMTE2MyAxMUJDOworQjBFNjtCMEU2OzExMDIgMTE2MyAxMUJEO0IwRTY7MTEwMiAxMTYzIDExQkQ7CitCMEU3O0IwRTc7MTEwMiAxMTYzIDExQkU7QjBFNzsxMTAyIDExNjMgMTFCRTsKK0IwRTg7QjBFODsxMTAyIDExNjMgMTFCRjtCMEU4OzExMDIgMTE2MyAxMUJGOworQjBFOTtCMEU5OzExMDIgMTE2MyAxMUMwO0IwRTk7MTEwMiAxMTYzIDExQzA7CitCMEVBO0IwRUE7MTEwMiAxMTYzIDExQzE7QjBFQTsxMTAyIDExNjMgMTFDMTsKK0IwRUI7QjBFQjsxMTAyIDExNjMgMTFDMjtCMEVCOzExMDIgMTE2MyAxMUMyOworQjBFQztCMEVDOzExMDIgMTE2NDtCMEVDOzExMDIgMTE2NDsKK0IwRUQ7QjBFRDsxMTAyIDExNjQgMTFBODtCMEVEOzExMDIgMTE2NCAxMUE4OworQjBFRTtCMEVFOzExMDIgMTE2NCAxMUE5O0IwRUU7MTEwMiAxMTY0IDExQTk7CitCMEVGO0IwRUY7MTEwMiAxMTY0IDExQUE7QjBFRjsxMTAyIDExNjQgMTFBQTsKK0IwRjA7QjBGMDsxMTAyIDExNjQgMTFBQjtCMEYwOzExMDIgMTE2NCAxMUFCOworQjBGMTtCMEYxOzExMDIgMTE2NCAxMUFDO0IwRjE7MTEwMiAxMTY0IDExQUM7CitCMEYyO0IwRjI7MTEwMiAxMTY0IDExQUQ7QjBGMjsxMTAyIDExNjQgMTFBRDsKK0IwRjM7QjBGMzsxMTAyIDExNjQgMTFBRTtCMEYzOzExMDIgMTE2NCAxMUFFOworQjBGNDtCMEY0OzExMDIgMTE2NCAxMUFGO0IwRjQ7MTEwMiAxMTY0IDExQUY7CitCMEY1O0IwRjU7MTEwMiAxMTY0IDExQjA7QjBGNTsxMTAyIDExNjQgMTFCMDsKK0IwRjY7QjBGNjsxMTAyIDExNjQgMTFCMTtCMEY2OzExMDIgMTE2NCAxMUIxOworQjBGNztCMEY3OzExMDIgMTE2NCAxMUIyO0IwRjc7MTEwMiAxMTY0IDExQjI7CitCMEY4O0IwRjg7MTEwMiAxMTY0IDExQjM7QjBGODsxMTAyIDExNjQgMTFCMzsKK0IwRjk7QjBGOTsxMTAyIDExNjQgMTFCNDtCMEY5OzExMDIgMTE2NCAxMUI0OworQjBGQTtCMEZBOzExMDIgMTE2NCAxMUI1O0IwRkE7MTEwMiAxMTY0IDExQjU7CitCMEZCO0IwRkI7MTEwMiAxMTY0IDExQjY7QjBGQjsxMTAyIDExNjQgMTFCNjsKK0IwRkM7QjBGQzsxMTAyIDExNjQgMTFCNztCMEZDOzExMDIgMTE2NCAxMUI3OworQjBGRDtCMEZEOzExMDIgMTE2NCAxMUI4O0IwRkQ7MTEwMiAxMTY0IDExQjg7CitCMEZFO0IwRkU7MTEwMiAxMTY0IDExQjk7QjBGRTsxMTAyIDExNjQgMTFCOTsKK0IwRkY7QjBGRjsxMTAyIDExNjQgMTFCQTtCMEZGOzExMDIgMTE2NCAxMUJBOworQjEwMDtCMTAwOzExMDIgMTE2NCAxMUJCO0IxMDA7MTEwMiAxMTY0IDExQkI7CitCMTAxO0IxMDE7MTEwMiAxMTY0IDExQkM7QjEwMTsxMTAyIDExNjQgMTFCQzsKK0IxMDI7QjEwMjsxMTAyIDExNjQgMTFCRDtCMTAyOzExMDIgMTE2NCAxMUJEOworQjEwMztCMTAzOzExMDIgMTE2NCAxMUJFO0IxMDM7MTEwMiAxMTY0IDExQkU7CitCMTA0O0IxMDQ7MTEwMiAxMTY0IDExQkY7QjEwNDsxMTAyIDExNjQgMTFCRjsKK0IxMDU7QjEwNTsxMTAyIDExNjQgMTFDMDtCMTA1OzExMDIgMTE2NCAxMUMwOworQjEwNjtCMTA2OzExMDIgMTE2NCAxMUMxO0IxMDY7MTEwMiAxMTY0IDExQzE7CitCMTA3O0IxMDc7MTEwMiAxMTY0IDExQzI7QjEwNzsxMTAyIDExNjQgMTFDMjsKK0IxMDg7QjEwODsxMTAyIDExNjU7QjEwODsxMTAyIDExNjU7CitCMTA5O0IxMDk7MTEwMiAxMTY1IDExQTg7QjEwOTsxMTAyIDExNjUgMTFBODsKK0IxMEE7QjEwQTsxMTAyIDExNjUgMTFBOTtCMTBBOzExMDIgMTE2NSAxMUE5OworQjEwQjtCMTBCOzExMDIgMTE2NSAxMUFBO0IxMEI7MTEwMiAxMTY1IDExQUE7CitCMTBDO0IxMEM7MTEwMiAxMTY1IDExQUI7QjEwQzsxMTAyIDExNjUgMTFBQjsKK0IxMEQ7QjEwRDsxMTAyIDExNjUgMTFBQztCMTBEOzExMDIgMTE2NSAxMUFDOworQjEwRTtCMTBFOzExMDIgMTE2NSAxMUFEO0IxMEU7MTEwMiAxMTY1IDExQUQ7CitCMTBGO0IxMEY7MTEwMiAxMTY1IDExQUU7QjEwRjsxMTAyIDExNjUgMTFBRTsKK0IxMTA7QjExMDsxMTAyIDExNjUgMTFBRjtCMTEwOzExMDIgMTE2NSAxMUFGOworQjExMTtCMTExOzExMDIgMTE2NSAxMUIwO0IxMTE7MTEwMiAxMTY1IDExQjA7CitCMTEyO0IxMTI7MTEwMiAxMTY1IDExQjE7QjExMjsxMTAyIDExNjUgMTFCMTsKK0IxMTM7QjExMzsxMTAyIDExNjUgMTFCMjtCMTEzOzExMDIgMTE2NSAxMUIyOworQjExNDtCMTE0OzExMDIgMTE2NSAxMUIzO0IxMTQ7MTEwMiAxMTY1IDExQjM7CitCMTE1O0IxMTU7MTEwMiAxMTY1IDExQjQ7QjExNTsxMTAyIDExNjUgMTFCNDsKK0IxMTY7QjExNjsxMTAyIDExNjUgMTFCNTtCMTE2OzExMDIgMTE2NSAxMUI1OworQjExNztCMTE3OzExMDIgMTE2NSAxMUI2O0IxMTc7MTEwMiAxMTY1IDExQjY7CitCMTE4O0IxMTg7MTEwMiAxMTY1IDExQjc7QjExODsxMTAyIDExNjUgMTFCNzsKK0IxMTk7QjExOTsxMTAyIDExNjUgMTFCODtCMTE5OzExMDIgMTE2NSAxMUI4OworQjExQTtCMTFBOzExMDIgMTE2NSAxMUI5O0IxMUE7MTEwMiAxMTY1IDExQjk7CitCMTFCO0IxMUI7MTEwMiAxMTY1IDExQkE7QjExQjsxMTAyIDExNjUgMTFCQTsKK0IxMUM7QjExQzsxMTAyIDExNjUgMTFCQjtCMTFDOzExMDIgMTE2NSAxMUJCOworQjExRDtCMTFEOzExMDIgMTE2NSAxMUJDO0IxMUQ7MTEwMiAxMTY1IDExQkM7CitCMTFFO0IxMUU7MTEwMiAxMTY1IDExQkQ7QjExRTsxMTAyIDExNjUgMTFCRDsKK0IxMUY7QjExRjsxMTAyIDExNjUgMTFCRTtCMTFGOzExMDIgMTE2NSAxMUJFOworQjEyMDtCMTIwOzExMDIgMTE2NSAxMUJGO0IxMjA7MTEwMiAxMTY1IDExQkY7CitCMTIxO0IxMjE7MTEwMiAxMTY1IDExQzA7QjEyMTsxMTAyIDExNjUgMTFDMDsKK0IxMjI7QjEyMjsxMTAyIDExNjUgMTFDMTtCMTIyOzExMDIgMTE2NSAxMUMxOworQjEyMztCMTIzOzExMDIgMTE2NSAxMUMyO0IxMjM7MTEwMiAxMTY1IDExQzI7CitCMTI0O0IxMjQ7MTEwMiAxMTY2O0IxMjQ7MTEwMiAxMTY2OworQjEyNTtCMTI1OzExMDIgMTE2NiAxMUE4O0IxMjU7MTEwMiAxMTY2IDExQTg7CitCMTI2O0IxMjY7MTEwMiAxMTY2IDExQTk7QjEyNjsxMTAyIDExNjYgMTFBOTsKK0IxMjc7QjEyNzsxMTAyIDExNjYgMTFBQTtCMTI3OzExMDIgMTE2NiAxMUFBOworQjEyODtCMTI4OzExMDIgMTE2NiAxMUFCO0IxMjg7MTEwMiAxMTY2IDExQUI7CitCMTI5O0IxMjk7MTEwMiAxMTY2IDExQUM7QjEyOTsxMTAyIDExNjYgMTFBQzsKK0IxMkE7QjEyQTsxMTAyIDExNjYgMTFBRDtCMTJBOzExMDIgMTE2NiAxMUFEOworQjEyQjtCMTJCOzExMDIgMTE2NiAxMUFFO0IxMkI7MTEwMiAxMTY2IDExQUU7CitCMTJDO0IxMkM7MTEwMiAxMTY2IDExQUY7QjEyQzsxMTAyIDExNjYgMTFBRjsKK0IxMkQ7QjEyRDsxMTAyIDExNjYgMTFCMDtCMTJEOzExMDIgMTE2NiAxMUIwOworQjEyRTtCMTJFOzExMDIgMTE2NiAxMUIxO0IxMkU7MTEwMiAxMTY2IDExQjE7CitCMTJGO0IxMkY7MTEwMiAxMTY2IDExQjI7QjEyRjsxMTAyIDExNjYgMTFCMjsKK0IxMzA7QjEzMDsxMTAyIDExNjYgMTFCMztCMTMwOzExMDIgMTE2NiAxMUIzOworQjEzMTtCMTMxOzExMDIgMTE2NiAxMUI0O0IxMzE7MTEwMiAxMTY2IDExQjQ7CitCMTMyO0IxMzI7MTEwMiAxMTY2IDExQjU7QjEzMjsxMTAyIDExNjYgMTFCNTsKK0IxMzM7QjEzMzsxMTAyIDExNjYgMTFCNjtCMTMzOzExMDIgMTE2NiAxMUI2OworQjEzNDtCMTM0OzExMDIgMTE2NiAxMUI3O0IxMzQ7MTEwMiAxMTY2IDExQjc7CitCMTM1O0IxMzU7MTEwMiAxMTY2IDExQjg7QjEzNTsxMTAyIDExNjYgMTFCODsKK0IxMzY7QjEzNjsxMTAyIDExNjYgMTFCOTtCMTM2OzExMDIgMTE2NiAxMUI5OworQjEzNztCMTM3OzExMDIgMTE2NiAxMUJBO0IxMzc7MTEwMiAxMTY2IDExQkE7CitCMTM4O0IxMzg7MTEwMiAxMTY2IDExQkI7QjEzODsxMTAyIDExNjYgMTFCQjsKK0IxMzk7QjEzOTsxMTAyIDExNjYgMTFCQztCMTM5OzExMDIgMTE2NiAxMUJDOworQjEzQTtCMTNBOzExMDIgMTE2NiAxMUJEO0IxM0E7MTEwMiAxMTY2IDExQkQ7CitCMTNCO0IxM0I7MTEwMiAxMTY2IDExQkU7QjEzQjsxMTAyIDExNjYgMTFCRTsKK0IxM0M7QjEzQzsxMTAyIDExNjYgMTFCRjtCMTNDOzExMDIgMTE2NiAxMUJGOworQjEzRDtCMTNEOzExMDIgMTE2NiAxMUMwO0IxM0Q7MTEwMiAxMTY2IDExQzA7CitCMTNFO0IxM0U7MTEwMiAxMTY2IDExQzE7QjEzRTsxMTAyIDExNjYgMTFDMTsKK0IxM0Y7QjEzRjsxMTAyIDExNjYgMTFDMjtCMTNGOzExMDIgMTE2NiAxMUMyOworQjE0MDtCMTQwOzExMDIgMTE2NztCMTQwOzExMDIgMTE2NzsKK0IxNDE7QjE0MTsxMTAyIDExNjcgMTFBODtCMTQxOzExMDIgMTE2NyAxMUE4OworQjE0MjtCMTQyOzExMDIgMTE2NyAxMUE5O0IxNDI7MTEwMiAxMTY3IDExQTk7CitCMTQzO0IxNDM7MTEwMiAxMTY3IDExQUE7QjE0MzsxMTAyIDExNjcgMTFBQTsKK0IxNDQ7QjE0NDsxMTAyIDExNjcgMTFBQjtCMTQ0OzExMDIgMTE2NyAxMUFCOworQjE0NTtCMTQ1OzExMDIgMTE2NyAxMUFDO0IxNDU7MTEwMiAxMTY3IDExQUM7CitCMTQ2O0IxNDY7MTEwMiAxMTY3IDExQUQ7QjE0NjsxMTAyIDExNjcgMTFBRDsKK0IxNDc7QjE0NzsxMTAyIDExNjcgMTFBRTtCMTQ3OzExMDIgMTE2NyAxMUFFOworQjE0ODtCMTQ4OzExMDIgMTE2NyAxMUFGO0IxNDg7MTEwMiAxMTY3IDExQUY7CitCMTQ5O0IxNDk7MTEwMiAxMTY3IDExQjA7QjE0OTsxMTAyIDExNjcgMTFCMDsKK0IxNEE7QjE0QTsxMTAyIDExNjcgMTFCMTtCMTRBOzExMDIgMTE2NyAxMUIxOworQjE0QjtCMTRCOzExMDIgMTE2NyAxMUIyO0IxNEI7MTEwMiAxMTY3IDExQjI7CitCMTRDO0IxNEM7MTEwMiAxMTY3IDExQjM7QjE0QzsxMTAyIDExNjcgMTFCMzsKK0IxNEQ7QjE0RDsxMTAyIDExNjcgMTFCNDtCMTREOzExMDIgMTE2NyAxMUI0OworQjE0RTtCMTRFOzExMDIgMTE2NyAxMUI1O0IxNEU7MTEwMiAxMTY3IDExQjU7CitCMTRGO0IxNEY7MTEwMiAxMTY3IDExQjY7QjE0RjsxMTAyIDExNjcgMTFCNjsKK0IxNTA7QjE1MDsxMTAyIDExNjcgMTFCNztCMTUwOzExMDIgMTE2NyAxMUI3OworQjE1MTtCMTUxOzExMDIgMTE2NyAxMUI4O0IxNTE7MTEwMiAxMTY3IDExQjg7CitCMTUyO0IxNTI7MTEwMiAxMTY3IDExQjk7QjE1MjsxMTAyIDExNjcgMTFCOTsKK0IxNTM7QjE1MzsxMTAyIDExNjcgMTFCQTtCMTUzOzExMDIgMTE2NyAxMUJBOworQjE1NDtCMTU0OzExMDIgMTE2NyAxMUJCO0IxNTQ7MTEwMiAxMTY3IDExQkI7CitCMTU1O0IxNTU7MTEwMiAxMTY3IDExQkM7QjE1NTsxMTAyIDExNjcgMTFCQzsKK0IxNTY7QjE1NjsxMTAyIDExNjcgMTFCRDtCMTU2OzExMDIgMTE2NyAxMUJEOworQjE1NztCMTU3OzExMDIgMTE2NyAxMUJFO0IxNTc7MTEwMiAxMTY3IDExQkU7CitCMTU4O0IxNTg7MTEwMiAxMTY3IDExQkY7QjE1ODsxMTAyIDExNjcgMTFCRjsKK0IxNTk7QjE1OTsxMTAyIDExNjcgMTFDMDtCMTU5OzExMDIgMTE2NyAxMUMwOworQjE1QTtCMTVBOzExMDIgMTE2NyAxMUMxO0IxNUE7MTEwMiAxMTY3IDExQzE7CitCMTVCO0IxNUI7MTEwMiAxMTY3IDExQzI7QjE1QjsxMTAyIDExNjcgMTFDMjsKK0IxNUM7QjE1QzsxMTAyIDExNjg7QjE1QzsxMTAyIDExNjg7CitCMTVEO0IxNUQ7MTEwMiAxMTY4IDExQTg7QjE1RDsxMTAyIDExNjggMTFBODsKK0IxNUU7QjE1RTsxMTAyIDExNjggMTFBOTtCMTVFOzExMDIgMTE2OCAxMUE5OworQjE1RjtCMTVGOzExMDIgMTE2OCAxMUFBO0IxNUY7MTEwMiAxMTY4IDExQUE7CitCMTYwO0IxNjA7MTEwMiAxMTY4IDExQUI7QjE2MDsxMTAyIDExNjggMTFBQjsKK0IxNjE7QjE2MTsxMTAyIDExNjggMTFBQztCMTYxOzExMDIgMTE2OCAxMUFDOworQjE2MjtCMTYyOzExMDIgMTE2OCAxMUFEO0IxNjI7MTEwMiAxMTY4IDExQUQ7CitCMTYzO0IxNjM7MTEwMiAxMTY4IDExQUU7QjE2MzsxMTAyIDExNjggMTFBRTsKK0IxNjQ7QjE2NDsxMTAyIDExNjggMTFBRjtCMTY0OzExMDIgMTE2OCAxMUFGOworQjE2NTtCMTY1OzExMDIgMTE2OCAxMUIwO0IxNjU7MTEwMiAxMTY4IDExQjA7CitCMTY2O0IxNjY7MTEwMiAxMTY4IDExQjE7QjE2NjsxMTAyIDExNjggMTFCMTsKK0IxNjc7QjE2NzsxMTAyIDExNjggMTFCMjtCMTY3OzExMDIgMTE2OCAxMUIyOworQjE2ODtCMTY4OzExMDIgMTE2OCAxMUIzO0IxNjg7MTEwMiAxMTY4IDExQjM7CitCMTY5O0IxNjk7MTEwMiAxMTY4IDExQjQ7QjE2OTsxMTAyIDExNjggMTFCNDsKK0IxNkE7QjE2QTsxMTAyIDExNjggMTFCNTtCMTZBOzExMDIgMTE2OCAxMUI1OworQjE2QjtCMTZCOzExMDIgMTE2OCAxMUI2O0IxNkI7MTEwMiAxMTY4IDExQjY7CitCMTZDO0IxNkM7MTEwMiAxMTY4IDExQjc7QjE2QzsxMTAyIDExNjggMTFCNzsKK0IxNkQ7QjE2RDsxMTAyIDExNjggMTFCODtCMTZEOzExMDIgMTE2OCAxMUI4OworQjE2RTtCMTZFOzExMDIgMTE2OCAxMUI5O0IxNkU7MTEwMiAxMTY4IDExQjk7CitCMTZGO0IxNkY7MTEwMiAxMTY4IDExQkE7QjE2RjsxMTAyIDExNjggMTFCQTsKK0IxNzA7QjE3MDsxMTAyIDExNjggMTFCQjtCMTcwOzExMDIgMTE2OCAxMUJCOworQjE3MTtCMTcxOzExMDIgMTE2OCAxMUJDO0IxNzE7MTEwMiAxMTY4IDExQkM7CitCMTcyO0IxNzI7MTEwMiAxMTY4IDExQkQ7QjE3MjsxMTAyIDExNjggMTFCRDsKK0IxNzM7QjE3MzsxMTAyIDExNjggMTFCRTtCMTczOzExMDIgMTE2OCAxMUJFOworQjE3NDtCMTc0OzExMDIgMTE2OCAxMUJGO0IxNzQ7MTEwMiAxMTY4IDExQkY7CitCMTc1O0IxNzU7MTEwMiAxMTY4IDExQzA7QjE3NTsxMTAyIDExNjggMTFDMDsKK0IxNzY7QjE3NjsxMTAyIDExNjggMTFDMTtCMTc2OzExMDIgMTE2OCAxMUMxOworQjE3NztCMTc3OzExMDIgMTE2OCAxMUMyO0IxNzc7MTEwMiAxMTY4IDExQzI7CitCMTc4O0IxNzg7MTEwMiAxMTY5O0IxNzg7MTEwMiAxMTY5OworQjE3OTtCMTc5OzExMDIgMTE2OSAxMUE4O0IxNzk7MTEwMiAxMTY5IDExQTg7CitCMTdBO0IxN0E7MTEwMiAxMTY5IDExQTk7QjE3QTsxMTAyIDExNjkgMTFBOTsKK0IxN0I7QjE3QjsxMTAyIDExNjkgMTFBQTtCMTdCOzExMDIgMTE2OSAxMUFBOworQjE3QztCMTdDOzExMDIgMTE2OSAxMUFCO0IxN0M7MTEwMiAxMTY5IDExQUI7CitCMTdEO0IxN0Q7MTEwMiAxMTY5IDExQUM7QjE3RDsxMTAyIDExNjkgMTFBQzsKK0IxN0U7QjE3RTsxMTAyIDExNjkgMTFBRDtCMTdFOzExMDIgMTE2OSAxMUFEOworQjE3RjtCMTdGOzExMDIgMTE2OSAxMUFFO0IxN0Y7MTEwMiAxMTY5IDExQUU7CitCMTgwO0IxODA7MTEwMiAxMTY5IDExQUY7QjE4MDsxMTAyIDExNjkgMTFBRjsKK0IxODE7QjE4MTsxMTAyIDExNjkgMTFCMDtCMTgxOzExMDIgMTE2OSAxMUIwOworQjE4MjtCMTgyOzExMDIgMTE2OSAxMUIxO0IxODI7MTEwMiAxMTY5IDExQjE7CitCMTgzO0IxODM7MTEwMiAxMTY5IDExQjI7QjE4MzsxMTAyIDExNjkgMTFCMjsKK0IxODQ7QjE4NDsxMTAyIDExNjkgMTFCMztCMTg0OzExMDIgMTE2OSAxMUIzOworQjE4NTtCMTg1OzExMDIgMTE2OSAxMUI0O0IxODU7MTEwMiAxMTY5IDExQjQ7CitCMTg2O0IxODY7MTEwMiAxMTY5IDExQjU7QjE4NjsxMTAyIDExNjkgMTFCNTsKK0IxODc7QjE4NzsxMTAyIDExNjkgMTFCNjtCMTg3OzExMDIgMTE2OSAxMUI2OworQjE4ODtCMTg4OzExMDIgMTE2OSAxMUI3O0IxODg7MTEwMiAxMTY5IDExQjc7CitCMTg5O0IxODk7MTEwMiAxMTY5IDExQjg7QjE4OTsxMTAyIDExNjkgMTFCODsKK0IxOEE7QjE4QTsxMTAyIDExNjkgMTFCOTtCMThBOzExMDIgMTE2OSAxMUI5OworQjE4QjtCMThCOzExMDIgMTE2OSAxMUJBO0IxOEI7MTEwMiAxMTY5IDExQkE7CitCMThDO0IxOEM7MTEwMiAxMTY5IDExQkI7QjE4QzsxMTAyIDExNjkgMTFCQjsKK0IxOEQ7QjE4RDsxMTAyIDExNjkgMTFCQztCMThEOzExMDIgMTE2OSAxMUJDOworQjE4RTtCMThFOzExMDIgMTE2OSAxMUJEO0IxOEU7MTEwMiAxMTY5IDExQkQ7CitCMThGO0IxOEY7MTEwMiAxMTY5IDExQkU7QjE4RjsxMTAyIDExNjkgMTFCRTsKK0IxOTA7QjE5MDsxMTAyIDExNjkgMTFCRjtCMTkwOzExMDIgMTE2OSAxMUJGOworQjE5MTtCMTkxOzExMDIgMTE2OSAxMUMwO0IxOTE7MTEwMiAxMTY5IDExQzA7CitCMTkyO0IxOTI7MTEwMiAxMTY5IDExQzE7QjE5MjsxMTAyIDExNjkgMTFDMTsKK0IxOTM7QjE5MzsxMTAyIDExNjkgMTFDMjtCMTkzOzExMDIgMTE2OSAxMUMyOworQjE5NDtCMTk0OzExMDIgMTE2QTtCMTk0OzExMDIgMTE2QTsKK0IxOTU7QjE5NTsxMTAyIDExNkEgMTFBODtCMTk1OzExMDIgMTE2QSAxMUE4OworQjE5NjtCMTk2OzExMDIgMTE2QSAxMUE5O0IxOTY7MTEwMiAxMTZBIDExQTk7CitCMTk3O0IxOTc7MTEwMiAxMTZBIDExQUE7QjE5NzsxMTAyIDExNkEgMTFBQTsKK0IxOTg7QjE5ODsxMTAyIDExNkEgMTFBQjtCMTk4OzExMDIgMTE2QSAxMUFCOworQjE5OTtCMTk5OzExMDIgMTE2QSAxMUFDO0IxOTk7MTEwMiAxMTZBIDExQUM7CitCMTlBO0IxOUE7MTEwMiAxMTZBIDExQUQ7QjE5QTsxMTAyIDExNkEgMTFBRDsKK0IxOUI7QjE5QjsxMTAyIDExNkEgMTFBRTtCMTlCOzExMDIgMTE2QSAxMUFFOworQjE5QztCMTlDOzExMDIgMTE2QSAxMUFGO0IxOUM7MTEwMiAxMTZBIDExQUY7CitCMTlEO0IxOUQ7MTEwMiAxMTZBIDExQjA7QjE5RDsxMTAyIDExNkEgMTFCMDsKK0IxOUU7QjE5RTsxMTAyIDExNkEgMTFCMTtCMTlFOzExMDIgMTE2QSAxMUIxOworQjE5RjtCMTlGOzExMDIgMTE2QSAxMUIyO0IxOUY7MTEwMiAxMTZBIDExQjI7CitCMUEwO0IxQTA7MTEwMiAxMTZBIDExQjM7QjFBMDsxMTAyIDExNkEgMTFCMzsKK0IxQTE7QjFBMTsxMTAyIDExNkEgMTFCNDtCMUExOzExMDIgMTE2QSAxMUI0OworQjFBMjtCMUEyOzExMDIgMTE2QSAxMUI1O0IxQTI7MTEwMiAxMTZBIDExQjU7CitCMUEzO0IxQTM7MTEwMiAxMTZBIDExQjY7QjFBMzsxMTAyIDExNkEgMTFCNjsKK0IxQTQ7QjFBNDsxMTAyIDExNkEgMTFCNztCMUE0OzExMDIgMTE2QSAxMUI3OworQjFBNTtCMUE1OzExMDIgMTE2QSAxMUI4O0IxQTU7MTEwMiAxMTZBIDExQjg7CitCMUE2O0IxQTY7MTEwMiAxMTZBIDExQjk7QjFBNjsxMTAyIDExNkEgMTFCOTsKK0IxQTc7QjFBNzsxMTAyIDExNkEgMTFCQTtCMUE3OzExMDIgMTE2QSAxMUJBOworQjFBODtCMUE4OzExMDIgMTE2QSAxMUJCO0IxQTg7MTEwMiAxMTZBIDExQkI7CitCMUE5O0IxQTk7MTEwMiAxMTZBIDExQkM7QjFBOTsxMTAyIDExNkEgMTFCQzsKK0IxQUE7QjFBQTsxMTAyIDExNkEgMTFCRDtCMUFBOzExMDIgMTE2QSAxMUJEOworQjFBQjtCMUFCOzExMDIgMTE2QSAxMUJFO0IxQUI7MTEwMiAxMTZBIDExQkU7CitCMUFDO0IxQUM7MTEwMiAxMTZBIDExQkY7QjFBQzsxMTAyIDExNkEgMTFCRjsKK0IxQUQ7QjFBRDsxMTAyIDExNkEgMTFDMDtCMUFEOzExMDIgMTE2QSAxMUMwOworQjFBRTtCMUFFOzExMDIgMTE2QSAxMUMxO0IxQUU7MTEwMiAxMTZBIDExQzE7CitCMUFGO0IxQUY7MTEwMiAxMTZBIDExQzI7QjFBRjsxMTAyIDExNkEgMTFDMjsKK0IxQjA7QjFCMDsxMTAyIDExNkI7QjFCMDsxMTAyIDExNkI7CitCMUIxO0IxQjE7MTEwMiAxMTZCIDExQTg7QjFCMTsxMTAyIDExNkIgMTFBODsKK0IxQjI7QjFCMjsxMTAyIDExNkIgMTFBOTtCMUIyOzExMDIgMTE2QiAxMUE5OworQjFCMztCMUIzOzExMDIgMTE2QiAxMUFBO0IxQjM7MTEwMiAxMTZCIDExQUE7CitCMUI0O0IxQjQ7MTEwMiAxMTZCIDExQUI7QjFCNDsxMTAyIDExNkIgMTFBQjsKK0IxQjU7QjFCNTsxMTAyIDExNkIgMTFBQztCMUI1OzExMDIgMTE2QiAxMUFDOworQjFCNjtCMUI2OzExMDIgMTE2QiAxMUFEO0IxQjY7MTEwMiAxMTZCIDExQUQ7CitCMUI3O0IxQjc7MTEwMiAxMTZCIDExQUU7QjFCNzsxMTAyIDExNkIgMTFBRTsKK0IxQjg7QjFCODsxMTAyIDExNkIgMTFBRjtCMUI4OzExMDIgMTE2QiAxMUFGOworQjFCOTtCMUI5OzExMDIgMTE2QiAxMUIwO0IxQjk7MTEwMiAxMTZCIDExQjA7CitCMUJBO0IxQkE7MTEwMiAxMTZCIDExQjE7QjFCQTsxMTAyIDExNkIgMTFCMTsKK0IxQkI7QjFCQjsxMTAyIDExNkIgMTFCMjtCMUJCOzExMDIgMTE2QiAxMUIyOworQjFCQztCMUJDOzExMDIgMTE2QiAxMUIzO0IxQkM7MTEwMiAxMTZCIDExQjM7CitCMUJEO0IxQkQ7MTEwMiAxMTZCIDExQjQ7QjFCRDsxMTAyIDExNkIgMTFCNDsKK0IxQkU7QjFCRTsxMTAyIDExNkIgMTFCNTtCMUJFOzExMDIgMTE2QiAxMUI1OworQjFCRjtCMUJGOzExMDIgMTE2QiAxMUI2O0IxQkY7MTEwMiAxMTZCIDExQjY7CitCMUMwO0IxQzA7MTEwMiAxMTZCIDExQjc7QjFDMDsxMTAyIDExNkIgMTFCNzsKK0IxQzE7QjFDMTsxMTAyIDExNkIgMTFCODtCMUMxOzExMDIgMTE2QiAxMUI4OworQjFDMjtCMUMyOzExMDIgMTE2QiAxMUI5O0IxQzI7MTEwMiAxMTZCIDExQjk7CitCMUMzO0IxQzM7MTEwMiAxMTZCIDExQkE7QjFDMzsxMTAyIDExNkIgMTFCQTsKK0IxQzQ7QjFDNDsxMTAyIDExNkIgMTFCQjtCMUM0OzExMDIgMTE2QiAxMUJCOworQjFDNTtCMUM1OzExMDIgMTE2QiAxMUJDO0IxQzU7MTEwMiAxMTZCIDExQkM7CitCMUM2O0IxQzY7MTEwMiAxMTZCIDExQkQ7QjFDNjsxMTAyIDExNkIgMTFCRDsKK0IxQzc7QjFDNzsxMTAyIDExNkIgMTFCRTtCMUM3OzExMDIgMTE2QiAxMUJFOworQjFDODtCMUM4OzExMDIgMTE2QiAxMUJGO0IxQzg7MTEwMiAxMTZCIDExQkY7CitCMUM5O0IxQzk7MTEwMiAxMTZCIDExQzA7QjFDOTsxMTAyIDExNkIgMTFDMDsKK0IxQ0E7QjFDQTsxMTAyIDExNkIgMTFDMTtCMUNBOzExMDIgMTE2QiAxMUMxOworQjFDQjtCMUNCOzExMDIgMTE2QiAxMUMyO0IxQ0I7MTEwMiAxMTZCIDExQzI7CitCMUNDO0IxQ0M7MTEwMiAxMTZDO0IxQ0M7MTEwMiAxMTZDOworQjFDRDtCMUNEOzExMDIgMTE2QyAxMUE4O0IxQ0Q7MTEwMiAxMTZDIDExQTg7CitCMUNFO0IxQ0U7MTEwMiAxMTZDIDExQTk7QjFDRTsxMTAyIDExNkMgMTFBOTsKK0IxQ0Y7QjFDRjsxMTAyIDExNkMgMTFBQTtCMUNGOzExMDIgMTE2QyAxMUFBOworQjFEMDtCMUQwOzExMDIgMTE2QyAxMUFCO0IxRDA7MTEwMiAxMTZDIDExQUI7CitCMUQxO0IxRDE7MTEwMiAxMTZDIDExQUM7QjFEMTsxMTAyIDExNkMgMTFBQzsKK0IxRDI7QjFEMjsxMTAyIDExNkMgMTFBRDtCMUQyOzExMDIgMTE2QyAxMUFEOworQjFEMztCMUQzOzExMDIgMTE2QyAxMUFFO0IxRDM7MTEwMiAxMTZDIDExQUU7CitCMUQ0O0IxRDQ7MTEwMiAxMTZDIDExQUY7QjFENDsxMTAyIDExNkMgMTFBRjsKK0IxRDU7QjFENTsxMTAyIDExNkMgMTFCMDtCMUQ1OzExMDIgMTE2QyAxMUIwOworQjFENjtCMUQ2OzExMDIgMTE2QyAxMUIxO0IxRDY7MTEwMiAxMTZDIDExQjE7CitCMUQ3O0IxRDc7MTEwMiAxMTZDIDExQjI7QjFENzsxMTAyIDExNkMgMTFCMjsKK0IxRDg7QjFEODsxMTAyIDExNkMgMTFCMztCMUQ4OzExMDIgMTE2QyAxMUIzOworQjFEOTtCMUQ5OzExMDIgMTE2QyAxMUI0O0IxRDk7MTEwMiAxMTZDIDExQjQ7CitCMURBO0IxREE7MTEwMiAxMTZDIDExQjU7QjFEQTsxMTAyIDExNkMgMTFCNTsKK0IxREI7QjFEQjsxMTAyIDExNkMgMTFCNjtCMURCOzExMDIgMTE2QyAxMUI2OworQjFEQztCMURDOzExMDIgMTE2QyAxMUI3O0IxREM7MTEwMiAxMTZDIDExQjc7CitCMUREO0IxREQ7MTEwMiAxMTZDIDExQjg7QjFERDsxMTAyIDExNkMgMTFCODsKK0IxREU7QjFERTsxMTAyIDExNkMgMTFCOTtCMURFOzExMDIgMTE2QyAxMUI5OworQjFERjtCMURGOzExMDIgMTE2QyAxMUJBO0IxREY7MTEwMiAxMTZDIDExQkE7CitCMUUwO0IxRTA7MTEwMiAxMTZDIDExQkI7QjFFMDsxMTAyIDExNkMgMTFCQjsKK0IxRTE7QjFFMTsxMTAyIDExNkMgMTFCQztCMUUxOzExMDIgMTE2QyAxMUJDOworQjFFMjtCMUUyOzExMDIgMTE2QyAxMUJEO0IxRTI7MTEwMiAxMTZDIDExQkQ7CitCMUUzO0IxRTM7MTEwMiAxMTZDIDExQkU7QjFFMzsxMTAyIDExNkMgMTFCRTsKK0IxRTQ7QjFFNDsxMTAyIDExNkMgMTFCRjtCMUU0OzExMDIgMTE2QyAxMUJGOworQjFFNTtCMUU1OzExMDIgMTE2QyAxMUMwO0IxRTU7MTEwMiAxMTZDIDExQzA7CitCMUU2O0IxRTY7MTEwMiAxMTZDIDExQzE7QjFFNjsxMTAyIDExNkMgMTFDMTsKK0IxRTc7QjFFNzsxMTAyIDExNkMgMTFDMjtCMUU3OzExMDIgMTE2QyAxMUMyOworQjFFODtCMUU4OzExMDIgMTE2RDtCMUU4OzExMDIgMTE2RDsKK0IxRTk7QjFFOTsxMTAyIDExNkQgMTFBODtCMUU5OzExMDIgMTE2RCAxMUE4OworQjFFQTtCMUVBOzExMDIgMTE2RCAxMUE5O0IxRUE7MTEwMiAxMTZEIDExQTk7CitCMUVCO0IxRUI7MTEwMiAxMTZEIDExQUE7QjFFQjsxMTAyIDExNkQgMTFBQTsKK0IxRUM7QjFFQzsxMTAyIDExNkQgMTFBQjtCMUVDOzExMDIgMTE2RCAxMUFCOworQjFFRDtCMUVEOzExMDIgMTE2RCAxMUFDO0IxRUQ7MTEwMiAxMTZEIDExQUM7CitCMUVFO0IxRUU7MTEwMiAxMTZEIDExQUQ7QjFFRTsxMTAyIDExNkQgMTFBRDsKK0IxRUY7QjFFRjsxMTAyIDExNkQgMTFBRTtCMUVGOzExMDIgMTE2RCAxMUFFOworQjFGMDtCMUYwOzExMDIgMTE2RCAxMUFGO0IxRjA7MTEwMiAxMTZEIDExQUY7CitCMUYxO0IxRjE7MTEwMiAxMTZEIDExQjA7QjFGMTsxMTAyIDExNkQgMTFCMDsKK0IxRjI7QjFGMjsxMTAyIDExNkQgMTFCMTtCMUYyOzExMDIgMTE2RCAxMUIxOworQjFGMztCMUYzOzExMDIgMTE2RCAxMUIyO0IxRjM7MTEwMiAxMTZEIDExQjI7CitCMUY0O0IxRjQ7MTEwMiAxMTZEIDExQjM7QjFGNDsxMTAyIDExNkQgMTFCMzsKK0IxRjU7QjFGNTsxMTAyIDExNkQgMTFCNDtCMUY1OzExMDIgMTE2RCAxMUI0OworQjFGNjtCMUY2OzExMDIgMTE2RCAxMUI1O0IxRjY7MTEwMiAxMTZEIDExQjU7CitCMUY3O0IxRjc7MTEwMiAxMTZEIDExQjY7QjFGNzsxMTAyIDExNkQgMTFCNjsKK0IxRjg7QjFGODsxMTAyIDExNkQgMTFCNztCMUY4OzExMDIgMTE2RCAxMUI3OworQjFGOTtCMUY5OzExMDIgMTE2RCAxMUI4O0IxRjk7MTEwMiAxMTZEIDExQjg7CitCMUZBO0IxRkE7MTEwMiAxMTZEIDExQjk7QjFGQTsxMTAyIDExNkQgMTFCOTsKK0IxRkI7QjFGQjsxMTAyIDExNkQgMTFCQTtCMUZCOzExMDIgMTE2RCAxMUJBOworQjFGQztCMUZDOzExMDIgMTE2RCAxMUJCO0IxRkM7MTEwMiAxMTZEIDExQkI7CitCMUZEO0IxRkQ7MTEwMiAxMTZEIDExQkM7QjFGRDsxMTAyIDExNkQgMTFCQzsKK0IxRkU7QjFGRTsxMTAyIDExNkQgMTFCRDtCMUZFOzExMDIgMTE2RCAxMUJEOworQjFGRjtCMUZGOzExMDIgMTE2RCAxMUJFO0IxRkY7MTEwMiAxMTZEIDExQkU7CitCMjAwO0IyMDA7MTEwMiAxMTZEIDExQkY7QjIwMDsxMTAyIDExNkQgMTFCRjsKK0IyMDE7QjIwMTsxMTAyIDExNkQgMTFDMDtCMjAxOzExMDIgMTE2RCAxMUMwOworQjIwMjtCMjAyOzExMDIgMTE2RCAxMUMxO0IyMDI7MTEwMiAxMTZEIDExQzE7CitCMjAzO0IyMDM7MTEwMiAxMTZEIDExQzI7QjIwMzsxMTAyIDExNkQgMTFDMjsKK0IyMDQ7QjIwNDsxMTAyIDExNkU7QjIwNDsxMTAyIDExNkU7CitCMjA1O0IyMDU7MTEwMiAxMTZFIDExQTg7QjIwNTsxMTAyIDExNkUgMTFBODsKK0IyMDY7QjIwNjsxMTAyIDExNkUgMTFBOTtCMjA2OzExMDIgMTE2RSAxMUE5OworQjIwNztCMjA3OzExMDIgMTE2RSAxMUFBO0IyMDc7MTEwMiAxMTZFIDExQUE7CitCMjA4O0IyMDg7MTEwMiAxMTZFIDExQUI7QjIwODsxMTAyIDExNkUgMTFBQjsKK0IyMDk7QjIwOTsxMTAyIDExNkUgMTFBQztCMjA5OzExMDIgMTE2RSAxMUFDOworQjIwQTtCMjBBOzExMDIgMTE2RSAxMUFEO0IyMEE7MTEwMiAxMTZFIDExQUQ7CitCMjBCO0IyMEI7MTEwMiAxMTZFIDExQUU7QjIwQjsxMTAyIDExNkUgMTFBRTsKK0IyMEM7QjIwQzsxMTAyIDExNkUgMTFBRjtCMjBDOzExMDIgMTE2RSAxMUFGOworQjIwRDtCMjBEOzExMDIgMTE2RSAxMUIwO0IyMEQ7MTEwMiAxMTZFIDExQjA7CitCMjBFO0IyMEU7MTEwMiAxMTZFIDExQjE7QjIwRTsxMTAyIDExNkUgMTFCMTsKK0IyMEY7QjIwRjsxMTAyIDExNkUgMTFCMjtCMjBGOzExMDIgMTE2RSAxMUIyOworQjIxMDtCMjEwOzExMDIgMTE2RSAxMUIzO0IyMTA7MTEwMiAxMTZFIDExQjM7CitCMjExO0IyMTE7MTEwMiAxMTZFIDExQjQ7QjIxMTsxMTAyIDExNkUgMTFCNDsKK0IyMTI7QjIxMjsxMTAyIDExNkUgMTFCNTtCMjEyOzExMDIgMTE2RSAxMUI1OworQjIxMztCMjEzOzExMDIgMTE2RSAxMUI2O0IyMTM7MTEwMiAxMTZFIDExQjY7CitCMjE0O0IyMTQ7MTEwMiAxMTZFIDExQjc7QjIxNDsxMTAyIDExNkUgMTFCNzsKK0IyMTU7QjIxNTsxMTAyIDExNkUgMTFCODtCMjE1OzExMDIgMTE2RSAxMUI4OworQjIxNjtCMjE2OzExMDIgMTE2RSAxMUI5O0IyMTY7MTEwMiAxMTZFIDExQjk7CitCMjE3O0IyMTc7MTEwMiAxMTZFIDExQkE7QjIxNzsxMTAyIDExNkUgMTFCQTsKK0IyMTg7QjIxODsxMTAyIDExNkUgMTFCQjtCMjE4OzExMDIgMTE2RSAxMUJCOworQjIxOTtCMjE5OzExMDIgMTE2RSAxMUJDO0IyMTk7MTEwMiAxMTZFIDExQkM7CitCMjFBO0IyMUE7MTEwMiAxMTZFIDExQkQ7QjIxQTsxMTAyIDExNkUgMTFCRDsKK0IyMUI7QjIxQjsxMTAyIDExNkUgMTFCRTtCMjFCOzExMDIgMTE2RSAxMUJFOworQjIxQztCMjFDOzExMDIgMTE2RSAxMUJGO0IyMUM7MTEwMiAxMTZFIDExQkY7CitCMjFEO0IyMUQ7MTEwMiAxMTZFIDExQzA7QjIxRDsxMTAyIDExNkUgMTFDMDsKK0IyMUU7QjIxRTsxMTAyIDExNkUgMTFDMTtCMjFFOzExMDIgMTE2RSAxMUMxOworQjIxRjtCMjFGOzExMDIgMTE2RSAxMUMyO0IyMUY7MTEwMiAxMTZFIDExQzI7CitCMjIwO0IyMjA7MTEwMiAxMTZGO0IyMjA7MTEwMiAxMTZGOworQjIyMTtCMjIxOzExMDIgMTE2RiAxMUE4O0IyMjE7MTEwMiAxMTZGIDExQTg7CitCMjIyO0IyMjI7MTEwMiAxMTZGIDExQTk7QjIyMjsxMTAyIDExNkYgMTFBOTsKK0IyMjM7QjIyMzsxMTAyIDExNkYgMTFBQTtCMjIzOzExMDIgMTE2RiAxMUFBOworQjIyNDtCMjI0OzExMDIgMTE2RiAxMUFCO0IyMjQ7MTEwMiAxMTZGIDExQUI7CitCMjI1O0IyMjU7MTEwMiAxMTZGIDExQUM7QjIyNTsxMTAyIDExNkYgMTFBQzsKK0IyMjY7QjIyNjsxMTAyIDExNkYgMTFBRDtCMjI2OzExMDIgMTE2RiAxMUFEOworQjIyNztCMjI3OzExMDIgMTE2RiAxMUFFO0IyMjc7MTEwMiAxMTZGIDExQUU7CitCMjI4O0IyMjg7MTEwMiAxMTZGIDExQUY7QjIyODsxMTAyIDExNkYgMTFBRjsKK0IyMjk7QjIyOTsxMTAyIDExNkYgMTFCMDtCMjI5OzExMDIgMTE2RiAxMUIwOworQjIyQTtCMjJBOzExMDIgMTE2RiAxMUIxO0IyMkE7MTEwMiAxMTZGIDExQjE7CitCMjJCO0IyMkI7MTEwMiAxMTZGIDExQjI7QjIyQjsxMTAyIDExNkYgMTFCMjsKK0IyMkM7QjIyQzsxMTAyIDExNkYgMTFCMztCMjJDOzExMDIgMTE2RiAxMUIzOworQjIyRDtCMjJEOzExMDIgMTE2RiAxMUI0O0IyMkQ7MTEwMiAxMTZGIDExQjQ7CitCMjJFO0IyMkU7MTEwMiAxMTZGIDExQjU7QjIyRTsxMTAyIDExNkYgMTFCNTsKK0IyMkY7QjIyRjsxMTAyIDExNkYgMTFCNjtCMjJGOzExMDIgMTE2RiAxMUI2OworQjIzMDtCMjMwOzExMDIgMTE2RiAxMUI3O0IyMzA7MTEwMiAxMTZGIDExQjc7CitCMjMxO0IyMzE7MTEwMiAxMTZGIDExQjg7QjIzMTsxMTAyIDExNkYgMTFCODsKK0IyMzI7QjIzMjsxMTAyIDExNkYgMTFCOTtCMjMyOzExMDIgMTE2RiAxMUI5OworQjIzMztCMjMzOzExMDIgMTE2RiAxMUJBO0IyMzM7MTEwMiAxMTZGIDExQkE7CitCMjM0O0IyMzQ7MTEwMiAxMTZGIDExQkI7QjIzNDsxMTAyIDExNkYgMTFCQjsKK0IyMzU7QjIzNTsxMTAyIDExNkYgMTFCQztCMjM1OzExMDIgMTE2RiAxMUJDOworQjIzNjtCMjM2OzExMDIgMTE2RiAxMUJEO0IyMzY7MTEwMiAxMTZGIDExQkQ7CitCMjM3O0IyMzc7MTEwMiAxMTZGIDExQkU7QjIzNzsxMTAyIDExNkYgMTFCRTsKK0IyMzg7QjIzODsxMTAyIDExNkYgMTFCRjtCMjM4OzExMDIgMTE2RiAxMUJGOworQjIzOTtCMjM5OzExMDIgMTE2RiAxMUMwO0IyMzk7MTEwMiAxMTZGIDExQzA7CitCMjNBO0IyM0E7MTEwMiAxMTZGIDExQzE7QjIzQTsxMTAyIDExNkYgMTFDMTsKK0IyM0I7QjIzQjsxMTAyIDExNkYgMTFDMjtCMjNCOzExMDIgMTE2RiAxMUMyOworQjIzQztCMjNDOzExMDIgMTE3MDtCMjNDOzExMDIgMTE3MDsKK0IyM0Q7QjIzRDsxMTAyIDExNzAgMTFBODtCMjNEOzExMDIgMTE3MCAxMUE4OworQjIzRTtCMjNFOzExMDIgMTE3MCAxMUE5O0IyM0U7MTEwMiAxMTcwIDExQTk7CitCMjNGO0IyM0Y7MTEwMiAxMTcwIDExQUE7QjIzRjsxMTAyIDExNzAgMTFBQTsKK0IyNDA7QjI0MDsxMTAyIDExNzAgMTFBQjtCMjQwOzExMDIgMTE3MCAxMUFCOworQjI0MTtCMjQxOzExMDIgMTE3MCAxMUFDO0IyNDE7MTEwMiAxMTcwIDExQUM7CitCMjQyO0IyNDI7MTEwMiAxMTcwIDExQUQ7QjI0MjsxMTAyIDExNzAgMTFBRDsKK0IyNDM7QjI0MzsxMTAyIDExNzAgMTFBRTtCMjQzOzExMDIgMTE3MCAxMUFFOworQjI0NDtCMjQ0OzExMDIgMTE3MCAxMUFGO0IyNDQ7MTEwMiAxMTcwIDExQUY7CitCMjQ1O0IyNDU7MTEwMiAxMTcwIDExQjA7QjI0NTsxMTAyIDExNzAgMTFCMDsKK0IyNDY7QjI0NjsxMTAyIDExNzAgMTFCMTtCMjQ2OzExMDIgMTE3MCAxMUIxOworQjI0NztCMjQ3OzExMDIgMTE3MCAxMUIyO0IyNDc7MTEwMiAxMTcwIDExQjI7CitCMjQ4O0IyNDg7MTEwMiAxMTcwIDExQjM7QjI0ODsxMTAyIDExNzAgMTFCMzsKK0IyNDk7QjI0OTsxMTAyIDExNzAgMTFCNDtCMjQ5OzExMDIgMTE3MCAxMUI0OworQjI0QTtCMjRBOzExMDIgMTE3MCAxMUI1O0IyNEE7MTEwMiAxMTcwIDExQjU7CitCMjRCO0IyNEI7MTEwMiAxMTcwIDExQjY7QjI0QjsxMTAyIDExNzAgMTFCNjsKK0IyNEM7QjI0QzsxMTAyIDExNzAgMTFCNztCMjRDOzExMDIgMTE3MCAxMUI3OworQjI0RDtCMjREOzExMDIgMTE3MCAxMUI4O0IyNEQ7MTEwMiAxMTcwIDExQjg7CitCMjRFO0IyNEU7MTEwMiAxMTcwIDExQjk7QjI0RTsxMTAyIDExNzAgMTFCOTsKK0IyNEY7QjI0RjsxMTAyIDExNzAgMTFCQTtCMjRGOzExMDIgMTE3MCAxMUJBOworQjI1MDtCMjUwOzExMDIgMTE3MCAxMUJCO0IyNTA7MTEwMiAxMTcwIDExQkI7CitCMjUxO0IyNTE7MTEwMiAxMTcwIDExQkM7QjI1MTsxMTAyIDExNzAgMTFCQzsKK0IyNTI7QjI1MjsxMTAyIDExNzAgMTFCRDtCMjUyOzExMDIgMTE3MCAxMUJEOworQjI1MztCMjUzOzExMDIgMTE3MCAxMUJFO0IyNTM7MTEwMiAxMTcwIDExQkU7CitCMjU0O0IyNTQ7MTEwMiAxMTcwIDExQkY7QjI1NDsxMTAyIDExNzAgMTFCRjsKK0IyNTU7QjI1NTsxMTAyIDExNzAgMTFDMDtCMjU1OzExMDIgMTE3MCAxMUMwOworQjI1NjtCMjU2OzExMDIgMTE3MCAxMUMxO0IyNTY7MTEwMiAxMTcwIDExQzE7CitCMjU3O0IyNTc7MTEwMiAxMTcwIDExQzI7QjI1NzsxMTAyIDExNzAgMTFDMjsKK0IyNTg7QjI1ODsxMTAyIDExNzE7QjI1ODsxMTAyIDExNzE7CitCMjU5O0IyNTk7MTEwMiAxMTcxIDExQTg7QjI1OTsxMTAyIDExNzEgMTFBODsKK0IyNUE7QjI1QTsxMTAyIDExNzEgMTFBOTtCMjVBOzExMDIgMTE3MSAxMUE5OworQjI1QjtCMjVCOzExMDIgMTE3MSAxMUFBO0IyNUI7MTEwMiAxMTcxIDExQUE7CitCMjVDO0IyNUM7MTEwMiAxMTcxIDExQUI7QjI1QzsxMTAyIDExNzEgMTFBQjsKK0IyNUQ7QjI1RDsxMTAyIDExNzEgMTFBQztCMjVEOzExMDIgMTE3MSAxMUFDOworQjI1RTtCMjVFOzExMDIgMTE3MSAxMUFEO0IyNUU7MTEwMiAxMTcxIDExQUQ7CitCMjVGO0IyNUY7MTEwMiAxMTcxIDExQUU7QjI1RjsxMTAyIDExNzEgMTFBRTsKK0IyNjA7QjI2MDsxMTAyIDExNzEgMTFBRjtCMjYwOzExMDIgMTE3MSAxMUFGOworQjI2MTtCMjYxOzExMDIgMTE3MSAxMUIwO0IyNjE7MTEwMiAxMTcxIDExQjA7CitCMjYyO0IyNjI7MTEwMiAxMTcxIDExQjE7QjI2MjsxMTAyIDExNzEgMTFCMTsKK0IyNjM7QjI2MzsxMTAyIDExNzEgMTFCMjtCMjYzOzExMDIgMTE3MSAxMUIyOworQjI2NDtCMjY0OzExMDIgMTE3MSAxMUIzO0IyNjQ7MTEwMiAxMTcxIDExQjM7CitCMjY1O0IyNjU7MTEwMiAxMTcxIDExQjQ7QjI2NTsxMTAyIDExNzEgMTFCNDsKK0IyNjY7QjI2NjsxMTAyIDExNzEgMTFCNTtCMjY2OzExMDIgMTE3MSAxMUI1OworQjI2NztCMjY3OzExMDIgMTE3MSAxMUI2O0IyNjc7MTEwMiAxMTcxIDExQjY7CitCMjY4O0IyNjg7MTEwMiAxMTcxIDExQjc7QjI2ODsxMTAyIDExNzEgMTFCNzsKK0IyNjk7QjI2OTsxMTAyIDExNzEgMTFCODtCMjY5OzExMDIgMTE3MSAxMUI4OworQjI2QTtCMjZBOzExMDIgMTE3MSAxMUI5O0IyNkE7MTEwMiAxMTcxIDExQjk7CitCMjZCO0IyNkI7MTEwMiAxMTcxIDExQkE7QjI2QjsxMTAyIDExNzEgMTFCQTsKK0IyNkM7QjI2QzsxMTAyIDExNzEgMTFCQjtCMjZDOzExMDIgMTE3MSAxMUJCOworQjI2RDtCMjZEOzExMDIgMTE3MSAxMUJDO0IyNkQ7MTEwMiAxMTcxIDExQkM7CitCMjZFO0IyNkU7MTEwMiAxMTcxIDExQkQ7QjI2RTsxMTAyIDExNzEgMTFCRDsKK0IyNkY7QjI2RjsxMTAyIDExNzEgMTFCRTtCMjZGOzExMDIgMTE3MSAxMUJFOworQjI3MDtCMjcwOzExMDIgMTE3MSAxMUJGO0IyNzA7MTEwMiAxMTcxIDExQkY7CitCMjcxO0IyNzE7MTEwMiAxMTcxIDExQzA7QjI3MTsxMTAyIDExNzEgMTFDMDsKK0IyNzI7QjI3MjsxMTAyIDExNzEgMTFDMTtCMjcyOzExMDIgMTE3MSAxMUMxOworQjI3MztCMjczOzExMDIgMTE3MSAxMUMyO0IyNzM7MTEwMiAxMTcxIDExQzI7CitCMjc0O0IyNzQ7MTEwMiAxMTcyO0IyNzQ7MTEwMiAxMTcyOworQjI3NTtCMjc1OzExMDIgMTE3MiAxMUE4O0IyNzU7MTEwMiAxMTcyIDExQTg7CitCMjc2O0IyNzY7MTEwMiAxMTcyIDExQTk7QjI3NjsxMTAyIDExNzIgMTFBOTsKK0IyNzc7QjI3NzsxMTAyIDExNzIgMTFBQTtCMjc3OzExMDIgMTE3MiAxMUFBOworQjI3ODtCMjc4OzExMDIgMTE3MiAxMUFCO0IyNzg7MTEwMiAxMTcyIDExQUI7CitCMjc5O0IyNzk7MTEwMiAxMTcyIDExQUM7QjI3OTsxMTAyIDExNzIgMTFBQzsKK0IyN0E7QjI3QTsxMTAyIDExNzIgMTFBRDtCMjdBOzExMDIgMTE3MiAxMUFEOworQjI3QjtCMjdCOzExMDIgMTE3MiAxMUFFO0IyN0I7MTEwMiAxMTcyIDExQUU7CitCMjdDO0IyN0M7MTEwMiAxMTcyIDExQUY7QjI3QzsxMTAyIDExNzIgMTFBRjsKK0IyN0Q7QjI3RDsxMTAyIDExNzIgMTFCMDtCMjdEOzExMDIgMTE3MiAxMUIwOworQjI3RTtCMjdFOzExMDIgMTE3MiAxMUIxO0IyN0U7MTEwMiAxMTcyIDExQjE7CitCMjdGO0IyN0Y7MTEwMiAxMTcyIDExQjI7QjI3RjsxMTAyIDExNzIgMTFCMjsKK0IyODA7QjI4MDsxMTAyIDExNzIgMTFCMztCMjgwOzExMDIgMTE3MiAxMUIzOworQjI4MTtCMjgxOzExMDIgMTE3MiAxMUI0O0IyODE7MTEwMiAxMTcyIDExQjQ7CitCMjgyO0IyODI7MTEwMiAxMTcyIDExQjU7QjI4MjsxMTAyIDExNzIgMTFCNTsKK0IyODM7QjI4MzsxMTAyIDExNzIgMTFCNjtCMjgzOzExMDIgMTE3MiAxMUI2OworQjI4NDtCMjg0OzExMDIgMTE3MiAxMUI3O0IyODQ7MTEwMiAxMTcyIDExQjc7CitCMjg1O0IyODU7MTEwMiAxMTcyIDExQjg7QjI4NTsxMTAyIDExNzIgMTFCODsKK0IyODY7QjI4NjsxMTAyIDExNzIgMTFCOTtCMjg2OzExMDIgMTE3MiAxMUI5OworQjI4NztCMjg3OzExMDIgMTE3MiAxMUJBO0IyODc7MTEwMiAxMTcyIDExQkE7CitCMjg4O0IyODg7MTEwMiAxMTcyIDExQkI7QjI4ODsxMTAyIDExNzIgMTFCQjsKK0IyODk7QjI4OTsxMTAyIDExNzIgMTFCQztCMjg5OzExMDIgMTE3MiAxMUJDOworQjI4QTtCMjhBOzExMDIgMTE3MiAxMUJEO0IyOEE7MTEwMiAxMTcyIDExQkQ7CitCMjhCO0IyOEI7MTEwMiAxMTcyIDExQkU7QjI4QjsxMTAyIDExNzIgMTFCRTsKK0IyOEM7QjI4QzsxMTAyIDExNzIgMTFCRjtCMjhDOzExMDIgMTE3MiAxMUJGOworQjI4RDtCMjhEOzExMDIgMTE3MiAxMUMwO0IyOEQ7MTEwMiAxMTcyIDExQzA7CitCMjhFO0IyOEU7MTEwMiAxMTcyIDExQzE7QjI4RTsxMTAyIDExNzIgMTFDMTsKK0IyOEY7QjI4RjsxMTAyIDExNzIgMTFDMjtCMjhGOzExMDIgMTE3MiAxMUMyOworQjI5MDtCMjkwOzExMDIgMTE3MztCMjkwOzExMDIgMTE3MzsKK0IyOTE7QjI5MTsxMTAyIDExNzMgMTFBODtCMjkxOzExMDIgMTE3MyAxMUE4OworQjI5MjtCMjkyOzExMDIgMTE3MyAxMUE5O0IyOTI7MTEwMiAxMTczIDExQTk7CitCMjkzO0IyOTM7MTEwMiAxMTczIDExQUE7QjI5MzsxMTAyIDExNzMgMTFBQTsKK0IyOTQ7QjI5NDsxMTAyIDExNzMgMTFBQjtCMjk0OzExMDIgMTE3MyAxMUFCOworQjI5NTtCMjk1OzExMDIgMTE3MyAxMUFDO0IyOTU7MTEwMiAxMTczIDExQUM7CitCMjk2O0IyOTY7MTEwMiAxMTczIDExQUQ7QjI5NjsxMTAyIDExNzMgMTFBRDsKK0IyOTc7QjI5NzsxMTAyIDExNzMgMTFBRTtCMjk3OzExMDIgMTE3MyAxMUFFOworQjI5ODtCMjk4OzExMDIgMTE3MyAxMUFGO0IyOTg7MTEwMiAxMTczIDExQUY7CitCMjk5O0IyOTk7MTEwMiAxMTczIDExQjA7QjI5OTsxMTAyIDExNzMgMTFCMDsKK0IyOUE7QjI5QTsxMTAyIDExNzMgMTFCMTtCMjlBOzExMDIgMTE3MyAxMUIxOworQjI5QjtCMjlCOzExMDIgMTE3MyAxMUIyO0IyOUI7MTEwMiAxMTczIDExQjI7CitCMjlDO0IyOUM7MTEwMiAxMTczIDExQjM7QjI5QzsxMTAyIDExNzMgMTFCMzsKK0IyOUQ7QjI5RDsxMTAyIDExNzMgMTFCNDtCMjlEOzExMDIgMTE3MyAxMUI0OworQjI5RTtCMjlFOzExMDIgMTE3MyAxMUI1O0IyOUU7MTEwMiAxMTczIDExQjU7CitCMjlGO0IyOUY7MTEwMiAxMTczIDExQjY7QjI5RjsxMTAyIDExNzMgMTFCNjsKK0IyQTA7QjJBMDsxMTAyIDExNzMgMTFCNztCMkEwOzExMDIgMTE3MyAxMUI3OworQjJBMTtCMkExOzExMDIgMTE3MyAxMUI4O0IyQTE7MTEwMiAxMTczIDExQjg7CitCMkEyO0IyQTI7MTEwMiAxMTczIDExQjk7QjJBMjsxMTAyIDExNzMgMTFCOTsKK0IyQTM7QjJBMzsxMTAyIDExNzMgMTFCQTtCMkEzOzExMDIgMTE3MyAxMUJBOworQjJBNDtCMkE0OzExMDIgMTE3MyAxMUJCO0IyQTQ7MTEwMiAxMTczIDExQkI7CitCMkE1O0IyQTU7MTEwMiAxMTczIDExQkM7QjJBNTsxMTAyIDExNzMgMTFCQzsKK0IyQTY7QjJBNjsxMTAyIDExNzMgMTFCRDtCMkE2OzExMDIgMTE3MyAxMUJEOworQjJBNztCMkE3OzExMDIgMTE3MyAxMUJFO0IyQTc7MTEwMiAxMTczIDExQkU7CitCMkE4O0IyQTg7MTEwMiAxMTczIDExQkY7QjJBODsxMTAyIDExNzMgMTFCRjsKK0IyQTk7QjJBOTsxMTAyIDExNzMgMTFDMDtCMkE5OzExMDIgMTE3MyAxMUMwOworQjJBQTtCMkFBOzExMDIgMTE3MyAxMUMxO0IyQUE7MTEwMiAxMTczIDExQzE7CitCMkFCO0IyQUI7MTEwMiAxMTczIDExQzI7QjJBQjsxMTAyIDExNzMgMTFDMjsKK0IyQUM7QjJBQzsxMTAyIDExNzQ7QjJBQzsxMTAyIDExNzQ7CitCMkFEO0IyQUQ7MTEwMiAxMTc0IDExQTg7QjJBRDsxMTAyIDExNzQgMTFBODsKK0IyQUU7QjJBRTsxMTAyIDExNzQgMTFBOTtCMkFFOzExMDIgMTE3NCAxMUE5OworQjJBRjtCMkFGOzExMDIgMTE3NCAxMUFBO0IyQUY7MTEwMiAxMTc0IDExQUE7CitCMkIwO0IyQjA7MTEwMiAxMTc0IDExQUI7QjJCMDsxMTAyIDExNzQgMTFBQjsKK0IyQjE7QjJCMTsxMTAyIDExNzQgMTFBQztCMkIxOzExMDIgMTE3NCAxMUFDOworQjJCMjtCMkIyOzExMDIgMTE3NCAxMUFEO0IyQjI7MTEwMiAxMTc0IDExQUQ7CitCMkIzO0IyQjM7MTEwMiAxMTc0IDExQUU7QjJCMzsxMTAyIDExNzQgMTFBRTsKK0IyQjQ7QjJCNDsxMTAyIDExNzQgMTFBRjtCMkI0OzExMDIgMTE3NCAxMUFGOworQjJCNTtCMkI1OzExMDIgMTE3NCAxMUIwO0IyQjU7MTEwMiAxMTc0IDExQjA7CitCMkI2O0IyQjY7MTEwMiAxMTc0IDExQjE7QjJCNjsxMTAyIDExNzQgMTFCMTsKK0IyQjc7QjJCNzsxMTAyIDExNzQgMTFCMjtCMkI3OzExMDIgMTE3NCAxMUIyOworQjJCODtCMkI4OzExMDIgMTE3NCAxMUIzO0IyQjg7MTEwMiAxMTc0IDExQjM7CitCMkI5O0IyQjk7MTEwMiAxMTc0IDExQjQ7QjJCOTsxMTAyIDExNzQgMTFCNDsKK0IyQkE7QjJCQTsxMTAyIDExNzQgMTFCNTtCMkJBOzExMDIgMTE3NCAxMUI1OworQjJCQjtCMkJCOzExMDIgMTE3NCAxMUI2O0IyQkI7MTEwMiAxMTc0IDExQjY7CitCMkJDO0IyQkM7MTEwMiAxMTc0IDExQjc7QjJCQzsxMTAyIDExNzQgMTFCNzsKK0IyQkQ7QjJCRDsxMTAyIDExNzQgMTFCODtCMkJEOzExMDIgMTE3NCAxMUI4OworQjJCRTtCMkJFOzExMDIgMTE3NCAxMUI5O0IyQkU7MTEwMiAxMTc0IDExQjk7CitCMkJGO0IyQkY7MTEwMiAxMTc0IDExQkE7QjJCRjsxMTAyIDExNzQgMTFCQTsKK0IyQzA7QjJDMDsxMTAyIDExNzQgMTFCQjtCMkMwOzExMDIgMTE3NCAxMUJCOworQjJDMTtCMkMxOzExMDIgMTE3NCAxMUJDO0IyQzE7MTEwMiAxMTc0IDExQkM7CitCMkMyO0IyQzI7MTEwMiAxMTc0IDExQkQ7QjJDMjsxMTAyIDExNzQgMTFCRDsKK0IyQzM7QjJDMzsxMTAyIDExNzQgMTFCRTtCMkMzOzExMDIgMTE3NCAxMUJFOworQjJDNDtCMkM0OzExMDIgMTE3NCAxMUJGO0IyQzQ7MTEwMiAxMTc0IDExQkY7CitCMkM1O0IyQzU7MTEwMiAxMTc0IDExQzA7QjJDNTsxMTAyIDExNzQgMTFDMDsKK0IyQzY7QjJDNjsxMTAyIDExNzQgMTFDMTtCMkM2OzExMDIgMTE3NCAxMUMxOworQjJDNztCMkM3OzExMDIgMTE3NCAxMUMyO0IyQzc7MTEwMiAxMTc0IDExQzI7CitCMkM4O0IyQzg7MTEwMiAxMTc1O0IyQzg7MTEwMiAxMTc1OworQjJDOTtCMkM5OzExMDIgMTE3NSAxMUE4O0IyQzk7MTEwMiAxMTc1IDExQTg7CitCMkNBO0IyQ0E7MTEwMiAxMTc1IDExQTk7QjJDQTsxMTAyIDExNzUgMTFBOTsKK0IyQ0I7QjJDQjsxMTAyIDExNzUgMTFBQTtCMkNCOzExMDIgMTE3NSAxMUFBOworQjJDQztCMkNDOzExMDIgMTE3NSAxMUFCO0IyQ0M7MTEwMiAxMTc1IDExQUI7CitCMkNEO0IyQ0Q7MTEwMiAxMTc1IDExQUM7QjJDRDsxMTAyIDExNzUgMTFBQzsKK0IyQ0U7QjJDRTsxMTAyIDExNzUgMTFBRDtCMkNFOzExMDIgMTE3NSAxMUFEOworQjJDRjtCMkNGOzExMDIgMTE3NSAxMUFFO0IyQ0Y7MTEwMiAxMTc1IDExQUU7CitCMkQwO0IyRDA7MTEwMiAxMTc1IDExQUY7QjJEMDsxMTAyIDExNzUgMTFBRjsKK0IyRDE7QjJEMTsxMTAyIDExNzUgMTFCMDtCMkQxOzExMDIgMTE3NSAxMUIwOworQjJEMjtCMkQyOzExMDIgMTE3NSAxMUIxO0IyRDI7MTEwMiAxMTc1IDExQjE7CitCMkQzO0IyRDM7MTEwMiAxMTc1IDExQjI7QjJEMzsxMTAyIDExNzUgMTFCMjsKK0IyRDQ7QjJENDsxMTAyIDExNzUgMTFCMztCMkQ0OzExMDIgMTE3NSAxMUIzOworQjJENTtCMkQ1OzExMDIgMTE3NSAxMUI0O0IyRDU7MTEwMiAxMTc1IDExQjQ7CitCMkQ2O0IyRDY7MTEwMiAxMTc1IDExQjU7QjJENjsxMTAyIDExNzUgMTFCNTsKK0IyRDc7QjJENzsxMTAyIDExNzUgMTFCNjtCMkQ3OzExMDIgMTE3NSAxMUI2OworQjJEODtCMkQ4OzExMDIgMTE3NSAxMUI3O0IyRDg7MTEwMiAxMTc1IDExQjc7CitCMkQ5O0IyRDk7MTEwMiAxMTc1IDExQjg7QjJEOTsxMTAyIDExNzUgMTFCODsKK0IyREE7QjJEQTsxMTAyIDExNzUgMTFCOTtCMkRBOzExMDIgMTE3NSAxMUI5OworQjJEQjtCMkRCOzExMDIgMTE3NSAxMUJBO0IyREI7MTEwMiAxMTc1IDExQkE7CitCMkRDO0IyREM7MTEwMiAxMTc1IDExQkI7QjJEQzsxMTAyIDExNzUgMTFCQjsKK0IyREQ7QjJERDsxMTAyIDExNzUgMTFCQztCMkREOzExMDIgMTE3NSAxMUJDOworQjJERTtCMkRFOzExMDIgMTE3NSAxMUJEO0IyREU7MTEwMiAxMTc1IDExQkQ7CitCMkRGO0IyREY7MTEwMiAxMTc1IDExQkU7QjJERjsxMTAyIDExNzUgMTFCRTsKK0IyRTA7QjJFMDsxMTAyIDExNzUgMTFCRjtCMkUwOzExMDIgMTE3NSAxMUJGOworQjJFMTtCMkUxOzExMDIgMTE3NSAxMUMwO0IyRTE7MTEwMiAxMTc1IDExQzA7CitCMkUyO0IyRTI7MTEwMiAxMTc1IDExQzE7QjJFMjsxMTAyIDExNzUgMTFDMTsKK0IyRTM7QjJFMzsxMTAyIDExNzUgMTFDMjtCMkUzOzExMDIgMTE3NSAxMUMyOworQjJFNDtCMkU0OzExMDMgMTE2MTtCMkU0OzExMDMgMTE2MTsKK0IyRTU7QjJFNTsxMTAzIDExNjEgMTFBODtCMkU1OzExMDMgMTE2MSAxMUE4OworQjJFNjtCMkU2OzExMDMgMTE2MSAxMUE5O0IyRTY7MTEwMyAxMTYxIDExQTk7CitCMkU3O0IyRTc7MTEwMyAxMTYxIDExQUE7QjJFNzsxMTAzIDExNjEgMTFBQTsKK0IyRTg7QjJFODsxMTAzIDExNjEgMTFBQjtCMkU4OzExMDMgMTE2MSAxMUFCOworQjJFOTtCMkU5OzExMDMgMTE2MSAxMUFDO0IyRTk7MTEwMyAxMTYxIDExQUM7CitCMkVBO0IyRUE7MTEwMyAxMTYxIDExQUQ7QjJFQTsxMTAzIDExNjEgMTFBRDsKK0IyRUI7QjJFQjsxMTAzIDExNjEgMTFBRTtCMkVCOzExMDMgMTE2MSAxMUFFOworQjJFQztCMkVDOzExMDMgMTE2MSAxMUFGO0IyRUM7MTEwMyAxMTYxIDExQUY7CitCMkVEO0IyRUQ7MTEwMyAxMTYxIDExQjA7QjJFRDsxMTAzIDExNjEgMTFCMDsKK0IyRUU7QjJFRTsxMTAzIDExNjEgMTFCMTtCMkVFOzExMDMgMTE2MSAxMUIxOworQjJFRjtCMkVGOzExMDMgMTE2MSAxMUIyO0IyRUY7MTEwMyAxMTYxIDExQjI7CitCMkYwO0IyRjA7MTEwMyAxMTYxIDExQjM7QjJGMDsxMTAzIDExNjEgMTFCMzsKK0IyRjE7QjJGMTsxMTAzIDExNjEgMTFCNDtCMkYxOzExMDMgMTE2MSAxMUI0OworQjJGMjtCMkYyOzExMDMgMTE2MSAxMUI1O0IyRjI7MTEwMyAxMTYxIDExQjU7CitCMkYzO0IyRjM7MTEwMyAxMTYxIDExQjY7QjJGMzsxMTAzIDExNjEgMTFCNjsKK0IyRjQ7QjJGNDsxMTAzIDExNjEgMTFCNztCMkY0OzExMDMgMTE2MSAxMUI3OworQjJGNTtCMkY1OzExMDMgMTE2MSAxMUI4O0IyRjU7MTEwMyAxMTYxIDExQjg7CitCMkY2O0IyRjY7MTEwMyAxMTYxIDExQjk7QjJGNjsxMTAzIDExNjEgMTFCOTsKK0IyRjc7QjJGNzsxMTAzIDExNjEgMTFCQTtCMkY3OzExMDMgMTE2MSAxMUJBOworQjJGODtCMkY4OzExMDMgMTE2MSAxMUJCO0IyRjg7MTEwMyAxMTYxIDExQkI7CitCMkY5O0IyRjk7MTEwMyAxMTYxIDExQkM7QjJGOTsxMTAzIDExNjEgMTFCQzsKK0IyRkE7QjJGQTsxMTAzIDExNjEgMTFCRDtCMkZBOzExMDMgMTE2MSAxMUJEOworQjJGQjtCMkZCOzExMDMgMTE2MSAxMUJFO0IyRkI7MTEwMyAxMTYxIDExQkU7CitCMkZDO0IyRkM7MTEwMyAxMTYxIDExQkY7QjJGQzsxMTAzIDExNjEgMTFCRjsKK0IyRkQ7QjJGRDsxMTAzIDExNjEgMTFDMDtCMkZEOzExMDMgMTE2MSAxMUMwOworQjJGRTtCMkZFOzExMDMgMTE2MSAxMUMxO0IyRkU7MTEwMyAxMTYxIDExQzE7CitCMkZGO0IyRkY7MTEwMyAxMTYxIDExQzI7QjJGRjsxMTAzIDExNjEgMTFDMjsKK0IzMDA7QjMwMDsxMTAzIDExNjI7QjMwMDsxMTAzIDExNjI7CitCMzAxO0IzMDE7MTEwMyAxMTYyIDExQTg7QjMwMTsxMTAzIDExNjIgMTFBODsKK0IzMDI7QjMwMjsxMTAzIDExNjIgMTFBOTtCMzAyOzExMDMgMTE2MiAxMUE5OworQjMwMztCMzAzOzExMDMgMTE2MiAxMUFBO0IzMDM7MTEwMyAxMTYyIDExQUE7CitCMzA0O0IzMDQ7MTEwMyAxMTYyIDExQUI7QjMwNDsxMTAzIDExNjIgMTFBQjsKK0IzMDU7QjMwNTsxMTAzIDExNjIgMTFBQztCMzA1OzExMDMgMTE2MiAxMUFDOworQjMwNjtCMzA2OzExMDMgMTE2MiAxMUFEO0IzMDY7MTEwMyAxMTYyIDExQUQ7CitCMzA3O0IzMDc7MTEwMyAxMTYyIDExQUU7QjMwNzsxMTAzIDExNjIgMTFBRTsKK0IzMDg7QjMwODsxMTAzIDExNjIgMTFBRjtCMzA4OzExMDMgMTE2MiAxMUFGOworQjMwOTtCMzA5OzExMDMgMTE2MiAxMUIwO0IzMDk7MTEwMyAxMTYyIDExQjA7CitCMzBBO0IzMEE7MTEwMyAxMTYyIDExQjE7QjMwQTsxMTAzIDExNjIgMTFCMTsKK0IzMEI7QjMwQjsxMTAzIDExNjIgMTFCMjtCMzBCOzExMDMgMTE2MiAxMUIyOworQjMwQztCMzBDOzExMDMgMTE2MiAxMUIzO0IzMEM7MTEwMyAxMTYyIDExQjM7CitCMzBEO0IzMEQ7MTEwMyAxMTYyIDExQjQ7QjMwRDsxMTAzIDExNjIgMTFCNDsKK0IzMEU7QjMwRTsxMTAzIDExNjIgMTFCNTtCMzBFOzExMDMgMTE2MiAxMUI1OworQjMwRjtCMzBGOzExMDMgMTE2MiAxMUI2O0IzMEY7MTEwMyAxMTYyIDExQjY7CitCMzEwO0IzMTA7MTEwMyAxMTYyIDExQjc7QjMxMDsxMTAzIDExNjIgMTFCNzsKK0IzMTE7QjMxMTsxMTAzIDExNjIgMTFCODtCMzExOzExMDMgMTE2MiAxMUI4OworQjMxMjtCMzEyOzExMDMgMTE2MiAxMUI5O0IzMTI7MTEwMyAxMTYyIDExQjk7CitCMzEzO0IzMTM7MTEwMyAxMTYyIDExQkE7QjMxMzsxMTAzIDExNjIgMTFCQTsKK0IzMTQ7QjMxNDsxMTAzIDExNjIgMTFCQjtCMzE0OzExMDMgMTE2MiAxMUJCOworQjMxNTtCMzE1OzExMDMgMTE2MiAxMUJDO0IzMTU7MTEwMyAxMTYyIDExQkM7CitCMzE2O0IzMTY7MTEwMyAxMTYyIDExQkQ7QjMxNjsxMTAzIDExNjIgMTFCRDsKK0IzMTc7QjMxNzsxMTAzIDExNjIgMTFCRTtCMzE3OzExMDMgMTE2MiAxMUJFOworQjMxODtCMzE4OzExMDMgMTE2MiAxMUJGO0IzMTg7MTEwMyAxMTYyIDExQkY7CitCMzE5O0IzMTk7MTEwMyAxMTYyIDExQzA7QjMxOTsxMTAzIDExNjIgMTFDMDsKK0IzMUE7QjMxQTsxMTAzIDExNjIgMTFDMTtCMzFBOzExMDMgMTE2MiAxMUMxOworQjMxQjtCMzFCOzExMDMgMTE2MiAxMUMyO0IzMUI7MTEwMyAxMTYyIDExQzI7CitCMzFDO0IzMUM7MTEwMyAxMTYzO0IzMUM7MTEwMyAxMTYzOworQjMxRDtCMzFEOzExMDMgMTE2MyAxMUE4O0IzMUQ7MTEwMyAxMTYzIDExQTg7CitCMzFFO0IzMUU7MTEwMyAxMTYzIDExQTk7QjMxRTsxMTAzIDExNjMgMTFBOTsKK0IzMUY7QjMxRjsxMTAzIDExNjMgMTFBQTtCMzFGOzExMDMgMTE2MyAxMUFBOworQjMyMDtCMzIwOzExMDMgMTE2MyAxMUFCO0IzMjA7MTEwMyAxMTYzIDExQUI7CitCMzIxO0IzMjE7MTEwMyAxMTYzIDExQUM7QjMyMTsxMTAzIDExNjMgMTFBQzsKK0IzMjI7QjMyMjsxMTAzIDExNjMgMTFBRDtCMzIyOzExMDMgMTE2MyAxMUFEOworQjMyMztCMzIzOzExMDMgMTE2MyAxMUFFO0IzMjM7MTEwMyAxMTYzIDExQUU7CitCMzI0O0IzMjQ7MTEwMyAxMTYzIDExQUY7QjMyNDsxMTAzIDExNjMgMTFBRjsKK0IzMjU7QjMyNTsxMTAzIDExNjMgMTFCMDtCMzI1OzExMDMgMTE2MyAxMUIwOworQjMyNjtCMzI2OzExMDMgMTE2MyAxMUIxO0IzMjY7MTEwMyAxMTYzIDExQjE7CitCMzI3O0IzMjc7MTEwMyAxMTYzIDExQjI7QjMyNzsxMTAzIDExNjMgMTFCMjsKK0IzMjg7QjMyODsxMTAzIDExNjMgMTFCMztCMzI4OzExMDMgMTE2MyAxMUIzOworQjMyOTtCMzI5OzExMDMgMTE2MyAxMUI0O0IzMjk7MTEwMyAxMTYzIDExQjQ7CitCMzJBO0IzMkE7MTEwMyAxMTYzIDExQjU7QjMyQTsxMTAzIDExNjMgMTFCNTsKK0IzMkI7QjMyQjsxMTAzIDExNjMgMTFCNjtCMzJCOzExMDMgMTE2MyAxMUI2OworQjMyQztCMzJDOzExMDMgMTE2MyAxMUI3O0IzMkM7MTEwMyAxMTYzIDExQjc7CitCMzJEO0IzMkQ7MTEwMyAxMTYzIDExQjg7QjMyRDsxMTAzIDExNjMgMTFCODsKK0IzMkU7QjMyRTsxMTAzIDExNjMgMTFCOTtCMzJFOzExMDMgMTE2MyAxMUI5OworQjMyRjtCMzJGOzExMDMgMTE2MyAxMUJBO0IzMkY7MTEwMyAxMTYzIDExQkE7CitCMzMwO0IzMzA7MTEwMyAxMTYzIDExQkI7QjMzMDsxMTAzIDExNjMgMTFCQjsKK0IzMzE7QjMzMTsxMTAzIDExNjMgMTFCQztCMzMxOzExMDMgMTE2MyAxMUJDOworQjMzMjtCMzMyOzExMDMgMTE2MyAxMUJEO0IzMzI7MTEwMyAxMTYzIDExQkQ7CitCMzMzO0IzMzM7MTEwMyAxMTYzIDExQkU7QjMzMzsxMTAzIDExNjMgMTFCRTsKK0IzMzQ7QjMzNDsxMTAzIDExNjMgMTFCRjtCMzM0OzExMDMgMTE2MyAxMUJGOworQjMzNTtCMzM1OzExMDMgMTE2MyAxMUMwO0IzMzU7MTEwMyAxMTYzIDExQzA7CitCMzM2O0IzMzY7MTEwMyAxMTYzIDExQzE7QjMzNjsxMTAzIDExNjMgMTFDMTsKK0IzMzc7QjMzNzsxMTAzIDExNjMgMTFDMjtCMzM3OzExMDMgMTE2MyAxMUMyOworQjMzODtCMzM4OzExMDMgMTE2NDtCMzM4OzExMDMgMTE2NDsKK0IzMzk7QjMzOTsxMTAzIDExNjQgMTFBODtCMzM5OzExMDMgMTE2NCAxMUE4OworQjMzQTtCMzNBOzExMDMgMTE2NCAxMUE5O0IzM0E7MTEwMyAxMTY0IDExQTk7CitCMzNCO0IzM0I7MTEwMyAxMTY0IDExQUE7QjMzQjsxMTAzIDExNjQgMTFBQTsKK0IzM0M7QjMzQzsxMTAzIDExNjQgMTFBQjtCMzNDOzExMDMgMTE2NCAxMUFCOworQjMzRDtCMzNEOzExMDMgMTE2NCAxMUFDO0IzM0Q7MTEwMyAxMTY0IDExQUM7CitCMzNFO0IzM0U7MTEwMyAxMTY0IDExQUQ7QjMzRTsxMTAzIDExNjQgMTFBRDsKK0IzM0Y7QjMzRjsxMTAzIDExNjQgMTFBRTtCMzNGOzExMDMgMTE2NCAxMUFFOworQjM0MDtCMzQwOzExMDMgMTE2NCAxMUFGO0IzNDA7MTEwMyAxMTY0IDExQUY7CitCMzQxO0IzNDE7MTEwMyAxMTY0IDExQjA7QjM0MTsxMTAzIDExNjQgMTFCMDsKK0IzNDI7QjM0MjsxMTAzIDExNjQgMTFCMTtCMzQyOzExMDMgMTE2NCAxMUIxOworQjM0MztCMzQzOzExMDMgMTE2NCAxMUIyO0IzNDM7MTEwMyAxMTY0IDExQjI7CitCMzQ0O0IzNDQ7MTEwMyAxMTY0IDExQjM7QjM0NDsxMTAzIDExNjQgMTFCMzsKK0IzNDU7QjM0NTsxMTAzIDExNjQgMTFCNDtCMzQ1OzExMDMgMTE2NCAxMUI0OworQjM0NjtCMzQ2OzExMDMgMTE2NCAxMUI1O0IzNDY7MTEwMyAxMTY0IDExQjU7CitCMzQ3O0IzNDc7MTEwMyAxMTY0IDExQjY7QjM0NzsxMTAzIDExNjQgMTFCNjsKK0IzNDg7QjM0ODsxMTAzIDExNjQgMTFCNztCMzQ4OzExMDMgMTE2NCAxMUI3OworQjM0OTtCMzQ5OzExMDMgMTE2NCAxMUI4O0IzNDk7MTEwMyAxMTY0IDExQjg7CitCMzRBO0IzNEE7MTEwMyAxMTY0IDExQjk7QjM0QTsxMTAzIDExNjQgMTFCOTsKK0IzNEI7QjM0QjsxMTAzIDExNjQgMTFCQTtCMzRCOzExMDMgMTE2NCAxMUJBOworQjM0QztCMzRDOzExMDMgMTE2NCAxMUJCO0IzNEM7MTEwMyAxMTY0IDExQkI7CitCMzREO0IzNEQ7MTEwMyAxMTY0IDExQkM7QjM0RDsxMTAzIDExNjQgMTFCQzsKK0IzNEU7QjM0RTsxMTAzIDExNjQgMTFCRDtCMzRFOzExMDMgMTE2NCAxMUJEOworQjM0RjtCMzRGOzExMDMgMTE2NCAxMUJFO0IzNEY7MTEwMyAxMTY0IDExQkU7CitCMzUwO0IzNTA7MTEwMyAxMTY0IDExQkY7QjM1MDsxMTAzIDExNjQgMTFCRjsKK0IzNTE7QjM1MTsxMTAzIDExNjQgMTFDMDtCMzUxOzExMDMgMTE2NCAxMUMwOworQjM1MjtCMzUyOzExMDMgMTE2NCAxMUMxO0IzNTI7MTEwMyAxMTY0IDExQzE7CitCMzUzO0IzNTM7MTEwMyAxMTY0IDExQzI7QjM1MzsxMTAzIDExNjQgMTFDMjsKK0IzNTQ7QjM1NDsxMTAzIDExNjU7QjM1NDsxMTAzIDExNjU7CitCMzU1O0IzNTU7MTEwMyAxMTY1IDExQTg7QjM1NTsxMTAzIDExNjUgMTFBODsKK0IzNTY7QjM1NjsxMTAzIDExNjUgMTFBOTtCMzU2OzExMDMgMTE2NSAxMUE5OworQjM1NztCMzU3OzExMDMgMTE2NSAxMUFBO0IzNTc7MTEwMyAxMTY1IDExQUE7CitCMzU4O0IzNTg7MTEwMyAxMTY1IDExQUI7QjM1ODsxMTAzIDExNjUgMTFBQjsKK0IzNTk7QjM1OTsxMTAzIDExNjUgMTFBQztCMzU5OzExMDMgMTE2NSAxMUFDOworQjM1QTtCMzVBOzExMDMgMTE2NSAxMUFEO0IzNUE7MTEwMyAxMTY1IDExQUQ7CitCMzVCO0IzNUI7MTEwMyAxMTY1IDExQUU7QjM1QjsxMTAzIDExNjUgMTFBRTsKK0IzNUM7QjM1QzsxMTAzIDExNjUgMTFBRjtCMzVDOzExMDMgMTE2NSAxMUFGOworQjM1RDtCMzVEOzExMDMgMTE2NSAxMUIwO0IzNUQ7MTEwMyAxMTY1IDExQjA7CitCMzVFO0IzNUU7MTEwMyAxMTY1IDExQjE7QjM1RTsxMTAzIDExNjUgMTFCMTsKK0IzNUY7QjM1RjsxMTAzIDExNjUgMTFCMjtCMzVGOzExMDMgMTE2NSAxMUIyOworQjM2MDtCMzYwOzExMDMgMTE2NSAxMUIzO0IzNjA7MTEwMyAxMTY1IDExQjM7CitCMzYxO0IzNjE7MTEwMyAxMTY1IDExQjQ7QjM2MTsxMTAzIDExNjUgMTFCNDsKK0IzNjI7QjM2MjsxMTAzIDExNjUgMTFCNTtCMzYyOzExMDMgMTE2NSAxMUI1OworQjM2MztCMzYzOzExMDMgMTE2NSAxMUI2O0IzNjM7MTEwMyAxMTY1IDExQjY7CitCMzY0O0IzNjQ7MTEwMyAxMTY1IDExQjc7QjM2NDsxMTAzIDExNjUgMTFCNzsKK0IzNjU7QjM2NTsxMTAzIDExNjUgMTFCODtCMzY1OzExMDMgMTE2NSAxMUI4OworQjM2NjtCMzY2OzExMDMgMTE2NSAxMUI5O0IzNjY7MTEwMyAxMTY1IDExQjk7CitCMzY3O0IzNjc7MTEwMyAxMTY1IDExQkE7QjM2NzsxMTAzIDExNjUgMTFCQTsKK0IzNjg7QjM2ODsxMTAzIDExNjUgMTFCQjtCMzY4OzExMDMgMTE2NSAxMUJCOworQjM2OTtCMzY5OzExMDMgMTE2NSAxMUJDO0IzNjk7MTEwMyAxMTY1IDExQkM7CitCMzZBO0IzNkE7MTEwMyAxMTY1IDExQkQ7QjM2QTsxMTAzIDExNjUgMTFCRDsKK0IzNkI7QjM2QjsxMTAzIDExNjUgMTFCRTtCMzZCOzExMDMgMTE2NSAxMUJFOworQjM2QztCMzZDOzExMDMgMTE2NSAxMUJGO0IzNkM7MTEwMyAxMTY1IDExQkY7CitCMzZEO0IzNkQ7MTEwMyAxMTY1IDExQzA7QjM2RDsxMTAzIDExNjUgMTFDMDsKK0IzNkU7QjM2RTsxMTAzIDExNjUgMTFDMTtCMzZFOzExMDMgMTE2NSAxMUMxOworQjM2RjtCMzZGOzExMDMgMTE2NSAxMUMyO0IzNkY7MTEwMyAxMTY1IDExQzI7CitCMzcwO0IzNzA7MTEwMyAxMTY2O0IzNzA7MTEwMyAxMTY2OworQjM3MTtCMzcxOzExMDMgMTE2NiAxMUE4O0IzNzE7MTEwMyAxMTY2IDExQTg7CitCMzcyO0IzNzI7MTEwMyAxMTY2IDExQTk7QjM3MjsxMTAzIDExNjYgMTFBOTsKK0IzNzM7QjM3MzsxMTAzIDExNjYgMTFBQTtCMzczOzExMDMgMTE2NiAxMUFBOworQjM3NDtCMzc0OzExMDMgMTE2NiAxMUFCO0IzNzQ7MTEwMyAxMTY2IDExQUI7CitCMzc1O0IzNzU7MTEwMyAxMTY2IDExQUM7QjM3NTsxMTAzIDExNjYgMTFBQzsKK0IzNzY7QjM3NjsxMTAzIDExNjYgMTFBRDtCMzc2OzExMDMgMTE2NiAxMUFEOworQjM3NztCMzc3OzExMDMgMTE2NiAxMUFFO0IzNzc7MTEwMyAxMTY2IDExQUU7CitCMzc4O0IzNzg7MTEwMyAxMTY2IDExQUY7QjM3ODsxMTAzIDExNjYgMTFBRjsKK0IzNzk7QjM3OTsxMTAzIDExNjYgMTFCMDtCMzc5OzExMDMgMTE2NiAxMUIwOworQjM3QTtCMzdBOzExMDMgMTE2NiAxMUIxO0IzN0E7MTEwMyAxMTY2IDExQjE7CitCMzdCO0IzN0I7MTEwMyAxMTY2IDExQjI7QjM3QjsxMTAzIDExNjYgMTFCMjsKK0IzN0M7QjM3QzsxMTAzIDExNjYgMTFCMztCMzdDOzExMDMgMTE2NiAxMUIzOworQjM3RDtCMzdEOzExMDMgMTE2NiAxMUI0O0IzN0Q7MTEwMyAxMTY2IDExQjQ7CitCMzdFO0IzN0U7MTEwMyAxMTY2IDExQjU7QjM3RTsxMTAzIDExNjYgMTFCNTsKK0IzN0Y7QjM3RjsxMTAzIDExNjYgMTFCNjtCMzdGOzExMDMgMTE2NiAxMUI2OworQjM4MDtCMzgwOzExMDMgMTE2NiAxMUI3O0IzODA7MTEwMyAxMTY2IDExQjc7CitCMzgxO0IzODE7MTEwMyAxMTY2IDExQjg7QjM4MTsxMTAzIDExNjYgMTFCODsKK0IzODI7QjM4MjsxMTAzIDExNjYgMTFCOTtCMzgyOzExMDMgMTE2NiAxMUI5OworQjM4MztCMzgzOzExMDMgMTE2NiAxMUJBO0IzODM7MTEwMyAxMTY2IDExQkE7CitCMzg0O0IzODQ7MTEwMyAxMTY2IDExQkI7QjM4NDsxMTAzIDExNjYgMTFCQjsKK0IzODU7QjM4NTsxMTAzIDExNjYgMTFCQztCMzg1OzExMDMgMTE2NiAxMUJDOworQjM4NjtCMzg2OzExMDMgMTE2NiAxMUJEO0IzODY7MTEwMyAxMTY2IDExQkQ7CitCMzg3O0IzODc7MTEwMyAxMTY2IDExQkU7QjM4NzsxMTAzIDExNjYgMTFCRTsKK0IzODg7QjM4ODsxMTAzIDExNjYgMTFCRjtCMzg4OzExMDMgMTE2NiAxMUJGOworQjM4OTtCMzg5OzExMDMgMTE2NiAxMUMwO0IzODk7MTEwMyAxMTY2IDExQzA7CitCMzhBO0IzOEE7MTEwMyAxMTY2IDExQzE7QjM4QTsxMTAzIDExNjYgMTFDMTsKK0IzOEI7QjM4QjsxMTAzIDExNjYgMTFDMjtCMzhCOzExMDMgMTE2NiAxMUMyOworQjM4QztCMzhDOzExMDMgMTE2NztCMzhDOzExMDMgMTE2NzsKK0IzOEQ7QjM4RDsxMTAzIDExNjcgMTFBODtCMzhEOzExMDMgMTE2NyAxMUE4OworQjM4RTtCMzhFOzExMDMgMTE2NyAxMUE5O0IzOEU7MTEwMyAxMTY3IDExQTk7CitCMzhGO0IzOEY7MTEwMyAxMTY3IDExQUE7QjM4RjsxMTAzIDExNjcgMTFBQTsKK0IzOTA7QjM5MDsxMTAzIDExNjcgMTFBQjtCMzkwOzExMDMgMTE2NyAxMUFCOworQjM5MTtCMzkxOzExMDMgMTE2NyAxMUFDO0IzOTE7MTEwMyAxMTY3IDExQUM7CitCMzkyO0IzOTI7MTEwMyAxMTY3IDExQUQ7QjM5MjsxMTAzIDExNjcgMTFBRDsKK0IzOTM7QjM5MzsxMTAzIDExNjcgMTFBRTtCMzkzOzExMDMgMTE2NyAxMUFFOworQjM5NDtCMzk0OzExMDMgMTE2NyAxMUFGO0IzOTQ7MTEwMyAxMTY3IDExQUY7CitCMzk1O0IzOTU7MTEwMyAxMTY3IDExQjA7QjM5NTsxMTAzIDExNjcgMTFCMDsKK0IzOTY7QjM5NjsxMTAzIDExNjcgMTFCMTtCMzk2OzExMDMgMTE2NyAxMUIxOworQjM5NztCMzk3OzExMDMgMTE2NyAxMUIyO0IzOTc7MTEwMyAxMTY3IDExQjI7CitCMzk4O0IzOTg7MTEwMyAxMTY3IDExQjM7QjM5ODsxMTAzIDExNjcgMTFCMzsKK0IzOTk7QjM5OTsxMTAzIDExNjcgMTFCNDtCMzk5OzExMDMgMTE2NyAxMUI0OworQjM5QTtCMzlBOzExMDMgMTE2NyAxMUI1O0IzOUE7MTEwMyAxMTY3IDExQjU7CitCMzlCO0IzOUI7MTEwMyAxMTY3IDExQjY7QjM5QjsxMTAzIDExNjcgMTFCNjsKK0IzOUM7QjM5QzsxMTAzIDExNjcgMTFCNztCMzlDOzExMDMgMTE2NyAxMUI3OworQjM5RDtCMzlEOzExMDMgMTE2NyAxMUI4O0IzOUQ7MTEwMyAxMTY3IDExQjg7CitCMzlFO0IzOUU7MTEwMyAxMTY3IDExQjk7QjM5RTsxMTAzIDExNjcgMTFCOTsKK0IzOUY7QjM5RjsxMTAzIDExNjcgMTFCQTtCMzlGOzExMDMgMTE2NyAxMUJBOworQjNBMDtCM0EwOzExMDMgMTE2NyAxMUJCO0IzQTA7MTEwMyAxMTY3IDExQkI7CitCM0ExO0IzQTE7MTEwMyAxMTY3IDExQkM7QjNBMTsxMTAzIDExNjcgMTFCQzsKK0IzQTI7QjNBMjsxMTAzIDExNjcgMTFCRDtCM0EyOzExMDMgMTE2NyAxMUJEOworQjNBMztCM0EzOzExMDMgMTE2NyAxMUJFO0IzQTM7MTEwMyAxMTY3IDExQkU7CitCM0E0O0IzQTQ7MTEwMyAxMTY3IDExQkY7QjNBNDsxMTAzIDExNjcgMTFCRjsKK0IzQTU7QjNBNTsxMTAzIDExNjcgMTFDMDtCM0E1OzExMDMgMTE2NyAxMUMwOworQjNBNjtCM0E2OzExMDMgMTE2NyAxMUMxO0IzQTY7MTEwMyAxMTY3IDExQzE7CitCM0E3O0IzQTc7MTEwMyAxMTY3IDExQzI7QjNBNzsxMTAzIDExNjcgMTFDMjsKK0IzQTg7QjNBODsxMTAzIDExNjg7QjNBODsxMTAzIDExNjg7CitCM0E5O0IzQTk7MTEwMyAxMTY4IDExQTg7QjNBOTsxMTAzIDExNjggMTFBODsKK0IzQUE7QjNBQTsxMTAzIDExNjggMTFBOTtCM0FBOzExMDMgMTE2OCAxMUE5OworQjNBQjtCM0FCOzExMDMgMTE2OCAxMUFBO0IzQUI7MTEwMyAxMTY4IDExQUE7CitCM0FDO0IzQUM7MTEwMyAxMTY4IDExQUI7QjNBQzsxMTAzIDExNjggMTFBQjsKK0IzQUQ7QjNBRDsxMTAzIDExNjggMTFBQztCM0FEOzExMDMgMTE2OCAxMUFDOworQjNBRTtCM0FFOzExMDMgMTE2OCAxMUFEO0IzQUU7MTEwMyAxMTY4IDExQUQ7CitCM0FGO0IzQUY7MTEwMyAxMTY4IDExQUU7QjNBRjsxMTAzIDExNjggMTFBRTsKK0IzQjA7QjNCMDsxMTAzIDExNjggMTFBRjtCM0IwOzExMDMgMTE2OCAxMUFGOworQjNCMTtCM0IxOzExMDMgMTE2OCAxMUIwO0IzQjE7MTEwMyAxMTY4IDExQjA7CitCM0IyO0IzQjI7MTEwMyAxMTY4IDExQjE7QjNCMjsxMTAzIDExNjggMTFCMTsKK0IzQjM7QjNCMzsxMTAzIDExNjggMTFCMjtCM0IzOzExMDMgMTE2OCAxMUIyOworQjNCNDtCM0I0OzExMDMgMTE2OCAxMUIzO0IzQjQ7MTEwMyAxMTY4IDExQjM7CitCM0I1O0IzQjU7MTEwMyAxMTY4IDExQjQ7QjNCNTsxMTAzIDExNjggMTFCNDsKK0IzQjY7QjNCNjsxMTAzIDExNjggMTFCNTtCM0I2OzExMDMgMTE2OCAxMUI1OworQjNCNztCM0I3OzExMDMgMTE2OCAxMUI2O0IzQjc7MTEwMyAxMTY4IDExQjY7CitCM0I4O0IzQjg7MTEwMyAxMTY4IDExQjc7QjNCODsxMTAzIDExNjggMTFCNzsKK0IzQjk7QjNCOTsxMTAzIDExNjggMTFCODtCM0I5OzExMDMgMTE2OCAxMUI4OworQjNCQTtCM0JBOzExMDMgMTE2OCAxMUI5O0IzQkE7MTEwMyAxMTY4IDExQjk7CitCM0JCO0IzQkI7MTEwMyAxMTY4IDExQkE7QjNCQjsxMTAzIDExNjggMTFCQTsKK0IzQkM7QjNCQzsxMTAzIDExNjggMTFCQjtCM0JDOzExMDMgMTE2OCAxMUJCOworQjNCRDtCM0JEOzExMDMgMTE2OCAxMUJDO0IzQkQ7MTEwMyAxMTY4IDExQkM7CitCM0JFO0IzQkU7MTEwMyAxMTY4IDExQkQ7QjNCRTsxMTAzIDExNjggMTFCRDsKK0IzQkY7QjNCRjsxMTAzIDExNjggMTFCRTtCM0JGOzExMDMgMTE2OCAxMUJFOworQjNDMDtCM0MwOzExMDMgMTE2OCAxMUJGO0IzQzA7MTEwMyAxMTY4IDExQkY7CitCM0MxO0IzQzE7MTEwMyAxMTY4IDExQzA7QjNDMTsxMTAzIDExNjggMTFDMDsKK0IzQzI7QjNDMjsxMTAzIDExNjggMTFDMTtCM0MyOzExMDMgMTE2OCAxMUMxOworQjNDMztCM0MzOzExMDMgMTE2OCAxMUMyO0IzQzM7MTEwMyAxMTY4IDExQzI7CitCM0M0O0IzQzQ7MTEwMyAxMTY5O0IzQzQ7MTEwMyAxMTY5OworQjNDNTtCM0M1OzExMDMgMTE2OSAxMUE4O0IzQzU7MTEwMyAxMTY5IDExQTg7CitCM0M2O0IzQzY7MTEwMyAxMTY5IDExQTk7QjNDNjsxMTAzIDExNjkgMTFBOTsKK0IzQzc7QjNDNzsxMTAzIDExNjkgMTFBQTtCM0M3OzExMDMgMTE2OSAxMUFBOworQjNDODtCM0M4OzExMDMgMTE2OSAxMUFCO0IzQzg7MTEwMyAxMTY5IDExQUI7CitCM0M5O0IzQzk7MTEwMyAxMTY5IDExQUM7QjNDOTsxMTAzIDExNjkgMTFBQzsKK0IzQ0E7QjNDQTsxMTAzIDExNjkgMTFBRDtCM0NBOzExMDMgMTE2OSAxMUFEOworQjNDQjtCM0NCOzExMDMgMTE2OSAxMUFFO0IzQ0I7MTEwMyAxMTY5IDExQUU7CitCM0NDO0IzQ0M7MTEwMyAxMTY5IDExQUY7QjNDQzsxMTAzIDExNjkgMTFBRjsKK0IzQ0Q7QjNDRDsxMTAzIDExNjkgMTFCMDtCM0NEOzExMDMgMTE2OSAxMUIwOworQjNDRTtCM0NFOzExMDMgMTE2OSAxMUIxO0IzQ0U7MTEwMyAxMTY5IDExQjE7CitCM0NGO0IzQ0Y7MTEwMyAxMTY5IDExQjI7QjNDRjsxMTAzIDExNjkgMTFCMjsKK0IzRDA7QjNEMDsxMTAzIDExNjkgMTFCMztCM0QwOzExMDMgMTE2OSAxMUIzOworQjNEMTtCM0QxOzExMDMgMTE2OSAxMUI0O0IzRDE7MTEwMyAxMTY5IDExQjQ7CitCM0QyO0IzRDI7MTEwMyAxMTY5IDExQjU7QjNEMjsxMTAzIDExNjkgMTFCNTsKK0IzRDM7QjNEMzsxMTAzIDExNjkgMTFCNjtCM0QzOzExMDMgMTE2OSAxMUI2OworQjNENDtCM0Q0OzExMDMgMTE2OSAxMUI3O0IzRDQ7MTEwMyAxMTY5IDExQjc7CitCM0Q1O0IzRDU7MTEwMyAxMTY5IDExQjg7QjNENTsxMTAzIDExNjkgMTFCODsKK0IzRDY7QjNENjsxMTAzIDExNjkgMTFCOTtCM0Q2OzExMDMgMTE2OSAxMUI5OworQjNENztCM0Q3OzExMDMgMTE2OSAxMUJBO0IzRDc7MTEwMyAxMTY5IDExQkE7CitCM0Q4O0IzRDg7MTEwMyAxMTY5IDExQkI7QjNEODsxMTAzIDExNjkgMTFCQjsKK0IzRDk7QjNEOTsxMTAzIDExNjkgMTFCQztCM0Q5OzExMDMgMTE2OSAxMUJDOworQjNEQTtCM0RBOzExMDMgMTE2OSAxMUJEO0IzREE7MTEwMyAxMTY5IDExQkQ7CitCM0RCO0IzREI7MTEwMyAxMTY5IDExQkU7QjNEQjsxMTAzIDExNjkgMTFCRTsKK0IzREM7QjNEQzsxMTAzIDExNjkgMTFCRjtCM0RDOzExMDMgMTE2OSAxMUJGOworQjNERDtCM0REOzExMDMgMTE2OSAxMUMwO0IzREQ7MTEwMyAxMTY5IDExQzA7CitCM0RFO0IzREU7MTEwMyAxMTY5IDExQzE7QjNERTsxMTAzIDExNjkgMTFDMTsKK0IzREY7QjNERjsxMTAzIDExNjkgMTFDMjtCM0RGOzExMDMgMTE2OSAxMUMyOworQjNFMDtCM0UwOzExMDMgMTE2QTtCM0UwOzExMDMgMTE2QTsKK0IzRTE7QjNFMTsxMTAzIDExNkEgMTFBODtCM0UxOzExMDMgMTE2QSAxMUE4OworQjNFMjtCM0UyOzExMDMgMTE2QSAxMUE5O0IzRTI7MTEwMyAxMTZBIDExQTk7CitCM0UzO0IzRTM7MTEwMyAxMTZBIDExQUE7QjNFMzsxMTAzIDExNkEgMTFBQTsKK0IzRTQ7QjNFNDsxMTAzIDExNkEgMTFBQjtCM0U0OzExMDMgMTE2QSAxMUFCOworQjNFNTtCM0U1OzExMDMgMTE2QSAxMUFDO0IzRTU7MTEwMyAxMTZBIDExQUM7CitCM0U2O0IzRTY7MTEwMyAxMTZBIDExQUQ7QjNFNjsxMTAzIDExNkEgMTFBRDsKK0IzRTc7QjNFNzsxMTAzIDExNkEgMTFBRTtCM0U3OzExMDMgMTE2QSAxMUFFOworQjNFODtCM0U4OzExMDMgMTE2QSAxMUFGO0IzRTg7MTEwMyAxMTZBIDExQUY7CitCM0U5O0IzRTk7MTEwMyAxMTZBIDExQjA7QjNFOTsxMTAzIDExNkEgMTFCMDsKK0IzRUE7QjNFQTsxMTAzIDExNkEgMTFCMTtCM0VBOzExMDMgMTE2QSAxMUIxOworQjNFQjtCM0VCOzExMDMgMTE2QSAxMUIyO0IzRUI7MTEwMyAxMTZBIDExQjI7CitCM0VDO0IzRUM7MTEwMyAxMTZBIDExQjM7QjNFQzsxMTAzIDExNkEgMTFCMzsKK0IzRUQ7QjNFRDsxMTAzIDExNkEgMTFCNDtCM0VEOzExMDMgMTE2QSAxMUI0OworQjNFRTtCM0VFOzExMDMgMTE2QSAxMUI1O0IzRUU7MTEwMyAxMTZBIDExQjU7CitCM0VGO0IzRUY7MTEwMyAxMTZBIDExQjY7QjNFRjsxMTAzIDExNkEgMTFCNjsKK0IzRjA7QjNGMDsxMTAzIDExNkEgMTFCNztCM0YwOzExMDMgMTE2QSAxMUI3OworQjNGMTtCM0YxOzExMDMgMTE2QSAxMUI4O0IzRjE7MTEwMyAxMTZBIDExQjg7CitCM0YyO0IzRjI7MTEwMyAxMTZBIDExQjk7QjNGMjsxMTAzIDExNkEgMTFCOTsKK0IzRjM7QjNGMzsxMTAzIDExNkEgMTFCQTtCM0YzOzExMDMgMTE2QSAxMUJBOworQjNGNDtCM0Y0OzExMDMgMTE2QSAxMUJCO0IzRjQ7MTEwMyAxMTZBIDExQkI7CitCM0Y1O0IzRjU7MTEwMyAxMTZBIDExQkM7QjNGNTsxMTAzIDExNkEgMTFCQzsKK0IzRjY7QjNGNjsxMTAzIDExNkEgMTFCRDtCM0Y2OzExMDMgMTE2QSAxMUJEOworQjNGNztCM0Y3OzExMDMgMTE2QSAxMUJFO0IzRjc7MTEwMyAxMTZBIDExQkU7CitCM0Y4O0IzRjg7MTEwMyAxMTZBIDExQkY7QjNGODsxMTAzIDExNkEgMTFCRjsKK0IzRjk7QjNGOTsxMTAzIDExNkEgMTFDMDtCM0Y5OzExMDMgMTE2QSAxMUMwOworQjNGQTtCM0ZBOzExMDMgMTE2QSAxMUMxO0IzRkE7MTEwMyAxMTZBIDExQzE7CitCM0ZCO0IzRkI7MTEwMyAxMTZBIDExQzI7QjNGQjsxMTAzIDExNkEgMTFDMjsKK0IzRkM7QjNGQzsxMTAzIDExNkI7QjNGQzsxMTAzIDExNkI7CitCM0ZEO0IzRkQ7MTEwMyAxMTZCIDExQTg7QjNGRDsxMTAzIDExNkIgMTFBODsKK0IzRkU7QjNGRTsxMTAzIDExNkIgMTFBOTtCM0ZFOzExMDMgMTE2QiAxMUE5OworQjNGRjtCM0ZGOzExMDMgMTE2QiAxMUFBO0IzRkY7MTEwMyAxMTZCIDExQUE7CitCNDAwO0I0MDA7MTEwMyAxMTZCIDExQUI7QjQwMDsxMTAzIDExNkIgMTFBQjsKK0I0MDE7QjQwMTsxMTAzIDExNkIgMTFBQztCNDAxOzExMDMgMTE2QiAxMUFDOworQjQwMjtCNDAyOzExMDMgMTE2QiAxMUFEO0I0MDI7MTEwMyAxMTZCIDExQUQ7CitCNDAzO0I0MDM7MTEwMyAxMTZCIDExQUU7QjQwMzsxMTAzIDExNkIgMTFBRTsKK0I0MDQ7QjQwNDsxMTAzIDExNkIgMTFBRjtCNDA0OzExMDMgMTE2QiAxMUFGOworQjQwNTtCNDA1OzExMDMgMTE2QiAxMUIwO0I0MDU7MTEwMyAxMTZCIDExQjA7CitCNDA2O0I0MDY7MTEwMyAxMTZCIDExQjE7QjQwNjsxMTAzIDExNkIgMTFCMTsKK0I0MDc7QjQwNzsxMTAzIDExNkIgMTFCMjtCNDA3OzExMDMgMTE2QiAxMUIyOworQjQwODtCNDA4OzExMDMgMTE2QiAxMUIzO0I0MDg7MTEwMyAxMTZCIDExQjM7CitCNDA5O0I0MDk7MTEwMyAxMTZCIDExQjQ7QjQwOTsxMTAzIDExNkIgMTFCNDsKK0I0MEE7QjQwQTsxMTAzIDExNkIgMTFCNTtCNDBBOzExMDMgMTE2QiAxMUI1OworQjQwQjtCNDBCOzExMDMgMTE2QiAxMUI2O0I0MEI7MTEwMyAxMTZCIDExQjY7CitCNDBDO0I0MEM7MTEwMyAxMTZCIDExQjc7QjQwQzsxMTAzIDExNkIgMTFCNzsKK0I0MEQ7QjQwRDsxMTAzIDExNkIgMTFCODtCNDBEOzExMDMgMTE2QiAxMUI4OworQjQwRTtCNDBFOzExMDMgMTE2QiAxMUI5O0I0MEU7MTEwMyAxMTZCIDExQjk7CitCNDBGO0I0MEY7MTEwMyAxMTZCIDExQkE7QjQwRjsxMTAzIDExNkIgMTFCQTsKK0I0MTA7QjQxMDsxMTAzIDExNkIgMTFCQjtCNDEwOzExMDMgMTE2QiAxMUJCOworQjQxMTtCNDExOzExMDMgMTE2QiAxMUJDO0I0MTE7MTEwMyAxMTZCIDExQkM7CitCNDEyO0I0MTI7MTEwMyAxMTZCIDExQkQ7QjQxMjsxMTAzIDExNkIgMTFCRDsKK0I0MTM7QjQxMzsxMTAzIDExNkIgMTFCRTtCNDEzOzExMDMgMTE2QiAxMUJFOworQjQxNDtCNDE0OzExMDMgMTE2QiAxMUJGO0I0MTQ7MTEwMyAxMTZCIDExQkY7CitCNDE1O0I0MTU7MTEwMyAxMTZCIDExQzA7QjQxNTsxMTAzIDExNkIgMTFDMDsKK0I0MTY7QjQxNjsxMTAzIDExNkIgMTFDMTtCNDE2OzExMDMgMTE2QiAxMUMxOworQjQxNztCNDE3OzExMDMgMTE2QiAxMUMyO0I0MTc7MTEwMyAxMTZCIDExQzI7CitCNDE4O0I0MTg7MTEwMyAxMTZDO0I0MTg7MTEwMyAxMTZDOworQjQxOTtCNDE5OzExMDMgMTE2QyAxMUE4O0I0MTk7MTEwMyAxMTZDIDExQTg7CitCNDFBO0I0MUE7MTEwMyAxMTZDIDExQTk7QjQxQTsxMTAzIDExNkMgMTFBOTsKK0I0MUI7QjQxQjsxMTAzIDExNkMgMTFBQTtCNDFCOzExMDMgMTE2QyAxMUFBOworQjQxQztCNDFDOzExMDMgMTE2QyAxMUFCO0I0MUM7MTEwMyAxMTZDIDExQUI7CitCNDFEO0I0MUQ7MTEwMyAxMTZDIDExQUM7QjQxRDsxMTAzIDExNkMgMTFBQzsKK0I0MUU7QjQxRTsxMTAzIDExNkMgMTFBRDtCNDFFOzExMDMgMTE2QyAxMUFEOworQjQxRjtCNDFGOzExMDMgMTE2QyAxMUFFO0I0MUY7MTEwMyAxMTZDIDExQUU7CitCNDIwO0I0MjA7MTEwMyAxMTZDIDExQUY7QjQyMDsxMTAzIDExNkMgMTFBRjsKK0I0MjE7QjQyMTsxMTAzIDExNkMgMTFCMDtCNDIxOzExMDMgMTE2QyAxMUIwOworQjQyMjtCNDIyOzExMDMgMTE2QyAxMUIxO0I0MjI7MTEwMyAxMTZDIDExQjE7CitCNDIzO0I0MjM7MTEwMyAxMTZDIDExQjI7QjQyMzsxMTAzIDExNkMgMTFCMjsKK0I0MjQ7QjQyNDsxMTAzIDExNkMgMTFCMztCNDI0OzExMDMgMTE2QyAxMUIzOworQjQyNTtCNDI1OzExMDMgMTE2QyAxMUI0O0I0MjU7MTEwMyAxMTZDIDExQjQ7CitCNDI2O0I0MjY7MTEwMyAxMTZDIDExQjU7QjQyNjsxMTAzIDExNkMgMTFCNTsKK0I0Mjc7QjQyNzsxMTAzIDExNkMgMTFCNjtCNDI3OzExMDMgMTE2QyAxMUI2OworQjQyODtCNDI4OzExMDMgMTE2QyAxMUI3O0I0Mjg7MTEwMyAxMTZDIDExQjc7CitCNDI5O0I0Mjk7MTEwMyAxMTZDIDExQjg7QjQyOTsxMTAzIDExNkMgMTFCODsKK0I0MkE7QjQyQTsxMTAzIDExNkMgMTFCOTtCNDJBOzExMDMgMTE2QyAxMUI5OworQjQyQjtCNDJCOzExMDMgMTE2QyAxMUJBO0I0MkI7MTEwMyAxMTZDIDExQkE7CitCNDJDO0I0MkM7MTEwMyAxMTZDIDExQkI7QjQyQzsxMTAzIDExNkMgMTFCQjsKK0I0MkQ7QjQyRDsxMTAzIDExNkMgMTFCQztCNDJEOzExMDMgMTE2QyAxMUJDOworQjQyRTtCNDJFOzExMDMgMTE2QyAxMUJEO0I0MkU7MTEwMyAxMTZDIDExQkQ7CitCNDJGO0I0MkY7MTEwMyAxMTZDIDExQkU7QjQyRjsxMTAzIDExNkMgMTFCRTsKK0I0MzA7QjQzMDsxMTAzIDExNkMgMTFCRjtCNDMwOzExMDMgMTE2QyAxMUJGOworQjQzMTtCNDMxOzExMDMgMTE2QyAxMUMwO0I0MzE7MTEwMyAxMTZDIDExQzA7CitCNDMyO0I0MzI7MTEwMyAxMTZDIDExQzE7QjQzMjsxMTAzIDExNkMgMTFDMTsKK0I0MzM7QjQzMzsxMTAzIDExNkMgMTFDMjtCNDMzOzExMDMgMTE2QyAxMUMyOworQjQzNDtCNDM0OzExMDMgMTE2RDtCNDM0OzExMDMgMTE2RDsKK0I0MzU7QjQzNTsxMTAzIDExNkQgMTFBODtCNDM1OzExMDMgMTE2RCAxMUE4OworQjQzNjtCNDM2OzExMDMgMTE2RCAxMUE5O0I0MzY7MTEwMyAxMTZEIDExQTk7CitCNDM3O0I0Mzc7MTEwMyAxMTZEIDExQUE7QjQzNzsxMTAzIDExNkQgMTFBQTsKK0I0Mzg7QjQzODsxMTAzIDExNkQgMTFBQjtCNDM4OzExMDMgMTE2RCAxMUFCOworQjQzOTtCNDM5OzExMDMgMTE2RCAxMUFDO0I0Mzk7MTEwMyAxMTZEIDExQUM7CitCNDNBO0I0M0E7MTEwMyAxMTZEIDExQUQ7QjQzQTsxMTAzIDExNkQgMTFBRDsKK0I0M0I7QjQzQjsxMTAzIDExNkQgMTFBRTtCNDNCOzExMDMgMTE2RCAxMUFFOworQjQzQztCNDNDOzExMDMgMTE2RCAxMUFGO0I0M0M7MTEwMyAxMTZEIDExQUY7CitCNDNEO0I0M0Q7MTEwMyAxMTZEIDExQjA7QjQzRDsxMTAzIDExNkQgMTFCMDsKK0I0M0U7QjQzRTsxMTAzIDExNkQgMTFCMTtCNDNFOzExMDMgMTE2RCAxMUIxOworQjQzRjtCNDNGOzExMDMgMTE2RCAxMUIyO0I0M0Y7MTEwMyAxMTZEIDExQjI7CitCNDQwO0I0NDA7MTEwMyAxMTZEIDExQjM7QjQ0MDsxMTAzIDExNkQgMTFCMzsKK0I0NDE7QjQ0MTsxMTAzIDExNkQgMTFCNDtCNDQxOzExMDMgMTE2RCAxMUI0OworQjQ0MjtCNDQyOzExMDMgMTE2RCAxMUI1O0I0NDI7MTEwMyAxMTZEIDExQjU7CitCNDQzO0I0NDM7MTEwMyAxMTZEIDExQjY7QjQ0MzsxMTAzIDExNkQgMTFCNjsKK0I0NDQ7QjQ0NDsxMTAzIDExNkQgMTFCNztCNDQ0OzExMDMgMTE2RCAxMUI3OworQjQ0NTtCNDQ1OzExMDMgMTE2RCAxMUI4O0I0NDU7MTEwMyAxMTZEIDExQjg7CitCNDQ2O0I0NDY7MTEwMyAxMTZEIDExQjk7QjQ0NjsxMTAzIDExNkQgMTFCOTsKK0I0NDc7QjQ0NzsxMTAzIDExNkQgMTFCQTtCNDQ3OzExMDMgMTE2RCAxMUJBOworQjQ0ODtCNDQ4OzExMDMgMTE2RCAxMUJCO0I0NDg7MTEwMyAxMTZEIDExQkI7CitCNDQ5O0I0NDk7MTEwMyAxMTZEIDExQkM7QjQ0OTsxMTAzIDExNkQgMTFCQzsKK0I0NEE7QjQ0QTsxMTAzIDExNkQgMTFCRDtCNDRBOzExMDMgMTE2RCAxMUJEOworQjQ0QjtCNDRCOzExMDMgMTE2RCAxMUJFO0I0NEI7MTEwMyAxMTZEIDExQkU7CitCNDRDO0I0NEM7MTEwMyAxMTZEIDExQkY7QjQ0QzsxMTAzIDExNkQgMTFCRjsKK0I0NEQ7QjQ0RDsxMTAzIDExNkQgMTFDMDtCNDREOzExMDMgMTE2RCAxMUMwOworQjQ0RTtCNDRFOzExMDMgMTE2RCAxMUMxO0I0NEU7MTEwMyAxMTZEIDExQzE7CitCNDRGO0I0NEY7MTEwMyAxMTZEIDExQzI7QjQ0RjsxMTAzIDExNkQgMTFDMjsKK0I0NTA7QjQ1MDsxMTAzIDExNkU7QjQ1MDsxMTAzIDExNkU7CitCNDUxO0I0NTE7MTEwMyAxMTZFIDExQTg7QjQ1MTsxMTAzIDExNkUgMTFBODsKK0I0NTI7QjQ1MjsxMTAzIDExNkUgMTFBOTtCNDUyOzExMDMgMTE2RSAxMUE5OworQjQ1MztCNDUzOzExMDMgMTE2RSAxMUFBO0I0NTM7MTEwMyAxMTZFIDExQUE7CitCNDU0O0I0NTQ7MTEwMyAxMTZFIDExQUI7QjQ1NDsxMTAzIDExNkUgMTFBQjsKK0I0NTU7QjQ1NTsxMTAzIDExNkUgMTFBQztCNDU1OzExMDMgMTE2RSAxMUFDOworQjQ1NjtCNDU2OzExMDMgMTE2RSAxMUFEO0I0NTY7MTEwMyAxMTZFIDExQUQ7CitCNDU3O0I0NTc7MTEwMyAxMTZFIDExQUU7QjQ1NzsxMTAzIDExNkUgMTFBRTsKK0I0NTg7QjQ1ODsxMTAzIDExNkUgMTFBRjtCNDU4OzExMDMgMTE2RSAxMUFGOworQjQ1OTtCNDU5OzExMDMgMTE2RSAxMUIwO0I0NTk7MTEwMyAxMTZFIDExQjA7CitCNDVBO0I0NUE7MTEwMyAxMTZFIDExQjE7QjQ1QTsxMTAzIDExNkUgMTFCMTsKK0I0NUI7QjQ1QjsxMTAzIDExNkUgMTFCMjtCNDVCOzExMDMgMTE2RSAxMUIyOworQjQ1QztCNDVDOzExMDMgMTE2RSAxMUIzO0I0NUM7MTEwMyAxMTZFIDExQjM7CitCNDVEO0I0NUQ7MTEwMyAxMTZFIDExQjQ7QjQ1RDsxMTAzIDExNkUgMTFCNDsKK0I0NUU7QjQ1RTsxMTAzIDExNkUgMTFCNTtCNDVFOzExMDMgMTE2RSAxMUI1OworQjQ1RjtCNDVGOzExMDMgMTE2RSAxMUI2O0I0NUY7MTEwMyAxMTZFIDExQjY7CitCNDYwO0I0NjA7MTEwMyAxMTZFIDExQjc7QjQ2MDsxMTAzIDExNkUgMTFCNzsKK0I0NjE7QjQ2MTsxMTAzIDExNkUgMTFCODtCNDYxOzExMDMgMTE2RSAxMUI4OworQjQ2MjtCNDYyOzExMDMgMTE2RSAxMUI5O0I0NjI7MTEwMyAxMTZFIDExQjk7CitCNDYzO0I0NjM7MTEwMyAxMTZFIDExQkE7QjQ2MzsxMTAzIDExNkUgMTFCQTsKK0I0NjQ7QjQ2NDsxMTAzIDExNkUgMTFCQjtCNDY0OzExMDMgMTE2RSAxMUJCOworQjQ2NTtCNDY1OzExMDMgMTE2RSAxMUJDO0I0NjU7MTEwMyAxMTZFIDExQkM7CitCNDY2O0I0NjY7MTEwMyAxMTZFIDExQkQ7QjQ2NjsxMTAzIDExNkUgMTFCRDsKK0I0Njc7QjQ2NzsxMTAzIDExNkUgMTFCRTtCNDY3OzExMDMgMTE2RSAxMUJFOworQjQ2ODtCNDY4OzExMDMgMTE2RSAxMUJGO0I0Njg7MTEwMyAxMTZFIDExQkY7CitCNDY5O0I0Njk7MTEwMyAxMTZFIDExQzA7QjQ2OTsxMTAzIDExNkUgMTFDMDsKK0I0NkE7QjQ2QTsxMTAzIDExNkUgMTFDMTtCNDZBOzExMDMgMTE2RSAxMUMxOworQjQ2QjtCNDZCOzExMDMgMTE2RSAxMUMyO0I0NkI7MTEwMyAxMTZFIDExQzI7CitCNDZDO0I0NkM7MTEwMyAxMTZGO0I0NkM7MTEwMyAxMTZGOworQjQ2RDtCNDZEOzExMDMgMTE2RiAxMUE4O0I0NkQ7MTEwMyAxMTZGIDExQTg7CitCNDZFO0I0NkU7MTEwMyAxMTZGIDExQTk7QjQ2RTsxMTAzIDExNkYgMTFBOTsKK0I0NkY7QjQ2RjsxMTAzIDExNkYgMTFBQTtCNDZGOzExMDMgMTE2RiAxMUFBOworQjQ3MDtCNDcwOzExMDMgMTE2RiAxMUFCO0I0NzA7MTEwMyAxMTZGIDExQUI7CitCNDcxO0I0NzE7MTEwMyAxMTZGIDExQUM7QjQ3MTsxMTAzIDExNkYgMTFBQzsKK0I0NzI7QjQ3MjsxMTAzIDExNkYgMTFBRDtCNDcyOzExMDMgMTE2RiAxMUFEOworQjQ3MztCNDczOzExMDMgMTE2RiAxMUFFO0I0NzM7MTEwMyAxMTZGIDExQUU7CitCNDc0O0I0NzQ7MTEwMyAxMTZGIDExQUY7QjQ3NDsxMTAzIDExNkYgMTFBRjsKK0I0NzU7QjQ3NTsxMTAzIDExNkYgMTFCMDtCNDc1OzExMDMgMTE2RiAxMUIwOworQjQ3NjtCNDc2OzExMDMgMTE2RiAxMUIxO0I0NzY7MTEwMyAxMTZGIDExQjE7CitCNDc3O0I0Nzc7MTEwMyAxMTZGIDExQjI7QjQ3NzsxMTAzIDExNkYgMTFCMjsKK0I0Nzg7QjQ3ODsxMTAzIDExNkYgMTFCMztCNDc4OzExMDMgMTE2RiAxMUIzOworQjQ3OTtCNDc5OzExMDMgMTE2RiAxMUI0O0I0Nzk7MTEwMyAxMTZGIDExQjQ7CitCNDdBO0I0N0E7MTEwMyAxMTZGIDExQjU7QjQ3QTsxMTAzIDExNkYgMTFCNTsKK0I0N0I7QjQ3QjsxMTAzIDExNkYgMTFCNjtCNDdCOzExMDMgMTE2RiAxMUI2OworQjQ3QztCNDdDOzExMDMgMTE2RiAxMUI3O0I0N0M7MTEwMyAxMTZGIDExQjc7CitCNDdEO0I0N0Q7MTEwMyAxMTZGIDExQjg7QjQ3RDsxMTAzIDExNkYgMTFCODsKK0I0N0U7QjQ3RTsxMTAzIDExNkYgMTFCOTtCNDdFOzExMDMgMTE2RiAxMUI5OworQjQ3RjtCNDdGOzExMDMgMTE2RiAxMUJBO0I0N0Y7MTEwMyAxMTZGIDExQkE7CitCNDgwO0I0ODA7MTEwMyAxMTZGIDExQkI7QjQ4MDsxMTAzIDExNkYgMTFCQjsKK0I0ODE7QjQ4MTsxMTAzIDExNkYgMTFCQztCNDgxOzExMDMgMTE2RiAxMUJDOworQjQ4MjtCNDgyOzExMDMgMTE2RiAxMUJEO0I0ODI7MTEwMyAxMTZGIDExQkQ7CitCNDgzO0I0ODM7MTEwMyAxMTZGIDExQkU7QjQ4MzsxMTAzIDExNkYgMTFCRTsKK0I0ODQ7QjQ4NDsxMTAzIDExNkYgMTFCRjtCNDg0OzExMDMgMTE2RiAxMUJGOworQjQ4NTtCNDg1OzExMDMgMTE2RiAxMUMwO0I0ODU7MTEwMyAxMTZGIDExQzA7CitCNDg2O0I0ODY7MTEwMyAxMTZGIDExQzE7QjQ4NjsxMTAzIDExNkYgMTFDMTsKK0I0ODc7QjQ4NzsxMTAzIDExNkYgMTFDMjtCNDg3OzExMDMgMTE2RiAxMUMyOworQjQ4ODtCNDg4OzExMDMgMTE3MDtCNDg4OzExMDMgMTE3MDsKK0I0ODk7QjQ4OTsxMTAzIDExNzAgMTFBODtCNDg5OzExMDMgMTE3MCAxMUE4OworQjQ4QTtCNDhBOzExMDMgMTE3MCAxMUE5O0I0OEE7MTEwMyAxMTcwIDExQTk7CitCNDhCO0I0OEI7MTEwMyAxMTcwIDExQUE7QjQ4QjsxMTAzIDExNzAgMTFBQTsKK0I0OEM7QjQ4QzsxMTAzIDExNzAgMTFBQjtCNDhDOzExMDMgMTE3MCAxMUFCOworQjQ4RDtCNDhEOzExMDMgMTE3MCAxMUFDO0I0OEQ7MTEwMyAxMTcwIDExQUM7CitCNDhFO0I0OEU7MTEwMyAxMTcwIDExQUQ7QjQ4RTsxMTAzIDExNzAgMTFBRDsKK0I0OEY7QjQ4RjsxMTAzIDExNzAgMTFBRTtCNDhGOzExMDMgMTE3MCAxMUFFOworQjQ5MDtCNDkwOzExMDMgMTE3MCAxMUFGO0I0OTA7MTEwMyAxMTcwIDExQUY7CitCNDkxO0I0OTE7MTEwMyAxMTcwIDExQjA7QjQ5MTsxMTAzIDExNzAgMTFCMDsKK0I0OTI7QjQ5MjsxMTAzIDExNzAgMTFCMTtCNDkyOzExMDMgMTE3MCAxMUIxOworQjQ5MztCNDkzOzExMDMgMTE3MCAxMUIyO0I0OTM7MTEwMyAxMTcwIDExQjI7CitCNDk0O0I0OTQ7MTEwMyAxMTcwIDExQjM7QjQ5NDsxMTAzIDExNzAgMTFCMzsKK0I0OTU7QjQ5NTsxMTAzIDExNzAgMTFCNDtCNDk1OzExMDMgMTE3MCAxMUI0OworQjQ5NjtCNDk2OzExMDMgMTE3MCAxMUI1O0I0OTY7MTEwMyAxMTcwIDExQjU7CitCNDk3O0I0OTc7MTEwMyAxMTcwIDExQjY7QjQ5NzsxMTAzIDExNzAgMTFCNjsKK0I0OTg7QjQ5ODsxMTAzIDExNzAgMTFCNztCNDk4OzExMDMgMTE3MCAxMUI3OworQjQ5OTtCNDk5OzExMDMgMTE3MCAxMUI4O0I0OTk7MTEwMyAxMTcwIDExQjg7CitCNDlBO0I0OUE7MTEwMyAxMTcwIDExQjk7QjQ5QTsxMTAzIDExNzAgMTFCOTsKK0I0OUI7QjQ5QjsxMTAzIDExNzAgMTFCQTtCNDlCOzExMDMgMTE3MCAxMUJBOworQjQ5QztCNDlDOzExMDMgMTE3MCAxMUJCO0I0OUM7MTEwMyAxMTcwIDExQkI7CitCNDlEO0I0OUQ7MTEwMyAxMTcwIDExQkM7QjQ5RDsxMTAzIDExNzAgMTFCQzsKK0I0OUU7QjQ5RTsxMTAzIDExNzAgMTFCRDtCNDlFOzExMDMgMTE3MCAxMUJEOworQjQ5RjtCNDlGOzExMDMgMTE3MCAxMUJFO0I0OUY7MTEwMyAxMTcwIDExQkU7CitCNEEwO0I0QTA7MTEwMyAxMTcwIDExQkY7QjRBMDsxMTAzIDExNzAgMTFCRjsKK0I0QTE7QjRBMTsxMTAzIDExNzAgMTFDMDtCNEExOzExMDMgMTE3MCAxMUMwOworQjRBMjtCNEEyOzExMDMgMTE3MCAxMUMxO0I0QTI7MTEwMyAxMTcwIDExQzE7CitCNEEzO0I0QTM7MTEwMyAxMTcwIDExQzI7QjRBMzsxMTAzIDExNzAgMTFDMjsKK0I0QTQ7QjRBNDsxMTAzIDExNzE7QjRBNDsxMTAzIDExNzE7CitCNEE1O0I0QTU7MTEwMyAxMTcxIDExQTg7QjRBNTsxMTAzIDExNzEgMTFBODsKK0I0QTY7QjRBNjsxMTAzIDExNzEgMTFBOTtCNEE2OzExMDMgMTE3MSAxMUE5OworQjRBNztCNEE3OzExMDMgMTE3MSAxMUFBO0I0QTc7MTEwMyAxMTcxIDExQUE7CitCNEE4O0I0QTg7MTEwMyAxMTcxIDExQUI7QjRBODsxMTAzIDExNzEgMTFBQjsKK0I0QTk7QjRBOTsxMTAzIDExNzEgMTFBQztCNEE5OzExMDMgMTE3MSAxMUFDOworQjRBQTtCNEFBOzExMDMgMTE3MSAxMUFEO0I0QUE7MTEwMyAxMTcxIDExQUQ7CitCNEFCO0I0QUI7MTEwMyAxMTcxIDExQUU7QjRBQjsxMTAzIDExNzEgMTFBRTsKK0I0QUM7QjRBQzsxMTAzIDExNzEgMTFBRjtCNEFDOzExMDMgMTE3MSAxMUFGOworQjRBRDtCNEFEOzExMDMgMTE3MSAxMUIwO0I0QUQ7MTEwMyAxMTcxIDExQjA7CitCNEFFO0I0QUU7MTEwMyAxMTcxIDExQjE7QjRBRTsxMTAzIDExNzEgMTFCMTsKK0I0QUY7QjRBRjsxMTAzIDExNzEgMTFCMjtCNEFGOzExMDMgMTE3MSAxMUIyOworQjRCMDtCNEIwOzExMDMgMTE3MSAxMUIzO0I0QjA7MTEwMyAxMTcxIDExQjM7CitCNEIxO0I0QjE7MTEwMyAxMTcxIDExQjQ7QjRCMTsxMTAzIDExNzEgMTFCNDsKK0I0QjI7QjRCMjsxMTAzIDExNzEgMTFCNTtCNEIyOzExMDMgMTE3MSAxMUI1OworQjRCMztCNEIzOzExMDMgMTE3MSAxMUI2O0I0QjM7MTEwMyAxMTcxIDExQjY7CitCNEI0O0I0QjQ7MTEwMyAxMTcxIDExQjc7QjRCNDsxMTAzIDExNzEgMTFCNzsKK0I0QjU7QjRCNTsxMTAzIDExNzEgMTFCODtCNEI1OzExMDMgMTE3MSAxMUI4OworQjRCNjtCNEI2OzExMDMgMTE3MSAxMUI5O0I0QjY7MTEwMyAxMTcxIDExQjk7CitCNEI3O0I0Qjc7MTEwMyAxMTcxIDExQkE7QjRCNzsxMTAzIDExNzEgMTFCQTsKK0I0Qjg7QjRCODsxMTAzIDExNzEgMTFCQjtCNEI4OzExMDMgMTE3MSAxMUJCOworQjRCOTtCNEI5OzExMDMgMTE3MSAxMUJDO0I0Qjk7MTEwMyAxMTcxIDExQkM7CitCNEJBO0I0QkE7MTEwMyAxMTcxIDExQkQ7QjRCQTsxMTAzIDExNzEgMTFCRDsKK0I0QkI7QjRCQjsxMTAzIDExNzEgMTFCRTtCNEJCOzExMDMgMTE3MSAxMUJFOworQjRCQztCNEJDOzExMDMgMTE3MSAxMUJGO0I0QkM7MTEwMyAxMTcxIDExQkY7CitCNEJEO0I0QkQ7MTEwMyAxMTcxIDExQzA7QjRCRDsxMTAzIDExNzEgMTFDMDsKK0I0QkU7QjRCRTsxMTAzIDExNzEgMTFDMTtCNEJFOzExMDMgMTE3MSAxMUMxOworQjRCRjtCNEJGOzExMDMgMTE3MSAxMUMyO0I0QkY7MTEwMyAxMTcxIDExQzI7CitCNEMwO0I0QzA7MTEwMyAxMTcyO0I0QzA7MTEwMyAxMTcyOworQjRDMTtCNEMxOzExMDMgMTE3MiAxMUE4O0I0QzE7MTEwMyAxMTcyIDExQTg7CitCNEMyO0I0QzI7MTEwMyAxMTcyIDExQTk7QjRDMjsxMTAzIDExNzIgMTFBOTsKK0I0QzM7QjRDMzsxMTAzIDExNzIgMTFBQTtCNEMzOzExMDMgMTE3MiAxMUFBOworQjRDNDtCNEM0OzExMDMgMTE3MiAxMUFCO0I0QzQ7MTEwMyAxMTcyIDExQUI7CitCNEM1O0I0QzU7MTEwMyAxMTcyIDExQUM7QjRDNTsxMTAzIDExNzIgMTFBQzsKK0I0QzY7QjRDNjsxMTAzIDExNzIgMTFBRDtCNEM2OzExMDMgMTE3MiAxMUFEOworQjRDNztCNEM3OzExMDMgMTE3MiAxMUFFO0I0Qzc7MTEwMyAxMTcyIDExQUU7CitCNEM4O0I0Qzg7MTEwMyAxMTcyIDExQUY7QjRDODsxMTAzIDExNzIgMTFBRjsKK0I0Qzk7QjRDOTsxMTAzIDExNzIgMTFCMDtCNEM5OzExMDMgMTE3MiAxMUIwOworQjRDQTtCNENBOzExMDMgMTE3MiAxMUIxO0I0Q0E7MTEwMyAxMTcyIDExQjE7CitCNENCO0I0Q0I7MTEwMyAxMTcyIDExQjI7QjRDQjsxMTAzIDExNzIgMTFCMjsKK0I0Q0M7QjRDQzsxMTAzIDExNzIgMTFCMztCNENDOzExMDMgMTE3MiAxMUIzOworQjRDRDtCNENEOzExMDMgMTE3MiAxMUI0O0I0Q0Q7MTEwMyAxMTcyIDExQjQ7CitCNENFO0I0Q0U7MTEwMyAxMTcyIDExQjU7QjRDRTsxMTAzIDExNzIgMTFCNTsKK0I0Q0Y7QjRDRjsxMTAzIDExNzIgMTFCNjtCNENGOzExMDMgMTE3MiAxMUI2OworQjREMDtCNEQwOzExMDMgMTE3MiAxMUI3O0I0RDA7MTEwMyAxMTcyIDExQjc7CitCNEQxO0I0RDE7MTEwMyAxMTcyIDExQjg7QjREMTsxMTAzIDExNzIgMTFCODsKK0I0RDI7QjREMjsxMTAzIDExNzIgMTFCOTtCNEQyOzExMDMgMTE3MiAxMUI5OworQjREMztCNEQzOzExMDMgMTE3MiAxMUJBO0I0RDM7MTEwMyAxMTcyIDExQkE7CitCNEQ0O0I0RDQ7MTEwMyAxMTcyIDExQkI7QjRENDsxMTAzIDExNzIgMTFCQjsKK0I0RDU7QjRENTsxMTAzIDExNzIgMTFCQztCNEQ1OzExMDMgMTE3MiAxMUJDOworQjRENjtCNEQ2OzExMDMgMTE3MiAxMUJEO0I0RDY7MTEwMyAxMTcyIDExQkQ7CitCNEQ3O0I0RDc7MTEwMyAxMTcyIDExQkU7QjRENzsxMTAzIDExNzIgMTFCRTsKK0I0RDg7QjREODsxMTAzIDExNzIgMTFCRjtCNEQ4OzExMDMgMTE3MiAxMUJGOworQjREOTtCNEQ5OzExMDMgMTE3MiAxMUMwO0I0RDk7MTEwMyAxMTcyIDExQzA7CitCNERBO0I0REE7MTEwMyAxMTcyIDExQzE7QjREQTsxMTAzIDExNzIgMTFDMTsKK0I0REI7QjREQjsxMTAzIDExNzIgMTFDMjtCNERCOzExMDMgMTE3MiAxMUMyOworQjREQztCNERDOzExMDMgMTE3MztCNERDOzExMDMgMTE3MzsKK0I0REQ7QjRERDsxMTAzIDExNzMgMTFBODtCNEREOzExMDMgMTE3MyAxMUE4OworQjRERTtCNERFOzExMDMgMTE3MyAxMUE5O0I0REU7MTEwMyAxMTczIDExQTk7CitCNERGO0I0REY7MTEwMyAxMTczIDExQUE7QjRERjsxMTAzIDExNzMgMTFBQTsKK0I0RTA7QjRFMDsxMTAzIDExNzMgMTFBQjtCNEUwOzExMDMgMTE3MyAxMUFCOworQjRFMTtCNEUxOzExMDMgMTE3MyAxMUFDO0I0RTE7MTEwMyAxMTczIDExQUM7CitCNEUyO0I0RTI7MTEwMyAxMTczIDExQUQ7QjRFMjsxMTAzIDExNzMgMTFBRDsKK0I0RTM7QjRFMzsxMTAzIDExNzMgMTFBRTtCNEUzOzExMDMgMTE3MyAxMUFFOworQjRFNDtCNEU0OzExMDMgMTE3MyAxMUFGO0I0RTQ7MTEwMyAxMTczIDExQUY7CitCNEU1O0I0RTU7MTEwMyAxMTczIDExQjA7QjRFNTsxMTAzIDExNzMgMTFCMDsKK0I0RTY7QjRFNjsxMTAzIDExNzMgMTFCMTtCNEU2OzExMDMgMTE3MyAxMUIxOworQjRFNztCNEU3OzExMDMgMTE3MyAxMUIyO0I0RTc7MTEwMyAxMTczIDExQjI7CitCNEU4O0I0RTg7MTEwMyAxMTczIDExQjM7QjRFODsxMTAzIDExNzMgMTFCMzsKK0I0RTk7QjRFOTsxMTAzIDExNzMgMTFCNDtCNEU5OzExMDMgMTE3MyAxMUI0OworQjRFQTtCNEVBOzExMDMgMTE3MyAxMUI1O0I0RUE7MTEwMyAxMTczIDExQjU7CitCNEVCO0I0RUI7MTEwMyAxMTczIDExQjY7QjRFQjsxMTAzIDExNzMgMTFCNjsKK0I0RUM7QjRFQzsxMTAzIDExNzMgMTFCNztCNEVDOzExMDMgMTE3MyAxMUI3OworQjRFRDtCNEVEOzExMDMgMTE3MyAxMUI4O0I0RUQ7MTEwMyAxMTczIDExQjg7CitCNEVFO0I0RUU7MTEwMyAxMTczIDExQjk7QjRFRTsxMTAzIDExNzMgMTFCOTsKK0I0RUY7QjRFRjsxMTAzIDExNzMgMTFCQTtCNEVGOzExMDMgMTE3MyAxMUJBOworQjRGMDtCNEYwOzExMDMgMTE3MyAxMUJCO0I0RjA7MTEwMyAxMTczIDExQkI7CitCNEYxO0I0RjE7MTEwMyAxMTczIDExQkM7QjRGMTsxMTAzIDExNzMgMTFCQzsKK0I0RjI7QjRGMjsxMTAzIDExNzMgMTFCRDtCNEYyOzExMDMgMTE3MyAxMUJEOworQjRGMztCNEYzOzExMDMgMTE3MyAxMUJFO0I0RjM7MTEwMyAxMTczIDExQkU7CitCNEY0O0I0RjQ7MTEwMyAxMTczIDExQkY7QjRGNDsxMTAzIDExNzMgMTFCRjsKK0I0RjU7QjRGNTsxMTAzIDExNzMgMTFDMDtCNEY1OzExMDMgMTE3MyAxMUMwOworQjRGNjtCNEY2OzExMDMgMTE3MyAxMUMxO0I0RjY7MTEwMyAxMTczIDExQzE7CitCNEY3O0I0Rjc7MTEwMyAxMTczIDExQzI7QjRGNzsxMTAzIDExNzMgMTFDMjsKK0I0Rjg7QjRGODsxMTAzIDExNzQ7QjRGODsxMTAzIDExNzQ7CitCNEY5O0I0Rjk7MTEwMyAxMTc0IDExQTg7QjRGOTsxMTAzIDExNzQgMTFBODsKK0I0RkE7QjRGQTsxMTAzIDExNzQgMTFBOTtCNEZBOzExMDMgMTE3NCAxMUE5OworQjRGQjtCNEZCOzExMDMgMTE3NCAxMUFBO0I0RkI7MTEwMyAxMTc0IDExQUE7CitCNEZDO0I0RkM7MTEwMyAxMTc0IDExQUI7QjRGQzsxMTAzIDExNzQgMTFBQjsKK0I0RkQ7QjRGRDsxMTAzIDExNzQgMTFBQztCNEZEOzExMDMgMTE3NCAxMUFDOworQjRGRTtCNEZFOzExMDMgMTE3NCAxMUFEO0I0RkU7MTEwMyAxMTc0IDExQUQ7CitCNEZGO0I0RkY7MTEwMyAxMTc0IDExQUU7QjRGRjsxMTAzIDExNzQgMTFBRTsKK0I1MDA7QjUwMDsxMTAzIDExNzQgMTFBRjtCNTAwOzExMDMgMTE3NCAxMUFGOworQjUwMTtCNTAxOzExMDMgMTE3NCAxMUIwO0I1MDE7MTEwMyAxMTc0IDExQjA7CitCNTAyO0I1MDI7MTEwMyAxMTc0IDExQjE7QjUwMjsxMTAzIDExNzQgMTFCMTsKK0I1MDM7QjUwMzsxMTAzIDExNzQgMTFCMjtCNTAzOzExMDMgMTE3NCAxMUIyOworQjUwNDtCNTA0OzExMDMgMTE3NCAxMUIzO0I1MDQ7MTEwMyAxMTc0IDExQjM7CitCNTA1O0I1MDU7MTEwMyAxMTc0IDExQjQ7QjUwNTsxMTAzIDExNzQgMTFCNDsKK0I1MDY7QjUwNjsxMTAzIDExNzQgMTFCNTtCNTA2OzExMDMgMTE3NCAxMUI1OworQjUwNztCNTA3OzExMDMgMTE3NCAxMUI2O0I1MDc7MTEwMyAxMTc0IDExQjY7CitCNTA4O0I1MDg7MTEwMyAxMTc0IDExQjc7QjUwODsxMTAzIDExNzQgMTFCNzsKK0I1MDk7QjUwOTsxMTAzIDExNzQgMTFCODtCNTA5OzExMDMgMTE3NCAxMUI4OworQjUwQTtCNTBBOzExMDMgMTE3NCAxMUI5O0I1MEE7MTEwMyAxMTc0IDExQjk7CitCNTBCO0I1MEI7MTEwMyAxMTc0IDExQkE7QjUwQjsxMTAzIDExNzQgMTFCQTsKK0I1MEM7QjUwQzsxMTAzIDExNzQgMTFCQjtCNTBDOzExMDMgMTE3NCAxMUJCOworQjUwRDtCNTBEOzExMDMgMTE3NCAxMUJDO0I1MEQ7MTEwMyAxMTc0IDExQkM7CitCNTBFO0I1MEU7MTEwMyAxMTc0IDExQkQ7QjUwRTsxMTAzIDExNzQgMTFCRDsKK0I1MEY7QjUwRjsxMTAzIDExNzQgMTFCRTtCNTBGOzExMDMgMTE3NCAxMUJFOworQjUxMDtCNTEwOzExMDMgMTE3NCAxMUJGO0I1MTA7MTEwMyAxMTc0IDExQkY7CitCNTExO0I1MTE7MTEwMyAxMTc0IDExQzA7QjUxMTsxMTAzIDExNzQgMTFDMDsKK0I1MTI7QjUxMjsxMTAzIDExNzQgMTFDMTtCNTEyOzExMDMgMTE3NCAxMUMxOworQjUxMztCNTEzOzExMDMgMTE3NCAxMUMyO0I1MTM7MTEwMyAxMTc0IDExQzI7CitCNTE0O0I1MTQ7MTEwMyAxMTc1O0I1MTQ7MTEwMyAxMTc1OworQjUxNTtCNTE1OzExMDMgMTE3NSAxMUE4O0I1MTU7MTEwMyAxMTc1IDExQTg7CitCNTE2O0I1MTY7MTEwMyAxMTc1IDExQTk7QjUxNjsxMTAzIDExNzUgMTFBOTsKK0I1MTc7QjUxNzsxMTAzIDExNzUgMTFBQTtCNTE3OzExMDMgMTE3NSAxMUFBOworQjUxODtCNTE4OzExMDMgMTE3NSAxMUFCO0I1MTg7MTEwMyAxMTc1IDExQUI7CitCNTE5O0I1MTk7MTEwMyAxMTc1IDExQUM7QjUxOTsxMTAzIDExNzUgMTFBQzsKK0I1MUE7QjUxQTsxMTAzIDExNzUgMTFBRDtCNTFBOzExMDMgMTE3NSAxMUFEOworQjUxQjtCNTFCOzExMDMgMTE3NSAxMUFFO0I1MUI7MTEwMyAxMTc1IDExQUU7CitCNTFDO0I1MUM7MTEwMyAxMTc1IDExQUY7QjUxQzsxMTAzIDExNzUgMTFBRjsKK0I1MUQ7QjUxRDsxMTAzIDExNzUgMTFCMDtCNTFEOzExMDMgMTE3NSAxMUIwOworQjUxRTtCNTFFOzExMDMgMTE3NSAxMUIxO0I1MUU7MTEwMyAxMTc1IDExQjE7CitCNTFGO0I1MUY7MTEwMyAxMTc1IDExQjI7QjUxRjsxMTAzIDExNzUgMTFCMjsKK0I1MjA7QjUyMDsxMTAzIDExNzUgMTFCMztCNTIwOzExMDMgMTE3NSAxMUIzOworQjUyMTtCNTIxOzExMDMgMTE3NSAxMUI0O0I1MjE7MTEwMyAxMTc1IDExQjQ7CitCNTIyO0I1MjI7MTEwMyAxMTc1IDExQjU7QjUyMjsxMTAzIDExNzUgMTFCNTsKK0I1MjM7QjUyMzsxMTAzIDExNzUgMTFCNjtCNTIzOzExMDMgMTE3NSAxMUI2OworQjUyNDtCNTI0OzExMDMgMTE3NSAxMUI3O0I1MjQ7MTEwMyAxMTc1IDExQjc7CitCNTI1O0I1MjU7MTEwMyAxMTc1IDExQjg7QjUyNTsxMTAzIDExNzUgMTFCODsKK0I1MjY7QjUyNjsxMTAzIDExNzUgMTFCOTtCNTI2OzExMDMgMTE3NSAxMUI5OworQjUyNztCNTI3OzExMDMgMTE3NSAxMUJBO0I1Mjc7MTEwMyAxMTc1IDExQkE7CitCNTI4O0I1Mjg7MTEwMyAxMTc1IDExQkI7QjUyODsxMTAzIDExNzUgMTFCQjsKK0I1Mjk7QjUyOTsxMTAzIDExNzUgMTFCQztCNTI5OzExMDMgMTE3NSAxMUJDOworQjUyQTtCNTJBOzExMDMgMTE3NSAxMUJEO0I1MkE7MTEwMyAxMTc1IDExQkQ7CitCNTJCO0I1MkI7MTEwMyAxMTc1IDExQkU7QjUyQjsxMTAzIDExNzUgMTFCRTsKK0I1MkM7QjUyQzsxMTAzIDExNzUgMTFCRjtCNTJDOzExMDMgMTE3NSAxMUJGOworQjUyRDtCNTJEOzExMDMgMTE3NSAxMUMwO0I1MkQ7MTEwMyAxMTc1IDExQzA7CitCNTJFO0I1MkU7MTEwMyAxMTc1IDExQzE7QjUyRTsxMTAzIDExNzUgMTFDMTsKK0I1MkY7QjUyRjsxMTAzIDExNzUgMTFDMjtCNTJGOzExMDMgMTE3NSAxMUMyOworQjUzMDtCNTMwOzExMDQgMTE2MTtCNTMwOzExMDQgMTE2MTsKK0I1MzE7QjUzMTsxMTA0IDExNjEgMTFBODtCNTMxOzExMDQgMTE2MSAxMUE4OworQjUzMjtCNTMyOzExMDQgMTE2MSAxMUE5O0I1MzI7MTEwNCAxMTYxIDExQTk7CitCNTMzO0I1MzM7MTEwNCAxMTYxIDExQUE7QjUzMzsxMTA0IDExNjEgMTFBQTsKK0I1MzQ7QjUzNDsxMTA0IDExNjEgMTFBQjtCNTM0OzExMDQgMTE2MSAxMUFCOworQjUzNTtCNTM1OzExMDQgMTE2MSAxMUFDO0I1MzU7MTEwNCAxMTYxIDExQUM7CitCNTM2O0I1MzY7MTEwNCAxMTYxIDExQUQ7QjUzNjsxMTA0IDExNjEgMTFBRDsKK0I1Mzc7QjUzNzsxMTA0IDExNjEgMTFBRTtCNTM3OzExMDQgMTE2MSAxMUFFOworQjUzODtCNTM4OzExMDQgMTE2MSAxMUFGO0I1Mzg7MTEwNCAxMTYxIDExQUY7CitCNTM5O0I1Mzk7MTEwNCAxMTYxIDExQjA7QjUzOTsxMTA0IDExNjEgMTFCMDsKK0I1M0E7QjUzQTsxMTA0IDExNjEgMTFCMTtCNTNBOzExMDQgMTE2MSAxMUIxOworQjUzQjtCNTNCOzExMDQgMTE2MSAxMUIyO0I1M0I7MTEwNCAxMTYxIDExQjI7CitCNTNDO0I1M0M7MTEwNCAxMTYxIDExQjM7QjUzQzsxMTA0IDExNjEgMTFCMzsKK0I1M0Q7QjUzRDsxMTA0IDExNjEgMTFCNDtCNTNEOzExMDQgMTE2MSAxMUI0OworQjUzRTtCNTNFOzExMDQgMTE2MSAxMUI1O0I1M0U7MTEwNCAxMTYxIDExQjU7CitCNTNGO0I1M0Y7MTEwNCAxMTYxIDExQjY7QjUzRjsxMTA0IDExNjEgMTFCNjsKK0I1NDA7QjU0MDsxMTA0IDExNjEgMTFCNztCNTQwOzExMDQgMTE2MSAxMUI3OworQjU0MTtCNTQxOzExMDQgMTE2MSAxMUI4O0I1NDE7MTEwNCAxMTYxIDExQjg7CitCNTQyO0I1NDI7MTEwNCAxMTYxIDExQjk7QjU0MjsxMTA0IDExNjEgMTFCOTsKK0I1NDM7QjU0MzsxMTA0IDExNjEgMTFCQTtCNTQzOzExMDQgMTE2MSAxMUJBOworQjU0NDtCNTQ0OzExMDQgMTE2MSAxMUJCO0I1NDQ7MTEwNCAxMTYxIDExQkI7CitCNTQ1O0I1NDU7MTEwNCAxMTYxIDExQkM7QjU0NTsxMTA0IDExNjEgMTFCQzsKK0I1NDY7QjU0NjsxMTA0IDExNjEgMTFCRDtCNTQ2OzExMDQgMTE2MSAxMUJEOworQjU0NztCNTQ3OzExMDQgMTE2MSAxMUJFO0I1NDc7MTEwNCAxMTYxIDExQkU7CitCNTQ4O0I1NDg7MTEwNCAxMTYxIDExQkY7QjU0ODsxMTA0IDExNjEgMTFCRjsKK0I1NDk7QjU0OTsxMTA0IDExNjEgMTFDMDtCNTQ5OzExMDQgMTE2MSAxMUMwOworQjU0QTtCNTRBOzExMDQgMTE2MSAxMUMxO0I1NEE7MTEwNCAxMTYxIDExQzE7CitCNTRCO0I1NEI7MTEwNCAxMTYxIDExQzI7QjU0QjsxMTA0IDExNjEgMTFDMjsKK0I1NEM7QjU0QzsxMTA0IDExNjI7QjU0QzsxMTA0IDExNjI7CitCNTREO0I1NEQ7MTEwNCAxMTYyIDExQTg7QjU0RDsxMTA0IDExNjIgMTFBODsKK0I1NEU7QjU0RTsxMTA0IDExNjIgMTFBOTtCNTRFOzExMDQgMTE2MiAxMUE5OworQjU0RjtCNTRGOzExMDQgMTE2MiAxMUFBO0I1NEY7MTEwNCAxMTYyIDExQUE7CitCNTUwO0I1NTA7MTEwNCAxMTYyIDExQUI7QjU1MDsxMTA0IDExNjIgMTFBQjsKK0I1NTE7QjU1MTsxMTA0IDExNjIgMTFBQztCNTUxOzExMDQgMTE2MiAxMUFDOworQjU1MjtCNTUyOzExMDQgMTE2MiAxMUFEO0I1NTI7MTEwNCAxMTYyIDExQUQ7CitCNTUzO0I1NTM7MTEwNCAxMTYyIDExQUU7QjU1MzsxMTA0IDExNjIgMTFBRTsKK0I1NTQ7QjU1NDsxMTA0IDExNjIgMTFBRjtCNTU0OzExMDQgMTE2MiAxMUFGOworQjU1NTtCNTU1OzExMDQgMTE2MiAxMUIwO0I1NTU7MTEwNCAxMTYyIDExQjA7CitCNTU2O0I1NTY7MTEwNCAxMTYyIDExQjE7QjU1NjsxMTA0IDExNjIgMTFCMTsKK0I1NTc7QjU1NzsxMTA0IDExNjIgMTFCMjtCNTU3OzExMDQgMTE2MiAxMUIyOworQjU1ODtCNTU4OzExMDQgMTE2MiAxMUIzO0I1NTg7MTEwNCAxMTYyIDExQjM7CitCNTU5O0I1NTk7MTEwNCAxMTYyIDExQjQ7QjU1OTsxMTA0IDExNjIgMTFCNDsKK0I1NUE7QjU1QTsxMTA0IDExNjIgMTFCNTtCNTVBOzExMDQgMTE2MiAxMUI1OworQjU1QjtCNTVCOzExMDQgMTE2MiAxMUI2O0I1NUI7MTEwNCAxMTYyIDExQjY7CitCNTVDO0I1NUM7MTEwNCAxMTYyIDExQjc7QjU1QzsxMTA0IDExNjIgMTFCNzsKK0I1NUQ7QjU1RDsxMTA0IDExNjIgMTFCODtCNTVEOzExMDQgMTE2MiAxMUI4OworQjU1RTtCNTVFOzExMDQgMTE2MiAxMUI5O0I1NUU7MTEwNCAxMTYyIDExQjk7CitCNTVGO0I1NUY7MTEwNCAxMTYyIDExQkE7QjU1RjsxMTA0IDExNjIgMTFCQTsKK0I1NjA7QjU2MDsxMTA0IDExNjIgMTFCQjtCNTYwOzExMDQgMTE2MiAxMUJCOworQjU2MTtCNTYxOzExMDQgMTE2MiAxMUJDO0I1NjE7MTEwNCAxMTYyIDExQkM7CitCNTYyO0I1NjI7MTEwNCAxMTYyIDExQkQ7QjU2MjsxMTA0IDExNjIgMTFCRDsKK0I1NjM7QjU2MzsxMTA0IDExNjIgMTFCRTtCNTYzOzExMDQgMTE2MiAxMUJFOworQjU2NDtCNTY0OzExMDQgMTE2MiAxMUJGO0I1NjQ7MTEwNCAxMTYyIDExQkY7CitCNTY1O0I1NjU7MTEwNCAxMTYyIDExQzA7QjU2NTsxMTA0IDExNjIgMTFDMDsKK0I1NjY7QjU2NjsxMTA0IDExNjIgMTFDMTtCNTY2OzExMDQgMTE2MiAxMUMxOworQjU2NztCNTY3OzExMDQgMTE2MiAxMUMyO0I1Njc7MTEwNCAxMTYyIDExQzI7CitCNTY4O0I1Njg7MTEwNCAxMTYzO0I1Njg7MTEwNCAxMTYzOworQjU2OTtCNTY5OzExMDQgMTE2MyAxMUE4O0I1Njk7MTEwNCAxMTYzIDExQTg7CitCNTZBO0I1NkE7MTEwNCAxMTYzIDExQTk7QjU2QTsxMTA0IDExNjMgMTFBOTsKK0I1NkI7QjU2QjsxMTA0IDExNjMgMTFBQTtCNTZCOzExMDQgMTE2MyAxMUFBOworQjU2QztCNTZDOzExMDQgMTE2MyAxMUFCO0I1NkM7MTEwNCAxMTYzIDExQUI7CitCNTZEO0I1NkQ7MTEwNCAxMTYzIDExQUM7QjU2RDsxMTA0IDExNjMgMTFBQzsKK0I1NkU7QjU2RTsxMTA0IDExNjMgMTFBRDtCNTZFOzExMDQgMTE2MyAxMUFEOworQjU2RjtCNTZGOzExMDQgMTE2MyAxMUFFO0I1NkY7MTEwNCAxMTYzIDExQUU7CitCNTcwO0I1NzA7MTEwNCAxMTYzIDExQUY7QjU3MDsxMTA0IDExNjMgMTFBRjsKK0I1NzE7QjU3MTsxMTA0IDExNjMgMTFCMDtCNTcxOzExMDQgMTE2MyAxMUIwOworQjU3MjtCNTcyOzExMDQgMTE2MyAxMUIxO0I1NzI7MTEwNCAxMTYzIDExQjE7CitCNTczO0I1NzM7MTEwNCAxMTYzIDExQjI7QjU3MzsxMTA0IDExNjMgMTFCMjsKK0I1NzQ7QjU3NDsxMTA0IDExNjMgMTFCMztCNTc0OzExMDQgMTE2MyAxMUIzOworQjU3NTtCNTc1OzExMDQgMTE2MyAxMUI0O0I1NzU7MTEwNCAxMTYzIDExQjQ7CitCNTc2O0I1NzY7MTEwNCAxMTYzIDExQjU7QjU3NjsxMTA0IDExNjMgMTFCNTsKK0I1Nzc7QjU3NzsxMTA0IDExNjMgMTFCNjtCNTc3OzExMDQgMTE2MyAxMUI2OworQjU3ODtCNTc4OzExMDQgMTE2MyAxMUI3O0I1Nzg7MTEwNCAxMTYzIDExQjc7CitCNTc5O0I1Nzk7MTEwNCAxMTYzIDExQjg7QjU3OTsxMTA0IDExNjMgMTFCODsKK0I1N0E7QjU3QTsxMTA0IDExNjMgMTFCOTtCNTdBOzExMDQgMTE2MyAxMUI5OworQjU3QjtCNTdCOzExMDQgMTE2MyAxMUJBO0I1N0I7MTEwNCAxMTYzIDExQkE7CitCNTdDO0I1N0M7MTEwNCAxMTYzIDExQkI7QjU3QzsxMTA0IDExNjMgMTFCQjsKK0I1N0Q7QjU3RDsxMTA0IDExNjMgMTFCQztCNTdEOzExMDQgMTE2MyAxMUJDOworQjU3RTtCNTdFOzExMDQgMTE2MyAxMUJEO0I1N0U7MTEwNCAxMTYzIDExQkQ7CitCNTdGO0I1N0Y7MTEwNCAxMTYzIDExQkU7QjU3RjsxMTA0IDExNjMgMTFCRTsKK0I1ODA7QjU4MDsxMTA0IDExNjMgMTFCRjtCNTgwOzExMDQgMTE2MyAxMUJGOworQjU4MTtCNTgxOzExMDQgMTE2MyAxMUMwO0I1ODE7MTEwNCAxMTYzIDExQzA7CitCNTgyO0I1ODI7MTEwNCAxMTYzIDExQzE7QjU4MjsxMTA0IDExNjMgMTFDMTsKK0I1ODM7QjU4MzsxMTA0IDExNjMgMTFDMjtCNTgzOzExMDQgMTE2MyAxMUMyOworQjU4NDtCNTg0OzExMDQgMTE2NDtCNTg0OzExMDQgMTE2NDsKK0I1ODU7QjU4NTsxMTA0IDExNjQgMTFBODtCNTg1OzExMDQgMTE2NCAxMUE4OworQjU4NjtCNTg2OzExMDQgMTE2NCAxMUE5O0I1ODY7MTEwNCAxMTY0IDExQTk7CitCNTg3O0I1ODc7MTEwNCAxMTY0IDExQUE7QjU4NzsxMTA0IDExNjQgMTFBQTsKK0I1ODg7QjU4ODsxMTA0IDExNjQgMTFBQjtCNTg4OzExMDQgMTE2NCAxMUFCOworQjU4OTtCNTg5OzExMDQgMTE2NCAxMUFDO0I1ODk7MTEwNCAxMTY0IDExQUM7CitCNThBO0I1OEE7MTEwNCAxMTY0IDExQUQ7QjU4QTsxMTA0IDExNjQgMTFBRDsKK0I1OEI7QjU4QjsxMTA0IDExNjQgMTFBRTtCNThCOzExMDQgMTE2NCAxMUFFOworQjU4QztCNThDOzExMDQgMTE2NCAxMUFGO0I1OEM7MTEwNCAxMTY0IDExQUY7CitCNThEO0I1OEQ7MTEwNCAxMTY0IDExQjA7QjU4RDsxMTA0IDExNjQgMTFCMDsKK0I1OEU7QjU4RTsxMTA0IDExNjQgMTFCMTtCNThFOzExMDQgMTE2NCAxMUIxOworQjU4RjtCNThGOzExMDQgMTE2NCAxMUIyO0I1OEY7MTEwNCAxMTY0IDExQjI7CitCNTkwO0I1OTA7MTEwNCAxMTY0IDExQjM7QjU5MDsxMTA0IDExNjQgMTFCMzsKK0I1OTE7QjU5MTsxMTA0IDExNjQgMTFCNDtCNTkxOzExMDQgMTE2NCAxMUI0OworQjU5MjtCNTkyOzExMDQgMTE2NCAxMUI1O0I1OTI7MTEwNCAxMTY0IDExQjU7CitCNTkzO0I1OTM7MTEwNCAxMTY0IDExQjY7QjU5MzsxMTA0IDExNjQgMTFCNjsKK0I1OTQ7QjU5NDsxMTA0IDExNjQgMTFCNztCNTk0OzExMDQgMTE2NCAxMUI3OworQjU5NTtCNTk1OzExMDQgMTE2NCAxMUI4O0I1OTU7MTEwNCAxMTY0IDExQjg7CitCNTk2O0I1OTY7MTEwNCAxMTY0IDExQjk7QjU5NjsxMTA0IDExNjQgMTFCOTsKK0I1OTc7QjU5NzsxMTA0IDExNjQgMTFCQTtCNTk3OzExMDQgMTE2NCAxMUJBOworQjU5ODtCNTk4OzExMDQgMTE2NCAxMUJCO0I1OTg7MTEwNCAxMTY0IDExQkI7CitCNTk5O0I1OTk7MTEwNCAxMTY0IDExQkM7QjU5OTsxMTA0IDExNjQgMTFCQzsKK0I1OUE7QjU5QTsxMTA0IDExNjQgMTFCRDtCNTlBOzExMDQgMTE2NCAxMUJEOworQjU5QjtCNTlCOzExMDQgMTE2NCAxMUJFO0I1OUI7MTEwNCAxMTY0IDExQkU7CitCNTlDO0I1OUM7MTEwNCAxMTY0IDExQkY7QjU5QzsxMTA0IDExNjQgMTFCRjsKK0I1OUQ7QjU5RDsxMTA0IDExNjQgMTFDMDtCNTlEOzExMDQgMTE2NCAxMUMwOworQjU5RTtCNTlFOzExMDQgMTE2NCAxMUMxO0I1OUU7MTEwNCAxMTY0IDExQzE7CitCNTlGO0I1OUY7MTEwNCAxMTY0IDExQzI7QjU5RjsxMTA0IDExNjQgMTFDMjsKK0I1QTA7QjVBMDsxMTA0IDExNjU7QjVBMDsxMTA0IDExNjU7CitCNUExO0I1QTE7MTEwNCAxMTY1IDExQTg7QjVBMTsxMTA0IDExNjUgMTFBODsKK0I1QTI7QjVBMjsxMTA0IDExNjUgMTFBOTtCNUEyOzExMDQgMTE2NSAxMUE5OworQjVBMztCNUEzOzExMDQgMTE2NSAxMUFBO0I1QTM7MTEwNCAxMTY1IDExQUE7CitCNUE0O0I1QTQ7MTEwNCAxMTY1IDExQUI7QjVBNDsxMTA0IDExNjUgMTFBQjsKK0I1QTU7QjVBNTsxMTA0IDExNjUgMTFBQztCNUE1OzExMDQgMTE2NSAxMUFDOworQjVBNjtCNUE2OzExMDQgMTE2NSAxMUFEO0I1QTY7MTEwNCAxMTY1IDExQUQ7CitCNUE3O0I1QTc7MTEwNCAxMTY1IDExQUU7QjVBNzsxMTA0IDExNjUgMTFBRTsKK0I1QTg7QjVBODsxMTA0IDExNjUgMTFBRjtCNUE4OzExMDQgMTE2NSAxMUFGOworQjVBOTtCNUE5OzExMDQgMTE2NSAxMUIwO0I1QTk7MTEwNCAxMTY1IDExQjA7CitCNUFBO0I1QUE7MTEwNCAxMTY1IDExQjE7QjVBQTsxMTA0IDExNjUgMTFCMTsKK0I1QUI7QjVBQjsxMTA0IDExNjUgMTFCMjtCNUFCOzExMDQgMTE2NSAxMUIyOworQjVBQztCNUFDOzExMDQgMTE2NSAxMUIzO0I1QUM7MTEwNCAxMTY1IDExQjM7CitCNUFEO0I1QUQ7MTEwNCAxMTY1IDExQjQ7QjVBRDsxMTA0IDExNjUgMTFCNDsKK0I1QUU7QjVBRTsxMTA0IDExNjUgMTFCNTtCNUFFOzExMDQgMTE2NSAxMUI1OworQjVBRjtCNUFGOzExMDQgMTE2NSAxMUI2O0I1QUY7MTEwNCAxMTY1IDExQjY7CitCNUIwO0I1QjA7MTEwNCAxMTY1IDExQjc7QjVCMDsxMTA0IDExNjUgMTFCNzsKK0I1QjE7QjVCMTsxMTA0IDExNjUgMTFCODtCNUIxOzExMDQgMTE2NSAxMUI4OworQjVCMjtCNUIyOzExMDQgMTE2NSAxMUI5O0I1QjI7MTEwNCAxMTY1IDExQjk7CitCNUIzO0I1QjM7MTEwNCAxMTY1IDExQkE7QjVCMzsxMTA0IDExNjUgMTFCQTsKK0I1QjQ7QjVCNDsxMTA0IDExNjUgMTFCQjtCNUI0OzExMDQgMTE2NSAxMUJCOworQjVCNTtCNUI1OzExMDQgMTE2NSAxMUJDO0I1QjU7MTEwNCAxMTY1IDExQkM7CitCNUI2O0I1QjY7MTEwNCAxMTY1IDExQkQ7QjVCNjsxMTA0IDExNjUgMTFCRDsKK0I1Qjc7QjVCNzsxMTA0IDExNjUgMTFCRTtCNUI3OzExMDQgMTE2NSAxMUJFOworQjVCODtCNUI4OzExMDQgMTE2NSAxMUJGO0I1Qjg7MTEwNCAxMTY1IDExQkY7CitCNUI5O0I1Qjk7MTEwNCAxMTY1IDExQzA7QjVCOTsxMTA0IDExNjUgMTFDMDsKK0I1QkE7QjVCQTsxMTA0IDExNjUgMTFDMTtCNUJBOzExMDQgMTE2NSAxMUMxOworQjVCQjtCNUJCOzExMDQgMTE2NSAxMUMyO0I1QkI7MTEwNCAxMTY1IDExQzI7CitCNUJDO0I1QkM7MTEwNCAxMTY2O0I1QkM7MTEwNCAxMTY2OworQjVCRDtCNUJEOzExMDQgMTE2NiAxMUE4O0I1QkQ7MTEwNCAxMTY2IDExQTg7CitCNUJFO0I1QkU7MTEwNCAxMTY2IDExQTk7QjVCRTsxMTA0IDExNjYgMTFBOTsKK0I1QkY7QjVCRjsxMTA0IDExNjYgMTFBQTtCNUJGOzExMDQgMTE2NiAxMUFBOworQjVDMDtCNUMwOzExMDQgMTE2NiAxMUFCO0I1QzA7MTEwNCAxMTY2IDExQUI7CitCNUMxO0I1QzE7MTEwNCAxMTY2IDExQUM7QjVDMTsxMTA0IDExNjYgMTFBQzsKK0I1QzI7QjVDMjsxMTA0IDExNjYgMTFBRDtCNUMyOzExMDQgMTE2NiAxMUFEOworQjVDMztCNUMzOzExMDQgMTE2NiAxMUFFO0I1QzM7MTEwNCAxMTY2IDExQUU7CitCNUM0O0I1QzQ7MTEwNCAxMTY2IDExQUY7QjVDNDsxMTA0IDExNjYgMTFBRjsKK0I1QzU7QjVDNTsxMTA0IDExNjYgMTFCMDtCNUM1OzExMDQgMTE2NiAxMUIwOworQjVDNjtCNUM2OzExMDQgMTE2NiAxMUIxO0I1QzY7MTEwNCAxMTY2IDExQjE7CitCNUM3O0I1Qzc7MTEwNCAxMTY2IDExQjI7QjVDNzsxMTA0IDExNjYgMTFCMjsKK0I1Qzg7QjVDODsxMTA0IDExNjYgMTFCMztCNUM4OzExMDQgMTE2NiAxMUIzOworQjVDOTtCNUM5OzExMDQgMTE2NiAxMUI0O0I1Qzk7MTEwNCAxMTY2IDExQjQ7CitCNUNBO0I1Q0E7MTEwNCAxMTY2IDExQjU7QjVDQTsxMTA0IDExNjYgMTFCNTsKK0I1Q0I7QjVDQjsxMTA0IDExNjYgMTFCNjtCNUNCOzExMDQgMTE2NiAxMUI2OworQjVDQztCNUNDOzExMDQgMTE2NiAxMUI3O0I1Q0M7MTEwNCAxMTY2IDExQjc7CitCNUNEO0I1Q0Q7MTEwNCAxMTY2IDExQjg7QjVDRDsxMTA0IDExNjYgMTFCODsKK0I1Q0U7QjVDRTsxMTA0IDExNjYgMTFCOTtCNUNFOzExMDQgMTE2NiAxMUI5OworQjVDRjtCNUNGOzExMDQgMTE2NiAxMUJBO0I1Q0Y7MTEwNCAxMTY2IDExQkE7CitCNUQwO0I1RDA7MTEwNCAxMTY2IDExQkI7QjVEMDsxMTA0IDExNjYgMTFCQjsKK0I1RDE7QjVEMTsxMTA0IDExNjYgMTFCQztCNUQxOzExMDQgMTE2NiAxMUJDOworQjVEMjtCNUQyOzExMDQgMTE2NiAxMUJEO0I1RDI7MTEwNCAxMTY2IDExQkQ7CitCNUQzO0I1RDM7MTEwNCAxMTY2IDExQkU7QjVEMzsxMTA0IDExNjYgMTFCRTsKK0I1RDQ7QjVENDsxMTA0IDExNjYgMTFCRjtCNUQ0OzExMDQgMTE2NiAxMUJGOworQjVENTtCNUQ1OzExMDQgMTE2NiAxMUMwO0I1RDU7MTEwNCAxMTY2IDExQzA7CitCNUQ2O0I1RDY7MTEwNCAxMTY2IDExQzE7QjVENjsxMTA0IDExNjYgMTFDMTsKK0I1RDc7QjVENzsxMTA0IDExNjYgMTFDMjtCNUQ3OzExMDQgMTE2NiAxMUMyOworQjVEODtCNUQ4OzExMDQgMTE2NztCNUQ4OzExMDQgMTE2NzsKK0I1RDk7QjVEOTsxMTA0IDExNjcgMTFBODtCNUQ5OzExMDQgMTE2NyAxMUE4OworQjVEQTtCNURBOzExMDQgMTE2NyAxMUE5O0I1REE7MTEwNCAxMTY3IDExQTk7CitCNURCO0I1REI7MTEwNCAxMTY3IDExQUE7QjVEQjsxMTA0IDExNjcgMTFBQTsKK0I1REM7QjVEQzsxMTA0IDExNjcgMTFBQjtCNURDOzExMDQgMTE2NyAxMUFCOworQjVERDtCNUREOzExMDQgMTE2NyAxMUFDO0I1REQ7MTEwNCAxMTY3IDExQUM7CitCNURFO0I1REU7MTEwNCAxMTY3IDExQUQ7QjVERTsxMTA0IDExNjcgMTFBRDsKK0I1REY7QjVERjsxMTA0IDExNjcgMTFBRTtCNURGOzExMDQgMTE2NyAxMUFFOworQjVFMDtCNUUwOzExMDQgMTE2NyAxMUFGO0I1RTA7MTEwNCAxMTY3IDExQUY7CitCNUUxO0I1RTE7MTEwNCAxMTY3IDExQjA7QjVFMTsxMTA0IDExNjcgMTFCMDsKK0I1RTI7QjVFMjsxMTA0IDExNjcgMTFCMTtCNUUyOzExMDQgMTE2NyAxMUIxOworQjVFMztCNUUzOzExMDQgMTE2NyAxMUIyO0I1RTM7MTEwNCAxMTY3IDExQjI7CitCNUU0O0I1RTQ7MTEwNCAxMTY3IDExQjM7QjVFNDsxMTA0IDExNjcgMTFCMzsKK0I1RTU7QjVFNTsxMTA0IDExNjcgMTFCNDtCNUU1OzExMDQgMTE2NyAxMUI0OworQjVFNjtCNUU2OzExMDQgMTE2NyAxMUI1O0I1RTY7MTEwNCAxMTY3IDExQjU7CitCNUU3O0I1RTc7MTEwNCAxMTY3IDExQjY7QjVFNzsxMTA0IDExNjcgMTFCNjsKK0I1RTg7QjVFODsxMTA0IDExNjcgMTFCNztCNUU4OzExMDQgMTE2NyAxMUI3OworQjVFOTtCNUU5OzExMDQgMTE2NyAxMUI4O0I1RTk7MTEwNCAxMTY3IDExQjg7CitCNUVBO0I1RUE7MTEwNCAxMTY3IDExQjk7QjVFQTsxMTA0IDExNjcgMTFCOTsKK0I1RUI7QjVFQjsxMTA0IDExNjcgMTFCQTtCNUVCOzExMDQgMTE2NyAxMUJBOworQjVFQztCNUVDOzExMDQgMTE2NyAxMUJCO0I1RUM7MTEwNCAxMTY3IDExQkI7CitCNUVEO0I1RUQ7MTEwNCAxMTY3IDExQkM7QjVFRDsxMTA0IDExNjcgMTFCQzsKK0I1RUU7QjVFRTsxMTA0IDExNjcgMTFCRDtCNUVFOzExMDQgMTE2NyAxMUJEOworQjVFRjtCNUVGOzExMDQgMTE2NyAxMUJFO0I1RUY7MTEwNCAxMTY3IDExQkU7CitCNUYwO0I1RjA7MTEwNCAxMTY3IDExQkY7QjVGMDsxMTA0IDExNjcgMTFCRjsKK0I1RjE7QjVGMTsxMTA0IDExNjcgMTFDMDtCNUYxOzExMDQgMTE2NyAxMUMwOworQjVGMjtCNUYyOzExMDQgMTE2NyAxMUMxO0I1RjI7MTEwNCAxMTY3IDExQzE7CitCNUYzO0I1RjM7MTEwNCAxMTY3IDExQzI7QjVGMzsxMTA0IDExNjcgMTFDMjsKK0I1RjQ7QjVGNDsxMTA0IDExNjg7QjVGNDsxMTA0IDExNjg7CitCNUY1O0I1RjU7MTEwNCAxMTY4IDExQTg7QjVGNTsxMTA0IDExNjggMTFBODsKK0I1RjY7QjVGNjsxMTA0IDExNjggMTFBOTtCNUY2OzExMDQgMTE2OCAxMUE5OworQjVGNztCNUY3OzExMDQgMTE2OCAxMUFBO0I1Rjc7MTEwNCAxMTY4IDExQUE7CitCNUY4O0I1Rjg7MTEwNCAxMTY4IDExQUI7QjVGODsxMTA0IDExNjggMTFBQjsKK0I1Rjk7QjVGOTsxMTA0IDExNjggMTFBQztCNUY5OzExMDQgMTE2OCAxMUFDOworQjVGQTtCNUZBOzExMDQgMTE2OCAxMUFEO0I1RkE7MTEwNCAxMTY4IDExQUQ7CitCNUZCO0I1RkI7MTEwNCAxMTY4IDExQUU7QjVGQjsxMTA0IDExNjggMTFBRTsKK0I1RkM7QjVGQzsxMTA0IDExNjggMTFBRjtCNUZDOzExMDQgMTE2OCAxMUFGOworQjVGRDtCNUZEOzExMDQgMTE2OCAxMUIwO0I1RkQ7MTEwNCAxMTY4IDExQjA7CitCNUZFO0I1RkU7MTEwNCAxMTY4IDExQjE7QjVGRTsxMTA0IDExNjggMTFCMTsKK0I1RkY7QjVGRjsxMTA0IDExNjggMTFCMjtCNUZGOzExMDQgMTE2OCAxMUIyOworQjYwMDtCNjAwOzExMDQgMTE2OCAxMUIzO0I2MDA7MTEwNCAxMTY4IDExQjM7CitCNjAxO0I2MDE7MTEwNCAxMTY4IDExQjQ7QjYwMTsxMTA0IDExNjggMTFCNDsKK0I2MDI7QjYwMjsxMTA0IDExNjggMTFCNTtCNjAyOzExMDQgMTE2OCAxMUI1OworQjYwMztCNjAzOzExMDQgMTE2OCAxMUI2O0I2MDM7MTEwNCAxMTY4IDExQjY7CitCNjA0O0I2MDQ7MTEwNCAxMTY4IDExQjc7QjYwNDsxMTA0IDExNjggMTFCNzsKK0I2MDU7QjYwNTsxMTA0IDExNjggMTFCODtCNjA1OzExMDQgMTE2OCAxMUI4OworQjYwNjtCNjA2OzExMDQgMTE2OCAxMUI5O0I2MDY7MTEwNCAxMTY4IDExQjk7CitCNjA3O0I2MDc7MTEwNCAxMTY4IDExQkE7QjYwNzsxMTA0IDExNjggMTFCQTsKK0I2MDg7QjYwODsxMTA0IDExNjggMTFCQjtCNjA4OzExMDQgMTE2OCAxMUJCOworQjYwOTtCNjA5OzExMDQgMTE2OCAxMUJDO0I2MDk7MTEwNCAxMTY4IDExQkM7CitCNjBBO0I2MEE7MTEwNCAxMTY4IDExQkQ7QjYwQTsxMTA0IDExNjggMTFCRDsKK0I2MEI7QjYwQjsxMTA0IDExNjggMTFCRTtCNjBCOzExMDQgMTE2OCAxMUJFOworQjYwQztCNjBDOzExMDQgMTE2OCAxMUJGO0I2MEM7MTEwNCAxMTY4IDExQkY7CitCNjBEO0I2MEQ7MTEwNCAxMTY4IDExQzA7QjYwRDsxMTA0IDExNjggMTFDMDsKK0I2MEU7QjYwRTsxMTA0IDExNjggMTFDMTtCNjBFOzExMDQgMTE2OCAxMUMxOworQjYwRjtCNjBGOzExMDQgMTE2OCAxMUMyO0I2MEY7MTEwNCAxMTY4IDExQzI7CitCNjEwO0I2MTA7MTEwNCAxMTY5O0I2MTA7MTEwNCAxMTY5OworQjYxMTtCNjExOzExMDQgMTE2OSAxMUE4O0I2MTE7MTEwNCAxMTY5IDExQTg7CitCNjEyO0I2MTI7MTEwNCAxMTY5IDExQTk7QjYxMjsxMTA0IDExNjkgMTFBOTsKK0I2MTM7QjYxMzsxMTA0IDExNjkgMTFBQTtCNjEzOzExMDQgMTE2OSAxMUFBOworQjYxNDtCNjE0OzExMDQgMTE2OSAxMUFCO0I2MTQ7MTEwNCAxMTY5IDExQUI7CitCNjE1O0I2MTU7MTEwNCAxMTY5IDExQUM7QjYxNTsxMTA0IDExNjkgMTFBQzsKK0I2MTY7QjYxNjsxMTA0IDExNjkgMTFBRDtCNjE2OzExMDQgMTE2OSAxMUFEOworQjYxNztCNjE3OzExMDQgMTE2OSAxMUFFO0I2MTc7MTEwNCAxMTY5IDExQUU7CitCNjE4O0I2MTg7MTEwNCAxMTY5IDExQUY7QjYxODsxMTA0IDExNjkgMTFBRjsKK0I2MTk7QjYxOTsxMTA0IDExNjkgMTFCMDtCNjE5OzExMDQgMTE2OSAxMUIwOworQjYxQTtCNjFBOzExMDQgMTE2OSAxMUIxO0I2MUE7MTEwNCAxMTY5IDExQjE7CitCNjFCO0I2MUI7MTEwNCAxMTY5IDExQjI7QjYxQjsxMTA0IDExNjkgMTFCMjsKK0I2MUM7QjYxQzsxMTA0IDExNjkgMTFCMztCNjFDOzExMDQgMTE2OSAxMUIzOworQjYxRDtCNjFEOzExMDQgMTE2OSAxMUI0O0I2MUQ7MTEwNCAxMTY5IDExQjQ7CitCNjFFO0I2MUU7MTEwNCAxMTY5IDExQjU7QjYxRTsxMTA0IDExNjkgMTFCNTsKK0I2MUY7QjYxRjsxMTA0IDExNjkgMTFCNjtCNjFGOzExMDQgMTE2OSAxMUI2OworQjYyMDtCNjIwOzExMDQgMTE2OSAxMUI3O0I2MjA7MTEwNCAxMTY5IDExQjc7CitCNjIxO0I2MjE7MTEwNCAxMTY5IDExQjg7QjYyMTsxMTA0IDExNjkgMTFCODsKK0I2MjI7QjYyMjsxMTA0IDExNjkgMTFCOTtCNjIyOzExMDQgMTE2OSAxMUI5OworQjYyMztCNjIzOzExMDQgMTE2OSAxMUJBO0I2MjM7MTEwNCAxMTY5IDExQkE7CitCNjI0O0I2MjQ7MTEwNCAxMTY5IDExQkI7QjYyNDsxMTA0IDExNjkgMTFCQjsKK0I2MjU7QjYyNTsxMTA0IDExNjkgMTFCQztCNjI1OzExMDQgMTE2OSAxMUJDOworQjYyNjtCNjI2OzExMDQgMTE2OSAxMUJEO0I2MjY7MTEwNCAxMTY5IDExQkQ7CitCNjI3O0I2Mjc7MTEwNCAxMTY5IDExQkU7QjYyNzsxMTA0IDExNjkgMTFCRTsKK0I2Mjg7QjYyODsxMTA0IDExNjkgMTFCRjtCNjI4OzExMDQgMTE2OSAxMUJGOworQjYyOTtCNjI5OzExMDQgMTE2OSAxMUMwO0I2Mjk7MTEwNCAxMTY5IDExQzA7CitCNjJBO0I2MkE7MTEwNCAxMTY5IDExQzE7QjYyQTsxMTA0IDExNjkgMTFDMTsKK0I2MkI7QjYyQjsxMTA0IDExNjkgMTFDMjtCNjJCOzExMDQgMTE2OSAxMUMyOworQjYyQztCNjJDOzExMDQgMTE2QTtCNjJDOzExMDQgMTE2QTsKK0I2MkQ7QjYyRDsxMTA0IDExNkEgMTFBODtCNjJEOzExMDQgMTE2QSAxMUE4OworQjYyRTtCNjJFOzExMDQgMTE2QSAxMUE5O0I2MkU7MTEwNCAxMTZBIDExQTk7CitCNjJGO0I2MkY7MTEwNCAxMTZBIDExQUE7QjYyRjsxMTA0IDExNkEgMTFBQTsKK0I2MzA7QjYzMDsxMTA0IDExNkEgMTFBQjtCNjMwOzExMDQgMTE2QSAxMUFCOworQjYzMTtCNjMxOzExMDQgMTE2QSAxMUFDO0I2MzE7MTEwNCAxMTZBIDExQUM7CitCNjMyO0I2MzI7MTEwNCAxMTZBIDExQUQ7QjYzMjsxMTA0IDExNkEgMTFBRDsKK0I2MzM7QjYzMzsxMTA0IDExNkEgMTFBRTtCNjMzOzExMDQgMTE2QSAxMUFFOworQjYzNDtCNjM0OzExMDQgMTE2QSAxMUFGO0I2MzQ7MTEwNCAxMTZBIDExQUY7CitCNjM1O0I2MzU7MTEwNCAxMTZBIDExQjA7QjYzNTsxMTA0IDExNkEgMTFCMDsKK0I2MzY7QjYzNjsxMTA0IDExNkEgMTFCMTtCNjM2OzExMDQgMTE2QSAxMUIxOworQjYzNztCNjM3OzExMDQgMTE2QSAxMUIyO0I2Mzc7MTEwNCAxMTZBIDExQjI7CitCNjM4O0I2Mzg7MTEwNCAxMTZBIDExQjM7QjYzODsxMTA0IDExNkEgMTFCMzsKK0I2Mzk7QjYzOTsxMTA0IDExNkEgMTFCNDtCNjM5OzExMDQgMTE2QSAxMUI0OworQjYzQTtCNjNBOzExMDQgMTE2QSAxMUI1O0I2M0E7MTEwNCAxMTZBIDExQjU7CitCNjNCO0I2M0I7MTEwNCAxMTZBIDExQjY7QjYzQjsxMTA0IDExNkEgMTFCNjsKK0I2M0M7QjYzQzsxMTA0IDExNkEgMTFCNztCNjNDOzExMDQgMTE2QSAxMUI3OworQjYzRDtCNjNEOzExMDQgMTE2QSAxMUI4O0I2M0Q7MTEwNCAxMTZBIDExQjg7CitCNjNFO0I2M0U7MTEwNCAxMTZBIDExQjk7QjYzRTsxMTA0IDExNkEgMTFCOTsKK0I2M0Y7QjYzRjsxMTA0IDExNkEgMTFCQTtCNjNGOzExMDQgMTE2QSAxMUJBOworQjY0MDtCNjQwOzExMDQgMTE2QSAxMUJCO0I2NDA7MTEwNCAxMTZBIDExQkI7CitCNjQxO0I2NDE7MTEwNCAxMTZBIDExQkM7QjY0MTsxMTA0IDExNkEgMTFCQzsKK0I2NDI7QjY0MjsxMTA0IDExNkEgMTFCRDtCNjQyOzExMDQgMTE2QSAxMUJEOworQjY0MztCNjQzOzExMDQgMTE2QSAxMUJFO0I2NDM7MTEwNCAxMTZBIDExQkU7CitCNjQ0O0I2NDQ7MTEwNCAxMTZBIDExQkY7QjY0NDsxMTA0IDExNkEgMTFCRjsKK0I2NDU7QjY0NTsxMTA0IDExNkEgMTFDMDtCNjQ1OzExMDQgMTE2QSAxMUMwOworQjY0NjtCNjQ2OzExMDQgMTE2QSAxMUMxO0I2NDY7MTEwNCAxMTZBIDExQzE7CitCNjQ3O0I2NDc7MTEwNCAxMTZBIDExQzI7QjY0NzsxMTA0IDExNkEgMTFDMjsKK0I2NDg7QjY0ODsxMTA0IDExNkI7QjY0ODsxMTA0IDExNkI7CitCNjQ5O0I2NDk7MTEwNCAxMTZCIDExQTg7QjY0OTsxMTA0IDExNkIgMTFBODsKK0I2NEE7QjY0QTsxMTA0IDExNkIgMTFBOTtCNjRBOzExMDQgMTE2QiAxMUE5OworQjY0QjtCNjRCOzExMDQgMTE2QiAxMUFBO0I2NEI7MTEwNCAxMTZCIDExQUE7CitCNjRDO0I2NEM7MTEwNCAxMTZCIDExQUI7QjY0QzsxMTA0IDExNkIgMTFBQjsKK0I2NEQ7QjY0RDsxMTA0IDExNkIgMTFBQztCNjREOzExMDQgMTE2QiAxMUFDOworQjY0RTtCNjRFOzExMDQgMTE2QiAxMUFEO0I2NEU7MTEwNCAxMTZCIDExQUQ7CitCNjRGO0I2NEY7MTEwNCAxMTZCIDExQUU7QjY0RjsxMTA0IDExNkIgMTFBRTsKK0I2NTA7QjY1MDsxMTA0IDExNkIgMTFBRjtCNjUwOzExMDQgMTE2QiAxMUFGOworQjY1MTtCNjUxOzExMDQgMTE2QiAxMUIwO0I2NTE7MTEwNCAxMTZCIDExQjA7CitCNjUyO0I2NTI7MTEwNCAxMTZCIDExQjE7QjY1MjsxMTA0IDExNkIgMTFCMTsKK0I2NTM7QjY1MzsxMTA0IDExNkIgMTFCMjtCNjUzOzExMDQgMTE2QiAxMUIyOworQjY1NDtCNjU0OzExMDQgMTE2QiAxMUIzO0I2NTQ7MTEwNCAxMTZCIDExQjM7CitCNjU1O0I2NTU7MTEwNCAxMTZCIDExQjQ7QjY1NTsxMTA0IDExNkIgMTFCNDsKK0I2NTY7QjY1NjsxMTA0IDExNkIgMTFCNTtCNjU2OzExMDQgMTE2QiAxMUI1OworQjY1NztCNjU3OzExMDQgMTE2QiAxMUI2O0I2NTc7MTEwNCAxMTZCIDExQjY7CitCNjU4O0I2NTg7MTEwNCAxMTZCIDExQjc7QjY1ODsxMTA0IDExNkIgMTFCNzsKK0I2NTk7QjY1OTsxMTA0IDExNkIgMTFCODtCNjU5OzExMDQgMTE2QiAxMUI4OworQjY1QTtCNjVBOzExMDQgMTE2QiAxMUI5O0I2NUE7MTEwNCAxMTZCIDExQjk7CitCNjVCO0I2NUI7MTEwNCAxMTZCIDExQkE7QjY1QjsxMTA0IDExNkIgMTFCQTsKK0I2NUM7QjY1QzsxMTA0IDExNkIgMTFCQjtCNjVDOzExMDQgMTE2QiAxMUJCOworQjY1RDtCNjVEOzExMDQgMTE2QiAxMUJDO0I2NUQ7MTEwNCAxMTZCIDExQkM7CitCNjVFO0I2NUU7MTEwNCAxMTZCIDExQkQ7QjY1RTsxMTA0IDExNkIgMTFCRDsKK0I2NUY7QjY1RjsxMTA0IDExNkIgMTFCRTtCNjVGOzExMDQgMTE2QiAxMUJFOworQjY2MDtCNjYwOzExMDQgMTE2QiAxMUJGO0I2NjA7MTEwNCAxMTZCIDExQkY7CitCNjYxO0I2NjE7MTEwNCAxMTZCIDExQzA7QjY2MTsxMTA0IDExNkIgMTFDMDsKK0I2NjI7QjY2MjsxMTA0IDExNkIgMTFDMTtCNjYyOzExMDQgMTE2QiAxMUMxOworQjY2MztCNjYzOzExMDQgMTE2QiAxMUMyO0I2NjM7MTEwNCAxMTZCIDExQzI7CitCNjY0O0I2NjQ7MTEwNCAxMTZDO0I2NjQ7MTEwNCAxMTZDOworQjY2NTtCNjY1OzExMDQgMTE2QyAxMUE4O0I2NjU7MTEwNCAxMTZDIDExQTg7CitCNjY2O0I2NjY7MTEwNCAxMTZDIDExQTk7QjY2NjsxMTA0IDExNkMgMTFBOTsKK0I2Njc7QjY2NzsxMTA0IDExNkMgMTFBQTtCNjY3OzExMDQgMTE2QyAxMUFBOworQjY2ODtCNjY4OzExMDQgMTE2QyAxMUFCO0I2Njg7MTEwNCAxMTZDIDExQUI7CitCNjY5O0I2Njk7MTEwNCAxMTZDIDExQUM7QjY2OTsxMTA0IDExNkMgMTFBQzsKK0I2NkE7QjY2QTsxMTA0IDExNkMgMTFBRDtCNjZBOzExMDQgMTE2QyAxMUFEOworQjY2QjtCNjZCOzExMDQgMTE2QyAxMUFFO0I2NkI7MTEwNCAxMTZDIDExQUU7CitCNjZDO0I2NkM7MTEwNCAxMTZDIDExQUY7QjY2QzsxMTA0IDExNkMgMTFBRjsKK0I2NkQ7QjY2RDsxMTA0IDExNkMgMTFCMDtCNjZEOzExMDQgMTE2QyAxMUIwOworQjY2RTtCNjZFOzExMDQgMTE2QyAxMUIxO0I2NkU7MTEwNCAxMTZDIDExQjE7CitCNjZGO0I2NkY7MTEwNCAxMTZDIDExQjI7QjY2RjsxMTA0IDExNkMgMTFCMjsKK0I2NzA7QjY3MDsxMTA0IDExNkMgMTFCMztCNjcwOzExMDQgMTE2QyAxMUIzOworQjY3MTtCNjcxOzExMDQgMTE2QyAxMUI0O0I2NzE7MTEwNCAxMTZDIDExQjQ7CitCNjcyO0I2NzI7MTEwNCAxMTZDIDExQjU7QjY3MjsxMTA0IDExNkMgMTFCNTsKK0I2NzM7QjY3MzsxMTA0IDExNkMgMTFCNjtCNjczOzExMDQgMTE2QyAxMUI2OworQjY3NDtCNjc0OzExMDQgMTE2QyAxMUI3O0I2NzQ7MTEwNCAxMTZDIDExQjc7CitCNjc1O0I2NzU7MTEwNCAxMTZDIDExQjg7QjY3NTsxMTA0IDExNkMgMTFCODsKK0I2NzY7QjY3NjsxMTA0IDExNkMgMTFCOTtCNjc2OzExMDQgMTE2QyAxMUI5OworQjY3NztCNjc3OzExMDQgMTE2QyAxMUJBO0I2Nzc7MTEwNCAxMTZDIDExQkE7CitCNjc4O0I2Nzg7MTEwNCAxMTZDIDExQkI7QjY3ODsxMTA0IDExNkMgMTFCQjsKK0I2Nzk7QjY3OTsxMTA0IDExNkMgMTFCQztCNjc5OzExMDQgMTE2QyAxMUJDOworQjY3QTtCNjdBOzExMDQgMTE2QyAxMUJEO0I2N0E7MTEwNCAxMTZDIDExQkQ7CitCNjdCO0I2N0I7MTEwNCAxMTZDIDExQkU7QjY3QjsxMTA0IDExNkMgMTFCRTsKK0I2N0M7QjY3QzsxMTA0IDExNkMgMTFCRjtCNjdDOzExMDQgMTE2QyAxMUJGOworQjY3RDtCNjdEOzExMDQgMTE2QyAxMUMwO0I2N0Q7MTEwNCAxMTZDIDExQzA7CitCNjdFO0I2N0U7MTEwNCAxMTZDIDExQzE7QjY3RTsxMTA0IDExNkMgMTFDMTsKK0I2N0Y7QjY3RjsxMTA0IDExNkMgMTFDMjtCNjdGOzExMDQgMTE2QyAxMUMyOworQjY4MDtCNjgwOzExMDQgMTE2RDtCNjgwOzExMDQgMTE2RDsKK0I2ODE7QjY4MTsxMTA0IDExNkQgMTFBODtCNjgxOzExMDQgMTE2RCAxMUE4OworQjY4MjtCNjgyOzExMDQgMTE2RCAxMUE5O0I2ODI7MTEwNCAxMTZEIDExQTk7CitCNjgzO0I2ODM7MTEwNCAxMTZEIDExQUE7QjY4MzsxMTA0IDExNkQgMTFBQTsKK0I2ODQ7QjY4NDsxMTA0IDExNkQgMTFBQjtCNjg0OzExMDQgMTE2RCAxMUFCOworQjY4NTtCNjg1OzExMDQgMTE2RCAxMUFDO0I2ODU7MTEwNCAxMTZEIDExQUM7CitCNjg2O0I2ODY7MTEwNCAxMTZEIDExQUQ7QjY4NjsxMTA0IDExNkQgMTFBRDsKK0I2ODc7QjY4NzsxMTA0IDExNkQgMTFBRTtCNjg3OzExMDQgMTE2RCAxMUFFOworQjY4ODtCNjg4OzExMDQgMTE2RCAxMUFGO0I2ODg7MTEwNCAxMTZEIDExQUY7CitCNjg5O0I2ODk7MTEwNCAxMTZEIDExQjA7QjY4OTsxMTA0IDExNkQgMTFCMDsKK0I2OEE7QjY4QTsxMTA0IDExNkQgMTFCMTtCNjhBOzExMDQgMTE2RCAxMUIxOworQjY4QjtCNjhCOzExMDQgMTE2RCAxMUIyO0I2OEI7MTEwNCAxMTZEIDExQjI7CitCNjhDO0I2OEM7MTEwNCAxMTZEIDExQjM7QjY4QzsxMTA0IDExNkQgMTFCMzsKK0I2OEQ7QjY4RDsxMTA0IDExNkQgMTFCNDtCNjhEOzExMDQgMTE2RCAxMUI0OworQjY4RTtCNjhFOzExMDQgMTE2RCAxMUI1O0I2OEU7MTEwNCAxMTZEIDExQjU7CitCNjhGO0I2OEY7MTEwNCAxMTZEIDExQjY7QjY4RjsxMTA0IDExNkQgMTFCNjsKK0I2OTA7QjY5MDsxMTA0IDExNkQgMTFCNztCNjkwOzExMDQgMTE2RCAxMUI3OworQjY5MTtCNjkxOzExMDQgMTE2RCAxMUI4O0I2OTE7MTEwNCAxMTZEIDExQjg7CitCNjkyO0I2OTI7MTEwNCAxMTZEIDExQjk7QjY5MjsxMTA0IDExNkQgMTFCOTsKK0I2OTM7QjY5MzsxMTA0IDExNkQgMTFCQTtCNjkzOzExMDQgMTE2RCAxMUJBOworQjY5NDtCNjk0OzExMDQgMTE2RCAxMUJCO0I2OTQ7MTEwNCAxMTZEIDExQkI7CitCNjk1O0I2OTU7MTEwNCAxMTZEIDExQkM7QjY5NTsxMTA0IDExNkQgMTFCQzsKK0I2OTY7QjY5NjsxMTA0IDExNkQgMTFCRDtCNjk2OzExMDQgMTE2RCAxMUJEOworQjY5NztCNjk3OzExMDQgMTE2RCAxMUJFO0I2OTc7MTEwNCAxMTZEIDExQkU7CitCNjk4O0I2OTg7MTEwNCAxMTZEIDExQkY7QjY5ODsxMTA0IDExNkQgMTFCRjsKK0I2OTk7QjY5OTsxMTA0IDExNkQgMTFDMDtCNjk5OzExMDQgMTE2RCAxMUMwOworQjY5QTtCNjlBOzExMDQgMTE2RCAxMUMxO0I2OUE7MTEwNCAxMTZEIDExQzE7CitCNjlCO0I2OUI7MTEwNCAxMTZEIDExQzI7QjY5QjsxMTA0IDExNkQgMTFDMjsKK0I2OUM7QjY5QzsxMTA0IDExNkU7QjY5QzsxMTA0IDExNkU7CitCNjlEO0I2OUQ7MTEwNCAxMTZFIDExQTg7QjY5RDsxMTA0IDExNkUgMTFBODsKK0I2OUU7QjY5RTsxMTA0IDExNkUgMTFBOTtCNjlFOzExMDQgMTE2RSAxMUE5OworQjY5RjtCNjlGOzExMDQgMTE2RSAxMUFBO0I2OUY7MTEwNCAxMTZFIDExQUE7CitCNkEwO0I2QTA7MTEwNCAxMTZFIDExQUI7QjZBMDsxMTA0IDExNkUgMTFBQjsKK0I2QTE7QjZBMTsxMTA0IDExNkUgMTFBQztCNkExOzExMDQgMTE2RSAxMUFDOworQjZBMjtCNkEyOzExMDQgMTE2RSAxMUFEO0I2QTI7MTEwNCAxMTZFIDExQUQ7CitCNkEzO0I2QTM7MTEwNCAxMTZFIDExQUU7QjZBMzsxMTA0IDExNkUgMTFBRTsKK0I2QTQ7QjZBNDsxMTA0IDExNkUgMTFBRjtCNkE0OzExMDQgMTE2RSAxMUFGOworQjZBNTtCNkE1OzExMDQgMTE2RSAxMUIwO0I2QTU7MTEwNCAxMTZFIDExQjA7CitCNkE2O0I2QTY7MTEwNCAxMTZFIDExQjE7QjZBNjsxMTA0IDExNkUgMTFCMTsKK0I2QTc7QjZBNzsxMTA0IDExNkUgMTFCMjtCNkE3OzExMDQgMTE2RSAxMUIyOworQjZBODtCNkE4OzExMDQgMTE2RSAxMUIzO0I2QTg7MTEwNCAxMTZFIDExQjM7CitCNkE5O0I2QTk7MTEwNCAxMTZFIDExQjQ7QjZBOTsxMTA0IDExNkUgMTFCNDsKK0I2QUE7QjZBQTsxMTA0IDExNkUgMTFCNTtCNkFBOzExMDQgMTE2RSAxMUI1OworQjZBQjtCNkFCOzExMDQgMTE2RSAxMUI2O0I2QUI7MTEwNCAxMTZFIDExQjY7CitCNkFDO0I2QUM7MTEwNCAxMTZFIDExQjc7QjZBQzsxMTA0IDExNkUgMTFCNzsKK0I2QUQ7QjZBRDsxMTA0IDExNkUgMTFCODtCNkFEOzExMDQgMTE2RSAxMUI4OworQjZBRTtCNkFFOzExMDQgMTE2RSAxMUI5O0I2QUU7MTEwNCAxMTZFIDExQjk7CitCNkFGO0I2QUY7MTEwNCAxMTZFIDExQkE7QjZBRjsxMTA0IDExNkUgMTFCQTsKK0I2QjA7QjZCMDsxMTA0IDExNkUgMTFCQjtCNkIwOzExMDQgMTE2RSAxMUJCOworQjZCMTtCNkIxOzExMDQgMTE2RSAxMUJDO0I2QjE7MTEwNCAxMTZFIDExQkM7CitCNkIyO0I2QjI7MTEwNCAxMTZFIDExQkQ7QjZCMjsxMTA0IDExNkUgMTFCRDsKK0I2QjM7QjZCMzsxMTA0IDExNkUgMTFCRTtCNkIzOzExMDQgMTE2RSAxMUJFOworQjZCNDtCNkI0OzExMDQgMTE2RSAxMUJGO0I2QjQ7MTEwNCAxMTZFIDExQkY7CitCNkI1O0I2QjU7MTEwNCAxMTZFIDExQzA7QjZCNTsxMTA0IDExNkUgMTFDMDsKK0I2QjY7QjZCNjsxMTA0IDExNkUgMTFDMTtCNkI2OzExMDQgMTE2RSAxMUMxOworQjZCNztCNkI3OzExMDQgMTE2RSAxMUMyO0I2Qjc7MTEwNCAxMTZFIDExQzI7CitCNkI4O0I2Qjg7MTEwNCAxMTZGO0I2Qjg7MTEwNCAxMTZGOworQjZCOTtCNkI5OzExMDQgMTE2RiAxMUE4O0I2Qjk7MTEwNCAxMTZGIDExQTg7CitCNkJBO0I2QkE7MTEwNCAxMTZGIDExQTk7QjZCQTsxMTA0IDExNkYgMTFBOTsKK0I2QkI7QjZCQjsxMTA0IDExNkYgMTFBQTtCNkJCOzExMDQgMTE2RiAxMUFBOworQjZCQztCNkJDOzExMDQgMTE2RiAxMUFCO0I2QkM7MTEwNCAxMTZGIDExQUI7CitCNkJEO0I2QkQ7MTEwNCAxMTZGIDExQUM7QjZCRDsxMTA0IDExNkYgMTFBQzsKK0I2QkU7QjZCRTsxMTA0IDExNkYgMTFBRDtCNkJFOzExMDQgMTE2RiAxMUFEOworQjZCRjtCNkJGOzExMDQgMTE2RiAxMUFFO0I2QkY7MTEwNCAxMTZGIDExQUU7CitCNkMwO0I2QzA7MTEwNCAxMTZGIDExQUY7QjZDMDsxMTA0IDExNkYgMTFBRjsKK0I2QzE7QjZDMTsxMTA0IDExNkYgMTFCMDtCNkMxOzExMDQgMTE2RiAxMUIwOworQjZDMjtCNkMyOzExMDQgMTE2RiAxMUIxO0I2QzI7MTEwNCAxMTZGIDExQjE7CitCNkMzO0I2QzM7MTEwNCAxMTZGIDExQjI7QjZDMzsxMTA0IDExNkYgMTFCMjsKK0I2QzQ7QjZDNDsxMTA0IDExNkYgMTFCMztCNkM0OzExMDQgMTE2RiAxMUIzOworQjZDNTtCNkM1OzExMDQgMTE2RiAxMUI0O0I2QzU7MTEwNCAxMTZGIDExQjQ7CitCNkM2O0I2QzY7MTEwNCAxMTZGIDExQjU7QjZDNjsxMTA0IDExNkYgMTFCNTsKK0I2Qzc7QjZDNzsxMTA0IDExNkYgMTFCNjtCNkM3OzExMDQgMTE2RiAxMUI2OworQjZDODtCNkM4OzExMDQgMTE2RiAxMUI3O0I2Qzg7MTEwNCAxMTZGIDExQjc7CitCNkM5O0I2Qzk7MTEwNCAxMTZGIDExQjg7QjZDOTsxMTA0IDExNkYgMTFCODsKK0I2Q0E7QjZDQTsxMTA0IDExNkYgMTFCOTtCNkNBOzExMDQgMTE2RiAxMUI5OworQjZDQjtCNkNCOzExMDQgMTE2RiAxMUJBO0I2Q0I7MTEwNCAxMTZGIDExQkE7CitCNkNDO0I2Q0M7MTEwNCAxMTZGIDExQkI7QjZDQzsxMTA0IDExNkYgMTFCQjsKK0I2Q0Q7QjZDRDsxMTA0IDExNkYgMTFCQztCNkNEOzExMDQgMTE2RiAxMUJDOworQjZDRTtCNkNFOzExMDQgMTE2RiAxMUJEO0I2Q0U7MTEwNCAxMTZGIDExQkQ7CitCNkNGO0I2Q0Y7MTEwNCAxMTZGIDExQkU7QjZDRjsxMTA0IDExNkYgMTFCRTsKK0I2RDA7QjZEMDsxMTA0IDExNkYgMTFCRjtCNkQwOzExMDQgMTE2RiAxMUJGOworQjZEMTtCNkQxOzExMDQgMTE2RiAxMUMwO0I2RDE7MTEwNCAxMTZGIDExQzA7CitCNkQyO0I2RDI7MTEwNCAxMTZGIDExQzE7QjZEMjsxMTA0IDExNkYgMTFDMTsKK0I2RDM7QjZEMzsxMTA0IDExNkYgMTFDMjtCNkQzOzExMDQgMTE2RiAxMUMyOworQjZENDtCNkQ0OzExMDQgMTE3MDtCNkQ0OzExMDQgMTE3MDsKK0I2RDU7QjZENTsxMTA0IDExNzAgMTFBODtCNkQ1OzExMDQgMTE3MCAxMUE4OworQjZENjtCNkQ2OzExMDQgMTE3MCAxMUE5O0I2RDY7MTEwNCAxMTcwIDExQTk7CitCNkQ3O0I2RDc7MTEwNCAxMTcwIDExQUE7QjZENzsxMTA0IDExNzAgMTFBQTsKK0I2RDg7QjZEODsxMTA0IDExNzAgMTFBQjtCNkQ4OzExMDQgMTE3MCAxMUFCOworQjZEOTtCNkQ5OzExMDQgMTE3MCAxMUFDO0I2RDk7MTEwNCAxMTcwIDExQUM7CitCNkRBO0I2REE7MTEwNCAxMTcwIDExQUQ7QjZEQTsxMTA0IDExNzAgMTFBRDsKK0I2REI7QjZEQjsxMTA0IDExNzAgMTFBRTtCNkRCOzExMDQgMTE3MCAxMUFFOworQjZEQztCNkRDOzExMDQgMTE3MCAxMUFGO0I2REM7MTEwNCAxMTcwIDExQUY7CitCNkREO0I2REQ7MTEwNCAxMTcwIDExQjA7QjZERDsxMTA0IDExNzAgMTFCMDsKK0I2REU7QjZERTsxMTA0IDExNzAgMTFCMTtCNkRFOzExMDQgMTE3MCAxMUIxOworQjZERjtCNkRGOzExMDQgMTE3MCAxMUIyO0I2REY7MTEwNCAxMTcwIDExQjI7CitCNkUwO0I2RTA7MTEwNCAxMTcwIDExQjM7QjZFMDsxMTA0IDExNzAgMTFCMzsKK0I2RTE7QjZFMTsxMTA0IDExNzAgMTFCNDtCNkUxOzExMDQgMTE3MCAxMUI0OworQjZFMjtCNkUyOzExMDQgMTE3MCAxMUI1O0I2RTI7MTEwNCAxMTcwIDExQjU7CitCNkUzO0I2RTM7MTEwNCAxMTcwIDExQjY7QjZFMzsxMTA0IDExNzAgMTFCNjsKK0I2RTQ7QjZFNDsxMTA0IDExNzAgMTFCNztCNkU0OzExMDQgMTE3MCAxMUI3OworQjZFNTtCNkU1OzExMDQgMTE3MCAxMUI4O0I2RTU7MTEwNCAxMTcwIDExQjg7CitCNkU2O0I2RTY7MTEwNCAxMTcwIDExQjk7QjZFNjsxMTA0IDExNzAgMTFCOTsKK0I2RTc7QjZFNzsxMTA0IDExNzAgMTFCQTtCNkU3OzExMDQgMTE3MCAxMUJBOworQjZFODtCNkU4OzExMDQgMTE3MCAxMUJCO0I2RTg7MTEwNCAxMTcwIDExQkI7CitCNkU5O0I2RTk7MTEwNCAxMTcwIDExQkM7QjZFOTsxMTA0IDExNzAgMTFCQzsKK0I2RUE7QjZFQTsxMTA0IDExNzAgMTFCRDtCNkVBOzExMDQgMTE3MCAxMUJEOworQjZFQjtCNkVCOzExMDQgMTE3MCAxMUJFO0I2RUI7MTEwNCAxMTcwIDExQkU7CitCNkVDO0I2RUM7MTEwNCAxMTcwIDExQkY7QjZFQzsxMTA0IDExNzAgMTFCRjsKK0I2RUQ7QjZFRDsxMTA0IDExNzAgMTFDMDtCNkVEOzExMDQgMTE3MCAxMUMwOworQjZFRTtCNkVFOzExMDQgMTE3MCAxMUMxO0I2RUU7MTEwNCAxMTcwIDExQzE7CitCNkVGO0I2RUY7MTEwNCAxMTcwIDExQzI7QjZFRjsxMTA0IDExNzAgMTFDMjsKK0I2RjA7QjZGMDsxMTA0IDExNzE7QjZGMDsxMTA0IDExNzE7CitCNkYxO0I2RjE7MTEwNCAxMTcxIDExQTg7QjZGMTsxMTA0IDExNzEgMTFBODsKK0I2RjI7QjZGMjsxMTA0IDExNzEgMTFBOTtCNkYyOzExMDQgMTE3MSAxMUE5OworQjZGMztCNkYzOzExMDQgMTE3MSAxMUFBO0I2RjM7MTEwNCAxMTcxIDExQUE7CitCNkY0O0I2RjQ7MTEwNCAxMTcxIDExQUI7QjZGNDsxMTA0IDExNzEgMTFBQjsKK0I2RjU7QjZGNTsxMTA0IDExNzEgMTFBQztCNkY1OzExMDQgMTE3MSAxMUFDOworQjZGNjtCNkY2OzExMDQgMTE3MSAxMUFEO0I2RjY7MTEwNCAxMTcxIDExQUQ7CitCNkY3O0I2Rjc7MTEwNCAxMTcxIDExQUU7QjZGNzsxMTA0IDExNzEgMTFBRTsKK0I2Rjg7QjZGODsxMTA0IDExNzEgMTFBRjtCNkY4OzExMDQgMTE3MSAxMUFGOworQjZGOTtCNkY5OzExMDQgMTE3MSAxMUIwO0I2Rjk7MTEwNCAxMTcxIDExQjA7CitCNkZBO0I2RkE7MTEwNCAxMTcxIDExQjE7QjZGQTsxMTA0IDExNzEgMTFCMTsKK0I2RkI7QjZGQjsxMTA0IDExNzEgMTFCMjtCNkZCOzExMDQgMTE3MSAxMUIyOworQjZGQztCNkZDOzExMDQgMTE3MSAxMUIzO0I2RkM7MTEwNCAxMTcxIDExQjM7CitCNkZEO0I2RkQ7MTEwNCAxMTcxIDExQjQ7QjZGRDsxMTA0IDExNzEgMTFCNDsKK0I2RkU7QjZGRTsxMTA0IDExNzEgMTFCNTtCNkZFOzExMDQgMTE3MSAxMUI1OworQjZGRjtCNkZGOzExMDQgMTE3MSAxMUI2O0I2RkY7MTEwNCAxMTcxIDExQjY7CitCNzAwO0I3MDA7MTEwNCAxMTcxIDExQjc7QjcwMDsxMTA0IDExNzEgMTFCNzsKK0I3MDE7QjcwMTsxMTA0IDExNzEgMTFCODtCNzAxOzExMDQgMTE3MSAxMUI4OworQjcwMjtCNzAyOzExMDQgMTE3MSAxMUI5O0I3MDI7MTEwNCAxMTcxIDExQjk7CitCNzAzO0I3MDM7MTEwNCAxMTcxIDExQkE7QjcwMzsxMTA0IDExNzEgMTFCQTsKK0I3MDQ7QjcwNDsxMTA0IDExNzEgMTFCQjtCNzA0OzExMDQgMTE3MSAxMUJCOworQjcwNTtCNzA1OzExMDQgMTE3MSAxMUJDO0I3MDU7MTEwNCAxMTcxIDExQkM7CitCNzA2O0I3MDY7MTEwNCAxMTcxIDExQkQ7QjcwNjsxMTA0IDExNzEgMTFCRDsKK0I3MDc7QjcwNzsxMTA0IDExNzEgMTFCRTtCNzA3OzExMDQgMTE3MSAxMUJFOworQjcwODtCNzA4OzExMDQgMTE3MSAxMUJGO0I3MDg7MTEwNCAxMTcxIDExQkY7CitCNzA5O0I3MDk7MTEwNCAxMTcxIDExQzA7QjcwOTsxMTA0IDExNzEgMTFDMDsKK0I3MEE7QjcwQTsxMTA0IDExNzEgMTFDMTtCNzBBOzExMDQgMTE3MSAxMUMxOworQjcwQjtCNzBCOzExMDQgMTE3MSAxMUMyO0I3MEI7MTEwNCAxMTcxIDExQzI7CitCNzBDO0I3MEM7MTEwNCAxMTcyO0I3MEM7MTEwNCAxMTcyOworQjcwRDtCNzBEOzExMDQgMTE3MiAxMUE4O0I3MEQ7MTEwNCAxMTcyIDExQTg7CitCNzBFO0I3MEU7MTEwNCAxMTcyIDExQTk7QjcwRTsxMTA0IDExNzIgMTFBOTsKK0I3MEY7QjcwRjsxMTA0IDExNzIgMTFBQTtCNzBGOzExMDQgMTE3MiAxMUFBOworQjcxMDtCNzEwOzExMDQgMTE3MiAxMUFCO0I3MTA7MTEwNCAxMTcyIDExQUI7CitCNzExO0I3MTE7MTEwNCAxMTcyIDExQUM7QjcxMTsxMTA0IDExNzIgMTFBQzsKK0I3MTI7QjcxMjsxMTA0IDExNzIgMTFBRDtCNzEyOzExMDQgMTE3MiAxMUFEOworQjcxMztCNzEzOzExMDQgMTE3MiAxMUFFO0I3MTM7MTEwNCAxMTcyIDExQUU7CitCNzE0O0I3MTQ7MTEwNCAxMTcyIDExQUY7QjcxNDsxMTA0IDExNzIgMTFBRjsKK0I3MTU7QjcxNTsxMTA0IDExNzIgMTFCMDtCNzE1OzExMDQgMTE3MiAxMUIwOworQjcxNjtCNzE2OzExMDQgMTE3MiAxMUIxO0I3MTY7MTEwNCAxMTcyIDExQjE7CitCNzE3O0I3MTc7MTEwNCAxMTcyIDExQjI7QjcxNzsxMTA0IDExNzIgMTFCMjsKK0I3MTg7QjcxODsxMTA0IDExNzIgMTFCMztCNzE4OzExMDQgMTE3MiAxMUIzOworQjcxOTtCNzE5OzExMDQgMTE3MiAxMUI0O0I3MTk7MTEwNCAxMTcyIDExQjQ7CitCNzFBO0I3MUE7MTEwNCAxMTcyIDExQjU7QjcxQTsxMTA0IDExNzIgMTFCNTsKK0I3MUI7QjcxQjsxMTA0IDExNzIgMTFCNjtCNzFCOzExMDQgMTE3MiAxMUI2OworQjcxQztCNzFDOzExMDQgMTE3MiAxMUI3O0I3MUM7MTEwNCAxMTcyIDExQjc7CitCNzFEO0I3MUQ7MTEwNCAxMTcyIDExQjg7QjcxRDsxMTA0IDExNzIgMTFCODsKK0I3MUU7QjcxRTsxMTA0IDExNzIgMTFCOTtCNzFFOzExMDQgMTE3MiAxMUI5OworQjcxRjtCNzFGOzExMDQgMTE3MiAxMUJBO0I3MUY7MTEwNCAxMTcyIDExQkE7CitCNzIwO0I3MjA7MTEwNCAxMTcyIDExQkI7QjcyMDsxMTA0IDExNzIgMTFCQjsKK0I3MjE7QjcyMTsxMTA0IDExNzIgMTFCQztCNzIxOzExMDQgMTE3MiAxMUJDOworQjcyMjtCNzIyOzExMDQgMTE3MiAxMUJEO0I3MjI7MTEwNCAxMTcyIDExQkQ7CitCNzIzO0I3MjM7MTEwNCAxMTcyIDExQkU7QjcyMzsxMTA0IDExNzIgMTFCRTsKK0I3MjQ7QjcyNDsxMTA0IDExNzIgMTFCRjtCNzI0OzExMDQgMTE3MiAxMUJGOworQjcyNTtCNzI1OzExMDQgMTE3MiAxMUMwO0I3MjU7MTEwNCAxMTcyIDExQzA7CitCNzI2O0I3MjY7MTEwNCAxMTcyIDExQzE7QjcyNjsxMTA0IDExNzIgMTFDMTsKK0I3Mjc7QjcyNzsxMTA0IDExNzIgMTFDMjtCNzI3OzExMDQgMTE3MiAxMUMyOworQjcyODtCNzI4OzExMDQgMTE3MztCNzI4OzExMDQgMTE3MzsKK0I3Mjk7QjcyOTsxMTA0IDExNzMgMTFBODtCNzI5OzExMDQgMTE3MyAxMUE4OworQjcyQTtCNzJBOzExMDQgMTE3MyAxMUE5O0I3MkE7MTEwNCAxMTczIDExQTk7CitCNzJCO0I3MkI7MTEwNCAxMTczIDExQUE7QjcyQjsxMTA0IDExNzMgMTFBQTsKK0I3MkM7QjcyQzsxMTA0IDExNzMgMTFBQjtCNzJDOzExMDQgMTE3MyAxMUFCOworQjcyRDtCNzJEOzExMDQgMTE3MyAxMUFDO0I3MkQ7MTEwNCAxMTczIDExQUM7CitCNzJFO0I3MkU7MTEwNCAxMTczIDExQUQ7QjcyRTsxMTA0IDExNzMgMTFBRDsKK0I3MkY7QjcyRjsxMTA0IDExNzMgMTFBRTtCNzJGOzExMDQgMTE3MyAxMUFFOworQjczMDtCNzMwOzExMDQgMTE3MyAxMUFGO0I3MzA7MTEwNCAxMTczIDExQUY7CitCNzMxO0I3MzE7MTEwNCAxMTczIDExQjA7QjczMTsxMTA0IDExNzMgMTFCMDsKK0I3MzI7QjczMjsxMTA0IDExNzMgMTFCMTtCNzMyOzExMDQgMTE3MyAxMUIxOworQjczMztCNzMzOzExMDQgMTE3MyAxMUIyO0I3MzM7MTEwNCAxMTczIDExQjI7CitCNzM0O0I3MzQ7MTEwNCAxMTczIDExQjM7QjczNDsxMTA0IDExNzMgMTFCMzsKK0I3MzU7QjczNTsxMTA0IDExNzMgMTFCNDtCNzM1OzExMDQgMTE3MyAxMUI0OworQjczNjtCNzM2OzExMDQgMTE3MyAxMUI1O0I3MzY7MTEwNCAxMTczIDExQjU7CitCNzM3O0I3Mzc7MTEwNCAxMTczIDExQjY7QjczNzsxMTA0IDExNzMgMTFCNjsKK0I3Mzg7QjczODsxMTA0IDExNzMgMTFCNztCNzM4OzExMDQgMTE3MyAxMUI3OworQjczOTtCNzM5OzExMDQgMTE3MyAxMUI4O0I3Mzk7MTEwNCAxMTczIDExQjg7CitCNzNBO0I3M0E7MTEwNCAxMTczIDExQjk7QjczQTsxMTA0IDExNzMgMTFCOTsKK0I3M0I7QjczQjsxMTA0IDExNzMgMTFCQTtCNzNCOzExMDQgMTE3MyAxMUJBOworQjczQztCNzNDOzExMDQgMTE3MyAxMUJCO0I3M0M7MTEwNCAxMTczIDExQkI7CitCNzNEO0I3M0Q7MTEwNCAxMTczIDExQkM7QjczRDsxMTA0IDExNzMgMTFCQzsKK0I3M0U7QjczRTsxMTA0IDExNzMgMTFCRDtCNzNFOzExMDQgMTE3MyAxMUJEOworQjczRjtCNzNGOzExMDQgMTE3MyAxMUJFO0I3M0Y7MTEwNCAxMTczIDExQkU7CitCNzQwO0I3NDA7MTEwNCAxMTczIDExQkY7Qjc0MDsxMTA0IDExNzMgMTFCRjsKK0I3NDE7Qjc0MTsxMTA0IDExNzMgMTFDMDtCNzQxOzExMDQgMTE3MyAxMUMwOworQjc0MjtCNzQyOzExMDQgMTE3MyAxMUMxO0I3NDI7MTEwNCAxMTczIDExQzE7CitCNzQzO0I3NDM7MTEwNCAxMTczIDExQzI7Qjc0MzsxMTA0IDExNzMgMTFDMjsKK0I3NDQ7Qjc0NDsxMTA0IDExNzQ7Qjc0NDsxMTA0IDExNzQ7CitCNzQ1O0I3NDU7MTEwNCAxMTc0IDExQTg7Qjc0NTsxMTA0IDExNzQgMTFBODsKK0I3NDY7Qjc0NjsxMTA0IDExNzQgMTFBOTtCNzQ2OzExMDQgMTE3NCAxMUE5OworQjc0NztCNzQ3OzExMDQgMTE3NCAxMUFBO0I3NDc7MTEwNCAxMTc0IDExQUE7CitCNzQ4O0I3NDg7MTEwNCAxMTc0IDExQUI7Qjc0ODsxMTA0IDExNzQgMTFBQjsKK0I3NDk7Qjc0OTsxMTA0IDExNzQgMTFBQztCNzQ5OzExMDQgMTE3NCAxMUFDOworQjc0QTtCNzRBOzExMDQgMTE3NCAxMUFEO0I3NEE7MTEwNCAxMTc0IDExQUQ7CitCNzRCO0I3NEI7MTEwNCAxMTc0IDExQUU7Qjc0QjsxMTA0IDExNzQgMTFBRTsKK0I3NEM7Qjc0QzsxMTA0IDExNzQgMTFBRjtCNzRDOzExMDQgMTE3NCAxMUFGOworQjc0RDtCNzREOzExMDQgMTE3NCAxMUIwO0I3NEQ7MTEwNCAxMTc0IDExQjA7CitCNzRFO0I3NEU7MTEwNCAxMTc0IDExQjE7Qjc0RTsxMTA0IDExNzQgMTFCMTsKK0I3NEY7Qjc0RjsxMTA0IDExNzQgMTFCMjtCNzRGOzExMDQgMTE3NCAxMUIyOworQjc1MDtCNzUwOzExMDQgMTE3NCAxMUIzO0I3NTA7MTEwNCAxMTc0IDExQjM7CitCNzUxO0I3NTE7MTEwNCAxMTc0IDExQjQ7Qjc1MTsxMTA0IDExNzQgMTFCNDsKK0I3NTI7Qjc1MjsxMTA0IDExNzQgMTFCNTtCNzUyOzExMDQgMTE3NCAxMUI1OworQjc1MztCNzUzOzExMDQgMTE3NCAxMUI2O0I3NTM7MTEwNCAxMTc0IDExQjY7CitCNzU0O0I3NTQ7MTEwNCAxMTc0IDExQjc7Qjc1NDsxMTA0IDExNzQgMTFCNzsKK0I3NTU7Qjc1NTsxMTA0IDExNzQgMTFCODtCNzU1OzExMDQgMTE3NCAxMUI4OworQjc1NjtCNzU2OzExMDQgMTE3NCAxMUI5O0I3NTY7MTEwNCAxMTc0IDExQjk7CitCNzU3O0I3NTc7MTEwNCAxMTc0IDExQkE7Qjc1NzsxMTA0IDExNzQgMTFCQTsKK0I3NTg7Qjc1ODsxMTA0IDExNzQgMTFCQjtCNzU4OzExMDQgMTE3NCAxMUJCOworQjc1OTtCNzU5OzExMDQgMTE3NCAxMUJDO0I3NTk7MTEwNCAxMTc0IDExQkM7CitCNzVBO0I3NUE7MTEwNCAxMTc0IDExQkQ7Qjc1QTsxMTA0IDExNzQgMTFCRDsKK0I3NUI7Qjc1QjsxMTA0IDExNzQgMTFCRTtCNzVCOzExMDQgMTE3NCAxMUJFOworQjc1QztCNzVDOzExMDQgMTE3NCAxMUJGO0I3NUM7MTEwNCAxMTc0IDExQkY7CitCNzVEO0I3NUQ7MTEwNCAxMTc0IDExQzA7Qjc1RDsxMTA0IDExNzQgMTFDMDsKK0I3NUU7Qjc1RTsxMTA0IDExNzQgMTFDMTtCNzVFOzExMDQgMTE3NCAxMUMxOworQjc1RjtCNzVGOzExMDQgMTE3NCAxMUMyO0I3NUY7MTEwNCAxMTc0IDExQzI7CitCNzYwO0I3NjA7MTEwNCAxMTc1O0I3NjA7MTEwNCAxMTc1OworQjc2MTtCNzYxOzExMDQgMTE3NSAxMUE4O0I3NjE7MTEwNCAxMTc1IDExQTg7CitCNzYyO0I3NjI7MTEwNCAxMTc1IDExQTk7Qjc2MjsxMTA0IDExNzUgMTFBOTsKK0I3NjM7Qjc2MzsxMTA0IDExNzUgMTFBQTtCNzYzOzExMDQgMTE3NSAxMUFBOworQjc2NDtCNzY0OzExMDQgMTE3NSAxMUFCO0I3NjQ7MTEwNCAxMTc1IDExQUI7CitCNzY1O0I3NjU7MTEwNCAxMTc1IDExQUM7Qjc2NTsxMTA0IDExNzUgMTFBQzsKK0I3NjY7Qjc2NjsxMTA0IDExNzUgMTFBRDtCNzY2OzExMDQgMTE3NSAxMUFEOworQjc2NztCNzY3OzExMDQgMTE3NSAxMUFFO0I3Njc7MTEwNCAxMTc1IDExQUU7CitCNzY4O0I3Njg7MTEwNCAxMTc1IDExQUY7Qjc2ODsxMTA0IDExNzUgMTFBRjsKK0I3Njk7Qjc2OTsxMTA0IDExNzUgMTFCMDtCNzY5OzExMDQgMTE3NSAxMUIwOworQjc2QTtCNzZBOzExMDQgMTE3NSAxMUIxO0I3NkE7MTEwNCAxMTc1IDExQjE7CitCNzZCO0I3NkI7MTEwNCAxMTc1IDExQjI7Qjc2QjsxMTA0IDExNzUgMTFCMjsKK0I3NkM7Qjc2QzsxMTA0IDExNzUgMTFCMztCNzZDOzExMDQgMTE3NSAxMUIzOworQjc2RDtCNzZEOzExMDQgMTE3NSAxMUI0O0I3NkQ7MTEwNCAxMTc1IDExQjQ7CitCNzZFO0I3NkU7MTEwNCAxMTc1IDExQjU7Qjc2RTsxMTA0IDExNzUgMTFCNTsKK0I3NkY7Qjc2RjsxMTA0IDExNzUgMTFCNjtCNzZGOzExMDQgMTE3NSAxMUI2OworQjc3MDtCNzcwOzExMDQgMTE3NSAxMUI3O0I3NzA7MTEwNCAxMTc1IDExQjc7CitCNzcxO0I3NzE7MTEwNCAxMTc1IDExQjg7Qjc3MTsxMTA0IDExNzUgMTFCODsKK0I3NzI7Qjc3MjsxMTA0IDExNzUgMTFCOTtCNzcyOzExMDQgMTE3NSAxMUI5OworQjc3MztCNzczOzExMDQgMTE3NSAxMUJBO0I3NzM7MTEwNCAxMTc1IDExQkE7CitCNzc0O0I3NzQ7MTEwNCAxMTc1IDExQkI7Qjc3NDsxMTA0IDExNzUgMTFCQjsKK0I3NzU7Qjc3NTsxMTA0IDExNzUgMTFCQztCNzc1OzExMDQgMTE3NSAxMUJDOworQjc3NjtCNzc2OzExMDQgMTE3NSAxMUJEO0I3NzY7MTEwNCAxMTc1IDExQkQ7CitCNzc3O0I3Nzc7MTEwNCAxMTc1IDExQkU7Qjc3NzsxMTA0IDExNzUgMTFCRTsKK0I3Nzg7Qjc3ODsxMTA0IDExNzUgMTFCRjtCNzc4OzExMDQgMTE3NSAxMUJGOworQjc3OTtCNzc5OzExMDQgMTE3NSAxMUMwO0I3Nzk7MTEwNCAxMTc1IDExQzA7CitCNzdBO0I3N0E7MTEwNCAxMTc1IDExQzE7Qjc3QTsxMTA0IDExNzUgMTFDMTsKK0I3N0I7Qjc3QjsxMTA0IDExNzUgMTFDMjtCNzdCOzExMDQgMTE3NSAxMUMyOworQjc3QztCNzdDOzExMDUgMTE2MTtCNzdDOzExMDUgMTE2MTsKK0I3N0Q7Qjc3RDsxMTA1IDExNjEgMTFBODtCNzdEOzExMDUgMTE2MSAxMUE4OworQjc3RTtCNzdFOzExMDUgMTE2MSAxMUE5O0I3N0U7MTEwNSAxMTYxIDExQTk7CitCNzdGO0I3N0Y7MTEwNSAxMTYxIDExQUE7Qjc3RjsxMTA1IDExNjEgMTFBQTsKK0I3ODA7Qjc4MDsxMTA1IDExNjEgMTFBQjtCNzgwOzExMDUgMTE2MSAxMUFCOworQjc4MTtCNzgxOzExMDUgMTE2MSAxMUFDO0I3ODE7MTEwNSAxMTYxIDExQUM7CitCNzgyO0I3ODI7MTEwNSAxMTYxIDExQUQ7Qjc4MjsxMTA1IDExNjEgMTFBRDsKK0I3ODM7Qjc4MzsxMTA1IDExNjEgMTFBRTtCNzgzOzExMDUgMTE2MSAxMUFFOworQjc4NDtCNzg0OzExMDUgMTE2MSAxMUFGO0I3ODQ7MTEwNSAxMTYxIDExQUY7CitCNzg1O0I3ODU7MTEwNSAxMTYxIDExQjA7Qjc4NTsxMTA1IDExNjEgMTFCMDsKK0I3ODY7Qjc4NjsxMTA1IDExNjEgMTFCMTtCNzg2OzExMDUgMTE2MSAxMUIxOworQjc4NztCNzg3OzExMDUgMTE2MSAxMUIyO0I3ODc7MTEwNSAxMTYxIDExQjI7CitCNzg4O0I3ODg7MTEwNSAxMTYxIDExQjM7Qjc4ODsxMTA1IDExNjEgMTFCMzsKK0I3ODk7Qjc4OTsxMTA1IDExNjEgMTFCNDtCNzg5OzExMDUgMTE2MSAxMUI0OworQjc4QTtCNzhBOzExMDUgMTE2MSAxMUI1O0I3OEE7MTEwNSAxMTYxIDExQjU7CitCNzhCO0I3OEI7MTEwNSAxMTYxIDExQjY7Qjc4QjsxMTA1IDExNjEgMTFCNjsKK0I3OEM7Qjc4QzsxMTA1IDExNjEgMTFCNztCNzhDOzExMDUgMTE2MSAxMUI3OworQjc4RDtCNzhEOzExMDUgMTE2MSAxMUI4O0I3OEQ7MTEwNSAxMTYxIDExQjg7CitCNzhFO0I3OEU7MTEwNSAxMTYxIDExQjk7Qjc4RTsxMTA1IDExNjEgMTFCOTsKK0I3OEY7Qjc4RjsxMTA1IDExNjEgMTFCQTtCNzhGOzExMDUgMTE2MSAxMUJBOworQjc5MDtCNzkwOzExMDUgMTE2MSAxMUJCO0I3OTA7MTEwNSAxMTYxIDExQkI7CitCNzkxO0I3OTE7MTEwNSAxMTYxIDExQkM7Qjc5MTsxMTA1IDExNjEgMTFCQzsKK0I3OTI7Qjc5MjsxMTA1IDExNjEgMTFCRDtCNzkyOzExMDUgMTE2MSAxMUJEOworQjc5MztCNzkzOzExMDUgMTE2MSAxMUJFO0I3OTM7MTEwNSAxMTYxIDExQkU7CitCNzk0O0I3OTQ7MTEwNSAxMTYxIDExQkY7Qjc5NDsxMTA1IDExNjEgMTFCRjsKK0I3OTU7Qjc5NTsxMTA1IDExNjEgMTFDMDtCNzk1OzExMDUgMTE2MSAxMUMwOworQjc5NjtCNzk2OzExMDUgMTE2MSAxMUMxO0I3OTY7MTEwNSAxMTYxIDExQzE7CitCNzk3O0I3OTc7MTEwNSAxMTYxIDExQzI7Qjc5NzsxMTA1IDExNjEgMTFDMjsKK0I3OTg7Qjc5ODsxMTA1IDExNjI7Qjc5ODsxMTA1IDExNjI7CitCNzk5O0I3OTk7MTEwNSAxMTYyIDExQTg7Qjc5OTsxMTA1IDExNjIgMTFBODsKK0I3OUE7Qjc5QTsxMTA1IDExNjIgMTFBOTtCNzlBOzExMDUgMTE2MiAxMUE5OworQjc5QjtCNzlCOzExMDUgMTE2MiAxMUFBO0I3OUI7MTEwNSAxMTYyIDExQUE7CitCNzlDO0I3OUM7MTEwNSAxMTYyIDExQUI7Qjc5QzsxMTA1IDExNjIgMTFBQjsKK0I3OUQ7Qjc5RDsxMTA1IDExNjIgMTFBQztCNzlEOzExMDUgMTE2MiAxMUFDOworQjc5RTtCNzlFOzExMDUgMTE2MiAxMUFEO0I3OUU7MTEwNSAxMTYyIDExQUQ7CitCNzlGO0I3OUY7MTEwNSAxMTYyIDExQUU7Qjc5RjsxMTA1IDExNjIgMTFBRTsKK0I3QTA7QjdBMDsxMTA1IDExNjIgMTFBRjtCN0EwOzExMDUgMTE2MiAxMUFGOworQjdBMTtCN0ExOzExMDUgMTE2MiAxMUIwO0I3QTE7MTEwNSAxMTYyIDExQjA7CitCN0EyO0I3QTI7MTEwNSAxMTYyIDExQjE7QjdBMjsxMTA1IDExNjIgMTFCMTsKK0I3QTM7QjdBMzsxMTA1IDExNjIgMTFCMjtCN0EzOzExMDUgMTE2MiAxMUIyOworQjdBNDtCN0E0OzExMDUgMTE2MiAxMUIzO0I3QTQ7MTEwNSAxMTYyIDExQjM7CitCN0E1O0I3QTU7MTEwNSAxMTYyIDExQjQ7QjdBNTsxMTA1IDExNjIgMTFCNDsKK0I3QTY7QjdBNjsxMTA1IDExNjIgMTFCNTtCN0E2OzExMDUgMTE2MiAxMUI1OworQjdBNztCN0E3OzExMDUgMTE2MiAxMUI2O0I3QTc7MTEwNSAxMTYyIDExQjY7CitCN0E4O0I3QTg7MTEwNSAxMTYyIDExQjc7QjdBODsxMTA1IDExNjIgMTFCNzsKK0I3QTk7QjdBOTsxMTA1IDExNjIgMTFCODtCN0E5OzExMDUgMTE2MiAxMUI4OworQjdBQTtCN0FBOzExMDUgMTE2MiAxMUI5O0I3QUE7MTEwNSAxMTYyIDExQjk7CitCN0FCO0I3QUI7MTEwNSAxMTYyIDExQkE7QjdBQjsxMTA1IDExNjIgMTFCQTsKK0I3QUM7QjdBQzsxMTA1IDExNjIgMTFCQjtCN0FDOzExMDUgMTE2MiAxMUJCOworQjdBRDtCN0FEOzExMDUgMTE2MiAxMUJDO0I3QUQ7MTEwNSAxMTYyIDExQkM7CitCN0FFO0I3QUU7MTEwNSAxMTYyIDExQkQ7QjdBRTsxMTA1IDExNjIgMTFCRDsKK0I3QUY7QjdBRjsxMTA1IDExNjIgMTFCRTtCN0FGOzExMDUgMTE2MiAxMUJFOworQjdCMDtCN0IwOzExMDUgMTE2MiAxMUJGO0I3QjA7MTEwNSAxMTYyIDExQkY7CitCN0IxO0I3QjE7MTEwNSAxMTYyIDExQzA7QjdCMTsxMTA1IDExNjIgMTFDMDsKK0I3QjI7QjdCMjsxMTA1IDExNjIgMTFDMTtCN0IyOzExMDUgMTE2MiAxMUMxOworQjdCMztCN0IzOzExMDUgMTE2MiAxMUMyO0I3QjM7MTEwNSAxMTYyIDExQzI7CitCN0I0O0I3QjQ7MTEwNSAxMTYzO0I3QjQ7MTEwNSAxMTYzOworQjdCNTtCN0I1OzExMDUgMTE2MyAxMUE4O0I3QjU7MTEwNSAxMTYzIDExQTg7CitCN0I2O0I3QjY7MTEwNSAxMTYzIDExQTk7QjdCNjsxMTA1IDExNjMgMTFBOTsKK0I3Qjc7QjdCNzsxMTA1IDExNjMgMTFBQTtCN0I3OzExMDUgMTE2MyAxMUFBOworQjdCODtCN0I4OzExMDUgMTE2MyAxMUFCO0I3Qjg7MTEwNSAxMTYzIDExQUI7CitCN0I5O0I3Qjk7MTEwNSAxMTYzIDExQUM7QjdCOTsxMTA1IDExNjMgMTFBQzsKK0I3QkE7QjdCQTsxMTA1IDExNjMgMTFBRDtCN0JBOzExMDUgMTE2MyAxMUFEOworQjdCQjtCN0JCOzExMDUgMTE2MyAxMUFFO0I3QkI7MTEwNSAxMTYzIDExQUU7CitCN0JDO0I3QkM7MTEwNSAxMTYzIDExQUY7QjdCQzsxMTA1IDExNjMgMTFBRjsKK0I3QkQ7QjdCRDsxMTA1IDExNjMgMTFCMDtCN0JEOzExMDUgMTE2MyAxMUIwOworQjdCRTtCN0JFOzExMDUgMTE2MyAxMUIxO0I3QkU7MTEwNSAxMTYzIDExQjE7CitCN0JGO0I3QkY7MTEwNSAxMTYzIDExQjI7QjdCRjsxMTA1IDExNjMgMTFCMjsKK0I3QzA7QjdDMDsxMTA1IDExNjMgMTFCMztCN0MwOzExMDUgMTE2MyAxMUIzOworQjdDMTtCN0MxOzExMDUgMTE2MyAxMUI0O0I3QzE7MTEwNSAxMTYzIDExQjQ7CitCN0MyO0I3QzI7MTEwNSAxMTYzIDExQjU7QjdDMjsxMTA1IDExNjMgMTFCNTsKK0I3QzM7QjdDMzsxMTA1IDExNjMgMTFCNjtCN0MzOzExMDUgMTE2MyAxMUI2OworQjdDNDtCN0M0OzExMDUgMTE2MyAxMUI3O0I3QzQ7MTEwNSAxMTYzIDExQjc7CitCN0M1O0I3QzU7MTEwNSAxMTYzIDExQjg7QjdDNTsxMTA1IDExNjMgMTFCODsKK0I3QzY7QjdDNjsxMTA1IDExNjMgMTFCOTtCN0M2OzExMDUgMTE2MyAxMUI5OworQjdDNztCN0M3OzExMDUgMTE2MyAxMUJBO0I3Qzc7MTEwNSAxMTYzIDExQkE7CitCN0M4O0I3Qzg7MTEwNSAxMTYzIDExQkI7QjdDODsxMTA1IDExNjMgMTFCQjsKK0I3Qzk7QjdDOTsxMTA1IDExNjMgMTFCQztCN0M5OzExMDUgMTE2MyAxMUJDOworQjdDQTtCN0NBOzExMDUgMTE2MyAxMUJEO0I3Q0E7MTEwNSAxMTYzIDExQkQ7CitCN0NCO0I3Q0I7MTEwNSAxMTYzIDExQkU7QjdDQjsxMTA1IDExNjMgMTFCRTsKK0I3Q0M7QjdDQzsxMTA1IDExNjMgMTFCRjtCN0NDOzExMDUgMTE2MyAxMUJGOworQjdDRDtCN0NEOzExMDUgMTE2MyAxMUMwO0I3Q0Q7MTEwNSAxMTYzIDExQzA7CitCN0NFO0I3Q0U7MTEwNSAxMTYzIDExQzE7QjdDRTsxMTA1IDExNjMgMTFDMTsKK0I3Q0Y7QjdDRjsxMTA1IDExNjMgMTFDMjtCN0NGOzExMDUgMTE2MyAxMUMyOworQjdEMDtCN0QwOzExMDUgMTE2NDtCN0QwOzExMDUgMTE2NDsKK0I3RDE7QjdEMTsxMTA1IDExNjQgMTFBODtCN0QxOzExMDUgMTE2NCAxMUE4OworQjdEMjtCN0QyOzExMDUgMTE2NCAxMUE5O0I3RDI7MTEwNSAxMTY0IDExQTk7CitCN0QzO0I3RDM7MTEwNSAxMTY0IDExQUE7QjdEMzsxMTA1IDExNjQgMTFBQTsKK0I3RDQ7QjdENDsxMTA1IDExNjQgMTFBQjtCN0Q0OzExMDUgMTE2NCAxMUFCOworQjdENTtCN0Q1OzExMDUgMTE2NCAxMUFDO0I3RDU7MTEwNSAxMTY0IDExQUM7CitCN0Q2O0I3RDY7MTEwNSAxMTY0IDExQUQ7QjdENjsxMTA1IDExNjQgMTFBRDsKK0I3RDc7QjdENzsxMTA1IDExNjQgMTFBRTtCN0Q3OzExMDUgMTE2NCAxMUFFOworQjdEODtCN0Q4OzExMDUgMTE2NCAxMUFGO0I3RDg7MTEwNSAxMTY0IDExQUY7CitCN0Q5O0I3RDk7MTEwNSAxMTY0IDExQjA7QjdEOTsxMTA1IDExNjQgMTFCMDsKK0I3REE7QjdEQTsxMTA1IDExNjQgMTFCMTtCN0RBOzExMDUgMTE2NCAxMUIxOworQjdEQjtCN0RCOzExMDUgMTE2NCAxMUIyO0I3REI7MTEwNSAxMTY0IDExQjI7CitCN0RDO0I3REM7MTEwNSAxMTY0IDExQjM7QjdEQzsxMTA1IDExNjQgMTFCMzsKK0I3REQ7QjdERDsxMTA1IDExNjQgMTFCNDtCN0REOzExMDUgMTE2NCAxMUI0OworQjdERTtCN0RFOzExMDUgMTE2NCAxMUI1O0I3REU7MTEwNSAxMTY0IDExQjU7CitCN0RGO0I3REY7MTEwNSAxMTY0IDExQjY7QjdERjsxMTA1IDExNjQgMTFCNjsKK0I3RTA7QjdFMDsxMTA1IDExNjQgMTFCNztCN0UwOzExMDUgMTE2NCAxMUI3OworQjdFMTtCN0UxOzExMDUgMTE2NCAxMUI4O0I3RTE7MTEwNSAxMTY0IDExQjg7CitCN0UyO0I3RTI7MTEwNSAxMTY0IDExQjk7QjdFMjsxMTA1IDExNjQgMTFCOTsKK0I3RTM7QjdFMzsxMTA1IDExNjQgMTFCQTtCN0UzOzExMDUgMTE2NCAxMUJBOworQjdFNDtCN0U0OzExMDUgMTE2NCAxMUJCO0I3RTQ7MTEwNSAxMTY0IDExQkI7CitCN0U1O0I3RTU7MTEwNSAxMTY0IDExQkM7QjdFNTsxMTA1IDExNjQgMTFCQzsKK0I3RTY7QjdFNjsxMTA1IDExNjQgMTFCRDtCN0U2OzExMDUgMTE2NCAxMUJEOworQjdFNztCN0U3OzExMDUgMTE2NCAxMUJFO0I3RTc7MTEwNSAxMTY0IDExQkU7CitCN0U4O0I3RTg7MTEwNSAxMTY0IDExQkY7QjdFODsxMTA1IDExNjQgMTFCRjsKK0I3RTk7QjdFOTsxMTA1IDExNjQgMTFDMDtCN0U5OzExMDUgMTE2NCAxMUMwOworQjdFQTtCN0VBOzExMDUgMTE2NCAxMUMxO0I3RUE7MTEwNSAxMTY0IDExQzE7CitCN0VCO0I3RUI7MTEwNSAxMTY0IDExQzI7QjdFQjsxMTA1IDExNjQgMTFDMjsKK0I3RUM7QjdFQzsxMTA1IDExNjU7QjdFQzsxMTA1IDExNjU7CitCN0VEO0I3RUQ7MTEwNSAxMTY1IDExQTg7QjdFRDsxMTA1IDExNjUgMTFBODsKK0I3RUU7QjdFRTsxMTA1IDExNjUgMTFBOTtCN0VFOzExMDUgMTE2NSAxMUE5OworQjdFRjtCN0VGOzExMDUgMTE2NSAxMUFBO0I3RUY7MTEwNSAxMTY1IDExQUE7CitCN0YwO0I3RjA7MTEwNSAxMTY1IDExQUI7QjdGMDsxMTA1IDExNjUgMTFBQjsKK0I3RjE7QjdGMTsxMTA1IDExNjUgMTFBQztCN0YxOzExMDUgMTE2NSAxMUFDOworQjdGMjtCN0YyOzExMDUgMTE2NSAxMUFEO0I3RjI7MTEwNSAxMTY1IDExQUQ7CitCN0YzO0I3RjM7MTEwNSAxMTY1IDExQUU7QjdGMzsxMTA1IDExNjUgMTFBRTsKK0I3RjQ7QjdGNDsxMTA1IDExNjUgMTFBRjtCN0Y0OzExMDUgMTE2NSAxMUFGOworQjdGNTtCN0Y1OzExMDUgMTE2NSAxMUIwO0I3RjU7MTEwNSAxMTY1IDExQjA7CitCN0Y2O0I3RjY7MTEwNSAxMTY1IDExQjE7QjdGNjsxMTA1IDExNjUgMTFCMTsKK0I3Rjc7QjdGNzsxMTA1IDExNjUgMTFCMjtCN0Y3OzExMDUgMTE2NSAxMUIyOworQjdGODtCN0Y4OzExMDUgMTE2NSAxMUIzO0I3Rjg7MTEwNSAxMTY1IDExQjM7CitCN0Y5O0I3Rjk7MTEwNSAxMTY1IDExQjQ7QjdGOTsxMTA1IDExNjUgMTFCNDsKK0I3RkE7QjdGQTsxMTA1IDExNjUgMTFCNTtCN0ZBOzExMDUgMTE2NSAxMUI1OworQjdGQjtCN0ZCOzExMDUgMTE2NSAxMUI2O0I3RkI7MTEwNSAxMTY1IDExQjY7CitCN0ZDO0I3RkM7MTEwNSAxMTY1IDExQjc7QjdGQzsxMTA1IDExNjUgMTFCNzsKK0I3RkQ7QjdGRDsxMTA1IDExNjUgMTFCODtCN0ZEOzExMDUgMTE2NSAxMUI4OworQjdGRTtCN0ZFOzExMDUgMTE2NSAxMUI5O0I3RkU7MTEwNSAxMTY1IDExQjk7CitCN0ZGO0I3RkY7MTEwNSAxMTY1IDExQkE7QjdGRjsxMTA1IDExNjUgMTFCQTsKK0I4MDA7QjgwMDsxMTA1IDExNjUgMTFCQjtCODAwOzExMDUgMTE2NSAxMUJCOworQjgwMTtCODAxOzExMDUgMTE2NSAxMUJDO0I4MDE7MTEwNSAxMTY1IDExQkM7CitCODAyO0I4MDI7MTEwNSAxMTY1IDExQkQ7QjgwMjsxMTA1IDExNjUgMTFCRDsKK0I4MDM7QjgwMzsxMTA1IDExNjUgMTFCRTtCODAzOzExMDUgMTE2NSAxMUJFOworQjgwNDtCODA0OzExMDUgMTE2NSAxMUJGO0I4MDQ7MTEwNSAxMTY1IDExQkY7CitCODA1O0I4MDU7MTEwNSAxMTY1IDExQzA7QjgwNTsxMTA1IDExNjUgMTFDMDsKK0I4MDY7QjgwNjsxMTA1IDExNjUgMTFDMTtCODA2OzExMDUgMTE2NSAxMUMxOworQjgwNztCODA3OzExMDUgMTE2NSAxMUMyO0I4MDc7MTEwNSAxMTY1IDExQzI7CitCODA4O0I4MDg7MTEwNSAxMTY2O0I4MDg7MTEwNSAxMTY2OworQjgwOTtCODA5OzExMDUgMTE2NiAxMUE4O0I4MDk7MTEwNSAxMTY2IDExQTg7CitCODBBO0I4MEE7MTEwNSAxMTY2IDExQTk7QjgwQTsxMTA1IDExNjYgMTFBOTsKK0I4MEI7QjgwQjsxMTA1IDExNjYgMTFBQTtCODBCOzExMDUgMTE2NiAxMUFBOworQjgwQztCODBDOzExMDUgMTE2NiAxMUFCO0I4MEM7MTEwNSAxMTY2IDExQUI7CitCODBEO0I4MEQ7MTEwNSAxMTY2IDExQUM7QjgwRDsxMTA1IDExNjYgMTFBQzsKK0I4MEU7QjgwRTsxMTA1IDExNjYgMTFBRDtCODBFOzExMDUgMTE2NiAxMUFEOworQjgwRjtCODBGOzExMDUgMTE2NiAxMUFFO0I4MEY7MTEwNSAxMTY2IDExQUU7CitCODEwO0I4MTA7MTEwNSAxMTY2IDExQUY7QjgxMDsxMTA1IDExNjYgMTFBRjsKK0I4MTE7QjgxMTsxMTA1IDExNjYgMTFCMDtCODExOzExMDUgMTE2NiAxMUIwOworQjgxMjtCODEyOzExMDUgMTE2NiAxMUIxO0I4MTI7MTEwNSAxMTY2IDExQjE7CitCODEzO0I4MTM7MTEwNSAxMTY2IDExQjI7QjgxMzsxMTA1IDExNjYgMTFCMjsKK0I4MTQ7QjgxNDsxMTA1IDExNjYgMTFCMztCODE0OzExMDUgMTE2NiAxMUIzOworQjgxNTtCODE1OzExMDUgMTE2NiAxMUI0O0I4MTU7MTEwNSAxMTY2IDExQjQ7CitCODE2O0I4MTY7MTEwNSAxMTY2IDExQjU7QjgxNjsxMTA1IDExNjYgMTFCNTsKK0I4MTc7QjgxNzsxMTA1IDExNjYgMTFCNjtCODE3OzExMDUgMTE2NiAxMUI2OworQjgxODtCODE4OzExMDUgMTE2NiAxMUI3O0I4MTg7MTEwNSAxMTY2IDExQjc7CitCODE5O0I4MTk7MTEwNSAxMTY2IDExQjg7QjgxOTsxMTA1IDExNjYgMTFCODsKK0I4MUE7QjgxQTsxMTA1IDExNjYgMTFCOTtCODFBOzExMDUgMTE2NiAxMUI5OworQjgxQjtCODFCOzExMDUgMTE2NiAxMUJBO0I4MUI7MTEwNSAxMTY2IDExQkE7CitCODFDO0I4MUM7MTEwNSAxMTY2IDExQkI7QjgxQzsxMTA1IDExNjYgMTFCQjsKK0I4MUQ7QjgxRDsxMTA1IDExNjYgMTFCQztCODFEOzExMDUgMTE2NiAxMUJDOworQjgxRTtCODFFOzExMDUgMTE2NiAxMUJEO0I4MUU7MTEwNSAxMTY2IDExQkQ7CitCODFGO0I4MUY7MTEwNSAxMTY2IDExQkU7QjgxRjsxMTA1IDExNjYgMTFCRTsKK0I4MjA7QjgyMDsxMTA1IDExNjYgMTFCRjtCODIwOzExMDUgMTE2NiAxMUJGOworQjgyMTtCODIxOzExMDUgMTE2NiAxMUMwO0I4MjE7MTEwNSAxMTY2IDExQzA7CitCODIyO0I4MjI7MTEwNSAxMTY2IDExQzE7QjgyMjsxMTA1IDExNjYgMTFDMTsKK0I4MjM7QjgyMzsxMTA1IDExNjYgMTFDMjtCODIzOzExMDUgMTE2NiAxMUMyOworQjgyNDtCODI0OzExMDUgMTE2NztCODI0OzExMDUgMTE2NzsKK0I4MjU7QjgyNTsxMTA1IDExNjcgMTFBODtCODI1OzExMDUgMTE2NyAxMUE4OworQjgyNjtCODI2OzExMDUgMTE2NyAxMUE5O0I4MjY7MTEwNSAxMTY3IDExQTk7CitCODI3O0I4Mjc7MTEwNSAxMTY3IDExQUE7QjgyNzsxMTA1IDExNjcgMTFBQTsKK0I4Mjg7QjgyODsxMTA1IDExNjcgMTFBQjtCODI4OzExMDUgMTE2NyAxMUFCOworQjgyOTtCODI5OzExMDUgMTE2NyAxMUFDO0I4Mjk7MTEwNSAxMTY3IDExQUM7CitCODJBO0I4MkE7MTEwNSAxMTY3IDExQUQ7QjgyQTsxMTA1IDExNjcgMTFBRDsKK0I4MkI7QjgyQjsxMTA1IDExNjcgMTFBRTtCODJCOzExMDUgMTE2NyAxMUFFOworQjgyQztCODJDOzExMDUgMTE2NyAxMUFGO0I4MkM7MTEwNSAxMTY3IDExQUY7CitCODJEO0I4MkQ7MTEwNSAxMTY3IDExQjA7QjgyRDsxMTA1IDExNjcgMTFCMDsKK0I4MkU7QjgyRTsxMTA1IDExNjcgMTFCMTtCODJFOzExMDUgMTE2NyAxMUIxOworQjgyRjtCODJGOzExMDUgMTE2NyAxMUIyO0I4MkY7MTEwNSAxMTY3IDExQjI7CitCODMwO0I4MzA7MTEwNSAxMTY3IDExQjM7QjgzMDsxMTA1IDExNjcgMTFCMzsKK0I4MzE7QjgzMTsxMTA1IDExNjcgMTFCNDtCODMxOzExMDUgMTE2NyAxMUI0OworQjgzMjtCODMyOzExMDUgMTE2NyAxMUI1O0I4MzI7MTEwNSAxMTY3IDExQjU7CitCODMzO0I4MzM7MTEwNSAxMTY3IDExQjY7QjgzMzsxMTA1IDExNjcgMTFCNjsKK0I4MzQ7QjgzNDsxMTA1IDExNjcgMTFCNztCODM0OzExMDUgMTE2NyAxMUI3OworQjgzNTtCODM1OzExMDUgMTE2NyAxMUI4O0I4MzU7MTEwNSAxMTY3IDExQjg7CitCODM2O0I4MzY7MTEwNSAxMTY3IDExQjk7QjgzNjsxMTA1IDExNjcgMTFCOTsKK0I4Mzc7QjgzNzsxMTA1IDExNjcgMTFCQTtCODM3OzExMDUgMTE2NyAxMUJBOworQjgzODtCODM4OzExMDUgMTE2NyAxMUJCO0I4Mzg7MTEwNSAxMTY3IDExQkI7CitCODM5O0I4Mzk7MTEwNSAxMTY3IDExQkM7QjgzOTsxMTA1IDExNjcgMTFCQzsKK0I4M0E7QjgzQTsxMTA1IDExNjcgMTFCRDtCODNBOzExMDUgMTE2NyAxMUJEOworQjgzQjtCODNCOzExMDUgMTE2NyAxMUJFO0I4M0I7MTEwNSAxMTY3IDExQkU7CitCODNDO0I4M0M7MTEwNSAxMTY3IDExQkY7QjgzQzsxMTA1IDExNjcgMTFCRjsKK0I4M0Q7QjgzRDsxMTA1IDExNjcgMTFDMDtCODNEOzExMDUgMTE2NyAxMUMwOworQjgzRTtCODNFOzExMDUgMTE2NyAxMUMxO0I4M0U7MTEwNSAxMTY3IDExQzE7CitCODNGO0I4M0Y7MTEwNSAxMTY3IDExQzI7QjgzRjsxMTA1IDExNjcgMTFDMjsKK0I4NDA7Qjg0MDsxMTA1IDExNjg7Qjg0MDsxMTA1IDExNjg7CitCODQxO0I4NDE7MTEwNSAxMTY4IDExQTg7Qjg0MTsxMTA1IDExNjggMTFBODsKK0I4NDI7Qjg0MjsxMTA1IDExNjggMTFBOTtCODQyOzExMDUgMTE2OCAxMUE5OworQjg0MztCODQzOzExMDUgMTE2OCAxMUFBO0I4NDM7MTEwNSAxMTY4IDExQUE7CitCODQ0O0I4NDQ7MTEwNSAxMTY4IDExQUI7Qjg0NDsxMTA1IDExNjggMTFBQjsKK0I4NDU7Qjg0NTsxMTA1IDExNjggMTFBQztCODQ1OzExMDUgMTE2OCAxMUFDOworQjg0NjtCODQ2OzExMDUgMTE2OCAxMUFEO0I4NDY7MTEwNSAxMTY4IDExQUQ7CitCODQ3O0I4NDc7MTEwNSAxMTY4IDExQUU7Qjg0NzsxMTA1IDExNjggMTFBRTsKK0I4NDg7Qjg0ODsxMTA1IDExNjggMTFBRjtCODQ4OzExMDUgMTE2OCAxMUFGOworQjg0OTtCODQ5OzExMDUgMTE2OCAxMUIwO0I4NDk7MTEwNSAxMTY4IDExQjA7CitCODRBO0I4NEE7MTEwNSAxMTY4IDExQjE7Qjg0QTsxMTA1IDExNjggMTFCMTsKK0I4NEI7Qjg0QjsxMTA1IDExNjggMTFCMjtCODRCOzExMDUgMTE2OCAxMUIyOworQjg0QztCODRDOzExMDUgMTE2OCAxMUIzO0I4NEM7MTEwNSAxMTY4IDExQjM7CitCODREO0I4NEQ7MTEwNSAxMTY4IDExQjQ7Qjg0RDsxMTA1IDExNjggMTFCNDsKK0I4NEU7Qjg0RTsxMTA1IDExNjggMTFCNTtCODRFOzExMDUgMTE2OCAxMUI1OworQjg0RjtCODRGOzExMDUgMTE2OCAxMUI2O0I4NEY7MTEwNSAxMTY4IDExQjY7CitCODUwO0I4NTA7MTEwNSAxMTY4IDExQjc7Qjg1MDsxMTA1IDExNjggMTFCNzsKK0I4NTE7Qjg1MTsxMTA1IDExNjggMTFCODtCODUxOzExMDUgMTE2OCAxMUI4OworQjg1MjtCODUyOzExMDUgMTE2OCAxMUI5O0I4NTI7MTEwNSAxMTY4IDExQjk7CitCODUzO0I4NTM7MTEwNSAxMTY4IDExQkE7Qjg1MzsxMTA1IDExNjggMTFCQTsKK0I4NTQ7Qjg1NDsxMTA1IDExNjggMTFCQjtCODU0OzExMDUgMTE2OCAxMUJCOworQjg1NTtCODU1OzExMDUgMTE2OCAxMUJDO0I4NTU7MTEwNSAxMTY4IDExQkM7CitCODU2O0I4NTY7MTEwNSAxMTY4IDExQkQ7Qjg1NjsxMTA1IDExNjggMTFCRDsKK0I4NTc7Qjg1NzsxMTA1IDExNjggMTFCRTtCODU3OzExMDUgMTE2OCAxMUJFOworQjg1ODtCODU4OzExMDUgMTE2OCAxMUJGO0I4NTg7MTEwNSAxMTY4IDExQkY7CitCODU5O0I4NTk7MTEwNSAxMTY4IDExQzA7Qjg1OTsxMTA1IDExNjggMTFDMDsKK0I4NUE7Qjg1QTsxMTA1IDExNjggMTFDMTtCODVBOzExMDUgMTE2OCAxMUMxOworQjg1QjtCODVCOzExMDUgMTE2OCAxMUMyO0I4NUI7MTEwNSAxMTY4IDExQzI7CitCODVDO0I4NUM7MTEwNSAxMTY5O0I4NUM7MTEwNSAxMTY5OworQjg1RDtCODVEOzExMDUgMTE2OSAxMUE4O0I4NUQ7MTEwNSAxMTY5IDExQTg7CitCODVFO0I4NUU7MTEwNSAxMTY5IDExQTk7Qjg1RTsxMTA1IDExNjkgMTFBOTsKK0I4NUY7Qjg1RjsxMTA1IDExNjkgMTFBQTtCODVGOzExMDUgMTE2OSAxMUFBOworQjg2MDtCODYwOzExMDUgMTE2OSAxMUFCO0I4NjA7MTEwNSAxMTY5IDExQUI7CitCODYxO0I4NjE7MTEwNSAxMTY5IDExQUM7Qjg2MTsxMTA1IDExNjkgMTFBQzsKK0I4NjI7Qjg2MjsxMTA1IDExNjkgMTFBRDtCODYyOzExMDUgMTE2OSAxMUFEOworQjg2MztCODYzOzExMDUgMTE2OSAxMUFFO0I4NjM7MTEwNSAxMTY5IDExQUU7CitCODY0O0I4NjQ7MTEwNSAxMTY5IDExQUY7Qjg2NDsxMTA1IDExNjkgMTFBRjsKK0I4NjU7Qjg2NTsxMTA1IDExNjkgMTFCMDtCODY1OzExMDUgMTE2OSAxMUIwOworQjg2NjtCODY2OzExMDUgMTE2OSAxMUIxO0I4NjY7MTEwNSAxMTY5IDExQjE7CitCODY3O0I4Njc7MTEwNSAxMTY5IDExQjI7Qjg2NzsxMTA1IDExNjkgMTFCMjsKK0I4Njg7Qjg2ODsxMTA1IDExNjkgMTFCMztCODY4OzExMDUgMTE2OSAxMUIzOworQjg2OTtCODY5OzExMDUgMTE2OSAxMUI0O0I4Njk7MTEwNSAxMTY5IDExQjQ7CitCODZBO0I4NkE7MTEwNSAxMTY5IDExQjU7Qjg2QTsxMTA1IDExNjkgMTFCNTsKK0I4NkI7Qjg2QjsxMTA1IDExNjkgMTFCNjtCODZCOzExMDUgMTE2OSAxMUI2OworQjg2QztCODZDOzExMDUgMTE2OSAxMUI3O0I4NkM7MTEwNSAxMTY5IDExQjc7CitCODZEO0I4NkQ7MTEwNSAxMTY5IDExQjg7Qjg2RDsxMTA1IDExNjkgMTFCODsKK0I4NkU7Qjg2RTsxMTA1IDExNjkgMTFCOTtCODZFOzExMDUgMTE2OSAxMUI5OworQjg2RjtCODZGOzExMDUgMTE2OSAxMUJBO0I4NkY7MTEwNSAxMTY5IDExQkE7CitCODcwO0I4NzA7MTEwNSAxMTY5IDExQkI7Qjg3MDsxMTA1IDExNjkgMTFCQjsKK0I4NzE7Qjg3MTsxMTA1IDExNjkgMTFCQztCODcxOzExMDUgMTE2OSAxMUJDOworQjg3MjtCODcyOzExMDUgMTE2OSAxMUJEO0I4NzI7MTEwNSAxMTY5IDExQkQ7CitCODczO0I4NzM7MTEwNSAxMTY5IDExQkU7Qjg3MzsxMTA1IDExNjkgMTFCRTsKK0I4NzQ7Qjg3NDsxMTA1IDExNjkgMTFCRjtCODc0OzExMDUgMTE2OSAxMUJGOworQjg3NTtCODc1OzExMDUgMTE2OSAxMUMwO0I4NzU7MTEwNSAxMTY5IDExQzA7CitCODc2O0I4NzY7MTEwNSAxMTY5IDExQzE7Qjg3NjsxMTA1IDExNjkgMTFDMTsKK0I4Nzc7Qjg3NzsxMTA1IDExNjkgMTFDMjtCODc3OzExMDUgMTE2OSAxMUMyOworQjg3ODtCODc4OzExMDUgMTE2QTtCODc4OzExMDUgMTE2QTsKK0I4Nzk7Qjg3OTsxMTA1IDExNkEgMTFBODtCODc5OzExMDUgMTE2QSAxMUE4OworQjg3QTtCODdBOzExMDUgMTE2QSAxMUE5O0I4N0E7MTEwNSAxMTZBIDExQTk7CitCODdCO0I4N0I7MTEwNSAxMTZBIDExQUE7Qjg3QjsxMTA1IDExNkEgMTFBQTsKK0I4N0M7Qjg3QzsxMTA1IDExNkEgMTFBQjtCODdDOzExMDUgMTE2QSAxMUFCOworQjg3RDtCODdEOzExMDUgMTE2QSAxMUFDO0I4N0Q7MTEwNSAxMTZBIDExQUM7CitCODdFO0I4N0U7MTEwNSAxMTZBIDExQUQ7Qjg3RTsxMTA1IDExNkEgMTFBRDsKK0I4N0Y7Qjg3RjsxMTA1IDExNkEgMTFBRTtCODdGOzExMDUgMTE2QSAxMUFFOworQjg4MDtCODgwOzExMDUgMTE2QSAxMUFGO0I4ODA7MTEwNSAxMTZBIDExQUY7CitCODgxO0I4ODE7MTEwNSAxMTZBIDExQjA7Qjg4MTsxMTA1IDExNkEgMTFCMDsKK0I4ODI7Qjg4MjsxMTA1IDExNkEgMTFCMTtCODgyOzExMDUgMTE2QSAxMUIxOworQjg4MztCODgzOzExMDUgMTE2QSAxMUIyO0I4ODM7MTEwNSAxMTZBIDExQjI7CitCODg0O0I4ODQ7MTEwNSAxMTZBIDExQjM7Qjg4NDsxMTA1IDExNkEgMTFCMzsKK0I4ODU7Qjg4NTsxMTA1IDExNkEgMTFCNDtCODg1OzExMDUgMTE2QSAxMUI0OworQjg4NjtCODg2OzExMDUgMTE2QSAxMUI1O0I4ODY7MTEwNSAxMTZBIDExQjU7CitCODg3O0I4ODc7MTEwNSAxMTZBIDExQjY7Qjg4NzsxMTA1IDExNkEgMTFCNjsKK0I4ODg7Qjg4ODsxMTA1IDExNkEgMTFCNztCODg4OzExMDUgMTE2QSAxMUI3OworQjg4OTtCODg5OzExMDUgMTE2QSAxMUI4O0I4ODk7MTEwNSAxMTZBIDExQjg7CitCODhBO0I4OEE7MTEwNSAxMTZBIDExQjk7Qjg4QTsxMTA1IDExNkEgMTFCOTsKK0I4OEI7Qjg4QjsxMTA1IDExNkEgMTFCQTtCODhCOzExMDUgMTE2QSAxMUJBOworQjg4QztCODhDOzExMDUgMTE2QSAxMUJCO0I4OEM7MTEwNSAxMTZBIDExQkI7CitCODhEO0I4OEQ7MTEwNSAxMTZBIDExQkM7Qjg4RDsxMTA1IDExNkEgMTFCQzsKK0I4OEU7Qjg4RTsxMTA1IDExNkEgMTFCRDtCODhFOzExMDUgMTE2QSAxMUJEOworQjg4RjtCODhGOzExMDUgMTE2QSAxMUJFO0I4OEY7MTEwNSAxMTZBIDExQkU7CitCODkwO0I4OTA7MTEwNSAxMTZBIDExQkY7Qjg5MDsxMTA1IDExNkEgMTFCRjsKK0I4OTE7Qjg5MTsxMTA1IDExNkEgMTFDMDtCODkxOzExMDUgMTE2QSAxMUMwOworQjg5MjtCODkyOzExMDUgMTE2QSAxMUMxO0I4OTI7MTEwNSAxMTZBIDExQzE7CitCODkzO0I4OTM7MTEwNSAxMTZBIDExQzI7Qjg5MzsxMTA1IDExNkEgMTFDMjsKK0I4OTQ7Qjg5NDsxMTA1IDExNkI7Qjg5NDsxMTA1IDExNkI7CitCODk1O0I4OTU7MTEwNSAxMTZCIDExQTg7Qjg5NTsxMTA1IDExNkIgMTFBODsKK0I4OTY7Qjg5NjsxMTA1IDExNkIgMTFBOTtCODk2OzExMDUgMTE2QiAxMUE5OworQjg5NztCODk3OzExMDUgMTE2QiAxMUFBO0I4OTc7MTEwNSAxMTZCIDExQUE7CitCODk4O0I4OTg7MTEwNSAxMTZCIDExQUI7Qjg5ODsxMTA1IDExNkIgMTFBQjsKK0I4OTk7Qjg5OTsxMTA1IDExNkIgMTFBQztCODk5OzExMDUgMTE2QiAxMUFDOworQjg5QTtCODlBOzExMDUgMTE2QiAxMUFEO0I4OUE7MTEwNSAxMTZCIDExQUQ7CitCODlCO0I4OUI7MTEwNSAxMTZCIDExQUU7Qjg5QjsxMTA1IDExNkIgMTFBRTsKK0I4OUM7Qjg5QzsxMTA1IDExNkIgMTFBRjtCODlDOzExMDUgMTE2QiAxMUFGOworQjg5RDtCODlEOzExMDUgMTE2QiAxMUIwO0I4OUQ7MTEwNSAxMTZCIDExQjA7CitCODlFO0I4OUU7MTEwNSAxMTZCIDExQjE7Qjg5RTsxMTA1IDExNkIgMTFCMTsKK0I4OUY7Qjg5RjsxMTA1IDExNkIgMTFCMjtCODlGOzExMDUgMTE2QiAxMUIyOworQjhBMDtCOEEwOzExMDUgMTE2QiAxMUIzO0I4QTA7MTEwNSAxMTZCIDExQjM7CitCOEExO0I4QTE7MTEwNSAxMTZCIDExQjQ7QjhBMTsxMTA1IDExNkIgMTFCNDsKK0I4QTI7QjhBMjsxMTA1IDExNkIgMTFCNTtCOEEyOzExMDUgMTE2QiAxMUI1OworQjhBMztCOEEzOzExMDUgMTE2QiAxMUI2O0I4QTM7MTEwNSAxMTZCIDExQjY7CitCOEE0O0I4QTQ7MTEwNSAxMTZCIDExQjc7QjhBNDsxMTA1IDExNkIgMTFCNzsKK0I4QTU7QjhBNTsxMTA1IDExNkIgMTFCODtCOEE1OzExMDUgMTE2QiAxMUI4OworQjhBNjtCOEE2OzExMDUgMTE2QiAxMUI5O0I4QTY7MTEwNSAxMTZCIDExQjk7CitCOEE3O0I4QTc7MTEwNSAxMTZCIDExQkE7QjhBNzsxMTA1IDExNkIgMTFCQTsKK0I4QTg7QjhBODsxMTA1IDExNkIgMTFCQjtCOEE4OzExMDUgMTE2QiAxMUJCOworQjhBOTtCOEE5OzExMDUgMTE2QiAxMUJDO0I4QTk7MTEwNSAxMTZCIDExQkM7CitCOEFBO0I4QUE7MTEwNSAxMTZCIDExQkQ7QjhBQTsxMTA1IDExNkIgMTFCRDsKK0I4QUI7QjhBQjsxMTA1IDExNkIgMTFCRTtCOEFCOzExMDUgMTE2QiAxMUJFOworQjhBQztCOEFDOzExMDUgMTE2QiAxMUJGO0I4QUM7MTEwNSAxMTZCIDExQkY7CitCOEFEO0I4QUQ7MTEwNSAxMTZCIDExQzA7QjhBRDsxMTA1IDExNkIgMTFDMDsKK0I4QUU7QjhBRTsxMTA1IDExNkIgMTFDMTtCOEFFOzExMDUgMTE2QiAxMUMxOworQjhBRjtCOEFGOzExMDUgMTE2QiAxMUMyO0I4QUY7MTEwNSAxMTZCIDExQzI7CitCOEIwO0I4QjA7MTEwNSAxMTZDO0I4QjA7MTEwNSAxMTZDOworQjhCMTtCOEIxOzExMDUgMTE2QyAxMUE4O0I4QjE7MTEwNSAxMTZDIDExQTg7CitCOEIyO0I4QjI7MTEwNSAxMTZDIDExQTk7QjhCMjsxMTA1IDExNkMgMTFBOTsKK0I4QjM7QjhCMzsxMTA1IDExNkMgMTFBQTtCOEIzOzExMDUgMTE2QyAxMUFBOworQjhCNDtCOEI0OzExMDUgMTE2QyAxMUFCO0I4QjQ7MTEwNSAxMTZDIDExQUI7CitCOEI1O0I4QjU7MTEwNSAxMTZDIDExQUM7QjhCNTsxMTA1IDExNkMgMTFBQzsKK0I4QjY7QjhCNjsxMTA1IDExNkMgMTFBRDtCOEI2OzExMDUgMTE2QyAxMUFEOworQjhCNztCOEI3OzExMDUgMTE2QyAxMUFFO0I4Qjc7MTEwNSAxMTZDIDExQUU7CitCOEI4O0I4Qjg7MTEwNSAxMTZDIDExQUY7QjhCODsxMTA1IDExNkMgMTFBRjsKK0I4Qjk7QjhCOTsxMTA1IDExNkMgMTFCMDtCOEI5OzExMDUgMTE2QyAxMUIwOworQjhCQTtCOEJBOzExMDUgMTE2QyAxMUIxO0I4QkE7MTEwNSAxMTZDIDExQjE7CitCOEJCO0I4QkI7MTEwNSAxMTZDIDExQjI7QjhCQjsxMTA1IDExNkMgMTFCMjsKK0I4QkM7QjhCQzsxMTA1IDExNkMgMTFCMztCOEJDOzExMDUgMTE2QyAxMUIzOworQjhCRDtCOEJEOzExMDUgMTE2QyAxMUI0O0I4QkQ7MTEwNSAxMTZDIDExQjQ7CitCOEJFO0I4QkU7MTEwNSAxMTZDIDExQjU7QjhCRTsxMTA1IDExNkMgMTFCNTsKK0I4QkY7QjhCRjsxMTA1IDExNkMgMTFCNjtCOEJGOzExMDUgMTE2QyAxMUI2OworQjhDMDtCOEMwOzExMDUgMTE2QyAxMUI3O0I4QzA7MTEwNSAxMTZDIDExQjc7CitCOEMxO0I4QzE7MTEwNSAxMTZDIDExQjg7QjhDMTsxMTA1IDExNkMgMTFCODsKK0I4QzI7QjhDMjsxMTA1IDExNkMgMTFCOTtCOEMyOzExMDUgMTE2QyAxMUI5OworQjhDMztCOEMzOzExMDUgMTE2QyAxMUJBO0I4QzM7MTEwNSAxMTZDIDExQkE7CitCOEM0O0I4QzQ7MTEwNSAxMTZDIDExQkI7QjhDNDsxMTA1IDExNkMgMTFCQjsKK0I4QzU7QjhDNTsxMTA1IDExNkMgMTFCQztCOEM1OzExMDUgMTE2QyAxMUJDOworQjhDNjtCOEM2OzExMDUgMTE2QyAxMUJEO0I4QzY7MTEwNSAxMTZDIDExQkQ7CitCOEM3O0I4Qzc7MTEwNSAxMTZDIDExQkU7QjhDNzsxMTA1IDExNkMgMTFCRTsKK0I4Qzg7QjhDODsxMTA1IDExNkMgMTFCRjtCOEM4OzExMDUgMTE2QyAxMUJGOworQjhDOTtCOEM5OzExMDUgMTE2QyAxMUMwO0I4Qzk7MTEwNSAxMTZDIDExQzA7CitCOENBO0I4Q0E7MTEwNSAxMTZDIDExQzE7QjhDQTsxMTA1IDExNkMgMTFDMTsKK0I4Q0I7QjhDQjsxMTA1IDExNkMgMTFDMjtCOENCOzExMDUgMTE2QyAxMUMyOworQjhDQztCOENDOzExMDUgMTE2RDtCOENDOzExMDUgMTE2RDsKK0I4Q0Q7QjhDRDsxMTA1IDExNkQgMTFBODtCOENEOzExMDUgMTE2RCAxMUE4OworQjhDRTtCOENFOzExMDUgMTE2RCAxMUE5O0I4Q0U7MTEwNSAxMTZEIDExQTk7CitCOENGO0I4Q0Y7MTEwNSAxMTZEIDExQUE7QjhDRjsxMTA1IDExNkQgMTFBQTsKK0I4RDA7QjhEMDsxMTA1IDExNkQgMTFBQjtCOEQwOzExMDUgMTE2RCAxMUFCOworQjhEMTtCOEQxOzExMDUgMTE2RCAxMUFDO0I4RDE7MTEwNSAxMTZEIDExQUM7CitCOEQyO0I4RDI7MTEwNSAxMTZEIDExQUQ7QjhEMjsxMTA1IDExNkQgMTFBRDsKK0I4RDM7QjhEMzsxMTA1IDExNkQgMTFBRTtCOEQzOzExMDUgMTE2RCAxMUFFOworQjhENDtCOEQ0OzExMDUgMTE2RCAxMUFGO0I4RDQ7MTEwNSAxMTZEIDExQUY7CitCOEQ1O0I4RDU7MTEwNSAxMTZEIDExQjA7QjhENTsxMTA1IDExNkQgMTFCMDsKK0I4RDY7QjhENjsxMTA1IDExNkQgMTFCMTtCOEQ2OzExMDUgMTE2RCAxMUIxOworQjhENztCOEQ3OzExMDUgMTE2RCAxMUIyO0I4RDc7MTEwNSAxMTZEIDExQjI7CitCOEQ4O0I4RDg7MTEwNSAxMTZEIDExQjM7QjhEODsxMTA1IDExNkQgMTFCMzsKK0I4RDk7QjhEOTsxMTA1IDExNkQgMTFCNDtCOEQ5OzExMDUgMTE2RCAxMUI0OworQjhEQTtCOERBOzExMDUgMTE2RCAxMUI1O0I4REE7MTEwNSAxMTZEIDExQjU7CitCOERCO0I4REI7MTEwNSAxMTZEIDExQjY7QjhEQjsxMTA1IDExNkQgMTFCNjsKK0I4REM7QjhEQzsxMTA1IDExNkQgMTFCNztCOERDOzExMDUgMTE2RCAxMUI3OworQjhERDtCOEREOzExMDUgMTE2RCAxMUI4O0I4REQ7MTEwNSAxMTZEIDExQjg7CitCOERFO0I4REU7MTEwNSAxMTZEIDExQjk7QjhERTsxMTA1IDExNkQgMTFCOTsKK0I4REY7QjhERjsxMTA1IDExNkQgMTFCQTtCOERGOzExMDUgMTE2RCAxMUJBOworQjhFMDtCOEUwOzExMDUgMTE2RCAxMUJCO0I4RTA7MTEwNSAxMTZEIDExQkI7CitCOEUxO0I4RTE7MTEwNSAxMTZEIDExQkM7QjhFMTsxMTA1IDExNkQgMTFCQzsKK0I4RTI7QjhFMjsxMTA1IDExNkQgMTFCRDtCOEUyOzExMDUgMTE2RCAxMUJEOworQjhFMztCOEUzOzExMDUgMTE2RCAxMUJFO0I4RTM7MTEwNSAxMTZEIDExQkU7CitCOEU0O0I4RTQ7MTEwNSAxMTZEIDExQkY7QjhFNDsxMTA1IDExNkQgMTFCRjsKK0I4RTU7QjhFNTsxMTA1IDExNkQgMTFDMDtCOEU1OzExMDUgMTE2RCAxMUMwOworQjhFNjtCOEU2OzExMDUgMTE2RCAxMUMxO0I4RTY7MTEwNSAxMTZEIDExQzE7CitCOEU3O0I4RTc7MTEwNSAxMTZEIDExQzI7QjhFNzsxMTA1IDExNkQgMTFDMjsKK0I4RTg7QjhFODsxMTA1IDExNkU7QjhFODsxMTA1IDExNkU7CitCOEU5O0I4RTk7MTEwNSAxMTZFIDExQTg7QjhFOTsxMTA1IDExNkUgMTFBODsKK0I4RUE7QjhFQTsxMTA1IDExNkUgMTFBOTtCOEVBOzExMDUgMTE2RSAxMUE5OworQjhFQjtCOEVCOzExMDUgMTE2RSAxMUFBO0I4RUI7MTEwNSAxMTZFIDExQUE7CitCOEVDO0I4RUM7MTEwNSAxMTZFIDExQUI7QjhFQzsxMTA1IDExNkUgMTFBQjsKK0I4RUQ7QjhFRDsxMTA1IDExNkUgMTFBQztCOEVEOzExMDUgMTE2RSAxMUFDOworQjhFRTtCOEVFOzExMDUgMTE2RSAxMUFEO0I4RUU7MTEwNSAxMTZFIDExQUQ7CitCOEVGO0I4RUY7MTEwNSAxMTZFIDExQUU7QjhFRjsxMTA1IDExNkUgMTFBRTsKK0I4RjA7QjhGMDsxMTA1IDExNkUgMTFBRjtCOEYwOzExMDUgMTE2RSAxMUFGOworQjhGMTtCOEYxOzExMDUgMTE2RSAxMUIwO0I4RjE7MTEwNSAxMTZFIDExQjA7CitCOEYyO0I4RjI7MTEwNSAxMTZFIDExQjE7QjhGMjsxMTA1IDExNkUgMTFCMTsKK0I4RjM7QjhGMzsxMTA1IDExNkUgMTFCMjtCOEYzOzExMDUgMTE2RSAxMUIyOworQjhGNDtCOEY0OzExMDUgMTE2RSAxMUIzO0I4RjQ7MTEwNSAxMTZFIDExQjM7CitCOEY1O0I4RjU7MTEwNSAxMTZFIDExQjQ7QjhGNTsxMTA1IDExNkUgMTFCNDsKK0I4RjY7QjhGNjsxMTA1IDExNkUgMTFCNTtCOEY2OzExMDUgMTE2RSAxMUI1OworQjhGNztCOEY3OzExMDUgMTE2RSAxMUI2O0I4Rjc7MTEwNSAxMTZFIDExQjY7CitCOEY4O0I4Rjg7MTEwNSAxMTZFIDExQjc7QjhGODsxMTA1IDExNkUgMTFCNzsKK0I4Rjk7QjhGOTsxMTA1IDExNkUgMTFCODtCOEY5OzExMDUgMTE2RSAxMUI4OworQjhGQTtCOEZBOzExMDUgMTE2RSAxMUI5O0I4RkE7MTEwNSAxMTZFIDExQjk7CitCOEZCO0I4RkI7MTEwNSAxMTZFIDExQkE7QjhGQjsxMTA1IDExNkUgMTFCQTsKK0I4RkM7QjhGQzsxMTA1IDExNkUgMTFCQjtCOEZDOzExMDUgMTE2RSAxMUJCOworQjhGRDtCOEZEOzExMDUgMTE2RSAxMUJDO0I4RkQ7MTEwNSAxMTZFIDExQkM7CitCOEZFO0I4RkU7MTEwNSAxMTZFIDExQkQ7QjhGRTsxMTA1IDExNkUgMTFCRDsKK0I4RkY7QjhGRjsxMTA1IDExNkUgMTFCRTtCOEZGOzExMDUgMTE2RSAxMUJFOworQjkwMDtCOTAwOzExMDUgMTE2RSAxMUJGO0I5MDA7MTEwNSAxMTZFIDExQkY7CitCOTAxO0I5MDE7MTEwNSAxMTZFIDExQzA7QjkwMTsxMTA1IDExNkUgMTFDMDsKK0I5MDI7QjkwMjsxMTA1IDExNkUgMTFDMTtCOTAyOzExMDUgMTE2RSAxMUMxOworQjkwMztCOTAzOzExMDUgMTE2RSAxMUMyO0I5MDM7MTEwNSAxMTZFIDExQzI7CitCOTA0O0I5MDQ7MTEwNSAxMTZGO0I5MDQ7MTEwNSAxMTZGOworQjkwNTtCOTA1OzExMDUgMTE2RiAxMUE4O0I5MDU7MTEwNSAxMTZGIDExQTg7CitCOTA2O0I5MDY7MTEwNSAxMTZGIDExQTk7QjkwNjsxMTA1IDExNkYgMTFBOTsKK0I5MDc7QjkwNzsxMTA1IDExNkYgMTFBQTtCOTA3OzExMDUgMTE2RiAxMUFBOworQjkwODtCOTA4OzExMDUgMTE2RiAxMUFCO0I5MDg7MTEwNSAxMTZGIDExQUI7CitCOTA5O0I5MDk7MTEwNSAxMTZGIDExQUM7QjkwOTsxMTA1IDExNkYgMTFBQzsKK0I5MEE7QjkwQTsxMTA1IDExNkYgMTFBRDtCOTBBOzExMDUgMTE2RiAxMUFEOworQjkwQjtCOTBCOzExMDUgMTE2RiAxMUFFO0I5MEI7MTEwNSAxMTZGIDExQUU7CitCOTBDO0I5MEM7MTEwNSAxMTZGIDExQUY7QjkwQzsxMTA1IDExNkYgMTFBRjsKK0I5MEQ7QjkwRDsxMTA1IDExNkYgMTFCMDtCOTBEOzExMDUgMTE2RiAxMUIwOworQjkwRTtCOTBFOzExMDUgMTE2RiAxMUIxO0I5MEU7MTEwNSAxMTZGIDExQjE7CitCOTBGO0I5MEY7MTEwNSAxMTZGIDExQjI7QjkwRjsxMTA1IDExNkYgMTFCMjsKK0I5MTA7QjkxMDsxMTA1IDExNkYgMTFCMztCOTEwOzExMDUgMTE2RiAxMUIzOworQjkxMTtCOTExOzExMDUgMTE2RiAxMUI0O0I5MTE7MTEwNSAxMTZGIDExQjQ7CitCOTEyO0I5MTI7MTEwNSAxMTZGIDExQjU7QjkxMjsxMTA1IDExNkYgMTFCNTsKK0I5MTM7QjkxMzsxMTA1IDExNkYgMTFCNjtCOTEzOzExMDUgMTE2RiAxMUI2OworQjkxNDtCOTE0OzExMDUgMTE2RiAxMUI3O0I5MTQ7MTEwNSAxMTZGIDExQjc7CitCOTE1O0I5MTU7MTEwNSAxMTZGIDExQjg7QjkxNTsxMTA1IDExNkYgMTFCODsKK0I5MTY7QjkxNjsxMTA1IDExNkYgMTFCOTtCOTE2OzExMDUgMTE2RiAxMUI5OworQjkxNztCOTE3OzExMDUgMTE2RiAxMUJBO0I5MTc7MTEwNSAxMTZGIDExQkE7CitCOTE4O0I5MTg7MTEwNSAxMTZGIDExQkI7QjkxODsxMTA1IDExNkYgMTFCQjsKK0I5MTk7QjkxOTsxMTA1IDExNkYgMTFCQztCOTE5OzExMDUgMTE2RiAxMUJDOworQjkxQTtCOTFBOzExMDUgMTE2RiAxMUJEO0I5MUE7MTEwNSAxMTZGIDExQkQ7CitCOTFCO0I5MUI7MTEwNSAxMTZGIDExQkU7QjkxQjsxMTA1IDExNkYgMTFCRTsKK0I5MUM7QjkxQzsxMTA1IDExNkYgMTFCRjtCOTFDOzExMDUgMTE2RiAxMUJGOworQjkxRDtCOTFEOzExMDUgMTE2RiAxMUMwO0I5MUQ7MTEwNSAxMTZGIDExQzA7CitCOTFFO0I5MUU7MTEwNSAxMTZGIDExQzE7QjkxRTsxMTA1IDExNkYgMTFDMTsKK0I5MUY7QjkxRjsxMTA1IDExNkYgMTFDMjtCOTFGOzExMDUgMTE2RiAxMUMyOworQjkyMDtCOTIwOzExMDUgMTE3MDtCOTIwOzExMDUgMTE3MDsKK0I5MjE7QjkyMTsxMTA1IDExNzAgMTFBODtCOTIxOzExMDUgMTE3MCAxMUE4OworQjkyMjtCOTIyOzExMDUgMTE3MCAxMUE5O0I5MjI7MTEwNSAxMTcwIDExQTk7CitCOTIzO0I5MjM7MTEwNSAxMTcwIDExQUE7QjkyMzsxMTA1IDExNzAgMTFBQTsKK0I5MjQ7QjkyNDsxMTA1IDExNzAgMTFBQjtCOTI0OzExMDUgMTE3MCAxMUFCOworQjkyNTtCOTI1OzExMDUgMTE3MCAxMUFDO0I5MjU7MTEwNSAxMTcwIDExQUM7CitCOTI2O0I5MjY7MTEwNSAxMTcwIDExQUQ7QjkyNjsxMTA1IDExNzAgMTFBRDsKK0I5Mjc7QjkyNzsxMTA1IDExNzAgMTFBRTtCOTI3OzExMDUgMTE3MCAxMUFFOworQjkyODtCOTI4OzExMDUgMTE3MCAxMUFGO0I5Mjg7MTEwNSAxMTcwIDExQUY7CitCOTI5O0I5Mjk7MTEwNSAxMTcwIDExQjA7QjkyOTsxMTA1IDExNzAgMTFCMDsKK0I5MkE7QjkyQTsxMTA1IDExNzAgMTFCMTtCOTJBOzExMDUgMTE3MCAxMUIxOworQjkyQjtCOTJCOzExMDUgMTE3MCAxMUIyO0I5MkI7MTEwNSAxMTcwIDExQjI7CitCOTJDO0I5MkM7MTEwNSAxMTcwIDExQjM7QjkyQzsxMTA1IDExNzAgMTFCMzsKK0I5MkQ7QjkyRDsxMTA1IDExNzAgMTFCNDtCOTJEOzExMDUgMTE3MCAxMUI0OworQjkyRTtCOTJFOzExMDUgMTE3MCAxMUI1O0I5MkU7MTEwNSAxMTcwIDExQjU7CitCOTJGO0I5MkY7MTEwNSAxMTcwIDExQjY7QjkyRjsxMTA1IDExNzAgMTFCNjsKK0I5MzA7QjkzMDsxMTA1IDExNzAgMTFCNztCOTMwOzExMDUgMTE3MCAxMUI3OworQjkzMTtCOTMxOzExMDUgMTE3MCAxMUI4O0I5MzE7MTEwNSAxMTcwIDExQjg7CitCOTMyO0I5MzI7MTEwNSAxMTcwIDExQjk7QjkzMjsxMTA1IDExNzAgMTFCOTsKK0I5MzM7QjkzMzsxMTA1IDExNzAgMTFCQTtCOTMzOzExMDUgMTE3MCAxMUJBOworQjkzNDtCOTM0OzExMDUgMTE3MCAxMUJCO0I5MzQ7MTEwNSAxMTcwIDExQkI7CitCOTM1O0I5MzU7MTEwNSAxMTcwIDExQkM7QjkzNTsxMTA1IDExNzAgMTFCQzsKK0I5MzY7QjkzNjsxMTA1IDExNzAgMTFCRDtCOTM2OzExMDUgMTE3MCAxMUJEOworQjkzNztCOTM3OzExMDUgMTE3MCAxMUJFO0I5Mzc7MTEwNSAxMTcwIDExQkU7CitCOTM4O0I5Mzg7MTEwNSAxMTcwIDExQkY7QjkzODsxMTA1IDExNzAgMTFCRjsKK0I5Mzk7QjkzOTsxMTA1IDExNzAgMTFDMDtCOTM5OzExMDUgMTE3MCAxMUMwOworQjkzQTtCOTNBOzExMDUgMTE3MCAxMUMxO0I5M0E7MTEwNSAxMTcwIDExQzE7CitCOTNCO0I5M0I7MTEwNSAxMTcwIDExQzI7QjkzQjsxMTA1IDExNzAgMTFDMjsKK0I5M0M7QjkzQzsxMTA1IDExNzE7QjkzQzsxMTA1IDExNzE7CitCOTNEO0I5M0Q7MTEwNSAxMTcxIDExQTg7QjkzRDsxMTA1IDExNzEgMTFBODsKK0I5M0U7QjkzRTsxMTA1IDExNzEgMTFBOTtCOTNFOzExMDUgMTE3MSAxMUE5OworQjkzRjtCOTNGOzExMDUgMTE3MSAxMUFBO0I5M0Y7MTEwNSAxMTcxIDExQUE7CitCOTQwO0I5NDA7MTEwNSAxMTcxIDExQUI7Qjk0MDsxMTA1IDExNzEgMTFBQjsKK0I5NDE7Qjk0MTsxMTA1IDExNzEgMTFBQztCOTQxOzExMDUgMTE3MSAxMUFDOworQjk0MjtCOTQyOzExMDUgMTE3MSAxMUFEO0I5NDI7MTEwNSAxMTcxIDExQUQ7CitCOTQzO0I5NDM7MTEwNSAxMTcxIDExQUU7Qjk0MzsxMTA1IDExNzEgMTFBRTsKK0I5NDQ7Qjk0NDsxMTA1IDExNzEgMTFBRjtCOTQ0OzExMDUgMTE3MSAxMUFGOworQjk0NTtCOTQ1OzExMDUgMTE3MSAxMUIwO0I5NDU7MTEwNSAxMTcxIDExQjA7CitCOTQ2O0I5NDY7MTEwNSAxMTcxIDExQjE7Qjk0NjsxMTA1IDExNzEgMTFCMTsKK0I5NDc7Qjk0NzsxMTA1IDExNzEgMTFCMjtCOTQ3OzExMDUgMTE3MSAxMUIyOworQjk0ODtCOTQ4OzExMDUgMTE3MSAxMUIzO0I5NDg7MTEwNSAxMTcxIDExQjM7CitCOTQ5O0I5NDk7MTEwNSAxMTcxIDExQjQ7Qjk0OTsxMTA1IDExNzEgMTFCNDsKK0I5NEE7Qjk0QTsxMTA1IDExNzEgMTFCNTtCOTRBOzExMDUgMTE3MSAxMUI1OworQjk0QjtCOTRCOzExMDUgMTE3MSAxMUI2O0I5NEI7MTEwNSAxMTcxIDExQjY7CitCOTRDO0I5NEM7MTEwNSAxMTcxIDExQjc7Qjk0QzsxMTA1IDExNzEgMTFCNzsKK0I5NEQ7Qjk0RDsxMTA1IDExNzEgMTFCODtCOTREOzExMDUgMTE3MSAxMUI4OworQjk0RTtCOTRFOzExMDUgMTE3MSAxMUI5O0I5NEU7MTEwNSAxMTcxIDExQjk7CitCOTRGO0I5NEY7MTEwNSAxMTcxIDExQkE7Qjk0RjsxMTA1IDExNzEgMTFCQTsKK0I5NTA7Qjk1MDsxMTA1IDExNzEgMTFCQjtCOTUwOzExMDUgMTE3MSAxMUJCOworQjk1MTtCOTUxOzExMDUgMTE3MSAxMUJDO0I5NTE7MTEwNSAxMTcxIDExQkM7CitCOTUyO0I5NTI7MTEwNSAxMTcxIDExQkQ7Qjk1MjsxMTA1IDExNzEgMTFCRDsKK0I5NTM7Qjk1MzsxMTA1IDExNzEgMTFCRTtCOTUzOzExMDUgMTE3MSAxMUJFOworQjk1NDtCOTU0OzExMDUgMTE3MSAxMUJGO0I5NTQ7MTEwNSAxMTcxIDExQkY7CitCOTU1O0I5NTU7MTEwNSAxMTcxIDExQzA7Qjk1NTsxMTA1IDExNzEgMTFDMDsKK0I5NTY7Qjk1NjsxMTA1IDExNzEgMTFDMTtCOTU2OzExMDUgMTE3MSAxMUMxOworQjk1NztCOTU3OzExMDUgMTE3MSAxMUMyO0I5NTc7MTEwNSAxMTcxIDExQzI7CitCOTU4O0I5NTg7MTEwNSAxMTcyO0I5NTg7MTEwNSAxMTcyOworQjk1OTtCOTU5OzExMDUgMTE3MiAxMUE4O0I5NTk7MTEwNSAxMTcyIDExQTg7CitCOTVBO0I5NUE7MTEwNSAxMTcyIDExQTk7Qjk1QTsxMTA1IDExNzIgMTFBOTsKK0I5NUI7Qjk1QjsxMTA1IDExNzIgMTFBQTtCOTVCOzExMDUgMTE3MiAxMUFBOworQjk1QztCOTVDOzExMDUgMTE3MiAxMUFCO0I5NUM7MTEwNSAxMTcyIDExQUI7CitCOTVEO0I5NUQ7MTEwNSAxMTcyIDExQUM7Qjk1RDsxMTA1IDExNzIgMTFBQzsKK0I5NUU7Qjk1RTsxMTA1IDExNzIgMTFBRDtCOTVFOzExMDUgMTE3MiAxMUFEOworQjk1RjtCOTVGOzExMDUgMTE3MiAxMUFFO0I5NUY7MTEwNSAxMTcyIDExQUU7CitCOTYwO0I5NjA7MTEwNSAxMTcyIDExQUY7Qjk2MDsxMTA1IDExNzIgMTFBRjsKK0I5NjE7Qjk2MTsxMTA1IDExNzIgMTFCMDtCOTYxOzExMDUgMTE3MiAxMUIwOworQjk2MjtCOTYyOzExMDUgMTE3MiAxMUIxO0I5NjI7MTEwNSAxMTcyIDExQjE7CitCOTYzO0I5NjM7MTEwNSAxMTcyIDExQjI7Qjk2MzsxMTA1IDExNzIgMTFCMjsKK0I5NjQ7Qjk2NDsxMTA1IDExNzIgMTFCMztCOTY0OzExMDUgMTE3MiAxMUIzOworQjk2NTtCOTY1OzExMDUgMTE3MiAxMUI0O0I5NjU7MTEwNSAxMTcyIDExQjQ7CitCOTY2O0I5NjY7MTEwNSAxMTcyIDExQjU7Qjk2NjsxMTA1IDExNzIgMTFCNTsKK0I5Njc7Qjk2NzsxMTA1IDExNzIgMTFCNjtCOTY3OzExMDUgMTE3MiAxMUI2OworQjk2ODtCOTY4OzExMDUgMTE3MiAxMUI3O0I5Njg7MTEwNSAxMTcyIDExQjc7CitCOTY5O0I5Njk7MTEwNSAxMTcyIDExQjg7Qjk2OTsxMTA1IDExNzIgMTFCODsKK0I5NkE7Qjk2QTsxMTA1IDExNzIgMTFCOTtCOTZBOzExMDUgMTE3MiAxMUI5OworQjk2QjtCOTZCOzExMDUgMTE3MiAxMUJBO0I5NkI7MTEwNSAxMTcyIDExQkE7CitCOTZDO0I5NkM7MTEwNSAxMTcyIDExQkI7Qjk2QzsxMTA1IDExNzIgMTFCQjsKK0I5NkQ7Qjk2RDsxMTA1IDExNzIgMTFCQztCOTZEOzExMDUgMTE3MiAxMUJDOworQjk2RTtCOTZFOzExMDUgMTE3MiAxMUJEO0I5NkU7MTEwNSAxMTcyIDExQkQ7CitCOTZGO0I5NkY7MTEwNSAxMTcyIDExQkU7Qjk2RjsxMTA1IDExNzIgMTFCRTsKK0I5NzA7Qjk3MDsxMTA1IDExNzIgMTFCRjtCOTcwOzExMDUgMTE3MiAxMUJGOworQjk3MTtCOTcxOzExMDUgMTE3MiAxMUMwO0I5NzE7MTEwNSAxMTcyIDExQzA7CitCOTcyO0I5NzI7MTEwNSAxMTcyIDExQzE7Qjk3MjsxMTA1IDExNzIgMTFDMTsKK0I5NzM7Qjk3MzsxMTA1IDExNzIgMTFDMjtCOTczOzExMDUgMTE3MiAxMUMyOworQjk3NDtCOTc0OzExMDUgMTE3MztCOTc0OzExMDUgMTE3MzsKK0I5NzU7Qjk3NTsxMTA1IDExNzMgMTFBODtCOTc1OzExMDUgMTE3MyAxMUE4OworQjk3NjtCOTc2OzExMDUgMTE3MyAxMUE5O0I5NzY7MTEwNSAxMTczIDExQTk7CitCOTc3O0I5Nzc7MTEwNSAxMTczIDExQUE7Qjk3NzsxMTA1IDExNzMgMTFBQTsKK0I5Nzg7Qjk3ODsxMTA1IDExNzMgMTFBQjtCOTc4OzExMDUgMTE3MyAxMUFCOworQjk3OTtCOTc5OzExMDUgMTE3MyAxMUFDO0I5Nzk7MTEwNSAxMTczIDExQUM7CitCOTdBO0I5N0E7MTEwNSAxMTczIDExQUQ7Qjk3QTsxMTA1IDExNzMgMTFBRDsKK0I5N0I7Qjk3QjsxMTA1IDExNzMgMTFBRTtCOTdCOzExMDUgMTE3MyAxMUFFOworQjk3QztCOTdDOzExMDUgMTE3MyAxMUFGO0I5N0M7MTEwNSAxMTczIDExQUY7CitCOTdEO0I5N0Q7MTEwNSAxMTczIDExQjA7Qjk3RDsxMTA1IDExNzMgMTFCMDsKK0I5N0U7Qjk3RTsxMTA1IDExNzMgMTFCMTtCOTdFOzExMDUgMTE3MyAxMUIxOworQjk3RjtCOTdGOzExMDUgMTE3MyAxMUIyO0I5N0Y7MTEwNSAxMTczIDExQjI7CitCOTgwO0I5ODA7MTEwNSAxMTczIDExQjM7Qjk4MDsxMTA1IDExNzMgMTFCMzsKK0I5ODE7Qjk4MTsxMTA1IDExNzMgMTFCNDtCOTgxOzExMDUgMTE3MyAxMUI0OworQjk4MjtCOTgyOzExMDUgMTE3MyAxMUI1O0I5ODI7MTEwNSAxMTczIDExQjU7CitCOTgzO0I5ODM7MTEwNSAxMTczIDExQjY7Qjk4MzsxMTA1IDExNzMgMTFCNjsKK0I5ODQ7Qjk4NDsxMTA1IDExNzMgMTFCNztCOTg0OzExMDUgMTE3MyAxMUI3OworQjk4NTtCOTg1OzExMDUgMTE3MyAxMUI4O0I5ODU7MTEwNSAxMTczIDExQjg7CitCOTg2O0I5ODY7MTEwNSAxMTczIDExQjk7Qjk4NjsxMTA1IDExNzMgMTFCOTsKK0I5ODc7Qjk4NzsxMTA1IDExNzMgMTFCQTtCOTg3OzExMDUgMTE3MyAxMUJBOworQjk4ODtCOTg4OzExMDUgMTE3MyAxMUJCO0I5ODg7MTEwNSAxMTczIDExQkI7CitCOTg5O0I5ODk7MTEwNSAxMTczIDExQkM7Qjk4OTsxMTA1IDExNzMgMTFCQzsKK0I5OEE7Qjk4QTsxMTA1IDExNzMgMTFCRDtCOThBOzExMDUgMTE3MyAxMUJEOworQjk4QjtCOThCOzExMDUgMTE3MyAxMUJFO0I5OEI7MTEwNSAxMTczIDExQkU7CitCOThDO0I5OEM7MTEwNSAxMTczIDExQkY7Qjk4QzsxMTA1IDExNzMgMTFCRjsKK0I5OEQ7Qjk4RDsxMTA1IDExNzMgMTFDMDtCOThEOzExMDUgMTE3MyAxMUMwOworQjk4RTtCOThFOzExMDUgMTE3MyAxMUMxO0I5OEU7MTEwNSAxMTczIDExQzE7CitCOThGO0I5OEY7MTEwNSAxMTczIDExQzI7Qjk4RjsxMTA1IDExNzMgMTFDMjsKK0I5OTA7Qjk5MDsxMTA1IDExNzQ7Qjk5MDsxMTA1IDExNzQ7CitCOTkxO0I5OTE7MTEwNSAxMTc0IDExQTg7Qjk5MTsxMTA1IDExNzQgMTFBODsKK0I5OTI7Qjk5MjsxMTA1IDExNzQgMTFBOTtCOTkyOzExMDUgMTE3NCAxMUE5OworQjk5MztCOTkzOzExMDUgMTE3NCAxMUFBO0I5OTM7MTEwNSAxMTc0IDExQUE7CitCOTk0O0I5OTQ7MTEwNSAxMTc0IDExQUI7Qjk5NDsxMTA1IDExNzQgMTFBQjsKK0I5OTU7Qjk5NTsxMTA1IDExNzQgMTFBQztCOTk1OzExMDUgMTE3NCAxMUFDOworQjk5NjtCOTk2OzExMDUgMTE3NCAxMUFEO0I5OTY7MTEwNSAxMTc0IDExQUQ7CitCOTk3O0I5OTc7MTEwNSAxMTc0IDExQUU7Qjk5NzsxMTA1IDExNzQgMTFBRTsKK0I5OTg7Qjk5ODsxMTA1IDExNzQgMTFBRjtCOTk4OzExMDUgMTE3NCAxMUFGOworQjk5OTtCOTk5OzExMDUgMTE3NCAxMUIwO0I5OTk7MTEwNSAxMTc0IDExQjA7CitCOTlBO0I5OUE7MTEwNSAxMTc0IDExQjE7Qjk5QTsxMTA1IDExNzQgMTFCMTsKK0I5OUI7Qjk5QjsxMTA1IDExNzQgMTFCMjtCOTlCOzExMDUgMTE3NCAxMUIyOworQjk5QztCOTlDOzExMDUgMTE3NCAxMUIzO0I5OUM7MTEwNSAxMTc0IDExQjM7CitCOTlEO0I5OUQ7MTEwNSAxMTc0IDExQjQ7Qjk5RDsxMTA1IDExNzQgMTFCNDsKK0I5OUU7Qjk5RTsxMTA1IDExNzQgMTFCNTtCOTlFOzExMDUgMTE3NCAxMUI1OworQjk5RjtCOTlGOzExMDUgMTE3NCAxMUI2O0I5OUY7MTEwNSAxMTc0IDExQjY7CitCOUEwO0I5QTA7MTEwNSAxMTc0IDExQjc7QjlBMDsxMTA1IDExNzQgMTFCNzsKK0I5QTE7QjlBMTsxMTA1IDExNzQgMTFCODtCOUExOzExMDUgMTE3NCAxMUI4OworQjlBMjtCOUEyOzExMDUgMTE3NCAxMUI5O0I5QTI7MTEwNSAxMTc0IDExQjk7CitCOUEzO0I5QTM7MTEwNSAxMTc0IDExQkE7QjlBMzsxMTA1IDExNzQgMTFCQTsKK0I5QTQ7QjlBNDsxMTA1IDExNzQgMTFCQjtCOUE0OzExMDUgMTE3NCAxMUJCOworQjlBNTtCOUE1OzExMDUgMTE3NCAxMUJDO0I5QTU7MTEwNSAxMTc0IDExQkM7CitCOUE2O0I5QTY7MTEwNSAxMTc0IDExQkQ7QjlBNjsxMTA1IDExNzQgMTFCRDsKK0I5QTc7QjlBNzsxMTA1IDExNzQgMTFCRTtCOUE3OzExMDUgMTE3NCAxMUJFOworQjlBODtCOUE4OzExMDUgMTE3NCAxMUJGO0I5QTg7MTEwNSAxMTc0IDExQkY7CitCOUE5O0I5QTk7MTEwNSAxMTc0IDExQzA7QjlBOTsxMTA1IDExNzQgMTFDMDsKK0I5QUE7QjlBQTsxMTA1IDExNzQgMTFDMTtCOUFBOzExMDUgMTE3NCAxMUMxOworQjlBQjtCOUFCOzExMDUgMTE3NCAxMUMyO0I5QUI7MTEwNSAxMTc0IDExQzI7CitCOUFDO0I5QUM7MTEwNSAxMTc1O0I5QUM7MTEwNSAxMTc1OworQjlBRDtCOUFEOzExMDUgMTE3NSAxMUE4O0I5QUQ7MTEwNSAxMTc1IDExQTg7CitCOUFFO0I5QUU7MTEwNSAxMTc1IDExQTk7QjlBRTsxMTA1IDExNzUgMTFBOTsKK0I5QUY7QjlBRjsxMTA1IDExNzUgMTFBQTtCOUFGOzExMDUgMTE3NSAxMUFBOworQjlCMDtCOUIwOzExMDUgMTE3NSAxMUFCO0I5QjA7MTEwNSAxMTc1IDExQUI7CitCOUIxO0I5QjE7MTEwNSAxMTc1IDExQUM7QjlCMTsxMTA1IDExNzUgMTFBQzsKK0I5QjI7QjlCMjsxMTA1IDExNzUgMTFBRDtCOUIyOzExMDUgMTE3NSAxMUFEOworQjlCMztCOUIzOzExMDUgMTE3NSAxMUFFO0I5QjM7MTEwNSAxMTc1IDExQUU7CitCOUI0O0I5QjQ7MTEwNSAxMTc1IDExQUY7QjlCNDsxMTA1IDExNzUgMTFBRjsKK0I5QjU7QjlCNTsxMTA1IDExNzUgMTFCMDtCOUI1OzExMDUgMTE3NSAxMUIwOworQjlCNjtCOUI2OzExMDUgMTE3NSAxMUIxO0I5QjY7MTEwNSAxMTc1IDExQjE7CitCOUI3O0I5Qjc7MTEwNSAxMTc1IDExQjI7QjlCNzsxMTA1IDExNzUgMTFCMjsKK0I5Qjg7QjlCODsxMTA1IDExNzUgMTFCMztCOUI4OzExMDUgMTE3NSAxMUIzOworQjlCOTtCOUI5OzExMDUgMTE3NSAxMUI0O0I5Qjk7MTEwNSAxMTc1IDExQjQ7CitCOUJBO0I5QkE7MTEwNSAxMTc1IDExQjU7QjlCQTsxMTA1IDExNzUgMTFCNTsKK0I5QkI7QjlCQjsxMTA1IDExNzUgMTFCNjtCOUJCOzExMDUgMTE3NSAxMUI2OworQjlCQztCOUJDOzExMDUgMTE3NSAxMUI3O0I5QkM7MTEwNSAxMTc1IDExQjc7CitCOUJEO0I5QkQ7MTEwNSAxMTc1IDExQjg7QjlCRDsxMTA1IDExNzUgMTFCODsKK0I5QkU7QjlCRTsxMTA1IDExNzUgMTFCOTtCOUJFOzExMDUgMTE3NSAxMUI5OworQjlCRjtCOUJGOzExMDUgMTE3NSAxMUJBO0I5QkY7MTEwNSAxMTc1IDExQkE7CitCOUMwO0I5QzA7MTEwNSAxMTc1IDExQkI7QjlDMDsxMTA1IDExNzUgMTFCQjsKK0I5QzE7QjlDMTsxMTA1IDExNzUgMTFCQztCOUMxOzExMDUgMTE3NSAxMUJDOworQjlDMjtCOUMyOzExMDUgMTE3NSAxMUJEO0I5QzI7MTEwNSAxMTc1IDExQkQ7CitCOUMzO0I5QzM7MTEwNSAxMTc1IDExQkU7QjlDMzsxMTA1IDExNzUgMTFCRTsKK0I5QzQ7QjlDNDsxMTA1IDExNzUgMTFCRjtCOUM0OzExMDUgMTE3NSAxMUJGOworQjlDNTtCOUM1OzExMDUgMTE3NSAxMUMwO0I5QzU7MTEwNSAxMTc1IDExQzA7CitCOUM2O0I5QzY7MTEwNSAxMTc1IDExQzE7QjlDNjsxMTA1IDExNzUgMTFDMTsKK0I5Qzc7QjlDNzsxMTA1IDExNzUgMTFDMjtCOUM3OzExMDUgMTE3NSAxMUMyOworQjlDODtCOUM4OzExMDYgMTE2MTtCOUM4OzExMDYgMTE2MTsKK0I5Qzk7QjlDOTsxMTA2IDExNjEgMTFBODtCOUM5OzExMDYgMTE2MSAxMUE4OworQjlDQTtCOUNBOzExMDYgMTE2MSAxMUE5O0I5Q0E7MTEwNiAxMTYxIDExQTk7CitCOUNCO0I5Q0I7MTEwNiAxMTYxIDExQUE7QjlDQjsxMTA2IDExNjEgMTFBQTsKK0I5Q0M7QjlDQzsxMTA2IDExNjEgMTFBQjtCOUNDOzExMDYgMTE2MSAxMUFCOworQjlDRDtCOUNEOzExMDYgMTE2MSAxMUFDO0I5Q0Q7MTEwNiAxMTYxIDExQUM7CitCOUNFO0I5Q0U7MTEwNiAxMTYxIDExQUQ7QjlDRTsxMTA2IDExNjEgMTFBRDsKK0I5Q0Y7QjlDRjsxMTA2IDExNjEgMTFBRTtCOUNGOzExMDYgMTE2MSAxMUFFOworQjlEMDtCOUQwOzExMDYgMTE2MSAxMUFGO0I5RDA7MTEwNiAxMTYxIDExQUY7CitCOUQxO0I5RDE7MTEwNiAxMTYxIDExQjA7QjlEMTsxMTA2IDExNjEgMTFCMDsKK0I5RDI7QjlEMjsxMTA2IDExNjEgMTFCMTtCOUQyOzExMDYgMTE2MSAxMUIxOworQjlEMztCOUQzOzExMDYgMTE2MSAxMUIyO0I5RDM7MTEwNiAxMTYxIDExQjI7CitCOUQ0O0I5RDQ7MTEwNiAxMTYxIDExQjM7QjlENDsxMTA2IDExNjEgMTFCMzsKK0I5RDU7QjlENTsxMTA2IDExNjEgMTFCNDtCOUQ1OzExMDYgMTE2MSAxMUI0OworQjlENjtCOUQ2OzExMDYgMTE2MSAxMUI1O0I5RDY7MTEwNiAxMTYxIDExQjU7CitCOUQ3O0I5RDc7MTEwNiAxMTYxIDExQjY7QjlENzsxMTA2IDExNjEgMTFCNjsKK0I5RDg7QjlEODsxMTA2IDExNjEgMTFCNztCOUQ4OzExMDYgMTE2MSAxMUI3OworQjlEOTtCOUQ5OzExMDYgMTE2MSAxMUI4O0I5RDk7MTEwNiAxMTYxIDExQjg7CitCOURBO0I5REE7MTEwNiAxMTYxIDExQjk7QjlEQTsxMTA2IDExNjEgMTFCOTsKK0I5REI7QjlEQjsxMTA2IDExNjEgMTFCQTtCOURCOzExMDYgMTE2MSAxMUJBOworQjlEQztCOURDOzExMDYgMTE2MSAxMUJCO0I5REM7MTEwNiAxMTYxIDExQkI7CitCOUREO0I5REQ7MTEwNiAxMTYxIDExQkM7QjlERDsxMTA2IDExNjEgMTFCQzsKK0I5REU7QjlERTsxMTA2IDExNjEgMTFCRDtCOURFOzExMDYgMTE2MSAxMUJEOworQjlERjtCOURGOzExMDYgMTE2MSAxMUJFO0I5REY7MTEwNiAxMTYxIDExQkU7CitCOUUwO0I5RTA7MTEwNiAxMTYxIDExQkY7QjlFMDsxMTA2IDExNjEgMTFCRjsKK0I5RTE7QjlFMTsxMTA2IDExNjEgMTFDMDtCOUUxOzExMDYgMTE2MSAxMUMwOworQjlFMjtCOUUyOzExMDYgMTE2MSAxMUMxO0I5RTI7MTEwNiAxMTYxIDExQzE7CitCOUUzO0I5RTM7MTEwNiAxMTYxIDExQzI7QjlFMzsxMTA2IDExNjEgMTFDMjsKK0I5RTQ7QjlFNDsxMTA2IDExNjI7QjlFNDsxMTA2IDExNjI7CitCOUU1O0I5RTU7MTEwNiAxMTYyIDExQTg7QjlFNTsxMTA2IDExNjIgMTFBODsKK0I5RTY7QjlFNjsxMTA2IDExNjIgMTFBOTtCOUU2OzExMDYgMTE2MiAxMUE5OworQjlFNztCOUU3OzExMDYgMTE2MiAxMUFBO0I5RTc7MTEwNiAxMTYyIDExQUE7CitCOUU4O0I5RTg7MTEwNiAxMTYyIDExQUI7QjlFODsxMTA2IDExNjIgMTFBQjsKK0I5RTk7QjlFOTsxMTA2IDExNjIgMTFBQztCOUU5OzExMDYgMTE2MiAxMUFDOworQjlFQTtCOUVBOzExMDYgMTE2MiAxMUFEO0I5RUE7MTEwNiAxMTYyIDExQUQ7CitCOUVCO0I5RUI7MTEwNiAxMTYyIDExQUU7QjlFQjsxMTA2IDExNjIgMTFBRTsKK0I5RUM7QjlFQzsxMTA2IDExNjIgMTFBRjtCOUVDOzExMDYgMTE2MiAxMUFGOworQjlFRDtCOUVEOzExMDYgMTE2MiAxMUIwO0I5RUQ7MTEwNiAxMTYyIDExQjA7CitCOUVFO0I5RUU7MTEwNiAxMTYyIDExQjE7QjlFRTsxMTA2IDExNjIgMTFCMTsKK0I5RUY7QjlFRjsxMTA2IDExNjIgMTFCMjtCOUVGOzExMDYgMTE2MiAxMUIyOworQjlGMDtCOUYwOzExMDYgMTE2MiAxMUIzO0I5RjA7MTEwNiAxMTYyIDExQjM7CitCOUYxO0I5RjE7MTEwNiAxMTYyIDExQjQ7QjlGMTsxMTA2IDExNjIgMTFCNDsKK0I5RjI7QjlGMjsxMTA2IDExNjIgMTFCNTtCOUYyOzExMDYgMTE2MiAxMUI1OworQjlGMztCOUYzOzExMDYgMTE2MiAxMUI2O0I5RjM7MTEwNiAxMTYyIDExQjY7CitCOUY0O0I5RjQ7MTEwNiAxMTYyIDExQjc7QjlGNDsxMTA2IDExNjIgMTFCNzsKK0I5RjU7QjlGNTsxMTA2IDExNjIgMTFCODtCOUY1OzExMDYgMTE2MiAxMUI4OworQjlGNjtCOUY2OzExMDYgMTE2MiAxMUI5O0I5RjY7MTEwNiAxMTYyIDExQjk7CitCOUY3O0I5Rjc7MTEwNiAxMTYyIDExQkE7QjlGNzsxMTA2IDExNjIgMTFCQTsKK0I5Rjg7QjlGODsxMTA2IDExNjIgMTFCQjtCOUY4OzExMDYgMTE2MiAxMUJCOworQjlGOTtCOUY5OzExMDYgMTE2MiAxMUJDO0I5Rjk7MTEwNiAxMTYyIDExQkM7CitCOUZBO0I5RkE7MTEwNiAxMTYyIDExQkQ7QjlGQTsxMTA2IDExNjIgMTFCRDsKK0I5RkI7QjlGQjsxMTA2IDExNjIgMTFCRTtCOUZCOzExMDYgMTE2MiAxMUJFOworQjlGQztCOUZDOzExMDYgMTE2MiAxMUJGO0I5RkM7MTEwNiAxMTYyIDExQkY7CitCOUZEO0I5RkQ7MTEwNiAxMTYyIDExQzA7QjlGRDsxMTA2IDExNjIgMTFDMDsKK0I5RkU7QjlGRTsxMTA2IDExNjIgMTFDMTtCOUZFOzExMDYgMTE2MiAxMUMxOworQjlGRjtCOUZGOzExMDYgMTE2MiAxMUMyO0I5RkY7MTEwNiAxMTYyIDExQzI7CitCQTAwO0JBMDA7MTEwNiAxMTYzO0JBMDA7MTEwNiAxMTYzOworQkEwMTtCQTAxOzExMDYgMTE2MyAxMUE4O0JBMDE7MTEwNiAxMTYzIDExQTg7CitCQTAyO0JBMDI7MTEwNiAxMTYzIDExQTk7QkEwMjsxMTA2IDExNjMgMTFBOTsKK0JBMDM7QkEwMzsxMTA2IDExNjMgMTFBQTtCQTAzOzExMDYgMTE2MyAxMUFBOworQkEwNDtCQTA0OzExMDYgMTE2MyAxMUFCO0JBMDQ7MTEwNiAxMTYzIDExQUI7CitCQTA1O0JBMDU7MTEwNiAxMTYzIDExQUM7QkEwNTsxMTA2IDExNjMgMTFBQzsKK0JBMDY7QkEwNjsxMTA2IDExNjMgMTFBRDtCQTA2OzExMDYgMTE2MyAxMUFEOworQkEwNztCQTA3OzExMDYgMTE2MyAxMUFFO0JBMDc7MTEwNiAxMTYzIDExQUU7CitCQTA4O0JBMDg7MTEwNiAxMTYzIDExQUY7QkEwODsxMTA2IDExNjMgMTFBRjsKK0JBMDk7QkEwOTsxMTA2IDExNjMgMTFCMDtCQTA5OzExMDYgMTE2MyAxMUIwOworQkEwQTtCQTBBOzExMDYgMTE2MyAxMUIxO0JBMEE7MTEwNiAxMTYzIDExQjE7CitCQTBCO0JBMEI7MTEwNiAxMTYzIDExQjI7QkEwQjsxMTA2IDExNjMgMTFCMjsKK0JBMEM7QkEwQzsxMTA2IDExNjMgMTFCMztCQTBDOzExMDYgMTE2MyAxMUIzOworQkEwRDtCQTBEOzExMDYgMTE2MyAxMUI0O0JBMEQ7MTEwNiAxMTYzIDExQjQ7CitCQTBFO0JBMEU7MTEwNiAxMTYzIDExQjU7QkEwRTsxMTA2IDExNjMgMTFCNTsKK0JBMEY7QkEwRjsxMTA2IDExNjMgMTFCNjtCQTBGOzExMDYgMTE2MyAxMUI2OworQkExMDtCQTEwOzExMDYgMTE2MyAxMUI3O0JBMTA7MTEwNiAxMTYzIDExQjc7CitCQTExO0JBMTE7MTEwNiAxMTYzIDExQjg7QkExMTsxMTA2IDExNjMgMTFCODsKK0JBMTI7QkExMjsxMTA2IDExNjMgMTFCOTtCQTEyOzExMDYgMTE2MyAxMUI5OworQkExMztCQTEzOzExMDYgMTE2MyAxMUJBO0JBMTM7MTEwNiAxMTYzIDExQkE7CitCQTE0O0JBMTQ7MTEwNiAxMTYzIDExQkI7QkExNDsxMTA2IDExNjMgMTFCQjsKK0JBMTU7QkExNTsxMTA2IDExNjMgMTFCQztCQTE1OzExMDYgMTE2MyAxMUJDOworQkExNjtCQTE2OzExMDYgMTE2MyAxMUJEO0JBMTY7MTEwNiAxMTYzIDExQkQ7CitCQTE3O0JBMTc7MTEwNiAxMTYzIDExQkU7QkExNzsxMTA2IDExNjMgMTFCRTsKK0JBMTg7QkExODsxMTA2IDExNjMgMTFCRjtCQTE4OzExMDYgMTE2MyAxMUJGOworQkExOTtCQTE5OzExMDYgMTE2MyAxMUMwO0JBMTk7MTEwNiAxMTYzIDExQzA7CitCQTFBO0JBMUE7MTEwNiAxMTYzIDExQzE7QkExQTsxMTA2IDExNjMgMTFDMTsKK0JBMUI7QkExQjsxMTA2IDExNjMgMTFDMjtCQTFCOzExMDYgMTE2MyAxMUMyOworQkExQztCQTFDOzExMDYgMTE2NDtCQTFDOzExMDYgMTE2NDsKK0JBMUQ7QkExRDsxMTA2IDExNjQgMTFBODtCQTFEOzExMDYgMTE2NCAxMUE4OworQkExRTtCQTFFOzExMDYgMTE2NCAxMUE5O0JBMUU7MTEwNiAxMTY0IDExQTk7CitCQTFGO0JBMUY7MTEwNiAxMTY0IDExQUE7QkExRjsxMTA2IDExNjQgMTFBQTsKK0JBMjA7QkEyMDsxMTA2IDExNjQgMTFBQjtCQTIwOzExMDYgMTE2NCAxMUFCOworQkEyMTtCQTIxOzExMDYgMTE2NCAxMUFDO0JBMjE7MTEwNiAxMTY0IDExQUM7CitCQTIyO0JBMjI7MTEwNiAxMTY0IDExQUQ7QkEyMjsxMTA2IDExNjQgMTFBRDsKK0JBMjM7QkEyMzsxMTA2IDExNjQgMTFBRTtCQTIzOzExMDYgMTE2NCAxMUFFOworQkEyNDtCQTI0OzExMDYgMTE2NCAxMUFGO0JBMjQ7MTEwNiAxMTY0IDExQUY7CitCQTI1O0JBMjU7MTEwNiAxMTY0IDExQjA7QkEyNTsxMTA2IDExNjQgMTFCMDsKK0JBMjY7QkEyNjsxMTA2IDExNjQgMTFCMTtCQTI2OzExMDYgMTE2NCAxMUIxOworQkEyNztCQTI3OzExMDYgMTE2NCAxMUIyO0JBMjc7MTEwNiAxMTY0IDExQjI7CitCQTI4O0JBMjg7MTEwNiAxMTY0IDExQjM7QkEyODsxMTA2IDExNjQgMTFCMzsKK0JBMjk7QkEyOTsxMTA2IDExNjQgMTFCNDtCQTI5OzExMDYgMTE2NCAxMUI0OworQkEyQTtCQTJBOzExMDYgMTE2NCAxMUI1O0JBMkE7MTEwNiAxMTY0IDExQjU7CitCQTJCO0JBMkI7MTEwNiAxMTY0IDExQjY7QkEyQjsxMTA2IDExNjQgMTFCNjsKK0JBMkM7QkEyQzsxMTA2IDExNjQgMTFCNztCQTJDOzExMDYgMTE2NCAxMUI3OworQkEyRDtCQTJEOzExMDYgMTE2NCAxMUI4O0JBMkQ7MTEwNiAxMTY0IDExQjg7CitCQTJFO0JBMkU7MTEwNiAxMTY0IDExQjk7QkEyRTsxMTA2IDExNjQgMTFCOTsKK0JBMkY7QkEyRjsxMTA2IDExNjQgMTFCQTtCQTJGOzExMDYgMTE2NCAxMUJBOworQkEzMDtCQTMwOzExMDYgMTE2NCAxMUJCO0JBMzA7MTEwNiAxMTY0IDExQkI7CitCQTMxO0JBMzE7MTEwNiAxMTY0IDExQkM7QkEzMTsxMTA2IDExNjQgMTFCQzsKK0JBMzI7QkEzMjsxMTA2IDExNjQgMTFCRDtCQTMyOzExMDYgMTE2NCAxMUJEOworQkEzMztCQTMzOzExMDYgMTE2NCAxMUJFO0JBMzM7MTEwNiAxMTY0IDExQkU7CitCQTM0O0JBMzQ7MTEwNiAxMTY0IDExQkY7QkEzNDsxMTA2IDExNjQgMTFCRjsKK0JBMzU7QkEzNTsxMTA2IDExNjQgMTFDMDtCQTM1OzExMDYgMTE2NCAxMUMwOworQkEzNjtCQTM2OzExMDYgMTE2NCAxMUMxO0JBMzY7MTEwNiAxMTY0IDExQzE7CitCQTM3O0JBMzc7MTEwNiAxMTY0IDExQzI7QkEzNzsxMTA2IDExNjQgMTFDMjsKK0JBMzg7QkEzODsxMTA2IDExNjU7QkEzODsxMTA2IDExNjU7CitCQTM5O0JBMzk7MTEwNiAxMTY1IDExQTg7QkEzOTsxMTA2IDExNjUgMTFBODsKK0JBM0E7QkEzQTsxMTA2IDExNjUgMTFBOTtCQTNBOzExMDYgMTE2NSAxMUE5OworQkEzQjtCQTNCOzExMDYgMTE2NSAxMUFBO0JBM0I7MTEwNiAxMTY1IDExQUE7CitCQTNDO0JBM0M7MTEwNiAxMTY1IDExQUI7QkEzQzsxMTA2IDExNjUgMTFBQjsKK0JBM0Q7QkEzRDsxMTA2IDExNjUgMTFBQztCQTNEOzExMDYgMTE2NSAxMUFDOworQkEzRTtCQTNFOzExMDYgMTE2NSAxMUFEO0JBM0U7MTEwNiAxMTY1IDExQUQ7CitCQTNGO0JBM0Y7MTEwNiAxMTY1IDExQUU7QkEzRjsxMTA2IDExNjUgMTFBRTsKK0JBNDA7QkE0MDsxMTA2IDExNjUgMTFBRjtCQTQwOzExMDYgMTE2NSAxMUFGOworQkE0MTtCQTQxOzExMDYgMTE2NSAxMUIwO0JBNDE7MTEwNiAxMTY1IDExQjA7CitCQTQyO0JBNDI7MTEwNiAxMTY1IDExQjE7QkE0MjsxMTA2IDExNjUgMTFCMTsKK0JBNDM7QkE0MzsxMTA2IDExNjUgMTFCMjtCQTQzOzExMDYgMTE2NSAxMUIyOworQkE0NDtCQTQ0OzExMDYgMTE2NSAxMUIzO0JBNDQ7MTEwNiAxMTY1IDExQjM7CitCQTQ1O0JBNDU7MTEwNiAxMTY1IDExQjQ7QkE0NTsxMTA2IDExNjUgMTFCNDsKK0JBNDY7QkE0NjsxMTA2IDExNjUgMTFCNTtCQTQ2OzExMDYgMTE2NSAxMUI1OworQkE0NztCQTQ3OzExMDYgMTE2NSAxMUI2O0JBNDc7MTEwNiAxMTY1IDExQjY7CitCQTQ4O0JBNDg7MTEwNiAxMTY1IDExQjc7QkE0ODsxMTA2IDExNjUgMTFCNzsKK0JBNDk7QkE0OTsxMTA2IDExNjUgMTFCODtCQTQ5OzExMDYgMTE2NSAxMUI4OworQkE0QTtCQTRBOzExMDYgMTE2NSAxMUI5O0JBNEE7MTEwNiAxMTY1IDExQjk7CitCQTRCO0JBNEI7MTEwNiAxMTY1IDExQkE7QkE0QjsxMTA2IDExNjUgMTFCQTsKK0JBNEM7QkE0QzsxMTA2IDExNjUgMTFCQjtCQTRDOzExMDYgMTE2NSAxMUJCOworQkE0RDtCQTREOzExMDYgMTE2NSAxMUJDO0JBNEQ7MTEwNiAxMTY1IDExQkM7CitCQTRFO0JBNEU7MTEwNiAxMTY1IDExQkQ7QkE0RTsxMTA2IDExNjUgMTFCRDsKK0JBNEY7QkE0RjsxMTA2IDExNjUgMTFCRTtCQTRGOzExMDYgMTE2NSAxMUJFOworQkE1MDtCQTUwOzExMDYgMTE2NSAxMUJGO0JBNTA7MTEwNiAxMTY1IDExQkY7CitCQTUxO0JBNTE7MTEwNiAxMTY1IDExQzA7QkE1MTsxMTA2IDExNjUgMTFDMDsKK0JBNTI7QkE1MjsxMTA2IDExNjUgMTFDMTtCQTUyOzExMDYgMTE2NSAxMUMxOworQkE1MztCQTUzOzExMDYgMTE2NSAxMUMyO0JBNTM7MTEwNiAxMTY1IDExQzI7CitCQTU0O0JBNTQ7MTEwNiAxMTY2O0JBNTQ7MTEwNiAxMTY2OworQkE1NTtCQTU1OzExMDYgMTE2NiAxMUE4O0JBNTU7MTEwNiAxMTY2IDExQTg7CitCQTU2O0JBNTY7MTEwNiAxMTY2IDExQTk7QkE1NjsxMTA2IDExNjYgMTFBOTsKK0JBNTc7QkE1NzsxMTA2IDExNjYgMTFBQTtCQTU3OzExMDYgMTE2NiAxMUFBOworQkE1ODtCQTU4OzExMDYgMTE2NiAxMUFCO0JBNTg7MTEwNiAxMTY2IDExQUI7CitCQTU5O0JBNTk7MTEwNiAxMTY2IDExQUM7QkE1OTsxMTA2IDExNjYgMTFBQzsKK0JBNUE7QkE1QTsxMTA2IDExNjYgMTFBRDtCQTVBOzExMDYgMTE2NiAxMUFEOworQkE1QjtCQTVCOzExMDYgMTE2NiAxMUFFO0JBNUI7MTEwNiAxMTY2IDExQUU7CitCQTVDO0JBNUM7MTEwNiAxMTY2IDExQUY7QkE1QzsxMTA2IDExNjYgMTFBRjsKK0JBNUQ7QkE1RDsxMTA2IDExNjYgMTFCMDtCQTVEOzExMDYgMTE2NiAxMUIwOworQkE1RTtCQTVFOzExMDYgMTE2NiAxMUIxO0JBNUU7MTEwNiAxMTY2IDExQjE7CitCQTVGO0JBNUY7MTEwNiAxMTY2IDExQjI7QkE1RjsxMTA2IDExNjYgMTFCMjsKK0JBNjA7QkE2MDsxMTA2IDExNjYgMTFCMztCQTYwOzExMDYgMTE2NiAxMUIzOworQkE2MTtCQTYxOzExMDYgMTE2NiAxMUI0O0JBNjE7MTEwNiAxMTY2IDExQjQ7CitCQTYyO0JBNjI7MTEwNiAxMTY2IDExQjU7QkE2MjsxMTA2IDExNjYgMTFCNTsKK0JBNjM7QkE2MzsxMTA2IDExNjYgMTFCNjtCQTYzOzExMDYgMTE2NiAxMUI2OworQkE2NDtCQTY0OzExMDYgMTE2NiAxMUI3O0JBNjQ7MTEwNiAxMTY2IDExQjc7CitCQTY1O0JBNjU7MTEwNiAxMTY2IDExQjg7QkE2NTsxMTA2IDExNjYgMTFCODsKK0JBNjY7QkE2NjsxMTA2IDExNjYgMTFCOTtCQTY2OzExMDYgMTE2NiAxMUI5OworQkE2NztCQTY3OzExMDYgMTE2NiAxMUJBO0JBNjc7MTEwNiAxMTY2IDExQkE7CitCQTY4O0JBNjg7MTEwNiAxMTY2IDExQkI7QkE2ODsxMTA2IDExNjYgMTFCQjsKK0JBNjk7QkE2OTsxMTA2IDExNjYgMTFCQztCQTY5OzExMDYgMTE2NiAxMUJDOworQkE2QTtCQTZBOzExMDYgMTE2NiAxMUJEO0JBNkE7MTEwNiAxMTY2IDExQkQ7CitCQTZCO0JBNkI7MTEwNiAxMTY2IDExQkU7QkE2QjsxMTA2IDExNjYgMTFCRTsKK0JBNkM7QkE2QzsxMTA2IDExNjYgMTFCRjtCQTZDOzExMDYgMTE2NiAxMUJGOworQkE2RDtCQTZEOzExMDYgMTE2NiAxMUMwO0JBNkQ7MTEwNiAxMTY2IDExQzA7CitCQTZFO0JBNkU7MTEwNiAxMTY2IDExQzE7QkE2RTsxMTA2IDExNjYgMTFDMTsKK0JBNkY7QkE2RjsxMTA2IDExNjYgMTFDMjtCQTZGOzExMDYgMTE2NiAxMUMyOworQkE3MDtCQTcwOzExMDYgMTE2NztCQTcwOzExMDYgMTE2NzsKK0JBNzE7QkE3MTsxMTA2IDExNjcgMTFBODtCQTcxOzExMDYgMTE2NyAxMUE4OworQkE3MjtCQTcyOzExMDYgMTE2NyAxMUE5O0JBNzI7MTEwNiAxMTY3IDExQTk7CitCQTczO0JBNzM7MTEwNiAxMTY3IDExQUE7QkE3MzsxMTA2IDExNjcgMTFBQTsKK0JBNzQ7QkE3NDsxMTA2IDExNjcgMTFBQjtCQTc0OzExMDYgMTE2NyAxMUFCOworQkE3NTtCQTc1OzExMDYgMTE2NyAxMUFDO0JBNzU7MTEwNiAxMTY3IDExQUM7CitCQTc2O0JBNzY7MTEwNiAxMTY3IDExQUQ7QkE3NjsxMTA2IDExNjcgMTFBRDsKK0JBNzc7QkE3NzsxMTA2IDExNjcgMTFBRTtCQTc3OzExMDYgMTE2NyAxMUFFOworQkE3ODtCQTc4OzExMDYgMTE2NyAxMUFGO0JBNzg7MTEwNiAxMTY3IDExQUY7CitCQTc5O0JBNzk7MTEwNiAxMTY3IDExQjA7QkE3OTsxMTA2IDExNjcgMTFCMDsKK0JBN0E7QkE3QTsxMTA2IDExNjcgMTFCMTtCQTdBOzExMDYgMTE2NyAxMUIxOworQkE3QjtCQTdCOzExMDYgMTE2NyAxMUIyO0JBN0I7MTEwNiAxMTY3IDExQjI7CitCQTdDO0JBN0M7MTEwNiAxMTY3IDExQjM7QkE3QzsxMTA2IDExNjcgMTFCMzsKK0JBN0Q7QkE3RDsxMTA2IDExNjcgMTFCNDtCQTdEOzExMDYgMTE2NyAxMUI0OworQkE3RTtCQTdFOzExMDYgMTE2NyAxMUI1O0JBN0U7MTEwNiAxMTY3IDExQjU7CitCQTdGO0JBN0Y7MTEwNiAxMTY3IDExQjY7QkE3RjsxMTA2IDExNjcgMTFCNjsKK0JBODA7QkE4MDsxMTA2IDExNjcgMTFCNztCQTgwOzExMDYgMTE2NyAxMUI3OworQkE4MTtCQTgxOzExMDYgMTE2NyAxMUI4O0JBODE7MTEwNiAxMTY3IDExQjg7CitCQTgyO0JBODI7MTEwNiAxMTY3IDExQjk7QkE4MjsxMTA2IDExNjcgMTFCOTsKK0JBODM7QkE4MzsxMTA2IDExNjcgMTFCQTtCQTgzOzExMDYgMTE2NyAxMUJBOworQkE4NDtCQTg0OzExMDYgMTE2NyAxMUJCO0JBODQ7MTEwNiAxMTY3IDExQkI7CitCQTg1O0JBODU7MTEwNiAxMTY3IDExQkM7QkE4NTsxMTA2IDExNjcgMTFCQzsKK0JBODY7QkE4NjsxMTA2IDExNjcgMTFCRDtCQTg2OzExMDYgMTE2NyAxMUJEOworQkE4NztCQTg3OzExMDYgMTE2NyAxMUJFO0JBODc7MTEwNiAxMTY3IDExQkU7CitCQTg4O0JBODg7MTEwNiAxMTY3IDExQkY7QkE4ODsxMTA2IDExNjcgMTFCRjsKK0JBODk7QkE4OTsxMTA2IDExNjcgMTFDMDtCQTg5OzExMDYgMTE2NyAxMUMwOworQkE4QTtCQThBOzExMDYgMTE2NyAxMUMxO0JBOEE7MTEwNiAxMTY3IDExQzE7CitCQThCO0JBOEI7MTEwNiAxMTY3IDExQzI7QkE4QjsxMTA2IDExNjcgMTFDMjsKK0JBOEM7QkE4QzsxMTA2IDExNjg7QkE4QzsxMTA2IDExNjg7CitCQThEO0JBOEQ7MTEwNiAxMTY4IDExQTg7QkE4RDsxMTA2IDExNjggMTFBODsKK0JBOEU7QkE4RTsxMTA2IDExNjggMTFBOTtCQThFOzExMDYgMTE2OCAxMUE5OworQkE4RjtCQThGOzExMDYgMTE2OCAxMUFBO0JBOEY7MTEwNiAxMTY4IDExQUE7CitCQTkwO0JBOTA7MTEwNiAxMTY4IDExQUI7QkE5MDsxMTA2IDExNjggMTFBQjsKK0JBOTE7QkE5MTsxMTA2IDExNjggMTFBQztCQTkxOzExMDYgMTE2OCAxMUFDOworQkE5MjtCQTkyOzExMDYgMTE2OCAxMUFEO0JBOTI7MTEwNiAxMTY4IDExQUQ7CitCQTkzO0JBOTM7MTEwNiAxMTY4IDExQUU7QkE5MzsxMTA2IDExNjggMTFBRTsKK0JBOTQ7QkE5NDsxMTA2IDExNjggMTFBRjtCQTk0OzExMDYgMTE2OCAxMUFGOworQkE5NTtCQTk1OzExMDYgMTE2OCAxMUIwO0JBOTU7MTEwNiAxMTY4IDExQjA7CitCQTk2O0JBOTY7MTEwNiAxMTY4IDExQjE7QkE5NjsxMTA2IDExNjggMTFCMTsKK0JBOTc7QkE5NzsxMTA2IDExNjggMTFCMjtCQTk3OzExMDYgMTE2OCAxMUIyOworQkE5ODtCQTk4OzExMDYgMTE2OCAxMUIzO0JBOTg7MTEwNiAxMTY4IDExQjM7CitCQTk5O0JBOTk7MTEwNiAxMTY4IDExQjQ7QkE5OTsxMTA2IDExNjggMTFCNDsKK0JBOUE7QkE5QTsxMTA2IDExNjggMTFCNTtCQTlBOzExMDYgMTE2OCAxMUI1OworQkE5QjtCQTlCOzExMDYgMTE2OCAxMUI2O0JBOUI7MTEwNiAxMTY4IDExQjY7CitCQTlDO0JBOUM7MTEwNiAxMTY4IDExQjc7QkE5QzsxMTA2IDExNjggMTFCNzsKK0JBOUQ7QkE5RDsxMTA2IDExNjggMTFCODtCQTlEOzExMDYgMTE2OCAxMUI4OworQkE5RTtCQTlFOzExMDYgMTE2OCAxMUI5O0JBOUU7MTEwNiAxMTY4IDExQjk7CitCQTlGO0JBOUY7MTEwNiAxMTY4IDExQkE7QkE5RjsxMTA2IDExNjggMTFCQTsKK0JBQTA7QkFBMDsxMTA2IDExNjggMTFCQjtCQUEwOzExMDYgMTE2OCAxMUJCOworQkFBMTtCQUExOzExMDYgMTE2OCAxMUJDO0JBQTE7MTEwNiAxMTY4IDExQkM7CitCQUEyO0JBQTI7MTEwNiAxMTY4IDExQkQ7QkFBMjsxMTA2IDExNjggMTFCRDsKK0JBQTM7QkFBMzsxMTA2IDExNjggMTFCRTtCQUEzOzExMDYgMTE2OCAxMUJFOworQkFBNDtCQUE0OzExMDYgMTE2OCAxMUJGO0JBQTQ7MTEwNiAxMTY4IDExQkY7CitCQUE1O0JBQTU7MTEwNiAxMTY4IDExQzA7QkFBNTsxMTA2IDExNjggMTFDMDsKK0JBQTY7QkFBNjsxMTA2IDExNjggMTFDMTtCQUE2OzExMDYgMTE2OCAxMUMxOworQkFBNztCQUE3OzExMDYgMTE2OCAxMUMyO0JBQTc7MTEwNiAxMTY4IDExQzI7CitCQUE4O0JBQTg7MTEwNiAxMTY5O0JBQTg7MTEwNiAxMTY5OworQkFBOTtCQUE5OzExMDYgMTE2OSAxMUE4O0JBQTk7MTEwNiAxMTY5IDExQTg7CitCQUFBO0JBQUE7MTEwNiAxMTY5IDExQTk7QkFBQTsxMTA2IDExNjkgMTFBOTsKK0JBQUI7QkFBQjsxMTA2IDExNjkgMTFBQTtCQUFCOzExMDYgMTE2OSAxMUFBOworQkFBQztCQUFDOzExMDYgMTE2OSAxMUFCO0JBQUM7MTEwNiAxMTY5IDExQUI7CitCQUFEO0JBQUQ7MTEwNiAxMTY5IDExQUM7QkFBRDsxMTA2IDExNjkgMTFBQzsKK0JBQUU7QkFBRTsxMTA2IDExNjkgMTFBRDtCQUFFOzExMDYgMTE2OSAxMUFEOworQkFBRjtCQUFGOzExMDYgMTE2OSAxMUFFO0JBQUY7MTEwNiAxMTY5IDExQUU7CitCQUIwO0JBQjA7MTEwNiAxMTY5IDExQUY7QkFCMDsxMTA2IDExNjkgMTFBRjsKK0JBQjE7QkFCMTsxMTA2IDExNjkgMTFCMDtCQUIxOzExMDYgMTE2OSAxMUIwOworQkFCMjtCQUIyOzExMDYgMTE2OSAxMUIxO0JBQjI7MTEwNiAxMTY5IDExQjE7CitCQUIzO0JBQjM7MTEwNiAxMTY5IDExQjI7QkFCMzsxMTA2IDExNjkgMTFCMjsKK0JBQjQ7QkFCNDsxMTA2IDExNjkgMTFCMztCQUI0OzExMDYgMTE2OSAxMUIzOworQkFCNTtCQUI1OzExMDYgMTE2OSAxMUI0O0JBQjU7MTEwNiAxMTY5IDExQjQ7CitCQUI2O0JBQjY7MTEwNiAxMTY5IDExQjU7QkFCNjsxMTA2IDExNjkgMTFCNTsKK0JBQjc7QkFCNzsxMTA2IDExNjkgMTFCNjtCQUI3OzExMDYgMTE2OSAxMUI2OworQkFCODtCQUI4OzExMDYgMTE2OSAxMUI3O0JBQjg7MTEwNiAxMTY5IDExQjc7CitCQUI5O0JBQjk7MTEwNiAxMTY5IDExQjg7QkFCOTsxMTA2IDExNjkgMTFCODsKK0JBQkE7QkFCQTsxMTA2IDExNjkgMTFCOTtCQUJBOzExMDYgMTE2OSAxMUI5OworQkFCQjtCQUJCOzExMDYgMTE2OSAxMUJBO0JBQkI7MTEwNiAxMTY5IDExQkE7CitCQUJDO0JBQkM7MTEwNiAxMTY5IDExQkI7QkFCQzsxMTA2IDExNjkgMTFCQjsKK0JBQkQ7QkFCRDsxMTA2IDExNjkgMTFCQztCQUJEOzExMDYgMTE2OSAxMUJDOworQkFCRTtCQUJFOzExMDYgMTE2OSAxMUJEO0JBQkU7MTEwNiAxMTY5IDExQkQ7CitCQUJGO0JBQkY7MTEwNiAxMTY5IDExQkU7QkFCRjsxMTA2IDExNjkgMTFCRTsKK0JBQzA7QkFDMDsxMTA2IDExNjkgMTFCRjtCQUMwOzExMDYgMTE2OSAxMUJGOworQkFDMTtCQUMxOzExMDYgMTE2OSAxMUMwO0JBQzE7MTEwNiAxMTY5IDExQzA7CitCQUMyO0JBQzI7MTEwNiAxMTY5IDExQzE7QkFDMjsxMTA2IDExNjkgMTFDMTsKK0JBQzM7QkFDMzsxMTA2IDExNjkgMTFDMjtCQUMzOzExMDYgMTE2OSAxMUMyOworQkFDNDtCQUM0OzExMDYgMTE2QTtCQUM0OzExMDYgMTE2QTsKK0JBQzU7QkFDNTsxMTA2IDExNkEgMTFBODtCQUM1OzExMDYgMTE2QSAxMUE4OworQkFDNjtCQUM2OzExMDYgMTE2QSAxMUE5O0JBQzY7MTEwNiAxMTZBIDExQTk7CitCQUM3O0JBQzc7MTEwNiAxMTZBIDExQUE7QkFDNzsxMTA2IDExNkEgMTFBQTsKK0JBQzg7QkFDODsxMTA2IDExNkEgMTFBQjtCQUM4OzExMDYgMTE2QSAxMUFCOworQkFDOTtCQUM5OzExMDYgMTE2QSAxMUFDO0JBQzk7MTEwNiAxMTZBIDExQUM7CitCQUNBO0JBQ0E7MTEwNiAxMTZBIDExQUQ7QkFDQTsxMTA2IDExNkEgMTFBRDsKK0JBQ0I7QkFDQjsxMTA2IDExNkEgMTFBRTtCQUNCOzExMDYgMTE2QSAxMUFFOworQkFDQztCQUNDOzExMDYgMTE2QSAxMUFGO0JBQ0M7MTEwNiAxMTZBIDExQUY7CitCQUNEO0JBQ0Q7MTEwNiAxMTZBIDExQjA7QkFDRDsxMTA2IDExNkEgMTFCMDsKK0JBQ0U7QkFDRTsxMTA2IDExNkEgMTFCMTtCQUNFOzExMDYgMTE2QSAxMUIxOworQkFDRjtCQUNGOzExMDYgMTE2QSAxMUIyO0JBQ0Y7MTEwNiAxMTZBIDExQjI7CitCQUQwO0JBRDA7MTEwNiAxMTZBIDExQjM7QkFEMDsxMTA2IDExNkEgMTFCMzsKK0JBRDE7QkFEMTsxMTA2IDExNkEgMTFCNDtCQUQxOzExMDYgMTE2QSAxMUI0OworQkFEMjtCQUQyOzExMDYgMTE2QSAxMUI1O0JBRDI7MTEwNiAxMTZBIDExQjU7CitCQUQzO0JBRDM7MTEwNiAxMTZBIDExQjY7QkFEMzsxMTA2IDExNkEgMTFCNjsKK0JBRDQ7QkFENDsxMTA2IDExNkEgMTFCNztCQUQ0OzExMDYgMTE2QSAxMUI3OworQkFENTtCQUQ1OzExMDYgMTE2QSAxMUI4O0JBRDU7MTEwNiAxMTZBIDExQjg7CitCQUQ2O0JBRDY7MTEwNiAxMTZBIDExQjk7QkFENjsxMTA2IDExNkEgMTFCOTsKK0JBRDc7QkFENzsxMTA2IDExNkEgMTFCQTtCQUQ3OzExMDYgMTE2QSAxMUJBOworQkFEODtCQUQ4OzExMDYgMTE2QSAxMUJCO0JBRDg7MTEwNiAxMTZBIDExQkI7CitCQUQ5O0JBRDk7MTEwNiAxMTZBIDExQkM7QkFEOTsxMTA2IDExNkEgMTFCQzsKK0JBREE7QkFEQTsxMTA2IDExNkEgMTFCRDtCQURBOzExMDYgMTE2QSAxMUJEOworQkFEQjtCQURCOzExMDYgMTE2QSAxMUJFO0JBREI7MTEwNiAxMTZBIDExQkU7CitCQURDO0JBREM7MTEwNiAxMTZBIDExQkY7QkFEQzsxMTA2IDExNkEgMTFCRjsKK0JBREQ7QkFERDsxMTA2IDExNkEgMTFDMDtCQUREOzExMDYgMTE2QSAxMUMwOworQkFERTtCQURFOzExMDYgMTE2QSAxMUMxO0JBREU7MTEwNiAxMTZBIDExQzE7CitCQURGO0JBREY7MTEwNiAxMTZBIDExQzI7QkFERjsxMTA2IDExNkEgMTFDMjsKK0JBRTA7QkFFMDsxMTA2IDExNkI7QkFFMDsxMTA2IDExNkI7CitCQUUxO0JBRTE7MTEwNiAxMTZCIDExQTg7QkFFMTsxMTA2IDExNkIgMTFBODsKK0JBRTI7QkFFMjsxMTA2IDExNkIgMTFBOTtCQUUyOzExMDYgMTE2QiAxMUE5OworQkFFMztCQUUzOzExMDYgMTE2QiAxMUFBO0JBRTM7MTEwNiAxMTZCIDExQUE7CitCQUU0O0JBRTQ7MTEwNiAxMTZCIDExQUI7QkFFNDsxMTA2IDExNkIgMTFBQjsKK0JBRTU7QkFFNTsxMTA2IDExNkIgMTFBQztCQUU1OzExMDYgMTE2QiAxMUFDOworQkFFNjtCQUU2OzExMDYgMTE2QiAxMUFEO0JBRTY7MTEwNiAxMTZCIDExQUQ7CitCQUU3O0JBRTc7MTEwNiAxMTZCIDExQUU7QkFFNzsxMTA2IDExNkIgMTFBRTsKK0JBRTg7QkFFODsxMTA2IDExNkIgMTFBRjtCQUU4OzExMDYgMTE2QiAxMUFGOworQkFFOTtCQUU5OzExMDYgMTE2QiAxMUIwO0JBRTk7MTEwNiAxMTZCIDExQjA7CitCQUVBO0JBRUE7MTEwNiAxMTZCIDExQjE7QkFFQTsxMTA2IDExNkIgMTFCMTsKK0JBRUI7QkFFQjsxMTA2IDExNkIgMTFCMjtCQUVCOzExMDYgMTE2QiAxMUIyOworQkFFQztCQUVDOzExMDYgMTE2QiAxMUIzO0JBRUM7MTEwNiAxMTZCIDExQjM7CitCQUVEO0JBRUQ7MTEwNiAxMTZCIDExQjQ7QkFFRDsxMTA2IDExNkIgMTFCNDsKK0JBRUU7QkFFRTsxMTA2IDExNkIgMTFCNTtCQUVFOzExMDYgMTE2QiAxMUI1OworQkFFRjtCQUVGOzExMDYgMTE2QiAxMUI2O0JBRUY7MTEwNiAxMTZCIDExQjY7CitCQUYwO0JBRjA7MTEwNiAxMTZCIDExQjc7QkFGMDsxMTA2IDExNkIgMTFCNzsKK0JBRjE7QkFGMTsxMTA2IDExNkIgMTFCODtCQUYxOzExMDYgMTE2QiAxMUI4OworQkFGMjtCQUYyOzExMDYgMTE2QiAxMUI5O0JBRjI7MTEwNiAxMTZCIDExQjk7CitCQUYzO0JBRjM7MTEwNiAxMTZCIDExQkE7QkFGMzsxMTA2IDExNkIgMTFCQTsKK0JBRjQ7QkFGNDsxMTA2IDExNkIgMTFCQjtCQUY0OzExMDYgMTE2QiAxMUJCOworQkFGNTtCQUY1OzExMDYgMTE2QiAxMUJDO0JBRjU7MTEwNiAxMTZCIDExQkM7CitCQUY2O0JBRjY7MTEwNiAxMTZCIDExQkQ7QkFGNjsxMTA2IDExNkIgMTFCRDsKK0JBRjc7QkFGNzsxMTA2IDExNkIgMTFCRTtCQUY3OzExMDYgMTE2QiAxMUJFOworQkFGODtCQUY4OzExMDYgMTE2QiAxMUJGO0JBRjg7MTEwNiAxMTZCIDExQkY7CitCQUY5O0JBRjk7MTEwNiAxMTZCIDExQzA7QkFGOTsxMTA2IDExNkIgMTFDMDsKK0JBRkE7QkFGQTsxMTA2IDExNkIgMTFDMTtCQUZBOzExMDYgMTE2QiAxMUMxOworQkFGQjtCQUZCOzExMDYgMTE2QiAxMUMyO0JBRkI7MTEwNiAxMTZCIDExQzI7CitCQUZDO0JBRkM7MTEwNiAxMTZDO0JBRkM7MTEwNiAxMTZDOworQkFGRDtCQUZEOzExMDYgMTE2QyAxMUE4O0JBRkQ7MTEwNiAxMTZDIDExQTg7CitCQUZFO0JBRkU7MTEwNiAxMTZDIDExQTk7QkFGRTsxMTA2IDExNkMgMTFBOTsKK0JBRkY7QkFGRjsxMTA2IDExNkMgMTFBQTtCQUZGOzExMDYgMTE2QyAxMUFBOworQkIwMDtCQjAwOzExMDYgMTE2QyAxMUFCO0JCMDA7MTEwNiAxMTZDIDExQUI7CitCQjAxO0JCMDE7MTEwNiAxMTZDIDExQUM7QkIwMTsxMTA2IDExNkMgMTFBQzsKK0JCMDI7QkIwMjsxMTA2IDExNkMgMTFBRDtCQjAyOzExMDYgMTE2QyAxMUFEOworQkIwMztCQjAzOzExMDYgMTE2QyAxMUFFO0JCMDM7MTEwNiAxMTZDIDExQUU7CitCQjA0O0JCMDQ7MTEwNiAxMTZDIDExQUY7QkIwNDsxMTA2IDExNkMgMTFBRjsKK0JCMDU7QkIwNTsxMTA2IDExNkMgMTFCMDtCQjA1OzExMDYgMTE2QyAxMUIwOworQkIwNjtCQjA2OzExMDYgMTE2QyAxMUIxO0JCMDY7MTEwNiAxMTZDIDExQjE7CitCQjA3O0JCMDc7MTEwNiAxMTZDIDExQjI7QkIwNzsxMTA2IDExNkMgMTFCMjsKK0JCMDg7QkIwODsxMTA2IDExNkMgMTFCMztCQjA4OzExMDYgMTE2QyAxMUIzOworQkIwOTtCQjA5OzExMDYgMTE2QyAxMUI0O0JCMDk7MTEwNiAxMTZDIDExQjQ7CitCQjBBO0JCMEE7MTEwNiAxMTZDIDExQjU7QkIwQTsxMTA2IDExNkMgMTFCNTsKK0JCMEI7QkIwQjsxMTA2IDExNkMgMTFCNjtCQjBCOzExMDYgMTE2QyAxMUI2OworQkIwQztCQjBDOzExMDYgMTE2QyAxMUI3O0JCMEM7MTEwNiAxMTZDIDExQjc7CitCQjBEO0JCMEQ7MTEwNiAxMTZDIDExQjg7QkIwRDsxMTA2IDExNkMgMTFCODsKK0JCMEU7QkIwRTsxMTA2IDExNkMgMTFCOTtCQjBFOzExMDYgMTE2QyAxMUI5OworQkIwRjtCQjBGOzExMDYgMTE2QyAxMUJBO0JCMEY7MTEwNiAxMTZDIDExQkE7CitCQjEwO0JCMTA7MTEwNiAxMTZDIDExQkI7QkIxMDsxMTA2IDExNkMgMTFCQjsKK0JCMTE7QkIxMTsxMTA2IDExNkMgMTFCQztCQjExOzExMDYgMTE2QyAxMUJDOworQkIxMjtCQjEyOzExMDYgMTE2QyAxMUJEO0JCMTI7MTEwNiAxMTZDIDExQkQ7CitCQjEzO0JCMTM7MTEwNiAxMTZDIDExQkU7QkIxMzsxMTA2IDExNkMgMTFCRTsKK0JCMTQ7QkIxNDsxMTA2IDExNkMgMTFCRjtCQjE0OzExMDYgMTE2QyAxMUJGOworQkIxNTtCQjE1OzExMDYgMTE2QyAxMUMwO0JCMTU7MTEwNiAxMTZDIDExQzA7CitCQjE2O0JCMTY7MTEwNiAxMTZDIDExQzE7QkIxNjsxMTA2IDExNkMgMTFDMTsKK0JCMTc7QkIxNzsxMTA2IDExNkMgMTFDMjtCQjE3OzExMDYgMTE2QyAxMUMyOworQkIxODtCQjE4OzExMDYgMTE2RDtCQjE4OzExMDYgMTE2RDsKK0JCMTk7QkIxOTsxMTA2IDExNkQgMTFBODtCQjE5OzExMDYgMTE2RCAxMUE4OworQkIxQTtCQjFBOzExMDYgMTE2RCAxMUE5O0JCMUE7MTEwNiAxMTZEIDExQTk7CitCQjFCO0JCMUI7MTEwNiAxMTZEIDExQUE7QkIxQjsxMTA2IDExNkQgMTFBQTsKK0JCMUM7QkIxQzsxMTA2IDExNkQgMTFBQjtCQjFDOzExMDYgMTE2RCAxMUFCOworQkIxRDtCQjFEOzExMDYgMTE2RCAxMUFDO0JCMUQ7MTEwNiAxMTZEIDExQUM7CitCQjFFO0JCMUU7MTEwNiAxMTZEIDExQUQ7QkIxRTsxMTA2IDExNkQgMTFBRDsKK0JCMUY7QkIxRjsxMTA2IDExNkQgMTFBRTtCQjFGOzExMDYgMTE2RCAxMUFFOworQkIyMDtCQjIwOzExMDYgMTE2RCAxMUFGO0JCMjA7MTEwNiAxMTZEIDExQUY7CitCQjIxO0JCMjE7MTEwNiAxMTZEIDExQjA7QkIyMTsxMTA2IDExNkQgMTFCMDsKK0JCMjI7QkIyMjsxMTA2IDExNkQgMTFCMTtCQjIyOzExMDYgMTE2RCAxMUIxOworQkIyMztCQjIzOzExMDYgMTE2RCAxMUIyO0JCMjM7MTEwNiAxMTZEIDExQjI7CitCQjI0O0JCMjQ7MTEwNiAxMTZEIDExQjM7QkIyNDsxMTA2IDExNkQgMTFCMzsKK0JCMjU7QkIyNTsxMTA2IDExNkQgMTFCNDtCQjI1OzExMDYgMTE2RCAxMUI0OworQkIyNjtCQjI2OzExMDYgMTE2RCAxMUI1O0JCMjY7MTEwNiAxMTZEIDExQjU7CitCQjI3O0JCMjc7MTEwNiAxMTZEIDExQjY7QkIyNzsxMTA2IDExNkQgMTFCNjsKK0JCMjg7QkIyODsxMTA2IDExNkQgMTFCNztCQjI4OzExMDYgMTE2RCAxMUI3OworQkIyOTtCQjI5OzExMDYgMTE2RCAxMUI4O0JCMjk7MTEwNiAxMTZEIDExQjg7CitCQjJBO0JCMkE7MTEwNiAxMTZEIDExQjk7QkIyQTsxMTA2IDExNkQgMTFCOTsKK0JCMkI7QkIyQjsxMTA2IDExNkQgMTFCQTtCQjJCOzExMDYgMTE2RCAxMUJBOworQkIyQztCQjJDOzExMDYgMTE2RCAxMUJCO0JCMkM7MTEwNiAxMTZEIDExQkI7CitCQjJEO0JCMkQ7MTEwNiAxMTZEIDExQkM7QkIyRDsxMTA2IDExNkQgMTFCQzsKK0JCMkU7QkIyRTsxMTA2IDExNkQgMTFCRDtCQjJFOzExMDYgMTE2RCAxMUJEOworQkIyRjtCQjJGOzExMDYgMTE2RCAxMUJFO0JCMkY7MTEwNiAxMTZEIDExQkU7CitCQjMwO0JCMzA7MTEwNiAxMTZEIDExQkY7QkIzMDsxMTA2IDExNkQgMTFCRjsKK0JCMzE7QkIzMTsxMTA2IDExNkQgMTFDMDtCQjMxOzExMDYgMTE2RCAxMUMwOworQkIzMjtCQjMyOzExMDYgMTE2RCAxMUMxO0JCMzI7MTEwNiAxMTZEIDExQzE7CitCQjMzO0JCMzM7MTEwNiAxMTZEIDExQzI7QkIzMzsxMTA2IDExNkQgMTFDMjsKK0JCMzQ7QkIzNDsxMTA2IDExNkU7QkIzNDsxMTA2IDExNkU7CitCQjM1O0JCMzU7MTEwNiAxMTZFIDExQTg7QkIzNTsxMTA2IDExNkUgMTFBODsKK0JCMzY7QkIzNjsxMTA2IDExNkUgMTFBOTtCQjM2OzExMDYgMTE2RSAxMUE5OworQkIzNztCQjM3OzExMDYgMTE2RSAxMUFBO0JCMzc7MTEwNiAxMTZFIDExQUE7CitCQjM4O0JCMzg7MTEwNiAxMTZFIDExQUI7QkIzODsxMTA2IDExNkUgMTFBQjsKK0JCMzk7QkIzOTsxMTA2IDExNkUgMTFBQztCQjM5OzExMDYgMTE2RSAxMUFDOworQkIzQTtCQjNBOzExMDYgMTE2RSAxMUFEO0JCM0E7MTEwNiAxMTZFIDExQUQ7CitCQjNCO0JCM0I7MTEwNiAxMTZFIDExQUU7QkIzQjsxMTA2IDExNkUgMTFBRTsKK0JCM0M7QkIzQzsxMTA2IDExNkUgMTFBRjtCQjNDOzExMDYgMTE2RSAxMUFGOworQkIzRDtCQjNEOzExMDYgMTE2RSAxMUIwO0JCM0Q7MTEwNiAxMTZFIDExQjA7CitCQjNFO0JCM0U7MTEwNiAxMTZFIDExQjE7QkIzRTsxMTA2IDExNkUgMTFCMTsKK0JCM0Y7QkIzRjsxMTA2IDExNkUgMTFCMjtCQjNGOzExMDYgMTE2RSAxMUIyOworQkI0MDtCQjQwOzExMDYgMTE2RSAxMUIzO0JCNDA7MTEwNiAxMTZFIDExQjM7CitCQjQxO0JCNDE7MTEwNiAxMTZFIDExQjQ7QkI0MTsxMTA2IDExNkUgMTFCNDsKK0JCNDI7QkI0MjsxMTA2IDExNkUgMTFCNTtCQjQyOzExMDYgMTE2RSAxMUI1OworQkI0MztCQjQzOzExMDYgMTE2RSAxMUI2O0JCNDM7MTEwNiAxMTZFIDExQjY7CitCQjQ0O0JCNDQ7MTEwNiAxMTZFIDExQjc7QkI0NDsxMTA2IDExNkUgMTFCNzsKK0JCNDU7QkI0NTsxMTA2IDExNkUgMTFCODtCQjQ1OzExMDYgMTE2RSAxMUI4OworQkI0NjtCQjQ2OzExMDYgMTE2RSAxMUI5O0JCNDY7MTEwNiAxMTZFIDExQjk7CitCQjQ3O0JCNDc7MTEwNiAxMTZFIDExQkE7QkI0NzsxMTA2IDExNkUgMTFCQTsKK0JCNDg7QkI0ODsxMTA2IDExNkUgMTFCQjtCQjQ4OzExMDYgMTE2RSAxMUJCOworQkI0OTtCQjQ5OzExMDYgMTE2RSAxMUJDO0JCNDk7MTEwNiAxMTZFIDExQkM7CitCQjRBO0JCNEE7MTEwNiAxMTZFIDExQkQ7QkI0QTsxMTA2IDExNkUgMTFCRDsKK0JCNEI7QkI0QjsxMTA2IDExNkUgMTFCRTtCQjRCOzExMDYgMTE2RSAxMUJFOworQkI0QztCQjRDOzExMDYgMTE2RSAxMUJGO0JCNEM7MTEwNiAxMTZFIDExQkY7CitCQjREO0JCNEQ7MTEwNiAxMTZFIDExQzA7QkI0RDsxMTA2IDExNkUgMTFDMDsKK0JCNEU7QkI0RTsxMTA2IDExNkUgMTFDMTtCQjRFOzExMDYgMTE2RSAxMUMxOworQkI0RjtCQjRGOzExMDYgMTE2RSAxMUMyO0JCNEY7MTEwNiAxMTZFIDExQzI7CitCQjUwO0JCNTA7MTEwNiAxMTZGO0JCNTA7MTEwNiAxMTZGOworQkI1MTtCQjUxOzExMDYgMTE2RiAxMUE4O0JCNTE7MTEwNiAxMTZGIDExQTg7CitCQjUyO0JCNTI7MTEwNiAxMTZGIDExQTk7QkI1MjsxMTA2IDExNkYgMTFBOTsKK0JCNTM7QkI1MzsxMTA2IDExNkYgMTFBQTtCQjUzOzExMDYgMTE2RiAxMUFBOworQkI1NDtCQjU0OzExMDYgMTE2RiAxMUFCO0JCNTQ7MTEwNiAxMTZGIDExQUI7CitCQjU1O0JCNTU7MTEwNiAxMTZGIDExQUM7QkI1NTsxMTA2IDExNkYgMTFBQzsKK0JCNTY7QkI1NjsxMTA2IDExNkYgMTFBRDtCQjU2OzExMDYgMTE2RiAxMUFEOworQkI1NztCQjU3OzExMDYgMTE2RiAxMUFFO0JCNTc7MTEwNiAxMTZGIDExQUU7CitCQjU4O0JCNTg7MTEwNiAxMTZGIDExQUY7QkI1ODsxMTA2IDExNkYgMTFBRjsKK0JCNTk7QkI1OTsxMTA2IDExNkYgMTFCMDtCQjU5OzExMDYgMTE2RiAxMUIwOworQkI1QTtCQjVBOzExMDYgMTE2RiAxMUIxO0JCNUE7MTEwNiAxMTZGIDExQjE7CitCQjVCO0JCNUI7MTEwNiAxMTZGIDExQjI7QkI1QjsxMTA2IDExNkYgMTFCMjsKK0JCNUM7QkI1QzsxMTA2IDExNkYgMTFCMztCQjVDOzExMDYgMTE2RiAxMUIzOworQkI1RDtCQjVEOzExMDYgMTE2RiAxMUI0O0JCNUQ7MTEwNiAxMTZGIDExQjQ7CitCQjVFO0JCNUU7MTEwNiAxMTZGIDExQjU7QkI1RTsxMTA2IDExNkYgMTFCNTsKK0JCNUY7QkI1RjsxMTA2IDExNkYgMTFCNjtCQjVGOzExMDYgMTE2RiAxMUI2OworQkI2MDtCQjYwOzExMDYgMTE2RiAxMUI3O0JCNjA7MTEwNiAxMTZGIDExQjc7CitCQjYxO0JCNjE7MTEwNiAxMTZGIDExQjg7QkI2MTsxMTA2IDExNkYgMTFCODsKK0JCNjI7QkI2MjsxMTA2IDExNkYgMTFCOTtCQjYyOzExMDYgMTE2RiAxMUI5OworQkI2MztCQjYzOzExMDYgMTE2RiAxMUJBO0JCNjM7MTEwNiAxMTZGIDExQkE7CitCQjY0O0JCNjQ7MTEwNiAxMTZGIDExQkI7QkI2NDsxMTA2IDExNkYgMTFCQjsKK0JCNjU7QkI2NTsxMTA2IDExNkYgMTFCQztCQjY1OzExMDYgMTE2RiAxMUJDOworQkI2NjtCQjY2OzExMDYgMTE2RiAxMUJEO0JCNjY7MTEwNiAxMTZGIDExQkQ7CitCQjY3O0JCNjc7MTEwNiAxMTZGIDExQkU7QkI2NzsxMTA2IDExNkYgMTFCRTsKK0JCNjg7QkI2ODsxMTA2IDExNkYgMTFCRjtCQjY4OzExMDYgMTE2RiAxMUJGOworQkI2OTtCQjY5OzExMDYgMTE2RiAxMUMwO0JCNjk7MTEwNiAxMTZGIDExQzA7CitCQjZBO0JCNkE7MTEwNiAxMTZGIDExQzE7QkI2QTsxMTA2IDExNkYgMTFDMTsKK0JCNkI7QkI2QjsxMTA2IDExNkYgMTFDMjtCQjZCOzExMDYgMTE2RiAxMUMyOworQkI2QztCQjZDOzExMDYgMTE3MDtCQjZDOzExMDYgMTE3MDsKK0JCNkQ7QkI2RDsxMTA2IDExNzAgMTFBODtCQjZEOzExMDYgMTE3MCAxMUE4OworQkI2RTtCQjZFOzExMDYgMTE3MCAxMUE5O0JCNkU7MTEwNiAxMTcwIDExQTk7CitCQjZGO0JCNkY7MTEwNiAxMTcwIDExQUE7QkI2RjsxMTA2IDExNzAgMTFBQTsKK0JCNzA7QkI3MDsxMTA2IDExNzAgMTFBQjtCQjcwOzExMDYgMTE3MCAxMUFCOworQkI3MTtCQjcxOzExMDYgMTE3MCAxMUFDO0JCNzE7MTEwNiAxMTcwIDExQUM7CitCQjcyO0JCNzI7MTEwNiAxMTcwIDExQUQ7QkI3MjsxMTA2IDExNzAgMTFBRDsKK0JCNzM7QkI3MzsxMTA2IDExNzAgMTFBRTtCQjczOzExMDYgMTE3MCAxMUFFOworQkI3NDtCQjc0OzExMDYgMTE3MCAxMUFGO0JCNzQ7MTEwNiAxMTcwIDExQUY7CitCQjc1O0JCNzU7MTEwNiAxMTcwIDExQjA7QkI3NTsxMTA2IDExNzAgMTFCMDsKK0JCNzY7QkI3NjsxMTA2IDExNzAgMTFCMTtCQjc2OzExMDYgMTE3MCAxMUIxOworQkI3NztCQjc3OzExMDYgMTE3MCAxMUIyO0JCNzc7MTEwNiAxMTcwIDExQjI7CitCQjc4O0JCNzg7MTEwNiAxMTcwIDExQjM7QkI3ODsxMTA2IDExNzAgMTFCMzsKK0JCNzk7QkI3OTsxMTA2IDExNzAgMTFCNDtCQjc5OzExMDYgMTE3MCAxMUI0OworQkI3QTtCQjdBOzExMDYgMTE3MCAxMUI1O0JCN0E7MTEwNiAxMTcwIDExQjU7CitCQjdCO0JCN0I7MTEwNiAxMTcwIDExQjY7QkI3QjsxMTA2IDExNzAgMTFCNjsKK0JCN0M7QkI3QzsxMTA2IDExNzAgMTFCNztCQjdDOzExMDYgMTE3MCAxMUI3OworQkI3RDtCQjdEOzExMDYgMTE3MCAxMUI4O0JCN0Q7MTEwNiAxMTcwIDExQjg7CitCQjdFO0JCN0U7MTEwNiAxMTcwIDExQjk7QkI3RTsxMTA2IDExNzAgMTFCOTsKK0JCN0Y7QkI3RjsxMTA2IDExNzAgMTFCQTtCQjdGOzExMDYgMTE3MCAxMUJBOworQkI4MDtCQjgwOzExMDYgMTE3MCAxMUJCO0JCODA7MTEwNiAxMTcwIDExQkI7CitCQjgxO0JCODE7MTEwNiAxMTcwIDExQkM7QkI4MTsxMTA2IDExNzAgMTFCQzsKK0JCODI7QkI4MjsxMTA2IDExNzAgMTFCRDtCQjgyOzExMDYgMTE3MCAxMUJEOworQkI4MztCQjgzOzExMDYgMTE3MCAxMUJFO0JCODM7MTEwNiAxMTcwIDExQkU7CitCQjg0O0JCODQ7MTEwNiAxMTcwIDExQkY7QkI4NDsxMTA2IDExNzAgMTFCRjsKK0JCODU7QkI4NTsxMTA2IDExNzAgMTFDMDtCQjg1OzExMDYgMTE3MCAxMUMwOworQkI4NjtCQjg2OzExMDYgMTE3MCAxMUMxO0JCODY7MTEwNiAxMTcwIDExQzE7CitCQjg3O0JCODc7MTEwNiAxMTcwIDExQzI7QkI4NzsxMTA2IDExNzAgMTFDMjsKK0JCODg7QkI4ODsxMTA2IDExNzE7QkI4ODsxMTA2IDExNzE7CitCQjg5O0JCODk7MTEwNiAxMTcxIDExQTg7QkI4OTsxMTA2IDExNzEgMTFBODsKK0JCOEE7QkI4QTsxMTA2IDExNzEgMTFBOTtCQjhBOzExMDYgMTE3MSAxMUE5OworQkI4QjtCQjhCOzExMDYgMTE3MSAxMUFBO0JCOEI7MTEwNiAxMTcxIDExQUE7CitCQjhDO0JCOEM7MTEwNiAxMTcxIDExQUI7QkI4QzsxMTA2IDExNzEgMTFBQjsKK0JCOEQ7QkI4RDsxMTA2IDExNzEgMTFBQztCQjhEOzExMDYgMTE3MSAxMUFDOworQkI4RTtCQjhFOzExMDYgMTE3MSAxMUFEO0JCOEU7MTEwNiAxMTcxIDExQUQ7CitCQjhGO0JCOEY7MTEwNiAxMTcxIDExQUU7QkI4RjsxMTA2IDExNzEgMTFBRTsKK0JCOTA7QkI5MDsxMTA2IDExNzEgMTFBRjtCQjkwOzExMDYgMTE3MSAxMUFGOworQkI5MTtCQjkxOzExMDYgMTE3MSAxMUIwO0JCOTE7MTEwNiAxMTcxIDExQjA7CitCQjkyO0JCOTI7MTEwNiAxMTcxIDExQjE7QkI5MjsxMTA2IDExNzEgMTFCMTsKK0JCOTM7QkI5MzsxMTA2IDExNzEgMTFCMjtCQjkzOzExMDYgMTE3MSAxMUIyOworQkI5NDtCQjk0OzExMDYgMTE3MSAxMUIzO0JCOTQ7MTEwNiAxMTcxIDExQjM7CitCQjk1O0JCOTU7MTEwNiAxMTcxIDExQjQ7QkI5NTsxMTA2IDExNzEgMTFCNDsKK0JCOTY7QkI5NjsxMTA2IDExNzEgMTFCNTtCQjk2OzExMDYgMTE3MSAxMUI1OworQkI5NztCQjk3OzExMDYgMTE3MSAxMUI2O0JCOTc7MTEwNiAxMTcxIDExQjY7CitCQjk4O0JCOTg7MTEwNiAxMTcxIDExQjc7QkI5ODsxMTA2IDExNzEgMTFCNzsKK0JCOTk7QkI5OTsxMTA2IDExNzEgMTFCODtCQjk5OzExMDYgMTE3MSAxMUI4OworQkI5QTtCQjlBOzExMDYgMTE3MSAxMUI5O0JCOUE7MTEwNiAxMTcxIDExQjk7CitCQjlCO0JCOUI7MTEwNiAxMTcxIDExQkE7QkI5QjsxMTA2IDExNzEgMTFCQTsKK0JCOUM7QkI5QzsxMTA2IDExNzEgMTFCQjtCQjlDOzExMDYgMTE3MSAxMUJCOworQkI5RDtCQjlEOzExMDYgMTE3MSAxMUJDO0JCOUQ7MTEwNiAxMTcxIDExQkM7CitCQjlFO0JCOUU7MTEwNiAxMTcxIDExQkQ7QkI5RTsxMTA2IDExNzEgMTFCRDsKK0JCOUY7QkI5RjsxMTA2IDExNzEgMTFCRTtCQjlGOzExMDYgMTE3MSAxMUJFOworQkJBMDtCQkEwOzExMDYgMTE3MSAxMUJGO0JCQTA7MTEwNiAxMTcxIDExQkY7CitCQkExO0JCQTE7MTEwNiAxMTcxIDExQzA7QkJBMTsxMTA2IDExNzEgMTFDMDsKK0JCQTI7QkJBMjsxMTA2IDExNzEgMTFDMTtCQkEyOzExMDYgMTE3MSAxMUMxOworQkJBMztCQkEzOzExMDYgMTE3MSAxMUMyO0JCQTM7MTEwNiAxMTcxIDExQzI7CitCQkE0O0JCQTQ7MTEwNiAxMTcyO0JCQTQ7MTEwNiAxMTcyOworQkJBNTtCQkE1OzExMDYgMTE3MiAxMUE4O0JCQTU7MTEwNiAxMTcyIDExQTg7CitCQkE2O0JCQTY7MTEwNiAxMTcyIDExQTk7QkJBNjsxMTA2IDExNzIgMTFBOTsKK0JCQTc7QkJBNzsxMTA2IDExNzIgMTFBQTtCQkE3OzExMDYgMTE3MiAxMUFBOworQkJBODtCQkE4OzExMDYgMTE3MiAxMUFCO0JCQTg7MTEwNiAxMTcyIDExQUI7CitCQkE5O0JCQTk7MTEwNiAxMTcyIDExQUM7QkJBOTsxMTA2IDExNzIgMTFBQzsKK0JCQUE7QkJBQTsxMTA2IDExNzIgMTFBRDtCQkFBOzExMDYgMTE3MiAxMUFEOworQkJBQjtCQkFCOzExMDYgMTE3MiAxMUFFO0JCQUI7MTEwNiAxMTcyIDExQUU7CitCQkFDO0JCQUM7MTEwNiAxMTcyIDExQUY7QkJBQzsxMTA2IDExNzIgMTFBRjsKK0JCQUQ7QkJBRDsxMTA2IDExNzIgMTFCMDtCQkFEOzExMDYgMTE3MiAxMUIwOworQkJBRTtCQkFFOzExMDYgMTE3MiAxMUIxO0JCQUU7MTEwNiAxMTcyIDExQjE7CitCQkFGO0JCQUY7MTEwNiAxMTcyIDExQjI7QkJBRjsxMTA2IDExNzIgMTFCMjsKK0JCQjA7QkJCMDsxMTA2IDExNzIgMTFCMztCQkIwOzExMDYgMTE3MiAxMUIzOworQkJCMTtCQkIxOzExMDYgMTE3MiAxMUI0O0JCQjE7MTEwNiAxMTcyIDExQjQ7CitCQkIyO0JCQjI7MTEwNiAxMTcyIDExQjU7QkJCMjsxMTA2IDExNzIgMTFCNTsKK0JCQjM7QkJCMzsxMTA2IDExNzIgMTFCNjtCQkIzOzExMDYgMTE3MiAxMUI2OworQkJCNDtCQkI0OzExMDYgMTE3MiAxMUI3O0JCQjQ7MTEwNiAxMTcyIDExQjc7CitCQkI1O0JCQjU7MTEwNiAxMTcyIDExQjg7QkJCNTsxMTA2IDExNzIgMTFCODsKK0JCQjY7QkJCNjsxMTA2IDExNzIgMTFCOTtCQkI2OzExMDYgMTE3MiAxMUI5OworQkJCNztCQkI3OzExMDYgMTE3MiAxMUJBO0JCQjc7MTEwNiAxMTcyIDExQkE7CitCQkI4O0JCQjg7MTEwNiAxMTcyIDExQkI7QkJCODsxMTA2IDExNzIgMTFCQjsKK0JCQjk7QkJCOTsxMTA2IDExNzIgMTFCQztCQkI5OzExMDYgMTE3MiAxMUJDOworQkJCQTtCQkJBOzExMDYgMTE3MiAxMUJEO0JCQkE7MTEwNiAxMTcyIDExQkQ7CitCQkJCO0JCQkI7MTEwNiAxMTcyIDExQkU7QkJCQjsxMTA2IDExNzIgMTFCRTsKK0JCQkM7QkJCQzsxMTA2IDExNzIgMTFCRjtCQkJDOzExMDYgMTE3MiAxMUJGOworQkJCRDtCQkJEOzExMDYgMTE3MiAxMUMwO0JCQkQ7MTEwNiAxMTcyIDExQzA7CitCQkJFO0JCQkU7MTEwNiAxMTcyIDExQzE7QkJCRTsxMTA2IDExNzIgMTFDMTsKK0JCQkY7QkJCRjsxMTA2IDExNzIgMTFDMjtCQkJGOzExMDYgMTE3MiAxMUMyOworQkJDMDtCQkMwOzExMDYgMTE3MztCQkMwOzExMDYgMTE3MzsKK0JCQzE7QkJDMTsxMTA2IDExNzMgMTFBODtCQkMxOzExMDYgMTE3MyAxMUE4OworQkJDMjtCQkMyOzExMDYgMTE3MyAxMUE5O0JCQzI7MTEwNiAxMTczIDExQTk7CitCQkMzO0JCQzM7MTEwNiAxMTczIDExQUE7QkJDMzsxMTA2IDExNzMgMTFBQTsKK0JCQzQ7QkJDNDsxMTA2IDExNzMgMTFBQjtCQkM0OzExMDYgMTE3MyAxMUFCOworQkJDNTtCQkM1OzExMDYgMTE3MyAxMUFDO0JCQzU7MTEwNiAxMTczIDExQUM7CitCQkM2O0JCQzY7MTEwNiAxMTczIDExQUQ7QkJDNjsxMTA2IDExNzMgMTFBRDsKK0JCQzc7QkJDNzsxMTA2IDExNzMgMTFBRTtCQkM3OzExMDYgMTE3MyAxMUFFOworQkJDODtCQkM4OzExMDYgMTE3MyAxMUFGO0JCQzg7MTEwNiAxMTczIDExQUY7CitCQkM5O0JCQzk7MTEwNiAxMTczIDExQjA7QkJDOTsxMTA2IDExNzMgMTFCMDsKK0JCQ0E7QkJDQTsxMTA2IDExNzMgMTFCMTtCQkNBOzExMDYgMTE3MyAxMUIxOworQkJDQjtCQkNCOzExMDYgMTE3MyAxMUIyO0JCQ0I7MTEwNiAxMTczIDExQjI7CitCQkNDO0JCQ0M7MTEwNiAxMTczIDExQjM7QkJDQzsxMTA2IDExNzMgMTFCMzsKK0JCQ0Q7QkJDRDsxMTA2IDExNzMgMTFCNDtCQkNEOzExMDYgMTE3MyAxMUI0OworQkJDRTtCQkNFOzExMDYgMTE3MyAxMUI1O0JCQ0U7MTEwNiAxMTczIDExQjU7CitCQkNGO0JCQ0Y7MTEwNiAxMTczIDExQjY7QkJDRjsxMTA2IDExNzMgMTFCNjsKK0JCRDA7QkJEMDsxMTA2IDExNzMgMTFCNztCQkQwOzExMDYgMTE3MyAxMUI3OworQkJEMTtCQkQxOzExMDYgMTE3MyAxMUI4O0JCRDE7MTEwNiAxMTczIDExQjg7CitCQkQyO0JCRDI7MTEwNiAxMTczIDExQjk7QkJEMjsxMTA2IDExNzMgMTFCOTsKK0JCRDM7QkJEMzsxMTA2IDExNzMgMTFCQTtCQkQzOzExMDYgMTE3MyAxMUJBOworQkJENDtCQkQ0OzExMDYgMTE3MyAxMUJCO0JCRDQ7MTEwNiAxMTczIDExQkI7CitCQkQ1O0JCRDU7MTEwNiAxMTczIDExQkM7QkJENTsxMTA2IDExNzMgMTFCQzsKK0JCRDY7QkJENjsxMTA2IDExNzMgMTFCRDtCQkQ2OzExMDYgMTE3MyAxMUJEOworQkJENztCQkQ3OzExMDYgMTE3MyAxMUJFO0JCRDc7MTEwNiAxMTczIDExQkU7CitCQkQ4O0JCRDg7MTEwNiAxMTczIDExQkY7QkJEODsxMTA2IDExNzMgMTFCRjsKK0JCRDk7QkJEOTsxMTA2IDExNzMgMTFDMDtCQkQ5OzExMDYgMTE3MyAxMUMwOworQkJEQTtCQkRBOzExMDYgMTE3MyAxMUMxO0JCREE7MTEwNiAxMTczIDExQzE7CitCQkRCO0JCREI7MTEwNiAxMTczIDExQzI7QkJEQjsxMTA2IDExNzMgMTFDMjsKK0JCREM7QkJEQzsxMTA2IDExNzQ7QkJEQzsxMTA2IDExNzQ7CitCQkREO0JCREQ7MTEwNiAxMTc0IDExQTg7QkJERDsxMTA2IDExNzQgMTFBODsKK0JCREU7QkJERTsxMTA2IDExNzQgMTFBOTtCQkRFOzExMDYgMTE3NCAxMUE5OworQkJERjtCQkRGOzExMDYgMTE3NCAxMUFBO0JCREY7MTEwNiAxMTc0IDExQUE7CitCQkUwO0JCRTA7MTEwNiAxMTc0IDExQUI7QkJFMDsxMTA2IDExNzQgMTFBQjsKK0JCRTE7QkJFMTsxMTA2IDExNzQgMTFBQztCQkUxOzExMDYgMTE3NCAxMUFDOworQkJFMjtCQkUyOzExMDYgMTE3NCAxMUFEO0JCRTI7MTEwNiAxMTc0IDExQUQ7CitCQkUzO0JCRTM7MTEwNiAxMTc0IDExQUU7QkJFMzsxMTA2IDExNzQgMTFBRTsKK0JCRTQ7QkJFNDsxMTA2IDExNzQgMTFBRjtCQkU0OzExMDYgMTE3NCAxMUFGOworQkJFNTtCQkU1OzExMDYgMTE3NCAxMUIwO0JCRTU7MTEwNiAxMTc0IDExQjA7CitCQkU2O0JCRTY7MTEwNiAxMTc0IDExQjE7QkJFNjsxMTA2IDExNzQgMTFCMTsKK0JCRTc7QkJFNzsxMTA2IDExNzQgMTFCMjtCQkU3OzExMDYgMTE3NCAxMUIyOworQkJFODtCQkU4OzExMDYgMTE3NCAxMUIzO0JCRTg7MTEwNiAxMTc0IDExQjM7CitCQkU5O0JCRTk7MTEwNiAxMTc0IDExQjQ7QkJFOTsxMTA2IDExNzQgMTFCNDsKK0JCRUE7QkJFQTsxMTA2IDExNzQgMTFCNTtCQkVBOzExMDYgMTE3NCAxMUI1OworQkJFQjtCQkVCOzExMDYgMTE3NCAxMUI2O0JCRUI7MTEwNiAxMTc0IDExQjY7CitCQkVDO0JCRUM7MTEwNiAxMTc0IDExQjc7QkJFQzsxMTA2IDExNzQgMTFCNzsKK0JCRUQ7QkJFRDsxMTA2IDExNzQgMTFCODtCQkVEOzExMDYgMTE3NCAxMUI4OworQkJFRTtCQkVFOzExMDYgMTE3NCAxMUI5O0JCRUU7MTEwNiAxMTc0IDExQjk7CitCQkVGO0JCRUY7MTEwNiAxMTc0IDExQkE7QkJFRjsxMTA2IDExNzQgMTFCQTsKK0JCRjA7QkJGMDsxMTA2IDExNzQgMTFCQjtCQkYwOzExMDYgMTE3NCAxMUJCOworQkJGMTtCQkYxOzExMDYgMTE3NCAxMUJDO0JCRjE7MTEwNiAxMTc0IDExQkM7CitCQkYyO0JCRjI7MTEwNiAxMTc0IDExQkQ7QkJGMjsxMTA2IDExNzQgMTFCRDsKK0JCRjM7QkJGMzsxMTA2IDExNzQgMTFCRTtCQkYzOzExMDYgMTE3NCAxMUJFOworQkJGNDtCQkY0OzExMDYgMTE3NCAxMUJGO0JCRjQ7MTEwNiAxMTc0IDExQkY7CitCQkY1O0JCRjU7MTEwNiAxMTc0IDExQzA7QkJGNTsxMTA2IDExNzQgMTFDMDsKK0JCRjY7QkJGNjsxMTA2IDExNzQgMTFDMTtCQkY2OzExMDYgMTE3NCAxMUMxOworQkJGNztCQkY3OzExMDYgMTE3NCAxMUMyO0JCRjc7MTEwNiAxMTc0IDExQzI7CitCQkY4O0JCRjg7MTEwNiAxMTc1O0JCRjg7MTEwNiAxMTc1OworQkJGOTtCQkY5OzExMDYgMTE3NSAxMUE4O0JCRjk7MTEwNiAxMTc1IDExQTg7CitCQkZBO0JCRkE7MTEwNiAxMTc1IDExQTk7QkJGQTsxMTA2IDExNzUgMTFBOTsKK0JCRkI7QkJGQjsxMTA2IDExNzUgMTFBQTtCQkZCOzExMDYgMTE3NSAxMUFBOworQkJGQztCQkZDOzExMDYgMTE3NSAxMUFCO0JCRkM7MTEwNiAxMTc1IDExQUI7CitCQkZEO0JCRkQ7MTEwNiAxMTc1IDExQUM7QkJGRDsxMTA2IDExNzUgMTFBQzsKK0JCRkU7QkJGRTsxMTA2IDExNzUgMTFBRDtCQkZFOzExMDYgMTE3NSAxMUFEOworQkJGRjtCQkZGOzExMDYgMTE3NSAxMUFFO0JCRkY7MTEwNiAxMTc1IDExQUU7CitCQzAwO0JDMDA7MTEwNiAxMTc1IDExQUY7QkMwMDsxMTA2IDExNzUgMTFBRjsKK0JDMDE7QkMwMTsxMTA2IDExNzUgMTFCMDtCQzAxOzExMDYgMTE3NSAxMUIwOworQkMwMjtCQzAyOzExMDYgMTE3NSAxMUIxO0JDMDI7MTEwNiAxMTc1IDExQjE7CitCQzAzO0JDMDM7MTEwNiAxMTc1IDExQjI7QkMwMzsxMTA2IDExNzUgMTFCMjsKK0JDMDQ7QkMwNDsxMTA2IDExNzUgMTFCMztCQzA0OzExMDYgMTE3NSAxMUIzOworQkMwNTtCQzA1OzExMDYgMTE3NSAxMUI0O0JDMDU7MTEwNiAxMTc1IDExQjQ7CitCQzA2O0JDMDY7MTEwNiAxMTc1IDExQjU7QkMwNjsxMTA2IDExNzUgMTFCNTsKK0JDMDc7QkMwNzsxMTA2IDExNzUgMTFCNjtCQzA3OzExMDYgMTE3NSAxMUI2OworQkMwODtCQzA4OzExMDYgMTE3NSAxMUI3O0JDMDg7MTEwNiAxMTc1IDExQjc7CitCQzA5O0JDMDk7MTEwNiAxMTc1IDExQjg7QkMwOTsxMTA2IDExNzUgMTFCODsKK0JDMEE7QkMwQTsxMTA2IDExNzUgMTFCOTtCQzBBOzExMDYgMTE3NSAxMUI5OworQkMwQjtCQzBCOzExMDYgMTE3NSAxMUJBO0JDMEI7MTEwNiAxMTc1IDExQkE7CitCQzBDO0JDMEM7MTEwNiAxMTc1IDExQkI7QkMwQzsxMTA2IDExNzUgMTFCQjsKK0JDMEQ7QkMwRDsxMTA2IDExNzUgMTFCQztCQzBEOzExMDYgMTE3NSAxMUJDOworQkMwRTtCQzBFOzExMDYgMTE3NSAxMUJEO0JDMEU7MTEwNiAxMTc1IDExQkQ7CitCQzBGO0JDMEY7MTEwNiAxMTc1IDExQkU7QkMwRjsxMTA2IDExNzUgMTFCRTsKK0JDMTA7QkMxMDsxMTA2IDExNzUgMTFCRjtCQzEwOzExMDYgMTE3NSAxMUJGOworQkMxMTtCQzExOzExMDYgMTE3NSAxMUMwO0JDMTE7MTEwNiAxMTc1IDExQzA7CitCQzEyO0JDMTI7MTEwNiAxMTc1IDExQzE7QkMxMjsxMTA2IDExNzUgMTFDMTsKK0JDMTM7QkMxMzsxMTA2IDExNzUgMTFDMjtCQzEzOzExMDYgMTE3NSAxMUMyOworQkMxNDtCQzE0OzExMDcgMTE2MTtCQzE0OzExMDcgMTE2MTsKK0JDMTU7QkMxNTsxMTA3IDExNjEgMTFBODtCQzE1OzExMDcgMTE2MSAxMUE4OworQkMxNjtCQzE2OzExMDcgMTE2MSAxMUE5O0JDMTY7MTEwNyAxMTYxIDExQTk7CitCQzE3O0JDMTc7MTEwNyAxMTYxIDExQUE7QkMxNzsxMTA3IDExNjEgMTFBQTsKK0JDMTg7QkMxODsxMTA3IDExNjEgMTFBQjtCQzE4OzExMDcgMTE2MSAxMUFCOworQkMxOTtCQzE5OzExMDcgMTE2MSAxMUFDO0JDMTk7MTEwNyAxMTYxIDExQUM7CitCQzFBO0JDMUE7MTEwNyAxMTYxIDExQUQ7QkMxQTsxMTA3IDExNjEgMTFBRDsKK0JDMUI7QkMxQjsxMTA3IDExNjEgMTFBRTtCQzFCOzExMDcgMTE2MSAxMUFFOworQkMxQztCQzFDOzExMDcgMTE2MSAxMUFGO0JDMUM7MTEwNyAxMTYxIDExQUY7CitCQzFEO0JDMUQ7MTEwNyAxMTYxIDExQjA7QkMxRDsxMTA3IDExNjEgMTFCMDsKK0JDMUU7QkMxRTsxMTA3IDExNjEgMTFCMTtCQzFFOzExMDcgMTE2MSAxMUIxOworQkMxRjtCQzFGOzExMDcgMTE2MSAxMUIyO0JDMUY7MTEwNyAxMTYxIDExQjI7CitCQzIwO0JDMjA7MTEwNyAxMTYxIDExQjM7QkMyMDsxMTA3IDExNjEgMTFCMzsKK0JDMjE7QkMyMTsxMTA3IDExNjEgMTFCNDtCQzIxOzExMDcgMTE2MSAxMUI0OworQkMyMjtCQzIyOzExMDcgMTE2MSAxMUI1O0JDMjI7MTEwNyAxMTYxIDExQjU7CitCQzIzO0JDMjM7MTEwNyAxMTYxIDExQjY7QkMyMzsxMTA3IDExNjEgMTFCNjsKK0JDMjQ7QkMyNDsxMTA3IDExNjEgMTFCNztCQzI0OzExMDcgMTE2MSAxMUI3OworQkMyNTtCQzI1OzExMDcgMTE2MSAxMUI4O0JDMjU7MTEwNyAxMTYxIDExQjg7CitCQzI2O0JDMjY7MTEwNyAxMTYxIDExQjk7QkMyNjsxMTA3IDExNjEgMTFCOTsKK0JDMjc7QkMyNzsxMTA3IDExNjEgMTFCQTtCQzI3OzExMDcgMTE2MSAxMUJBOworQkMyODtCQzI4OzExMDcgMTE2MSAxMUJCO0JDMjg7MTEwNyAxMTYxIDExQkI7CitCQzI5O0JDMjk7MTEwNyAxMTYxIDExQkM7QkMyOTsxMTA3IDExNjEgMTFCQzsKK0JDMkE7QkMyQTsxMTA3IDExNjEgMTFCRDtCQzJBOzExMDcgMTE2MSAxMUJEOworQkMyQjtCQzJCOzExMDcgMTE2MSAxMUJFO0JDMkI7MTEwNyAxMTYxIDExQkU7CitCQzJDO0JDMkM7MTEwNyAxMTYxIDExQkY7QkMyQzsxMTA3IDExNjEgMTFCRjsKK0JDMkQ7QkMyRDsxMTA3IDExNjEgMTFDMDtCQzJEOzExMDcgMTE2MSAxMUMwOworQkMyRTtCQzJFOzExMDcgMTE2MSAxMUMxO0JDMkU7MTEwNyAxMTYxIDExQzE7CitCQzJGO0JDMkY7MTEwNyAxMTYxIDExQzI7QkMyRjsxMTA3IDExNjEgMTFDMjsKK0JDMzA7QkMzMDsxMTA3IDExNjI7QkMzMDsxMTA3IDExNjI7CitCQzMxO0JDMzE7MTEwNyAxMTYyIDExQTg7QkMzMTsxMTA3IDExNjIgMTFBODsKK0JDMzI7QkMzMjsxMTA3IDExNjIgMTFBOTtCQzMyOzExMDcgMTE2MiAxMUE5OworQkMzMztCQzMzOzExMDcgMTE2MiAxMUFBO0JDMzM7MTEwNyAxMTYyIDExQUE7CitCQzM0O0JDMzQ7MTEwNyAxMTYyIDExQUI7QkMzNDsxMTA3IDExNjIgMTFBQjsKK0JDMzU7QkMzNTsxMTA3IDExNjIgMTFBQztCQzM1OzExMDcgMTE2MiAxMUFDOworQkMzNjtCQzM2OzExMDcgMTE2MiAxMUFEO0JDMzY7MTEwNyAxMTYyIDExQUQ7CitCQzM3O0JDMzc7MTEwNyAxMTYyIDExQUU7QkMzNzsxMTA3IDExNjIgMTFBRTsKK0JDMzg7QkMzODsxMTA3IDExNjIgMTFBRjtCQzM4OzExMDcgMTE2MiAxMUFGOworQkMzOTtCQzM5OzExMDcgMTE2MiAxMUIwO0JDMzk7MTEwNyAxMTYyIDExQjA7CitCQzNBO0JDM0E7MTEwNyAxMTYyIDExQjE7QkMzQTsxMTA3IDExNjIgMTFCMTsKK0JDM0I7QkMzQjsxMTA3IDExNjIgMTFCMjtCQzNCOzExMDcgMTE2MiAxMUIyOworQkMzQztCQzNDOzExMDcgMTE2MiAxMUIzO0JDM0M7MTEwNyAxMTYyIDExQjM7CitCQzNEO0JDM0Q7MTEwNyAxMTYyIDExQjQ7QkMzRDsxMTA3IDExNjIgMTFCNDsKK0JDM0U7QkMzRTsxMTA3IDExNjIgMTFCNTtCQzNFOzExMDcgMTE2MiAxMUI1OworQkMzRjtCQzNGOzExMDcgMTE2MiAxMUI2O0JDM0Y7MTEwNyAxMTYyIDExQjY7CitCQzQwO0JDNDA7MTEwNyAxMTYyIDExQjc7QkM0MDsxMTA3IDExNjIgMTFCNzsKK0JDNDE7QkM0MTsxMTA3IDExNjIgMTFCODtCQzQxOzExMDcgMTE2MiAxMUI4OworQkM0MjtCQzQyOzExMDcgMTE2MiAxMUI5O0JDNDI7MTEwNyAxMTYyIDExQjk7CitCQzQzO0JDNDM7MTEwNyAxMTYyIDExQkE7QkM0MzsxMTA3IDExNjIgMTFCQTsKK0JDNDQ7QkM0NDsxMTA3IDExNjIgMTFCQjtCQzQ0OzExMDcgMTE2MiAxMUJCOworQkM0NTtCQzQ1OzExMDcgMTE2MiAxMUJDO0JDNDU7MTEwNyAxMTYyIDExQkM7CitCQzQ2O0JDNDY7MTEwNyAxMTYyIDExQkQ7QkM0NjsxMTA3IDExNjIgMTFCRDsKK0JDNDc7QkM0NzsxMTA3IDExNjIgMTFCRTtCQzQ3OzExMDcgMTE2MiAxMUJFOworQkM0ODtCQzQ4OzExMDcgMTE2MiAxMUJGO0JDNDg7MTEwNyAxMTYyIDExQkY7CitCQzQ5O0JDNDk7MTEwNyAxMTYyIDExQzA7QkM0OTsxMTA3IDExNjIgMTFDMDsKK0JDNEE7QkM0QTsxMTA3IDExNjIgMTFDMTtCQzRBOzExMDcgMTE2MiAxMUMxOworQkM0QjtCQzRCOzExMDcgMTE2MiAxMUMyO0JDNEI7MTEwNyAxMTYyIDExQzI7CitCQzRDO0JDNEM7MTEwNyAxMTYzO0JDNEM7MTEwNyAxMTYzOworQkM0RDtCQzREOzExMDcgMTE2MyAxMUE4O0JDNEQ7MTEwNyAxMTYzIDExQTg7CitCQzRFO0JDNEU7MTEwNyAxMTYzIDExQTk7QkM0RTsxMTA3IDExNjMgMTFBOTsKK0JDNEY7QkM0RjsxMTA3IDExNjMgMTFBQTtCQzRGOzExMDcgMTE2MyAxMUFBOworQkM1MDtCQzUwOzExMDcgMTE2MyAxMUFCO0JDNTA7MTEwNyAxMTYzIDExQUI7CitCQzUxO0JDNTE7MTEwNyAxMTYzIDExQUM7QkM1MTsxMTA3IDExNjMgMTFBQzsKK0JDNTI7QkM1MjsxMTA3IDExNjMgMTFBRDtCQzUyOzExMDcgMTE2MyAxMUFEOworQkM1MztCQzUzOzExMDcgMTE2MyAxMUFFO0JDNTM7MTEwNyAxMTYzIDExQUU7CitCQzU0O0JDNTQ7MTEwNyAxMTYzIDExQUY7QkM1NDsxMTA3IDExNjMgMTFBRjsKK0JDNTU7QkM1NTsxMTA3IDExNjMgMTFCMDtCQzU1OzExMDcgMTE2MyAxMUIwOworQkM1NjtCQzU2OzExMDcgMTE2MyAxMUIxO0JDNTY7MTEwNyAxMTYzIDExQjE7CitCQzU3O0JDNTc7MTEwNyAxMTYzIDExQjI7QkM1NzsxMTA3IDExNjMgMTFCMjsKK0JDNTg7QkM1ODsxMTA3IDExNjMgMTFCMztCQzU4OzExMDcgMTE2MyAxMUIzOworQkM1OTtCQzU5OzExMDcgMTE2MyAxMUI0O0JDNTk7MTEwNyAxMTYzIDExQjQ7CitCQzVBO0JDNUE7MTEwNyAxMTYzIDExQjU7QkM1QTsxMTA3IDExNjMgMTFCNTsKK0JDNUI7QkM1QjsxMTA3IDExNjMgMTFCNjtCQzVCOzExMDcgMTE2MyAxMUI2OworQkM1QztCQzVDOzExMDcgMTE2MyAxMUI3O0JDNUM7MTEwNyAxMTYzIDExQjc7CitCQzVEO0JDNUQ7MTEwNyAxMTYzIDExQjg7QkM1RDsxMTA3IDExNjMgMTFCODsKK0JDNUU7QkM1RTsxMTA3IDExNjMgMTFCOTtCQzVFOzExMDcgMTE2MyAxMUI5OworQkM1RjtCQzVGOzExMDcgMTE2MyAxMUJBO0JDNUY7MTEwNyAxMTYzIDExQkE7CitCQzYwO0JDNjA7MTEwNyAxMTYzIDExQkI7QkM2MDsxMTA3IDExNjMgMTFCQjsKK0JDNjE7QkM2MTsxMTA3IDExNjMgMTFCQztCQzYxOzExMDcgMTE2MyAxMUJDOworQkM2MjtCQzYyOzExMDcgMTE2MyAxMUJEO0JDNjI7MTEwNyAxMTYzIDExQkQ7CitCQzYzO0JDNjM7MTEwNyAxMTYzIDExQkU7QkM2MzsxMTA3IDExNjMgMTFCRTsKK0JDNjQ7QkM2NDsxMTA3IDExNjMgMTFCRjtCQzY0OzExMDcgMTE2MyAxMUJGOworQkM2NTtCQzY1OzExMDcgMTE2MyAxMUMwO0JDNjU7MTEwNyAxMTYzIDExQzA7CitCQzY2O0JDNjY7MTEwNyAxMTYzIDExQzE7QkM2NjsxMTA3IDExNjMgMTFDMTsKK0JDNjc7QkM2NzsxMTA3IDExNjMgMTFDMjtCQzY3OzExMDcgMTE2MyAxMUMyOworQkM2ODtCQzY4OzExMDcgMTE2NDtCQzY4OzExMDcgMTE2NDsKK0JDNjk7QkM2OTsxMTA3IDExNjQgMTFBODtCQzY5OzExMDcgMTE2NCAxMUE4OworQkM2QTtCQzZBOzExMDcgMTE2NCAxMUE5O0JDNkE7MTEwNyAxMTY0IDExQTk7CitCQzZCO0JDNkI7MTEwNyAxMTY0IDExQUE7QkM2QjsxMTA3IDExNjQgMTFBQTsKK0JDNkM7QkM2QzsxMTA3IDExNjQgMTFBQjtCQzZDOzExMDcgMTE2NCAxMUFCOworQkM2RDtCQzZEOzExMDcgMTE2NCAxMUFDO0JDNkQ7MTEwNyAxMTY0IDExQUM7CitCQzZFO0JDNkU7MTEwNyAxMTY0IDExQUQ7QkM2RTsxMTA3IDExNjQgMTFBRDsKK0JDNkY7QkM2RjsxMTA3IDExNjQgMTFBRTtCQzZGOzExMDcgMTE2NCAxMUFFOworQkM3MDtCQzcwOzExMDcgMTE2NCAxMUFGO0JDNzA7MTEwNyAxMTY0IDExQUY7CitCQzcxO0JDNzE7MTEwNyAxMTY0IDExQjA7QkM3MTsxMTA3IDExNjQgMTFCMDsKK0JDNzI7QkM3MjsxMTA3IDExNjQgMTFCMTtCQzcyOzExMDcgMTE2NCAxMUIxOworQkM3MztCQzczOzExMDcgMTE2NCAxMUIyO0JDNzM7MTEwNyAxMTY0IDExQjI7CitCQzc0O0JDNzQ7MTEwNyAxMTY0IDExQjM7QkM3NDsxMTA3IDExNjQgMTFCMzsKK0JDNzU7QkM3NTsxMTA3IDExNjQgMTFCNDtCQzc1OzExMDcgMTE2NCAxMUI0OworQkM3NjtCQzc2OzExMDcgMTE2NCAxMUI1O0JDNzY7MTEwNyAxMTY0IDExQjU7CitCQzc3O0JDNzc7MTEwNyAxMTY0IDExQjY7QkM3NzsxMTA3IDExNjQgMTFCNjsKK0JDNzg7QkM3ODsxMTA3IDExNjQgMTFCNztCQzc4OzExMDcgMTE2NCAxMUI3OworQkM3OTtCQzc5OzExMDcgMTE2NCAxMUI4O0JDNzk7MTEwNyAxMTY0IDExQjg7CitCQzdBO0JDN0E7MTEwNyAxMTY0IDExQjk7QkM3QTsxMTA3IDExNjQgMTFCOTsKK0JDN0I7QkM3QjsxMTA3IDExNjQgMTFCQTtCQzdCOzExMDcgMTE2NCAxMUJBOworQkM3QztCQzdDOzExMDcgMTE2NCAxMUJCO0JDN0M7MTEwNyAxMTY0IDExQkI7CitCQzdEO0JDN0Q7MTEwNyAxMTY0IDExQkM7QkM3RDsxMTA3IDExNjQgMTFCQzsKK0JDN0U7QkM3RTsxMTA3IDExNjQgMTFCRDtCQzdFOzExMDcgMTE2NCAxMUJEOworQkM3RjtCQzdGOzExMDcgMTE2NCAxMUJFO0JDN0Y7MTEwNyAxMTY0IDExQkU7CitCQzgwO0JDODA7MTEwNyAxMTY0IDExQkY7QkM4MDsxMTA3IDExNjQgMTFCRjsKK0JDODE7QkM4MTsxMTA3IDExNjQgMTFDMDtCQzgxOzExMDcgMTE2NCAxMUMwOworQkM4MjtCQzgyOzExMDcgMTE2NCAxMUMxO0JDODI7MTEwNyAxMTY0IDExQzE7CitCQzgzO0JDODM7MTEwNyAxMTY0IDExQzI7QkM4MzsxMTA3IDExNjQgMTFDMjsKK0JDODQ7QkM4NDsxMTA3IDExNjU7QkM4NDsxMTA3IDExNjU7CitCQzg1O0JDODU7MTEwNyAxMTY1IDExQTg7QkM4NTsxMTA3IDExNjUgMTFBODsKK0JDODY7QkM4NjsxMTA3IDExNjUgMTFBOTtCQzg2OzExMDcgMTE2NSAxMUE5OworQkM4NztCQzg3OzExMDcgMTE2NSAxMUFBO0JDODc7MTEwNyAxMTY1IDExQUE7CitCQzg4O0JDODg7MTEwNyAxMTY1IDExQUI7QkM4ODsxMTA3IDExNjUgMTFBQjsKK0JDODk7QkM4OTsxMTA3IDExNjUgMTFBQztCQzg5OzExMDcgMTE2NSAxMUFDOworQkM4QTtCQzhBOzExMDcgMTE2NSAxMUFEO0JDOEE7MTEwNyAxMTY1IDExQUQ7CitCQzhCO0JDOEI7MTEwNyAxMTY1IDExQUU7QkM4QjsxMTA3IDExNjUgMTFBRTsKK0JDOEM7QkM4QzsxMTA3IDExNjUgMTFBRjtCQzhDOzExMDcgMTE2NSAxMUFGOworQkM4RDtCQzhEOzExMDcgMTE2NSAxMUIwO0JDOEQ7MTEwNyAxMTY1IDExQjA7CitCQzhFO0JDOEU7MTEwNyAxMTY1IDExQjE7QkM4RTsxMTA3IDExNjUgMTFCMTsKK0JDOEY7QkM4RjsxMTA3IDExNjUgMTFCMjtCQzhGOzExMDcgMTE2NSAxMUIyOworQkM5MDtCQzkwOzExMDcgMTE2NSAxMUIzO0JDOTA7MTEwNyAxMTY1IDExQjM7CitCQzkxO0JDOTE7MTEwNyAxMTY1IDExQjQ7QkM5MTsxMTA3IDExNjUgMTFCNDsKK0JDOTI7QkM5MjsxMTA3IDExNjUgMTFCNTtCQzkyOzExMDcgMTE2NSAxMUI1OworQkM5MztCQzkzOzExMDcgMTE2NSAxMUI2O0JDOTM7MTEwNyAxMTY1IDExQjY7CitCQzk0O0JDOTQ7MTEwNyAxMTY1IDExQjc7QkM5NDsxMTA3IDExNjUgMTFCNzsKK0JDOTU7QkM5NTsxMTA3IDExNjUgMTFCODtCQzk1OzExMDcgMTE2NSAxMUI4OworQkM5NjtCQzk2OzExMDcgMTE2NSAxMUI5O0JDOTY7MTEwNyAxMTY1IDExQjk7CitCQzk3O0JDOTc7MTEwNyAxMTY1IDExQkE7QkM5NzsxMTA3IDExNjUgMTFCQTsKK0JDOTg7QkM5ODsxMTA3IDExNjUgMTFCQjtCQzk4OzExMDcgMTE2NSAxMUJCOworQkM5OTtCQzk5OzExMDcgMTE2NSAxMUJDO0JDOTk7MTEwNyAxMTY1IDExQkM7CitCQzlBO0JDOUE7MTEwNyAxMTY1IDExQkQ7QkM5QTsxMTA3IDExNjUgMTFCRDsKK0JDOUI7QkM5QjsxMTA3IDExNjUgMTFCRTtCQzlCOzExMDcgMTE2NSAxMUJFOworQkM5QztCQzlDOzExMDcgMTE2NSAxMUJGO0JDOUM7MTEwNyAxMTY1IDExQkY7CitCQzlEO0JDOUQ7MTEwNyAxMTY1IDExQzA7QkM5RDsxMTA3IDExNjUgMTFDMDsKK0JDOUU7QkM5RTsxMTA3IDExNjUgMTFDMTtCQzlFOzExMDcgMTE2NSAxMUMxOworQkM5RjtCQzlGOzExMDcgMTE2NSAxMUMyO0JDOUY7MTEwNyAxMTY1IDExQzI7CitCQ0EwO0JDQTA7MTEwNyAxMTY2O0JDQTA7MTEwNyAxMTY2OworQkNBMTtCQ0ExOzExMDcgMTE2NiAxMUE4O0JDQTE7MTEwNyAxMTY2IDExQTg7CitCQ0EyO0JDQTI7MTEwNyAxMTY2IDExQTk7QkNBMjsxMTA3IDExNjYgMTFBOTsKK0JDQTM7QkNBMzsxMTA3IDExNjYgMTFBQTtCQ0EzOzExMDcgMTE2NiAxMUFBOworQkNBNDtCQ0E0OzExMDcgMTE2NiAxMUFCO0JDQTQ7MTEwNyAxMTY2IDExQUI7CitCQ0E1O0JDQTU7MTEwNyAxMTY2IDExQUM7QkNBNTsxMTA3IDExNjYgMTFBQzsKK0JDQTY7QkNBNjsxMTA3IDExNjYgMTFBRDtCQ0E2OzExMDcgMTE2NiAxMUFEOworQkNBNztCQ0E3OzExMDcgMTE2NiAxMUFFO0JDQTc7MTEwNyAxMTY2IDExQUU7CitCQ0E4O0JDQTg7MTEwNyAxMTY2IDExQUY7QkNBODsxMTA3IDExNjYgMTFBRjsKK0JDQTk7QkNBOTsxMTA3IDExNjYgMTFCMDtCQ0E5OzExMDcgMTE2NiAxMUIwOworQkNBQTtCQ0FBOzExMDcgMTE2NiAxMUIxO0JDQUE7MTEwNyAxMTY2IDExQjE7CitCQ0FCO0JDQUI7MTEwNyAxMTY2IDExQjI7QkNBQjsxMTA3IDExNjYgMTFCMjsKK0JDQUM7QkNBQzsxMTA3IDExNjYgMTFCMztCQ0FDOzExMDcgMTE2NiAxMUIzOworQkNBRDtCQ0FEOzExMDcgMTE2NiAxMUI0O0JDQUQ7MTEwNyAxMTY2IDExQjQ7CitCQ0FFO0JDQUU7MTEwNyAxMTY2IDExQjU7QkNBRTsxMTA3IDExNjYgMTFCNTsKK0JDQUY7QkNBRjsxMTA3IDExNjYgMTFCNjtCQ0FGOzExMDcgMTE2NiAxMUI2OworQkNCMDtCQ0IwOzExMDcgMTE2NiAxMUI3O0JDQjA7MTEwNyAxMTY2IDExQjc7CitCQ0IxO0JDQjE7MTEwNyAxMTY2IDExQjg7QkNCMTsxMTA3IDExNjYgMTFCODsKK0JDQjI7QkNCMjsxMTA3IDExNjYgMTFCOTtCQ0IyOzExMDcgMTE2NiAxMUI5OworQkNCMztCQ0IzOzExMDcgMTE2NiAxMUJBO0JDQjM7MTEwNyAxMTY2IDExQkE7CitCQ0I0O0JDQjQ7MTEwNyAxMTY2IDExQkI7QkNCNDsxMTA3IDExNjYgMTFCQjsKK0JDQjU7QkNCNTsxMTA3IDExNjYgMTFCQztCQ0I1OzExMDcgMTE2NiAxMUJDOworQkNCNjtCQ0I2OzExMDcgMTE2NiAxMUJEO0JDQjY7MTEwNyAxMTY2IDExQkQ7CitCQ0I3O0JDQjc7MTEwNyAxMTY2IDExQkU7QkNCNzsxMTA3IDExNjYgMTFCRTsKK0JDQjg7QkNCODsxMTA3IDExNjYgMTFCRjtCQ0I4OzExMDcgMTE2NiAxMUJGOworQkNCOTtCQ0I5OzExMDcgMTE2NiAxMUMwO0JDQjk7MTEwNyAxMTY2IDExQzA7CitCQ0JBO0JDQkE7MTEwNyAxMTY2IDExQzE7QkNCQTsxMTA3IDExNjYgMTFDMTsKK0JDQkI7QkNCQjsxMTA3IDExNjYgMTFDMjtCQ0JCOzExMDcgMTE2NiAxMUMyOworQkNCQztCQ0JDOzExMDcgMTE2NztCQ0JDOzExMDcgMTE2NzsKK0JDQkQ7QkNCRDsxMTA3IDExNjcgMTFBODtCQ0JEOzExMDcgMTE2NyAxMUE4OworQkNCRTtCQ0JFOzExMDcgMTE2NyAxMUE5O0JDQkU7MTEwNyAxMTY3IDExQTk7CitCQ0JGO0JDQkY7MTEwNyAxMTY3IDExQUE7QkNCRjsxMTA3IDExNjcgMTFBQTsKK0JDQzA7QkNDMDsxMTA3IDExNjcgMTFBQjtCQ0MwOzExMDcgMTE2NyAxMUFCOworQkNDMTtCQ0MxOzExMDcgMTE2NyAxMUFDO0JDQzE7MTEwNyAxMTY3IDExQUM7CitCQ0MyO0JDQzI7MTEwNyAxMTY3IDExQUQ7QkNDMjsxMTA3IDExNjcgMTFBRDsKK0JDQzM7QkNDMzsxMTA3IDExNjcgMTFBRTtCQ0MzOzExMDcgMTE2NyAxMUFFOworQkNDNDtCQ0M0OzExMDcgMTE2NyAxMUFGO0JDQzQ7MTEwNyAxMTY3IDExQUY7CitCQ0M1O0JDQzU7MTEwNyAxMTY3IDExQjA7QkNDNTsxMTA3IDExNjcgMTFCMDsKK0JDQzY7QkNDNjsxMTA3IDExNjcgMTFCMTtCQ0M2OzExMDcgMTE2NyAxMUIxOworQkNDNztCQ0M3OzExMDcgMTE2NyAxMUIyO0JDQzc7MTEwNyAxMTY3IDExQjI7CitCQ0M4O0JDQzg7MTEwNyAxMTY3IDExQjM7QkNDODsxMTA3IDExNjcgMTFCMzsKK0JDQzk7QkNDOTsxMTA3IDExNjcgMTFCNDtCQ0M5OzExMDcgMTE2NyAxMUI0OworQkNDQTtCQ0NBOzExMDcgMTE2NyAxMUI1O0JDQ0E7MTEwNyAxMTY3IDExQjU7CitCQ0NCO0JDQ0I7MTEwNyAxMTY3IDExQjY7QkNDQjsxMTA3IDExNjcgMTFCNjsKK0JDQ0M7QkNDQzsxMTA3IDExNjcgMTFCNztCQ0NDOzExMDcgMTE2NyAxMUI3OworQkNDRDtCQ0NEOzExMDcgMTE2NyAxMUI4O0JDQ0Q7MTEwNyAxMTY3IDExQjg7CitCQ0NFO0JDQ0U7MTEwNyAxMTY3IDExQjk7QkNDRTsxMTA3IDExNjcgMTFCOTsKK0JDQ0Y7QkNDRjsxMTA3IDExNjcgMTFCQTtCQ0NGOzExMDcgMTE2NyAxMUJBOworQkNEMDtCQ0QwOzExMDcgMTE2NyAxMUJCO0JDRDA7MTEwNyAxMTY3IDExQkI7CitCQ0QxO0JDRDE7MTEwNyAxMTY3IDExQkM7QkNEMTsxMTA3IDExNjcgMTFCQzsKK0JDRDI7QkNEMjsxMTA3IDExNjcgMTFCRDtCQ0QyOzExMDcgMTE2NyAxMUJEOworQkNEMztCQ0QzOzExMDcgMTE2NyAxMUJFO0JDRDM7MTEwNyAxMTY3IDExQkU7CitCQ0Q0O0JDRDQ7MTEwNyAxMTY3IDExQkY7QkNENDsxMTA3IDExNjcgMTFCRjsKK0JDRDU7QkNENTsxMTA3IDExNjcgMTFDMDtCQ0Q1OzExMDcgMTE2NyAxMUMwOworQkNENjtCQ0Q2OzExMDcgMTE2NyAxMUMxO0JDRDY7MTEwNyAxMTY3IDExQzE7CitCQ0Q3O0JDRDc7MTEwNyAxMTY3IDExQzI7QkNENzsxMTA3IDExNjcgMTFDMjsKK0JDRDg7QkNEODsxMTA3IDExNjg7QkNEODsxMTA3IDExNjg7CitCQ0Q5O0JDRDk7MTEwNyAxMTY4IDExQTg7QkNEOTsxMTA3IDExNjggMTFBODsKK0JDREE7QkNEQTsxMTA3IDExNjggMTFBOTtCQ0RBOzExMDcgMTE2OCAxMUE5OworQkNEQjtCQ0RCOzExMDcgMTE2OCAxMUFBO0JDREI7MTEwNyAxMTY4IDExQUE7CitCQ0RDO0JDREM7MTEwNyAxMTY4IDExQUI7QkNEQzsxMTA3IDExNjggMTFBQjsKK0JDREQ7QkNERDsxMTA3IDExNjggMTFBQztCQ0REOzExMDcgMTE2OCAxMUFDOworQkNERTtCQ0RFOzExMDcgMTE2OCAxMUFEO0JDREU7MTEwNyAxMTY4IDExQUQ7CitCQ0RGO0JDREY7MTEwNyAxMTY4IDExQUU7QkNERjsxMTA3IDExNjggMTFBRTsKK0JDRTA7QkNFMDsxMTA3IDExNjggMTFBRjtCQ0UwOzExMDcgMTE2OCAxMUFGOworQkNFMTtCQ0UxOzExMDcgMTE2OCAxMUIwO0JDRTE7MTEwNyAxMTY4IDExQjA7CitCQ0UyO0JDRTI7MTEwNyAxMTY4IDExQjE7QkNFMjsxMTA3IDExNjggMTFCMTsKK0JDRTM7QkNFMzsxMTA3IDExNjggMTFCMjtCQ0UzOzExMDcgMTE2OCAxMUIyOworQkNFNDtCQ0U0OzExMDcgMTE2OCAxMUIzO0JDRTQ7MTEwNyAxMTY4IDExQjM7CitCQ0U1O0JDRTU7MTEwNyAxMTY4IDExQjQ7QkNFNTsxMTA3IDExNjggMTFCNDsKK0JDRTY7QkNFNjsxMTA3IDExNjggMTFCNTtCQ0U2OzExMDcgMTE2OCAxMUI1OworQkNFNztCQ0U3OzExMDcgMTE2OCAxMUI2O0JDRTc7MTEwNyAxMTY4IDExQjY7CitCQ0U4O0JDRTg7MTEwNyAxMTY4IDExQjc7QkNFODsxMTA3IDExNjggMTFCNzsKK0JDRTk7QkNFOTsxMTA3IDExNjggMTFCODtCQ0U5OzExMDcgMTE2OCAxMUI4OworQkNFQTtCQ0VBOzExMDcgMTE2OCAxMUI5O0JDRUE7MTEwNyAxMTY4IDExQjk7CitCQ0VCO0JDRUI7MTEwNyAxMTY4IDExQkE7QkNFQjsxMTA3IDExNjggMTFCQTsKK0JDRUM7QkNFQzsxMTA3IDExNjggMTFCQjtCQ0VDOzExMDcgMTE2OCAxMUJCOworQkNFRDtCQ0VEOzExMDcgMTE2OCAxMUJDO0JDRUQ7MTEwNyAxMTY4IDExQkM7CitCQ0VFO0JDRUU7MTEwNyAxMTY4IDExQkQ7QkNFRTsxMTA3IDExNjggMTFCRDsKK0JDRUY7QkNFRjsxMTA3IDExNjggMTFCRTtCQ0VGOzExMDcgMTE2OCAxMUJFOworQkNGMDtCQ0YwOzExMDcgMTE2OCAxMUJGO0JDRjA7MTEwNyAxMTY4IDExQkY7CitCQ0YxO0JDRjE7MTEwNyAxMTY4IDExQzA7QkNGMTsxMTA3IDExNjggMTFDMDsKK0JDRjI7QkNGMjsxMTA3IDExNjggMTFDMTtCQ0YyOzExMDcgMTE2OCAxMUMxOworQkNGMztCQ0YzOzExMDcgMTE2OCAxMUMyO0JDRjM7MTEwNyAxMTY4IDExQzI7CitCQ0Y0O0JDRjQ7MTEwNyAxMTY5O0JDRjQ7MTEwNyAxMTY5OworQkNGNTtCQ0Y1OzExMDcgMTE2OSAxMUE4O0JDRjU7MTEwNyAxMTY5IDExQTg7CitCQ0Y2O0JDRjY7MTEwNyAxMTY5IDExQTk7QkNGNjsxMTA3IDExNjkgMTFBOTsKK0JDRjc7QkNGNzsxMTA3IDExNjkgMTFBQTtCQ0Y3OzExMDcgMTE2OSAxMUFBOworQkNGODtCQ0Y4OzExMDcgMTE2OSAxMUFCO0JDRjg7MTEwNyAxMTY5IDExQUI7CitCQ0Y5O0JDRjk7MTEwNyAxMTY5IDExQUM7QkNGOTsxMTA3IDExNjkgMTFBQzsKK0JDRkE7QkNGQTsxMTA3IDExNjkgMTFBRDtCQ0ZBOzExMDcgMTE2OSAxMUFEOworQkNGQjtCQ0ZCOzExMDcgMTE2OSAxMUFFO0JDRkI7MTEwNyAxMTY5IDExQUU7CitCQ0ZDO0JDRkM7MTEwNyAxMTY5IDExQUY7QkNGQzsxMTA3IDExNjkgMTFBRjsKK0JDRkQ7QkNGRDsxMTA3IDExNjkgMTFCMDtCQ0ZEOzExMDcgMTE2OSAxMUIwOworQkNGRTtCQ0ZFOzExMDcgMTE2OSAxMUIxO0JDRkU7MTEwNyAxMTY5IDExQjE7CitCQ0ZGO0JDRkY7MTEwNyAxMTY5IDExQjI7QkNGRjsxMTA3IDExNjkgMTFCMjsKK0JEMDA7QkQwMDsxMTA3IDExNjkgMTFCMztCRDAwOzExMDcgMTE2OSAxMUIzOworQkQwMTtCRDAxOzExMDcgMTE2OSAxMUI0O0JEMDE7MTEwNyAxMTY5IDExQjQ7CitCRDAyO0JEMDI7MTEwNyAxMTY5IDExQjU7QkQwMjsxMTA3IDExNjkgMTFCNTsKK0JEMDM7QkQwMzsxMTA3IDExNjkgMTFCNjtCRDAzOzExMDcgMTE2OSAxMUI2OworQkQwNDtCRDA0OzExMDcgMTE2OSAxMUI3O0JEMDQ7MTEwNyAxMTY5IDExQjc7CitCRDA1O0JEMDU7MTEwNyAxMTY5IDExQjg7QkQwNTsxMTA3IDExNjkgMTFCODsKK0JEMDY7QkQwNjsxMTA3IDExNjkgMTFCOTtCRDA2OzExMDcgMTE2OSAxMUI5OworQkQwNztCRDA3OzExMDcgMTE2OSAxMUJBO0JEMDc7MTEwNyAxMTY5IDExQkE7CitCRDA4O0JEMDg7MTEwNyAxMTY5IDExQkI7QkQwODsxMTA3IDExNjkgMTFCQjsKK0JEMDk7QkQwOTsxMTA3IDExNjkgMTFCQztCRDA5OzExMDcgMTE2OSAxMUJDOworQkQwQTtCRDBBOzExMDcgMTE2OSAxMUJEO0JEMEE7MTEwNyAxMTY5IDExQkQ7CitCRDBCO0JEMEI7MTEwNyAxMTY5IDExQkU7QkQwQjsxMTA3IDExNjkgMTFCRTsKK0JEMEM7QkQwQzsxMTA3IDExNjkgMTFCRjtCRDBDOzExMDcgMTE2OSAxMUJGOworQkQwRDtCRDBEOzExMDcgMTE2OSAxMUMwO0JEMEQ7MTEwNyAxMTY5IDExQzA7CitCRDBFO0JEMEU7MTEwNyAxMTY5IDExQzE7QkQwRTsxMTA3IDExNjkgMTFDMTsKK0JEMEY7QkQwRjsxMTA3IDExNjkgMTFDMjtCRDBGOzExMDcgMTE2OSAxMUMyOworQkQxMDtCRDEwOzExMDcgMTE2QTtCRDEwOzExMDcgMTE2QTsKK0JEMTE7QkQxMTsxMTA3IDExNkEgMTFBODtCRDExOzExMDcgMTE2QSAxMUE4OworQkQxMjtCRDEyOzExMDcgMTE2QSAxMUE5O0JEMTI7MTEwNyAxMTZBIDExQTk7CitCRDEzO0JEMTM7MTEwNyAxMTZBIDExQUE7QkQxMzsxMTA3IDExNkEgMTFBQTsKK0JEMTQ7QkQxNDsxMTA3IDExNkEgMTFBQjtCRDE0OzExMDcgMTE2QSAxMUFCOworQkQxNTtCRDE1OzExMDcgMTE2QSAxMUFDO0JEMTU7MTEwNyAxMTZBIDExQUM7CitCRDE2O0JEMTY7MTEwNyAxMTZBIDExQUQ7QkQxNjsxMTA3IDExNkEgMTFBRDsKK0JEMTc7QkQxNzsxMTA3IDExNkEgMTFBRTtCRDE3OzExMDcgMTE2QSAxMUFFOworQkQxODtCRDE4OzExMDcgMTE2QSAxMUFGO0JEMTg7MTEwNyAxMTZBIDExQUY7CitCRDE5O0JEMTk7MTEwNyAxMTZBIDExQjA7QkQxOTsxMTA3IDExNkEgMTFCMDsKK0JEMUE7QkQxQTsxMTA3IDExNkEgMTFCMTtCRDFBOzExMDcgMTE2QSAxMUIxOworQkQxQjtCRDFCOzExMDcgMTE2QSAxMUIyO0JEMUI7MTEwNyAxMTZBIDExQjI7CitCRDFDO0JEMUM7MTEwNyAxMTZBIDExQjM7QkQxQzsxMTA3IDExNkEgMTFCMzsKK0JEMUQ7QkQxRDsxMTA3IDExNkEgMTFCNDtCRDFEOzExMDcgMTE2QSAxMUI0OworQkQxRTtCRDFFOzExMDcgMTE2QSAxMUI1O0JEMUU7MTEwNyAxMTZBIDExQjU7CitCRDFGO0JEMUY7MTEwNyAxMTZBIDExQjY7QkQxRjsxMTA3IDExNkEgMTFCNjsKK0JEMjA7QkQyMDsxMTA3IDExNkEgMTFCNztCRDIwOzExMDcgMTE2QSAxMUI3OworQkQyMTtCRDIxOzExMDcgMTE2QSAxMUI4O0JEMjE7MTEwNyAxMTZBIDExQjg7CitCRDIyO0JEMjI7MTEwNyAxMTZBIDExQjk7QkQyMjsxMTA3IDExNkEgMTFCOTsKK0JEMjM7QkQyMzsxMTA3IDExNkEgMTFCQTtCRDIzOzExMDcgMTE2QSAxMUJBOworQkQyNDtCRDI0OzExMDcgMTE2QSAxMUJCO0JEMjQ7MTEwNyAxMTZBIDExQkI7CitCRDI1O0JEMjU7MTEwNyAxMTZBIDExQkM7QkQyNTsxMTA3IDExNkEgMTFCQzsKK0JEMjY7QkQyNjsxMTA3IDExNkEgMTFCRDtCRDI2OzExMDcgMTE2QSAxMUJEOworQkQyNztCRDI3OzExMDcgMTE2QSAxMUJFO0JEMjc7MTEwNyAxMTZBIDExQkU7CitCRDI4O0JEMjg7MTEwNyAxMTZBIDExQkY7QkQyODsxMTA3IDExNkEgMTFCRjsKK0JEMjk7QkQyOTsxMTA3IDExNkEgMTFDMDtCRDI5OzExMDcgMTE2QSAxMUMwOworQkQyQTtCRDJBOzExMDcgMTE2QSAxMUMxO0JEMkE7MTEwNyAxMTZBIDExQzE7CitCRDJCO0JEMkI7MTEwNyAxMTZBIDExQzI7QkQyQjsxMTA3IDExNkEgMTFDMjsKK0JEMkM7QkQyQzsxMTA3IDExNkI7QkQyQzsxMTA3IDExNkI7CitCRDJEO0JEMkQ7MTEwNyAxMTZCIDExQTg7QkQyRDsxMTA3IDExNkIgMTFBODsKK0JEMkU7QkQyRTsxMTA3IDExNkIgMTFBOTtCRDJFOzExMDcgMTE2QiAxMUE5OworQkQyRjtCRDJGOzExMDcgMTE2QiAxMUFBO0JEMkY7MTEwNyAxMTZCIDExQUE7CitCRDMwO0JEMzA7MTEwNyAxMTZCIDExQUI7QkQzMDsxMTA3IDExNkIgMTFBQjsKK0JEMzE7QkQzMTsxMTA3IDExNkIgMTFBQztCRDMxOzExMDcgMTE2QiAxMUFDOworQkQzMjtCRDMyOzExMDcgMTE2QiAxMUFEO0JEMzI7MTEwNyAxMTZCIDExQUQ7CitCRDMzO0JEMzM7MTEwNyAxMTZCIDExQUU7QkQzMzsxMTA3IDExNkIgMTFBRTsKK0JEMzQ7QkQzNDsxMTA3IDExNkIgMTFBRjtCRDM0OzExMDcgMTE2QiAxMUFGOworQkQzNTtCRDM1OzExMDcgMTE2QiAxMUIwO0JEMzU7MTEwNyAxMTZCIDExQjA7CitCRDM2O0JEMzY7MTEwNyAxMTZCIDExQjE7QkQzNjsxMTA3IDExNkIgMTFCMTsKK0JEMzc7QkQzNzsxMTA3IDExNkIgMTFCMjtCRDM3OzExMDcgMTE2QiAxMUIyOworQkQzODtCRDM4OzExMDcgMTE2QiAxMUIzO0JEMzg7MTEwNyAxMTZCIDExQjM7CitCRDM5O0JEMzk7MTEwNyAxMTZCIDExQjQ7QkQzOTsxMTA3IDExNkIgMTFCNDsKK0JEM0E7QkQzQTsxMTA3IDExNkIgMTFCNTtCRDNBOzExMDcgMTE2QiAxMUI1OworQkQzQjtCRDNCOzExMDcgMTE2QiAxMUI2O0JEM0I7MTEwNyAxMTZCIDExQjY7CitCRDNDO0JEM0M7MTEwNyAxMTZCIDExQjc7QkQzQzsxMTA3IDExNkIgMTFCNzsKK0JEM0Q7QkQzRDsxMTA3IDExNkIgMTFCODtCRDNEOzExMDcgMTE2QiAxMUI4OworQkQzRTtCRDNFOzExMDcgMTE2QiAxMUI5O0JEM0U7MTEwNyAxMTZCIDExQjk7CitCRDNGO0JEM0Y7MTEwNyAxMTZCIDExQkE7QkQzRjsxMTA3IDExNkIgMTFCQTsKK0JENDA7QkQ0MDsxMTA3IDExNkIgMTFCQjtCRDQwOzExMDcgMTE2QiAxMUJCOworQkQ0MTtCRDQxOzExMDcgMTE2QiAxMUJDO0JENDE7MTEwNyAxMTZCIDExQkM7CitCRDQyO0JENDI7MTEwNyAxMTZCIDExQkQ7QkQ0MjsxMTA3IDExNkIgMTFCRDsKK0JENDM7QkQ0MzsxMTA3IDExNkIgMTFCRTtCRDQzOzExMDcgMTE2QiAxMUJFOworQkQ0NDtCRDQ0OzExMDcgMTE2QiAxMUJGO0JENDQ7MTEwNyAxMTZCIDExQkY7CitCRDQ1O0JENDU7MTEwNyAxMTZCIDExQzA7QkQ0NTsxMTA3IDExNkIgMTFDMDsKK0JENDY7QkQ0NjsxMTA3IDExNkIgMTFDMTtCRDQ2OzExMDcgMTE2QiAxMUMxOworQkQ0NztCRDQ3OzExMDcgMTE2QiAxMUMyO0JENDc7MTEwNyAxMTZCIDExQzI7CitCRDQ4O0JENDg7MTEwNyAxMTZDO0JENDg7MTEwNyAxMTZDOworQkQ0OTtCRDQ5OzExMDcgMTE2QyAxMUE4O0JENDk7MTEwNyAxMTZDIDExQTg7CitCRDRBO0JENEE7MTEwNyAxMTZDIDExQTk7QkQ0QTsxMTA3IDExNkMgMTFBOTsKK0JENEI7QkQ0QjsxMTA3IDExNkMgMTFBQTtCRDRCOzExMDcgMTE2QyAxMUFBOworQkQ0QztCRDRDOzExMDcgMTE2QyAxMUFCO0JENEM7MTEwNyAxMTZDIDExQUI7CitCRDREO0JENEQ7MTEwNyAxMTZDIDExQUM7QkQ0RDsxMTA3IDExNkMgMTFBQzsKK0JENEU7QkQ0RTsxMTA3IDExNkMgMTFBRDtCRDRFOzExMDcgMTE2QyAxMUFEOworQkQ0RjtCRDRGOzExMDcgMTE2QyAxMUFFO0JENEY7MTEwNyAxMTZDIDExQUU7CitCRDUwO0JENTA7MTEwNyAxMTZDIDExQUY7QkQ1MDsxMTA3IDExNkMgMTFBRjsKK0JENTE7QkQ1MTsxMTA3IDExNkMgMTFCMDtCRDUxOzExMDcgMTE2QyAxMUIwOworQkQ1MjtCRDUyOzExMDcgMTE2QyAxMUIxO0JENTI7MTEwNyAxMTZDIDExQjE7CitCRDUzO0JENTM7MTEwNyAxMTZDIDExQjI7QkQ1MzsxMTA3IDExNkMgMTFCMjsKK0JENTQ7QkQ1NDsxMTA3IDExNkMgMTFCMztCRDU0OzExMDcgMTE2QyAxMUIzOworQkQ1NTtCRDU1OzExMDcgMTE2QyAxMUI0O0JENTU7MTEwNyAxMTZDIDExQjQ7CitCRDU2O0JENTY7MTEwNyAxMTZDIDExQjU7QkQ1NjsxMTA3IDExNkMgMTFCNTsKK0JENTc7QkQ1NzsxMTA3IDExNkMgMTFCNjtCRDU3OzExMDcgMTE2QyAxMUI2OworQkQ1ODtCRDU4OzExMDcgMTE2QyAxMUI3O0JENTg7MTEwNyAxMTZDIDExQjc7CitCRDU5O0JENTk7MTEwNyAxMTZDIDExQjg7QkQ1OTsxMTA3IDExNkMgMTFCODsKK0JENUE7QkQ1QTsxMTA3IDExNkMgMTFCOTtCRDVBOzExMDcgMTE2QyAxMUI5OworQkQ1QjtCRDVCOzExMDcgMTE2QyAxMUJBO0JENUI7MTEwNyAxMTZDIDExQkE7CitCRDVDO0JENUM7MTEwNyAxMTZDIDExQkI7QkQ1QzsxMTA3IDExNkMgMTFCQjsKK0JENUQ7QkQ1RDsxMTA3IDExNkMgMTFCQztCRDVEOzExMDcgMTE2QyAxMUJDOworQkQ1RTtCRDVFOzExMDcgMTE2QyAxMUJEO0JENUU7MTEwNyAxMTZDIDExQkQ7CitCRDVGO0JENUY7MTEwNyAxMTZDIDExQkU7QkQ1RjsxMTA3IDExNkMgMTFCRTsKK0JENjA7QkQ2MDsxMTA3IDExNkMgMTFCRjtCRDYwOzExMDcgMTE2QyAxMUJGOworQkQ2MTtCRDYxOzExMDcgMTE2QyAxMUMwO0JENjE7MTEwNyAxMTZDIDExQzA7CitCRDYyO0JENjI7MTEwNyAxMTZDIDExQzE7QkQ2MjsxMTA3IDExNkMgMTFDMTsKK0JENjM7QkQ2MzsxMTA3IDExNkMgMTFDMjtCRDYzOzExMDcgMTE2QyAxMUMyOworQkQ2NDtCRDY0OzExMDcgMTE2RDtCRDY0OzExMDcgMTE2RDsKK0JENjU7QkQ2NTsxMTA3IDExNkQgMTFBODtCRDY1OzExMDcgMTE2RCAxMUE4OworQkQ2NjtCRDY2OzExMDcgMTE2RCAxMUE5O0JENjY7MTEwNyAxMTZEIDExQTk7CitCRDY3O0JENjc7MTEwNyAxMTZEIDExQUE7QkQ2NzsxMTA3IDExNkQgMTFBQTsKK0JENjg7QkQ2ODsxMTA3IDExNkQgMTFBQjtCRDY4OzExMDcgMTE2RCAxMUFCOworQkQ2OTtCRDY5OzExMDcgMTE2RCAxMUFDO0JENjk7MTEwNyAxMTZEIDExQUM7CitCRDZBO0JENkE7MTEwNyAxMTZEIDExQUQ7QkQ2QTsxMTA3IDExNkQgMTFBRDsKK0JENkI7QkQ2QjsxMTA3IDExNkQgMTFBRTtCRDZCOzExMDcgMTE2RCAxMUFFOworQkQ2QztCRDZDOzExMDcgMTE2RCAxMUFGO0JENkM7MTEwNyAxMTZEIDExQUY7CitCRDZEO0JENkQ7MTEwNyAxMTZEIDExQjA7QkQ2RDsxMTA3IDExNkQgMTFCMDsKK0JENkU7QkQ2RTsxMTA3IDExNkQgMTFCMTtCRDZFOzExMDcgMTE2RCAxMUIxOworQkQ2RjtCRDZGOzExMDcgMTE2RCAxMUIyO0JENkY7MTEwNyAxMTZEIDExQjI7CitCRDcwO0JENzA7MTEwNyAxMTZEIDExQjM7QkQ3MDsxMTA3IDExNkQgMTFCMzsKK0JENzE7QkQ3MTsxMTA3IDExNkQgMTFCNDtCRDcxOzExMDcgMTE2RCAxMUI0OworQkQ3MjtCRDcyOzExMDcgMTE2RCAxMUI1O0JENzI7MTEwNyAxMTZEIDExQjU7CitCRDczO0JENzM7MTEwNyAxMTZEIDExQjY7QkQ3MzsxMTA3IDExNkQgMTFCNjsKK0JENzQ7QkQ3NDsxMTA3IDExNkQgMTFCNztCRDc0OzExMDcgMTE2RCAxMUI3OworQkQ3NTtCRDc1OzExMDcgMTE2RCAxMUI4O0JENzU7MTEwNyAxMTZEIDExQjg7CitCRDc2O0JENzY7MTEwNyAxMTZEIDExQjk7QkQ3NjsxMTA3IDExNkQgMTFCOTsKK0JENzc7QkQ3NzsxMTA3IDExNkQgMTFCQTtCRDc3OzExMDcgMTE2RCAxMUJBOworQkQ3ODtCRDc4OzExMDcgMTE2RCAxMUJCO0JENzg7MTEwNyAxMTZEIDExQkI7CitCRDc5O0JENzk7MTEwNyAxMTZEIDExQkM7QkQ3OTsxMTA3IDExNkQgMTFCQzsKK0JEN0E7QkQ3QTsxMTA3IDExNkQgMTFCRDtCRDdBOzExMDcgMTE2RCAxMUJEOworQkQ3QjtCRDdCOzExMDcgMTE2RCAxMUJFO0JEN0I7MTEwNyAxMTZEIDExQkU7CitCRDdDO0JEN0M7MTEwNyAxMTZEIDExQkY7QkQ3QzsxMTA3IDExNkQgMTFCRjsKK0JEN0Q7QkQ3RDsxMTA3IDExNkQgMTFDMDtCRDdEOzExMDcgMTE2RCAxMUMwOworQkQ3RTtCRDdFOzExMDcgMTE2RCAxMUMxO0JEN0U7MTEwNyAxMTZEIDExQzE7CitCRDdGO0JEN0Y7MTEwNyAxMTZEIDExQzI7QkQ3RjsxMTA3IDExNkQgMTFDMjsKK0JEODA7QkQ4MDsxMTA3IDExNkU7QkQ4MDsxMTA3IDExNkU7CitCRDgxO0JEODE7MTEwNyAxMTZFIDExQTg7QkQ4MTsxMTA3IDExNkUgMTFBODsKK0JEODI7QkQ4MjsxMTA3IDExNkUgMTFBOTtCRDgyOzExMDcgMTE2RSAxMUE5OworQkQ4MztCRDgzOzExMDcgMTE2RSAxMUFBO0JEODM7MTEwNyAxMTZFIDExQUE7CitCRDg0O0JEODQ7MTEwNyAxMTZFIDExQUI7QkQ4NDsxMTA3IDExNkUgMTFBQjsKK0JEODU7QkQ4NTsxMTA3IDExNkUgMTFBQztCRDg1OzExMDcgMTE2RSAxMUFDOworQkQ4NjtCRDg2OzExMDcgMTE2RSAxMUFEO0JEODY7MTEwNyAxMTZFIDExQUQ7CitCRDg3O0JEODc7MTEwNyAxMTZFIDExQUU7QkQ4NzsxMTA3IDExNkUgMTFBRTsKK0JEODg7QkQ4ODsxMTA3IDExNkUgMTFBRjtCRDg4OzExMDcgMTE2RSAxMUFGOworQkQ4OTtCRDg5OzExMDcgMTE2RSAxMUIwO0JEODk7MTEwNyAxMTZFIDExQjA7CitCRDhBO0JEOEE7MTEwNyAxMTZFIDExQjE7QkQ4QTsxMTA3IDExNkUgMTFCMTsKK0JEOEI7QkQ4QjsxMTA3IDExNkUgMTFCMjtCRDhCOzExMDcgMTE2RSAxMUIyOworQkQ4QztCRDhDOzExMDcgMTE2RSAxMUIzO0JEOEM7MTEwNyAxMTZFIDExQjM7CitCRDhEO0JEOEQ7MTEwNyAxMTZFIDExQjQ7QkQ4RDsxMTA3IDExNkUgMTFCNDsKK0JEOEU7QkQ4RTsxMTA3IDExNkUgMTFCNTtCRDhFOzExMDcgMTE2RSAxMUI1OworQkQ4RjtCRDhGOzExMDcgMTE2RSAxMUI2O0JEOEY7MTEwNyAxMTZFIDExQjY7CitCRDkwO0JEOTA7MTEwNyAxMTZFIDExQjc7QkQ5MDsxMTA3IDExNkUgMTFCNzsKK0JEOTE7QkQ5MTsxMTA3IDExNkUgMTFCODtCRDkxOzExMDcgMTE2RSAxMUI4OworQkQ5MjtCRDkyOzExMDcgMTE2RSAxMUI5O0JEOTI7MTEwNyAxMTZFIDExQjk7CitCRDkzO0JEOTM7MTEwNyAxMTZFIDExQkE7QkQ5MzsxMTA3IDExNkUgMTFCQTsKK0JEOTQ7QkQ5NDsxMTA3IDExNkUgMTFCQjtCRDk0OzExMDcgMTE2RSAxMUJCOworQkQ5NTtCRDk1OzExMDcgMTE2RSAxMUJDO0JEOTU7MTEwNyAxMTZFIDExQkM7CitCRDk2O0JEOTY7MTEwNyAxMTZFIDExQkQ7QkQ5NjsxMTA3IDExNkUgMTFCRDsKK0JEOTc7QkQ5NzsxMTA3IDExNkUgMTFCRTtCRDk3OzExMDcgMTE2RSAxMUJFOworQkQ5ODtCRDk4OzExMDcgMTE2RSAxMUJGO0JEOTg7MTEwNyAxMTZFIDExQkY7CitCRDk5O0JEOTk7MTEwNyAxMTZFIDExQzA7QkQ5OTsxMTA3IDExNkUgMTFDMDsKK0JEOUE7QkQ5QTsxMTA3IDExNkUgMTFDMTtCRDlBOzExMDcgMTE2RSAxMUMxOworQkQ5QjtCRDlCOzExMDcgMTE2RSAxMUMyO0JEOUI7MTEwNyAxMTZFIDExQzI7CitCRDlDO0JEOUM7MTEwNyAxMTZGO0JEOUM7MTEwNyAxMTZGOworQkQ5RDtCRDlEOzExMDcgMTE2RiAxMUE4O0JEOUQ7MTEwNyAxMTZGIDExQTg7CitCRDlFO0JEOUU7MTEwNyAxMTZGIDExQTk7QkQ5RTsxMTA3IDExNkYgMTFBOTsKK0JEOUY7QkQ5RjsxMTA3IDExNkYgMTFBQTtCRDlGOzExMDcgMTE2RiAxMUFBOworQkRBMDtCREEwOzExMDcgMTE2RiAxMUFCO0JEQTA7MTEwNyAxMTZGIDExQUI7CitCREExO0JEQTE7MTEwNyAxMTZGIDExQUM7QkRBMTsxMTA3IDExNkYgMTFBQzsKK0JEQTI7QkRBMjsxMTA3IDExNkYgMTFBRDtCREEyOzExMDcgMTE2RiAxMUFEOworQkRBMztCREEzOzExMDcgMTE2RiAxMUFFO0JEQTM7MTEwNyAxMTZGIDExQUU7CitCREE0O0JEQTQ7MTEwNyAxMTZGIDExQUY7QkRBNDsxMTA3IDExNkYgMTFBRjsKK0JEQTU7QkRBNTsxMTA3IDExNkYgMTFCMDtCREE1OzExMDcgMTE2RiAxMUIwOworQkRBNjtCREE2OzExMDcgMTE2RiAxMUIxO0JEQTY7MTEwNyAxMTZGIDExQjE7CitCREE3O0JEQTc7MTEwNyAxMTZGIDExQjI7QkRBNzsxMTA3IDExNkYgMTFCMjsKK0JEQTg7QkRBODsxMTA3IDExNkYgMTFCMztCREE4OzExMDcgMTE2RiAxMUIzOworQkRBOTtCREE5OzExMDcgMTE2RiAxMUI0O0JEQTk7MTEwNyAxMTZGIDExQjQ7CitCREFBO0JEQUE7MTEwNyAxMTZGIDExQjU7QkRBQTsxMTA3IDExNkYgMTFCNTsKK0JEQUI7QkRBQjsxMTA3IDExNkYgMTFCNjtCREFCOzExMDcgMTE2RiAxMUI2OworQkRBQztCREFDOzExMDcgMTE2RiAxMUI3O0JEQUM7MTEwNyAxMTZGIDExQjc7CitCREFEO0JEQUQ7MTEwNyAxMTZGIDExQjg7QkRBRDsxMTA3IDExNkYgMTFCODsKK0JEQUU7QkRBRTsxMTA3IDExNkYgMTFCOTtCREFFOzExMDcgMTE2RiAxMUI5OworQkRBRjtCREFGOzExMDcgMTE2RiAxMUJBO0JEQUY7MTEwNyAxMTZGIDExQkE7CitCREIwO0JEQjA7MTEwNyAxMTZGIDExQkI7QkRCMDsxMTA3IDExNkYgMTFCQjsKK0JEQjE7QkRCMTsxMTA3IDExNkYgMTFCQztCREIxOzExMDcgMTE2RiAxMUJDOworQkRCMjtCREIyOzExMDcgMTE2RiAxMUJEO0JEQjI7MTEwNyAxMTZGIDExQkQ7CitCREIzO0JEQjM7MTEwNyAxMTZGIDExQkU7QkRCMzsxMTA3IDExNkYgMTFCRTsKK0JEQjQ7QkRCNDsxMTA3IDExNkYgMTFCRjtCREI0OzExMDcgMTE2RiAxMUJGOworQkRCNTtCREI1OzExMDcgMTE2RiAxMUMwO0JEQjU7MTEwNyAxMTZGIDExQzA7CitCREI2O0JEQjY7MTEwNyAxMTZGIDExQzE7QkRCNjsxMTA3IDExNkYgMTFDMTsKK0JEQjc7QkRCNzsxMTA3IDExNkYgMTFDMjtCREI3OzExMDcgMTE2RiAxMUMyOworQkRCODtCREI4OzExMDcgMTE3MDtCREI4OzExMDcgMTE3MDsKK0JEQjk7QkRCOTsxMTA3IDExNzAgMTFBODtCREI5OzExMDcgMTE3MCAxMUE4OworQkRCQTtCREJBOzExMDcgMTE3MCAxMUE5O0JEQkE7MTEwNyAxMTcwIDExQTk7CitCREJCO0JEQkI7MTEwNyAxMTcwIDExQUE7QkRCQjsxMTA3IDExNzAgMTFBQTsKK0JEQkM7QkRCQzsxMTA3IDExNzAgMTFBQjtCREJDOzExMDcgMTE3MCAxMUFCOworQkRCRDtCREJEOzExMDcgMTE3MCAxMUFDO0JEQkQ7MTEwNyAxMTcwIDExQUM7CitCREJFO0JEQkU7MTEwNyAxMTcwIDExQUQ7QkRCRTsxMTA3IDExNzAgMTFBRDsKK0JEQkY7QkRCRjsxMTA3IDExNzAgMTFBRTtCREJGOzExMDcgMTE3MCAxMUFFOworQkRDMDtCREMwOzExMDcgMTE3MCAxMUFGO0JEQzA7MTEwNyAxMTcwIDExQUY7CitCREMxO0JEQzE7MTEwNyAxMTcwIDExQjA7QkRDMTsxMTA3IDExNzAgMTFCMDsKK0JEQzI7QkRDMjsxMTA3IDExNzAgMTFCMTtCREMyOzExMDcgMTE3MCAxMUIxOworQkRDMztCREMzOzExMDcgMTE3MCAxMUIyO0JEQzM7MTEwNyAxMTcwIDExQjI7CitCREM0O0JEQzQ7MTEwNyAxMTcwIDExQjM7QkRDNDsxMTA3IDExNzAgMTFCMzsKK0JEQzU7QkRDNTsxMTA3IDExNzAgMTFCNDtCREM1OzExMDcgMTE3MCAxMUI0OworQkRDNjtCREM2OzExMDcgMTE3MCAxMUI1O0JEQzY7MTEwNyAxMTcwIDExQjU7CitCREM3O0JEQzc7MTEwNyAxMTcwIDExQjY7QkRDNzsxMTA3IDExNzAgMTFCNjsKK0JEQzg7QkRDODsxMTA3IDExNzAgMTFCNztCREM4OzExMDcgMTE3MCAxMUI3OworQkRDOTtCREM5OzExMDcgMTE3MCAxMUI4O0JEQzk7MTEwNyAxMTcwIDExQjg7CitCRENBO0JEQ0E7MTEwNyAxMTcwIDExQjk7QkRDQTsxMTA3IDExNzAgMTFCOTsKK0JEQ0I7QkRDQjsxMTA3IDExNzAgMTFCQTtCRENCOzExMDcgMTE3MCAxMUJBOworQkRDQztCRENDOzExMDcgMTE3MCAxMUJCO0JEQ0M7MTEwNyAxMTcwIDExQkI7CitCRENEO0JEQ0Q7MTEwNyAxMTcwIDExQkM7QkRDRDsxMTA3IDExNzAgMTFCQzsKK0JEQ0U7QkRDRTsxMTA3IDExNzAgMTFCRDtCRENFOzExMDcgMTE3MCAxMUJEOworQkRDRjtCRENGOzExMDcgMTE3MCAxMUJFO0JEQ0Y7MTEwNyAxMTcwIDExQkU7CitCREQwO0JERDA7MTEwNyAxMTcwIDExQkY7QkREMDsxMTA3IDExNzAgMTFCRjsKK0JERDE7QkREMTsxMTA3IDExNzAgMTFDMDtCREQxOzExMDcgMTE3MCAxMUMwOworQkREMjtCREQyOzExMDcgMTE3MCAxMUMxO0JERDI7MTEwNyAxMTcwIDExQzE7CitCREQzO0JERDM7MTEwNyAxMTcwIDExQzI7QkREMzsxMTA3IDExNzAgMTFDMjsKK0JERDQ7QkRENDsxMTA3IDExNzE7QkRENDsxMTA3IDExNzE7CitCREQ1O0JERDU7MTEwNyAxMTcxIDExQTg7QkRENTsxMTA3IDExNzEgMTFBODsKK0JERDY7QkRENjsxMTA3IDExNzEgMTFBOTtCREQ2OzExMDcgMTE3MSAxMUE5OworQkRENztCREQ3OzExMDcgMTE3MSAxMUFBO0JERDc7MTEwNyAxMTcxIDExQUE7CitCREQ4O0JERDg7MTEwNyAxMTcxIDExQUI7QkREODsxMTA3IDExNzEgMTFBQjsKK0JERDk7QkREOTsxMTA3IDExNzEgMTFBQztCREQ5OzExMDcgMTE3MSAxMUFDOworQkREQTtCRERBOzExMDcgMTE3MSAxMUFEO0JEREE7MTEwNyAxMTcxIDExQUQ7CitCRERCO0JEREI7MTEwNyAxMTcxIDExQUU7QkREQjsxMTA3IDExNzEgMTFBRTsKK0JEREM7QkREQzsxMTA3IDExNzEgMTFBRjtCRERDOzExMDcgMTE3MSAxMUFGOworQkRERDtCREREOzExMDcgMTE3MSAxMUIwO0JEREQ7MTEwNyAxMTcxIDExQjA7CitCRERFO0JEREU7MTEwNyAxMTcxIDExQjE7QkRERTsxMTA3IDExNzEgMTFCMTsKK0JEREY7QkRERjsxMTA3IDExNzEgMTFCMjtCRERGOzExMDcgMTE3MSAxMUIyOworQkRFMDtCREUwOzExMDcgMTE3MSAxMUIzO0JERTA7MTEwNyAxMTcxIDExQjM7CitCREUxO0JERTE7MTEwNyAxMTcxIDExQjQ7QkRFMTsxMTA3IDExNzEgMTFCNDsKK0JERTI7QkRFMjsxMTA3IDExNzEgMTFCNTtCREUyOzExMDcgMTE3MSAxMUI1OworQkRFMztCREUzOzExMDcgMTE3MSAxMUI2O0JERTM7MTEwNyAxMTcxIDExQjY7CitCREU0O0JERTQ7MTEwNyAxMTcxIDExQjc7QkRFNDsxMTA3IDExNzEgMTFCNzsKK0JERTU7QkRFNTsxMTA3IDExNzEgMTFCODtCREU1OzExMDcgMTE3MSAxMUI4OworQkRFNjtCREU2OzExMDcgMTE3MSAxMUI5O0JERTY7MTEwNyAxMTcxIDExQjk7CitCREU3O0JERTc7MTEwNyAxMTcxIDExQkE7QkRFNzsxMTA3IDExNzEgMTFCQTsKK0JERTg7QkRFODsxMTA3IDExNzEgMTFCQjtCREU4OzExMDcgMTE3MSAxMUJCOworQkRFOTtCREU5OzExMDcgMTE3MSAxMUJDO0JERTk7MTEwNyAxMTcxIDExQkM7CitCREVBO0JERUE7MTEwNyAxMTcxIDExQkQ7QkRFQTsxMTA3IDExNzEgMTFCRDsKK0JERUI7QkRFQjsxMTA3IDExNzEgMTFCRTtCREVCOzExMDcgMTE3MSAxMUJFOworQkRFQztCREVDOzExMDcgMTE3MSAxMUJGO0JERUM7MTEwNyAxMTcxIDExQkY7CitCREVEO0JERUQ7MTEwNyAxMTcxIDExQzA7QkRFRDsxMTA3IDExNzEgMTFDMDsKK0JERUU7QkRFRTsxMTA3IDExNzEgMTFDMTtCREVFOzExMDcgMTE3MSAxMUMxOworQkRFRjtCREVGOzExMDcgMTE3MSAxMUMyO0JERUY7MTEwNyAxMTcxIDExQzI7CitCREYwO0JERjA7MTEwNyAxMTcyO0JERjA7MTEwNyAxMTcyOworQkRGMTtCREYxOzExMDcgMTE3MiAxMUE4O0JERjE7MTEwNyAxMTcyIDExQTg7CitCREYyO0JERjI7MTEwNyAxMTcyIDExQTk7QkRGMjsxMTA3IDExNzIgMTFBOTsKK0JERjM7QkRGMzsxMTA3IDExNzIgMTFBQTtCREYzOzExMDcgMTE3MiAxMUFBOworQkRGNDtCREY0OzExMDcgMTE3MiAxMUFCO0JERjQ7MTEwNyAxMTcyIDExQUI7CitCREY1O0JERjU7MTEwNyAxMTcyIDExQUM7QkRGNTsxMTA3IDExNzIgMTFBQzsKK0JERjY7QkRGNjsxMTA3IDExNzIgMTFBRDtCREY2OzExMDcgMTE3MiAxMUFEOworQkRGNztCREY3OzExMDcgMTE3MiAxMUFFO0JERjc7MTEwNyAxMTcyIDExQUU7CitCREY4O0JERjg7MTEwNyAxMTcyIDExQUY7QkRGODsxMTA3IDExNzIgMTFBRjsKK0JERjk7QkRGOTsxMTA3IDExNzIgMTFCMDtCREY5OzExMDcgMTE3MiAxMUIwOworQkRGQTtCREZBOzExMDcgMTE3MiAxMUIxO0JERkE7MTEwNyAxMTcyIDExQjE7CitCREZCO0JERkI7MTEwNyAxMTcyIDExQjI7QkRGQjsxMTA3IDExNzIgMTFCMjsKK0JERkM7QkRGQzsxMTA3IDExNzIgMTFCMztCREZDOzExMDcgMTE3MiAxMUIzOworQkRGRDtCREZEOzExMDcgMTE3MiAxMUI0O0JERkQ7MTEwNyAxMTcyIDExQjQ7CitCREZFO0JERkU7MTEwNyAxMTcyIDExQjU7QkRGRTsxMTA3IDExNzIgMTFCNTsKK0JERkY7QkRGRjsxMTA3IDExNzIgMTFCNjtCREZGOzExMDcgMTE3MiAxMUI2OworQkUwMDtCRTAwOzExMDcgMTE3MiAxMUI3O0JFMDA7MTEwNyAxMTcyIDExQjc7CitCRTAxO0JFMDE7MTEwNyAxMTcyIDExQjg7QkUwMTsxMTA3IDExNzIgMTFCODsKK0JFMDI7QkUwMjsxMTA3IDExNzIgMTFCOTtCRTAyOzExMDcgMTE3MiAxMUI5OworQkUwMztCRTAzOzExMDcgMTE3MiAxMUJBO0JFMDM7MTEwNyAxMTcyIDExQkE7CitCRTA0O0JFMDQ7MTEwNyAxMTcyIDExQkI7QkUwNDsxMTA3IDExNzIgMTFCQjsKK0JFMDU7QkUwNTsxMTA3IDExNzIgMTFCQztCRTA1OzExMDcgMTE3MiAxMUJDOworQkUwNjtCRTA2OzExMDcgMTE3MiAxMUJEO0JFMDY7MTEwNyAxMTcyIDExQkQ7CitCRTA3O0JFMDc7MTEwNyAxMTcyIDExQkU7QkUwNzsxMTA3IDExNzIgMTFCRTsKK0JFMDg7QkUwODsxMTA3IDExNzIgMTFCRjtCRTA4OzExMDcgMTE3MiAxMUJGOworQkUwOTtCRTA5OzExMDcgMTE3MiAxMUMwO0JFMDk7MTEwNyAxMTcyIDExQzA7CitCRTBBO0JFMEE7MTEwNyAxMTcyIDExQzE7QkUwQTsxMTA3IDExNzIgMTFDMTsKK0JFMEI7QkUwQjsxMTA3IDExNzIgMTFDMjtCRTBCOzExMDcgMTE3MiAxMUMyOworQkUwQztCRTBDOzExMDcgMTE3MztCRTBDOzExMDcgMTE3MzsKK0JFMEQ7QkUwRDsxMTA3IDExNzMgMTFBODtCRTBEOzExMDcgMTE3MyAxMUE4OworQkUwRTtCRTBFOzExMDcgMTE3MyAxMUE5O0JFMEU7MTEwNyAxMTczIDExQTk7CitCRTBGO0JFMEY7MTEwNyAxMTczIDExQUE7QkUwRjsxMTA3IDExNzMgMTFBQTsKK0JFMTA7QkUxMDsxMTA3IDExNzMgMTFBQjtCRTEwOzExMDcgMTE3MyAxMUFCOworQkUxMTtCRTExOzExMDcgMTE3MyAxMUFDO0JFMTE7MTEwNyAxMTczIDExQUM7CitCRTEyO0JFMTI7MTEwNyAxMTczIDExQUQ7QkUxMjsxMTA3IDExNzMgMTFBRDsKK0JFMTM7QkUxMzsxMTA3IDExNzMgMTFBRTtCRTEzOzExMDcgMTE3MyAxMUFFOworQkUxNDtCRTE0OzExMDcgMTE3MyAxMUFGO0JFMTQ7MTEwNyAxMTczIDExQUY7CitCRTE1O0JFMTU7MTEwNyAxMTczIDExQjA7QkUxNTsxMTA3IDExNzMgMTFCMDsKK0JFMTY7QkUxNjsxMTA3IDExNzMgMTFCMTtCRTE2OzExMDcgMTE3MyAxMUIxOworQkUxNztCRTE3OzExMDcgMTE3MyAxMUIyO0JFMTc7MTEwNyAxMTczIDExQjI7CitCRTE4O0JFMTg7MTEwNyAxMTczIDExQjM7QkUxODsxMTA3IDExNzMgMTFCMzsKK0JFMTk7QkUxOTsxMTA3IDExNzMgMTFCNDtCRTE5OzExMDcgMTE3MyAxMUI0OworQkUxQTtCRTFBOzExMDcgMTE3MyAxMUI1O0JFMUE7MTEwNyAxMTczIDExQjU7CitCRTFCO0JFMUI7MTEwNyAxMTczIDExQjY7QkUxQjsxMTA3IDExNzMgMTFCNjsKK0JFMUM7QkUxQzsxMTA3IDExNzMgMTFCNztCRTFDOzExMDcgMTE3MyAxMUI3OworQkUxRDtCRTFEOzExMDcgMTE3MyAxMUI4O0JFMUQ7MTEwNyAxMTczIDExQjg7CitCRTFFO0JFMUU7MTEwNyAxMTczIDExQjk7QkUxRTsxMTA3IDExNzMgMTFCOTsKK0JFMUY7QkUxRjsxMTA3IDExNzMgMTFCQTtCRTFGOzExMDcgMTE3MyAxMUJBOworQkUyMDtCRTIwOzExMDcgMTE3MyAxMUJCO0JFMjA7MTEwNyAxMTczIDExQkI7CitCRTIxO0JFMjE7MTEwNyAxMTczIDExQkM7QkUyMTsxMTA3IDExNzMgMTFCQzsKK0JFMjI7QkUyMjsxMTA3IDExNzMgMTFCRDtCRTIyOzExMDcgMTE3MyAxMUJEOworQkUyMztCRTIzOzExMDcgMTE3MyAxMUJFO0JFMjM7MTEwNyAxMTczIDExQkU7CitCRTI0O0JFMjQ7MTEwNyAxMTczIDExQkY7QkUyNDsxMTA3IDExNzMgMTFCRjsKK0JFMjU7QkUyNTsxMTA3IDExNzMgMTFDMDtCRTI1OzExMDcgMTE3MyAxMUMwOworQkUyNjtCRTI2OzExMDcgMTE3MyAxMUMxO0JFMjY7MTEwNyAxMTczIDExQzE7CitCRTI3O0JFMjc7MTEwNyAxMTczIDExQzI7QkUyNzsxMTA3IDExNzMgMTFDMjsKK0JFMjg7QkUyODsxMTA3IDExNzQ7QkUyODsxMTA3IDExNzQ7CitCRTI5O0JFMjk7MTEwNyAxMTc0IDExQTg7QkUyOTsxMTA3IDExNzQgMTFBODsKK0JFMkE7QkUyQTsxMTA3IDExNzQgMTFBOTtCRTJBOzExMDcgMTE3NCAxMUE5OworQkUyQjtCRTJCOzExMDcgMTE3NCAxMUFBO0JFMkI7MTEwNyAxMTc0IDExQUE7CitCRTJDO0JFMkM7MTEwNyAxMTc0IDExQUI7QkUyQzsxMTA3IDExNzQgMTFBQjsKK0JFMkQ7QkUyRDsxMTA3IDExNzQgMTFBQztCRTJEOzExMDcgMTE3NCAxMUFDOworQkUyRTtCRTJFOzExMDcgMTE3NCAxMUFEO0JFMkU7MTEwNyAxMTc0IDExQUQ7CitCRTJGO0JFMkY7MTEwNyAxMTc0IDExQUU7QkUyRjsxMTA3IDExNzQgMTFBRTsKK0JFMzA7QkUzMDsxMTA3IDExNzQgMTFBRjtCRTMwOzExMDcgMTE3NCAxMUFGOworQkUzMTtCRTMxOzExMDcgMTE3NCAxMUIwO0JFMzE7MTEwNyAxMTc0IDExQjA7CitCRTMyO0JFMzI7MTEwNyAxMTc0IDExQjE7QkUzMjsxMTA3IDExNzQgMTFCMTsKK0JFMzM7QkUzMzsxMTA3IDExNzQgMTFCMjtCRTMzOzExMDcgMTE3NCAxMUIyOworQkUzNDtCRTM0OzExMDcgMTE3NCAxMUIzO0JFMzQ7MTEwNyAxMTc0IDExQjM7CitCRTM1O0JFMzU7MTEwNyAxMTc0IDExQjQ7QkUzNTsxMTA3IDExNzQgMTFCNDsKK0JFMzY7QkUzNjsxMTA3IDExNzQgMTFCNTtCRTM2OzExMDcgMTE3NCAxMUI1OworQkUzNztCRTM3OzExMDcgMTE3NCAxMUI2O0JFMzc7MTEwNyAxMTc0IDExQjY7CitCRTM4O0JFMzg7MTEwNyAxMTc0IDExQjc7QkUzODsxMTA3IDExNzQgMTFCNzsKK0JFMzk7QkUzOTsxMTA3IDExNzQgMTFCODtCRTM5OzExMDcgMTE3NCAxMUI4OworQkUzQTtCRTNBOzExMDcgMTE3NCAxMUI5O0JFM0E7MTEwNyAxMTc0IDExQjk7CitCRTNCO0JFM0I7MTEwNyAxMTc0IDExQkE7QkUzQjsxMTA3IDExNzQgMTFCQTsKK0JFM0M7QkUzQzsxMTA3IDExNzQgMTFCQjtCRTNDOzExMDcgMTE3NCAxMUJCOworQkUzRDtCRTNEOzExMDcgMTE3NCAxMUJDO0JFM0Q7MTEwNyAxMTc0IDExQkM7CitCRTNFO0JFM0U7MTEwNyAxMTc0IDExQkQ7QkUzRTsxMTA3IDExNzQgMTFCRDsKK0JFM0Y7QkUzRjsxMTA3IDExNzQgMTFCRTtCRTNGOzExMDcgMTE3NCAxMUJFOworQkU0MDtCRTQwOzExMDcgMTE3NCAxMUJGO0JFNDA7MTEwNyAxMTc0IDExQkY7CitCRTQxO0JFNDE7MTEwNyAxMTc0IDExQzA7QkU0MTsxMTA3IDExNzQgMTFDMDsKK0JFNDI7QkU0MjsxMTA3IDExNzQgMTFDMTtCRTQyOzExMDcgMTE3NCAxMUMxOworQkU0MztCRTQzOzExMDcgMTE3NCAxMUMyO0JFNDM7MTEwNyAxMTc0IDExQzI7CitCRTQ0O0JFNDQ7MTEwNyAxMTc1O0JFNDQ7MTEwNyAxMTc1OworQkU0NTtCRTQ1OzExMDcgMTE3NSAxMUE4O0JFNDU7MTEwNyAxMTc1IDExQTg7CitCRTQ2O0JFNDY7MTEwNyAxMTc1IDExQTk7QkU0NjsxMTA3IDExNzUgMTFBOTsKK0JFNDc7QkU0NzsxMTA3IDExNzUgMTFBQTtCRTQ3OzExMDcgMTE3NSAxMUFBOworQkU0ODtCRTQ4OzExMDcgMTE3NSAxMUFCO0JFNDg7MTEwNyAxMTc1IDExQUI7CitCRTQ5O0JFNDk7MTEwNyAxMTc1IDExQUM7QkU0OTsxMTA3IDExNzUgMTFBQzsKK0JFNEE7QkU0QTsxMTA3IDExNzUgMTFBRDtCRTRBOzExMDcgMTE3NSAxMUFEOworQkU0QjtCRTRCOzExMDcgMTE3NSAxMUFFO0JFNEI7MTEwNyAxMTc1IDExQUU7CitCRTRDO0JFNEM7MTEwNyAxMTc1IDExQUY7QkU0QzsxMTA3IDExNzUgMTFBRjsKK0JFNEQ7QkU0RDsxMTA3IDExNzUgMTFCMDtCRTREOzExMDcgMTE3NSAxMUIwOworQkU0RTtCRTRFOzExMDcgMTE3NSAxMUIxO0JFNEU7MTEwNyAxMTc1IDExQjE7CitCRTRGO0JFNEY7MTEwNyAxMTc1IDExQjI7QkU0RjsxMTA3IDExNzUgMTFCMjsKK0JFNTA7QkU1MDsxMTA3IDExNzUgMTFCMztCRTUwOzExMDcgMTE3NSAxMUIzOworQkU1MTtCRTUxOzExMDcgMTE3NSAxMUI0O0JFNTE7MTEwNyAxMTc1IDExQjQ7CitCRTUyO0JFNTI7MTEwNyAxMTc1IDExQjU7QkU1MjsxMTA3IDExNzUgMTFCNTsKK0JFNTM7QkU1MzsxMTA3IDExNzUgMTFCNjtCRTUzOzExMDcgMTE3NSAxMUI2OworQkU1NDtCRTU0OzExMDcgMTE3NSAxMUI3O0JFNTQ7MTEwNyAxMTc1IDExQjc7CitCRTU1O0JFNTU7MTEwNyAxMTc1IDExQjg7QkU1NTsxMTA3IDExNzUgMTFCODsKK0JFNTY7QkU1NjsxMTA3IDExNzUgMTFCOTtCRTU2OzExMDcgMTE3NSAxMUI5OworQkU1NztCRTU3OzExMDcgMTE3NSAxMUJBO0JFNTc7MTEwNyAxMTc1IDExQkE7CitCRTU4O0JFNTg7MTEwNyAxMTc1IDExQkI7QkU1ODsxMTA3IDExNzUgMTFCQjsKK0JFNTk7QkU1OTsxMTA3IDExNzUgMTFCQztCRTU5OzExMDcgMTE3NSAxMUJDOworQkU1QTtCRTVBOzExMDcgMTE3NSAxMUJEO0JFNUE7MTEwNyAxMTc1IDExQkQ7CitCRTVCO0JFNUI7MTEwNyAxMTc1IDExQkU7QkU1QjsxMTA3IDExNzUgMTFCRTsKK0JFNUM7QkU1QzsxMTA3IDExNzUgMTFCRjtCRTVDOzExMDcgMTE3NSAxMUJGOworQkU1RDtCRTVEOzExMDcgMTE3NSAxMUMwO0JFNUQ7MTEwNyAxMTc1IDExQzA7CitCRTVFO0JFNUU7MTEwNyAxMTc1IDExQzE7QkU1RTsxMTA3IDExNzUgMTFDMTsKK0JFNUY7QkU1RjsxMTA3IDExNzUgMTFDMjtCRTVGOzExMDcgMTE3NSAxMUMyOworQkU2MDtCRTYwOzExMDggMTE2MTtCRTYwOzExMDggMTE2MTsKK0JFNjE7QkU2MTsxMTA4IDExNjEgMTFBODtCRTYxOzExMDggMTE2MSAxMUE4OworQkU2MjtCRTYyOzExMDggMTE2MSAxMUE5O0JFNjI7MTEwOCAxMTYxIDExQTk7CitCRTYzO0JFNjM7MTEwOCAxMTYxIDExQUE7QkU2MzsxMTA4IDExNjEgMTFBQTsKK0JFNjQ7QkU2NDsxMTA4IDExNjEgMTFBQjtCRTY0OzExMDggMTE2MSAxMUFCOworQkU2NTtCRTY1OzExMDggMTE2MSAxMUFDO0JFNjU7MTEwOCAxMTYxIDExQUM7CitCRTY2O0JFNjY7MTEwOCAxMTYxIDExQUQ7QkU2NjsxMTA4IDExNjEgMTFBRDsKK0JFNjc7QkU2NzsxMTA4IDExNjEgMTFBRTtCRTY3OzExMDggMTE2MSAxMUFFOworQkU2ODtCRTY4OzExMDggMTE2MSAxMUFGO0JFNjg7MTEwOCAxMTYxIDExQUY7CitCRTY5O0JFNjk7MTEwOCAxMTYxIDExQjA7QkU2OTsxMTA4IDExNjEgMTFCMDsKK0JFNkE7QkU2QTsxMTA4IDExNjEgMTFCMTtCRTZBOzExMDggMTE2MSAxMUIxOworQkU2QjtCRTZCOzExMDggMTE2MSAxMUIyO0JFNkI7MTEwOCAxMTYxIDExQjI7CitCRTZDO0JFNkM7MTEwOCAxMTYxIDExQjM7QkU2QzsxMTA4IDExNjEgMTFCMzsKK0JFNkQ7QkU2RDsxMTA4IDExNjEgMTFCNDtCRTZEOzExMDggMTE2MSAxMUI0OworQkU2RTtCRTZFOzExMDggMTE2MSAxMUI1O0JFNkU7MTEwOCAxMTYxIDExQjU7CitCRTZGO0JFNkY7MTEwOCAxMTYxIDExQjY7QkU2RjsxMTA4IDExNjEgMTFCNjsKK0JFNzA7QkU3MDsxMTA4IDExNjEgMTFCNztCRTcwOzExMDggMTE2MSAxMUI3OworQkU3MTtCRTcxOzExMDggMTE2MSAxMUI4O0JFNzE7MTEwOCAxMTYxIDExQjg7CitCRTcyO0JFNzI7MTEwOCAxMTYxIDExQjk7QkU3MjsxMTA4IDExNjEgMTFCOTsKK0JFNzM7QkU3MzsxMTA4IDExNjEgMTFCQTtCRTczOzExMDggMTE2MSAxMUJBOworQkU3NDtCRTc0OzExMDggMTE2MSAxMUJCO0JFNzQ7MTEwOCAxMTYxIDExQkI7CitCRTc1O0JFNzU7MTEwOCAxMTYxIDExQkM7QkU3NTsxMTA4IDExNjEgMTFCQzsKK0JFNzY7QkU3NjsxMTA4IDExNjEgMTFCRDtCRTc2OzExMDggMTE2MSAxMUJEOworQkU3NztCRTc3OzExMDggMTE2MSAxMUJFO0JFNzc7MTEwOCAxMTYxIDExQkU7CitCRTc4O0JFNzg7MTEwOCAxMTYxIDExQkY7QkU3ODsxMTA4IDExNjEgMTFCRjsKK0JFNzk7QkU3OTsxMTA4IDExNjEgMTFDMDtCRTc5OzExMDggMTE2MSAxMUMwOworQkU3QTtCRTdBOzExMDggMTE2MSAxMUMxO0JFN0E7MTEwOCAxMTYxIDExQzE7CitCRTdCO0JFN0I7MTEwOCAxMTYxIDExQzI7QkU3QjsxMTA4IDExNjEgMTFDMjsKK0JFN0M7QkU3QzsxMTA4IDExNjI7QkU3QzsxMTA4IDExNjI7CitCRTdEO0JFN0Q7MTEwOCAxMTYyIDExQTg7QkU3RDsxMTA4IDExNjIgMTFBODsKK0JFN0U7QkU3RTsxMTA4IDExNjIgMTFBOTtCRTdFOzExMDggMTE2MiAxMUE5OworQkU3RjtCRTdGOzExMDggMTE2MiAxMUFBO0JFN0Y7MTEwOCAxMTYyIDExQUE7CitCRTgwO0JFODA7MTEwOCAxMTYyIDExQUI7QkU4MDsxMTA4IDExNjIgMTFBQjsKK0JFODE7QkU4MTsxMTA4IDExNjIgMTFBQztCRTgxOzExMDggMTE2MiAxMUFDOworQkU4MjtCRTgyOzExMDggMTE2MiAxMUFEO0JFODI7MTEwOCAxMTYyIDExQUQ7CitCRTgzO0JFODM7MTEwOCAxMTYyIDExQUU7QkU4MzsxMTA4IDExNjIgMTFBRTsKK0JFODQ7QkU4NDsxMTA4IDExNjIgMTFBRjtCRTg0OzExMDggMTE2MiAxMUFGOworQkU4NTtCRTg1OzExMDggMTE2MiAxMUIwO0JFODU7MTEwOCAxMTYyIDExQjA7CitCRTg2O0JFODY7MTEwOCAxMTYyIDExQjE7QkU4NjsxMTA4IDExNjIgMTFCMTsKK0JFODc7QkU4NzsxMTA4IDExNjIgMTFCMjtCRTg3OzExMDggMTE2MiAxMUIyOworQkU4ODtCRTg4OzExMDggMTE2MiAxMUIzO0JFODg7MTEwOCAxMTYyIDExQjM7CitCRTg5O0JFODk7MTEwOCAxMTYyIDExQjQ7QkU4OTsxMTA4IDExNjIgMTFCNDsKK0JFOEE7QkU4QTsxMTA4IDExNjIgMTFCNTtCRThBOzExMDggMTE2MiAxMUI1OworQkU4QjtCRThCOzExMDggMTE2MiAxMUI2O0JFOEI7MTEwOCAxMTYyIDExQjY7CitCRThDO0JFOEM7MTEwOCAxMTYyIDExQjc7QkU4QzsxMTA4IDExNjIgMTFCNzsKK0JFOEQ7QkU4RDsxMTA4IDExNjIgMTFCODtCRThEOzExMDggMTE2MiAxMUI4OworQkU4RTtCRThFOzExMDggMTE2MiAxMUI5O0JFOEU7MTEwOCAxMTYyIDExQjk7CitCRThGO0JFOEY7MTEwOCAxMTYyIDExQkE7QkU4RjsxMTA4IDExNjIgMTFCQTsKK0JFOTA7QkU5MDsxMTA4IDExNjIgMTFCQjtCRTkwOzExMDggMTE2MiAxMUJCOworQkU5MTtCRTkxOzExMDggMTE2MiAxMUJDO0JFOTE7MTEwOCAxMTYyIDExQkM7CitCRTkyO0JFOTI7MTEwOCAxMTYyIDExQkQ7QkU5MjsxMTA4IDExNjIgMTFCRDsKK0JFOTM7QkU5MzsxMTA4IDExNjIgMTFCRTtCRTkzOzExMDggMTE2MiAxMUJFOworQkU5NDtCRTk0OzExMDggMTE2MiAxMUJGO0JFOTQ7MTEwOCAxMTYyIDExQkY7CitCRTk1O0JFOTU7MTEwOCAxMTYyIDExQzA7QkU5NTsxMTA4IDExNjIgMTFDMDsKK0JFOTY7QkU5NjsxMTA4IDExNjIgMTFDMTtCRTk2OzExMDggMTE2MiAxMUMxOworQkU5NztCRTk3OzExMDggMTE2MiAxMUMyO0JFOTc7MTEwOCAxMTYyIDExQzI7CitCRTk4O0JFOTg7MTEwOCAxMTYzO0JFOTg7MTEwOCAxMTYzOworQkU5OTtCRTk5OzExMDggMTE2MyAxMUE4O0JFOTk7MTEwOCAxMTYzIDExQTg7CitCRTlBO0JFOUE7MTEwOCAxMTYzIDExQTk7QkU5QTsxMTA4IDExNjMgMTFBOTsKK0JFOUI7QkU5QjsxMTA4IDExNjMgMTFBQTtCRTlCOzExMDggMTE2MyAxMUFBOworQkU5QztCRTlDOzExMDggMTE2MyAxMUFCO0JFOUM7MTEwOCAxMTYzIDExQUI7CitCRTlEO0JFOUQ7MTEwOCAxMTYzIDExQUM7QkU5RDsxMTA4IDExNjMgMTFBQzsKK0JFOUU7QkU5RTsxMTA4IDExNjMgMTFBRDtCRTlFOzExMDggMTE2MyAxMUFEOworQkU5RjtCRTlGOzExMDggMTE2MyAxMUFFO0JFOUY7MTEwOCAxMTYzIDExQUU7CitCRUEwO0JFQTA7MTEwOCAxMTYzIDExQUY7QkVBMDsxMTA4IDExNjMgMTFBRjsKK0JFQTE7QkVBMTsxMTA4IDExNjMgMTFCMDtCRUExOzExMDggMTE2MyAxMUIwOworQkVBMjtCRUEyOzExMDggMTE2MyAxMUIxO0JFQTI7MTEwOCAxMTYzIDExQjE7CitCRUEzO0JFQTM7MTEwOCAxMTYzIDExQjI7QkVBMzsxMTA4IDExNjMgMTFCMjsKK0JFQTQ7QkVBNDsxMTA4IDExNjMgMTFCMztCRUE0OzExMDggMTE2MyAxMUIzOworQkVBNTtCRUE1OzExMDggMTE2MyAxMUI0O0JFQTU7MTEwOCAxMTYzIDExQjQ7CitCRUE2O0JFQTY7MTEwOCAxMTYzIDExQjU7QkVBNjsxMTA4IDExNjMgMTFCNTsKK0JFQTc7QkVBNzsxMTA4IDExNjMgMTFCNjtCRUE3OzExMDggMTE2MyAxMUI2OworQkVBODtCRUE4OzExMDggMTE2MyAxMUI3O0JFQTg7MTEwOCAxMTYzIDExQjc7CitCRUE5O0JFQTk7MTEwOCAxMTYzIDExQjg7QkVBOTsxMTA4IDExNjMgMTFCODsKK0JFQUE7QkVBQTsxMTA4IDExNjMgMTFCOTtCRUFBOzExMDggMTE2MyAxMUI5OworQkVBQjtCRUFCOzExMDggMTE2MyAxMUJBO0JFQUI7MTEwOCAxMTYzIDExQkE7CitCRUFDO0JFQUM7MTEwOCAxMTYzIDExQkI7QkVBQzsxMTA4IDExNjMgMTFCQjsKK0JFQUQ7QkVBRDsxMTA4IDExNjMgMTFCQztCRUFEOzExMDggMTE2MyAxMUJDOworQkVBRTtCRUFFOzExMDggMTE2MyAxMUJEO0JFQUU7MTEwOCAxMTYzIDExQkQ7CitCRUFGO0JFQUY7MTEwOCAxMTYzIDExQkU7QkVBRjsxMTA4IDExNjMgMTFCRTsKK0JFQjA7QkVCMDsxMTA4IDExNjMgMTFCRjtCRUIwOzExMDggMTE2MyAxMUJGOworQkVCMTtCRUIxOzExMDggMTE2MyAxMUMwO0JFQjE7MTEwOCAxMTYzIDExQzA7CitCRUIyO0JFQjI7MTEwOCAxMTYzIDExQzE7QkVCMjsxMTA4IDExNjMgMTFDMTsKK0JFQjM7QkVCMzsxMTA4IDExNjMgMTFDMjtCRUIzOzExMDggMTE2MyAxMUMyOworQkVCNDtCRUI0OzExMDggMTE2NDtCRUI0OzExMDggMTE2NDsKK0JFQjU7QkVCNTsxMTA4IDExNjQgMTFBODtCRUI1OzExMDggMTE2NCAxMUE4OworQkVCNjtCRUI2OzExMDggMTE2NCAxMUE5O0JFQjY7MTEwOCAxMTY0IDExQTk7CitCRUI3O0JFQjc7MTEwOCAxMTY0IDExQUE7QkVCNzsxMTA4IDExNjQgMTFBQTsKK0JFQjg7QkVCODsxMTA4IDExNjQgMTFBQjtCRUI4OzExMDggMTE2NCAxMUFCOworQkVCOTtCRUI5OzExMDggMTE2NCAxMUFDO0JFQjk7MTEwOCAxMTY0IDExQUM7CitCRUJBO0JFQkE7MTEwOCAxMTY0IDExQUQ7QkVCQTsxMTA4IDExNjQgMTFBRDsKK0JFQkI7QkVCQjsxMTA4IDExNjQgMTFBRTtCRUJCOzExMDggMTE2NCAxMUFFOworQkVCQztCRUJDOzExMDggMTE2NCAxMUFGO0JFQkM7MTEwOCAxMTY0IDExQUY7CitCRUJEO0JFQkQ7MTEwOCAxMTY0IDExQjA7QkVCRDsxMTA4IDExNjQgMTFCMDsKK0JFQkU7QkVCRTsxMTA4IDExNjQgMTFCMTtCRUJFOzExMDggMTE2NCAxMUIxOworQkVCRjtCRUJGOzExMDggMTE2NCAxMUIyO0JFQkY7MTEwOCAxMTY0IDExQjI7CitCRUMwO0JFQzA7MTEwOCAxMTY0IDExQjM7QkVDMDsxMTA4IDExNjQgMTFCMzsKK0JFQzE7QkVDMTsxMTA4IDExNjQgMTFCNDtCRUMxOzExMDggMTE2NCAxMUI0OworQkVDMjtCRUMyOzExMDggMTE2NCAxMUI1O0JFQzI7MTEwOCAxMTY0IDExQjU7CitCRUMzO0JFQzM7MTEwOCAxMTY0IDExQjY7QkVDMzsxMTA4IDExNjQgMTFCNjsKK0JFQzQ7QkVDNDsxMTA4IDExNjQgMTFCNztCRUM0OzExMDggMTE2NCAxMUI3OworQkVDNTtCRUM1OzExMDggMTE2NCAxMUI4O0JFQzU7MTEwOCAxMTY0IDExQjg7CitCRUM2O0JFQzY7MTEwOCAxMTY0IDExQjk7QkVDNjsxMTA4IDExNjQgMTFCOTsKK0JFQzc7QkVDNzsxMTA4IDExNjQgMTFCQTtCRUM3OzExMDggMTE2NCAxMUJBOworQkVDODtCRUM4OzExMDggMTE2NCAxMUJCO0JFQzg7MTEwOCAxMTY0IDExQkI7CitCRUM5O0JFQzk7MTEwOCAxMTY0IDExQkM7QkVDOTsxMTA4IDExNjQgMTFCQzsKK0JFQ0E7QkVDQTsxMTA4IDExNjQgMTFCRDtCRUNBOzExMDggMTE2NCAxMUJEOworQkVDQjtCRUNCOzExMDggMTE2NCAxMUJFO0JFQ0I7MTEwOCAxMTY0IDExQkU7CitCRUNDO0JFQ0M7MTEwOCAxMTY0IDExQkY7QkVDQzsxMTA4IDExNjQgMTFCRjsKK0JFQ0Q7QkVDRDsxMTA4IDExNjQgMTFDMDtCRUNEOzExMDggMTE2NCAxMUMwOworQkVDRTtCRUNFOzExMDggMTE2NCAxMUMxO0JFQ0U7MTEwOCAxMTY0IDExQzE7CitCRUNGO0JFQ0Y7MTEwOCAxMTY0IDExQzI7QkVDRjsxMTA4IDExNjQgMTFDMjsKK0JFRDA7QkVEMDsxMTA4IDExNjU7QkVEMDsxMTA4IDExNjU7CitCRUQxO0JFRDE7MTEwOCAxMTY1IDExQTg7QkVEMTsxMTA4IDExNjUgMTFBODsKK0JFRDI7QkVEMjsxMTA4IDExNjUgMTFBOTtCRUQyOzExMDggMTE2NSAxMUE5OworQkVEMztCRUQzOzExMDggMTE2NSAxMUFBO0JFRDM7MTEwOCAxMTY1IDExQUE7CitCRUQ0O0JFRDQ7MTEwOCAxMTY1IDExQUI7QkVENDsxMTA4IDExNjUgMTFBQjsKK0JFRDU7QkVENTsxMTA4IDExNjUgMTFBQztCRUQ1OzExMDggMTE2NSAxMUFDOworQkVENjtCRUQ2OzExMDggMTE2NSAxMUFEO0JFRDY7MTEwOCAxMTY1IDExQUQ7CitCRUQ3O0JFRDc7MTEwOCAxMTY1IDExQUU7QkVENzsxMTA4IDExNjUgMTFBRTsKK0JFRDg7QkVEODsxMTA4IDExNjUgMTFBRjtCRUQ4OzExMDggMTE2NSAxMUFGOworQkVEOTtCRUQ5OzExMDggMTE2NSAxMUIwO0JFRDk7MTEwOCAxMTY1IDExQjA7CitCRURBO0JFREE7MTEwOCAxMTY1IDExQjE7QkVEQTsxMTA4IDExNjUgMTFCMTsKK0JFREI7QkVEQjsxMTA4IDExNjUgMTFCMjtCRURCOzExMDggMTE2NSAxMUIyOworQkVEQztCRURDOzExMDggMTE2NSAxMUIzO0JFREM7MTEwOCAxMTY1IDExQjM7CitCRUREO0JFREQ7MTEwOCAxMTY1IDExQjQ7QkVERDsxMTA4IDExNjUgMTFCNDsKK0JFREU7QkVERTsxMTA4IDExNjUgMTFCNTtCRURFOzExMDggMTE2NSAxMUI1OworQkVERjtCRURGOzExMDggMTE2NSAxMUI2O0JFREY7MTEwOCAxMTY1IDExQjY7CitCRUUwO0JFRTA7MTEwOCAxMTY1IDExQjc7QkVFMDsxMTA4IDExNjUgMTFCNzsKK0JFRTE7QkVFMTsxMTA4IDExNjUgMTFCODtCRUUxOzExMDggMTE2NSAxMUI4OworQkVFMjtCRUUyOzExMDggMTE2NSAxMUI5O0JFRTI7MTEwOCAxMTY1IDExQjk7CitCRUUzO0JFRTM7MTEwOCAxMTY1IDExQkE7QkVFMzsxMTA4IDExNjUgMTFCQTsKK0JFRTQ7QkVFNDsxMTA4IDExNjUgMTFCQjtCRUU0OzExMDggMTE2NSAxMUJCOworQkVFNTtCRUU1OzExMDggMTE2NSAxMUJDO0JFRTU7MTEwOCAxMTY1IDExQkM7CitCRUU2O0JFRTY7MTEwOCAxMTY1IDExQkQ7QkVFNjsxMTA4IDExNjUgMTFCRDsKK0JFRTc7QkVFNzsxMTA4IDExNjUgMTFCRTtCRUU3OzExMDggMTE2NSAxMUJFOworQkVFODtCRUU4OzExMDggMTE2NSAxMUJGO0JFRTg7MTEwOCAxMTY1IDExQkY7CitCRUU5O0JFRTk7MTEwOCAxMTY1IDExQzA7QkVFOTsxMTA4IDExNjUgMTFDMDsKK0JFRUE7QkVFQTsxMTA4IDExNjUgMTFDMTtCRUVBOzExMDggMTE2NSAxMUMxOworQkVFQjtCRUVCOzExMDggMTE2NSAxMUMyO0JFRUI7MTEwOCAxMTY1IDExQzI7CitCRUVDO0JFRUM7MTEwOCAxMTY2O0JFRUM7MTEwOCAxMTY2OworQkVFRDtCRUVEOzExMDggMTE2NiAxMUE4O0JFRUQ7MTEwOCAxMTY2IDExQTg7CitCRUVFO0JFRUU7MTEwOCAxMTY2IDExQTk7QkVFRTsxMTA4IDExNjYgMTFBOTsKK0JFRUY7QkVFRjsxMTA4IDExNjYgMTFBQTtCRUVGOzExMDggMTE2NiAxMUFBOworQkVGMDtCRUYwOzExMDggMTE2NiAxMUFCO0JFRjA7MTEwOCAxMTY2IDExQUI7CitCRUYxO0JFRjE7MTEwOCAxMTY2IDExQUM7QkVGMTsxMTA4IDExNjYgMTFBQzsKK0JFRjI7QkVGMjsxMTA4IDExNjYgMTFBRDtCRUYyOzExMDggMTE2NiAxMUFEOworQkVGMztCRUYzOzExMDggMTE2NiAxMUFFO0JFRjM7MTEwOCAxMTY2IDExQUU7CitCRUY0O0JFRjQ7MTEwOCAxMTY2IDExQUY7QkVGNDsxMTA4IDExNjYgMTFBRjsKK0JFRjU7QkVGNTsxMTA4IDExNjYgMTFCMDtCRUY1OzExMDggMTE2NiAxMUIwOworQkVGNjtCRUY2OzExMDggMTE2NiAxMUIxO0JFRjY7MTEwOCAxMTY2IDExQjE7CitCRUY3O0JFRjc7MTEwOCAxMTY2IDExQjI7QkVGNzsxMTA4IDExNjYgMTFCMjsKK0JFRjg7QkVGODsxMTA4IDExNjYgMTFCMztCRUY4OzExMDggMTE2NiAxMUIzOworQkVGOTtCRUY5OzExMDggMTE2NiAxMUI0O0JFRjk7MTEwOCAxMTY2IDExQjQ7CitCRUZBO0JFRkE7MTEwOCAxMTY2IDExQjU7QkVGQTsxMTA4IDExNjYgMTFCNTsKK0JFRkI7QkVGQjsxMTA4IDExNjYgMTFCNjtCRUZCOzExMDggMTE2NiAxMUI2OworQkVGQztCRUZDOzExMDggMTE2NiAxMUI3O0JFRkM7MTEwOCAxMTY2IDExQjc7CitCRUZEO0JFRkQ7MTEwOCAxMTY2IDExQjg7QkVGRDsxMTA4IDExNjYgMTFCODsKK0JFRkU7QkVGRTsxMTA4IDExNjYgMTFCOTtCRUZFOzExMDggMTE2NiAxMUI5OworQkVGRjtCRUZGOzExMDggMTE2NiAxMUJBO0JFRkY7MTEwOCAxMTY2IDExQkE7CitCRjAwO0JGMDA7MTEwOCAxMTY2IDExQkI7QkYwMDsxMTA4IDExNjYgMTFCQjsKK0JGMDE7QkYwMTsxMTA4IDExNjYgMTFCQztCRjAxOzExMDggMTE2NiAxMUJDOworQkYwMjtCRjAyOzExMDggMTE2NiAxMUJEO0JGMDI7MTEwOCAxMTY2IDExQkQ7CitCRjAzO0JGMDM7MTEwOCAxMTY2IDExQkU7QkYwMzsxMTA4IDExNjYgMTFCRTsKK0JGMDQ7QkYwNDsxMTA4IDExNjYgMTFCRjtCRjA0OzExMDggMTE2NiAxMUJGOworQkYwNTtCRjA1OzExMDggMTE2NiAxMUMwO0JGMDU7MTEwOCAxMTY2IDExQzA7CitCRjA2O0JGMDY7MTEwOCAxMTY2IDExQzE7QkYwNjsxMTA4IDExNjYgMTFDMTsKK0JGMDc7QkYwNzsxMTA4IDExNjYgMTFDMjtCRjA3OzExMDggMTE2NiAxMUMyOworQkYwODtCRjA4OzExMDggMTE2NztCRjA4OzExMDggMTE2NzsKK0JGMDk7QkYwOTsxMTA4IDExNjcgMTFBODtCRjA5OzExMDggMTE2NyAxMUE4OworQkYwQTtCRjBBOzExMDggMTE2NyAxMUE5O0JGMEE7MTEwOCAxMTY3IDExQTk7CitCRjBCO0JGMEI7MTEwOCAxMTY3IDExQUE7QkYwQjsxMTA4IDExNjcgMTFBQTsKK0JGMEM7QkYwQzsxMTA4IDExNjcgMTFBQjtCRjBDOzExMDggMTE2NyAxMUFCOworQkYwRDtCRjBEOzExMDggMTE2NyAxMUFDO0JGMEQ7MTEwOCAxMTY3IDExQUM7CitCRjBFO0JGMEU7MTEwOCAxMTY3IDExQUQ7QkYwRTsxMTA4IDExNjcgMTFBRDsKK0JGMEY7QkYwRjsxMTA4IDExNjcgMTFBRTtCRjBGOzExMDggMTE2NyAxMUFFOworQkYxMDtCRjEwOzExMDggMTE2NyAxMUFGO0JGMTA7MTEwOCAxMTY3IDExQUY7CitCRjExO0JGMTE7MTEwOCAxMTY3IDExQjA7QkYxMTsxMTA4IDExNjcgMTFCMDsKK0JGMTI7QkYxMjsxMTA4IDExNjcgMTFCMTtCRjEyOzExMDggMTE2NyAxMUIxOworQkYxMztCRjEzOzExMDggMTE2NyAxMUIyO0JGMTM7MTEwOCAxMTY3IDExQjI7CitCRjE0O0JGMTQ7MTEwOCAxMTY3IDExQjM7QkYxNDsxMTA4IDExNjcgMTFCMzsKK0JGMTU7QkYxNTsxMTA4IDExNjcgMTFCNDtCRjE1OzExMDggMTE2NyAxMUI0OworQkYxNjtCRjE2OzExMDggMTE2NyAxMUI1O0JGMTY7MTEwOCAxMTY3IDExQjU7CitCRjE3O0JGMTc7MTEwOCAxMTY3IDExQjY7QkYxNzsxMTA4IDExNjcgMTFCNjsKK0JGMTg7QkYxODsxMTA4IDExNjcgMTFCNztCRjE4OzExMDggMTE2NyAxMUI3OworQkYxOTtCRjE5OzExMDggMTE2NyAxMUI4O0JGMTk7MTEwOCAxMTY3IDExQjg7CitCRjFBO0JGMUE7MTEwOCAxMTY3IDExQjk7QkYxQTsxMTA4IDExNjcgMTFCOTsKK0JGMUI7QkYxQjsxMTA4IDExNjcgMTFCQTtCRjFCOzExMDggMTE2NyAxMUJBOworQkYxQztCRjFDOzExMDggMTE2NyAxMUJCO0JGMUM7MTEwOCAxMTY3IDExQkI7CitCRjFEO0JGMUQ7MTEwOCAxMTY3IDExQkM7QkYxRDsxMTA4IDExNjcgMTFCQzsKK0JGMUU7QkYxRTsxMTA4IDExNjcgMTFCRDtCRjFFOzExMDggMTE2NyAxMUJEOworQkYxRjtCRjFGOzExMDggMTE2NyAxMUJFO0JGMUY7MTEwOCAxMTY3IDExQkU7CitCRjIwO0JGMjA7MTEwOCAxMTY3IDExQkY7QkYyMDsxMTA4IDExNjcgMTFCRjsKK0JGMjE7QkYyMTsxMTA4IDExNjcgMTFDMDtCRjIxOzExMDggMTE2NyAxMUMwOworQkYyMjtCRjIyOzExMDggMTE2NyAxMUMxO0JGMjI7MTEwOCAxMTY3IDExQzE7CitCRjIzO0JGMjM7MTEwOCAxMTY3IDExQzI7QkYyMzsxMTA4IDExNjcgMTFDMjsKK0JGMjQ7QkYyNDsxMTA4IDExNjg7QkYyNDsxMTA4IDExNjg7CitCRjI1O0JGMjU7MTEwOCAxMTY4IDExQTg7QkYyNTsxMTA4IDExNjggMTFBODsKK0JGMjY7QkYyNjsxMTA4IDExNjggMTFBOTtCRjI2OzExMDggMTE2OCAxMUE5OworQkYyNztCRjI3OzExMDggMTE2OCAxMUFBO0JGMjc7MTEwOCAxMTY4IDExQUE7CitCRjI4O0JGMjg7MTEwOCAxMTY4IDExQUI7QkYyODsxMTA4IDExNjggMTFBQjsKK0JGMjk7QkYyOTsxMTA4IDExNjggMTFBQztCRjI5OzExMDggMTE2OCAxMUFDOworQkYyQTtCRjJBOzExMDggMTE2OCAxMUFEO0JGMkE7MTEwOCAxMTY4IDExQUQ7CitCRjJCO0JGMkI7MTEwOCAxMTY4IDExQUU7QkYyQjsxMTA4IDExNjggMTFBRTsKK0JGMkM7QkYyQzsxMTA4IDExNjggMTFBRjtCRjJDOzExMDggMTE2OCAxMUFGOworQkYyRDtCRjJEOzExMDggMTE2OCAxMUIwO0JGMkQ7MTEwOCAxMTY4IDExQjA7CitCRjJFO0JGMkU7MTEwOCAxMTY4IDExQjE7QkYyRTsxMTA4IDExNjggMTFCMTsKK0JGMkY7QkYyRjsxMTA4IDExNjggMTFCMjtCRjJGOzExMDggMTE2OCAxMUIyOworQkYzMDtCRjMwOzExMDggMTE2OCAxMUIzO0JGMzA7MTEwOCAxMTY4IDExQjM7CitCRjMxO0JGMzE7MTEwOCAxMTY4IDExQjQ7QkYzMTsxMTA4IDExNjggMTFCNDsKK0JGMzI7QkYzMjsxMTA4IDExNjggMTFCNTtCRjMyOzExMDggMTE2OCAxMUI1OworQkYzMztCRjMzOzExMDggMTE2OCAxMUI2O0JGMzM7MTEwOCAxMTY4IDExQjY7CitCRjM0O0JGMzQ7MTEwOCAxMTY4IDExQjc7QkYzNDsxMTA4IDExNjggMTFCNzsKK0JGMzU7QkYzNTsxMTA4IDExNjggMTFCODtCRjM1OzExMDggMTE2OCAxMUI4OworQkYzNjtCRjM2OzExMDggMTE2OCAxMUI5O0JGMzY7MTEwOCAxMTY4IDExQjk7CitCRjM3O0JGMzc7MTEwOCAxMTY4IDExQkE7QkYzNzsxMTA4IDExNjggMTFCQTsKK0JGMzg7QkYzODsxMTA4IDExNjggMTFCQjtCRjM4OzExMDggMTE2OCAxMUJCOworQkYzOTtCRjM5OzExMDggMTE2OCAxMUJDO0JGMzk7MTEwOCAxMTY4IDExQkM7CitCRjNBO0JGM0E7MTEwOCAxMTY4IDExQkQ7QkYzQTsxMTA4IDExNjggMTFCRDsKK0JGM0I7QkYzQjsxMTA4IDExNjggMTFCRTtCRjNCOzExMDggMTE2OCAxMUJFOworQkYzQztCRjNDOzExMDggMTE2OCAxMUJGO0JGM0M7MTEwOCAxMTY4IDExQkY7CitCRjNEO0JGM0Q7MTEwOCAxMTY4IDExQzA7QkYzRDsxMTA4IDExNjggMTFDMDsKK0JGM0U7QkYzRTsxMTA4IDExNjggMTFDMTtCRjNFOzExMDggMTE2OCAxMUMxOworQkYzRjtCRjNGOzExMDggMTE2OCAxMUMyO0JGM0Y7MTEwOCAxMTY4IDExQzI7CitCRjQwO0JGNDA7MTEwOCAxMTY5O0JGNDA7MTEwOCAxMTY5OworQkY0MTtCRjQxOzExMDggMTE2OSAxMUE4O0JGNDE7MTEwOCAxMTY5IDExQTg7CitCRjQyO0JGNDI7MTEwOCAxMTY5IDExQTk7QkY0MjsxMTA4IDExNjkgMTFBOTsKK0JGNDM7QkY0MzsxMTA4IDExNjkgMTFBQTtCRjQzOzExMDggMTE2OSAxMUFBOworQkY0NDtCRjQ0OzExMDggMTE2OSAxMUFCO0JGNDQ7MTEwOCAxMTY5IDExQUI7CitCRjQ1O0JGNDU7MTEwOCAxMTY5IDExQUM7QkY0NTsxMTA4IDExNjkgMTFBQzsKK0JGNDY7QkY0NjsxMTA4IDExNjkgMTFBRDtCRjQ2OzExMDggMTE2OSAxMUFEOworQkY0NztCRjQ3OzExMDggMTE2OSAxMUFFO0JGNDc7MTEwOCAxMTY5IDExQUU7CitCRjQ4O0JGNDg7MTEwOCAxMTY5IDExQUY7QkY0ODsxMTA4IDExNjkgMTFBRjsKK0JGNDk7QkY0OTsxMTA4IDExNjkgMTFCMDtCRjQ5OzExMDggMTE2OSAxMUIwOworQkY0QTtCRjRBOzExMDggMTE2OSAxMUIxO0JGNEE7MTEwOCAxMTY5IDExQjE7CitCRjRCO0JGNEI7MTEwOCAxMTY5IDExQjI7QkY0QjsxMTA4IDExNjkgMTFCMjsKK0JGNEM7QkY0QzsxMTA4IDExNjkgMTFCMztCRjRDOzExMDggMTE2OSAxMUIzOworQkY0RDtCRjREOzExMDggMTE2OSAxMUI0O0JGNEQ7MTEwOCAxMTY5IDExQjQ7CitCRjRFO0JGNEU7MTEwOCAxMTY5IDExQjU7QkY0RTsxMTA4IDExNjkgMTFCNTsKK0JGNEY7QkY0RjsxMTA4IDExNjkgMTFCNjtCRjRGOzExMDggMTE2OSAxMUI2OworQkY1MDtCRjUwOzExMDggMTE2OSAxMUI3O0JGNTA7MTEwOCAxMTY5IDExQjc7CitCRjUxO0JGNTE7MTEwOCAxMTY5IDExQjg7QkY1MTsxMTA4IDExNjkgMTFCODsKK0JGNTI7QkY1MjsxMTA4IDExNjkgMTFCOTtCRjUyOzExMDggMTE2OSAxMUI5OworQkY1MztCRjUzOzExMDggMTE2OSAxMUJBO0JGNTM7MTEwOCAxMTY5IDExQkE7CitCRjU0O0JGNTQ7MTEwOCAxMTY5IDExQkI7QkY1NDsxMTA4IDExNjkgMTFCQjsKK0JGNTU7QkY1NTsxMTA4IDExNjkgMTFCQztCRjU1OzExMDggMTE2OSAxMUJDOworQkY1NjtCRjU2OzExMDggMTE2OSAxMUJEO0JGNTY7MTEwOCAxMTY5IDExQkQ7CitCRjU3O0JGNTc7MTEwOCAxMTY5IDExQkU7QkY1NzsxMTA4IDExNjkgMTFCRTsKK0JGNTg7QkY1ODsxMTA4IDExNjkgMTFCRjtCRjU4OzExMDggMTE2OSAxMUJGOworQkY1OTtCRjU5OzExMDggMTE2OSAxMUMwO0JGNTk7MTEwOCAxMTY5IDExQzA7CitCRjVBO0JGNUE7MTEwOCAxMTY5IDExQzE7QkY1QTsxMTA4IDExNjkgMTFDMTsKK0JGNUI7QkY1QjsxMTA4IDExNjkgMTFDMjtCRjVCOzExMDggMTE2OSAxMUMyOworQkY1QztCRjVDOzExMDggMTE2QTtCRjVDOzExMDggMTE2QTsKK0JGNUQ7QkY1RDsxMTA4IDExNkEgMTFBODtCRjVEOzExMDggMTE2QSAxMUE4OworQkY1RTtCRjVFOzExMDggMTE2QSAxMUE5O0JGNUU7MTEwOCAxMTZBIDExQTk7CitCRjVGO0JGNUY7MTEwOCAxMTZBIDExQUE7QkY1RjsxMTA4IDExNkEgMTFBQTsKK0JGNjA7QkY2MDsxMTA4IDExNkEgMTFBQjtCRjYwOzExMDggMTE2QSAxMUFCOworQkY2MTtCRjYxOzExMDggMTE2QSAxMUFDO0JGNjE7MTEwOCAxMTZBIDExQUM7CitCRjYyO0JGNjI7MTEwOCAxMTZBIDExQUQ7QkY2MjsxMTA4IDExNkEgMTFBRDsKK0JGNjM7QkY2MzsxMTA4IDExNkEgMTFBRTtCRjYzOzExMDggMTE2QSAxMUFFOworQkY2NDtCRjY0OzExMDggMTE2QSAxMUFGO0JGNjQ7MTEwOCAxMTZBIDExQUY7CitCRjY1O0JGNjU7MTEwOCAxMTZBIDExQjA7QkY2NTsxMTA4IDExNkEgMTFCMDsKK0JGNjY7QkY2NjsxMTA4IDExNkEgMTFCMTtCRjY2OzExMDggMTE2QSAxMUIxOworQkY2NztCRjY3OzExMDggMTE2QSAxMUIyO0JGNjc7MTEwOCAxMTZBIDExQjI7CitCRjY4O0JGNjg7MTEwOCAxMTZBIDExQjM7QkY2ODsxMTA4IDExNkEgMTFCMzsKK0JGNjk7QkY2OTsxMTA4IDExNkEgMTFCNDtCRjY5OzExMDggMTE2QSAxMUI0OworQkY2QTtCRjZBOzExMDggMTE2QSAxMUI1O0JGNkE7MTEwOCAxMTZBIDExQjU7CitCRjZCO0JGNkI7MTEwOCAxMTZBIDExQjY7QkY2QjsxMTA4IDExNkEgMTFCNjsKK0JGNkM7QkY2QzsxMTA4IDExNkEgMTFCNztCRjZDOzExMDggMTE2QSAxMUI3OworQkY2RDtCRjZEOzExMDggMTE2QSAxMUI4O0JGNkQ7MTEwOCAxMTZBIDExQjg7CitCRjZFO0JGNkU7MTEwOCAxMTZBIDExQjk7QkY2RTsxMTA4IDExNkEgMTFCOTsKK0JGNkY7QkY2RjsxMTA4IDExNkEgMTFCQTtCRjZGOzExMDggMTE2QSAxMUJBOworQkY3MDtCRjcwOzExMDggMTE2QSAxMUJCO0JGNzA7MTEwOCAxMTZBIDExQkI7CitCRjcxO0JGNzE7MTEwOCAxMTZBIDExQkM7QkY3MTsxMTA4IDExNkEgMTFCQzsKK0JGNzI7QkY3MjsxMTA4IDExNkEgMTFCRDtCRjcyOzExMDggMTE2QSAxMUJEOworQkY3MztCRjczOzExMDggMTE2QSAxMUJFO0JGNzM7MTEwOCAxMTZBIDExQkU7CitCRjc0O0JGNzQ7MTEwOCAxMTZBIDExQkY7QkY3NDsxMTA4IDExNkEgMTFCRjsKK0JGNzU7QkY3NTsxMTA4IDExNkEgMTFDMDtCRjc1OzExMDggMTE2QSAxMUMwOworQkY3NjtCRjc2OzExMDggMTE2QSAxMUMxO0JGNzY7MTEwOCAxMTZBIDExQzE7CitCRjc3O0JGNzc7MTEwOCAxMTZBIDExQzI7QkY3NzsxMTA4IDExNkEgMTFDMjsKK0JGNzg7QkY3ODsxMTA4IDExNkI7QkY3ODsxMTA4IDExNkI7CitCRjc5O0JGNzk7MTEwOCAxMTZCIDExQTg7QkY3OTsxMTA4IDExNkIgMTFBODsKK0JGN0E7QkY3QTsxMTA4IDExNkIgMTFBOTtCRjdBOzExMDggMTE2QiAxMUE5OworQkY3QjtCRjdCOzExMDggMTE2QiAxMUFBO0JGN0I7MTEwOCAxMTZCIDExQUE7CitCRjdDO0JGN0M7MTEwOCAxMTZCIDExQUI7QkY3QzsxMTA4IDExNkIgMTFBQjsKK0JGN0Q7QkY3RDsxMTA4IDExNkIgMTFBQztCRjdEOzExMDggMTE2QiAxMUFDOworQkY3RTtCRjdFOzExMDggMTE2QiAxMUFEO0JGN0U7MTEwOCAxMTZCIDExQUQ7CitCRjdGO0JGN0Y7MTEwOCAxMTZCIDExQUU7QkY3RjsxMTA4IDExNkIgMTFBRTsKK0JGODA7QkY4MDsxMTA4IDExNkIgMTFBRjtCRjgwOzExMDggMTE2QiAxMUFGOworQkY4MTtCRjgxOzExMDggMTE2QiAxMUIwO0JGODE7MTEwOCAxMTZCIDExQjA7CitCRjgyO0JGODI7MTEwOCAxMTZCIDExQjE7QkY4MjsxMTA4IDExNkIgMTFCMTsKK0JGODM7QkY4MzsxMTA4IDExNkIgMTFCMjtCRjgzOzExMDggMTE2QiAxMUIyOworQkY4NDtCRjg0OzExMDggMTE2QiAxMUIzO0JGODQ7MTEwOCAxMTZCIDExQjM7CitCRjg1O0JGODU7MTEwOCAxMTZCIDExQjQ7QkY4NTsxMTA4IDExNkIgMTFCNDsKK0JGODY7QkY4NjsxMTA4IDExNkIgMTFCNTtCRjg2OzExMDggMTE2QiAxMUI1OworQkY4NztCRjg3OzExMDggMTE2QiAxMUI2O0JGODc7MTEwOCAxMTZCIDExQjY7CitCRjg4O0JGODg7MTEwOCAxMTZCIDExQjc7QkY4ODsxMTA4IDExNkIgMTFCNzsKK0JGODk7QkY4OTsxMTA4IDExNkIgMTFCODtCRjg5OzExMDggMTE2QiAxMUI4OworQkY4QTtCRjhBOzExMDggMTE2QiAxMUI5O0JGOEE7MTEwOCAxMTZCIDExQjk7CitCRjhCO0JGOEI7MTEwOCAxMTZCIDExQkE7QkY4QjsxMTA4IDExNkIgMTFCQTsKK0JGOEM7QkY4QzsxMTA4IDExNkIgMTFCQjtCRjhDOzExMDggMTE2QiAxMUJCOworQkY4RDtCRjhEOzExMDggMTE2QiAxMUJDO0JGOEQ7MTEwOCAxMTZCIDExQkM7CitCRjhFO0JGOEU7MTEwOCAxMTZCIDExQkQ7QkY4RTsxMTA4IDExNkIgMTFCRDsKK0JGOEY7QkY4RjsxMTA4IDExNkIgMTFCRTtCRjhGOzExMDggMTE2QiAxMUJFOworQkY5MDtCRjkwOzExMDggMTE2QiAxMUJGO0JGOTA7MTEwOCAxMTZCIDExQkY7CitCRjkxO0JGOTE7MTEwOCAxMTZCIDExQzA7QkY5MTsxMTA4IDExNkIgMTFDMDsKK0JGOTI7QkY5MjsxMTA4IDExNkIgMTFDMTtCRjkyOzExMDggMTE2QiAxMUMxOworQkY5MztCRjkzOzExMDggMTE2QiAxMUMyO0JGOTM7MTEwOCAxMTZCIDExQzI7CitCRjk0O0JGOTQ7MTEwOCAxMTZDO0JGOTQ7MTEwOCAxMTZDOworQkY5NTtCRjk1OzExMDggMTE2QyAxMUE4O0JGOTU7MTEwOCAxMTZDIDExQTg7CitCRjk2O0JGOTY7MTEwOCAxMTZDIDExQTk7QkY5NjsxMTA4IDExNkMgMTFBOTsKK0JGOTc7QkY5NzsxMTA4IDExNkMgMTFBQTtCRjk3OzExMDggMTE2QyAxMUFBOworQkY5ODtCRjk4OzExMDggMTE2QyAxMUFCO0JGOTg7MTEwOCAxMTZDIDExQUI7CitCRjk5O0JGOTk7MTEwOCAxMTZDIDExQUM7QkY5OTsxMTA4IDExNkMgMTFBQzsKK0JGOUE7QkY5QTsxMTA4IDExNkMgMTFBRDtCRjlBOzExMDggMTE2QyAxMUFEOworQkY5QjtCRjlCOzExMDggMTE2QyAxMUFFO0JGOUI7MTEwOCAxMTZDIDExQUU7CitCRjlDO0JGOUM7MTEwOCAxMTZDIDExQUY7QkY5QzsxMTA4IDExNkMgMTFBRjsKK0JGOUQ7QkY5RDsxMTA4IDExNkMgMTFCMDtCRjlEOzExMDggMTE2QyAxMUIwOworQkY5RTtCRjlFOzExMDggMTE2QyAxMUIxO0JGOUU7MTEwOCAxMTZDIDExQjE7CitCRjlGO0JGOUY7MTEwOCAxMTZDIDExQjI7QkY5RjsxMTA4IDExNkMgMTFCMjsKK0JGQTA7QkZBMDsxMTA4IDExNkMgMTFCMztCRkEwOzExMDggMTE2QyAxMUIzOworQkZBMTtCRkExOzExMDggMTE2QyAxMUI0O0JGQTE7MTEwOCAxMTZDIDExQjQ7CitCRkEyO0JGQTI7MTEwOCAxMTZDIDExQjU7QkZBMjsxMTA4IDExNkMgMTFCNTsKK0JGQTM7QkZBMzsxMTA4IDExNkMgMTFCNjtCRkEzOzExMDggMTE2QyAxMUI2OworQkZBNDtCRkE0OzExMDggMTE2QyAxMUI3O0JGQTQ7MTEwOCAxMTZDIDExQjc7CitCRkE1O0JGQTU7MTEwOCAxMTZDIDExQjg7QkZBNTsxMTA4IDExNkMgMTFCODsKK0JGQTY7QkZBNjsxMTA4IDExNkMgMTFCOTtCRkE2OzExMDggMTE2QyAxMUI5OworQkZBNztCRkE3OzExMDggMTE2QyAxMUJBO0JGQTc7MTEwOCAxMTZDIDExQkE7CitCRkE4O0JGQTg7MTEwOCAxMTZDIDExQkI7QkZBODsxMTA4IDExNkMgMTFCQjsKK0JGQTk7QkZBOTsxMTA4IDExNkMgMTFCQztCRkE5OzExMDggMTE2QyAxMUJDOworQkZBQTtCRkFBOzExMDggMTE2QyAxMUJEO0JGQUE7MTEwOCAxMTZDIDExQkQ7CitCRkFCO0JGQUI7MTEwOCAxMTZDIDExQkU7QkZBQjsxMTA4IDExNkMgMTFCRTsKK0JGQUM7QkZBQzsxMTA4IDExNkMgMTFCRjtCRkFDOzExMDggMTE2QyAxMUJGOworQkZBRDtCRkFEOzExMDggMTE2QyAxMUMwO0JGQUQ7MTEwOCAxMTZDIDExQzA7CitCRkFFO0JGQUU7MTEwOCAxMTZDIDExQzE7QkZBRTsxMTA4IDExNkMgMTFDMTsKK0JGQUY7QkZBRjsxMTA4IDExNkMgMTFDMjtCRkFGOzExMDggMTE2QyAxMUMyOworQkZCMDtCRkIwOzExMDggMTE2RDtCRkIwOzExMDggMTE2RDsKK0JGQjE7QkZCMTsxMTA4IDExNkQgMTFBODtCRkIxOzExMDggMTE2RCAxMUE4OworQkZCMjtCRkIyOzExMDggMTE2RCAxMUE5O0JGQjI7MTEwOCAxMTZEIDExQTk7CitCRkIzO0JGQjM7MTEwOCAxMTZEIDExQUE7QkZCMzsxMTA4IDExNkQgMTFBQTsKK0JGQjQ7QkZCNDsxMTA4IDExNkQgMTFBQjtCRkI0OzExMDggMTE2RCAxMUFCOworQkZCNTtCRkI1OzExMDggMTE2RCAxMUFDO0JGQjU7MTEwOCAxMTZEIDExQUM7CitCRkI2O0JGQjY7MTEwOCAxMTZEIDExQUQ7QkZCNjsxMTA4IDExNkQgMTFBRDsKK0JGQjc7QkZCNzsxMTA4IDExNkQgMTFBRTtCRkI3OzExMDggMTE2RCAxMUFFOworQkZCODtCRkI4OzExMDggMTE2RCAxMUFGO0JGQjg7MTEwOCAxMTZEIDExQUY7CitCRkI5O0JGQjk7MTEwOCAxMTZEIDExQjA7QkZCOTsxMTA4IDExNkQgMTFCMDsKK0JGQkE7QkZCQTsxMTA4IDExNkQgMTFCMTtCRkJBOzExMDggMTE2RCAxMUIxOworQkZCQjtCRkJCOzExMDggMTE2RCAxMUIyO0JGQkI7MTEwOCAxMTZEIDExQjI7CitCRkJDO0JGQkM7MTEwOCAxMTZEIDExQjM7QkZCQzsxMTA4IDExNkQgMTFCMzsKK0JGQkQ7QkZCRDsxMTA4IDExNkQgMTFCNDtCRkJEOzExMDggMTE2RCAxMUI0OworQkZCRTtCRkJFOzExMDggMTE2RCAxMUI1O0JGQkU7MTEwOCAxMTZEIDExQjU7CitCRkJGO0JGQkY7MTEwOCAxMTZEIDExQjY7QkZCRjsxMTA4IDExNkQgMTFCNjsKK0JGQzA7QkZDMDsxMTA4IDExNkQgMTFCNztCRkMwOzExMDggMTE2RCAxMUI3OworQkZDMTtCRkMxOzExMDggMTE2RCAxMUI4O0JGQzE7MTEwOCAxMTZEIDExQjg7CitCRkMyO0JGQzI7MTEwOCAxMTZEIDExQjk7QkZDMjsxMTA4IDExNkQgMTFCOTsKK0JGQzM7QkZDMzsxMTA4IDExNkQgMTFCQTtCRkMzOzExMDggMTE2RCAxMUJBOworQkZDNDtCRkM0OzExMDggMTE2RCAxMUJCO0JGQzQ7MTEwOCAxMTZEIDExQkI7CitCRkM1O0JGQzU7MTEwOCAxMTZEIDExQkM7QkZDNTsxMTA4IDExNkQgMTFCQzsKK0JGQzY7QkZDNjsxMTA4IDExNkQgMTFCRDtCRkM2OzExMDggMTE2RCAxMUJEOworQkZDNztCRkM3OzExMDggMTE2RCAxMUJFO0JGQzc7MTEwOCAxMTZEIDExQkU7CitCRkM4O0JGQzg7MTEwOCAxMTZEIDExQkY7QkZDODsxMTA4IDExNkQgMTFCRjsKK0JGQzk7QkZDOTsxMTA4IDExNkQgMTFDMDtCRkM5OzExMDggMTE2RCAxMUMwOworQkZDQTtCRkNBOzExMDggMTE2RCAxMUMxO0JGQ0E7MTEwOCAxMTZEIDExQzE7CitCRkNCO0JGQ0I7MTEwOCAxMTZEIDExQzI7QkZDQjsxMTA4IDExNkQgMTFDMjsKK0JGQ0M7QkZDQzsxMTA4IDExNkU7QkZDQzsxMTA4IDExNkU7CitCRkNEO0JGQ0Q7MTEwOCAxMTZFIDExQTg7QkZDRDsxMTA4IDExNkUgMTFBODsKK0JGQ0U7QkZDRTsxMTA4IDExNkUgMTFBOTtCRkNFOzExMDggMTE2RSAxMUE5OworQkZDRjtCRkNGOzExMDggMTE2RSAxMUFBO0JGQ0Y7MTEwOCAxMTZFIDExQUE7CitCRkQwO0JGRDA7MTEwOCAxMTZFIDExQUI7QkZEMDsxMTA4IDExNkUgMTFBQjsKK0JGRDE7QkZEMTsxMTA4IDExNkUgMTFBQztCRkQxOzExMDggMTE2RSAxMUFDOworQkZEMjtCRkQyOzExMDggMTE2RSAxMUFEO0JGRDI7MTEwOCAxMTZFIDExQUQ7CitCRkQzO0JGRDM7MTEwOCAxMTZFIDExQUU7QkZEMzsxMTA4IDExNkUgMTFBRTsKK0JGRDQ7QkZENDsxMTA4IDExNkUgMTFBRjtCRkQ0OzExMDggMTE2RSAxMUFGOworQkZENTtCRkQ1OzExMDggMTE2RSAxMUIwO0JGRDU7MTEwOCAxMTZFIDExQjA7CitCRkQ2O0JGRDY7MTEwOCAxMTZFIDExQjE7QkZENjsxMTA4IDExNkUgMTFCMTsKK0JGRDc7QkZENzsxMTA4IDExNkUgMTFCMjtCRkQ3OzExMDggMTE2RSAxMUIyOworQkZEODtCRkQ4OzExMDggMTE2RSAxMUIzO0JGRDg7MTEwOCAxMTZFIDExQjM7CitCRkQ5O0JGRDk7MTEwOCAxMTZFIDExQjQ7QkZEOTsxMTA4IDExNkUgMTFCNDsKK0JGREE7QkZEQTsxMTA4IDExNkUgMTFCNTtCRkRBOzExMDggMTE2RSAxMUI1OworQkZEQjtCRkRCOzExMDggMTE2RSAxMUI2O0JGREI7MTEwOCAxMTZFIDExQjY7CitCRkRDO0JGREM7MTEwOCAxMTZFIDExQjc7QkZEQzsxMTA4IDExNkUgMTFCNzsKK0JGREQ7QkZERDsxMTA4IDExNkUgMTFCODtCRkREOzExMDggMTE2RSAxMUI4OworQkZERTtCRkRFOzExMDggMTE2RSAxMUI5O0JGREU7MTEwOCAxMTZFIDExQjk7CitCRkRGO0JGREY7MTEwOCAxMTZFIDExQkE7QkZERjsxMTA4IDExNkUgMTFCQTsKK0JGRTA7QkZFMDsxMTA4IDExNkUgMTFCQjtCRkUwOzExMDggMTE2RSAxMUJCOworQkZFMTtCRkUxOzExMDggMTE2RSAxMUJDO0JGRTE7MTEwOCAxMTZFIDExQkM7CitCRkUyO0JGRTI7MTEwOCAxMTZFIDExQkQ7QkZFMjsxMTA4IDExNkUgMTFCRDsKK0JGRTM7QkZFMzsxMTA4IDExNkUgMTFCRTtCRkUzOzExMDggMTE2RSAxMUJFOworQkZFNDtCRkU0OzExMDggMTE2RSAxMUJGO0JGRTQ7MTEwOCAxMTZFIDExQkY7CitCRkU1O0JGRTU7MTEwOCAxMTZFIDExQzA7QkZFNTsxMTA4IDExNkUgMTFDMDsKK0JGRTY7QkZFNjsxMTA4IDExNkUgMTFDMTtCRkU2OzExMDggMTE2RSAxMUMxOworQkZFNztCRkU3OzExMDggMTE2RSAxMUMyO0JGRTc7MTEwOCAxMTZFIDExQzI7CitCRkU4O0JGRTg7MTEwOCAxMTZGO0JGRTg7MTEwOCAxMTZGOworQkZFOTtCRkU5OzExMDggMTE2RiAxMUE4O0JGRTk7MTEwOCAxMTZGIDExQTg7CitCRkVBO0JGRUE7MTEwOCAxMTZGIDExQTk7QkZFQTsxMTA4IDExNkYgMTFBOTsKK0JGRUI7QkZFQjsxMTA4IDExNkYgMTFBQTtCRkVCOzExMDggMTE2RiAxMUFBOworQkZFQztCRkVDOzExMDggMTE2RiAxMUFCO0JGRUM7MTEwOCAxMTZGIDExQUI7CitCRkVEO0JGRUQ7MTEwOCAxMTZGIDExQUM7QkZFRDsxMTA4IDExNkYgMTFBQzsKK0JGRUU7QkZFRTsxMTA4IDExNkYgMTFBRDtCRkVFOzExMDggMTE2RiAxMUFEOworQkZFRjtCRkVGOzExMDggMTE2RiAxMUFFO0JGRUY7MTEwOCAxMTZGIDExQUU7CitCRkYwO0JGRjA7MTEwOCAxMTZGIDExQUY7QkZGMDsxMTA4IDExNkYgMTFBRjsKK0JGRjE7QkZGMTsxMTA4IDExNkYgMTFCMDtCRkYxOzExMDggMTE2RiAxMUIwOworQkZGMjtCRkYyOzExMDggMTE2RiAxMUIxO0JGRjI7MTEwOCAxMTZGIDExQjE7CitCRkYzO0JGRjM7MTEwOCAxMTZGIDExQjI7QkZGMzsxMTA4IDExNkYgMTFCMjsKK0JGRjQ7QkZGNDsxMTA4IDExNkYgMTFCMztCRkY0OzExMDggMTE2RiAxMUIzOworQkZGNTtCRkY1OzExMDggMTE2RiAxMUI0O0JGRjU7MTEwOCAxMTZGIDExQjQ7CitCRkY2O0JGRjY7MTEwOCAxMTZGIDExQjU7QkZGNjsxMTA4IDExNkYgMTFCNTsKK0JGRjc7QkZGNzsxMTA4IDExNkYgMTFCNjtCRkY3OzExMDggMTE2RiAxMUI2OworQkZGODtCRkY4OzExMDggMTE2RiAxMUI3O0JGRjg7MTEwOCAxMTZGIDExQjc7CitCRkY5O0JGRjk7MTEwOCAxMTZGIDExQjg7QkZGOTsxMTA4IDExNkYgMTFCODsKK0JGRkE7QkZGQTsxMTA4IDExNkYgMTFCOTtCRkZBOzExMDggMTE2RiAxMUI5OworQkZGQjtCRkZCOzExMDggMTE2RiAxMUJBO0JGRkI7MTEwOCAxMTZGIDExQkE7CitCRkZDO0JGRkM7MTEwOCAxMTZGIDExQkI7QkZGQzsxMTA4IDExNkYgMTFCQjsKK0JGRkQ7QkZGRDsxMTA4IDExNkYgMTFCQztCRkZEOzExMDggMTE2RiAxMUJDOworQkZGRTtCRkZFOzExMDggMTE2RiAxMUJEO0JGRkU7MTEwOCAxMTZGIDExQkQ7CitCRkZGO0JGRkY7MTEwOCAxMTZGIDExQkU7QkZGRjsxMTA4IDExNkYgMTFCRTsKK0MwMDA7QzAwMDsxMTA4IDExNkYgMTFCRjtDMDAwOzExMDggMTE2RiAxMUJGOworQzAwMTtDMDAxOzExMDggMTE2RiAxMUMwO0MwMDE7MTEwOCAxMTZGIDExQzA7CitDMDAyO0MwMDI7MTEwOCAxMTZGIDExQzE7QzAwMjsxMTA4IDExNkYgMTFDMTsKK0MwMDM7QzAwMzsxMTA4IDExNkYgMTFDMjtDMDAzOzExMDggMTE2RiAxMUMyOworQzAwNDtDMDA0OzExMDggMTE3MDtDMDA0OzExMDggMTE3MDsKK0MwMDU7QzAwNTsxMTA4IDExNzAgMTFBODtDMDA1OzExMDggMTE3MCAxMUE4OworQzAwNjtDMDA2OzExMDggMTE3MCAxMUE5O0MwMDY7MTEwOCAxMTcwIDExQTk7CitDMDA3O0MwMDc7MTEwOCAxMTcwIDExQUE7QzAwNzsxMTA4IDExNzAgMTFBQTsKK0MwMDg7QzAwODsxMTA4IDExNzAgMTFBQjtDMDA4OzExMDggMTE3MCAxMUFCOworQzAwOTtDMDA5OzExMDggMTE3MCAxMUFDO0MwMDk7MTEwOCAxMTcwIDExQUM7CitDMDBBO0MwMEE7MTEwOCAxMTcwIDExQUQ7QzAwQTsxMTA4IDExNzAgMTFBRDsKK0MwMEI7QzAwQjsxMTA4IDExNzAgMTFBRTtDMDBCOzExMDggMTE3MCAxMUFFOworQzAwQztDMDBDOzExMDggMTE3MCAxMUFGO0MwMEM7MTEwOCAxMTcwIDExQUY7CitDMDBEO0MwMEQ7MTEwOCAxMTcwIDExQjA7QzAwRDsxMTA4IDExNzAgMTFCMDsKK0MwMEU7QzAwRTsxMTA4IDExNzAgMTFCMTtDMDBFOzExMDggMTE3MCAxMUIxOworQzAwRjtDMDBGOzExMDggMTE3MCAxMUIyO0MwMEY7MTEwOCAxMTcwIDExQjI7CitDMDEwO0MwMTA7MTEwOCAxMTcwIDExQjM7QzAxMDsxMTA4IDExNzAgMTFCMzsKK0MwMTE7QzAxMTsxMTA4IDExNzAgMTFCNDtDMDExOzExMDggMTE3MCAxMUI0OworQzAxMjtDMDEyOzExMDggMTE3MCAxMUI1O0MwMTI7MTEwOCAxMTcwIDExQjU7CitDMDEzO0MwMTM7MTEwOCAxMTcwIDExQjY7QzAxMzsxMTA4IDExNzAgMTFCNjsKK0MwMTQ7QzAxNDsxMTA4IDExNzAgMTFCNztDMDE0OzExMDggMTE3MCAxMUI3OworQzAxNTtDMDE1OzExMDggMTE3MCAxMUI4O0MwMTU7MTEwOCAxMTcwIDExQjg7CitDMDE2O0MwMTY7MTEwOCAxMTcwIDExQjk7QzAxNjsxMTA4IDExNzAgMTFCOTsKK0MwMTc7QzAxNzsxMTA4IDExNzAgMTFCQTtDMDE3OzExMDggMTE3MCAxMUJBOworQzAxODtDMDE4OzExMDggMTE3MCAxMUJCO0MwMTg7MTEwOCAxMTcwIDExQkI7CitDMDE5O0MwMTk7MTEwOCAxMTcwIDExQkM7QzAxOTsxMTA4IDExNzAgMTFCQzsKK0MwMUE7QzAxQTsxMTA4IDExNzAgMTFCRDtDMDFBOzExMDggMTE3MCAxMUJEOworQzAxQjtDMDFCOzExMDggMTE3MCAxMUJFO0MwMUI7MTEwOCAxMTcwIDExQkU7CitDMDFDO0MwMUM7MTEwOCAxMTcwIDExQkY7QzAxQzsxMTA4IDExNzAgMTFCRjsKK0MwMUQ7QzAxRDsxMTA4IDExNzAgMTFDMDtDMDFEOzExMDggMTE3MCAxMUMwOworQzAxRTtDMDFFOzExMDggMTE3MCAxMUMxO0MwMUU7MTEwOCAxMTcwIDExQzE7CitDMDFGO0MwMUY7MTEwOCAxMTcwIDExQzI7QzAxRjsxMTA4IDExNzAgMTFDMjsKK0MwMjA7QzAyMDsxMTA4IDExNzE7QzAyMDsxMTA4IDExNzE7CitDMDIxO0MwMjE7MTEwOCAxMTcxIDExQTg7QzAyMTsxMTA4IDExNzEgMTFBODsKK0MwMjI7QzAyMjsxMTA4IDExNzEgMTFBOTtDMDIyOzExMDggMTE3MSAxMUE5OworQzAyMztDMDIzOzExMDggMTE3MSAxMUFBO0MwMjM7MTEwOCAxMTcxIDExQUE7CitDMDI0O0MwMjQ7MTEwOCAxMTcxIDExQUI7QzAyNDsxMTA4IDExNzEgMTFBQjsKK0MwMjU7QzAyNTsxMTA4IDExNzEgMTFBQztDMDI1OzExMDggMTE3MSAxMUFDOworQzAyNjtDMDI2OzExMDggMTE3MSAxMUFEO0MwMjY7MTEwOCAxMTcxIDExQUQ7CitDMDI3O0MwMjc7MTEwOCAxMTcxIDExQUU7QzAyNzsxMTA4IDExNzEgMTFBRTsKK0MwMjg7QzAyODsxMTA4IDExNzEgMTFBRjtDMDI4OzExMDggMTE3MSAxMUFGOworQzAyOTtDMDI5OzExMDggMTE3MSAxMUIwO0MwMjk7MTEwOCAxMTcxIDExQjA7CitDMDJBO0MwMkE7MTEwOCAxMTcxIDExQjE7QzAyQTsxMTA4IDExNzEgMTFCMTsKK0MwMkI7QzAyQjsxMTA4IDExNzEgMTFCMjtDMDJCOzExMDggMTE3MSAxMUIyOworQzAyQztDMDJDOzExMDggMTE3MSAxMUIzO0MwMkM7MTEwOCAxMTcxIDExQjM7CitDMDJEO0MwMkQ7MTEwOCAxMTcxIDExQjQ7QzAyRDsxMTA4IDExNzEgMTFCNDsKK0MwMkU7QzAyRTsxMTA4IDExNzEgMTFCNTtDMDJFOzExMDggMTE3MSAxMUI1OworQzAyRjtDMDJGOzExMDggMTE3MSAxMUI2O0MwMkY7MTEwOCAxMTcxIDExQjY7CitDMDMwO0MwMzA7MTEwOCAxMTcxIDExQjc7QzAzMDsxMTA4IDExNzEgMTFCNzsKK0MwMzE7QzAzMTsxMTA4IDExNzEgMTFCODtDMDMxOzExMDggMTE3MSAxMUI4OworQzAzMjtDMDMyOzExMDggMTE3MSAxMUI5O0MwMzI7MTEwOCAxMTcxIDExQjk7CitDMDMzO0MwMzM7MTEwOCAxMTcxIDExQkE7QzAzMzsxMTA4IDExNzEgMTFCQTsKK0MwMzQ7QzAzNDsxMTA4IDExNzEgMTFCQjtDMDM0OzExMDggMTE3MSAxMUJCOworQzAzNTtDMDM1OzExMDggMTE3MSAxMUJDO0MwMzU7MTEwOCAxMTcxIDExQkM7CitDMDM2O0MwMzY7MTEwOCAxMTcxIDExQkQ7QzAzNjsxMTA4IDExNzEgMTFCRDsKK0MwMzc7QzAzNzsxMTA4IDExNzEgMTFCRTtDMDM3OzExMDggMTE3MSAxMUJFOworQzAzODtDMDM4OzExMDggMTE3MSAxMUJGO0MwMzg7MTEwOCAxMTcxIDExQkY7CitDMDM5O0MwMzk7MTEwOCAxMTcxIDExQzA7QzAzOTsxMTA4IDExNzEgMTFDMDsKK0MwM0E7QzAzQTsxMTA4IDExNzEgMTFDMTtDMDNBOzExMDggMTE3MSAxMUMxOworQzAzQjtDMDNCOzExMDggMTE3MSAxMUMyO0MwM0I7MTEwOCAxMTcxIDExQzI7CitDMDNDO0MwM0M7MTEwOCAxMTcyO0MwM0M7MTEwOCAxMTcyOworQzAzRDtDMDNEOzExMDggMTE3MiAxMUE4O0MwM0Q7MTEwOCAxMTcyIDExQTg7CitDMDNFO0MwM0U7MTEwOCAxMTcyIDExQTk7QzAzRTsxMTA4IDExNzIgMTFBOTsKK0MwM0Y7QzAzRjsxMTA4IDExNzIgMTFBQTtDMDNGOzExMDggMTE3MiAxMUFBOworQzA0MDtDMDQwOzExMDggMTE3MiAxMUFCO0MwNDA7MTEwOCAxMTcyIDExQUI7CitDMDQxO0MwNDE7MTEwOCAxMTcyIDExQUM7QzA0MTsxMTA4IDExNzIgMTFBQzsKK0MwNDI7QzA0MjsxMTA4IDExNzIgMTFBRDtDMDQyOzExMDggMTE3MiAxMUFEOworQzA0MztDMDQzOzExMDggMTE3MiAxMUFFO0MwNDM7MTEwOCAxMTcyIDExQUU7CitDMDQ0O0MwNDQ7MTEwOCAxMTcyIDExQUY7QzA0NDsxMTA4IDExNzIgMTFBRjsKK0MwNDU7QzA0NTsxMTA4IDExNzIgMTFCMDtDMDQ1OzExMDggMTE3MiAxMUIwOworQzA0NjtDMDQ2OzExMDggMTE3MiAxMUIxO0MwNDY7MTEwOCAxMTcyIDExQjE7CitDMDQ3O0MwNDc7MTEwOCAxMTcyIDExQjI7QzA0NzsxMTA4IDExNzIgMTFCMjsKK0MwNDg7QzA0ODsxMTA4IDExNzIgMTFCMztDMDQ4OzExMDggMTE3MiAxMUIzOworQzA0OTtDMDQ5OzExMDggMTE3MiAxMUI0O0MwNDk7MTEwOCAxMTcyIDExQjQ7CitDMDRBO0MwNEE7MTEwOCAxMTcyIDExQjU7QzA0QTsxMTA4IDExNzIgMTFCNTsKK0MwNEI7QzA0QjsxMTA4IDExNzIgMTFCNjtDMDRCOzExMDggMTE3MiAxMUI2OworQzA0QztDMDRDOzExMDggMTE3MiAxMUI3O0MwNEM7MTEwOCAxMTcyIDExQjc7CitDMDREO0MwNEQ7MTEwOCAxMTcyIDExQjg7QzA0RDsxMTA4IDExNzIgMTFCODsKK0MwNEU7QzA0RTsxMTA4IDExNzIgMTFCOTtDMDRFOzExMDggMTE3MiAxMUI5OworQzA0RjtDMDRGOzExMDggMTE3MiAxMUJBO0MwNEY7MTEwOCAxMTcyIDExQkE7CitDMDUwO0MwNTA7MTEwOCAxMTcyIDExQkI7QzA1MDsxMTA4IDExNzIgMTFCQjsKK0MwNTE7QzA1MTsxMTA4IDExNzIgMTFCQztDMDUxOzExMDggMTE3MiAxMUJDOworQzA1MjtDMDUyOzExMDggMTE3MiAxMUJEO0MwNTI7MTEwOCAxMTcyIDExQkQ7CitDMDUzO0MwNTM7MTEwOCAxMTcyIDExQkU7QzA1MzsxMTA4IDExNzIgMTFCRTsKK0MwNTQ7QzA1NDsxMTA4IDExNzIgMTFCRjtDMDU0OzExMDggMTE3MiAxMUJGOworQzA1NTtDMDU1OzExMDggMTE3MiAxMUMwO0MwNTU7MTEwOCAxMTcyIDExQzA7CitDMDU2O0MwNTY7MTEwOCAxMTcyIDExQzE7QzA1NjsxMTA4IDExNzIgMTFDMTsKK0MwNTc7QzA1NzsxMTA4IDExNzIgMTFDMjtDMDU3OzExMDggMTE3MiAxMUMyOworQzA1ODtDMDU4OzExMDggMTE3MztDMDU4OzExMDggMTE3MzsKK0MwNTk7QzA1OTsxMTA4IDExNzMgMTFBODtDMDU5OzExMDggMTE3MyAxMUE4OworQzA1QTtDMDVBOzExMDggMTE3MyAxMUE5O0MwNUE7MTEwOCAxMTczIDExQTk7CitDMDVCO0MwNUI7MTEwOCAxMTczIDExQUE7QzA1QjsxMTA4IDExNzMgMTFBQTsKK0MwNUM7QzA1QzsxMTA4IDExNzMgMTFBQjtDMDVDOzExMDggMTE3MyAxMUFCOworQzA1RDtDMDVEOzExMDggMTE3MyAxMUFDO0MwNUQ7MTEwOCAxMTczIDExQUM7CitDMDVFO0MwNUU7MTEwOCAxMTczIDExQUQ7QzA1RTsxMTA4IDExNzMgMTFBRDsKK0MwNUY7QzA1RjsxMTA4IDExNzMgMTFBRTtDMDVGOzExMDggMTE3MyAxMUFFOworQzA2MDtDMDYwOzExMDggMTE3MyAxMUFGO0MwNjA7MTEwOCAxMTczIDExQUY7CitDMDYxO0MwNjE7MTEwOCAxMTczIDExQjA7QzA2MTsxMTA4IDExNzMgMTFCMDsKK0MwNjI7QzA2MjsxMTA4IDExNzMgMTFCMTtDMDYyOzExMDggMTE3MyAxMUIxOworQzA2MztDMDYzOzExMDggMTE3MyAxMUIyO0MwNjM7MTEwOCAxMTczIDExQjI7CitDMDY0O0MwNjQ7MTEwOCAxMTczIDExQjM7QzA2NDsxMTA4IDExNzMgMTFCMzsKK0MwNjU7QzA2NTsxMTA4IDExNzMgMTFCNDtDMDY1OzExMDggMTE3MyAxMUI0OworQzA2NjtDMDY2OzExMDggMTE3MyAxMUI1O0MwNjY7MTEwOCAxMTczIDExQjU7CitDMDY3O0MwNjc7MTEwOCAxMTczIDExQjY7QzA2NzsxMTA4IDExNzMgMTFCNjsKK0MwNjg7QzA2ODsxMTA4IDExNzMgMTFCNztDMDY4OzExMDggMTE3MyAxMUI3OworQzA2OTtDMDY5OzExMDggMTE3MyAxMUI4O0MwNjk7MTEwOCAxMTczIDExQjg7CitDMDZBO0MwNkE7MTEwOCAxMTczIDExQjk7QzA2QTsxMTA4IDExNzMgMTFCOTsKK0MwNkI7QzA2QjsxMTA4IDExNzMgMTFCQTtDMDZCOzExMDggMTE3MyAxMUJBOworQzA2QztDMDZDOzExMDggMTE3MyAxMUJCO0MwNkM7MTEwOCAxMTczIDExQkI7CitDMDZEO0MwNkQ7MTEwOCAxMTczIDExQkM7QzA2RDsxMTA4IDExNzMgMTFCQzsKK0MwNkU7QzA2RTsxMTA4IDExNzMgMTFCRDtDMDZFOzExMDggMTE3MyAxMUJEOworQzA2RjtDMDZGOzExMDggMTE3MyAxMUJFO0MwNkY7MTEwOCAxMTczIDExQkU7CitDMDcwO0MwNzA7MTEwOCAxMTczIDExQkY7QzA3MDsxMTA4IDExNzMgMTFCRjsKK0MwNzE7QzA3MTsxMTA4IDExNzMgMTFDMDtDMDcxOzExMDggMTE3MyAxMUMwOworQzA3MjtDMDcyOzExMDggMTE3MyAxMUMxO0MwNzI7MTEwOCAxMTczIDExQzE7CitDMDczO0MwNzM7MTEwOCAxMTczIDExQzI7QzA3MzsxMTA4IDExNzMgMTFDMjsKK0MwNzQ7QzA3NDsxMTA4IDExNzQ7QzA3NDsxMTA4IDExNzQ7CitDMDc1O0MwNzU7MTEwOCAxMTc0IDExQTg7QzA3NTsxMTA4IDExNzQgMTFBODsKK0MwNzY7QzA3NjsxMTA4IDExNzQgMTFBOTtDMDc2OzExMDggMTE3NCAxMUE5OworQzA3NztDMDc3OzExMDggMTE3NCAxMUFBO0MwNzc7MTEwOCAxMTc0IDExQUE7CitDMDc4O0MwNzg7MTEwOCAxMTc0IDExQUI7QzA3ODsxMTA4IDExNzQgMTFBQjsKK0MwNzk7QzA3OTsxMTA4IDExNzQgMTFBQztDMDc5OzExMDggMTE3NCAxMUFDOworQzA3QTtDMDdBOzExMDggMTE3NCAxMUFEO0MwN0E7MTEwOCAxMTc0IDExQUQ7CitDMDdCO0MwN0I7MTEwOCAxMTc0IDExQUU7QzA3QjsxMTA4IDExNzQgMTFBRTsKK0MwN0M7QzA3QzsxMTA4IDExNzQgMTFBRjtDMDdDOzExMDggMTE3NCAxMUFGOworQzA3RDtDMDdEOzExMDggMTE3NCAxMUIwO0MwN0Q7MTEwOCAxMTc0IDExQjA7CitDMDdFO0MwN0U7MTEwOCAxMTc0IDExQjE7QzA3RTsxMTA4IDExNzQgMTFCMTsKK0MwN0Y7QzA3RjsxMTA4IDExNzQgMTFCMjtDMDdGOzExMDggMTE3NCAxMUIyOworQzA4MDtDMDgwOzExMDggMTE3NCAxMUIzO0MwODA7MTEwOCAxMTc0IDExQjM7CitDMDgxO0MwODE7MTEwOCAxMTc0IDExQjQ7QzA4MTsxMTA4IDExNzQgMTFCNDsKK0MwODI7QzA4MjsxMTA4IDExNzQgMTFCNTtDMDgyOzExMDggMTE3NCAxMUI1OworQzA4MztDMDgzOzExMDggMTE3NCAxMUI2O0MwODM7MTEwOCAxMTc0IDExQjY7CitDMDg0O0MwODQ7MTEwOCAxMTc0IDExQjc7QzA4NDsxMTA4IDExNzQgMTFCNzsKK0MwODU7QzA4NTsxMTA4IDExNzQgMTFCODtDMDg1OzExMDggMTE3NCAxMUI4OworQzA4NjtDMDg2OzExMDggMTE3NCAxMUI5O0MwODY7MTEwOCAxMTc0IDExQjk7CitDMDg3O0MwODc7MTEwOCAxMTc0IDExQkE7QzA4NzsxMTA4IDExNzQgMTFCQTsKK0MwODg7QzA4ODsxMTA4IDExNzQgMTFCQjtDMDg4OzExMDggMTE3NCAxMUJCOworQzA4OTtDMDg5OzExMDggMTE3NCAxMUJDO0MwODk7MTEwOCAxMTc0IDExQkM7CitDMDhBO0MwOEE7MTEwOCAxMTc0IDExQkQ7QzA4QTsxMTA4IDExNzQgMTFCRDsKK0MwOEI7QzA4QjsxMTA4IDExNzQgMTFCRTtDMDhCOzExMDggMTE3NCAxMUJFOworQzA4QztDMDhDOzExMDggMTE3NCAxMUJGO0MwOEM7MTEwOCAxMTc0IDExQkY7CitDMDhEO0MwOEQ7MTEwOCAxMTc0IDExQzA7QzA4RDsxMTA4IDExNzQgMTFDMDsKK0MwOEU7QzA4RTsxMTA4IDExNzQgMTFDMTtDMDhFOzExMDggMTE3NCAxMUMxOworQzA4RjtDMDhGOzExMDggMTE3NCAxMUMyO0MwOEY7MTEwOCAxMTc0IDExQzI7CitDMDkwO0MwOTA7MTEwOCAxMTc1O0MwOTA7MTEwOCAxMTc1OworQzA5MTtDMDkxOzExMDggMTE3NSAxMUE4O0MwOTE7MTEwOCAxMTc1IDExQTg7CitDMDkyO0MwOTI7MTEwOCAxMTc1IDExQTk7QzA5MjsxMTA4IDExNzUgMTFBOTsKK0MwOTM7QzA5MzsxMTA4IDExNzUgMTFBQTtDMDkzOzExMDggMTE3NSAxMUFBOworQzA5NDtDMDk0OzExMDggMTE3NSAxMUFCO0MwOTQ7MTEwOCAxMTc1IDExQUI7CitDMDk1O0MwOTU7MTEwOCAxMTc1IDExQUM7QzA5NTsxMTA4IDExNzUgMTFBQzsKK0MwOTY7QzA5NjsxMTA4IDExNzUgMTFBRDtDMDk2OzExMDggMTE3NSAxMUFEOworQzA5NztDMDk3OzExMDggMTE3NSAxMUFFO0MwOTc7MTEwOCAxMTc1IDExQUU7CitDMDk4O0MwOTg7MTEwOCAxMTc1IDExQUY7QzA5ODsxMTA4IDExNzUgMTFBRjsKK0MwOTk7QzA5OTsxMTA4IDExNzUgMTFCMDtDMDk5OzExMDggMTE3NSAxMUIwOworQzA5QTtDMDlBOzExMDggMTE3NSAxMUIxO0MwOUE7MTEwOCAxMTc1IDExQjE7CitDMDlCO0MwOUI7MTEwOCAxMTc1IDExQjI7QzA5QjsxMTA4IDExNzUgMTFCMjsKK0MwOUM7QzA5QzsxMTA4IDExNzUgMTFCMztDMDlDOzExMDggMTE3NSAxMUIzOworQzA5RDtDMDlEOzExMDggMTE3NSAxMUI0O0MwOUQ7MTEwOCAxMTc1IDExQjQ7CitDMDlFO0MwOUU7MTEwOCAxMTc1IDExQjU7QzA5RTsxMTA4IDExNzUgMTFCNTsKK0MwOUY7QzA5RjsxMTA4IDExNzUgMTFCNjtDMDlGOzExMDggMTE3NSAxMUI2OworQzBBMDtDMEEwOzExMDggMTE3NSAxMUI3O0MwQTA7MTEwOCAxMTc1IDExQjc7CitDMEExO0MwQTE7MTEwOCAxMTc1IDExQjg7QzBBMTsxMTA4IDExNzUgMTFCODsKK0MwQTI7QzBBMjsxMTA4IDExNzUgMTFCOTtDMEEyOzExMDggMTE3NSAxMUI5OworQzBBMztDMEEzOzExMDggMTE3NSAxMUJBO0MwQTM7MTEwOCAxMTc1IDExQkE7CitDMEE0O0MwQTQ7MTEwOCAxMTc1IDExQkI7QzBBNDsxMTA4IDExNzUgMTFCQjsKK0MwQTU7QzBBNTsxMTA4IDExNzUgMTFCQztDMEE1OzExMDggMTE3NSAxMUJDOworQzBBNjtDMEE2OzExMDggMTE3NSAxMUJEO0MwQTY7MTEwOCAxMTc1IDExQkQ7CitDMEE3O0MwQTc7MTEwOCAxMTc1IDExQkU7QzBBNzsxMTA4IDExNzUgMTFCRTsKK0MwQTg7QzBBODsxMTA4IDExNzUgMTFCRjtDMEE4OzExMDggMTE3NSAxMUJGOworQzBBOTtDMEE5OzExMDggMTE3NSAxMUMwO0MwQTk7MTEwOCAxMTc1IDExQzA7CitDMEFBO0MwQUE7MTEwOCAxMTc1IDExQzE7QzBBQTsxMTA4IDExNzUgMTFDMTsKK0MwQUI7QzBBQjsxMTA4IDExNzUgMTFDMjtDMEFCOzExMDggMTE3NSAxMUMyOworQzBBQztDMEFDOzExMDkgMTE2MTtDMEFDOzExMDkgMTE2MTsKK0MwQUQ7QzBBRDsxMTA5IDExNjEgMTFBODtDMEFEOzExMDkgMTE2MSAxMUE4OworQzBBRTtDMEFFOzExMDkgMTE2MSAxMUE5O0MwQUU7MTEwOSAxMTYxIDExQTk7CitDMEFGO0MwQUY7MTEwOSAxMTYxIDExQUE7QzBBRjsxMTA5IDExNjEgMTFBQTsKK0MwQjA7QzBCMDsxMTA5IDExNjEgMTFBQjtDMEIwOzExMDkgMTE2MSAxMUFCOworQzBCMTtDMEIxOzExMDkgMTE2MSAxMUFDO0MwQjE7MTEwOSAxMTYxIDExQUM7CitDMEIyO0MwQjI7MTEwOSAxMTYxIDExQUQ7QzBCMjsxMTA5IDExNjEgMTFBRDsKK0MwQjM7QzBCMzsxMTA5IDExNjEgMTFBRTtDMEIzOzExMDkgMTE2MSAxMUFFOworQzBCNDtDMEI0OzExMDkgMTE2MSAxMUFGO0MwQjQ7MTEwOSAxMTYxIDExQUY7CitDMEI1O0MwQjU7MTEwOSAxMTYxIDExQjA7QzBCNTsxMTA5IDExNjEgMTFCMDsKK0MwQjY7QzBCNjsxMTA5IDExNjEgMTFCMTtDMEI2OzExMDkgMTE2MSAxMUIxOworQzBCNztDMEI3OzExMDkgMTE2MSAxMUIyO0MwQjc7MTEwOSAxMTYxIDExQjI7CitDMEI4O0MwQjg7MTEwOSAxMTYxIDExQjM7QzBCODsxMTA5IDExNjEgMTFCMzsKK0MwQjk7QzBCOTsxMTA5IDExNjEgMTFCNDtDMEI5OzExMDkgMTE2MSAxMUI0OworQzBCQTtDMEJBOzExMDkgMTE2MSAxMUI1O0MwQkE7MTEwOSAxMTYxIDExQjU7CitDMEJCO0MwQkI7MTEwOSAxMTYxIDExQjY7QzBCQjsxMTA5IDExNjEgMTFCNjsKK0MwQkM7QzBCQzsxMTA5IDExNjEgMTFCNztDMEJDOzExMDkgMTE2MSAxMUI3OworQzBCRDtDMEJEOzExMDkgMTE2MSAxMUI4O0MwQkQ7MTEwOSAxMTYxIDExQjg7CitDMEJFO0MwQkU7MTEwOSAxMTYxIDExQjk7QzBCRTsxMTA5IDExNjEgMTFCOTsKK0MwQkY7QzBCRjsxMTA5IDExNjEgMTFCQTtDMEJGOzExMDkgMTE2MSAxMUJBOworQzBDMDtDMEMwOzExMDkgMTE2MSAxMUJCO0MwQzA7MTEwOSAxMTYxIDExQkI7CitDMEMxO0MwQzE7MTEwOSAxMTYxIDExQkM7QzBDMTsxMTA5IDExNjEgMTFCQzsKK0MwQzI7QzBDMjsxMTA5IDExNjEgMTFCRDtDMEMyOzExMDkgMTE2MSAxMUJEOworQzBDMztDMEMzOzExMDkgMTE2MSAxMUJFO0MwQzM7MTEwOSAxMTYxIDExQkU7CitDMEM0O0MwQzQ7MTEwOSAxMTYxIDExQkY7QzBDNDsxMTA5IDExNjEgMTFCRjsKK0MwQzU7QzBDNTsxMTA5IDExNjEgMTFDMDtDMEM1OzExMDkgMTE2MSAxMUMwOworQzBDNjtDMEM2OzExMDkgMTE2MSAxMUMxO0MwQzY7MTEwOSAxMTYxIDExQzE7CitDMEM3O0MwQzc7MTEwOSAxMTYxIDExQzI7QzBDNzsxMTA5IDExNjEgMTFDMjsKK0MwQzg7QzBDODsxMTA5IDExNjI7QzBDODsxMTA5IDExNjI7CitDMEM5O0MwQzk7MTEwOSAxMTYyIDExQTg7QzBDOTsxMTA5IDExNjIgMTFBODsKK0MwQ0E7QzBDQTsxMTA5IDExNjIgMTFBOTtDMENBOzExMDkgMTE2MiAxMUE5OworQzBDQjtDMENCOzExMDkgMTE2MiAxMUFBO0MwQ0I7MTEwOSAxMTYyIDExQUE7CitDMENDO0MwQ0M7MTEwOSAxMTYyIDExQUI7QzBDQzsxMTA5IDExNjIgMTFBQjsKK0MwQ0Q7QzBDRDsxMTA5IDExNjIgMTFBQztDMENEOzExMDkgMTE2MiAxMUFDOworQzBDRTtDMENFOzExMDkgMTE2MiAxMUFEO0MwQ0U7MTEwOSAxMTYyIDExQUQ7CitDMENGO0MwQ0Y7MTEwOSAxMTYyIDExQUU7QzBDRjsxMTA5IDExNjIgMTFBRTsKK0MwRDA7QzBEMDsxMTA5IDExNjIgMTFBRjtDMEQwOzExMDkgMTE2MiAxMUFGOworQzBEMTtDMEQxOzExMDkgMTE2MiAxMUIwO0MwRDE7MTEwOSAxMTYyIDExQjA7CitDMEQyO0MwRDI7MTEwOSAxMTYyIDExQjE7QzBEMjsxMTA5IDExNjIgMTFCMTsKK0MwRDM7QzBEMzsxMTA5IDExNjIgMTFCMjtDMEQzOzExMDkgMTE2MiAxMUIyOworQzBENDtDMEQ0OzExMDkgMTE2MiAxMUIzO0MwRDQ7MTEwOSAxMTYyIDExQjM7CitDMEQ1O0MwRDU7MTEwOSAxMTYyIDExQjQ7QzBENTsxMTA5IDExNjIgMTFCNDsKK0MwRDY7QzBENjsxMTA5IDExNjIgMTFCNTtDMEQ2OzExMDkgMTE2MiAxMUI1OworQzBENztDMEQ3OzExMDkgMTE2MiAxMUI2O0MwRDc7MTEwOSAxMTYyIDExQjY7CitDMEQ4O0MwRDg7MTEwOSAxMTYyIDExQjc7QzBEODsxMTA5IDExNjIgMTFCNzsKK0MwRDk7QzBEOTsxMTA5IDExNjIgMTFCODtDMEQ5OzExMDkgMTE2MiAxMUI4OworQzBEQTtDMERBOzExMDkgMTE2MiAxMUI5O0MwREE7MTEwOSAxMTYyIDExQjk7CitDMERCO0MwREI7MTEwOSAxMTYyIDExQkE7QzBEQjsxMTA5IDExNjIgMTFCQTsKK0MwREM7QzBEQzsxMTA5IDExNjIgMTFCQjtDMERDOzExMDkgMTE2MiAxMUJCOworQzBERDtDMEREOzExMDkgMTE2MiAxMUJDO0MwREQ7MTEwOSAxMTYyIDExQkM7CitDMERFO0MwREU7MTEwOSAxMTYyIDExQkQ7QzBERTsxMTA5IDExNjIgMTFCRDsKK0MwREY7QzBERjsxMTA5IDExNjIgMTFCRTtDMERGOzExMDkgMTE2MiAxMUJFOworQzBFMDtDMEUwOzExMDkgMTE2MiAxMUJGO0MwRTA7MTEwOSAxMTYyIDExQkY7CitDMEUxO0MwRTE7MTEwOSAxMTYyIDExQzA7QzBFMTsxMTA5IDExNjIgMTFDMDsKK0MwRTI7QzBFMjsxMTA5IDExNjIgMTFDMTtDMEUyOzExMDkgMTE2MiAxMUMxOworQzBFMztDMEUzOzExMDkgMTE2MiAxMUMyO0MwRTM7MTEwOSAxMTYyIDExQzI7CitDMEU0O0MwRTQ7MTEwOSAxMTYzO0MwRTQ7MTEwOSAxMTYzOworQzBFNTtDMEU1OzExMDkgMTE2MyAxMUE4O0MwRTU7MTEwOSAxMTYzIDExQTg7CitDMEU2O0MwRTY7MTEwOSAxMTYzIDExQTk7QzBFNjsxMTA5IDExNjMgMTFBOTsKK0MwRTc7QzBFNzsxMTA5IDExNjMgMTFBQTtDMEU3OzExMDkgMTE2MyAxMUFBOworQzBFODtDMEU4OzExMDkgMTE2MyAxMUFCO0MwRTg7MTEwOSAxMTYzIDExQUI7CitDMEU5O0MwRTk7MTEwOSAxMTYzIDExQUM7QzBFOTsxMTA5IDExNjMgMTFBQzsKK0MwRUE7QzBFQTsxMTA5IDExNjMgMTFBRDtDMEVBOzExMDkgMTE2MyAxMUFEOworQzBFQjtDMEVCOzExMDkgMTE2MyAxMUFFO0MwRUI7MTEwOSAxMTYzIDExQUU7CitDMEVDO0MwRUM7MTEwOSAxMTYzIDExQUY7QzBFQzsxMTA5IDExNjMgMTFBRjsKK0MwRUQ7QzBFRDsxMTA5IDExNjMgMTFCMDtDMEVEOzExMDkgMTE2MyAxMUIwOworQzBFRTtDMEVFOzExMDkgMTE2MyAxMUIxO0MwRUU7MTEwOSAxMTYzIDExQjE7CitDMEVGO0MwRUY7MTEwOSAxMTYzIDExQjI7QzBFRjsxMTA5IDExNjMgMTFCMjsKK0MwRjA7QzBGMDsxMTA5IDExNjMgMTFCMztDMEYwOzExMDkgMTE2MyAxMUIzOworQzBGMTtDMEYxOzExMDkgMTE2MyAxMUI0O0MwRjE7MTEwOSAxMTYzIDExQjQ7CitDMEYyO0MwRjI7MTEwOSAxMTYzIDExQjU7QzBGMjsxMTA5IDExNjMgMTFCNTsKK0MwRjM7QzBGMzsxMTA5IDExNjMgMTFCNjtDMEYzOzExMDkgMTE2MyAxMUI2OworQzBGNDtDMEY0OzExMDkgMTE2MyAxMUI3O0MwRjQ7MTEwOSAxMTYzIDExQjc7CitDMEY1O0MwRjU7MTEwOSAxMTYzIDExQjg7QzBGNTsxMTA5IDExNjMgMTFCODsKK0MwRjY7QzBGNjsxMTA5IDExNjMgMTFCOTtDMEY2OzExMDkgMTE2MyAxMUI5OworQzBGNztDMEY3OzExMDkgMTE2MyAxMUJBO0MwRjc7MTEwOSAxMTYzIDExQkE7CitDMEY4O0MwRjg7MTEwOSAxMTYzIDExQkI7QzBGODsxMTA5IDExNjMgMTFCQjsKK0MwRjk7QzBGOTsxMTA5IDExNjMgMTFCQztDMEY5OzExMDkgMTE2MyAxMUJDOworQzBGQTtDMEZBOzExMDkgMTE2MyAxMUJEO0MwRkE7MTEwOSAxMTYzIDExQkQ7CitDMEZCO0MwRkI7MTEwOSAxMTYzIDExQkU7QzBGQjsxMTA5IDExNjMgMTFCRTsKK0MwRkM7QzBGQzsxMTA5IDExNjMgMTFCRjtDMEZDOzExMDkgMTE2MyAxMUJGOworQzBGRDtDMEZEOzExMDkgMTE2MyAxMUMwO0MwRkQ7MTEwOSAxMTYzIDExQzA7CitDMEZFO0MwRkU7MTEwOSAxMTYzIDExQzE7QzBGRTsxMTA5IDExNjMgMTFDMTsKK0MwRkY7QzBGRjsxMTA5IDExNjMgMTFDMjtDMEZGOzExMDkgMTE2MyAxMUMyOworQzEwMDtDMTAwOzExMDkgMTE2NDtDMTAwOzExMDkgMTE2NDsKK0MxMDE7QzEwMTsxMTA5IDExNjQgMTFBODtDMTAxOzExMDkgMTE2NCAxMUE4OworQzEwMjtDMTAyOzExMDkgMTE2NCAxMUE5O0MxMDI7MTEwOSAxMTY0IDExQTk7CitDMTAzO0MxMDM7MTEwOSAxMTY0IDExQUE7QzEwMzsxMTA5IDExNjQgMTFBQTsKK0MxMDQ7QzEwNDsxMTA5IDExNjQgMTFBQjtDMTA0OzExMDkgMTE2NCAxMUFCOworQzEwNTtDMTA1OzExMDkgMTE2NCAxMUFDO0MxMDU7MTEwOSAxMTY0IDExQUM7CitDMTA2O0MxMDY7MTEwOSAxMTY0IDExQUQ7QzEwNjsxMTA5IDExNjQgMTFBRDsKK0MxMDc7QzEwNzsxMTA5IDExNjQgMTFBRTtDMTA3OzExMDkgMTE2NCAxMUFFOworQzEwODtDMTA4OzExMDkgMTE2NCAxMUFGO0MxMDg7MTEwOSAxMTY0IDExQUY7CitDMTA5O0MxMDk7MTEwOSAxMTY0IDExQjA7QzEwOTsxMTA5IDExNjQgMTFCMDsKK0MxMEE7QzEwQTsxMTA5IDExNjQgMTFCMTtDMTBBOzExMDkgMTE2NCAxMUIxOworQzEwQjtDMTBCOzExMDkgMTE2NCAxMUIyO0MxMEI7MTEwOSAxMTY0IDExQjI7CitDMTBDO0MxMEM7MTEwOSAxMTY0IDExQjM7QzEwQzsxMTA5IDExNjQgMTFCMzsKK0MxMEQ7QzEwRDsxMTA5IDExNjQgMTFCNDtDMTBEOzExMDkgMTE2NCAxMUI0OworQzEwRTtDMTBFOzExMDkgMTE2NCAxMUI1O0MxMEU7MTEwOSAxMTY0IDExQjU7CitDMTBGO0MxMEY7MTEwOSAxMTY0IDExQjY7QzEwRjsxMTA5IDExNjQgMTFCNjsKK0MxMTA7QzExMDsxMTA5IDExNjQgMTFCNztDMTEwOzExMDkgMTE2NCAxMUI3OworQzExMTtDMTExOzExMDkgMTE2NCAxMUI4O0MxMTE7MTEwOSAxMTY0IDExQjg7CitDMTEyO0MxMTI7MTEwOSAxMTY0IDExQjk7QzExMjsxMTA5IDExNjQgMTFCOTsKK0MxMTM7QzExMzsxMTA5IDExNjQgMTFCQTtDMTEzOzExMDkgMTE2NCAxMUJBOworQzExNDtDMTE0OzExMDkgMTE2NCAxMUJCO0MxMTQ7MTEwOSAxMTY0IDExQkI7CitDMTE1O0MxMTU7MTEwOSAxMTY0IDExQkM7QzExNTsxMTA5IDExNjQgMTFCQzsKK0MxMTY7QzExNjsxMTA5IDExNjQgMTFCRDtDMTE2OzExMDkgMTE2NCAxMUJEOworQzExNztDMTE3OzExMDkgMTE2NCAxMUJFO0MxMTc7MTEwOSAxMTY0IDExQkU7CitDMTE4O0MxMTg7MTEwOSAxMTY0IDExQkY7QzExODsxMTA5IDExNjQgMTFCRjsKK0MxMTk7QzExOTsxMTA5IDExNjQgMTFDMDtDMTE5OzExMDkgMTE2NCAxMUMwOworQzExQTtDMTFBOzExMDkgMTE2NCAxMUMxO0MxMUE7MTEwOSAxMTY0IDExQzE7CitDMTFCO0MxMUI7MTEwOSAxMTY0IDExQzI7QzExQjsxMTA5IDExNjQgMTFDMjsKK0MxMUM7QzExQzsxMTA5IDExNjU7QzExQzsxMTA5IDExNjU7CitDMTFEO0MxMUQ7MTEwOSAxMTY1IDExQTg7QzExRDsxMTA5IDExNjUgMTFBODsKK0MxMUU7QzExRTsxMTA5IDExNjUgMTFBOTtDMTFFOzExMDkgMTE2NSAxMUE5OworQzExRjtDMTFGOzExMDkgMTE2NSAxMUFBO0MxMUY7MTEwOSAxMTY1IDExQUE7CitDMTIwO0MxMjA7MTEwOSAxMTY1IDExQUI7QzEyMDsxMTA5IDExNjUgMTFBQjsKK0MxMjE7QzEyMTsxMTA5IDExNjUgMTFBQztDMTIxOzExMDkgMTE2NSAxMUFDOworQzEyMjtDMTIyOzExMDkgMTE2NSAxMUFEO0MxMjI7MTEwOSAxMTY1IDExQUQ7CitDMTIzO0MxMjM7MTEwOSAxMTY1IDExQUU7QzEyMzsxMTA5IDExNjUgMTFBRTsKK0MxMjQ7QzEyNDsxMTA5IDExNjUgMTFBRjtDMTI0OzExMDkgMTE2NSAxMUFGOworQzEyNTtDMTI1OzExMDkgMTE2NSAxMUIwO0MxMjU7MTEwOSAxMTY1IDExQjA7CitDMTI2O0MxMjY7MTEwOSAxMTY1IDExQjE7QzEyNjsxMTA5IDExNjUgMTFCMTsKK0MxMjc7QzEyNzsxMTA5IDExNjUgMTFCMjtDMTI3OzExMDkgMTE2NSAxMUIyOworQzEyODtDMTI4OzExMDkgMTE2NSAxMUIzO0MxMjg7MTEwOSAxMTY1IDExQjM7CitDMTI5O0MxMjk7MTEwOSAxMTY1IDExQjQ7QzEyOTsxMTA5IDExNjUgMTFCNDsKK0MxMkE7QzEyQTsxMTA5IDExNjUgMTFCNTtDMTJBOzExMDkgMTE2NSAxMUI1OworQzEyQjtDMTJCOzExMDkgMTE2NSAxMUI2O0MxMkI7MTEwOSAxMTY1IDExQjY7CitDMTJDO0MxMkM7MTEwOSAxMTY1IDExQjc7QzEyQzsxMTA5IDExNjUgMTFCNzsKK0MxMkQ7QzEyRDsxMTA5IDExNjUgMTFCODtDMTJEOzExMDkgMTE2NSAxMUI4OworQzEyRTtDMTJFOzExMDkgMTE2NSAxMUI5O0MxMkU7MTEwOSAxMTY1IDExQjk7CitDMTJGO0MxMkY7MTEwOSAxMTY1IDExQkE7QzEyRjsxMTA5IDExNjUgMTFCQTsKK0MxMzA7QzEzMDsxMTA5IDExNjUgMTFCQjtDMTMwOzExMDkgMTE2NSAxMUJCOworQzEzMTtDMTMxOzExMDkgMTE2NSAxMUJDO0MxMzE7MTEwOSAxMTY1IDExQkM7CitDMTMyO0MxMzI7MTEwOSAxMTY1IDExQkQ7QzEzMjsxMTA5IDExNjUgMTFCRDsKK0MxMzM7QzEzMzsxMTA5IDExNjUgMTFCRTtDMTMzOzExMDkgMTE2NSAxMUJFOworQzEzNDtDMTM0OzExMDkgMTE2NSAxMUJGO0MxMzQ7MTEwOSAxMTY1IDExQkY7CitDMTM1O0MxMzU7MTEwOSAxMTY1IDExQzA7QzEzNTsxMTA5IDExNjUgMTFDMDsKK0MxMzY7QzEzNjsxMTA5IDExNjUgMTFDMTtDMTM2OzExMDkgMTE2NSAxMUMxOworQzEzNztDMTM3OzExMDkgMTE2NSAxMUMyO0MxMzc7MTEwOSAxMTY1IDExQzI7CitDMTM4O0MxMzg7MTEwOSAxMTY2O0MxMzg7MTEwOSAxMTY2OworQzEzOTtDMTM5OzExMDkgMTE2NiAxMUE4O0MxMzk7MTEwOSAxMTY2IDExQTg7CitDMTNBO0MxM0E7MTEwOSAxMTY2IDExQTk7QzEzQTsxMTA5IDExNjYgMTFBOTsKK0MxM0I7QzEzQjsxMTA5IDExNjYgMTFBQTtDMTNCOzExMDkgMTE2NiAxMUFBOworQzEzQztDMTNDOzExMDkgMTE2NiAxMUFCO0MxM0M7MTEwOSAxMTY2IDExQUI7CitDMTNEO0MxM0Q7MTEwOSAxMTY2IDExQUM7QzEzRDsxMTA5IDExNjYgMTFBQzsKK0MxM0U7QzEzRTsxMTA5IDExNjYgMTFBRDtDMTNFOzExMDkgMTE2NiAxMUFEOworQzEzRjtDMTNGOzExMDkgMTE2NiAxMUFFO0MxM0Y7MTEwOSAxMTY2IDExQUU7CitDMTQwO0MxNDA7MTEwOSAxMTY2IDExQUY7QzE0MDsxMTA5IDExNjYgMTFBRjsKK0MxNDE7QzE0MTsxMTA5IDExNjYgMTFCMDtDMTQxOzExMDkgMTE2NiAxMUIwOworQzE0MjtDMTQyOzExMDkgMTE2NiAxMUIxO0MxNDI7MTEwOSAxMTY2IDExQjE7CitDMTQzO0MxNDM7MTEwOSAxMTY2IDExQjI7QzE0MzsxMTA5IDExNjYgMTFCMjsKK0MxNDQ7QzE0NDsxMTA5IDExNjYgMTFCMztDMTQ0OzExMDkgMTE2NiAxMUIzOworQzE0NTtDMTQ1OzExMDkgMTE2NiAxMUI0O0MxNDU7MTEwOSAxMTY2IDExQjQ7CitDMTQ2O0MxNDY7MTEwOSAxMTY2IDExQjU7QzE0NjsxMTA5IDExNjYgMTFCNTsKK0MxNDc7QzE0NzsxMTA5IDExNjYgMTFCNjtDMTQ3OzExMDkgMTE2NiAxMUI2OworQzE0ODtDMTQ4OzExMDkgMTE2NiAxMUI3O0MxNDg7MTEwOSAxMTY2IDExQjc7CitDMTQ5O0MxNDk7MTEwOSAxMTY2IDExQjg7QzE0OTsxMTA5IDExNjYgMTFCODsKK0MxNEE7QzE0QTsxMTA5IDExNjYgMTFCOTtDMTRBOzExMDkgMTE2NiAxMUI5OworQzE0QjtDMTRCOzExMDkgMTE2NiAxMUJBO0MxNEI7MTEwOSAxMTY2IDExQkE7CitDMTRDO0MxNEM7MTEwOSAxMTY2IDExQkI7QzE0QzsxMTA5IDExNjYgMTFCQjsKK0MxNEQ7QzE0RDsxMTA5IDExNjYgMTFCQztDMTREOzExMDkgMTE2NiAxMUJDOworQzE0RTtDMTRFOzExMDkgMTE2NiAxMUJEO0MxNEU7MTEwOSAxMTY2IDExQkQ7CitDMTRGO0MxNEY7MTEwOSAxMTY2IDExQkU7QzE0RjsxMTA5IDExNjYgMTFCRTsKK0MxNTA7QzE1MDsxMTA5IDExNjYgMTFCRjtDMTUwOzExMDkgMTE2NiAxMUJGOworQzE1MTtDMTUxOzExMDkgMTE2NiAxMUMwO0MxNTE7MTEwOSAxMTY2IDExQzA7CitDMTUyO0MxNTI7MTEwOSAxMTY2IDExQzE7QzE1MjsxMTA5IDExNjYgMTFDMTsKK0MxNTM7QzE1MzsxMTA5IDExNjYgMTFDMjtDMTUzOzExMDkgMTE2NiAxMUMyOworQzE1NDtDMTU0OzExMDkgMTE2NztDMTU0OzExMDkgMTE2NzsKK0MxNTU7QzE1NTsxMTA5IDExNjcgMTFBODtDMTU1OzExMDkgMTE2NyAxMUE4OworQzE1NjtDMTU2OzExMDkgMTE2NyAxMUE5O0MxNTY7MTEwOSAxMTY3IDExQTk7CitDMTU3O0MxNTc7MTEwOSAxMTY3IDExQUE7QzE1NzsxMTA5IDExNjcgMTFBQTsKK0MxNTg7QzE1ODsxMTA5IDExNjcgMTFBQjtDMTU4OzExMDkgMTE2NyAxMUFCOworQzE1OTtDMTU5OzExMDkgMTE2NyAxMUFDO0MxNTk7MTEwOSAxMTY3IDExQUM7CitDMTVBO0MxNUE7MTEwOSAxMTY3IDExQUQ7QzE1QTsxMTA5IDExNjcgMTFBRDsKK0MxNUI7QzE1QjsxMTA5IDExNjcgMTFBRTtDMTVCOzExMDkgMTE2NyAxMUFFOworQzE1QztDMTVDOzExMDkgMTE2NyAxMUFGO0MxNUM7MTEwOSAxMTY3IDExQUY7CitDMTVEO0MxNUQ7MTEwOSAxMTY3IDExQjA7QzE1RDsxMTA5IDExNjcgMTFCMDsKK0MxNUU7QzE1RTsxMTA5IDExNjcgMTFCMTtDMTVFOzExMDkgMTE2NyAxMUIxOworQzE1RjtDMTVGOzExMDkgMTE2NyAxMUIyO0MxNUY7MTEwOSAxMTY3IDExQjI7CitDMTYwO0MxNjA7MTEwOSAxMTY3IDExQjM7QzE2MDsxMTA5IDExNjcgMTFCMzsKK0MxNjE7QzE2MTsxMTA5IDExNjcgMTFCNDtDMTYxOzExMDkgMTE2NyAxMUI0OworQzE2MjtDMTYyOzExMDkgMTE2NyAxMUI1O0MxNjI7MTEwOSAxMTY3IDExQjU7CitDMTYzO0MxNjM7MTEwOSAxMTY3IDExQjY7QzE2MzsxMTA5IDExNjcgMTFCNjsKK0MxNjQ7QzE2NDsxMTA5IDExNjcgMTFCNztDMTY0OzExMDkgMTE2NyAxMUI3OworQzE2NTtDMTY1OzExMDkgMTE2NyAxMUI4O0MxNjU7MTEwOSAxMTY3IDExQjg7CitDMTY2O0MxNjY7MTEwOSAxMTY3IDExQjk7QzE2NjsxMTA5IDExNjcgMTFCOTsKK0MxNjc7QzE2NzsxMTA5IDExNjcgMTFCQTtDMTY3OzExMDkgMTE2NyAxMUJBOworQzE2ODtDMTY4OzExMDkgMTE2NyAxMUJCO0MxNjg7MTEwOSAxMTY3IDExQkI7CitDMTY5O0MxNjk7MTEwOSAxMTY3IDExQkM7QzE2OTsxMTA5IDExNjcgMTFCQzsKK0MxNkE7QzE2QTsxMTA5IDExNjcgMTFCRDtDMTZBOzExMDkgMTE2NyAxMUJEOworQzE2QjtDMTZCOzExMDkgMTE2NyAxMUJFO0MxNkI7MTEwOSAxMTY3IDExQkU7CitDMTZDO0MxNkM7MTEwOSAxMTY3IDExQkY7QzE2QzsxMTA5IDExNjcgMTFCRjsKK0MxNkQ7QzE2RDsxMTA5IDExNjcgMTFDMDtDMTZEOzExMDkgMTE2NyAxMUMwOworQzE2RTtDMTZFOzExMDkgMTE2NyAxMUMxO0MxNkU7MTEwOSAxMTY3IDExQzE7CitDMTZGO0MxNkY7MTEwOSAxMTY3IDExQzI7QzE2RjsxMTA5IDExNjcgMTFDMjsKK0MxNzA7QzE3MDsxMTA5IDExNjg7QzE3MDsxMTA5IDExNjg7CitDMTcxO0MxNzE7MTEwOSAxMTY4IDExQTg7QzE3MTsxMTA5IDExNjggMTFBODsKK0MxNzI7QzE3MjsxMTA5IDExNjggMTFBOTtDMTcyOzExMDkgMTE2OCAxMUE5OworQzE3MztDMTczOzExMDkgMTE2OCAxMUFBO0MxNzM7MTEwOSAxMTY4IDExQUE7CitDMTc0O0MxNzQ7MTEwOSAxMTY4IDExQUI7QzE3NDsxMTA5IDExNjggMTFBQjsKK0MxNzU7QzE3NTsxMTA5IDExNjggMTFBQztDMTc1OzExMDkgMTE2OCAxMUFDOworQzE3NjtDMTc2OzExMDkgMTE2OCAxMUFEO0MxNzY7MTEwOSAxMTY4IDExQUQ7CitDMTc3O0MxNzc7MTEwOSAxMTY4IDExQUU7QzE3NzsxMTA5IDExNjggMTFBRTsKK0MxNzg7QzE3ODsxMTA5IDExNjggMTFBRjtDMTc4OzExMDkgMTE2OCAxMUFGOworQzE3OTtDMTc5OzExMDkgMTE2OCAxMUIwO0MxNzk7MTEwOSAxMTY4IDExQjA7CitDMTdBO0MxN0E7MTEwOSAxMTY4IDExQjE7QzE3QTsxMTA5IDExNjggMTFCMTsKK0MxN0I7QzE3QjsxMTA5IDExNjggMTFCMjtDMTdCOzExMDkgMTE2OCAxMUIyOworQzE3QztDMTdDOzExMDkgMTE2OCAxMUIzO0MxN0M7MTEwOSAxMTY4IDExQjM7CitDMTdEO0MxN0Q7MTEwOSAxMTY4IDExQjQ7QzE3RDsxMTA5IDExNjggMTFCNDsKK0MxN0U7QzE3RTsxMTA5IDExNjggMTFCNTtDMTdFOzExMDkgMTE2OCAxMUI1OworQzE3RjtDMTdGOzExMDkgMTE2OCAxMUI2O0MxN0Y7MTEwOSAxMTY4IDExQjY7CitDMTgwO0MxODA7MTEwOSAxMTY4IDExQjc7QzE4MDsxMTA5IDExNjggMTFCNzsKK0MxODE7QzE4MTsxMTA5IDExNjggMTFCODtDMTgxOzExMDkgMTE2OCAxMUI4OworQzE4MjtDMTgyOzExMDkgMTE2OCAxMUI5O0MxODI7MTEwOSAxMTY4IDExQjk7CitDMTgzO0MxODM7MTEwOSAxMTY4IDExQkE7QzE4MzsxMTA5IDExNjggMTFCQTsKK0MxODQ7QzE4NDsxMTA5IDExNjggMTFCQjtDMTg0OzExMDkgMTE2OCAxMUJCOworQzE4NTtDMTg1OzExMDkgMTE2OCAxMUJDO0MxODU7MTEwOSAxMTY4IDExQkM7CitDMTg2O0MxODY7MTEwOSAxMTY4IDExQkQ7QzE4NjsxMTA5IDExNjggMTFCRDsKK0MxODc7QzE4NzsxMTA5IDExNjggMTFCRTtDMTg3OzExMDkgMTE2OCAxMUJFOworQzE4ODtDMTg4OzExMDkgMTE2OCAxMUJGO0MxODg7MTEwOSAxMTY4IDExQkY7CitDMTg5O0MxODk7MTEwOSAxMTY4IDExQzA7QzE4OTsxMTA5IDExNjggMTFDMDsKK0MxOEE7QzE4QTsxMTA5IDExNjggMTFDMTtDMThBOzExMDkgMTE2OCAxMUMxOworQzE4QjtDMThCOzExMDkgMTE2OCAxMUMyO0MxOEI7MTEwOSAxMTY4IDExQzI7CitDMThDO0MxOEM7MTEwOSAxMTY5O0MxOEM7MTEwOSAxMTY5OworQzE4RDtDMThEOzExMDkgMTE2OSAxMUE4O0MxOEQ7MTEwOSAxMTY5IDExQTg7CitDMThFO0MxOEU7MTEwOSAxMTY5IDExQTk7QzE4RTsxMTA5IDExNjkgMTFBOTsKK0MxOEY7QzE4RjsxMTA5IDExNjkgMTFBQTtDMThGOzExMDkgMTE2OSAxMUFBOworQzE5MDtDMTkwOzExMDkgMTE2OSAxMUFCO0MxOTA7MTEwOSAxMTY5IDExQUI7CitDMTkxO0MxOTE7MTEwOSAxMTY5IDExQUM7QzE5MTsxMTA5IDExNjkgMTFBQzsKK0MxOTI7QzE5MjsxMTA5IDExNjkgMTFBRDtDMTkyOzExMDkgMTE2OSAxMUFEOworQzE5MztDMTkzOzExMDkgMTE2OSAxMUFFO0MxOTM7MTEwOSAxMTY5IDExQUU7CitDMTk0O0MxOTQ7MTEwOSAxMTY5IDExQUY7QzE5NDsxMTA5IDExNjkgMTFBRjsKK0MxOTU7QzE5NTsxMTA5IDExNjkgMTFCMDtDMTk1OzExMDkgMTE2OSAxMUIwOworQzE5NjtDMTk2OzExMDkgMTE2OSAxMUIxO0MxOTY7MTEwOSAxMTY5IDExQjE7CitDMTk3O0MxOTc7MTEwOSAxMTY5IDExQjI7QzE5NzsxMTA5IDExNjkgMTFCMjsKK0MxOTg7QzE5ODsxMTA5IDExNjkgMTFCMztDMTk4OzExMDkgMTE2OSAxMUIzOworQzE5OTtDMTk5OzExMDkgMTE2OSAxMUI0O0MxOTk7MTEwOSAxMTY5IDExQjQ7CitDMTlBO0MxOUE7MTEwOSAxMTY5IDExQjU7QzE5QTsxMTA5IDExNjkgMTFCNTsKK0MxOUI7QzE5QjsxMTA5IDExNjkgMTFCNjtDMTlCOzExMDkgMTE2OSAxMUI2OworQzE5QztDMTlDOzExMDkgMTE2OSAxMUI3O0MxOUM7MTEwOSAxMTY5IDExQjc7CitDMTlEO0MxOUQ7MTEwOSAxMTY5IDExQjg7QzE5RDsxMTA5IDExNjkgMTFCODsKK0MxOUU7QzE5RTsxMTA5IDExNjkgMTFCOTtDMTlFOzExMDkgMTE2OSAxMUI5OworQzE5RjtDMTlGOzExMDkgMTE2OSAxMUJBO0MxOUY7MTEwOSAxMTY5IDExQkE7CitDMUEwO0MxQTA7MTEwOSAxMTY5IDExQkI7QzFBMDsxMTA5IDExNjkgMTFCQjsKK0MxQTE7QzFBMTsxMTA5IDExNjkgMTFCQztDMUExOzExMDkgMTE2OSAxMUJDOworQzFBMjtDMUEyOzExMDkgMTE2OSAxMUJEO0MxQTI7MTEwOSAxMTY5IDExQkQ7CitDMUEzO0MxQTM7MTEwOSAxMTY5IDExQkU7QzFBMzsxMTA5IDExNjkgMTFCRTsKK0MxQTQ7QzFBNDsxMTA5IDExNjkgMTFCRjtDMUE0OzExMDkgMTE2OSAxMUJGOworQzFBNTtDMUE1OzExMDkgMTE2OSAxMUMwO0MxQTU7MTEwOSAxMTY5IDExQzA7CitDMUE2O0MxQTY7MTEwOSAxMTY5IDExQzE7QzFBNjsxMTA5IDExNjkgMTFDMTsKK0MxQTc7QzFBNzsxMTA5IDExNjkgMTFDMjtDMUE3OzExMDkgMTE2OSAxMUMyOworQzFBODtDMUE4OzExMDkgMTE2QTtDMUE4OzExMDkgMTE2QTsKK0MxQTk7QzFBOTsxMTA5IDExNkEgMTFBODtDMUE5OzExMDkgMTE2QSAxMUE4OworQzFBQTtDMUFBOzExMDkgMTE2QSAxMUE5O0MxQUE7MTEwOSAxMTZBIDExQTk7CitDMUFCO0MxQUI7MTEwOSAxMTZBIDExQUE7QzFBQjsxMTA5IDExNkEgMTFBQTsKK0MxQUM7QzFBQzsxMTA5IDExNkEgMTFBQjtDMUFDOzExMDkgMTE2QSAxMUFCOworQzFBRDtDMUFEOzExMDkgMTE2QSAxMUFDO0MxQUQ7MTEwOSAxMTZBIDExQUM7CitDMUFFO0MxQUU7MTEwOSAxMTZBIDExQUQ7QzFBRTsxMTA5IDExNkEgMTFBRDsKK0MxQUY7QzFBRjsxMTA5IDExNkEgMTFBRTtDMUFGOzExMDkgMTE2QSAxMUFFOworQzFCMDtDMUIwOzExMDkgMTE2QSAxMUFGO0MxQjA7MTEwOSAxMTZBIDExQUY7CitDMUIxO0MxQjE7MTEwOSAxMTZBIDExQjA7QzFCMTsxMTA5IDExNkEgMTFCMDsKK0MxQjI7QzFCMjsxMTA5IDExNkEgMTFCMTtDMUIyOzExMDkgMTE2QSAxMUIxOworQzFCMztDMUIzOzExMDkgMTE2QSAxMUIyO0MxQjM7MTEwOSAxMTZBIDExQjI7CitDMUI0O0MxQjQ7MTEwOSAxMTZBIDExQjM7QzFCNDsxMTA5IDExNkEgMTFCMzsKK0MxQjU7QzFCNTsxMTA5IDExNkEgMTFCNDtDMUI1OzExMDkgMTE2QSAxMUI0OworQzFCNjtDMUI2OzExMDkgMTE2QSAxMUI1O0MxQjY7MTEwOSAxMTZBIDExQjU7CitDMUI3O0MxQjc7MTEwOSAxMTZBIDExQjY7QzFCNzsxMTA5IDExNkEgMTFCNjsKK0MxQjg7QzFCODsxMTA5IDExNkEgMTFCNztDMUI4OzExMDkgMTE2QSAxMUI3OworQzFCOTtDMUI5OzExMDkgMTE2QSAxMUI4O0MxQjk7MTEwOSAxMTZBIDExQjg7CitDMUJBO0MxQkE7MTEwOSAxMTZBIDExQjk7QzFCQTsxMTA5IDExNkEgMTFCOTsKK0MxQkI7QzFCQjsxMTA5IDExNkEgMTFCQTtDMUJCOzExMDkgMTE2QSAxMUJBOworQzFCQztDMUJDOzExMDkgMTE2QSAxMUJCO0MxQkM7MTEwOSAxMTZBIDExQkI7CitDMUJEO0MxQkQ7MTEwOSAxMTZBIDExQkM7QzFCRDsxMTA5IDExNkEgMTFCQzsKK0MxQkU7QzFCRTsxMTA5IDExNkEgMTFCRDtDMUJFOzExMDkgMTE2QSAxMUJEOworQzFCRjtDMUJGOzExMDkgMTE2QSAxMUJFO0MxQkY7MTEwOSAxMTZBIDExQkU7CitDMUMwO0MxQzA7MTEwOSAxMTZBIDExQkY7QzFDMDsxMTA5IDExNkEgMTFCRjsKK0MxQzE7QzFDMTsxMTA5IDExNkEgMTFDMDtDMUMxOzExMDkgMTE2QSAxMUMwOworQzFDMjtDMUMyOzExMDkgMTE2QSAxMUMxO0MxQzI7MTEwOSAxMTZBIDExQzE7CitDMUMzO0MxQzM7MTEwOSAxMTZBIDExQzI7QzFDMzsxMTA5IDExNkEgMTFDMjsKK0MxQzQ7QzFDNDsxMTA5IDExNkI7QzFDNDsxMTA5IDExNkI7CitDMUM1O0MxQzU7MTEwOSAxMTZCIDExQTg7QzFDNTsxMTA5IDExNkIgMTFBODsKK0MxQzY7QzFDNjsxMTA5IDExNkIgMTFBOTtDMUM2OzExMDkgMTE2QiAxMUE5OworQzFDNztDMUM3OzExMDkgMTE2QiAxMUFBO0MxQzc7MTEwOSAxMTZCIDExQUE7CitDMUM4O0MxQzg7MTEwOSAxMTZCIDExQUI7QzFDODsxMTA5IDExNkIgMTFBQjsKK0MxQzk7QzFDOTsxMTA5IDExNkIgMTFBQztDMUM5OzExMDkgMTE2QiAxMUFDOworQzFDQTtDMUNBOzExMDkgMTE2QiAxMUFEO0MxQ0E7MTEwOSAxMTZCIDExQUQ7CitDMUNCO0MxQ0I7MTEwOSAxMTZCIDExQUU7QzFDQjsxMTA5IDExNkIgMTFBRTsKK0MxQ0M7QzFDQzsxMTA5IDExNkIgMTFBRjtDMUNDOzExMDkgMTE2QiAxMUFGOworQzFDRDtDMUNEOzExMDkgMTE2QiAxMUIwO0MxQ0Q7MTEwOSAxMTZCIDExQjA7CitDMUNFO0MxQ0U7MTEwOSAxMTZCIDExQjE7QzFDRTsxMTA5IDExNkIgMTFCMTsKK0MxQ0Y7QzFDRjsxMTA5IDExNkIgMTFCMjtDMUNGOzExMDkgMTE2QiAxMUIyOworQzFEMDtDMUQwOzExMDkgMTE2QiAxMUIzO0MxRDA7MTEwOSAxMTZCIDExQjM7CitDMUQxO0MxRDE7MTEwOSAxMTZCIDExQjQ7QzFEMTsxMTA5IDExNkIgMTFCNDsKK0MxRDI7QzFEMjsxMTA5IDExNkIgMTFCNTtDMUQyOzExMDkgMTE2QiAxMUI1OworQzFEMztDMUQzOzExMDkgMTE2QiAxMUI2O0MxRDM7MTEwOSAxMTZCIDExQjY7CitDMUQ0O0MxRDQ7MTEwOSAxMTZCIDExQjc7QzFENDsxMTA5IDExNkIgMTFCNzsKK0MxRDU7QzFENTsxMTA5IDExNkIgMTFCODtDMUQ1OzExMDkgMTE2QiAxMUI4OworQzFENjtDMUQ2OzExMDkgMTE2QiAxMUI5O0MxRDY7MTEwOSAxMTZCIDExQjk7CitDMUQ3O0MxRDc7MTEwOSAxMTZCIDExQkE7QzFENzsxMTA5IDExNkIgMTFCQTsKK0MxRDg7QzFEODsxMTA5IDExNkIgMTFCQjtDMUQ4OzExMDkgMTE2QiAxMUJCOworQzFEOTtDMUQ5OzExMDkgMTE2QiAxMUJDO0MxRDk7MTEwOSAxMTZCIDExQkM7CitDMURBO0MxREE7MTEwOSAxMTZCIDExQkQ7QzFEQTsxMTA5IDExNkIgMTFCRDsKK0MxREI7QzFEQjsxMTA5IDExNkIgMTFCRTtDMURCOzExMDkgMTE2QiAxMUJFOworQzFEQztDMURDOzExMDkgMTE2QiAxMUJGO0MxREM7MTEwOSAxMTZCIDExQkY7CitDMUREO0MxREQ7MTEwOSAxMTZCIDExQzA7QzFERDsxMTA5IDExNkIgMTFDMDsKK0MxREU7QzFERTsxMTA5IDExNkIgMTFDMTtDMURFOzExMDkgMTE2QiAxMUMxOworQzFERjtDMURGOzExMDkgMTE2QiAxMUMyO0MxREY7MTEwOSAxMTZCIDExQzI7CitDMUUwO0MxRTA7MTEwOSAxMTZDO0MxRTA7MTEwOSAxMTZDOworQzFFMTtDMUUxOzExMDkgMTE2QyAxMUE4O0MxRTE7MTEwOSAxMTZDIDExQTg7CitDMUUyO0MxRTI7MTEwOSAxMTZDIDExQTk7QzFFMjsxMTA5IDExNkMgMTFBOTsKK0MxRTM7QzFFMzsxMTA5IDExNkMgMTFBQTtDMUUzOzExMDkgMTE2QyAxMUFBOworQzFFNDtDMUU0OzExMDkgMTE2QyAxMUFCO0MxRTQ7MTEwOSAxMTZDIDExQUI7CitDMUU1O0MxRTU7MTEwOSAxMTZDIDExQUM7QzFFNTsxMTA5IDExNkMgMTFBQzsKK0MxRTY7QzFFNjsxMTA5IDExNkMgMTFBRDtDMUU2OzExMDkgMTE2QyAxMUFEOworQzFFNztDMUU3OzExMDkgMTE2QyAxMUFFO0MxRTc7MTEwOSAxMTZDIDExQUU7CitDMUU4O0MxRTg7MTEwOSAxMTZDIDExQUY7QzFFODsxMTA5IDExNkMgMTFBRjsKK0MxRTk7QzFFOTsxMTA5IDExNkMgMTFCMDtDMUU5OzExMDkgMTE2QyAxMUIwOworQzFFQTtDMUVBOzExMDkgMTE2QyAxMUIxO0MxRUE7MTEwOSAxMTZDIDExQjE7CitDMUVCO0MxRUI7MTEwOSAxMTZDIDExQjI7QzFFQjsxMTA5IDExNkMgMTFCMjsKK0MxRUM7QzFFQzsxMTA5IDExNkMgMTFCMztDMUVDOzExMDkgMTE2QyAxMUIzOworQzFFRDtDMUVEOzExMDkgMTE2QyAxMUI0O0MxRUQ7MTEwOSAxMTZDIDExQjQ7CitDMUVFO0MxRUU7MTEwOSAxMTZDIDExQjU7QzFFRTsxMTA5IDExNkMgMTFCNTsKK0MxRUY7QzFFRjsxMTA5IDExNkMgMTFCNjtDMUVGOzExMDkgMTE2QyAxMUI2OworQzFGMDtDMUYwOzExMDkgMTE2QyAxMUI3O0MxRjA7MTEwOSAxMTZDIDExQjc7CitDMUYxO0MxRjE7MTEwOSAxMTZDIDExQjg7QzFGMTsxMTA5IDExNkMgMTFCODsKK0MxRjI7QzFGMjsxMTA5IDExNkMgMTFCOTtDMUYyOzExMDkgMTE2QyAxMUI5OworQzFGMztDMUYzOzExMDkgMTE2QyAxMUJBO0MxRjM7MTEwOSAxMTZDIDExQkE7CitDMUY0O0MxRjQ7MTEwOSAxMTZDIDExQkI7QzFGNDsxMTA5IDExNkMgMTFCQjsKK0MxRjU7QzFGNTsxMTA5IDExNkMgMTFCQztDMUY1OzExMDkgMTE2QyAxMUJDOworQzFGNjtDMUY2OzExMDkgMTE2QyAxMUJEO0MxRjY7MTEwOSAxMTZDIDExQkQ7CitDMUY3O0MxRjc7MTEwOSAxMTZDIDExQkU7QzFGNzsxMTA5IDExNkMgMTFCRTsKK0MxRjg7QzFGODsxMTA5IDExNkMgMTFCRjtDMUY4OzExMDkgMTE2QyAxMUJGOworQzFGOTtDMUY5OzExMDkgMTE2QyAxMUMwO0MxRjk7MTEwOSAxMTZDIDExQzA7CitDMUZBO0MxRkE7MTEwOSAxMTZDIDExQzE7QzFGQTsxMTA5IDExNkMgMTFDMTsKK0MxRkI7QzFGQjsxMTA5IDExNkMgMTFDMjtDMUZCOzExMDkgMTE2QyAxMUMyOworQzFGQztDMUZDOzExMDkgMTE2RDtDMUZDOzExMDkgMTE2RDsKK0MxRkQ7QzFGRDsxMTA5IDExNkQgMTFBODtDMUZEOzExMDkgMTE2RCAxMUE4OworQzFGRTtDMUZFOzExMDkgMTE2RCAxMUE5O0MxRkU7MTEwOSAxMTZEIDExQTk7CitDMUZGO0MxRkY7MTEwOSAxMTZEIDExQUE7QzFGRjsxMTA5IDExNkQgMTFBQTsKK0MyMDA7QzIwMDsxMTA5IDExNkQgMTFBQjtDMjAwOzExMDkgMTE2RCAxMUFCOworQzIwMTtDMjAxOzExMDkgMTE2RCAxMUFDO0MyMDE7MTEwOSAxMTZEIDExQUM7CitDMjAyO0MyMDI7MTEwOSAxMTZEIDExQUQ7QzIwMjsxMTA5IDExNkQgMTFBRDsKK0MyMDM7QzIwMzsxMTA5IDExNkQgMTFBRTtDMjAzOzExMDkgMTE2RCAxMUFFOworQzIwNDtDMjA0OzExMDkgMTE2RCAxMUFGO0MyMDQ7MTEwOSAxMTZEIDExQUY7CitDMjA1O0MyMDU7MTEwOSAxMTZEIDExQjA7QzIwNTsxMTA5IDExNkQgMTFCMDsKK0MyMDY7QzIwNjsxMTA5IDExNkQgMTFCMTtDMjA2OzExMDkgMTE2RCAxMUIxOworQzIwNztDMjA3OzExMDkgMTE2RCAxMUIyO0MyMDc7MTEwOSAxMTZEIDExQjI7CitDMjA4O0MyMDg7MTEwOSAxMTZEIDExQjM7QzIwODsxMTA5IDExNkQgMTFCMzsKK0MyMDk7QzIwOTsxMTA5IDExNkQgMTFCNDtDMjA5OzExMDkgMTE2RCAxMUI0OworQzIwQTtDMjBBOzExMDkgMTE2RCAxMUI1O0MyMEE7MTEwOSAxMTZEIDExQjU7CitDMjBCO0MyMEI7MTEwOSAxMTZEIDExQjY7QzIwQjsxMTA5IDExNkQgMTFCNjsKK0MyMEM7QzIwQzsxMTA5IDExNkQgMTFCNztDMjBDOzExMDkgMTE2RCAxMUI3OworQzIwRDtDMjBEOzExMDkgMTE2RCAxMUI4O0MyMEQ7MTEwOSAxMTZEIDExQjg7CitDMjBFO0MyMEU7MTEwOSAxMTZEIDExQjk7QzIwRTsxMTA5IDExNkQgMTFCOTsKK0MyMEY7QzIwRjsxMTA5IDExNkQgMTFCQTtDMjBGOzExMDkgMTE2RCAxMUJBOworQzIxMDtDMjEwOzExMDkgMTE2RCAxMUJCO0MyMTA7MTEwOSAxMTZEIDExQkI7CitDMjExO0MyMTE7MTEwOSAxMTZEIDExQkM7QzIxMTsxMTA5IDExNkQgMTFCQzsKK0MyMTI7QzIxMjsxMTA5IDExNkQgMTFCRDtDMjEyOzExMDkgMTE2RCAxMUJEOworQzIxMztDMjEzOzExMDkgMTE2RCAxMUJFO0MyMTM7MTEwOSAxMTZEIDExQkU7CitDMjE0O0MyMTQ7MTEwOSAxMTZEIDExQkY7QzIxNDsxMTA5IDExNkQgMTFCRjsKK0MyMTU7QzIxNTsxMTA5IDExNkQgMTFDMDtDMjE1OzExMDkgMTE2RCAxMUMwOworQzIxNjtDMjE2OzExMDkgMTE2RCAxMUMxO0MyMTY7MTEwOSAxMTZEIDExQzE7CitDMjE3O0MyMTc7MTEwOSAxMTZEIDExQzI7QzIxNzsxMTA5IDExNkQgMTFDMjsKK0MyMTg7QzIxODsxMTA5IDExNkU7QzIxODsxMTA5IDExNkU7CitDMjE5O0MyMTk7MTEwOSAxMTZFIDExQTg7QzIxOTsxMTA5IDExNkUgMTFBODsKK0MyMUE7QzIxQTsxMTA5IDExNkUgMTFBOTtDMjFBOzExMDkgMTE2RSAxMUE5OworQzIxQjtDMjFCOzExMDkgMTE2RSAxMUFBO0MyMUI7MTEwOSAxMTZFIDExQUE7CitDMjFDO0MyMUM7MTEwOSAxMTZFIDExQUI7QzIxQzsxMTA5IDExNkUgMTFBQjsKK0MyMUQ7QzIxRDsxMTA5IDExNkUgMTFBQztDMjFEOzExMDkgMTE2RSAxMUFDOworQzIxRTtDMjFFOzExMDkgMTE2RSAxMUFEO0MyMUU7MTEwOSAxMTZFIDExQUQ7CitDMjFGO0MyMUY7MTEwOSAxMTZFIDExQUU7QzIxRjsxMTA5IDExNkUgMTFBRTsKK0MyMjA7QzIyMDsxMTA5IDExNkUgMTFBRjtDMjIwOzExMDkgMTE2RSAxMUFGOworQzIyMTtDMjIxOzExMDkgMTE2RSAxMUIwO0MyMjE7MTEwOSAxMTZFIDExQjA7CitDMjIyO0MyMjI7MTEwOSAxMTZFIDExQjE7QzIyMjsxMTA5IDExNkUgMTFCMTsKK0MyMjM7QzIyMzsxMTA5IDExNkUgMTFCMjtDMjIzOzExMDkgMTE2RSAxMUIyOworQzIyNDtDMjI0OzExMDkgMTE2RSAxMUIzO0MyMjQ7MTEwOSAxMTZFIDExQjM7CitDMjI1O0MyMjU7MTEwOSAxMTZFIDExQjQ7QzIyNTsxMTA5IDExNkUgMTFCNDsKK0MyMjY7QzIyNjsxMTA5IDExNkUgMTFCNTtDMjI2OzExMDkgMTE2RSAxMUI1OworQzIyNztDMjI3OzExMDkgMTE2RSAxMUI2O0MyMjc7MTEwOSAxMTZFIDExQjY7CitDMjI4O0MyMjg7MTEwOSAxMTZFIDExQjc7QzIyODsxMTA5IDExNkUgMTFCNzsKK0MyMjk7QzIyOTsxMTA5IDExNkUgMTFCODtDMjI5OzExMDkgMTE2RSAxMUI4OworQzIyQTtDMjJBOzExMDkgMTE2RSAxMUI5O0MyMkE7MTEwOSAxMTZFIDExQjk7CitDMjJCO0MyMkI7MTEwOSAxMTZFIDExQkE7QzIyQjsxMTA5IDExNkUgMTFCQTsKK0MyMkM7QzIyQzsxMTA5IDExNkUgMTFCQjtDMjJDOzExMDkgMTE2RSAxMUJCOworQzIyRDtDMjJEOzExMDkgMTE2RSAxMUJDO0MyMkQ7MTEwOSAxMTZFIDExQkM7CitDMjJFO0MyMkU7MTEwOSAxMTZFIDExQkQ7QzIyRTsxMTA5IDExNkUgMTFCRDsKK0MyMkY7QzIyRjsxMTA5IDExNkUgMTFCRTtDMjJGOzExMDkgMTE2RSAxMUJFOworQzIzMDtDMjMwOzExMDkgMTE2RSAxMUJGO0MyMzA7MTEwOSAxMTZFIDExQkY7CitDMjMxO0MyMzE7MTEwOSAxMTZFIDExQzA7QzIzMTsxMTA5IDExNkUgMTFDMDsKK0MyMzI7QzIzMjsxMTA5IDExNkUgMTFDMTtDMjMyOzExMDkgMTE2RSAxMUMxOworQzIzMztDMjMzOzExMDkgMTE2RSAxMUMyO0MyMzM7MTEwOSAxMTZFIDExQzI7CitDMjM0O0MyMzQ7MTEwOSAxMTZGO0MyMzQ7MTEwOSAxMTZGOworQzIzNTtDMjM1OzExMDkgMTE2RiAxMUE4O0MyMzU7MTEwOSAxMTZGIDExQTg7CitDMjM2O0MyMzY7MTEwOSAxMTZGIDExQTk7QzIzNjsxMTA5IDExNkYgMTFBOTsKK0MyMzc7QzIzNzsxMTA5IDExNkYgMTFBQTtDMjM3OzExMDkgMTE2RiAxMUFBOworQzIzODtDMjM4OzExMDkgMTE2RiAxMUFCO0MyMzg7MTEwOSAxMTZGIDExQUI7CitDMjM5O0MyMzk7MTEwOSAxMTZGIDExQUM7QzIzOTsxMTA5IDExNkYgMTFBQzsKK0MyM0E7QzIzQTsxMTA5IDExNkYgMTFBRDtDMjNBOzExMDkgMTE2RiAxMUFEOworQzIzQjtDMjNCOzExMDkgMTE2RiAxMUFFO0MyM0I7MTEwOSAxMTZGIDExQUU7CitDMjNDO0MyM0M7MTEwOSAxMTZGIDExQUY7QzIzQzsxMTA5IDExNkYgMTFBRjsKK0MyM0Q7QzIzRDsxMTA5IDExNkYgMTFCMDtDMjNEOzExMDkgMTE2RiAxMUIwOworQzIzRTtDMjNFOzExMDkgMTE2RiAxMUIxO0MyM0U7MTEwOSAxMTZGIDExQjE7CitDMjNGO0MyM0Y7MTEwOSAxMTZGIDExQjI7QzIzRjsxMTA5IDExNkYgMTFCMjsKK0MyNDA7QzI0MDsxMTA5IDExNkYgMTFCMztDMjQwOzExMDkgMTE2RiAxMUIzOworQzI0MTtDMjQxOzExMDkgMTE2RiAxMUI0O0MyNDE7MTEwOSAxMTZGIDExQjQ7CitDMjQyO0MyNDI7MTEwOSAxMTZGIDExQjU7QzI0MjsxMTA5IDExNkYgMTFCNTsKK0MyNDM7QzI0MzsxMTA5IDExNkYgMTFCNjtDMjQzOzExMDkgMTE2RiAxMUI2OworQzI0NDtDMjQ0OzExMDkgMTE2RiAxMUI3O0MyNDQ7MTEwOSAxMTZGIDExQjc7CitDMjQ1O0MyNDU7MTEwOSAxMTZGIDExQjg7QzI0NTsxMTA5IDExNkYgMTFCODsKK0MyNDY7QzI0NjsxMTA5IDExNkYgMTFCOTtDMjQ2OzExMDkgMTE2RiAxMUI5OworQzI0NztDMjQ3OzExMDkgMTE2RiAxMUJBO0MyNDc7MTEwOSAxMTZGIDExQkE7CitDMjQ4O0MyNDg7MTEwOSAxMTZGIDExQkI7QzI0ODsxMTA5IDExNkYgMTFCQjsKK0MyNDk7QzI0OTsxMTA5IDExNkYgMTFCQztDMjQ5OzExMDkgMTE2RiAxMUJDOworQzI0QTtDMjRBOzExMDkgMTE2RiAxMUJEO0MyNEE7MTEwOSAxMTZGIDExQkQ7CitDMjRCO0MyNEI7MTEwOSAxMTZGIDExQkU7QzI0QjsxMTA5IDExNkYgMTFCRTsKK0MyNEM7QzI0QzsxMTA5IDExNkYgMTFCRjtDMjRDOzExMDkgMTE2RiAxMUJGOworQzI0RDtDMjREOzExMDkgMTE2RiAxMUMwO0MyNEQ7MTEwOSAxMTZGIDExQzA7CitDMjRFO0MyNEU7MTEwOSAxMTZGIDExQzE7QzI0RTsxMTA5IDExNkYgMTFDMTsKK0MyNEY7QzI0RjsxMTA5IDExNkYgMTFDMjtDMjRGOzExMDkgMTE2RiAxMUMyOworQzI1MDtDMjUwOzExMDkgMTE3MDtDMjUwOzExMDkgMTE3MDsKK0MyNTE7QzI1MTsxMTA5IDExNzAgMTFBODtDMjUxOzExMDkgMTE3MCAxMUE4OworQzI1MjtDMjUyOzExMDkgMTE3MCAxMUE5O0MyNTI7MTEwOSAxMTcwIDExQTk7CitDMjUzO0MyNTM7MTEwOSAxMTcwIDExQUE7QzI1MzsxMTA5IDExNzAgMTFBQTsKK0MyNTQ7QzI1NDsxMTA5IDExNzAgMTFBQjtDMjU0OzExMDkgMTE3MCAxMUFCOworQzI1NTtDMjU1OzExMDkgMTE3MCAxMUFDO0MyNTU7MTEwOSAxMTcwIDExQUM7CitDMjU2O0MyNTY7MTEwOSAxMTcwIDExQUQ7QzI1NjsxMTA5IDExNzAgMTFBRDsKK0MyNTc7QzI1NzsxMTA5IDExNzAgMTFBRTtDMjU3OzExMDkgMTE3MCAxMUFFOworQzI1ODtDMjU4OzExMDkgMTE3MCAxMUFGO0MyNTg7MTEwOSAxMTcwIDExQUY7CitDMjU5O0MyNTk7MTEwOSAxMTcwIDExQjA7QzI1OTsxMTA5IDExNzAgMTFCMDsKK0MyNUE7QzI1QTsxMTA5IDExNzAgMTFCMTtDMjVBOzExMDkgMTE3MCAxMUIxOworQzI1QjtDMjVCOzExMDkgMTE3MCAxMUIyO0MyNUI7MTEwOSAxMTcwIDExQjI7CitDMjVDO0MyNUM7MTEwOSAxMTcwIDExQjM7QzI1QzsxMTA5IDExNzAgMTFCMzsKK0MyNUQ7QzI1RDsxMTA5IDExNzAgMTFCNDtDMjVEOzExMDkgMTE3MCAxMUI0OworQzI1RTtDMjVFOzExMDkgMTE3MCAxMUI1O0MyNUU7MTEwOSAxMTcwIDExQjU7CitDMjVGO0MyNUY7MTEwOSAxMTcwIDExQjY7QzI1RjsxMTA5IDExNzAgMTFCNjsKK0MyNjA7QzI2MDsxMTA5IDExNzAgMTFCNztDMjYwOzExMDkgMTE3MCAxMUI3OworQzI2MTtDMjYxOzExMDkgMTE3MCAxMUI4O0MyNjE7MTEwOSAxMTcwIDExQjg7CitDMjYyO0MyNjI7MTEwOSAxMTcwIDExQjk7QzI2MjsxMTA5IDExNzAgMTFCOTsKK0MyNjM7QzI2MzsxMTA5IDExNzAgMTFCQTtDMjYzOzExMDkgMTE3MCAxMUJBOworQzI2NDtDMjY0OzExMDkgMTE3MCAxMUJCO0MyNjQ7MTEwOSAxMTcwIDExQkI7CitDMjY1O0MyNjU7MTEwOSAxMTcwIDExQkM7QzI2NTsxMTA5IDExNzAgMTFCQzsKK0MyNjY7QzI2NjsxMTA5IDExNzAgMTFCRDtDMjY2OzExMDkgMTE3MCAxMUJEOworQzI2NztDMjY3OzExMDkgMTE3MCAxMUJFO0MyNjc7MTEwOSAxMTcwIDExQkU7CitDMjY4O0MyNjg7MTEwOSAxMTcwIDExQkY7QzI2ODsxMTA5IDExNzAgMTFCRjsKK0MyNjk7QzI2OTsxMTA5IDExNzAgMTFDMDtDMjY5OzExMDkgMTE3MCAxMUMwOworQzI2QTtDMjZBOzExMDkgMTE3MCAxMUMxO0MyNkE7MTEwOSAxMTcwIDExQzE7CitDMjZCO0MyNkI7MTEwOSAxMTcwIDExQzI7QzI2QjsxMTA5IDExNzAgMTFDMjsKK0MyNkM7QzI2QzsxMTA5IDExNzE7QzI2QzsxMTA5IDExNzE7CitDMjZEO0MyNkQ7MTEwOSAxMTcxIDExQTg7QzI2RDsxMTA5IDExNzEgMTFBODsKK0MyNkU7QzI2RTsxMTA5IDExNzEgMTFBOTtDMjZFOzExMDkgMTE3MSAxMUE5OworQzI2RjtDMjZGOzExMDkgMTE3MSAxMUFBO0MyNkY7MTEwOSAxMTcxIDExQUE7CitDMjcwO0MyNzA7MTEwOSAxMTcxIDExQUI7QzI3MDsxMTA5IDExNzEgMTFBQjsKK0MyNzE7QzI3MTsxMTA5IDExNzEgMTFBQztDMjcxOzExMDkgMTE3MSAxMUFDOworQzI3MjtDMjcyOzExMDkgMTE3MSAxMUFEO0MyNzI7MTEwOSAxMTcxIDExQUQ7CitDMjczO0MyNzM7MTEwOSAxMTcxIDExQUU7QzI3MzsxMTA5IDExNzEgMTFBRTsKK0MyNzQ7QzI3NDsxMTA5IDExNzEgMTFBRjtDMjc0OzExMDkgMTE3MSAxMUFGOworQzI3NTtDMjc1OzExMDkgMTE3MSAxMUIwO0MyNzU7MTEwOSAxMTcxIDExQjA7CitDMjc2O0MyNzY7MTEwOSAxMTcxIDExQjE7QzI3NjsxMTA5IDExNzEgMTFCMTsKK0MyNzc7QzI3NzsxMTA5IDExNzEgMTFCMjtDMjc3OzExMDkgMTE3MSAxMUIyOworQzI3ODtDMjc4OzExMDkgMTE3MSAxMUIzO0MyNzg7MTEwOSAxMTcxIDExQjM7CitDMjc5O0MyNzk7MTEwOSAxMTcxIDExQjQ7QzI3OTsxMTA5IDExNzEgMTFCNDsKK0MyN0E7QzI3QTsxMTA5IDExNzEgMTFCNTtDMjdBOzExMDkgMTE3MSAxMUI1OworQzI3QjtDMjdCOzExMDkgMTE3MSAxMUI2O0MyN0I7MTEwOSAxMTcxIDExQjY7CitDMjdDO0MyN0M7MTEwOSAxMTcxIDExQjc7QzI3QzsxMTA5IDExNzEgMTFCNzsKK0MyN0Q7QzI3RDsxMTA5IDExNzEgMTFCODtDMjdEOzExMDkgMTE3MSAxMUI4OworQzI3RTtDMjdFOzExMDkgMTE3MSAxMUI5O0MyN0U7MTEwOSAxMTcxIDExQjk7CitDMjdGO0MyN0Y7MTEwOSAxMTcxIDExQkE7QzI3RjsxMTA5IDExNzEgMTFCQTsKK0MyODA7QzI4MDsxMTA5IDExNzEgMTFCQjtDMjgwOzExMDkgMTE3MSAxMUJCOworQzI4MTtDMjgxOzExMDkgMTE3MSAxMUJDO0MyODE7MTEwOSAxMTcxIDExQkM7CitDMjgyO0MyODI7MTEwOSAxMTcxIDExQkQ7QzI4MjsxMTA5IDExNzEgMTFCRDsKK0MyODM7QzI4MzsxMTA5IDExNzEgMTFCRTtDMjgzOzExMDkgMTE3MSAxMUJFOworQzI4NDtDMjg0OzExMDkgMTE3MSAxMUJGO0MyODQ7MTEwOSAxMTcxIDExQkY7CitDMjg1O0MyODU7MTEwOSAxMTcxIDExQzA7QzI4NTsxMTA5IDExNzEgMTFDMDsKK0MyODY7QzI4NjsxMTA5IDExNzEgMTFDMTtDMjg2OzExMDkgMTE3MSAxMUMxOworQzI4NztDMjg3OzExMDkgMTE3MSAxMUMyO0MyODc7MTEwOSAxMTcxIDExQzI7CitDMjg4O0MyODg7MTEwOSAxMTcyO0MyODg7MTEwOSAxMTcyOworQzI4OTtDMjg5OzExMDkgMTE3MiAxMUE4O0MyODk7MTEwOSAxMTcyIDExQTg7CitDMjhBO0MyOEE7MTEwOSAxMTcyIDExQTk7QzI4QTsxMTA5IDExNzIgMTFBOTsKK0MyOEI7QzI4QjsxMTA5IDExNzIgMTFBQTtDMjhCOzExMDkgMTE3MiAxMUFBOworQzI4QztDMjhDOzExMDkgMTE3MiAxMUFCO0MyOEM7MTEwOSAxMTcyIDExQUI7CitDMjhEO0MyOEQ7MTEwOSAxMTcyIDExQUM7QzI4RDsxMTA5IDExNzIgMTFBQzsKK0MyOEU7QzI4RTsxMTA5IDExNzIgMTFBRDtDMjhFOzExMDkgMTE3MiAxMUFEOworQzI4RjtDMjhGOzExMDkgMTE3MiAxMUFFO0MyOEY7MTEwOSAxMTcyIDExQUU7CitDMjkwO0MyOTA7MTEwOSAxMTcyIDExQUY7QzI5MDsxMTA5IDExNzIgMTFBRjsKK0MyOTE7QzI5MTsxMTA5IDExNzIgMTFCMDtDMjkxOzExMDkgMTE3MiAxMUIwOworQzI5MjtDMjkyOzExMDkgMTE3MiAxMUIxO0MyOTI7MTEwOSAxMTcyIDExQjE7CitDMjkzO0MyOTM7MTEwOSAxMTcyIDExQjI7QzI5MzsxMTA5IDExNzIgMTFCMjsKK0MyOTQ7QzI5NDsxMTA5IDExNzIgMTFCMztDMjk0OzExMDkgMTE3MiAxMUIzOworQzI5NTtDMjk1OzExMDkgMTE3MiAxMUI0O0MyOTU7MTEwOSAxMTcyIDExQjQ7CitDMjk2O0MyOTY7MTEwOSAxMTcyIDExQjU7QzI5NjsxMTA5IDExNzIgMTFCNTsKK0MyOTc7QzI5NzsxMTA5IDExNzIgMTFCNjtDMjk3OzExMDkgMTE3MiAxMUI2OworQzI5ODtDMjk4OzExMDkgMTE3MiAxMUI3O0MyOTg7MTEwOSAxMTcyIDExQjc7CitDMjk5O0MyOTk7MTEwOSAxMTcyIDExQjg7QzI5OTsxMTA5IDExNzIgMTFCODsKK0MyOUE7QzI5QTsxMTA5IDExNzIgMTFCOTtDMjlBOzExMDkgMTE3MiAxMUI5OworQzI5QjtDMjlCOzExMDkgMTE3MiAxMUJBO0MyOUI7MTEwOSAxMTcyIDExQkE7CitDMjlDO0MyOUM7MTEwOSAxMTcyIDExQkI7QzI5QzsxMTA5IDExNzIgMTFCQjsKK0MyOUQ7QzI5RDsxMTA5IDExNzIgMTFCQztDMjlEOzExMDkgMTE3MiAxMUJDOworQzI5RTtDMjlFOzExMDkgMTE3MiAxMUJEO0MyOUU7MTEwOSAxMTcyIDExQkQ7CitDMjlGO0MyOUY7MTEwOSAxMTcyIDExQkU7QzI5RjsxMTA5IDExNzIgMTFCRTsKK0MyQTA7QzJBMDsxMTA5IDExNzIgMTFCRjtDMkEwOzExMDkgMTE3MiAxMUJGOworQzJBMTtDMkExOzExMDkgMTE3MiAxMUMwO0MyQTE7MTEwOSAxMTcyIDExQzA7CitDMkEyO0MyQTI7MTEwOSAxMTcyIDExQzE7QzJBMjsxMTA5IDExNzIgMTFDMTsKK0MyQTM7QzJBMzsxMTA5IDExNzIgMTFDMjtDMkEzOzExMDkgMTE3MiAxMUMyOworQzJBNDtDMkE0OzExMDkgMTE3MztDMkE0OzExMDkgMTE3MzsKK0MyQTU7QzJBNTsxMTA5IDExNzMgMTFBODtDMkE1OzExMDkgMTE3MyAxMUE4OworQzJBNjtDMkE2OzExMDkgMTE3MyAxMUE5O0MyQTY7MTEwOSAxMTczIDExQTk7CitDMkE3O0MyQTc7MTEwOSAxMTczIDExQUE7QzJBNzsxMTA5IDExNzMgMTFBQTsKK0MyQTg7QzJBODsxMTA5IDExNzMgMTFBQjtDMkE4OzExMDkgMTE3MyAxMUFCOworQzJBOTtDMkE5OzExMDkgMTE3MyAxMUFDO0MyQTk7MTEwOSAxMTczIDExQUM7CitDMkFBO0MyQUE7MTEwOSAxMTczIDExQUQ7QzJBQTsxMTA5IDExNzMgMTFBRDsKK0MyQUI7QzJBQjsxMTA5IDExNzMgMTFBRTtDMkFCOzExMDkgMTE3MyAxMUFFOworQzJBQztDMkFDOzExMDkgMTE3MyAxMUFGO0MyQUM7MTEwOSAxMTczIDExQUY7CitDMkFEO0MyQUQ7MTEwOSAxMTczIDExQjA7QzJBRDsxMTA5IDExNzMgMTFCMDsKK0MyQUU7QzJBRTsxMTA5IDExNzMgMTFCMTtDMkFFOzExMDkgMTE3MyAxMUIxOworQzJBRjtDMkFGOzExMDkgMTE3MyAxMUIyO0MyQUY7MTEwOSAxMTczIDExQjI7CitDMkIwO0MyQjA7MTEwOSAxMTczIDExQjM7QzJCMDsxMTA5IDExNzMgMTFCMzsKK0MyQjE7QzJCMTsxMTA5IDExNzMgMTFCNDtDMkIxOzExMDkgMTE3MyAxMUI0OworQzJCMjtDMkIyOzExMDkgMTE3MyAxMUI1O0MyQjI7MTEwOSAxMTczIDExQjU7CitDMkIzO0MyQjM7MTEwOSAxMTczIDExQjY7QzJCMzsxMTA5IDExNzMgMTFCNjsKK0MyQjQ7QzJCNDsxMTA5IDExNzMgMTFCNztDMkI0OzExMDkgMTE3MyAxMUI3OworQzJCNTtDMkI1OzExMDkgMTE3MyAxMUI4O0MyQjU7MTEwOSAxMTczIDExQjg7CitDMkI2O0MyQjY7MTEwOSAxMTczIDExQjk7QzJCNjsxMTA5IDExNzMgMTFCOTsKK0MyQjc7QzJCNzsxMTA5IDExNzMgMTFCQTtDMkI3OzExMDkgMTE3MyAxMUJBOworQzJCODtDMkI4OzExMDkgMTE3MyAxMUJCO0MyQjg7MTEwOSAxMTczIDExQkI7CitDMkI5O0MyQjk7MTEwOSAxMTczIDExQkM7QzJCOTsxMTA5IDExNzMgMTFCQzsKK0MyQkE7QzJCQTsxMTA5IDExNzMgMTFCRDtDMkJBOzExMDkgMTE3MyAxMUJEOworQzJCQjtDMkJCOzExMDkgMTE3MyAxMUJFO0MyQkI7MTEwOSAxMTczIDExQkU7CitDMkJDO0MyQkM7MTEwOSAxMTczIDExQkY7QzJCQzsxMTA5IDExNzMgMTFCRjsKK0MyQkQ7QzJCRDsxMTA5IDExNzMgMTFDMDtDMkJEOzExMDkgMTE3MyAxMUMwOworQzJCRTtDMkJFOzExMDkgMTE3MyAxMUMxO0MyQkU7MTEwOSAxMTczIDExQzE7CitDMkJGO0MyQkY7MTEwOSAxMTczIDExQzI7QzJCRjsxMTA5IDExNzMgMTFDMjsKK0MyQzA7QzJDMDsxMTA5IDExNzQ7QzJDMDsxMTA5IDExNzQ7CitDMkMxO0MyQzE7MTEwOSAxMTc0IDExQTg7QzJDMTsxMTA5IDExNzQgMTFBODsKK0MyQzI7QzJDMjsxMTA5IDExNzQgMTFBOTtDMkMyOzExMDkgMTE3NCAxMUE5OworQzJDMztDMkMzOzExMDkgMTE3NCAxMUFBO0MyQzM7MTEwOSAxMTc0IDExQUE7CitDMkM0O0MyQzQ7MTEwOSAxMTc0IDExQUI7QzJDNDsxMTA5IDExNzQgMTFBQjsKK0MyQzU7QzJDNTsxMTA5IDExNzQgMTFBQztDMkM1OzExMDkgMTE3NCAxMUFDOworQzJDNjtDMkM2OzExMDkgMTE3NCAxMUFEO0MyQzY7MTEwOSAxMTc0IDExQUQ7CitDMkM3O0MyQzc7MTEwOSAxMTc0IDExQUU7QzJDNzsxMTA5IDExNzQgMTFBRTsKK0MyQzg7QzJDODsxMTA5IDExNzQgMTFBRjtDMkM4OzExMDkgMTE3NCAxMUFGOworQzJDOTtDMkM5OzExMDkgMTE3NCAxMUIwO0MyQzk7MTEwOSAxMTc0IDExQjA7CitDMkNBO0MyQ0E7MTEwOSAxMTc0IDExQjE7QzJDQTsxMTA5IDExNzQgMTFCMTsKK0MyQ0I7QzJDQjsxMTA5IDExNzQgMTFCMjtDMkNCOzExMDkgMTE3NCAxMUIyOworQzJDQztDMkNDOzExMDkgMTE3NCAxMUIzO0MyQ0M7MTEwOSAxMTc0IDExQjM7CitDMkNEO0MyQ0Q7MTEwOSAxMTc0IDExQjQ7QzJDRDsxMTA5IDExNzQgMTFCNDsKK0MyQ0U7QzJDRTsxMTA5IDExNzQgMTFCNTtDMkNFOzExMDkgMTE3NCAxMUI1OworQzJDRjtDMkNGOzExMDkgMTE3NCAxMUI2O0MyQ0Y7MTEwOSAxMTc0IDExQjY7CitDMkQwO0MyRDA7MTEwOSAxMTc0IDExQjc7QzJEMDsxMTA5IDExNzQgMTFCNzsKK0MyRDE7QzJEMTsxMTA5IDExNzQgMTFCODtDMkQxOzExMDkgMTE3NCAxMUI4OworQzJEMjtDMkQyOzExMDkgMTE3NCAxMUI5O0MyRDI7MTEwOSAxMTc0IDExQjk7CitDMkQzO0MyRDM7MTEwOSAxMTc0IDExQkE7QzJEMzsxMTA5IDExNzQgMTFCQTsKK0MyRDQ7QzJENDsxMTA5IDExNzQgMTFCQjtDMkQ0OzExMDkgMTE3NCAxMUJCOworQzJENTtDMkQ1OzExMDkgMTE3NCAxMUJDO0MyRDU7MTEwOSAxMTc0IDExQkM7CitDMkQ2O0MyRDY7MTEwOSAxMTc0IDExQkQ7QzJENjsxMTA5IDExNzQgMTFCRDsKK0MyRDc7QzJENzsxMTA5IDExNzQgMTFCRTtDMkQ3OzExMDkgMTE3NCAxMUJFOworQzJEODtDMkQ4OzExMDkgMTE3NCAxMUJGO0MyRDg7MTEwOSAxMTc0IDExQkY7CitDMkQ5O0MyRDk7MTEwOSAxMTc0IDExQzA7QzJEOTsxMTA5IDExNzQgMTFDMDsKK0MyREE7QzJEQTsxMTA5IDExNzQgMTFDMTtDMkRBOzExMDkgMTE3NCAxMUMxOworQzJEQjtDMkRCOzExMDkgMTE3NCAxMUMyO0MyREI7MTEwOSAxMTc0IDExQzI7CitDMkRDO0MyREM7MTEwOSAxMTc1O0MyREM7MTEwOSAxMTc1OworQzJERDtDMkREOzExMDkgMTE3NSAxMUE4O0MyREQ7MTEwOSAxMTc1IDExQTg7CitDMkRFO0MyREU7MTEwOSAxMTc1IDExQTk7QzJERTsxMTA5IDExNzUgMTFBOTsKK0MyREY7QzJERjsxMTA5IDExNzUgMTFBQTtDMkRGOzExMDkgMTE3NSAxMUFBOworQzJFMDtDMkUwOzExMDkgMTE3NSAxMUFCO0MyRTA7MTEwOSAxMTc1IDExQUI7CitDMkUxO0MyRTE7MTEwOSAxMTc1IDExQUM7QzJFMTsxMTA5IDExNzUgMTFBQzsKK0MyRTI7QzJFMjsxMTA5IDExNzUgMTFBRDtDMkUyOzExMDkgMTE3NSAxMUFEOworQzJFMztDMkUzOzExMDkgMTE3NSAxMUFFO0MyRTM7MTEwOSAxMTc1IDExQUU7CitDMkU0O0MyRTQ7MTEwOSAxMTc1IDExQUY7QzJFNDsxMTA5IDExNzUgMTFBRjsKK0MyRTU7QzJFNTsxMTA5IDExNzUgMTFCMDtDMkU1OzExMDkgMTE3NSAxMUIwOworQzJFNjtDMkU2OzExMDkgMTE3NSAxMUIxO0MyRTY7MTEwOSAxMTc1IDExQjE7CitDMkU3O0MyRTc7MTEwOSAxMTc1IDExQjI7QzJFNzsxMTA5IDExNzUgMTFCMjsKK0MyRTg7QzJFODsxMTA5IDExNzUgMTFCMztDMkU4OzExMDkgMTE3NSAxMUIzOworQzJFOTtDMkU5OzExMDkgMTE3NSAxMUI0O0MyRTk7MTEwOSAxMTc1IDExQjQ7CitDMkVBO0MyRUE7MTEwOSAxMTc1IDExQjU7QzJFQTsxMTA5IDExNzUgMTFCNTsKK0MyRUI7QzJFQjsxMTA5IDExNzUgMTFCNjtDMkVCOzExMDkgMTE3NSAxMUI2OworQzJFQztDMkVDOzExMDkgMTE3NSAxMUI3O0MyRUM7MTEwOSAxMTc1IDExQjc7CitDMkVEO0MyRUQ7MTEwOSAxMTc1IDExQjg7QzJFRDsxMTA5IDExNzUgMTFCODsKK0MyRUU7QzJFRTsxMTA5IDExNzUgMTFCOTtDMkVFOzExMDkgMTE3NSAxMUI5OworQzJFRjtDMkVGOzExMDkgMTE3NSAxMUJBO0MyRUY7MTEwOSAxMTc1IDExQkE7CitDMkYwO0MyRjA7MTEwOSAxMTc1IDExQkI7QzJGMDsxMTA5IDExNzUgMTFCQjsKK0MyRjE7QzJGMTsxMTA5IDExNzUgMTFCQztDMkYxOzExMDkgMTE3NSAxMUJDOworQzJGMjtDMkYyOzExMDkgMTE3NSAxMUJEO0MyRjI7MTEwOSAxMTc1IDExQkQ7CitDMkYzO0MyRjM7MTEwOSAxMTc1IDExQkU7QzJGMzsxMTA5IDExNzUgMTFCRTsKK0MyRjQ7QzJGNDsxMTA5IDExNzUgMTFCRjtDMkY0OzExMDkgMTE3NSAxMUJGOworQzJGNTtDMkY1OzExMDkgMTE3NSAxMUMwO0MyRjU7MTEwOSAxMTc1IDExQzA7CitDMkY2O0MyRjY7MTEwOSAxMTc1IDExQzE7QzJGNjsxMTA5IDExNzUgMTFDMTsKK0MyRjc7QzJGNzsxMTA5IDExNzUgMTFDMjtDMkY3OzExMDkgMTE3NSAxMUMyOworQzJGODtDMkY4OzExMEEgMTE2MTtDMkY4OzExMEEgMTE2MTsKK0MyRjk7QzJGOTsxMTBBIDExNjEgMTFBODtDMkY5OzExMEEgMTE2MSAxMUE4OworQzJGQTtDMkZBOzExMEEgMTE2MSAxMUE5O0MyRkE7MTEwQSAxMTYxIDExQTk7CitDMkZCO0MyRkI7MTEwQSAxMTYxIDExQUE7QzJGQjsxMTBBIDExNjEgMTFBQTsKK0MyRkM7QzJGQzsxMTBBIDExNjEgMTFBQjtDMkZDOzExMEEgMTE2MSAxMUFCOworQzJGRDtDMkZEOzExMEEgMTE2MSAxMUFDO0MyRkQ7MTEwQSAxMTYxIDExQUM7CitDMkZFO0MyRkU7MTEwQSAxMTYxIDExQUQ7QzJGRTsxMTBBIDExNjEgMTFBRDsKK0MyRkY7QzJGRjsxMTBBIDExNjEgMTFBRTtDMkZGOzExMEEgMTE2MSAxMUFFOworQzMwMDtDMzAwOzExMEEgMTE2MSAxMUFGO0MzMDA7MTEwQSAxMTYxIDExQUY7CitDMzAxO0MzMDE7MTEwQSAxMTYxIDExQjA7QzMwMTsxMTBBIDExNjEgMTFCMDsKK0MzMDI7QzMwMjsxMTBBIDExNjEgMTFCMTtDMzAyOzExMEEgMTE2MSAxMUIxOworQzMwMztDMzAzOzExMEEgMTE2MSAxMUIyO0MzMDM7MTEwQSAxMTYxIDExQjI7CitDMzA0O0MzMDQ7MTEwQSAxMTYxIDExQjM7QzMwNDsxMTBBIDExNjEgMTFCMzsKK0MzMDU7QzMwNTsxMTBBIDExNjEgMTFCNDtDMzA1OzExMEEgMTE2MSAxMUI0OworQzMwNjtDMzA2OzExMEEgMTE2MSAxMUI1O0MzMDY7MTEwQSAxMTYxIDExQjU7CitDMzA3O0MzMDc7MTEwQSAxMTYxIDExQjY7QzMwNzsxMTBBIDExNjEgMTFCNjsKK0MzMDg7QzMwODsxMTBBIDExNjEgMTFCNztDMzA4OzExMEEgMTE2MSAxMUI3OworQzMwOTtDMzA5OzExMEEgMTE2MSAxMUI4O0MzMDk7MTEwQSAxMTYxIDExQjg7CitDMzBBO0MzMEE7MTEwQSAxMTYxIDExQjk7QzMwQTsxMTBBIDExNjEgMTFCOTsKK0MzMEI7QzMwQjsxMTBBIDExNjEgMTFCQTtDMzBCOzExMEEgMTE2MSAxMUJBOworQzMwQztDMzBDOzExMEEgMTE2MSAxMUJCO0MzMEM7MTEwQSAxMTYxIDExQkI7CitDMzBEO0MzMEQ7MTEwQSAxMTYxIDExQkM7QzMwRDsxMTBBIDExNjEgMTFCQzsKK0MzMEU7QzMwRTsxMTBBIDExNjEgMTFCRDtDMzBFOzExMEEgMTE2MSAxMUJEOworQzMwRjtDMzBGOzExMEEgMTE2MSAxMUJFO0MzMEY7MTEwQSAxMTYxIDExQkU7CitDMzEwO0MzMTA7MTEwQSAxMTYxIDExQkY7QzMxMDsxMTBBIDExNjEgMTFCRjsKK0MzMTE7QzMxMTsxMTBBIDExNjEgMTFDMDtDMzExOzExMEEgMTE2MSAxMUMwOworQzMxMjtDMzEyOzExMEEgMTE2MSAxMUMxO0MzMTI7MTEwQSAxMTYxIDExQzE7CitDMzEzO0MzMTM7MTEwQSAxMTYxIDExQzI7QzMxMzsxMTBBIDExNjEgMTFDMjsKK0MzMTQ7QzMxNDsxMTBBIDExNjI7QzMxNDsxMTBBIDExNjI7CitDMzE1O0MzMTU7MTEwQSAxMTYyIDExQTg7QzMxNTsxMTBBIDExNjIgMTFBODsKK0MzMTY7QzMxNjsxMTBBIDExNjIgMTFBOTtDMzE2OzExMEEgMTE2MiAxMUE5OworQzMxNztDMzE3OzExMEEgMTE2MiAxMUFBO0MzMTc7MTEwQSAxMTYyIDExQUE7CitDMzE4O0MzMTg7MTEwQSAxMTYyIDExQUI7QzMxODsxMTBBIDExNjIgMTFBQjsKK0MzMTk7QzMxOTsxMTBBIDExNjIgMTFBQztDMzE5OzExMEEgMTE2MiAxMUFDOworQzMxQTtDMzFBOzExMEEgMTE2MiAxMUFEO0MzMUE7MTEwQSAxMTYyIDExQUQ7CitDMzFCO0MzMUI7MTEwQSAxMTYyIDExQUU7QzMxQjsxMTBBIDExNjIgMTFBRTsKK0MzMUM7QzMxQzsxMTBBIDExNjIgMTFBRjtDMzFDOzExMEEgMTE2MiAxMUFGOworQzMxRDtDMzFEOzExMEEgMTE2MiAxMUIwO0MzMUQ7MTEwQSAxMTYyIDExQjA7CitDMzFFO0MzMUU7MTEwQSAxMTYyIDExQjE7QzMxRTsxMTBBIDExNjIgMTFCMTsKK0MzMUY7QzMxRjsxMTBBIDExNjIgMTFCMjtDMzFGOzExMEEgMTE2MiAxMUIyOworQzMyMDtDMzIwOzExMEEgMTE2MiAxMUIzO0MzMjA7MTEwQSAxMTYyIDExQjM7CitDMzIxO0MzMjE7MTEwQSAxMTYyIDExQjQ7QzMyMTsxMTBBIDExNjIgMTFCNDsKK0MzMjI7QzMyMjsxMTBBIDExNjIgMTFCNTtDMzIyOzExMEEgMTE2MiAxMUI1OworQzMyMztDMzIzOzExMEEgMTE2MiAxMUI2O0MzMjM7MTEwQSAxMTYyIDExQjY7CitDMzI0O0MzMjQ7MTEwQSAxMTYyIDExQjc7QzMyNDsxMTBBIDExNjIgMTFCNzsKK0MzMjU7QzMyNTsxMTBBIDExNjIgMTFCODtDMzI1OzExMEEgMTE2MiAxMUI4OworQzMyNjtDMzI2OzExMEEgMTE2MiAxMUI5O0MzMjY7MTEwQSAxMTYyIDExQjk7CitDMzI3O0MzMjc7MTEwQSAxMTYyIDExQkE7QzMyNzsxMTBBIDExNjIgMTFCQTsKK0MzMjg7QzMyODsxMTBBIDExNjIgMTFCQjtDMzI4OzExMEEgMTE2MiAxMUJCOworQzMyOTtDMzI5OzExMEEgMTE2MiAxMUJDO0MzMjk7MTEwQSAxMTYyIDExQkM7CitDMzJBO0MzMkE7MTEwQSAxMTYyIDExQkQ7QzMyQTsxMTBBIDExNjIgMTFCRDsKK0MzMkI7QzMyQjsxMTBBIDExNjIgMTFCRTtDMzJCOzExMEEgMTE2MiAxMUJFOworQzMyQztDMzJDOzExMEEgMTE2MiAxMUJGO0MzMkM7MTEwQSAxMTYyIDExQkY7CitDMzJEO0MzMkQ7MTEwQSAxMTYyIDExQzA7QzMyRDsxMTBBIDExNjIgMTFDMDsKK0MzMkU7QzMyRTsxMTBBIDExNjIgMTFDMTtDMzJFOzExMEEgMTE2MiAxMUMxOworQzMyRjtDMzJGOzExMEEgMTE2MiAxMUMyO0MzMkY7MTEwQSAxMTYyIDExQzI7CitDMzMwO0MzMzA7MTEwQSAxMTYzO0MzMzA7MTEwQSAxMTYzOworQzMzMTtDMzMxOzExMEEgMTE2MyAxMUE4O0MzMzE7MTEwQSAxMTYzIDExQTg7CitDMzMyO0MzMzI7MTEwQSAxMTYzIDExQTk7QzMzMjsxMTBBIDExNjMgMTFBOTsKK0MzMzM7QzMzMzsxMTBBIDExNjMgMTFBQTtDMzMzOzExMEEgMTE2MyAxMUFBOworQzMzNDtDMzM0OzExMEEgMTE2MyAxMUFCO0MzMzQ7MTEwQSAxMTYzIDExQUI7CitDMzM1O0MzMzU7MTEwQSAxMTYzIDExQUM7QzMzNTsxMTBBIDExNjMgMTFBQzsKK0MzMzY7QzMzNjsxMTBBIDExNjMgMTFBRDtDMzM2OzExMEEgMTE2MyAxMUFEOworQzMzNztDMzM3OzExMEEgMTE2MyAxMUFFO0MzMzc7MTEwQSAxMTYzIDExQUU7CitDMzM4O0MzMzg7MTEwQSAxMTYzIDExQUY7QzMzODsxMTBBIDExNjMgMTFBRjsKK0MzMzk7QzMzOTsxMTBBIDExNjMgMTFCMDtDMzM5OzExMEEgMTE2MyAxMUIwOworQzMzQTtDMzNBOzExMEEgMTE2MyAxMUIxO0MzM0E7MTEwQSAxMTYzIDExQjE7CitDMzNCO0MzM0I7MTEwQSAxMTYzIDExQjI7QzMzQjsxMTBBIDExNjMgMTFCMjsKK0MzM0M7QzMzQzsxMTBBIDExNjMgMTFCMztDMzNDOzExMEEgMTE2MyAxMUIzOworQzMzRDtDMzNEOzExMEEgMTE2MyAxMUI0O0MzM0Q7MTEwQSAxMTYzIDExQjQ7CitDMzNFO0MzM0U7MTEwQSAxMTYzIDExQjU7QzMzRTsxMTBBIDExNjMgMTFCNTsKK0MzM0Y7QzMzRjsxMTBBIDExNjMgMTFCNjtDMzNGOzExMEEgMTE2MyAxMUI2OworQzM0MDtDMzQwOzExMEEgMTE2MyAxMUI3O0MzNDA7MTEwQSAxMTYzIDExQjc7CitDMzQxO0MzNDE7MTEwQSAxMTYzIDExQjg7QzM0MTsxMTBBIDExNjMgMTFCODsKK0MzNDI7QzM0MjsxMTBBIDExNjMgMTFCOTtDMzQyOzExMEEgMTE2MyAxMUI5OworQzM0MztDMzQzOzExMEEgMTE2MyAxMUJBO0MzNDM7MTEwQSAxMTYzIDExQkE7CitDMzQ0O0MzNDQ7MTEwQSAxMTYzIDExQkI7QzM0NDsxMTBBIDExNjMgMTFCQjsKK0MzNDU7QzM0NTsxMTBBIDExNjMgMTFCQztDMzQ1OzExMEEgMTE2MyAxMUJDOworQzM0NjtDMzQ2OzExMEEgMTE2MyAxMUJEO0MzNDY7MTEwQSAxMTYzIDExQkQ7CitDMzQ3O0MzNDc7MTEwQSAxMTYzIDExQkU7QzM0NzsxMTBBIDExNjMgMTFCRTsKK0MzNDg7QzM0ODsxMTBBIDExNjMgMTFCRjtDMzQ4OzExMEEgMTE2MyAxMUJGOworQzM0OTtDMzQ5OzExMEEgMTE2MyAxMUMwO0MzNDk7MTEwQSAxMTYzIDExQzA7CitDMzRBO0MzNEE7MTEwQSAxMTYzIDExQzE7QzM0QTsxMTBBIDExNjMgMTFDMTsKK0MzNEI7QzM0QjsxMTBBIDExNjMgMTFDMjtDMzRCOzExMEEgMTE2MyAxMUMyOworQzM0QztDMzRDOzExMEEgMTE2NDtDMzRDOzExMEEgMTE2NDsKK0MzNEQ7QzM0RDsxMTBBIDExNjQgMTFBODtDMzREOzExMEEgMTE2NCAxMUE4OworQzM0RTtDMzRFOzExMEEgMTE2NCAxMUE5O0MzNEU7MTEwQSAxMTY0IDExQTk7CitDMzRGO0MzNEY7MTEwQSAxMTY0IDExQUE7QzM0RjsxMTBBIDExNjQgMTFBQTsKK0MzNTA7QzM1MDsxMTBBIDExNjQgMTFBQjtDMzUwOzExMEEgMTE2NCAxMUFCOworQzM1MTtDMzUxOzExMEEgMTE2NCAxMUFDO0MzNTE7MTEwQSAxMTY0IDExQUM7CitDMzUyO0MzNTI7MTEwQSAxMTY0IDExQUQ7QzM1MjsxMTBBIDExNjQgMTFBRDsKK0MzNTM7QzM1MzsxMTBBIDExNjQgMTFBRTtDMzUzOzExMEEgMTE2NCAxMUFFOworQzM1NDtDMzU0OzExMEEgMTE2NCAxMUFGO0MzNTQ7MTEwQSAxMTY0IDExQUY7CitDMzU1O0MzNTU7MTEwQSAxMTY0IDExQjA7QzM1NTsxMTBBIDExNjQgMTFCMDsKK0MzNTY7QzM1NjsxMTBBIDExNjQgMTFCMTtDMzU2OzExMEEgMTE2NCAxMUIxOworQzM1NztDMzU3OzExMEEgMTE2NCAxMUIyO0MzNTc7MTEwQSAxMTY0IDExQjI7CitDMzU4O0MzNTg7MTEwQSAxMTY0IDExQjM7QzM1ODsxMTBBIDExNjQgMTFCMzsKK0MzNTk7QzM1OTsxMTBBIDExNjQgMTFCNDtDMzU5OzExMEEgMTE2NCAxMUI0OworQzM1QTtDMzVBOzExMEEgMTE2NCAxMUI1O0MzNUE7MTEwQSAxMTY0IDExQjU7CitDMzVCO0MzNUI7MTEwQSAxMTY0IDExQjY7QzM1QjsxMTBBIDExNjQgMTFCNjsKK0MzNUM7QzM1QzsxMTBBIDExNjQgMTFCNztDMzVDOzExMEEgMTE2NCAxMUI3OworQzM1RDtDMzVEOzExMEEgMTE2NCAxMUI4O0MzNUQ7MTEwQSAxMTY0IDExQjg7CitDMzVFO0MzNUU7MTEwQSAxMTY0IDExQjk7QzM1RTsxMTBBIDExNjQgMTFCOTsKK0MzNUY7QzM1RjsxMTBBIDExNjQgMTFCQTtDMzVGOzExMEEgMTE2NCAxMUJBOworQzM2MDtDMzYwOzExMEEgMTE2NCAxMUJCO0MzNjA7MTEwQSAxMTY0IDExQkI7CitDMzYxO0MzNjE7MTEwQSAxMTY0IDExQkM7QzM2MTsxMTBBIDExNjQgMTFCQzsKK0MzNjI7QzM2MjsxMTBBIDExNjQgMTFCRDtDMzYyOzExMEEgMTE2NCAxMUJEOworQzM2MztDMzYzOzExMEEgMTE2NCAxMUJFO0MzNjM7MTEwQSAxMTY0IDExQkU7CitDMzY0O0MzNjQ7MTEwQSAxMTY0IDExQkY7QzM2NDsxMTBBIDExNjQgMTFCRjsKK0MzNjU7QzM2NTsxMTBBIDExNjQgMTFDMDtDMzY1OzExMEEgMTE2NCAxMUMwOworQzM2NjtDMzY2OzExMEEgMTE2NCAxMUMxO0MzNjY7MTEwQSAxMTY0IDExQzE7CitDMzY3O0MzNjc7MTEwQSAxMTY0IDExQzI7QzM2NzsxMTBBIDExNjQgMTFDMjsKK0MzNjg7QzM2ODsxMTBBIDExNjU7QzM2ODsxMTBBIDExNjU7CitDMzY5O0MzNjk7MTEwQSAxMTY1IDExQTg7QzM2OTsxMTBBIDExNjUgMTFBODsKK0MzNkE7QzM2QTsxMTBBIDExNjUgMTFBOTtDMzZBOzExMEEgMTE2NSAxMUE5OworQzM2QjtDMzZCOzExMEEgMTE2NSAxMUFBO0MzNkI7MTEwQSAxMTY1IDExQUE7CitDMzZDO0MzNkM7MTEwQSAxMTY1IDExQUI7QzM2QzsxMTBBIDExNjUgMTFBQjsKK0MzNkQ7QzM2RDsxMTBBIDExNjUgMTFBQztDMzZEOzExMEEgMTE2NSAxMUFDOworQzM2RTtDMzZFOzExMEEgMTE2NSAxMUFEO0MzNkU7MTEwQSAxMTY1IDExQUQ7CitDMzZGO0MzNkY7MTEwQSAxMTY1IDExQUU7QzM2RjsxMTBBIDExNjUgMTFBRTsKK0MzNzA7QzM3MDsxMTBBIDExNjUgMTFBRjtDMzcwOzExMEEgMTE2NSAxMUFGOworQzM3MTtDMzcxOzExMEEgMTE2NSAxMUIwO0MzNzE7MTEwQSAxMTY1IDExQjA7CitDMzcyO0MzNzI7MTEwQSAxMTY1IDExQjE7QzM3MjsxMTBBIDExNjUgMTFCMTsKK0MzNzM7QzM3MzsxMTBBIDExNjUgMTFCMjtDMzczOzExMEEgMTE2NSAxMUIyOworQzM3NDtDMzc0OzExMEEgMTE2NSAxMUIzO0MzNzQ7MTEwQSAxMTY1IDExQjM7CitDMzc1O0MzNzU7MTEwQSAxMTY1IDExQjQ7QzM3NTsxMTBBIDExNjUgMTFCNDsKK0MzNzY7QzM3NjsxMTBBIDExNjUgMTFCNTtDMzc2OzExMEEgMTE2NSAxMUI1OworQzM3NztDMzc3OzExMEEgMTE2NSAxMUI2O0MzNzc7MTEwQSAxMTY1IDExQjY7CitDMzc4O0MzNzg7MTEwQSAxMTY1IDExQjc7QzM3ODsxMTBBIDExNjUgMTFCNzsKK0MzNzk7QzM3OTsxMTBBIDExNjUgMTFCODtDMzc5OzExMEEgMTE2NSAxMUI4OworQzM3QTtDMzdBOzExMEEgMTE2NSAxMUI5O0MzN0E7MTEwQSAxMTY1IDExQjk7CitDMzdCO0MzN0I7MTEwQSAxMTY1IDExQkE7QzM3QjsxMTBBIDExNjUgMTFCQTsKK0MzN0M7QzM3QzsxMTBBIDExNjUgMTFCQjtDMzdDOzExMEEgMTE2NSAxMUJCOworQzM3RDtDMzdEOzExMEEgMTE2NSAxMUJDO0MzN0Q7MTEwQSAxMTY1IDExQkM7CitDMzdFO0MzN0U7MTEwQSAxMTY1IDExQkQ7QzM3RTsxMTBBIDExNjUgMTFCRDsKK0MzN0Y7QzM3RjsxMTBBIDExNjUgMTFCRTtDMzdGOzExMEEgMTE2NSAxMUJFOworQzM4MDtDMzgwOzExMEEgMTE2NSAxMUJGO0MzODA7MTEwQSAxMTY1IDExQkY7CitDMzgxO0MzODE7MTEwQSAxMTY1IDExQzA7QzM4MTsxMTBBIDExNjUgMTFDMDsKK0MzODI7QzM4MjsxMTBBIDExNjUgMTFDMTtDMzgyOzExMEEgMTE2NSAxMUMxOworQzM4MztDMzgzOzExMEEgMTE2NSAxMUMyO0MzODM7MTEwQSAxMTY1IDExQzI7CitDMzg0O0MzODQ7MTEwQSAxMTY2O0MzODQ7MTEwQSAxMTY2OworQzM4NTtDMzg1OzExMEEgMTE2NiAxMUE4O0MzODU7MTEwQSAxMTY2IDExQTg7CitDMzg2O0MzODY7MTEwQSAxMTY2IDExQTk7QzM4NjsxMTBBIDExNjYgMTFBOTsKK0MzODc7QzM4NzsxMTBBIDExNjYgMTFBQTtDMzg3OzExMEEgMTE2NiAxMUFBOworQzM4ODtDMzg4OzExMEEgMTE2NiAxMUFCO0MzODg7MTEwQSAxMTY2IDExQUI7CitDMzg5O0MzODk7MTEwQSAxMTY2IDExQUM7QzM4OTsxMTBBIDExNjYgMTFBQzsKK0MzOEE7QzM4QTsxMTBBIDExNjYgMTFBRDtDMzhBOzExMEEgMTE2NiAxMUFEOworQzM4QjtDMzhCOzExMEEgMTE2NiAxMUFFO0MzOEI7MTEwQSAxMTY2IDExQUU7CitDMzhDO0MzOEM7MTEwQSAxMTY2IDExQUY7QzM4QzsxMTBBIDExNjYgMTFBRjsKK0MzOEQ7QzM4RDsxMTBBIDExNjYgMTFCMDtDMzhEOzExMEEgMTE2NiAxMUIwOworQzM4RTtDMzhFOzExMEEgMTE2NiAxMUIxO0MzOEU7MTEwQSAxMTY2IDExQjE7CitDMzhGO0MzOEY7MTEwQSAxMTY2IDExQjI7QzM4RjsxMTBBIDExNjYgMTFCMjsKK0MzOTA7QzM5MDsxMTBBIDExNjYgMTFCMztDMzkwOzExMEEgMTE2NiAxMUIzOworQzM5MTtDMzkxOzExMEEgMTE2NiAxMUI0O0MzOTE7MTEwQSAxMTY2IDExQjQ7CitDMzkyO0MzOTI7MTEwQSAxMTY2IDExQjU7QzM5MjsxMTBBIDExNjYgMTFCNTsKK0MzOTM7QzM5MzsxMTBBIDExNjYgMTFCNjtDMzkzOzExMEEgMTE2NiAxMUI2OworQzM5NDtDMzk0OzExMEEgMTE2NiAxMUI3O0MzOTQ7MTEwQSAxMTY2IDExQjc7CitDMzk1O0MzOTU7MTEwQSAxMTY2IDExQjg7QzM5NTsxMTBBIDExNjYgMTFCODsKK0MzOTY7QzM5NjsxMTBBIDExNjYgMTFCOTtDMzk2OzExMEEgMTE2NiAxMUI5OworQzM5NztDMzk3OzExMEEgMTE2NiAxMUJBO0MzOTc7MTEwQSAxMTY2IDExQkE7CitDMzk4O0MzOTg7MTEwQSAxMTY2IDExQkI7QzM5ODsxMTBBIDExNjYgMTFCQjsKK0MzOTk7QzM5OTsxMTBBIDExNjYgMTFCQztDMzk5OzExMEEgMTE2NiAxMUJDOworQzM5QTtDMzlBOzExMEEgMTE2NiAxMUJEO0MzOUE7MTEwQSAxMTY2IDExQkQ7CitDMzlCO0MzOUI7MTEwQSAxMTY2IDExQkU7QzM5QjsxMTBBIDExNjYgMTFCRTsKK0MzOUM7QzM5QzsxMTBBIDExNjYgMTFCRjtDMzlDOzExMEEgMTE2NiAxMUJGOworQzM5RDtDMzlEOzExMEEgMTE2NiAxMUMwO0MzOUQ7MTEwQSAxMTY2IDExQzA7CitDMzlFO0MzOUU7MTEwQSAxMTY2IDExQzE7QzM5RTsxMTBBIDExNjYgMTFDMTsKK0MzOUY7QzM5RjsxMTBBIDExNjYgMTFDMjtDMzlGOzExMEEgMTE2NiAxMUMyOworQzNBMDtDM0EwOzExMEEgMTE2NztDM0EwOzExMEEgMTE2NzsKK0MzQTE7QzNBMTsxMTBBIDExNjcgMTFBODtDM0ExOzExMEEgMTE2NyAxMUE4OworQzNBMjtDM0EyOzExMEEgMTE2NyAxMUE5O0MzQTI7MTEwQSAxMTY3IDExQTk7CitDM0EzO0MzQTM7MTEwQSAxMTY3IDExQUE7QzNBMzsxMTBBIDExNjcgMTFBQTsKK0MzQTQ7QzNBNDsxMTBBIDExNjcgMTFBQjtDM0E0OzExMEEgMTE2NyAxMUFCOworQzNBNTtDM0E1OzExMEEgMTE2NyAxMUFDO0MzQTU7MTEwQSAxMTY3IDExQUM7CitDM0E2O0MzQTY7MTEwQSAxMTY3IDExQUQ7QzNBNjsxMTBBIDExNjcgMTFBRDsKK0MzQTc7QzNBNzsxMTBBIDExNjcgMTFBRTtDM0E3OzExMEEgMTE2NyAxMUFFOworQzNBODtDM0E4OzExMEEgMTE2NyAxMUFGO0MzQTg7MTEwQSAxMTY3IDExQUY7CitDM0E5O0MzQTk7MTEwQSAxMTY3IDExQjA7QzNBOTsxMTBBIDExNjcgMTFCMDsKK0MzQUE7QzNBQTsxMTBBIDExNjcgMTFCMTtDM0FBOzExMEEgMTE2NyAxMUIxOworQzNBQjtDM0FCOzExMEEgMTE2NyAxMUIyO0MzQUI7MTEwQSAxMTY3IDExQjI7CitDM0FDO0MzQUM7MTEwQSAxMTY3IDExQjM7QzNBQzsxMTBBIDExNjcgMTFCMzsKK0MzQUQ7QzNBRDsxMTBBIDExNjcgMTFCNDtDM0FEOzExMEEgMTE2NyAxMUI0OworQzNBRTtDM0FFOzExMEEgMTE2NyAxMUI1O0MzQUU7MTEwQSAxMTY3IDExQjU7CitDM0FGO0MzQUY7MTEwQSAxMTY3IDExQjY7QzNBRjsxMTBBIDExNjcgMTFCNjsKK0MzQjA7QzNCMDsxMTBBIDExNjcgMTFCNztDM0IwOzExMEEgMTE2NyAxMUI3OworQzNCMTtDM0IxOzExMEEgMTE2NyAxMUI4O0MzQjE7MTEwQSAxMTY3IDExQjg7CitDM0IyO0MzQjI7MTEwQSAxMTY3IDExQjk7QzNCMjsxMTBBIDExNjcgMTFCOTsKK0MzQjM7QzNCMzsxMTBBIDExNjcgMTFCQTtDM0IzOzExMEEgMTE2NyAxMUJBOworQzNCNDtDM0I0OzExMEEgMTE2NyAxMUJCO0MzQjQ7MTEwQSAxMTY3IDExQkI7CitDM0I1O0MzQjU7MTEwQSAxMTY3IDExQkM7QzNCNTsxMTBBIDExNjcgMTFCQzsKK0MzQjY7QzNCNjsxMTBBIDExNjcgMTFCRDtDM0I2OzExMEEgMTE2NyAxMUJEOworQzNCNztDM0I3OzExMEEgMTE2NyAxMUJFO0MzQjc7MTEwQSAxMTY3IDExQkU7CitDM0I4O0MzQjg7MTEwQSAxMTY3IDExQkY7QzNCODsxMTBBIDExNjcgMTFCRjsKK0MzQjk7QzNCOTsxMTBBIDExNjcgMTFDMDtDM0I5OzExMEEgMTE2NyAxMUMwOworQzNCQTtDM0JBOzExMEEgMTE2NyAxMUMxO0MzQkE7MTEwQSAxMTY3IDExQzE7CitDM0JCO0MzQkI7MTEwQSAxMTY3IDExQzI7QzNCQjsxMTBBIDExNjcgMTFDMjsKK0MzQkM7QzNCQzsxMTBBIDExNjg7QzNCQzsxMTBBIDExNjg7CitDM0JEO0MzQkQ7MTEwQSAxMTY4IDExQTg7QzNCRDsxMTBBIDExNjggMTFBODsKK0MzQkU7QzNCRTsxMTBBIDExNjggMTFBOTtDM0JFOzExMEEgMTE2OCAxMUE5OworQzNCRjtDM0JGOzExMEEgMTE2OCAxMUFBO0MzQkY7MTEwQSAxMTY4IDExQUE7CitDM0MwO0MzQzA7MTEwQSAxMTY4IDExQUI7QzNDMDsxMTBBIDExNjggMTFBQjsKK0MzQzE7QzNDMTsxMTBBIDExNjggMTFBQztDM0MxOzExMEEgMTE2OCAxMUFDOworQzNDMjtDM0MyOzExMEEgMTE2OCAxMUFEO0MzQzI7MTEwQSAxMTY4IDExQUQ7CitDM0MzO0MzQzM7MTEwQSAxMTY4IDExQUU7QzNDMzsxMTBBIDExNjggMTFBRTsKK0MzQzQ7QzNDNDsxMTBBIDExNjggMTFBRjtDM0M0OzExMEEgMTE2OCAxMUFGOworQzNDNTtDM0M1OzExMEEgMTE2OCAxMUIwO0MzQzU7MTEwQSAxMTY4IDExQjA7CitDM0M2O0MzQzY7MTEwQSAxMTY4IDExQjE7QzNDNjsxMTBBIDExNjggMTFCMTsKK0MzQzc7QzNDNzsxMTBBIDExNjggMTFCMjtDM0M3OzExMEEgMTE2OCAxMUIyOworQzNDODtDM0M4OzExMEEgMTE2OCAxMUIzO0MzQzg7MTEwQSAxMTY4IDExQjM7CitDM0M5O0MzQzk7MTEwQSAxMTY4IDExQjQ7QzNDOTsxMTBBIDExNjggMTFCNDsKK0MzQ0E7QzNDQTsxMTBBIDExNjggMTFCNTtDM0NBOzExMEEgMTE2OCAxMUI1OworQzNDQjtDM0NCOzExMEEgMTE2OCAxMUI2O0MzQ0I7MTEwQSAxMTY4IDExQjY7CitDM0NDO0MzQ0M7MTEwQSAxMTY4IDExQjc7QzNDQzsxMTBBIDExNjggMTFCNzsKK0MzQ0Q7QzNDRDsxMTBBIDExNjggMTFCODtDM0NEOzExMEEgMTE2OCAxMUI4OworQzNDRTtDM0NFOzExMEEgMTE2OCAxMUI5O0MzQ0U7MTEwQSAxMTY4IDExQjk7CitDM0NGO0MzQ0Y7MTEwQSAxMTY4IDExQkE7QzNDRjsxMTBBIDExNjggMTFCQTsKK0MzRDA7QzNEMDsxMTBBIDExNjggMTFCQjtDM0QwOzExMEEgMTE2OCAxMUJCOworQzNEMTtDM0QxOzExMEEgMTE2OCAxMUJDO0MzRDE7MTEwQSAxMTY4IDExQkM7CitDM0QyO0MzRDI7MTEwQSAxMTY4IDExQkQ7QzNEMjsxMTBBIDExNjggMTFCRDsKK0MzRDM7QzNEMzsxMTBBIDExNjggMTFCRTtDM0QzOzExMEEgMTE2OCAxMUJFOworQzNENDtDM0Q0OzExMEEgMTE2OCAxMUJGO0MzRDQ7MTEwQSAxMTY4IDExQkY7CitDM0Q1O0MzRDU7MTEwQSAxMTY4IDExQzA7QzNENTsxMTBBIDExNjggMTFDMDsKK0MzRDY7QzNENjsxMTBBIDExNjggMTFDMTtDM0Q2OzExMEEgMTE2OCAxMUMxOworQzNENztDM0Q3OzExMEEgMTE2OCAxMUMyO0MzRDc7MTEwQSAxMTY4IDExQzI7CitDM0Q4O0MzRDg7MTEwQSAxMTY5O0MzRDg7MTEwQSAxMTY5OworQzNEOTtDM0Q5OzExMEEgMTE2OSAxMUE4O0MzRDk7MTEwQSAxMTY5IDExQTg7CitDM0RBO0MzREE7MTEwQSAxMTY5IDExQTk7QzNEQTsxMTBBIDExNjkgMTFBOTsKK0MzREI7QzNEQjsxMTBBIDExNjkgMTFBQTtDM0RCOzExMEEgMTE2OSAxMUFBOworQzNEQztDM0RDOzExMEEgMTE2OSAxMUFCO0MzREM7MTEwQSAxMTY5IDExQUI7CitDM0REO0MzREQ7MTEwQSAxMTY5IDExQUM7QzNERDsxMTBBIDExNjkgMTFBQzsKK0MzREU7QzNERTsxMTBBIDExNjkgMTFBRDtDM0RFOzExMEEgMTE2OSAxMUFEOworQzNERjtDM0RGOzExMEEgMTE2OSAxMUFFO0MzREY7MTEwQSAxMTY5IDExQUU7CitDM0UwO0MzRTA7MTEwQSAxMTY5IDExQUY7QzNFMDsxMTBBIDExNjkgMTFBRjsKK0MzRTE7QzNFMTsxMTBBIDExNjkgMTFCMDtDM0UxOzExMEEgMTE2OSAxMUIwOworQzNFMjtDM0UyOzExMEEgMTE2OSAxMUIxO0MzRTI7MTEwQSAxMTY5IDExQjE7CitDM0UzO0MzRTM7MTEwQSAxMTY5IDExQjI7QzNFMzsxMTBBIDExNjkgMTFCMjsKK0MzRTQ7QzNFNDsxMTBBIDExNjkgMTFCMztDM0U0OzExMEEgMTE2OSAxMUIzOworQzNFNTtDM0U1OzExMEEgMTE2OSAxMUI0O0MzRTU7MTEwQSAxMTY5IDExQjQ7CitDM0U2O0MzRTY7MTEwQSAxMTY5IDExQjU7QzNFNjsxMTBBIDExNjkgMTFCNTsKK0MzRTc7QzNFNzsxMTBBIDExNjkgMTFCNjtDM0U3OzExMEEgMTE2OSAxMUI2OworQzNFODtDM0U4OzExMEEgMTE2OSAxMUI3O0MzRTg7MTEwQSAxMTY5IDExQjc7CitDM0U5O0MzRTk7MTEwQSAxMTY5IDExQjg7QzNFOTsxMTBBIDExNjkgMTFCODsKK0MzRUE7QzNFQTsxMTBBIDExNjkgMTFCOTtDM0VBOzExMEEgMTE2OSAxMUI5OworQzNFQjtDM0VCOzExMEEgMTE2OSAxMUJBO0MzRUI7MTEwQSAxMTY5IDExQkE7CitDM0VDO0MzRUM7MTEwQSAxMTY5IDExQkI7QzNFQzsxMTBBIDExNjkgMTFCQjsKK0MzRUQ7QzNFRDsxMTBBIDExNjkgMTFCQztDM0VEOzExMEEgMTE2OSAxMUJDOworQzNFRTtDM0VFOzExMEEgMTE2OSAxMUJEO0MzRUU7MTEwQSAxMTY5IDExQkQ7CitDM0VGO0MzRUY7MTEwQSAxMTY5IDExQkU7QzNFRjsxMTBBIDExNjkgMTFCRTsKK0MzRjA7QzNGMDsxMTBBIDExNjkgMTFCRjtDM0YwOzExMEEgMTE2OSAxMUJGOworQzNGMTtDM0YxOzExMEEgMTE2OSAxMUMwO0MzRjE7MTEwQSAxMTY5IDExQzA7CitDM0YyO0MzRjI7MTEwQSAxMTY5IDExQzE7QzNGMjsxMTBBIDExNjkgMTFDMTsKK0MzRjM7QzNGMzsxMTBBIDExNjkgMTFDMjtDM0YzOzExMEEgMTE2OSAxMUMyOworQzNGNDtDM0Y0OzExMEEgMTE2QTtDM0Y0OzExMEEgMTE2QTsKK0MzRjU7QzNGNTsxMTBBIDExNkEgMTFBODtDM0Y1OzExMEEgMTE2QSAxMUE4OworQzNGNjtDM0Y2OzExMEEgMTE2QSAxMUE5O0MzRjY7MTEwQSAxMTZBIDExQTk7CitDM0Y3O0MzRjc7MTEwQSAxMTZBIDExQUE7QzNGNzsxMTBBIDExNkEgMTFBQTsKK0MzRjg7QzNGODsxMTBBIDExNkEgMTFBQjtDM0Y4OzExMEEgMTE2QSAxMUFCOworQzNGOTtDM0Y5OzExMEEgMTE2QSAxMUFDO0MzRjk7MTEwQSAxMTZBIDExQUM7CitDM0ZBO0MzRkE7MTEwQSAxMTZBIDExQUQ7QzNGQTsxMTBBIDExNkEgMTFBRDsKK0MzRkI7QzNGQjsxMTBBIDExNkEgMTFBRTtDM0ZCOzExMEEgMTE2QSAxMUFFOworQzNGQztDM0ZDOzExMEEgMTE2QSAxMUFGO0MzRkM7MTEwQSAxMTZBIDExQUY7CitDM0ZEO0MzRkQ7MTEwQSAxMTZBIDExQjA7QzNGRDsxMTBBIDExNkEgMTFCMDsKK0MzRkU7QzNGRTsxMTBBIDExNkEgMTFCMTtDM0ZFOzExMEEgMTE2QSAxMUIxOworQzNGRjtDM0ZGOzExMEEgMTE2QSAxMUIyO0MzRkY7MTEwQSAxMTZBIDExQjI7CitDNDAwO0M0MDA7MTEwQSAxMTZBIDExQjM7QzQwMDsxMTBBIDExNkEgMTFCMzsKK0M0MDE7QzQwMTsxMTBBIDExNkEgMTFCNDtDNDAxOzExMEEgMTE2QSAxMUI0OworQzQwMjtDNDAyOzExMEEgMTE2QSAxMUI1O0M0MDI7MTEwQSAxMTZBIDExQjU7CitDNDAzO0M0MDM7MTEwQSAxMTZBIDExQjY7QzQwMzsxMTBBIDExNkEgMTFCNjsKK0M0MDQ7QzQwNDsxMTBBIDExNkEgMTFCNztDNDA0OzExMEEgMTE2QSAxMUI3OworQzQwNTtDNDA1OzExMEEgMTE2QSAxMUI4O0M0MDU7MTEwQSAxMTZBIDExQjg7CitDNDA2O0M0MDY7MTEwQSAxMTZBIDExQjk7QzQwNjsxMTBBIDExNkEgMTFCOTsKK0M0MDc7QzQwNzsxMTBBIDExNkEgMTFCQTtDNDA3OzExMEEgMTE2QSAxMUJBOworQzQwODtDNDA4OzExMEEgMTE2QSAxMUJCO0M0MDg7MTEwQSAxMTZBIDExQkI7CitDNDA5O0M0MDk7MTEwQSAxMTZBIDExQkM7QzQwOTsxMTBBIDExNkEgMTFCQzsKK0M0MEE7QzQwQTsxMTBBIDExNkEgMTFCRDtDNDBBOzExMEEgMTE2QSAxMUJEOworQzQwQjtDNDBCOzExMEEgMTE2QSAxMUJFO0M0MEI7MTEwQSAxMTZBIDExQkU7CitDNDBDO0M0MEM7MTEwQSAxMTZBIDExQkY7QzQwQzsxMTBBIDExNkEgMTFCRjsKK0M0MEQ7QzQwRDsxMTBBIDExNkEgMTFDMDtDNDBEOzExMEEgMTE2QSAxMUMwOworQzQwRTtDNDBFOzExMEEgMTE2QSAxMUMxO0M0MEU7MTEwQSAxMTZBIDExQzE7CitDNDBGO0M0MEY7MTEwQSAxMTZBIDExQzI7QzQwRjsxMTBBIDExNkEgMTFDMjsKK0M0MTA7QzQxMDsxMTBBIDExNkI7QzQxMDsxMTBBIDExNkI7CitDNDExO0M0MTE7MTEwQSAxMTZCIDExQTg7QzQxMTsxMTBBIDExNkIgMTFBODsKK0M0MTI7QzQxMjsxMTBBIDExNkIgMTFBOTtDNDEyOzExMEEgMTE2QiAxMUE5OworQzQxMztDNDEzOzExMEEgMTE2QiAxMUFBO0M0MTM7MTEwQSAxMTZCIDExQUE7CitDNDE0O0M0MTQ7MTEwQSAxMTZCIDExQUI7QzQxNDsxMTBBIDExNkIgMTFBQjsKK0M0MTU7QzQxNTsxMTBBIDExNkIgMTFBQztDNDE1OzExMEEgMTE2QiAxMUFDOworQzQxNjtDNDE2OzExMEEgMTE2QiAxMUFEO0M0MTY7MTEwQSAxMTZCIDExQUQ7CitDNDE3O0M0MTc7MTEwQSAxMTZCIDExQUU7QzQxNzsxMTBBIDExNkIgMTFBRTsKK0M0MTg7QzQxODsxMTBBIDExNkIgMTFBRjtDNDE4OzExMEEgMTE2QiAxMUFGOworQzQxOTtDNDE5OzExMEEgMTE2QiAxMUIwO0M0MTk7MTEwQSAxMTZCIDExQjA7CitDNDFBO0M0MUE7MTEwQSAxMTZCIDExQjE7QzQxQTsxMTBBIDExNkIgMTFCMTsKK0M0MUI7QzQxQjsxMTBBIDExNkIgMTFCMjtDNDFCOzExMEEgMTE2QiAxMUIyOworQzQxQztDNDFDOzExMEEgMTE2QiAxMUIzO0M0MUM7MTEwQSAxMTZCIDExQjM7CitDNDFEO0M0MUQ7MTEwQSAxMTZCIDExQjQ7QzQxRDsxMTBBIDExNkIgMTFCNDsKK0M0MUU7QzQxRTsxMTBBIDExNkIgMTFCNTtDNDFFOzExMEEgMTE2QiAxMUI1OworQzQxRjtDNDFGOzExMEEgMTE2QiAxMUI2O0M0MUY7MTEwQSAxMTZCIDExQjY7CitDNDIwO0M0MjA7MTEwQSAxMTZCIDExQjc7QzQyMDsxMTBBIDExNkIgMTFCNzsKK0M0MjE7QzQyMTsxMTBBIDExNkIgMTFCODtDNDIxOzExMEEgMTE2QiAxMUI4OworQzQyMjtDNDIyOzExMEEgMTE2QiAxMUI5O0M0MjI7MTEwQSAxMTZCIDExQjk7CitDNDIzO0M0MjM7MTEwQSAxMTZCIDExQkE7QzQyMzsxMTBBIDExNkIgMTFCQTsKK0M0MjQ7QzQyNDsxMTBBIDExNkIgMTFCQjtDNDI0OzExMEEgMTE2QiAxMUJCOworQzQyNTtDNDI1OzExMEEgMTE2QiAxMUJDO0M0MjU7MTEwQSAxMTZCIDExQkM7CitDNDI2O0M0MjY7MTEwQSAxMTZCIDExQkQ7QzQyNjsxMTBBIDExNkIgMTFCRDsKK0M0Mjc7QzQyNzsxMTBBIDExNkIgMTFCRTtDNDI3OzExMEEgMTE2QiAxMUJFOworQzQyODtDNDI4OzExMEEgMTE2QiAxMUJGO0M0Mjg7MTEwQSAxMTZCIDExQkY7CitDNDI5O0M0Mjk7MTEwQSAxMTZCIDExQzA7QzQyOTsxMTBBIDExNkIgMTFDMDsKK0M0MkE7QzQyQTsxMTBBIDExNkIgMTFDMTtDNDJBOzExMEEgMTE2QiAxMUMxOworQzQyQjtDNDJCOzExMEEgMTE2QiAxMUMyO0M0MkI7MTEwQSAxMTZCIDExQzI7CitDNDJDO0M0MkM7MTEwQSAxMTZDO0M0MkM7MTEwQSAxMTZDOworQzQyRDtDNDJEOzExMEEgMTE2QyAxMUE4O0M0MkQ7MTEwQSAxMTZDIDExQTg7CitDNDJFO0M0MkU7MTEwQSAxMTZDIDExQTk7QzQyRTsxMTBBIDExNkMgMTFBOTsKK0M0MkY7QzQyRjsxMTBBIDExNkMgMTFBQTtDNDJGOzExMEEgMTE2QyAxMUFBOworQzQzMDtDNDMwOzExMEEgMTE2QyAxMUFCO0M0MzA7MTEwQSAxMTZDIDExQUI7CitDNDMxO0M0MzE7MTEwQSAxMTZDIDExQUM7QzQzMTsxMTBBIDExNkMgMTFBQzsKK0M0MzI7QzQzMjsxMTBBIDExNkMgMTFBRDtDNDMyOzExMEEgMTE2QyAxMUFEOworQzQzMztDNDMzOzExMEEgMTE2QyAxMUFFO0M0MzM7MTEwQSAxMTZDIDExQUU7CitDNDM0O0M0MzQ7MTEwQSAxMTZDIDExQUY7QzQzNDsxMTBBIDExNkMgMTFBRjsKK0M0MzU7QzQzNTsxMTBBIDExNkMgMTFCMDtDNDM1OzExMEEgMTE2QyAxMUIwOworQzQzNjtDNDM2OzExMEEgMTE2QyAxMUIxO0M0MzY7MTEwQSAxMTZDIDExQjE7CitDNDM3O0M0Mzc7MTEwQSAxMTZDIDExQjI7QzQzNzsxMTBBIDExNkMgMTFCMjsKK0M0Mzg7QzQzODsxMTBBIDExNkMgMTFCMztDNDM4OzExMEEgMTE2QyAxMUIzOworQzQzOTtDNDM5OzExMEEgMTE2QyAxMUI0O0M0Mzk7MTEwQSAxMTZDIDExQjQ7CitDNDNBO0M0M0E7MTEwQSAxMTZDIDExQjU7QzQzQTsxMTBBIDExNkMgMTFCNTsKK0M0M0I7QzQzQjsxMTBBIDExNkMgMTFCNjtDNDNCOzExMEEgMTE2QyAxMUI2OworQzQzQztDNDNDOzExMEEgMTE2QyAxMUI3O0M0M0M7MTEwQSAxMTZDIDExQjc7CitDNDNEO0M0M0Q7MTEwQSAxMTZDIDExQjg7QzQzRDsxMTBBIDExNkMgMTFCODsKK0M0M0U7QzQzRTsxMTBBIDExNkMgMTFCOTtDNDNFOzExMEEgMTE2QyAxMUI5OworQzQzRjtDNDNGOzExMEEgMTE2QyAxMUJBO0M0M0Y7MTEwQSAxMTZDIDExQkE7CitDNDQwO0M0NDA7MTEwQSAxMTZDIDExQkI7QzQ0MDsxMTBBIDExNkMgMTFCQjsKK0M0NDE7QzQ0MTsxMTBBIDExNkMgMTFCQztDNDQxOzExMEEgMTE2QyAxMUJDOworQzQ0MjtDNDQyOzExMEEgMTE2QyAxMUJEO0M0NDI7MTEwQSAxMTZDIDExQkQ7CitDNDQzO0M0NDM7MTEwQSAxMTZDIDExQkU7QzQ0MzsxMTBBIDExNkMgMTFCRTsKK0M0NDQ7QzQ0NDsxMTBBIDExNkMgMTFCRjtDNDQ0OzExMEEgMTE2QyAxMUJGOworQzQ0NTtDNDQ1OzExMEEgMTE2QyAxMUMwO0M0NDU7MTEwQSAxMTZDIDExQzA7CitDNDQ2O0M0NDY7MTEwQSAxMTZDIDExQzE7QzQ0NjsxMTBBIDExNkMgMTFDMTsKK0M0NDc7QzQ0NzsxMTBBIDExNkMgMTFDMjtDNDQ3OzExMEEgMTE2QyAxMUMyOworQzQ0ODtDNDQ4OzExMEEgMTE2RDtDNDQ4OzExMEEgMTE2RDsKK0M0NDk7QzQ0OTsxMTBBIDExNkQgMTFBODtDNDQ5OzExMEEgMTE2RCAxMUE4OworQzQ0QTtDNDRBOzExMEEgMTE2RCAxMUE5O0M0NEE7MTEwQSAxMTZEIDExQTk7CitDNDRCO0M0NEI7MTEwQSAxMTZEIDExQUE7QzQ0QjsxMTBBIDExNkQgMTFBQTsKK0M0NEM7QzQ0QzsxMTBBIDExNkQgMTFBQjtDNDRDOzExMEEgMTE2RCAxMUFCOworQzQ0RDtDNDREOzExMEEgMTE2RCAxMUFDO0M0NEQ7MTEwQSAxMTZEIDExQUM7CitDNDRFO0M0NEU7MTEwQSAxMTZEIDExQUQ7QzQ0RTsxMTBBIDExNkQgMTFBRDsKK0M0NEY7QzQ0RjsxMTBBIDExNkQgMTFBRTtDNDRGOzExMEEgMTE2RCAxMUFFOworQzQ1MDtDNDUwOzExMEEgMTE2RCAxMUFGO0M0NTA7MTEwQSAxMTZEIDExQUY7CitDNDUxO0M0NTE7MTEwQSAxMTZEIDExQjA7QzQ1MTsxMTBBIDExNkQgMTFCMDsKK0M0NTI7QzQ1MjsxMTBBIDExNkQgMTFCMTtDNDUyOzExMEEgMTE2RCAxMUIxOworQzQ1MztDNDUzOzExMEEgMTE2RCAxMUIyO0M0NTM7MTEwQSAxMTZEIDExQjI7CitDNDU0O0M0NTQ7MTEwQSAxMTZEIDExQjM7QzQ1NDsxMTBBIDExNkQgMTFCMzsKK0M0NTU7QzQ1NTsxMTBBIDExNkQgMTFCNDtDNDU1OzExMEEgMTE2RCAxMUI0OworQzQ1NjtDNDU2OzExMEEgMTE2RCAxMUI1O0M0NTY7MTEwQSAxMTZEIDExQjU7CitDNDU3O0M0NTc7MTEwQSAxMTZEIDExQjY7QzQ1NzsxMTBBIDExNkQgMTFCNjsKK0M0NTg7QzQ1ODsxMTBBIDExNkQgMTFCNztDNDU4OzExMEEgMTE2RCAxMUI3OworQzQ1OTtDNDU5OzExMEEgMTE2RCAxMUI4O0M0NTk7MTEwQSAxMTZEIDExQjg7CitDNDVBO0M0NUE7MTEwQSAxMTZEIDExQjk7QzQ1QTsxMTBBIDExNkQgMTFCOTsKK0M0NUI7QzQ1QjsxMTBBIDExNkQgMTFCQTtDNDVCOzExMEEgMTE2RCAxMUJBOworQzQ1QztDNDVDOzExMEEgMTE2RCAxMUJCO0M0NUM7MTEwQSAxMTZEIDExQkI7CitDNDVEO0M0NUQ7MTEwQSAxMTZEIDExQkM7QzQ1RDsxMTBBIDExNkQgMTFCQzsKK0M0NUU7QzQ1RTsxMTBBIDExNkQgMTFCRDtDNDVFOzExMEEgMTE2RCAxMUJEOworQzQ1RjtDNDVGOzExMEEgMTE2RCAxMUJFO0M0NUY7MTEwQSAxMTZEIDExQkU7CitDNDYwO0M0NjA7MTEwQSAxMTZEIDExQkY7QzQ2MDsxMTBBIDExNkQgMTFCRjsKK0M0NjE7QzQ2MTsxMTBBIDExNkQgMTFDMDtDNDYxOzExMEEgMTE2RCAxMUMwOworQzQ2MjtDNDYyOzExMEEgMTE2RCAxMUMxO0M0NjI7MTEwQSAxMTZEIDExQzE7CitDNDYzO0M0NjM7MTEwQSAxMTZEIDExQzI7QzQ2MzsxMTBBIDExNkQgMTFDMjsKK0M0NjQ7QzQ2NDsxMTBBIDExNkU7QzQ2NDsxMTBBIDExNkU7CitDNDY1O0M0NjU7MTEwQSAxMTZFIDExQTg7QzQ2NTsxMTBBIDExNkUgMTFBODsKK0M0NjY7QzQ2NjsxMTBBIDExNkUgMTFBOTtDNDY2OzExMEEgMTE2RSAxMUE5OworQzQ2NztDNDY3OzExMEEgMTE2RSAxMUFBO0M0Njc7MTEwQSAxMTZFIDExQUE7CitDNDY4O0M0Njg7MTEwQSAxMTZFIDExQUI7QzQ2ODsxMTBBIDExNkUgMTFBQjsKK0M0Njk7QzQ2OTsxMTBBIDExNkUgMTFBQztDNDY5OzExMEEgMTE2RSAxMUFDOworQzQ2QTtDNDZBOzExMEEgMTE2RSAxMUFEO0M0NkE7MTEwQSAxMTZFIDExQUQ7CitDNDZCO0M0NkI7MTEwQSAxMTZFIDExQUU7QzQ2QjsxMTBBIDExNkUgMTFBRTsKK0M0NkM7QzQ2QzsxMTBBIDExNkUgMTFBRjtDNDZDOzExMEEgMTE2RSAxMUFGOworQzQ2RDtDNDZEOzExMEEgMTE2RSAxMUIwO0M0NkQ7MTEwQSAxMTZFIDExQjA7CitDNDZFO0M0NkU7MTEwQSAxMTZFIDExQjE7QzQ2RTsxMTBBIDExNkUgMTFCMTsKK0M0NkY7QzQ2RjsxMTBBIDExNkUgMTFCMjtDNDZGOzExMEEgMTE2RSAxMUIyOworQzQ3MDtDNDcwOzExMEEgMTE2RSAxMUIzO0M0NzA7MTEwQSAxMTZFIDExQjM7CitDNDcxO0M0NzE7MTEwQSAxMTZFIDExQjQ7QzQ3MTsxMTBBIDExNkUgMTFCNDsKK0M0NzI7QzQ3MjsxMTBBIDExNkUgMTFCNTtDNDcyOzExMEEgMTE2RSAxMUI1OworQzQ3MztDNDczOzExMEEgMTE2RSAxMUI2O0M0NzM7MTEwQSAxMTZFIDExQjY7CitDNDc0O0M0NzQ7MTEwQSAxMTZFIDExQjc7QzQ3NDsxMTBBIDExNkUgMTFCNzsKK0M0NzU7QzQ3NTsxMTBBIDExNkUgMTFCODtDNDc1OzExMEEgMTE2RSAxMUI4OworQzQ3NjtDNDc2OzExMEEgMTE2RSAxMUI5O0M0NzY7MTEwQSAxMTZFIDExQjk7CitDNDc3O0M0Nzc7MTEwQSAxMTZFIDExQkE7QzQ3NzsxMTBBIDExNkUgMTFCQTsKK0M0Nzg7QzQ3ODsxMTBBIDExNkUgMTFCQjtDNDc4OzExMEEgMTE2RSAxMUJCOworQzQ3OTtDNDc5OzExMEEgMTE2RSAxMUJDO0M0Nzk7MTEwQSAxMTZFIDExQkM7CitDNDdBO0M0N0E7MTEwQSAxMTZFIDExQkQ7QzQ3QTsxMTBBIDExNkUgMTFCRDsKK0M0N0I7QzQ3QjsxMTBBIDExNkUgMTFCRTtDNDdCOzExMEEgMTE2RSAxMUJFOworQzQ3QztDNDdDOzExMEEgMTE2RSAxMUJGO0M0N0M7MTEwQSAxMTZFIDExQkY7CitDNDdEO0M0N0Q7MTEwQSAxMTZFIDExQzA7QzQ3RDsxMTBBIDExNkUgMTFDMDsKK0M0N0U7QzQ3RTsxMTBBIDExNkUgMTFDMTtDNDdFOzExMEEgMTE2RSAxMUMxOworQzQ3RjtDNDdGOzExMEEgMTE2RSAxMUMyO0M0N0Y7MTEwQSAxMTZFIDExQzI7CitDNDgwO0M0ODA7MTEwQSAxMTZGO0M0ODA7MTEwQSAxMTZGOworQzQ4MTtDNDgxOzExMEEgMTE2RiAxMUE4O0M0ODE7MTEwQSAxMTZGIDExQTg7CitDNDgyO0M0ODI7MTEwQSAxMTZGIDExQTk7QzQ4MjsxMTBBIDExNkYgMTFBOTsKK0M0ODM7QzQ4MzsxMTBBIDExNkYgMTFBQTtDNDgzOzExMEEgMTE2RiAxMUFBOworQzQ4NDtDNDg0OzExMEEgMTE2RiAxMUFCO0M0ODQ7MTEwQSAxMTZGIDExQUI7CitDNDg1O0M0ODU7MTEwQSAxMTZGIDExQUM7QzQ4NTsxMTBBIDExNkYgMTFBQzsKK0M0ODY7QzQ4NjsxMTBBIDExNkYgMTFBRDtDNDg2OzExMEEgMTE2RiAxMUFEOworQzQ4NztDNDg3OzExMEEgMTE2RiAxMUFFO0M0ODc7MTEwQSAxMTZGIDExQUU7CitDNDg4O0M0ODg7MTEwQSAxMTZGIDExQUY7QzQ4ODsxMTBBIDExNkYgMTFBRjsKK0M0ODk7QzQ4OTsxMTBBIDExNkYgMTFCMDtDNDg5OzExMEEgMTE2RiAxMUIwOworQzQ4QTtDNDhBOzExMEEgMTE2RiAxMUIxO0M0OEE7MTEwQSAxMTZGIDExQjE7CitDNDhCO0M0OEI7MTEwQSAxMTZGIDExQjI7QzQ4QjsxMTBBIDExNkYgMTFCMjsKK0M0OEM7QzQ4QzsxMTBBIDExNkYgMTFCMztDNDhDOzExMEEgMTE2RiAxMUIzOworQzQ4RDtDNDhEOzExMEEgMTE2RiAxMUI0O0M0OEQ7MTEwQSAxMTZGIDExQjQ7CitDNDhFO0M0OEU7MTEwQSAxMTZGIDExQjU7QzQ4RTsxMTBBIDExNkYgMTFCNTsKK0M0OEY7QzQ4RjsxMTBBIDExNkYgMTFCNjtDNDhGOzExMEEgMTE2RiAxMUI2OworQzQ5MDtDNDkwOzExMEEgMTE2RiAxMUI3O0M0OTA7MTEwQSAxMTZGIDExQjc7CitDNDkxO0M0OTE7MTEwQSAxMTZGIDExQjg7QzQ5MTsxMTBBIDExNkYgMTFCODsKK0M0OTI7QzQ5MjsxMTBBIDExNkYgMTFCOTtDNDkyOzExMEEgMTE2RiAxMUI5OworQzQ5MztDNDkzOzExMEEgMTE2RiAxMUJBO0M0OTM7MTEwQSAxMTZGIDExQkE7CitDNDk0O0M0OTQ7MTEwQSAxMTZGIDExQkI7QzQ5NDsxMTBBIDExNkYgMTFCQjsKK0M0OTU7QzQ5NTsxMTBBIDExNkYgMTFCQztDNDk1OzExMEEgMTE2RiAxMUJDOworQzQ5NjtDNDk2OzExMEEgMTE2RiAxMUJEO0M0OTY7MTEwQSAxMTZGIDExQkQ7CitDNDk3O0M0OTc7MTEwQSAxMTZGIDExQkU7QzQ5NzsxMTBBIDExNkYgMTFCRTsKK0M0OTg7QzQ5ODsxMTBBIDExNkYgMTFCRjtDNDk4OzExMEEgMTE2RiAxMUJGOworQzQ5OTtDNDk5OzExMEEgMTE2RiAxMUMwO0M0OTk7MTEwQSAxMTZGIDExQzA7CitDNDlBO0M0OUE7MTEwQSAxMTZGIDExQzE7QzQ5QTsxMTBBIDExNkYgMTFDMTsKK0M0OUI7QzQ5QjsxMTBBIDExNkYgMTFDMjtDNDlCOzExMEEgMTE2RiAxMUMyOworQzQ5QztDNDlDOzExMEEgMTE3MDtDNDlDOzExMEEgMTE3MDsKK0M0OUQ7QzQ5RDsxMTBBIDExNzAgMTFBODtDNDlEOzExMEEgMTE3MCAxMUE4OworQzQ5RTtDNDlFOzExMEEgMTE3MCAxMUE5O0M0OUU7MTEwQSAxMTcwIDExQTk7CitDNDlGO0M0OUY7MTEwQSAxMTcwIDExQUE7QzQ5RjsxMTBBIDExNzAgMTFBQTsKK0M0QTA7QzRBMDsxMTBBIDExNzAgMTFBQjtDNEEwOzExMEEgMTE3MCAxMUFCOworQzRBMTtDNEExOzExMEEgMTE3MCAxMUFDO0M0QTE7MTEwQSAxMTcwIDExQUM7CitDNEEyO0M0QTI7MTEwQSAxMTcwIDExQUQ7QzRBMjsxMTBBIDExNzAgMTFBRDsKK0M0QTM7QzRBMzsxMTBBIDExNzAgMTFBRTtDNEEzOzExMEEgMTE3MCAxMUFFOworQzRBNDtDNEE0OzExMEEgMTE3MCAxMUFGO0M0QTQ7MTEwQSAxMTcwIDExQUY7CitDNEE1O0M0QTU7MTEwQSAxMTcwIDExQjA7QzRBNTsxMTBBIDExNzAgMTFCMDsKK0M0QTY7QzRBNjsxMTBBIDExNzAgMTFCMTtDNEE2OzExMEEgMTE3MCAxMUIxOworQzRBNztDNEE3OzExMEEgMTE3MCAxMUIyO0M0QTc7MTEwQSAxMTcwIDExQjI7CitDNEE4O0M0QTg7MTEwQSAxMTcwIDExQjM7QzRBODsxMTBBIDExNzAgMTFCMzsKK0M0QTk7QzRBOTsxMTBBIDExNzAgMTFCNDtDNEE5OzExMEEgMTE3MCAxMUI0OworQzRBQTtDNEFBOzExMEEgMTE3MCAxMUI1O0M0QUE7MTEwQSAxMTcwIDExQjU7CitDNEFCO0M0QUI7MTEwQSAxMTcwIDExQjY7QzRBQjsxMTBBIDExNzAgMTFCNjsKK0M0QUM7QzRBQzsxMTBBIDExNzAgMTFCNztDNEFDOzExMEEgMTE3MCAxMUI3OworQzRBRDtDNEFEOzExMEEgMTE3MCAxMUI4O0M0QUQ7MTEwQSAxMTcwIDExQjg7CitDNEFFO0M0QUU7MTEwQSAxMTcwIDExQjk7QzRBRTsxMTBBIDExNzAgMTFCOTsKK0M0QUY7QzRBRjsxMTBBIDExNzAgMTFCQTtDNEFGOzExMEEgMTE3MCAxMUJBOworQzRCMDtDNEIwOzExMEEgMTE3MCAxMUJCO0M0QjA7MTEwQSAxMTcwIDExQkI7CitDNEIxO0M0QjE7MTEwQSAxMTcwIDExQkM7QzRCMTsxMTBBIDExNzAgMTFCQzsKK0M0QjI7QzRCMjsxMTBBIDExNzAgMTFCRDtDNEIyOzExMEEgMTE3MCAxMUJEOworQzRCMztDNEIzOzExMEEgMTE3MCAxMUJFO0M0QjM7MTEwQSAxMTcwIDExQkU7CitDNEI0O0M0QjQ7MTEwQSAxMTcwIDExQkY7QzRCNDsxMTBBIDExNzAgMTFCRjsKK0M0QjU7QzRCNTsxMTBBIDExNzAgMTFDMDtDNEI1OzExMEEgMTE3MCAxMUMwOworQzRCNjtDNEI2OzExMEEgMTE3MCAxMUMxO0M0QjY7MTEwQSAxMTcwIDExQzE7CitDNEI3O0M0Qjc7MTEwQSAxMTcwIDExQzI7QzRCNzsxMTBBIDExNzAgMTFDMjsKK0M0Qjg7QzRCODsxMTBBIDExNzE7QzRCODsxMTBBIDExNzE7CitDNEI5O0M0Qjk7MTEwQSAxMTcxIDExQTg7QzRCOTsxMTBBIDExNzEgMTFBODsKK0M0QkE7QzRCQTsxMTBBIDExNzEgMTFBOTtDNEJBOzExMEEgMTE3MSAxMUE5OworQzRCQjtDNEJCOzExMEEgMTE3MSAxMUFBO0M0QkI7MTEwQSAxMTcxIDExQUE7CitDNEJDO0M0QkM7MTEwQSAxMTcxIDExQUI7QzRCQzsxMTBBIDExNzEgMTFBQjsKK0M0QkQ7QzRCRDsxMTBBIDExNzEgMTFBQztDNEJEOzExMEEgMTE3MSAxMUFDOworQzRCRTtDNEJFOzExMEEgMTE3MSAxMUFEO0M0QkU7MTEwQSAxMTcxIDExQUQ7CitDNEJGO0M0QkY7MTEwQSAxMTcxIDExQUU7QzRCRjsxMTBBIDExNzEgMTFBRTsKK0M0QzA7QzRDMDsxMTBBIDExNzEgMTFBRjtDNEMwOzExMEEgMTE3MSAxMUFGOworQzRDMTtDNEMxOzExMEEgMTE3MSAxMUIwO0M0QzE7MTEwQSAxMTcxIDExQjA7CitDNEMyO0M0QzI7MTEwQSAxMTcxIDExQjE7QzRDMjsxMTBBIDExNzEgMTFCMTsKK0M0QzM7QzRDMzsxMTBBIDExNzEgMTFCMjtDNEMzOzExMEEgMTE3MSAxMUIyOworQzRDNDtDNEM0OzExMEEgMTE3MSAxMUIzO0M0QzQ7MTEwQSAxMTcxIDExQjM7CitDNEM1O0M0QzU7MTEwQSAxMTcxIDExQjQ7QzRDNTsxMTBBIDExNzEgMTFCNDsKK0M0QzY7QzRDNjsxMTBBIDExNzEgMTFCNTtDNEM2OzExMEEgMTE3MSAxMUI1OworQzRDNztDNEM3OzExMEEgMTE3MSAxMUI2O0M0Qzc7MTEwQSAxMTcxIDExQjY7CitDNEM4O0M0Qzg7MTEwQSAxMTcxIDExQjc7QzRDODsxMTBBIDExNzEgMTFCNzsKK0M0Qzk7QzRDOTsxMTBBIDExNzEgMTFCODtDNEM5OzExMEEgMTE3MSAxMUI4OworQzRDQTtDNENBOzExMEEgMTE3MSAxMUI5O0M0Q0E7MTEwQSAxMTcxIDExQjk7CitDNENCO0M0Q0I7MTEwQSAxMTcxIDExQkE7QzRDQjsxMTBBIDExNzEgMTFCQTsKK0M0Q0M7QzRDQzsxMTBBIDExNzEgMTFCQjtDNENDOzExMEEgMTE3MSAxMUJCOworQzRDRDtDNENEOzExMEEgMTE3MSAxMUJDO0M0Q0Q7MTEwQSAxMTcxIDExQkM7CitDNENFO0M0Q0U7MTEwQSAxMTcxIDExQkQ7QzRDRTsxMTBBIDExNzEgMTFCRDsKK0M0Q0Y7QzRDRjsxMTBBIDExNzEgMTFCRTtDNENGOzExMEEgMTE3MSAxMUJFOworQzREMDtDNEQwOzExMEEgMTE3MSAxMUJGO0M0RDA7MTEwQSAxMTcxIDExQkY7CitDNEQxO0M0RDE7MTEwQSAxMTcxIDExQzA7QzREMTsxMTBBIDExNzEgMTFDMDsKK0M0RDI7QzREMjsxMTBBIDExNzEgMTFDMTtDNEQyOzExMEEgMTE3MSAxMUMxOworQzREMztDNEQzOzExMEEgMTE3MSAxMUMyO0M0RDM7MTEwQSAxMTcxIDExQzI7CitDNEQ0O0M0RDQ7MTEwQSAxMTcyO0M0RDQ7MTEwQSAxMTcyOworQzRENTtDNEQ1OzExMEEgMTE3MiAxMUE4O0M0RDU7MTEwQSAxMTcyIDExQTg7CitDNEQ2O0M0RDY7MTEwQSAxMTcyIDExQTk7QzRENjsxMTBBIDExNzIgMTFBOTsKK0M0RDc7QzRENzsxMTBBIDExNzIgMTFBQTtDNEQ3OzExMEEgMTE3MiAxMUFBOworQzREODtDNEQ4OzExMEEgMTE3MiAxMUFCO0M0RDg7MTEwQSAxMTcyIDExQUI7CitDNEQ5O0M0RDk7MTEwQSAxMTcyIDExQUM7QzREOTsxMTBBIDExNzIgMTFBQzsKK0M0REE7QzREQTsxMTBBIDExNzIgMTFBRDtDNERBOzExMEEgMTE3MiAxMUFEOworQzREQjtDNERCOzExMEEgMTE3MiAxMUFFO0M0REI7MTEwQSAxMTcyIDExQUU7CitDNERDO0M0REM7MTEwQSAxMTcyIDExQUY7QzREQzsxMTBBIDExNzIgMTFBRjsKK0M0REQ7QzRERDsxMTBBIDExNzIgMTFCMDtDNEREOzExMEEgMTE3MiAxMUIwOworQzRERTtDNERFOzExMEEgMTE3MiAxMUIxO0M0REU7MTEwQSAxMTcyIDExQjE7CitDNERGO0M0REY7MTEwQSAxMTcyIDExQjI7QzRERjsxMTBBIDExNzIgMTFCMjsKK0M0RTA7QzRFMDsxMTBBIDExNzIgMTFCMztDNEUwOzExMEEgMTE3MiAxMUIzOworQzRFMTtDNEUxOzExMEEgMTE3MiAxMUI0O0M0RTE7MTEwQSAxMTcyIDExQjQ7CitDNEUyO0M0RTI7MTEwQSAxMTcyIDExQjU7QzRFMjsxMTBBIDExNzIgMTFCNTsKK0M0RTM7QzRFMzsxMTBBIDExNzIgMTFCNjtDNEUzOzExMEEgMTE3MiAxMUI2OworQzRFNDtDNEU0OzExMEEgMTE3MiAxMUI3O0M0RTQ7MTEwQSAxMTcyIDExQjc7CitDNEU1O0M0RTU7MTEwQSAxMTcyIDExQjg7QzRFNTsxMTBBIDExNzIgMTFCODsKK0M0RTY7QzRFNjsxMTBBIDExNzIgMTFCOTtDNEU2OzExMEEgMTE3MiAxMUI5OworQzRFNztDNEU3OzExMEEgMTE3MiAxMUJBO0M0RTc7MTEwQSAxMTcyIDExQkE7CitDNEU4O0M0RTg7MTEwQSAxMTcyIDExQkI7QzRFODsxMTBBIDExNzIgMTFCQjsKK0M0RTk7QzRFOTsxMTBBIDExNzIgMTFCQztDNEU5OzExMEEgMTE3MiAxMUJDOworQzRFQTtDNEVBOzExMEEgMTE3MiAxMUJEO0M0RUE7MTEwQSAxMTcyIDExQkQ7CitDNEVCO0M0RUI7MTEwQSAxMTcyIDExQkU7QzRFQjsxMTBBIDExNzIgMTFCRTsKK0M0RUM7QzRFQzsxMTBBIDExNzIgMTFCRjtDNEVDOzExMEEgMTE3MiAxMUJGOworQzRFRDtDNEVEOzExMEEgMTE3MiAxMUMwO0M0RUQ7MTEwQSAxMTcyIDExQzA7CitDNEVFO0M0RUU7MTEwQSAxMTcyIDExQzE7QzRFRTsxMTBBIDExNzIgMTFDMTsKK0M0RUY7QzRFRjsxMTBBIDExNzIgMTFDMjtDNEVGOzExMEEgMTE3MiAxMUMyOworQzRGMDtDNEYwOzExMEEgMTE3MztDNEYwOzExMEEgMTE3MzsKK0M0RjE7QzRGMTsxMTBBIDExNzMgMTFBODtDNEYxOzExMEEgMTE3MyAxMUE4OworQzRGMjtDNEYyOzExMEEgMTE3MyAxMUE5O0M0RjI7MTEwQSAxMTczIDExQTk7CitDNEYzO0M0RjM7MTEwQSAxMTczIDExQUE7QzRGMzsxMTBBIDExNzMgMTFBQTsKK0M0RjQ7QzRGNDsxMTBBIDExNzMgMTFBQjtDNEY0OzExMEEgMTE3MyAxMUFCOworQzRGNTtDNEY1OzExMEEgMTE3MyAxMUFDO0M0RjU7MTEwQSAxMTczIDExQUM7CitDNEY2O0M0RjY7MTEwQSAxMTczIDExQUQ7QzRGNjsxMTBBIDExNzMgMTFBRDsKK0M0Rjc7QzRGNzsxMTBBIDExNzMgMTFBRTtDNEY3OzExMEEgMTE3MyAxMUFFOworQzRGODtDNEY4OzExMEEgMTE3MyAxMUFGO0M0Rjg7MTEwQSAxMTczIDExQUY7CitDNEY5O0M0Rjk7MTEwQSAxMTczIDExQjA7QzRGOTsxMTBBIDExNzMgMTFCMDsKK0M0RkE7QzRGQTsxMTBBIDExNzMgMTFCMTtDNEZBOzExMEEgMTE3MyAxMUIxOworQzRGQjtDNEZCOzExMEEgMTE3MyAxMUIyO0M0RkI7MTEwQSAxMTczIDExQjI7CitDNEZDO0M0RkM7MTEwQSAxMTczIDExQjM7QzRGQzsxMTBBIDExNzMgMTFCMzsKK0M0RkQ7QzRGRDsxMTBBIDExNzMgMTFCNDtDNEZEOzExMEEgMTE3MyAxMUI0OworQzRGRTtDNEZFOzExMEEgMTE3MyAxMUI1O0M0RkU7MTEwQSAxMTczIDExQjU7CitDNEZGO0M0RkY7MTEwQSAxMTczIDExQjY7QzRGRjsxMTBBIDExNzMgMTFCNjsKK0M1MDA7QzUwMDsxMTBBIDExNzMgMTFCNztDNTAwOzExMEEgMTE3MyAxMUI3OworQzUwMTtDNTAxOzExMEEgMTE3MyAxMUI4O0M1MDE7MTEwQSAxMTczIDExQjg7CitDNTAyO0M1MDI7MTEwQSAxMTczIDExQjk7QzUwMjsxMTBBIDExNzMgMTFCOTsKK0M1MDM7QzUwMzsxMTBBIDExNzMgMTFCQTtDNTAzOzExMEEgMTE3MyAxMUJBOworQzUwNDtDNTA0OzExMEEgMTE3MyAxMUJCO0M1MDQ7MTEwQSAxMTczIDExQkI7CitDNTA1O0M1MDU7MTEwQSAxMTczIDExQkM7QzUwNTsxMTBBIDExNzMgMTFCQzsKK0M1MDY7QzUwNjsxMTBBIDExNzMgMTFCRDtDNTA2OzExMEEgMTE3MyAxMUJEOworQzUwNztDNTA3OzExMEEgMTE3MyAxMUJFO0M1MDc7MTEwQSAxMTczIDExQkU7CitDNTA4O0M1MDg7MTEwQSAxMTczIDExQkY7QzUwODsxMTBBIDExNzMgMTFCRjsKK0M1MDk7QzUwOTsxMTBBIDExNzMgMTFDMDtDNTA5OzExMEEgMTE3MyAxMUMwOworQzUwQTtDNTBBOzExMEEgMTE3MyAxMUMxO0M1MEE7MTEwQSAxMTczIDExQzE7CitDNTBCO0M1MEI7MTEwQSAxMTczIDExQzI7QzUwQjsxMTBBIDExNzMgMTFDMjsKK0M1MEM7QzUwQzsxMTBBIDExNzQ7QzUwQzsxMTBBIDExNzQ7CitDNTBEO0M1MEQ7MTEwQSAxMTc0IDExQTg7QzUwRDsxMTBBIDExNzQgMTFBODsKK0M1MEU7QzUwRTsxMTBBIDExNzQgMTFBOTtDNTBFOzExMEEgMTE3NCAxMUE5OworQzUwRjtDNTBGOzExMEEgMTE3NCAxMUFBO0M1MEY7MTEwQSAxMTc0IDExQUE7CitDNTEwO0M1MTA7MTEwQSAxMTc0IDExQUI7QzUxMDsxMTBBIDExNzQgMTFBQjsKK0M1MTE7QzUxMTsxMTBBIDExNzQgMTFBQztDNTExOzExMEEgMTE3NCAxMUFDOworQzUxMjtDNTEyOzExMEEgMTE3NCAxMUFEO0M1MTI7MTEwQSAxMTc0IDExQUQ7CitDNTEzO0M1MTM7MTEwQSAxMTc0IDExQUU7QzUxMzsxMTBBIDExNzQgMTFBRTsKK0M1MTQ7QzUxNDsxMTBBIDExNzQgMTFBRjtDNTE0OzExMEEgMTE3NCAxMUFGOworQzUxNTtDNTE1OzExMEEgMTE3NCAxMUIwO0M1MTU7MTEwQSAxMTc0IDExQjA7CitDNTE2O0M1MTY7MTEwQSAxMTc0IDExQjE7QzUxNjsxMTBBIDExNzQgMTFCMTsKK0M1MTc7QzUxNzsxMTBBIDExNzQgMTFCMjtDNTE3OzExMEEgMTE3NCAxMUIyOworQzUxODtDNTE4OzExMEEgMTE3NCAxMUIzO0M1MTg7MTEwQSAxMTc0IDExQjM7CitDNTE5O0M1MTk7MTEwQSAxMTc0IDExQjQ7QzUxOTsxMTBBIDExNzQgMTFCNDsKK0M1MUE7QzUxQTsxMTBBIDExNzQgMTFCNTtDNTFBOzExMEEgMTE3NCAxMUI1OworQzUxQjtDNTFCOzExMEEgMTE3NCAxMUI2O0M1MUI7MTEwQSAxMTc0IDExQjY7CitDNTFDO0M1MUM7MTEwQSAxMTc0IDExQjc7QzUxQzsxMTBBIDExNzQgMTFCNzsKK0M1MUQ7QzUxRDsxMTBBIDExNzQgMTFCODtDNTFEOzExMEEgMTE3NCAxMUI4OworQzUxRTtDNTFFOzExMEEgMTE3NCAxMUI5O0M1MUU7MTEwQSAxMTc0IDExQjk7CitDNTFGO0M1MUY7MTEwQSAxMTc0IDExQkE7QzUxRjsxMTBBIDExNzQgMTFCQTsKK0M1MjA7QzUyMDsxMTBBIDExNzQgMTFCQjtDNTIwOzExMEEgMTE3NCAxMUJCOworQzUyMTtDNTIxOzExMEEgMTE3NCAxMUJDO0M1MjE7MTEwQSAxMTc0IDExQkM7CitDNTIyO0M1MjI7MTEwQSAxMTc0IDExQkQ7QzUyMjsxMTBBIDExNzQgMTFCRDsKK0M1MjM7QzUyMzsxMTBBIDExNzQgMTFCRTtDNTIzOzExMEEgMTE3NCAxMUJFOworQzUyNDtDNTI0OzExMEEgMTE3NCAxMUJGO0M1MjQ7MTEwQSAxMTc0IDExQkY7CitDNTI1O0M1MjU7MTEwQSAxMTc0IDExQzA7QzUyNTsxMTBBIDExNzQgMTFDMDsKK0M1MjY7QzUyNjsxMTBBIDExNzQgMTFDMTtDNTI2OzExMEEgMTE3NCAxMUMxOworQzUyNztDNTI3OzExMEEgMTE3NCAxMUMyO0M1Mjc7MTEwQSAxMTc0IDExQzI7CitDNTI4O0M1Mjg7MTEwQSAxMTc1O0M1Mjg7MTEwQSAxMTc1OworQzUyOTtDNTI5OzExMEEgMTE3NSAxMUE4O0M1Mjk7MTEwQSAxMTc1IDExQTg7CitDNTJBO0M1MkE7MTEwQSAxMTc1IDExQTk7QzUyQTsxMTBBIDExNzUgMTFBOTsKK0M1MkI7QzUyQjsxMTBBIDExNzUgMTFBQTtDNTJCOzExMEEgMTE3NSAxMUFBOworQzUyQztDNTJDOzExMEEgMTE3NSAxMUFCO0M1MkM7MTEwQSAxMTc1IDExQUI7CitDNTJEO0M1MkQ7MTEwQSAxMTc1IDExQUM7QzUyRDsxMTBBIDExNzUgMTFBQzsKK0M1MkU7QzUyRTsxMTBBIDExNzUgMTFBRDtDNTJFOzExMEEgMTE3NSAxMUFEOworQzUyRjtDNTJGOzExMEEgMTE3NSAxMUFFO0M1MkY7MTEwQSAxMTc1IDExQUU7CitDNTMwO0M1MzA7MTEwQSAxMTc1IDExQUY7QzUzMDsxMTBBIDExNzUgMTFBRjsKK0M1MzE7QzUzMTsxMTBBIDExNzUgMTFCMDtDNTMxOzExMEEgMTE3NSAxMUIwOworQzUzMjtDNTMyOzExMEEgMTE3NSAxMUIxO0M1MzI7MTEwQSAxMTc1IDExQjE7CitDNTMzO0M1MzM7MTEwQSAxMTc1IDExQjI7QzUzMzsxMTBBIDExNzUgMTFCMjsKK0M1MzQ7QzUzNDsxMTBBIDExNzUgMTFCMztDNTM0OzExMEEgMTE3NSAxMUIzOworQzUzNTtDNTM1OzExMEEgMTE3NSAxMUI0O0M1MzU7MTEwQSAxMTc1IDExQjQ7CitDNTM2O0M1MzY7MTEwQSAxMTc1IDExQjU7QzUzNjsxMTBBIDExNzUgMTFCNTsKK0M1Mzc7QzUzNzsxMTBBIDExNzUgMTFCNjtDNTM3OzExMEEgMTE3NSAxMUI2OworQzUzODtDNTM4OzExMEEgMTE3NSAxMUI3O0M1Mzg7MTEwQSAxMTc1IDExQjc7CitDNTM5O0M1Mzk7MTEwQSAxMTc1IDExQjg7QzUzOTsxMTBBIDExNzUgMTFCODsKK0M1M0E7QzUzQTsxMTBBIDExNzUgMTFCOTtDNTNBOzExMEEgMTE3NSAxMUI5OworQzUzQjtDNTNCOzExMEEgMTE3NSAxMUJBO0M1M0I7MTEwQSAxMTc1IDExQkE7CitDNTNDO0M1M0M7MTEwQSAxMTc1IDExQkI7QzUzQzsxMTBBIDExNzUgMTFCQjsKK0M1M0Q7QzUzRDsxMTBBIDExNzUgMTFCQztDNTNEOzExMEEgMTE3NSAxMUJDOworQzUzRTtDNTNFOzExMEEgMTE3NSAxMUJEO0M1M0U7MTEwQSAxMTc1IDExQkQ7CitDNTNGO0M1M0Y7MTEwQSAxMTc1IDExQkU7QzUzRjsxMTBBIDExNzUgMTFCRTsKK0M1NDA7QzU0MDsxMTBBIDExNzUgMTFCRjtDNTQwOzExMEEgMTE3NSAxMUJGOworQzU0MTtDNTQxOzExMEEgMTE3NSAxMUMwO0M1NDE7MTEwQSAxMTc1IDExQzA7CitDNTQyO0M1NDI7MTEwQSAxMTc1IDExQzE7QzU0MjsxMTBBIDExNzUgMTFDMTsKK0M1NDM7QzU0MzsxMTBBIDExNzUgMTFDMjtDNTQzOzExMEEgMTE3NSAxMUMyOworQzU0NDtDNTQ0OzExMEIgMTE2MTtDNTQ0OzExMEIgMTE2MTsKK0M1NDU7QzU0NTsxMTBCIDExNjEgMTFBODtDNTQ1OzExMEIgMTE2MSAxMUE4OworQzU0NjtDNTQ2OzExMEIgMTE2MSAxMUE5O0M1NDY7MTEwQiAxMTYxIDExQTk7CitDNTQ3O0M1NDc7MTEwQiAxMTYxIDExQUE7QzU0NzsxMTBCIDExNjEgMTFBQTsKK0M1NDg7QzU0ODsxMTBCIDExNjEgMTFBQjtDNTQ4OzExMEIgMTE2MSAxMUFCOworQzU0OTtDNTQ5OzExMEIgMTE2MSAxMUFDO0M1NDk7MTEwQiAxMTYxIDExQUM7CitDNTRBO0M1NEE7MTEwQiAxMTYxIDExQUQ7QzU0QTsxMTBCIDExNjEgMTFBRDsKK0M1NEI7QzU0QjsxMTBCIDExNjEgMTFBRTtDNTRCOzExMEIgMTE2MSAxMUFFOworQzU0QztDNTRDOzExMEIgMTE2MSAxMUFGO0M1NEM7MTEwQiAxMTYxIDExQUY7CitDNTREO0M1NEQ7MTEwQiAxMTYxIDExQjA7QzU0RDsxMTBCIDExNjEgMTFCMDsKK0M1NEU7QzU0RTsxMTBCIDExNjEgMTFCMTtDNTRFOzExMEIgMTE2MSAxMUIxOworQzU0RjtDNTRGOzExMEIgMTE2MSAxMUIyO0M1NEY7MTEwQiAxMTYxIDExQjI7CitDNTUwO0M1NTA7MTEwQiAxMTYxIDExQjM7QzU1MDsxMTBCIDExNjEgMTFCMzsKK0M1NTE7QzU1MTsxMTBCIDExNjEgMTFCNDtDNTUxOzExMEIgMTE2MSAxMUI0OworQzU1MjtDNTUyOzExMEIgMTE2MSAxMUI1O0M1NTI7MTEwQiAxMTYxIDExQjU7CitDNTUzO0M1NTM7MTEwQiAxMTYxIDExQjY7QzU1MzsxMTBCIDExNjEgMTFCNjsKK0M1NTQ7QzU1NDsxMTBCIDExNjEgMTFCNztDNTU0OzExMEIgMTE2MSAxMUI3OworQzU1NTtDNTU1OzExMEIgMTE2MSAxMUI4O0M1NTU7MTEwQiAxMTYxIDExQjg7CitDNTU2O0M1NTY7MTEwQiAxMTYxIDExQjk7QzU1NjsxMTBCIDExNjEgMTFCOTsKK0M1NTc7QzU1NzsxMTBCIDExNjEgMTFCQTtDNTU3OzExMEIgMTE2MSAxMUJBOworQzU1ODtDNTU4OzExMEIgMTE2MSAxMUJCO0M1NTg7MTEwQiAxMTYxIDExQkI7CitDNTU5O0M1NTk7MTEwQiAxMTYxIDExQkM7QzU1OTsxMTBCIDExNjEgMTFCQzsKK0M1NUE7QzU1QTsxMTBCIDExNjEgMTFCRDtDNTVBOzExMEIgMTE2MSAxMUJEOworQzU1QjtDNTVCOzExMEIgMTE2MSAxMUJFO0M1NUI7MTEwQiAxMTYxIDExQkU7CitDNTVDO0M1NUM7MTEwQiAxMTYxIDExQkY7QzU1QzsxMTBCIDExNjEgMTFCRjsKK0M1NUQ7QzU1RDsxMTBCIDExNjEgMTFDMDtDNTVEOzExMEIgMTE2MSAxMUMwOworQzU1RTtDNTVFOzExMEIgMTE2MSAxMUMxO0M1NUU7MTEwQiAxMTYxIDExQzE7CitDNTVGO0M1NUY7MTEwQiAxMTYxIDExQzI7QzU1RjsxMTBCIDExNjEgMTFDMjsKK0M1NjA7QzU2MDsxMTBCIDExNjI7QzU2MDsxMTBCIDExNjI7CitDNTYxO0M1NjE7MTEwQiAxMTYyIDExQTg7QzU2MTsxMTBCIDExNjIgMTFBODsKK0M1NjI7QzU2MjsxMTBCIDExNjIgMTFBOTtDNTYyOzExMEIgMTE2MiAxMUE5OworQzU2MztDNTYzOzExMEIgMTE2MiAxMUFBO0M1NjM7MTEwQiAxMTYyIDExQUE7CitDNTY0O0M1NjQ7MTEwQiAxMTYyIDExQUI7QzU2NDsxMTBCIDExNjIgMTFBQjsKK0M1NjU7QzU2NTsxMTBCIDExNjIgMTFBQztDNTY1OzExMEIgMTE2MiAxMUFDOworQzU2NjtDNTY2OzExMEIgMTE2MiAxMUFEO0M1NjY7MTEwQiAxMTYyIDExQUQ7CitDNTY3O0M1Njc7MTEwQiAxMTYyIDExQUU7QzU2NzsxMTBCIDExNjIgMTFBRTsKK0M1Njg7QzU2ODsxMTBCIDExNjIgMTFBRjtDNTY4OzExMEIgMTE2MiAxMUFGOworQzU2OTtDNTY5OzExMEIgMTE2MiAxMUIwO0M1Njk7MTEwQiAxMTYyIDExQjA7CitDNTZBO0M1NkE7MTEwQiAxMTYyIDExQjE7QzU2QTsxMTBCIDExNjIgMTFCMTsKK0M1NkI7QzU2QjsxMTBCIDExNjIgMTFCMjtDNTZCOzExMEIgMTE2MiAxMUIyOworQzU2QztDNTZDOzExMEIgMTE2MiAxMUIzO0M1NkM7MTEwQiAxMTYyIDExQjM7CitDNTZEO0M1NkQ7MTEwQiAxMTYyIDExQjQ7QzU2RDsxMTBCIDExNjIgMTFCNDsKK0M1NkU7QzU2RTsxMTBCIDExNjIgMTFCNTtDNTZFOzExMEIgMTE2MiAxMUI1OworQzU2RjtDNTZGOzExMEIgMTE2MiAxMUI2O0M1NkY7MTEwQiAxMTYyIDExQjY7CitDNTcwO0M1NzA7MTEwQiAxMTYyIDExQjc7QzU3MDsxMTBCIDExNjIgMTFCNzsKK0M1NzE7QzU3MTsxMTBCIDExNjIgMTFCODtDNTcxOzExMEIgMTE2MiAxMUI4OworQzU3MjtDNTcyOzExMEIgMTE2MiAxMUI5O0M1NzI7MTEwQiAxMTYyIDExQjk7CitDNTczO0M1NzM7MTEwQiAxMTYyIDExQkE7QzU3MzsxMTBCIDExNjIgMTFCQTsKK0M1NzQ7QzU3NDsxMTBCIDExNjIgMTFCQjtDNTc0OzExMEIgMTE2MiAxMUJCOworQzU3NTtDNTc1OzExMEIgMTE2MiAxMUJDO0M1NzU7MTEwQiAxMTYyIDExQkM7CitDNTc2O0M1NzY7MTEwQiAxMTYyIDExQkQ7QzU3NjsxMTBCIDExNjIgMTFCRDsKK0M1Nzc7QzU3NzsxMTBCIDExNjIgMTFCRTtDNTc3OzExMEIgMTE2MiAxMUJFOworQzU3ODtDNTc4OzExMEIgMTE2MiAxMUJGO0M1Nzg7MTEwQiAxMTYyIDExQkY7CitDNTc5O0M1Nzk7MTEwQiAxMTYyIDExQzA7QzU3OTsxMTBCIDExNjIgMTFDMDsKK0M1N0E7QzU3QTsxMTBCIDExNjIgMTFDMTtDNTdBOzExMEIgMTE2MiAxMUMxOworQzU3QjtDNTdCOzExMEIgMTE2MiAxMUMyO0M1N0I7MTEwQiAxMTYyIDExQzI7CitDNTdDO0M1N0M7MTEwQiAxMTYzO0M1N0M7MTEwQiAxMTYzOworQzU3RDtDNTdEOzExMEIgMTE2MyAxMUE4O0M1N0Q7MTEwQiAxMTYzIDExQTg7CitDNTdFO0M1N0U7MTEwQiAxMTYzIDExQTk7QzU3RTsxMTBCIDExNjMgMTFBOTsKK0M1N0Y7QzU3RjsxMTBCIDExNjMgMTFBQTtDNTdGOzExMEIgMTE2MyAxMUFBOworQzU4MDtDNTgwOzExMEIgMTE2MyAxMUFCO0M1ODA7MTEwQiAxMTYzIDExQUI7CitDNTgxO0M1ODE7MTEwQiAxMTYzIDExQUM7QzU4MTsxMTBCIDExNjMgMTFBQzsKK0M1ODI7QzU4MjsxMTBCIDExNjMgMTFBRDtDNTgyOzExMEIgMTE2MyAxMUFEOworQzU4MztDNTgzOzExMEIgMTE2MyAxMUFFO0M1ODM7MTEwQiAxMTYzIDExQUU7CitDNTg0O0M1ODQ7MTEwQiAxMTYzIDExQUY7QzU4NDsxMTBCIDExNjMgMTFBRjsKK0M1ODU7QzU4NTsxMTBCIDExNjMgMTFCMDtDNTg1OzExMEIgMTE2MyAxMUIwOworQzU4NjtDNTg2OzExMEIgMTE2MyAxMUIxO0M1ODY7MTEwQiAxMTYzIDExQjE7CitDNTg3O0M1ODc7MTEwQiAxMTYzIDExQjI7QzU4NzsxMTBCIDExNjMgMTFCMjsKK0M1ODg7QzU4ODsxMTBCIDExNjMgMTFCMztDNTg4OzExMEIgMTE2MyAxMUIzOworQzU4OTtDNTg5OzExMEIgMTE2MyAxMUI0O0M1ODk7MTEwQiAxMTYzIDExQjQ7CitDNThBO0M1OEE7MTEwQiAxMTYzIDExQjU7QzU4QTsxMTBCIDExNjMgMTFCNTsKK0M1OEI7QzU4QjsxMTBCIDExNjMgMTFCNjtDNThCOzExMEIgMTE2MyAxMUI2OworQzU4QztDNThDOzExMEIgMTE2MyAxMUI3O0M1OEM7MTEwQiAxMTYzIDExQjc7CitDNThEO0M1OEQ7MTEwQiAxMTYzIDExQjg7QzU4RDsxMTBCIDExNjMgMTFCODsKK0M1OEU7QzU4RTsxMTBCIDExNjMgMTFCOTtDNThFOzExMEIgMTE2MyAxMUI5OworQzU4RjtDNThGOzExMEIgMTE2MyAxMUJBO0M1OEY7MTEwQiAxMTYzIDExQkE7CitDNTkwO0M1OTA7MTEwQiAxMTYzIDExQkI7QzU5MDsxMTBCIDExNjMgMTFCQjsKK0M1OTE7QzU5MTsxMTBCIDExNjMgMTFCQztDNTkxOzExMEIgMTE2MyAxMUJDOworQzU5MjtDNTkyOzExMEIgMTE2MyAxMUJEO0M1OTI7MTEwQiAxMTYzIDExQkQ7CitDNTkzO0M1OTM7MTEwQiAxMTYzIDExQkU7QzU5MzsxMTBCIDExNjMgMTFCRTsKK0M1OTQ7QzU5NDsxMTBCIDExNjMgMTFCRjtDNTk0OzExMEIgMTE2MyAxMUJGOworQzU5NTtDNTk1OzExMEIgMTE2MyAxMUMwO0M1OTU7MTEwQiAxMTYzIDExQzA7CitDNTk2O0M1OTY7MTEwQiAxMTYzIDExQzE7QzU5NjsxMTBCIDExNjMgMTFDMTsKK0M1OTc7QzU5NzsxMTBCIDExNjMgMTFDMjtDNTk3OzExMEIgMTE2MyAxMUMyOworQzU5ODtDNTk4OzExMEIgMTE2NDtDNTk4OzExMEIgMTE2NDsKK0M1OTk7QzU5OTsxMTBCIDExNjQgMTFBODtDNTk5OzExMEIgMTE2NCAxMUE4OworQzU5QTtDNTlBOzExMEIgMTE2NCAxMUE5O0M1OUE7MTEwQiAxMTY0IDExQTk7CitDNTlCO0M1OUI7MTEwQiAxMTY0IDExQUE7QzU5QjsxMTBCIDExNjQgMTFBQTsKK0M1OUM7QzU5QzsxMTBCIDExNjQgMTFBQjtDNTlDOzExMEIgMTE2NCAxMUFCOworQzU5RDtDNTlEOzExMEIgMTE2NCAxMUFDO0M1OUQ7MTEwQiAxMTY0IDExQUM7CitDNTlFO0M1OUU7MTEwQiAxMTY0IDExQUQ7QzU5RTsxMTBCIDExNjQgMTFBRDsKK0M1OUY7QzU5RjsxMTBCIDExNjQgMTFBRTtDNTlGOzExMEIgMTE2NCAxMUFFOworQzVBMDtDNUEwOzExMEIgMTE2NCAxMUFGO0M1QTA7MTEwQiAxMTY0IDExQUY7CitDNUExO0M1QTE7MTEwQiAxMTY0IDExQjA7QzVBMTsxMTBCIDExNjQgMTFCMDsKK0M1QTI7QzVBMjsxMTBCIDExNjQgMTFCMTtDNUEyOzExMEIgMTE2NCAxMUIxOworQzVBMztDNUEzOzExMEIgMTE2NCAxMUIyO0M1QTM7MTEwQiAxMTY0IDExQjI7CitDNUE0O0M1QTQ7MTEwQiAxMTY0IDExQjM7QzVBNDsxMTBCIDExNjQgMTFCMzsKK0M1QTU7QzVBNTsxMTBCIDExNjQgMTFCNDtDNUE1OzExMEIgMTE2NCAxMUI0OworQzVBNjtDNUE2OzExMEIgMTE2NCAxMUI1O0M1QTY7MTEwQiAxMTY0IDExQjU7CitDNUE3O0M1QTc7MTEwQiAxMTY0IDExQjY7QzVBNzsxMTBCIDExNjQgMTFCNjsKK0M1QTg7QzVBODsxMTBCIDExNjQgMTFCNztDNUE4OzExMEIgMTE2NCAxMUI3OworQzVBOTtDNUE5OzExMEIgMTE2NCAxMUI4O0M1QTk7MTEwQiAxMTY0IDExQjg7CitDNUFBO0M1QUE7MTEwQiAxMTY0IDExQjk7QzVBQTsxMTBCIDExNjQgMTFCOTsKK0M1QUI7QzVBQjsxMTBCIDExNjQgMTFCQTtDNUFCOzExMEIgMTE2NCAxMUJBOworQzVBQztDNUFDOzExMEIgMTE2NCAxMUJCO0M1QUM7MTEwQiAxMTY0IDExQkI7CitDNUFEO0M1QUQ7MTEwQiAxMTY0IDExQkM7QzVBRDsxMTBCIDExNjQgMTFCQzsKK0M1QUU7QzVBRTsxMTBCIDExNjQgMTFCRDtDNUFFOzExMEIgMTE2NCAxMUJEOworQzVBRjtDNUFGOzExMEIgMTE2NCAxMUJFO0M1QUY7MTEwQiAxMTY0IDExQkU7CitDNUIwO0M1QjA7MTEwQiAxMTY0IDExQkY7QzVCMDsxMTBCIDExNjQgMTFCRjsKK0M1QjE7QzVCMTsxMTBCIDExNjQgMTFDMDtDNUIxOzExMEIgMTE2NCAxMUMwOworQzVCMjtDNUIyOzExMEIgMTE2NCAxMUMxO0M1QjI7MTEwQiAxMTY0IDExQzE7CitDNUIzO0M1QjM7MTEwQiAxMTY0IDExQzI7QzVCMzsxMTBCIDExNjQgMTFDMjsKK0M1QjQ7QzVCNDsxMTBCIDExNjU7QzVCNDsxMTBCIDExNjU7CitDNUI1O0M1QjU7MTEwQiAxMTY1IDExQTg7QzVCNTsxMTBCIDExNjUgMTFBODsKK0M1QjY7QzVCNjsxMTBCIDExNjUgMTFBOTtDNUI2OzExMEIgMTE2NSAxMUE5OworQzVCNztDNUI3OzExMEIgMTE2NSAxMUFBO0M1Qjc7MTEwQiAxMTY1IDExQUE7CitDNUI4O0M1Qjg7MTEwQiAxMTY1IDExQUI7QzVCODsxMTBCIDExNjUgMTFBQjsKK0M1Qjk7QzVCOTsxMTBCIDExNjUgMTFBQztDNUI5OzExMEIgMTE2NSAxMUFDOworQzVCQTtDNUJBOzExMEIgMTE2NSAxMUFEO0M1QkE7MTEwQiAxMTY1IDExQUQ7CitDNUJCO0M1QkI7MTEwQiAxMTY1IDExQUU7QzVCQjsxMTBCIDExNjUgMTFBRTsKK0M1QkM7QzVCQzsxMTBCIDExNjUgMTFBRjtDNUJDOzExMEIgMTE2NSAxMUFGOworQzVCRDtDNUJEOzExMEIgMTE2NSAxMUIwO0M1QkQ7MTEwQiAxMTY1IDExQjA7CitDNUJFO0M1QkU7MTEwQiAxMTY1IDExQjE7QzVCRTsxMTBCIDExNjUgMTFCMTsKK0M1QkY7QzVCRjsxMTBCIDExNjUgMTFCMjtDNUJGOzExMEIgMTE2NSAxMUIyOworQzVDMDtDNUMwOzExMEIgMTE2NSAxMUIzO0M1QzA7MTEwQiAxMTY1IDExQjM7CitDNUMxO0M1QzE7MTEwQiAxMTY1IDExQjQ7QzVDMTsxMTBCIDExNjUgMTFCNDsKK0M1QzI7QzVDMjsxMTBCIDExNjUgMTFCNTtDNUMyOzExMEIgMTE2NSAxMUI1OworQzVDMztDNUMzOzExMEIgMTE2NSAxMUI2O0M1QzM7MTEwQiAxMTY1IDExQjY7CitDNUM0O0M1QzQ7MTEwQiAxMTY1IDExQjc7QzVDNDsxMTBCIDExNjUgMTFCNzsKK0M1QzU7QzVDNTsxMTBCIDExNjUgMTFCODtDNUM1OzExMEIgMTE2NSAxMUI4OworQzVDNjtDNUM2OzExMEIgMTE2NSAxMUI5O0M1QzY7MTEwQiAxMTY1IDExQjk7CitDNUM3O0M1Qzc7MTEwQiAxMTY1IDExQkE7QzVDNzsxMTBCIDExNjUgMTFCQTsKK0M1Qzg7QzVDODsxMTBCIDExNjUgMTFCQjtDNUM4OzExMEIgMTE2NSAxMUJCOworQzVDOTtDNUM5OzExMEIgMTE2NSAxMUJDO0M1Qzk7MTEwQiAxMTY1IDExQkM7CitDNUNBO0M1Q0E7MTEwQiAxMTY1IDExQkQ7QzVDQTsxMTBCIDExNjUgMTFCRDsKK0M1Q0I7QzVDQjsxMTBCIDExNjUgMTFCRTtDNUNCOzExMEIgMTE2NSAxMUJFOworQzVDQztDNUNDOzExMEIgMTE2NSAxMUJGO0M1Q0M7MTEwQiAxMTY1IDExQkY7CitDNUNEO0M1Q0Q7MTEwQiAxMTY1IDExQzA7QzVDRDsxMTBCIDExNjUgMTFDMDsKK0M1Q0U7QzVDRTsxMTBCIDExNjUgMTFDMTtDNUNFOzExMEIgMTE2NSAxMUMxOworQzVDRjtDNUNGOzExMEIgMTE2NSAxMUMyO0M1Q0Y7MTEwQiAxMTY1IDExQzI7CitDNUQwO0M1RDA7MTEwQiAxMTY2O0M1RDA7MTEwQiAxMTY2OworQzVEMTtDNUQxOzExMEIgMTE2NiAxMUE4O0M1RDE7MTEwQiAxMTY2IDExQTg7CitDNUQyO0M1RDI7MTEwQiAxMTY2IDExQTk7QzVEMjsxMTBCIDExNjYgMTFBOTsKK0M1RDM7QzVEMzsxMTBCIDExNjYgMTFBQTtDNUQzOzExMEIgMTE2NiAxMUFBOworQzVENDtDNUQ0OzExMEIgMTE2NiAxMUFCO0M1RDQ7MTEwQiAxMTY2IDExQUI7CitDNUQ1O0M1RDU7MTEwQiAxMTY2IDExQUM7QzVENTsxMTBCIDExNjYgMTFBQzsKK0M1RDY7QzVENjsxMTBCIDExNjYgMTFBRDtDNUQ2OzExMEIgMTE2NiAxMUFEOworQzVENztDNUQ3OzExMEIgMTE2NiAxMUFFO0M1RDc7MTEwQiAxMTY2IDExQUU7CitDNUQ4O0M1RDg7MTEwQiAxMTY2IDExQUY7QzVEODsxMTBCIDExNjYgMTFBRjsKK0M1RDk7QzVEOTsxMTBCIDExNjYgMTFCMDtDNUQ5OzExMEIgMTE2NiAxMUIwOworQzVEQTtDNURBOzExMEIgMTE2NiAxMUIxO0M1REE7MTEwQiAxMTY2IDExQjE7CitDNURCO0M1REI7MTEwQiAxMTY2IDExQjI7QzVEQjsxMTBCIDExNjYgMTFCMjsKK0M1REM7QzVEQzsxMTBCIDExNjYgMTFCMztDNURDOzExMEIgMTE2NiAxMUIzOworQzVERDtDNUREOzExMEIgMTE2NiAxMUI0O0M1REQ7MTEwQiAxMTY2IDExQjQ7CitDNURFO0M1REU7MTEwQiAxMTY2IDExQjU7QzVERTsxMTBCIDExNjYgMTFCNTsKK0M1REY7QzVERjsxMTBCIDExNjYgMTFCNjtDNURGOzExMEIgMTE2NiAxMUI2OworQzVFMDtDNUUwOzExMEIgMTE2NiAxMUI3O0M1RTA7MTEwQiAxMTY2IDExQjc7CitDNUUxO0M1RTE7MTEwQiAxMTY2IDExQjg7QzVFMTsxMTBCIDExNjYgMTFCODsKK0M1RTI7QzVFMjsxMTBCIDExNjYgMTFCOTtDNUUyOzExMEIgMTE2NiAxMUI5OworQzVFMztDNUUzOzExMEIgMTE2NiAxMUJBO0M1RTM7MTEwQiAxMTY2IDExQkE7CitDNUU0O0M1RTQ7MTEwQiAxMTY2IDExQkI7QzVFNDsxMTBCIDExNjYgMTFCQjsKK0M1RTU7QzVFNTsxMTBCIDExNjYgMTFCQztDNUU1OzExMEIgMTE2NiAxMUJDOworQzVFNjtDNUU2OzExMEIgMTE2NiAxMUJEO0M1RTY7MTEwQiAxMTY2IDExQkQ7CitDNUU3O0M1RTc7MTEwQiAxMTY2IDExQkU7QzVFNzsxMTBCIDExNjYgMTFCRTsKK0M1RTg7QzVFODsxMTBCIDExNjYgMTFCRjtDNUU4OzExMEIgMTE2NiAxMUJGOworQzVFOTtDNUU5OzExMEIgMTE2NiAxMUMwO0M1RTk7MTEwQiAxMTY2IDExQzA7CitDNUVBO0M1RUE7MTEwQiAxMTY2IDExQzE7QzVFQTsxMTBCIDExNjYgMTFDMTsKK0M1RUI7QzVFQjsxMTBCIDExNjYgMTFDMjtDNUVCOzExMEIgMTE2NiAxMUMyOworQzVFQztDNUVDOzExMEIgMTE2NztDNUVDOzExMEIgMTE2NzsKK0M1RUQ7QzVFRDsxMTBCIDExNjcgMTFBODtDNUVEOzExMEIgMTE2NyAxMUE4OworQzVFRTtDNUVFOzExMEIgMTE2NyAxMUE5O0M1RUU7MTEwQiAxMTY3IDExQTk7CitDNUVGO0M1RUY7MTEwQiAxMTY3IDExQUE7QzVFRjsxMTBCIDExNjcgMTFBQTsKK0M1RjA7QzVGMDsxMTBCIDExNjcgMTFBQjtDNUYwOzExMEIgMTE2NyAxMUFCOworQzVGMTtDNUYxOzExMEIgMTE2NyAxMUFDO0M1RjE7MTEwQiAxMTY3IDExQUM7CitDNUYyO0M1RjI7MTEwQiAxMTY3IDExQUQ7QzVGMjsxMTBCIDExNjcgMTFBRDsKK0M1RjM7QzVGMzsxMTBCIDExNjcgMTFBRTtDNUYzOzExMEIgMTE2NyAxMUFFOworQzVGNDtDNUY0OzExMEIgMTE2NyAxMUFGO0M1RjQ7MTEwQiAxMTY3IDExQUY7CitDNUY1O0M1RjU7MTEwQiAxMTY3IDExQjA7QzVGNTsxMTBCIDExNjcgMTFCMDsKK0M1RjY7QzVGNjsxMTBCIDExNjcgMTFCMTtDNUY2OzExMEIgMTE2NyAxMUIxOworQzVGNztDNUY3OzExMEIgMTE2NyAxMUIyO0M1Rjc7MTEwQiAxMTY3IDExQjI7CitDNUY4O0M1Rjg7MTEwQiAxMTY3IDExQjM7QzVGODsxMTBCIDExNjcgMTFCMzsKK0M1Rjk7QzVGOTsxMTBCIDExNjcgMTFCNDtDNUY5OzExMEIgMTE2NyAxMUI0OworQzVGQTtDNUZBOzExMEIgMTE2NyAxMUI1O0M1RkE7MTEwQiAxMTY3IDExQjU7CitDNUZCO0M1RkI7MTEwQiAxMTY3IDExQjY7QzVGQjsxMTBCIDExNjcgMTFCNjsKK0M1RkM7QzVGQzsxMTBCIDExNjcgMTFCNztDNUZDOzExMEIgMTE2NyAxMUI3OworQzVGRDtDNUZEOzExMEIgMTE2NyAxMUI4O0M1RkQ7MTEwQiAxMTY3IDExQjg7CitDNUZFO0M1RkU7MTEwQiAxMTY3IDExQjk7QzVGRTsxMTBCIDExNjcgMTFCOTsKK0M1RkY7QzVGRjsxMTBCIDExNjcgMTFCQTtDNUZGOzExMEIgMTE2NyAxMUJBOworQzYwMDtDNjAwOzExMEIgMTE2NyAxMUJCO0M2MDA7MTEwQiAxMTY3IDExQkI7CitDNjAxO0M2MDE7MTEwQiAxMTY3IDExQkM7QzYwMTsxMTBCIDExNjcgMTFCQzsKK0M2MDI7QzYwMjsxMTBCIDExNjcgMTFCRDtDNjAyOzExMEIgMTE2NyAxMUJEOworQzYwMztDNjAzOzExMEIgMTE2NyAxMUJFO0M2MDM7MTEwQiAxMTY3IDExQkU7CitDNjA0O0M2MDQ7MTEwQiAxMTY3IDExQkY7QzYwNDsxMTBCIDExNjcgMTFCRjsKK0M2MDU7QzYwNTsxMTBCIDExNjcgMTFDMDtDNjA1OzExMEIgMTE2NyAxMUMwOworQzYwNjtDNjA2OzExMEIgMTE2NyAxMUMxO0M2MDY7MTEwQiAxMTY3IDExQzE7CitDNjA3O0M2MDc7MTEwQiAxMTY3IDExQzI7QzYwNzsxMTBCIDExNjcgMTFDMjsKK0M2MDg7QzYwODsxMTBCIDExNjg7QzYwODsxMTBCIDExNjg7CitDNjA5O0M2MDk7MTEwQiAxMTY4IDExQTg7QzYwOTsxMTBCIDExNjggMTFBODsKK0M2MEE7QzYwQTsxMTBCIDExNjggMTFBOTtDNjBBOzExMEIgMTE2OCAxMUE5OworQzYwQjtDNjBCOzExMEIgMTE2OCAxMUFBO0M2MEI7MTEwQiAxMTY4IDExQUE7CitDNjBDO0M2MEM7MTEwQiAxMTY4IDExQUI7QzYwQzsxMTBCIDExNjggMTFBQjsKK0M2MEQ7QzYwRDsxMTBCIDExNjggMTFBQztDNjBEOzExMEIgMTE2OCAxMUFDOworQzYwRTtDNjBFOzExMEIgMTE2OCAxMUFEO0M2MEU7MTEwQiAxMTY4IDExQUQ7CitDNjBGO0M2MEY7MTEwQiAxMTY4IDExQUU7QzYwRjsxMTBCIDExNjggMTFBRTsKK0M2MTA7QzYxMDsxMTBCIDExNjggMTFBRjtDNjEwOzExMEIgMTE2OCAxMUFGOworQzYxMTtDNjExOzExMEIgMTE2OCAxMUIwO0M2MTE7MTEwQiAxMTY4IDExQjA7CitDNjEyO0M2MTI7MTEwQiAxMTY4IDExQjE7QzYxMjsxMTBCIDExNjggMTFCMTsKK0M2MTM7QzYxMzsxMTBCIDExNjggMTFCMjtDNjEzOzExMEIgMTE2OCAxMUIyOworQzYxNDtDNjE0OzExMEIgMTE2OCAxMUIzO0M2MTQ7MTEwQiAxMTY4IDExQjM7CitDNjE1O0M2MTU7MTEwQiAxMTY4IDExQjQ7QzYxNTsxMTBCIDExNjggMTFCNDsKK0M2MTY7QzYxNjsxMTBCIDExNjggMTFCNTtDNjE2OzExMEIgMTE2OCAxMUI1OworQzYxNztDNjE3OzExMEIgMTE2OCAxMUI2O0M2MTc7MTEwQiAxMTY4IDExQjY7CitDNjE4O0M2MTg7MTEwQiAxMTY4IDExQjc7QzYxODsxMTBCIDExNjggMTFCNzsKK0M2MTk7QzYxOTsxMTBCIDExNjggMTFCODtDNjE5OzExMEIgMTE2OCAxMUI4OworQzYxQTtDNjFBOzExMEIgMTE2OCAxMUI5O0M2MUE7MTEwQiAxMTY4IDExQjk7CitDNjFCO0M2MUI7MTEwQiAxMTY4IDExQkE7QzYxQjsxMTBCIDExNjggMTFCQTsKK0M2MUM7QzYxQzsxMTBCIDExNjggMTFCQjtDNjFDOzExMEIgMTE2OCAxMUJCOworQzYxRDtDNjFEOzExMEIgMTE2OCAxMUJDO0M2MUQ7MTEwQiAxMTY4IDExQkM7CitDNjFFO0M2MUU7MTEwQiAxMTY4IDExQkQ7QzYxRTsxMTBCIDExNjggMTFCRDsKK0M2MUY7QzYxRjsxMTBCIDExNjggMTFCRTtDNjFGOzExMEIgMTE2OCAxMUJFOworQzYyMDtDNjIwOzExMEIgMTE2OCAxMUJGO0M2MjA7MTEwQiAxMTY4IDExQkY7CitDNjIxO0M2MjE7MTEwQiAxMTY4IDExQzA7QzYyMTsxMTBCIDExNjggMTFDMDsKK0M2MjI7QzYyMjsxMTBCIDExNjggMTFDMTtDNjIyOzExMEIgMTE2OCAxMUMxOworQzYyMztDNjIzOzExMEIgMTE2OCAxMUMyO0M2MjM7MTEwQiAxMTY4IDExQzI7CitDNjI0O0M2MjQ7MTEwQiAxMTY5O0M2MjQ7MTEwQiAxMTY5OworQzYyNTtDNjI1OzExMEIgMTE2OSAxMUE4O0M2MjU7MTEwQiAxMTY5IDExQTg7CitDNjI2O0M2MjY7MTEwQiAxMTY5IDExQTk7QzYyNjsxMTBCIDExNjkgMTFBOTsKK0M2Mjc7QzYyNzsxMTBCIDExNjkgMTFBQTtDNjI3OzExMEIgMTE2OSAxMUFBOworQzYyODtDNjI4OzExMEIgMTE2OSAxMUFCO0M2Mjg7MTEwQiAxMTY5IDExQUI7CitDNjI5O0M2Mjk7MTEwQiAxMTY5IDExQUM7QzYyOTsxMTBCIDExNjkgMTFBQzsKK0M2MkE7QzYyQTsxMTBCIDExNjkgMTFBRDtDNjJBOzExMEIgMTE2OSAxMUFEOworQzYyQjtDNjJCOzExMEIgMTE2OSAxMUFFO0M2MkI7MTEwQiAxMTY5IDExQUU7CitDNjJDO0M2MkM7MTEwQiAxMTY5IDExQUY7QzYyQzsxMTBCIDExNjkgMTFBRjsKK0M2MkQ7QzYyRDsxMTBCIDExNjkgMTFCMDtDNjJEOzExMEIgMTE2OSAxMUIwOworQzYyRTtDNjJFOzExMEIgMTE2OSAxMUIxO0M2MkU7MTEwQiAxMTY5IDExQjE7CitDNjJGO0M2MkY7MTEwQiAxMTY5IDExQjI7QzYyRjsxMTBCIDExNjkgMTFCMjsKK0M2MzA7QzYzMDsxMTBCIDExNjkgMTFCMztDNjMwOzExMEIgMTE2OSAxMUIzOworQzYzMTtDNjMxOzExMEIgMTE2OSAxMUI0O0M2MzE7MTEwQiAxMTY5IDExQjQ7CitDNjMyO0M2MzI7MTEwQiAxMTY5IDExQjU7QzYzMjsxMTBCIDExNjkgMTFCNTsKK0M2MzM7QzYzMzsxMTBCIDExNjkgMTFCNjtDNjMzOzExMEIgMTE2OSAxMUI2OworQzYzNDtDNjM0OzExMEIgMTE2OSAxMUI3O0M2MzQ7MTEwQiAxMTY5IDExQjc7CitDNjM1O0M2MzU7MTEwQiAxMTY5IDExQjg7QzYzNTsxMTBCIDExNjkgMTFCODsKK0M2MzY7QzYzNjsxMTBCIDExNjkgMTFCOTtDNjM2OzExMEIgMTE2OSAxMUI5OworQzYzNztDNjM3OzExMEIgMTE2OSAxMUJBO0M2Mzc7MTEwQiAxMTY5IDExQkE7CitDNjM4O0M2Mzg7MTEwQiAxMTY5IDExQkI7QzYzODsxMTBCIDExNjkgMTFCQjsKK0M2Mzk7QzYzOTsxMTBCIDExNjkgMTFCQztDNjM5OzExMEIgMTE2OSAxMUJDOworQzYzQTtDNjNBOzExMEIgMTE2OSAxMUJEO0M2M0E7MTEwQiAxMTY5IDExQkQ7CitDNjNCO0M2M0I7MTEwQiAxMTY5IDExQkU7QzYzQjsxMTBCIDExNjkgMTFCRTsKK0M2M0M7QzYzQzsxMTBCIDExNjkgMTFCRjtDNjNDOzExMEIgMTE2OSAxMUJGOworQzYzRDtDNjNEOzExMEIgMTE2OSAxMUMwO0M2M0Q7MTEwQiAxMTY5IDExQzA7CitDNjNFO0M2M0U7MTEwQiAxMTY5IDExQzE7QzYzRTsxMTBCIDExNjkgMTFDMTsKK0M2M0Y7QzYzRjsxMTBCIDExNjkgMTFDMjtDNjNGOzExMEIgMTE2OSAxMUMyOworQzY0MDtDNjQwOzExMEIgMTE2QTtDNjQwOzExMEIgMTE2QTsKK0M2NDE7QzY0MTsxMTBCIDExNkEgMTFBODtDNjQxOzExMEIgMTE2QSAxMUE4OworQzY0MjtDNjQyOzExMEIgMTE2QSAxMUE5O0M2NDI7MTEwQiAxMTZBIDExQTk7CitDNjQzO0M2NDM7MTEwQiAxMTZBIDExQUE7QzY0MzsxMTBCIDExNkEgMTFBQTsKK0M2NDQ7QzY0NDsxMTBCIDExNkEgMTFBQjtDNjQ0OzExMEIgMTE2QSAxMUFCOworQzY0NTtDNjQ1OzExMEIgMTE2QSAxMUFDO0M2NDU7MTEwQiAxMTZBIDExQUM7CitDNjQ2O0M2NDY7MTEwQiAxMTZBIDExQUQ7QzY0NjsxMTBCIDExNkEgMTFBRDsKK0M2NDc7QzY0NzsxMTBCIDExNkEgMTFBRTtDNjQ3OzExMEIgMTE2QSAxMUFFOworQzY0ODtDNjQ4OzExMEIgMTE2QSAxMUFGO0M2NDg7MTEwQiAxMTZBIDExQUY7CitDNjQ5O0M2NDk7MTEwQiAxMTZBIDExQjA7QzY0OTsxMTBCIDExNkEgMTFCMDsKK0M2NEE7QzY0QTsxMTBCIDExNkEgMTFCMTtDNjRBOzExMEIgMTE2QSAxMUIxOworQzY0QjtDNjRCOzExMEIgMTE2QSAxMUIyO0M2NEI7MTEwQiAxMTZBIDExQjI7CitDNjRDO0M2NEM7MTEwQiAxMTZBIDExQjM7QzY0QzsxMTBCIDExNkEgMTFCMzsKK0M2NEQ7QzY0RDsxMTBCIDExNkEgMTFCNDtDNjREOzExMEIgMTE2QSAxMUI0OworQzY0RTtDNjRFOzExMEIgMTE2QSAxMUI1O0M2NEU7MTEwQiAxMTZBIDExQjU7CitDNjRGO0M2NEY7MTEwQiAxMTZBIDExQjY7QzY0RjsxMTBCIDExNkEgMTFCNjsKK0M2NTA7QzY1MDsxMTBCIDExNkEgMTFCNztDNjUwOzExMEIgMTE2QSAxMUI3OworQzY1MTtDNjUxOzExMEIgMTE2QSAxMUI4O0M2NTE7MTEwQiAxMTZBIDExQjg7CitDNjUyO0M2NTI7MTEwQiAxMTZBIDExQjk7QzY1MjsxMTBCIDExNkEgMTFCOTsKK0M2NTM7QzY1MzsxMTBCIDExNkEgMTFCQTtDNjUzOzExMEIgMTE2QSAxMUJBOworQzY1NDtDNjU0OzExMEIgMTE2QSAxMUJCO0M2NTQ7MTEwQiAxMTZBIDExQkI7CitDNjU1O0M2NTU7MTEwQiAxMTZBIDExQkM7QzY1NTsxMTBCIDExNkEgMTFCQzsKK0M2NTY7QzY1NjsxMTBCIDExNkEgMTFCRDtDNjU2OzExMEIgMTE2QSAxMUJEOworQzY1NztDNjU3OzExMEIgMTE2QSAxMUJFO0M2NTc7MTEwQiAxMTZBIDExQkU7CitDNjU4O0M2NTg7MTEwQiAxMTZBIDExQkY7QzY1ODsxMTBCIDExNkEgMTFCRjsKK0M2NTk7QzY1OTsxMTBCIDExNkEgMTFDMDtDNjU5OzExMEIgMTE2QSAxMUMwOworQzY1QTtDNjVBOzExMEIgMTE2QSAxMUMxO0M2NUE7MTEwQiAxMTZBIDExQzE7CitDNjVCO0M2NUI7MTEwQiAxMTZBIDExQzI7QzY1QjsxMTBCIDExNkEgMTFDMjsKK0M2NUM7QzY1QzsxMTBCIDExNkI7QzY1QzsxMTBCIDExNkI7CitDNjVEO0M2NUQ7MTEwQiAxMTZCIDExQTg7QzY1RDsxMTBCIDExNkIgMTFBODsKK0M2NUU7QzY1RTsxMTBCIDExNkIgMTFBOTtDNjVFOzExMEIgMTE2QiAxMUE5OworQzY1RjtDNjVGOzExMEIgMTE2QiAxMUFBO0M2NUY7MTEwQiAxMTZCIDExQUE7CitDNjYwO0M2NjA7MTEwQiAxMTZCIDExQUI7QzY2MDsxMTBCIDExNkIgMTFBQjsKK0M2NjE7QzY2MTsxMTBCIDExNkIgMTFBQztDNjYxOzExMEIgMTE2QiAxMUFDOworQzY2MjtDNjYyOzExMEIgMTE2QiAxMUFEO0M2NjI7MTEwQiAxMTZCIDExQUQ7CitDNjYzO0M2NjM7MTEwQiAxMTZCIDExQUU7QzY2MzsxMTBCIDExNkIgMTFBRTsKK0M2NjQ7QzY2NDsxMTBCIDExNkIgMTFBRjtDNjY0OzExMEIgMTE2QiAxMUFGOworQzY2NTtDNjY1OzExMEIgMTE2QiAxMUIwO0M2NjU7MTEwQiAxMTZCIDExQjA7CitDNjY2O0M2NjY7MTEwQiAxMTZCIDExQjE7QzY2NjsxMTBCIDExNkIgMTFCMTsKK0M2Njc7QzY2NzsxMTBCIDExNkIgMTFCMjtDNjY3OzExMEIgMTE2QiAxMUIyOworQzY2ODtDNjY4OzExMEIgMTE2QiAxMUIzO0M2Njg7MTEwQiAxMTZCIDExQjM7CitDNjY5O0M2Njk7MTEwQiAxMTZCIDExQjQ7QzY2OTsxMTBCIDExNkIgMTFCNDsKK0M2NkE7QzY2QTsxMTBCIDExNkIgMTFCNTtDNjZBOzExMEIgMTE2QiAxMUI1OworQzY2QjtDNjZCOzExMEIgMTE2QiAxMUI2O0M2NkI7MTEwQiAxMTZCIDExQjY7CitDNjZDO0M2NkM7MTEwQiAxMTZCIDExQjc7QzY2QzsxMTBCIDExNkIgMTFCNzsKK0M2NkQ7QzY2RDsxMTBCIDExNkIgMTFCODtDNjZEOzExMEIgMTE2QiAxMUI4OworQzY2RTtDNjZFOzExMEIgMTE2QiAxMUI5O0M2NkU7MTEwQiAxMTZCIDExQjk7CitDNjZGO0M2NkY7MTEwQiAxMTZCIDExQkE7QzY2RjsxMTBCIDExNkIgMTFCQTsKK0M2NzA7QzY3MDsxMTBCIDExNkIgMTFCQjtDNjcwOzExMEIgMTE2QiAxMUJCOworQzY3MTtDNjcxOzExMEIgMTE2QiAxMUJDO0M2NzE7MTEwQiAxMTZCIDExQkM7CitDNjcyO0M2NzI7MTEwQiAxMTZCIDExQkQ7QzY3MjsxMTBCIDExNkIgMTFCRDsKK0M2NzM7QzY3MzsxMTBCIDExNkIgMTFCRTtDNjczOzExMEIgMTE2QiAxMUJFOworQzY3NDtDNjc0OzExMEIgMTE2QiAxMUJGO0M2NzQ7MTEwQiAxMTZCIDExQkY7CitDNjc1O0M2NzU7MTEwQiAxMTZCIDExQzA7QzY3NTsxMTBCIDExNkIgMTFDMDsKK0M2NzY7QzY3NjsxMTBCIDExNkIgMTFDMTtDNjc2OzExMEIgMTE2QiAxMUMxOworQzY3NztDNjc3OzExMEIgMTE2QiAxMUMyO0M2Nzc7MTEwQiAxMTZCIDExQzI7CitDNjc4O0M2Nzg7MTEwQiAxMTZDO0M2Nzg7MTEwQiAxMTZDOworQzY3OTtDNjc5OzExMEIgMTE2QyAxMUE4O0M2Nzk7MTEwQiAxMTZDIDExQTg7CitDNjdBO0M2N0E7MTEwQiAxMTZDIDExQTk7QzY3QTsxMTBCIDExNkMgMTFBOTsKK0M2N0I7QzY3QjsxMTBCIDExNkMgMTFBQTtDNjdCOzExMEIgMTE2QyAxMUFBOworQzY3QztDNjdDOzExMEIgMTE2QyAxMUFCO0M2N0M7MTEwQiAxMTZDIDExQUI7CitDNjdEO0M2N0Q7MTEwQiAxMTZDIDExQUM7QzY3RDsxMTBCIDExNkMgMTFBQzsKK0M2N0U7QzY3RTsxMTBCIDExNkMgMTFBRDtDNjdFOzExMEIgMTE2QyAxMUFEOworQzY3RjtDNjdGOzExMEIgMTE2QyAxMUFFO0M2N0Y7MTEwQiAxMTZDIDExQUU7CitDNjgwO0M2ODA7MTEwQiAxMTZDIDExQUY7QzY4MDsxMTBCIDExNkMgMTFBRjsKK0M2ODE7QzY4MTsxMTBCIDExNkMgMTFCMDtDNjgxOzExMEIgMTE2QyAxMUIwOworQzY4MjtDNjgyOzExMEIgMTE2QyAxMUIxO0M2ODI7MTEwQiAxMTZDIDExQjE7CitDNjgzO0M2ODM7MTEwQiAxMTZDIDExQjI7QzY4MzsxMTBCIDExNkMgMTFCMjsKK0M2ODQ7QzY4NDsxMTBCIDExNkMgMTFCMztDNjg0OzExMEIgMTE2QyAxMUIzOworQzY4NTtDNjg1OzExMEIgMTE2QyAxMUI0O0M2ODU7MTEwQiAxMTZDIDExQjQ7CitDNjg2O0M2ODY7MTEwQiAxMTZDIDExQjU7QzY4NjsxMTBCIDExNkMgMTFCNTsKK0M2ODc7QzY4NzsxMTBCIDExNkMgMTFCNjtDNjg3OzExMEIgMTE2QyAxMUI2OworQzY4ODtDNjg4OzExMEIgMTE2QyAxMUI3O0M2ODg7MTEwQiAxMTZDIDExQjc7CitDNjg5O0M2ODk7MTEwQiAxMTZDIDExQjg7QzY4OTsxMTBCIDExNkMgMTFCODsKK0M2OEE7QzY4QTsxMTBCIDExNkMgMTFCOTtDNjhBOzExMEIgMTE2QyAxMUI5OworQzY4QjtDNjhCOzExMEIgMTE2QyAxMUJBO0M2OEI7MTEwQiAxMTZDIDExQkE7CitDNjhDO0M2OEM7MTEwQiAxMTZDIDExQkI7QzY4QzsxMTBCIDExNkMgMTFCQjsKK0M2OEQ7QzY4RDsxMTBCIDExNkMgMTFCQztDNjhEOzExMEIgMTE2QyAxMUJDOworQzY4RTtDNjhFOzExMEIgMTE2QyAxMUJEO0M2OEU7MTEwQiAxMTZDIDExQkQ7CitDNjhGO0M2OEY7MTEwQiAxMTZDIDExQkU7QzY4RjsxMTBCIDExNkMgMTFCRTsKK0M2OTA7QzY5MDsxMTBCIDExNkMgMTFCRjtDNjkwOzExMEIgMTE2QyAxMUJGOworQzY5MTtDNjkxOzExMEIgMTE2QyAxMUMwO0M2OTE7MTEwQiAxMTZDIDExQzA7CitDNjkyO0M2OTI7MTEwQiAxMTZDIDExQzE7QzY5MjsxMTBCIDExNkMgMTFDMTsKK0M2OTM7QzY5MzsxMTBCIDExNkMgMTFDMjtDNjkzOzExMEIgMTE2QyAxMUMyOworQzY5NDtDNjk0OzExMEIgMTE2RDtDNjk0OzExMEIgMTE2RDsKK0M2OTU7QzY5NTsxMTBCIDExNkQgMTFBODtDNjk1OzExMEIgMTE2RCAxMUE4OworQzY5NjtDNjk2OzExMEIgMTE2RCAxMUE5O0M2OTY7MTEwQiAxMTZEIDExQTk7CitDNjk3O0M2OTc7MTEwQiAxMTZEIDExQUE7QzY5NzsxMTBCIDExNkQgMTFBQTsKK0M2OTg7QzY5ODsxMTBCIDExNkQgMTFBQjtDNjk4OzExMEIgMTE2RCAxMUFCOworQzY5OTtDNjk5OzExMEIgMTE2RCAxMUFDO0M2OTk7MTEwQiAxMTZEIDExQUM7CitDNjlBO0M2OUE7MTEwQiAxMTZEIDExQUQ7QzY5QTsxMTBCIDExNkQgMTFBRDsKK0M2OUI7QzY5QjsxMTBCIDExNkQgMTFBRTtDNjlCOzExMEIgMTE2RCAxMUFFOworQzY5QztDNjlDOzExMEIgMTE2RCAxMUFGO0M2OUM7MTEwQiAxMTZEIDExQUY7CitDNjlEO0M2OUQ7MTEwQiAxMTZEIDExQjA7QzY5RDsxMTBCIDExNkQgMTFCMDsKK0M2OUU7QzY5RTsxMTBCIDExNkQgMTFCMTtDNjlFOzExMEIgMTE2RCAxMUIxOworQzY5RjtDNjlGOzExMEIgMTE2RCAxMUIyO0M2OUY7MTEwQiAxMTZEIDExQjI7CitDNkEwO0M2QTA7MTEwQiAxMTZEIDExQjM7QzZBMDsxMTBCIDExNkQgMTFCMzsKK0M2QTE7QzZBMTsxMTBCIDExNkQgMTFCNDtDNkExOzExMEIgMTE2RCAxMUI0OworQzZBMjtDNkEyOzExMEIgMTE2RCAxMUI1O0M2QTI7MTEwQiAxMTZEIDExQjU7CitDNkEzO0M2QTM7MTEwQiAxMTZEIDExQjY7QzZBMzsxMTBCIDExNkQgMTFCNjsKK0M2QTQ7QzZBNDsxMTBCIDExNkQgMTFCNztDNkE0OzExMEIgMTE2RCAxMUI3OworQzZBNTtDNkE1OzExMEIgMTE2RCAxMUI4O0M2QTU7MTEwQiAxMTZEIDExQjg7CitDNkE2O0M2QTY7MTEwQiAxMTZEIDExQjk7QzZBNjsxMTBCIDExNkQgMTFCOTsKK0M2QTc7QzZBNzsxMTBCIDExNkQgMTFCQTtDNkE3OzExMEIgMTE2RCAxMUJBOworQzZBODtDNkE4OzExMEIgMTE2RCAxMUJCO0M2QTg7MTEwQiAxMTZEIDExQkI7CitDNkE5O0M2QTk7MTEwQiAxMTZEIDExQkM7QzZBOTsxMTBCIDExNkQgMTFCQzsKK0M2QUE7QzZBQTsxMTBCIDExNkQgMTFCRDtDNkFBOzExMEIgMTE2RCAxMUJEOworQzZBQjtDNkFCOzExMEIgMTE2RCAxMUJFO0M2QUI7MTEwQiAxMTZEIDExQkU7CitDNkFDO0M2QUM7MTEwQiAxMTZEIDExQkY7QzZBQzsxMTBCIDExNkQgMTFCRjsKK0M2QUQ7QzZBRDsxMTBCIDExNkQgMTFDMDtDNkFEOzExMEIgMTE2RCAxMUMwOworQzZBRTtDNkFFOzExMEIgMTE2RCAxMUMxO0M2QUU7MTEwQiAxMTZEIDExQzE7CitDNkFGO0M2QUY7MTEwQiAxMTZEIDExQzI7QzZBRjsxMTBCIDExNkQgMTFDMjsKK0M2QjA7QzZCMDsxMTBCIDExNkU7QzZCMDsxMTBCIDExNkU7CitDNkIxO0M2QjE7MTEwQiAxMTZFIDExQTg7QzZCMTsxMTBCIDExNkUgMTFBODsKK0M2QjI7QzZCMjsxMTBCIDExNkUgMTFBOTtDNkIyOzExMEIgMTE2RSAxMUE5OworQzZCMztDNkIzOzExMEIgMTE2RSAxMUFBO0M2QjM7MTEwQiAxMTZFIDExQUE7CitDNkI0O0M2QjQ7MTEwQiAxMTZFIDExQUI7QzZCNDsxMTBCIDExNkUgMTFBQjsKK0M2QjU7QzZCNTsxMTBCIDExNkUgMTFBQztDNkI1OzExMEIgMTE2RSAxMUFDOworQzZCNjtDNkI2OzExMEIgMTE2RSAxMUFEO0M2QjY7MTEwQiAxMTZFIDExQUQ7CitDNkI3O0M2Qjc7MTEwQiAxMTZFIDExQUU7QzZCNzsxMTBCIDExNkUgMTFBRTsKK0M2Qjg7QzZCODsxMTBCIDExNkUgMTFBRjtDNkI4OzExMEIgMTE2RSAxMUFGOworQzZCOTtDNkI5OzExMEIgMTE2RSAxMUIwO0M2Qjk7MTEwQiAxMTZFIDExQjA7CitDNkJBO0M2QkE7MTEwQiAxMTZFIDExQjE7QzZCQTsxMTBCIDExNkUgMTFCMTsKK0M2QkI7QzZCQjsxMTBCIDExNkUgMTFCMjtDNkJCOzExMEIgMTE2RSAxMUIyOworQzZCQztDNkJDOzExMEIgMTE2RSAxMUIzO0M2QkM7MTEwQiAxMTZFIDExQjM7CitDNkJEO0M2QkQ7MTEwQiAxMTZFIDExQjQ7QzZCRDsxMTBCIDExNkUgMTFCNDsKK0M2QkU7QzZCRTsxMTBCIDExNkUgMTFCNTtDNkJFOzExMEIgMTE2RSAxMUI1OworQzZCRjtDNkJGOzExMEIgMTE2RSAxMUI2O0M2QkY7MTEwQiAxMTZFIDExQjY7CitDNkMwO0M2QzA7MTEwQiAxMTZFIDExQjc7QzZDMDsxMTBCIDExNkUgMTFCNzsKK0M2QzE7QzZDMTsxMTBCIDExNkUgMTFCODtDNkMxOzExMEIgMTE2RSAxMUI4OworQzZDMjtDNkMyOzExMEIgMTE2RSAxMUI5O0M2QzI7MTEwQiAxMTZFIDExQjk7CitDNkMzO0M2QzM7MTEwQiAxMTZFIDExQkE7QzZDMzsxMTBCIDExNkUgMTFCQTsKK0M2QzQ7QzZDNDsxMTBCIDExNkUgMTFCQjtDNkM0OzExMEIgMTE2RSAxMUJCOworQzZDNTtDNkM1OzExMEIgMTE2RSAxMUJDO0M2QzU7MTEwQiAxMTZFIDExQkM7CitDNkM2O0M2QzY7MTEwQiAxMTZFIDExQkQ7QzZDNjsxMTBCIDExNkUgMTFCRDsKK0M2Qzc7QzZDNzsxMTBCIDExNkUgMTFCRTtDNkM3OzExMEIgMTE2RSAxMUJFOworQzZDODtDNkM4OzExMEIgMTE2RSAxMUJGO0M2Qzg7MTEwQiAxMTZFIDExQkY7CitDNkM5O0M2Qzk7MTEwQiAxMTZFIDExQzA7QzZDOTsxMTBCIDExNkUgMTFDMDsKK0M2Q0E7QzZDQTsxMTBCIDExNkUgMTFDMTtDNkNBOzExMEIgMTE2RSAxMUMxOworQzZDQjtDNkNCOzExMEIgMTE2RSAxMUMyO0M2Q0I7MTEwQiAxMTZFIDExQzI7CitDNkNDO0M2Q0M7MTEwQiAxMTZGO0M2Q0M7MTEwQiAxMTZGOworQzZDRDtDNkNEOzExMEIgMTE2RiAxMUE4O0M2Q0Q7MTEwQiAxMTZGIDExQTg7CitDNkNFO0M2Q0U7MTEwQiAxMTZGIDExQTk7QzZDRTsxMTBCIDExNkYgMTFBOTsKK0M2Q0Y7QzZDRjsxMTBCIDExNkYgMTFBQTtDNkNGOzExMEIgMTE2RiAxMUFBOworQzZEMDtDNkQwOzExMEIgMTE2RiAxMUFCO0M2RDA7MTEwQiAxMTZGIDExQUI7CitDNkQxO0M2RDE7MTEwQiAxMTZGIDExQUM7QzZEMTsxMTBCIDExNkYgMTFBQzsKK0M2RDI7QzZEMjsxMTBCIDExNkYgMTFBRDtDNkQyOzExMEIgMTE2RiAxMUFEOworQzZEMztDNkQzOzExMEIgMTE2RiAxMUFFO0M2RDM7MTEwQiAxMTZGIDExQUU7CitDNkQ0O0M2RDQ7MTEwQiAxMTZGIDExQUY7QzZENDsxMTBCIDExNkYgMTFBRjsKK0M2RDU7QzZENTsxMTBCIDExNkYgMTFCMDtDNkQ1OzExMEIgMTE2RiAxMUIwOworQzZENjtDNkQ2OzExMEIgMTE2RiAxMUIxO0M2RDY7MTEwQiAxMTZGIDExQjE7CitDNkQ3O0M2RDc7MTEwQiAxMTZGIDExQjI7QzZENzsxMTBCIDExNkYgMTFCMjsKK0M2RDg7QzZEODsxMTBCIDExNkYgMTFCMztDNkQ4OzExMEIgMTE2RiAxMUIzOworQzZEOTtDNkQ5OzExMEIgMTE2RiAxMUI0O0M2RDk7MTEwQiAxMTZGIDExQjQ7CitDNkRBO0M2REE7MTEwQiAxMTZGIDExQjU7QzZEQTsxMTBCIDExNkYgMTFCNTsKK0M2REI7QzZEQjsxMTBCIDExNkYgMTFCNjtDNkRCOzExMEIgMTE2RiAxMUI2OworQzZEQztDNkRDOzExMEIgMTE2RiAxMUI3O0M2REM7MTEwQiAxMTZGIDExQjc7CitDNkREO0M2REQ7MTEwQiAxMTZGIDExQjg7QzZERDsxMTBCIDExNkYgMTFCODsKK0M2REU7QzZERTsxMTBCIDExNkYgMTFCOTtDNkRFOzExMEIgMTE2RiAxMUI5OworQzZERjtDNkRGOzExMEIgMTE2RiAxMUJBO0M2REY7MTEwQiAxMTZGIDExQkE7CitDNkUwO0M2RTA7MTEwQiAxMTZGIDExQkI7QzZFMDsxMTBCIDExNkYgMTFCQjsKK0M2RTE7QzZFMTsxMTBCIDExNkYgMTFCQztDNkUxOzExMEIgMTE2RiAxMUJDOworQzZFMjtDNkUyOzExMEIgMTE2RiAxMUJEO0M2RTI7MTEwQiAxMTZGIDExQkQ7CitDNkUzO0M2RTM7MTEwQiAxMTZGIDExQkU7QzZFMzsxMTBCIDExNkYgMTFCRTsKK0M2RTQ7QzZFNDsxMTBCIDExNkYgMTFCRjtDNkU0OzExMEIgMTE2RiAxMUJGOworQzZFNTtDNkU1OzExMEIgMTE2RiAxMUMwO0M2RTU7MTEwQiAxMTZGIDExQzA7CitDNkU2O0M2RTY7MTEwQiAxMTZGIDExQzE7QzZFNjsxMTBCIDExNkYgMTFDMTsKK0M2RTc7QzZFNzsxMTBCIDExNkYgMTFDMjtDNkU3OzExMEIgMTE2RiAxMUMyOworQzZFODtDNkU4OzExMEIgMTE3MDtDNkU4OzExMEIgMTE3MDsKK0M2RTk7QzZFOTsxMTBCIDExNzAgMTFBODtDNkU5OzExMEIgMTE3MCAxMUE4OworQzZFQTtDNkVBOzExMEIgMTE3MCAxMUE5O0M2RUE7MTEwQiAxMTcwIDExQTk7CitDNkVCO0M2RUI7MTEwQiAxMTcwIDExQUE7QzZFQjsxMTBCIDExNzAgMTFBQTsKK0M2RUM7QzZFQzsxMTBCIDExNzAgMTFBQjtDNkVDOzExMEIgMTE3MCAxMUFCOworQzZFRDtDNkVEOzExMEIgMTE3MCAxMUFDO0M2RUQ7MTEwQiAxMTcwIDExQUM7CitDNkVFO0M2RUU7MTEwQiAxMTcwIDExQUQ7QzZFRTsxMTBCIDExNzAgMTFBRDsKK0M2RUY7QzZFRjsxMTBCIDExNzAgMTFBRTtDNkVGOzExMEIgMTE3MCAxMUFFOworQzZGMDtDNkYwOzExMEIgMTE3MCAxMUFGO0M2RjA7MTEwQiAxMTcwIDExQUY7CitDNkYxO0M2RjE7MTEwQiAxMTcwIDExQjA7QzZGMTsxMTBCIDExNzAgMTFCMDsKK0M2RjI7QzZGMjsxMTBCIDExNzAgMTFCMTtDNkYyOzExMEIgMTE3MCAxMUIxOworQzZGMztDNkYzOzExMEIgMTE3MCAxMUIyO0M2RjM7MTEwQiAxMTcwIDExQjI7CitDNkY0O0M2RjQ7MTEwQiAxMTcwIDExQjM7QzZGNDsxMTBCIDExNzAgMTFCMzsKK0M2RjU7QzZGNTsxMTBCIDExNzAgMTFCNDtDNkY1OzExMEIgMTE3MCAxMUI0OworQzZGNjtDNkY2OzExMEIgMTE3MCAxMUI1O0M2RjY7MTEwQiAxMTcwIDExQjU7CitDNkY3O0M2Rjc7MTEwQiAxMTcwIDExQjY7QzZGNzsxMTBCIDExNzAgMTFCNjsKK0M2Rjg7QzZGODsxMTBCIDExNzAgMTFCNztDNkY4OzExMEIgMTE3MCAxMUI3OworQzZGOTtDNkY5OzExMEIgMTE3MCAxMUI4O0M2Rjk7MTEwQiAxMTcwIDExQjg7CitDNkZBO0M2RkE7MTEwQiAxMTcwIDExQjk7QzZGQTsxMTBCIDExNzAgMTFCOTsKK0M2RkI7QzZGQjsxMTBCIDExNzAgMTFCQTtDNkZCOzExMEIgMTE3MCAxMUJBOworQzZGQztDNkZDOzExMEIgMTE3MCAxMUJCO0M2RkM7MTEwQiAxMTcwIDExQkI7CitDNkZEO0M2RkQ7MTEwQiAxMTcwIDExQkM7QzZGRDsxMTBCIDExNzAgMTFCQzsKK0M2RkU7QzZGRTsxMTBCIDExNzAgMTFCRDtDNkZFOzExMEIgMTE3MCAxMUJEOworQzZGRjtDNkZGOzExMEIgMTE3MCAxMUJFO0M2RkY7MTEwQiAxMTcwIDExQkU7CitDNzAwO0M3MDA7MTEwQiAxMTcwIDExQkY7QzcwMDsxMTBCIDExNzAgMTFCRjsKK0M3MDE7QzcwMTsxMTBCIDExNzAgMTFDMDtDNzAxOzExMEIgMTE3MCAxMUMwOworQzcwMjtDNzAyOzExMEIgMTE3MCAxMUMxO0M3MDI7MTEwQiAxMTcwIDExQzE7CitDNzAzO0M3MDM7MTEwQiAxMTcwIDExQzI7QzcwMzsxMTBCIDExNzAgMTFDMjsKK0M3MDQ7QzcwNDsxMTBCIDExNzE7QzcwNDsxMTBCIDExNzE7CitDNzA1O0M3MDU7MTEwQiAxMTcxIDExQTg7QzcwNTsxMTBCIDExNzEgMTFBODsKK0M3MDY7QzcwNjsxMTBCIDExNzEgMTFBOTtDNzA2OzExMEIgMTE3MSAxMUE5OworQzcwNztDNzA3OzExMEIgMTE3MSAxMUFBO0M3MDc7MTEwQiAxMTcxIDExQUE7CitDNzA4O0M3MDg7MTEwQiAxMTcxIDExQUI7QzcwODsxMTBCIDExNzEgMTFBQjsKK0M3MDk7QzcwOTsxMTBCIDExNzEgMTFBQztDNzA5OzExMEIgMTE3MSAxMUFDOworQzcwQTtDNzBBOzExMEIgMTE3MSAxMUFEO0M3MEE7MTEwQiAxMTcxIDExQUQ7CitDNzBCO0M3MEI7MTEwQiAxMTcxIDExQUU7QzcwQjsxMTBCIDExNzEgMTFBRTsKK0M3MEM7QzcwQzsxMTBCIDExNzEgMTFBRjtDNzBDOzExMEIgMTE3MSAxMUFGOworQzcwRDtDNzBEOzExMEIgMTE3MSAxMUIwO0M3MEQ7MTEwQiAxMTcxIDExQjA7CitDNzBFO0M3MEU7MTEwQiAxMTcxIDExQjE7QzcwRTsxMTBCIDExNzEgMTFCMTsKK0M3MEY7QzcwRjsxMTBCIDExNzEgMTFCMjtDNzBGOzExMEIgMTE3MSAxMUIyOworQzcxMDtDNzEwOzExMEIgMTE3MSAxMUIzO0M3MTA7MTEwQiAxMTcxIDExQjM7CitDNzExO0M3MTE7MTEwQiAxMTcxIDExQjQ7QzcxMTsxMTBCIDExNzEgMTFCNDsKK0M3MTI7QzcxMjsxMTBCIDExNzEgMTFCNTtDNzEyOzExMEIgMTE3MSAxMUI1OworQzcxMztDNzEzOzExMEIgMTE3MSAxMUI2O0M3MTM7MTEwQiAxMTcxIDExQjY7CitDNzE0O0M3MTQ7MTEwQiAxMTcxIDExQjc7QzcxNDsxMTBCIDExNzEgMTFCNzsKK0M3MTU7QzcxNTsxMTBCIDExNzEgMTFCODtDNzE1OzExMEIgMTE3MSAxMUI4OworQzcxNjtDNzE2OzExMEIgMTE3MSAxMUI5O0M3MTY7MTEwQiAxMTcxIDExQjk7CitDNzE3O0M3MTc7MTEwQiAxMTcxIDExQkE7QzcxNzsxMTBCIDExNzEgMTFCQTsKK0M3MTg7QzcxODsxMTBCIDExNzEgMTFCQjtDNzE4OzExMEIgMTE3MSAxMUJCOworQzcxOTtDNzE5OzExMEIgMTE3MSAxMUJDO0M3MTk7MTEwQiAxMTcxIDExQkM7CitDNzFBO0M3MUE7MTEwQiAxMTcxIDExQkQ7QzcxQTsxMTBCIDExNzEgMTFCRDsKK0M3MUI7QzcxQjsxMTBCIDExNzEgMTFCRTtDNzFCOzExMEIgMTE3MSAxMUJFOworQzcxQztDNzFDOzExMEIgMTE3MSAxMUJGO0M3MUM7MTEwQiAxMTcxIDExQkY7CitDNzFEO0M3MUQ7MTEwQiAxMTcxIDExQzA7QzcxRDsxMTBCIDExNzEgMTFDMDsKK0M3MUU7QzcxRTsxMTBCIDExNzEgMTFDMTtDNzFFOzExMEIgMTE3MSAxMUMxOworQzcxRjtDNzFGOzExMEIgMTE3MSAxMUMyO0M3MUY7MTEwQiAxMTcxIDExQzI7CitDNzIwO0M3MjA7MTEwQiAxMTcyO0M3MjA7MTEwQiAxMTcyOworQzcyMTtDNzIxOzExMEIgMTE3MiAxMUE4O0M3MjE7MTEwQiAxMTcyIDExQTg7CitDNzIyO0M3MjI7MTEwQiAxMTcyIDExQTk7QzcyMjsxMTBCIDExNzIgMTFBOTsKK0M3MjM7QzcyMzsxMTBCIDExNzIgMTFBQTtDNzIzOzExMEIgMTE3MiAxMUFBOworQzcyNDtDNzI0OzExMEIgMTE3MiAxMUFCO0M3MjQ7MTEwQiAxMTcyIDExQUI7CitDNzI1O0M3MjU7MTEwQiAxMTcyIDExQUM7QzcyNTsxMTBCIDExNzIgMTFBQzsKK0M3MjY7QzcyNjsxMTBCIDExNzIgMTFBRDtDNzI2OzExMEIgMTE3MiAxMUFEOworQzcyNztDNzI3OzExMEIgMTE3MiAxMUFFO0M3Mjc7MTEwQiAxMTcyIDExQUU7CitDNzI4O0M3Mjg7MTEwQiAxMTcyIDExQUY7QzcyODsxMTBCIDExNzIgMTFBRjsKK0M3Mjk7QzcyOTsxMTBCIDExNzIgMTFCMDtDNzI5OzExMEIgMTE3MiAxMUIwOworQzcyQTtDNzJBOzExMEIgMTE3MiAxMUIxO0M3MkE7MTEwQiAxMTcyIDExQjE7CitDNzJCO0M3MkI7MTEwQiAxMTcyIDExQjI7QzcyQjsxMTBCIDExNzIgMTFCMjsKK0M3MkM7QzcyQzsxMTBCIDExNzIgMTFCMztDNzJDOzExMEIgMTE3MiAxMUIzOworQzcyRDtDNzJEOzExMEIgMTE3MiAxMUI0O0M3MkQ7MTEwQiAxMTcyIDExQjQ7CitDNzJFO0M3MkU7MTEwQiAxMTcyIDExQjU7QzcyRTsxMTBCIDExNzIgMTFCNTsKK0M3MkY7QzcyRjsxMTBCIDExNzIgMTFCNjtDNzJGOzExMEIgMTE3MiAxMUI2OworQzczMDtDNzMwOzExMEIgMTE3MiAxMUI3O0M3MzA7MTEwQiAxMTcyIDExQjc7CitDNzMxO0M3MzE7MTEwQiAxMTcyIDExQjg7QzczMTsxMTBCIDExNzIgMTFCODsKK0M3MzI7QzczMjsxMTBCIDExNzIgMTFCOTtDNzMyOzExMEIgMTE3MiAxMUI5OworQzczMztDNzMzOzExMEIgMTE3MiAxMUJBO0M3MzM7MTEwQiAxMTcyIDExQkE7CitDNzM0O0M3MzQ7MTEwQiAxMTcyIDExQkI7QzczNDsxMTBCIDExNzIgMTFCQjsKK0M3MzU7QzczNTsxMTBCIDExNzIgMTFCQztDNzM1OzExMEIgMTE3MiAxMUJDOworQzczNjtDNzM2OzExMEIgMTE3MiAxMUJEO0M3MzY7MTEwQiAxMTcyIDExQkQ7CitDNzM3O0M3Mzc7MTEwQiAxMTcyIDExQkU7QzczNzsxMTBCIDExNzIgMTFCRTsKK0M3Mzg7QzczODsxMTBCIDExNzIgMTFCRjtDNzM4OzExMEIgMTE3MiAxMUJGOworQzczOTtDNzM5OzExMEIgMTE3MiAxMUMwO0M3Mzk7MTEwQiAxMTcyIDExQzA7CitDNzNBO0M3M0E7MTEwQiAxMTcyIDExQzE7QzczQTsxMTBCIDExNzIgMTFDMTsKK0M3M0I7QzczQjsxMTBCIDExNzIgMTFDMjtDNzNCOzExMEIgMTE3MiAxMUMyOworQzczQztDNzNDOzExMEIgMTE3MztDNzNDOzExMEIgMTE3MzsKK0M3M0Q7QzczRDsxMTBCIDExNzMgMTFBODtDNzNEOzExMEIgMTE3MyAxMUE4OworQzczRTtDNzNFOzExMEIgMTE3MyAxMUE5O0M3M0U7MTEwQiAxMTczIDExQTk7CitDNzNGO0M3M0Y7MTEwQiAxMTczIDExQUE7QzczRjsxMTBCIDExNzMgMTFBQTsKK0M3NDA7Qzc0MDsxMTBCIDExNzMgMTFBQjtDNzQwOzExMEIgMTE3MyAxMUFCOworQzc0MTtDNzQxOzExMEIgMTE3MyAxMUFDO0M3NDE7MTEwQiAxMTczIDExQUM7CitDNzQyO0M3NDI7MTEwQiAxMTczIDExQUQ7Qzc0MjsxMTBCIDExNzMgMTFBRDsKK0M3NDM7Qzc0MzsxMTBCIDExNzMgMTFBRTtDNzQzOzExMEIgMTE3MyAxMUFFOworQzc0NDtDNzQ0OzExMEIgMTE3MyAxMUFGO0M3NDQ7MTEwQiAxMTczIDExQUY7CitDNzQ1O0M3NDU7MTEwQiAxMTczIDExQjA7Qzc0NTsxMTBCIDExNzMgMTFCMDsKK0M3NDY7Qzc0NjsxMTBCIDExNzMgMTFCMTtDNzQ2OzExMEIgMTE3MyAxMUIxOworQzc0NztDNzQ3OzExMEIgMTE3MyAxMUIyO0M3NDc7MTEwQiAxMTczIDExQjI7CitDNzQ4O0M3NDg7MTEwQiAxMTczIDExQjM7Qzc0ODsxMTBCIDExNzMgMTFCMzsKK0M3NDk7Qzc0OTsxMTBCIDExNzMgMTFCNDtDNzQ5OzExMEIgMTE3MyAxMUI0OworQzc0QTtDNzRBOzExMEIgMTE3MyAxMUI1O0M3NEE7MTEwQiAxMTczIDExQjU7CitDNzRCO0M3NEI7MTEwQiAxMTczIDExQjY7Qzc0QjsxMTBCIDExNzMgMTFCNjsKK0M3NEM7Qzc0QzsxMTBCIDExNzMgMTFCNztDNzRDOzExMEIgMTE3MyAxMUI3OworQzc0RDtDNzREOzExMEIgMTE3MyAxMUI4O0M3NEQ7MTEwQiAxMTczIDExQjg7CitDNzRFO0M3NEU7MTEwQiAxMTczIDExQjk7Qzc0RTsxMTBCIDExNzMgMTFCOTsKK0M3NEY7Qzc0RjsxMTBCIDExNzMgMTFCQTtDNzRGOzExMEIgMTE3MyAxMUJBOworQzc1MDtDNzUwOzExMEIgMTE3MyAxMUJCO0M3NTA7MTEwQiAxMTczIDExQkI7CitDNzUxO0M3NTE7MTEwQiAxMTczIDExQkM7Qzc1MTsxMTBCIDExNzMgMTFCQzsKK0M3NTI7Qzc1MjsxMTBCIDExNzMgMTFCRDtDNzUyOzExMEIgMTE3MyAxMUJEOworQzc1MztDNzUzOzExMEIgMTE3MyAxMUJFO0M3NTM7MTEwQiAxMTczIDExQkU7CitDNzU0O0M3NTQ7MTEwQiAxMTczIDExQkY7Qzc1NDsxMTBCIDExNzMgMTFCRjsKK0M3NTU7Qzc1NTsxMTBCIDExNzMgMTFDMDtDNzU1OzExMEIgMTE3MyAxMUMwOworQzc1NjtDNzU2OzExMEIgMTE3MyAxMUMxO0M3NTY7MTEwQiAxMTczIDExQzE7CitDNzU3O0M3NTc7MTEwQiAxMTczIDExQzI7Qzc1NzsxMTBCIDExNzMgMTFDMjsKK0M3NTg7Qzc1ODsxMTBCIDExNzQ7Qzc1ODsxMTBCIDExNzQ7CitDNzU5O0M3NTk7MTEwQiAxMTc0IDExQTg7Qzc1OTsxMTBCIDExNzQgMTFBODsKK0M3NUE7Qzc1QTsxMTBCIDExNzQgMTFBOTtDNzVBOzExMEIgMTE3NCAxMUE5OworQzc1QjtDNzVCOzExMEIgMTE3NCAxMUFBO0M3NUI7MTEwQiAxMTc0IDExQUE7CitDNzVDO0M3NUM7MTEwQiAxMTc0IDExQUI7Qzc1QzsxMTBCIDExNzQgMTFBQjsKK0M3NUQ7Qzc1RDsxMTBCIDExNzQgMTFBQztDNzVEOzExMEIgMTE3NCAxMUFDOworQzc1RTtDNzVFOzExMEIgMTE3NCAxMUFEO0M3NUU7MTEwQiAxMTc0IDExQUQ7CitDNzVGO0M3NUY7MTEwQiAxMTc0IDExQUU7Qzc1RjsxMTBCIDExNzQgMTFBRTsKK0M3NjA7Qzc2MDsxMTBCIDExNzQgMTFBRjtDNzYwOzExMEIgMTE3NCAxMUFGOworQzc2MTtDNzYxOzExMEIgMTE3NCAxMUIwO0M3NjE7MTEwQiAxMTc0IDExQjA7CitDNzYyO0M3NjI7MTEwQiAxMTc0IDExQjE7Qzc2MjsxMTBCIDExNzQgMTFCMTsKK0M3NjM7Qzc2MzsxMTBCIDExNzQgMTFCMjtDNzYzOzExMEIgMTE3NCAxMUIyOworQzc2NDtDNzY0OzExMEIgMTE3NCAxMUIzO0M3NjQ7MTEwQiAxMTc0IDExQjM7CitDNzY1O0M3NjU7MTEwQiAxMTc0IDExQjQ7Qzc2NTsxMTBCIDExNzQgMTFCNDsKK0M3NjY7Qzc2NjsxMTBCIDExNzQgMTFCNTtDNzY2OzExMEIgMTE3NCAxMUI1OworQzc2NztDNzY3OzExMEIgMTE3NCAxMUI2O0M3Njc7MTEwQiAxMTc0IDExQjY7CitDNzY4O0M3Njg7MTEwQiAxMTc0IDExQjc7Qzc2ODsxMTBCIDExNzQgMTFCNzsKK0M3Njk7Qzc2OTsxMTBCIDExNzQgMTFCODtDNzY5OzExMEIgMTE3NCAxMUI4OworQzc2QTtDNzZBOzExMEIgMTE3NCAxMUI5O0M3NkE7MTEwQiAxMTc0IDExQjk7CitDNzZCO0M3NkI7MTEwQiAxMTc0IDExQkE7Qzc2QjsxMTBCIDExNzQgMTFCQTsKK0M3NkM7Qzc2QzsxMTBCIDExNzQgMTFCQjtDNzZDOzExMEIgMTE3NCAxMUJCOworQzc2RDtDNzZEOzExMEIgMTE3NCAxMUJDO0M3NkQ7MTEwQiAxMTc0IDExQkM7CitDNzZFO0M3NkU7MTEwQiAxMTc0IDExQkQ7Qzc2RTsxMTBCIDExNzQgMTFCRDsKK0M3NkY7Qzc2RjsxMTBCIDExNzQgMTFCRTtDNzZGOzExMEIgMTE3NCAxMUJFOworQzc3MDtDNzcwOzExMEIgMTE3NCAxMUJGO0M3NzA7MTEwQiAxMTc0IDExQkY7CitDNzcxO0M3NzE7MTEwQiAxMTc0IDExQzA7Qzc3MTsxMTBCIDExNzQgMTFDMDsKK0M3NzI7Qzc3MjsxMTBCIDExNzQgMTFDMTtDNzcyOzExMEIgMTE3NCAxMUMxOworQzc3MztDNzczOzExMEIgMTE3NCAxMUMyO0M3NzM7MTEwQiAxMTc0IDExQzI7CitDNzc0O0M3NzQ7MTEwQiAxMTc1O0M3NzQ7MTEwQiAxMTc1OworQzc3NTtDNzc1OzExMEIgMTE3NSAxMUE4O0M3NzU7MTEwQiAxMTc1IDExQTg7CitDNzc2O0M3NzY7MTEwQiAxMTc1IDExQTk7Qzc3NjsxMTBCIDExNzUgMTFBOTsKK0M3Nzc7Qzc3NzsxMTBCIDExNzUgMTFBQTtDNzc3OzExMEIgMTE3NSAxMUFBOworQzc3ODtDNzc4OzExMEIgMTE3NSAxMUFCO0M3Nzg7MTEwQiAxMTc1IDExQUI7CitDNzc5O0M3Nzk7MTEwQiAxMTc1IDExQUM7Qzc3OTsxMTBCIDExNzUgMTFBQzsKK0M3N0E7Qzc3QTsxMTBCIDExNzUgMTFBRDtDNzdBOzExMEIgMTE3NSAxMUFEOworQzc3QjtDNzdCOzExMEIgMTE3NSAxMUFFO0M3N0I7MTEwQiAxMTc1IDExQUU7CitDNzdDO0M3N0M7MTEwQiAxMTc1IDExQUY7Qzc3QzsxMTBCIDExNzUgMTFBRjsKK0M3N0Q7Qzc3RDsxMTBCIDExNzUgMTFCMDtDNzdEOzExMEIgMTE3NSAxMUIwOworQzc3RTtDNzdFOzExMEIgMTE3NSAxMUIxO0M3N0U7MTEwQiAxMTc1IDExQjE7CitDNzdGO0M3N0Y7MTEwQiAxMTc1IDExQjI7Qzc3RjsxMTBCIDExNzUgMTFCMjsKK0M3ODA7Qzc4MDsxMTBCIDExNzUgMTFCMztDNzgwOzExMEIgMTE3NSAxMUIzOworQzc4MTtDNzgxOzExMEIgMTE3NSAxMUI0O0M3ODE7MTEwQiAxMTc1IDExQjQ7CitDNzgyO0M3ODI7MTEwQiAxMTc1IDExQjU7Qzc4MjsxMTBCIDExNzUgMTFCNTsKK0M3ODM7Qzc4MzsxMTBCIDExNzUgMTFCNjtDNzgzOzExMEIgMTE3NSAxMUI2OworQzc4NDtDNzg0OzExMEIgMTE3NSAxMUI3O0M3ODQ7MTEwQiAxMTc1IDExQjc7CitDNzg1O0M3ODU7MTEwQiAxMTc1IDExQjg7Qzc4NTsxMTBCIDExNzUgMTFCODsKK0M3ODY7Qzc4NjsxMTBCIDExNzUgMTFCOTtDNzg2OzExMEIgMTE3NSAxMUI5OworQzc4NztDNzg3OzExMEIgMTE3NSAxMUJBO0M3ODc7MTEwQiAxMTc1IDExQkE7CitDNzg4O0M3ODg7MTEwQiAxMTc1IDExQkI7Qzc4ODsxMTBCIDExNzUgMTFCQjsKK0M3ODk7Qzc4OTsxMTBCIDExNzUgMTFCQztDNzg5OzExMEIgMTE3NSAxMUJDOworQzc4QTtDNzhBOzExMEIgMTE3NSAxMUJEO0M3OEE7MTEwQiAxMTc1IDExQkQ7CitDNzhCO0M3OEI7MTEwQiAxMTc1IDExQkU7Qzc4QjsxMTBCIDExNzUgMTFCRTsKK0M3OEM7Qzc4QzsxMTBCIDExNzUgMTFCRjtDNzhDOzExMEIgMTE3NSAxMUJGOworQzc4RDtDNzhEOzExMEIgMTE3NSAxMUMwO0M3OEQ7MTEwQiAxMTc1IDExQzA7CitDNzhFO0M3OEU7MTEwQiAxMTc1IDExQzE7Qzc4RTsxMTBCIDExNzUgMTFDMTsKK0M3OEY7Qzc4RjsxMTBCIDExNzUgMTFDMjtDNzhGOzExMEIgMTE3NSAxMUMyOworQzc5MDtDNzkwOzExMEMgMTE2MTtDNzkwOzExMEMgMTE2MTsKK0M3OTE7Qzc5MTsxMTBDIDExNjEgMTFBODtDNzkxOzExMEMgMTE2MSAxMUE4OworQzc5MjtDNzkyOzExMEMgMTE2MSAxMUE5O0M3OTI7MTEwQyAxMTYxIDExQTk7CitDNzkzO0M3OTM7MTEwQyAxMTYxIDExQUE7Qzc5MzsxMTBDIDExNjEgMTFBQTsKK0M3OTQ7Qzc5NDsxMTBDIDExNjEgMTFBQjtDNzk0OzExMEMgMTE2MSAxMUFCOworQzc5NTtDNzk1OzExMEMgMTE2MSAxMUFDO0M3OTU7MTEwQyAxMTYxIDExQUM7CitDNzk2O0M3OTY7MTEwQyAxMTYxIDExQUQ7Qzc5NjsxMTBDIDExNjEgMTFBRDsKK0M3OTc7Qzc5NzsxMTBDIDExNjEgMTFBRTtDNzk3OzExMEMgMTE2MSAxMUFFOworQzc5ODtDNzk4OzExMEMgMTE2MSAxMUFGO0M3OTg7MTEwQyAxMTYxIDExQUY7CitDNzk5O0M3OTk7MTEwQyAxMTYxIDExQjA7Qzc5OTsxMTBDIDExNjEgMTFCMDsKK0M3OUE7Qzc5QTsxMTBDIDExNjEgMTFCMTtDNzlBOzExMEMgMTE2MSAxMUIxOworQzc5QjtDNzlCOzExMEMgMTE2MSAxMUIyO0M3OUI7MTEwQyAxMTYxIDExQjI7CitDNzlDO0M3OUM7MTEwQyAxMTYxIDExQjM7Qzc5QzsxMTBDIDExNjEgMTFCMzsKK0M3OUQ7Qzc5RDsxMTBDIDExNjEgMTFCNDtDNzlEOzExMEMgMTE2MSAxMUI0OworQzc5RTtDNzlFOzExMEMgMTE2MSAxMUI1O0M3OUU7MTEwQyAxMTYxIDExQjU7CitDNzlGO0M3OUY7MTEwQyAxMTYxIDExQjY7Qzc5RjsxMTBDIDExNjEgMTFCNjsKK0M3QTA7QzdBMDsxMTBDIDExNjEgMTFCNztDN0EwOzExMEMgMTE2MSAxMUI3OworQzdBMTtDN0ExOzExMEMgMTE2MSAxMUI4O0M3QTE7MTEwQyAxMTYxIDExQjg7CitDN0EyO0M3QTI7MTEwQyAxMTYxIDExQjk7QzdBMjsxMTBDIDExNjEgMTFCOTsKK0M3QTM7QzdBMzsxMTBDIDExNjEgMTFCQTtDN0EzOzExMEMgMTE2MSAxMUJBOworQzdBNDtDN0E0OzExMEMgMTE2MSAxMUJCO0M3QTQ7MTEwQyAxMTYxIDExQkI7CitDN0E1O0M3QTU7MTEwQyAxMTYxIDExQkM7QzdBNTsxMTBDIDExNjEgMTFCQzsKK0M3QTY7QzdBNjsxMTBDIDExNjEgMTFCRDtDN0E2OzExMEMgMTE2MSAxMUJEOworQzdBNztDN0E3OzExMEMgMTE2MSAxMUJFO0M3QTc7MTEwQyAxMTYxIDExQkU7CitDN0E4O0M3QTg7MTEwQyAxMTYxIDExQkY7QzdBODsxMTBDIDExNjEgMTFCRjsKK0M3QTk7QzdBOTsxMTBDIDExNjEgMTFDMDtDN0E5OzExMEMgMTE2MSAxMUMwOworQzdBQTtDN0FBOzExMEMgMTE2MSAxMUMxO0M3QUE7MTEwQyAxMTYxIDExQzE7CitDN0FCO0M3QUI7MTEwQyAxMTYxIDExQzI7QzdBQjsxMTBDIDExNjEgMTFDMjsKK0M3QUM7QzdBQzsxMTBDIDExNjI7QzdBQzsxMTBDIDExNjI7CitDN0FEO0M3QUQ7MTEwQyAxMTYyIDExQTg7QzdBRDsxMTBDIDExNjIgMTFBODsKK0M3QUU7QzdBRTsxMTBDIDExNjIgMTFBOTtDN0FFOzExMEMgMTE2MiAxMUE5OworQzdBRjtDN0FGOzExMEMgMTE2MiAxMUFBO0M3QUY7MTEwQyAxMTYyIDExQUE7CitDN0IwO0M3QjA7MTEwQyAxMTYyIDExQUI7QzdCMDsxMTBDIDExNjIgMTFBQjsKK0M3QjE7QzdCMTsxMTBDIDExNjIgMTFBQztDN0IxOzExMEMgMTE2MiAxMUFDOworQzdCMjtDN0IyOzExMEMgMTE2MiAxMUFEO0M3QjI7MTEwQyAxMTYyIDExQUQ7CitDN0IzO0M3QjM7MTEwQyAxMTYyIDExQUU7QzdCMzsxMTBDIDExNjIgMTFBRTsKK0M3QjQ7QzdCNDsxMTBDIDExNjIgMTFBRjtDN0I0OzExMEMgMTE2MiAxMUFGOworQzdCNTtDN0I1OzExMEMgMTE2MiAxMUIwO0M3QjU7MTEwQyAxMTYyIDExQjA7CitDN0I2O0M3QjY7MTEwQyAxMTYyIDExQjE7QzdCNjsxMTBDIDExNjIgMTFCMTsKK0M3Qjc7QzdCNzsxMTBDIDExNjIgMTFCMjtDN0I3OzExMEMgMTE2MiAxMUIyOworQzdCODtDN0I4OzExMEMgMTE2MiAxMUIzO0M3Qjg7MTEwQyAxMTYyIDExQjM7CitDN0I5O0M3Qjk7MTEwQyAxMTYyIDExQjQ7QzdCOTsxMTBDIDExNjIgMTFCNDsKK0M3QkE7QzdCQTsxMTBDIDExNjIgMTFCNTtDN0JBOzExMEMgMTE2MiAxMUI1OworQzdCQjtDN0JCOzExMEMgMTE2MiAxMUI2O0M3QkI7MTEwQyAxMTYyIDExQjY7CitDN0JDO0M3QkM7MTEwQyAxMTYyIDExQjc7QzdCQzsxMTBDIDExNjIgMTFCNzsKK0M3QkQ7QzdCRDsxMTBDIDExNjIgMTFCODtDN0JEOzExMEMgMTE2MiAxMUI4OworQzdCRTtDN0JFOzExMEMgMTE2MiAxMUI5O0M3QkU7MTEwQyAxMTYyIDExQjk7CitDN0JGO0M3QkY7MTEwQyAxMTYyIDExQkE7QzdCRjsxMTBDIDExNjIgMTFCQTsKK0M3QzA7QzdDMDsxMTBDIDExNjIgMTFCQjtDN0MwOzExMEMgMTE2MiAxMUJCOworQzdDMTtDN0MxOzExMEMgMTE2MiAxMUJDO0M3QzE7MTEwQyAxMTYyIDExQkM7CitDN0MyO0M3QzI7MTEwQyAxMTYyIDExQkQ7QzdDMjsxMTBDIDExNjIgMTFCRDsKK0M3QzM7QzdDMzsxMTBDIDExNjIgMTFCRTtDN0MzOzExMEMgMTE2MiAxMUJFOworQzdDNDtDN0M0OzExMEMgMTE2MiAxMUJGO0M3QzQ7MTEwQyAxMTYyIDExQkY7CitDN0M1O0M3QzU7MTEwQyAxMTYyIDExQzA7QzdDNTsxMTBDIDExNjIgMTFDMDsKK0M3QzY7QzdDNjsxMTBDIDExNjIgMTFDMTtDN0M2OzExMEMgMTE2MiAxMUMxOworQzdDNztDN0M3OzExMEMgMTE2MiAxMUMyO0M3Qzc7MTEwQyAxMTYyIDExQzI7CitDN0M4O0M3Qzg7MTEwQyAxMTYzO0M3Qzg7MTEwQyAxMTYzOworQzdDOTtDN0M5OzExMEMgMTE2MyAxMUE4O0M3Qzk7MTEwQyAxMTYzIDExQTg7CitDN0NBO0M3Q0E7MTEwQyAxMTYzIDExQTk7QzdDQTsxMTBDIDExNjMgMTFBOTsKK0M3Q0I7QzdDQjsxMTBDIDExNjMgMTFBQTtDN0NCOzExMEMgMTE2MyAxMUFBOworQzdDQztDN0NDOzExMEMgMTE2MyAxMUFCO0M3Q0M7MTEwQyAxMTYzIDExQUI7CitDN0NEO0M3Q0Q7MTEwQyAxMTYzIDExQUM7QzdDRDsxMTBDIDExNjMgMTFBQzsKK0M3Q0U7QzdDRTsxMTBDIDExNjMgMTFBRDtDN0NFOzExMEMgMTE2MyAxMUFEOworQzdDRjtDN0NGOzExMEMgMTE2MyAxMUFFO0M3Q0Y7MTEwQyAxMTYzIDExQUU7CitDN0QwO0M3RDA7MTEwQyAxMTYzIDExQUY7QzdEMDsxMTBDIDExNjMgMTFBRjsKK0M3RDE7QzdEMTsxMTBDIDExNjMgMTFCMDtDN0QxOzExMEMgMTE2MyAxMUIwOworQzdEMjtDN0QyOzExMEMgMTE2MyAxMUIxO0M3RDI7MTEwQyAxMTYzIDExQjE7CitDN0QzO0M3RDM7MTEwQyAxMTYzIDExQjI7QzdEMzsxMTBDIDExNjMgMTFCMjsKK0M3RDQ7QzdENDsxMTBDIDExNjMgMTFCMztDN0Q0OzExMEMgMTE2MyAxMUIzOworQzdENTtDN0Q1OzExMEMgMTE2MyAxMUI0O0M3RDU7MTEwQyAxMTYzIDExQjQ7CitDN0Q2O0M3RDY7MTEwQyAxMTYzIDExQjU7QzdENjsxMTBDIDExNjMgMTFCNTsKK0M3RDc7QzdENzsxMTBDIDExNjMgMTFCNjtDN0Q3OzExMEMgMTE2MyAxMUI2OworQzdEODtDN0Q4OzExMEMgMTE2MyAxMUI3O0M3RDg7MTEwQyAxMTYzIDExQjc7CitDN0Q5O0M3RDk7MTEwQyAxMTYzIDExQjg7QzdEOTsxMTBDIDExNjMgMTFCODsKK0M3REE7QzdEQTsxMTBDIDExNjMgMTFCOTtDN0RBOzExMEMgMTE2MyAxMUI5OworQzdEQjtDN0RCOzExMEMgMTE2MyAxMUJBO0M3REI7MTEwQyAxMTYzIDExQkE7CitDN0RDO0M3REM7MTEwQyAxMTYzIDExQkI7QzdEQzsxMTBDIDExNjMgMTFCQjsKK0M3REQ7QzdERDsxMTBDIDExNjMgMTFCQztDN0REOzExMEMgMTE2MyAxMUJDOworQzdERTtDN0RFOzExMEMgMTE2MyAxMUJEO0M3REU7MTEwQyAxMTYzIDExQkQ7CitDN0RGO0M3REY7MTEwQyAxMTYzIDExQkU7QzdERjsxMTBDIDExNjMgMTFCRTsKK0M3RTA7QzdFMDsxMTBDIDExNjMgMTFCRjtDN0UwOzExMEMgMTE2MyAxMUJGOworQzdFMTtDN0UxOzExMEMgMTE2MyAxMUMwO0M3RTE7MTEwQyAxMTYzIDExQzA7CitDN0UyO0M3RTI7MTEwQyAxMTYzIDExQzE7QzdFMjsxMTBDIDExNjMgMTFDMTsKK0M3RTM7QzdFMzsxMTBDIDExNjMgMTFDMjtDN0UzOzExMEMgMTE2MyAxMUMyOworQzdFNDtDN0U0OzExMEMgMTE2NDtDN0U0OzExMEMgMTE2NDsKK0M3RTU7QzdFNTsxMTBDIDExNjQgMTFBODtDN0U1OzExMEMgMTE2NCAxMUE4OworQzdFNjtDN0U2OzExMEMgMTE2NCAxMUE5O0M3RTY7MTEwQyAxMTY0IDExQTk7CitDN0U3O0M3RTc7MTEwQyAxMTY0IDExQUE7QzdFNzsxMTBDIDExNjQgMTFBQTsKK0M3RTg7QzdFODsxMTBDIDExNjQgMTFBQjtDN0U4OzExMEMgMTE2NCAxMUFCOworQzdFOTtDN0U5OzExMEMgMTE2NCAxMUFDO0M3RTk7MTEwQyAxMTY0IDExQUM7CitDN0VBO0M3RUE7MTEwQyAxMTY0IDExQUQ7QzdFQTsxMTBDIDExNjQgMTFBRDsKK0M3RUI7QzdFQjsxMTBDIDExNjQgMTFBRTtDN0VCOzExMEMgMTE2NCAxMUFFOworQzdFQztDN0VDOzExMEMgMTE2NCAxMUFGO0M3RUM7MTEwQyAxMTY0IDExQUY7CitDN0VEO0M3RUQ7MTEwQyAxMTY0IDExQjA7QzdFRDsxMTBDIDExNjQgMTFCMDsKK0M3RUU7QzdFRTsxMTBDIDExNjQgMTFCMTtDN0VFOzExMEMgMTE2NCAxMUIxOworQzdFRjtDN0VGOzExMEMgMTE2NCAxMUIyO0M3RUY7MTEwQyAxMTY0IDExQjI7CitDN0YwO0M3RjA7MTEwQyAxMTY0IDExQjM7QzdGMDsxMTBDIDExNjQgMTFCMzsKK0M3RjE7QzdGMTsxMTBDIDExNjQgMTFCNDtDN0YxOzExMEMgMTE2NCAxMUI0OworQzdGMjtDN0YyOzExMEMgMTE2NCAxMUI1O0M3RjI7MTEwQyAxMTY0IDExQjU7CitDN0YzO0M3RjM7MTEwQyAxMTY0IDExQjY7QzdGMzsxMTBDIDExNjQgMTFCNjsKK0M3RjQ7QzdGNDsxMTBDIDExNjQgMTFCNztDN0Y0OzExMEMgMTE2NCAxMUI3OworQzdGNTtDN0Y1OzExMEMgMTE2NCAxMUI4O0M3RjU7MTEwQyAxMTY0IDExQjg7CitDN0Y2O0M3RjY7MTEwQyAxMTY0IDExQjk7QzdGNjsxMTBDIDExNjQgMTFCOTsKK0M3Rjc7QzdGNzsxMTBDIDExNjQgMTFCQTtDN0Y3OzExMEMgMTE2NCAxMUJBOworQzdGODtDN0Y4OzExMEMgMTE2NCAxMUJCO0M3Rjg7MTEwQyAxMTY0IDExQkI7CitDN0Y5O0M3Rjk7MTEwQyAxMTY0IDExQkM7QzdGOTsxMTBDIDExNjQgMTFCQzsKK0M3RkE7QzdGQTsxMTBDIDExNjQgMTFCRDtDN0ZBOzExMEMgMTE2NCAxMUJEOworQzdGQjtDN0ZCOzExMEMgMTE2NCAxMUJFO0M3RkI7MTEwQyAxMTY0IDExQkU7CitDN0ZDO0M3RkM7MTEwQyAxMTY0IDExQkY7QzdGQzsxMTBDIDExNjQgMTFCRjsKK0M3RkQ7QzdGRDsxMTBDIDExNjQgMTFDMDtDN0ZEOzExMEMgMTE2NCAxMUMwOworQzdGRTtDN0ZFOzExMEMgMTE2NCAxMUMxO0M3RkU7MTEwQyAxMTY0IDExQzE7CitDN0ZGO0M3RkY7MTEwQyAxMTY0IDExQzI7QzdGRjsxMTBDIDExNjQgMTFDMjsKK0M4MDA7QzgwMDsxMTBDIDExNjU7QzgwMDsxMTBDIDExNjU7CitDODAxO0M4MDE7MTEwQyAxMTY1IDExQTg7QzgwMTsxMTBDIDExNjUgMTFBODsKK0M4MDI7QzgwMjsxMTBDIDExNjUgMTFBOTtDODAyOzExMEMgMTE2NSAxMUE5OworQzgwMztDODAzOzExMEMgMTE2NSAxMUFBO0M4MDM7MTEwQyAxMTY1IDExQUE7CitDODA0O0M4MDQ7MTEwQyAxMTY1IDExQUI7QzgwNDsxMTBDIDExNjUgMTFBQjsKK0M4MDU7QzgwNTsxMTBDIDExNjUgMTFBQztDODA1OzExMEMgMTE2NSAxMUFDOworQzgwNjtDODA2OzExMEMgMTE2NSAxMUFEO0M4MDY7MTEwQyAxMTY1IDExQUQ7CitDODA3O0M4MDc7MTEwQyAxMTY1IDExQUU7QzgwNzsxMTBDIDExNjUgMTFBRTsKK0M4MDg7QzgwODsxMTBDIDExNjUgMTFBRjtDODA4OzExMEMgMTE2NSAxMUFGOworQzgwOTtDODA5OzExMEMgMTE2NSAxMUIwO0M4MDk7MTEwQyAxMTY1IDExQjA7CitDODBBO0M4MEE7MTEwQyAxMTY1IDExQjE7QzgwQTsxMTBDIDExNjUgMTFCMTsKK0M4MEI7QzgwQjsxMTBDIDExNjUgMTFCMjtDODBCOzExMEMgMTE2NSAxMUIyOworQzgwQztDODBDOzExMEMgMTE2NSAxMUIzO0M4MEM7MTEwQyAxMTY1IDExQjM7CitDODBEO0M4MEQ7MTEwQyAxMTY1IDExQjQ7QzgwRDsxMTBDIDExNjUgMTFCNDsKK0M4MEU7QzgwRTsxMTBDIDExNjUgMTFCNTtDODBFOzExMEMgMTE2NSAxMUI1OworQzgwRjtDODBGOzExMEMgMTE2NSAxMUI2O0M4MEY7MTEwQyAxMTY1IDExQjY7CitDODEwO0M4MTA7MTEwQyAxMTY1IDExQjc7QzgxMDsxMTBDIDExNjUgMTFCNzsKK0M4MTE7QzgxMTsxMTBDIDExNjUgMTFCODtDODExOzExMEMgMTE2NSAxMUI4OworQzgxMjtDODEyOzExMEMgMTE2NSAxMUI5O0M4MTI7MTEwQyAxMTY1IDExQjk7CitDODEzO0M4MTM7MTEwQyAxMTY1IDExQkE7QzgxMzsxMTBDIDExNjUgMTFCQTsKK0M4MTQ7QzgxNDsxMTBDIDExNjUgMTFCQjtDODE0OzExMEMgMTE2NSAxMUJCOworQzgxNTtDODE1OzExMEMgMTE2NSAxMUJDO0M4MTU7MTEwQyAxMTY1IDExQkM7CitDODE2O0M4MTY7MTEwQyAxMTY1IDExQkQ7QzgxNjsxMTBDIDExNjUgMTFCRDsKK0M4MTc7QzgxNzsxMTBDIDExNjUgMTFCRTtDODE3OzExMEMgMTE2NSAxMUJFOworQzgxODtDODE4OzExMEMgMTE2NSAxMUJGO0M4MTg7MTEwQyAxMTY1IDExQkY7CitDODE5O0M4MTk7MTEwQyAxMTY1IDExQzA7QzgxOTsxMTBDIDExNjUgMTFDMDsKK0M4MUE7QzgxQTsxMTBDIDExNjUgMTFDMTtDODFBOzExMEMgMTE2NSAxMUMxOworQzgxQjtDODFCOzExMEMgMTE2NSAxMUMyO0M4MUI7MTEwQyAxMTY1IDExQzI7CitDODFDO0M4MUM7MTEwQyAxMTY2O0M4MUM7MTEwQyAxMTY2OworQzgxRDtDODFEOzExMEMgMTE2NiAxMUE4O0M4MUQ7MTEwQyAxMTY2IDExQTg7CitDODFFO0M4MUU7MTEwQyAxMTY2IDExQTk7QzgxRTsxMTBDIDExNjYgMTFBOTsKK0M4MUY7QzgxRjsxMTBDIDExNjYgMTFBQTtDODFGOzExMEMgMTE2NiAxMUFBOworQzgyMDtDODIwOzExMEMgMTE2NiAxMUFCO0M4MjA7MTEwQyAxMTY2IDExQUI7CitDODIxO0M4MjE7MTEwQyAxMTY2IDExQUM7QzgyMTsxMTBDIDExNjYgMTFBQzsKK0M4MjI7QzgyMjsxMTBDIDExNjYgMTFBRDtDODIyOzExMEMgMTE2NiAxMUFEOworQzgyMztDODIzOzExMEMgMTE2NiAxMUFFO0M4MjM7MTEwQyAxMTY2IDExQUU7CitDODI0O0M4MjQ7MTEwQyAxMTY2IDExQUY7QzgyNDsxMTBDIDExNjYgMTFBRjsKK0M4MjU7QzgyNTsxMTBDIDExNjYgMTFCMDtDODI1OzExMEMgMTE2NiAxMUIwOworQzgyNjtDODI2OzExMEMgMTE2NiAxMUIxO0M4MjY7MTEwQyAxMTY2IDExQjE7CitDODI3O0M4Mjc7MTEwQyAxMTY2IDExQjI7QzgyNzsxMTBDIDExNjYgMTFCMjsKK0M4Mjg7QzgyODsxMTBDIDExNjYgMTFCMztDODI4OzExMEMgMTE2NiAxMUIzOworQzgyOTtDODI5OzExMEMgMTE2NiAxMUI0O0M4Mjk7MTEwQyAxMTY2IDExQjQ7CitDODJBO0M4MkE7MTEwQyAxMTY2IDExQjU7QzgyQTsxMTBDIDExNjYgMTFCNTsKK0M4MkI7QzgyQjsxMTBDIDExNjYgMTFCNjtDODJCOzExMEMgMTE2NiAxMUI2OworQzgyQztDODJDOzExMEMgMTE2NiAxMUI3O0M4MkM7MTEwQyAxMTY2IDExQjc7CitDODJEO0M4MkQ7MTEwQyAxMTY2IDExQjg7QzgyRDsxMTBDIDExNjYgMTFCODsKK0M4MkU7QzgyRTsxMTBDIDExNjYgMTFCOTtDODJFOzExMEMgMTE2NiAxMUI5OworQzgyRjtDODJGOzExMEMgMTE2NiAxMUJBO0M4MkY7MTEwQyAxMTY2IDExQkE7CitDODMwO0M4MzA7MTEwQyAxMTY2IDExQkI7QzgzMDsxMTBDIDExNjYgMTFCQjsKK0M4MzE7QzgzMTsxMTBDIDExNjYgMTFCQztDODMxOzExMEMgMTE2NiAxMUJDOworQzgzMjtDODMyOzExMEMgMTE2NiAxMUJEO0M4MzI7MTEwQyAxMTY2IDExQkQ7CitDODMzO0M4MzM7MTEwQyAxMTY2IDExQkU7QzgzMzsxMTBDIDExNjYgMTFCRTsKK0M4MzQ7QzgzNDsxMTBDIDExNjYgMTFCRjtDODM0OzExMEMgMTE2NiAxMUJGOworQzgzNTtDODM1OzExMEMgMTE2NiAxMUMwO0M4MzU7MTEwQyAxMTY2IDExQzA7CitDODM2O0M4MzY7MTEwQyAxMTY2IDExQzE7QzgzNjsxMTBDIDExNjYgMTFDMTsKK0M4Mzc7QzgzNzsxMTBDIDExNjYgMTFDMjtDODM3OzExMEMgMTE2NiAxMUMyOworQzgzODtDODM4OzExMEMgMTE2NztDODM4OzExMEMgMTE2NzsKK0M4Mzk7QzgzOTsxMTBDIDExNjcgMTFBODtDODM5OzExMEMgMTE2NyAxMUE4OworQzgzQTtDODNBOzExMEMgMTE2NyAxMUE5O0M4M0E7MTEwQyAxMTY3IDExQTk7CitDODNCO0M4M0I7MTEwQyAxMTY3IDExQUE7QzgzQjsxMTBDIDExNjcgMTFBQTsKK0M4M0M7QzgzQzsxMTBDIDExNjcgMTFBQjtDODNDOzExMEMgMTE2NyAxMUFCOworQzgzRDtDODNEOzExMEMgMTE2NyAxMUFDO0M4M0Q7MTEwQyAxMTY3IDExQUM7CitDODNFO0M4M0U7MTEwQyAxMTY3IDExQUQ7QzgzRTsxMTBDIDExNjcgMTFBRDsKK0M4M0Y7QzgzRjsxMTBDIDExNjcgMTFBRTtDODNGOzExMEMgMTE2NyAxMUFFOworQzg0MDtDODQwOzExMEMgMTE2NyAxMUFGO0M4NDA7MTEwQyAxMTY3IDExQUY7CitDODQxO0M4NDE7MTEwQyAxMTY3IDExQjA7Qzg0MTsxMTBDIDExNjcgMTFCMDsKK0M4NDI7Qzg0MjsxMTBDIDExNjcgMTFCMTtDODQyOzExMEMgMTE2NyAxMUIxOworQzg0MztDODQzOzExMEMgMTE2NyAxMUIyO0M4NDM7MTEwQyAxMTY3IDExQjI7CitDODQ0O0M4NDQ7MTEwQyAxMTY3IDExQjM7Qzg0NDsxMTBDIDExNjcgMTFCMzsKK0M4NDU7Qzg0NTsxMTBDIDExNjcgMTFCNDtDODQ1OzExMEMgMTE2NyAxMUI0OworQzg0NjtDODQ2OzExMEMgMTE2NyAxMUI1O0M4NDY7MTEwQyAxMTY3IDExQjU7CitDODQ3O0M4NDc7MTEwQyAxMTY3IDExQjY7Qzg0NzsxMTBDIDExNjcgMTFCNjsKK0M4NDg7Qzg0ODsxMTBDIDExNjcgMTFCNztDODQ4OzExMEMgMTE2NyAxMUI3OworQzg0OTtDODQ5OzExMEMgMTE2NyAxMUI4O0M4NDk7MTEwQyAxMTY3IDExQjg7CitDODRBO0M4NEE7MTEwQyAxMTY3IDExQjk7Qzg0QTsxMTBDIDExNjcgMTFCOTsKK0M4NEI7Qzg0QjsxMTBDIDExNjcgMTFCQTtDODRCOzExMEMgMTE2NyAxMUJBOworQzg0QztDODRDOzExMEMgMTE2NyAxMUJCO0M4NEM7MTEwQyAxMTY3IDExQkI7CitDODREO0M4NEQ7MTEwQyAxMTY3IDExQkM7Qzg0RDsxMTBDIDExNjcgMTFCQzsKK0M4NEU7Qzg0RTsxMTBDIDExNjcgMTFCRDtDODRFOzExMEMgMTE2NyAxMUJEOworQzg0RjtDODRGOzExMEMgMTE2NyAxMUJFO0M4NEY7MTEwQyAxMTY3IDExQkU7CitDODUwO0M4NTA7MTEwQyAxMTY3IDExQkY7Qzg1MDsxMTBDIDExNjcgMTFCRjsKK0M4NTE7Qzg1MTsxMTBDIDExNjcgMTFDMDtDODUxOzExMEMgMTE2NyAxMUMwOworQzg1MjtDODUyOzExMEMgMTE2NyAxMUMxO0M4NTI7MTEwQyAxMTY3IDExQzE7CitDODUzO0M4NTM7MTEwQyAxMTY3IDExQzI7Qzg1MzsxMTBDIDExNjcgMTFDMjsKK0M4NTQ7Qzg1NDsxMTBDIDExNjg7Qzg1NDsxMTBDIDExNjg7CitDODU1O0M4NTU7MTEwQyAxMTY4IDExQTg7Qzg1NTsxMTBDIDExNjggMTFBODsKK0M4NTY7Qzg1NjsxMTBDIDExNjggMTFBOTtDODU2OzExMEMgMTE2OCAxMUE5OworQzg1NztDODU3OzExMEMgMTE2OCAxMUFBO0M4NTc7MTEwQyAxMTY4IDExQUE7CitDODU4O0M4NTg7MTEwQyAxMTY4IDExQUI7Qzg1ODsxMTBDIDExNjggMTFBQjsKK0M4NTk7Qzg1OTsxMTBDIDExNjggMTFBQztDODU5OzExMEMgMTE2OCAxMUFDOworQzg1QTtDODVBOzExMEMgMTE2OCAxMUFEO0M4NUE7MTEwQyAxMTY4IDExQUQ7CitDODVCO0M4NUI7MTEwQyAxMTY4IDExQUU7Qzg1QjsxMTBDIDExNjggMTFBRTsKK0M4NUM7Qzg1QzsxMTBDIDExNjggMTFBRjtDODVDOzExMEMgMTE2OCAxMUFGOworQzg1RDtDODVEOzExMEMgMTE2OCAxMUIwO0M4NUQ7MTEwQyAxMTY4IDExQjA7CitDODVFO0M4NUU7MTEwQyAxMTY4IDExQjE7Qzg1RTsxMTBDIDExNjggMTFCMTsKK0M4NUY7Qzg1RjsxMTBDIDExNjggMTFCMjtDODVGOzExMEMgMTE2OCAxMUIyOworQzg2MDtDODYwOzExMEMgMTE2OCAxMUIzO0M4NjA7MTEwQyAxMTY4IDExQjM7CitDODYxO0M4NjE7MTEwQyAxMTY4IDExQjQ7Qzg2MTsxMTBDIDExNjggMTFCNDsKK0M4NjI7Qzg2MjsxMTBDIDExNjggMTFCNTtDODYyOzExMEMgMTE2OCAxMUI1OworQzg2MztDODYzOzExMEMgMTE2OCAxMUI2O0M4NjM7MTEwQyAxMTY4IDExQjY7CitDODY0O0M4NjQ7MTEwQyAxMTY4IDExQjc7Qzg2NDsxMTBDIDExNjggMTFCNzsKK0M4NjU7Qzg2NTsxMTBDIDExNjggMTFCODtDODY1OzExMEMgMTE2OCAxMUI4OworQzg2NjtDODY2OzExMEMgMTE2OCAxMUI5O0M4NjY7MTEwQyAxMTY4IDExQjk7CitDODY3O0M4Njc7MTEwQyAxMTY4IDExQkE7Qzg2NzsxMTBDIDExNjggMTFCQTsKK0M4Njg7Qzg2ODsxMTBDIDExNjggMTFCQjtDODY4OzExMEMgMTE2OCAxMUJCOworQzg2OTtDODY5OzExMEMgMTE2OCAxMUJDO0M4Njk7MTEwQyAxMTY4IDExQkM7CitDODZBO0M4NkE7MTEwQyAxMTY4IDExQkQ7Qzg2QTsxMTBDIDExNjggMTFCRDsKK0M4NkI7Qzg2QjsxMTBDIDExNjggMTFCRTtDODZCOzExMEMgMTE2OCAxMUJFOworQzg2QztDODZDOzExMEMgMTE2OCAxMUJGO0M4NkM7MTEwQyAxMTY4IDExQkY7CitDODZEO0M4NkQ7MTEwQyAxMTY4IDExQzA7Qzg2RDsxMTBDIDExNjggMTFDMDsKK0M4NkU7Qzg2RTsxMTBDIDExNjggMTFDMTtDODZFOzExMEMgMTE2OCAxMUMxOworQzg2RjtDODZGOzExMEMgMTE2OCAxMUMyO0M4NkY7MTEwQyAxMTY4IDExQzI7CitDODcwO0M4NzA7MTEwQyAxMTY5O0M4NzA7MTEwQyAxMTY5OworQzg3MTtDODcxOzExMEMgMTE2OSAxMUE4O0M4NzE7MTEwQyAxMTY5IDExQTg7CitDODcyO0M4NzI7MTEwQyAxMTY5IDExQTk7Qzg3MjsxMTBDIDExNjkgMTFBOTsKK0M4NzM7Qzg3MzsxMTBDIDExNjkgMTFBQTtDODczOzExMEMgMTE2OSAxMUFBOworQzg3NDtDODc0OzExMEMgMTE2OSAxMUFCO0M4NzQ7MTEwQyAxMTY5IDExQUI7CitDODc1O0M4NzU7MTEwQyAxMTY5IDExQUM7Qzg3NTsxMTBDIDExNjkgMTFBQzsKK0M4NzY7Qzg3NjsxMTBDIDExNjkgMTFBRDtDODc2OzExMEMgMTE2OSAxMUFEOworQzg3NztDODc3OzExMEMgMTE2OSAxMUFFO0M4Nzc7MTEwQyAxMTY5IDExQUU7CitDODc4O0M4Nzg7MTEwQyAxMTY5IDExQUY7Qzg3ODsxMTBDIDExNjkgMTFBRjsKK0M4Nzk7Qzg3OTsxMTBDIDExNjkgMTFCMDtDODc5OzExMEMgMTE2OSAxMUIwOworQzg3QTtDODdBOzExMEMgMTE2OSAxMUIxO0M4N0E7MTEwQyAxMTY5IDExQjE7CitDODdCO0M4N0I7MTEwQyAxMTY5IDExQjI7Qzg3QjsxMTBDIDExNjkgMTFCMjsKK0M4N0M7Qzg3QzsxMTBDIDExNjkgMTFCMztDODdDOzExMEMgMTE2OSAxMUIzOworQzg3RDtDODdEOzExMEMgMTE2OSAxMUI0O0M4N0Q7MTEwQyAxMTY5IDExQjQ7CitDODdFO0M4N0U7MTEwQyAxMTY5IDExQjU7Qzg3RTsxMTBDIDExNjkgMTFCNTsKK0M4N0Y7Qzg3RjsxMTBDIDExNjkgMTFCNjtDODdGOzExMEMgMTE2OSAxMUI2OworQzg4MDtDODgwOzExMEMgMTE2OSAxMUI3O0M4ODA7MTEwQyAxMTY5IDExQjc7CitDODgxO0M4ODE7MTEwQyAxMTY5IDExQjg7Qzg4MTsxMTBDIDExNjkgMTFCODsKK0M4ODI7Qzg4MjsxMTBDIDExNjkgMTFCOTtDODgyOzExMEMgMTE2OSAxMUI5OworQzg4MztDODgzOzExMEMgMTE2OSAxMUJBO0M4ODM7MTEwQyAxMTY5IDExQkE7CitDODg0O0M4ODQ7MTEwQyAxMTY5IDExQkI7Qzg4NDsxMTBDIDExNjkgMTFCQjsKK0M4ODU7Qzg4NTsxMTBDIDExNjkgMTFCQztDODg1OzExMEMgMTE2OSAxMUJDOworQzg4NjtDODg2OzExMEMgMTE2OSAxMUJEO0M4ODY7MTEwQyAxMTY5IDExQkQ7CitDODg3O0M4ODc7MTEwQyAxMTY5IDExQkU7Qzg4NzsxMTBDIDExNjkgMTFCRTsKK0M4ODg7Qzg4ODsxMTBDIDExNjkgMTFCRjtDODg4OzExMEMgMTE2OSAxMUJGOworQzg4OTtDODg5OzExMEMgMTE2OSAxMUMwO0M4ODk7MTEwQyAxMTY5IDExQzA7CitDODhBO0M4OEE7MTEwQyAxMTY5IDExQzE7Qzg4QTsxMTBDIDExNjkgMTFDMTsKK0M4OEI7Qzg4QjsxMTBDIDExNjkgMTFDMjtDODhCOzExMEMgMTE2OSAxMUMyOworQzg4QztDODhDOzExMEMgMTE2QTtDODhDOzExMEMgMTE2QTsKK0M4OEQ7Qzg4RDsxMTBDIDExNkEgMTFBODtDODhEOzExMEMgMTE2QSAxMUE4OworQzg4RTtDODhFOzExMEMgMTE2QSAxMUE5O0M4OEU7MTEwQyAxMTZBIDExQTk7CitDODhGO0M4OEY7MTEwQyAxMTZBIDExQUE7Qzg4RjsxMTBDIDExNkEgMTFBQTsKK0M4OTA7Qzg5MDsxMTBDIDExNkEgMTFBQjtDODkwOzExMEMgMTE2QSAxMUFCOworQzg5MTtDODkxOzExMEMgMTE2QSAxMUFDO0M4OTE7MTEwQyAxMTZBIDExQUM7CitDODkyO0M4OTI7MTEwQyAxMTZBIDExQUQ7Qzg5MjsxMTBDIDExNkEgMTFBRDsKK0M4OTM7Qzg5MzsxMTBDIDExNkEgMTFBRTtDODkzOzExMEMgMTE2QSAxMUFFOworQzg5NDtDODk0OzExMEMgMTE2QSAxMUFGO0M4OTQ7MTEwQyAxMTZBIDExQUY7CitDODk1O0M4OTU7MTEwQyAxMTZBIDExQjA7Qzg5NTsxMTBDIDExNkEgMTFCMDsKK0M4OTY7Qzg5NjsxMTBDIDExNkEgMTFCMTtDODk2OzExMEMgMTE2QSAxMUIxOworQzg5NztDODk3OzExMEMgMTE2QSAxMUIyO0M4OTc7MTEwQyAxMTZBIDExQjI7CitDODk4O0M4OTg7MTEwQyAxMTZBIDExQjM7Qzg5ODsxMTBDIDExNkEgMTFCMzsKK0M4OTk7Qzg5OTsxMTBDIDExNkEgMTFCNDtDODk5OzExMEMgMTE2QSAxMUI0OworQzg5QTtDODlBOzExMEMgMTE2QSAxMUI1O0M4OUE7MTEwQyAxMTZBIDExQjU7CitDODlCO0M4OUI7MTEwQyAxMTZBIDExQjY7Qzg5QjsxMTBDIDExNkEgMTFCNjsKK0M4OUM7Qzg5QzsxMTBDIDExNkEgMTFCNztDODlDOzExMEMgMTE2QSAxMUI3OworQzg5RDtDODlEOzExMEMgMTE2QSAxMUI4O0M4OUQ7MTEwQyAxMTZBIDExQjg7CitDODlFO0M4OUU7MTEwQyAxMTZBIDExQjk7Qzg5RTsxMTBDIDExNkEgMTFCOTsKK0M4OUY7Qzg5RjsxMTBDIDExNkEgMTFCQTtDODlGOzExMEMgMTE2QSAxMUJBOworQzhBMDtDOEEwOzExMEMgMTE2QSAxMUJCO0M4QTA7MTEwQyAxMTZBIDExQkI7CitDOEExO0M4QTE7MTEwQyAxMTZBIDExQkM7QzhBMTsxMTBDIDExNkEgMTFCQzsKK0M4QTI7QzhBMjsxMTBDIDExNkEgMTFCRDtDOEEyOzExMEMgMTE2QSAxMUJEOworQzhBMztDOEEzOzExMEMgMTE2QSAxMUJFO0M4QTM7MTEwQyAxMTZBIDExQkU7CitDOEE0O0M4QTQ7MTEwQyAxMTZBIDExQkY7QzhBNDsxMTBDIDExNkEgMTFCRjsKK0M4QTU7QzhBNTsxMTBDIDExNkEgMTFDMDtDOEE1OzExMEMgMTE2QSAxMUMwOworQzhBNjtDOEE2OzExMEMgMTE2QSAxMUMxO0M4QTY7MTEwQyAxMTZBIDExQzE7CitDOEE3O0M4QTc7MTEwQyAxMTZBIDExQzI7QzhBNzsxMTBDIDExNkEgMTFDMjsKK0M4QTg7QzhBODsxMTBDIDExNkI7QzhBODsxMTBDIDExNkI7CitDOEE5O0M4QTk7MTEwQyAxMTZCIDExQTg7QzhBOTsxMTBDIDExNkIgMTFBODsKK0M4QUE7QzhBQTsxMTBDIDExNkIgMTFBOTtDOEFBOzExMEMgMTE2QiAxMUE5OworQzhBQjtDOEFCOzExMEMgMTE2QiAxMUFBO0M4QUI7MTEwQyAxMTZCIDExQUE7CitDOEFDO0M4QUM7MTEwQyAxMTZCIDExQUI7QzhBQzsxMTBDIDExNkIgMTFBQjsKK0M4QUQ7QzhBRDsxMTBDIDExNkIgMTFBQztDOEFEOzExMEMgMTE2QiAxMUFDOworQzhBRTtDOEFFOzExMEMgMTE2QiAxMUFEO0M4QUU7MTEwQyAxMTZCIDExQUQ7CitDOEFGO0M4QUY7MTEwQyAxMTZCIDExQUU7QzhBRjsxMTBDIDExNkIgMTFBRTsKK0M4QjA7QzhCMDsxMTBDIDExNkIgMTFBRjtDOEIwOzExMEMgMTE2QiAxMUFGOworQzhCMTtDOEIxOzExMEMgMTE2QiAxMUIwO0M4QjE7MTEwQyAxMTZCIDExQjA7CitDOEIyO0M4QjI7MTEwQyAxMTZCIDExQjE7QzhCMjsxMTBDIDExNkIgMTFCMTsKK0M4QjM7QzhCMzsxMTBDIDExNkIgMTFCMjtDOEIzOzExMEMgMTE2QiAxMUIyOworQzhCNDtDOEI0OzExMEMgMTE2QiAxMUIzO0M4QjQ7MTEwQyAxMTZCIDExQjM7CitDOEI1O0M4QjU7MTEwQyAxMTZCIDExQjQ7QzhCNTsxMTBDIDExNkIgMTFCNDsKK0M4QjY7QzhCNjsxMTBDIDExNkIgMTFCNTtDOEI2OzExMEMgMTE2QiAxMUI1OworQzhCNztDOEI3OzExMEMgMTE2QiAxMUI2O0M4Qjc7MTEwQyAxMTZCIDExQjY7CitDOEI4O0M4Qjg7MTEwQyAxMTZCIDExQjc7QzhCODsxMTBDIDExNkIgMTFCNzsKK0M4Qjk7QzhCOTsxMTBDIDExNkIgMTFCODtDOEI5OzExMEMgMTE2QiAxMUI4OworQzhCQTtDOEJBOzExMEMgMTE2QiAxMUI5O0M4QkE7MTEwQyAxMTZCIDExQjk7CitDOEJCO0M4QkI7MTEwQyAxMTZCIDExQkE7QzhCQjsxMTBDIDExNkIgMTFCQTsKK0M4QkM7QzhCQzsxMTBDIDExNkIgMTFCQjtDOEJDOzExMEMgMTE2QiAxMUJCOworQzhCRDtDOEJEOzExMEMgMTE2QiAxMUJDO0M4QkQ7MTEwQyAxMTZCIDExQkM7CitDOEJFO0M4QkU7MTEwQyAxMTZCIDExQkQ7QzhCRTsxMTBDIDExNkIgMTFCRDsKK0M4QkY7QzhCRjsxMTBDIDExNkIgMTFCRTtDOEJGOzExMEMgMTE2QiAxMUJFOworQzhDMDtDOEMwOzExMEMgMTE2QiAxMUJGO0M4QzA7MTEwQyAxMTZCIDExQkY7CitDOEMxO0M4QzE7MTEwQyAxMTZCIDExQzA7QzhDMTsxMTBDIDExNkIgMTFDMDsKK0M4QzI7QzhDMjsxMTBDIDExNkIgMTFDMTtDOEMyOzExMEMgMTE2QiAxMUMxOworQzhDMztDOEMzOzExMEMgMTE2QiAxMUMyO0M4QzM7MTEwQyAxMTZCIDExQzI7CitDOEM0O0M4QzQ7MTEwQyAxMTZDO0M4QzQ7MTEwQyAxMTZDOworQzhDNTtDOEM1OzExMEMgMTE2QyAxMUE4O0M4QzU7MTEwQyAxMTZDIDExQTg7CitDOEM2O0M4QzY7MTEwQyAxMTZDIDExQTk7QzhDNjsxMTBDIDExNkMgMTFBOTsKK0M4Qzc7QzhDNzsxMTBDIDExNkMgMTFBQTtDOEM3OzExMEMgMTE2QyAxMUFBOworQzhDODtDOEM4OzExMEMgMTE2QyAxMUFCO0M4Qzg7MTEwQyAxMTZDIDExQUI7CitDOEM5O0M4Qzk7MTEwQyAxMTZDIDExQUM7QzhDOTsxMTBDIDExNkMgMTFBQzsKK0M4Q0E7QzhDQTsxMTBDIDExNkMgMTFBRDtDOENBOzExMEMgMTE2QyAxMUFEOworQzhDQjtDOENCOzExMEMgMTE2QyAxMUFFO0M4Q0I7MTEwQyAxMTZDIDExQUU7CitDOENDO0M4Q0M7MTEwQyAxMTZDIDExQUY7QzhDQzsxMTBDIDExNkMgMTFBRjsKK0M4Q0Q7QzhDRDsxMTBDIDExNkMgMTFCMDtDOENEOzExMEMgMTE2QyAxMUIwOworQzhDRTtDOENFOzExMEMgMTE2QyAxMUIxO0M4Q0U7MTEwQyAxMTZDIDExQjE7CitDOENGO0M4Q0Y7MTEwQyAxMTZDIDExQjI7QzhDRjsxMTBDIDExNkMgMTFCMjsKK0M4RDA7QzhEMDsxMTBDIDExNkMgMTFCMztDOEQwOzExMEMgMTE2QyAxMUIzOworQzhEMTtDOEQxOzExMEMgMTE2QyAxMUI0O0M4RDE7MTEwQyAxMTZDIDExQjQ7CitDOEQyO0M4RDI7MTEwQyAxMTZDIDExQjU7QzhEMjsxMTBDIDExNkMgMTFCNTsKK0M4RDM7QzhEMzsxMTBDIDExNkMgMTFCNjtDOEQzOzExMEMgMTE2QyAxMUI2OworQzhENDtDOEQ0OzExMEMgMTE2QyAxMUI3O0M4RDQ7MTEwQyAxMTZDIDExQjc7CitDOEQ1O0M4RDU7MTEwQyAxMTZDIDExQjg7QzhENTsxMTBDIDExNkMgMTFCODsKK0M4RDY7QzhENjsxMTBDIDExNkMgMTFCOTtDOEQ2OzExMEMgMTE2QyAxMUI5OworQzhENztDOEQ3OzExMEMgMTE2QyAxMUJBO0M4RDc7MTEwQyAxMTZDIDExQkE7CitDOEQ4O0M4RDg7MTEwQyAxMTZDIDExQkI7QzhEODsxMTBDIDExNkMgMTFCQjsKK0M4RDk7QzhEOTsxMTBDIDExNkMgMTFCQztDOEQ5OzExMEMgMTE2QyAxMUJDOworQzhEQTtDOERBOzExMEMgMTE2QyAxMUJEO0M4REE7MTEwQyAxMTZDIDExQkQ7CitDOERCO0M4REI7MTEwQyAxMTZDIDExQkU7QzhEQjsxMTBDIDExNkMgMTFCRTsKK0M4REM7QzhEQzsxMTBDIDExNkMgMTFCRjtDOERDOzExMEMgMTE2QyAxMUJGOworQzhERDtDOEREOzExMEMgMTE2QyAxMUMwO0M4REQ7MTEwQyAxMTZDIDExQzA7CitDOERFO0M4REU7MTEwQyAxMTZDIDExQzE7QzhERTsxMTBDIDExNkMgMTFDMTsKK0M4REY7QzhERjsxMTBDIDExNkMgMTFDMjtDOERGOzExMEMgMTE2QyAxMUMyOworQzhFMDtDOEUwOzExMEMgMTE2RDtDOEUwOzExMEMgMTE2RDsKK0M4RTE7QzhFMTsxMTBDIDExNkQgMTFBODtDOEUxOzExMEMgMTE2RCAxMUE4OworQzhFMjtDOEUyOzExMEMgMTE2RCAxMUE5O0M4RTI7MTEwQyAxMTZEIDExQTk7CitDOEUzO0M4RTM7MTEwQyAxMTZEIDExQUE7QzhFMzsxMTBDIDExNkQgMTFBQTsKK0M4RTQ7QzhFNDsxMTBDIDExNkQgMTFBQjtDOEU0OzExMEMgMTE2RCAxMUFCOworQzhFNTtDOEU1OzExMEMgMTE2RCAxMUFDO0M4RTU7MTEwQyAxMTZEIDExQUM7CitDOEU2O0M4RTY7MTEwQyAxMTZEIDExQUQ7QzhFNjsxMTBDIDExNkQgMTFBRDsKK0M4RTc7QzhFNzsxMTBDIDExNkQgMTFBRTtDOEU3OzExMEMgMTE2RCAxMUFFOworQzhFODtDOEU4OzExMEMgMTE2RCAxMUFGO0M4RTg7MTEwQyAxMTZEIDExQUY7CitDOEU5O0M4RTk7MTEwQyAxMTZEIDExQjA7QzhFOTsxMTBDIDExNkQgMTFCMDsKK0M4RUE7QzhFQTsxMTBDIDExNkQgMTFCMTtDOEVBOzExMEMgMTE2RCAxMUIxOworQzhFQjtDOEVCOzExMEMgMTE2RCAxMUIyO0M4RUI7MTEwQyAxMTZEIDExQjI7CitDOEVDO0M4RUM7MTEwQyAxMTZEIDExQjM7QzhFQzsxMTBDIDExNkQgMTFCMzsKK0M4RUQ7QzhFRDsxMTBDIDExNkQgMTFCNDtDOEVEOzExMEMgMTE2RCAxMUI0OworQzhFRTtDOEVFOzExMEMgMTE2RCAxMUI1O0M4RUU7MTEwQyAxMTZEIDExQjU7CitDOEVGO0M4RUY7MTEwQyAxMTZEIDExQjY7QzhFRjsxMTBDIDExNkQgMTFCNjsKK0M4RjA7QzhGMDsxMTBDIDExNkQgMTFCNztDOEYwOzExMEMgMTE2RCAxMUI3OworQzhGMTtDOEYxOzExMEMgMTE2RCAxMUI4O0M4RjE7MTEwQyAxMTZEIDExQjg7CitDOEYyO0M4RjI7MTEwQyAxMTZEIDExQjk7QzhGMjsxMTBDIDExNkQgMTFCOTsKK0M4RjM7QzhGMzsxMTBDIDExNkQgMTFCQTtDOEYzOzExMEMgMTE2RCAxMUJBOworQzhGNDtDOEY0OzExMEMgMTE2RCAxMUJCO0M4RjQ7MTEwQyAxMTZEIDExQkI7CitDOEY1O0M4RjU7MTEwQyAxMTZEIDExQkM7QzhGNTsxMTBDIDExNkQgMTFCQzsKK0M4RjY7QzhGNjsxMTBDIDExNkQgMTFCRDtDOEY2OzExMEMgMTE2RCAxMUJEOworQzhGNztDOEY3OzExMEMgMTE2RCAxMUJFO0M4Rjc7MTEwQyAxMTZEIDExQkU7CitDOEY4O0M4Rjg7MTEwQyAxMTZEIDExQkY7QzhGODsxMTBDIDExNkQgMTFCRjsKK0M4Rjk7QzhGOTsxMTBDIDExNkQgMTFDMDtDOEY5OzExMEMgMTE2RCAxMUMwOworQzhGQTtDOEZBOzExMEMgMTE2RCAxMUMxO0M4RkE7MTEwQyAxMTZEIDExQzE7CitDOEZCO0M4RkI7MTEwQyAxMTZEIDExQzI7QzhGQjsxMTBDIDExNkQgMTFDMjsKK0M4RkM7QzhGQzsxMTBDIDExNkU7QzhGQzsxMTBDIDExNkU7CitDOEZEO0M4RkQ7MTEwQyAxMTZFIDExQTg7QzhGRDsxMTBDIDExNkUgMTFBODsKK0M4RkU7QzhGRTsxMTBDIDExNkUgMTFBOTtDOEZFOzExMEMgMTE2RSAxMUE5OworQzhGRjtDOEZGOzExMEMgMTE2RSAxMUFBO0M4RkY7MTEwQyAxMTZFIDExQUE7CitDOTAwO0M5MDA7MTEwQyAxMTZFIDExQUI7QzkwMDsxMTBDIDExNkUgMTFBQjsKK0M5MDE7QzkwMTsxMTBDIDExNkUgMTFBQztDOTAxOzExMEMgMTE2RSAxMUFDOworQzkwMjtDOTAyOzExMEMgMTE2RSAxMUFEO0M5MDI7MTEwQyAxMTZFIDExQUQ7CitDOTAzO0M5MDM7MTEwQyAxMTZFIDExQUU7QzkwMzsxMTBDIDExNkUgMTFBRTsKK0M5MDQ7QzkwNDsxMTBDIDExNkUgMTFBRjtDOTA0OzExMEMgMTE2RSAxMUFGOworQzkwNTtDOTA1OzExMEMgMTE2RSAxMUIwO0M5MDU7MTEwQyAxMTZFIDExQjA7CitDOTA2O0M5MDY7MTEwQyAxMTZFIDExQjE7QzkwNjsxMTBDIDExNkUgMTFCMTsKK0M5MDc7QzkwNzsxMTBDIDExNkUgMTFCMjtDOTA3OzExMEMgMTE2RSAxMUIyOworQzkwODtDOTA4OzExMEMgMTE2RSAxMUIzO0M5MDg7MTEwQyAxMTZFIDExQjM7CitDOTA5O0M5MDk7MTEwQyAxMTZFIDExQjQ7QzkwOTsxMTBDIDExNkUgMTFCNDsKK0M5MEE7QzkwQTsxMTBDIDExNkUgMTFCNTtDOTBBOzExMEMgMTE2RSAxMUI1OworQzkwQjtDOTBCOzExMEMgMTE2RSAxMUI2O0M5MEI7MTEwQyAxMTZFIDExQjY7CitDOTBDO0M5MEM7MTEwQyAxMTZFIDExQjc7QzkwQzsxMTBDIDExNkUgMTFCNzsKK0M5MEQ7QzkwRDsxMTBDIDExNkUgMTFCODtDOTBEOzExMEMgMTE2RSAxMUI4OworQzkwRTtDOTBFOzExMEMgMTE2RSAxMUI5O0M5MEU7MTEwQyAxMTZFIDExQjk7CitDOTBGO0M5MEY7MTEwQyAxMTZFIDExQkE7QzkwRjsxMTBDIDExNkUgMTFCQTsKK0M5MTA7QzkxMDsxMTBDIDExNkUgMTFCQjtDOTEwOzExMEMgMTE2RSAxMUJCOworQzkxMTtDOTExOzExMEMgMTE2RSAxMUJDO0M5MTE7MTEwQyAxMTZFIDExQkM7CitDOTEyO0M5MTI7MTEwQyAxMTZFIDExQkQ7QzkxMjsxMTBDIDExNkUgMTFCRDsKK0M5MTM7QzkxMzsxMTBDIDExNkUgMTFCRTtDOTEzOzExMEMgMTE2RSAxMUJFOworQzkxNDtDOTE0OzExMEMgMTE2RSAxMUJGO0M5MTQ7MTEwQyAxMTZFIDExQkY7CitDOTE1O0M5MTU7MTEwQyAxMTZFIDExQzA7QzkxNTsxMTBDIDExNkUgMTFDMDsKK0M5MTY7QzkxNjsxMTBDIDExNkUgMTFDMTtDOTE2OzExMEMgMTE2RSAxMUMxOworQzkxNztDOTE3OzExMEMgMTE2RSAxMUMyO0M5MTc7MTEwQyAxMTZFIDExQzI7CitDOTE4O0M5MTg7MTEwQyAxMTZGO0M5MTg7MTEwQyAxMTZGOworQzkxOTtDOTE5OzExMEMgMTE2RiAxMUE4O0M5MTk7MTEwQyAxMTZGIDExQTg7CitDOTFBO0M5MUE7MTEwQyAxMTZGIDExQTk7QzkxQTsxMTBDIDExNkYgMTFBOTsKK0M5MUI7QzkxQjsxMTBDIDExNkYgMTFBQTtDOTFCOzExMEMgMTE2RiAxMUFBOworQzkxQztDOTFDOzExMEMgMTE2RiAxMUFCO0M5MUM7MTEwQyAxMTZGIDExQUI7CitDOTFEO0M5MUQ7MTEwQyAxMTZGIDExQUM7QzkxRDsxMTBDIDExNkYgMTFBQzsKK0M5MUU7QzkxRTsxMTBDIDExNkYgMTFBRDtDOTFFOzExMEMgMTE2RiAxMUFEOworQzkxRjtDOTFGOzExMEMgMTE2RiAxMUFFO0M5MUY7MTEwQyAxMTZGIDExQUU7CitDOTIwO0M5MjA7MTEwQyAxMTZGIDExQUY7QzkyMDsxMTBDIDExNkYgMTFBRjsKK0M5MjE7QzkyMTsxMTBDIDExNkYgMTFCMDtDOTIxOzExMEMgMTE2RiAxMUIwOworQzkyMjtDOTIyOzExMEMgMTE2RiAxMUIxO0M5MjI7MTEwQyAxMTZGIDExQjE7CitDOTIzO0M5MjM7MTEwQyAxMTZGIDExQjI7QzkyMzsxMTBDIDExNkYgMTFCMjsKK0M5MjQ7QzkyNDsxMTBDIDExNkYgMTFCMztDOTI0OzExMEMgMTE2RiAxMUIzOworQzkyNTtDOTI1OzExMEMgMTE2RiAxMUI0O0M5MjU7MTEwQyAxMTZGIDExQjQ7CitDOTI2O0M5MjY7MTEwQyAxMTZGIDExQjU7QzkyNjsxMTBDIDExNkYgMTFCNTsKK0M5Mjc7QzkyNzsxMTBDIDExNkYgMTFCNjtDOTI3OzExMEMgMTE2RiAxMUI2OworQzkyODtDOTI4OzExMEMgMTE2RiAxMUI3O0M5Mjg7MTEwQyAxMTZGIDExQjc7CitDOTI5O0M5Mjk7MTEwQyAxMTZGIDExQjg7QzkyOTsxMTBDIDExNkYgMTFCODsKK0M5MkE7QzkyQTsxMTBDIDExNkYgMTFCOTtDOTJBOzExMEMgMTE2RiAxMUI5OworQzkyQjtDOTJCOzExMEMgMTE2RiAxMUJBO0M5MkI7MTEwQyAxMTZGIDExQkE7CitDOTJDO0M5MkM7MTEwQyAxMTZGIDExQkI7QzkyQzsxMTBDIDExNkYgMTFCQjsKK0M5MkQ7QzkyRDsxMTBDIDExNkYgMTFCQztDOTJEOzExMEMgMTE2RiAxMUJDOworQzkyRTtDOTJFOzExMEMgMTE2RiAxMUJEO0M5MkU7MTEwQyAxMTZGIDExQkQ7CitDOTJGO0M5MkY7MTEwQyAxMTZGIDExQkU7QzkyRjsxMTBDIDExNkYgMTFCRTsKK0M5MzA7QzkzMDsxMTBDIDExNkYgMTFCRjtDOTMwOzExMEMgMTE2RiAxMUJGOworQzkzMTtDOTMxOzExMEMgMTE2RiAxMUMwO0M5MzE7MTEwQyAxMTZGIDExQzA7CitDOTMyO0M5MzI7MTEwQyAxMTZGIDExQzE7QzkzMjsxMTBDIDExNkYgMTFDMTsKK0M5MzM7QzkzMzsxMTBDIDExNkYgMTFDMjtDOTMzOzExMEMgMTE2RiAxMUMyOworQzkzNDtDOTM0OzExMEMgMTE3MDtDOTM0OzExMEMgMTE3MDsKK0M5MzU7QzkzNTsxMTBDIDExNzAgMTFBODtDOTM1OzExMEMgMTE3MCAxMUE4OworQzkzNjtDOTM2OzExMEMgMTE3MCAxMUE5O0M5MzY7MTEwQyAxMTcwIDExQTk7CitDOTM3O0M5Mzc7MTEwQyAxMTcwIDExQUE7QzkzNzsxMTBDIDExNzAgMTFBQTsKK0M5Mzg7QzkzODsxMTBDIDExNzAgMTFBQjtDOTM4OzExMEMgMTE3MCAxMUFCOworQzkzOTtDOTM5OzExMEMgMTE3MCAxMUFDO0M5Mzk7MTEwQyAxMTcwIDExQUM7CitDOTNBO0M5M0E7MTEwQyAxMTcwIDExQUQ7QzkzQTsxMTBDIDExNzAgMTFBRDsKK0M5M0I7QzkzQjsxMTBDIDExNzAgMTFBRTtDOTNCOzExMEMgMTE3MCAxMUFFOworQzkzQztDOTNDOzExMEMgMTE3MCAxMUFGO0M5M0M7MTEwQyAxMTcwIDExQUY7CitDOTNEO0M5M0Q7MTEwQyAxMTcwIDExQjA7QzkzRDsxMTBDIDExNzAgMTFCMDsKK0M5M0U7QzkzRTsxMTBDIDExNzAgMTFCMTtDOTNFOzExMEMgMTE3MCAxMUIxOworQzkzRjtDOTNGOzExMEMgMTE3MCAxMUIyO0M5M0Y7MTEwQyAxMTcwIDExQjI7CitDOTQwO0M5NDA7MTEwQyAxMTcwIDExQjM7Qzk0MDsxMTBDIDExNzAgMTFCMzsKK0M5NDE7Qzk0MTsxMTBDIDExNzAgMTFCNDtDOTQxOzExMEMgMTE3MCAxMUI0OworQzk0MjtDOTQyOzExMEMgMTE3MCAxMUI1O0M5NDI7MTEwQyAxMTcwIDExQjU7CitDOTQzO0M5NDM7MTEwQyAxMTcwIDExQjY7Qzk0MzsxMTBDIDExNzAgMTFCNjsKK0M5NDQ7Qzk0NDsxMTBDIDExNzAgMTFCNztDOTQ0OzExMEMgMTE3MCAxMUI3OworQzk0NTtDOTQ1OzExMEMgMTE3MCAxMUI4O0M5NDU7MTEwQyAxMTcwIDExQjg7CitDOTQ2O0M5NDY7MTEwQyAxMTcwIDExQjk7Qzk0NjsxMTBDIDExNzAgMTFCOTsKK0M5NDc7Qzk0NzsxMTBDIDExNzAgMTFCQTtDOTQ3OzExMEMgMTE3MCAxMUJBOworQzk0ODtDOTQ4OzExMEMgMTE3MCAxMUJCO0M5NDg7MTEwQyAxMTcwIDExQkI7CitDOTQ5O0M5NDk7MTEwQyAxMTcwIDExQkM7Qzk0OTsxMTBDIDExNzAgMTFCQzsKK0M5NEE7Qzk0QTsxMTBDIDExNzAgMTFCRDtDOTRBOzExMEMgMTE3MCAxMUJEOworQzk0QjtDOTRCOzExMEMgMTE3MCAxMUJFO0M5NEI7MTEwQyAxMTcwIDExQkU7CitDOTRDO0M5NEM7MTEwQyAxMTcwIDExQkY7Qzk0QzsxMTBDIDExNzAgMTFCRjsKK0M5NEQ7Qzk0RDsxMTBDIDExNzAgMTFDMDtDOTREOzExMEMgMTE3MCAxMUMwOworQzk0RTtDOTRFOzExMEMgMTE3MCAxMUMxO0M5NEU7MTEwQyAxMTcwIDExQzE7CitDOTRGO0M5NEY7MTEwQyAxMTcwIDExQzI7Qzk0RjsxMTBDIDExNzAgMTFDMjsKK0M5NTA7Qzk1MDsxMTBDIDExNzE7Qzk1MDsxMTBDIDExNzE7CitDOTUxO0M5NTE7MTEwQyAxMTcxIDExQTg7Qzk1MTsxMTBDIDExNzEgMTFBODsKK0M5NTI7Qzk1MjsxMTBDIDExNzEgMTFBOTtDOTUyOzExMEMgMTE3MSAxMUE5OworQzk1MztDOTUzOzExMEMgMTE3MSAxMUFBO0M5NTM7MTEwQyAxMTcxIDExQUE7CitDOTU0O0M5NTQ7MTEwQyAxMTcxIDExQUI7Qzk1NDsxMTBDIDExNzEgMTFBQjsKK0M5NTU7Qzk1NTsxMTBDIDExNzEgMTFBQztDOTU1OzExMEMgMTE3MSAxMUFDOworQzk1NjtDOTU2OzExMEMgMTE3MSAxMUFEO0M5NTY7MTEwQyAxMTcxIDExQUQ7CitDOTU3O0M5NTc7MTEwQyAxMTcxIDExQUU7Qzk1NzsxMTBDIDExNzEgMTFBRTsKK0M5NTg7Qzk1ODsxMTBDIDExNzEgMTFBRjtDOTU4OzExMEMgMTE3MSAxMUFGOworQzk1OTtDOTU5OzExMEMgMTE3MSAxMUIwO0M5NTk7MTEwQyAxMTcxIDExQjA7CitDOTVBO0M5NUE7MTEwQyAxMTcxIDExQjE7Qzk1QTsxMTBDIDExNzEgMTFCMTsKK0M5NUI7Qzk1QjsxMTBDIDExNzEgMTFCMjtDOTVCOzExMEMgMTE3MSAxMUIyOworQzk1QztDOTVDOzExMEMgMTE3MSAxMUIzO0M5NUM7MTEwQyAxMTcxIDExQjM7CitDOTVEO0M5NUQ7MTEwQyAxMTcxIDExQjQ7Qzk1RDsxMTBDIDExNzEgMTFCNDsKK0M5NUU7Qzk1RTsxMTBDIDExNzEgMTFCNTtDOTVFOzExMEMgMTE3MSAxMUI1OworQzk1RjtDOTVGOzExMEMgMTE3MSAxMUI2O0M5NUY7MTEwQyAxMTcxIDExQjY7CitDOTYwO0M5NjA7MTEwQyAxMTcxIDExQjc7Qzk2MDsxMTBDIDExNzEgMTFCNzsKK0M5NjE7Qzk2MTsxMTBDIDExNzEgMTFCODtDOTYxOzExMEMgMTE3MSAxMUI4OworQzk2MjtDOTYyOzExMEMgMTE3MSAxMUI5O0M5NjI7MTEwQyAxMTcxIDExQjk7CitDOTYzO0M5NjM7MTEwQyAxMTcxIDExQkE7Qzk2MzsxMTBDIDExNzEgMTFCQTsKK0M5NjQ7Qzk2NDsxMTBDIDExNzEgMTFCQjtDOTY0OzExMEMgMTE3MSAxMUJCOworQzk2NTtDOTY1OzExMEMgMTE3MSAxMUJDO0M5NjU7MTEwQyAxMTcxIDExQkM7CitDOTY2O0M5NjY7MTEwQyAxMTcxIDExQkQ7Qzk2NjsxMTBDIDExNzEgMTFCRDsKK0M5Njc7Qzk2NzsxMTBDIDExNzEgMTFCRTtDOTY3OzExMEMgMTE3MSAxMUJFOworQzk2ODtDOTY4OzExMEMgMTE3MSAxMUJGO0M5Njg7MTEwQyAxMTcxIDExQkY7CitDOTY5O0M5Njk7MTEwQyAxMTcxIDExQzA7Qzk2OTsxMTBDIDExNzEgMTFDMDsKK0M5NkE7Qzk2QTsxMTBDIDExNzEgMTFDMTtDOTZBOzExMEMgMTE3MSAxMUMxOworQzk2QjtDOTZCOzExMEMgMTE3MSAxMUMyO0M5NkI7MTEwQyAxMTcxIDExQzI7CitDOTZDO0M5NkM7MTEwQyAxMTcyO0M5NkM7MTEwQyAxMTcyOworQzk2RDtDOTZEOzExMEMgMTE3MiAxMUE4O0M5NkQ7MTEwQyAxMTcyIDExQTg7CitDOTZFO0M5NkU7MTEwQyAxMTcyIDExQTk7Qzk2RTsxMTBDIDExNzIgMTFBOTsKK0M5NkY7Qzk2RjsxMTBDIDExNzIgMTFBQTtDOTZGOzExMEMgMTE3MiAxMUFBOworQzk3MDtDOTcwOzExMEMgMTE3MiAxMUFCO0M5NzA7MTEwQyAxMTcyIDExQUI7CitDOTcxO0M5NzE7MTEwQyAxMTcyIDExQUM7Qzk3MTsxMTBDIDExNzIgMTFBQzsKK0M5NzI7Qzk3MjsxMTBDIDExNzIgMTFBRDtDOTcyOzExMEMgMTE3MiAxMUFEOworQzk3MztDOTczOzExMEMgMTE3MiAxMUFFO0M5NzM7MTEwQyAxMTcyIDExQUU7CitDOTc0O0M5NzQ7MTEwQyAxMTcyIDExQUY7Qzk3NDsxMTBDIDExNzIgMTFBRjsKK0M5NzU7Qzk3NTsxMTBDIDExNzIgMTFCMDtDOTc1OzExMEMgMTE3MiAxMUIwOworQzk3NjtDOTc2OzExMEMgMTE3MiAxMUIxO0M5NzY7MTEwQyAxMTcyIDExQjE7CitDOTc3O0M5Nzc7MTEwQyAxMTcyIDExQjI7Qzk3NzsxMTBDIDExNzIgMTFCMjsKK0M5Nzg7Qzk3ODsxMTBDIDExNzIgMTFCMztDOTc4OzExMEMgMTE3MiAxMUIzOworQzk3OTtDOTc5OzExMEMgMTE3MiAxMUI0O0M5Nzk7MTEwQyAxMTcyIDExQjQ7CitDOTdBO0M5N0E7MTEwQyAxMTcyIDExQjU7Qzk3QTsxMTBDIDExNzIgMTFCNTsKK0M5N0I7Qzk3QjsxMTBDIDExNzIgMTFCNjtDOTdCOzExMEMgMTE3MiAxMUI2OworQzk3QztDOTdDOzExMEMgMTE3MiAxMUI3O0M5N0M7MTEwQyAxMTcyIDExQjc7CitDOTdEO0M5N0Q7MTEwQyAxMTcyIDExQjg7Qzk3RDsxMTBDIDExNzIgMTFCODsKK0M5N0U7Qzk3RTsxMTBDIDExNzIgMTFCOTtDOTdFOzExMEMgMTE3MiAxMUI5OworQzk3RjtDOTdGOzExMEMgMTE3MiAxMUJBO0M5N0Y7MTEwQyAxMTcyIDExQkE7CitDOTgwO0M5ODA7MTEwQyAxMTcyIDExQkI7Qzk4MDsxMTBDIDExNzIgMTFCQjsKK0M5ODE7Qzk4MTsxMTBDIDExNzIgMTFCQztDOTgxOzExMEMgMTE3MiAxMUJDOworQzk4MjtDOTgyOzExMEMgMTE3MiAxMUJEO0M5ODI7MTEwQyAxMTcyIDExQkQ7CitDOTgzO0M5ODM7MTEwQyAxMTcyIDExQkU7Qzk4MzsxMTBDIDExNzIgMTFCRTsKK0M5ODQ7Qzk4NDsxMTBDIDExNzIgMTFCRjtDOTg0OzExMEMgMTE3MiAxMUJGOworQzk4NTtDOTg1OzExMEMgMTE3MiAxMUMwO0M5ODU7MTEwQyAxMTcyIDExQzA7CitDOTg2O0M5ODY7MTEwQyAxMTcyIDExQzE7Qzk4NjsxMTBDIDExNzIgMTFDMTsKK0M5ODc7Qzk4NzsxMTBDIDExNzIgMTFDMjtDOTg3OzExMEMgMTE3MiAxMUMyOworQzk4ODtDOTg4OzExMEMgMTE3MztDOTg4OzExMEMgMTE3MzsKK0M5ODk7Qzk4OTsxMTBDIDExNzMgMTFBODtDOTg5OzExMEMgMTE3MyAxMUE4OworQzk4QTtDOThBOzExMEMgMTE3MyAxMUE5O0M5OEE7MTEwQyAxMTczIDExQTk7CitDOThCO0M5OEI7MTEwQyAxMTczIDExQUE7Qzk4QjsxMTBDIDExNzMgMTFBQTsKK0M5OEM7Qzk4QzsxMTBDIDExNzMgMTFBQjtDOThDOzExMEMgMTE3MyAxMUFCOworQzk4RDtDOThEOzExMEMgMTE3MyAxMUFDO0M5OEQ7MTEwQyAxMTczIDExQUM7CitDOThFO0M5OEU7MTEwQyAxMTczIDExQUQ7Qzk4RTsxMTBDIDExNzMgMTFBRDsKK0M5OEY7Qzk4RjsxMTBDIDExNzMgMTFBRTtDOThGOzExMEMgMTE3MyAxMUFFOworQzk5MDtDOTkwOzExMEMgMTE3MyAxMUFGO0M5OTA7MTEwQyAxMTczIDExQUY7CitDOTkxO0M5OTE7MTEwQyAxMTczIDExQjA7Qzk5MTsxMTBDIDExNzMgMTFCMDsKK0M5OTI7Qzk5MjsxMTBDIDExNzMgMTFCMTtDOTkyOzExMEMgMTE3MyAxMUIxOworQzk5MztDOTkzOzExMEMgMTE3MyAxMUIyO0M5OTM7MTEwQyAxMTczIDExQjI7CitDOTk0O0M5OTQ7MTEwQyAxMTczIDExQjM7Qzk5NDsxMTBDIDExNzMgMTFCMzsKK0M5OTU7Qzk5NTsxMTBDIDExNzMgMTFCNDtDOTk1OzExMEMgMTE3MyAxMUI0OworQzk5NjtDOTk2OzExMEMgMTE3MyAxMUI1O0M5OTY7MTEwQyAxMTczIDExQjU7CitDOTk3O0M5OTc7MTEwQyAxMTczIDExQjY7Qzk5NzsxMTBDIDExNzMgMTFCNjsKK0M5OTg7Qzk5ODsxMTBDIDExNzMgMTFCNztDOTk4OzExMEMgMTE3MyAxMUI3OworQzk5OTtDOTk5OzExMEMgMTE3MyAxMUI4O0M5OTk7MTEwQyAxMTczIDExQjg7CitDOTlBO0M5OUE7MTEwQyAxMTczIDExQjk7Qzk5QTsxMTBDIDExNzMgMTFCOTsKK0M5OUI7Qzk5QjsxMTBDIDExNzMgMTFCQTtDOTlCOzExMEMgMTE3MyAxMUJBOworQzk5QztDOTlDOzExMEMgMTE3MyAxMUJCO0M5OUM7MTEwQyAxMTczIDExQkI7CitDOTlEO0M5OUQ7MTEwQyAxMTczIDExQkM7Qzk5RDsxMTBDIDExNzMgMTFCQzsKK0M5OUU7Qzk5RTsxMTBDIDExNzMgMTFCRDtDOTlFOzExMEMgMTE3MyAxMUJEOworQzk5RjtDOTlGOzExMEMgMTE3MyAxMUJFO0M5OUY7MTEwQyAxMTczIDExQkU7CitDOUEwO0M5QTA7MTEwQyAxMTczIDExQkY7QzlBMDsxMTBDIDExNzMgMTFCRjsKK0M5QTE7QzlBMTsxMTBDIDExNzMgMTFDMDtDOUExOzExMEMgMTE3MyAxMUMwOworQzlBMjtDOUEyOzExMEMgMTE3MyAxMUMxO0M5QTI7MTEwQyAxMTczIDExQzE7CitDOUEzO0M5QTM7MTEwQyAxMTczIDExQzI7QzlBMzsxMTBDIDExNzMgMTFDMjsKK0M5QTQ7QzlBNDsxMTBDIDExNzQ7QzlBNDsxMTBDIDExNzQ7CitDOUE1O0M5QTU7MTEwQyAxMTc0IDExQTg7QzlBNTsxMTBDIDExNzQgMTFBODsKK0M5QTY7QzlBNjsxMTBDIDExNzQgMTFBOTtDOUE2OzExMEMgMTE3NCAxMUE5OworQzlBNztDOUE3OzExMEMgMTE3NCAxMUFBO0M5QTc7MTEwQyAxMTc0IDExQUE7CitDOUE4O0M5QTg7MTEwQyAxMTc0IDExQUI7QzlBODsxMTBDIDExNzQgMTFBQjsKK0M5QTk7QzlBOTsxMTBDIDExNzQgMTFBQztDOUE5OzExMEMgMTE3NCAxMUFDOworQzlBQTtDOUFBOzExMEMgMTE3NCAxMUFEO0M5QUE7MTEwQyAxMTc0IDExQUQ7CitDOUFCO0M5QUI7MTEwQyAxMTc0IDExQUU7QzlBQjsxMTBDIDExNzQgMTFBRTsKK0M5QUM7QzlBQzsxMTBDIDExNzQgMTFBRjtDOUFDOzExMEMgMTE3NCAxMUFGOworQzlBRDtDOUFEOzExMEMgMTE3NCAxMUIwO0M5QUQ7MTEwQyAxMTc0IDExQjA7CitDOUFFO0M5QUU7MTEwQyAxMTc0IDExQjE7QzlBRTsxMTBDIDExNzQgMTFCMTsKK0M5QUY7QzlBRjsxMTBDIDExNzQgMTFCMjtDOUFGOzExMEMgMTE3NCAxMUIyOworQzlCMDtDOUIwOzExMEMgMTE3NCAxMUIzO0M5QjA7MTEwQyAxMTc0IDExQjM7CitDOUIxO0M5QjE7MTEwQyAxMTc0IDExQjQ7QzlCMTsxMTBDIDExNzQgMTFCNDsKK0M5QjI7QzlCMjsxMTBDIDExNzQgMTFCNTtDOUIyOzExMEMgMTE3NCAxMUI1OworQzlCMztDOUIzOzExMEMgMTE3NCAxMUI2O0M5QjM7MTEwQyAxMTc0IDExQjY7CitDOUI0O0M5QjQ7MTEwQyAxMTc0IDExQjc7QzlCNDsxMTBDIDExNzQgMTFCNzsKK0M5QjU7QzlCNTsxMTBDIDExNzQgMTFCODtDOUI1OzExMEMgMTE3NCAxMUI4OworQzlCNjtDOUI2OzExMEMgMTE3NCAxMUI5O0M5QjY7MTEwQyAxMTc0IDExQjk7CitDOUI3O0M5Qjc7MTEwQyAxMTc0IDExQkE7QzlCNzsxMTBDIDExNzQgMTFCQTsKK0M5Qjg7QzlCODsxMTBDIDExNzQgMTFCQjtDOUI4OzExMEMgMTE3NCAxMUJCOworQzlCOTtDOUI5OzExMEMgMTE3NCAxMUJDO0M5Qjk7MTEwQyAxMTc0IDExQkM7CitDOUJBO0M5QkE7MTEwQyAxMTc0IDExQkQ7QzlCQTsxMTBDIDExNzQgMTFCRDsKK0M5QkI7QzlCQjsxMTBDIDExNzQgMTFCRTtDOUJCOzExMEMgMTE3NCAxMUJFOworQzlCQztDOUJDOzExMEMgMTE3NCAxMUJGO0M5QkM7MTEwQyAxMTc0IDExQkY7CitDOUJEO0M5QkQ7MTEwQyAxMTc0IDExQzA7QzlCRDsxMTBDIDExNzQgMTFDMDsKK0M5QkU7QzlCRTsxMTBDIDExNzQgMTFDMTtDOUJFOzExMEMgMTE3NCAxMUMxOworQzlCRjtDOUJGOzExMEMgMTE3NCAxMUMyO0M5QkY7MTEwQyAxMTc0IDExQzI7CitDOUMwO0M5QzA7MTEwQyAxMTc1O0M5QzA7MTEwQyAxMTc1OworQzlDMTtDOUMxOzExMEMgMTE3NSAxMUE4O0M5QzE7MTEwQyAxMTc1IDExQTg7CitDOUMyO0M5QzI7MTEwQyAxMTc1IDExQTk7QzlDMjsxMTBDIDExNzUgMTFBOTsKK0M5QzM7QzlDMzsxMTBDIDExNzUgMTFBQTtDOUMzOzExMEMgMTE3NSAxMUFBOworQzlDNDtDOUM0OzExMEMgMTE3NSAxMUFCO0M5QzQ7MTEwQyAxMTc1IDExQUI7CitDOUM1O0M5QzU7MTEwQyAxMTc1IDExQUM7QzlDNTsxMTBDIDExNzUgMTFBQzsKK0M5QzY7QzlDNjsxMTBDIDExNzUgMTFBRDtDOUM2OzExMEMgMTE3NSAxMUFEOworQzlDNztDOUM3OzExMEMgMTE3NSAxMUFFO0M5Qzc7MTEwQyAxMTc1IDExQUU7CitDOUM4O0M5Qzg7MTEwQyAxMTc1IDExQUY7QzlDODsxMTBDIDExNzUgMTFBRjsKK0M5Qzk7QzlDOTsxMTBDIDExNzUgMTFCMDtDOUM5OzExMEMgMTE3NSAxMUIwOworQzlDQTtDOUNBOzExMEMgMTE3NSAxMUIxO0M5Q0E7MTEwQyAxMTc1IDExQjE7CitDOUNCO0M5Q0I7MTEwQyAxMTc1IDExQjI7QzlDQjsxMTBDIDExNzUgMTFCMjsKK0M5Q0M7QzlDQzsxMTBDIDExNzUgMTFCMztDOUNDOzExMEMgMTE3NSAxMUIzOworQzlDRDtDOUNEOzExMEMgMTE3NSAxMUI0O0M5Q0Q7MTEwQyAxMTc1IDExQjQ7CitDOUNFO0M5Q0U7MTEwQyAxMTc1IDExQjU7QzlDRTsxMTBDIDExNzUgMTFCNTsKK0M5Q0Y7QzlDRjsxMTBDIDExNzUgMTFCNjtDOUNGOzExMEMgMTE3NSAxMUI2OworQzlEMDtDOUQwOzExMEMgMTE3NSAxMUI3O0M5RDA7MTEwQyAxMTc1IDExQjc7CitDOUQxO0M5RDE7MTEwQyAxMTc1IDExQjg7QzlEMTsxMTBDIDExNzUgMTFCODsKK0M5RDI7QzlEMjsxMTBDIDExNzUgMTFCOTtDOUQyOzExMEMgMTE3NSAxMUI5OworQzlEMztDOUQzOzExMEMgMTE3NSAxMUJBO0M5RDM7MTEwQyAxMTc1IDExQkE7CitDOUQ0O0M5RDQ7MTEwQyAxMTc1IDExQkI7QzlENDsxMTBDIDExNzUgMTFCQjsKK0M5RDU7QzlENTsxMTBDIDExNzUgMTFCQztDOUQ1OzExMEMgMTE3NSAxMUJDOworQzlENjtDOUQ2OzExMEMgMTE3NSAxMUJEO0M5RDY7MTEwQyAxMTc1IDExQkQ7CitDOUQ3O0M5RDc7MTEwQyAxMTc1IDExQkU7QzlENzsxMTBDIDExNzUgMTFCRTsKK0M5RDg7QzlEODsxMTBDIDExNzUgMTFCRjtDOUQ4OzExMEMgMTE3NSAxMUJGOworQzlEOTtDOUQ5OzExMEMgMTE3NSAxMUMwO0M5RDk7MTEwQyAxMTc1IDExQzA7CitDOURBO0M5REE7MTEwQyAxMTc1IDExQzE7QzlEQTsxMTBDIDExNzUgMTFDMTsKK0M5REI7QzlEQjsxMTBDIDExNzUgMTFDMjtDOURCOzExMEMgMTE3NSAxMUMyOworQzlEQztDOURDOzExMEQgMTE2MTtDOURDOzExMEQgMTE2MTsKK0M5REQ7QzlERDsxMTBEIDExNjEgMTFBODtDOUREOzExMEQgMTE2MSAxMUE4OworQzlERTtDOURFOzExMEQgMTE2MSAxMUE5O0M5REU7MTEwRCAxMTYxIDExQTk7CitDOURGO0M5REY7MTEwRCAxMTYxIDExQUE7QzlERjsxMTBEIDExNjEgMTFBQTsKK0M5RTA7QzlFMDsxMTBEIDExNjEgMTFBQjtDOUUwOzExMEQgMTE2MSAxMUFCOworQzlFMTtDOUUxOzExMEQgMTE2MSAxMUFDO0M5RTE7MTEwRCAxMTYxIDExQUM7CitDOUUyO0M5RTI7MTEwRCAxMTYxIDExQUQ7QzlFMjsxMTBEIDExNjEgMTFBRDsKK0M5RTM7QzlFMzsxMTBEIDExNjEgMTFBRTtDOUUzOzExMEQgMTE2MSAxMUFFOworQzlFNDtDOUU0OzExMEQgMTE2MSAxMUFGO0M5RTQ7MTEwRCAxMTYxIDExQUY7CitDOUU1O0M5RTU7MTEwRCAxMTYxIDExQjA7QzlFNTsxMTBEIDExNjEgMTFCMDsKK0M5RTY7QzlFNjsxMTBEIDExNjEgMTFCMTtDOUU2OzExMEQgMTE2MSAxMUIxOworQzlFNztDOUU3OzExMEQgMTE2MSAxMUIyO0M5RTc7MTEwRCAxMTYxIDExQjI7CitDOUU4O0M5RTg7MTEwRCAxMTYxIDExQjM7QzlFODsxMTBEIDExNjEgMTFCMzsKK0M5RTk7QzlFOTsxMTBEIDExNjEgMTFCNDtDOUU5OzExMEQgMTE2MSAxMUI0OworQzlFQTtDOUVBOzExMEQgMTE2MSAxMUI1O0M5RUE7MTEwRCAxMTYxIDExQjU7CitDOUVCO0M5RUI7MTEwRCAxMTYxIDExQjY7QzlFQjsxMTBEIDExNjEgMTFCNjsKK0M5RUM7QzlFQzsxMTBEIDExNjEgMTFCNztDOUVDOzExMEQgMTE2MSAxMUI3OworQzlFRDtDOUVEOzExMEQgMTE2MSAxMUI4O0M5RUQ7MTEwRCAxMTYxIDExQjg7CitDOUVFO0M5RUU7MTEwRCAxMTYxIDExQjk7QzlFRTsxMTBEIDExNjEgMTFCOTsKK0M5RUY7QzlFRjsxMTBEIDExNjEgMTFCQTtDOUVGOzExMEQgMTE2MSAxMUJBOworQzlGMDtDOUYwOzExMEQgMTE2MSAxMUJCO0M5RjA7MTEwRCAxMTYxIDExQkI7CitDOUYxO0M5RjE7MTEwRCAxMTYxIDExQkM7QzlGMTsxMTBEIDExNjEgMTFCQzsKK0M5RjI7QzlGMjsxMTBEIDExNjEgMTFCRDtDOUYyOzExMEQgMTE2MSAxMUJEOworQzlGMztDOUYzOzExMEQgMTE2MSAxMUJFO0M5RjM7MTEwRCAxMTYxIDExQkU7CitDOUY0O0M5RjQ7MTEwRCAxMTYxIDExQkY7QzlGNDsxMTBEIDExNjEgMTFCRjsKK0M5RjU7QzlGNTsxMTBEIDExNjEgMTFDMDtDOUY1OzExMEQgMTE2MSAxMUMwOworQzlGNjtDOUY2OzExMEQgMTE2MSAxMUMxO0M5RjY7MTEwRCAxMTYxIDExQzE7CitDOUY3O0M5Rjc7MTEwRCAxMTYxIDExQzI7QzlGNzsxMTBEIDExNjEgMTFDMjsKK0M5Rjg7QzlGODsxMTBEIDExNjI7QzlGODsxMTBEIDExNjI7CitDOUY5O0M5Rjk7MTEwRCAxMTYyIDExQTg7QzlGOTsxMTBEIDExNjIgMTFBODsKK0M5RkE7QzlGQTsxMTBEIDExNjIgMTFBOTtDOUZBOzExMEQgMTE2MiAxMUE5OworQzlGQjtDOUZCOzExMEQgMTE2MiAxMUFBO0M5RkI7MTEwRCAxMTYyIDExQUE7CitDOUZDO0M5RkM7MTEwRCAxMTYyIDExQUI7QzlGQzsxMTBEIDExNjIgMTFBQjsKK0M5RkQ7QzlGRDsxMTBEIDExNjIgMTFBQztDOUZEOzExMEQgMTE2MiAxMUFDOworQzlGRTtDOUZFOzExMEQgMTE2MiAxMUFEO0M5RkU7MTEwRCAxMTYyIDExQUQ7CitDOUZGO0M5RkY7MTEwRCAxMTYyIDExQUU7QzlGRjsxMTBEIDExNjIgMTFBRTsKK0NBMDA7Q0EwMDsxMTBEIDExNjIgMTFBRjtDQTAwOzExMEQgMTE2MiAxMUFGOworQ0EwMTtDQTAxOzExMEQgMTE2MiAxMUIwO0NBMDE7MTEwRCAxMTYyIDExQjA7CitDQTAyO0NBMDI7MTEwRCAxMTYyIDExQjE7Q0EwMjsxMTBEIDExNjIgMTFCMTsKK0NBMDM7Q0EwMzsxMTBEIDExNjIgMTFCMjtDQTAzOzExMEQgMTE2MiAxMUIyOworQ0EwNDtDQTA0OzExMEQgMTE2MiAxMUIzO0NBMDQ7MTEwRCAxMTYyIDExQjM7CitDQTA1O0NBMDU7MTEwRCAxMTYyIDExQjQ7Q0EwNTsxMTBEIDExNjIgMTFCNDsKK0NBMDY7Q0EwNjsxMTBEIDExNjIgMTFCNTtDQTA2OzExMEQgMTE2MiAxMUI1OworQ0EwNztDQTA3OzExMEQgMTE2MiAxMUI2O0NBMDc7MTEwRCAxMTYyIDExQjY7CitDQTA4O0NBMDg7MTEwRCAxMTYyIDExQjc7Q0EwODsxMTBEIDExNjIgMTFCNzsKK0NBMDk7Q0EwOTsxMTBEIDExNjIgMTFCODtDQTA5OzExMEQgMTE2MiAxMUI4OworQ0EwQTtDQTBBOzExMEQgMTE2MiAxMUI5O0NBMEE7MTEwRCAxMTYyIDExQjk7CitDQTBCO0NBMEI7MTEwRCAxMTYyIDExQkE7Q0EwQjsxMTBEIDExNjIgMTFCQTsKK0NBMEM7Q0EwQzsxMTBEIDExNjIgMTFCQjtDQTBDOzExMEQgMTE2MiAxMUJCOworQ0EwRDtDQTBEOzExMEQgMTE2MiAxMUJDO0NBMEQ7MTEwRCAxMTYyIDExQkM7CitDQTBFO0NBMEU7MTEwRCAxMTYyIDExQkQ7Q0EwRTsxMTBEIDExNjIgMTFCRDsKK0NBMEY7Q0EwRjsxMTBEIDExNjIgMTFCRTtDQTBGOzExMEQgMTE2MiAxMUJFOworQ0ExMDtDQTEwOzExMEQgMTE2MiAxMUJGO0NBMTA7MTEwRCAxMTYyIDExQkY7CitDQTExO0NBMTE7MTEwRCAxMTYyIDExQzA7Q0ExMTsxMTBEIDExNjIgMTFDMDsKK0NBMTI7Q0ExMjsxMTBEIDExNjIgMTFDMTtDQTEyOzExMEQgMTE2MiAxMUMxOworQ0ExMztDQTEzOzExMEQgMTE2MiAxMUMyO0NBMTM7MTEwRCAxMTYyIDExQzI7CitDQTE0O0NBMTQ7MTEwRCAxMTYzO0NBMTQ7MTEwRCAxMTYzOworQ0ExNTtDQTE1OzExMEQgMTE2MyAxMUE4O0NBMTU7MTEwRCAxMTYzIDExQTg7CitDQTE2O0NBMTY7MTEwRCAxMTYzIDExQTk7Q0ExNjsxMTBEIDExNjMgMTFBOTsKK0NBMTc7Q0ExNzsxMTBEIDExNjMgMTFBQTtDQTE3OzExMEQgMTE2MyAxMUFBOworQ0ExODtDQTE4OzExMEQgMTE2MyAxMUFCO0NBMTg7MTEwRCAxMTYzIDExQUI7CitDQTE5O0NBMTk7MTEwRCAxMTYzIDExQUM7Q0ExOTsxMTBEIDExNjMgMTFBQzsKK0NBMUE7Q0ExQTsxMTBEIDExNjMgMTFBRDtDQTFBOzExMEQgMTE2MyAxMUFEOworQ0ExQjtDQTFCOzExMEQgMTE2MyAxMUFFO0NBMUI7MTEwRCAxMTYzIDExQUU7CitDQTFDO0NBMUM7MTEwRCAxMTYzIDExQUY7Q0ExQzsxMTBEIDExNjMgMTFBRjsKK0NBMUQ7Q0ExRDsxMTBEIDExNjMgMTFCMDtDQTFEOzExMEQgMTE2MyAxMUIwOworQ0ExRTtDQTFFOzExMEQgMTE2MyAxMUIxO0NBMUU7MTEwRCAxMTYzIDExQjE7CitDQTFGO0NBMUY7MTEwRCAxMTYzIDExQjI7Q0ExRjsxMTBEIDExNjMgMTFCMjsKK0NBMjA7Q0EyMDsxMTBEIDExNjMgMTFCMztDQTIwOzExMEQgMTE2MyAxMUIzOworQ0EyMTtDQTIxOzExMEQgMTE2MyAxMUI0O0NBMjE7MTEwRCAxMTYzIDExQjQ7CitDQTIyO0NBMjI7MTEwRCAxMTYzIDExQjU7Q0EyMjsxMTBEIDExNjMgMTFCNTsKK0NBMjM7Q0EyMzsxMTBEIDExNjMgMTFCNjtDQTIzOzExMEQgMTE2MyAxMUI2OworQ0EyNDtDQTI0OzExMEQgMTE2MyAxMUI3O0NBMjQ7MTEwRCAxMTYzIDExQjc7CitDQTI1O0NBMjU7MTEwRCAxMTYzIDExQjg7Q0EyNTsxMTBEIDExNjMgMTFCODsKK0NBMjY7Q0EyNjsxMTBEIDExNjMgMTFCOTtDQTI2OzExMEQgMTE2MyAxMUI5OworQ0EyNztDQTI3OzExMEQgMTE2MyAxMUJBO0NBMjc7MTEwRCAxMTYzIDExQkE7CitDQTI4O0NBMjg7MTEwRCAxMTYzIDExQkI7Q0EyODsxMTBEIDExNjMgMTFCQjsKK0NBMjk7Q0EyOTsxMTBEIDExNjMgMTFCQztDQTI5OzExMEQgMTE2MyAxMUJDOworQ0EyQTtDQTJBOzExMEQgMTE2MyAxMUJEO0NBMkE7MTEwRCAxMTYzIDExQkQ7CitDQTJCO0NBMkI7MTEwRCAxMTYzIDExQkU7Q0EyQjsxMTBEIDExNjMgMTFCRTsKK0NBMkM7Q0EyQzsxMTBEIDExNjMgMTFCRjtDQTJDOzExMEQgMTE2MyAxMUJGOworQ0EyRDtDQTJEOzExMEQgMTE2MyAxMUMwO0NBMkQ7MTEwRCAxMTYzIDExQzA7CitDQTJFO0NBMkU7MTEwRCAxMTYzIDExQzE7Q0EyRTsxMTBEIDExNjMgMTFDMTsKK0NBMkY7Q0EyRjsxMTBEIDExNjMgMTFDMjtDQTJGOzExMEQgMTE2MyAxMUMyOworQ0EzMDtDQTMwOzExMEQgMTE2NDtDQTMwOzExMEQgMTE2NDsKK0NBMzE7Q0EzMTsxMTBEIDExNjQgMTFBODtDQTMxOzExMEQgMTE2NCAxMUE4OworQ0EzMjtDQTMyOzExMEQgMTE2NCAxMUE5O0NBMzI7MTEwRCAxMTY0IDExQTk7CitDQTMzO0NBMzM7MTEwRCAxMTY0IDExQUE7Q0EzMzsxMTBEIDExNjQgMTFBQTsKK0NBMzQ7Q0EzNDsxMTBEIDExNjQgMTFBQjtDQTM0OzExMEQgMTE2NCAxMUFCOworQ0EzNTtDQTM1OzExMEQgMTE2NCAxMUFDO0NBMzU7MTEwRCAxMTY0IDExQUM7CitDQTM2O0NBMzY7MTEwRCAxMTY0IDExQUQ7Q0EzNjsxMTBEIDExNjQgMTFBRDsKK0NBMzc7Q0EzNzsxMTBEIDExNjQgMTFBRTtDQTM3OzExMEQgMTE2NCAxMUFFOworQ0EzODtDQTM4OzExMEQgMTE2NCAxMUFGO0NBMzg7MTEwRCAxMTY0IDExQUY7CitDQTM5O0NBMzk7MTEwRCAxMTY0IDExQjA7Q0EzOTsxMTBEIDExNjQgMTFCMDsKK0NBM0E7Q0EzQTsxMTBEIDExNjQgMTFCMTtDQTNBOzExMEQgMTE2NCAxMUIxOworQ0EzQjtDQTNCOzExMEQgMTE2NCAxMUIyO0NBM0I7MTEwRCAxMTY0IDExQjI7CitDQTNDO0NBM0M7MTEwRCAxMTY0IDExQjM7Q0EzQzsxMTBEIDExNjQgMTFCMzsKK0NBM0Q7Q0EzRDsxMTBEIDExNjQgMTFCNDtDQTNEOzExMEQgMTE2NCAxMUI0OworQ0EzRTtDQTNFOzExMEQgMTE2NCAxMUI1O0NBM0U7MTEwRCAxMTY0IDExQjU7CitDQTNGO0NBM0Y7MTEwRCAxMTY0IDExQjY7Q0EzRjsxMTBEIDExNjQgMTFCNjsKK0NBNDA7Q0E0MDsxMTBEIDExNjQgMTFCNztDQTQwOzExMEQgMTE2NCAxMUI3OworQ0E0MTtDQTQxOzExMEQgMTE2NCAxMUI4O0NBNDE7MTEwRCAxMTY0IDExQjg7CitDQTQyO0NBNDI7MTEwRCAxMTY0IDExQjk7Q0E0MjsxMTBEIDExNjQgMTFCOTsKK0NBNDM7Q0E0MzsxMTBEIDExNjQgMTFCQTtDQTQzOzExMEQgMTE2NCAxMUJBOworQ0E0NDtDQTQ0OzExMEQgMTE2NCAxMUJCO0NBNDQ7MTEwRCAxMTY0IDExQkI7CitDQTQ1O0NBNDU7MTEwRCAxMTY0IDExQkM7Q0E0NTsxMTBEIDExNjQgMTFCQzsKK0NBNDY7Q0E0NjsxMTBEIDExNjQgMTFCRDtDQTQ2OzExMEQgMTE2NCAxMUJEOworQ0E0NztDQTQ3OzExMEQgMTE2NCAxMUJFO0NBNDc7MTEwRCAxMTY0IDExQkU7CitDQTQ4O0NBNDg7MTEwRCAxMTY0IDExQkY7Q0E0ODsxMTBEIDExNjQgMTFCRjsKK0NBNDk7Q0E0OTsxMTBEIDExNjQgMTFDMDtDQTQ5OzExMEQgMTE2NCAxMUMwOworQ0E0QTtDQTRBOzExMEQgMTE2NCAxMUMxO0NBNEE7MTEwRCAxMTY0IDExQzE7CitDQTRCO0NBNEI7MTEwRCAxMTY0IDExQzI7Q0E0QjsxMTBEIDExNjQgMTFDMjsKK0NBNEM7Q0E0QzsxMTBEIDExNjU7Q0E0QzsxMTBEIDExNjU7CitDQTREO0NBNEQ7MTEwRCAxMTY1IDExQTg7Q0E0RDsxMTBEIDExNjUgMTFBODsKK0NBNEU7Q0E0RTsxMTBEIDExNjUgMTFBOTtDQTRFOzExMEQgMTE2NSAxMUE5OworQ0E0RjtDQTRGOzExMEQgMTE2NSAxMUFBO0NBNEY7MTEwRCAxMTY1IDExQUE7CitDQTUwO0NBNTA7MTEwRCAxMTY1IDExQUI7Q0E1MDsxMTBEIDExNjUgMTFBQjsKK0NBNTE7Q0E1MTsxMTBEIDExNjUgMTFBQztDQTUxOzExMEQgMTE2NSAxMUFDOworQ0E1MjtDQTUyOzExMEQgMTE2NSAxMUFEO0NBNTI7MTEwRCAxMTY1IDExQUQ7CitDQTUzO0NBNTM7MTEwRCAxMTY1IDExQUU7Q0E1MzsxMTBEIDExNjUgMTFBRTsKK0NBNTQ7Q0E1NDsxMTBEIDExNjUgMTFBRjtDQTU0OzExMEQgMTE2NSAxMUFGOworQ0E1NTtDQTU1OzExMEQgMTE2NSAxMUIwO0NBNTU7MTEwRCAxMTY1IDExQjA7CitDQTU2O0NBNTY7MTEwRCAxMTY1IDExQjE7Q0E1NjsxMTBEIDExNjUgMTFCMTsKK0NBNTc7Q0E1NzsxMTBEIDExNjUgMTFCMjtDQTU3OzExMEQgMTE2NSAxMUIyOworQ0E1ODtDQTU4OzExMEQgMTE2NSAxMUIzO0NBNTg7MTEwRCAxMTY1IDExQjM7CitDQTU5O0NBNTk7MTEwRCAxMTY1IDExQjQ7Q0E1OTsxMTBEIDExNjUgMTFCNDsKK0NBNUE7Q0E1QTsxMTBEIDExNjUgMTFCNTtDQTVBOzExMEQgMTE2NSAxMUI1OworQ0E1QjtDQTVCOzExMEQgMTE2NSAxMUI2O0NBNUI7MTEwRCAxMTY1IDExQjY7CitDQTVDO0NBNUM7MTEwRCAxMTY1IDExQjc7Q0E1QzsxMTBEIDExNjUgMTFCNzsKK0NBNUQ7Q0E1RDsxMTBEIDExNjUgMTFCODtDQTVEOzExMEQgMTE2NSAxMUI4OworQ0E1RTtDQTVFOzExMEQgMTE2NSAxMUI5O0NBNUU7MTEwRCAxMTY1IDExQjk7CitDQTVGO0NBNUY7MTEwRCAxMTY1IDExQkE7Q0E1RjsxMTBEIDExNjUgMTFCQTsKK0NBNjA7Q0E2MDsxMTBEIDExNjUgMTFCQjtDQTYwOzExMEQgMTE2NSAxMUJCOworQ0E2MTtDQTYxOzExMEQgMTE2NSAxMUJDO0NBNjE7MTEwRCAxMTY1IDExQkM7CitDQTYyO0NBNjI7MTEwRCAxMTY1IDExQkQ7Q0E2MjsxMTBEIDExNjUgMTFCRDsKK0NBNjM7Q0E2MzsxMTBEIDExNjUgMTFCRTtDQTYzOzExMEQgMTE2NSAxMUJFOworQ0E2NDtDQTY0OzExMEQgMTE2NSAxMUJGO0NBNjQ7MTEwRCAxMTY1IDExQkY7CitDQTY1O0NBNjU7MTEwRCAxMTY1IDExQzA7Q0E2NTsxMTBEIDExNjUgMTFDMDsKK0NBNjY7Q0E2NjsxMTBEIDExNjUgMTFDMTtDQTY2OzExMEQgMTE2NSAxMUMxOworQ0E2NztDQTY3OzExMEQgMTE2NSAxMUMyO0NBNjc7MTEwRCAxMTY1IDExQzI7CitDQTY4O0NBNjg7MTEwRCAxMTY2O0NBNjg7MTEwRCAxMTY2OworQ0E2OTtDQTY5OzExMEQgMTE2NiAxMUE4O0NBNjk7MTEwRCAxMTY2IDExQTg7CitDQTZBO0NBNkE7MTEwRCAxMTY2IDExQTk7Q0E2QTsxMTBEIDExNjYgMTFBOTsKK0NBNkI7Q0E2QjsxMTBEIDExNjYgMTFBQTtDQTZCOzExMEQgMTE2NiAxMUFBOworQ0E2QztDQTZDOzExMEQgMTE2NiAxMUFCO0NBNkM7MTEwRCAxMTY2IDExQUI7CitDQTZEO0NBNkQ7MTEwRCAxMTY2IDExQUM7Q0E2RDsxMTBEIDExNjYgMTFBQzsKK0NBNkU7Q0E2RTsxMTBEIDExNjYgMTFBRDtDQTZFOzExMEQgMTE2NiAxMUFEOworQ0E2RjtDQTZGOzExMEQgMTE2NiAxMUFFO0NBNkY7MTEwRCAxMTY2IDExQUU7CitDQTcwO0NBNzA7MTEwRCAxMTY2IDExQUY7Q0E3MDsxMTBEIDExNjYgMTFBRjsKK0NBNzE7Q0E3MTsxMTBEIDExNjYgMTFCMDtDQTcxOzExMEQgMTE2NiAxMUIwOworQ0E3MjtDQTcyOzExMEQgMTE2NiAxMUIxO0NBNzI7MTEwRCAxMTY2IDExQjE7CitDQTczO0NBNzM7MTEwRCAxMTY2IDExQjI7Q0E3MzsxMTBEIDExNjYgMTFCMjsKK0NBNzQ7Q0E3NDsxMTBEIDExNjYgMTFCMztDQTc0OzExMEQgMTE2NiAxMUIzOworQ0E3NTtDQTc1OzExMEQgMTE2NiAxMUI0O0NBNzU7MTEwRCAxMTY2IDExQjQ7CitDQTc2O0NBNzY7MTEwRCAxMTY2IDExQjU7Q0E3NjsxMTBEIDExNjYgMTFCNTsKK0NBNzc7Q0E3NzsxMTBEIDExNjYgMTFCNjtDQTc3OzExMEQgMTE2NiAxMUI2OworQ0E3ODtDQTc4OzExMEQgMTE2NiAxMUI3O0NBNzg7MTEwRCAxMTY2IDExQjc7CitDQTc5O0NBNzk7MTEwRCAxMTY2IDExQjg7Q0E3OTsxMTBEIDExNjYgMTFCODsKK0NBN0E7Q0E3QTsxMTBEIDExNjYgMTFCOTtDQTdBOzExMEQgMTE2NiAxMUI5OworQ0E3QjtDQTdCOzExMEQgMTE2NiAxMUJBO0NBN0I7MTEwRCAxMTY2IDExQkE7CitDQTdDO0NBN0M7MTEwRCAxMTY2IDExQkI7Q0E3QzsxMTBEIDExNjYgMTFCQjsKK0NBN0Q7Q0E3RDsxMTBEIDExNjYgMTFCQztDQTdEOzExMEQgMTE2NiAxMUJDOworQ0E3RTtDQTdFOzExMEQgMTE2NiAxMUJEO0NBN0U7MTEwRCAxMTY2IDExQkQ7CitDQTdGO0NBN0Y7MTEwRCAxMTY2IDExQkU7Q0E3RjsxMTBEIDExNjYgMTFCRTsKK0NBODA7Q0E4MDsxMTBEIDExNjYgMTFCRjtDQTgwOzExMEQgMTE2NiAxMUJGOworQ0E4MTtDQTgxOzExMEQgMTE2NiAxMUMwO0NBODE7MTEwRCAxMTY2IDExQzA7CitDQTgyO0NBODI7MTEwRCAxMTY2IDExQzE7Q0E4MjsxMTBEIDExNjYgMTFDMTsKK0NBODM7Q0E4MzsxMTBEIDExNjYgMTFDMjtDQTgzOzExMEQgMTE2NiAxMUMyOworQ0E4NDtDQTg0OzExMEQgMTE2NztDQTg0OzExMEQgMTE2NzsKK0NBODU7Q0E4NTsxMTBEIDExNjcgMTFBODtDQTg1OzExMEQgMTE2NyAxMUE4OworQ0E4NjtDQTg2OzExMEQgMTE2NyAxMUE5O0NBODY7MTEwRCAxMTY3IDExQTk7CitDQTg3O0NBODc7MTEwRCAxMTY3IDExQUE7Q0E4NzsxMTBEIDExNjcgMTFBQTsKK0NBODg7Q0E4ODsxMTBEIDExNjcgMTFBQjtDQTg4OzExMEQgMTE2NyAxMUFCOworQ0E4OTtDQTg5OzExMEQgMTE2NyAxMUFDO0NBODk7MTEwRCAxMTY3IDExQUM7CitDQThBO0NBOEE7MTEwRCAxMTY3IDExQUQ7Q0E4QTsxMTBEIDExNjcgMTFBRDsKK0NBOEI7Q0E4QjsxMTBEIDExNjcgMTFBRTtDQThCOzExMEQgMTE2NyAxMUFFOworQ0E4QztDQThDOzExMEQgMTE2NyAxMUFGO0NBOEM7MTEwRCAxMTY3IDExQUY7CitDQThEO0NBOEQ7MTEwRCAxMTY3IDExQjA7Q0E4RDsxMTBEIDExNjcgMTFCMDsKK0NBOEU7Q0E4RTsxMTBEIDExNjcgMTFCMTtDQThFOzExMEQgMTE2NyAxMUIxOworQ0E4RjtDQThGOzExMEQgMTE2NyAxMUIyO0NBOEY7MTEwRCAxMTY3IDExQjI7CitDQTkwO0NBOTA7MTEwRCAxMTY3IDExQjM7Q0E5MDsxMTBEIDExNjcgMTFCMzsKK0NBOTE7Q0E5MTsxMTBEIDExNjcgMTFCNDtDQTkxOzExMEQgMTE2NyAxMUI0OworQ0E5MjtDQTkyOzExMEQgMTE2NyAxMUI1O0NBOTI7MTEwRCAxMTY3IDExQjU7CitDQTkzO0NBOTM7MTEwRCAxMTY3IDExQjY7Q0E5MzsxMTBEIDExNjcgMTFCNjsKK0NBOTQ7Q0E5NDsxMTBEIDExNjcgMTFCNztDQTk0OzExMEQgMTE2NyAxMUI3OworQ0E5NTtDQTk1OzExMEQgMTE2NyAxMUI4O0NBOTU7MTEwRCAxMTY3IDExQjg7CitDQTk2O0NBOTY7MTEwRCAxMTY3IDExQjk7Q0E5NjsxMTBEIDExNjcgMTFCOTsKK0NBOTc7Q0E5NzsxMTBEIDExNjcgMTFCQTtDQTk3OzExMEQgMTE2NyAxMUJBOworQ0E5ODtDQTk4OzExMEQgMTE2NyAxMUJCO0NBOTg7MTEwRCAxMTY3IDExQkI7CitDQTk5O0NBOTk7MTEwRCAxMTY3IDExQkM7Q0E5OTsxMTBEIDExNjcgMTFCQzsKK0NBOUE7Q0E5QTsxMTBEIDExNjcgMTFCRDtDQTlBOzExMEQgMTE2NyAxMUJEOworQ0E5QjtDQTlCOzExMEQgMTE2NyAxMUJFO0NBOUI7MTEwRCAxMTY3IDExQkU7CitDQTlDO0NBOUM7MTEwRCAxMTY3IDExQkY7Q0E5QzsxMTBEIDExNjcgMTFCRjsKK0NBOUQ7Q0E5RDsxMTBEIDExNjcgMTFDMDtDQTlEOzExMEQgMTE2NyAxMUMwOworQ0E5RTtDQTlFOzExMEQgMTE2NyAxMUMxO0NBOUU7MTEwRCAxMTY3IDExQzE7CitDQTlGO0NBOUY7MTEwRCAxMTY3IDExQzI7Q0E5RjsxMTBEIDExNjcgMTFDMjsKK0NBQTA7Q0FBMDsxMTBEIDExNjg7Q0FBMDsxMTBEIDExNjg7CitDQUExO0NBQTE7MTEwRCAxMTY4IDExQTg7Q0FBMTsxMTBEIDExNjggMTFBODsKK0NBQTI7Q0FBMjsxMTBEIDExNjggMTFBOTtDQUEyOzExMEQgMTE2OCAxMUE5OworQ0FBMztDQUEzOzExMEQgMTE2OCAxMUFBO0NBQTM7MTEwRCAxMTY4IDExQUE7CitDQUE0O0NBQTQ7MTEwRCAxMTY4IDExQUI7Q0FBNDsxMTBEIDExNjggMTFBQjsKK0NBQTU7Q0FBNTsxMTBEIDExNjggMTFBQztDQUE1OzExMEQgMTE2OCAxMUFDOworQ0FBNjtDQUE2OzExMEQgMTE2OCAxMUFEO0NBQTY7MTEwRCAxMTY4IDExQUQ7CitDQUE3O0NBQTc7MTEwRCAxMTY4IDExQUU7Q0FBNzsxMTBEIDExNjggMTFBRTsKK0NBQTg7Q0FBODsxMTBEIDExNjggMTFBRjtDQUE4OzExMEQgMTE2OCAxMUFGOworQ0FBOTtDQUE5OzExMEQgMTE2OCAxMUIwO0NBQTk7MTEwRCAxMTY4IDExQjA7CitDQUFBO0NBQUE7MTEwRCAxMTY4IDExQjE7Q0FBQTsxMTBEIDExNjggMTFCMTsKK0NBQUI7Q0FBQjsxMTBEIDExNjggMTFCMjtDQUFCOzExMEQgMTE2OCAxMUIyOworQ0FBQztDQUFDOzExMEQgMTE2OCAxMUIzO0NBQUM7MTEwRCAxMTY4IDExQjM7CitDQUFEO0NBQUQ7MTEwRCAxMTY4IDExQjQ7Q0FBRDsxMTBEIDExNjggMTFCNDsKK0NBQUU7Q0FBRTsxMTBEIDExNjggMTFCNTtDQUFFOzExMEQgMTE2OCAxMUI1OworQ0FBRjtDQUFGOzExMEQgMTE2OCAxMUI2O0NBQUY7MTEwRCAxMTY4IDExQjY7CitDQUIwO0NBQjA7MTEwRCAxMTY4IDExQjc7Q0FCMDsxMTBEIDExNjggMTFCNzsKK0NBQjE7Q0FCMTsxMTBEIDExNjggMTFCODtDQUIxOzExMEQgMTE2OCAxMUI4OworQ0FCMjtDQUIyOzExMEQgMTE2OCAxMUI5O0NBQjI7MTEwRCAxMTY4IDExQjk7CitDQUIzO0NBQjM7MTEwRCAxMTY4IDExQkE7Q0FCMzsxMTBEIDExNjggMTFCQTsKK0NBQjQ7Q0FCNDsxMTBEIDExNjggMTFCQjtDQUI0OzExMEQgMTE2OCAxMUJCOworQ0FCNTtDQUI1OzExMEQgMTE2OCAxMUJDO0NBQjU7MTEwRCAxMTY4IDExQkM7CitDQUI2O0NBQjY7MTEwRCAxMTY4IDExQkQ7Q0FCNjsxMTBEIDExNjggMTFCRDsKK0NBQjc7Q0FCNzsxMTBEIDExNjggMTFCRTtDQUI3OzExMEQgMTE2OCAxMUJFOworQ0FCODtDQUI4OzExMEQgMTE2OCAxMUJGO0NBQjg7MTEwRCAxMTY4IDExQkY7CitDQUI5O0NBQjk7MTEwRCAxMTY4IDExQzA7Q0FCOTsxMTBEIDExNjggMTFDMDsKK0NBQkE7Q0FCQTsxMTBEIDExNjggMTFDMTtDQUJBOzExMEQgMTE2OCAxMUMxOworQ0FCQjtDQUJCOzExMEQgMTE2OCAxMUMyO0NBQkI7MTEwRCAxMTY4IDExQzI7CitDQUJDO0NBQkM7MTEwRCAxMTY5O0NBQkM7MTEwRCAxMTY5OworQ0FCRDtDQUJEOzExMEQgMTE2OSAxMUE4O0NBQkQ7MTEwRCAxMTY5IDExQTg7CitDQUJFO0NBQkU7MTEwRCAxMTY5IDExQTk7Q0FCRTsxMTBEIDExNjkgMTFBOTsKK0NBQkY7Q0FCRjsxMTBEIDExNjkgMTFBQTtDQUJGOzExMEQgMTE2OSAxMUFBOworQ0FDMDtDQUMwOzExMEQgMTE2OSAxMUFCO0NBQzA7MTEwRCAxMTY5IDExQUI7CitDQUMxO0NBQzE7MTEwRCAxMTY5IDExQUM7Q0FDMTsxMTBEIDExNjkgMTFBQzsKK0NBQzI7Q0FDMjsxMTBEIDExNjkgMTFBRDtDQUMyOzExMEQgMTE2OSAxMUFEOworQ0FDMztDQUMzOzExMEQgMTE2OSAxMUFFO0NBQzM7MTEwRCAxMTY5IDExQUU7CitDQUM0O0NBQzQ7MTEwRCAxMTY5IDExQUY7Q0FDNDsxMTBEIDExNjkgMTFBRjsKK0NBQzU7Q0FDNTsxMTBEIDExNjkgMTFCMDtDQUM1OzExMEQgMTE2OSAxMUIwOworQ0FDNjtDQUM2OzExMEQgMTE2OSAxMUIxO0NBQzY7MTEwRCAxMTY5IDExQjE7CitDQUM3O0NBQzc7MTEwRCAxMTY5IDExQjI7Q0FDNzsxMTBEIDExNjkgMTFCMjsKK0NBQzg7Q0FDODsxMTBEIDExNjkgMTFCMztDQUM4OzExMEQgMTE2OSAxMUIzOworQ0FDOTtDQUM5OzExMEQgMTE2OSAxMUI0O0NBQzk7MTEwRCAxMTY5IDExQjQ7CitDQUNBO0NBQ0E7MTEwRCAxMTY5IDExQjU7Q0FDQTsxMTBEIDExNjkgMTFCNTsKK0NBQ0I7Q0FDQjsxMTBEIDExNjkgMTFCNjtDQUNCOzExMEQgMTE2OSAxMUI2OworQ0FDQztDQUNDOzExMEQgMTE2OSAxMUI3O0NBQ0M7MTEwRCAxMTY5IDExQjc7CitDQUNEO0NBQ0Q7MTEwRCAxMTY5IDExQjg7Q0FDRDsxMTBEIDExNjkgMTFCODsKK0NBQ0U7Q0FDRTsxMTBEIDExNjkgMTFCOTtDQUNFOzExMEQgMTE2OSAxMUI5OworQ0FDRjtDQUNGOzExMEQgMTE2OSAxMUJBO0NBQ0Y7MTEwRCAxMTY5IDExQkE7CitDQUQwO0NBRDA7MTEwRCAxMTY5IDExQkI7Q0FEMDsxMTBEIDExNjkgMTFCQjsKK0NBRDE7Q0FEMTsxMTBEIDExNjkgMTFCQztDQUQxOzExMEQgMTE2OSAxMUJDOworQ0FEMjtDQUQyOzExMEQgMTE2OSAxMUJEO0NBRDI7MTEwRCAxMTY5IDExQkQ7CitDQUQzO0NBRDM7MTEwRCAxMTY5IDExQkU7Q0FEMzsxMTBEIDExNjkgMTFCRTsKK0NBRDQ7Q0FENDsxMTBEIDExNjkgMTFCRjtDQUQ0OzExMEQgMTE2OSAxMUJGOworQ0FENTtDQUQ1OzExMEQgMTE2OSAxMUMwO0NBRDU7MTEwRCAxMTY5IDExQzA7CitDQUQ2O0NBRDY7MTEwRCAxMTY5IDExQzE7Q0FENjsxMTBEIDExNjkgMTFDMTsKK0NBRDc7Q0FENzsxMTBEIDExNjkgMTFDMjtDQUQ3OzExMEQgMTE2OSAxMUMyOworQ0FEODtDQUQ4OzExMEQgMTE2QTtDQUQ4OzExMEQgMTE2QTsKK0NBRDk7Q0FEOTsxMTBEIDExNkEgMTFBODtDQUQ5OzExMEQgMTE2QSAxMUE4OworQ0FEQTtDQURBOzExMEQgMTE2QSAxMUE5O0NBREE7MTEwRCAxMTZBIDExQTk7CitDQURCO0NBREI7MTEwRCAxMTZBIDExQUE7Q0FEQjsxMTBEIDExNkEgMTFBQTsKK0NBREM7Q0FEQzsxMTBEIDExNkEgMTFBQjtDQURDOzExMEQgMTE2QSAxMUFCOworQ0FERDtDQUREOzExMEQgMTE2QSAxMUFDO0NBREQ7MTEwRCAxMTZBIDExQUM7CitDQURFO0NBREU7MTEwRCAxMTZBIDExQUQ7Q0FERTsxMTBEIDExNkEgMTFBRDsKK0NBREY7Q0FERjsxMTBEIDExNkEgMTFBRTtDQURGOzExMEQgMTE2QSAxMUFFOworQ0FFMDtDQUUwOzExMEQgMTE2QSAxMUFGO0NBRTA7MTEwRCAxMTZBIDExQUY7CitDQUUxO0NBRTE7MTEwRCAxMTZBIDExQjA7Q0FFMTsxMTBEIDExNkEgMTFCMDsKK0NBRTI7Q0FFMjsxMTBEIDExNkEgMTFCMTtDQUUyOzExMEQgMTE2QSAxMUIxOworQ0FFMztDQUUzOzExMEQgMTE2QSAxMUIyO0NBRTM7MTEwRCAxMTZBIDExQjI7CitDQUU0O0NBRTQ7MTEwRCAxMTZBIDExQjM7Q0FFNDsxMTBEIDExNkEgMTFCMzsKK0NBRTU7Q0FFNTsxMTBEIDExNkEgMTFCNDtDQUU1OzExMEQgMTE2QSAxMUI0OworQ0FFNjtDQUU2OzExMEQgMTE2QSAxMUI1O0NBRTY7MTEwRCAxMTZBIDExQjU7CitDQUU3O0NBRTc7MTEwRCAxMTZBIDExQjY7Q0FFNzsxMTBEIDExNkEgMTFCNjsKK0NBRTg7Q0FFODsxMTBEIDExNkEgMTFCNztDQUU4OzExMEQgMTE2QSAxMUI3OworQ0FFOTtDQUU5OzExMEQgMTE2QSAxMUI4O0NBRTk7MTEwRCAxMTZBIDExQjg7CitDQUVBO0NBRUE7MTEwRCAxMTZBIDExQjk7Q0FFQTsxMTBEIDExNkEgMTFCOTsKK0NBRUI7Q0FFQjsxMTBEIDExNkEgMTFCQTtDQUVCOzExMEQgMTE2QSAxMUJBOworQ0FFQztDQUVDOzExMEQgMTE2QSAxMUJCO0NBRUM7MTEwRCAxMTZBIDExQkI7CitDQUVEO0NBRUQ7MTEwRCAxMTZBIDExQkM7Q0FFRDsxMTBEIDExNkEgMTFCQzsKK0NBRUU7Q0FFRTsxMTBEIDExNkEgMTFCRDtDQUVFOzExMEQgMTE2QSAxMUJEOworQ0FFRjtDQUVGOzExMEQgMTE2QSAxMUJFO0NBRUY7MTEwRCAxMTZBIDExQkU7CitDQUYwO0NBRjA7MTEwRCAxMTZBIDExQkY7Q0FGMDsxMTBEIDExNkEgMTFCRjsKK0NBRjE7Q0FGMTsxMTBEIDExNkEgMTFDMDtDQUYxOzExMEQgMTE2QSAxMUMwOworQ0FGMjtDQUYyOzExMEQgMTE2QSAxMUMxO0NBRjI7MTEwRCAxMTZBIDExQzE7CitDQUYzO0NBRjM7MTEwRCAxMTZBIDExQzI7Q0FGMzsxMTBEIDExNkEgMTFDMjsKK0NBRjQ7Q0FGNDsxMTBEIDExNkI7Q0FGNDsxMTBEIDExNkI7CitDQUY1O0NBRjU7MTEwRCAxMTZCIDExQTg7Q0FGNTsxMTBEIDExNkIgMTFBODsKK0NBRjY7Q0FGNjsxMTBEIDExNkIgMTFBOTtDQUY2OzExMEQgMTE2QiAxMUE5OworQ0FGNztDQUY3OzExMEQgMTE2QiAxMUFBO0NBRjc7MTEwRCAxMTZCIDExQUE7CitDQUY4O0NBRjg7MTEwRCAxMTZCIDExQUI7Q0FGODsxMTBEIDExNkIgMTFBQjsKK0NBRjk7Q0FGOTsxMTBEIDExNkIgMTFBQztDQUY5OzExMEQgMTE2QiAxMUFDOworQ0FGQTtDQUZBOzExMEQgMTE2QiAxMUFEO0NBRkE7MTEwRCAxMTZCIDExQUQ7CitDQUZCO0NBRkI7MTEwRCAxMTZCIDExQUU7Q0FGQjsxMTBEIDExNkIgMTFBRTsKK0NBRkM7Q0FGQzsxMTBEIDExNkIgMTFBRjtDQUZDOzExMEQgMTE2QiAxMUFGOworQ0FGRDtDQUZEOzExMEQgMTE2QiAxMUIwO0NBRkQ7MTEwRCAxMTZCIDExQjA7CitDQUZFO0NBRkU7MTEwRCAxMTZCIDExQjE7Q0FGRTsxMTBEIDExNkIgMTFCMTsKK0NBRkY7Q0FGRjsxMTBEIDExNkIgMTFCMjtDQUZGOzExMEQgMTE2QiAxMUIyOworQ0IwMDtDQjAwOzExMEQgMTE2QiAxMUIzO0NCMDA7MTEwRCAxMTZCIDExQjM7CitDQjAxO0NCMDE7MTEwRCAxMTZCIDExQjQ7Q0IwMTsxMTBEIDExNkIgMTFCNDsKK0NCMDI7Q0IwMjsxMTBEIDExNkIgMTFCNTtDQjAyOzExMEQgMTE2QiAxMUI1OworQ0IwMztDQjAzOzExMEQgMTE2QiAxMUI2O0NCMDM7MTEwRCAxMTZCIDExQjY7CitDQjA0O0NCMDQ7MTEwRCAxMTZCIDExQjc7Q0IwNDsxMTBEIDExNkIgMTFCNzsKK0NCMDU7Q0IwNTsxMTBEIDExNkIgMTFCODtDQjA1OzExMEQgMTE2QiAxMUI4OworQ0IwNjtDQjA2OzExMEQgMTE2QiAxMUI5O0NCMDY7MTEwRCAxMTZCIDExQjk7CitDQjA3O0NCMDc7MTEwRCAxMTZCIDExQkE7Q0IwNzsxMTBEIDExNkIgMTFCQTsKK0NCMDg7Q0IwODsxMTBEIDExNkIgMTFCQjtDQjA4OzExMEQgMTE2QiAxMUJCOworQ0IwOTtDQjA5OzExMEQgMTE2QiAxMUJDO0NCMDk7MTEwRCAxMTZCIDExQkM7CitDQjBBO0NCMEE7MTEwRCAxMTZCIDExQkQ7Q0IwQTsxMTBEIDExNkIgMTFCRDsKK0NCMEI7Q0IwQjsxMTBEIDExNkIgMTFCRTtDQjBCOzExMEQgMTE2QiAxMUJFOworQ0IwQztDQjBDOzExMEQgMTE2QiAxMUJGO0NCMEM7MTEwRCAxMTZCIDExQkY7CitDQjBEO0NCMEQ7MTEwRCAxMTZCIDExQzA7Q0IwRDsxMTBEIDExNkIgMTFDMDsKK0NCMEU7Q0IwRTsxMTBEIDExNkIgMTFDMTtDQjBFOzExMEQgMTE2QiAxMUMxOworQ0IwRjtDQjBGOzExMEQgMTE2QiAxMUMyO0NCMEY7MTEwRCAxMTZCIDExQzI7CitDQjEwO0NCMTA7MTEwRCAxMTZDO0NCMTA7MTEwRCAxMTZDOworQ0IxMTtDQjExOzExMEQgMTE2QyAxMUE4O0NCMTE7MTEwRCAxMTZDIDExQTg7CitDQjEyO0NCMTI7MTEwRCAxMTZDIDExQTk7Q0IxMjsxMTBEIDExNkMgMTFBOTsKK0NCMTM7Q0IxMzsxMTBEIDExNkMgMTFBQTtDQjEzOzExMEQgMTE2QyAxMUFBOworQ0IxNDtDQjE0OzExMEQgMTE2QyAxMUFCO0NCMTQ7MTEwRCAxMTZDIDExQUI7CitDQjE1O0NCMTU7MTEwRCAxMTZDIDExQUM7Q0IxNTsxMTBEIDExNkMgMTFBQzsKK0NCMTY7Q0IxNjsxMTBEIDExNkMgMTFBRDtDQjE2OzExMEQgMTE2QyAxMUFEOworQ0IxNztDQjE3OzExMEQgMTE2QyAxMUFFO0NCMTc7MTEwRCAxMTZDIDExQUU7CitDQjE4O0NCMTg7MTEwRCAxMTZDIDExQUY7Q0IxODsxMTBEIDExNkMgMTFBRjsKK0NCMTk7Q0IxOTsxMTBEIDExNkMgMTFCMDtDQjE5OzExMEQgMTE2QyAxMUIwOworQ0IxQTtDQjFBOzExMEQgMTE2QyAxMUIxO0NCMUE7MTEwRCAxMTZDIDExQjE7CitDQjFCO0NCMUI7MTEwRCAxMTZDIDExQjI7Q0IxQjsxMTBEIDExNkMgMTFCMjsKK0NCMUM7Q0IxQzsxMTBEIDExNkMgMTFCMztDQjFDOzExMEQgMTE2QyAxMUIzOworQ0IxRDtDQjFEOzExMEQgMTE2QyAxMUI0O0NCMUQ7MTEwRCAxMTZDIDExQjQ7CitDQjFFO0NCMUU7MTEwRCAxMTZDIDExQjU7Q0IxRTsxMTBEIDExNkMgMTFCNTsKK0NCMUY7Q0IxRjsxMTBEIDExNkMgMTFCNjtDQjFGOzExMEQgMTE2QyAxMUI2OworQ0IyMDtDQjIwOzExMEQgMTE2QyAxMUI3O0NCMjA7MTEwRCAxMTZDIDExQjc7CitDQjIxO0NCMjE7MTEwRCAxMTZDIDExQjg7Q0IyMTsxMTBEIDExNkMgMTFCODsKK0NCMjI7Q0IyMjsxMTBEIDExNkMgMTFCOTtDQjIyOzExMEQgMTE2QyAxMUI5OworQ0IyMztDQjIzOzExMEQgMTE2QyAxMUJBO0NCMjM7MTEwRCAxMTZDIDExQkE7CitDQjI0O0NCMjQ7MTEwRCAxMTZDIDExQkI7Q0IyNDsxMTBEIDExNkMgMTFCQjsKK0NCMjU7Q0IyNTsxMTBEIDExNkMgMTFCQztDQjI1OzExMEQgMTE2QyAxMUJDOworQ0IyNjtDQjI2OzExMEQgMTE2QyAxMUJEO0NCMjY7MTEwRCAxMTZDIDExQkQ7CitDQjI3O0NCMjc7MTEwRCAxMTZDIDExQkU7Q0IyNzsxMTBEIDExNkMgMTFCRTsKK0NCMjg7Q0IyODsxMTBEIDExNkMgMTFCRjtDQjI4OzExMEQgMTE2QyAxMUJGOworQ0IyOTtDQjI5OzExMEQgMTE2QyAxMUMwO0NCMjk7MTEwRCAxMTZDIDExQzA7CitDQjJBO0NCMkE7MTEwRCAxMTZDIDExQzE7Q0IyQTsxMTBEIDExNkMgMTFDMTsKK0NCMkI7Q0IyQjsxMTBEIDExNkMgMTFDMjtDQjJCOzExMEQgMTE2QyAxMUMyOworQ0IyQztDQjJDOzExMEQgMTE2RDtDQjJDOzExMEQgMTE2RDsKK0NCMkQ7Q0IyRDsxMTBEIDExNkQgMTFBODtDQjJEOzExMEQgMTE2RCAxMUE4OworQ0IyRTtDQjJFOzExMEQgMTE2RCAxMUE5O0NCMkU7MTEwRCAxMTZEIDExQTk7CitDQjJGO0NCMkY7MTEwRCAxMTZEIDExQUE7Q0IyRjsxMTBEIDExNkQgMTFBQTsKK0NCMzA7Q0IzMDsxMTBEIDExNkQgMTFBQjtDQjMwOzExMEQgMTE2RCAxMUFCOworQ0IzMTtDQjMxOzExMEQgMTE2RCAxMUFDO0NCMzE7MTEwRCAxMTZEIDExQUM7CitDQjMyO0NCMzI7MTEwRCAxMTZEIDExQUQ7Q0IzMjsxMTBEIDExNkQgMTFBRDsKK0NCMzM7Q0IzMzsxMTBEIDExNkQgMTFBRTtDQjMzOzExMEQgMTE2RCAxMUFFOworQ0IzNDtDQjM0OzExMEQgMTE2RCAxMUFGO0NCMzQ7MTEwRCAxMTZEIDExQUY7CitDQjM1O0NCMzU7MTEwRCAxMTZEIDExQjA7Q0IzNTsxMTBEIDExNkQgMTFCMDsKK0NCMzY7Q0IzNjsxMTBEIDExNkQgMTFCMTtDQjM2OzExMEQgMTE2RCAxMUIxOworQ0IzNztDQjM3OzExMEQgMTE2RCAxMUIyO0NCMzc7MTEwRCAxMTZEIDExQjI7CitDQjM4O0NCMzg7MTEwRCAxMTZEIDExQjM7Q0IzODsxMTBEIDExNkQgMTFCMzsKK0NCMzk7Q0IzOTsxMTBEIDExNkQgMTFCNDtDQjM5OzExMEQgMTE2RCAxMUI0OworQ0IzQTtDQjNBOzExMEQgMTE2RCAxMUI1O0NCM0E7MTEwRCAxMTZEIDExQjU7CitDQjNCO0NCM0I7MTEwRCAxMTZEIDExQjY7Q0IzQjsxMTBEIDExNkQgMTFCNjsKK0NCM0M7Q0IzQzsxMTBEIDExNkQgMTFCNztDQjNDOzExMEQgMTE2RCAxMUI3OworQ0IzRDtDQjNEOzExMEQgMTE2RCAxMUI4O0NCM0Q7MTEwRCAxMTZEIDExQjg7CitDQjNFO0NCM0U7MTEwRCAxMTZEIDExQjk7Q0IzRTsxMTBEIDExNkQgMTFCOTsKK0NCM0Y7Q0IzRjsxMTBEIDExNkQgMTFCQTtDQjNGOzExMEQgMTE2RCAxMUJBOworQ0I0MDtDQjQwOzExMEQgMTE2RCAxMUJCO0NCNDA7MTEwRCAxMTZEIDExQkI7CitDQjQxO0NCNDE7MTEwRCAxMTZEIDExQkM7Q0I0MTsxMTBEIDExNkQgMTFCQzsKK0NCNDI7Q0I0MjsxMTBEIDExNkQgMTFCRDtDQjQyOzExMEQgMTE2RCAxMUJEOworQ0I0MztDQjQzOzExMEQgMTE2RCAxMUJFO0NCNDM7MTEwRCAxMTZEIDExQkU7CitDQjQ0O0NCNDQ7MTEwRCAxMTZEIDExQkY7Q0I0NDsxMTBEIDExNkQgMTFCRjsKK0NCNDU7Q0I0NTsxMTBEIDExNkQgMTFDMDtDQjQ1OzExMEQgMTE2RCAxMUMwOworQ0I0NjtDQjQ2OzExMEQgMTE2RCAxMUMxO0NCNDY7MTEwRCAxMTZEIDExQzE7CitDQjQ3O0NCNDc7MTEwRCAxMTZEIDExQzI7Q0I0NzsxMTBEIDExNkQgMTFDMjsKK0NCNDg7Q0I0ODsxMTBEIDExNkU7Q0I0ODsxMTBEIDExNkU7CitDQjQ5O0NCNDk7MTEwRCAxMTZFIDExQTg7Q0I0OTsxMTBEIDExNkUgMTFBODsKK0NCNEE7Q0I0QTsxMTBEIDExNkUgMTFBOTtDQjRBOzExMEQgMTE2RSAxMUE5OworQ0I0QjtDQjRCOzExMEQgMTE2RSAxMUFBO0NCNEI7MTEwRCAxMTZFIDExQUE7CitDQjRDO0NCNEM7MTEwRCAxMTZFIDExQUI7Q0I0QzsxMTBEIDExNkUgMTFBQjsKK0NCNEQ7Q0I0RDsxMTBEIDExNkUgMTFBQztDQjREOzExMEQgMTE2RSAxMUFDOworQ0I0RTtDQjRFOzExMEQgMTE2RSAxMUFEO0NCNEU7MTEwRCAxMTZFIDExQUQ7CitDQjRGO0NCNEY7MTEwRCAxMTZFIDExQUU7Q0I0RjsxMTBEIDExNkUgMTFBRTsKK0NCNTA7Q0I1MDsxMTBEIDExNkUgMTFBRjtDQjUwOzExMEQgMTE2RSAxMUFGOworQ0I1MTtDQjUxOzExMEQgMTE2RSAxMUIwO0NCNTE7MTEwRCAxMTZFIDExQjA7CitDQjUyO0NCNTI7MTEwRCAxMTZFIDExQjE7Q0I1MjsxMTBEIDExNkUgMTFCMTsKK0NCNTM7Q0I1MzsxMTBEIDExNkUgMTFCMjtDQjUzOzExMEQgMTE2RSAxMUIyOworQ0I1NDtDQjU0OzExMEQgMTE2RSAxMUIzO0NCNTQ7MTEwRCAxMTZFIDExQjM7CitDQjU1O0NCNTU7MTEwRCAxMTZFIDExQjQ7Q0I1NTsxMTBEIDExNkUgMTFCNDsKK0NCNTY7Q0I1NjsxMTBEIDExNkUgMTFCNTtDQjU2OzExMEQgMTE2RSAxMUI1OworQ0I1NztDQjU3OzExMEQgMTE2RSAxMUI2O0NCNTc7MTEwRCAxMTZFIDExQjY7CitDQjU4O0NCNTg7MTEwRCAxMTZFIDExQjc7Q0I1ODsxMTBEIDExNkUgMTFCNzsKK0NCNTk7Q0I1OTsxMTBEIDExNkUgMTFCODtDQjU5OzExMEQgMTE2RSAxMUI4OworQ0I1QTtDQjVBOzExMEQgMTE2RSAxMUI5O0NCNUE7MTEwRCAxMTZFIDExQjk7CitDQjVCO0NCNUI7MTEwRCAxMTZFIDExQkE7Q0I1QjsxMTBEIDExNkUgMTFCQTsKK0NCNUM7Q0I1QzsxMTBEIDExNkUgMTFCQjtDQjVDOzExMEQgMTE2RSAxMUJCOworQ0I1RDtDQjVEOzExMEQgMTE2RSAxMUJDO0NCNUQ7MTEwRCAxMTZFIDExQkM7CitDQjVFO0NCNUU7MTEwRCAxMTZFIDExQkQ7Q0I1RTsxMTBEIDExNkUgMTFCRDsKK0NCNUY7Q0I1RjsxMTBEIDExNkUgMTFCRTtDQjVGOzExMEQgMTE2RSAxMUJFOworQ0I2MDtDQjYwOzExMEQgMTE2RSAxMUJGO0NCNjA7MTEwRCAxMTZFIDExQkY7CitDQjYxO0NCNjE7MTEwRCAxMTZFIDExQzA7Q0I2MTsxMTBEIDExNkUgMTFDMDsKK0NCNjI7Q0I2MjsxMTBEIDExNkUgMTFDMTtDQjYyOzExMEQgMTE2RSAxMUMxOworQ0I2MztDQjYzOzExMEQgMTE2RSAxMUMyO0NCNjM7MTEwRCAxMTZFIDExQzI7CitDQjY0O0NCNjQ7MTEwRCAxMTZGO0NCNjQ7MTEwRCAxMTZGOworQ0I2NTtDQjY1OzExMEQgMTE2RiAxMUE4O0NCNjU7MTEwRCAxMTZGIDExQTg7CitDQjY2O0NCNjY7MTEwRCAxMTZGIDExQTk7Q0I2NjsxMTBEIDExNkYgMTFBOTsKK0NCNjc7Q0I2NzsxMTBEIDExNkYgMTFBQTtDQjY3OzExMEQgMTE2RiAxMUFBOworQ0I2ODtDQjY4OzExMEQgMTE2RiAxMUFCO0NCNjg7MTEwRCAxMTZGIDExQUI7CitDQjY5O0NCNjk7MTEwRCAxMTZGIDExQUM7Q0I2OTsxMTBEIDExNkYgMTFBQzsKK0NCNkE7Q0I2QTsxMTBEIDExNkYgMTFBRDtDQjZBOzExMEQgMTE2RiAxMUFEOworQ0I2QjtDQjZCOzExMEQgMTE2RiAxMUFFO0NCNkI7MTEwRCAxMTZGIDExQUU7CitDQjZDO0NCNkM7MTEwRCAxMTZGIDExQUY7Q0I2QzsxMTBEIDExNkYgMTFBRjsKK0NCNkQ7Q0I2RDsxMTBEIDExNkYgMTFCMDtDQjZEOzExMEQgMTE2RiAxMUIwOworQ0I2RTtDQjZFOzExMEQgMTE2RiAxMUIxO0NCNkU7MTEwRCAxMTZGIDExQjE7CitDQjZGO0NCNkY7MTEwRCAxMTZGIDExQjI7Q0I2RjsxMTBEIDExNkYgMTFCMjsKK0NCNzA7Q0I3MDsxMTBEIDExNkYgMTFCMztDQjcwOzExMEQgMTE2RiAxMUIzOworQ0I3MTtDQjcxOzExMEQgMTE2RiAxMUI0O0NCNzE7MTEwRCAxMTZGIDExQjQ7CitDQjcyO0NCNzI7MTEwRCAxMTZGIDExQjU7Q0I3MjsxMTBEIDExNkYgMTFCNTsKK0NCNzM7Q0I3MzsxMTBEIDExNkYgMTFCNjtDQjczOzExMEQgMTE2RiAxMUI2OworQ0I3NDtDQjc0OzExMEQgMTE2RiAxMUI3O0NCNzQ7MTEwRCAxMTZGIDExQjc7CitDQjc1O0NCNzU7MTEwRCAxMTZGIDExQjg7Q0I3NTsxMTBEIDExNkYgMTFCODsKK0NCNzY7Q0I3NjsxMTBEIDExNkYgMTFCOTtDQjc2OzExMEQgMTE2RiAxMUI5OworQ0I3NztDQjc3OzExMEQgMTE2RiAxMUJBO0NCNzc7MTEwRCAxMTZGIDExQkE7CitDQjc4O0NCNzg7MTEwRCAxMTZGIDExQkI7Q0I3ODsxMTBEIDExNkYgMTFCQjsKK0NCNzk7Q0I3OTsxMTBEIDExNkYgMTFCQztDQjc5OzExMEQgMTE2RiAxMUJDOworQ0I3QTtDQjdBOzExMEQgMTE2RiAxMUJEO0NCN0E7MTEwRCAxMTZGIDExQkQ7CitDQjdCO0NCN0I7MTEwRCAxMTZGIDExQkU7Q0I3QjsxMTBEIDExNkYgMTFCRTsKK0NCN0M7Q0I3QzsxMTBEIDExNkYgMTFCRjtDQjdDOzExMEQgMTE2RiAxMUJGOworQ0I3RDtDQjdEOzExMEQgMTE2RiAxMUMwO0NCN0Q7MTEwRCAxMTZGIDExQzA7CitDQjdFO0NCN0U7MTEwRCAxMTZGIDExQzE7Q0I3RTsxMTBEIDExNkYgMTFDMTsKK0NCN0Y7Q0I3RjsxMTBEIDExNkYgMTFDMjtDQjdGOzExMEQgMTE2RiAxMUMyOworQ0I4MDtDQjgwOzExMEQgMTE3MDtDQjgwOzExMEQgMTE3MDsKK0NCODE7Q0I4MTsxMTBEIDExNzAgMTFBODtDQjgxOzExMEQgMTE3MCAxMUE4OworQ0I4MjtDQjgyOzExMEQgMTE3MCAxMUE5O0NCODI7MTEwRCAxMTcwIDExQTk7CitDQjgzO0NCODM7MTEwRCAxMTcwIDExQUE7Q0I4MzsxMTBEIDExNzAgMTFBQTsKK0NCODQ7Q0I4NDsxMTBEIDExNzAgMTFBQjtDQjg0OzExMEQgMTE3MCAxMUFCOworQ0I4NTtDQjg1OzExMEQgMTE3MCAxMUFDO0NCODU7MTEwRCAxMTcwIDExQUM7CitDQjg2O0NCODY7MTEwRCAxMTcwIDExQUQ7Q0I4NjsxMTBEIDExNzAgMTFBRDsKK0NCODc7Q0I4NzsxMTBEIDExNzAgMTFBRTtDQjg3OzExMEQgMTE3MCAxMUFFOworQ0I4ODtDQjg4OzExMEQgMTE3MCAxMUFGO0NCODg7MTEwRCAxMTcwIDExQUY7CitDQjg5O0NCODk7MTEwRCAxMTcwIDExQjA7Q0I4OTsxMTBEIDExNzAgMTFCMDsKK0NCOEE7Q0I4QTsxMTBEIDExNzAgMTFCMTtDQjhBOzExMEQgMTE3MCAxMUIxOworQ0I4QjtDQjhCOzExMEQgMTE3MCAxMUIyO0NCOEI7MTEwRCAxMTcwIDExQjI7CitDQjhDO0NCOEM7MTEwRCAxMTcwIDExQjM7Q0I4QzsxMTBEIDExNzAgMTFCMzsKK0NCOEQ7Q0I4RDsxMTBEIDExNzAgMTFCNDtDQjhEOzExMEQgMTE3MCAxMUI0OworQ0I4RTtDQjhFOzExMEQgMTE3MCAxMUI1O0NCOEU7MTEwRCAxMTcwIDExQjU7CitDQjhGO0NCOEY7MTEwRCAxMTcwIDExQjY7Q0I4RjsxMTBEIDExNzAgMTFCNjsKK0NCOTA7Q0I5MDsxMTBEIDExNzAgMTFCNztDQjkwOzExMEQgMTE3MCAxMUI3OworQ0I5MTtDQjkxOzExMEQgMTE3MCAxMUI4O0NCOTE7MTEwRCAxMTcwIDExQjg7CitDQjkyO0NCOTI7MTEwRCAxMTcwIDExQjk7Q0I5MjsxMTBEIDExNzAgMTFCOTsKK0NCOTM7Q0I5MzsxMTBEIDExNzAgMTFCQTtDQjkzOzExMEQgMTE3MCAxMUJBOworQ0I5NDtDQjk0OzExMEQgMTE3MCAxMUJCO0NCOTQ7MTEwRCAxMTcwIDExQkI7CitDQjk1O0NCOTU7MTEwRCAxMTcwIDExQkM7Q0I5NTsxMTBEIDExNzAgMTFCQzsKK0NCOTY7Q0I5NjsxMTBEIDExNzAgMTFCRDtDQjk2OzExMEQgMTE3MCAxMUJEOworQ0I5NztDQjk3OzExMEQgMTE3MCAxMUJFO0NCOTc7MTEwRCAxMTcwIDExQkU7CitDQjk4O0NCOTg7MTEwRCAxMTcwIDExQkY7Q0I5ODsxMTBEIDExNzAgMTFCRjsKK0NCOTk7Q0I5OTsxMTBEIDExNzAgMTFDMDtDQjk5OzExMEQgMTE3MCAxMUMwOworQ0I5QTtDQjlBOzExMEQgMTE3MCAxMUMxO0NCOUE7MTEwRCAxMTcwIDExQzE7CitDQjlCO0NCOUI7MTEwRCAxMTcwIDExQzI7Q0I5QjsxMTBEIDExNzAgMTFDMjsKK0NCOUM7Q0I5QzsxMTBEIDExNzE7Q0I5QzsxMTBEIDExNzE7CitDQjlEO0NCOUQ7MTEwRCAxMTcxIDExQTg7Q0I5RDsxMTBEIDExNzEgMTFBODsKK0NCOUU7Q0I5RTsxMTBEIDExNzEgMTFBOTtDQjlFOzExMEQgMTE3MSAxMUE5OworQ0I5RjtDQjlGOzExMEQgMTE3MSAxMUFBO0NCOUY7MTEwRCAxMTcxIDExQUE7CitDQkEwO0NCQTA7MTEwRCAxMTcxIDExQUI7Q0JBMDsxMTBEIDExNzEgMTFBQjsKK0NCQTE7Q0JBMTsxMTBEIDExNzEgMTFBQztDQkExOzExMEQgMTE3MSAxMUFDOworQ0JBMjtDQkEyOzExMEQgMTE3MSAxMUFEO0NCQTI7MTEwRCAxMTcxIDExQUQ7CitDQkEzO0NCQTM7MTEwRCAxMTcxIDExQUU7Q0JBMzsxMTBEIDExNzEgMTFBRTsKK0NCQTQ7Q0JBNDsxMTBEIDExNzEgMTFBRjtDQkE0OzExMEQgMTE3MSAxMUFGOworQ0JBNTtDQkE1OzExMEQgMTE3MSAxMUIwO0NCQTU7MTEwRCAxMTcxIDExQjA7CitDQkE2O0NCQTY7MTEwRCAxMTcxIDExQjE7Q0JBNjsxMTBEIDExNzEgMTFCMTsKK0NCQTc7Q0JBNzsxMTBEIDExNzEgMTFCMjtDQkE3OzExMEQgMTE3MSAxMUIyOworQ0JBODtDQkE4OzExMEQgMTE3MSAxMUIzO0NCQTg7MTEwRCAxMTcxIDExQjM7CitDQkE5O0NCQTk7MTEwRCAxMTcxIDExQjQ7Q0JBOTsxMTBEIDExNzEgMTFCNDsKK0NCQUE7Q0JBQTsxMTBEIDExNzEgMTFCNTtDQkFBOzExMEQgMTE3MSAxMUI1OworQ0JBQjtDQkFCOzExMEQgMTE3MSAxMUI2O0NCQUI7MTEwRCAxMTcxIDExQjY7CitDQkFDO0NCQUM7MTEwRCAxMTcxIDExQjc7Q0JBQzsxMTBEIDExNzEgMTFCNzsKK0NCQUQ7Q0JBRDsxMTBEIDExNzEgMTFCODtDQkFEOzExMEQgMTE3MSAxMUI4OworQ0JBRTtDQkFFOzExMEQgMTE3MSAxMUI5O0NCQUU7MTEwRCAxMTcxIDExQjk7CitDQkFGO0NCQUY7MTEwRCAxMTcxIDExQkE7Q0JBRjsxMTBEIDExNzEgMTFCQTsKK0NCQjA7Q0JCMDsxMTBEIDExNzEgMTFCQjtDQkIwOzExMEQgMTE3MSAxMUJCOworQ0JCMTtDQkIxOzExMEQgMTE3MSAxMUJDO0NCQjE7MTEwRCAxMTcxIDExQkM7CitDQkIyO0NCQjI7MTEwRCAxMTcxIDExQkQ7Q0JCMjsxMTBEIDExNzEgMTFCRDsKK0NCQjM7Q0JCMzsxMTBEIDExNzEgMTFCRTtDQkIzOzExMEQgMTE3MSAxMUJFOworQ0JCNDtDQkI0OzExMEQgMTE3MSAxMUJGO0NCQjQ7MTEwRCAxMTcxIDExQkY7CitDQkI1O0NCQjU7MTEwRCAxMTcxIDExQzA7Q0JCNTsxMTBEIDExNzEgMTFDMDsKK0NCQjY7Q0JCNjsxMTBEIDExNzEgMTFDMTtDQkI2OzExMEQgMTE3MSAxMUMxOworQ0JCNztDQkI3OzExMEQgMTE3MSAxMUMyO0NCQjc7MTEwRCAxMTcxIDExQzI7CitDQkI4O0NCQjg7MTEwRCAxMTcyO0NCQjg7MTEwRCAxMTcyOworQ0JCOTtDQkI5OzExMEQgMTE3MiAxMUE4O0NCQjk7MTEwRCAxMTcyIDExQTg7CitDQkJBO0NCQkE7MTEwRCAxMTcyIDExQTk7Q0JCQTsxMTBEIDExNzIgMTFBOTsKK0NCQkI7Q0JCQjsxMTBEIDExNzIgMTFBQTtDQkJCOzExMEQgMTE3MiAxMUFBOworQ0JCQztDQkJDOzExMEQgMTE3MiAxMUFCO0NCQkM7MTEwRCAxMTcyIDExQUI7CitDQkJEO0NCQkQ7MTEwRCAxMTcyIDExQUM7Q0JCRDsxMTBEIDExNzIgMTFBQzsKK0NCQkU7Q0JCRTsxMTBEIDExNzIgMTFBRDtDQkJFOzExMEQgMTE3MiAxMUFEOworQ0JCRjtDQkJGOzExMEQgMTE3MiAxMUFFO0NCQkY7MTEwRCAxMTcyIDExQUU7CitDQkMwO0NCQzA7MTEwRCAxMTcyIDExQUY7Q0JDMDsxMTBEIDExNzIgMTFBRjsKK0NCQzE7Q0JDMTsxMTBEIDExNzIgMTFCMDtDQkMxOzExMEQgMTE3MiAxMUIwOworQ0JDMjtDQkMyOzExMEQgMTE3MiAxMUIxO0NCQzI7MTEwRCAxMTcyIDExQjE7CitDQkMzO0NCQzM7MTEwRCAxMTcyIDExQjI7Q0JDMzsxMTBEIDExNzIgMTFCMjsKK0NCQzQ7Q0JDNDsxMTBEIDExNzIgMTFCMztDQkM0OzExMEQgMTE3MiAxMUIzOworQ0JDNTtDQkM1OzExMEQgMTE3MiAxMUI0O0NCQzU7MTEwRCAxMTcyIDExQjQ7CitDQkM2O0NCQzY7MTEwRCAxMTcyIDExQjU7Q0JDNjsxMTBEIDExNzIgMTFCNTsKK0NCQzc7Q0JDNzsxMTBEIDExNzIgMTFCNjtDQkM3OzExMEQgMTE3MiAxMUI2OworQ0JDODtDQkM4OzExMEQgMTE3MiAxMUI3O0NCQzg7MTEwRCAxMTcyIDExQjc7CitDQkM5O0NCQzk7MTEwRCAxMTcyIDExQjg7Q0JDOTsxMTBEIDExNzIgMTFCODsKK0NCQ0E7Q0JDQTsxMTBEIDExNzIgMTFCOTtDQkNBOzExMEQgMTE3MiAxMUI5OworQ0JDQjtDQkNCOzExMEQgMTE3MiAxMUJBO0NCQ0I7MTEwRCAxMTcyIDExQkE7CitDQkNDO0NCQ0M7MTEwRCAxMTcyIDExQkI7Q0JDQzsxMTBEIDExNzIgMTFCQjsKK0NCQ0Q7Q0JDRDsxMTBEIDExNzIgMTFCQztDQkNEOzExMEQgMTE3MiAxMUJDOworQ0JDRTtDQkNFOzExMEQgMTE3MiAxMUJEO0NCQ0U7MTEwRCAxMTcyIDExQkQ7CitDQkNGO0NCQ0Y7MTEwRCAxMTcyIDExQkU7Q0JDRjsxMTBEIDExNzIgMTFCRTsKK0NCRDA7Q0JEMDsxMTBEIDExNzIgMTFCRjtDQkQwOzExMEQgMTE3MiAxMUJGOworQ0JEMTtDQkQxOzExMEQgMTE3MiAxMUMwO0NCRDE7MTEwRCAxMTcyIDExQzA7CitDQkQyO0NCRDI7MTEwRCAxMTcyIDExQzE7Q0JEMjsxMTBEIDExNzIgMTFDMTsKK0NCRDM7Q0JEMzsxMTBEIDExNzIgMTFDMjtDQkQzOzExMEQgMTE3MiAxMUMyOworQ0JENDtDQkQ0OzExMEQgMTE3MztDQkQ0OzExMEQgMTE3MzsKK0NCRDU7Q0JENTsxMTBEIDExNzMgMTFBODtDQkQ1OzExMEQgMTE3MyAxMUE4OworQ0JENjtDQkQ2OzExMEQgMTE3MyAxMUE5O0NCRDY7MTEwRCAxMTczIDExQTk7CitDQkQ3O0NCRDc7MTEwRCAxMTczIDExQUE7Q0JENzsxMTBEIDExNzMgMTFBQTsKK0NCRDg7Q0JEODsxMTBEIDExNzMgMTFBQjtDQkQ4OzExMEQgMTE3MyAxMUFCOworQ0JEOTtDQkQ5OzExMEQgMTE3MyAxMUFDO0NCRDk7MTEwRCAxMTczIDExQUM7CitDQkRBO0NCREE7MTEwRCAxMTczIDExQUQ7Q0JEQTsxMTBEIDExNzMgMTFBRDsKK0NCREI7Q0JEQjsxMTBEIDExNzMgMTFBRTtDQkRCOzExMEQgMTE3MyAxMUFFOworQ0JEQztDQkRDOzExMEQgMTE3MyAxMUFGO0NCREM7MTEwRCAxMTczIDExQUY7CitDQkREO0NCREQ7MTEwRCAxMTczIDExQjA7Q0JERDsxMTBEIDExNzMgMTFCMDsKK0NCREU7Q0JERTsxMTBEIDExNzMgMTFCMTtDQkRFOzExMEQgMTE3MyAxMUIxOworQ0JERjtDQkRGOzExMEQgMTE3MyAxMUIyO0NCREY7MTEwRCAxMTczIDExQjI7CitDQkUwO0NCRTA7MTEwRCAxMTczIDExQjM7Q0JFMDsxMTBEIDExNzMgMTFCMzsKK0NCRTE7Q0JFMTsxMTBEIDExNzMgMTFCNDtDQkUxOzExMEQgMTE3MyAxMUI0OworQ0JFMjtDQkUyOzExMEQgMTE3MyAxMUI1O0NCRTI7MTEwRCAxMTczIDExQjU7CitDQkUzO0NCRTM7MTEwRCAxMTczIDExQjY7Q0JFMzsxMTBEIDExNzMgMTFCNjsKK0NCRTQ7Q0JFNDsxMTBEIDExNzMgMTFCNztDQkU0OzExMEQgMTE3MyAxMUI3OworQ0JFNTtDQkU1OzExMEQgMTE3MyAxMUI4O0NCRTU7MTEwRCAxMTczIDExQjg7CitDQkU2O0NCRTY7MTEwRCAxMTczIDExQjk7Q0JFNjsxMTBEIDExNzMgMTFCOTsKK0NCRTc7Q0JFNzsxMTBEIDExNzMgMTFCQTtDQkU3OzExMEQgMTE3MyAxMUJBOworQ0JFODtDQkU4OzExMEQgMTE3MyAxMUJCO0NCRTg7MTEwRCAxMTczIDExQkI7CitDQkU5O0NCRTk7MTEwRCAxMTczIDExQkM7Q0JFOTsxMTBEIDExNzMgMTFCQzsKK0NCRUE7Q0JFQTsxMTBEIDExNzMgMTFCRDtDQkVBOzExMEQgMTE3MyAxMUJEOworQ0JFQjtDQkVCOzExMEQgMTE3MyAxMUJFO0NCRUI7MTEwRCAxMTczIDExQkU7CitDQkVDO0NCRUM7MTEwRCAxMTczIDExQkY7Q0JFQzsxMTBEIDExNzMgMTFCRjsKK0NCRUQ7Q0JFRDsxMTBEIDExNzMgMTFDMDtDQkVEOzExMEQgMTE3MyAxMUMwOworQ0JFRTtDQkVFOzExMEQgMTE3MyAxMUMxO0NCRUU7MTEwRCAxMTczIDExQzE7CitDQkVGO0NCRUY7MTEwRCAxMTczIDExQzI7Q0JFRjsxMTBEIDExNzMgMTFDMjsKK0NCRjA7Q0JGMDsxMTBEIDExNzQ7Q0JGMDsxMTBEIDExNzQ7CitDQkYxO0NCRjE7MTEwRCAxMTc0IDExQTg7Q0JGMTsxMTBEIDExNzQgMTFBODsKK0NCRjI7Q0JGMjsxMTBEIDExNzQgMTFBOTtDQkYyOzExMEQgMTE3NCAxMUE5OworQ0JGMztDQkYzOzExMEQgMTE3NCAxMUFBO0NCRjM7MTEwRCAxMTc0IDExQUE7CitDQkY0O0NCRjQ7MTEwRCAxMTc0IDExQUI7Q0JGNDsxMTBEIDExNzQgMTFBQjsKK0NCRjU7Q0JGNTsxMTBEIDExNzQgMTFBQztDQkY1OzExMEQgMTE3NCAxMUFDOworQ0JGNjtDQkY2OzExMEQgMTE3NCAxMUFEO0NCRjY7MTEwRCAxMTc0IDExQUQ7CitDQkY3O0NCRjc7MTEwRCAxMTc0IDExQUU7Q0JGNzsxMTBEIDExNzQgMTFBRTsKK0NCRjg7Q0JGODsxMTBEIDExNzQgMTFBRjtDQkY4OzExMEQgMTE3NCAxMUFGOworQ0JGOTtDQkY5OzExMEQgMTE3NCAxMUIwO0NCRjk7MTEwRCAxMTc0IDExQjA7CitDQkZBO0NCRkE7MTEwRCAxMTc0IDExQjE7Q0JGQTsxMTBEIDExNzQgMTFCMTsKK0NCRkI7Q0JGQjsxMTBEIDExNzQgMTFCMjtDQkZCOzExMEQgMTE3NCAxMUIyOworQ0JGQztDQkZDOzExMEQgMTE3NCAxMUIzO0NCRkM7MTEwRCAxMTc0IDExQjM7CitDQkZEO0NCRkQ7MTEwRCAxMTc0IDExQjQ7Q0JGRDsxMTBEIDExNzQgMTFCNDsKK0NCRkU7Q0JGRTsxMTBEIDExNzQgMTFCNTtDQkZFOzExMEQgMTE3NCAxMUI1OworQ0JGRjtDQkZGOzExMEQgMTE3NCAxMUI2O0NCRkY7MTEwRCAxMTc0IDExQjY7CitDQzAwO0NDMDA7MTEwRCAxMTc0IDExQjc7Q0MwMDsxMTBEIDExNzQgMTFCNzsKK0NDMDE7Q0MwMTsxMTBEIDExNzQgMTFCODtDQzAxOzExMEQgMTE3NCAxMUI4OworQ0MwMjtDQzAyOzExMEQgMTE3NCAxMUI5O0NDMDI7MTEwRCAxMTc0IDExQjk7CitDQzAzO0NDMDM7MTEwRCAxMTc0IDExQkE7Q0MwMzsxMTBEIDExNzQgMTFCQTsKK0NDMDQ7Q0MwNDsxMTBEIDExNzQgMTFCQjtDQzA0OzExMEQgMTE3NCAxMUJCOworQ0MwNTtDQzA1OzExMEQgMTE3NCAxMUJDO0NDMDU7MTEwRCAxMTc0IDExQkM7CitDQzA2O0NDMDY7MTEwRCAxMTc0IDExQkQ7Q0MwNjsxMTBEIDExNzQgMTFCRDsKK0NDMDc7Q0MwNzsxMTBEIDExNzQgMTFCRTtDQzA3OzExMEQgMTE3NCAxMUJFOworQ0MwODtDQzA4OzExMEQgMTE3NCAxMUJGO0NDMDg7MTEwRCAxMTc0IDExQkY7CitDQzA5O0NDMDk7MTEwRCAxMTc0IDExQzA7Q0MwOTsxMTBEIDExNzQgMTFDMDsKK0NDMEE7Q0MwQTsxMTBEIDExNzQgMTFDMTtDQzBBOzExMEQgMTE3NCAxMUMxOworQ0MwQjtDQzBCOzExMEQgMTE3NCAxMUMyO0NDMEI7MTEwRCAxMTc0IDExQzI7CitDQzBDO0NDMEM7MTEwRCAxMTc1O0NDMEM7MTEwRCAxMTc1OworQ0MwRDtDQzBEOzExMEQgMTE3NSAxMUE4O0NDMEQ7MTEwRCAxMTc1IDExQTg7CitDQzBFO0NDMEU7MTEwRCAxMTc1IDExQTk7Q0MwRTsxMTBEIDExNzUgMTFBOTsKK0NDMEY7Q0MwRjsxMTBEIDExNzUgMTFBQTtDQzBGOzExMEQgMTE3NSAxMUFBOworQ0MxMDtDQzEwOzExMEQgMTE3NSAxMUFCO0NDMTA7MTEwRCAxMTc1IDExQUI7CitDQzExO0NDMTE7MTEwRCAxMTc1IDExQUM7Q0MxMTsxMTBEIDExNzUgMTFBQzsKK0NDMTI7Q0MxMjsxMTBEIDExNzUgMTFBRDtDQzEyOzExMEQgMTE3NSAxMUFEOworQ0MxMztDQzEzOzExMEQgMTE3NSAxMUFFO0NDMTM7MTEwRCAxMTc1IDExQUU7CitDQzE0O0NDMTQ7MTEwRCAxMTc1IDExQUY7Q0MxNDsxMTBEIDExNzUgMTFBRjsKK0NDMTU7Q0MxNTsxMTBEIDExNzUgMTFCMDtDQzE1OzExMEQgMTE3NSAxMUIwOworQ0MxNjtDQzE2OzExMEQgMTE3NSAxMUIxO0NDMTY7MTEwRCAxMTc1IDExQjE7CitDQzE3O0NDMTc7MTEwRCAxMTc1IDExQjI7Q0MxNzsxMTBEIDExNzUgMTFCMjsKK0NDMTg7Q0MxODsxMTBEIDExNzUgMTFCMztDQzE4OzExMEQgMTE3NSAxMUIzOworQ0MxOTtDQzE5OzExMEQgMTE3NSAxMUI0O0NDMTk7MTEwRCAxMTc1IDExQjQ7CitDQzFBO0NDMUE7MTEwRCAxMTc1IDExQjU7Q0MxQTsxMTBEIDExNzUgMTFCNTsKK0NDMUI7Q0MxQjsxMTBEIDExNzUgMTFCNjtDQzFCOzExMEQgMTE3NSAxMUI2OworQ0MxQztDQzFDOzExMEQgMTE3NSAxMUI3O0NDMUM7MTEwRCAxMTc1IDExQjc7CitDQzFEO0NDMUQ7MTEwRCAxMTc1IDExQjg7Q0MxRDsxMTBEIDExNzUgMTFCODsKK0NDMUU7Q0MxRTsxMTBEIDExNzUgMTFCOTtDQzFFOzExMEQgMTE3NSAxMUI5OworQ0MxRjtDQzFGOzExMEQgMTE3NSAxMUJBO0NDMUY7MTEwRCAxMTc1IDExQkE7CitDQzIwO0NDMjA7MTEwRCAxMTc1IDExQkI7Q0MyMDsxMTBEIDExNzUgMTFCQjsKK0NDMjE7Q0MyMTsxMTBEIDExNzUgMTFCQztDQzIxOzExMEQgMTE3NSAxMUJDOworQ0MyMjtDQzIyOzExMEQgMTE3NSAxMUJEO0NDMjI7MTEwRCAxMTc1IDExQkQ7CitDQzIzO0NDMjM7MTEwRCAxMTc1IDExQkU7Q0MyMzsxMTBEIDExNzUgMTFCRTsKK0NDMjQ7Q0MyNDsxMTBEIDExNzUgMTFCRjtDQzI0OzExMEQgMTE3NSAxMUJGOworQ0MyNTtDQzI1OzExMEQgMTE3NSAxMUMwO0NDMjU7MTEwRCAxMTc1IDExQzA7CitDQzI2O0NDMjY7MTEwRCAxMTc1IDExQzE7Q0MyNjsxMTBEIDExNzUgMTFDMTsKK0NDMjc7Q0MyNzsxMTBEIDExNzUgMTFDMjtDQzI3OzExMEQgMTE3NSAxMUMyOworQ0MyODtDQzI4OzExMEUgMTE2MTtDQzI4OzExMEUgMTE2MTsKK0NDMjk7Q0MyOTsxMTBFIDExNjEgMTFBODtDQzI5OzExMEUgMTE2MSAxMUE4OworQ0MyQTtDQzJBOzExMEUgMTE2MSAxMUE5O0NDMkE7MTEwRSAxMTYxIDExQTk7CitDQzJCO0NDMkI7MTEwRSAxMTYxIDExQUE7Q0MyQjsxMTBFIDExNjEgMTFBQTsKK0NDMkM7Q0MyQzsxMTBFIDExNjEgMTFBQjtDQzJDOzExMEUgMTE2MSAxMUFCOworQ0MyRDtDQzJEOzExMEUgMTE2MSAxMUFDO0NDMkQ7MTEwRSAxMTYxIDExQUM7CitDQzJFO0NDMkU7MTEwRSAxMTYxIDExQUQ7Q0MyRTsxMTBFIDExNjEgMTFBRDsKK0NDMkY7Q0MyRjsxMTBFIDExNjEgMTFBRTtDQzJGOzExMEUgMTE2MSAxMUFFOworQ0MzMDtDQzMwOzExMEUgMTE2MSAxMUFGO0NDMzA7MTEwRSAxMTYxIDExQUY7CitDQzMxO0NDMzE7MTEwRSAxMTYxIDExQjA7Q0MzMTsxMTBFIDExNjEgMTFCMDsKK0NDMzI7Q0MzMjsxMTBFIDExNjEgMTFCMTtDQzMyOzExMEUgMTE2MSAxMUIxOworQ0MzMztDQzMzOzExMEUgMTE2MSAxMUIyO0NDMzM7MTEwRSAxMTYxIDExQjI7CitDQzM0O0NDMzQ7MTEwRSAxMTYxIDExQjM7Q0MzNDsxMTBFIDExNjEgMTFCMzsKK0NDMzU7Q0MzNTsxMTBFIDExNjEgMTFCNDtDQzM1OzExMEUgMTE2MSAxMUI0OworQ0MzNjtDQzM2OzExMEUgMTE2MSAxMUI1O0NDMzY7MTEwRSAxMTYxIDExQjU7CitDQzM3O0NDMzc7MTEwRSAxMTYxIDExQjY7Q0MzNzsxMTBFIDExNjEgMTFCNjsKK0NDMzg7Q0MzODsxMTBFIDExNjEgMTFCNztDQzM4OzExMEUgMTE2MSAxMUI3OworQ0MzOTtDQzM5OzExMEUgMTE2MSAxMUI4O0NDMzk7MTEwRSAxMTYxIDExQjg7CitDQzNBO0NDM0E7MTEwRSAxMTYxIDExQjk7Q0MzQTsxMTBFIDExNjEgMTFCOTsKK0NDM0I7Q0MzQjsxMTBFIDExNjEgMTFCQTtDQzNCOzExMEUgMTE2MSAxMUJBOworQ0MzQztDQzNDOzExMEUgMTE2MSAxMUJCO0NDM0M7MTEwRSAxMTYxIDExQkI7CitDQzNEO0NDM0Q7MTEwRSAxMTYxIDExQkM7Q0MzRDsxMTBFIDExNjEgMTFCQzsKK0NDM0U7Q0MzRTsxMTBFIDExNjEgMTFCRDtDQzNFOzExMEUgMTE2MSAxMUJEOworQ0MzRjtDQzNGOzExMEUgMTE2MSAxMUJFO0NDM0Y7MTEwRSAxMTYxIDExQkU7CitDQzQwO0NDNDA7MTEwRSAxMTYxIDExQkY7Q0M0MDsxMTBFIDExNjEgMTFCRjsKK0NDNDE7Q0M0MTsxMTBFIDExNjEgMTFDMDtDQzQxOzExMEUgMTE2MSAxMUMwOworQ0M0MjtDQzQyOzExMEUgMTE2MSAxMUMxO0NDNDI7MTEwRSAxMTYxIDExQzE7CitDQzQzO0NDNDM7MTEwRSAxMTYxIDExQzI7Q0M0MzsxMTBFIDExNjEgMTFDMjsKK0NDNDQ7Q0M0NDsxMTBFIDExNjI7Q0M0NDsxMTBFIDExNjI7CitDQzQ1O0NDNDU7MTEwRSAxMTYyIDExQTg7Q0M0NTsxMTBFIDExNjIgMTFBODsKK0NDNDY7Q0M0NjsxMTBFIDExNjIgMTFBOTtDQzQ2OzExMEUgMTE2MiAxMUE5OworQ0M0NztDQzQ3OzExMEUgMTE2MiAxMUFBO0NDNDc7MTEwRSAxMTYyIDExQUE7CitDQzQ4O0NDNDg7MTEwRSAxMTYyIDExQUI7Q0M0ODsxMTBFIDExNjIgMTFBQjsKK0NDNDk7Q0M0OTsxMTBFIDExNjIgMTFBQztDQzQ5OzExMEUgMTE2MiAxMUFDOworQ0M0QTtDQzRBOzExMEUgMTE2MiAxMUFEO0NDNEE7MTEwRSAxMTYyIDExQUQ7CitDQzRCO0NDNEI7MTEwRSAxMTYyIDExQUU7Q0M0QjsxMTBFIDExNjIgMTFBRTsKK0NDNEM7Q0M0QzsxMTBFIDExNjIgMTFBRjtDQzRDOzExMEUgMTE2MiAxMUFGOworQ0M0RDtDQzREOzExMEUgMTE2MiAxMUIwO0NDNEQ7MTEwRSAxMTYyIDExQjA7CitDQzRFO0NDNEU7MTEwRSAxMTYyIDExQjE7Q0M0RTsxMTBFIDExNjIgMTFCMTsKK0NDNEY7Q0M0RjsxMTBFIDExNjIgMTFCMjtDQzRGOzExMEUgMTE2MiAxMUIyOworQ0M1MDtDQzUwOzExMEUgMTE2MiAxMUIzO0NDNTA7MTEwRSAxMTYyIDExQjM7CitDQzUxO0NDNTE7MTEwRSAxMTYyIDExQjQ7Q0M1MTsxMTBFIDExNjIgMTFCNDsKK0NDNTI7Q0M1MjsxMTBFIDExNjIgMTFCNTtDQzUyOzExMEUgMTE2MiAxMUI1OworQ0M1MztDQzUzOzExMEUgMTE2MiAxMUI2O0NDNTM7MTEwRSAxMTYyIDExQjY7CitDQzU0O0NDNTQ7MTEwRSAxMTYyIDExQjc7Q0M1NDsxMTBFIDExNjIgMTFCNzsKK0NDNTU7Q0M1NTsxMTBFIDExNjIgMTFCODtDQzU1OzExMEUgMTE2MiAxMUI4OworQ0M1NjtDQzU2OzExMEUgMTE2MiAxMUI5O0NDNTY7MTEwRSAxMTYyIDExQjk7CitDQzU3O0NDNTc7MTEwRSAxMTYyIDExQkE7Q0M1NzsxMTBFIDExNjIgMTFCQTsKK0NDNTg7Q0M1ODsxMTBFIDExNjIgMTFCQjtDQzU4OzExMEUgMTE2MiAxMUJCOworQ0M1OTtDQzU5OzExMEUgMTE2MiAxMUJDO0NDNTk7MTEwRSAxMTYyIDExQkM7CitDQzVBO0NDNUE7MTEwRSAxMTYyIDExQkQ7Q0M1QTsxMTBFIDExNjIgMTFCRDsKK0NDNUI7Q0M1QjsxMTBFIDExNjIgMTFCRTtDQzVCOzExMEUgMTE2MiAxMUJFOworQ0M1QztDQzVDOzExMEUgMTE2MiAxMUJGO0NDNUM7MTEwRSAxMTYyIDExQkY7CitDQzVEO0NDNUQ7MTEwRSAxMTYyIDExQzA7Q0M1RDsxMTBFIDExNjIgMTFDMDsKK0NDNUU7Q0M1RTsxMTBFIDExNjIgMTFDMTtDQzVFOzExMEUgMTE2MiAxMUMxOworQ0M1RjtDQzVGOzExMEUgMTE2MiAxMUMyO0NDNUY7MTEwRSAxMTYyIDExQzI7CitDQzYwO0NDNjA7MTEwRSAxMTYzO0NDNjA7MTEwRSAxMTYzOworQ0M2MTtDQzYxOzExMEUgMTE2MyAxMUE4O0NDNjE7MTEwRSAxMTYzIDExQTg7CitDQzYyO0NDNjI7MTEwRSAxMTYzIDExQTk7Q0M2MjsxMTBFIDExNjMgMTFBOTsKK0NDNjM7Q0M2MzsxMTBFIDExNjMgMTFBQTtDQzYzOzExMEUgMTE2MyAxMUFBOworQ0M2NDtDQzY0OzExMEUgMTE2MyAxMUFCO0NDNjQ7MTEwRSAxMTYzIDExQUI7CitDQzY1O0NDNjU7MTEwRSAxMTYzIDExQUM7Q0M2NTsxMTBFIDExNjMgMTFBQzsKK0NDNjY7Q0M2NjsxMTBFIDExNjMgMTFBRDtDQzY2OzExMEUgMTE2MyAxMUFEOworQ0M2NztDQzY3OzExMEUgMTE2MyAxMUFFO0NDNjc7MTEwRSAxMTYzIDExQUU7CitDQzY4O0NDNjg7MTEwRSAxMTYzIDExQUY7Q0M2ODsxMTBFIDExNjMgMTFBRjsKK0NDNjk7Q0M2OTsxMTBFIDExNjMgMTFCMDtDQzY5OzExMEUgMTE2MyAxMUIwOworQ0M2QTtDQzZBOzExMEUgMTE2MyAxMUIxO0NDNkE7MTEwRSAxMTYzIDExQjE7CitDQzZCO0NDNkI7MTEwRSAxMTYzIDExQjI7Q0M2QjsxMTBFIDExNjMgMTFCMjsKK0NDNkM7Q0M2QzsxMTBFIDExNjMgMTFCMztDQzZDOzExMEUgMTE2MyAxMUIzOworQ0M2RDtDQzZEOzExMEUgMTE2MyAxMUI0O0NDNkQ7MTEwRSAxMTYzIDExQjQ7CitDQzZFO0NDNkU7MTEwRSAxMTYzIDExQjU7Q0M2RTsxMTBFIDExNjMgMTFCNTsKK0NDNkY7Q0M2RjsxMTBFIDExNjMgMTFCNjtDQzZGOzExMEUgMTE2MyAxMUI2OworQ0M3MDtDQzcwOzExMEUgMTE2MyAxMUI3O0NDNzA7MTEwRSAxMTYzIDExQjc7CitDQzcxO0NDNzE7MTEwRSAxMTYzIDExQjg7Q0M3MTsxMTBFIDExNjMgMTFCODsKK0NDNzI7Q0M3MjsxMTBFIDExNjMgMTFCOTtDQzcyOzExMEUgMTE2MyAxMUI5OworQ0M3MztDQzczOzExMEUgMTE2MyAxMUJBO0NDNzM7MTEwRSAxMTYzIDExQkE7CitDQzc0O0NDNzQ7MTEwRSAxMTYzIDExQkI7Q0M3NDsxMTBFIDExNjMgMTFCQjsKK0NDNzU7Q0M3NTsxMTBFIDExNjMgMTFCQztDQzc1OzExMEUgMTE2MyAxMUJDOworQ0M3NjtDQzc2OzExMEUgMTE2MyAxMUJEO0NDNzY7MTEwRSAxMTYzIDExQkQ7CitDQzc3O0NDNzc7MTEwRSAxMTYzIDExQkU7Q0M3NzsxMTBFIDExNjMgMTFCRTsKK0NDNzg7Q0M3ODsxMTBFIDExNjMgMTFCRjtDQzc4OzExMEUgMTE2MyAxMUJGOworQ0M3OTtDQzc5OzExMEUgMTE2MyAxMUMwO0NDNzk7MTEwRSAxMTYzIDExQzA7CitDQzdBO0NDN0E7MTEwRSAxMTYzIDExQzE7Q0M3QTsxMTBFIDExNjMgMTFDMTsKK0NDN0I7Q0M3QjsxMTBFIDExNjMgMTFDMjtDQzdCOzExMEUgMTE2MyAxMUMyOworQ0M3QztDQzdDOzExMEUgMTE2NDtDQzdDOzExMEUgMTE2NDsKK0NDN0Q7Q0M3RDsxMTBFIDExNjQgMTFBODtDQzdEOzExMEUgMTE2NCAxMUE4OworQ0M3RTtDQzdFOzExMEUgMTE2NCAxMUE5O0NDN0U7MTEwRSAxMTY0IDExQTk7CitDQzdGO0NDN0Y7MTEwRSAxMTY0IDExQUE7Q0M3RjsxMTBFIDExNjQgMTFBQTsKK0NDODA7Q0M4MDsxMTBFIDExNjQgMTFBQjtDQzgwOzExMEUgMTE2NCAxMUFCOworQ0M4MTtDQzgxOzExMEUgMTE2NCAxMUFDO0NDODE7MTEwRSAxMTY0IDExQUM7CitDQzgyO0NDODI7MTEwRSAxMTY0IDExQUQ7Q0M4MjsxMTBFIDExNjQgMTFBRDsKK0NDODM7Q0M4MzsxMTBFIDExNjQgMTFBRTtDQzgzOzExMEUgMTE2NCAxMUFFOworQ0M4NDtDQzg0OzExMEUgMTE2NCAxMUFGO0NDODQ7MTEwRSAxMTY0IDExQUY7CitDQzg1O0NDODU7MTEwRSAxMTY0IDExQjA7Q0M4NTsxMTBFIDExNjQgMTFCMDsKK0NDODY7Q0M4NjsxMTBFIDExNjQgMTFCMTtDQzg2OzExMEUgMTE2NCAxMUIxOworQ0M4NztDQzg3OzExMEUgMTE2NCAxMUIyO0NDODc7MTEwRSAxMTY0IDExQjI7CitDQzg4O0NDODg7MTEwRSAxMTY0IDExQjM7Q0M4ODsxMTBFIDExNjQgMTFCMzsKK0NDODk7Q0M4OTsxMTBFIDExNjQgMTFCNDtDQzg5OzExMEUgMTE2NCAxMUI0OworQ0M4QTtDQzhBOzExMEUgMTE2NCAxMUI1O0NDOEE7MTEwRSAxMTY0IDExQjU7CitDQzhCO0NDOEI7MTEwRSAxMTY0IDExQjY7Q0M4QjsxMTBFIDExNjQgMTFCNjsKK0NDOEM7Q0M4QzsxMTBFIDExNjQgMTFCNztDQzhDOzExMEUgMTE2NCAxMUI3OworQ0M4RDtDQzhEOzExMEUgMTE2NCAxMUI4O0NDOEQ7MTEwRSAxMTY0IDExQjg7CitDQzhFO0NDOEU7MTEwRSAxMTY0IDExQjk7Q0M4RTsxMTBFIDExNjQgMTFCOTsKK0NDOEY7Q0M4RjsxMTBFIDExNjQgMTFCQTtDQzhGOzExMEUgMTE2NCAxMUJBOworQ0M5MDtDQzkwOzExMEUgMTE2NCAxMUJCO0NDOTA7MTEwRSAxMTY0IDExQkI7CitDQzkxO0NDOTE7MTEwRSAxMTY0IDExQkM7Q0M5MTsxMTBFIDExNjQgMTFCQzsKK0NDOTI7Q0M5MjsxMTBFIDExNjQgMTFCRDtDQzkyOzExMEUgMTE2NCAxMUJEOworQ0M5MztDQzkzOzExMEUgMTE2NCAxMUJFO0NDOTM7MTEwRSAxMTY0IDExQkU7CitDQzk0O0NDOTQ7MTEwRSAxMTY0IDExQkY7Q0M5NDsxMTBFIDExNjQgMTFCRjsKK0NDOTU7Q0M5NTsxMTBFIDExNjQgMTFDMDtDQzk1OzExMEUgMTE2NCAxMUMwOworQ0M5NjtDQzk2OzExMEUgMTE2NCAxMUMxO0NDOTY7MTEwRSAxMTY0IDExQzE7CitDQzk3O0NDOTc7MTEwRSAxMTY0IDExQzI7Q0M5NzsxMTBFIDExNjQgMTFDMjsKK0NDOTg7Q0M5ODsxMTBFIDExNjU7Q0M5ODsxMTBFIDExNjU7CitDQzk5O0NDOTk7MTEwRSAxMTY1IDExQTg7Q0M5OTsxMTBFIDExNjUgMTFBODsKK0NDOUE7Q0M5QTsxMTBFIDExNjUgMTFBOTtDQzlBOzExMEUgMTE2NSAxMUE5OworQ0M5QjtDQzlCOzExMEUgMTE2NSAxMUFBO0NDOUI7MTEwRSAxMTY1IDExQUE7CitDQzlDO0NDOUM7MTEwRSAxMTY1IDExQUI7Q0M5QzsxMTBFIDExNjUgMTFBQjsKK0NDOUQ7Q0M5RDsxMTBFIDExNjUgMTFBQztDQzlEOzExMEUgMTE2NSAxMUFDOworQ0M5RTtDQzlFOzExMEUgMTE2NSAxMUFEO0NDOUU7MTEwRSAxMTY1IDExQUQ7CitDQzlGO0NDOUY7MTEwRSAxMTY1IDExQUU7Q0M5RjsxMTBFIDExNjUgMTFBRTsKK0NDQTA7Q0NBMDsxMTBFIDExNjUgMTFBRjtDQ0EwOzExMEUgMTE2NSAxMUFGOworQ0NBMTtDQ0ExOzExMEUgMTE2NSAxMUIwO0NDQTE7MTEwRSAxMTY1IDExQjA7CitDQ0EyO0NDQTI7MTEwRSAxMTY1IDExQjE7Q0NBMjsxMTBFIDExNjUgMTFCMTsKK0NDQTM7Q0NBMzsxMTBFIDExNjUgMTFCMjtDQ0EzOzExMEUgMTE2NSAxMUIyOworQ0NBNDtDQ0E0OzExMEUgMTE2NSAxMUIzO0NDQTQ7MTEwRSAxMTY1IDExQjM7CitDQ0E1O0NDQTU7MTEwRSAxMTY1IDExQjQ7Q0NBNTsxMTBFIDExNjUgMTFCNDsKK0NDQTY7Q0NBNjsxMTBFIDExNjUgMTFCNTtDQ0E2OzExMEUgMTE2NSAxMUI1OworQ0NBNztDQ0E3OzExMEUgMTE2NSAxMUI2O0NDQTc7MTEwRSAxMTY1IDExQjY7CitDQ0E4O0NDQTg7MTEwRSAxMTY1IDExQjc7Q0NBODsxMTBFIDExNjUgMTFCNzsKK0NDQTk7Q0NBOTsxMTBFIDExNjUgMTFCODtDQ0E5OzExMEUgMTE2NSAxMUI4OworQ0NBQTtDQ0FBOzExMEUgMTE2NSAxMUI5O0NDQUE7MTEwRSAxMTY1IDExQjk7CitDQ0FCO0NDQUI7MTEwRSAxMTY1IDExQkE7Q0NBQjsxMTBFIDExNjUgMTFCQTsKK0NDQUM7Q0NBQzsxMTBFIDExNjUgMTFCQjtDQ0FDOzExMEUgMTE2NSAxMUJCOworQ0NBRDtDQ0FEOzExMEUgMTE2NSAxMUJDO0NDQUQ7MTEwRSAxMTY1IDExQkM7CitDQ0FFO0NDQUU7MTEwRSAxMTY1IDExQkQ7Q0NBRTsxMTBFIDExNjUgMTFCRDsKK0NDQUY7Q0NBRjsxMTBFIDExNjUgMTFCRTtDQ0FGOzExMEUgMTE2NSAxMUJFOworQ0NCMDtDQ0IwOzExMEUgMTE2NSAxMUJGO0NDQjA7MTEwRSAxMTY1IDExQkY7CitDQ0IxO0NDQjE7MTEwRSAxMTY1IDExQzA7Q0NCMTsxMTBFIDExNjUgMTFDMDsKK0NDQjI7Q0NCMjsxMTBFIDExNjUgMTFDMTtDQ0IyOzExMEUgMTE2NSAxMUMxOworQ0NCMztDQ0IzOzExMEUgMTE2NSAxMUMyO0NDQjM7MTEwRSAxMTY1IDExQzI7CitDQ0I0O0NDQjQ7MTEwRSAxMTY2O0NDQjQ7MTEwRSAxMTY2OworQ0NCNTtDQ0I1OzExMEUgMTE2NiAxMUE4O0NDQjU7MTEwRSAxMTY2IDExQTg7CitDQ0I2O0NDQjY7MTEwRSAxMTY2IDExQTk7Q0NCNjsxMTBFIDExNjYgMTFBOTsKK0NDQjc7Q0NCNzsxMTBFIDExNjYgMTFBQTtDQ0I3OzExMEUgMTE2NiAxMUFBOworQ0NCODtDQ0I4OzExMEUgMTE2NiAxMUFCO0NDQjg7MTEwRSAxMTY2IDExQUI7CitDQ0I5O0NDQjk7MTEwRSAxMTY2IDExQUM7Q0NCOTsxMTBFIDExNjYgMTFBQzsKK0NDQkE7Q0NCQTsxMTBFIDExNjYgMTFBRDtDQ0JBOzExMEUgMTE2NiAxMUFEOworQ0NCQjtDQ0JCOzExMEUgMTE2NiAxMUFFO0NDQkI7MTEwRSAxMTY2IDExQUU7CitDQ0JDO0NDQkM7MTEwRSAxMTY2IDExQUY7Q0NCQzsxMTBFIDExNjYgMTFBRjsKK0NDQkQ7Q0NCRDsxMTBFIDExNjYgMTFCMDtDQ0JEOzExMEUgMTE2NiAxMUIwOworQ0NCRTtDQ0JFOzExMEUgMTE2NiAxMUIxO0NDQkU7MTEwRSAxMTY2IDExQjE7CitDQ0JGO0NDQkY7MTEwRSAxMTY2IDExQjI7Q0NCRjsxMTBFIDExNjYgMTFCMjsKK0NDQzA7Q0NDMDsxMTBFIDExNjYgMTFCMztDQ0MwOzExMEUgMTE2NiAxMUIzOworQ0NDMTtDQ0MxOzExMEUgMTE2NiAxMUI0O0NDQzE7MTEwRSAxMTY2IDExQjQ7CitDQ0MyO0NDQzI7MTEwRSAxMTY2IDExQjU7Q0NDMjsxMTBFIDExNjYgMTFCNTsKK0NDQzM7Q0NDMzsxMTBFIDExNjYgMTFCNjtDQ0MzOzExMEUgMTE2NiAxMUI2OworQ0NDNDtDQ0M0OzExMEUgMTE2NiAxMUI3O0NDQzQ7MTEwRSAxMTY2IDExQjc7CitDQ0M1O0NDQzU7MTEwRSAxMTY2IDExQjg7Q0NDNTsxMTBFIDExNjYgMTFCODsKK0NDQzY7Q0NDNjsxMTBFIDExNjYgMTFCOTtDQ0M2OzExMEUgMTE2NiAxMUI5OworQ0NDNztDQ0M3OzExMEUgMTE2NiAxMUJBO0NDQzc7MTEwRSAxMTY2IDExQkE7CitDQ0M4O0NDQzg7MTEwRSAxMTY2IDExQkI7Q0NDODsxMTBFIDExNjYgMTFCQjsKK0NDQzk7Q0NDOTsxMTBFIDExNjYgMTFCQztDQ0M5OzExMEUgMTE2NiAxMUJDOworQ0NDQTtDQ0NBOzExMEUgMTE2NiAxMUJEO0NDQ0E7MTEwRSAxMTY2IDExQkQ7CitDQ0NCO0NDQ0I7MTEwRSAxMTY2IDExQkU7Q0NDQjsxMTBFIDExNjYgMTFCRTsKK0NDQ0M7Q0NDQzsxMTBFIDExNjYgMTFCRjtDQ0NDOzExMEUgMTE2NiAxMUJGOworQ0NDRDtDQ0NEOzExMEUgMTE2NiAxMUMwO0NDQ0Q7MTEwRSAxMTY2IDExQzA7CitDQ0NFO0NDQ0U7MTEwRSAxMTY2IDExQzE7Q0NDRTsxMTBFIDExNjYgMTFDMTsKK0NDQ0Y7Q0NDRjsxMTBFIDExNjYgMTFDMjtDQ0NGOzExMEUgMTE2NiAxMUMyOworQ0NEMDtDQ0QwOzExMEUgMTE2NztDQ0QwOzExMEUgMTE2NzsKK0NDRDE7Q0NEMTsxMTBFIDExNjcgMTFBODtDQ0QxOzExMEUgMTE2NyAxMUE4OworQ0NEMjtDQ0QyOzExMEUgMTE2NyAxMUE5O0NDRDI7MTEwRSAxMTY3IDExQTk7CitDQ0QzO0NDRDM7MTEwRSAxMTY3IDExQUE7Q0NEMzsxMTBFIDExNjcgMTFBQTsKK0NDRDQ7Q0NENDsxMTBFIDExNjcgMTFBQjtDQ0Q0OzExMEUgMTE2NyAxMUFCOworQ0NENTtDQ0Q1OzExMEUgMTE2NyAxMUFDO0NDRDU7MTEwRSAxMTY3IDExQUM7CitDQ0Q2O0NDRDY7MTEwRSAxMTY3IDExQUQ7Q0NENjsxMTBFIDExNjcgMTFBRDsKK0NDRDc7Q0NENzsxMTBFIDExNjcgMTFBRTtDQ0Q3OzExMEUgMTE2NyAxMUFFOworQ0NEODtDQ0Q4OzExMEUgMTE2NyAxMUFGO0NDRDg7MTEwRSAxMTY3IDExQUY7CitDQ0Q5O0NDRDk7MTEwRSAxMTY3IDExQjA7Q0NEOTsxMTBFIDExNjcgMTFCMDsKK0NDREE7Q0NEQTsxMTBFIDExNjcgMTFCMTtDQ0RBOzExMEUgMTE2NyAxMUIxOworQ0NEQjtDQ0RCOzExMEUgMTE2NyAxMUIyO0NDREI7MTEwRSAxMTY3IDExQjI7CitDQ0RDO0NDREM7MTEwRSAxMTY3IDExQjM7Q0NEQzsxMTBFIDExNjcgMTFCMzsKK0NDREQ7Q0NERDsxMTBFIDExNjcgMTFCNDtDQ0REOzExMEUgMTE2NyAxMUI0OworQ0NERTtDQ0RFOzExMEUgMTE2NyAxMUI1O0NDREU7MTEwRSAxMTY3IDExQjU7CitDQ0RGO0NDREY7MTEwRSAxMTY3IDExQjY7Q0NERjsxMTBFIDExNjcgMTFCNjsKK0NDRTA7Q0NFMDsxMTBFIDExNjcgMTFCNztDQ0UwOzExMEUgMTE2NyAxMUI3OworQ0NFMTtDQ0UxOzExMEUgMTE2NyAxMUI4O0NDRTE7MTEwRSAxMTY3IDExQjg7CitDQ0UyO0NDRTI7MTEwRSAxMTY3IDExQjk7Q0NFMjsxMTBFIDExNjcgMTFCOTsKK0NDRTM7Q0NFMzsxMTBFIDExNjcgMTFCQTtDQ0UzOzExMEUgMTE2NyAxMUJBOworQ0NFNDtDQ0U0OzExMEUgMTE2NyAxMUJCO0NDRTQ7MTEwRSAxMTY3IDExQkI7CitDQ0U1O0NDRTU7MTEwRSAxMTY3IDExQkM7Q0NFNTsxMTBFIDExNjcgMTFCQzsKK0NDRTY7Q0NFNjsxMTBFIDExNjcgMTFCRDtDQ0U2OzExMEUgMTE2NyAxMUJEOworQ0NFNztDQ0U3OzExMEUgMTE2NyAxMUJFO0NDRTc7MTEwRSAxMTY3IDExQkU7CitDQ0U4O0NDRTg7MTEwRSAxMTY3IDExQkY7Q0NFODsxMTBFIDExNjcgMTFCRjsKK0NDRTk7Q0NFOTsxMTBFIDExNjcgMTFDMDtDQ0U5OzExMEUgMTE2NyAxMUMwOworQ0NFQTtDQ0VBOzExMEUgMTE2NyAxMUMxO0NDRUE7MTEwRSAxMTY3IDExQzE7CitDQ0VCO0NDRUI7MTEwRSAxMTY3IDExQzI7Q0NFQjsxMTBFIDExNjcgMTFDMjsKK0NDRUM7Q0NFQzsxMTBFIDExNjg7Q0NFQzsxMTBFIDExNjg7CitDQ0VEO0NDRUQ7MTEwRSAxMTY4IDExQTg7Q0NFRDsxMTBFIDExNjggMTFBODsKK0NDRUU7Q0NFRTsxMTBFIDExNjggMTFBOTtDQ0VFOzExMEUgMTE2OCAxMUE5OworQ0NFRjtDQ0VGOzExMEUgMTE2OCAxMUFBO0NDRUY7MTEwRSAxMTY4IDExQUE7CitDQ0YwO0NDRjA7MTEwRSAxMTY4IDExQUI7Q0NGMDsxMTBFIDExNjggMTFBQjsKK0NDRjE7Q0NGMTsxMTBFIDExNjggMTFBQztDQ0YxOzExMEUgMTE2OCAxMUFDOworQ0NGMjtDQ0YyOzExMEUgMTE2OCAxMUFEO0NDRjI7MTEwRSAxMTY4IDExQUQ7CitDQ0YzO0NDRjM7MTEwRSAxMTY4IDExQUU7Q0NGMzsxMTBFIDExNjggMTFBRTsKK0NDRjQ7Q0NGNDsxMTBFIDExNjggMTFBRjtDQ0Y0OzExMEUgMTE2OCAxMUFGOworQ0NGNTtDQ0Y1OzExMEUgMTE2OCAxMUIwO0NDRjU7MTEwRSAxMTY4IDExQjA7CitDQ0Y2O0NDRjY7MTEwRSAxMTY4IDExQjE7Q0NGNjsxMTBFIDExNjggMTFCMTsKK0NDRjc7Q0NGNzsxMTBFIDExNjggMTFCMjtDQ0Y3OzExMEUgMTE2OCAxMUIyOworQ0NGODtDQ0Y4OzExMEUgMTE2OCAxMUIzO0NDRjg7MTEwRSAxMTY4IDExQjM7CitDQ0Y5O0NDRjk7MTEwRSAxMTY4IDExQjQ7Q0NGOTsxMTBFIDExNjggMTFCNDsKK0NDRkE7Q0NGQTsxMTBFIDExNjggMTFCNTtDQ0ZBOzExMEUgMTE2OCAxMUI1OworQ0NGQjtDQ0ZCOzExMEUgMTE2OCAxMUI2O0NDRkI7MTEwRSAxMTY4IDExQjY7CitDQ0ZDO0NDRkM7MTEwRSAxMTY4IDExQjc7Q0NGQzsxMTBFIDExNjggMTFCNzsKK0NDRkQ7Q0NGRDsxMTBFIDExNjggMTFCODtDQ0ZEOzExMEUgMTE2OCAxMUI4OworQ0NGRTtDQ0ZFOzExMEUgMTE2OCAxMUI5O0NDRkU7MTEwRSAxMTY4IDExQjk7CitDQ0ZGO0NDRkY7MTEwRSAxMTY4IDExQkE7Q0NGRjsxMTBFIDExNjggMTFCQTsKK0NEMDA7Q0QwMDsxMTBFIDExNjggMTFCQjtDRDAwOzExMEUgMTE2OCAxMUJCOworQ0QwMTtDRDAxOzExMEUgMTE2OCAxMUJDO0NEMDE7MTEwRSAxMTY4IDExQkM7CitDRDAyO0NEMDI7MTEwRSAxMTY4IDExQkQ7Q0QwMjsxMTBFIDExNjggMTFCRDsKK0NEMDM7Q0QwMzsxMTBFIDExNjggMTFCRTtDRDAzOzExMEUgMTE2OCAxMUJFOworQ0QwNDtDRDA0OzExMEUgMTE2OCAxMUJGO0NEMDQ7MTEwRSAxMTY4IDExQkY7CitDRDA1O0NEMDU7MTEwRSAxMTY4IDExQzA7Q0QwNTsxMTBFIDExNjggMTFDMDsKK0NEMDY7Q0QwNjsxMTBFIDExNjggMTFDMTtDRDA2OzExMEUgMTE2OCAxMUMxOworQ0QwNztDRDA3OzExMEUgMTE2OCAxMUMyO0NEMDc7MTEwRSAxMTY4IDExQzI7CitDRDA4O0NEMDg7MTEwRSAxMTY5O0NEMDg7MTEwRSAxMTY5OworQ0QwOTtDRDA5OzExMEUgMTE2OSAxMUE4O0NEMDk7MTEwRSAxMTY5IDExQTg7CitDRDBBO0NEMEE7MTEwRSAxMTY5IDExQTk7Q0QwQTsxMTBFIDExNjkgMTFBOTsKK0NEMEI7Q0QwQjsxMTBFIDExNjkgMTFBQTtDRDBCOzExMEUgMTE2OSAxMUFBOworQ0QwQztDRDBDOzExMEUgMTE2OSAxMUFCO0NEMEM7MTEwRSAxMTY5IDExQUI7CitDRDBEO0NEMEQ7MTEwRSAxMTY5IDExQUM7Q0QwRDsxMTBFIDExNjkgMTFBQzsKK0NEMEU7Q0QwRTsxMTBFIDExNjkgMTFBRDtDRDBFOzExMEUgMTE2OSAxMUFEOworQ0QwRjtDRDBGOzExMEUgMTE2OSAxMUFFO0NEMEY7MTEwRSAxMTY5IDExQUU7CitDRDEwO0NEMTA7MTEwRSAxMTY5IDExQUY7Q0QxMDsxMTBFIDExNjkgMTFBRjsKK0NEMTE7Q0QxMTsxMTBFIDExNjkgMTFCMDtDRDExOzExMEUgMTE2OSAxMUIwOworQ0QxMjtDRDEyOzExMEUgMTE2OSAxMUIxO0NEMTI7MTEwRSAxMTY5IDExQjE7CitDRDEzO0NEMTM7MTEwRSAxMTY5IDExQjI7Q0QxMzsxMTBFIDExNjkgMTFCMjsKK0NEMTQ7Q0QxNDsxMTBFIDExNjkgMTFCMztDRDE0OzExMEUgMTE2OSAxMUIzOworQ0QxNTtDRDE1OzExMEUgMTE2OSAxMUI0O0NEMTU7MTEwRSAxMTY5IDExQjQ7CitDRDE2O0NEMTY7MTEwRSAxMTY5IDExQjU7Q0QxNjsxMTBFIDExNjkgMTFCNTsKK0NEMTc7Q0QxNzsxMTBFIDExNjkgMTFCNjtDRDE3OzExMEUgMTE2OSAxMUI2OworQ0QxODtDRDE4OzExMEUgMTE2OSAxMUI3O0NEMTg7MTEwRSAxMTY5IDExQjc7CitDRDE5O0NEMTk7MTEwRSAxMTY5IDExQjg7Q0QxOTsxMTBFIDExNjkgMTFCODsKK0NEMUE7Q0QxQTsxMTBFIDExNjkgMTFCOTtDRDFBOzExMEUgMTE2OSAxMUI5OworQ0QxQjtDRDFCOzExMEUgMTE2OSAxMUJBO0NEMUI7MTEwRSAxMTY5IDExQkE7CitDRDFDO0NEMUM7MTEwRSAxMTY5IDExQkI7Q0QxQzsxMTBFIDExNjkgMTFCQjsKK0NEMUQ7Q0QxRDsxMTBFIDExNjkgMTFCQztDRDFEOzExMEUgMTE2OSAxMUJDOworQ0QxRTtDRDFFOzExMEUgMTE2OSAxMUJEO0NEMUU7MTEwRSAxMTY5IDExQkQ7CitDRDFGO0NEMUY7MTEwRSAxMTY5IDExQkU7Q0QxRjsxMTBFIDExNjkgMTFCRTsKK0NEMjA7Q0QyMDsxMTBFIDExNjkgMTFCRjtDRDIwOzExMEUgMTE2OSAxMUJGOworQ0QyMTtDRDIxOzExMEUgMTE2OSAxMUMwO0NEMjE7MTEwRSAxMTY5IDExQzA7CitDRDIyO0NEMjI7MTEwRSAxMTY5IDExQzE7Q0QyMjsxMTBFIDExNjkgMTFDMTsKK0NEMjM7Q0QyMzsxMTBFIDExNjkgMTFDMjtDRDIzOzExMEUgMTE2OSAxMUMyOworQ0QyNDtDRDI0OzExMEUgMTE2QTtDRDI0OzExMEUgMTE2QTsKK0NEMjU7Q0QyNTsxMTBFIDExNkEgMTFBODtDRDI1OzExMEUgMTE2QSAxMUE4OworQ0QyNjtDRDI2OzExMEUgMTE2QSAxMUE5O0NEMjY7MTEwRSAxMTZBIDExQTk7CitDRDI3O0NEMjc7MTEwRSAxMTZBIDExQUE7Q0QyNzsxMTBFIDExNkEgMTFBQTsKK0NEMjg7Q0QyODsxMTBFIDExNkEgMTFBQjtDRDI4OzExMEUgMTE2QSAxMUFCOworQ0QyOTtDRDI5OzExMEUgMTE2QSAxMUFDO0NEMjk7MTEwRSAxMTZBIDExQUM7CitDRDJBO0NEMkE7MTEwRSAxMTZBIDExQUQ7Q0QyQTsxMTBFIDExNkEgMTFBRDsKK0NEMkI7Q0QyQjsxMTBFIDExNkEgMTFBRTtDRDJCOzExMEUgMTE2QSAxMUFFOworQ0QyQztDRDJDOzExMEUgMTE2QSAxMUFGO0NEMkM7MTEwRSAxMTZBIDExQUY7CitDRDJEO0NEMkQ7MTEwRSAxMTZBIDExQjA7Q0QyRDsxMTBFIDExNkEgMTFCMDsKK0NEMkU7Q0QyRTsxMTBFIDExNkEgMTFCMTtDRDJFOzExMEUgMTE2QSAxMUIxOworQ0QyRjtDRDJGOzExMEUgMTE2QSAxMUIyO0NEMkY7MTEwRSAxMTZBIDExQjI7CitDRDMwO0NEMzA7MTEwRSAxMTZBIDExQjM7Q0QzMDsxMTBFIDExNkEgMTFCMzsKK0NEMzE7Q0QzMTsxMTBFIDExNkEgMTFCNDtDRDMxOzExMEUgMTE2QSAxMUI0OworQ0QzMjtDRDMyOzExMEUgMTE2QSAxMUI1O0NEMzI7MTEwRSAxMTZBIDExQjU7CitDRDMzO0NEMzM7MTEwRSAxMTZBIDExQjY7Q0QzMzsxMTBFIDExNkEgMTFCNjsKK0NEMzQ7Q0QzNDsxMTBFIDExNkEgMTFCNztDRDM0OzExMEUgMTE2QSAxMUI3OworQ0QzNTtDRDM1OzExMEUgMTE2QSAxMUI4O0NEMzU7MTEwRSAxMTZBIDExQjg7CitDRDM2O0NEMzY7MTEwRSAxMTZBIDExQjk7Q0QzNjsxMTBFIDExNkEgMTFCOTsKK0NEMzc7Q0QzNzsxMTBFIDExNkEgMTFCQTtDRDM3OzExMEUgMTE2QSAxMUJBOworQ0QzODtDRDM4OzExMEUgMTE2QSAxMUJCO0NEMzg7MTEwRSAxMTZBIDExQkI7CitDRDM5O0NEMzk7MTEwRSAxMTZBIDExQkM7Q0QzOTsxMTBFIDExNkEgMTFCQzsKK0NEM0E7Q0QzQTsxMTBFIDExNkEgMTFCRDtDRDNBOzExMEUgMTE2QSAxMUJEOworQ0QzQjtDRDNCOzExMEUgMTE2QSAxMUJFO0NEM0I7MTEwRSAxMTZBIDExQkU7CitDRDNDO0NEM0M7MTEwRSAxMTZBIDExQkY7Q0QzQzsxMTBFIDExNkEgMTFCRjsKK0NEM0Q7Q0QzRDsxMTBFIDExNkEgMTFDMDtDRDNEOzExMEUgMTE2QSAxMUMwOworQ0QzRTtDRDNFOzExMEUgMTE2QSAxMUMxO0NEM0U7MTEwRSAxMTZBIDExQzE7CitDRDNGO0NEM0Y7MTEwRSAxMTZBIDExQzI7Q0QzRjsxMTBFIDExNkEgMTFDMjsKK0NENDA7Q0Q0MDsxMTBFIDExNkI7Q0Q0MDsxMTBFIDExNkI7CitDRDQxO0NENDE7MTEwRSAxMTZCIDExQTg7Q0Q0MTsxMTBFIDExNkIgMTFBODsKK0NENDI7Q0Q0MjsxMTBFIDExNkIgMTFBOTtDRDQyOzExMEUgMTE2QiAxMUE5OworQ0Q0MztDRDQzOzExMEUgMTE2QiAxMUFBO0NENDM7MTEwRSAxMTZCIDExQUE7CitDRDQ0O0NENDQ7MTEwRSAxMTZCIDExQUI7Q0Q0NDsxMTBFIDExNkIgMTFBQjsKK0NENDU7Q0Q0NTsxMTBFIDExNkIgMTFBQztDRDQ1OzExMEUgMTE2QiAxMUFDOworQ0Q0NjtDRDQ2OzExMEUgMTE2QiAxMUFEO0NENDY7MTEwRSAxMTZCIDExQUQ7CitDRDQ3O0NENDc7MTEwRSAxMTZCIDExQUU7Q0Q0NzsxMTBFIDExNkIgMTFBRTsKK0NENDg7Q0Q0ODsxMTBFIDExNkIgMTFBRjtDRDQ4OzExMEUgMTE2QiAxMUFGOworQ0Q0OTtDRDQ5OzExMEUgMTE2QiAxMUIwO0NENDk7MTEwRSAxMTZCIDExQjA7CitDRDRBO0NENEE7MTEwRSAxMTZCIDExQjE7Q0Q0QTsxMTBFIDExNkIgMTFCMTsKK0NENEI7Q0Q0QjsxMTBFIDExNkIgMTFCMjtDRDRCOzExMEUgMTE2QiAxMUIyOworQ0Q0QztDRDRDOzExMEUgMTE2QiAxMUIzO0NENEM7MTEwRSAxMTZCIDExQjM7CitDRDREO0NENEQ7MTEwRSAxMTZCIDExQjQ7Q0Q0RDsxMTBFIDExNkIgMTFCNDsKK0NENEU7Q0Q0RTsxMTBFIDExNkIgMTFCNTtDRDRFOzExMEUgMTE2QiAxMUI1OworQ0Q0RjtDRDRGOzExMEUgMTE2QiAxMUI2O0NENEY7MTEwRSAxMTZCIDExQjY7CitDRDUwO0NENTA7MTEwRSAxMTZCIDExQjc7Q0Q1MDsxMTBFIDExNkIgMTFCNzsKK0NENTE7Q0Q1MTsxMTBFIDExNkIgMTFCODtDRDUxOzExMEUgMTE2QiAxMUI4OworQ0Q1MjtDRDUyOzExMEUgMTE2QiAxMUI5O0NENTI7MTEwRSAxMTZCIDExQjk7CitDRDUzO0NENTM7MTEwRSAxMTZCIDExQkE7Q0Q1MzsxMTBFIDExNkIgMTFCQTsKK0NENTQ7Q0Q1NDsxMTBFIDExNkIgMTFCQjtDRDU0OzExMEUgMTE2QiAxMUJCOworQ0Q1NTtDRDU1OzExMEUgMTE2QiAxMUJDO0NENTU7MTEwRSAxMTZCIDExQkM7CitDRDU2O0NENTY7MTEwRSAxMTZCIDExQkQ7Q0Q1NjsxMTBFIDExNkIgMTFCRDsKK0NENTc7Q0Q1NzsxMTBFIDExNkIgMTFCRTtDRDU3OzExMEUgMTE2QiAxMUJFOworQ0Q1ODtDRDU4OzExMEUgMTE2QiAxMUJGO0NENTg7MTEwRSAxMTZCIDExQkY7CitDRDU5O0NENTk7MTEwRSAxMTZCIDExQzA7Q0Q1OTsxMTBFIDExNkIgMTFDMDsKK0NENUE7Q0Q1QTsxMTBFIDExNkIgMTFDMTtDRDVBOzExMEUgMTE2QiAxMUMxOworQ0Q1QjtDRDVCOzExMEUgMTE2QiAxMUMyO0NENUI7MTEwRSAxMTZCIDExQzI7CitDRDVDO0NENUM7MTEwRSAxMTZDO0NENUM7MTEwRSAxMTZDOworQ0Q1RDtDRDVEOzExMEUgMTE2QyAxMUE4O0NENUQ7MTEwRSAxMTZDIDExQTg7CitDRDVFO0NENUU7MTEwRSAxMTZDIDExQTk7Q0Q1RTsxMTBFIDExNkMgMTFBOTsKK0NENUY7Q0Q1RjsxMTBFIDExNkMgMTFBQTtDRDVGOzExMEUgMTE2QyAxMUFBOworQ0Q2MDtDRDYwOzExMEUgMTE2QyAxMUFCO0NENjA7MTEwRSAxMTZDIDExQUI7CitDRDYxO0NENjE7MTEwRSAxMTZDIDExQUM7Q0Q2MTsxMTBFIDExNkMgMTFBQzsKK0NENjI7Q0Q2MjsxMTBFIDExNkMgMTFBRDtDRDYyOzExMEUgMTE2QyAxMUFEOworQ0Q2MztDRDYzOzExMEUgMTE2QyAxMUFFO0NENjM7MTEwRSAxMTZDIDExQUU7CitDRDY0O0NENjQ7MTEwRSAxMTZDIDExQUY7Q0Q2NDsxMTBFIDExNkMgMTFBRjsKK0NENjU7Q0Q2NTsxMTBFIDExNkMgMTFCMDtDRDY1OzExMEUgMTE2QyAxMUIwOworQ0Q2NjtDRDY2OzExMEUgMTE2QyAxMUIxO0NENjY7MTEwRSAxMTZDIDExQjE7CitDRDY3O0NENjc7MTEwRSAxMTZDIDExQjI7Q0Q2NzsxMTBFIDExNkMgMTFCMjsKK0NENjg7Q0Q2ODsxMTBFIDExNkMgMTFCMztDRDY4OzExMEUgMTE2QyAxMUIzOworQ0Q2OTtDRDY5OzExMEUgMTE2QyAxMUI0O0NENjk7MTEwRSAxMTZDIDExQjQ7CitDRDZBO0NENkE7MTEwRSAxMTZDIDExQjU7Q0Q2QTsxMTBFIDExNkMgMTFCNTsKK0NENkI7Q0Q2QjsxMTBFIDExNkMgMTFCNjtDRDZCOzExMEUgMTE2QyAxMUI2OworQ0Q2QztDRDZDOzExMEUgMTE2QyAxMUI3O0NENkM7MTEwRSAxMTZDIDExQjc7CitDRDZEO0NENkQ7MTEwRSAxMTZDIDExQjg7Q0Q2RDsxMTBFIDExNkMgMTFCODsKK0NENkU7Q0Q2RTsxMTBFIDExNkMgMTFCOTtDRDZFOzExMEUgMTE2QyAxMUI5OworQ0Q2RjtDRDZGOzExMEUgMTE2QyAxMUJBO0NENkY7MTEwRSAxMTZDIDExQkE7CitDRDcwO0NENzA7MTEwRSAxMTZDIDExQkI7Q0Q3MDsxMTBFIDExNkMgMTFCQjsKK0NENzE7Q0Q3MTsxMTBFIDExNkMgMTFCQztDRDcxOzExMEUgMTE2QyAxMUJDOworQ0Q3MjtDRDcyOzExMEUgMTE2QyAxMUJEO0NENzI7MTEwRSAxMTZDIDExQkQ7CitDRDczO0NENzM7MTEwRSAxMTZDIDExQkU7Q0Q3MzsxMTBFIDExNkMgMTFCRTsKK0NENzQ7Q0Q3NDsxMTBFIDExNkMgMTFCRjtDRDc0OzExMEUgMTE2QyAxMUJGOworQ0Q3NTtDRDc1OzExMEUgMTE2QyAxMUMwO0NENzU7MTEwRSAxMTZDIDExQzA7CitDRDc2O0NENzY7MTEwRSAxMTZDIDExQzE7Q0Q3NjsxMTBFIDExNkMgMTFDMTsKK0NENzc7Q0Q3NzsxMTBFIDExNkMgMTFDMjtDRDc3OzExMEUgMTE2QyAxMUMyOworQ0Q3ODtDRDc4OzExMEUgMTE2RDtDRDc4OzExMEUgMTE2RDsKK0NENzk7Q0Q3OTsxMTBFIDExNkQgMTFBODtDRDc5OzExMEUgMTE2RCAxMUE4OworQ0Q3QTtDRDdBOzExMEUgMTE2RCAxMUE5O0NEN0E7MTEwRSAxMTZEIDExQTk7CitDRDdCO0NEN0I7MTEwRSAxMTZEIDExQUE7Q0Q3QjsxMTBFIDExNkQgMTFBQTsKK0NEN0M7Q0Q3QzsxMTBFIDExNkQgMTFBQjtDRDdDOzExMEUgMTE2RCAxMUFCOworQ0Q3RDtDRDdEOzExMEUgMTE2RCAxMUFDO0NEN0Q7MTEwRSAxMTZEIDExQUM7CitDRDdFO0NEN0U7MTEwRSAxMTZEIDExQUQ7Q0Q3RTsxMTBFIDExNkQgMTFBRDsKK0NEN0Y7Q0Q3RjsxMTBFIDExNkQgMTFBRTtDRDdGOzExMEUgMTE2RCAxMUFFOworQ0Q4MDtDRDgwOzExMEUgMTE2RCAxMUFGO0NEODA7MTEwRSAxMTZEIDExQUY7CitDRDgxO0NEODE7MTEwRSAxMTZEIDExQjA7Q0Q4MTsxMTBFIDExNkQgMTFCMDsKK0NEODI7Q0Q4MjsxMTBFIDExNkQgMTFCMTtDRDgyOzExMEUgMTE2RCAxMUIxOworQ0Q4MztDRDgzOzExMEUgMTE2RCAxMUIyO0NEODM7MTEwRSAxMTZEIDExQjI7CitDRDg0O0NEODQ7MTEwRSAxMTZEIDExQjM7Q0Q4NDsxMTBFIDExNkQgMTFCMzsKK0NEODU7Q0Q4NTsxMTBFIDExNkQgMTFCNDtDRDg1OzExMEUgMTE2RCAxMUI0OworQ0Q4NjtDRDg2OzExMEUgMTE2RCAxMUI1O0NEODY7MTEwRSAxMTZEIDExQjU7CitDRDg3O0NEODc7MTEwRSAxMTZEIDExQjY7Q0Q4NzsxMTBFIDExNkQgMTFCNjsKK0NEODg7Q0Q4ODsxMTBFIDExNkQgMTFCNztDRDg4OzExMEUgMTE2RCAxMUI3OworQ0Q4OTtDRDg5OzExMEUgMTE2RCAxMUI4O0NEODk7MTEwRSAxMTZEIDExQjg7CitDRDhBO0NEOEE7MTEwRSAxMTZEIDExQjk7Q0Q4QTsxMTBFIDExNkQgMTFCOTsKK0NEOEI7Q0Q4QjsxMTBFIDExNkQgMTFCQTtDRDhCOzExMEUgMTE2RCAxMUJBOworQ0Q4QztDRDhDOzExMEUgMTE2RCAxMUJCO0NEOEM7MTEwRSAxMTZEIDExQkI7CitDRDhEO0NEOEQ7MTEwRSAxMTZEIDExQkM7Q0Q4RDsxMTBFIDExNkQgMTFCQzsKK0NEOEU7Q0Q4RTsxMTBFIDExNkQgMTFCRDtDRDhFOzExMEUgMTE2RCAxMUJEOworQ0Q4RjtDRDhGOzExMEUgMTE2RCAxMUJFO0NEOEY7MTEwRSAxMTZEIDExQkU7CitDRDkwO0NEOTA7MTEwRSAxMTZEIDExQkY7Q0Q5MDsxMTBFIDExNkQgMTFCRjsKK0NEOTE7Q0Q5MTsxMTBFIDExNkQgMTFDMDtDRDkxOzExMEUgMTE2RCAxMUMwOworQ0Q5MjtDRDkyOzExMEUgMTE2RCAxMUMxO0NEOTI7MTEwRSAxMTZEIDExQzE7CitDRDkzO0NEOTM7MTEwRSAxMTZEIDExQzI7Q0Q5MzsxMTBFIDExNkQgMTFDMjsKK0NEOTQ7Q0Q5NDsxMTBFIDExNkU7Q0Q5NDsxMTBFIDExNkU7CitDRDk1O0NEOTU7MTEwRSAxMTZFIDExQTg7Q0Q5NTsxMTBFIDExNkUgMTFBODsKK0NEOTY7Q0Q5NjsxMTBFIDExNkUgMTFBOTtDRDk2OzExMEUgMTE2RSAxMUE5OworQ0Q5NztDRDk3OzExMEUgMTE2RSAxMUFBO0NEOTc7MTEwRSAxMTZFIDExQUE7CitDRDk4O0NEOTg7MTEwRSAxMTZFIDExQUI7Q0Q5ODsxMTBFIDExNkUgMTFBQjsKK0NEOTk7Q0Q5OTsxMTBFIDExNkUgMTFBQztDRDk5OzExMEUgMTE2RSAxMUFDOworQ0Q5QTtDRDlBOzExMEUgMTE2RSAxMUFEO0NEOUE7MTEwRSAxMTZFIDExQUQ7CitDRDlCO0NEOUI7MTEwRSAxMTZFIDExQUU7Q0Q5QjsxMTBFIDExNkUgMTFBRTsKK0NEOUM7Q0Q5QzsxMTBFIDExNkUgMTFBRjtDRDlDOzExMEUgMTE2RSAxMUFGOworQ0Q5RDtDRDlEOzExMEUgMTE2RSAxMUIwO0NEOUQ7MTEwRSAxMTZFIDExQjA7CitDRDlFO0NEOUU7MTEwRSAxMTZFIDExQjE7Q0Q5RTsxMTBFIDExNkUgMTFCMTsKK0NEOUY7Q0Q5RjsxMTBFIDExNkUgMTFCMjtDRDlGOzExMEUgMTE2RSAxMUIyOworQ0RBMDtDREEwOzExMEUgMTE2RSAxMUIzO0NEQTA7MTEwRSAxMTZFIDExQjM7CitDREExO0NEQTE7MTEwRSAxMTZFIDExQjQ7Q0RBMTsxMTBFIDExNkUgMTFCNDsKK0NEQTI7Q0RBMjsxMTBFIDExNkUgMTFCNTtDREEyOzExMEUgMTE2RSAxMUI1OworQ0RBMztDREEzOzExMEUgMTE2RSAxMUI2O0NEQTM7MTEwRSAxMTZFIDExQjY7CitDREE0O0NEQTQ7MTEwRSAxMTZFIDExQjc7Q0RBNDsxMTBFIDExNkUgMTFCNzsKK0NEQTU7Q0RBNTsxMTBFIDExNkUgMTFCODtDREE1OzExMEUgMTE2RSAxMUI4OworQ0RBNjtDREE2OzExMEUgMTE2RSAxMUI5O0NEQTY7MTEwRSAxMTZFIDExQjk7CitDREE3O0NEQTc7MTEwRSAxMTZFIDExQkE7Q0RBNzsxMTBFIDExNkUgMTFCQTsKK0NEQTg7Q0RBODsxMTBFIDExNkUgMTFCQjtDREE4OzExMEUgMTE2RSAxMUJCOworQ0RBOTtDREE5OzExMEUgMTE2RSAxMUJDO0NEQTk7MTEwRSAxMTZFIDExQkM7CitDREFBO0NEQUE7MTEwRSAxMTZFIDExQkQ7Q0RBQTsxMTBFIDExNkUgMTFCRDsKK0NEQUI7Q0RBQjsxMTBFIDExNkUgMTFCRTtDREFCOzExMEUgMTE2RSAxMUJFOworQ0RBQztDREFDOzExMEUgMTE2RSAxMUJGO0NEQUM7MTEwRSAxMTZFIDExQkY7CitDREFEO0NEQUQ7MTEwRSAxMTZFIDExQzA7Q0RBRDsxMTBFIDExNkUgMTFDMDsKK0NEQUU7Q0RBRTsxMTBFIDExNkUgMTFDMTtDREFFOzExMEUgMTE2RSAxMUMxOworQ0RBRjtDREFGOzExMEUgMTE2RSAxMUMyO0NEQUY7MTEwRSAxMTZFIDExQzI7CitDREIwO0NEQjA7MTEwRSAxMTZGO0NEQjA7MTEwRSAxMTZGOworQ0RCMTtDREIxOzExMEUgMTE2RiAxMUE4O0NEQjE7MTEwRSAxMTZGIDExQTg7CitDREIyO0NEQjI7MTEwRSAxMTZGIDExQTk7Q0RCMjsxMTBFIDExNkYgMTFBOTsKK0NEQjM7Q0RCMzsxMTBFIDExNkYgMTFBQTtDREIzOzExMEUgMTE2RiAxMUFBOworQ0RCNDtDREI0OzExMEUgMTE2RiAxMUFCO0NEQjQ7MTEwRSAxMTZGIDExQUI7CitDREI1O0NEQjU7MTEwRSAxMTZGIDExQUM7Q0RCNTsxMTBFIDExNkYgMTFBQzsKK0NEQjY7Q0RCNjsxMTBFIDExNkYgMTFBRDtDREI2OzExMEUgMTE2RiAxMUFEOworQ0RCNztDREI3OzExMEUgMTE2RiAxMUFFO0NEQjc7MTEwRSAxMTZGIDExQUU7CitDREI4O0NEQjg7MTEwRSAxMTZGIDExQUY7Q0RCODsxMTBFIDExNkYgMTFBRjsKK0NEQjk7Q0RCOTsxMTBFIDExNkYgMTFCMDtDREI5OzExMEUgMTE2RiAxMUIwOworQ0RCQTtDREJBOzExMEUgMTE2RiAxMUIxO0NEQkE7MTEwRSAxMTZGIDExQjE7CitDREJCO0NEQkI7MTEwRSAxMTZGIDExQjI7Q0RCQjsxMTBFIDExNkYgMTFCMjsKK0NEQkM7Q0RCQzsxMTBFIDExNkYgMTFCMztDREJDOzExMEUgMTE2RiAxMUIzOworQ0RCRDtDREJEOzExMEUgMTE2RiAxMUI0O0NEQkQ7MTEwRSAxMTZGIDExQjQ7CitDREJFO0NEQkU7MTEwRSAxMTZGIDExQjU7Q0RCRTsxMTBFIDExNkYgMTFCNTsKK0NEQkY7Q0RCRjsxMTBFIDExNkYgMTFCNjtDREJGOzExMEUgMTE2RiAxMUI2OworQ0RDMDtDREMwOzExMEUgMTE2RiAxMUI3O0NEQzA7MTEwRSAxMTZGIDExQjc7CitDREMxO0NEQzE7MTEwRSAxMTZGIDExQjg7Q0RDMTsxMTBFIDExNkYgMTFCODsKK0NEQzI7Q0RDMjsxMTBFIDExNkYgMTFCOTtDREMyOzExMEUgMTE2RiAxMUI5OworQ0RDMztDREMzOzExMEUgMTE2RiAxMUJBO0NEQzM7MTEwRSAxMTZGIDExQkE7CitDREM0O0NEQzQ7MTEwRSAxMTZGIDExQkI7Q0RDNDsxMTBFIDExNkYgMTFCQjsKK0NEQzU7Q0RDNTsxMTBFIDExNkYgMTFCQztDREM1OzExMEUgMTE2RiAxMUJDOworQ0RDNjtDREM2OzExMEUgMTE2RiAxMUJEO0NEQzY7MTEwRSAxMTZGIDExQkQ7CitDREM3O0NEQzc7MTEwRSAxMTZGIDExQkU7Q0RDNzsxMTBFIDExNkYgMTFCRTsKK0NEQzg7Q0RDODsxMTBFIDExNkYgMTFCRjtDREM4OzExMEUgMTE2RiAxMUJGOworQ0RDOTtDREM5OzExMEUgMTE2RiAxMUMwO0NEQzk7MTEwRSAxMTZGIDExQzA7CitDRENBO0NEQ0E7MTEwRSAxMTZGIDExQzE7Q0RDQTsxMTBFIDExNkYgMTFDMTsKK0NEQ0I7Q0RDQjsxMTBFIDExNkYgMTFDMjtDRENCOzExMEUgMTE2RiAxMUMyOworQ0RDQztDRENDOzExMEUgMTE3MDtDRENDOzExMEUgMTE3MDsKK0NEQ0Q7Q0RDRDsxMTBFIDExNzAgMTFBODtDRENEOzExMEUgMTE3MCAxMUE4OworQ0RDRTtDRENFOzExMEUgMTE3MCAxMUE5O0NEQ0U7MTEwRSAxMTcwIDExQTk7CitDRENGO0NEQ0Y7MTEwRSAxMTcwIDExQUE7Q0RDRjsxMTBFIDExNzAgMTFBQTsKK0NERDA7Q0REMDsxMTBFIDExNzAgMTFBQjtDREQwOzExMEUgMTE3MCAxMUFCOworQ0REMTtDREQxOzExMEUgMTE3MCAxMUFDO0NERDE7MTEwRSAxMTcwIDExQUM7CitDREQyO0NERDI7MTEwRSAxMTcwIDExQUQ7Q0REMjsxMTBFIDExNzAgMTFBRDsKK0NERDM7Q0REMzsxMTBFIDExNzAgMTFBRTtDREQzOzExMEUgMTE3MCAxMUFFOworQ0RENDtDREQ0OzExMEUgMTE3MCAxMUFGO0NERDQ7MTEwRSAxMTcwIDExQUY7CitDREQ1O0NERDU7MTEwRSAxMTcwIDExQjA7Q0RENTsxMTBFIDExNzAgMTFCMDsKK0NERDY7Q0RENjsxMTBFIDExNzAgMTFCMTtDREQ2OzExMEUgMTE3MCAxMUIxOworQ0RENztDREQ3OzExMEUgMTE3MCAxMUIyO0NERDc7MTEwRSAxMTcwIDExQjI7CitDREQ4O0NERDg7MTEwRSAxMTcwIDExQjM7Q0REODsxMTBFIDExNzAgMTFCMzsKK0NERDk7Q0REOTsxMTBFIDExNzAgMTFCNDtDREQ5OzExMEUgMTE3MCAxMUI0OworQ0REQTtDRERBOzExMEUgMTE3MCAxMUI1O0NEREE7MTEwRSAxMTcwIDExQjU7CitDRERCO0NEREI7MTEwRSAxMTcwIDExQjY7Q0REQjsxMTBFIDExNzAgMTFCNjsKK0NEREM7Q0REQzsxMTBFIDExNzAgMTFCNztDRERDOzExMEUgMTE3MCAxMUI3OworQ0RERDtDREREOzExMEUgMTE3MCAxMUI4O0NEREQ7MTEwRSAxMTcwIDExQjg7CitDRERFO0NEREU7MTEwRSAxMTcwIDExQjk7Q0RERTsxMTBFIDExNzAgMTFCOTsKK0NEREY7Q0RERjsxMTBFIDExNzAgMTFCQTtDRERGOzExMEUgMTE3MCAxMUJBOworQ0RFMDtDREUwOzExMEUgMTE3MCAxMUJCO0NERTA7MTEwRSAxMTcwIDExQkI7CitDREUxO0NERTE7MTEwRSAxMTcwIDExQkM7Q0RFMTsxMTBFIDExNzAgMTFCQzsKK0NERTI7Q0RFMjsxMTBFIDExNzAgMTFCRDtDREUyOzExMEUgMTE3MCAxMUJEOworQ0RFMztDREUzOzExMEUgMTE3MCAxMUJFO0NERTM7MTEwRSAxMTcwIDExQkU7CitDREU0O0NERTQ7MTEwRSAxMTcwIDExQkY7Q0RFNDsxMTBFIDExNzAgMTFCRjsKK0NERTU7Q0RFNTsxMTBFIDExNzAgMTFDMDtDREU1OzExMEUgMTE3MCAxMUMwOworQ0RFNjtDREU2OzExMEUgMTE3MCAxMUMxO0NERTY7MTEwRSAxMTcwIDExQzE7CitDREU3O0NERTc7MTEwRSAxMTcwIDExQzI7Q0RFNzsxMTBFIDExNzAgMTFDMjsKK0NERTg7Q0RFODsxMTBFIDExNzE7Q0RFODsxMTBFIDExNzE7CitDREU5O0NERTk7MTEwRSAxMTcxIDExQTg7Q0RFOTsxMTBFIDExNzEgMTFBODsKK0NERUE7Q0RFQTsxMTBFIDExNzEgMTFBOTtDREVBOzExMEUgMTE3MSAxMUE5OworQ0RFQjtDREVCOzExMEUgMTE3MSAxMUFBO0NERUI7MTEwRSAxMTcxIDExQUE7CitDREVDO0NERUM7MTEwRSAxMTcxIDExQUI7Q0RFQzsxMTBFIDExNzEgMTFBQjsKK0NERUQ7Q0RFRDsxMTBFIDExNzEgMTFBQztDREVEOzExMEUgMTE3MSAxMUFDOworQ0RFRTtDREVFOzExMEUgMTE3MSAxMUFEO0NERUU7MTEwRSAxMTcxIDExQUQ7CitDREVGO0NERUY7MTEwRSAxMTcxIDExQUU7Q0RFRjsxMTBFIDExNzEgMTFBRTsKK0NERjA7Q0RGMDsxMTBFIDExNzEgMTFBRjtDREYwOzExMEUgMTE3MSAxMUFGOworQ0RGMTtDREYxOzExMEUgMTE3MSAxMUIwO0NERjE7MTEwRSAxMTcxIDExQjA7CitDREYyO0NERjI7MTEwRSAxMTcxIDExQjE7Q0RGMjsxMTBFIDExNzEgMTFCMTsKK0NERjM7Q0RGMzsxMTBFIDExNzEgMTFCMjtDREYzOzExMEUgMTE3MSAxMUIyOworQ0RGNDtDREY0OzExMEUgMTE3MSAxMUIzO0NERjQ7MTEwRSAxMTcxIDExQjM7CitDREY1O0NERjU7MTEwRSAxMTcxIDExQjQ7Q0RGNTsxMTBFIDExNzEgMTFCNDsKK0NERjY7Q0RGNjsxMTBFIDExNzEgMTFCNTtDREY2OzExMEUgMTE3MSAxMUI1OworQ0RGNztDREY3OzExMEUgMTE3MSAxMUI2O0NERjc7MTEwRSAxMTcxIDExQjY7CitDREY4O0NERjg7MTEwRSAxMTcxIDExQjc7Q0RGODsxMTBFIDExNzEgMTFCNzsKK0NERjk7Q0RGOTsxMTBFIDExNzEgMTFCODtDREY5OzExMEUgMTE3MSAxMUI4OworQ0RGQTtDREZBOzExMEUgMTE3MSAxMUI5O0NERkE7MTEwRSAxMTcxIDExQjk7CitDREZCO0NERkI7MTEwRSAxMTcxIDExQkE7Q0RGQjsxMTBFIDExNzEgMTFCQTsKK0NERkM7Q0RGQzsxMTBFIDExNzEgMTFCQjtDREZDOzExMEUgMTE3MSAxMUJCOworQ0RGRDtDREZEOzExMEUgMTE3MSAxMUJDO0NERkQ7MTEwRSAxMTcxIDExQkM7CitDREZFO0NERkU7MTEwRSAxMTcxIDExQkQ7Q0RGRTsxMTBFIDExNzEgMTFCRDsKK0NERkY7Q0RGRjsxMTBFIDExNzEgMTFCRTtDREZGOzExMEUgMTE3MSAxMUJFOworQ0UwMDtDRTAwOzExMEUgMTE3MSAxMUJGO0NFMDA7MTEwRSAxMTcxIDExQkY7CitDRTAxO0NFMDE7MTEwRSAxMTcxIDExQzA7Q0UwMTsxMTBFIDExNzEgMTFDMDsKK0NFMDI7Q0UwMjsxMTBFIDExNzEgMTFDMTtDRTAyOzExMEUgMTE3MSAxMUMxOworQ0UwMztDRTAzOzExMEUgMTE3MSAxMUMyO0NFMDM7MTEwRSAxMTcxIDExQzI7CitDRTA0O0NFMDQ7MTEwRSAxMTcyO0NFMDQ7MTEwRSAxMTcyOworQ0UwNTtDRTA1OzExMEUgMTE3MiAxMUE4O0NFMDU7MTEwRSAxMTcyIDExQTg7CitDRTA2O0NFMDY7MTEwRSAxMTcyIDExQTk7Q0UwNjsxMTBFIDExNzIgMTFBOTsKK0NFMDc7Q0UwNzsxMTBFIDExNzIgMTFBQTtDRTA3OzExMEUgMTE3MiAxMUFBOworQ0UwODtDRTA4OzExMEUgMTE3MiAxMUFCO0NFMDg7MTEwRSAxMTcyIDExQUI7CitDRTA5O0NFMDk7MTEwRSAxMTcyIDExQUM7Q0UwOTsxMTBFIDExNzIgMTFBQzsKK0NFMEE7Q0UwQTsxMTBFIDExNzIgMTFBRDtDRTBBOzExMEUgMTE3MiAxMUFEOworQ0UwQjtDRTBCOzExMEUgMTE3MiAxMUFFO0NFMEI7MTEwRSAxMTcyIDExQUU7CitDRTBDO0NFMEM7MTEwRSAxMTcyIDExQUY7Q0UwQzsxMTBFIDExNzIgMTFBRjsKK0NFMEQ7Q0UwRDsxMTBFIDExNzIgMTFCMDtDRTBEOzExMEUgMTE3MiAxMUIwOworQ0UwRTtDRTBFOzExMEUgMTE3MiAxMUIxO0NFMEU7MTEwRSAxMTcyIDExQjE7CitDRTBGO0NFMEY7MTEwRSAxMTcyIDExQjI7Q0UwRjsxMTBFIDExNzIgMTFCMjsKK0NFMTA7Q0UxMDsxMTBFIDExNzIgMTFCMztDRTEwOzExMEUgMTE3MiAxMUIzOworQ0UxMTtDRTExOzExMEUgMTE3MiAxMUI0O0NFMTE7MTEwRSAxMTcyIDExQjQ7CitDRTEyO0NFMTI7MTEwRSAxMTcyIDExQjU7Q0UxMjsxMTBFIDExNzIgMTFCNTsKK0NFMTM7Q0UxMzsxMTBFIDExNzIgMTFCNjtDRTEzOzExMEUgMTE3MiAxMUI2OworQ0UxNDtDRTE0OzExMEUgMTE3MiAxMUI3O0NFMTQ7MTEwRSAxMTcyIDExQjc7CitDRTE1O0NFMTU7MTEwRSAxMTcyIDExQjg7Q0UxNTsxMTBFIDExNzIgMTFCODsKK0NFMTY7Q0UxNjsxMTBFIDExNzIgMTFCOTtDRTE2OzExMEUgMTE3MiAxMUI5OworQ0UxNztDRTE3OzExMEUgMTE3MiAxMUJBO0NFMTc7MTEwRSAxMTcyIDExQkE7CitDRTE4O0NFMTg7MTEwRSAxMTcyIDExQkI7Q0UxODsxMTBFIDExNzIgMTFCQjsKK0NFMTk7Q0UxOTsxMTBFIDExNzIgMTFCQztDRTE5OzExMEUgMTE3MiAxMUJDOworQ0UxQTtDRTFBOzExMEUgMTE3MiAxMUJEO0NFMUE7MTEwRSAxMTcyIDExQkQ7CitDRTFCO0NFMUI7MTEwRSAxMTcyIDExQkU7Q0UxQjsxMTBFIDExNzIgMTFCRTsKK0NFMUM7Q0UxQzsxMTBFIDExNzIgMTFCRjtDRTFDOzExMEUgMTE3MiAxMUJGOworQ0UxRDtDRTFEOzExMEUgMTE3MiAxMUMwO0NFMUQ7MTEwRSAxMTcyIDExQzA7CitDRTFFO0NFMUU7MTEwRSAxMTcyIDExQzE7Q0UxRTsxMTBFIDExNzIgMTFDMTsKK0NFMUY7Q0UxRjsxMTBFIDExNzIgMTFDMjtDRTFGOzExMEUgMTE3MiAxMUMyOworQ0UyMDtDRTIwOzExMEUgMTE3MztDRTIwOzExMEUgMTE3MzsKK0NFMjE7Q0UyMTsxMTBFIDExNzMgMTFBODtDRTIxOzExMEUgMTE3MyAxMUE4OworQ0UyMjtDRTIyOzExMEUgMTE3MyAxMUE5O0NFMjI7MTEwRSAxMTczIDExQTk7CitDRTIzO0NFMjM7MTEwRSAxMTczIDExQUE7Q0UyMzsxMTBFIDExNzMgMTFBQTsKK0NFMjQ7Q0UyNDsxMTBFIDExNzMgMTFBQjtDRTI0OzExMEUgMTE3MyAxMUFCOworQ0UyNTtDRTI1OzExMEUgMTE3MyAxMUFDO0NFMjU7MTEwRSAxMTczIDExQUM7CitDRTI2O0NFMjY7MTEwRSAxMTczIDExQUQ7Q0UyNjsxMTBFIDExNzMgMTFBRDsKK0NFMjc7Q0UyNzsxMTBFIDExNzMgMTFBRTtDRTI3OzExMEUgMTE3MyAxMUFFOworQ0UyODtDRTI4OzExMEUgMTE3MyAxMUFGO0NFMjg7MTEwRSAxMTczIDExQUY7CitDRTI5O0NFMjk7MTEwRSAxMTczIDExQjA7Q0UyOTsxMTBFIDExNzMgMTFCMDsKK0NFMkE7Q0UyQTsxMTBFIDExNzMgMTFCMTtDRTJBOzExMEUgMTE3MyAxMUIxOworQ0UyQjtDRTJCOzExMEUgMTE3MyAxMUIyO0NFMkI7MTEwRSAxMTczIDExQjI7CitDRTJDO0NFMkM7MTEwRSAxMTczIDExQjM7Q0UyQzsxMTBFIDExNzMgMTFCMzsKK0NFMkQ7Q0UyRDsxMTBFIDExNzMgMTFCNDtDRTJEOzExMEUgMTE3MyAxMUI0OworQ0UyRTtDRTJFOzExMEUgMTE3MyAxMUI1O0NFMkU7MTEwRSAxMTczIDExQjU7CitDRTJGO0NFMkY7MTEwRSAxMTczIDExQjY7Q0UyRjsxMTBFIDExNzMgMTFCNjsKK0NFMzA7Q0UzMDsxMTBFIDExNzMgMTFCNztDRTMwOzExMEUgMTE3MyAxMUI3OworQ0UzMTtDRTMxOzExMEUgMTE3MyAxMUI4O0NFMzE7MTEwRSAxMTczIDExQjg7CitDRTMyO0NFMzI7MTEwRSAxMTczIDExQjk7Q0UzMjsxMTBFIDExNzMgMTFCOTsKK0NFMzM7Q0UzMzsxMTBFIDExNzMgMTFCQTtDRTMzOzExMEUgMTE3MyAxMUJBOworQ0UzNDtDRTM0OzExMEUgMTE3MyAxMUJCO0NFMzQ7MTEwRSAxMTczIDExQkI7CitDRTM1O0NFMzU7MTEwRSAxMTczIDExQkM7Q0UzNTsxMTBFIDExNzMgMTFCQzsKK0NFMzY7Q0UzNjsxMTBFIDExNzMgMTFCRDtDRTM2OzExMEUgMTE3MyAxMUJEOworQ0UzNztDRTM3OzExMEUgMTE3MyAxMUJFO0NFMzc7MTEwRSAxMTczIDExQkU7CitDRTM4O0NFMzg7MTEwRSAxMTczIDExQkY7Q0UzODsxMTBFIDExNzMgMTFCRjsKK0NFMzk7Q0UzOTsxMTBFIDExNzMgMTFDMDtDRTM5OzExMEUgMTE3MyAxMUMwOworQ0UzQTtDRTNBOzExMEUgMTE3MyAxMUMxO0NFM0E7MTEwRSAxMTczIDExQzE7CitDRTNCO0NFM0I7MTEwRSAxMTczIDExQzI7Q0UzQjsxMTBFIDExNzMgMTFDMjsKK0NFM0M7Q0UzQzsxMTBFIDExNzQ7Q0UzQzsxMTBFIDExNzQ7CitDRTNEO0NFM0Q7MTEwRSAxMTc0IDExQTg7Q0UzRDsxMTBFIDExNzQgMTFBODsKK0NFM0U7Q0UzRTsxMTBFIDExNzQgMTFBOTtDRTNFOzExMEUgMTE3NCAxMUE5OworQ0UzRjtDRTNGOzExMEUgMTE3NCAxMUFBO0NFM0Y7MTEwRSAxMTc0IDExQUE7CitDRTQwO0NFNDA7MTEwRSAxMTc0IDExQUI7Q0U0MDsxMTBFIDExNzQgMTFBQjsKK0NFNDE7Q0U0MTsxMTBFIDExNzQgMTFBQztDRTQxOzExMEUgMTE3NCAxMUFDOworQ0U0MjtDRTQyOzExMEUgMTE3NCAxMUFEO0NFNDI7MTEwRSAxMTc0IDExQUQ7CitDRTQzO0NFNDM7MTEwRSAxMTc0IDExQUU7Q0U0MzsxMTBFIDExNzQgMTFBRTsKK0NFNDQ7Q0U0NDsxMTBFIDExNzQgMTFBRjtDRTQ0OzExMEUgMTE3NCAxMUFGOworQ0U0NTtDRTQ1OzExMEUgMTE3NCAxMUIwO0NFNDU7MTEwRSAxMTc0IDExQjA7CitDRTQ2O0NFNDY7MTEwRSAxMTc0IDExQjE7Q0U0NjsxMTBFIDExNzQgMTFCMTsKK0NFNDc7Q0U0NzsxMTBFIDExNzQgMTFCMjtDRTQ3OzExMEUgMTE3NCAxMUIyOworQ0U0ODtDRTQ4OzExMEUgMTE3NCAxMUIzO0NFNDg7MTEwRSAxMTc0IDExQjM7CitDRTQ5O0NFNDk7MTEwRSAxMTc0IDExQjQ7Q0U0OTsxMTBFIDExNzQgMTFCNDsKK0NFNEE7Q0U0QTsxMTBFIDExNzQgMTFCNTtDRTRBOzExMEUgMTE3NCAxMUI1OworQ0U0QjtDRTRCOzExMEUgMTE3NCAxMUI2O0NFNEI7MTEwRSAxMTc0IDExQjY7CitDRTRDO0NFNEM7MTEwRSAxMTc0IDExQjc7Q0U0QzsxMTBFIDExNzQgMTFCNzsKK0NFNEQ7Q0U0RDsxMTBFIDExNzQgMTFCODtDRTREOzExMEUgMTE3NCAxMUI4OworQ0U0RTtDRTRFOzExMEUgMTE3NCAxMUI5O0NFNEU7MTEwRSAxMTc0IDExQjk7CitDRTRGO0NFNEY7MTEwRSAxMTc0IDExQkE7Q0U0RjsxMTBFIDExNzQgMTFCQTsKK0NFNTA7Q0U1MDsxMTBFIDExNzQgMTFCQjtDRTUwOzExMEUgMTE3NCAxMUJCOworQ0U1MTtDRTUxOzExMEUgMTE3NCAxMUJDO0NFNTE7MTEwRSAxMTc0IDExQkM7CitDRTUyO0NFNTI7MTEwRSAxMTc0IDExQkQ7Q0U1MjsxMTBFIDExNzQgMTFCRDsKK0NFNTM7Q0U1MzsxMTBFIDExNzQgMTFCRTtDRTUzOzExMEUgMTE3NCAxMUJFOworQ0U1NDtDRTU0OzExMEUgMTE3NCAxMUJGO0NFNTQ7MTEwRSAxMTc0IDExQkY7CitDRTU1O0NFNTU7MTEwRSAxMTc0IDExQzA7Q0U1NTsxMTBFIDExNzQgMTFDMDsKK0NFNTY7Q0U1NjsxMTBFIDExNzQgMTFDMTtDRTU2OzExMEUgMTE3NCAxMUMxOworQ0U1NztDRTU3OzExMEUgMTE3NCAxMUMyO0NFNTc7MTEwRSAxMTc0IDExQzI7CitDRTU4O0NFNTg7MTEwRSAxMTc1O0NFNTg7MTEwRSAxMTc1OworQ0U1OTtDRTU5OzExMEUgMTE3NSAxMUE4O0NFNTk7MTEwRSAxMTc1IDExQTg7CitDRTVBO0NFNUE7MTEwRSAxMTc1IDExQTk7Q0U1QTsxMTBFIDExNzUgMTFBOTsKK0NFNUI7Q0U1QjsxMTBFIDExNzUgMTFBQTtDRTVCOzExMEUgMTE3NSAxMUFBOworQ0U1QztDRTVDOzExMEUgMTE3NSAxMUFCO0NFNUM7MTEwRSAxMTc1IDExQUI7CitDRTVEO0NFNUQ7MTEwRSAxMTc1IDExQUM7Q0U1RDsxMTBFIDExNzUgMTFBQzsKK0NFNUU7Q0U1RTsxMTBFIDExNzUgMTFBRDtDRTVFOzExMEUgMTE3NSAxMUFEOworQ0U1RjtDRTVGOzExMEUgMTE3NSAxMUFFO0NFNUY7MTEwRSAxMTc1IDExQUU7CitDRTYwO0NFNjA7MTEwRSAxMTc1IDExQUY7Q0U2MDsxMTBFIDExNzUgMTFBRjsKK0NFNjE7Q0U2MTsxMTBFIDExNzUgMTFCMDtDRTYxOzExMEUgMTE3NSAxMUIwOworQ0U2MjtDRTYyOzExMEUgMTE3NSAxMUIxO0NFNjI7MTEwRSAxMTc1IDExQjE7CitDRTYzO0NFNjM7MTEwRSAxMTc1IDExQjI7Q0U2MzsxMTBFIDExNzUgMTFCMjsKK0NFNjQ7Q0U2NDsxMTBFIDExNzUgMTFCMztDRTY0OzExMEUgMTE3NSAxMUIzOworQ0U2NTtDRTY1OzExMEUgMTE3NSAxMUI0O0NFNjU7MTEwRSAxMTc1IDExQjQ7CitDRTY2O0NFNjY7MTEwRSAxMTc1IDExQjU7Q0U2NjsxMTBFIDExNzUgMTFCNTsKK0NFNjc7Q0U2NzsxMTBFIDExNzUgMTFCNjtDRTY3OzExMEUgMTE3NSAxMUI2OworQ0U2ODtDRTY4OzExMEUgMTE3NSAxMUI3O0NFNjg7MTEwRSAxMTc1IDExQjc7CitDRTY5O0NFNjk7MTEwRSAxMTc1IDExQjg7Q0U2OTsxMTBFIDExNzUgMTFCODsKK0NFNkE7Q0U2QTsxMTBFIDExNzUgMTFCOTtDRTZBOzExMEUgMTE3NSAxMUI5OworQ0U2QjtDRTZCOzExMEUgMTE3NSAxMUJBO0NFNkI7MTEwRSAxMTc1IDExQkE7CitDRTZDO0NFNkM7MTEwRSAxMTc1IDExQkI7Q0U2QzsxMTBFIDExNzUgMTFCQjsKK0NFNkQ7Q0U2RDsxMTBFIDExNzUgMTFCQztDRTZEOzExMEUgMTE3NSAxMUJDOworQ0U2RTtDRTZFOzExMEUgMTE3NSAxMUJEO0NFNkU7MTEwRSAxMTc1IDExQkQ7CitDRTZGO0NFNkY7MTEwRSAxMTc1IDExQkU7Q0U2RjsxMTBFIDExNzUgMTFCRTsKK0NFNzA7Q0U3MDsxMTBFIDExNzUgMTFCRjtDRTcwOzExMEUgMTE3NSAxMUJGOworQ0U3MTtDRTcxOzExMEUgMTE3NSAxMUMwO0NFNzE7MTEwRSAxMTc1IDExQzA7CitDRTcyO0NFNzI7MTEwRSAxMTc1IDExQzE7Q0U3MjsxMTBFIDExNzUgMTFDMTsKK0NFNzM7Q0U3MzsxMTBFIDExNzUgMTFDMjtDRTczOzExMEUgMTE3NSAxMUMyOworQ0U3NDtDRTc0OzExMEYgMTE2MTtDRTc0OzExMEYgMTE2MTsKK0NFNzU7Q0U3NTsxMTBGIDExNjEgMTFBODtDRTc1OzExMEYgMTE2MSAxMUE4OworQ0U3NjtDRTc2OzExMEYgMTE2MSAxMUE5O0NFNzY7MTEwRiAxMTYxIDExQTk7CitDRTc3O0NFNzc7MTEwRiAxMTYxIDExQUE7Q0U3NzsxMTBGIDExNjEgMTFBQTsKK0NFNzg7Q0U3ODsxMTBGIDExNjEgMTFBQjtDRTc4OzExMEYgMTE2MSAxMUFCOworQ0U3OTtDRTc5OzExMEYgMTE2MSAxMUFDO0NFNzk7MTEwRiAxMTYxIDExQUM7CitDRTdBO0NFN0E7MTEwRiAxMTYxIDExQUQ7Q0U3QTsxMTBGIDExNjEgMTFBRDsKK0NFN0I7Q0U3QjsxMTBGIDExNjEgMTFBRTtDRTdCOzExMEYgMTE2MSAxMUFFOworQ0U3QztDRTdDOzExMEYgMTE2MSAxMUFGO0NFN0M7MTEwRiAxMTYxIDExQUY7CitDRTdEO0NFN0Q7MTEwRiAxMTYxIDExQjA7Q0U3RDsxMTBGIDExNjEgMTFCMDsKK0NFN0U7Q0U3RTsxMTBGIDExNjEgMTFCMTtDRTdFOzExMEYgMTE2MSAxMUIxOworQ0U3RjtDRTdGOzExMEYgMTE2MSAxMUIyO0NFN0Y7MTEwRiAxMTYxIDExQjI7CitDRTgwO0NFODA7MTEwRiAxMTYxIDExQjM7Q0U4MDsxMTBGIDExNjEgMTFCMzsKK0NFODE7Q0U4MTsxMTBGIDExNjEgMTFCNDtDRTgxOzExMEYgMTE2MSAxMUI0OworQ0U4MjtDRTgyOzExMEYgMTE2MSAxMUI1O0NFODI7MTEwRiAxMTYxIDExQjU7CitDRTgzO0NFODM7MTEwRiAxMTYxIDExQjY7Q0U4MzsxMTBGIDExNjEgMTFCNjsKK0NFODQ7Q0U4NDsxMTBGIDExNjEgMTFCNztDRTg0OzExMEYgMTE2MSAxMUI3OworQ0U4NTtDRTg1OzExMEYgMTE2MSAxMUI4O0NFODU7MTEwRiAxMTYxIDExQjg7CitDRTg2O0NFODY7MTEwRiAxMTYxIDExQjk7Q0U4NjsxMTBGIDExNjEgMTFCOTsKK0NFODc7Q0U4NzsxMTBGIDExNjEgMTFCQTtDRTg3OzExMEYgMTE2MSAxMUJBOworQ0U4ODtDRTg4OzExMEYgMTE2MSAxMUJCO0NFODg7MTEwRiAxMTYxIDExQkI7CitDRTg5O0NFODk7MTEwRiAxMTYxIDExQkM7Q0U4OTsxMTBGIDExNjEgMTFCQzsKK0NFOEE7Q0U4QTsxMTBGIDExNjEgMTFCRDtDRThBOzExMEYgMTE2MSAxMUJEOworQ0U4QjtDRThCOzExMEYgMTE2MSAxMUJFO0NFOEI7MTEwRiAxMTYxIDExQkU7CitDRThDO0NFOEM7MTEwRiAxMTYxIDExQkY7Q0U4QzsxMTBGIDExNjEgMTFCRjsKK0NFOEQ7Q0U4RDsxMTBGIDExNjEgMTFDMDtDRThEOzExMEYgMTE2MSAxMUMwOworQ0U4RTtDRThFOzExMEYgMTE2MSAxMUMxO0NFOEU7MTEwRiAxMTYxIDExQzE7CitDRThGO0NFOEY7MTEwRiAxMTYxIDExQzI7Q0U4RjsxMTBGIDExNjEgMTFDMjsKK0NFOTA7Q0U5MDsxMTBGIDExNjI7Q0U5MDsxMTBGIDExNjI7CitDRTkxO0NFOTE7MTEwRiAxMTYyIDExQTg7Q0U5MTsxMTBGIDExNjIgMTFBODsKK0NFOTI7Q0U5MjsxMTBGIDExNjIgMTFBOTtDRTkyOzExMEYgMTE2MiAxMUE5OworQ0U5MztDRTkzOzExMEYgMTE2MiAxMUFBO0NFOTM7MTEwRiAxMTYyIDExQUE7CitDRTk0O0NFOTQ7MTEwRiAxMTYyIDExQUI7Q0U5NDsxMTBGIDExNjIgMTFBQjsKK0NFOTU7Q0U5NTsxMTBGIDExNjIgMTFBQztDRTk1OzExMEYgMTE2MiAxMUFDOworQ0U5NjtDRTk2OzExMEYgMTE2MiAxMUFEO0NFOTY7MTEwRiAxMTYyIDExQUQ7CitDRTk3O0NFOTc7MTEwRiAxMTYyIDExQUU7Q0U5NzsxMTBGIDExNjIgMTFBRTsKK0NFOTg7Q0U5ODsxMTBGIDExNjIgMTFBRjtDRTk4OzExMEYgMTE2MiAxMUFGOworQ0U5OTtDRTk5OzExMEYgMTE2MiAxMUIwO0NFOTk7MTEwRiAxMTYyIDExQjA7CitDRTlBO0NFOUE7MTEwRiAxMTYyIDExQjE7Q0U5QTsxMTBGIDExNjIgMTFCMTsKK0NFOUI7Q0U5QjsxMTBGIDExNjIgMTFCMjtDRTlCOzExMEYgMTE2MiAxMUIyOworQ0U5QztDRTlDOzExMEYgMTE2MiAxMUIzO0NFOUM7MTEwRiAxMTYyIDExQjM7CitDRTlEO0NFOUQ7MTEwRiAxMTYyIDExQjQ7Q0U5RDsxMTBGIDExNjIgMTFCNDsKK0NFOUU7Q0U5RTsxMTBGIDExNjIgMTFCNTtDRTlFOzExMEYgMTE2MiAxMUI1OworQ0U5RjtDRTlGOzExMEYgMTE2MiAxMUI2O0NFOUY7MTEwRiAxMTYyIDExQjY7CitDRUEwO0NFQTA7MTEwRiAxMTYyIDExQjc7Q0VBMDsxMTBGIDExNjIgMTFCNzsKK0NFQTE7Q0VBMTsxMTBGIDExNjIgMTFCODtDRUExOzExMEYgMTE2MiAxMUI4OworQ0VBMjtDRUEyOzExMEYgMTE2MiAxMUI5O0NFQTI7MTEwRiAxMTYyIDExQjk7CitDRUEzO0NFQTM7MTEwRiAxMTYyIDExQkE7Q0VBMzsxMTBGIDExNjIgMTFCQTsKK0NFQTQ7Q0VBNDsxMTBGIDExNjIgMTFCQjtDRUE0OzExMEYgMTE2MiAxMUJCOworQ0VBNTtDRUE1OzExMEYgMTE2MiAxMUJDO0NFQTU7MTEwRiAxMTYyIDExQkM7CitDRUE2O0NFQTY7MTEwRiAxMTYyIDExQkQ7Q0VBNjsxMTBGIDExNjIgMTFCRDsKK0NFQTc7Q0VBNzsxMTBGIDExNjIgMTFCRTtDRUE3OzExMEYgMTE2MiAxMUJFOworQ0VBODtDRUE4OzExMEYgMTE2MiAxMUJGO0NFQTg7MTEwRiAxMTYyIDExQkY7CitDRUE5O0NFQTk7MTEwRiAxMTYyIDExQzA7Q0VBOTsxMTBGIDExNjIgMTFDMDsKK0NFQUE7Q0VBQTsxMTBGIDExNjIgMTFDMTtDRUFBOzExMEYgMTE2MiAxMUMxOworQ0VBQjtDRUFCOzExMEYgMTE2MiAxMUMyO0NFQUI7MTEwRiAxMTYyIDExQzI7CitDRUFDO0NFQUM7MTEwRiAxMTYzO0NFQUM7MTEwRiAxMTYzOworQ0VBRDtDRUFEOzExMEYgMTE2MyAxMUE4O0NFQUQ7MTEwRiAxMTYzIDExQTg7CitDRUFFO0NFQUU7MTEwRiAxMTYzIDExQTk7Q0VBRTsxMTBGIDExNjMgMTFBOTsKK0NFQUY7Q0VBRjsxMTBGIDExNjMgMTFBQTtDRUFGOzExMEYgMTE2MyAxMUFBOworQ0VCMDtDRUIwOzExMEYgMTE2MyAxMUFCO0NFQjA7MTEwRiAxMTYzIDExQUI7CitDRUIxO0NFQjE7MTEwRiAxMTYzIDExQUM7Q0VCMTsxMTBGIDExNjMgMTFBQzsKK0NFQjI7Q0VCMjsxMTBGIDExNjMgMTFBRDtDRUIyOzExMEYgMTE2MyAxMUFEOworQ0VCMztDRUIzOzExMEYgMTE2MyAxMUFFO0NFQjM7MTEwRiAxMTYzIDExQUU7CitDRUI0O0NFQjQ7MTEwRiAxMTYzIDExQUY7Q0VCNDsxMTBGIDExNjMgMTFBRjsKK0NFQjU7Q0VCNTsxMTBGIDExNjMgMTFCMDtDRUI1OzExMEYgMTE2MyAxMUIwOworQ0VCNjtDRUI2OzExMEYgMTE2MyAxMUIxO0NFQjY7MTEwRiAxMTYzIDExQjE7CitDRUI3O0NFQjc7MTEwRiAxMTYzIDExQjI7Q0VCNzsxMTBGIDExNjMgMTFCMjsKK0NFQjg7Q0VCODsxMTBGIDExNjMgMTFCMztDRUI4OzExMEYgMTE2MyAxMUIzOworQ0VCOTtDRUI5OzExMEYgMTE2MyAxMUI0O0NFQjk7MTEwRiAxMTYzIDExQjQ7CitDRUJBO0NFQkE7MTEwRiAxMTYzIDExQjU7Q0VCQTsxMTBGIDExNjMgMTFCNTsKK0NFQkI7Q0VCQjsxMTBGIDExNjMgMTFCNjtDRUJCOzExMEYgMTE2MyAxMUI2OworQ0VCQztDRUJDOzExMEYgMTE2MyAxMUI3O0NFQkM7MTEwRiAxMTYzIDExQjc7CitDRUJEO0NFQkQ7MTEwRiAxMTYzIDExQjg7Q0VCRDsxMTBGIDExNjMgMTFCODsKK0NFQkU7Q0VCRTsxMTBGIDExNjMgMTFCOTtDRUJFOzExMEYgMTE2MyAxMUI5OworQ0VCRjtDRUJGOzExMEYgMTE2MyAxMUJBO0NFQkY7MTEwRiAxMTYzIDExQkE7CitDRUMwO0NFQzA7MTEwRiAxMTYzIDExQkI7Q0VDMDsxMTBGIDExNjMgMTFCQjsKK0NFQzE7Q0VDMTsxMTBGIDExNjMgMTFCQztDRUMxOzExMEYgMTE2MyAxMUJDOworQ0VDMjtDRUMyOzExMEYgMTE2MyAxMUJEO0NFQzI7MTEwRiAxMTYzIDExQkQ7CitDRUMzO0NFQzM7MTEwRiAxMTYzIDExQkU7Q0VDMzsxMTBGIDExNjMgMTFCRTsKK0NFQzQ7Q0VDNDsxMTBGIDExNjMgMTFCRjtDRUM0OzExMEYgMTE2MyAxMUJGOworQ0VDNTtDRUM1OzExMEYgMTE2MyAxMUMwO0NFQzU7MTEwRiAxMTYzIDExQzA7CitDRUM2O0NFQzY7MTEwRiAxMTYzIDExQzE7Q0VDNjsxMTBGIDExNjMgMTFDMTsKK0NFQzc7Q0VDNzsxMTBGIDExNjMgMTFDMjtDRUM3OzExMEYgMTE2MyAxMUMyOworQ0VDODtDRUM4OzExMEYgMTE2NDtDRUM4OzExMEYgMTE2NDsKK0NFQzk7Q0VDOTsxMTBGIDExNjQgMTFBODtDRUM5OzExMEYgMTE2NCAxMUE4OworQ0VDQTtDRUNBOzExMEYgMTE2NCAxMUE5O0NFQ0E7MTEwRiAxMTY0IDExQTk7CitDRUNCO0NFQ0I7MTEwRiAxMTY0IDExQUE7Q0VDQjsxMTBGIDExNjQgMTFBQTsKK0NFQ0M7Q0VDQzsxMTBGIDExNjQgMTFBQjtDRUNDOzExMEYgMTE2NCAxMUFCOworQ0VDRDtDRUNEOzExMEYgMTE2NCAxMUFDO0NFQ0Q7MTEwRiAxMTY0IDExQUM7CitDRUNFO0NFQ0U7MTEwRiAxMTY0IDExQUQ7Q0VDRTsxMTBGIDExNjQgMTFBRDsKK0NFQ0Y7Q0VDRjsxMTBGIDExNjQgMTFBRTtDRUNGOzExMEYgMTE2NCAxMUFFOworQ0VEMDtDRUQwOzExMEYgMTE2NCAxMUFGO0NFRDA7MTEwRiAxMTY0IDExQUY7CitDRUQxO0NFRDE7MTEwRiAxMTY0IDExQjA7Q0VEMTsxMTBGIDExNjQgMTFCMDsKK0NFRDI7Q0VEMjsxMTBGIDExNjQgMTFCMTtDRUQyOzExMEYgMTE2NCAxMUIxOworQ0VEMztDRUQzOzExMEYgMTE2NCAxMUIyO0NFRDM7MTEwRiAxMTY0IDExQjI7CitDRUQ0O0NFRDQ7MTEwRiAxMTY0IDExQjM7Q0VENDsxMTBGIDExNjQgMTFCMzsKK0NFRDU7Q0VENTsxMTBGIDExNjQgMTFCNDtDRUQ1OzExMEYgMTE2NCAxMUI0OworQ0VENjtDRUQ2OzExMEYgMTE2NCAxMUI1O0NFRDY7MTEwRiAxMTY0IDExQjU7CitDRUQ3O0NFRDc7MTEwRiAxMTY0IDExQjY7Q0VENzsxMTBGIDExNjQgMTFCNjsKK0NFRDg7Q0VEODsxMTBGIDExNjQgMTFCNztDRUQ4OzExMEYgMTE2NCAxMUI3OworQ0VEOTtDRUQ5OzExMEYgMTE2NCAxMUI4O0NFRDk7MTEwRiAxMTY0IDExQjg7CitDRURBO0NFREE7MTEwRiAxMTY0IDExQjk7Q0VEQTsxMTBGIDExNjQgMTFCOTsKK0NFREI7Q0VEQjsxMTBGIDExNjQgMTFCQTtDRURCOzExMEYgMTE2NCAxMUJBOworQ0VEQztDRURDOzExMEYgMTE2NCAxMUJCO0NFREM7MTEwRiAxMTY0IDExQkI7CitDRUREO0NFREQ7MTEwRiAxMTY0IDExQkM7Q0VERDsxMTBGIDExNjQgMTFCQzsKK0NFREU7Q0VERTsxMTBGIDExNjQgMTFCRDtDRURFOzExMEYgMTE2NCAxMUJEOworQ0VERjtDRURGOzExMEYgMTE2NCAxMUJFO0NFREY7MTEwRiAxMTY0IDExQkU7CitDRUUwO0NFRTA7MTEwRiAxMTY0IDExQkY7Q0VFMDsxMTBGIDExNjQgMTFCRjsKK0NFRTE7Q0VFMTsxMTBGIDExNjQgMTFDMDtDRUUxOzExMEYgMTE2NCAxMUMwOworQ0VFMjtDRUUyOzExMEYgMTE2NCAxMUMxO0NFRTI7MTEwRiAxMTY0IDExQzE7CitDRUUzO0NFRTM7MTEwRiAxMTY0IDExQzI7Q0VFMzsxMTBGIDExNjQgMTFDMjsKK0NFRTQ7Q0VFNDsxMTBGIDExNjU7Q0VFNDsxMTBGIDExNjU7CitDRUU1O0NFRTU7MTEwRiAxMTY1IDExQTg7Q0VFNTsxMTBGIDExNjUgMTFBODsKK0NFRTY7Q0VFNjsxMTBGIDExNjUgMTFBOTtDRUU2OzExMEYgMTE2NSAxMUE5OworQ0VFNztDRUU3OzExMEYgMTE2NSAxMUFBO0NFRTc7MTEwRiAxMTY1IDExQUE7CitDRUU4O0NFRTg7MTEwRiAxMTY1IDExQUI7Q0VFODsxMTBGIDExNjUgMTFBQjsKK0NFRTk7Q0VFOTsxMTBGIDExNjUgMTFBQztDRUU5OzExMEYgMTE2NSAxMUFDOworQ0VFQTtDRUVBOzExMEYgMTE2NSAxMUFEO0NFRUE7MTEwRiAxMTY1IDExQUQ7CitDRUVCO0NFRUI7MTEwRiAxMTY1IDExQUU7Q0VFQjsxMTBGIDExNjUgMTFBRTsKK0NFRUM7Q0VFQzsxMTBGIDExNjUgMTFBRjtDRUVDOzExMEYgMTE2NSAxMUFGOworQ0VFRDtDRUVEOzExMEYgMTE2NSAxMUIwO0NFRUQ7MTEwRiAxMTY1IDExQjA7CitDRUVFO0NFRUU7MTEwRiAxMTY1IDExQjE7Q0VFRTsxMTBGIDExNjUgMTFCMTsKK0NFRUY7Q0VFRjsxMTBGIDExNjUgMTFCMjtDRUVGOzExMEYgMTE2NSAxMUIyOworQ0VGMDtDRUYwOzExMEYgMTE2NSAxMUIzO0NFRjA7MTEwRiAxMTY1IDExQjM7CitDRUYxO0NFRjE7MTEwRiAxMTY1IDExQjQ7Q0VGMTsxMTBGIDExNjUgMTFCNDsKK0NFRjI7Q0VGMjsxMTBGIDExNjUgMTFCNTtDRUYyOzExMEYgMTE2NSAxMUI1OworQ0VGMztDRUYzOzExMEYgMTE2NSAxMUI2O0NFRjM7MTEwRiAxMTY1IDExQjY7CitDRUY0O0NFRjQ7MTEwRiAxMTY1IDExQjc7Q0VGNDsxMTBGIDExNjUgMTFCNzsKK0NFRjU7Q0VGNTsxMTBGIDExNjUgMTFCODtDRUY1OzExMEYgMTE2NSAxMUI4OworQ0VGNjtDRUY2OzExMEYgMTE2NSAxMUI5O0NFRjY7MTEwRiAxMTY1IDExQjk7CitDRUY3O0NFRjc7MTEwRiAxMTY1IDExQkE7Q0VGNzsxMTBGIDExNjUgMTFCQTsKK0NFRjg7Q0VGODsxMTBGIDExNjUgMTFCQjtDRUY4OzExMEYgMTE2NSAxMUJCOworQ0VGOTtDRUY5OzExMEYgMTE2NSAxMUJDO0NFRjk7MTEwRiAxMTY1IDExQkM7CitDRUZBO0NFRkE7MTEwRiAxMTY1IDExQkQ7Q0VGQTsxMTBGIDExNjUgMTFCRDsKK0NFRkI7Q0VGQjsxMTBGIDExNjUgMTFCRTtDRUZCOzExMEYgMTE2NSAxMUJFOworQ0VGQztDRUZDOzExMEYgMTE2NSAxMUJGO0NFRkM7MTEwRiAxMTY1IDExQkY7CitDRUZEO0NFRkQ7MTEwRiAxMTY1IDExQzA7Q0VGRDsxMTBGIDExNjUgMTFDMDsKK0NFRkU7Q0VGRTsxMTBGIDExNjUgMTFDMTtDRUZFOzExMEYgMTE2NSAxMUMxOworQ0VGRjtDRUZGOzExMEYgMTE2NSAxMUMyO0NFRkY7MTEwRiAxMTY1IDExQzI7CitDRjAwO0NGMDA7MTEwRiAxMTY2O0NGMDA7MTEwRiAxMTY2OworQ0YwMTtDRjAxOzExMEYgMTE2NiAxMUE4O0NGMDE7MTEwRiAxMTY2IDExQTg7CitDRjAyO0NGMDI7MTEwRiAxMTY2IDExQTk7Q0YwMjsxMTBGIDExNjYgMTFBOTsKK0NGMDM7Q0YwMzsxMTBGIDExNjYgMTFBQTtDRjAzOzExMEYgMTE2NiAxMUFBOworQ0YwNDtDRjA0OzExMEYgMTE2NiAxMUFCO0NGMDQ7MTEwRiAxMTY2IDExQUI7CitDRjA1O0NGMDU7MTEwRiAxMTY2IDExQUM7Q0YwNTsxMTBGIDExNjYgMTFBQzsKK0NGMDY7Q0YwNjsxMTBGIDExNjYgMTFBRDtDRjA2OzExMEYgMTE2NiAxMUFEOworQ0YwNztDRjA3OzExMEYgMTE2NiAxMUFFO0NGMDc7MTEwRiAxMTY2IDExQUU7CitDRjA4O0NGMDg7MTEwRiAxMTY2IDExQUY7Q0YwODsxMTBGIDExNjYgMTFBRjsKK0NGMDk7Q0YwOTsxMTBGIDExNjYgMTFCMDtDRjA5OzExMEYgMTE2NiAxMUIwOworQ0YwQTtDRjBBOzExMEYgMTE2NiAxMUIxO0NGMEE7MTEwRiAxMTY2IDExQjE7CitDRjBCO0NGMEI7MTEwRiAxMTY2IDExQjI7Q0YwQjsxMTBGIDExNjYgMTFCMjsKK0NGMEM7Q0YwQzsxMTBGIDExNjYgMTFCMztDRjBDOzExMEYgMTE2NiAxMUIzOworQ0YwRDtDRjBEOzExMEYgMTE2NiAxMUI0O0NGMEQ7MTEwRiAxMTY2IDExQjQ7CitDRjBFO0NGMEU7MTEwRiAxMTY2IDExQjU7Q0YwRTsxMTBGIDExNjYgMTFCNTsKK0NGMEY7Q0YwRjsxMTBGIDExNjYgMTFCNjtDRjBGOzExMEYgMTE2NiAxMUI2OworQ0YxMDtDRjEwOzExMEYgMTE2NiAxMUI3O0NGMTA7MTEwRiAxMTY2IDExQjc7CitDRjExO0NGMTE7MTEwRiAxMTY2IDExQjg7Q0YxMTsxMTBGIDExNjYgMTFCODsKK0NGMTI7Q0YxMjsxMTBGIDExNjYgMTFCOTtDRjEyOzExMEYgMTE2NiAxMUI5OworQ0YxMztDRjEzOzExMEYgMTE2NiAxMUJBO0NGMTM7MTEwRiAxMTY2IDExQkE7CitDRjE0O0NGMTQ7MTEwRiAxMTY2IDExQkI7Q0YxNDsxMTBGIDExNjYgMTFCQjsKK0NGMTU7Q0YxNTsxMTBGIDExNjYgMTFCQztDRjE1OzExMEYgMTE2NiAxMUJDOworQ0YxNjtDRjE2OzExMEYgMTE2NiAxMUJEO0NGMTY7MTEwRiAxMTY2IDExQkQ7CitDRjE3O0NGMTc7MTEwRiAxMTY2IDExQkU7Q0YxNzsxMTBGIDExNjYgMTFCRTsKK0NGMTg7Q0YxODsxMTBGIDExNjYgMTFCRjtDRjE4OzExMEYgMTE2NiAxMUJGOworQ0YxOTtDRjE5OzExMEYgMTE2NiAxMUMwO0NGMTk7MTEwRiAxMTY2IDExQzA7CitDRjFBO0NGMUE7MTEwRiAxMTY2IDExQzE7Q0YxQTsxMTBGIDExNjYgMTFDMTsKK0NGMUI7Q0YxQjsxMTBGIDExNjYgMTFDMjtDRjFCOzExMEYgMTE2NiAxMUMyOworQ0YxQztDRjFDOzExMEYgMTE2NztDRjFDOzExMEYgMTE2NzsKK0NGMUQ7Q0YxRDsxMTBGIDExNjcgMTFBODtDRjFEOzExMEYgMTE2NyAxMUE4OworQ0YxRTtDRjFFOzExMEYgMTE2NyAxMUE5O0NGMUU7MTEwRiAxMTY3IDExQTk7CitDRjFGO0NGMUY7MTEwRiAxMTY3IDExQUE7Q0YxRjsxMTBGIDExNjcgMTFBQTsKK0NGMjA7Q0YyMDsxMTBGIDExNjcgMTFBQjtDRjIwOzExMEYgMTE2NyAxMUFCOworQ0YyMTtDRjIxOzExMEYgMTE2NyAxMUFDO0NGMjE7MTEwRiAxMTY3IDExQUM7CitDRjIyO0NGMjI7MTEwRiAxMTY3IDExQUQ7Q0YyMjsxMTBGIDExNjcgMTFBRDsKK0NGMjM7Q0YyMzsxMTBGIDExNjcgMTFBRTtDRjIzOzExMEYgMTE2NyAxMUFFOworQ0YyNDtDRjI0OzExMEYgMTE2NyAxMUFGO0NGMjQ7MTEwRiAxMTY3IDExQUY7CitDRjI1O0NGMjU7MTEwRiAxMTY3IDExQjA7Q0YyNTsxMTBGIDExNjcgMTFCMDsKK0NGMjY7Q0YyNjsxMTBGIDExNjcgMTFCMTtDRjI2OzExMEYgMTE2NyAxMUIxOworQ0YyNztDRjI3OzExMEYgMTE2NyAxMUIyO0NGMjc7MTEwRiAxMTY3IDExQjI7CitDRjI4O0NGMjg7MTEwRiAxMTY3IDExQjM7Q0YyODsxMTBGIDExNjcgMTFCMzsKK0NGMjk7Q0YyOTsxMTBGIDExNjcgMTFCNDtDRjI5OzExMEYgMTE2NyAxMUI0OworQ0YyQTtDRjJBOzExMEYgMTE2NyAxMUI1O0NGMkE7MTEwRiAxMTY3IDExQjU7CitDRjJCO0NGMkI7MTEwRiAxMTY3IDExQjY7Q0YyQjsxMTBGIDExNjcgMTFCNjsKK0NGMkM7Q0YyQzsxMTBGIDExNjcgMTFCNztDRjJDOzExMEYgMTE2NyAxMUI3OworQ0YyRDtDRjJEOzExMEYgMTE2NyAxMUI4O0NGMkQ7MTEwRiAxMTY3IDExQjg7CitDRjJFO0NGMkU7MTEwRiAxMTY3IDExQjk7Q0YyRTsxMTBGIDExNjcgMTFCOTsKK0NGMkY7Q0YyRjsxMTBGIDExNjcgMTFCQTtDRjJGOzExMEYgMTE2NyAxMUJBOworQ0YzMDtDRjMwOzExMEYgMTE2NyAxMUJCO0NGMzA7MTEwRiAxMTY3IDExQkI7CitDRjMxO0NGMzE7MTEwRiAxMTY3IDExQkM7Q0YzMTsxMTBGIDExNjcgMTFCQzsKK0NGMzI7Q0YzMjsxMTBGIDExNjcgMTFCRDtDRjMyOzExMEYgMTE2NyAxMUJEOworQ0YzMztDRjMzOzExMEYgMTE2NyAxMUJFO0NGMzM7MTEwRiAxMTY3IDExQkU7CitDRjM0O0NGMzQ7MTEwRiAxMTY3IDExQkY7Q0YzNDsxMTBGIDExNjcgMTFCRjsKK0NGMzU7Q0YzNTsxMTBGIDExNjcgMTFDMDtDRjM1OzExMEYgMTE2NyAxMUMwOworQ0YzNjtDRjM2OzExMEYgMTE2NyAxMUMxO0NGMzY7MTEwRiAxMTY3IDExQzE7CitDRjM3O0NGMzc7MTEwRiAxMTY3IDExQzI7Q0YzNzsxMTBGIDExNjcgMTFDMjsKK0NGMzg7Q0YzODsxMTBGIDExNjg7Q0YzODsxMTBGIDExNjg7CitDRjM5O0NGMzk7MTEwRiAxMTY4IDExQTg7Q0YzOTsxMTBGIDExNjggMTFBODsKK0NGM0E7Q0YzQTsxMTBGIDExNjggMTFBOTtDRjNBOzExMEYgMTE2OCAxMUE5OworQ0YzQjtDRjNCOzExMEYgMTE2OCAxMUFBO0NGM0I7MTEwRiAxMTY4IDExQUE7CitDRjNDO0NGM0M7MTEwRiAxMTY4IDExQUI7Q0YzQzsxMTBGIDExNjggMTFBQjsKK0NGM0Q7Q0YzRDsxMTBGIDExNjggMTFBQztDRjNEOzExMEYgMTE2OCAxMUFDOworQ0YzRTtDRjNFOzExMEYgMTE2OCAxMUFEO0NGM0U7MTEwRiAxMTY4IDExQUQ7CitDRjNGO0NGM0Y7MTEwRiAxMTY4IDExQUU7Q0YzRjsxMTBGIDExNjggMTFBRTsKK0NGNDA7Q0Y0MDsxMTBGIDExNjggMTFBRjtDRjQwOzExMEYgMTE2OCAxMUFGOworQ0Y0MTtDRjQxOzExMEYgMTE2OCAxMUIwO0NGNDE7MTEwRiAxMTY4IDExQjA7CitDRjQyO0NGNDI7MTEwRiAxMTY4IDExQjE7Q0Y0MjsxMTBGIDExNjggMTFCMTsKK0NGNDM7Q0Y0MzsxMTBGIDExNjggMTFCMjtDRjQzOzExMEYgMTE2OCAxMUIyOworQ0Y0NDtDRjQ0OzExMEYgMTE2OCAxMUIzO0NGNDQ7MTEwRiAxMTY4IDExQjM7CitDRjQ1O0NGNDU7MTEwRiAxMTY4IDExQjQ7Q0Y0NTsxMTBGIDExNjggMTFCNDsKK0NGNDY7Q0Y0NjsxMTBGIDExNjggMTFCNTtDRjQ2OzExMEYgMTE2OCAxMUI1OworQ0Y0NztDRjQ3OzExMEYgMTE2OCAxMUI2O0NGNDc7MTEwRiAxMTY4IDExQjY7CitDRjQ4O0NGNDg7MTEwRiAxMTY4IDExQjc7Q0Y0ODsxMTBGIDExNjggMTFCNzsKK0NGNDk7Q0Y0OTsxMTBGIDExNjggMTFCODtDRjQ5OzExMEYgMTE2OCAxMUI4OworQ0Y0QTtDRjRBOzExMEYgMTE2OCAxMUI5O0NGNEE7MTEwRiAxMTY4IDExQjk7CitDRjRCO0NGNEI7MTEwRiAxMTY4IDExQkE7Q0Y0QjsxMTBGIDExNjggMTFCQTsKK0NGNEM7Q0Y0QzsxMTBGIDExNjggMTFCQjtDRjRDOzExMEYgMTE2OCAxMUJCOworQ0Y0RDtDRjREOzExMEYgMTE2OCAxMUJDO0NGNEQ7MTEwRiAxMTY4IDExQkM7CitDRjRFO0NGNEU7MTEwRiAxMTY4IDExQkQ7Q0Y0RTsxMTBGIDExNjggMTFCRDsKK0NGNEY7Q0Y0RjsxMTBGIDExNjggMTFCRTtDRjRGOzExMEYgMTE2OCAxMUJFOworQ0Y1MDtDRjUwOzExMEYgMTE2OCAxMUJGO0NGNTA7MTEwRiAxMTY4IDExQkY7CitDRjUxO0NGNTE7MTEwRiAxMTY4IDExQzA7Q0Y1MTsxMTBGIDExNjggMTFDMDsKK0NGNTI7Q0Y1MjsxMTBGIDExNjggMTFDMTtDRjUyOzExMEYgMTE2OCAxMUMxOworQ0Y1MztDRjUzOzExMEYgMTE2OCAxMUMyO0NGNTM7MTEwRiAxMTY4IDExQzI7CitDRjU0O0NGNTQ7MTEwRiAxMTY5O0NGNTQ7MTEwRiAxMTY5OworQ0Y1NTtDRjU1OzExMEYgMTE2OSAxMUE4O0NGNTU7MTEwRiAxMTY5IDExQTg7CitDRjU2O0NGNTY7MTEwRiAxMTY5IDExQTk7Q0Y1NjsxMTBGIDExNjkgMTFBOTsKK0NGNTc7Q0Y1NzsxMTBGIDExNjkgMTFBQTtDRjU3OzExMEYgMTE2OSAxMUFBOworQ0Y1ODtDRjU4OzExMEYgMTE2OSAxMUFCO0NGNTg7MTEwRiAxMTY5IDExQUI7CitDRjU5O0NGNTk7MTEwRiAxMTY5IDExQUM7Q0Y1OTsxMTBGIDExNjkgMTFBQzsKK0NGNUE7Q0Y1QTsxMTBGIDExNjkgMTFBRDtDRjVBOzExMEYgMTE2OSAxMUFEOworQ0Y1QjtDRjVCOzExMEYgMTE2OSAxMUFFO0NGNUI7MTEwRiAxMTY5IDExQUU7CitDRjVDO0NGNUM7MTEwRiAxMTY5IDExQUY7Q0Y1QzsxMTBGIDExNjkgMTFBRjsKK0NGNUQ7Q0Y1RDsxMTBGIDExNjkgMTFCMDtDRjVEOzExMEYgMTE2OSAxMUIwOworQ0Y1RTtDRjVFOzExMEYgMTE2OSAxMUIxO0NGNUU7MTEwRiAxMTY5IDExQjE7CitDRjVGO0NGNUY7MTEwRiAxMTY5IDExQjI7Q0Y1RjsxMTBGIDExNjkgMTFCMjsKK0NGNjA7Q0Y2MDsxMTBGIDExNjkgMTFCMztDRjYwOzExMEYgMTE2OSAxMUIzOworQ0Y2MTtDRjYxOzExMEYgMTE2OSAxMUI0O0NGNjE7MTEwRiAxMTY5IDExQjQ7CitDRjYyO0NGNjI7MTEwRiAxMTY5IDExQjU7Q0Y2MjsxMTBGIDExNjkgMTFCNTsKK0NGNjM7Q0Y2MzsxMTBGIDExNjkgMTFCNjtDRjYzOzExMEYgMTE2OSAxMUI2OworQ0Y2NDtDRjY0OzExMEYgMTE2OSAxMUI3O0NGNjQ7MTEwRiAxMTY5IDExQjc7CitDRjY1O0NGNjU7MTEwRiAxMTY5IDExQjg7Q0Y2NTsxMTBGIDExNjkgMTFCODsKK0NGNjY7Q0Y2NjsxMTBGIDExNjkgMTFCOTtDRjY2OzExMEYgMTE2OSAxMUI5OworQ0Y2NztDRjY3OzExMEYgMTE2OSAxMUJBO0NGNjc7MTEwRiAxMTY5IDExQkE7CitDRjY4O0NGNjg7MTEwRiAxMTY5IDExQkI7Q0Y2ODsxMTBGIDExNjkgMTFCQjsKK0NGNjk7Q0Y2OTsxMTBGIDExNjkgMTFCQztDRjY5OzExMEYgMTE2OSAxMUJDOworQ0Y2QTtDRjZBOzExMEYgMTE2OSAxMUJEO0NGNkE7MTEwRiAxMTY5IDExQkQ7CitDRjZCO0NGNkI7MTEwRiAxMTY5IDExQkU7Q0Y2QjsxMTBGIDExNjkgMTFCRTsKK0NGNkM7Q0Y2QzsxMTBGIDExNjkgMTFCRjtDRjZDOzExMEYgMTE2OSAxMUJGOworQ0Y2RDtDRjZEOzExMEYgMTE2OSAxMUMwO0NGNkQ7MTEwRiAxMTY5IDExQzA7CitDRjZFO0NGNkU7MTEwRiAxMTY5IDExQzE7Q0Y2RTsxMTBGIDExNjkgMTFDMTsKK0NGNkY7Q0Y2RjsxMTBGIDExNjkgMTFDMjtDRjZGOzExMEYgMTE2OSAxMUMyOworQ0Y3MDtDRjcwOzExMEYgMTE2QTtDRjcwOzExMEYgMTE2QTsKK0NGNzE7Q0Y3MTsxMTBGIDExNkEgMTFBODtDRjcxOzExMEYgMTE2QSAxMUE4OworQ0Y3MjtDRjcyOzExMEYgMTE2QSAxMUE5O0NGNzI7MTEwRiAxMTZBIDExQTk7CitDRjczO0NGNzM7MTEwRiAxMTZBIDExQUE7Q0Y3MzsxMTBGIDExNkEgMTFBQTsKK0NGNzQ7Q0Y3NDsxMTBGIDExNkEgMTFBQjtDRjc0OzExMEYgMTE2QSAxMUFCOworQ0Y3NTtDRjc1OzExMEYgMTE2QSAxMUFDO0NGNzU7MTEwRiAxMTZBIDExQUM7CitDRjc2O0NGNzY7MTEwRiAxMTZBIDExQUQ7Q0Y3NjsxMTBGIDExNkEgMTFBRDsKK0NGNzc7Q0Y3NzsxMTBGIDExNkEgMTFBRTtDRjc3OzExMEYgMTE2QSAxMUFFOworQ0Y3ODtDRjc4OzExMEYgMTE2QSAxMUFGO0NGNzg7MTEwRiAxMTZBIDExQUY7CitDRjc5O0NGNzk7MTEwRiAxMTZBIDExQjA7Q0Y3OTsxMTBGIDExNkEgMTFCMDsKK0NGN0E7Q0Y3QTsxMTBGIDExNkEgMTFCMTtDRjdBOzExMEYgMTE2QSAxMUIxOworQ0Y3QjtDRjdCOzExMEYgMTE2QSAxMUIyO0NGN0I7MTEwRiAxMTZBIDExQjI7CitDRjdDO0NGN0M7MTEwRiAxMTZBIDExQjM7Q0Y3QzsxMTBGIDExNkEgMTFCMzsKK0NGN0Q7Q0Y3RDsxMTBGIDExNkEgMTFCNDtDRjdEOzExMEYgMTE2QSAxMUI0OworQ0Y3RTtDRjdFOzExMEYgMTE2QSAxMUI1O0NGN0U7MTEwRiAxMTZBIDExQjU7CitDRjdGO0NGN0Y7MTEwRiAxMTZBIDExQjY7Q0Y3RjsxMTBGIDExNkEgMTFCNjsKK0NGODA7Q0Y4MDsxMTBGIDExNkEgMTFCNztDRjgwOzExMEYgMTE2QSAxMUI3OworQ0Y4MTtDRjgxOzExMEYgMTE2QSAxMUI4O0NGODE7MTEwRiAxMTZBIDExQjg7CitDRjgyO0NGODI7MTEwRiAxMTZBIDExQjk7Q0Y4MjsxMTBGIDExNkEgMTFCOTsKK0NGODM7Q0Y4MzsxMTBGIDExNkEgMTFCQTtDRjgzOzExMEYgMTE2QSAxMUJBOworQ0Y4NDtDRjg0OzExMEYgMTE2QSAxMUJCO0NGODQ7MTEwRiAxMTZBIDExQkI7CitDRjg1O0NGODU7MTEwRiAxMTZBIDExQkM7Q0Y4NTsxMTBGIDExNkEgMTFCQzsKK0NGODY7Q0Y4NjsxMTBGIDExNkEgMTFCRDtDRjg2OzExMEYgMTE2QSAxMUJEOworQ0Y4NztDRjg3OzExMEYgMTE2QSAxMUJFO0NGODc7MTEwRiAxMTZBIDExQkU7CitDRjg4O0NGODg7MTEwRiAxMTZBIDExQkY7Q0Y4ODsxMTBGIDExNkEgMTFCRjsKK0NGODk7Q0Y4OTsxMTBGIDExNkEgMTFDMDtDRjg5OzExMEYgMTE2QSAxMUMwOworQ0Y4QTtDRjhBOzExMEYgMTE2QSAxMUMxO0NGOEE7MTEwRiAxMTZBIDExQzE7CitDRjhCO0NGOEI7MTEwRiAxMTZBIDExQzI7Q0Y4QjsxMTBGIDExNkEgMTFDMjsKK0NGOEM7Q0Y4QzsxMTBGIDExNkI7Q0Y4QzsxMTBGIDExNkI7CitDRjhEO0NGOEQ7MTEwRiAxMTZCIDExQTg7Q0Y4RDsxMTBGIDExNkIgMTFBODsKK0NGOEU7Q0Y4RTsxMTBGIDExNkIgMTFBOTtDRjhFOzExMEYgMTE2QiAxMUE5OworQ0Y4RjtDRjhGOzExMEYgMTE2QiAxMUFBO0NGOEY7MTEwRiAxMTZCIDExQUE7CitDRjkwO0NGOTA7MTEwRiAxMTZCIDExQUI7Q0Y5MDsxMTBGIDExNkIgMTFBQjsKK0NGOTE7Q0Y5MTsxMTBGIDExNkIgMTFBQztDRjkxOzExMEYgMTE2QiAxMUFDOworQ0Y5MjtDRjkyOzExMEYgMTE2QiAxMUFEO0NGOTI7MTEwRiAxMTZCIDExQUQ7CitDRjkzO0NGOTM7MTEwRiAxMTZCIDExQUU7Q0Y5MzsxMTBGIDExNkIgMTFBRTsKK0NGOTQ7Q0Y5NDsxMTBGIDExNkIgMTFBRjtDRjk0OzExMEYgMTE2QiAxMUFGOworQ0Y5NTtDRjk1OzExMEYgMTE2QiAxMUIwO0NGOTU7MTEwRiAxMTZCIDExQjA7CitDRjk2O0NGOTY7MTEwRiAxMTZCIDExQjE7Q0Y5NjsxMTBGIDExNkIgMTFCMTsKK0NGOTc7Q0Y5NzsxMTBGIDExNkIgMTFCMjtDRjk3OzExMEYgMTE2QiAxMUIyOworQ0Y5ODtDRjk4OzExMEYgMTE2QiAxMUIzO0NGOTg7MTEwRiAxMTZCIDExQjM7CitDRjk5O0NGOTk7MTEwRiAxMTZCIDExQjQ7Q0Y5OTsxMTBGIDExNkIgMTFCNDsKK0NGOUE7Q0Y5QTsxMTBGIDExNkIgMTFCNTtDRjlBOzExMEYgMTE2QiAxMUI1OworQ0Y5QjtDRjlCOzExMEYgMTE2QiAxMUI2O0NGOUI7MTEwRiAxMTZCIDExQjY7CitDRjlDO0NGOUM7MTEwRiAxMTZCIDExQjc7Q0Y5QzsxMTBGIDExNkIgMTFCNzsKK0NGOUQ7Q0Y5RDsxMTBGIDExNkIgMTFCODtDRjlEOzExMEYgMTE2QiAxMUI4OworQ0Y5RTtDRjlFOzExMEYgMTE2QiAxMUI5O0NGOUU7MTEwRiAxMTZCIDExQjk7CitDRjlGO0NGOUY7MTEwRiAxMTZCIDExQkE7Q0Y5RjsxMTBGIDExNkIgMTFCQTsKK0NGQTA7Q0ZBMDsxMTBGIDExNkIgMTFCQjtDRkEwOzExMEYgMTE2QiAxMUJCOworQ0ZBMTtDRkExOzExMEYgMTE2QiAxMUJDO0NGQTE7MTEwRiAxMTZCIDExQkM7CitDRkEyO0NGQTI7MTEwRiAxMTZCIDExQkQ7Q0ZBMjsxMTBGIDExNkIgMTFCRDsKK0NGQTM7Q0ZBMzsxMTBGIDExNkIgMTFCRTtDRkEzOzExMEYgMTE2QiAxMUJFOworQ0ZBNDtDRkE0OzExMEYgMTE2QiAxMUJGO0NGQTQ7MTEwRiAxMTZCIDExQkY7CitDRkE1O0NGQTU7MTEwRiAxMTZCIDExQzA7Q0ZBNTsxMTBGIDExNkIgMTFDMDsKK0NGQTY7Q0ZBNjsxMTBGIDExNkIgMTFDMTtDRkE2OzExMEYgMTE2QiAxMUMxOworQ0ZBNztDRkE3OzExMEYgMTE2QiAxMUMyO0NGQTc7MTEwRiAxMTZCIDExQzI7CitDRkE4O0NGQTg7MTEwRiAxMTZDO0NGQTg7MTEwRiAxMTZDOworQ0ZBOTtDRkE5OzExMEYgMTE2QyAxMUE4O0NGQTk7MTEwRiAxMTZDIDExQTg7CitDRkFBO0NGQUE7MTEwRiAxMTZDIDExQTk7Q0ZBQTsxMTBGIDExNkMgMTFBOTsKK0NGQUI7Q0ZBQjsxMTBGIDExNkMgMTFBQTtDRkFCOzExMEYgMTE2QyAxMUFBOworQ0ZBQztDRkFDOzExMEYgMTE2QyAxMUFCO0NGQUM7MTEwRiAxMTZDIDExQUI7CitDRkFEO0NGQUQ7MTEwRiAxMTZDIDExQUM7Q0ZBRDsxMTBGIDExNkMgMTFBQzsKK0NGQUU7Q0ZBRTsxMTBGIDExNkMgMTFBRDtDRkFFOzExMEYgMTE2QyAxMUFEOworQ0ZBRjtDRkFGOzExMEYgMTE2QyAxMUFFO0NGQUY7MTEwRiAxMTZDIDExQUU7CitDRkIwO0NGQjA7MTEwRiAxMTZDIDExQUY7Q0ZCMDsxMTBGIDExNkMgMTFBRjsKK0NGQjE7Q0ZCMTsxMTBGIDExNkMgMTFCMDtDRkIxOzExMEYgMTE2QyAxMUIwOworQ0ZCMjtDRkIyOzExMEYgMTE2QyAxMUIxO0NGQjI7MTEwRiAxMTZDIDExQjE7CitDRkIzO0NGQjM7MTEwRiAxMTZDIDExQjI7Q0ZCMzsxMTBGIDExNkMgMTFCMjsKK0NGQjQ7Q0ZCNDsxMTBGIDExNkMgMTFCMztDRkI0OzExMEYgMTE2QyAxMUIzOworQ0ZCNTtDRkI1OzExMEYgMTE2QyAxMUI0O0NGQjU7MTEwRiAxMTZDIDExQjQ7CitDRkI2O0NGQjY7MTEwRiAxMTZDIDExQjU7Q0ZCNjsxMTBGIDExNkMgMTFCNTsKK0NGQjc7Q0ZCNzsxMTBGIDExNkMgMTFCNjtDRkI3OzExMEYgMTE2QyAxMUI2OworQ0ZCODtDRkI4OzExMEYgMTE2QyAxMUI3O0NGQjg7MTEwRiAxMTZDIDExQjc7CitDRkI5O0NGQjk7MTEwRiAxMTZDIDExQjg7Q0ZCOTsxMTBGIDExNkMgMTFCODsKK0NGQkE7Q0ZCQTsxMTBGIDExNkMgMTFCOTtDRkJBOzExMEYgMTE2QyAxMUI5OworQ0ZCQjtDRkJCOzExMEYgMTE2QyAxMUJBO0NGQkI7MTEwRiAxMTZDIDExQkE7CitDRkJDO0NGQkM7MTEwRiAxMTZDIDExQkI7Q0ZCQzsxMTBGIDExNkMgMTFCQjsKK0NGQkQ7Q0ZCRDsxMTBGIDExNkMgMTFCQztDRkJEOzExMEYgMTE2QyAxMUJDOworQ0ZCRTtDRkJFOzExMEYgMTE2QyAxMUJEO0NGQkU7MTEwRiAxMTZDIDExQkQ7CitDRkJGO0NGQkY7MTEwRiAxMTZDIDExQkU7Q0ZCRjsxMTBGIDExNkMgMTFCRTsKK0NGQzA7Q0ZDMDsxMTBGIDExNkMgMTFCRjtDRkMwOzExMEYgMTE2QyAxMUJGOworQ0ZDMTtDRkMxOzExMEYgMTE2QyAxMUMwO0NGQzE7MTEwRiAxMTZDIDExQzA7CitDRkMyO0NGQzI7MTEwRiAxMTZDIDExQzE7Q0ZDMjsxMTBGIDExNkMgMTFDMTsKK0NGQzM7Q0ZDMzsxMTBGIDExNkMgMTFDMjtDRkMzOzExMEYgMTE2QyAxMUMyOworQ0ZDNDtDRkM0OzExMEYgMTE2RDtDRkM0OzExMEYgMTE2RDsKK0NGQzU7Q0ZDNTsxMTBGIDExNkQgMTFBODtDRkM1OzExMEYgMTE2RCAxMUE4OworQ0ZDNjtDRkM2OzExMEYgMTE2RCAxMUE5O0NGQzY7MTEwRiAxMTZEIDExQTk7CitDRkM3O0NGQzc7MTEwRiAxMTZEIDExQUE7Q0ZDNzsxMTBGIDExNkQgMTFBQTsKK0NGQzg7Q0ZDODsxMTBGIDExNkQgMTFBQjtDRkM4OzExMEYgMTE2RCAxMUFCOworQ0ZDOTtDRkM5OzExMEYgMTE2RCAxMUFDO0NGQzk7MTEwRiAxMTZEIDExQUM7CitDRkNBO0NGQ0E7MTEwRiAxMTZEIDExQUQ7Q0ZDQTsxMTBGIDExNkQgMTFBRDsKK0NGQ0I7Q0ZDQjsxMTBGIDExNkQgMTFBRTtDRkNCOzExMEYgMTE2RCAxMUFFOworQ0ZDQztDRkNDOzExMEYgMTE2RCAxMUFGO0NGQ0M7MTEwRiAxMTZEIDExQUY7CitDRkNEO0NGQ0Q7MTEwRiAxMTZEIDExQjA7Q0ZDRDsxMTBGIDExNkQgMTFCMDsKK0NGQ0U7Q0ZDRTsxMTBGIDExNkQgMTFCMTtDRkNFOzExMEYgMTE2RCAxMUIxOworQ0ZDRjtDRkNGOzExMEYgMTE2RCAxMUIyO0NGQ0Y7MTEwRiAxMTZEIDExQjI7CitDRkQwO0NGRDA7MTEwRiAxMTZEIDExQjM7Q0ZEMDsxMTBGIDExNkQgMTFCMzsKK0NGRDE7Q0ZEMTsxMTBGIDExNkQgMTFCNDtDRkQxOzExMEYgMTE2RCAxMUI0OworQ0ZEMjtDRkQyOzExMEYgMTE2RCAxMUI1O0NGRDI7MTEwRiAxMTZEIDExQjU7CitDRkQzO0NGRDM7MTEwRiAxMTZEIDExQjY7Q0ZEMzsxMTBGIDExNkQgMTFCNjsKK0NGRDQ7Q0ZENDsxMTBGIDExNkQgMTFCNztDRkQ0OzExMEYgMTE2RCAxMUI3OworQ0ZENTtDRkQ1OzExMEYgMTE2RCAxMUI4O0NGRDU7MTEwRiAxMTZEIDExQjg7CitDRkQ2O0NGRDY7MTEwRiAxMTZEIDExQjk7Q0ZENjsxMTBGIDExNkQgMTFCOTsKK0NGRDc7Q0ZENzsxMTBGIDExNkQgMTFCQTtDRkQ3OzExMEYgMTE2RCAxMUJBOworQ0ZEODtDRkQ4OzExMEYgMTE2RCAxMUJCO0NGRDg7MTEwRiAxMTZEIDExQkI7CitDRkQ5O0NGRDk7MTEwRiAxMTZEIDExQkM7Q0ZEOTsxMTBGIDExNkQgMTFCQzsKK0NGREE7Q0ZEQTsxMTBGIDExNkQgMTFCRDtDRkRBOzExMEYgMTE2RCAxMUJEOworQ0ZEQjtDRkRCOzExMEYgMTE2RCAxMUJFO0NGREI7MTEwRiAxMTZEIDExQkU7CitDRkRDO0NGREM7MTEwRiAxMTZEIDExQkY7Q0ZEQzsxMTBGIDExNkQgMTFCRjsKK0NGREQ7Q0ZERDsxMTBGIDExNkQgMTFDMDtDRkREOzExMEYgMTE2RCAxMUMwOworQ0ZERTtDRkRFOzExMEYgMTE2RCAxMUMxO0NGREU7MTEwRiAxMTZEIDExQzE7CitDRkRGO0NGREY7MTEwRiAxMTZEIDExQzI7Q0ZERjsxMTBGIDExNkQgMTFDMjsKK0NGRTA7Q0ZFMDsxMTBGIDExNkU7Q0ZFMDsxMTBGIDExNkU7CitDRkUxO0NGRTE7MTEwRiAxMTZFIDExQTg7Q0ZFMTsxMTBGIDExNkUgMTFBODsKK0NGRTI7Q0ZFMjsxMTBGIDExNkUgMTFBOTtDRkUyOzExMEYgMTE2RSAxMUE5OworQ0ZFMztDRkUzOzExMEYgMTE2RSAxMUFBO0NGRTM7MTEwRiAxMTZFIDExQUE7CitDRkU0O0NGRTQ7MTEwRiAxMTZFIDExQUI7Q0ZFNDsxMTBGIDExNkUgMTFBQjsKK0NGRTU7Q0ZFNTsxMTBGIDExNkUgMTFBQztDRkU1OzExMEYgMTE2RSAxMUFDOworQ0ZFNjtDRkU2OzExMEYgMTE2RSAxMUFEO0NGRTY7MTEwRiAxMTZFIDExQUQ7CitDRkU3O0NGRTc7MTEwRiAxMTZFIDExQUU7Q0ZFNzsxMTBGIDExNkUgMTFBRTsKK0NGRTg7Q0ZFODsxMTBGIDExNkUgMTFBRjtDRkU4OzExMEYgMTE2RSAxMUFGOworQ0ZFOTtDRkU5OzExMEYgMTE2RSAxMUIwO0NGRTk7MTEwRiAxMTZFIDExQjA7CitDRkVBO0NGRUE7MTEwRiAxMTZFIDExQjE7Q0ZFQTsxMTBGIDExNkUgMTFCMTsKK0NGRUI7Q0ZFQjsxMTBGIDExNkUgMTFCMjtDRkVCOzExMEYgMTE2RSAxMUIyOworQ0ZFQztDRkVDOzExMEYgMTE2RSAxMUIzO0NGRUM7MTEwRiAxMTZFIDExQjM7CitDRkVEO0NGRUQ7MTEwRiAxMTZFIDExQjQ7Q0ZFRDsxMTBGIDExNkUgMTFCNDsKK0NGRUU7Q0ZFRTsxMTBGIDExNkUgMTFCNTtDRkVFOzExMEYgMTE2RSAxMUI1OworQ0ZFRjtDRkVGOzExMEYgMTE2RSAxMUI2O0NGRUY7MTEwRiAxMTZFIDExQjY7CitDRkYwO0NGRjA7MTEwRiAxMTZFIDExQjc7Q0ZGMDsxMTBGIDExNkUgMTFCNzsKK0NGRjE7Q0ZGMTsxMTBGIDExNkUgMTFCODtDRkYxOzExMEYgMTE2RSAxMUI4OworQ0ZGMjtDRkYyOzExMEYgMTE2RSAxMUI5O0NGRjI7MTEwRiAxMTZFIDExQjk7CitDRkYzO0NGRjM7MTEwRiAxMTZFIDExQkE7Q0ZGMzsxMTBGIDExNkUgMTFCQTsKK0NGRjQ7Q0ZGNDsxMTBGIDExNkUgMTFCQjtDRkY0OzExMEYgMTE2RSAxMUJCOworQ0ZGNTtDRkY1OzExMEYgMTE2RSAxMUJDO0NGRjU7MTEwRiAxMTZFIDExQkM7CitDRkY2O0NGRjY7MTEwRiAxMTZFIDExQkQ7Q0ZGNjsxMTBGIDExNkUgMTFCRDsKK0NGRjc7Q0ZGNzsxMTBGIDExNkUgMTFCRTtDRkY3OzExMEYgMTE2RSAxMUJFOworQ0ZGODtDRkY4OzExMEYgMTE2RSAxMUJGO0NGRjg7MTEwRiAxMTZFIDExQkY7CitDRkY5O0NGRjk7MTEwRiAxMTZFIDExQzA7Q0ZGOTsxMTBGIDExNkUgMTFDMDsKK0NGRkE7Q0ZGQTsxMTBGIDExNkUgMTFDMTtDRkZBOzExMEYgMTE2RSAxMUMxOworQ0ZGQjtDRkZCOzExMEYgMTE2RSAxMUMyO0NGRkI7MTEwRiAxMTZFIDExQzI7CitDRkZDO0NGRkM7MTEwRiAxMTZGO0NGRkM7MTEwRiAxMTZGOworQ0ZGRDtDRkZEOzExMEYgMTE2RiAxMUE4O0NGRkQ7MTEwRiAxMTZGIDExQTg7CitDRkZFO0NGRkU7MTEwRiAxMTZGIDExQTk7Q0ZGRTsxMTBGIDExNkYgMTFBOTsKK0NGRkY7Q0ZGRjsxMTBGIDExNkYgMTFBQTtDRkZGOzExMEYgMTE2RiAxMUFBOworRDAwMDtEMDAwOzExMEYgMTE2RiAxMUFCO0QwMDA7MTEwRiAxMTZGIDExQUI7CitEMDAxO0QwMDE7MTEwRiAxMTZGIDExQUM7RDAwMTsxMTBGIDExNkYgMTFBQzsKK0QwMDI7RDAwMjsxMTBGIDExNkYgMTFBRDtEMDAyOzExMEYgMTE2RiAxMUFEOworRDAwMztEMDAzOzExMEYgMTE2RiAxMUFFO0QwMDM7MTEwRiAxMTZGIDExQUU7CitEMDA0O0QwMDQ7MTEwRiAxMTZGIDExQUY7RDAwNDsxMTBGIDExNkYgMTFBRjsKK0QwMDU7RDAwNTsxMTBGIDExNkYgMTFCMDtEMDA1OzExMEYgMTE2RiAxMUIwOworRDAwNjtEMDA2OzExMEYgMTE2RiAxMUIxO0QwMDY7MTEwRiAxMTZGIDExQjE7CitEMDA3O0QwMDc7MTEwRiAxMTZGIDExQjI7RDAwNzsxMTBGIDExNkYgMTFCMjsKK0QwMDg7RDAwODsxMTBGIDExNkYgMTFCMztEMDA4OzExMEYgMTE2RiAxMUIzOworRDAwOTtEMDA5OzExMEYgMTE2RiAxMUI0O0QwMDk7MTEwRiAxMTZGIDExQjQ7CitEMDBBO0QwMEE7MTEwRiAxMTZGIDExQjU7RDAwQTsxMTBGIDExNkYgMTFCNTsKK0QwMEI7RDAwQjsxMTBGIDExNkYgMTFCNjtEMDBCOzExMEYgMTE2RiAxMUI2OworRDAwQztEMDBDOzExMEYgMTE2RiAxMUI3O0QwMEM7MTEwRiAxMTZGIDExQjc7CitEMDBEO0QwMEQ7MTEwRiAxMTZGIDExQjg7RDAwRDsxMTBGIDExNkYgMTFCODsKK0QwMEU7RDAwRTsxMTBGIDExNkYgMTFCOTtEMDBFOzExMEYgMTE2RiAxMUI5OworRDAwRjtEMDBGOzExMEYgMTE2RiAxMUJBO0QwMEY7MTEwRiAxMTZGIDExQkE7CitEMDEwO0QwMTA7MTEwRiAxMTZGIDExQkI7RDAxMDsxMTBGIDExNkYgMTFCQjsKK0QwMTE7RDAxMTsxMTBGIDExNkYgMTFCQztEMDExOzExMEYgMTE2RiAxMUJDOworRDAxMjtEMDEyOzExMEYgMTE2RiAxMUJEO0QwMTI7MTEwRiAxMTZGIDExQkQ7CitEMDEzO0QwMTM7MTEwRiAxMTZGIDExQkU7RDAxMzsxMTBGIDExNkYgMTFCRTsKK0QwMTQ7RDAxNDsxMTBGIDExNkYgMTFCRjtEMDE0OzExMEYgMTE2RiAxMUJGOworRDAxNTtEMDE1OzExMEYgMTE2RiAxMUMwO0QwMTU7MTEwRiAxMTZGIDExQzA7CitEMDE2O0QwMTY7MTEwRiAxMTZGIDExQzE7RDAxNjsxMTBGIDExNkYgMTFDMTsKK0QwMTc7RDAxNzsxMTBGIDExNkYgMTFDMjtEMDE3OzExMEYgMTE2RiAxMUMyOworRDAxODtEMDE4OzExMEYgMTE3MDtEMDE4OzExMEYgMTE3MDsKK0QwMTk7RDAxOTsxMTBGIDExNzAgMTFBODtEMDE5OzExMEYgMTE3MCAxMUE4OworRDAxQTtEMDFBOzExMEYgMTE3MCAxMUE5O0QwMUE7MTEwRiAxMTcwIDExQTk7CitEMDFCO0QwMUI7MTEwRiAxMTcwIDExQUE7RDAxQjsxMTBGIDExNzAgMTFBQTsKK0QwMUM7RDAxQzsxMTBGIDExNzAgMTFBQjtEMDFDOzExMEYgMTE3MCAxMUFCOworRDAxRDtEMDFEOzExMEYgMTE3MCAxMUFDO0QwMUQ7MTEwRiAxMTcwIDExQUM7CitEMDFFO0QwMUU7MTEwRiAxMTcwIDExQUQ7RDAxRTsxMTBGIDExNzAgMTFBRDsKK0QwMUY7RDAxRjsxMTBGIDExNzAgMTFBRTtEMDFGOzExMEYgMTE3MCAxMUFFOworRDAyMDtEMDIwOzExMEYgMTE3MCAxMUFGO0QwMjA7MTEwRiAxMTcwIDExQUY7CitEMDIxO0QwMjE7MTEwRiAxMTcwIDExQjA7RDAyMTsxMTBGIDExNzAgMTFCMDsKK0QwMjI7RDAyMjsxMTBGIDExNzAgMTFCMTtEMDIyOzExMEYgMTE3MCAxMUIxOworRDAyMztEMDIzOzExMEYgMTE3MCAxMUIyO0QwMjM7MTEwRiAxMTcwIDExQjI7CitEMDI0O0QwMjQ7MTEwRiAxMTcwIDExQjM7RDAyNDsxMTBGIDExNzAgMTFCMzsKK0QwMjU7RDAyNTsxMTBGIDExNzAgMTFCNDtEMDI1OzExMEYgMTE3MCAxMUI0OworRDAyNjtEMDI2OzExMEYgMTE3MCAxMUI1O0QwMjY7MTEwRiAxMTcwIDExQjU7CitEMDI3O0QwMjc7MTEwRiAxMTcwIDExQjY7RDAyNzsxMTBGIDExNzAgMTFCNjsKK0QwMjg7RDAyODsxMTBGIDExNzAgMTFCNztEMDI4OzExMEYgMTE3MCAxMUI3OworRDAyOTtEMDI5OzExMEYgMTE3MCAxMUI4O0QwMjk7MTEwRiAxMTcwIDExQjg7CitEMDJBO0QwMkE7MTEwRiAxMTcwIDExQjk7RDAyQTsxMTBGIDExNzAgMTFCOTsKK0QwMkI7RDAyQjsxMTBGIDExNzAgMTFCQTtEMDJCOzExMEYgMTE3MCAxMUJBOworRDAyQztEMDJDOzExMEYgMTE3MCAxMUJCO0QwMkM7MTEwRiAxMTcwIDExQkI7CitEMDJEO0QwMkQ7MTEwRiAxMTcwIDExQkM7RDAyRDsxMTBGIDExNzAgMTFCQzsKK0QwMkU7RDAyRTsxMTBGIDExNzAgMTFCRDtEMDJFOzExMEYgMTE3MCAxMUJEOworRDAyRjtEMDJGOzExMEYgMTE3MCAxMUJFO0QwMkY7MTEwRiAxMTcwIDExQkU7CitEMDMwO0QwMzA7MTEwRiAxMTcwIDExQkY7RDAzMDsxMTBGIDExNzAgMTFCRjsKK0QwMzE7RDAzMTsxMTBGIDExNzAgMTFDMDtEMDMxOzExMEYgMTE3MCAxMUMwOworRDAzMjtEMDMyOzExMEYgMTE3MCAxMUMxO0QwMzI7MTEwRiAxMTcwIDExQzE7CitEMDMzO0QwMzM7MTEwRiAxMTcwIDExQzI7RDAzMzsxMTBGIDExNzAgMTFDMjsKK0QwMzQ7RDAzNDsxMTBGIDExNzE7RDAzNDsxMTBGIDExNzE7CitEMDM1O0QwMzU7MTEwRiAxMTcxIDExQTg7RDAzNTsxMTBGIDExNzEgMTFBODsKK0QwMzY7RDAzNjsxMTBGIDExNzEgMTFBOTtEMDM2OzExMEYgMTE3MSAxMUE5OworRDAzNztEMDM3OzExMEYgMTE3MSAxMUFBO0QwMzc7MTEwRiAxMTcxIDExQUE7CitEMDM4O0QwMzg7MTEwRiAxMTcxIDExQUI7RDAzODsxMTBGIDExNzEgMTFBQjsKK0QwMzk7RDAzOTsxMTBGIDExNzEgMTFBQztEMDM5OzExMEYgMTE3MSAxMUFDOworRDAzQTtEMDNBOzExMEYgMTE3MSAxMUFEO0QwM0E7MTEwRiAxMTcxIDExQUQ7CitEMDNCO0QwM0I7MTEwRiAxMTcxIDExQUU7RDAzQjsxMTBGIDExNzEgMTFBRTsKK0QwM0M7RDAzQzsxMTBGIDExNzEgMTFBRjtEMDNDOzExMEYgMTE3MSAxMUFGOworRDAzRDtEMDNEOzExMEYgMTE3MSAxMUIwO0QwM0Q7MTEwRiAxMTcxIDExQjA7CitEMDNFO0QwM0U7MTEwRiAxMTcxIDExQjE7RDAzRTsxMTBGIDExNzEgMTFCMTsKK0QwM0Y7RDAzRjsxMTBGIDExNzEgMTFCMjtEMDNGOzExMEYgMTE3MSAxMUIyOworRDA0MDtEMDQwOzExMEYgMTE3MSAxMUIzO0QwNDA7MTEwRiAxMTcxIDExQjM7CitEMDQxO0QwNDE7MTEwRiAxMTcxIDExQjQ7RDA0MTsxMTBGIDExNzEgMTFCNDsKK0QwNDI7RDA0MjsxMTBGIDExNzEgMTFCNTtEMDQyOzExMEYgMTE3MSAxMUI1OworRDA0MztEMDQzOzExMEYgMTE3MSAxMUI2O0QwNDM7MTEwRiAxMTcxIDExQjY7CitEMDQ0O0QwNDQ7MTEwRiAxMTcxIDExQjc7RDA0NDsxMTBGIDExNzEgMTFCNzsKK0QwNDU7RDA0NTsxMTBGIDExNzEgMTFCODtEMDQ1OzExMEYgMTE3MSAxMUI4OworRDA0NjtEMDQ2OzExMEYgMTE3MSAxMUI5O0QwNDY7MTEwRiAxMTcxIDExQjk7CitEMDQ3O0QwNDc7MTEwRiAxMTcxIDExQkE7RDA0NzsxMTBGIDExNzEgMTFCQTsKK0QwNDg7RDA0ODsxMTBGIDExNzEgMTFCQjtEMDQ4OzExMEYgMTE3MSAxMUJCOworRDA0OTtEMDQ5OzExMEYgMTE3MSAxMUJDO0QwNDk7MTEwRiAxMTcxIDExQkM7CitEMDRBO0QwNEE7MTEwRiAxMTcxIDExQkQ7RDA0QTsxMTBGIDExNzEgMTFCRDsKK0QwNEI7RDA0QjsxMTBGIDExNzEgMTFCRTtEMDRCOzExMEYgMTE3MSAxMUJFOworRDA0QztEMDRDOzExMEYgMTE3MSAxMUJGO0QwNEM7MTEwRiAxMTcxIDExQkY7CitEMDREO0QwNEQ7MTEwRiAxMTcxIDExQzA7RDA0RDsxMTBGIDExNzEgMTFDMDsKK0QwNEU7RDA0RTsxMTBGIDExNzEgMTFDMTtEMDRFOzExMEYgMTE3MSAxMUMxOworRDA0RjtEMDRGOzExMEYgMTE3MSAxMUMyO0QwNEY7MTEwRiAxMTcxIDExQzI7CitEMDUwO0QwNTA7MTEwRiAxMTcyO0QwNTA7MTEwRiAxMTcyOworRDA1MTtEMDUxOzExMEYgMTE3MiAxMUE4O0QwNTE7MTEwRiAxMTcyIDExQTg7CitEMDUyO0QwNTI7MTEwRiAxMTcyIDExQTk7RDA1MjsxMTBGIDExNzIgMTFBOTsKK0QwNTM7RDA1MzsxMTBGIDExNzIgMTFBQTtEMDUzOzExMEYgMTE3MiAxMUFBOworRDA1NDtEMDU0OzExMEYgMTE3MiAxMUFCO0QwNTQ7MTEwRiAxMTcyIDExQUI7CitEMDU1O0QwNTU7MTEwRiAxMTcyIDExQUM7RDA1NTsxMTBGIDExNzIgMTFBQzsKK0QwNTY7RDA1NjsxMTBGIDExNzIgMTFBRDtEMDU2OzExMEYgMTE3MiAxMUFEOworRDA1NztEMDU3OzExMEYgMTE3MiAxMUFFO0QwNTc7MTEwRiAxMTcyIDExQUU7CitEMDU4O0QwNTg7MTEwRiAxMTcyIDExQUY7RDA1ODsxMTBGIDExNzIgMTFBRjsKK0QwNTk7RDA1OTsxMTBGIDExNzIgMTFCMDtEMDU5OzExMEYgMTE3MiAxMUIwOworRDA1QTtEMDVBOzExMEYgMTE3MiAxMUIxO0QwNUE7MTEwRiAxMTcyIDExQjE7CitEMDVCO0QwNUI7MTEwRiAxMTcyIDExQjI7RDA1QjsxMTBGIDExNzIgMTFCMjsKK0QwNUM7RDA1QzsxMTBGIDExNzIgMTFCMztEMDVDOzExMEYgMTE3MiAxMUIzOworRDA1RDtEMDVEOzExMEYgMTE3MiAxMUI0O0QwNUQ7MTEwRiAxMTcyIDExQjQ7CitEMDVFO0QwNUU7MTEwRiAxMTcyIDExQjU7RDA1RTsxMTBGIDExNzIgMTFCNTsKK0QwNUY7RDA1RjsxMTBGIDExNzIgMTFCNjtEMDVGOzExMEYgMTE3MiAxMUI2OworRDA2MDtEMDYwOzExMEYgMTE3MiAxMUI3O0QwNjA7MTEwRiAxMTcyIDExQjc7CitEMDYxO0QwNjE7MTEwRiAxMTcyIDExQjg7RDA2MTsxMTBGIDExNzIgMTFCODsKK0QwNjI7RDA2MjsxMTBGIDExNzIgMTFCOTtEMDYyOzExMEYgMTE3MiAxMUI5OworRDA2MztEMDYzOzExMEYgMTE3MiAxMUJBO0QwNjM7MTEwRiAxMTcyIDExQkE7CitEMDY0O0QwNjQ7MTEwRiAxMTcyIDExQkI7RDA2NDsxMTBGIDExNzIgMTFCQjsKK0QwNjU7RDA2NTsxMTBGIDExNzIgMTFCQztEMDY1OzExMEYgMTE3MiAxMUJDOworRDA2NjtEMDY2OzExMEYgMTE3MiAxMUJEO0QwNjY7MTEwRiAxMTcyIDExQkQ7CitEMDY3O0QwNjc7MTEwRiAxMTcyIDExQkU7RDA2NzsxMTBGIDExNzIgMTFCRTsKK0QwNjg7RDA2ODsxMTBGIDExNzIgMTFCRjtEMDY4OzExMEYgMTE3MiAxMUJGOworRDA2OTtEMDY5OzExMEYgMTE3MiAxMUMwO0QwNjk7MTEwRiAxMTcyIDExQzA7CitEMDZBO0QwNkE7MTEwRiAxMTcyIDExQzE7RDA2QTsxMTBGIDExNzIgMTFDMTsKK0QwNkI7RDA2QjsxMTBGIDExNzIgMTFDMjtEMDZCOzExMEYgMTE3MiAxMUMyOworRDA2QztEMDZDOzExMEYgMTE3MztEMDZDOzExMEYgMTE3MzsKK0QwNkQ7RDA2RDsxMTBGIDExNzMgMTFBODtEMDZEOzExMEYgMTE3MyAxMUE4OworRDA2RTtEMDZFOzExMEYgMTE3MyAxMUE5O0QwNkU7MTEwRiAxMTczIDExQTk7CitEMDZGO0QwNkY7MTEwRiAxMTczIDExQUE7RDA2RjsxMTBGIDExNzMgMTFBQTsKK0QwNzA7RDA3MDsxMTBGIDExNzMgMTFBQjtEMDcwOzExMEYgMTE3MyAxMUFCOworRDA3MTtEMDcxOzExMEYgMTE3MyAxMUFDO0QwNzE7MTEwRiAxMTczIDExQUM7CitEMDcyO0QwNzI7MTEwRiAxMTczIDExQUQ7RDA3MjsxMTBGIDExNzMgMTFBRDsKK0QwNzM7RDA3MzsxMTBGIDExNzMgMTFBRTtEMDczOzExMEYgMTE3MyAxMUFFOworRDA3NDtEMDc0OzExMEYgMTE3MyAxMUFGO0QwNzQ7MTEwRiAxMTczIDExQUY7CitEMDc1O0QwNzU7MTEwRiAxMTczIDExQjA7RDA3NTsxMTBGIDExNzMgMTFCMDsKK0QwNzY7RDA3NjsxMTBGIDExNzMgMTFCMTtEMDc2OzExMEYgMTE3MyAxMUIxOworRDA3NztEMDc3OzExMEYgMTE3MyAxMUIyO0QwNzc7MTEwRiAxMTczIDExQjI7CitEMDc4O0QwNzg7MTEwRiAxMTczIDExQjM7RDA3ODsxMTBGIDExNzMgMTFCMzsKK0QwNzk7RDA3OTsxMTBGIDExNzMgMTFCNDtEMDc5OzExMEYgMTE3MyAxMUI0OworRDA3QTtEMDdBOzExMEYgMTE3MyAxMUI1O0QwN0E7MTEwRiAxMTczIDExQjU7CitEMDdCO0QwN0I7MTEwRiAxMTczIDExQjY7RDA3QjsxMTBGIDExNzMgMTFCNjsKK0QwN0M7RDA3QzsxMTBGIDExNzMgMTFCNztEMDdDOzExMEYgMTE3MyAxMUI3OworRDA3RDtEMDdEOzExMEYgMTE3MyAxMUI4O0QwN0Q7MTEwRiAxMTczIDExQjg7CitEMDdFO0QwN0U7MTEwRiAxMTczIDExQjk7RDA3RTsxMTBGIDExNzMgMTFCOTsKK0QwN0Y7RDA3RjsxMTBGIDExNzMgMTFCQTtEMDdGOzExMEYgMTE3MyAxMUJBOworRDA4MDtEMDgwOzExMEYgMTE3MyAxMUJCO0QwODA7MTEwRiAxMTczIDExQkI7CitEMDgxO0QwODE7MTEwRiAxMTczIDExQkM7RDA4MTsxMTBGIDExNzMgMTFCQzsKK0QwODI7RDA4MjsxMTBGIDExNzMgMTFCRDtEMDgyOzExMEYgMTE3MyAxMUJEOworRDA4MztEMDgzOzExMEYgMTE3MyAxMUJFO0QwODM7MTEwRiAxMTczIDExQkU7CitEMDg0O0QwODQ7MTEwRiAxMTczIDExQkY7RDA4NDsxMTBGIDExNzMgMTFCRjsKK0QwODU7RDA4NTsxMTBGIDExNzMgMTFDMDtEMDg1OzExMEYgMTE3MyAxMUMwOworRDA4NjtEMDg2OzExMEYgMTE3MyAxMUMxO0QwODY7MTEwRiAxMTczIDExQzE7CitEMDg3O0QwODc7MTEwRiAxMTczIDExQzI7RDA4NzsxMTBGIDExNzMgMTFDMjsKK0QwODg7RDA4ODsxMTBGIDExNzQ7RDA4ODsxMTBGIDExNzQ7CitEMDg5O0QwODk7MTEwRiAxMTc0IDExQTg7RDA4OTsxMTBGIDExNzQgMTFBODsKK0QwOEE7RDA4QTsxMTBGIDExNzQgMTFBOTtEMDhBOzExMEYgMTE3NCAxMUE5OworRDA4QjtEMDhCOzExMEYgMTE3NCAxMUFBO0QwOEI7MTEwRiAxMTc0IDExQUE7CitEMDhDO0QwOEM7MTEwRiAxMTc0IDExQUI7RDA4QzsxMTBGIDExNzQgMTFBQjsKK0QwOEQ7RDA4RDsxMTBGIDExNzQgMTFBQztEMDhEOzExMEYgMTE3NCAxMUFDOworRDA4RTtEMDhFOzExMEYgMTE3NCAxMUFEO0QwOEU7MTEwRiAxMTc0IDExQUQ7CitEMDhGO0QwOEY7MTEwRiAxMTc0IDExQUU7RDA4RjsxMTBGIDExNzQgMTFBRTsKK0QwOTA7RDA5MDsxMTBGIDExNzQgMTFBRjtEMDkwOzExMEYgMTE3NCAxMUFGOworRDA5MTtEMDkxOzExMEYgMTE3NCAxMUIwO0QwOTE7MTEwRiAxMTc0IDExQjA7CitEMDkyO0QwOTI7MTEwRiAxMTc0IDExQjE7RDA5MjsxMTBGIDExNzQgMTFCMTsKK0QwOTM7RDA5MzsxMTBGIDExNzQgMTFCMjtEMDkzOzExMEYgMTE3NCAxMUIyOworRDA5NDtEMDk0OzExMEYgMTE3NCAxMUIzO0QwOTQ7MTEwRiAxMTc0IDExQjM7CitEMDk1O0QwOTU7MTEwRiAxMTc0IDExQjQ7RDA5NTsxMTBGIDExNzQgMTFCNDsKK0QwOTY7RDA5NjsxMTBGIDExNzQgMTFCNTtEMDk2OzExMEYgMTE3NCAxMUI1OworRDA5NztEMDk3OzExMEYgMTE3NCAxMUI2O0QwOTc7MTEwRiAxMTc0IDExQjY7CitEMDk4O0QwOTg7MTEwRiAxMTc0IDExQjc7RDA5ODsxMTBGIDExNzQgMTFCNzsKK0QwOTk7RDA5OTsxMTBGIDExNzQgMTFCODtEMDk5OzExMEYgMTE3NCAxMUI4OworRDA5QTtEMDlBOzExMEYgMTE3NCAxMUI5O0QwOUE7MTEwRiAxMTc0IDExQjk7CitEMDlCO0QwOUI7MTEwRiAxMTc0IDExQkE7RDA5QjsxMTBGIDExNzQgMTFCQTsKK0QwOUM7RDA5QzsxMTBGIDExNzQgMTFCQjtEMDlDOzExMEYgMTE3NCAxMUJCOworRDA5RDtEMDlEOzExMEYgMTE3NCAxMUJDO0QwOUQ7MTEwRiAxMTc0IDExQkM7CitEMDlFO0QwOUU7MTEwRiAxMTc0IDExQkQ7RDA5RTsxMTBGIDExNzQgMTFCRDsKK0QwOUY7RDA5RjsxMTBGIDExNzQgMTFCRTtEMDlGOzExMEYgMTE3NCAxMUJFOworRDBBMDtEMEEwOzExMEYgMTE3NCAxMUJGO0QwQTA7MTEwRiAxMTc0IDExQkY7CitEMEExO0QwQTE7MTEwRiAxMTc0IDExQzA7RDBBMTsxMTBGIDExNzQgMTFDMDsKK0QwQTI7RDBBMjsxMTBGIDExNzQgMTFDMTtEMEEyOzExMEYgMTE3NCAxMUMxOworRDBBMztEMEEzOzExMEYgMTE3NCAxMUMyO0QwQTM7MTEwRiAxMTc0IDExQzI7CitEMEE0O0QwQTQ7MTEwRiAxMTc1O0QwQTQ7MTEwRiAxMTc1OworRDBBNTtEMEE1OzExMEYgMTE3NSAxMUE4O0QwQTU7MTEwRiAxMTc1IDExQTg7CitEMEE2O0QwQTY7MTEwRiAxMTc1IDExQTk7RDBBNjsxMTBGIDExNzUgMTFBOTsKK0QwQTc7RDBBNzsxMTBGIDExNzUgMTFBQTtEMEE3OzExMEYgMTE3NSAxMUFBOworRDBBODtEMEE4OzExMEYgMTE3NSAxMUFCO0QwQTg7MTEwRiAxMTc1IDExQUI7CitEMEE5O0QwQTk7MTEwRiAxMTc1IDExQUM7RDBBOTsxMTBGIDExNzUgMTFBQzsKK0QwQUE7RDBBQTsxMTBGIDExNzUgMTFBRDtEMEFBOzExMEYgMTE3NSAxMUFEOworRDBBQjtEMEFCOzExMEYgMTE3NSAxMUFFO0QwQUI7MTEwRiAxMTc1IDExQUU7CitEMEFDO0QwQUM7MTEwRiAxMTc1IDExQUY7RDBBQzsxMTBGIDExNzUgMTFBRjsKK0QwQUQ7RDBBRDsxMTBGIDExNzUgMTFCMDtEMEFEOzExMEYgMTE3NSAxMUIwOworRDBBRTtEMEFFOzExMEYgMTE3NSAxMUIxO0QwQUU7MTEwRiAxMTc1IDExQjE7CitEMEFGO0QwQUY7MTEwRiAxMTc1IDExQjI7RDBBRjsxMTBGIDExNzUgMTFCMjsKK0QwQjA7RDBCMDsxMTBGIDExNzUgMTFCMztEMEIwOzExMEYgMTE3NSAxMUIzOworRDBCMTtEMEIxOzExMEYgMTE3NSAxMUI0O0QwQjE7MTEwRiAxMTc1IDExQjQ7CitEMEIyO0QwQjI7MTEwRiAxMTc1IDExQjU7RDBCMjsxMTBGIDExNzUgMTFCNTsKK0QwQjM7RDBCMzsxMTBGIDExNzUgMTFCNjtEMEIzOzExMEYgMTE3NSAxMUI2OworRDBCNDtEMEI0OzExMEYgMTE3NSAxMUI3O0QwQjQ7MTEwRiAxMTc1IDExQjc7CitEMEI1O0QwQjU7MTEwRiAxMTc1IDExQjg7RDBCNTsxMTBGIDExNzUgMTFCODsKK0QwQjY7RDBCNjsxMTBGIDExNzUgMTFCOTtEMEI2OzExMEYgMTE3NSAxMUI5OworRDBCNztEMEI3OzExMEYgMTE3NSAxMUJBO0QwQjc7MTEwRiAxMTc1IDExQkE7CitEMEI4O0QwQjg7MTEwRiAxMTc1IDExQkI7RDBCODsxMTBGIDExNzUgMTFCQjsKK0QwQjk7RDBCOTsxMTBGIDExNzUgMTFCQztEMEI5OzExMEYgMTE3NSAxMUJDOworRDBCQTtEMEJBOzExMEYgMTE3NSAxMUJEO0QwQkE7MTEwRiAxMTc1IDExQkQ7CitEMEJCO0QwQkI7MTEwRiAxMTc1IDExQkU7RDBCQjsxMTBGIDExNzUgMTFCRTsKK0QwQkM7RDBCQzsxMTBGIDExNzUgMTFCRjtEMEJDOzExMEYgMTE3NSAxMUJGOworRDBCRDtEMEJEOzExMEYgMTE3NSAxMUMwO0QwQkQ7MTEwRiAxMTc1IDExQzA7CitEMEJFO0QwQkU7MTEwRiAxMTc1IDExQzE7RDBCRTsxMTBGIDExNzUgMTFDMTsKK0QwQkY7RDBCRjsxMTBGIDExNzUgMTFDMjtEMEJGOzExMEYgMTE3NSAxMUMyOworRDBDMDtEMEMwOzExMTAgMTE2MTtEMEMwOzExMTAgMTE2MTsKK0QwQzE7RDBDMTsxMTEwIDExNjEgMTFBODtEMEMxOzExMTAgMTE2MSAxMUE4OworRDBDMjtEMEMyOzExMTAgMTE2MSAxMUE5O0QwQzI7MTExMCAxMTYxIDExQTk7CitEMEMzO0QwQzM7MTExMCAxMTYxIDExQUE7RDBDMzsxMTEwIDExNjEgMTFBQTsKK0QwQzQ7RDBDNDsxMTEwIDExNjEgMTFBQjtEMEM0OzExMTAgMTE2MSAxMUFCOworRDBDNTtEMEM1OzExMTAgMTE2MSAxMUFDO0QwQzU7MTExMCAxMTYxIDExQUM7CitEMEM2O0QwQzY7MTExMCAxMTYxIDExQUQ7RDBDNjsxMTEwIDExNjEgMTFBRDsKK0QwQzc7RDBDNzsxMTEwIDExNjEgMTFBRTtEMEM3OzExMTAgMTE2MSAxMUFFOworRDBDODtEMEM4OzExMTAgMTE2MSAxMUFGO0QwQzg7MTExMCAxMTYxIDExQUY7CitEMEM5O0QwQzk7MTExMCAxMTYxIDExQjA7RDBDOTsxMTEwIDExNjEgMTFCMDsKK0QwQ0E7RDBDQTsxMTEwIDExNjEgMTFCMTtEMENBOzExMTAgMTE2MSAxMUIxOworRDBDQjtEMENCOzExMTAgMTE2MSAxMUIyO0QwQ0I7MTExMCAxMTYxIDExQjI7CitEMENDO0QwQ0M7MTExMCAxMTYxIDExQjM7RDBDQzsxMTEwIDExNjEgMTFCMzsKK0QwQ0Q7RDBDRDsxMTEwIDExNjEgMTFCNDtEMENEOzExMTAgMTE2MSAxMUI0OworRDBDRTtEMENFOzExMTAgMTE2MSAxMUI1O0QwQ0U7MTExMCAxMTYxIDExQjU7CitEMENGO0QwQ0Y7MTExMCAxMTYxIDExQjY7RDBDRjsxMTEwIDExNjEgMTFCNjsKK0QwRDA7RDBEMDsxMTEwIDExNjEgMTFCNztEMEQwOzExMTAgMTE2MSAxMUI3OworRDBEMTtEMEQxOzExMTAgMTE2MSAxMUI4O0QwRDE7MTExMCAxMTYxIDExQjg7CitEMEQyO0QwRDI7MTExMCAxMTYxIDExQjk7RDBEMjsxMTEwIDExNjEgMTFCOTsKK0QwRDM7RDBEMzsxMTEwIDExNjEgMTFCQTtEMEQzOzExMTAgMTE2MSAxMUJBOworRDBENDtEMEQ0OzExMTAgMTE2MSAxMUJCO0QwRDQ7MTExMCAxMTYxIDExQkI7CitEMEQ1O0QwRDU7MTExMCAxMTYxIDExQkM7RDBENTsxMTEwIDExNjEgMTFCQzsKK0QwRDY7RDBENjsxMTEwIDExNjEgMTFCRDtEMEQ2OzExMTAgMTE2MSAxMUJEOworRDBENztEMEQ3OzExMTAgMTE2MSAxMUJFO0QwRDc7MTExMCAxMTYxIDExQkU7CitEMEQ4O0QwRDg7MTExMCAxMTYxIDExQkY7RDBEODsxMTEwIDExNjEgMTFCRjsKK0QwRDk7RDBEOTsxMTEwIDExNjEgMTFDMDtEMEQ5OzExMTAgMTE2MSAxMUMwOworRDBEQTtEMERBOzExMTAgMTE2MSAxMUMxO0QwREE7MTExMCAxMTYxIDExQzE7CitEMERCO0QwREI7MTExMCAxMTYxIDExQzI7RDBEQjsxMTEwIDExNjEgMTFDMjsKK0QwREM7RDBEQzsxMTEwIDExNjI7RDBEQzsxMTEwIDExNjI7CitEMEREO0QwREQ7MTExMCAxMTYyIDExQTg7RDBERDsxMTEwIDExNjIgMTFBODsKK0QwREU7RDBERTsxMTEwIDExNjIgMTFBOTtEMERFOzExMTAgMTE2MiAxMUE5OworRDBERjtEMERGOzExMTAgMTE2MiAxMUFBO0QwREY7MTExMCAxMTYyIDExQUE7CitEMEUwO0QwRTA7MTExMCAxMTYyIDExQUI7RDBFMDsxMTEwIDExNjIgMTFBQjsKK0QwRTE7RDBFMTsxMTEwIDExNjIgMTFBQztEMEUxOzExMTAgMTE2MiAxMUFDOworRDBFMjtEMEUyOzExMTAgMTE2MiAxMUFEO0QwRTI7MTExMCAxMTYyIDExQUQ7CitEMEUzO0QwRTM7MTExMCAxMTYyIDExQUU7RDBFMzsxMTEwIDExNjIgMTFBRTsKK0QwRTQ7RDBFNDsxMTEwIDExNjIgMTFBRjtEMEU0OzExMTAgMTE2MiAxMUFGOworRDBFNTtEMEU1OzExMTAgMTE2MiAxMUIwO0QwRTU7MTExMCAxMTYyIDExQjA7CitEMEU2O0QwRTY7MTExMCAxMTYyIDExQjE7RDBFNjsxMTEwIDExNjIgMTFCMTsKK0QwRTc7RDBFNzsxMTEwIDExNjIgMTFCMjtEMEU3OzExMTAgMTE2MiAxMUIyOworRDBFODtEMEU4OzExMTAgMTE2MiAxMUIzO0QwRTg7MTExMCAxMTYyIDExQjM7CitEMEU5O0QwRTk7MTExMCAxMTYyIDExQjQ7RDBFOTsxMTEwIDExNjIgMTFCNDsKK0QwRUE7RDBFQTsxMTEwIDExNjIgMTFCNTtEMEVBOzExMTAgMTE2MiAxMUI1OworRDBFQjtEMEVCOzExMTAgMTE2MiAxMUI2O0QwRUI7MTExMCAxMTYyIDExQjY7CitEMEVDO0QwRUM7MTExMCAxMTYyIDExQjc7RDBFQzsxMTEwIDExNjIgMTFCNzsKK0QwRUQ7RDBFRDsxMTEwIDExNjIgMTFCODtEMEVEOzExMTAgMTE2MiAxMUI4OworRDBFRTtEMEVFOzExMTAgMTE2MiAxMUI5O0QwRUU7MTExMCAxMTYyIDExQjk7CitEMEVGO0QwRUY7MTExMCAxMTYyIDExQkE7RDBFRjsxMTEwIDExNjIgMTFCQTsKK0QwRjA7RDBGMDsxMTEwIDExNjIgMTFCQjtEMEYwOzExMTAgMTE2MiAxMUJCOworRDBGMTtEMEYxOzExMTAgMTE2MiAxMUJDO0QwRjE7MTExMCAxMTYyIDExQkM7CitEMEYyO0QwRjI7MTExMCAxMTYyIDExQkQ7RDBGMjsxMTEwIDExNjIgMTFCRDsKK0QwRjM7RDBGMzsxMTEwIDExNjIgMTFCRTtEMEYzOzExMTAgMTE2MiAxMUJFOworRDBGNDtEMEY0OzExMTAgMTE2MiAxMUJGO0QwRjQ7MTExMCAxMTYyIDExQkY7CitEMEY1O0QwRjU7MTExMCAxMTYyIDExQzA7RDBGNTsxMTEwIDExNjIgMTFDMDsKK0QwRjY7RDBGNjsxMTEwIDExNjIgMTFDMTtEMEY2OzExMTAgMTE2MiAxMUMxOworRDBGNztEMEY3OzExMTAgMTE2MiAxMUMyO0QwRjc7MTExMCAxMTYyIDExQzI7CitEMEY4O0QwRjg7MTExMCAxMTYzO0QwRjg7MTExMCAxMTYzOworRDBGOTtEMEY5OzExMTAgMTE2MyAxMUE4O0QwRjk7MTExMCAxMTYzIDExQTg7CitEMEZBO0QwRkE7MTExMCAxMTYzIDExQTk7RDBGQTsxMTEwIDExNjMgMTFBOTsKK0QwRkI7RDBGQjsxMTEwIDExNjMgMTFBQTtEMEZCOzExMTAgMTE2MyAxMUFBOworRDBGQztEMEZDOzExMTAgMTE2MyAxMUFCO0QwRkM7MTExMCAxMTYzIDExQUI7CitEMEZEO0QwRkQ7MTExMCAxMTYzIDExQUM7RDBGRDsxMTEwIDExNjMgMTFBQzsKK0QwRkU7RDBGRTsxMTEwIDExNjMgMTFBRDtEMEZFOzExMTAgMTE2MyAxMUFEOworRDBGRjtEMEZGOzExMTAgMTE2MyAxMUFFO0QwRkY7MTExMCAxMTYzIDExQUU7CitEMTAwO0QxMDA7MTExMCAxMTYzIDExQUY7RDEwMDsxMTEwIDExNjMgMTFBRjsKK0QxMDE7RDEwMTsxMTEwIDExNjMgMTFCMDtEMTAxOzExMTAgMTE2MyAxMUIwOworRDEwMjtEMTAyOzExMTAgMTE2MyAxMUIxO0QxMDI7MTExMCAxMTYzIDExQjE7CitEMTAzO0QxMDM7MTExMCAxMTYzIDExQjI7RDEwMzsxMTEwIDExNjMgMTFCMjsKK0QxMDQ7RDEwNDsxMTEwIDExNjMgMTFCMztEMTA0OzExMTAgMTE2MyAxMUIzOworRDEwNTtEMTA1OzExMTAgMTE2MyAxMUI0O0QxMDU7MTExMCAxMTYzIDExQjQ7CitEMTA2O0QxMDY7MTExMCAxMTYzIDExQjU7RDEwNjsxMTEwIDExNjMgMTFCNTsKK0QxMDc7RDEwNzsxMTEwIDExNjMgMTFCNjtEMTA3OzExMTAgMTE2MyAxMUI2OworRDEwODtEMTA4OzExMTAgMTE2MyAxMUI3O0QxMDg7MTExMCAxMTYzIDExQjc7CitEMTA5O0QxMDk7MTExMCAxMTYzIDExQjg7RDEwOTsxMTEwIDExNjMgMTFCODsKK0QxMEE7RDEwQTsxMTEwIDExNjMgMTFCOTtEMTBBOzExMTAgMTE2MyAxMUI5OworRDEwQjtEMTBCOzExMTAgMTE2MyAxMUJBO0QxMEI7MTExMCAxMTYzIDExQkE7CitEMTBDO0QxMEM7MTExMCAxMTYzIDExQkI7RDEwQzsxMTEwIDExNjMgMTFCQjsKK0QxMEQ7RDEwRDsxMTEwIDExNjMgMTFCQztEMTBEOzExMTAgMTE2MyAxMUJDOworRDEwRTtEMTBFOzExMTAgMTE2MyAxMUJEO0QxMEU7MTExMCAxMTYzIDExQkQ7CitEMTBGO0QxMEY7MTExMCAxMTYzIDExQkU7RDEwRjsxMTEwIDExNjMgMTFCRTsKK0QxMTA7RDExMDsxMTEwIDExNjMgMTFCRjtEMTEwOzExMTAgMTE2MyAxMUJGOworRDExMTtEMTExOzExMTAgMTE2MyAxMUMwO0QxMTE7MTExMCAxMTYzIDExQzA7CitEMTEyO0QxMTI7MTExMCAxMTYzIDExQzE7RDExMjsxMTEwIDExNjMgMTFDMTsKK0QxMTM7RDExMzsxMTEwIDExNjMgMTFDMjtEMTEzOzExMTAgMTE2MyAxMUMyOworRDExNDtEMTE0OzExMTAgMTE2NDtEMTE0OzExMTAgMTE2NDsKK0QxMTU7RDExNTsxMTEwIDExNjQgMTFBODtEMTE1OzExMTAgMTE2NCAxMUE4OworRDExNjtEMTE2OzExMTAgMTE2NCAxMUE5O0QxMTY7MTExMCAxMTY0IDExQTk7CitEMTE3O0QxMTc7MTExMCAxMTY0IDExQUE7RDExNzsxMTEwIDExNjQgMTFBQTsKK0QxMTg7RDExODsxMTEwIDExNjQgMTFBQjtEMTE4OzExMTAgMTE2NCAxMUFCOworRDExOTtEMTE5OzExMTAgMTE2NCAxMUFDO0QxMTk7MTExMCAxMTY0IDExQUM7CitEMTFBO0QxMUE7MTExMCAxMTY0IDExQUQ7RDExQTsxMTEwIDExNjQgMTFBRDsKK0QxMUI7RDExQjsxMTEwIDExNjQgMTFBRTtEMTFCOzExMTAgMTE2NCAxMUFFOworRDExQztEMTFDOzExMTAgMTE2NCAxMUFGO0QxMUM7MTExMCAxMTY0IDExQUY7CitEMTFEO0QxMUQ7MTExMCAxMTY0IDExQjA7RDExRDsxMTEwIDExNjQgMTFCMDsKK0QxMUU7RDExRTsxMTEwIDExNjQgMTFCMTtEMTFFOzExMTAgMTE2NCAxMUIxOworRDExRjtEMTFGOzExMTAgMTE2NCAxMUIyO0QxMUY7MTExMCAxMTY0IDExQjI7CitEMTIwO0QxMjA7MTExMCAxMTY0IDExQjM7RDEyMDsxMTEwIDExNjQgMTFCMzsKK0QxMjE7RDEyMTsxMTEwIDExNjQgMTFCNDtEMTIxOzExMTAgMTE2NCAxMUI0OworRDEyMjtEMTIyOzExMTAgMTE2NCAxMUI1O0QxMjI7MTExMCAxMTY0IDExQjU7CitEMTIzO0QxMjM7MTExMCAxMTY0IDExQjY7RDEyMzsxMTEwIDExNjQgMTFCNjsKK0QxMjQ7RDEyNDsxMTEwIDExNjQgMTFCNztEMTI0OzExMTAgMTE2NCAxMUI3OworRDEyNTtEMTI1OzExMTAgMTE2NCAxMUI4O0QxMjU7MTExMCAxMTY0IDExQjg7CitEMTI2O0QxMjY7MTExMCAxMTY0IDExQjk7RDEyNjsxMTEwIDExNjQgMTFCOTsKK0QxMjc7RDEyNzsxMTEwIDExNjQgMTFCQTtEMTI3OzExMTAgMTE2NCAxMUJBOworRDEyODtEMTI4OzExMTAgMTE2NCAxMUJCO0QxMjg7MTExMCAxMTY0IDExQkI7CitEMTI5O0QxMjk7MTExMCAxMTY0IDExQkM7RDEyOTsxMTEwIDExNjQgMTFCQzsKK0QxMkE7RDEyQTsxMTEwIDExNjQgMTFCRDtEMTJBOzExMTAgMTE2NCAxMUJEOworRDEyQjtEMTJCOzExMTAgMTE2NCAxMUJFO0QxMkI7MTExMCAxMTY0IDExQkU7CitEMTJDO0QxMkM7MTExMCAxMTY0IDExQkY7RDEyQzsxMTEwIDExNjQgMTFCRjsKK0QxMkQ7RDEyRDsxMTEwIDExNjQgMTFDMDtEMTJEOzExMTAgMTE2NCAxMUMwOworRDEyRTtEMTJFOzExMTAgMTE2NCAxMUMxO0QxMkU7MTExMCAxMTY0IDExQzE7CitEMTJGO0QxMkY7MTExMCAxMTY0IDExQzI7RDEyRjsxMTEwIDExNjQgMTFDMjsKK0QxMzA7RDEzMDsxMTEwIDExNjU7RDEzMDsxMTEwIDExNjU7CitEMTMxO0QxMzE7MTExMCAxMTY1IDExQTg7RDEzMTsxMTEwIDExNjUgMTFBODsKK0QxMzI7RDEzMjsxMTEwIDExNjUgMTFBOTtEMTMyOzExMTAgMTE2NSAxMUE5OworRDEzMztEMTMzOzExMTAgMTE2NSAxMUFBO0QxMzM7MTExMCAxMTY1IDExQUE7CitEMTM0O0QxMzQ7MTExMCAxMTY1IDExQUI7RDEzNDsxMTEwIDExNjUgMTFBQjsKK0QxMzU7RDEzNTsxMTEwIDExNjUgMTFBQztEMTM1OzExMTAgMTE2NSAxMUFDOworRDEzNjtEMTM2OzExMTAgMTE2NSAxMUFEO0QxMzY7MTExMCAxMTY1IDExQUQ7CitEMTM3O0QxMzc7MTExMCAxMTY1IDExQUU7RDEzNzsxMTEwIDExNjUgMTFBRTsKK0QxMzg7RDEzODsxMTEwIDExNjUgMTFBRjtEMTM4OzExMTAgMTE2NSAxMUFGOworRDEzOTtEMTM5OzExMTAgMTE2NSAxMUIwO0QxMzk7MTExMCAxMTY1IDExQjA7CitEMTNBO0QxM0E7MTExMCAxMTY1IDExQjE7RDEzQTsxMTEwIDExNjUgMTFCMTsKK0QxM0I7RDEzQjsxMTEwIDExNjUgMTFCMjtEMTNCOzExMTAgMTE2NSAxMUIyOworRDEzQztEMTNDOzExMTAgMTE2NSAxMUIzO0QxM0M7MTExMCAxMTY1IDExQjM7CitEMTNEO0QxM0Q7MTExMCAxMTY1IDExQjQ7RDEzRDsxMTEwIDExNjUgMTFCNDsKK0QxM0U7RDEzRTsxMTEwIDExNjUgMTFCNTtEMTNFOzExMTAgMTE2NSAxMUI1OworRDEzRjtEMTNGOzExMTAgMTE2NSAxMUI2O0QxM0Y7MTExMCAxMTY1IDExQjY7CitEMTQwO0QxNDA7MTExMCAxMTY1IDExQjc7RDE0MDsxMTEwIDExNjUgMTFCNzsKK0QxNDE7RDE0MTsxMTEwIDExNjUgMTFCODtEMTQxOzExMTAgMTE2NSAxMUI4OworRDE0MjtEMTQyOzExMTAgMTE2NSAxMUI5O0QxNDI7MTExMCAxMTY1IDExQjk7CitEMTQzO0QxNDM7MTExMCAxMTY1IDExQkE7RDE0MzsxMTEwIDExNjUgMTFCQTsKK0QxNDQ7RDE0NDsxMTEwIDExNjUgMTFCQjtEMTQ0OzExMTAgMTE2NSAxMUJCOworRDE0NTtEMTQ1OzExMTAgMTE2NSAxMUJDO0QxNDU7MTExMCAxMTY1IDExQkM7CitEMTQ2O0QxNDY7MTExMCAxMTY1IDExQkQ7RDE0NjsxMTEwIDExNjUgMTFCRDsKK0QxNDc7RDE0NzsxMTEwIDExNjUgMTFCRTtEMTQ3OzExMTAgMTE2NSAxMUJFOworRDE0ODtEMTQ4OzExMTAgMTE2NSAxMUJGO0QxNDg7MTExMCAxMTY1IDExQkY7CitEMTQ5O0QxNDk7MTExMCAxMTY1IDExQzA7RDE0OTsxMTEwIDExNjUgMTFDMDsKK0QxNEE7RDE0QTsxMTEwIDExNjUgMTFDMTtEMTRBOzExMTAgMTE2NSAxMUMxOworRDE0QjtEMTRCOzExMTAgMTE2NSAxMUMyO0QxNEI7MTExMCAxMTY1IDExQzI7CitEMTRDO0QxNEM7MTExMCAxMTY2O0QxNEM7MTExMCAxMTY2OworRDE0RDtEMTREOzExMTAgMTE2NiAxMUE4O0QxNEQ7MTExMCAxMTY2IDExQTg7CitEMTRFO0QxNEU7MTExMCAxMTY2IDExQTk7RDE0RTsxMTEwIDExNjYgMTFBOTsKK0QxNEY7RDE0RjsxMTEwIDExNjYgMTFBQTtEMTRGOzExMTAgMTE2NiAxMUFBOworRDE1MDtEMTUwOzExMTAgMTE2NiAxMUFCO0QxNTA7MTExMCAxMTY2IDExQUI7CitEMTUxO0QxNTE7MTExMCAxMTY2IDExQUM7RDE1MTsxMTEwIDExNjYgMTFBQzsKK0QxNTI7RDE1MjsxMTEwIDExNjYgMTFBRDtEMTUyOzExMTAgMTE2NiAxMUFEOworRDE1MztEMTUzOzExMTAgMTE2NiAxMUFFO0QxNTM7MTExMCAxMTY2IDExQUU7CitEMTU0O0QxNTQ7MTExMCAxMTY2IDExQUY7RDE1NDsxMTEwIDExNjYgMTFBRjsKK0QxNTU7RDE1NTsxMTEwIDExNjYgMTFCMDtEMTU1OzExMTAgMTE2NiAxMUIwOworRDE1NjtEMTU2OzExMTAgMTE2NiAxMUIxO0QxNTY7MTExMCAxMTY2IDExQjE7CitEMTU3O0QxNTc7MTExMCAxMTY2IDExQjI7RDE1NzsxMTEwIDExNjYgMTFCMjsKK0QxNTg7RDE1ODsxMTEwIDExNjYgMTFCMztEMTU4OzExMTAgMTE2NiAxMUIzOworRDE1OTtEMTU5OzExMTAgMTE2NiAxMUI0O0QxNTk7MTExMCAxMTY2IDExQjQ7CitEMTVBO0QxNUE7MTExMCAxMTY2IDExQjU7RDE1QTsxMTEwIDExNjYgMTFCNTsKK0QxNUI7RDE1QjsxMTEwIDExNjYgMTFCNjtEMTVCOzExMTAgMTE2NiAxMUI2OworRDE1QztEMTVDOzExMTAgMTE2NiAxMUI3O0QxNUM7MTExMCAxMTY2IDExQjc7CitEMTVEO0QxNUQ7MTExMCAxMTY2IDExQjg7RDE1RDsxMTEwIDExNjYgMTFCODsKK0QxNUU7RDE1RTsxMTEwIDExNjYgMTFCOTtEMTVFOzExMTAgMTE2NiAxMUI5OworRDE1RjtEMTVGOzExMTAgMTE2NiAxMUJBO0QxNUY7MTExMCAxMTY2IDExQkE7CitEMTYwO0QxNjA7MTExMCAxMTY2IDExQkI7RDE2MDsxMTEwIDExNjYgMTFCQjsKK0QxNjE7RDE2MTsxMTEwIDExNjYgMTFCQztEMTYxOzExMTAgMTE2NiAxMUJDOworRDE2MjtEMTYyOzExMTAgMTE2NiAxMUJEO0QxNjI7MTExMCAxMTY2IDExQkQ7CitEMTYzO0QxNjM7MTExMCAxMTY2IDExQkU7RDE2MzsxMTEwIDExNjYgMTFCRTsKK0QxNjQ7RDE2NDsxMTEwIDExNjYgMTFCRjtEMTY0OzExMTAgMTE2NiAxMUJGOworRDE2NTtEMTY1OzExMTAgMTE2NiAxMUMwO0QxNjU7MTExMCAxMTY2IDExQzA7CitEMTY2O0QxNjY7MTExMCAxMTY2IDExQzE7RDE2NjsxMTEwIDExNjYgMTFDMTsKK0QxNjc7RDE2NzsxMTEwIDExNjYgMTFDMjtEMTY3OzExMTAgMTE2NiAxMUMyOworRDE2ODtEMTY4OzExMTAgMTE2NztEMTY4OzExMTAgMTE2NzsKK0QxNjk7RDE2OTsxMTEwIDExNjcgMTFBODtEMTY5OzExMTAgMTE2NyAxMUE4OworRDE2QTtEMTZBOzExMTAgMTE2NyAxMUE5O0QxNkE7MTExMCAxMTY3IDExQTk7CitEMTZCO0QxNkI7MTExMCAxMTY3IDExQUE7RDE2QjsxMTEwIDExNjcgMTFBQTsKK0QxNkM7RDE2QzsxMTEwIDExNjcgMTFBQjtEMTZDOzExMTAgMTE2NyAxMUFCOworRDE2RDtEMTZEOzExMTAgMTE2NyAxMUFDO0QxNkQ7MTExMCAxMTY3IDExQUM7CitEMTZFO0QxNkU7MTExMCAxMTY3IDExQUQ7RDE2RTsxMTEwIDExNjcgMTFBRDsKK0QxNkY7RDE2RjsxMTEwIDExNjcgMTFBRTtEMTZGOzExMTAgMTE2NyAxMUFFOworRDE3MDtEMTcwOzExMTAgMTE2NyAxMUFGO0QxNzA7MTExMCAxMTY3IDExQUY7CitEMTcxO0QxNzE7MTExMCAxMTY3IDExQjA7RDE3MTsxMTEwIDExNjcgMTFCMDsKK0QxNzI7RDE3MjsxMTEwIDExNjcgMTFCMTtEMTcyOzExMTAgMTE2NyAxMUIxOworRDE3MztEMTczOzExMTAgMTE2NyAxMUIyO0QxNzM7MTExMCAxMTY3IDExQjI7CitEMTc0O0QxNzQ7MTExMCAxMTY3IDExQjM7RDE3NDsxMTEwIDExNjcgMTFCMzsKK0QxNzU7RDE3NTsxMTEwIDExNjcgMTFCNDtEMTc1OzExMTAgMTE2NyAxMUI0OworRDE3NjtEMTc2OzExMTAgMTE2NyAxMUI1O0QxNzY7MTExMCAxMTY3IDExQjU7CitEMTc3O0QxNzc7MTExMCAxMTY3IDExQjY7RDE3NzsxMTEwIDExNjcgMTFCNjsKK0QxNzg7RDE3ODsxMTEwIDExNjcgMTFCNztEMTc4OzExMTAgMTE2NyAxMUI3OworRDE3OTtEMTc5OzExMTAgMTE2NyAxMUI4O0QxNzk7MTExMCAxMTY3IDExQjg7CitEMTdBO0QxN0E7MTExMCAxMTY3IDExQjk7RDE3QTsxMTEwIDExNjcgMTFCOTsKK0QxN0I7RDE3QjsxMTEwIDExNjcgMTFCQTtEMTdCOzExMTAgMTE2NyAxMUJBOworRDE3QztEMTdDOzExMTAgMTE2NyAxMUJCO0QxN0M7MTExMCAxMTY3IDExQkI7CitEMTdEO0QxN0Q7MTExMCAxMTY3IDExQkM7RDE3RDsxMTEwIDExNjcgMTFCQzsKK0QxN0U7RDE3RTsxMTEwIDExNjcgMTFCRDtEMTdFOzExMTAgMTE2NyAxMUJEOworRDE3RjtEMTdGOzExMTAgMTE2NyAxMUJFO0QxN0Y7MTExMCAxMTY3IDExQkU7CitEMTgwO0QxODA7MTExMCAxMTY3IDExQkY7RDE4MDsxMTEwIDExNjcgMTFCRjsKK0QxODE7RDE4MTsxMTEwIDExNjcgMTFDMDtEMTgxOzExMTAgMTE2NyAxMUMwOworRDE4MjtEMTgyOzExMTAgMTE2NyAxMUMxO0QxODI7MTExMCAxMTY3IDExQzE7CitEMTgzO0QxODM7MTExMCAxMTY3IDExQzI7RDE4MzsxMTEwIDExNjcgMTFDMjsKK0QxODQ7RDE4NDsxMTEwIDExNjg7RDE4NDsxMTEwIDExNjg7CitEMTg1O0QxODU7MTExMCAxMTY4IDExQTg7RDE4NTsxMTEwIDExNjggMTFBODsKK0QxODY7RDE4NjsxMTEwIDExNjggMTFBOTtEMTg2OzExMTAgMTE2OCAxMUE5OworRDE4NztEMTg3OzExMTAgMTE2OCAxMUFBO0QxODc7MTExMCAxMTY4IDExQUE7CitEMTg4O0QxODg7MTExMCAxMTY4IDExQUI7RDE4ODsxMTEwIDExNjggMTFBQjsKK0QxODk7RDE4OTsxMTEwIDExNjggMTFBQztEMTg5OzExMTAgMTE2OCAxMUFDOworRDE4QTtEMThBOzExMTAgMTE2OCAxMUFEO0QxOEE7MTExMCAxMTY4IDExQUQ7CitEMThCO0QxOEI7MTExMCAxMTY4IDExQUU7RDE4QjsxMTEwIDExNjggMTFBRTsKK0QxOEM7RDE4QzsxMTEwIDExNjggMTFBRjtEMThDOzExMTAgMTE2OCAxMUFGOworRDE4RDtEMThEOzExMTAgMTE2OCAxMUIwO0QxOEQ7MTExMCAxMTY4IDExQjA7CitEMThFO0QxOEU7MTExMCAxMTY4IDExQjE7RDE4RTsxMTEwIDExNjggMTFCMTsKK0QxOEY7RDE4RjsxMTEwIDExNjggMTFCMjtEMThGOzExMTAgMTE2OCAxMUIyOworRDE5MDtEMTkwOzExMTAgMTE2OCAxMUIzO0QxOTA7MTExMCAxMTY4IDExQjM7CitEMTkxO0QxOTE7MTExMCAxMTY4IDExQjQ7RDE5MTsxMTEwIDExNjggMTFCNDsKK0QxOTI7RDE5MjsxMTEwIDExNjggMTFCNTtEMTkyOzExMTAgMTE2OCAxMUI1OworRDE5MztEMTkzOzExMTAgMTE2OCAxMUI2O0QxOTM7MTExMCAxMTY4IDExQjY7CitEMTk0O0QxOTQ7MTExMCAxMTY4IDExQjc7RDE5NDsxMTEwIDExNjggMTFCNzsKK0QxOTU7RDE5NTsxMTEwIDExNjggMTFCODtEMTk1OzExMTAgMTE2OCAxMUI4OworRDE5NjtEMTk2OzExMTAgMTE2OCAxMUI5O0QxOTY7MTExMCAxMTY4IDExQjk7CitEMTk3O0QxOTc7MTExMCAxMTY4IDExQkE7RDE5NzsxMTEwIDExNjggMTFCQTsKK0QxOTg7RDE5ODsxMTEwIDExNjggMTFCQjtEMTk4OzExMTAgMTE2OCAxMUJCOworRDE5OTtEMTk5OzExMTAgMTE2OCAxMUJDO0QxOTk7MTExMCAxMTY4IDExQkM7CitEMTlBO0QxOUE7MTExMCAxMTY4IDExQkQ7RDE5QTsxMTEwIDExNjggMTFCRDsKK0QxOUI7RDE5QjsxMTEwIDExNjggMTFCRTtEMTlCOzExMTAgMTE2OCAxMUJFOworRDE5QztEMTlDOzExMTAgMTE2OCAxMUJGO0QxOUM7MTExMCAxMTY4IDExQkY7CitEMTlEO0QxOUQ7MTExMCAxMTY4IDExQzA7RDE5RDsxMTEwIDExNjggMTFDMDsKK0QxOUU7RDE5RTsxMTEwIDExNjggMTFDMTtEMTlFOzExMTAgMTE2OCAxMUMxOworRDE5RjtEMTlGOzExMTAgMTE2OCAxMUMyO0QxOUY7MTExMCAxMTY4IDExQzI7CitEMUEwO0QxQTA7MTExMCAxMTY5O0QxQTA7MTExMCAxMTY5OworRDFBMTtEMUExOzExMTAgMTE2OSAxMUE4O0QxQTE7MTExMCAxMTY5IDExQTg7CitEMUEyO0QxQTI7MTExMCAxMTY5IDExQTk7RDFBMjsxMTEwIDExNjkgMTFBOTsKK0QxQTM7RDFBMzsxMTEwIDExNjkgMTFBQTtEMUEzOzExMTAgMTE2OSAxMUFBOworRDFBNDtEMUE0OzExMTAgMTE2OSAxMUFCO0QxQTQ7MTExMCAxMTY5IDExQUI7CitEMUE1O0QxQTU7MTExMCAxMTY5IDExQUM7RDFBNTsxMTEwIDExNjkgMTFBQzsKK0QxQTY7RDFBNjsxMTEwIDExNjkgMTFBRDtEMUE2OzExMTAgMTE2OSAxMUFEOworRDFBNztEMUE3OzExMTAgMTE2OSAxMUFFO0QxQTc7MTExMCAxMTY5IDExQUU7CitEMUE4O0QxQTg7MTExMCAxMTY5IDExQUY7RDFBODsxMTEwIDExNjkgMTFBRjsKK0QxQTk7RDFBOTsxMTEwIDExNjkgMTFCMDtEMUE5OzExMTAgMTE2OSAxMUIwOworRDFBQTtEMUFBOzExMTAgMTE2OSAxMUIxO0QxQUE7MTExMCAxMTY5IDExQjE7CitEMUFCO0QxQUI7MTExMCAxMTY5IDExQjI7RDFBQjsxMTEwIDExNjkgMTFCMjsKK0QxQUM7RDFBQzsxMTEwIDExNjkgMTFCMztEMUFDOzExMTAgMTE2OSAxMUIzOworRDFBRDtEMUFEOzExMTAgMTE2OSAxMUI0O0QxQUQ7MTExMCAxMTY5IDExQjQ7CitEMUFFO0QxQUU7MTExMCAxMTY5IDExQjU7RDFBRTsxMTEwIDExNjkgMTFCNTsKK0QxQUY7RDFBRjsxMTEwIDExNjkgMTFCNjtEMUFGOzExMTAgMTE2OSAxMUI2OworRDFCMDtEMUIwOzExMTAgMTE2OSAxMUI3O0QxQjA7MTExMCAxMTY5IDExQjc7CitEMUIxO0QxQjE7MTExMCAxMTY5IDExQjg7RDFCMTsxMTEwIDExNjkgMTFCODsKK0QxQjI7RDFCMjsxMTEwIDExNjkgMTFCOTtEMUIyOzExMTAgMTE2OSAxMUI5OworRDFCMztEMUIzOzExMTAgMTE2OSAxMUJBO0QxQjM7MTExMCAxMTY5IDExQkE7CitEMUI0O0QxQjQ7MTExMCAxMTY5IDExQkI7RDFCNDsxMTEwIDExNjkgMTFCQjsKK0QxQjU7RDFCNTsxMTEwIDExNjkgMTFCQztEMUI1OzExMTAgMTE2OSAxMUJDOworRDFCNjtEMUI2OzExMTAgMTE2OSAxMUJEO0QxQjY7MTExMCAxMTY5IDExQkQ7CitEMUI3O0QxQjc7MTExMCAxMTY5IDExQkU7RDFCNzsxMTEwIDExNjkgMTFCRTsKK0QxQjg7RDFCODsxMTEwIDExNjkgMTFCRjtEMUI4OzExMTAgMTE2OSAxMUJGOworRDFCOTtEMUI5OzExMTAgMTE2OSAxMUMwO0QxQjk7MTExMCAxMTY5IDExQzA7CitEMUJBO0QxQkE7MTExMCAxMTY5IDExQzE7RDFCQTsxMTEwIDExNjkgMTFDMTsKK0QxQkI7RDFCQjsxMTEwIDExNjkgMTFDMjtEMUJCOzExMTAgMTE2OSAxMUMyOworRDFCQztEMUJDOzExMTAgMTE2QTtEMUJDOzExMTAgMTE2QTsKK0QxQkQ7RDFCRDsxMTEwIDExNkEgMTFBODtEMUJEOzExMTAgMTE2QSAxMUE4OworRDFCRTtEMUJFOzExMTAgMTE2QSAxMUE5O0QxQkU7MTExMCAxMTZBIDExQTk7CitEMUJGO0QxQkY7MTExMCAxMTZBIDExQUE7RDFCRjsxMTEwIDExNkEgMTFBQTsKK0QxQzA7RDFDMDsxMTEwIDExNkEgMTFBQjtEMUMwOzExMTAgMTE2QSAxMUFCOworRDFDMTtEMUMxOzExMTAgMTE2QSAxMUFDO0QxQzE7MTExMCAxMTZBIDExQUM7CitEMUMyO0QxQzI7MTExMCAxMTZBIDExQUQ7RDFDMjsxMTEwIDExNkEgMTFBRDsKK0QxQzM7RDFDMzsxMTEwIDExNkEgMTFBRTtEMUMzOzExMTAgMTE2QSAxMUFFOworRDFDNDtEMUM0OzExMTAgMTE2QSAxMUFGO0QxQzQ7MTExMCAxMTZBIDExQUY7CitEMUM1O0QxQzU7MTExMCAxMTZBIDExQjA7RDFDNTsxMTEwIDExNkEgMTFCMDsKK0QxQzY7RDFDNjsxMTEwIDExNkEgMTFCMTtEMUM2OzExMTAgMTE2QSAxMUIxOworRDFDNztEMUM3OzExMTAgMTE2QSAxMUIyO0QxQzc7MTExMCAxMTZBIDExQjI7CitEMUM4O0QxQzg7MTExMCAxMTZBIDExQjM7RDFDODsxMTEwIDExNkEgMTFCMzsKK0QxQzk7RDFDOTsxMTEwIDExNkEgMTFCNDtEMUM5OzExMTAgMTE2QSAxMUI0OworRDFDQTtEMUNBOzExMTAgMTE2QSAxMUI1O0QxQ0E7MTExMCAxMTZBIDExQjU7CitEMUNCO0QxQ0I7MTExMCAxMTZBIDExQjY7RDFDQjsxMTEwIDExNkEgMTFCNjsKK0QxQ0M7RDFDQzsxMTEwIDExNkEgMTFCNztEMUNDOzExMTAgMTE2QSAxMUI3OworRDFDRDtEMUNEOzExMTAgMTE2QSAxMUI4O0QxQ0Q7MTExMCAxMTZBIDExQjg7CitEMUNFO0QxQ0U7MTExMCAxMTZBIDExQjk7RDFDRTsxMTEwIDExNkEgMTFCOTsKK0QxQ0Y7RDFDRjsxMTEwIDExNkEgMTFCQTtEMUNGOzExMTAgMTE2QSAxMUJBOworRDFEMDtEMUQwOzExMTAgMTE2QSAxMUJCO0QxRDA7MTExMCAxMTZBIDExQkI7CitEMUQxO0QxRDE7MTExMCAxMTZBIDExQkM7RDFEMTsxMTEwIDExNkEgMTFCQzsKK0QxRDI7RDFEMjsxMTEwIDExNkEgMTFCRDtEMUQyOzExMTAgMTE2QSAxMUJEOworRDFEMztEMUQzOzExMTAgMTE2QSAxMUJFO0QxRDM7MTExMCAxMTZBIDExQkU7CitEMUQ0O0QxRDQ7MTExMCAxMTZBIDExQkY7RDFENDsxMTEwIDExNkEgMTFCRjsKK0QxRDU7RDFENTsxMTEwIDExNkEgMTFDMDtEMUQ1OzExMTAgMTE2QSAxMUMwOworRDFENjtEMUQ2OzExMTAgMTE2QSAxMUMxO0QxRDY7MTExMCAxMTZBIDExQzE7CitEMUQ3O0QxRDc7MTExMCAxMTZBIDExQzI7RDFENzsxMTEwIDExNkEgMTFDMjsKK0QxRDg7RDFEODsxMTEwIDExNkI7RDFEODsxMTEwIDExNkI7CitEMUQ5O0QxRDk7MTExMCAxMTZCIDExQTg7RDFEOTsxMTEwIDExNkIgMTFBODsKK0QxREE7RDFEQTsxMTEwIDExNkIgMTFBOTtEMURBOzExMTAgMTE2QiAxMUE5OworRDFEQjtEMURCOzExMTAgMTE2QiAxMUFBO0QxREI7MTExMCAxMTZCIDExQUE7CitEMURDO0QxREM7MTExMCAxMTZCIDExQUI7RDFEQzsxMTEwIDExNkIgMTFBQjsKK0QxREQ7RDFERDsxMTEwIDExNkIgMTFBQztEMUREOzExMTAgMTE2QiAxMUFDOworRDFERTtEMURFOzExMTAgMTE2QiAxMUFEO0QxREU7MTExMCAxMTZCIDExQUQ7CitEMURGO0QxREY7MTExMCAxMTZCIDExQUU7RDFERjsxMTEwIDExNkIgMTFBRTsKK0QxRTA7RDFFMDsxMTEwIDExNkIgMTFBRjtEMUUwOzExMTAgMTE2QiAxMUFGOworRDFFMTtEMUUxOzExMTAgMTE2QiAxMUIwO0QxRTE7MTExMCAxMTZCIDExQjA7CitEMUUyO0QxRTI7MTExMCAxMTZCIDExQjE7RDFFMjsxMTEwIDExNkIgMTFCMTsKK0QxRTM7RDFFMzsxMTEwIDExNkIgMTFCMjtEMUUzOzExMTAgMTE2QiAxMUIyOworRDFFNDtEMUU0OzExMTAgMTE2QiAxMUIzO0QxRTQ7MTExMCAxMTZCIDExQjM7CitEMUU1O0QxRTU7MTExMCAxMTZCIDExQjQ7RDFFNTsxMTEwIDExNkIgMTFCNDsKK0QxRTY7RDFFNjsxMTEwIDExNkIgMTFCNTtEMUU2OzExMTAgMTE2QiAxMUI1OworRDFFNztEMUU3OzExMTAgMTE2QiAxMUI2O0QxRTc7MTExMCAxMTZCIDExQjY7CitEMUU4O0QxRTg7MTExMCAxMTZCIDExQjc7RDFFODsxMTEwIDExNkIgMTFCNzsKK0QxRTk7RDFFOTsxMTEwIDExNkIgMTFCODtEMUU5OzExMTAgMTE2QiAxMUI4OworRDFFQTtEMUVBOzExMTAgMTE2QiAxMUI5O0QxRUE7MTExMCAxMTZCIDExQjk7CitEMUVCO0QxRUI7MTExMCAxMTZCIDExQkE7RDFFQjsxMTEwIDExNkIgMTFCQTsKK0QxRUM7RDFFQzsxMTEwIDExNkIgMTFCQjtEMUVDOzExMTAgMTE2QiAxMUJCOworRDFFRDtEMUVEOzExMTAgMTE2QiAxMUJDO0QxRUQ7MTExMCAxMTZCIDExQkM7CitEMUVFO0QxRUU7MTExMCAxMTZCIDExQkQ7RDFFRTsxMTEwIDExNkIgMTFCRDsKK0QxRUY7RDFFRjsxMTEwIDExNkIgMTFCRTtEMUVGOzExMTAgMTE2QiAxMUJFOworRDFGMDtEMUYwOzExMTAgMTE2QiAxMUJGO0QxRjA7MTExMCAxMTZCIDExQkY7CitEMUYxO0QxRjE7MTExMCAxMTZCIDExQzA7RDFGMTsxMTEwIDExNkIgMTFDMDsKK0QxRjI7RDFGMjsxMTEwIDExNkIgMTFDMTtEMUYyOzExMTAgMTE2QiAxMUMxOworRDFGMztEMUYzOzExMTAgMTE2QiAxMUMyO0QxRjM7MTExMCAxMTZCIDExQzI7CitEMUY0O0QxRjQ7MTExMCAxMTZDO0QxRjQ7MTExMCAxMTZDOworRDFGNTtEMUY1OzExMTAgMTE2QyAxMUE4O0QxRjU7MTExMCAxMTZDIDExQTg7CitEMUY2O0QxRjY7MTExMCAxMTZDIDExQTk7RDFGNjsxMTEwIDExNkMgMTFBOTsKK0QxRjc7RDFGNzsxMTEwIDExNkMgMTFBQTtEMUY3OzExMTAgMTE2QyAxMUFBOworRDFGODtEMUY4OzExMTAgMTE2QyAxMUFCO0QxRjg7MTExMCAxMTZDIDExQUI7CitEMUY5O0QxRjk7MTExMCAxMTZDIDExQUM7RDFGOTsxMTEwIDExNkMgMTFBQzsKK0QxRkE7RDFGQTsxMTEwIDExNkMgMTFBRDtEMUZBOzExMTAgMTE2QyAxMUFEOworRDFGQjtEMUZCOzExMTAgMTE2QyAxMUFFO0QxRkI7MTExMCAxMTZDIDExQUU7CitEMUZDO0QxRkM7MTExMCAxMTZDIDExQUY7RDFGQzsxMTEwIDExNkMgMTFBRjsKK0QxRkQ7RDFGRDsxMTEwIDExNkMgMTFCMDtEMUZEOzExMTAgMTE2QyAxMUIwOworRDFGRTtEMUZFOzExMTAgMTE2QyAxMUIxO0QxRkU7MTExMCAxMTZDIDExQjE7CitEMUZGO0QxRkY7MTExMCAxMTZDIDExQjI7RDFGRjsxMTEwIDExNkMgMTFCMjsKK0QyMDA7RDIwMDsxMTEwIDExNkMgMTFCMztEMjAwOzExMTAgMTE2QyAxMUIzOworRDIwMTtEMjAxOzExMTAgMTE2QyAxMUI0O0QyMDE7MTExMCAxMTZDIDExQjQ7CitEMjAyO0QyMDI7MTExMCAxMTZDIDExQjU7RDIwMjsxMTEwIDExNkMgMTFCNTsKK0QyMDM7RDIwMzsxMTEwIDExNkMgMTFCNjtEMjAzOzExMTAgMTE2QyAxMUI2OworRDIwNDtEMjA0OzExMTAgMTE2QyAxMUI3O0QyMDQ7MTExMCAxMTZDIDExQjc7CitEMjA1O0QyMDU7MTExMCAxMTZDIDExQjg7RDIwNTsxMTEwIDExNkMgMTFCODsKK0QyMDY7RDIwNjsxMTEwIDExNkMgMTFCOTtEMjA2OzExMTAgMTE2QyAxMUI5OworRDIwNztEMjA3OzExMTAgMTE2QyAxMUJBO0QyMDc7MTExMCAxMTZDIDExQkE7CitEMjA4O0QyMDg7MTExMCAxMTZDIDExQkI7RDIwODsxMTEwIDExNkMgMTFCQjsKK0QyMDk7RDIwOTsxMTEwIDExNkMgMTFCQztEMjA5OzExMTAgMTE2QyAxMUJDOworRDIwQTtEMjBBOzExMTAgMTE2QyAxMUJEO0QyMEE7MTExMCAxMTZDIDExQkQ7CitEMjBCO0QyMEI7MTExMCAxMTZDIDExQkU7RDIwQjsxMTEwIDExNkMgMTFCRTsKK0QyMEM7RDIwQzsxMTEwIDExNkMgMTFCRjtEMjBDOzExMTAgMTE2QyAxMUJGOworRDIwRDtEMjBEOzExMTAgMTE2QyAxMUMwO0QyMEQ7MTExMCAxMTZDIDExQzA7CitEMjBFO0QyMEU7MTExMCAxMTZDIDExQzE7RDIwRTsxMTEwIDExNkMgMTFDMTsKK0QyMEY7RDIwRjsxMTEwIDExNkMgMTFDMjtEMjBGOzExMTAgMTE2QyAxMUMyOworRDIxMDtEMjEwOzExMTAgMTE2RDtEMjEwOzExMTAgMTE2RDsKK0QyMTE7RDIxMTsxMTEwIDExNkQgMTFBODtEMjExOzExMTAgMTE2RCAxMUE4OworRDIxMjtEMjEyOzExMTAgMTE2RCAxMUE5O0QyMTI7MTExMCAxMTZEIDExQTk7CitEMjEzO0QyMTM7MTExMCAxMTZEIDExQUE7RDIxMzsxMTEwIDExNkQgMTFBQTsKK0QyMTQ7RDIxNDsxMTEwIDExNkQgMTFBQjtEMjE0OzExMTAgMTE2RCAxMUFCOworRDIxNTtEMjE1OzExMTAgMTE2RCAxMUFDO0QyMTU7MTExMCAxMTZEIDExQUM7CitEMjE2O0QyMTY7MTExMCAxMTZEIDExQUQ7RDIxNjsxMTEwIDExNkQgMTFBRDsKK0QyMTc7RDIxNzsxMTEwIDExNkQgMTFBRTtEMjE3OzExMTAgMTE2RCAxMUFFOworRDIxODtEMjE4OzExMTAgMTE2RCAxMUFGO0QyMTg7MTExMCAxMTZEIDExQUY7CitEMjE5O0QyMTk7MTExMCAxMTZEIDExQjA7RDIxOTsxMTEwIDExNkQgMTFCMDsKK0QyMUE7RDIxQTsxMTEwIDExNkQgMTFCMTtEMjFBOzExMTAgMTE2RCAxMUIxOworRDIxQjtEMjFCOzExMTAgMTE2RCAxMUIyO0QyMUI7MTExMCAxMTZEIDExQjI7CitEMjFDO0QyMUM7MTExMCAxMTZEIDExQjM7RDIxQzsxMTEwIDExNkQgMTFCMzsKK0QyMUQ7RDIxRDsxMTEwIDExNkQgMTFCNDtEMjFEOzExMTAgMTE2RCAxMUI0OworRDIxRTtEMjFFOzExMTAgMTE2RCAxMUI1O0QyMUU7MTExMCAxMTZEIDExQjU7CitEMjFGO0QyMUY7MTExMCAxMTZEIDExQjY7RDIxRjsxMTEwIDExNkQgMTFCNjsKK0QyMjA7RDIyMDsxMTEwIDExNkQgMTFCNztEMjIwOzExMTAgMTE2RCAxMUI3OworRDIyMTtEMjIxOzExMTAgMTE2RCAxMUI4O0QyMjE7MTExMCAxMTZEIDExQjg7CitEMjIyO0QyMjI7MTExMCAxMTZEIDExQjk7RDIyMjsxMTEwIDExNkQgMTFCOTsKK0QyMjM7RDIyMzsxMTEwIDExNkQgMTFCQTtEMjIzOzExMTAgMTE2RCAxMUJBOworRDIyNDtEMjI0OzExMTAgMTE2RCAxMUJCO0QyMjQ7MTExMCAxMTZEIDExQkI7CitEMjI1O0QyMjU7MTExMCAxMTZEIDExQkM7RDIyNTsxMTEwIDExNkQgMTFCQzsKK0QyMjY7RDIyNjsxMTEwIDExNkQgMTFCRDtEMjI2OzExMTAgMTE2RCAxMUJEOworRDIyNztEMjI3OzExMTAgMTE2RCAxMUJFO0QyMjc7MTExMCAxMTZEIDExQkU7CitEMjI4O0QyMjg7MTExMCAxMTZEIDExQkY7RDIyODsxMTEwIDExNkQgMTFCRjsKK0QyMjk7RDIyOTsxMTEwIDExNkQgMTFDMDtEMjI5OzExMTAgMTE2RCAxMUMwOworRDIyQTtEMjJBOzExMTAgMTE2RCAxMUMxO0QyMkE7MTExMCAxMTZEIDExQzE7CitEMjJCO0QyMkI7MTExMCAxMTZEIDExQzI7RDIyQjsxMTEwIDExNkQgMTFDMjsKK0QyMkM7RDIyQzsxMTEwIDExNkU7RDIyQzsxMTEwIDExNkU7CitEMjJEO0QyMkQ7MTExMCAxMTZFIDExQTg7RDIyRDsxMTEwIDExNkUgMTFBODsKK0QyMkU7RDIyRTsxMTEwIDExNkUgMTFBOTtEMjJFOzExMTAgMTE2RSAxMUE5OworRDIyRjtEMjJGOzExMTAgMTE2RSAxMUFBO0QyMkY7MTExMCAxMTZFIDExQUE7CitEMjMwO0QyMzA7MTExMCAxMTZFIDExQUI7RDIzMDsxMTEwIDExNkUgMTFBQjsKK0QyMzE7RDIzMTsxMTEwIDExNkUgMTFBQztEMjMxOzExMTAgMTE2RSAxMUFDOworRDIzMjtEMjMyOzExMTAgMTE2RSAxMUFEO0QyMzI7MTExMCAxMTZFIDExQUQ7CitEMjMzO0QyMzM7MTExMCAxMTZFIDExQUU7RDIzMzsxMTEwIDExNkUgMTFBRTsKK0QyMzQ7RDIzNDsxMTEwIDExNkUgMTFBRjtEMjM0OzExMTAgMTE2RSAxMUFGOworRDIzNTtEMjM1OzExMTAgMTE2RSAxMUIwO0QyMzU7MTExMCAxMTZFIDExQjA7CitEMjM2O0QyMzY7MTExMCAxMTZFIDExQjE7RDIzNjsxMTEwIDExNkUgMTFCMTsKK0QyMzc7RDIzNzsxMTEwIDExNkUgMTFCMjtEMjM3OzExMTAgMTE2RSAxMUIyOworRDIzODtEMjM4OzExMTAgMTE2RSAxMUIzO0QyMzg7MTExMCAxMTZFIDExQjM7CitEMjM5O0QyMzk7MTExMCAxMTZFIDExQjQ7RDIzOTsxMTEwIDExNkUgMTFCNDsKK0QyM0E7RDIzQTsxMTEwIDExNkUgMTFCNTtEMjNBOzExMTAgMTE2RSAxMUI1OworRDIzQjtEMjNCOzExMTAgMTE2RSAxMUI2O0QyM0I7MTExMCAxMTZFIDExQjY7CitEMjNDO0QyM0M7MTExMCAxMTZFIDExQjc7RDIzQzsxMTEwIDExNkUgMTFCNzsKK0QyM0Q7RDIzRDsxMTEwIDExNkUgMTFCODtEMjNEOzExMTAgMTE2RSAxMUI4OworRDIzRTtEMjNFOzExMTAgMTE2RSAxMUI5O0QyM0U7MTExMCAxMTZFIDExQjk7CitEMjNGO0QyM0Y7MTExMCAxMTZFIDExQkE7RDIzRjsxMTEwIDExNkUgMTFCQTsKK0QyNDA7RDI0MDsxMTEwIDExNkUgMTFCQjtEMjQwOzExMTAgMTE2RSAxMUJCOworRDI0MTtEMjQxOzExMTAgMTE2RSAxMUJDO0QyNDE7MTExMCAxMTZFIDExQkM7CitEMjQyO0QyNDI7MTExMCAxMTZFIDExQkQ7RDI0MjsxMTEwIDExNkUgMTFCRDsKK0QyNDM7RDI0MzsxMTEwIDExNkUgMTFCRTtEMjQzOzExMTAgMTE2RSAxMUJFOworRDI0NDtEMjQ0OzExMTAgMTE2RSAxMUJGO0QyNDQ7MTExMCAxMTZFIDExQkY7CitEMjQ1O0QyNDU7MTExMCAxMTZFIDExQzA7RDI0NTsxMTEwIDExNkUgMTFDMDsKK0QyNDY7RDI0NjsxMTEwIDExNkUgMTFDMTtEMjQ2OzExMTAgMTE2RSAxMUMxOworRDI0NztEMjQ3OzExMTAgMTE2RSAxMUMyO0QyNDc7MTExMCAxMTZFIDExQzI7CitEMjQ4O0QyNDg7MTExMCAxMTZGO0QyNDg7MTExMCAxMTZGOworRDI0OTtEMjQ5OzExMTAgMTE2RiAxMUE4O0QyNDk7MTExMCAxMTZGIDExQTg7CitEMjRBO0QyNEE7MTExMCAxMTZGIDExQTk7RDI0QTsxMTEwIDExNkYgMTFBOTsKK0QyNEI7RDI0QjsxMTEwIDExNkYgMTFBQTtEMjRCOzExMTAgMTE2RiAxMUFBOworRDI0QztEMjRDOzExMTAgMTE2RiAxMUFCO0QyNEM7MTExMCAxMTZGIDExQUI7CitEMjREO0QyNEQ7MTExMCAxMTZGIDExQUM7RDI0RDsxMTEwIDExNkYgMTFBQzsKK0QyNEU7RDI0RTsxMTEwIDExNkYgMTFBRDtEMjRFOzExMTAgMTE2RiAxMUFEOworRDI0RjtEMjRGOzExMTAgMTE2RiAxMUFFO0QyNEY7MTExMCAxMTZGIDExQUU7CitEMjUwO0QyNTA7MTExMCAxMTZGIDExQUY7RDI1MDsxMTEwIDExNkYgMTFBRjsKK0QyNTE7RDI1MTsxMTEwIDExNkYgMTFCMDtEMjUxOzExMTAgMTE2RiAxMUIwOworRDI1MjtEMjUyOzExMTAgMTE2RiAxMUIxO0QyNTI7MTExMCAxMTZGIDExQjE7CitEMjUzO0QyNTM7MTExMCAxMTZGIDExQjI7RDI1MzsxMTEwIDExNkYgMTFCMjsKK0QyNTQ7RDI1NDsxMTEwIDExNkYgMTFCMztEMjU0OzExMTAgMTE2RiAxMUIzOworRDI1NTtEMjU1OzExMTAgMTE2RiAxMUI0O0QyNTU7MTExMCAxMTZGIDExQjQ7CitEMjU2O0QyNTY7MTExMCAxMTZGIDExQjU7RDI1NjsxMTEwIDExNkYgMTFCNTsKK0QyNTc7RDI1NzsxMTEwIDExNkYgMTFCNjtEMjU3OzExMTAgMTE2RiAxMUI2OworRDI1ODtEMjU4OzExMTAgMTE2RiAxMUI3O0QyNTg7MTExMCAxMTZGIDExQjc7CitEMjU5O0QyNTk7MTExMCAxMTZGIDExQjg7RDI1OTsxMTEwIDExNkYgMTFCODsKK0QyNUE7RDI1QTsxMTEwIDExNkYgMTFCOTtEMjVBOzExMTAgMTE2RiAxMUI5OworRDI1QjtEMjVCOzExMTAgMTE2RiAxMUJBO0QyNUI7MTExMCAxMTZGIDExQkE7CitEMjVDO0QyNUM7MTExMCAxMTZGIDExQkI7RDI1QzsxMTEwIDExNkYgMTFCQjsKK0QyNUQ7RDI1RDsxMTEwIDExNkYgMTFCQztEMjVEOzExMTAgMTE2RiAxMUJDOworRDI1RTtEMjVFOzExMTAgMTE2RiAxMUJEO0QyNUU7MTExMCAxMTZGIDExQkQ7CitEMjVGO0QyNUY7MTExMCAxMTZGIDExQkU7RDI1RjsxMTEwIDExNkYgMTFCRTsKK0QyNjA7RDI2MDsxMTEwIDExNkYgMTFCRjtEMjYwOzExMTAgMTE2RiAxMUJGOworRDI2MTtEMjYxOzExMTAgMTE2RiAxMUMwO0QyNjE7MTExMCAxMTZGIDExQzA7CitEMjYyO0QyNjI7MTExMCAxMTZGIDExQzE7RDI2MjsxMTEwIDExNkYgMTFDMTsKK0QyNjM7RDI2MzsxMTEwIDExNkYgMTFDMjtEMjYzOzExMTAgMTE2RiAxMUMyOworRDI2NDtEMjY0OzExMTAgMTE3MDtEMjY0OzExMTAgMTE3MDsKK0QyNjU7RDI2NTsxMTEwIDExNzAgMTFBODtEMjY1OzExMTAgMTE3MCAxMUE4OworRDI2NjtEMjY2OzExMTAgMTE3MCAxMUE5O0QyNjY7MTExMCAxMTcwIDExQTk7CitEMjY3O0QyNjc7MTExMCAxMTcwIDExQUE7RDI2NzsxMTEwIDExNzAgMTFBQTsKK0QyNjg7RDI2ODsxMTEwIDExNzAgMTFBQjtEMjY4OzExMTAgMTE3MCAxMUFCOworRDI2OTtEMjY5OzExMTAgMTE3MCAxMUFDO0QyNjk7MTExMCAxMTcwIDExQUM7CitEMjZBO0QyNkE7MTExMCAxMTcwIDExQUQ7RDI2QTsxMTEwIDExNzAgMTFBRDsKK0QyNkI7RDI2QjsxMTEwIDExNzAgMTFBRTtEMjZCOzExMTAgMTE3MCAxMUFFOworRDI2QztEMjZDOzExMTAgMTE3MCAxMUFGO0QyNkM7MTExMCAxMTcwIDExQUY7CitEMjZEO0QyNkQ7MTExMCAxMTcwIDExQjA7RDI2RDsxMTEwIDExNzAgMTFCMDsKK0QyNkU7RDI2RTsxMTEwIDExNzAgMTFCMTtEMjZFOzExMTAgMTE3MCAxMUIxOworRDI2RjtEMjZGOzExMTAgMTE3MCAxMUIyO0QyNkY7MTExMCAxMTcwIDExQjI7CitEMjcwO0QyNzA7MTExMCAxMTcwIDExQjM7RDI3MDsxMTEwIDExNzAgMTFCMzsKK0QyNzE7RDI3MTsxMTEwIDExNzAgMTFCNDtEMjcxOzExMTAgMTE3MCAxMUI0OworRDI3MjtEMjcyOzExMTAgMTE3MCAxMUI1O0QyNzI7MTExMCAxMTcwIDExQjU7CitEMjczO0QyNzM7MTExMCAxMTcwIDExQjY7RDI3MzsxMTEwIDExNzAgMTFCNjsKK0QyNzQ7RDI3NDsxMTEwIDExNzAgMTFCNztEMjc0OzExMTAgMTE3MCAxMUI3OworRDI3NTtEMjc1OzExMTAgMTE3MCAxMUI4O0QyNzU7MTExMCAxMTcwIDExQjg7CitEMjc2O0QyNzY7MTExMCAxMTcwIDExQjk7RDI3NjsxMTEwIDExNzAgMTFCOTsKK0QyNzc7RDI3NzsxMTEwIDExNzAgMTFCQTtEMjc3OzExMTAgMTE3MCAxMUJBOworRDI3ODtEMjc4OzExMTAgMTE3MCAxMUJCO0QyNzg7MTExMCAxMTcwIDExQkI7CitEMjc5O0QyNzk7MTExMCAxMTcwIDExQkM7RDI3OTsxMTEwIDExNzAgMTFCQzsKK0QyN0E7RDI3QTsxMTEwIDExNzAgMTFCRDtEMjdBOzExMTAgMTE3MCAxMUJEOworRDI3QjtEMjdCOzExMTAgMTE3MCAxMUJFO0QyN0I7MTExMCAxMTcwIDExQkU7CitEMjdDO0QyN0M7MTExMCAxMTcwIDExQkY7RDI3QzsxMTEwIDExNzAgMTFCRjsKK0QyN0Q7RDI3RDsxMTEwIDExNzAgMTFDMDtEMjdEOzExMTAgMTE3MCAxMUMwOworRDI3RTtEMjdFOzExMTAgMTE3MCAxMUMxO0QyN0U7MTExMCAxMTcwIDExQzE7CitEMjdGO0QyN0Y7MTExMCAxMTcwIDExQzI7RDI3RjsxMTEwIDExNzAgMTFDMjsKK0QyODA7RDI4MDsxMTEwIDExNzE7RDI4MDsxMTEwIDExNzE7CitEMjgxO0QyODE7MTExMCAxMTcxIDExQTg7RDI4MTsxMTEwIDExNzEgMTFBODsKK0QyODI7RDI4MjsxMTEwIDExNzEgMTFBOTtEMjgyOzExMTAgMTE3MSAxMUE5OworRDI4MztEMjgzOzExMTAgMTE3MSAxMUFBO0QyODM7MTExMCAxMTcxIDExQUE7CitEMjg0O0QyODQ7MTExMCAxMTcxIDExQUI7RDI4NDsxMTEwIDExNzEgMTFBQjsKK0QyODU7RDI4NTsxMTEwIDExNzEgMTFBQztEMjg1OzExMTAgMTE3MSAxMUFDOworRDI4NjtEMjg2OzExMTAgMTE3MSAxMUFEO0QyODY7MTExMCAxMTcxIDExQUQ7CitEMjg3O0QyODc7MTExMCAxMTcxIDExQUU7RDI4NzsxMTEwIDExNzEgMTFBRTsKK0QyODg7RDI4ODsxMTEwIDExNzEgMTFBRjtEMjg4OzExMTAgMTE3MSAxMUFGOworRDI4OTtEMjg5OzExMTAgMTE3MSAxMUIwO0QyODk7MTExMCAxMTcxIDExQjA7CitEMjhBO0QyOEE7MTExMCAxMTcxIDExQjE7RDI4QTsxMTEwIDExNzEgMTFCMTsKK0QyOEI7RDI4QjsxMTEwIDExNzEgMTFCMjtEMjhCOzExMTAgMTE3MSAxMUIyOworRDI4QztEMjhDOzExMTAgMTE3MSAxMUIzO0QyOEM7MTExMCAxMTcxIDExQjM7CitEMjhEO0QyOEQ7MTExMCAxMTcxIDExQjQ7RDI4RDsxMTEwIDExNzEgMTFCNDsKK0QyOEU7RDI4RTsxMTEwIDExNzEgMTFCNTtEMjhFOzExMTAgMTE3MSAxMUI1OworRDI4RjtEMjhGOzExMTAgMTE3MSAxMUI2O0QyOEY7MTExMCAxMTcxIDExQjY7CitEMjkwO0QyOTA7MTExMCAxMTcxIDExQjc7RDI5MDsxMTEwIDExNzEgMTFCNzsKK0QyOTE7RDI5MTsxMTEwIDExNzEgMTFCODtEMjkxOzExMTAgMTE3MSAxMUI4OworRDI5MjtEMjkyOzExMTAgMTE3MSAxMUI5O0QyOTI7MTExMCAxMTcxIDExQjk7CitEMjkzO0QyOTM7MTExMCAxMTcxIDExQkE7RDI5MzsxMTEwIDExNzEgMTFCQTsKK0QyOTQ7RDI5NDsxMTEwIDExNzEgMTFCQjtEMjk0OzExMTAgMTE3MSAxMUJCOworRDI5NTtEMjk1OzExMTAgMTE3MSAxMUJDO0QyOTU7MTExMCAxMTcxIDExQkM7CitEMjk2O0QyOTY7MTExMCAxMTcxIDExQkQ7RDI5NjsxMTEwIDExNzEgMTFCRDsKK0QyOTc7RDI5NzsxMTEwIDExNzEgMTFCRTtEMjk3OzExMTAgMTE3MSAxMUJFOworRDI5ODtEMjk4OzExMTAgMTE3MSAxMUJGO0QyOTg7MTExMCAxMTcxIDExQkY7CitEMjk5O0QyOTk7MTExMCAxMTcxIDExQzA7RDI5OTsxMTEwIDExNzEgMTFDMDsKK0QyOUE7RDI5QTsxMTEwIDExNzEgMTFDMTtEMjlBOzExMTAgMTE3MSAxMUMxOworRDI5QjtEMjlCOzExMTAgMTE3MSAxMUMyO0QyOUI7MTExMCAxMTcxIDExQzI7CitEMjlDO0QyOUM7MTExMCAxMTcyO0QyOUM7MTExMCAxMTcyOworRDI5RDtEMjlEOzExMTAgMTE3MiAxMUE4O0QyOUQ7MTExMCAxMTcyIDExQTg7CitEMjlFO0QyOUU7MTExMCAxMTcyIDExQTk7RDI5RTsxMTEwIDExNzIgMTFBOTsKK0QyOUY7RDI5RjsxMTEwIDExNzIgMTFBQTtEMjlGOzExMTAgMTE3MiAxMUFBOworRDJBMDtEMkEwOzExMTAgMTE3MiAxMUFCO0QyQTA7MTExMCAxMTcyIDExQUI7CitEMkExO0QyQTE7MTExMCAxMTcyIDExQUM7RDJBMTsxMTEwIDExNzIgMTFBQzsKK0QyQTI7RDJBMjsxMTEwIDExNzIgMTFBRDtEMkEyOzExMTAgMTE3MiAxMUFEOworRDJBMztEMkEzOzExMTAgMTE3MiAxMUFFO0QyQTM7MTExMCAxMTcyIDExQUU7CitEMkE0O0QyQTQ7MTExMCAxMTcyIDExQUY7RDJBNDsxMTEwIDExNzIgMTFBRjsKK0QyQTU7RDJBNTsxMTEwIDExNzIgMTFCMDtEMkE1OzExMTAgMTE3MiAxMUIwOworRDJBNjtEMkE2OzExMTAgMTE3MiAxMUIxO0QyQTY7MTExMCAxMTcyIDExQjE7CitEMkE3O0QyQTc7MTExMCAxMTcyIDExQjI7RDJBNzsxMTEwIDExNzIgMTFCMjsKK0QyQTg7RDJBODsxMTEwIDExNzIgMTFCMztEMkE4OzExMTAgMTE3MiAxMUIzOworRDJBOTtEMkE5OzExMTAgMTE3MiAxMUI0O0QyQTk7MTExMCAxMTcyIDExQjQ7CitEMkFBO0QyQUE7MTExMCAxMTcyIDExQjU7RDJBQTsxMTEwIDExNzIgMTFCNTsKK0QyQUI7RDJBQjsxMTEwIDExNzIgMTFCNjtEMkFCOzExMTAgMTE3MiAxMUI2OworRDJBQztEMkFDOzExMTAgMTE3MiAxMUI3O0QyQUM7MTExMCAxMTcyIDExQjc7CitEMkFEO0QyQUQ7MTExMCAxMTcyIDExQjg7RDJBRDsxMTEwIDExNzIgMTFCODsKK0QyQUU7RDJBRTsxMTEwIDExNzIgMTFCOTtEMkFFOzExMTAgMTE3MiAxMUI5OworRDJBRjtEMkFGOzExMTAgMTE3MiAxMUJBO0QyQUY7MTExMCAxMTcyIDExQkE7CitEMkIwO0QyQjA7MTExMCAxMTcyIDExQkI7RDJCMDsxMTEwIDExNzIgMTFCQjsKK0QyQjE7RDJCMTsxMTEwIDExNzIgMTFCQztEMkIxOzExMTAgMTE3MiAxMUJDOworRDJCMjtEMkIyOzExMTAgMTE3MiAxMUJEO0QyQjI7MTExMCAxMTcyIDExQkQ7CitEMkIzO0QyQjM7MTExMCAxMTcyIDExQkU7RDJCMzsxMTEwIDExNzIgMTFCRTsKK0QyQjQ7RDJCNDsxMTEwIDExNzIgMTFCRjtEMkI0OzExMTAgMTE3MiAxMUJGOworRDJCNTtEMkI1OzExMTAgMTE3MiAxMUMwO0QyQjU7MTExMCAxMTcyIDExQzA7CitEMkI2O0QyQjY7MTExMCAxMTcyIDExQzE7RDJCNjsxMTEwIDExNzIgMTFDMTsKK0QyQjc7RDJCNzsxMTEwIDExNzIgMTFDMjtEMkI3OzExMTAgMTE3MiAxMUMyOworRDJCODtEMkI4OzExMTAgMTE3MztEMkI4OzExMTAgMTE3MzsKK0QyQjk7RDJCOTsxMTEwIDExNzMgMTFBODtEMkI5OzExMTAgMTE3MyAxMUE4OworRDJCQTtEMkJBOzExMTAgMTE3MyAxMUE5O0QyQkE7MTExMCAxMTczIDExQTk7CitEMkJCO0QyQkI7MTExMCAxMTczIDExQUE7RDJCQjsxMTEwIDExNzMgMTFBQTsKK0QyQkM7RDJCQzsxMTEwIDExNzMgMTFBQjtEMkJDOzExMTAgMTE3MyAxMUFCOworRDJCRDtEMkJEOzExMTAgMTE3MyAxMUFDO0QyQkQ7MTExMCAxMTczIDExQUM7CitEMkJFO0QyQkU7MTExMCAxMTczIDExQUQ7RDJCRTsxMTEwIDExNzMgMTFBRDsKK0QyQkY7RDJCRjsxMTEwIDExNzMgMTFBRTtEMkJGOzExMTAgMTE3MyAxMUFFOworRDJDMDtEMkMwOzExMTAgMTE3MyAxMUFGO0QyQzA7MTExMCAxMTczIDExQUY7CitEMkMxO0QyQzE7MTExMCAxMTczIDExQjA7RDJDMTsxMTEwIDExNzMgMTFCMDsKK0QyQzI7RDJDMjsxMTEwIDExNzMgMTFCMTtEMkMyOzExMTAgMTE3MyAxMUIxOworRDJDMztEMkMzOzExMTAgMTE3MyAxMUIyO0QyQzM7MTExMCAxMTczIDExQjI7CitEMkM0O0QyQzQ7MTExMCAxMTczIDExQjM7RDJDNDsxMTEwIDExNzMgMTFCMzsKK0QyQzU7RDJDNTsxMTEwIDExNzMgMTFCNDtEMkM1OzExMTAgMTE3MyAxMUI0OworRDJDNjtEMkM2OzExMTAgMTE3MyAxMUI1O0QyQzY7MTExMCAxMTczIDExQjU7CitEMkM3O0QyQzc7MTExMCAxMTczIDExQjY7RDJDNzsxMTEwIDExNzMgMTFCNjsKK0QyQzg7RDJDODsxMTEwIDExNzMgMTFCNztEMkM4OzExMTAgMTE3MyAxMUI3OworRDJDOTtEMkM5OzExMTAgMTE3MyAxMUI4O0QyQzk7MTExMCAxMTczIDExQjg7CitEMkNBO0QyQ0E7MTExMCAxMTczIDExQjk7RDJDQTsxMTEwIDExNzMgMTFCOTsKK0QyQ0I7RDJDQjsxMTEwIDExNzMgMTFCQTtEMkNCOzExMTAgMTE3MyAxMUJBOworRDJDQztEMkNDOzExMTAgMTE3MyAxMUJCO0QyQ0M7MTExMCAxMTczIDExQkI7CitEMkNEO0QyQ0Q7MTExMCAxMTczIDExQkM7RDJDRDsxMTEwIDExNzMgMTFCQzsKK0QyQ0U7RDJDRTsxMTEwIDExNzMgMTFCRDtEMkNFOzExMTAgMTE3MyAxMUJEOworRDJDRjtEMkNGOzExMTAgMTE3MyAxMUJFO0QyQ0Y7MTExMCAxMTczIDExQkU7CitEMkQwO0QyRDA7MTExMCAxMTczIDExQkY7RDJEMDsxMTEwIDExNzMgMTFCRjsKK0QyRDE7RDJEMTsxMTEwIDExNzMgMTFDMDtEMkQxOzExMTAgMTE3MyAxMUMwOworRDJEMjtEMkQyOzExMTAgMTE3MyAxMUMxO0QyRDI7MTExMCAxMTczIDExQzE7CitEMkQzO0QyRDM7MTExMCAxMTczIDExQzI7RDJEMzsxMTEwIDExNzMgMTFDMjsKK0QyRDQ7RDJENDsxMTEwIDExNzQ7RDJENDsxMTEwIDExNzQ7CitEMkQ1O0QyRDU7MTExMCAxMTc0IDExQTg7RDJENTsxMTEwIDExNzQgMTFBODsKK0QyRDY7RDJENjsxMTEwIDExNzQgMTFBOTtEMkQ2OzExMTAgMTE3NCAxMUE5OworRDJENztEMkQ3OzExMTAgMTE3NCAxMUFBO0QyRDc7MTExMCAxMTc0IDExQUE7CitEMkQ4O0QyRDg7MTExMCAxMTc0IDExQUI7RDJEODsxMTEwIDExNzQgMTFBQjsKK0QyRDk7RDJEOTsxMTEwIDExNzQgMTFBQztEMkQ5OzExMTAgMTE3NCAxMUFDOworRDJEQTtEMkRBOzExMTAgMTE3NCAxMUFEO0QyREE7MTExMCAxMTc0IDExQUQ7CitEMkRCO0QyREI7MTExMCAxMTc0IDExQUU7RDJEQjsxMTEwIDExNzQgMTFBRTsKK0QyREM7RDJEQzsxMTEwIDExNzQgMTFBRjtEMkRDOzExMTAgMTE3NCAxMUFGOworRDJERDtEMkREOzExMTAgMTE3NCAxMUIwO0QyREQ7MTExMCAxMTc0IDExQjA7CitEMkRFO0QyREU7MTExMCAxMTc0IDExQjE7RDJERTsxMTEwIDExNzQgMTFCMTsKK0QyREY7RDJERjsxMTEwIDExNzQgMTFCMjtEMkRGOzExMTAgMTE3NCAxMUIyOworRDJFMDtEMkUwOzExMTAgMTE3NCAxMUIzO0QyRTA7MTExMCAxMTc0IDExQjM7CitEMkUxO0QyRTE7MTExMCAxMTc0IDExQjQ7RDJFMTsxMTEwIDExNzQgMTFCNDsKK0QyRTI7RDJFMjsxMTEwIDExNzQgMTFCNTtEMkUyOzExMTAgMTE3NCAxMUI1OworRDJFMztEMkUzOzExMTAgMTE3NCAxMUI2O0QyRTM7MTExMCAxMTc0IDExQjY7CitEMkU0O0QyRTQ7MTExMCAxMTc0IDExQjc7RDJFNDsxMTEwIDExNzQgMTFCNzsKK0QyRTU7RDJFNTsxMTEwIDExNzQgMTFCODtEMkU1OzExMTAgMTE3NCAxMUI4OworRDJFNjtEMkU2OzExMTAgMTE3NCAxMUI5O0QyRTY7MTExMCAxMTc0IDExQjk7CitEMkU3O0QyRTc7MTExMCAxMTc0IDExQkE7RDJFNzsxMTEwIDExNzQgMTFCQTsKK0QyRTg7RDJFODsxMTEwIDExNzQgMTFCQjtEMkU4OzExMTAgMTE3NCAxMUJCOworRDJFOTtEMkU5OzExMTAgMTE3NCAxMUJDO0QyRTk7MTExMCAxMTc0IDExQkM7CitEMkVBO0QyRUE7MTExMCAxMTc0IDExQkQ7RDJFQTsxMTEwIDExNzQgMTFCRDsKK0QyRUI7RDJFQjsxMTEwIDExNzQgMTFCRTtEMkVCOzExMTAgMTE3NCAxMUJFOworRDJFQztEMkVDOzExMTAgMTE3NCAxMUJGO0QyRUM7MTExMCAxMTc0IDExQkY7CitEMkVEO0QyRUQ7MTExMCAxMTc0IDExQzA7RDJFRDsxMTEwIDExNzQgMTFDMDsKK0QyRUU7RDJFRTsxMTEwIDExNzQgMTFDMTtEMkVFOzExMTAgMTE3NCAxMUMxOworRDJFRjtEMkVGOzExMTAgMTE3NCAxMUMyO0QyRUY7MTExMCAxMTc0IDExQzI7CitEMkYwO0QyRjA7MTExMCAxMTc1O0QyRjA7MTExMCAxMTc1OworRDJGMTtEMkYxOzExMTAgMTE3NSAxMUE4O0QyRjE7MTExMCAxMTc1IDExQTg7CitEMkYyO0QyRjI7MTExMCAxMTc1IDExQTk7RDJGMjsxMTEwIDExNzUgMTFBOTsKK0QyRjM7RDJGMzsxMTEwIDExNzUgMTFBQTtEMkYzOzExMTAgMTE3NSAxMUFBOworRDJGNDtEMkY0OzExMTAgMTE3NSAxMUFCO0QyRjQ7MTExMCAxMTc1IDExQUI7CitEMkY1O0QyRjU7MTExMCAxMTc1IDExQUM7RDJGNTsxMTEwIDExNzUgMTFBQzsKK0QyRjY7RDJGNjsxMTEwIDExNzUgMTFBRDtEMkY2OzExMTAgMTE3NSAxMUFEOworRDJGNztEMkY3OzExMTAgMTE3NSAxMUFFO0QyRjc7MTExMCAxMTc1IDExQUU7CitEMkY4O0QyRjg7MTExMCAxMTc1IDExQUY7RDJGODsxMTEwIDExNzUgMTFBRjsKK0QyRjk7RDJGOTsxMTEwIDExNzUgMTFCMDtEMkY5OzExMTAgMTE3NSAxMUIwOworRDJGQTtEMkZBOzExMTAgMTE3NSAxMUIxO0QyRkE7MTExMCAxMTc1IDExQjE7CitEMkZCO0QyRkI7MTExMCAxMTc1IDExQjI7RDJGQjsxMTEwIDExNzUgMTFCMjsKK0QyRkM7RDJGQzsxMTEwIDExNzUgMTFCMztEMkZDOzExMTAgMTE3NSAxMUIzOworRDJGRDtEMkZEOzExMTAgMTE3NSAxMUI0O0QyRkQ7MTExMCAxMTc1IDExQjQ7CitEMkZFO0QyRkU7MTExMCAxMTc1IDExQjU7RDJGRTsxMTEwIDExNzUgMTFCNTsKK0QyRkY7RDJGRjsxMTEwIDExNzUgMTFCNjtEMkZGOzExMTAgMTE3NSAxMUI2OworRDMwMDtEMzAwOzExMTAgMTE3NSAxMUI3O0QzMDA7MTExMCAxMTc1IDExQjc7CitEMzAxO0QzMDE7MTExMCAxMTc1IDExQjg7RDMwMTsxMTEwIDExNzUgMTFCODsKK0QzMDI7RDMwMjsxMTEwIDExNzUgMTFCOTtEMzAyOzExMTAgMTE3NSAxMUI5OworRDMwMztEMzAzOzExMTAgMTE3NSAxMUJBO0QzMDM7MTExMCAxMTc1IDExQkE7CitEMzA0O0QzMDQ7MTExMCAxMTc1IDExQkI7RDMwNDsxMTEwIDExNzUgMTFCQjsKK0QzMDU7RDMwNTsxMTEwIDExNzUgMTFCQztEMzA1OzExMTAgMTE3NSAxMUJDOworRDMwNjtEMzA2OzExMTAgMTE3NSAxMUJEO0QzMDY7MTExMCAxMTc1IDExQkQ7CitEMzA3O0QzMDc7MTExMCAxMTc1IDExQkU7RDMwNzsxMTEwIDExNzUgMTFCRTsKK0QzMDg7RDMwODsxMTEwIDExNzUgMTFCRjtEMzA4OzExMTAgMTE3NSAxMUJGOworRDMwOTtEMzA5OzExMTAgMTE3NSAxMUMwO0QzMDk7MTExMCAxMTc1IDExQzA7CitEMzBBO0QzMEE7MTExMCAxMTc1IDExQzE7RDMwQTsxMTEwIDExNzUgMTFDMTsKK0QzMEI7RDMwQjsxMTEwIDExNzUgMTFDMjtEMzBCOzExMTAgMTE3NSAxMUMyOworRDMwQztEMzBDOzExMTEgMTE2MTtEMzBDOzExMTEgMTE2MTsKK0QzMEQ7RDMwRDsxMTExIDExNjEgMTFBODtEMzBEOzExMTEgMTE2MSAxMUE4OworRDMwRTtEMzBFOzExMTEgMTE2MSAxMUE5O0QzMEU7MTExMSAxMTYxIDExQTk7CitEMzBGO0QzMEY7MTExMSAxMTYxIDExQUE7RDMwRjsxMTExIDExNjEgMTFBQTsKK0QzMTA7RDMxMDsxMTExIDExNjEgMTFBQjtEMzEwOzExMTEgMTE2MSAxMUFCOworRDMxMTtEMzExOzExMTEgMTE2MSAxMUFDO0QzMTE7MTExMSAxMTYxIDExQUM7CitEMzEyO0QzMTI7MTExMSAxMTYxIDExQUQ7RDMxMjsxMTExIDExNjEgMTFBRDsKK0QzMTM7RDMxMzsxMTExIDExNjEgMTFBRTtEMzEzOzExMTEgMTE2MSAxMUFFOworRDMxNDtEMzE0OzExMTEgMTE2MSAxMUFGO0QzMTQ7MTExMSAxMTYxIDExQUY7CitEMzE1O0QzMTU7MTExMSAxMTYxIDExQjA7RDMxNTsxMTExIDExNjEgMTFCMDsKK0QzMTY7RDMxNjsxMTExIDExNjEgMTFCMTtEMzE2OzExMTEgMTE2MSAxMUIxOworRDMxNztEMzE3OzExMTEgMTE2MSAxMUIyO0QzMTc7MTExMSAxMTYxIDExQjI7CitEMzE4O0QzMTg7MTExMSAxMTYxIDExQjM7RDMxODsxMTExIDExNjEgMTFCMzsKK0QzMTk7RDMxOTsxMTExIDExNjEgMTFCNDtEMzE5OzExMTEgMTE2MSAxMUI0OworRDMxQTtEMzFBOzExMTEgMTE2MSAxMUI1O0QzMUE7MTExMSAxMTYxIDExQjU7CitEMzFCO0QzMUI7MTExMSAxMTYxIDExQjY7RDMxQjsxMTExIDExNjEgMTFCNjsKK0QzMUM7RDMxQzsxMTExIDExNjEgMTFCNztEMzFDOzExMTEgMTE2MSAxMUI3OworRDMxRDtEMzFEOzExMTEgMTE2MSAxMUI4O0QzMUQ7MTExMSAxMTYxIDExQjg7CitEMzFFO0QzMUU7MTExMSAxMTYxIDExQjk7RDMxRTsxMTExIDExNjEgMTFCOTsKK0QzMUY7RDMxRjsxMTExIDExNjEgMTFCQTtEMzFGOzExMTEgMTE2MSAxMUJBOworRDMyMDtEMzIwOzExMTEgMTE2MSAxMUJCO0QzMjA7MTExMSAxMTYxIDExQkI7CitEMzIxO0QzMjE7MTExMSAxMTYxIDExQkM7RDMyMTsxMTExIDExNjEgMTFCQzsKK0QzMjI7RDMyMjsxMTExIDExNjEgMTFCRDtEMzIyOzExMTEgMTE2MSAxMUJEOworRDMyMztEMzIzOzExMTEgMTE2MSAxMUJFO0QzMjM7MTExMSAxMTYxIDExQkU7CitEMzI0O0QzMjQ7MTExMSAxMTYxIDExQkY7RDMyNDsxMTExIDExNjEgMTFCRjsKK0QzMjU7RDMyNTsxMTExIDExNjEgMTFDMDtEMzI1OzExMTEgMTE2MSAxMUMwOworRDMyNjtEMzI2OzExMTEgMTE2MSAxMUMxO0QzMjY7MTExMSAxMTYxIDExQzE7CitEMzI3O0QzMjc7MTExMSAxMTYxIDExQzI7RDMyNzsxMTExIDExNjEgMTFDMjsKK0QzMjg7RDMyODsxMTExIDExNjI7RDMyODsxMTExIDExNjI7CitEMzI5O0QzMjk7MTExMSAxMTYyIDExQTg7RDMyOTsxMTExIDExNjIgMTFBODsKK0QzMkE7RDMyQTsxMTExIDExNjIgMTFBOTtEMzJBOzExMTEgMTE2MiAxMUE5OworRDMyQjtEMzJCOzExMTEgMTE2MiAxMUFBO0QzMkI7MTExMSAxMTYyIDExQUE7CitEMzJDO0QzMkM7MTExMSAxMTYyIDExQUI7RDMyQzsxMTExIDExNjIgMTFBQjsKK0QzMkQ7RDMyRDsxMTExIDExNjIgMTFBQztEMzJEOzExMTEgMTE2MiAxMUFDOworRDMyRTtEMzJFOzExMTEgMTE2MiAxMUFEO0QzMkU7MTExMSAxMTYyIDExQUQ7CitEMzJGO0QzMkY7MTExMSAxMTYyIDExQUU7RDMyRjsxMTExIDExNjIgMTFBRTsKK0QzMzA7RDMzMDsxMTExIDExNjIgMTFBRjtEMzMwOzExMTEgMTE2MiAxMUFGOworRDMzMTtEMzMxOzExMTEgMTE2MiAxMUIwO0QzMzE7MTExMSAxMTYyIDExQjA7CitEMzMyO0QzMzI7MTExMSAxMTYyIDExQjE7RDMzMjsxMTExIDExNjIgMTFCMTsKK0QzMzM7RDMzMzsxMTExIDExNjIgMTFCMjtEMzMzOzExMTEgMTE2MiAxMUIyOworRDMzNDtEMzM0OzExMTEgMTE2MiAxMUIzO0QzMzQ7MTExMSAxMTYyIDExQjM7CitEMzM1O0QzMzU7MTExMSAxMTYyIDExQjQ7RDMzNTsxMTExIDExNjIgMTFCNDsKK0QzMzY7RDMzNjsxMTExIDExNjIgMTFCNTtEMzM2OzExMTEgMTE2MiAxMUI1OworRDMzNztEMzM3OzExMTEgMTE2MiAxMUI2O0QzMzc7MTExMSAxMTYyIDExQjY7CitEMzM4O0QzMzg7MTExMSAxMTYyIDExQjc7RDMzODsxMTExIDExNjIgMTFCNzsKK0QzMzk7RDMzOTsxMTExIDExNjIgMTFCODtEMzM5OzExMTEgMTE2MiAxMUI4OworRDMzQTtEMzNBOzExMTEgMTE2MiAxMUI5O0QzM0E7MTExMSAxMTYyIDExQjk7CitEMzNCO0QzM0I7MTExMSAxMTYyIDExQkE7RDMzQjsxMTExIDExNjIgMTFCQTsKK0QzM0M7RDMzQzsxMTExIDExNjIgMTFCQjtEMzNDOzExMTEgMTE2MiAxMUJCOworRDMzRDtEMzNEOzExMTEgMTE2MiAxMUJDO0QzM0Q7MTExMSAxMTYyIDExQkM7CitEMzNFO0QzM0U7MTExMSAxMTYyIDExQkQ7RDMzRTsxMTExIDExNjIgMTFCRDsKK0QzM0Y7RDMzRjsxMTExIDExNjIgMTFCRTtEMzNGOzExMTEgMTE2MiAxMUJFOworRDM0MDtEMzQwOzExMTEgMTE2MiAxMUJGO0QzNDA7MTExMSAxMTYyIDExQkY7CitEMzQxO0QzNDE7MTExMSAxMTYyIDExQzA7RDM0MTsxMTExIDExNjIgMTFDMDsKK0QzNDI7RDM0MjsxMTExIDExNjIgMTFDMTtEMzQyOzExMTEgMTE2MiAxMUMxOworRDM0MztEMzQzOzExMTEgMTE2MiAxMUMyO0QzNDM7MTExMSAxMTYyIDExQzI7CitEMzQ0O0QzNDQ7MTExMSAxMTYzO0QzNDQ7MTExMSAxMTYzOworRDM0NTtEMzQ1OzExMTEgMTE2MyAxMUE4O0QzNDU7MTExMSAxMTYzIDExQTg7CitEMzQ2O0QzNDY7MTExMSAxMTYzIDExQTk7RDM0NjsxMTExIDExNjMgMTFBOTsKK0QzNDc7RDM0NzsxMTExIDExNjMgMTFBQTtEMzQ3OzExMTEgMTE2MyAxMUFBOworRDM0ODtEMzQ4OzExMTEgMTE2MyAxMUFCO0QzNDg7MTExMSAxMTYzIDExQUI7CitEMzQ5O0QzNDk7MTExMSAxMTYzIDExQUM7RDM0OTsxMTExIDExNjMgMTFBQzsKK0QzNEE7RDM0QTsxMTExIDExNjMgMTFBRDtEMzRBOzExMTEgMTE2MyAxMUFEOworRDM0QjtEMzRCOzExMTEgMTE2MyAxMUFFO0QzNEI7MTExMSAxMTYzIDExQUU7CitEMzRDO0QzNEM7MTExMSAxMTYzIDExQUY7RDM0QzsxMTExIDExNjMgMTFBRjsKK0QzNEQ7RDM0RDsxMTExIDExNjMgMTFCMDtEMzREOzExMTEgMTE2MyAxMUIwOworRDM0RTtEMzRFOzExMTEgMTE2MyAxMUIxO0QzNEU7MTExMSAxMTYzIDExQjE7CitEMzRGO0QzNEY7MTExMSAxMTYzIDExQjI7RDM0RjsxMTExIDExNjMgMTFCMjsKK0QzNTA7RDM1MDsxMTExIDExNjMgMTFCMztEMzUwOzExMTEgMTE2MyAxMUIzOworRDM1MTtEMzUxOzExMTEgMTE2MyAxMUI0O0QzNTE7MTExMSAxMTYzIDExQjQ7CitEMzUyO0QzNTI7MTExMSAxMTYzIDExQjU7RDM1MjsxMTExIDExNjMgMTFCNTsKK0QzNTM7RDM1MzsxMTExIDExNjMgMTFCNjtEMzUzOzExMTEgMTE2MyAxMUI2OworRDM1NDtEMzU0OzExMTEgMTE2MyAxMUI3O0QzNTQ7MTExMSAxMTYzIDExQjc7CitEMzU1O0QzNTU7MTExMSAxMTYzIDExQjg7RDM1NTsxMTExIDExNjMgMTFCODsKK0QzNTY7RDM1NjsxMTExIDExNjMgMTFCOTtEMzU2OzExMTEgMTE2MyAxMUI5OworRDM1NztEMzU3OzExMTEgMTE2MyAxMUJBO0QzNTc7MTExMSAxMTYzIDExQkE7CitEMzU4O0QzNTg7MTExMSAxMTYzIDExQkI7RDM1ODsxMTExIDExNjMgMTFCQjsKK0QzNTk7RDM1OTsxMTExIDExNjMgMTFCQztEMzU5OzExMTEgMTE2MyAxMUJDOworRDM1QTtEMzVBOzExMTEgMTE2MyAxMUJEO0QzNUE7MTExMSAxMTYzIDExQkQ7CitEMzVCO0QzNUI7MTExMSAxMTYzIDExQkU7RDM1QjsxMTExIDExNjMgMTFCRTsKK0QzNUM7RDM1QzsxMTExIDExNjMgMTFCRjtEMzVDOzExMTEgMTE2MyAxMUJGOworRDM1RDtEMzVEOzExMTEgMTE2MyAxMUMwO0QzNUQ7MTExMSAxMTYzIDExQzA7CitEMzVFO0QzNUU7MTExMSAxMTYzIDExQzE7RDM1RTsxMTExIDExNjMgMTFDMTsKK0QzNUY7RDM1RjsxMTExIDExNjMgMTFDMjtEMzVGOzExMTEgMTE2MyAxMUMyOworRDM2MDtEMzYwOzExMTEgMTE2NDtEMzYwOzExMTEgMTE2NDsKK0QzNjE7RDM2MTsxMTExIDExNjQgMTFBODtEMzYxOzExMTEgMTE2NCAxMUE4OworRDM2MjtEMzYyOzExMTEgMTE2NCAxMUE5O0QzNjI7MTExMSAxMTY0IDExQTk7CitEMzYzO0QzNjM7MTExMSAxMTY0IDExQUE7RDM2MzsxMTExIDExNjQgMTFBQTsKK0QzNjQ7RDM2NDsxMTExIDExNjQgMTFBQjtEMzY0OzExMTEgMTE2NCAxMUFCOworRDM2NTtEMzY1OzExMTEgMTE2NCAxMUFDO0QzNjU7MTExMSAxMTY0IDExQUM7CitEMzY2O0QzNjY7MTExMSAxMTY0IDExQUQ7RDM2NjsxMTExIDExNjQgMTFBRDsKK0QzNjc7RDM2NzsxMTExIDExNjQgMTFBRTtEMzY3OzExMTEgMTE2NCAxMUFFOworRDM2ODtEMzY4OzExMTEgMTE2NCAxMUFGO0QzNjg7MTExMSAxMTY0IDExQUY7CitEMzY5O0QzNjk7MTExMSAxMTY0IDExQjA7RDM2OTsxMTExIDExNjQgMTFCMDsKK0QzNkE7RDM2QTsxMTExIDExNjQgMTFCMTtEMzZBOzExMTEgMTE2NCAxMUIxOworRDM2QjtEMzZCOzExMTEgMTE2NCAxMUIyO0QzNkI7MTExMSAxMTY0IDExQjI7CitEMzZDO0QzNkM7MTExMSAxMTY0IDExQjM7RDM2QzsxMTExIDExNjQgMTFCMzsKK0QzNkQ7RDM2RDsxMTExIDExNjQgMTFCNDtEMzZEOzExMTEgMTE2NCAxMUI0OworRDM2RTtEMzZFOzExMTEgMTE2NCAxMUI1O0QzNkU7MTExMSAxMTY0IDExQjU7CitEMzZGO0QzNkY7MTExMSAxMTY0IDExQjY7RDM2RjsxMTExIDExNjQgMTFCNjsKK0QzNzA7RDM3MDsxMTExIDExNjQgMTFCNztEMzcwOzExMTEgMTE2NCAxMUI3OworRDM3MTtEMzcxOzExMTEgMTE2NCAxMUI4O0QzNzE7MTExMSAxMTY0IDExQjg7CitEMzcyO0QzNzI7MTExMSAxMTY0IDExQjk7RDM3MjsxMTExIDExNjQgMTFCOTsKK0QzNzM7RDM3MzsxMTExIDExNjQgMTFCQTtEMzczOzExMTEgMTE2NCAxMUJBOworRDM3NDtEMzc0OzExMTEgMTE2NCAxMUJCO0QzNzQ7MTExMSAxMTY0IDExQkI7CitEMzc1O0QzNzU7MTExMSAxMTY0IDExQkM7RDM3NTsxMTExIDExNjQgMTFCQzsKK0QzNzY7RDM3NjsxMTExIDExNjQgMTFCRDtEMzc2OzExMTEgMTE2NCAxMUJEOworRDM3NztEMzc3OzExMTEgMTE2NCAxMUJFO0QzNzc7MTExMSAxMTY0IDExQkU7CitEMzc4O0QzNzg7MTExMSAxMTY0IDExQkY7RDM3ODsxMTExIDExNjQgMTFCRjsKK0QzNzk7RDM3OTsxMTExIDExNjQgMTFDMDtEMzc5OzExMTEgMTE2NCAxMUMwOworRDM3QTtEMzdBOzExMTEgMTE2NCAxMUMxO0QzN0E7MTExMSAxMTY0IDExQzE7CitEMzdCO0QzN0I7MTExMSAxMTY0IDExQzI7RDM3QjsxMTExIDExNjQgMTFDMjsKK0QzN0M7RDM3QzsxMTExIDExNjU7RDM3QzsxMTExIDExNjU7CitEMzdEO0QzN0Q7MTExMSAxMTY1IDExQTg7RDM3RDsxMTExIDExNjUgMTFBODsKK0QzN0U7RDM3RTsxMTExIDExNjUgMTFBOTtEMzdFOzExMTEgMTE2NSAxMUE5OworRDM3RjtEMzdGOzExMTEgMTE2NSAxMUFBO0QzN0Y7MTExMSAxMTY1IDExQUE7CitEMzgwO0QzODA7MTExMSAxMTY1IDExQUI7RDM4MDsxMTExIDExNjUgMTFBQjsKK0QzODE7RDM4MTsxMTExIDExNjUgMTFBQztEMzgxOzExMTEgMTE2NSAxMUFDOworRDM4MjtEMzgyOzExMTEgMTE2NSAxMUFEO0QzODI7MTExMSAxMTY1IDExQUQ7CitEMzgzO0QzODM7MTExMSAxMTY1IDExQUU7RDM4MzsxMTExIDExNjUgMTFBRTsKK0QzODQ7RDM4NDsxMTExIDExNjUgMTFBRjtEMzg0OzExMTEgMTE2NSAxMUFGOworRDM4NTtEMzg1OzExMTEgMTE2NSAxMUIwO0QzODU7MTExMSAxMTY1IDExQjA7CitEMzg2O0QzODY7MTExMSAxMTY1IDExQjE7RDM4NjsxMTExIDExNjUgMTFCMTsKK0QzODc7RDM4NzsxMTExIDExNjUgMTFCMjtEMzg3OzExMTEgMTE2NSAxMUIyOworRDM4ODtEMzg4OzExMTEgMTE2NSAxMUIzO0QzODg7MTExMSAxMTY1IDExQjM7CitEMzg5O0QzODk7MTExMSAxMTY1IDExQjQ7RDM4OTsxMTExIDExNjUgMTFCNDsKK0QzOEE7RDM4QTsxMTExIDExNjUgMTFCNTtEMzhBOzExMTEgMTE2NSAxMUI1OworRDM4QjtEMzhCOzExMTEgMTE2NSAxMUI2O0QzOEI7MTExMSAxMTY1IDExQjY7CitEMzhDO0QzOEM7MTExMSAxMTY1IDExQjc7RDM4QzsxMTExIDExNjUgMTFCNzsKK0QzOEQ7RDM4RDsxMTExIDExNjUgMTFCODtEMzhEOzExMTEgMTE2NSAxMUI4OworRDM4RTtEMzhFOzExMTEgMTE2NSAxMUI5O0QzOEU7MTExMSAxMTY1IDExQjk7CitEMzhGO0QzOEY7MTExMSAxMTY1IDExQkE7RDM4RjsxMTExIDExNjUgMTFCQTsKK0QzOTA7RDM5MDsxMTExIDExNjUgMTFCQjtEMzkwOzExMTEgMTE2NSAxMUJCOworRDM5MTtEMzkxOzExMTEgMTE2NSAxMUJDO0QzOTE7MTExMSAxMTY1IDExQkM7CitEMzkyO0QzOTI7MTExMSAxMTY1IDExQkQ7RDM5MjsxMTExIDExNjUgMTFCRDsKK0QzOTM7RDM5MzsxMTExIDExNjUgMTFCRTtEMzkzOzExMTEgMTE2NSAxMUJFOworRDM5NDtEMzk0OzExMTEgMTE2NSAxMUJGO0QzOTQ7MTExMSAxMTY1IDExQkY7CitEMzk1O0QzOTU7MTExMSAxMTY1IDExQzA7RDM5NTsxMTExIDExNjUgMTFDMDsKK0QzOTY7RDM5NjsxMTExIDExNjUgMTFDMTtEMzk2OzExMTEgMTE2NSAxMUMxOworRDM5NztEMzk3OzExMTEgMTE2NSAxMUMyO0QzOTc7MTExMSAxMTY1IDExQzI7CitEMzk4O0QzOTg7MTExMSAxMTY2O0QzOTg7MTExMSAxMTY2OworRDM5OTtEMzk5OzExMTEgMTE2NiAxMUE4O0QzOTk7MTExMSAxMTY2IDExQTg7CitEMzlBO0QzOUE7MTExMSAxMTY2IDExQTk7RDM5QTsxMTExIDExNjYgMTFBOTsKK0QzOUI7RDM5QjsxMTExIDExNjYgMTFBQTtEMzlCOzExMTEgMTE2NiAxMUFBOworRDM5QztEMzlDOzExMTEgMTE2NiAxMUFCO0QzOUM7MTExMSAxMTY2IDExQUI7CitEMzlEO0QzOUQ7MTExMSAxMTY2IDExQUM7RDM5RDsxMTExIDExNjYgMTFBQzsKK0QzOUU7RDM5RTsxMTExIDExNjYgMTFBRDtEMzlFOzExMTEgMTE2NiAxMUFEOworRDM5RjtEMzlGOzExMTEgMTE2NiAxMUFFO0QzOUY7MTExMSAxMTY2IDExQUU7CitEM0EwO0QzQTA7MTExMSAxMTY2IDExQUY7RDNBMDsxMTExIDExNjYgMTFBRjsKK0QzQTE7RDNBMTsxMTExIDExNjYgMTFCMDtEM0ExOzExMTEgMTE2NiAxMUIwOworRDNBMjtEM0EyOzExMTEgMTE2NiAxMUIxO0QzQTI7MTExMSAxMTY2IDExQjE7CitEM0EzO0QzQTM7MTExMSAxMTY2IDExQjI7RDNBMzsxMTExIDExNjYgMTFCMjsKK0QzQTQ7RDNBNDsxMTExIDExNjYgMTFCMztEM0E0OzExMTEgMTE2NiAxMUIzOworRDNBNTtEM0E1OzExMTEgMTE2NiAxMUI0O0QzQTU7MTExMSAxMTY2IDExQjQ7CitEM0E2O0QzQTY7MTExMSAxMTY2IDExQjU7RDNBNjsxMTExIDExNjYgMTFCNTsKK0QzQTc7RDNBNzsxMTExIDExNjYgMTFCNjtEM0E3OzExMTEgMTE2NiAxMUI2OworRDNBODtEM0E4OzExMTEgMTE2NiAxMUI3O0QzQTg7MTExMSAxMTY2IDExQjc7CitEM0E5O0QzQTk7MTExMSAxMTY2IDExQjg7RDNBOTsxMTExIDExNjYgMTFCODsKK0QzQUE7RDNBQTsxMTExIDExNjYgMTFCOTtEM0FBOzExMTEgMTE2NiAxMUI5OworRDNBQjtEM0FCOzExMTEgMTE2NiAxMUJBO0QzQUI7MTExMSAxMTY2IDExQkE7CitEM0FDO0QzQUM7MTExMSAxMTY2IDExQkI7RDNBQzsxMTExIDExNjYgMTFCQjsKK0QzQUQ7RDNBRDsxMTExIDExNjYgMTFCQztEM0FEOzExMTEgMTE2NiAxMUJDOworRDNBRTtEM0FFOzExMTEgMTE2NiAxMUJEO0QzQUU7MTExMSAxMTY2IDExQkQ7CitEM0FGO0QzQUY7MTExMSAxMTY2IDExQkU7RDNBRjsxMTExIDExNjYgMTFCRTsKK0QzQjA7RDNCMDsxMTExIDExNjYgMTFCRjtEM0IwOzExMTEgMTE2NiAxMUJGOworRDNCMTtEM0IxOzExMTEgMTE2NiAxMUMwO0QzQjE7MTExMSAxMTY2IDExQzA7CitEM0IyO0QzQjI7MTExMSAxMTY2IDExQzE7RDNCMjsxMTExIDExNjYgMTFDMTsKK0QzQjM7RDNCMzsxMTExIDExNjYgMTFDMjtEM0IzOzExMTEgMTE2NiAxMUMyOworRDNCNDtEM0I0OzExMTEgMTE2NztEM0I0OzExMTEgMTE2NzsKK0QzQjU7RDNCNTsxMTExIDExNjcgMTFBODtEM0I1OzExMTEgMTE2NyAxMUE4OworRDNCNjtEM0I2OzExMTEgMTE2NyAxMUE5O0QzQjY7MTExMSAxMTY3IDExQTk7CitEM0I3O0QzQjc7MTExMSAxMTY3IDExQUE7RDNCNzsxMTExIDExNjcgMTFBQTsKK0QzQjg7RDNCODsxMTExIDExNjcgMTFBQjtEM0I4OzExMTEgMTE2NyAxMUFCOworRDNCOTtEM0I5OzExMTEgMTE2NyAxMUFDO0QzQjk7MTExMSAxMTY3IDExQUM7CitEM0JBO0QzQkE7MTExMSAxMTY3IDExQUQ7RDNCQTsxMTExIDExNjcgMTFBRDsKK0QzQkI7RDNCQjsxMTExIDExNjcgMTFBRTtEM0JCOzExMTEgMTE2NyAxMUFFOworRDNCQztEM0JDOzExMTEgMTE2NyAxMUFGO0QzQkM7MTExMSAxMTY3IDExQUY7CitEM0JEO0QzQkQ7MTExMSAxMTY3IDExQjA7RDNCRDsxMTExIDExNjcgMTFCMDsKK0QzQkU7RDNCRTsxMTExIDExNjcgMTFCMTtEM0JFOzExMTEgMTE2NyAxMUIxOworRDNCRjtEM0JGOzExMTEgMTE2NyAxMUIyO0QzQkY7MTExMSAxMTY3IDExQjI7CitEM0MwO0QzQzA7MTExMSAxMTY3IDExQjM7RDNDMDsxMTExIDExNjcgMTFCMzsKK0QzQzE7RDNDMTsxMTExIDExNjcgMTFCNDtEM0MxOzExMTEgMTE2NyAxMUI0OworRDNDMjtEM0MyOzExMTEgMTE2NyAxMUI1O0QzQzI7MTExMSAxMTY3IDExQjU7CitEM0MzO0QzQzM7MTExMSAxMTY3IDExQjY7RDNDMzsxMTExIDExNjcgMTFCNjsKK0QzQzQ7RDNDNDsxMTExIDExNjcgMTFCNztEM0M0OzExMTEgMTE2NyAxMUI3OworRDNDNTtEM0M1OzExMTEgMTE2NyAxMUI4O0QzQzU7MTExMSAxMTY3IDExQjg7CitEM0M2O0QzQzY7MTExMSAxMTY3IDExQjk7RDNDNjsxMTExIDExNjcgMTFCOTsKK0QzQzc7RDNDNzsxMTExIDExNjcgMTFCQTtEM0M3OzExMTEgMTE2NyAxMUJBOworRDNDODtEM0M4OzExMTEgMTE2NyAxMUJCO0QzQzg7MTExMSAxMTY3IDExQkI7CitEM0M5O0QzQzk7MTExMSAxMTY3IDExQkM7RDNDOTsxMTExIDExNjcgMTFCQzsKK0QzQ0E7RDNDQTsxMTExIDExNjcgMTFCRDtEM0NBOzExMTEgMTE2NyAxMUJEOworRDNDQjtEM0NCOzExMTEgMTE2NyAxMUJFO0QzQ0I7MTExMSAxMTY3IDExQkU7CitEM0NDO0QzQ0M7MTExMSAxMTY3IDExQkY7RDNDQzsxMTExIDExNjcgMTFCRjsKK0QzQ0Q7RDNDRDsxMTExIDExNjcgMTFDMDtEM0NEOzExMTEgMTE2NyAxMUMwOworRDNDRTtEM0NFOzExMTEgMTE2NyAxMUMxO0QzQ0U7MTExMSAxMTY3IDExQzE7CitEM0NGO0QzQ0Y7MTExMSAxMTY3IDExQzI7RDNDRjsxMTExIDExNjcgMTFDMjsKK0QzRDA7RDNEMDsxMTExIDExNjg7RDNEMDsxMTExIDExNjg7CitEM0QxO0QzRDE7MTExMSAxMTY4IDExQTg7RDNEMTsxMTExIDExNjggMTFBODsKK0QzRDI7RDNEMjsxMTExIDExNjggMTFBOTtEM0QyOzExMTEgMTE2OCAxMUE5OworRDNEMztEM0QzOzExMTEgMTE2OCAxMUFBO0QzRDM7MTExMSAxMTY4IDExQUE7CitEM0Q0O0QzRDQ7MTExMSAxMTY4IDExQUI7RDNENDsxMTExIDExNjggMTFBQjsKK0QzRDU7RDNENTsxMTExIDExNjggMTFBQztEM0Q1OzExMTEgMTE2OCAxMUFDOworRDNENjtEM0Q2OzExMTEgMTE2OCAxMUFEO0QzRDY7MTExMSAxMTY4IDExQUQ7CitEM0Q3O0QzRDc7MTExMSAxMTY4IDExQUU7RDNENzsxMTExIDExNjggMTFBRTsKK0QzRDg7RDNEODsxMTExIDExNjggMTFBRjtEM0Q4OzExMTEgMTE2OCAxMUFGOworRDNEOTtEM0Q5OzExMTEgMTE2OCAxMUIwO0QzRDk7MTExMSAxMTY4IDExQjA7CitEM0RBO0QzREE7MTExMSAxMTY4IDExQjE7RDNEQTsxMTExIDExNjggMTFCMTsKK0QzREI7RDNEQjsxMTExIDExNjggMTFCMjtEM0RCOzExMTEgMTE2OCAxMUIyOworRDNEQztEM0RDOzExMTEgMTE2OCAxMUIzO0QzREM7MTExMSAxMTY4IDExQjM7CitEM0REO0QzREQ7MTExMSAxMTY4IDExQjQ7RDNERDsxMTExIDExNjggMTFCNDsKK0QzREU7RDNERTsxMTExIDExNjggMTFCNTtEM0RFOzExMTEgMTE2OCAxMUI1OworRDNERjtEM0RGOzExMTEgMTE2OCAxMUI2O0QzREY7MTExMSAxMTY4IDExQjY7CitEM0UwO0QzRTA7MTExMSAxMTY4IDExQjc7RDNFMDsxMTExIDExNjggMTFCNzsKK0QzRTE7RDNFMTsxMTExIDExNjggMTFCODtEM0UxOzExMTEgMTE2OCAxMUI4OworRDNFMjtEM0UyOzExMTEgMTE2OCAxMUI5O0QzRTI7MTExMSAxMTY4IDExQjk7CitEM0UzO0QzRTM7MTExMSAxMTY4IDExQkE7RDNFMzsxMTExIDExNjggMTFCQTsKK0QzRTQ7RDNFNDsxMTExIDExNjggMTFCQjtEM0U0OzExMTEgMTE2OCAxMUJCOworRDNFNTtEM0U1OzExMTEgMTE2OCAxMUJDO0QzRTU7MTExMSAxMTY4IDExQkM7CitEM0U2O0QzRTY7MTExMSAxMTY4IDExQkQ7RDNFNjsxMTExIDExNjggMTFCRDsKK0QzRTc7RDNFNzsxMTExIDExNjggMTFCRTtEM0U3OzExMTEgMTE2OCAxMUJFOworRDNFODtEM0U4OzExMTEgMTE2OCAxMUJGO0QzRTg7MTExMSAxMTY4IDExQkY7CitEM0U5O0QzRTk7MTExMSAxMTY4IDExQzA7RDNFOTsxMTExIDExNjggMTFDMDsKK0QzRUE7RDNFQTsxMTExIDExNjggMTFDMTtEM0VBOzExMTEgMTE2OCAxMUMxOworRDNFQjtEM0VCOzExMTEgMTE2OCAxMUMyO0QzRUI7MTExMSAxMTY4IDExQzI7CitEM0VDO0QzRUM7MTExMSAxMTY5O0QzRUM7MTExMSAxMTY5OworRDNFRDtEM0VEOzExMTEgMTE2OSAxMUE4O0QzRUQ7MTExMSAxMTY5IDExQTg7CitEM0VFO0QzRUU7MTExMSAxMTY5IDExQTk7RDNFRTsxMTExIDExNjkgMTFBOTsKK0QzRUY7RDNFRjsxMTExIDExNjkgMTFBQTtEM0VGOzExMTEgMTE2OSAxMUFBOworRDNGMDtEM0YwOzExMTEgMTE2OSAxMUFCO0QzRjA7MTExMSAxMTY5IDExQUI7CitEM0YxO0QzRjE7MTExMSAxMTY5IDExQUM7RDNGMTsxMTExIDExNjkgMTFBQzsKK0QzRjI7RDNGMjsxMTExIDExNjkgMTFBRDtEM0YyOzExMTEgMTE2OSAxMUFEOworRDNGMztEM0YzOzExMTEgMTE2OSAxMUFFO0QzRjM7MTExMSAxMTY5IDExQUU7CitEM0Y0O0QzRjQ7MTExMSAxMTY5IDExQUY7RDNGNDsxMTExIDExNjkgMTFBRjsKK0QzRjU7RDNGNTsxMTExIDExNjkgMTFCMDtEM0Y1OzExMTEgMTE2OSAxMUIwOworRDNGNjtEM0Y2OzExMTEgMTE2OSAxMUIxO0QzRjY7MTExMSAxMTY5IDExQjE7CitEM0Y3O0QzRjc7MTExMSAxMTY5IDExQjI7RDNGNzsxMTExIDExNjkgMTFCMjsKK0QzRjg7RDNGODsxMTExIDExNjkgMTFCMztEM0Y4OzExMTEgMTE2OSAxMUIzOworRDNGOTtEM0Y5OzExMTEgMTE2OSAxMUI0O0QzRjk7MTExMSAxMTY5IDExQjQ7CitEM0ZBO0QzRkE7MTExMSAxMTY5IDExQjU7RDNGQTsxMTExIDExNjkgMTFCNTsKK0QzRkI7RDNGQjsxMTExIDExNjkgMTFCNjtEM0ZCOzExMTEgMTE2OSAxMUI2OworRDNGQztEM0ZDOzExMTEgMTE2OSAxMUI3O0QzRkM7MTExMSAxMTY5IDExQjc7CitEM0ZEO0QzRkQ7MTExMSAxMTY5IDExQjg7RDNGRDsxMTExIDExNjkgMTFCODsKK0QzRkU7RDNGRTsxMTExIDExNjkgMTFCOTtEM0ZFOzExMTEgMTE2OSAxMUI5OworRDNGRjtEM0ZGOzExMTEgMTE2OSAxMUJBO0QzRkY7MTExMSAxMTY5IDExQkE7CitENDAwO0Q0MDA7MTExMSAxMTY5IDExQkI7RDQwMDsxMTExIDExNjkgMTFCQjsKK0Q0MDE7RDQwMTsxMTExIDExNjkgMTFCQztENDAxOzExMTEgMTE2OSAxMUJDOworRDQwMjtENDAyOzExMTEgMTE2OSAxMUJEO0Q0MDI7MTExMSAxMTY5IDExQkQ7CitENDAzO0Q0MDM7MTExMSAxMTY5IDExQkU7RDQwMzsxMTExIDExNjkgMTFCRTsKK0Q0MDQ7RDQwNDsxMTExIDExNjkgMTFCRjtENDA0OzExMTEgMTE2OSAxMUJGOworRDQwNTtENDA1OzExMTEgMTE2OSAxMUMwO0Q0MDU7MTExMSAxMTY5IDExQzA7CitENDA2O0Q0MDY7MTExMSAxMTY5IDExQzE7RDQwNjsxMTExIDExNjkgMTFDMTsKK0Q0MDc7RDQwNzsxMTExIDExNjkgMTFDMjtENDA3OzExMTEgMTE2OSAxMUMyOworRDQwODtENDA4OzExMTEgMTE2QTtENDA4OzExMTEgMTE2QTsKK0Q0MDk7RDQwOTsxMTExIDExNkEgMTFBODtENDA5OzExMTEgMTE2QSAxMUE4OworRDQwQTtENDBBOzExMTEgMTE2QSAxMUE5O0Q0MEE7MTExMSAxMTZBIDExQTk7CitENDBCO0Q0MEI7MTExMSAxMTZBIDExQUE7RDQwQjsxMTExIDExNkEgMTFBQTsKK0Q0MEM7RDQwQzsxMTExIDExNkEgMTFBQjtENDBDOzExMTEgMTE2QSAxMUFCOworRDQwRDtENDBEOzExMTEgMTE2QSAxMUFDO0Q0MEQ7MTExMSAxMTZBIDExQUM7CitENDBFO0Q0MEU7MTExMSAxMTZBIDExQUQ7RDQwRTsxMTExIDExNkEgMTFBRDsKK0Q0MEY7RDQwRjsxMTExIDExNkEgMTFBRTtENDBGOzExMTEgMTE2QSAxMUFFOworRDQxMDtENDEwOzExMTEgMTE2QSAxMUFGO0Q0MTA7MTExMSAxMTZBIDExQUY7CitENDExO0Q0MTE7MTExMSAxMTZBIDExQjA7RDQxMTsxMTExIDExNkEgMTFCMDsKK0Q0MTI7RDQxMjsxMTExIDExNkEgMTFCMTtENDEyOzExMTEgMTE2QSAxMUIxOworRDQxMztENDEzOzExMTEgMTE2QSAxMUIyO0Q0MTM7MTExMSAxMTZBIDExQjI7CitENDE0O0Q0MTQ7MTExMSAxMTZBIDExQjM7RDQxNDsxMTExIDExNkEgMTFCMzsKK0Q0MTU7RDQxNTsxMTExIDExNkEgMTFCNDtENDE1OzExMTEgMTE2QSAxMUI0OworRDQxNjtENDE2OzExMTEgMTE2QSAxMUI1O0Q0MTY7MTExMSAxMTZBIDExQjU7CitENDE3O0Q0MTc7MTExMSAxMTZBIDExQjY7RDQxNzsxMTExIDExNkEgMTFCNjsKK0Q0MTg7RDQxODsxMTExIDExNkEgMTFCNztENDE4OzExMTEgMTE2QSAxMUI3OworRDQxOTtENDE5OzExMTEgMTE2QSAxMUI4O0Q0MTk7MTExMSAxMTZBIDExQjg7CitENDFBO0Q0MUE7MTExMSAxMTZBIDExQjk7RDQxQTsxMTExIDExNkEgMTFCOTsKK0Q0MUI7RDQxQjsxMTExIDExNkEgMTFCQTtENDFCOzExMTEgMTE2QSAxMUJBOworRDQxQztENDFDOzExMTEgMTE2QSAxMUJCO0Q0MUM7MTExMSAxMTZBIDExQkI7CitENDFEO0Q0MUQ7MTExMSAxMTZBIDExQkM7RDQxRDsxMTExIDExNkEgMTFCQzsKK0Q0MUU7RDQxRTsxMTExIDExNkEgMTFCRDtENDFFOzExMTEgMTE2QSAxMUJEOworRDQxRjtENDFGOzExMTEgMTE2QSAxMUJFO0Q0MUY7MTExMSAxMTZBIDExQkU7CitENDIwO0Q0MjA7MTExMSAxMTZBIDExQkY7RDQyMDsxMTExIDExNkEgMTFCRjsKK0Q0MjE7RDQyMTsxMTExIDExNkEgMTFDMDtENDIxOzExMTEgMTE2QSAxMUMwOworRDQyMjtENDIyOzExMTEgMTE2QSAxMUMxO0Q0MjI7MTExMSAxMTZBIDExQzE7CitENDIzO0Q0MjM7MTExMSAxMTZBIDExQzI7RDQyMzsxMTExIDExNkEgMTFDMjsKK0Q0MjQ7RDQyNDsxMTExIDExNkI7RDQyNDsxMTExIDExNkI7CitENDI1O0Q0MjU7MTExMSAxMTZCIDExQTg7RDQyNTsxMTExIDExNkIgMTFBODsKK0Q0MjY7RDQyNjsxMTExIDExNkIgMTFBOTtENDI2OzExMTEgMTE2QiAxMUE5OworRDQyNztENDI3OzExMTEgMTE2QiAxMUFBO0Q0Mjc7MTExMSAxMTZCIDExQUE7CitENDI4O0Q0Mjg7MTExMSAxMTZCIDExQUI7RDQyODsxMTExIDExNkIgMTFBQjsKK0Q0Mjk7RDQyOTsxMTExIDExNkIgMTFBQztENDI5OzExMTEgMTE2QiAxMUFDOworRDQyQTtENDJBOzExMTEgMTE2QiAxMUFEO0Q0MkE7MTExMSAxMTZCIDExQUQ7CitENDJCO0Q0MkI7MTExMSAxMTZCIDExQUU7RDQyQjsxMTExIDExNkIgMTFBRTsKK0Q0MkM7RDQyQzsxMTExIDExNkIgMTFBRjtENDJDOzExMTEgMTE2QiAxMUFGOworRDQyRDtENDJEOzExMTEgMTE2QiAxMUIwO0Q0MkQ7MTExMSAxMTZCIDExQjA7CitENDJFO0Q0MkU7MTExMSAxMTZCIDExQjE7RDQyRTsxMTExIDExNkIgMTFCMTsKK0Q0MkY7RDQyRjsxMTExIDExNkIgMTFCMjtENDJGOzExMTEgMTE2QiAxMUIyOworRDQzMDtENDMwOzExMTEgMTE2QiAxMUIzO0Q0MzA7MTExMSAxMTZCIDExQjM7CitENDMxO0Q0MzE7MTExMSAxMTZCIDExQjQ7RDQzMTsxMTExIDExNkIgMTFCNDsKK0Q0MzI7RDQzMjsxMTExIDExNkIgMTFCNTtENDMyOzExMTEgMTE2QiAxMUI1OworRDQzMztENDMzOzExMTEgMTE2QiAxMUI2O0Q0MzM7MTExMSAxMTZCIDExQjY7CitENDM0O0Q0MzQ7MTExMSAxMTZCIDExQjc7RDQzNDsxMTExIDExNkIgMTFCNzsKK0Q0MzU7RDQzNTsxMTExIDExNkIgMTFCODtENDM1OzExMTEgMTE2QiAxMUI4OworRDQzNjtENDM2OzExMTEgMTE2QiAxMUI5O0Q0MzY7MTExMSAxMTZCIDExQjk7CitENDM3O0Q0Mzc7MTExMSAxMTZCIDExQkE7RDQzNzsxMTExIDExNkIgMTFCQTsKK0Q0Mzg7RDQzODsxMTExIDExNkIgMTFCQjtENDM4OzExMTEgMTE2QiAxMUJCOworRDQzOTtENDM5OzExMTEgMTE2QiAxMUJDO0Q0Mzk7MTExMSAxMTZCIDExQkM7CitENDNBO0Q0M0E7MTExMSAxMTZCIDExQkQ7RDQzQTsxMTExIDExNkIgMTFCRDsKK0Q0M0I7RDQzQjsxMTExIDExNkIgMTFCRTtENDNCOzExMTEgMTE2QiAxMUJFOworRDQzQztENDNDOzExMTEgMTE2QiAxMUJGO0Q0M0M7MTExMSAxMTZCIDExQkY7CitENDNEO0Q0M0Q7MTExMSAxMTZCIDExQzA7RDQzRDsxMTExIDExNkIgMTFDMDsKK0Q0M0U7RDQzRTsxMTExIDExNkIgMTFDMTtENDNFOzExMTEgMTE2QiAxMUMxOworRDQzRjtENDNGOzExMTEgMTE2QiAxMUMyO0Q0M0Y7MTExMSAxMTZCIDExQzI7CitENDQwO0Q0NDA7MTExMSAxMTZDO0Q0NDA7MTExMSAxMTZDOworRDQ0MTtENDQxOzExMTEgMTE2QyAxMUE4O0Q0NDE7MTExMSAxMTZDIDExQTg7CitENDQyO0Q0NDI7MTExMSAxMTZDIDExQTk7RDQ0MjsxMTExIDExNkMgMTFBOTsKK0Q0NDM7RDQ0MzsxMTExIDExNkMgMTFBQTtENDQzOzExMTEgMTE2QyAxMUFBOworRDQ0NDtENDQ0OzExMTEgMTE2QyAxMUFCO0Q0NDQ7MTExMSAxMTZDIDExQUI7CitENDQ1O0Q0NDU7MTExMSAxMTZDIDExQUM7RDQ0NTsxMTExIDExNkMgMTFBQzsKK0Q0NDY7RDQ0NjsxMTExIDExNkMgMTFBRDtENDQ2OzExMTEgMTE2QyAxMUFEOworRDQ0NztENDQ3OzExMTEgMTE2QyAxMUFFO0Q0NDc7MTExMSAxMTZDIDExQUU7CitENDQ4O0Q0NDg7MTExMSAxMTZDIDExQUY7RDQ0ODsxMTExIDExNkMgMTFBRjsKK0Q0NDk7RDQ0OTsxMTExIDExNkMgMTFCMDtENDQ5OzExMTEgMTE2QyAxMUIwOworRDQ0QTtENDRBOzExMTEgMTE2QyAxMUIxO0Q0NEE7MTExMSAxMTZDIDExQjE7CitENDRCO0Q0NEI7MTExMSAxMTZDIDExQjI7RDQ0QjsxMTExIDExNkMgMTFCMjsKK0Q0NEM7RDQ0QzsxMTExIDExNkMgMTFCMztENDRDOzExMTEgMTE2QyAxMUIzOworRDQ0RDtENDREOzExMTEgMTE2QyAxMUI0O0Q0NEQ7MTExMSAxMTZDIDExQjQ7CitENDRFO0Q0NEU7MTExMSAxMTZDIDExQjU7RDQ0RTsxMTExIDExNkMgMTFCNTsKK0Q0NEY7RDQ0RjsxMTExIDExNkMgMTFCNjtENDRGOzExMTEgMTE2QyAxMUI2OworRDQ1MDtENDUwOzExMTEgMTE2QyAxMUI3O0Q0NTA7MTExMSAxMTZDIDExQjc7CitENDUxO0Q0NTE7MTExMSAxMTZDIDExQjg7RDQ1MTsxMTExIDExNkMgMTFCODsKK0Q0NTI7RDQ1MjsxMTExIDExNkMgMTFCOTtENDUyOzExMTEgMTE2QyAxMUI5OworRDQ1MztENDUzOzExMTEgMTE2QyAxMUJBO0Q0NTM7MTExMSAxMTZDIDExQkE7CitENDU0O0Q0NTQ7MTExMSAxMTZDIDExQkI7RDQ1NDsxMTExIDExNkMgMTFCQjsKK0Q0NTU7RDQ1NTsxMTExIDExNkMgMTFCQztENDU1OzExMTEgMTE2QyAxMUJDOworRDQ1NjtENDU2OzExMTEgMTE2QyAxMUJEO0Q0NTY7MTExMSAxMTZDIDExQkQ7CitENDU3O0Q0NTc7MTExMSAxMTZDIDExQkU7RDQ1NzsxMTExIDExNkMgMTFCRTsKK0Q0NTg7RDQ1ODsxMTExIDExNkMgMTFCRjtENDU4OzExMTEgMTE2QyAxMUJGOworRDQ1OTtENDU5OzExMTEgMTE2QyAxMUMwO0Q0NTk7MTExMSAxMTZDIDExQzA7CitENDVBO0Q0NUE7MTExMSAxMTZDIDExQzE7RDQ1QTsxMTExIDExNkMgMTFDMTsKK0Q0NUI7RDQ1QjsxMTExIDExNkMgMTFDMjtENDVCOzExMTEgMTE2QyAxMUMyOworRDQ1QztENDVDOzExMTEgMTE2RDtENDVDOzExMTEgMTE2RDsKK0Q0NUQ7RDQ1RDsxMTExIDExNkQgMTFBODtENDVEOzExMTEgMTE2RCAxMUE4OworRDQ1RTtENDVFOzExMTEgMTE2RCAxMUE5O0Q0NUU7MTExMSAxMTZEIDExQTk7CitENDVGO0Q0NUY7MTExMSAxMTZEIDExQUE7RDQ1RjsxMTExIDExNkQgMTFBQTsKK0Q0NjA7RDQ2MDsxMTExIDExNkQgMTFBQjtENDYwOzExMTEgMTE2RCAxMUFCOworRDQ2MTtENDYxOzExMTEgMTE2RCAxMUFDO0Q0NjE7MTExMSAxMTZEIDExQUM7CitENDYyO0Q0NjI7MTExMSAxMTZEIDExQUQ7RDQ2MjsxMTExIDExNkQgMTFBRDsKK0Q0NjM7RDQ2MzsxMTExIDExNkQgMTFBRTtENDYzOzExMTEgMTE2RCAxMUFFOworRDQ2NDtENDY0OzExMTEgMTE2RCAxMUFGO0Q0NjQ7MTExMSAxMTZEIDExQUY7CitENDY1O0Q0NjU7MTExMSAxMTZEIDExQjA7RDQ2NTsxMTExIDExNkQgMTFCMDsKK0Q0NjY7RDQ2NjsxMTExIDExNkQgMTFCMTtENDY2OzExMTEgMTE2RCAxMUIxOworRDQ2NztENDY3OzExMTEgMTE2RCAxMUIyO0Q0Njc7MTExMSAxMTZEIDExQjI7CitENDY4O0Q0Njg7MTExMSAxMTZEIDExQjM7RDQ2ODsxMTExIDExNkQgMTFCMzsKK0Q0Njk7RDQ2OTsxMTExIDExNkQgMTFCNDtENDY5OzExMTEgMTE2RCAxMUI0OworRDQ2QTtENDZBOzExMTEgMTE2RCAxMUI1O0Q0NkE7MTExMSAxMTZEIDExQjU7CitENDZCO0Q0NkI7MTExMSAxMTZEIDExQjY7RDQ2QjsxMTExIDExNkQgMTFCNjsKK0Q0NkM7RDQ2QzsxMTExIDExNkQgMTFCNztENDZDOzExMTEgMTE2RCAxMUI3OworRDQ2RDtENDZEOzExMTEgMTE2RCAxMUI4O0Q0NkQ7MTExMSAxMTZEIDExQjg7CitENDZFO0Q0NkU7MTExMSAxMTZEIDExQjk7RDQ2RTsxMTExIDExNkQgMTFCOTsKK0Q0NkY7RDQ2RjsxMTExIDExNkQgMTFCQTtENDZGOzExMTEgMTE2RCAxMUJBOworRDQ3MDtENDcwOzExMTEgMTE2RCAxMUJCO0Q0NzA7MTExMSAxMTZEIDExQkI7CitENDcxO0Q0NzE7MTExMSAxMTZEIDExQkM7RDQ3MTsxMTExIDExNkQgMTFCQzsKK0Q0NzI7RDQ3MjsxMTExIDExNkQgMTFCRDtENDcyOzExMTEgMTE2RCAxMUJEOworRDQ3MztENDczOzExMTEgMTE2RCAxMUJFO0Q0NzM7MTExMSAxMTZEIDExQkU7CitENDc0O0Q0NzQ7MTExMSAxMTZEIDExQkY7RDQ3NDsxMTExIDExNkQgMTFCRjsKK0Q0NzU7RDQ3NTsxMTExIDExNkQgMTFDMDtENDc1OzExMTEgMTE2RCAxMUMwOworRDQ3NjtENDc2OzExMTEgMTE2RCAxMUMxO0Q0NzY7MTExMSAxMTZEIDExQzE7CitENDc3O0Q0Nzc7MTExMSAxMTZEIDExQzI7RDQ3NzsxMTExIDExNkQgMTFDMjsKK0Q0Nzg7RDQ3ODsxMTExIDExNkU7RDQ3ODsxMTExIDExNkU7CitENDc5O0Q0Nzk7MTExMSAxMTZFIDExQTg7RDQ3OTsxMTExIDExNkUgMTFBODsKK0Q0N0E7RDQ3QTsxMTExIDExNkUgMTFBOTtENDdBOzExMTEgMTE2RSAxMUE5OworRDQ3QjtENDdCOzExMTEgMTE2RSAxMUFBO0Q0N0I7MTExMSAxMTZFIDExQUE7CitENDdDO0Q0N0M7MTExMSAxMTZFIDExQUI7RDQ3QzsxMTExIDExNkUgMTFBQjsKK0Q0N0Q7RDQ3RDsxMTExIDExNkUgMTFBQztENDdEOzExMTEgMTE2RSAxMUFDOworRDQ3RTtENDdFOzExMTEgMTE2RSAxMUFEO0Q0N0U7MTExMSAxMTZFIDExQUQ7CitENDdGO0Q0N0Y7MTExMSAxMTZFIDExQUU7RDQ3RjsxMTExIDExNkUgMTFBRTsKK0Q0ODA7RDQ4MDsxMTExIDExNkUgMTFBRjtENDgwOzExMTEgMTE2RSAxMUFGOworRDQ4MTtENDgxOzExMTEgMTE2RSAxMUIwO0Q0ODE7MTExMSAxMTZFIDExQjA7CitENDgyO0Q0ODI7MTExMSAxMTZFIDExQjE7RDQ4MjsxMTExIDExNkUgMTFCMTsKK0Q0ODM7RDQ4MzsxMTExIDExNkUgMTFCMjtENDgzOzExMTEgMTE2RSAxMUIyOworRDQ4NDtENDg0OzExMTEgMTE2RSAxMUIzO0Q0ODQ7MTExMSAxMTZFIDExQjM7CitENDg1O0Q0ODU7MTExMSAxMTZFIDExQjQ7RDQ4NTsxMTExIDExNkUgMTFCNDsKK0Q0ODY7RDQ4NjsxMTExIDExNkUgMTFCNTtENDg2OzExMTEgMTE2RSAxMUI1OworRDQ4NztENDg3OzExMTEgMTE2RSAxMUI2O0Q0ODc7MTExMSAxMTZFIDExQjY7CitENDg4O0Q0ODg7MTExMSAxMTZFIDExQjc7RDQ4ODsxMTExIDExNkUgMTFCNzsKK0Q0ODk7RDQ4OTsxMTExIDExNkUgMTFCODtENDg5OzExMTEgMTE2RSAxMUI4OworRDQ4QTtENDhBOzExMTEgMTE2RSAxMUI5O0Q0OEE7MTExMSAxMTZFIDExQjk7CitENDhCO0Q0OEI7MTExMSAxMTZFIDExQkE7RDQ4QjsxMTExIDExNkUgMTFCQTsKK0Q0OEM7RDQ4QzsxMTExIDExNkUgMTFCQjtENDhDOzExMTEgMTE2RSAxMUJCOworRDQ4RDtENDhEOzExMTEgMTE2RSAxMUJDO0Q0OEQ7MTExMSAxMTZFIDExQkM7CitENDhFO0Q0OEU7MTExMSAxMTZFIDExQkQ7RDQ4RTsxMTExIDExNkUgMTFCRDsKK0Q0OEY7RDQ4RjsxMTExIDExNkUgMTFCRTtENDhGOzExMTEgMTE2RSAxMUJFOworRDQ5MDtENDkwOzExMTEgMTE2RSAxMUJGO0Q0OTA7MTExMSAxMTZFIDExQkY7CitENDkxO0Q0OTE7MTExMSAxMTZFIDExQzA7RDQ5MTsxMTExIDExNkUgMTFDMDsKK0Q0OTI7RDQ5MjsxMTExIDExNkUgMTFDMTtENDkyOzExMTEgMTE2RSAxMUMxOworRDQ5MztENDkzOzExMTEgMTE2RSAxMUMyO0Q0OTM7MTExMSAxMTZFIDExQzI7CitENDk0O0Q0OTQ7MTExMSAxMTZGO0Q0OTQ7MTExMSAxMTZGOworRDQ5NTtENDk1OzExMTEgMTE2RiAxMUE4O0Q0OTU7MTExMSAxMTZGIDExQTg7CitENDk2O0Q0OTY7MTExMSAxMTZGIDExQTk7RDQ5NjsxMTExIDExNkYgMTFBOTsKK0Q0OTc7RDQ5NzsxMTExIDExNkYgMTFBQTtENDk3OzExMTEgMTE2RiAxMUFBOworRDQ5ODtENDk4OzExMTEgMTE2RiAxMUFCO0Q0OTg7MTExMSAxMTZGIDExQUI7CitENDk5O0Q0OTk7MTExMSAxMTZGIDExQUM7RDQ5OTsxMTExIDExNkYgMTFBQzsKK0Q0OUE7RDQ5QTsxMTExIDExNkYgMTFBRDtENDlBOzExMTEgMTE2RiAxMUFEOworRDQ5QjtENDlCOzExMTEgMTE2RiAxMUFFO0Q0OUI7MTExMSAxMTZGIDExQUU7CitENDlDO0Q0OUM7MTExMSAxMTZGIDExQUY7RDQ5QzsxMTExIDExNkYgMTFBRjsKK0Q0OUQ7RDQ5RDsxMTExIDExNkYgMTFCMDtENDlEOzExMTEgMTE2RiAxMUIwOworRDQ5RTtENDlFOzExMTEgMTE2RiAxMUIxO0Q0OUU7MTExMSAxMTZGIDExQjE7CitENDlGO0Q0OUY7MTExMSAxMTZGIDExQjI7RDQ5RjsxMTExIDExNkYgMTFCMjsKK0Q0QTA7RDRBMDsxMTExIDExNkYgMTFCMztENEEwOzExMTEgMTE2RiAxMUIzOworRDRBMTtENEExOzExMTEgMTE2RiAxMUI0O0Q0QTE7MTExMSAxMTZGIDExQjQ7CitENEEyO0Q0QTI7MTExMSAxMTZGIDExQjU7RDRBMjsxMTExIDExNkYgMTFCNTsKK0Q0QTM7RDRBMzsxMTExIDExNkYgMTFCNjtENEEzOzExMTEgMTE2RiAxMUI2OworRDRBNDtENEE0OzExMTEgMTE2RiAxMUI3O0Q0QTQ7MTExMSAxMTZGIDExQjc7CitENEE1O0Q0QTU7MTExMSAxMTZGIDExQjg7RDRBNTsxMTExIDExNkYgMTFCODsKK0Q0QTY7RDRBNjsxMTExIDExNkYgMTFCOTtENEE2OzExMTEgMTE2RiAxMUI5OworRDRBNztENEE3OzExMTEgMTE2RiAxMUJBO0Q0QTc7MTExMSAxMTZGIDExQkE7CitENEE4O0Q0QTg7MTExMSAxMTZGIDExQkI7RDRBODsxMTExIDExNkYgMTFCQjsKK0Q0QTk7RDRBOTsxMTExIDExNkYgMTFCQztENEE5OzExMTEgMTE2RiAxMUJDOworRDRBQTtENEFBOzExMTEgMTE2RiAxMUJEO0Q0QUE7MTExMSAxMTZGIDExQkQ7CitENEFCO0Q0QUI7MTExMSAxMTZGIDExQkU7RDRBQjsxMTExIDExNkYgMTFCRTsKK0Q0QUM7RDRBQzsxMTExIDExNkYgMTFCRjtENEFDOzExMTEgMTE2RiAxMUJGOworRDRBRDtENEFEOzExMTEgMTE2RiAxMUMwO0Q0QUQ7MTExMSAxMTZGIDExQzA7CitENEFFO0Q0QUU7MTExMSAxMTZGIDExQzE7RDRBRTsxMTExIDExNkYgMTFDMTsKK0Q0QUY7RDRBRjsxMTExIDExNkYgMTFDMjtENEFGOzExMTEgMTE2RiAxMUMyOworRDRCMDtENEIwOzExMTEgMTE3MDtENEIwOzExMTEgMTE3MDsKK0Q0QjE7RDRCMTsxMTExIDExNzAgMTFBODtENEIxOzExMTEgMTE3MCAxMUE4OworRDRCMjtENEIyOzExMTEgMTE3MCAxMUE5O0Q0QjI7MTExMSAxMTcwIDExQTk7CitENEIzO0Q0QjM7MTExMSAxMTcwIDExQUE7RDRCMzsxMTExIDExNzAgMTFBQTsKK0Q0QjQ7RDRCNDsxMTExIDExNzAgMTFBQjtENEI0OzExMTEgMTE3MCAxMUFCOworRDRCNTtENEI1OzExMTEgMTE3MCAxMUFDO0Q0QjU7MTExMSAxMTcwIDExQUM7CitENEI2O0Q0QjY7MTExMSAxMTcwIDExQUQ7RDRCNjsxMTExIDExNzAgMTFBRDsKK0Q0Qjc7RDRCNzsxMTExIDExNzAgMTFBRTtENEI3OzExMTEgMTE3MCAxMUFFOworRDRCODtENEI4OzExMTEgMTE3MCAxMUFGO0Q0Qjg7MTExMSAxMTcwIDExQUY7CitENEI5O0Q0Qjk7MTExMSAxMTcwIDExQjA7RDRCOTsxMTExIDExNzAgMTFCMDsKK0Q0QkE7RDRCQTsxMTExIDExNzAgMTFCMTtENEJBOzExMTEgMTE3MCAxMUIxOworRDRCQjtENEJCOzExMTEgMTE3MCAxMUIyO0Q0QkI7MTExMSAxMTcwIDExQjI7CitENEJDO0Q0QkM7MTExMSAxMTcwIDExQjM7RDRCQzsxMTExIDExNzAgMTFCMzsKK0Q0QkQ7RDRCRDsxMTExIDExNzAgMTFCNDtENEJEOzExMTEgMTE3MCAxMUI0OworRDRCRTtENEJFOzExMTEgMTE3MCAxMUI1O0Q0QkU7MTExMSAxMTcwIDExQjU7CitENEJGO0Q0QkY7MTExMSAxMTcwIDExQjY7RDRCRjsxMTExIDExNzAgMTFCNjsKK0Q0QzA7RDRDMDsxMTExIDExNzAgMTFCNztENEMwOzExMTEgMTE3MCAxMUI3OworRDRDMTtENEMxOzExMTEgMTE3MCAxMUI4O0Q0QzE7MTExMSAxMTcwIDExQjg7CitENEMyO0Q0QzI7MTExMSAxMTcwIDExQjk7RDRDMjsxMTExIDExNzAgMTFCOTsKK0Q0QzM7RDRDMzsxMTExIDExNzAgMTFCQTtENEMzOzExMTEgMTE3MCAxMUJBOworRDRDNDtENEM0OzExMTEgMTE3MCAxMUJCO0Q0QzQ7MTExMSAxMTcwIDExQkI7CitENEM1O0Q0QzU7MTExMSAxMTcwIDExQkM7RDRDNTsxMTExIDExNzAgMTFCQzsKK0Q0QzY7RDRDNjsxMTExIDExNzAgMTFCRDtENEM2OzExMTEgMTE3MCAxMUJEOworRDRDNztENEM3OzExMTEgMTE3MCAxMUJFO0Q0Qzc7MTExMSAxMTcwIDExQkU7CitENEM4O0Q0Qzg7MTExMSAxMTcwIDExQkY7RDRDODsxMTExIDExNzAgMTFCRjsKK0Q0Qzk7RDRDOTsxMTExIDExNzAgMTFDMDtENEM5OzExMTEgMTE3MCAxMUMwOworRDRDQTtENENBOzExMTEgMTE3MCAxMUMxO0Q0Q0E7MTExMSAxMTcwIDExQzE7CitENENCO0Q0Q0I7MTExMSAxMTcwIDExQzI7RDRDQjsxMTExIDExNzAgMTFDMjsKK0Q0Q0M7RDRDQzsxMTExIDExNzE7RDRDQzsxMTExIDExNzE7CitENENEO0Q0Q0Q7MTExMSAxMTcxIDExQTg7RDRDRDsxMTExIDExNzEgMTFBODsKK0Q0Q0U7RDRDRTsxMTExIDExNzEgMTFBOTtENENFOzExMTEgMTE3MSAxMUE5OworRDRDRjtENENGOzExMTEgMTE3MSAxMUFBO0Q0Q0Y7MTExMSAxMTcxIDExQUE7CitENEQwO0Q0RDA7MTExMSAxMTcxIDExQUI7RDREMDsxMTExIDExNzEgMTFBQjsKK0Q0RDE7RDREMTsxMTExIDExNzEgMTFBQztENEQxOzExMTEgMTE3MSAxMUFDOworRDREMjtENEQyOzExMTEgMTE3MSAxMUFEO0Q0RDI7MTExMSAxMTcxIDExQUQ7CitENEQzO0Q0RDM7MTExMSAxMTcxIDExQUU7RDREMzsxMTExIDExNzEgMTFBRTsKK0Q0RDQ7RDRENDsxMTExIDExNzEgMTFBRjtENEQ0OzExMTEgMTE3MSAxMUFGOworRDRENTtENEQ1OzExMTEgMTE3MSAxMUIwO0Q0RDU7MTExMSAxMTcxIDExQjA7CitENEQ2O0Q0RDY7MTExMSAxMTcxIDExQjE7RDRENjsxMTExIDExNzEgMTFCMTsKK0Q0RDc7RDRENzsxMTExIDExNzEgMTFCMjtENEQ3OzExMTEgMTE3MSAxMUIyOworRDREODtENEQ4OzExMTEgMTE3MSAxMUIzO0Q0RDg7MTExMSAxMTcxIDExQjM7CitENEQ5O0Q0RDk7MTExMSAxMTcxIDExQjQ7RDREOTsxMTExIDExNzEgMTFCNDsKK0Q0REE7RDREQTsxMTExIDExNzEgMTFCNTtENERBOzExMTEgMTE3MSAxMUI1OworRDREQjtENERCOzExMTEgMTE3MSAxMUI2O0Q0REI7MTExMSAxMTcxIDExQjY7CitENERDO0Q0REM7MTExMSAxMTcxIDExQjc7RDREQzsxMTExIDExNzEgMTFCNzsKK0Q0REQ7RDRERDsxMTExIDExNzEgMTFCODtENEREOzExMTEgMTE3MSAxMUI4OworRDRERTtENERFOzExMTEgMTE3MSAxMUI5O0Q0REU7MTExMSAxMTcxIDExQjk7CitENERGO0Q0REY7MTExMSAxMTcxIDExQkE7RDRERjsxMTExIDExNzEgMTFCQTsKK0Q0RTA7RDRFMDsxMTExIDExNzEgMTFCQjtENEUwOzExMTEgMTE3MSAxMUJCOworRDRFMTtENEUxOzExMTEgMTE3MSAxMUJDO0Q0RTE7MTExMSAxMTcxIDExQkM7CitENEUyO0Q0RTI7MTExMSAxMTcxIDExQkQ7RDRFMjsxMTExIDExNzEgMTFCRDsKK0Q0RTM7RDRFMzsxMTExIDExNzEgMTFCRTtENEUzOzExMTEgMTE3MSAxMUJFOworRDRFNDtENEU0OzExMTEgMTE3MSAxMUJGO0Q0RTQ7MTExMSAxMTcxIDExQkY7CitENEU1O0Q0RTU7MTExMSAxMTcxIDExQzA7RDRFNTsxMTExIDExNzEgMTFDMDsKK0Q0RTY7RDRFNjsxMTExIDExNzEgMTFDMTtENEU2OzExMTEgMTE3MSAxMUMxOworRDRFNztENEU3OzExMTEgMTE3MSAxMUMyO0Q0RTc7MTExMSAxMTcxIDExQzI7CitENEU4O0Q0RTg7MTExMSAxMTcyO0Q0RTg7MTExMSAxMTcyOworRDRFOTtENEU5OzExMTEgMTE3MiAxMUE4O0Q0RTk7MTExMSAxMTcyIDExQTg7CitENEVBO0Q0RUE7MTExMSAxMTcyIDExQTk7RDRFQTsxMTExIDExNzIgMTFBOTsKK0Q0RUI7RDRFQjsxMTExIDExNzIgMTFBQTtENEVCOzExMTEgMTE3MiAxMUFBOworRDRFQztENEVDOzExMTEgMTE3MiAxMUFCO0Q0RUM7MTExMSAxMTcyIDExQUI7CitENEVEO0Q0RUQ7MTExMSAxMTcyIDExQUM7RDRFRDsxMTExIDExNzIgMTFBQzsKK0Q0RUU7RDRFRTsxMTExIDExNzIgMTFBRDtENEVFOzExMTEgMTE3MiAxMUFEOworRDRFRjtENEVGOzExMTEgMTE3MiAxMUFFO0Q0RUY7MTExMSAxMTcyIDExQUU7CitENEYwO0Q0RjA7MTExMSAxMTcyIDExQUY7RDRGMDsxMTExIDExNzIgMTFBRjsKK0Q0RjE7RDRGMTsxMTExIDExNzIgMTFCMDtENEYxOzExMTEgMTE3MiAxMUIwOworRDRGMjtENEYyOzExMTEgMTE3MiAxMUIxO0Q0RjI7MTExMSAxMTcyIDExQjE7CitENEYzO0Q0RjM7MTExMSAxMTcyIDExQjI7RDRGMzsxMTExIDExNzIgMTFCMjsKK0Q0RjQ7RDRGNDsxMTExIDExNzIgMTFCMztENEY0OzExMTEgMTE3MiAxMUIzOworRDRGNTtENEY1OzExMTEgMTE3MiAxMUI0O0Q0RjU7MTExMSAxMTcyIDExQjQ7CitENEY2O0Q0RjY7MTExMSAxMTcyIDExQjU7RDRGNjsxMTExIDExNzIgMTFCNTsKK0Q0Rjc7RDRGNzsxMTExIDExNzIgMTFCNjtENEY3OzExMTEgMTE3MiAxMUI2OworRDRGODtENEY4OzExMTEgMTE3MiAxMUI3O0Q0Rjg7MTExMSAxMTcyIDExQjc7CitENEY5O0Q0Rjk7MTExMSAxMTcyIDExQjg7RDRGOTsxMTExIDExNzIgMTFCODsKK0Q0RkE7RDRGQTsxMTExIDExNzIgMTFCOTtENEZBOzExMTEgMTE3MiAxMUI5OworRDRGQjtENEZCOzExMTEgMTE3MiAxMUJBO0Q0RkI7MTExMSAxMTcyIDExQkE7CitENEZDO0Q0RkM7MTExMSAxMTcyIDExQkI7RDRGQzsxMTExIDExNzIgMTFCQjsKK0Q0RkQ7RDRGRDsxMTExIDExNzIgMTFCQztENEZEOzExMTEgMTE3MiAxMUJDOworRDRGRTtENEZFOzExMTEgMTE3MiAxMUJEO0Q0RkU7MTExMSAxMTcyIDExQkQ7CitENEZGO0Q0RkY7MTExMSAxMTcyIDExQkU7RDRGRjsxMTExIDExNzIgMTFCRTsKK0Q1MDA7RDUwMDsxMTExIDExNzIgMTFCRjtENTAwOzExMTEgMTE3MiAxMUJGOworRDUwMTtENTAxOzExMTEgMTE3MiAxMUMwO0Q1MDE7MTExMSAxMTcyIDExQzA7CitENTAyO0Q1MDI7MTExMSAxMTcyIDExQzE7RDUwMjsxMTExIDExNzIgMTFDMTsKK0Q1MDM7RDUwMzsxMTExIDExNzIgMTFDMjtENTAzOzExMTEgMTE3MiAxMUMyOworRDUwNDtENTA0OzExMTEgMTE3MztENTA0OzExMTEgMTE3MzsKK0Q1MDU7RDUwNTsxMTExIDExNzMgMTFBODtENTA1OzExMTEgMTE3MyAxMUE4OworRDUwNjtENTA2OzExMTEgMTE3MyAxMUE5O0Q1MDY7MTExMSAxMTczIDExQTk7CitENTA3O0Q1MDc7MTExMSAxMTczIDExQUE7RDUwNzsxMTExIDExNzMgMTFBQTsKK0Q1MDg7RDUwODsxMTExIDExNzMgMTFBQjtENTA4OzExMTEgMTE3MyAxMUFCOworRDUwOTtENTA5OzExMTEgMTE3MyAxMUFDO0Q1MDk7MTExMSAxMTczIDExQUM7CitENTBBO0Q1MEE7MTExMSAxMTczIDExQUQ7RDUwQTsxMTExIDExNzMgMTFBRDsKK0Q1MEI7RDUwQjsxMTExIDExNzMgMTFBRTtENTBCOzExMTEgMTE3MyAxMUFFOworRDUwQztENTBDOzExMTEgMTE3MyAxMUFGO0Q1MEM7MTExMSAxMTczIDExQUY7CitENTBEO0Q1MEQ7MTExMSAxMTczIDExQjA7RDUwRDsxMTExIDExNzMgMTFCMDsKK0Q1MEU7RDUwRTsxMTExIDExNzMgMTFCMTtENTBFOzExMTEgMTE3MyAxMUIxOworRDUwRjtENTBGOzExMTEgMTE3MyAxMUIyO0Q1MEY7MTExMSAxMTczIDExQjI7CitENTEwO0Q1MTA7MTExMSAxMTczIDExQjM7RDUxMDsxMTExIDExNzMgMTFCMzsKK0Q1MTE7RDUxMTsxMTExIDExNzMgMTFCNDtENTExOzExMTEgMTE3MyAxMUI0OworRDUxMjtENTEyOzExMTEgMTE3MyAxMUI1O0Q1MTI7MTExMSAxMTczIDExQjU7CitENTEzO0Q1MTM7MTExMSAxMTczIDExQjY7RDUxMzsxMTExIDExNzMgMTFCNjsKK0Q1MTQ7RDUxNDsxMTExIDExNzMgMTFCNztENTE0OzExMTEgMTE3MyAxMUI3OworRDUxNTtENTE1OzExMTEgMTE3MyAxMUI4O0Q1MTU7MTExMSAxMTczIDExQjg7CitENTE2O0Q1MTY7MTExMSAxMTczIDExQjk7RDUxNjsxMTExIDExNzMgMTFCOTsKK0Q1MTc7RDUxNzsxMTExIDExNzMgMTFCQTtENTE3OzExMTEgMTE3MyAxMUJBOworRDUxODtENTE4OzExMTEgMTE3MyAxMUJCO0Q1MTg7MTExMSAxMTczIDExQkI7CitENTE5O0Q1MTk7MTExMSAxMTczIDExQkM7RDUxOTsxMTExIDExNzMgMTFCQzsKK0Q1MUE7RDUxQTsxMTExIDExNzMgMTFCRDtENTFBOzExMTEgMTE3MyAxMUJEOworRDUxQjtENTFCOzExMTEgMTE3MyAxMUJFO0Q1MUI7MTExMSAxMTczIDExQkU7CitENTFDO0Q1MUM7MTExMSAxMTczIDExQkY7RDUxQzsxMTExIDExNzMgMTFCRjsKK0Q1MUQ7RDUxRDsxMTExIDExNzMgMTFDMDtENTFEOzExMTEgMTE3MyAxMUMwOworRDUxRTtENTFFOzExMTEgMTE3MyAxMUMxO0Q1MUU7MTExMSAxMTczIDExQzE7CitENTFGO0Q1MUY7MTExMSAxMTczIDExQzI7RDUxRjsxMTExIDExNzMgMTFDMjsKK0Q1MjA7RDUyMDsxMTExIDExNzQ7RDUyMDsxMTExIDExNzQ7CitENTIxO0Q1MjE7MTExMSAxMTc0IDExQTg7RDUyMTsxMTExIDExNzQgMTFBODsKK0Q1MjI7RDUyMjsxMTExIDExNzQgMTFBOTtENTIyOzExMTEgMTE3NCAxMUE5OworRDUyMztENTIzOzExMTEgMTE3NCAxMUFBO0Q1MjM7MTExMSAxMTc0IDExQUE7CitENTI0O0Q1MjQ7MTExMSAxMTc0IDExQUI7RDUyNDsxMTExIDExNzQgMTFBQjsKK0Q1MjU7RDUyNTsxMTExIDExNzQgMTFBQztENTI1OzExMTEgMTE3NCAxMUFDOworRDUyNjtENTI2OzExMTEgMTE3NCAxMUFEO0Q1MjY7MTExMSAxMTc0IDExQUQ7CitENTI3O0Q1Mjc7MTExMSAxMTc0IDExQUU7RDUyNzsxMTExIDExNzQgMTFBRTsKK0Q1Mjg7RDUyODsxMTExIDExNzQgMTFBRjtENTI4OzExMTEgMTE3NCAxMUFGOworRDUyOTtENTI5OzExMTEgMTE3NCAxMUIwO0Q1Mjk7MTExMSAxMTc0IDExQjA7CitENTJBO0Q1MkE7MTExMSAxMTc0IDExQjE7RDUyQTsxMTExIDExNzQgMTFCMTsKK0Q1MkI7RDUyQjsxMTExIDExNzQgMTFCMjtENTJCOzExMTEgMTE3NCAxMUIyOworRDUyQztENTJDOzExMTEgMTE3NCAxMUIzO0Q1MkM7MTExMSAxMTc0IDExQjM7CitENTJEO0Q1MkQ7MTExMSAxMTc0IDExQjQ7RDUyRDsxMTExIDExNzQgMTFCNDsKK0Q1MkU7RDUyRTsxMTExIDExNzQgMTFCNTtENTJFOzExMTEgMTE3NCAxMUI1OworRDUyRjtENTJGOzExMTEgMTE3NCAxMUI2O0Q1MkY7MTExMSAxMTc0IDExQjY7CitENTMwO0Q1MzA7MTExMSAxMTc0IDExQjc7RDUzMDsxMTExIDExNzQgMTFCNzsKK0Q1MzE7RDUzMTsxMTExIDExNzQgMTFCODtENTMxOzExMTEgMTE3NCAxMUI4OworRDUzMjtENTMyOzExMTEgMTE3NCAxMUI5O0Q1MzI7MTExMSAxMTc0IDExQjk7CitENTMzO0Q1MzM7MTExMSAxMTc0IDExQkE7RDUzMzsxMTExIDExNzQgMTFCQTsKK0Q1MzQ7RDUzNDsxMTExIDExNzQgMTFCQjtENTM0OzExMTEgMTE3NCAxMUJCOworRDUzNTtENTM1OzExMTEgMTE3NCAxMUJDO0Q1MzU7MTExMSAxMTc0IDExQkM7CitENTM2O0Q1MzY7MTExMSAxMTc0IDExQkQ7RDUzNjsxMTExIDExNzQgMTFCRDsKK0Q1Mzc7RDUzNzsxMTExIDExNzQgMTFCRTtENTM3OzExMTEgMTE3NCAxMUJFOworRDUzODtENTM4OzExMTEgMTE3NCAxMUJGO0Q1Mzg7MTExMSAxMTc0IDExQkY7CitENTM5O0Q1Mzk7MTExMSAxMTc0IDExQzA7RDUzOTsxMTExIDExNzQgMTFDMDsKK0Q1M0E7RDUzQTsxMTExIDExNzQgMTFDMTtENTNBOzExMTEgMTE3NCAxMUMxOworRDUzQjtENTNCOzExMTEgMTE3NCAxMUMyO0Q1M0I7MTExMSAxMTc0IDExQzI7CitENTNDO0Q1M0M7MTExMSAxMTc1O0Q1M0M7MTExMSAxMTc1OworRDUzRDtENTNEOzExMTEgMTE3NSAxMUE4O0Q1M0Q7MTExMSAxMTc1IDExQTg7CitENTNFO0Q1M0U7MTExMSAxMTc1IDExQTk7RDUzRTsxMTExIDExNzUgMTFBOTsKK0Q1M0Y7RDUzRjsxMTExIDExNzUgMTFBQTtENTNGOzExMTEgMTE3NSAxMUFBOworRDU0MDtENTQwOzExMTEgMTE3NSAxMUFCO0Q1NDA7MTExMSAxMTc1IDExQUI7CitENTQxO0Q1NDE7MTExMSAxMTc1IDExQUM7RDU0MTsxMTExIDExNzUgMTFBQzsKK0Q1NDI7RDU0MjsxMTExIDExNzUgMTFBRDtENTQyOzExMTEgMTE3NSAxMUFEOworRDU0MztENTQzOzExMTEgMTE3NSAxMUFFO0Q1NDM7MTExMSAxMTc1IDExQUU7CitENTQ0O0Q1NDQ7MTExMSAxMTc1IDExQUY7RDU0NDsxMTExIDExNzUgMTFBRjsKK0Q1NDU7RDU0NTsxMTExIDExNzUgMTFCMDtENTQ1OzExMTEgMTE3NSAxMUIwOworRDU0NjtENTQ2OzExMTEgMTE3NSAxMUIxO0Q1NDY7MTExMSAxMTc1IDExQjE7CitENTQ3O0Q1NDc7MTExMSAxMTc1IDExQjI7RDU0NzsxMTExIDExNzUgMTFCMjsKK0Q1NDg7RDU0ODsxMTExIDExNzUgMTFCMztENTQ4OzExMTEgMTE3NSAxMUIzOworRDU0OTtENTQ5OzExMTEgMTE3NSAxMUI0O0Q1NDk7MTExMSAxMTc1IDExQjQ7CitENTRBO0Q1NEE7MTExMSAxMTc1IDExQjU7RDU0QTsxMTExIDExNzUgMTFCNTsKK0Q1NEI7RDU0QjsxMTExIDExNzUgMTFCNjtENTRCOzExMTEgMTE3NSAxMUI2OworRDU0QztENTRDOzExMTEgMTE3NSAxMUI3O0Q1NEM7MTExMSAxMTc1IDExQjc7CitENTREO0Q1NEQ7MTExMSAxMTc1IDExQjg7RDU0RDsxMTExIDExNzUgMTFCODsKK0Q1NEU7RDU0RTsxMTExIDExNzUgMTFCOTtENTRFOzExMTEgMTE3NSAxMUI5OworRDU0RjtENTRGOzExMTEgMTE3NSAxMUJBO0Q1NEY7MTExMSAxMTc1IDExQkE7CitENTUwO0Q1NTA7MTExMSAxMTc1IDExQkI7RDU1MDsxMTExIDExNzUgMTFCQjsKK0Q1NTE7RDU1MTsxMTExIDExNzUgMTFCQztENTUxOzExMTEgMTE3NSAxMUJDOworRDU1MjtENTUyOzExMTEgMTE3NSAxMUJEO0Q1NTI7MTExMSAxMTc1IDExQkQ7CitENTUzO0Q1NTM7MTExMSAxMTc1IDExQkU7RDU1MzsxMTExIDExNzUgMTFCRTsKK0Q1NTQ7RDU1NDsxMTExIDExNzUgMTFCRjtENTU0OzExMTEgMTE3NSAxMUJGOworRDU1NTtENTU1OzExMTEgMTE3NSAxMUMwO0Q1NTU7MTExMSAxMTc1IDExQzA7CitENTU2O0Q1NTY7MTExMSAxMTc1IDExQzE7RDU1NjsxMTExIDExNzUgMTFDMTsKK0Q1NTc7RDU1NzsxMTExIDExNzUgMTFDMjtENTU3OzExMTEgMTE3NSAxMUMyOworRDU1ODtENTU4OzExMTIgMTE2MTtENTU4OzExMTIgMTE2MTsKK0Q1NTk7RDU1OTsxMTEyIDExNjEgMTFBODtENTU5OzExMTIgMTE2MSAxMUE4OworRDU1QTtENTVBOzExMTIgMTE2MSAxMUE5O0Q1NUE7MTExMiAxMTYxIDExQTk7CitENTVCO0Q1NUI7MTExMiAxMTYxIDExQUE7RDU1QjsxMTEyIDExNjEgMTFBQTsKK0Q1NUM7RDU1QzsxMTEyIDExNjEgMTFBQjtENTVDOzExMTIgMTE2MSAxMUFCOworRDU1RDtENTVEOzExMTIgMTE2MSAxMUFDO0Q1NUQ7MTExMiAxMTYxIDExQUM7CitENTVFO0Q1NUU7MTExMiAxMTYxIDExQUQ7RDU1RTsxMTEyIDExNjEgMTFBRDsKK0Q1NUY7RDU1RjsxMTEyIDExNjEgMTFBRTtENTVGOzExMTIgMTE2MSAxMUFFOworRDU2MDtENTYwOzExMTIgMTE2MSAxMUFGO0Q1NjA7MTExMiAxMTYxIDExQUY7CitENTYxO0Q1NjE7MTExMiAxMTYxIDExQjA7RDU2MTsxMTEyIDExNjEgMTFCMDsKK0Q1NjI7RDU2MjsxMTEyIDExNjEgMTFCMTtENTYyOzExMTIgMTE2MSAxMUIxOworRDU2MztENTYzOzExMTIgMTE2MSAxMUIyO0Q1NjM7MTExMiAxMTYxIDExQjI7CitENTY0O0Q1NjQ7MTExMiAxMTYxIDExQjM7RDU2NDsxMTEyIDExNjEgMTFCMzsKK0Q1NjU7RDU2NTsxMTEyIDExNjEgMTFCNDtENTY1OzExMTIgMTE2MSAxMUI0OworRDU2NjtENTY2OzExMTIgMTE2MSAxMUI1O0Q1NjY7MTExMiAxMTYxIDExQjU7CitENTY3O0Q1Njc7MTExMiAxMTYxIDExQjY7RDU2NzsxMTEyIDExNjEgMTFCNjsKK0Q1Njg7RDU2ODsxMTEyIDExNjEgMTFCNztENTY4OzExMTIgMTE2MSAxMUI3OworRDU2OTtENTY5OzExMTIgMTE2MSAxMUI4O0Q1Njk7MTExMiAxMTYxIDExQjg7CitENTZBO0Q1NkE7MTExMiAxMTYxIDExQjk7RDU2QTsxMTEyIDExNjEgMTFCOTsKK0Q1NkI7RDU2QjsxMTEyIDExNjEgMTFCQTtENTZCOzExMTIgMTE2MSAxMUJBOworRDU2QztENTZDOzExMTIgMTE2MSAxMUJCO0Q1NkM7MTExMiAxMTYxIDExQkI7CitENTZEO0Q1NkQ7MTExMiAxMTYxIDExQkM7RDU2RDsxMTEyIDExNjEgMTFCQzsKK0Q1NkU7RDU2RTsxMTEyIDExNjEgMTFCRDtENTZFOzExMTIgMTE2MSAxMUJEOworRDU2RjtENTZGOzExMTIgMTE2MSAxMUJFO0Q1NkY7MTExMiAxMTYxIDExQkU7CitENTcwO0Q1NzA7MTExMiAxMTYxIDExQkY7RDU3MDsxMTEyIDExNjEgMTFCRjsKK0Q1NzE7RDU3MTsxMTEyIDExNjEgMTFDMDtENTcxOzExMTIgMTE2MSAxMUMwOworRDU3MjtENTcyOzExMTIgMTE2MSAxMUMxO0Q1NzI7MTExMiAxMTYxIDExQzE7CitENTczO0Q1NzM7MTExMiAxMTYxIDExQzI7RDU3MzsxMTEyIDExNjEgMTFDMjsKK0Q1NzQ7RDU3NDsxMTEyIDExNjI7RDU3NDsxMTEyIDExNjI7CitENTc1O0Q1NzU7MTExMiAxMTYyIDExQTg7RDU3NTsxMTEyIDExNjIgMTFBODsKK0Q1NzY7RDU3NjsxMTEyIDExNjIgMTFBOTtENTc2OzExMTIgMTE2MiAxMUE5OworRDU3NztENTc3OzExMTIgMTE2MiAxMUFBO0Q1Nzc7MTExMiAxMTYyIDExQUE7CitENTc4O0Q1Nzg7MTExMiAxMTYyIDExQUI7RDU3ODsxMTEyIDExNjIgMTFBQjsKK0Q1Nzk7RDU3OTsxMTEyIDExNjIgMTFBQztENTc5OzExMTIgMTE2MiAxMUFDOworRDU3QTtENTdBOzExMTIgMTE2MiAxMUFEO0Q1N0E7MTExMiAxMTYyIDExQUQ7CitENTdCO0Q1N0I7MTExMiAxMTYyIDExQUU7RDU3QjsxMTEyIDExNjIgMTFBRTsKK0Q1N0M7RDU3QzsxMTEyIDExNjIgMTFBRjtENTdDOzExMTIgMTE2MiAxMUFGOworRDU3RDtENTdEOzExMTIgMTE2MiAxMUIwO0Q1N0Q7MTExMiAxMTYyIDExQjA7CitENTdFO0Q1N0U7MTExMiAxMTYyIDExQjE7RDU3RTsxMTEyIDExNjIgMTFCMTsKK0Q1N0Y7RDU3RjsxMTEyIDExNjIgMTFCMjtENTdGOzExMTIgMTE2MiAxMUIyOworRDU4MDtENTgwOzExMTIgMTE2MiAxMUIzO0Q1ODA7MTExMiAxMTYyIDExQjM7CitENTgxO0Q1ODE7MTExMiAxMTYyIDExQjQ7RDU4MTsxMTEyIDExNjIgMTFCNDsKK0Q1ODI7RDU4MjsxMTEyIDExNjIgMTFCNTtENTgyOzExMTIgMTE2MiAxMUI1OworRDU4MztENTgzOzExMTIgMTE2MiAxMUI2O0Q1ODM7MTExMiAxMTYyIDExQjY7CitENTg0O0Q1ODQ7MTExMiAxMTYyIDExQjc7RDU4NDsxMTEyIDExNjIgMTFCNzsKK0Q1ODU7RDU4NTsxMTEyIDExNjIgMTFCODtENTg1OzExMTIgMTE2MiAxMUI4OworRDU4NjtENTg2OzExMTIgMTE2MiAxMUI5O0Q1ODY7MTExMiAxMTYyIDExQjk7CitENTg3O0Q1ODc7MTExMiAxMTYyIDExQkE7RDU4NzsxMTEyIDExNjIgMTFCQTsKK0Q1ODg7RDU4ODsxMTEyIDExNjIgMTFCQjtENTg4OzExMTIgMTE2MiAxMUJCOworRDU4OTtENTg5OzExMTIgMTE2MiAxMUJDO0Q1ODk7MTExMiAxMTYyIDExQkM7CitENThBO0Q1OEE7MTExMiAxMTYyIDExQkQ7RDU4QTsxMTEyIDExNjIgMTFCRDsKK0Q1OEI7RDU4QjsxMTEyIDExNjIgMTFCRTtENThCOzExMTIgMTE2MiAxMUJFOworRDU4QztENThDOzExMTIgMTE2MiAxMUJGO0Q1OEM7MTExMiAxMTYyIDExQkY7CitENThEO0Q1OEQ7MTExMiAxMTYyIDExQzA7RDU4RDsxMTEyIDExNjIgMTFDMDsKK0Q1OEU7RDU4RTsxMTEyIDExNjIgMTFDMTtENThFOzExMTIgMTE2MiAxMUMxOworRDU4RjtENThGOzExMTIgMTE2MiAxMUMyO0Q1OEY7MTExMiAxMTYyIDExQzI7CitENTkwO0Q1OTA7MTExMiAxMTYzO0Q1OTA7MTExMiAxMTYzOworRDU5MTtENTkxOzExMTIgMTE2MyAxMUE4O0Q1OTE7MTExMiAxMTYzIDExQTg7CitENTkyO0Q1OTI7MTExMiAxMTYzIDExQTk7RDU5MjsxMTEyIDExNjMgMTFBOTsKK0Q1OTM7RDU5MzsxMTEyIDExNjMgMTFBQTtENTkzOzExMTIgMTE2MyAxMUFBOworRDU5NDtENTk0OzExMTIgMTE2MyAxMUFCO0Q1OTQ7MTExMiAxMTYzIDExQUI7CitENTk1O0Q1OTU7MTExMiAxMTYzIDExQUM7RDU5NTsxMTEyIDExNjMgMTFBQzsKK0Q1OTY7RDU5NjsxMTEyIDExNjMgMTFBRDtENTk2OzExMTIgMTE2MyAxMUFEOworRDU5NztENTk3OzExMTIgMTE2MyAxMUFFO0Q1OTc7MTExMiAxMTYzIDExQUU7CitENTk4O0Q1OTg7MTExMiAxMTYzIDExQUY7RDU5ODsxMTEyIDExNjMgMTFBRjsKK0Q1OTk7RDU5OTsxMTEyIDExNjMgMTFCMDtENTk5OzExMTIgMTE2MyAxMUIwOworRDU5QTtENTlBOzExMTIgMTE2MyAxMUIxO0Q1OUE7MTExMiAxMTYzIDExQjE7CitENTlCO0Q1OUI7MTExMiAxMTYzIDExQjI7RDU5QjsxMTEyIDExNjMgMTFCMjsKK0Q1OUM7RDU5QzsxMTEyIDExNjMgMTFCMztENTlDOzExMTIgMTE2MyAxMUIzOworRDU5RDtENTlEOzExMTIgMTE2MyAxMUI0O0Q1OUQ7MTExMiAxMTYzIDExQjQ7CitENTlFO0Q1OUU7MTExMiAxMTYzIDExQjU7RDU5RTsxMTEyIDExNjMgMTFCNTsKK0Q1OUY7RDU5RjsxMTEyIDExNjMgMTFCNjtENTlGOzExMTIgMTE2MyAxMUI2OworRDVBMDtENUEwOzExMTIgMTE2MyAxMUI3O0Q1QTA7MTExMiAxMTYzIDExQjc7CitENUExO0Q1QTE7MTExMiAxMTYzIDExQjg7RDVBMTsxMTEyIDExNjMgMTFCODsKK0Q1QTI7RDVBMjsxMTEyIDExNjMgMTFCOTtENUEyOzExMTIgMTE2MyAxMUI5OworRDVBMztENUEzOzExMTIgMTE2MyAxMUJBO0Q1QTM7MTExMiAxMTYzIDExQkE7CitENUE0O0Q1QTQ7MTExMiAxMTYzIDExQkI7RDVBNDsxMTEyIDExNjMgMTFCQjsKK0Q1QTU7RDVBNTsxMTEyIDExNjMgMTFCQztENUE1OzExMTIgMTE2MyAxMUJDOworRDVBNjtENUE2OzExMTIgMTE2MyAxMUJEO0Q1QTY7MTExMiAxMTYzIDExQkQ7CitENUE3O0Q1QTc7MTExMiAxMTYzIDExQkU7RDVBNzsxMTEyIDExNjMgMTFCRTsKK0Q1QTg7RDVBODsxMTEyIDExNjMgMTFCRjtENUE4OzExMTIgMTE2MyAxMUJGOworRDVBOTtENUE5OzExMTIgMTE2MyAxMUMwO0Q1QTk7MTExMiAxMTYzIDExQzA7CitENUFBO0Q1QUE7MTExMiAxMTYzIDExQzE7RDVBQTsxMTEyIDExNjMgMTFDMTsKK0Q1QUI7RDVBQjsxMTEyIDExNjMgMTFDMjtENUFCOzExMTIgMTE2MyAxMUMyOworRDVBQztENUFDOzExMTIgMTE2NDtENUFDOzExMTIgMTE2NDsKK0Q1QUQ7RDVBRDsxMTEyIDExNjQgMTFBODtENUFEOzExMTIgMTE2NCAxMUE4OworRDVBRTtENUFFOzExMTIgMTE2NCAxMUE5O0Q1QUU7MTExMiAxMTY0IDExQTk7CitENUFGO0Q1QUY7MTExMiAxMTY0IDExQUE7RDVBRjsxMTEyIDExNjQgMTFBQTsKK0Q1QjA7RDVCMDsxMTEyIDExNjQgMTFBQjtENUIwOzExMTIgMTE2NCAxMUFCOworRDVCMTtENUIxOzExMTIgMTE2NCAxMUFDO0Q1QjE7MTExMiAxMTY0IDExQUM7CitENUIyO0Q1QjI7MTExMiAxMTY0IDExQUQ7RDVCMjsxMTEyIDExNjQgMTFBRDsKK0Q1QjM7RDVCMzsxMTEyIDExNjQgMTFBRTtENUIzOzExMTIgMTE2NCAxMUFFOworRDVCNDtENUI0OzExMTIgMTE2NCAxMUFGO0Q1QjQ7MTExMiAxMTY0IDExQUY7CitENUI1O0Q1QjU7MTExMiAxMTY0IDExQjA7RDVCNTsxMTEyIDExNjQgMTFCMDsKK0Q1QjY7RDVCNjsxMTEyIDExNjQgMTFCMTtENUI2OzExMTIgMTE2NCAxMUIxOworRDVCNztENUI3OzExMTIgMTE2NCAxMUIyO0Q1Qjc7MTExMiAxMTY0IDExQjI7CitENUI4O0Q1Qjg7MTExMiAxMTY0IDExQjM7RDVCODsxMTEyIDExNjQgMTFCMzsKK0Q1Qjk7RDVCOTsxMTEyIDExNjQgMTFCNDtENUI5OzExMTIgMTE2NCAxMUI0OworRDVCQTtENUJBOzExMTIgMTE2NCAxMUI1O0Q1QkE7MTExMiAxMTY0IDExQjU7CitENUJCO0Q1QkI7MTExMiAxMTY0IDExQjY7RDVCQjsxMTEyIDExNjQgMTFCNjsKK0Q1QkM7RDVCQzsxMTEyIDExNjQgMTFCNztENUJDOzExMTIgMTE2NCAxMUI3OworRDVCRDtENUJEOzExMTIgMTE2NCAxMUI4O0Q1QkQ7MTExMiAxMTY0IDExQjg7CitENUJFO0Q1QkU7MTExMiAxMTY0IDExQjk7RDVCRTsxMTEyIDExNjQgMTFCOTsKK0Q1QkY7RDVCRjsxMTEyIDExNjQgMTFCQTtENUJGOzExMTIgMTE2NCAxMUJBOworRDVDMDtENUMwOzExMTIgMTE2NCAxMUJCO0Q1QzA7MTExMiAxMTY0IDExQkI7CitENUMxO0Q1QzE7MTExMiAxMTY0IDExQkM7RDVDMTsxMTEyIDExNjQgMTFCQzsKK0Q1QzI7RDVDMjsxMTEyIDExNjQgMTFCRDtENUMyOzExMTIgMTE2NCAxMUJEOworRDVDMztENUMzOzExMTIgMTE2NCAxMUJFO0Q1QzM7MTExMiAxMTY0IDExQkU7CitENUM0O0Q1QzQ7MTExMiAxMTY0IDExQkY7RDVDNDsxMTEyIDExNjQgMTFCRjsKK0Q1QzU7RDVDNTsxMTEyIDExNjQgMTFDMDtENUM1OzExMTIgMTE2NCAxMUMwOworRDVDNjtENUM2OzExMTIgMTE2NCAxMUMxO0Q1QzY7MTExMiAxMTY0IDExQzE7CitENUM3O0Q1Qzc7MTExMiAxMTY0IDExQzI7RDVDNzsxMTEyIDExNjQgMTFDMjsKK0Q1Qzg7RDVDODsxMTEyIDExNjU7RDVDODsxMTEyIDExNjU7CitENUM5O0Q1Qzk7MTExMiAxMTY1IDExQTg7RDVDOTsxMTEyIDExNjUgMTFBODsKK0Q1Q0E7RDVDQTsxMTEyIDExNjUgMTFBOTtENUNBOzExMTIgMTE2NSAxMUE5OworRDVDQjtENUNCOzExMTIgMTE2NSAxMUFBO0Q1Q0I7MTExMiAxMTY1IDExQUE7CitENUNDO0Q1Q0M7MTExMiAxMTY1IDExQUI7RDVDQzsxMTEyIDExNjUgMTFBQjsKK0Q1Q0Q7RDVDRDsxMTEyIDExNjUgMTFBQztENUNEOzExMTIgMTE2NSAxMUFDOworRDVDRTtENUNFOzExMTIgMTE2NSAxMUFEO0Q1Q0U7MTExMiAxMTY1IDExQUQ7CitENUNGO0Q1Q0Y7MTExMiAxMTY1IDExQUU7RDVDRjsxMTEyIDExNjUgMTFBRTsKK0Q1RDA7RDVEMDsxMTEyIDExNjUgMTFBRjtENUQwOzExMTIgMTE2NSAxMUFGOworRDVEMTtENUQxOzExMTIgMTE2NSAxMUIwO0Q1RDE7MTExMiAxMTY1IDExQjA7CitENUQyO0Q1RDI7MTExMiAxMTY1IDExQjE7RDVEMjsxMTEyIDExNjUgMTFCMTsKK0Q1RDM7RDVEMzsxMTEyIDExNjUgMTFCMjtENUQzOzExMTIgMTE2NSAxMUIyOworRDVENDtENUQ0OzExMTIgMTE2NSAxMUIzO0Q1RDQ7MTExMiAxMTY1IDExQjM7CitENUQ1O0Q1RDU7MTExMiAxMTY1IDExQjQ7RDVENTsxMTEyIDExNjUgMTFCNDsKK0Q1RDY7RDVENjsxMTEyIDExNjUgMTFCNTtENUQ2OzExMTIgMTE2NSAxMUI1OworRDVENztENUQ3OzExMTIgMTE2NSAxMUI2O0Q1RDc7MTExMiAxMTY1IDExQjY7CitENUQ4O0Q1RDg7MTExMiAxMTY1IDExQjc7RDVEODsxMTEyIDExNjUgMTFCNzsKK0Q1RDk7RDVEOTsxMTEyIDExNjUgMTFCODtENUQ5OzExMTIgMTE2NSAxMUI4OworRDVEQTtENURBOzExMTIgMTE2NSAxMUI5O0Q1REE7MTExMiAxMTY1IDExQjk7CitENURCO0Q1REI7MTExMiAxMTY1IDExQkE7RDVEQjsxMTEyIDExNjUgMTFCQTsKK0Q1REM7RDVEQzsxMTEyIDExNjUgMTFCQjtENURDOzExMTIgMTE2NSAxMUJCOworRDVERDtENUREOzExMTIgMTE2NSAxMUJDO0Q1REQ7MTExMiAxMTY1IDExQkM7CitENURFO0Q1REU7MTExMiAxMTY1IDExQkQ7RDVERTsxMTEyIDExNjUgMTFCRDsKK0Q1REY7RDVERjsxMTEyIDExNjUgMTFCRTtENURGOzExMTIgMTE2NSAxMUJFOworRDVFMDtENUUwOzExMTIgMTE2NSAxMUJGO0Q1RTA7MTExMiAxMTY1IDExQkY7CitENUUxO0Q1RTE7MTExMiAxMTY1IDExQzA7RDVFMTsxMTEyIDExNjUgMTFDMDsKK0Q1RTI7RDVFMjsxMTEyIDExNjUgMTFDMTtENUUyOzExMTIgMTE2NSAxMUMxOworRDVFMztENUUzOzExMTIgMTE2NSAxMUMyO0Q1RTM7MTExMiAxMTY1IDExQzI7CitENUU0O0Q1RTQ7MTExMiAxMTY2O0Q1RTQ7MTExMiAxMTY2OworRDVFNTtENUU1OzExMTIgMTE2NiAxMUE4O0Q1RTU7MTExMiAxMTY2IDExQTg7CitENUU2O0Q1RTY7MTExMiAxMTY2IDExQTk7RDVFNjsxMTEyIDExNjYgMTFBOTsKK0Q1RTc7RDVFNzsxMTEyIDExNjYgMTFBQTtENUU3OzExMTIgMTE2NiAxMUFBOworRDVFODtENUU4OzExMTIgMTE2NiAxMUFCO0Q1RTg7MTExMiAxMTY2IDExQUI7CitENUU5O0Q1RTk7MTExMiAxMTY2IDExQUM7RDVFOTsxMTEyIDExNjYgMTFBQzsKK0Q1RUE7RDVFQTsxMTEyIDExNjYgMTFBRDtENUVBOzExMTIgMTE2NiAxMUFEOworRDVFQjtENUVCOzExMTIgMTE2NiAxMUFFO0Q1RUI7MTExMiAxMTY2IDExQUU7CitENUVDO0Q1RUM7MTExMiAxMTY2IDExQUY7RDVFQzsxMTEyIDExNjYgMTFBRjsKK0Q1RUQ7RDVFRDsxMTEyIDExNjYgMTFCMDtENUVEOzExMTIgMTE2NiAxMUIwOworRDVFRTtENUVFOzExMTIgMTE2NiAxMUIxO0Q1RUU7MTExMiAxMTY2IDExQjE7CitENUVGO0Q1RUY7MTExMiAxMTY2IDExQjI7RDVFRjsxMTEyIDExNjYgMTFCMjsKK0Q1RjA7RDVGMDsxMTEyIDExNjYgMTFCMztENUYwOzExMTIgMTE2NiAxMUIzOworRDVGMTtENUYxOzExMTIgMTE2NiAxMUI0O0Q1RjE7MTExMiAxMTY2IDExQjQ7CitENUYyO0Q1RjI7MTExMiAxMTY2IDExQjU7RDVGMjsxMTEyIDExNjYgMTFCNTsKK0Q1RjM7RDVGMzsxMTEyIDExNjYgMTFCNjtENUYzOzExMTIgMTE2NiAxMUI2OworRDVGNDtENUY0OzExMTIgMTE2NiAxMUI3O0Q1RjQ7MTExMiAxMTY2IDExQjc7CitENUY1O0Q1RjU7MTExMiAxMTY2IDExQjg7RDVGNTsxMTEyIDExNjYgMTFCODsKK0Q1RjY7RDVGNjsxMTEyIDExNjYgMTFCOTtENUY2OzExMTIgMTE2NiAxMUI5OworRDVGNztENUY3OzExMTIgMTE2NiAxMUJBO0Q1Rjc7MTExMiAxMTY2IDExQkE7CitENUY4O0Q1Rjg7MTExMiAxMTY2IDExQkI7RDVGODsxMTEyIDExNjYgMTFCQjsKK0Q1Rjk7RDVGOTsxMTEyIDExNjYgMTFCQztENUY5OzExMTIgMTE2NiAxMUJDOworRDVGQTtENUZBOzExMTIgMTE2NiAxMUJEO0Q1RkE7MTExMiAxMTY2IDExQkQ7CitENUZCO0Q1RkI7MTExMiAxMTY2IDExQkU7RDVGQjsxMTEyIDExNjYgMTFCRTsKK0Q1RkM7RDVGQzsxMTEyIDExNjYgMTFCRjtENUZDOzExMTIgMTE2NiAxMUJGOworRDVGRDtENUZEOzExMTIgMTE2NiAxMUMwO0Q1RkQ7MTExMiAxMTY2IDExQzA7CitENUZFO0Q1RkU7MTExMiAxMTY2IDExQzE7RDVGRTsxMTEyIDExNjYgMTFDMTsKK0Q1RkY7RDVGRjsxMTEyIDExNjYgMTFDMjtENUZGOzExMTIgMTE2NiAxMUMyOworRDYwMDtENjAwOzExMTIgMTE2NztENjAwOzExMTIgMTE2NzsKK0Q2MDE7RDYwMTsxMTEyIDExNjcgMTFBODtENjAxOzExMTIgMTE2NyAxMUE4OworRDYwMjtENjAyOzExMTIgMTE2NyAxMUE5O0Q2MDI7MTExMiAxMTY3IDExQTk7CitENjAzO0Q2MDM7MTExMiAxMTY3IDExQUE7RDYwMzsxMTEyIDExNjcgMTFBQTsKK0Q2MDQ7RDYwNDsxMTEyIDExNjcgMTFBQjtENjA0OzExMTIgMTE2NyAxMUFCOworRDYwNTtENjA1OzExMTIgMTE2NyAxMUFDO0Q2MDU7MTExMiAxMTY3IDExQUM7CitENjA2O0Q2MDY7MTExMiAxMTY3IDExQUQ7RDYwNjsxMTEyIDExNjcgMTFBRDsKK0Q2MDc7RDYwNzsxMTEyIDExNjcgMTFBRTtENjA3OzExMTIgMTE2NyAxMUFFOworRDYwODtENjA4OzExMTIgMTE2NyAxMUFGO0Q2MDg7MTExMiAxMTY3IDExQUY7CitENjA5O0Q2MDk7MTExMiAxMTY3IDExQjA7RDYwOTsxMTEyIDExNjcgMTFCMDsKK0Q2MEE7RDYwQTsxMTEyIDExNjcgMTFCMTtENjBBOzExMTIgMTE2NyAxMUIxOworRDYwQjtENjBCOzExMTIgMTE2NyAxMUIyO0Q2MEI7MTExMiAxMTY3IDExQjI7CitENjBDO0Q2MEM7MTExMiAxMTY3IDExQjM7RDYwQzsxMTEyIDExNjcgMTFCMzsKK0Q2MEQ7RDYwRDsxMTEyIDExNjcgMTFCNDtENjBEOzExMTIgMTE2NyAxMUI0OworRDYwRTtENjBFOzExMTIgMTE2NyAxMUI1O0Q2MEU7MTExMiAxMTY3IDExQjU7CitENjBGO0Q2MEY7MTExMiAxMTY3IDExQjY7RDYwRjsxMTEyIDExNjcgMTFCNjsKK0Q2MTA7RDYxMDsxMTEyIDExNjcgMTFCNztENjEwOzExMTIgMTE2NyAxMUI3OworRDYxMTtENjExOzExMTIgMTE2NyAxMUI4O0Q2MTE7MTExMiAxMTY3IDExQjg7CitENjEyO0Q2MTI7MTExMiAxMTY3IDExQjk7RDYxMjsxMTEyIDExNjcgMTFCOTsKK0Q2MTM7RDYxMzsxMTEyIDExNjcgMTFCQTtENjEzOzExMTIgMTE2NyAxMUJBOworRDYxNDtENjE0OzExMTIgMTE2NyAxMUJCO0Q2MTQ7MTExMiAxMTY3IDExQkI7CitENjE1O0Q2MTU7MTExMiAxMTY3IDExQkM7RDYxNTsxMTEyIDExNjcgMTFCQzsKK0Q2MTY7RDYxNjsxMTEyIDExNjcgMTFCRDtENjE2OzExMTIgMTE2NyAxMUJEOworRDYxNztENjE3OzExMTIgMTE2NyAxMUJFO0Q2MTc7MTExMiAxMTY3IDExQkU7CitENjE4O0Q2MTg7MTExMiAxMTY3IDExQkY7RDYxODsxMTEyIDExNjcgMTFCRjsKK0Q2MTk7RDYxOTsxMTEyIDExNjcgMTFDMDtENjE5OzExMTIgMTE2NyAxMUMwOworRDYxQTtENjFBOzExMTIgMTE2NyAxMUMxO0Q2MUE7MTExMiAxMTY3IDExQzE7CitENjFCO0Q2MUI7MTExMiAxMTY3IDExQzI7RDYxQjsxMTEyIDExNjcgMTFDMjsKK0Q2MUM7RDYxQzsxMTEyIDExNjg7RDYxQzsxMTEyIDExNjg7CitENjFEO0Q2MUQ7MTExMiAxMTY4IDExQTg7RDYxRDsxMTEyIDExNjggMTFBODsKK0Q2MUU7RDYxRTsxMTEyIDExNjggMTFBOTtENjFFOzExMTIgMTE2OCAxMUE5OworRDYxRjtENjFGOzExMTIgMTE2OCAxMUFBO0Q2MUY7MTExMiAxMTY4IDExQUE7CitENjIwO0Q2MjA7MTExMiAxMTY4IDExQUI7RDYyMDsxMTEyIDExNjggMTFBQjsKK0Q2MjE7RDYyMTsxMTEyIDExNjggMTFBQztENjIxOzExMTIgMTE2OCAxMUFDOworRDYyMjtENjIyOzExMTIgMTE2OCAxMUFEO0Q2MjI7MTExMiAxMTY4IDExQUQ7CitENjIzO0Q2MjM7MTExMiAxMTY4IDExQUU7RDYyMzsxMTEyIDExNjggMTFBRTsKK0Q2MjQ7RDYyNDsxMTEyIDExNjggMTFBRjtENjI0OzExMTIgMTE2OCAxMUFGOworRDYyNTtENjI1OzExMTIgMTE2OCAxMUIwO0Q2MjU7MTExMiAxMTY4IDExQjA7CitENjI2O0Q2MjY7MTExMiAxMTY4IDExQjE7RDYyNjsxMTEyIDExNjggMTFCMTsKK0Q2Mjc7RDYyNzsxMTEyIDExNjggMTFCMjtENjI3OzExMTIgMTE2OCAxMUIyOworRDYyODtENjI4OzExMTIgMTE2OCAxMUIzO0Q2Mjg7MTExMiAxMTY4IDExQjM7CitENjI5O0Q2Mjk7MTExMiAxMTY4IDExQjQ7RDYyOTsxMTEyIDExNjggMTFCNDsKK0Q2MkE7RDYyQTsxMTEyIDExNjggMTFCNTtENjJBOzExMTIgMTE2OCAxMUI1OworRDYyQjtENjJCOzExMTIgMTE2OCAxMUI2O0Q2MkI7MTExMiAxMTY4IDExQjY7CitENjJDO0Q2MkM7MTExMiAxMTY4IDExQjc7RDYyQzsxMTEyIDExNjggMTFCNzsKK0Q2MkQ7RDYyRDsxMTEyIDExNjggMTFCODtENjJEOzExMTIgMTE2OCAxMUI4OworRDYyRTtENjJFOzExMTIgMTE2OCAxMUI5O0Q2MkU7MTExMiAxMTY4IDExQjk7CitENjJGO0Q2MkY7MTExMiAxMTY4IDExQkE7RDYyRjsxMTEyIDExNjggMTFCQTsKK0Q2MzA7RDYzMDsxMTEyIDExNjggMTFCQjtENjMwOzExMTIgMTE2OCAxMUJCOworRDYzMTtENjMxOzExMTIgMTE2OCAxMUJDO0Q2MzE7MTExMiAxMTY4IDExQkM7CitENjMyO0Q2MzI7MTExMiAxMTY4IDExQkQ7RDYzMjsxMTEyIDExNjggMTFCRDsKK0Q2MzM7RDYzMzsxMTEyIDExNjggMTFCRTtENjMzOzExMTIgMTE2OCAxMUJFOworRDYzNDtENjM0OzExMTIgMTE2OCAxMUJGO0Q2MzQ7MTExMiAxMTY4IDExQkY7CitENjM1O0Q2MzU7MTExMiAxMTY4IDExQzA7RDYzNTsxMTEyIDExNjggMTFDMDsKK0Q2MzY7RDYzNjsxMTEyIDExNjggMTFDMTtENjM2OzExMTIgMTE2OCAxMUMxOworRDYzNztENjM3OzExMTIgMTE2OCAxMUMyO0Q2Mzc7MTExMiAxMTY4IDExQzI7CitENjM4O0Q2Mzg7MTExMiAxMTY5O0Q2Mzg7MTExMiAxMTY5OworRDYzOTtENjM5OzExMTIgMTE2OSAxMUE4O0Q2Mzk7MTExMiAxMTY5IDExQTg7CitENjNBO0Q2M0E7MTExMiAxMTY5IDExQTk7RDYzQTsxMTEyIDExNjkgMTFBOTsKK0Q2M0I7RDYzQjsxMTEyIDExNjkgMTFBQTtENjNCOzExMTIgMTE2OSAxMUFBOworRDYzQztENjNDOzExMTIgMTE2OSAxMUFCO0Q2M0M7MTExMiAxMTY5IDExQUI7CitENjNEO0Q2M0Q7MTExMiAxMTY5IDExQUM7RDYzRDsxMTEyIDExNjkgMTFBQzsKK0Q2M0U7RDYzRTsxMTEyIDExNjkgMTFBRDtENjNFOzExMTIgMTE2OSAxMUFEOworRDYzRjtENjNGOzExMTIgMTE2OSAxMUFFO0Q2M0Y7MTExMiAxMTY5IDExQUU7CitENjQwO0Q2NDA7MTExMiAxMTY5IDExQUY7RDY0MDsxMTEyIDExNjkgMTFBRjsKK0Q2NDE7RDY0MTsxMTEyIDExNjkgMTFCMDtENjQxOzExMTIgMTE2OSAxMUIwOworRDY0MjtENjQyOzExMTIgMTE2OSAxMUIxO0Q2NDI7MTExMiAxMTY5IDExQjE7CitENjQzO0Q2NDM7MTExMiAxMTY5IDExQjI7RDY0MzsxMTEyIDExNjkgMTFCMjsKK0Q2NDQ7RDY0NDsxMTEyIDExNjkgMTFCMztENjQ0OzExMTIgMTE2OSAxMUIzOworRDY0NTtENjQ1OzExMTIgMTE2OSAxMUI0O0Q2NDU7MTExMiAxMTY5IDExQjQ7CitENjQ2O0Q2NDY7MTExMiAxMTY5IDExQjU7RDY0NjsxMTEyIDExNjkgMTFCNTsKK0Q2NDc7RDY0NzsxMTEyIDExNjkgMTFCNjtENjQ3OzExMTIgMTE2OSAxMUI2OworRDY0ODtENjQ4OzExMTIgMTE2OSAxMUI3O0Q2NDg7MTExMiAxMTY5IDExQjc7CitENjQ5O0Q2NDk7MTExMiAxMTY5IDExQjg7RDY0OTsxMTEyIDExNjkgMTFCODsKK0Q2NEE7RDY0QTsxMTEyIDExNjkgMTFCOTtENjRBOzExMTIgMTE2OSAxMUI5OworRDY0QjtENjRCOzExMTIgMTE2OSAxMUJBO0Q2NEI7MTExMiAxMTY5IDExQkE7CitENjRDO0Q2NEM7MTExMiAxMTY5IDExQkI7RDY0QzsxMTEyIDExNjkgMTFCQjsKK0Q2NEQ7RDY0RDsxMTEyIDExNjkgMTFCQztENjREOzExMTIgMTE2OSAxMUJDOworRDY0RTtENjRFOzExMTIgMTE2OSAxMUJEO0Q2NEU7MTExMiAxMTY5IDExQkQ7CitENjRGO0Q2NEY7MTExMiAxMTY5IDExQkU7RDY0RjsxMTEyIDExNjkgMTFCRTsKK0Q2NTA7RDY1MDsxMTEyIDExNjkgMTFCRjtENjUwOzExMTIgMTE2OSAxMUJGOworRDY1MTtENjUxOzExMTIgMTE2OSAxMUMwO0Q2NTE7MTExMiAxMTY5IDExQzA7CitENjUyO0Q2NTI7MTExMiAxMTY5IDExQzE7RDY1MjsxMTEyIDExNjkgMTFDMTsKK0Q2NTM7RDY1MzsxMTEyIDExNjkgMTFDMjtENjUzOzExMTIgMTE2OSAxMUMyOworRDY1NDtENjU0OzExMTIgMTE2QTtENjU0OzExMTIgMTE2QTsKK0Q2NTU7RDY1NTsxMTEyIDExNkEgMTFBODtENjU1OzExMTIgMTE2QSAxMUE4OworRDY1NjtENjU2OzExMTIgMTE2QSAxMUE5O0Q2NTY7MTExMiAxMTZBIDExQTk7CitENjU3O0Q2NTc7MTExMiAxMTZBIDExQUE7RDY1NzsxMTEyIDExNkEgMTFBQTsKK0Q2NTg7RDY1ODsxMTEyIDExNkEgMTFBQjtENjU4OzExMTIgMTE2QSAxMUFCOworRDY1OTtENjU5OzExMTIgMTE2QSAxMUFDO0Q2NTk7MTExMiAxMTZBIDExQUM7CitENjVBO0Q2NUE7MTExMiAxMTZBIDExQUQ7RDY1QTsxMTEyIDExNkEgMTFBRDsKK0Q2NUI7RDY1QjsxMTEyIDExNkEgMTFBRTtENjVCOzExMTIgMTE2QSAxMUFFOworRDY1QztENjVDOzExMTIgMTE2QSAxMUFGO0Q2NUM7MTExMiAxMTZBIDExQUY7CitENjVEO0Q2NUQ7MTExMiAxMTZBIDExQjA7RDY1RDsxMTEyIDExNkEgMTFCMDsKK0Q2NUU7RDY1RTsxMTEyIDExNkEgMTFCMTtENjVFOzExMTIgMTE2QSAxMUIxOworRDY1RjtENjVGOzExMTIgMTE2QSAxMUIyO0Q2NUY7MTExMiAxMTZBIDExQjI7CitENjYwO0Q2NjA7MTExMiAxMTZBIDExQjM7RDY2MDsxMTEyIDExNkEgMTFCMzsKK0Q2NjE7RDY2MTsxMTEyIDExNkEgMTFCNDtENjYxOzExMTIgMTE2QSAxMUI0OworRDY2MjtENjYyOzExMTIgMTE2QSAxMUI1O0Q2NjI7MTExMiAxMTZBIDExQjU7CitENjYzO0Q2NjM7MTExMiAxMTZBIDExQjY7RDY2MzsxMTEyIDExNkEgMTFCNjsKK0Q2NjQ7RDY2NDsxMTEyIDExNkEgMTFCNztENjY0OzExMTIgMTE2QSAxMUI3OworRDY2NTtENjY1OzExMTIgMTE2QSAxMUI4O0Q2NjU7MTExMiAxMTZBIDExQjg7CitENjY2O0Q2NjY7MTExMiAxMTZBIDExQjk7RDY2NjsxMTEyIDExNkEgMTFCOTsKK0Q2Njc7RDY2NzsxMTEyIDExNkEgMTFCQTtENjY3OzExMTIgMTE2QSAxMUJBOworRDY2ODtENjY4OzExMTIgMTE2QSAxMUJCO0Q2Njg7MTExMiAxMTZBIDExQkI7CitENjY5O0Q2Njk7MTExMiAxMTZBIDExQkM7RDY2OTsxMTEyIDExNkEgMTFCQzsKK0Q2NkE7RDY2QTsxMTEyIDExNkEgMTFCRDtENjZBOzExMTIgMTE2QSAxMUJEOworRDY2QjtENjZCOzExMTIgMTE2QSAxMUJFO0Q2NkI7MTExMiAxMTZBIDExQkU7CitENjZDO0Q2NkM7MTExMiAxMTZBIDExQkY7RDY2QzsxMTEyIDExNkEgMTFCRjsKK0Q2NkQ7RDY2RDsxMTEyIDExNkEgMTFDMDtENjZEOzExMTIgMTE2QSAxMUMwOworRDY2RTtENjZFOzExMTIgMTE2QSAxMUMxO0Q2NkU7MTExMiAxMTZBIDExQzE7CitENjZGO0Q2NkY7MTExMiAxMTZBIDExQzI7RDY2RjsxMTEyIDExNkEgMTFDMjsKK0Q2NzA7RDY3MDsxMTEyIDExNkI7RDY3MDsxMTEyIDExNkI7CitENjcxO0Q2NzE7MTExMiAxMTZCIDExQTg7RDY3MTsxMTEyIDExNkIgMTFBODsKK0Q2NzI7RDY3MjsxMTEyIDExNkIgMTFBOTtENjcyOzExMTIgMTE2QiAxMUE5OworRDY3MztENjczOzExMTIgMTE2QiAxMUFBO0Q2NzM7MTExMiAxMTZCIDExQUE7CitENjc0O0Q2NzQ7MTExMiAxMTZCIDExQUI7RDY3NDsxMTEyIDExNkIgMTFBQjsKK0Q2NzU7RDY3NTsxMTEyIDExNkIgMTFBQztENjc1OzExMTIgMTE2QiAxMUFDOworRDY3NjtENjc2OzExMTIgMTE2QiAxMUFEO0Q2NzY7MTExMiAxMTZCIDExQUQ7CitENjc3O0Q2Nzc7MTExMiAxMTZCIDExQUU7RDY3NzsxMTEyIDExNkIgMTFBRTsKK0Q2Nzg7RDY3ODsxMTEyIDExNkIgMTFBRjtENjc4OzExMTIgMTE2QiAxMUFGOworRDY3OTtENjc5OzExMTIgMTE2QiAxMUIwO0Q2Nzk7MTExMiAxMTZCIDExQjA7CitENjdBO0Q2N0E7MTExMiAxMTZCIDExQjE7RDY3QTsxMTEyIDExNkIgMTFCMTsKK0Q2N0I7RDY3QjsxMTEyIDExNkIgMTFCMjtENjdCOzExMTIgMTE2QiAxMUIyOworRDY3QztENjdDOzExMTIgMTE2QiAxMUIzO0Q2N0M7MTExMiAxMTZCIDExQjM7CitENjdEO0Q2N0Q7MTExMiAxMTZCIDExQjQ7RDY3RDsxMTEyIDExNkIgMTFCNDsKK0Q2N0U7RDY3RTsxMTEyIDExNkIgMTFCNTtENjdFOzExMTIgMTE2QiAxMUI1OworRDY3RjtENjdGOzExMTIgMTE2QiAxMUI2O0Q2N0Y7MTExMiAxMTZCIDExQjY7CitENjgwO0Q2ODA7MTExMiAxMTZCIDExQjc7RDY4MDsxMTEyIDExNkIgMTFCNzsKK0Q2ODE7RDY4MTsxMTEyIDExNkIgMTFCODtENjgxOzExMTIgMTE2QiAxMUI4OworRDY4MjtENjgyOzExMTIgMTE2QiAxMUI5O0Q2ODI7MTExMiAxMTZCIDExQjk7CitENjgzO0Q2ODM7MTExMiAxMTZCIDExQkE7RDY4MzsxMTEyIDExNkIgMTFCQTsKK0Q2ODQ7RDY4NDsxMTEyIDExNkIgMTFCQjtENjg0OzExMTIgMTE2QiAxMUJCOworRDY4NTtENjg1OzExMTIgMTE2QiAxMUJDO0Q2ODU7MTExMiAxMTZCIDExQkM7CitENjg2O0Q2ODY7MTExMiAxMTZCIDExQkQ7RDY4NjsxMTEyIDExNkIgMTFCRDsKK0Q2ODc7RDY4NzsxMTEyIDExNkIgMTFCRTtENjg3OzExMTIgMTE2QiAxMUJFOworRDY4ODtENjg4OzExMTIgMTE2QiAxMUJGO0Q2ODg7MTExMiAxMTZCIDExQkY7CitENjg5O0Q2ODk7MTExMiAxMTZCIDExQzA7RDY4OTsxMTEyIDExNkIgMTFDMDsKK0Q2OEE7RDY4QTsxMTEyIDExNkIgMTFDMTtENjhBOzExMTIgMTE2QiAxMUMxOworRDY4QjtENjhCOzExMTIgMTE2QiAxMUMyO0Q2OEI7MTExMiAxMTZCIDExQzI7CitENjhDO0Q2OEM7MTExMiAxMTZDO0Q2OEM7MTExMiAxMTZDOworRDY4RDtENjhEOzExMTIgMTE2QyAxMUE4O0Q2OEQ7MTExMiAxMTZDIDExQTg7CitENjhFO0Q2OEU7MTExMiAxMTZDIDExQTk7RDY4RTsxMTEyIDExNkMgMTFBOTsKK0Q2OEY7RDY4RjsxMTEyIDExNkMgMTFBQTtENjhGOzExMTIgMTE2QyAxMUFBOworRDY5MDtENjkwOzExMTIgMTE2QyAxMUFCO0Q2OTA7MTExMiAxMTZDIDExQUI7CitENjkxO0Q2OTE7MTExMiAxMTZDIDExQUM7RDY5MTsxMTEyIDExNkMgMTFBQzsKK0Q2OTI7RDY5MjsxMTEyIDExNkMgMTFBRDtENjkyOzExMTIgMTE2QyAxMUFEOworRDY5MztENjkzOzExMTIgMTE2QyAxMUFFO0Q2OTM7MTExMiAxMTZDIDExQUU7CitENjk0O0Q2OTQ7MTExMiAxMTZDIDExQUY7RDY5NDsxMTEyIDExNkMgMTFBRjsKK0Q2OTU7RDY5NTsxMTEyIDExNkMgMTFCMDtENjk1OzExMTIgMTE2QyAxMUIwOworRDY5NjtENjk2OzExMTIgMTE2QyAxMUIxO0Q2OTY7MTExMiAxMTZDIDExQjE7CitENjk3O0Q2OTc7MTExMiAxMTZDIDExQjI7RDY5NzsxMTEyIDExNkMgMTFCMjsKK0Q2OTg7RDY5ODsxMTEyIDExNkMgMTFCMztENjk4OzExMTIgMTE2QyAxMUIzOworRDY5OTtENjk5OzExMTIgMTE2QyAxMUI0O0Q2OTk7MTExMiAxMTZDIDExQjQ7CitENjlBO0Q2OUE7MTExMiAxMTZDIDExQjU7RDY5QTsxMTEyIDExNkMgMTFCNTsKK0Q2OUI7RDY5QjsxMTEyIDExNkMgMTFCNjtENjlCOzExMTIgMTE2QyAxMUI2OworRDY5QztENjlDOzExMTIgMTE2QyAxMUI3O0Q2OUM7MTExMiAxMTZDIDExQjc7CitENjlEO0Q2OUQ7MTExMiAxMTZDIDExQjg7RDY5RDsxMTEyIDExNkMgMTFCODsKK0Q2OUU7RDY5RTsxMTEyIDExNkMgMTFCOTtENjlFOzExMTIgMTE2QyAxMUI5OworRDY5RjtENjlGOzExMTIgMTE2QyAxMUJBO0Q2OUY7MTExMiAxMTZDIDExQkE7CitENkEwO0Q2QTA7MTExMiAxMTZDIDExQkI7RDZBMDsxMTEyIDExNkMgMTFCQjsKK0Q2QTE7RDZBMTsxMTEyIDExNkMgMTFCQztENkExOzExMTIgMTE2QyAxMUJDOworRDZBMjtENkEyOzExMTIgMTE2QyAxMUJEO0Q2QTI7MTExMiAxMTZDIDExQkQ7CitENkEzO0Q2QTM7MTExMiAxMTZDIDExQkU7RDZBMzsxMTEyIDExNkMgMTFCRTsKK0Q2QTQ7RDZBNDsxMTEyIDExNkMgMTFCRjtENkE0OzExMTIgMTE2QyAxMUJGOworRDZBNTtENkE1OzExMTIgMTE2QyAxMUMwO0Q2QTU7MTExMiAxMTZDIDExQzA7CitENkE2O0Q2QTY7MTExMiAxMTZDIDExQzE7RDZBNjsxMTEyIDExNkMgMTFDMTsKK0Q2QTc7RDZBNzsxMTEyIDExNkMgMTFDMjtENkE3OzExMTIgMTE2QyAxMUMyOworRDZBODtENkE4OzExMTIgMTE2RDtENkE4OzExMTIgMTE2RDsKK0Q2QTk7RDZBOTsxMTEyIDExNkQgMTFBODtENkE5OzExMTIgMTE2RCAxMUE4OworRDZBQTtENkFBOzExMTIgMTE2RCAxMUE5O0Q2QUE7MTExMiAxMTZEIDExQTk7CitENkFCO0Q2QUI7MTExMiAxMTZEIDExQUE7RDZBQjsxMTEyIDExNkQgMTFBQTsKK0Q2QUM7RDZBQzsxMTEyIDExNkQgMTFBQjtENkFDOzExMTIgMTE2RCAxMUFCOworRDZBRDtENkFEOzExMTIgMTE2RCAxMUFDO0Q2QUQ7MTExMiAxMTZEIDExQUM7CitENkFFO0Q2QUU7MTExMiAxMTZEIDExQUQ7RDZBRTsxMTEyIDExNkQgMTFBRDsKK0Q2QUY7RDZBRjsxMTEyIDExNkQgMTFBRTtENkFGOzExMTIgMTE2RCAxMUFFOworRDZCMDtENkIwOzExMTIgMTE2RCAxMUFGO0Q2QjA7MTExMiAxMTZEIDExQUY7CitENkIxO0Q2QjE7MTExMiAxMTZEIDExQjA7RDZCMTsxMTEyIDExNkQgMTFCMDsKK0Q2QjI7RDZCMjsxMTEyIDExNkQgMTFCMTtENkIyOzExMTIgMTE2RCAxMUIxOworRDZCMztENkIzOzExMTIgMTE2RCAxMUIyO0Q2QjM7MTExMiAxMTZEIDExQjI7CitENkI0O0Q2QjQ7MTExMiAxMTZEIDExQjM7RDZCNDsxMTEyIDExNkQgMTFCMzsKK0Q2QjU7RDZCNTsxMTEyIDExNkQgMTFCNDtENkI1OzExMTIgMTE2RCAxMUI0OworRDZCNjtENkI2OzExMTIgMTE2RCAxMUI1O0Q2QjY7MTExMiAxMTZEIDExQjU7CitENkI3O0Q2Qjc7MTExMiAxMTZEIDExQjY7RDZCNzsxMTEyIDExNkQgMTFCNjsKK0Q2Qjg7RDZCODsxMTEyIDExNkQgMTFCNztENkI4OzExMTIgMTE2RCAxMUI3OworRDZCOTtENkI5OzExMTIgMTE2RCAxMUI4O0Q2Qjk7MTExMiAxMTZEIDExQjg7CitENkJBO0Q2QkE7MTExMiAxMTZEIDExQjk7RDZCQTsxMTEyIDExNkQgMTFCOTsKK0Q2QkI7RDZCQjsxMTEyIDExNkQgMTFCQTtENkJCOzExMTIgMTE2RCAxMUJBOworRDZCQztENkJDOzExMTIgMTE2RCAxMUJCO0Q2QkM7MTExMiAxMTZEIDExQkI7CitENkJEO0Q2QkQ7MTExMiAxMTZEIDExQkM7RDZCRDsxMTEyIDExNkQgMTFCQzsKK0Q2QkU7RDZCRTsxMTEyIDExNkQgMTFCRDtENkJFOzExMTIgMTE2RCAxMUJEOworRDZCRjtENkJGOzExMTIgMTE2RCAxMUJFO0Q2QkY7MTExMiAxMTZEIDExQkU7CitENkMwO0Q2QzA7MTExMiAxMTZEIDExQkY7RDZDMDsxMTEyIDExNkQgMTFCRjsKK0Q2QzE7RDZDMTsxMTEyIDExNkQgMTFDMDtENkMxOzExMTIgMTE2RCAxMUMwOworRDZDMjtENkMyOzExMTIgMTE2RCAxMUMxO0Q2QzI7MTExMiAxMTZEIDExQzE7CitENkMzO0Q2QzM7MTExMiAxMTZEIDExQzI7RDZDMzsxMTEyIDExNkQgMTFDMjsKK0Q2QzQ7RDZDNDsxMTEyIDExNkU7RDZDNDsxMTEyIDExNkU7CitENkM1O0Q2QzU7MTExMiAxMTZFIDExQTg7RDZDNTsxMTEyIDExNkUgMTFBODsKK0Q2QzY7RDZDNjsxMTEyIDExNkUgMTFBOTtENkM2OzExMTIgMTE2RSAxMUE5OworRDZDNztENkM3OzExMTIgMTE2RSAxMUFBO0Q2Qzc7MTExMiAxMTZFIDExQUE7CitENkM4O0Q2Qzg7MTExMiAxMTZFIDExQUI7RDZDODsxMTEyIDExNkUgMTFBQjsKK0Q2Qzk7RDZDOTsxMTEyIDExNkUgMTFBQztENkM5OzExMTIgMTE2RSAxMUFDOworRDZDQTtENkNBOzExMTIgMTE2RSAxMUFEO0Q2Q0E7MTExMiAxMTZFIDExQUQ7CitENkNCO0Q2Q0I7MTExMiAxMTZFIDExQUU7RDZDQjsxMTEyIDExNkUgMTFBRTsKK0Q2Q0M7RDZDQzsxMTEyIDExNkUgMTFBRjtENkNDOzExMTIgMTE2RSAxMUFGOworRDZDRDtENkNEOzExMTIgMTE2RSAxMUIwO0Q2Q0Q7MTExMiAxMTZFIDExQjA7CitENkNFO0Q2Q0U7MTExMiAxMTZFIDExQjE7RDZDRTsxMTEyIDExNkUgMTFCMTsKK0Q2Q0Y7RDZDRjsxMTEyIDExNkUgMTFCMjtENkNGOzExMTIgMTE2RSAxMUIyOworRDZEMDtENkQwOzExMTIgMTE2RSAxMUIzO0Q2RDA7MTExMiAxMTZFIDExQjM7CitENkQxO0Q2RDE7MTExMiAxMTZFIDExQjQ7RDZEMTsxMTEyIDExNkUgMTFCNDsKK0Q2RDI7RDZEMjsxMTEyIDExNkUgMTFCNTtENkQyOzExMTIgMTE2RSAxMUI1OworRDZEMztENkQzOzExMTIgMTE2RSAxMUI2O0Q2RDM7MTExMiAxMTZFIDExQjY7CitENkQ0O0Q2RDQ7MTExMiAxMTZFIDExQjc7RDZENDsxMTEyIDExNkUgMTFCNzsKK0Q2RDU7RDZENTsxMTEyIDExNkUgMTFCODtENkQ1OzExMTIgMTE2RSAxMUI4OworRDZENjtENkQ2OzExMTIgMTE2RSAxMUI5O0Q2RDY7MTExMiAxMTZFIDExQjk7CitENkQ3O0Q2RDc7MTExMiAxMTZFIDExQkE7RDZENzsxMTEyIDExNkUgMTFCQTsKK0Q2RDg7RDZEODsxMTEyIDExNkUgMTFCQjtENkQ4OzExMTIgMTE2RSAxMUJCOworRDZEOTtENkQ5OzExMTIgMTE2RSAxMUJDO0Q2RDk7MTExMiAxMTZFIDExQkM7CitENkRBO0Q2REE7MTExMiAxMTZFIDExQkQ7RDZEQTsxMTEyIDExNkUgMTFCRDsKK0Q2REI7RDZEQjsxMTEyIDExNkUgMTFCRTtENkRCOzExMTIgMTE2RSAxMUJFOworRDZEQztENkRDOzExMTIgMTE2RSAxMUJGO0Q2REM7MTExMiAxMTZFIDExQkY7CitENkREO0Q2REQ7MTExMiAxMTZFIDExQzA7RDZERDsxMTEyIDExNkUgMTFDMDsKK0Q2REU7RDZERTsxMTEyIDExNkUgMTFDMTtENkRFOzExMTIgMTE2RSAxMUMxOworRDZERjtENkRGOzExMTIgMTE2RSAxMUMyO0Q2REY7MTExMiAxMTZFIDExQzI7CitENkUwO0Q2RTA7MTExMiAxMTZGO0Q2RTA7MTExMiAxMTZGOworRDZFMTtENkUxOzExMTIgMTE2RiAxMUE4O0Q2RTE7MTExMiAxMTZGIDExQTg7CitENkUyO0Q2RTI7MTExMiAxMTZGIDExQTk7RDZFMjsxMTEyIDExNkYgMTFBOTsKK0Q2RTM7RDZFMzsxMTEyIDExNkYgMTFBQTtENkUzOzExMTIgMTE2RiAxMUFBOworRDZFNDtENkU0OzExMTIgMTE2RiAxMUFCO0Q2RTQ7MTExMiAxMTZGIDExQUI7CitENkU1O0Q2RTU7MTExMiAxMTZGIDExQUM7RDZFNTsxMTEyIDExNkYgMTFBQzsKK0Q2RTY7RDZFNjsxMTEyIDExNkYgMTFBRDtENkU2OzExMTIgMTE2RiAxMUFEOworRDZFNztENkU3OzExMTIgMTE2RiAxMUFFO0Q2RTc7MTExMiAxMTZGIDExQUU7CitENkU4O0Q2RTg7MTExMiAxMTZGIDExQUY7RDZFODsxMTEyIDExNkYgMTFBRjsKK0Q2RTk7RDZFOTsxMTEyIDExNkYgMTFCMDtENkU5OzExMTIgMTE2RiAxMUIwOworRDZFQTtENkVBOzExMTIgMTE2RiAxMUIxO0Q2RUE7MTExMiAxMTZGIDExQjE7CitENkVCO0Q2RUI7MTExMiAxMTZGIDExQjI7RDZFQjsxMTEyIDExNkYgMTFCMjsKK0Q2RUM7RDZFQzsxMTEyIDExNkYgMTFCMztENkVDOzExMTIgMTE2RiAxMUIzOworRDZFRDtENkVEOzExMTIgMTE2RiAxMUI0O0Q2RUQ7MTExMiAxMTZGIDExQjQ7CitENkVFO0Q2RUU7MTExMiAxMTZGIDExQjU7RDZFRTsxMTEyIDExNkYgMTFCNTsKK0Q2RUY7RDZFRjsxMTEyIDExNkYgMTFCNjtENkVGOzExMTIgMTE2RiAxMUI2OworRDZGMDtENkYwOzExMTIgMTE2RiAxMUI3O0Q2RjA7MTExMiAxMTZGIDExQjc7CitENkYxO0Q2RjE7MTExMiAxMTZGIDExQjg7RDZGMTsxMTEyIDExNkYgMTFCODsKK0Q2RjI7RDZGMjsxMTEyIDExNkYgMTFCOTtENkYyOzExMTIgMTE2RiAxMUI5OworRDZGMztENkYzOzExMTIgMTE2RiAxMUJBO0Q2RjM7MTExMiAxMTZGIDExQkE7CitENkY0O0Q2RjQ7MTExMiAxMTZGIDExQkI7RDZGNDsxMTEyIDExNkYgMTFCQjsKK0Q2RjU7RDZGNTsxMTEyIDExNkYgMTFCQztENkY1OzExMTIgMTE2RiAxMUJDOworRDZGNjtENkY2OzExMTIgMTE2RiAxMUJEO0Q2RjY7MTExMiAxMTZGIDExQkQ7CitENkY3O0Q2Rjc7MTExMiAxMTZGIDExQkU7RDZGNzsxMTEyIDExNkYgMTFCRTsKK0Q2Rjg7RDZGODsxMTEyIDExNkYgMTFCRjtENkY4OzExMTIgMTE2RiAxMUJGOworRDZGOTtENkY5OzExMTIgMTE2RiAxMUMwO0Q2Rjk7MTExMiAxMTZGIDExQzA7CitENkZBO0Q2RkE7MTExMiAxMTZGIDExQzE7RDZGQTsxMTEyIDExNkYgMTFDMTsKK0Q2RkI7RDZGQjsxMTEyIDExNkYgMTFDMjtENkZCOzExMTIgMTE2RiAxMUMyOworRDZGQztENkZDOzExMTIgMTE3MDtENkZDOzExMTIgMTE3MDsKK0Q2RkQ7RDZGRDsxMTEyIDExNzAgMTFBODtENkZEOzExMTIgMTE3MCAxMUE4OworRDZGRTtENkZFOzExMTIgMTE3MCAxMUE5O0Q2RkU7MTExMiAxMTcwIDExQTk7CitENkZGO0Q2RkY7MTExMiAxMTcwIDExQUE7RDZGRjsxMTEyIDExNzAgMTFBQTsKK0Q3MDA7RDcwMDsxMTEyIDExNzAgMTFBQjtENzAwOzExMTIgMTE3MCAxMUFCOworRDcwMTtENzAxOzExMTIgMTE3MCAxMUFDO0Q3MDE7MTExMiAxMTcwIDExQUM7CitENzAyO0Q3MDI7MTExMiAxMTcwIDExQUQ7RDcwMjsxMTEyIDExNzAgMTFBRDsKK0Q3MDM7RDcwMzsxMTEyIDExNzAgMTFBRTtENzAzOzExMTIgMTE3MCAxMUFFOworRDcwNDtENzA0OzExMTIgMTE3MCAxMUFGO0Q3MDQ7MTExMiAxMTcwIDExQUY7CitENzA1O0Q3MDU7MTExMiAxMTcwIDExQjA7RDcwNTsxMTEyIDExNzAgMTFCMDsKK0Q3MDY7RDcwNjsxMTEyIDExNzAgMTFCMTtENzA2OzExMTIgMTE3MCAxMUIxOworRDcwNztENzA3OzExMTIgMTE3MCAxMUIyO0Q3MDc7MTExMiAxMTcwIDExQjI7CitENzA4O0Q3MDg7MTExMiAxMTcwIDExQjM7RDcwODsxMTEyIDExNzAgMTFCMzsKK0Q3MDk7RDcwOTsxMTEyIDExNzAgMTFCNDtENzA5OzExMTIgMTE3MCAxMUI0OworRDcwQTtENzBBOzExMTIgMTE3MCAxMUI1O0Q3MEE7MTExMiAxMTcwIDExQjU7CitENzBCO0Q3MEI7MTExMiAxMTcwIDExQjY7RDcwQjsxMTEyIDExNzAgMTFCNjsKK0Q3MEM7RDcwQzsxMTEyIDExNzAgMTFCNztENzBDOzExMTIgMTE3MCAxMUI3OworRDcwRDtENzBEOzExMTIgMTE3MCAxMUI4O0Q3MEQ7MTExMiAxMTcwIDExQjg7CitENzBFO0Q3MEU7MTExMiAxMTcwIDExQjk7RDcwRTsxMTEyIDExNzAgMTFCOTsKK0Q3MEY7RDcwRjsxMTEyIDExNzAgMTFCQTtENzBGOzExMTIgMTE3MCAxMUJBOworRDcxMDtENzEwOzExMTIgMTE3MCAxMUJCO0Q3MTA7MTExMiAxMTcwIDExQkI7CitENzExO0Q3MTE7MTExMiAxMTcwIDExQkM7RDcxMTsxMTEyIDExNzAgMTFCQzsKK0Q3MTI7RDcxMjsxMTEyIDExNzAgMTFCRDtENzEyOzExMTIgMTE3MCAxMUJEOworRDcxMztENzEzOzExMTIgMTE3MCAxMUJFO0Q3MTM7MTExMiAxMTcwIDExQkU7CitENzE0O0Q3MTQ7MTExMiAxMTcwIDExQkY7RDcxNDsxMTEyIDExNzAgMTFCRjsKK0Q3MTU7RDcxNTsxMTEyIDExNzAgMTFDMDtENzE1OzExMTIgMTE3MCAxMUMwOworRDcxNjtENzE2OzExMTIgMTE3MCAxMUMxO0Q3MTY7MTExMiAxMTcwIDExQzE7CitENzE3O0Q3MTc7MTExMiAxMTcwIDExQzI7RDcxNzsxMTEyIDExNzAgMTFDMjsKK0Q3MTg7RDcxODsxMTEyIDExNzE7RDcxODsxMTEyIDExNzE7CitENzE5O0Q3MTk7MTExMiAxMTcxIDExQTg7RDcxOTsxMTEyIDExNzEgMTFBODsKK0Q3MUE7RDcxQTsxMTEyIDExNzEgMTFBOTtENzFBOzExMTIgMTE3MSAxMUE5OworRDcxQjtENzFCOzExMTIgMTE3MSAxMUFBO0Q3MUI7MTExMiAxMTcxIDExQUE7CitENzFDO0Q3MUM7MTExMiAxMTcxIDExQUI7RDcxQzsxMTEyIDExNzEgMTFBQjsKK0Q3MUQ7RDcxRDsxMTEyIDExNzEgMTFBQztENzFEOzExMTIgMTE3MSAxMUFDOworRDcxRTtENzFFOzExMTIgMTE3MSAxMUFEO0Q3MUU7MTExMiAxMTcxIDExQUQ7CitENzFGO0Q3MUY7MTExMiAxMTcxIDExQUU7RDcxRjsxMTEyIDExNzEgMTFBRTsKK0Q3MjA7RDcyMDsxMTEyIDExNzEgMTFBRjtENzIwOzExMTIgMTE3MSAxMUFGOworRDcyMTtENzIxOzExMTIgMTE3MSAxMUIwO0Q3MjE7MTExMiAxMTcxIDExQjA7CitENzIyO0Q3MjI7MTExMiAxMTcxIDExQjE7RDcyMjsxMTEyIDExNzEgMTFCMTsKK0Q3MjM7RDcyMzsxMTEyIDExNzEgMTFCMjtENzIzOzExMTIgMTE3MSAxMUIyOworRDcyNDtENzI0OzExMTIgMTE3MSAxMUIzO0Q3MjQ7MTExMiAxMTcxIDExQjM7CitENzI1O0Q3MjU7MTExMiAxMTcxIDExQjQ7RDcyNTsxMTEyIDExNzEgMTFCNDsKK0Q3MjY7RDcyNjsxMTEyIDExNzEgMTFCNTtENzI2OzExMTIgMTE3MSAxMUI1OworRDcyNztENzI3OzExMTIgMTE3MSAxMUI2O0Q3Mjc7MTExMiAxMTcxIDExQjY7CitENzI4O0Q3Mjg7MTExMiAxMTcxIDExQjc7RDcyODsxMTEyIDExNzEgMTFCNzsKK0Q3Mjk7RDcyOTsxMTEyIDExNzEgMTFCODtENzI5OzExMTIgMTE3MSAxMUI4OworRDcyQTtENzJBOzExMTIgMTE3MSAxMUI5O0Q3MkE7MTExMiAxMTcxIDExQjk7CitENzJCO0Q3MkI7MTExMiAxMTcxIDExQkE7RDcyQjsxMTEyIDExNzEgMTFCQTsKK0Q3MkM7RDcyQzsxMTEyIDExNzEgMTFCQjtENzJDOzExMTIgMTE3MSAxMUJCOworRDcyRDtENzJEOzExMTIgMTE3MSAxMUJDO0Q3MkQ7MTExMiAxMTcxIDExQkM7CitENzJFO0Q3MkU7MTExMiAxMTcxIDExQkQ7RDcyRTsxMTEyIDExNzEgMTFCRDsKK0Q3MkY7RDcyRjsxMTEyIDExNzEgMTFCRTtENzJGOzExMTIgMTE3MSAxMUJFOworRDczMDtENzMwOzExMTIgMTE3MSAxMUJGO0Q3MzA7MTExMiAxMTcxIDExQkY7CitENzMxO0Q3MzE7MTExMiAxMTcxIDExQzA7RDczMTsxMTEyIDExNzEgMTFDMDsKK0Q3MzI7RDczMjsxMTEyIDExNzEgMTFDMTtENzMyOzExMTIgMTE3MSAxMUMxOworRDczMztENzMzOzExMTIgMTE3MSAxMUMyO0Q3MzM7MTExMiAxMTcxIDExQzI7CitENzM0O0Q3MzQ7MTExMiAxMTcyO0Q3MzQ7MTExMiAxMTcyOworRDczNTtENzM1OzExMTIgMTE3MiAxMUE4O0Q3MzU7MTExMiAxMTcyIDExQTg7CitENzM2O0Q3MzY7MTExMiAxMTcyIDExQTk7RDczNjsxMTEyIDExNzIgMTFBOTsKK0Q3Mzc7RDczNzsxMTEyIDExNzIgMTFBQTtENzM3OzExMTIgMTE3MiAxMUFBOworRDczODtENzM4OzExMTIgMTE3MiAxMUFCO0Q3Mzg7MTExMiAxMTcyIDExQUI7CitENzM5O0Q3Mzk7MTExMiAxMTcyIDExQUM7RDczOTsxMTEyIDExNzIgMTFBQzsKK0Q3M0E7RDczQTsxMTEyIDExNzIgMTFBRDtENzNBOzExMTIgMTE3MiAxMUFEOworRDczQjtENzNCOzExMTIgMTE3MiAxMUFFO0Q3M0I7MTExMiAxMTcyIDExQUU7CitENzNDO0Q3M0M7MTExMiAxMTcyIDExQUY7RDczQzsxMTEyIDExNzIgMTFBRjsKK0Q3M0Q7RDczRDsxMTEyIDExNzIgMTFCMDtENzNEOzExMTIgMTE3MiAxMUIwOworRDczRTtENzNFOzExMTIgMTE3MiAxMUIxO0Q3M0U7MTExMiAxMTcyIDExQjE7CitENzNGO0Q3M0Y7MTExMiAxMTcyIDExQjI7RDczRjsxMTEyIDExNzIgMTFCMjsKK0Q3NDA7RDc0MDsxMTEyIDExNzIgMTFCMztENzQwOzExMTIgMTE3MiAxMUIzOworRDc0MTtENzQxOzExMTIgMTE3MiAxMUI0O0Q3NDE7MTExMiAxMTcyIDExQjQ7CitENzQyO0Q3NDI7MTExMiAxMTcyIDExQjU7RDc0MjsxMTEyIDExNzIgMTFCNTsKK0Q3NDM7RDc0MzsxMTEyIDExNzIgMTFCNjtENzQzOzExMTIgMTE3MiAxMUI2OworRDc0NDtENzQ0OzExMTIgMTE3MiAxMUI3O0Q3NDQ7MTExMiAxMTcyIDExQjc7CitENzQ1O0Q3NDU7MTExMiAxMTcyIDExQjg7RDc0NTsxMTEyIDExNzIgMTFCODsKK0Q3NDY7RDc0NjsxMTEyIDExNzIgMTFCOTtENzQ2OzExMTIgMTE3MiAxMUI5OworRDc0NztENzQ3OzExMTIgMTE3MiAxMUJBO0Q3NDc7MTExMiAxMTcyIDExQkE7CitENzQ4O0Q3NDg7MTExMiAxMTcyIDExQkI7RDc0ODsxMTEyIDExNzIgMTFCQjsKK0Q3NDk7RDc0OTsxMTEyIDExNzIgMTFCQztENzQ5OzExMTIgMTE3MiAxMUJDOworRDc0QTtENzRBOzExMTIgMTE3MiAxMUJEO0Q3NEE7MTExMiAxMTcyIDExQkQ7CitENzRCO0Q3NEI7MTExMiAxMTcyIDExQkU7RDc0QjsxMTEyIDExNzIgMTFCRTsKK0Q3NEM7RDc0QzsxMTEyIDExNzIgMTFCRjtENzRDOzExMTIgMTE3MiAxMUJGOworRDc0RDtENzREOzExMTIgMTE3MiAxMUMwO0Q3NEQ7MTExMiAxMTcyIDExQzA7CitENzRFO0Q3NEU7MTExMiAxMTcyIDExQzE7RDc0RTsxMTEyIDExNzIgMTFDMTsKK0Q3NEY7RDc0RjsxMTEyIDExNzIgMTFDMjtENzRGOzExMTIgMTE3MiAxMUMyOworRDc1MDtENzUwOzExMTIgMTE3MztENzUwOzExMTIgMTE3MzsKK0Q3NTE7RDc1MTsxMTEyIDExNzMgMTFBODtENzUxOzExMTIgMTE3MyAxMUE4OworRDc1MjtENzUyOzExMTIgMTE3MyAxMUE5O0Q3NTI7MTExMiAxMTczIDExQTk7CitENzUzO0Q3NTM7MTExMiAxMTczIDExQUE7RDc1MzsxMTEyIDExNzMgMTFBQTsKK0Q3NTQ7RDc1NDsxMTEyIDExNzMgMTFBQjtENzU0OzExMTIgMTE3MyAxMUFCOworRDc1NTtENzU1OzExMTIgMTE3MyAxMUFDO0Q3NTU7MTExMiAxMTczIDExQUM7CitENzU2O0Q3NTY7MTExMiAxMTczIDExQUQ7RDc1NjsxMTEyIDExNzMgMTFBRDsKK0Q3NTc7RDc1NzsxMTEyIDExNzMgMTFBRTtENzU3OzExMTIgMTE3MyAxMUFFOworRDc1ODtENzU4OzExMTIgMTE3MyAxMUFGO0Q3NTg7MTExMiAxMTczIDExQUY7CitENzU5O0Q3NTk7MTExMiAxMTczIDExQjA7RDc1OTsxMTEyIDExNzMgMTFCMDsKK0Q3NUE7RDc1QTsxMTEyIDExNzMgMTFCMTtENzVBOzExMTIgMTE3MyAxMUIxOworRDc1QjtENzVCOzExMTIgMTE3MyAxMUIyO0Q3NUI7MTExMiAxMTczIDExQjI7CitENzVDO0Q3NUM7MTExMiAxMTczIDExQjM7RDc1QzsxMTEyIDExNzMgMTFCMzsKK0Q3NUQ7RDc1RDsxMTEyIDExNzMgMTFCNDtENzVEOzExMTIgMTE3MyAxMUI0OworRDc1RTtENzVFOzExMTIgMTE3MyAxMUI1O0Q3NUU7MTExMiAxMTczIDExQjU7CitENzVGO0Q3NUY7MTExMiAxMTczIDExQjY7RDc1RjsxMTEyIDExNzMgMTFCNjsKK0Q3NjA7RDc2MDsxMTEyIDExNzMgMTFCNztENzYwOzExMTIgMTE3MyAxMUI3OworRDc2MTtENzYxOzExMTIgMTE3MyAxMUI4O0Q3NjE7MTExMiAxMTczIDExQjg7CitENzYyO0Q3NjI7MTExMiAxMTczIDExQjk7RDc2MjsxMTEyIDExNzMgMTFCOTsKK0Q3NjM7RDc2MzsxMTEyIDExNzMgMTFCQTtENzYzOzExMTIgMTE3MyAxMUJBOworRDc2NDtENzY0OzExMTIgMTE3MyAxMUJCO0Q3NjQ7MTExMiAxMTczIDExQkI7CitENzY1O0Q3NjU7MTExMiAxMTczIDExQkM7RDc2NTsxMTEyIDExNzMgMTFCQzsKK0Q3NjY7RDc2NjsxMTEyIDExNzMgMTFCRDtENzY2OzExMTIgMTE3MyAxMUJEOworRDc2NztENzY3OzExMTIgMTE3MyAxMUJFO0Q3Njc7MTExMiAxMTczIDExQkU7CitENzY4O0Q3Njg7MTExMiAxMTczIDExQkY7RDc2ODsxMTEyIDExNzMgMTFCRjsKK0Q3Njk7RDc2OTsxMTEyIDExNzMgMTFDMDtENzY5OzExMTIgMTE3MyAxMUMwOworRDc2QTtENzZBOzExMTIgMTE3MyAxMUMxO0Q3NkE7MTExMiAxMTczIDExQzE7CitENzZCO0Q3NkI7MTExMiAxMTczIDExQzI7RDc2QjsxMTEyIDExNzMgMTFDMjsKK0Q3NkM7RDc2QzsxMTEyIDExNzQ7RDc2QzsxMTEyIDExNzQ7CitENzZEO0Q3NkQ7MTExMiAxMTc0IDExQTg7RDc2RDsxMTEyIDExNzQgMTFBODsKK0Q3NkU7RDc2RTsxMTEyIDExNzQgMTFBOTtENzZFOzExMTIgMTE3NCAxMUE5OworRDc2RjtENzZGOzExMTIgMTE3NCAxMUFBO0Q3NkY7MTExMiAxMTc0IDExQUE7CitENzcwO0Q3NzA7MTExMiAxMTc0IDExQUI7RDc3MDsxMTEyIDExNzQgMTFBQjsKK0Q3NzE7RDc3MTsxMTEyIDExNzQgMTFBQztENzcxOzExMTIgMTE3NCAxMUFDOworRDc3MjtENzcyOzExMTIgMTE3NCAxMUFEO0Q3NzI7MTExMiAxMTc0IDExQUQ7CitENzczO0Q3NzM7MTExMiAxMTc0IDExQUU7RDc3MzsxMTEyIDExNzQgMTFBRTsKK0Q3NzQ7RDc3NDsxMTEyIDExNzQgMTFBRjtENzc0OzExMTIgMTE3NCAxMUFGOworRDc3NTtENzc1OzExMTIgMTE3NCAxMUIwO0Q3NzU7MTExMiAxMTc0IDExQjA7CitENzc2O0Q3NzY7MTExMiAxMTc0IDExQjE7RDc3NjsxMTEyIDExNzQgMTFCMTsKK0Q3Nzc7RDc3NzsxMTEyIDExNzQgMTFCMjtENzc3OzExMTIgMTE3NCAxMUIyOworRDc3ODtENzc4OzExMTIgMTE3NCAxMUIzO0Q3Nzg7MTExMiAxMTc0IDExQjM7CitENzc5O0Q3Nzk7MTExMiAxMTc0IDExQjQ7RDc3OTsxMTEyIDExNzQgMTFCNDsKK0Q3N0E7RDc3QTsxMTEyIDExNzQgMTFCNTtENzdBOzExMTIgMTE3NCAxMUI1OworRDc3QjtENzdCOzExMTIgMTE3NCAxMUI2O0Q3N0I7MTExMiAxMTc0IDExQjY7CitENzdDO0Q3N0M7MTExMiAxMTc0IDExQjc7RDc3QzsxMTEyIDExNzQgMTFCNzsKK0Q3N0Q7RDc3RDsxMTEyIDExNzQgMTFCODtENzdEOzExMTIgMTE3NCAxMUI4OworRDc3RTtENzdFOzExMTIgMTE3NCAxMUI5O0Q3N0U7MTExMiAxMTc0IDExQjk7CitENzdGO0Q3N0Y7MTExMiAxMTc0IDExQkE7RDc3RjsxMTEyIDExNzQgMTFCQTsKK0Q3ODA7RDc4MDsxMTEyIDExNzQgMTFCQjtENzgwOzExMTIgMTE3NCAxMUJCOworRDc4MTtENzgxOzExMTIgMTE3NCAxMUJDO0Q3ODE7MTExMiAxMTc0IDExQkM7CitENzgyO0Q3ODI7MTExMiAxMTc0IDExQkQ7RDc4MjsxMTEyIDExNzQgMTFCRDsKK0Q3ODM7RDc4MzsxMTEyIDExNzQgMTFCRTtENzgzOzExMTIgMTE3NCAxMUJFOworRDc4NDtENzg0OzExMTIgMTE3NCAxMUJGO0Q3ODQ7MTExMiAxMTc0IDExQkY7CitENzg1O0Q3ODU7MTExMiAxMTc0IDExQzA7RDc4NTsxMTEyIDExNzQgMTFDMDsKK0Q3ODY7RDc4NjsxMTEyIDExNzQgMTFDMTtENzg2OzExMTIgMTE3NCAxMUMxOworRDc4NztENzg3OzExMTIgMTE3NCAxMUMyO0Q3ODc7MTExMiAxMTc0IDExQzI7CitENzg4O0Q3ODg7MTExMiAxMTc1O0Q3ODg7MTExMiAxMTc1OworRDc4OTtENzg5OzExMTIgMTE3NSAxMUE4O0Q3ODk7MTExMiAxMTc1IDExQTg7CitENzhBO0Q3OEE7MTExMiAxMTc1IDExQTk7RDc4QTsxMTEyIDExNzUgMTFBOTsKK0Q3OEI7RDc4QjsxMTEyIDExNzUgMTFBQTtENzhCOzExMTIgMTE3NSAxMUFBOworRDc4QztENzhDOzExMTIgMTE3NSAxMUFCO0Q3OEM7MTExMiAxMTc1IDExQUI7CitENzhEO0Q3OEQ7MTExMiAxMTc1IDExQUM7RDc4RDsxMTEyIDExNzUgMTFBQzsKK0Q3OEU7RDc4RTsxMTEyIDExNzUgMTFBRDtENzhFOzExMTIgMTE3NSAxMUFEOworRDc4RjtENzhGOzExMTIgMTE3NSAxMUFFO0Q3OEY7MTExMiAxMTc1IDExQUU7CitENzkwO0Q3OTA7MTExMiAxMTc1IDExQUY7RDc5MDsxMTEyIDExNzUgMTFBRjsKK0Q3OTE7RDc5MTsxMTEyIDExNzUgMTFCMDtENzkxOzExMTIgMTE3NSAxMUIwOworRDc5MjtENzkyOzExMTIgMTE3NSAxMUIxO0Q3OTI7MTExMiAxMTc1IDExQjE7CitENzkzO0Q3OTM7MTExMiAxMTc1IDExQjI7RDc5MzsxMTEyIDExNzUgMTFCMjsKK0Q3OTQ7RDc5NDsxMTEyIDExNzUgMTFCMztENzk0OzExMTIgMTE3NSAxMUIzOworRDc5NTtENzk1OzExMTIgMTE3NSAxMUI0O0Q3OTU7MTExMiAxMTc1IDExQjQ7CitENzk2O0Q3OTY7MTExMiAxMTc1IDExQjU7RDc5NjsxMTEyIDExNzUgMTFCNTsKK0Q3OTc7RDc5NzsxMTEyIDExNzUgMTFCNjtENzk3OzExMTIgMTE3NSAxMUI2OworRDc5ODtENzk4OzExMTIgMTE3NSAxMUI3O0Q3OTg7MTExMiAxMTc1IDExQjc7CitENzk5O0Q3OTk7MTExMiAxMTc1IDExQjg7RDc5OTsxMTEyIDExNzUgMTFCODsKK0Q3OUE7RDc5QTsxMTEyIDExNzUgMTFCOTtENzlBOzExMTIgMTE3NSAxMUI5OworRDc5QjtENzlCOzExMTIgMTE3NSAxMUJBO0Q3OUI7MTExMiAxMTc1IDExQkE7CitENzlDO0Q3OUM7MTExMiAxMTc1IDExQkI7RDc5QzsxMTEyIDExNzUgMTFCQjsKK0Q3OUQ7RDc5RDsxMTEyIDExNzUgMTFCQztENzlEOzExMTIgMTE3NSAxMUJDOworRDc5RTtENzlFOzExMTIgMTE3NSAxMUJEO0Q3OUU7MTExMiAxMTc1IDExQkQ7CitENzlGO0Q3OUY7MTExMiAxMTc1IDExQkU7RDc5RjsxMTEyIDExNzUgMTFCRTsKK0Q3QTA7RDdBMDsxMTEyIDExNzUgMTFCRjtEN0EwOzExMTIgMTE3NSAxMUJGOworRDdBMTtEN0ExOzExMTIgMTE3NSAxMUMwO0Q3QTE7MTExMiAxMTc1IDExQzA7CitEN0EyO0Q3QTI7MTExMiAxMTc1IDExQzE7RDdBMjsxMTEyIDExNzUgMTFDMTsKK0Q3QTM7RDdBMzsxMTEyIDExNzUgMTFDMjtEN0EzOzExMTIgMTE3NSAxMUMyOworRjkwMDs4QzQ4OzhDNDg7OEM0ODs4QzQ4OworRjkwMTs2NkY0OzY2RjQ7NjZGNDs2NkY0OworRjkwMjs4RUNBOzhFQ0E7OEVDQTs4RUNBOworRjkwMzs4Q0M4OzhDQzg7OENDODs4Q0M4OworRjkwNDs2RUQxOzZFRDE7NkVEMTs2RUQxOworRjkwNTs0RTMyOzRFMzI7NEUzMjs0RTMyOworRjkwNjs1M0U1OzUzRTU7NTNFNTs1M0U1OworRjkwNzs5RjlDOzlGOUM7OUY5Qzs5RjlDOworRjkwODs5RjlDOzlGOUM7OUY5Qzs5RjlDOworRjkwOTs1OTUxOzU5NTE7NTk1MTs1OTUxOworRjkwQTs5MUQxOzkxRDE7OTFEMTs5MUQxOworRjkwQjs1NTg3OzU1ODc7NTU4Nzs1NTg3OworRjkwQzs1OTQ4OzU5NDg7NTk0ODs1OTQ4OworRjkwRDs2MUY2OzYxRjY7NjFGNjs2MUY2OworRjkwRTs3NjY5Ozc2Njk7NzY2OTs3NjY5OworRjkwRjs3Rjg1OzdGODU7N0Y4NTs3Rjg1OworRjkxMDs4NjNGOzg2M0Y7ODYzRjs4NjNGOworRjkxMTs4N0JBOzg3QkE7ODdCQTs4N0JBOworRjkxMjs4OEY4Ozg4Rjg7ODhGODs4OEY4OworRjkxMzs5MDhGOzkwOEY7OTA4Rjs5MDhGOworRjkxNDs2QTAyOzZBMDI7NkEwMjs2QTAyOworRjkxNTs2RDFCOzZEMUI7NkQxQjs2RDFCOworRjkxNjs3MEQ5OzcwRDk7NzBEOTs3MEQ5OworRjkxNzs3M0RFOzczREU7NzNERTs3M0RFOworRjkxODs4NDNEOzg0M0Q7ODQzRDs4NDNEOworRjkxOTs5MTZBOzkxNkE7OTE2QTs5MTZBOworRjkxQTs5OUYxOzk5RjE7OTlGMTs5OUYxOworRjkxQjs0RTgyOzRFODI7NEU4Mjs0RTgyOworRjkxQzs1Mzc1OzUzNzU7NTM3NTs1Mzc1OworRjkxRDs2QjA0OzZCMDQ7NkIwNDs2QjA0OworRjkxRTs3MjFCOzcyMUI7NzIxQjs3MjFCOworRjkxRjs4NjJEOzg2MkQ7ODYyRDs4NjJEOworRjkyMDs5RTFFOzlFMUU7OUUxRTs5RTFFOworRjkyMTs1RDUwOzVENTA7NUQ1MDs1RDUwOworRjkyMjs2RkVCOzZGRUI7NkZFQjs2RkVCOworRjkyMzs4NUNEOzg1Q0Q7ODVDRDs4NUNEOworRjkyNDs4OTY0Ozg5NjQ7ODk2NDs4OTY0OworRjkyNTs2MkM5OzYyQzk7NjJDOTs2MkM5OworRjkyNjs4MUQ4OzgxRDg7ODFEODs4MUQ4OworRjkyNzs4ODFGOzg4MUY7ODgxRjs4ODFGOworRjkyODs1RUNBOzVFQ0E7NUVDQTs1RUNBOworRjkyOTs2NzE3OzY3MTc7NjcxNzs2NzE3OworRjkyQTs2RDZBOzZENkE7NkQ2QTs2RDZBOworRjkyQjs3MkZDOzcyRkM7NzJGQzs3MkZDOworRjkyQzs5MENFOzkwQ0U7OTBDRTs5MENFOworRjkyRDs0Rjg2OzRGODY7NEY4Njs0Rjg2OworRjkyRTs1MUI3OzUxQjc7NTFCNzs1MUI3OworRjkyRjs1MkRFOzUyREU7NTJERTs1MkRFOworRjkzMDs2NEM0OzY0QzQ7NjRDNDs2NEM0OworRjkzMTs2QUQzOzZBRDM7NkFEMzs2QUQzOworRjkzMjs3MjEwOzcyMTA7NzIxMDs3MjEwOworRjkzMzs3NkU3Ozc2RTc7NzZFNzs3NkU3OworRjkzNDs4MDAxOzgwMDE7ODAwMTs4MDAxOworRjkzNTs4NjA2Ozg2MDY7ODYwNjs4NjA2OworRjkzNjs4NjVDOzg2NUM7ODY1Qzs4NjVDOworRjkzNzs4REVGOzhERUY7OERFRjs4REVGOworRjkzODs5NzMyOzk3MzI7OTczMjs5NzMyOworRjkzOTs5QjZGOzlCNkY7OUI2Rjs5QjZGOworRjkzQTs5REZBOzlERkE7OURGQTs5REZBOworRjkzQjs3ODhDOzc4OEM7Nzg4Qzs3ODhDOworRjkzQzs3OTdGOzc5N0Y7Nzk3Rjs3OTdGOworRjkzRDs3REEwOzdEQTA7N0RBMDs3REEwOworRjkzRTs4M0M5OzgzQzk7ODNDOTs4M0M5OworRjkzRjs5MzA0OzkzMDQ7OTMwNDs5MzA0OworRjk0MDs5RTdGOzlFN0Y7OUU3Rjs5RTdGOworRjk0MTs4QUQ2OzhBRDY7OEFENjs4QUQ2OworRjk0Mjs1OERGOzU4REY7NThERjs1OERGOworRjk0Mzs1RjA0OzVGMDQ7NUYwNDs1RjA0OworRjk0NDs3QzYwOzdDNjA7N0M2MDs3QzYwOworRjk0NTs4MDdFOzgwN0U7ODA3RTs4MDdFOworRjk0Njs3MjYyOzcyNjI7NzI2Mjs3MjYyOworRjk0Nzs3OENBOzc4Q0E7NzhDQTs3OENBOworRjk0ODs4Q0MyOzhDQzI7OENDMjs4Q0MyOworRjk0OTs5NkY3Ozk2Rjc7OTZGNzs5NkY3OworRjk0QTs1OEQ4OzU4RDg7NThEODs1OEQ4OworRjk0Qjs1QzYyOzVDNjI7NUM2Mjs1QzYyOworRjk0Qzs2QTEzOzZBMTM7NkExMzs2QTEzOworRjk0RDs2RERBOzZEREE7NkREQTs2RERBOworRjk0RTs2RjBGOzZGMEY7NkYwRjs2RjBGOworRjk0Rjs3RDJGOzdEMkY7N0QyRjs3RDJGOworRjk1MDs3RTM3OzdFMzc7N0UzNzs3RTM3OworRjk1MTs5NjRCOzk2NEI7OTY0Qjs5NjRCOworRjk1Mjs1MkQyOzUyRDI7NTJEMjs1MkQyOworRjk1Mzs4MDhCOzgwOEI7ODA4Qjs4MDhCOworRjk1NDs1MURDOzUxREM7NTFEQzs1MURDOworRjk1NTs1MUNDOzUxQ0M7NTFDQzs1MUNDOworRjk1Njs3QTFDOzdBMUM7N0ExQzs3QTFDOworRjk1Nzs3REJFOzdEQkU7N0RCRTs3REJFOworRjk1ODs4M0YxOzgzRjE7ODNGMTs4M0YxOworRjk1OTs5Njc1Ozk2NzU7OTY3NTs5Njc1OworRjk1QTs4QjgwOzhCODA7OEI4MDs4QjgwOworRjk1Qjs2MkNGOzYyQ0Y7NjJDRjs2MkNGOworRjk1Qzs2QTAyOzZBMDI7NkEwMjs2QTAyOworRjk1RDs4QUZFOzhBRkU7OEFGRTs4QUZFOworRjk1RTs0RTM5OzRFMzk7NEUzOTs0RTM5OworRjk1Rjs1QkU3OzVCRTc7NUJFNzs1QkU3OworRjk2MDs2MDEyOzYwMTI7NjAxMjs2MDEyOworRjk2MTs3Mzg3OzczODc7NzM4Nzs3Mzg3OworRjk2Mjs3NTcwOzc1NzA7NzU3MDs3NTcwOworRjk2Mzs1MzE3OzUzMTc7NTMxNzs1MzE3OworRjk2NDs3OEZCOzc4RkI7NzhGQjs3OEZCOworRjk2NTs0RkJGOzRGQkY7NEZCRjs0RkJGOworRjk2Njs1RkE5OzVGQTk7NUZBOTs1RkE5OworRjk2Nzs0RTBEOzRFMEQ7NEUwRDs0RTBEOworRjk2ODs2Q0NDOzZDQ0M7NkNDQzs2Q0NDOworRjk2OTs2NTc4OzY1Nzg7NjU3ODs2NTc4OworRjk2QTs3RDIyOzdEMjI7N0QyMjs3RDIyOworRjk2Qjs1M0MzOzUzQzM7NTNDMzs1M0MzOworRjk2Qzs1ODVFOzU4NUU7NTg1RTs1ODVFOworRjk2RDs3NzAxOzc3MDE7NzcwMTs3NzAxOworRjk2RTs4NDQ5Ozg0NDk7ODQ0OTs4NDQ5OworRjk2Rjs4QUFBOzhBQUE7OEFBQTs4QUFBOworRjk3MDs2QkJBOzZCQkE7NkJCQTs2QkJBOworRjk3MTs4RkIwOzhGQjA7OEZCMDs4RkIwOworRjk3Mjs2Qzg4OzZDODg7NkM4ODs2Qzg4OworRjk3Mzs2MkZFOzYyRkU7NjJGRTs2MkZFOworRjk3NDs4MkU1OzgyRTU7ODJFNTs4MkU1OworRjk3NTs2M0EwOzYzQTA7NjNBMDs2M0EwOworRjk3Njs3NTY1Ozc1NjU7NzU2NTs3NTY1OworRjk3Nzs0RUFFOzRFQUU7NEVBRTs0RUFFOworRjk3ODs1MTY5OzUxNjk7NTE2OTs1MTY5OworRjk3OTs1MUM5OzUxQzk7NTFDOTs1MUM5OworRjk3QTs2ODgxOzY4ODE7Njg4MTs2ODgxOworRjk3Qjs3Q0U3OzdDRTc7N0NFNzs3Q0U3OworRjk3Qzs4MjZGOzgyNkY7ODI2Rjs4MjZGOworRjk3RDs4QUQyOzhBRDI7OEFEMjs4QUQyOworRjk3RTs5MUNGOzkxQ0Y7OTFDRjs5MUNGOworRjk3Rjs1MkY1OzUyRjU7NTJGNTs1MkY1OworRjk4MDs1NDQyOzU0NDI7NTQ0Mjs1NDQyOworRjk4MTs1OTczOzU5NzM7NTk3Mzs1OTczOworRjk4Mjs1RUVDOzVFRUM7NUVFQzs1RUVDOworRjk4Mzs2NUM1OzY1QzU7NjVDNTs2NUM1OworRjk4NDs2RkZFOzZGRkU7NkZGRTs2RkZFOworRjk4NTs3OTJBOzc5MkE7NzkyQTs3OTJBOworRjk4Njs5NUFEOzk1QUQ7OTVBRDs5NUFEOworRjk4Nzs5QTZBOzlBNkE7OUE2QTs5QTZBOworRjk4ODs5RTk3OzlFOTc7OUU5Nzs5RTk3OworRjk4OTs5RUNFOzlFQ0U7OUVDRTs5RUNFOworRjk4QTs1MjlCOzUyOUI7NTI5Qjs1MjlCOworRjk4Qjs2NkM2OzY2QzY7NjZDNjs2NkM2OworRjk4Qzs2Qjc3OzZCNzc7NkI3Nzs2Qjc3OworRjk4RDs4RjYyOzhGNjI7OEY2Mjs4RjYyOworRjk4RTs1RTc0OzVFNzQ7NUU3NDs1RTc0OworRjk4Rjs2MTkwOzYxOTA7NjE5MDs2MTkwOworRjk5MDs2MjAwOzYyMDA7NjIwMDs2MjAwOworRjk5MTs2NDlBOzY0OUE7NjQ5QTs2NDlBOworRjk5Mjs2RjIzOzZGMjM7NkYyMzs2RjIzOworRjk5Mzs3MTQ5OzcxNDk7NzE0OTs3MTQ5OworRjk5NDs3NDg5Ozc0ODk7NzQ4OTs3NDg5OworRjk5NTs3OUNBOzc5Q0E7NzlDQTs3OUNBOworRjk5Njs3REY0OzdERjQ7N0RGNDs3REY0OworRjk5Nzs4MDZGOzgwNkY7ODA2Rjs4MDZGOworRjk5ODs4RjI2OzhGMjY7OEYyNjs4RjI2OworRjk5OTs4NEVFOzg0RUU7ODRFRTs4NEVFOworRjk5QTs5MDIzOzkwMjM7OTAyMzs5MDIzOworRjk5Qjs5MzRBOzkzNEE7OTM0QTs5MzRBOworRjk5Qzs1MjE3OzUyMTc7NTIxNzs1MjE3OworRjk5RDs1MkEzOzUyQTM7NTJBMzs1MkEzOworRjk5RTs1NEJEOzU0QkQ7NTRCRDs1NEJEOworRjk5Rjs3MEM4OzcwQzg7NzBDODs3MEM4OworRjlBMDs4OEMyOzg4QzI7ODhDMjs4OEMyOworRjlBMTs4QUFBOzhBQUE7OEFBQTs4QUFBOworRjlBMjs1RUM5OzVFQzk7NUVDOTs1RUM5OworRjlBMzs1RkY1OzVGRjU7NUZGNTs1RkY1OworRjlBNDs2MzdCOzYzN0I7NjM3Qjs2MzdCOworRjlBNTs2QkFFOzZCQUU7NkJBRTs2QkFFOworRjlBNjs3QzNFOzdDM0U7N0MzRTs3QzNFOworRjlBNzs3Mzc1OzczNzU7NzM3NTs3Mzc1OworRjlBODs0RUU0OzRFRTQ7NEVFNDs0RUU0OworRjlBOTs1NkY5OzU2Rjk7NTZGOTs1NkY5OworRjlBQTs1QkU3OzVCRTc7NUJFNzs1QkU3OworRjlBQjs1REJBOzVEQkE7NURCQTs1REJBOworRjlBQzs2MDFDOzYwMUM7NjAxQzs2MDFDOworRjlBRDs3M0IyOzczQjI7NzNCMjs3M0IyOworRjlBRTs3NDY5Ozc0Njk7NzQ2OTs3NDY5OworRjlBRjs3RjlBOzdGOUE7N0Y5QTs3RjlBOworRjlCMDs4MDQ2OzgwNDY7ODA0Njs4MDQ2OworRjlCMTs5MjM0OzkyMzQ7OTIzNDs5MjM0OworRjlCMjs5NkY2Ozk2RjY7OTZGNjs5NkY2OworRjlCMzs5NzQ4Ozk3NDg7OTc0ODs5NzQ4OworRjlCNDs5ODE4Ozk4MTg7OTgxODs5ODE4OworRjlCNTs0RjhCOzRGOEI7NEY4Qjs0RjhCOworRjlCNjs3OUFFOzc5QUU7NzlBRTs3OUFFOworRjlCNzs5MUI0OzkxQjQ7OTFCNDs5MUI0OworRjlCODs5NkI4Ozk2Qjg7OTZCODs5NkI4OworRjlCOTs2MEUxOzYwRTE7NjBFMTs2MEUxOworRjlCQTs0RTg2OzRFODY7NEU4Njs0RTg2OworRjlCQjs1MERBOzUwREE7NTBEQTs1MERBOworRjlCQzs1QkVFOzVCRUU7NUJFRTs1QkVFOworRjlCRDs1QzNGOzVDM0Y7NUMzRjs1QzNGOworRjlCRTs2NTk5OzY1OTk7NjU5OTs2NTk5OworRjlCRjs2QTAyOzZBMDI7NkEwMjs2QTAyOworRjlDMDs3MUNFOzcxQ0U7NzFDRTs3MUNFOworRjlDMTs3NjQyOzc2NDI7NzY0Mjs3NjQyOworRjlDMjs4NEZDOzg0RkM7ODRGQzs4NEZDOworRjlDMzs5MDdDOzkwN0M7OTA3Qzs5MDdDOworRjlDNDs5RjhEOzlGOEQ7OUY4RDs5RjhEOworRjlDNTs2Njg4OzY2ODg7NjY4ODs2Njg4OworRjlDNjs5NjJFOzk2MkU7OTYyRTs5NjJFOworRjlDNzs1Mjg5OzUyODk7NTI4OTs1Mjg5OworRjlDODs2NzdCOzY3N0I7Njc3Qjs2NzdCOworRjlDOTs2N0YzOzY3RjM7NjdGMzs2N0YzOworRjlDQTs2RDQxOzZENDE7NkQ0MTs2RDQxOworRjlDQjs2RTlDOzZFOUM7NkU5Qzs2RTlDOworRjlDQzs3NDA5Ozc0MDk7NzQwOTs3NDA5OworRjlDRDs3NTU5Ozc1NTk7NzU1OTs3NTU5OworRjlDRTs3ODZCOzc4NkI7Nzg2Qjs3ODZCOworRjlDRjs3RDEwOzdEMTA7N0QxMDs3RDEwOworRjlEMDs5ODVFOzk4NUU7OTg1RTs5ODVFOworRjlEMTs1MTZEOzUxNkQ7NTE2RDs1MTZEOworRjlEMjs2MjJFOzYyMkU7NjIyRTs2MjJFOworRjlEMzs5Njc4Ozk2Nzg7OTY3ODs5Njc4OworRjlENDs1MDJCOzUwMkI7NTAyQjs1MDJCOworRjlENTs1RDE5OzVEMTk7NUQxOTs1RDE5OworRjlENjs2REVBOzZERUE7NkRFQTs2REVBOworRjlENzs4RjJBOzhGMkE7OEYyQTs4RjJBOworRjlEODs1RjhCOzVGOEI7NUY4Qjs1RjhCOworRjlEOTs2MTQ0OzYxNDQ7NjE0NDs2MTQ0OworRjlEQTs2ODE3OzY4MTc7NjgxNzs2ODE3OworRjlEQjs3Mzg3OzczODc7NzM4Nzs3Mzg3OworRjlEQzs5Njg2Ozk2ODY7OTY4Njs5Njg2OworRjlERDs1MjI5OzUyMjk7NTIyOTs1MjI5OworRjlERTs1NDBGOzU0MEY7NTQwRjs1NDBGOworRjlERjs1QzY1OzVDNjU7NUM2NTs1QzY1OworRjlFMDs2NjEzOzY2MTM7NjYxMzs2NjEzOworRjlFMTs2NzRFOzY3NEU7Njc0RTs2NzRFOworRjlFMjs2OEE4OzY4QTg7NjhBODs2OEE4OworRjlFMzs2Q0U1OzZDRTU7NkNFNTs2Q0U1OworRjlFNDs3NDA2Ozc0MDY7NzQwNjs3NDA2OworRjlFNTs3NUUyOzc1RTI7NzVFMjs3NUUyOworRjlFNjs3Rjc5OzdGNzk7N0Y3OTs3Rjc5OworRjlFNzs4OENGOzg4Q0Y7ODhDRjs4OENGOworRjlFODs4OEUxOzg4RTE7ODhFMTs4OEUxOworRjlFOTs5MUNDOzkxQ0M7OTFDQzs5MUNDOworRjlFQTs5NkUyOzk2RTI7OTZFMjs5NkUyOworRjlFQjs1MzNGOzUzM0Y7NTMzRjs1MzNGOworRjlFQzs2RUJBOzZFQkE7NkVCQTs2RUJBOworRjlFRDs1NDFEOzU0MUQ7NTQxRDs1NDFEOworRjlFRTs3MUQwOzcxRDA7NzFEMDs3MUQwOworRjlFRjs3NDk4Ozc0OTg7NzQ5ODs3NDk4OworRjlGMDs4NUZBOzg1RkE7ODVGQTs4NUZBOworRjlGMTs5NkEzOzk2QTM7OTZBMzs5NkEzOworRjlGMjs5QzU3OzlDNTc7OUM1Nzs5QzU3OworRjlGMzs5RTlGOzlFOUY7OUU5Rjs5RTlGOworRjlGNDs2Nzk3OzY3OTc7Njc5Nzs2Nzk3OworRjlGNTs2RENCOzZEQ0I7NkRDQjs2RENCOworRjlGNjs4MUU4OzgxRTg7ODFFODs4MUU4OworRjlGNzs3QUNCOzdBQ0I7N0FDQjs3QUNCOworRjlGODs3QjIwOzdCMjA7N0IyMDs3QjIwOworRjlGOTs3QzkyOzdDOTI7N0M5Mjs3QzkyOworRjlGQTs3MkMwOzcyQzA7NzJDMDs3MkMwOworRjlGQjs3MDk5OzcwOTk7NzA5OTs3MDk5OworRjlGQzs4QjU4OzhCNTg7OEI1ODs4QjU4OworRjlGRDs0RUMwOzRFQzA7NEVDMDs0RUMwOworRjlGRTs4MzM2OzgzMzY7ODMzNjs4MzM2OworRjlGRjs1MjNBOzUyM0E7NTIzQTs1MjNBOworRkEwMDs1MjA3OzUyMDc7NTIwNzs1MjA3OworRkEwMTs1RUE2OzVFQTY7NUVBNjs1RUE2OworRkEwMjs2MkQzOzYyRDM7NjJEMzs2MkQzOworRkEwMzs3Q0Q2OzdDRDY7N0NENjs3Q0Q2OworRkEwNDs1Qjg1OzVCODU7NUI4NTs1Qjg1OworRkEwNTs2RDFFOzZEMUU7NkQxRTs2RDFFOworRkEwNjs2NkI0OzY2QjQ7NjZCNDs2NkI0OworRkEwNzs4RjNCOzhGM0I7OEYzQjs4RjNCOworRkEwODs4ODRDOzg4NEM7ODg0Qzs4ODRDOworRkEwOTs5NjREOzk2NEQ7OTY0RDs5NjREOworRkEwQTs4OThCOzg5OEI7ODk4Qjs4OThCOworRkEwQjs1RUQzOzVFRDM7NUVEMzs1RUQzOworRkEwQzs1MTQwOzUxNDA7NTE0MDs1MTQwOworRkEwRDs1NUMwOzU1QzA7NTVDMDs1NUMwOworRkExMDs1ODVBOzU4NUE7NTg1QTs1ODVBOworRkExMjs2Njc0OzY2NzQ7NjY3NDs2Njc0OworRkExNTs1MURFOzUxREU7NTFERTs1MURFOworRkExNjs3MzJBOzczMkE7NzMyQTs3MzJBOworRkExNzs3NkNBOzc2Q0E7NzZDQTs3NkNBOworRkExODs3OTNDOzc5M0M7NzkzQzs3OTNDOworRkExOTs3OTVFOzc5NUU7Nzk1RTs3OTVFOworRkExQTs3OTY1Ozc5NjU7Nzk2NTs3OTY1OworRkExQjs3OThGOzc5OEY7Nzk4Rjs3OThGOworRkExQzs5NzU2Ozk3NTY7OTc1Njs5NzU2OworRkExRDs3Q0JFOzdDQkU7N0NCRTs3Q0JFOworRkExRTs3RkJEOzdGQkQ7N0ZCRDs3RkJEOworRkEyMDs4NjEyOzg2MTI7ODYxMjs4NjEyOworRkEyMjs4QUY4OzhBRjg7OEFGODs4QUY4OworRkEyNTs5MDM4OzkwMzg7OTAzODs5MDM4OworRkEyNjs5MEZEOzkwRkQ7OTBGRDs5MEZEOworRkEyQTs5OEVGOzk4RUY7OThFRjs5OEVGOworRkEyQjs5OEZDOzk4RkM7OThGQzs5OEZDOworRkEyQzs5OTI4Ozk5Mjg7OTkyODs5OTI4OworRkEyRDs5REI0OzlEQjQ7OURCNDs5REI0OworRkEzMDs0RkFFOzRGQUU7NEZBRTs0RkFFOworRkEzMTs1MEU3OzUwRTc7NTBFNzs1MEU3OworRkEzMjs1MTREOzUxNEQ7NTE0RDs1MTREOworRkEzMzs1MkM5OzUyQzk7NTJDOTs1MkM5OworRkEzNDs1MkU0OzUyRTQ7NTJFNDs1MkU0OworRkEzNTs1MzUxOzUzNTE7NTM1MTs1MzUxOworRkEzNjs1NTlEOzU1OUQ7NTU5RDs1NTlEOworRkEzNzs1NjA2OzU2MDY7NTYwNjs1NjA2OworRkEzODs1NjY4OzU2Njg7NTY2ODs1NjY4OworRkEzOTs1ODQwOzU4NDA7NTg0MDs1ODQwOworRkEzQTs1OEE4OzU4QTg7NThBODs1OEE4OworRkEzQjs1QzY0OzVDNjQ7NUM2NDs1QzY0OworRkEzQzs1QzZFOzVDNkU7NUM2RTs1QzZFOworRkEzRDs2MDk0OzYwOTQ7NjA5NDs2MDk0OworRkEzRTs2MTY4OzYxNjg7NjE2ODs2MTY4OworRkEzRjs2MThFOzYxOEU7NjE4RTs2MThFOworRkE0MDs2MUYyOzYxRjI7NjFGMjs2MUYyOworRkE0MTs2NTRGOzY1NEY7NjU0Rjs2NTRGOworRkE0Mjs2NUUyOzY1RTI7NjVFMjs2NUUyOworRkE0Mzs2NjkxOzY2OTE7NjY5MTs2NjkxOworRkE0NDs2ODg1OzY4ODU7Njg4NTs2ODg1OworRkE0NTs2RDc3OzZENzc7NkQ3Nzs2RDc3OworRkE0Njs2RTFBOzZFMUE7NkUxQTs2RTFBOworRkE0Nzs2RjIyOzZGMjI7NkYyMjs2RjIyOworRkE0ODs3MTZFOzcxNkU7NzE2RTs3MTZFOworRkE0OTs3MjJCOzcyMkI7NzIyQjs3MjJCOworRkE0QTs3NDIyOzc0MjI7NzQyMjs3NDIyOworRkE0Qjs3ODkxOzc4OTE7Nzg5MTs3ODkxOworRkE0Qzs3OTNFOzc5M0U7NzkzRTs3OTNFOworRkE0RDs3OTQ5Ozc5NDk7Nzk0OTs3OTQ5OworRkE0RTs3OTQ4Ozc5NDg7Nzk0ODs3OTQ4OworRkE0Rjs3OTUwOzc5NTA7Nzk1MDs3OTUwOworRkE1MDs3OTU2Ozc5NTY7Nzk1Njs3OTU2OworRkE1MTs3OTVEOzc5NUQ7Nzk1RDs3OTVEOworRkE1Mjs3OThEOzc5OEQ7Nzk4RDs3OThEOworRkE1Mzs3OThFOzc5OEU7Nzk4RTs3OThFOworRkE1NDs3QTQwOzdBNDA7N0E0MDs3QTQwOworRkE1NTs3QTgxOzdBODE7N0E4MTs3QTgxOworRkE1Njs3QkMwOzdCQzA7N0JDMDs3QkMwOworRkE1Nzs3REY0OzdERjQ7N0RGNDs3REY0OworRkE1ODs3RTA5OzdFMDk7N0UwOTs3RTA5OworRkE1OTs3RTQxOzdFNDE7N0U0MTs3RTQxOworRkE1QTs3RjcyOzdGNzI7N0Y3Mjs3RjcyOworRkE1Qjs4MDA1OzgwMDU7ODAwNTs4MDA1OworRkE1Qzs4MUVEOzgxRUQ7ODFFRDs4MUVEOworRkE1RDs4Mjc5OzgyNzk7ODI3OTs4Mjc5OworRkE1RTs4Mjc5OzgyNzk7ODI3OTs4Mjc5OworRkE1Rjs4NDU3Ozg0NTc7ODQ1Nzs4NDU3OworRkE2MDs4OTEwOzg5MTA7ODkxMDs4OTEwOworRkE2MTs4OTk2Ozg5OTY7ODk5Njs4OTk2OworRkE2Mjs4QjAxOzhCMDE7OEIwMTs4QjAxOworRkE2Mzs4QjM5OzhCMzk7OEIzOTs4QjM5OworRkE2NDs4Q0QzOzhDRDM7OENEMzs4Q0QzOworRkE2NTs4RDA4OzhEMDg7OEQwODs4RDA4OworRkE2Njs4RkI2OzhGQjY7OEZCNjs4RkI2OworRkE2Nzs5MDM4OzkwMzg7OTAzODs5MDM4OworRkE2ODs5NkUzOzk2RTM7OTZFMzs5NkUzOworRkE2OTs5N0ZGOzk3RkY7OTdGRjs5N0ZGOworRkE2QTs5ODNCOzk4M0I7OTgzQjs5ODNCOworRkIwMDtGQjAwO0ZCMDA7MDA2NiAwMDY2OzAwNjYgMDA2NjsKK0ZCMDE7RkIwMTtGQjAxOzAwNjYgMDA2OTswMDY2IDAwNjk7CitGQjAyO0ZCMDI7RkIwMjswMDY2IDAwNkM7MDA2NiAwMDZDOworRkIwMztGQjAzO0ZCMDM7MDA2NiAwMDY2IDAwNjk7MDA2NiAwMDY2IDAwNjk7CitGQjA0O0ZCMDQ7RkIwNDswMDY2IDAwNjYgMDA2QzswMDY2IDAwNjYgMDA2QzsKK0ZCMDU7RkIwNTtGQjA1OzAwNzMgMDA3NDswMDczIDAwNzQ7CitGQjA2O0ZCMDY7RkIwNjswMDczIDAwNzQ7MDA3MyAwMDc0OworRkIxMztGQjEzO0ZCMTM7MDU3NCAwNTc2OzA1NzQgMDU3NjsKK0ZCMTQ7RkIxNDtGQjE0OzA1NzQgMDU2NTswNTc0IDA1NjU7CitGQjE1O0ZCMTU7RkIxNTswNTc0IDA1NkI7MDU3NCAwNTZCOworRkIxNjtGQjE2O0ZCMTY7MDU3RSAwNTc2OzA1N0UgMDU3NjsKK0ZCMTc7RkIxNztGQjE3OzA1NzQgMDU2RDswNTc0IDA1NkQ7CitGQjFEOzA1RDkgMDVCNDswNUQ5IDA1QjQ7MDVEOSAwNUI0OzA1RDkgMDVCNDsKK0ZCMUY7MDVGMiAwNUI3OzA1RjIgMDVCNzswNUYyIDA1Qjc7MDVGMiAwNUI3OworRkIyMDtGQjIwO0ZCMjA7MDVFMjswNUUyOworRkIyMTtGQjIxO0ZCMjE7MDVEMDswNUQwOworRkIyMjtGQjIyO0ZCMjI7MDVEMzswNUQzOworRkIyMztGQjIzO0ZCMjM7MDVENDswNUQ0OworRkIyNDtGQjI0O0ZCMjQ7MDVEQjswNURCOworRkIyNTtGQjI1O0ZCMjU7MDVEQzswNURDOworRkIyNjtGQjI2O0ZCMjY7MDVERDswNUREOworRkIyNztGQjI3O0ZCMjc7MDVFODswNUU4OworRkIyODtGQjI4O0ZCMjg7MDVFQTswNUVBOworRkIyOTtGQjI5O0ZCMjk7MDAyQjswMDJCOworRkIyQTswNUU5IDA1QzE7MDVFOSAwNUMxOzA1RTkgMDVDMTswNUU5IDA1QzE7CitGQjJCOzA1RTkgMDVDMjswNUU5IDA1QzI7MDVFOSAwNUMyOzA1RTkgMDVDMjsKK0ZCMkM7MDVFOSAwNUJDIDA1QzE7MDVFOSAwNUJDIDA1QzE7MDVFOSAwNUJDIDA1QzE7MDVFOSAwNUJDIDA1QzE7CitGQjJEOzA1RTkgMDVCQyAwNUMyOzA1RTkgMDVCQyAwNUMyOzA1RTkgMDVCQyAwNUMyOzA1RTkgMDVCQyAwNUMyOworRkIyRTswNUQwIDA1Qjc7MDVEMCAwNUI3OzA1RDAgMDVCNzswNUQwIDA1Qjc7CitGQjJGOzA1RDAgMDVCODswNUQwIDA1Qjg7MDVEMCAwNUI4OzA1RDAgMDVCODsKK0ZCMzA7MDVEMCAwNUJDOzA1RDAgMDVCQzswNUQwIDA1QkM7MDVEMCAwNUJDOworRkIzMTswNUQxIDA1QkM7MDVEMSAwNUJDOzA1RDEgMDVCQzswNUQxIDA1QkM7CitGQjMyOzA1RDIgMDVCQzswNUQyIDA1QkM7MDVEMiAwNUJDOzA1RDIgMDVCQzsKK0ZCMzM7MDVEMyAwNUJDOzA1RDMgMDVCQzswNUQzIDA1QkM7MDVEMyAwNUJDOworRkIzNDswNUQ0IDA1QkM7MDVENCAwNUJDOzA1RDQgMDVCQzswNUQ0IDA1QkM7CitGQjM1OzA1RDUgMDVCQzswNUQ1IDA1QkM7MDVENSAwNUJDOzA1RDUgMDVCQzsKK0ZCMzY7MDVENiAwNUJDOzA1RDYgMDVCQzswNUQ2IDA1QkM7MDVENiAwNUJDOworRkIzODswNUQ4IDA1QkM7MDVEOCAwNUJDOzA1RDggMDVCQzswNUQ4IDA1QkM7CitGQjM5OzA1RDkgMDVCQzswNUQ5IDA1QkM7MDVEOSAwNUJDOzA1RDkgMDVCQzsKK0ZCM0E7MDVEQSAwNUJDOzA1REEgMDVCQzswNURBIDA1QkM7MDVEQSAwNUJDOworRkIzQjswNURCIDA1QkM7MDVEQiAwNUJDOzA1REIgMDVCQzswNURCIDA1QkM7CitGQjNDOzA1REMgMDVCQzswNURDIDA1QkM7MDVEQyAwNUJDOzA1REMgMDVCQzsKK0ZCM0U7MDVERSAwNUJDOzA1REUgMDVCQzswNURFIDA1QkM7MDVERSAwNUJDOworRkI0MDswNUUwIDA1QkM7MDVFMCAwNUJDOzA1RTAgMDVCQzswNUUwIDA1QkM7CitGQjQxOzA1RTEgMDVCQzswNUUxIDA1QkM7MDVFMSAwNUJDOzA1RTEgMDVCQzsKK0ZCNDM7MDVFMyAwNUJDOzA1RTMgMDVCQzswNUUzIDA1QkM7MDVFMyAwNUJDOworRkI0NDswNUU0IDA1QkM7MDVFNCAwNUJDOzA1RTQgMDVCQzswNUU0IDA1QkM7CitGQjQ2OzA1RTYgMDVCQzswNUU2IDA1QkM7MDVFNiAwNUJDOzA1RTYgMDVCQzsKK0ZCNDc7MDVFNyAwNUJDOzA1RTcgMDVCQzswNUU3IDA1QkM7MDVFNyAwNUJDOworRkI0ODswNUU4IDA1QkM7MDVFOCAwNUJDOzA1RTggMDVCQzswNUU4IDA1QkM7CitGQjQ5OzA1RTkgMDVCQzswNUU5IDA1QkM7MDVFOSAwNUJDOzA1RTkgMDVCQzsKK0ZCNEE7MDVFQSAwNUJDOzA1RUEgMDVCQzswNUVBIDA1QkM7MDVFQSAwNUJDOworRkI0QjswNUQ1IDA1Qjk7MDVENSAwNUI5OzA1RDUgMDVCOTswNUQ1IDA1Qjk7CitGQjRDOzA1RDEgMDVCRjswNUQxIDA1QkY7MDVEMSAwNUJGOzA1RDEgMDVCRjsKK0ZCNEQ7MDVEQiAwNUJGOzA1REIgMDVCRjswNURCIDA1QkY7MDVEQiAwNUJGOworRkI0RTswNUU0IDA1QkY7MDVFNCAwNUJGOzA1RTQgMDVCRjswNUU0IDA1QkY7CitGQjRGO0ZCNEY7RkI0RjswNUQwIDA1REM7MDVEMCAwNURDOworRkI1MDtGQjUwO0ZCNTA7MDY3MTswNjcxOworRkI1MTtGQjUxO0ZCNTE7MDY3MTswNjcxOworRkI1MjtGQjUyO0ZCNTI7MDY3QjswNjdCOworRkI1MztGQjUzO0ZCNTM7MDY3QjswNjdCOworRkI1NDtGQjU0O0ZCNTQ7MDY3QjswNjdCOworRkI1NTtGQjU1O0ZCNTU7MDY3QjswNjdCOworRkI1NjtGQjU2O0ZCNTY7MDY3RTswNjdFOworRkI1NztGQjU3O0ZCNTc7MDY3RTswNjdFOworRkI1ODtGQjU4O0ZCNTg7MDY3RTswNjdFOworRkI1OTtGQjU5O0ZCNTk7MDY3RTswNjdFOworRkI1QTtGQjVBO0ZCNUE7MDY4MDswNjgwOworRkI1QjtGQjVCO0ZCNUI7MDY4MDswNjgwOworRkI1QztGQjVDO0ZCNUM7MDY4MDswNjgwOworRkI1RDtGQjVEO0ZCNUQ7MDY4MDswNjgwOworRkI1RTtGQjVFO0ZCNUU7MDY3QTswNjdBOworRkI1RjtGQjVGO0ZCNUY7MDY3QTswNjdBOworRkI2MDtGQjYwO0ZCNjA7MDY3QTswNjdBOworRkI2MTtGQjYxO0ZCNjE7MDY3QTswNjdBOworRkI2MjtGQjYyO0ZCNjI7MDY3RjswNjdGOworRkI2MztGQjYzO0ZCNjM7MDY3RjswNjdGOworRkI2NDtGQjY0O0ZCNjQ7MDY3RjswNjdGOworRkI2NTtGQjY1O0ZCNjU7MDY3RjswNjdGOworRkI2NjtGQjY2O0ZCNjY7MDY3OTswNjc5OworRkI2NztGQjY3O0ZCNjc7MDY3OTswNjc5OworRkI2ODtGQjY4O0ZCNjg7MDY3OTswNjc5OworRkI2OTtGQjY5O0ZCNjk7MDY3OTswNjc5OworRkI2QTtGQjZBO0ZCNkE7MDZBNDswNkE0OworRkI2QjtGQjZCO0ZCNkI7MDZBNDswNkE0OworRkI2QztGQjZDO0ZCNkM7MDZBNDswNkE0OworRkI2RDtGQjZEO0ZCNkQ7MDZBNDswNkE0OworRkI2RTtGQjZFO0ZCNkU7MDZBNjswNkE2OworRkI2RjtGQjZGO0ZCNkY7MDZBNjswNkE2OworRkI3MDtGQjcwO0ZCNzA7MDZBNjswNkE2OworRkI3MTtGQjcxO0ZCNzE7MDZBNjswNkE2OworRkI3MjtGQjcyO0ZCNzI7MDY4NDswNjg0OworRkI3MztGQjczO0ZCNzM7MDY4NDswNjg0OworRkI3NDtGQjc0O0ZCNzQ7MDY4NDswNjg0OworRkI3NTtGQjc1O0ZCNzU7MDY4NDswNjg0OworRkI3NjtGQjc2O0ZCNzY7MDY4MzswNjgzOworRkI3NztGQjc3O0ZCNzc7MDY4MzswNjgzOworRkI3ODtGQjc4O0ZCNzg7MDY4MzswNjgzOworRkI3OTtGQjc5O0ZCNzk7MDY4MzswNjgzOworRkI3QTtGQjdBO0ZCN0E7MDY4NjswNjg2OworRkI3QjtGQjdCO0ZCN0I7MDY4NjswNjg2OworRkI3QztGQjdDO0ZCN0M7MDY4NjswNjg2OworRkI3RDtGQjdEO0ZCN0Q7MDY4NjswNjg2OworRkI3RTtGQjdFO0ZCN0U7MDY4NzswNjg3OworRkI3RjtGQjdGO0ZCN0Y7MDY4NzswNjg3OworRkI4MDtGQjgwO0ZCODA7MDY4NzswNjg3OworRkI4MTtGQjgxO0ZCODE7MDY4NzswNjg3OworRkI4MjtGQjgyO0ZCODI7MDY4RDswNjhEOworRkI4MztGQjgzO0ZCODM7MDY4RDswNjhEOworRkI4NDtGQjg0O0ZCODQ7MDY4QzswNjhDOworRkI4NTtGQjg1O0ZCODU7MDY4QzswNjhDOworRkI4NjtGQjg2O0ZCODY7MDY4RTswNjhFOworRkI4NztGQjg3O0ZCODc7MDY4RTswNjhFOworRkI4ODtGQjg4O0ZCODg7MDY4ODswNjg4OworRkI4OTtGQjg5O0ZCODk7MDY4ODswNjg4OworRkI4QTtGQjhBO0ZCOEE7MDY5ODswNjk4OworRkI4QjtGQjhCO0ZCOEI7MDY5ODswNjk4OworRkI4QztGQjhDO0ZCOEM7MDY5MTswNjkxOworRkI4RDtGQjhEO0ZCOEQ7MDY5MTswNjkxOworRkI4RTtGQjhFO0ZCOEU7MDZBOTswNkE5OworRkI4RjtGQjhGO0ZCOEY7MDZBOTswNkE5OworRkI5MDtGQjkwO0ZCOTA7MDZBOTswNkE5OworRkI5MTtGQjkxO0ZCOTE7MDZBOTswNkE5OworRkI5MjtGQjkyO0ZCOTI7MDZBRjswNkFGOworRkI5MztGQjkzO0ZCOTM7MDZBRjswNkFGOworRkI5NDtGQjk0O0ZCOTQ7MDZBRjswNkFGOworRkI5NTtGQjk1O0ZCOTU7MDZBRjswNkFGOworRkI5NjtGQjk2O0ZCOTY7MDZCMzswNkIzOworRkI5NztGQjk3O0ZCOTc7MDZCMzswNkIzOworRkI5ODtGQjk4O0ZCOTg7MDZCMzswNkIzOworRkI5OTtGQjk5O0ZCOTk7MDZCMzswNkIzOworRkI5QTtGQjlBO0ZCOUE7MDZCMTswNkIxOworRkI5QjtGQjlCO0ZCOUI7MDZCMTswNkIxOworRkI5QztGQjlDO0ZCOUM7MDZCMTswNkIxOworRkI5RDtGQjlEO0ZCOUQ7MDZCMTswNkIxOworRkI5RTtGQjlFO0ZCOUU7MDZCQTswNkJBOworRkI5RjtGQjlGO0ZCOUY7MDZCQTswNkJBOworRkJBMDtGQkEwO0ZCQTA7MDZCQjswNkJCOworRkJBMTtGQkExO0ZCQTE7MDZCQjswNkJCOworRkJBMjtGQkEyO0ZCQTI7MDZCQjswNkJCOworRkJBMztGQkEzO0ZCQTM7MDZCQjswNkJCOworRkJBNDtGQkE0O0ZCQTQ7MDZDMDswNkQ1IDA2NTQ7CitGQkE1O0ZCQTU7RkJBNTswNkMwOzA2RDUgMDY1NDsKK0ZCQTY7RkJBNjtGQkE2OzA2QzE7MDZDMTsKK0ZCQTc7RkJBNztGQkE3OzA2QzE7MDZDMTsKK0ZCQTg7RkJBODtGQkE4OzA2QzE7MDZDMTsKK0ZCQTk7RkJBOTtGQkE5OzA2QzE7MDZDMTsKK0ZCQUE7RkJBQTtGQkFBOzA2QkU7MDZCRTsKK0ZCQUI7RkJBQjtGQkFCOzA2QkU7MDZCRTsKK0ZCQUM7RkJBQztGQkFDOzA2QkU7MDZCRTsKK0ZCQUQ7RkJBRDtGQkFEOzA2QkU7MDZCRTsKK0ZCQUU7RkJBRTtGQkFFOzA2RDI7MDZEMjsKK0ZCQUY7RkJBRjtGQkFGOzA2RDI7MDZEMjsKK0ZCQjA7RkJCMDtGQkIwOzA2RDM7MDZEMiAwNjU0OworRkJCMTtGQkIxO0ZCQjE7MDZEMzswNkQyIDA2NTQ7CitGQkQzO0ZCRDM7RkJEMzswNkFEOzA2QUQ7CitGQkQ0O0ZCRDQ7RkJENDswNkFEOzA2QUQ7CitGQkQ1O0ZCRDU7RkJENTswNkFEOzA2QUQ7CitGQkQ2O0ZCRDY7RkJENjswNkFEOzA2QUQ7CitGQkQ3O0ZCRDc7RkJENzswNkM3OzA2Qzc7CitGQkQ4O0ZCRDg7RkJEODswNkM3OzA2Qzc7CitGQkQ5O0ZCRDk7RkJEOTswNkM2OzA2QzY7CitGQkRBO0ZCREE7RkJEQTswNkM2OzA2QzY7CitGQkRCO0ZCREI7RkJEQjswNkM4OzA2Qzg7CitGQkRDO0ZCREM7RkJEQzswNkM4OzA2Qzg7CitGQkREO0ZCREQ7RkJERDswNkM3IDA2NzQ7MDZDNyAwNjc0OworRkJERTtGQkRFO0ZCREU7MDZDQjswNkNCOworRkJERjtGQkRGO0ZCREY7MDZDQjswNkNCOworRkJFMDtGQkUwO0ZCRTA7MDZDNTswNkM1OworRkJFMTtGQkUxO0ZCRTE7MDZDNTswNkM1OworRkJFMjtGQkUyO0ZCRTI7MDZDOTswNkM5OworRkJFMztGQkUzO0ZCRTM7MDZDOTswNkM5OworRkJFNDtGQkU0O0ZCRTQ7MDZEMDswNkQwOworRkJFNTtGQkU1O0ZCRTU7MDZEMDswNkQwOworRkJFNjtGQkU2O0ZCRTY7MDZEMDswNkQwOworRkJFNztGQkU3O0ZCRTc7MDZEMDswNkQwOworRkJFODtGQkU4O0ZCRTg7MDY0OTswNjQ5OworRkJFOTtGQkU5O0ZCRTk7MDY0OTswNjQ5OworRkJFQTtGQkVBO0ZCRUE7MDYyNiAwNjI3OzA2NEEgMDY1NCAwNjI3OworRkJFQjtGQkVCO0ZCRUI7MDYyNiAwNjI3OzA2NEEgMDY1NCAwNjI3OworRkJFQztGQkVDO0ZCRUM7MDYyNiAwNkQ1OzA2NEEgMDY1NCAwNkQ1OworRkJFRDtGQkVEO0ZCRUQ7MDYyNiAwNkQ1OzA2NEEgMDY1NCAwNkQ1OworRkJFRTtGQkVFO0ZCRUU7MDYyNiAwNjQ4OzA2NEEgMDY1NCAwNjQ4OworRkJFRjtGQkVGO0ZCRUY7MDYyNiAwNjQ4OzA2NEEgMDY1NCAwNjQ4OworRkJGMDtGQkYwO0ZCRjA7MDYyNiAwNkM3OzA2NEEgMDY1NCAwNkM3OworRkJGMTtGQkYxO0ZCRjE7MDYyNiAwNkM3OzA2NEEgMDY1NCAwNkM3OworRkJGMjtGQkYyO0ZCRjI7MDYyNiAwNkM2OzA2NEEgMDY1NCAwNkM2OworRkJGMztGQkYzO0ZCRjM7MDYyNiAwNkM2OzA2NEEgMDY1NCAwNkM2OworRkJGNDtGQkY0O0ZCRjQ7MDYyNiAwNkM4OzA2NEEgMDY1NCAwNkM4OworRkJGNTtGQkY1O0ZCRjU7MDYyNiAwNkM4OzA2NEEgMDY1NCAwNkM4OworRkJGNjtGQkY2O0ZCRjY7MDYyNiAwNkQwOzA2NEEgMDY1NCAwNkQwOworRkJGNztGQkY3O0ZCRjc7MDYyNiAwNkQwOzA2NEEgMDY1NCAwNkQwOworRkJGODtGQkY4O0ZCRjg7MDYyNiAwNkQwOzA2NEEgMDY1NCAwNkQwOworRkJGOTtGQkY5O0ZCRjk7MDYyNiAwNjQ5OzA2NEEgMDY1NCAwNjQ5OworRkJGQTtGQkZBO0ZCRkE7MDYyNiAwNjQ5OzA2NEEgMDY1NCAwNjQ5OworRkJGQjtGQkZCO0ZCRkI7MDYyNiAwNjQ5OzA2NEEgMDY1NCAwNjQ5OworRkJGQztGQkZDO0ZCRkM7MDZDQzswNkNDOworRkJGRDtGQkZEO0ZCRkQ7MDZDQzswNkNDOworRkJGRTtGQkZFO0ZCRkU7MDZDQzswNkNDOworRkJGRjtGQkZGO0ZCRkY7MDZDQzswNkNDOworRkMwMDtGQzAwO0ZDMDA7MDYyNiAwNjJDOzA2NEEgMDY1NCAwNjJDOworRkMwMTtGQzAxO0ZDMDE7MDYyNiAwNjJEOzA2NEEgMDY1NCAwNjJEOworRkMwMjtGQzAyO0ZDMDI7MDYyNiAwNjQ1OzA2NEEgMDY1NCAwNjQ1OworRkMwMztGQzAzO0ZDMDM7MDYyNiAwNjQ5OzA2NEEgMDY1NCAwNjQ5OworRkMwNDtGQzA0O0ZDMDQ7MDYyNiAwNjRBOzA2NEEgMDY1NCAwNjRBOworRkMwNTtGQzA1O0ZDMDU7MDYyOCAwNjJDOzA2MjggMDYyQzsKK0ZDMDY7RkMwNjtGQzA2OzA2MjggMDYyRDswNjI4IDA2MkQ7CitGQzA3O0ZDMDc7RkMwNzswNjI4IDA2MkU7MDYyOCAwNjJFOworRkMwODtGQzA4O0ZDMDg7MDYyOCAwNjQ1OzA2MjggMDY0NTsKK0ZDMDk7RkMwOTtGQzA5OzA2MjggMDY0OTswNjI4IDA2NDk7CitGQzBBO0ZDMEE7RkMwQTswNjI4IDA2NEE7MDYyOCAwNjRBOworRkMwQjtGQzBCO0ZDMEI7MDYyQSAwNjJDOzA2MkEgMDYyQzsKK0ZDMEM7RkMwQztGQzBDOzA2MkEgMDYyRDswNjJBIDA2MkQ7CitGQzBEO0ZDMEQ7RkMwRDswNjJBIDA2MkU7MDYyQSAwNjJFOworRkMwRTtGQzBFO0ZDMEU7MDYyQSAwNjQ1OzA2MkEgMDY0NTsKK0ZDMEY7RkMwRjtGQzBGOzA2MkEgMDY0OTswNjJBIDA2NDk7CitGQzEwO0ZDMTA7RkMxMDswNjJBIDA2NEE7MDYyQSAwNjRBOworRkMxMTtGQzExO0ZDMTE7MDYyQiAwNjJDOzA2MkIgMDYyQzsKK0ZDMTI7RkMxMjtGQzEyOzA2MkIgMDY0NTswNjJCIDA2NDU7CitGQzEzO0ZDMTM7RkMxMzswNjJCIDA2NDk7MDYyQiAwNjQ5OworRkMxNDtGQzE0O0ZDMTQ7MDYyQiAwNjRBOzA2MkIgMDY0QTsKK0ZDMTU7RkMxNTtGQzE1OzA2MkMgMDYyRDswNjJDIDA2MkQ7CitGQzE2O0ZDMTY7RkMxNjswNjJDIDA2NDU7MDYyQyAwNjQ1OworRkMxNztGQzE3O0ZDMTc7MDYyRCAwNjJDOzA2MkQgMDYyQzsKK0ZDMTg7RkMxODtGQzE4OzA2MkQgMDY0NTswNjJEIDA2NDU7CitGQzE5O0ZDMTk7RkMxOTswNjJFIDA2MkM7MDYyRSAwNjJDOworRkMxQTtGQzFBO0ZDMUE7MDYyRSAwNjJEOzA2MkUgMDYyRDsKK0ZDMUI7RkMxQjtGQzFCOzA2MkUgMDY0NTswNjJFIDA2NDU7CitGQzFDO0ZDMUM7RkMxQzswNjMzIDA2MkM7MDYzMyAwNjJDOworRkMxRDtGQzFEO0ZDMUQ7MDYzMyAwNjJEOzA2MzMgMDYyRDsKK0ZDMUU7RkMxRTtGQzFFOzA2MzMgMDYyRTswNjMzIDA2MkU7CitGQzFGO0ZDMUY7RkMxRjswNjMzIDA2NDU7MDYzMyAwNjQ1OworRkMyMDtGQzIwO0ZDMjA7MDYzNSAwNjJEOzA2MzUgMDYyRDsKK0ZDMjE7RkMyMTtGQzIxOzA2MzUgMDY0NTswNjM1IDA2NDU7CitGQzIyO0ZDMjI7RkMyMjswNjM2IDA2MkM7MDYzNiAwNjJDOworRkMyMztGQzIzO0ZDMjM7MDYzNiAwNjJEOzA2MzYgMDYyRDsKK0ZDMjQ7RkMyNDtGQzI0OzA2MzYgMDYyRTswNjM2IDA2MkU7CitGQzI1O0ZDMjU7RkMyNTswNjM2IDA2NDU7MDYzNiAwNjQ1OworRkMyNjtGQzI2O0ZDMjY7MDYzNyAwNjJEOzA2MzcgMDYyRDsKK0ZDMjc7RkMyNztGQzI3OzA2MzcgMDY0NTswNjM3IDA2NDU7CitGQzI4O0ZDMjg7RkMyODswNjM4IDA2NDU7MDYzOCAwNjQ1OworRkMyOTtGQzI5O0ZDMjk7MDYzOSAwNjJDOzA2MzkgMDYyQzsKK0ZDMkE7RkMyQTtGQzJBOzA2MzkgMDY0NTswNjM5IDA2NDU7CitGQzJCO0ZDMkI7RkMyQjswNjNBIDA2MkM7MDYzQSAwNjJDOworRkMyQztGQzJDO0ZDMkM7MDYzQSAwNjQ1OzA2M0EgMDY0NTsKK0ZDMkQ7RkMyRDtGQzJEOzA2NDEgMDYyQzswNjQxIDA2MkM7CitGQzJFO0ZDMkU7RkMyRTswNjQxIDA2MkQ7MDY0MSAwNjJEOworRkMyRjtGQzJGO0ZDMkY7MDY0MSAwNjJFOzA2NDEgMDYyRTsKK0ZDMzA7RkMzMDtGQzMwOzA2NDEgMDY0NTswNjQxIDA2NDU7CitGQzMxO0ZDMzE7RkMzMTswNjQxIDA2NDk7MDY0MSAwNjQ5OworRkMzMjtGQzMyO0ZDMzI7MDY0MSAwNjRBOzA2NDEgMDY0QTsKK0ZDMzM7RkMzMztGQzMzOzA2NDIgMDYyRDswNjQyIDA2MkQ7CitGQzM0O0ZDMzQ7RkMzNDswNjQyIDA2NDU7MDY0MiAwNjQ1OworRkMzNTtGQzM1O0ZDMzU7MDY0MiAwNjQ5OzA2NDIgMDY0OTsKK0ZDMzY7RkMzNjtGQzM2OzA2NDIgMDY0QTswNjQyIDA2NEE7CitGQzM3O0ZDMzc7RkMzNzswNjQzIDA2Mjc7MDY0MyAwNjI3OworRkMzODtGQzM4O0ZDMzg7MDY0MyAwNjJDOzA2NDMgMDYyQzsKK0ZDMzk7RkMzOTtGQzM5OzA2NDMgMDYyRDswNjQzIDA2MkQ7CitGQzNBO0ZDM0E7RkMzQTswNjQzIDA2MkU7MDY0MyAwNjJFOworRkMzQjtGQzNCO0ZDM0I7MDY0MyAwNjQ0OzA2NDMgMDY0NDsKK0ZDM0M7RkMzQztGQzNDOzA2NDMgMDY0NTswNjQzIDA2NDU7CitGQzNEO0ZDM0Q7RkMzRDswNjQzIDA2NDk7MDY0MyAwNjQ5OworRkMzRTtGQzNFO0ZDM0U7MDY0MyAwNjRBOzA2NDMgMDY0QTsKK0ZDM0Y7RkMzRjtGQzNGOzA2NDQgMDYyQzswNjQ0IDA2MkM7CitGQzQwO0ZDNDA7RkM0MDswNjQ0IDA2MkQ7MDY0NCAwNjJEOworRkM0MTtGQzQxO0ZDNDE7MDY0NCAwNjJFOzA2NDQgMDYyRTsKK0ZDNDI7RkM0MjtGQzQyOzA2NDQgMDY0NTswNjQ0IDA2NDU7CitGQzQzO0ZDNDM7RkM0MzswNjQ0IDA2NDk7MDY0NCAwNjQ5OworRkM0NDtGQzQ0O0ZDNDQ7MDY0NCAwNjRBOzA2NDQgMDY0QTsKK0ZDNDU7RkM0NTtGQzQ1OzA2NDUgMDYyQzswNjQ1IDA2MkM7CitGQzQ2O0ZDNDY7RkM0NjswNjQ1IDA2MkQ7MDY0NSAwNjJEOworRkM0NztGQzQ3O0ZDNDc7MDY0NSAwNjJFOzA2NDUgMDYyRTsKK0ZDNDg7RkM0ODtGQzQ4OzA2NDUgMDY0NTswNjQ1IDA2NDU7CitGQzQ5O0ZDNDk7RkM0OTswNjQ1IDA2NDk7MDY0NSAwNjQ5OworRkM0QTtGQzRBO0ZDNEE7MDY0NSAwNjRBOzA2NDUgMDY0QTsKK0ZDNEI7RkM0QjtGQzRCOzA2NDYgMDYyQzswNjQ2IDA2MkM7CitGQzRDO0ZDNEM7RkM0QzswNjQ2IDA2MkQ7MDY0NiAwNjJEOworRkM0RDtGQzREO0ZDNEQ7MDY0NiAwNjJFOzA2NDYgMDYyRTsKK0ZDNEU7RkM0RTtGQzRFOzA2NDYgMDY0NTswNjQ2IDA2NDU7CitGQzRGO0ZDNEY7RkM0RjswNjQ2IDA2NDk7MDY0NiAwNjQ5OworRkM1MDtGQzUwO0ZDNTA7MDY0NiAwNjRBOzA2NDYgMDY0QTsKK0ZDNTE7RkM1MTtGQzUxOzA2NDcgMDYyQzswNjQ3IDA2MkM7CitGQzUyO0ZDNTI7RkM1MjswNjQ3IDA2NDU7MDY0NyAwNjQ1OworRkM1MztGQzUzO0ZDNTM7MDY0NyAwNjQ5OzA2NDcgMDY0OTsKK0ZDNTQ7RkM1NDtGQzU0OzA2NDcgMDY0QTswNjQ3IDA2NEE7CitGQzU1O0ZDNTU7RkM1NTswNjRBIDA2MkM7MDY0QSAwNjJDOworRkM1NjtGQzU2O0ZDNTY7MDY0QSAwNjJEOzA2NEEgMDYyRDsKK0ZDNTc7RkM1NztGQzU3OzA2NEEgMDYyRTswNjRBIDA2MkU7CitGQzU4O0ZDNTg7RkM1ODswNjRBIDA2NDU7MDY0QSAwNjQ1OworRkM1OTtGQzU5O0ZDNTk7MDY0QSAwNjQ5OzA2NEEgMDY0OTsKK0ZDNUE7RkM1QTtGQzVBOzA2NEEgMDY0QTswNjRBIDA2NEE7CitGQzVCO0ZDNUI7RkM1QjswNjMwIDA2NzA7MDYzMCAwNjcwOworRkM1QztGQzVDO0ZDNUM7MDYzMSAwNjcwOzA2MzEgMDY3MDsKK0ZDNUQ7RkM1RDtGQzVEOzA2NDkgMDY3MDswNjQ5IDA2NzA7CitGQzVFO0ZDNUU7RkM1RTswMDIwIDA2NEMgMDY1MTswMDIwIDA2NEMgMDY1MTsKK0ZDNUY7RkM1RjtGQzVGOzAwMjAgMDY0RCAwNjUxOzAwMjAgMDY0RCAwNjUxOworRkM2MDtGQzYwO0ZDNjA7MDAyMCAwNjRFIDA2NTE7MDAyMCAwNjRFIDA2NTE7CitGQzYxO0ZDNjE7RkM2MTswMDIwIDA2NEYgMDY1MTswMDIwIDA2NEYgMDY1MTsKK0ZDNjI7RkM2MjtGQzYyOzAwMjAgMDY1MCAwNjUxOzAwMjAgMDY1MCAwNjUxOworRkM2MztGQzYzO0ZDNjM7MDAyMCAwNjUxIDA2NzA7MDAyMCAwNjUxIDA2NzA7CitGQzY0O0ZDNjQ7RkM2NDswNjI2IDA2MzE7MDY0QSAwNjU0IDA2MzE7CitGQzY1O0ZDNjU7RkM2NTswNjI2IDA2MzI7MDY0QSAwNjU0IDA2MzI7CitGQzY2O0ZDNjY7RkM2NjswNjI2IDA2NDU7MDY0QSAwNjU0IDA2NDU7CitGQzY3O0ZDNjc7RkM2NzswNjI2IDA2NDY7MDY0QSAwNjU0IDA2NDY7CitGQzY4O0ZDNjg7RkM2ODswNjI2IDA2NDk7MDY0QSAwNjU0IDA2NDk7CitGQzY5O0ZDNjk7RkM2OTswNjI2IDA2NEE7MDY0QSAwNjU0IDA2NEE7CitGQzZBO0ZDNkE7RkM2QTswNjI4IDA2MzE7MDYyOCAwNjMxOworRkM2QjtGQzZCO0ZDNkI7MDYyOCAwNjMyOzA2MjggMDYzMjsKK0ZDNkM7RkM2QztGQzZDOzA2MjggMDY0NTswNjI4IDA2NDU7CitGQzZEO0ZDNkQ7RkM2RDswNjI4IDA2NDY7MDYyOCAwNjQ2OworRkM2RTtGQzZFO0ZDNkU7MDYyOCAwNjQ5OzA2MjggMDY0OTsKK0ZDNkY7RkM2RjtGQzZGOzA2MjggMDY0QTswNjI4IDA2NEE7CitGQzcwO0ZDNzA7RkM3MDswNjJBIDA2MzE7MDYyQSAwNjMxOworRkM3MTtGQzcxO0ZDNzE7MDYyQSAwNjMyOzA2MkEgMDYzMjsKK0ZDNzI7RkM3MjtGQzcyOzA2MkEgMDY0NTswNjJBIDA2NDU7CitGQzczO0ZDNzM7RkM3MzswNjJBIDA2NDY7MDYyQSAwNjQ2OworRkM3NDtGQzc0O0ZDNzQ7MDYyQSAwNjQ5OzA2MkEgMDY0OTsKK0ZDNzU7RkM3NTtGQzc1OzA2MkEgMDY0QTswNjJBIDA2NEE7CitGQzc2O0ZDNzY7RkM3NjswNjJCIDA2MzE7MDYyQiAwNjMxOworRkM3NztGQzc3O0ZDNzc7MDYyQiAwNjMyOzA2MkIgMDYzMjsKK0ZDNzg7RkM3ODtGQzc4OzA2MkIgMDY0NTswNjJCIDA2NDU7CitGQzc5O0ZDNzk7RkM3OTswNjJCIDA2NDY7MDYyQiAwNjQ2OworRkM3QTtGQzdBO0ZDN0E7MDYyQiAwNjQ5OzA2MkIgMDY0OTsKK0ZDN0I7RkM3QjtGQzdCOzA2MkIgMDY0QTswNjJCIDA2NEE7CitGQzdDO0ZDN0M7RkM3QzswNjQxIDA2NDk7MDY0MSAwNjQ5OworRkM3RDtGQzdEO0ZDN0Q7MDY0MSAwNjRBOzA2NDEgMDY0QTsKK0ZDN0U7RkM3RTtGQzdFOzA2NDIgMDY0OTswNjQyIDA2NDk7CitGQzdGO0ZDN0Y7RkM3RjswNjQyIDA2NEE7MDY0MiAwNjRBOworRkM4MDtGQzgwO0ZDODA7MDY0MyAwNjI3OzA2NDMgMDYyNzsKK0ZDODE7RkM4MTtGQzgxOzA2NDMgMDY0NDswNjQzIDA2NDQ7CitGQzgyO0ZDODI7RkM4MjswNjQzIDA2NDU7MDY0MyAwNjQ1OworRkM4MztGQzgzO0ZDODM7MDY0MyAwNjQ5OzA2NDMgMDY0OTsKK0ZDODQ7RkM4NDtGQzg0OzA2NDMgMDY0QTswNjQzIDA2NEE7CitGQzg1O0ZDODU7RkM4NTswNjQ0IDA2NDU7MDY0NCAwNjQ1OworRkM4NjtGQzg2O0ZDODY7MDY0NCAwNjQ5OzA2NDQgMDY0OTsKK0ZDODc7RkM4NztGQzg3OzA2NDQgMDY0QTswNjQ0IDA2NEE7CitGQzg4O0ZDODg7RkM4ODswNjQ1IDA2Mjc7MDY0NSAwNjI3OworRkM4OTtGQzg5O0ZDODk7MDY0NSAwNjQ1OzA2NDUgMDY0NTsKK0ZDOEE7RkM4QTtGQzhBOzA2NDYgMDYzMTswNjQ2IDA2MzE7CitGQzhCO0ZDOEI7RkM4QjswNjQ2IDA2MzI7MDY0NiAwNjMyOworRkM4QztGQzhDO0ZDOEM7MDY0NiAwNjQ1OzA2NDYgMDY0NTsKK0ZDOEQ7RkM4RDtGQzhEOzA2NDYgMDY0NjswNjQ2IDA2NDY7CitGQzhFO0ZDOEU7RkM4RTswNjQ2IDA2NDk7MDY0NiAwNjQ5OworRkM4RjtGQzhGO0ZDOEY7MDY0NiAwNjRBOzA2NDYgMDY0QTsKK0ZDOTA7RkM5MDtGQzkwOzA2NDkgMDY3MDswNjQ5IDA2NzA7CitGQzkxO0ZDOTE7RkM5MTswNjRBIDA2MzE7MDY0QSAwNjMxOworRkM5MjtGQzkyO0ZDOTI7MDY0QSAwNjMyOzA2NEEgMDYzMjsKK0ZDOTM7RkM5MztGQzkzOzA2NEEgMDY0NTswNjRBIDA2NDU7CitGQzk0O0ZDOTQ7RkM5NDswNjRBIDA2NDY7MDY0QSAwNjQ2OworRkM5NTtGQzk1O0ZDOTU7MDY0QSAwNjQ5OzA2NEEgMDY0OTsKK0ZDOTY7RkM5NjtGQzk2OzA2NEEgMDY0QTswNjRBIDA2NEE7CitGQzk3O0ZDOTc7RkM5NzswNjI2IDA2MkM7MDY0QSAwNjU0IDA2MkM7CitGQzk4O0ZDOTg7RkM5ODswNjI2IDA2MkQ7MDY0QSAwNjU0IDA2MkQ7CitGQzk5O0ZDOTk7RkM5OTswNjI2IDA2MkU7MDY0QSAwNjU0IDA2MkU7CitGQzlBO0ZDOUE7RkM5QTswNjI2IDA2NDU7MDY0QSAwNjU0IDA2NDU7CitGQzlCO0ZDOUI7RkM5QjswNjI2IDA2NDc7MDY0QSAwNjU0IDA2NDc7CitGQzlDO0ZDOUM7RkM5QzswNjI4IDA2MkM7MDYyOCAwNjJDOworRkM5RDtGQzlEO0ZDOUQ7MDYyOCAwNjJEOzA2MjggMDYyRDsKK0ZDOUU7RkM5RTtGQzlFOzA2MjggMDYyRTswNjI4IDA2MkU7CitGQzlGO0ZDOUY7RkM5RjswNjI4IDA2NDU7MDYyOCAwNjQ1OworRkNBMDtGQ0EwO0ZDQTA7MDYyOCAwNjQ3OzA2MjggMDY0NzsKK0ZDQTE7RkNBMTtGQ0ExOzA2MkEgMDYyQzswNjJBIDA2MkM7CitGQ0EyO0ZDQTI7RkNBMjswNjJBIDA2MkQ7MDYyQSAwNjJEOworRkNBMztGQ0EzO0ZDQTM7MDYyQSAwNjJFOzA2MkEgMDYyRTsKK0ZDQTQ7RkNBNDtGQ0E0OzA2MkEgMDY0NTswNjJBIDA2NDU7CitGQ0E1O0ZDQTU7RkNBNTswNjJBIDA2NDc7MDYyQSAwNjQ3OworRkNBNjtGQ0E2O0ZDQTY7MDYyQiAwNjQ1OzA2MkIgMDY0NTsKK0ZDQTc7RkNBNztGQ0E3OzA2MkMgMDYyRDswNjJDIDA2MkQ7CitGQ0E4O0ZDQTg7RkNBODswNjJDIDA2NDU7MDYyQyAwNjQ1OworRkNBOTtGQ0E5O0ZDQTk7MDYyRCAwNjJDOzA2MkQgMDYyQzsKK0ZDQUE7RkNBQTtGQ0FBOzA2MkQgMDY0NTswNjJEIDA2NDU7CitGQ0FCO0ZDQUI7RkNBQjswNjJFIDA2MkM7MDYyRSAwNjJDOworRkNBQztGQ0FDO0ZDQUM7MDYyRSAwNjQ1OzA2MkUgMDY0NTsKK0ZDQUQ7RkNBRDtGQ0FEOzA2MzMgMDYyQzswNjMzIDA2MkM7CitGQ0FFO0ZDQUU7RkNBRTswNjMzIDA2MkQ7MDYzMyAwNjJEOworRkNBRjtGQ0FGO0ZDQUY7MDYzMyAwNjJFOzA2MzMgMDYyRTsKK0ZDQjA7RkNCMDtGQ0IwOzA2MzMgMDY0NTswNjMzIDA2NDU7CitGQ0IxO0ZDQjE7RkNCMTswNjM1IDA2MkQ7MDYzNSAwNjJEOworRkNCMjtGQ0IyO0ZDQjI7MDYzNSAwNjJFOzA2MzUgMDYyRTsKK0ZDQjM7RkNCMztGQ0IzOzA2MzUgMDY0NTswNjM1IDA2NDU7CitGQ0I0O0ZDQjQ7RkNCNDswNjM2IDA2MkM7MDYzNiAwNjJDOworRkNCNTtGQ0I1O0ZDQjU7MDYzNiAwNjJEOzA2MzYgMDYyRDsKK0ZDQjY7RkNCNjtGQ0I2OzA2MzYgMDYyRTswNjM2IDA2MkU7CitGQ0I3O0ZDQjc7RkNCNzswNjM2IDA2NDU7MDYzNiAwNjQ1OworRkNCODtGQ0I4O0ZDQjg7MDYzNyAwNjJEOzA2MzcgMDYyRDsKK0ZDQjk7RkNCOTtGQ0I5OzA2MzggMDY0NTswNjM4IDA2NDU7CitGQ0JBO0ZDQkE7RkNCQTswNjM5IDA2MkM7MDYzOSAwNjJDOworRkNCQjtGQ0JCO0ZDQkI7MDYzOSAwNjQ1OzA2MzkgMDY0NTsKK0ZDQkM7RkNCQztGQ0JDOzA2M0EgMDYyQzswNjNBIDA2MkM7CitGQ0JEO0ZDQkQ7RkNCRDswNjNBIDA2NDU7MDYzQSAwNjQ1OworRkNCRTtGQ0JFO0ZDQkU7MDY0MSAwNjJDOzA2NDEgMDYyQzsKK0ZDQkY7RkNCRjtGQ0JGOzA2NDEgMDYyRDswNjQxIDA2MkQ7CitGQ0MwO0ZDQzA7RkNDMDswNjQxIDA2MkU7MDY0MSAwNjJFOworRkNDMTtGQ0MxO0ZDQzE7MDY0MSAwNjQ1OzA2NDEgMDY0NTsKK0ZDQzI7RkNDMjtGQ0MyOzA2NDIgMDYyRDswNjQyIDA2MkQ7CitGQ0MzO0ZDQzM7RkNDMzswNjQyIDA2NDU7MDY0MiAwNjQ1OworRkNDNDtGQ0M0O0ZDQzQ7MDY0MyAwNjJDOzA2NDMgMDYyQzsKK0ZDQzU7RkNDNTtGQ0M1OzA2NDMgMDYyRDswNjQzIDA2MkQ7CitGQ0M2O0ZDQzY7RkNDNjswNjQzIDA2MkU7MDY0MyAwNjJFOworRkNDNztGQ0M3O0ZDQzc7MDY0MyAwNjQ0OzA2NDMgMDY0NDsKK0ZDQzg7RkNDODtGQ0M4OzA2NDMgMDY0NTswNjQzIDA2NDU7CitGQ0M5O0ZDQzk7RkNDOTswNjQ0IDA2MkM7MDY0NCAwNjJDOworRkNDQTtGQ0NBO0ZDQ0E7MDY0NCAwNjJEOzA2NDQgMDYyRDsKK0ZDQ0I7RkNDQjtGQ0NCOzA2NDQgMDYyRTswNjQ0IDA2MkU7CitGQ0NDO0ZDQ0M7RkNDQzswNjQ0IDA2NDU7MDY0NCAwNjQ1OworRkNDRDtGQ0NEO0ZDQ0Q7MDY0NCAwNjQ3OzA2NDQgMDY0NzsKK0ZDQ0U7RkNDRTtGQ0NFOzA2NDUgMDYyQzswNjQ1IDA2MkM7CitGQ0NGO0ZDQ0Y7RkNDRjswNjQ1IDA2MkQ7MDY0NSAwNjJEOworRkNEMDtGQ0QwO0ZDRDA7MDY0NSAwNjJFOzA2NDUgMDYyRTsKK0ZDRDE7RkNEMTtGQ0QxOzA2NDUgMDY0NTswNjQ1IDA2NDU7CitGQ0QyO0ZDRDI7RkNEMjswNjQ2IDA2MkM7MDY0NiAwNjJDOworRkNEMztGQ0QzO0ZDRDM7MDY0NiAwNjJEOzA2NDYgMDYyRDsKK0ZDRDQ7RkNENDtGQ0Q0OzA2NDYgMDYyRTswNjQ2IDA2MkU7CitGQ0Q1O0ZDRDU7RkNENTswNjQ2IDA2NDU7MDY0NiAwNjQ1OworRkNENjtGQ0Q2O0ZDRDY7MDY0NiAwNjQ3OzA2NDYgMDY0NzsKK0ZDRDc7RkNENztGQ0Q3OzA2NDcgMDYyQzswNjQ3IDA2MkM7CitGQ0Q4O0ZDRDg7RkNEODswNjQ3IDA2NDU7MDY0NyAwNjQ1OworRkNEOTtGQ0Q5O0ZDRDk7MDY0NyAwNjcwOzA2NDcgMDY3MDsKK0ZDREE7RkNEQTtGQ0RBOzA2NEEgMDYyQzswNjRBIDA2MkM7CitGQ0RCO0ZDREI7RkNEQjswNjRBIDA2MkQ7MDY0QSAwNjJEOworRkNEQztGQ0RDO0ZDREM7MDY0QSAwNjJFOzA2NEEgMDYyRTsKK0ZDREQ7RkNERDtGQ0REOzA2NEEgMDY0NTswNjRBIDA2NDU7CitGQ0RFO0ZDREU7RkNERTswNjRBIDA2NDc7MDY0QSAwNjQ3OworRkNERjtGQ0RGO0ZDREY7MDYyNiAwNjQ1OzA2NEEgMDY1NCAwNjQ1OworRkNFMDtGQ0UwO0ZDRTA7MDYyNiAwNjQ3OzA2NEEgMDY1NCAwNjQ3OworRkNFMTtGQ0UxO0ZDRTE7MDYyOCAwNjQ1OzA2MjggMDY0NTsKK0ZDRTI7RkNFMjtGQ0UyOzA2MjggMDY0NzswNjI4IDA2NDc7CitGQ0UzO0ZDRTM7RkNFMzswNjJBIDA2NDU7MDYyQSAwNjQ1OworRkNFNDtGQ0U0O0ZDRTQ7MDYyQSAwNjQ3OzA2MkEgMDY0NzsKK0ZDRTU7RkNFNTtGQ0U1OzA2MkIgMDY0NTswNjJCIDA2NDU7CitGQ0U2O0ZDRTY7RkNFNjswNjJCIDA2NDc7MDYyQiAwNjQ3OworRkNFNztGQ0U3O0ZDRTc7MDYzMyAwNjQ1OzA2MzMgMDY0NTsKK0ZDRTg7RkNFODtGQ0U4OzA2MzMgMDY0NzswNjMzIDA2NDc7CitGQ0U5O0ZDRTk7RkNFOTswNjM0IDA2NDU7MDYzNCAwNjQ1OworRkNFQTtGQ0VBO0ZDRUE7MDYzNCAwNjQ3OzA2MzQgMDY0NzsKK0ZDRUI7RkNFQjtGQ0VCOzA2NDMgMDY0NDswNjQzIDA2NDQ7CitGQ0VDO0ZDRUM7RkNFQzswNjQzIDA2NDU7MDY0MyAwNjQ1OworRkNFRDtGQ0VEO0ZDRUQ7MDY0NCAwNjQ1OzA2NDQgMDY0NTsKK0ZDRUU7RkNFRTtGQ0VFOzA2NDYgMDY0NTswNjQ2IDA2NDU7CitGQ0VGO0ZDRUY7RkNFRjswNjQ2IDA2NDc7MDY0NiAwNjQ3OworRkNGMDtGQ0YwO0ZDRjA7MDY0QSAwNjQ1OzA2NEEgMDY0NTsKK0ZDRjE7RkNGMTtGQ0YxOzA2NEEgMDY0NzswNjRBIDA2NDc7CitGQ0YyO0ZDRjI7RkNGMjswNjQwIDA2NEUgMDY1MTswNjQwIDA2NEUgMDY1MTsKK0ZDRjM7RkNGMztGQ0YzOzA2NDAgMDY0RiAwNjUxOzA2NDAgMDY0RiAwNjUxOworRkNGNDtGQ0Y0O0ZDRjQ7MDY0MCAwNjUwIDA2NTE7MDY0MCAwNjUwIDA2NTE7CitGQ0Y1O0ZDRjU7RkNGNTswNjM3IDA2NDk7MDYzNyAwNjQ5OworRkNGNjtGQ0Y2O0ZDRjY7MDYzNyAwNjRBOzA2MzcgMDY0QTsKK0ZDRjc7RkNGNztGQ0Y3OzA2MzkgMDY0OTswNjM5IDA2NDk7CitGQ0Y4O0ZDRjg7RkNGODswNjM5IDA2NEE7MDYzOSAwNjRBOworRkNGOTtGQ0Y5O0ZDRjk7MDYzQSAwNjQ5OzA2M0EgMDY0OTsKK0ZDRkE7RkNGQTtGQ0ZBOzA2M0EgMDY0QTswNjNBIDA2NEE7CitGQ0ZCO0ZDRkI7RkNGQjswNjMzIDA2NDk7MDYzMyAwNjQ5OworRkNGQztGQ0ZDO0ZDRkM7MDYzMyAwNjRBOzA2MzMgMDY0QTsKK0ZDRkQ7RkNGRDtGQ0ZEOzA2MzQgMDY0OTswNjM0IDA2NDk7CitGQ0ZFO0ZDRkU7RkNGRTswNjM0IDA2NEE7MDYzNCAwNjRBOworRkNGRjtGQ0ZGO0ZDRkY7MDYyRCAwNjQ5OzA2MkQgMDY0OTsKK0ZEMDA7RkQwMDtGRDAwOzA2MkQgMDY0QTswNjJEIDA2NEE7CitGRDAxO0ZEMDE7RkQwMTswNjJDIDA2NDk7MDYyQyAwNjQ5OworRkQwMjtGRDAyO0ZEMDI7MDYyQyAwNjRBOzA2MkMgMDY0QTsKK0ZEMDM7RkQwMztGRDAzOzA2MkUgMDY0OTswNjJFIDA2NDk7CitGRDA0O0ZEMDQ7RkQwNDswNjJFIDA2NEE7MDYyRSAwNjRBOworRkQwNTtGRDA1O0ZEMDU7MDYzNSAwNjQ5OzA2MzUgMDY0OTsKK0ZEMDY7RkQwNjtGRDA2OzA2MzUgMDY0QTswNjM1IDA2NEE7CitGRDA3O0ZEMDc7RkQwNzswNjM2IDA2NDk7MDYzNiAwNjQ5OworRkQwODtGRDA4O0ZEMDg7MDYzNiAwNjRBOzA2MzYgMDY0QTsKK0ZEMDk7RkQwOTtGRDA5OzA2MzQgMDYyQzswNjM0IDA2MkM7CitGRDBBO0ZEMEE7RkQwQTswNjM0IDA2MkQ7MDYzNCAwNjJEOworRkQwQjtGRDBCO0ZEMEI7MDYzNCAwNjJFOzA2MzQgMDYyRTsKK0ZEMEM7RkQwQztGRDBDOzA2MzQgMDY0NTswNjM0IDA2NDU7CitGRDBEO0ZEMEQ7RkQwRDswNjM0IDA2MzE7MDYzNCAwNjMxOworRkQwRTtGRDBFO0ZEMEU7MDYzMyAwNjMxOzA2MzMgMDYzMTsKK0ZEMEY7RkQwRjtGRDBGOzA2MzUgMDYzMTswNjM1IDA2MzE7CitGRDEwO0ZEMTA7RkQxMDswNjM2IDA2MzE7MDYzNiAwNjMxOworRkQxMTtGRDExO0ZEMTE7MDYzNyAwNjQ5OzA2MzcgMDY0OTsKK0ZEMTI7RkQxMjtGRDEyOzA2MzcgMDY0QTswNjM3IDA2NEE7CitGRDEzO0ZEMTM7RkQxMzswNjM5IDA2NDk7MDYzOSAwNjQ5OworRkQxNDtGRDE0O0ZEMTQ7MDYzOSAwNjRBOzA2MzkgMDY0QTsKK0ZEMTU7RkQxNTtGRDE1OzA2M0EgMDY0OTswNjNBIDA2NDk7CitGRDE2O0ZEMTY7RkQxNjswNjNBIDA2NEE7MDYzQSAwNjRBOworRkQxNztGRDE3O0ZEMTc7MDYzMyAwNjQ5OzA2MzMgMDY0OTsKK0ZEMTg7RkQxODtGRDE4OzA2MzMgMDY0QTswNjMzIDA2NEE7CitGRDE5O0ZEMTk7RkQxOTswNjM0IDA2NDk7MDYzNCAwNjQ5OworRkQxQTtGRDFBO0ZEMUE7MDYzNCAwNjRBOzA2MzQgMDY0QTsKK0ZEMUI7RkQxQjtGRDFCOzA2MkQgMDY0OTswNjJEIDA2NDk7CitGRDFDO0ZEMUM7RkQxQzswNjJEIDA2NEE7MDYyRCAwNjRBOworRkQxRDtGRDFEO0ZEMUQ7MDYyQyAwNjQ5OzA2MkMgMDY0OTsKK0ZEMUU7RkQxRTtGRDFFOzA2MkMgMDY0QTswNjJDIDA2NEE7CitGRDFGO0ZEMUY7RkQxRjswNjJFIDA2NDk7MDYyRSAwNjQ5OworRkQyMDtGRDIwO0ZEMjA7MDYyRSAwNjRBOzA2MkUgMDY0QTsKK0ZEMjE7RkQyMTtGRDIxOzA2MzUgMDY0OTswNjM1IDA2NDk7CitGRDIyO0ZEMjI7RkQyMjswNjM1IDA2NEE7MDYzNSAwNjRBOworRkQyMztGRDIzO0ZEMjM7MDYzNiAwNjQ5OzA2MzYgMDY0OTsKK0ZEMjQ7RkQyNDtGRDI0OzA2MzYgMDY0QTswNjM2IDA2NEE7CitGRDI1O0ZEMjU7RkQyNTswNjM0IDA2MkM7MDYzNCAwNjJDOworRkQyNjtGRDI2O0ZEMjY7MDYzNCAwNjJEOzA2MzQgMDYyRDsKK0ZEMjc7RkQyNztGRDI3OzA2MzQgMDYyRTswNjM0IDA2MkU7CitGRDI4O0ZEMjg7RkQyODswNjM0IDA2NDU7MDYzNCAwNjQ1OworRkQyOTtGRDI5O0ZEMjk7MDYzNCAwNjMxOzA2MzQgMDYzMTsKK0ZEMkE7RkQyQTtGRDJBOzA2MzMgMDYzMTswNjMzIDA2MzE7CitGRDJCO0ZEMkI7RkQyQjswNjM1IDA2MzE7MDYzNSAwNjMxOworRkQyQztGRDJDO0ZEMkM7MDYzNiAwNjMxOzA2MzYgMDYzMTsKK0ZEMkQ7RkQyRDtGRDJEOzA2MzQgMDYyQzswNjM0IDA2MkM7CitGRDJFO0ZEMkU7RkQyRTswNjM0IDA2MkQ7MDYzNCAwNjJEOworRkQyRjtGRDJGO0ZEMkY7MDYzNCAwNjJFOzA2MzQgMDYyRTsKK0ZEMzA7RkQzMDtGRDMwOzA2MzQgMDY0NTswNjM0IDA2NDU7CitGRDMxO0ZEMzE7RkQzMTswNjMzIDA2NDc7MDYzMyAwNjQ3OworRkQzMjtGRDMyO0ZEMzI7MDYzNCAwNjQ3OzA2MzQgMDY0NzsKK0ZEMzM7RkQzMztGRDMzOzA2MzcgMDY0NTswNjM3IDA2NDU7CitGRDM0O0ZEMzQ7RkQzNDswNjMzIDA2MkM7MDYzMyAwNjJDOworRkQzNTtGRDM1O0ZEMzU7MDYzMyAwNjJEOzA2MzMgMDYyRDsKK0ZEMzY7RkQzNjtGRDM2OzA2MzMgMDYyRTswNjMzIDA2MkU7CitGRDM3O0ZEMzc7RkQzNzswNjM0IDA2MkM7MDYzNCAwNjJDOworRkQzODtGRDM4O0ZEMzg7MDYzNCAwNjJEOzA2MzQgMDYyRDsKK0ZEMzk7RkQzOTtGRDM5OzA2MzQgMDYyRTswNjM0IDA2MkU7CitGRDNBO0ZEM0E7RkQzQTswNjM3IDA2NDU7MDYzNyAwNjQ1OworRkQzQjtGRDNCO0ZEM0I7MDYzOCAwNjQ1OzA2MzggMDY0NTsKK0ZEM0M7RkQzQztGRDNDOzA2MjcgMDY0QjswNjI3IDA2NEI7CitGRDNEO0ZEM0Q7RkQzRDswNjI3IDA2NEI7MDYyNyAwNjRCOworRkQ1MDtGRDUwO0ZENTA7MDYyQSAwNjJDIDA2NDU7MDYyQSAwNjJDIDA2NDU7CitGRDUxO0ZENTE7RkQ1MTswNjJBIDA2MkQgMDYyQzswNjJBIDA2MkQgMDYyQzsKK0ZENTI7RkQ1MjtGRDUyOzA2MkEgMDYyRCAwNjJDOzA2MkEgMDYyRCAwNjJDOworRkQ1MztGRDUzO0ZENTM7MDYyQSAwNjJEIDA2NDU7MDYyQSAwNjJEIDA2NDU7CitGRDU0O0ZENTQ7RkQ1NDswNjJBIDA2MkUgMDY0NTswNjJBIDA2MkUgMDY0NTsKK0ZENTU7RkQ1NTtGRDU1OzA2MkEgMDY0NSAwNjJDOzA2MkEgMDY0NSAwNjJDOworRkQ1NjtGRDU2O0ZENTY7MDYyQSAwNjQ1IDA2MkQ7MDYyQSAwNjQ1IDA2MkQ7CitGRDU3O0ZENTc7RkQ1NzswNjJBIDA2NDUgMDYyRTswNjJBIDA2NDUgMDYyRTsKK0ZENTg7RkQ1ODtGRDU4OzA2MkMgMDY0NSAwNjJEOzA2MkMgMDY0NSAwNjJEOworRkQ1OTtGRDU5O0ZENTk7MDYyQyAwNjQ1IDA2MkQ7MDYyQyAwNjQ1IDA2MkQ7CitGRDVBO0ZENUE7RkQ1QTswNjJEIDA2NDUgMDY0QTswNjJEIDA2NDUgMDY0QTsKK0ZENUI7RkQ1QjtGRDVCOzA2MkQgMDY0NSAwNjQ5OzA2MkQgMDY0NSAwNjQ5OworRkQ1QztGRDVDO0ZENUM7MDYzMyAwNjJEIDA2MkM7MDYzMyAwNjJEIDA2MkM7CitGRDVEO0ZENUQ7RkQ1RDswNjMzIDA2MkMgMDYyRDswNjMzIDA2MkMgMDYyRDsKK0ZENUU7RkQ1RTtGRDVFOzA2MzMgMDYyQyAwNjQ5OzA2MzMgMDYyQyAwNjQ5OworRkQ1RjtGRDVGO0ZENUY7MDYzMyAwNjQ1IDA2MkQ7MDYzMyAwNjQ1IDA2MkQ7CitGRDYwO0ZENjA7RkQ2MDswNjMzIDA2NDUgMDYyRDswNjMzIDA2NDUgMDYyRDsKK0ZENjE7RkQ2MTtGRDYxOzA2MzMgMDY0NSAwNjJDOzA2MzMgMDY0NSAwNjJDOworRkQ2MjtGRDYyO0ZENjI7MDYzMyAwNjQ1IDA2NDU7MDYzMyAwNjQ1IDA2NDU7CitGRDYzO0ZENjM7RkQ2MzswNjMzIDA2NDUgMDY0NTswNjMzIDA2NDUgMDY0NTsKK0ZENjQ7RkQ2NDtGRDY0OzA2MzUgMDYyRCAwNjJEOzA2MzUgMDYyRCAwNjJEOworRkQ2NTtGRDY1O0ZENjU7MDYzNSAwNjJEIDA2MkQ7MDYzNSAwNjJEIDA2MkQ7CitGRDY2O0ZENjY7RkQ2NjswNjM1IDA2NDUgMDY0NTswNjM1IDA2NDUgMDY0NTsKK0ZENjc7RkQ2NztGRDY3OzA2MzQgMDYyRCAwNjQ1OzA2MzQgMDYyRCAwNjQ1OworRkQ2ODtGRDY4O0ZENjg7MDYzNCAwNjJEIDA2NDU7MDYzNCAwNjJEIDA2NDU7CitGRDY5O0ZENjk7RkQ2OTswNjM0IDA2MkMgMDY0QTswNjM0IDA2MkMgMDY0QTsKK0ZENkE7RkQ2QTtGRDZBOzA2MzQgMDY0NSAwNjJFOzA2MzQgMDY0NSAwNjJFOworRkQ2QjtGRDZCO0ZENkI7MDYzNCAwNjQ1IDA2MkU7MDYzNCAwNjQ1IDA2MkU7CitGRDZDO0ZENkM7RkQ2QzswNjM0IDA2NDUgMDY0NTswNjM0IDA2NDUgMDY0NTsKK0ZENkQ7RkQ2RDtGRDZEOzA2MzQgMDY0NSAwNjQ1OzA2MzQgMDY0NSAwNjQ1OworRkQ2RTtGRDZFO0ZENkU7MDYzNiAwNjJEIDA2NDk7MDYzNiAwNjJEIDA2NDk7CitGRDZGO0ZENkY7RkQ2RjswNjM2IDA2MkUgMDY0NTswNjM2IDA2MkUgMDY0NTsKK0ZENzA7RkQ3MDtGRDcwOzA2MzYgMDYyRSAwNjQ1OzA2MzYgMDYyRSAwNjQ1OworRkQ3MTtGRDcxO0ZENzE7MDYzNyAwNjQ1IDA2MkQ7MDYzNyAwNjQ1IDA2MkQ7CitGRDcyO0ZENzI7RkQ3MjswNjM3IDA2NDUgMDYyRDswNjM3IDA2NDUgMDYyRDsKK0ZENzM7RkQ3MztGRDczOzA2MzcgMDY0NSAwNjQ1OzA2MzcgMDY0NSAwNjQ1OworRkQ3NDtGRDc0O0ZENzQ7MDYzNyAwNjQ1IDA2NEE7MDYzNyAwNjQ1IDA2NEE7CitGRDc1O0ZENzU7RkQ3NTswNjM5IDA2MkMgMDY0NTswNjM5IDA2MkMgMDY0NTsKK0ZENzY7RkQ3NjtGRDc2OzA2MzkgMDY0NSAwNjQ1OzA2MzkgMDY0NSAwNjQ1OworRkQ3NztGRDc3O0ZENzc7MDYzOSAwNjQ1IDA2NDU7MDYzOSAwNjQ1IDA2NDU7CitGRDc4O0ZENzg7RkQ3ODswNjM5IDA2NDUgMDY0OTswNjM5IDA2NDUgMDY0OTsKK0ZENzk7RkQ3OTtGRDc5OzA2M0EgMDY0NSAwNjQ1OzA2M0EgMDY0NSAwNjQ1OworRkQ3QTtGRDdBO0ZEN0E7MDYzQSAwNjQ1IDA2NEE7MDYzQSAwNjQ1IDA2NEE7CitGRDdCO0ZEN0I7RkQ3QjswNjNBIDA2NDUgMDY0OTswNjNBIDA2NDUgMDY0OTsKK0ZEN0M7RkQ3QztGRDdDOzA2NDEgMDYyRSAwNjQ1OzA2NDEgMDYyRSAwNjQ1OworRkQ3RDtGRDdEO0ZEN0Q7MDY0MSAwNjJFIDA2NDU7MDY0MSAwNjJFIDA2NDU7CitGRDdFO0ZEN0U7RkQ3RTswNjQyIDA2NDUgMDYyRDswNjQyIDA2NDUgMDYyRDsKK0ZEN0Y7RkQ3RjtGRDdGOzA2NDIgMDY0NSAwNjQ1OzA2NDIgMDY0NSAwNjQ1OworRkQ4MDtGRDgwO0ZEODA7MDY0NCAwNjJEIDA2NDU7MDY0NCAwNjJEIDA2NDU7CitGRDgxO0ZEODE7RkQ4MTswNjQ0IDA2MkQgMDY0QTswNjQ0IDA2MkQgMDY0QTsKK0ZEODI7RkQ4MjtGRDgyOzA2NDQgMDYyRCAwNjQ5OzA2NDQgMDYyRCAwNjQ5OworRkQ4MztGRDgzO0ZEODM7MDY0NCAwNjJDIDA2MkM7MDY0NCAwNjJDIDA2MkM7CitGRDg0O0ZEODQ7RkQ4NDswNjQ0IDA2MkMgMDYyQzswNjQ0IDA2MkMgMDYyQzsKK0ZEODU7RkQ4NTtGRDg1OzA2NDQgMDYyRSAwNjQ1OzA2NDQgMDYyRSAwNjQ1OworRkQ4NjtGRDg2O0ZEODY7MDY0NCAwNjJFIDA2NDU7MDY0NCAwNjJFIDA2NDU7CitGRDg3O0ZEODc7RkQ4NzswNjQ0IDA2NDUgMDYyRDswNjQ0IDA2NDUgMDYyRDsKK0ZEODg7RkQ4ODtGRDg4OzA2NDQgMDY0NSAwNjJEOzA2NDQgMDY0NSAwNjJEOworRkQ4OTtGRDg5O0ZEODk7MDY0NSAwNjJEIDA2MkM7MDY0NSAwNjJEIDA2MkM7CitGRDhBO0ZEOEE7RkQ4QTswNjQ1IDA2MkQgMDY0NTswNjQ1IDA2MkQgMDY0NTsKK0ZEOEI7RkQ4QjtGRDhCOzA2NDUgMDYyRCAwNjRBOzA2NDUgMDYyRCAwNjRBOworRkQ4QztGRDhDO0ZEOEM7MDY0NSAwNjJDIDA2MkQ7MDY0NSAwNjJDIDA2MkQ7CitGRDhEO0ZEOEQ7RkQ4RDswNjQ1IDA2MkMgMDY0NTswNjQ1IDA2MkMgMDY0NTsKK0ZEOEU7RkQ4RTtGRDhFOzA2NDUgMDYyRSAwNjJDOzA2NDUgMDYyRSAwNjJDOworRkQ4RjtGRDhGO0ZEOEY7MDY0NSAwNjJFIDA2NDU7MDY0NSAwNjJFIDA2NDU7CitGRDkyO0ZEOTI7RkQ5MjswNjQ1IDA2MkMgMDYyRTswNjQ1IDA2MkMgMDYyRTsKK0ZEOTM7RkQ5MztGRDkzOzA2NDcgMDY0NSAwNjJDOzA2NDcgMDY0NSAwNjJDOworRkQ5NDtGRDk0O0ZEOTQ7MDY0NyAwNjQ1IDA2NDU7MDY0NyAwNjQ1IDA2NDU7CitGRDk1O0ZEOTU7RkQ5NTswNjQ2IDA2MkQgMDY0NTswNjQ2IDA2MkQgMDY0NTsKK0ZEOTY7RkQ5NjtGRDk2OzA2NDYgMDYyRCAwNjQ5OzA2NDYgMDYyRCAwNjQ5OworRkQ5NztGRDk3O0ZEOTc7MDY0NiAwNjJDIDA2NDU7MDY0NiAwNjJDIDA2NDU7CitGRDk4O0ZEOTg7RkQ5ODswNjQ2IDA2MkMgMDY0NTswNjQ2IDA2MkMgMDY0NTsKK0ZEOTk7RkQ5OTtGRDk5OzA2NDYgMDYyQyAwNjQ5OzA2NDYgMDYyQyAwNjQ5OworRkQ5QTtGRDlBO0ZEOUE7MDY0NiAwNjQ1IDA2NEE7MDY0NiAwNjQ1IDA2NEE7CitGRDlCO0ZEOUI7RkQ5QjswNjQ2IDA2NDUgMDY0OTswNjQ2IDA2NDUgMDY0OTsKK0ZEOUM7RkQ5QztGRDlDOzA2NEEgMDY0NSAwNjQ1OzA2NEEgMDY0NSAwNjQ1OworRkQ5RDtGRDlEO0ZEOUQ7MDY0QSAwNjQ1IDA2NDU7MDY0QSAwNjQ1IDA2NDU7CitGRDlFO0ZEOUU7RkQ5RTswNjI4IDA2MkUgMDY0QTswNjI4IDA2MkUgMDY0QTsKK0ZEOUY7RkQ5RjtGRDlGOzA2MkEgMDYyQyAwNjRBOzA2MkEgMDYyQyAwNjRBOworRkRBMDtGREEwO0ZEQTA7MDYyQSAwNjJDIDA2NDk7MDYyQSAwNjJDIDA2NDk7CitGREExO0ZEQTE7RkRBMTswNjJBIDA2MkUgMDY0QTswNjJBIDA2MkUgMDY0QTsKK0ZEQTI7RkRBMjtGREEyOzA2MkEgMDYyRSAwNjQ5OzA2MkEgMDYyRSAwNjQ5OworRkRBMztGREEzO0ZEQTM7MDYyQSAwNjQ1IDA2NEE7MDYyQSAwNjQ1IDA2NEE7CitGREE0O0ZEQTQ7RkRBNDswNjJBIDA2NDUgMDY0OTswNjJBIDA2NDUgMDY0OTsKK0ZEQTU7RkRBNTtGREE1OzA2MkMgMDY0NSAwNjRBOzA2MkMgMDY0NSAwNjRBOworRkRBNjtGREE2O0ZEQTY7MDYyQyAwNjJEIDA2NDk7MDYyQyAwNjJEIDA2NDk7CitGREE3O0ZEQTc7RkRBNzswNjJDIDA2NDUgMDY0OTswNjJDIDA2NDUgMDY0OTsKK0ZEQTg7RkRBODtGREE4OzA2MzMgMDYyRSAwNjQ5OzA2MzMgMDYyRSAwNjQ5OworRkRBOTtGREE5O0ZEQTk7MDYzNSAwNjJEIDA2NEE7MDYzNSAwNjJEIDA2NEE7CitGREFBO0ZEQUE7RkRBQTswNjM0IDA2MkQgMDY0QTswNjM0IDA2MkQgMDY0QTsKK0ZEQUI7RkRBQjtGREFCOzA2MzYgMDYyRCAwNjRBOzA2MzYgMDYyRCAwNjRBOworRkRBQztGREFDO0ZEQUM7MDY0NCAwNjJDIDA2NEE7MDY0NCAwNjJDIDA2NEE7CitGREFEO0ZEQUQ7RkRBRDswNjQ0IDA2NDUgMDY0QTswNjQ0IDA2NDUgMDY0QTsKK0ZEQUU7RkRBRTtGREFFOzA2NEEgMDYyRCAwNjRBOzA2NEEgMDYyRCAwNjRBOworRkRBRjtGREFGO0ZEQUY7MDY0QSAwNjJDIDA2NEE7MDY0QSAwNjJDIDA2NEE7CitGREIwO0ZEQjA7RkRCMDswNjRBIDA2NDUgMDY0QTswNjRBIDA2NDUgMDY0QTsKK0ZEQjE7RkRCMTtGREIxOzA2NDUgMDY0NSAwNjRBOzA2NDUgMDY0NSAwNjRBOworRkRCMjtGREIyO0ZEQjI7MDY0MiAwNjQ1IDA2NEE7MDY0MiAwNjQ1IDA2NEE7CitGREIzO0ZEQjM7RkRCMzswNjQ2IDA2MkQgMDY0QTswNjQ2IDA2MkQgMDY0QTsKK0ZEQjQ7RkRCNDtGREI0OzA2NDIgMDY0NSAwNjJEOzA2NDIgMDY0NSAwNjJEOworRkRCNTtGREI1O0ZEQjU7MDY0NCAwNjJEIDA2NDU7MDY0NCAwNjJEIDA2NDU7CitGREI2O0ZEQjY7RkRCNjswNjM5IDA2NDUgMDY0QTswNjM5IDA2NDUgMDY0QTsKK0ZEQjc7RkRCNztGREI3OzA2NDMgMDY0NSAwNjRBOzA2NDMgMDY0NSAwNjRBOworRkRCODtGREI4O0ZEQjg7MDY0NiAwNjJDIDA2MkQ7MDY0NiAwNjJDIDA2MkQ7CitGREI5O0ZEQjk7RkRCOTswNjQ1IDA2MkUgMDY0QTswNjQ1IDA2MkUgMDY0QTsKK0ZEQkE7RkRCQTtGREJBOzA2NDQgMDYyQyAwNjQ1OzA2NDQgMDYyQyAwNjQ1OworRkRCQjtGREJCO0ZEQkI7MDY0MyAwNjQ1IDA2NDU7MDY0MyAwNjQ1IDA2NDU7CitGREJDO0ZEQkM7RkRCQzswNjQ0IDA2MkMgMDY0NTswNjQ0IDA2MkMgMDY0NTsKK0ZEQkQ7RkRCRDtGREJEOzA2NDYgMDYyQyAwNjJEOzA2NDYgMDYyQyAwNjJEOworRkRCRTtGREJFO0ZEQkU7MDYyQyAwNjJEIDA2NEE7MDYyQyAwNjJEIDA2NEE7CitGREJGO0ZEQkY7RkRCRjswNjJEIDA2MkMgMDY0QTswNjJEIDA2MkMgMDY0QTsKK0ZEQzA7RkRDMDtGREMwOzA2NDUgMDYyQyAwNjRBOzA2NDUgMDYyQyAwNjRBOworRkRDMTtGREMxO0ZEQzE7MDY0MSAwNjQ1IDA2NEE7MDY0MSAwNjQ1IDA2NEE7CitGREMyO0ZEQzI7RkRDMjswNjI4IDA2MkQgMDY0QTswNjI4IDA2MkQgMDY0QTsKK0ZEQzM7RkRDMztGREMzOzA2NDMgMDY0NSAwNjQ1OzA2NDMgMDY0NSAwNjQ1OworRkRDNDtGREM0O0ZEQzQ7MDYzOSAwNjJDIDA2NDU7MDYzOSAwNjJDIDA2NDU7CitGREM1O0ZEQzU7RkRDNTswNjM1IDA2NDUgMDY0NTswNjM1IDA2NDUgMDY0NTsKK0ZEQzY7RkRDNjtGREM2OzA2MzMgMDYyRSAwNjRBOzA2MzMgMDYyRSAwNjRBOworRkRDNztGREM3O0ZEQzc7MDY0NiAwNjJDIDA2NEE7MDY0NiAwNjJDIDA2NEE7CitGREYwO0ZERjA7RkRGMDswNjM1IDA2NDQgMDZEMjswNjM1IDA2NDQgMDZEMjsKK0ZERjE7RkRGMTtGREYxOzA2NDIgMDY0NCAwNkQyOzA2NDIgMDY0NCAwNkQyOworRkRGMjtGREYyO0ZERjI7MDYyNyAwNjQ0IDA2NDQgMDY0NzswNjI3IDA2NDQgMDY0NCAwNjQ3OworRkRGMztGREYzO0ZERjM7MDYyNyAwNjQzIDA2MjggMDYzMTswNjI3IDA2NDMgMDYyOCAwNjMxOworRkRGNDtGREY0O0ZERjQ7MDY0NSAwNjJEIDA2NDUgMDYyRjswNjQ1IDA2MkQgMDY0NSAwNjJGOworRkRGNTtGREY1O0ZERjU7MDYzNSAwNjQ0IDA2MzkgMDY0NTswNjM1IDA2NDQgMDYzOSAwNjQ1OworRkRGNjtGREY2O0ZERjY7MDYzMSAwNjMzIDA2NDggMDY0NDswNjMxIDA2MzMgMDY0OCAwNjQ0OworRkRGNztGREY3O0ZERjc7MDYzOSAwNjQ0IDA2NEEgMDY0NzswNjM5IDA2NDQgMDY0QSAwNjQ3OworRkRGODtGREY4O0ZERjg7MDY0OCAwNjMzIDA2NDQgMDY0NTswNjQ4IDA2MzMgMDY0NCAwNjQ1OworRkRGOTtGREY5O0ZERjk7MDYzNSAwNjQ0IDA2NDk7MDYzNSAwNjQ0IDA2NDk7CitGREZBO0ZERkE7RkRGQTswNjM1IDA2NDQgMDY0OSAwMDIwIDA2MjcgMDY0NCAwNjQ0IDA2NDcgMDAyMCAwNjM5IDA2NDQgMDY0QSAwNjQ3IDAwMjAgMDY0OCAwNjMzIDA2NDQgMDY0NTswNjM1IDA2NDQgMDY0OSAwMDIwIDA2MjcgMDY0NCAwNjQ0IDA2NDcgMDAyMCAwNjM5IDA2NDQgMDY0QSAwNjQ3IDAwMjAgMDY0OCAwNjMzIDA2NDQgMDY0NTsKK0ZERkI7RkRGQjtGREZCOzA2MkMgMDY0NCAwMDIwIDA2MkMgMDY0NCAwNjI3IDA2NDQgMDY0NzswNjJDIDA2NDQgMDAyMCAwNjJDIDA2NDQgMDYyNyAwNjQ0IDA2NDc7CitGREZDO0ZERkM7RkRGQzswNjMxIDA2Q0MgMDYyNyAwNjQ0OzA2MzEgMDZDQyAwNjI3IDA2NDQ7CitGRTMwO0ZFMzA7RkUzMDswMDJFIDAwMkU7MDAyRSAwMDJFOworRkUzMTtGRTMxO0ZFMzE7MjAxNDsyMDE0OworRkUzMjtGRTMyO0ZFMzI7MjAxMzsyMDEzOworRkUzMztGRTMzO0ZFMzM7MDA1RjswMDVGOworRkUzNDtGRTM0O0ZFMzQ7MDA1RjswMDVGOworRkUzNTtGRTM1O0ZFMzU7MDAyODswMDI4OworRkUzNjtGRTM2O0ZFMzY7MDAyOTswMDI5OworRkUzNztGRTM3O0ZFMzc7MDA3QjswMDdCOworRkUzODtGRTM4O0ZFMzg7MDA3RDswMDdEOworRkUzOTtGRTM5O0ZFMzk7MzAxNDszMDE0OworRkUzQTtGRTNBO0ZFM0E7MzAxNTszMDE1OworRkUzQjtGRTNCO0ZFM0I7MzAxMDszMDEwOworRkUzQztGRTNDO0ZFM0M7MzAxMTszMDExOworRkUzRDtGRTNEO0ZFM0Q7MzAwQTszMDBBOworRkUzRTtGRTNFO0ZFM0U7MzAwQjszMDBCOworRkUzRjtGRTNGO0ZFM0Y7MzAwODszMDA4OworRkU0MDtGRTQwO0ZFNDA7MzAwOTszMDA5OworRkU0MTtGRTQxO0ZFNDE7MzAwQzszMDBDOworRkU0MjtGRTQyO0ZFNDI7MzAwRDszMDBEOworRkU0MztGRTQzO0ZFNDM7MzAwRTszMDBFOworRkU0NDtGRTQ0O0ZFNDQ7MzAwRjszMDBGOworRkU0OTtGRTQ5O0ZFNDk7MDAyMCAwMzA1OzAwMjAgMDMwNTsKK0ZFNEE7RkU0QTtGRTRBOzAwMjAgMDMwNTswMDIwIDAzMDU7CitGRTRCO0ZFNEI7RkU0QjswMDIwIDAzMDU7MDAyMCAwMzA1OworRkU0QztGRTRDO0ZFNEM7MDAyMCAwMzA1OzAwMjAgMDMwNTsKK0ZFNEQ7RkU0RDtGRTREOzAwNUY7MDA1RjsKK0ZFNEU7RkU0RTtGRTRFOzAwNUY7MDA1RjsKK0ZFNEY7RkU0RjtGRTRGOzAwNUY7MDA1RjsKK0ZFNTA7RkU1MDtGRTUwOzAwMkM7MDAyQzsKK0ZFNTE7RkU1MTtGRTUxOzMwMDE7MzAwMTsKK0ZFNTI7RkU1MjtGRTUyOzAwMkU7MDAyRTsKK0ZFNTQ7RkU1NDtGRTU0OzAwM0I7MDAzQjsKK0ZFNTU7RkU1NTtGRTU1OzAwM0E7MDAzQTsKK0ZFNTY7RkU1NjtGRTU2OzAwM0Y7MDAzRjsKK0ZFNTc7RkU1NztGRTU3OzAwMjE7MDAyMTsKK0ZFNTg7RkU1ODtGRTU4OzIwMTQ7MjAxNDsKK0ZFNTk7RkU1OTtGRTU5OzAwMjg7MDAyODsKK0ZFNUE7RkU1QTtGRTVBOzAwMjk7MDAyOTsKK0ZFNUI7RkU1QjtGRTVCOzAwN0I7MDA3QjsKK0ZFNUM7RkU1QztGRTVDOzAwN0Q7MDA3RDsKK0ZFNUQ7RkU1RDtGRTVEOzMwMTQ7MzAxNDsKK0ZFNUU7RkU1RTtGRTVFOzMwMTU7MzAxNTsKK0ZFNUY7RkU1RjtGRTVGOzAwMjM7MDAyMzsKK0ZFNjA7RkU2MDtGRTYwOzAwMjY7MDAyNjsKK0ZFNjE7RkU2MTtGRTYxOzAwMkE7MDAyQTsKK0ZFNjI7RkU2MjtGRTYyOzAwMkI7MDAyQjsKK0ZFNjM7RkU2MztGRTYzOzAwMkQ7MDAyRDsKK0ZFNjQ7RkU2NDtGRTY0OzAwM0M7MDAzQzsKK0ZFNjU7RkU2NTtGRTY1OzAwM0U7MDAzRTsKK0ZFNjY7RkU2NjtGRTY2OzAwM0Q7MDAzRDsKK0ZFNjg7RkU2ODtGRTY4OzAwNUM7MDA1QzsKK0ZFNjk7RkU2OTtGRTY5OzAwMjQ7MDAyNDsKK0ZFNkE7RkU2QTtGRTZBOzAwMjU7MDAyNTsKK0ZFNkI7RkU2QjtGRTZCOzAwNDA7MDA0MDsKK0ZFNzA7RkU3MDtGRTcwOzAwMjAgMDY0QjswMDIwIDA2NEI7CitGRTcxO0ZFNzE7RkU3MTswNjQwIDA2NEI7MDY0MCAwNjRCOworRkU3MjtGRTcyO0ZFNzI7MDAyMCAwNjRDOzAwMjAgMDY0QzsKK0ZFNzQ7RkU3NDtGRTc0OzAwMjAgMDY0RDswMDIwIDA2NEQ7CitGRTc2O0ZFNzY7RkU3NjswMDIwIDA2NEU7MDAyMCAwNjRFOworRkU3NztGRTc3O0ZFNzc7MDY0MCAwNjRFOzA2NDAgMDY0RTsKK0ZFNzg7RkU3ODtGRTc4OzAwMjAgMDY0RjswMDIwIDA2NEY7CitGRTc5O0ZFNzk7RkU3OTswNjQwIDA2NEY7MDY0MCAwNjRGOworRkU3QTtGRTdBO0ZFN0E7MDAyMCAwNjUwOzAwMjAgMDY1MDsKK0ZFN0I7RkU3QjtGRTdCOzA2NDAgMDY1MDswNjQwIDA2NTA7CitGRTdDO0ZFN0M7RkU3QzswMDIwIDA2NTE7MDAyMCAwNjUxOworRkU3RDtGRTdEO0ZFN0Q7MDY0MCAwNjUxOzA2NDAgMDY1MTsKK0ZFN0U7RkU3RTtGRTdFOzAwMjAgMDY1MjswMDIwIDA2NTI7CitGRTdGO0ZFN0Y7RkU3RjswNjQwIDA2NTI7MDY0MCAwNjUyOworRkU4MDtGRTgwO0ZFODA7MDYyMTswNjIxOworRkU4MTtGRTgxO0ZFODE7MDYyMjswNjI3IDA2NTM7CitGRTgyO0ZFODI7RkU4MjswNjIyOzA2MjcgMDY1MzsKK0ZFODM7RkU4MztGRTgzOzA2MjM7MDYyNyAwNjU0OworRkU4NDtGRTg0O0ZFODQ7MDYyMzswNjI3IDA2NTQ7CitGRTg1O0ZFODU7RkU4NTswNjI0OzA2NDggMDY1NDsKK0ZFODY7RkU4NjtGRTg2OzA2MjQ7MDY0OCAwNjU0OworRkU4NztGRTg3O0ZFODc7MDYyNTswNjI3IDA2NTU7CitGRTg4O0ZFODg7RkU4ODswNjI1OzA2MjcgMDY1NTsKK0ZFODk7RkU4OTtGRTg5OzA2MjY7MDY0QSAwNjU0OworRkU4QTtGRThBO0ZFOEE7MDYyNjswNjRBIDA2NTQ7CitGRThCO0ZFOEI7RkU4QjswNjI2OzA2NEEgMDY1NDsKK0ZFOEM7RkU4QztGRThDOzA2MjY7MDY0QSAwNjU0OworRkU4RDtGRThEO0ZFOEQ7MDYyNzswNjI3OworRkU4RTtGRThFO0ZFOEU7MDYyNzswNjI3OworRkU4RjtGRThGO0ZFOEY7MDYyODswNjI4OworRkU5MDtGRTkwO0ZFOTA7MDYyODswNjI4OworRkU5MTtGRTkxO0ZFOTE7MDYyODswNjI4OworRkU5MjtGRTkyO0ZFOTI7MDYyODswNjI4OworRkU5MztGRTkzO0ZFOTM7MDYyOTswNjI5OworRkU5NDtGRTk0O0ZFOTQ7MDYyOTswNjI5OworRkU5NTtGRTk1O0ZFOTU7MDYyQTswNjJBOworRkU5NjtGRTk2O0ZFOTY7MDYyQTswNjJBOworRkU5NztGRTk3O0ZFOTc7MDYyQTswNjJBOworRkU5ODtGRTk4O0ZFOTg7MDYyQTswNjJBOworRkU5OTtGRTk5O0ZFOTk7MDYyQjswNjJCOworRkU5QTtGRTlBO0ZFOUE7MDYyQjswNjJCOworRkU5QjtGRTlCO0ZFOUI7MDYyQjswNjJCOworRkU5QztGRTlDO0ZFOUM7MDYyQjswNjJCOworRkU5RDtGRTlEO0ZFOUQ7MDYyQzswNjJDOworRkU5RTtGRTlFO0ZFOUU7MDYyQzswNjJDOworRkU5RjtGRTlGO0ZFOUY7MDYyQzswNjJDOworRkVBMDtGRUEwO0ZFQTA7MDYyQzswNjJDOworRkVBMTtGRUExO0ZFQTE7MDYyRDswNjJEOworRkVBMjtGRUEyO0ZFQTI7MDYyRDswNjJEOworRkVBMztGRUEzO0ZFQTM7MDYyRDswNjJEOworRkVBNDtGRUE0O0ZFQTQ7MDYyRDswNjJEOworRkVBNTtGRUE1O0ZFQTU7MDYyRTswNjJFOworRkVBNjtGRUE2O0ZFQTY7MDYyRTswNjJFOworRkVBNztGRUE3O0ZFQTc7MDYyRTswNjJFOworRkVBODtGRUE4O0ZFQTg7MDYyRTswNjJFOworRkVBOTtGRUE5O0ZFQTk7MDYyRjswNjJGOworRkVBQTtGRUFBO0ZFQUE7MDYyRjswNjJGOworRkVBQjtGRUFCO0ZFQUI7MDYzMDswNjMwOworRkVBQztGRUFDO0ZFQUM7MDYzMDswNjMwOworRkVBRDtGRUFEO0ZFQUQ7MDYzMTswNjMxOworRkVBRTtGRUFFO0ZFQUU7MDYzMTswNjMxOworRkVBRjtGRUFGO0ZFQUY7MDYzMjswNjMyOworRkVCMDtGRUIwO0ZFQjA7MDYzMjswNjMyOworRkVCMTtGRUIxO0ZFQjE7MDYzMzswNjMzOworRkVCMjtGRUIyO0ZFQjI7MDYzMzswNjMzOworRkVCMztGRUIzO0ZFQjM7MDYzMzswNjMzOworRkVCNDtGRUI0O0ZFQjQ7MDYzMzswNjMzOworRkVCNTtGRUI1O0ZFQjU7MDYzNDswNjM0OworRkVCNjtGRUI2O0ZFQjY7MDYzNDswNjM0OworRkVCNztGRUI3O0ZFQjc7MDYzNDswNjM0OworRkVCODtGRUI4O0ZFQjg7MDYzNDswNjM0OworRkVCOTtGRUI5O0ZFQjk7MDYzNTswNjM1OworRkVCQTtGRUJBO0ZFQkE7MDYzNTswNjM1OworRkVCQjtGRUJCO0ZFQkI7MDYzNTswNjM1OworRkVCQztGRUJDO0ZFQkM7MDYzNTswNjM1OworRkVCRDtGRUJEO0ZFQkQ7MDYzNjswNjM2OworRkVCRTtGRUJFO0ZFQkU7MDYzNjswNjM2OworRkVCRjtGRUJGO0ZFQkY7MDYzNjswNjM2OworRkVDMDtGRUMwO0ZFQzA7MDYzNjswNjM2OworRkVDMTtGRUMxO0ZFQzE7MDYzNzswNjM3OworRkVDMjtGRUMyO0ZFQzI7MDYzNzswNjM3OworRkVDMztGRUMzO0ZFQzM7MDYzNzswNjM3OworRkVDNDtGRUM0O0ZFQzQ7MDYzNzswNjM3OworRkVDNTtGRUM1O0ZFQzU7MDYzODswNjM4OworRkVDNjtGRUM2O0ZFQzY7MDYzODswNjM4OworRkVDNztGRUM3O0ZFQzc7MDYzODswNjM4OworRkVDODtGRUM4O0ZFQzg7MDYzODswNjM4OworRkVDOTtGRUM5O0ZFQzk7MDYzOTswNjM5OworRkVDQTtGRUNBO0ZFQ0E7MDYzOTswNjM5OworRkVDQjtGRUNCO0ZFQ0I7MDYzOTswNjM5OworRkVDQztGRUNDO0ZFQ0M7MDYzOTswNjM5OworRkVDRDtGRUNEO0ZFQ0Q7MDYzQTswNjNBOworRkVDRTtGRUNFO0ZFQ0U7MDYzQTswNjNBOworRkVDRjtGRUNGO0ZFQ0Y7MDYzQTswNjNBOworRkVEMDtGRUQwO0ZFRDA7MDYzQTswNjNBOworRkVEMTtGRUQxO0ZFRDE7MDY0MTswNjQxOworRkVEMjtGRUQyO0ZFRDI7MDY0MTswNjQxOworRkVEMztGRUQzO0ZFRDM7MDY0MTswNjQxOworRkVENDtGRUQ0O0ZFRDQ7MDY0MTswNjQxOworRkVENTtGRUQ1O0ZFRDU7MDY0MjswNjQyOworRkVENjtGRUQ2O0ZFRDY7MDY0MjswNjQyOworRkVENztGRUQ3O0ZFRDc7MDY0MjswNjQyOworRkVEODtGRUQ4O0ZFRDg7MDY0MjswNjQyOworRkVEOTtGRUQ5O0ZFRDk7MDY0MzswNjQzOworRkVEQTtGRURBO0ZFREE7MDY0MzswNjQzOworRkVEQjtGRURCO0ZFREI7MDY0MzswNjQzOworRkVEQztGRURDO0ZFREM7MDY0MzswNjQzOworRkVERDtGRUREO0ZFREQ7MDY0NDswNjQ0OworRkVERTtGRURFO0ZFREU7MDY0NDswNjQ0OworRkVERjtGRURGO0ZFREY7MDY0NDswNjQ0OworRkVFMDtGRUUwO0ZFRTA7MDY0NDswNjQ0OworRkVFMTtGRUUxO0ZFRTE7MDY0NTswNjQ1OworRkVFMjtGRUUyO0ZFRTI7MDY0NTswNjQ1OworRkVFMztGRUUzO0ZFRTM7MDY0NTswNjQ1OworRkVFNDtGRUU0O0ZFRTQ7MDY0NTswNjQ1OworRkVFNTtGRUU1O0ZFRTU7MDY0NjswNjQ2OworRkVFNjtGRUU2O0ZFRTY7MDY0NjswNjQ2OworRkVFNztGRUU3O0ZFRTc7MDY0NjswNjQ2OworRkVFODtGRUU4O0ZFRTg7MDY0NjswNjQ2OworRkVFOTtGRUU5O0ZFRTk7MDY0NzswNjQ3OworRkVFQTtGRUVBO0ZFRUE7MDY0NzswNjQ3OworRkVFQjtGRUVCO0ZFRUI7MDY0NzswNjQ3OworRkVFQztGRUVDO0ZFRUM7MDY0NzswNjQ3OworRkVFRDtGRUVEO0ZFRUQ7MDY0ODswNjQ4OworRkVFRTtGRUVFO0ZFRUU7MDY0ODswNjQ4OworRkVFRjtGRUVGO0ZFRUY7MDY0OTswNjQ5OworRkVGMDtGRUYwO0ZFRjA7MDY0OTswNjQ5OworRkVGMTtGRUYxO0ZFRjE7MDY0QTswNjRBOworRkVGMjtGRUYyO0ZFRjI7MDY0QTswNjRBOworRkVGMztGRUYzO0ZFRjM7MDY0QTswNjRBOworRkVGNDtGRUY0O0ZFRjQ7MDY0QTswNjRBOworRkVGNTtGRUY1O0ZFRjU7MDY0NCAwNjIyOzA2NDQgMDYyNyAwNjUzOworRkVGNjtGRUY2O0ZFRjY7MDY0NCAwNjIyOzA2NDQgMDYyNyAwNjUzOworRkVGNztGRUY3O0ZFRjc7MDY0NCAwNjIzOzA2NDQgMDYyNyAwNjU0OworRkVGODtGRUY4O0ZFRjg7MDY0NCAwNjIzOzA2NDQgMDYyNyAwNjU0OworRkVGOTtGRUY5O0ZFRjk7MDY0NCAwNjI1OzA2NDQgMDYyNyAwNjU1OworRkVGQTtGRUZBO0ZFRkE7MDY0NCAwNjI1OzA2NDQgMDYyNyAwNjU1OworRkVGQjtGRUZCO0ZFRkI7MDY0NCAwNjI3OzA2NDQgMDYyNzsKK0ZFRkM7RkVGQztGRUZDOzA2NDQgMDYyNzswNjQ0IDA2Mjc7CitGRjAxO0ZGMDE7RkYwMTswMDIxOzAwMjE7CitGRjAyO0ZGMDI7RkYwMjswMDIyOzAwMjI7CitGRjAzO0ZGMDM7RkYwMzswMDIzOzAwMjM7CitGRjA0O0ZGMDQ7RkYwNDswMDI0OzAwMjQ7CitGRjA1O0ZGMDU7RkYwNTswMDI1OzAwMjU7CitGRjA2O0ZGMDY7RkYwNjswMDI2OzAwMjY7CitGRjA3O0ZGMDc7RkYwNzswMDI3OzAwMjc7CitGRjA4O0ZGMDg7RkYwODswMDI4OzAwMjg7CitGRjA5O0ZGMDk7RkYwOTswMDI5OzAwMjk7CitGRjBBO0ZGMEE7RkYwQTswMDJBOzAwMkE7CitGRjBCO0ZGMEI7RkYwQjswMDJCOzAwMkI7CitGRjBDO0ZGMEM7RkYwQzswMDJDOzAwMkM7CitGRjBEO0ZGMEQ7RkYwRDswMDJEOzAwMkQ7CitGRjBFO0ZGMEU7RkYwRTswMDJFOzAwMkU7CitGRjBGO0ZGMEY7RkYwRjswMDJGOzAwMkY7CitGRjEwO0ZGMTA7RkYxMDswMDMwOzAwMzA7CitGRjExO0ZGMTE7RkYxMTswMDMxOzAwMzE7CitGRjEyO0ZGMTI7RkYxMjswMDMyOzAwMzI7CitGRjEzO0ZGMTM7RkYxMzswMDMzOzAwMzM7CitGRjE0O0ZGMTQ7RkYxNDswMDM0OzAwMzQ7CitGRjE1O0ZGMTU7RkYxNTswMDM1OzAwMzU7CitGRjE2O0ZGMTY7RkYxNjswMDM2OzAwMzY7CitGRjE3O0ZGMTc7RkYxNzswMDM3OzAwMzc7CitGRjE4O0ZGMTg7RkYxODswMDM4OzAwMzg7CitGRjE5O0ZGMTk7RkYxOTswMDM5OzAwMzk7CitGRjFBO0ZGMUE7RkYxQTswMDNBOzAwM0E7CitGRjFCO0ZGMUI7RkYxQjswMDNCOzAwM0I7CitGRjFDO0ZGMUM7RkYxQzswMDNDOzAwM0M7CitGRjFEO0ZGMUQ7RkYxRDswMDNEOzAwM0Q7CitGRjFFO0ZGMUU7RkYxRTswMDNFOzAwM0U7CitGRjFGO0ZGMUY7RkYxRjswMDNGOzAwM0Y7CitGRjIwO0ZGMjA7RkYyMDswMDQwOzAwNDA7CitGRjIxO0ZGMjE7RkYyMTswMDQxOzAwNDE7CitGRjIyO0ZGMjI7RkYyMjswMDQyOzAwNDI7CitGRjIzO0ZGMjM7RkYyMzswMDQzOzAwNDM7CitGRjI0O0ZGMjQ7RkYyNDswMDQ0OzAwNDQ7CitGRjI1O0ZGMjU7RkYyNTswMDQ1OzAwNDU7CitGRjI2O0ZGMjY7RkYyNjswMDQ2OzAwNDY7CitGRjI3O0ZGMjc7RkYyNzswMDQ3OzAwNDc7CitGRjI4O0ZGMjg7RkYyODswMDQ4OzAwNDg7CitGRjI5O0ZGMjk7RkYyOTswMDQ5OzAwNDk7CitGRjJBO0ZGMkE7RkYyQTswMDRBOzAwNEE7CitGRjJCO0ZGMkI7RkYyQjswMDRCOzAwNEI7CitGRjJDO0ZGMkM7RkYyQzswMDRDOzAwNEM7CitGRjJEO0ZGMkQ7RkYyRDswMDREOzAwNEQ7CitGRjJFO0ZGMkU7RkYyRTswMDRFOzAwNEU7CitGRjJGO0ZGMkY7RkYyRjswMDRGOzAwNEY7CitGRjMwO0ZGMzA7RkYzMDswMDUwOzAwNTA7CitGRjMxO0ZGMzE7RkYzMTswMDUxOzAwNTE7CitGRjMyO0ZGMzI7RkYzMjswMDUyOzAwNTI7CitGRjMzO0ZGMzM7RkYzMzswMDUzOzAwNTM7CitGRjM0O0ZGMzQ7RkYzNDswMDU0OzAwNTQ7CitGRjM1O0ZGMzU7RkYzNTswMDU1OzAwNTU7CitGRjM2O0ZGMzY7RkYzNjswMDU2OzAwNTY7CitGRjM3O0ZGMzc7RkYzNzswMDU3OzAwNTc7CitGRjM4O0ZGMzg7RkYzODswMDU4OzAwNTg7CitGRjM5O0ZGMzk7RkYzOTswMDU5OzAwNTk7CitGRjNBO0ZGM0E7RkYzQTswMDVBOzAwNUE7CitGRjNCO0ZGM0I7RkYzQjswMDVCOzAwNUI7CitGRjNDO0ZGM0M7RkYzQzswMDVDOzAwNUM7CitGRjNEO0ZGM0Q7RkYzRDswMDVEOzAwNUQ7CitGRjNFO0ZGM0U7RkYzRTswMDVFOzAwNUU7CitGRjNGO0ZGM0Y7RkYzRjswMDVGOzAwNUY7CitGRjQwO0ZGNDA7RkY0MDswMDYwOzAwNjA7CitGRjQxO0ZGNDE7RkY0MTswMDYxOzAwNjE7CitGRjQyO0ZGNDI7RkY0MjswMDYyOzAwNjI7CitGRjQzO0ZGNDM7RkY0MzswMDYzOzAwNjM7CitGRjQ0O0ZGNDQ7RkY0NDswMDY0OzAwNjQ7CitGRjQ1O0ZGNDU7RkY0NTswMDY1OzAwNjU7CitGRjQ2O0ZGNDY7RkY0NjswMDY2OzAwNjY7CitGRjQ3O0ZGNDc7RkY0NzswMDY3OzAwNjc7CitGRjQ4O0ZGNDg7RkY0ODswMDY4OzAwNjg7CitGRjQ5O0ZGNDk7RkY0OTswMDY5OzAwNjk7CitGRjRBO0ZGNEE7RkY0QTswMDZBOzAwNkE7CitGRjRCO0ZGNEI7RkY0QjswMDZCOzAwNkI7CitGRjRDO0ZGNEM7RkY0QzswMDZDOzAwNkM7CitGRjREO0ZGNEQ7RkY0RDswMDZEOzAwNkQ7CitGRjRFO0ZGNEU7RkY0RTswMDZFOzAwNkU7CitGRjRGO0ZGNEY7RkY0RjswMDZGOzAwNkY7CitGRjUwO0ZGNTA7RkY1MDswMDcwOzAwNzA7CitGRjUxO0ZGNTE7RkY1MTswMDcxOzAwNzE7CitGRjUyO0ZGNTI7RkY1MjswMDcyOzAwNzI7CitGRjUzO0ZGNTM7RkY1MzswMDczOzAwNzM7CitGRjU0O0ZGNTQ7RkY1NDswMDc0OzAwNzQ7CitGRjU1O0ZGNTU7RkY1NTswMDc1OzAwNzU7CitGRjU2O0ZGNTY7RkY1NjswMDc2OzAwNzY7CitGRjU3O0ZGNTc7RkY1NzswMDc3OzAwNzc7CitGRjU4O0ZGNTg7RkY1ODswMDc4OzAwNzg7CitGRjU5O0ZGNTk7RkY1OTswMDc5OzAwNzk7CitGRjVBO0ZGNUE7RkY1QTswMDdBOzAwN0E7CitGRjVCO0ZGNUI7RkY1QjswMDdCOzAwN0I7CitGRjVDO0ZGNUM7RkY1QzswMDdDOzAwN0M7CitGRjVEO0ZGNUQ7RkY1RDswMDdEOzAwN0Q7CitGRjVFO0ZGNUU7RkY1RTswMDdFOzAwN0U7CitGRjVGO0ZGNUY7RkY1RjsyOTg1OzI5ODU7CitGRjYwO0ZGNjA7RkY2MDsyOTg2OzI5ODY7CitGRjYxO0ZGNjE7RkY2MTszMDAyOzMwMDI7CitGRjYyO0ZGNjI7RkY2MjszMDBDOzMwMEM7CitGRjYzO0ZGNjM7RkY2MzszMDBEOzMwMEQ7CitGRjY0O0ZGNjQ7RkY2NDszMDAxOzMwMDE7CitGRjY1O0ZGNjU7RkY2NTszMEZCOzMwRkI7CitGRjY2O0ZGNjY7RkY2NjszMEYyOzMwRjI7CitGRjY3O0ZGNjc7RkY2NzszMEExOzMwQTE7CitGRjY4O0ZGNjg7RkY2ODszMEEzOzMwQTM7CitGRjY5O0ZGNjk7RkY2OTszMEE1OzMwQTU7CitGRjZBO0ZGNkE7RkY2QTszMEE3OzMwQTc7CitGRjZCO0ZGNkI7RkY2QjszMEE5OzMwQTk7CitGRjZDO0ZGNkM7RkY2QzszMEUzOzMwRTM7CitGRjZEO0ZGNkQ7RkY2RDszMEU1OzMwRTU7CitGRjZFO0ZGNkU7RkY2RTszMEU3OzMwRTc7CitGRjZGO0ZGNkY7RkY2RjszMEMzOzMwQzM7CitGRjcwO0ZGNzA7RkY3MDszMEZDOzMwRkM7CitGRjcxO0ZGNzE7RkY3MTszMEEyOzMwQTI7CitGRjcyO0ZGNzI7RkY3MjszMEE0OzMwQTQ7CitGRjczO0ZGNzM7RkY3MzszMEE2OzMwQTY7CitGRjc0O0ZGNzQ7RkY3NDszMEE4OzMwQTg7CitGRjc1O0ZGNzU7RkY3NTszMEFBOzMwQUE7CitGRjc2O0ZGNzY7RkY3NjszMEFCOzMwQUI7CitGRjc3O0ZGNzc7RkY3NzszMEFEOzMwQUQ7CitGRjc4O0ZGNzg7RkY3ODszMEFGOzMwQUY7CitGRjc5O0ZGNzk7RkY3OTszMEIxOzMwQjE7CitGRjdBO0ZGN0E7RkY3QTszMEIzOzMwQjM7CitGRjdCO0ZGN0I7RkY3QjszMEI1OzMwQjU7CitGRjdDO0ZGN0M7RkY3QzszMEI3OzMwQjc7CitGRjdEO0ZGN0Q7RkY3RDszMEI5OzMwQjk7CitGRjdFO0ZGN0U7RkY3RTszMEJCOzMwQkI7CitGRjdGO0ZGN0Y7RkY3RjszMEJEOzMwQkQ7CitGRjgwO0ZGODA7RkY4MDszMEJGOzMwQkY7CitGRjgxO0ZGODE7RkY4MTszMEMxOzMwQzE7CitGRjgyO0ZGODI7RkY4MjszMEM0OzMwQzQ7CitGRjgzO0ZGODM7RkY4MzszMEM2OzMwQzY7CitGRjg0O0ZGODQ7RkY4NDszMEM4OzMwQzg7CitGRjg1O0ZGODU7RkY4NTszMENBOzMwQ0E7CitGRjg2O0ZGODY7RkY4NjszMENCOzMwQ0I7CitGRjg3O0ZGODc7RkY4NzszMENDOzMwQ0M7CitGRjg4O0ZGODg7RkY4ODszMENEOzMwQ0Q7CitGRjg5O0ZGODk7RkY4OTszMENFOzMwQ0U7CitGRjhBO0ZGOEE7RkY4QTszMENGOzMwQ0Y7CitGRjhCO0ZGOEI7RkY4QjszMEQyOzMwRDI7CitGRjhDO0ZGOEM7RkY4QzszMEQ1OzMwRDU7CitGRjhEO0ZGOEQ7RkY4RDszMEQ4OzMwRDg7CitGRjhFO0ZGOEU7RkY4RTszMERCOzMwREI7CitGRjhGO0ZGOEY7RkY4RjszMERFOzMwREU7CitGRjkwO0ZGOTA7RkY5MDszMERGOzMwREY7CitGRjkxO0ZGOTE7RkY5MTszMEUwOzMwRTA7CitGRjkyO0ZGOTI7RkY5MjszMEUxOzMwRTE7CitGRjkzO0ZGOTM7RkY5MzszMEUyOzMwRTI7CitGRjk0O0ZGOTQ7RkY5NDszMEU0OzMwRTQ7CitGRjk1O0ZGOTU7RkY5NTszMEU2OzMwRTY7CitGRjk2O0ZGOTY7RkY5NjszMEU4OzMwRTg7CitGRjk3O0ZGOTc7RkY5NzszMEU5OzMwRTk7CitGRjk4O0ZGOTg7RkY5ODszMEVBOzMwRUE7CitGRjk5O0ZGOTk7RkY5OTszMEVCOzMwRUI7CitGRjlBO0ZGOUE7RkY5QTszMEVDOzMwRUM7CitGRjlCO0ZGOUI7RkY5QjszMEVEOzMwRUQ7CitGRjlDO0ZGOUM7RkY5QzszMEVGOzMwRUY7CitGRjlEO0ZGOUQ7RkY5RDszMEYzOzMwRjM7CitGRjlFO0ZGOUU7RkY5RTszMDk5OzMwOTk7CitGRjlGO0ZGOUY7RkY5RjszMDlBOzMwOUE7CitGRkEwO0ZGQTA7RkZBMDsxMTYwOzExNjA7CitGRkExO0ZGQTE7RkZBMTsxMTAwOzExMDA7CitGRkEyO0ZGQTI7RkZBMjsxMTAxOzExMDE7CitGRkEzO0ZGQTM7RkZBMzsxMUFBOzExQUE7CitGRkE0O0ZGQTQ7RkZBNDsxMTAyOzExMDI7CitGRkE1O0ZGQTU7RkZBNTsxMUFDOzExQUM7CitGRkE2O0ZGQTY7RkZBNjsxMUFEOzExQUQ7CitGRkE3O0ZGQTc7RkZBNzsxMTAzOzExMDM7CitGRkE4O0ZGQTg7RkZBODsxMTA0OzExMDQ7CitGRkE5O0ZGQTk7RkZBOTsxMTA1OzExMDU7CitGRkFBO0ZGQUE7RkZBQTsxMUIwOzExQjA7CitGRkFCO0ZGQUI7RkZBQjsxMUIxOzExQjE7CitGRkFDO0ZGQUM7RkZBQzsxMUIyOzExQjI7CitGRkFEO0ZGQUQ7RkZBRDsxMUIzOzExQjM7CitGRkFFO0ZGQUU7RkZBRTsxMUI0OzExQjQ7CitGRkFGO0ZGQUY7RkZBRjsxMUI1OzExQjU7CitGRkIwO0ZGQjA7RkZCMDsxMTFBOzExMUE7CitGRkIxO0ZGQjE7RkZCMTsxMTA2OzExMDY7CitGRkIyO0ZGQjI7RkZCMjsxMTA3OzExMDc7CitGRkIzO0ZGQjM7RkZCMzsxMTA4OzExMDg7CitGRkI0O0ZGQjQ7RkZCNDsxMTIxOzExMjE7CitGRkI1O0ZGQjU7RkZCNTsxMTA5OzExMDk7CitGRkI2O0ZGQjY7RkZCNjsxMTBBOzExMEE7CitGRkI3O0ZGQjc7RkZCNzsxMTBCOzExMEI7CitGRkI4O0ZGQjg7RkZCODsxMTBDOzExMEM7CitGRkI5O0ZGQjk7RkZCOTsxMTBEOzExMEQ7CitGRkJBO0ZGQkE7RkZCQTsxMTBFOzExMEU7CitGRkJCO0ZGQkI7RkZCQjsxMTBGOzExMEY7CitGRkJDO0ZGQkM7RkZCQzsxMTEwOzExMTA7CitGRkJEO0ZGQkQ7RkZCRDsxMTExOzExMTE7CitGRkJFO0ZGQkU7RkZCRTsxMTEyOzExMTI7CitGRkMyO0ZGQzI7RkZDMjsxMTYxOzExNjE7CitGRkMzO0ZGQzM7RkZDMzsxMTYyOzExNjI7CitGRkM0O0ZGQzQ7RkZDNDsxMTYzOzExNjM7CitGRkM1O0ZGQzU7RkZDNTsxMTY0OzExNjQ7CitGRkM2O0ZGQzY7RkZDNjsxMTY1OzExNjU7CitGRkM3O0ZGQzc7RkZDNzsxMTY2OzExNjY7CitGRkNBO0ZGQ0E7RkZDQTsxMTY3OzExNjc7CitGRkNCO0ZGQ0I7RkZDQjsxMTY4OzExNjg7CitGRkNDO0ZGQ0M7RkZDQzsxMTY5OzExNjk7CitGRkNEO0ZGQ0Q7RkZDRDsxMTZBOzExNkE7CitGRkNFO0ZGQ0U7RkZDRTsxMTZCOzExNkI7CitGRkNGO0ZGQ0Y7RkZDRjsxMTZDOzExNkM7CitGRkQyO0ZGRDI7RkZEMjsxMTZEOzExNkQ7CitGRkQzO0ZGRDM7RkZEMzsxMTZFOzExNkU7CitGRkQ0O0ZGRDQ7RkZENDsxMTZGOzExNkY7CitGRkQ1O0ZGRDU7RkZENTsxMTcwOzExNzA7CitGRkQ2O0ZGRDY7RkZENjsxMTcxOzExNzE7CitGRkQ3O0ZGRDc7RkZENzsxMTcyOzExNzI7CitGRkRBO0ZGREE7RkZEQTsxMTczOzExNzM7CitGRkRCO0ZGREI7RkZEQjsxMTc0OzExNzQ7CitGRkRDO0ZGREM7RkZEQzsxMTc1OzExNzU7CitGRkUwO0ZGRTA7RkZFMDswMEEyOzAwQTI7CitGRkUxO0ZGRTE7RkZFMTswMEEzOzAwQTM7CitGRkUyO0ZGRTI7RkZFMjswMEFDOzAwQUM7CitGRkUzO0ZGRTM7RkZFMzswMDIwIDAzMDQ7MDAyMCAwMzA0OworRkZFNDtGRkU0O0ZGRTQ7MDBBNjswMEE2OworRkZFNTtGRkU1O0ZGRTU7MDBBNTswMEE1OworRkZFNjtGRkU2O0ZGRTY7MjBBOTsyMEE5OworRkZFODtGRkU4O0ZGRTg7MjUwMjsyNTAyOworRkZFOTtGRkU5O0ZGRTk7MjE5MDsyMTkwOworRkZFQTtGRkVBO0ZGRUE7MjE5MTsyMTkxOworRkZFQjtGRkVCO0ZGRUI7MjE5MjsyMTkyOworRkZFQztGRkVDO0ZGRUM7MjE5MzsyMTkzOworRkZFRDtGRkVEO0ZGRUQ7MjVBMDsyNUEwOworRkZFRTtGRkVFO0ZGRUU7MjVDQjsyNUNCOworMUQxNUU7MUQxNTcgMUQxNjU7MUQxNTcgMUQxNjU7MUQxNTcgMUQxNjU7MUQxNTcgMUQxNjU7CisxRDE1RjsxRDE1OCAxRDE2NTsxRDE1OCAxRDE2NTsxRDE1OCAxRDE2NTsxRDE1OCAxRDE2NTsKKzFEMTYwOzFEMTU4IDFEMTY1IDFEMTZFOzFEMTU4IDFEMTY1IDFEMTZFOzFEMTU4IDFEMTY1IDFEMTZFOzFEMTU4IDFEMTY1IDFEMTZFOworMUQxNjE7MUQxNTggMUQxNjUgMUQxNkY7MUQxNTggMUQxNjUgMUQxNkY7MUQxNTggMUQxNjUgMUQxNkY7MUQxNTggMUQxNjUgMUQxNkY7CisxRDE2MjsxRDE1OCAxRDE2NSAxRDE3MDsxRDE1OCAxRDE2NSAxRDE3MDsxRDE1OCAxRDE2NSAxRDE3MDsxRDE1OCAxRDE2NSAxRDE3MDsKKzFEMTYzOzFEMTU4IDFEMTY1IDFEMTcxOzFEMTU4IDFEMTY1IDFEMTcxOzFEMTU4IDFEMTY1IDFEMTcxOzFEMTU4IDFEMTY1IDFEMTcxOworMUQxNjQ7MUQxNTggMUQxNjUgMUQxNzI7MUQxNTggMUQxNjUgMUQxNzI7MUQxNTggMUQxNjUgMUQxNzI7MUQxNTggMUQxNjUgMUQxNzI7CisxRDFCQjsxRDFCOSAxRDE2NTsxRDFCOSAxRDE2NTsxRDFCOSAxRDE2NTsxRDFCOSAxRDE2NTsKKzFEMUJDOzFEMUJBIDFEMTY1OzFEMUJBIDFEMTY1OzFEMUJBIDFEMTY1OzFEMUJBIDFEMTY1OworMUQxQkQ7MUQxQjkgMUQxNjUgMUQxNkU7MUQxQjkgMUQxNjUgMUQxNkU7MUQxQjkgMUQxNjUgMUQxNkU7MUQxQjkgMUQxNjUgMUQxNkU7CisxRDFCRTsxRDFCQSAxRDE2NSAxRDE2RTsxRDFCQSAxRDE2NSAxRDE2RTsxRDFCQSAxRDE2NSAxRDE2RTsxRDFCQSAxRDE2NSAxRDE2RTsKKzFEMUJGOzFEMUI5IDFEMTY1IDFEMTZGOzFEMUI5IDFEMTY1IDFEMTZGOzFEMUI5IDFEMTY1IDFEMTZGOzFEMUI5IDFEMTY1IDFEMTZGOworMUQxQzA7MUQxQkEgMUQxNjUgMUQxNkY7MUQxQkEgMUQxNjUgMUQxNkY7MUQxQkEgMUQxNjUgMUQxNkY7MUQxQkEgMUQxNjUgMUQxNkY7CisxRDQwMDsxRDQwMDsxRDQwMDswMDQxOzAwNDE7CisxRDQwMTsxRDQwMTsxRDQwMTswMDQyOzAwNDI7CisxRDQwMjsxRDQwMjsxRDQwMjswMDQzOzAwNDM7CisxRDQwMzsxRDQwMzsxRDQwMzswMDQ0OzAwNDQ7CisxRDQwNDsxRDQwNDsxRDQwNDswMDQ1OzAwNDU7CisxRDQwNTsxRDQwNTsxRDQwNTswMDQ2OzAwNDY7CisxRDQwNjsxRDQwNjsxRDQwNjswMDQ3OzAwNDc7CisxRDQwNzsxRDQwNzsxRDQwNzswMDQ4OzAwNDg7CisxRDQwODsxRDQwODsxRDQwODswMDQ5OzAwNDk7CisxRDQwOTsxRDQwOTsxRDQwOTswMDRBOzAwNEE7CisxRDQwQTsxRDQwQTsxRDQwQTswMDRCOzAwNEI7CisxRDQwQjsxRDQwQjsxRDQwQjswMDRDOzAwNEM7CisxRDQwQzsxRDQwQzsxRDQwQzswMDREOzAwNEQ7CisxRDQwRDsxRDQwRDsxRDQwRDswMDRFOzAwNEU7CisxRDQwRTsxRDQwRTsxRDQwRTswMDRGOzAwNEY7CisxRDQwRjsxRDQwRjsxRDQwRjswMDUwOzAwNTA7CisxRDQxMDsxRDQxMDsxRDQxMDswMDUxOzAwNTE7CisxRDQxMTsxRDQxMTsxRDQxMTswMDUyOzAwNTI7CisxRDQxMjsxRDQxMjsxRDQxMjswMDUzOzAwNTM7CisxRDQxMzsxRDQxMzsxRDQxMzswMDU0OzAwNTQ7CisxRDQxNDsxRDQxNDsxRDQxNDswMDU1OzAwNTU7CisxRDQxNTsxRDQxNTsxRDQxNTswMDU2OzAwNTY7CisxRDQxNjsxRDQxNjsxRDQxNjswMDU3OzAwNTc7CisxRDQxNzsxRDQxNzsxRDQxNzswMDU4OzAwNTg7CisxRDQxODsxRDQxODsxRDQxODswMDU5OzAwNTk7CisxRDQxOTsxRDQxOTsxRDQxOTswMDVBOzAwNUE7CisxRDQxQTsxRDQxQTsxRDQxQTswMDYxOzAwNjE7CisxRDQxQjsxRDQxQjsxRDQxQjswMDYyOzAwNjI7CisxRDQxQzsxRDQxQzsxRDQxQzswMDYzOzAwNjM7CisxRDQxRDsxRDQxRDsxRDQxRDswMDY0OzAwNjQ7CisxRDQxRTsxRDQxRTsxRDQxRTswMDY1OzAwNjU7CisxRDQxRjsxRDQxRjsxRDQxRjswMDY2OzAwNjY7CisxRDQyMDsxRDQyMDsxRDQyMDswMDY3OzAwNjc7CisxRDQyMTsxRDQyMTsxRDQyMTswMDY4OzAwNjg7CisxRDQyMjsxRDQyMjsxRDQyMjswMDY5OzAwNjk7CisxRDQyMzsxRDQyMzsxRDQyMzswMDZBOzAwNkE7CisxRDQyNDsxRDQyNDsxRDQyNDswMDZCOzAwNkI7CisxRDQyNTsxRDQyNTsxRDQyNTswMDZDOzAwNkM7CisxRDQyNjsxRDQyNjsxRDQyNjswMDZEOzAwNkQ7CisxRDQyNzsxRDQyNzsxRDQyNzswMDZFOzAwNkU7CisxRDQyODsxRDQyODsxRDQyODswMDZGOzAwNkY7CisxRDQyOTsxRDQyOTsxRDQyOTswMDcwOzAwNzA7CisxRDQyQTsxRDQyQTsxRDQyQTswMDcxOzAwNzE7CisxRDQyQjsxRDQyQjsxRDQyQjswMDcyOzAwNzI7CisxRDQyQzsxRDQyQzsxRDQyQzswMDczOzAwNzM7CisxRDQyRDsxRDQyRDsxRDQyRDswMDc0OzAwNzQ7CisxRDQyRTsxRDQyRTsxRDQyRTswMDc1OzAwNzU7CisxRDQyRjsxRDQyRjsxRDQyRjswMDc2OzAwNzY7CisxRDQzMDsxRDQzMDsxRDQzMDswMDc3OzAwNzc7CisxRDQzMTsxRDQzMTsxRDQzMTswMDc4OzAwNzg7CisxRDQzMjsxRDQzMjsxRDQzMjswMDc5OzAwNzk7CisxRDQzMzsxRDQzMzsxRDQzMzswMDdBOzAwN0E7CisxRDQzNDsxRDQzNDsxRDQzNDswMDQxOzAwNDE7CisxRDQzNTsxRDQzNTsxRDQzNTswMDQyOzAwNDI7CisxRDQzNjsxRDQzNjsxRDQzNjswMDQzOzAwNDM7CisxRDQzNzsxRDQzNzsxRDQzNzswMDQ0OzAwNDQ7CisxRDQzODsxRDQzODsxRDQzODswMDQ1OzAwNDU7CisxRDQzOTsxRDQzOTsxRDQzOTswMDQ2OzAwNDY7CisxRDQzQTsxRDQzQTsxRDQzQTswMDQ3OzAwNDc7CisxRDQzQjsxRDQzQjsxRDQzQjswMDQ4OzAwNDg7CisxRDQzQzsxRDQzQzsxRDQzQzswMDQ5OzAwNDk7CisxRDQzRDsxRDQzRDsxRDQzRDswMDRBOzAwNEE7CisxRDQzRTsxRDQzRTsxRDQzRTswMDRCOzAwNEI7CisxRDQzRjsxRDQzRjsxRDQzRjswMDRDOzAwNEM7CisxRDQ0MDsxRDQ0MDsxRDQ0MDswMDREOzAwNEQ7CisxRDQ0MTsxRDQ0MTsxRDQ0MTswMDRFOzAwNEU7CisxRDQ0MjsxRDQ0MjsxRDQ0MjswMDRGOzAwNEY7CisxRDQ0MzsxRDQ0MzsxRDQ0MzswMDUwOzAwNTA7CisxRDQ0NDsxRDQ0NDsxRDQ0NDswMDUxOzAwNTE7CisxRDQ0NTsxRDQ0NTsxRDQ0NTswMDUyOzAwNTI7CisxRDQ0NjsxRDQ0NjsxRDQ0NjswMDUzOzAwNTM7CisxRDQ0NzsxRDQ0NzsxRDQ0NzswMDU0OzAwNTQ7CisxRDQ0ODsxRDQ0ODsxRDQ0ODswMDU1OzAwNTU7CisxRDQ0OTsxRDQ0OTsxRDQ0OTswMDU2OzAwNTY7CisxRDQ0QTsxRDQ0QTsxRDQ0QTswMDU3OzAwNTc7CisxRDQ0QjsxRDQ0QjsxRDQ0QjswMDU4OzAwNTg7CisxRDQ0QzsxRDQ0QzsxRDQ0QzswMDU5OzAwNTk7CisxRDQ0RDsxRDQ0RDsxRDQ0RDswMDVBOzAwNUE7CisxRDQ0RTsxRDQ0RTsxRDQ0RTswMDYxOzAwNjE7CisxRDQ0RjsxRDQ0RjsxRDQ0RjswMDYyOzAwNjI7CisxRDQ1MDsxRDQ1MDsxRDQ1MDswMDYzOzAwNjM7CisxRDQ1MTsxRDQ1MTsxRDQ1MTswMDY0OzAwNjQ7CisxRDQ1MjsxRDQ1MjsxRDQ1MjswMDY1OzAwNjU7CisxRDQ1MzsxRDQ1MzsxRDQ1MzswMDY2OzAwNjY7CisxRDQ1NDsxRDQ1NDsxRDQ1NDswMDY3OzAwNjc7CisxRDQ1NjsxRDQ1NjsxRDQ1NjswMDY5OzAwNjk7CisxRDQ1NzsxRDQ1NzsxRDQ1NzswMDZBOzAwNkE7CisxRDQ1ODsxRDQ1ODsxRDQ1ODswMDZCOzAwNkI7CisxRDQ1OTsxRDQ1OTsxRDQ1OTswMDZDOzAwNkM7CisxRDQ1QTsxRDQ1QTsxRDQ1QTswMDZEOzAwNkQ7CisxRDQ1QjsxRDQ1QjsxRDQ1QjswMDZFOzAwNkU7CisxRDQ1QzsxRDQ1QzsxRDQ1QzswMDZGOzAwNkY7CisxRDQ1RDsxRDQ1RDsxRDQ1RDswMDcwOzAwNzA7CisxRDQ1RTsxRDQ1RTsxRDQ1RTswMDcxOzAwNzE7CisxRDQ1RjsxRDQ1RjsxRDQ1RjswMDcyOzAwNzI7CisxRDQ2MDsxRDQ2MDsxRDQ2MDswMDczOzAwNzM7CisxRDQ2MTsxRDQ2MTsxRDQ2MTswMDc0OzAwNzQ7CisxRDQ2MjsxRDQ2MjsxRDQ2MjswMDc1OzAwNzU7CisxRDQ2MzsxRDQ2MzsxRDQ2MzswMDc2OzAwNzY7CisxRDQ2NDsxRDQ2NDsxRDQ2NDswMDc3OzAwNzc7CisxRDQ2NTsxRDQ2NTsxRDQ2NTswMDc4OzAwNzg7CisxRDQ2NjsxRDQ2NjsxRDQ2NjswMDc5OzAwNzk7CisxRDQ2NzsxRDQ2NzsxRDQ2NzswMDdBOzAwN0E7CisxRDQ2ODsxRDQ2ODsxRDQ2ODswMDQxOzAwNDE7CisxRDQ2OTsxRDQ2OTsxRDQ2OTswMDQyOzAwNDI7CisxRDQ2QTsxRDQ2QTsxRDQ2QTswMDQzOzAwNDM7CisxRDQ2QjsxRDQ2QjsxRDQ2QjswMDQ0OzAwNDQ7CisxRDQ2QzsxRDQ2QzsxRDQ2QzswMDQ1OzAwNDU7CisxRDQ2RDsxRDQ2RDsxRDQ2RDswMDQ2OzAwNDY7CisxRDQ2RTsxRDQ2RTsxRDQ2RTswMDQ3OzAwNDc7CisxRDQ2RjsxRDQ2RjsxRDQ2RjswMDQ4OzAwNDg7CisxRDQ3MDsxRDQ3MDsxRDQ3MDswMDQ5OzAwNDk7CisxRDQ3MTsxRDQ3MTsxRDQ3MTswMDRBOzAwNEE7CisxRDQ3MjsxRDQ3MjsxRDQ3MjswMDRCOzAwNEI7CisxRDQ3MzsxRDQ3MzsxRDQ3MzswMDRDOzAwNEM7CisxRDQ3NDsxRDQ3NDsxRDQ3NDswMDREOzAwNEQ7CisxRDQ3NTsxRDQ3NTsxRDQ3NTswMDRFOzAwNEU7CisxRDQ3NjsxRDQ3NjsxRDQ3NjswMDRGOzAwNEY7CisxRDQ3NzsxRDQ3NzsxRDQ3NzswMDUwOzAwNTA7CisxRDQ3ODsxRDQ3ODsxRDQ3ODswMDUxOzAwNTE7CisxRDQ3OTsxRDQ3OTsxRDQ3OTswMDUyOzAwNTI7CisxRDQ3QTsxRDQ3QTsxRDQ3QTswMDUzOzAwNTM7CisxRDQ3QjsxRDQ3QjsxRDQ3QjswMDU0OzAwNTQ7CisxRDQ3QzsxRDQ3QzsxRDQ3QzswMDU1OzAwNTU7CisxRDQ3RDsxRDQ3RDsxRDQ3RDswMDU2OzAwNTY7CisxRDQ3RTsxRDQ3RTsxRDQ3RTswMDU3OzAwNTc7CisxRDQ3RjsxRDQ3RjsxRDQ3RjswMDU4OzAwNTg7CisxRDQ4MDsxRDQ4MDsxRDQ4MDswMDU5OzAwNTk7CisxRDQ4MTsxRDQ4MTsxRDQ4MTswMDVBOzAwNUE7CisxRDQ4MjsxRDQ4MjsxRDQ4MjswMDYxOzAwNjE7CisxRDQ4MzsxRDQ4MzsxRDQ4MzswMDYyOzAwNjI7CisxRDQ4NDsxRDQ4NDsxRDQ4NDswMDYzOzAwNjM7CisxRDQ4NTsxRDQ4NTsxRDQ4NTswMDY0OzAwNjQ7CisxRDQ4NjsxRDQ4NjsxRDQ4NjswMDY1OzAwNjU7CisxRDQ4NzsxRDQ4NzsxRDQ4NzswMDY2OzAwNjY7CisxRDQ4ODsxRDQ4ODsxRDQ4ODswMDY3OzAwNjc7CisxRDQ4OTsxRDQ4OTsxRDQ4OTswMDY4OzAwNjg7CisxRDQ4QTsxRDQ4QTsxRDQ4QTswMDY5OzAwNjk7CisxRDQ4QjsxRDQ4QjsxRDQ4QjswMDZBOzAwNkE7CisxRDQ4QzsxRDQ4QzsxRDQ4QzswMDZCOzAwNkI7CisxRDQ4RDsxRDQ4RDsxRDQ4RDswMDZDOzAwNkM7CisxRDQ4RTsxRDQ4RTsxRDQ4RTswMDZEOzAwNkQ7CisxRDQ4RjsxRDQ4RjsxRDQ4RjswMDZFOzAwNkU7CisxRDQ5MDsxRDQ5MDsxRDQ5MDswMDZGOzAwNkY7CisxRDQ5MTsxRDQ5MTsxRDQ5MTswMDcwOzAwNzA7CisxRDQ5MjsxRDQ5MjsxRDQ5MjswMDcxOzAwNzE7CisxRDQ5MzsxRDQ5MzsxRDQ5MzswMDcyOzAwNzI7CisxRDQ5NDsxRDQ5NDsxRDQ5NDswMDczOzAwNzM7CisxRDQ5NTsxRDQ5NTsxRDQ5NTswMDc0OzAwNzQ7CisxRDQ5NjsxRDQ5NjsxRDQ5NjswMDc1OzAwNzU7CisxRDQ5NzsxRDQ5NzsxRDQ5NzswMDc2OzAwNzY7CisxRDQ5ODsxRDQ5ODsxRDQ5ODswMDc3OzAwNzc7CisxRDQ5OTsxRDQ5OTsxRDQ5OTswMDc4OzAwNzg7CisxRDQ5QTsxRDQ5QTsxRDQ5QTswMDc5OzAwNzk7CisxRDQ5QjsxRDQ5QjsxRDQ5QjswMDdBOzAwN0E7CisxRDQ5QzsxRDQ5QzsxRDQ5QzswMDQxOzAwNDE7CisxRDQ5RTsxRDQ5RTsxRDQ5RTswMDQzOzAwNDM7CisxRDQ5RjsxRDQ5RjsxRDQ5RjswMDQ0OzAwNDQ7CisxRDRBMjsxRDRBMjsxRDRBMjswMDQ3OzAwNDc7CisxRDRBNTsxRDRBNTsxRDRBNTswMDRBOzAwNEE7CisxRDRBNjsxRDRBNjsxRDRBNjswMDRCOzAwNEI7CisxRDRBOTsxRDRBOTsxRDRBOTswMDRFOzAwNEU7CisxRDRBQTsxRDRBQTsxRDRBQTswMDRGOzAwNEY7CisxRDRBQjsxRDRBQjsxRDRBQjswMDUwOzAwNTA7CisxRDRBQzsxRDRBQzsxRDRBQzswMDUxOzAwNTE7CisxRDRBRTsxRDRBRTsxRDRBRTswMDUzOzAwNTM7CisxRDRBRjsxRDRBRjsxRDRBRjswMDU0OzAwNTQ7CisxRDRCMDsxRDRCMDsxRDRCMDswMDU1OzAwNTU7CisxRDRCMTsxRDRCMTsxRDRCMTswMDU2OzAwNTY7CisxRDRCMjsxRDRCMjsxRDRCMjswMDU3OzAwNTc7CisxRDRCMzsxRDRCMzsxRDRCMzswMDU4OzAwNTg7CisxRDRCNDsxRDRCNDsxRDRCNDswMDU5OzAwNTk7CisxRDRCNTsxRDRCNTsxRDRCNTswMDVBOzAwNUE7CisxRDRCNjsxRDRCNjsxRDRCNjswMDYxOzAwNjE7CisxRDRCNzsxRDRCNzsxRDRCNzswMDYyOzAwNjI7CisxRDRCODsxRDRCODsxRDRCODswMDYzOzAwNjM7CisxRDRCOTsxRDRCOTsxRDRCOTswMDY0OzAwNjQ7CisxRDRCQjsxRDRCQjsxRDRCQjswMDY2OzAwNjY7CisxRDRCRDsxRDRCRDsxRDRCRDswMDY4OzAwNjg7CisxRDRCRTsxRDRCRTsxRDRCRTswMDY5OzAwNjk7CisxRDRCRjsxRDRCRjsxRDRCRjswMDZBOzAwNkE7CisxRDRDMDsxRDRDMDsxRDRDMDswMDZCOzAwNkI7CisxRDRDMjsxRDRDMjsxRDRDMjswMDZEOzAwNkQ7CisxRDRDMzsxRDRDMzsxRDRDMzswMDZFOzAwNkU7CisxRDRDNTsxRDRDNTsxRDRDNTswMDcwOzAwNzA7CisxRDRDNjsxRDRDNjsxRDRDNjswMDcxOzAwNzE7CisxRDRDNzsxRDRDNzsxRDRDNzswMDcyOzAwNzI7CisxRDRDODsxRDRDODsxRDRDODswMDczOzAwNzM7CisxRDRDOTsxRDRDOTsxRDRDOTswMDc0OzAwNzQ7CisxRDRDQTsxRDRDQTsxRDRDQTswMDc1OzAwNzU7CisxRDRDQjsxRDRDQjsxRDRDQjswMDc2OzAwNzY7CisxRDRDQzsxRDRDQzsxRDRDQzswMDc3OzAwNzc7CisxRDRDRDsxRDRDRDsxRDRDRDswMDc4OzAwNzg7CisxRDRDRTsxRDRDRTsxRDRDRTswMDc5OzAwNzk7CisxRDRDRjsxRDRDRjsxRDRDRjswMDdBOzAwN0E7CisxRDREMDsxRDREMDsxRDREMDswMDQxOzAwNDE7CisxRDREMTsxRDREMTsxRDREMTswMDQyOzAwNDI7CisxRDREMjsxRDREMjsxRDREMjswMDQzOzAwNDM7CisxRDREMzsxRDREMzsxRDREMzswMDQ0OzAwNDQ7CisxRDRENDsxRDRENDsxRDRENDswMDQ1OzAwNDU7CisxRDRENTsxRDRENTsxRDRENTswMDQ2OzAwNDY7CisxRDRENjsxRDRENjsxRDRENjswMDQ3OzAwNDc7CisxRDRENzsxRDRENzsxRDRENzswMDQ4OzAwNDg7CisxRDREODsxRDREODsxRDREODswMDQ5OzAwNDk7CisxRDREOTsxRDREOTsxRDREOTswMDRBOzAwNEE7CisxRDREQTsxRDREQTsxRDREQTswMDRCOzAwNEI7CisxRDREQjsxRDREQjsxRDREQjswMDRDOzAwNEM7CisxRDREQzsxRDREQzsxRDREQzswMDREOzAwNEQ7CisxRDRERDsxRDRERDsxRDRERDswMDRFOzAwNEU7CisxRDRERTsxRDRERTsxRDRERTswMDRGOzAwNEY7CisxRDRERjsxRDRERjsxRDRERjswMDUwOzAwNTA7CisxRDRFMDsxRDRFMDsxRDRFMDswMDUxOzAwNTE7CisxRDRFMTsxRDRFMTsxRDRFMTswMDUyOzAwNTI7CisxRDRFMjsxRDRFMjsxRDRFMjswMDUzOzAwNTM7CisxRDRFMzsxRDRFMzsxRDRFMzswMDU0OzAwNTQ7CisxRDRFNDsxRDRFNDsxRDRFNDswMDU1OzAwNTU7CisxRDRFNTsxRDRFNTsxRDRFNTswMDU2OzAwNTY7CisxRDRFNjsxRDRFNjsxRDRFNjswMDU3OzAwNTc7CisxRDRFNzsxRDRFNzsxRDRFNzswMDU4OzAwNTg7CisxRDRFODsxRDRFODsxRDRFODswMDU5OzAwNTk7CisxRDRFOTsxRDRFOTsxRDRFOTswMDVBOzAwNUE7CisxRDRFQTsxRDRFQTsxRDRFQTswMDYxOzAwNjE7CisxRDRFQjsxRDRFQjsxRDRFQjswMDYyOzAwNjI7CisxRDRFQzsxRDRFQzsxRDRFQzswMDYzOzAwNjM7CisxRDRFRDsxRDRFRDsxRDRFRDswMDY0OzAwNjQ7CisxRDRFRTsxRDRFRTsxRDRFRTswMDY1OzAwNjU7CisxRDRFRjsxRDRFRjsxRDRFRjswMDY2OzAwNjY7CisxRDRGMDsxRDRGMDsxRDRGMDswMDY3OzAwNjc7CisxRDRGMTsxRDRGMTsxRDRGMTswMDY4OzAwNjg7CisxRDRGMjsxRDRGMjsxRDRGMjswMDY5OzAwNjk7CisxRDRGMzsxRDRGMzsxRDRGMzswMDZBOzAwNkE7CisxRDRGNDsxRDRGNDsxRDRGNDswMDZCOzAwNkI7CisxRDRGNTsxRDRGNTsxRDRGNTswMDZDOzAwNkM7CisxRDRGNjsxRDRGNjsxRDRGNjswMDZEOzAwNkQ7CisxRDRGNzsxRDRGNzsxRDRGNzswMDZFOzAwNkU7CisxRDRGODsxRDRGODsxRDRGODswMDZGOzAwNkY7CisxRDRGOTsxRDRGOTsxRDRGOTswMDcwOzAwNzA7CisxRDRGQTsxRDRGQTsxRDRGQTswMDcxOzAwNzE7CisxRDRGQjsxRDRGQjsxRDRGQjswMDcyOzAwNzI7CisxRDRGQzsxRDRGQzsxRDRGQzswMDczOzAwNzM7CisxRDRGRDsxRDRGRDsxRDRGRDswMDc0OzAwNzQ7CisxRDRGRTsxRDRGRTsxRDRGRTswMDc1OzAwNzU7CisxRDRGRjsxRDRGRjsxRDRGRjswMDc2OzAwNzY7CisxRDUwMDsxRDUwMDsxRDUwMDswMDc3OzAwNzc7CisxRDUwMTsxRDUwMTsxRDUwMTswMDc4OzAwNzg7CisxRDUwMjsxRDUwMjsxRDUwMjswMDc5OzAwNzk7CisxRDUwMzsxRDUwMzsxRDUwMzswMDdBOzAwN0E7CisxRDUwNDsxRDUwNDsxRDUwNDswMDQxOzAwNDE7CisxRDUwNTsxRDUwNTsxRDUwNTswMDQyOzAwNDI7CisxRDUwNzsxRDUwNzsxRDUwNzswMDQ0OzAwNDQ7CisxRDUwODsxRDUwODsxRDUwODswMDQ1OzAwNDU7CisxRDUwOTsxRDUwOTsxRDUwOTswMDQ2OzAwNDY7CisxRDUwQTsxRDUwQTsxRDUwQTswMDQ3OzAwNDc7CisxRDUwRDsxRDUwRDsxRDUwRDswMDRBOzAwNEE7CisxRDUwRTsxRDUwRTsxRDUwRTswMDRCOzAwNEI7CisxRDUwRjsxRDUwRjsxRDUwRjswMDRDOzAwNEM7CisxRDUxMDsxRDUxMDsxRDUxMDswMDREOzAwNEQ7CisxRDUxMTsxRDUxMTsxRDUxMTswMDRFOzAwNEU7CisxRDUxMjsxRDUxMjsxRDUxMjswMDRGOzAwNEY7CisxRDUxMzsxRDUxMzsxRDUxMzswMDUwOzAwNTA7CisxRDUxNDsxRDUxNDsxRDUxNDswMDUxOzAwNTE7CisxRDUxNjsxRDUxNjsxRDUxNjswMDUzOzAwNTM7CisxRDUxNzsxRDUxNzsxRDUxNzswMDU0OzAwNTQ7CisxRDUxODsxRDUxODsxRDUxODswMDU1OzAwNTU7CisxRDUxOTsxRDUxOTsxRDUxOTswMDU2OzAwNTY7CisxRDUxQTsxRDUxQTsxRDUxQTswMDU3OzAwNTc7CisxRDUxQjsxRDUxQjsxRDUxQjswMDU4OzAwNTg7CisxRDUxQzsxRDUxQzsxRDUxQzswMDU5OzAwNTk7CisxRDUxRTsxRDUxRTsxRDUxRTswMDYxOzAwNjE7CisxRDUxRjsxRDUxRjsxRDUxRjswMDYyOzAwNjI7CisxRDUyMDsxRDUyMDsxRDUyMDswMDYzOzAwNjM7CisxRDUyMTsxRDUyMTsxRDUyMTswMDY0OzAwNjQ7CisxRDUyMjsxRDUyMjsxRDUyMjswMDY1OzAwNjU7CisxRDUyMzsxRDUyMzsxRDUyMzswMDY2OzAwNjY7CisxRDUyNDsxRDUyNDsxRDUyNDswMDY3OzAwNjc7CisxRDUyNTsxRDUyNTsxRDUyNTswMDY4OzAwNjg7CisxRDUyNjsxRDUyNjsxRDUyNjswMDY5OzAwNjk7CisxRDUyNzsxRDUyNzsxRDUyNzswMDZBOzAwNkE7CisxRDUyODsxRDUyODsxRDUyODswMDZCOzAwNkI7CisxRDUyOTsxRDUyOTsxRDUyOTswMDZDOzAwNkM7CisxRDUyQTsxRDUyQTsxRDUyQTswMDZEOzAwNkQ7CisxRDUyQjsxRDUyQjsxRDUyQjswMDZFOzAwNkU7CisxRDUyQzsxRDUyQzsxRDUyQzswMDZGOzAwNkY7CisxRDUyRDsxRDUyRDsxRDUyRDswMDcwOzAwNzA7CisxRDUyRTsxRDUyRTsxRDUyRTswMDcxOzAwNzE7CisxRDUyRjsxRDUyRjsxRDUyRjswMDcyOzAwNzI7CisxRDUzMDsxRDUzMDsxRDUzMDswMDczOzAwNzM7CisxRDUzMTsxRDUzMTsxRDUzMTswMDc0OzAwNzQ7CisxRDUzMjsxRDUzMjsxRDUzMjswMDc1OzAwNzU7CisxRDUzMzsxRDUzMzsxRDUzMzswMDc2OzAwNzY7CisxRDUzNDsxRDUzNDsxRDUzNDswMDc3OzAwNzc7CisxRDUzNTsxRDUzNTsxRDUzNTswMDc4OzAwNzg7CisxRDUzNjsxRDUzNjsxRDUzNjswMDc5OzAwNzk7CisxRDUzNzsxRDUzNzsxRDUzNzswMDdBOzAwN0E7CisxRDUzODsxRDUzODsxRDUzODswMDQxOzAwNDE7CisxRDUzOTsxRDUzOTsxRDUzOTswMDQyOzAwNDI7CisxRDUzQjsxRDUzQjsxRDUzQjswMDQ0OzAwNDQ7CisxRDUzQzsxRDUzQzsxRDUzQzswMDQ1OzAwNDU7CisxRDUzRDsxRDUzRDsxRDUzRDswMDQ2OzAwNDY7CisxRDUzRTsxRDUzRTsxRDUzRTswMDQ3OzAwNDc7CisxRDU0MDsxRDU0MDsxRDU0MDswMDQ5OzAwNDk7CisxRDU0MTsxRDU0MTsxRDU0MTswMDRBOzAwNEE7CisxRDU0MjsxRDU0MjsxRDU0MjswMDRCOzAwNEI7CisxRDU0MzsxRDU0MzsxRDU0MzswMDRDOzAwNEM7CisxRDU0NDsxRDU0NDsxRDU0NDswMDREOzAwNEQ7CisxRDU0NjsxRDU0NjsxRDU0NjswMDRGOzAwNEY7CisxRDU0QTsxRDU0QTsxRDU0QTswMDUzOzAwNTM7CisxRDU0QjsxRDU0QjsxRDU0QjswMDU0OzAwNTQ7CisxRDU0QzsxRDU0QzsxRDU0QzswMDU1OzAwNTU7CisxRDU0RDsxRDU0RDsxRDU0RDswMDU2OzAwNTY7CisxRDU0RTsxRDU0RTsxRDU0RTswMDU3OzAwNTc7CisxRDU0RjsxRDU0RjsxRDU0RjswMDU4OzAwNTg7CisxRDU1MDsxRDU1MDsxRDU1MDswMDU5OzAwNTk7CisxRDU1MjsxRDU1MjsxRDU1MjswMDYxOzAwNjE7CisxRDU1MzsxRDU1MzsxRDU1MzswMDYyOzAwNjI7CisxRDU1NDsxRDU1NDsxRDU1NDswMDYzOzAwNjM7CisxRDU1NTsxRDU1NTsxRDU1NTswMDY0OzAwNjQ7CisxRDU1NjsxRDU1NjsxRDU1NjswMDY1OzAwNjU7CisxRDU1NzsxRDU1NzsxRDU1NzswMDY2OzAwNjY7CisxRDU1ODsxRDU1ODsxRDU1ODswMDY3OzAwNjc7CisxRDU1OTsxRDU1OTsxRDU1OTswMDY4OzAwNjg7CisxRDU1QTsxRDU1QTsxRDU1QTswMDY5OzAwNjk7CisxRDU1QjsxRDU1QjsxRDU1QjswMDZBOzAwNkE7CisxRDU1QzsxRDU1QzsxRDU1QzswMDZCOzAwNkI7CisxRDU1RDsxRDU1RDsxRDU1RDswMDZDOzAwNkM7CisxRDU1RTsxRDU1RTsxRDU1RTswMDZEOzAwNkQ7CisxRDU1RjsxRDU1RjsxRDU1RjswMDZFOzAwNkU7CisxRDU2MDsxRDU2MDsxRDU2MDswMDZGOzAwNkY7CisxRDU2MTsxRDU2MTsxRDU2MTswMDcwOzAwNzA7CisxRDU2MjsxRDU2MjsxRDU2MjswMDcxOzAwNzE7CisxRDU2MzsxRDU2MzsxRDU2MzswMDcyOzAwNzI7CisxRDU2NDsxRDU2NDsxRDU2NDswMDczOzAwNzM7CisxRDU2NTsxRDU2NTsxRDU2NTswMDc0OzAwNzQ7CisxRDU2NjsxRDU2NjsxRDU2NjswMDc1OzAwNzU7CisxRDU2NzsxRDU2NzsxRDU2NzswMDc2OzAwNzY7CisxRDU2ODsxRDU2ODsxRDU2ODswMDc3OzAwNzc7CisxRDU2OTsxRDU2OTsxRDU2OTswMDc4OzAwNzg7CisxRDU2QTsxRDU2QTsxRDU2QTswMDc5OzAwNzk7CisxRDU2QjsxRDU2QjsxRDU2QjswMDdBOzAwN0E7CisxRDU2QzsxRDU2QzsxRDU2QzswMDQxOzAwNDE7CisxRDU2RDsxRDU2RDsxRDU2RDswMDQyOzAwNDI7CisxRDU2RTsxRDU2RTsxRDU2RTswMDQzOzAwNDM7CisxRDU2RjsxRDU2RjsxRDU2RjswMDQ0OzAwNDQ7CisxRDU3MDsxRDU3MDsxRDU3MDswMDQ1OzAwNDU7CisxRDU3MTsxRDU3MTsxRDU3MTswMDQ2OzAwNDY7CisxRDU3MjsxRDU3MjsxRDU3MjswMDQ3OzAwNDc7CisxRDU3MzsxRDU3MzsxRDU3MzswMDQ4OzAwNDg7CisxRDU3NDsxRDU3NDsxRDU3NDswMDQ5OzAwNDk7CisxRDU3NTsxRDU3NTsxRDU3NTswMDRBOzAwNEE7CisxRDU3NjsxRDU3NjsxRDU3NjswMDRCOzAwNEI7CisxRDU3NzsxRDU3NzsxRDU3NzswMDRDOzAwNEM7CisxRDU3ODsxRDU3ODsxRDU3ODswMDREOzAwNEQ7CisxRDU3OTsxRDU3OTsxRDU3OTswMDRFOzAwNEU7CisxRDU3QTsxRDU3QTsxRDU3QTswMDRGOzAwNEY7CisxRDU3QjsxRDU3QjsxRDU3QjswMDUwOzAwNTA7CisxRDU3QzsxRDU3QzsxRDU3QzswMDUxOzAwNTE7CisxRDU3RDsxRDU3RDsxRDU3RDswMDUyOzAwNTI7CisxRDU3RTsxRDU3RTsxRDU3RTswMDUzOzAwNTM7CisxRDU3RjsxRDU3RjsxRDU3RjswMDU0OzAwNTQ7CisxRDU4MDsxRDU4MDsxRDU4MDswMDU1OzAwNTU7CisxRDU4MTsxRDU4MTsxRDU4MTswMDU2OzAwNTY7CisxRDU4MjsxRDU4MjsxRDU4MjswMDU3OzAwNTc7CisxRDU4MzsxRDU4MzsxRDU4MzswMDU4OzAwNTg7CisxRDU4NDsxRDU4NDsxRDU4NDswMDU5OzAwNTk7CisxRDU4NTsxRDU4NTsxRDU4NTswMDVBOzAwNUE7CisxRDU4NjsxRDU4NjsxRDU4NjswMDYxOzAwNjE7CisxRDU4NzsxRDU4NzsxRDU4NzswMDYyOzAwNjI7CisxRDU4ODsxRDU4ODsxRDU4ODswMDYzOzAwNjM7CisxRDU4OTsxRDU4OTsxRDU4OTswMDY0OzAwNjQ7CisxRDU4QTsxRDU4QTsxRDU4QTswMDY1OzAwNjU7CisxRDU4QjsxRDU4QjsxRDU4QjswMDY2OzAwNjY7CisxRDU4QzsxRDU4QzsxRDU4QzswMDY3OzAwNjc7CisxRDU4RDsxRDU4RDsxRDU4RDswMDY4OzAwNjg7CisxRDU4RTsxRDU4RTsxRDU4RTswMDY5OzAwNjk7CisxRDU4RjsxRDU4RjsxRDU4RjswMDZBOzAwNkE7CisxRDU5MDsxRDU5MDsxRDU5MDswMDZCOzAwNkI7CisxRDU5MTsxRDU5MTsxRDU5MTswMDZDOzAwNkM7CisxRDU5MjsxRDU5MjsxRDU5MjswMDZEOzAwNkQ7CisxRDU5MzsxRDU5MzsxRDU5MzswMDZFOzAwNkU7CisxRDU5NDsxRDU5NDsxRDU5NDswMDZGOzAwNkY7CisxRDU5NTsxRDU5NTsxRDU5NTswMDcwOzAwNzA7CisxRDU5NjsxRDU5NjsxRDU5NjswMDcxOzAwNzE7CisxRDU5NzsxRDU5NzsxRDU5NzswMDcyOzAwNzI7CisxRDU5ODsxRDU5ODsxRDU5ODswMDczOzAwNzM7CisxRDU5OTsxRDU5OTsxRDU5OTswMDc0OzAwNzQ7CisxRDU5QTsxRDU5QTsxRDU5QTswMDc1OzAwNzU7CisxRDU5QjsxRDU5QjsxRDU5QjswMDc2OzAwNzY7CisxRDU5QzsxRDU5QzsxRDU5QzswMDc3OzAwNzc7CisxRDU5RDsxRDU5RDsxRDU5RDswMDc4OzAwNzg7CisxRDU5RTsxRDU5RTsxRDU5RTswMDc5OzAwNzk7CisxRDU5RjsxRDU5RjsxRDU5RjswMDdBOzAwN0E7CisxRDVBMDsxRDVBMDsxRDVBMDswMDQxOzAwNDE7CisxRDVBMTsxRDVBMTsxRDVBMTswMDQyOzAwNDI7CisxRDVBMjsxRDVBMjsxRDVBMjswMDQzOzAwNDM7CisxRDVBMzsxRDVBMzsxRDVBMzswMDQ0OzAwNDQ7CisxRDVBNDsxRDVBNDsxRDVBNDswMDQ1OzAwNDU7CisxRDVBNTsxRDVBNTsxRDVBNTswMDQ2OzAwNDY7CisxRDVBNjsxRDVBNjsxRDVBNjswMDQ3OzAwNDc7CisxRDVBNzsxRDVBNzsxRDVBNzswMDQ4OzAwNDg7CisxRDVBODsxRDVBODsxRDVBODswMDQ5OzAwNDk7CisxRDVBOTsxRDVBOTsxRDVBOTswMDRBOzAwNEE7CisxRDVBQTsxRDVBQTsxRDVBQTswMDRCOzAwNEI7CisxRDVBQjsxRDVBQjsxRDVBQjswMDRDOzAwNEM7CisxRDVBQzsxRDVBQzsxRDVBQzswMDREOzAwNEQ7CisxRDVBRDsxRDVBRDsxRDVBRDswMDRFOzAwNEU7CisxRDVBRTsxRDVBRTsxRDVBRTswMDRGOzAwNEY7CisxRDVBRjsxRDVBRjsxRDVBRjswMDUwOzAwNTA7CisxRDVCMDsxRDVCMDsxRDVCMDswMDUxOzAwNTE7CisxRDVCMTsxRDVCMTsxRDVCMTswMDUyOzAwNTI7CisxRDVCMjsxRDVCMjsxRDVCMjswMDUzOzAwNTM7CisxRDVCMzsxRDVCMzsxRDVCMzswMDU0OzAwNTQ7CisxRDVCNDsxRDVCNDsxRDVCNDswMDU1OzAwNTU7CisxRDVCNTsxRDVCNTsxRDVCNTswMDU2OzAwNTY7CisxRDVCNjsxRDVCNjsxRDVCNjswMDU3OzAwNTc7CisxRDVCNzsxRDVCNzsxRDVCNzswMDU4OzAwNTg7CisxRDVCODsxRDVCODsxRDVCODswMDU5OzAwNTk7CisxRDVCOTsxRDVCOTsxRDVCOTswMDVBOzAwNUE7CisxRDVCQTsxRDVCQTsxRDVCQTswMDYxOzAwNjE7CisxRDVCQjsxRDVCQjsxRDVCQjswMDYyOzAwNjI7CisxRDVCQzsxRDVCQzsxRDVCQzswMDYzOzAwNjM7CisxRDVCRDsxRDVCRDsxRDVCRDswMDY0OzAwNjQ7CisxRDVCRTsxRDVCRTsxRDVCRTswMDY1OzAwNjU7CisxRDVCRjsxRDVCRjsxRDVCRjswMDY2OzAwNjY7CisxRDVDMDsxRDVDMDsxRDVDMDswMDY3OzAwNjc7CisxRDVDMTsxRDVDMTsxRDVDMTswMDY4OzAwNjg7CisxRDVDMjsxRDVDMjsxRDVDMjswMDY5OzAwNjk7CisxRDVDMzsxRDVDMzsxRDVDMzswMDZBOzAwNkE7CisxRDVDNDsxRDVDNDsxRDVDNDswMDZCOzAwNkI7CisxRDVDNTsxRDVDNTsxRDVDNTswMDZDOzAwNkM7CisxRDVDNjsxRDVDNjsxRDVDNjswMDZEOzAwNkQ7CisxRDVDNzsxRDVDNzsxRDVDNzswMDZFOzAwNkU7CisxRDVDODsxRDVDODsxRDVDODswMDZGOzAwNkY7CisxRDVDOTsxRDVDOTsxRDVDOTswMDcwOzAwNzA7CisxRDVDQTsxRDVDQTsxRDVDQTswMDcxOzAwNzE7CisxRDVDQjsxRDVDQjsxRDVDQjswMDcyOzAwNzI7CisxRDVDQzsxRDVDQzsxRDVDQzswMDczOzAwNzM7CisxRDVDRDsxRDVDRDsxRDVDRDswMDc0OzAwNzQ7CisxRDVDRTsxRDVDRTsxRDVDRTswMDc1OzAwNzU7CisxRDVDRjsxRDVDRjsxRDVDRjswMDc2OzAwNzY7CisxRDVEMDsxRDVEMDsxRDVEMDswMDc3OzAwNzc7CisxRDVEMTsxRDVEMTsxRDVEMTswMDc4OzAwNzg7CisxRDVEMjsxRDVEMjsxRDVEMjswMDc5OzAwNzk7CisxRDVEMzsxRDVEMzsxRDVEMzswMDdBOzAwN0E7CisxRDVENDsxRDVENDsxRDVENDswMDQxOzAwNDE7CisxRDVENTsxRDVENTsxRDVENTswMDQyOzAwNDI7CisxRDVENjsxRDVENjsxRDVENjswMDQzOzAwNDM7CisxRDVENzsxRDVENzsxRDVENzswMDQ0OzAwNDQ7CisxRDVEODsxRDVEODsxRDVEODswMDQ1OzAwNDU7CisxRDVEOTsxRDVEOTsxRDVEOTswMDQ2OzAwNDY7CisxRDVEQTsxRDVEQTsxRDVEQTswMDQ3OzAwNDc7CisxRDVEQjsxRDVEQjsxRDVEQjswMDQ4OzAwNDg7CisxRDVEQzsxRDVEQzsxRDVEQzswMDQ5OzAwNDk7CisxRDVERDsxRDVERDsxRDVERDswMDRBOzAwNEE7CisxRDVERTsxRDVERTsxRDVERTswMDRCOzAwNEI7CisxRDVERjsxRDVERjsxRDVERjswMDRDOzAwNEM7CisxRDVFMDsxRDVFMDsxRDVFMDswMDREOzAwNEQ7CisxRDVFMTsxRDVFMTsxRDVFMTswMDRFOzAwNEU7CisxRDVFMjsxRDVFMjsxRDVFMjswMDRGOzAwNEY7CisxRDVFMzsxRDVFMzsxRDVFMzswMDUwOzAwNTA7CisxRDVFNDsxRDVFNDsxRDVFNDswMDUxOzAwNTE7CisxRDVFNTsxRDVFNTsxRDVFNTswMDUyOzAwNTI7CisxRDVFNjsxRDVFNjsxRDVFNjswMDUzOzAwNTM7CisxRDVFNzsxRDVFNzsxRDVFNzswMDU0OzAwNTQ7CisxRDVFODsxRDVFODsxRDVFODswMDU1OzAwNTU7CisxRDVFOTsxRDVFOTsxRDVFOTswMDU2OzAwNTY7CisxRDVFQTsxRDVFQTsxRDVFQTswMDU3OzAwNTc7CisxRDVFQjsxRDVFQjsxRDVFQjswMDU4OzAwNTg7CisxRDVFQzsxRDVFQzsxRDVFQzswMDU5OzAwNTk7CisxRDVFRDsxRDVFRDsxRDVFRDswMDVBOzAwNUE7CisxRDVFRTsxRDVFRTsxRDVFRTswMDYxOzAwNjE7CisxRDVFRjsxRDVFRjsxRDVFRjswMDYyOzAwNjI7CisxRDVGMDsxRDVGMDsxRDVGMDswMDYzOzAwNjM7CisxRDVGMTsxRDVGMTsxRDVGMTswMDY0OzAwNjQ7CisxRDVGMjsxRDVGMjsxRDVGMjswMDY1OzAwNjU7CisxRDVGMzsxRDVGMzsxRDVGMzswMDY2OzAwNjY7CisxRDVGNDsxRDVGNDsxRDVGNDswMDY3OzAwNjc7CisxRDVGNTsxRDVGNTsxRDVGNTswMDY4OzAwNjg7CisxRDVGNjsxRDVGNjsxRDVGNjswMDY5OzAwNjk7CisxRDVGNzsxRDVGNzsxRDVGNzswMDZBOzAwNkE7CisxRDVGODsxRDVGODsxRDVGODswMDZCOzAwNkI7CisxRDVGOTsxRDVGOTsxRDVGOTswMDZDOzAwNkM7CisxRDVGQTsxRDVGQTsxRDVGQTswMDZEOzAwNkQ7CisxRDVGQjsxRDVGQjsxRDVGQjswMDZFOzAwNkU7CisxRDVGQzsxRDVGQzsxRDVGQzswMDZGOzAwNkY7CisxRDVGRDsxRDVGRDsxRDVGRDswMDcwOzAwNzA7CisxRDVGRTsxRDVGRTsxRDVGRTswMDcxOzAwNzE7CisxRDVGRjsxRDVGRjsxRDVGRjswMDcyOzAwNzI7CisxRDYwMDsxRDYwMDsxRDYwMDswMDczOzAwNzM7CisxRDYwMTsxRDYwMTsxRDYwMTswMDc0OzAwNzQ7CisxRDYwMjsxRDYwMjsxRDYwMjswMDc1OzAwNzU7CisxRDYwMzsxRDYwMzsxRDYwMzswMDc2OzAwNzY7CisxRDYwNDsxRDYwNDsxRDYwNDswMDc3OzAwNzc7CisxRDYwNTsxRDYwNTsxRDYwNTswMDc4OzAwNzg7CisxRDYwNjsxRDYwNjsxRDYwNjswMDc5OzAwNzk7CisxRDYwNzsxRDYwNzsxRDYwNzswMDdBOzAwN0E7CisxRDYwODsxRDYwODsxRDYwODswMDQxOzAwNDE7CisxRDYwOTsxRDYwOTsxRDYwOTswMDQyOzAwNDI7CisxRDYwQTsxRDYwQTsxRDYwQTswMDQzOzAwNDM7CisxRDYwQjsxRDYwQjsxRDYwQjswMDQ0OzAwNDQ7CisxRDYwQzsxRDYwQzsxRDYwQzswMDQ1OzAwNDU7CisxRDYwRDsxRDYwRDsxRDYwRDswMDQ2OzAwNDY7CisxRDYwRTsxRDYwRTsxRDYwRTswMDQ3OzAwNDc7CisxRDYwRjsxRDYwRjsxRDYwRjswMDQ4OzAwNDg7CisxRDYxMDsxRDYxMDsxRDYxMDswMDQ5OzAwNDk7CisxRDYxMTsxRDYxMTsxRDYxMTswMDRBOzAwNEE7CisxRDYxMjsxRDYxMjsxRDYxMjswMDRCOzAwNEI7CisxRDYxMzsxRDYxMzsxRDYxMzswMDRDOzAwNEM7CisxRDYxNDsxRDYxNDsxRDYxNDswMDREOzAwNEQ7CisxRDYxNTsxRDYxNTsxRDYxNTswMDRFOzAwNEU7CisxRDYxNjsxRDYxNjsxRDYxNjswMDRGOzAwNEY7CisxRDYxNzsxRDYxNzsxRDYxNzswMDUwOzAwNTA7CisxRDYxODsxRDYxODsxRDYxODswMDUxOzAwNTE7CisxRDYxOTsxRDYxOTsxRDYxOTswMDUyOzAwNTI7CisxRDYxQTsxRDYxQTsxRDYxQTswMDUzOzAwNTM7CisxRDYxQjsxRDYxQjsxRDYxQjswMDU0OzAwNTQ7CisxRDYxQzsxRDYxQzsxRDYxQzswMDU1OzAwNTU7CisxRDYxRDsxRDYxRDsxRDYxRDswMDU2OzAwNTY7CisxRDYxRTsxRDYxRTsxRDYxRTswMDU3OzAwNTc7CisxRDYxRjsxRDYxRjsxRDYxRjswMDU4OzAwNTg7CisxRDYyMDsxRDYyMDsxRDYyMDswMDU5OzAwNTk7CisxRDYyMTsxRDYyMTsxRDYyMTswMDVBOzAwNUE7CisxRDYyMjsxRDYyMjsxRDYyMjswMDYxOzAwNjE7CisxRDYyMzsxRDYyMzsxRDYyMzswMDYyOzAwNjI7CisxRDYyNDsxRDYyNDsxRDYyNDswMDYzOzAwNjM7CisxRDYyNTsxRDYyNTsxRDYyNTswMDY0OzAwNjQ7CisxRDYyNjsxRDYyNjsxRDYyNjswMDY1OzAwNjU7CisxRDYyNzsxRDYyNzsxRDYyNzswMDY2OzAwNjY7CisxRDYyODsxRDYyODsxRDYyODswMDY3OzAwNjc7CisxRDYyOTsxRDYyOTsxRDYyOTswMDY4OzAwNjg7CisxRDYyQTsxRDYyQTsxRDYyQTswMDY5OzAwNjk7CisxRDYyQjsxRDYyQjsxRDYyQjswMDZBOzAwNkE7CisxRDYyQzsxRDYyQzsxRDYyQzswMDZCOzAwNkI7CisxRDYyRDsxRDYyRDsxRDYyRDswMDZDOzAwNkM7CisxRDYyRTsxRDYyRTsxRDYyRTswMDZEOzAwNkQ7CisxRDYyRjsxRDYyRjsxRDYyRjswMDZFOzAwNkU7CisxRDYzMDsxRDYzMDsxRDYzMDswMDZGOzAwNkY7CisxRDYzMTsxRDYzMTsxRDYzMTswMDcwOzAwNzA7CisxRDYzMjsxRDYzMjsxRDYzMjswMDcxOzAwNzE7CisxRDYzMzsxRDYzMzsxRDYzMzswMDcyOzAwNzI7CisxRDYzNDsxRDYzNDsxRDYzNDswMDczOzAwNzM7CisxRDYzNTsxRDYzNTsxRDYzNTswMDc0OzAwNzQ7CisxRDYzNjsxRDYzNjsxRDYzNjswMDc1OzAwNzU7CisxRDYzNzsxRDYzNzsxRDYzNzswMDc2OzAwNzY7CisxRDYzODsxRDYzODsxRDYzODswMDc3OzAwNzc7CisxRDYzOTsxRDYzOTsxRDYzOTswMDc4OzAwNzg7CisxRDYzQTsxRDYzQTsxRDYzQTswMDc5OzAwNzk7CisxRDYzQjsxRDYzQjsxRDYzQjswMDdBOzAwN0E7CisxRDYzQzsxRDYzQzsxRDYzQzswMDQxOzAwNDE7CisxRDYzRDsxRDYzRDsxRDYzRDswMDQyOzAwNDI7CisxRDYzRTsxRDYzRTsxRDYzRTswMDQzOzAwNDM7CisxRDYzRjsxRDYzRjsxRDYzRjswMDQ0OzAwNDQ7CisxRDY0MDsxRDY0MDsxRDY0MDswMDQ1OzAwNDU7CisxRDY0MTsxRDY0MTsxRDY0MTswMDQ2OzAwNDY7CisxRDY0MjsxRDY0MjsxRDY0MjswMDQ3OzAwNDc7CisxRDY0MzsxRDY0MzsxRDY0MzswMDQ4OzAwNDg7CisxRDY0NDsxRDY0NDsxRDY0NDswMDQ5OzAwNDk7CisxRDY0NTsxRDY0NTsxRDY0NTswMDRBOzAwNEE7CisxRDY0NjsxRDY0NjsxRDY0NjswMDRCOzAwNEI7CisxRDY0NzsxRDY0NzsxRDY0NzswMDRDOzAwNEM7CisxRDY0ODsxRDY0ODsxRDY0ODswMDREOzAwNEQ7CisxRDY0OTsxRDY0OTsxRDY0OTswMDRFOzAwNEU7CisxRDY0QTsxRDY0QTsxRDY0QTswMDRGOzAwNEY7CisxRDY0QjsxRDY0QjsxRDY0QjswMDUwOzAwNTA7CisxRDY0QzsxRDY0QzsxRDY0QzswMDUxOzAwNTE7CisxRDY0RDsxRDY0RDsxRDY0RDswMDUyOzAwNTI7CisxRDY0RTsxRDY0RTsxRDY0RTswMDUzOzAwNTM7CisxRDY0RjsxRDY0RjsxRDY0RjswMDU0OzAwNTQ7CisxRDY1MDsxRDY1MDsxRDY1MDswMDU1OzAwNTU7CisxRDY1MTsxRDY1MTsxRDY1MTswMDU2OzAwNTY7CisxRDY1MjsxRDY1MjsxRDY1MjswMDU3OzAwNTc7CisxRDY1MzsxRDY1MzsxRDY1MzswMDU4OzAwNTg7CisxRDY1NDsxRDY1NDsxRDY1NDswMDU5OzAwNTk7CisxRDY1NTsxRDY1NTsxRDY1NTswMDVBOzAwNUE7CisxRDY1NjsxRDY1NjsxRDY1NjswMDYxOzAwNjE7CisxRDY1NzsxRDY1NzsxRDY1NzswMDYyOzAwNjI7CisxRDY1ODsxRDY1ODsxRDY1ODswMDYzOzAwNjM7CisxRDY1OTsxRDY1OTsxRDY1OTswMDY0OzAwNjQ7CisxRDY1QTsxRDY1QTsxRDY1QTswMDY1OzAwNjU7CisxRDY1QjsxRDY1QjsxRDY1QjswMDY2OzAwNjY7CisxRDY1QzsxRDY1QzsxRDY1QzswMDY3OzAwNjc7CisxRDY1RDsxRDY1RDsxRDY1RDswMDY4OzAwNjg7CisxRDY1RTsxRDY1RTsxRDY1RTswMDY5OzAwNjk7CisxRDY1RjsxRDY1RjsxRDY1RjswMDZBOzAwNkE7CisxRDY2MDsxRDY2MDsxRDY2MDswMDZCOzAwNkI7CisxRDY2MTsxRDY2MTsxRDY2MTswMDZDOzAwNkM7CisxRDY2MjsxRDY2MjsxRDY2MjswMDZEOzAwNkQ7CisxRDY2MzsxRDY2MzsxRDY2MzswMDZFOzAwNkU7CisxRDY2NDsxRDY2NDsxRDY2NDswMDZGOzAwNkY7CisxRDY2NTsxRDY2NTsxRDY2NTswMDcwOzAwNzA7CisxRDY2NjsxRDY2NjsxRDY2NjswMDcxOzAwNzE7CisxRDY2NzsxRDY2NzsxRDY2NzswMDcyOzAwNzI7CisxRDY2ODsxRDY2ODsxRDY2ODswMDczOzAwNzM7CisxRDY2OTsxRDY2OTsxRDY2OTswMDc0OzAwNzQ7CisxRDY2QTsxRDY2QTsxRDY2QTswMDc1OzAwNzU7CisxRDY2QjsxRDY2QjsxRDY2QjswMDc2OzAwNzY7CisxRDY2QzsxRDY2QzsxRDY2QzswMDc3OzAwNzc7CisxRDY2RDsxRDY2RDsxRDY2RDswMDc4OzAwNzg7CisxRDY2RTsxRDY2RTsxRDY2RTswMDc5OzAwNzk7CisxRDY2RjsxRDY2RjsxRDY2RjswMDdBOzAwN0E7CisxRDY3MDsxRDY3MDsxRDY3MDswMDQxOzAwNDE7CisxRDY3MTsxRDY3MTsxRDY3MTswMDQyOzAwNDI7CisxRDY3MjsxRDY3MjsxRDY3MjswMDQzOzAwNDM7CisxRDY3MzsxRDY3MzsxRDY3MzswMDQ0OzAwNDQ7CisxRDY3NDsxRDY3NDsxRDY3NDswMDQ1OzAwNDU7CisxRDY3NTsxRDY3NTsxRDY3NTswMDQ2OzAwNDY7CisxRDY3NjsxRDY3NjsxRDY3NjswMDQ3OzAwNDc7CisxRDY3NzsxRDY3NzsxRDY3NzswMDQ4OzAwNDg7CisxRDY3ODsxRDY3ODsxRDY3ODswMDQ5OzAwNDk7CisxRDY3OTsxRDY3OTsxRDY3OTswMDRBOzAwNEE7CisxRDY3QTsxRDY3QTsxRDY3QTswMDRCOzAwNEI7CisxRDY3QjsxRDY3QjsxRDY3QjswMDRDOzAwNEM7CisxRDY3QzsxRDY3QzsxRDY3QzswMDREOzAwNEQ7CisxRDY3RDsxRDY3RDsxRDY3RDswMDRFOzAwNEU7CisxRDY3RTsxRDY3RTsxRDY3RTswMDRGOzAwNEY7CisxRDY3RjsxRDY3RjsxRDY3RjswMDUwOzAwNTA7CisxRDY4MDsxRDY4MDsxRDY4MDswMDUxOzAwNTE7CisxRDY4MTsxRDY4MTsxRDY4MTswMDUyOzAwNTI7CisxRDY4MjsxRDY4MjsxRDY4MjswMDUzOzAwNTM7CisxRDY4MzsxRDY4MzsxRDY4MzswMDU0OzAwNTQ7CisxRDY4NDsxRDY4NDsxRDY4NDswMDU1OzAwNTU7CisxRDY4NTsxRDY4NTsxRDY4NTswMDU2OzAwNTY7CisxRDY4NjsxRDY4NjsxRDY4NjswMDU3OzAwNTc7CisxRDY4NzsxRDY4NzsxRDY4NzswMDU4OzAwNTg7CisxRDY4ODsxRDY4ODsxRDY4ODswMDU5OzAwNTk7CisxRDY4OTsxRDY4OTsxRDY4OTswMDVBOzAwNUE7CisxRDY4QTsxRDY4QTsxRDY4QTswMDYxOzAwNjE7CisxRDY4QjsxRDY4QjsxRDY4QjswMDYyOzAwNjI7CisxRDY4QzsxRDY4QzsxRDY4QzswMDYzOzAwNjM7CisxRDY4RDsxRDY4RDsxRDY4RDswMDY0OzAwNjQ7CisxRDY4RTsxRDY4RTsxRDY4RTswMDY1OzAwNjU7CisxRDY4RjsxRDY4RjsxRDY4RjswMDY2OzAwNjY7CisxRDY5MDsxRDY5MDsxRDY5MDswMDY3OzAwNjc7CisxRDY5MTsxRDY5MTsxRDY5MTswMDY4OzAwNjg7CisxRDY5MjsxRDY5MjsxRDY5MjswMDY5OzAwNjk7CisxRDY5MzsxRDY5MzsxRDY5MzswMDZBOzAwNkE7CisxRDY5NDsxRDY5NDsxRDY5NDswMDZCOzAwNkI7CisxRDY5NTsxRDY5NTsxRDY5NTswMDZDOzAwNkM7CisxRDY5NjsxRDY5NjsxRDY5NjswMDZEOzAwNkQ7CisxRDY5NzsxRDY5NzsxRDY5NzswMDZFOzAwNkU7CisxRDY5ODsxRDY5ODsxRDY5ODswMDZGOzAwNkY7CisxRDY5OTsxRDY5OTsxRDY5OTswMDcwOzAwNzA7CisxRDY5QTsxRDY5QTsxRDY5QTswMDcxOzAwNzE7CisxRDY5QjsxRDY5QjsxRDY5QjswMDcyOzAwNzI7CisxRDY5QzsxRDY5QzsxRDY5QzswMDczOzAwNzM7CisxRDY5RDsxRDY5RDsxRDY5RDswMDc0OzAwNzQ7CisxRDY5RTsxRDY5RTsxRDY5RTswMDc1OzAwNzU7CisxRDY5RjsxRDY5RjsxRDY5RjswMDc2OzAwNzY7CisxRDZBMDsxRDZBMDsxRDZBMDswMDc3OzAwNzc7CisxRDZBMTsxRDZBMTsxRDZBMTswMDc4OzAwNzg7CisxRDZBMjsxRDZBMjsxRDZBMjswMDc5OzAwNzk7CisxRDZBMzsxRDZBMzsxRDZBMzswMDdBOzAwN0E7CisxRDZBODsxRDZBODsxRDZBODswMzkxOzAzOTE7CisxRDZBOTsxRDZBOTsxRDZBOTswMzkyOzAzOTI7CisxRDZBQTsxRDZBQTsxRDZBQTswMzkzOzAzOTM7CisxRDZBQjsxRDZBQjsxRDZBQjswMzk0OzAzOTQ7CisxRDZBQzsxRDZBQzsxRDZBQzswMzk1OzAzOTU7CisxRDZBRDsxRDZBRDsxRDZBRDswMzk2OzAzOTY7CisxRDZBRTsxRDZBRTsxRDZBRTswMzk3OzAzOTc7CisxRDZBRjsxRDZBRjsxRDZBRjswMzk4OzAzOTg7CisxRDZCMDsxRDZCMDsxRDZCMDswMzk5OzAzOTk7CisxRDZCMTsxRDZCMTsxRDZCMTswMzlBOzAzOUE7CisxRDZCMjsxRDZCMjsxRDZCMjswMzlCOzAzOUI7CisxRDZCMzsxRDZCMzsxRDZCMzswMzlDOzAzOUM7CisxRDZCNDsxRDZCNDsxRDZCNDswMzlEOzAzOUQ7CisxRDZCNTsxRDZCNTsxRDZCNTswMzlFOzAzOUU7CisxRDZCNjsxRDZCNjsxRDZCNjswMzlGOzAzOUY7CisxRDZCNzsxRDZCNzsxRDZCNzswM0EwOzAzQTA7CisxRDZCODsxRDZCODsxRDZCODswM0ExOzAzQTE7CisxRDZCOTsxRDZCOTsxRDZCOTswMzk4OzAzOTg7CisxRDZCQTsxRDZCQTsxRDZCQTswM0EzOzAzQTM7CisxRDZCQjsxRDZCQjsxRDZCQjswM0E0OzAzQTQ7CisxRDZCQzsxRDZCQzsxRDZCQzswM0E1OzAzQTU7CisxRDZCRDsxRDZCRDsxRDZCRDswM0E2OzAzQTY7CisxRDZCRTsxRDZCRTsxRDZCRTswM0E3OzAzQTc7CisxRDZCRjsxRDZCRjsxRDZCRjswM0E4OzAzQTg7CisxRDZDMDsxRDZDMDsxRDZDMDswM0E5OzAzQTk7CisxRDZDMTsxRDZDMTsxRDZDMTsyMjA3OzIyMDc7CisxRDZDMjsxRDZDMjsxRDZDMjswM0IxOzAzQjE7CisxRDZDMzsxRDZDMzsxRDZDMzswM0IyOzAzQjI7CisxRDZDNDsxRDZDNDsxRDZDNDswM0IzOzAzQjM7CisxRDZDNTsxRDZDNTsxRDZDNTswM0I0OzAzQjQ7CisxRDZDNjsxRDZDNjsxRDZDNjswM0I1OzAzQjU7CisxRDZDNzsxRDZDNzsxRDZDNzswM0I2OzAzQjY7CisxRDZDODsxRDZDODsxRDZDODswM0I3OzAzQjc7CisxRDZDOTsxRDZDOTsxRDZDOTswM0I4OzAzQjg7CisxRDZDQTsxRDZDQTsxRDZDQTswM0I5OzAzQjk7CisxRDZDQjsxRDZDQjsxRDZDQjswM0JBOzAzQkE7CisxRDZDQzsxRDZDQzsxRDZDQzswM0JCOzAzQkI7CisxRDZDRDsxRDZDRDsxRDZDRDswM0JDOzAzQkM7CisxRDZDRTsxRDZDRTsxRDZDRTswM0JEOzAzQkQ7CisxRDZDRjsxRDZDRjsxRDZDRjswM0JFOzAzQkU7CisxRDZEMDsxRDZEMDsxRDZEMDswM0JGOzAzQkY7CisxRDZEMTsxRDZEMTsxRDZEMTswM0MwOzAzQzA7CisxRDZEMjsxRDZEMjsxRDZEMjswM0MxOzAzQzE7CisxRDZEMzsxRDZEMzsxRDZEMzswM0MyOzAzQzI7CisxRDZENDsxRDZENDsxRDZENDswM0MzOzAzQzM7CisxRDZENTsxRDZENTsxRDZENTswM0M0OzAzQzQ7CisxRDZENjsxRDZENjsxRDZENjswM0M1OzAzQzU7CisxRDZENzsxRDZENzsxRDZENzswM0M2OzAzQzY7CisxRDZEODsxRDZEODsxRDZEODswM0M3OzAzQzc7CisxRDZEOTsxRDZEOTsxRDZEOTswM0M4OzAzQzg7CisxRDZEQTsxRDZEQTsxRDZEQTswM0M5OzAzQzk7CisxRDZEQjsxRDZEQjsxRDZEQjsyMjAyOzIyMDI7CisxRDZEQzsxRDZEQzsxRDZEQzswM0I1OzAzQjU7CisxRDZERDsxRDZERDsxRDZERDswM0I4OzAzQjg7CisxRDZERTsxRDZERTsxRDZERTswM0JBOzAzQkE7CisxRDZERjsxRDZERjsxRDZERjswM0M2OzAzQzY7CisxRDZFMDsxRDZFMDsxRDZFMDswM0MxOzAzQzE7CisxRDZFMTsxRDZFMTsxRDZFMTswM0MwOzAzQzA7CisxRDZFMjsxRDZFMjsxRDZFMjswMzkxOzAzOTE7CisxRDZFMzsxRDZFMzsxRDZFMzswMzkyOzAzOTI7CisxRDZFNDsxRDZFNDsxRDZFNDswMzkzOzAzOTM7CisxRDZFNTsxRDZFNTsxRDZFNTswMzk0OzAzOTQ7CisxRDZFNjsxRDZFNjsxRDZFNjswMzk1OzAzOTU7CisxRDZFNzsxRDZFNzsxRDZFNzswMzk2OzAzOTY7CisxRDZFODsxRDZFODsxRDZFODswMzk3OzAzOTc7CisxRDZFOTsxRDZFOTsxRDZFOTswMzk4OzAzOTg7CisxRDZFQTsxRDZFQTsxRDZFQTswMzk5OzAzOTk7CisxRDZFQjsxRDZFQjsxRDZFQjswMzlBOzAzOUE7CisxRDZFQzsxRDZFQzsxRDZFQzswMzlCOzAzOUI7CisxRDZFRDsxRDZFRDsxRDZFRDswMzlDOzAzOUM7CisxRDZFRTsxRDZFRTsxRDZFRTswMzlEOzAzOUQ7CisxRDZFRjsxRDZFRjsxRDZFRjswMzlFOzAzOUU7CisxRDZGMDsxRDZGMDsxRDZGMDswMzlGOzAzOUY7CisxRDZGMTsxRDZGMTsxRDZGMTswM0EwOzAzQTA7CisxRDZGMjsxRDZGMjsxRDZGMjswM0ExOzAzQTE7CisxRDZGMzsxRDZGMzsxRDZGMzswMzk4OzAzOTg7CisxRDZGNDsxRDZGNDsxRDZGNDswM0EzOzAzQTM7CisxRDZGNTsxRDZGNTsxRDZGNTswM0E0OzAzQTQ7CisxRDZGNjsxRDZGNjsxRDZGNjswM0E1OzAzQTU7CisxRDZGNzsxRDZGNzsxRDZGNzswM0E2OzAzQTY7CisxRDZGODsxRDZGODsxRDZGODswM0E3OzAzQTc7CisxRDZGOTsxRDZGOTsxRDZGOTswM0E4OzAzQTg7CisxRDZGQTsxRDZGQTsxRDZGQTswM0E5OzAzQTk7CisxRDZGQjsxRDZGQjsxRDZGQjsyMjA3OzIyMDc7CisxRDZGQzsxRDZGQzsxRDZGQzswM0IxOzAzQjE7CisxRDZGRDsxRDZGRDsxRDZGRDswM0IyOzAzQjI7CisxRDZGRTsxRDZGRTsxRDZGRTswM0IzOzAzQjM7CisxRDZGRjsxRDZGRjsxRDZGRjswM0I0OzAzQjQ7CisxRDcwMDsxRDcwMDsxRDcwMDswM0I1OzAzQjU7CisxRDcwMTsxRDcwMTsxRDcwMTswM0I2OzAzQjY7CisxRDcwMjsxRDcwMjsxRDcwMjswM0I3OzAzQjc7CisxRDcwMzsxRDcwMzsxRDcwMzswM0I4OzAzQjg7CisxRDcwNDsxRDcwNDsxRDcwNDswM0I5OzAzQjk7CisxRDcwNTsxRDcwNTsxRDcwNTswM0JBOzAzQkE7CisxRDcwNjsxRDcwNjsxRDcwNjswM0JCOzAzQkI7CisxRDcwNzsxRDcwNzsxRDcwNzswM0JDOzAzQkM7CisxRDcwODsxRDcwODsxRDcwODswM0JEOzAzQkQ7CisxRDcwOTsxRDcwOTsxRDcwOTswM0JFOzAzQkU7CisxRDcwQTsxRDcwQTsxRDcwQTswM0JGOzAzQkY7CisxRDcwQjsxRDcwQjsxRDcwQjswM0MwOzAzQzA7CisxRDcwQzsxRDcwQzsxRDcwQzswM0MxOzAzQzE7CisxRDcwRDsxRDcwRDsxRDcwRDswM0MyOzAzQzI7CisxRDcwRTsxRDcwRTsxRDcwRTswM0MzOzAzQzM7CisxRDcwRjsxRDcwRjsxRDcwRjswM0M0OzAzQzQ7CisxRDcxMDsxRDcxMDsxRDcxMDswM0M1OzAzQzU7CisxRDcxMTsxRDcxMTsxRDcxMTswM0M2OzAzQzY7CisxRDcxMjsxRDcxMjsxRDcxMjswM0M3OzAzQzc7CisxRDcxMzsxRDcxMzsxRDcxMzswM0M4OzAzQzg7CisxRDcxNDsxRDcxNDsxRDcxNDswM0M5OzAzQzk7CisxRDcxNTsxRDcxNTsxRDcxNTsyMjAyOzIyMDI7CisxRDcxNjsxRDcxNjsxRDcxNjswM0I1OzAzQjU7CisxRDcxNzsxRDcxNzsxRDcxNzswM0I4OzAzQjg7CisxRDcxODsxRDcxODsxRDcxODswM0JBOzAzQkE7CisxRDcxOTsxRDcxOTsxRDcxOTswM0M2OzAzQzY7CisxRDcxQTsxRDcxQTsxRDcxQTswM0MxOzAzQzE7CisxRDcxQjsxRDcxQjsxRDcxQjswM0MwOzAzQzA7CisxRDcxQzsxRDcxQzsxRDcxQzswMzkxOzAzOTE7CisxRDcxRDsxRDcxRDsxRDcxRDswMzkyOzAzOTI7CisxRDcxRTsxRDcxRTsxRDcxRTswMzkzOzAzOTM7CisxRDcxRjsxRDcxRjsxRDcxRjswMzk0OzAzOTQ7CisxRDcyMDsxRDcyMDsxRDcyMDswMzk1OzAzOTU7CisxRDcyMTsxRDcyMTsxRDcyMTswMzk2OzAzOTY7CisxRDcyMjsxRDcyMjsxRDcyMjswMzk3OzAzOTc7CisxRDcyMzsxRDcyMzsxRDcyMzswMzk4OzAzOTg7CisxRDcyNDsxRDcyNDsxRDcyNDswMzk5OzAzOTk7CisxRDcyNTsxRDcyNTsxRDcyNTswMzlBOzAzOUE7CisxRDcyNjsxRDcyNjsxRDcyNjswMzlCOzAzOUI7CisxRDcyNzsxRDcyNzsxRDcyNzswMzlDOzAzOUM7CisxRDcyODsxRDcyODsxRDcyODswMzlEOzAzOUQ7CisxRDcyOTsxRDcyOTsxRDcyOTswMzlFOzAzOUU7CisxRDcyQTsxRDcyQTsxRDcyQTswMzlGOzAzOUY7CisxRDcyQjsxRDcyQjsxRDcyQjswM0EwOzAzQTA7CisxRDcyQzsxRDcyQzsxRDcyQzswM0ExOzAzQTE7CisxRDcyRDsxRDcyRDsxRDcyRDswMzk4OzAzOTg7CisxRDcyRTsxRDcyRTsxRDcyRTswM0EzOzAzQTM7CisxRDcyRjsxRDcyRjsxRDcyRjswM0E0OzAzQTQ7CisxRDczMDsxRDczMDsxRDczMDswM0E1OzAzQTU7CisxRDczMTsxRDczMTsxRDczMTswM0E2OzAzQTY7CisxRDczMjsxRDczMjsxRDczMjswM0E3OzAzQTc7CisxRDczMzsxRDczMzsxRDczMzswM0E4OzAzQTg7CisxRDczNDsxRDczNDsxRDczNDswM0E5OzAzQTk7CisxRDczNTsxRDczNTsxRDczNTsyMjA3OzIyMDc7CisxRDczNjsxRDczNjsxRDczNjswM0IxOzAzQjE7CisxRDczNzsxRDczNzsxRDczNzswM0IyOzAzQjI7CisxRDczODsxRDczODsxRDczODswM0IzOzAzQjM7CisxRDczOTsxRDczOTsxRDczOTswM0I0OzAzQjQ7CisxRDczQTsxRDczQTsxRDczQTswM0I1OzAzQjU7CisxRDczQjsxRDczQjsxRDczQjswM0I2OzAzQjY7CisxRDczQzsxRDczQzsxRDczQzswM0I3OzAzQjc7CisxRDczRDsxRDczRDsxRDczRDswM0I4OzAzQjg7CisxRDczRTsxRDczRTsxRDczRTswM0I5OzAzQjk7CisxRDczRjsxRDczRjsxRDczRjswM0JBOzAzQkE7CisxRDc0MDsxRDc0MDsxRDc0MDswM0JCOzAzQkI7CisxRDc0MTsxRDc0MTsxRDc0MTswM0JDOzAzQkM7CisxRDc0MjsxRDc0MjsxRDc0MjswM0JEOzAzQkQ7CisxRDc0MzsxRDc0MzsxRDc0MzswM0JFOzAzQkU7CisxRDc0NDsxRDc0NDsxRDc0NDswM0JGOzAzQkY7CisxRDc0NTsxRDc0NTsxRDc0NTswM0MwOzAzQzA7CisxRDc0NjsxRDc0NjsxRDc0NjswM0MxOzAzQzE7CisxRDc0NzsxRDc0NzsxRDc0NzswM0MyOzAzQzI7CisxRDc0ODsxRDc0ODsxRDc0ODswM0MzOzAzQzM7CisxRDc0OTsxRDc0OTsxRDc0OTswM0M0OzAzQzQ7CisxRDc0QTsxRDc0QTsxRDc0QTswM0M1OzAzQzU7CisxRDc0QjsxRDc0QjsxRDc0QjswM0M2OzAzQzY7CisxRDc0QzsxRDc0QzsxRDc0QzswM0M3OzAzQzc7CisxRDc0RDsxRDc0RDsxRDc0RDswM0M4OzAzQzg7CisxRDc0RTsxRDc0RTsxRDc0RTswM0M5OzAzQzk7CisxRDc0RjsxRDc0RjsxRDc0RjsyMjAyOzIyMDI7CisxRDc1MDsxRDc1MDsxRDc1MDswM0I1OzAzQjU7CisxRDc1MTsxRDc1MTsxRDc1MTswM0I4OzAzQjg7CisxRDc1MjsxRDc1MjsxRDc1MjswM0JBOzAzQkE7CisxRDc1MzsxRDc1MzsxRDc1MzswM0M2OzAzQzY7CisxRDc1NDsxRDc1NDsxRDc1NDswM0MxOzAzQzE7CisxRDc1NTsxRDc1NTsxRDc1NTswM0MwOzAzQzA7CisxRDc1NjsxRDc1NjsxRDc1NjswMzkxOzAzOTE7CisxRDc1NzsxRDc1NzsxRDc1NzswMzkyOzAzOTI7CisxRDc1ODsxRDc1ODsxRDc1ODswMzkzOzAzOTM7CisxRDc1OTsxRDc1OTsxRDc1OTswMzk0OzAzOTQ7CisxRDc1QTsxRDc1QTsxRDc1QTswMzk1OzAzOTU7CisxRDc1QjsxRDc1QjsxRDc1QjswMzk2OzAzOTY7CisxRDc1QzsxRDc1QzsxRDc1QzswMzk3OzAzOTc7CisxRDc1RDsxRDc1RDsxRDc1RDswMzk4OzAzOTg7CisxRDc1RTsxRDc1RTsxRDc1RTswMzk5OzAzOTk7CisxRDc1RjsxRDc1RjsxRDc1RjswMzlBOzAzOUE7CisxRDc2MDsxRDc2MDsxRDc2MDswMzlCOzAzOUI7CisxRDc2MTsxRDc2MTsxRDc2MTswMzlDOzAzOUM7CisxRDc2MjsxRDc2MjsxRDc2MjswMzlEOzAzOUQ7CisxRDc2MzsxRDc2MzsxRDc2MzswMzlFOzAzOUU7CisxRDc2NDsxRDc2NDsxRDc2NDswMzlGOzAzOUY7CisxRDc2NTsxRDc2NTsxRDc2NTswM0EwOzAzQTA7CisxRDc2NjsxRDc2NjsxRDc2NjswM0ExOzAzQTE7CisxRDc2NzsxRDc2NzsxRDc2NzswMzk4OzAzOTg7CisxRDc2ODsxRDc2ODsxRDc2ODswM0EzOzAzQTM7CisxRDc2OTsxRDc2OTsxRDc2OTswM0E0OzAzQTQ7CisxRDc2QTsxRDc2QTsxRDc2QTswM0E1OzAzQTU7CisxRDc2QjsxRDc2QjsxRDc2QjswM0E2OzAzQTY7CisxRDc2QzsxRDc2QzsxRDc2QzswM0E3OzAzQTc7CisxRDc2RDsxRDc2RDsxRDc2RDswM0E4OzAzQTg7CisxRDc2RTsxRDc2RTsxRDc2RTswM0E5OzAzQTk7CisxRDc2RjsxRDc2RjsxRDc2RjsyMjA3OzIyMDc7CisxRDc3MDsxRDc3MDsxRDc3MDswM0IxOzAzQjE7CisxRDc3MTsxRDc3MTsxRDc3MTswM0IyOzAzQjI7CisxRDc3MjsxRDc3MjsxRDc3MjswM0IzOzAzQjM7CisxRDc3MzsxRDc3MzsxRDc3MzswM0I0OzAzQjQ7CisxRDc3NDsxRDc3NDsxRDc3NDswM0I1OzAzQjU7CisxRDc3NTsxRDc3NTsxRDc3NTswM0I2OzAzQjY7CisxRDc3NjsxRDc3NjsxRDc3NjswM0I3OzAzQjc7CisxRDc3NzsxRDc3NzsxRDc3NzswM0I4OzAzQjg7CisxRDc3ODsxRDc3ODsxRDc3ODswM0I5OzAzQjk7CisxRDc3OTsxRDc3OTsxRDc3OTswM0JBOzAzQkE7CisxRDc3QTsxRDc3QTsxRDc3QTswM0JCOzAzQkI7CisxRDc3QjsxRDc3QjsxRDc3QjswM0JDOzAzQkM7CisxRDc3QzsxRDc3QzsxRDc3QzswM0JEOzAzQkQ7CisxRDc3RDsxRDc3RDsxRDc3RDswM0JFOzAzQkU7CisxRDc3RTsxRDc3RTsxRDc3RTswM0JGOzAzQkY7CisxRDc3RjsxRDc3RjsxRDc3RjswM0MwOzAzQzA7CisxRDc4MDsxRDc4MDsxRDc4MDswM0MxOzAzQzE7CisxRDc4MTsxRDc4MTsxRDc4MTswM0MyOzAzQzI7CisxRDc4MjsxRDc4MjsxRDc4MjswM0MzOzAzQzM7CisxRDc4MzsxRDc4MzsxRDc4MzswM0M0OzAzQzQ7CisxRDc4NDsxRDc4NDsxRDc4NDswM0M1OzAzQzU7CisxRDc4NTsxRDc4NTsxRDc4NTswM0M2OzAzQzY7CisxRDc4NjsxRDc4NjsxRDc4NjswM0M3OzAzQzc7CisxRDc4NzsxRDc4NzsxRDc4NzswM0M4OzAzQzg7CisxRDc4ODsxRDc4ODsxRDc4ODswM0M5OzAzQzk7CisxRDc4OTsxRDc4OTsxRDc4OTsyMjAyOzIyMDI7CisxRDc4QTsxRDc4QTsxRDc4QTswM0I1OzAzQjU7CisxRDc4QjsxRDc4QjsxRDc4QjswM0I4OzAzQjg7CisxRDc4QzsxRDc4QzsxRDc4QzswM0JBOzAzQkE7CisxRDc4RDsxRDc4RDsxRDc4RDswM0M2OzAzQzY7CisxRDc4RTsxRDc4RTsxRDc4RTswM0MxOzAzQzE7CisxRDc4RjsxRDc4RjsxRDc4RjswM0MwOzAzQzA7CisxRDc5MDsxRDc5MDsxRDc5MDswMzkxOzAzOTE7CisxRDc5MTsxRDc5MTsxRDc5MTswMzkyOzAzOTI7CisxRDc5MjsxRDc5MjsxRDc5MjswMzkzOzAzOTM7CisxRDc5MzsxRDc5MzsxRDc5MzswMzk0OzAzOTQ7CisxRDc5NDsxRDc5NDsxRDc5NDswMzk1OzAzOTU7CisxRDc5NTsxRDc5NTsxRDc5NTswMzk2OzAzOTY7CisxRDc5NjsxRDc5NjsxRDc5NjswMzk3OzAzOTc7CisxRDc5NzsxRDc5NzsxRDc5NzswMzk4OzAzOTg7CisxRDc5ODsxRDc5ODsxRDc5ODswMzk5OzAzOTk7CisxRDc5OTsxRDc5OTsxRDc5OTswMzlBOzAzOUE7CisxRDc5QTsxRDc5QTsxRDc5QTswMzlCOzAzOUI7CisxRDc5QjsxRDc5QjsxRDc5QjswMzlDOzAzOUM7CisxRDc5QzsxRDc5QzsxRDc5QzswMzlEOzAzOUQ7CisxRDc5RDsxRDc5RDsxRDc5RDswMzlFOzAzOUU7CisxRDc5RTsxRDc5RTsxRDc5RTswMzlGOzAzOUY7CisxRDc5RjsxRDc5RjsxRDc5RjswM0EwOzAzQTA7CisxRDdBMDsxRDdBMDsxRDdBMDswM0ExOzAzQTE7CisxRDdBMTsxRDdBMTsxRDdBMTswMzk4OzAzOTg7CisxRDdBMjsxRDdBMjsxRDdBMjswM0EzOzAzQTM7CisxRDdBMzsxRDdBMzsxRDdBMzswM0E0OzAzQTQ7CisxRDdBNDsxRDdBNDsxRDdBNDswM0E1OzAzQTU7CisxRDdBNTsxRDdBNTsxRDdBNTswM0E2OzAzQTY7CisxRDdBNjsxRDdBNjsxRDdBNjswM0E3OzAzQTc7CisxRDdBNzsxRDdBNzsxRDdBNzswM0E4OzAzQTg7CisxRDdBODsxRDdBODsxRDdBODswM0E5OzAzQTk7CisxRDdBOTsxRDdBOTsxRDdBOTsyMjA3OzIyMDc7CisxRDdBQTsxRDdBQTsxRDdBQTswM0IxOzAzQjE7CisxRDdBQjsxRDdBQjsxRDdBQjswM0IyOzAzQjI7CisxRDdBQzsxRDdBQzsxRDdBQzswM0IzOzAzQjM7CisxRDdBRDsxRDdBRDsxRDdBRDswM0I0OzAzQjQ7CisxRDdBRTsxRDdBRTsxRDdBRTswM0I1OzAzQjU7CisxRDdBRjsxRDdBRjsxRDdBRjswM0I2OzAzQjY7CisxRDdCMDsxRDdCMDsxRDdCMDswM0I3OzAzQjc7CisxRDdCMTsxRDdCMTsxRDdCMTswM0I4OzAzQjg7CisxRDdCMjsxRDdCMjsxRDdCMjswM0I5OzAzQjk7CisxRDdCMzsxRDdCMzsxRDdCMzswM0JBOzAzQkE7CisxRDdCNDsxRDdCNDsxRDdCNDswM0JCOzAzQkI7CisxRDdCNTsxRDdCNTsxRDdCNTswM0JDOzAzQkM7CisxRDdCNjsxRDdCNjsxRDdCNjswM0JEOzAzQkQ7CisxRDdCNzsxRDdCNzsxRDdCNzswM0JFOzAzQkU7CisxRDdCODsxRDdCODsxRDdCODswM0JGOzAzQkY7CisxRDdCOTsxRDdCOTsxRDdCOTswM0MwOzAzQzA7CisxRDdCQTsxRDdCQTsxRDdCQTswM0MxOzAzQzE7CisxRDdCQjsxRDdCQjsxRDdCQjswM0MyOzAzQzI7CisxRDdCQzsxRDdCQzsxRDdCQzswM0MzOzAzQzM7CisxRDdCRDsxRDdCRDsxRDdCRDswM0M0OzAzQzQ7CisxRDdCRTsxRDdCRTsxRDdCRTswM0M1OzAzQzU7CisxRDdCRjsxRDdCRjsxRDdCRjswM0M2OzAzQzY7CisxRDdDMDsxRDdDMDsxRDdDMDswM0M3OzAzQzc7CisxRDdDMTsxRDdDMTsxRDdDMTswM0M4OzAzQzg7CisxRDdDMjsxRDdDMjsxRDdDMjswM0M5OzAzQzk7CisxRDdDMzsxRDdDMzsxRDdDMzsyMjAyOzIyMDI7CisxRDdDNDsxRDdDNDsxRDdDNDswM0I1OzAzQjU7CisxRDdDNTsxRDdDNTsxRDdDNTswM0I4OzAzQjg7CisxRDdDNjsxRDdDNjsxRDdDNjswM0JBOzAzQkE7CisxRDdDNzsxRDdDNzsxRDdDNzswM0M2OzAzQzY7CisxRDdDODsxRDdDODsxRDdDODswM0MxOzAzQzE7CisxRDdDOTsxRDdDOTsxRDdDOTswM0MwOzAzQzA7CisxRDdDRTsxRDdDRTsxRDdDRTswMDMwOzAwMzA7CisxRDdDRjsxRDdDRjsxRDdDRjswMDMxOzAwMzE7CisxRDdEMDsxRDdEMDsxRDdEMDswMDMyOzAwMzI7CisxRDdEMTsxRDdEMTsxRDdEMTswMDMzOzAwMzM7CisxRDdEMjsxRDdEMjsxRDdEMjswMDM0OzAwMzQ7CisxRDdEMzsxRDdEMzsxRDdEMzswMDM1OzAwMzU7CisxRDdENDsxRDdENDsxRDdENDswMDM2OzAwMzY7CisxRDdENTsxRDdENTsxRDdENTswMDM3OzAwMzc7CisxRDdENjsxRDdENjsxRDdENjswMDM4OzAwMzg7CisxRDdENzsxRDdENzsxRDdENzswMDM5OzAwMzk7CisxRDdEODsxRDdEODsxRDdEODswMDMwOzAwMzA7CisxRDdEOTsxRDdEOTsxRDdEOTswMDMxOzAwMzE7CisxRDdEQTsxRDdEQTsxRDdEQTswMDMyOzAwMzI7CisxRDdEQjsxRDdEQjsxRDdEQjswMDMzOzAwMzM7CisxRDdEQzsxRDdEQzsxRDdEQzswMDM0OzAwMzQ7CisxRDdERDsxRDdERDsxRDdERDswMDM1OzAwMzU7CisxRDdERTsxRDdERTsxRDdERTswMDM2OzAwMzY7CisxRDdERjsxRDdERjsxRDdERjswMDM3OzAwMzc7CisxRDdFMDsxRDdFMDsxRDdFMDswMDM4OzAwMzg7CisxRDdFMTsxRDdFMTsxRDdFMTswMDM5OzAwMzk7CisxRDdFMjsxRDdFMjsxRDdFMjswMDMwOzAwMzA7CisxRDdFMzsxRDdFMzsxRDdFMzswMDMxOzAwMzE7CisxRDdFNDsxRDdFNDsxRDdFNDswMDMyOzAwMzI7CisxRDdFNTsxRDdFNTsxRDdFNTswMDMzOzAwMzM7CisxRDdFNjsxRDdFNjsxRDdFNjswMDM0OzAwMzQ7CisxRDdFNzsxRDdFNzsxRDdFNzswMDM1OzAwMzU7CisxRDdFODsxRDdFODsxRDdFODswMDM2OzAwMzY7CisxRDdFOTsxRDdFOTsxRDdFOTswMDM3OzAwMzc7CisxRDdFQTsxRDdFQTsxRDdFQTswMDM4OzAwMzg7CisxRDdFQjsxRDdFQjsxRDdFQjswMDM5OzAwMzk7CisxRDdFQzsxRDdFQzsxRDdFQzswMDMwOzAwMzA7CisxRDdFRDsxRDdFRDsxRDdFRDswMDMxOzAwMzE7CisxRDdFRTsxRDdFRTsxRDdFRTswMDMyOzAwMzI7CisxRDdFRjsxRDdFRjsxRDdFRjswMDMzOzAwMzM7CisxRDdGMDsxRDdGMDsxRDdGMDswMDM0OzAwMzQ7CisxRDdGMTsxRDdGMTsxRDdGMTswMDM1OzAwMzU7CisxRDdGMjsxRDdGMjsxRDdGMjswMDM2OzAwMzY7CisxRDdGMzsxRDdGMzsxRDdGMzswMDM3OzAwMzc7CisxRDdGNDsxRDdGNDsxRDdGNDswMDM4OzAwMzg7CisxRDdGNTsxRDdGNTsxRDdGNTswMDM5OzAwMzk7CisxRDdGNjsxRDdGNjsxRDdGNjswMDMwOzAwMzA7CisxRDdGNzsxRDdGNzsxRDdGNzswMDMxOzAwMzE7CisxRDdGODsxRDdGODsxRDdGODswMDMyOzAwMzI7CisxRDdGOTsxRDdGOTsxRDdGOTswMDMzOzAwMzM7CisxRDdGQTsxRDdGQTsxRDdGQTswMDM0OzAwMzQ7CisxRDdGQjsxRDdGQjsxRDdGQjswMDM1OzAwMzU7CisxRDdGQzsxRDdGQzsxRDdGQzswMDM2OzAwMzY7CisxRDdGRDsxRDdGRDsxRDdGRDswMDM3OzAwMzc7CisxRDdGRTsxRDdGRTsxRDdGRTswMDM4OzAwMzg7CisxRDdGRjsxRDdGRjsxRDdGRjswMDM5OzAwMzk7CisyRjgwMDs0RTNEOzRFM0Q7NEUzRDs0RTNEOworMkY4MDE7NEUzODs0RTM4OzRFMzg7NEUzODsKKzJGODAyOzRFNDE7NEU0MTs0RTQxOzRFNDE7CisyRjgwMzsyMDEyMjsyMDEyMjsyMDEyMjsyMDEyMjsKKzJGODA0OzRGNjA7NEY2MDs0RjYwOzRGNjA7CisyRjgwNTs0RkFFOzRGQUU7NEZBRTs0RkFFOworMkY4MDY7NEZCQjs0RkJCOzRGQkI7NEZCQjsKKzJGODA3OzUwMDI7NTAwMjs1MDAyOzUwMDI7CisyRjgwODs1MDdBOzUwN0E7NTA3QTs1MDdBOworMkY4MDk7NTA5OTs1MDk5OzUwOTk7NTA5OTsKKzJGODBBOzUwRTc7NTBFNzs1MEU3OzUwRTc7CisyRjgwQjs1MENGOzUwQ0Y7NTBDRjs1MENGOworMkY4MEM7MzQ5RTszNDlFOzM0OUU7MzQ5RTsKKzJGODBEOzIwNjNBOzIwNjNBOzIwNjNBOzIwNjNBOworMkY4MEU7NTE0RDs1MTREOzUxNEQ7NTE0RDsKKzJGODBGOzUxNTQ7NTE1NDs1MTU0OzUxNTQ7CisyRjgxMDs1MTY0OzUxNjQ7NTE2NDs1MTY0OworMkY4MTE7NTE3Nzs1MTc3OzUxNzc7NTE3NzsKKzJGODEyOzIwNTFDOzIwNTFDOzIwNTFDOzIwNTFDOworMkY4MTM7MzRCOTszNEI5OzM0Qjk7MzRCOTsKKzJGODE0OzUxNjc7NTE2Nzs1MTY3OzUxNjc7CisyRjgxNTs1MThEOzUxOEQ7NTE4RDs1MThEOworMkY4MTY7MjA1NEI7MjA1NEI7MjA1NEI7MjA1NEI7CisyRjgxNzs1MTk3OzUxOTc7NTE5Nzs1MTk3OworMkY4MTg7NTFBNDs1MUE0OzUxQTQ7NTFBNDsKKzJGODE5OzRFQ0M7NEVDQzs0RUNDOzRFQ0M7CisyRjgxQTs1MUFDOzUxQUM7NTFBQzs1MUFDOworMkY4MUI7NTFCNTs1MUI1OzUxQjU7NTFCNTsKKzJGODFDOzI5MURGOzI5MURGOzI5MURGOzI5MURGOworMkY4MUQ7NTFGNTs1MUY1OzUxRjU7NTFGNTsKKzJGODFFOzUyMDM7NTIwMzs1MjAzOzUyMDM7CisyRjgxRjszNERGOzM0REY7MzRERjszNERGOworMkY4MjA7NTIzQjs1MjNCOzUyM0I7NTIzQjsKKzJGODIxOzUyNDY7NTI0Njs1MjQ2OzUyNDY7CisyRjgyMjs1MjcyOzUyNzI7NTI3Mjs1MjcyOworMkY4MjM7NTI3Nzs1Mjc3OzUyNzc7NTI3NzsKKzJGODI0OzM1MTU7MzUxNTszNTE1OzM1MTU7CisyRjgyNTs1MkM3OzUyQzc7NTJDNzs1MkM3OworMkY4MjY7NTJDOTs1MkM5OzUyQzk7NTJDOTsKKzJGODI3OzUyRTQ7NTJFNDs1MkU0OzUyRTQ7CisyRjgyODs1MkZBOzUyRkE7NTJGQTs1MkZBOworMkY4Mjk7NTMwNTs1MzA1OzUzMDU7NTMwNTsKKzJGODJBOzUzMDY7NTMwNjs1MzA2OzUzMDY7CisyRjgyQjs1MzE3OzUzMTc7NTMxNzs1MzE3OworMkY4MkM7NTM0OTs1MzQ5OzUzNDk7NTM0OTsKKzJGODJEOzUzNTE7NTM1MTs1MzUxOzUzNTE7CisyRjgyRTs1MzVBOzUzNUE7NTM1QTs1MzVBOworMkY4MkY7NTM3Mzs1MzczOzUzNzM7NTM3MzsKKzJGODMwOzUzN0Q7NTM3RDs1MzdEOzUzN0Q7CisyRjgzMTs1MzdGOzUzN0Y7NTM3Rjs1MzdGOworMkY4MzI7NTM3Rjs1MzdGOzUzN0Y7NTM3RjsKKzJGODMzOzUzN0Y7NTM3Rjs1MzdGOzUzN0Y7CisyRjgzNDsyMEEyQzsyMEEyQzsyMEEyQzsyMEEyQzsKKzJGODM1OzcwNzA7NzA3MDs3MDcwOzcwNzA7CisyRjgzNjs1M0NBOzUzQ0E7NTNDQTs1M0NBOworMkY4Mzc7NTNERjs1M0RGOzUzREY7NTNERjsKKzJGODM4OzIwQjYzOzIwQjYzOzIwQjYzOzIwQjYzOworMkY4Mzk7NTNFQjs1M0VCOzUzRUI7NTNFQjsKKzJGODNBOzUzRjE7NTNGMTs1M0YxOzUzRjE7CisyRjgzQjs1NDA2OzU0MDY7NTQwNjs1NDA2OworMkY4M0M7NTQ5RTs1NDlFOzU0OUU7NTQ5RTsKKzJGODNEOzU0Mzg7NTQzODs1NDM4OzU0Mzg7CisyRjgzRTs1NDQ4OzU0NDg7NTQ0ODs1NDQ4OworMkY4M0Y7NTQ2ODs1NDY4OzU0Njg7NTQ2ODsKKzJGODQwOzU0QTI7NTRBMjs1NEEyOzU0QTI7CisyRjg0MTs1NEY2OzU0RjY7NTRGNjs1NEY2OworMkY4NDI7NTUxMDs1NTEwOzU1MTA7NTUxMDsKKzJGODQzOzU1NTM7NTU1Mzs1NTUzOzU1NTM7CisyRjg0NDs1NTYzOzU1NjM7NTU2Mzs1NTYzOworMkY4NDU7NTU4NDs1NTg0OzU1ODQ7NTU4NDsKKzJGODQ2OzU1ODQ7NTU4NDs1NTg0OzU1ODQ7CisyRjg0Nzs1NTk5OzU1OTk7NTU5OTs1NTk5OworMkY4NDg7NTVBQjs1NUFCOzU1QUI7NTVBQjsKKzJGODQ5OzU1QjM7NTVCMzs1NUIzOzU1QjM7CisyRjg0QTs1NUMyOzU1QzI7NTVDMjs1NUMyOworMkY4NEI7NTcxNjs1NzE2OzU3MTY7NTcxNjsKKzJGODRDOzU2MDY7NTYwNjs1NjA2OzU2MDY7CisyRjg0RDs1NzE3OzU3MTc7NTcxNzs1NzE3OworMkY4NEU7NTY1MTs1NjUxOzU2NTE7NTY1MTsKKzJGODRGOzU2NzQ7NTY3NDs1Njc0OzU2NzQ7CisyRjg1MDs1MjA3OzUyMDc7NTIwNzs1MjA3OworMkY4NTE7NThFRTs1OEVFOzU4RUU7NThFRTsKKzJGODUyOzU3Q0U7NTdDRTs1N0NFOzU3Q0U7CisyRjg1Mzs1N0Y0OzU3RjQ7NTdGNDs1N0Y0OworMkY4NTQ7NTgwRDs1ODBEOzU4MEQ7NTgwRDsKKzJGODU1OzU3OEI7NTc4Qjs1NzhCOzU3OEI7CisyRjg1Njs1ODMyOzU4MzI7NTgzMjs1ODMyOworMkY4NTc7NTgzMTs1ODMxOzU4MzE7NTgzMTsKKzJGODU4OzU4QUM7NThBQzs1OEFDOzU4QUM7CisyRjg1OTsyMTRFNDsyMTRFNDsyMTRFNDsyMTRFNDsKKzJGODVBOzU4RjI7NThGMjs1OEYyOzU4RjI7CisyRjg1Qjs1OEY3OzU4Rjc7NThGNzs1OEY3OworMkY4NUM7NTkwNjs1OTA2OzU5MDY7NTkwNjsKKzJGODVEOzU5MUE7NTkxQTs1OTFBOzU5MUE7CisyRjg1RTs1OTIyOzU5MjI7NTkyMjs1OTIyOworMkY4NUY7NTk2Mjs1OTYyOzU5NjI7NTk2MjsKKzJGODYwOzIxNkE4OzIxNkE4OzIxNkE4OzIxNkE4OworMkY4NjE7MjE2RUE7MjE2RUE7MjE2RUE7MjE2RUE7CisyRjg2Mjs1OUVDOzU5RUM7NTlFQzs1OUVDOworMkY4NjM7NUExQjs1QTFCOzVBMUI7NUExQjsKKzJGODY0OzVBMjc7NUEyNzs1QTI3OzVBMjc7CisyRjg2NTs1OUQ4OzU5RDg7NTlEODs1OUQ4OworMkY4NjY7NUE2Njs1QTY2OzVBNjY7NUE2NjsKKzJGODY3OzM2RUU7MzZFRTszNkVFOzM2RUU7CisyRjg2ODsyMTM2QTsyMTM2QTsyMTM2QTsyMTM2QTsKKzJGODY5OzVCMDg7NUIwODs1QjA4OzVCMDg7CisyRjg2QTs1QjNFOzVCM0U7NUIzRTs1QjNFOworMkY4NkI7NUIzRTs1QjNFOzVCM0U7NUIzRTsKKzJGODZDOzIxOUM4OzIxOUM4OzIxOUM4OzIxOUM4OworMkY4NkQ7NUJDMzs1QkMzOzVCQzM7NUJDMzsKKzJGODZFOzVCRDg7NUJEODs1QkQ4OzVCRDg7CisyRjg2Rjs1QkU3OzVCRTc7NUJFNzs1QkU3OworMkY4NzA7NUJGMzs1QkYzOzVCRjM7NUJGMzsKKzJGODcxOzIxQjE4OzIxQjE4OzIxQjE4OzIxQjE4OworMkY4NzI7NUJGRjs1QkZGOzVCRkY7NUJGRjsKKzJGODczOzVDMDY7NUMwNjs1QzA2OzVDMDY7CisyRjg3NDs1RjMzOzVGMzM7NUYzMzs1RjMzOworMkY4NzU7NUMyMjs1QzIyOzVDMjI7NUMyMjsKKzJGODc2OzM3ODE7Mzc4MTszNzgxOzM3ODE7CisyRjg3Nzs1QzYwOzVDNjA7NUM2MDs1QzYwOworMkY4Nzg7NUM2RTs1QzZFOzVDNkU7NUM2RTsKKzJGODc5OzVDQzA7NUNDMDs1Q0MwOzVDQzA7CisyRjg3QTs1QzhEOzVDOEQ7NUM4RDs1QzhEOworMkY4N0I7MjFERTQ7MjFERTQ7MjFERTQ7MjFERTQ7CisyRjg3Qzs1RDQzOzVENDM7NUQ0Mzs1RDQzOworMkY4N0Q7MjFERTY7MjFERTY7MjFERTY7MjFERTY7CisyRjg3RTs1RDZFOzVENkU7NUQ2RTs1RDZFOworMkY4N0Y7NUQ2Qjs1RDZCOzVENkI7NUQ2QjsKKzJGODgwOzVEN0M7NUQ3Qzs1RDdDOzVEN0M7CisyRjg4MTs1REUxOzVERTE7NURFMTs1REUxOworMkY4ODI7NURFMjs1REUyOzVERTI7NURFMjsKKzJGODgzOzM4MkY7MzgyRjszODJGOzM4MkY7CisyRjg4NDs1REZEOzVERkQ7NURGRDs1REZEOworMkY4ODU7NUUyODs1RTI4OzVFMjg7NUUyODsKKzJGODg2OzVFM0Q7NUUzRDs1RTNEOzVFM0Q7CisyRjg4Nzs1RTY5OzVFNjk7NUU2OTs1RTY5OworMkY4ODg7Mzg2MjszODYyOzM4NjI7Mzg2MjsKKzJGODg5OzIyMTgzOzIyMTgzOzIyMTgzOzIyMTgzOworMkY4OEE7Mzg3QzszODdDOzM4N0M7Mzg3QzsKKzJGODhCOzVFQjA7NUVCMDs1RUIwOzVFQjA7CisyRjg4Qzs1RUIzOzVFQjM7NUVCMzs1RUIzOworMkY4OEQ7NUVCNjs1RUI2OzVFQjY7NUVCNjsKKzJGODhFOzVFQ0E7NUVDQTs1RUNBOzVFQ0E7CisyRjg4RjsyQTM5MjsyQTM5MjsyQTM5MjsyQTM5MjsKKzJGODkwOzVFRkU7NUVGRTs1RUZFOzVFRkU7CisyRjg5MTsyMjMzMTsyMjMzMTsyMjMzMTsyMjMzMTsKKzJGODkyOzIyMzMxOzIyMzMxOzIyMzMxOzIyMzMxOworMkY4OTM7ODIwMTs4MjAxOzgyMDE7ODIwMTsKKzJGODk0OzVGMjI7NUYyMjs1RjIyOzVGMjI7CisyRjg5NTs1RjIyOzVGMjI7NUYyMjs1RjIyOworMkY4OTY7MzhDNzszOEM3OzM4Qzc7MzhDNzsKKzJGODk3OzIzMkI4OzIzMkI4OzIzMkI4OzIzMkI4OworMkY4OTg7MjYxREE7MjYxREE7MjYxREE7MjYxREE7CisyRjg5OTs1RjYyOzVGNjI7NUY2Mjs1RjYyOworMkY4OUE7NUY2Qjs1RjZCOzVGNkI7NUY2QjsKKzJGODlCOzM4RTM7MzhFMzszOEUzOzM4RTM7CisyRjg5Qzs1RjlBOzVGOUE7NUY5QTs1RjlBOworMkY4OUQ7NUZDRDs1RkNEOzVGQ0Q7NUZDRDsKKzJGODlFOzVGRDc7NUZENzs1RkQ3OzVGRDc7CisyRjg5Rjs1RkY5OzVGRjk7NUZGOTs1RkY5OworMkY4QTA7NjA4MTs2MDgxOzYwODE7NjA4MTsKKzJGOEExOzM5M0E7MzkzQTszOTNBOzM5M0E7CisyRjhBMjszOTFDOzM5MUM7MzkxQzszOTFDOworMkY4QTM7NjA5NDs2MDk0OzYwOTQ7NjA5NDsKKzJGOEE0OzIyNkQ0OzIyNkQ0OzIyNkQ0OzIyNkQ0OworMkY4QTU7NjBDNzs2MEM3OzYwQzc7NjBDNzsKKzJGOEE2OzYxNDg7NjE0ODs2MTQ4OzYxNDg7CisyRjhBNzs2MTRDOzYxNEM7NjE0Qzs2MTRDOworMkY4QTg7NjE0RTs2MTRFOzYxNEU7NjE0RTsKKzJGOEE5OzYxNEM7NjE0Qzs2MTRDOzYxNEM7CisyRjhBQTs2MTdBOzYxN0E7NjE3QTs2MTdBOworMkY4QUI7NjE4RTs2MThFOzYxOEU7NjE4RTsKKzJGOEFDOzYxQjI7NjFCMjs2MUIyOzYxQjI7CisyRjhBRDs2MUE0OzYxQTQ7NjFBNDs2MUE0OworMkY4QUU7NjFBRjs2MUFGOzYxQUY7NjFBRjsKKzJGOEFGOzYxREU7NjFERTs2MURFOzYxREU7CisyRjhCMDs2MUYyOzYxRjI7NjFGMjs2MUYyOworMkY4QjE7NjFGNjs2MUY2OzYxRjY7NjFGNjsKKzJGOEIyOzYyMTA7NjIxMDs2MjEwOzYyMTA7CisyRjhCMzs2MjFCOzYyMUI7NjIxQjs2MjFCOworMkY4QjQ7NjI1RDs2MjVEOzYyNUQ7NjI1RDsKKzJGOEI1OzYyQjE7NjJCMTs2MkIxOzYyQjE7CisyRjhCNjs2MkQ0OzYyRDQ7NjJENDs2MkQ0OworMkY4Qjc7NjM1MDs2MzUwOzYzNTA7NjM1MDsKKzJGOEI4OzIyQjBDOzIyQjBDOzIyQjBDOzIyQjBDOworMkY4Qjk7NjMzRDs2MzNEOzYzM0Q7NjMzRDsKKzJGOEJBOzYyRkM7NjJGQzs2MkZDOzYyRkM7CisyRjhCQjs2MzY4OzYzNjg7NjM2ODs2MzY4OworMkY4QkM7NjM4Mzs2MzgzOzYzODM7NjM4MzsKKzJGOEJEOzYzRTQ7NjNFNDs2M0U0OzYzRTQ7CisyRjhCRTsyMkJGMTsyMkJGMTsyMkJGMTsyMkJGMTsKKzJGOEJGOzY0MjI7NjQyMjs2NDIyOzY0MjI7CisyRjhDMDs2M0M1OzYzQzU7NjNDNTs2M0M1OworMkY4QzE7NjNBOTs2M0E5OzYzQTk7NjNBOTsKKzJGOEMyOzNBMkU7M0EyRTszQTJFOzNBMkU7CisyRjhDMzs2NDY5OzY0Njk7NjQ2OTs2NDY5OworMkY4QzQ7NjQ3RTs2NDdFOzY0N0U7NjQ3RTsKKzJGOEM1OzY0OUQ7NjQ5RDs2NDlEOzY0OUQ7CisyRjhDNjs2NDc3OzY0Nzc7NjQ3Nzs2NDc3OworMkY4Qzc7M0E2QzszQTZDOzNBNkM7M0E2QzsKKzJGOEM4OzY1NEY7NjU0Rjs2NTRGOzY1NEY7CisyRjhDOTs2NTZDOzY1NkM7NjU2Qzs2NTZDOworMkY4Q0E7MjMwMEE7MjMwMEE7MjMwMEE7MjMwMEE7CisyRjhDQjs2NUUzOzY1RTM7NjVFMzs2NUUzOworMkY4Q0M7NjZGODs2NkY4OzY2Rjg7NjZGODsKKzJGOENEOzY2NDk7NjY0OTs2NjQ5OzY2NDk7CisyRjhDRTszQjE5OzNCMTk7M0IxOTszQjE5OworMkY4Q0Y7NjY5MTs2NjkxOzY2OTE7NjY5MTsKKzJGOEQwOzNCMDg7M0IwODszQjA4OzNCMDg7CisyRjhEMTszQUU0OzNBRTQ7M0FFNDszQUU0OworMkY4RDI7NTE5Mjs1MTkyOzUxOTI7NTE5MjsKKzJGOEQzOzUxOTU7NTE5NTs1MTk1OzUxOTU7CisyRjhENDs2NzAwOzY3MDA7NjcwMDs2NzAwOworMkY4RDU7NjY5Qzs2NjlDOzY2OUM7NjY5QzsKKzJGOEQ2OzgwQUQ7ODBBRDs4MEFEOzgwQUQ7CisyRjhENzs0M0Q5OzQzRDk7NDNEOTs0M0Q5OworMkY4RDg7NjcxNzs2NzE3OzY3MTc7NjcxNzsKKzJGOEQ5OzY3MUI7NjcxQjs2NzFCOzY3MUI7CisyRjhEQTs2NzIxOzY3MjE7NjcyMTs2NzIxOworMkY4REI7Njc1RTs2NzVFOzY3NUU7Njc1RTsKKzJGOERDOzY3NTM7Njc1Mzs2NzUzOzY3NTM7CisyRjhERDsyMzNDMzsyMzNDMzsyMzNDMzsyMzNDMzsKKzJGOERFOzNCNDk7M0I0OTszQjQ5OzNCNDk7CisyRjhERjs2N0ZBOzY3RkE7NjdGQTs2N0ZBOworMkY4RTA7Njc4NTs2Nzg1OzY3ODU7Njc4NTsKKzJGOEUxOzY4NTI7Njg1Mjs2ODUyOzY4NTI7CisyRjhFMjs2ODg1OzY4ODU7Njg4NTs2ODg1OworMkY4RTM7MjM0NkQ7MjM0NkQ7MjM0NkQ7MjM0NkQ7CisyRjhFNDs2ODhFOzY4OEU7Njg4RTs2ODhFOworMkY4RTU7NjgxRjs2ODFGOzY4MUY7NjgxRjsKKzJGOEU2OzY5MTQ7NjkxNDs2OTE0OzY5MTQ7CisyRjhFNzszQjlEOzNCOUQ7M0I5RDszQjlEOworMkY4RTg7Njk0Mjs2OTQyOzY5NDI7Njk0MjsKKzJGOEU5OzY5QTM7NjlBMzs2OUEzOzY5QTM7CisyRjhFQTs2OUVBOzY5RUE7NjlFQTs2OUVBOworMkY4RUI7NkFBODs2QUE4OzZBQTg7NkFBODsKKzJGOEVDOzIzNkEzOzIzNkEzOzIzNkEzOzIzNkEzOworMkY4RUQ7NkFEQjs2QURCOzZBREI7NkFEQjsKKzJGOEVFOzNDMTg7M0MxODszQzE4OzNDMTg7CisyRjhFRjs2QjIxOzZCMjE7NkIyMTs2QjIxOworMkY4RjA7MjM4QTc7MjM4QTc7MjM4QTc7MjM4QTc7CisyRjhGMTs2QjU0OzZCNTQ7NkI1NDs2QjU0OworMkY4RjI7M0M0RTszQzRFOzNDNEU7M0M0RTsKKzJGOEYzOzZCNzI7NkI3Mjs2QjcyOzZCNzI7CisyRjhGNDs2QjlGOzZCOUY7NkI5Rjs2QjlGOworMkY4RjU7NkJCQTs2QkJBOzZCQkE7NkJCQTsKKzJGOEY2OzZCQkI7NkJCQjs2QkJCOzZCQkI7CisyRjhGNzsyM0E4RDsyM0E4RDsyM0E4RDsyM0E4RDsKKzJGOEY4OzIxRDBCOzIxRDBCOzIxRDBCOzIxRDBCOworMkY4Rjk7MjNBRkE7MjNBRkE7MjNBRkE7MjNBRkE7CisyRjhGQTs2QzRFOzZDNEU7NkM0RTs2QzRFOworMkY4RkI7MjNDQkM7MjNDQkM7MjNDQkM7MjNDQkM7CisyRjhGQzs2Q0JGOzZDQkY7NkNCRjs2Q0JGOworMkY4RkQ7NkNDRDs2Q0NEOzZDQ0Q7NkNDRDsKKzJGOEZFOzZDNjc7NkM2Nzs2QzY3OzZDNjc7CisyRjhGRjs2RDE2OzZEMTY7NkQxNjs2RDE2OworMkY5MDA7NkQzRTs2RDNFOzZEM0U7NkQzRTsKKzJGOTAxOzZENzc7NkQ3Nzs2RDc3OzZENzc7CisyRjkwMjs2RDQxOzZENDE7NkQ0MTs2RDQxOworMkY5MDM7NkQ2OTs2RDY5OzZENjk7NkQ2OTsKKzJGOTA0OzZENzg7NkQ3ODs2RDc4OzZENzg7CisyRjkwNTs2RDg1OzZEODU7NkQ4NTs2RDg1OworMkY5MDY7MjNEMUU7MjNEMUU7MjNEMUU7MjNEMUU7CisyRjkwNzs2RDM0OzZEMzQ7NkQzNDs2RDM0OworMkY5MDg7NkUyRjs2RTJGOzZFMkY7NkUyRjsKKzJGOTA5OzZFNkU7NkU2RTs2RTZFOzZFNkU7CisyRjkwQTszRDMzOzNEMzM7M0QzMzszRDMzOworMkY5MEI7NkVDQjs2RUNCOzZFQ0I7NkVDQjsKKzJGOTBDOzZFQzc7NkVDNzs2RUM3OzZFQzc7CisyRjkwRDsyM0VEMTsyM0VEMTsyM0VEMTsyM0VEMTsKKzJGOTBFOzZERjk7NkRGOTs2REY5OzZERjk7CisyRjkwRjs2RjZFOzZGNkU7NkY2RTs2RjZFOworMkY5MTA7MjNGNUU7MjNGNUU7MjNGNUU7MjNGNUU7CisyRjkxMTsyM0Y4RTsyM0Y4RTsyM0Y4RTsyM0Y4RTsKKzJGOTEyOzZGQzY7NkZDNjs2RkM2OzZGQzY7CisyRjkxMzs3MDM5OzcwMzk7NzAzOTs3MDM5OworMkY5MTQ7NzAxRTs3MDFFOzcwMUU7NzAxRTsKKzJGOTE1OzcwMUI7NzAxQjs3MDFCOzcwMUI7CisyRjkxNjszRDk2OzNEOTY7M0Q5NjszRDk2OworMkY5MTc7NzA0QTs3MDRBOzcwNEE7NzA0QTsKKzJGOTE4OzcwN0Q7NzA3RDs3MDdEOzcwN0Q7CisyRjkxOTs3MDc3OzcwNzc7NzA3Nzs3MDc3OworMkY5MUE7NzBBRDs3MEFEOzcwQUQ7NzBBRDsKKzJGOTFCOzIwNTI1OzIwNTI1OzIwNTI1OzIwNTI1OworMkY5MUM7NzE0NTs3MTQ1OzcxNDU7NzE0NTsKKzJGOTFEOzI0MjYzOzI0MjYzOzI0MjYzOzI0MjYzOworMkY5MUU7NzE5Qzs3MTlDOzcxOUM7NzE5QzsKKzJGOTFGOzQzQUI7NDNBQjs0M0FCOzQzQUI7CisyRjkyMDs3MjI4OzcyMjg7NzIyODs3MjI4OworMkY5MjE7NzIzNTs3MjM1OzcyMzU7NzIzNTsKKzJGOTIyOzcyNTA7NzI1MDs3MjUwOzcyNTA7CisyRjkyMzsyNDYwODsyNDYwODsyNDYwODsyNDYwODsKKzJGOTI0OzcyODA7NzI4MDs3MjgwOzcyODA7CisyRjkyNTs3Mjk1OzcyOTU7NzI5NTs3Mjk1OworMkY5MjY7MjQ3MzU7MjQ3MzU7MjQ3MzU7MjQ3MzU7CisyRjkyNzsyNDgxNDsyNDgxNDsyNDgxNDsyNDgxNDsKKzJGOTI4OzczN0E7NzM3QTs3MzdBOzczN0E7CisyRjkyOTs3MzhCOzczOEI7NzM4Qjs3MzhCOworMkY5MkE7M0VBQzszRUFDOzNFQUM7M0VBQzsKKzJGOTJCOzczQTU7NzNBNTs3M0E1OzczQTU7CisyRjkyQzszRUI4OzNFQjg7M0VCODszRUI4OworMkY5MkQ7M0VCODszRUI4OzNFQjg7M0VCODsKKzJGOTJFOzc0NDc7NzQ0Nzs3NDQ3Ozc0NDc7CisyRjkyRjs3NDVDOzc0NUM7NzQ1Qzs3NDVDOworMkY5MzA7NzQ3MTs3NDcxOzc0NzE7NzQ3MTsKKzJGOTMxOzc0ODU7NzQ4NTs3NDg1Ozc0ODU7CisyRjkzMjs3NENBOzc0Q0E7NzRDQTs3NENBOworMkY5MzM7M0YxQjszRjFCOzNGMUI7M0YxQjsKKzJGOTM0Ozc1MjQ7NzUyNDs3NTI0Ozc1MjQ7CisyRjkzNTsyNEMzNjsyNEMzNjsyNEMzNjsyNEMzNjsKKzJGOTM2Ozc1M0U7NzUzRTs3NTNFOzc1M0U7CisyRjkzNzsyNEM5MjsyNEM5MjsyNEM5MjsyNEM5MjsKKzJGOTM4Ozc1NzA7NzU3MDs3NTcwOzc1NzA7CisyRjkzOTsyMjE5RjsyMjE5RjsyMjE5RjsyMjE5RjsKKzJGOTNBOzc2MTA7NzYxMDs3NjEwOzc2MTA7CisyRjkzQjsyNEZBMTsyNEZBMTsyNEZBMTsyNEZBMTsKKzJGOTNDOzI0RkI4OzI0RkI4OzI0RkI4OzI0RkI4OworMkY5M0Q7MjUwNDQ7MjUwNDQ7MjUwNDQ7MjUwNDQ7CisyRjkzRTszRkZDOzNGRkM7M0ZGQzszRkZDOworMkY5M0Y7NDAwODs0MDA4OzQwMDg7NDAwODsKKzJGOTQwOzc2RjQ7NzZGNDs3NkY0Ozc2RjQ7CisyRjk0MTsyNTBGMzsyNTBGMzsyNTBGMzsyNTBGMzsKKzJGOTQyOzI1MEYyOzI1MEYyOzI1MEYyOzI1MEYyOworMkY5NDM7MjUxMTk7MjUxMTk7MjUxMTk7MjUxMTk7CisyRjk0NDsyNTEzMzsyNTEzMzsyNTEzMzsyNTEzMzsKKzJGOTQ1Ozc3MUU7NzcxRTs3NzFFOzc3MUU7CisyRjk0Njs3NzFGOzc3MUY7NzcxRjs3NzFGOworMkY5NDc7NzcxRjs3NzFGOzc3MUY7NzcxRjsKKzJGOTQ4Ozc3NEE7Nzc0QTs3NzRBOzc3NEE7CisyRjk0OTs0MDM5OzQwMzk7NDAzOTs0MDM5OworMkY5NEE7Nzc4Qjs3NzhCOzc3OEI7Nzc4QjsKKzJGOTRCOzQwNDY7NDA0Njs0MDQ2OzQwNDY7CisyRjk0Qzs0MDk2OzQwOTY7NDA5Njs0MDk2OworMkY5NEQ7MjU0MUQ7MjU0MUQ7MjU0MUQ7MjU0MUQ7CisyRjk0RTs3ODRFOzc4NEU7Nzg0RTs3ODRFOworMkY5NEY7Nzg4Qzs3ODhDOzc4OEM7Nzg4QzsKKzJGOTUwOzc4Q0M7NzhDQzs3OENDOzc4Q0M7CisyRjk1MTs0MEUzOzQwRTM7NDBFMzs0MEUzOworMkY5NTI7MjU2MjY7MjU2MjY7MjU2MjY7MjU2MjY7CisyRjk1Mzs3OTU2Ozc5NTY7Nzk1Njs3OTU2OworMkY5NTQ7MjU2OUE7MjU2OUE7MjU2OUE7MjU2OUE7CisyRjk1NTsyNTZDNTsyNTZDNTsyNTZDNTsyNTZDNTsKKzJGOTU2Ozc5OEY7Nzk4Rjs3OThGOzc5OEY7CisyRjk1Nzs3OUVCOzc5RUI7NzlFQjs3OUVCOworMkY5NTg7NDEyRjs0MTJGOzQxMkY7NDEyRjsKKzJGOTU5OzdBNDA7N0E0MDs3QTQwOzdBNDA7CisyRjk1QTs3QTRBOzdBNEE7N0E0QTs3QTRBOworMkY5NUI7N0E0Rjs3QTRGOzdBNEY7N0E0RjsKKzJGOTVDOzI1OTdDOzI1OTdDOzI1OTdDOzI1OTdDOworMkY5NUQ7MjVBQTc7MjVBQTc7MjVBQTc7MjVBQTc7CisyRjk1RTsyNUFBNzsyNUFBNzsyNUFBNzsyNUFBNzsKKzJGOTVGOzdBQUU7N0FBRTs3QUFFOzdBQUU7CisyRjk2MDs0MjAyOzQyMDI7NDIwMjs0MjAyOworMkY5NjE7MjVCQUI7MjVCQUI7MjVCQUI7MjVCQUI7CisyRjk2Mjs3QkM2OzdCQzY7N0JDNjs3QkM2OworMkY5NjM7N0JDOTs3QkM5OzdCQzk7N0JDOTsKKzJGOTY0OzQyMjc7NDIyNzs0MjI3OzQyMjc7CisyRjk2NTsyNUM4MDsyNUM4MDsyNUM4MDsyNUM4MDsKKzJGOTY2OzdDRDI7N0NEMjs3Q0QyOzdDRDI7CisyRjk2Nzs0MkEwOzQyQTA7NDJBMDs0MkEwOworMkY5Njg7N0NFODs3Q0U4OzdDRTg7N0NFODsKKzJGOTY5OzdDRTM7N0NFMzs3Q0UzOzdDRTM7CisyRjk2QTs3RDAwOzdEMDA7N0QwMDs3RDAwOworMkY5NkI7MjVGODY7MjVGODY7MjVGODY7MjVGODY7CisyRjk2Qzs3RDYzOzdENjM7N0Q2Mzs3RDYzOworMkY5NkQ7NDMwMTs0MzAxOzQzMDE7NDMwMTsKKzJGOTZFOzdEQzc7N0RDNzs3REM3OzdEQzc7CisyRjk2Rjs3RTAyOzdFMDI7N0UwMjs3RTAyOworMkY5NzA7N0U0NTs3RTQ1OzdFNDU7N0U0NTsKKzJGOTcxOzQzMzQ7NDMzNDs0MzM0OzQzMzQ7CisyRjk3MjsyNjIyODsyNjIyODsyNjIyODsyNjIyODsKKzJGOTczOzI2MjQ3OzI2MjQ3OzI2MjQ3OzI2MjQ3OworMkY5NzQ7NDM1OTs0MzU5OzQzNTk7NDM1OTsKKzJGOTc1OzI2MkQ5OzI2MkQ5OzI2MkQ5OzI2MkQ5OworMkY5NzY7N0Y3QTs3RjdBOzdGN0E7N0Y3QTsKKzJGOTc3OzI2MzNFOzI2MzNFOzI2MzNFOzI2MzNFOworMkY5Nzg7N0Y5NTs3Rjk1OzdGOTU7N0Y5NTsKKzJGOTc5OzdGRkE7N0ZGQTs3RkZBOzdGRkE7CisyRjk3QTs4MDA1OzgwMDU7ODAwNTs4MDA1OworMkY5N0I7MjY0REE7MjY0REE7MjY0REE7MjY0REE7CisyRjk3QzsyNjUyMzsyNjUyMzsyNjUyMzsyNjUyMzsKKzJGOTdEOzgwNjA7ODA2MDs4MDYwOzgwNjA7CisyRjk3RTsyNjVBODsyNjVBODsyNjVBODsyNjVBODsKKzJGOTdGOzgwNzA7ODA3MDs4MDcwOzgwNzA7CisyRjk4MDsyMzM1RjsyMzM1RjsyMzM1RjsyMzM1RjsKKzJGOTgxOzQzRDU7NDNENTs0M0Q1OzQzRDU7CisyRjk4Mjs4MEIyOzgwQjI7ODBCMjs4MEIyOworMkY5ODM7ODEwMzs4MTAzOzgxMDM7ODEwMzsKKzJGOTg0OzQ0MEI7NDQwQjs0NDBCOzQ0MEI7CisyRjk4NTs4MTNFOzgxM0U7ODEzRTs4MTNFOworMkY5ODY7NUFCNTs1QUI1OzVBQjU7NUFCNTsKKzJGOTg3OzI2N0E3OzI2N0E3OzI2N0E3OzI2N0E3OworMkY5ODg7MjY3QjU7MjY3QjU7MjY3QjU7MjY3QjU7CisyRjk4OTsyMzM5MzsyMzM5MzsyMzM5MzsyMzM5MzsKKzJGOThBOzIzMzlDOzIzMzlDOzIzMzlDOzIzMzlDOworMkY5OEI7ODIwMTs4MjAxOzgyMDE7ODIwMTsKKzJGOThDOzgyMDQ7ODIwNDs4MjA0OzgyMDQ7CisyRjk4RDs4RjlFOzhGOUU7OEY5RTs4RjlFOworMkY5OEU7NDQ2Qjs0NDZCOzQ0NkI7NDQ2QjsKKzJGOThGOzgyOTE7ODI5MTs4MjkxOzgyOTE7CisyRjk5MDs4MjhCOzgyOEI7ODI4Qjs4MjhCOworMkY5OTE7ODI5RDs4MjlEOzgyOUQ7ODI5RDsKKzJGOTkyOzUyQjM7NTJCMzs1MkIzOzUyQjM7CisyRjk5Mzs4MkIxOzgyQjE7ODJCMTs4MkIxOworMkY5OTQ7ODJCMzs4MkIzOzgyQjM7ODJCMzsKKzJGOTk1OzgyQkQ7ODJCRDs4MkJEOzgyQkQ7CisyRjk5Njs4MkU2OzgyRTY7ODJFNjs4MkU2OworMkY5OTc7MjZCM0M7MjZCM0M7MjZCM0M7MjZCM0M7CisyRjk5ODs4MkU1OzgyRTU7ODJFNTs4MkU1OworMkY5OTk7ODMxRDs4MzFEOzgzMUQ7ODMxRDsKKzJGOTlBOzgzNjM7ODM2Mzs4MzYzOzgzNjM7CisyRjk5Qjs4M0FEOzgzQUQ7ODNBRDs4M0FEOworMkY5OUM7ODMyMzs4MzIzOzgzMjM7ODMyMzsKKzJGOTlEOzgzQkQ7ODNCRDs4M0JEOzgzQkQ7CisyRjk5RTs4M0U3OzgzRTc7ODNFNzs4M0U3OworMkY5OUY7ODQ1Nzs4NDU3Ozg0NTc7ODQ1NzsKKzJGOUEwOzgzNTM7ODM1Mzs4MzUzOzgzNTM7CisyRjlBMTs4M0NBOzgzQ0E7ODNDQTs4M0NBOworMkY5QTI7ODNDQzs4M0NDOzgzQ0M7ODNDQzsKKzJGOUEzOzgzREM7ODNEQzs4M0RDOzgzREM7CisyRjlBNDsyNkMzNjsyNkMzNjsyNkMzNjsyNkMzNjsKKzJGOUE1OzI2RDZCOzI2RDZCOzI2RDZCOzI2RDZCOworMkY5QTY7MjZDRDU7MjZDRDU7MjZDRDU7MjZDRDU7CisyRjlBNzs0NTJCOzQ1MkI7NDUyQjs0NTJCOworMkY5QTg7ODRGMTs4NEYxOzg0RjE7ODRGMTsKKzJGOUE5Ozg0RjM7ODRGMzs4NEYzOzg0RjM7CisyRjlBQTs4NTE2Ozg1MTY7ODUxNjs4NTE2OworMkY5QUI7MjczQ0E7MjczQ0E7MjczQ0E7MjczQ0E7CisyRjlBQzs4NTY0Ozg1NjQ7ODU2NDs4NTY0OworMkY5QUQ7MjZGMkM7MjZGMkM7MjZGMkM7MjZGMkM7CisyRjlBRTs0NTVEOzQ1NUQ7NDU1RDs0NTVEOworMkY5QUY7NDU2MTs0NTYxOzQ1NjE7NDU2MTsKKzJGOUIwOzI2RkIxOzI2RkIxOzI2RkIxOzI2RkIxOworMkY5QjE7MjcwRDI7MjcwRDI7MjcwRDI7MjcwRDI7CisyRjlCMjs0NTZCOzQ1NkI7NDU2Qjs0NTZCOworMkY5QjM7ODY1MDs4NjUwOzg2NTA7ODY1MDsKKzJGOUI0Ozg2NUM7ODY1Qzs4NjVDOzg2NUM7CisyRjlCNTs4NjY3Ozg2Njc7ODY2Nzs4NjY3OworMkY5QjY7ODY2OTs4NjY5Ozg2Njk7ODY2OTsKKzJGOUI3Ozg2QTk7ODZBOTs4NkE5Ozg2QTk7CisyRjlCODs4Njg4Ozg2ODg7ODY4ODs4Njg4OworMkY5Qjk7ODcwRTs4NzBFOzg3MEU7ODcwRTsKKzJGOUJBOzg2RTI7ODZFMjs4NkUyOzg2RTI7CisyRjlCQjs4Nzc5Ozg3Nzk7ODc3OTs4Nzc5OworMkY5QkM7ODcyODs4NzI4Ozg3Mjg7ODcyODsKKzJGOUJEOzg3NkI7ODc2Qjs4NzZCOzg3NkI7CisyRjlCRTs4Nzg2Ozg3ODY7ODc4Njs4Nzg2OworMkY5QkY7NEQ1Nzs0RDU3OzRENTc7NEQ1NzsKKzJGOUMwOzg3RTE7ODdFMTs4N0UxOzg3RTE7CisyRjlDMTs4ODAxOzg4MDE7ODgwMTs4ODAxOworMkY5QzI7NDVGOTs0NUY5OzQ1Rjk7NDVGOTsKKzJGOUMzOzg4NjA7ODg2MDs4ODYwOzg4NjA7CisyRjlDNDs4ODYzOzg4NjM7ODg2Mzs4ODYzOworMkY5QzU7Mjc2Njc7Mjc2Njc7Mjc2Njc7Mjc2Njc7CisyRjlDNjs4OEQ3Ozg4RDc7ODhENzs4OEQ3OworMkY5Qzc7ODhERTs4OERFOzg4REU7ODhERTsKKzJGOUM4OzQ2MzU7NDYzNTs0NjM1OzQ2MzU7CisyRjlDOTs4OEZBOzg4RkE7ODhGQTs4OEZBOworMkY5Q0E7MzRCQjszNEJCOzM0QkI7MzRCQjsKKzJGOUNCOzI3OEFFOzI3OEFFOzI3OEFFOzI3OEFFOworMkY5Q0M7Mjc5NjY7Mjc5NjY7Mjc5NjY7Mjc5NjY7CisyRjlDRDs0NkJFOzQ2QkU7NDZCRTs0NkJFOworMkY5Q0U7NDZDNzs0NkM3OzQ2Qzc7NDZDNzsKKzJGOUNGOzhBQTA7OEFBMDs4QUEwOzhBQTA7CisyRjlEMDs4QUVEOzhBRUQ7OEFFRDs4QUVEOworMkY5RDE7OEI4QTs4QjhBOzhCOEE7OEI4QTsKKzJGOUQyOzhDNTU7OEM1NTs4QzU1OzhDNTU7CisyRjlEMzsyN0NBODsyN0NBODsyN0NBODsyN0NBODsKKzJGOUQ0OzhDQUI7OENBQjs4Q0FCOzhDQUI7CisyRjlENTs4Q0MxOzhDQzE7OENDMTs4Q0MxOworMkY5RDY7OEQxQjs4RDFCOzhEMUI7OEQxQjsKKzJGOUQ3OzhENzc7OEQ3Nzs4RDc3OzhENzc7CisyRjlEODsyN0YyRjsyN0YyRjsyN0YyRjsyN0YyRjsKKzJGOUQ5OzIwODA0OzIwODA0OzIwODA0OzIwODA0OworMkY5REE7OERDQjs4RENCOzhEQ0I7OERDQjsKKzJGOURCOzhEQkM7OERCQzs4REJDOzhEQkM7CisyRjlEQzs4REYwOzhERjA7OERGMDs4REYwOworMkY5REQ7MjA4REU7MjA4REU7MjA4REU7MjA4REU7CisyRjlERTs4RUQ0OzhFRDQ7OEVENDs4RUQ0OworMkY5REY7OEYzODs4RjM4OzhGMzg7OEYzODsKKzJGOUUwOzI4NUQyOzI4NUQyOzI4NUQyOzI4NUQyOworMkY5RTE7Mjg1RUQ7Mjg1RUQ7Mjg1RUQ7Mjg1RUQ7CisyRjlFMjs5MDk0OzkwOTQ7OTA5NDs5MDk0OworMkY5RTM7OTBGMTs5MEYxOzkwRjE7OTBGMTsKKzJGOUU0OzkxMTE7OTExMTs5MTExOzkxMTE7CisyRjlFNTsyODcyRTsyODcyRTsyODcyRTsyODcyRTsKKzJGOUU2OzkxMUI7OTExQjs5MTFCOzkxMUI7CisyRjlFNzs5MjM4OzkyMzg7OTIzODs5MjM4OworMkY5RTg7OTJENzs5MkQ3OzkyRDc7OTJENzsKKzJGOUU5OzkyRDg7OTJEODs5MkQ4OzkyRDg7CisyRjlFQTs5MjdDOzkyN0M7OTI3Qzs5MjdDOworMkY5RUI7OTNGOTs5M0Y5OzkzRjk7OTNGOTsKKzJGOUVDOzk0MTU7OTQxNTs5NDE1Ozk0MTU7CisyRjlFRDsyOEJGQTsyOEJGQTsyOEJGQTsyOEJGQTsKKzJGOUVFOzk1OEI7OTU4Qjs5NThCOzk1OEI7CisyRjlFRjs0OTk1OzQ5OTU7NDk5NTs0OTk1OworMkY5RjA7OTVCNzs5NUI3Ozk1Qjc7OTVCNzsKKzJGOUYxOzI4RDc3OzI4RDc3OzI4RDc3OzI4RDc3OworMkY5RjI7NDlFNjs0OUU2OzQ5RTY7NDlFNjsKKzJGOUYzOzk2QzM7OTZDMzs5NkMzOzk2QzM7CisyRjlGNDs1REIyOzVEQjI7NURCMjs1REIyOworMkY5RjU7OTcyMzs5NzIzOzk3MjM7OTcyMzsKKzJGOUY2OzI5MTQ1OzI5MTQ1OzI5MTQ1OzI5MTQ1OworMkY5Rjc7MjkyMUE7MjkyMUE7MjkyMUE7MjkyMUE7CisyRjlGODs0QTZFOzRBNkU7NEE2RTs0QTZFOworMkY5Rjk7NEE3Njs0QTc2OzRBNzY7NEE3NjsKKzJGOUZBOzk3RTA7OTdFMDs5N0UwOzk3RTA7CisyRjlGQjsyOTQwQTsyOTQwQTsyOTQwQTsyOTQwQTsKKzJGOUZDOzRBQjI7NEFCMjs0QUIyOzRBQjI7CisyRjlGRDsyOTQ5NjsyOTQ5NjsyOTQ5NjsyOTQ5NjsKKzJGOUZFOzk4MEI7OTgwQjs5ODBCOzk4MEI7CisyRjlGRjs5ODBCOzk4MEI7OTgwQjs5ODBCOworMkZBMDA7OTgyOTs5ODI5Ozk4Mjk7OTgyOTsKKzJGQTAxOzI5NUI2OzI5NUI2OzI5NUI2OzI5NUI2OworMkZBMDI7OThFMjs5OEUyOzk4RTI7OThFMjsKKzJGQTAzOzRCMzM7NEIzMzs0QjMzOzRCMzM7CisyRkEwNDs5OTI5Ozk5Mjk7OTkyOTs5OTI5OworMkZBMDU7OTlBNzs5OUE3Ozk5QTc7OTlBNzsKKzJGQTA2Ozk5QzI7OTlDMjs5OUMyOzk5QzI7CisyRkEwNzs5OUZFOzk5RkU7OTlGRTs5OUZFOworMkZBMDg7NEJDRTs0QkNFOzRCQ0U7NEJDRTsKKzJGQTA5OzI5QjMwOzI5QjMwOzI5QjMwOzI5QjMwOworMkZBMEE7OUIxMjs5QjEyOzlCMTI7OUIxMjsKKzJGQTBCOzlDNDA7OUM0MDs5QzQwOzlDNDA7CisyRkEwQzs5Q0ZEOzlDRkQ7OUNGRDs5Q0ZEOworMkZBMEQ7NENDRTs0Q0NFOzRDQ0U7NENDRTsKKzJGQTBFOzRDRUQ7NENFRDs0Q0VEOzRDRUQ7CisyRkEwRjs5RDY3OzlENjc7OUQ2Nzs5RDY3OworMkZBMTA7MkEwQ0U7MkEwQ0U7MkEwQ0U7MkEwQ0U7CisyRkExMTs0Q0Y4OzRDRjg7NENGODs0Q0Y4OworMkZBMTI7MkExMDU7MkExMDU7MkExMDU7MkExMDU7CisyRkExMzsyQTIwRTsyQTIwRTsyQTIwRTsyQTIwRTsKKzJGQTE0OzJBMjkxOzJBMjkxOzJBMjkxOzJBMjkxOworMkZBMTU7OUVCQjs5RUJCOzlFQkI7OUVCQjsKKzJGQTE2OzRENTY7NEQ1Njs0RDU2OzRENTY7CisyRkExNzs5RUY5OzlFRjk7OUVGOTs5RUY5OworMkZBMTg7OUVGRTs5RUZFOzlFRkU7OUVGRTsKKzJGQTE5OzlGMDU7OUYwNTs5RjA1OzlGMDU7CisyRkExQTs5RjBGOzlGMEY7OUYwRjs5RjBGOworMkZBMUI7OUYxNjs5RjE2OzlGMTY7OUYxNjsKKzJGQTFDOzlGM0I7OUYzQjs5RjNCOzlGM0I7CisyRkExRDsyQTYwMDsyQTYwMDsyQTYwMDsyQTYwMDsKKyMKK0BQYXJ0MiAjIENhbm9uaWNhbCBPcmRlciBUZXN0CisjCiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMDAgMDA2MjswMEUwIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwMCAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzAwIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDBFMCAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDAgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMwMSAwMDYyOzAwRTAgMDVBRSAwMzAxIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzAxIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMwMSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwMSAwMzE1IDAwNjI7CiswMDYxIDAzMDEgMDMxNSAwMzAwIDA1QUUgMDA2MjswMEUxIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDEgMDMwMCAwMzE1IDAwNjI7MDBFMSAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAxIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzAyIDAwNjI7MDBFMCAwNUFFIDAzMDIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDIgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzAyIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzAyIDAzMTUgMDA2MjsKKzAwNjEgMDMwMiAwMzE1IDAzMDAgMDVBRSAwMDYyOzFFQTcgMDVBRSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDIgMDMwMCAwMzE1IDAwNjI7MUVBNyAwNUFFIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMwMyAwMDYyOzAwRTAgMDVBRSAwMzAzIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzAzIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMwMyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwMyAwMzE1IDAwNjI7CiswMDYxIDAzMDMgMDMxNSAwMzAwIDA1QUUgMDA2MjswMEUzIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDMgMDMwMCAwMzE1IDAwNjI7MDBFMyAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAzIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzA0IDAwNjI7MDBFMCAwNUFFIDAzMDQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDQgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzA0IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzA0IDAzMTUgMDA2MjsKKzAwNjEgMDMwNCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAxMDEgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwNCAwMzAwIDAzMTUgMDA2MjswMTAxIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDQgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMDUgMDA2MjswMEUwIDA1QUUgMDMwNSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwNSAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMDUgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDUgMDMxNSAwMDYyOworMDA2MSAwMzA1IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDAzMDUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDUgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMDYgMDA2MjswMEUwIDA1QUUgMDMwNiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwNiAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMDYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDYgMDMxNSAwMDYyOworMDA2MSAwMzA2IDAzMTUgMDMwMCAwNUFFIDAwNjI7MUVCMSAwNUFFIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwNiAwMzAwIDAzMTUgMDA2MjsxRUIxIDA1QUUgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzA2IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzA3IDAwNjI7MDBFMCAwNUFFIDAzMDcgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDcgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzA3IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzA3IDAzMTUgMDA2MjsKKzAwNjEgMDMwNyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAyMjcgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwNyAwMzAwIDAzMTUgMDA2MjswMjI3IDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDcgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMDggMDA2MjswMEUwIDA1QUUgMDMwOCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwOCAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMDggMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDggMDMxNSAwMDYyOworMDA2MSAwMzA4IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDBFNCAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzA4IDAzMDAgMDMxNSAwMDYyOzAwRTQgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwOCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMwOSAwMDYyOzAwRTAgMDVBRSAwMzA5IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzA5IDAzMTUgMDA2MjswMEUwIDA1QUUgMDMwOSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwOSAwMzE1IDAwNjI7CiswMDYxIDAzMDkgMDMxNSAwMzAwIDA1QUUgMDA2MjsxRUEzIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDkgMDMwMCAwMzE1IDAwNjI7MUVBMyAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzA5IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzBBIDAwNjI7MDBFMCAwNUFFIDAzMEEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMEEgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzBBIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzBBIDAzMTUgMDA2MjsKKzAwNjEgMDMwQSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwRTUgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwQSAwMzAwIDAzMTUgMDA2MjswMEU1IDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMEEgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMEIgMDA2MjswMEUwIDA1QUUgMDMwQiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwQiAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMEIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMEIgMDMxNSAwMDYyOworMDA2MSAwMzBCIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDAzMEIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMEIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMEIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMEIgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMEMgMDA2MjswMEUwIDA1QUUgMDMwQyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwQyAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMEMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMEMgMDMxNSAwMDYyOworMDA2MSAwMzBDIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDFDRSAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzBDIDAzMDAgMDMxNSAwMDYyOzAxQ0UgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwQyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMwRCAwMDYyOzAwRTAgMDVBRSAwMzBEIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzBEIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMwRCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwRCAwMzE1IDAwNjI7CiswMDYxIDAzMEQgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDMwRCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwRCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwRCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwRCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMwRSAwMDYyOzAwRTAgMDVBRSAwMzBFIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzBFIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMwRSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwRSAwMzE1IDAwNjI7CiswMDYxIDAzMEUgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDMwRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwRSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMwRiAwMDYyOzAwRTAgMDVBRSAwMzBGIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzBGIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMwRiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwRiAwMzE1IDAwNjI7CiswMDYxIDAzMEYgMDMxNSAwMzAwIDA1QUUgMDA2MjswMjAxIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMEYgMDMwMCAwMzE1IDAwNjI7MDIwMSAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzBGIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzEwIDAwNjI7MDBFMCAwNUFFIDAzMTAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMTAgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzEwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzEwIDAzMTUgMDA2MjsKKzAwNjEgMDMxMCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzEwIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzEwIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzEwIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzEwIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzExIDAwNjI7MDBFMCAwNUFFIDAzMTEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMTEgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzExIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzExIDAzMTUgMDA2MjsKKzAwNjEgMDMxMSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAyMDMgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMxMSAwMzAwIDAzMTUgMDA2MjswMjAzIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTEgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMTIgMDA2MjswMEUwIDA1QUUgMDMxMiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMxMiAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMTIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMTIgMDMxNSAwMDYyOworMDA2MSAwMzEyIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDAzMTIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTIgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMTMgMDA2MjswMEUwIDA1QUUgMDMxMyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMxMyAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMTMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMTMgMDMxNSAwMDYyOworMDA2MSAwMzEzIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDAzMTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTMgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzMTQgMDA2MjswMEUwIDA1QUUgMDMxNCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMxNCAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMTQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMTQgMDMxNSAwMDYyOworMDA2MSAwMzE0IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDAzMTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTQgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzNjIgMDMxNSAwMzAwIDAzMTUgMDA2MjswMEUwIDAzMTUgMDMxNSAwMzYyIDAwNjI7MDA2MSAwMzAwIDAzMTUgMDMxNSAwMzYyIDAwNjI7MDBFMCAwMzE1IDAzMTUgMDM2MiAwMDYyOzAwNjEgMDMwMCAwMzE1IDAzMTUgMDM2MiAwMDYyOworMDA2MSAwMzE1IDAzNjIgMDMxNSAwMzAwIDAwNjI7MDBFMCAwMzE1IDAzMTUgMDM2MiAwMDYyOzAwNjEgMDMwMCAwMzE1IDAzMTUgMDM2MiAwMDYyOzAwRTAgMDMxNSAwMzE1IDAzNjIgMDA2MjswMDYxIDAzMDAgMDMxNSAwMzE1IDAzNjIgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMxNiAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzE2IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzMTcgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzE3IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzE3IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzE3IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzE3IDA1OUEgMDA2MjsKKzAwNjEgMDMxNyAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzE3IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE3IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE3IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE3IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzE4IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxOCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxOCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxOCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxOCAwNTlBIDAwNjI7CiswMDYxIDAzMTggMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMxOCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxOCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxOCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxOCAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMxOSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMTkgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMTkgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMTkgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMTkgMDU5QSAwMDYyOworMDA2MSAwMzE5IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzMTkgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTkgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTkgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTkgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDAzNjIgMDMxNSAwMzAwIDAzMUEgMDA2MjswMEUwIDAzMTUgMDMxQSAwMzYyIDAwNjI7MDA2MSAwMzAwIDAzMTUgMDMxQSAwMzYyIDAwNjI7MDBFMCAwMzE1IDAzMUEgMDM2MiAwMDYyOzAwNjEgMDMwMCAwMzE1IDAzMUEgMDM2MiAwMDYyOworMDA2MSAwMzFBIDAzNjIgMDMxNSAwMzAwIDAwNjI7MDBFMCAwMzFBIDAzMTUgMDM2MiAwMDYyOzAwNjEgMDMwMCAwMzFBIDAzMTUgMDM2MiAwMDYyOzAwRTAgMDMxQSAwMzE1IDAzNjIgMDA2MjswMDYxIDAzMDAgMDMxQSAwMzE1IDAzNjIgMDA2MjsKKzAwNjEgMzAyQSAwMzFCIDAzMjEgMDMxQiAwMDYyOzAwNjEgMDMyMSAwMzFCIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDAzMUIgMzAyQSAwMDYyOworMDA2MSAwMzFCIDMwMkEgMDMxQiAwMzIxIDAwNjI7MDA2MSAwMzIxIDAzMUIgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMDMxQiAzMDJBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzMUMgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzFDIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzFDIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzFDIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzFDIDA1OUEgMDA2MjsKKzAwNjEgMDMxQyAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzFDIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzFDIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzFDIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzFDIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzFEIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxRCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxRCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxRCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMxRCAwNTlBIDAwNjI7CiswMDYxIDAzMUQgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMxRCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxRCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxRCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxRCAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMxRSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMUUgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMUUgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMUUgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMUUgMDU5QSAwMDYyOworMDA2MSAwMzFFIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzMUUgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMUUgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMUUgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMUUgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzMUYgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzFGIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzFGIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzFGIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzFGIDA1OUEgMDA2MjsKKzAwNjEgMDMxRiAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzFGIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzFGIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzFGIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzFGIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzIwIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyMCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyMCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyMCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyMCAwNTlBIDAwNjI7CiswMDYxIDAzMjAgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMyMCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyMCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyMCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyMCAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxQiAwMzIxIDBGNzQgMDMyMSAwMDYyOzAwNjEgMEY3NCAwMzIxIDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzIxIDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzIxIDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzIxIDAzMjEgMDMxQiAwMDYyOworMDA2MSAwMzIxIDAzMUIgMDMyMSAwRjc0IDAwNjI7MDA2MSAwRjc0IDAzMjEgMDMyMSAwMzFCIDAwNjI7MDA2MSAwRjc0IDAzMjEgMDMyMSAwMzFCIDAwNjI7MDA2MSAwRjc0IDAzMjEgMDMyMSAwMzFCIDAwNjI7MDA2MSAwRjc0IDAzMjEgMDMyMSAwMzFCIDAwNjI7CiswMDYxIDAzMUIgMDMyMSAwRjc0IDAzMjIgMDA2MjswMDYxIDBGNzQgMDMyMSAwMzIyIDAzMUIgMDA2MjswMDYxIDBGNzQgMDMyMSAwMzIyIDAzMUIgMDA2MjswMDYxIDBGNzQgMDMyMSAwMzIyIDAzMUIgMDA2MjswMDYxIDBGNzQgMDMyMSAwMzIyIDAzMUIgMDA2MjsKKzAwNjEgMDMyMiAwMzFCIDAzMjEgMEY3NCAwMDYyOzAwNjEgMEY3NCAwMzIyIDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzIyIDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzIyIDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzIyIDAzMjEgMDMxQiAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzIzIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyMyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyMyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyMyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyMyAwNTlBIDAwNjI7CiswMDYxIDAzMjMgMDU5QSAwMzE2IDMwMkEgMDA2MjsxRUExIDMwMkEgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMjMgMDMxNiAwNTlBIDAwNjI7MUVBMSAzMDJBIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzIzIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzI0IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyNCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyNCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyNCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyNCAwNTlBIDAwNjI7CiswMDYxIDAzMjQgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMyNCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyNCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyNCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyNCAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMyNSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMjUgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMjUgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMjUgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMjUgMDU5QSAwMDYyOworMDA2MSAwMzI1IDA1OUEgMDMxNiAzMDJBIDAwNjI7MUUwMSAzMDJBIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzI1IDAzMTYgMDU5QSAwMDYyOzFFMDEgMzAyQSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyNSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMyNiAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMjYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMjYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMjYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMjYgMDU5QSAwMDYyOworMDA2MSAwMzI2IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzMjYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMjYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMjYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMjYgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDAzMUIgMDMyMSAwRjc0IDAzMjcgMDA2MjswMDYxIDBGNzQgMDMyMSAwMzI3IDAzMUIgMDA2MjswMDYxIDBGNzQgMDMyMSAwMzI3IDAzMUIgMDA2MjswMDYxIDBGNzQgMDMyMSAwMzI3IDAzMUIgMDA2MjswMDYxIDBGNzQgMDMyMSAwMzI3IDAzMUIgMDA2MjsKKzAwNjEgMDMyNyAwMzFCIDAzMjEgMEY3NCAwMDYyOzAwNjEgMEY3NCAwMzI3IDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzI3IDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzI3IDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzI3IDAzMjEgMDMxQiAwMDYyOworMDA2MSAwMzFCIDAzMjEgMEY3NCAwMzI4IDAwNjI7MDA2MSAwRjc0IDAzMjEgMDMyOCAwMzFCIDAwNjI7MDA2MSAwRjc0IDAzMjEgMDMyOCAwMzFCIDAwNjI7MDA2MSAwRjc0IDAzMjEgMDMyOCAwMzFCIDAwNjI7MDA2MSAwRjc0IDAzMjEgMDMyOCAwMzFCIDAwNjI7CiswMDYxIDAzMjggMDMxQiAwMzIxIDBGNzQgMDA2MjswMTA1IDBGNzQgMDMyMSAwMzFCIDAwNjI7MDA2MSAwRjc0IDAzMjggMDMyMSAwMzFCIDAwNjI7MDEwNSAwRjc0IDAzMjEgMDMxQiAwMDYyOzAwNjEgMEY3NCAwMzI4IDAzMjEgMDMxQiAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzI5IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyOSAwNTlBIDAwNjI7CiswMDYxIDAzMjkgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMyOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyOSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMyQSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMkEgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMkEgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMkEgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMkEgMDU5QSAwMDYyOworMDA2MSAwMzJBIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzMkEgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMkEgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMkEgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMkEgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzMkIgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzJCIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzJCIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzJCIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzJCIDA1OUEgMDA2MjsKKzAwNjEgMDMyQiAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzJCIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzJCIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzJCIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzJCIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzJDIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyQyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyQyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyQyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyQyAwNTlBIDAwNjI7CiswMDYxIDAzMkMgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMyQyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyQyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyQyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyQyAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMyRCAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMkQgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMkQgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMkQgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMkQgMDU5QSAwMDYyOworMDA2MSAwMzJEIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzMkQgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMkQgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMkQgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMkQgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzMkUgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzJFIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzJFIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzJFIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzJFIDA1OUEgMDA2MjsKKzAwNjEgMDMyRSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzJFIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzJFIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzJFIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzJFIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzJGIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyRiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyRiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyRiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMyRiAwNTlBIDAwNjI7CiswMDYxIDAzMkYgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMyRiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyRiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyRiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMyRiAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMzMCAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMzAgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMzAgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMzAgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMzAgMDU5QSAwMDYyOworMDA2MSAwMzMwIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzMzAgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMzAgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMzAgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMzAgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzMzEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzMxIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzMxIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzMxIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzMxIDA1OUEgMDA2MjsKKzAwNjEgMDMzMSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzMxIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzMxIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzMxIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzMxIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzMyIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzMiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzMiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzMiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzMiAwNTlBIDAwNjI7CiswMDYxIDAzMzIgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMzMiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzMiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzMiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzMiAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMzMyAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMzMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMzMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMzMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzMzMgMDU5QSAwMDYyOworMDA2MSAwMzMzIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzMzMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMzMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMzMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMzMgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA5M0MgMDMzNCAwMzM0IDAwNjI7MDA2MSAwMzM0IDAzMzQgMDkzQyAwMDYyOzAwNjEgMDMzNCAwMzM0IDA5M0MgMDA2MjswMDYxIDAzMzQgMDMzNCAwOTNDIDAwNjI7MDA2MSAwMzM0IDAzMzQgMDkzQyAwMDYyOworMDA2MSAwMzM0IDA5M0MgMDMzNCAwMDYyOzAwNjEgMDMzNCAwMzM0IDA5M0MgMDA2MjswMDYxIDAzMzQgMDMzNCAwOTNDIDAwNjI7MDA2MSAwMzM0IDAzMzQgMDkzQyAwMDYyOzAwNjEgMDMzNCAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDkzQyAwMzM0IDAzMzUgMDA2MjswMDYxIDAzMzQgMDMzNSAwOTNDIDAwNjI7MDA2MSAwMzM0IDAzMzUgMDkzQyAwMDYyOzAwNjEgMDMzNCAwMzM1IDA5M0MgMDA2MjswMDYxIDAzMzQgMDMzNSAwOTNDIDAwNjI7CiswMDYxIDAzMzUgMDkzQyAwMzM0IDAwNjI7MDA2MSAwMzM1IDAzMzQgMDkzQyAwMDYyOzAwNjEgMDMzNSAwMzM0IDA5M0MgMDA2MjswMDYxIDAzMzUgMDMzNCAwOTNDIDAwNjI7MDA2MSAwMzM1IDAzMzQgMDkzQyAwMDYyOworMDA2MSAwOTNDIDAzMzQgMDMzNiAwMDYyOzAwNjEgMDMzNCAwMzM2IDA5M0MgMDA2MjswMDYxIDAzMzQgMDMzNiAwOTNDIDAwNjI7MDA2MSAwMzM0IDAzMzYgMDkzQyAwMDYyOzAwNjEgMDMzNCAwMzM2IDA5M0MgMDA2MjsKKzAwNjEgMDMzNiAwOTNDIDAzMzQgMDA2MjswMDYxIDAzMzYgMDMzNCAwOTNDIDAwNjI7MDA2MSAwMzM2IDAzMzQgMDkzQyAwMDYyOzAwNjEgMDMzNiAwMzM0IDA5M0MgMDA2MjswMDYxIDAzMzYgMDMzNCAwOTNDIDAwNjI7CiswMDYxIDA5M0MgMDMzNCAwMzM3IDAwNjI7MDA2MSAwMzM0IDAzMzcgMDkzQyAwMDYyOzAwNjEgMDMzNCAwMzM3IDA5M0MgMDA2MjswMDYxIDAzMzQgMDMzNyAwOTNDIDAwNjI7MDA2MSAwMzM0IDAzMzcgMDkzQyAwMDYyOworMDA2MSAwMzM3IDA5M0MgMDMzNCAwMDYyOzAwNjEgMDMzNyAwMzM0IDA5M0MgMDA2MjswMDYxIDAzMzcgMDMzNCAwOTNDIDAwNjI7MDA2MSAwMzM3IDAzMzQgMDkzQyAwMDYyOzAwNjEgMDMzNyAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDkzQyAwMzM0IDAzMzggMDA2MjswMDYxIDAzMzQgMDMzOCAwOTNDIDAwNjI7MDA2MSAwMzM0IDAzMzggMDkzQyAwMDYyOzAwNjEgMDMzNCAwMzM4IDA5M0MgMDA2MjswMDYxIDAzMzQgMDMzOCAwOTNDIDAwNjI7CiswMDYxIDAzMzggMDkzQyAwMzM0IDAwNjI7MDA2MSAwMzM4IDAzMzQgMDkzQyAwMDYyOzAwNjEgMDMzOCAwMzM0IDA5M0MgMDA2MjswMDYxIDAzMzggMDMzNCAwOTNDIDAwNjI7MDA2MSAwMzM4IDAzMzQgMDkzQyAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzM5IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzOSAwNTlBIDAwNjI7CiswMDYxIDAzMzkgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMzOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzOSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDMzQSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzM0EgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzM0EgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzM0EgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzM0EgMDU5QSAwMDYyOworMDA2MSAwMzNBIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzM0EgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzM0EgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzM0EgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzM0EgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzM0IgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzNCIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzNCIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzNCIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzNCIDA1OUEgMDA2MjsKKzAwNjEgMDMzQiAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzNCIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzNCIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzNCIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzNCIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzNDIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzQyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzQyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzQyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDMzQyAwNTlBIDAwNjI7CiswMDYxIDAzM0MgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDMzQyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzQyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzQyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMzQyAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMzRCAwMDYyOzAwRTAgMDVBRSAwMzNEIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzNEIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMzRCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMzRCAwMzE1IDAwNjI7CiswMDYxIDAzM0QgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDMzRCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMzRSAwMDYyOzAwRTAgMDVBRSAwMzNFIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzNFIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMzRSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMzRSAwMzE1IDAwNjI7CiswMDYxIDAzM0UgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDMzRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDMzRiAwMDYyOzAwRTAgMDVBRSAwMzNGIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzNGIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMzRiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMzRiAwMzE1IDAwNjI7CiswMDYxIDAzM0YgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDMzRiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMzRiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDM0MCAwMDYyOzAwRTAgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzAwIDAzMTUgMDA2MjswMEUwIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzNDAgMDMxNSAwMzAwIDA1QUUgMDA2MjswMEUwIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMwMCAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzQxIDAwNjI7MDBFMCAwNUFFIDAzMDEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDEgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzAxIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzAxIDAzMTUgMDA2MjsKKzAwNjEgMDM0MSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwRTEgMDVBRSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMSAwMzAwIDAzMTUgMDA2MjswMEUxIDA1QUUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDEgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzNDIgMDA2MjswMEUwIDA1QUUgMDM0MiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDM0MiAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzNDIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNDIgMDMxNSAwMDYyOworMDA2MSAwMzQyIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDAzNDIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzNDIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzNDIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzNDIgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzNDMgMDA2MjswMEUwIDA1QUUgMDMxMyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDMxMyAwMzE1IDAwNjI7MDBFMCAwNUFFIDAzMTMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMTMgMDMxNSAwMDYyOworMDA2MSAwMzQzIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDAzMTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMTMgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDAzNDQgMDA2MjswMEUwIDA1QUUgMDMwOCAwMzAxIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzA4IDAzMDEgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzA4IDAzMDEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzMDggMDMwMSAwMzE1IDAwNjI7CiswMDYxIDAzNDQgMDMxNSAwMzAwIDA1QUUgMDA2MjswMEU0IDA1QUUgMDMwMSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwOCAwMzAxIDAzMDAgMDMxNSAwMDYyOzAwRTQgMDVBRSAwMzAxIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzA4IDAzMDEgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzNDUgMDM2MCAwMzQ1IDAwNjI7MDA2MSAwMzYwIDAzNDUgMDM0NSAwMDYyOzAwNjEgMDM2MCAwMzQ1IDAzNDUgMDA2MjswMDYxIDAzNjAgMDM0NSAwMzQ1IDAwNjI7MDA2MSAwMzYwIDAzNDUgMDM0NSAwMDYyOworMDA2MSAwMzQ1IDAzNDUgMDM2MCAwMDYyOzAwNjEgMDM2MCAwMzQ1IDAzNDUgMDA2MjswMDYxIDAzNjAgMDM0NSAwMzQ1IDAwNjI7MDA2MSAwMzYwIDAzNDUgMDM0NSAwMDYyOzAwNjEgMDM2MCAwMzQ1IDAzNDUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDM0NiAwMDYyOzAwRTAgMDVBRSAwMzQ2IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzQ2IDAzMTUgMDA2MjswMEUwIDA1QUUgMDM0NiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDM0NiAwMzE1IDAwNjI7CiswMDYxIDAzNDYgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDM0NiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0NiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0NiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0NiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDM0NyAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzNDcgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzNDcgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzNDcgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzNDcgMDU5QSAwMDYyOworMDA2MSAwMzQ3IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzNDcgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzNDcgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzNDcgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzNDcgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzNDggMDA2MjswMDYxIDMwMkEgMDMxNiAwMzQ4IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzQ4IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzQ4IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzQ4IDA1OUEgMDA2MjsKKzAwNjEgMDM0OCAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzQ4IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzQ4IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzQ4IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzQ4IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwMzQ5IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDM0OSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDM0OSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDM0OSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDM0OSAwNTlBIDAwNjI7CiswMDYxIDAzNDkgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDM0OSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDM0OSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDM0OSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDM0OSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDM0QSAwMDYyOzAwRTAgMDVBRSAwMzRBIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzRBIDAzMTUgMDA2MjswMEUwIDA1QUUgMDM0QSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDM0QSAwMzE1IDAwNjI7CiswMDYxIDAzNEEgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDM0QSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDM0QiAwMDYyOzAwRTAgMDVBRSAwMzRCIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzRCIDAzMTUgMDA2MjswMEUwIDA1QUUgMDM0QiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDM0QiAwMzE1IDAwNjI7CiswMDYxIDAzNEIgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDM0QiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDM0QyAwMDYyOzAwRTAgMDVBRSAwMzRDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzRDIDAzMTUgMDA2MjswMEUwIDA1QUUgMDM0QyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDM0QyAwMzE1IDAwNjI7CiswMDYxIDAzNEMgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDM0QyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDM0QyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDM0RCAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzNEQgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzNEQgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzNEQgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDAzNEQgMDU5QSAwMDYyOworMDA2MSAwMzREIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDAzNEQgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzNEQgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzNEQgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzNEQgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDAzNEUgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzRFIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzRFIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzRFIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwMzRFIDA1OUEgMDA2MjsKKzAwNjEgMDM0RSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwMzRFIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzRFIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzRFIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzRFIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzQ1IDAzNjAgMDM2MiAwMzYwIDAwNjI7MDA2MSAwMzYyIDAzNjAgMDM2MCAwMzQ1IDAwNjI7MDA2MSAwMzYyIDAzNjAgMDM2MCAwMzQ1IDAwNjI7MDA2MSAwMzYyIDAzNjAgMDM2MCAwMzQ1IDAwNjI7MDA2MSAwMzYyIDAzNjAgMDM2MCAwMzQ1IDAwNjI7CiswMDYxIDAzNjAgMDM0NSAwMzYwIDAzNjIgMDA2MjswMDYxIDAzNjIgMDM2MCAwMzYwIDAzNDUgMDA2MjswMDYxIDAzNjIgMDM2MCAwMzYwIDAzNDUgMDA2MjswMDYxIDAzNjIgMDM2MCAwMzYwIDAzNDUgMDA2MjswMDYxIDAzNjIgMDM2MCAwMzYwIDAzNDUgMDA2MjsKKzAwNjEgMDM0NSAwMzYwIDAzNjIgMDM2MSAwMDYyOzAwNjEgMDM2MiAwMzYwIDAzNjEgMDM0NSAwMDYyOzAwNjEgMDM2MiAwMzYwIDAzNjEgMDM0NSAwMDYyOzAwNjEgMDM2MiAwMzYwIDAzNjEgMDM0NSAwMDYyOzAwNjEgMDM2MiAwMzYwIDAzNjEgMDM0NSAwMDYyOworMDA2MSAwMzYxIDAzNDUgMDM2MCAwMzYyIDAwNjI7MDA2MSAwMzYyIDAzNjEgMDM2MCAwMzQ1IDAwNjI7MDA2MSAwMzYyIDAzNjEgMDM2MCAwMzQ1IDAwNjI7MDA2MSAwMzYyIDAzNjEgMDM2MCAwMzQ1IDAwNjI7MDA2MSAwMzYyIDAzNjEgMDM2MCAwMzQ1IDAwNjI7CiswMDYxIDAzNjAgMDM2MiAwMzE1IDAzNjIgMDA2MjswMDYxIDAzMTUgMDM2MiAwMzYyIDAzNjAgMDA2MjswMDYxIDAzMTUgMDM2MiAwMzYyIDAzNjAgMDA2MjswMDYxIDAzMTUgMDM2MiAwMzYyIDAzNjAgMDA2MjswMDYxIDAzMTUgMDM2MiAwMzYyIDAzNjAgMDA2MjsKKzAwNjEgMDM2MiAwMzYwIDAzNjIgMDMxNSAwMDYyOzAwNjEgMDMxNSAwMzYyIDAzNjIgMDM2MCAwMDYyOzAwNjEgMDMxNSAwMzYyIDAzNjIgMDM2MCAwMDYyOzAwNjEgMDMxNSAwMzYyIDAzNjIgMDM2MCAwMDYyOzAwNjEgMDMxNSAwMzYyIDAzNjIgMDM2MCAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzYzIDAwNjI7MDBFMCAwNUFFIDAzNjMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNjMgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzYzIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzYzIDAzMTUgMDA2MjsKKzAwNjEgMDM2MyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzYzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzYzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzYzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzYzIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzY0IDAwNjI7MDBFMCAwNUFFIDAzNjQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNjQgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzY0IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzY0IDAzMTUgMDA2MjsKKzAwNjEgMDM2NCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzY0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY0IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzY1IDAwNjI7MDBFMCAwNUFFIDAzNjUgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNjUgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzY1IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzY1IDAzMTUgMDA2MjsKKzAwNjEgMDM2NSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzY1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY1IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzY2IDAwNjI7MDBFMCAwNUFFIDAzNjYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNjYgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzY2IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzY2IDAzMTUgMDA2MjsKKzAwNjEgMDM2NiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzY2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY2IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzY3IDAwNjI7MDBFMCAwNUFFIDAzNjcgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNjcgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzY3IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzY3IDAzMTUgMDA2MjsKKzAwNjEgMDM2NyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzY3IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY3IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY3IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY3IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzY4IDAwNjI7MDBFMCAwNUFFIDAzNjggMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNjggMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzY4IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzY4IDAzMTUgMDA2MjsKKzAwNjEgMDM2OCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzY4IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY4IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY4IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY4IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzY5IDAwNjI7MDBFMCAwNUFFIDAzNjkgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNjkgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzY5IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzY5IDAzMTUgMDA2MjsKKzAwNjEgMDM2OSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzY5IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY5IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY5IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzY5IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzZBIDAwNjI7MDBFMCAwNUFFIDAzNkEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNkEgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzZBIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzZBIDAzMTUgMDA2MjsKKzAwNjEgMDM2QSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzZBIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZBIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZBIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZBIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzZCIDAwNjI7MDBFMCAwNUFFIDAzNkIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNkIgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzZCIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzZCIDAzMTUgMDA2MjsKKzAwNjEgMDM2QiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzZCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZCIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzZDIDAwNjI7MDBFMCAwNUFFIDAzNkMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNkMgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzZDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzZDIDAzMTUgMDA2MjsKKzAwNjEgMDM2QyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzZDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZDIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzZEIDAwNjI7MDBFMCAwNUFFIDAzNkQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNkQgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzZEIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzZEIDAzMTUgMDA2MjsKKzAwNjEgMDM2RCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzZEIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZEIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZEIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZEIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzZFIDAwNjI7MDBFMCAwNUFFIDAzNkUgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNkUgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzZFIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzZFIDAzMTUgMDA2MjsKKzAwNjEgMDM2RSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzZFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZFIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZFIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwMzZGIDAwNjI7MDBFMCAwNUFFIDAzNkYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDAzNkYgMDMxNSAwMDYyOzAwRTAgMDVBRSAwMzZGIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwMzZGIDAzMTUgMDA2MjsKKzAwNjEgMDM2RiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwMzZGIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZGIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZGIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzZGIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNDgzIDAwNjI7MDBFMCAwNUFFIDA0ODMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA0ODMgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNDgzIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNDgzIDAzMTUgMDA2MjsKKzAwNjEgMDQ4MyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNDgzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDgzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDgzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDgzIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNDg0IDAwNjI7MDBFMCAwNUFFIDA0ODQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA0ODQgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNDg0IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNDg0IDAzMTUgMDA2MjsKKzAwNjEgMDQ4NCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNDg0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg0IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNDg1IDAwNjI7MDBFMCAwNUFFIDA0ODUgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA0ODUgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNDg1IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNDg1IDAzMTUgMDA2MjsKKzAwNjEgMDQ4NSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNDg1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg1IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNDg2IDAwNjI7MDBFMCAwNUFFIDA0ODYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA0ODYgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNDg2IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNDg2IDAzMTUgMDA2MjsKKzAwNjEgMDQ4NiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNDg2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNDg2IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNTkxIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDU5MSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDU5MSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDU5MSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDU5MSAwNTlBIDAwNjI7CiswMDYxIDA1OTEgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDU5MSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDU5MSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDU5MSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDU5MSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDU5MiAwMDYyOzAwRTAgMDVBRSAwNTkyIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNTkyIDAzMTUgMDA2MjswMEUwIDA1QUUgMDU5MiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5MiAwMzE1IDAwNjI7CiswMDYxIDA1OTIgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDU5MiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5MiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5MiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5MiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDU5MyAwMDYyOzAwRTAgMDVBRSAwNTkzIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNTkzIDAzMTUgMDA2MjswMEUwIDA1QUUgMDU5MyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5MyAwMzE1IDAwNjI7CiswMDYxIDA1OTMgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDU5MyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5MyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5MyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5MyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDU5NCAwMDYyOzAwRTAgMDVBRSAwNTk0IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNTk0IDAzMTUgMDA2MjswMEUwIDA1QUUgMDU5NCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5NCAwMzE1IDAwNjI7CiswMDYxIDA1OTQgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDU5NCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5NCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5NCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5NCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDU5NSAwMDYyOzAwRTAgMDVBRSAwNTk1IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNTk1IDAzMTUgMDA2MjswMEUwIDA1QUUgMDU5NSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5NSAwMzE1IDAwNjI7CiswMDYxIDA1OTUgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDU5NSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5NSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5NSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5NSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDU5NiAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1OTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1OTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1OTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1OTYgMDU5QSAwMDYyOworMDA2MSAwNTk2IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA1OTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1OTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1OTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1OTYgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA1OTcgMDA2MjswMEUwIDA1QUUgMDU5NyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5NyAwMzE1IDAwNjI7MDBFMCAwNUFFIDA1OTcgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA1OTcgMDMxNSAwMDYyOworMDA2MSAwNTk3IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA1OTcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTcgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA1OTggMDA2MjswMEUwIDA1QUUgMDU5OCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5OCAwMzE1IDAwNjI7MDBFMCAwNUFFIDA1OTggMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA1OTggMDMxNSAwMDYyOworMDA2MSAwNTk4IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA1OTggMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTggMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTggMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTggMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA1OTkgMDA2MjswMEUwIDA1QUUgMDU5OSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5OSAwMzE1IDAwNjI7MDBFMCAwNUFFIDA1OTkgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA1OTkgMDMxNSAwMDYyOworMDA2MSAwNTk5IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA1OTkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1OTkgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDMwMkUgMDU5QSAwMzE2IDA1OUEgMDA2MjswMDYxIDAzMTYgMDU5QSAwNTlBIDMwMkUgMDA2MjswMDYxIDAzMTYgMDU5QSAwNTlBIDMwMkUgMDA2MjswMDYxIDAzMTYgMDU5QSAwNTlBIDMwMkUgMDA2MjswMDYxIDAzMTYgMDU5QSAwNTlBIDMwMkUgMDA2MjsKKzAwNjEgMDU5QSAzMDJFIDA1OUEgMDMxNiAwMDYyOzAwNjEgMDMxNiAwNTlBIDA1OUEgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDA1OUEgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDA1OUEgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDA1OUEgMzAyRSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNTlCIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDU5QiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDU5QiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDU5QiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDU5QiAwNTlBIDAwNjI7CiswMDYxIDA1OUIgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDU5QiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDU5QiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDU5QiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDU5QiAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDU5QyAwMDYyOzAwRTAgMDVBRSAwNTlDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNTlDIDAzMTUgMDA2MjswMEUwIDA1QUUgMDU5QyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5QyAwMzE1IDAwNjI7CiswMDYxIDA1OUMgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDU5QyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5QyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5QyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5QyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDU5RCAwMDYyOzAwRTAgMDVBRSAwNTlEIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNTlEIDAzMTUgMDA2MjswMEUwIDA1QUUgMDU5RCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5RCAwMzE1IDAwNjI7CiswMDYxIDA1OUQgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDU5RCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDU5RSAwMDYyOzAwRTAgMDVBRSAwNTlFIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNTlFIDAzMTUgMDA2MjswMEUwIDA1QUUgMDU5RSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5RSAwMzE1IDAwNjI7CiswMDYxIDA1OUUgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDU5RSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDU5RiAwMDYyOzAwRTAgMDVBRSAwNTlGIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNTlGIDAzMTUgMDA2MjswMEUwIDA1QUUgMDU5RiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDU5RiAwMzE1IDAwNjI7CiswMDYxIDA1OUYgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDU5RiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDU5RiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDVBMCAwMDYyOzAwRTAgMDVBRSAwNUEwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNUEwIDAzMTUgMDA2MjswMEUwIDA1QUUgMDVBMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDVBMCAwMzE1IDAwNjI7CiswMDYxIDA1QTAgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDVBMCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBMCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBMCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBMCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDVBMSAwMDYyOzAwRTAgMDVBRSAwNUExIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNUExIDAzMTUgMDA2MjswMEUwIDA1QUUgMDVBMSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDVBMSAwMzE1IDAwNjI7CiswMDYxIDA1QTEgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDVBMSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBMSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBMSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBMSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDVBMyAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1QTMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1QTMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1QTMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1QTMgMDU5QSAwMDYyOworMDA2MSAwNUEzIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA1QTMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1QTMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1QTMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1QTMgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDA1QTQgMDA2MjswMDYxIDMwMkEgMDMxNiAwNUE0IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNUE0IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNUE0IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNUE0IDA1OUEgMDA2MjsKKzAwNjEgMDVBNCAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwNUE0IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNUE0IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNUE0IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNUE0IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNUE1IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDVBNSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDVBNSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDVBNSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDVBNSAwNTlBIDAwNjI7CiswMDYxIDA1QTUgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDVBNSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDVBNSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDVBNSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDVBNSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDVBNiAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1QTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1QTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1QTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA1QTYgMDU5QSAwMDYyOworMDA2MSAwNUE2IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA1QTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1QTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1QTYgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA1QTYgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDA1QTcgMDA2MjswMDYxIDMwMkEgMDMxNiAwNUE3IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNUE3IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNUE3IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNUE3IDA1OUEgMDA2MjsKKzAwNjEgMDVBNyAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwNUE3IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNUE3IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNUE3IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNUE3IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNUE4IDAwNjI7MDBFMCAwNUFFIDA1QTggMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA1QTggMDMxNSAwMDYyOzAwRTAgMDVBRSAwNUE4IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNUE4IDAzMTUgMDA2MjsKKzAwNjEgMDVBOCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNUE4IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUE4IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUE4IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUE4IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNUE5IDAwNjI7MDBFMCAwNUFFIDA1QTkgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA1QTkgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNUE5IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNUE5IDAzMTUgMDA2MjsKKzAwNjEgMDVBOSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNUE5IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUE5IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUE5IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUE5IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNUFBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDVBQSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDVBQSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDVBQSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDVBQSAwNTlBIDAwNjI7CiswMDYxIDA1QUEgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDVBQSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDVBQSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDVBQSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDVBQSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDVBQiAwMDYyOzAwRTAgMDVBRSAwNUFCIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNUFCIDAzMTUgMDA2MjswMEUwIDA1QUUgMDVBQiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDVBQiAwMzE1IDAwNjI7CiswMDYxIDA1QUIgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDVBQiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBQiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBQiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBQiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDVBQyAwMDYyOzAwRTAgMDVBRSAwNUFDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNUFDIDAzMTUgMDA2MjswMEUwIDA1QUUgMDVBQyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDVBQyAwMzE1IDAwNjI7CiswMDYxIDA1QUMgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDVBQyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBQyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBQyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDVBQyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMzAyRSAwNTlBIDAzMTYgMDVBRCAwMDYyOzAwNjEgMDMxNiAwNTlBIDA1QUQgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDA1QUQgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDA1QUQgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDA1QUQgMzAyRSAwMDYyOworMDA2MSAwNUFEIDMwMkUgMDU5QSAwMzE2IDAwNjI7MDA2MSAwMzE2IDA1QUQgMDU5QSAzMDJFIDAwNjI7MDA2MSAwMzE2IDA1QUQgMDU5QSAzMDJFIDAwNjI7MDA2MSAwMzE2IDA1QUQgMDU5QSAzMDJFIDAwNjI7MDA2MSAwMzE2IDA1QUQgMDU5QSAzMDJFIDAwNjI7CiswMDYxIDAzMDAgMDVBRSAxRDE2RCAwNUFFIDAwNjI7MDBFMCAxRDE2RCAwNUFFIDA1QUUgMDA2MjswMDYxIDFEMTZEIDA1QUUgMDVBRSAwMzAwIDAwNjI7MDBFMCAxRDE2RCAwNUFFIDA1QUUgMDA2MjswMDYxIDFEMTZEIDA1QUUgMDVBRSAwMzAwIDAwNjI7CiswMDYxIDA1QUUgMDMwMCAwNUFFIDFEMTZEIDAwNjI7MDBFMCAxRDE2RCAwNUFFIDA1QUUgMDA2MjswMDYxIDFEMTZEIDA1QUUgMDVBRSAwMzAwIDAwNjI7MDBFMCAxRDE2RCAwNUFFIDA1QUUgMDA2MjswMDYxIDFEMTZEIDA1QUUgMDVBRSAwMzAwIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA1QUYgMDA2MjswMEUwIDA1QUUgMDVBRiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDVBRiAwMzE1IDAwNjI7MDBFMCAwNUFFIDA1QUYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA1QUYgMDMxNSAwMDYyOworMDA2MSAwNUFGIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA1QUYgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1QUYgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1QUYgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA1QUYgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA1QjEgMDVCMCAwOTREIDA1QjAgMDA2MjswMDYxIDA5NEQgMDVCMCAwNUIwIDA1QjEgMDA2MjswMDYxIDA5NEQgMDVCMCAwNUIwIDA1QjEgMDA2MjswMDYxIDA5NEQgMDVCMCAwNUIwIDA1QjEgMDA2MjswMDYxIDA5NEQgMDVCMCAwNUIwIDA1QjEgMDA2MjsKKzAwNjEgMDVCMCAwNUIxIDA1QjAgMDk0RCAwMDYyOzAwNjEgMDk0RCAwNUIwIDA1QjAgMDVCMSAwMDYyOzAwNjEgMDk0RCAwNUIwIDA1QjAgMDVCMSAwMDYyOzAwNjEgMDk0RCAwNUIwIDA1QjAgMDVCMSAwMDYyOzAwNjEgMDk0RCAwNUIwIDA1QjAgMDVCMSAwMDYyOworMDA2MSAwNUIyIDA1QjEgMDVCMCAwNUIxIDAwNjI7MDA2MSAwNUIwIDA1QjEgMDVCMSAwNUIyIDAwNjI7MDA2MSAwNUIwIDA1QjEgMDVCMSAwNUIyIDAwNjI7MDA2MSAwNUIwIDA1QjEgMDVCMSAwNUIyIDAwNjI7MDA2MSAwNUIwIDA1QjEgMDVCMSAwNUIyIDAwNjI7CiswMDYxIDA1QjEgMDVCMiAwNUIxIDA1QjAgMDA2MjswMDYxIDA1QjAgMDVCMSAwNUIxIDA1QjIgMDA2MjswMDYxIDA1QjAgMDVCMSAwNUIxIDA1QjIgMDA2MjswMDYxIDA1QjAgMDVCMSAwNUIxIDA1QjIgMDA2MjswMDYxIDA1QjAgMDVCMSAwNUIxIDA1QjIgMDA2MjsKKzAwNjEgMDVCMyAwNUIyIDA1QjEgMDVCMiAwMDYyOzAwNjEgMDVCMSAwNUIyIDA1QjIgMDVCMyAwMDYyOzAwNjEgMDVCMSAwNUIyIDA1QjIgMDVCMyAwMDYyOzAwNjEgMDVCMSAwNUIyIDA1QjIgMDVCMyAwMDYyOzAwNjEgMDVCMSAwNUIyIDA1QjIgMDVCMyAwMDYyOworMDA2MSAwNUIyIDA1QjMgMDVCMiAwNUIxIDAwNjI7MDA2MSAwNUIxIDA1QjIgMDVCMiAwNUIzIDAwNjI7MDA2MSAwNUIxIDA1QjIgMDVCMiAwNUIzIDAwNjI7MDA2MSAwNUIxIDA1QjIgMDVCMiAwNUIzIDAwNjI7MDA2MSAwNUIxIDA1QjIgMDVCMiAwNUIzIDAwNjI7CiswMDYxIDA1QjQgMDVCMyAwNUIyIDA1QjMgMDA2MjswMDYxIDA1QjIgMDVCMyAwNUIzIDA1QjQgMDA2MjswMDYxIDA1QjIgMDVCMyAwNUIzIDA1QjQgMDA2MjswMDYxIDA1QjIgMDVCMyAwNUIzIDA1QjQgMDA2MjswMDYxIDA1QjIgMDVCMyAwNUIzIDA1QjQgMDA2MjsKKzAwNjEgMDVCMyAwNUI0IDA1QjMgMDVCMiAwMDYyOzAwNjEgMDVCMiAwNUIzIDA1QjMgMDVCNCAwMDYyOzAwNjEgMDVCMiAwNUIzIDA1QjMgMDVCNCAwMDYyOzAwNjEgMDVCMiAwNUIzIDA1QjMgMDVCNCAwMDYyOzAwNjEgMDVCMiAwNUIzIDA1QjMgMDVCNCAwMDYyOworMDA2MSAwNUI1IDA1QjQgMDVCMyAwNUI0IDAwNjI7MDA2MSAwNUIzIDA1QjQgMDVCNCAwNUI1IDAwNjI7MDA2MSAwNUIzIDA1QjQgMDVCNCAwNUI1IDAwNjI7MDA2MSAwNUIzIDA1QjQgMDVCNCAwNUI1IDAwNjI7MDA2MSAwNUIzIDA1QjQgMDVCNCAwNUI1IDAwNjI7CiswMDYxIDA1QjQgMDVCNSAwNUI0IDA1QjMgMDA2MjswMDYxIDA1QjMgMDVCNCAwNUI0IDA1QjUgMDA2MjswMDYxIDA1QjMgMDVCNCAwNUI0IDA1QjUgMDA2MjswMDYxIDA1QjMgMDVCNCAwNUI0IDA1QjUgMDA2MjswMDYxIDA1QjMgMDVCNCAwNUI0IDA1QjUgMDA2MjsKKzAwNjEgMDVCNiAwNUI1IDA1QjQgMDVCNSAwMDYyOzAwNjEgMDVCNCAwNUI1IDA1QjUgMDVCNiAwMDYyOzAwNjEgMDVCNCAwNUI1IDA1QjUgMDVCNiAwMDYyOzAwNjEgMDVCNCAwNUI1IDA1QjUgMDVCNiAwMDYyOzAwNjEgMDVCNCAwNUI1IDA1QjUgMDVCNiAwMDYyOworMDA2MSAwNUI1IDA1QjYgMDVCNSAwNUI0IDAwNjI7MDA2MSAwNUI0IDA1QjUgMDVCNSAwNUI2IDAwNjI7MDA2MSAwNUI0IDA1QjUgMDVCNSAwNUI2IDAwNjI7MDA2MSAwNUI0IDA1QjUgMDVCNSAwNUI2IDAwNjI7MDA2MSAwNUI0IDA1QjUgMDVCNSAwNUI2IDAwNjI7CiswMDYxIDA1QjcgMDVCNiAwNUI1IDA1QjYgMDA2MjswMDYxIDA1QjUgMDVCNiAwNUI2IDA1QjcgMDA2MjswMDYxIDA1QjUgMDVCNiAwNUI2IDA1QjcgMDA2MjswMDYxIDA1QjUgMDVCNiAwNUI2IDA1QjcgMDA2MjswMDYxIDA1QjUgMDVCNiAwNUI2IDA1QjcgMDA2MjsKKzAwNjEgMDVCNiAwNUI3IDA1QjYgMDVCNSAwMDYyOzAwNjEgMDVCNSAwNUI2IDA1QjYgMDVCNyAwMDYyOzAwNjEgMDVCNSAwNUI2IDA1QjYgMDVCNyAwMDYyOzAwNjEgMDVCNSAwNUI2IDA1QjYgMDVCNyAwMDYyOzAwNjEgMDVCNSAwNUI2IDA1QjYgMDVCNyAwMDYyOworMDA2MSAwNUI4IDA1QjcgMDVCNiAwNUI3IDAwNjI7MDA2MSAwNUI2IDA1QjcgMDVCNyAwNUI4IDAwNjI7MDA2MSAwNUI2IDA1QjcgMDVCNyAwNUI4IDAwNjI7MDA2MSAwNUI2IDA1QjcgMDVCNyAwNUI4IDAwNjI7MDA2MSAwNUI2IDA1QjcgMDVCNyAwNUI4IDAwNjI7CiswMDYxIDA1QjcgMDVCOCAwNUI3IDA1QjYgMDA2MjswMDYxIDA1QjYgMDVCNyAwNUI3IDA1QjggMDA2MjswMDYxIDA1QjYgMDVCNyAwNUI3IDA1QjggMDA2MjswMDYxIDA1QjYgMDVCNyAwNUI3IDA1QjggMDA2MjswMDYxIDA1QjYgMDVCNyAwNUI3IDA1QjggMDA2MjsKKzAwNjEgMDVCOSAwNUI4IDA1QjcgMDVCOCAwMDYyOzAwNjEgMDVCNyAwNUI4IDA1QjggMDVCOSAwMDYyOzAwNjEgMDVCNyAwNUI4IDA1QjggMDVCOSAwMDYyOzAwNjEgMDVCNyAwNUI4IDA1QjggMDVCOSAwMDYyOzAwNjEgMDVCNyAwNUI4IDA1QjggMDVCOSAwMDYyOworMDA2MSAwNUI4IDA1QjkgMDVCOCAwNUI3IDAwNjI7MDA2MSAwNUI3IDA1QjggMDVCOCAwNUI5IDAwNjI7MDA2MSAwNUI3IDA1QjggMDVCOCAwNUI5IDAwNjI7MDA2MSAwNUI3IDA1QjggMDVCOCAwNUI5IDAwNjI7MDA2MSAwNUI3IDA1QjggMDVCOCAwNUI5IDAwNjI7CiswMDYxIDA1QkIgMDVCOSAwNUI4IDA1QjkgMDA2MjswMDYxIDA1QjggMDVCOSAwNUI5IDA1QkIgMDA2MjswMDYxIDA1QjggMDVCOSAwNUI5IDA1QkIgMDA2MjswMDYxIDA1QjggMDVCOSAwNUI5IDA1QkIgMDA2MjswMDYxIDA1QjggMDVCOSAwNUI5IDA1QkIgMDA2MjsKKzAwNjEgMDVCOSAwNUJCIDA1QjkgMDVCOCAwMDYyOzAwNjEgMDVCOCAwNUI5IDA1QjkgMDVCQiAwMDYyOzAwNjEgMDVCOCAwNUI5IDA1QjkgMDVCQiAwMDYyOzAwNjEgMDVCOCAwNUI5IDA1QjkgMDVCQiAwMDYyOzAwNjEgMDVCOCAwNUI5IDA1QjkgMDVCQiAwMDYyOworMDA2MSAwNUJDIDA1QkIgMDVCOSAwNUJCIDAwNjI7MDA2MSAwNUI5IDA1QkIgMDVCQiAwNUJDIDAwNjI7MDA2MSAwNUI5IDA1QkIgMDVCQiAwNUJDIDAwNjI7MDA2MSAwNUI5IDA1QkIgMDVCQiAwNUJDIDAwNjI7MDA2MSAwNUI5IDA1QkIgMDVCQiAwNUJDIDAwNjI7CiswMDYxIDA1QkIgMDVCQyAwNUJCIDA1QjkgMDA2MjswMDYxIDA1QjkgMDVCQiAwNUJCIDA1QkMgMDA2MjswMDYxIDA1QjkgMDVCQiAwNUJCIDA1QkMgMDA2MjswMDYxIDA1QjkgMDVCQiAwNUJCIDA1QkMgMDA2MjswMDYxIDA1QjkgMDVCQiAwNUJCIDA1QkMgMDA2MjsKKzAwNjEgMDVCRCAwNUJDIDA1QkIgMDVCQyAwMDYyOzAwNjEgMDVCQiAwNUJDIDA1QkMgMDVCRCAwMDYyOzAwNjEgMDVCQiAwNUJDIDA1QkMgMDVCRCAwMDYyOzAwNjEgMDVCQiAwNUJDIDA1QkMgMDVCRCAwMDYyOzAwNjEgMDVCQiAwNUJDIDA1QkMgMDVCRCAwMDYyOworMDA2MSAwNUJDIDA1QkQgMDVCQyAwNUJCIDAwNjI7MDA2MSAwNUJCIDA1QkMgMDVCQyAwNUJEIDAwNjI7MDA2MSAwNUJCIDA1QkMgMDVCQyAwNUJEIDAwNjI7MDA2MSAwNUJCIDA1QkMgMDVCQyAwNUJEIDAwNjI7MDA2MSAwNUJCIDA1QkMgMDVCQyAwNUJEIDAwNjI7CiswMDYxIDA1QkYgMDVCRCAwNUJDIDA1QkQgMDA2MjswMDYxIDA1QkMgMDVCRCAwNUJEIDA1QkYgMDA2MjswMDYxIDA1QkMgMDVCRCAwNUJEIDA1QkYgMDA2MjswMDYxIDA1QkMgMDVCRCAwNUJEIDA1QkYgMDA2MjswMDYxIDA1QkMgMDVCRCAwNUJEIDA1QkYgMDA2MjsKKzAwNjEgMDVCRCAwNUJGIDA1QkQgMDVCQyAwMDYyOzAwNjEgMDVCQyAwNUJEIDA1QkQgMDVCRiAwMDYyOzAwNjEgMDVCQyAwNUJEIDA1QkQgMDVCRiAwMDYyOzAwNjEgMDVCQyAwNUJEIDA1QkQgMDVCRiAwMDYyOzAwNjEgMDVCQyAwNUJEIDA1QkQgMDVCRiAwMDYyOworMDA2MSAwNUMxIDA1QkYgMDVCRCAwNUJGIDAwNjI7MDA2MSAwNUJEIDA1QkYgMDVCRiAwNUMxIDAwNjI7MDA2MSAwNUJEIDA1QkYgMDVCRiAwNUMxIDAwNjI7MDA2MSAwNUJEIDA1QkYgMDVCRiAwNUMxIDAwNjI7MDA2MSAwNUJEIDA1QkYgMDVCRiAwNUMxIDAwNjI7CiswMDYxIDA1QkYgMDVDMSAwNUJGIDA1QkQgMDA2MjswMDYxIDA1QkQgMDVCRiAwNUJGIDA1QzEgMDA2MjswMDYxIDA1QkQgMDVCRiAwNUJGIDA1QzEgMDA2MjswMDYxIDA1QkQgMDVCRiAwNUJGIDA1QzEgMDA2MjswMDYxIDA1QkQgMDVCRiAwNUJGIDA1QzEgMDA2MjsKKzAwNjEgMDVDMiAwNUMxIDA1QkYgMDVDMSAwMDYyOzAwNjEgMDVCRiAwNUMxIDA1QzEgMDVDMiAwMDYyOzAwNjEgMDVCRiAwNUMxIDA1QzEgMDVDMiAwMDYyOzAwNjEgMDVCRiAwNUMxIDA1QzEgMDVDMiAwMDYyOzAwNjEgMDVCRiAwNUMxIDA1QzEgMDVDMiAwMDYyOworMDA2MSAwNUMxIDA1QzIgMDVDMSAwNUJGIDAwNjI7MDA2MSAwNUJGIDA1QzEgMDVDMSAwNUMyIDAwNjI7MDA2MSAwNUJGIDA1QzEgMDVDMSAwNUMyIDAwNjI7MDA2MSAwNUJGIDA1QzEgMDVDMSAwNUMyIDAwNjI7MDA2MSAwNUJGIDA1QzEgMDVDMSAwNUMyIDAwNjI7CiswMDYxIEZCMUUgMDVDMiAwNUMxIDA1QzIgMDA2MjswMDYxIDA1QzEgMDVDMiAwNUMyIEZCMUUgMDA2MjswMDYxIDA1QzEgMDVDMiAwNUMyIEZCMUUgMDA2MjswMDYxIDA1QzEgMDVDMiAwNUMyIEZCMUUgMDA2MjswMDYxIDA1QzEgMDVDMiAwNUMyIEZCMUUgMDA2MjsKKzAwNjEgMDVDMiBGQjFFIDA1QzIgMDVDMSAwMDYyOzAwNjEgMDVDMSAwNUMyIDA1QzIgRkIxRSAwMDYyOzAwNjEgMDVDMSAwNUMyIDA1QzIgRkIxRSAwMDYyOzAwNjEgMDVDMSAwNUMyIDA1QzIgRkIxRSAwMDYyOzAwNjEgMDVDMSAwNUMyIDA1QzIgRkIxRSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNUM0IDAwNjI7MDBFMCAwNUFFIDA1QzQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA1QzQgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNUM0IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNUM0IDAzMTUgMDA2MjsKKzAwNjEgMDVDNCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNUM0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUM0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUM0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNUM0IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwNjRDIDA2NEIgRkIxRSAwNjRCIDAwNjI7MDA2MSBGQjFFIDA2NEIgMDY0QiAwNjRDIDAwNjI7MDA2MSBGQjFFIDA2NEIgMDY0QiAwNjRDIDAwNjI7MDA2MSBGQjFFIDA2NEIgMDY0QiAwNjRDIDAwNjI7MDA2MSBGQjFFIDA2NEIgMDY0QiAwNjRDIDAwNjI7CiswMDYxIDA2NEIgMDY0QyAwNjRCIEZCMUUgMDA2MjswMDYxIEZCMUUgMDY0QiAwNjRCIDA2NEMgMDA2MjswMDYxIEZCMUUgMDY0QiAwNjRCIDA2NEMgMDA2MjswMDYxIEZCMUUgMDY0QiAwNjRCIDA2NEMgMDA2MjswMDYxIEZCMUUgMDY0QiAwNjRCIDA2NEMgMDA2MjsKKzAwNjEgMDY0RCAwNjRDIDA2NEIgMDY0QyAwMDYyOzAwNjEgMDY0QiAwNjRDIDA2NEMgMDY0RCAwMDYyOzAwNjEgMDY0QiAwNjRDIDA2NEMgMDY0RCAwMDYyOzAwNjEgMDY0QiAwNjRDIDA2NEMgMDY0RCAwMDYyOzAwNjEgMDY0QiAwNjRDIDA2NEMgMDY0RCAwMDYyOworMDA2MSAwNjRDIDA2NEQgMDY0QyAwNjRCIDAwNjI7MDA2MSAwNjRCIDA2NEMgMDY0QyAwNjREIDAwNjI7MDA2MSAwNjRCIDA2NEMgMDY0QyAwNjREIDAwNjI7MDA2MSAwNjRCIDA2NEMgMDY0QyAwNjREIDAwNjI7MDA2MSAwNjRCIDA2NEMgMDY0QyAwNjREIDAwNjI7CiswMDYxIDA2NEUgMDY0RCAwNjRDIDA2NEQgMDA2MjswMDYxIDA2NEMgMDY0RCAwNjREIDA2NEUgMDA2MjswMDYxIDA2NEMgMDY0RCAwNjREIDA2NEUgMDA2MjswMDYxIDA2NEMgMDY0RCAwNjREIDA2NEUgMDA2MjswMDYxIDA2NEMgMDY0RCAwNjREIDA2NEUgMDA2MjsKKzAwNjEgMDY0RCAwNjRFIDA2NEQgMDY0QyAwMDYyOzAwNjEgMDY0QyAwNjREIDA2NEQgMDY0RSAwMDYyOzAwNjEgMDY0QyAwNjREIDA2NEQgMDY0RSAwMDYyOzAwNjEgMDY0QyAwNjREIDA2NEQgMDY0RSAwMDYyOzAwNjEgMDY0QyAwNjREIDA2NEQgMDY0RSAwMDYyOworMDA2MSAwNjRGIDA2NEUgMDY0RCAwNjRFIDAwNjI7MDA2MSAwNjREIDA2NEUgMDY0RSAwNjRGIDAwNjI7MDA2MSAwNjREIDA2NEUgMDY0RSAwNjRGIDAwNjI7MDA2MSAwNjREIDA2NEUgMDY0RSAwNjRGIDAwNjI7MDA2MSAwNjREIDA2NEUgMDY0RSAwNjRGIDAwNjI7CiswMDYxIDA2NEUgMDY0RiAwNjRFIDA2NEQgMDA2MjswMDYxIDA2NEQgMDY0RSAwNjRFIDA2NEYgMDA2MjswMDYxIDA2NEQgMDY0RSAwNjRFIDA2NEYgMDA2MjswMDYxIDA2NEQgMDY0RSAwNjRFIDA2NEYgMDA2MjswMDYxIDA2NEQgMDY0RSAwNjRFIDA2NEYgMDA2MjsKKzAwNjEgMDY1MCAwNjRGIDA2NEUgMDY0RiAwMDYyOzAwNjEgMDY0RSAwNjRGIDA2NEYgMDY1MCAwMDYyOzAwNjEgMDY0RSAwNjRGIDA2NEYgMDY1MCAwMDYyOzAwNjEgMDY0RSAwNjRGIDA2NEYgMDY1MCAwMDYyOzAwNjEgMDY0RSAwNjRGIDA2NEYgMDY1MCAwMDYyOworMDA2MSAwNjRGIDA2NTAgMDY0RiAwNjRFIDAwNjI7MDA2MSAwNjRFIDA2NEYgMDY0RiAwNjUwIDAwNjI7MDA2MSAwNjRFIDA2NEYgMDY0RiAwNjUwIDAwNjI7MDA2MSAwNjRFIDA2NEYgMDY0RiAwNjUwIDAwNjI7MDA2MSAwNjRFIDA2NEYgMDY0RiAwNjUwIDAwNjI7CiswMDYxIDA2NTEgMDY1MCAwNjRGIDA2NTAgMDA2MjswMDYxIDA2NEYgMDY1MCAwNjUwIDA2NTEgMDA2MjswMDYxIDA2NEYgMDY1MCAwNjUwIDA2NTEgMDA2MjswMDYxIDA2NEYgMDY1MCAwNjUwIDA2NTEgMDA2MjswMDYxIDA2NEYgMDY1MCAwNjUwIDA2NTEgMDA2MjsKKzAwNjEgMDY1MCAwNjUxIDA2NTAgMDY0RiAwMDYyOzAwNjEgMDY0RiAwNjUwIDA2NTAgMDY1MSAwMDYyOzAwNjEgMDY0RiAwNjUwIDA2NTAgMDY1MSAwMDYyOzAwNjEgMDY0RiAwNjUwIDA2NTAgMDY1MSAwMDYyOzAwNjEgMDY0RiAwNjUwIDA2NTAgMDY1MSAwMDYyOworMDA2MSAwNjUyIDA2NTEgMDY1MCAwNjUxIDAwNjI7MDA2MSAwNjUwIDA2NTEgMDY1MSAwNjUyIDAwNjI7MDA2MSAwNjUwIDA2NTEgMDY1MSAwNjUyIDAwNjI7MDA2MSAwNjUwIDA2NTEgMDY1MSAwNjUyIDAwNjI7MDA2MSAwNjUwIDA2NTEgMDY1MSAwNjUyIDAwNjI7CiswMDYxIDA2NTEgMDY1MiAwNjUxIDA2NTAgMDA2MjswMDYxIDA2NTAgMDY1MSAwNjUxIDA2NTIgMDA2MjswMDYxIDA2NTAgMDY1MSAwNjUxIDA2NTIgMDA2MjswMDYxIDA2NTAgMDY1MSAwNjUxIDA2NTIgMDA2MjswMDYxIDA2NTAgMDY1MSAwNjUxIDA2NTIgMDA2MjsKKzAwNjEgMDY3MCAwNjUyIDA2NTEgMDY1MiAwMDYyOzAwNjEgMDY1MSAwNjUyIDA2NTIgMDY3MCAwMDYyOzAwNjEgMDY1MSAwNjUyIDA2NTIgMDY3MCAwMDYyOzAwNjEgMDY1MSAwNjUyIDA2NTIgMDY3MCAwMDYyOzAwNjEgMDY1MSAwNjUyIDA2NTIgMDY3MCAwMDYyOworMDA2MSAwNjUyIDA2NzAgMDY1MiAwNjUxIDAwNjI7MDA2MSAwNjUxIDA2NTIgMDY1MiAwNjcwIDAwNjI7MDA2MSAwNjUxIDA2NTIgMDY1MiAwNjcwIDAwNjI7MDA2MSAwNjUxIDA2NTIgMDY1MiAwNjcwIDAwNjI7MDA2MSAwNjUxIDA2NTIgMDY1MiAwNjcwIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA2NTMgMDA2MjswMEUwIDA1QUUgMDY1MyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDY1MyAwMzE1IDAwNjI7MDBFMCAwNUFFIDA2NTMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA2NTMgMDMxNSAwMDYyOworMDA2MSAwNjUzIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA2NTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2NTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2NTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2NTMgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA2NTQgMDA2MjswMEUwIDA1QUUgMDY1NCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDY1NCAwMzE1IDAwNjI7MDBFMCAwNUFFIDA2NTQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA2NTQgMDMxNSAwMDYyOworMDA2MSAwNjU0IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA2NTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2NTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2NTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2NTQgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDA2NTUgMDA2MjswMDYxIDMwMkEgMDMxNiAwNjU1IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNjU1IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNjU1IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNjU1IDA1OUEgMDA2MjsKKzAwNjEgMDY1NSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwNjU1IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNjU1IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNjU1IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNjU1IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNzExIDA2NzAgMDY1MiAwNjcwIDAwNjI7MDA2MSAwNjUyIDA2NzAgMDY3MCAwNzExIDAwNjI7MDA2MSAwNjUyIDA2NzAgMDY3MCAwNzExIDAwNjI7MDA2MSAwNjUyIDA2NzAgMDY3MCAwNzExIDAwNjI7MDA2MSAwNjUyIDA2NzAgMDY3MCAwNzExIDAwNjI7CiswMDYxIDA2NzAgMDcxMSAwNjcwIDA2NTIgMDA2MjswMDYxIDA2NTIgMDY3MCAwNjcwIDA3MTEgMDA2MjswMDYxIDA2NTIgMDY3MCAwNjcwIDA3MTEgMDA2MjswMDYxIDA2NTIgMDY3MCAwNjcwIDA3MTEgMDA2MjswMDYxIDA2NTIgMDY3MCAwNjcwIDA3MTEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZENiAwMDYyOzAwRTAgMDVBRSAwNkQ2IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkQ2IDAzMTUgMDA2MjswMEUwIDA1QUUgMDZENiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZENiAwMzE1IDAwNjI7CiswMDYxIDA2RDYgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZENiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZENiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZENiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZENiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZENyAwMDYyOzAwRTAgMDVBRSAwNkQ3IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkQ3IDAzMTUgMDA2MjswMEUwIDA1QUUgMDZENyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZENyAwMzE1IDAwNjI7CiswMDYxIDA2RDcgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZENyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZENyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZENyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZENyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZEOCAwMDYyOzAwRTAgMDVBRSAwNkQ4IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkQ4IDAzMTUgMDA2MjswMEUwIDA1QUUgMDZEOCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZEOCAwMzE1IDAwNjI7CiswMDYxIDA2RDggMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZEOCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEOCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEOCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEOCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZEOSAwMDYyOzAwRTAgMDVBRSAwNkQ5IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkQ5IDAzMTUgMDA2MjswMEUwIDA1QUUgMDZEOSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZEOSAwMzE1IDAwNjI7CiswMDYxIDA2RDkgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZEOSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEOSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEOSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEOSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZEQSAwMDYyOzAwRTAgMDVBRSAwNkRBIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkRBIDAzMTUgMDA2MjswMEUwIDA1QUUgMDZEQSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZEQSAwMzE1IDAwNjI7CiswMDYxIDA2REEgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZEQSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZEQiAwMDYyOzAwRTAgMDVBRSAwNkRCIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkRCIDAzMTUgMDA2MjswMEUwIDA1QUUgMDZEQiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZEQiAwMzE1IDAwNjI7CiswMDYxIDA2REIgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZEQiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZEQyAwMDYyOzAwRTAgMDVBRSAwNkRDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkRDIDAzMTUgMDA2MjswMEUwIDA1QUUgMDZEQyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZEQyAwMzE1IDAwNjI7CiswMDYxIDA2REMgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZEQyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZEQyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZERiAwMDYyOzAwRTAgMDVBRSAwNkRGIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkRGIDAzMTUgMDA2MjswMEUwIDA1QUUgMDZERiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZERiAwMzE1IDAwNjI7CiswMDYxIDA2REYgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZERiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZERiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZERiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZERiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZFMCAwMDYyOzAwRTAgMDVBRSAwNkUwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkUwIDAzMTUgMDA2MjswMEUwIDA1QUUgMDZFMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZFMCAwMzE1IDAwNjI7CiswMDYxIDA2RTAgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZFMCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZFMSAwMDYyOzAwRTAgMDVBRSAwNkUxIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkUxIDAzMTUgMDA2MjswMEUwIDA1QUUgMDZFMSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZFMSAwMzE1IDAwNjI7CiswMDYxIDA2RTEgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZFMSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDZFMiAwMDYyOzAwRTAgMDVBRSAwNkUyIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkUyIDAzMTUgMDA2MjswMEUwIDA1QUUgMDZFMiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZFMiAwMzE1IDAwNjI7CiswMDYxIDA2RTIgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDZFMiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDZFMiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDZFMyAwMDYyOzAwNjEgMzAyQSAwMzE2IDA2RTMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA2RTMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA2RTMgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA2RTMgMDU5QSAwMDYyOworMDA2MSAwNkUzIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA2RTMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA2RTMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA2RTMgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA2RTMgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA2RTQgMDA2MjswMEUwIDA1QUUgMDZFNCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZFNCAwMzE1IDAwNjI7MDBFMCAwNUFFIDA2RTQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA2RTQgMDMxNSAwMDYyOworMDA2MSAwNkU0IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA2RTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTQgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA2RTcgMDA2MjswMEUwIDA1QUUgMDZFNyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZFNyAwMzE1IDAwNjI7MDBFMCAwNUFFIDA2RTcgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA2RTcgMDMxNSAwMDYyOworMDA2MSAwNkU3IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA2RTcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTcgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA2RTggMDA2MjswMEUwIDA1QUUgMDZFOCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDZFOCAwMzE1IDAwNjI7MDBFMCAwNUFFIDA2RTggMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA2RTggMDMxNSAwMDYyOworMDA2MSAwNkU4IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA2RTggMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTggMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTggMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA2RTggMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDA2RUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNkVBIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNkVBIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNkVBIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNkVBIDA1OUEgMDA2MjsKKzAwNjEgMDZFQSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwNkVBIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNkVBIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNkVBIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNkVBIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNkVCIDAwNjI7MDBFMCAwNUFFIDA2RUIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA2RUIgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNkVCIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkVCIDAzMTUgMDA2MjsKKzAwNjEgMDZFQiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNkVCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNkVCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNkVCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNkVCIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNkVDIDAwNjI7MDBFMCAwNUFFIDA2RUMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA2RUMgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNkVDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNkVDIDAzMTUgMDA2MjsKKzAwNjEgMDZFQyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNkVDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNkVDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNkVDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNkVDIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNkVEIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDZFRCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDZFRCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDZFRCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDZFRCAwNTlBIDAwNjI7CiswMDYxIDA2RUQgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDZFRCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDZFRCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDZFRCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDZFRCAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMEM1NSAwNzExIDA2NzAgMDcxMSAwMDYyOzAwNjEgMDY3MCAwNzExIDA3MTEgMEM1NSAwMDYyOzAwNjEgMDY3MCAwNzExIDA3MTEgMEM1NSAwMDYyOzAwNjEgMDY3MCAwNzExIDA3MTEgMEM1NSAwMDYyOzAwNjEgMDY3MCAwNzExIDA3MTEgMEM1NSAwMDYyOworMDA2MSAwNzExIDBDNTUgMDcxMSAwNjcwIDAwNjI7MDA2MSAwNjcwIDA3MTEgMDcxMSAwQzU1IDAwNjI7MDA2MSAwNjcwIDA3MTEgMDcxMSAwQzU1IDAwNjI7MDA2MSAwNjcwIDA3MTEgMDcxMSAwQzU1IDAwNjI7MDA2MSAwNjcwIDA3MTEgMDcxMSAwQzU1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA3MzAgMDA2MjswMEUwIDA1QUUgMDczMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDczMCAwMzE1IDAwNjI7MDBFMCAwNUFFIDA3MzAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA3MzAgMDMxNSAwMDYyOworMDA2MSAwNzMwIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA3MzAgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3MzAgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3MzAgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3MzAgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDA3MzEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzMxIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzMxIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzMxIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzMxIDA1OUEgMDA2MjsKKzAwNjEgMDczMSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwNzMxIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzMxIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzMxIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzMxIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNzMyIDAwNjI7MDBFMCAwNUFFIDA3MzIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA3MzIgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNzMyIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzMyIDAzMTUgMDA2MjsKKzAwNjEgMDczMiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNzMyIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzMyIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzMyIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzMyIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNzMzIDAwNjI7MDBFMCAwNUFFIDA3MzMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA3MzMgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNzMzIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzMzIDAzMTUgMDA2MjsKKzAwNjEgMDczMyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNzMzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzMzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzMzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzMzIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNzM0IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczNCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczNCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczNCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczNCAwNTlBIDAwNjI7CiswMDYxIDA3MzQgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDczNCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczNCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczNCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczNCAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDczNSAwMDYyOzAwRTAgMDVBRSAwNzM1IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzM1IDAzMTUgMDA2MjswMEUwIDA1QUUgMDczNSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDczNSAwMzE1IDAwNjI7CiswMDYxIDA3MzUgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDczNSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczNSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczNSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczNSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDczNiAwMDYyOzAwRTAgMDVBRSAwNzM2IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzM2IDAzMTUgMDA2MjswMEUwIDA1QUUgMDczNiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDczNiAwMzE1IDAwNjI7CiswMDYxIDA3MzYgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDczNiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczNiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczNiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczNiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDczNyAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3MzcgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3MzcgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3MzcgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3MzcgMDU5QSAwMDYyOworMDA2MSAwNzM3IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA3MzcgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3MzcgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3MzcgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3MzcgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDA3MzggMDA2MjswMDYxIDMwMkEgMDMxNiAwNzM4IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzM4IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzM4IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzM4IDA1OUEgMDA2MjsKKzAwNjEgMDczOCAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwNzM4IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzM4IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzM4IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzM4IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNzM5IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczOSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczOSAwNTlBIDAwNjI7CiswMDYxIDA3MzkgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDczOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczOSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczOSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDczQSAwMDYyOzAwRTAgMDVBRSAwNzNBIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzNBIDAzMTUgMDA2MjswMEUwIDA1QUUgMDczQSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDczQSAwMzE1IDAwNjI7CiswMDYxIDA3M0EgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDczQSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczQSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczQSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczQSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDczQiAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3M0IgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3M0IgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3M0IgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3M0IgMDU5QSAwMDYyOworMDA2MSAwNzNCIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA3M0IgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3M0IgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3M0IgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3M0IgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDA3M0MgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzNDIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzNDIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzNDIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzNDIDA1OUEgMDA2MjsKKzAwNjEgMDczQyAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwNzNDIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzNDIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzNDIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzNDIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNzNEIDAwNjI7MDBFMCAwNUFFIDA3M0QgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA3M0QgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNzNEIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzNEIDAzMTUgMDA2MjsKKzAwNjEgMDczRCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNzNEIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzNEIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzNEIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzNEIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNzNFIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczRSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczRSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczRSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDczRSAwNTlBIDAwNjI7CiswMDYxIDA3M0UgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDczRSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczRSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczRSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDczRSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDczRiAwMDYyOzAwRTAgMDVBRSAwNzNGIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzNGIDAzMTUgMDA2MjswMEUwIDA1QUUgMDczRiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDczRiAwMzE1IDAwNjI7CiswMDYxIDA3M0YgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDczRiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczRiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczRiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDczRiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDc0MCAwMDYyOzAwRTAgMDVBRSAwNzQwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzQwIDAzMTUgMDA2MjswMEUwIDA1QUUgMDc0MCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDc0MCAwMzE1IDAwNjI7CiswMDYxIDA3NDAgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDc0MCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0MCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0MCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0MCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDc0MSAwMDYyOzAwRTAgMDVBRSAwNzQxIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzQxIDAzMTUgMDA2MjswMEUwIDA1QUUgMDc0MSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDc0MSAwMzE1IDAwNjI7CiswMDYxIDA3NDEgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDc0MSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0MSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0MSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0MSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDc0MiAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3NDIgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3NDIgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3NDIgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3NDIgMDU5QSAwMDYyOworMDA2MSAwNzQyIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA3NDIgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3NDIgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3NDIgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3NDIgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA3NDMgMDA2MjswMEUwIDA1QUUgMDc0MyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDc0MyAwMzE1IDAwNjI7MDBFMCAwNUFFIDA3NDMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA3NDMgMDMxNSAwMDYyOworMDA2MSAwNzQzIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA3NDMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NDMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NDMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NDMgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDA3NDQgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzQ0IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzQ0IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzQ0IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwNzQ0IDA1OUEgMDA2MjsKKzAwNjEgMDc0NCAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwNzQ0IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzQ0IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzQ0IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwNzQ0IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAwNzQ1IDAwNjI7MDBFMCAwNUFFIDA3NDUgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA3NDUgMDMxNSAwMDYyOzAwRTAgMDVBRSAwNzQ1IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzQ1IDAzMTUgMDA2MjsKKzAwNjEgMDc0NSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAwNzQ1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzQ1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzQ1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwNzQ1IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwNzQ2IDAwNjI7MDA2MSAzMDJBIDAzMTYgMDc0NiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDc0NiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDc0NiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMDc0NiAwNTlBIDAwNjI7CiswMDYxIDA3NDYgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMDc0NiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDc0NiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDc0NiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDc0NiAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDc0NyAwMDYyOzAwRTAgMDVBRSAwNzQ3IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwNzQ3IDAzMTUgMDA2MjswMEUwIDA1QUUgMDc0NyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDc0NyAwMzE1IDAwNjI7CiswMDYxIDA3NDcgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDc0NyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0NyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0NyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDc0NyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDc0OCAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3NDggMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3NDggMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3NDggMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA3NDggMDU5QSAwMDYyOworMDA2MSAwNzQ4IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA3NDggMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3NDggMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3NDggMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA3NDggMDMxNiAwNTlBIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA3NDkgMDA2MjswMEUwIDA1QUUgMDc0OSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDc0OSAwMzE1IDAwNjI7MDBFMCAwNUFFIDA3NDkgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA3NDkgMDMxNSAwMDYyOworMDA2MSAwNzQ5IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA3NDkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NDkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NDkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NDkgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA3NEEgMDA2MjswMEUwIDA1QUUgMDc0QSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDc0QSAwMzE1IDAwNjI7MDBFMCAwNUFFIDA3NEEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA3NEEgMDMxNSAwMDYyOworMDA2MSAwNzRBIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA3NEEgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NEEgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NEEgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA3NEEgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDMwOTkgMDkzQyAwMzM0IDA5M0MgMDA2MjswMDYxIDAzMzQgMDkzQyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwOTNDIDMwOTkgMDA2MjsKKzAwNjEgMDkzQyAzMDk5IDA5M0MgMDMzNCAwMDYyOzAwNjEgMDMzNCAwOTNDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOTNDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOTNDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOTNDIDA5M0MgMzA5OSAwMDYyOworMDA2MSAwNUIwIDA5NEQgMzA5OSAwOTREIDAwNjI7MDA2MSAzMDk5IDA5NEQgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMDk0RCAwNUIwIDAwNjI7CiswMDYxIDA5NEQgMDVCMCAwOTREIDMwOTkgMDA2MjswMDYxIDMwOTkgMDk0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwOTREIDA1QjAgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMDk1MSAwMDYyOzAwRTAgMDVBRSAwOTUxIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwOTUxIDAzMTUgMDA2MjswMEUwIDA1QUUgMDk1MSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDk1MSAwMzE1IDAwNjI7CiswMDYxIDA5NTEgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMDk1MSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDk1MSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDk1MSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDk1MSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMDk1MiAwMDYyOzAwNjEgMzAyQSAwMzE2IDA5NTIgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA5NTIgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA5NTIgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDA5NTIgMDU5QSAwMDYyOworMDA2MSAwOTUyIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDA5NTIgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA5NTIgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA5NTIgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDA5NTIgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA5NTMgMDA2MjswMEUwIDA1QUUgMDk1MyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDk1MyAwMzE1IDAwNjI7MDBFMCAwNUFFIDA5NTMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA5NTMgMDMxNSAwMDYyOworMDA2MSAwOTUzIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA5NTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA5NTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA5NTMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA5NTMgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDA5NTQgMDA2MjswMEUwIDA1QUUgMDk1NCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMDk1NCAwMzE1IDAwNjI7MDBFMCAwNUFFIDA5NTQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDA5NTQgMDMxNSAwMDYyOworMDA2MSAwOTU0IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDA5NTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA5NTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA5NTQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDA5NTQgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDMwOTkgMDkzQyAwMzM0IDA5QkMgMDA2MjswMDYxIDAzMzQgMDkzQyAwOUJDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwOUJDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwOUJDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwOUJDIDMwOTkgMDA2MjsKKzAwNjEgMDlCQyAzMDk5IDA5M0MgMDMzNCAwMDYyOzAwNjEgMDMzNCAwOUJDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOUJDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOUJDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOUJDIDA5M0MgMzA5OSAwMDYyOworMDA2MSAwNUIwIDA5NEQgMzA5OSAwOUNEIDAwNjI7MDA2MSAzMDk5IDA5NEQgMDlDRCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMDlDRCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMDlDRCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMDlDRCAwNUIwIDAwNjI7CiswMDYxIDA5Q0QgMDVCMCAwOTREIDMwOTkgMDA2MjswMDYxIDMwOTkgMDlDRCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDlDRCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDlDRCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDlDRCAwOTREIDA1QjAgMDA2MjsKKzAwNjEgMzA5OSAwOTNDIDAzMzQgMEEzQyAwMDYyOzAwNjEgMDMzNCAwOTNDIDBBM0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOTNDIDBBM0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOTNDIDBBM0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwOTNDIDBBM0MgMzA5OSAwMDYyOworMDA2MSAwQTNDIDMwOTkgMDkzQyAwMzM0IDAwNjI7MDA2MSAwMzM0IDBBM0MgMDkzQyAzMDk5IDAwNjI7MDA2MSAwMzM0IDBBM0MgMDkzQyAzMDk5IDAwNjI7MDA2MSAwMzM0IDBBM0MgMDkzQyAzMDk5IDAwNjI7MDA2MSAwMzM0IDBBM0MgMDkzQyAzMDk5IDAwNjI7CiswMDYxIDA1QjAgMDk0RCAzMDk5IDBBNEQgMDA2MjswMDYxIDMwOTkgMDk0RCAwQTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQTREIDA1QjAgMDA2MjsKKzAwNjEgMEE0RCAwNUIwIDA5NEQgMzA5OSAwMDYyOzAwNjEgMzA5OSAwQTREIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQTREIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQTREIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQTREIDA5NEQgMDVCMCAwMDYyOworMDA2MSAzMDk5IDA5M0MgMDMzNCAwQUJDIDAwNjI7MDA2MSAwMzM0IDA5M0MgMEFCQyAzMDk5IDAwNjI7MDA2MSAwMzM0IDA5M0MgMEFCQyAzMDk5IDAwNjI7MDA2MSAwMzM0IDA5M0MgMEFCQyAzMDk5IDAwNjI7MDA2MSAwMzM0IDA5M0MgMEFCQyAzMDk5IDAwNjI7CiswMDYxIDBBQkMgMzA5OSAwOTNDIDAzMzQgMDA2MjswMDYxIDAzMzQgMEFCQyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMEFCQyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMEFCQyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMEFCQyAwOTNDIDMwOTkgMDA2MjsKKzAwNjEgMDVCMCAwOTREIDMwOTkgMEFDRCAwMDYyOzAwNjEgMzA5OSAwOTREIDBBQ0QgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBBQ0QgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBBQ0QgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBBQ0QgMDVCMCAwMDYyOworMDA2MSAwQUNEIDA1QjAgMDk0RCAzMDk5IDAwNjI7MDA2MSAzMDk5IDBBQ0QgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBBQ0QgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBBQ0QgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBBQ0QgMDk0RCAwNUIwIDAwNjI7CiswMDYxIDMwOTkgMDkzQyAwMzM0IDBCM0MgMDA2MjswMDYxIDAzMzQgMDkzQyAwQjNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwQjNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwQjNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMDkzQyAwQjNDIDMwOTkgMDA2MjsKKzAwNjEgMEIzQyAzMDk5IDA5M0MgMDMzNCAwMDYyOzAwNjEgMDMzNCAwQjNDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwQjNDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwQjNDIDA5M0MgMzA5OSAwMDYyOzAwNjEgMDMzNCAwQjNDIDA5M0MgMzA5OSAwMDYyOworMDA2MSAwNUIwIDA5NEQgMzA5OSAwQjREIDAwNjI7MDA2MSAzMDk5IDA5NEQgMEI0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMEI0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMEI0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMEI0RCAwNUIwIDAwNjI7CiswMDYxIDBCNEQgMDVCMCAwOTREIDMwOTkgMDA2MjswMDYxIDMwOTkgMEI0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMEI0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMEI0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMEI0RCAwOTREIDA1QjAgMDA2MjsKKzAwNjEgMDVCMCAwOTREIDMwOTkgMEJDRCAwMDYyOzAwNjEgMzA5OSAwOTREIDBCQ0QgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBCQ0QgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBCQ0QgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBCQ0QgMDVCMCAwMDYyOworMDA2MSAwQkNEIDA1QjAgMDk0RCAzMDk5IDAwNjI7MDA2MSAzMDk5IDBCQ0QgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBCQ0QgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBCQ0QgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBCQ0QgMDk0RCAwNUIwIDAwNjI7CiswMDYxIDA1QjAgMDk0RCAzMDk5IDBDNEQgMDA2MjswMDYxIDMwOTkgMDk0RCAwQzREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQzREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQzREIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQzREIDA1QjAgMDA2MjsKKzAwNjEgMEM0RCAwNUIwIDA5NEQgMzA5OSAwMDYyOzAwNjEgMzA5OSAwQzREIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQzREIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQzREIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQzREIDA5NEQgMDVCMCAwMDYyOworMDA2MSAwQzU2IDBDNTUgMDcxMSAwQzU1IDAwNjI7MDA2MSAwNzExIDBDNTUgMEM1NSAwQzU2IDAwNjI7MDA2MSAwNzExIDBDNTUgMEM1NSAwQzU2IDAwNjI7MDA2MSAwNzExIDBDNTUgMEM1NSAwQzU2IDAwNjI7MDA2MSAwNzExIDBDNTUgMEM1NSAwQzU2IDAwNjI7CiswMDYxIDBDNTUgMEM1NiAwQzU1IDA3MTEgMDA2MjswMDYxIDA3MTEgMEM1NSAwQzU1IDBDNTYgMDA2MjswMDYxIDA3MTEgMEM1NSAwQzU1IDBDNTYgMDA2MjswMDYxIDA3MTEgMEM1NSAwQzU1IDBDNTYgMDA2MjswMDYxIDA3MTEgMEM1NSAwQzU1IDBDNTYgMDA2MjsKKzAwNjEgMEUzOCAwQzU2IDBDNTUgMEM1NiAwMDYyOzAwNjEgMEM1NSAwQzU2IDBDNTYgMEUzOCAwMDYyOzAwNjEgMEM1NSAwQzU2IDBDNTYgMEUzOCAwMDYyOzAwNjEgMEM1NSAwQzU2IDBDNTYgMEUzOCAwMDYyOzAwNjEgMEM1NSAwQzU2IDBDNTYgMEUzOCAwMDYyOworMDA2MSAwQzU2IDBFMzggMEM1NiAwQzU1IDAwNjI7MDA2MSAwQzU1IDBDNTYgMEM1NiAwRTM4IDAwNjI7MDA2MSAwQzU1IDBDNTYgMEM1NiAwRTM4IDAwNjI7MDA2MSAwQzU1IDBDNTYgMEM1NiAwRTM4IDAwNjI7MDA2MSAwQzU1IDBDNTYgMEM1NiAwRTM4IDAwNjI7CiswMDYxIDA1QjAgMDk0RCAzMDk5IDBDQ0QgMDA2MjswMDYxIDMwOTkgMDk0RCAwQ0NEIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQ0NEIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQ0NEIDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAwQ0NEIDA1QjAgMDA2MjsKKzAwNjEgMENDRCAwNUIwIDA5NEQgMzA5OSAwMDYyOzAwNjEgMzA5OSAwQ0NEIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQ0NEIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQ0NEIDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwQ0NEIDA5NEQgMDVCMCAwMDYyOworMDA2MSAwNUIwIDA5NEQgMzA5OSAwRDREIDAwNjI7MDA2MSAzMDk5IDA5NEQgMEQ0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMEQ0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMEQ0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMEQ0RCAwNUIwIDAwNjI7CiswMDYxIDBENEQgMDVCMCAwOTREIDMwOTkgMDA2MjswMDYxIDMwOTkgMEQ0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMEQ0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMEQ0RCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMEQ0RCAwOTREIDA1QjAgMDA2MjsKKzAwNjEgMDVCMCAwOTREIDMwOTkgMERDQSAwMDYyOzAwNjEgMzA5OSAwOTREIDBEQ0EgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBEQ0EgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBEQ0EgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBEQ0EgMDVCMCAwMDYyOworMDA2MSAwRENBIDA1QjAgMDk0RCAzMDk5IDAwNjI7MDA2MSAzMDk5IDBEQ0EgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBEQ0EgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBEQ0EgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBEQ0EgMDk0RCAwNUIwIDAwNjI7CiswMDYxIDBFNDggMEUzOCAwQzU2IDBFMzggMDA2MjswMDYxIDBDNTYgMEUzOCAwRTM4IDBFNDggMDA2MjswMDYxIDBDNTYgMEUzOCAwRTM4IDBFNDggMDA2MjswMDYxIDBDNTYgMEUzOCAwRTM4IDBFNDggMDA2MjswMDYxIDBDNTYgMEUzOCAwRTM4IDBFNDggMDA2MjsKKzAwNjEgMEUzOCAwRTQ4IDBFMzggMEM1NiAwMDYyOzAwNjEgMEM1NiAwRTM4IDBFMzggMEU0OCAwMDYyOzAwNjEgMEM1NiAwRTM4IDBFMzggMEU0OCAwMDYyOzAwNjEgMEM1NiAwRTM4IDBFMzggMEU0OCAwMDYyOzAwNjEgMEM1NiAwRTM4IDBFMzggMEU0OCAwMDYyOworMDA2MSAwRTQ4IDBFMzggMEM1NiAwRTM5IDAwNjI7MDA2MSAwQzU2IDBFMzggMEUzOSAwRTQ4IDAwNjI7MDA2MSAwQzU2IDBFMzggMEUzOSAwRTQ4IDAwNjI7MDA2MSAwQzU2IDBFMzggMEUzOSAwRTQ4IDAwNjI7MDA2MSAwQzU2IDBFMzggMEUzOSAwRTQ4IDAwNjI7CiswMDYxIDBFMzkgMEU0OCAwRTM4IDBDNTYgMDA2MjswMDYxIDBDNTYgMEUzOSAwRTM4IDBFNDggMDA2MjswMDYxIDBDNTYgMEUzOSAwRTM4IDBFNDggMDA2MjswMDYxIDBDNTYgMEUzOSAwRTM4IDBFNDggMDA2MjswMDYxIDBDNTYgMEUzOSAwRTM4IDBFNDggMDA2MjsKKzAwNjEgMDVCMCAwOTREIDMwOTkgMEUzQSAwMDYyOzAwNjEgMzA5OSAwOTREIDBFM0EgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBFM0EgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBFM0EgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBFM0EgMDVCMCAwMDYyOworMDA2MSAwRTNBIDA1QjAgMDk0RCAzMDk5IDAwNjI7MDA2MSAzMDk5IDBFM0EgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBFM0EgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBFM0EgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBFM0EgMDk0RCAwNUIwIDAwNjI7CiswMDYxIDBFQjggMEU0OCAwRTM4IDBFNDggMDA2MjswMDYxIDBFMzggMEU0OCAwRTQ4IDBFQjggMDA2MjswMDYxIDBFMzggMEU0OCAwRTQ4IDBFQjggMDA2MjswMDYxIDBFMzggMEU0OCAwRTQ4IDBFQjggMDA2MjswMDYxIDBFMzggMEU0OCAwRTQ4IDBFQjggMDA2MjsKKzAwNjEgMEU0OCAwRUI4IDBFNDggMEUzOCAwMDYyOzAwNjEgMEUzOCAwRTQ4IDBFNDggMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTQ4IDBFNDggMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTQ4IDBFNDggMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTQ4IDBFNDggMEVCOCAwMDYyOworMDA2MSAwRUI4IDBFNDggMEUzOCAwRTQ5IDAwNjI7MDA2MSAwRTM4IDBFNDggMEU0OSAwRUI4IDAwNjI7MDA2MSAwRTM4IDBFNDggMEU0OSAwRUI4IDAwNjI7MDA2MSAwRTM4IDBFNDggMEU0OSAwRUI4IDAwNjI7MDA2MSAwRTM4IDBFNDggMEU0OSAwRUI4IDAwNjI7CiswMDYxIDBFNDkgMEVCOCAwRTQ4IDBFMzggMDA2MjswMDYxIDBFMzggMEU0OSAwRTQ4IDBFQjggMDA2MjswMDYxIDBFMzggMEU0OSAwRTQ4IDBFQjggMDA2MjswMDYxIDBFMzggMEU0OSAwRTQ4IDBFQjggMDA2MjswMDYxIDBFMzggMEU0OSAwRTQ4IDBFQjggMDA2MjsKKzAwNjEgMEVCOCAwRTQ4IDBFMzggMEU0QSAwMDYyOzAwNjEgMEUzOCAwRTQ4IDBFNEEgMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTQ4IDBFNEEgMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTQ4IDBFNEEgMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTQ4IDBFNEEgMEVCOCAwMDYyOworMDA2MSAwRTRBIDBFQjggMEU0OCAwRTM4IDAwNjI7MDA2MSAwRTM4IDBFNEEgMEU0OCAwRUI4IDAwNjI7MDA2MSAwRTM4IDBFNEEgMEU0OCAwRUI4IDAwNjI7MDA2MSAwRTM4IDBFNEEgMEU0OCAwRUI4IDAwNjI7MDA2MSAwRTM4IDBFNEEgMEU0OCAwRUI4IDAwNjI7CiswMDYxIDBFQjggMEU0OCAwRTM4IDBFNEIgMDA2MjswMDYxIDBFMzggMEU0OCAwRTRCIDBFQjggMDA2MjswMDYxIDBFMzggMEU0OCAwRTRCIDBFQjggMDA2MjswMDYxIDBFMzggMEU0OCAwRTRCIDBFQjggMDA2MjswMDYxIDBFMzggMEU0OCAwRTRCIDBFQjggMDA2MjsKKzAwNjEgMEU0QiAwRUI4IDBFNDggMEUzOCAwMDYyOzAwNjEgMEUzOCAwRTRCIDBFNDggMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTRCIDBFNDggMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTRCIDBFNDggMEVCOCAwMDYyOzAwNjEgMEUzOCAwRTRCIDBFNDggMEVCOCAwMDYyOworMDA2MSAwRUM4IDBFQjggMEU0OCAwRUI4IDAwNjI7MDA2MSAwRTQ4IDBFQjggMEVCOCAwRUM4IDAwNjI7MDA2MSAwRTQ4IDBFQjggMEVCOCAwRUM4IDAwNjI7MDA2MSAwRTQ4IDBFQjggMEVCOCAwRUM4IDAwNjI7MDA2MSAwRTQ4IDBFQjggMEVCOCAwRUM4IDAwNjI7CiswMDYxIDBFQjggMEVDOCAwRUI4IDBFNDggMDA2MjswMDYxIDBFNDggMEVCOCAwRUI4IDBFQzggMDA2MjswMDYxIDBFNDggMEVCOCAwRUI4IDBFQzggMDA2MjswMDYxIDBFNDggMEVCOCAwRUI4IDBFQzggMDA2MjswMDYxIDBFNDggMEVCOCAwRUI4IDBFQzggMDA2MjsKKzAwNjEgMEVDOCAwRUI4IDBFNDggMEVCOSAwMDYyOzAwNjEgMEU0OCAwRUI4IDBFQjkgMEVDOCAwMDYyOzAwNjEgMEU0OCAwRUI4IDBFQjkgMEVDOCAwMDYyOzAwNjEgMEU0OCAwRUI4IDBFQjkgMEVDOCAwMDYyOzAwNjEgMEU0OCAwRUI4IDBFQjkgMEVDOCAwMDYyOworMDA2MSAwRUI5IDBFQzggMEVCOCAwRTQ4IDAwNjI7MDA2MSAwRTQ4IDBFQjkgMEVCOCAwRUM4IDAwNjI7MDA2MSAwRTQ4IDBFQjkgMEVCOCAwRUM4IDAwNjI7MDA2MSAwRTQ4IDBFQjkgMEVCOCAwRUM4IDAwNjI7MDA2MSAwRTQ4IDBFQjkgMEVCOCAwRUM4IDAwNjI7CiswMDYxIDBGNzEgMEVDOCAwRUI4IDBFQzggMDA2MjswMDYxIDBFQjggMEVDOCAwRUM4IDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOCAwRUM4IDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOCAwRUM4IDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOCAwRUM4IDBGNzEgMDA2MjsKKzAwNjEgMEVDOCAwRjcxIDBFQzggMEVCOCAwMDYyOzAwNjEgMEVCOCAwRUM4IDBFQzggMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUM4IDBFQzggMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUM4IDBFQzggMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUM4IDBFQzggMEY3MSAwMDYyOworMDA2MSAwRjcxIDBFQzggMEVCOCAwRUM5IDAwNjI7MDA2MSAwRUI4IDBFQzggMEVDOSAwRjcxIDAwNjI7MDA2MSAwRUI4IDBFQzggMEVDOSAwRjcxIDAwNjI7MDA2MSAwRUI4IDBFQzggMEVDOSAwRjcxIDAwNjI7MDA2MSAwRUI4IDBFQzggMEVDOSAwRjcxIDAwNjI7CiswMDYxIDBFQzkgMEY3MSAwRUM4IDBFQjggMDA2MjswMDYxIDBFQjggMEVDOSAwRUM4IDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOSAwRUM4IDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOSAwRUM4IDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOSAwRUM4IDBGNzEgMDA2MjsKKzAwNjEgMEY3MSAwRUM4IDBFQjggMEVDQSAwMDYyOzAwNjEgMEVCOCAwRUM4IDBFQ0EgMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUM4IDBFQ0EgMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUM4IDBFQ0EgMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUM4IDBFQ0EgMEY3MSAwMDYyOworMDA2MSAwRUNBIDBGNzEgMEVDOCAwRUI4IDAwNjI7MDA2MSAwRUI4IDBFQ0EgMEVDOCAwRjcxIDAwNjI7MDA2MSAwRUI4IDBFQ0EgMEVDOCAwRjcxIDAwNjI7MDA2MSAwRUI4IDBFQ0EgMEVDOCAwRjcxIDAwNjI7MDA2MSAwRUI4IDBFQ0EgMEVDOCAwRjcxIDAwNjI7CiswMDYxIDBGNzEgMEVDOCAwRUI4IDBFQ0IgMDA2MjswMDYxIDBFQjggMEVDOCAwRUNCIDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOCAwRUNCIDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOCAwRUNCIDBGNzEgMDA2MjswMDYxIDBFQjggMEVDOCAwRUNCIDBGNzEgMDA2MjsKKzAwNjEgMEVDQiAwRjcxIDBFQzggMEVCOCAwMDYyOzAwNjEgMEVCOCAwRUNCIDBFQzggMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUNCIDBFQzggMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUNCIDBFQzggMEY3MSAwMDYyOzAwNjEgMEVCOCAwRUNCIDBFQzggMEY3MSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwRjE4IDAwNjI7MDA2MSAzMDJBIDAzMTYgMEYxOCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMEYxOCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMEYxOCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMEYxOCAwNTlBIDAwNjI7CiswMDYxIDBGMTggMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMEYxOCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMEYxOCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMEYxOCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMEYxOCAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMEYxOSAwMDYyOzAwNjEgMzAyQSAwMzE2IDBGMTkgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDBGMTkgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDBGMTkgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDBGMTkgMDU5QSAwMDYyOworMDA2MSAwRjE5IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDBGMTkgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDBGMTkgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDBGMTkgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDBGMTkgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDBGMzUgMDA2MjswMDYxIDMwMkEgMDMxNiAwRjM1IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwRjM1IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwRjM1IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwRjM1IDA1OUEgMDA2MjsKKzAwNjEgMEYzNSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwRjM1IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwRjM1IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwRjM1IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwRjM1IDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAwRjM3IDAwNjI7MDA2MSAzMDJBIDAzMTYgMEYzNyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMEYzNyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMEYzNyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMEYzNyAwNTlBIDAwNjI7CiswMDYxIDBGMzcgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMEYzNyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMEYzNyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMEYzNyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMEYzNyAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMzAyQSAwMzFCIDAzMjEgMEYzOSAwMDYyOzAwNjEgMDMyMSAwMzFCIDBGMzkgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDBGMzkgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDBGMzkgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDBGMzkgMzAyQSAwMDYyOworMDA2MSAwRjM5IDMwMkEgMDMxQiAwMzIxIDAwNjI7MDA2MSAwMzIxIDBGMzkgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDBGMzkgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDBGMzkgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDBGMzkgMDMxQiAzMDJBIDAwNjI7CiswMDYxIDBGNzIgMEY3MSAwRUM4IDBGNzEgMDA2MjswMDYxIDBFQzggMEY3MSAwRjcxIDBGNzIgMDA2MjswMDYxIDBFQzggMEY3MSAwRjcxIDBGNzIgMDA2MjswMDYxIDBFQzggMEY3MSAwRjcxIDBGNzIgMDA2MjswMDYxIDBFQzggMEY3MSAwRjcxIDBGNzIgMDA2MjsKKzAwNjEgMEY3MSAwRjcyIDBGNzEgMEVDOCAwMDYyOzAwNjEgMEVDOCAwRjcxIDBGNzEgMEY3MiAwMDYyOzAwNjEgMEVDOCAwRjcxIDBGNzEgMEY3MiAwMDYyOzAwNjEgMEVDOCAwRjcxIDBGNzEgMEY3MiAwMDYyOzAwNjEgMEVDOCAwRjcxIDBGNzEgMEY3MiAwMDYyOworMDA2MSAwRjc0IDBGNzIgMEY3MSAwRjcyIDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY3MiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY3MiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY3MiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY3MiAwRjc0IDAwNjI7CiswMDYxIDBGNzIgMEY3NCAwRjcyIDBGNzEgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjcyIDBGNzQgMDA2MjsKKzAwNjEgMDMyMSAwRjc0IDBGNzIgMEY3NCAwMDYyOzAwNjEgMEY3MiAwRjc0IDBGNzQgMDMyMSAwMDYyOzAwNjEgMEY3MiAwRjc0IDBGNzQgMDMyMSAwMDYyOzAwNjEgMEY3MiAwRjc0IDBGNzQgMDMyMSAwMDYyOzAwNjEgMEY3MiAwRjc0IDBGNzQgMDMyMSAwMDYyOworMDA2MSAwRjc0IDAzMjEgMEY3NCAwRjcyIDAwNjI7MDA2MSAwRjcyIDBGNzQgMEY3NCAwMzIxIDAwNjI7MDA2MSAwRjcyIDBGNzQgMEY3NCAwMzIxIDAwNjI7MDA2MSAwRjcyIDBGNzQgMEY3NCAwMzIxIDAwNjI7MDA2MSAwRjcyIDBGNzQgMEY3NCAwMzIxIDAwNjI7CiswMDYxIDBGNzQgMEY3MiAwRjcxIDBGN0EgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjdBIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjdBIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjdBIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjdBIDBGNzQgMDA2MjsKKzAwNjEgMEY3QSAwRjc0IDBGNzIgMEY3MSAwMDYyOzAwNjEgMEY3MSAwRjdBIDBGNzIgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjdBIDBGNzIgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjdBIDBGNzIgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjdBIDBGNzIgMEY3NCAwMDYyOworMDA2MSAwRjc0IDBGNzIgMEY3MSAwRjdCIDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY3QiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY3QiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY3QiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY3QiAwRjc0IDAwNjI7CiswMDYxIDBGN0IgMEY3NCAwRjcyIDBGNzEgMDA2MjswMDYxIDBGNzEgMEY3QiAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3QiAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3QiAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3QiAwRjcyIDBGNzQgMDA2MjsKKzAwNjEgMEY3NCAwRjcyIDBGNzEgMEY3QyAwMDYyOzAwNjEgMEY3MSAwRjcyIDBGN0MgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjcyIDBGN0MgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjcyIDBGN0MgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjcyIDBGN0MgMEY3NCAwMDYyOworMDA2MSAwRjdDIDBGNzQgMEY3MiAwRjcxIDAwNjI7MDA2MSAwRjcxIDBGN0MgMEY3MiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGN0MgMEY3MiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGN0MgMEY3MiAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGN0MgMEY3MiAwRjc0IDAwNjI7CiswMDYxIDBGNzQgMEY3MiAwRjcxIDBGN0QgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjdEIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjdEIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjdEIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY3MiAwRjdEIDBGNzQgMDA2MjsKKzAwNjEgMEY3RCAwRjc0IDBGNzIgMEY3MSAwMDYyOzAwNjEgMEY3MSAwRjdEIDBGNzIgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjdEIDBGNzIgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjdEIDBGNzIgMEY3NCAwMDYyOzAwNjEgMEY3MSAwRjdEIDBGNzIgMEY3NCAwMDYyOworMDA2MSAwRjc0IDBGNzIgMEY3MSAwRjgwIDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY4MCAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY4MCAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY4MCAwRjc0IDAwNjI7MDA2MSAwRjcxIDBGNzIgMEY4MCAwRjc0IDAwNjI7CiswMDYxIDBGODAgMEY3NCAwRjcyIDBGNzEgMDA2MjswMDYxIDBGNzEgMEY4MCAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY4MCAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY4MCAwRjcyIDBGNzQgMDA2MjswMDYxIDBGNzEgMEY4MCAwRjcyIDBGNzQgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMEY4MiAwMDYyOzAwRTAgMDVBRSAwRjgyIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwRjgyIDAzMTUgMDA2MjswMEUwIDA1QUUgMEY4MiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMEY4MiAwMzE1IDAwNjI7CiswMDYxIDBGODIgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMEY4MiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMEY4MiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMEY4MiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMEY4MiAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMEY4MyAwMDYyOzAwRTAgMDVBRSAwRjgzIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAwRjgzIDAzMTUgMDA2MjswMEUwIDA1QUUgMEY4MyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMEY4MyAwMzE1IDAwNjI7CiswMDYxIDBGODMgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMEY4MyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMEY4MyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMEY4MyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMEY4MyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDVCMCAwOTREIDMwOTkgMEY4NCAwMDYyOzAwNjEgMzA5OSAwOTREIDBGODQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBGODQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBGODQgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDBGODQgMDVCMCAwMDYyOworMDA2MSAwRjg0IDA1QjAgMDk0RCAzMDk5IDAwNjI7MDA2MSAzMDk5IDBGODQgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBGODQgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBGODQgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDBGODQgMDk0RCAwNUIwIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDBGODYgMDA2MjswMEUwIDA1QUUgMEY4NiAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMEY4NiAwMzE1IDAwNjI7MDBFMCAwNUFFIDBGODYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDBGODYgMDMxNSAwMDYyOworMDA2MSAwRjg2IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDBGODYgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDBGODYgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDBGODYgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDBGODYgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDBGODcgMDA2MjswMEUwIDA1QUUgMEY4NyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMEY4NyAwMzE1IDAwNjI7MDBFMCAwNUFFIDBGODcgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDBGODcgMDMxNSAwMDYyOworMDA2MSAwRjg3IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDBGODcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDBGODcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDBGODcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDBGODcgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDBGQzYgMDA2MjswMDYxIDMwMkEgMDMxNiAwRkM2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwRkM2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwRkM2IDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAwRkM2IDA1OUEgMDA2MjsKKzAwNjEgMEZDNiAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAwRkM2IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwRkM2IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwRkM2IDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAwRkM2IDAzMTYgMDU5QSAwMDYyOworMDA2MSAzMDk5IDA5M0MgMDMzNCAxMDM3IDAwNjI7MDA2MSAwMzM0IDA5M0MgMTAzNyAzMDk5IDAwNjI7MDA2MSAwMzM0IDA5M0MgMTAzNyAzMDk5IDAwNjI7MDA2MSAwMzM0IDA5M0MgMTAzNyAzMDk5IDAwNjI7MDA2MSAwMzM0IDA5M0MgMTAzNyAzMDk5IDAwNjI7CiswMDYxIDEwMzcgMzA5OSAwOTNDIDAzMzQgMDA2MjswMDYxIDAzMzQgMTAzNyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMTAzNyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMTAzNyAwOTNDIDMwOTkgMDA2MjswMDYxIDAzMzQgMTAzNyAwOTNDIDMwOTkgMDA2MjsKKzAwNjEgMDVCMCAwOTREIDMwOTkgMTAzOSAwMDYyOzAwNjEgMzA5OSAwOTREIDEwMzkgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDEwMzkgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDEwMzkgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDEwMzkgMDVCMCAwMDYyOworMDA2MSAxMDM5IDA1QjAgMDk0RCAzMDk5IDAwNjI7MDA2MSAzMDk5IDEwMzkgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDEwMzkgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDEwMzkgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDEwMzkgMDk0RCAwNUIwIDAwNjI7CiswMDYxIDA1QjAgMDk0RCAzMDk5IDE3MTQgMDA2MjswMDYxIDMwOTkgMDk0RCAxNzE0IDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAxNzE0IDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAxNzE0IDA1QjAgMDA2MjswMDYxIDMwOTkgMDk0RCAxNzE0IDA1QjAgMDA2MjsKKzAwNjEgMTcxNCAwNUIwIDA5NEQgMzA5OSAwMDYyOzAwNjEgMzA5OSAxNzE0IDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAxNzE0IDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAxNzE0IDA5NEQgMDVCMCAwMDYyOzAwNjEgMzA5OSAxNzE0IDA5NEQgMDVCMCAwMDYyOworMDA2MSAwNUIwIDA5NEQgMzA5OSAxNzM0IDAwNjI7MDA2MSAzMDk5IDA5NEQgMTczNCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMTczNCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMTczNCAwNUIwIDAwNjI7MDA2MSAzMDk5IDA5NEQgMTczNCAwNUIwIDAwNjI7CiswMDYxIDE3MzQgMDVCMCAwOTREIDMwOTkgMDA2MjswMDYxIDMwOTkgMTczNCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMTczNCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMTczNCAwOTREIDA1QjAgMDA2MjswMDYxIDMwOTkgMTczNCAwOTREIDA1QjAgMDA2MjsKKzAwNjEgMDVCMCAwOTREIDMwOTkgMTdEMiAwMDYyOzAwNjEgMzA5OSAwOTREIDE3RDIgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDE3RDIgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDE3RDIgMDVCMCAwMDYyOzAwNjEgMzA5OSAwOTREIDE3RDIgMDVCMCAwMDYyOworMDA2MSAxN0QyIDA1QjAgMDk0RCAzMDk5IDAwNjI7MDA2MSAzMDk5IDE3RDIgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDE3RDIgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDE3RDIgMDk0RCAwNUIwIDAwNjI7MDA2MSAzMDk5IDE3RDIgMDk0RCAwNUIwIDAwNjI7CiswMDYxIDAzMDAgMDVBRSAxRDE2RCAxOEE5IDAwNjI7MDBFMCAxRDE2RCAwNUFFIDE4QTkgMDA2MjswMDYxIDFEMTZEIDA1QUUgMThBOSAwMzAwIDAwNjI7MDBFMCAxRDE2RCAwNUFFIDE4QTkgMDA2MjswMDYxIDFEMTZEIDA1QUUgMThBOSAwMzAwIDAwNjI7CiswMDYxIDE4QTkgMDMwMCAwNUFFIDFEMTZEIDAwNjI7MDBFMCAxRDE2RCAxOEE5IDA1QUUgMDA2MjswMDYxIDFEMTZEIDE4QTkgMDVBRSAwMzAwIDAwNjI7MDBFMCAxRDE2RCAxOEE5IDA1QUUgMDA2MjswMDYxIDFEMTZEIDE4QTkgMDVBRSAwMzAwIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDIwRDAgMDA2MjswMEUwIDA1QUUgMjBEMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMjBEMCAwMzE1IDAwNjI7MDBFMCAwNUFFIDIwRDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwRDAgMDMxNSAwMDYyOworMDA2MSAyMEQwIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDIwRDAgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRDAgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRDAgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRDAgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDIwRDEgMDA2MjswMEUwIDA1QUUgMjBEMSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMjBEMSAwMzE1IDAwNjI7MDBFMCAwNUFFIDIwRDEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwRDEgMDMxNSAwMDYyOworMDA2MSAyMEQxIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDIwRDEgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRDEgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRDEgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRDEgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA5M0MgMDMzNCAyMEQyIDAwNjI7MDA2MSAwMzM0IDIwRDIgMDkzQyAwMDYyOzAwNjEgMDMzNCAyMEQyIDA5M0MgMDA2MjswMDYxIDAzMzQgMjBEMiAwOTNDIDAwNjI7MDA2MSAwMzM0IDIwRDIgMDkzQyAwMDYyOworMDA2MSAyMEQyIDA5M0MgMDMzNCAwMDYyOzAwNjEgMjBEMiAwMzM0IDA5M0MgMDA2MjswMDYxIDIwRDIgMDMzNCAwOTNDIDAwNjI7MDA2MSAyMEQyIDAzMzQgMDkzQyAwMDYyOzAwNjEgMjBEMiAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDkzQyAwMzM0IDIwRDMgMDA2MjswMDYxIDAzMzQgMjBEMyAwOTNDIDAwNjI7MDA2MSAwMzM0IDIwRDMgMDkzQyAwMDYyOzAwNjEgMDMzNCAyMEQzIDA5M0MgMDA2MjswMDYxIDAzMzQgMjBEMyAwOTNDIDAwNjI7CiswMDYxIDIwRDMgMDkzQyAwMzM0IDAwNjI7MDA2MSAyMEQzIDAzMzQgMDkzQyAwMDYyOzAwNjEgMjBEMyAwMzM0IDA5M0MgMDA2MjswMDYxIDIwRDMgMDMzNCAwOTNDIDAwNjI7MDA2MSAyMEQzIDAzMzQgMDkzQyAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAyMEQ0IDAwNjI7MDBFMCAwNUFFIDIwRDQgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwRDQgMDMxNSAwMDYyOzAwRTAgMDVBRSAyMEQ0IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAyMEQ0IDAzMTUgMDA2MjsKKzAwNjEgMjBENCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAyMEQ0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ0IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ0IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAyMEQ1IDAwNjI7MDBFMCAwNUFFIDIwRDUgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwRDUgMDMxNSAwMDYyOzAwRTAgMDVBRSAyMEQ1IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAyMEQ1IDAzMTUgMDA2MjsKKzAwNjEgMjBENSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAyMEQ1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ1IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAyMEQ2IDAwNjI7MDBFMCAwNUFFIDIwRDYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwRDYgMDMxNSAwMDYyOzAwRTAgMDVBRSAyMEQ2IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAyMEQ2IDAzMTUgMDA2MjsKKzAwNjEgMjBENiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAyMEQ2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ2IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAyMEQ3IDAwNjI7MDBFMCAwNUFFIDIwRDcgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwRDcgMDMxNSAwMDYyOzAwRTAgMDVBRSAyMEQ3IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAyMEQ3IDAzMTUgMDA2MjsKKzAwNjEgMjBENyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAyMEQ3IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ3IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ3IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEQ3IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwOTNDIDAzMzQgMjBEOCAwMDYyOzAwNjEgMDMzNCAyMEQ4IDA5M0MgMDA2MjswMDYxIDAzMzQgMjBEOCAwOTNDIDAwNjI7MDA2MSAwMzM0IDIwRDggMDkzQyAwMDYyOzAwNjEgMDMzNCAyMEQ4IDA5M0MgMDA2MjsKKzAwNjEgMjBEOCAwOTNDIDAzMzQgMDA2MjswMDYxIDIwRDggMDMzNCAwOTNDIDAwNjI7MDA2MSAyMEQ4IDAzMzQgMDkzQyAwMDYyOzAwNjEgMjBEOCAwMzM0IDA5M0MgMDA2MjswMDYxIDIwRDggMDMzNCAwOTNDIDAwNjI7CiswMDYxIDA5M0MgMDMzNCAyMEQ5IDAwNjI7MDA2MSAwMzM0IDIwRDkgMDkzQyAwMDYyOzAwNjEgMDMzNCAyMEQ5IDA5M0MgMDA2MjswMDYxIDAzMzQgMjBEOSAwOTNDIDAwNjI7MDA2MSAwMzM0IDIwRDkgMDkzQyAwMDYyOworMDA2MSAyMEQ5IDA5M0MgMDMzNCAwMDYyOzAwNjEgMjBEOSAwMzM0IDA5M0MgMDA2MjswMDYxIDIwRDkgMDMzNCAwOTNDIDAwNjI7MDA2MSAyMEQ5IDAzMzQgMDkzQyAwMDYyOzAwNjEgMjBEOSAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDkzQyAwMzM0IDIwREEgMDA2MjswMDYxIDAzMzQgMjBEQSAwOTNDIDAwNjI7MDA2MSAwMzM0IDIwREEgMDkzQyAwMDYyOzAwNjEgMDMzNCAyMERBIDA5M0MgMDA2MjswMDYxIDAzMzQgMjBEQSAwOTNDIDAwNjI7CiswMDYxIDIwREEgMDkzQyAwMzM0IDAwNjI7MDA2MSAyMERBIDAzMzQgMDkzQyAwMDYyOzAwNjEgMjBEQSAwMzM0IDA5M0MgMDA2MjswMDYxIDIwREEgMDMzNCAwOTNDIDAwNjI7MDA2MSAyMERBIDAzMzQgMDkzQyAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAyMERCIDAwNjI7MDBFMCAwNUFFIDIwREIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwREIgMDMxNSAwMDYyOzAwRTAgMDVBRSAyMERCIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAyMERCIDAzMTUgMDA2MjsKKzAwNjEgMjBEQiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAyMERCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMERCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMERCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMERCIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAyMERDIDAwNjI7MDBFMCAwNUFFIDIwREMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwREMgMDMxNSAwMDYyOzAwRTAgMDVBRSAyMERDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAyMERDIDAzMTUgMDA2MjsKKzAwNjEgMjBEQyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAyMERDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMERDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMERDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMERDIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAyMEUxIDAwNjI7MDBFMCAwNUFFIDIwRTEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwRTEgMDMxNSAwMDYyOzAwRTAgMDVBRSAyMEUxIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAyMEUxIDAzMTUgMDA2MjsKKzAwNjEgMjBFMSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAyMEUxIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEUxIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEUxIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAyMEUxIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwOTNDIDAzMzQgMjBFNSAwMDYyOzAwNjEgMDMzNCAyMEU1IDA5M0MgMDA2MjswMDYxIDAzMzQgMjBFNSAwOTNDIDAwNjI7MDA2MSAwMzM0IDIwRTUgMDkzQyAwMDYyOzAwNjEgMDMzNCAyMEU1IDA5M0MgMDA2MjsKKzAwNjEgMjBFNSAwOTNDIDAzMzQgMDA2MjswMDYxIDIwRTUgMDMzNCAwOTNDIDAwNjI7MDA2MSAyMEU1IDAzMzQgMDkzQyAwMDYyOzAwNjEgMjBFNSAwMzM0IDA5M0MgMDA2MjswMDYxIDIwRTUgMDMzNCAwOTNDIDAwNjI7CiswMDYxIDA5M0MgMDMzNCAyMEU2IDAwNjI7MDA2MSAwMzM0IDIwRTYgMDkzQyAwMDYyOzAwNjEgMDMzNCAyMEU2IDA5M0MgMDA2MjswMDYxIDAzMzQgMjBFNiAwOTNDIDAwNjI7MDA2MSAwMzM0IDIwRTYgMDkzQyAwMDYyOworMDA2MSAyMEU2IDA5M0MgMDMzNCAwMDYyOzAwNjEgMjBFNiAwMzM0IDA5M0MgMDA2MjswMDYxIDIwRTYgMDMzNCAwOTNDIDAwNjI7MDA2MSAyMEU2IDAzMzQgMDkzQyAwMDYyOzAwNjEgMjBFNiAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMjBFNyAwMDYyOzAwRTAgMDVBRSAyMEU3IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAyMEU3IDAzMTUgMDA2MjswMEUwIDA1QUUgMjBFNyAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMjBFNyAwMzE1IDAwNjI7CiswMDYxIDIwRTcgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMjBFNyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMjBFNyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMjBFNyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMjBFNyAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMjBFOCAwMDYyOzAwNjEgMzAyQSAwMzE2IDIwRTggMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDIwRTggMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDIwRTggMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDIwRTggMDU5QSAwMDYyOworMDA2MSAyMEU4IDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDIwRTggMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDIwRTggMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDIwRTggMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDIwRTggMDMxNiAwNTlBIDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDIwRTkgMDA2MjswMEUwIDA1QUUgMjBFOSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMjBFOSAwMzE1IDAwNjI7MDBFMCAwNUFFIDIwRTkgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDIwRTkgMDMxNSAwMDYyOworMDA2MSAyMEU5IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDIwRTkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRTkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRTkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDIwRTkgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA5M0MgMDMzNCAyMEVBIDAwNjI7MDA2MSAwMzM0IDIwRUEgMDkzQyAwMDYyOzAwNjEgMDMzNCAyMEVBIDA5M0MgMDA2MjswMDYxIDAzMzQgMjBFQSAwOTNDIDAwNjI7MDA2MSAwMzM0IDIwRUEgMDkzQyAwMDYyOworMDA2MSAyMEVBIDA5M0MgMDMzNCAwMDYyOzAwNjEgMjBFQSAwMzM0IDA5M0MgMDA2MjswMDYxIDIwRUEgMDMzNCAwOTNDIDAwNjI7MDA2MSAyMEVBIDAzMzQgMDkzQyAwMDYyOzAwNjEgMjBFQSAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDMxNiAzMDJBIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMxQiAzMDJBIDMwMkEgMDMxNiAwMDYyOzAwNjEgMDMxQiAzMDJBIDMwMkEgMDMxNiAwMDYyOzAwNjEgMDMxQiAzMDJBIDMwMkEgMDMxNiAwMDYyOzAwNjEgMDMxQiAzMDJBIDMwMkEgMDMxNiAwMDYyOworMDA2MSAzMDJBIDAzMTYgMzAyQSAwMzFCIDAwNjI7MDA2MSAwMzFCIDMwMkEgMzAyQSAwMzE2IDAwNjI7MDA2MSAwMzFCIDMwMkEgMzAyQSAwMzE2IDAwNjI7MDA2MSAwMzFCIDMwMkEgMzAyQSAwMzE2IDAwNjI7MDA2MSAwMzFCIDMwMkEgMzAyQSAwMzE2IDAwNjI7CiswMDYxIDAzMDAgMDVBRSAxRDE2RCAzMDJCIDAwNjI7MDBFMCAxRDE2RCAwNUFFIDMwMkIgMDA2MjswMDYxIDFEMTZEIDA1QUUgMzAyQiAwMzAwIDAwNjI7MDBFMCAxRDE2RCAwNUFFIDMwMkIgMDA2MjswMDYxIDFEMTZEIDA1QUUgMzAyQiAwMzAwIDAwNjI7CiswMDYxIDMwMkIgMDMwMCAwNUFFIDFEMTZEIDAwNjI7MDBFMCAxRDE2RCAzMDJCIDA1QUUgMDA2MjswMDYxIDFEMTZEIDMwMkIgMDVBRSAwMzAwIDAwNjI7MDBFMCAxRDE2RCAzMDJCIDA1QUUgMDA2MjswMDYxIDFEMTZEIDMwMkIgMDVBRSAwMzAwIDAwNjI7CiswMDYxIDAzNjIgMDMxNSAwMzAwIDMwMkMgMDA2MjswMEUwIDAzMTUgMzAyQyAwMzYyIDAwNjI7MDA2MSAwMzAwIDAzMTUgMzAyQyAwMzYyIDAwNjI7MDBFMCAwMzE1IDMwMkMgMDM2MiAwMDYyOzAwNjEgMDMwMCAwMzE1IDMwMkMgMDM2MiAwMDYyOworMDA2MSAzMDJDIDAzNjIgMDMxNSAwMzAwIDAwNjI7MDBFMCAzMDJDIDAzMTUgMDM2MiAwMDYyOzAwNjEgMDMwMCAzMDJDIDAzMTUgMDM2MiAwMDYyOzAwRTAgMzAyQyAwMzE1IDAzNjIgMDA2MjswMDYxIDAzMDAgMzAyQyAwMzE1IDAzNjIgMDA2MjsKKzAwNjEgMzAyRSAwNTlBIDAzMTYgMzAyRCAwMDYyOzAwNjEgMDMxNiAwNTlBIDMwMkQgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDMwMkQgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDMwMkQgMzAyRSAwMDYyOzAwNjEgMDMxNiAwNTlBIDMwMkQgMzAyRSAwMDYyOworMDA2MSAzMDJEIDMwMkUgMDU5QSAwMzE2IDAwNjI7MDA2MSAwMzE2IDMwMkQgMDU5QSAzMDJFIDAwNjI7MDA2MSAwMzE2IDMwMkQgMDU5QSAzMDJFIDAwNjI7MDA2MSAwMzE2IDMwMkQgMDU5QSAzMDJFIDAwNjI7MDA2MSAwMzE2IDMwMkQgMDU5QSAzMDJFIDAwNjI7CiswMDYxIDFEMTZEIDMwMkUgMDU5QSAzMDJFIDAwNjI7MDA2MSAwNTlBIDMwMkUgMzAyRSAxRDE2RCAwMDYyOzAwNjEgMDU5QSAzMDJFIDMwMkUgMUQxNkQgMDA2MjswMDYxIDA1OUEgMzAyRSAzMDJFIDFEMTZEIDAwNjI7MDA2MSAwNTlBIDMwMkUgMzAyRSAxRDE2RCAwMDYyOworMDA2MSAzMDJFIDFEMTZEIDMwMkUgMDU5QSAwMDYyOzAwNjEgMDU5QSAzMDJFIDMwMkUgMUQxNkQgMDA2MjswMDYxIDA1OUEgMzAyRSAzMDJFIDFEMTZEIDAwNjI7MDA2MSAwNTlBIDMwMkUgMzAyRSAxRDE2RCAwMDYyOzAwNjEgMDU5QSAzMDJFIDMwMkUgMUQxNkQgMDA2MjsKKzAwNjEgMUQxNkQgMzAyRSAwNTlBIDMwMkYgMDA2MjswMDYxIDA1OUEgMzAyRSAzMDJGIDFEMTZEIDAwNjI7MDA2MSAwNTlBIDMwMkUgMzAyRiAxRDE2RCAwMDYyOzAwNjEgMDU5QSAzMDJFIDMwMkYgMUQxNkQgMDA2MjswMDYxIDA1OUEgMzAyRSAzMDJGIDFEMTZEIDAwNjI7CiswMDYxIDMwMkYgMUQxNkQgMzAyRSAwNTlBIDAwNjI7MDA2MSAwNTlBIDMwMkYgMzAyRSAxRDE2RCAwMDYyOzAwNjEgMDU5QSAzMDJGIDMwMkUgMUQxNkQgMDA2MjswMDYxIDA1OUEgMzAyRiAzMDJFIDFEMTZEIDAwNjI7MDA2MSAwNTlBIDMwMkYgMzAyRSAxRDE2RCAwMDYyOworMDA2MSAwOTREIDMwOTkgMDkzQyAzMDk5IDAwNjI7MDA2MSAwOTNDIDMwOTkgMzA5OSAwOTREIDAwNjI7MDA2MSAwOTNDIDMwOTkgMzA5OSAwOTREIDAwNjI7MDA2MSAwOTNDIDMwOTkgMzA5OSAwOTREIDAwNjI7MDA2MSAwOTNDIDMwOTkgMzA5OSAwOTREIDAwNjI7CiswMDYxIDMwOTkgMDk0RCAzMDk5IDA5M0MgMDA2MjswMDYxIDA5M0MgMzA5OSAzMDk5IDA5NEQgMDA2MjswMDYxIDA5M0MgMzA5OSAzMDk5IDA5NEQgMDA2MjswMDYxIDA5M0MgMzA5OSAzMDk5IDA5NEQgMDA2MjswMDYxIDA5M0MgMzA5OSAzMDk5IDA5NEQgMDA2MjsKKzAwNjEgMDk0RCAzMDk5IDA5M0MgMzA5QSAwMDYyOzAwNjEgMDkzQyAzMDk5IDMwOUEgMDk0RCAwMDYyOzAwNjEgMDkzQyAzMDk5IDMwOUEgMDk0RCAwMDYyOzAwNjEgMDkzQyAzMDk5IDMwOUEgMDk0RCAwMDYyOzAwNjEgMDkzQyAzMDk5IDMwOUEgMDk0RCAwMDYyOworMDA2MSAzMDlBIDA5NEQgMzA5OSAwOTNDIDAwNjI7MDA2MSAwOTNDIDMwOUEgMzA5OSAwOTREIDAwNjI7MDA2MSAwOTNDIDMwOUEgMzA5OSAwOTREIDAwNjI7MDA2MSAwOTNDIDMwOUEgMzA5OSAwOTREIDAwNjI7MDA2MSAwOTNDIDMwOUEgMzA5OSAwOTREIDAwNjI7CiswMDYxIDA2NEIgRkIxRSAwNUMyIEZCMUUgMDA2MjswMDYxIDA1QzIgRkIxRSBGQjFFIDA2NEIgMDA2MjswMDYxIDA1QzIgRkIxRSBGQjFFIDA2NEIgMDA2MjswMDYxIDA1QzIgRkIxRSBGQjFFIDA2NEIgMDA2MjswMDYxIDA1QzIgRkIxRSBGQjFFIDA2NEIgMDA2MjsKKzAwNjEgRkIxRSAwNjRCIEZCMUUgMDVDMiAwMDYyOzAwNjEgMDVDMiBGQjFFIEZCMUUgMDY0QiAwMDYyOzAwNjEgMDVDMiBGQjFFIEZCMUUgMDY0QiAwMDYyOzAwNjEgMDVDMiBGQjFFIEZCMUUgMDY0QiAwMDYyOzAwNjEgMDVDMiBGQjFFIEZCMUUgMDY0QiAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSBGRTIwIDAwNjI7MDBFMCAwNUFFIEZFMjAgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIEZFMjAgMDMxNSAwMDYyOzAwRTAgMDVBRSBGRTIwIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCBGRTIwIDAzMTUgMDA2MjsKKzAwNjEgRkUyMCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSBGRTIwIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIwIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIwIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIwIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSBGRTIxIDAwNjI7MDBFMCAwNUFFIEZFMjEgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIEZFMjEgMDMxNSAwMDYyOzAwRTAgMDVBRSBGRTIxIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCBGRTIxIDAzMTUgMDA2MjsKKzAwNjEgRkUyMSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSBGRTIxIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIxIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIxIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIxIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSBGRTIyIDAwNjI7MDBFMCAwNUFFIEZFMjIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIEZFMjIgMDMxNSAwMDYyOzAwRTAgMDVBRSBGRTIyIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCBGRTIyIDAzMTUgMDA2MjsKKzAwNjEgRkUyMiAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSBGRTIyIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIyIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIyIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIyIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSBGRTIzIDAwNjI7MDBFMCAwNUFFIEZFMjMgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIEZFMjMgMDMxNSAwMDYyOzAwRTAgMDVBRSBGRTIzIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCBGRTIzIDAzMTUgMDA2MjsKKzAwNjEgRkUyMyAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSBGRTIzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIzIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSBGRTIzIDAzMDAgMDMxNSAwMDYyOworMDA2MSAzMDJBIDAzMUIgMDMyMSAxRDE2NSAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTY1IDMwMkEgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE2NSAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNjUgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTY1IDMwMkEgMDA2MjsKKzAwNjEgMUQxNjUgMzAyQSAwMzFCIDAzMjEgMDA2MjswMDYxIDAzMjEgMUQxNjUgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDFEMTY1IDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAxRDE2NSAwMzFCIDMwMkEgMDA2MjswMDYxIDAzMjEgMUQxNjUgMDMxQiAzMDJBIDAwNjI7CiswMDYxIDMwMkEgMDMxQiAwMzIxIDFEMTY2IDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNjYgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTY2IDMwMkEgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE2NiAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNjYgMzAyQSAwMDYyOworMDA2MSAxRDE2NiAzMDJBIDAzMUIgMDMyMSAwMDYyOzAwNjEgMDMyMSAxRDE2NiAwMzFCIDMwMkEgMDA2MjswMDYxIDAzMjEgMUQxNjYgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDFEMTY2IDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAxRDE2NiAwMzFCIDMwMkEgMDA2MjsKKzAwNjEgMDkzQyAwMzM0IDFEMTY3IDAwNjI7MDA2MSAwMzM0IDFEMTY3IDA5M0MgMDA2MjswMDYxIDAzMzQgMUQxNjcgMDkzQyAwMDYyOzAwNjEgMDMzNCAxRDE2NyAwOTNDIDAwNjI7MDA2MSAwMzM0IDFEMTY3IDA5M0MgMDA2MjsKKzAwNjEgMUQxNjcgMDkzQyAwMzM0IDAwNjI7MDA2MSAxRDE2NyAwMzM0IDA5M0MgMDA2MjswMDYxIDFEMTY3IDAzMzQgMDkzQyAwMDYyOzAwNjEgMUQxNjcgMDMzNCAwOTNDIDAwNjI7MDA2MSAxRDE2NyAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDkzQyAwMzM0IDFEMTY4IDAwNjI7MDA2MSAwMzM0IDFEMTY4IDA5M0MgMDA2MjswMDYxIDAzMzQgMUQxNjggMDkzQyAwMDYyOzAwNjEgMDMzNCAxRDE2OCAwOTNDIDAwNjI7MDA2MSAwMzM0IDFEMTY4IDA5M0MgMDA2MjsKKzAwNjEgMUQxNjggMDkzQyAwMzM0IDAwNjI7MDA2MSAxRDE2OCAwMzM0IDA5M0MgMDA2MjswMDYxIDFEMTY4IDAzMzQgMDkzQyAwMDYyOzAwNjEgMUQxNjggMDMzNCAwOTNDIDAwNjI7MDA2MSAxRDE2OCAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDkzQyAwMzM0IDFEMTY5IDAwNjI7MDA2MSAwMzM0IDFEMTY5IDA5M0MgMDA2MjswMDYxIDAzMzQgMUQxNjkgMDkzQyAwMDYyOzAwNjEgMDMzNCAxRDE2OSAwOTNDIDAwNjI7MDA2MSAwMzM0IDFEMTY5IDA5M0MgMDA2MjsKKzAwNjEgMUQxNjkgMDkzQyAwMzM0IDAwNjI7MDA2MSAxRDE2OSAwMzM0IDA5M0MgMDA2MjswMDYxIDFEMTY5IDAzMzQgMDkzQyAwMDYyOzAwNjEgMUQxNjkgMDMzNCAwOTNDIDAwNjI7MDA2MSAxRDE2OSAwMzM0IDA5M0MgMDA2MjsKKzAwNjEgMDVBRSAxRDE2RCAzMDJFIDFEMTZEIDAwNjI7MDA2MSAzMDJFIDFEMTZEIDFEMTZEIDA1QUUgMDA2MjswMDYxIDMwMkUgMUQxNkQgMUQxNkQgMDVBRSAwMDYyOzAwNjEgMzAyRSAxRDE2RCAxRDE2RCAwNUFFIDAwNjI7MDA2MSAzMDJFIDFEMTZEIDFEMTZEIDA1QUUgMDA2MjsKKzAwNjEgMUQxNkQgMDVBRSAxRDE2RCAzMDJFIDAwNjI7MDA2MSAzMDJFIDFEMTZEIDFEMTZEIDA1QUUgMDA2MjswMDYxIDMwMkUgMUQxNkQgMUQxNkQgMDVBRSAwMDYyOzAwNjEgMzAyRSAxRDE2RCAxRDE2RCAwNUFFIDAwNjI7MDA2MSAzMDJFIDFEMTZEIDFEMTZEIDA1QUUgMDA2MjsKKzAwNjEgMzAyQSAwMzFCIDAzMjEgMUQxNkUgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE2RSAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNkUgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTZFIDMwMkEgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE2RSAzMDJBIDAwNjI7CiswMDYxIDFEMTZFIDMwMkEgMDMxQiAwMzIxIDAwNjI7MDA2MSAwMzIxIDFEMTZFIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAxRDE2RSAwMzFCIDMwMkEgMDA2MjswMDYxIDAzMjEgMUQxNkUgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDFEMTZFIDAzMUIgMzAyQSAwMDYyOworMDA2MSAzMDJBIDAzMUIgMDMyMSAxRDE2RiAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTZGIDMwMkEgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE2RiAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNkYgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTZGIDMwMkEgMDA2MjsKKzAwNjEgMUQxNkYgMzAyQSAwMzFCIDAzMjEgMDA2MjswMDYxIDAzMjEgMUQxNkYgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDFEMTZGIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAxRDE2RiAwMzFCIDMwMkEgMDA2MjswMDYxIDAzMjEgMUQxNkYgMDMxQiAzMDJBIDAwNjI7CiswMDYxIDMwMkEgMDMxQiAwMzIxIDFEMTcwIDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNzAgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTcwIDMwMkEgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE3MCAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNzAgMzAyQSAwMDYyOworMDA2MSAxRDE3MCAzMDJBIDAzMUIgMDMyMSAwMDYyOzAwNjEgMDMyMSAxRDE3MCAwMzFCIDMwMkEgMDA2MjswMDYxIDAzMjEgMUQxNzAgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDFEMTcwIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAxRDE3MCAwMzFCIDMwMkEgMDA2MjsKKzAwNjEgMzAyQSAwMzFCIDAzMjEgMUQxNzEgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE3MSAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNzEgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTcxIDMwMkEgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE3MSAzMDJBIDAwNjI7CiswMDYxIDFEMTcxIDMwMkEgMDMxQiAwMzIxIDAwNjI7MDA2MSAwMzIxIDFEMTcxIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAxRDE3MSAwMzFCIDMwMkEgMDA2MjswMDYxIDAzMjEgMUQxNzEgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDFEMTcxIDAzMUIgMzAyQSAwMDYyOworMDA2MSAzMDJBIDAzMUIgMDMyMSAxRDE3MiAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTcyIDMwMkEgMDA2MjswMDYxIDAzMjEgMDMxQiAxRDE3MiAzMDJBIDAwNjI7MDA2MSAwMzIxIDAzMUIgMUQxNzIgMzAyQSAwMDYyOzAwNjEgMDMyMSAwMzFCIDFEMTcyIDMwMkEgMDA2MjsKKzAwNjEgMUQxNzIgMzAyQSAwMzFCIDAzMjEgMDA2MjswMDYxIDAzMjEgMUQxNzIgMDMxQiAzMDJBIDAwNjI7MDA2MSAwMzIxIDFEMTcyIDAzMUIgMzAyQSAwMDYyOzAwNjEgMDMyMSAxRDE3MiAwMzFCIDMwMkEgMDA2MjswMDYxIDAzMjEgMUQxNzIgMDMxQiAzMDJBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDFEMTdCIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxN0IgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTdCIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE3QiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxN0IgMDU5QSAwMDYyOworMDA2MSAxRDE3QiAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAxRDE3QiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxN0IgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMTdCIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE3QiAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMUQxN0MgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE3QyAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxN0MgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTdDIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE3QyAwNTlBIDAwNjI7CiswMDYxIDFEMTdDIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDFEMTdDIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE3QyAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxN0MgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMTdDIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAxRDE3RCAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTdEIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE3RCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxN0QgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTdEIDA1OUEgMDA2MjsKKzAwNjEgMUQxN0QgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMUQxN0QgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMTdEIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE3RCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxN0QgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDFEMTdFIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxN0UgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTdFIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE3RSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxN0UgMDU5QSAwMDYyOworMDA2MSAxRDE3RSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAxRDE3RSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxN0UgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMTdFIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE3RSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMUQxN0YgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE3RiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxN0YgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTdGIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE3RiAwNTlBIDAwNjI7CiswMDYxIDFEMTdGIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDFEMTdGIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE3RiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxN0YgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMTdGIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwNTlBIDAzMTYgMzAyQSAxRDE4MCAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTgwIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE4MCAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxODAgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTgwIDA1OUEgMDA2MjsKKzAwNjEgMUQxODAgMDU5QSAwMzE2IDMwMkEgMDA2MjswMDYxIDMwMkEgMUQxODAgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMTgwIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE4MCAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxODAgMDMxNiAwNTlBIDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDFEMTgxIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxODEgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTgxIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE4MSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxODEgMDU5QSAwMDYyOworMDA2MSAxRDE4MSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAxRDE4MSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxODEgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMTgxIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE4MSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMUQxODIgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE4MiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxODIgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMTgyIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE4MiAwNTlBIDAwNjI7CiswMDYxIDFEMTgyIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDFEMTgyIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE4MiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxODIgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMTgyIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAxRDE4NSAwMDYyOzAwRTAgMDVBRSAxRDE4NSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMUQxODUgMDMxNSAwMDYyOzAwRTAgMDVBRSAxRDE4NSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMUQxODUgMDMxNSAwMDYyOworMDA2MSAxRDE4NSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAxRDE4NSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxODUgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMTg1IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDE4NSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMUQxODYgMDA2MjswMEUwIDA1QUUgMUQxODYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDFEMTg2IDAzMTUgMDA2MjswMEUwIDA1QUUgMUQxODYgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDFEMTg2IDAzMTUgMDA2MjsKKzAwNjEgMUQxODYgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMUQxODYgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMTg2IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDE4NiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxODYgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDFEMTg3IDAwNjI7MDBFMCAwNUFFIDFEMTg3IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAxRDE4NyAwMzE1IDAwNjI7MDBFMCAwNUFFIDFEMTg3IDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAxRDE4NyAwMzE1IDAwNjI7CiswMDYxIDFEMTg3IDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDFEMTg3IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDE4NyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxODcgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMTg3IDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAxRDE4OCAwMDYyOzAwRTAgMDVBRSAxRDE4OCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMUQxODggMDMxNSAwMDYyOzAwRTAgMDVBRSAxRDE4OCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMUQxODggMDMxNSAwMDYyOworMDA2MSAxRDE4OCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAxRDE4OCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxODggMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMTg4IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDE4OCAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMUQxODkgMDA2MjswMEUwIDA1QUUgMUQxODkgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDFEMTg5IDAzMTUgMDA2MjswMEUwIDA1QUUgMUQxODkgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDFEMTg5IDAzMTUgMDA2MjsKKzAwNjEgMUQxODkgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMUQxODkgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMTg5IDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDE4OSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxODkgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDA1OUEgMDMxNiAzMDJBIDFEMThBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxOEEgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMThBIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE4QSAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxOEEgMDU5QSAwMDYyOworMDA2MSAxRDE4QSAwNTlBIDAzMTYgMzAyQSAwMDYyOzAwNjEgMzAyQSAxRDE4QSAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxOEEgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMThBIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE4QSAwMzE2IDA1OUEgMDA2MjsKKzAwNjEgMDU5QSAwMzE2IDMwMkEgMUQxOEIgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE4QiAwNTlBIDAwNjI7MDA2MSAzMDJBIDAzMTYgMUQxOEIgMDU5QSAwMDYyOzAwNjEgMzAyQSAwMzE2IDFEMThCIDA1OUEgMDA2MjswMDYxIDMwMkEgMDMxNiAxRDE4QiAwNTlBIDAwNjI7CiswMDYxIDFEMThCIDA1OUEgMDMxNiAzMDJBIDAwNjI7MDA2MSAzMDJBIDFEMThCIDAzMTYgMDU5QSAwMDYyOzAwNjEgMzAyQSAxRDE4QiAwMzE2IDA1OUEgMDA2MjswMDYxIDMwMkEgMUQxOEIgMDMxNiAwNTlBIDAwNjI7MDA2MSAzMDJBIDFEMThCIDAzMTYgMDU5QSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAxRDFBQSAwMDYyOzAwRTAgMDVBRSAxRDFBQSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMUQxQUEgMDMxNSAwMDYyOzAwRTAgMDVBRSAxRDFBQSAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMUQxQUEgMDMxNSAwMDYyOworMDA2MSAxRDFBQSAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAxRDFBQSAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxQUEgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMUFBIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDFBQSAwMzAwIDAzMTUgMDA2MjsKKzAwNjEgMDMxNSAwMzAwIDA1QUUgMUQxQUIgMDA2MjswMEUwIDA1QUUgMUQxQUIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDFEMUFCIDAzMTUgMDA2MjswMEUwIDA1QUUgMUQxQUIgMDMxNSAwMDYyOzAwNjEgMDVBRSAwMzAwIDFEMUFCIDAzMTUgMDA2MjsKKzAwNjEgMUQxQUIgMDMxNSAwMzAwIDA1QUUgMDA2MjswMDYxIDA1QUUgMUQxQUIgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMUFCIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDFBQiAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxQUIgMDMwMCAwMzE1IDAwNjI7CiswMDYxIDAzMTUgMDMwMCAwNUFFIDFEMUFDIDAwNjI7MDBFMCAwNUFFIDFEMUFDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAxRDFBQyAwMzE1IDAwNjI7MDBFMCAwNUFFIDFEMUFDIDAzMTUgMDA2MjswMDYxIDA1QUUgMDMwMCAxRDFBQyAwMzE1IDAwNjI7CiswMDYxIDFEMUFDIDAzMTUgMDMwMCAwNUFFIDAwNjI7MDA2MSAwNUFFIDFEMUFDIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDFBQyAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxQUMgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMUFDIDAzMDAgMDMxNSAwMDYyOworMDA2MSAwMzE1IDAzMDAgMDVBRSAxRDFBRCAwMDYyOzAwRTAgMDVBRSAxRDFBRCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMUQxQUQgMDMxNSAwMDYyOzAwRTAgMDVBRSAxRDFBRCAwMzE1IDAwNjI7MDA2MSAwNUFFIDAzMDAgMUQxQUQgMDMxNSAwMDYyOworMDA2MSAxRDFBRCAwMzE1IDAzMDAgMDVBRSAwMDYyOzAwNjEgMDVBRSAxRDFBRCAwMzAwIDAzMTUgMDA2MjswMDYxIDA1QUUgMUQxQUQgMDMwMCAwMzE1IDAwNjI7MDA2MSAwNUFFIDFEMUFEIDAzMDAgMDMxNSAwMDYyOzAwNjEgMDVBRSAxRDFBRCAwMzAwIDAzMTUgMDA2MjsKKyMKKyMgRU5EIE9GIEZJTEUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL1NwZWNpYWxDYXNpbmcudHh0IGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kYXRhL3VuaWNvZGUvU3BlY2lhbENhc2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjI1YWM5YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL1NwZWNpYWxDYXNpbmcudHh0CkBAIC0wLDAgKzEsMjU1IEBACisjIFNwZWNpYWxDYXNpbmctMy4yLjAudHh0CisjIERhdGU6IDIwMDItMDMtMTksMjM6MzE6NDIgR01UIFtNRF0KKyMKKyMgU3BlY2lhbCBDYXNpbmcgUHJvcGVydGllcworIworIyBUaGlzIGZpbGUgaXMgYSBzdXBwbGVtZW50IHRvIHRoZSBVbmljb2RlRGF0YSBmaWxlLgorIyBJdCBjb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXNpbmcgb2YgVW5pY29kZSBjaGFyYWN0ZXJzLgorIyAoRm9yIGNvbXBhdGliaWxpdHksIHRoZSBVbmljb2RlRGF0YS50eHQgZmlsZSBvbmx5IGNvbnRhaW5zIGNhc2UgbWFwcGluZ3MgZm9yCisjIGNoYXJhY3RlcnMgd2hlcmUgdGhleSBhcmUgMS0xLCBhbmQgZG9lcyBub3QgaGF2ZSBsb2NhbGUtc3BlY2lmaWMgbWFwcGluZ3MuKQorIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisjIFVUUiAjMjEgQ2FzZSBNYXBwaW5ncywgYXQgaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3JlcG9ydHMvdHIyMS8KKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgRm9ybWF0CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRoZSBlbnRyaWVzIGluIHRoaXMgZmlsZSBhcmUgaW4gdGhlIGZvbGxvd2luZyBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdDoKKyMKKyMgPGNvZGU+OyA8bG93ZXI+IDsgPHRpdGxlPiA7IDx1cHBlcj4gOyAoPGNvbmRpdGlvbl9saXN0PiA7KT8gIyA8Y29tbWVudD4KKyMKKyMgPGNvZGU+LCA8bG93ZXI+LCA8dGl0bGU+LCBhbmQgPHVwcGVyPiBwcm92aWRlIGNoYXJhY3RlciB2YWx1ZXMgaW4gaGV4LiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4KKyMgb25lIGNoYXJhY3RlciwgdGhleSBhcmUgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gT3RoZXIgdGhhbiBhcyB1c2VkIHRvIHNlcGFyYXRlIGVsZW1lbnRzLAorIyBzcGFjZXMgYXJlIHRvIGJlIGlnbm9yZWQuCisjCisjIFRoZSA8Y29uZGl0aW9uX2xpc3Q+IGlzIG9wdGlvbmFsLiBXaGVyZSBwcmVzZW50LCBpdCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBsb2NhbGVzIG9yIGNvbnRleHRzLAorIyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBJbiB0aGVzZSBjb25kaXRpb25zOgorIyAtIEEgY29uZGl0aW9uIGxpc3Qgb3ZlcnJpZGVzIHRoZSBub3JtYWwgYmVoYXZpb3IgaWYgYWxsIG9mIHRoZSBsaXN0ZWQgY29uZGl0aW9ucyBhcmUgdHJ1ZS4KKyMgLSBUaGUgY29udGV4dCBpcyBhbHdheXMgdGhlIGNvbnRleHQgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIG9yaWdpbmFsIHN0cmluZywKKyMgICBOT1QgaW4gdGhlIHJlc3VsdGluZyBzdHJpbmcuCisjIC0gQ2FzZSBkaXN0aW5jdGlvbnMgaW4gdGhlIGNvbmRpdGlvbiBsaXN0IGFyZSBub3Qgc2lnbmlmaWNhbnQuCisjIC0gQ29uZGl0aW9ucyBwcmVjZWRlZCBieSAiTm90XyIgcmVwcmVzZW50IHRoZSBuZWdhdGlvbiBvZiB0aGUgY29uZGl0aW9uLgorIworIyBBIGxvY2FsZSBpcyBkZWZpbmVkIGFzOgorIyA8bG9jYWxlPiA6PSA8SVNPXzYzOV9jb2RlPiAoICJfIiA8SVNPXzMxNjZfY29kZT4gKCAiXyIgPHZhcmlhbnQ+ICk/ICk/CisjIDxJU09fMzE2Nl9jb2RlPiA6PSAyLWxldHRlciBJU08gY291bnRyeSBjb2RlLAorIyA8SVNPXzYzOV9jb2RlPiA6PSAgMi1sZXR0ZXIgSVNPIGxhbmd1YWdlIGNvZGUKKyMKKyMgQSBjb250ZXh0IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nLCBhcyBkZWZpbmVkIGluIFVBWCAjMjE6IENhc2UgTWFwcGluZ3M6CisjICAgRmluYWxfU2lnbWEsIEFmdGVyX1NvZnRfRG90dGVkLCBNb3JlX0Fib3ZlLCBCZWZvcmVfRG90CisjCisjIFBhcnNlcnMgb2YgdGhpcyBmaWxlIG11c3QgYmUgcHJlcGFyZWQgdG8gZGVhbCBmdXR1cmUgYWRkaXRpb25zIHRvIHRoaXMgZm9ybWF0OgorIyAgKiBBZGRpdGlvbmFsIGNvbnRleHRzCisjICAqIEFkZGl0aW9uYWwgZmllbGRzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVW5jb25kaXRpb25hbCBtYXBwaW5ncworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIFRoZSBHZXJtYW4gZXMtemVkIGlzIHNwZWNpYWwtLXRoZSBub3JtYWwgbWFwcGluZyBpcyB0byBTUy4KKyMgTm90ZTogdGhlIHRpdGxlY2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgaW4gcHJhY3RpY2UuIEl0IGlzIGVxdWFsIHRvIHRpdGxlY2FzZSh1cHBlcmNhc2UoPGVzLXplZD4pKQorCiswMERGOyAwMERGOyAwMDUzIDAwNzM7IDAwNTMgMDA1MzsgIyBMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgUworCisjIFByZXNlcnZlIGNhbm9uaWNhbCBlcXVpdmFsZW5jZSBmb3IgSSB3aXRoIGRvdC4gVHVya2ljIGlzIGhhbmRsZWQgYmVsb3cuCisKKzAxMzA7IDAwNjkgMDMwNzsgMDEzMDsgMDEzMDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCisKKyMgTGlnYXR1cmVzCisKK0ZCMDA7IEZCMDA7IDAwNDYgMDA2NjsgMDA0NiAwMDQ2OyAjIExBVElOIFNNQUxMIExJR0FUVVJFIEZGCitGQjAxOyBGQjAxOyAwMDQ2IDAwNjk7IDAwNDYgMDA0OTsgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBGSQorRkIwMjsgRkIwMjsgMDA0NiAwMDZDOyAwMDQ2IDAwNEM7ICMgTEFUSU4gU01BTEwgTElHQVRVUkUgRkwKK0ZCMDM7IEZCMDM7IDAwNDYgMDA2NiAwMDY5OyAwMDQ2IDAwNDYgMDA0OTsgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBGRkkKK0ZCMDQ7IEZCMDQ7IDAwNDYgMDA2NiAwMDZDOyAwMDQ2IDAwNDYgMDA0QzsgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBGRkwKK0ZCMDU7IEZCMDU7IDAwNTMgMDA3NDsgMDA1MyAwMDU0OyAjIExBVElOIFNNQUxMIExJR0FUVVJFIExPTkcgUyBUCitGQjA2OyBGQjA2OyAwMDUzIDAwNzQ7IDAwNTMgMDA1NDsgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBTVAorCiswNTg3OyAwNTg3OyAwNTM1IDA1ODI7IDA1MzUgMDU1MjsgIyBBUk1FTklBTiBTTUFMTCBMSUdBVFVSRSBFQ0ggWUlXTgorRkIxMzsgRkIxMzsgMDU0NCAwNTc2OyAwNTQ0IDA1NDY7ICMgQVJNRU5JQU4gU01BTEwgTElHQVRVUkUgTUVOIE5PVworRkIxNDsgRkIxNDsgMDU0NCAwNTY1OyAwNTQ0IDA1MzU7ICMgQVJNRU5JQU4gU01BTEwgTElHQVRVUkUgTUVOIEVDSAorRkIxNTsgRkIxNTsgMDU0NCAwNTZCOyAwNTQ0IDA1M0I7ICMgQVJNRU5JQU4gU01BTEwgTElHQVRVUkUgTUVOIElOSQorRkIxNjsgRkIxNjsgMDU0RSAwNTc2OyAwNTRFIDA1NDY7ICMgQVJNRU5JQU4gU01BTEwgTElHQVRVUkUgVkVXIE5PVworRkIxNzsgRkIxNzsgMDU0NCAwNTZEOyAwNTQ0IDA1M0Q7ICMgQVJNRU5JQU4gU01BTEwgTElHQVRVUkUgTUVOIFhFSAorCisjIE5vIGNvcnJlc3BvbmRpbmcgdXBwZXJjYXNlIHByZWNvbXBvc2VkIGNoYXJhY3RlcgorCiswMTQ5OyAwMTQ5OyAwMkJDIDAwNEU7IDAyQkMgMDA0RTsgIyBMQVRJTiBTTUFMTCBMRVRURVIgTiBQUkVDRURFRCBCWSBBUE9TVFJPUEhFCiswMzkwOyAwMzkwOyAwMzk5IDAzMDggMDMwMTsgMDM5OSAwMzA4IDAzMDE7ICMgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EgQU5EIFRPTk9TCiswM0IwOyAwM0IwOyAwM0E1IDAzMDggMDMwMTsgMDNBNSAwMzA4IDAzMDE7ICMgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIFRPTk9TCiswMUYwOyAwMUYwOyAwMDRBIDAzMEM7IDAwNEEgMDMwQzsgIyBMQVRJTiBTTUFMTCBMRVRURVIgSiBXSVRIIENBUk9OCisxRTk2OyAxRTk2OyAwMDQ4IDAzMzE7IDAwNDggMDMzMTsgIyBMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIExJTkUgQkVMT1cKKzFFOTc7IDFFOTc7IDAwNTQgMDMwODsgMDA1NCAwMzA4OyAjIExBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggRElBRVJFU0lTCisxRTk4OyAxRTk4OyAwMDU3IDAzMEE7IDAwNTcgMDMwQTsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVyBXSVRIIFJJTkcgQUJPVkUKKzFFOTk7IDFFOTk7IDAwNTkgMDMwQTsgMDA1OSAwMzBBOyAjIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggUklORyBBQk9WRQorMUU5QTsgMUU5QTsgMDA0MSAwMkJFOyAwMDQxIDAyQkU7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSUdIVCBIQUxGIFJJTkcKKzFGNTA7IDFGNTA7IDAzQTUgMDMxMzsgMDNBNSAwMzEzOyAjIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEkKKzFGNTI7IDFGNTI7IDAzQTUgMDMxMyAwMzAwOyAwM0E1IDAzMTMgMDMwMDsgIyBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBTSUxJIEFORCBWQVJJQQorMUY1NDsgMUY1NDsgMDNBNSAwMzEzIDAzMDE7IDAzQTUgMDMxMyAwMzAxOyAjIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEkgQU5EIE9YSUEKKzFGNTY7IDFGNTY7IDAzQTUgMDMxMyAwMzQyOyAwM0E1IDAzMTMgMDM0MjsgIyBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorMUZCNjsgMUZCNjsgMDM5MSAwMzQyOyAwMzkxIDAzNDI7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUEVSSVNQT01FTkkKKzFGQzY7IDFGQzY7IDAzOTcgMDM0MjsgMDM5NyAwMzQyOyAjIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQRVJJU1BPTUVOSQorMUZEMjsgMUZEMjsgMDM5OSAwMzA4IDAzMDA7IDAzOTkgMDMwOCAwMzAwOyAjIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBWQVJJQQorMUZEMzsgMUZEMzsgMDM5OSAwMzA4IDAzMDE7IDAzOTkgMDMwOCAwMzAxOyAjIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBPWElBCisxRkQ2OyAxRkQ2OyAwMzk5IDAzNDI7IDAzOTkgMDM0MjsgIyBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFBFUklTUE9NRU5JCisxRkQ3OyAxRkQ3OyAwMzk5IDAzMDggMDM0MjsgMDM5OSAwMzA4IDAzNDI7ICMgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EgQU5EIFBFUklTUE9NRU5JCisxRkUyOyAxRkUyOyAwM0E1IDAzMDggMDMwMDsgMDNBNSAwMzA4IDAzMDA7ICMgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIFZBUklBCisxRkUzOyAxRkUzOyAwM0E1IDAzMDggMDMwMTsgMDNBNSAwMzA4IDAzMDE7ICMgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIE9YSUEKKzFGRTQ7IDFGRTQ7IDAzQTEgMDMxMzsgMDNBMSAwMzEzOyAjIEdSRUVLIFNNQUxMIExFVFRFUiBSSE8gV0lUSCBQU0lMSQorMUZFNjsgMUZFNjsgMDNBNSAwMzQyOyAwM0E1IDAzNDI7ICMgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQRVJJU1BPTUVOSQorMUZFNzsgMUZFNzsgMDNBNSAwMzA4IDAzNDI7IDAzQTUgMDMwOCAwMzQyOyAjIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBIEFORCBQRVJJU1BPTUVOSQorMUZGNjsgMUZGNjsgMDNBOSAwMzQyOyAwM0E5IDAzNDI7ICMgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUEVSSVNQT01FTkkKKworIyBJTVBPUlRBTlQtd2hlbiBjYXBpdGFsaXppbmcgaW90YS1zdWJzY3JpcHQgKDAzNDUpCisjICBJdCBNVVNUIGJlIGluIG5vcm1hbGl6ZWQgZm9ybS0tbW92ZWQgdG8gdGhlIGVuZCBvZiBhbnkgc2VxdWVuY2Ugb2YgY29tYmluaW5nIG1hcmtzLgorIyAgVGhpcyBpcyBiZWNhdXNlIGxvZ2ljYWxseSBpdCByZXByZXNlbnRzIGEgZm9sbG93aW5nIGJhc2UgY2hhcmFjdGVyIQorIyAgRS5nLiA8aW90YV9zdWJzY3JpcHQ+ICg8TW4+IHwgPE1jPiB8IDxNZT4pKyA9PiAoPE1uPiB8IDxNYz4gfCA8TWU+KSsgPGlvdGFfc3Vic2NyaXB0PgorIyBJdCBzaG91bGQgbmV2ZXIgYmUgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBhIHdvcmQsIHNvIGluIHRpdGxlY2FzaW5nIGl0IGNhbiBiZSBsZWZ0IGFzIGlzLgorCisjIFRoZSBmb2xsb3dpbmcgY2FzZXMgYXJlIGFscmVhZHkgaW4gdGhlIFVuaWNvZGVEYXRhIGZpbGUsIHNvIGFyZSBvbmx5IGNvbW1lbnRlZCBoZXJlLgorCisjIDAzNDU7IDAzNDU7IDAzNDU7IDAzOTk7ICMgQ09NQklOSU5HIEdSRUVLIFlQT0dFR1JBTU1FTkkKKworIyBBbGwgbGV0dGVycyB3aXRoIFlQT0dFR1JBTU1FTkkgKGlvdGEtc3Vic2NyaXB0KSBvciBQUk9TR0VHUkFNTUVOSSAoaW90YSBhZHNjcmlwdCkKKyMgaGF2ZSBzcGVjaWFsIHVwcGVyY2FzZXMuCisjIE5vdGU6IGNoYXJhY3RlcnMgd2l0aCBQUk9TR0VHUkFNTUVOSSBhcmUgYWN0dWFsbHkgdGl0bGVjYXNlLCBub3QgdXBwZXJjYXNlIQorCisxRjgwOyAxRjgwOyAxRjg4OyAxRjA4IDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFlQT0dFR1JBTU1FTkkKKzFGODE7IDFGODE7IDFGODk7IDFGMDkgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUY4MjsgMUY4MjsgMUY4QTsgMUYwQSAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUY4MzsgMUY4MzsgMUY4QjsgMUYwQiAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUY4NDsgMUY4NDsgMUY4QzsgMUYwQyAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCisxRjg1OyAxRjg1OyAxRjhEOyAxRjBEIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzFGODY7IDFGODY7IDFGOEU7IDFGMEUgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzFGODc7IDFGODc7IDFGOEY7IDFGMEYgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzFGODg7IDFGODA7IDFGODg7IDFGMDggMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSQorMUY4OTsgMUY4MTsgMUY4OTsgMUYwOSAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBST1NHRUdSQU1NRU5JCisxRjhBOyAxRjgyOyAxRjhBOyAxRjBBIDAzOTk7ICMgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCisxRjhCOyAxRjgzOyAxRjhCOyAxRjBCIDAzOTk7ICMgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCisxRjhDOyAxRjg0OyAxRjhDOyAxRjBDIDAzOTk7ICMgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgUFJPU0dFR1JBTU1FTkkKKzFGOEQ7IDFGODU7IDFGOEQ7IDFGMEQgMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSQorMUY4RTsgMUY4NjsgMUY4RTsgMUYwRSAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSQorMUY4RjsgMUY4NzsgMUY4RjsgMUYwRiAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSQorMUY5MDsgMUY5MDsgMUY5ODsgMUYyOCAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgWVBPR0VHUkFNTUVOSQorMUY5MTsgMUY5MTsgMUY5OTsgMUYyOSAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUY5MjsgMUY5MjsgMUY5QTsgMUYyQSAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzFGOTM7IDFGOTM7IDFGOUI7IDFGMkIgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JCisxRjk0OyAxRjk0OyAxRjlDOyAxRjJDIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCisxRjk1OyAxRjk1OyAxRjlEOyAxRjJEIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCisxRjk2OyAxRjk2OyAxRjlFOyAxRjJFIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSSBBTkQgWVBPR0VHUkFNTUVOSQorMUY5NzsgMUY5NzsgMUY5RjsgMUYyRiAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzFGOTg7IDFGOTA7IDFGOTg7IDFGMjggMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgUFJPU0dFR1JBTU1FTkkKKzFGOTk7IDFGOTE7IDFGOTk7IDFGMjkgMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUFJPU0dFR1JBTU1FTkkKKzFGOUE7IDFGOTI7IDFGOUE7IDFGMkEgMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCisxRjlCOyAxRjkzOyAxRjlCOyAxRjJCIDAzOTk7ICMgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORCBQUk9TR0VHUkFNTUVOSQorMUY5QzsgMUY5NDsgMUY5QzsgMUYyQyAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSQorMUY5RDsgMUY5NTsgMUY5RDsgMUYyRCAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSQorMUY5RTsgMUY5NjsgMUY5RTsgMUYyRSAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSSBBTkQgUFJPU0dFR1JBTU1FTkkKKzFGOUY7IDFGOTc7IDFGOUY7IDFGMkYgMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFBST1NHRUdSQU1NRU5JCisxRkEwOyAxRkEwOyAxRkE4OyAxRjY4IDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFlQT0dFR1JBTU1FTkkKKzFGQTE7IDFGQTE7IDFGQTk7IDFGNjkgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUZBMjsgMUZBMjsgMUZBQTsgMUY2QSAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUZBMzsgMUZBMzsgMUZBQjsgMUY2QiAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUZBNDsgMUZBNDsgMUZBQzsgMUY2QyAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCisxRkE1OyAxRkE1OyAxRkFEOyAxRjZEIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzFGQTY7IDFGQTY7IDFGQUU7IDFGNkUgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzFGQTc7IDFGQTc7IDFGQUY7IDFGNkYgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKzFGQTg7IDFGQTA7IDFGQTg7IDFGNjggMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSQorMUZBOTsgMUZBMTsgMUZBOTsgMUY2OSAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFBST1NHRUdSQU1NRU5JCisxRkFBOyAxRkEyOyAxRkFBOyAxRjZBIDAzOTk7ICMgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCisxRkFCOyAxRkEzOyAxRkFCOyAxRjZCIDAzOTk7ICMgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JCisxRkFDOyAxRkE0OyAxRkFDOyAxRjZDIDAzOTk7ICMgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgUFJPU0dFR1JBTU1FTkkKKzFGQUQ7IDFGQTU7IDFGQUQ7IDFGNkQgMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSQorMUZBRTsgMUZBNjsgMUZBRTsgMUY2RSAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSQorMUZBRjsgMUZBNzsgMUZBRjsgMUY2RiAwMzk5OyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSQorMUZCMzsgMUZCMzsgMUZCQzsgMDM5MSAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFlQT0dFR1JBTU1FTkkKKzFGQkM7IDFGQjM7IDFGQkM7IDAzOTEgMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBST1NHRUdSQU1NRU5JCisxRkMzOyAxRkMzOyAxRkNDOyAwMzk3IDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFlQT0dFR1JBTU1FTkkKKzFGQ0M7IDFGQzM7IDFGQ0M7IDAzOTcgMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQUk9TR0VHUkFNTUVOSQorMUZGMzsgMUZGMzsgMUZGQzsgMDNBOSAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFlQT0dFR1JBTU1FTkkKKzFGRkM7IDFGRjM7IDFGRkM7IDAzQTkgMDM5OTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBST1NHRUdSQU1NRU5JCisKKyMgU29tZSBjaGFyYWN0ZXJzIHdpdGggWVBPR0VHUkFNTUVOSSBhcmUgYWxzbyBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgdGl0bGVjYXNlcworCisxRkIyOyAxRkIyOyAxRkJBIDAzNDU7IDFGQkEgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUZCNDsgMUZCNDsgMDM4NiAwMzQ1OyAwMzg2IDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggT1hJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUZDMjsgMUZDMjsgMUZDQSAwMzQ1OyAxRkNBIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JCisxRkM0OyAxRkM0OyAwMzg5IDAzNDU7IDAzODkgMDM5OTsgIyBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggT1hJQSBBTkQgWVBPR0VHUkFNTUVOSQorMUZGMjsgMUZGMjsgMUZGQSAwMzQ1OyAxRkZBIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkkKKzFGRjQ7IDFGRjQ7IDAzOEYgMDM0NTsgMDM4RiAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkkKKworMUZCNzsgMUZCNzsgMDM5MSAwMzQyIDAzNDU7IDAzOTEgMDM0MiAwMzk5OyAjIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JCisxRkM3OyAxRkM3OyAwMzk3IDAzNDIgMDM0NTsgMDM5NyAwMzQyIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JCisxRkY3OyAxRkY3OyAwM0E5IDAzNDIgMDM0NTsgMDNBOSAwMzQyIDAzOTk7ICMgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBDb25kaXRpb25hbCBtYXBwaW5ncworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIFNwZWNpYWwgY2FzZSBmb3IgZmluYWwgZm9ybSBvZiBzaWdtYQorCiswM0EzOyAwM0MyOyAwM0EzOyAwM0EzOyBGaW5hbF9TaWdtYTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBTSUdNQQorCisjIE5vdGU6IHRoZSBmb2xsb3dpbmcgY2FzZXMgZm9yIG5vbi1maW5hbCBhcmUgYWxyZWFkeSBpbiB0aGUgVW5pY29kZURhdGEgZmlsZS4KKworIyAwM0EzOyAwM0MzOyAwM0EzOyAwM0EzOyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIFNJR01BCisjIDAzQzM7IDAzQzM7IDAzQTM7IDAzQTM7ICMgR1JFRUsgU01BTEwgTEVUVEVSIFNJR01BCisjIDAzQzI7IDAzQzI7IDAzQTM7IDAzQTM7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEZJTkFMIFNJR01BCisKKyMgTm90ZTogdGhlIGZvbGxvd2luZyBjYXNlcyBhcmUgbm90IGluY2x1ZGVkLCBzaW5jZSB0aGV5IHdvdWxkIGNhc2UtZm9sZCBpbiBsb3dlcmNhc2luZworCisjIDAzQzM7IDAzQzI7IDAzQTM7IDAzQTM7IEZpbmFsX1NpZ21hOyAjIEdSRUVLIFNNQUxMIExFVFRFUiBTSUdNQQorIyAwM0MyOyAwM0MzOyAwM0EzOyAwM0EzOyBOb3RfRmluYWxfU2lnbWE7ICMgR1JFRUsgU01BTEwgTEVUVEVSIEZJTkFMIFNJR01BCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTG9jYWxlLXNlbnNpdGl2ZSBtYXBwaW5ncworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIExpdGh1YW5pYW4KKworIyBMaXRodWFuaWFuIHJldGFpbnMgdGhlIGRvdCBpbiBhIGxvd2VyY2FzZSBpIHdoZW4gZm9sbG93ZWQgYnkgYWNjZW50cy4KKworIyBSZW1vdmUgRE9UIEFCT1ZFIGFmdGVyICJpIiB3aXRoIHVwcGVyIG9yIHRpdGxlY2FzZQorCiswMzA3OyAwMzA3OyA7IDsgbHQgQWZ0ZXJfU29mdF9Eb3R0ZWQ7ICMgQ09NQklOSU5HIERPVCBBQk9WRQorCisjIEludHJvZHVjZSBhbiBleHBsaWNpdCBkb3QgYWJvdmUgd2hlbiBsb3dlcmNhc2luZyBjYXBpdGFsIEkncyBhbmQgSidzCisjIHdoZW5ldmVyIHRoZXJlIGFyZSBtb3JlIGFjY2VudHMgYWJvdmUuCisjIChvZiB0aGUgYWNjZW50cyB1c2VkIGluIExpdGh1YW5pYW46IGdyYXZlLCBhY3V0ZSwgdGlsZGUgYWJvdmUsIGFuZCBvZ29uZWspCisKKzAwNDk7IDAwNjkgMDMwNzsgMDA0OTsgMDA0OTsgbHQgTW9yZV9BYm92ZTsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCiswMDRBOyAwMDZBIDAzMDc7IDAwNEE7IDAwNEE7IGx0IE1vcmVfQWJvdmU7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorMDEyRTsgMDEyRiAwMzA3OyAwMTJFOyAwMTJFOyBsdCBNb3JlX0Fib3ZlOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBPR09ORUsKKzAwQ0M7IDAwNjkgMDMwNyAwMzAwOyAwMENDOyAwMENDOyBsdDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKzAwQ0Q7IDAwNjkgMDMwNyAwMzAxOyAwMENEOyAwMENEOyBsdDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKzAxMjg7IDAwNjkgMDMwNyAwMzAzOyAwMTI4OyAwMTI4OyBsdDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggVElMREUKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIFR1cmtpc2ggYW5kIEF6ZXJpCisKKyMgSSBhbmQgaS1kb3RsZXNzOyBJLWRvdCBhbmQgaSBhcmUgY2FzZSBwYWlycyBpbiBUdXJraXNoIGFuZCBBemVyaQorIyBUaGUgZm9sbG93aW5nIHJ1bGVzIGhhbmRsZSB0aG9zZSBjYXNlcy4KKworMDEzMDsgMDA2OTsgMDEzMDsgMDEzMDsgdHIgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCiswMTMwOyAwMDY5OyAwMTMwOyAwMTMwOyBheiAjIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBET1QgQUJPVkUKKworIyBXaGVuIGxvd2VyY2FzaW5nLCByZW1vdmUgZG90X2Fib3ZlIGluIHRoZSBzZXF1ZW5jZSBJICsgZG90X2Fib3ZlLCB3aGljaCB3aWxsIHR1cm4gaW50byBpLgorIyBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjYW5vbmljYWxseSBlcXVpdmFsZW50IEktZG90X2Fib3ZlCisKKzAzMDc7IDsgMDMwNzsgMDMwNzsgdHIgQWZ0ZXJfU29mdF9Eb3R0ZWQ7ICMgQ09NQklOSU5HIERPVCBBQk9WRQorMDMwNzsgOyAwMzA3OyAwMzA3OyBheiBBZnRlcl9Tb2Z0X0RvdHRlZDsgIyBDT01CSU5JTkcgRE9UIEFCT1ZFCisKKyMgV2hlbiBsb3dlcmNhc2luZywgdW5sZXNzIGFuIEkgaXMgYmVmb3JlIGEgZG90X2Fib3ZlLCBpdCB0dXJucyBpbnRvIGEgZG90bGVzcyBpLgorCiswMDQ5OyAwMTMxOyAwMDQ5OyAwMDQ5OyB0ciBOb3RfQmVmb3JlX0RvdDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCiswMDQ5OyAwMTMxOyAwMDQ5OyAwMDQ5OyBheiBOb3RfQmVmb3JlX0RvdDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisKKyMgV2hlbiB1cHBlcmNhc2luZywgaSB0dXJucyBpbnRvIGEgZG90dGVkIGNhcGl0YWwgSQorCiswMDY5OyAwMDY5OyAwMTMwOyAwMTMwOyB0cjsgIyBMQVRJTiBTTUFMTCBMRVRURVIgSQorMDA2OTsgMDA2OTsgMDEzMDsgMDEzMDsgYXo7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEkKKworIyBOb3RlOiB0aGUgZm9sbG93aW5nIGNhc2UgaXMgYWxyZWFkeSBpbiB0aGUgVW5pY29kZURhdGEgZmlsZS4KKworIyAwMTMxOyAwMTMxOyAwMDQ5OyAwMDQ5OyB0cjsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRE9UTEVTUyBJCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvdW5pY29kZS9Vbmljb2RlRGF0YS50eHQgYi9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvdW5pY29kZS9Vbmljb2RlRGF0YS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTI1YTY5MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS91bmljb2RlL1VuaWNvZGVEYXRhLnR4dApAQCAtMCwwICsxLDEzODc0IEBACiswMDAwOzxjb250cm9sPjtDYzswO0JOOzs7OztOO05VTEw7Ozs7CiswMDAxOzxjb250cm9sPjtDYzswO0JOOzs7OztOO1NUQVJUIE9GIEhFQURJTkc7Ozs7CiswMDAyOzxjb250cm9sPjtDYzswO0JOOzs7OztOO1NUQVJUIE9GIFRFWFQ7Ozs7CiswMDAzOzxjb250cm9sPjtDYzswO0JOOzs7OztOO0VORCBPRiBURVhUOzs7OworMDAwNDs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtFTkQgT0YgVFJBTlNNSVNTSU9OOzs7OworMDAwNTs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtFTlFVSVJZOzs7OworMDAwNjs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtBQ0tOT1dMRURHRTs7OzsKKzAwMDc7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047QkVMTDs7OzsKKzAwMDg7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047QkFDS1NQQUNFOzs7OworMDAwOTs8Y29udHJvbD47Q2M7MDtTOzs7OztOO0NIQVJBQ1RFUiBUQUJVTEFUSU9OOzs7OworMDAwQTs8Y29udHJvbD47Q2M7MDtCOzs7OztOO0xJTkUgRkVFRCAoTEYpOzs7OworMDAwQjs8Y29udHJvbD47Q2M7MDtTOzs7OztOO0xJTkUgVEFCVUxBVElPTjs7OzsKKzAwMEM7PGNvbnRyb2w+O0NjOzA7V1M7Ozs7O047Rk9STSBGRUVEIChGRik7Ozs7CiswMDBEOzxjb250cm9sPjtDYzswO0I7Ozs7O047Q0FSUklBR0UgUkVUVVJOIChDUik7Ozs7CiswMDBFOzxjb250cm9sPjtDYzswO0JOOzs7OztOO1NISUZUIE9VVDs7OzsKKzAwMEY7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047U0hJRlQgSU47Ozs7CiswMDEwOzxjb250cm9sPjtDYzswO0JOOzs7OztOO0RBVEEgTElOSyBFU0NBUEU7Ozs7CiswMDExOzxjb250cm9sPjtDYzswO0JOOzs7OztOO0RFVklDRSBDT05UUk9MIE9ORTs7OzsKKzAwMTI7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047REVWSUNFIENPTlRST0wgVFdPOzs7OworMDAxMzs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtERVZJQ0UgQ09OVFJPTCBUSFJFRTs7OzsKKzAwMTQ7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047REVWSUNFIENPTlRST0wgRk9VUjs7OzsKKzAwMTU7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047TkVHQVRJVkUgQUNLTk9XTEVER0U7Ozs7CiswMDE2Ozxjb250cm9sPjtDYzswO0JOOzs7OztOO1NZTkNIUk9OT1VTIElETEU7Ozs7CiswMDE3Ozxjb250cm9sPjtDYzswO0JOOzs7OztOO0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0s7Ozs7CiswMDE4Ozxjb250cm9sPjtDYzswO0JOOzs7OztOO0NBTkNFTDs7OzsKKzAwMTk7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047RU5EIE9GIE1FRElVTTs7OzsKKzAwMUE7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047U1VCU1RJVFVURTs7OzsKKzAwMUI7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047RVNDQVBFOzs7OworMDAxQzs8Y29udHJvbD47Q2M7MDtCOzs7OztOO0lORk9STUFUSU9OIFNFUEFSQVRPUiBGT1VSOzs7OworMDAxRDs8Y29udHJvbD47Q2M7MDtCOzs7OztOO0lORk9STUFUSU9OIFNFUEFSQVRPUiBUSFJFRTs7OzsKKzAwMUU7PGNvbnRyb2w+O0NjOzA7Qjs7Ozs7TjtJTkZPUk1BVElPTiBTRVBBUkFUT1IgVFdPOzs7OworMDAxRjs8Y29udHJvbD47Q2M7MDtTOzs7OztOO0lORk9STUFUSU9OIFNFUEFSQVRPUiBPTkU7Ozs7CiswMDIwO1NQQUNFO1pzOzA7V1M7Ozs7O047Ozs7OworMDAyMTtFWENMQU1BVElPTiBNQVJLO1BvOzA7T047Ozs7O047Ozs7OworMDAyMjtRVU9UQVRJT04gTUFSSztQbzswO09OOzs7OztOOzs7OzsKKzAwMjM7TlVNQkVSIFNJR047UG87MDtFVDs7Ozs7Tjs7Ozs7CiswMDI0O0RPTExBUiBTSUdOO1NjOzA7RVQ7Ozs7O047Ozs7OworMDAyNTtQRVJDRU5UIFNJR047UG87MDtFVDs7Ozs7Tjs7Ozs7CiswMDI2O0FNUEVSU0FORDtQbzswO09OOzs7OztOOzs7OzsKKzAwMjc7QVBPU1RST1BIRTtQbzswO09OOzs7OztOO0FQT1NUUk9QSEUtUVVPVEU7Ozs7CiswMDI4O0xFRlQgUEFSRU5USEVTSVM7UHM7MDtPTjs7Ozs7WTtPUEVOSU5HIFBBUkVOVEhFU0lTOzs7OworMDAyOTtSSUdIVCBQQVJFTlRIRVNJUztQZTswO09OOzs7OztZO0NMT1NJTkcgUEFSRU5USEVTSVM7Ozs7CiswMDJBO0FTVEVSSVNLO1BvOzA7T047Ozs7O047Ozs7OworMDAyQjtQTFVTIFNJR047U207MDtFVDs7Ozs7Tjs7Ozs7CiswMDJDO0NPTU1BO1BvOzA7Q1M7Ozs7O047Ozs7OworMDAyRDtIWVBIRU4tTUlOVVM7UGQ7MDtFVDs7Ozs7Tjs7Ozs7CiswMDJFO0ZVTEwgU1RPUDtQbzswO0NTOzs7OztOO1BFUklPRDs7OzsKKzAwMkY7U09MSURVUztQbzswO0VTOzs7OztOO1NMQVNIOzs7OworMDAzMDtESUdJVCBaRVJPO05kOzA7RU47OzA7MDswO047Ozs7OworMDAzMTtESUdJVCBPTkU7TmQ7MDtFTjs7MTsxOzE7Tjs7Ozs7CiswMDMyO0RJR0lUIFRXTztOZDswO0VOOzsyOzI7MjtOOzs7OzsKKzAwMzM7RElHSVQgVEhSRUU7TmQ7MDtFTjs7MzszOzM7Tjs7Ozs7CiswMDM0O0RJR0lUIEZPVVI7TmQ7MDtFTjs7NDs0OzQ7Tjs7Ozs7CiswMDM1O0RJR0lUIEZJVkU7TmQ7MDtFTjs7NTs1OzU7Tjs7Ozs7CiswMDM2O0RJR0lUIFNJWDtOZDswO0VOOzs2OzY7NjtOOzs7OzsKKzAwMzc7RElHSVQgU0VWRU47TmQ7MDtFTjs7Nzs3Ozc7Tjs7Ozs7CiswMDM4O0RJR0lUIEVJR0hUO05kOzA7RU47Ozg7ODs4O047Ozs7OworMDAzOTtESUdJVCBOSU5FO05kOzA7RU47Ozk7OTs5O047Ozs7OworMDAzQTtDT0xPTjtQbzswO0NTOzs7OztOOzs7OzsKKzAwM0I7U0VNSUNPTE9OO1BvOzA7T047Ozs7O047Ozs7OworMDAzQztMRVNTLVRIQU4gU0lHTjtTbTswO09OOzs7OztZOzs7OzsKKzAwM0Q7RVFVQUxTIFNJR047U207MDtPTjs7Ozs7Tjs7Ozs7CiswMDNFO0dSRUFURVItVEhBTiBTSUdOO1NtOzA7T047Ozs7O1k7Ozs7OworMDAzRjtRVUVTVElPTiBNQVJLO1BvOzA7T047Ozs7O047Ozs7OworMDA0MDtDT01NRVJDSUFMIEFUO1BvOzA7T047Ozs7O047Ozs7OworMDA0MTtMQVRJTiBDQVBJVEFMIExFVFRFUiBBO0x1OzA7TDs7Ozs7Tjs7OzswMDYxOworMDA0MjtMQVRJTiBDQVBJVEFMIExFVFRFUiBCO0x1OzA7TDs7Ozs7Tjs7OzswMDYyOworMDA0MztMQVRJTiBDQVBJVEFMIExFVFRFUiBDO0x1OzA7TDs7Ozs7Tjs7OzswMDYzOworMDA0NDtMQVRJTiBDQVBJVEFMIExFVFRFUiBEO0x1OzA7TDs7Ozs7Tjs7OzswMDY0OworMDA0NTtMQVRJTiBDQVBJVEFMIExFVFRFUiBFO0x1OzA7TDs7Ozs7Tjs7OzswMDY1OworMDA0NjtMQVRJTiBDQVBJVEFMIExFVFRFUiBGO0x1OzA7TDs7Ozs7Tjs7OzswMDY2OworMDA0NztMQVRJTiBDQVBJVEFMIExFVFRFUiBHO0x1OzA7TDs7Ozs7Tjs7OzswMDY3OworMDA0ODtMQVRJTiBDQVBJVEFMIExFVFRFUiBIO0x1OzA7TDs7Ozs7Tjs7OzswMDY4OworMDA0OTtMQVRJTiBDQVBJVEFMIExFVFRFUiBJO0x1OzA7TDs7Ozs7Tjs7OzswMDY5OworMDA0QTtMQVRJTiBDQVBJVEFMIExFVFRFUiBKO0x1OzA7TDs7Ozs7Tjs7OzswMDZBOworMDA0QjtMQVRJTiBDQVBJVEFMIExFVFRFUiBLO0x1OzA7TDs7Ozs7Tjs7OzswMDZCOworMDA0QztMQVRJTiBDQVBJVEFMIExFVFRFUiBMO0x1OzA7TDs7Ozs7Tjs7OzswMDZDOworMDA0RDtMQVRJTiBDQVBJVEFMIExFVFRFUiBNO0x1OzA7TDs7Ozs7Tjs7OzswMDZEOworMDA0RTtMQVRJTiBDQVBJVEFMIExFVFRFUiBOO0x1OzA7TDs7Ozs7Tjs7OzswMDZFOworMDA0RjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPO0x1OzA7TDs7Ozs7Tjs7OzswMDZGOworMDA1MDtMQVRJTiBDQVBJVEFMIExFVFRFUiBQO0x1OzA7TDs7Ozs7Tjs7OzswMDcwOworMDA1MTtMQVRJTiBDQVBJVEFMIExFVFRFUiBRO0x1OzA7TDs7Ozs7Tjs7OzswMDcxOworMDA1MjtMQVRJTiBDQVBJVEFMIExFVFRFUiBSO0x1OzA7TDs7Ozs7Tjs7OzswMDcyOworMDA1MztMQVRJTiBDQVBJVEFMIExFVFRFUiBTO0x1OzA7TDs7Ozs7Tjs7OzswMDczOworMDA1NDtMQVRJTiBDQVBJVEFMIExFVFRFUiBUO0x1OzA7TDs7Ozs7Tjs7OzswMDc0OworMDA1NTtMQVRJTiBDQVBJVEFMIExFVFRFUiBVO0x1OzA7TDs7Ozs7Tjs7OzswMDc1OworMDA1NjtMQVRJTiBDQVBJVEFMIExFVFRFUiBWO0x1OzA7TDs7Ozs7Tjs7OzswMDc2OworMDA1NztMQVRJTiBDQVBJVEFMIExFVFRFUiBXO0x1OzA7TDs7Ozs7Tjs7OzswMDc3OworMDA1ODtMQVRJTiBDQVBJVEFMIExFVFRFUiBYO0x1OzA7TDs7Ozs7Tjs7OzswMDc4OworMDA1OTtMQVRJTiBDQVBJVEFMIExFVFRFUiBZO0x1OzA7TDs7Ozs7Tjs7OzswMDc5OworMDA1QTtMQVRJTiBDQVBJVEFMIExFVFRFUiBaO0x1OzA7TDs7Ozs7Tjs7OzswMDdBOworMDA1QjtMRUZUIFNRVUFSRSBCUkFDS0VUO1BzOzA7T047Ozs7O1k7T1BFTklORyBTUVVBUkUgQlJBQ0tFVDs7OzsKKzAwNUM7UkVWRVJTRSBTT0xJRFVTO1BvOzA7T047Ozs7O047QkFDS1NMQVNIOzs7OworMDA1RDtSSUdIVCBTUVVBUkUgQlJBQ0tFVDtQZTswO09OOzs7OztZO0NMT1NJTkcgU1FVQVJFIEJSQUNLRVQ7Ozs7CiswMDVFO0NJUkNVTUZMRVggQUNDRU5UO1NrOzA7T047Ozs7O047U1BBQ0lORyBDSVJDVU1GTEVYOzs7OworMDA1RjtMT1cgTElORTtQYzswO09OOzs7OztOO1NQQUNJTkcgVU5ERVJTQ09SRTs7OzsKKzAwNjA7R1JBVkUgQUNDRU5UO1NrOzA7T047Ozs7O047U1BBQ0lORyBHUkFWRTs7OzsKKzAwNjE7TEFUSU4gU01BTEwgTEVUVEVSIEE7TGw7MDtMOzs7OztOOzs7MDA0MTs7MDA0MQorMDA2MjtMQVRJTiBTTUFMTCBMRVRURVIgQjtMbDswO0w7Ozs7O047OzswMDQyOzswMDQyCiswMDYzO0xBVElOIFNNQUxMIExFVFRFUiBDO0xsOzA7TDs7Ozs7Tjs7OzAwNDM7OzAwNDMKKzAwNjQ7TEFUSU4gU01BTEwgTEVUVEVSIEQ7TGw7MDtMOzs7OztOOzs7MDA0NDs7MDA0NAorMDA2NTtMQVRJTiBTTUFMTCBMRVRURVIgRTtMbDswO0w7Ozs7O047OzswMDQ1OzswMDQ1CiswMDY2O0xBVElOIFNNQUxMIExFVFRFUiBGO0xsOzA7TDs7Ozs7Tjs7OzAwNDY7OzAwNDYKKzAwNjc7TEFUSU4gU01BTEwgTEVUVEVSIEc7TGw7MDtMOzs7OztOOzs7MDA0Nzs7MDA0NworMDA2ODtMQVRJTiBTTUFMTCBMRVRURVIgSDtMbDswO0w7Ozs7O047OzswMDQ4OzswMDQ4CiswMDY5O0xBVElOIFNNQUxMIExFVFRFUiBJO0xsOzA7TDs7Ozs7Tjs7OzAwNDk7OzAwNDkKKzAwNkE7TEFUSU4gU01BTEwgTEVUVEVSIEo7TGw7MDtMOzs7OztOOzs7MDA0QTs7MDA0QQorMDA2QjtMQVRJTiBTTUFMTCBMRVRURVIgSztMbDswO0w7Ozs7O047OzswMDRCOzswMDRCCiswMDZDO0xBVElOIFNNQUxMIExFVFRFUiBMO0xsOzA7TDs7Ozs7Tjs7OzAwNEM7OzAwNEMKKzAwNkQ7TEFUSU4gU01BTEwgTEVUVEVSIE07TGw7MDtMOzs7OztOOzs7MDA0RDs7MDA0RAorMDA2RTtMQVRJTiBTTUFMTCBMRVRURVIgTjtMbDswO0w7Ozs7O047OzswMDRFOzswMDRFCiswMDZGO0xBVElOIFNNQUxMIExFVFRFUiBPO0xsOzA7TDs7Ozs7Tjs7OzAwNEY7OzAwNEYKKzAwNzA7TEFUSU4gU01BTEwgTEVUVEVSIFA7TGw7MDtMOzs7OztOOzs7MDA1MDs7MDA1MAorMDA3MTtMQVRJTiBTTUFMTCBMRVRURVIgUTtMbDswO0w7Ozs7O047OzswMDUxOzswMDUxCiswMDcyO0xBVElOIFNNQUxMIExFVFRFUiBSO0xsOzA7TDs7Ozs7Tjs7OzAwNTI7OzAwNTIKKzAwNzM7TEFUSU4gU01BTEwgTEVUVEVSIFM7TGw7MDtMOzs7OztOOzs7MDA1Mzs7MDA1MworMDA3NDtMQVRJTiBTTUFMTCBMRVRURVIgVDtMbDswO0w7Ozs7O047OzswMDU0OzswMDU0CiswMDc1O0xBVElOIFNNQUxMIExFVFRFUiBVO0xsOzA7TDs7Ozs7Tjs7OzAwNTU7OzAwNTUKKzAwNzY7TEFUSU4gU01BTEwgTEVUVEVSIFY7TGw7MDtMOzs7OztOOzs7MDA1Njs7MDA1NgorMDA3NztMQVRJTiBTTUFMTCBMRVRURVIgVztMbDswO0w7Ozs7O047OzswMDU3OzswMDU3CiswMDc4O0xBVElOIFNNQUxMIExFVFRFUiBYO0xsOzA7TDs7Ozs7Tjs7OzAwNTg7OzAwNTgKKzAwNzk7TEFUSU4gU01BTEwgTEVUVEVSIFk7TGw7MDtMOzs7OztOOzs7MDA1OTs7MDA1OQorMDA3QTtMQVRJTiBTTUFMTCBMRVRURVIgWjtMbDswO0w7Ozs7O047OzswMDVBOzswMDVBCiswMDdCO0xFRlQgQ1VSTFkgQlJBQ0tFVDtQczswO09OOzs7OztZO09QRU5JTkcgQ1VSTFkgQlJBQ0tFVDs7OzsKKzAwN0M7VkVSVElDQUwgTElORTtTbTswO09OOzs7OztOO1ZFUlRJQ0FMIEJBUjs7OzsKKzAwN0Q7UklHSFQgQ1VSTFkgQlJBQ0tFVDtQZTswO09OOzs7OztZO0NMT1NJTkcgQ1VSTFkgQlJBQ0tFVDs7OzsKKzAwN0U7VElMREU7U207MDtPTjs7Ozs7Tjs7Ozs7CiswMDdGOzxjb250cm9sPjtDYzswO0JOOzs7OztOO0RFTEVURTs7OzsKKzAwODA7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047Ozs7OworMDA4MTs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7Tjs7Ozs7CiswMDgyOzxjb250cm9sPjtDYzswO0JOOzs7OztOO0JSRUFLIFBFUk1JVFRFRCBIRVJFOzs7OworMDA4Mzs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtOTyBCUkVBSyBIRVJFOzs7OworMDA4NDs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7Tjs7Ozs7CiswMDg1Ozxjb250cm9sPjtDYzswO0I7Ozs7O047TkVYVCBMSU5FIChORUwpOzs7OworMDA4Njs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBOzs7OworMDA4Nzs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtFTkQgT0YgU0VMRUNURUQgQVJFQTs7OzsKKzAwODg7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047Q0hBUkFDVEVSIFRBQlVMQVRJT04gU0VUOzs7OworMDA4OTs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT047Ozs7CiswMDhBOzxjb250cm9sPjtDYzswO0JOOzs7OztOO0xJTkUgVEFCVUxBVElPTiBTRVQ7Ozs7CiswMDhCOzxjb250cm9sPjtDYzswO0JOOzs7OztOO1BBUlRJQUwgTElORSBGT1JXQVJEOzs7OworMDA4Qzs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtQQVJUSUFMIExJTkUgQkFDS1dBUkQ7Ozs7CiswMDhEOzxjb250cm9sPjtDYzswO0JOOzs7OztOO1JFVkVSU0UgTElORSBGRUVEOzs7OworMDA4RTs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtTSU5HTEUgU0hJRlQgVFdPOzs7OworMDA4Rjs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtTSU5HTEUgU0hJRlQgVEhSRUU7Ozs7CiswMDkwOzxjb250cm9sPjtDYzswO0JOOzs7OztOO0RFVklDRSBDT05UUk9MIFNUUklORzs7OzsKKzAwOTE7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047UFJJVkFURSBVU0UgT05FOzs7OworMDA5Mjs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtQUklWQVRFIFVTRSBUV087Ozs7CiswMDkzOzxjb250cm9sPjtDYzswO0JOOzs7OztOO1NFVCBUUkFOU01JVCBTVEFURTs7OzsKKzAwOTQ7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047Q0FOQ0VMIENIQVJBQ1RFUjs7OzsKKzAwOTU7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047TUVTU0FHRSBXQUlUSU5HOzs7OworMDA5Njs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtTVEFSVCBPRiBHVUFSREVEIEFSRUE7Ozs7CiswMDk3Ozxjb250cm9sPjtDYzswO0JOOzs7OztOO0VORCBPRiBHVUFSREVEIEFSRUE7Ozs7CiswMDk4Ozxjb250cm9sPjtDYzswO0JOOzs7OztOO1NUQVJUIE9GIFNUUklORzs7OzsKKzAwOTk7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047Ozs7OworMDA5QTs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVI7Ozs7CiswMDlCOzxjb250cm9sPjtDYzswO0JOOzs7OztOO0NPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUjs7OzsKKzAwOUM7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047U1RSSU5HIFRFUk1JTkFUT1I7Ozs7CiswMDlEOzxjb250cm9sPjtDYzswO0JOOzs7OztOO09QRVJBVElORyBTWVNURU0gQ09NTUFORDs7OzsKKzAwOUU7PGNvbnRyb2w+O0NjOzA7Qk47Ozs7O047UFJJVkFDWSBNRVNTQUdFOzs7OworMDA5Rjs8Y29udHJvbD47Q2M7MDtCTjs7Ozs7TjtBUFBMSUNBVElPTiBQUk9HUkFNIENPTU1BTkQ7Ozs7CiswMEEwO05PLUJSRUFLIFNQQUNFO1pzOzA7Q1M7PG5vQnJlYWs+IDAwMjA7Ozs7TjtOT04tQlJFQUtJTkcgU1BBQ0U7Ozs7CiswMEExO0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUks7UG87MDtPTjs7Ozs7Tjs7Ozs7CiswMEEyO0NFTlQgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzAwQTM7UE9VTkQgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzAwQTQ7Q1VSUkVOQ1kgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzAwQTU7WUVOIFNJR047U2M7MDtFVDs7Ozs7Tjs7Ozs7CiswMEE2O0JST0tFTiBCQVI7U287MDtPTjs7Ozs7TjtCUk9LRU4gVkVSVElDQUwgQkFSOzs7OworMDBBNztTRUNUSU9OIFNJR047U287MDtPTjs7Ozs7Tjs7Ozs7CiswMEE4O0RJQUVSRVNJUztTazswO09OOzxjb21wYXQ+IDAwMjAgMDMwODs7OztOO1NQQUNJTkcgRElBRVJFU0lTOzs7OworMDBBOTtDT1BZUklHSFQgU0lHTjtTbzswO09OOzs7OztOOzs7OzsKKzAwQUE7RkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1I7TGw7MDtMOzxzdXBlcj4gMDA2MTs7OztOOzs7OzsKKzAwQUI7TEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUks7UGk7MDtPTjs7Ozs7WTtMRUZUIFBPSU5USU5HIEdVSUxMRU1FVDsqOzs7CiswMEFDO05PVCBTSUdOO1NtOzA7T047Ozs7O047Ozs7OworMDBBRDtTT0ZUIEhZUEhFTjtQZDswO09OOzs7OztOOzs7OzsKKzAwQUU7UkVHSVNURVJFRCBTSUdOO1NvOzA7T047Ozs7O047UkVHSVNURVJFRCBUUkFERSBNQVJLIFNJR047Ozs7CiswMEFGO01BQ1JPTjtTazswO09OOzxjb21wYXQ+IDAwMjAgMDMwNDs7OztOO1NQQUNJTkcgTUFDUk9OOzs7OworMDBCMDtERUdSRUUgU0lHTjtTbzswO0VUOzs7OztOOzs7OzsKKzAwQjE7UExVUy1NSU5VUyBTSUdOO1NtOzA7RVQ7Ozs7O047UExVUy1PUi1NSU5VUyBTSUdOOzs7OworMDBCMjtTVVBFUlNDUklQVCBUV087Tm87MDtFTjs8c3VwZXI+IDAwMzI7MjsyOzI7TjtTVVBFUlNDUklQVCBESUdJVCBUV087Ozs7CiswMEIzO1NVUEVSU0NSSVBUIFRIUkVFO05vOzA7RU47PHN1cGVyPiAwMDMzOzM7MzszO047U1VQRVJTQ1JJUFQgRElHSVQgVEhSRUU7Ozs7CiswMEI0O0FDVVRFIEFDQ0VOVDtTazswO09OOzxjb21wYXQ+IDAwMjAgMDMwMTs7OztOO1NQQUNJTkcgQUNVVEU7Ozs7CiswMEI1O01JQ1JPIFNJR047TGw7MDtMOzxjb21wYXQ+IDAzQkM7Ozs7Tjs7OzAzOUM7OzAzOUMKKzAwQjY7UElMQ1JPVyBTSUdOO1NvOzA7T047Ozs7O047UEFSQUdSQVBIIFNJR047Ozs7CiswMEI3O01JRERMRSBET1Q7UG87MDtPTjs7Ozs7Tjs7Ozs7CiswMEI4O0NFRElMTEE7U2s7MDtPTjs8Y29tcGF0PiAwMDIwIDAzMjc7Ozs7TjtTUEFDSU5HIENFRElMTEE7Ozs7CiswMEI5O1NVUEVSU0NSSVBUIE9ORTtObzswO0VOOzxzdXBlcj4gMDAzMTsxOzE7MTtOO1NVUEVSU0NSSVBUIERJR0lUIE9ORTs7OzsKKzAwQkE7TUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SO0xsOzA7TDs8c3VwZXI+IDAwNkY7Ozs7Tjs7Ozs7CiswMEJCO1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSztQZjswO09OOzs7OztZO1JJR0hUIFBPSU5USU5HIEdVSUxMRU1FVDsqOzs7CiswMEJDO1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUjtObzswO09OOzxmcmFjdGlvbj4gMDAzMSAyMDQ0IDAwMzQ7OzsxLzQ7TjtGUkFDVElPTiBPTkUgUVVBUlRFUjs7OzsKKzAwQkQ7VlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGO05vOzA7T047PGZyYWN0aW9uPiAwMDMxIDIwNDQgMDAzMjs7OzEvMjtOO0ZSQUNUSU9OIE9ORSBIQUxGOzs7OworMDBCRTtWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlM7Tm87MDtPTjs8ZnJhY3Rpb24+IDAwMzMgMjA0NCAwMDM0Ozs7My80O047RlJBQ1RJT04gVEhSRUUgUVVBUlRFUlM7Ozs7CiswMEJGO0lOVkVSVEVEIFFVRVNUSU9OIE1BUks7UG87MDtPTjs7Ozs7Tjs7Ozs7CiswMEMwO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRTtMdTswO0w7MDA0MSAwMzAwOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBHUkFWRTs7OzAwRTA7CiswMEMxO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURTtMdTswO0w7MDA0MSAwMzAxOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBBQ1VURTs7OzAwRTE7CiswMEMyO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYO0x1OzA7TDswMDQxIDAzMDI7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIENJUkNVTUZMRVg7OzswMEUyOworMDBDMztMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREU7THU7MDtMOzAwNDEgMDMwMzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEEgVElMREU7OzswMEUzOworMDBDNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTO0x1OzA7TDswMDQxIDAzMDg7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIERJQUVSRVNJUzs7OzAwRTQ7CiswMEM1O0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFO0x1OzA7TDswMDQxIDAzMEE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFJJTkc7OzswMEU1OworMDBDNjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRTtMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBFO2FzaCAqOzswMEU2OworMDBDNztMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQTtMdTswO0w7MDA0MyAwMzI3Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBDRURJTExBOzs7MDBFNzsKKzAwQzg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFO0x1OzA7TDswMDQ1IDAzMDA7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIEdSQVZFOzs7MDBFODsKKzAwQzk7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFO0x1OzA7TDswMDQ1IDAzMDE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIEFDVVRFOzs7MDBFOTsKKzAwQ0E7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVg7THU7MDtMOzAwNDUgMDMwMjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEUgQ0lSQ1VNRkxFWDs7OzAwRUE7CiswMENCO0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVM7THU7MDtMOzAwNDUgMDMwODs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEUgRElBRVJFU0lTOzs7MDBFQjsKKzAwQ0M7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFO0x1OzA7TDswMDQ5IDAzMDA7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIEdSQVZFOzs7MDBFQzsKKzAwQ0Q7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFO0x1OzA7TDswMDQ5IDAzMDE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIEFDVVRFOzs7MDBFRDsKKzAwQ0U7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVg7THU7MDtMOzAwNDkgMDMwMjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEkgQ0lSQ1VNRkxFWDs7OzAwRUU7CiswMENGO0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVM7THU7MDtMOzAwNDkgMDMwODs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEkgRElBRVJFU0lTOzs7MDBFRjsKKzAwRDA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIO0x1OzA7TDs7Ozs7Tjs7SWNlbGFuZGljOzswMEYwOworMDBEMTtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREU7THU7MDtMOzAwNEUgMDMwMzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE4gVElMREU7OzswMEYxOworMDBEMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkU7THU7MDtMOzAwNEYgMDMwMDs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE8gR1JBVkU7OzswMEYyOworMDBEMztMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEU7THU7MDtMOzAwNEYgMDMwMTs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE8gQUNVVEU7OzswMEYzOworMDBENDtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWDtMdTswO0w7MDA0RiAwMzAyOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBDSVJDVU1GTEVYOzs7MDBGNDsKKzAwRDU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFO0x1OzA7TDswMDRGIDAzMDM7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFRJTERFOzs7MDBGNTsKKzAwRDY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUztMdTswO0w7MDA0RiAwMzA4Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBESUFFUkVTSVM7OzswMEY2OworMDBENztNVUxUSVBMSUNBVElPTiBTSUdOO1NtOzA7T047Ozs7O047Ozs7OworMDBEODtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFNMQVNIOzs7MDBGODsKKzAwRDk7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFO0x1OzA7TDswMDU1IDAzMDA7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIEdSQVZFOzs7MDBGOTsKKzAwREE7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFO0x1OzA7TDswMDU1IDAzMDE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIEFDVVRFOzs7MDBGQTsKKzAwREI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVg7THU7MDtMOzAwNTUgMDMwMjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgQ0lSQ1VNRkxFWDs7OzAwRkI7CiswMERDO0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVM7THU7MDtMOzAwNTUgMDMwODs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgRElBRVJFU0lTOzs7MDBGQzsKKzAwREQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFO0x1OzA7TDswMDU5IDAzMDE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIEFDVVRFOzs7MDBGRDsKKzAwREU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk47THU7MDtMOzs7OztOOztJY2VsYW5kaWM7OzAwRkU7CiswMERGO0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTO0xsOzA7TDs7Ozs7Tjs7R2VybWFuOzs7CiswMEUwO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkU7TGw7MDtMOzAwNjEgMDMwMDs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBBIEdSQVZFOzswMEMwOzswMEMwCiswMEUxO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEU7TGw7MDtMOzAwNjEgMDMwMTs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBBIEFDVVRFOzswMEMxOzswMEMxCiswMEUyO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWDtMbDswO0w7MDA2MSAwMzAyOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEEgQ0lSQ1VNRkxFWDs7MDBDMjs7MDBDMgorMDBFMztMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFO0xsOzA7TDswMDYxIDAzMDM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQSBUSUxERTs7MDBDMzs7MDBDMworMDBFNDtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUztMbDswO0w7MDA2MSAwMzA4Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEEgRElBRVJFU0lTOzswMEM0OzswMEM0CiswMEU1O0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRTtMbDswO0w7MDA2MSAwMzBBOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEEgUklORzs7MDBDNTs7MDBDNQorMDBFNjtMQVRJTiBTTUFMTCBMRVRURVIgQUU7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBBIEU7YXNoICo7MDBDNjs7MDBDNgorMDBFNztMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEE7TGw7MDtMOzAwNjMgMDMyNzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBDIENFRElMTEE7OzAwQzc7OzAwQzcKKzAwRTg7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRTtMbDswO0w7MDA2NSAwMzAwOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEUgR1JBVkU7OzAwQzg7OzAwQzgKKzAwRTk7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURTtMbDswO0w7MDA2NSAwMzAxOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEUgQUNVVEU7OzAwQzk7OzAwQzkKKzAwRUE7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYO0xsOzA7TDswMDY1IDAzMDI7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgRSBDSVJDVU1GTEVYOzswMENBOzswMENBCiswMEVCO0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTO0xsOzA7TDswMDY1IDAzMDg7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgRSBESUFFUkVTSVM7OzAwQ0I7OzAwQ0IKKzAwRUM7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRTtMbDswO0w7MDA2OSAwMzAwOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEkgR1JBVkU7OzAwQ0M7OzAwQ0MKKzAwRUQ7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURTtMbDswO0w7MDA2OSAwMzAxOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEkgQUNVVEU7OzAwQ0Q7OzAwQ0QKKzAwRUU7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYO0xsOzA7TDswMDY5IDAzMDI7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgSSBDSVJDVU1GTEVYOzswMENFOzswMENFCiswMEVGO0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTO0xsOzA7TDswMDY5IDAzMDg7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgSSBESUFFUkVTSVM7OzAwQ0Y7OzAwQ0YKKzAwRjA7TEFUSU4gU01BTEwgTEVUVEVSIEVUSDtMbDswO0w7Ozs7O047O0ljZWxhbmRpYzswMEQwOzswMEQwCiswMEYxO0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREU7TGw7MDtMOzAwNkUgMDMwMzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBOIFRJTERFOzswMEQxOzswMEQxCiswMEYyO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkU7TGw7MDtMOzAwNkYgMDMwMDs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBPIEdSQVZFOzswMEQyOzswMEQyCiswMEYzO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEU7TGw7MDtMOzAwNkYgMDMwMTs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBPIEFDVVRFOzswMEQzOzswMEQzCiswMEY0O0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWDtMbDswO0w7MDA2RiAwMzAyOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIE8gQ0lSQ1VNRkxFWDs7MDBENDs7MDBENAorMDBGNTtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFO0xsOzA7TDswMDZGIDAzMDM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTyBUSUxERTs7MDBENTs7MDBENQorMDBGNjtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUztMbDswO0w7MDA2RiAwMzA4Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIE8gRElBRVJFU0lTOzswMEQ2OzswMEQ2CiswMEY3O0RJVklTSU9OIFNJR047U207MDtPTjs7Ozs7Tjs7Ozs7CiswMEY4O0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTyBTTEFTSDs7MDBEODs7MDBEOAorMDBGOTtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFO0xsOzA7TDswMDc1IDAzMDA7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBHUkFWRTs7MDBEOTs7MDBEOQorMDBGQTtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFO0xsOzA7TDswMDc1IDAzMDE7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBBQ1VURTs7MDBEQTs7MDBEQQorMDBGQjtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVg7TGw7MDtMOzAwNzUgMDMwMjs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBVIENJUkNVTUZMRVg7OzAwREI7OzAwREIKKzAwRkM7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVM7TGw7MDtMOzAwNzUgMDMwODs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBVIERJQUVSRVNJUzs7MDBEQzs7MDBEQworMDBGRDtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFO0xsOzA7TDswMDc5IDAzMDE7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgWSBBQ1VURTs7MDBERDs7MDBERAorMDBGRTtMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk47TGw7MDtMOzs7OztOOztJY2VsYW5kaWM7MDBERTs7MDBERQorMDBGRjtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUztMbDswO0w7MDA3OSAwMzA4Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFkgRElBRVJFU0lTOzswMTc4OzswMTc4CiswMTAwO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBNQUNST047THU7MDtMOzAwNDEgMDMwNDs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEEgTUFDUk9OOzs7MDEwMTsKKzAxMDE7TEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBNQUNST047TGw7MDtMOzAwNjEgMDMwNDs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBBIE1BQ1JPTjs7MDEwMDs7MDEwMAorMDEwMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkU7THU7MDtMOzAwNDEgMDMwNjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEEgQlJFVkU7OzswMTAzOworMDEwMztMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEJSRVZFO0xsOzA7TDswMDYxIDAzMDY7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQSBCUkVWRTs7MDEwMjs7MDEwMgorMDEwNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggT0dPTkVLO0x1OzA7TDswMDQxIDAzMjg7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIE9HT05FSzs7OzAxMDU7CiswMTA1O0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggT0dPTkVLO0xsOzA7TDswMDYxIDAzMjg7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQSBPR09ORUs7OzAxMDQ7OzAxMDQKKzAxMDY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIEFDVVRFO0x1OzA7TDswMDQzIDAzMDE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIEFDVVRFOzs7MDEwNzsKKzAxMDc7TEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBBQ1VURTtMbDswO0w7MDA2MyAwMzAxOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEMgQUNVVEU7OzAxMDY7OzAxMDYKKzAxMDg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENJUkNVTUZMRVg7THU7MDtMOzAwNDMgMDMwMjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEMgQ0lSQ1VNRkxFWDs7OzAxMDk7CiswMTA5O0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0lSQ1VNRkxFWDtMbDswO0w7MDA2MyAwMzAyOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEMgQ0lSQ1VNRkxFWDs7MDEwODs7MDEwOAorMDEwQTtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggRE9UIEFCT1ZFO0x1OzA7TDswMDQzIDAzMDc7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIERPVDs7OzAxMEI7CiswMTBCO0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggRE9UIEFCT1ZFO0xsOzA7TDswMDYzIDAzMDc7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQyBET1Q7OzAxMEE7OzAxMEEKKzAxMEM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENBUk9OO0x1OzA7TDswMDQzIDAzMEM7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBDIEhBQ0VLOzs7MDEwRDsKKzAxMEQ7TEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDQVJPTjtMbDswO0w7MDA2MyAwMzBDOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEMgSEFDRUs7OzAxMEM7OzAxMEMKKzAxMEU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIENBUk9OO0x1OzA7TDswMDQ0IDAzMEM7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIEhBQ0VLOzs7MDEwRjsKKzAxMEY7TEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBDQVJPTjtMbDswO0w7MDA2NCAwMzBDOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEQgSEFDRUs7OzAxMEU7OzAxMEUKKzAxMTA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIFNUUk9LRTtMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBCQVI7OzswMTExOworMDExMTtMQVRJTiBTTUFMTCBMRVRURVIgRCBXSVRIIFNUUk9LRTtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEQgQkFSOzswMTEwOzswMTEwCiswMTEyO0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBNQUNST047THU7MDtMOzAwNDUgMDMwNDs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEUgTUFDUk9OOzs7MDExMzsKKzAxMTM7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBNQUNST047TGw7MDtMOzAwNjUgMDMwNDs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBFIE1BQ1JPTjs7MDExMjs7MDExMgorMDExNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQlJFVkU7THU7MDtMOzAwNDUgMDMwNjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEUgQlJFVkU7OzswMTE1OworMDExNTtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEJSRVZFO0xsOzA7TDswMDY1IDAzMDY7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgRSBCUkVWRTs7MDExNDs7MDExNAorMDExNjtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRE9UIEFCT1ZFO0x1OzA7TDswMDQ1IDAzMDc7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIERPVDs7OzAxMTc7CiswMTE3O0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRE9UIEFCT1ZFO0xsOzA7TDswMDY1IDAzMDc7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgRSBET1Q7OzAxMTY7OzAxMTYKKzAxMTg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIE9HT05FSztMdTswO0w7MDA0NSAwMzI4Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBPR09ORUs7OzswMTE5OworMDExOTtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIE9HT05FSztMbDswO0w7MDA2NSAwMzI4Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEUgT0dPTkVLOzswMTE4OzswMTE4CiswMTFBO0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDQVJPTjtMdTswO0w7MDA0NSAwMzBDOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBIQUNFSzs7OzAxMUI7CiswMTFCO0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0FST047TGw7MDtMOzAwNjUgMDMwQzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBFIEhBQ0VLOzswMTFBOzswMTFBCiswMTFDO0xBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBDSVJDVU1GTEVYO0x1OzA7TDswMDQ3IDAzMDI7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBHIENJUkNVTUZMRVg7OzswMTFEOworMDExRDtMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIENJUkNVTUZMRVg7TGw7MDtMOzAwNjcgMDMwMjs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBHIENJUkNVTUZMRVg7OzAxMUM7OzAxMUMKKzAxMUU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRyBXSVRIIEJSRVZFO0x1OzA7TDswMDQ3IDAzMDY7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBHIEJSRVZFOzs7MDExRjsKKzAxMUY7TEFUSU4gU01BTEwgTEVUVEVSIEcgV0lUSCBCUkVWRTtMbDswO0w7MDA2NyAwMzA2Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEcgQlJFVkU7OzAxMUU7OzAxMUUKKzAxMjA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRyBXSVRIIERPVCBBQk9WRTtMdTswO0w7MDA0NyAwMzA3Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgRyBET1Q7OzswMTIxOworMDEyMTtMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIERPVCBBQk9WRTtMbDswO0w7MDA2NyAwMzA3Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEcgRE9UOzswMTIwOzswMTIwCiswMTIyO0xBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBDRURJTExBO0x1OzA7TDswMDQ3IDAzMjc7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBHIENFRElMTEE7OzswMTIzOworMDEyMztMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIENFRElMTEE7TGw7MDtMOzAwNjcgMDMyNzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBHIENFRElMTEE7OzAxMjI7OzAxMjIKKzAxMjQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSCBXSVRIIENJUkNVTUZMRVg7THU7MDtMOzAwNDggMDMwMjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEggQ0lSQ1VNRkxFWDs7OzAxMjU7CiswMTI1O0xBVElOIFNNQUxMIExFVFRFUiBIIFdJVEggQ0lSQ1VNRkxFWDtMbDswO0w7MDA2OCAwMzAyOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEggQ0lSQ1VNRkxFWDs7MDEyNDs7MDEyNAorMDEyNjtMQVRJTiBDQVBJVEFMIExFVFRFUiBIIFdJVEggU1RST0tFO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBIIEJBUjs7OzAxMjc7CiswMTI3O0xBVElOIFNNQUxMIExFVFRFUiBIIFdJVEggU1RST0tFO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgSCBCQVI7OzAxMjY7OzAxMjYKKzAxMjg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIFRJTERFO0x1OzA7TDswMDQ5IDAzMDM7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFRJTERFOzs7MDEyOTsKKzAxMjk7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBUSUxERTtMbDswO0w7MDA2OSAwMzAzOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEkgVElMREU7OzAxMjg7OzAxMjgKKzAxMkE7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIE1BQ1JPTjtMdTswO0w7MDA0OSAwMzA0Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBNQUNST047OzswMTJCOworMDEyQjtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIE1BQ1JPTjtMbDswO0w7MDA2OSAwMzA0Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEkgTUFDUk9OOzswMTJBOzswMTJBCiswMTJDO0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBCUkVWRTtMdTswO0w7MDA0OSAwMzA2Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBCUkVWRTs7OzAxMkQ7CiswMTJEO0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQlJFVkU7TGw7MDtMOzAwNjkgMDMwNjs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBJIEJSRVZFOzswMTJDOzswMTJDCiswMTJFO0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBPR09ORUs7THU7MDtMOzAwNDkgMDMyODs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEkgT0dPTkVLOzs7MDEyRjsKKzAxMkY7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBPR09ORUs7TGw7MDtMOzAwNjkgMDMyODs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBJIE9HT05FSzs7MDEyRTs7MDEyRQorMDEzMDtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFO0x1OzA7TDswMDQ5IDAzMDc7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIERPVDs7OzAwNjk7CiswMTMxO0xBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEk7TGw7MDtMOzs7OztOOzs7MDA0OTs7MDA0OQorMDEzMjtMQVRJTiBDQVBJVEFMIExJR0FUVVJFIElKO0x1OzA7TDs8Y29tcGF0PiAwMDQ5IDAwNEE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIEo7OzswMTMzOworMDEzMztMQVRJTiBTTUFMTCBMSUdBVFVSRSBJSjtMbDswO0w7PGNvbXBhdD4gMDA2OSAwMDZBOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEkgSjs7MDEzMjs7MDEzMgorMDEzNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBKIFdJVEggQ0lSQ1VNRkxFWDtMdTswO0w7MDA0QSAwMzAyOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgSiBDSVJDVU1GTEVYOzs7MDEzNTsKKzAxMzU7TEFUSU4gU01BTEwgTEVUVEVSIEogV0lUSCBDSVJDVU1GTEVYO0xsOzA7TDswMDZBIDAzMDI7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgSiBDSVJDVU1GTEVYOzswMTM0OzswMTM0CiswMTM2O0xBVElOIENBUElUQUwgTEVUVEVSIEsgV0lUSCBDRURJTExBO0x1OzA7TDswMDRCIDAzMjc7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBLIENFRElMTEE7OzswMTM3OworMDEzNztMQVRJTiBTTUFMTCBMRVRURVIgSyBXSVRIIENFRElMTEE7TGw7MDtMOzAwNkIgMDMyNzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBLIENFRElMTEE7OzAxMzY7OzAxMzYKKzAxMzg7TEFUSU4gU01BTEwgTEVUVEVSIEtSQTtMbDswO0w7Ozs7O047O0dyZWVubGFuZGljOzs7CiswMTM5O0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBBQ1VURTtMdTswO0w7MDA0QyAwMzAxOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBBQ1VURTs7OzAxM0E7CiswMTNBO0xBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggQUNVVEU7TGw7MDtMOzAwNkMgMDMwMTs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBMIEFDVVRFOzswMTM5OzswMTM5CiswMTNCO0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBDRURJTExBO0x1OzA7TDswMDRDIDAzMjc7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBMIENFRElMTEE7OzswMTNDOworMDEzQztMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIENFRElMTEE7TGw7MDtMOzAwNkMgMDMyNzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBMIENFRElMTEE7OzAxM0I7OzAxM0IKKzAxM0Q7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIENBUk9OO0x1OzA7TDswMDRDIDAzMEM7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBMIEhBQ0VLOzs7MDEzRTsKKzAxM0U7TEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBDQVJPTjtMbDswO0w7MDA2QyAwMzBDOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEwgSEFDRUs7OzAxM0Q7OzAxM0QKKzAxM0Y7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIE1JRERMRSBET1Q7THU7MDtMOzxjb21wYXQ+IDAwNEMgMDBCNzs7OztOOzs7OzAxNDA7CiswMTQwO0xBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggTUlERExFIERPVDtMbDswO0w7PGNvbXBhdD4gMDA2QyAwMEI3Ozs7O047OzswMTNGOzswMTNGCiswMTQxO0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBTVFJPS0U7THU7MDtMOzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEwgU0xBU0g7OzswMTQyOworMDE0MjtMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIFNUUk9LRTtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEwgU0xBU0g7OzAxNDE7OzAxNDEKKzAxNDM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIEFDVVRFO0x1OzA7TDswMDRFIDAzMDE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIEFDVVRFOzs7MDE0NDsKKzAxNDQ7TEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBBQ1VURTtMbDswO0w7MDA2RSAwMzAxOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIE4gQUNVVEU7OzAxNDM7OzAxNDMKKzAxNDU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIENFRElMTEE7THU7MDtMOzAwNEUgMDMyNzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE4gQ0VESUxMQTs7OzAxNDY7CiswMTQ2O0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggQ0VESUxMQTtMbDswO0w7MDA2RSAwMzI3Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIE4gQ0VESUxMQTs7MDE0NTs7MDE0NQorMDE0NztMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggQ0FST047THU7MDtMOzAwNEUgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE4gSEFDRUs7OzswMTQ4OworMDE0ODtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIENBUk9OO0xsOzA7TDswMDZFIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTiBIQUNFSzs7MDE0Nzs7MDE0NworMDE0OTtMQVRJTiBTTUFMTCBMRVRURVIgTiBQUkVDRURFRCBCWSBBUE9TVFJPUEhFO0xsOzA7TDs8Y29tcGF0PiAwMkJDIDAwNkU7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQVBPU1RST1BIRSBOOzs7OworMDE0QTtMQVRJTiBDQVBJVEFMIExFVFRFUiBFTkc7THU7MDtMOzs7OztOOztTYW1pOzswMTRCOworMDE0QjtMQVRJTiBTTUFMTCBMRVRURVIgRU5HO0xsOzA7TDs7Ozs7Tjs7U2FtaTswMTRBOzswMTRBCiswMTRDO0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBNQUNST047THU7MDtMOzAwNEYgMDMwNDs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE8gTUFDUk9OOzs7MDE0RDsKKzAxNEQ7TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBNQUNST047TGw7MDtMOzAwNkYgMDMwNDs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBPIE1BQ1JPTjs7MDE0Qzs7MDE0QworMDE0RTtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQlJFVkU7THU7MDtMOzAwNEYgMDMwNjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE8gQlJFVkU7OzswMTRGOworMDE0RjtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEJSRVZFO0xsOzA7TDswMDZGIDAzMDY7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTyBCUkVWRTs7MDE0RTs7MDE0RQorMDE1MDtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRE9VQkxFIEFDVVRFO0x1OzA7TDswMDRGIDAzMEI7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIERPVUJMRSBBQ1VURTs7OzAxNTE7CiswMTUxO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRE9VQkxFIEFDVVRFO0xsOzA7TDswMDZGIDAzMEI7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTyBET1VCTEUgQUNVVEU7OzAxNTA7OzAxNTAKKzAxNTI7TEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRTtMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBFOzs7MDE1MzsKKzAxNTM7TEFUSU4gU01BTEwgTElHQVRVUkUgT0U7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBPIEU7OzAxNTI7OzAxNTIKKzAxNTQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIEFDVVRFO0x1OzA7TDswMDUyIDAzMDE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBSIEFDVVRFOzs7MDE1NTsKKzAxNTU7TEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBBQ1VURTtMbDswO0w7MDA3MiAwMzAxOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIFIgQUNVVEU7OzAxNTQ7OzAxNTQKKzAxNTY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIENFRElMTEE7THU7MDtMOzAwNTIgMDMyNzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFIgQ0VESUxMQTs7OzAxNTc7CiswMTU3O0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggQ0VESUxMQTtMbDswO0w7MDA3MiAwMzI3Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFIgQ0VESUxMQTs7MDE1Njs7MDE1NgorMDE1ODtMQVRJTiBDQVBJVEFMIExFVFRFUiBSIFdJVEggQ0FST047THU7MDtMOzAwNTIgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFIgSEFDRUs7OzswMTU5OworMDE1OTtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIENBUk9OO0xsOzA7TDswMDcyIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgUiBIQUNFSzs7MDE1ODs7MDE1OAorMDE1QTtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQUNVVEU7THU7MDtMOzAwNTMgMDMwMTs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFMgQUNVVEU7OzswMTVCOworMDE1QjtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIEFDVVRFO0xsOzA7TDswMDczIDAzMDE7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgUyBBQ1VURTs7MDE1QTs7MDE1QQorMDE1QztMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0lSQ1VNRkxFWDtMdTswO0w7MDA1MyAwMzAyOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBDSVJDVU1GTEVYOzs7MDE1RDsKKzAxNUQ7TEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDSVJDVU1GTEVYO0xsOzA7TDswMDczIDAzMDI7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgUyBDSVJDVU1GTEVYOzswMTVDOzswMTVDCiswMTVFO0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDRURJTExBO0x1OzA7TDswMDUzIDAzMjc7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIENFRElMTEE7Kjs7MDE1RjsKKzAxNUY7TEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDRURJTExBO0xsOzA7TDswMDczIDAzMjc7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgUyBDRURJTExBOyo7MDE1RTs7MDE1RQorMDE2MDtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST047THU7MDtMOzAwNTMgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFMgSEFDRUs7OzswMTYxOworMDE2MTtMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OO0xsOzA7TDswMDczIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgUyBIQUNFSzs7MDE2MDs7MDE2MAorMDE2MjtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggQ0VESUxMQTtMdTswO0w7MDA1NCAwMzI3Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBDRURJTExBOyo7OzAxNjM7CiswMTYzO0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggQ0VESUxMQTtMbDswO0w7MDA3NCAwMzI3Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFQgQ0VESUxMQTsqOzAxNjI7OzAxNjIKKzAxNjQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIENBUk9OO0x1OzA7TDswMDU0IDAzMEM7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIEhBQ0VLOzs7MDE2NTsKKzAxNjU7TEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDQVJPTjtMbDswO0w7MDA3NCAwMzBDOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIFQgSEFDRUs7OzAxNjQ7OzAxNjQKKzAxNjY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIFNUUk9LRTtMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBCQVI7OzswMTY3OworMDE2NztMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIFNUUk9LRTtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFQgQkFSOzswMTY2OzswMTY2CiswMTY4O0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBUSUxERTtMdTswO0w7MDA1NSAwMzAzOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBUSUxERTs7OzAxNjk7CiswMTY5O0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggVElMREU7TGw7MDtMOzAwNzUgMDMwMzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBVIFRJTERFOzswMTY4OzswMTY4CiswMTZBO0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBNQUNST047THU7MDtMOzAwNTUgMDMwNDs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgTUFDUk9OOzs7MDE2QjsKKzAxNkI7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBNQUNST047TGw7MDtMOzAwNzUgMDMwNDs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBVIE1BQ1JPTjs7MDE2QTs7MDE2QQorMDE2QztMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQlJFVkU7THU7MDtMOzAwNTUgMDMwNjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgQlJFVkU7OzswMTZEOworMDE2RDtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEJSRVZFO0xsOzA7TDswMDc1IDAzMDY7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBCUkVWRTs7MDE2Qzs7MDE2QworMDE2RTtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggUklORyBBQk9WRTtMdTswO0w7MDA1NSAwMzBBOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBSSU5HOzs7MDE2RjsKKzAxNkY7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBSSU5HIEFCT1ZFO0xsOzA7TDswMDc1IDAzMEE7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBSSU5HOzswMTZFOzswMTZFCiswMTcwO0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBET1VCTEUgQUNVVEU7THU7MDtMOzAwNTUgMDMwQjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgRE9VQkxFIEFDVVRFOzs7MDE3MTsKKzAxNzE7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBET1VCTEUgQUNVVEU7TGw7MDtMOzAwNzUgMDMwQjs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBVIERPVUJMRSBBQ1VURTs7MDE3MDs7MDE3MAorMDE3MjtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggT0dPTkVLO0x1OzA7TDswMDU1IDAzMjg7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIE9HT05FSzs7OzAxNzM7CiswMTczO0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggT0dPTkVLO0xsOzA7TDswMDc1IDAzMjg7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBPR09ORUs7OzAxNzI7OzAxNzIKKzAxNzQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVyBXSVRIIENJUkNVTUZMRVg7THU7MDtMOzAwNTcgMDMwMjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFcgQ0lSQ1VNRkxFWDs7OzAxNzU7CiswMTc1O0xBVElOIFNNQUxMIExFVFRFUiBXIFdJVEggQ0lSQ1VNRkxFWDtMbDswO0w7MDA3NyAwMzAyOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIFcgQ0lSQ1VNRkxFWDs7MDE3NDs7MDE3NAorMDE3NjtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQ0lSQ1VNRkxFWDtMdTswO0w7MDA1OSAwMzAyOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBDSVJDVU1GTEVYOzs7MDE3NzsKKzAxNzc7TEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBDSVJDVU1GTEVYO0xsOzA7TDswMDc5IDAzMDI7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgWSBDSVJDVU1GTEVYOzswMTc2OzswMTc2CiswMTc4O0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVM7THU7MDtMOzAwNTkgMDMwODs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFkgRElBRVJFU0lTOzs7MDBGRjsKKzAxNzk7TEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIEFDVVRFO0x1OzA7TDswMDVBIDAzMDE7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIEFDVVRFOzs7MDE3QTsKKzAxN0E7TEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBBQ1VURTtMbDswO0w7MDA3QSAwMzAxOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIFogQUNVVEU7OzAxNzk7OzAxNzkKKzAxN0I7TEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIERPVCBBQk9WRTtMdTswO0w7MDA1QSAwMzA3Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBET1Q7OzswMTdDOworMDE3QztMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIERPVCBBQk9WRTtMbDswO0w7MDA3QSAwMzA3Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFogRE9UOzswMTdCOzswMTdCCiswMTdEO0xBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBDQVJPTjtMdTswO0w7MDA1QSAwMzBDOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBIQUNFSzs7OzAxN0U7CiswMTdFO0xBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggQ0FST047TGw7MDtMOzAwN0EgMDMwQzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBaIEhBQ0VLOzswMTdEOzswMTdECiswMTdGO0xBVElOIFNNQUxMIExFVFRFUiBMT05HIFM7TGw7MDtMOzxjb21wYXQ+IDAwNzM7Ozs7Tjs7OzAwNTM7OzAwNTMKKzAxODA7TEFUSU4gU01BTEwgTEVUVEVSIEIgV0lUSCBTVFJPS0U7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBCIEJBUjs7OzsKKzAxODE7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQiBXSVRIIEhPT0s7THU7MDtMOzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEIgSE9PSzs7OzAyNTM7CiswMTgyO0xBVElOIENBUElUQUwgTEVUVEVSIEIgV0lUSCBUT1BCQVI7THU7MDtMOzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEIgVE9QQkFSOzs7MDE4MzsKKzAxODM7TEFUSU4gU01BTEwgTEVUVEVSIEIgV0lUSCBUT1BCQVI7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBCIFRPUEJBUjs7MDE4Mjs7MDE4MgorMDE4NDtMQVRJTiBDQVBJVEFMIExFVFRFUiBUT05FIFNJWDtMdTswO0w7Ozs7O047Ozs7MDE4NTsKKzAxODU7TEFUSU4gU01BTEwgTEVUVEVSIFRPTkUgU0lYO0xsOzA7TDs7Ozs7Tjs7OzAxODQ7OzAxODQKKzAxODY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgT1BFTiBPO0x1OzA7TDs7Ozs7Tjs7OzswMjU0OworMDE4NztMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggSE9PSztMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBIT09LOzs7MDE4ODsKKzAxODg7TEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBIT09LO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQyBIT09LOzswMTg3OzswMTg3CiswMTg5O0xBVElOIENBUElUQUwgTEVUVEVSIEFGUklDQU4gRDtMdTswO0w7Ozs7O047Oyo7OzAyNTY7CiswMThBO0xBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBIT09LO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIEhPT0s7OzswMjU3OworMDE4QjtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggVE9QQkFSO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFRPUEJBUjs7OzAxOEM7CiswMThDO0xBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggVE9QQkFSO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgRCBUT1BCQVI7OzAxOEI7OzAxOEIKKzAxOEQ7TEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBERUxUQTtMbDswO0w7Ozs7O047Ozs7OworMDE4RTtMQVRJTiBDQVBJVEFMIExFVFRFUiBSRVZFUlNFRCBFO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBUVVJORUQgRTs7OzAxREQ7CiswMThGO0xBVElOIENBUElUQUwgTEVUVEVSIFNDSFdBO0x1OzA7TDs7Ozs7Tjs7OzswMjU5OworMDE5MDtMQVRJTiBDQVBJVEFMIExFVFRFUiBPUEVOIEU7THU7MDtMOzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEVQU0lMT047OzswMjVCOworMDE5MTtMQVRJTiBDQVBJVEFMIExFVFRFUiBGIFdJVEggSE9PSztMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgRiBIT09LOzs7MDE5MjsKKzAxOTI7TEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgU0NSSVBUIEY7OzAxOTE7OzAxOTEKKzAxOTM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRyBXSVRIIEhPT0s7THU7MDtMOzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEcgSE9PSzs7OzAyNjA7CiswMTk0O0xBVElOIENBUElUQUwgTEVUVEVSIEdBTU1BO0x1OzA7TDs7Ozs7Tjs7OzswMjYzOworMDE5NTtMQVRJTiBTTUFMTCBMRVRURVIgSFY7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBIIFY7aHdhaXI7MDFGNjs7MDFGNgorMDE5NjtMQVRJTiBDQVBJVEFMIExFVFRFUiBJT1RBO0x1OzA7TDs7Ozs7Tjs7OzswMjY5OworMDE5NztMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggU1RST0tFO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBCQVJSRUQgSTs7OzAyNjg7CiswMTk4O0xBVElOIENBUElUQUwgTEVUVEVSIEsgV0lUSCBIT09LO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBLIEhPT0s7OzswMTk5OworMDE5OTtMQVRJTiBTTUFMTCBMRVRURVIgSyBXSVRIIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBLIEhPT0s7OzAxOTg7OzAxOTgKKzAxOUE7TEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBCQVI7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBCQVJSRUQgTDs7OzsKKzAxOUI7TEFUSU4gU01BTEwgTEVUVEVSIExBTUJEQSBXSVRIIFNUUk9LRTtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEJBUlJFRCBMQU1CREE7Ozs7CiswMTlDO0xBVElOIENBUElUQUwgTEVUVEVSIFRVUk5FRCBNO0x1OzA7TDs7Ozs7Tjs7OzswMjZGOworMDE5RDtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggTEVGVCBIT09LO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIEhPT0s7OzswMjcyOworMDE5RTtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIExPTkcgUklHSFQgTEVHO0xsOzA7TDs7Ozs7Tjs7OzAyMjA7OzAyMjAKKzAxOUY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIE1JRERMRSBUSUxERTtMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgQkFSUkVEIE87Kjs7MDI3NTsKKzAxQTA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEhPUk47THU7MDtMOzAwNEYgMDMxQjs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE8gSE9STjs7OzAxQTE7CiswMUExO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggSE9STjtMbDswO0w7MDA2RiAwMzFCOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIE8gSE9STjs7MDFBMDs7MDFBMAorMDFBMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPSTtMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBJO2doYTs7MDFBMzsKKzAxQTM7TEFUSU4gU01BTEwgTEVUVEVSIE9JO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTyBJO2doYTswMUEyOzswMUEyCiswMUE0O0xBVElOIENBUElUQUwgTEVUVEVSIFAgV0lUSCBIT09LO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBQIEhPT0s7OzswMUE1OworMDFBNTtMQVRJTiBTTUFMTCBMRVRURVIgUCBXSVRIIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBQIEhPT0s7OzAxQTQ7OzAxQTQKKzAxQTY7TEFUSU4gTEVUVEVSIFlSO0x1OzA7TDs7Ozs7TjtMQVRJTiBMRVRURVIgWSBSOyo7OzAyODA7CiswMUE3O0xBVElOIENBUElUQUwgTEVUVEVSIFRPTkUgVFdPO0x1OzA7TDs7Ozs7Tjs7OzswMUE4OworMDFBODtMQVRJTiBTTUFMTCBMRVRURVIgVE9ORSBUV087TGw7MDtMOzs7OztOOzs7MDFBNzs7MDFBNworMDFBOTtMQVRJTiBDQVBJVEFMIExFVFRFUiBFU0g7THU7MDtMOzs7OztOOzs7OzAyODM7CiswMUFBO0xBVElOIExFVFRFUiBSRVZFUlNFRCBFU0ggTE9PUDtMbDswO0w7Ozs7O047Ozs7OworMDFBQjtMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIFBBTEFUQUwgSE9PSztMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFQgUEFMQVRBTCBIT09LOzs7OworMDFBQztMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggSE9PSztMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBIT09LOzs7MDFBRDsKKzAxQUQ7TEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBIT09LO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVCBIT09LOzswMUFDOzswMUFDCiswMUFFO0xBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBSRVRST0ZMRVggSE9PSztMdTswO0w7Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBSRVRST0ZMRVggSE9PSzs7OzAyODg7CiswMUFGO0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBIT1JOO0x1OzA7TDswMDU1IDAzMUI7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIEhPUk47OzswMUIwOworMDFCMDtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEhPUk47TGw7MDtMOzAwNzUgMDMxQjs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBVIEhPUk47OzAxQUY7OzAxQUYKKzAxQjE7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVVBTSUxPTjtMdTswO0w7Ozs7O047Ozs7MDI4QTsKKzAxQjI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgViBXSVRIIEhPT0s7THU7MDtMOzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFNDUklQVCBWOzs7MDI4QjsKKzAxQjM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEhPT0s7THU7MDtMOzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFkgSE9PSzs7OzAxQjQ7CiswMUI0O0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggSE9PSztMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFkgSE9PSzs7MDFCMzs7MDFCMworMDFCNTtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggU1RST0tFO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIEJBUjs7OzAxQjY7CiswMUI2O0xBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggU1RST0tFO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgWiBCQVI7OzAxQjU7OzAxQjUKKzAxQjc7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRVpIO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBZT0dIOzs7MDI5MjsKKzAxQjg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRVpIIFJFVkVSU0VEO0x1OzA7TDs7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBSRVZFUlNFRCBZT0dIOzs7MDFCOTsKKzAxQjk7TEFUSU4gU01BTEwgTEVUVEVSIEVaSCBSRVZFUlNFRDtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFJFVkVSU0VEIFlPR0g7OzAxQjg7OzAxQjgKKzAxQkE7TEFUSU4gU01BTEwgTEVUVEVSIEVaSCBXSVRIIFRBSUw7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBZT0dIIFdJVEggVEFJTDs7OzsKKzAxQkI7TEFUSU4gTEVUVEVSIFRXTyBXSVRIIFNUUk9LRTtMbzswO0w7Ozs7O047TEFUSU4gTEVUVEVSIFRXTyBCQVI7Ozs7CiswMUJDO0xBVElOIENBUElUQUwgTEVUVEVSIFRPTkUgRklWRTtMdTswO0w7Ozs7O047Ozs7MDFCRDsKKzAxQkQ7TEFUSU4gU01BTEwgTEVUVEVSIFRPTkUgRklWRTtMbDswO0w7Ozs7O047OzswMUJDOzswMUJDCiswMUJFO0xBVElOIExFVFRFUiBJTlZFUlRFRCBHTE9UVEFMIFNUT1AgV0lUSCBTVFJPS0U7TGw7MDtMOzs7OztOO0xBVElOIExFVFRFUiBJTlZFUlRFRCBHTE9UVEFMIFNUT1AgQkFSOzs7OworMDFCRjtMQVRJTiBMRVRURVIgV1lOTjtMbDswO0w7Ozs7O047OzswMUY3OzswMUY3CiswMUMwO0xBVElOIExFVFRFUiBERU5UQUwgQ0xJQ0s7TG87MDtMOzs7OztOO0xBVElOIExFVFRFUiBQSVBFOzs7OworMDFDMTtMQVRJTiBMRVRURVIgTEFURVJBTCBDTElDSztMbzswO0w7Ozs7O047TEFUSU4gTEVUVEVSIERPVUJMRSBQSVBFOzs7OworMDFDMjtMQVRJTiBMRVRURVIgQUxWRU9MQVIgQ0xJQ0s7TG87MDtMOzs7OztOO0xBVElOIExFVFRFUiBQSVBFIERPVUJMRSBCQVI7Ozs7CiswMUMzO0xBVElOIExFVFRFUiBSRVRST0ZMRVggQ0xJQ0s7TG87MDtMOzs7OztOO0xBVElOIExFVFRFUiBFWENMQU1BVElPTiBNQVJLOzs7OworMDFDNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBEWiBXSVRIIENBUk9OO0x1OzA7TDs8Y29tcGF0PiAwMDQ0IDAxN0Q7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFogSEFDRUs7OzswMUM2OzAxQzUKKzAxQzU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIFNNQUxMIExFVFRFUiBaIFdJVEggQ0FST047THQ7MDtMOzxjb21wYXQ+IDAwNDQgMDE3RTs7OztOO0xBVElOIExFVFRFUiBDQVBJVEFMIEQgU01BTEwgWiBIQUNFSzs7MDFDNDswMUM2OworMDFDNjtMQVRJTiBTTUFMTCBMRVRURVIgRFogV0lUSCBDQVJPTjtMbDswO0w7PGNvbXBhdD4gMDA2NCAwMTdFOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEQgWiBIQUNFSzs7MDFDNDs7MDFDNQorMDFDNztMQVRJTiBDQVBJVEFMIExFVFRFUiBMSjtMdTswO0w7PGNvbXBhdD4gMDA0QyAwMDRBOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBKOzs7MDFDOTswMUM4CiswMUM4O0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBTTUFMTCBMRVRURVIgSjtMdDswO0w7PGNvbXBhdD4gMDA0QyAwMDZBOzs7O047TEFUSU4gTEVUVEVSIENBUElUQUwgTCBTTUFMTCBKOzswMUM3OzAxQzk7CiswMUM5O0xBVElOIFNNQUxMIExFVFRFUiBMSjtMbDswO0w7PGNvbXBhdD4gMDA2QyAwMDZBOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIEwgSjs7MDFDNzs7MDFDOAorMDFDQTtMQVRJTiBDQVBJVEFMIExFVFRFUiBOSjtMdTswO0w7PGNvbXBhdD4gMDA0RSAwMDRBOzs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBKOzs7MDFDQzswMUNCCiswMUNCO0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBTTUFMTCBMRVRURVIgSjtMdDswO0w7PGNvbXBhdD4gMDA0RSAwMDZBOzs7O047TEFUSU4gTEVUVEVSIENBUElUQUwgTiBTTUFMTCBKOzswMUNBOzAxQ0M7CiswMUNDO0xBVElOIFNNQUxMIExFVFRFUiBOSjtMbDswO0w7PGNvbXBhdD4gMDA2RSAwMDZBOzs7O047TEFUSU4gU01BTEwgTEVUVEVSIE4gSjs7MDFDQTs7MDFDQgorMDFDRDtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0FST047THU7MDtMOzAwNDEgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEEgSEFDRUs7OzswMUNFOworMDFDRTtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENBUk9OO0xsOzA7TDswMDYxIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQSBIQUNFSzs7MDFDRDs7MDFDRAorMDFDRjtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0FST047THU7MDtMOzAwNDkgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEkgSEFDRUs7OzswMUQwOworMDFEMDtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENBUk9OO0xsOzA7TDswMDY5IDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgSSBIQUNFSzs7MDFDRjs7MDFDRgorMDFEMTtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0FST047THU7MDtMOzAwNEYgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIE8gSEFDRUs7OzswMUQyOworMDFEMjtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENBUk9OO0xsOzA7TDswMDZGIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTyBIQUNFSzs7MDFEMTs7MDFEMQorMDFEMztMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0FST047THU7MDtMOzAwNTUgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgSEFDRUs7OzswMUQ0OworMDFENDtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENBUk9OO0xsOzA7TDswMDc1IDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBIQUNFSzs7MDFEMzs7MDFEMworMDFENTtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTIEFORCBNQUNST047THU7MDtMOzAwREMgMDMwNDs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgRElBRVJFU0lTIE1BQ1JPTjs7OzAxRDY7CiswMUQ2O0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTIEFORCBNQUNST047TGw7MDtMOzAwRkMgMDMwNDs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBVIERJQUVSRVNJUyBNQUNST047OzAxRDU7OzAxRDUKKzAxRDc7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyBBTkQgQUNVVEU7THU7MDtMOzAwREMgMDMwMTs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgRElBRVJFU0lTIEFDVVRFOzs7MDFEODsKKzAxRDg7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgQU5EIEFDVVRFO0xsOzA7TDswMEZDIDAzMDE7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBESUFFUkVTSVMgQUNVVEU7OzAxRDc7OzAxRDcKKzAxRDk7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyBBTkQgQ0FST047THU7MDtMOzAwREMgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgRElBRVJFU0lTIEhBQ0VLOzs7MDFEQTsKKzAxREE7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgQU5EIENBUk9OO0xsOzA7TDswMEZDIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBESUFFUkVTSVMgSEFDRUs7OzAxRDk7OzAxRDkKKzAxREI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyBBTkQgR1JBVkU7THU7MDtMOzAwREMgMDMwMDs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIFUgRElBRVJFU0lTIEdSQVZFOzs7MDFEQzsKKzAxREM7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgQU5EIEdSQVZFO0xsOzA7TDswMEZDIDAzMDA7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVSBESUFFUkVTSVMgR1JBVkU7OzAxREI7OzAxREIKKzAxREQ7TEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBFO0xsOzA7TDs7Ozs7Tjs7OzAxOEU7OzAxOEUKKzAxREU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUyBBTkQgTUFDUk9OO0x1OzA7TDswMEM0IDAzMDQ7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIERJQUVSRVNJUyBNQUNST047OzswMURGOworMDFERjtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUyBBTkQgTUFDUk9OO0xsOzA7TDswMEU0IDAzMDQ7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQSBESUFFUkVTSVMgTUFDUk9OOzswMURFOzswMURFCiswMUUwO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBET1QgQUJPVkUgQU5EIE1BQ1JPTjtMdTswO0w7MDIyNiAwMzA0Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBET1QgTUFDUk9OOzs7MDFFMTsKKzAxRTE7TEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBET1QgQUJPVkUgQU5EIE1BQ1JPTjtMbDswO0w7MDIyNyAwMzA0Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEEgRE9UIE1BQ1JPTjs7MDFFMDs7MDFFMAorMDFFMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBRSBXSVRIIE1BQ1JPTjtMdTswO0w7MDBDNiAwMzA0Ozs7O047TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBFIE1BQ1JPTjthc2ggKjs7MDFFMzsKKzAxRTM7TEFUSU4gU01BTEwgTEVUVEVSIEFFIFdJVEggTUFDUk9OO0xsOzA7TDswMEU2IDAzMDQ7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQSBFIE1BQ1JPTjthc2ggKjswMUUyOzswMUUyCiswMUU0O0xBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBTVFJPS0U7THU7MDtMOzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEcgQkFSOzs7MDFFNTsKKzAxRTU7TEFUSU4gU01BTEwgTEVUVEVSIEcgV0lUSCBTVFJPS0U7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBHIEJBUjs7MDFFNDs7MDFFNAorMDFFNjtMQVRJTiBDQVBJVEFMIExFVFRFUiBHIFdJVEggQ0FST047THU7MDtMOzAwNDcgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEcgSEFDRUs7OzswMUU3OworMDFFNztMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIENBUk9OO0xsOzA7TDswMDY3IDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgRyBIQUNFSzs7MDFFNjs7MDFFNgorMDFFODtMQVRJTiBDQVBJVEFMIExFVFRFUiBLIFdJVEggQ0FST047THU7MDtMOzAwNEIgMDMwQzs7OztOO0xBVElOIENBUElUQUwgTEVUVEVSIEsgSEFDRUs7OzswMUU5OworMDFFOTtMQVRJTiBTTUFMTCBMRVRURVIgSyBXSVRIIENBUk9OO0xsOzA7TDswMDZCIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgSyBIQUNFSzs7MDFFODs7MDFFOAorMDFFQTtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggT0dPTkVLO0x1OzA7TDswMDRGIDAzMjg7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIE9HT05FSzs7OzAxRUI7CiswMUVCO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggT0dPTkVLO0xsOzA7TDswMDZGIDAzMjg7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTyBPR09ORUs7OzAxRUE7OzAxRUEKKzAxRUM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIE9HT05FSyBBTkQgTUFDUk9OO0x1OzA7TDswMUVBIDAzMDQ7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIE9HT05FSyBNQUNST047OzswMUVEOworMDFFRDtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIE9HT05FSyBBTkQgTUFDUk9OO0xsOzA7TDswMUVCIDAzMDQ7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTyBPR09ORUsgTUFDUk9OOzswMUVDOzswMUVDCiswMUVFO0xBVElOIENBUElUQUwgTEVUVEVSIEVaSCBXSVRIIENBUk9OO0x1OzA7TDswMUI3IDAzMEM7Ozs7TjtMQVRJTiBDQVBJVEFMIExFVFRFUiBZT0dIIEhBQ0VLOzs7MDFFRjsKKzAxRUY7TEFUSU4gU01BTEwgTEVUVEVSIEVaSCBXSVRIIENBUk9OO0xsOzA7TDswMjkyIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgWU9HSCBIQUNFSzs7MDFFRTs7MDFFRQorMDFGMDtMQVRJTiBTTUFMTCBMRVRURVIgSiBXSVRIIENBUk9OO0xsOzA7TDswMDZBIDAzMEM7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgSiBIQUNFSzs7OzsKKzAxRjE7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRFo7THU7MDtMOzxjb21wYXQ+IDAwNDQgMDA1QTs7OztOOzs7OzAxRjM7MDFGMgorMDFGMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggU01BTEwgTEVUVEVSIFo7THQ7MDtMOzxjb21wYXQ+IDAwNDQgMDA3QTs7OztOOzs7MDFGMTswMUYzOworMDFGMztMQVRJTiBTTUFMTCBMRVRURVIgRFo7TGw7MDtMOzxjb21wYXQ+IDAwNjQgMDA3QTs7OztOOzs7MDFGMTs7MDFGMgorMDFGNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBHIFdJVEggQUNVVEU7THU7MDtMOzAwNDcgMDMwMTs7OztOOzs7OzAxRjU7CiswMUY1O0xBVElOIFNNQUxMIExFVFRFUiBHIFdJVEggQUNVVEU7TGw7MDtMOzAwNjcgMDMwMTs7OztOOzs7MDFGNDs7MDFGNAorMDFGNjtMQVRJTiBDQVBJVEFMIExFVFRFUiBIV0FJUjtMdTswO0w7Ozs7O047Ozs7MDE5NTsKKzAxRjc7TEFUSU4gQ0FQSVRBTCBMRVRURVIgV1lOTjtMdTswO0w7Ozs7O047Ozs7MDFCRjsKKzAxRjg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIEdSQVZFO0x1OzA7TDswMDRFIDAzMDA7Ozs7Tjs7OzswMUY5OworMDFGOTtMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIEdSQVZFO0xsOzA7TDswMDZFIDAzMDA7Ozs7Tjs7OzAxRjg7OzAxRjgKKzAxRkE7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUgQU5EIEFDVVRFO0x1OzA7TDswMEM1IDAzMDE7Ozs7Tjs7OzswMUZCOworMDFGQjtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUgQU5EIEFDVVRFO0xsOzA7TDswMEU1IDAzMDE7Ozs7Tjs7OzAxRkE7OzAxRkEKKzAxRkM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQUUgV0lUSCBBQ1VURTtMdTswO0w7MDBDNiAwMzAxOzs7O047O2FzaCAqOzswMUZEOworMDFGRDtMQVRJTiBTTUFMTCBMRVRURVIgQUUgV0lUSCBBQ1VURTtMbDswO0w7MDBFNiAwMzAxOzs7O047O2FzaCAqOzAxRkM7OzAxRkMKKzAxRkU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRSBBTkQgQUNVVEU7THU7MDtMOzAwRDggMDMwMTs7OztOOzs7OzAxRkY7CiswMUZGO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFIEFORCBBQ1VURTtMbDswO0w7MDBGOCAwMzAxOzs7O047OzswMUZFOzswMUZFCiswMjAwO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBET1VCTEUgR1JBVkU7THU7MDtMOzAwNDEgMDMwRjs7OztOOzs7OzAyMDE7CiswMjAxO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRE9VQkxFIEdSQVZFO0xsOzA7TDswMDYxIDAzMEY7Ozs7Tjs7OzAyMDA7OzAyMDAKKzAyMDI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIElOVkVSVEVEIEJSRVZFO0x1OzA7TDswMDQxIDAzMTE7Ozs7Tjs7OzswMjAzOworMDIwMztMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIElOVkVSVEVEIEJSRVZFO0xsOzA7TDswMDYxIDAzMTE7Ozs7Tjs7OzAyMDI7OzAyMDIKKzAyMDQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERPVUJMRSBHUkFWRTtMdTswO0w7MDA0NSAwMzBGOzs7O047Ozs7MDIwNTsKKzAyMDU7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBET1VCTEUgR1JBVkU7TGw7MDtMOzAwNjUgMDMwRjs7OztOOzs7MDIwNDs7MDIwNAorMDIwNjtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggSU5WRVJURUQgQlJFVkU7THU7MDtMOzAwNDUgMDMxMTs7OztOOzs7OzAyMDc7CiswMjA3O0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggSU5WRVJURUQgQlJFVkU7TGw7MDtMOzAwNjUgMDMxMTs7OztOOzs7MDIwNjs7MDIwNgorMDIwODtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9VQkxFIEdSQVZFO0x1OzA7TDswMDQ5IDAzMEY7Ozs7Tjs7OzswMjA5OworMDIwOTtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERPVUJMRSBHUkFWRTtMbDswO0w7MDA2OSAwMzBGOzs7O047OzswMjA4OzswMjA4CiswMjBBO0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBJTlZFUlRFRCBCUkVWRTtMdTswO0w7MDA0OSAwMzExOzs7O047Ozs7MDIwQjsKKzAyMEI7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBJTlZFUlRFRCBCUkVWRTtMbDswO0w7MDA2OSAwMzExOzs7O047OzswMjBBOzswMjBBCiswMjBDO0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBET1VCTEUgR1JBVkU7THU7MDtMOzAwNEYgMDMwRjs7OztOOzs7OzAyMEQ7CiswMjBEO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRE9VQkxFIEdSQVZFO0xsOzA7TDswMDZGIDAzMEY7Ozs7Tjs7OzAyMEM7OzAyMEMKKzAyMEU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIElOVkVSVEVEIEJSRVZFO0x1OzA7TDswMDRGIDAzMTE7Ozs7Tjs7OzswMjBGOworMDIwRjtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIElOVkVSVEVEIEJSRVZFO0xsOzA7TDswMDZGIDAzMTE7Ozs7Tjs7OzAyMEU7OzAyMEUKKzAyMTA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIERPVUJMRSBHUkFWRTtMdTswO0w7MDA1MiAwMzBGOzs7O047Ozs7MDIxMTsKKzAyMTE7TEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBET1VCTEUgR1JBVkU7TGw7MDtMOzAwNzIgMDMwRjs7OztOOzs7MDIxMDs7MDIxMAorMDIxMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBSIFdJVEggSU5WRVJURUQgQlJFVkU7THU7MDtMOzAwNTIgMDMxMTs7OztOOzs7OzAyMTM7CiswMjEzO0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggSU5WRVJURUQgQlJFVkU7TGw7MDtMOzAwNzIgMDMxMTs7OztOOzs7MDIxMjs7MDIxMgorMDIxNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRE9VQkxFIEdSQVZFO0x1OzA7TDswMDU1IDAzMEY7Ozs7Tjs7OzswMjE1OworMDIxNTtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERPVUJMRSBHUkFWRTtMbDswO0w7MDA3NSAwMzBGOzs7O047OzswMjE0OzswMjE0CiswMjE2O0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBJTlZFUlRFRCBCUkVWRTtMdTswO0w7MDA1NSAwMzExOzs7O047Ozs7MDIxNzsKKzAyMTc7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBJTlZFUlRFRCBCUkVWRTtMbDswO0w7MDA3NSAwMzExOzs7O047OzswMjE2OzswMjE2CiswMjE4O0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDT01NQSBCRUxPVztMdTswO0w7MDA1MyAwMzI2Ozs7O047Oyo7OzAyMTk7CiswMjE5O0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ09NTUEgQkVMT1c7TGw7MDtMOzAwNzMgMDMyNjs7OztOOzsqOzAyMTg7OzAyMTgKKzAyMUE7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIENPTU1BIEJFTE9XO0x1OzA7TDswMDU0IDAzMjY7Ozs7Tjs7Kjs7MDIxQjsKKzAyMUI7TEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBDT01NQSBCRUxPVztMbDswO0w7MDA3NCAwMzI2Ozs7O047Oyo7MDIxQTs7MDIxQQorMDIxQztMQVRJTiBDQVBJVEFMIExFVFRFUiBZT0dIO0x1OzA7TDs7Ozs7Tjs7OzswMjFEOworMDIxRDtMQVRJTiBTTUFMTCBMRVRURVIgWU9HSDtMbDswO0w7Ozs7O047OzswMjFDOzswMjFDCiswMjFFO0xBVElOIENBUElUQUwgTEVUVEVSIEggV0lUSCBDQVJPTjtMdTswO0w7MDA0OCAwMzBDOzs7O047Ozs7MDIxRjsKKzAyMUY7TEFUSU4gU01BTEwgTEVUVEVSIEggV0lUSCBDQVJPTjtMbDswO0w7MDA2OCAwMzBDOzs7O047OzswMjFFOzswMjFFCiswMjIwO0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBMT05HIFJJR0hUIExFRztMdTswO0w7Ozs7O047Ozs7MDE5RTsKKzAyMjI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgT1U7THU7MDtMOzs7OztOOzs7OzAyMjM7CiswMjIzO0xBVElOIFNNQUxMIExFVFRFUiBPVTtMbDswO0w7Ozs7O047OzswMjIyOzswMjIyCiswMjI0O0xBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBIT09LO0x1OzA7TDs7Ozs7Tjs7OzswMjI1OworMDIyNTtMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIEhPT0s7TGw7MDtMOzs7OztOOzs7MDIyNDs7MDIyNAorMDIyNjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRE9UIEFCT1ZFO0x1OzA7TDswMDQxIDAzMDc7Ozs7Tjs7OzswMjI3OworMDIyNztMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERPVCBBQk9WRTtMbDswO0w7MDA2MSAwMzA3Ozs7O047OzswMjI2OzswMjI2CiswMjI4O0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDRURJTExBO0x1OzA7TDswMDQ1IDAzMjc7Ozs7Tjs7OzswMjI5OworMDIyOTtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENFRElMTEE7TGw7MDtMOzAwNjUgMDMyNzs7OztOOzs7MDIyODs7MDIyOAorMDIyQTtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTIEFORCBNQUNST047THU7MDtMOzAwRDYgMDMwNDs7OztOOzs7OzAyMkI7CiswMjJCO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTIEFORCBNQUNST047TGw7MDtMOzAwRjYgMDMwNDs7OztOOzs7MDIyQTs7MDIyQQorMDIyQztMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUgQU5EIE1BQ1JPTjtMdTswO0w7MDBENSAwMzA0Ozs7O047Ozs7MDIyRDsKKzAyMkQ7TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERSBBTkQgTUFDUk9OO0xsOzA7TDswMEY1IDAzMDQ7Ozs7Tjs7OzAyMkM7OzAyMkMKKzAyMkU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERPVCBBQk9WRTtMdTswO0w7MDA0RiAwMzA3Ozs7O047Ozs7MDIyRjsKKzAyMkY7TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBET1QgQUJPVkU7TGw7MDtMOzAwNkYgMDMwNzs7OztOOzs7MDIyRTs7MDIyRQorMDIzMDtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRE9UIEFCT1ZFIEFORCBNQUNST047THU7MDtMOzAyMkUgMDMwNDs7OztOOzs7OzAyMzE7CiswMjMxO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRE9UIEFCT1ZFIEFORCBNQUNST047TGw7MDtMOzAyMkYgMDMwNDs7OztOOzs7MDIzMDs7MDIzMAorMDIzMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggTUFDUk9OO0x1OzA7TDswMDU5IDAzMDQ7Ozs7Tjs7OzswMjMzOworMDIzMztMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIE1BQ1JPTjtMbDswO0w7MDA3OSAwMzA0Ozs7O047OzswMjMyOzswMjMyCiswMjUwO0xBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgQTtMbDswO0w7Ozs7O047Ozs7OworMDI1MTtMQVRJTiBTTUFMTCBMRVRURVIgQUxQSEE7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBTQ1JJUFQgQTs7OzsKKzAyNTI7TEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBBTFBIQTtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBTQ1JJUFQgQTs7OzsKKzAyNTM7TEFUSU4gU01BTEwgTEVUVEVSIEIgV0lUSCBIT09LO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQiBIT09LOzswMTgxOzswMTgxCiswMjU0O0xBVElOIFNNQUxMIExFVFRFUiBPUEVOIE87TGw7MDtMOzs7OztOOzs7MDE4Njs7MDE4NgorMDI1NTtMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENVUkw7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBDIENVUkw7Ozs7CiswMjU2O0xBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggVEFJTDtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEQgUkVUUk9GTEVYIEhPT0s7OzAxODk7OzAxODkKKzAyNTc7TEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBIT09LO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgRCBIT09LOzswMThBOzswMThBCiswMjU4O0xBVElOIFNNQUxMIExFVFRFUiBSRVZFUlNFRCBFO0xsOzA7TDs7Ozs7Tjs7Ozs7CiswMjU5O0xBVElOIFNNQUxMIExFVFRFUiBTQ0hXQTtMbDswO0w7Ozs7O047OzswMThGOzswMThGCiswMjVBO0xBVElOIFNNQUxMIExFVFRFUiBTQ0hXQSBXSVRIIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBTQ0hXQSBIT09LOzs7OworMDI1QjtMQVRJTiBTTUFMTCBMRVRURVIgT1BFTiBFO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgRVBTSUxPTjs7MDE5MDs7MDE5MAorMDI1QztMQVRJTiBTTUFMTCBMRVRURVIgUkVWRVJTRUQgT1BFTiBFO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgUkVWRVJTRUQgRVBTSUxPTjs7OzsKKzAyNUQ7TEFUSU4gU01BTEwgTEVUVEVSIFJFVkVSU0VEIE9QRU4gRSBXSVRIIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBSRVZFUlNFRCBFUFNJTE9OIEhPT0s7Ozs7CiswMjVFO0xBVElOIFNNQUxMIExFVFRFUiBDTE9TRUQgUkVWRVJTRUQgT1BFTiBFO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgQ0xPU0VEIFJFVkVSU0VEIEVQU0lMT047Ozs7CiswMjVGO0xBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEogV0lUSCBTVFJPS0U7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEogQkFSOzs7OworMDI2MDtMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBHIEhPT0s7OzAxOTM7OzAxOTMKKzAyNjE7TEFUSU4gU01BTEwgTEVUVEVSIFNDUklQVCBHO0xsOzA7TDs7Ozs7Tjs7Ozs7CiswMjYyO0xBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIEc7TGw7MDtMOzs7OztOOzs7OzsKKzAyNjM7TEFUSU4gU01BTEwgTEVUVEVSIEdBTU1BO0xsOzA7TDs7Ozs7Tjs7OzAxOTQ7OzAxOTQKKzAyNjQ7TEFUSU4gU01BTEwgTEVUVEVSIFJBTVMgSE9STjtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEJBQlkgR0FNTUE7Ozs7CiswMjY1O0xBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgSDtMbDswO0w7Ozs7O047Ozs7OworMDI2NjtMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBIIEhPT0s7Ozs7CiswMjY3O0xBVElOIFNNQUxMIExFVFRFUiBIRU5HIFdJVEggSE9PSztMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEhFTkcgSE9PSzs7OzsKKzAyNjg7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBTVFJPS0U7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBCQVJSRUQgSTs7MDE5Nzs7MDE5NworMDI2OTtMQVRJTiBTTUFMTCBMRVRURVIgSU9UQTtMbDswO0w7Ozs7O047OzswMTk2OzswMTk2CiswMjZBO0xBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIEk7TGw7MDtMOzs7OztOOzs7OzsKKzAyNkI7TEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBNSURETEUgVElMREU7TGw7MDtMOzs7OztOOzs7OzsKKzAyNkM7TEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBCRUxUO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTCBCRUxUOzs7OworMDI2RDtMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIFJFVFJPRkxFWCBIT09LO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgTCBSRVRST0ZMRVggSE9PSzs7OzsKKzAyNkU7TEFUSU4gU01BTEwgTEVUVEVSIExFWkg7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBMIFlPR0g7Ozs7CiswMjZGO0xBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgTTtMbDswO0w7Ozs7O047OzswMTlDOzswMTlDCiswMjcwO0xBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgTSBXSVRIIExPTkcgTEVHO0xsOzA7TDs7Ozs7Tjs7Ozs7CiswMjcxO0xBVElOIFNNQUxMIExFVFRFUiBNIFdJVEggSE9PSztMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIE0gSE9PSzs7OzsKKzAyNzI7TEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBMRUZUIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBOIEhPT0s7OzAxOUQ7OzAxOUQKKzAyNzM7TEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBSRVRST0ZMRVggSE9PSztMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIE4gUkVUUk9GTEVYIEhPT0s7Ozs7CiswMjc0O0xBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIE47TGw7MDtMOzs7OztOOzs7OzsKKzAyNzU7TEFUSU4gU01BTEwgTEVUVEVSIEJBUlJFRCBPO0xsOzA7TDs7Ozs7Tjs7OzAxOUY7OzAxOUYKKzAyNzY7TEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgT0U7TGw7MDtMOzs7OztOO0xBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIE8gRTs7OzsKKzAyNzc7TEFUSU4gU01BTEwgTEVUVEVSIENMT1NFRCBPTUVHQTtMbDswO0w7Ozs7O047Ozs7OworMDI3ODtMQVRJTiBTTUFMTCBMRVRURVIgUEhJO0xsOzA7TDs7Ozs7Tjs7Ozs7CiswMjc5O0xBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgUjtMbDswO0w7Ozs7O047Ozs7OworMDI3QTtMQVRJTiBTTUFMTCBMRVRURVIgVFVSTkVEIFIgV0lUSCBMT05HIExFRztMbDswO0w7Ozs7O047Ozs7OworMDI3QjtMQVRJTiBTTUFMTCBMRVRURVIgVFVSTkVEIFIgV0lUSCBIT09LO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgVFVSTkVEIFIgSE9PSzs7OzsKKzAyN0M7TEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBMT05HIExFRztMbDswO0w7Ozs7O047Ozs7OworMDI3RDtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIFRBSUw7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBSIEhPT0s7Ozs7CiswMjdFO0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRklTSEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBGSVNISE9PSyBSOzs7OworMDI3RjtMQVRJTiBTTUFMTCBMRVRURVIgUkVWRVJTRUQgUiBXSVRIIEZJU0hIT09LO0xsOzA7TDs7Ozs7TjtMQVRJTiBTTUFMTCBMRVRURVIgUkVWRVJTRUQgRklTSEhPT0sgUjs7OzsKKzAyODA7TEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgUjtMbDswO0w7Ozs7O047Oyo7MDFBNjs7MDFBNgorMDI4MTtMQVRJTiBMRVRURVIgU01BTEwgQ0FQSVRBTCBJTlZFUlRFRCBSO0xsOzA7TDs7Ozs7Tjs7Ozs7CiswMjgyO0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggSE9PSztMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFMgSE9PSzs7OzsKKzAyODM7TEFUSU4gU01BTEwgTEVUVEVSIEVTSDtMbDswO0w7Ozs7O047OzswMUE5OzswMUE5CiswMjg0O0xBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEogV0lUSCBTVFJPS0UgQU5EIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEogQkFSIEhPT0s7Ozs7CiswMjg1O0xBVElOIFNNQUxMIExFVFRFUiBTUVVBVCBSRVZFUlNFRCBFU0g7TGw7MDtMOzs7OztOOzs7OzsKKzAyODY7TEFUSU4gU01BTEwgTEVUVEVSIEVTSCBXSVRIIENVUkw7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBFU0ggQ1VSTDs7OzsKKzAyODc7TEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBUO0xsOzA7TDs7Ozs7Tjs7Ozs7CiswMjg4O0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggUkVUUk9GTEVYIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBUIFJFVFJPRkxFWCBIT09LOzswMUFFOzswMUFFCiswMjg5O0xBVElOIFNNQUxMIExFVFRFUiBVIEJBUjtMbDswO0w7Ozs7O047Ozs7OworMDI4QTtMQVRJTiBTTUFMTCBMRVRURVIgVVBTSUxPTjtMbDswO0w7Ozs7O047OzswMUIxOzswMUIxCiswMjhCO0xBVElOIFNNQUxMIExFVFRFUiBWIFdJVEggSE9PSztMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFNDUklQVCBWOzswMUIyOzswMUIyCiswMjhDO0xBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgVjtMbDswO0w7Ozs7O047Ozs7OworMDI4RDtMQVRJTiBTTUFMTCBMRVRURVIgVFVSTkVEIFc7TGw7MDtMOzs7OztOOzs7OzsKKzAyOEU7TEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBZO0xsOzA7TDs7Ozs7Tjs7Ozs7CiswMjhGO0xBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIFk7TGw7MDtMOzs7OztOOzs7OzsKKzAyOTA7TEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBSRVRST0ZMRVggSE9PSztMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFogUkVUUk9GTEVYIEhPT0s7Ozs7CiswMjkxO0xBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggQ1VSTDtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFogQ1VSTDs7OzsKKzAyOTI7TEFUSU4gU01BTEwgTEVUVEVSIEVaSDtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFlPR0g7OzAxQjc7OzAxQjcKKzAyOTM7TEFUSU4gU01BTEwgTEVUVEVSIEVaSCBXSVRIIENVUkw7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBZT0dIIENVUkw7Ozs7CiswMjk0O0xBVElOIExFVFRFUiBHTE9UVEFMIFNUT1A7TGw7MDtMOzs7OztOOzs7OzsKKzAyOTU7TEFUSU4gTEVUVEVSIFBIQVJZTkdFQUwgVk9JQ0VEIEZSSUNBVElWRTtMbDswO0w7Ozs7O047TEFUSU4gTEVUVEVSIFJFVkVSU0VEIEdMT1RUQUwgU1RPUDs7OzsKKzAyOTY7TEFUSU4gTEVUVEVSIElOVkVSVEVEIEdMT1RUQUwgU1RPUDtMbDswO0w7Ozs7O047Ozs7OworMDI5NztMQVRJTiBMRVRURVIgU1RSRVRDSEVEIEM7TGw7MDtMOzs7OztOOzs7OzsKKzAyOTg7TEFUSU4gTEVUVEVSIEJJTEFCSUFMIENMSUNLO0xsOzA7TDs7Ozs7TjtMQVRJTiBMRVRURVIgQlVMTFNFWUU7Ozs7CiswMjk5O0xBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIEI7TGw7MDtMOzs7OztOOzs7OzsKKzAyOUE7TEFUSU4gU01BTEwgTEVUVEVSIENMT1NFRCBPUEVOIEU7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBDTE9TRUQgRVBTSUxPTjs7OzsKKzAyOUI7TEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgRyBXSVRIIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIEcgSE9PSzs7OzsKKzAyOUM7TEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgSDtMbDswO0w7Ozs7O047Ozs7OworMDI5RDtMQVRJTiBTTUFMTCBMRVRURVIgSiBXSVRIIENST1NTRUQtVEFJTDtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIENST1NTRUQtVEFJTCBKOzs7OworMDI5RTtMQVRJTiBTTUFMTCBMRVRURVIgVFVSTkVEIEs7TGw7MDtMOzs7OztOOzs7OzsKKzAyOUY7TEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgTDtMbDswO0w7Ozs7O047Ozs7OworMDJBMDtMQVRJTiBTTUFMTCBMRVRURVIgUSBXSVRIIEhPT0s7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBRIEhPT0s7Ozs7CiswMkExO0xBVElOIExFVFRFUiBHTE9UVEFMIFNUT1AgV0lUSCBTVFJPS0U7TGw7MDtMOzs7OztOO0xBVElOIExFVFRFUiBHTE9UVEFMIFNUT1AgQkFSOzs7OworMDJBMjtMQVRJTiBMRVRURVIgUkVWRVJTRUQgR0xPVFRBTCBTVE9QIFdJVEggU1RST0tFO0xsOzA7TDs7Ozs7TjtMQVRJTiBMRVRURVIgUkVWRVJTRUQgR0xPVFRBTCBTVE9QIEJBUjs7OzsKKzAyQTM7TEFUSU4gU01BTEwgTEVUVEVSIERaIERJR1JBUEg7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBEIFo7Ozs7CiswMkE0O0xBVElOIFNNQUxMIExFVFRFUiBERVpIIERJR1JBUEg7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBEIFlPR0g7Ozs7CiswMkE1O0xBVElOIFNNQUxMIExFVFRFUiBEWiBESUdSQVBIIFdJVEggQ1VSTDtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIEQgWiBDVVJMOzs7OworMDJBNjtMQVRJTiBTTUFMTCBMRVRURVIgVFMgRElHUkFQSDtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFQgUzs7OzsKKzAyQTc7TEFUSU4gU01BTEwgTEVUVEVSIFRFU0ggRElHUkFQSDtMbDswO0w7Ozs7O047TEFUSU4gU01BTEwgTEVUVEVSIFQgRVNIOzs7OworMDJBODtMQVRJTiBTTUFMTCBMRVRURVIgVEMgRElHUkFQSCBXSVRIIENVUkw7TGw7MDtMOzs7OztOO0xBVElOIFNNQUxMIExFVFRFUiBUIEMgQ1VSTDs7OzsKKzAyQTk7TEFUSU4gU01BTEwgTEVUVEVSIEZFTkcgRElHUkFQSDtMbDswO0w7Ozs7O047Ozs7OworMDJBQTtMQVRJTiBTTUFMTCBMRVRURVIgTFMgRElHUkFQSDtMbDswO0w7Ozs7O047Ozs7OworMDJBQjtMQVRJTiBTTUFMTCBMRVRURVIgTFogRElHUkFQSDtMbDswO0w7Ozs7O047Ozs7OworMDJBQztMQVRJTiBMRVRURVIgQklMQUJJQUwgUEVSQ1VTU0lWRTtMbDswO0w7Ozs7O047Ozs7OworMDJBRDtMQVRJTiBMRVRURVIgQklERU5UQUwgUEVSQ1VTU0lWRTtMbDswO0w7Ozs7O047Ozs7OworMDJCMDtNT0RJRklFUiBMRVRURVIgU01BTEwgSDtMbTswO0w7PHN1cGVyPiAwMDY4Ozs7O047Ozs7OworMDJCMTtNT0RJRklFUiBMRVRURVIgU01BTEwgSCBXSVRIIEhPT0s7TG07MDtMOzxzdXBlcj4gMDI2Njs7OztOO01PRElGSUVSIExFVFRFUiBTTUFMTCBIIEhPT0s7Ozs7CiswMkIyO01PRElGSUVSIExFVFRFUiBTTUFMTCBKO0xtOzA7TDs8c3VwZXI+IDAwNkE7Ozs7Tjs7Ozs7CiswMkIzO01PRElGSUVSIExFVFRFUiBTTUFMTCBSO0xtOzA7TDs8c3VwZXI+IDAwNzI7Ozs7Tjs7Ozs7CiswMkI0O01PRElGSUVSIExFVFRFUiBTTUFMTCBUVVJORUQgUjtMbTswO0w7PHN1cGVyPiAwMjc5Ozs7O047Ozs7OworMDJCNTtNT0RJRklFUiBMRVRURVIgU01BTEwgVFVSTkVEIFIgV0lUSCBIT09LO0xtOzA7TDs8c3VwZXI+IDAyN0I7Ozs7TjtNT0RJRklFUiBMRVRURVIgU01BTEwgVFVSTkVEIFIgSE9PSzs7OzsKKzAyQjY7TU9ESUZJRVIgTEVUVEVSIFNNQUxMIENBUElUQUwgSU5WRVJURUQgUjtMbTswO0w7PHN1cGVyPiAwMjgxOzs7O047Ozs7OworMDJCNztNT0RJRklFUiBMRVRURVIgU01BTEwgVztMbTswO0w7PHN1cGVyPiAwMDc3Ozs7O047Ozs7OworMDJCODtNT0RJRklFUiBMRVRURVIgU01BTEwgWTtMbTswO0w7PHN1cGVyPiAwMDc5Ozs7O047Ozs7OworMDJCOTtNT0RJRklFUiBMRVRURVIgUFJJTUU7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkJBO01PRElGSUVSIExFVFRFUiBET1VCTEUgUFJJTUU7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkJCO01PRElGSUVSIExFVFRFUiBUVVJORUQgQ09NTUE7TG07MDtMOzs7OztOOzs7OzsKKzAyQkM7TU9ESUZJRVIgTEVUVEVSIEFQT1NUUk9QSEU7TG07MDtMOzs7OztOOzs7OzsKKzAyQkQ7TU9ESUZJRVIgTEVUVEVSIFJFVkVSU0VEIENPTU1BO0xtOzA7TDs7Ozs7Tjs7Ozs7CiswMkJFO01PRElGSUVSIExFVFRFUiBSSUdIVCBIQUxGIFJJTkc7TG07MDtMOzs7OztOOzs7OzsKKzAyQkY7TU9ESUZJRVIgTEVUVEVSIExFRlQgSEFMRiBSSU5HO0xtOzA7TDs7Ozs7Tjs7Ozs7CiswMkMwO01PRElGSUVSIExFVFRFUiBHTE9UVEFMIFNUT1A7TG07MDtMOzs7OztOOzs7OzsKKzAyQzE7TU9ESUZJRVIgTEVUVEVSIFJFVkVSU0VEIEdMT1RUQUwgU1RPUDtMbTswO0w7Ozs7O047Ozs7OworMDJDMjtNT0RJRklFUiBMRVRURVIgTEVGVCBBUlJPV0hFQUQ7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkMzO01PRElGSUVSIExFVFRFUiBSSUdIVCBBUlJPV0hFQUQ7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkM0O01PRElGSUVSIExFVFRFUiBVUCBBUlJPV0hFQUQ7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkM1O01PRElGSUVSIExFVFRFUiBET1dOIEFSUk9XSEVBRDtTazswO09OOzs7OztOOzs7OzsKKzAyQzY7TU9ESUZJRVIgTEVUVEVSIENJUkNVTUZMRVggQUNDRU5UO1NrOzA7T047Ozs7O047TU9ESUZJRVIgTEVUVEVSIENJUkNVTUZMRVg7Ozs7CiswMkM3O0NBUk9OO1NrOzA7T047Ozs7O047TU9ESUZJRVIgTEVUVEVSIEhBQ0VLO01hbmRhcmluIENoaW5lc2UgdGhpcmQgdG9uZTs7OworMDJDODtNT0RJRklFUiBMRVRURVIgVkVSVElDQUwgTElORTtTazswO09OOzs7OztOOzs7OzsKKzAyQzk7TU9ESUZJRVIgTEVUVEVSIE1BQ1JPTjtTazswO09OOzs7OztOOztNYW5kYXJpbiBDaGluZXNlIGZpcnN0IHRvbmU7OzsKKzAyQ0E7TU9ESUZJRVIgTEVUVEVSIEFDVVRFIEFDQ0VOVDtTazswO09OOzs7OztOO01PRElGSUVSIExFVFRFUiBBQ1VURTtNYW5kYXJpbiBDaGluZXNlIHNlY29uZCB0b25lOzs7CiswMkNCO01PRElGSUVSIExFVFRFUiBHUkFWRSBBQ0NFTlQ7U2s7MDtPTjs7Ozs7TjtNT0RJRklFUiBMRVRURVIgR1JBVkU7TWFuZGFyaW4gQ2hpbmVzZSBmb3VydGggdG9uZTs7OworMDJDQztNT0RJRklFUiBMRVRURVIgTE9XIFZFUlRJQ0FMIExJTkU7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkNEO01PRElGSUVSIExFVFRFUiBMT1cgTUFDUk9OO1NrOzA7T047Ozs7O047Ozs7OworMDJDRTtNT0RJRklFUiBMRVRURVIgTE9XIEdSQVZFIEFDQ0VOVDtTazswO09OOzs7OztOO01PRElGSUVSIExFVFRFUiBMT1cgR1JBVkU7Ozs7CiswMkNGO01PRElGSUVSIExFVFRFUiBMT1cgQUNVVEUgQUNDRU5UO1NrOzA7T047Ozs7O047TU9ESUZJRVIgTEVUVEVSIExPVyBBQ1VURTs7OzsKKzAyRDA7TU9ESUZJRVIgTEVUVEVSIFRSSUFOR1VMQVIgQ09MT047TG07MDtMOzs7OztOOzs7OzsKKzAyRDE7TU9ESUZJRVIgTEVUVEVSIEhBTEYgVFJJQU5HVUxBUiBDT0xPTjtMbTswO0w7Ozs7O047Ozs7OworMDJEMjtNT0RJRklFUiBMRVRURVIgQ0VOVFJFRCBSSUdIVCBIQUxGIFJJTkc7U2s7MDtPTjs7Ozs7TjtNT0RJRklFUiBMRVRURVIgQ0VOVEVSRUQgUklHSFQgSEFMRiBSSU5HOzs7OworMDJEMztNT0RJRklFUiBMRVRURVIgQ0VOVFJFRCBMRUZUIEhBTEYgUklORztTazswO09OOzs7OztOO01PRElGSUVSIExFVFRFUiBDRU5URVJFRCBMRUZUIEhBTEYgUklORzs7OzsKKzAyRDQ7TU9ESUZJRVIgTEVUVEVSIFVQIFRBQ0s7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkQ1O01PRElGSUVSIExFVFRFUiBET1dOIFRBQ0s7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkQ2O01PRElGSUVSIExFVFRFUiBQTFVTIFNJR047U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkQ3O01PRElGSUVSIExFVFRFUiBNSU5VUyBTSUdOO1NrOzA7T047Ozs7O047Ozs7OworMDJEODtCUkVWRTtTazswO09OOzxjb21wYXQ+IDAwMjAgMDMwNjs7OztOO1NQQUNJTkcgQlJFVkU7Ozs7CiswMkQ5O0RPVCBBQk9WRTtTazswO09OOzxjb21wYXQ+IDAwMjAgMDMwNzs7OztOO1NQQUNJTkcgRE9UIEFCT1ZFO01hbmRhcmluIENoaW5lc2UgbGlnaHQgdG9uZTs7OworMDJEQTtSSU5HIEFCT1ZFO1NrOzA7T047PGNvbXBhdD4gMDAyMCAwMzBBOzs7O047U1BBQ0lORyBSSU5HIEFCT1ZFOzs7OworMDJEQjtPR09ORUs7U2s7MDtPTjs8Y29tcGF0PiAwMDIwIDAzMjg7Ozs7TjtTUEFDSU5HIE9HT05FSzs7OzsKKzAyREM7U01BTEwgVElMREU7U2s7MDtPTjs8Y29tcGF0PiAwMDIwIDAzMDM7Ozs7TjtTUEFDSU5HIFRJTERFOzs7OworMDJERDtET1VCTEUgQUNVVEUgQUNDRU5UO1NrOzA7T047PGNvbXBhdD4gMDAyMCAwMzBCOzs7O047U1BBQ0lORyBET1VCTEUgQUNVVEU7Ozs7CiswMkRFO01PRElGSUVSIExFVFRFUiBSSE9USUMgSE9PSztTazswO09OOzs7OztOOzs7OzsKKzAyREY7TU9ESUZJRVIgTEVUVEVSIENST1NTIEFDQ0VOVDtTazswO09OOzs7OztOOzs7OzsKKzAyRTA7TU9ESUZJRVIgTEVUVEVSIFNNQUxMIEdBTU1BO0xtOzA7TDs8c3VwZXI+IDAyNjM7Ozs7Tjs7Ozs7CiswMkUxO01PRElGSUVSIExFVFRFUiBTTUFMTCBMO0xtOzA7TDs8c3VwZXI+IDAwNkM7Ozs7Tjs7Ozs7CiswMkUyO01PRElGSUVSIExFVFRFUiBTTUFMTCBTO0xtOzA7TDs8c3VwZXI+IDAwNzM7Ozs7Tjs7Ozs7CiswMkUzO01PRElGSUVSIExFVFRFUiBTTUFMTCBYO0xtOzA7TDs8c3VwZXI+IDAwNzg7Ozs7Tjs7Ozs7CiswMkU0O01PRElGSUVSIExFVFRFUiBTTUFMTCBSRVZFUlNFRCBHTE9UVEFMIFNUT1A7TG07MDtMOzxzdXBlcj4gMDI5NTs7OztOOzs7OzsKKzAyRTU7TU9ESUZJRVIgTEVUVEVSIEVYVFJBLUhJR0ggVE9ORSBCQVI7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkU2O01PRElGSUVSIExFVFRFUiBISUdIIFRPTkUgQkFSO1NrOzA7T047Ozs7O047Ozs7OworMDJFNztNT0RJRklFUiBMRVRURVIgTUlEIFRPTkUgQkFSO1NrOzA7T047Ozs7O047Ozs7OworMDJFODtNT0RJRklFUiBMRVRURVIgTE9XIFRPTkUgQkFSO1NrOzA7T047Ozs7O047Ozs7OworMDJFOTtNT0RJRklFUiBMRVRURVIgRVhUUkEtTE9XIFRPTkUgQkFSO1NrOzA7T047Ozs7O047Ozs7OworMDJFQTtNT0RJRklFUiBMRVRURVIgWUlOIERFUEFSVElORyBUT05FIE1BUks7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkVCO01PRElGSUVSIExFVFRFUiBZQU5HIERFUEFSVElORyBUT05FIE1BUks7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkVDO01PRElGSUVSIExFVFRFUiBWT0lDSU5HO1NrOzA7T047Ozs7O047Ozs7OworMDJFRDtNT0RJRklFUiBMRVRURVIgVU5BU1BJUkFURUQ7U2s7MDtPTjs7Ozs7Tjs7Ozs7CiswMkVFO01PRElGSUVSIExFVFRFUiBET1VCTEUgQVBPU1RST1BIRTtMbTswO0w7Ozs7O047Ozs7OworMDMwMDtDT01CSU5JTkcgR1JBVkUgQUNDRU5UO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgR1JBVkU7VmFyaWE7OzsKKzAzMDE7Q09NQklOSU5HIEFDVVRFIEFDQ0VOVDtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIEFDVVRFO094aWEsIFRvbm9zOzs7CiswMzAyO0NPTUJJTklORyBDSVJDVU1GTEVYIEFDQ0VOVDtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIENJUkNVTUZMRVg7Ozs7CiswMzAzO0NPTUJJTklORyBUSUxERTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIFRJTERFOzs7OworMDMwNDtDT01CSU5JTkcgTUFDUk9OO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgTUFDUk9OOzs7OworMDMwNTtDT01CSU5JTkcgT1ZFUkxJTkU7TW47MjMwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBPVkVSU0NPUkU7Ozs7CiswMzA2O0NPTUJJTklORyBCUkVWRTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIEJSRVZFO1ZyYWNoeTs7OworMDMwNztDT01CSU5JTkcgRE9UIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgRE9UIEFCT1ZFOzs7OworMDMwODtDT01CSU5JTkcgRElBRVJFU0lTO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgRElBRVJFU0lTO0RpYWx5dGlrYTs7OworMDMwOTtDT01CSU5JTkcgSE9PSyBBQk9WRTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIEhPT0sgQUJPVkU7Ozs7CiswMzBBO0NPTUJJTklORyBSSU5HIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgUklORyBBQk9WRTs7OzsKKzAzMEI7Q09NQklOSU5HIERPVUJMRSBBQ1VURSBBQ0NFTlQ7TW47MjMwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBET1VCTEUgQUNVVEU7Ozs7CiswMzBDO0NPTUJJTklORyBDQVJPTjtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIEhBQ0VLOzs7OworMDMwRDtDT01CSU5JTkcgVkVSVElDQUwgTElORSBBQk9WRTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIFZFUlRJQ0FMIExJTkUgQUJPVkU7Ozs7CiswMzBFO0NPTUJJTklORyBET1VCTEUgVkVSVElDQUwgTElORSBBQk9WRTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIERPVUJMRSBWRVJUSUNBTCBMSU5FIEFCT1ZFOzs7OworMDMwRjtDT01CSU5JTkcgRE9VQkxFIEdSQVZFIEFDQ0VOVDtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIERPVUJMRSBHUkFWRTs7OzsKKzAzMTA7Q09NQklOSU5HIENBTkRSQUJJTkRVO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgQ0FORFJBQklORFU7Ozs7CiswMzExO0NPTUJJTklORyBJTlZFUlRFRCBCUkVWRTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIElOVkVSVEVEIEJSRVZFOzs7OworMDMxMjtDT01CSU5JTkcgVFVSTkVEIENPTU1BIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgVFVSTkVEIENPTU1BIEFCT1ZFOzs7OworMDMxMztDT01CSU5JTkcgQ09NTUEgQUJPVkU7TW47MjMwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBDT01NQSBBQk9WRTtQc2lsaTs7OworMDMxNDtDT01CSU5JTkcgUkVWRVJTRUQgQ09NTUEgQUJPVkU7TW47MjMwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBSRVZFUlNFRCBDT01NQSBBQk9WRTtEYXNpYTs7OworMDMxNTtDT01CSU5JTkcgQ09NTUEgQUJPVkUgUklHSFQ7TW47MjMyO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBDT01NQSBBQk9WRSBSSUdIVDs7OzsKKzAzMTY7Q09NQklOSU5HIEdSQVZFIEFDQ0VOVCBCRUxPVztNbjsyMjA7TlNNOzs7OztOO05PTi1TUEFDSU5HIEdSQVZFIEJFTE9XOzs7OworMDMxNztDT01CSU5JTkcgQUNVVEUgQUNDRU5UIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgQUNVVEUgQkVMT1c7Ozs7CiswMzE4O0NPTUJJTklORyBMRUZUIFRBQ0sgQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBMRUZUIFRBQ0sgQkVMT1c7Ozs7CiswMzE5O0NPTUJJTklORyBSSUdIVCBUQUNLIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgUklHSFQgVEFDSyBCRUxPVzs7OzsKKzAzMUE7Q09NQklOSU5HIExFRlQgQU5HTEUgQUJPVkU7TW47MjMyO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBMRUZUIEFOR0xFIEFCT1ZFOzs7OworMDMxQjtDT01CSU5JTkcgSE9STjtNbjsyMTY7TlNNOzs7OztOO05PTi1TUEFDSU5HIEhPUk47Ozs7CiswMzFDO0NPTUJJTklORyBMRUZUIEhBTEYgUklORyBCRUxPVztNbjsyMjA7TlNNOzs7OztOO05PTi1TUEFDSU5HIExFRlQgSEFMRiBSSU5HIEJFTE9XOzs7OworMDMxRDtDT01CSU5JTkcgVVAgVEFDSyBCRUxPVztNbjsyMjA7TlNNOzs7OztOO05PTi1TUEFDSU5HIFVQIFRBQ0sgQkVMT1c7Ozs7CiswMzFFO0NPTUJJTklORyBET1dOIFRBQ0sgQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBET1dOIFRBQ0sgQkVMT1c7Ozs7CiswMzFGO0NPTUJJTklORyBQTFVTIFNJR04gQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBQTFVTIFNJR04gQkVMT1c7Ozs7CiswMzIwO0NPTUJJTklORyBNSU5VUyBTSUdOIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgTUlOVVMgU0lHTiBCRUxPVzs7OzsKKzAzMjE7Q09NQklOSU5HIFBBTEFUQUxJWkVEIEhPT0sgQkVMT1c7TW47MjAyO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBQQUxBVEFMSVpFRCBIT09LIEJFTE9XOzs7OworMDMyMjtDT01CSU5JTkcgUkVUUk9GTEVYIEhPT0sgQkVMT1c7TW47MjAyO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBSRVRST0ZMRVggSE9PSyBCRUxPVzs7OzsKKzAzMjM7Q09NQklOSU5HIERPVCBCRUxPVztNbjsyMjA7TlNNOzs7OztOO05PTi1TUEFDSU5HIERPVCBCRUxPVzs7OzsKKzAzMjQ7Q09NQklOSU5HIERJQUVSRVNJUyBCRUxPVztNbjsyMjA7TlNNOzs7OztOO05PTi1TUEFDSU5HIERPVUJMRSBET1QgQkVMT1c7Ozs7CiswMzI1O0NPTUJJTklORyBSSU5HIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgUklORyBCRUxPVzs7OzsKKzAzMjY7Q09NQklOSU5HIENPTU1BIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgQ09NTUEgQkVMT1c7Ozs7CiswMzI3O0NPTUJJTklORyBDRURJTExBO01uOzIwMjtOU007Ozs7O047Tk9OLVNQQUNJTkcgQ0VESUxMQTs7OzsKKzAzMjg7Q09NQklOSU5HIE9HT05FSztNbjsyMDI7TlNNOzs7OztOO05PTi1TUEFDSU5HIE9HT05FSzs7OzsKKzAzMjk7Q09NQklOSU5HIFZFUlRJQ0FMIExJTkUgQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBWRVJUSUNBTCBMSU5FIEJFTE9XOzs7OworMDMyQTtDT01CSU5JTkcgQlJJREdFIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgQlJJREdFIEJFTE9XOzs7OworMDMyQjtDT01CSU5JTkcgSU5WRVJURUQgRE9VQkxFIEFSQ0ggQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBJTlZFUlRFRCBET1VCTEUgQVJDSCBCRUxPVzs7OzsKKzAzMkM7Q09NQklOSU5HIENBUk9OIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgSEFDRUsgQkVMT1c7Ozs7CiswMzJEO0NPTUJJTklORyBDSVJDVU1GTEVYIEFDQ0VOVCBCRUxPVztNbjsyMjA7TlNNOzs7OztOO05PTi1TUEFDSU5HIENJUkNVTUZMRVggQkVMT1c7Ozs7CiswMzJFO0NPTUJJTklORyBCUkVWRSBCRUxPVztNbjsyMjA7TlNNOzs7OztOO05PTi1TUEFDSU5HIEJSRVZFIEJFTE9XOzs7OworMDMyRjtDT01CSU5JTkcgSU5WRVJURUQgQlJFVkUgQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBJTlZFUlRFRCBCUkVWRSBCRUxPVzs7OzsKKzAzMzA7Q09NQklOSU5HIFRJTERFIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgVElMREUgQkVMT1c7Ozs7CiswMzMxO0NPTUJJTklORyBNQUNST04gQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBNQUNST04gQkVMT1c7Ozs7CiswMzMyO0NPTUJJTklORyBMT1cgTElORTtNbjsyMjA7TlNNOzs7OztOO05PTi1TUEFDSU5HIFVOREVSU0NPUkU7Ozs7CiswMzMzO0NPTUJJTklORyBET1VCTEUgTE9XIExJTkU7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBET1VCTEUgVU5ERVJTQ09SRTs7OzsKKzAzMzQ7Q09NQklOSU5HIFRJTERFIE9WRVJMQVk7TW47MTtOU007Ozs7O047Tk9OLVNQQUNJTkcgVElMREUgT1ZFUkxBWTs7OzsKKzAzMzU7Q09NQklOSU5HIFNIT1JUIFNUUk9LRSBPVkVSTEFZO01uOzE7TlNNOzs7OztOO05PTi1TUEFDSU5HIFNIT1JUIEJBUiBPVkVSTEFZOzs7OworMDMzNjtDT01CSU5JTkcgTE9ORyBTVFJPS0UgT1ZFUkxBWTtNbjsxO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBMT05HIEJBUiBPVkVSTEFZOzs7OworMDMzNztDT01CSU5JTkcgU0hPUlQgU09MSURVUyBPVkVSTEFZO01uOzE7TlNNOzs7OztOO05PTi1TUEFDSU5HIFNIT1JUIFNMQVNIIE9WRVJMQVk7Ozs7CiswMzM4O0NPTUJJTklORyBMT05HIFNPTElEVVMgT1ZFUkxBWTtNbjsxO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBMT05HIFNMQVNIIE9WRVJMQVk7Ozs7CiswMzM5O0NPTUJJTklORyBSSUdIVCBIQUxGIFJJTkcgQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBSSUdIVCBIQUxGIFJJTkcgQkVMT1c7Ozs7CiswMzNBO0NPTUJJTklORyBJTlZFUlRFRCBCUklER0UgQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBJTlZFUlRFRCBCUklER0UgQkVMT1c7Ozs7CiswMzNCO0NPTUJJTklORyBTUVVBUkUgQkVMT1c7TW47MjIwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBTUVVBUkUgQkVMT1c7Ozs7CiswMzNDO0NPTUJJTklORyBTRUFHVUxMIEJFTE9XO01uOzIyMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgU0VBR1VMTCBCRUxPVzs7OzsKKzAzM0Q7Q09NQklOSU5HIFggQUJPVkU7TW47MjMwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBYIEFCT1ZFOzs7OworMDMzRTtDT01CSU5JTkcgVkVSVElDQUwgVElMREU7TW47MjMwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBWRVJUSUNBTCBUSUxERTs7OzsKKzAzM0Y7Q09NQklOSU5HIERPVUJMRSBPVkVSTElORTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIERPVUJMRSBPVkVSU0NPUkU7Ozs7CiswMzQwO0NPTUJJTklORyBHUkFWRSBUT05FIE1BUks7TW47MjMwO05TTTswMzAwOzs7O047Tk9OLVNQQUNJTkcgR1JBVkUgVE9ORSBNQVJLO1ZpZXRuYW1lc2U7OzsKKzAzNDE7Q09NQklOSU5HIEFDVVRFIFRPTkUgTUFSSztNbjsyMzA7TlNNOzAzMDE7Ozs7TjtOT04tU1BBQ0lORyBBQ1VURSBUT05FIE1BUks7VmlldG5hbWVzZTs7OworMDM0MjtDT01CSU5JTkcgR1JFRUsgUEVSSVNQT01FTkk7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswMzQzO0NPTUJJTklORyBHUkVFSyBLT1JPTklTO01uOzIzMDtOU007MDMxMzs7OztOOzs7OzsKKzAzNDQ7Q09NQklOSU5HIEdSRUVLIERJQUxZVElLQSBUT05PUztNbjsyMzA7TlNNOzAzMDggMDMwMTs7OztOO0dSRUVLIE5PTi1TUEFDSU5HIERJQUVSRVNJUyBUT05PUzs7OzsKKzAzNDU7Q09NQklOSU5HIEdSRUVLIFlQT0dFR1JBTU1FTkk7TW47MjQwO05TTTs7Ozs7TjtHUkVFSyBOT04tU1BBQ0lORyBJT1RBIEJFTE9XOzswMzk5OzswMzk5CiswMzQ2O0NPTUJJTklORyBCUklER0UgQUJPVkU7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswMzQ3O0NPTUJJTklORyBFUVVBTFMgU0lHTiBCRUxPVztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzAzNDg7Q09NQklOSU5HIERPVUJMRSBWRVJUSUNBTCBMSU5FIEJFTE9XO01uOzIyMDtOU007Ozs7O047Ozs7OworMDM0OTtDT01CSU5JTkcgTEVGVCBBTkdMRSBCRUxPVztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzAzNEE7Q09NQklOSU5HIE5PVCBUSUxERSBBQk9WRTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzAzNEI7Q09NQklOSU5HIEhPTU9USEVUSUMgQUJPVkU7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswMzRDO0NPTUJJTklORyBBTE1PU1QgRVFVQUwgVE8gQUJPVkU7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswMzREO0NPTUJJTklORyBMRUZUIFJJR0hUIEFSUk9XIEJFTE9XO01uOzIyMDtOU007Ozs7O047Ozs7OworMDM0RTtDT01CSU5JTkcgVVBXQVJEUyBBUlJPVyBCRUxPVztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzAzNEY7Q09NQklOSU5HIEdSQVBIRU1FIEpPSU5FUjtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswMzYwO0NPTUJJTklORyBET1VCTEUgVElMREU7TW47MjM0O05TTTs7Ozs7Tjs7Ozs7CiswMzYxO0NPTUJJTklORyBET1VCTEUgSU5WRVJURUQgQlJFVkU7TW47MjM0O05TTTs7Ozs7Tjs7Ozs7CiswMzYyO0NPTUJJTklORyBET1VCTEUgUklHSFRXQVJEUyBBUlJPVyBCRUxPVztNbjsyMzM7TlNNOzs7OztOOzs7OzsKKzAzNjM7Q09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBBO01uOzIzMDtOU007Ozs7O047Ozs7OworMDM2NDtDT01CSU5JTkcgTEFUSU4gU01BTEwgTEVUVEVSIEU7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswMzY1O0NPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgSTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzAzNjY7Q09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBPO01uOzIzMDtOU007Ozs7O047Ozs7OworMDM2NztDT01CSU5JTkcgTEFUSU4gU01BTEwgTEVUVEVSIFU7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswMzY4O0NPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgQztNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzAzNjk7Q09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBEO01uOzIzMDtOU007Ozs7O047Ozs7OworMDM2QTtDT01CSU5JTkcgTEFUSU4gU01BTEwgTEVUVEVSIEg7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswMzZCO0NPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgTTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzAzNkM7Q09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBSO01uOzIzMDtOU007Ozs7O047Ozs7OworMDM2RDtDT01CSU5JTkcgTEFUSU4gU01BTEwgTEVUVEVSIFQ7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswMzZFO0NPTUJJTklORyBMQVRJTiBTTUFMTCBMRVRURVIgVjtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzAzNkY7Q09NQklOSU5HIExBVElOIFNNQUxMIExFVFRFUiBYO01uOzIzMDtOU007Ozs7O047Ozs7OworMDM3NDtHUkVFSyBOVU1FUkFMIFNJR047U2s7MDtPTjswMkI5Ozs7O047R1JFRUsgVVBQRVIgTlVNRVJBTCBTSUdOO0RleGlhIGtlcmFpYTs7OworMDM3NTtHUkVFSyBMT1dFUiBOVU1FUkFMIFNJR047U2s7MDtPTjs7Ozs7Tjs7QXJpc3Rlcmkga2VyYWlhOzs7CiswMzdBO0dSRUVLIFlQT0dFR1JBTU1FTkk7TG07MDtMOzxjb21wYXQ+IDAwMjAgMDM0NTs7OztOO0dSRUVLIFNQQUNJTkcgSU9UQSBCRUxPVzs7OzsKKzAzN0U7R1JFRUsgUVVFU1RJT04gTUFSSztQbzswO09OOzAwM0I7Ozs7Tjs7RXJvdGltYXRpa287OzsKKzAzODQ7R1JFRUsgVE9OT1M7U2s7MDtPTjs8Y29tcGF0PiAwMDIwIDAzMDE7Ozs7TjtHUkVFSyBTUEFDSU5HIFRPTk9TOzs7OworMDM4NTtHUkVFSyBESUFMWVRJS0EgVE9OT1M7U2s7MDtPTjswMEE4IDAzMDE7Ozs7TjtHUkVFSyBTUEFDSU5HIERJQUVSRVNJUyBUT05PUzs7OzsKKzAzODY7R1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBUT05PUztMdTswO0w7MDM5MSAwMzAxOzs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgVE9OT1M7OzswM0FDOworMDM4NztHUkVFSyBBTk8gVEVMRUlBO1BvOzA7T047MDBCNzs7OztOOzs7OzsKKzAzODg7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIFRPTk9TO0x1OzA7TDswMzk1IDAzMDE7Ozs7TjtHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFRPTk9TOzs7MDNBRDsKKzAzODk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggVE9OT1M7THU7MDtMOzAzOTcgMDMwMTs7OztOO0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBUT05PUzs7OzAzQUU7CiswMzhBO0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBUT05PUztMdTswO0w7MDM5OSAwMzAxOzs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBUT05PUzs7OzAzQUY7CiswMzhDO0dSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBUT05PUztMdTswO0w7MDM5RiAwMzAxOzs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBUT05PUzs7OzAzQ0M7CiswMzhFO0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBUT05PUztMdTswO0w7MDNBNSAwMzAxOzs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBUT05PUzs7OzAzQ0Q7CiswMzhGO0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggVE9OT1M7THU7MDtMOzAzQTkgMDMwMTs7OztOO0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFRPTk9TOzs7MDNDRTsKKzAzOTA7R1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EgQU5EIFRPTk9TO0xsOzA7TDswM0NBIDAzMDE7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBESUFFUkVTSVMgVE9OT1M7Ozs7CiswMzkxO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBO0x1OzA7TDs7Ozs7Tjs7OzswM0IxOworMDM5MjtHUkVFSyBDQVBJVEFMIExFVFRFUiBCRVRBO0x1OzA7TDs7Ozs7Tjs7OzswM0IyOworMDM5MztHUkVFSyBDQVBJVEFMIExFVFRFUiBHQU1NQTtMdTswO0w7Ozs7O047Ozs7MDNCMzsKKzAzOTQ7R1JFRUsgQ0FQSVRBTCBMRVRURVIgREVMVEE7THU7MDtMOzs7OztOOzs7OzAzQjQ7CiswMzk1O0dSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT047THU7MDtMOzs7OztOOzs7OzAzQjU7CiswMzk2O0dSRUVLIENBUElUQUwgTEVUVEVSIFpFVEE7THU7MDtMOzs7OztOOzs7OzAzQjY7CiswMzk3O0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQTtMdTswO0w7Ozs7O047Ozs7MDNCNzsKKzAzOTg7R1JFRUsgQ0FQSVRBTCBMRVRURVIgVEhFVEE7THU7MDtMOzs7OztOOzs7OzAzQjg7CiswMzk5O0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEE7THU7MDtMOzs7OztOOzs7OzAzQjk7CiswMzlBO0dSRUVLIENBUElUQUwgTEVUVEVSIEtBUFBBO0x1OzA7TDs7Ozs7Tjs7OzswM0JBOworMDM5QjtHUkVFSyBDQVBJVEFMIExFVFRFUiBMQU1EQTtMdTswO0w7Ozs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgTEFNQkRBOzs7MDNCQjsKKzAzOUM7R1JFRUsgQ0FQSVRBTCBMRVRURVIgTVU7THU7MDtMOzs7OztOOzs7OzAzQkM7CiswMzlEO0dSRUVLIENBUElUQUwgTEVUVEVSIE5VO0x1OzA7TDs7Ozs7Tjs7OzswM0JEOworMDM5RTtHUkVFSyBDQVBJVEFMIExFVFRFUiBYSTtMdTswO0w7Ozs7O047Ozs7MDNCRTsKKzAzOUY7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTjtMdTswO0w7Ozs7O047Ozs7MDNCRjsKKzAzQTA7R1JFRUsgQ0FQSVRBTCBMRVRURVIgUEk7THU7MDtMOzs7OztOOzs7OzAzQzA7CiswM0ExO0dSRUVLIENBUElUQUwgTEVUVEVSIFJITztMdTswO0w7Ozs7O047Ozs7MDNDMTsKKzAzQTM7R1JFRUsgQ0FQSVRBTCBMRVRURVIgU0lHTUE7THU7MDtMOzs7OztOOzs7OzAzQzM7CiswM0E0O0dSRUVLIENBUElUQUwgTEVUVEVSIFRBVTtMdTswO0w7Ozs7O047Ozs7MDNDNDsKKzAzQTU7R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTjtMdTswO0w7Ozs7O047Ozs7MDNDNTsKKzAzQTY7R1JFRUsgQ0FQSVRBTCBMRVRURVIgUEhJO0x1OzA7TDs7Ozs7Tjs7OzswM0M2OworMDNBNztHUkVFSyBDQVBJVEFMIExFVFRFUiBDSEk7THU7MDtMOzs7OztOOzs7OzAzQzc7CiswM0E4O0dSRUVLIENBUElUQUwgTEVUVEVSIFBTSTtMdTswO0w7Ozs7O047Ozs7MDNDODsKKzAzQTk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0E7THU7MDtMOzs7OztOOzs7OzAzQzk7CiswM0FBO0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0E7THU7MDtMOzAzOTkgMDMwODs7OztOO0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgRElBRVJFU0lTOzs7MDNDQTsKKzAzQUI7R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQTtMdTswO0w7MDNBNSAwMzA4Ozs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBESUFFUkVTSVM7OzswM0NCOworMDNBQztHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBUT05PUztMbDswO0w7MDNCMSAwMzAxOzs7O047R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFRPTk9TOzswMzg2OzswMzg2CiswM0FEO0dSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OIFdJVEggVE9OT1M7TGw7MDtMOzAzQjUgMDMwMTs7OztOO0dSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OIFRPTk9TOzswMzg4OzswMzg4CiswM0FFO0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBUT05PUztMbDswO0w7MDNCNyAwMzAxOzs7O047R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBUT05PUzs7MDM4OTs7MDM4OQorMDNBRjtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFRPTk9TO0xsOzA7TDswM0I5IDAzMDE7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBUT05PUzs7MDM4QTs7MDM4QQorMDNCMDtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQSBBTkQgVE9OT1M7TGw7MDtMOzAzQ0IgMDMwMTs7OztOO0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIERJQUVSRVNJUyBUT05PUzs7OzsKKzAzQjE7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBO0xsOzA7TDs7Ozs7Tjs7OzAzOTE7OzAzOTEKKzAzQjI7R1JFRUsgU01BTEwgTEVUVEVSIEJFVEE7TGw7MDtMOzs7OztOOzs7MDM5Mjs7MDM5MgorMDNCMztHUkVFSyBTTUFMTCBMRVRURVIgR0FNTUE7TGw7MDtMOzs7OztOOzs7MDM5Mzs7MDM5MworMDNCNDtHUkVFSyBTTUFMTCBMRVRURVIgREVMVEE7TGw7MDtMOzs7OztOOzs7MDM5NDs7MDM5NAorMDNCNTtHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTjtMbDswO0w7Ozs7O047OzswMzk1OzswMzk1CiswM0I2O0dSRUVLIFNNQUxMIExFVFRFUiBaRVRBO0xsOzA7TDs7Ozs7Tjs7OzAzOTY7OzAzOTYKKzAzQjc7R1JFRUsgU01BTEwgTEVUVEVSIEVUQTtMbDswO0w7Ozs7O047OzswMzk3OzswMzk3CiswM0I4O0dSRUVLIFNNQUxMIExFVFRFUiBUSEVUQTtMbDswO0w7Ozs7O047OzswMzk4OzswMzk4CiswM0I5O0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBO0xsOzA7TDs7Ozs7Tjs7OzAzOTk7OzAzOTkKKzAzQkE7R1JFRUsgU01BTEwgTEVUVEVSIEtBUFBBO0xsOzA7TDs7Ozs7Tjs7OzAzOUE7OzAzOUEKKzAzQkI7R1JFRUsgU01BTEwgTEVUVEVSIExBTURBO0xsOzA7TDs7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgTEFNQkRBOzswMzlCOzswMzlCCiswM0JDO0dSRUVLIFNNQUxMIExFVFRFUiBNVTtMbDswO0w7Ozs7O047OzswMzlDOzswMzlDCiswM0JEO0dSRUVLIFNNQUxMIExFVFRFUiBOVTtMbDswO0w7Ozs7O047OzswMzlEOzswMzlECiswM0JFO0dSRUVLIFNNQUxMIExFVFRFUiBYSTtMbDswO0w7Ozs7O047OzswMzlFOzswMzlFCiswM0JGO0dSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OO0xsOzA7TDs7Ozs7Tjs7OzAzOUY7OzAzOUYKKzAzQzA7R1JFRUsgU01BTEwgTEVUVEVSIFBJO0xsOzA7TDs7Ozs7Tjs7OzAzQTA7OzAzQTAKKzAzQzE7R1JFRUsgU01BTEwgTEVUVEVSIFJITztMbDswO0w7Ozs7O047OzswM0ExOzswM0ExCiswM0MyO0dSRUVLIFNNQUxMIExFVFRFUiBGSU5BTCBTSUdNQTtMbDswO0w7Ozs7O047OzswM0EzOzswM0EzCiswM0MzO0dSRUVLIFNNQUxMIExFVFRFUiBTSUdNQTtMbDswO0w7Ozs7O047OzswM0EzOzswM0EzCiswM0M0O0dSRUVLIFNNQUxMIExFVFRFUiBUQVU7TGw7MDtMOzs7OztOOzs7MDNBNDs7MDNBNAorMDNDNTtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTjtMbDswO0w7Ozs7O047OzswM0E1OzswM0E1CiswM0M2O0dSRUVLIFNNQUxMIExFVFRFUiBQSEk7TGw7MDtMOzs7OztOOzs7MDNBNjs7MDNBNgorMDNDNztHUkVFSyBTTUFMTCBMRVRURVIgQ0hJO0xsOzA7TDs7Ozs7Tjs7OzAzQTc7OzAzQTcKKzAzQzg7R1JFRUsgU01BTEwgTEVUVEVSIFBTSTtMbDswO0w7Ozs7O047OzswM0E4OzswM0E4CiswM0M5O0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQTtMbDswO0w7Ozs7O047OzswM0E5OzswM0E5CiswM0NBO0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBO0xsOzA7TDswM0I5IDAzMDg7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBESUFFUkVTSVM7OzAzQUE7OzAzQUEKKzAzQ0I7R1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0E7TGw7MDtMOzAzQzUgMDMwODs7OztOO0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIERJQUVSRVNJUzs7MDNBQjs7MDNBQgorMDNDQztHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFRPTk9TO0xsOzA7TDswM0JGIDAzMDE7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBUT05PUzs7MDM4Qzs7MDM4QworMDNDRDtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFRPTk9TO0xsOzA7TDswM0M1IDAzMDE7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBUT05PUzs7MDM4RTs7MDM4RQorMDNDRTtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBUT05PUztMbDswO0w7MDNDOSAwMzAxOzs7O047R1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFRPTk9TOzswMzhGOzswMzhGCiswM0QwO0dSRUVLIEJFVEEgU1lNQk9MO0xsOzA7TDs8Y29tcGF0PiAwM0IyOzs7O047R1JFRUsgU01BTEwgTEVUVEVSIENVUkxFRCBCRVRBOzswMzkyOzswMzkyCiswM0QxO0dSRUVLIFRIRVRBIFNZTUJPTDtMbDswO0w7PGNvbXBhdD4gMDNCODs7OztOO0dSRUVLIFNNQUxMIExFVFRFUiBTQ1JJUFQgVEhFVEE7OzAzOTg7OzAzOTgKKzAzRDI7R1JFRUsgVVBTSUxPTiBXSVRIIEhPT0sgU1lNQk9MO0x1OzA7TDs8Y29tcGF0PiAwM0E1Ozs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBIT09LOzs7OworMDNEMztHUkVFSyBVUFNJTE9OIFdJVEggQUNVVEUgQU5EIEhPT0sgU1lNQk9MO0x1OzA7TDswM0QyIDAzMDE7Ozs7TjtHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIEhPT0sgVE9OT1M7Ozs7CiswM0Q0O0dSRUVLIFVQU0lMT04gV0lUSCBESUFFUkVTSVMgQU5EIEhPT0sgU1lNQk9MO0x1OzA7TDswM0QyIDAzMDg7Ozs7TjtHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIEhPT0sgRElBRVJFU0lTOzs7OworMDNENTtHUkVFSyBQSEkgU1lNQk9MO0xsOzA7TDs8Y29tcGF0PiAwM0M2Ozs7O047R1JFRUsgU01BTEwgTEVUVEVSIFNDUklQVCBQSEk7OzAzQTY7OzAzQTYKKzAzRDY7R1JFRUsgUEkgU1lNQk9MO0xsOzA7TDs8Y29tcGF0PiAwM0MwOzs7O047R1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFBJOzswM0EwOzswM0EwCiswM0Q3O0dSRUVLIEtBSSBTWU1CT0w7TGw7MDtMOzs7OztOOzs7OzsKKzAzRDg7R1JFRUsgTEVUVEVSIEFSQ0hBSUMgS09QUEE7THU7MDtMOzs7OztOOzsqOzswM0Q5OworMDNEOTtHUkVFSyBTTUFMTCBMRVRURVIgQVJDSEFJQyBLT1BQQTtMbDswO0w7Ozs7O047Oyo7MDNEODs7MDNEOAorMDNEQTtHUkVFSyBMRVRURVIgU1RJR01BO0x1OzA7TDs7Ozs7TjtHUkVFSyBDQVBJVEFMIExFVFRFUiBTVElHTUE7OzswM0RCOworMDNEQjtHUkVFSyBTTUFMTCBMRVRURVIgU1RJR01BO0xsOzA7TDs7Ozs7Tjs7OzAzREE7OzAzREEKKzAzREM7R1JFRUsgTEVUVEVSIERJR0FNTUE7THU7MDtMOzs7OztOO0dSRUVLIENBUElUQUwgTEVUVEVSIERJR0FNTUE7OzswM0REOworMDNERDtHUkVFSyBTTUFMTCBMRVRURVIgRElHQU1NQTtMbDswO0w7Ozs7O047OzswM0RDOzswM0RDCiswM0RFO0dSRUVLIExFVFRFUiBLT1BQQTtMdTswO0w7Ozs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgS09QUEE7OzswM0RGOworMDNERjtHUkVFSyBTTUFMTCBMRVRURVIgS09QUEE7TGw7MDtMOzs7OztOOzs7MDNERTs7MDNERQorMDNFMDtHUkVFSyBMRVRURVIgU0FNUEk7THU7MDtMOzs7OztOO0dSRUVLIENBUElUQUwgTEVUVEVSIFNBTVBJOzs7MDNFMTsKKzAzRTE7R1JFRUsgU01BTEwgTEVUVEVSIFNBTVBJO0xsOzA7TDs7Ozs7Tjs7OzAzRTA7OzAzRTAKKzAzRTI7Q09QVElDIENBUElUQUwgTEVUVEVSIFNIRUk7THU7MDtMOzs7OztOO0dSRUVLIENBUElUQUwgTEVUVEVSIFNIRUk7OzswM0UzOworMDNFMztDT1BUSUMgU01BTEwgTEVUVEVSIFNIRUk7TGw7MDtMOzs7OztOO0dSRUVLIFNNQUxMIExFVFRFUiBTSEVJOzswM0UyOzswM0UyCiswM0U0O0NPUFRJQyBDQVBJVEFMIExFVFRFUiBGRUk7THU7MDtMOzs7OztOO0dSRUVLIENBUElUQUwgTEVUVEVSIEZFSTs7OzAzRTU7CiswM0U1O0NPUFRJQyBTTUFMTCBMRVRURVIgRkVJO0xsOzA7TDs7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgRkVJOzswM0U0OzswM0U0CiswM0U2O0NPUFRJQyBDQVBJVEFMIExFVFRFUiBLSEVJO0x1OzA7TDs7Ozs7TjtHUkVFSyBDQVBJVEFMIExFVFRFUiBLSEVJOzs7MDNFNzsKKzAzRTc7Q09QVElDIFNNQUxMIExFVFRFUiBLSEVJO0xsOzA7TDs7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgS0hFSTs7MDNFNjs7MDNFNgorMDNFODtDT1BUSUMgQ0FQSVRBTCBMRVRURVIgSE9SSTtMdTswO0w7Ozs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgSE9SSTs7OzAzRTk7CiswM0U5O0NPUFRJQyBTTUFMTCBMRVRURVIgSE9SSTtMbDswO0w7Ozs7O047R1JFRUsgU01BTEwgTEVUVEVSIEhPUkk7OzAzRTg7OzAzRTgKKzAzRUE7Q09QVElDIENBUElUQUwgTEVUVEVSIEdBTkdJQTtMdTswO0w7Ozs7O047R1JFRUsgQ0FQSVRBTCBMRVRURVIgR0FOR0lBOzs7MDNFQjsKKzAzRUI7Q09QVElDIFNNQUxMIExFVFRFUiBHQU5HSUE7TGw7MDtMOzs7OztOO0dSRUVLIFNNQUxMIExFVFRFUiBHQU5HSUE7OzAzRUE7OzAzRUEKKzAzRUM7Q09QVElDIENBUElUQUwgTEVUVEVSIFNISU1BO0x1OzA7TDs7Ozs7TjtHUkVFSyBDQVBJVEFMIExFVFRFUiBTSElNQTs7OzAzRUQ7CiswM0VEO0NPUFRJQyBTTUFMTCBMRVRURVIgU0hJTUE7TGw7MDtMOzs7OztOO0dSRUVLIFNNQUxMIExFVFRFUiBTSElNQTs7MDNFQzs7MDNFQworMDNFRTtDT1BUSUMgQ0FQSVRBTCBMRVRURVIgREVJO0x1OzA7TDs7Ozs7TjtHUkVFSyBDQVBJVEFMIExFVFRFUiBERUk7OzswM0VGOworMDNFRjtDT1BUSUMgU01BTEwgTEVUVEVSIERFSTtMbDswO0w7Ozs7O047R1JFRUsgU01BTEwgTEVUVEVSIERFSTs7MDNFRTs7MDNFRQorMDNGMDtHUkVFSyBLQVBQQSBTWU1CT0w7TGw7MDtMOzxjb21wYXQ+IDAzQkE7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgU0NSSVBUIEtBUFBBOzswMzlBOzswMzlBCiswM0YxO0dSRUVLIFJITyBTWU1CT0w7TGw7MDtMOzxjb21wYXQ+IDAzQzE7Ozs7TjtHUkVFSyBTTUFMTCBMRVRURVIgVEFJTEVEIFJITzs7MDNBMTs7MDNBMQorMDNGMjtHUkVFSyBMVU5BVEUgU0lHTUEgU1lNQk9MO0xsOzA7TDs8Y29tcGF0PiAwM0MyOzs7O047R1JFRUsgU01BTEwgTEVUVEVSIExVTkFURSBTSUdNQTs7MDNBMzs7MDNBMworMDNGMztHUkVFSyBMRVRURVIgWU9UO0xsOzA7TDs7Ozs7Tjs7Ozs7CiswM0Y0O0dSRUVLIENBUElUQUwgVEhFVEEgU1lNQk9MO0x1OzA7TDs8Y29tcGF0PiAwMzk4Ozs7O047Ozs7MDNCODsKKzAzRjU7R1JFRUsgTFVOQVRFIEVQU0lMT04gU1lNQk9MO0xsOzA7TDs8Y29tcGF0PiAwM0I1Ozs7O047OzswMzk1OzswMzk1CiswM0Y2O0dSRUVLIFJFVkVSU0VEIExVTkFURSBFUFNJTE9OIFNZTUJPTDtTbTswO09OOzs7OztOOzs7OzsKKzA0MDA7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUgV0lUSCBHUkFWRTtMdTswO0w7MDQxNSAwMzAwOzs7O047Ozs7MDQ1MDsKKzA0MDE7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU87THU7MDtMOzA0MTUgMDMwODs7OztOOzs7OzA0NTE7CiswNDAyO0NZUklMTElDIENBUElUQUwgTEVUVEVSIERKRTtMdTswO0w7Ozs7O047O1NlcmJvY3JvYXRpYW47OzA0NTI7CiswNDAzO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEdKRTtMdTswO0w7MDQxMyAwMzAxOzs7O047Ozs7MDQ1MzsKKzA0MDQ7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVUtSQUlOSUFOIElFO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFOzs7MDQ1NDsKKzA0MDU7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRFpFO0x1OzA7TDs7Ozs7Tjs7OzswNDU1OworMDQwNjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEk7THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEk7OzswNDU2OworMDQwNztDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZSTtMdTswO0w7MDQwNiAwMzA4Ozs7O047O1VrcmFpbmlhbjs7MDQ1NzsKKzA0MDg7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSkU7THU7MDtMOzs7OztOOzs7OzA0NTg7CiswNDA5O0NZUklMTElDIENBUElUQUwgTEVUVEVSIExKRTtMdTswO0w7Ozs7O047Ozs7MDQ1OTsKKzA0MEE7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTkpFO0x1OzA7TDs7Ozs7Tjs7OzswNDVBOworMDQwQjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0hFO0x1OzA7TDs7Ozs7Tjs7U2VyYm9jcm9hdGlhbjs7MDQ1QjsKKzA0MEM7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0pFO0x1OzA7TDswNDFBIDAzMDE7Ozs7Tjs7OzswNDVDOworMDQwRDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkU7THU7MDtMOzA0MTggMDMwMDs7OztOOzs7OzA0NUQ7CiswNDBFO0NZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIFU7THU7MDtMOzA0MjMgMDMwNjs7OztOOztCeWVsb3J1c3NpYW47OzA0NUU7CiswNDBGO0NZUklMTElDIENBUElUQUwgTEVUVEVSIERaSEU7THU7MDtMOzs7OztOOzs7OzA0NUY7CiswNDEwO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEE7THU7MDtMOzs7OztOOzs7OzA0MzA7CiswNDExO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEJFO0x1OzA7TDs7Ozs7Tjs7OzswNDMxOworMDQxMjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRTtMdTswO0w7Ozs7O047Ozs7MDQzMjsKKzA0MTM7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHRTs7OzA0MzM7CiswNDE0O0NZUklMTElDIENBUElUQUwgTEVUVEVSIERFO0x1OzA7TDs7Ozs7Tjs7OzswNDM0OworMDQxNTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRTtMdTswO0w7Ozs7O047Ozs7MDQzNTsKKzA0MTY7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFO0x1OzA7TDs7Ozs7Tjs7OzswNDM2OworMDQxNztDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRTtMdTswO0w7Ozs7O047Ozs7MDQzNzsKKzA0MTg7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSTtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUk7OzswNDM4OworMDQxOTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJO0x1OzA7TDswNDE4IDAzMDY7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJSTs7OzA0Mzk7CiswNDFBO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEtBO0x1OzA7TDs7Ozs7Tjs7OzswNDNBOworMDQxQjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTDtMdTswO0w7Ozs7O047Ozs7MDQzQjsKKzA0MUM7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU07THU7MDtMOzs7OztOOzs7OzA0M0M7CiswNDFEO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEVOO0x1OzA7TDs7Ozs7Tjs7OzswNDNEOworMDQxRTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPO0x1OzA7TDs7Ozs7Tjs7OzswNDNFOworMDQxRjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRTtMdTswO0w7Ozs7O047Ozs7MDQzRjsKKzA0MjA7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVI7THU7MDtMOzs7OztOOzs7OzA0NDA7CiswNDIxO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEVTO0x1OzA7TDs7Ozs7Tjs7OzswNDQxOworMDQyMjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURTtMdTswO0w7Ozs7O047Ozs7MDQ0MjsKKzA0MjM7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVTtMdTswO0w7Ozs7O047Ozs7MDQ0MzsKKzA0MjQ7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUY7THU7MDtMOzs7OztOOzs7OzA0NDQ7CiswNDI1O0NZUklMTElDIENBUElUQUwgTEVUVEVSIEhBO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLSEE7OzswNDQ1OworMDQyNjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0U7THU7MDtMOzs7OztOOzs7OzA0NDY7CiswNDI3O0NZUklMTElDIENBUElUQUwgTEVUVEVSIENIRTtMdTswO0w7Ozs7O047Ozs7MDQ0NzsKKzA0Mjg7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBO0x1OzA7TDs7Ozs7Tjs7OzswNDQ4OworMDQyOTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQTtMdTswO0w7Ozs7O047Ozs7MDQ0OTsKKzA0MkE7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOO0x1OzA7TDs7Ozs7Tjs7OzswNDRBOworMDQyQjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJJOzs7MDQ0QjsKKzA0MkM7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOO0x1OzA7TDs7Ozs7Tjs7OzswNDRDOworMDQyRDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBSRVZFUlNFRCBFOzs7MDQ0RDsKKzA0MkU7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVU7THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIElVOzs7MDQ0RTsKKzA0MkY7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUE7THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIElBOzs7MDQ0RjsKKzA0MzA7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEE7TGw7MDtMOzs7OztOOzs7MDQxMDs7MDQxMAorMDQzMTtDWVJJTExJQyBTTUFMTCBMRVRURVIgQkU7TGw7MDtMOzs7OztOOzs7MDQxMTs7MDQxMQorMDQzMjtDWVJJTExJQyBTTUFMTCBMRVRURVIgVkU7TGw7MDtMOzs7OztOOzs7MDQxMjs7MDQxMgorMDQzMztDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgR0U7OzA0MTM7OzA0MTMKKzA0MzQ7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIERFO0xsOzA7TDs7Ozs7Tjs7OzA0MTQ7OzA0MTQKKzA0MzU7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIElFO0xsOzA7TDs7Ozs7Tjs7OzA0MTU7OzA0MTUKKzA0MzY7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRTtMbDswO0w7Ozs7O047OzswNDE2OzswNDE2CiswNDM3O0NZUklMTElDIFNNQUxMIExFVFRFUiBaRTtMbDswO0w7Ozs7O047OzswNDE3OzswNDE3CiswNDM4O0NZUklMTElDIFNNQUxMIExFVFRFUiBJO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgSUk7OzA0MTg7OzA0MTgKKzA0Mzk7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEk7TGw7MDtMOzA0MzggMDMwNjs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJSTs7MDQxOTs7MDQxOQorMDQzQTtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0E7TGw7MDtMOzs7OztOOzs7MDQxQTs7MDQxQQorMDQzQjtDWVJJTExJQyBTTUFMTCBMRVRURVIgRUw7TGw7MDtMOzs7OztOOzs7MDQxQjs7MDQxQgorMDQzQztDWVJJTExJQyBTTUFMTCBMRVRURVIgRU07TGw7MDtMOzs7OztOOzs7MDQxQzs7MDQxQworMDQzRDtDWVJJTExJQyBTTUFMTCBMRVRURVIgRU47TGw7MDtMOzs7OztOOzs7MDQxRDs7MDQxRAorMDQzRTtDWVJJTExJQyBTTUFMTCBMRVRURVIgTztMbDswO0w7Ozs7O047OzswNDFFOzswNDFFCiswNDNGO0NZUklMTElDIFNNQUxMIExFVFRFUiBQRTtMbDswO0w7Ozs7O047OzswNDFGOzswNDFGCiswNDQwO0NZUklMTElDIFNNQUxMIExFVFRFUiBFUjtMbDswO0w7Ozs7O047OzswNDIwOzswNDIwCiswNDQxO0NZUklMTElDIFNNQUxMIExFVFRFUiBFUztMbDswO0w7Ozs7O047OzswNDIxOzswNDIxCiswNDQyO0NZUklMTElDIFNNQUxMIExFVFRFUiBURTtMbDswO0w7Ozs7O047OzswNDIyOzswNDIyCiswNDQzO0NZUklMTElDIFNNQUxMIExFVFRFUiBVO0xsOzA7TDs7Ozs7Tjs7OzA0MjM7OzA0MjMKKzA0NDQ7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGO0xsOzA7TDs7Ozs7Tjs7OzA0MjQ7OzA0MjQKKzA0NDU7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0hBOzswNDI1OzswNDI1CiswNDQ2O0NZUklMTElDIFNNQUxMIExFVFRFUiBUU0U7TGw7MDtMOzs7OztOOzs7MDQyNjs7MDQyNgorMDQ0NztDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFO0xsOzA7TDs7Ozs7Tjs7OzA0Mjc7OzA0MjcKKzA0NDg7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQTtMbDswO0w7Ozs7O047OzswNDI4OzswNDI4CiswNDQ5O0NZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQTtMbDswO0w7Ozs7O047OzswNDI5OzswNDI5CiswNDRBO0NZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR047TGw7MDtMOzs7OztOOzs7MDQyQTs7MDQyQQorMDQ0QjtDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVTtMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUkk7OzA0MkI7OzA0MkIKKzA0NEM7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTjtMbDswO0w7Ozs7O047OzswNDJDOzswNDJDCiswNDREO0NZUklMTElDIFNNQUxMIExFVFRFUiBFO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgUkVWRVJTRUQgRTs7MDQyRDs7MDQyRAorMDQ0RTtDWVJJTExJQyBTTUFMTCBMRVRURVIgWVU7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBJVTs7MDQyRTs7MDQyRQorMDQ0RjtDWVJJTExJQyBTTUFMTCBMRVRURVIgWUE7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBJQTs7MDQyRjs7MDQyRgorMDQ1MDtDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUgV0lUSCBHUkFWRTtMbDswO0w7MDQzNSAwMzAwOzs7O047OzswNDAwOzswNDAwCiswNDUxO0NZUklMTElDIFNNQUxMIExFVFRFUiBJTztMbDswO0w7MDQzNSAwMzA4Ozs7O047OzswNDAxOzswNDAxCiswNDUyO0NZUklMTElDIFNNQUxMIExFVFRFUiBESkU7TGw7MDtMOzs7OztOOztTZXJib2Nyb2F0aWFuOzA0MDI7OzA0MDIKKzA0NTM7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEdKRTtMbDswO0w7MDQzMyAwMzAxOzs7O047OzswNDAzOzswNDAzCiswNDU0O0NZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUU7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBFOzswNDA0OzswNDA0CiswNDU1O0NZUklMTElDIFNNQUxMIExFVFRFUiBEWkU7TGw7MDtMOzs7OztOOzs7MDQwNTs7MDQwNQorMDQ1NjtDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgSTs7MDQwNjs7MDQwNgorMDQ1NztDWVJJTExJQyBTTUFMTCBMRVRURVIgWUk7TGw7MDtMOzA0NTYgMDMwODs7OztOOztVa3JhaW5pYW47MDQwNzs7MDQwNworMDQ1ODtDWVJJTExJQyBTTUFMTCBMRVRURVIgSkU7TGw7MDtMOzs7OztOOzs7MDQwODs7MDQwOAorMDQ1OTtDWVJJTExJQyBTTUFMTCBMRVRURVIgTEpFO0xsOzA7TDs7Ozs7Tjs7OzA0MDk7OzA0MDkKKzA0NUE7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIE5KRTtMbDswO0w7Ozs7O047OzswNDBBOzswNDBBCiswNDVCO0NZUklMTElDIFNNQUxMIExFVFRFUiBUU0hFO0xsOzA7TDs7Ozs7Tjs7U2VyYm9jcm9hdGlhbjswNDBCOzswNDBCCiswNDVDO0NZUklMTElDIFNNQUxMIExFVFRFUiBLSkU7TGw7MDtMOzA0M0EgMDMwMTs7OztOOzs7MDQwQzs7MDQwQworMDQ1RDtDWVJJTExJQyBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFO0xsOzA7TDswNDM4IDAzMDA7Ozs7Tjs7OzA0MEQ7OzA0MEQKKzA0NUU7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIFU7TGw7MDtMOzA0NDMgMDMwNjs7OztOOztCeWVsb3J1c3NpYW47MDQwRTs7MDQwRQorMDQ1RjtDWVJJTExJQyBTTUFMTCBMRVRURVIgRFpIRTtMbDswO0w7Ozs7O047OzswNDBGOzswNDBGCiswNDYwO0NZUklMTElDIENBUElUQUwgTEVUVEVSIE9NRUdBO0x1OzA7TDs7Ozs7Tjs7OzswNDYxOworMDQ2MTtDWVJJTExJQyBTTUFMTCBMRVRURVIgT01FR0E7TGw7MDtMOzs7OztOOzs7MDQ2MDs7MDQ2MAorMDQ2MjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQVQ7THU7MDtMOzs7OztOOzs7OzA0NjM7CiswNDYzO0NZUklMTElDIFNNQUxMIExFVFRFUiBZQVQ7TGw7MDtMOzs7OztOOzs7MDQ2Mjs7MDQ2MgorMDQ2NDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJT1RJRklFRCBFO0x1OzA7TDs7Ozs7Tjs7OzswNDY1OworMDQ2NTtDWVJJTExJQyBTTUFMTCBMRVRURVIgSU9USUZJRUQgRTtMbDswO0w7Ozs7O047OzswNDY0OzswNDY0CiswNDY2O0NZUklMTElDIENBUElUQUwgTEVUVEVSIExJVFRMRSBZVVM7THU7MDtMOzs7OztOOzs7OzA0Njc7CiswNDY3O0NZUklMTElDIFNNQUxMIExFVFRFUiBMSVRUTEUgWVVTO0xsOzA7TDs7Ozs7Tjs7OzA0NjY7OzA0NjYKKzA0Njg7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU9USUZJRUQgTElUVExFIFlVUztMdTswO0w7Ozs7O047Ozs7MDQ2OTsKKzA0Njk7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIElPVElGSUVEIExJVFRMRSBZVVM7TGw7MDtMOzs7OztOOzs7MDQ2ODs7MDQ2OAorMDQ2QTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCSUcgWVVTO0x1OzA7TDs7Ozs7Tjs7OzswNDZCOworMDQ2QjtDWVJJTExJQyBTTUFMTCBMRVRURVIgQklHIFlVUztMbDswO0w7Ozs7O047OzswNDZBOzswNDZBCiswNDZDO0NZUklMTElDIENBUElUQUwgTEVUVEVSIElPVElGSUVEIEJJRyBZVVM7THU7MDtMOzs7OztOOzs7OzA0NkQ7CiswNDZEO0NZUklMTElDIFNNQUxMIExFVFRFUiBJT1RJRklFRCBCSUcgWVVTO0xsOzA7TDs7Ozs7Tjs7OzA0NkM7OzA0NkMKKzA0NkU7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS1NJO0x1OzA7TDs7Ozs7Tjs7OzswNDZGOworMDQ2RjtDWVJJTExJQyBTTUFMTCBMRVRURVIgS1NJO0xsOzA7TDs7Ozs7Tjs7OzA0NkU7OzA0NkUKKzA0NzA7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUFNJO0x1OzA7TDs7Ozs7Tjs7OzswNDcxOworMDQ3MTtDWVJJTExJQyBTTUFMTCBMRVRURVIgUFNJO0xsOzA7TDs7Ozs7Tjs7OzA0NzA7OzA0NzAKKzA0NzI7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRklUQTtMdTswO0w7Ozs7O047Ozs7MDQ3MzsKKzA0NzM7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEZJVEE7TGw7MDtMOzs7OztOOzs7MDQ3Mjs7MDQ3MgorMDQ3NDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJWkhJVFNBO0x1OzA7TDs7Ozs7Tjs7OzswNDc1OworMDQ3NTtDWVJJTExJQyBTTUFMTCBMRVRURVIgSVpISVRTQTtMbDswO0w7Ozs7O047OzswNDc0OzswNDc0CiswNDc2O0NZUklMTElDIENBUElUQUwgTEVUVEVSIElaSElUU0EgV0lUSCBET1VCTEUgR1JBVkUgQUNDRU5UO0x1OzA7TDswNDc0IDAzMEY7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJWkhJVFNBIERPVUJMRSBHUkFWRTs7OzA0Nzc7CiswNDc3O0NZUklMTElDIFNNQUxMIExFVFRFUiBJWkhJVFNBIFdJVEggRE9VQkxFIEdSQVZFIEFDQ0VOVDtMbDswO0w7MDQ3NSAwMzBGOzs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIElaSElUU0EgRE9VQkxFIEdSQVZFOzswNDc2OzswNDc2CiswNDc4O0NZUklMTElDIENBUElUQUwgTEVUVEVSIFVLO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVSyBESUdSQVBIOzs7MDQ3OTsKKzA0Nzk7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFVLO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgVUsgRElHUkFQSDs7MDQ3ODs7MDQ3OAorMDQ3QTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBST1VORCBPTUVHQTtMdTswO0w7Ozs7O047Ozs7MDQ3QjsKKzA0N0I7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFJPVU5EIE9NRUdBO0xsOzA7TDs7Ozs7Tjs7OzA0N0E7OzA0N0EKKzA0N0M7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBUSVRMTztMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgT01FR0EgVElUTE87OzswNDdEOworMDQ3RDtDWVJJTExJQyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBUSVRMTztMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIE9NRUdBIFRJVExPOzswNDdDOzswNDdDCiswNDdFO0NZUklMTElDIENBUElUQUwgTEVUVEVSIE9UO0x1OzA7TDs7Ozs7Tjs7OzswNDdGOworMDQ3RjtDWVJJTExJQyBTTUFMTCBMRVRURVIgT1Q7TGw7MDtMOzs7OztOOzs7MDQ3RTs7MDQ3RQorMDQ4MDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLT1BQQTtMdTswO0w7Ozs7O047Ozs7MDQ4MTsKKzA0ODE7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEtPUFBBO0xsOzA7TDs7Ozs7Tjs7OzA0ODA7OzA0ODAKKzA0ODI7Q1lSSUxMSUMgVEhPVVNBTkRTIFNJR047U287MDtMOzs7OztOOzs7OzsKKzA0ODM7Q09NQklOSU5HIENZUklMTElDIFRJVExPO01uOzIzMDtOU007Ozs7O047Q1lSSUxMSUMgTk9OLVNQQUNJTkcgVElUTE87Ozs7CiswNDg0O0NPTUJJTklORyBDWVJJTExJQyBQQUxBVEFMSVpBVElPTjtNbjsyMzA7TlNNOzs7OztOO0NZUklMTElDIE5PTi1TUEFDSU5HIFBBTEFUQUxJWkFUSU9OOzs7OworMDQ4NTtDT01CSU5JTkcgQ1lSSUxMSUMgREFTSUEgUE5FVU1BVEE7TW47MjMwO05TTTs7Ozs7TjtDWVJJTExJQyBOT04tU1BBQ0lORyBEQVNJQSBQTkVVTUFUQTs7OzsKKzA0ODY7Q09NQklOSU5HIENZUklMTElDIFBTSUxJIFBORVVNQVRBO01uOzIzMDtOU007Ozs7O047Q1lSSUxMSUMgTk9OLVNQQUNJTkcgUFNJTEkgUE5FVU1BVEE7Ozs7CiswNDg4O0NPTUJJTklORyBDWVJJTExJQyBIVU5EUkVEIFRIT1VTQU5EUyBTSUdOO01lOzA7TlNNOzs7OztOOzs7OzsKKzA0ODk7Q09NQklOSU5HIENZUklMTElDIE1JTExJT05TIFNJR047TWU7MDtOU007Ozs7O047Ozs7OworMDQ4QTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJIFdJVEggVEFJTDtMdTswO0w7Ozs7O047Ozs7MDQ4QjsKKzA0OEI7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkgV0lUSCBUQUlMO0xsOzA7TDs7Ozs7Tjs7OzA0OEE7OzA0OEEKKzA0OEM7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0VNSVNPRlQgU0lHTjtMdTswO0w7Ozs7O047Ozs7MDQ4RDsKKzA0OEQ7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFNFTUlTT0ZUIFNJR047TGw7MDtMOzs7OztOOzs7MDQ4Qzs7MDQ4QworMDQ4RTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUiBXSVRIIFRJQ0s7THU7MDtMOzs7OztOOzs7OzA0OEY7CiswNDhGO0NZUklMTElDIFNNQUxMIExFVFRFUiBFUiBXSVRIIFRJQ0s7TGw7MDtMOzs7OztOOzs7MDQ4RTs7MDQ4RQorMDQ5MDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk47THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEdFIFdJVEggVVBUVVJOOzs7MDQ5MTsKKzA0OTE7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTjtMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEdFIFdJVEggVVBUVVJOOzswNDkwOzswNDkwCiswNDkyO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFNUUk9LRTtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0UgQkFSOzs7MDQ5MzsKKzA0OTM7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFNUUk9LRTtMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEdFIEJBUjs7MDQ5Mjs7MDQ5MgorMDQ5NDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBNSURETEUgSE9PSztMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0UgSE9PSzs7OzA0OTU7CiswNDk1O0NZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBNSURETEUgSE9PSztMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEdFIEhPT0s7OzA0OTQ7OzA0OTQKKzA0OTY7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFIFdJVEggREVTQ0VOREVSO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUgV0lUSCBSSUdIVCBERVNDRU5ERVI7OzswNDk3OworMDQ5NztDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFIFdJVEggREVTQ0VOREVSO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFIFdJVEggUklHSFQgREVTQ0VOREVSOzswNDk2OzswNDk2CiswNDk4O0NZUklMTElDIENBUElUQUwgTEVUVEVSIFpFIFdJVEggREVTQ0VOREVSO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRSBDRURJTExBOzs7MDQ5OTsKKzA0OTk7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFIFdJVEggREVTQ0VOREVSO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUgQ0VESUxMQTs7MDQ5ODs7MDQ5OAorMDQ5QTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQSBXSVRIIERFU0NFTkRFUjtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EgV0lUSCBSSUdIVCBERVNDRU5ERVI7OzswNDlCOworMDQ5QjtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EgV0lUSCBERVNDRU5ERVI7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBLQSBXSVRIIFJJR0hUIERFU0NFTkRFUjs7MDQ5QTs7MDQ5QQorMDQ5QztDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQSBXSVRIIFZFUlRJQ0FMIFNUUk9LRTtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EgVkVSVElDQUwgQkFSOzs7MDQ5RDsKKzA0OUQ7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBIFdJVEggVkVSVElDQUwgU1RST0tFO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EgVkVSVElDQUwgQkFSOzswNDlDOzswNDlDCiswNDlFO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEtBIFdJVEggU1RST0tFO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQSBCQVI7OzswNDlGOworMDQ5RjtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EgV0lUSCBTVFJPS0U7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBLQSBCQVI7OzA0OUU7OzA0OUUKKzA0QTA7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkFTSEtJUiBLQTtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUkVWRVJTRUQgR0UgS0E7OzswNEExOworMDRBMTtDWVJJTExJQyBTTUFMTCBMRVRURVIgQkFTSEtJUiBLQTtMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFJFVkVSU0VEIEdFIEtBOzswNEEwOzswNEEwCiswNEEyO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEVOIFdJVEggREVTQ0VOREVSO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTiBXSVRIIFJJR0hUIERFU0NFTkRFUjs7OzA0QTM7CiswNEEzO0NZUklMTElDIFNNQUxMIExFVFRFUiBFTiBXSVRIIERFU0NFTkRFUjtMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOIFdJVEggUklHSFQgREVTQ0VOREVSOzswNEEyOzswNEEyCiswNEE0O0NZUklMTElDIENBUElUQUwgTElHQVRVUkUgRU4gR0hFO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTiBHRTs7OzA0QTU7CiswNEE1O0NZUklMTElDIFNNQUxMIExJR0FUVVJFIEVOIEdIRTtMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOIEdFOzswNEE0OzswNEE0CiswNEE2O0NZUklMTElDIENBUElUQUwgTEVUVEVSIFBFIFdJVEggTUlERExFIEhPT0s7THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIFBFIEhPT0s7QWJraGFzaWFuOzswNEE3OworMDRBNztDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUgV0lUSCBNSURETEUgSE9PSztMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFIEhPT0s7QWJraGFzaWFuOzA0QTY7OzA0QTYKKzA0QTg7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQUJLSEFTSUFOIEhBO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPIEhPT0s7OzswNEE5OworMDRBOTtDWVJJTExJQyBTTUFMTCBMRVRURVIgQUJLSEFTSUFOIEhBO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgTyBIT09LOzswNEE4OzswNEE4CiswNEFBO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEVTIFdJVEggREVTQ0VOREVSO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUyBDRURJTExBOzs7MDRBQjsKKzA0QUI7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTIFdJVEggREVTQ0VOREVSO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMgQ0VESUxMQTs7MDRBQTs7MDRBQQorMDRBQztDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURSBXSVRIIERFU0NFTkRFUjtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUgV0lUSCBSSUdIVCBERVNDRU5ERVI7OzswNEFEOworMDRBRDtDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUgV0lUSCBERVNDRU5ERVI7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBURSBXSVRIIFJJR0hUIERFU0NFTkRFUjs7MDRBQzs7MDRBQworMDRBRTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTVFJBSUdIVCBVO0x1OzA7TDs7Ozs7Tjs7OzswNEFGOworMDRBRjtDWVJJTExJQyBTTUFMTCBMRVRURVIgU1RSQUlHSFQgVTtMbDswO0w7Ozs7O047OzswNEFFOzswNEFFCiswNEIwO0NZUklMTElDIENBUElUQUwgTEVUVEVSIFNUUkFJR0hUIFUgV0lUSCBTVFJPS0U7THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIFNUUkFJR0hUIFUgQkFSOzs7MDRCMTsKKzA0QjE7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFNUUkFJR0hUIFUgV0lUSCBTVFJPS0U7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBTVFJBSUdIVCBVIEJBUjs7MDRCMDs7MDRCMAorMDRCMjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQSBXSVRIIERFU0NFTkRFUjtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0hBIFdJVEggUklHSFQgREVTQ0VOREVSOzs7MDRCMzsKKzA0QjM7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBIFdJVEggREVTQ0VOREVSO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0hBIFdJVEggUklHSFQgREVTQ0VOREVSOzswNEIyOzswNEIyCiswNEI0O0NZUklMTElDIENBUElUQUwgTElHQVRVUkUgVEUgVFNFO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURSBUU0U7QWJraGFzaWFuOzswNEI1OworMDRCNTtDWVJJTExJQyBTTUFMTCBMSUdBVFVSRSBURSBUU0U7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBURSBUU0U7QWJraGFzaWFuOzA0QjQ7OzA0QjQKKzA0QjY7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFIFdJVEggREVTQ0VOREVSO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBDSEUgV0lUSCBSSUdIVCBERVNDRU5ERVI7OzswNEI3OworMDRCNztDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFIFdJVEggREVTQ0VOREVSO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFIFdJVEggUklHSFQgREVTQ0VOREVSOzswNEI2OzswNEI2CiswNEI4O0NZUklMTElDIENBUElUQUwgTEVUVEVSIENIRSBXSVRIIFZFUlRJQ0FMIFNUUk9LRTtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFIFZFUlRJQ0FMIEJBUjs7OzA0Qjk7CiswNEI5O0NZUklMTElDIFNNQUxMIExFVFRFUiBDSEUgV0lUSCBWRVJUSUNBTCBTVFJPS0U7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBDSEUgVkVSVElDQUwgQkFSOzswNEI4OzswNEI4CiswNEJBO0NZUklMTElDIENBUElUQUwgTEVUVEVSIFNISEE7THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEg7OzswNEJCOworMDRCQjtDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hIQTtMbDswO0w7Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEg7OzA0QkE7OzA0QkEKKzA0QkM7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQUJLSEFTSUFOIENIRTtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUgSE9PSzs7OzA0QkQ7CiswNEJEO0NZUklMTElDIFNNQUxMIExFVFRFUiBBQktIQVNJQU4gQ0hFO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUgSE9PSzs7MDRCQzs7MDRCQworMDRCRTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBQktIQVNJQU4gQ0hFIFdJVEggREVTQ0VOREVSO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRSBIT09LIE9HT05FSzs7OzA0QkY7CiswNEJGO0NZUklMTElDIFNNQUxMIExFVFRFUiBBQktIQVNJQU4gQ0hFIFdJVEggREVTQ0VOREVSO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUgSE9PSyBPR09ORUs7OzA0QkU7OzA0QkUKKzA0QzA7Q1lSSUxMSUMgTEVUVEVSIFBBTE9DSEtBO0x1OzA7TDs7Ozs7TjtDWVJJTExJQyBMRVRURVIgSTs7OzsKKzA0QzE7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFIFdJVEggQlJFVkU7THU7MDtMOzA0MTYgMDMwNjs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIFpIRTs7OzA0QzI7CiswNEMyO0NZUklMTElDIFNNQUxMIExFVFRFUiBaSEUgV0lUSCBCUkVWRTtMbDswO0w7MDQzNiAwMzA2Ozs7O047Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIFpIRTs7MDRDMTs7MDRDMQorMDRDMztDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQSBXSVRIIEhPT0s7THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEtBIEhPT0s7OzswNEM0OworMDRDNDtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EgV0lUSCBIT09LO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EgSE9PSzs7MDRDMzs7MDRDMworMDRDNTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTCBXSVRIIFRBSUw7THU7MDtMOzs7OztOOzs7OzA0QzY7CiswNEM2O0NZUklMTElDIFNNQUxMIExFVFRFUiBFTCBXSVRIIFRBSUw7TGw7MDtMOzs7OztOOzs7MDRDNTs7MDRDNQorMDRDNztDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTiBXSVRIIEhPT0s7THU7MDtMOzs7OztOO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEVOIEhPT0s7OzswNEM4OworMDRDODtDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4gV0lUSCBIT09LO0xsOzA7TDs7Ozs7TjtDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4gSE9PSzs7MDRDNzs7MDRDNworMDRDOTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTiBXSVRIIFRBSUw7THU7MDtMOzs7OztOOzs7OzA0Q0E7CiswNENBO0NZUklMTElDIFNNQUxMIExFVFRFUiBFTiBXSVRIIFRBSUw7TGw7MDtMOzs7OztOOzs7MDRDOTs7MDRDOQorMDRDQjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLSEFLQVNTSUFOIENIRTtMdTswO0w7Ozs7O047Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFIFdJVEggTEVGVCBERVNDRU5ERVI7OzswNENDOworMDRDQztDWVJJTExJQyBTTUFMTCBMRVRURVIgS0hBS0FTU0lBTiBDSEU7TGw7MDtMOzs7OztOO0NZUklMTElDIFNNQUxMIExFVFRFUiBDSEUgV0lUSCBMRUZUIERFU0NFTkRFUjs7MDRDQjs7MDRDQgorMDRDRDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTSBXSVRIIFRBSUw7THU7MDtMOzs7OztOOzs7OzA0Q0U7CiswNENFO0NZUklMTElDIFNNQUxMIExFVFRFUiBFTSBXSVRIIFRBSUw7TGw7MDtMOzs7OztOOzs7MDRDRDs7MDRDRAorMDREMDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkU7THU7MDtMOzA0MTAgMDMwNjs7OztOOzs7OzA0RDE7CiswNEQxO0NZUklMTElDIFNNQUxMIExFVFRFUiBBIFdJVEggQlJFVkU7TGw7MDtMOzA0MzAgMDMwNjs7OztOOzs7MDREMDs7MDREMAorMDREMjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTO0x1OzA7TDswNDEwIDAzMDg7Ozs7Tjs7OzswNEQzOworMDREMztDWVJJTExJQyBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUztMbDswO0w7MDQzMCAwMzA4Ozs7O047OzswNEQyOzswNEQyCiswNEQ0O0NZUklMTElDIENBUElUQUwgTElHQVRVUkUgQSBJRTtMdTswO0w7Ozs7O047Ozs7MDRENTsKKzA0RDU7Q1lSSUxMSUMgU01BTEwgTElHQVRVUkUgQSBJRTtMbDswO0w7Ozs7O047OzswNEQ0OzswNEQ0CiswNEQ2O0NZUklMTElDIENBUElUQUwgTEVUVEVSIElFIFdJVEggQlJFVkU7THU7MDtMOzA0MTUgMDMwNjs7OztOOzs7OzA0RDc7CiswNEQ3O0NZUklMTElDIFNNQUxMIExFVFRFUiBJRSBXSVRIIEJSRVZFO0xsOzA7TDswNDM1IDAzMDY7Ozs7Tjs7OzA0RDY7OzA0RDYKKzA0RDg7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0NIV0E7THU7MDtMOzs7OztOOzs7OzA0RDk7CiswNEQ5O0NZUklMTElDIFNNQUxMIExFVFRFUiBTQ0hXQTtMbDswO0w7Ozs7O047OzswNEQ4OzswNEQ4CiswNERBO0NZUklMTElDIENBUElUQUwgTEVUVEVSIFNDSFdBIFdJVEggRElBRVJFU0lTO0x1OzA7TDswNEQ4IDAzMDg7Ozs7Tjs7OzswNERCOworMDREQjtDWVJJTExJQyBTTUFMTCBMRVRURVIgU0NIV0EgV0lUSCBESUFFUkVTSVM7TGw7MDtMOzA0RDkgMDMwODs7OztOOzs7MDREQTs7MDREQQorMDREQztDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUgV0lUSCBESUFFUkVTSVM7THU7MDtMOzA0MTYgMDMwODs7OztOOzs7OzA0REQ7CiswNEREO0NZUklMTElDIFNNQUxMIExFVFRFUiBaSEUgV0lUSCBESUFFUkVTSVM7TGw7MDtMOzA0MzYgMDMwODs7OztOOzs7MDREQzs7MDREQworMDRERTtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRSBXSVRIIERJQUVSRVNJUztMdTswO0w7MDQxNyAwMzA4Ozs7O047Ozs7MDRERjsKKzA0REY7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFIFdJVEggRElBRVJFU0lTO0xsOzA7TDswNDM3IDAzMDg7Ozs7Tjs7OzA0REU7OzA0REUKKzA0RTA7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQUJLSEFTSUFOIERaRTtMdTswO0w7Ozs7O047Ozs7MDRFMTsKKzA0RTE7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEFCS0hBU0lBTiBEWkU7TGw7MDtMOzs7OztOOzs7MDRFMDs7MDRFMAorMDRFMjtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJIFdJVEggTUFDUk9OO0x1OzA7TDswNDE4IDAzMDQ7Ozs7Tjs7OzswNEUzOworMDRFMztDWVJJTExJQyBTTUFMTCBMRVRURVIgSSBXSVRIIE1BQ1JPTjtMbDswO0w7MDQzOCAwMzA0Ozs7O047OzswNEUyOzswNEUyCiswNEU0O0NZUklMTElDIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVM7THU7MDtMOzA0MTggMDMwODs7OztOOzs7OzA0RTU7CiswNEU1O0NZUklMTElDIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTO0xsOzA7TDswNDM4IDAzMDg7Ozs7Tjs7OzA0RTQ7OzA0RTQKKzA0RTY7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUztMdTswO0w7MDQxRSAwMzA4Ozs7O047Ozs7MDRFNzsKKzA0RTc7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVM7TGw7MDtMOzA0M0UgMDMwODs7OztOOzs7MDRFNjs7MDRFNgorMDRFODtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCQVJSRUQgTztMdTswO0w7Ozs7O047Ozs7MDRFOTsKKzA0RTk7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEJBUlJFRCBPO0xsOzA7TDs7Ozs7Tjs7OzA0RTg7OzA0RTgKKzA0RUE7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkFSUkVEIE8gV0lUSCBESUFFUkVTSVM7THU7MDtMOzA0RTggMDMwODs7OztOOzs7OzA0RUI7CiswNEVCO0NZUklMTElDIFNNQUxMIExFVFRFUiBCQVJSRUQgTyBXSVRIIERJQUVSRVNJUztMbDswO0w7MDRFOSAwMzA4Ozs7O047OzswNEVBOzswNEVBCiswNEVDO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVM7THU7MDtMOzA0MkQgMDMwODs7OztOOzs7OzA0RUQ7CiswNEVEO0NZUklMTElDIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTO0xsOzA7TDswNDREIDAzMDg7Ozs7Tjs7OzA0RUM7OzA0RUMKKzA0RUU7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVSBXSVRIIE1BQ1JPTjtMdTswO0w7MDQyMyAwMzA0Ozs7O047Ozs7MDRFRjsKKzA0RUY7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFUgV0lUSCBNQUNST047TGw7MDtMOzA0NDMgMDMwNDs7OztOOzs7MDRFRTs7MDRFRQorMDRGMDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTO0x1OzA7TDswNDIzIDAzMDg7Ozs7Tjs7OzswNEYxOworMDRGMTtDWVJJTExJQyBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUztMbDswO0w7MDQ0MyAwMzA4Ozs7O047OzswNEYwOzswNEYwCiswNEYyO0NZUklMTElDIENBUElUQUwgTEVUVEVSIFUgV0lUSCBET1VCTEUgQUNVVEU7THU7MDtMOzA0MjMgMDMwQjs7OztOOzs7OzA0RjM7CiswNEYzO0NZUklMTElDIFNNQUxMIExFVFRFUiBVIFdJVEggRE9VQkxFIEFDVVRFO0xsOzA7TDswNDQzIDAzMEI7Ozs7Tjs7OzA0RjI7OzA0RjIKKzA0RjQ7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFIFdJVEggRElBRVJFU0lTO0x1OzA7TDswNDI3IDAzMDg7Ozs7Tjs7OzswNEY1OworMDRGNTtDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFIFdJVEggRElBRVJFU0lTO0xsOzA7TDswNDQ3IDAzMDg7Ozs7Tjs7OzA0RjQ7OzA0RjQKKzA0Rjg7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVSBXSVRIIERJQUVSRVNJUztMdTswO0w7MDQyQiAwMzA4Ozs7O047Ozs7MDRGOTsKKzA0Rjk7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUgV0lUSCBESUFFUkVTSVM7TGw7MDtMOzA0NEIgMDMwODs7OztOOzs7MDRGODs7MDRGOAorMDUwMDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLT01JIERFO0x1OzA7TDs7Ozs7Tjs7OzswNTAxOworMDUwMTtDWVJJTExJQyBTTUFMTCBMRVRURVIgS09NSSBERTtMbDswO0w7Ozs7O047OzswNTAwOzswNTAwCiswNTAyO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEtPTUkgREpFO0x1OzA7TDs7Ozs7Tjs7OzswNTAzOworMDUwMztDWVJJTExJQyBTTUFMTCBMRVRURVIgS09NSSBESkU7TGw7MDtMOzs7OztOOzs7MDUwMjs7MDUwMgorMDUwNDtDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLT01JIFpKRTtMdTswO0w7Ozs7O047Ozs7MDUwNTsKKzA1MDU7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEtPTUkgWkpFO0xsOzA7TDs7Ozs7Tjs7OzA1MDQ7OzA1MDQKKzA1MDY7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS09NSSBEWkpFO0x1OzA7TDs7Ozs7Tjs7OzswNTA3OworMDUwNztDWVJJTExJQyBTTUFMTCBMRVRURVIgS09NSSBEWkpFO0xsOzA7TDs7Ozs7Tjs7OzA1MDY7OzA1MDYKKzA1MDg7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS09NSSBMSkU7THU7MDtMOzs7OztOOzs7OzA1MDk7CiswNTA5O0NZUklMTElDIFNNQUxMIExFVFRFUiBLT01JIExKRTtMbDswO0w7Ozs7O047OzswNTA4OzswNTA4CiswNTBBO0NZUklMTElDIENBUElUQUwgTEVUVEVSIEtPTUkgTkpFO0x1OzA7TDs7Ozs7Tjs7OzswNTBCOworMDUwQjtDWVJJTExJQyBTTUFMTCBMRVRURVIgS09NSSBOSkU7TGw7MDtMOzs7OztOOzs7MDUwQTs7MDUwQQorMDUwQztDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLT01JIFNKRTtMdTswO0w7Ozs7O047Ozs7MDUwRDsKKzA1MEQ7Q1lSSUxMSUMgU01BTEwgTEVUVEVSIEtPTUkgU0pFO0xsOzA7TDs7Ozs7Tjs7OzA1MEM7OzA1MEMKKzA1MEU7Q1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS09NSSBUSkU7THU7MDtMOzs7OztOOzs7OzA1MEY7CiswNTBGO0NZUklMTElDIFNNQUxMIExFVFRFUiBLT01JIFRKRTtMbDswO0w7Ozs7O047OzswNTBFOzswNTBFCiswNTMxO0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIEFZQjtMdTswO0w7Ozs7O047Ozs7MDU2MTsKKzA1MzI7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgQkVOO0x1OzA7TDs7Ozs7Tjs7OzswNTYyOworMDUzMztBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBHSU07THU7MDtMOzs7OztOOzs7OzA1NjM7CiswNTM0O0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIERBO0x1OzA7TDs7Ozs7Tjs7OzswNTY0OworMDUzNTtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBFQ0g7THU7MDtMOzs7OztOOzs7OzA1NjU7CiswNTM2O0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIFpBO0x1OzA7TDs7Ozs7Tjs7OzswNTY2OworMDUzNztBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBFSDtMdTswO0w7Ozs7O047Ozs7MDU2NzsKKzA1Mzg7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgRVQ7THU7MDtMOzs7OztOOzs7OzA1Njg7CiswNTM5O0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIFRPO0x1OzA7TDs7Ozs7Tjs7OzswNTY5OworMDUzQTtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBaSEU7THU7MDtMOzs7OztOOzs7OzA1NkE7CiswNTNCO0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIElOSTtMdTswO0w7Ozs7O047Ozs7MDU2QjsKKzA1M0M7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgTElXTjtMdTswO0w7Ozs7O047Ozs7MDU2QzsKKzA1M0Q7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgWEVIO0x1OzA7TDs7Ozs7Tjs7OzswNTZEOworMDUzRTtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBDQTtMdTswO0w7Ozs7O047Ozs7MDU2RTsKKzA1M0Y7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgS0VOO0x1OzA7TDs7Ozs7Tjs7OzswNTZGOworMDU0MDtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBITztMdTswO0w7Ozs7O047Ozs7MDU3MDsKKzA1NDE7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgSkE7THU7MDtMOzs7OztOOzs7OzA1NzE7CiswNTQyO0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIEdIQUQ7THU7MDtMOzs7OztOO0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIExBRDs7OzA1NzI7CiswNTQzO0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIENIRUg7THU7MDtMOzs7OztOOzs7OzA1NzM7CiswNTQ0O0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIE1FTjtMdTswO0w7Ozs7O047Ozs7MDU3NDsKKzA1NDU7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgWUk7THU7MDtMOzs7OztOOzs7OzA1NzU7CiswNTQ2O0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIE5PVztMdTswO0w7Ozs7O047Ozs7MDU3NjsKKzA1NDc7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgU0hBO0x1OzA7TDs7Ozs7Tjs7OzswNTc3OworMDU0ODtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBWTztMdTswO0w7Ozs7O047Ozs7MDU3ODsKKzA1NDk7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgQ0hBO0x1OzA7TDs7Ozs7Tjs7OzswNTc5OworMDU0QTtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBQRUg7THU7MDtMOzs7OztOOzs7OzA1N0E7CiswNTRCO0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIEpIRUg7THU7MDtMOzs7OztOOzs7OzA1N0I7CiswNTRDO0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIFJBO0x1OzA7TDs7Ozs7Tjs7OzswNTdDOworMDU0RDtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBTRUg7THU7MDtMOzs7OztOOzs7OzA1N0Q7CiswNTRFO0FSTUVOSUFOIENBUElUQUwgTEVUVEVSIFZFVztMdTswO0w7Ozs7O047Ozs7MDU3RTsKKzA1NEY7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgVElXTjtMdTswO0w7Ozs7O047Ozs7MDU3RjsKKzA1NTA7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgUkVIO0x1OzA7TDs7Ozs7Tjs7OzswNTgwOworMDU1MTtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBDTztMdTswO0w7Ozs7O047Ozs7MDU4MTsKKzA1NTI7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgWUlXTjtMdTswO0w7Ozs7O047Ozs7MDU4MjsKKzA1NTM7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgUElXUjtMdTswO0w7Ozs7O047Ozs7MDU4MzsKKzA1NTQ7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgS0VIO0x1OzA7TDs7Ozs7Tjs7OzswNTg0OworMDU1NTtBUk1FTklBTiBDQVBJVEFMIExFVFRFUiBPSDtMdTswO0w7Ozs7O047Ozs7MDU4NTsKKzA1NTY7QVJNRU5JQU4gQ0FQSVRBTCBMRVRURVIgRkVIO0x1OzA7TDs7Ozs7Tjs7OzswNTg2OworMDU1OTtBUk1FTklBTiBNT0RJRklFUiBMRVRURVIgTEVGVCBIQUxGIFJJTkc7TG07MDtMOzs7OztOOzs7OzsKKzA1NUE7QVJNRU5JQU4gQVBPU1RST1BIRTtQbzswO0w7Ozs7O047QVJNRU5JQU4gTU9ESUZJRVIgTEVUVEVSIFJJR0hUIEhBTEYgUklORzs7OzsKKzA1NUI7QVJNRU5JQU4gRU1QSEFTSVMgTUFSSztQbzswO0w7Ozs7O047Ozs7OworMDU1QztBUk1FTklBTiBFWENMQU1BVElPTiBNQVJLO1BvOzA7TDs7Ozs7Tjs7Ozs7CiswNTVEO0FSTUVOSUFOIENPTU1BO1BvOzA7TDs7Ozs7Tjs7Ozs7CiswNTVFO0FSTUVOSUFOIFFVRVNUSU9OIE1BUks7UG87MDtMOzs7OztOOzs7OzsKKzA1NUY7QVJNRU5JQU4gQUJCUkVWSUFUSU9OIE1BUks7UG87MDtMOzs7OztOOzs7OzsKKzA1NjE7QVJNRU5JQU4gU01BTEwgTEVUVEVSIEFZQjtMbDswO0w7Ozs7O047OzswNTMxOzswNTMxCiswNTYyO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBCRU47TGw7MDtMOzs7OztOOzs7MDUzMjs7MDUzMgorMDU2MztBUk1FTklBTiBTTUFMTCBMRVRURVIgR0lNO0xsOzA7TDs7Ozs7Tjs7OzA1MzM7OzA1MzMKKzA1NjQ7QVJNRU5JQU4gU01BTEwgTEVUVEVSIERBO0xsOzA7TDs7Ozs7Tjs7OzA1MzQ7OzA1MzQKKzA1NjU7QVJNRU5JQU4gU01BTEwgTEVUVEVSIEVDSDtMbDswO0w7Ozs7O047OzswNTM1OzswNTM1CiswNTY2O0FSTUVOSUFOIFNNQUxMIExFVFRFUiBaQTtMbDswO0w7Ozs7O047OzswNTM2OzswNTM2CiswNTY3O0FSTUVOSUFOIFNNQUxMIExFVFRFUiBFSDtMbDswO0w7Ozs7O047OzswNTM3OzswNTM3CiswNTY4O0FSTUVOSUFOIFNNQUxMIExFVFRFUiBFVDtMbDswO0w7Ozs7O047OzswNTM4OzswNTM4CiswNTY5O0FSTUVOSUFOIFNNQUxMIExFVFRFUiBUTztMbDswO0w7Ozs7O047OzswNTM5OzswNTM5CiswNTZBO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBaSEU7TGw7MDtMOzs7OztOOzs7MDUzQTs7MDUzQQorMDU2QjtBUk1FTklBTiBTTUFMTCBMRVRURVIgSU5JO0xsOzA7TDs7Ozs7Tjs7OzA1M0I7OzA1M0IKKzA1NkM7QVJNRU5JQU4gU01BTEwgTEVUVEVSIExJV047TGw7MDtMOzs7OztOOzs7MDUzQzs7MDUzQworMDU2RDtBUk1FTklBTiBTTUFMTCBMRVRURVIgWEVIO0xsOzA7TDs7Ozs7Tjs7OzA1M0Q7OzA1M0QKKzA1NkU7QVJNRU5JQU4gU01BTEwgTEVUVEVSIENBO0xsOzA7TDs7Ozs7Tjs7OzA1M0U7OzA1M0UKKzA1NkY7QVJNRU5JQU4gU01BTEwgTEVUVEVSIEtFTjtMbDswO0w7Ozs7O047OzswNTNGOzswNTNGCiswNTcwO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBITztMbDswO0w7Ozs7O047OzswNTQwOzswNTQwCiswNTcxO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBKQTtMbDswO0w7Ozs7O047OzswNTQxOzswNTQxCiswNTcyO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBHSEFEO0xsOzA7TDs7Ozs7TjtBUk1FTklBTiBTTUFMTCBMRVRURVIgTEFEOzswNTQyOzswNTQyCiswNTczO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBDSEVIO0xsOzA7TDs7Ozs7Tjs7OzA1NDM7OzA1NDMKKzA1NzQ7QVJNRU5JQU4gU01BTEwgTEVUVEVSIE1FTjtMbDswO0w7Ozs7O047OzswNTQ0OzswNTQ0CiswNTc1O0FSTUVOSUFOIFNNQUxMIExFVFRFUiBZSTtMbDswO0w7Ozs7O047OzswNTQ1OzswNTQ1CiswNTc2O0FSTUVOSUFOIFNNQUxMIExFVFRFUiBOT1c7TGw7MDtMOzs7OztOOzs7MDU0Njs7MDU0NgorMDU3NztBUk1FTklBTiBTTUFMTCBMRVRURVIgU0hBO0xsOzA7TDs7Ozs7Tjs7OzA1NDc7OzA1NDcKKzA1Nzg7QVJNRU5JQU4gU01BTEwgTEVUVEVSIFZPO0xsOzA7TDs7Ozs7Tjs7OzA1NDg7OzA1NDgKKzA1Nzk7QVJNRU5JQU4gU01BTEwgTEVUVEVSIENIQTtMbDswO0w7Ozs7O047OzswNTQ5OzswNTQ5CiswNTdBO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBQRUg7TGw7MDtMOzs7OztOOzs7MDU0QTs7MDU0QQorMDU3QjtBUk1FTklBTiBTTUFMTCBMRVRURVIgSkhFSDtMbDswO0w7Ozs7O047OzswNTRCOzswNTRCCiswNTdDO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBSQTtMbDswO0w7Ozs7O047OzswNTRDOzswNTRDCiswNTdEO0FSTUVOSUFOIFNNQUxMIExFVFRFUiBTRUg7TGw7MDtMOzs7OztOOzs7MDU0RDs7MDU0RAorMDU3RTtBUk1FTklBTiBTTUFMTCBMRVRURVIgVkVXO0xsOzA7TDs7Ozs7Tjs7OzA1NEU7OzA1NEUKKzA1N0Y7QVJNRU5JQU4gU01BTEwgTEVUVEVSIFRJV047TGw7MDtMOzs7OztOOzs7MDU0Rjs7MDU0RgorMDU4MDtBUk1FTklBTiBTTUFMTCBMRVRURVIgUkVIO0xsOzA7TDs7Ozs7Tjs7OzA1NTA7OzA1NTAKKzA1ODE7QVJNRU5JQU4gU01BTEwgTEVUVEVSIENPO0xsOzA7TDs7Ozs7Tjs7OzA1NTE7OzA1NTEKKzA1ODI7QVJNRU5JQU4gU01BTEwgTEVUVEVSIFlJV047TGw7MDtMOzs7OztOOzs7MDU1Mjs7MDU1MgorMDU4MztBUk1FTklBTiBTTUFMTCBMRVRURVIgUElXUjtMbDswO0w7Ozs7O047OzswNTUzOzswNTUzCiswNTg0O0FSTUVOSUFOIFNNQUxMIExFVFRFUiBLRUg7TGw7MDtMOzs7OztOOzs7MDU1NDs7MDU1NAorMDU4NTtBUk1FTklBTiBTTUFMTCBMRVRURVIgT0g7TGw7MDtMOzs7OztOOzs7MDU1NTs7MDU1NQorMDU4NjtBUk1FTklBTiBTTUFMTCBMRVRURVIgRkVIO0xsOzA7TDs7Ozs7Tjs7OzA1NTY7OzA1NTYKKzA1ODc7QVJNRU5JQU4gU01BTEwgTElHQVRVUkUgRUNIIFlJV047TGw7MDtMOzxjb21wYXQ+IDA1NjUgMDU4Mjs7OztOOzs7OzsKKzA1ODk7QVJNRU5JQU4gRlVMTCBTVE9QO1BvOzA7TDs7Ozs7TjtBUk1FTklBTiBQRVJJT0Q7Ozs7CiswNThBO0FSTUVOSUFOIEhZUEhFTjtQZDswO09OOzs7OztOOzs7OzsKKzA1OTE7SEVCUkVXIEFDQ0VOVCBFVE5BSFRBO01uOzIyMDtOU007Ozs7O047Ozs7OworMDU5MjtIRUJSRVcgQUNDRU5UIFNFR09MO01uOzIzMDtOU007Ozs7O047Ozs7OworMDU5MztIRUJSRVcgQUNDRU5UIFNIQUxTSEVMRVQ7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNTk0O0hFQlJFVyBBQ0NFTlQgWkFRRUYgUUFUQU47TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNTk1O0hFQlJFVyBBQ0NFTlQgWkFRRUYgR0FET0w7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNTk2O0hFQlJFVyBBQ0NFTlQgVElQRUhBO01uOzIyMDtOU007Ozs7O047Oyo7OzsKKzA1OTc7SEVCUkVXIEFDQ0VOVCBSRVZJQTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA1OTg7SEVCUkVXIEFDQ0VOVCBaQVJRQTtNbjsyMzA7TlNNOzs7OztOOzsqOzs7CiswNTk5O0hFQlJFVyBBQ0NFTlQgUEFTSFRBO01uOzIzMDtOU007Ozs7O047Ozs7OworMDU5QTtIRUJSRVcgQUNDRU5UIFlFVElWO01uOzIyMjtOU007Ozs7O047Ozs7OworMDU5QjtIRUJSRVcgQUNDRU5UIFRFVklSO01uOzIyMDtOU007Ozs7O047Ozs7OworMDU5QztIRUJSRVcgQUNDRU5UIEdFUkVTSDtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA1OUQ7SEVCUkVXIEFDQ0VOVCBHRVJFU0ggTVVRREFNO01uOzIzMDtOU007Ozs7O047Ozs7OworMDU5RTtIRUJSRVcgQUNDRU5UIEdFUlNIQVlJTTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA1OUY7SEVCUkVXIEFDQ0VOVCBRQVJORVkgUEFSQTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA1QTA7SEVCUkVXIEFDQ0VOVCBURUxJU0hBIEdFRE9MQTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA1QTE7SEVCUkVXIEFDQ0VOVCBQQVpFUjtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA1QTM7SEVCUkVXIEFDQ0VOVCBNVU5BSDtNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzA1QTQ7SEVCUkVXIEFDQ0VOVCBNQUhBUEFLSDtNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzA1QTU7SEVCUkVXIEFDQ0VOVCBNRVJLSEE7TW47MjIwO05TTTs7Ozs7Tjs7Kjs7OworMDVBNjtIRUJSRVcgQUNDRU5UIE1FUktIQSBLRUZVTEE7TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CiswNUE3O0hFQlJFVyBBQ0NFTlQgREFSR0E7TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CiswNUE4O0hFQlJFVyBBQ0NFTlQgUUFETUE7TW47MjMwO05TTTs7Ozs7Tjs7Kjs7OworMDVBOTtIRUJSRVcgQUNDRU5UIFRFTElTSEEgUUVUQU5BO01uOzIzMDtOU007Ozs7O047Ozs7OworMDVBQTtIRUJSRVcgQUNDRU5UIFlFUkFIIEJFTiBZT01PO01uOzIyMDtOU007Ozs7O047Oyo7OzsKKzA1QUI7SEVCUkVXIEFDQ0VOVCBPTEU7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNUFDO0hFQlJFVyBBQ0NFTlQgSUxVWTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA1QUQ7SEVCUkVXIEFDQ0VOVCBERUhJO01uOzIyMjtOU007Ozs7O047Ozs7OworMDVBRTtIRUJSRVcgQUNDRU5UIFpJTk9SO01uOzIyODtOU007Ozs7O047Ozs7OworMDVBRjtIRUJSRVcgTUFSSyBNQVNPUkEgQ0lSQ0xFO01uOzIzMDtOU007Ozs7O047Ozs7OworMDVCMDtIRUJSRVcgUE9JTlQgU0hFVkE7TW47MTA7TlNNOzs7OztOOzs7OzsKKzA1QjE7SEVCUkVXIFBPSU5UIEhBVEFGIFNFR09MO01uOzExO05TTTs7Ozs7Tjs7Ozs7CiswNUIyO0hFQlJFVyBQT0lOVCBIQVRBRiBQQVRBSDtNbjsxMjtOU007Ozs7O047Ozs7OworMDVCMztIRUJSRVcgUE9JTlQgSEFUQUYgUUFNQVRTO01uOzEzO05TTTs7Ozs7Tjs7Ozs7CiswNUI0O0hFQlJFVyBQT0lOVCBISVJJUTtNbjsxNDtOU007Ozs7O047Ozs7OworMDVCNTtIRUJSRVcgUE9JTlQgVFNFUkU7TW47MTU7TlNNOzs7OztOOzs7OzsKKzA1QjY7SEVCUkVXIFBPSU5UIFNFR09MO01uOzE2O05TTTs7Ozs7Tjs7Ozs7CiswNUI3O0hFQlJFVyBQT0lOVCBQQVRBSDtNbjsxNztOU007Ozs7O047Ozs7OworMDVCODtIRUJSRVcgUE9JTlQgUUFNQVRTO01uOzE4O05TTTs7Ozs7Tjs7Ozs7CiswNUI5O0hFQlJFVyBQT0lOVCBIT0xBTTtNbjsxOTtOU007Ozs7O047Ozs7OworMDVCQjtIRUJSRVcgUE9JTlQgUVVCVVRTO01uOzIwO05TTTs7Ozs7Tjs7Ozs7CiswNUJDO0hFQlJFVyBQT0lOVCBEQUdFU0ggT1IgTUFQSVE7TW47MjE7TlNNOzs7OztOO0hFQlJFVyBQT0lOVCBEQUdFU0g7b3Igc2h1cnVxOzs7CiswNUJEO0hFQlJFVyBQT0lOVCBNRVRFRztNbjsyMjtOU007Ozs7O047Oyo7OzsKKzA1QkU7SEVCUkVXIFBVTkNUVUFUSU9OIE1BUUFGO1BvOzA7Ujs7Ozs7Tjs7Ozs7CiswNUJGO0hFQlJFVyBQT0lOVCBSQUZFO01uOzIzO05TTTs7Ozs7Tjs7Ozs7CiswNUMwO0hFQlJFVyBQVU5DVFVBVElPTiBQQVNFUTtQbzswO1I7Ozs7O047SEVCUkVXIFBPSU5UIFBBU0VROyo7OzsKKzA1QzE7SEVCUkVXIFBPSU5UIFNISU4gRE9UO01uOzI0O05TTTs7Ozs7Tjs7Ozs7CiswNUMyO0hFQlJFVyBQT0lOVCBTSU4gRE9UO01uOzI1O05TTTs7Ozs7Tjs7Ozs7CiswNUMzO0hFQlJFVyBQVU5DVFVBVElPTiBTT0YgUEFTVVE7UG87MDtSOzs7OztOOzsqOzs7CiswNUM0O0hFQlJFVyBNQVJLIFVQUEVSIERPVDtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA1RDA7SEVCUkVXIExFVFRFUiBBTEVGO0xvOzA7Ujs7Ozs7Tjs7Ozs7CiswNUQxO0hFQlJFVyBMRVRURVIgQkVUO0xvOzA7Ujs7Ozs7Tjs7Ozs7CiswNUQyO0hFQlJFVyBMRVRURVIgR0lNRUw7TG87MDtSOzs7OztOOzs7OzsKKzA1RDM7SEVCUkVXIExFVFRFUiBEQUxFVDtMbzswO1I7Ozs7O047Ozs7OworMDVENDtIRUJSRVcgTEVUVEVSIEhFO0xvOzA7Ujs7Ozs7Tjs7Ozs7CiswNUQ1O0hFQlJFVyBMRVRURVIgVkFWO0xvOzA7Ujs7Ozs7Tjs7Ozs7CiswNUQ2O0hFQlJFVyBMRVRURVIgWkFZSU47TG87MDtSOzs7OztOOzs7OzsKKzA1RDc7SEVCUkVXIExFVFRFUiBIRVQ7TG87MDtSOzs7OztOOzs7OzsKKzA1RDg7SEVCUkVXIExFVFRFUiBURVQ7TG87MDtSOzs7OztOOzs7OzsKKzA1RDk7SEVCUkVXIExFVFRFUiBZT0Q7TG87MDtSOzs7OztOOzs7OzsKKzA1REE7SEVCUkVXIExFVFRFUiBGSU5BTCBLQUY7TG87MDtSOzs7OztOOzs7OzsKKzA1REI7SEVCUkVXIExFVFRFUiBLQUY7TG87MDtSOzs7OztOOzs7OzsKKzA1REM7SEVCUkVXIExFVFRFUiBMQU1FRDtMbzswO1I7Ozs7O047Ozs7OworMDVERDtIRUJSRVcgTEVUVEVSIEZJTkFMIE1FTTtMbzswO1I7Ozs7O047Ozs7OworMDVERTtIRUJSRVcgTEVUVEVSIE1FTTtMbzswO1I7Ozs7O047Ozs7OworMDVERjtIRUJSRVcgTEVUVEVSIEZJTkFMIE5VTjtMbzswO1I7Ozs7O047Ozs7OworMDVFMDtIRUJSRVcgTEVUVEVSIE5VTjtMbzswO1I7Ozs7O047Ozs7OworMDVFMTtIRUJSRVcgTEVUVEVSIFNBTUVLSDtMbzswO1I7Ozs7O047Ozs7OworMDVFMjtIRUJSRVcgTEVUVEVSIEFZSU47TG87MDtSOzs7OztOOzs7OzsKKzA1RTM7SEVCUkVXIExFVFRFUiBGSU5BTCBQRTtMbzswO1I7Ozs7O047Ozs7OworMDVFNDtIRUJSRVcgTEVUVEVSIFBFO0xvOzA7Ujs7Ozs7Tjs7Ozs7CiswNUU1O0hFQlJFVyBMRVRURVIgRklOQUwgVFNBREk7TG87MDtSOzs7OztOOzs7OzsKKzA1RTY7SEVCUkVXIExFVFRFUiBUU0FESTtMbzswO1I7Ozs7O047Ozs7OworMDVFNztIRUJSRVcgTEVUVEVSIFFPRjtMbzswO1I7Ozs7O047Ozs7OworMDVFODtIRUJSRVcgTEVUVEVSIFJFU0g7TG87MDtSOzs7OztOOzs7OzsKKzA1RTk7SEVCUkVXIExFVFRFUiBTSElOO0xvOzA7Ujs7Ozs7Tjs7Ozs7CiswNUVBO0hFQlJFVyBMRVRURVIgVEFWO0xvOzA7Ujs7Ozs7Tjs7Ozs7CiswNUYwO0hFQlJFVyBMSUdBVFVSRSBZSURESVNIIERPVUJMRSBWQVY7TG87MDtSOzs7OztOO0hFQlJFVyBMRVRURVIgRE9VQkxFIFZBVjs7OzsKKzA1RjE7SEVCUkVXIExJR0FUVVJFIFlJRERJU0ggVkFWIFlPRDtMbzswO1I7Ozs7O047SEVCUkVXIExFVFRFUiBWQVYgWU9EOzs7OworMDVGMjtIRUJSRVcgTElHQVRVUkUgWUlERElTSCBET1VCTEUgWU9EO0xvOzA7Ujs7Ozs7TjtIRUJSRVcgTEVUVEVSIERPVUJMRSBZT0Q7Ozs7CiswNUYzO0hFQlJFVyBQVU5DVFVBVElPTiBHRVJFU0g7UG87MDtSOzs7OztOOzs7OzsKKzA1RjQ7SEVCUkVXIFBVTkNUVUFUSU9OIEdFUlNIQVlJTTtQbzswO1I7Ozs7O047Ozs7OworMDYwQztBUkFCSUMgQ09NTUE7UG87MDtDUzs7Ozs7Tjs7Ozs7CiswNjFCO0FSQUJJQyBTRU1JQ09MT047UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjFGO0FSQUJJQyBRVUVTVElPTiBNQVJLO1BvOzA7QUw7Ozs7O047Ozs7OworMDYyMTtBUkFCSUMgTEVUVEVSIEhBTVpBO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBIQU1aQUg7Ozs7CiswNjIyO0FSQUJJQyBMRVRURVIgQUxFRiBXSVRIIE1BRERBIEFCT1ZFO0xvOzA7QUw7MDYyNyAwNjUzOzs7O047QVJBQklDIExFVFRFUiBNQUREQUggT04gQUxFRjs7OzsKKzA2MjM7QVJBQklDIExFVFRFUiBBTEVGIFdJVEggSEFNWkEgQUJPVkU7TG87MDtBTDswNjI3IDA2NTQ7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBTVpBSCBPTiBBTEVGOzs7OworMDYyNDtBUkFCSUMgTEVUVEVSIFdBVyBXSVRIIEhBTVpBIEFCT1ZFO0xvOzA7QUw7MDY0OCAwNjU0Ozs7O047QVJBQklDIExFVFRFUiBIQU1aQUggT04gV0FXOzs7OworMDYyNTtBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBIQU1aQSBCRUxPVztMbzswO0FMOzA2MjcgMDY1NTs7OztOO0FSQUJJQyBMRVRURVIgSEFNWkFIIFVOREVSIEFMRUY7Ozs7CiswNjI2O0FSQUJJQyBMRVRURVIgWUVIIFdJVEggSEFNWkEgQUJPVkU7TG87MDtBTDswNjRBIDA2NTQ7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBTVpBSCBPTiBZQTs7OzsKKzA2Mjc7QVJBQklDIExFVFRFUiBBTEVGO0xvOzA7QUw7Ozs7O047Ozs7OworMDYyODtBUkFCSUMgTEVUVEVSIEJFSDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgQkFBOzs7OworMDYyOTtBUkFCSUMgTEVUVEVSIFRFSCBNQVJCVVRBO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBUQUEgTUFSQlVUQUg7Ozs7CiswNjJBO0FSQUJJQyBMRVRURVIgVEVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBUQUE7Ozs7CiswNjJCO0FSQUJJQyBMRVRURVIgVEhFSDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgVEhBQTs7OzsKKzA2MkM7QVJBQklDIExFVFRFUiBKRUVNO0xvOzA7QUw7Ozs7O047Ozs7OworMDYyRDtBUkFCSUMgTEVUVEVSIEhBSDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgSEFBOzs7OworMDYyRTtBUkFCSUMgTEVUVEVSIEtIQUg7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEtIQUE7Ozs7CiswNjJGO0FSQUJJQyBMRVRURVIgREFMO0xvOzA7QUw7Ozs7O047Ozs7OworMDYzMDtBUkFCSUMgTEVUVEVSIFRIQUw7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjMxO0FSQUJJQyBMRVRURVIgUkVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBSQTs7OzsKKzA2MzI7QVJBQklDIExFVFRFUiBaQUlOO0xvOzA7QUw7Ozs7O047Ozs7OworMDYzMztBUkFCSUMgTEVUVEVSIFNFRU47TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjM0O0FSQUJJQyBMRVRURVIgU0hFRU47TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjM1O0FSQUJJQyBMRVRURVIgU0FEO0xvOzA7QUw7Ozs7O047Ozs7OworMDYzNjtBUkFCSUMgTEVUVEVSIERBRDtMbzswO0FMOzs7OztOOzs7OzsKKzA2Mzc7QVJBQklDIExFVFRFUiBUQUg7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjM4O0FSQUJJQyBMRVRURVIgWkFIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBESEFIOzs7OworMDYzOTtBUkFCSUMgTEVUVEVSIEFJTjtMbzswO0FMOzs7OztOOzs7OzsKKzA2M0E7QVJBQklDIExFVFRFUiBHSEFJTjtMbzswO0FMOzs7OztOOzs7OzsKKzA2NDA7QVJBQklDIFRBVFdFRUw7TG07MDtBTDs7Ozs7Tjs7Ozs7CiswNjQxO0FSQUJJQyBMRVRURVIgRkVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBGQTs7OzsKKzA2NDI7QVJBQklDIExFVFRFUiBRQUY7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjQzO0FSQUJJQyBMRVRURVIgS0FGO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBDQUY7Ozs7CiswNjQ0O0FSQUJJQyBMRVRURVIgTEFNO0xvOzA7QUw7Ozs7O047Ozs7OworMDY0NTtBUkFCSUMgTEVUVEVSIE1FRU07TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjQ2O0FSQUJJQyBMRVRURVIgTk9PTjtMbzswO0FMOzs7OztOOzs7OzsKKzA2NDc7QVJBQklDIExFVFRFUiBIRUg7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBOzs7OworMDY0ODtBUkFCSUMgTEVUVEVSIFdBVztMbzswO0FMOzs7OztOOzs7OzsKKzA2NDk7QVJBQklDIExFVFRFUiBBTEVGIE1BS1NVUkE7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEFMRUYgTUFRU1VSQUg7Ozs7CiswNjRBO0FSQUJJQyBMRVRURVIgWUVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBZQTs7OzsKKzA2NEI7QVJBQklDIEZBVEhBVEFOO01uOzI3O05TTTs7Ozs7Tjs7Ozs7CiswNjRDO0FSQUJJQyBEQU1NQVRBTjtNbjsyODtOU007Ozs7O047Ozs7OworMDY0RDtBUkFCSUMgS0FTUkFUQU47TW47Mjk7TlNNOzs7OztOOzs7OzsKKzA2NEU7QVJBQklDIEZBVEhBO01uOzMwO05TTTs7Ozs7TjtBUkFCSUMgRkFUSEFIOzs7OworMDY0RjtBUkFCSUMgREFNTUE7TW47MzE7TlNNOzs7OztOO0FSQUJJQyBEQU1NQUg7Ozs7CiswNjUwO0FSQUJJQyBLQVNSQTtNbjszMjtOU007Ozs7O047QVJBQklDIEtBU1JBSDs7OzsKKzA2NTE7QVJBQklDIFNIQUREQTtNbjszMztOU007Ozs7O047QVJBQklDIFNIQUREQUg7Ozs7CiswNjUyO0FSQUJJQyBTVUtVTjtNbjszNDtOU007Ozs7O047Ozs7OworMDY1MztBUkFCSUMgTUFEREFIIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Ozs7OworMDY1NDtBUkFCSUMgSEFNWkEgQUJPVkU7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNjU1O0FSQUJJQyBIQU1aQSBCRUxPVztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzA2NjA7QVJBQklDLUlORElDIERJR0lUIFpFUk87TmQ7MDtBTjs7MDswOzA7Tjs7Ozs7CiswNjYxO0FSQUJJQy1JTkRJQyBESUdJVCBPTkU7TmQ7MDtBTjs7MTsxOzE7Tjs7Ozs7CiswNjYyO0FSQUJJQy1JTkRJQyBESUdJVCBUV087TmQ7MDtBTjs7MjsyOzI7Tjs7Ozs7CiswNjYzO0FSQUJJQy1JTkRJQyBESUdJVCBUSFJFRTtOZDswO0FOOzszOzM7MztOOzs7OzsKKzA2NjQ7QVJBQklDLUlORElDIERJR0lUIEZPVVI7TmQ7MDtBTjs7NDs0OzQ7Tjs7Ozs7CiswNjY1O0FSQUJJQy1JTkRJQyBESUdJVCBGSVZFO05kOzA7QU47OzU7NTs1O047Ozs7OworMDY2NjtBUkFCSUMtSU5ESUMgRElHSVQgU0lYO05kOzA7QU47OzY7Njs2O047Ozs7OworMDY2NztBUkFCSUMtSU5ESUMgRElHSVQgU0VWRU47TmQ7MDtBTjs7Nzs3Ozc7Tjs7Ozs7CiswNjY4O0FSQUJJQy1JTkRJQyBESUdJVCBFSUdIVDtOZDswO0FOOzs4Ozg7ODtOOzs7OzsKKzA2Njk7QVJBQklDLUlORElDIERJR0lUIE5JTkU7TmQ7MDtBTjs7OTs5Ozk7Tjs7Ozs7CiswNjZBO0FSQUJJQyBQRVJDRU5UIFNJR047UG87MDtFVDs7Ozs7Tjs7Ozs7CiswNjZCO0FSQUJJQyBERUNJTUFMIFNFUEFSQVRPUjtQbzswO0FOOzs7OztOOzs7OzsKKzA2NkM7QVJBQklDIFRIT1VTQU5EUyBTRVBBUkFUT1I7UG87MDtBTjs7Ozs7Tjs7Ozs7CiswNjZEO0FSQUJJQyBGSVZFIFBPSU5URUQgU1RBUjtQbzswO0FMOzs7OztOOzs7OzsKKzA2NkU7QVJBQklDIExFVFRFUiBET1RMRVNTIEJFSDtMbzswO0FMOzs7OztOOzs7OzsKKzA2NkY7QVJBQklDIExFVFRFUiBET1RMRVNTIFFBRjtMbzswO0FMOzs7OztOOzs7OzsKKzA2NzA7QVJBQklDIExFVFRFUiBTVVBFUlNDUklQVCBBTEVGO01uOzM1O05TTTs7Ozs7TjtBUkFCSUMgQUxFRiBBQk9WRTs7OzsKKzA2NzE7QVJBQklDIExFVFRFUiBBTEVGIFdBU0xBO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBIQU1aQVQgV0FTTCBPTiBBTEVGOzs7OworMDY3MjtBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBXQVZZIEhBTVpBIEFCT1ZFO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBXQVZZIEhBTVpBSCBPTiBBTEVGOzs7OworMDY3MztBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBXQVZZIEhBTVpBIEJFTE9XO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBXQVZZIEhBTVpBSCBVTkRFUiBBTEVGOzs7OworMDY3NDtBUkFCSUMgTEVUVEVSIEhJR0ggSEFNWkE7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEhJR0ggSEFNWkFIOzs7OworMDY3NTtBUkFCSUMgTEVUVEVSIEhJR0ggSEFNWkEgQUxFRjtMbzswO0FMOzxjb21wYXQ+IDA2MjcgMDY3NDs7OztOO0FSQUJJQyBMRVRURVIgSElHSCBIQU1aQUggQUxFRjs7OzsKKzA2NzY7QVJBQklDIExFVFRFUiBISUdIIEhBTVpBIFdBVztMbzswO0FMOzxjb21wYXQ+IDA2NDggMDY3NDs7OztOO0FSQUJJQyBMRVRURVIgSElHSCBIQU1aQUggV0FXOzs7OworMDY3NztBUkFCSUMgTEVUVEVSIFUgV0lUSCBIQU1aQSBBQk9WRTtMbzswO0FMOzxjb21wYXQ+IDA2QzcgMDY3NDs7OztOO0FSQUJJQyBMRVRURVIgSElHSCBIQU1aQUggV0FXIFdJVEggREFNTUFIOzs7OworMDY3ODtBUkFCSUMgTEVUVEVSIEhJR0ggSEFNWkEgWUVIO0xvOzA7QUw7PGNvbXBhdD4gMDY0QSAwNjc0Ozs7O047QVJBQklDIExFVFRFUiBISUdIIEhBTVpBSCBZQTs7OzsKKzA2Nzk7QVJBQklDIExFVFRFUiBUVEVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBUQUEgV0lUSCBTTUFMTCBUQUg7Ozs7CiswNjdBO0FSQUJJQyBMRVRURVIgVFRFSEVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBUQUEgV0lUSCBUV08gRE9UUyBWRVJUSUNBTCBBQk9WRTs7OzsKKzA2N0I7QVJBQklDIExFVFRFUiBCRUVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBCQUEgV0lUSCBUV08gRE9UUyBWRVJUSUNBTCBCRUxPVzs7OzsKKzA2N0M7QVJBQklDIExFVFRFUiBURUggV0lUSCBSSU5HO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBUQUEgV0lUSCBSSU5HOzs7OworMDY3RDtBUkFCSUMgTEVUVEVSIFRFSCBXSVRIIFRIUkVFIERPVFMgQUJPVkUgRE9XTldBUkRTO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBUQUEgV0lUSCBUSFJFRSBET1RTIEFCT1ZFIERPV05XQVJEOzs7OworMDY3RTtBUkFCSUMgTEVUVEVSIFBFSDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgVEFBIFdJVEggVEhSRUUgRE9UUyBCRUxPVzs7OzsKKzA2N0Y7QVJBQklDIExFVFRFUiBURUhFSDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgVEFBIFdJVEggRk9VUiBET1RTIEFCT1ZFOzs7OworMDY4MDtBUkFCSUMgTEVUVEVSIEJFSEVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBCQUEgV0lUSCBGT1VSIERPVFMgQkVMT1c7Ozs7CiswNjgxO0FSQUJJQyBMRVRURVIgSEFIIFdJVEggSEFNWkEgQUJPVkU7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBTVpBSCBPTiBIQUE7Ozs7CiswNjgyO0FSQUJJQyBMRVRURVIgSEFIIFdJVEggVFdPIERPVFMgVkVSVElDQUwgQUJPVkU7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBQSBXSVRIIFRXTyBET1RTIFZFUlRJQ0FMIEFCT1ZFOzs7OworMDY4MztBUkFCSUMgTEVUVEVSIE5ZRUg7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBQSBXSVRIIE1JRERMRSBUV08gRE9UUzs7OzsKKzA2ODQ7QVJBQklDIExFVFRFUiBEWUVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBIQUEgV0lUSCBNSURETEUgVFdPIERPVFMgVkVSVElDQUw7Ozs7CiswNjg1O0FSQUJJQyBMRVRURVIgSEFIIFdJVEggVEhSRUUgRE9UUyBBQk9WRTtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgSEFBIFdJVEggVEhSRUUgRE9UUyBBQk9WRTs7OzsKKzA2ODY7QVJBQklDIExFVFRFUiBUQ0hFSDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgSEFBIFdJVEggTUlERExFIFRIUkVFIERPVFMgRE9XTldBUkQ7Ozs7CiswNjg3O0FSQUJJQyBMRVRURVIgVENIRUhFSDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgSEFBIFdJVEggTUlERExFIEZPVVIgRE9UUzs7OzsKKzA2ODg7QVJBQklDIExFVFRFUiBEREFMO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBEQUwgV0lUSCBTTUFMTCBUQUg7Ozs7CiswNjg5O0FSQUJJQyBMRVRURVIgREFMIFdJVEggUklORztMbzswO0FMOzs7OztOOzs7OzsKKzA2OEE7QVJBQklDIExFVFRFUiBEQUwgV0lUSCBET1QgQkVMT1c7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjhCO0FSQUJJQyBMRVRURVIgREFMIFdJVEggRE9UIEJFTE9XIEFORCBTTUFMTCBUQUg7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjhDO0FSQUJJQyBMRVRURVIgREFIQUw7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIERBTCBXSVRIIFRXTyBET1RTIEFCT1ZFOzs7OworMDY4RDtBUkFCSUMgTEVUVEVSIEREQUhBTDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgREFMIFdJVEggVFdPIERPVFMgQkVMT1c7Ozs7CiswNjhFO0FSQUJJQyBMRVRURVIgRFVMO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBEQUwgV0lUSCBUSFJFRSBET1RTIEFCT1ZFOzs7OworMDY4RjtBUkFCSUMgTEVUVEVSIERBTCBXSVRIIFRIUkVFIERPVFMgQUJPVkUgRE9XTldBUkRTO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBEQUwgV0lUSCBUSFJFRSBET1RTIEFCT1ZFIERPV05XQVJEOzs7OworMDY5MDtBUkFCSUMgTEVUVEVSIERBTCBXSVRIIEZPVVIgRE9UUyBBQk9WRTtMbzswO0FMOzs7OztOOzs7OzsKKzA2OTE7QVJBQklDIExFVFRFUiBSUkVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBSQSBXSVRIIFNNQUxMIFRBSDs7OzsKKzA2OTI7QVJBQklDIExFVFRFUiBSRUggV0lUSCBTTUFMTCBWO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBSQSBXSVRIIFNNQUxMIFY7Ozs7CiswNjkzO0FSQUJJQyBMRVRURVIgUkVIIFdJVEggUklORztMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgUkEgV0lUSCBSSU5HOzs7OworMDY5NDtBUkFCSUMgTEVUVEVSIFJFSCBXSVRIIERPVCBCRUxPVztMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgUkEgV0lUSCBET1QgQkVMT1c7Ozs7CiswNjk1O0FSQUJJQyBMRVRURVIgUkVIIFdJVEggU01BTEwgViBCRUxPVztMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgUkEgV0lUSCBTTUFMTCBWIEJFTE9XOzs7OworMDY5NjtBUkFCSUMgTEVUVEVSIFJFSCBXSVRIIERPVCBCRUxPVyBBTkQgRE9UIEFCT1ZFO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBSQSBXSVRIIERPVCBCRUxPVyBBTkQgRE9UIEFCT1ZFOzs7OworMDY5NztBUkFCSUMgTEVUVEVSIFJFSCBXSVRIIFRXTyBET1RTIEFCT1ZFO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBSQSBXSVRIIFRXTyBET1RTIEFCT1ZFOzs7OworMDY5ODtBUkFCSUMgTEVUVEVSIEpFSDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgUkEgV0lUSCBUSFJFRSBET1RTIEFCT1ZFOzs7OworMDY5OTtBUkFCSUMgTEVUVEVSIFJFSCBXSVRIIEZPVVIgRE9UUyBBQk9WRTtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgUkEgV0lUSCBGT1VSIERPVFMgQUJPVkU7Ozs7CiswNjlBO0FSQUJJQyBMRVRURVIgU0VFTiBXSVRIIERPVCBCRUxPVyBBTkQgRE9UIEFCT1ZFO0xvOzA7QUw7Ozs7O047Ozs7OworMDY5QjtBUkFCSUMgTEVUVEVSIFNFRU4gV0lUSCBUSFJFRSBET1RTIEJFTE9XO0xvOzA7QUw7Ozs7O047Ozs7OworMDY5QztBUkFCSUMgTEVUVEVSIFNFRU4gV0lUSCBUSFJFRSBET1RTIEJFTE9XIEFORCBUSFJFRSBET1RTIEFCT1ZFO0xvOzA7QUw7Ozs7O047Ozs7OworMDY5RDtBUkFCSUMgTEVUVEVSIFNBRCBXSVRIIFRXTyBET1RTIEJFTE9XO0xvOzA7QUw7Ozs7O047Ozs7OworMDY5RTtBUkFCSUMgTEVUVEVSIFNBRCBXSVRIIFRIUkVFIERPVFMgQUJPVkU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNjlGO0FSQUJJQyBMRVRURVIgVEFIIFdJVEggVEhSRUUgRE9UUyBBQk9WRTtMbzswO0FMOzs7OztOOzs7OzsKKzA2QTA7QVJBQklDIExFVFRFUiBBSU4gV0lUSCBUSFJFRSBET1RTIEFCT1ZFO0xvOzA7QUw7Ozs7O047Ozs7OworMDZBMTtBUkFCSUMgTEVUVEVSIERPVExFU1MgRkVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBET1RMRVNTIEZBOzs7OworMDZBMjtBUkFCSUMgTEVUVEVSIEZFSCBXSVRIIERPVCBNT1ZFRCBCRUxPVztMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgRkEgV0lUSCBET1QgTU9WRUQgQkVMT1c7Ozs7CiswNkEzO0FSQUJJQyBMRVRURVIgRkVIIFdJVEggRE9UIEJFTE9XO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBGQSBXSVRIIERPVCBCRUxPVzs7OzsKKzA2QTQ7QVJBQklDIExFVFRFUiBWRUg7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEZBIFdJVEggVEhSRUUgRE9UUyBBQk9WRTs7OzsKKzA2QTU7QVJBQklDIExFVFRFUiBGRUggV0lUSCBUSFJFRSBET1RTIEJFTE9XO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBGQSBXSVRIIFRIUkVFIERPVFMgQkVMT1c7Ozs7CiswNkE2O0FSQUJJQyBMRVRURVIgUEVIRUg7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEZBIFdJVEggRk9VUiBET1RTIEFCT1ZFOzs7OworMDZBNztBUkFCSUMgTEVUVEVSIFFBRiBXSVRIIERPVCBBQk9WRTtMbzswO0FMOzs7OztOOzs7OzsKKzA2QTg7QVJBQklDIExFVFRFUiBRQUYgV0lUSCBUSFJFRSBET1RTIEFCT1ZFO0xvOzA7QUw7Ozs7O047Ozs7OworMDZBOTtBUkFCSUMgTEVUVEVSIEtFSEVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBPUEVOIENBRjs7OzsKKzA2QUE7QVJBQklDIExFVFRFUiBTV0FTSCBLQUY7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIFNXQVNIIENBRjs7OzsKKzA2QUI7QVJBQklDIExFVFRFUiBLQUYgV0lUSCBSSU5HO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBDQUYgV0lUSCBSSU5HOzs7OworMDZBQztBUkFCSUMgTEVUVEVSIEtBRiBXSVRIIERPVCBBQk9WRTtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgQ0FGIFdJVEggRE9UIEFCT1ZFOzs7OworMDZBRDtBUkFCSUMgTEVUVEVSIE5HO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBDQUYgV0lUSCBUSFJFRSBET1RTIEFCT1ZFOzs7OworMDZBRTtBUkFCSUMgTEVUVEVSIEtBRiBXSVRIIFRIUkVFIERPVFMgQkVMT1c7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIENBRiBXSVRIIFRIUkVFIERPVFMgQkVMT1c7Ozs7CiswNkFGO0FSQUJJQyBMRVRURVIgR0FGO0xvOzA7QUw7Ozs7O047Oyo7OzsKKzA2QjA7QVJBQklDIExFVFRFUiBHQUYgV0lUSCBSSU5HO0xvOzA7QUw7Ozs7O047Ozs7OworMDZCMTtBUkFCSUMgTEVUVEVSIE5HT0VIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBHQUYgV0lUSCBUV08gRE9UUyBBQk9WRTs7OzsKKzA2QjI7QVJBQklDIExFVFRFUiBHQUYgV0lUSCBUV08gRE9UUyBCRUxPVztMbzswO0FMOzs7OztOOzs7OzsKKzA2QjM7QVJBQklDIExFVFRFUiBHVUVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBHQUYgV0lUSCBUV08gRE9UUyBWRVJUSUNBTCBCRUxPVzs7OzsKKzA2QjQ7QVJBQklDIExFVFRFUiBHQUYgV0lUSCBUSFJFRSBET1RTIEFCT1ZFO0xvOzA7QUw7Ozs7O047Ozs7OworMDZCNTtBUkFCSUMgTEVUVEVSIExBTSBXSVRIIFNNQUxMIFY7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNkI2O0FSQUJJQyBMRVRURVIgTEFNIFdJVEggRE9UIEFCT1ZFO0xvOzA7QUw7Ozs7O047Ozs7OworMDZCNztBUkFCSUMgTEVUVEVSIExBTSBXSVRIIFRIUkVFIERPVFMgQUJPVkU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNkI4O0FSQUJJQyBMRVRURVIgTEFNIFdJVEggVEhSRUUgRE9UUyBCRUxPVztMbzswO0FMOzs7OztOOzs7OzsKKzA2Qjk7QVJBQklDIExFVFRFUiBOT09OIFdJVEggRE9UIEJFTE9XO0xvOzA7QUw7Ozs7O047Ozs7OworMDZCQTtBUkFCSUMgTEVUVEVSIE5PT04gR0hVTk5BO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBET1RMRVNTIE5PT047Ozs7CiswNkJCO0FSQUJJQyBMRVRURVIgUk5PT047TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIERPVExFU1MgTk9PTiBXSVRIIFNNQUxMIFRBSDs7OzsKKzA2QkM7QVJBQklDIExFVFRFUiBOT09OIFdJVEggUklORztMbzswO0FMOzs7OztOOzs7OzsKKzA2QkQ7QVJBQklDIExFVFRFUiBOT09OIFdJVEggVEhSRUUgRE9UUyBBQk9WRTtMbzswO0FMOzs7OztOOzs7OzsKKzA2QkU7QVJBQklDIExFVFRFUiBIRUggRE9BQ0hBU0hNRUU7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEtOT1RURUQgSEE7Ozs7CiswNkJGO0FSQUJJQyBMRVRURVIgVENIRUggV0lUSCBET1QgQUJPVkU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNkMwO0FSQUJJQyBMRVRURVIgSEVIIFdJVEggWUVIIEFCT1ZFO0xvOzA7QUw7MDZENSAwNjU0Ozs7O047QVJBQklDIExFVFRFUiBIQU1aQUggT04gSEE7Ozs7CiswNkMxO0FSQUJJQyBMRVRURVIgSEVIIEdPQUw7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBIEdPQUw7Ozs7CiswNkMyO0FSQUJJQyBMRVRURVIgSEVIIEdPQUwgV0lUSCBIQU1aQSBBQk9WRTtMbzswO0FMOzA2QzEgMDY1NDs7OztOO0FSQUJJQyBMRVRURVIgSEFNWkFIIE9OIEhBIEdPQUw7Ozs7CiswNkMzO0FSQUJJQyBMRVRURVIgVEVIIE1BUkJVVEEgR09BTDtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgVEFBIE1BUkJVVEFIIEdPQUw7Ozs7CiswNkM0O0FSQUJJQyBMRVRURVIgV0FXIFdJVEggUklORztMbzswO0FMOzs7OztOOzs7OzsKKzA2QzU7QVJBQklDIExFVFRFUiBLSVJHSElaIE9FO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBXQVcgV0lUSCBCQVI7Ozs7CiswNkM2O0FSQUJJQyBMRVRURVIgT0U7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIFdBVyBXSVRIIFNNQUxMIFY7Ozs7CiswNkM3O0FSQUJJQyBMRVRURVIgVTtMbzswO0FMOzs7OztOO0FSQUJJQyBMRVRURVIgV0FXIFdJVEggREFNTUFIOzs7OworMDZDODtBUkFCSUMgTEVUVEVSIFlVO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBXQVcgV0lUSCBBTEVGIEFCT1ZFOzs7OworMDZDOTtBUkFCSUMgTEVUVEVSIEtJUkdISVogWVU7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIFdBVyBXSVRIIElOVkVSVEVEIFNNQUxMIFY7Ozs7CiswNkNBO0FSQUJJQyBMRVRURVIgV0FXIFdJVEggVFdPIERPVFMgQUJPVkU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNkNCO0FSQUJJQyBMRVRURVIgVkU7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIFdBVyBXSVRIIFRIUkVFIERPVFMgQUJPVkU7Ozs7CiswNkNDO0FSQUJJQyBMRVRURVIgRkFSU0kgWUVIO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBET1RMRVNTIFlBOzs7OworMDZDRDtBUkFCSUMgTEVUVEVSIFlFSCBXSVRIIFRBSUw7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIFlBIFdJVEggVEFJTDs7OzsKKzA2Q0U7QVJBQklDIExFVFRFUiBZRUggV0lUSCBTTUFMTCBWO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBZQSBXSVRIIFNNQUxMIFY7Ozs7CiswNkNGO0FSQUJJQyBMRVRURVIgV0FXIFdJVEggRE9UIEFCT1ZFO0xvOzA7QUw7Ozs7O047Ozs7OworMDZEMDtBUkFCSUMgTEVUVEVSIEU7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIFlBIFdJVEggVFdPIERPVFMgVkVSVElDQUwgQkVMT1c7Kjs7OworMDZEMTtBUkFCSUMgTEVUVEVSIFlFSCBXSVRIIFRIUkVFIERPVFMgQkVMT1c7TG87MDtBTDs7Ozs7TjtBUkFCSUMgTEVUVEVSIFlBIFdJVEggVEhSRUUgRE9UUyBCRUxPVzs7OzsKKzA2RDI7QVJBQklDIExFVFRFUiBZRUggQkFSUkVFO0xvOzA7QUw7Ozs7O047QVJBQklDIExFVFRFUiBZQSBCQVJSRUU7Ozs7CiswNkQzO0FSQUJJQyBMRVRURVIgWUVIIEJBUlJFRSBXSVRIIEhBTVpBIEFCT1ZFO0xvOzA7QUw7MDZEMiAwNjU0Ozs7O047QVJBQklDIExFVFRFUiBIQU1aQUggT04gWUEgQkFSUkVFOzs7OworMDZENDtBUkFCSUMgRlVMTCBTVE9QO1BvOzA7QUw7Ozs7O047QVJBQklDIFBFUklPRDs7OzsKKzA2RDU7QVJBQklDIExFVFRFUiBBRTtMbzswO0FMOzs7OztOOzs7OzsKKzA2RDY7QVJBQklDIFNNQUxMIEhJR0ggTElHQVRVUkUgU0FEIFdJVEggTEFNIFdJVEggQUxFRiBNQUtTVVJBO01uOzIzMDtOU007Ozs7O047Ozs7OworMDZENztBUkFCSUMgU01BTEwgSElHSCBMSUdBVFVSRSBRQUYgV0lUSCBMQU0gV0lUSCBBTEVGIE1BS1NVUkE7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNkQ4O0FSQUJJQyBTTUFMTCBISUdIIE1FRU0gSU5JVElBTCBGT1JNO01uOzIzMDtOU007Ozs7O047Ozs7OworMDZEOTtBUkFCSUMgU01BTEwgSElHSCBMQU0gQUxFRjtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2REE7QVJBQklDIFNNQUxMIEhJR0ggSkVFTTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2REI7QVJBQklDIFNNQUxMIEhJR0ggVEhSRUUgRE9UUztNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2REM7QVJBQklDIFNNQUxMIEhJR0ggU0VFTjtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2REQ7QVJBQklDIEVORCBPRiBBWUFIO0NmOzA7QUw7Ozs7O047Ozs7OworMDZERTtBUkFCSUMgU1RBUlQgT0YgUlVCIEVMIEhJWkI7TWU7MDtOU007Ozs7O047Ozs7OworMDZERjtBUkFCSUMgU01BTEwgSElHSCBST1VOREVEIFpFUk87TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNkUwO0FSQUJJQyBTTUFMTCBISUdIIFVQUklHSFQgUkVDVEFOR1VMQVIgWkVSTztNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2RTE7QVJBQklDIFNNQUxMIEhJR0ggRE9UTEVTUyBIRUFEIE9GIEtIQUg7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNkUyO0FSQUJJQyBTTUFMTCBISUdIIE1FRU0gSVNPTEFURUQgRk9STTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2RTM7QVJBQklDIFNNQUxMIExPVyBTRUVOO01uOzIyMDtOU007Ozs7O047Ozs7OworMDZFNDtBUkFCSUMgU01BTEwgSElHSCBNQUREQTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2RTU7QVJBQklDIFNNQUxMIFdBVztMbTswO0FMOzs7OztOOzs7OzsKKzA2RTY7QVJBQklDIFNNQUxMIFlFSDtMbTswO0FMOzs7OztOOzs7OzsKKzA2RTc7QVJBQklDIFNNQUxMIEhJR0ggWUVIO01uOzIzMDtOU007Ozs7O047Ozs7OworMDZFODtBUkFCSUMgU01BTEwgSElHSCBOT09OO01uOzIzMDtOU007Ozs7O047Ozs7OworMDZFOTtBUkFCSUMgUExBQ0UgT0YgU0FKREFIO1NvOzA7T047Ozs7O047Ozs7OworMDZFQTtBUkFCSUMgRU1QVFkgQ0VOVFJFIExPVyBTVE9QO01uOzIyMDtOU007Ozs7O047Ozs7OworMDZFQjtBUkFCSUMgRU1QVFkgQ0VOVFJFIEhJR0ggU1RPUDtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2RUM7QVJBQklDIFJPVU5ERUQgSElHSCBTVE9QIFdJVEggRklMTEVEIENFTlRSRTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA2RUQ7QVJBQklDIFNNQUxMIExPVyBNRUVNO01uOzIyMDtOU007Ozs7O047Ozs7OworMDZGMDtFWFRFTkRFRCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTztOZDswO0VOOzswOzA7MDtOO0VBU1RFUk4gQVJBQklDLUlORElDIERJR0lUIFpFUk87Ozs7CiswNkYxO0VYVEVOREVEIEFSQUJJQy1JTkRJQyBESUdJVCBPTkU7TmQ7MDtFTjs7MTsxOzE7TjtFQVNURVJOIEFSQUJJQy1JTkRJQyBESUdJVCBPTkU7Ozs7CiswNkYyO0VYVEVOREVEIEFSQUJJQy1JTkRJQyBESUdJVCBUV087TmQ7MDtFTjs7MjsyOzI7TjtFQVNURVJOIEFSQUJJQy1JTkRJQyBESUdJVCBUV087Ozs7CiswNkYzO0VYVEVOREVEIEFSQUJJQy1JTkRJQyBESUdJVCBUSFJFRTtOZDswO0VOOzszOzM7MztOO0VBU1RFUk4gQVJBQklDLUlORElDIERJR0lUIFRIUkVFOzs7OworMDZGNDtFWFRFTkRFRCBBUkFCSUMtSU5ESUMgRElHSVQgRk9VUjtOZDswO0VOOzs0OzQ7NDtOO0VBU1RFUk4gQVJBQklDLUlORElDIERJR0lUIEZPVVI7Ozs7CiswNkY1O0VYVEVOREVEIEFSQUJJQy1JTkRJQyBESUdJVCBGSVZFO05kOzA7RU47OzU7NTs1O047RUFTVEVSTiBBUkFCSUMtSU5ESUMgRElHSVQgRklWRTs7OzsKKzA2RjY7RVhURU5ERUQgQVJBQklDLUlORElDIERJR0lUIFNJWDtOZDswO0VOOzs2OzY7NjtOO0VBU1RFUk4gQVJBQklDLUlORElDIERJR0lUIFNJWDs7OzsKKzA2Rjc7RVhURU5ERUQgQVJBQklDLUlORElDIERJR0lUIFNFVkVOO05kOzA7RU47Ozc7Nzs3O047RUFTVEVSTiBBUkFCSUMtSU5ESUMgRElHSVQgU0VWRU47Ozs7CiswNkY4O0VYVEVOREVEIEFSQUJJQy1JTkRJQyBESUdJVCBFSUdIVDtOZDswO0VOOzs4Ozg7ODtOO0VBU1RFUk4gQVJBQklDLUlORElDIERJR0lUIEVJR0hUOzs7OworMDZGOTtFWFRFTkRFRCBBUkFCSUMtSU5ESUMgRElHSVQgTklORTtOZDswO0VOOzs5Ozk7OTtOO0VBU1RFUk4gQVJBQklDLUlORElDIERJR0lUIE5JTkU7Ozs7CiswNkZBO0FSQUJJQyBMRVRURVIgU0hFRU4gV0lUSCBET1QgQkVMT1c7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNkZCO0FSQUJJQyBMRVRURVIgREFEIFdJVEggRE9UIEJFTE9XO0xvOzA7QUw7Ozs7O047Ozs7OworMDZGQztBUkFCSUMgTEVUVEVSIEdIQUlOIFdJVEggRE9UIEJFTE9XO0xvOzA7QUw7Ozs7O047Ozs7OworMDZGRDtBUkFCSUMgU0lHTiBTSU5ESEkgQU1QRVJTQU5EO1NvOzA7QUw7Ozs7O047Ozs7OworMDZGRTtBUkFCSUMgU0lHTiBTSU5ESEkgUE9TVFBPU0lUSU9OIE1FTjtTbzswO0FMOzs7OztOOzs7OzsKKzA3MDA7U1lSSUFDIEVORCBPRiBQQVJBR1JBUEg7UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzAxO1NZUklBQyBTVVBSQUxJTkVBUiBGVUxMIFNUT1A7UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzAyO1NZUklBQyBTVUJMSU5FQVIgRlVMTCBTVE9QO1BvOzA7QUw7Ozs7O047Ozs7OworMDcwMztTWVJJQUMgU1VQUkFMSU5FQVIgQ09MT047UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzA0O1NZUklBQyBTVUJMSU5FQVIgQ09MT047UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzA1O1NZUklBQyBIT1JJWk9OVEFMIENPTE9OO1BvOzA7QUw7Ozs7O047Ozs7OworMDcwNjtTWVJJQUMgQ09MT04gU0tFV0VEIExFRlQ7UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzA3O1NZUklBQyBDT0xPTiBTS0VXRUQgUklHSFQ7UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzA4O1NZUklBQyBTVVBSQUxJTkVBUiBDT0xPTiBTS0VXRUQgTEVGVDtQbzswO0FMOzs7OztOOzs7OzsKKzA3MDk7U1lSSUFDIFNVQkxJTkVBUiBDT0xPTiBTS0VXRUQgUklHSFQ7UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzBBO1NZUklBQyBDT05UUkFDVElPTjtQbzswO0FMOzs7OztOOzs7OzsKKzA3MEI7U1lSSUFDIEhBUktMRUFOIE9CRUxVUztQbzswO0FMOzs7OztOOzs7OzsKKzA3MEM7U1lSSUFDIEhBUktMRUFOIE1FVE9CRUxVUztQbzswO0FMOzs7OztOOzs7OzsKKzA3MEQ7U1lSSUFDIEhBUktMRUFOIEFTVEVSSVNDVVM7UG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzBGO1NZUklBQyBBQkJSRVZJQVRJT04gTUFSSztDZjswO0JOOzs7OztOOzs7OzsKKzA3MTA7U1lSSUFDIExFVFRFUiBBTEFQSDtMbzswO0FMOzs7OztOOzs7OzsKKzA3MTE7U1lSSUFDIExFVFRFUiBTVVBFUlNDUklQVCBBTEFQSDtNbjszNjtOU007Ozs7O047Ozs7OworMDcxMjtTWVJJQUMgTEVUVEVSIEJFVEg7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzEzO1NZUklBQyBMRVRURVIgR0FNQUw7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzE0O1NZUklBQyBMRVRURVIgR0FNQUwgR0FSU0hVTkk7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzE1O1NZUklBQyBMRVRURVIgREFMQVRIO0xvOzA7QUw7Ozs7O047Ozs7OworMDcxNjtTWVJJQUMgTEVUVEVSIERPVExFU1MgREFMQVRIIFJJU0g7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzE3O1NZUklBQyBMRVRURVIgSEU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzE4O1NZUklBQyBMRVRURVIgV0FXO0xvOzA7QUw7Ozs7O047Ozs7OworMDcxOTtTWVJJQUMgTEVUVEVSIFpBSU47TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzFBO1NZUklBQyBMRVRURVIgSEVUSDtMbzswO0FMOzs7OztOOzs7OzsKKzA3MUI7U1lSSUFDIExFVFRFUiBURVRIO0xvOzA7QUw7Ozs7O047Ozs7OworMDcxQztTWVJJQUMgTEVUVEVSIFRFVEggR0FSU0hVTkk7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzFEO1NZUklBQyBMRVRURVIgWVVESDtMbzswO0FMOzs7OztOOzs7OzsKKzA3MUU7U1lSSUFDIExFVFRFUiBZVURIIEhFO0xvOzA7QUw7Ozs7O047Ozs7OworMDcxRjtTWVJJQUMgTEVUVEVSIEtBUEg7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzIwO1NZUklBQyBMRVRURVIgTEFNQURIO0xvOzA7QUw7Ozs7O047Ozs7OworMDcyMTtTWVJJQUMgTEVUVEVSIE1JTTtMbzswO0FMOzs7OztOOzs7OzsKKzA3MjI7U1lSSUFDIExFVFRFUiBOVU47TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzIzO1NZUklBQyBMRVRURVIgU0VNS0FUSDtMbzswO0FMOzs7OztOOzs7OzsKKzA3MjQ7U1lSSUFDIExFVFRFUiBGSU5BTCBTRU1LQVRIO0xvOzA7QUw7Ozs7O047Ozs7OworMDcyNTtTWVJJQUMgTEVUVEVSIEU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzI2O1NZUklBQyBMRVRURVIgUEU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzI3O1NZUklBQyBMRVRURVIgUkVWRVJTRUQgUEU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzI4O1NZUklBQyBMRVRURVIgU0FESEU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzI5O1NZUklBQyBMRVRURVIgUUFQSDtMbzswO0FMOzs7OztOOzs7OzsKKzA3MkE7U1lSSUFDIExFVFRFUiBSSVNIO0xvOzA7QUw7Ozs7O047Ozs7OworMDcyQjtTWVJJQUMgTEVUVEVSIFNISU47TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzJDO1NZUklBQyBMRVRURVIgVEFXO0xvOzA7QUw7Ozs7O047Ozs7OworMDczMDtTWVJJQUMgUFRIQUhBIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Ozs7OworMDczMTtTWVJJQUMgUFRIQUhBIEJFTE9XO01uOzIyMDtOU007Ozs7O047Ozs7OworMDczMjtTWVJJQUMgUFRIQUhBIERPVFRFRDtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA3MzM7U1lSSUFDIFpRQVBIQSBBQk9WRTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA3MzQ7U1lSSUFDIFpRQVBIQSBCRUxPVztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzA3MzU7U1lSSUFDIFpRQVBIQSBET1RURUQ7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNzM2O1NZUklBQyBSQkFTQSBBQk9WRTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA3Mzc7U1lSSUFDIFJCQVNBIEJFTE9XO01uOzIyMDtOU007Ozs7O047Ozs7OworMDczODtTWVJJQUMgRE9UVEVEIFpMQU1BIEhPUklaT05UQUw7TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CiswNzM5O1NZUklBQyBET1RURUQgWkxBTUEgQU5HVUxBUjtNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzA3M0E7U1lSSUFDIEhCQVNBIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Ozs7OworMDczQjtTWVJJQUMgSEJBU0EgQkVMT1c7TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CiswNzNDO1NZUklBQyBIQkFTQS1FU0FTQSBET1RURUQ7TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CiswNzNEO1NZUklBQyBFU0FTQSBBQk9WRTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA3M0U7U1lSSUFDIEVTQVNBIEJFTE9XO01uOzIyMDtOU007Ozs7O047Ozs7OworMDczRjtTWVJJQUMgUldBSEE7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNzQwO1NZUklBQyBGRU1JTklORSBET1Q7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNzQxO1NZUklBQyBRVVNIU0hBWUE7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswNzQyO1NZUklBQyBSVUtLQUtIQTtNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzA3NDM7U1lSSUFDIFRXTyBWRVJUSUNBTCBET1RTIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Ozs7OworMDc0NDtTWVJJQUMgVFdPIFZFUlRJQ0FMIERPVFMgQkVMT1c7TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CiswNzQ1O1NZUklBQyBUSFJFRSBET1RTIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Ozs7OworMDc0NjtTWVJJQUMgVEhSRUUgRE9UUyBCRUxPVztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzA3NDc7U1lSSUFDIE9CTElRVUUgTElORSBBQk9WRTtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA3NDg7U1lSSUFDIE9CTElRVUUgTElORSBCRUxPVztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzA3NDk7U1lSSUFDIE1VU0lDO01uOzIzMDtOU007Ozs7O047Ozs7OworMDc0QTtTWVJJQUMgQkFSUkVLSDtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA3ODA7VEhBQU5BIExFVFRFUiBIQUE7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzgxO1RIQUFOQSBMRVRURVIgU0hBVklZQU5JO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4MjtUSEFBTkEgTEVUVEVSIE5PT05VO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4MztUSEFBTkEgTEVUVEVSIFJBQTtMbzswO0FMOzs7OztOOzs7OzsKKzA3ODQ7VEhBQU5BIExFVFRFUiBCQUE7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzg1O1RIQUFOQSBMRVRURVIgTEhBVklZQU5JO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4NjtUSEFBTkEgTEVUVEVSIEtBQUZVO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4NztUSEFBTkEgTEVUVEVSIEFMSUZVO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4ODtUSEFBTkEgTEVUVEVSIFZBQVZVO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4OTtUSEFBTkEgTEVUVEVSIE1FRU1VO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4QTtUSEFBTkEgTEVUVEVSIEZBQUZVO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4QjtUSEFBTkEgTEVUVEVSIERIQUFMVTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OEM7VEhBQU5BIExFVFRFUiBUSEFBO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4RDtUSEFBTkEgTEVUVEVSIExBQU1VO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4RTtUSEFBTkEgTEVUVEVSIEdBQUZVO0xvOzA7QUw7Ozs7O047Ozs7OworMDc4RjtUSEFBTkEgTEVUVEVSIEdOQVZJWUFOSTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OTA7VEhBQU5BIExFVFRFUiBTRUVOVTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OTE7VEhBQU5BIExFVFRFUiBEQVZJWUFOSTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OTI7VEhBQU5BIExFVFRFUiBaQVZJWUFOSTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OTM7VEhBQU5BIExFVFRFUiBUQVZJWUFOSTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OTQ7VEhBQU5BIExFVFRFUiBZQUE7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzk1O1RIQUFOQSBMRVRURVIgUEFWSVlBTkk7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzk2O1RIQUFOQSBMRVRURVIgSkFWSVlBTkk7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzk3O1RIQUFOQSBMRVRURVIgQ0hBVklZQU5JO0xvOzA7QUw7Ozs7O047Ozs7OworMDc5ODtUSEFBTkEgTEVUVEVSIFRUQUE7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzk5O1RIQUFOQSBMRVRURVIgSEhBQTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OUE7VEhBQU5BIExFVFRFUiBLSEFBO0xvOzA7QUw7Ozs7O047Ozs7OworMDc5QjtUSEFBTkEgTEVUVEVSIFRIQUFMVTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OUM7VEhBQU5BIExFVFRFUiBaQUE7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswNzlEO1RIQUFOQSBMRVRURVIgU0hFRU5VO0xvOzA7QUw7Ozs7O047Ozs7OworMDc5RTtUSEFBTkEgTEVUVEVSIFNBQURIVTtMbzswO0FMOzs7OztOOzs7OzsKKzA3OUY7VEhBQU5BIExFVFRFUiBEQUFESFU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswN0EwO1RIQUFOQSBMRVRURVIgVE87TG87MDtBTDs7Ozs7Tjs7Ozs7CiswN0ExO1RIQUFOQSBMRVRURVIgWk87TG87MDtBTDs7Ozs7Tjs7Ozs7CiswN0EyO1RIQUFOQSBMRVRURVIgQUlOVTtMbzswO0FMOzs7OztOOzs7OzsKKzA3QTM7VEhBQU5BIExFVFRFUiBHSEFJTlU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswN0E0O1RIQUFOQSBMRVRURVIgUUFBRlU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswN0E1O1RIQUFOQSBMRVRURVIgV0FBVlU7TG87MDtBTDs7Ozs7Tjs7Ozs7CiswN0E2O1RIQUFOQSBBQkFGSUxJO01uOzA7TlNNOzs7OztOOzs7OzsKKzA3QTc7VEhBQU5BIEFBQkFBRklMSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswN0E4O1RIQUFOQSBJQklGSUxJO01uOzA7TlNNOzs7OztOOzs7OzsKKzA3QTk7VEhBQU5BIEVFQkVFRklMSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswN0FBO1RIQUFOQSBVQlVGSUxJO01uOzA7TlNNOzs7OztOOzs7OzsKKzA3QUI7VEhBQU5BIE9PQk9PRklMSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswN0FDO1RIQUFOQSBFQkVGSUxJO01uOzA7TlNNOzs7OztOOzs7OzsKKzA3QUQ7VEhBQU5BIEVZQkVZRklMSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswN0FFO1RIQUFOQSBPQk9GSUxJO01uOzA7TlNNOzs7OztOOzs7OzsKKzA3QUY7VEhBQU5BIE9BQk9BRklMSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswN0IwO1RIQUFOQSBTVUtVTjtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswN0IxO1RIQUFOQSBMRVRURVIgTkFBO0xvOzA7QUw7Ozs7O047Ozs7OworMDkwMTtERVZBTkFHQVJJIFNJR04gQ0FORFJBQklORFU7TW47MDtOU007Ozs7O047Ozs7OworMDkwMjtERVZBTkFHQVJJIFNJR04gQU5VU1ZBUkE7TW47MDtOU007Ozs7O047Ozs7OworMDkwMztERVZBTkFHQVJJIFNJR04gVklTQVJHQTtNYzswO0w7Ozs7O047Ozs7OworMDkwNTtERVZBTkFHQVJJIExFVFRFUiBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTA2O0RFVkFOQUdBUkkgTEVUVEVSIEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTA3O0RFVkFOQUdBUkkgTEVUVEVSIEk7TG87MDtMOzs7OztOOzs7OzsKKzA5MDg7REVWQU5BR0FSSSBMRVRURVIgSUk7TG87MDtMOzs7OztOOzs7OzsKKzA5MDk7REVWQU5BR0FSSSBMRVRURVIgVTtMbzswO0w7Ozs7O047Ozs7OworMDkwQTtERVZBTkFHQVJJIExFVFRFUiBVVTtMbzswO0w7Ozs7O047Ozs7OworMDkwQjtERVZBTkFHQVJJIExFVFRFUiBWT0NBTElDIFI7TG87MDtMOzs7OztOOzs7OzsKKzA5MEM7REVWQU5BR0FSSSBMRVRURVIgVk9DQUxJQyBMO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTBEO0RFVkFOQUdBUkkgTEVUVEVSIENBTkRSQSBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTBFO0RFVkFOQUdBUkkgTEVUVEVSIFNIT1JUIEU7TG87MDtMOzs7OztOOzs7OzsKKzA5MEY7REVWQU5BR0FSSSBMRVRURVIgRTtMbzswO0w7Ozs7O047Ozs7OworMDkxMDtERVZBTkFHQVJJIExFVFRFUiBBSTtMbzswO0w7Ozs7O047Ozs7OworMDkxMTtERVZBTkFHQVJJIExFVFRFUiBDQU5EUkEgTztMbzswO0w7Ozs7O047Ozs7OworMDkxMjtERVZBTkFHQVJJIExFVFRFUiBTSE9SVCBPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTEzO0RFVkFOQUdBUkkgTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzA5MTQ7REVWQU5BR0FSSSBMRVRURVIgQVU7TG87MDtMOzs7OztOOzs7OzsKKzA5MTU7REVWQU5BR0FSSSBMRVRURVIgS0E7TG87MDtMOzs7OztOOzs7OzsKKzA5MTY7REVWQU5BR0FSSSBMRVRURVIgS0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTE3O0RFVkFOQUdBUkkgTEVUVEVSIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTE4O0RFVkFOQUdBUkkgTEVUVEVSIEdIQTtMbzswO0w7Ozs7O047Ozs7OworMDkxOTtERVZBTkFHQVJJIExFVFRFUiBOR0E7TG87MDtMOzs7OztOOzs7OzsKKzA5MUE7REVWQU5BR0FSSSBMRVRURVIgQ0E7TG87MDtMOzs7OztOOzs7OzsKKzA5MUI7REVWQU5BR0FSSSBMRVRURVIgQ0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTFDO0RFVkFOQUdBUkkgTEVUVEVSIEpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTFEO0RFVkFOQUdBUkkgTEVUVEVSIEpIQTtMbzswO0w7Ozs7O047Ozs7OworMDkxRTtERVZBTkFHQVJJIExFVFRFUiBOWUE7TG87MDtMOzs7OztOOzs7OzsKKzA5MUY7REVWQU5BR0FSSSBMRVRURVIgVFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTIwO0RFVkFOQUdBUkkgTEVUVEVSIFRUSEE7TG87MDtMOzs7OztOOzs7OzsKKzA5MjE7REVWQU5BR0FSSSBMRVRURVIgRERBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTIyO0RFVkFOQUdBUkkgTEVUVEVSIERESEE7TG87MDtMOzs7OztOOzs7OzsKKzA5MjM7REVWQU5BR0FSSSBMRVRURVIgTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTI0O0RFVkFOQUdBUkkgTEVUVEVSIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTI1O0RFVkFOQUdBUkkgTEVUVEVSIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMDkyNjtERVZBTkFHQVJJIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMDkyNztERVZBTkFHQVJJIExFVFRFUiBESEE7TG87MDtMOzs7OztOOzs7OzsKKzA5Mjg7REVWQU5BR0FSSSBMRVRURVIgTkE7TG87MDtMOzs7OztOOzs7OzsKKzA5Mjk7REVWQU5BR0FSSSBMRVRURVIgTk5OQTtMbzswO0w7MDkyOCAwOTNDOzs7O047Ozs7OworMDkyQTtERVZBTkFHQVJJIExFVFRFUiBQQTtMbzswO0w7Ozs7O047Ozs7OworMDkyQjtERVZBTkFHQVJJIExFVFRFUiBQSEE7TG87MDtMOzs7OztOOzs7OzsKKzA5MkM7REVWQU5BR0FSSSBMRVRURVIgQkE7TG87MDtMOzs7OztOOzs7OzsKKzA5MkQ7REVWQU5BR0FSSSBMRVRURVIgQkhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTJFO0RFVkFOQUdBUkkgTEVUVEVSIE1BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTJGO0RFVkFOQUdBUkkgTEVUVEVSIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTMwO0RFVkFOQUdBUkkgTEVUVEVSIFJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTMxO0RFVkFOQUdBUkkgTEVUVEVSIFJSQTtMbzswO0w7MDkzMCAwOTNDOzs7O047Ozs7OworMDkzMjtERVZBTkFHQVJJIExFVFRFUiBMQTtMbzswO0w7Ozs7O047Ozs7OworMDkzMztERVZBTkFHQVJJIExFVFRFUiBMTEE7TG87MDtMOzs7OztOOzs7OzsKKzA5MzQ7REVWQU5BR0FSSSBMRVRURVIgTExMQTtMbzswO0w7MDkzMyAwOTNDOzs7O047Ozs7OworMDkzNTtERVZBTkFHQVJJIExFVFRFUiBWQTtMbzswO0w7Ozs7O047Ozs7OworMDkzNjtERVZBTkFHQVJJIExFVFRFUiBTSEE7TG87MDtMOzs7OztOOzs7OzsKKzA5Mzc7REVWQU5BR0FSSSBMRVRURVIgU1NBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTM4O0RFVkFOQUdBUkkgTEVUVEVSIFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTM5O0RFVkFOQUdBUkkgTEVUVEVSIEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTNDO0RFVkFOQUdBUkkgU0lHTiBOVUtUQTtNbjs3O05TTTs7Ozs7Tjs7Ozs7CiswOTNEO0RFVkFOQUdBUkkgU0lHTiBBVkFHUkFIQTtMbzswO0w7Ozs7O047Ozs7OworMDkzRTtERVZBTkFHQVJJIFZPV0VMIFNJR04gQUE7TWM7MDtMOzs7OztOOzs7OzsKKzA5M0Y7REVWQU5BR0FSSSBWT1dFTCBTSUdOIEk7TWM7MDtMOzs7OztOOzs7OzsKKzA5NDA7REVWQU5BR0FSSSBWT1dFTCBTSUdOIElJO01jOzA7TDs7Ozs7Tjs7Ozs7CiswOTQxO0RFVkFOQUdBUkkgVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5NDI7REVWQU5BR0FSSSBWT1dFTCBTSUdOIFVVO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5NDM7REVWQU5BR0FSSSBWT1dFTCBTSUdOIFZPQ0FMSUMgUjtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswOTQ0O0RFVkFOQUdBUkkgVk9XRUwgU0lHTiBWT0NBTElDIFJSO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5NDU7REVWQU5BR0FSSSBWT1dFTCBTSUdOIENBTkRSQSBFO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5NDY7REVWQU5BR0FSSSBWT1dFTCBTSUdOIFNIT1JUIEU7TW47MDtOU007Ozs7O047Ozs7OworMDk0NztERVZBTkFHQVJJIFZPV0VMIFNJR04gRTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswOTQ4O0RFVkFOQUdBUkkgVk9XRUwgU0lHTiBBSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswOTQ5O0RFVkFOQUdBUkkgVk9XRUwgU0lHTiBDQU5EUkEgTztNYzswO0w7Ozs7O047Ozs7OworMDk0QTtERVZBTkFHQVJJIFZPV0VMIFNJR04gU0hPUlQgTztNYzswO0w7Ozs7O047Ozs7OworMDk0QjtERVZBTkFHQVJJIFZPV0VMIFNJR04gTztNYzswO0w7Ozs7O047Ozs7OworMDk0QztERVZBTkFHQVJJIFZPV0VMIFNJR04gQVU7TWM7MDtMOzs7OztOOzs7OzsKKzA5NEQ7REVWQU5BR0FSSSBTSUdOIFZJUkFNQTtNbjs5O05TTTs7Ozs7Tjs7Ozs7CiswOTUwO0RFVkFOQUdBUkkgT007TG87MDtMOzs7OztOOzs7OzsKKzA5NTE7REVWQU5BR0FSSSBTVFJFU1MgU0lHTiBVREFUVEE7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CiswOTUyO0RFVkFOQUdBUkkgU1RSRVNTIFNJR04gQU5VREFUVEE7TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CiswOTUzO0RFVkFOQUdBUkkgR1JBVkUgQUNDRU5UO01uOzIzMDtOU007Ozs7O047Ozs7OworMDk1NDtERVZBTkFHQVJJIEFDVVRFIEFDQ0VOVDtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzA5NTg7REVWQU5BR0FSSSBMRVRURVIgUUE7TG87MDtMOzA5MTUgMDkzQzs7OztOOzs7OzsKKzA5NTk7REVWQU5BR0FSSSBMRVRURVIgS0hIQTtMbzswO0w7MDkxNiAwOTNDOzs7O047Ozs7OworMDk1QTtERVZBTkFHQVJJIExFVFRFUiBHSEhBO0xvOzA7TDswOTE3IDA5M0M7Ozs7Tjs7Ozs7CiswOTVCO0RFVkFOQUdBUkkgTEVUVEVSIFpBO0xvOzA7TDswOTFDIDA5M0M7Ozs7Tjs7Ozs7CiswOTVDO0RFVkFOQUdBUkkgTEVUVEVSIEREREhBO0xvOzA7TDswOTIxIDA5M0M7Ozs7Tjs7Ozs7CiswOTVEO0RFVkFOQUdBUkkgTEVUVEVSIFJIQTtMbzswO0w7MDkyMiAwOTNDOzs7O047Ozs7OworMDk1RTtERVZBTkFHQVJJIExFVFRFUiBGQTtMbzswO0w7MDkyQiAwOTNDOzs7O047Ozs7OworMDk1RjtERVZBTkFHQVJJIExFVFRFUiBZWUE7TG87MDtMOzA5MkYgMDkzQzs7OztOOzs7OzsKKzA5NjA7REVWQU5BR0FSSSBMRVRURVIgVk9DQUxJQyBSUjtMbzswO0w7Ozs7O047Ozs7OworMDk2MTtERVZBTkFHQVJJIExFVFRFUiBWT0NBTElDIExMO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTYyO0RFVkFOQUdBUkkgVk9XRUwgU0lHTiBWT0NBTElDIEw7TW47MDtOU007Ozs7O047Ozs7OworMDk2MztERVZBTkFHQVJJIFZPV0VMIFNJR04gVk9DQUxJQyBMTDtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswOTY0O0RFVkFOQUdBUkkgREFOREE7UG87MDtMOzs7OztOOzs7OzsKKzA5NjU7REVWQU5BR0FSSSBET1VCTEUgREFOREE7UG87MDtMOzs7OztOOzs7OzsKKzA5NjY7REVWQU5BR0FSSSBESUdJVCBaRVJPO05kOzA7TDs7MDswOzA7Tjs7Ozs7CiswOTY3O0RFVkFOQUdBUkkgRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CiswOTY4O0RFVkFOQUdBUkkgRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CiswOTY5O0RFVkFOQUdBUkkgRElHSVQgVEhSRUU7TmQ7MDtMOzszOzM7MztOOzs7OzsKKzA5NkE7REVWQU5BR0FSSSBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CiswOTZCO0RFVkFOQUdBUkkgRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMDk2QztERVZBTkFHQVJJIERJR0lUIFNJWDtOZDswO0w7OzY7Njs2O047Ozs7OworMDk2RDtERVZBTkFHQVJJIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CiswOTZFO0RFVkFOQUdBUkkgRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzA5NkY7REVWQU5BR0FSSSBESUdJVCBOSU5FO05kOzA7TDs7OTs5Ozk7Tjs7Ozs7CiswOTcwO0RFVkFOQUdBUkkgQUJCUkVWSUFUSU9OIFNJR047UG87MDtMOzs7OztOOzs7OzsKKzA5ODE7QkVOR0FMSSBTSUdOIENBTkRSQUJJTkRVO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5ODI7QkVOR0FMSSBTSUdOIEFOVVNWQVJBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswOTgzO0JFTkdBTEkgU0lHTiBWSVNBUkdBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswOTg1O0JFTkdBTEkgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzA5ODY7QkVOR0FMSSBMRVRURVIgQUE7TG87MDtMOzs7OztOOzs7OzsKKzA5ODc7QkVOR0FMSSBMRVRURVIgSTtMbzswO0w7Ozs7O047Ozs7OworMDk4ODtCRU5HQUxJIExFVFRFUiBJSTtMbzswO0w7Ozs7O047Ozs7OworMDk4OTtCRU5HQUxJIExFVFRFUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOThBO0JFTkdBTEkgTEVUVEVSIFVVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOThCO0JFTkdBTEkgTEVUVEVSIFZPQ0FMSUMgUjtMbzswO0w7Ozs7O047Ozs7OworMDk4QztCRU5HQUxJIExFVFRFUiBWT0NBTElDIEw7TG87MDtMOzs7OztOOzs7OzsKKzA5OEY7QkVOR0FMSSBMRVRURVIgRTtMbzswO0w7Ozs7O047Ozs7OworMDk5MDtCRU5HQUxJIExFVFRFUiBBSTtMbzswO0w7Ozs7O047Ozs7OworMDk5MztCRU5HQUxJIExFVFRFUiBPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTk0O0JFTkdBTEkgTEVUVEVSIEFVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTk1O0JFTkdBTEkgTEVUVEVSIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTk2O0JFTkdBTEkgTEVUVEVSIEtIQTtMbzswO0w7Ozs7O047Ozs7OworMDk5NztCRU5HQUxJIExFVFRFUiBHQTtMbzswO0w7Ozs7O047Ozs7OworMDk5ODtCRU5HQUxJIExFVFRFUiBHSEE7TG87MDtMOzs7OztOOzs7OzsKKzA5OTk7QkVOR0FMSSBMRVRURVIgTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTlBO0JFTkdBTEkgTEVUVEVSIENBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTlCO0JFTkdBTEkgTEVUVEVSIENIQTtMbzswO0w7Ozs7O047Ozs7OworMDk5QztCRU5HQUxJIExFVFRFUiBKQTtMbzswO0w7Ozs7O047Ozs7OworMDk5RDtCRU5HQUxJIExFVFRFUiBKSEE7TG87MDtMOzs7OztOOzs7OzsKKzA5OUU7QkVOR0FMSSBMRVRURVIgTllBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOTlGO0JFTkdBTEkgTEVUVEVSIFRUQTtMbzswO0w7Ozs7O047Ozs7OworMDlBMDtCRU5HQUxJIExFVFRFUiBUVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOUExO0JFTkdBTEkgTEVUVEVSIEREQTtMbzswO0w7Ozs7O047Ozs7OworMDlBMjtCRU5HQUxJIExFVFRFUiBEREhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOUEzO0JFTkdBTEkgTEVUVEVSIE5OQTtMbzswO0w7Ozs7O047Ozs7OworMDlBNDtCRU5HQUxJIExFVFRFUiBUQTtMbzswO0w7Ozs7O047Ozs7OworMDlBNTtCRU5HQUxJIExFVFRFUiBUSEE7TG87MDtMOzs7OztOOzs7OzsKKzA5QTY7QkVOR0FMSSBMRVRURVIgREE7TG87MDtMOzs7OztOOzs7OzsKKzA5QTc7QkVOR0FMSSBMRVRURVIgREhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOUE4O0JFTkdBTEkgTEVUVEVSIE5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOUFBO0JFTkdBTEkgTEVUVEVSIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOUFCO0JFTkdBTEkgTEVUVEVSIFBIQTtMbzswO0w7Ozs7O047Ozs7OworMDlBQztCRU5HQUxJIExFVFRFUiBCQTtMbzswO0w7Ozs7O047Ozs7OworMDlBRDtCRU5HQUxJIExFVFRFUiBCSEE7TG87MDtMOzs7OztOOzs7OzsKKzA5QUU7QkVOR0FMSSBMRVRURVIgTUE7TG87MDtMOzs7OztOOzs7OzsKKzA5QUY7QkVOR0FMSSBMRVRURVIgWUE7TG87MDtMOzs7OztOOzs7OzsKKzA5QjA7QkVOR0FMSSBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzA5QjI7QkVOR0FMSSBMRVRURVIgTEE7TG87MDtMOzs7OztOOzs7OzsKKzA5QjY7QkVOR0FMSSBMRVRURVIgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOUI3O0JFTkdBTEkgTEVUVEVSIFNTQTtMbzswO0w7Ozs7O047Ozs7OworMDlCODtCRU5HQUxJIExFVFRFUiBTQTtMbzswO0w7Ozs7O047Ozs7OworMDlCOTtCRU5HQUxJIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMDlCQztCRU5HQUxJIFNJR04gTlVLVEE7TW47NztOU007Ozs7O047Ozs7OworMDlCRTtCRU5HQUxJIFZPV0VMIFNJR04gQUE7TWM7MDtMOzs7OztOOzs7OzsKKzA5QkY7QkVOR0FMSSBWT1dFTCBTSUdOIEk7TWM7MDtMOzs7OztOOzs7OzsKKzA5QzA7QkVOR0FMSSBWT1dFTCBTSUdOIElJO01jOzA7TDs7Ozs7Tjs7Ozs7CiswOUMxO0JFTkdBTEkgVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5QzI7QkVOR0FMSSBWT1dFTCBTSUdOIFVVO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5QzM7QkVOR0FMSSBWT1dFTCBTSUdOIFZPQ0FMSUMgUjtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswOUM0O0JFTkdBTEkgVk9XRUwgU0lHTiBWT0NBTElDIFJSO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5Qzc7QkVOR0FMSSBWT1dFTCBTSUdOIEU7TWM7MDtMOzs7OztOOzs7OzsKKzA5Qzg7QkVOR0FMSSBWT1dFTCBTSUdOIEFJO01jOzA7TDs7Ozs7Tjs7Ozs7CiswOUNCO0JFTkdBTEkgVk9XRUwgU0lHTiBPO01jOzA7TDswOUM3IDA5QkU7Ozs7Tjs7Ozs7CiswOUNDO0JFTkdBTEkgVk9XRUwgU0lHTiBBVTtNYzswO0w7MDlDNyAwOUQ3Ozs7O047Ozs7OworMDlDRDtCRU5HQUxJIFNJR04gVklSQU1BO01uOzk7TlNNOzs7OztOOzs7OzsKKzA5RDc7QkVOR0FMSSBBVSBMRU5HVEggTUFSSztNYzswO0w7Ozs7O047Ozs7OworMDlEQztCRU5HQUxJIExFVFRFUiBSUkE7TG87MDtMOzA5QTEgMDlCQzs7OztOOzs7OzsKKzA5REQ7QkVOR0FMSSBMRVRURVIgUkhBO0xvOzA7TDswOUEyIDA5QkM7Ozs7Tjs7Ozs7CiswOURGO0JFTkdBTEkgTEVUVEVSIFlZQTtMbzswO0w7MDlBRiAwOUJDOzs7O047Ozs7OworMDlFMDtCRU5HQUxJIExFVFRFUiBWT0NBTElDIFJSO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswOUUxO0JFTkdBTEkgTEVUVEVSIFZPQ0FMSUMgTEw7TG87MDtMOzs7OztOOzs7OzsKKzA5RTI7QkVOR0FMSSBWT1dFTCBTSUdOIFZPQ0FMSUMgTDtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswOUUzO0JFTkdBTEkgVk9XRUwgU0lHTiBWT0NBTElDIExMO01uOzA7TlNNOzs7OztOOzs7OzsKKzA5RTY7QkVOR0FMSSBESUdJVCBaRVJPO05kOzA7TDs7MDswOzA7Tjs7Ozs7CiswOUU3O0JFTkdBTEkgRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CiswOUU4O0JFTkdBTEkgRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CiswOUU5O0JFTkdBTEkgRElHSVQgVEhSRUU7TmQ7MDtMOzszOzM7MztOOzs7OzsKKzA5RUE7QkVOR0FMSSBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CiswOUVCO0JFTkdBTEkgRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMDlFQztCRU5HQUxJIERJR0lUIFNJWDtOZDswO0w7OzY7Njs2O047Ozs7OworMDlFRDtCRU5HQUxJIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CiswOUVFO0JFTkdBTEkgRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzA5RUY7QkVOR0FMSSBESUdJVCBOSU5FO05kOzA7TDs7OTs5Ozk7Tjs7Ozs7CiswOUYwO0JFTkdBTEkgTEVUVEVSIFJBIFdJVEggTUlERExFIERJQUdPTkFMO0xvOzA7TDs7Ozs7Tjs7QXNzYW1lc2U7OzsKKzA5RjE7QkVOR0FMSSBMRVRURVIgUkEgV0lUSCBMT1dFUiBESUFHT05BTDtMbzswO0w7Ozs7O047QkVOR0FMSSBMRVRURVIgVkEgV0lUSCBMT1dFUiBESUFHT05BTDtBc3NhbWVzZTs7OworMDlGMjtCRU5HQUxJIFJVUEVFIE1BUks7U2M7MDtFVDs7Ozs7Tjs7Ozs7CiswOUYzO0JFTkdBTEkgUlVQRUUgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzA5RjQ7QkVOR0FMSSBDVVJSRU5DWSBOVU1FUkFUT1IgT05FO05vOzA7TDs7OzsxO047Ozs7OworMDlGNTtCRU5HQUxJIENVUlJFTkNZIE5VTUVSQVRPUiBUV087Tm87MDtMOzs7OzI7Tjs7Ozs7CiswOUY2O0JFTkdBTEkgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRIUkVFO05vOzA7TDs7OzszO047Ozs7OworMDlGNztCRU5HQUxJIENVUlJFTkNZIE5VTUVSQVRPUiBGT1VSO05vOzA7TDs7Ozs0O047Ozs7OworMDlGODtCRU5HQUxJIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUgTEVTUyBUSEFOIFRIRSBERU5PTUlOQVRPUjtObzswO0w7Ozs7O047Ozs7OworMDlGOTtCRU5HQUxJIENVUlJFTkNZIERFTk9NSU5BVE9SIFNJWFRFRU47Tm87MDtMOzs7OzE2O047Ozs7OworMDlGQTtCRU5HQUxJIElTU0hBUjtTbzswO0w7Ozs7O047Ozs7OworMEEwMjtHVVJNVUtISSBTSUdOIEJJTkRJO01uOzA7TlNNOzs7OztOOzs7OzsKKzBBMDU7R1VSTVVLSEkgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzBBMDY7R1VSTVVLSEkgTEVUVEVSIEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTA3O0dVUk1VS0hJIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTA4O0dVUk1VS0hJIExFVFRFUiBJSTtMbzswO0w7Ozs7O047Ozs7OworMEEwOTtHVVJNVUtISSBMRVRURVIgVTtMbzswO0w7Ozs7O047Ozs7OworMEEwQTtHVVJNVUtISSBMRVRURVIgVVU7TG87MDtMOzs7OztOOzs7OzsKKzBBMEY7R1VSTVVLSEkgTEVUVEVSIEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTEwO0dVUk1VS0hJIExFVFRFUiBBSTtMbzswO0w7Ozs7O047Ozs7OworMEExMztHVVJNVUtISSBMRVRURVIgT087TG87MDtMOzs7OztOOzs7OzsKKzBBMTQ7R1VSTVVLSEkgTEVUVEVSIEFVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTE1O0dVUk1VS0hJIExFVFRFUiBLQTtMbzswO0w7Ozs7O047Ozs7OworMEExNjtHVVJNVUtISSBMRVRURVIgS0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTE3O0dVUk1VS0hJIExFVFRFUiBHQTtMbzswO0w7Ozs7O047Ozs7OworMEExODtHVVJNVUtISSBMRVRURVIgR0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTE5O0dVUk1VS0hJIExFVFRFUiBOR0E7TG87MDtMOzs7OztOOzs7OzsKKzBBMUE7R1VSTVVLSEkgTEVUVEVSIENBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTFCO0dVUk1VS0hJIExFVFRFUiBDSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBMUM7R1VSTVVLSEkgTEVUVEVSIEpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTFEO0dVUk1VS0hJIExFVFRFUiBKSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBMUU7R1VSTVVLSEkgTEVUVEVSIE5ZQTtMbzswO0w7Ozs7O047Ozs7OworMEExRjtHVVJNVUtISSBMRVRURVIgVFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTIwO0dVUk1VS0hJIExFVFRFUiBUVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTIxO0dVUk1VS0hJIExFVFRFUiBEREE7TG87MDtMOzs7OztOOzs7OzsKKzBBMjI7R1VSTVVLSEkgTEVUVEVSIERESEE7TG87MDtMOzs7OztOOzs7OzsKKzBBMjM7R1VSTVVLSEkgTEVUVEVSIE5OQTtMbzswO0w7Ozs7O047Ozs7OworMEEyNDtHVVJNVUtISSBMRVRURVIgVEE7TG87MDtMOzs7OztOOzs7OzsKKzBBMjU7R1VSTVVLSEkgTEVUVEVSIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMEEyNjtHVVJNVUtISSBMRVRURVIgREE7TG87MDtMOzs7OztOOzs7OzsKKzBBMjc7R1VSTVVLSEkgTEVUVEVSIERIQTtMbzswO0w7Ozs7O047Ozs7OworMEEyODtHVVJNVUtISSBMRVRURVIgTkE7TG87MDtMOzs7OztOOzs7OzsKKzBBMkE7R1VSTVVLSEkgTEVUVEVSIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTJCO0dVUk1VS0hJIExFVFRFUiBQSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBMkM7R1VSTVVLSEkgTEVUVEVSIEJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTJEO0dVUk1VS0hJIExFVFRFUiBCSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBMkU7R1VSTVVLSEkgTEVUVEVSIE1BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTJGO0dVUk1VS0hJIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMEEzMDtHVVJNVUtISSBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzBBMzI7R1VSTVVLSEkgTEVUVEVSIExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTMzO0dVUk1VS0hJIExFVFRFUiBMTEE7TG87MDtMOzBBMzIgMEEzQzs7OztOOzs7OzsKKzBBMzU7R1VSTVVLSEkgTEVUVEVSIFZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTM2O0dVUk1VS0hJIExFVFRFUiBTSEE7TG87MDtMOzBBMzggMEEzQzs7OztOOzs7OzsKKzBBMzg7R1VSTVVLSEkgTEVUVEVSIFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTM5O0dVUk1VS0hJIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMEEzQztHVVJNVUtISSBTSUdOIE5VS1RBO01uOzc7TlNNOzs7OztOOzs7OzsKKzBBM0U7R1VSTVVLSEkgVk9XRUwgU0lHTiBBQTtNYzswO0w7Ozs7O047Ozs7OworMEEzRjtHVVJNVUtISSBWT1dFTCBTSUdOIEk7TWM7MDtMOzs7OztOOzs7OzsKKzBBNDA7R1VSTVVLSEkgVk9XRUwgU0lHTiBJSTtNYzswO0w7Ozs7O047Ozs7OworMEE0MTtHVVJNVUtISSBWT1dFTCBTSUdOIFU7TW47MDtOU007Ozs7O047Ozs7OworMEE0MjtHVVJNVUtISSBWT1dFTCBTSUdOIFVVO01uOzA7TlNNOzs7OztOOzs7OzsKKzBBNDc7R1VSTVVLSEkgVk9XRUwgU0lHTiBFRTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQTQ4O0dVUk1VS0hJIFZPV0VMIFNJR04gQUk7TW47MDtOU007Ozs7O047Ozs7OworMEE0QjtHVVJNVUtISSBWT1dFTCBTSUdOIE9PO01uOzA7TlNNOzs7OztOOzs7OzsKKzBBNEM7R1VSTVVLSEkgVk9XRUwgU0lHTiBBVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQTREO0dVUk1VS0hJIFNJR04gVklSQU1BO01uOzk7TlNNOzs7OztOOzs7OzsKKzBBNTk7R1VSTVVLSEkgTEVUVEVSIEtISEE7TG87MDtMOzBBMTYgMEEzQzs7OztOOzs7OzsKKzBBNUE7R1VSTVVLSEkgTEVUVEVSIEdISEE7TG87MDtMOzBBMTcgMEEzQzs7OztOOzs7OzsKKzBBNUI7R1VSTVVLSEkgTEVUVEVSIFpBO0xvOzA7TDswQTFDIDBBM0M7Ozs7Tjs7Ozs7CiswQTVDO0dVUk1VS0hJIExFVFRFUiBSUkE7TG87MDtMOzs7OztOOzs7OzsKKzBBNUU7R1VSTVVLSEkgTEVUVEVSIEZBO0xvOzA7TDswQTJCIDBBM0M7Ozs7Tjs7Ozs7CiswQTY2O0dVUk1VS0hJIERJR0lUIFpFUk87TmQ7MDtMOzswOzA7MDtOOzs7OzsKKzBBNjc7R1VSTVVLSEkgRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CiswQTY4O0dVUk1VS0hJIERJR0lUIFRXTztOZDswO0w7OzI7MjsyO047Ozs7OworMEE2OTtHVVJNVUtISSBESUdJVCBUSFJFRTtOZDswO0w7OzM7MzszO047Ozs7OworMEE2QTtHVVJNVUtISSBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CiswQTZCO0dVUk1VS0hJIERJR0lUIEZJVkU7TmQ7MDtMOzs1OzU7NTtOOzs7OzsKKzBBNkM7R1VSTVVLSEkgRElHSVQgU0lYO05kOzA7TDs7Njs2OzY7Tjs7Ozs7CiswQTZEO0dVUk1VS0hJIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CiswQTZFO0dVUk1VS0hJIERJR0lUIEVJR0hUO05kOzA7TDs7ODs4Ozg7Tjs7Ozs7CiswQTZGO0dVUk1VS0hJIERJR0lUIE5JTkU7TmQ7MDtMOzs5Ozk7OTtOOzs7OzsKKzBBNzA7R1VSTVVLSEkgVElQUEk7TW47MDtOU007Ozs7O047Ozs7OworMEE3MTtHVVJNVUtISSBBRERBSztNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQTcyO0dVUk1VS0hJIElSSTtMbzswO0w7Ozs7O047Ozs7OworMEE3MztHVVJNVUtISSBVUkE7TG87MDtMOzs7OztOOzs7OzsKKzBBNzQ7R1VSTVVLSEkgRUsgT05LQVI7TG87MDtMOzs7OztOOzs7OzsKKzBBODE7R1VKQVJBVEkgU0lHTiBDQU5EUkFCSU5EVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQTgyO0dVSkFSQVRJIFNJR04gQU5VU1ZBUkE7TW47MDtOU007Ozs7O047Ozs7OworMEE4MztHVUpBUkFUSSBTSUdOIFZJU0FSR0E7TWM7MDtMOzs7OztOOzs7OzsKKzBBODU7R1VKQVJBVEkgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzBBODY7R1VKQVJBVEkgTEVUVEVSIEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTg3O0dVSkFSQVRJIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTg4O0dVSkFSQVRJIExFVFRFUiBJSTtMbzswO0w7Ozs7O047Ozs7OworMEE4OTtHVUpBUkFUSSBMRVRURVIgVTtMbzswO0w7Ozs7O047Ozs7OworMEE4QTtHVUpBUkFUSSBMRVRURVIgVVU7TG87MDtMOzs7OztOOzs7OzsKKzBBOEI7R1VKQVJBVEkgTEVUVEVSIFZPQ0FMSUMgUjtMbzswO0w7Ozs7O047Ozs7OworMEE4RDtHVUpBUkFUSSBWT1dFTCBDQU5EUkEgRTtMbzswO0w7Ozs7O047Ozs7OworMEE4RjtHVUpBUkFUSSBMRVRURVIgRTtMbzswO0w7Ozs7O047Ozs7OworMEE5MDtHVUpBUkFUSSBMRVRURVIgQUk7TG87MDtMOzs7OztOOzs7OzsKKzBBOTE7R1VKQVJBVEkgVk9XRUwgQ0FORFJBIE87TG87MDtMOzs7OztOOzs7OzsKKzBBOTM7R1VKQVJBVEkgTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzBBOTQ7R1VKQVJBVEkgTEVUVEVSIEFVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTk1O0dVSkFSQVRJIExFVFRFUiBLQTtMbzswO0w7Ozs7O047Ozs7OworMEE5NjtHVUpBUkFUSSBMRVRURVIgS0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTk3O0dVSkFSQVRJIExFVFRFUiBHQTtMbzswO0w7Ozs7O047Ozs7OworMEE5ODtHVUpBUkFUSSBMRVRURVIgR0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTk5O0dVSkFSQVRJIExFVFRFUiBOR0E7TG87MDtMOzs7OztOOzs7OzsKKzBBOUE7R1VKQVJBVEkgTEVUVEVSIENBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTlCO0dVSkFSQVRJIExFVFRFUiBDSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBOUM7R1VKQVJBVEkgTEVUVEVSIEpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQTlEO0dVSkFSQVRJIExFVFRFUiBKSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBOUU7R1VKQVJBVEkgTEVUVEVSIE5ZQTtMbzswO0w7Ozs7O047Ozs7OworMEE5RjtHVUpBUkFUSSBMRVRURVIgVFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUEwO0dVSkFSQVRJIExFVFRFUiBUVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUExO0dVSkFSQVRJIExFVFRFUiBEREE7TG87MDtMOzs7OztOOzs7OzsKKzBBQTI7R1VKQVJBVEkgTEVUVEVSIERESEE7TG87MDtMOzs7OztOOzs7OzsKKzBBQTM7R1VKQVJBVEkgTEVUVEVSIE5OQTtMbzswO0w7Ozs7O047Ozs7OworMEFBNDtHVUpBUkFUSSBMRVRURVIgVEE7TG87MDtMOzs7OztOOzs7OzsKKzBBQTU7R1VKQVJBVEkgTEVUVEVSIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMEFBNjtHVUpBUkFUSSBMRVRURVIgREE7TG87MDtMOzs7OztOOzs7OzsKKzBBQTc7R1VKQVJBVEkgTEVUVEVSIERIQTtMbzswO0w7Ozs7O047Ozs7OworMEFBODtHVUpBUkFUSSBMRVRURVIgTkE7TG87MDtMOzs7OztOOzs7OzsKKzBBQUE7R1VKQVJBVEkgTEVUVEVSIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUFCO0dVSkFSQVRJIExFVFRFUiBQSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBQUM7R1VKQVJBVEkgTEVUVEVSIEJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUFEO0dVSkFSQVRJIExFVFRFUiBCSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBQUU7R1VKQVJBVEkgTEVUVEVSIE1BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUFGO0dVSkFSQVRJIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMEFCMDtHVUpBUkFUSSBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzBBQjI7R1VKQVJBVEkgTEVUVEVSIExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUIzO0dVSkFSQVRJIExFVFRFUiBMTEE7TG87MDtMOzs7OztOOzs7OzsKKzBBQjU7R1VKQVJBVEkgTEVUVEVSIFZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUI2O0dVSkFSQVRJIExFVFRFUiBTSEE7TG87MDtMOzs7OztOOzs7OzsKKzBBQjc7R1VKQVJBVEkgTEVUVEVSIFNTQTtMbzswO0w7Ozs7O047Ozs7OworMEFCODtHVUpBUkFUSSBMRVRURVIgU0E7TG87MDtMOzs7OztOOzs7OzsKKzBBQjk7R1VKQVJBVEkgTEVUVEVSIEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUJDO0dVSkFSQVRJIFNJR04gTlVLVEE7TW47NztOU007Ozs7O047Ozs7OworMEFCRDtHVUpBUkFUSSBTSUdOIEFWQUdSQUhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQUJFO0dVSkFSQVRJIFZPV0VMIFNJR04gQUE7TWM7MDtMOzs7OztOOzs7OzsKKzBBQkY7R1VKQVJBVEkgVk9XRUwgU0lHTiBJO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQUMwO0dVSkFSQVRJIFZPV0VMIFNJR04gSUk7TWM7MDtMOzs7OztOOzs7OzsKKzBBQzE7R1VKQVJBVEkgVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzBBQzI7R1VKQVJBVEkgVk9XRUwgU0lHTiBVVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQUMzO0dVSkFSQVRJIFZPV0VMIFNJR04gVk9DQUxJQyBSO01uOzA7TlNNOzs7OztOOzs7OzsKKzBBQzQ7R1VKQVJBVEkgVk9XRUwgU0lHTiBWT0NBTElDIFJSO01uOzA7TlNNOzs7OztOOzs7OzsKKzBBQzU7R1VKQVJBVEkgVk9XRUwgU0lHTiBDQU5EUkEgRTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQUM3O0dVSkFSQVRJIFZPV0VMIFNJR04gRTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQUM4O0dVSkFSQVRJIFZPV0VMIFNJR04gQUk7TW47MDtOU007Ozs7O047Ozs7OworMEFDOTtHVUpBUkFUSSBWT1dFTCBTSUdOIENBTkRSQSBPO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQUNCO0dVSkFSQVRJIFZPV0VMIFNJR04gTztNYzswO0w7Ozs7O047Ozs7OworMEFDQztHVUpBUkFUSSBWT1dFTCBTSUdOIEFVO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQUNEO0dVSkFSQVRJIFNJR04gVklSQU1BO01uOzk7TlNNOzs7OztOOzs7OzsKKzBBRDA7R1VKQVJBVEkgT007TG87MDtMOzs7OztOOzs7OzsKKzBBRTA7R1VKQVJBVEkgTEVUVEVSIFZPQ0FMSUMgUlI7TG87MDtMOzs7OztOOzs7OzsKKzBBRTY7R1VKQVJBVEkgRElHSVQgWkVSTztOZDswO0w7OzA7MDswO047Ozs7OworMEFFNztHVUpBUkFUSSBESUdJVCBPTkU7TmQ7MDtMOzsxOzE7MTtOOzs7OzsKKzBBRTg7R1VKQVJBVEkgRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CiswQUU5O0dVSkFSQVRJIERJR0lUIFRIUkVFO05kOzA7TDs7MzszOzM7Tjs7Ozs7CiswQUVBO0dVSkFSQVRJIERJR0lUIEZPVVI7TmQ7MDtMOzs0OzQ7NDtOOzs7OzsKKzBBRUI7R1VKQVJBVEkgRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMEFFQztHVUpBUkFUSSBESUdJVCBTSVg7TmQ7MDtMOzs2OzY7NjtOOzs7OzsKKzBBRUQ7R1VKQVJBVEkgRElHSVQgU0VWRU47TmQ7MDtMOzs3Ozc7NztOOzs7OzsKKzBBRUU7R1VKQVJBVEkgRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzBBRUY7R1VKQVJBVEkgRElHSVQgTklORTtOZDswO0w7Ozk7OTs5O047Ozs7OworMEIwMTtPUklZQSBTSUdOIENBTkRSQUJJTkRVO01uOzA7TlNNOzs7OztOOzs7OzsKKzBCMDI7T1JJWUEgU0lHTiBBTlVTVkFSQTtNYzswO0w7Ozs7O047Ozs7OworMEIwMztPUklZQSBTSUdOIFZJU0FSR0E7TWM7MDtMOzs7OztOOzs7OzsKKzBCMDU7T1JJWUEgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzBCMDY7T1JJWUEgTEVUVEVSIEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjA3O09SSVlBIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjA4O09SSVlBIExFVFRFUiBJSTtMbzswO0w7Ozs7O047Ozs7OworMEIwOTtPUklZQSBMRVRURVIgVTtMbzswO0w7Ozs7O047Ozs7OworMEIwQTtPUklZQSBMRVRURVIgVVU7TG87MDtMOzs7OztOOzs7OzsKKzBCMEI7T1JJWUEgTEVUVEVSIFZPQ0FMSUMgUjtMbzswO0w7Ozs7O047Ozs7OworMEIwQztPUklZQSBMRVRURVIgVk9DQUxJQyBMO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjBGO09SSVlBIExFVFRFUiBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjEwO09SSVlBIExFVFRFUiBBSTtMbzswO0w7Ozs7O047Ozs7OworMEIxMztPUklZQSBMRVRURVIgTztMbzswO0w7Ozs7O047Ozs7OworMEIxNDtPUklZQSBMRVRURVIgQVU7TG87MDtMOzs7OztOOzs7OzsKKzBCMTU7T1JJWUEgTEVUVEVSIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjE2O09SSVlBIExFVFRFUiBLSEE7TG87MDtMOzs7OztOOzs7OzsKKzBCMTc7T1JJWUEgTEVUVEVSIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjE4O09SSVlBIExFVFRFUiBHSEE7TG87MDtMOzs7OztOOzs7OzsKKzBCMTk7T1JJWUEgTEVUVEVSIE5HQTtMbzswO0w7Ozs7O047Ozs7OworMEIxQTtPUklZQSBMRVRURVIgQ0E7TG87MDtMOzs7OztOOzs7OzsKKzBCMUI7T1JJWUEgTEVUVEVSIENIQTtMbzswO0w7Ozs7O047Ozs7OworMEIxQztPUklZQSBMRVRURVIgSkE7TG87MDtMOzs7OztOOzs7OzsKKzBCMUQ7T1JJWUEgTEVUVEVSIEpIQTtMbzswO0w7Ozs7O047Ozs7OworMEIxRTtPUklZQSBMRVRURVIgTllBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjFGO09SSVlBIExFVFRFUiBUVEE7TG87MDtMOzs7OztOOzs7OzsKKzBCMjA7T1JJWUEgTEVUVEVSIFRUSEE7TG87MDtMOzs7OztOOzs7OzsKKzBCMjE7T1JJWUEgTEVUVEVSIEREQTtMbzswO0w7Ozs7O047Ozs7OworMEIyMjtPUklZQSBMRVRURVIgRERIQTtMbzswO0w7Ozs7O047Ozs7OworMEIyMztPUklZQSBMRVRURVIgTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjI0O09SSVlBIExFVFRFUiBUQTtMbzswO0w7Ozs7O047Ozs7OworMEIyNTtPUklZQSBMRVRURVIgVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjI2O09SSVlBIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMEIyNztPUklZQSBMRVRURVIgREhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjI4O09SSVlBIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMEIyQTtPUklZQSBMRVRURVIgUEE7TG87MDtMOzs7OztOOzs7OzsKKzBCMkI7T1JJWUEgTEVUVEVSIFBIQTtMbzswO0w7Ozs7O047Ozs7OworMEIyQztPUklZQSBMRVRURVIgQkE7TG87MDtMOzs7OztOOzs7OzsKKzBCMkQ7T1JJWUEgTEVUVEVSIEJIQTtMbzswO0w7Ozs7O047Ozs7OworMEIyRTtPUklZQSBMRVRURVIgTUE7TG87MDtMOzs7OztOOzs7OzsKKzBCMkY7T1JJWUEgTEVUVEVSIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjMwO09SSVlBIExFVFRFUiBSQTtMbzswO0w7Ozs7O047Ozs7OworMEIzMjtPUklZQSBMRVRURVIgTEE7TG87MDtMOzs7OztOOzs7OzsKKzBCMzM7T1JJWUEgTEVUVEVSIExMQTtMbzswO0w7Ozs7O047Ozs7OworMEIzNjtPUklZQSBMRVRURVIgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjM3O09SSVlBIExFVFRFUiBTU0E7TG87MDtMOzs7OztOOzs7OzsKKzBCMzg7T1JJWUEgTEVUVEVSIFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjM5O09SSVlBIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMEIzQztPUklZQSBTSUdOIE5VS1RBO01uOzc7TlNNOzs7OztOOzs7OzsKKzBCM0Q7T1JJWUEgU0lHTiBBVkFHUkFIQTtMbzswO0w7Ozs7O047Ozs7OworMEIzRTtPUklZQSBWT1dFTCBTSUdOIEFBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQjNGO09SSVlBIFZPV0VMIFNJR04gSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQjQwO09SSVlBIFZPV0VMIFNJR04gSUk7TWM7MDtMOzs7OztOOzs7OzsKKzBCNDE7T1JJWUEgVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzBCNDI7T1JJWUEgVk9XRUwgU0lHTiBVVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQjQzO09SSVlBIFZPV0VMIFNJR04gVk9DQUxJQyBSO01uOzA7TlNNOzs7OztOOzs7OzsKKzBCNDc7T1JJWUEgVk9XRUwgU0lHTiBFO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQjQ4O09SSVlBIFZPV0VMIFNJR04gQUk7TWM7MDtMOzBCNDcgMEI1Njs7OztOOzs7OzsKKzBCNEI7T1JJWUEgVk9XRUwgU0lHTiBPO01jOzA7TDswQjQ3IDBCM0U7Ozs7Tjs7Ozs7CiswQjRDO09SSVlBIFZPV0VMIFNJR04gQVU7TWM7MDtMOzBCNDcgMEI1Nzs7OztOOzs7OzsKKzBCNEQ7T1JJWUEgU0lHTiBWSVJBTUE7TW47OTtOU007Ozs7O047Ozs7OworMEI1NjtPUklZQSBBSSBMRU5HVEggTUFSSztNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQjU3O09SSVlBIEFVIExFTkdUSCBNQVJLO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQjVDO09SSVlBIExFVFRFUiBSUkE7TG87MDtMOzBCMjEgMEIzQzs7OztOOzs7OzsKKzBCNUQ7T1JJWUEgTEVUVEVSIFJIQTtMbzswO0w7MEIyMiAwQjNDOzs7O047Ozs7OworMEI1RjtPUklZQSBMRVRURVIgWVlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjYwO09SSVlBIExFVFRFUiBWT0NBTElDIFJSO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjYxO09SSVlBIExFVFRFUiBWT0NBTElDIExMO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjY2O09SSVlBIERJR0lUIFpFUk87TmQ7MDtMOzswOzA7MDtOOzs7OzsKKzBCNjc7T1JJWUEgRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CiswQjY4O09SSVlBIERJR0lUIFRXTztOZDswO0w7OzI7MjsyO047Ozs7OworMEI2OTtPUklZQSBESUdJVCBUSFJFRTtOZDswO0w7OzM7MzszO047Ozs7OworMEI2QTtPUklZQSBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CiswQjZCO09SSVlBIERJR0lUIEZJVkU7TmQ7MDtMOzs1OzU7NTtOOzs7OzsKKzBCNkM7T1JJWUEgRElHSVQgU0lYO05kOzA7TDs7Njs2OzY7Tjs7Ozs7CiswQjZEO09SSVlBIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CiswQjZFO09SSVlBIERJR0lUIEVJR0hUO05kOzA7TDs7ODs4Ozg7Tjs7Ozs7CiswQjZGO09SSVlBIERJR0lUIE5JTkU7TmQ7MDtMOzs5Ozk7OTtOOzs7OzsKKzBCNzA7T1JJWUEgSVNTSEFSO1NvOzA7TDs7Ozs7Tjs7Ozs7CiswQjgyO1RBTUlMIFNJR04gQU5VU1ZBUkE7TW47MDtOU007Ozs7O047Ozs7OworMEI4MztUQU1JTCBTSUdOIFZJU0FSR0E7TG87MDtMOzs7OztOOzs7OzsKKzBCODU7VEFNSUwgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzBCODY7VEFNSUwgTEVUVEVSIEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjg3O1RBTUlMIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjg4O1RBTUlMIExFVFRFUiBJSTtMbzswO0w7Ozs7O047Ozs7OworMEI4OTtUQU1JTCBMRVRURVIgVTtMbzswO0w7Ozs7O047Ozs7OworMEI4QTtUQU1JTCBMRVRURVIgVVU7TG87MDtMOzs7OztOOzs7OzsKKzBCOEU7VEFNSUwgTEVUVEVSIEU7TG87MDtMOzs7OztOOzs7OzsKKzBCOEY7VEFNSUwgTEVUVEVSIEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjkwO1RBTUlMIExFVFRFUiBBSTtMbzswO0w7Ozs7O047Ozs7OworMEI5MjtUQU1JTCBMRVRURVIgTztMbzswO0w7Ozs7O047Ozs7OworMEI5MztUQU1JTCBMRVRURVIgT087TG87MDtMOzs7OztOOzs7OzsKKzBCOTQ7VEFNSUwgTEVUVEVSIEFVO0xvOzA7TDswQjkyIDBCRDc7Ozs7Tjs7Ozs7CiswQjk1O1RBTUlMIExFVFRFUiBLQTtMbzswO0w7Ozs7O047Ozs7OworMEI5OTtUQU1JTCBMRVRURVIgTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQjlBO1RBTUlMIExFVFRFUiBDQTtMbzswO0w7Ozs7O047Ozs7OworMEI5QztUQU1JTCBMRVRURVIgSkE7TG87MDtMOzs7OztOOzs7OzsKKzBCOUU7VEFNSUwgTEVUVEVSIE5ZQTtMbzswO0w7Ozs7O047Ozs7OworMEI5RjtUQU1JTCBMRVRURVIgVFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQkEzO1RBTUlMIExFVFRFUiBOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBCQTQ7VEFNSUwgTEVUVEVSIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQkE4O1RBTUlMIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMEJBOTtUQU1JTCBMRVRURVIgTk5OQTtMbzswO0w7Ozs7O047Ozs7OworMEJBQTtUQU1JTCBMRVRURVIgUEE7TG87MDtMOzs7OztOOzs7OzsKKzBCQUU7VEFNSUwgTEVUVEVSIE1BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQkFGO1RBTUlMIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMEJCMDtUQU1JTCBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzBCQjE7VEFNSUwgTEVUVEVSIFJSQTtMbzswO0w7Ozs7O047Ozs7OworMEJCMjtUQU1JTCBMRVRURVIgTEE7TG87MDtMOzs7OztOOzs7OzsKKzBCQjM7VEFNSUwgTEVUVEVSIExMQTtMbzswO0w7Ozs7O047Ozs7OworMEJCNDtUQU1JTCBMRVRURVIgTExMQTtMbzswO0w7Ozs7O047Ozs7OworMEJCNTtUQU1JTCBMRVRURVIgVkE7TG87MDtMOzs7OztOOzs7OzsKKzBCQjc7VEFNSUwgTEVUVEVSIFNTQTtMbzswO0w7Ozs7O047Ozs7OworMEJCODtUQU1JTCBMRVRURVIgU0E7TG87MDtMOzs7OztOOzs7OzsKKzBCQjk7VEFNSUwgTEVUVEVSIEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQkJFO1RBTUlMIFZPV0VMIFNJR04gQUE7TWM7MDtMOzs7OztOOzs7OzsKKzBCQkY7VEFNSUwgVk9XRUwgU0lHTiBJO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQkMwO1RBTUlMIFZPV0VMIFNJR04gSUk7TW47MDtOU007Ozs7O047Ozs7OworMEJDMTtUQU1JTCBWT1dFTCBTSUdOIFU7TWM7MDtMOzs7OztOOzs7OzsKKzBCQzI7VEFNSUwgVk9XRUwgU0lHTiBVVTtNYzswO0w7Ozs7O047Ozs7OworMEJDNjtUQU1JTCBWT1dFTCBTSUdOIEU7TWM7MDtMOzs7OztOOzs7OzsKKzBCQzc7VEFNSUwgVk9XRUwgU0lHTiBFRTtNYzswO0w7Ozs7O047Ozs7OworMEJDODtUQU1JTCBWT1dFTCBTSUdOIEFJO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQkNBO1RBTUlMIFZPV0VMIFNJR04gTztNYzswO0w7MEJDNiAwQkJFOzs7O047Ozs7OworMEJDQjtUQU1JTCBWT1dFTCBTSUdOIE9PO01jOzA7TDswQkM3IDBCQkU7Ozs7Tjs7Ozs7CiswQkNDO1RBTUlMIFZPV0VMIFNJR04gQVU7TWM7MDtMOzBCQzYgMEJENzs7OztOOzs7OzsKKzBCQ0Q7VEFNSUwgU0lHTiBWSVJBTUE7TW47OTtOU007Ozs7O047Ozs7OworMEJENztUQU1JTCBBVSBMRU5HVEggTUFSSztNYzswO0w7Ozs7O047Ozs7OworMEJFNztUQU1JTCBESUdJVCBPTkU7TmQ7MDtMOzsxOzE7MTtOOzs7OzsKKzBCRTg7VEFNSUwgRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CiswQkU5O1RBTUlMIERJR0lUIFRIUkVFO05kOzA7TDs7MzszOzM7Tjs7Ozs7CiswQkVBO1RBTUlMIERJR0lUIEZPVVI7TmQ7MDtMOzs0OzQ7NDtOOzs7OzsKKzBCRUI7VEFNSUwgRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMEJFQztUQU1JTCBESUdJVCBTSVg7TmQ7MDtMOzs2OzY7NjtOOzs7OzsKKzBCRUQ7VEFNSUwgRElHSVQgU0VWRU47TmQ7MDtMOzs3Ozc7NztOOzs7OzsKKzBCRUU7VEFNSUwgRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzBCRUY7VEFNSUwgRElHSVQgTklORTtOZDswO0w7Ozk7OTs5O047Ozs7OworMEJGMDtUQU1JTCBOVU1CRVIgVEVOO05vOzA7TDs7OzsxMDtOOzs7OzsKKzBCRjE7VEFNSUwgTlVNQkVSIE9ORSBIVU5EUkVEO05vOzA7TDs7OzsxMDA7Tjs7Ozs7CiswQkYyO1RBTUlMIE5VTUJFUiBPTkUgVEhPVVNBTkQ7Tm87MDtMOzs7OzEwMDA7Tjs7Ozs7CiswQzAxO1RFTFVHVSBTSUdOIENBTkRSQUJJTkRVO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQzAyO1RFTFVHVSBTSUdOIEFOVVNWQVJBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQzAzO1RFTFVHVSBTSUdOIFZJU0FSR0E7TWM7MDtMOzs7OztOOzs7OzsKKzBDMDU7VEVMVUdVIExFVFRFUiBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzA2O1RFTFVHVSBMRVRURVIgQUE7TG87MDtMOzs7OztOOzs7OzsKKzBDMDc7VEVMVUdVIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzA4O1RFTFVHVSBMRVRURVIgSUk7TG87MDtMOzs7OztOOzs7OzsKKzBDMDk7VEVMVUdVIExFVFRFUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzBBO1RFTFVHVSBMRVRURVIgVVU7TG87MDtMOzs7OztOOzs7OzsKKzBDMEI7VEVMVUdVIExFVFRFUiBWT0NBTElDIFI7TG87MDtMOzs7OztOOzs7OzsKKzBDMEM7VEVMVUdVIExFVFRFUiBWT0NBTElDIEw7TG87MDtMOzs7OztOOzs7OzsKKzBDMEU7VEVMVUdVIExFVFRFUiBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzBGO1RFTFVHVSBMRVRURVIgRUU7TG87MDtMOzs7OztOOzs7OzsKKzBDMTA7VEVMVUdVIExFVFRFUiBBSTtMbzswO0w7Ozs7O047Ozs7OworMEMxMjtURUxVR1UgTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzBDMTM7VEVMVUdVIExFVFRFUiBPTztMbzswO0w7Ozs7O047Ozs7OworMEMxNDtURUxVR1UgTEVUVEVSIEFVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzE1O1RFTFVHVSBMRVRURVIgS0E7TG87MDtMOzs7OztOOzs7OzsKKzBDMTY7VEVMVUdVIExFVFRFUiBLSEE7TG87MDtMOzs7OztOOzs7OzsKKzBDMTc7VEVMVUdVIExFVFRFUiBHQTtMbzswO0w7Ozs7O047Ozs7OworMEMxODtURUxVR1UgTEVUVEVSIEdIQTtMbzswO0w7Ozs7O047Ozs7OworMEMxOTtURUxVR1UgTEVUVEVSIE5HQTtMbzswO0w7Ozs7O047Ozs7OworMEMxQTtURUxVR1UgTEVUVEVSIENBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzFCO1RFTFVHVSBMRVRURVIgQ0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzFDO1RFTFVHVSBMRVRURVIgSkE7TG87MDtMOzs7OztOOzs7OzsKKzBDMUQ7VEVMVUdVIExFVFRFUiBKSEE7TG87MDtMOzs7OztOOzs7OzsKKzBDMUU7VEVMVUdVIExFVFRFUiBOWUE7TG87MDtMOzs7OztOOzs7OzsKKzBDMUY7VEVMVUdVIExFVFRFUiBUVEE7TG87MDtMOzs7OztOOzs7OzsKKzBDMjA7VEVMVUdVIExFVFRFUiBUVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzIxO1RFTFVHVSBMRVRURVIgRERBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzIyO1RFTFVHVSBMRVRURVIgRERIQTtMbzswO0w7Ozs7O047Ozs7OworMEMyMztURUxVR1UgTEVUVEVSIE5OQTtMbzswO0w7Ozs7O047Ozs7OworMEMyNDtURUxVR1UgTEVUVEVSIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzI1O1RFTFVHVSBMRVRURVIgVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzI2O1RFTFVHVSBMRVRURVIgREE7TG87MDtMOzs7OztOOzs7OzsKKzBDMjc7VEVMVUdVIExFVFRFUiBESEE7TG87MDtMOzs7OztOOzs7OzsKKzBDMjg7VEVMVUdVIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMEMyQTtURUxVR1UgTEVUVEVSIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzJCO1RFTFVHVSBMRVRURVIgUEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzJDO1RFTFVHVSBMRVRURVIgQkE7TG87MDtMOzs7OztOOzs7OzsKKzBDMkQ7VEVMVUdVIExFVFRFUiBCSEE7TG87MDtMOzs7OztOOzs7OzsKKzBDMkU7VEVMVUdVIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMEMyRjtURUxVR1UgTEVUVEVSIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzMwO1RFTFVHVSBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzBDMzE7VEVMVUdVIExFVFRFUiBSUkE7TG87MDtMOzs7OztOOzs7OzsKKzBDMzI7VEVMVUdVIExFVFRFUiBMQTtMbzswO0w7Ozs7O047Ozs7OworMEMzMztURUxVR1UgTEVUVEVSIExMQTtMbzswO0w7Ozs7O047Ozs7OworMEMzNTtURUxVR1UgTEVUVEVSIFZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzM2O1RFTFVHVSBMRVRURVIgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzM3O1RFTFVHVSBMRVRURVIgU1NBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzM4O1RFTFVHVSBMRVRURVIgU0E7TG87MDtMOzs7OztOOzs7OzsKKzBDMzk7VEVMVUdVIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMEMzRTtURUxVR1UgVk9XRUwgU0lHTiBBQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQzNGO1RFTFVHVSBWT1dFTCBTSUdOIEk7TW47MDtOU007Ozs7O047Ozs7OworMEM0MDtURUxVR1UgVk9XRUwgU0lHTiBJSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQzQxO1RFTFVHVSBWT1dFTCBTSUdOIFU7TWM7MDtMOzs7OztOOzs7OzsKKzBDNDI7VEVMVUdVIFZPV0VMIFNJR04gVVU7TWM7MDtMOzs7OztOOzs7OzsKKzBDNDM7VEVMVUdVIFZPV0VMIFNJR04gVk9DQUxJQyBSO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQzQ0O1RFTFVHVSBWT1dFTCBTSUdOIFZPQ0FMSUMgUlI7TWM7MDtMOzs7OztOOzs7OzsKKzBDNDY7VEVMVUdVIFZPV0VMIFNJR04gRTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQzQ3O1RFTFVHVSBWT1dFTCBTSUdOIEVFO01uOzA7TlNNOzs7OztOOzs7OzsKKzBDNDg7VEVMVUdVIFZPV0VMIFNJR04gQUk7TW47MDtOU007MEM0NiAwQzU2Ozs7O047Ozs7OworMEM0QTtURUxVR1UgVk9XRUwgU0lHTiBPO01uOzA7TlNNOzs7OztOOzs7OzsKKzBDNEI7VEVMVUdVIFZPV0VMIFNJR04gT087TW47MDtOU007Ozs7O047Ozs7OworMEM0QztURUxVR1UgVk9XRUwgU0lHTiBBVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswQzREO1RFTFVHVSBTSUdOIFZJUkFNQTtNbjs5O05TTTs7Ozs7Tjs7Ozs7CiswQzU1O1RFTFVHVSBMRU5HVEggTUFSSztNbjs4NDtOU007Ozs7O047Ozs7OworMEM1NjtURUxVR1UgQUkgTEVOR1RIIE1BUks7TW47OTE7TlNNOzs7OztOOzs7OzsKKzBDNjA7VEVMVUdVIExFVFRFUiBWT0NBTElDIFJSO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzYxO1RFTFVHVSBMRVRURVIgVk9DQUxJQyBMTDtMbzswO0w7Ozs7O047Ozs7OworMEM2NjtURUxVR1UgRElHSVQgWkVSTztOZDswO0w7OzA7MDswO047Ozs7OworMEM2NztURUxVR1UgRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CiswQzY4O1RFTFVHVSBESUdJVCBUV087TmQ7MDtMOzsyOzI7MjtOOzs7OzsKKzBDNjk7VEVMVUdVIERJR0lUIFRIUkVFO05kOzA7TDs7MzszOzM7Tjs7Ozs7CiswQzZBO1RFTFVHVSBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CiswQzZCO1RFTFVHVSBESUdJVCBGSVZFO05kOzA7TDs7NTs1OzU7Tjs7Ozs7CiswQzZDO1RFTFVHVSBESUdJVCBTSVg7TmQ7MDtMOzs2OzY7NjtOOzs7OzsKKzBDNkQ7VEVMVUdVIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CiswQzZFO1RFTFVHVSBESUdJVCBFSUdIVDtOZDswO0w7Ozg7ODs4O047Ozs7OworMEM2RjtURUxVR1UgRElHSVQgTklORTtOZDswO0w7Ozk7OTs5O047Ozs7OworMEM4MjtLQU5OQURBIFNJR04gQU5VU1ZBUkE7TWM7MDtMOzs7OztOOzs7OzsKKzBDODM7S0FOTkFEQSBTSUdOIFZJU0FSR0E7TWM7MDtMOzs7OztOOzs7OzsKKzBDODU7S0FOTkFEQSBMRVRURVIgQTtMbzswO0w7Ozs7O047Ozs7OworMEM4NjtLQU5OQURBIExFVFRFUiBBQTtMbzswO0w7Ozs7O047Ozs7OworMEM4NztLQU5OQURBIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzg4O0tBTk5BREEgTEVUVEVSIElJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzg5O0tBTk5BREEgTEVUVEVSIFU7TG87MDtMOzs7OztOOzs7OzsKKzBDOEE7S0FOTkFEQSBMRVRURVIgVVU7TG87MDtMOzs7OztOOzs7OzsKKzBDOEI7S0FOTkFEQSBMRVRURVIgVk9DQUxJQyBSO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzhDO0tBTk5BREEgTEVUVEVSIFZPQ0FMSUMgTDtMbzswO0w7Ozs7O047Ozs7OworMEM4RTtLQU5OQURBIExFVFRFUiBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzhGO0tBTk5BREEgTEVUVEVSIEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzkwO0tBTk5BREEgTEVUVEVSIEFJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzkyO0tBTk5BREEgTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzBDOTM7S0FOTkFEQSBMRVRURVIgT087TG87MDtMOzs7OztOOzs7OzsKKzBDOTQ7S0FOTkFEQSBMRVRURVIgQVU7TG87MDtMOzs7OztOOzs7OzsKKzBDOTU7S0FOTkFEQSBMRVRURVIgS0E7TG87MDtMOzs7OztOOzs7OzsKKzBDOTY7S0FOTkFEQSBMRVRURVIgS0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzk3O0tBTk5BREEgTEVUVEVSIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzk4O0tBTk5BREEgTEVUVEVSIEdIQTtMbzswO0w7Ozs7O047Ozs7OworMEM5OTtLQU5OQURBIExFVFRFUiBOR0E7TG87MDtMOzs7OztOOzs7OzsKKzBDOUE7S0FOTkFEQSBMRVRURVIgQ0E7TG87MDtMOzs7OztOOzs7OzsKKzBDOUI7S0FOTkFEQSBMRVRURVIgQ0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzlDO0tBTk5BREEgTEVUVEVSIEpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQzlEO0tBTk5BREEgTEVUVEVSIEpIQTtMbzswO0w7Ozs7O047Ozs7OworMEM5RTtLQU5OQURBIExFVFRFUiBOWUE7TG87MDtMOzs7OztOOzs7OzsKKzBDOUY7S0FOTkFEQSBMRVRURVIgVFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0EwO0tBTk5BREEgTEVUVEVSIFRUSEE7TG87MDtMOzs7OztOOzs7OzsKKzBDQTE7S0FOTkFEQSBMRVRURVIgRERBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0EyO0tBTk5BREEgTEVUVEVSIERESEE7TG87MDtMOzs7OztOOzs7OzsKKzBDQTM7S0FOTkFEQSBMRVRURVIgTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0E0O0tBTk5BREEgTEVUVEVSIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0E1O0tBTk5BREEgTEVUVEVSIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMENBNjtLQU5OQURBIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMENBNztLQU5OQURBIExFVFRFUiBESEE7TG87MDtMOzs7OztOOzs7OzsKKzBDQTg7S0FOTkFEQSBMRVRURVIgTkE7TG87MDtMOzs7OztOOzs7OzsKKzBDQUE7S0FOTkFEQSBMRVRURVIgUEE7TG87MDtMOzs7OztOOzs7OzsKKzBDQUI7S0FOTkFEQSBMRVRURVIgUEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0FDO0tBTk5BREEgTEVUVEVSIEJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0FEO0tBTk5BREEgTEVUVEVSIEJIQTtMbzswO0w7Ozs7O047Ozs7OworMENBRTtLQU5OQURBIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMENBRjtLQU5OQURBIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMENCMDtLQU5OQURBIExFVFRFUiBSQTtMbzswO0w7Ozs7O047Ozs7OworMENCMTtLQU5OQURBIExFVFRFUiBSUkE7TG87MDtMOzs7OztOOzs7OzsKKzBDQjI7S0FOTkFEQSBMRVRURVIgTEE7TG87MDtMOzs7OztOOzs7OzsKKzBDQjM7S0FOTkFEQSBMRVRURVIgTExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0I1O0tBTk5BREEgTEVUVEVSIFZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0I2O0tBTk5BREEgTEVUVEVSIFNIQTtMbzswO0w7Ozs7O047Ozs7OworMENCNztLQU5OQURBIExFVFRFUiBTU0E7TG87MDtMOzs7OztOOzs7OzsKKzBDQjg7S0FOTkFEQSBMRVRURVIgU0E7TG87MDtMOzs7OztOOzs7OzsKKzBDQjk7S0FOTkFEQSBMRVRURVIgSEE7TG87MDtMOzs7OztOOzs7OzsKKzBDQkU7S0FOTkFEQSBWT1dFTCBTSUdOIEFBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQ0JGO0tBTk5BREEgVk9XRUwgU0lHTiBJO01uOzA7TlNNOzs7OztOOzs7OzsKKzBDQzA7S0FOTkFEQSBWT1dFTCBTSUdOIElJO01jOzA7TDswQ0JGIDBDRDU7Ozs7Tjs7Ozs7CiswQ0MxO0tBTk5BREEgVk9XRUwgU0lHTiBVO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQ0MyO0tBTk5BREEgVk9XRUwgU0lHTiBVVTtNYzswO0w7Ozs7O047Ozs7OworMENDMztLQU5OQURBIFZPV0VMIFNJR04gVk9DQUxJQyBSO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQ0M0O0tBTk5BREEgVk9XRUwgU0lHTiBWT0NBTElDIFJSO01jOzA7TDs7Ozs7Tjs7Ozs7CiswQ0M2O0tBTk5BREEgVk9XRUwgU0lHTiBFO01uOzA7TlNNOzs7OztOOzs7OzsKKzBDQzc7S0FOTkFEQSBWT1dFTCBTSUdOIEVFO01jOzA7TDswQ0M2IDBDRDU7Ozs7Tjs7Ozs7CiswQ0M4O0tBTk5BREEgVk9XRUwgU0lHTiBBSTtNYzswO0w7MENDNiAwQ0Q2Ozs7O047Ozs7OworMENDQTtLQU5OQURBIFZPV0VMIFNJR04gTztNYzswO0w7MENDNiAwQ0MyOzs7O047Ozs7OworMENDQjtLQU5OQURBIFZPV0VMIFNJR04gT087TWM7MDtMOzBDQ0EgMENENTs7OztOOzs7OzsKKzBDQ0M7S0FOTkFEQSBWT1dFTCBTSUdOIEFVO01uOzA7TlNNOzs7OztOOzs7OzsKKzBDQ0Q7S0FOTkFEQSBTSUdOIFZJUkFNQTtNbjs5O05TTTs7Ozs7Tjs7Ozs7CiswQ0Q1O0tBTk5BREEgTEVOR1RIIE1BUks7TWM7MDtMOzs7OztOOzs7OzsKKzBDRDY7S0FOTkFEQSBBSSBMRU5HVEggTUFSSztNYzswO0w7Ozs7O047Ozs7OworMENERTtLQU5OQURBIExFVFRFUiBGQTtMbzswO0w7Ozs7O047Ozs7OworMENFMDtLQU5OQURBIExFVFRFUiBWT0NBTElDIFJSO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswQ0UxO0tBTk5BREEgTEVUVEVSIFZPQ0FMSUMgTEw7TG87MDtMOzs7OztOOzs7OzsKKzBDRTY7S0FOTkFEQSBESUdJVCBaRVJPO05kOzA7TDs7MDswOzA7Tjs7Ozs7CiswQ0U3O0tBTk5BREEgRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CiswQ0U4O0tBTk5BREEgRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CiswQ0U5O0tBTk5BREEgRElHSVQgVEhSRUU7TmQ7MDtMOzszOzM7MztOOzs7OzsKKzBDRUE7S0FOTkFEQSBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CiswQ0VCO0tBTk5BREEgRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMENFQztLQU5OQURBIERJR0lUIFNJWDtOZDswO0w7OzY7Njs2O047Ozs7OworMENFRDtLQU5OQURBIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CiswQ0VFO0tBTk5BREEgRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzBDRUY7S0FOTkFEQSBESUdJVCBOSU5FO05kOzA7TDs7OTs5Ozk7Tjs7Ozs7CiswRDAyO01BTEFZQUxBTSBTSUdOIEFOVVNWQVJBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswRDAzO01BTEFZQUxBTSBTSUdOIFZJU0FSR0E7TWM7MDtMOzs7OztOOzs7OzsKKzBEMDU7TUFMQVlBTEFNIExFVFRFUiBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDA2O01BTEFZQUxBTSBMRVRURVIgQUE7TG87MDtMOzs7OztOOzs7OzsKKzBEMDc7TUFMQVlBTEFNIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDA4O01BTEFZQUxBTSBMRVRURVIgSUk7TG87MDtMOzs7OztOOzs7OzsKKzBEMDk7TUFMQVlBTEFNIExFVFRFUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDBBO01BTEFZQUxBTSBMRVRURVIgVVU7TG87MDtMOzs7OztOOzs7OzsKKzBEMEI7TUFMQVlBTEFNIExFVFRFUiBWT0NBTElDIFI7TG87MDtMOzs7OztOOzs7OzsKKzBEMEM7TUFMQVlBTEFNIExFVFRFUiBWT0NBTElDIEw7TG87MDtMOzs7OztOOzs7OzsKKzBEMEU7TUFMQVlBTEFNIExFVFRFUiBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDBGO01BTEFZQUxBTSBMRVRURVIgRUU7TG87MDtMOzs7OztOOzs7OzsKKzBEMTA7TUFMQVlBTEFNIExFVFRFUiBBSTtMbzswO0w7Ozs7O047Ozs7OworMEQxMjtNQUxBWUFMQU0gTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzBEMTM7TUFMQVlBTEFNIExFVFRFUiBPTztMbzswO0w7Ozs7O047Ozs7OworMEQxNDtNQUxBWUFMQU0gTEVUVEVSIEFVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDE1O01BTEFZQUxBTSBMRVRURVIgS0E7TG87MDtMOzs7OztOOzs7OzsKKzBEMTY7TUFMQVlBTEFNIExFVFRFUiBLSEE7TG87MDtMOzs7OztOOzs7OzsKKzBEMTc7TUFMQVlBTEFNIExFVFRFUiBHQTtMbzswO0w7Ozs7O047Ozs7OworMEQxODtNQUxBWUFMQU0gTEVUVEVSIEdIQTtMbzswO0w7Ozs7O047Ozs7OworMEQxOTtNQUxBWUFMQU0gTEVUVEVSIE5HQTtMbzswO0w7Ozs7O047Ozs7OworMEQxQTtNQUxBWUFMQU0gTEVUVEVSIENBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDFCO01BTEFZQUxBTSBMRVRURVIgQ0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDFDO01BTEFZQUxBTSBMRVRURVIgSkE7TG87MDtMOzs7OztOOzs7OzsKKzBEMUQ7TUFMQVlBTEFNIExFVFRFUiBKSEE7TG87MDtMOzs7OztOOzs7OzsKKzBEMUU7TUFMQVlBTEFNIExFVFRFUiBOWUE7TG87MDtMOzs7OztOOzs7OzsKKzBEMUY7TUFMQVlBTEFNIExFVFRFUiBUVEE7TG87MDtMOzs7OztOOzs7OzsKKzBEMjA7TUFMQVlBTEFNIExFVFRFUiBUVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDIxO01BTEFZQUxBTSBMRVRURVIgRERBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDIyO01BTEFZQUxBTSBMRVRURVIgRERIQTtMbzswO0w7Ozs7O047Ozs7OworMEQyMztNQUxBWUFMQU0gTEVUVEVSIE5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQyNDtNQUxBWUFMQU0gTEVUVEVSIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDI1O01BTEFZQUxBTSBMRVRURVIgVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDI2O01BTEFZQUxBTSBMRVRURVIgREE7TG87MDtMOzs7OztOOzs7OzsKKzBEMjc7TUFMQVlBTEFNIExFVFRFUiBESEE7TG87MDtMOzs7OztOOzs7OzsKKzBEMjg7TUFMQVlBTEFNIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMEQyQTtNQUxBWUFMQU0gTEVUVEVSIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDJCO01BTEFZQUxBTSBMRVRURVIgUEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDJDO01BTEFZQUxBTSBMRVRURVIgQkE7TG87MDtMOzs7OztOOzs7OzsKKzBEMkQ7TUFMQVlBTEFNIExFVFRFUiBCSEE7TG87MDtMOzs7OztOOzs7OzsKKzBEMkU7TUFMQVlBTEFNIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMEQyRjtNQUxBWUFMQU0gTEVUVEVSIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDMwO01BTEFZQUxBTSBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzBEMzE7TUFMQVlBTEFNIExFVFRFUiBSUkE7TG87MDtMOzs7OztOOzs7OzsKKzBEMzI7TUFMQVlBTEFNIExFVFRFUiBMQTtMbzswO0w7Ozs7O047Ozs7OworMEQzMztNQUxBWUFMQU0gTEVUVEVSIExMQTtMbzswO0w7Ozs7O047Ozs7OworMEQzNDtNQUxBWUFMQU0gTEVUVEVSIExMTEE7TG87MDtMOzs7OztOOzs7OzsKKzBEMzU7TUFMQVlBTEFNIExFVFRFUiBWQTtMbzswO0w7Ozs7O047Ozs7OworMEQzNjtNQUxBWUFMQU0gTEVUVEVSIFNIQTtMbzswO0w7Ozs7O047Ozs7OworMEQzNztNQUxBWUFMQU0gTEVUVEVSIFNTQTtMbzswO0w7Ozs7O047Ozs7OworMEQzODtNQUxBWUFMQU0gTEVUVEVSIFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDM5O01BTEFZQUxBTSBMRVRURVIgSEE7TG87MDtMOzs7OztOOzs7OzsKKzBEM0U7TUFMQVlBTEFNIFZPV0VMIFNJR04gQUE7TWM7MDtMOzs7OztOOzs7OzsKKzBEM0Y7TUFMQVlBTEFNIFZPV0VMIFNJR04gSTtNYzswO0w7Ozs7O047Ozs7OworMEQ0MDtNQUxBWUFMQU0gVk9XRUwgU0lHTiBJSTtNYzswO0w7Ozs7O047Ozs7OworMEQ0MTtNQUxBWUFMQU0gVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzBENDI7TUFMQVlBTEFNIFZPV0VMIFNJR04gVVU7TW47MDtOU007Ozs7O047Ozs7OworMEQ0MztNQUxBWUFMQU0gVk9XRUwgU0lHTiBWT0NBTElDIFI7TW47MDtOU007Ozs7O047Ozs7OworMEQ0NjtNQUxBWUFMQU0gVk9XRUwgU0lHTiBFO01jOzA7TDs7Ozs7Tjs7Ozs7CiswRDQ3O01BTEFZQUxBTSBWT1dFTCBTSUdOIEVFO01jOzA7TDs7Ozs7Tjs7Ozs7CiswRDQ4O01BTEFZQUxBTSBWT1dFTCBTSUdOIEFJO01jOzA7TDs7Ozs7Tjs7Ozs7CiswRDRBO01BTEFZQUxBTSBWT1dFTCBTSUdOIE87TWM7MDtMOzBENDYgMEQzRTs7OztOOzs7OzsKKzBENEI7TUFMQVlBTEFNIFZPV0VMIFNJR04gT087TWM7MDtMOzBENDcgMEQzRTs7OztOOzs7OzsKKzBENEM7TUFMQVlBTEFNIFZPV0VMIFNJR04gQVU7TWM7MDtMOzBENDYgMEQ1Nzs7OztOOzs7OzsKKzBENEQ7TUFMQVlBTEFNIFNJR04gVklSQU1BO01uOzk7TlNNOzs7OztOOzs7OzsKKzBENTc7TUFMQVlBTEFNIEFVIExFTkdUSCBNQVJLO01jOzA7TDs7Ozs7Tjs7Ozs7CiswRDYwO01BTEFZQUxBTSBMRVRURVIgVk9DQUxJQyBSUjtMbzswO0w7Ozs7O047Ozs7OworMEQ2MTtNQUxBWUFMQU0gTEVUVEVSIFZPQ0FMSUMgTEw7TG87MDtMOzs7OztOOzs7OzsKKzBENjY7TUFMQVlBTEFNIERJR0lUIFpFUk87TmQ7MDtMOzswOzA7MDtOOzs7OzsKKzBENjc7TUFMQVlBTEFNIERJR0lUIE9ORTtOZDswO0w7OzE7MTsxO047Ozs7OworMEQ2ODtNQUxBWUFMQU0gRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CiswRDY5O01BTEFZQUxBTSBESUdJVCBUSFJFRTtOZDswO0w7OzM7MzszO047Ozs7OworMEQ2QTtNQUxBWUFMQU0gRElHSVQgRk9VUjtOZDswO0w7OzQ7NDs0O047Ozs7OworMEQ2QjtNQUxBWUFMQU0gRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMEQ2QztNQUxBWUFMQU0gRElHSVQgU0lYO05kOzA7TDs7Njs2OzY7Tjs7Ozs7CiswRDZEO01BTEFZQUxBTSBESUdJVCBTRVZFTjtOZDswO0w7Ozc7Nzs3O047Ozs7OworMEQ2RTtNQUxBWUFMQU0gRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzBENkY7TUFMQVlBTEFNIERJR0lUIE5JTkU7TmQ7MDtMOzs5Ozk7OTtOOzs7OzsKKzBEODI7U0lOSEFMQSBTSUdOIEFOVVNWQVJBWUE7TWM7MDtMOzs7OztOOzs7OzsKKzBEODM7U0lOSEFMQSBTSUdOIFZJU0FSR0FZQTtNYzswO0w7Ozs7O047Ozs7OworMEQ4NTtTSU5IQUxBIExFVFRFUiBBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEODY7U0lOSEFMQSBMRVRURVIgQUFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ4NztTSU5IQUxBIExFVFRFUiBBRVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDg4O1NJTkhBTEEgTEVUVEVSIEFFRVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDg5O1NJTkhBTEEgTEVUVEVSIElZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ4QTtTSU5IQUxBIExFVFRFUiBJSVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDhCO1NJTkhBTEEgTEVUVEVSIFVZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ4QztTSU5IQUxBIExFVFRFUiBVVVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDhEO1NJTkhBTEEgTEVUVEVSIElSVVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDhFO1NJTkhBTEEgTEVUVEVSIElSVVVZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ4RjtTSU5IQUxBIExFVFRFUiBJTFVZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ5MDtTSU5IQUxBIExFVFRFUiBJTFVVWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEOTE7U0lOSEFMQSBMRVRURVIgRVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDkyO1NJTkhBTEEgTEVUVEVSIEVFWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEOTM7U0lOSEFMQSBMRVRURVIgQUlZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ5NDtTSU5IQUxBIExFVFRFUiBPWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEOTU7U0lOSEFMQSBMRVRURVIgT09ZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ5NjtTSU5IQUxBIExFVFRFUiBBVVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDlBO1NJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgS0FZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ5QjtTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBLQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDlDO1NJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgR0FZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMEQ5RDtTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBHQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRDlFO1NJTkhBTEEgTEVUVEVSIEtBTlRBSkEgTkFBU0lLWUFZQTtMbzswO0w7Ozs7O047Ozs7OworMEQ5RjtTSU5IQUxBIExFVFRFUiBTQU5ZQUtBIEdBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQTA7U0lOSEFMQSBMRVRURVIgQUxQQVBSQUFOQSBDQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREExO1NJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIENBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQTI7U0lOSEFMQSBMRVRURVIgQUxQQVBSQUFOQSBKQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREEzO1NJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIEpBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQTQ7U0lOSEFMQSBMRVRURVIgVEFBTFVKQSBOQUFTSUtZQVlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREE1O1NJTkhBTEEgTEVUVEVSIFRBQUxVSkEgU0FOWU9PR0EgTkFBS1NJS1lBWUE7TG87MDtMOzs7OztOOzs7OzsKKzBEQTY7U0lOSEFMQSBMRVRURVIgU0FOWUFLQSBKQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREE3O1NJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgVFRBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQTg7U0lOSEFMQSBMRVRURVIgTUFIQUFQUkFBTkEgVFRBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQTk7U0lOSEFMQSBMRVRURVIgQUxQQVBSQUFOQSBEREFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERBQTtTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBEREFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERBQjtTSU5IQUxBIExFVFRFUiBNVVVSREhBSkEgTkFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERBQztTSU5IQUxBIExFVFRFUiBTQU5ZQUtBIEREQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREFEO1NJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgVEFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERBRTtTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBUQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREFGO1NJTkhBTEEgTEVUVEVSIEFMUEFQUkFBTkEgREFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERCMDtTSU5IQUxBIExFVFRFUiBNQUhBQVBSQUFOQSBEQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREIxO1NJTkhBTEEgTEVUVEVSIERBTlRBSkEgTkFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERCMztTSU5IQUxBIExFVFRFUiBTQU5ZQUtBIERBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQjQ7U0lOSEFMQSBMRVRURVIgQUxQQVBSQUFOQSBQQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREI1O1NJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIFBBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQjY7U0lOSEFMQSBMRVRURVIgQUxQQVBSQUFOQSBCQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREI3O1NJTkhBTEEgTEVUVEVSIE1BSEFBUFJBQU5BIEJBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQjg7U0lOSEFMQSBMRVRURVIgTUFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERCOTtTSU5IQUxBIExFVFRFUiBBTUJBIEJBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQkE7U0lOSEFMQSBMRVRURVIgWUFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERCQjtTSU5IQUxBIExFVFRFUiBSQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREJEO1NJTkhBTEEgTEVUVEVSIERBTlRBSkEgTEFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERDMDtTSU5IQUxBIExFVFRFUiBWQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswREMxO1NJTkhBTEEgTEVUVEVSIFRBQUxVSkEgU0FZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERDMjtTSU5IQUxBIExFVFRFUiBNVVVSREhBSkEgU0FZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERDMztTSU5IQUxBIExFVFRFUiBEQU5UQUpBIFNBWUFOTkE7TG87MDtMOzs7OztOOzs7OzsKKzBEQzQ7U0lOSEFMQSBMRVRURVIgSEFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERDNTtTSU5IQUxBIExFVFRFUiBNVVVSREhBSkEgTEFZQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMERDNjtTSU5IQUxBIExFVFRFUiBGQVlBTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRENBO1NJTkhBTEEgU0lHTiBBTC1MQUtVTkE7TW47OTtOU007Ozs7O047Ozs7OworMERDRjtTSU5IQUxBIFZPV0VMIFNJR04gQUVMQS1QSUxMQTtNYzswO0w7Ozs7O047Ozs7OworMEREMDtTSU5IQUxBIFZPV0VMIFNJR04gS0VUVEkgQUVEQS1QSUxMQTtNYzswO0w7Ozs7O047Ozs7OworMEREMTtTSU5IQUxBIFZPV0VMIFNJR04gRElHQSBBRURBLVBJTExBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswREQyO1NJTkhBTEEgVk9XRUwgU0lHTiBLRVRUSSBJUy1QSUxMQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswREQzO1NJTkhBTEEgVk9XRUwgU0lHTiBESUdBIElTLVBJTExBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBERDQ7U0lOSEFMQSBWT1dFTCBTSUdOIEtFVFRJIFBBQS1QSUxMQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswREQ2O1NJTkhBTEEgVk9XRUwgU0lHTiBESUdBIFBBQS1QSUxMQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswREQ4O1NJTkhBTEEgVk9XRUwgU0lHTiBHQUVUVEEtUElMTEE7TWM7MDtMOzs7OztOOzs7OzsKKzBERDk7U0lOSEFMQSBWT1dFTCBTSUdOIEtPTUJVVkE7TWM7MDtMOzs7OztOOzs7OzsKKzBEREE7U0lOSEFMQSBWT1dFTCBTSUdOIERJR0EgS09NQlVWQTtNYzswO0w7MEREOSAwRENBOzs7O047Ozs7OworMEREQjtTSU5IQUxBIFZPV0VMIFNJR04gS09NQlUgREVLQTtNYzswO0w7Ozs7O047Ozs7OworMEREQztTSU5IQUxBIFZPV0VMIFNJR04gS09NQlVWQSBIQUEgQUVMQS1QSUxMQTtNYzswO0w7MEREOSAwRENGOzs7O047Ozs7OworMERERDtTSU5IQUxBIFZPV0VMIFNJR04gS09NQlVWQSBIQUEgRElHQSBBRUxBLVBJTExBO01jOzA7TDswRERDIDBEQ0E7Ozs7Tjs7Ozs7CiswRERFO1NJTkhBTEEgVk9XRUwgU0lHTiBLT01CVVZBIEhBQSBHQVlBTlVLSVRUQTtNYzswO0w7MEREOSAwRERGOzs7O047Ozs7OworMERERjtTSU5IQUxBIFZPV0VMIFNJR04gR0FZQU5VS0lUVEE7TWM7MDtMOzs7OztOOzs7OzsKKzBERjI7U0lOSEFMQSBWT1dFTCBTSUdOIERJR0EgR0FFVFRBLVBJTExBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswREYzO1NJTkhBTEEgVk9XRUwgU0lHTiBESUdBIEdBWUFOVUtJVFRBO01jOzA7TDs7Ozs7Tjs7Ozs7CiswREY0O1NJTkhBTEEgUFVOQ1RVQVRJT04gS1VORERBTElZQTtQbzswO0w7Ozs7O047Ozs7OworMEUwMTtUSEFJIENIQVJBQ1RFUiBLTyBLQUk7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIEtPIEtBSTs7OzsKKzBFMDI7VEhBSSBDSEFSQUNURVIgS0hPIEtIQUk7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIEtITyBLSEFJOzs7OworMEUwMztUSEFJIENIQVJBQ1RFUiBLSE8gS0hVQVQ7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIEtITyBLSFVBVDs7OzsKKzBFMDQ7VEhBSSBDSEFSQUNURVIgS0hPIEtIV0FJO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBLSE8gS0hXQUk7Ozs7CiswRTA1O1RIQUkgQ0hBUkFDVEVSIEtITyBLSE9OO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBLSE8gS0hPTjs7OzsKKzBFMDY7VEhBSSBDSEFSQUNURVIgS0hPIFJBS0hBTkc7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIEtITyBSQUtIQU5HOzs7OworMEUwNztUSEFJIENIQVJBQ1RFUiBOR08gTkdVO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBOR08gTkdVOzs7OworMEUwODtUSEFJIENIQVJBQ1RFUiBDSE8gQ0hBTjtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgQ0hPIENIQU47Ozs7CiswRTA5O1RIQUkgQ0hBUkFDVEVSIENITyBDSElORztMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgQ0hPIENISU5HOzs7OworMEUwQTtUSEFJIENIQVJBQ1RFUiBDSE8gQ0hBTkc7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIENITyBDSEFORzs7OzsKKzBFMEI7VEhBSSBDSEFSQUNURVIgU08gU087TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIFNPIFNPOzs7OworMEUwQztUSEFJIENIQVJBQ1RFUiBDSE8gQ0hPRTtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgQ0hPIENIT0U7Ozs7CiswRTBEO1RIQUkgQ0hBUkFDVEVSIFlPIFlJTkc7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIFlPIFlJTkc7Ozs7CiswRTBFO1RIQUkgQ0hBUkFDVEVSIERPIENIQURBO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBETyBDSEFEQTs7OzsKKzBFMEY7VEhBSSBDSEFSQUNURVIgVE8gUEFUQUs7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIFRPIFBBVEFLOzs7OworMEUxMDtUSEFJIENIQVJBQ1RFUiBUSE8gVEhBTjtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgVEhPIFRIQU47Ozs7CiswRTExO1RIQUkgQ0hBUkFDVEVSIFRITyBOQU5HTU9OVEhPO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBUSE8gTkFOR01PTlRITzs7OzsKKzBFMTI7VEhBSSBDSEFSQUNURVIgVEhPIFBIVVRIQU87TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIFRITyBQSFVUSEFPOzs7OworMEUxMztUSEFJIENIQVJBQ1RFUiBOTyBORU47TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIE5PIE5FTjs7OzsKKzBFMTQ7VEhBSSBDSEFSQUNURVIgRE8gREVLO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBETyBERUs7Ozs7CiswRTE1O1RIQUkgQ0hBUkFDVEVSIFRPIFRBTztMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgVE8gVEFPOzs7OworMEUxNjtUSEFJIENIQVJBQ1RFUiBUSE8gVEhVTkc7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIFRITyBUSFVORzs7OzsKKzBFMTc7VEhBSSBDSEFSQUNURVIgVEhPIFRIQUhBTjtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgVEhPIFRIQUhBTjs7OzsKKzBFMTg7VEhBSSBDSEFSQUNURVIgVEhPIFRIT05HO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBUSE8gVEhPTkc7Ozs7CiswRTE5O1RIQUkgQ0hBUkFDVEVSIE5PIE5VO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBOTyBOVTs7OzsKKzBFMUE7VEhBSSBDSEFSQUNURVIgQk8gQkFJTUFJO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBCTyBCQUlNQUk7Ozs7CiswRTFCO1RIQUkgQ0hBUkFDVEVSIFBPIFBMQTtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgUE8gUExBOzs7OworMEUxQztUSEFJIENIQVJBQ1RFUiBQSE8gUEhVTkc7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIFBITyBQSFVORzs7OzsKKzBFMUQ7VEhBSSBDSEFSQUNURVIgRk8gRkE7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIEZPIEZBOzs7OworMEUxRTtUSEFJIENIQVJBQ1RFUiBQSE8gUEhBTjtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgUEhPIFBIQU47Ozs7CiswRTFGO1RIQUkgQ0hBUkFDVEVSIEZPIEZBTjtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgRk8gRkFOOzs7OworMEUyMDtUSEFJIENIQVJBQ1RFUiBQSE8gU0FNUEhBTztMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgUEhPIFNBTVBIQU87Ozs7CiswRTIxO1RIQUkgQ0hBUkFDVEVSIE1PIE1BO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBNTyBNQTs7OzsKKzBFMjI7VEhBSSBDSEFSQUNURVIgWU8gWUFLO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBZTyBZQUs7Ozs7CiswRTIzO1RIQUkgQ0hBUkFDVEVSIFJPIFJVQTtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgUk8gUlVBOzs7OworMEUyNDtUSEFJIENIQVJBQ1RFUiBSVTtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgUlU7Ozs7CiswRTI1O1RIQUkgQ0hBUkFDVEVSIExPIExJTkc7TG87MDtMOzs7OztOO1RIQUkgTEVUVEVSIExPIExJTkc7Ozs7CiswRTI2O1RIQUkgQ0hBUkFDVEVSIExVO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBMVTs7OzsKKzBFMjc7VEhBSSBDSEFSQUNURVIgV08gV0FFTjtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgV08gV0FFTjs7OzsKKzBFMjg7VEhBSSBDSEFSQUNURVIgU08gU0FMQTtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgU08gU0FMQTs7OzsKKzBFMjk7VEhBSSBDSEFSQUNURVIgU08gUlVTSTtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgU08gUlVTSTs7OzsKKzBFMkE7VEhBSSBDSEFSQUNURVIgU08gU1VBO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBTTyBTVUE7Ozs7CiswRTJCO1RIQUkgQ0hBUkFDVEVSIEhPIEhJUDtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgSE8gSElQOzs7OworMEUyQztUSEFJIENIQVJBQ1RFUiBMTyBDSFVMQTtMbzswO0w7Ozs7O047VEhBSSBMRVRURVIgTE8gQ0hVTEE7Ozs7CiswRTJEO1RIQUkgQ0hBUkFDVEVSIE8gQU5HO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBPIEFORzs7OzsKKzBFMkU7VEhBSSBDSEFSQUNURVIgSE8gTk9LSFVLO0xvOzA7TDs7Ozs7TjtUSEFJIExFVFRFUiBITyBOT0sgSFVLOzs7OworMEUyRjtUSEFJIENIQVJBQ1RFUiBQQUlZQU5OT0k7TG87MDtMOzs7OztOO1RIQUkgUEFJIFlBTiBOT0k7cGFpeWFuIG5vaTs7OworMEUzMDtUSEFJIENIQVJBQ1RFUiBTQVJBIEE7TG87MDtMOzs7OztOO1RIQUkgVk9XRUwgU0lHTiBTQVJBIEE7Ozs7CiswRTMxO1RIQUkgQ0hBUkFDVEVSIE1BSSBIQU4tQUtBVDtNbjswO05TTTs7Ozs7TjtUSEFJIFZPV0VMIFNJR04gTUFJIEhBTi1BS0FUOzs7OworMEUzMjtUSEFJIENIQVJBQ1RFUiBTQVJBIEFBO0xvOzA7TDs7Ozs7TjtUSEFJIFZPV0VMIFNJR04gU0FSQSBBQTs7OzsKKzBFMzM7VEhBSSBDSEFSQUNURVIgU0FSQSBBTTtMbzswO0w7PGNvbXBhdD4gMEU0RCAwRTMyOzs7O047VEhBSSBWT1dFTCBTSUdOIFNBUkEgQU07Ozs7CiswRTM0O1RIQUkgQ0hBUkFDVEVSIFNBUkEgSTtNbjswO05TTTs7Ozs7TjtUSEFJIFZPV0VMIFNJR04gU0FSQSBJOzs7OworMEUzNTtUSEFJIENIQVJBQ1RFUiBTQVJBIElJO01uOzA7TlNNOzs7OztOO1RIQUkgVk9XRUwgU0lHTiBTQVJBIElJOzs7OworMEUzNjtUSEFJIENIQVJBQ1RFUiBTQVJBIFVFO01uOzA7TlNNOzs7OztOO1RIQUkgVk9XRUwgU0lHTiBTQVJBIFVFOzs7OworMEUzNztUSEFJIENIQVJBQ1RFUiBTQVJBIFVFRTtNbjswO05TTTs7Ozs7TjtUSEFJIFZPV0VMIFNJR04gU0FSQSBVRUU7c2FyYSB1dWU7OzsKKzBFMzg7VEhBSSBDSEFSQUNURVIgU0FSQSBVO01uOzEwMztOU007Ozs7O047VEhBSSBWT1dFTCBTSUdOIFNBUkEgVTs7OzsKKzBFMzk7VEhBSSBDSEFSQUNURVIgU0FSQSBVVTtNbjsxMDM7TlNNOzs7OztOO1RIQUkgVk9XRUwgU0lHTiBTQVJBIFVVOzs7OworMEUzQTtUSEFJIENIQVJBQ1RFUiBQSElOVEhVO01uOzk7TlNNOzs7OztOO1RIQUkgVk9XRUwgU0lHTiBQSElOVEhVOzs7OworMEUzRjtUSEFJIENVUlJFTkNZIFNZTUJPTCBCQUhUO1NjOzA7RVQ7Ozs7O047VEhBSSBCQUhUIFNJR047Ozs7CiswRTQwO1RIQUkgQ0hBUkFDVEVSIFNBUkEgRTtMbzswO0w7Ozs7O047VEhBSSBWT1dFTCBTSUdOIFNBUkEgRTs7OzsKKzBFNDE7VEhBSSBDSEFSQUNURVIgU0FSQSBBRTtMbzswO0w7Ozs7O047VEhBSSBWT1dFTCBTSUdOIFNBUkEgQUU7Ozs7CiswRTQyO1RIQUkgQ0hBUkFDVEVSIFNBUkEgTztMbzswO0w7Ozs7O047VEhBSSBWT1dFTCBTSUdOIFNBUkEgTzs7OzsKKzBFNDM7VEhBSSBDSEFSQUNURVIgU0FSQSBBSSBNQUlNVUFOO0xvOzA7TDs7Ozs7TjtUSEFJIFZPV0VMIFNJR04gU0FSQSBNQUkgTVVBTjtzYXJhIGFpIG1haSBtdWFuOzs7CiswRTQ0O1RIQUkgQ0hBUkFDVEVSIFNBUkEgQUkgTUFJTUFMQUk7TG87MDtMOzs7OztOO1RIQUkgVk9XRUwgU0lHTiBTQVJBIE1BSSBNQUxBSTtzYXJhIGFpIG1haSBtYWxhaTs7OworMEU0NTtUSEFJIENIQVJBQ1RFUiBMQUtLSEFOR1lBTztMbzswO0w7Ozs7O047VEhBSSBMQUsgS0hBTkcgWUFPO2xha2toYW5nIHlhbzs7OworMEU0NjtUSEFJIENIQVJBQ1RFUiBNQUlZQU1PSztMbTswO0w7Ozs7O047VEhBSSBNQUkgWUFNT0s7bWFpIHlhbW9rOzs7CiswRTQ3O1RIQUkgQ0hBUkFDVEVSIE1BSVRBSUtIVTtNbjswO05TTTs7Ozs7TjtUSEFJIFZPV0VMIFNJR04gTUFJIFRBSSBLSFU7bWFpIHRhaWtodTs7OworMEU0ODtUSEFJIENIQVJBQ1RFUiBNQUkgRUs7TW47MTA3O05TTTs7Ozs7TjtUSEFJIFRPTkUgTUFJIEVLOzs7OworMEU0OTtUSEFJIENIQVJBQ1RFUiBNQUkgVEhPO01uOzEwNztOU007Ozs7O047VEhBSSBUT05FIE1BSSBUSE87Ozs7CiswRTRBO1RIQUkgQ0hBUkFDVEVSIE1BSSBUUkk7TW47MTA3O05TTTs7Ozs7TjtUSEFJIFRPTkUgTUFJIFRSSTs7OzsKKzBFNEI7VEhBSSBDSEFSQUNURVIgTUFJIENIQVRUQVdBO01uOzEwNztOU007Ozs7O047VEhBSSBUT05FIE1BSSBDSEFUVEFXQTs7OzsKKzBFNEM7VEhBSSBDSEFSQUNURVIgVEhBTlRIQUtIQVQ7TW47MDtOU007Ozs7O047VEhBSSBUSEFOVEhBS0hBVDs7OzsKKzBFNEQ7VEhBSSBDSEFSQUNURVIgTklLSEFISVQ7TW47MDtOU007Ozs7O047VEhBSSBOSUtLSEFISVQ7bmlra2hhaGl0Ozs7CiswRTRFO1RIQUkgQ0hBUkFDVEVSIFlBTUFLS0FOO01uOzA7TlNNOzs7OztOO1RIQUkgWUFNQUtLQU47Ozs7CiswRTRGO1RIQUkgQ0hBUkFDVEVSIEZPTkdNQU47UG87MDtMOzs7OztOO1RIQUkgRk9OR01BTjs7OzsKKzBFNTA7VEhBSSBESUdJVCBaRVJPO05kOzA7TDs7MDswOzA7Tjs7Ozs7CiswRTUxO1RIQUkgRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CiswRTUyO1RIQUkgRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CiswRTUzO1RIQUkgRElHSVQgVEhSRUU7TmQ7MDtMOzszOzM7MztOOzs7OzsKKzBFNTQ7VEhBSSBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CiswRTU1O1RIQUkgRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMEU1NjtUSEFJIERJR0lUIFNJWDtOZDswO0w7OzY7Njs2O047Ozs7OworMEU1NztUSEFJIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CiswRTU4O1RIQUkgRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzBFNTk7VEhBSSBESUdJVCBOSU5FO05kOzA7TDs7OTs5Ozk7Tjs7Ozs7CiswRTVBO1RIQUkgQ0hBUkFDVEVSIEFOR0tIQU5LSFU7UG87MDtMOzs7OztOO1RIQUkgQU5HS0hBTktIVTs7OzsKKzBFNUI7VEhBSSBDSEFSQUNURVIgS0hPTVVUO1BvOzA7TDs7Ozs7TjtUSEFJIEtIT01VVDs7OzsKKzBFODE7TEFPIExFVFRFUiBLTztMbzswO0w7Ozs7O047Ozs7OworMEU4MjtMQU8gTEVUVEVSIEtITyBTVU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRTg0O0xBTyBMRVRURVIgS0hPIFRBTTtMbzswO0w7Ozs7O047Ozs7OworMEU4NztMQU8gTEVUVEVSIE5HTztMbzswO0w7Ozs7O047Ozs7OworMEU4ODtMQU8gTEVUVEVSIENPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRThBO0xBTyBMRVRURVIgU08gVEFNO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRThEO0xBTyBMRVRURVIgTllPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRTk0O0xBTyBMRVRURVIgRE87TG87MDtMOzs7OztOOzs7OzsKKzBFOTU7TEFPIExFVFRFUiBUTztMbzswO0w7Ozs7O047Ozs7OworMEU5NjtMQU8gTEVUVEVSIFRITyBTVU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRTk3O0xBTyBMRVRURVIgVEhPIFRBTTtMbzswO0w7Ozs7O047Ozs7OworMEU5OTtMQU8gTEVUVEVSIE5PO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRTlBO0xBTyBMRVRURVIgQk87TG87MDtMOzs7OztOOzs7OzsKKzBFOUI7TEFPIExFVFRFUiBQTztMbzswO0w7Ozs7O047Ozs7OworMEU5QztMQU8gTEVUVEVSIFBITyBTVU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRTlEO0xBTyBMRVRURVIgRk8gVEFNO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRTlFO0xBTyBMRVRURVIgUEhPIFRBTTtMbzswO0w7Ozs7O047Ozs7OworMEU5RjtMQU8gTEVUVEVSIEZPIFNVTkc7TG87MDtMOzs7OztOOzs7OzsKKzBFQTE7TEFPIExFVFRFUiBNTztMbzswO0w7Ozs7O047Ozs7OworMEVBMjtMQU8gTEVUVEVSIFlPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRUEzO0xBTyBMRVRURVIgTE8gTElORztMbzswO0w7Ozs7O047Ozs7OworMEVBNTtMQU8gTEVUVEVSIExPIExPT1Q7TG87MDtMOzs7OztOOzs7OzsKKzBFQTc7TEFPIExFVFRFUiBXTztMbzswO0w7Ozs7O047Ozs7OworMEVBQTtMQU8gTEVUVEVSIFNPIFNVTkc7TG87MDtMOzs7OztOOzs7OzsKKzBFQUI7TEFPIExFVFRFUiBITyBTVU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRUFEO0xBTyBMRVRURVIgTztMbzswO0w7Ozs7O047Ozs7OworMEVBRTtMQU8gTEVUVEVSIEhPIFRBTTtMbzswO0w7Ozs7O047Ozs7OworMEVBRjtMQU8gRUxMSVBTSVM7TG87MDtMOzs7OztOOzs7OzsKKzBFQjA7TEFPIFZPV0VMIFNJR04gQTtMbzswO0w7Ozs7O047Ozs7OworMEVCMTtMQU8gVk9XRUwgU0lHTiBNQUkgS0FOO01uOzA7TlNNOzs7OztOOzs7OzsKKzBFQjI7TEFPIFZPV0VMIFNJR04gQUE7TG87MDtMOzs7OztOOzs7OzsKKzBFQjM7TEFPIFZPV0VMIFNJR04gQU07TG87MDtMOzxjb21wYXQ+IDBFQ0QgMEVCMjs7OztOOzs7OzsKKzBFQjQ7TEFPIFZPV0VMIFNJR04gSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRUI1O0xBTyBWT1dFTCBTSUdOIElJO01uOzA7TlNNOzs7OztOOzs7OzsKKzBFQjY7TEFPIFZPV0VMIFNJR04gWTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRUI3O0xBTyBWT1dFTCBTSUdOIFlZO01uOzA7TlNNOzs7OztOOzs7OzsKKzBFQjg7TEFPIFZPV0VMIFNJR04gVTtNbjsxMTg7TlNNOzs7OztOOzs7OzsKKzBFQjk7TEFPIFZPV0VMIFNJR04gVVU7TW47MTE4O05TTTs7Ozs7Tjs7Ozs7CiswRUJCO0xBTyBWT1dFTCBTSUdOIE1BSSBLT047TW47MDtOU007Ozs7O047Ozs7OworMEVCQztMQU8gU0VNSVZPV0VMIFNJR04gTE87TW47MDtOU007Ozs7O047Ozs7OworMEVCRDtMQU8gU0VNSVZPV0VMIFNJR04gTllPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRUMwO0xBTyBWT1dFTCBTSUdOIEU7TG87MDtMOzs7OztOOzs7OzsKKzBFQzE7TEFPIFZPV0VMIFNJR04gRUk7TG87MDtMOzs7OztOOzs7OzsKKzBFQzI7TEFPIFZPV0VMIFNJR04gTztMbzswO0w7Ozs7O047Ozs7OworMEVDMztMQU8gVk9XRUwgU0lHTiBBWTtMbzswO0w7Ozs7O047Ozs7OworMEVDNDtMQU8gVk9XRUwgU0lHTiBBSTtMbzswO0w7Ozs7O047Ozs7OworMEVDNjtMQU8gS08gTEE7TG07MDtMOzs7OztOOzs7OzsKKzBFQzg7TEFPIFRPTkUgTUFJIEVLO01uOzEyMjtOU007Ozs7O047Ozs7OworMEVDOTtMQU8gVE9ORSBNQUkgVEhPO01uOzEyMjtOU007Ozs7O047Ozs7OworMEVDQTtMQU8gVE9ORSBNQUkgVEk7TW47MTIyO05TTTs7Ozs7Tjs7Ozs7CiswRUNCO0xBTyBUT05FIE1BSSBDQVRBV0E7TW47MTIyO05TTTs7Ozs7Tjs7Ozs7CiswRUNDO0xBTyBDQU5DRUxMQVRJT04gTUFSSztNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRUNEO0xBTyBOSUdHQUhJVEE7TW47MDtOU007Ozs7O047Ozs7OworMEVEMDtMQU8gRElHSVQgWkVSTztOZDswO0w7OzA7MDswO047Ozs7OworMEVEMTtMQU8gRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CiswRUQyO0xBTyBESUdJVCBUV087TmQ7MDtMOzsyOzI7MjtOOzs7OzsKKzBFRDM7TEFPIERJR0lUIFRIUkVFO05kOzA7TDs7MzszOzM7Tjs7Ozs7CiswRUQ0O0xBTyBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CiswRUQ1O0xBTyBESUdJVCBGSVZFO05kOzA7TDs7NTs1OzU7Tjs7Ozs7CiswRUQ2O0xBTyBESUdJVCBTSVg7TmQ7MDtMOzs2OzY7NjtOOzs7OzsKKzBFRDc7TEFPIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CiswRUQ4O0xBTyBESUdJVCBFSUdIVDtOZDswO0w7Ozg7ODs4O047Ozs7OworMEVEOTtMQU8gRElHSVQgTklORTtOZDswO0w7Ozk7OTs5O047Ozs7OworMEVEQztMQU8gSE8gTk87TG87MDtMOzxjb21wYXQ+IDBFQUIgMEU5OTs7OztOOzs7OzsKKzBFREQ7TEFPIEhPIE1PO0xvOzA7TDs8Y29tcGF0PiAwRUFCIDBFQTE7Ozs7Tjs7Ozs7CiswRjAwO1RJQkVUQU4gU1lMTEFCTEUgT007TG87MDtMOzs7OztOOzs7OzsKKzBGMDE7VElCRVRBTiBNQVJLIEdURVIgWUlHIE1HTyBUUlVOQ0FURUQgQTtTbzswO0w7Ozs7O047O3RlciB5aWsgZ28gYSB0aHVuZzs7OworMEYwMjtUSUJFVEFOIE1BUksgR1RFUiBZSUcgTUdPIC1VTSBSTkFNIEJDQUQgTUE7U287MDtMOzs7OztOOzt0ZXIgeWlrIGdvIHd1bSBuYW0gY2hleSBtYTs7OworMEYwMztUSUJFVEFOIE1BUksgR1RFUiBZSUcgTUdPIC1VTSBHVEVSIFRTSEVHIE1BO1NvOzA7TDs7Ozs7Tjs7dGVyIHlpayBnbyB3dW0gdGVyIHRzZWsgbWE7OzsKKzBGMDQ7VElCRVRBTiBNQVJLIElOSVRJQUwgWUlHIE1HTyBNRFVOIE1BO1BvOzA7TDs7Ozs7TjtUSUJFVEFOIFNJTkdMRSBPUk5BTUVOVDt5aWsgZ28gZHVuIG1hOzs7CiswRjA1O1RJQkVUQU4gTUFSSyBDTE9TSU5HIFlJRyBNR08gU0dBQiBNQTtQbzswO0w7Ozs7O047O3lpayBnbyBrYWIgbWE7OzsKKzBGMDY7VElCRVRBTiBNQVJLIENBUkVUIFlJRyBNR08gUEhVUiBTSEFEIE1BO1BvOzA7TDs7Ozs7Tjs7eWlrIGdvIHB1ciBzaGV5IG1hOzs7CiswRjA3O1RJQkVUQU4gTUFSSyBZSUcgTUdPIFRTSEVHIFNIQUQgTUE7UG87MDtMOzs7OztOOzt5aWsgZ28gdHNlayBzaGV5IG1hOzs7CiswRjA4O1RJQkVUQU4gTUFSSyBTQlJVTCBTSEFEO1BvOzA7TDs7Ozs7TjtUSUJFVEFOIFJHWUFOU0hBRDtkcnVsIHNoZXk7OzsKKzBGMDk7VElCRVRBTiBNQVJLIEJTS1VSIFlJRyBNR087UG87MDtMOzs7OztOOztrdXIgeWlrIGdvOzs7CiswRjBBO1RJQkVUQU4gTUFSSyBCS0EtIFNIT0cgWUlHIE1HTztQbzswO0w7Ozs7O047O2thIHNobyB5aWsgZ287OzsKKzBGMEI7VElCRVRBTiBNQVJLIElOVEVSU1lMTEFCSUMgVFNIRUc7UG87MDtMOzs7OztOO1RJQkVUQU4gVFNFRzt0c2VrOzs7CiswRjBDO1RJQkVUQU4gTUFSSyBERUxJTUlURVIgVFNIRUcgQlNUQVI7UG87MDtMOzxub0JyZWFrPiAwRjBCOzs7O047O3RzZWsgdGFyOzs7CiswRjBEO1RJQkVUQU4gTUFSSyBTSEFEO1BvOzA7TDs7Ozs7TjtUSUJFVEFOIFNIQUQ7c2hleTs7OworMEYwRTtUSUJFVEFOIE1BUksgTllJUyBTSEFEO1BvOzA7TDs7Ozs7TjtUSUJFVEFOIERPVUJMRSBTSEFEO255aSBzaGV5Ozs7CiswRjBGO1RJQkVUQU4gTUFSSyBUU0hFRyBTSEFEO1BvOzA7TDs7Ozs7Tjs7dHNlayBzaGV5Ozs7CiswRjEwO1RJQkVUQU4gTUFSSyBOWUlTIFRTSEVHIFNIQUQ7UG87MDtMOzs7OztOOztueWkgdHNlayBzaGV5Ozs7CiswRjExO1RJQkVUQU4gTUFSSyBSSU4gQ0hFTiBTUFVOR1MgU0hBRDtQbzswO0w7Ozs7O047VElCRVRBTiBSSU5DSEFOUEhVTkdTSEFEO3JpbmNoZW4gcHVuZyBzaGV5Ozs7CiswRjEyO1RJQkVUQU4gTUFSSyBSR1lBIEdSQU0gU0hBRDtQbzswO0w7Ozs7O047O2d5YSB0cmFtIHNoZXk7OzsKKzBGMTM7VElCRVRBTiBNQVJLIENBUkVUIC1EWlVEIFJUQUdTIE1FIExPTkcgQ0FOO1NvOzA7TDs7Ozs7Tjs7ZHp1IHRhIG1lIGxvbmcgY2hlbjs7OworMEYxNDtUSUJFVEFOIE1BUksgR1RFUiBUU0hFRztTbzswO0w7Ozs7O047VElCRVRBTiBDT01NQTt0ZXIgdHNlazs7OworMEYxNTtUSUJFVEFOIExPR09UWVBFIFNJR04gQ0hBRCBSVEFHUztTbzswO0w7Ozs7O047O2NoZSB0YTs7OworMEYxNjtUSUJFVEFOIExPR09UWVBFIFNJR04gTEhBRyBSVEFHUztTbzswO0w7Ozs7O047O2hsYWsgdGE7OzsKKzBGMTc7VElCRVRBTiBBU1RST0xPR0lDQUwgU0lHTiBTR1JBIEdDQU4gLUNIQVIgUlRBR1M7U287MDtMOzs7OztOOzt0cmFjaGVuIGNoYXIgdGE7OzsKKzBGMTg7VElCRVRBTiBBU1RST0xPR0lDQUwgU0lHTiAtS0hZVUQgUEE7TW47MjIwO05TTTs7Ozs7Tjs7a3l1IHBhOzs7CiswRjE5O1RJQkVUQU4gQVNUUk9MT0dJQ0FMIFNJR04gU0RPTkcgVFNIVUdTO01uOzIyMDtOU007Ozs7O047O2RvbmcgdHN1Ozs7CiswRjFBO1RJQkVUQU4gU0lHTiBSREVMIERLQVIgR0NJRztTbzswO0w7Ozs7O047O2Rla2EgY2hpZzs7OworMEYxQjtUSUJFVEFOIFNJR04gUkRFTCBES0FSIEdOWUlTO1NvOzA7TDs7Ozs7Tjs7ZGVrYSBueWk7OzsKKzBGMUM7VElCRVRBTiBTSUdOIFJERUwgREtBUiBHU1VNO1NvOzA7TDs7Ozs7Tjs7ZGVrYSBzdW07OzsKKzBGMUQ7VElCRVRBTiBTSUdOIFJERUwgTkFHIEdDSUc7U287MDtMOzs7OztOOztkZW5hIGNoaWc7OzsKKzBGMUU7VElCRVRBTiBTSUdOIFJERUwgTkFHIEdOWUlTO1NvOzA7TDs7Ozs7Tjs7ZGVuYSBueWk7OzsKKzBGMUY7VElCRVRBTiBTSUdOIFJERUwgREtBUiBSREVMIE5BRztTbzswO0w7Ozs7O047O2Rla2EgZGVuYTs7OworMEYyMDtUSUJFVEFOIERJR0lUIFpFUk87TmQ7MDtMOzswOzA7MDtOOzs7OzsKKzBGMjE7VElCRVRBTiBESUdJVCBPTkU7TmQ7MDtMOzsxOzE7MTtOOzs7OzsKKzBGMjI7VElCRVRBTiBESUdJVCBUV087TmQ7MDtMOzsyOzI7MjtOOzs7OzsKKzBGMjM7VElCRVRBTiBESUdJVCBUSFJFRTtOZDswO0w7OzM7MzszO047Ozs7OworMEYyNDtUSUJFVEFOIERJR0lUIEZPVVI7TmQ7MDtMOzs0OzQ7NDtOOzs7OzsKKzBGMjU7VElCRVRBTiBESUdJVCBGSVZFO05kOzA7TDs7NTs1OzU7Tjs7Ozs7CiswRjI2O1RJQkVUQU4gRElHSVQgU0lYO05kOzA7TDs7Njs2OzY7Tjs7Ozs7CiswRjI3O1RJQkVUQU4gRElHSVQgU0VWRU47TmQ7MDtMOzs3Ozc7NztOOzs7OzsKKzBGMjg7VElCRVRBTiBESUdJVCBFSUdIVDtOZDswO0w7Ozg7ODs4O047Ozs7OworMEYyOTtUSUJFVEFOIERJR0lUIE5JTkU7TmQ7MDtMOzs5Ozk7OTtOOzs7OzsKKzBGMkE7VElCRVRBTiBESUdJVCBIQUxGIE9ORTtObzswO0w7Ozs7MS8yO047Ozs7OworMEYyQjtUSUJFVEFOIERJR0lUIEhBTEYgVFdPO05vOzA7TDs7OzszLzI7Tjs7Ozs7CiswRjJDO1RJQkVUQU4gRElHSVQgSEFMRiBUSFJFRTtObzswO0w7Ozs7NS8yO047Ozs7OworMEYyRDtUSUJFVEFOIERJR0lUIEhBTEYgRk9VUjtObzswO0w7Ozs7Ny8yO047Ozs7OworMEYyRTtUSUJFVEFOIERJR0lUIEhBTEYgRklWRTtObzswO0w7Ozs7OS8yO047Ozs7OworMEYyRjtUSUJFVEFOIERJR0lUIEhBTEYgU0lYO05vOzA7TDs7OzsxMS8yO047Ozs7OworMEYzMDtUSUJFVEFOIERJR0lUIEhBTEYgU0VWRU47Tm87MDtMOzs7OzEzLzI7Tjs7Ozs7CiswRjMxO1RJQkVUQU4gRElHSVQgSEFMRiBFSUdIVDtObzswO0w7Ozs7MTUvMjtOOzs7OzsKKzBGMzI7VElCRVRBTiBESUdJVCBIQUxGIE5JTkU7Tm87MDtMOzs7OzE3LzI7Tjs7Ozs7CiswRjMzO1RJQkVUQU4gRElHSVQgSEFMRiBaRVJPO05vOzA7TDs7OzstMS8yO047Ozs7OworMEYzNDtUSUJFVEFOIE1BUksgQlNEVVMgUlRBR1M7U287MDtMOzs7OztOOztkdSB0YTs7OworMEYzNTtUSUJFVEFOIE1BUksgTkdBUyBCWlVORyBOWUkgWkxBO01uOzIyMDtOU007Ozs7O047VElCRVRBTiBIT05PUklGSUMgVU5ERVIgUklORztuZ2UgenVuZyBueWkgZGE7OzsKKzBGMzY7VElCRVRBTiBNQVJLIENBUkVUIC1EWlVEIFJUQUdTIEJaSEkgTUlHIENBTjtTbzswO0w7Ozs7O047O2R6dSB0YSBzaGkgbWlnIGNoZW47OzsKKzBGMzc7VElCRVRBTiBNQVJLIE5HQVMgQlpVTkcgU0dPUiBSVEFHUztNbjsyMjA7TlNNOzs7OztOO1RJQkVUQU4gVU5ERVIgUklORztuZ2UgenVuZyBnb3IgdGE7OzsKKzBGMzg7VElCRVRBTiBNQVJLIENIRSBNR087U287MDtMOzs7OztOOztjaGUgZ287OzsKKzBGMzk7VElCRVRBTiBNQVJLIFRTQSAtUEhSVTtNbjsyMTY7TlNNOzs7OztOO1RJQkVUQU4gTEVOSVRJT04gTUFSSzt0c2EgdHJ1Ozs7CiswRjNBO1RJQkVUQU4gTUFSSyBHVUcgUlRBR1MgR1lPTjtQczswO09OOzs7OztOOztndWcgdGEgeXVuOzs7CiswRjNCO1RJQkVUQU4gTUFSSyBHVUcgUlRBR1MgR1lBUztQZTswO09OOzs7OztOOztndWcgdGEgeWU7OzsKKzBGM0M7VElCRVRBTiBNQVJLIEFORyBLSEFORyBHWU9OO1BzOzA7T047Ozs7O047VElCRVRBTiBMRUZUIEJSQUNFO2FuZyBrYW5nIHl1bjs7OworMEYzRDtUSUJFVEFOIE1BUksgQU5HIEtIQU5HIEdZQVM7UGU7MDtPTjs7Ozs7TjtUSUJFVEFOIFJJR0hUIEJSQUNFO2FuZyBrYW5nIHllOzs7CiswRjNFO1RJQkVUQU4gU0lHTiBZQVIgVFNIRVM7TWM7MDtMOzs7OztOOzt5YXIgdHNlOzs7CiswRjNGO1RJQkVUQU4gU0lHTiBNQVIgVFNIRVM7TWM7MDtMOzs7OztOOzttYXIgdHNlOzs7CiswRjQwO1RJQkVUQU4gTEVUVEVSIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRjQxO1RJQkVUQU4gTEVUVEVSIEtIQTtMbzswO0w7Ozs7O047Ozs7OworMEY0MjtUSUJFVEFOIExFVFRFUiBHQTtMbzswO0w7Ozs7O047Ozs7OworMEY0MztUSUJFVEFOIExFVFRFUiBHSEE7TG87MDtMOzBGNDIgMEZCNzs7OztOOzs7OzsKKzBGNDQ7VElCRVRBTiBMRVRURVIgTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRjQ1O1RJQkVUQU4gTEVUVEVSIENBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRjQ2O1RJQkVUQU4gTEVUVEVSIENIQTtMbzswO0w7Ozs7O047Ozs7OworMEY0NztUSUJFVEFOIExFVFRFUiBKQTtMbzswO0w7Ozs7O047Ozs7OworMEY0OTtUSUJFVEFOIExFVFRFUiBOWUE7TG87MDtMOzs7OztOOzs7OzsKKzBGNEE7VElCRVRBTiBMRVRURVIgVFRBO0xvOzA7TDs7Ozs7TjtUSUJFVEFOIExFVFRFUiBSRVZFUlNFRCBUQTs7OzsKKzBGNEI7VElCRVRBTiBMRVRURVIgVFRIQTtMbzswO0w7Ozs7O047VElCRVRBTiBMRVRURVIgUkVWRVJTRUQgVEhBOzs7OworMEY0QztUSUJFVEFOIExFVFRFUiBEREE7TG87MDtMOzs7OztOO1RJQkVUQU4gTEVUVEVSIFJFVkVSU0VEIERBOzs7OworMEY0RDtUSUJFVEFOIExFVFRFUiBEREhBO0xvOzA7TDswRjRDIDBGQjc7Ozs7Tjs7Ozs7CiswRjRFO1RJQkVUQU4gTEVUVEVSIE5OQTtMbzswO0w7Ozs7O047VElCRVRBTiBMRVRURVIgUkVWRVJTRUQgTkE7Ozs7CiswRjRGO1RJQkVUQU4gTEVUVEVSIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRjUwO1RJQkVUQU4gTEVUVEVSIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMEY1MTtUSUJFVEFOIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMEY1MjtUSUJFVEFOIExFVFRFUiBESEE7TG87MDtMOzBGNTEgMEZCNzs7OztOOzs7OzsKKzBGNTM7VElCRVRBTiBMRVRURVIgTkE7TG87MDtMOzs7OztOOzs7OzsKKzBGNTQ7VElCRVRBTiBMRVRURVIgUEE7TG87MDtMOzs7OztOOzs7OzsKKzBGNTU7VElCRVRBTiBMRVRURVIgUEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRjU2O1RJQkVUQU4gTEVUVEVSIEJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRjU3O1RJQkVUQU4gTEVUVEVSIEJIQTtMbzswO0w7MEY1NiAwRkI3Ozs7O047Ozs7OworMEY1ODtUSUJFVEFOIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMEY1OTtUSUJFVEFOIExFVFRFUiBUU0E7TG87MDtMOzs7OztOOzs7OzsKKzBGNUE7VElCRVRBTiBMRVRURVIgVFNIQTtMbzswO0w7Ozs7O047Ozs7OworMEY1QjtUSUJFVEFOIExFVFRFUiBEWkE7TG87MDtMOzs7OztOOzs7OzsKKzBGNUM7VElCRVRBTiBMRVRURVIgRFpIQTtMbzswO0w7MEY1QiAwRkI3Ozs7O047Ozs7OworMEY1RDtUSUJFVEFOIExFVFRFUiBXQTtMbzswO0w7Ozs7O047Ozs7OworMEY1RTtUSUJFVEFOIExFVFRFUiBaSEE7TG87MDtMOzs7OztOOzs7OzsKKzBGNUY7VElCRVRBTiBMRVRURVIgWkE7TG87MDtMOzs7OztOOzs7OzsKKzBGNjA7VElCRVRBTiBMRVRURVIgLUE7TG87MDtMOzs7OztOO1RJQkVUQU4gTEVUVEVSIEFBOzs7OworMEY2MTtUSUJFVEFOIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMEY2MjtUSUJFVEFOIExFVFRFUiBSQTtMbzswO0w7Ozs7O047Oyo7OzsKKzBGNjM7VElCRVRBTiBMRVRURVIgTEE7TG87MDtMOzs7OztOOzs7OzsKKzBGNjQ7VElCRVRBTiBMRVRURVIgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRjY1O1RJQkVUQU4gTEVUVEVSIFNTQTtMbzswO0w7Ozs7O047VElCRVRBTiBMRVRURVIgUkVWRVJTRUQgU0hBOzs7OworMEY2NjtUSUJFVEFOIExFVFRFUiBTQTtMbzswO0w7Ozs7O047Ozs7OworMEY2NztUSUJFVEFOIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMEY2ODtUSUJFVEFOIExFVFRFUiBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiswRjY5O1RJQkVUQU4gTEVUVEVSIEtTU0E7TG87MDtMOzBGNDAgMEZCNTs7OztOOzs7OzsKKzBGNkE7VElCRVRBTiBMRVRURVIgRklYRUQtRk9STSBSQTtMbzswO0w7Ozs7O047Oyo7OzsKKzBGNzE7VElCRVRBTiBWT1dFTCBTSUdOIEFBO01uOzEyOTtOU007Ozs7O047Ozs7OworMEY3MjtUSUJFVEFOIFZPV0VMIFNJR04gSTtNbjsxMzA7TlNNOzs7OztOOzs7OzsKKzBGNzM7VElCRVRBTiBWT1dFTCBTSUdOIElJO01uOzA7TlNNOzBGNzEgMEY3Mjs7OztOOzs7OzsKKzBGNzQ7VElCRVRBTiBWT1dFTCBTSUdOIFU7TW47MTMyO05TTTs7Ozs7Tjs7Ozs7CiswRjc1O1RJQkVUQU4gVk9XRUwgU0lHTiBVVTtNbjswO05TTTswRjcxIDBGNzQ7Ozs7Tjs7Ozs7CiswRjc2O1RJQkVUQU4gVk9XRUwgU0lHTiBWT0NBTElDIFI7TW47MDtOU007MEZCMiAwRjgwOzs7O047Ozs7OworMEY3NztUSUJFVEFOIFZPV0VMIFNJR04gVk9DQUxJQyBSUjtNbjswO05TTTs8Y29tcGF0PiAwRkIyIDBGODE7Ozs7Tjs7Ozs7CiswRjc4O1RJQkVUQU4gVk9XRUwgU0lHTiBWT0NBTElDIEw7TW47MDtOU007MEZCMyAwRjgwOzs7O047Ozs7OworMEY3OTtUSUJFVEFOIFZPV0VMIFNJR04gVk9DQUxJQyBMTDtNbjswO05TTTs8Y29tcGF0PiAwRkIzIDBGODE7Ozs7Tjs7Ozs7CiswRjdBO1RJQkVUQU4gVk9XRUwgU0lHTiBFO01uOzEzMDtOU007Ozs7O047Ozs7OworMEY3QjtUSUJFVEFOIFZPV0VMIFNJR04gRUU7TW47MTMwO05TTTs7Ozs7TjtUSUJFVEFOIFZPV0VMIFNJR04gQUk7Ozs7CiswRjdDO1RJQkVUQU4gVk9XRUwgU0lHTiBPO01uOzEzMDtOU007Ozs7O047Ozs7OworMEY3RDtUSUJFVEFOIFZPV0VMIFNJR04gT087TW47MTMwO05TTTs7Ozs7TjtUSUJFVEFOIFZPV0VMIFNJR04gQVU7Ozs7CiswRjdFO1RJQkVUQU4gU0lHTiBSSkVTIFNVIE5HQSBSTztNbjswO05TTTs7Ozs7TjtUSUJFVEFOIEFOVVNWQVJBO2plIHN1IG5nYSBybzs7OworMEY3RjtUSUJFVEFOIFNJR04gUk5BTSBCQ0FEO01jOzA7TDs7Ozs7TjtUSUJFVEFOIFZJU0FSR0E7bmFtIGNoZXk7OzsKKzBGODA7VElCRVRBTiBWT1dFTCBTSUdOIFJFVkVSU0VEIEk7TW47MTMwO05TTTs7Ozs7TjtUSUJFVEFOIFZPV0VMIFNJR04gU0hPUlQgSTs7OzsKKzBGODE7VElCRVRBTiBWT1dFTCBTSUdOIFJFVkVSU0VEIElJO01uOzA7TlNNOzBGNzEgMEY4MDs7OztOOzs7OzsKKzBGODI7VElCRVRBTiBTSUdOIE5ZSSBaTEEgTkFBIERBO01uOzIzMDtOU007Ozs7O047VElCRVRBTiBDQU5EUkFCSU5EVSBXSVRIIE9STkFNRU5UO255aSBkYSBuYSBkYTs7OworMEY4MztUSUJFVEFOIFNJR04gU05BIExEQU47TW47MjMwO05TTTs7Ozs7TjtUSUJFVEFOIENBTkRSQUJJTkRVO25hbiBkZTs7OworMEY4NDtUSUJFVEFOIE1BUksgSEFMQU5UQTtNbjs5O05TTTs7Ozs7TjtUSUJFVEFOIFZJUkFNQTs7OzsKKzBGODU7VElCRVRBTiBNQVJLIFBBTFVUQTtQbzswO0w7Ozs7O047VElCRVRBTiBDSFVDSEVOWUlHRTs7OzsKKzBGODY7VElCRVRBTiBTSUdOIExDSSBSVEFHUztNbjsyMzA7TlNNOzs7OztOOztqaSB0YTs7OworMEY4NztUSUJFVEFOIFNJR04gWUFORyBSVEFHUztNbjsyMzA7TlNNOzs7OztOOzt5YW5nIHRhOzs7CiswRjg4O1RJQkVUQU4gU0lHTiBMQ0UgVFNBIENBTjtMbzswO0w7Ozs7O047O2NoZSB0c2EgY2hlbjs7OworMEY4OTtUSUJFVEFOIFNJR04gTUNIVSBDQU47TG87MDtMOzs7OztOOztjaHUgY2hlbjs7OworMEY4QTtUSUJFVEFOIFNJR04gR1JVIENBTiBSR1lJTkdTO0xvOzA7TDs7Ozs7Tjs7dHJ1IGNoZW4gZ2luZzs7OworMEY4QjtUSUJFVEFOIFNJR04gR1JVIE1FRCBSR1lJTkdTO0xvOzA7TDs7Ozs7Tjs7dHJ1IG1lIGdpbmc7OzsKKzBGOTA7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIEtBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGOTE7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIEtIQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRjkyO1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBHQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRjkzO1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBHSEE7TW47MDtOU007MEY5MiAwRkI3Ozs7O047Ozs7OworMEY5NDtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgTkdBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGOTU7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIENBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGOTY7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIENIQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRjk3O1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBKQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRjk5O1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBOWUE7TW47MDtOU007Ozs7O047Ozs7OworMEY5QTtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgVFRBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGOUI7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFRUSEE7TW47MDtOU007Ozs7O047Ozs7OworMEY5QztUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgRERBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGOUQ7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIERESEE7TW47MDtOU007MEY5QyAwRkI3Ozs7O047Ozs7OworMEY5RTtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgTk5BO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGOUY7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFRBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGQTA7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFRIQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRkExO1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBEQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRkEyO1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBESEE7TW47MDtOU007MEZBMSAwRkI3Ozs7O047Ozs7OworMEZBMztUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgTkE7TW47MDtOU007Ozs7O047Ozs7OworMEZBNDtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgUEE7TW47MDtOU007Ozs7O047Ozs7OworMEZBNTtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgUEhBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGQTY7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIEJBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGQTc7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIEJIQTtNbjswO05TTTswRkE2IDBGQjc7Ozs7Tjs7Ozs7CiswRkE4O1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBNQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRkE5O1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBUU0E7TW47MDtOU007Ozs7O047Ozs7OworMEZBQTtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgVFNIQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRkFCO1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBEWkE7TW47MDtOU007Ozs7O047Ozs7OworMEZBQztUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgRFpIQTtNbjswO05TTTswRkFCIDBGQjc7Ozs7Tjs7Ozs7CiswRkFEO1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBXQTtNbjswO05TTTs7Ozs7Tjs7Kjs7OworMEZBRTtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgWkhBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGQUY7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFpBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGQjA7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIC1BO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGQjE7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFlBO01uOzA7TlNNOzs7OztOOzsqOzs7CiswRkIyO1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBSQTtNbjswO05TTTs7Ozs7Tjs7Kjs7OworMEZCMztUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgTEE7TW47MDtOU007Ozs7O047Ozs7OworMEZCNDtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgU0hBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGQjU7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIFNTQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRkI2O1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBTQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRkI3O1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBIQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CiswRkI4O1RJQkVUQU4gU1VCSk9JTkVEIExFVFRFUiBBO01uOzA7TlNNOzs7OztOOzs7OzsKKzBGQjk7VElCRVRBTiBTVUJKT0lORUQgTEVUVEVSIEtTU0E7TW47MDtOU007MEY5MCAwRkI1Ozs7O047Ozs7OworMEZCQTtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgRklYRUQtRk9STSBXQTtNbjswO05TTTs7Ozs7Tjs7Kjs7OworMEZCQjtUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgRklYRUQtRk9STSBZQTtNbjswO05TTTs7Ozs7Tjs7Kjs7OworMEZCQztUSUJFVEFOIFNVQkpPSU5FRCBMRVRURVIgRklYRUQtRk9STSBSQTtNbjswO05TTTs7Ozs7Tjs7Kjs7OworMEZCRTtUSUJFVEFOIEtVIFJVIEtIQTtTbzswO0w7Ozs7O047O2t1cnVrYTs7OworMEZCRjtUSUJFVEFOIEtVIFJVIEtIQSBCWkhJIE1JRyBDQU47U287MDtMOzs7OztOOztrdXJ1a2Egc2hpIG1payBjaGVuOzs7CiswRkMwO1RJQkVUQU4gQ0FOVElMTEFUSU9OIFNJR04gSEVBVlkgQkVBVDtTbzswO0w7Ozs7O047Ozs7OworMEZDMTtUSUJFVEFOIENBTlRJTExBVElPTiBTSUdOIExJR0hUIEJFQVQ7U287MDtMOzs7OztOOzs7OzsKKzBGQzI7VElCRVRBTiBDQU5USUxMQVRJT04gU0lHTiBDQU5HIFRFLVU7U287MDtMOzs7OztOOztjaGFuZyB0eXU7OzsKKzBGQzM7VElCRVRBTiBDQU5USUxMQVRJT04gU0lHTiBTQlVCIC1DSEFMO1NvOzA7TDs7Ozs7Tjs7YnViIGNoZXk7OzsKKzBGQzQ7VElCRVRBTiBTWU1CT0wgRFJJTCBCVTtTbzswO0w7Ozs7O047O2RyaWxidTs7OworMEZDNTtUSUJFVEFOIFNZTUJPTCBSRE8gUkpFO1NvOzA7TDs7Ozs7Tjs7ZG9yamU7OzsKKzBGQzY7VElCRVRBTiBTWU1CT0wgUEFETUEgR0RBTjtNbjsyMjA7TlNNOzs7OztOOztwZW1hIGRlbjs7OworMEZDNztUSUJFVEFOIFNZTUJPTCBSRE8gUkpFIFJHWUEgR1JBTTtTbzswO0w7Ozs7O047O2RvcmplIGd5YSBkcmFtOzs7CiswRkM4O1RJQkVUQU4gU1lNQk9MIFBIVVIgUEE7U287MDtMOzs7OztOOztwaHVyYmE7OzsKKzBGQzk7VElCRVRBTiBTWU1CT0wgTk9SIEJVO1NvOzA7TDs7Ozs7Tjs7bm9yYnU7OzsKKzBGQ0E7VElCRVRBTiBTWU1CT0wgTk9SIEJVIE5ZSVMgLUtIWUlMO1NvOzA7TDs7Ozs7Tjs7bm9yYnUgbnlpIGtoeWk7OzsKKzBGQ0I7VElCRVRBTiBTWU1CT0wgTk9SIEJVIEdTVU0gLUtIWUlMO1NvOzA7TDs7Ozs7Tjs7bm9yYnUgc3VtIGtoeWk7OzsKKzBGQ0M7VElCRVRBTiBTWU1CT0wgTk9SIEJVIEJaSEkgLUtIWUlMO1NvOzA7TDs7Ozs7Tjs7bm9yYnUgc2hpIGtoeWk7OzsKKzBGQ0Y7VElCRVRBTiBTSUdOIFJERUwgTkFHIEdTVU07U287MDtMOzs7OztOOztkZW5hIHN1bTs7OworMTAwMDtNWUFOTUFSIExFVFRFUiBLQTtMbzswO0w7Ozs7O047Ozs7OworMTAwMTtNWUFOTUFSIExFVFRFUiBLSEE7TG87MDtMOzs7OztOOzs7OzsKKzEwMDI7TVlBTk1BUiBMRVRURVIgR0E7TG87MDtMOzs7OztOOzs7OzsKKzEwMDM7TVlBTk1BUiBMRVRURVIgR0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDA0O01ZQU5NQVIgTEVUVEVSIE5HQTtMbzswO0w7Ozs7O047Ozs7OworMTAwNTtNWUFOTUFSIExFVFRFUiBDQTtMbzswO0w7Ozs7O047Ozs7OworMTAwNjtNWUFOTUFSIExFVFRFUiBDSEE7TG87MDtMOzs7OztOOzs7OzsKKzEwMDc7TVlBTk1BUiBMRVRURVIgSkE7TG87MDtMOzs7OztOOzs7OzsKKzEwMDg7TVlBTk1BUiBMRVRURVIgSkhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDA5O01ZQU5NQVIgTEVUVEVSIE5ZQTtMbzswO0w7Ozs7O047Ozs7OworMTAwQTtNWUFOTUFSIExFVFRFUiBOTllBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDBCO01ZQU5NQVIgTEVUVEVSIFRUQTtMbzswO0w7Ozs7O047Ozs7OworMTAwQztNWUFOTUFSIExFVFRFUiBUVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDBEO01ZQU5NQVIgTEVUVEVSIEREQTtMbzswO0w7Ozs7O047Ozs7OworMTAwRTtNWUFOTUFSIExFVFRFUiBEREhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDBGO01ZQU5NQVIgTEVUVEVSIE5OQTtMbzswO0w7Ozs7O047Ozs7OworMTAxMDtNWUFOTUFSIExFVFRFUiBUQTtMbzswO0w7Ozs7O047Ozs7OworMTAxMTtNWUFOTUFSIExFVFRFUiBUSEE7TG87MDtMOzs7OztOOzs7OzsKKzEwMTI7TVlBTk1BUiBMRVRURVIgREE7TG87MDtMOzs7OztOOzs7OzsKKzEwMTM7TVlBTk1BUiBMRVRURVIgREhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDE0O01ZQU5NQVIgTEVUVEVSIE5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDE1O01ZQU5NQVIgTEVUVEVSIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDE2O01ZQU5NQVIgTEVUVEVSIFBIQTtMbzswO0w7Ozs7O047Ozs7OworMTAxNztNWUFOTUFSIExFVFRFUiBCQTtMbzswO0w7Ozs7O047Ozs7OworMTAxODtNWUFOTUFSIExFVFRFUiBCSEE7TG87MDtMOzs7OztOOzs7OzsKKzEwMTk7TVlBTk1BUiBMRVRURVIgTUE7TG87MDtMOzs7OztOOzs7OzsKKzEwMUE7TVlBTk1BUiBMRVRURVIgWUE7TG87MDtMOzs7OztOOzs7OzsKKzEwMUI7TVlBTk1BUiBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzEwMUM7TVlBTk1BUiBMRVRURVIgTEE7TG87MDtMOzs7OztOOzs7OzsKKzEwMUQ7TVlBTk1BUiBMRVRURVIgV0E7TG87MDtMOzs7OztOOzs7OzsKKzEwMUU7TVlBTk1BUiBMRVRURVIgU0E7TG87MDtMOzs7OztOOzs7OzsKKzEwMUY7TVlBTk1BUiBMRVRURVIgSEE7TG87MDtMOzs7OztOOzs7OzsKKzEwMjA7TVlBTk1BUiBMRVRURVIgTExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDIxO01ZQU5NQVIgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzEwMjM7TVlBTk1BUiBMRVRURVIgSTtMbzswO0w7Ozs7O047Ozs7OworMTAyNDtNWUFOTUFSIExFVFRFUiBJSTtMbzswO0w7Ozs7O047Ozs7OworMTAyNTtNWUFOTUFSIExFVFRFUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDI2O01ZQU5NQVIgTEVUVEVSIFVVO0xvOzA7TDsxMDI1IDEwMkU7Ozs7Tjs7Ozs7CisxMDI3O01ZQU5NQVIgTEVUVEVSIEU7TG87MDtMOzs7OztOOzs7OzsKKzEwMjk7TVlBTk1BUiBMRVRURVIgTztMbzswO0w7Ozs7O047Ozs7OworMTAyQTtNWUFOTUFSIExFVFRFUiBBVTtMbzswO0w7Ozs7O047Ozs7OworMTAyQztNWUFOTUFSIFZPV0VMIFNJR04gQUE7TWM7MDtMOzs7OztOOzs7OzsKKzEwMkQ7TVlBTk1BUiBWT1dFTCBTSUdOIEk7TW47MDtOU007Ozs7O047Ozs7OworMTAyRTtNWUFOTUFSIFZPV0VMIFNJR04gSUk7TW47MDtOU007Ozs7O047Ozs7OworMTAyRjtNWUFOTUFSIFZPV0VMIFNJR04gVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxMDMwO01ZQU5NQVIgVk9XRUwgU0lHTiBVVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxMDMxO01ZQU5NQVIgVk9XRUwgU0lHTiBFO01jOzA7TDs7Ozs7Tjs7Ozs7CisxMDMyO01ZQU5NQVIgVk9XRUwgU0lHTiBBSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxMDM2O01ZQU5NQVIgU0lHTiBBTlVTVkFSQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxMDM3O01ZQU5NQVIgU0lHTiBET1QgQkVMT1c7TW47NztOU007Ozs7O047Ozs7OworMTAzODtNWUFOTUFSIFNJR04gVklTQVJHQTtNYzswO0w7Ozs7O047Ozs7OworMTAzOTtNWUFOTUFSIFNJR04gVklSQU1BO01uOzk7TlNNOzs7OztOOzs7OzsKKzEwNDA7TVlBTk1BUiBESUdJVCBaRVJPO05kOzA7TDs7MDswOzA7Tjs7Ozs7CisxMDQxO01ZQU5NQVIgRElHSVQgT05FO05kOzA7TDs7MTsxOzE7Tjs7Ozs7CisxMDQyO01ZQU5NQVIgRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CisxMDQzO01ZQU5NQVIgRElHSVQgVEhSRUU7TmQ7MDtMOzszOzM7MztOOzs7OzsKKzEwNDQ7TVlBTk1BUiBESUdJVCBGT1VSO05kOzA7TDs7NDs0OzQ7Tjs7Ozs7CisxMDQ1O01ZQU5NQVIgRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMTA0NjtNWUFOTUFSIERJR0lUIFNJWDtOZDswO0w7OzY7Njs2O047Ozs7OworMTA0NztNWUFOTUFSIERJR0lUIFNFVkVOO05kOzA7TDs7Nzs3Ozc7Tjs7Ozs7CisxMDQ4O01ZQU5NQVIgRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzEwNDk7TVlBTk1BUiBESUdJVCBOSU5FO05kOzA7TDs7OTs5Ozk7Tjs7Ozs7CisxMDRBO01ZQU5NQVIgU0lHTiBMSVRUTEUgU0VDVElPTjtQbzswO0w7Ozs7O047Ozs7OworMTA0QjtNWUFOTUFSIFNJR04gU0VDVElPTjtQbzswO0w7Ozs7O047Ozs7OworMTA0QztNWUFOTUFSIFNZTUJPTCBMT0NBVElWRTtQbzswO0w7Ozs7O047Ozs7OworMTA0RDtNWUFOTUFSIFNZTUJPTCBDT01QTEVURUQ7UG87MDtMOzs7OztOOzs7OzsKKzEwNEU7TVlBTk1BUiBTWU1CT0wgQUZPUkVNRU5USU9ORUQ7UG87MDtMOzs7OztOOzs7OzsKKzEwNEY7TVlBTk1BUiBTWU1CT0wgR0VOSVRJVkU7UG87MDtMOzs7OztOOzs7OzsKKzEwNTA7TVlBTk1BUiBMRVRURVIgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDUxO01ZQU5NQVIgTEVUVEVSIFNTQTtMbzswO0w7Ozs7O047Ozs7OworMTA1MjtNWUFOTUFSIExFVFRFUiBWT0NBTElDIFI7TG87MDtMOzs7OztOOzs7OzsKKzEwNTM7TVlBTk1BUiBMRVRURVIgVk9DQUxJQyBSUjtMbzswO0w7Ozs7O047Ozs7OworMTA1NDtNWUFOTUFSIExFVFRFUiBWT0NBTElDIEw7TG87MDtMOzs7OztOOzs7OzsKKzEwNTU7TVlBTk1BUiBMRVRURVIgVk9DQUxJQyBMTDtMbzswO0w7Ozs7O047Ozs7OworMTA1NjtNWUFOTUFSIFZPV0VMIFNJR04gVk9DQUxJQyBSO01jOzA7TDs7Ozs7Tjs7Ozs7CisxMDU3O01ZQU5NQVIgVk9XRUwgU0lHTiBWT0NBTElDIFJSO01jOzA7TDs7Ozs7Tjs7Ozs7CisxMDU4O01ZQU5NQVIgVk9XRUwgU0lHTiBWT0NBTElDIEw7TW47MDtOU007Ozs7O047Ozs7OworMTA1OTtNWUFOTUFSIFZPV0VMIFNJR04gVk9DQUxJQyBMTDtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxMEEwO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIEFOO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQTE7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgQkFOO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQTI7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgR0FOO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQTM7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgRE9OO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQTQ7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgRU47THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBBNTtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBWSU47THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBBNjtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBaRU47THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBBNztHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBUQU47THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBBODtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBJTjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEE5O0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIEtBTjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEFBO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIExBUztMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEFCO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIE1BTjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEFDO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIE5BUjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEFEO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIE9OO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQUU7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgUEFSO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQUY7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgWkhBUjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEIwO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIFJBRTtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEIxO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIFNBTjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEIyO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIFRBUjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEIzO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIFVOO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQjQ7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgUEhBUjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEI1O0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIEtIQVI7THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBCNjtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBHSEFOO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQjc7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgUUFSO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQjg7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgU0hJTjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEI5O0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIENISU47THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBCQTtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBDQU47THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBCQjtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBKSUw7THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBCQztHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBDSUw7THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBCRDtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBDSEFSO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQkU7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgWEFOO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQkY7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgSkhBTjtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEMwO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIEhBRTtMdTswO0w7Ozs7O047O0todXRzdXJpOzs7CisxMEMxO0dFT1JHSUFOIENBUElUQUwgTEVUVEVSIEhFO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQzI7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgSElFO0x1OzA7TDs7Ozs7Tjs7S2h1dHN1cmk7OzsKKzEwQzM7R0VPUkdJQU4gQ0FQSVRBTCBMRVRURVIgV0U7THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBDNDtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBIQVI7THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBDNTtHRU9SR0lBTiBDQVBJVEFMIExFVFRFUiBIT0U7THU7MDtMOzs7OztOOztLaHV0c3VyaTs7OworMTBEMDtHRU9SR0lBTiBMRVRURVIgQU47TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBBTjs7OzsKKzEwRDE7R0VPUkdJQU4gTEVUVEVSIEJBTjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIEJBTjs7OzsKKzEwRDI7R0VPUkdJQU4gTEVUVEVSIEdBTjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIEdBTjs7OzsKKzEwRDM7R0VPUkdJQU4gTEVUVEVSIERPTjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIERPTjs7OzsKKzEwRDQ7R0VPUkdJQU4gTEVUVEVSIEVOO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgRU47Ozs7CisxMEQ1O0dFT1JHSUFOIExFVFRFUiBWSU47TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBWSU47Ozs7CisxMEQ2O0dFT1JHSUFOIExFVFRFUiBaRU47TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBaRU47Ozs7CisxMEQ3O0dFT1JHSUFOIExFVFRFUiBUQU47TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBUQU47Ozs7CisxMEQ4O0dFT1JHSUFOIExFVFRFUiBJTjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIElOOzs7OworMTBEOTtHRU9SR0lBTiBMRVRURVIgS0FOO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgS0FOOzs7OworMTBEQTtHRU9SR0lBTiBMRVRURVIgTEFTO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgTEFTOzs7OworMTBEQjtHRU9SR0lBTiBMRVRURVIgTUFOO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgTUFOOzs7OworMTBEQztHRU9SR0lBTiBMRVRURVIgTkFSO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgTkFSOzs7OworMTBERDtHRU9SR0lBTiBMRVRURVIgT047TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBPTjs7OzsKKzEwREU7R0VPUkdJQU4gTEVUVEVSIFBBUjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIFBBUjs7OzsKKzEwREY7R0VPUkdJQU4gTEVUVEVSIFpIQVI7TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBaSEFSOzs7OworMTBFMDtHRU9SR0lBTiBMRVRURVIgUkFFO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgUkFFOzs7OworMTBFMTtHRU9SR0lBTiBMRVRURVIgU0FOO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgU0FOOzs7OworMTBFMjtHRU9SR0lBTiBMRVRURVIgVEFSO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgVEFSOzs7OworMTBFMztHRU9SR0lBTiBMRVRURVIgVU47TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBVTjs7OzsKKzEwRTQ7R0VPUkdJQU4gTEVUVEVSIFBIQVI7TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBQSEFSOzs7OworMTBFNTtHRU9SR0lBTiBMRVRURVIgS0hBUjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIEtIQVI7Ozs7CisxMEU2O0dFT1JHSUFOIExFVFRFUiBHSEFOO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgR0hBTjs7OzsKKzEwRTc7R0VPUkdJQU4gTEVUVEVSIFFBUjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIFFBUjs7OzsKKzEwRTg7R0VPUkdJQU4gTEVUVEVSIFNISU47TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBTSElOOzs7OworMTBFOTtHRU9SR0lBTiBMRVRURVIgQ0hJTjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIENISU47Ozs7CisxMEVBO0dFT1JHSUFOIExFVFRFUiBDQU47TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBDQU47Ozs7CisxMEVCO0dFT1JHSUFOIExFVFRFUiBKSUw7TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBKSUw7Ozs7CisxMEVDO0dFT1JHSUFOIExFVFRFUiBDSUw7TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBDSUw7Ozs7CisxMEVEO0dFT1JHSUFOIExFVFRFUiBDSEFSO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgQ0hBUjs7OzsKKzEwRUU7R0VPUkdJQU4gTEVUVEVSIFhBTjtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIFhBTjs7OzsKKzEwRUY7R0VPUkdJQU4gTEVUVEVSIEpIQU47TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBKSEFOOzs7OworMTBGMDtHRU9SR0lBTiBMRVRURVIgSEFFO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgSEFFOzs7OworMTBGMTtHRU9SR0lBTiBMRVRURVIgSEU7TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBIRTs7OzsKKzEwRjI7R0VPUkdJQU4gTEVUVEVSIEhJRTtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIEhJRTs7OzsKKzEwRjM7R0VPUkdJQU4gTEVUVEVSIFdFO0xvOzA7TDs7Ozs7TjtHRU9SR0lBTiBTTUFMTCBMRVRURVIgV0U7Ozs7CisxMEY0O0dFT1JHSUFOIExFVFRFUiBIQVI7TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBIQVI7Ozs7CisxMEY1O0dFT1JHSUFOIExFVFRFUiBIT0U7TG87MDtMOzs7OztOO0dFT1JHSUFOIFNNQUxMIExFVFRFUiBIT0U7Ozs7CisxMEY2O0dFT1JHSUFOIExFVFRFUiBGSTtMbzswO0w7Ozs7O047R0VPUkdJQU4gU01BTEwgTEVUVEVSIEZJOzs7OworMTBGNztHRU9SR0lBTiBMRVRURVIgWU47TG87MDtMOzs7OztOOzs7OzsKKzEwRjg7R0VPUkdJQU4gTEVUVEVSIEVMSUZJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMEZCO0dFT1JHSUFOIFBBUkFHUkFQSCBTRVBBUkFUT1I7UG87MDtMOzs7OztOOzs7OzsKKzExMDA7SEFOR1VMIENIT1NFT05HIEtJWUVPSztMbzswO0w7Ozs7O047O2cgKjs7OworMTEwMTtIQU5HVUwgQ0hPU0VPTkcgU1NBTkdLSVlFT0s7TG87MDtMOzs7OztOOztnZyAqOzs7CisxMTAyO0hBTkdVTCBDSE9TRU9ORyBOSUVVTjtMbzswO0w7Ozs7O047O24gKjs7OworMTEwMztIQU5HVUwgQ0hPU0VPTkcgVElLRVVUO0xvOzA7TDs7Ozs7Tjs7ZCAqOzs7CisxMTA0O0hBTkdVTCBDSE9TRU9ORyBTU0FOR1RJS0VVVDtMbzswO0w7Ozs7O047O2RkICo7OzsKKzExMDU7SEFOR1VMIENIT1NFT05HIFJJRVVMO0xvOzA7TDs7Ozs7Tjs7ciAqOzs7CisxMTA2O0hBTkdVTCBDSE9TRU9ORyBNSUVVTTtMbzswO0w7Ozs7O047O20gKjs7OworMTEwNztIQU5HVUwgQ0hPU0VPTkcgUElFVVA7TG87MDtMOzs7OztOOztiICo7OzsKKzExMDg7SEFOR1VMIENIT1NFT05HIFNTQU5HUElFVVA7TG87MDtMOzs7OztOOztiYiAqOzs7CisxMTA5O0hBTkdVTCBDSE9TRU9ORyBTSU9TO0xvOzA7TDs7Ozs7Tjs7cyAqOzs7CisxMTBBO0hBTkdVTCBDSE9TRU9ORyBTU0FOR1NJT1M7TG87MDtMOzs7OztOOztzcyAqOzs7CisxMTBCO0hBTkdVTCBDSE9TRU9ORyBJRVVORztMbzswO0w7Ozs7O047Ozs7OworMTEwQztIQU5HVUwgQ0hPU0VPTkcgQ0lFVUM7TG87MDtMOzs7OztOOztqICo7OzsKKzExMEQ7SEFOR1VMIENIT1NFT05HIFNTQU5HQ0lFVUM7TG87MDtMOzs7OztOOztqaiAqOzs7CisxMTBFO0hBTkdVTCBDSE9TRU9ORyBDSElFVUNIO0xvOzA7TDs7Ozs7Tjs7YyAqOzs7CisxMTBGO0hBTkdVTCBDSE9TRU9ORyBLSElFVUtIO0xvOzA7TDs7Ozs7Tjs7ayAqOzs7CisxMTEwO0hBTkdVTCBDSE9TRU9ORyBUSElFVVRIO0xvOzA7TDs7Ozs7Tjs7dCAqOzs7CisxMTExO0hBTkdVTCBDSE9TRU9ORyBQSElFVVBIO0xvOzA7TDs7Ozs7Tjs7cCAqOzs7CisxMTEyO0hBTkdVTCBDSE9TRU9ORyBISUVVSDtMbzswO0w7Ozs7O047O2ggKjs7OworMTExMztIQU5HVUwgQ0hPU0VPTkcgTklFVU4tS0lZRU9LO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTE0O0hBTkdVTCBDSE9TRU9ORyBTU0FOR05JRVVOO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTE1O0hBTkdVTCBDSE9TRU9ORyBOSUVVTi1USUtFVVQ7TG87MDtMOzs7OztOOzs7OzsKKzExMTY7SEFOR1VMIENIT1NFT05HIE5JRVVOLVBJRVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTE3O0hBTkdVTCBDSE9TRU9ORyBUSUtFVVQtS0lZRU9LO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTE4O0hBTkdVTCBDSE9TRU9ORyBSSUVVTC1OSUVVTjtMbzswO0w7Ozs7O047Ozs7OworMTExOTtIQU5HVUwgQ0hPU0VPTkcgU1NBTkdSSUVVTDtMbzswO0w7Ozs7O047Ozs7OworMTExQTtIQU5HVUwgQ0hPU0VPTkcgUklFVUwtSElFVUg7TG87MDtMOzs7OztOOzs7OzsKKzExMUI7SEFOR1VMIENIT1NFT05HIEtBUFlFT1VOUklFVUw7TG87MDtMOzs7OztOOzs7OzsKKzExMUM7SEFOR1VMIENIT1NFT05HIE1JRVVNLVBJRVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTFEO0hBTkdVTCBDSE9TRU9ORyBLQVBZRU9VTk1JRVVNO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTFFO0hBTkdVTCBDSE9TRU9ORyBQSUVVUC1LSVlFT0s7TG87MDtMOzs7OztOOzs7OzsKKzExMUY7SEFOR1VMIENIT1NFT05HIFBJRVVQLU5JRVVOO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTIwO0hBTkdVTCBDSE9TRU9ORyBQSUVVUC1USUtFVVQ7TG87MDtMOzs7OztOOzs7OzsKKzExMjE7SEFOR1VMIENIT1NFT05HIFBJRVVQLVNJT1M7TG87MDtMOzs7OztOOzs7OzsKKzExMjI7SEFOR1VMIENIT1NFT05HIFBJRVVQLVNJT1MtS0lZRU9LO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTIzO0hBTkdVTCBDSE9TRU9ORyBQSUVVUC1TSU9TLVRJS0VVVDtMbzswO0w7Ozs7O047Ozs7OworMTEyNDtIQU5HVUwgQ0hPU0VPTkcgUElFVVAtU0lPUy1QSUVVUDtMbzswO0w7Ozs7O047Ozs7OworMTEyNTtIQU5HVUwgQ0hPU0VPTkcgUElFVVAtU1NBTkdTSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTI2O0hBTkdVTCBDSE9TRU9ORyBQSUVVUC1TSU9TLUNJRVVDO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTI3O0hBTkdVTCBDSE9TRU9ORyBQSUVVUC1DSUVVQztMbzswO0w7Ozs7O047Ozs7OworMTEyODtIQU5HVUwgQ0hPU0VPTkcgUElFVVAtQ0hJRVVDSDtMbzswO0w7Ozs7O047Ozs7OworMTEyOTtIQU5HVUwgQ0hPU0VPTkcgUElFVVAtVEhJRVVUSDtMbzswO0w7Ozs7O047Ozs7OworMTEyQTtIQU5HVUwgQ0hPU0VPTkcgUElFVVAtUEhJRVVQSDtMbzswO0w7Ozs7O047Ozs7OworMTEyQjtIQU5HVUwgQ0hPU0VPTkcgS0FQWUVPVU5QSUVVUDtMbzswO0w7Ozs7O047Ozs7OworMTEyQztIQU5HVUwgQ0hPU0VPTkcgS0FQWUVPVU5TU0FOR1BJRVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTJEO0hBTkdVTCBDSE9TRU9ORyBTSU9TLUtJWUVPSztMbzswO0w7Ozs7O047Ozs7OworMTEyRTtIQU5HVUwgQ0hPU0VPTkcgU0lPUy1OSUVVTjtMbzswO0w7Ozs7O047Ozs7OworMTEyRjtIQU5HVUwgQ0hPU0VPTkcgU0lPUy1USUtFVVQ7TG87MDtMOzs7OztOOzs7OzsKKzExMzA7SEFOR1VMIENIT1NFT05HIFNJT1MtUklFVUw7TG87MDtMOzs7OztOOzs7OzsKKzExMzE7SEFOR1VMIENIT1NFT05HIFNJT1MtTUlFVU07TG87MDtMOzs7OztOOzs7OzsKKzExMzI7SEFOR1VMIENIT1NFT05HIFNJT1MtUElFVVA7TG87MDtMOzs7OztOOzs7OzsKKzExMzM7SEFOR1VMIENIT1NFT05HIFNJT1MtUElFVVAtS0lZRU9LO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTM0O0hBTkdVTCBDSE9TRU9ORyBTSU9TLVNTQU5HU0lPUztMbzswO0w7Ozs7O047Ozs7OworMTEzNTtIQU5HVUwgQ0hPU0VPTkcgU0lPUy1JRVVORztMbzswO0w7Ozs7O047Ozs7OworMTEzNjtIQU5HVUwgQ0hPU0VPTkcgU0lPUy1DSUVVQztMbzswO0w7Ozs7O047Ozs7OworMTEzNztIQU5HVUwgQ0hPU0VPTkcgU0lPUy1DSElFVUNIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTM4O0hBTkdVTCBDSE9TRU9ORyBTSU9TLUtISUVVS0g7TG87MDtMOzs7OztOOzs7OzsKKzExMzk7SEFOR1VMIENIT1NFT05HIFNJT1MtVEhJRVVUSDtMbzswO0w7Ozs7O047Ozs7OworMTEzQTtIQU5HVUwgQ0hPU0VPTkcgU0lPUy1QSElFVVBIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTNCO0hBTkdVTCBDSE9TRU9ORyBTSU9TLUhJRVVIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTNDO0hBTkdVTCBDSE9TRU9ORyBDSElUVUVVTVNJT1M7TG87MDtMOzs7OztOOzs7OzsKKzExM0Q7SEFOR1VMIENIT1NFT05HIENISVRVRVVNU1NBTkdTSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTNFO0hBTkdVTCBDSE9TRU9ORyBDRU9OR0NISUVVTVNJT1M7TG87MDtMOzs7OztOOzs7OzsKKzExM0Y7SEFOR1VMIENIT1NFT05HIENFT05HQ0hJRVVNU1NBTkdTSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTQwO0hBTkdVTCBDSE9TRU9ORyBQQU5TSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTQxO0hBTkdVTCBDSE9TRU9ORyBJRVVORy1LSVlFT0s7TG87MDtMOzs7OztOOzs7OzsKKzExNDI7SEFOR1VMIENIT1NFT05HIElFVU5HLVRJS0VVVDtMbzswO0w7Ozs7O047Ozs7OworMTE0MztIQU5HVUwgQ0hPU0VPTkcgSUVVTkctTUlFVU07TG87MDtMOzs7OztOOzs7OzsKKzExNDQ7SEFOR1VMIENIT1NFT05HIElFVU5HLVBJRVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTQ1O0hBTkdVTCBDSE9TRU9ORyBJRVVORy1TSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTQ2O0hBTkdVTCBDSE9TRU9ORyBJRVVORy1QQU5TSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTQ3O0hBTkdVTCBDSE9TRU9ORyBTU0FOR0lFVU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTQ4O0hBTkdVTCBDSE9TRU9ORyBJRVVORy1DSUVVQztMbzswO0w7Ozs7O047Ozs7OworMTE0OTtIQU5HVUwgQ0hPU0VPTkcgSUVVTkctQ0hJRVVDSDtMbzswO0w7Ozs7O047Ozs7OworMTE0QTtIQU5HVUwgQ0hPU0VPTkcgSUVVTkctVEhJRVVUSDtMbzswO0w7Ozs7O047Ozs7OworMTE0QjtIQU5HVUwgQ0hPU0VPTkcgSUVVTkctUEhJRVVQSDtMbzswO0w7Ozs7O047Ozs7OworMTE0QztIQU5HVUwgQ0hPU0VPTkcgWUVTSUVVTkc7TG87MDtMOzs7OztOOzs7OzsKKzExNEQ7SEFOR1VMIENIT1NFT05HIENJRVVDLUlFVU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTRFO0hBTkdVTCBDSE9TRU9ORyBDSElUVUVVTUNJRVVDO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTRGO0hBTkdVTCBDSE9TRU9ORyBDSElUVUVVTVNTQU5HQ0lFVUM7TG87MDtMOzs7OztOOzs7OzsKKzExNTA7SEFOR1VMIENIT1NFT05HIENFT05HQ0hJRVVNQ0lFVUM7TG87MDtMOzs7OztOOzs7OzsKKzExNTE7SEFOR1VMIENIT1NFT05HIENFT05HQ0hJRVVNU1NBTkdDSUVVQztMbzswO0w7Ozs7O047Ozs7OworMTE1MjtIQU5HVUwgQ0hPU0VPTkcgQ0hJRVVDSC1LSElFVUtIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTUzO0hBTkdVTCBDSE9TRU9ORyBDSElFVUNILUhJRVVIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTU0O0hBTkdVTCBDSE9TRU9ORyBDSElUVUVVTUNISUVVQ0g7TG87MDtMOzs7OztOOzs7OzsKKzExNTU7SEFOR1VMIENIT1NFT05HIENFT05HQ0hJRVVNQ0hJRVVDSDtMbzswO0w7Ozs7O047Ozs7OworMTE1NjtIQU5HVUwgQ0hPU0VPTkcgUEhJRVVQSC1QSUVVUDtMbzswO0w7Ozs7O047Ozs7OworMTE1NztIQU5HVUwgQ0hPU0VPTkcgS0FQWUVPVU5QSElFVVBIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTU4O0hBTkdVTCBDSE9TRU9ORyBTU0FOR0hJRVVIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTU5O0hBTkdVTCBDSE9TRU9ORyBZRU9SSU5ISUVVSDtMbzswO0w7Ozs7O047Ozs7OworMTE1RjtIQU5HVUwgQ0hPU0VPTkcgRklMTEVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTYwO0hBTkdVTCBKVU5HU0VPTkcgRklMTEVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTYxO0hBTkdVTCBKVU5HU0VPTkcgQTtMbzswO0w7Ozs7O047Ozs7OworMTE2MjtIQU5HVUwgSlVOR1NFT05HIEFFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTYzO0hBTkdVTCBKVU5HU0VPTkcgWUE7TG87MDtMOzs7OztOOzs7OzsKKzExNjQ7SEFOR1VMIEpVTkdTRU9ORyBZQUU7TG87MDtMOzs7OztOOzs7OzsKKzExNjU7SEFOR1VMIEpVTkdTRU9ORyBFTztMbzswO0w7Ozs7O047Ozs7OworMTE2NjtIQU5HVUwgSlVOR1NFT05HIEU7TG87MDtMOzs7OztOOzs7OzsKKzExNjc7SEFOR1VMIEpVTkdTRU9ORyBZRU87TG87MDtMOzs7OztOOzs7OzsKKzExNjg7SEFOR1VMIEpVTkdTRU9ORyBZRTtMbzswO0w7Ozs7O047Ozs7OworMTE2OTtIQU5HVUwgSlVOR1NFT05HIE87TG87MDtMOzs7OztOOzs7OzsKKzExNkE7SEFOR1VMIEpVTkdTRU9ORyBXQTtMbzswO0w7Ozs7O047Ozs7OworMTE2QjtIQU5HVUwgSlVOR1NFT05HIFdBRTtMbzswO0w7Ozs7O047Ozs7OworMTE2QztIQU5HVUwgSlVOR1NFT05HIE9FO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTZEO0hBTkdVTCBKVU5HU0VPTkcgWU87TG87MDtMOzs7OztOOzs7OzsKKzExNkU7SEFOR1VMIEpVTkdTRU9ORyBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTZGO0hBTkdVTCBKVU5HU0VPTkcgV0VPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTcwO0hBTkdVTCBKVU5HU0VPTkcgV0U7TG87MDtMOzs7OztOOzs7OzsKKzExNzE7SEFOR1VMIEpVTkdTRU9ORyBXSTtMbzswO0w7Ozs7O047Ozs7OworMTE3MjtIQU5HVUwgSlVOR1NFT05HIFlVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTczO0hBTkdVTCBKVU5HU0VPTkcgRVU7TG87MDtMOzs7OztOOzs7OzsKKzExNzQ7SEFOR1VMIEpVTkdTRU9ORyBZSTtMbzswO0w7Ozs7O047Ozs7OworMTE3NTtIQU5HVUwgSlVOR1NFT05HIEk7TG87MDtMOzs7OztOOzs7OzsKKzExNzY7SEFOR1VMIEpVTkdTRU9ORyBBLU87TG87MDtMOzs7OztOOzs7OzsKKzExNzc7SEFOR1VMIEpVTkdTRU9ORyBBLVU7TG87MDtMOzs7OztOOzs7OzsKKzExNzg7SEFOR1VMIEpVTkdTRU9ORyBZQS1PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTc5O0hBTkdVTCBKVU5HU0VPTkcgWUEtWU87TG87MDtMOzs7OztOOzs7OzsKKzExN0E7SEFOR1VMIEpVTkdTRU9ORyBFTy1PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTdCO0hBTkdVTCBKVU5HU0VPTkcgRU8tVTtMbzswO0w7Ozs7O047Ozs7OworMTE3QztIQU5HVUwgSlVOR1NFT05HIEVPLUVVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTdEO0hBTkdVTCBKVU5HU0VPTkcgWUVPLU87TG87MDtMOzs7OztOOzs7OzsKKzExN0U7SEFOR1VMIEpVTkdTRU9ORyBZRU8tVTtMbzswO0w7Ozs7O047Ozs7OworMTE3RjtIQU5HVUwgSlVOR1NFT05HIE8tRU87TG87MDtMOzs7OztOOzs7OzsKKzExODA7SEFOR1VMIEpVTkdTRU9ORyBPLUU7TG87MDtMOzs7OztOOzs7OzsKKzExODE7SEFOR1VMIEpVTkdTRU9ORyBPLVlFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTgyO0hBTkdVTCBKVU5HU0VPTkcgTy1PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTgzO0hBTkdVTCBKVU5HU0VPTkcgTy1VO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTg0O0hBTkdVTCBKVU5HU0VPTkcgWU8tWUE7TG87MDtMOzs7OztOOzs7OzsKKzExODU7SEFOR1VMIEpVTkdTRU9ORyBZTy1ZQUU7TG87MDtMOzs7OztOOzs7OzsKKzExODY7SEFOR1VMIEpVTkdTRU9ORyBZTy1ZRU87TG87MDtMOzs7OztOOzs7OzsKKzExODc7SEFOR1VMIEpVTkdTRU9ORyBZTy1PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTg4O0hBTkdVTCBKVU5HU0VPTkcgWU8tSTtMbzswO0w7Ozs7O047Ozs7OworMTE4OTtIQU5HVUwgSlVOR1NFT05HIFUtQTtMbzswO0w7Ozs7O047Ozs7OworMTE4QTtIQU5HVUwgSlVOR1NFT05HIFUtQUU7TG87MDtMOzs7OztOOzs7OzsKKzExOEI7SEFOR1VMIEpVTkdTRU9ORyBVLUVPLUVVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMThDO0hBTkdVTCBKVU5HU0VPTkcgVS1ZRTtMbzswO0w7Ozs7O047Ozs7OworMTE4RDtIQU5HVUwgSlVOR1NFT05HIFUtVTtMbzswO0w7Ozs7O047Ozs7OworMTE4RTtIQU5HVUwgSlVOR1NFT05HIFlVLUE7TG87MDtMOzs7OztOOzs7OzsKKzExOEY7SEFOR1VMIEpVTkdTRU9ORyBZVS1FTztMbzswO0w7Ozs7O047Ozs7OworMTE5MDtIQU5HVUwgSlVOR1NFT05HIFlVLUU7TG87MDtMOzs7OztOOzs7OzsKKzExOTE7SEFOR1VMIEpVTkdTRU9ORyBZVS1ZRU87TG87MDtMOzs7OztOOzs7OzsKKzExOTI7SEFOR1VMIEpVTkdTRU9ORyBZVS1ZRTtMbzswO0w7Ozs7O047Ozs7OworMTE5MztIQU5HVUwgSlVOR1NFT05HIFlVLVU7TG87MDtMOzs7OztOOzs7OzsKKzExOTQ7SEFOR1VMIEpVTkdTRU9ORyBZVS1JO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTk1O0hBTkdVTCBKVU5HU0VPTkcgRVUtVTtMbzswO0w7Ozs7O047Ozs7OworMTE5NjtIQU5HVUwgSlVOR1NFT05HIEVVLUVVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTk3O0hBTkdVTCBKVU5HU0VPTkcgWUktVTtMbzswO0w7Ozs7O047Ozs7OworMTE5ODtIQU5HVUwgSlVOR1NFT05HIEktQTtMbzswO0w7Ozs7O047Ozs7OworMTE5OTtIQU5HVUwgSlVOR1NFT05HIEktWUE7TG87MDtMOzs7OztOOzs7OzsKKzExOUE7SEFOR1VMIEpVTkdTRU9ORyBJLU87TG87MDtMOzs7OztOOzs7OzsKKzExOUI7SEFOR1VMIEpVTkdTRU9ORyBJLVU7TG87MDtMOzs7OztOOzs7OzsKKzExOUM7SEFOR1VMIEpVTkdTRU9ORyBJLUVVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTlEO0hBTkdVTCBKVU5HU0VPTkcgSS1BUkFFQTtMbzswO0w7Ozs7O047Ozs7OworMTE5RTtIQU5HVUwgSlVOR1NFT05HIEFSQUVBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMTlGO0hBTkdVTCBKVU5HU0VPTkcgQVJBRUEtRU87TG87MDtMOzs7OztOOzs7OzsKKzExQTA7SEFOR1VMIEpVTkdTRU9ORyBBUkFFQS1VO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUExO0hBTkdVTCBKVU5HU0VPTkcgQVJBRUEtSTtMbzswO0w7Ozs7O047Ozs7OworMTFBMjtIQU5HVUwgSlVOR1NFT05HIFNTQU5HQVJBRUE7TG87MDtMOzs7OztOOzs7OzsKKzExQTg7SEFOR1VMIEpPTkdTRU9ORyBLSVlFT0s7TG87MDtMOzs7OztOOztnICo7OzsKKzExQTk7SEFOR1VMIEpPTkdTRU9ORyBTU0FOR0tJWUVPSztMbzswO0w7Ozs7O047O2dnICo7OzsKKzExQUE7SEFOR1VMIEpPTkdTRU9ORyBLSVlFT0stU0lPUztMbzswO0w7Ozs7O047O2dzICo7OzsKKzExQUI7SEFOR1VMIEpPTkdTRU9ORyBOSUVVTjtMbzswO0w7Ozs7O047O24gKjs7OworMTFBQztIQU5HVUwgSk9OR1NFT05HIE5JRVVOLUNJRVVDO0xvOzA7TDs7Ozs7Tjs7bmogKjs7OworMTFBRDtIQU5HVUwgSk9OR1NFT05HIE5JRVVOLUhJRVVIO0xvOzA7TDs7Ozs7Tjs7bmggKjs7OworMTFBRTtIQU5HVUwgSk9OR1NFT05HIFRJS0VVVDtMbzswO0w7Ozs7O047O2QgKjs7OworMTFBRjtIQU5HVUwgSk9OR1NFT05HIFJJRVVMO0xvOzA7TDs7Ozs7Tjs7bCAqOzs7CisxMUIwO0hBTkdVTCBKT05HU0VPTkcgUklFVUwtS0lZRU9LO0xvOzA7TDs7Ozs7Tjs7bGcgKjs7OworMTFCMTtIQU5HVUwgSk9OR1NFT05HIFJJRVVMLU1JRVVNO0xvOzA7TDs7Ozs7Tjs7bG0gKjs7OworMTFCMjtIQU5HVUwgSk9OR1NFT05HIFJJRVVMLVBJRVVQO0xvOzA7TDs7Ozs7Tjs7bGIgKjs7OworMTFCMztIQU5HVUwgSk9OR1NFT05HIFJJRVVMLVNJT1M7TG87MDtMOzs7OztOOztscyAqOzs7CisxMUI0O0hBTkdVTCBKT05HU0VPTkcgUklFVUwtVEhJRVVUSDtMbzswO0w7Ozs7O047O2x0ICo7OzsKKzExQjU7SEFOR1VMIEpPTkdTRU9ORyBSSUVVTC1QSElFVVBIO0xvOzA7TDs7Ozs7Tjs7bHAgKjs7OworMTFCNjtIQU5HVUwgSk9OR1NFT05HIFJJRVVMLUhJRVVIO0xvOzA7TDs7Ozs7Tjs7bGggKjs7OworMTFCNztIQU5HVUwgSk9OR1NFT05HIE1JRVVNO0xvOzA7TDs7Ozs7Tjs7bSAqOzs7CisxMUI4O0hBTkdVTCBKT05HU0VPTkcgUElFVVA7TG87MDtMOzs7OztOOztiICo7OzsKKzExQjk7SEFOR1VMIEpPTkdTRU9ORyBQSUVVUC1TSU9TO0xvOzA7TDs7Ozs7Tjs7YnMgKjs7OworMTFCQTtIQU5HVUwgSk9OR1NFT05HIFNJT1M7TG87MDtMOzs7OztOOztzICo7OzsKKzExQkI7SEFOR1VMIEpPTkdTRU9ORyBTU0FOR1NJT1M7TG87MDtMOzs7OztOOztzcyAqOzs7CisxMUJDO0hBTkdVTCBKT05HU0VPTkcgSUVVTkc7TG87MDtMOzs7OztOOztuZyAqOzs7CisxMUJEO0hBTkdVTCBKT05HU0VPTkcgQ0lFVUM7TG87MDtMOzs7OztOOztqICo7OzsKKzExQkU7SEFOR1VMIEpPTkdTRU9ORyBDSElFVUNIO0xvOzA7TDs7Ozs7Tjs7YyAqOzs7CisxMUJGO0hBTkdVTCBKT05HU0VPTkcgS0hJRVVLSDtMbzswO0w7Ozs7O047O2sgKjs7OworMTFDMDtIQU5HVUwgSk9OR1NFT05HIFRISUVVVEg7TG87MDtMOzs7OztOOzt0ICo7OzsKKzExQzE7SEFOR1VMIEpPTkdTRU9ORyBQSElFVVBIO0xvOzA7TDs7Ozs7Tjs7cCAqOzs7CisxMUMyO0hBTkdVTCBKT05HU0VPTkcgSElFVUg7TG87MDtMOzs7OztOOztoICo7OzsKKzExQzM7SEFOR1VMIEpPTkdTRU9ORyBLSVlFT0stUklFVUw7TG87MDtMOzs7OztOOzs7OzsKKzExQzQ7SEFOR1VMIEpPTkdTRU9ORyBLSVlFT0stU0lPUy1LSVlFT0s7TG87MDtMOzs7OztOOzs7OzsKKzExQzU7SEFOR1VMIEpPTkdTRU9ORyBOSUVVTi1LSVlFT0s7TG87MDtMOzs7OztOOzs7OzsKKzExQzY7SEFOR1VMIEpPTkdTRU9ORyBOSUVVTi1USUtFVVQ7TG87MDtMOzs7OztOOzs7OzsKKzExQzc7SEFOR1VMIEpPTkdTRU9ORyBOSUVVTi1TSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUM4O0hBTkdVTCBKT05HU0VPTkcgTklFVU4tUEFOU0lPUztMbzswO0w7Ozs7O047Ozs7OworMTFDOTtIQU5HVUwgSk9OR1NFT05HIE5JRVVOLVRISUVVVEg7TG87MDtMOzs7OztOOzs7OzsKKzExQ0E7SEFOR1VMIEpPTkdTRU9ORyBUSUtFVVQtS0lZRU9LO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUNCO0hBTkdVTCBKT05HU0VPTkcgVElLRVVULVJJRVVMO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUNDO0hBTkdVTCBKT05HU0VPTkcgUklFVUwtS0lZRU9LLVNJT1M7TG87MDtMOzs7OztOOzs7OzsKKzExQ0Q7SEFOR1VMIEpPTkdTRU9ORyBSSUVVTC1OSUVVTjtMbzswO0w7Ozs7O047Ozs7OworMTFDRTtIQU5HVUwgSk9OR1NFT05HIFJJRVVMLVRJS0VVVDtMbzswO0w7Ozs7O047Ozs7OworMTFDRjtIQU5HVUwgSk9OR1NFT05HIFJJRVVMLVRJS0VVVC1ISUVVSDtMbzswO0w7Ozs7O047Ozs7OworMTFEMDtIQU5HVUwgSk9OR1NFT05HIFNTQU5HUklFVUw7TG87MDtMOzs7OztOOzs7OzsKKzExRDE7SEFOR1VMIEpPTkdTRU9ORyBSSUVVTC1NSUVVTS1LSVlFT0s7TG87MDtMOzs7OztOOzs7OzsKKzExRDI7SEFOR1VMIEpPTkdTRU9ORyBSSUVVTC1NSUVVTS1TSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUQzO0hBTkdVTCBKT05HU0VPTkcgUklFVUwtUElFVVAtU0lPUztMbzswO0w7Ozs7O047Ozs7OworMTFENDtIQU5HVUwgSk9OR1NFT05HIFJJRVVMLVBJRVVQLUhJRVVIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUQ1O0hBTkdVTCBKT05HU0VPTkcgUklFVUwtS0FQWUVPVU5QSUVVUDtMbzswO0w7Ozs7O047Ozs7OworMTFENjtIQU5HVUwgSk9OR1NFT05HIFJJRVVMLVNTQU5HU0lPUztMbzswO0w7Ozs7O047Ozs7OworMTFENztIQU5HVUwgSk9OR1NFT05HIFJJRVVMLVBBTlNJT1M7TG87MDtMOzs7OztOOzs7OzsKKzExRDg7SEFOR1VMIEpPTkdTRU9ORyBSSUVVTC1LSElFVUtIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUQ5O0hBTkdVTCBKT05HU0VPTkcgUklFVUwtWUVPUklOSElFVUg7TG87MDtMOzs7OztOOzs7OzsKKzExREE7SEFOR1VMIEpPTkdTRU9ORyBNSUVVTS1LSVlFT0s7TG87MDtMOzs7OztOOzs7OzsKKzExREI7SEFOR1VMIEpPTkdTRU9ORyBNSUVVTS1SSUVVTDtMbzswO0w7Ozs7O047Ozs7OworMTFEQztIQU5HVUwgSk9OR1NFT05HIE1JRVVNLVBJRVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUREO0hBTkdVTCBKT05HU0VPTkcgTUlFVU0tU0lPUztMbzswO0w7Ozs7O047Ozs7OworMTFERTtIQU5HVUwgSk9OR1NFT05HIE1JRVVNLVNTQU5HU0lPUztMbzswO0w7Ozs7O047Ozs7OworMTFERjtIQU5HVUwgSk9OR1NFT05HIE1JRVVNLVBBTlNJT1M7TG87MDtMOzs7OztOOzs7OzsKKzExRTA7SEFOR1VMIEpPTkdTRU9ORyBNSUVVTS1DSElFVUNIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUUxO0hBTkdVTCBKT05HU0VPTkcgTUlFVU0tSElFVUg7TG87MDtMOzs7OztOOzs7OzsKKzExRTI7SEFOR1VMIEpPTkdTRU9ORyBLQVBZRU9VTk1JRVVNO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUUzO0hBTkdVTCBKT05HU0VPTkcgUElFVVAtUklFVUw7TG87MDtMOzs7OztOOzs7OzsKKzExRTQ7SEFOR1VMIEpPTkdTRU9ORyBQSUVVUC1QSElFVVBIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUU1O0hBTkdVTCBKT05HU0VPTkcgUElFVVAtSElFVUg7TG87MDtMOzs7OztOOzs7OzsKKzExRTY7SEFOR1VMIEpPTkdTRU9ORyBLQVBZRU9VTlBJRVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUU3O0hBTkdVTCBKT05HU0VPTkcgU0lPUy1LSVlFT0s7TG87MDtMOzs7OztOOzs7OzsKKzExRTg7SEFOR1VMIEpPTkdTRU9ORyBTSU9TLVRJS0VVVDtMbzswO0w7Ozs7O047Ozs7OworMTFFOTtIQU5HVUwgSk9OR1NFT05HIFNJT1MtUklFVUw7TG87MDtMOzs7OztOOzs7OzsKKzExRUE7SEFOR1VMIEpPTkdTRU9ORyBTSU9TLVBJRVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUVCO0hBTkdVTCBKT05HU0VPTkcgUEFOU0lPUztMbzswO0w7Ozs7O047Ozs7OworMTFFQztIQU5HVUwgSk9OR1NFT05HIElFVU5HLUtJWUVPSztMbzswO0w7Ozs7O047Ozs7OworMTFFRDtIQU5HVUwgSk9OR1NFT05HIElFVU5HLVNTQU5HS0lZRU9LO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUVFO0hBTkdVTCBKT05HU0VPTkcgU1NBTkdJRVVORztMbzswO0w7Ozs7O047Ozs7OworMTFFRjtIQU5HVUwgSk9OR1NFT05HIElFVU5HLUtISUVVS0g7TG87MDtMOzs7OztOOzs7OzsKKzExRjA7SEFOR1VMIEpPTkdTRU9ORyBZRVNJRVVORztMbzswO0w7Ozs7O047Ozs7OworMTFGMTtIQU5HVUwgSk9OR1NFT05HIFlFU0lFVU5HLVNJT1M7TG87MDtMOzs7OztOOzs7OzsKKzExRjI7SEFOR1VMIEpPTkdTRU9ORyBZRVNJRVVORy1QQU5TSU9TO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUYzO0hBTkdVTCBKT05HU0VPTkcgUEhJRVVQSC1QSUVVUDtMbzswO0w7Ozs7O047Ozs7OworMTFGNDtIQU5HVUwgSk9OR1NFT05HIEtBUFlFT1VOUEhJRVVQSDtMbzswO0w7Ozs7O047Ozs7OworMTFGNTtIQU5HVUwgSk9OR1NFT05HIEhJRVVILU5JRVVOO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUY2O0hBTkdVTCBKT05HU0VPTkcgSElFVUgtUklFVUw7TG87MDtMOzs7OztOOzs7OzsKKzExRjc7SEFOR1VMIEpPTkdTRU9ORyBISUVVSC1NSUVVTTtMbzswO0w7Ozs7O047Ozs7OworMTFGODtIQU5HVUwgSk9OR1NFT05HIEhJRVVILVBJRVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMUY5O0hBTkdVTCBKT05HU0VPTkcgWUVPUklOSElFVUg7TG87MDtMOzs7OztOOzs7OzsKKzEyMDA7RVRISU9QSUMgU1lMTEFCTEUgSEE7TG87MDtMOzs7OztOOzs7OzsKKzEyMDE7RVRISU9QSUMgU1lMTEFCTEUgSFU7TG87MDtMOzs7OztOOzs7OzsKKzEyMDI7RVRISU9QSUMgU1lMTEFCTEUgSEk7TG87MDtMOzs7OztOOzs7OzsKKzEyMDM7RVRISU9QSUMgU1lMTEFCTEUgSEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjA0O0VUSElPUElDIFNZTExBQkxFIEhFRTtMbzswO0w7Ozs7O047Ozs7OworMTIwNTtFVEhJT1BJQyBTWUxMQUJMRSBIRTtMbzswO0w7Ozs7O047Ozs7OworMTIwNjtFVEhJT1BJQyBTWUxMQUJMRSBITztMbzswO0w7Ozs7O047Ozs7OworMTIwODtFVEhJT1BJQyBTWUxMQUJMRSBMQTtMbzswO0w7Ozs7O047Ozs7OworMTIwOTtFVEhJT1BJQyBTWUxMQUJMRSBMVTtMbzswO0w7Ozs7O047Ozs7OworMTIwQTtFVEhJT1BJQyBTWUxMQUJMRSBMSTtMbzswO0w7Ozs7O047Ozs7OworMTIwQjtFVEhJT1BJQyBTWUxMQUJMRSBMQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyMEM7RVRISU9QSUMgU1lMTEFCTEUgTEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjBEO0VUSElPUElDIFNZTExBQkxFIExFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjBFO0VUSElPUElDIFNZTExBQkxFIExPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjBGO0VUSElPUElDIFNZTExBQkxFIExXQTtMbzswO0w7Ozs7O047Ozs7OworMTIxMDtFVEhJT1BJQyBTWUxMQUJMRSBISEE7TG87MDtMOzs7OztOOzs7OzsKKzEyMTE7RVRISU9QSUMgU1lMTEFCTEUgSEhVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjEyO0VUSElPUElDIFNZTExBQkxFIEhISTtMbzswO0w7Ozs7O047Ozs7OworMTIxMztFVEhJT1BJQyBTWUxMQUJMRSBISEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjE0O0VUSElPUElDIFNZTExBQkxFIEhIRUU7TG87MDtMOzs7OztOOzs7OzsKKzEyMTU7RVRISU9QSUMgU1lMTEFCTEUgSEhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjE2O0VUSElPUElDIFNZTExBQkxFIEhITztMbzswO0w7Ozs7O047Ozs7OworMTIxNztFVEhJT1BJQyBTWUxMQUJMRSBISFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjE4O0VUSElPUElDIFNZTExBQkxFIE1BO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjE5O0VUSElPUElDIFNZTExBQkxFIE1VO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjFBO0VUSElPUElDIFNZTExBQkxFIE1JO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjFCO0VUSElPUElDIFNZTExBQkxFIE1BQTtMbzswO0w7Ozs7O047Ozs7OworMTIxQztFVEhJT1BJQyBTWUxMQUJMRSBNRUU7TG87MDtMOzs7OztOOzs7OzsKKzEyMUQ7RVRISU9QSUMgU1lMTEFCTEUgTUU7TG87MDtMOzs7OztOOzs7OzsKKzEyMUU7RVRISU9QSUMgU1lMTEFCTEUgTU87TG87MDtMOzs7OztOOzs7OzsKKzEyMUY7RVRISU9QSUMgU1lMTEFCTEUgTVdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjIwO0VUSElPUElDIFNZTExBQkxFIFNaQTtMbzswO0w7Ozs7O047Ozs7OworMTIyMTtFVEhJT1BJQyBTWUxMQUJMRSBTWlU7TG87MDtMOzs7OztOOzs7OzsKKzEyMjI7RVRISU9QSUMgU1lMTEFCTEUgU1pJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjIzO0VUSElPUElDIFNZTExBQkxFIFNaQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyMjQ7RVRISU9QSUMgU1lMTEFCTEUgU1pFRTtMbzswO0w7Ozs7O047Ozs7OworMTIyNTtFVEhJT1BJQyBTWUxMQUJMRSBTWkU7TG87MDtMOzs7OztOOzs7OzsKKzEyMjY7RVRISU9QSUMgU1lMTEFCTEUgU1pPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjI3O0VUSElPUElDIFNZTExBQkxFIFNaV0E7TG87MDtMOzs7OztOOzs7OzsKKzEyMjg7RVRISU9QSUMgU1lMTEFCTEUgUkE7TG87MDtMOzs7OztOOzs7OzsKKzEyMjk7RVRISU9QSUMgU1lMTEFCTEUgUlU7TG87MDtMOzs7OztOOzs7OzsKKzEyMkE7RVRISU9QSUMgU1lMTEFCTEUgUkk7TG87MDtMOzs7OztOOzs7OzsKKzEyMkI7RVRISU9QSUMgU1lMTEFCTEUgUkFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjJDO0VUSElPUElDIFNZTExBQkxFIFJFRTtMbzswO0w7Ozs7O047Ozs7OworMTIyRDtFVEhJT1BJQyBTWUxMQUJMRSBSRTtMbzswO0w7Ozs7O047Ozs7OworMTIyRTtFVEhJT1BJQyBTWUxMQUJMRSBSTztMbzswO0w7Ozs7O047Ozs7OworMTIyRjtFVEhJT1BJQyBTWUxMQUJMRSBSV0E7TG87MDtMOzs7OztOOzs7OzsKKzEyMzA7RVRISU9QSUMgU1lMTEFCTEUgU0E7TG87MDtMOzs7OztOOzs7OzsKKzEyMzE7RVRISU9QSUMgU1lMTEFCTEUgU1U7TG87MDtMOzs7OztOOzs7OzsKKzEyMzI7RVRISU9QSUMgU1lMTEFCTEUgU0k7TG87MDtMOzs7OztOOzs7OzsKKzEyMzM7RVRISU9QSUMgU1lMTEFCTEUgU0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjM0O0VUSElPUElDIFNZTExBQkxFIFNFRTtMbzswO0w7Ozs7O047Ozs7OworMTIzNTtFVEhJT1BJQyBTWUxMQUJMRSBTRTtMbzswO0w7Ozs7O047Ozs7OworMTIzNjtFVEhJT1BJQyBTWUxMQUJMRSBTTztMbzswO0w7Ozs7O047Ozs7OworMTIzNztFVEhJT1BJQyBTWUxMQUJMRSBTV0E7TG87MDtMOzs7OztOOzs7OzsKKzEyMzg7RVRISU9QSUMgU1lMTEFCTEUgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjM5O0VUSElPUElDIFNZTExBQkxFIFNIVTtMbzswO0w7Ozs7O047Ozs7OworMTIzQTtFVEhJT1BJQyBTWUxMQUJMRSBTSEk7TG87MDtMOzs7OztOOzs7OzsKKzEyM0I7RVRISU9QSUMgU1lMTEFCTEUgU0hBQTtMbzswO0w7Ozs7O047Ozs7OworMTIzQztFVEhJT1BJQyBTWUxMQUJMRSBTSEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjNEO0VUSElPUElDIFNZTExBQkxFIFNIRTtMbzswO0w7Ozs7O047Ozs7OworMTIzRTtFVEhJT1BJQyBTWUxMQUJMRSBTSE87TG87MDtMOzs7OztOOzs7OzsKKzEyM0Y7RVRISU9QSUMgU1lMTEFCTEUgU0hXQTtMbzswO0w7Ozs7O047Ozs7OworMTI0MDtFVEhJT1BJQyBTWUxMQUJMRSBRQTtMbzswO0w7Ozs7O047Ozs7OworMTI0MTtFVEhJT1BJQyBTWUxMQUJMRSBRVTtMbzswO0w7Ozs7O047Ozs7OworMTI0MjtFVEhJT1BJQyBTWUxMQUJMRSBRSTtMbzswO0w7Ozs7O047Ozs7OworMTI0MztFVEhJT1BJQyBTWUxMQUJMRSBRQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyNDQ7RVRISU9QSUMgU1lMTEFCTEUgUUVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjQ1O0VUSElPUElDIFNZTExBQkxFIFFFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjQ2O0VUSElPUElDIFNZTExBQkxFIFFPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjQ4O0VUSElPUElDIFNZTExBQkxFIFFXQTtMbzswO0w7Ozs7O047Ozs7OworMTI0QTtFVEhJT1BJQyBTWUxMQUJMRSBRV0k7TG87MDtMOzs7OztOOzs7OzsKKzEyNEI7RVRISU9QSUMgU1lMTEFCTEUgUVdBQTtMbzswO0w7Ozs7O047Ozs7OworMTI0QztFVEhJT1BJQyBTWUxMQUJMRSBRV0VFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjREO0VUSElPUElDIFNZTExBQkxFIFFXRTtMbzswO0w7Ozs7O047Ozs7OworMTI1MDtFVEhJT1BJQyBTWUxMQUJMRSBRSEE7TG87MDtMOzs7OztOOzs7OzsKKzEyNTE7RVRISU9QSUMgU1lMTEFCTEUgUUhVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjUyO0VUSElPUElDIFNZTExBQkxFIFFISTtMbzswO0w7Ozs7O047Ozs7OworMTI1MztFVEhJT1BJQyBTWUxMQUJMRSBRSEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjU0O0VUSElPUElDIFNZTExBQkxFIFFIRUU7TG87MDtMOzs7OztOOzs7OzsKKzEyNTU7RVRISU9QSUMgU1lMTEFCTEUgUUhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjU2O0VUSElPUElDIFNZTExBQkxFIFFITztMbzswO0w7Ozs7O047Ozs7OworMTI1ODtFVEhJT1BJQyBTWUxMQUJMRSBRSFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjVBO0VUSElPUElDIFNZTExBQkxFIFFIV0k7TG87MDtMOzs7OztOOzs7OzsKKzEyNUI7RVRISU9QSUMgU1lMTEFCTEUgUUhXQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyNUM7RVRISU9QSUMgU1lMTEFCTEUgUUhXRUU7TG87MDtMOzs7OztOOzs7OzsKKzEyNUQ7RVRISU9QSUMgU1lMTEFCTEUgUUhXRTtMbzswO0w7Ozs7O047Ozs7OworMTI2MDtFVEhJT1BJQyBTWUxMQUJMRSBCQTtMbzswO0w7Ozs7O047Ozs7OworMTI2MTtFVEhJT1BJQyBTWUxMQUJMRSBCVTtMbzswO0w7Ozs7O047Ozs7OworMTI2MjtFVEhJT1BJQyBTWUxMQUJMRSBCSTtMbzswO0w7Ozs7O047Ozs7OworMTI2MztFVEhJT1BJQyBTWUxMQUJMRSBCQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyNjQ7RVRISU9QSUMgU1lMTEFCTEUgQkVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjY1O0VUSElPUElDIFNZTExBQkxFIEJFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjY2O0VUSElPUElDIFNZTExBQkxFIEJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjY3O0VUSElPUElDIFNZTExBQkxFIEJXQTtMbzswO0w7Ozs7O047Ozs7OworMTI2ODtFVEhJT1BJQyBTWUxMQUJMRSBWQTtMbzswO0w7Ozs7O047Ozs7OworMTI2OTtFVEhJT1BJQyBTWUxMQUJMRSBWVTtMbzswO0w7Ozs7O047Ozs7OworMTI2QTtFVEhJT1BJQyBTWUxMQUJMRSBWSTtMbzswO0w7Ozs7O047Ozs7OworMTI2QjtFVEhJT1BJQyBTWUxMQUJMRSBWQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyNkM7RVRISU9QSUMgU1lMTEFCTEUgVkVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjZEO0VUSElPUElDIFNZTExBQkxFIFZFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjZFO0VUSElPUElDIFNZTExBQkxFIFZPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjZGO0VUSElPUElDIFNZTExBQkxFIFZXQTtMbzswO0w7Ozs7O047Ozs7OworMTI3MDtFVEhJT1BJQyBTWUxMQUJMRSBUQTtMbzswO0w7Ozs7O047Ozs7OworMTI3MTtFVEhJT1BJQyBTWUxMQUJMRSBUVTtMbzswO0w7Ozs7O047Ozs7OworMTI3MjtFVEhJT1BJQyBTWUxMQUJMRSBUSTtMbzswO0w7Ozs7O047Ozs7OworMTI3MztFVEhJT1BJQyBTWUxMQUJMRSBUQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyNzQ7RVRISU9QSUMgU1lMTEFCTEUgVEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjc1O0VUSElPUElDIFNZTExBQkxFIFRFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjc2O0VUSElPUElDIFNZTExBQkxFIFRPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjc3O0VUSElPUElDIFNZTExBQkxFIFRXQTtMbzswO0w7Ozs7O047Ozs7OworMTI3ODtFVEhJT1BJQyBTWUxMQUJMRSBDQTtMbzswO0w7Ozs7O047Ozs7OworMTI3OTtFVEhJT1BJQyBTWUxMQUJMRSBDVTtMbzswO0w7Ozs7O047Ozs7OworMTI3QTtFVEhJT1BJQyBTWUxMQUJMRSBDSTtMbzswO0w7Ozs7O047Ozs7OworMTI3QjtFVEhJT1BJQyBTWUxMQUJMRSBDQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyN0M7RVRISU9QSUMgU1lMTEFCTEUgQ0VFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjdEO0VUSElPUElDIFNZTExBQkxFIENFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjdFO0VUSElPUElDIFNZTExBQkxFIENPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjdGO0VUSElPUElDIFNZTExBQkxFIENXQTtMbzswO0w7Ozs7O047Ozs7OworMTI4MDtFVEhJT1BJQyBTWUxMQUJMRSBYQTtMbzswO0w7Ozs7O047Ozs7OworMTI4MTtFVEhJT1BJQyBTWUxMQUJMRSBYVTtMbzswO0w7Ozs7O047Ozs7OworMTI4MjtFVEhJT1BJQyBTWUxMQUJMRSBYSTtMbzswO0w7Ozs7O047Ozs7OworMTI4MztFVEhJT1BJQyBTWUxMQUJMRSBYQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyODQ7RVRISU9QSUMgU1lMTEFCTEUgWEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjg1O0VUSElPUElDIFNZTExBQkxFIFhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjg2O0VUSElPUElDIFNZTExBQkxFIFhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjg4O0VUSElPUElDIFNZTExBQkxFIFhXQTtMbzswO0w7Ozs7O047Ozs7OworMTI4QTtFVEhJT1BJQyBTWUxMQUJMRSBYV0k7TG87MDtMOzs7OztOOzs7OzsKKzEyOEI7RVRISU9QSUMgU1lMTEFCTEUgWFdBQTtMbzswO0w7Ozs7O047Ozs7OworMTI4QztFVEhJT1BJQyBTWUxMQUJMRSBYV0VFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjhEO0VUSElPUElDIFNZTExBQkxFIFhXRTtMbzswO0w7Ozs7O047Ozs7OworMTI5MDtFVEhJT1BJQyBTWUxMQUJMRSBOQTtMbzswO0w7Ozs7O047Ozs7OworMTI5MTtFVEhJT1BJQyBTWUxMQUJMRSBOVTtMbzswO0w7Ozs7O047Ozs7OworMTI5MjtFVEhJT1BJQyBTWUxMQUJMRSBOSTtMbzswO0w7Ozs7O047Ozs7OworMTI5MztFVEhJT1BJQyBTWUxMQUJMRSBOQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyOTQ7RVRISU9QSUMgU1lMTEFCTEUgTkVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjk1O0VUSElPUElDIFNZTExBQkxFIE5FO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjk2O0VUSElPUElDIFNZTExBQkxFIE5PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjk3O0VUSElPUElDIFNZTExBQkxFIE5XQTtMbzswO0w7Ozs7O047Ozs7OworMTI5ODtFVEhJT1BJQyBTWUxMQUJMRSBOWUE7TG87MDtMOzs7OztOOzs7OzsKKzEyOTk7RVRISU9QSUMgU1lMTEFCTEUgTllVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjlBO0VUSElPUElDIFNZTExBQkxFIE5ZSTtMbzswO0w7Ozs7O047Ozs7OworMTI5QjtFVEhJT1BJQyBTWUxMQUJMRSBOWUFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjlDO0VUSElPUElDIFNZTExBQkxFIE5ZRUU7TG87MDtMOzs7OztOOzs7OzsKKzEyOUQ7RVRISU9QSUMgU1lMTEFCTEUgTllFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMjlFO0VUSElPUElDIFNZTExBQkxFIE5ZTztMbzswO0w7Ozs7O047Ozs7OworMTI5RjtFVEhJT1BJQyBTWUxMQUJMRSBOWVdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkEwO0VUSElPUElDIFNZTExBQkxFIEdMT1RUQUwgQTtMbzswO0w7Ozs7O047Ozs7OworMTJBMTtFVEhJT1BJQyBTWUxMQUJMRSBHTE9UVEFMIFU7TG87MDtMOzs7OztOOzs7OzsKKzEyQTI7RVRISU9QSUMgU1lMTEFCTEUgR0xPVFRBTCBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkEzO0VUSElPUElDIFNZTExBQkxFIEdMT1RUQUwgQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyQTQ7RVRISU9QSUMgU1lMTEFCTEUgR0xPVFRBTCBFRTtMbzswO0w7Ozs7O047Ozs7OworMTJBNTtFVEhJT1BJQyBTWUxMQUJMRSBHTE9UVEFMIEU7TG87MDtMOzs7OztOOzs7OzsKKzEyQTY7RVRISU9QSUMgU1lMTEFCTEUgR0xPVFRBTCBPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkE3O0VUSElPUElDIFNZTExBQkxFIEdMT1RUQUwgV0E7TG87MDtMOzs7OztOOzs7OzsKKzEyQTg7RVRISU9QSUMgU1lMTEFCTEUgS0E7TG87MDtMOzs7OztOOzs7OzsKKzEyQTk7RVRISU9QSUMgU1lMTEFCTEUgS1U7TG87MDtMOzs7OztOOzs7OzsKKzEyQUE7RVRISU9QSUMgU1lMTEFCTEUgS0k7TG87MDtMOzs7OztOOzs7OzsKKzEyQUI7RVRISU9QSUMgU1lMTEFCTEUgS0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkFDO0VUSElPUElDIFNZTExBQkxFIEtFRTtMbzswO0w7Ozs7O047Ozs7OworMTJBRDtFVEhJT1BJQyBTWUxMQUJMRSBLRTtMbzswO0w7Ozs7O047Ozs7OworMTJBRTtFVEhJT1BJQyBTWUxMQUJMRSBLTztMbzswO0w7Ozs7O047Ozs7OworMTJCMDtFVEhJT1BJQyBTWUxMQUJMRSBLV0E7TG87MDtMOzs7OztOOzs7OzsKKzEyQjI7RVRISU9QSUMgU1lMTEFCTEUgS1dJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkIzO0VUSElPUElDIFNZTExBQkxFIEtXQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyQjQ7RVRISU9QSUMgU1lMTEFCTEUgS1dFRTtMbzswO0w7Ozs7O047Ozs7OworMTJCNTtFVEhJT1BJQyBTWUxMQUJMRSBLV0U7TG87MDtMOzs7OztOOzs7OzsKKzEyQjg7RVRISU9QSUMgU1lMTEFCTEUgS1hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkI5O0VUSElPUElDIFNZTExBQkxFIEtYVTtMbzswO0w7Ozs7O047Ozs7OworMTJCQTtFVEhJT1BJQyBTWUxMQUJMRSBLWEk7TG87MDtMOzs7OztOOzs7OzsKKzEyQkI7RVRISU9QSUMgU1lMTEFCTEUgS1hBQTtMbzswO0w7Ozs7O047Ozs7OworMTJCQztFVEhJT1BJQyBTWUxMQUJMRSBLWEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkJEO0VUSElPUElDIFNZTExBQkxFIEtYRTtMbzswO0w7Ozs7O047Ozs7OworMTJCRTtFVEhJT1BJQyBTWUxMQUJMRSBLWE87TG87MDtMOzs7OztOOzs7OzsKKzEyQzA7RVRISU9QSUMgU1lMTEFCTEUgS1hXQTtMbzswO0w7Ozs7O047Ozs7OworMTJDMjtFVEhJT1BJQyBTWUxMQUJMRSBLWFdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkMzO0VUSElPUElDIFNZTExBQkxFIEtYV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkM0O0VUSElPUElDIFNZTExBQkxFIEtYV0VFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkM1O0VUSElPUElDIFNZTExBQkxFIEtYV0U7TG87MDtMOzs7OztOOzs7OzsKKzEyQzg7RVRISU9QSUMgU1lMTEFCTEUgV0E7TG87MDtMOzs7OztOOzs7OzsKKzEyQzk7RVRISU9QSUMgU1lMTEFCTEUgV1U7TG87MDtMOzs7OztOOzs7OzsKKzEyQ0E7RVRISU9QSUMgU1lMTEFCTEUgV0k7TG87MDtMOzs7OztOOzs7OzsKKzEyQ0I7RVRISU9QSUMgU1lMTEFCTEUgV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkNDO0VUSElPUElDIFNZTExBQkxFIFdFRTtMbzswO0w7Ozs7O047Ozs7OworMTJDRDtFVEhJT1BJQyBTWUxMQUJMRSBXRTtMbzswO0w7Ozs7O047Ozs7OworMTJDRTtFVEhJT1BJQyBTWUxMQUJMRSBXTztMbzswO0w7Ozs7O047Ozs7OworMTJEMDtFVEhJT1BJQyBTWUxMQUJMRSBQSEFSWU5HRUFMIEE7TG87MDtMOzs7OztOOzs7OzsKKzEyRDE7RVRISU9QSUMgU1lMTEFCTEUgUEhBUllOR0VBTCBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkQyO0VUSElPUElDIFNZTExBQkxFIFBIQVJZTkdFQUwgSTtMbzswO0w7Ozs7O047Ozs7OworMTJEMztFVEhJT1BJQyBTWUxMQUJMRSBQSEFSWU5HRUFMIEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkQ0O0VUSElPUElDIFNZTExBQkxFIFBIQVJZTkdFQUwgRUU7TG87MDtMOzs7OztOOzs7OzsKKzEyRDU7RVRISU9QSUMgU1lMTEFCTEUgUEhBUllOR0VBTCBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkQ2O0VUSElPUElDIFNZTExBQkxFIFBIQVJZTkdFQUwgTztMbzswO0w7Ozs7O047Ozs7OworMTJEODtFVEhJT1BJQyBTWUxMQUJMRSBaQTtMbzswO0w7Ozs7O047Ozs7OworMTJEOTtFVEhJT1BJQyBTWUxMQUJMRSBaVTtMbzswO0w7Ozs7O047Ozs7OworMTJEQTtFVEhJT1BJQyBTWUxMQUJMRSBaSTtMbzswO0w7Ozs7O047Ozs7OworMTJEQjtFVEhJT1BJQyBTWUxMQUJMRSBaQUE7TG87MDtMOzs7OztOOzs7OzsKKzEyREM7RVRISU9QSUMgU1lMTEFCTEUgWkVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkREO0VUSElPUElDIFNZTExBQkxFIFpFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkRFO0VUSElPUElDIFNZTExBQkxFIFpPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkRGO0VUSElPUElDIFNZTExBQkxFIFpXQTtMbzswO0w7Ozs7O047Ozs7OworMTJFMDtFVEhJT1BJQyBTWUxMQUJMRSBaSEE7TG87MDtMOzs7OztOOzs7OzsKKzEyRTE7RVRISU9QSUMgU1lMTEFCTEUgWkhVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkUyO0VUSElPUElDIFNZTExBQkxFIFpISTtMbzswO0w7Ozs7O047Ozs7OworMTJFMztFVEhJT1BJQyBTWUxMQUJMRSBaSEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkU0O0VUSElPUElDIFNZTExBQkxFIFpIRUU7TG87MDtMOzs7OztOOzs7OzsKKzEyRTU7RVRISU9QSUMgU1lMTEFCTEUgWkhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkU2O0VUSElPUElDIFNZTExBQkxFIFpITztMbzswO0w7Ozs7O047Ozs7OworMTJFNztFVEhJT1BJQyBTWUxMQUJMRSBaSFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkU4O0VUSElPUElDIFNZTExBQkxFIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkU5O0VUSElPUElDIFNZTExBQkxFIFlVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkVBO0VUSElPUElDIFNZTExBQkxFIFlJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkVCO0VUSElPUElDIFNZTExBQkxFIFlBQTtMbzswO0w7Ozs7O047Ozs7OworMTJFQztFVEhJT1BJQyBTWUxMQUJMRSBZRUU7TG87MDtMOzs7OztOOzs7OzsKKzEyRUQ7RVRISU9QSUMgU1lMTEFCTEUgWUU7TG87MDtMOzs7OztOOzs7OzsKKzEyRUU7RVRISU9QSUMgU1lMTEFCTEUgWU87TG87MDtMOzs7OztOOzs7OzsKKzEyRjA7RVRISU9QSUMgU1lMTEFCTEUgREE7TG87MDtMOzs7OztOOzs7OzsKKzEyRjE7RVRISU9QSUMgU1lMTEFCTEUgRFU7TG87MDtMOzs7OztOOzs7OzsKKzEyRjI7RVRISU9QSUMgU1lMTEFCTEUgREk7TG87MDtMOzs7OztOOzs7OzsKKzEyRjM7RVRISU9QSUMgU1lMTEFCTEUgREFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkY0O0VUSElPUElDIFNZTExBQkxFIERFRTtMbzswO0w7Ozs7O047Ozs7OworMTJGNTtFVEhJT1BJQyBTWUxMQUJMRSBERTtMbzswO0w7Ozs7O047Ozs7OworMTJGNjtFVEhJT1BJQyBTWUxMQUJMRSBETztMbzswO0w7Ozs7O047Ozs7OworMTJGNztFVEhJT1BJQyBTWUxMQUJMRSBEV0E7TG87MDtMOzs7OztOOzs7OzsKKzEyRjg7RVRISU9QSUMgU1lMTEFCTEUgRERBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkY5O0VUSElPUElDIFNZTExBQkxFIEREVTtMbzswO0w7Ozs7O047Ozs7OworMTJGQTtFVEhJT1BJQyBTWUxMQUJMRSBEREk7TG87MDtMOzs7OztOOzs7OzsKKzEyRkI7RVRISU9QSUMgU1lMTEFCTEUgRERBQTtMbzswO0w7Ozs7O047Ozs7OworMTJGQztFVEhJT1BJQyBTWUxMQUJMRSBEREVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMkZEO0VUSElPUElDIFNZTExBQkxFIERERTtMbzswO0w7Ozs7O047Ozs7OworMTJGRTtFVEhJT1BJQyBTWUxMQUJMRSBERE87TG87MDtMOzs7OztOOzs7OzsKKzEyRkY7RVRISU9QSUMgU1lMTEFCTEUgRERXQTtMbzswO0w7Ozs7O047Ozs7OworMTMwMDtFVEhJT1BJQyBTWUxMQUJMRSBKQTtMbzswO0w7Ozs7O047Ozs7OworMTMwMTtFVEhJT1BJQyBTWUxMQUJMRSBKVTtMbzswO0w7Ozs7O047Ozs7OworMTMwMjtFVEhJT1BJQyBTWUxMQUJMRSBKSTtMbzswO0w7Ozs7O047Ozs7OworMTMwMztFVEhJT1BJQyBTWUxMQUJMRSBKQUE7TG87MDtMOzs7OztOOzs7OzsKKzEzMDQ7RVRISU9QSUMgU1lMTEFCTEUgSkVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzA1O0VUSElPUElDIFNZTExBQkxFIEpFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzA2O0VUSElPUElDIFNZTExBQkxFIEpPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzA3O0VUSElPUElDIFNZTExBQkxFIEpXQTtMbzswO0w7Ozs7O047Ozs7OworMTMwODtFVEhJT1BJQyBTWUxMQUJMRSBHQTtMbzswO0w7Ozs7O047Ozs7OworMTMwOTtFVEhJT1BJQyBTWUxMQUJMRSBHVTtMbzswO0w7Ozs7O047Ozs7OworMTMwQTtFVEhJT1BJQyBTWUxMQUJMRSBHSTtMbzswO0w7Ozs7O047Ozs7OworMTMwQjtFVEhJT1BJQyBTWUxMQUJMRSBHQUE7TG87MDtMOzs7OztOOzs7OzsKKzEzMEM7RVRISU9QSUMgU1lMTEFCTEUgR0VFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzBEO0VUSElPUElDIFNZTExBQkxFIEdFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzBFO0VUSElPUElDIFNZTExBQkxFIEdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzEwO0VUSElPUElDIFNZTExBQkxFIEdXQTtMbzswO0w7Ozs7O047Ozs7OworMTMxMjtFVEhJT1BJQyBTWUxMQUJMRSBHV0k7TG87MDtMOzs7OztOOzs7OzsKKzEzMTM7RVRISU9QSUMgU1lMTEFCTEUgR1dBQTtMbzswO0w7Ozs7O047Ozs7OworMTMxNDtFVEhJT1BJQyBTWUxMQUJMRSBHV0VFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzE1O0VUSElPUElDIFNZTExBQkxFIEdXRTtMbzswO0w7Ozs7O047Ozs7OworMTMxODtFVEhJT1BJQyBTWUxMQUJMRSBHR0E7TG87MDtMOzs7OztOOzs7OzsKKzEzMTk7RVRISU9QSUMgU1lMTEFCTEUgR0dVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzFBO0VUSElPUElDIFNZTExBQkxFIEdHSTtMbzswO0w7Ozs7O047Ozs7OworMTMxQjtFVEhJT1BJQyBTWUxMQUJMRSBHR0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzFDO0VUSElPUElDIFNZTExBQkxFIEdHRUU7TG87MDtMOzs7OztOOzs7OzsKKzEzMUQ7RVRISU9QSUMgU1lMTEFCTEUgR0dFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzFFO0VUSElPUElDIFNZTExBQkxFIEdHTztMbzswO0w7Ozs7O047Ozs7OworMTMyMDtFVEhJT1BJQyBTWUxMQUJMRSBUSEE7TG87MDtMOzs7OztOOzs7OzsKKzEzMjE7RVRISU9QSUMgU1lMTEFCTEUgVEhVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzIyO0VUSElPUElDIFNZTExBQkxFIFRISTtMbzswO0w7Ozs7O047Ozs7OworMTMyMztFVEhJT1BJQyBTWUxMQUJMRSBUSEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzI0O0VUSElPUElDIFNZTExBQkxFIFRIRUU7TG87MDtMOzs7OztOOzs7OzsKKzEzMjU7RVRISU9QSUMgU1lMTEFCTEUgVEhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzI2O0VUSElPUElDIFNZTExBQkxFIFRITztMbzswO0w7Ozs7O047Ozs7OworMTMyNztFVEhJT1BJQyBTWUxMQUJMRSBUSFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzI4O0VUSElPUElDIFNZTExBQkxFIENIQTtMbzswO0w7Ozs7O047Ozs7OworMTMyOTtFVEhJT1BJQyBTWUxMQUJMRSBDSFU7TG87MDtMOzs7OztOOzs7OzsKKzEzMkE7RVRISU9QSUMgU1lMTEFCTEUgQ0hJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzJCO0VUSElPUElDIFNZTExBQkxFIENIQUE7TG87MDtMOzs7OztOOzs7OzsKKzEzMkM7RVRISU9QSUMgU1lMTEFCTEUgQ0hFRTtMbzswO0w7Ozs7O047Ozs7OworMTMyRDtFVEhJT1BJQyBTWUxMQUJMRSBDSEU7TG87MDtMOzs7OztOOzs7OzsKKzEzMkU7RVRISU9QSUMgU1lMTEFCTEUgQ0hPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzJGO0VUSElPUElDIFNZTExBQkxFIENIV0E7TG87MDtMOzs7OztOOzs7OzsKKzEzMzA7RVRISU9QSUMgU1lMTEFCTEUgUEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzMxO0VUSElPUElDIFNZTExBQkxFIFBIVTtMbzswO0w7Ozs7O047Ozs7OworMTMzMjtFVEhJT1BJQyBTWUxMQUJMRSBQSEk7TG87MDtMOzs7OztOOzs7OzsKKzEzMzM7RVRISU9QSUMgU1lMTEFCTEUgUEhBQTtMbzswO0w7Ozs7O047Ozs7OworMTMzNDtFVEhJT1BJQyBTWUxMQUJMRSBQSEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzM1O0VUSElPUElDIFNZTExBQkxFIFBIRTtMbzswO0w7Ozs7O047Ozs7OworMTMzNjtFVEhJT1BJQyBTWUxMQUJMRSBQSE87TG87MDtMOzs7OztOOzs7OzsKKzEzMzc7RVRISU9QSUMgU1lMTEFCTEUgUEhXQTtMbzswO0w7Ozs7O047Ozs7OworMTMzODtFVEhJT1BJQyBTWUxMQUJMRSBUU0E7TG87MDtMOzs7OztOOzs7OzsKKzEzMzk7RVRISU9QSUMgU1lMTEFCTEUgVFNVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzNBO0VUSElPUElDIFNZTExBQkxFIFRTSTtMbzswO0w7Ozs7O047Ozs7OworMTMzQjtFVEhJT1BJQyBTWUxMQUJMRSBUU0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzNDO0VUSElPUElDIFNZTExBQkxFIFRTRUU7TG87MDtMOzs7OztOOzs7OzsKKzEzM0Q7RVRISU9QSUMgU1lMTEFCTEUgVFNFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzNFO0VUSElPUElDIFNZTExBQkxFIFRTTztMbzswO0w7Ozs7O047Ozs7OworMTMzRjtFVEhJT1BJQyBTWUxMQUJMRSBUU1dBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzQwO0VUSElPUElDIFNZTExBQkxFIFRaQTtMbzswO0w7Ozs7O047Ozs7OworMTM0MTtFVEhJT1BJQyBTWUxMQUJMRSBUWlU7TG87MDtMOzs7OztOOzs7OzsKKzEzNDI7RVRISU9QSUMgU1lMTEFCTEUgVFpJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzQzO0VUSElPUElDIFNZTExBQkxFIFRaQUE7TG87MDtMOzs7OztOOzs7OzsKKzEzNDQ7RVRISU9QSUMgU1lMTEFCTEUgVFpFRTtMbzswO0w7Ozs7O047Ozs7OworMTM0NTtFVEhJT1BJQyBTWUxMQUJMRSBUWkU7TG87MDtMOzs7OztOOzs7OzsKKzEzNDY7RVRISU9QSUMgU1lMTEFCTEUgVFpPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzQ4O0VUSElPUElDIFNZTExBQkxFIEZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzQ5O0VUSElPUElDIFNZTExBQkxFIEZVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzRBO0VUSElPUElDIFNZTExBQkxFIEZJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzRCO0VUSElPUElDIFNZTExBQkxFIEZBQTtMbzswO0w7Ozs7O047Ozs7OworMTM0QztFVEhJT1BJQyBTWUxMQUJMRSBGRUU7TG87MDtMOzs7OztOOzs7OzsKKzEzNEQ7RVRISU9QSUMgU1lMTEFCTEUgRkU7TG87MDtMOzs7OztOOzs7OzsKKzEzNEU7RVRISU9QSUMgU1lMTEFCTEUgRk87TG87MDtMOzs7OztOOzs7OzsKKzEzNEY7RVRISU9QSUMgU1lMTEFCTEUgRldBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzUwO0VUSElPUElDIFNZTExBQkxFIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzUxO0VUSElPUElDIFNZTExBQkxFIFBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzUyO0VUSElPUElDIFNZTExBQkxFIFBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzUzO0VUSElPUElDIFNZTExBQkxFIFBBQTtMbzswO0w7Ozs7O047Ozs7OworMTM1NDtFVEhJT1BJQyBTWUxMQUJMRSBQRUU7TG87MDtMOzs7OztOOzs7OzsKKzEzNTU7RVRISU9QSUMgU1lMTEFCTEUgUEU7TG87MDtMOzs7OztOOzs7OzsKKzEzNTY7RVRISU9QSUMgU1lMTEFCTEUgUE87TG87MDtMOzs7OztOOzs7OzsKKzEzNTc7RVRISU9QSUMgU1lMTEFCTEUgUFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzU4O0VUSElPUElDIFNZTExBQkxFIFJZQTtMbzswO0w7Ozs7O047Ozs7OworMTM1OTtFVEhJT1BJQyBTWUxMQUJMRSBNWUE7TG87MDtMOzs7OztOOzs7OzsKKzEzNUE7RVRISU9QSUMgU1lMTEFCTEUgRllBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMzYxO0VUSElPUElDIFdPUkRTUEFDRTtQbzswO0w7Ozs7O047Ozs7OworMTM2MjtFVEhJT1BJQyBGVUxMIFNUT1A7UG87MDtMOzs7OztOOzs7OzsKKzEzNjM7RVRISU9QSUMgQ09NTUE7UG87MDtMOzs7OztOOzs7OzsKKzEzNjQ7RVRISU9QSUMgU0VNSUNPTE9OO1BvOzA7TDs7Ozs7Tjs7Ozs7CisxMzY1O0VUSElPUElDIENPTE9OO1BvOzA7TDs7Ozs7Tjs7Ozs7CisxMzY2O0VUSElPUElDIFBSRUZBQ0UgQ09MT047UG87MDtMOzs7OztOOzs7OzsKKzEzNjc7RVRISU9QSUMgUVVFU1RJT04gTUFSSztQbzswO0w7Ozs7O047Ozs7OworMTM2ODtFVEhJT1BJQyBQQVJBR1JBUEggU0VQQVJBVE9SO1BvOzA7TDs7Ozs7Tjs7Ozs7CisxMzY5O0VUSElPUElDIERJR0lUIE9ORTtOZDswO0w7OzE7MTsxO047Ozs7OworMTM2QTtFVEhJT1BJQyBESUdJVCBUV087TmQ7MDtMOzsyOzI7MjtOOzs7OzsKKzEzNkI7RVRISU9QSUMgRElHSVQgVEhSRUU7TmQ7MDtMOzszOzM7MztOOzs7OzsKKzEzNkM7RVRISU9QSUMgRElHSVQgRk9VUjtOZDswO0w7OzQ7NDs0O047Ozs7OworMTM2RDtFVEhJT1BJQyBESUdJVCBGSVZFO05kOzA7TDs7NTs1OzU7Tjs7Ozs7CisxMzZFO0VUSElPUElDIERJR0lUIFNJWDtOZDswO0w7OzY7Njs2O047Ozs7OworMTM2RjtFVEhJT1BJQyBESUdJVCBTRVZFTjtOZDswO0w7Ozc7Nzs3O047Ozs7OworMTM3MDtFVEhJT1BJQyBESUdJVCBFSUdIVDtOZDswO0w7Ozg7ODs4O047Ozs7OworMTM3MTtFVEhJT1BJQyBESUdJVCBOSU5FO05kOzA7TDs7OTs5Ozk7Tjs7Ozs7CisxMzcyO0VUSElPUElDIE5VTUJFUiBURU47Tm87MDtMOzs7OzEwO047Ozs7OworMTM3MztFVEhJT1BJQyBOVU1CRVIgVFdFTlRZO05vOzA7TDs7OzsyMDtOOzs7OzsKKzEzNzQ7RVRISU9QSUMgTlVNQkVSIFRISVJUWTtObzswO0w7Ozs7MzA7Tjs7Ozs7CisxMzc1O0VUSElPUElDIE5VTUJFUiBGT1JUWTtObzswO0w7Ozs7NDA7Tjs7Ozs7CisxMzc2O0VUSElPUElDIE5VTUJFUiBGSUZUWTtObzswO0w7Ozs7NTA7Tjs7Ozs7CisxMzc3O0VUSElPUElDIE5VTUJFUiBTSVhUWTtObzswO0w7Ozs7NjA7Tjs7Ozs7CisxMzc4O0VUSElPUElDIE5VTUJFUiBTRVZFTlRZO05vOzA7TDs7Ozs3MDtOOzs7OzsKKzEzNzk7RVRISU9QSUMgTlVNQkVSIEVJR0hUWTtObzswO0w7Ozs7ODA7Tjs7Ozs7CisxMzdBO0VUSElPUElDIE5VTUJFUiBOSU5FVFk7Tm87MDtMOzs7OzkwO047Ozs7OworMTM3QjtFVEhJT1BJQyBOVU1CRVIgSFVORFJFRDtObzswO0w7Ozs7MTAwO047Ozs7OworMTM3QztFVEhJT1BJQyBOVU1CRVIgVEVOIFRIT1VTQU5EO05vOzA7TDs7OzsxMDAwMDtOOzs7OzsKKzEzQTA7Q0hFUk9LRUUgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzEzQTE7Q0hFUk9LRUUgTEVUVEVSIEU7TG87MDtMOzs7OztOOzs7OzsKKzEzQTI7Q0hFUk9LRUUgTEVUVEVSIEk7TG87MDtMOzs7OztOOzs7OzsKKzEzQTM7Q0hFUk9LRUUgTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzEzQTQ7Q0hFUk9LRUUgTEVUVEVSIFU7TG87MDtMOzs7OztOOzs7OzsKKzEzQTU7Q0hFUk9LRUUgTEVUVEVSIFY7TG87MDtMOzs7OztOOzs7OzsKKzEzQTY7Q0hFUk9LRUUgTEVUVEVSIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0E3O0NIRVJPS0VFIExFVFRFUiBLQTtMbzswO0w7Ozs7O047Ozs7OworMTNBODtDSEVST0tFRSBMRVRURVIgR0U7TG87MDtMOzs7OztOOzs7OzsKKzEzQTk7Q0hFUk9LRUUgTEVUVEVSIEdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0FBO0NIRVJPS0VFIExFVFRFUiBHTztMbzswO0w7Ozs7O047Ozs7OworMTNBQjtDSEVST0tFRSBMRVRURVIgR1U7TG87MDtMOzs7OztOOzs7OzsKKzEzQUM7Q0hFUk9LRUUgTEVUVEVSIEdWO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0FEO0NIRVJPS0VFIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMTNBRTtDSEVST0tFRSBMRVRURVIgSEU7TG87MDtMOzs7OztOOzs7OzsKKzEzQUY7Q0hFUk9LRUUgTEVUVEVSIEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0IwO0NIRVJPS0VFIExFVFRFUiBITztMbzswO0w7Ozs7O047Ozs7OworMTNCMTtDSEVST0tFRSBMRVRURVIgSFU7TG87MDtMOzs7OztOOzs7OzsKKzEzQjI7Q0hFUk9LRUUgTEVUVEVSIEhWO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0IzO0NIRVJPS0VFIExFVFRFUiBMQTtMbzswO0w7Ozs7O047Ozs7OworMTNCNDtDSEVST0tFRSBMRVRURVIgTEU7TG87MDtMOzs7OztOOzs7OzsKKzEzQjU7Q0hFUk9LRUUgTEVUVEVSIExJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0I2O0NIRVJPS0VFIExFVFRFUiBMTztMbzswO0w7Ozs7O047Ozs7OworMTNCNztDSEVST0tFRSBMRVRURVIgTFU7TG87MDtMOzs7OztOOzs7OzsKKzEzQjg7Q0hFUk9LRUUgTEVUVEVSIExWO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0I5O0NIRVJPS0VFIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMTNCQTtDSEVST0tFRSBMRVRURVIgTUU7TG87MDtMOzs7OztOOzs7OzsKKzEzQkI7Q0hFUk9LRUUgTEVUVEVSIE1JO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0JDO0NIRVJPS0VFIExFVFRFUiBNTztMbzswO0w7Ozs7O047Ozs7OworMTNCRDtDSEVST0tFRSBMRVRURVIgTVU7TG87MDtMOzs7OztOOzs7OzsKKzEzQkU7Q0hFUk9LRUUgTEVUVEVSIE5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0JGO0NIRVJPS0VFIExFVFRFUiBITkE7TG87MDtMOzs7OztOOzs7OzsKKzEzQzA7Q0hFUk9LRUUgTEVUVEVSIE5BSDtMbzswO0w7Ozs7O047Ozs7OworMTNDMTtDSEVST0tFRSBMRVRURVIgTkU7TG87MDtMOzs7OztOOzs7OzsKKzEzQzI7Q0hFUk9LRUUgTEVUVEVSIE5JO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0MzO0NIRVJPS0VFIExFVFRFUiBOTztMbzswO0w7Ozs7O047Ozs7OworMTNDNDtDSEVST0tFRSBMRVRURVIgTlU7TG87MDtMOzs7OztOOzs7OzsKKzEzQzU7Q0hFUk9LRUUgTEVUVEVSIE5WO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0M2O0NIRVJPS0VFIExFVFRFUiBRVUE7TG87MDtMOzs7OztOOzs7OzsKKzEzQzc7Q0hFUk9LRUUgTEVUVEVSIFFVRTtMbzswO0w7Ozs7O047Ozs7OworMTNDODtDSEVST0tFRSBMRVRURVIgUVVJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0M5O0NIRVJPS0VFIExFVFRFUiBRVU87TG87MDtMOzs7OztOOzs7OzsKKzEzQ0E7Q0hFUk9LRUUgTEVUVEVSIFFVVTtMbzswO0w7Ozs7O047Ozs7OworMTNDQjtDSEVST0tFRSBMRVRURVIgUVVWO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0NDO0NIRVJPS0VFIExFVFRFUiBTQTtMbzswO0w7Ozs7O047Ozs7OworMTNDRDtDSEVST0tFRSBMRVRURVIgUztMbzswO0w7Ozs7O047Ozs7OworMTNDRTtDSEVST0tFRSBMRVRURVIgU0U7TG87MDtMOzs7OztOOzs7OzsKKzEzQ0Y7Q0hFUk9LRUUgTEVUVEVSIFNJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0QwO0NIRVJPS0VFIExFVFRFUiBTTztMbzswO0w7Ozs7O047Ozs7OworMTNEMTtDSEVST0tFRSBMRVRURVIgU1U7TG87MDtMOzs7OztOOzs7OzsKKzEzRDI7Q0hFUk9LRUUgTEVUVEVSIFNWO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0QzO0NIRVJPS0VFIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMTNENDtDSEVST0tFRSBMRVRURVIgVEE7TG87MDtMOzs7OztOOzs7OzsKKzEzRDU7Q0hFUk9LRUUgTEVUVEVSIERFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0Q2O0NIRVJPS0VFIExFVFRFUiBURTtMbzswO0w7Ozs7O047Ozs7OworMTNENztDSEVST0tFRSBMRVRURVIgREk7TG87MDtMOzs7OztOOzs7OzsKKzEzRDg7Q0hFUk9LRUUgTEVUVEVSIFRJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0Q5O0NIRVJPS0VFIExFVFRFUiBETztMbzswO0w7Ozs7O047Ozs7OworMTNEQTtDSEVST0tFRSBMRVRURVIgRFU7TG87MDtMOzs7OztOOzs7OzsKKzEzREI7Q0hFUk9LRUUgTEVUVEVSIERWO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0RDO0NIRVJPS0VFIExFVFRFUiBETEE7TG87MDtMOzs7OztOOzs7OzsKKzEzREQ7Q0hFUk9LRUUgTEVUVEVSIFRMQTtMbzswO0w7Ozs7O047Ozs7OworMTNERTtDSEVST0tFRSBMRVRURVIgVExFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0RGO0NIRVJPS0VFIExFVFRFUiBUTEk7TG87MDtMOzs7OztOOzs7OzsKKzEzRTA7Q0hFUk9LRUUgTEVUVEVSIFRMTztMbzswO0w7Ozs7O047Ozs7OworMTNFMTtDSEVST0tFRSBMRVRURVIgVExVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0UyO0NIRVJPS0VFIExFVFRFUiBUTFY7TG87MDtMOzs7OztOOzs7OzsKKzEzRTM7Q0hFUk9LRUUgTEVUVEVSIFRTQTtMbzswO0w7Ozs7O047Ozs7OworMTNFNDtDSEVST0tFRSBMRVRURVIgVFNFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0U1O0NIRVJPS0VFIExFVFRFUiBUU0k7TG87MDtMOzs7OztOOzs7OzsKKzEzRTY7Q0hFUk9LRUUgTEVUVEVSIFRTTztMbzswO0w7Ozs7O047Ozs7OworMTNFNztDSEVST0tFRSBMRVRURVIgVFNVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0U4O0NIRVJPS0VFIExFVFRFUiBUU1Y7TG87MDtMOzs7OztOOzs7OzsKKzEzRTk7Q0hFUk9LRUUgTEVUVEVSIFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0VBO0NIRVJPS0VFIExFVFRFUiBXRTtMbzswO0w7Ozs7O047Ozs7OworMTNFQjtDSEVST0tFRSBMRVRURVIgV0k7TG87MDtMOzs7OztOOzs7OzsKKzEzRUM7Q0hFUk9LRUUgTEVUVEVSIFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0VEO0NIRVJPS0VFIExFVFRFUiBXVTtMbzswO0w7Ozs7O047Ozs7OworMTNFRTtDSEVST0tFRSBMRVRURVIgV1Y7TG87MDtMOzs7OztOOzs7OzsKKzEzRUY7Q0hFUk9LRUUgTEVUVEVSIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0YwO0NIRVJPS0VFIExFVFRFUiBZRTtMbzswO0w7Ozs7O047Ozs7OworMTNGMTtDSEVST0tFRSBMRVRURVIgWUk7TG87MDtMOzs7OztOOzs7OzsKKzEzRjI7Q0hFUk9LRUUgTEVUVEVSIFlPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxM0YzO0NIRVJPS0VFIExFVFRFUiBZVTtMbzswO0w7Ozs7O047Ozs7OworMTNGNDtDSEVST0tFRSBMRVRURVIgWVY7TG87MDtMOzs7OztOOzs7OzsKKzE0MDE7Q0FOQURJQU4gU1lMTEFCSUNTIEU7TG87MDtMOzs7OztOOzs7OzsKKzE0MDI7Q0FOQURJQU4gU1lMTEFCSUNTIEFBSTtMbzswO0w7Ozs7O047Ozs7OworMTQwMztDQU5BRElBTiBTWUxMQUJJQ1MgSTtMbzswO0w7Ozs7O047Ozs7OworMTQwNDtDQU5BRElBTiBTWUxMQUJJQ1MgSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0MDU7Q0FOQURJQU4gU1lMTEFCSUNTIE87TG87MDtMOzs7OztOOzs7OzsKKzE0MDY7Q0FOQURJQU4gU1lMTEFCSUNTIE9PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDA3O0NBTkFESUFOIFNZTExBQklDUyBZLUNSRUUgT087TG87MDtMOzs7OztOOzs7OzsKKzE0MDg7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgRUU7TG87MDtMOzs7OztOOzs7OzsKKzE0MDk7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgSTtMbzswO0w7Ozs7O047Ozs7OworMTQwQTtDQU5BRElBTiBTWUxMQUJJQ1MgQTtMbzswO0w7Ozs7O047Ozs7OworMTQwQjtDQU5BRElBTiBTWUxMQUJJQ1MgQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0MEM7Q0FOQURJQU4gU1lMTEFCSUNTIFdFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDBEO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgV0U7TG87MDtMOzs7OztOOzs7OzsKKzE0MEU7Q0FOQURJQU4gU1lMTEFCSUNTIFdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDBGO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgV0k7TG87MDtMOzs7OztOOzs7OzsKKzE0MTA7Q0FOQURJQU4gU1lMTEFCSUNTIFdJSTtMbzswO0w7Ozs7O047Ozs7OworMTQxMTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFdJSTtMbzswO0w7Ozs7O047Ozs7OworMTQxMjtDQU5BRElBTiBTWUxMQUJJQ1MgV087TG87MDtMOzs7OztOOzs7OzsKKzE0MTM7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBXTztMbzswO0w7Ozs7O047Ozs7OworMTQxNDtDQU5BRElBTiBTWUxMQUJJQ1MgV09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDE1O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgV09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDE2O0NBTkFESUFOIFNZTExBQklDUyBOQVNLQVBJIFdPTztMbzswO0w7Ozs7O047Ozs7OworMTQxNztDQU5BRElBTiBTWUxMQUJJQ1MgV0E7TG87MDtMOzs7OztOOzs7OzsKKzE0MTg7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBXQTtMbzswO0w7Ozs7O047Ozs7OworMTQxOTtDQU5BRElBTiBTWUxMQUJJQ1MgV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDFBO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDFCO0NBTkFESUFOIFNZTExBQklDUyBOQVNLQVBJIFdBQTtMbzswO0w7Ozs7O047Ozs7OworMTQxQztDQU5BRElBTiBTWUxMQUJJQ1MgQUk7TG87MDtMOzs7OztOOzs7OzsKKzE0MUQ7Q0FOQURJQU4gU1lMTEFCSUNTIFktQ1JFRSBXO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDFFO0NBTkFESUFOIFNZTExBQklDUyBHTE9UVEFMIFNUT1A7TG87MDtMOzs7OztOOzs7OzsKKzE0MUY7Q0FOQURJQU4gU1lMTEFCSUNTIEZJTkFMIEFDVVRFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDIwO0NBTkFESUFOIFNZTExBQklDUyBGSU5BTCBHUkFWRTtMbzswO0w7Ozs7O047Ozs7OworMTQyMTtDQU5BRElBTiBTWUxMQUJJQ1MgRklOQUwgQk9UVE9NIEhBTEYgUklORztMbzswO0w7Ozs7O047Ozs7OworMTQyMjtDQU5BRElBTiBTWUxMQUJJQ1MgRklOQUwgVE9QIEhBTEYgUklORztMbzswO0w7Ozs7O047Ozs7OworMTQyMztDQU5BRElBTiBTWUxMQUJJQ1MgRklOQUwgUklHSFQgSEFMRiBSSU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDI0O0NBTkFESUFOIFNZTExBQklDUyBGSU5BTCBSSU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDI1O0NBTkFESUFOIFNZTExBQklDUyBGSU5BTCBET1VCTEUgQUNVVEU7TG87MDtMOzs7OztOOzs7OzsKKzE0MjY7Q0FOQURJQU4gU1lMTEFCSUNTIEZJTkFMIERPVUJMRSBTSE9SVCBWRVJUSUNBTCBTVFJPS0VTO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDI3O0NBTkFESUFOIFNZTExBQklDUyBGSU5BTCBNSURETEUgRE9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDI4O0NBTkFESUFOIFNZTExBQklDUyBGSU5BTCBTSE9SVCBIT1JJWk9OVEFMIFNUUk9LRTtMbzswO0w7Ozs7O047Ozs7OworMTQyOTtDQU5BRElBTiBTWUxMQUJJQ1MgRklOQUwgUExVUztMbzswO0w7Ozs7O047Ozs7OworMTQyQTtDQU5BRElBTiBTWUxMQUJJQ1MgRklOQUwgRE9XTiBUQUNLO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDJCO0NBTkFESUFOIFNZTExBQklDUyBFTjtMbzswO0w7Ozs7O047Ozs7OworMTQyQztDQU5BRElBTiBTWUxMQUJJQ1MgSU47TG87MDtMOzs7OztOOzs7OzsKKzE0MkQ7Q0FOQURJQU4gU1lMTEFCSUNTIE9OO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDJFO0NBTkFESUFOIFNZTExBQklDUyBBTjtMbzswO0w7Ozs7O047Ozs7OworMTQyRjtDQU5BRElBTiBTWUxMQUJJQ1MgUEU7TG87MDtMOzs7OztOOzs7OzsKKzE0MzA7Q0FOQURJQU4gU1lMTEFCSUNTIFBBQUk7TG87MDtMOzs7OztOOzs7OzsKKzE0MzE7Q0FOQURJQU4gU1lMTEFCSUNTIFBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDMyO0NBTkFESUFOIFNZTExBQklDUyBQSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0MzM7Q0FOQURJQU4gU1lMTEFCSUNTIFBPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDM0O0NBTkFESUFOIFNZTExBQklDUyBQT087TG87MDtMOzs7OztOOzs7OzsKKzE0MzU7Q0FOQURJQU4gU1lMTEFCSUNTIFktQ1JFRSBQT087TG87MDtMOzs7OztOOzs7OzsKKzE0MzY7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgSEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDM3O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDM4O0NBTkFESUFOIFNZTExBQklDUyBQQTtMbzswO0w7Ozs7O047Ozs7OworMTQzOTtDQU5BRElBTiBTWUxMQUJJQ1MgUEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDNBO0NBTkFESUFOIFNZTExBQklDUyBQV0U7TG87MDtMOzs7OztOOzs7OzsKKzE0M0I7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBQV0U7TG87MDtMOzs7OztOOzs7OzsKKzE0M0M7Q0FOQURJQU4gU1lMTEFCSUNTIFBXSTtMbzswO0w7Ozs7O047Ozs7OworMTQzRDtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFBXSTtMbzswO0w7Ozs7O047Ozs7OworMTQzRTtDQU5BRElBTiBTWUxMQUJJQ1MgUFdJSTtMbzswO0w7Ozs7O047Ozs7OworMTQzRjtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFBXSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0NDA7Q0FOQURJQU4gU1lMTEFCSUNTIFBXTztMbzswO0w7Ozs7O047Ozs7OworMTQ0MTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFBXTztMbzswO0w7Ozs7O047Ozs7OworMTQ0MjtDQU5BRElBTiBTWUxMQUJJQ1MgUFdPTztMbzswO0w7Ozs7O047Ozs7OworMTQ0MztDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFBXT087TG87MDtMOzs7OztOOzs7OzsKKzE0NDQ7Q0FOQURJQU4gU1lMTEFCSUNTIFBXQTtMbzswO0w7Ozs7O047Ozs7OworMTQ0NTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFBXQTtMbzswO0w7Ozs7O047Ozs7OworMTQ0NjtDQU5BRElBTiBTWUxMQUJJQ1MgUFdBQTtMbzswO0w7Ozs7O047Ozs7OworMTQ0NztDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFBXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0NDg7Q0FOQURJQU4gU1lMTEFCSUNTIFktQ1JFRSBQV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDQ5O0NBTkFESUFOIFNZTExBQklDUyBQO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDRBO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgUDtMbzswO0w7Ozs7O047Ozs7OworMTQ0QjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDRDO0NBTkFESUFOIFNZTExBQklDUyBURTtMbzswO0w7Ozs7O047Ozs7OworMTQ0RDtDQU5BRElBTiBTWUxMQUJJQ1MgVEFBSTtMbzswO0w7Ozs7O047Ozs7OworMTQ0RTtDQU5BRElBTiBTWUxMQUJJQ1MgVEk7TG87MDtMOzs7OztOOzs7OzsKKzE0NEY7Q0FOQURJQU4gU1lMTEFCSUNTIFRJSTtMbzswO0w7Ozs7O047Ozs7OworMTQ1MDtDQU5BRElBTiBTWUxMQUJJQ1MgVE87TG87MDtMOzs7OztOOzs7OzsKKzE0NTE7Q0FOQURJQU4gU1lMTEFCSUNTIFRPTztMbzswO0w7Ozs7O047Ozs7OworMTQ1MjtDQU5BRElBTiBTWUxMQUJJQ1MgWS1DUkVFIFRPTztMbzswO0w7Ozs7O047Ozs7OworMTQ1MztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBERUU7TG87MDtMOzs7OztOOzs7OzsKKzE0NTQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgREk7TG87MDtMOzs7OztOOzs7OzsKKzE0NTU7Q0FOQURJQU4gU1lMTEFCSUNTIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDU2O0NBTkFESUFOIFNZTExBQklDUyBUQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0NTc7Q0FOQURJQU4gU1lMTEFCSUNTIFRXRTtMbzswO0w7Ozs7O047Ozs7OworMTQ1ODtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFRXRTtMbzswO0w7Ozs7O047Ozs7OworMTQ1OTtDQU5BRElBTiBTWUxMQUJJQ1MgVFdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDVBO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgVFdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDVCO0NBTkFESUFOIFNZTExBQklDUyBUV0lJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDVDO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgVFdJSTtMbzswO0w7Ozs7O047Ozs7OworMTQ1RDtDQU5BRElBTiBTWUxMQUJJQ1MgVFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDVFO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgVFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDVGO0NBTkFESUFOIFNZTExBQklDUyBUV09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDYwO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgVFdPTztMbzswO0w7Ozs7O047Ozs7OworMTQ2MTtDQU5BRElBTiBTWUxMQUJJQ1MgVFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDYyO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgVFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDYzO0NBTkFESUFOIFNZTExBQklDUyBUV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDY0O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgVFdBQTtMbzswO0w7Ozs7O047Ozs7OworMTQ2NTtDQU5BRElBTiBTWUxMQUJJQ1MgTkFTS0FQSSBUV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDY2O0NBTkFESUFOIFNZTExBQklDUyBUO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDY3O0NBTkFESUFOIFNZTExBQklDUyBUVEU7TG87MDtMOzs7OztOOzs7OzsKKzE0Njg7Q0FOQURJQU4gU1lMTEFCSUNTIFRUSTtMbzswO0w7Ozs7O047Ozs7OworMTQ2OTtDQU5BRElBTiBTWUxMQUJJQ1MgVFRPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDZBO0NBTkFESUFOIFNZTExBQklDUyBUVEE7TG87MDtMOzs7OztOOzs7OzsKKzE0NkI7Q0FOQURJQU4gU1lMTEFCSUNTIEtFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDZDO0NBTkFESUFOIFNZTExBQklDUyBLQUFJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDZEO0NBTkFESUFOIFNZTExBQklDUyBLSTtMbzswO0w7Ozs7O047Ozs7OworMTQ2RTtDQU5BRElBTiBTWUxMQUJJQ1MgS0lJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDZGO0NBTkFESUFOIFNZTExBQklDUyBLTztMbzswO0w7Ozs7O047Ozs7OworMTQ3MDtDQU5BRElBTiBTWUxMQUJJQ1MgS09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDcxO0NBTkFESUFOIFNZTExBQklDUyBZLUNSRUUgS09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDcyO0NBTkFESUFOIFNZTExBQklDUyBLQTtMbzswO0w7Ozs7O047Ozs7OworMTQ3MztDQU5BRElBTiBTWUxMQUJJQ1MgS0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDc0O0NBTkFESUFOIFNZTExBQklDUyBLV0U7TG87MDtMOzs7OztOOzs7OzsKKzE0NzU7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBLV0U7TG87MDtMOzs7OztOOzs7OzsKKzE0NzY7Q0FOQURJQU4gU1lMTEFCSUNTIEtXSTtMbzswO0w7Ozs7O047Ozs7OworMTQ3NztDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIEtXSTtMbzswO0w7Ozs7O047Ozs7OworMTQ3ODtDQU5BRElBTiBTWUxMQUJJQ1MgS1dJSTtMbzswO0w7Ozs7O047Ozs7OworMTQ3OTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIEtXSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0N0E7Q0FOQURJQU4gU1lMTEFCSUNTIEtXTztMbzswO0w7Ozs7O047Ozs7OworMTQ3QjtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIEtXTztMbzswO0w7Ozs7O047Ozs7OworMTQ3QztDQU5BRElBTiBTWUxMQUJJQ1MgS1dPTztMbzswO0w7Ozs7O047Ozs7OworMTQ3RDtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIEtXT087TG87MDtMOzs7OztOOzs7OzsKKzE0N0U7Q0FOQURJQU4gU1lMTEFCSUNTIEtXQTtMbzswO0w7Ozs7O047Ozs7OworMTQ3RjtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIEtXQTtMbzswO0w7Ozs7O047Ozs7OworMTQ4MDtDQU5BRElBTiBTWUxMQUJJQ1MgS1dBQTtMbzswO0w7Ozs7O047Ozs7OworMTQ4MTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIEtXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0ODI7Q0FOQURJQU4gU1lMTEFCSUNTIE5BU0tBUEkgS1dBQTtMbzswO0w7Ozs7O047Ozs7OworMTQ4MztDQU5BRElBTiBTWUxMQUJJQ1MgSztMbzswO0w7Ozs7O047Ozs7OworMTQ4NDtDQU5BRElBTiBTWUxMQUJJQ1MgS1c7TG87MDtMOzs7OztOOzs7OzsKKzE0ODU7Q0FOQURJQU4gU1lMTEFCSUNTIFNPVVRILVNMQVZFWSBLRUg7TG87MDtMOzs7OztOOzs7OzsKKzE0ODY7Q0FOQURJQU4gU1lMTEFCSUNTIFNPVVRILVNMQVZFWSBLSUg7TG87MDtMOzs7OztOOzs7OzsKKzE0ODc7Q0FOQURJQU4gU1lMTEFCSUNTIFNPVVRILVNMQVZFWSBLT0g7TG87MDtMOzs7OztOOzs7OzsKKzE0ODg7Q0FOQURJQU4gU1lMTEFCSUNTIFNPVVRILVNMQVZFWSBLQUg7TG87MDtMOzs7OztOOzs7OzsKKzE0ODk7Q0FOQURJQU4gU1lMTEFCSUNTIENFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDhBO0NBTkFESUFOIFNZTExBQklDUyBDQUFJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDhCO0NBTkFESUFOIFNZTExBQklDUyBDSTtMbzswO0w7Ozs7O047Ozs7OworMTQ4QztDQU5BRElBTiBTWUxMQUJJQ1MgQ0lJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDhEO0NBTkFESUFOIFNZTExBQklDUyBDTztMbzswO0w7Ozs7O047Ozs7OworMTQ4RTtDQU5BRElBTiBTWUxMQUJJQ1MgQ09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDhGO0NBTkFESUFOIFNZTExBQklDUyBZLUNSRUUgQ09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDkwO0NBTkFESUFOIFNZTExBQklDUyBDQTtMbzswO0w7Ozs7O047Ozs7OworMTQ5MTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNDkyO0NBTkFESUFOIFNZTExBQklDUyBDV0U7TG87MDtMOzs7OztOOzs7OzsKKzE0OTM7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBDV0U7TG87MDtMOzs7OztOOzs7OzsKKzE0OTQ7Q0FOQURJQU4gU1lMTEFCSUNTIENXSTtMbzswO0w7Ozs7O047Ozs7OworMTQ5NTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIENXSTtMbzswO0w7Ozs7O047Ozs7OworMTQ5NjtDQU5BRElBTiBTWUxMQUJJQ1MgQ1dJSTtMbzswO0w7Ozs7O047Ozs7OworMTQ5NztDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIENXSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0OTg7Q0FOQURJQU4gU1lMTEFCSUNTIENXTztMbzswO0w7Ozs7O047Ozs7OworMTQ5OTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIENXTztMbzswO0w7Ozs7O047Ozs7OworMTQ5QTtDQU5BRElBTiBTWUxMQUJJQ1MgQ1dPTztMbzswO0w7Ozs7O047Ozs7OworMTQ5QjtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIENXT087TG87MDtMOzs7OztOOzs7OzsKKzE0OUM7Q0FOQURJQU4gU1lMTEFCSUNTIENXQTtMbzswO0w7Ozs7O047Ozs7OworMTQ5RDtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIENXQTtMbzswO0w7Ozs7O047Ozs7OworMTQ5RTtDQU5BRElBTiBTWUxMQUJJQ1MgQ1dBQTtMbzswO0w7Ozs7O047Ozs7OworMTQ5RjtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIENXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0QTA7Q0FOQURJQU4gU1lMTEFCSUNTIE5BU0tBUEkgQ1dBQTtMbzswO0w7Ozs7O047Ozs7OworMTRBMTtDQU5BRElBTiBTWUxMQUJJQ1MgQztMbzswO0w7Ozs7O047Ozs7OworMTRBMjtDQU5BRElBTiBTWUxMQUJJQ1MgU0FZSVNJIFRIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEEzO0NBTkFESUFOIFNZTExBQklDUyBNRTtMbzswO0w7Ozs7O047Ozs7OworMTRBNDtDQU5BRElBTiBTWUxMQUJJQ1MgTUFBSTtMbzswO0w7Ozs7O047Ozs7OworMTRBNTtDQU5BRElBTiBTWUxMQUJJQ1MgTUk7TG87MDtMOzs7OztOOzs7OzsKKzE0QTY7Q0FOQURJQU4gU1lMTEFCSUNTIE1JSTtMbzswO0w7Ozs7O047Ozs7OworMTRBNztDQU5BRElBTiBTWUxMQUJJQ1MgTU87TG87MDtMOzs7OztOOzs7OzsKKzE0QTg7Q0FOQURJQU4gU1lMTEFCSUNTIE1PTztMbzswO0w7Ozs7O047Ozs7OworMTRBOTtDQU5BRElBTiBTWUxMQUJJQ1MgWS1DUkVFIE1PTztMbzswO0w7Ozs7O047Ozs7OworMTRBQTtDQU5BRElBTiBTWUxMQUJJQ1MgTUE7TG87MDtMOzs7OztOOzs7OzsKKzE0QUI7Q0FOQURJQU4gU1lMTEFCSUNTIE1BQTtMbzswO0w7Ozs7O047Ozs7OworMTRBQztDQU5BRElBTiBTWUxMQUJJQ1MgTVdFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEFEO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTVdFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEFFO0NBTkFESUFOIFNZTExBQklDUyBNV0k7TG87MDtMOzs7OztOOzs7OzsKKzE0QUY7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBNV0k7TG87MDtMOzs7OztOOzs7OzsKKzE0QjA7Q0FOQURJQU4gU1lMTEFCSUNTIE1XSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0QjE7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBNV0lJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEIyO0NBTkFESUFOIFNZTExBQklDUyBNV087TG87MDtMOzs7OztOOzs7OzsKKzE0QjM7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBNV087TG87MDtMOzs7OztOOzs7OzsKKzE0QjQ7Q0FOQURJQU4gU1lMTEFCSUNTIE1XT087TG87MDtMOzs7OztOOzs7OzsKKzE0QjU7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBNV09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEI2O0NBTkFESUFOIFNZTExBQklDUyBNV0E7TG87MDtMOzs7OztOOzs7OzsKKzE0Qjc7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBNV0E7TG87MDtMOzs7OztOOzs7OzsKKzE0Qjg7Q0FOQURJQU4gU1lMTEFCSUNTIE1XQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0Qjk7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBNV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEJBO0NBTkFESUFOIFNZTExBQklDUyBOQVNLQVBJIE1XQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0QkI7Q0FOQURJQU4gU1lMTEFCSUNTIE07TG87MDtMOzs7OztOOzs7OzsKKzE0QkM7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBNO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEJEO0NBTkFESUFOIFNZTExBQklDUyBNSDtMbzswO0w7Ozs7O047Ozs7OworMTRCRTtDQU5BRElBTiBTWUxMQUJJQ1MgQVRIQVBBU0NBTiBNO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEJGO0NBTkFESUFOIFNZTExBQklDUyBTQVlJU0kgTTtMbzswO0w7Ozs7O047Ozs7OworMTRDMDtDQU5BRElBTiBTWUxMQUJJQ1MgTkU7TG87MDtMOzs7OztOOzs7OzsKKzE0QzE7Q0FOQURJQU4gU1lMTEFCSUNTIE5BQUk7TG87MDtMOzs7OztOOzs7OzsKKzE0QzI7Q0FOQURJQU4gU1lMTEFCSUNTIE5JO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEMzO0NBTkFESUFOIFNZTExBQklDUyBOSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0QzQ7Q0FOQURJQU4gU1lMTEFCSUNTIE5PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEM1O0NBTkFESUFOIFNZTExBQklDUyBOT087TG87MDtMOzs7OztOOzs7OzsKKzE0QzY7Q0FOQURJQU4gU1lMTEFCSUNTIFktQ1JFRSBOT087TG87MDtMOzs7OztOOzs7OzsKKzE0Qzc7Q0FOQURJQU4gU1lMTEFCSUNTIE5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEM4O0NBTkFESUFOIFNZTExBQklDUyBOQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0Qzk7Q0FOQURJQU4gU1lMTEFCSUNTIE5XRTtMbzswO0w7Ozs7O047Ozs7OworMTRDQTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIE5XRTtMbzswO0w7Ozs7O047Ozs7OworMTRDQjtDQU5BRElBTiBTWUxMQUJJQ1MgTldBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNENDO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTldBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNENEO0NBTkFESUFOIFNZTExBQklDUyBOV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNENFO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTldBQTtMbzswO0w7Ozs7O047Ozs7OworMTRDRjtDQU5BRElBTiBTWUxMQUJJQ1MgTkFTS0FQSSBOV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEQwO0NBTkFESUFOIFNZTExBQklDUyBOO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEQxO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIE5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEQyO0NBTkFESUFOIFNZTExBQklDUyBOSDtMbzswO0w7Ozs7O047Ozs7OworMTREMztDQU5BRElBTiBTWUxMQUJJQ1MgTEU7TG87MDtMOzs7OztOOzs7OzsKKzE0RDQ7Q0FOQURJQU4gU1lMTEFCSUNTIExBQUk7TG87MDtMOzs7OztOOzs7OzsKKzE0RDU7Q0FOQURJQU4gU1lMTEFCSUNTIExJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEQ2O0NBTkFESUFOIFNZTExBQklDUyBMSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0RDc7Q0FOQURJQU4gU1lMTEFCSUNTIExPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEQ4O0NBTkFESUFOIFNZTExBQklDUyBMT087TG87MDtMOzs7OztOOzs7OzsKKzE0RDk7Q0FOQURJQU4gU1lMTEFCSUNTIFktQ1JFRSBMT087TG87MDtMOzs7OztOOzs7OzsKKzE0REE7Q0FOQURJQU4gU1lMTEFCSUNTIExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNERCO0NBTkFESUFOIFNZTExBQklDUyBMQUE7TG87MDtMOzs7OztOOzs7OzsKKzE0REM7Q0FOQURJQU4gU1lMTEFCSUNTIExXRTtMbzswO0w7Ozs7O047Ozs7OworMTRERDtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIExXRTtMbzswO0w7Ozs7O047Ozs7OworMTRERTtDQU5BRElBTiBTWUxMQUJJQ1MgTFdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNERGO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTFdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEUwO0NBTkFESUFOIFNZTExBQklDUyBMV0lJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEUxO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTFdJSTtMbzswO0w7Ozs7O047Ozs7OworMTRFMjtDQU5BRElBTiBTWUxMQUJJQ1MgTFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEUzO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEU0O0NBTkFESUFOIFNZTExBQklDUyBMV09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEU1O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTFdPTztMbzswO0w7Ozs7O047Ozs7OworMTRFNjtDQU5BRElBTiBTWUxMQUJJQ1MgTFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEU3O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEU4O0NBTkFESUFOIFNZTExBQklDUyBMV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEU5O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTFdBQTtMbzswO0w7Ozs7O047Ozs7OworMTRFQTtDQU5BRElBTiBTWUxMQUJJQ1MgTDtMbzswO0w7Ozs7O047Ozs7OworMTRFQjtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIEw7TG87MDtMOzs7OztOOzs7OzsKKzE0RUM7Q0FOQURJQU4gU1lMTEFCSUNTIE1FRElBTCBMO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEVEO0NBTkFESUFOIFNZTExBQklDUyBTRTtMbzswO0w7Ozs7O047Ozs7OworMTRFRTtDQU5BRElBTiBTWUxMQUJJQ1MgU0FBSTtMbzswO0w7Ozs7O047Ozs7OworMTRFRjtDQU5BRElBTiBTWUxMQUJJQ1MgU0k7TG87MDtMOzs7OztOOzs7OzsKKzE0RjA7Q0FOQURJQU4gU1lMTEFCSUNTIFNJSTtMbzswO0w7Ozs7O047Ozs7OworMTRGMTtDQU5BRElBTiBTWUxMQUJJQ1MgU087TG87MDtMOzs7OztOOzs7OzsKKzE0RjI7Q0FOQURJQU4gU1lMTEFCSUNTIFNPTztMbzswO0w7Ozs7O047Ozs7OworMTRGMztDQU5BRElBTiBTWUxMQUJJQ1MgWS1DUkVFIFNPTztMbzswO0w7Ozs7O047Ozs7OworMTRGNDtDQU5BRElBTiBTWUxMQUJJQ1MgU0E7TG87MDtMOzs7OztOOzs7OzsKKzE0RjU7Q0FOQURJQU4gU1lMTEFCSUNTIFNBQTtMbzswO0w7Ozs7O047Ozs7OworMTRGNjtDQU5BRElBTiBTWUxMQUJJQ1MgU1dFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEY3O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgU1dFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEY4O0NBTkFESUFOIFNZTExBQklDUyBTV0k7TG87MDtMOzs7OztOOzs7OzsKKzE0Rjk7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBTV0k7TG87MDtMOzs7OztOOzs7OzsKKzE0RkE7Q0FOQURJQU4gU1lMTEFCSUNTIFNXSUk7TG87MDtMOzs7OztOOzs7OzsKKzE0RkI7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBTV0lJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNEZDO0NBTkFESUFOIFNZTExBQklDUyBTV087TG87MDtMOzs7OztOOzs7OzsKKzE0RkQ7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBTV087TG87MDtMOzs7OztOOzs7OzsKKzE0RkU7Q0FOQURJQU4gU1lMTEFCSUNTIFNXT087TG87MDtMOzs7OztOOzs7OzsKKzE0RkY7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBTV09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTAwO0NBTkFESUFOIFNZTExBQklDUyBTV0E7TG87MDtMOzs7OztOOzs7OzsKKzE1MDE7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBTV0E7TG87MDtMOzs7OztOOzs7OzsKKzE1MDI7Q0FOQURJQU4gU1lMTEFCSUNTIFNXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE1MDM7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBTV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTA0O0NBTkFESUFOIFNZTExBQklDUyBOQVNLQVBJIFNXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE1MDU7Q0FOQURJQU4gU1lMTEFCSUNTIFM7TG87MDtMOzs7OztOOzs7OzsKKzE1MDY7Q0FOQURJQU4gU1lMTEFCSUNTIEFUSEFQQVNDQU4gUztMbzswO0w7Ozs7O047Ozs7OworMTUwNztDQU5BRElBTiBTWUxMQUJJQ1MgU1c7TG87MDtMOzs7OztOOzs7OzsKKzE1MDg7Q0FOQURJQU4gU1lMTEFCSUNTIEJMQUNLRk9PVCBTO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTA5O0NBTkFESUFOIFNZTExBQklDUyBNT09TRS1DUkVFIFNLO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTBBO0NBTkFESUFOIFNZTExBQklDUyBOQVNLQVBJIFNLVztMbzswO0w7Ozs7O047Ozs7OworMTUwQjtDQU5BRElBTiBTWUxMQUJJQ1MgTkFTS0FQSSBTLVc7TG87MDtMOzs7OztOOzs7OzsKKzE1MEM7Q0FOQURJQU4gU1lMTEFCSUNTIE5BU0tBUEkgU1BXQTtMbzswO0w7Ozs7O047Ozs7OworMTUwRDtDQU5BRElBTiBTWUxMQUJJQ1MgTkFTS0FQSSBTVFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTBFO0NBTkFESUFOIFNZTExBQklDUyBOQVNLQVBJIFNLV0E7TG87MDtMOzs7OztOOzs7OzsKKzE1MEY7Q0FOQURJQU4gU1lMTEFCSUNTIE5BU0tBUEkgU0NXQTtMbzswO0w7Ozs7O047Ozs7OworMTUxMDtDQU5BRElBTiBTWUxMQUJJQ1MgU0hFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTExO0NBTkFESUFOIFNZTExBQklDUyBTSEk7TG87MDtMOzs7OztOOzs7OzsKKzE1MTI7Q0FOQURJQU4gU1lMTEFCSUNTIFNISUk7TG87MDtMOzs7OztOOzs7OzsKKzE1MTM7Q0FOQURJQU4gU1lMTEFCSUNTIFNITztMbzswO0w7Ozs7O047Ozs7OworMTUxNDtDQU5BRElBTiBTWUxMQUJJQ1MgU0hPTztMbzswO0w7Ozs7O047Ozs7OworMTUxNTtDQU5BRElBTiBTWUxMQUJJQ1MgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTE2O0NBTkFESUFOIFNZTExBQklDUyBTSEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTE3O0NBTkFESUFOIFNZTExBQklDUyBTSFdFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTE4O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgU0hXRTtMbzswO0w7Ozs7O047Ozs7OworMTUxOTtDQU5BRElBTiBTWUxMQUJJQ1MgU0hXSTtMbzswO0w7Ozs7O047Ozs7OworMTUxQTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFNIV0k7TG87MDtMOzs7OztOOzs7OzsKKzE1MUI7Q0FOQURJQU4gU1lMTEFCSUNTIFNIV0lJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTFDO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgU0hXSUk7TG87MDtMOzs7OztOOzs7OzsKKzE1MUQ7Q0FOQURJQU4gU1lMTEFCSUNTIFNIV087TG87MDtMOzs7OztOOzs7OzsKKzE1MUU7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBTSFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTFGO0NBTkFESUFOIFNZTExBQklDUyBTSFdPTztMbzswO0w7Ozs7O047Ozs7OworMTUyMDtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFNIV09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTIxO0NBTkFESUFOIFNZTExBQklDUyBTSFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTIyO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgU0hXQTtMbzswO0w7Ozs7O047Ozs7OworMTUyMztDQU5BRElBTiBTWUxMQUJJQ1MgU0hXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE1MjQ7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBTSFdBQTtMbzswO0w7Ozs7O047Ozs7OworMTUyNTtDQU5BRElBTiBTWUxMQUJJQ1MgU0g7TG87MDtMOzs7OztOOzs7OzsKKzE1MjY7Q0FOQURJQU4gU1lMTEFCSUNTIFlFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTI3O0NBTkFESUFOIFNZTExBQklDUyBZQUFJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTI4O0NBTkFESUFOIFNZTExBQklDUyBZSTtMbzswO0w7Ozs7O047Ozs7OworMTUyOTtDQU5BRElBTiBTWUxMQUJJQ1MgWUlJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTJBO0NBTkFESUFOIFNZTExBQklDUyBZTztMbzswO0w7Ozs7O047Ozs7OworMTUyQjtDQU5BRElBTiBTWUxMQUJJQ1MgWU9PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTJDO0NBTkFESUFOIFNZTExBQklDUyBZLUNSRUUgWU9PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTJEO0NBTkFESUFOIFNZTExBQklDUyBZQTtMbzswO0w7Ozs7O047Ozs7OworMTUyRTtDQU5BRElBTiBTWUxMQUJJQ1MgWUFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTJGO0NBTkFESUFOIFNZTExBQklDUyBZV0U7TG87MDtMOzs7OztOOzs7OzsKKzE1MzA7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBZV0U7TG87MDtMOzs7OztOOzs7OzsKKzE1MzE7Q0FOQURJQU4gU1lMTEFCSUNTIFlXSTtMbzswO0w7Ozs7O047Ozs7OworMTUzMjtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFlXSTtMbzswO0w7Ozs7O047Ozs7OworMTUzMztDQU5BRElBTiBTWUxMQUJJQ1MgWVdJSTtMbzswO0w7Ozs7O047Ozs7OworMTUzNDtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFlXSUk7TG87MDtMOzs7OztOOzs7OzsKKzE1MzU7Q0FOQURJQU4gU1lMTEFCSUNTIFlXTztMbzswO0w7Ozs7O047Ozs7OworMTUzNjtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFlXTztMbzswO0w7Ozs7O047Ozs7OworMTUzNztDQU5BRElBTiBTWUxMQUJJQ1MgWVdPTztMbzswO0w7Ozs7O047Ozs7OworMTUzODtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFlXT087TG87MDtMOzs7OztOOzs7OzsKKzE1Mzk7Q0FOQURJQU4gU1lMTEFCSUNTIFlXQTtMbzswO0w7Ozs7O047Ozs7OworMTUzQTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFlXQTtMbzswO0w7Ozs7O047Ozs7OworMTUzQjtDQU5BRElBTiBTWUxMQUJJQ1MgWVdBQTtMbzswO0w7Ozs7O047Ozs7OworMTUzQztDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFlXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE1M0Q7Q0FOQURJQU4gU1lMTEFCSUNTIE5BU0tBUEkgWVdBQTtMbzswO0w7Ozs7O047Ozs7OworMTUzRTtDQU5BRElBTiBTWUxMQUJJQ1MgWTtMbzswO0w7Ozs7O047Ozs7OworMTUzRjtDQU5BRElBTiBTWUxMQUJJQ1MgQklCTEUtQ1JFRSBZO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTQwO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgWTtMbzswO0w7Ozs7O047Ozs7OworMTU0MTtDQU5BRElBTiBTWUxMQUJJQ1MgU0FZSVNJIFlJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTQyO0NBTkFESUFOIFNZTExBQklDUyBSRTtMbzswO0w7Ozs7O047Ozs7OworMTU0MztDQU5BRElBTiBTWUxMQUJJQ1MgUi1DUkVFIFJFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTQ0O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgTEU7TG87MDtMOzs7OztOOzs7OzsKKzE1NDU7Q0FOQURJQU4gU1lMTEFCSUNTIFJBQUk7TG87MDtMOzs7OztOOzs7OzsKKzE1NDY7Q0FOQURJQU4gU1lMTEFCSUNTIFJJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTQ3O0NBTkFESUFOIFNZTExBQklDUyBSSUk7TG87MDtMOzs7OztOOzs7OzsKKzE1NDg7Q0FOQURJQU4gU1lMTEFCSUNTIFJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTQ5O0NBTkFESUFOIFNZTExBQklDUyBST087TG87MDtMOzs7OztOOzs7OzsKKzE1NEE7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBMTztMbzswO0w7Ozs7O047Ozs7OworMTU0QjtDQU5BRElBTiBTWUxMQUJJQ1MgUkE7TG87MDtMOzs7OztOOzs7OzsKKzE1NEM7Q0FOQURJQU4gU1lMTEFCSUNTIFJBQTtMbzswO0w7Ozs7O047Ozs7OworMTU0RDtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTRFO0NBTkFESUFOIFNZTExBQklDUyBSV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTRGO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgUldBQTtMbzswO0w7Ozs7O047Ozs7OworMTU1MDtDQU5BRElBTiBTWUxMQUJJQ1MgUjtMbzswO0w7Ozs7O047Ozs7OworMTU1MTtDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFI7TG87MDtMOzs7OztOOzs7OzsKKzE1NTI7Q0FOQURJQU4gU1lMTEFCSUNTIE1FRElBTCBSO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTUzO0NBTkFESUFOIFNZTExBQklDUyBGRTtMbzswO0w7Ozs7O047Ozs7OworMTU1NDtDQU5BRElBTiBTWUxMQUJJQ1MgRkFBSTtMbzswO0w7Ozs7O047Ozs7OworMTU1NTtDQU5BRElBTiBTWUxMQUJJQ1MgRkk7TG87MDtMOzs7OztOOzs7OzsKKzE1NTY7Q0FOQURJQU4gU1lMTEFCSUNTIEZJSTtMbzswO0w7Ozs7O047Ozs7OworMTU1NztDQU5BRElBTiBTWUxMQUJJQ1MgRk87TG87MDtMOzs7OztOOzs7OzsKKzE1NTg7Q0FOQURJQU4gU1lMTEFCSUNTIEZPTztMbzswO0w7Ozs7O047Ozs7OworMTU1OTtDQU5BRElBTiBTWUxMQUJJQ1MgRkE7TG87MDtMOzs7OztOOzs7OzsKKzE1NUE7Q0FOQURJQU4gU1lMTEFCSUNTIEZBQTtMbzswO0w7Ozs7O047Ozs7OworMTU1QjtDQU5BRElBTiBTWUxMQUJJQ1MgRldBQTtMbzswO0w7Ozs7O047Ozs7OworMTU1QztDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIEZXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE1NUQ7Q0FOQURJQU4gU1lMTEFCSUNTIEY7TG87MDtMOzs7OztOOzs7OzsKKzE1NUU7Q0FOQURJQU4gU1lMTEFCSUNTIFRIRTtMbzswO0w7Ozs7O047Ozs7OworMTU1RjtDQU5BRElBTiBTWUxMQUJJQ1MgTi1DUkVFIFRIRTtMbzswO0w7Ozs7O047Ozs7OworMTU2MDtDQU5BRElBTiBTWUxMQUJJQ1MgVEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTYxO0NBTkFESUFOIFNZTExBQklDUyBOLUNSRUUgVEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTYyO0NBTkFESUFOIFNZTExBQklDUyBUSElJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTYzO0NBTkFESUFOIFNZTExBQklDUyBOLUNSRUUgVEhJSTtMbzswO0w7Ozs7O047Ozs7OworMTU2NDtDQU5BRElBTiBTWUxMQUJJQ1MgVEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTY1O0NBTkFESUFOIFNZTExBQklDUyBUSE9PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTY2O0NBTkFESUFOIFNZTExBQklDUyBUSEE7TG87MDtMOzs7OztOOzs7OzsKKzE1Njc7Q0FOQURJQU4gU1lMTEFCSUNTIFRIQUE7TG87MDtMOzs7OztOOzs7OzsKKzE1Njg7Q0FOQURJQU4gU1lMTEFCSUNTIFRIV0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTY5O0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgVEhXQUE7TG87MDtMOzs7OztOOzs7OzsKKzE1NkE7Q0FOQURJQU4gU1lMTEFCSUNTIFRIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTZCO0NBTkFESUFOIFNZTExBQklDUyBUVEhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTZDO0NBTkFESUFOIFNZTExBQklDUyBUVEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTZEO0NBTkFESUFOIFNZTExBQklDUyBUVEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTZFO0NBTkFESUFOIFNZTExBQklDUyBUVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTZGO0NBTkFESUFOIFNZTExBQklDUyBUVEg7TG87MDtMOzs7OztOOzs7OzsKKzE1NzA7Q0FOQURJQU4gU1lMTEFCSUNTIFRZRTtMbzswO0w7Ozs7O047Ozs7OworMTU3MTtDQU5BRElBTiBTWUxMQUJJQ1MgVFlJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTcyO0NBTkFESUFOIFNZTExBQklDUyBUWU87TG87MDtMOzs7OztOOzs7OzsKKzE1NzM7Q0FOQURJQU4gU1lMTEFCSUNTIFRZQTtMbzswO0w7Ozs7O047Ozs7OworMTU3NDtDQU5BRElBTiBTWUxMQUJJQ1MgTlVOQVZJSyBIRTtMbzswO0w7Ozs7O047Ozs7OworMTU3NTtDQU5BRElBTiBTWUxMQUJJQ1MgTlVOQVZJSyBISTtMbzswO0w7Ozs7O047Ozs7OworMTU3NjtDQU5BRElBTiBTWUxMQUJJQ1MgTlVOQVZJSyBISUk7TG87MDtMOzs7OztOOzs7OzsKKzE1Nzc7Q0FOQURJQU4gU1lMTEFCSUNTIE5VTkFWSUsgSE87TG87MDtMOzs7OztOOzs7OzsKKzE1Nzg7Q0FOQURJQU4gU1lMTEFCSUNTIE5VTkFWSUsgSE9PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTc5O0NBTkFESUFOIFNZTExBQklDUyBOVU5BVklLIEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTdBO0NBTkFESUFOIFNZTExBQklDUyBOVU5BVklLIEhBQTtMbzswO0w7Ozs7O047Ozs7OworMTU3QjtDQU5BRElBTiBTWUxMQUJJQ1MgTlVOQVZJSyBIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTdDO0NBTkFESUFOIFNZTExBQklDUyBOVU5BVlVUIEg7TG87MDtMOzs7OztOOzs7OzsKKzE1N0Q7Q0FOQURJQU4gU1lMTEFCSUNTIEhLO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTdFO0NBTkFESUFOIFNZTExBQklDUyBRQUFJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTdGO0NBTkFESUFOIFNZTExBQklDUyBRSTtMbzswO0w7Ozs7O047Ozs7OworMTU4MDtDQU5BRElBTiBTWUxMQUJJQ1MgUUlJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTgxO0NBTkFESUFOIFNZTExBQklDUyBRTztMbzswO0w7Ozs7O047Ozs7OworMTU4MjtDQU5BRElBTiBTWUxMQUJJQ1MgUU9PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTgzO0NBTkFESUFOIFNZTExBQklDUyBRQTtMbzswO0w7Ozs7O047Ozs7OworMTU4NDtDQU5BRElBTiBTWUxMQUJJQ1MgUUFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTg1O0NBTkFESUFOIFNZTExBQklDUyBRO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTg2O0NBTkFESUFOIFNZTExBQklDUyBUTEhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTg3O0NBTkFESUFOIFNZTExBQklDUyBUTEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTg4O0NBTkFESUFOIFNZTExBQklDUyBUTEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTg5O0NBTkFESUFOIFNZTExBQklDUyBUTEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNThBO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgUkU7TG87MDtMOzs7OztOOzs7OzsKKzE1OEI7Q0FOQURJQU4gU1lMTEFCSUNTIFdFU1QtQ1JFRSBSSTtMbzswO0w7Ozs7O047Ozs7OworMTU4QztDQU5BRElBTiBTWUxMQUJJQ1MgV0VTVC1DUkVFIFJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNThEO0NBTkFESUFOIFNZTExBQklDUyBXRVNULUNSRUUgUkE7TG87MDtMOzs7OztOOzs7OzsKKzE1OEU7Q0FOQURJQU4gU1lMTEFCSUNTIE5HQUFJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNThGO0NBTkFESUFOIFNZTExBQklDUyBOR0k7TG87MDtMOzs7OztOOzs7OzsKKzE1OTA7Q0FOQURJQU4gU1lMTEFCSUNTIE5HSUk7TG87MDtMOzs7OztOOzs7OzsKKzE1OTE7Q0FOQURJQU4gU1lMTEFCSUNTIE5HTztMbzswO0w7Ozs7O047Ozs7OworMTU5MjtDQU5BRElBTiBTWUxMQUJJQ1MgTkdPTztMbzswO0w7Ozs7O047Ozs7OworMTU5MztDQU5BRElBTiBTWUxMQUJJQ1MgTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTk0O0NBTkFESUFOIFNZTExBQklDUyBOR0FBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTk1O0NBTkFESUFOIFNZTExBQklDUyBORztMbzswO0w7Ozs7O047Ozs7OworMTU5NjtDQU5BRElBTiBTWUxMQUJJQ1MgTk5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTk3O0NBTkFESUFOIFNZTExBQklDUyBTQVlJU0kgU0hFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTk4O0NBTkFESUFOIFNZTExBQklDUyBTQVlJU0kgU0hJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTk5O0NBTkFESUFOIFNZTExBQklDUyBTQVlJU0kgU0hPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTlBO0NBTkFESUFOIFNZTExBQklDUyBTQVlJU0kgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTlCO0NBTkFESUFOIFNZTExBQklDUyBXT09EUy1DUkVFIFRIRTtMbzswO0w7Ozs7O047Ozs7OworMTU5QztDQU5BRElBTiBTWUxMQUJJQ1MgV09PRFMtQ1JFRSBUSEk7TG87MDtMOzs7OztOOzs7OzsKKzE1OUQ7Q0FOQURJQU4gU1lMTEFCSUNTIFdPT0RTLUNSRUUgVEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNTlFO0NBTkFESUFOIFNZTExBQklDUyBXT09EUy1DUkVFIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMTU5RjtDQU5BRElBTiBTWUxMQUJJQ1MgV09PRFMtQ1JFRSBUSDtMbzswO0w7Ozs7O047Ozs7OworMTVBMDtDQU5BRElBTiBTWUxMQUJJQ1MgTEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUExO0NBTkFESUFOIFNZTExBQklDUyBMSElJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUEyO0NBTkFESUFOIFNZTExBQklDUyBMSE87TG87MDtMOzs7OztOOzs7OzsKKzE1QTM7Q0FOQURJQU4gU1lMTEFCSUNTIExIT087TG87MDtMOzs7OztOOzs7OzsKKzE1QTQ7Q0FOQURJQU4gU1lMTEFCSUNTIExIQTtMbzswO0w7Ozs7O047Ozs7OworMTVBNTtDQU5BRElBTiBTWUxMQUJJQ1MgTEhBQTtMbzswO0w7Ozs7O047Ozs7OworMTVBNjtDQU5BRElBTiBTWUxMQUJJQ1MgTEg7TG87MDtMOzs7OztOOzs7OzsKKzE1QTc7Q0FOQURJQU4gU1lMTEFCSUNTIFRILUNSRUUgVEhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUE4O0NBTkFESUFOIFNZTExBQklDUyBUSC1DUkVFIFRISTtMbzswO0w7Ozs7O047Ozs7OworMTVBOTtDQU5BRElBTiBTWUxMQUJJQ1MgVEgtQ1JFRSBUSElJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUFBO0NBTkFESUFOIFNZTExBQklDUyBUSC1DUkVFIFRITztMbzswO0w7Ozs7O047Ozs7OworMTVBQjtDQU5BRElBTiBTWUxMQUJJQ1MgVEgtQ1JFRSBUSE9PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUFDO0NBTkFESUFOIFNZTExBQklDUyBUSC1DUkVFIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMTVBRDtDQU5BRElBTiBTWUxMQUJJQ1MgVEgtQ1JFRSBUSEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUFFO0NBTkFESUFOIFNZTExBQklDUyBUSC1DUkVFIFRIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUFGO0NBTkFESUFOIFNZTExBQklDUyBBSVZJTElLIEI7TG87MDtMOzs7OztOOzs7OzsKKzE1QjA7Q0FOQURJQU4gU1lMTEFCSUNTIEJMQUNLRk9PVCBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUIxO0NBTkFESUFOIFNZTExBQklDUyBCTEFDS0ZPT1QgSTtMbzswO0w7Ozs7O047Ozs7OworMTVCMjtDQU5BRElBTiBTWUxMQUJJQ1MgQkxBQ0tGT09UIE87TG87MDtMOzs7OztOOzs7OzsKKzE1QjM7Q0FOQURJQU4gU1lMTEFCSUNTIEJMQUNLRk9PVCBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUI0O0NBTkFESUFOIFNZTExBQklDUyBCTEFDS0ZPT1QgV0U7TG87MDtMOzs7OztOOzs7OzsKKzE1QjU7Q0FOQURJQU4gU1lMTEFCSUNTIEJMQUNLRk9PVCBXSTtMbzswO0w7Ozs7O047Ozs7OworMTVCNjtDQU5BRElBTiBTWUxMQUJJQ1MgQkxBQ0tGT09UIFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUI3O0NBTkFESUFOIFNZTExBQklDUyBCTEFDS0ZPT1QgV0E7TG87MDtMOzs7OztOOzs7OzsKKzE1Qjg7Q0FOQURJQU4gU1lMTEFCSUNTIEJMQUNLRk9PVCBORTtMbzswO0w7Ozs7O047Ozs7OworMTVCOTtDQU5BRElBTiBTWUxMQUJJQ1MgQkxBQ0tGT09UIE5JO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUJBO0NBTkFESUFOIFNZTExBQklDUyBCTEFDS0ZPT1QgTk87TG87MDtMOzs7OztOOzs7OzsKKzE1QkI7Q0FOQURJQU4gU1lMTEFCSUNTIEJMQUNLRk9PVCBOQTtMbzswO0w7Ozs7O047Ozs7OworMTVCQztDQU5BRElBTiBTWUxMQUJJQ1MgQkxBQ0tGT09UIEtFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUJEO0NBTkFESUFOIFNZTExBQklDUyBCTEFDS0ZPT1QgS0k7TG87MDtMOzs7OztOOzs7OzsKKzE1QkU7Q0FOQURJQU4gU1lMTEFCSUNTIEJMQUNLRk9PVCBLTztMbzswO0w7Ozs7O047Ozs7OworMTVCRjtDQU5BRElBTiBTWUxMQUJJQ1MgQkxBQ0tGT09UIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUMwO0NBTkFESUFOIFNZTExBQklDUyBTQVlJU0kgSEU7TG87MDtMOzs7OztOOzs7OzsKKzE1QzE7Q0FOQURJQU4gU1lMTEFCSUNTIFNBWUlTSSBISTtMbzswO0w7Ozs7O047Ozs7OworMTVDMjtDQU5BRElBTiBTWUxMQUJJQ1MgU0FZSVNJIEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUMzO0NBTkFESUFOIFNZTExBQklDUyBTQVlJU0kgSEE7TG87MDtMOzs7OztOOzs7OzsKKzE1QzQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgR0hVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUM1O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEdITztMbzswO0w7Ozs7O047Ozs7OworMTVDNjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBHSEU7TG87MDtMOzs7OztOOzs7OzsKKzE1Qzc7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgR0hFRTtMbzswO0w7Ozs7O047Ozs7OworMTVDODtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBHSEk7TG87MDtMOzs7OztOOzs7OzsKKzE1Qzk7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgR0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUNBO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFJVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUNCO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUNDO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFJFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUNEO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFJFRTtMbzswO0w7Ozs7O047Ozs7OworMTVDRTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBSSTtMbzswO0w7Ozs7O047Ozs7OworMTVDRjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBSQTtMbzswO0w7Ozs7O047Ozs7OworMTVEMDtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBXVTtMbzswO0w7Ozs7O047Ozs7OworMTVEMTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBXTztMbzswO0w7Ozs7O047Ozs7OworMTVEMjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBXRTtMbzswO0w7Ozs7O047Ozs7OworMTVEMztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBXRUU7TG87MDtMOzs7OztOOzs7OzsKKzE1RDQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgV0k7TG87MDtMOzs7OztOOzs7OzsKKzE1RDU7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgV0E7TG87MDtMOzs7OztOOzs7OzsKKzE1RDY7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgSFdVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUQ3O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEhXTztMbzswO0w7Ozs7O047Ozs7OworMTVEODtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBIV0U7TG87MDtMOzs7OztOOzs7OzsKKzE1RDk7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgSFdFRTtMbzswO0w7Ozs7O047Ozs7OworMTVEQTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBIV0k7TG87MDtMOzs7OztOOzs7OzsKKzE1REI7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgSFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNURDO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRIVTtMbzswO0w7Ozs7O047Ozs7OworMTVERDtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUSE87TG87MDtMOzs7OztOOzs7OzsKKzE1REU7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVEhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNURGO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRIRUU7TG87MDtMOzs7OztOOzs7OzsKKzE1RTA7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUUxO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMTVFMjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUVFU7TG87MDtMOzs7OztOOzs7OzsKKzE1RTM7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVFRPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUU0O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRURTtMbzswO0w7Ozs7O047Ozs7OworMTVFNTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUVEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUU2O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRUSTtMbzswO0w7Ozs7O047Ozs7OworMTVFNztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUVEE7TG87MDtMOzs7OztOOzs7OzsKKzE1RTg7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgUFU7TG87MDtMOzs7OztOOzs7OzsKKzE1RTk7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgUE87TG87MDtMOzs7OztOOzs7OzsKKzE1RUE7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgUEU7TG87MDtMOzs7OztOOzs7OzsKKzE1RUI7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgUEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUVDO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUVEO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUVFO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFA7TG87MDtMOzs7OztOOzs7OzsKKzE1RUY7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgR1U7TG87MDtMOzs7OztOOzs7OzsKKzE1RjA7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgR087TG87MDtMOzs7OztOOzs7OzsKKzE1RjE7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgR0U7TG87MDtMOzs7OztOOzs7OzsKKzE1RjI7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgR0VFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUYzO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUY0O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUY1O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEtIVTtMbzswO0w7Ozs7O047Ozs7OworMTVGNjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBLSE87TG87MDtMOzs7OztOOzs7OzsKKzE1Rjc7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgS0hFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUY4O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEtIRUU7TG87MDtMOzs7OztOOzs7OzsKKzE1Rjk7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgS0hJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUZBO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEtIQTtMbzswO0w7Ozs7O047Ozs7OworMTVGQjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBLS1U7TG87MDtMOzs7OztOOzs7OzsKKzE1RkM7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgS0tPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUZEO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEtLRTtMbzswO0w7Ozs7O047Ozs7OworMTVGRTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBLS0VFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNUZGO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEtLSTtMbzswO0w7Ozs7O047Ozs7OworMTYwMDtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBLS0E7TG87MDtMOzs7OztOOzs7OzsKKzE2MDE7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgS0s7TG87MDtMOzs7OztOOzs7OzsKKzE2MDI7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTlU7TG87MDtMOzs7OztOOzs7OzsKKzE2MDM7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTk87TG87MDtMOzs7OztOOzs7OzsKKzE2MDQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTkU7TG87MDtMOzs7OztOOzs7OzsKKzE2MDU7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTkVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjA2O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIE5JO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjA3O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIE5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjA4O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIE1VO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjA5O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIE1PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjBBO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIE1FO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjBCO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIE1FRTtMbzswO0w7Ozs7O047Ozs7OworMTYwQztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBNSTtMbzswO0w7Ozs7O047Ozs7OworMTYwRDtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMTYwRTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBZVTtMbzswO0w7Ozs7O047Ozs7OworMTYwRjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBZTztMbzswO0w7Ozs7O047Ozs7OworMTYxMDtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBZRTtMbzswO0w7Ozs7O047Ozs7OworMTYxMTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBZRUU7TG87MDtMOzs7OztOOzs7OzsKKzE2MTI7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgWUk7TG87MDtMOzs7OztOOzs7OzsKKzE2MTM7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgWUE7TG87MDtMOzs7OztOOzs7OzsKKzE2MTQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgSlU7TG87MDtMOzs7OztOOzs7OzsKKzE2MTU7Q0FOQURJQU4gU1lMTEFCSUNTIFNBWUlTSSBKVTtMbzswO0w7Ozs7O047Ozs7OworMTYxNjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBKTztMbzswO0w7Ozs7O047Ozs7OworMTYxNztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBKRTtMbzswO0w7Ozs7O047Ozs7OworMTYxODtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBKRUU7TG87MDtMOzs7OztOOzs7OzsKKzE2MTk7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgSkk7TG87MDtMOzs7OztOOzs7OzsKKzE2MUE7Q0FOQURJQU4gU1lMTEFCSUNTIFNBWUlTSSBKSTtMbzswO0w7Ozs7O047Ozs7OworMTYxQjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBKQTtMbzswO0w7Ozs7O047Ozs7OworMTYxQztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBKSlU7TG87MDtMOzs7OztOOzs7OzsKKzE2MUQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgSkpPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjFFO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEpKRTtMbzswO0w7Ozs7O047Ozs7OworMTYxRjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBKSkVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjIwO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIEpKSTtMbzswO0w7Ozs7O047Ozs7OworMTYyMTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBKSkE7TG87MDtMOzs7OztOOzs7OzsKKzE2MjI7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTFU7TG87MDtMOzs7OztOOzs7OzsKKzE2MjM7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTE87TG87MDtMOzs7OztOOzs7OzsKKzE2MjQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTEU7TG87MDtMOzs7OztOOzs7OzsKKzE2MjU7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjI2O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIExJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjI3O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjI4O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIERMVTtMbzswO0w7Ozs7O047Ozs7OworMTYyOTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBETE87TG87MDtMOzs7OztOOzs7OzsKKzE2MkE7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgRExFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjJCO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIERMRUU7TG87MDtMOzs7OztOOzs7OzsKKzE2MkM7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgRExJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjJEO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIERMQTtMbzswO0w7Ozs7O047Ozs7OworMTYyRTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBMSFU7TG87MDtMOzs7OztOOzs7OzsKKzE2MkY7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgTEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjMwO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIExIRTtMbzswO0w7Ozs7O047Ozs7OworMTYzMTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBMSEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjMyO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIExISTtMbzswO0w7Ozs7O047Ozs7OworMTYzMztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBMSEE7TG87MDtMOzs7OztOOzs7OzsKKzE2MzQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVExIVTtMbzswO0w7Ozs7O047Ozs7OworMTYzNTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUTEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjM2O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRMSEU7TG87MDtMOzs7OztOOzs7OzsKKzE2Mzc7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVExIRUU7TG87MDtMOzs7OztOOzs7OzsKKzE2Mzg7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVExISTtMbzswO0w7Ozs7O047Ozs7OworMTYzOTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUTEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjNBO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRMVTtMbzswO0w7Ozs7O047Ozs7OworMTYzQjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUTE87TG87MDtMOzs7OztOOzs7OzsKKzE2M0M7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVExFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjNEO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRMRUU7TG87MDtMOzs7OztOOzs7OzsKKzE2M0U7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVExJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjNGO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRMQTtMbzswO0w7Ozs7O047Ozs7OworMTY0MDtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBaVTtMbzswO0w7Ozs7O047Ozs7OworMTY0MTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBaTztMbzswO0w7Ozs7O047Ozs7OworMTY0MjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBaRTtMbzswO0w7Ozs7O047Ozs7OworMTY0MztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBaRUU7TG87MDtMOzs7OztOOzs7OzsKKzE2NDQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgWkk7TG87MDtMOzs7OztOOzs7OzsKKzE2NDU7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgWkE7TG87MDtMOzs7OztOOzs7OzsKKzE2NDY7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgWjtMbzswO0w7Ozs7O047Ozs7OworMTY0NztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBJTklUSUFMIFo7TG87MDtMOzs7OztOOzs7OzsKKzE2NDg7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgRFpVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjQ5O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIERaTztMbzswO0w7Ozs7O047Ozs7OworMTY0QTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBEWkU7TG87MDtMOzs7OztOOzs7OzsKKzE2NEI7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgRFpFRTtMbzswO0w7Ozs7O047Ozs7OworMTY0QztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBEWkk7TG87MDtMOzs7OztOOzs7OzsKKzE2NEQ7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgRFpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjRFO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFNVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjRGO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFNPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjUwO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFNFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjUxO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFNFRTtMbzswO0w7Ozs7O047Ozs7OworMTY1MjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBTSTtMbzswO0w7Ozs7O047Ozs7OworMTY1MztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBTQTtMbzswO0w7Ozs7O047Ozs7OworMTY1NDtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBTSFU7TG87MDtMOzs7OztOOzs7OzsKKzE2NTU7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgU0hPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjU2O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFNIRTtMbzswO0w7Ozs7O047Ozs7OworMTY1NztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBTSEVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjU4O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFNISTtMbzswO0w7Ozs7O047Ozs7OworMTY1OTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBTSEE7TG87MDtMOzs7OztOOzs7OzsKKzE2NUE7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgU0g7TG87MDtMOzs7OztOOzs7OzsKKzE2NUI7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVFNVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjVDO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRTTztMbzswO0w7Ozs7O047Ozs7OworMTY1RDtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUU0U7TG87MDtMOzs7OztOOzs7OzsKKzE2NUU7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVFNFRTtMbzswO0w7Ozs7O047Ozs7OworMTY1RjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUU0k7TG87MDtMOzs7OztOOzs7OzsKKzE2NjA7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjYxO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIENIVTtMbzswO0w7Ozs7O047Ozs7OworMTY2MjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBDSE87TG87MDtMOzs7OztOOzs7OzsKKzE2NjM7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgQ0hFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjY0O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIENIRUU7TG87MDtMOzs7OztOOzs7OzsKKzE2NjU7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgQ0hJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjY2O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIENIQTtMbzswO0w7Ozs7O047Ozs7OworMTY2NztDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUVFNVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjY4O0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRUU087TG87MDtMOzs7OztOOzs7OzsKKzE2Njk7Q0FOQURJQU4gU1lMTEFCSUNTIENBUlJJRVIgVFRTRTtMbzswO0w7Ozs7O047Ozs7OworMTY2QTtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUVFNFRTtMbzswO0w7Ozs7O047Ozs7OworMTY2QjtDQU5BRElBTiBTWUxMQUJJQ1MgQ0FSUklFUiBUVFNJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjZDO0NBTkFESUFOIFNZTExBQklDUyBDQVJSSUVSIFRUU0E7TG87MDtMOzs7OztOOzs7OzsKKzE2NkQ7Q0FOQURJQU4gU1lMTEFCSUNTIENISSBTSUdOO1BvOzA7TDs7Ozs7Tjs7Ozs7CisxNjZFO0NBTkFESUFOIFNZTExBQklDUyBGVUxMIFNUT1A7UG87MDtMOzs7OztOOzs7OzsKKzE2NkY7Q0FOQURJQU4gU1lMTEFCSUNTIFFBSTtMbzswO0w7Ozs7O047Ozs7OworMTY3MDtDQU5BRElBTiBTWUxMQUJJQ1MgTkdBSTtMbzswO0w7Ozs7O047Ozs7OworMTY3MTtDQU5BRElBTiBTWUxMQUJJQ1MgTk5HSTtMbzswO0w7Ozs7O047Ozs7OworMTY3MjtDQU5BRElBTiBTWUxMQUJJQ1MgTk5HSUk7TG87MDtMOzs7OztOOzs7OzsKKzE2NzM7Q0FOQURJQU4gU1lMTEFCSUNTIE5OR087TG87MDtMOzs7OztOOzs7OzsKKzE2NzQ7Q0FOQURJQU4gU1lMTEFCSUNTIE5OR09PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjc1O0NBTkFESUFOIFNZTExBQklDUyBOTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjc2O0NBTkFESUFOIFNZTExBQklDUyBOTkdBQTtMbzswO0w7Ozs7O047Ozs7OworMTY4MDtPR0hBTSBTUEFDRSBNQVJLO1pzOzA7V1M7Ozs7O047Ozs7OworMTY4MTtPR0hBTSBMRVRURVIgQkVJVEg7TG87MDtMOzs7OztOOzs7OzsKKzE2ODI7T0dIQU0gTEVUVEVSIExVSVM7TG87MDtMOzs7OztOOzs7OzsKKzE2ODM7T0dIQU0gTEVUVEVSIEZFQVJOO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjg0O09HSEFNIExFVFRFUiBTQUlMO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjg1O09HSEFNIExFVFRFUiBOSU9OO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjg2O09HSEFNIExFVFRFUiBVQVRIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjg3O09HSEFNIExFVFRFUiBEQUlSO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjg4O09HSEFNIExFVFRFUiBUSU5ORTtMbzswO0w7Ozs7O047Ozs7OworMTY4OTtPR0hBTSBMRVRURVIgQ09MTDtMbzswO0w7Ozs7O047Ozs7OworMTY4QTtPR0hBTSBMRVRURVIgQ0VJUlQ7TG87MDtMOzs7OztOOzs7OzsKKzE2OEI7T0dIQU0gTEVUVEVSIE1VSU47TG87MDtMOzs7OztOOzs7OzsKKzE2OEM7T0dIQU0gTEVUVEVSIEdPUlQ7TG87MDtMOzs7OztOOzs7OzsKKzE2OEQ7T0dIQU0gTEVUVEVSIE5HRUFEQUw7TG87MDtMOzs7OztOOzs7OzsKKzE2OEU7T0dIQU0gTEVUVEVSIFNUUkFJRjtMbzswO0w7Ozs7O047Ozs7OworMTY4RjtPR0hBTSBMRVRURVIgUlVJUztMbzswO0w7Ozs7O047Ozs7OworMTY5MDtPR0hBTSBMRVRURVIgQUlMTTtMbzswO0w7Ozs7O047Ozs7OworMTY5MTtPR0hBTSBMRVRURVIgT05OO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjkyO09HSEFNIExFVFRFUiBVUjtMbzswO0w7Ozs7O047Ozs7OworMTY5MztPR0hBTSBMRVRURVIgRUFESEFESDtMbzswO0w7Ozs7O047Ozs7OworMTY5NDtPR0hBTSBMRVRURVIgSU9ESEFESDtMbzswO0w7Ozs7O047Ozs7OworMTY5NTtPR0hBTSBMRVRURVIgRUFCSEFESDtMbzswO0w7Ozs7O047Ozs7OworMTY5NjtPR0hBTSBMRVRURVIgT1I7TG87MDtMOzs7OztOOzs7OzsKKzE2OTc7T0dIQU0gTEVUVEVSIFVJTExFQU5OO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjk4O09HSEFNIExFVFRFUiBJRklOO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNjk5O09HSEFNIExFVFRFUiBFQU1IQU5DSE9MTDtMbzswO0w7Ozs7O047Ozs7OworMTY5QTtPR0hBTSBMRVRURVIgUEVJVEg7TG87MDtMOzs7OztOOzs7OzsKKzE2OUI7T0dIQU0gRkVBVEhFUiBNQVJLO1BzOzA7T047Ozs7O047Ozs7OworMTY5QztPR0hBTSBSRVZFUlNFRCBGRUFUSEVSIE1BUks7UGU7MDtPTjs7Ozs7Tjs7Ozs7CisxNkEwO1JVTklDIExFVFRFUiBGRUhVIEZFT0ggRkUgRjtMbzswO0w7Ozs7O047Ozs7OworMTZBMTtSVU5JQyBMRVRURVIgVjtMbzswO0w7Ozs7O047Ozs7OworMTZBMjtSVU5JQyBMRVRURVIgVVJVWiBVUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkEzO1JVTklDIExFVFRFUiBZUjtMbzswO0w7Ozs7O047Ozs7OworMTZBNDtSVU5JQyBMRVRURVIgWTtMbzswO0w7Ozs7O047Ozs7OworMTZBNTtSVU5JQyBMRVRURVIgVztMbzswO0w7Ozs7O047Ozs7OworMTZBNjtSVU5JQyBMRVRURVIgVEhVUklTQVogVEhVUlMgVEhPUk47TG87MDtMOzs7OztOOzs7OzsKKzE2QTc7UlVOSUMgTEVUVEVSIEVUSDtMbzswO0w7Ozs7O047Ozs7OworMTZBODtSVU5JQyBMRVRURVIgQU5TVVogQTtMbzswO0w7Ozs7O047Ozs7OworMTZBOTtSVU5JQyBMRVRURVIgT1MgTztMbzswO0w7Ozs7O047Ozs7OworMTZBQTtSVU5JQyBMRVRURVIgQUMgQTtMbzswO0w7Ozs7O047Ozs7OworMTZBQjtSVU5JQyBMRVRURVIgQUVTQztMbzswO0w7Ozs7O047Ozs7OworMTZBQztSVU5JQyBMRVRURVIgTE9ORy1CUkFOQ0gtT1NTIE87TG87MDtMOzs7OztOOzs7OzsKKzE2QUQ7UlVOSUMgTEVUVEVSIFNIT1JULVRXSUctT1NTIE87TG87MDtMOzs7OztOOzs7OzsKKzE2QUU7UlVOSUMgTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzE2QUY7UlVOSUMgTEVUVEVSIE9FO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkIwO1JVTklDIExFVFRFUiBPTjtMbzswO0w7Ozs7O047Ozs7OworMTZCMTtSVU5JQyBMRVRURVIgUkFJRE8gUkFEIFJFSUQgUjtMbzswO0w7Ozs7O047Ozs7OworMTZCMjtSVU5JQyBMRVRURVIgS0FVTkE7TG87MDtMOzs7OztOOzs7OzsKKzE2QjM7UlVOSUMgTEVUVEVSIENFTjtMbzswO0w7Ozs7O047Ozs7OworMTZCNDtSVU5JQyBMRVRURVIgS0FVTiBLO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkI1O1JVTklDIExFVFRFUiBHO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkI2O1JVTklDIExFVFRFUiBFTkc7TG87MDtMOzs7OztOOzs7OzsKKzE2Qjc7UlVOSUMgTEVUVEVSIEdFQk8gR1lGVSBHO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkI4O1JVTklDIExFVFRFUiBHQVI7TG87MDtMOzs7OztOOzs7OzsKKzE2Qjk7UlVOSUMgTEVUVEVSIFdVTkpPIFdZTk4gVztMbzswO0w7Ozs7O047Ozs7OworMTZCQTtSVU5JQyBMRVRURVIgSEFHTEFaIEg7TG87MDtMOzs7OztOOzs7OzsKKzE2QkI7UlVOSUMgTEVUVEVSIEhBRUdMIEg7TG87MDtMOzs7OztOOzs7OzsKKzE2QkM7UlVOSUMgTEVUVEVSIExPTkctQlJBTkNILUhBR0FMTCBIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkJEO1JVTklDIExFVFRFUiBTSE9SVC1UV0lHLUhBR0FMTCBIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkJFO1JVTklDIExFVFRFUiBOQVVESVogTllEIE5BVUQgTjtMbzswO0w7Ozs7O047Ozs7OworMTZCRjtSVU5JQyBMRVRURVIgU0hPUlQtVFdJRy1OQVVEIE47TG87MDtMOzs7OztOOzs7OzsKKzE2QzA7UlVOSUMgTEVUVEVSIERPVFRFRC1OO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkMxO1JVTklDIExFVFRFUiBJU0FaIElTIElTUyBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkMyO1JVTklDIExFVFRFUiBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkMzO1JVTklDIExFVFRFUiBKRVJBTiBKO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkM0O1JVTklDIExFVFRFUiBHRVI7TG87MDtMOzs7OztOOzs7OzsKKzE2QzU7UlVOSUMgTEVUVEVSIExPTkctQlJBTkNILUFSIEFFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkM2O1JVTklDIExFVFRFUiBTSE9SVC1UV0lHLUFSIEE7TG87MDtMOzs7OztOOzs7OzsKKzE2Qzc7UlVOSUMgTEVUVEVSIElXQVogRU9IO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkM4O1JVTklDIExFVFRFUiBQRVJUSE8gUEVPUlRIIFA7TG87MDtMOzs7OztOOzs7OzsKKzE2Qzk7UlVOSUMgTEVUVEVSIEFMR0laIEVPTEhYO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkNBO1JVTklDIExFVFRFUiBTT1dJTE8gUztMbzswO0w7Ozs7O047Ozs7OworMTZDQjtSVU5JQyBMRVRURVIgU0lHRUwgTE9ORy1CUkFOQ0gtU09MIFM7TG87MDtMOzs7OztOOzs7OzsKKzE2Q0M7UlVOSUMgTEVUVEVSIFNIT1JULVRXSUctU09MIFM7TG87MDtMOzs7OztOOzs7OzsKKzE2Q0Q7UlVOSUMgTEVUVEVSIEM7TG87MDtMOzs7OztOOzs7OzsKKzE2Q0U7UlVOSUMgTEVUVEVSIFo7TG87MDtMOzs7OztOOzs7OzsKKzE2Q0Y7UlVOSUMgTEVUVEVSIFRJV0FaIFRJUiBUWVIgVDtMbzswO0w7Ozs7O047Ozs7OworMTZEMDtSVU5JQyBMRVRURVIgU0hPUlQtVFdJRy1UWVIgVDtMbzswO0w7Ozs7O047Ozs7OworMTZEMTtSVU5JQyBMRVRURVIgRDtMbzswO0w7Ozs7O047Ozs7OworMTZEMjtSVU5JQyBMRVRURVIgQkVSS0FOQU4gQkVPUkMgQkpBUktBTiBCO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkQzO1JVTklDIExFVFRFUiBTSE9SVC1UV0lHLUJKQVJLQU4gQjtMbzswO0w7Ozs7O047Ozs7OworMTZENDtSVU5JQyBMRVRURVIgRE9UVEVELVA7TG87MDtMOzs7OztOOzs7OzsKKzE2RDU7UlVOSUMgTEVUVEVSIE9QRU4tUDtMbzswO0w7Ozs7O047Ozs7OworMTZENjtSVU5JQyBMRVRURVIgRUhXQVogRUggRTtMbzswO0w7Ozs7O047Ozs7OworMTZENztSVU5JQyBMRVRURVIgTUFOTkFaIE1BTiBNO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkQ4O1JVTklDIExFVFRFUiBMT05HLUJSQU5DSC1NQURSIE07TG87MDtMOzs7OztOOzs7OzsKKzE2RDk7UlVOSUMgTEVUVEVSIFNIT1JULVRXSUctTUFEUiBNO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkRBO1JVTklDIExFVFRFUiBMQVVLQVogTEFHVSBMT0dSIEw7TG87MDtMOzs7OztOOzs7OzsKKzE2REI7UlVOSUMgTEVUVEVSIERPVFRFRC1MO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkRDO1JVTklDIExFVFRFUiBJTkdXQVo7TG87MDtMOzs7OztOOzs7OzsKKzE2REQ7UlVOSUMgTEVUVEVSIElORztMbzswO0w7Ozs7O047Ozs7OworMTZERTtSVU5JQyBMRVRURVIgREFHQVogREFFRyBEO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkRGO1JVTklDIExFVFRFUiBPVEhBTEFOIEVUSEVMIE87TG87MDtMOzs7OztOOzs7OzsKKzE2RTA7UlVOSUMgTEVUVEVSIEVBUjtMbzswO0w7Ozs7O047Ozs7OworMTZFMTtSVU5JQyBMRVRURVIgSU9SO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkUyO1JVTklDIExFVFRFUiBDV0VPUlRIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkUzO1JVTklDIExFVFRFUiBDQUxDO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNkU0O1JVTklDIExFVFRFUiBDRUFMQztMbzswO0w7Ozs7O047Ozs7OworMTZFNTtSVU5JQyBMRVRURVIgU1RBTjtMbzswO0w7Ozs7O047Ozs7OworMTZFNjtSVU5JQyBMRVRURVIgTE9ORy1CUkFOQ0gtWVI7TG87MDtMOzs7OztOOzs7OzsKKzE2RTc7UlVOSUMgTEVUVEVSIFNIT1JULVRXSUctWVI7TG87MDtMOzs7OztOOzs7OzsKKzE2RTg7UlVOSUMgTEVUVEVSIElDRUxBTkRJQy1ZUjtMbzswO0w7Ozs7O047Ozs7OworMTZFOTtSVU5JQyBMRVRURVIgUTtMbzswO0w7Ozs7O047Ozs7OworMTZFQTtSVU5JQyBMRVRURVIgWDtMbzswO0w7Ozs7O047Ozs7OworMTZFQjtSVU5JQyBTSU5HTEUgUFVOQ1RVQVRJT047UG87MDtMOzs7OztOOzs7OzsKKzE2RUM7UlVOSUMgTVVMVElQTEUgUFVOQ1RVQVRJT047UG87MDtMOzs7OztOOzs7OzsKKzE2RUQ7UlVOSUMgQ1JPU1MgUFVOQ1RVQVRJT047UG87MDtMOzs7OztOOzs7OzsKKzE2RUU7UlVOSUMgQVJMQVVHIFNZTUJPTDtObDswO0w7Ozs7MTc7Tjs7Z29sZGVuIG51bWJlciAxNzs7OworMTZFRjtSVU5JQyBUVklNQURVUiBTWU1CT0w7Tmw7MDtMOzs7OzE4O047O2dvbGRlbiBudW1iZXIgMTg7OzsKKzE2RjA7UlVOSUMgQkVMR1RIT1IgU1lNQk9MO05sOzA7TDs7OzsxOTtOOztnb2xkZW4gbnVtYmVyIDE5Ozs7CisxNzAwO1RBR0FMT0cgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzE3MDE7VEFHQUxPRyBMRVRURVIgSTtMbzswO0w7Ozs7O047Ozs7OworMTcwMjtUQUdBTE9HIExFVFRFUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzAzO1RBR0FMT0cgTEVUVEVSIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzA0O1RBR0FMT0cgTEVUVEVSIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzA1O1RBR0FMT0cgTEVUVEVSIE5HQTtMbzswO0w7Ozs7O047Ozs7OworMTcwNjtUQUdBTE9HIExFVFRFUiBUQTtMbzswO0w7Ozs7O047Ozs7OworMTcwNztUQUdBTE9HIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMTcwODtUQUdBTE9HIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMTcwOTtUQUdBTE9HIExFVFRFUiBQQTtMbzswO0w7Ozs7O047Ozs7OworMTcwQTtUQUdBTE9HIExFVFRFUiBCQTtMbzswO0w7Ozs7O047Ozs7OworMTcwQjtUQUdBTE9HIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMTcwQztUQUdBTE9HIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMTcwRTtUQUdBTE9HIExFVFRFUiBMQTtMbzswO0w7Ozs7O047Ozs7OworMTcwRjtUQUdBTE9HIExFVFRFUiBXQTtMbzswO0w7Ozs7O047Ozs7OworMTcxMDtUQUdBTE9HIExFVFRFUiBTQTtMbzswO0w7Ozs7O047Ozs7OworMTcxMTtUQUdBTE9HIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMTcxMjtUQUdBTE9HIFZPV0VMIFNJR04gSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxNzEzO1RBR0FMT0cgVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3MTQ7VEFHQUxPRyBTSUdOIFZJUkFNQTtNbjs5O05TTTs7Ozs7Tjs7Ozs7CisxNzIwO0hBTlVOT08gTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzE3MjE7SEFOVU5PTyBMRVRURVIgSTtMbzswO0w7Ozs7O047Ozs7OworMTcyMjtIQU5VTk9PIExFVFRFUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzIzO0hBTlVOT08gTEVUVEVSIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzI0O0hBTlVOT08gTEVUVEVSIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzI1O0hBTlVOT08gTEVUVEVSIE5HQTtMbzswO0w7Ozs7O047Ozs7OworMTcyNjtIQU5VTk9PIExFVFRFUiBUQTtMbzswO0w7Ozs7O047Ozs7OworMTcyNztIQU5VTk9PIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMTcyODtIQU5VTk9PIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMTcyOTtIQU5VTk9PIExFVFRFUiBQQTtMbzswO0w7Ozs7O047Ozs7OworMTcyQTtIQU5VTk9PIExFVFRFUiBCQTtMbzswO0w7Ozs7O047Ozs7OworMTcyQjtIQU5VTk9PIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMTcyQztIQU5VTk9PIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMTcyRDtIQU5VTk9PIExFVFRFUiBSQTtMbzswO0w7Ozs7O047Ozs7OworMTcyRTtIQU5VTk9PIExFVFRFUiBMQTtMbzswO0w7Ozs7O047Ozs7OworMTcyRjtIQU5VTk9PIExFVFRFUiBXQTtMbzswO0w7Ozs7O047Ozs7OworMTczMDtIQU5VTk9PIExFVFRFUiBTQTtMbzswO0w7Ozs7O047Ozs7OworMTczMTtIQU5VTk9PIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMTczMjtIQU5VTk9PIFZPV0VMIFNJR04gSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxNzMzO0hBTlVOT08gVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3MzQ7SEFOVU5PTyBTSUdOIFBBTVVEUE9EO01uOzk7TlNNOzs7OztOOzs7OzsKKzE3MzU7UEhJTElQUElORSBTSU5HTEUgUFVOQ1RVQVRJT047UG87MDtMOzs7OztOOzs7OzsKKzE3MzY7UEhJTElQUElORSBET1VCTEUgUFVOQ1RVQVRJT047UG87MDtMOzs7OztOOzs7OzsKKzE3NDA7QlVISUQgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzE3NDE7QlVISUQgTEVUVEVSIEk7TG87MDtMOzs7OztOOzs7OzsKKzE3NDI7QlVISUQgTEVUVEVSIFU7TG87MDtMOzs7OztOOzs7OzsKKzE3NDM7QlVISUQgTEVUVEVSIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzQ0O0JVSElEIExFVFRFUiBHQTtMbzswO0w7Ozs7O047Ozs7OworMTc0NTtCVUhJRCBMRVRURVIgTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzQ2O0JVSElEIExFVFRFUiBUQTtMbzswO0w7Ozs7O047Ozs7OworMTc0NztCVUhJRCBMRVRURVIgREE7TG87MDtMOzs7OztOOzs7OzsKKzE3NDg7QlVISUQgTEVUVEVSIE5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzQ5O0JVSElEIExFVFRFUiBQQTtMbzswO0w7Ozs7O047Ozs7OworMTc0QTtCVUhJRCBMRVRURVIgQkE7TG87MDtMOzs7OztOOzs7OzsKKzE3NEI7QlVISUQgTEVUVEVSIE1BO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzRDO0JVSElEIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMTc0RDtCVUhJRCBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzE3NEU7QlVISUQgTEVUVEVSIExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzRGO0JVSElEIExFVFRFUiBXQTtMbzswO0w7Ozs7O047Ozs7OworMTc1MDtCVUhJRCBMRVRURVIgU0E7TG87MDtMOzs7OztOOzs7OzsKKzE3NTE7QlVISUQgTEVUVEVSIEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzUyO0JVSElEIFZPV0VMIFNJR04gSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxNzUzO0JVSElEIFZPV0VMIFNJR04gVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxNzYwO1RBR0JBTldBIExFVFRFUiBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzYxO1RBR0JBTldBIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzYyO1RBR0JBTldBIExFVFRFUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzYzO1RBR0JBTldBIExFVFRFUiBLQTtMbzswO0w7Ozs7O047Ozs7OworMTc2NDtUQUdCQU5XQSBMRVRURVIgR0E7TG87MDtMOzs7OztOOzs7OzsKKzE3NjU7VEFHQkFOV0EgTEVUVEVSIE5HQTtMbzswO0w7Ozs7O047Ozs7OworMTc2NjtUQUdCQU5XQSBMRVRURVIgVEE7TG87MDtMOzs7OztOOzs7OzsKKzE3Njc7VEFHQkFOV0EgTEVUVEVSIERBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzY4O1RBR0JBTldBIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMTc2OTtUQUdCQU5XQSBMRVRURVIgUEE7TG87MDtMOzs7OztOOzs7OzsKKzE3NkE7VEFHQkFOV0EgTEVUVEVSIEJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzZCO1RBR0JBTldBIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMTc2QztUQUdCQU5XQSBMRVRURVIgWUE7TG87MDtMOzs7OztOOzs7OzsKKzE3NkU7VEFHQkFOV0EgTEVUVEVSIExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzZGO1RBR0JBTldBIExFVFRFUiBXQTtMbzswO0w7Ozs7O047Ozs7OworMTc3MDtUQUdCQU5XQSBMRVRURVIgU0E7TG87MDtMOzs7OztOOzs7OzsKKzE3NzI7VEFHQkFOV0EgVk9XRUwgU0lHTiBJO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3NzM7VEFHQkFOV0EgVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3ODA7S0hNRVIgTEVUVEVSIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzgxO0tITUVSIExFVFRFUiBLSEE7TG87MDtMOzs7OztOOzs7OzsKKzE3ODI7S0hNRVIgTEVUVEVSIEtPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzgzO0tITUVSIExFVFRFUiBLSE87TG87MDtMOzs7OztOOzs7OzsKKzE3ODQ7S0hNRVIgTEVUVEVSIE5HTztMbzswO0w7Ozs7O047Ozs7OworMTc4NTtLSE1FUiBMRVRURVIgQ0E7TG87MDtMOzs7OztOOzs7OzsKKzE3ODY7S0hNRVIgTEVUVEVSIENIQTtMbzswO0w7Ozs7O047Ozs7OworMTc4NztLSE1FUiBMRVRURVIgQ087TG87MDtMOzs7OztOOzs7OzsKKzE3ODg7S0hNRVIgTEVUVEVSIENITztMbzswO0w7Ozs7O047Ozs7OworMTc4OTtLSE1FUiBMRVRURVIgTllPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzhBO0tITUVSIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMTc4QjtLSE1FUiBMRVRURVIgVFRIQTtMbzswO0w7Ozs7O047Ozs7OworMTc4QztLSE1FUiBMRVRURVIgRE87TG87MDtMOzs7OztOOzs7OzsKKzE3OEQ7S0hNRVIgTEVUVEVSIFRUSE87TG87MDtMOzs7OztOOzs7OzsKKzE3OEU7S0hNRVIgTEVUVEVSIE5OTztMbzswO0w7Ozs7O047Ozs7OworMTc4RjtLSE1FUiBMRVRURVIgVEE7TG87MDtMOzs7OztOOzs7OzsKKzE3OTA7S0hNRVIgTEVUVEVSIFRIQTtMbzswO0w7Ozs7O047Ozs7OworMTc5MTtLSE1FUiBMRVRURVIgVE87TG87MDtMOzs7OztOOzs7OzsKKzE3OTI7S0hNRVIgTEVUVEVSIFRITztMbzswO0w7Ozs7O047Ozs7OworMTc5MztLSE1FUiBMRVRURVIgTk87TG87MDtMOzs7OztOOzs7OzsKKzE3OTQ7S0hNRVIgTEVUVEVSIEJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzk1O0tITUVSIExFVFRFUiBQSEE7TG87MDtMOzs7OztOOzs7OzsKKzE3OTY7S0hNRVIgTEVUVEVSIFBPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzk3O0tITUVSIExFVFRFUiBQSE87TG87MDtMOzs7OztOOzs7OzsKKzE3OTg7S0hNRVIgTEVUVEVSIE1PO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzk5O0tITUVSIExFVFRFUiBZTztMbzswO0w7Ozs7O047Ozs7OworMTc5QTtLSE1FUiBMRVRURVIgUk87TG87MDtMOzs7OztOOzs7OzsKKzE3OUI7S0hNRVIgTEVUVEVSIExPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzlDO0tITUVSIExFVFRFUiBWTztMbzswO0w7Ozs7O047Ozs7OworMTc5RDtLSE1FUiBMRVRURVIgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxNzlFO0tITUVSIExFVFRFUiBTU087TG87MDtMOzs7OztOOzs7OzsKKzE3OUY7S0hNRVIgTEVUVEVSIFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxN0EwO0tITUVSIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMTdBMTtLSE1FUiBMRVRURVIgTEE7TG87MDtMOzs7OztOOzs7OzsKKzE3QTI7S0hNRVIgTEVUVEVSIFFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxN0EzO0tITUVSIElOREVQRU5ERU5UIFZPV0VMIFFBUTtMbzswO0w7Ozs7O047Ozs7OworMTdBNDtLSE1FUiBJTkRFUEVOREVOVCBWT1dFTCBRQUE7TG87MDtMOzs7OztOOzs7OzsKKzE3QTU7S0hNRVIgSU5ERVBFTkRFTlQgVk9XRUwgUUk7TG87MDtMOzs7OztOOzs7OzsKKzE3QTY7S0hNRVIgSU5ERVBFTkRFTlQgVk9XRUwgUUlJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxN0E3O0tITUVSIElOREVQRU5ERU5UIFZPV0VMIFFVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxN0E4O0tITUVSIElOREVQRU5ERU5UIFZPV0VMIFFVSztMbzswO0w7Ozs7O047Ozs7OworMTdBOTtLSE1FUiBJTkRFUEVOREVOVCBWT1dFTCBRVVU7TG87MDtMOzs7OztOOzs7OzsKKzE3QUE7S0hNRVIgSU5ERVBFTkRFTlQgVk9XRUwgUVVVVjtMbzswO0w7Ozs7O047Ozs7OworMTdBQjtLSE1FUiBJTkRFUEVOREVOVCBWT1dFTCBSWTtMbzswO0w7Ozs7O047Ozs7OworMTdBQztLSE1FUiBJTkRFUEVOREVOVCBWT1dFTCBSWVk7TG87MDtMOzs7OztOOzs7OzsKKzE3QUQ7S0hNRVIgSU5ERVBFTkRFTlQgVk9XRUwgTFk7TG87MDtMOzs7OztOOzs7OzsKKzE3QUU7S0hNRVIgSU5ERVBFTkRFTlQgVk9XRUwgTFlZO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxN0FGO0tITUVSIElOREVQRU5ERU5UIFZPV0VMIFFFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxN0IwO0tITUVSIElOREVQRU5ERU5UIFZPV0VMIFFBSTtMbzswO0w7Ozs7O047Ozs7OworMTdCMTtLSE1FUiBJTkRFUEVOREVOVCBWT1dFTCBRT08gVFlQRSBPTkU7TG87MDtMOzs7OztOOzs7OzsKKzE3QjI7S0hNRVIgSU5ERVBFTkRFTlQgVk9XRUwgUU9PIFRZUEUgVFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxN0IzO0tITUVSIElOREVQRU5ERU5UIFZPV0VMIFFBVTtMbzswO0w7Ozs7O047Ozs7OworMTdCNDtLSE1FUiBWT1dFTCBJTkhFUkVOVCBBUTtNYzswO0w7Ozs7O047Ozs7OworMTdCNTtLSE1FUiBWT1dFTCBJTkhFUkVOVCBBQTtNYzswO0w7Ozs7O047Ozs7OworMTdCNjtLSE1FUiBWT1dFTCBTSUdOIEFBO01jOzA7TDs7Ozs7Tjs7Ozs7CisxN0I3O0tITUVSIFZPV0VMIFNJR04gSTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxN0I4O0tITUVSIFZPV0VMIFNJR04gSUk7TW47MDtOU007Ozs7O047Ozs7OworMTdCOTtLSE1FUiBWT1dFTCBTSUdOIFk7TW47MDtOU007Ozs7O047Ozs7OworMTdCQTtLSE1FUiBWT1dFTCBTSUdOIFlZO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3QkI7S0hNRVIgVk9XRUwgU0lHTiBVO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3QkM7S0hNRVIgVk9XRUwgU0lHTiBVVTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxN0JEO0tITUVSIFZPV0VMIFNJR04gVUE7TW47MDtOU007Ozs7O047Ozs7OworMTdCRTtLSE1FUiBWT1dFTCBTSUdOIE9FO01jOzA7TDs7Ozs7Tjs7Ozs7CisxN0JGO0tITUVSIFZPV0VMIFNJR04gWUE7TWM7MDtMOzs7OztOOzs7OzsKKzE3QzA7S0hNRVIgVk9XRUwgU0lHTiBJRTtNYzswO0w7Ozs7O047Ozs7OworMTdDMTtLSE1FUiBWT1dFTCBTSUdOIEU7TWM7MDtMOzs7OztOOzs7OzsKKzE3QzI7S0hNRVIgVk9XRUwgU0lHTiBBRTtNYzswO0w7Ozs7O047Ozs7OworMTdDMztLSE1FUiBWT1dFTCBTSUdOIEFJO01jOzA7TDs7Ozs7Tjs7Ozs7CisxN0M0O0tITUVSIFZPV0VMIFNJR04gT087TWM7MDtMOzs7OztOOzs7OzsKKzE3QzU7S0hNRVIgVk9XRUwgU0lHTiBBVTtNYzswO0w7Ozs7O047Ozs7OworMTdDNjtLSE1FUiBTSUdOIE5JS0FISVQ7TW47MDtOU007Ozs7O047Ozs7OworMTdDNztLSE1FUiBTSUdOIFJFQUhNVUs7TWM7MDtMOzs7OztOOzs7OzsKKzE3Qzg7S0hNRVIgU0lHTiBZVVVLQUxFQVBJTlRVO01jOzA7TDs7Ozs7Tjs7Ozs7CisxN0M5O0tITUVSIFNJR04gTVVVU0lLQVRPQU47TW47MDtOU007Ozs7O047Ozs7OworMTdDQTtLSE1FUiBTSUdOIFRSSUlTQVA7TW47MDtOU007Ozs7O047Ozs7OworMTdDQjtLSE1FUiBTSUdOIEJBTlRPQztNbjswO05TTTs7Ozs7Tjs7Ozs7CisxN0NDO0tITUVSIFNJR04gUk9CQVQ7TW47MDtOU007Ozs7O047Ozs7OworMTdDRDtLSE1FUiBTSUdOIFRPQU5EQUtISUFUO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3Q0U7S0hNRVIgU0lHTiBLQUtBQkFUO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3Q0Y7S0hNRVIgU0lHTiBBSFNEQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxN0QwO0tITUVSIFNJR04gU0FNWU9LIFNBTk5ZQTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxN0QxO0tITUVSIFNJR04gVklSSUFNO01uOzA7TlNNOzs7OztOOzs7OzsKKzE3RDI7S0hNRVIgU0lHTiBDT0VORztNbjs5O05TTTs7Ozs7Tjs7Ozs7CisxN0QzO0tITUVSIFNJR04gQkFUSEFNQVNBVDtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxN0Q0O0tITUVSIFNJR04gS0hBTjtQbzswO0w7Ozs7O047Ozs7OworMTdENTtLSE1FUiBTSUdOIEJBUklZT09TQU47UG87MDtMOzs7OztOOzs7OzsKKzE3RDY7S0hNRVIgU0lHTiBDQU1OVUMgUElJIEtVVUg7UG87MDtMOzs7OztOOzs7OzsKKzE3RDc7S0hNRVIgU0lHTiBMRUsgVE9PO0xtOzA7TDs7Ozs7Tjs7Ozs7CisxN0Q4O0tITUVSIFNJR04gQkVZWUFMO1BvOzA7TDs7Ozs7Tjs7Ozs7CisxN0Q5O0tITUVSIFNJR04gUEhOQUVLIE1VQU47UG87MDtMOzs7OztOOzs7OzsKKzE3REE7S0hNRVIgU0lHTiBLT09NVVVUO1BvOzA7TDs7Ozs7Tjs7Ozs7CisxN0RCO0tITUVSIENVUlJFTkNZIFNZTUJPTCBSSUVMO1NjOzA7RVQ7Ozs7O047Ozs7OworMTdEQztLSE1FUiBTSUdOIEFWQUtSQUhBU0FOWUE7TG87MDtMOzs7OztOOzs7OzsKKzE3RTA7S0hNRVIgRElHSVQgWkVSTztOZDswO0w7OzA7MDswO047Ozs7OworMTdFMTtLSE1FUiBESUdJVCBPTkU7TmQ7MDtMOzsxOzE7MTtOOzs7OzsKKzE3RTI7S0hNRVIgRElHSVQgVFdPO05kOzA7TDs7MjsyOzI7Tjs7Ozs7CisxN0UzO0tITUVSIERJR0lUIFRIUkVFO05kOzA7TDs7MzszOzM7Tjs7Ozs7CisxN0U0O0tITUVSIERJR0lUIEZPVVI7TmQ7MDtMOzs0OzQ7NDtOOzs7OzsKKzE3RTU7S0hNRVIgRElHSVQgRklWRTtOZDswO0w7OzU7NTs1O047Ozs7OworMTdFNjtLSE1FUiBESUdJVCBTSVg7TmQ7MDtMOzs2OzY7NjtOOzs7OzsKKzE3RTc7S0hNRVIgRElHSVQgU0VWRU47TmQ7MDtMOzs3Ozc7NztOOzs7OzsKKzE3RTg7S0hNRVIgRElHSVQgRUlHSFQ7TmQ7MDtMOzs4Ozg7ODtOOzs7OzsKKzE3RTk7S0hNRVIgRElHSVQgTklORTtOZDswO0w7Ozk7OTs5O047Ozs7OworMTgwMDtNT05HT0xJQU4gQklSR0E7UG87MDtPTjs7Ozs7Tjs7Ozs7CisxODAxO01PTkdPTElBTiBFTExJUFNJUztQbzswO09OOzs7OztOOzs7OzsKKzE4MDI7TU9OR09MSUFOIENPTU1BO1BvOzA7T047Ozs7O047Ozs7OworMTgwMztNT05HT0xJQU4gRlVMTCBTVE9QO1BvOzA7T047Ozs7O047Ozs7OworMTgwNDtNT05HT0xJQU4gQ09MT047UG87MDtPTjs7Ozs7Tjs7Ozs7CisxODA1O01PTkdPTElBTiBGT1VSIERPVFM7UG87MDtPTjs7Ozs7Tjs7Ozs7CisxODA2O01PTkdPTElBTiBUT0RPIFNPRlQgSFlQSEVOO1BkOzA7T047Ozs7O047Ozs7OworMTgwNztNT05HT0xJQU4gU0lCRSBTWUxMQUJMRSBCT1VOREFSWSBNQVJLRVI7UG87MDtPTjs7Ozs7Tjs7Ozs7CisxODA4O01PTkdPTElBTiBNQU5DSFUgQ09NTUE7UG87MDtPTjs7Ozs7Tjs7Ozs7CisxODA5O01PTkdPTElBTiBNQU5DSFUgRlVMTCBTVE9QO1BvOzA7T047Ozs7O047Ozs7OworMTgwQTtNT05HT0xJQU4gTklSVUdVO1BvOzA7T047Ozs7O047Ozs7OworMTgwQjtNT05HT0xJQU4gRlJFRSBWQVJJQVRJT04gU0VMRUNUT1IgT05FO01uOzA7TlNNOzs7OztOOzs7OzsKKzE4MEM7TU9OR09MSUFOIEZSRUUgVkFSSUFUSU9OIFNFTEVDVE9SIFRXTztNbjswO05TTTs7Ozs7Tjs7Ozs7CisxODBEO01PTkdPTElBTiBGUkVFIFZBUklBVElPTiBTRUxFQ1RPUiBUSFJFRTtNbjswO05TTTs7Ozs7Tjs7Ozs7CisxODBFO01PTkdPTElBTiBWT1dFTCBTRVBBUkFUT1I7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisxODEwO01PTkdPTElBTiBESUdJVCBaRVJPO05kOzA7TDs7MDswOzA7Tjs7Ozs7CisxODExO01PTkdPTElBTiBESUdJVCBPTkU7TmQ7MDtMOzsxOzE7MTtOOzs7OzsKKzE4MTI7TU9OR09MSUFOIERJR0lUIFRXTztOZDswO0w7OzI7MjsyO047Ozs7OworMTgxMztNT05HT0xJQU4gRElHSVQgVEhSRUU7TmQ7MDtMOzszOzM7MztOOzs7OzsKKzE4MTQ7TU9OR09MSUFOIERJR0lUIEZPVVI7TmQ7MDtMOzs0OzQ7NDtOOzs7OzsKKzE4MTU7TU9OR09MSUFOIERJR0lUIEZJVkU7TmQ7MDtMOzs1OzU7NTtOOzs7OzsKKzE4MTY7TU9OR09MSUFOIERJR0lUIFNJWDtOZDswO0w7OzY7Njs2O047Ozs7OworMTgxNztNT05HT0xJQU4gRElHSVQgU0VWRU47TmQ7MDtMOzs3Ozc7NztOOzs7OzsKKzE4MTg7TU9OR09MSUFOIERJR0lUIEVJR0hUO05kOzA7TDs7ODs4Ozg7Tjs7Ozs7CisxODE5O01PTkdPTElBTiBESUdJVCBOSU5FO05kOzA7TDs7OTs5Ozk7Tjs7Ozs7CisxODIwO01PTkdPTElBTiBMRVRURVIgQTtMbzswO0w7Ozs7O047Ozs7OworMTgyMTtNT05HT0xJQU4gTEVUVEVSIEU7TG87MDtMOzs7OztOOzs7OzsKKzE4MjI7TU9OR09MSUFOIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODIzO01PTkdPTElBTiBMRVRURVIgTztMbzswO0w7Ozs7O047Ozs7OworMTgyNDtNT05HT0xJQU4gTEVUVEVSIFU7TG87MDtMOzs7OztOOzs7OzsKKzE4MjU7TU9OR09MSUFOIExFVFRFUiBPRTtMbzswO0w7Ozs7O047Ozs7OworMTgyNjtNT05HT0xJQU4gTEVUVEVSIFVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODI3O01PTkdPTElBTiBMRVRURVIgRUU7TG87MDtMOzs7OztOOzs7OzsKKzE4Mjg7TU9OR09MSUFOIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMTgyOTtNT05HT0xJQU4gTEVUVEVSIEFORztMbzswO0w7Ozs7O047Ozs7OworMTgyQTtNT05HT0xJQU4gTEVUVEVSIEJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODJCO01PTkdPTElBTiBMRVRURVIgUEE7TG87MDtMOzs7OztOOzs7OzsKKzE4MkM7TU9OR09MSUFOIExFVFRFUiBRQTtMbzswO0w7Ozs7O047Ozs7OworMTgyRDtNT05HT0xJQU4gTEVUVEVSIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODJFO01PTkdPTElBTiBMRVRURVIgTUE7TG87MDtMOzs7OztOOzs7OzsKKzE4MkY7TU9OR09MSUFOIExFVFRFUiBMQTtMbzswO0w7Ozs7O047Ozs7OworMTgzMDtNT05HT0xJQU4gTEVUVEVSIFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODMxO01PTkdPTElBTiBMRVRURVIgU0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODMyO01PTkdPTElBTiBMRVRURVIgVEE7TG87MDtMOzs7OztOOzs7OzsKKzE4MzM7TU9OR09MSUFOIExFVFRFUiBEQTtMbzswO0w7Ozs7O047Ozs7OworMTgzNDtNT05HT0xJQU4gTEVUVEVSIENIQTtMbzswO0w7Ozs7O047Ozs7OworMTgzNTtNT05HT0xJQU4gTEVUVEVSIEpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODM2O01PTkdPTElBTiBMRVRURVIgWUE7TG87MDtMOzs7OztOOzs7OzsKKzE4Mzc7TU9OR09MSUFOIExFVFRFUiBSQTtMbzswO0w7Ozs7O047Ozs7OworMTgzODtNT05HT0xJQU4gTEVUVEVSIFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODM5O01PTkdPTElBTiBMRVRURVIgRkE7TG87MDtMOzs7OztOOzs7OzsKKzE4M0E7TU9OR09MSUFOIExFVFRFUiBLQTtMbzswO0w7Ozs7O047Ozs7OworMTgzQjtNT05HT0xJQU4gTEVUVEVSIEtIQTtMbzswO0w7Ozs7O047Ozs7OworMTgzQztNT05HT0xJQU4gTEVUVEVSIFRTQTtMbzswO0w7Ozs7O047Ozs7OworMTgzRDtNT05HT0xJQU4gTEVUVEVSIFpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODNFO01PTkdPTElBTiBMRVRURVIgSEFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODNGO01PTkdPTElBTiBMRVRURVIgWlJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODQwO01PTkdPTElBTiBMRVRURVIgTEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODQxO01PTkdPTElBTiBMRVRURVIgWkhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODQyO01PTkdPTElBTiBMRVRURVIgQ0hJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODQzO01PTkdPTElBTiBMRVRURVIgVE9ETyBMT05HIFZPV0VMIFNJR047TG07MDtMOzs7OztOOzs7OzsKKzE4NDQ7TU9OR09MSUFOIExFVFRFUiBUT0RPIEU7TG87MDtMOzs7OztOOzs7OzsKKzE4NDU7TU9OR09MSUFOIExFVFRFUiBUT0RPIEk7TG87MDtMOzs7OztOOzs7OzsKKzE4NDY7TU9OR09MSUFOIExFVFRFUiBUT0RPIE87TG87MDtMOzs7OztOOzs7OzsKKzE4NDc7TU9OR09MSUFOIExFVFRFUiBUT0RPIFU7TG87MDtMOzs7OztOOzs7OzsKKzE4NDg7TU9OR09MSUFOIExFVFRFUiBUT0RPIE9FO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODQ5O01PTkdPTElBTiBMRVRURVIgVE9ETyBVRTtMbzswO0w7Ozs7O047Ozs7OworMTg0QTtNT05HT0xJQU4gTEVUVEVSIFRPRE8gQU5HO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODRCO01PTkdPTElBTiBMRVRURVIgVE9ETyBCQTtMbzswO0w7Ozs7O047Ozs7OworMTg0QztNT05HT0xJQU4gTEVUVEVSIFRPRE8gUEE7TG87MDtMOzs7OztOOzs7OzsKKzE4NEQ7TU9OR09MSUFOIExFVFRFUiBUT0RPIFFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODRFO01PTkdPTElBTiBMRVRURVIgVE9ETyBHQTtMbzswO0w7Ozs7O047Ozs7OworMTg0RjtNT05HT0xJQU4gTEVUVEVSIFRPRE8gTUE7TG87MDtMOzs7OztOOzs7OzsKKzE4NTA7TU9OR09MSUFOIExFVFRFUiBUT0RPIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODUxO01PTkdPTElBTiBMRVRURVIgVE9ETyBEQTtMbzswO0w7Ozs7O047Ozs7OworMTg1MjtNT05HT0xJQU4gTEVUVEVSIFRPRE8gQ0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODUzO01PTkdPTElBTiBMRVRURVIgVE9ETyBKQTtMbzswO0w7Ozs7O047Ozs7OworMTg1NDtNT05HT0xJQU4gTEVUVEVSIFRPRE8gVFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODU1O01PTkdPTElBTiBMRVRURVIgVE9ETyBZQTtMbzswO0w7Ozs7O047Ozs7OworMTg1NjtNT05HT0xJQU4gTEVUVEVSIFRPRE8gV0E7TG87MDtMOzs7OztOOzs7OzsKKzE4NTc7TU9OR09MSUFOIExFVFRFUiBUT0RPIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODU4O01PTkdPTElBTiBMRVRURVIgVE9ETyBHQUE7TG87MDtMOzs7OztOOzs7OzsKKzE4NTk7TU9OR09MSUFOIExFVFRFUiBUT0RPIEhBQTtMbzswO0w7Ozs7O047Ozs7OworMTg1QTtNT05HT0xJQU4gTEVUVEVSIFRPRE8gSklBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODVCO01PTkdPTElBTiBMRVRURVIgVE9ETyBOSUE7TG87MDtMOzs7OztOOzs7OzsKKzE4NUM7TU9OR09MSUFOIExFVFRFUiBUT0RPIERaQTtMbzswO0w7Ozs7O047Ozs7OworMTg1RDtNT05HT0xJQU4gTEVUVEVSIFNJQkUgRTtMbzswO0w7Ozs7O047Ozs7OworMTg1RTtNT05HT0xJQU4gTEVUVEVSIFNJQkUgSTtMbzswO0w7Ozs7O047Ozs7OworMTg1RjtNT05HT0xJQU4gTEVUVEVSIFNJQkUgSVk7TG87MDtMOzs7OztOOzs7OzsKKzE4NjA7TU9OR09MSUFOIExFVFRFUiBTSUJFIFVFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODYxO01PTkdPTElBTiBMRVRURVIgU0lCRSBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODYyO01PTkdPTElBTiBMRVRURVIgU0lCRSBBTkc7TG87MDtMOzs7OztOOzs7OzsKKzE4NjM7TU9OR09MSUFOIExFVFRFUiBTSUJFIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODY0O01PTkdPTElBTiBMRVRURVIgU0lCRSBHQTtMbzswO0w7Ozs7O047Ozs7OworMTg2NTtNT05HT0xJQU4gTEVUVEVSIFNJQkUgSEE7TG87MDtMOzs7OztOOzs7OzsKKzE4NjY7TU9OR09MSUFOIExFVFRFUiBTSUJFIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODY3O01PTkdPTElBTiBMRVRURVIgU0lCRSBTSEE7TG87MDtMOzs7OztOOzs7OzsKKzE4Njg7TU9OR09MSUFOIExFVFRFUiBTSUJFIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODY5O01PTkdPTElBTiBMRVRURVIgU0lCRSBEQTtMbzswO0w7Ozs7O047Ozs7OworMTg2QTtNT05HT0xJQU4gTEVUVEVSIFNJQkUgSkE7TG87MDtMOzs7OztOOzs7OzsKKzE4NkI7TU9OR09MSUFOIExFVFRFUiBTSUJFIEZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODZDO01PTkdPTElBTiBMRVRURVIgU0lCRSBHQUE7TG87MDtMOzs7OztOOzs7OzsKKzE4NkQ7TU9OR09MSUFOIExFVFRFUiBTSUJFIEhBQTtMbzswO0w7Ozs7O047Ozs7OworMTg2RTtNT05HT0xJQU4gTEVUVEVSIFNJQkUgVFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODZGO01PTkdPTElBTiBMRVRURVIgU0lCRSBaQTtMbzswO0w7Ozs7O047Ozs7OworMTg3MDtNT05HT0xJQU4gTEVUVEVSIFNJQkUgUkFBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODcxO01PTkdPTElBTiBMRVRURVIgU0lCRSBDSEE7TG87MDtMOzs7OztOOzs7OzsKKzE4NzI7TU9OR09MSUFOIExFVFRFUiBTSUJFIFpIQTtMbzswO0w7Ozs7O047Ozs7OworMTg3MztNT05HT0xJQU4gTEVUVEVSIE1BTkNIVSBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODc0O01PTkdPTElBTiBMRVRURVIgTUFOQ0hVIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODc1O01PTkdPTElBTiBMRVRURVIgTUFOQ0hVIFJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODc2O01PTkdPTElBTiBMRVRURVIgTUFOQ0hVIEZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODc3O01PTkdPTElBTiBMRVRURVIgTUFOQ0hVIFpIQTtMbzswO0w7Ozs7O047Ozs7OworMTg4MDtNT05HT0xJQU4gTEVUVEVSIEFMSSBHQUxJIEFOVVNWQVJBIE9ORTtMbzswO0w7Ozs7O047Ozs7OworMTg4MTtNT05HT0xJQU4gTEVUVEVSIEFMSSBHQUxJIFZJU0FSR0EgT05FO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODgyO01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgREFNQVJVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODgzO01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgVUJBREFNQTtMbzswO0w7Ozs7O047Ozs7OworMTg4NDtNT05HT0xJQU4gTEVUVEVSIEFMSSBHQUxJIElOVkVSVEVEIFVCQURBTUE7TG87MDtMOzs7OztOOzs7OzsKKzE4ODU7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBCQUxVREE7TG87MDtMOzs7OztOOzs7OzsKKzE4ODY7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBUSFJFRSBCQUxVREE7TG87MDtMOzs7OztOOzs7OzsKKzE4ODc7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODg4O01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgSTtMbzswO0w7Ozs7O047Ozs7OworMTg4OTtNT05HT0xJQU4gTEVUVEVSIEFMSSBHQUxJIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODhBO01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODhCO01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgQ0E7TG87MDtMOzs7OztOOzs7OzsKKzE4OEM7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBUVEE7TG87MDtMOzs7OztOOzs7OzsKKzE4OEQ7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBUVEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODhFO01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgRERBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODhGO01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgTk5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODkwO01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgVEE7TG87MDtMOzs7OztOOzs7OzsKKzE4OTE7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBEQTtMbzswO0w7Ozs7O047Ozs7OworMTg5MjtNT05HT0xJQU4gTEVUVEVSIEFMSSBHQUxJIFBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODkzO01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgUEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODk0O01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgU1NBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODk1O01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgWkhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODk2O01PTkdPTElBTiBMRVRURVIgQUxJIEdBTEkgWkE7TG87MDtMOzs7OztOOzs7OzsKKzE4OTc7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBBSDtMbzswO0w7Ozs7O047Ozs7OworMTg5ODtNT05HT0xJQU4gTEVUVEVSIFRPRE8gQUxJIEdBTEkgVEE7TG87MDtMOzs7OztOOzs7OzsKKzE4OTk7TU9OR09MSUFOIExFVFRFUiBUT0RPIEFMSSBHQUxJIFpIQTtMbzswO0w7Ozs7O047Ozs7OworMTg5QTtNT05HT0xJQU4gTEVUVEVSIE1BTkNIVSBBTEkgR0FMSSBHSEE7TG87MDtMOzs7OztOOzs7OzsKKzE4OUI7TU9OR09MSUFOIExFVFRFUiBNQU5DSFUgQUxJIEdBTEkgTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODlDO01PTkdPTElBTiBMRVRURVIgTUFOQ0hVIEFMSSBHQUxJIENBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxODlEO01PTkdPTElBTiBMRVRURVIgTUFOQ0hVIEFMSSBHQUxJIEpIQTtMbzswO0w7Ozs7O047Ozs7OworMTg5RTtNT05HT0xJQU4gTEVUVEVSIE1BTkNIVSBBTEkgR0FMSSBUVEE7TG87MDtMOzs7OztOOzs7OzsKKzE4OUY7TU9OR09MSUFOIExFVFRFUiBNQU5DSFUgQUxJIEdBTEkgRERIQTtMbzswO0w7Ozs7O047Ozs7OworMThBMDtNT05HT0xJQU4gTEVUVEVSIE1BTkNIVSBBTEkgR0FMSSBUQTtMbzswO0w7Ozs7O047Ozs7OworMThBMTtNT05HT0xJQU4gTEVUVEVSIE1BTkNIVSBBTEkgR0FMSSBESEE7TG87MDtMOzs7OztOOzs7OzsKKzE4QTI7TU9OR09MSUFOIExFVFRFUiBNQU5DSFUgQUxJIEdBTEkgU1NBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxOEEzO01PTkdPTElBTiBMRVRURVIgTUFOQ0hVIEFMSSBHQUxJIENZQTtMbzswO0w7Ozs7O047Ozs7OworMThBNDtNT05HT0xJQU4gTEVUVEVSIE1BTkNIVSBBTEkgR0FMSSBaSEE7TG87MDtMOzs7OztOOzs7OzsKKzE4QTU7TU9OR09MSUFOIExFVFRFUiBNQU5DSFUgQUxJIEdBTEkgWkE7TG87MDtMOzs7OztOOzs7OzsKKzE4QTY7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBIQUxGIFU7TG87MDtMOzs7OztOOzs7OzsKKzE4QTc7TU9OR09MSUFOIExFVFRFUiBBTEkgR0FMSSBIQUxGIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxOEE4O01PTkdPTElBTiBMRVRURVIgTUFOQ0hVIEFMSSBHQUxJIEJIQTtMbzswO0w7Ozs7O047Ozs7OworMThBOTtNT05HT0xJQU4gTEVUVEVSIEFMSSBHQUxJIERBR0FMR0E7TW47MjI4O05TTTs7Ozs7Tjs7Ozs7CisxRTAwO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEJFTE9XO0x1OzA7TDswMDQxIDAzMjU7Ozs7Tjs7OzsxRTAxOworMUUwMTtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQkVMT1c7TGw7MDtMOzAwNjEgMDMyNTs7OztOOzs7MUUwMDs7MUUwMAorMUUwMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBCIFdJVEggRE9UIEFCT1ZFO0x1OzA7TDswMDQyIDAzMDc7Ozs7Tjs7OzsxRTAzOworMUUwMztMQVRJTiBTTUFMTCBMRVRURVIgQiBXSVRIIERPVCBBQk9WRTtMbDswO0w7MDA2MiAwMzA3Ozs7O047OzsxRTAyOzsxRTAyCisxRTA0O0xBVElOIENBUElUQUwgTEVUVEVSIEIgV0lUSCBET1QgQkVMT1c7THU7MDtMOzAwNDIgMDMyMzs7OztOOzs7OzFFMDU7CisxRTA1O0xBVElOIFNNQUxMIExFVFRFUiBCIFdJVEggRE9UIEJFTE9XO0xsOzA7TDswMDYyIDAzMjM7Ozs7Tjs7OzFFMDQ7OzFFMDQKKzFFMDY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQiBXSVRIIExJTkUgQkVMT1c7THU7MDtMOzAwNDIgMDMzMTs7OztOOzs7OzFFMDc7CisxRTA3O0xBVElOIFNNQUxMIExFVFRFUiBCIFdJVEggTElORSBCRUxPVztMbDswO0w7MDA2MiAwMzMxOzs7O047OzsxRTA2OzsxRTA2CisxRTA4O0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBIEFORCBBQ1VURTtMdTswO0w7MDBDNyAwMzAxOzs7O047Ozs7MUUwOTsKKzFFMDk7TEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBIEFORCBBQ1VURTtMbDswO0w7MDBFNyAwMzAxOzs7O047OzsxRTA4OzsxRTA4CisxRTBBO0xBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBET1QgQUJPVkU7THU7MDtMOzAwNDQgMDMwNzs7OztOOzs7OzFFMEI7CisxRTBCO0xBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggRE9UIEFCT1ZFO0xsOzA7TDswMDY0IDAzMDc7Ozs7Tjs7OzFFMEE7OzFFMEEKKzFFMEM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIERPVCBCRUxPVztMdTswO0w7MDA0NCAwMzIzOzs7O047Ozs7MUUwRDsKKzFFMEQ7TEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBET1QgQkVMT1c7TGw7MDtMOzAwNjQgMDMyMzs7OztOOzs7MUUwQzs7MUUwQworMUUwRTtMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggTElORSBCRUxPVztMdTswO0w7MDA0NCAwMzMxOzs7O047Ozs7MUUwRjsKKzFFMEY7TEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBMSU5FIEJFTE9XO0xsOzA7TDswMDY0IDAzMzE7Ozs7Tjs7OzFFMEU7OzFFMEUKKzFFMTA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIENFRElMTEE7THU7MDtMOzAwNDQgMDMyNzs7OztOOzs7OzFFMTE7CisxRTExO0xBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggQ0VESUxMQTtMbDswO0w7MDA2NCAwMzI3Ozs7O047OzsxRTEwOzsxRTEwCisxRTEyO0xBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBDSVJDVU1GTEVYIEJFTE9XO0x1OzA7TDswMDQ0IDAzMkQ7Ozs7Tjs7OzsxRTEzOworMUUxMztMQVRJTiBTTUFMTCBMRVRURVIgRCBXSVRIIENJUkNVTUZMRVggQkVMT1c7TGw7MDtMOzAwNjQgMDMyRDs7OztOOzs7MUUxMjs7MUUxMgorMUUxNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggTUFDUk9OIEFORCBHUkFWRTtMdTswO0w7MDExMiAwMzAwOzs7O047Ozs7MUUxNTsKKzFFMTU7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBNQUNST04gQU5EIEdSQVZFO0xsOzA7TDswMTEzIDAzMDA7Ozs7Tjs7OzFFMTQ7OzFFMTQKKzFFMTY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIE1BQ1JPTiBBTkQgQUNVVEU7THU7MDtMOzAxMTIgMDMwMTs7OztOOzs7OzFFMTc7CisxRTE3O0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggTUFDUk9OIEFORCBBQ1VURTtMbDswO0w7MDExMyAwMzAxOzs7O047OzsxRTE2OzsxRTE2CisxRTE4O0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYIEJFTE9XO0x1OzA7TDswMDQ1IDAzMkQ7Ozs7Tjs7OzsxRTE5OworMUUxOTtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVggQkVMT1c7TGw7MDtMOzAwNjUgMDMyRDs7OztOOzs7MUUxODs7MUUxOAorMUUxQTtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggVElMREUgQkVMT1c7THU7MDtMOzAwNDUgMDMzMDs7OztOOzs7OzFFMUI7CisxRTFCO0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggVElMREUgQkVMT1c7TGw7MDtMOzAwNjUgMDMzMDs7OztOOzs7MUUxQTs7MUUxQQorMUUxQztMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0VESUxMQSBBTkQgQlJFVkU7THU7MDtMOzAyMjggMDMwNjs7OztOOzs7OzFFMUQ7CisxRTFEO0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0VESUxMQSBBTkQgQlJFVkU7TGw7MDtMOzAyMjkgMDMwNjs7OztOOzs7MUUxQzs7MUUxQworMUUxRTtMQVRJTiBDQVBJVEFMIExFVFRFUiBGIFdJVEggRE9UIEFCT1ZFO0x1OzA7TDswMDQ2IDAzMDc7Ozs7Tjs7OzsxRTFGOworMUUxRjtMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIERPVCBBQk9WRTtMbDswO0w7MDA2NiAwMzA3Ozs7O047OzsxRTFFOzsxRTFFCisxRTIwO0xBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBNQUNST047THU7MDtMOzAwNDcgMDMwNDs7OztOOzs7OzFFMjE7CisxRTIxO0xBVElOIFNNQUxMIExFVFRFUiBHIFdJVEggTUFDUk9OO0xsOzA7TDswMDY3IDAzMDQ7Ozs7Tjs7OzFFMjA7OzFFMjAKKzFFMjI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSCBXSVRIIERPVCBBQk9WRTtMdTswO0w7MDA0OCAwMzA3Ozs7O047Ozs7MUUyMzsKKzFFMjM7TEFUSU4gU01BTEwgTEVUVEVSIEggV0lUSCBET1QgQUJPVkU7TGw7MDtMOzAwNjggMDMwNzs7OztOOzs7MUUyMjs7MUUyMgorMUUyNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBIIFdJVEggRE9UIEJFTE9XO0x1OzA7TDswMDQ4IDAzMjM7Ozs7Tjs7OzsxRTI1OworMUUyNTtMQVRJTiBTTUFMTCBMRVRURVIgSCBXSVRIIERPVCBCRUxPVztMbDswO0w7MDA2OCAwMzIzOzs7O047OzsxRTI0OzsxRTI0CisxRTI2O0xBVElOIENBUElUQUwgTEVUVEVSIEggV0lUSCBESUFFUkVTSVM7THU7MDtMOzAwNDggMDMwODs7OztOOzs7OzFFMjc7CisxRTI3O0xBVElOIFNNQUxMIExFVFRFUiBIIFdJVEggRElBRVJFU0lTO0xsOzA7TDswMDY4IDAzMDg7Ozs7Tjs7OzFFMjY7OzFFMjYKKzFFMjg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSCBXSVRIIENFRElMTEE7THU7MDtMOzAwNDggMDMyNzs7OztOOzs7OzFFMjk7CisxRTI5O0xBVElOIFNNQUxMIExFVFRFUiBIIFdJVEggQ0VESUxMQTtMbDswO0w7MDA2OCAwMzI3Ozs7O047OzsxRTI4OzsxRTI4CisxRTJBO0xBVElOIENBUElUQUwgTEVUVEVSIEggV0lUSCBCUkVWRSBCRUxPVztMdTswO0w7MDA0OCAwMzJFOzs7O047Ozs7MUUyQjsKKzFFMkI7TEFUSU4gU01BTEwgTEVUVEVSIEggV0lUSCBCUkVWRSBCRUxPVztMbDswO0w7MDA2OCAwMzJFOzs7O047OzsxRTJBOzsxRTJBCisxRTJDO0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBUSUxERSBCRUxPVztMdTswO0w7MDA0OSAwMzMwOzs7O047Ozs7MUUyRDsKKzFFMkQ7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBUSUxERSBCRUxPVztMbDswO0w7MDA2OSAwMzMwOzs7O047OzsxRTJDOzsxRTJDCisxRTJFO0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMgQU5EIEFDVVRFO0x1OzA7TDswMENGIDAzMDE7Ozs7Tjs7OzsxRTJGOworMUUyRjtMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUyBBTkQgQUNVVEU7TGw7MDtMOzAwRUYgMDMwMTs7OztOOzs7MUUyRTs7MUUyRQorMUUzMDtMQVRJTiBDQVBJVEFMIExFVFRFUiBLIFdJVEggQUNVVEU7THU7MDtMOzAwNEIgMDMwMTs7OztOOzs7OzFFMzE7CisxRTMxO0xBVElOIFNNQUxMIExFVFRFUiBLIFdJVEggQUNVVEU7TGw7MDtMOzAwNkIgMDMwMTs7OztOOzs7MUUzMDs7MUUzMAorMUUzMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBLIFdJVEggRE9UIEJFTE9XO0x1OzA7TDswMDRCIDAzMjM7Ozs7Tjs7OzsxRTMzOworMUUzMztMQVRJTiBTTUFMTCBMRVRURVIgSyBXSVRIIERPVCBCRUxPVztMbDswO0w7MDA2QiAwMzIzOzs7O047OzsxRTMyOzsxRTMyCisxRTM0O0xBVElOIENBUElUQUwgTEVUVEVSIEsgV0lUSCBMSU5FIEJFTE9XO0x1OzA7TDswMDRCIDAzMzE7Ozs7Tjs7OzsxRTM1OworMUUzNTtMQVRJTiBTTUFMTCBMRVRURVIgSyBXSVRIIExJTkUgQkVMT1c7TGw7MDtMOzAwNkIgMDMzMTs7OztOOzs7MUUzNDs7MUUzNAorMUUzNjtMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggRE9UIEJFTE9XO0x1OzA7TDswMDRDIDAzMjM7Ozs7Tjs7OzsxRTM3OworMUUzNztMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIERPVCBCRUxPVztMbDswO0w7MDA2QyAwMzIzOzs7O047OzsxRTM2OzsxRTM2CisxRTM4O0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBET1QgQkVMT1cgQU5EIE1BQ1JPTjtMdTswO0w7MUUzNiAwMzA0Ozs7O047Ozs7MUUzOTsKKzFFMzk7TEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBET1QgQkVMT1cgQU5EIE1BQ1JPTjtMbDswO0w7MUUzNyAwMzA0Ozs7O047OzsxRTM4OzsxRTM4CisxRTNBO0xBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBMSU5FIEJFTE9XO0x1OzA7TDswMDRDIDAzMzE7Ozs7Tjs7OzsxRTNCOworMUUzQjtMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIExJTkUgQkVMT1c7TGw7MDtMOzAwNkMgMDMzMTs7OztOOzs7MUUzQTs7MUUzQQorMUUzQztMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggQ0lSQ1VNRkxFWCBCRUxPVztMdTswO0w7MDA0QyAwMzJEOzs7O047Ozs7MUUzRDsKKzFFM0Q7TEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBDSVJDVU1GTEVYIEJFTE9XO0xsOzA7TDswMDZDIDAzMkQ7Ozs7Tjs7OzFFM0M7OzFFM0MKKzFFM0U7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTSBXSVRIIEFDVVRFO0x1OzA7TDswMDREIDAzMDE7Ozs7Tjs7OzsxRTNGOworMUUzRjtMQVRJTiBTTUFMTCBMRVRURVIgTSBXSVRIIEFDVVRFO0xsOzA7TDswMDZEIDAzMDE7Ozs7Tjs7OzFFM0U7OzFFM0UKKzFFNDA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTSBXSVRIIERPVCBBQk9WRTtMdTswO0w7MDA0RCAwMzA3Ozs7O047Ozs7MUU0MTsKKzFFNDE7TEFUSU4gU01BTEwgTEVUVEVSIE0gV0lUSCBET1QgQUJPVkU7TGw7MDtMOzAwNkQgMDMwNzs7OztOOzs7MUU0MDs7MUU0MAorMUU0MjtMQVRJTiBDQVBJVEFMIExFVFRFUiBNIFdJVEggRE9UIEJFTE9XO0x1OzA7TDswMDREIDAzMjM7Ozs7Tjs7OzsxRTQzOworMUU0MztMQVRJTiBTTUFMTCBMRVRURVIgTSBXSVRIIERPVCBCRUxPVztMbDswO0w7MDA2RCAwMzIzOzs7O047OzsxRTQyOzsxRTQyCisxRTQ0O0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBET1QgQUJPVkU7THU7MDtMOzAwNEUgMDMwNzs7OztOOzs7OzFFNDU7CisxRTQ1O0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggRE9UIEFCT1ZFO0xsOzA7TDswMDZFIDAzMDc7Ozs7Tjs7OzFFNDQ7OzFFNDQKKzFFNDY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIERPVCBCRUxPVztMdTswO0w7MDA0RSAwMzIzOzs7O047Ozs7MUU0NzsKKzFFNDc7TEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBET1QgQkVMT1c7TGw7MDtMOzAwNkUgMDMyMzs7OztOOzs7MUU0Njs7MUU0NgorMUU0ODtMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggTElORSBCRUxPVztMdTswO0w7MDA0RSAwMzMxOzs7O047Ozs7MUU0OTsKKzFFNDk7TEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBMSU5FIEJFTE9XO0xsOzA7TDswMDZFIDAzMzE7Ozs7Tjs7OzFFNDg7OzFFNDgKKzFFNEE7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIENJUkNVTUZMRVggQkVMT1c7THU7MDtMOzAwNEUgMDMyRDs7OztOOzs7OzFFNEI7CisxRTRCO0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggQ0lSQ1VNRkxFWCBCRUxPVztMbDswO0w7MDA2RSAwMzJEOzs7O047OzsxRTRBOzsxRTRBCisxRTRDO0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERSBBTkQgQUNVVEU7THU7MDtMOzAwRDUgMDMwMTs7OztOOzs7OzFFNEQ7CisxRTREO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUgQU5EIEFDVVRFO0xsOzA7TDswMEY1IDAzMDE7Ozs7Tjs7OzFFNEM7OzFFNEMKKzFFNEU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFIEFORCBESUFFUkVTSVM7THU7MDtMOzAwRDUgMDMwODs7OztOOzs7OzFFNEY7CisxRTRGO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUgQU5EIERJQUVSRVNJUztMbDswO0w7MDBGNSAwMzA4Ozs7O047OzsxRTRFOzsxRTRFCisxRTUwO0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBNQUNST04gQU5EIEdSQVZFO0x1OzA7TDswMTRDIDAzMDA7Ozs7Tjs7OzsxRTUxOworMUU1MTtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIE1BQ1JPTiBBTkQgR1JBVkU7TGw7MDtMOzAxNEQgMDMwMDs7OztOOzs7MUU1MDs7MUU1MAorMUU1MjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggTUFDUk9OIEFORCBBQ1VURTtMdTswO0w7MDE0QyAwMzAxOzs7O047Ozs7MUU1MzsKKzFFNTM7TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBNQUNST04gQU5EIEFDVVRFO0xsOzA7TDswMTREIDAzMDE7Ozs7Tjs7OzFFNTI7OzFFNTIKKzFFNTQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUCBXSVRIIEFDVVRFO0x1OzA7TDswMDUwIDAzMDE7Ozs7Tjs7OzsxRTU1OworMUU1NTtMQVRJTiBTTUFMTCBMRVRURVIgUCBXSVRIIEFDVVRFO0xsOzA7TDswMDcwIDAzMDE7Ozs7Tjs7OzFFNTQ7OzFFNTQKKzFFNTY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUCBXSVRIIERPVCBBQk9WRTtMdTswO0w7MDA1MCAwMzA3Ozs7O047Ozs7MUU1NzsKKzFFNTc7TEFUSU4gU01BTEwgTEVUVEVSIFAgV0lUSCBET1QgQUJPVkU7TGw7MDtMOzAwNzAgMDMwNzs7OztOOzs7MUU1Njs7MUU1NgorMUU1ODtMQVRJTiBDQVBJVEFMIExFVFRFUiBSIFdJVEggRE9UIEFCT1ZFO0x1OzA7TDswMDUyIDAzMDc7Ozs7Tjs7OzsxRTU5OworMUU1OTtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIERPVCBBQk9WRTtMbDswO0w7MDA3MiAwMzA3Ozs7O047OzsxRTU4OzsxRTU4CisxRTVBO0xBVElOIENBUElUQUwgTEVUVEVSIFIgV0lUSCBET1QgQkVMT1c7THU7MDtMOzAwNTIgMDMyMzs7OztOOzs7OzFFNUI7CisxRTVCO0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggRE9UIEJFTE9XO0xsOzA7TDswMDcyIDAzMjM7Ozs7Tjs7OzFFNUE7OzFFNUEKKzFFNUM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIERPVCBCRUxPVyBBTkQgTUFDUk9OO0x1OzA7TDsxRTVBIDAzMDQ7Ozs7Tjs7OzsxRTVEOworMUU1RDtMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIERPVCBCRUxPVyBBTkQgTUFDUk9OO0xsOzA7TDsxRTVCIDAzMDQ7Ozs7Tjs7OzFFNUM7OzFFNUMKKzFFNUU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUiBXSVRIIExJTkUgQkVMT1c7THU7MDtMOzAwNTIgMDMzMTs7OztOOzs7OzFFNUY7CisxRTVGO0xBVElOIFNNQUxMIExFVFRFUiBSIFdJVEggTElORSBCRUxPVztMbDswO0w7MDA3MiAwMzMxOzs7O047OzsxRTVFOzsxRTVFCisxRTYwO0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBET1QgQUJPVkU7THU7MDtMOzAwNTMgMDMwNzs7OztOOzs7OzFFNjE7CisxRTYxO0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggRE9UIEFCT1ZFO0xsOzA7TDswMDczIDAzMDc7Ozs7Tjs7OzFFNjA7OzFFNjAKKzFFNjI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIERPVCBCRUxPVztMdTswO0w7MDA1MyAwMzIzOzs7O047Ozs7MUU2MzsKKzFFNjM7TEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBET1QgQkVMT1c7TGw7MDtMOzAwNzMgMDMyMzs7OztOOzs7MUU2Mjs7MUU2MgorMUU2NDtMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQUNVVEUgQU5EIERPVCBBQk9WRTtMdTswO0w7MDE1QSAwMzA3Ozs7O047Ozs7MUU2NTsKKzFFNjU7TEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBBQ1VURSBBTkQgRE9UIEFCT1ZFO0xsOzA7TDswMTVCIDAzMDc7Ozs7Tjs7OzFFNjQ7OzFFNjQKKzFFNjY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENBUk9OIEFORCBET1QgQUJPVkU7THU7MDtMOzAxNjAgMDMwNzs7OztOOzs7OzFFNjc7CisxRTY3O0xBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0FST04gQU5EIERPVCBBQk9WRTtMbDswO0w7MDE2MSAwMzA3Ozs7O047OzsxRTY2OzsxRTY2CisxRTY4O0xBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBET1QgQkVMT1cgQU5EIERPVCBBQk9WRTtMdTswO0w7MUU2MiAwMzA3Ozs7O047Ozs7MUU2OTsKKzFFNjk7TEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBET1QgQkVMT1cgQU5EIERPVCBBQk9WRTtMbDswO0w7MUU2MyAwMzA3Ozs7O047OzsxRTY4OzsxRTY4CisxRTZBO0xBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBET1QgQUJPVkU7THU7MDtMOzAwNTQgMDMwNzs7OztOOzs7OzFFNkI7CisxRTZCO0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggRE9UIEFCT1ZFO0xsOzA7TDswMDc0IDAzMDc7Ozs7Tjs7OzFFNkE7OzFFNkEKKzFFNkM7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIERPVCBCRUxPVztMdTswO0w7MDA1NCAwMzIzOzs7O047Ozs7MUU2RDsKKzFFNkQ7TEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBET1QgQkVMT1c7TGw7MDtMOzAwNzQgMDMyMzs7OztOOzs7MUU2Qzs7MUU2QworMUU2RTtMQVRJTiBDQVBJVEFMIExFVFRFUiBUIFdJVEggTElORSBCRUxPVztMdTswO0w7MDA1NCAwMzMxOzs7O047Ozs7MUU2RjsKKzFFNkY7TEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBMSU5FIEJFTE9XO0xsOzA7TDswMDc0IDAzMzE7Ozs7Tjs7OzFFNkU7OzFFNkUKKzFFNzA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIENJUkNVTUZMRVggQkVMT1c7THU7MDtMOzAwNTQgMDMyRDs7OztOOzs7OzFFNzE7CisxRTcxO0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggQ0lSQ1VNRkxFWCBCRUxPVztMbDswO0w7MDA3NCAwMzJEOzs7O047OzsxRTcwOzsxRTcwCisxRTcyO0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgQkVMT1c7THU7MDtMOzAwNTUgMDMyNDs7OztOOzs7OzFFNzM7CisxRTczO0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTIEJFTE9XO0xsOzA7TDswMDc1IDAzMjQ7Ozs7Tjs7OzFFNzI7OzFFNzIKKzFFNzQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIFRJTERFIEJFTE9XO0x1OzA7TDswMDU1IDAzMzA7Ozs7Tjs7OzsxRTc1OworMUU3NTtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIFRJTERFIEJFTE9XO0xsOzA7TDswMDc1IDAzMzA7Ozs7Tjs7OzFFNzQ7OzFFNzQKKzFFNzY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVggQkVMT1c7THU7MDtMOzAwNTUgMDMyRDs7OztOOzs7OzFFNzc7CisxRTc3O0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWCBCRUxPVztMbDswO0w7MDA3NSAwMzJEOzs7O047OzsxRTc2OzsxRTc2CisxRTc4O0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBUSUxERSBBTkQgQUNVVEU7THU7MDtMOzAxNjggMDMwMTs7OztOOzs7OzFFNzk7CisxRTc5O0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggVElMREUgQU5EIEFDVVRFO0xsOzA7TDswMTY5IDAzMDE7Ozs7Tjs7OzFFNzg7OzFFNzgKKzFFN0E7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIE1BQ1JPTiBBTkQgRElBRVJFU0lTO0x1OzA7TDswMTZBIDAzMDg7Ozs7Tjs7OzsxRTdCOworMUU3QjtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIE1BQ1JPTiBBTkQgRElBRVJFU0lTO0xsOzA7TDswMTZCIDAzMDg7Ozs7Tjs7OzFFN0E7OzFFN0EKKzFFN0M7TEFUSU4gQ0FQSVRBTCBMRVRURVIgViBXSVRIIFRJTERFO0x1OzA7TDswMDU2IDAzMDM7Ozs7Tjs7OzsxRTdEOworMUU3RDtMQVRJTiBTTUFMTCBMRVRURVIgViBXSVRIIFRJTERFO0xsOzA7TDswMDc2IDAzMDM7Ozs7Tjs7OzFFN0M7OzFFN0MKKzFFN0U7TEFUSU4gQ0FQSVRBTCBMRVRURVIgViBXSVRIIERPVCBCRUxPVztMdTswO0w7MDA1NiAwMzIzOzs7O047Ozs7MUU3RjsKKzFFN0Y7TEFUSU4gU01BTEwgTEVUVEVSIFYgV0lUSCBET1QgQkVMT1c7TGw7MDtMOzAwNzYgMDMyMzs7OztOOzs7MUU3RTs7MUU3RQorMUU4MDtMQVRJTiBDQVBJVEFMIExFVFRFUiBXIFdJVEggR1JBVkU7THU7MDtMOzAwNTcgMDMwMDs7OztOOzs7OzFFODE7CisxRTgxO0xBVElOIFNNQUxMIExFVFRFUiBXIFdJVEggR1JBVkU7TGw7MDtMOzAwNzcgMDMwMDs7OztOOzs7MUU4MDs7MUU4MAorMUU4MjtMQVRJTiBDQVBJVEFMIExFVFRFUiBXIFdJVEggQUNVVEU7THU7MDtMOzAwNTcgMDMwMTs7OztOOzs7OzFFODM7CisxRTgzO0xBVElOIFNNQUxMIExFVFRFUiBXIFdJVEggQUNVVEU7TGw7MDtMOzAwNzcgMDMwMTs7OztOOzs7MUU4Mjs7MUU4MgorMUU4NDtMQVRJTiBDQVBJVEFMIExFVFRFUiBXIFdJVEggRElBRVJFU0lTO0x1OzA7TDswMDU3IDAzMDg7Ozs7Tjs7OzsxRTg1OworMUU4NTtMQVRJTiBTTUFMTCBMRVRURVIgVyBXSVRIIERJQUVSRVNJUztMbDswO0w7MDA3NyAwMzA4Ozs7O047OzsxRTg0OzsxRTg0CisxRTg2O0xBVElOIENBUElUQUwgTEVUVEVSIFcgV0lUSCBET1QgQUJPVkU7THU7MDtMOzAwNTcgMDMwNzs7OztOOzs7OzFFODc7CisxRTg3O0xBVElOIFNNQUxMIExFVFRFUiBXIFdJVEggRE9UIEFCT1ZFO0xsOzA7TDswMDc3IDAzMDc7Ozs7Tjs7OzFFODY7OzFFODYKKzFFODg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVyBXSVRIIERPVCBCRUxPVztMdTswO0w7MDA1NyAwMzIzOzs7O047Ozs7MUU4OTsKKzFFODk7TEFUSU4gU01BTEwgTEVUVEVSIFcgV0lUSCBET1QgQkVMT1c7TGw7MDtMOzAwNzcgMDMyMzs7OztOOzs7MUU4ODs7MUU4OAorMUU4QTtMQVRJTiBDQVBJVEFMIExFVFRFUiBYIFdJVEggRE9UIEFCT1ZFO0x1OzA7TDswMDU4IDAzMDc7Ozs7Tjs7OzsxRThCOworMUU4QjtMQVRJTiBTTUFMTCBMRVRURVIgWCBXSVRIIERPVCBBQk9WRTtMbDswO0w7MDA3OCAwMzA3Ozs7O047OzsxRThBOzsxRThBCisxRThDO0xBVElOIENBUElUQUwgTEVUVEVSIFggV0lUSCBESUFFUkVTSVM7THU7MDtMOzAwNTggMDMwODs7OztOOzs7OzFFOEQ7CisxRThEO0xBVElOIFNNQUxMIExFVFRFUiBYIFdJVEggRElBRVJFU0lTO0xsOzA7TDswMDc4IDAzMDg7Ozs7Tjs7OzFFOEM7OzFFOEMKKzFFOEU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIERPVCBBQk9WRTtMdTswO0w7MDA1OSAwMzA3Ozs7O047Ozs7MUU4RjsKKzFFOEY7TEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBET1QgQUJPVkU7TGw7MDtMOzAwNzkgMDMwNzs7OztOOzs7MUU4RTs7MUU4RQorMUU5MDtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0lSQ1VNRkxFWDtMdTswO0w7MDA1QSAwMzAyOzs7O047Ozs7MUU5MTsKKzFFOTE7TEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDSVJDVU1GTEVYO0xsOzA7TDswMDdBIDAzMDI7Ozs7Tjs7OzFFOTA7OzFFOTAKKzFFOTI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIERPVCBCRUxPVztMdTswO0w7MDA1QSAwMzIzOzs7O047Ozs7MUU5MzsKKzFFOTM7TEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBET1QgQkVMT1c7TGw7MDtMOzAwN0EgMDMyMzs7OztOOzs7MUU5Mjs7MUU5MgorMUU5NDtMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggTElORSBCRUxPVztMdTswO0w7MDA1QSAwMzMxOzs7O047Ozs7MUU5NTsKKzFFOTU7TEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBMSU5FIEJFTE9XO0xsOzA7TDswMDdBIDAzMzE7Ozs7Tjs7OzFFOTQ7OzFFOTQKKzFFOTY7TEFUSU4gU01BTEwgTEVUVEVSIEggV0lUSCBMSU5FIEJFTE9XO0xsOzA7TDswMDY4IDAzMzE7Ozs7Tjs7Ozs7CisxRTk3O0xBVElOIFNNQUxMIExFVFRFUiBUIFdJVEggRElBRVJFU0lTO0xsOzA7TDswMDc0IDAzMDg7Ozs7Tjs7Ozs7CisxRTk4O0xBVElOIFNNQUxMIExFVFRFUiBXIFdJVEggUklORyBBQk9WRTtMbDswO0w7MDA3NyAwMzBBOzs7O047Ozs7OworMUU5OTtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIFJJTkcgQUJPVkU7TGw7MDtMOzAwNzkgMDMwQTs7OztOOzs7OzsKKzFFOUE7TEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSUdIVCBIQUxGIFJJTkc7TGw7MDtMOzxjb21wYXQ+IDAwNjEgMDJCRTs7OztOOzs7OzsKKzFFOUI7TEFUSU4gU01BTEwgTEVUVEVSIExPTkcgUyBXSVRIIERPVCBBQk9WRTtMbDswO0w7MDE3RiAwMzA3Ozs7O047OzsxRTYwOzsxRTYwCisxRUEwO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBET1QgQkVMT1c7THU7MDtMOzAwNDEgMDMyMzs7OztOOzs7OzFFQTE7CisxRUExO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRE9UIEJFTE9XO0xsOzA7TDswMDYxIDAzMjM7Ozs7Tjs7OzFFQTA7OzFFQTAKKzFFQTI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEhPT0sgQUJPVkU7THU7MDtMOzAwNDEgMDMwOTs7OztOOzs7OzFFQTM7CisxRUEzO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggSE9PSyBBQk9WRTtMbDswO0w7MDA2MSAwMzA5Ozs7O047OzsxRUEyOzsxRUEyCisxRUE0O0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYIEFORCBBQ1VURTtMdTswO0w7MDBDMiAwMzAxOzs7O047Ozs7MUVBNTsKKzFFQTU7TEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYIEFORCBBQ1VURTtMbDswO0w7MDBFMiAwMzAxOzs7O047OzsxRUE0OzsxRUE0CisxRUE2O0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYIEFORCBHUkFWRTtMdTswO0w7MDBDMiAwMzAwOzs7O047Ozs7MUVBNzsKKzFFQTc7TEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYIEFORCBHUkFWRTtMbDswO0w7MDBFMiAwMzAwOzs7O047OzsxRUE2OzsxRUE2CisxRUE4O0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYIEFORCBIT09LIEFCT1ZFO0x1OzA7TDswMEMyIDAzMDk7Ozs7Tjs7OzsxRUE5OworMUVBOTtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVggQU5EIEhPT0sgQUJPVkU7TGw7MDtMOzAwRTIgMDMwOTs7OztOOzs7MUVBODs7MUVBOAorMUVBQTtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWCBBTkQgVElMREU7THU7MDtMOzAwQzIgMDMwMzs7OztOOzs7OzFFQUI7CisxRUFCO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWCBBTkQgVElMREU7TGw7MDtMOzAwRTIgMDMwMzs7OztOOzs7MUVBQTs7MUVBQQorMUVBQztMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWCBBTkQgRE9UIEJFTE9XO0x1OzA7TDsxRUEwIDAzMDI7Ozs7Tjs7OzsxRUFEOworMUVBRDtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVggQU5EIERPVCBCRUxPVztMbDswO0w7MUVBMSAwMzAyOzs7O047OzsxRUFDOzsxRUFDCisxRUFFO0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBCUkVWRSBBTkQgQUNVVEU7THU7MDtMOzAxMDIgMDMwMTs7OztOOzs7OzFFQUY7CisxRUFGO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQlJFVkUgQU5EIEFDVVRFO0xsOzA7TDswMTAzIDAzMDE7Ozs7Tjs7OzFFQUU7OzFFQUUKKzFFQjA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEJSRVZFIEFORCBHUkFWRTtMdTswO0w7MDEwMiAwMzAwOzs7O047Ozs7MUVCMTsKKzFFQjE7TEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBCUkVWRSBBTkQgR1JBVkU7TGw7MDtMOzAxMDMgMDMwMDs7OztOOzs7MUVCMDs7MUVCMAorMUVCMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkUgQU5EIEhPT0sgQUJPVkU7THU7MDtMOzAxMDIgMDMwOTs7OztOOzs7OzFFQjM7CisxRUIzO0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQlJFVkUgQU5EIEhPT0sgQUJPVkU7TGw7MDtMOzAxMDMgMDMwOTs7OztOOzs7MUVCMjs7MUVCMgorMUVCNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQlJFVkUgQU5EIFRJTERFO0x1OzA7TDswMTAyIDAzMDM7Ozs7Tjs7OzsxRUI1OworMUVCNTtMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEJSRVZFIEFORCBUSUxERTtMbDswO0w7MDEwMyAwMzAzOzs7O047OzsxRUI0OzsxRUI0CisxRUI2O0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBCUkVWRSBBTkQgRE9UIEJFTE9XO0x1OzA7TDsxRUEwIDAzMDY7Ozs7Tjs7OzsxRUI3OworMUVCNztMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEJSRVZFIEFORCBET1QgQkVMT1c7TGw7MDtMOzFFQTEgMDMwNjs7OztOOzs7MUVCNjs7MUVCNgorMUVCODtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRE9UIEJFTE9XO0x1OzA7TDswMDQ1IDAzMjM7Ozs7Tjs7OzsxRUI5OworMUVCOTtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERPVCBCRUxPVztMbDswO0w7MDA2NSAwMzIzOzs7O047OzsxRUI4OzsxRUI4CisxRUJBO0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBIT09LIEFCT1ZFO0x1OzA7TDswMDQ1IDAzMDk7Ozs7Tjs7OzsxRUJCOworMUVCQjtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEhPT0sgQUJPVkU7TGw7MDtMOzAwNjUgMDMwOTs7OztOOzs7MUVCQTs7MUVCQQorMUVCQztMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggVElMREU7THU7MDtMOzAwNDUgMDMwMzs7OztOOzs7OzFFQkQ7CisxRUJEO0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggVElMREU7TGw7MDtMOzAwNjUgMDMwMzs7OztOOzs7MUVCQzs7MUVCQworMUVCRTtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgQUNVVEU7THU7MDtMOzAwQ0EgMDMwMTs7OztOOzs7OzFFQkY7CisxRUJGO0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgQUNVVEU7TGw7MDtMOzAwRUEgMDMwMTs7OztOOzs7MUVCRTs7MUVCRQorMUVDMDtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgR1JBVkU7THU7MDtMOzAwQ0EgMDMwMDs7OztOOzs7OzFFQzE7CisxRUMxO0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgR1JBVkU7TGw7MDtMOzAwRUEgMDMwMDs7OztOOzs7MUVDMDs7MUVDMAorMUVDMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCBBTkQgSE9PSyBBQk9WRTtMdTswO0w7MDBDQSAwMzA5Ozs7O047Ozs7MUVDMzsKKzFFQzM7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYIEFORCBIT09LIEFCT1ZFO0xsOzA7TDswMEVBIDAzMDk7Ozs7Tjs7OzFFQzI7OzFFQzIKKzFFQzQ7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVggQU5EIFRJTERFO0x1OzA7TDswMENBIDAzMDM7Ozs7Tjs7OzsxRUM1OworMUVDNTtMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVggQU5EIFRJTERFO0xsOzA7TDswMEVBIDAzMDM7Ozs7Tjs7OzFFQzQ7OzFFQzQKKzFFQzY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVggQU5EIERPVCBCRUxPVztMdTswO0w7MUVCOCAwMzAyOzs7O047Ozs7MUVDNzsKKzFFQzc7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYIEFORCBET1QgQkVMT1c7TGw7MDtMOzFFQjkgMDMwMjs7OztOOzs7MUVDNjs7MUVDNgorMUVDODtMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggSE9PSyBBQk9WRTtMdTswO0w7MDA0OSAwMzA5Ozs7O047Ozs7MUVDOTsKKzFFQzk7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBIT09LIEFCT1ZFO0xsOzA7TDswMDY5IDAzMDk7Ozs7Tjs7OzFFQzg7OzFFQzgKKzFFQ0E7TEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERPVCBCRUxPVztMdTswO0w7MDA0OSAwMzIzOzs7O047Ozs7MUVDQjsKKzFFQ0I7TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBET1QgQkVMT1c7TGw7MDtMOzAwNjkgMDMyMzs7OztOOzs7MUVDQTs7MUVDQQorMUVDQztMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRE9UIEJFTE9XO0x1OzA7TDswMDRGIDAzMjM7Ozs7Tjs7OzsxRUNEOworMUVDRDtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERPVCBCRUxPVztMbDswO0w7MDA2RiAwMzIzOzs7O047OzsxRUNDOzsxRUNDCisxRUNFO0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBIT09LIEFCT1ZFO0x1OzA7TDswMDRGIDAzMDk7Ozs7Tjs7OzsxRUNGOworMUVDRjtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPT0sgQUJPVkU7TGw7MDtMOzAwNkYgMDMwOTs7OztOOzs7MUVDRTs7MUVDRQorMUVEMDtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgQUNVVEU7THU7MDtMOzAwRDQgMDMwMTs7OztOOzs7OzFFRDE7CisxRUQxO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgQUNVVEU7TGw7MDtMOzAwRjQgMDMwMTs7OztOOzs7MUVEMDs7MUVEMAorMUVEMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgR1JBVkU7THU7MDtMOzAwRDQgMDMwMDs7OztOOzs7OzFFRDM7CisxRUQzO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgR1JBVkU7TGw7MDtMOzAwRjQgMDMwMDs7OztOOzs7MUVEMjs7MUVEMgorMUVENDtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCBBTkQgSE9PSyBBQk9WRTtMdTswO0w7MDBENCAwMzA5Ozs7O047Ozs7MUVENTsKKzFFRDU7TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYIEFORCBIT09LIEFCT1ZFO0xsOzA7TDswMEY0IDAzMDk7Ozs7Tjs7OzFFRDQ7OzFFRDQKKzFFRDY7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVggQU5EIFRJTERFO0x1OzA7TDswMEQ0IDAzMDM7Ozs7Tjs7OzsxRUQ3OworMUVENztMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVggQU5EIFRJTERFO0xsOzA7TDswMEY0IDAzMDM7Ozs7Tjs7OzFFRDY7OzFFRDYKKzFFRDg7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVggQU5EIERPVCBCRUxPVztMdTswO0w7MUVDQyAwMzAyOzs7O047Ozs7MUVEOTsKKzFFRDk7TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYIEFORCBET1QgQkVMT1c7TGw7MDtMOzFFQ0QgMDMwMjs7OztOOzs7MUVEODs7MUVEOAorMUVEQTtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggSE9STiBBTkQgQUNVVEU7THU7MDtMOzAxQTAgMDMwMTs7OztOOzs7OzFFREI7CisxRURCO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggSE9STiBBTkQgQUNVVEU7TGw7MDtMOzAxQTEgMDMwMTs7OztOOzs7MUVEQTs7MUVEQQorMUVEQztMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggSE9STiBBTkQgR1JBVkU7THU7MDtMOzAxQTAgMDMwMDs7OztOOzs7OzFFREQ7CisxRUREO0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggSE9STiBBTkQgR1JBVkU7TGw7MDtMOzAxQTEgMDMwMDs7OztOOzs7MUVEQzs7MUVEQworMUVERTtMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggSE9STiBBTkQgSE9PSyBBQk9WRTtMdTswO0w7MDFBMCAwMzA5Ozs7O047Ozs7MUVERjsKKzFFREY7TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT1JOIEFORCBIT09LIEFCT1ZFO0xsOzA7TDswMUExIDAzMDk7Ozs7Tjs7OzFFREU7OzFFREUKKzFFRTA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEhPUk4gQU5EIFRJTERFO0x1OzA7TDswMUEwIDAzMDM7Ozs7Tjs7OzsxRUUxOworMUVFMTtMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk4gQU5EIFRJTERFO0xsOzA7TDswMUExIDAzMDM7Ozs7Tjs7OzFFRTA7OzFFRTAKKzFFRTI7TEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEhPUk4gQU5EIERPVCBCRUxPVztMdTswO0w7MDFBMCAwMzIzOzs7O047Ozs7MUVFMzsKKzFFRTM7TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT1JOIEFORCBET1QgQkVMT1c7TGw7MDtMOzAxQTEgMDMyMzs7OztOOzs7MUVFMjs7MUVFMgorMUVFNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRE9UIEJFTE9XO0x1OzA7TDswMDU1IDAzMjM7Ozs7Tjs7OzsxRUU1OworMUVFNTtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERPVCBCRUxPVztMbDswO0w7MDA3NSAwMzIzOzs7O047OzsxRUU0OzsxRUU0CisxRUU2O0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBIT09LIEFCT1ZFO0x1OzA7TDswMDU1IDAzMDk7Ozs7Tjs7OzsxRUU3OworMUVFNztMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEhPT0sgQUJPVkU7TGw7MDtMOzAwNzUgMDMwOTs7OztOOzs7MUVFNjs7MUVFNgorMUVFODtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgQUNVVEU7THU7MDtMOzAxQUYgMDMwMTs7OztOOzs7OzFFRTk7CisxRUU5O0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgQUNVVEU7TGw7MDtMOzAxQjAgMDMwMTs7OztOOzs7MUVFODs7MUVFOAorMUVFQTtMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgR1JBVkU7THU7MDtMOzAxQUYgMDMwMDs7OztOOzs7OzFFRUI7CisxRUVCO0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgR1JBVkU7TGw7MDtMOzAxQjAgMDMwMDs7OztOOzs7MUVFQTs7MUVFQQorMUVFQztMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggSE9STiBBTkQgSE9PSyBBQk9WRTtMdTswO0w7MDFBRiAwMzA5Ozs7O047Ozs7MUVFRDsKKzFFRUQ7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBIT1JOIEFORCBIT09LIEFCT1ZFO0xsOzA7TDswMUIwIDAzMDk7Ozs7Tjs7OzFFRUM7OzFFRUMKKzFFRUU7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEhPUk4gQU5EIFRJTERFO0x1OzA7TDswMUFGIDAzMDM7Ozs7Tjs7OzsxRUVGOworMUVFRjtMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEhPUk4gQU5EIFRJTERFO0xsOzA7TDswMUIwIDAzMDM7Ozs7Tjs7OzFFRUU7OzFFRUUKKzFFRjA7TEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEhPUk4gQU5EIERPVCBCRUxPVztMdTswO0w7MDFBRiAwMzIzOzs7O047Ozs7MUVGMTsKKzFFRjE7TEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBIT1JOIEFORCBET1QgQkVMT1c7TGw7MDtMOzAxQjAgMDMyMzs7OztOOzs7MUVGMDs7MUVGMAorMUVGMjtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggR1JBVkU7THU7MDtMOzAwNTkgMDMwMDs7OztOOzs7OzFFRjM7CisxRUYzO0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggR1JBVkU7TGw7MDtMOzAwNzkgMDMwMDs7OztOOzs7MUVGMjs7MUVGMgorMUVGNDtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRE9UIEJFTE9XO0x1OzA7TDswMDU5IDAzMjM7Ozs7Tjs7OzsxRUY1OworMUVGNTtMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERPVCBCRUxPVztMbDswO0w7MDA3OSAwMzIzOzs7O047OzsxRUY0OzsxRUY0CisxRUY2O0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBIT09LIEFCT1ZFO0x1OzA7TDswMDU5IDAzMDk7Ozs7Tjs7OzsxRUY3OworMUVGNztMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEhPT0sgQUJPVkU7TGw7MDtMOzAwNzkgMDMwOTs7OztOOzs7MUVGNjs7MUVGNgorMUVGODtMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggVElMREU7THU7MDtMOzAwNTkgMDMwMzs7OztOOzs7OzFFRjk7CisxRUY5O0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggVElMREU7TGw7MDtMOzAwNzkgMDMwMzs7OztOOzs7MUVGODs7MUVGOAorMUYwMDtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSTtMbDswO0w7MDNCMSAwMzEzOzs7O047OzsxRjA4OzsxRjA4CisxRjAxO0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBO0xsOzA7TDswM0IxIDAzMTQ7Ozs7Tjs7OzFGMDk7OzFGMDkKKzFGMDI7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFZBUklBO0xsOzA7TDsxRjAwIDAzMDA7Ozs7Tjs7OzFGMEE7OzFGMEEKKzFGMDM7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFZBUklBO0xsOzA7TDsxRjAxIDAzMDA7Ozs7Tjs7OzFGMEI7OzFGMEIKKzFGMDQ7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIE9YSUE7TGw7MDtMOzFGMDAgMDMwMTs7OztOOzs7MUYwQzs7MUYwQworMUYwNTtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgT1hJQTtMbDswO0w7MUYwMSAwMzAxOzs7O047OzsxRjBEOzsxRjBECisxRjA2O0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSTtMbDswO0w7MUYwMCAwMzQyOzs7O047OzsxRjBFOzsxRjBFCisxRjA3O0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSTtMbDswO0w7MUYwMSAwMzQyOzs7O047OzsxRjBGOzsxRjBGCisxRjA4O0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEk7THU7MDtMOzAzOTEgMDMxMzs7OztOOzs7OzFGMDA7CisxRjA5O0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUE7THU7MDtMOzAzOTEgMDMxNDs7OztOOzs7OzFGMDE7CisxRjBBO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFZBUklBO0x1OzA7TDsxRjA4IDAzMDA7Ozs7Tjs7OzsxRjAyOworMUYwQjtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBWQVJJQTtMdTswO0w7MUYwOSAwMzAwOzs7O047Ozs7MUYwMzsKKzFGMEM7R1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQTtMdTswO0w7MUYwOCAwMzAxOzs7O047Ozs7MUYwNDsKKzFGMEQ7R1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgT1hJQTtMdTswO0w7MUYwOSAwMzAxOzs7O047Ozs7MUYwNTsKKzFGMEU7R1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkk7THU7MDtMOzFGMDggMDM0Mjs7OztOOzs7OzFGMDY7CisxRjBGO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JO0x1OzA7TDsxRjA5IDAzNDI7Ozs7Tjs7OzsxRjA3OworMUYxMDtHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJO0xsOzA7TDswM0I1IDAzMTM7Ozs7Tjs7OzFGMTg7OzFGMTgKKzFGMTE7R1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQTtMbDswO0w7MDNCNSAwMzE0Ozs7O047OzsxRjE5OzsxRjE5CisxRjEyO0dSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OIFdJVEggUFNJTEkgQU5EIFZBUklBO0xsOzA7TDsxRjEwIDAzMDA7Ozs7Tjs7OzFGMUE7OzFGMUEKKzFGMTM7R1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgVkFSSUE7TGw7MDtMOzFGMTEgMDMwMDs7OztOOzs7MUYxQjs7MUYxQgorMUYxNDtHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJIEFORCBPWElBO0xsOzA7TDsxRjEwIDAzMDE7Ozs7Tjs7OzFGMUM7OzFGMUMKKzFGMTU7R1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgT1hJQTtMbDswO0w7MUYxMSAwMzAxOzs7O047OzsxRjFEOzsxRjFECisxRjE4O0dSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSTtMdTswO0w7MDM5NSAwMzEzOzs7O047Ozs7MUYxMDsKKzFGMTk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVBTSUxPTiBXSVRIIERBU0lBO0x1OzA7TDswMzk1IDAzMTQ7Ozs7Tjs7OzsxRjExOworMUYxQTtHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggUFNJTEkgQU5EIFZBUklBO0x1OzA7TDsxRjE4IDAzMDA7Ozs7Tjs7OzsxRjEyOworMUYxQjtHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggREFTSUEgQU5EIFZBUklBO0x1OzA7TDsxRjE5IDAzMDA7Ozs7Tjs7OzsxRjEzOworMUYxQztHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggUFNJTEkgQU5EIE9YSUE7THU7MDtMOzFGMTggMDMwMTs7OztOOzs7OzFGMTQ7CisxRjFEO0dSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgT1hJQTtMdTswO0w7MUYxOSAwMzAxOzs7O047Ozs7MUYxNTsKKzFGMjA7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJO0xsOzA7TDswM0I3IDAzMTM7Ozs7Tjs7OzFGMjg7OzFGMjgKKzFGMjE7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBO0xsOzA7TDswM0I3IDAzMTQ7Ozs7Tjs7OzFGMjk7OzFGMjkKKzFGMjI7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBWQVJJQTtMbDswO0w7MUYyMCAwMzAwOzs7O047OzsxRjJBOzsxRjJBCisxRjIzO0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUE7TGw7MDtMOzFGMjEgMDMwMDs7OztOOzs7MUYyQjs7MUYyQgorMUYyNDtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIE9YSUE7TGw7MDtMOzFGMjAgMDMwMTs7OztOOzs7MUYyQzs7MUYyQworMUYyNTtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIE9YSUE7TGw7MDtMOzFGMjEgMDMwMTs7OztOOzs7MUYyRDs7MUYyRAorMUYyNjtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JO0xsOzA7TDsxRjIwIDAzNDI7Ozs7Tjs7OzFGMkU7OzFGMkUKKzFGMjc7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSTtMbDswO0w7MUYyMSAwMzQyOzs7O047OzsxRjJGOzsxRjJGCisxRjI4O0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJO0x1OzA7TDswMzk3IDAzMTM7Ozs7Tjs7OzsxRjIwOworMUYyOTtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQTtMdTswO0w7MDM5NyAwMzE0Ozs7O047Ozs7MUYyMTsKKzFGMkE7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFZBUklBO0x1OzA7TDsxRjI4IDAzMDA7Ozs7Tjs7OzsxRjIyOworMUYyQjtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUE7THU7MDtMOzFGMjkgMDMwMDs7OztOOzs7OzFGMjM7CisxRjJDO0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBPWElBO0x1OzA7TDsxRjI4IDAzMDE7Ozs7Tjs7OzsxRjI0OworMUYyRDtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgT1hJQTtMdTswO0w7MUYyOSAwMzAxOzs7O047Ozs7MUYyNTsKKzFGMkU7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JO0x1OzA7TDsxRjI4IDAzNDI7Ozs7Tjs7OzsxRjI2OworMUYyRjtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkk7THU7MDtMOzFGMjkgMDM0Mjs7OztOOzs7OzFGMjc7CisxRjMwO0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggUFNJTEk7TGw7MDtMOzAzQjkgMDMxMzs7OztOOzs7MUYzODs7MUYzOAorMUYzMTtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBO0xsOzA7TDswM0I5IDAzMTQ7Ozs7Tjs7OzFGMzk7OzFGMzkKKzFGMzI7R1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUE7TGw7MDtMOzFGMzAgMDMwMDs7OztOOzs7MUYzQTs7MUYzQQorMUYzMztHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBWQVJJQTtMbDswO0w7MUYzMSAwMzAwOzs7O047OzsxRjNCOzsxRjNCCisxRjM0O0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIE9YSUE7TGw7MDtMOzFGMzAgMDMwMTs7OztOOzs7MUYzQzs7MUYzQworMUYzNTtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBPWElBO0xsOzA7TDsxRjMxIDAzMDE7Ozs7Tjs7OzFGM0Q7OzFGM0QKKzFGMzY7R1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkk7TGw7MDtMOzFGMzAgMDM0Mjs7OztOOzs7MUYzRTs7MUYzRQorMUYzNztHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSTtMbDswO0w7MUYzMSAwMzQyOzs7O047OzsxRjNGOzsxRjNGCisxRjM4O0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBQU0lMSTtMdTswO0w7MDM5OSAwMzEzOzs7O047Ozs7MUYzMDsKKzFGMzk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBO0x1OzA7TDswMzk5IDAzMTQ7Ozs7Tjs7OzsxRjMxOworMUYzQTtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIFZBUklBO0x1OzA7TDsxRjM4IDAzMDA7Ozs7Tjs7OzsxRjMyOworMUYzQjtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIFZBUklBO0x1OzA7TDsxRjM5IDAzMDA7Ozs7Tjs7OzsxRjMzOworMUYzQztHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIE9YSUE7THU7MDtMOzFGMzggMDMwMTs7OztOOzs7OzFGMzQ7CisxRjNEO0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBEQVNJQSBBTkQgT1hJQTtMdTswO0w7MUYzOSAwMzAxOzs7O047Ozs7MUYzNTsKKzFGM0U7R1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSTtMdTswO0w7MUYzOCAwMzQyOzs7O047Ozs7MUYzNjsKKzFGM0Y7R1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSTtMdTswO0w7MUYzOSAwMzQyOzs7O047Ozs7MUYzNzsKKzFGNDA7R1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBQU0lMSTtMbDswO0w7MDNCRiAwMzEzOzs7O047OzsxRjQ4OzsxRjQ4CisxRjQxO0dSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggREFTSUE7TGw7MDtMOzAzQkYgMDMxNDs7OztOOzs7MUY0OTs7MUY0OQorMUY0MjtHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBWQVJJQTtMbDswO0w7MUY0MCAwMzAwOzs7O047OzsxRjRBOzsxRjRBCisxRjQzO0dSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggREFTSUEgQU5EIFZBUklBO0xsOzA7TDsxRjQxIDAzMDA7Ozs7Tjs7OzFGNEI7OzFGNEIKKzFGNDQ7R1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBQU0lMSSBBTkQgT1hJQTtMbDswO0w7MUY0MCAwMzAxOzs7O047OzsxRjRDOzsxRjRDCisxRjQ1O0dSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggREFTSUEgQU5EIE9YSUE7TGw7MDtMOzFGNDEgMDMwMTs7OztOOzs7MUY0RDs7MUY0RAorMUY0ODtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggUFNJTEk7THU7MDtMOzAzOUYgMDMxMzs7OztOOzs7OzFGNDA7CisxRjQ5O0dSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBEQVNJQTtMdTswO0w7MDM5RiAwMzE0Ozs7O047Ozs7MUY0MTsKKzFGNEE7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBWQVJJQTtMdTswO0w7MUY0OCAwMzAwOzs7O047Ozs7MUY0MjsKKzFGNEI7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBWQVJJQTtMdTswO0w7MUY0OSAwMzAwOzs7O047Ozs7MUY0MzsKKzFGNEM7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBPWElBO0x1OzA7TDsxRjQ4IDAzMDE7Ozs7Tjs7OzsxRjQ0OworMUY0RDtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlDUk9OIFdJVEggREFTSUEgQU5EIE9YSUE7THU7MDtMOzFGNDkgMDMwMTs7OztOOzs7OzFGNDU7CisxRjUwO0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEk7TGw7MDtMOzAzQzUgMDMxMzs7OztOOzs7OzsKKzFGNTE7R1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQTtMbDswO0w7MDNDNSAwMzE0Ozs7O047OzsxRjU5OzsxRjU5CisxRjUyO0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEkgQU5EIFZBUklBO0xsOzA7TDsxRjUwIDAzMDA7Ozs7Tjs7Ozs7CisxRjUzO0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggREFTSUEgQU5EIFZBUklBO0xsOzA7TDsxRjUxIDAzMDA7Ozs7Tjs7OzFGNUI7OzFGNUIKKzFGNTQ7R1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQU0lMSSBBTkQgT1hJQTtMbDswO0w7MUY1MCAwMzAxOzs7O047Ozs7OworMUY1NTtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBPWElBO0xsOzA7TDsxRjUxIDAzMDE7Ozs7Tjs7OzFGNUQ7OzFGNUQKKzFGNTY7R1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkk7TGw7MDtMOzFGNTAgMDM0Mjs7OztOOzs7OzsKKzFGNTc7R1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkk7TGw7MDtMOzFGNTEgMDM0Mjs7OztOOzs7MUY1Rjs7MUY1RgorMUY1OTtHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggREFTSUE7THU7MDtMOzAzQTUgMDMxNDs7OztOOzs7OzFGNTE7CisxRjVCO0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgVkFSSUE7THU7MDtMOzFGNTkgMDMwMDs7OztOOzs7OzFGNTM7CisxRjVEO0dSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgT1hJQTtMdTswO0w7MUY1OSAwMzAxOzs7O047Ozs7MUY1NTsKKzFGNUY7R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSTtMdTswO0w7MUY1OSAwMzQyOzs7O047Ozs7MUY1NzsKKzFGNjA7R1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEk7TGw7MDtMOzAzQzkgMDMxMzs7OztOOzs7MUY2ODs7MUY2OAorMUY2MTtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQTtMbDswO0w7MDNDOSAwMzE0Ozs7O047OzsxRjY5OzsxRjY5CisxRjYyO0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBWQVJJQTtMbDswO0w7MUY2MCAwMzAwOzs7O047OzsxRjZBOzsxRjZBCisxRjYzO0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBWQVJJQTtMbDswO0w7MUY2MSAwMzAwOzs7O047OzsxRjZCOzsxRjZCCisxRjY0O0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBO0xsOzA7TDsxRjYwIDAzMDE7Ozs7Tjs7OzFGNkM7OzFGNkMKKzFGNjU7R1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIE9YSUE7TGw7MDtMOzFGNjEgMDMwMTs7OztOOzs7MUY2RDs7MUY2RAorMUY2NjtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkk7TGw7MDtMOzFGNjAgMDM0Mjs7OztOOzs7MUY2RTs7MUY2RQorMUY2NztHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkk7TGw7MDtMOzFGNjEgMDM0Mjs7OztOOzs7MUY2Rjs7MUY2RgorMUY2ODtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJO0x1OzA7TDswM0E5IDAzMTM7Ozs7Tjs7OzsxRjYwOworMUY2OTtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBO0x1OzA7TDswM0E5IDAzMTQ7Ozs7Tjs7OzsxRjYxOworMUY2QTtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBWQVJJQTtMdTswO0w7MUY2OCAwMzAwOzs7O047Ozs7MUY2MjsKKzFGNkI7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgVkFSSUE7THU7MDtMOzFGNjkgMDMwMDs7OztOOzs7OzFGNjM7CisxRjZDO0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIE9YSUE7THU7MDtMOzFGNjggMDMwMTs7OztOOzs7OzFGNjQ7CisxRjZEO0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIE9YSUE7THU7MDtMOzFGNjkgMDMwMTs7OztOOzs7OzFGNjU7CisxRjZFO0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JO0x1OzA7TDsxRjY4IDAzNDI7Ozs7Tjs7OzsxRjY2OworMUY2RjtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSTtMdTswO0w7MUY2OSAwMzQyOzs7O047Ozs7MUY2NzsKKzFGNzA7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggVkFSSUE7TGw7MDtMOzAzQjEgMDMwMDs7OztOOzs7MUZCQTs7MUZCQQorMUY3MTtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBPWElBO0xsOzA7TDswM0FDOzs7O047OzsxRkJCOzsxRkJCCisxRjcyO0dSRUVLIFNNQUxMIExFVFRFUiBFUFNJTE9OIFdJVEggVkFSSUE7TGw7MDtMOzAzQjUgMDMwMDs7OztOOzs7MUZDODs7MUZDOAorMUY3MztHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIE9YSUE7TGw7MDtMOzAzQUQ7Ozs7Tjs7OzFGQzk7OzFGQzkKKzFGNzQ7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFZBUklBO0xsOzA7TDswM0I3IDAzMDA7Ozs7Tjs7OzFGQ0E7OzFGQ0EKKzFGNzU7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIE9YSUE7TGw7MDtMOzAzQUU7Ozs7Tjs7OzFGQ0I7OzFGQ0IKKzFGNzY7R1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBWQVJJQTtMbDswO0w7MDNCOSAwMzAwOzs7O047OzsxRkRBOzsxRkRBCisxRjc3O0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggT1hJQTtMbDswO0w7MDNBRjs7OztOOzs7MUZEQjs7MUZEQgorMUY3ODtHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFZBUklBO0xsOzA7TDswM0JGIDAzMDA7Ozs7Tjs7OzFGRjg7OzFGRjgKKzFGNzk7R1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBPWElBO0xsOzA7TDswM0NDOzs7O047OzsxRkY5OzsxRkY5CisxRjdBO0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggVkFSSUE7TGw7MDtMOzAzQzUgMDMwMDs7OztOOzs7MUZFQTs7MUZFQQorMUY3QjtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIE9YSUE7TGw7MDtMOzAzQ0Q7Ozs7Tjs7OzFGRUI7OzFGRUIKKzFGN0M7R1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggVkFSSUE7TGw7MDtMOzAzQzkgMDMwMDs7OztOOzs7MUZGQTs7MUZGQQorMUY3RDtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBPWElBO0xsOzA7TDswM0NFOzs7O047OzsxRkZCOzsxRkZCCisxRjgwO0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjAwIDAzNDU7Ozs7Tjs7OzFGODg7OzFGODgKKzFGODE7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGMDEgMDM0NTs7OztOOzs7MUY4OTs7MUY4OQorMUY4MjtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGMDIgMDM0NTs7OztOOzs7MUY4QTs7MUY4QQorMUY4MztHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGMDMgMDM0NTs7OztOOzs7MUY4Qjs7MUY4QgorMUY4NDtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUYwNCAwMzQ1Ozs7O047OzsxRjhDOzsxRjhDCisxRjg1O0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjA1IDAzNDU7Ozs7Tjs7OzFGOEQ7OzFGOEQKKzFGODY7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjA2IDAzNDU7Ozs7Tjs7OzFGOEU7OzFGOEUKKzFGODc7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjA3IDAzNDU7Ozs7Tjs7OzFGOEY7OzFGOEYKKzFGODg7R1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgUFJPU0dFR1JBTU1FTkk7THQ7MDtMOzFGMDggMDM0NTs7OztOOzs7OzFGODA7CisxRjg5O0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBST1NHRUdSQU1NRU5JO0x0OzA7TDsxRjA5IDAzNDU7Ozs7Tjs7OzsxRjgxOworMUY4QTtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQgUFJPU0dFR1JBTU1FTkk7THQ7MDtMOzFGMEEgMDM0NTs7OztOOzs7OzFGODI7CisxRjhCO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUYwQiAwMzQ1Ozs7O047Ozs7MUY4MzsKKzFGOEM7R1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgUFJPU0dFR1JBTU1FTkk7THQ7MDtMOzFGMEMgMDM0NTs7OztOOzs7OzFGODQ7CisxRjhEO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5EIFBST1NHRUdSQU1NRU5JO0x0OzA7TDsxRjBEIDAzNDU7Ozs7Tjs7OzsxRjg1OworMUY4RTtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSSBBTkQgUFJPU0dFR1JBTU1FTkk7THQ7MDtMOzFGMEUgMDM0NTs7OztOOzs7OzFGODY7CisxRjhGO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUYwRiAwMzQ1Ozs7O047Ozs7MUY4NzsKKzFGOTA7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjIwIDAzNDU7Ozs7Tjs7OzFGOTg7OzFGOTgKKzFGOTE7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjIxIDAzNDU7Ozs7Tjs7OzFGOTk7OzFGOTkKKzFGOTI7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUYyMiAwMzQ1Ozs7O047OzsxRjlBOzsxRjlBCisxRjkzO0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGMjMgMDM0NTs7OztOOzs7MUY5Qjs7MUY5QgorMUY5NDtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGMjQgMDM0NTs7OztOOzs7MUY5Qzs7MUY5QworMUY5NTtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGMjUgMDM0NTs7OztOOzs7MUY5RDs7MUY5RAorMUY5NjtHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjI2IDAzNDU7Ozs7Tjs7OzFGOUU7OzFGOUUKKzFGOTc7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUYyNyAwMzQ1Ozs7O047OzsxRjlGOzsxRjlGCisxRjk4O0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUYyOCAwMzQ1Ozs7O047Ozs7MUY5MDsKKzFGOTk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFBST1NHRUdSQU1NRU5JO0x0OzA7TDsxRjI5IDAzNDU7Ozs7Tjs7OzsxRjkxOworMUY5QTtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JO0x0OzA7TDsxRjJBIDAzNDU7Ozs7Tjs7OzsxRjkyOworMUY5QjtHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JO0x0OzA7TDsxRjJCIDAzNDU7Ozs7Tjs7OzsxRjkzOworMUY5QztHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQgUFJPU0dFR1JBTU1FTkk7THQ7MDtMOzFGMkMgMDM0NTs7OztOOzs7OzFGOTQ7CisxRjlEO0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUYyRCAwMzQ1Ozs7O047Ozs7MUY5NTsKKzFGOUU7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUYyRSAwMzQ1Ozs7O047Ozs7MUY5NjsKKzFGOUY7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUYyRiAwMzQ1Ozs7O047Ozs7MUY5NzsKKzFGQTA7R1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGNjAgMDM0NTs7OztOOzs7MUZBODs7MUZBOAorMUZBMTtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUY2MSAwMzQ1Ozs7O047OzsxRkE5OzsxRkE5CisxRkEyO0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUY2MiAwMzQ1Ozs7O047OzsxRkFBOzsxRkFBCisxRkEzO0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUY2MyAwMzQ1Ozs7O047OzsxRkFCOzsxRkFCCisxRkE0O0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjY0IDAzNDU7Ozs7Tjs7OzFGQUM7OzFGQUMKKzFGQTU7R1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGNjUgMDM0NTs7OztOOzs7MUZBRDs7MUZBRAorMUZBNjtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGNjYgMDM0NTs7OztOOzs7MUZBRTs7MUZBRQorMUZBNztHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzFGNjcgMDM0NTs7OztOOzs7MUZBRjs7MUZBRgorMUZBODtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUY2OCAwMzQ1Ozs7O047Ozs7MUZBMDsKKzFGQTk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgUFJPU0dFR1JBTU1FTkk7THQ7MDtMOzFGNjkgMDM0NTs7OztOOzs7OzFGQTE7CisxRkFBO0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFZBUklBIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUY2QSAwMzQ1Ozs7O047Ozs7MUZBMjsKKzFGQUI7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5EIFBST1NHRUdSQU1NRU5JO0x0OzA7TDsxRjZCIDAzNDU7Ozs7Tjs7OzsxRkEzOworMUZBQztHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUY2QyAwMzQ1Ozs7O047Ozs7MUZBNDsKKzFGQUQ7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgT1hJQSBBTkQgUFJPU0dFR1JBTU1FTkk7THQ7MDtMOzFGNkQgMDM0NTs7OztOOzs7OzFGQTU7CisxRkFFO0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JIEFORCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MUY2RSAwMzQ1Ozs7O047Ozs7MUZBNjsKKzFGQUY7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkgQU5EIFBST1NHRUdSQU1NRU5JO0x0OzA7TDsxRjZGIDAzNDU7Ozs7Tjs7OzsxRkE3OworMUZCMDtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBWUkFDSFk7TGw7MDtMOzAzQjEgMDMwNjs7OztOOzs7MUZCODs7MUZCOAorMUZCMTtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBNQUNST047TGw7MDtMOzAzQjEgMDMwNDs7OztOOzs7MUZCOTs7MUZCOQorMUZCMjtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUY3MCAwMzQ1Ozs7O047Ozs7OworMUZCMztHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBZUE9HRUdSQU1NRU5JO0xsOzA7TDswM0IxIDAzNDU7Ozs7Tjs7OzFGQkM7OzFGQkMKKzFGQjQ7R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggT1hJQSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MDNBQyAwMzQ1Ozs7O047Ozs7OworMUZCNjtHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQRVJJU1BPTUVOSTtMbDswO0w7MDNCMSAwMzQyOzs7O047Ozs7OworMUZCNztHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQRVJJU1BPTUVOSSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUZCNiAwMzQ1Ozs7O047Ozs7OworMUZCODtHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFZSQUNIWTtMdTswO0w7MDM5MSAwMzA2Ozs7O047Ozs7MUZCMDsKKzFGQjk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBNQUNST047THU7MDtMOzAzOTEgMDMwNDs7OztOOzs7OzFGQjE7CisxRkJBO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggVkFSSUE7THU7MDtMOzAzOTEgMDMwMDs7OztOOzs7OzFGNzA7CisxRkJCO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggT1hJQTtMdTswO0w7MDM4Njs7OztOOzs7OzFGNzE7CisxRkJDO0dSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFJPU0dFR1JBTU1FTkk7THQ7MDtMOzAzOTEgMDM0NTs7OztOOzs7OzFGQjM7CisxRkJEO0dSRUVLIEtPUk9OSVM7U2s7MDtPTjs8Y29tcGF0PiAwMDIwIDAzMTM7Ozs7Tjs7Ozs7CisxRkJFO0dSRUVLIFBST1NHRUdSQU1NRU5JO0xsOzA7TDswM0I5Ozs7O047OzswMzk5OzswMzk5CisxRkJGO0dSRUVLIFBTSUxJO1NrOzA7T047PGNvbXBhdD4gMDAyMCAwMzEzOzs7O047Ozs7OworMUZDMDtHUkVFSyBQRVJJU1BPTUVOSTtTazswO09OOzxjb21wYXQ+IDAwMjAgMDM0Mjs7OztOOzs7OzsKKzFGQzE7R1JFRUsgRElBTFlUSUtBIEFORCBQRVJJU1BPTUVOSTtTazswO09OOzAwQTggMDM0Mjs7OztOOzs7OzsKKzFGQzI7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjc0IDAzNDU7Ozs7Tjs7Ozs7CisxRkMzO0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBZUE9HRUdSQU1NRU5JO0xsOzA7TDswM0I3IDAzNDU7Ozs7Tjs7OzFGQ0M7OzFGQ0MKKzFGQzQ7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzAzQUUgMDM0NTs7OztOOzs7OzsKKzFGQzY7R1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBFUklTUE9NRU5JO0xsOzA7TDswM0I3IDAzNDI7Ozs7Tjs7Ozs7CisxRkM3O0dSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQRVJJU1BPTUVOSSBBTkQgWVBPR0VHUkFNTUVOSTtMbDswO0w7MUZDNiAwMzQ1Ozs7O047Ozs7OworMUZDODtHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggVkFSSUE7THU7MDtMOzAzOTUgMDMwMDs7OztOOzs7OzFGNzI7CisxRkM5O0dSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBPWElBO0x1OzA7TDswMzg4Ozs7O047Ozs7MUY3MzsKKzFGQ0E7R1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggVkFSSUE7THU7MDtMOzAzOTcgMDMwMDs7OztOOzs7OzFGNzQ7CisxRkNCO0dSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIE9YSUE7THU7MDtMOzAzODk7Ozs7Tjs7OzsxRjc1OworMUZDQztHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQUk9TR0VHUkFNTUVOSTtMdDswO0w7MDM5NyAwMzQ1Ozs7O047Ozs7MUZDMzsKKzFGQ0Q7R1JFRUsgUFNJTEkgQU5EIFZBUklBO1NrOzA7T047MUZCRiAwMzAwOzs7O047Ozs7OworMUZDRTtHUkVFSyBQU0lMSSBBTkQgT1hJQTtTazswO09OOzFGQkYgMDMwMTs7OztOOzs7OzsKKzFGQ0Y7R1JFRUsgUFNJTEkgQU5EIFBFUklTUE9NRU5JO1NrOzA7T047MUZCRiAwMzQyOzs7O047Ozs7OworMUZEMDtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFZSQUNIWTtMbDswO0w7MDNCOSAwMzA2Ozs7O047OzsxRkQ4OzsxRkQ4CisxRkQxO0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggTUFDUk9OO0xsOzA7TDswM0I5IDAzMDQ7Ozs7Tjs7OzFGRDk7OzFGRDkKKzFGRDI7R1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EgQU5EIFZBUklBO0xsOzA7TDswM0NBIDAzMDA7Ozs7Tjs7Ozs7CisxRkQzO0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBPWElBO0xsOzA7TDswMzkwOzs7O047Ozs7OworMUZENjtHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFBFUklTUE9NRU5JO0xsOzA7TDswM0I5IDAzNDI7Ozs7Tjs7Ozs7CisxRkQ3O0dSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBQRVJJU1BPTUVOSTtMbDswO0w7MDNDQSAwMzQyOzs7O047Ozs7OworMUZEODtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggVlJBQ0hZO0x1OzA7TDswMzk5IDAzMDY7Ozs7Tjs7OzsxRkQwOworMUZEOTtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggTUFDUk9OO0x1OzA7TDswMzk5IDAzMDQ7Ozs7Tjs7OzsxRkQxOworMUZEQTtHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggVkFSSUE7THU7MDtMOzAzOTkgMDMwMDs7OztOOzs7OzFGNzY7CisxRkRCO0dSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBPWElBO0x1OzA7TDswMzhBOzs7O047Ozs7MUY3NzsKKzFGREQ7R1JFRUsgREFTSUEgQU5EIFZBUklBO1NrOzA7T047MUZGRSAwMzAwOzs7O047Ozs7OworMUZERTtHUkVFSyBEQVNJQSBBTkQgT1hJQTtTazswO09OOzFGRkUgMDMwMTs7OztOOzs7OzsKKzFGREY7R1JFRUsgREFTSUEgQU5EIFBFUklTUE9NRU5JO1NrOzA7T047MUZGRSAwMzQyOzs7O047Ozs7OworMUZFMDtHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFZSQUNIWTtMbDswO0w7MDNDNSAwMzA2Ozs7O047OzsxRkU4OzsxRkU4CisxRkUxO0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggTUFDUk9OO0xsOzA7TDswM0M1IDAzMDQ7Ozs7Tjs7OzFGRTk7OzFGRTkKKzFGRTI7R1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIFZBUklBO0xsOzA7TDswM0NCIDAzMDA7Ozs7Tjs7Ozs7CisxRkUzO0dSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBIEFORCBPWElBO0xsOzA7TDswM0IwOzs7O047Ozs7OworMUZFNDtHUkVFSyBTTUFMTCBMRVRURVIgUkhPIFdJVEggUFNJTEk7TGw7MDtMOzAzQzEgMDMxMzs7OztOOzs7OzsKKzFGRTU7R1JFRUsgU01BTEwgTEVUVEVSIFJITyBXSVRIIERBU0lBO0xsOzA7TDswM0MxIDAzMTQ7Ozs7Tjs7OzFGRUM7OzFGRUMKKzFGRTY7R1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQRVJJU1BPTUVOSTtMbDswO0w7MDNDNSAwMzQyOzs7O047Ozs7OworMUZFNztHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQSBBTkQgUEVSSVNQT01FTkk7TGw7MDtMOzAzQ0IgMDM0Mjs7OztOOzs7OzsKKzFGRTg7R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIFZSQUNIWTtMdTswO0w7MDNBNSAwMzA2Ozs7O047Ozs7MUZFMDsKKzFGRTk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIE1BQ1JPTjtMdTswO0w7MDNBNSAwMzA0Ozs7O047Ozs7MUZFMTsKKzFGRUE7R1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIFZBUklBO0x1OzA7TDswM0E1IDAzMDA7Ozs7Tjs7OzsxRjdBOworMUZFQjtHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggT1hJQTtMdTswO0w7MDM4RTs7OztOOzs7OzFGN0I7CisxRkVDO0dSRUVLIENBUElUQUwgTEVUVEVSIFJITyBXSVRIIERBU0lBO0x1OzA7TDswM0ExIDAzMTQ7Ozs7Tjs7OzsxRkU1OworMUZFRDtHUkVFSyBESUFMWVRJS0EgQU5EIFZBUklBO1NrOzA7T047MDBBOCAwMzAwOzs7O047Ozs7OworMUZFRTtHUkVFSyBESUFMWVRJS0EgQU5EIE9YSUE7U2s7MDtPTjswMzg1Ozs7O047Ozs7OworMUZFRjtHUkVFSyBWQVJJQTtTazswO09OOzAwNjA7Ozs7Tjs7Ozs7CisxRkYyO0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRjdDIDAzNDU7Ozs7Tjs7Ozs7CisxRkYzO0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFlQT0dFR1JBTU1FTkk7TGw7MDtMOzAzQzkgMDM0NTs7OztOOzs7MUZGQzs7MUZGQworMUZGNDtHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBPWElBIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDswM0NFIDAzNDU7Ozs7Tjs7Ozs7CisxRkY2O0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBFUklTUE9NRU5JO0xsOzA7TDswM0M5IDAzNDI7Ozs7Tjs7Ozs7CisxRkY3O0dSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBFUklTUE9NRU5JIEFORCBZUE9HRUdSQU1NRU5JO0xsOzA7TDsxRkY2IDAzNDU7Ozs7Tjs7Ozs7CisxRkY4O0dSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBWQVJJQTtMdTswO0w7MDM5RiAwMzAwOzs7O047Ozs7MUY3ODsKKzFGRjk7R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIE9YSUE7THU7MDtMOzAzOEM7Ozs7Tjs7OzsxRjc5OworMUZGQTtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFZBUklBO0x1OzA7TDswM0E5IDAzMDA7Ozs7Tjs7OzsxRjdDOworMUZGQjtHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIE9YSUE7THU7MDtMOzAzOEY7Ozs7Tjs7OzsxRjdEOworMUZGQztHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBST1NHRUdSQU1NRU5JO0x0OzA7TDswM0E5IDAzNDU7Ozs7Tjs7OzsxRkYzOworMUZGRDtHUkVFSyBPWElBO1NrOzA7T047MDBCNDs7OztOOzs7OzsKKzFGRkU7R1JFRUsgREFTSUE7U2s7MDtPTjs8Y29tcGF0PiAwMDIwIDAzMTQ7Ozs7Tjs7Ozs7CisyMDAwO0VOIFFVQUQ7WnM7MDtXUzsyMDAyOzs7O047Ozs7OworMjAwMTtFTSBRVUFEO1pzOzA7V1M7MjAwMzs7OztOOzs7OzsKKzIwMDI7RU4gU1BBQ0U7WnM7MDtXUzs8Y29tcGF0PiAwMDIwOzs7O047Ozs7OworMjAwMztFTSBTUEFDRTtaczswO1dTOzxjb21wYXQ+IDAwMjA7Ozs7Tjs7Ozs7CisyMDA0O1RIUkVFLVBFUi1FTSBTUEFDRTtaczswO1dTOzxjb21wYXQ+IDAwMjA7Ozs7Tjs7Ozs7CisyMDA1O0ZPVVItUEVSLUVNIFNQQUNFO1pzOzA7V1M7PGNvbXBhdD4gMDAyMDs7OztOOzs7OzsKKzIwMDY7U0lYLVBFUi1FTSBTUEFDRTtaczswO1dTOzxjb21wYXQ+IDAwMjA7Ozs7Tjs7Ozs7CisyMDA3O0ZJR1VSRSBTUEFDRTtaczswO1dTOzxub0JyZWFrPiAwMDIwOzs7O047Ozs7OworMjAwODtQVU5DVFVBVElPTiBTUEFDRTtaczswO1dTOzxjb21wYXQ+IDAwMjA7Ozs7Tjs7Ozs7CisyMDA5O1RISU4gU1BBQ0U7WnM7MDtXUzs8Y29tcGF0PiAwMDIwOzs7O047Ozs7OworMjAwQTtIQUlSIFNQQUNFO1pzOzA7V1M7PGNvbXBhdD4gMDAyMDs7OztOOzs7OzsKKzIwMEI7WkVSTyBXSURUSCBTUEFDRTtaczswO0JOOzs7OztOOzs7OzsKKzIwMEM7WkVSTyBXSURUSCBOT04tSk9JTkVSO0NmOzA7Qk47Ozs7O047Ozs7OworMjAwRDtaRVJPIFdJRFRIIEpPSU5FUjtDZjswO0JOOzs7OztOOzs7OzsKKzIwMEU7TEVGVC1UTy1SSUdIVCBNQVJLO0NmOzA7TDs7Ozs7Tjs7Ozs7CisyMDBGO1JJR0hULVRPLUxFRlQgTUFSSztDZjswO1I7Ozs7O047Ozs7OworMjAxMDtIWVBIRU47UGQ7MDtPTjs7Ozs7Tjs7Ozs7CisyMDExO05PTi1CUkVBS0lORyBIWVBIRU47UGQ7MDtPTjs8bm9CcmVhaz4gMjAxMDs7OztOOzs7OzsKKzIwMTI7RklHVVJFIERBU0g7UGQ7MDtPTjs7Ozs7Tjs7Ozs7CisyMDEzO0VOIERBU0g7UGQ7MDtPTjs7Ozs7Tjs7Ozs7CisyMDE0O0VNIERBU0g7UGQ7MDtPTjs7Ozs7Tjs7Ozs7CisyMDE1O0hPUklaT05UQUwgQkFSO1BkOzA7T047Ozs7O047UVVPVEFUSU9OIERBU0g7Ozs7CisyMDE2O0RPVUJMRSBWRVJUSUNBTCBMSU5FO1BvOzA7T047Ozs7O047RE9VQkxFIFZFUlRJQ0FMIEJBUjs7OzsKKzIwMTc7RE9VQkxFIExPVyBMSU5FO1BvOzA7T047PGNvbXBhdD4gMDAyMCAwMzMzOzs7O047U1BBQ0lORyBET1VCTEUgVU5ERVJTQ09SRTs7OzsKKzIwMTg7TEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUks7UGk7MDtPTjs7Ozs7TjtTSU5HTEUgVFVSTkVEIENPTU1BIFFVT1RBVElPTiBNQVJLOzs7OworMjAxOTtSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUks7UGY7MDtPTjs7Ozs7TjtTSU5HTEUgQ09NTUEgUVVPVEFUSU9OIE1BUks7Ozs7CisyMDFBO1NJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSSztQczswO09OOzs7OztOO0xPVyBTSU5HTEUgQ09NTUEgUVVPVEFUSU9OIE1BUks7Ozs7CisyMDFCO1NJTkdMRSBISUdILVJFVkVSU0VELTkgUVVPVEFUSU9OIE1BUks7UGk7MDtPTjs7Ozs7TjtTSU5HTEUgUkVWRVJTRUQgQ09NTUEgUVVPVEFUSU9OIE1BUks7Ozs7CisyMDFDO0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLO1BpOzA7T047Ozs7O047RE9VQkxFIFRVUk5FRCBDT01NQSBRVU9UQVRJT04gTUFSSzs7OzsKKzIwMUQ7UklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLO1BmOzA7T047Ozs7O047RE9VQkxFIENPTU1BIFFVT1RBVElPTiBNQVJLOzs7OworMjAxRTtET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUks7UHM7MDtPTjs7Ozs7TjtMT1cgRE9VQkxFIENPTU1BIFFVT1RBVElPTiBNQVJLOzs7OworMjAxRjtET1VCTEUgSElHSC1SRVZFUlNFRC05IFFVT1RBVElPTiBNQVJLO1BpOzA7T047Ozs7O047RE9VQkxFIFJFVkVSU0VEIENPTU1BIFFVT1RBVElPTiBNQVJLOzs7OworMjAyMDtEQUdHRVI7UG87MDtPTjs7Ozs7Tjs7Ozs7CisyMDIxO0RPVUJMRSBEQUdHRVI7UG87MDtPTjs7Ozs7Tjs7Ozs7CisyMDIyO0JVTExFVDtQbzswO09OOzs7OztOOzs7OzsKKzIwMjM7VFJJQU5HVUxBUiBCVUxMRVQ7UG87MDtPTjs7Ozs7Tjs7Ozs7CisyMDI0O09ORSBET1QgTEVBREVSO1BvOzA7T047PGNvbXBhdD4gMDAyRTs7OztOOzs7OzsKKzIwMjU7VFdPIERPVCBMRUFERVI7UG87MDtPTjs8Y29tcGF0PiAwMDJFIDAwMkU7Ozs7Tjs7Ozs7CisyMDI2O0hPUklaT05UQUwgRUxMSVBTSVM7UG87MDtPTjs8Y29tcGF0PiAwMDJFIDAwMkUgMDAyRTs7OztOOzs7OzsKKzIwMjc7SFlQSEVOQVRJT04gUE9JTlQ7UG87MDtPTjs7Ozs7Tjs7Ozs7CisyMDI4O0xJTkUgU0VQQVJBVE9SO1psOzA7V1M7Ozs7O047Ozs7OworMjAyOTtQQVJBR1JBUEggU0VQQVJBVE9SO1pwOzA7Qjs7Ozs7Tjs7Ozs7CisyMDJBO0xFRlQtVE8tUklHSFQgRU1CRURESU5HO0NmOzA7TFJFOzs7OztOOzs7OzsKKzIwMkI7UklHSFQtVE8tTEVGVCBFTUJFRERJTkc7Q2Y7MDtSTEU7Ozs7O047Ozs7OworMjAyQztQT1AgRElSRUNUSU9OQUwgRk9STUFUVElORztDZjswO1BERjs7Ozs7Tjs7Ozs7CisyMDJEO0xFRlQtVE8tUklHSFQgT1ZFUlJJREU7Q2Y7MDtMUk87Ozs7O047Ozs7OworMjAyRTtSSUdIVC1UTy1MRUZUIE9WRVJSSURFO0NmOzA7UkxPOzs7OztOOzs7OzsKKzIwMkY7TkFSUk9XIE5PLUJSRUFLIFNQQUNFO1pzOzA7V1M7PG5vQnJlYWs+IDAwMjA7Ozs7Tjs7Ozs7CisyMDMwO1BFUiBNSUxMRSBTSUdOO1BvOzA7RVQ7Ozs7O047Ozs7OworMjAzMTtQRVIgVEVOIFRIT1VTQU5EIFNJR047UG87MDtFVDs7Ozs7Tjs7Ozs7CisyMDMyO1BSSU1FO1BvOzA7RVQ7Ozs7O047Ozs7OworMjAzMztET1VCTEUgUFJJTUU7UG87MDtFVDs8Y29tcGF0PiAyMDMyIDIwMzI7Ozs7Tjs7Ozs7CisyMDM0O1RSSVBMRSBQUklNRTtQbzswO0VUOzxjb21wYXQ+IDIwMzIgMjAzMiAyMDMyOzs7O047Ozs7OworMjAzNTtSRVZFUlNFRCBQUklNRTtQbzswO09OOzs7OztOOzs7OzsKKzIwMzY7UkVWRVJTRUQgRE9VQkxFIFBSSU1FO1BvOzA7T047PGNvbXBhdD4gMjAzNSAyMDM1Ozs7O047Ozs7OworMjAzNztSRVZFUlNFRCBUUklQTEUgUFJJTUU7UG87MDtPTjs8Y29tcGF0PiAyMDM1IDIwMzUgMjAzNTs7OztOOzs7OzsKKzIwMzg7Q0FSRVQ7UG87MDtPTjs7Ozs7Tjs7Ozs7CisyMDM5O1NJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLO1BpOzA7T047Ozs7O1k7TEVGVCBQT0lOVElORyBTSU5HTEUgR1VJTExFTUVUOzs7OworMjAzQTtTSU5HTEUgUklHSFQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUks7UGY7MDtPTjs7Ozs7WTtSSUdIVCBQT0lOVElORyBTSU5HTEUgR1VJTExFTUVUOzs7OworMjAzQjtSRUZFUkVOQ0UgTUFSSztQbzswO09OOzs7OztOOzs7OzsKKzIwM0M7RE9VQkxFIEVYQ0xBTUFUSU9OIE1BUks7UG87MDtPTjs8Y29tcGF0PiAwMDIxIDAwMjE7Ozs7Tjs7Ozs7CisyMDNEO0lOVEVSUk9CQU5HO1BvOzA7T047Ozs7O047Ozs7OworMjAzRTtPVkVSTElORTtQbzswO09OOzxjb21wYXQ+IDAwMjAgMDMwNTs7OztOO1NQQUNJTkcgT1ZFUlNDT1JFOzs7OworMjAzRjtVTkRFUlRJRTtQYzswO09OOzs7OztOOztFbm90aWtvbjs7OworMjA0MDtDSEFSQUNURVIgVElFO1BjOzA7T047Ozs7O047Ozs7OworMjA0MTtDQVJFVCBJTlNFUlRJT04gUE9JTlQ7UG87MDtPTjs7Ozs7Tjs7Ozs7CisyMDQyO0FTVEVSSVNNO1BvOzA7T047Ozs7O047Ozs7OworMjA0MztIWVBIRU4gQlVMTEVUO1BvOzA7T047Ozs7O047Ozs7OworMjA0NDtGUkFDVElPTiBTTEFTSDtTbTswO09OOzs7OztOOzs7OzsKKzIwNDU7TEVGVCBTUVVBUkUgQlJBQ0tFVCBXSVRIIFFVSUxMO1BzOzA7T047Ozs7O1k7Ozs7OworMjA0NjtSSUdIVCBTUVVBUkUgQlJBQ0tFVCBXSVRIIFFVSUxMO1BlOzA7T047Ozs7O1k7Ozs7OworMjA0NztET1VCTEUgUVVFU1RJT04gTUFSSztQbzswO09OOzxjb21wYXQ+IDAwM0YgMDAzRjs7OztOOzs7OzsKKzIwNDg7UVVFU1RJT04gRVhDTEFNQVRJT04gTUFSSztQbzswO09OOzxjb21wYXQ+IDAwM0YgMDAyMTs7OztOOzs7OzsKKzIwNDk7RVhDTEFNQVRJT04gUVVFU1RJT04gTUFSSztQbzswO09OOzxjb21wYXQ+IDAwMjEgMDAzRjs7OztOOzs7OzsKKzIwNEE7VElST05JQU4gU0lHTiBFVDtQbzswO09OOzs7OztOOzs7OzsKKzIwNEI7UkVWRVJTRUQgUElMQ1JPVyBTSUdOO1BvOzA7T047Ozs7O047Ozs7OworMjA0QztCTEFDSyBMRUZUV0FSRFMgQlVMTEVUO1BvOzA7T047Ozs7O047Ozs7OworMjA0RDtCTEFDSyBSSUdIVFdBUkRTIEJVTExFVDtQbzswO09OOzs7OztOOzs7OzsKKzIwNEU7TE9XIEFTVEVSSVNLO1BvOzA7T047Ozs7O047Ozs7OworMjA0RjtSRVZFUlNFRCBTRU1JQ09MT047UG87MDtPTjs7Ozs7Tjs7Ozs7CisyMDUwO0NMT1NFIFVQO1BvOzA7T047Ozs7O047Ozs7OworMjA1MTtUV08gQVNURVJJU0tTIEFMSUdORUQgVkVSVElDQUxMWTtQbzswO09OOzs7OztOOzs7OzsKKzIwNTI7Q09NTUVSQ0lBTCBNSU5VUyBTSUdOO1NtOzA7T047Ozs7O047Ozs7OworMjA1NztRVUFEUlVQTEUgUFJJTUU7UG87MDtPTjs8Y29tcGF0PiAyMDMyIDIwMzIgMjAzMiAyMDMyOzs7O047Ozs7OworMjA1RjtNRURJVU0gTUFUSEVNQVRJQ0FMIFNQQUNFO1pzOzA7V1M7PGNvbXBhdD4gMDAyMDs7OztOOzs7OzsKKzIwNjA7V09SRCBKT0lORVI7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisyMDYxO0ZVTkNUSU9OIEFQUExJQ0FUSU9OO0NmOzA7Qk47Ozs7O047Ozs7OworMjA2MjtJTlZJU0lCTEUgVElNRVM7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisyMDYzO0lOVklTSUJMRSBTRVBBUkFUT1I7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisyMDZBO0lOSElCSVQgU1lNTUVUUklDIFNXQVBQSU5HO0NmOzA7Qk47Ozs7O047Ozs7OworMjA2QjtBQ1RJVkFURSBTWU1NRVRSSUMgU1dBUFBJTkc7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisyMDZDO0lOSElCSVQgQVJBQklDIEZPUk0gU0hBUElORztDZjswO0JOOzs7OztOOzs7OzsKKzIwNkQ7QUNUSVZBVEUgQVJBQklDIEZPUk0gU0hBUElORztDZjswO0JOOzs7OztOOzs7OzsKKzIwNkU7TkFUSU9OQUwgRElHSVQgU0hBUEVTO0NmOzA7Qk47Ozs7O047Ozs7OworMjA2RjtOT01JTkFMIERJR0lUIFNIQVBFUztDZjswO0JOOzs7OztOOzs7OzsKKzIwNzA7U1VQRVJTQ1JJUFQgWkVSTztObzswO0VOOzxzdXBlcj4gMDAzMDswOzA7MDtOO1NVUEVSU0NSSVBUIERJR0lUIFpFUk87Ozs7CisyMDcxO1NVUEVSU0NSSVBUIExBVElOIFNNQUxMIExFVFRFUiBJO0xsOzA7TDs8c3VwZXI+IDAwNjk7Ozs7Tjs7Ozs7CisyMDc0O1NVUEVSU0NSSVBUIEZPVVI7Tm87MDtFTjs8c3VwZXI+IDAwMzQ7NDs0OzQ7TjtTVVBFUlNDUklQVCBESUdJVCBGT1VSOzs7OworMjA3NTtTVVBFUlNDUklQVCBGSVZFO05vOzA7RU47PHN1cGVyPiAwMDM1OzU7NTs1O047U1VQRVJTQ1JJUFQgRElHSVQgRklWRTs7OzsKKzIwNzY7U1VQRVJTQ1JJUFQgU0lYO05vOzA7RU47PHN1cGVyPiAwMDM2OzY7Njs2O047U1VQRVJTQ1JJUFQgRElHSVQgU0lYOzs7OworMjA3NztTVVBFUlNDUklQVCBTRVZFTjtObzswO0VOOzxzdXBlcj4gMDAzNzs3Ozc7NztOO1NVUEVSU0NSSVBUIERJR0lUIFNFVkVOOzs7OworMjA3ODtTVVBFUlNDUklQVCBFSUdIVDtObzswO0VOOzxzdXBlcj4gMDAzODs4Ozg7ODtOO1NVUEVSU0NSSVBUIERJR0lUIEVJR0hUOzs7OworMjA3OTtTVVBFUlNDUklQVCBOSU5FO05vOzA7RU47PHN1cGVyPiAwMDM5Ozk7OTs5O047U1VQRVJTQ1JJUFQgRElHSVQgTklORTs7OzsKKzIwN0E7U1VQRVJTQ1JJUFQgUExVUyBTSUdOO1NtOzA7RVQ7PHN1cGVyPiAwMDJCOzs7O047Ozs7OworMjA3QjtTVVBFUlNDUklQVCBNSU5VUztTbTswO0VUOzxzdXBlcj4gMjIxMjs7OztOO1NVUEVSU0NSSVBUIEhZUEhFTi1NSU5VUzs7OzsKKzIwN0M7U1VQRVJTQ1JJUFQgRVFVQUxTIFNJR047U207MDtPTjs8c3VwZXI+IDAwM0Q7Ozs7Tjs7Ozs7CisyMDdEO1NVUEVSU0NSSVBUIExFRlQgUEFSRU5USEVTSVM7UHM7MDtPTjs8c3VwZXI+IDAwMjg7Ozs7WTtTVVBFUlNDUklQVCBPUEVOSU5HIFBBUkVOVEhFU0lTOzs7OworMjA3RTtTVVBFUlNDUklQVCBSSUdIVCBQQVJFTlRIRVNJUztQZTswO09OOzxzdXBlcj4gMDAyOTs7OztZO1NVUEVSU0NSSVBUIENMT1NJTkcgUEFSRU5USEVTSVM7Ozs7CisyMDdGO1NVUEVSU0NSSVBUIExBVElOIFNNQUxMIExFVFRFUiBOO0xsOzA7TDs8c3VwZXI+IDAwNkU7Ozs7Tjs7Ozs7CisyMDgwO1NVQlNDUklQVCBaRVJPO05vOzA7RU47PHN1Yj4gMDAzMDswOzA7MDtOO1NVQlNDUklQVCBESUdJVCBaRVJPOzs7OworMjA4MTtTVUJTQ1JJUFQgT05FO05vOzA7RU47PHN1Yj4gMDAzMTsxOzE7MTtOO1NVQlNDUklQVCBESUdJVCBPTkU7Ozs7CisyMDgyO1NVQlNDUklQVCBUV087Tm87MDtFTjs8c3ViPiAwMDMyOzI7MjsyO047U1VCU0NSSVBUIERJR0lUIFRXTzs7OzsKKzIwODM7U1VCU0NSSVBUIFRIUkVFO05vOzA7RU47PHN1Yj4gMDAzMzszOzM7MztOO1NVQlNDUklQVCBESUdJVCBUSFJFRTs7OzsKKzIwODQ7U1VCU0NSSVBUIEZPVVI7Tm87MDtFTjs8c3ViPiAwMDM0OzQ7NDs0O047U1VCU0NSSVBUIERJR0lUIEZPVVI7Ozs7CisyMDg1O1NVQlNDUklQVCBGSVZFO05vOzA7RU47PHN1Yj4gMDAzNTs1OzU7NTtOO1NVQlNDUklQVCBESUdJVCBGSVZFOzs7OworMjA4NjtTVUJTQ1JJUFQgU0lYO05vOzA7RU47PHN1Yj4gMDAzNjs2OzY7NjtOO1NVQlNDUklQVCBESUdJVCBTSVg7Ozs7CisyMDg3O1NVQlNDUklQVCBTRVZFTjtObzswO0VOOzxzdWI+IDAwMzc7Nzs3Ozc7TjtTVUJTQ1JJUFQgRElHSVQgU0VWRU47Ozs7CisyMDg4O1NVQlNDUklQVCBFSUdIVDtObzswO0VOOzxzdWI+IDAwMzg7ODs4Ozg7TjtTVUJTQ1JJUFQgRElHSVQgRUlHSFQ7Ozs7CisyMDg5O1NVQlNDUklQVCBOSU5FO05vOzA7RU47PHN1Yj4gMDAzOTs5Ozk7OTtOO1NVQlNDUklQVCBESUdJVCBOSU5FOzs7OworMjA4QTtTVUJTQ1JJUFQgUExVUyBTSUdOO1NtOzA7RVQ7PHN1Yj4gMDAyQjs7OztOOzs7OzsKKzIwOEI7U1VCU0NSSVBUIE1JTlVTO1NtOzA7RVQ7PHN1Yj4gMjIxMjs7OztOO1NVQlNDUklQVCBIWVBIRU4tTUlOVVM7Ozs7CisyMDhDO1NVQlNDUklQVCBFUVVBTFMgU0lHTjtTbTswO09OOzxzdWI+IDAwM0Q7Ozs7Tjs7Ozs7CisyMDhEO1NVQlNDUklQVCBMRUZUIFBBUkVOVEhFU0lTO1BzOzA7T047PHN1Yj4gMDAyODs7OztZO1NVQlNDUklQVCBPUEVOSU5HIFBBUkVOVEhFU0lTOzs7OworMjA4RTtTVUJTQ1JJUFQgUklHSFQgUEFSRU5USEVTSVM7UGU7MDtPTjs8c3ViPiAwMDI5Ozs7O1k7U1VCU0NSSVBUIENMT1NJTkcgUEFSRU5USEVTSVM7Ozs7CisyMEEwO0VVUk8tQ1VSUkVOQ1kgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzIwQTE7Q09MT04gU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzIwQTI7Q1JVWkVJUk8gU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzIwQTM7RlJFTkNIIEZSQU5DIFNJR047U2M7MDtFVDs7Ozs7Tjs7Ozs7CisyMEE0O0xJUkEgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzIwQTU7TUlMTCBTSUdOO1NjOzA7RVQ7Ozs7O047Ozs7OworMjBBNjtOQUlSQSBTSUdOO1NjOzA7RVQ7Ozs7O047Ozs7OworMjBBNztQRVNFVEEgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzIwQTg7UlVQRUUgU0lHTjtTYzswO0VUOzxjb21wYXQ+IDAwNTIgMDA3Mzs7OztOOzs7OzsKKzIwQTk7V09OIFNJR047U2M7MDtFVDs7Ozs7Tjs7Ozs7CisyMEFBO05FVyBTSEVRRUwgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzIwQUI7RE9ORyBTSUdOO1NjOzA7RVQ7Ozs7O047Ozs7OworMjBBQztFVVJPIFNJR047U2M7MDtFVDs7Ozs7Tjs7Ozs7CisyMEFEO0tJUCBTSUdOO1NjOzA7RVQ7Ozs7O047Ozs7OworMjBBRTtUVUdSSUsgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzIwQUY7RFJBQ0hNQSBTSUdOO1NjOzA7RVQ7Ozs7O047Ozs7OworMjBCMDtHRVJNQU4gUEVOTlkgU0lHTjtTYzswO0VUOzs7OztOOzs7OzsKKzIwQjE7UEVTTyBTSUdOO1NjOzA7RVQ7Ozs7O047Ozs7OworMjBEMDtDT01CSU5JTkcgTEVGVCBIQVJQT09OIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgTEVGVCBIQVJQT09OIEFCT1ZFOzs7OworMjBEMTtDT01CSU5JTkcgUklHSFQgSEFSUE9PTiBBQk9WRTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIFJJR0hUIEhBUlBPT04gQUJPVkU7Ozs7CisyMEQyO0NPTUJJTklORyBMT05HIFZFUlRJQ0FMIExJTkUgT1ZFUkxBWTtNbjsxO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBMT05HIFZFUlRJQ0FMIEJBUiBPVkVSTEFZOzs7OworMjBEMztDT01CSU5JTkcgU0hPUlQgVkVSVElDQUwgTElORSBPVkVSTEFZO01uOzE7TlNNOzs7OztOO05PTi1TUEFDSU5HIFNIT1JUIFZFUlRJQ0FMIEJBUiBPVkVSTEFZOzs7OworMjBENDtDT01CSU5JTkcgQU5USUNMT0NLV0lTRSBBUlJPVyBBQk9WRTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIEFOVElDTE9DS1dJU0UgQVJST1cgQUJPVkU7Ozs7CisyMEQ1O0NPTUJJTklORyBDTE9DS1dJU0UgQVJST1cgQUJPVkU7TW47MjMwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBDTE9DS1dJU0UgQVJST1cgQUJPVkU7Ozs7CisyMEQ2O0NPTUJJTklORyBMRUZUIEFSUk9XIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgTEVGVCBBUlJPVyBBQk9WRTs7OzsKKzIwRDc7Q09NQklOSU5HIFJJR0hUIEFSUk9XIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgUklHSFQgQVJST1cgQUJPVkU7Ozs7CisyMEQ4O0NPTUJJTklORyBSSU5HIE9WRVJMQVk7TW47MTtOU007Ozs7O047Tk9OLVNQQUNJTkcgUklORyBPVkVSTEFZOzs7OworMjBEOTtDT01CSU5JTkcgQ0xPQ0tXSVNFIFJJTkcgT1ZFUkxBWTtNbjsxO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBDTE9DS1dJU0UgUklORyBPVkVSTEFZOzs7OworMjBEQTtDT01CSU5JTkcgQU5USUNMT0NLV0lTRSBSSU5HIE9WRVJMQVk7TW47MTtOU007Ozs7O047Tk9OLVNQQUNJTkcgQU5USUNMT0NLV0lTRSBSSU5HIE9WRVJMQVk7Ozs7CisyMERCO0NPTUJJTklORyBUSFJFRSBET1RTIEFCT1ZFO01uOzIzMDtOU007Ozs7O047Tk9OLVNQQUNJTkcgVEhSRUUgRE9UUyBBQk9WRTs7OzsKKzIwREM7Q09NQklOSU5HIEZPVVIgRE9UUyBBQk9WRTtNbjsyMzA7TlNNOzs7OztOO05PTi1TUEFDSU5HIEZPVVIgRE9UUyBBQk9WRTs7OzsKKzIwREQ7Q09NQklOSU5HIEVOQ0xPU0lORyBDSVJDTEU7TWU7MDtOU007Ozs7O047RU5DTE9TSU5HIENJUkNMRTs7OzsKKzIwREU7Q09NQklOSU5HIEVOQ0xPU0lORyBTUVVBUkU7TWU7MDtOU007Ozs7O047RU5DTE9TSU5HIFNRVUFSRTs7OzsKKzIwREY7Q09NQklOSU5HIEVOQ0xPU0lORyBESUFNT05EO01lOzA7TlNNOzs7OztOO0VOQ0xPU0lORyBESUFNT05EOzs7OworMjBFMDtDT01CSU5JTkcgRU5DTE9TSU5HIENJUkNMRSBCQUNLU0xBU0g7TWU7MDtOU007Ozs7O047RU5DTE9TSU5HIENJUkNMRSBTTEFTSDs7OzsKKzIwRTE7Q09NQklOSU5HIExFRlQgUklHSFQgQVJST1cgQUJPVkU7TW47MjMwO05TTTs7Ozs7TjtOT04tU1BBQ0lORyBMRUZUIFJJR0hUIEFSUk9XIEFCT1ZFOzs7OworMjBFMjtDT01CSU5JTkcgRU5DTE9TSU5HIFNDUkVFTjtNZTswO05TTTs7Ozs7Tjs7Ozs7CisyMEUzO0NPTUJJTklORyBFTkNMT1NJTkcgS0VZQ0FQO01lOzA7TlNNOzs7OztOOzs7OzsKKzIwRTQ7Q09NQklOSU5HIEVOQ0xPU0lORyBVUFdBUkQgUE9JTlRJTkcgVFJJQU5HTEU7TWU7MDtOU007Ozs7O047Ozs7OworMjBFNTtDT01CSU5JTkcgUkVWRVJTRSBTT0xJRFVTIE9WRVJMQVk7TW47MTtOU007Ozs7O047Ozs7OworMjBFNjtDT01CSU5JTkcgRE9VQkxFIFZFUlRJQ0FMIFNUUk9LRSBPVkVSTEFZO01uOzE7TlNNOzs7OztOOzs7OzsKKzIwRTc7Q09NQklOSU5HIEFOTlVJVFkgU1lNQk9MO01uOzIzMDtOU007Ozs7O047Ozs7OworMjBFODtDT01CSU5JTkcgVFJJUExFIFVOREVSRE9UO01uOzIyMDtOU007Ozs7O047Ozs7OworMjBFOTtDT01CSU5JTkcgV0lERSBCUklER0UgQUJPVkU7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CisyMEVBO0NPTUJJTklORyBMRUZUV0FSRFMgQVJST1cgT1ZFUkxBWTtNbjsxO05TTTs7Ozs7Tjs7Ozs7CisyMTAwO0FDQ09VTlQgT0Y7U287MDtPTjs8Y29tcGF0PiAwMDYxIDAwMkYgMDA2Mzs7OztOOzs7OzsKKzIxMDE7QUREUkVTU0VEIFRPIFRIRSBTVUJKRUNUO1NvOzA7T047PGNvbXBhdD4gMDA2MSAwMDJGIDAwNzM7Ozs7Tjs7Ozs7CisyMTAyO0RPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBDO0x1OzA7TDs8Zm9udD4gMDA0Mzs7OztOO0RPVUJMRS1TVFJVQ0sgQzs7OzsKKzIxMDM7REVHUkVFIENFTFNJVVM7U287MDtPTjs8Y29tcGF0PiAwMEIwIDAwNDM7Ozs7TjtERUdSRUVTIENFTlRJR1JBREU7Ozs7CisyMTA0O0NFTlRSRSBMSU5FIFNZTUJPTDtTbzswO09OOzs7OztOO0MgTCBTWU1CT0w7Ozs7CisyMTA1O0NBUkUgT0Y7U287MDtPTjs8Y29tcGF0PiAwMDYzIDAwMkYgMDA2Rjs7OztOOzs7OzsKKzIxMDY7Q0FEQSBVTkE7U287MDtPTjs8Y29tcGF0PiAwMDYzIDAwMkYgMDA3NTs7OztOOzs7OzsKKzIxMDc7RVVMRVIgQ09OU1RBTlQ7THU7MDtMOzxjb21wYXQ+IDAxOTA7Ozs7TjtFVUxFUlM7Ozs7CisyMTA4O1NDUlVQTEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMTA5O0RFR1JFRSBGQUhSRU5IRUlUO1NvOzA7T047PGNvbXBhdD4gMDBCMCAwMDQ2Ozs7O047REVHUkVFUyBGQUhSRU5IRUlUOzs7OworMjEwQTtTQ1JJUFQgU01BTEwgRztMbDswO0w7PGZvbnQ+IDAwNjc7Ozs7Tjs7Ozs7CisyMTBCO1NDUklQVCBDQVBJVEFMIEg7THU7MDtMOzxmb250PiAwMDQ4Ozs7O047U0NSSVBUIEg7Ozs7CisyMTBDO0JMQUNLLUxFVFRFUiBDQVBJVEFMIEg7THU7MDtMOzxmb250PiAwMDQ4Ozs7O047QkxBQ0stTEVUVEVSIEg7Ozs7CisyMTBEO0RPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBIO0x1OzA7TDs8Zm9udD4gMDA0ODs7OztOO0RPVUJMRS1TVFJVQ0sgSDs7OzsKKzIxMEU7UExBTkNLIENPTlNUQU5UO0xsOzA7TDs8Zm9udD4gMDA2ODs7OztOOzs7OzsKKzIxMEY7UExBTkNLIENPTlNUQU5UIE9WRVIgVFdPIFBJO0xsOzA7TDs8Zm9udD4gMDEyNzs7OztOO1BMQU5DSyBDT05TVEFOVCBPVkVSIDIgUEk7Ozs7CisyMTEwO1NDUklQVCBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047U0NSSVBUIEk7Ozs7CisyMTExO0JMQUNLLUxFVFRFUiBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047QkxBQ0stTEVUVEVSIEk7Ozs7CisyMTEyO1NDUklQVCBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047U0NSSVBUIEw7Ozs7CisyMTEzO1NDUklQVCBTTUFMTCBMO0xsOzA7TDs8Zm9udD4gMDA2Qzs7OztOOzs7OzsKKzIxMTQ7TCBCIEJBUiBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMTE1O0RPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBOO0x1OzA7TDs8Zm9udD4gMDA0RTs7OztOO0RPVUJMRS1TVFJVQ0sgTjs7OzsKKzIxMTY7TlVNRVJPIFNJR047U287MDtPTjs8Y29tcGF0PiAwMDRFIDAwNkY7Ozs7TjtOVU1FUk87Ozs7CisyMTE3O1NPVU5EIFJFQ09SRElORyBDT1BZUklHSFQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMTE4O1NDUklQVCBDQVBJVEFMIFA7U287MDtPTjs7Ozs7TjtTQ1JJUFQgUDs7OzsKKzIxMTk7RE9VQkxFLVNUUlVDSyBDQVBJVEFMIFA7THU7MDtMOzxmb250PiAwMDUwOzs7O047RE9VQkxFLVNUUlVDSyBQOzs7OworMjExQTtET1VCTEUtU1RSVUNLIENBUElUQUwgUTtMdTswO0w7PGZvbnQ+IDAwNTE7Ozs7TjtET1VCTEUtU1RSVUNLIFE7Ozs7CisyMTFCO1NDUklQVCBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047U0NSSVBUIFI7Ozs7CisyMTFDO0JMQUNLLUxFVFRFUiBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047QkxBQ0stTEVUVEVSIFI7Ozs7CisyMTFEO0RPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBSO0x1OzA7TDs8Zm9udD4gMDA1Mjs7OztOO0RPVUJMRS1TVFJVQ0sgUjs7OzsKKzIxMUU7UFJFU0NSSVBUSU9OIFRBS0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMTFGO1JFU1BPTlNFO1NvOzA7T047Ozs7O047Ozs7OworMjEyMDtTRVJWSUNFIE1BUks7U287MDtPTjs8c3VwZXI+IDAwNTMgMDA0RDs7OztOOzs7OzsKKzIxMjE7VEVMRVBIT05FIFNJR047U287MDtPTjs8Y29tcGF0PiAwMDU0IDAwNDUgMDA0Qzs7OztOO1QgRSBMIFNZTUJPTDs7OzsKKzIxMjI7VFJBREUgTUFSSyBTSUdOO1NvOzA7T047PHN1cGVyPiAwMDU0IDAwNEQ7Ozs7TjtUUkFERU1BUks7Ozs7CisyMTIzO1ZFUlNJQ0xFO1NvOzA7T047Ozs7O047Ozs7OworMjEyNDtET1VCTEUtU1RSVUNLIENBUElUQUwgWjtMdTswO0w7PGZvbnQ+IDAwNUE7Ozs7TjtET1VCTEUtU1RSVUNLIFo7Ozs7CisyMTI1O09VTkNFIFNJR047U287MDtPTjs7Ozs7TjtPVU5DRTs7OzsKKzIxMjY7T0hNIFNJR047THU7MDtMOzAzQTk7Ozs7TjtPSE07OzswM0M5OworMjEyNztJTlZFUlRFRCBPSE0gU0lHTjtTbzswO09OOzs7OztOO01ITzs7OzsKKzIxMjg7QkxBQ0stTEVUVEVSIENBUElUQUwgWjtMdTswO0w7PGZvbnQ+IDAwNUE7Ozs7TjtCTEFDSy1MRVRURVIgWjs7OzsKKzIxMjk7VFVSTkVEIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBO1NvOzA7T047Ozs7O047Ozs7OworMjEyQTtLRUxWSU4gU0lHTjtMdTswO0w7MDA0Qjs7OztOO0RFR1JFRVMgS0VMVklOOzs7MDA2QjsKKzIxMkI7QU5HU1RST00gU0lHTjtMdTswO0w7MDBDNTs7OztOO0FOR1NUUk9NIFVOSVQ7OzswMEU1OworMjEyQztTQ1JJUFQgQ0FQSVRBTCBCO0x1OzA7TDs8Zm9udD4gMDA0Mjs7OztOO1NDUklQVCBCOzs7OworMjEyRDtCTEFDSy1MRVRURVIgQ0FQSVRBTCBDO0x1OzA7TDs8Zm9udD4gMDA0Mzs7OztOO0JMQUNLLUxFVFRFUiBDOzs7OworMjEyRTtFU1RJTUFURUQgU1lNQk9MO1NvOzA7RVQ7Ozs7O047Ozs7OworMjEyRjtTQ1JJUFQgU01BTEwgRTtMbDswO0w7PGZvbnQ+IDAwNjU7Ozs7Tjs7Ozs7CisyMTMwO1NDUklQVCBDQVBJVEFMIEU7THU7MDtMOzxmb250PiAwMDQ1Ozs7O047U0NSSVBUIEU7Ozs7CisyMTMxO1NDUklQVCBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047U0NSSVBUIEY7Ozs7CisyMTMyO1RVUk5FRCBDQVBJVEFMIEY7U287MDtPTjs7Ozs7TjtUVVJORUQgRjs7OzsKKzIxMzM7U0NSSVBUIENBUElUQUwgTTtMdTswO0w7PGZvbnQ+IDAwNEQ7Ozs7TjtTQ1JJUFQgTTs7OzsKKzIxMzQ7U0NSSVBUIFNNQUxMIE87TGw7MDtMOzxmb250PiAwMDZGOzs7O047Ozs7OworMjEzNTtBTEVGIFNZTUJPTDtMbzswO0w7PGNvbXBhdD4gMDVEMDs7OztOO0ZJUlNUIFRSQU5TRklOSVRFIENBUkRJTkFMOzs7OworMjEzNjtCRVQgU1lNQk9MO0xvOzA7TDs8Y29tcGF0PiAwNUQxOzs7O047U0VDT05EIFRSQU5TRklOSVRFIENBUkRJTkFMOzs7OworMjEzNztHSU1FTCBTWU1CT0w7TG87MDtMOzxjb21wYXQ+IDA1RDI7Ozs7TjtUSElSRCBUUkFOU0ZJTklURSBDQVJESU5BTDs7OzsKKzIxMzg7REFMRVQgU1lNQk9MO0xvOzA7TDs8Y29tcGF0PiAwNUQzOzs7O047Rk9VUlRIIFRSQU5TRklOSVRFIENBUkRJTkFMOzs7OworMjEzOTtJTkZPUk1BVElPTiBTT1VSQ0U7TGw7MDtMOzxmb250PiAwMDY5Ozs7O047Ozs7OworMjEzQTtST1RBVEVEIENBUElUQUwgUTtTbzswO09OOzs7OztOOzs7OzsKKzIxM0Q7RE9VQkxFLVNUUlVDSyBTTUFMTCBHQU1NQTtMbDswO0w7PGZvbnQ+IDAzQjM7Ozs7Tjs7Ozs7CisyMTNFO0RPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBHQU1NQTtMdTswO0w7PGZvbnQ+IDAzOTM7Ozs7Tjs7Ozs7CisyMTNGO0RPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBQSTtMdTswO0w7PGZvbnQ+IDAzQTA7Ozs7Tjs7Ozs7CisyMTQwO0RPVUJMRS1TVFJVQ0sgTi1BUlkgU1VNTUFUSU9OO1NtOzA7T047PGZvbnQ+IDIyMTE7Ozs7WTs7Ozs7CisyMTQxO1RVUk5FRCBTQU5TLVNFUklGIENBUElUQUwgRztTbTswO09OOzs7OztOOzs7OzsKKzIxNDI7VFVSTkVEIFNBTlMtU0VSSUYgQ0FQSVRBTCBMO1NtOzA7T047Ozs7O047Ozs7OworMjE0MztSRVZFUlNFRCBTQU5TLVNFUklGIENBUElUQUwgTDtTbTswO09OOzs7OztOOzs7OzsKKzIxNDQ7VFVSTkVEIFNBTlMtU0VSSUYgQ0FQSVRBTCBZO1NtOzA7T047Ozs7O047Ozs7OworMjE0NTtET1VCTEUtU1RSVUNLIElUQUxJQyBDQVBJVEFMIEQ7THU7MDtMOzxmb250PiAwMDQ0Ozs7O047Ozs7OworMjE0NjtET1VCTEUtU1RSVUNLIElUQUxJQyBTTUFMTCBEO0xsOzA7TDs8Zm9udD4gMDA2NDs7OztOOzs7OzsKKzIxNDc7RE9VQkxFLVNUUlVDSyBJVEFMSUMgU01BTEwgRTtMbDswO0w7PGZvbnQ+IDAwNjU7Ozs7Tjs7Ozs7CisyMTQ4O0RPVUJMRS1TVFJVQ0sgSVRBTElDIFNNQUxMIEk7TGw7MDtMOzxmb250PiAwMDY5Ozs7O047Ozs7OworMjE0OTtET1VCTEUtU1RSVUNLIElUQUxJQyBTTUFMTCBKO0xsOzA7TDs8Zm9udD4gMDA2QTs7OztOOzs7OzsKKzIxNEE7UFJPUEVSVFkgTElORTtTbzswO09OOzs7OztOOzs7OzsKKzIxNEI7VFVSTkVEIEFNUEVSU0FORDtTbTswO09OOzs7OztOOzs7OzsKKzIxNTM7VlVMR0FSIEZSQUNUSU9OIE9ORSBUSElSRDtObzswO09OOzxmcmFjdGlvbj4gMDAzMSAyMDQ0IDAwMzM7OzsxLzM7TjtGUkFDVElPTiBPTkUgVEhJUkQ7Ozs7CisyMTU0O1ZVTEdBUiBGUkFDVElPTiBUV08gVEhJUkRTO05vOzA7T047PGZyYWN0aW9uPiAwMDMyIDIwNDQgMDAzMzs7OzIvMztOO0ZSQUNUSU9OIFRXTyBUSElSRFM7Ozs7CisyMTU1O1ZVTEdBUiBGUkFDVElPTiBPTkUgRklGVEg7Tm87MDtPTjs8ZnJhY3Rpb24+IDAwMzEgMjA0NCAwMDM1Ozs7MS81O047RlJBQ1RJT04gT05FIEZJRlRIOzs7OworMjE1NjtWVUxHQVIgRlJBQ1RJT04gVFdPIEZJRlRIUztObzswO09OOzxmcmFjdGlvbj4gMDAzMiAyMDQ0IDAwMzU7OzsyLzU7TjtGUkFDVElPTiBUV08gRklGVEhTOzs7OworMjE1NztWVUxHQVIgRlJBQ1RJT04gVEhSRUUgRklGVEhTO05vOzA7T047PGZyYWN0aW9uPiAwMDMzIDIwNDQgMDAzNTs7OzMvNTtOO0ZSQUNUSU9OIFRIUkVFIEZJRlRIUzs7OzsKKzIxNTg7VlVMR0FSIEZSQUNUSU9OIEZPVVIgRklGVEhTO05vOzA7T047PGZyYWN0aW9uPiAwMDM0IDIwNDQgMDAzNTs7OzQvNTtOO0ZSQUNUSU9OIEZPVVIgRklGVEhTOzs7OworMjE1OTtWVUxHQVIgRlJBQ1RJT04gT05FIFNJWFRIO05vOzA7T047PGZyYWN0aW9uPiAwMDMxIDIwNDQgMDAzNjs7OzEvNjtOO0ZSQUNUSU9OIE9ORSBTSVhUSDs7OzsKKzIxNUE7VlVMR0FSIEZSQUNUSU9OIEZJVkUgU0lYVEhTO05vOzA7T047PGZyYWN0aW9uPiAwMDM1IDIwNDQgMDAzNjs7OzUvNjtOO0ZSQUNUSU9OIEZJVkUgU0lYVEhTOzs7OworMjE1QjtWVUxHQVIgRlJBQ1RJT04gT05FIEVJR0hUSDtObzswO09OOzxmcmFjdGlvbj4gMDAzMSAyMDQ0IDAwMzg7OzsxLzg7TjtGUkFDVElPTiBPTkUgRUlHSFRIOzs7OworMjE1QztWVUxHQVIgRlJBQ1RJT04gVEhSRUUgRUlHSFRIUztObzswO09OOzxmcmFjdGlvbj4gMDAzMyAyMDQ0IDAwMzg7OzszLzg7TjtGUkFDVElPTiBUSFJFRSBFSUdIVEhTOzs7OworMjE1RDtWVUxHQVIgRlJBQ1RJT04gRklWRSBFSUdIVEhTO05vOzA7T047PGZyYWN0aW9uPiAwMDM1IDIwNDQgMDAzODs7OzUvODtOO0ZSQUNUSU9OIEZJVkUgRUlHSFRIUzs7OzsKKzIxNUU7VlVMR0FSIEZSQUNUSU9OIFNFVkVOIEVJR0hUSFM7Tm87MDtPTjs8ZnJhY3Rpb24+IDAwMzcgMjA0NCAwMDM4Ozs7Ny84O047RlJBQ1RJT04gU0VWRU4gRUlHSFRIUzs7OzsKKzIxNUY7RlJBQ1RJT04gTlVNRVJBVE9SIE9ORTtObzswO09OOzxmcmFjdGlvbj4gMDAzMSAyMDQ0Ozs7MTtOOzs7OzsKKzIxNjA7Uk9NQU4gTlVNRVJBTCBPTkU7Tmw7MDtMOzxjb21wYXQ+IDAwNDk7OzsxO047Ozs7MjE3MDsKKzIxNjE7Uk9NQU4gTlVNRVJBTCBUV087Tmw7MDtMOzxjb21wYXQ+IDAwNDkgMDA0OTs7OzI7Tjs7OzsyMTcxOworMjE2MjtST01BTiBOVU1FUkFMIFRIUkVFO05sOzA7TDs8Y29tcGF0PiAwMDQ5IDAwNDkgMDA0OTs7OzM7Tjs7OzsyMTcyOworMjE2MztST01BTiBOVU1FUkFMIEZPVVI7Tmw7MDtMOzxjb21wYXQ+IDAwNDkgMDA1Njs7OzQ7Tjs7OzsyMTczOworMjE2NDtST01BTiBOVU1FUkFMIEZJVkU7Tmw7MDtMOzxjb21wYXQ+IDAwNTY7Ozs1O047Ozs7MjE3NDsKKzIxNjU7Uk9NQU4gTlVNRVJBTCBTSVg7Tmw7MDtMOzxjb21wYXQ+IDAwNTYgMDA0OTs7OzY7Tjs7OzsyMTc1OworMjE2NjtST01BTiBOVU1FUkFMIFNFVkVOO05sOzA7TDs8Y29tcGF0PiAwMDU2IDAwNDkgMDA0OTs7Ozc7Tjs7OzsyMTc2OworMjE2NztST01BTiBOVU1FUkFMIEVJR0hUO05sOzA7TDs8Y29tcGF0PiAwMDU2IDAwNDkgMDA0OSAwMDQ5Ozs7ODtOOzs7OzIxNzc7CisyMTY4O1JPTUFOIE5VTUVSQUwgTklORTtObDswO0w7PGNvbXBhdD4gMDA0OSAwMDU4Ozs7OTtOOzs7OzIxNzg7CisyMTY5O1JPTUFOIE5VTUVSQUwgVEVOO05sOzA7TDs8Y29tcGF0PiAwMDU4Ozs7MTA7Tjs7OzsyMTc5OworMjE2QTtST01BTiBOVU1FUkFMIEVMRVZFTjtObDswO0w7PGNvbXBhdD4gMDA1OCAwMDQ5Ozs7MTE7Tjs7OzsyMTdBOworMjE2QjtST01BTiBOVU1FUkFMIFRXRUxWRTtObDswO0w7PGNvbXBhdD4gMDA1OCAwMDQ5IDAwNDk7OzsxMjtOOzs7OzIxN0I7CisyMTZDO1JPTUFOIE5VTUVSQUwgRklGVFk7Tmw7MDtMOzxjb21wYXQ+IDAwNEM7Ozs1MDtOOzs7OzIxN0M7CisyMTZEO1JPTUFOIE5VTUVSQUwgT05FIEhVTkRSRUQ7Tmw7MDtMOzxjb21wYXQ+IDAwNDM7OzsxMDA7Tjs7OzsyMTdEOworMjE2RTtST01BTiBOVU1FUkFMIEZJVkUgSFVORFJFRDtObDswO0w7PGNvbXBhdD4gMDA0NDs7OzUwMDtOOzs7OzIxN0U7CisyMTZGO1JPTUFOIE5VTUVSQUwgT05FIFRIT1VTQU5EO05sOzA7TDs8Y29tcGF0PiAwMDREOzs7MTAwMDtOOzs7OzIxN0Y7CisyMTcwO1NNQUxMIFJPTUFOIE5VTUVSQUwgT05FO05sOzA7TDs8Y29tcGF0PiAwMDY5Ozs7MTtOOzs7MjE2MDs7MjE2MAorMjE3MTtTTUFMTCBST01BTiBOVU1FUkFMIFRXTztObDswO0w7PGNvbXBhdD4gMDA2OSAwMDY5Ozs7MjtOOzs7MjE2MTs7MjE2MQorMjE3MjtTTUFMTCBST01BTiBOVU1FUkFMIFRIUkVFO05sOzA7TDs8Y29tcGF0PiAwMDY5IDAwNjkgMDA2OTs7OzM7Tjs7OzIxNjI7OzIxNjIKKzIxNzM7U01BTEwgUk9NQU4gTlVNRVJBTCBGT1VSO05sOzA7TDs8Y29tcGF0PiAwMDY5IDAwNzY7Ozs0O047OzsyMTYzOzsyMTYzCisyMTc0O1NNQUxMIFJPTUFOIE5VTUVSQUwgRklWRTtObDswO0w7PGNvbXBhdD4gMDA3Njs7OzU7Tjs7OzIxNjQ7OzIxNjQKKzIxNzU7U01BTEwgUk9NQU4gTlVNRVJBTCBTSVg7Tmw7MDtMOzxjb21wYXQ+IDAwNzYgMDA2OTs7OzY7Tjs7OzIxNjU7OzIxNjUKKzIxNzY7U01BTEwgUk9NQU4gTlVNRVJBTCBTRVZFTjtObDswO0w7PGNvbXBhdD4gMDA3NiAwMDY5IDAwNjk7Ozs3O047OzsyMTY2OzsyMTY2CisyMTc3O1NNQUxMIFJPTUFOIE5VTUVSQUwgRUlHSFQ7Tmw7MDtMOzxjb21wYXQ+IDAwNzYgMDA2OSAwMDY5IDAwNjk7Ozs4O047OzsyMTY3OzsyMTY3CisyMTc4O1NNQUxMIFJPTUFOIE5VTUVSQUwgTklORTtObDswO0w7PGNvbXBhdD4gMDA2OSAwMDc4Ozs7OTtOOzs7MjE2ODs7MjE2OAorMjE3OTtTTUFMTCBST01BTiBOVU1FUkFMIFRFTjtObDswO0w7PGNvbXBhdD4gMDA3ODs7OzEwO047OzsyMTY5OzsyMTY5CisyMTdBO1NNQUxMIFJPTUFOIE5VTUVSQUwgRUxFVkVOO05sOzA7TDs8Y29tcGF0PiAwMDc4IDAwNjk7OzsxMTtOOzs7MjE2QTs7MjE2QQorMjE3QjtTTUFMTCBST01BTiBOVU1FUkFMIFRXRUxWRTtObDswO0w7PGNvbXBhdD4gMDA3OCAwMDY5IDAwNjk7OzsxMjtOOzs7MjE2Qjs7MjE2QgorMjE3QztTTUFMTCBST01BTiBOVU1FUkFMIEZJRlRZO05sOzA7TDs8Y29tcGF0PiAwMDZDOzs7NTA7Tjs7OzIxNkM7OzIxNkMKKzIxN0Q7U01BTEwgUk9NQU4gTlVNRVJBTCBPTkUgSFVORFJFRDtObDswO0w7PGNvbXBhdD4gMDA2Mzs7OzEwMDtOOzs7MjE2RDs7MjE2RAorMjE3RTtTTUFMTCBST01BTiBOVU1FUkFMIEZJVkUgSFVORFJFRDtObDswO0w7PGNvbXBhdD4gMDA2NDs7OzUwMDtOOzs7MjE2RTs7MjE2RQorMjE3RjtTTUFMTCBST01BTiBOVU1FUkFMIE9ORSBUSE9VU0FORDtObDswO0w7PGNvbXBhdD4gMDA2RDs7OzEwMDA7Tjs7OzIxNkY7OzIxNkYKKzIxODA7Uk9NQU4gTlVNRVJBTCBPTkUgVEhPVVNBTkQgQyBEO05sOzA7TDs7OzsxMDAwO047Ozs7OworMjE4MTtST01BTiBOVU1FUkFMIEZJVkUgVEhPVVNBTkQ7Tmw7MDtMOzs7OzUwMDA7Tjs7Ozs7CisyMTgyO1JPTUFOIE5VTUVSQUwgVEVOIFRIT1VTQU5EO05sOzA7TDs7OzsxMDAwMDtOOzs7OzsKKzIxODM7Uk9NQU4gTlVNRVJBTCBSRVZFUlNFRCBPTkUgSFVORFJFRDtObDswO0w7Ozs7O047Ozs7OworMjE5MDtMRUZUV0FSRFMgQVJST1c7U207MDtPTjs7Ozs7TjtMRUZUIEFSUk9XOzs7OworMjE5MTtVUFdBUkRTIEFSUk9XO1NtOzA7T047Ozs7O047VVAgQVJST1c7Ozs7CisyMTkyO1JJR0hUV0FSRFMgQVJST1c7U207MDtPTjs7Ozs7TjtSSUdIVCBBUlJPVzs7OzsKKzIxOTM7RE9XTldBUkRTIEFSUk9XO1NtOzA7T047Ozs7O047RE9XTiBBUlJPVzs7OzsKKzIxOTQ7TEVGVCBSSUdIVCBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzIxOTU7VVAgRE9XTiBBUlJPVztTbzswO09OOzs7OztOOzs7OzsKKzIxOTY7Tk9SVEggV0VTVCBBUlJPVztTbzswO09OOzs7OztOO1VQUEVSIExFRlQgQVJST1c7Ozs7CisyMTk3O05PUlRIIEVBU1QgQVJST1c7U287MDtPTjs7Ozs7TjtVUFBFUiBSSUdIVCBBUlJPVzs7OzsKKzIxOTg7U09VVEggRUFTVCBBUlJPVztTbzswO09OOzs7OztOO0xPV0VSIFJJR0hUIEFSUk9XOzs7OworMjE5OTtTT1VUSCBXRVNUIEFSUk9XO1NvOzA7T047Ozs7O047TE9XRVIgTEVGVCBBUlJPVzs7OzsKKzIxOUE7TEVGVFdBUkRTIEFSUk9XIFdJVEggU1RST0tFO1NtOzA7T047MjE5MCAwMzM4Ozs7O047TEVGVCBBUlJPVyBXSVRIIFNUUk9LRTs7OzsKKzIxOUI7UklHSFRXQVJEUyBBUlJPVyBXSVRIIFNUUk9LRTtTbTswO09OOzIxOTIgMDMzODs7OztOO1JJR0hUIEFSUk9XIFdJVEggU1RST0tFOzs7OworMjE5QztMRUZUV0FSRFMgV0FWRSBBUlJPVztTbzswO09OOzs7OztOO0xFRlQgV0FWRSBBUlJPVzs7OzsKKzIxOUQ7UklHSFRXQVJEUyBXQVZFIEFSUk9XO1NvOzA7T047Ozs7O047UklHSFQgV0FWRSBBUlJPVzs7OzsKKzIxOUU7TEVGVFdBUkRTIFRXTyBIRUFERUQgQVJST1c7U287MDtPTjs7Ozs7TjtMRUZUIFRXTyBIRUFERUQgQVJST1c7Ozs7CisyMTlGO1VQV0FSRFMgVFdPIEhFQURFRCBBUlJPVztTbzswO09OOzs7OztOO1VQIFRXTyBIRUFERUQgQVJST1c7Ozs7CisyMUEwO1JJR0hUV0FSRFMgVFdPIEhFQURFRCBBUlJPVztTbTswO09OOzs7OztOO1JJR0hUIFRXTyBIRUFERUQgQVJST1c7Ozs7CisyMUExO0RPV05XQVJEUyBUV08gSEVBREVEIEFSUk9XO1NvOzA7T047Ozs7O047RE9XTiBUV08gSEVBREVEIEFSUk9XOzs7OworMjFBMjtMRUZUV0FSRFMgQVJST1cgV0lUSCBUQUlMO1NvOzA7T047Ozs7O047TEVGVCBBUlJPVyBXSVRIIFRBSUw7Ozs7CisyMUEzO1JJR0hUV0FSRFMgQVJST1cgV0lUSCBUQUlMO1NtOzA7T047Ozs7O047UklHSFQgQVJST1cgV0lUSCBUQUlMOzs7OworMjFBNDtMRUZUV0FSRFMgQVJST1cgRlJPTSBCQVI7U287MDtPTjs7Ozs7TjtMRUZUIEFSUk9XIEZST00gQkFSOzs7OworMjFBNTtVUFdBUkRTIEFSUk9XIEZST00gQkFSO1NvOzA7T047Ozs7O047VVAgQVJST1cgRlJPTSBCQVI7Ozs7CisyMUE2O1JJR0hUV0FSRFMgQVJST1cgRlJPTSBCQVI7U207MDtPTjs7Ozs7TjtSSUdIVCBBUlJPVyBGUk9NIEJBUjs7OzsKKzIxQTc7RE9XTldBUkRTIEFSUk9XIEZST00gQkFSO1NvOzA7T047Ozs7O047RE9XTiBBUlJPVyBGUk9NIEJBUjs7OzsKKzIxQTg7VVAgRE9XTiBBUlJPVyBXSVRIIEJBU0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMUE5O0xFRlRXQVJEUyBBUlJPVyBXSVRIIEhPT0s7U287MDtPTjs7Ozs7TjtMRUZUIEFSUk9XIFdJVEggSE9PSzs7OzsKKzIxQUE7UklHSFRXQVJEUyBBUlJPVyBXSVRIIEhPT0s7U287MDtPTjs7Ozs7TjtSSUdIVCBBUlJPVyBXSVRIIEhPT0s7Ozs7CisyMUFCO0xFRlRXQVJEUyBBUlJPVyBXSVRIIExPT1A7U287MDtPTjs7Ozs7TjtMRUZUIEFSUk9XIFdJVEggTE9PUDs7OzsKKzIxQUM7UklHSFRXQVJEUyBBUlJPVyBXSVRIIExPT1A7U287MDtPTjs7Ozs7TjtSSUdIVCBBUlJPVyBXSVRIIExPT1A7Ozs7CisyMUFEO0xFRlQgUklHSFQgV0FWRSBBUlJPVztTbzswO09OOzs7OztOOzs7OzsKKzIxQUU7TEVGVCBSSUdIVCBBUlJPVyBXSVRIIFNUUk9LRTtTbTswO09OOzIxOTQgMDMzODs7OztOOzs7OzsKKzIxQUY7RE9XTldBUkRTIFpJR1pBRyBBUlJPVztTbzswO09OOzs7OztOO0RPV04gWklHWkFHIEFSUk9XOzs7OworMjFCMDtVUFdBUkRTIEFSUk9XIFdJVEggVElQIExFRlRXQVJEUztTbzswO09OOzs7OztOO1VQIEFSUk9XIFdJVEggVElQIExFRlQ7Ozs7CisyMUIxO1VQV0FSRFMgQVJST1cgV0lUSCBUSVAgUklHSFRXQVJEUztTbzswO09OOzs7OztOO1VQIEFSUk9XIFdJVEggVElQIFJJR0hUOzs7OworMjFCMjtET1dOV0FSRFMgQVJST1cgV0lUSCBUSVAgTEVGVFdBUkRTO1NvOzA7T047Ozs7O047RE9XTiBBUlJPVyBXSVRIIFRJUCBMRUZUOzs7OworMjFCMztET1dOV0FSRFMgQVJST1cgV0lUSCBUSVAgUklHSFRXQVJEUztTbzswO09OOzs7OztOO0RPV04gQVJST1cgV0lUSCBUSVAgUklHSFQ7Ozs7CisyMUI0O1JJR0hUV0FSRFMgQVJST1cgV0lUSCBDT1JORVIgRE9XTldBUkRTO1NvOzA7T047Ozs7O047UklHSFQgQVJST1cgV0lUSCBDT1JORVIgRE9XTjs7OzsKKzIxQjU7RE9XTldBUkRTIEFSUk9XIFdJVEggQ09STkVSIExFRlRXQVJEUztTbzswO09OOzs7OztOO0RPV04gQVJST1cgV0lUSCBDT1JORVIgTEVGVDs7OzsKKzIxQjY7QU5USUNMT0NLV0lTRSBUT1AgU0VNSUNJUkNMRSBBUlJPVztTbzswO09OOzs7OztOOzs7OzsKKzIxQjc7Q0xPQ0tXSVNFIFRPUCBTRU1JQ0lSQ0xFIEFSUk9XO1NvOzA7T047Ozs7O047Ozs7OworMjFCODtOT1JUSCBXRVNUIEFSUk9XIFRPIExPTkcgQkFSO1NvOzA7T047Ozs7O047VVBQRVIgTEVGVCBBUlJPVyBUTyBMT05HIEJBUjs7OzsKKzIxQjk7TEVGVFdBUkRTIEFSUk9XIFRPIEJBUiBPVkVSIFJJR0hUV0FSRFMgQVJST1cgVE8gQkFSO1NvOzA7T047Ozs7O047TEVGVCBBUlJPVyBUTyBCQVIgT1ZFUiBSSUdIVCBBUlJPVyBUTyBCQVI7Ozs7CisyMUJBO0FOVElDTE9DS1dJU0UgT1BFTiBDSVJDTEUgQVJST1c7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMUJCO0NMT0NLV0lTRSBPUEVOIENJUkNMRSBBUlJPVztTbzswO09OOzs7OztOOzs7OzsKKzIxQkM7TEVGVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQV0FSRFM7U287MDtPTjs7Ozs7TjtMRUZUIEhBUlBPT04gV0lUSCBCQVJCIFVQOzs7OworMjFCRDtMRUZUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgRE9XTldBUkRTO1NvOzA7T047Ozs7O047TEVGVCBIQVJQT09OIFdJVEggQkFSQiBET1dOOzs7OworMjFCRTtVUFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFJJR0hUV0FSRFM7U287MDtPTjs7Ozs7TjtVUCBIQVJQT09OIFdJVEggQkFSQiBSSUdIVDs7OzsKKzIxQkY7VVBXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBMRUZUV0FSRFM7U287MDtPTjs7Ozs7TjtVUCBIQVJQT09OIFdJVEggQkFSQiBMRUZUOzs7OworMjFDMDtSSUdIVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQV0FSRFM7U287MDtPTjs7Ozs7TjtSSUdIVCBIQVJQT09OIFdJVEggQkFSQiBVUDs7OzsKKzIxQzE7UklHSFRXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBET1dOV0FSRFM7U287MDtPTjs7Ozs7TjtSSUdIVCBIQVJQT09OIFdJVEggQkFSQiBET1dOOzs7OworMjFDMjtET1dOV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgUklHSFRXQVJEUztTbzswO09OOzs7OztOO0RPV04gSEFSUE9PTiBXSVRIIEJBUkIgUklHSFQ7Ozs7CisyMUMzO0RPV05XQVJEUyBIQVJQT09OIFdJVEggQkFSQiBMRUZUV0FSRFM7U287MDtPTjs7Ozs7TjtET1dOIEhBUlBPT04gV0lUSCBCQVJCIExFRlQ7Ozs7CisyMUM0O1JJR0hUV0FSRFMgQVJST1cgT1ZFUiBMRUZUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtSSUdIVCBBUlJPVyBPVkVSIExFRlQgQVJST1c7Ozs7CisyMUM1O1VQV0FSRFMgQVJST1cgTEVGVFdBUkRTIE9GIERPV05XQVJEUyBBUlJPVztTbzswO09OOzs7OztOO1VQIEFSUk9XIExFRlQgT0YgRE9XTiBBUlJPVzs7OzsKKzIxQzY7TEVGVFdBUkRTIEFSUk9XIE9WRVIgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0xFRlQgQVJST1cgT1ZFUiBSSUdIVCBBUlJPVzs7OzsKKzIxQzc7TEVGVFdBUkRTIFBBSVJFRCBBUlJPV1M7U287MDtPTjs7Ozs7TjtMRUZUIFBBSVJFRCBBUlJPV1M7Ozs7CisyMUM4O1VQV0FSRFMgUEFJUkVEIEFSUk9XUztTbzswO09OOzs7OztOO1VQIFBBSVJFRCBBUlJPV1M7Ozs7CisyMUM5O1JJR0hUV0FSRFMgUEFJUkVEIEFSUk9XUztTbzswO09OOzs7OztOO1JJR0hUIFBBSVJFRCBBUlJPV1M7Ozs7CisyMUNBO0RPV05XQVJEUyBQQUlSRUQgQVJST1dTO1NvOzA7T047Ozs7O047RE9XTiBQQUlSRUQgQVJST1dTOzs7OworMjFDQjtMRUZUV0FSRFMgSEFSUE9PTiBPVkVSIFJJR0hUV0FSRFMgSEFSUE9PTjtTbzswO09OOzs7OztOO0xFRlQgSEFSUE9PTiBPVkVSIFJJR0hUIEhBUlBPT047Ozs7CisyMUNDO1JJR0hUV0FSRFMgSEFSUE9PTiBPVkVSIExFRlRXQVJEUyBIQVJQT09OO1NvOzA7T047Ozs7O047UklHSFQgSEFSUE9PTiBPVkVSIExFRlQgSEFSUE9PTjs7OzsKKzIxQ0Q7TEVGVFdBUkRTIERPVUJMRSBBUlJPVyBXSVRIIFNUUk9LRTtTbzswO09OOzIxRDAgMDMzODs7OztOO0xFRlQgRE9VQkxFIEFSUk9XIFdJVEggU1RST0tFOzs7OworMjFDRTtMRUZUIFJJR0hUIERPVUJMRSBBUlJPVyBXSVRIIFNUUk9LRTtTbTswO09OOzIxRDQgMDMzODs7OztOOzs7OzsKKzIxQ0Y7UklHSFRXQVJEUyBET1VCTEUgQVJST1cgV0lUSCBTVFJPS0U7U207MDtPTjsyMUQyIDAzMzg7Ozs7TjtSSUdIVCBET1VCTEUgQVJST1cgV0lUSCBTVFJPS0U7Ozs7CisyMUQwO0xFRlRXQVJEUyBET1VCTEUgQVJST1c7U287MDtPTjs7Ozs7TjtMRUZUIERPVUJMRSBBUlJPVzs7OzsKKzIxRDE7VVBXQVJEUyBET1VCTEUgQVJST1c7U287MDtPTjs7Ozs7TjtVUCBET1VCTEUgQVJST1c7Ozs7CisyMUQyO1JJR0hUV0FSRFMgRE9VQkxFIEFSUk9XO1NtOzA7T047Ozs7O047UklHSFQgRE9VQkxFIEFSUk9XOzs7OworMjFEMztET1dOV0FSRFMgRE9VQkxFIEFSUk9XO1NvOzA7T047Ozs7O047RE9XTiBET1VCTEUgQVJST1c7Ozs7CisyMUQ0O0xFRlQgUklHSFQgRE9VQkxFIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjFENTtVUCBET1dOIERPVUJMRSBBUlJPVztTbzswO09OOzs7OztOOzs7OzsKKzIxRDY7Tk9SVEggV0VTVCBET1VCTEUgQVJST1c7U287MDtPTjs7Ozs7TjtVUFBFUiBMRUZUIERPVUJMRSBBUlJPVzs7OzsKKzIxRDc7Tk9SVEggRUFTVCBET1VCTEUgQVJST1c7U287MDtPTjs7Ozs7TjtVUFBFUiBSSUdIVCBET1VCTEUgQVJST1c7Ozs7CisyMUQ4O1NPVVRIIEVBU1QgRE9VQkxFIEFSUk9XO1NvOzA7T047Ozs7O047TE9XRVIgUklHSFQgRE9VQkxFIEFSUk9XOzs7OworMjFEOTtTT1VUSCBXRVNUIERPVUJMRSBBUlJPVztTbzswO09OOzs7OztOO0xPV0VSIExFRlQgRE9VQkxFIEFSUk9XOzs7OworMjFEQTtMRUZUV0FSRFMgVFJJUExFIEFSUk9XO1NvOzA7T047Ozs7O047TEVGVCBUUklQTEUgQVJST1c7Ozs7CisyMURCO1JJR0hUV0FSRFMgVFJJUExFIEFSUk9XO1NvOzA7T047Ozs7O047UklHSFQgVFJJUExFIEFSUk9XOzs7OworMjFEQztMRUZUV0FSRFMgU1FVSUdHTEUgQVJST1c7U287MDtPTjs7Ozs7TjtMRUZUIFNRVUlHR0xFIEFSUk9XOzs7OworMjFERDtSSUdIVFdBUkRTIFNRVUlHR0xFIEFSUk9XO1NvOzA7T047Ozs7O047UklHSFQgU1FVSUdHTEUgQVJST1c7Ozs7CisyMURFO1VQV0FSRFMgQVJST1cgV0lUSCBET1VCTEUgU1RST0tFO1NvOzA7T047Ozs7O047VVAgQVJST1cgV0lUSCBET1VCTEUgU1RST0tFOzs7OworMjFERjtET1dOV0FSRFMgQVJST1cgV0lUSCBET1VCTEUgU1RST0tFO1NvOzA7T047Ozs7O047RE9XTiBBUlJPVyBXSVRIIERPVUJMRSBTVFJPS0U7Ozs7CisyMUUwO0xFRlRXQVJEUyBEQVNIRUQgQVJST1c7U287MDtPTjs7Ozs7TjtMRUZUIERBU0hFRCBBUlJPVzs7OzsKKzIxRTE7VVBXQVJEUyBEQVNIRUQgQVJST1c7U287MDtPTjs7Ozs7TjtVUCBEQVNIRUQgQVJST1c7Ozs7CisyMUUyO1JJR0hUV0FSRFMgREFTSEVEIEFSUk9XO1NvOzA7T047Ozs7O047UklHSFQgREFTSEVEIEFSUk9XOzs7OworMjFFMztET1dOV0FSRFMgREFTSEVEIEFSUk9XO1NvOzA7T047Ozs7O047RE9XTiBEQVNIRUQgQVJST1c7Ozs7CisyMUU0O0xFRlRXQVJEUyBBUlJPVyBUTyBCQVI7U287MDtPTjs7Ozs7TjtMRUZUIEFSUk9XIFRPIEJBUjs7OzsKKzIxRTU7UklHSFRXQVJEUyBBUlJPVyBUTyBCQVI7U287MDtPTjs7Ozs7TjtSSUdIVCBBUlJPVyBUTyBCQVI7Ozs7CisyMUU2O0xFRlRXQVJEUyBXSElURSBBUlJPVztTbzswO09OOzs7OztOO1dISVRFIExFRlQgQVJST1c7Ozs7CisyMUU3O1VQV0FSRFMgV0hJVEUgQVJST1c7U287MDtPTjs7Ozs7TjtXSElURSBVUCBBUlJPVzs7OzsKKzIxRTg7UklHSFRXQVJEUyBXSElURSBBUlJPVztTbzswO09OOzs7OztOO1dISVRFIFJJR0hUIEFSUk9XOzs7OworMjFFOTtET1dOV0FSRFMgV0hJVEUgQVJST1c7U287MDtPTjs7Ozs7TjtXSElURSBET1dOIEFSUk9XOzs7OworMjFFQTtVUFdBUkRTIFdISVRFIEFSUk9XIEZST00gQkFSO1NvOzA7T047Ozs7O047V0hJVEUgVVAgQVJST1cgRlJPTSBCQVI7Ozs7CisyMUVCO1VQV0FSRFMgV0hJVEUgQVJST1cgT04gUEVERVNUQUw7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMUVDO1VQV0FSRFMgV0hJVEUgQVJST1cgT04gUEVERVNUQUwgV0lUSCBIT1JJWk9OVEFMIEJBUjtTbzswO09OOzs7OztOOzs7OzsKKzIxRUQ7VVBXQVJEUyBXSElURSBBUlJPVyBPTiBQRURFU1RBTCBXSVRIIFZFUlRJQ0FMIEJBUjtTbzswO09OOzs7OztOOzs7OzsKKzIxRUU7VVBXQVJEUyBXSElURSBET1VCTEUgQVJST1c7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMUVGO1VQV0FSRFMgV0hJVEUgRE9VQkxFIEFSUk9XIE9OIFBFREVTVEFMO1NvOzA7T047Ozs7O047Ozs7OworMjFGMDtSSUdIVFdBUkRTIFdISVRFIEFSUk9XIEZST00gV0FMTDtTbzswO09OOzs7OztOOzs7OzsKKzIxRjE7Tk9SVEggV0VTVCBBUlJPVyBUTyBDT1JORVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMUYyO1NPVVRIIEVBU1QgQVJST1cgVE8gQ09STkVSO1NvOzA7T047Ozs7O047Ozs7OworMjFGMztVUCBET1dOIFdISVRFIEFSUk9XO1NvOzA7T047Ozs7O047Ozs7OworMjFGNDtSSUdIVCBBUlJPVyBXSVRIIFNNQUxMIENJUkNMRTtTbTswO09OOzs7OztOOzs7OzsKKzIxRjU7RE9XTldBUkRTIEFSUk9XIExFRlRXQVJEUyBPRiBVUFdBUkRTIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjFGNjtUSFJFRSBSSUdIVFdBUkRTIEFSUk9XUztTbTswO09OOzs7OztOOzs7OzsKKzIxRjc7TEVGVFdBUkRTIEFSUk9XIFdJVEggVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMjFGODtSSUdIVFdBUkRTIEFSUk9XIFdJVEggVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMjFGOTtMRUZUIFJJR0hUIEFSUk9XIFdJVEggVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMjFGQTtMRUZUV0FSRFMgQVJST1cgV0lUSCBET1VCTEUgVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMjFGQjtSSUdIVFdBUkRTIEFSUk9XIFdJVEggRE9VQkxFIFZFUlRJQ0FMIFNUUk9LRTtTbTswO09OOzs7OztOOzs7OzsKKzIxRkM7TEVGVCBSSUdIVCBBUlJPVyBXSVRIIERPVUJMRSBWRVJUSUNBTCBTVFJPS0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMUZEO0xFRlRXQVJEUyBPUEVOLUhFQURFRCBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzIxRkU7UklHSFRXQVJEUyBPUEVOLUhFQURFRCBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzIxRkY7TEVGVCBSSUdIVCBPUEVOLUhFQURFRCBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzIyMDA7Rk9SIEFMTDtTbTswO09OOzs7OztOOzs7OzsKKzIyMDE7Q09NUExFTUVOVDtTbTswO09OOzs7OztZOzs7OzsKKzIyMDI7UEFSVElBTCBESUZGRVJFTlRJQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjAzO1RIRVJFIEVYSVNUUztTbTswO09OOzs7OztZOzs7OzsKKzIyMDQ7VEhFUkUgRE9FUyBOT1QgRVhJU1Q7U207MDtPTjsyMjAzIDAzMzg7Ozs7WTs7Ozs7CisyMjA1O0VNUFRZIFNFVDtTbTswO09OOzs7OztOOzs7OzsKKzIyMDY7SU5DUkVNRU5UO1NtOzA7T047Ozs7O047Ozs7OworMjIwNztOQUJMQTtTbTswO09OOzs7OztOOzs7OzsKKzIyMDg7RUxFTUVOVCBPRjtTbTswO09OOzs7OztZOzs7OzsKKzIyMDk7Tk9UIEFOIEVMRU1FTlQgT0Y7U207MDtPTjsyMjA4IDAzMzg7Ozs7WTs7Ozs7CisyMjBBO1NNQUxMIEVMRU1FTlQgT0Y7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjBCO0NPTlRBSU5TIEFTIE1FTUJFUjtTbTswO09OOzs7OztZOzs7OzsKKzIyMEM7RE9FUyBOT1QgQ09OVEFJTiBBUyBNRU1CRVI7U207MDtPTjsyMjBCIDAzMzg7Ozs7WTs7Ozs7CisyMjBEO1NNQUxMIENPTlRBSU5TIEFTIE1FTUJFUjtTbTswO09OOzs7OztZOzs7OzsKKzIyMEU7RU5EIE9GIFBST09GO1NtOzA7T047Ozs7O047Ozs7OworMjIwRjtOLUFSWSBQUk9EVUNUO1NtOzA7T047Ozs7O047Ozs7OworMjIxMDtOLUFSWSBDT1BST0RVQ1Q7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjExO04tQVJZIFNVTU1BVElPTjtTbTswO09OOzs7OztZOzs7OzsKKzIyMTI7TUlOVVMgU0lHTjtTbTswO0VUOzs7OztOOzs7OzsKKzIyMTM7TUlOVVMtT1ItUExVUyBTSUdOO1NtOzA7RVQ7Ozs7O047Ozs7OworMjIxNDtET1QgUExVUztTbTswO09OOzs7OztOOzs7OzsKKzIyMTU7RElWSVNJT04gU0xBU0g7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjE2O1NFVCBNSU5VUztTbTswO09OOzs7OztZOzs7OzsKKzIyMTc7QVNURVJJU0sgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjE4O1JJTkcgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjE5O0JVTExFVCBPUEVSQVRPUjtTbTswO09OOzs7OztOOzs7OzsKKzIyMUE7U1FVQVJFIFJPT1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjFCO0NVQkUgUk9PVDtTbTswO09OOzs7OztZOzs7OzsKKzIyMUM7Rk9VUlRIIFJPT1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjFEO1BST1BPUlRJT05BTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzIyMUU7SU5GSU5JVFk7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjFGO1JJR0hUIEFOR0xFO1NtOzA7T047Ozs7O1k7Ozs7OworMjIyMDtBTkdMRTtTbTswO09OOzs7OztZOzs7OzsKKzIyMjE7TUVBU1VSRUQgQU5HTEU7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjIyO1NQSEVSSUNBTCBBTkdMRTtTbTswO09OOzs7OztZOzs7OzsKKzIyMjM7RElWSURFUztTbTswO09OOzs7OztOOzs7OzsKKzIyMjQ7RE9FUyBOT1QgRElWSURFO1NtOzA7T047MjIyMyAwMzM4Ozs7O1k7Ozs7OworMjIyNTtQQVJBTExFTCBUTztTbTswO09OOzs7OztOOzs7OzsKKzIyMjY7Tk9UIFBBUkFMTEVMIFRPO1NtOzA7T047MjIyNSAwMzM4Ozs7O1k7Ozs7OworMjIyNztMT0dJQ0FMIEFORDtTbTswO09OOzs7OztOOzs7OzsKKzIyMjg7TE9HSUNBTCBPUjtTbTswO09OOzs7OztOOzs7OzsKKzIyMjk7SU5URVJTRUNUSU9OO1NtOzA7T047Ozs7O047Ozs7OworMjIyQTtVTklPTjtTbTswO09OOzs7OztOOzs7OzsKKzIyMkI7SU5URUdSQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjJDO0RPVUJMRSBJTlRFR1JBTDtTbTswO09OOzxjb21wYXQ+IDIyMkIgMjIyQjs7OztZOzs7OzsKKzIyMkQ7VFJJUExFIElOVEVHUkFMO1NtOzA7T047PGNvbXBhdD4gMjIyQiAyMjJCIDIyMkI7Ozs7WTs7Ozs7CisyMjJFO0NPTlRPVVIgSU5URUdSQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjJGO1NVUkZBQ0UgSU5URUdSQUw7U207MDtPTjs8Y29tcGF0PiAyMjJFIDIyMkU7Ozs7WTs7Ozs7CisyMjMwO1ZPTFVNRSBJTlRFR1JBTDtTbTswO09OOzxjb21wYXQ+IDIyMkUgMjIyRSAyMjJFOzs7O1k7Ozs7OworMjIzMTtDTE9DS1dJU0UgSU5URUdSQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjMyO0NMT0NLV0lTRSBDT05UT1VSIElOVEVHUkFMO1NtOzA7T047Ozs7O1k7Ozs7OworMjIzMztBTlRJQ0xPQ0tXSVNFIENPTlRPVVIgSU5URUdSQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjM0O1RIRVJFRk9SRTtTbTswO09OOzs7OztOOzs7OzsKKzIyMzU7QkVDQVVTRTtTbTswO09OOzs7OztOOzs7OzsKKzIyMzY7UkFUSU87U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjM3O1BST1BPUlRJT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjM4O0RPVCBNSU5VUztTbTswO09OOzs7OztOOzs7OzsKKzIyMzk7RVhDRVNTO1NtOzA7T047Ozs7O1k7Ozs7OworMjIzQTtHRU9NRVRSSUMgUFJPUE9SVElPTjtTbTswO09OOzs7OztOOzs7OzsKKzIyM0I7SE9NT1RIRVRJQztTbTswO09OOzs7OztZOzs7OzsKKzIyM0M7VElMREUgT1BFUkFUT1I7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjNEO1JFVkVSU0VEIFRJTERFO1NtOzA7T047Ozs7O1k7O2xhenkgUzs7OworMjIzRTtJTlZFUlRFRCBMQVpZIFM7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjNGO1NJTkUgV0FWRTtTbTswO09OOzs7OztZOzs7OzsKKzIyNDA7V1JFQVRIIFBST0RVQ1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjQxO05PVCBUSUxERTtTbTswO09OOzIyM0MgMDMzODs7OztZOzs7OzsKKzIyNDI7TUlOVVMgVElMREU7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjQzO0FTWU1QVE9USUNBTExZIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjI0NDtOT1QgQVNZTVBUT1RJQ0FMTFkgRVFVQUwgVE87U207MDtPTjsyMjQzIDAzMzg7Ozs7WTs7Ozs7CisyMjQ1O0FQUFJPWElNQVRFTFkgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyMjQ2O0FQUFJPWElNQVRFTFkgQlVUIE5PVCBBQ1RVQUxMWSBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzIyNDc7TkVJVEhFUiBBUFBST1hJTUFURUxZIE5PUiBBQ1RVQUxMWSBFUVVBTCBUTztTbTswO09OOzIyNDUgMDMzODs7OztZOzs7OzsKKzIyNDg7QUxNT1NUIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjI0OTtOT1QgQUxNT1NUIEVRVUFMIFRPO1NtOzA7T047MjI0OCAwMzM4Ozs7O1k7Ozs7OworMjI0QTtBTE1PU1QgRVFVQUwgT1IgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyMjRCO1RSSVBMRSBUSUxERTtTbTswO09OOzs7OztZOzs7OzsKKzIyNEM7QUxMIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjI0RDtFUVVJVkFMRU5UIFRPO1NtOzA7T047Ozs7O047Ozs7OworMjI0RTtHRU9NRVRSSUNBTExZIEVRVUlWQUxFTlQgVE87U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjRGO0RJRkZFUkVOQ0UgQkVUV0VFTjtTbTswO09OOzs7OztOOzs7OzsKKzIyNTA7QVBQUk9BQ0hFUyBUSEUgTElNSVQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjUxO0dFT01FVFJJQ0FMTFkgRVFVQUwgVE87U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjUyO0FQUFJPWElNQVRFTFkgRVFVQUwgVE8gT1IgVEhFIElNQUdFIE9GO1NtOzA7T047Ozs7O1k7Ozs7OworMjI1MztJTUFHRSBPRiBPUiBBUFBST1hJTUFURUxZIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjI1NDtDT0xPTiBFUVVBTFM7U207MDtPTjs7Ozs7WTtDT0xPTiBFUVVBTDs7OzsKKzIyNTU7RVFVQUxTIENPTE9OO1NtOzA7T047Ozs7O1k7RVFVQUwgQ09MT047Ozs7CisyMjU2O1JJTkcgSU4gRVFVQUwgVE87U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjU3O1JJTkcgRVFVQUwgVE87U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjU4O0NPUlJFU1BPTkRTIFRPO1NtOzA7T047Ozs7O047Ozs7OworMjI1OTtFU1RJTUFURVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjVBO0VRVUlBTkdVTEFSIFRPO1NtOzA7T047Ozs7O047Ozs7OworMjI1QjtTVEFSIEVRVUFMUztTbTswO09OOzs7OztOOzs7OzsKKzIyNUM7REVMVEEgRVFVQUwgVE87U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjVEO0VRVUFMIFRPIEJZIERFRklOSVRJT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjVFO01FQVNVUkVEIEJZO1NtOzA7T047Ozs7O047Ozs7OworMjI1RjtRVUVTVElPTkVEIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjI2MDtOT1QgRVFVQUwgVE87U207MDtPTjswMDNEIDAzMzg7Ozs7WTs7Ozs7CisyMjYxO0lERU5USUNBTCBUTztTbTswO09OOzs7OztOOzs7OzsKKzIyNjI7Tk9UIElERU5USUNBTCBUTztTbTswO09OOzIyNjEgMDMzODs7OztZOzs7OzsKKzIyNjM7U1RSSUNUTFkgRVFVSVZBTEVOVCBUTztTbTswO09OOzs7OztOOzs7OzsKKzIyNjQ7TEVTUy1USEFOIE9SIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7TEVTUyBUSEFOIE9SIEVRVUFMIFRPOzs7OworMjI2NTtHUkVBVEVSLVRIQU4gT1IgRVFVQUwgVE87U207MDtPTjs7Ozs7WTtHUkVBVEVSIFRIQU4gT1IgRVFVQUwgVE87Ozs7CisyMjY2O0xFU1MtVEhBTiBPVkVSIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7TEVTUyBUSEFOIE9WRVIgRVFVQUwgVE87Ozs7CisyMjY3O0dSRUFURVItVEhBTiBPVkVSIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7R1JFQVRFUiBUSEFOIE9WRVIgRVFVQUwgVE87Ozs7CisyMjY4O0xFU1MtVEhBTiBCVVQgTk9UIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7TEVTUyBUSEFOIEJVVCBOT1QgRVFVQUwgVE87Ozs7CisyMjY5O0dSRUFURVItVEhBTiBCVVQgTk9UIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7R1JFQVRFUiBUSEFOIEJVVCBOT1QgRVFVQUwgVE87Ozs7CisyMjZBO01VQ0ggTEVTUy1USEFOO1NtOzA7T047Ozs7O1k7TVVDSCBMRVNTIFRIQU47Ozs7CisyMjZCO01VQ0ggR1JFQVRFUi1USEFOO1NtOzA7T047Ozs7O1k7TVVDSCBHUkVBVEVSIFRIQU47Ozs7CisyMjZDO0JFVFdFRU47U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjZEO05PVCBFUVVJVkFMRU5UIFRPO1NtOzA7T047MjI0RCAwMzM4Ozs7O047Ozs7OworMjI2RTtOT1QgTEVTUy1USEFOO1NtOzA7T047MDAzQyAwMzM4Ozs7O1k7Tk9UIExFU1MgVEhBTjs7OzsKKzIyNkY7Tk9UIEdSRUFURVItVEhBTjtTbTswO09OOzAwM0UgMDMzODs7OztZO05PVCBHUkVBVEVSIFRIQU47Ozs7CisyMjcwO05FSVRIRVIgTEVTUy1USEFOIE5PUiBFUVVBTCBUTztTbTswO09OOzIyNjQgMDMzODs7OztZO05FSVRIRVIgTEVTUyBUSEFOIE5PUiBFUVVBTCBUTzs7OzsKKzIyNzE7TkVJVEhFUiBHUkVBVEVSLVRIQU4gTk9SIEVRVUFMIFRPO1NtOzA7T047MjI2NSAwMzM4Ozs7O1k7TkVJVEhFUiBHUkVBVEVSIFRIQU4gTk9SIEVRVUFMIFRPOzs7OworMjI3MjtMRVNTLVRIQU4gT1IgRVFVSVZBTEVOVCBUTztTbTswO09OOzs7OztZO0xFU1MgVEhBTiBPUiBFUVVJVkFMRU5UIFRPOzs7OworMjI3MztHUkVBVEVSLVRIQU4gT1IgRVFVSVZBTEVOVCBUTztTbTswO09OOzs7OztZO0dSRUFURVIgVEhBTiBPUiBFUVVJVkFMRU5UIFRPOzs7OworMjI3NDtORUlUSEVSIExFU1MtVEhBTiBOT1IgRVFVSVZBTEVOVCBUTztTbTswO09OOzIyNzIgMDMzODs7OztZO05FSVRIRVIgTEVTUyBUSEFOIE5PUiBFUVVJVkFMRU5UIFRPOzs7OworMjI3NTtORUlUSEVSIEdSRUFURVItVEhBTiBOT1IgRVFVSVZBTEVOVCBUTztTbTswO09OOzIyNzMgMDMzODs7OztZO05FSVRIRVIgR1JFQVRFUiBUSEFOIE5PUiBFUVVJVkFMRU5UIFRPOzs7OworMjI3NjtMRVNTLVRIQU4gT1IgR1JFQVRFUi1USEFOO1NtOzA7T047Ozs7O1k7TEVTUyBUSEFOIE9SIEdSRUFURVIgVEhBTjs7OzsKKzIyNzc7R1JFQVRFUi1USEFOIE9SIExFU1MtVEhBTjtTbTswO09OOzs7OztZO0dSRUFURVIgVEhBTiBPUiBMRVNTIFRIQU47Ozs7CisyMjc4O05FSVRIRVIgTEVTUy1USEFOIE5PUiBHUkVBVEVSLVRIQU47U207MDtPTjsyMjc2IDAzMzg7Ozs7WTtORUlUSEVSIExFU1MgVEhBTiBOT1IgR1JFQVRFUiBUSEFOOzs7OworMjI3OTtORUlUSEVSIEdSRUFURVItVEhBTiBOT1IgTEVTUy1USEFOO1NtOzA7T047MjI3NyAwMzM4Ozs7O1k7TkVJVEhFUiBHUkVBVEVSIFRIQU4gTk9SIExFU1MgVEhBTjs7OzsKKzIyN0E7UFJFQ0VERVM7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjdCO1NVQ0NFRURTO1NtOzA7T047Ozs7O1k7Ozs7OworMjI3QztQUkVDRURFUyBPUiBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzIyN0Q7U1VDQ0VFRFMgT1IgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyMjdFO1BSRUNFREVTIE9SIEVRVUlWQUxFTlQgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyMjdGO1NVQ0NFRURTIE9SIEVRVUlWQUxFTlQgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyMjgwO0RPRVMgTk9UIFBSRUNFREU7U207MDtPTjsyMjdBIDAzMzg7Ozs7WTs7Ozs7CisyMjgxO0RPRVMgTk9UIFNVQ0NFRUQ7U207MDtPTjsyMjdCIDAzMzg7Ozs7WTs7Ozs7CisyMjgyO1NVQlNFVCBPRjtTbTswO09OOzs7OztZOzs7OzsKKzIyODM7U1VQRVJTRVQgT0Y7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjg0O05PVCBBIFNVQlNFVCBPRjtTbTswO09OOzIyODIgMDMzODs7OztZOzs7OzsKKzIyODU7Tk9UIEEgU1VQRVJTRVQgT0Y7U207MDtPTjsyMjgzIDAzMzg7Ozs7WTs7Ozs7CisyMjg2O1NVQlNFVCBPRiBPUiBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzIyODc7U1VQRVJTRVQgT0YgT1IgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyMjg4O05FSVRIRVIgQSBTVUJTRVQgT0YgTk9SIEVRVUFMIFRPO1NtOzA7T047MjI4NiAwMzM4Ozs7O1k7Ozs7OworMjI4OTtORUlUSEVSIEEgU1VQRVJTRVQgT0YgTk9SIEVRVUFMIFRPO1NtOzA7T047MjI4NyAwMzM4Ozs7O1k7Ozs7OworMjI4QTtTVUJTRVQgT0YgV0lUSCBOT1QgRVFVQUwgVE87U207MDtPTjs7Ozs7WTtTVUJTRVQgT0YgT1IgTk9UIEVRVUFMIFRPOzs7OworMjI4QjtTVVBFUlNFVCBPRiBXSVRIIE5PVCBFUVVBTCBUTztTbTswO09OOzs7OztZO1NVUEVSU0VUIE9GIE9SIE5PVCBFUVVBTCBUTzs7OzsKKzIyOEM7TVVMVElTRVQ7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjhEO01VTFRJU0VUIE1VTFRJUExJQ0FUSU9OO1NtOzA7T047Ozs7O047Ozs7OworMjI4RTtNVUxUSVNFVCBVTklPTjtTbTswO09OOzs7OztOOzs7OzsKKzIyOEY7U1FVQVJFIElNQUdFIE9GO1NtOzA7T047Ozs7O1k7Ozs7OworMjI5MDtTUVVBUkUgT1JJR0lOQUwgT0Y7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjkxO1NRVUFSRSBJTUFHRSBPRiBPUiBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzIyOTI7U1FVQVJFIE9SSUdJTkFMIE9GIE9SIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjI5MztTUVVBUkUgQ0FQO1NtOzA7T047Ozs7O047Ozs7OworMjI5NDtTUVVBUkUgQ1VQO1NtOzA7T047Ozs7O047Ozs7OworMjI5NTtDSVJDTEVEIFBMVVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjk2O0NJUkNMRUQgTUlOVVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjk3O0NJUkNMRUQgVElNRVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjk4O0NJUkNMRUQgRElWSVNJT04gU0xBU0g7U207MDtPTjs7Ozs7WTs7Ozs7CisyMjk5O0NJUkNMRUQgRE9UIE9QRVJBVE9SO1NtOzA7T047Ozs7O047Ozs7OworMjI5QTtDSVJDTEVEIFJJTkcgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjlCO0NJUkNMRUQgQVNURVJJU0sgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjlDO0NJUkNMRUQgRVFVQUxTO1NtOzA7T047Ozs7O047Ozs7OworMjI5RDtDSVJDTEVEIERBU0g7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMjlFO1NRVUFSRUQgUExVUztTbTswO09OOzs7OztOOzs7OzsKKzIyOUY7U1FVQVJFRCBNSU5VUztTbTswO09OOzs7OztOOzs7OzsKKzIyQTA7U1FVQVJFRCBUSU1FUztTbTswO09OOzs7OztOOzs7OzsKKzIyQTE7U1FVQVJFRCBET1QgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkEyO1JJR0hUIFRBQ0s7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkEzO0xFRlQgVEFDSztTbTswO09OOzs7OztZOzs7OzsKKzIyQTQ7RE9XTiBUQUNLO1NtOzA7T047Ozs7O047Ozs7OworMjJBNTtVUCBUQUNLO1NtOzA7T047Ozs7O047Ozs7OworMjJBNjtBU1NFUlRJT047U207MDtPTjs7Ozs7WTs7Ozs7CisyMkE3O01PREVMUztTbTswO09OOzs7OztZOzs7OzsKKzIyQTg7VFJVRTtTbTswO09OOzs7OztZOzs7OzsKKzIyQTk7Rk9SQ0VTO1NtOzA7T047Ozs7O1k7Ozs7OworMjJBQTtUUklQTEUgVkVSVElDQUwgQkFSIFJJR0hUIFRVUk5TVElMRTtTbTswO09OOzs7OztZOzs7OzsKKzIyQUI7RE9VQkxFIFZFUlRJQ0FMIEJBUiBET1VCTEUgUklHSFQgVFVSTlNUSUxFO1NtOzA7T047Ozs7O1k7Ozs7OworMjJBQztET0VTIE5PVCBQUk9WRTtTbTswO09OOzIyQTIgMDMzODs7OztZOzs7OzsKKzIyQUQ7Tk9UIFRSVUU7U207MDtPTjsyMkE4IDAzMzg7Ozs7WTs7Ozs7CisyMkFFO0RPRVMgTk9UIEZPUkNFO1NtOzA7T047MjJBOSAwMzM4Ozs7O1k7Ozs7OworMjJBRjtORUdBVEVEIERPVUJMRSBWRVJUSUNBTCBCQVIgRE9VQkxFIFJJR0hUIFRVUk5TVElMRTtTbTswO09OOzIyQUIgMDMzODs7OztZOzs7OzsKKzIyQjA7UFJFQ0VERVMgVU5ERVIgUkVMQVRJT047U207MDtPTjs7Ozs7WTs7Ozs7CisyMkIxO1NVQ0NFRURTIFVOREVSIFJFTEFUSU9OO1NtOzA7T047Ozs7O1k7Ozs7OworMjJCMjtOT1JNQUwgU1VCR1JPVVAgT0Y7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkIzO0NPTlRBSU5TIEFTIE5PUk1BTCBTVUJHUk9VUDtTbTswO09OOzs7OztZOzs7OzsKKzIyQjQ7Tk9STUFMIFNVQkdST1VQIE9GIE9SIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjJCNTtDT05UQUlOUyBBUyBOT1JNQUwgU1VCR1JPVVAgT1IgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyMkI2O09SSUdJTkFMIE9GO1NtOzA7T047Ozs7O1k7Ozs7OworMjJCNztJTUFHRSBPRjtTbTswO09OOzs7OztZOzs7OzsKKzIyQjg7TVVMVElNQVA7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkI5O0hFUk1JVElBTiBDT05KVUdBVEUgTUFUUklYO1NtOzA7T047Ozs7O047Ozs7OworMjJCQTtJTlRFUkNBTEFURTtTbTswO09OOzs7OztOOzs7OzsKKzIyQkI7WE9SO1NtOzA7T047Ozs7O047Ozs7OworMjJCQztOQU5EO1NtOzA7T047Ozs7O047Ozs7OworMjJCRDtOT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkJFO1JJR0hUIEFOR0xFIFdJVEggQVJDO1NtOzA7T047Ozs7O1k7Ozs7OworMjJCRjtSSUdIVCBUUklBTkdMRTtTbTswO09OOzs7OztZOzs7OzsKKzIyQzA7Ti1BUlkgTE9HSUNBTCBBTkQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkMxO04tQVJZIExPR0lDQUwgT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkMyO04tQVJZIElOVEVSU0VDVElPTjtTbTswO09OOzs7OztOOzs7OzsKKzIyQzM7Ti1BUlkgVU5JT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkM0O0RJQU1PTkQgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkM1O0RPVCBPUEVSQVRPUjtTbTswO09OOzs7OztOOzs7OzsKKzIyQzY7U1RBUiBPUEVSQVRPUjtTbTswO09OOzs7OztOOzs7OzsKKzIyQzc7RElWSVNJT04gVElNRVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkM4O0JPV1RJRTtTbTswO09OOzs7OztOOzs7OzsKKzIyQzk7TEVGVCBOT1JNQUwgRkFDVE9SIFNFTUlESVJFQ1QgUFJPRFVDVDtTbTswO09OOzs7OztZOzs7OzsKKzIyQ0E7UklHSFQgTk9STUFMIEZBQ1RPUiBTRU1JRElSRUNUIFBST0RVQ1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkNCO0xFRlQgU0VNSURJUkVDVCBQUk9EVUNUO1NtOzA7T047Ozs7O1k7Ozs7OworMjJDQztSSUdIVCBTRU1JRElSRUNUIFBST0RVQ1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkNEO1JFVkVSU0VEIFRJTERFIEVRVUFMUztTbTswO09OOzs7OztZOzs7OzsKKzIyQ0U7Q1VSTFkgTE9HSUNBTCBPUjtTbTswO09OOzs7OztOOzs7OzsKKzIyQ0Y7Q1VSTFkgTE9HSUNBTCBBTkQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkQwO0RPVUJMRSBTVUJTRVQ7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkQxO0RPVUJMRSBTVVBFUlNFVDtTbTswO09OOzs7OztZOzs7OzsKKzIyRDI7RE9VQkxFIElOVEVSU0VDVElPTjtTbTswO09OOzs7OztOOzs7OzsKKzIyRDM7RE9VQkxFIFVOSU9OO1NtOzA7T047Ozs7O047Ozs7OworMjJENDtQSVRDSEZPUks7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkQ1O0VRVUFMIEFORCBQQVJBTExFTCBUTztTbTswO09OOzs7OztOOzs7OzsKKzIyRDY7TEVTUy1USEFOIFdJVEggRE9UO1NtOzA7T047Ozs7O1k7TEVTUyBUSEFOIFdJVEggRE9UOzs7OworMjJENztHUkVBVEVSLVRIQU4gV0lUSCBET1Q7U207MDtPTjs7Ozs7WTtHUkVBVEVSIFRIQU4gV0lUSCBET1Q7Ozs7CisyMkQ4O1ZFUlkgTVVDSCBMRVNTLVRIQU47U207MDtPTjs7Ozs7WTtWRVJZIE1VQ0ggTEVTUyBUSEFOOzs7OworMjJEOTtWRVJZIE1VQ0ggR1JFQVRFUi1USEFOO1NtOzA7T047Ozs7O1k7VkVSWSBNVUNIIEdSRUFURVIgVEhBTjs7OzsKKzIyREE7TEVTUy1USEFOIEVRVUFMIFRPIE9SIEdSRUFURVItVEhBTjtTbTswO09OOzs7OztZO0xFU1MgVEhBTiBFUVVBTCBUTyBPUiBHUkVBVEVSIFRIQU47Ozs7CisyMkRCO0dSRUFURVItVEhBTiBFUVVBTCBUTyBPUiBMRVNTLVRIQU47U207MDtPTjs7Ozs7WTtHUkVBVEVSIFRIQU4gRVFVQUwgVE8gT1IgTEVTUyBUSEFOOzs7OworMjJEQztFUVVBTCBUTyBPUiBMRVNTLVRIQU47U207MDtPTjs7Ozs7WTtFUVVBTCBUTyBPUiBMRVNTIFRIQU47Ozs7CisyMkREO0VRVUFMIFRPIE9SIEdSRUFURVItVEhBTjtTbTswO09OOzs7OztZO0VRVUFMIFRPIE9SIEdSRUFURVIgVEhBTjs7OzsKKzIyREU7RVFVQUwgVE8gT1IgUFJFQ0VERVM7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkRGO0VRVUFMIFRPIE9SIFNVQ0NFRURTO1NtOzA7T047Ozs7O1k7Ozs7OworMjJFMDtET0VTIE5PVCBQUkVDRURFIE9SIEVRVUFMO1NtOzA7T047MjI3QyAwMzM4Ozs7O1k7Ozs7OworMjJFMTtET0VTIE5PVCBTVUNDRUVEIE9SIEVRVUFMO1NtOzA7T047MjI3RCAwMzM4Ozs7O1k7Ozs7OworMjJFMjtOT1QgU1FVQVJFIElNQUdFIE9GIE9SIEVRVUFMIFRPO1NtOzA7T047MjI5MSAwMzM4Ozs7O1k7Ozs7OworMjJFMztOT1QgU1FVQVJFIE9SSUdJTkFMIE9GIE9SIEVRVUFMIFRPO1NtOzA7T047MjI5MiAwMzM4Ozs7O1k7Ozs7OworMjJFNDtTUVVBUkUgSU1BR0UgT0YgT1IgTk9UIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjJFNTtTUVVBUkUgT1JJR0lOQUwgT0YgT1IgTk9UIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjJFNjtMRVNTLVRIQU4gQlVUIE5PVCBFUVVJVkFMRU5UIFRPO1NtOzA7T047Ozs7O1k7TEVTUyBUSEFOIEJVVCBOT1QgRVFVSVZBTEVOVCBUTzs7OzsKKzIyRTc7R1JFQVRFUi1USEFOIEJVVCBOT1QgRVFVSVZBTEVOVCBUTztTbTswO09OOzs7OztZO0dSRUFURVIgVEhBTiBCVVQgTk9UIEVRVUlWQUxFTlQgVE87Ozs7CisyMkU4O1BSRUNFREVTIEJVVCBOT1QgRVFVSVZBTEVOVCBUTztTbTswO09OOzs7OztZOzs7OzsKKzIyRTk7U1VDQ0VFRFMgQlVUIE5PVCBFUVVJVkFMRU5UIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMjJFQTtOT1QgTk9STUFMIFNVQkdST1VQIE9GO1NtOzA7T047MjJCMiAwMzM4Ozs7O1k7Ozs7OworMjJFQjtET0VTIE5PVCBDT05UQUlOIEFTIE5PUk1BTCBTVUJHUk9VUDtTbTswO09OOzIyQjMgMDMzODs7OztZOzs7OzsKKzIyRUM7Tk9UIE5PUk1BTCBTVUJHUk9VUCBPRiBPUiBFUVVBTCBUTztTbTswO09OOzIyQjQgMDMzODs7OztZOzs7OzsKKzIyRUQ7RE9FUyBOT1QgQ09OVEFJTiBBUyBOT1JNQUwgU1VCR1JPVVAgT1IgRVFVQUw7U207MDtPTjsyMkI1IDAzMzg7Ozs7WTs7Ozs7CisyMkVFO1ZFUlRJQ0FMIEVMTElQU0lTO1NtOzA7T047Ozs7O047Ozs7OworMjJFRjtNSURMSU5FIEhPUklaT05UQUwgRUxMSVBTSVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyMkYwO1VQIFJJR0hUIERJQUdPTkFMIEVMTElQU0lTO1NtOzA7T047Ozs7O1k7Ozs7OworMjJGMTtET1dOIFJJR0hUIERJQUdPTkFMIEVMTElQU0lTO1NtOzA7T047Ozs7O1k7Ozs7OworMjJGMjtFTEVNRU5UIE9GIFdJVEggTE9ORyBIT1JJWk9OVEFMIFNUUk9LRTtTbTswO09OOzs7OztZOzs7OzsKKzIyRjM7RUxFTUVOVCBPRiBXSVRIIFZFUlRJQ0FMIEJBUiBBVCBFTkQgT0YgSE9SSVpPTlRBTCBTVFJPS0U7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkY0O1NNQUxMIEVMRU1FTlQgT0YgV0lUSCBWRVJUSUNBTCBCQVIgQVQgRU5EIE9GIEhPUklaT05UQUwgU1RST0tFO1NtOzA7T047Ozs7O1k7Ozs7OworMjJGNTtFTEVNRU5UIE9GIFdJVEggRE9UIEFCT1ZFO1NtOzA7T047Ozs7O1k7Ozs7OworMjJGNjtFTEVNRU5UIE9GIFdJVEggT1ZFUkJBUjtTbTswO09OOzs7OztZOzs7OzsKKzIyRjc7U01BTEwgRUxFTUVOVCBPRiBXSVRIIE9WRVJCQVI7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkY4O0VMRU1FTlQgT0YgV0lUSCBVTkRFUkJBUjtTbTswO09OOzs7OztZOzs7OzsKKzIyRjk7RUxFTUVOVCBPRiBXSVRIIFRXTyBIT1JJWk9OVEFMIFNUUk9LRVM7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkZBO0NPTlRBSU5TIFdJVEggTE9ORyBIT1JJWk9OVEFMIFNUUk9LRTtTbTswO09OOzs7OztZOzs7OzsKKzIyRkI7Q09OVEFJTlMgV0lUSCBWRVJUSUNBTCBCQVIgQVQgRU5EIE9GIEhPUklaT05UQUwgU1RST0tFO1NtOzA7T047Ozs7O1k7Ozs7OworMjJGQztTTUFMTCBDT05UQUlOUyBXSVRIIFZFUlRJQ0FMIEJBUiBBVCBFTkQgT0YgSE9SSVpPTlRBTCBTVFJPS0U7U207MDtPTjs7Ozs7WTs7Ozs7CisyMkZEO0NPTlRBSU5TIFdJVEggT1ZFUkJBUjtTbTswO09OOzs7OztZOzs7OzsKKzIyRkU7U01BTEwgQ09OVEFJTlMgV0lUSCBPVkVSQkFSO1NtOzA7T047Ozs7O1k7Ozs7OworMjJGRjtaIE5PVEFUSU9OIEJBRyBNRU1CRVJTSElQO1NtOzA7T047Ozs7O1k7Ozs7OworMjMwMDtESUFNRVRFUiBTSUdOO1NvOzA7T047Ozs7O047Ozs7OworMjMwMTtFTEVDVFJJQyBBUlJPVztTbzswO09OOzs7OztOOzs7OzsKKzIzMDI7SE9VU0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzAzO1VQIEFSUk9XSEVBRDtTbzswO09OOzs7OztOOzs7OzsKKzIzMDQ7RE9XTiBBUlJPV0hFQUQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzA1O1BST0pFQ1RJVkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzA2O1BFUlNQRUNUSVZFO1NvOzA7T047Ozs7O047Ozs7OworMjMwNztXQVZZIExJTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzA4O0xFRlQgQ0VJTElORztTbTswO09OOzs7OztZOzs7OzsKKzIzMDk7UklHSFQgQ0VJTElORztTbTswO09OOzs7OztZOzs7OzsKKzIzMEE7TEVGVCBGTE9PUjtTbTswO09OOzs7OztZOzs7OzsKKzIzMEI7UklHSFQgRkxPT1I7U207MDtPTjs7Ozs7WTs7Ozs7CisyMzBDO0JPVFRPTSBSSUdIVCBDUk9QO1NvOzA7T047Ozs7O047Ozs7OworMjMwRDtCT1RUT00gTEVGVCBDUk9QO1NvOzA7T047Ozs7O047Ozs7OworMjMwRTtUT1AgUklHSFQgQ1JPUDtTbzswO09OOzs7OztOOzs7OzsKKzIzMEY7VE9QIExFRlQgQ1JPUDtTbzswO09OOzs7OztOOzs7OzsKKzIzMTA7UkVWRVJTRUQgTk9UIFNJR047U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzExO1NRVUFSRSBMT1pFTkdFO1NvOzA7T047Ozs7O047Ozs7OworMjMxMjtBUkM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzEzO1NFR01FTlQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzE0O1NFQ1RPUjtTbzswO09OOzs7OztOOzs7OzsKKzIzMTU7VEVMRVBIT05FIFJFQ09SREVSO1NvOzA7T047Ozs7O047Ozs7OworMjMxNjtQT1NJVElPTiBJTkRJQ0FUT1I7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzE3O1ZJRVdEQVRBIFNRVUFSRTtTbzswO09OOzs7OztOOzs7OzsKKzIzMTg7UExBQ0UgT0YgSU5URVJFU1QgU0lHTjtTbzswO09OOzs7OztOO0NPTU1BTkQgS0VZOzs7OworMjMxOTtUVVJORUQgTk9UIFNJR047U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzFBO1dBVENIO1NvOzA7T047Ozs7O047Ozs7OworMjMxQjtIT1VSR0xBU1M7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzFDO1RPUCBMRUZUIENPUk5FUjtTbzswO09OOzs7OztOOzs7OzsKKzIzMUQ7VE9QIFJJR0hUIENPUk5FUjtTbzswO09OOzs7OztOOzs7OzsKKzIzMUU7Qk9UVE9NIExFRlQgQ09STkVSO1NvOzA7T047Ozs7O047Ozs7OworMjMxRjtCT1RUT00gUklHSFQgQ09STkVSO1NvOzA7T047Ozs7O047Ozs7OworMjMyMDtUT1AgSEFMRiBJTlRFR1JBTDtTbTswO09OOzs7OztZOzs7OzsKKzIzMjE7Qk9UVE9NIEhBTEYgSU5URUdSQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyMzIyO0ZST1dOO1NvOzA7T047Ozs7O047Ozs7OworMjMyMztTTUlMRTtTbzswO09OOzs7OztOOzs7OzsKKzIzMjQ7VVAgQVJST1dIRUFEIEJFVFdFRU4gVFdPIEhPUklaT05UQUwgQkFSUztTbzswO09OOzs7OztOO0VOVEVSIEtFWTs7OzsKKzIzMjU7T1BUSU9OIEtFWTtTbzswO09OOzs7OztOOzs7OzsKKzIzMjY7RVJBU0UgVE8gVEhFIFJJR0hUO1NvOzA7T047Ozs7O047REVMRVRFIFRPIFRIRSBSSUdIVCBLRVk7Ozs7CisyMzI3O1ggSU4gQSBSRUNUQU5HTEUgQk9YO1NvOzA7T047Ozs7O047Q0xFQVIgS0VZOzs7OworMjMyODtLRVlCT0FSRDtTbzswO09OOzs7OztOOzs7OzsKKzIzMjk7TEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUO1BzOzA7T047MzAwODs7OztZO0JSQTs7OzsKKzIzMkE7UklHSFQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVDtQZTswO09OOzMwMDk7Ozs7WTtLRVQ7Ozs7CisyMzJCO0VSQVNFIFRPIFRIRSBMRUZUO1NvOzA7T047Ozs7O047REVMRVRFIFRPIFRIRSBMRUZUIEtFWTs7OzsKKzIzMkM7QkVOWkVORSBSSU5HO1NvOzA7T047Ozs7O047Ozs7OworMjMyRDtDWUxJTkRSSUNJVFk7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzJFO0FMTCBBUk9VTkQtUFJPRklMRTtTbzswO09OOzs7OztOOzs7OzsKKzIzMkY7U1lNTUVUUlk7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzMwO1RPVEFMIFJVTk9VVDtTbzswO09OOzs7OztOOzs7OzsKKzIzMzE7RElNRU5TSU9OIE9SSUdJTjtTbzswO09OOzs7OztOOzs7OzsKKzIzMzI7Q09OSUNBTCBUQVBFUjtTbzswO09OOzs7OztOOzs7OzsKKzIzMzM7U0xPUEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzM0O0NPVU5URVJCT1JFO1NvOzA7T047Ozs7O047Ozs7OworMjMzNTtDT1VOVEVSU0lOSztTbzswO09OOzs7OztOOzs7OzsKKzIzMzY7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIEktQkVBTTtTbzswO0w7Ozs7O047Ozs7OworMjMzNztBUEwgRlVOQ1RJT05BTCBTWU1CT0wgU1FVSVNIIFFVQUQ7U287MDtMOzs7OztOOzs7OzsKKzIzMzg7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVQUQgRVFVQUw7U287MDtMOzs7OztOOzs7OzsKKzIzMzk7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVQUQgRElWSURFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzNBO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEIERJQU1PTkQ7U287MDtMOzs7OztOOzs7OzsKKzIzM0I7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVQUQgSk9UO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzNDO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEIENJUkNMRTtTbzswO0w7Ozs7O047Ozs7OworMjMzRDtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgQ0lSQ0xFIFNUSUxFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzNFO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBDSVJDTEUgSk9UO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzNGO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBTTEFTSCBCQVI7U287MDtMOzs7OztOOzs7OzsKKzIzNDA7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIEJBQ0tTTEFTSCBCQVI7U287MDtMOzs7OztOOzs7OzsKKzIzNDE7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVQUQgU0xBU0g7U287MDtMOzs7OztOOzs7OzsKKzIzNDI7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVQUQgQkFDS1NMQVNIO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzQzO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEIExFU1MtVEhBTjtTbzswO0w7Ozs7O047Ozs7OworMjM0NDtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgUVVBRCBHUkVBVEVSLVRIQU47U287MDtMOzs7OztOOzs7OzsKKzIzNDU7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIExFRlRXQVJEUyBWQU5FO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzQ2O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBSSUdIVFdBUkRTIFZBTkU7U287MDtMOzs7OztOOzs7OzsKKzIzNDc7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVQUQgTEVGVFdBUkRTIEFSUk9XO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzQ4O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEIFJJR0hUV0FSRFMgQVJST1c7U287MDtMOzs7OztOOzs7OzsKKzIzNDk7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIENJUkNMRSBCQUNLU0xBU0g7U287MDtMOzs7OztOOzs7OzsKKzIzNEE7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIERPV04gVEFDSyBVTkRFUkJBUjtTbzswO0w7Ozs7O047Oyo7OzsKKzIzNEI7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIERFTFRBIFNUSUxFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzRDO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEIERPV04gQ0FSRVQ7U287MDtMOzs7OztOOzs7OzsKKzIzNEQ7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVQUQgREVMVEE7U287MDtMOzs7OztOOzs7OzsKKzIzNEU7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIERPV04gVEFDSyBKT1Q7U287MDtMOzs7OztOOzsqOzs7CisyMzRGO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBVUFdBUkRTIFZBTkU7U287MDtMOzs7OztOOzs7OzsKKzIzNTA7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVQUQgVVBXQVJEUyBBUlJPVztTbzswO0w7Ozs7O047Ozs7OworMjM1MTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgVVAgVEFDSyBPVkVSQkFSO1NvOzA7TDs7Ozs7Tjs7Kjs7OworMjM1MjtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgREVMIFNUSUxFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzUzO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEIFVQIENBUkVUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzU0O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEIERFTDtTbzswO0w7Ozs7O047Ozs7OworMjM1NTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgVVAgVEFDSyBKT1Q7U287MDtMOzs7OztOOzsqOzs7CisyMzU2O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBET1dOV0FSRFMgVkFORTtTbzswO0w7Ozs7O047Ozs7OworMjM1NztBUEwgRlVOQ1RJT05BTCBTWU1CT0wgUVVBRCBET1dOV0FSRFMgQVJST1c7U287MDtMOzs7OztOOzs7OzsKKzIzNTg7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFFVT1RFIFVOREVSQkFSO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzU5O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBERUxUQSBVTkRFUkJBUjtTbzswO0w7Ozs7O047Ozs7OworMjM1QTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgRElBTU9ORCBVTkRFUkJBUjtTbzswO0w7Ozs7O047Ozs7OworMjM1QjtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgSk9UIFVOREVSQkFSO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzVDO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBDSVJDTEUgVU5ERVJCQVI7U287MDtMOzs7OztOOzs7OzsKKzIzNUQ7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFVQIFNIT0UgSk9UO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzVFO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVU9URSBRVUFEO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzVGO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBDSVJDTEUgU1RBUjtTbzswO0w7Ozs7O047Ozs7OworMjM2MDtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgUVVBRCBDT0xPTjtTbzswO0w7Ozs7O047Ozs7OworMjM2MTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgVVAgVEFDSyBESUFFUkVTSVM7U287MDtMOzs7OztOOzsqOzs7CisyMzYyO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBERUwgRElBRVJFU0lTO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzYzO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBTVEFSIERJQUVSRVNJUztTbzswO0w7Ozs7O047Ozs7OworMjM2NDtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgSk9UIERJQUVSRVNJUztTbzswO0w7Ozs7O047Ozs7OworMjM2NTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgQ0lSQ0xFIERJQUVSRVNJUztTbzswO0w7Ozs7O047Ozs7OworMjM2NjtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgRE9XTiBTSE9FIFNUSUxFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzY3O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBMRUZUIFNIT0UgU1RJTEU7U287MDtMOzs7OztOOzs7OzsKKzIzNjg7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFRJTERFIERJQUVSRVNJUztTbzswO0w7Ozs7O047Ozs7OworMjM2OTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgR1JFQVRFUi1USEFOIERJQUVSRVNJUztTbzswO0w7Ozs7O047Ozs7OworMjM2QTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgQ09NTUEgQkFSO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzZCO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBERUwgVElMREU7U287MDtMOzs7OztOOzs7OzsKKzIzNkM7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFpJTERFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzZEO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBTVElMRSBUSUxERTtTbzswO0w7Ozs7O047Ozs7OworMjM2RTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgU0VNSUNPTE9OIFVOREVSQkFSO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzZGO0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEIE5PVCBFUVVBTDtTbzswO0w7Ozs7O047Ozs7OworMjM3MDtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgUVVBRCBRVUVTVElPTjtTbzswO0w7Ozs7O047Ozs7OworMjM3MTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgRE9XTiBDQVJFVCBUSUxERTtTbzswO0w7Ozs7O047Ozs7OworMjM3MjtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgVVAgQ0FSRVQgVElMREU7U287MDtMOzs7OztOOzs7OzsKKzIzNzM7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIElPVEE7U287MDtMOzs7OztOOzs7OzsKKzIzNzQ7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIFJITztTbzswO0w7Ozs7O047Ozs7OworMjM3NTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgT01FR0E7U287MDtMOzs7OztOOzs7OzsKKzIzNzY7QVBMIEZVTkNUSU9OQUwgU1lNQk9MIEFMUEhBIFVOREVSQkFSO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzc3O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBFUFNJTE9OIFVOREVSQkFSO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzc4O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBJT1RBIFVOREVSQkFSO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzc5O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBPTUVHQSBVTkRFUkJBUjtTbzswO0w7Ozs7O047Ozs7OworMjM3QTtBUEwgRlVOQ1RJT05BTCBTWU1CT0wgQUxQSEE7U287MDtMOzs7OztOOzs7OzsKKzIzN0I7Tk9UIENIRUNLIE1BUks7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzdDO1JJR0hUIEFOR0xFIFdJVEggRE9XTldBUkRTIFpJR1pBRyBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzIzN0Q7U0hPVUxERVJFRCBPUEVOIEJPWDtTbzswO09OOzs7OztOOzs7OzsKKzIzN0U7QkVMTCBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzdGO1ZFUlRJQ0FMIExJTkUgV0lUSCBNSURETEUgRE9UO1NvOzA7T047Ozs7O047Ozs7OworMjM4MDtJTlNFUlRJT04gU1lNQk9MO1NvOzA7T047Ozs7O047Ozs7OworMjM4MTtDT05USU5VT1VTIFVOREVSTElORSBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzgyO0RJU0NPTlRJTlVPVVMgVU5ERVJMSU5FIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzIzODM7RU1QSEFTSVMgU1lNQk9MO1NvOzA7T047Ozs7O047Ozs7OworMjM4NDtDT01QT1NJVElPTiBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzg1O1dISVRFIFNRVUFSRSBXSVRIIENFTlRSRSBWRVJUSUNBTCBMSU5FO1NvOzA7T047Ozs7O047Ozs7OworMjM4NjtFTlRFUiBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzg3O0FMVEVSTkFUSVZFIEtFWSBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzg4O0hFTE0gU1lNQk9MO1NvOzA7T047Ozs7O047Ozs7OworMjM4OTtDSVJDTEVEIEhPUklaT05UQUwgQkFSIFdJVEggTk9UQ0g7U287MDtPTjs7Ozs7Tjs7cGF1c2U7OzsKKzIzOEE7Q0lSQ0xFRCBUUklBTkdMRSBET1dOO1NvOzA7T047Ozs7O047O2JyZWFrOzs7CisyMzhCO0JST0tFTiBDSVJDTEUgV0lUSCBOT1JUSFdFU1QgQVJST1c7U287MDtPTjs7Ozs7Tjs7ZXNjYXBlOzs7CisyMzhDO1VORE8gU1lNQk9MO1NvOzA7T047Ozs7O047Ozs7OworMjM4RDtNT05PU1RBQkxFIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzIzOEU7SFlTVEVSRVNJUyBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzhGO09QRU4tQ0lSQ1VJVC1PVVRQVVQgSC1UWVBFIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzIzOTA7T1BFTi1DSVJDVUlULU9VVFBVVCBMLVRZUEUgU1lNQk9MO1NvOzA7T047Ozs7O047Ozs7OworMjM5MTtQQVNTSVZFLVBVTEwtRE9XTi1PVVRQVVQgU1lNQk9MO1NvOzA7T047Ozs7O047Ozs7OworMjM5MjtQQVNTSVZFLVBVTEwtVVAtT1VUUFVUIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzIzOTM7RElSRUNUIENVUlJFTlQgU1lNQk9MIEZPUk0gVFdPO1NvOzA7T047Ozs7O047Ozs7OworMjM5NDtTT0ZUV0FSRS1GVU5DVElPTiBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzk1O0FQTCBGVU5DVElPTkFMIFNZTUJPTCBRVUFEO1NvOzA7TDs7Ozs7Tjs7Ozs7CisyMzk2O0RFQ0lNQUwgU0VQQVJBVE9SIEtFWSBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzk3O1BSRVZJT1VTIFBBR0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyMzk4O05FWFQgUEFHRTtTbzswO09OOzs7OztOOzs7OzsKKzIzOTk7UFJJTlQgU0NSRUVOIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzIzOUE7Q0xFQVIgU0NSRUVOIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzIzOUI7TEVGVCBQQVJFTlRIRVNJUyBVUFBFUiBIT09LO1NtOzA7T047Ozs7O047Ozs7OworMjM5QztMRUZUIFBBUkVOVEhFU0lTIEVYVEVOU0lPTjtTbTswO09OOzs7OztOOzs7OzsKKzIzOUQ7TEVGVCBQQVJFTlRIRVNJUyBMT1dFUiBIT09LO1NtOzA7T047Ozs7O047Ozs7OworMjM5RTtSSUdIVCBQQVJFTlRIRVNJUyBVUFBFUiBIT09LO1NtOzA7T047Ozs7O047Ozs7OworMjM5RjtSSUdIVCBQQVJFTlRIRVNJUyBFWFRFTlNJT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0EwO1JJR0hUIFBBUkVOVEhFU0lTIExPV0VSIEhPT0s7U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0ExO0xFRlQgU1FVQVJFIEJSQUNLRVQgVVBQRVIgQ09STkVSO1NtOzA7T047Ozs7O047Ozs7OworMjNBMjtMRUZUIFNRVUFSRSBCUkFDS0VUIEVYVEVOU0lPTjtTbTswO09OOzs7OztOOzs7OzsKKzIzQTM7TEVGVCBTUVVBUkUgQlJBQ0tFVCBMT1dFUiBDT1JORVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0E0O1JJR0hUIFNRVUFSRSBCUkFDS0VUIFVQUEVSIENPUk5FUjtTbTswO09OOzs7OztOOzs7OzsKKzIzQTU7UklHSFQgU1FVQVJFIEJSQUNLRVQgRVhURU5TSU9OO1NtOzA7T047Ozs7O047Ozs7OworMjNBNjtSSUdIVCBTUVVBUkUgQlJBQ0tFVCBMT1dFUiBDT1JORVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0E3O0xFRlQgQ1VSTFkgQlJBQ0tFVCBVUFBFUiBIT09LO1NtOzA7T047Ozs7O047Ozs7OworMjNBODtMRUZUIENVUkxZIEJSQUNLRVQgTUlERExFIFBJRUNFO1NtOzA7T047Ozs7O047Ozs7OworMjNBOTtMRUZUIENVUkxZIEJSQUNLRVQgTE9XRVIgSE9PSztTbTswO09OOzs7OztOOzs7OzsKKzIzQUE7Q1VSTFkgQlJBQ0tFVCBFWFRFTlNJT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0FCO1JJR0hUIENVUkxZIEJSQUNLRVQgVVBQRVIgSE9PSztTbTswO09OOzs7OztOOzs7OzsKKzIzQUM7UklHSFQgQ1VSTFkgQlJBQ0tFVCBNSURETEUgUElFQ0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0FEO1JJR0hUIENVUkxZIEJSQUNLRVQgTE9XRVIgSE9PSztTbTswO09OOzs7OztOOzs7OzsKKzIzQUU7SU5URUdSQUwgRVhURU5TSU9OO1NtOzA7T047Ozs7O047Ozs7OworMjNBRjtIT1JJWk9OVEFMIExJTkUgRVhURU5TSU9OO1NtOzA7T047Ozs7O047Ozs7OworMjNCMDtVUFBFUiBMRUZUIE9SIExPV0VSIFJJR0hUIENVUkxZIEJSQUNLRVQgU0VDVElPTjtTbTswO09OOzs7OztOOzs7OzsKKzIzQjE7VVBQRVIgUklHSFQgT1IgTE9XRVIgTEVGVCBDVVJMWSBCUkFDS0VUIFNFQ1RJT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0IyO1NVTU1BVElPTiBUT1A7U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0IzO1NVTU1BVElPTiBCT1RUT007U207MDtPTjs7Ozs7Tjs7Ozs7CisyM0I0O1RPUCBTUVVBUkUgQlJBQ0tFVDtQczswO09OOzs7OztOOzs7OzsKKzIzQjU7Qk9UVE9NIFNRVUFSRSBCUkFDS0VUO1BlOzA7T047Ozs7O047Ozs7OworMjNCNjtCT1RUT00gU1FVQVJFIEJSQUNLRVQgT1ZFUiBUT1AgU1FVQVJFIEJSQUNLRVQ7UG87MDtPTjs7Ozs7Tjs7Ozs7CisyM0I3O1JBRElDQUwgU1lNQk9MIEJPVFRPTTtTbzswO09OOzs7OztOOzs7OzsKKzIzQjg7TEVGVCBWRVJUSUNBTCBCT1ggTElORTtTbzswO09OOzs7OztOOzs7OzsKKzIzQjk7UklHSFQgVkVSVElDQUwgQk9YIExJTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0JBO0hPUklaT05UQUwgU0NBTiBMSU5FLTE7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0JCO0hPUklaT05UQUwgU0NBTiBMSU5FLTM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0JDO0hPUklaT05UQUwgU0NBTiBMSU5FLTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0JEO0hPUklaT05UQUwgU0NBTiBMSU5FLTk7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0JFO0RFTlRJU1RSWSBTWU1CT0wgTElHSFQgVkVSVElDQUwgQU5EIFRPUCBSSUdIVDtTbzswO09OOzs7OztOOzs7OzsKKzIzQkY7REVOVElTVFJZIFNZTUJPTCBMSUdIVCBWRVJUSUNBTCBBTkQgQk9UVE9NIFJJR0hUO1NvOzA7T047Ozs7O047Ozs7OworMjNDMDtERU5USVNUUlkgU1lNQk9MIExJR0hUIFZFUlRJQ0FMIFdJVEggQ0lSQ0xFO1NvOzA7T047Ozs7O047Ozs7OworMjNDMTtERU5USVNUUlkgU1lNQk9MIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwgV0lUSCBDSVJDTEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0MyO0RFTlRJU1RSWSBTWU1CT0wgTElHSFQgVVAgQU5EIEhPUklaT05UQUwgV0lUSCBDSVJDTEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0MzO0RFTlRJU1RSWSBTWU1CT0wgTElHSFQgVkVSVElDQUwgV0lUSCBUUklBTkdMRTtTbzswO09OOzs7OztOOzs7OzsKKzIzQzQ7REVOVElTVFJZIFNZTUJPTCBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMIFdJVEggVFJJQU5HTEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0M1O0RFTlRJU1RSWSBTWU1CT0wgTElHSFQgVVAgQU5EIEhPUklaT05UQUwgV0lUSCBUUklBTkdMRTtTbzswO09OOzs7OztOOzs7OzsKKzIzQzY7REVOVElTVFJZIFNZTUJPTCBMSUdIVCBWRVJUSUNBTCBBTkQgV0FWRTtTbzswO09OOzs7OztOOzs7OzsKKzIzQzc7REVOVElTVFJZIFNZTUJPTCBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMIFdJVEggV0FWRTtTbzswO09OOzs7OztOOzs7OzsKKzIzQzg7REVOVElTVFJZIFNZTUJPTCBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTCBXSVRIIFdBVkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0M5O0RFTlRJU1RSWSBTWU1CT0wgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTDtTbzswO09OOzs7OztOOzs7OzsKKzIzQ0E7REVOVElTVFJZIFNZTUJPTCBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTDtTbzswO09OOzs7OztOOzs7OzsKKzIzQ0I7REVOVElTVFJZIFNZTUJPTCBMSUdIVCBWRVJUSUNBTCBBTkQgVE9QIExFRlQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyM0NDO0RFTlRJU1RSWSBTWU1CT0wgTElHSFQgVkVSVElDQUwgQU5EIEJPVFRPTSBMRUZUO1NvOzA7T047Ozs7O047Ozs7OworMjNDRDtTUVVBUkUgRk9PVDtTbzswO09OOzs7OztOOzs7OzsKKzIzQ0U7UkVUVVJOIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzI0MDA7U1lNQk9MIEZPUiBOVUxMO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgTlVMTDs7OzsKKzI0MDE7U1lNQk9MIEZPUiBTVEFSVCBPRiBIRUFESU5HO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgU1RBUlQgT0YgSEVBRElORzs7OzsKKzI0MDI7U1lNQk9MIEZPUiBTVEFSVCBPRiBURVhUO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgU1RBUlQgT0YgVEVYVDs7OzsKKzI0MDM7U1lNQk9MIEZPUiBFTkQgT0YgVEVYVDtTbzswO09OOzs7OztOO0dSQVBISUMgRk9SIEVORCBPRiBURVhUOzs7OworMjQwNDtTWU1CT0wgRk9SIEVORCBPRiBUUkFOU01JU1NJT047U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBFTkQgT0YgVFJBTlNNSVNTSU9OOzs7OworMjQwNTtTWU1CT0wgRk9SIEVOUVVJUlk7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBFTlFVSVJZOzs7OworMjQwNjtTWU1CT0wgRk9SIEFDS05PV0xFREdFO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgQUNLTk9XTEVER0U7Ozs7CisyNDA3O1NZTUJPTCBGT1IgQkVMTDtTbzswO09OOzs7OztOO0dSQVBISUMgRk9SIEJFTEw7Ozs7CisyNDA4O1NZTUJPTCBGT1IgQkFDS1NQQUNFO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgQkFDS1NQQUNFOzs7OworMjQwOTtTWU1CT0wgRk9SIEhPUklaT05UQUwgVEFCVUxBVElPTjtTbzswO09OOzs7OztOO0dSQVBISUMgRk9SIEhPUklaT05UQUwgVEFCVUxBVElPTjs7OzsKKzI0MEE7U1lNQk9MIEZPUiBMSU5FIEZFRUQ7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBMSU5FIEZFRUQ7Ozs7CisyNDBCO1NZTUJPTCBGT1IgVkVSVElDQUwgVEFCVUxBVElPTjtTbzswO09OOzs7OztOO0dSQVBISUMgRk9SIFZFUlRJQ0FMIFRBQlVMQVRJT047Ozs7CisyNDBDO1NZTUJPTCBGT1IgRk9STSBGRUVEO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgRk9STSBGRUVEOzs7OworMjQwRDtTWU1CT0wgRk9SIENBUlJJQUdFIFJFVFVSTjtTbzswO09OOzs7OztOO0dSQVBISUMgRk9SIENBUlJJQUdFIFJFVFVSTjs7OzsKKzI0MEU7U1lNQk9MIEZPUiBTSElGVCBPVVQ7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBTSElGVCBPVVQ7Ozs7CisyNDBGO1NZTUJPTCBGT1IgU0hJRlQgSU47U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBTSElGVCBJTjs7OzsKKzI0MTA7U1lNQk9MIEZPUiBEQVRBIExJTksgRVNDQVBFO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgREFUQSBMSU5LIEVTQ0FQRTs7OzsKKzI0MTE7U1lNQk9MIEZPUiBERVZJQ0UgQ09OVFJPTCBPTkU7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBERVZJQ0UgQ09OVFJPTCBPTkU7Ozs7CisyNDEyO1NZTUJPTCBGT1IgREVWSUNFIENPTlRST0wgVFdPO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgREVWSUNFIENPTlRST0wgVFdPOzs7OworMjQxMztTWU1CT0wgRk9SIERFVklDRSBDT05UUk9MIFRIUkVFO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgREVWSUNFIENPTlRST0wgVEhSRUU7Ozs7CisyNDE0O1NZTUJPTCBGT1IgREVWSUNFIENPTlRST0wgRk9VUjtTbzswO09OOzs7OztOO0dSQVBISUMgRk9SIERFVklDRSBDT05UUk9MIEZPVVI7Ozs7CisyNDE1O1NZTUJPTCBGT1IgTkVHQVRJVkUgQUNLTk9XTEVER0U7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBORUdBVElWRSBBQ0tOT1dMRURHRTs7OzsKKzI0MTY7U1lNQk9MIEZPUiBTWU5DSFJPTk9VUyBJRExFO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgU1lOQ0hST05PVVMgSURMRTs7OzsKKzI0MTc7U1lNQk9MIEZPUiBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSzs7OzsKKzI0MTg7U1lNQk9MIEZPUiBDQU5DRUw7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBDQU5DRUw7Ozs7CisyNDE5O1NZTUJPTCBGT1IgRU5EIE9GIE1FRElVTTtTbzswO09OOzs7OztOO0dSQVBISUMgRk9SIEVORCBPRiBNRURJVU07Ozs7CisyNDFBO1NZTUJPTCBGT1IgU1VCU1RJVFVURTtTbzswO09OOzs7OztOO0dSQVBISUMgRk9SIFNVQlNUSVRVVEU7Ozs7CisyNDFCO1NZTUJPTCBGT1IgRVNDQVBFO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgRVNDQVBFOzs7OworMjQxQztTWU1CT0wgRk9SIEZJTEUgU0VQQVJBVE9SO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgRklMRSBTRVBBUkFUT1I7Ozs7CisyNDFEO1NZTUJPTCBGT1IgR1JPVVAgU0VQQVJBVE9SO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgR1JPVVAgU0VQQVJBVE9SOzs7OworMjQxRTtTWU1CT0wgRk9SIFJFQ09SRCBTRVBBUkFUT1I7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBSRUNPUkQgU0VQQVJBVE9SOzs7OworMjQxRjtTWU1CT0wgRk9SIFVOSVQgU0VQQVJBVE9SO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgVU5JVCBTRVBBUkFUT1I7Ozs7CisyNDIwO1NZTUJPTCBGT1IgU1BBQ0U7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBTUEFDRTs7OzsKKzI0MjE7U1lNQk9MIEZPUiBERUxFVEU7U287MDtPTjs7Ozs7TjtHUkFQSElDIEZPUiBERUxFVEU7Ozs7CisyNDIyO0JMQU5LIFNZTUJPTDtTbzswO09OOzs7OztOO0JMQU5LOzs7OworMjQyMztPUEVOIEJPWDtTbzswO09OOzs7OztOOzs7OzsKKzI0MjQ7U1lNQk9MIEZPUiBORVdMSU5FO1NvOzA7T047Ozs7O047R1JBUEhJQyBGT1IgTkVXTElORTs7OzsKKzI0MjU7U1lNQk9MIEZPUiBERUxFVEUgRk9STSBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyNDI2O1NZTUJPTCBGT1IgU1VCU1RJVFVURSBGT1JNIFRXTztTbzswO09OOzs7OztOOzs7OzsKKzI0NDA7T0NSIEhPT0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNDQxO09DUiBDSEFJUjtTbzswO09OOzs7OztOOzs7OzsKKzI0NDI7T0NSIEZPUks7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNDQzO09DUiBJTlZFUlRFRCBGT1JLO1NvOzA7T047Ozs7O047Ozs7OworMjQ0NDtPQ1IgQkVMVCBCVUNLTEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNDQ1O09DUiBCT1cgVElFO1NvOzA7T047Ozs7O047Ozs7OworMjQ0NjtPQ1IgQlJBTkNIIEJBTksgSURFTlRJRklDQVRJT047U287MDtPTjs7Ozs7Tjs7Ozs7CisyNDQ3O09DUiBBTU9VTlQgT0YgQ0hFQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNDQ4O09DUiBEQVNIO1NvOzA7T047Ozs7O047Ozs7OworMjQ0OTtPQ1IgQ1VTVE9NRVIgQUNDT1VOVCBOVU1CRVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNDRBO09DUiBET1VCTEUgQkFDS1NMQVNIO1NvOzA7T047Ozs7O047Ozs7OworMjQ2MDtDSVJDTEVEIERJR0lUIE9ORTtObzswO0VOOzxjaXJjbGU+IDAwMzE7OzE7MTtOOzs7OzsKKzI0NjE7Q0lSQ0xFRCBESUdJVCBUV087Tm87MDtFTjs8Y2lyY2xlPiAwMDMyOzsyOzI7Tjs7Ozs7CisyNDYyO0NJUkNMRUQgRElHSVQgVEhSRUU7Tm87MDtFTjs8Y2lyY2xlPiAwMDMzOzszOzM7Tjs7Ozs7CisyNDYzO0NJUkNMRUQgRElHSVQgRk9VUjtObzswO0VOOzxjaXJjbGU+IDAwMzQ7OzQ7NDtOOzs7OzsKKzI0NjQ7Q0lSQ0xFRCBESUdJVCBGSVZFO05vOzA7RU47PGNpcmNsZT4gMDAzNTs7NTs1O047Ozs7OworMjQ2NTtDSVJDTEVEIERJR0lUIFNJWDtObzswO0VOOzxjaXJjbGU+IDAwMzY7OzY7NjtOOzs7OzsKKzI0NjY7Q0lSQ0xFRCBESUdJVCBTRVZFTjtObzswO0VOOzxjaXJjbGU+IDAwMzc7Ozc7NztOOzs7OzsKKzI0Njc7Q0lSQ0xFRCBESUdJVCBFSUdIVDtObzswO0VOOzxjaXJjbGU+IDAwMzg7Ozg7ODtOOzs7OzsKKzI0Njg7Q0lSQ0xFRCBESUdJVCBOSU5FO05vOzA7RU47PGNpcmNsZT4gMDAzOTs7OTs5O047Ozs7OworMjQ2OTtDSVJDTEVEIE5VTUJFUiBURU47Tm87MDtFTjs8Y2lyY2xlPiAwMDMxIDAwMzA7OzsxMDtOOzs7OzsKKzI0NkE7Q0lSQ0xFRCBOVU1CRVIgRUxFVkVOO05vOzA7RU47PGNpcmNsZT4gMDAzMSAwMDMxOzs7MTE7Tjs7Ozs7CisyNDZCO0NJUkNMRUQgTlVNQkVSIFRXRUxWRTtObzswO0VOOzxjaXJjbGU+IDAwMzEgMDAzMjs7OzEyO047Ozs7OworMjQ2QztDSVJDTEVEIE5VTUJFUiBUSElSVEVFTjtObzswO0VOOzxjaXJjbGU+IDAwMzEgMDAzMzs7OzEzO047Ozs7OworMjQ2RDtDSVJDTEVEIE5VTUJFUiBGT1VSVEVFTjtObzswO0VOOzxjaXJjbGU+IDAwMzEgMDAzNDs7OzE0O047Ozs7OworMjQ2RTtDSVJDTEVEIE5VTUJFUiBGSUZURUVOO05vOzA7RU47PGNpcmNsZT4gMDAzMSAwMDM1Ozs7MTU7Tjs7Ozs7CisyNDZGO0NJUkNMRUQgTlVNQkVSIFNJWFRFRU47Tm87MDtFTjs8Y2lyY2xlPiAwMDMxIDAwMzY7OzsxNjtOOzs7OzsKKzI0NzA7Q0lSQ0xFRCBOVU1CRVIgU0VWRU5URUVOO05vOzA7RU47PGNpcmNsZT4gMDAzMSAwMDM3Ozs7MTc7Tjs7Ozs7CisyNDcxO0NJUkNMRUQgTlVNQkVSIEVJR0hURUVOO05vOzA7RU47PGNpcmNsZT4gMDAzMSAwMDM4Ozs7MTg7Tjs7Ozs7CisyNDcyO0NJUkNMRUQgTlVNQkVSIE5JTkVURUVOO05vOzA7RU47PGNpcmNsZT4gMDAzMSAwMDM5Ozs7MTk7Tjs7Ozs7CisyNDczO0NJUkNMRUQgTlVNQkVSIFRXRU5UWTtObzswO0VOOzxjaXJjbGU+IDAwMzIgMDAzMDs7OzIwO047Ozs7OworMjQ3NDtQQVJFTlRIRVNJWkVEIERJR0lUIE9ORTtObzswO0VOOzxjb21wYXQ+IDAwMjggMDAzMSAwMDI5OzsxOzE7Tjs7Ozs7CisyNDc1O1BBUkVOVEhFU0laRUQgRElHSVQgVFdPO05vOzA7RU47PGNvbXBhdD4gMDAyOCAwMDMyIDAwMjk7OzI7MjtOOzs7OzsKKzI0NzY7UEFSRU5USEVTSVpFRCBESUdJVCBUSFJFRTtObzswO0VOOzxjb21wYXQ+IDAwMjggMDAzMyAwMDI5OzszOzM7Tjs7Ozs7CisyNDc3O1BBUkVOVEhFU0laRUQgRElHSVQgRk9VUjtObzswO0VOOzxjb21wYXQ+IDAwMjggMDAzNCAwMDI5Ozs0OzQ7Tjs7Ozs7CisyNDc4O1BBUkVOVEhFU0laRUQgRElHSVQgRklWRTtObzswO0VOOzxjb21wYXQ+IDAwMjggMDAzNSAwMDI5Ozs1OzU7Tjs7Ozs7CisyNDc5O1BBUkVOVEhFU0laRUQgRElHSVQgU0lYO05vOzA7RU47PGNvbXBhdD4gMDAyOCAwMDM2IDAwMjk7OzY7NjtOOzs7OzsKKzI0N0E7UEFSRU5USEVTSVpFRCBESUdJVCBTRVZFTjtObzswO0VOOzxjb21wYXQ+IDAwMjggMDAzNyAwMDI5Ozs3Ozc7Tjs7Ozs7CisyNDdCO1BBUkVOVEhFU0laRUQgRElHSVQgRUlHSFQ7Tm87MDtFTjs8Y29tcGF0PiAwMDI4IDAwMzggMDAyOTs7ODs4O047Ozs7OworMjQ3QztQQVJFTlRIRVNJWkVEIERJR0lUIE5JTkU7Tm87MDtFTjs8Y29tcGF0PiAwMDI4IDAwMzkgMDAyOTs7OTs5O047Ozs7OworMjQ3RDtQQVJFTlRIRVNJWkVEIE5VTUJFUiBURU47Tm87MDtFTjs8Y29tcGF0PiAwMDI4IDAwMzEgMDAzMCAwMDI5Ozs7MTA7Tjs7Ozs7CisyNDdFO1BBUkVOVEhFU0laRUQgTlVNQkVSIEVMRVZFTjtObzswO0VOOzxjb21wYXQ+IDAwMjggMDAzMSAwMDMxIDAwMjk7OzsxMTtOOzs7OzsKKzI0N0Y7UEFSRU5USEVTSVpFRCBOVU1CRVIgVFdFTFZFO05vOzA7RU47PGNvbXBhdD4gMDAyOCAwMDMxIDAwMzIgMDAyOTs7OzEyO047Ozs7OworMjQ4MDtQQVJFTlRIRVNJWkVEIE5VTUJFUiBUSElSVEVFTjtObzswO0VOOzxjb21wYXQ+IDAwMjggMDAzMSAwMDMzIDAwMjk7OzsxMztOOzs7OzsKKzI0ODE7UEFSRU5USEVTSVpFRCBOVU1CRVIgRk9VUlRFRU47Tm87MDtFTjs8Y29tcGF0PiAwMDI4IDAwMzEgMDAzNCAwMDI5Ozs7MTQ7Tjs7Ozs7CisyNDgyO1BBUkVOVEhFU0laRUQgTlVNQkVSIEZJRlRFRU47Tm87MDtFTjs8Y29tcGF0PiAwMDI4IDAwMzEgMDAzNSAwMDI5Ozs7MTU7Tjs7Ozs7CisyNDgzO1BBUkVOVEhFU0laRUQgTlVNQkVSIFNJWFRFRU47Tm87MDtFTjs8Y29tcGF0PiAwMDI4IDAwMzEgMDAzNiAwMDI5Ozs7MTY7Tjs7Ozs7CisyNDg0O1BBUkVOVEhFU0laRUQgTlVNQkVSIFNFVkVOVEVFTjtObzswO0VOOzxjb21wYXQ+IDAwMjggMDAzMSAwMDM3IDAwMjk7OzsxNztOOzs7OzsKKzI0ODU7UEFSRU5USEVTSVpFRCBOVU1CRVIgRUlHSFRFRU47Tm87MDtFTjs8Y29tcGF0PiAwMDI4IDAwMzEgMDAzOCAwMDI5Ozs7MTg7Tjs7Ozs7CisyNDg2O1BBUkVOVEhFU0laRUQgTlVNQkVSIE5JTkVURUVOO05vOzA7RU47PGNvbXBhdD4gMDAyOCAwMDMxIDAwMzkgMDAyOTs7OzE5O047Ozs7OworMjQ4NztQQVJFTlRIRVNJWkVEIE5VTUJFUiBUV0VOVFk7Tm87MDtFTjs8Y29tcGF0PiAwMDI4IDAwMzIgMDAzMCAwMDI5Ozs7MjA7Tjs7Ozs7CisyNDg4O0RJR0lUIE9ORSBGVUxMIFNUT1A7Tm87MDtFTjs8Y29tcGF0PiAwMDMxIDAwMkU7OzE7MTtOO0RJR0lUIE9ORSBQRVJJT0Q7Ozs7CisyNDg5O0RJR0lUIFRXTyBGVUxMIFNUT1A7Tm87MDtFTjs8Y29tcGF0PiAwMDMyIDAwMkU7OzI7MjtOO0RJR0lUIFRXTyBQRVJJT0Q7Ozs7CisyNDhBO0RJR0lUIFRIUkVFIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzMgMDAyRTs7MzszO047RElHSVQgVEhSRUUgUEVSSU9EOzs7OworMjQ4QjtESUdJVCBGT1VSIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzQgMDAyRTs7NDs0O047RElHSVQgRk9VUiBQRVJJT0Q7Ozs7CisyNDhDO0RJR0lUIEZJVkUgRlVMTCBTVE9QO05vOzA7RU47PGNvbXBhdD4gMDAzNSAwMDJFOzs1OzU7TjtESUdJVCBGSVZFIFBFUklPRDs7OzsKKzI0OEQ7RElHSVQgU0lYIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzYgMDAyRTs7Njs2O047RElHSVQgU0lYIFBFUklPRDs7OzsKKzI0OEU7RElHSVQgU0VWRU4gRlVMTCBTVE9QO05vOzA7RU47PGNvbXBhdD4gMDAzNyAwMDJFOzs3Ozc7TjtESUdJVCBTRVZFTiBQRVJJT0Q7Ozs7CisyNDhGO0RJR0lUIEVJR0hUIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzggMDAyRTs7ODs4O047RElHSVQgRUlHSFQgUEVSSU9EOzs7OworMjQ5MDtESUdJVCBOSU5FIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzkgMDAyRTs7OTs5O047RElHSVQgTklORSBQRVJJT0Q7Ozs7CisyNDkxO05VTUJFUiBURU4gRlVMTCBTVE9QO05vOzA7RU47PGNvbXBhdD4gMDAzMSAwMDMwIDAwMkU7OzsxMDtOO05VTUJFUiBURU4gUEVSSU9EOzs7OworMjQ5MjtOVU1CRVIgRUxFVkVOIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzEgMDAzMSAwMDJFOzs7MTE7TjtOVU1CRVIgRUxFVkVOIFBFUklPRDs7OzsKKzI0OTM7TlVNQkVSIFRXRUxWRSBGVUxMIFNUT1A7Tm87MDtFTjs8Y29tcGF0PiAwMDMxIDAwMzIgMDAyRTs7OzEyO047TlVNQkVSIFRXRUxWRSBQRVJJT0Q7Ozs7CisyNDk0O05VTUJFUiBUSElSVEVFTiBGVUxMIFNUT1A7Tm87MDtFTjs8Y29tcGF0PiAwMDMxIDAwMzMgMDAyRTs7OzEzO047TlVNQkVSIFRISVJURUVOIFBFUklPRDs7OzsKKzI0OTU7TlVNQkVSIEZPVVJURUVOIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzEgMDAzNCAwMDJFOzs7MTQ7TjtOVU1CRVIgRk9VUlRFRU4gUEVSSU9EOzs7OworMjQ5NjtOVU1CRVIgRklGVEVFTiBGVUxMIFNUT1A7Tm87MDtFTjs8Y29tcGF0PiAwMDMxIDAwMzUgMDAyRTs7OzE1O047TlVNQkVSIEZJRlRFRU4gUEVSSU9EOzs7OworMjQ5NztOVU1CRVIgU0lYVEVFTiBGVUxMIFNUT1A7Tm87MDtFTjs8Y29tcGF0PiAwMDMxIDAwMzYgMDAyRTs7OzE2O047TlVNQkVSIFNJWFRFRU4gUEVSSU9EOzs7OworMjQ5ODtOVU1CRVIgU0VWRU5URUVOIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzEgMDAzNyAwMDJFOzs7MTc7TjtOVU1CRVIgU0VWRU5URUVOIFBFUklPRDs7OzsKKzI0OTk7TlVNQkVSIEVJR0hURUVOIEZVTEwgU1RPUDtObzswO0VOOzxjb21wYXQ+IDAwMzEgMDAzOCAwMDJFOzs7MTg7TjtOVU1CRVIgRUlHSFRFRU4gUEVSSU9EOzs7OworMjQ5QTtOVU1CRVIgTklORVRFRU4gRlVMTCBTVE9QO05vOzA7RU47PGNvbXBhdD4gMDAzMSAwMDM5IDAwMkU7OzsxOTtOO05VTUJFUiBOSU5FVEVFTiBQRVJJT0Q7Ozs7CisyNDlCO05VTUJFUiBUV0VOVFkgRlVMTCBTVE9QO05vOzA7RU47PGNvbXBhdD4gMDAzMiAwMDMwIDAwMkU7OzsyMDtOO05VTUJFUiBUV0VOVFkgUEVSSU9EOzs7OworMjQ5QztQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBBO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNjEgMDAyOTs7OztOOzs7OzsKKzI0OUQ7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgQjtTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDYyIDAwMjk7Ozs7Tjs7Ozs7CisyNDlFO1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEM7U287MDtMOzxjb21wYXQ+IDAwMjggMDA2MyAwMDI5Ozs7O047Ozs7OworMjQ5RjtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBEO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNjQgMDAyOTs7OztOOzs7OzsKKzI0QTA7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgRTtTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDY1IDAwMjk7Ozs7Tjs7Ozs7CisyNEExO1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEY7U287MDtMOzxjb21wYXQ+IDAwMjggMDA2NiAwMDI5Ozs7O047Ozs7OworMjRBMjtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBHO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNjcgMDAyOTs7OztOOzs7OzsKKzI0QTM7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgSDtTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDY4IDAwMjk7Ozs7Tjs7Ozs7CisyNEE0O1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEk7U287MDtMOzxjb21wYXQ+IDAwMjggMDA2OSAwMDI5Ozs7O047Ozs7OworMjRBNTtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBKO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNkEgMDAyOTs7OztOOzs7OzsKKzI0QTY7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgSztTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDZCIDAwMjk7Ozs7Tjs7Ozs7CisyNEE3O1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIEw7U287MDtMOzxjb21wYXQ+IDAwMjggMDA2QyAwMDI5Ozs7O047Ozs7OworMjRBODtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBNO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNkQgMDAyOTs7OztOOzs7OzsKKzI0QTk7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgTjtTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDZFIDAwMjk7Ozs7Tjs7Ozs7CisyNEFBO1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIE87U287MDtMOzxjb21wYXQ+IDAwMjggMDA2RiAwMDI5Ozs7O047Ozs7OworMjRBQjtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBQO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNzAgMDAyOTs7OztOOzs7OzsKKzI0QUM7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgUTtTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDcxIDAwMjk7Ozs7Tjs7Ozs7CisyNEFEO1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFI7U287MDtMOzxjb21wYXQ+IDAwMjggMDA3MiAwMDI5Ozs7O047Ozs7OworMjRBRTtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBTO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNzMgMDAyOTs7OztOOzs7OzsKKzI0QUY7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgVDtTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDc0IDAwMjk7Ozs7Tjs7Ozs7CisyNEIwO1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFU7U287MDtMOzxjb21wYXQ+IDAwMjggMDA3NSAwMDI5Ozs7O047Ozs7OworMjRCMTtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBWO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNzYgMDAyOTs7OztOOzs7OzsKKzI0QjI7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgVztTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDc3IDAwMjk7Ozs7Tjs7Ozs7CisyNEIzO1BBUkVOVEhFU0laRUQgTEFUSU4gU01BTEwgTEVUVEVSIFg7U287MDtMOzxjb21wYXQ+IDAwMjggMDA3OCAwMDI5Ozs7O047Ozs7OworMjRCNDtQQVJFTlRIRVNJWkVEIExBVElOIFNNQUxMIExFVFRFUiBZO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDAwNzkgMDAyOTs7OztOOzs7OzsKKzI0QjU7UEFSRU5USEVTSVpFRCBMQVRJTiBTTUFMTCBMRVRURVIgWjtTbzswO0w7PGNvbXBhdD4gMDAyOCAwMDdBIDAwMjk7Ozs7Tjs7Ozs7CisyNEI2O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQTtTbzswO0w7PGNpcmNsZT4gMDA0MTs7OztOOzs7OzI0RDA7CisyNEI3O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQjtTbzswO0w7PGNpcmNsZT4gMDA0Mjs7OztOOzs7OzI0RDE7CisyNEI4O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQztTbzswO0w7PGNpcmNsZT4gMDA0Mzs7OztOOzs7OzI0RDI7CisyNEI5O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRDtTbzswO0w7PGNpcmNsZT4gMDA0NDs7OztOOzs7OzI0RDM7CisyNEJBO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRTtTbzswO0w7PGNpcmNsZT4gMDA0NTs7OztOOzs7OzI0RDQ7CisyNEJCO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRjtTbzswO0w7PGNpcmNsZT4gMDA0Njs7OztOOzs7OzI0RDU7CisyNEJDO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRztTbzswO0w7PGNpcmNsZT4gMDA0Nzs7OztOOzs7OzI0RDY7CisyNEJEO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSDtTbzswO0w7PGNpcmNsZT4gMDA0ODs7OztOOzs7OzI0RDc7CisyNEJFO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSTtTbzswO0w7PGNpcmNsZT4gMDA0OTs7OztOOzs7OzI0RDg7CisyNEJGO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSjtTbzswO0w7PGNpcmNsZT4gMDA0QTs7OztOOzs7OzI0RDk7CisyNEMwO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSztTbzswO0w7PGNpcmNsZT4gMDA0Qjs7OztOOzs7OzI0REE7CisyNEMxO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTDtTbzswO0w7PGNpcmNsZT4gMDA0Qzs7OztOOzs7OzI0REI7CisyNEMyO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTTtTbzswO0w7PGNpcmNsZT4gMDA0RDs7OztOOzs7OzI0REM7CisyNEMzO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTjtTbzswO0w7PGNpcmNsZT4gMDA0RTs7OztOOzs7OzI0REQ7CisyNEM0O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTztTbzswO0w7PGNpcmNsZT4gMDA0Rjs7OztOOzs7OzI0REU7CisyNEM1O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUDtTbzswO0w7PGNpcmNsZT4gMDA1MDs7OztOOzs7OzI0REY7CisyNEM2O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUTtTbzswO0w7PGNpcmNsZT4gMDA1MTs7OztOOzs7OzI0RTA7CisyNEM3O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUjtTbzswO0w7PGNpcmNsZT4gMDA1Mjs7OztOOzs7OzI0RTE7CisyNEM4O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUztTbzswO0w7PGNpcmNsZT4gMDA1Mzs7OztOOzs7OzI0RTI7CisyNEM5O0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVDtTbzswO0w7PGNpcmNsZT4gMDA1NDs7OztOOzs7OzI0RTM7CisyNENBO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVTtTbzswO0w7PGNpcmNsZT4gMDA1NTs7OztOOzs7OzI0RTQ7CisyNENCO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVjtTbzswO0w7PGNpcmNsZT4gMDA1Njs7OztOOzs7OzI0RTU7CisyNENDO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVztTbzswO0w7PGNpcmNsZT4gMDA1Nzs7OztOOzs7OzI0RTY7CisyNENEO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWDtTbzswO0w7PGNpcmNsZT4gMDA1ODs7OztOOzs7OzI0RTc7CisyNENFO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWTtTbzswO0w7PGNpcmNsZT4gMDA1OTs7OztOOzs7OzI0RTg7CisyNENGO0NJUkNMRUQgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWjtTbzswO0w7PGNpcmNsZT4gMDA1QTs7OztOOzs7OzI0RTk7CisyNEQwO0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEE7U287MDtMOzxjaXJjbGU+IDAwNjE7Ozs7Tjs7OzI0QjY7OzI0QjYKKzI0RDE7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgQjtTbzswO0w7PGNpcmNsZT4gMDA2Mjs7OztOOzs7MjRCNzs7MjRCNworMjREMjtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBDO1NvOzA7TDs8Y2lyY2xlPiAwMDYzOzs7O047OzsyNEI4OzsyNEI4CisyNEQzO0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEQ7U287MDtMOzxjaXJjbGU+IDAwNjQ7Ozs7Tjs7OzI0Qjk7OzI0QjkKKzI0RDQ7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgRTtTbzswO0w7PGNpcmNsZT4gMDA2NTs7OztOOzs7MjRCQTs7MjRCQQorMjRENTtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBGO1NvOzA7TDs8Y2lyY2xlPiAwMDY2Ozs7O047OzsyNEJCOzsyNEJCCisyNEQ2O0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEc7U287MDtMOzxjaXJjbGU+IDAwNjc7Ozs7Tjs7OzI0QkM7OzI0QkMKKzI0RDc7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgSDtTbzswO0w7PGNpcmNsZT4gMDA2ODs7OztOOzs7MjRCRDs7MjRCRAorMjREODtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBJO1NvOzA7TDs8Y2lyY2xlPiAwMDY5Ozs7O047OzsyNEJFOzsyNEJFCisyNEQ5O0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIEo7U287MDtMOzxjaXJjbGU+IDAwNkE7Ozs7Tjs7OzI0QkY7OzI0QkYKKzI0REE7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgSztTbzswO0w7PGNpcmNsZT4gMDA2Qjs7OztOOzs7MjRDMDs7MjRDMAorMjREQjtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBMO1NvOzA7TDs8Y2lyY2xlPiAwMDZDOzs7O047OzsyNEMxOzsyNEMxCisyNERDO0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIE07U287MDtMOzxjaXJjbGU+IDAwNkQ7Ozs7Tjs7OzI0QzI7OzI0QzIKKzI0REQ7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgTjtTbzswO0w7PGNpcmNsZT4gMDA2RTs7OztOOzs7MjRDMzs7MjRDMworMjRERTtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBPO1NvOzA7TDs8Y2lyY2xlPiAwMDZGOzs7O047OzsyNEM0OzsyNEM0CisyNERGO0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFA7U287MDtMOzxjaXJjbGU+IDAwNzA7Ozs7Tjs7OzI0QzU7OzI0QzUKKzI0RTA7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgUTtTbzswO0w7PGNpcmNsZT4gMDA3MTs7OztOOzs7MjRDNjs7MjRDNgorMjRFMTtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBSO1NvOzA7TDs8Y2lyY2xlPiAwMDcyOzs7O047OzsyNEM3OzsyNEM3CisyNEUyO0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFM7U287MDtMOzxjaXJjbGU+IDAwNzM7Ozs7Tjs7OzI0Qzg7OzI0QzgKKzI0RTM7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgVDtTbzswO0w7PGNpcmNsZT4gMDA3NDs7OztOOzs7MjRDOTs7MjRDOQorMjRFNDtDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBVO1NvOzA7TDs8Y2lyY2xlPiAwMDc1Ozs7O047OzsyNENBOzsyNENBCisyNEU1O0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFY7U287MDtMOzxjaXJjbGU+IDAwNzY7Ozs7Tjs7OzI0Q0I7OzI0Q0IKKzI0RTY7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgVztTbzswO0w7PGNpcmNsZT4gMDA3Nzs7OztOOzs7MjRDQzs7MjRDQworMjRFNztDSVJDTEVEIExBVElOIFNNQUxMIExFVFRFUiBYO1NvOzA7TDs8Y2lyY2xlPiAwMDc4Ozs7O047OzsyNENEOzsyNENECisyNEU4O0NJUkNMRUQgTEFUSU4gU01BTEwgTEVUVEVSIFk7U287MDtMOzxjaXJjbGU+IDAwNzk7Ozs7Tjs7OzI0Q0U7OzI0Q0UKKzI0RTk7Q0lSQ0xFRCBMQVRJTiBTTUFMTCBMRVRURVIgWjtTbzswO0w7PGNpcmNsZT4gMDA3QTs7OztOOzs7MjRDRjs7MjRDRgorMjRFQTtDSVJDTEVEIERJR0lUIFpFUk87Tm87MDtFTjs8Y2lyY2xlPiAwMDMwOzswOzA7Tjs7Ozs7CisyNEVCO05FR0FUSVZFIENJUkNMRUQgTlVNQkVSIEVMRVZFTjtObzswO09OOzs7OzExO047Ozs7OworMjRFQztORUdBVElWRSBDSVJDTEVEIE5VTUJFUiBUV0VMVkU7Tm87MDtPTjs7OzsxMjtOOzs7OzsKKzI0RUQ7TkVHQVRJVkUgQ0lSQ0xFRCBOVU1CRVIgVEhJUlRFRU47Tm87MDtPTjs7OzsxMztOOzs7OzsKKzI0RUU7TkVHQVRJVkUgQ0lSQ0xFRCBOVU1CRVIgRk9VUlRFRU47Tm87MDtPTjs7OzsxNDtOOzs7OzsKKzI0RUY7TkVHQVRJVkUgQ0lSQ0xFRCBOVU1CRVIgRklGVEVFTjtObzswO09OOzs7OzE1O047Ozs7OworMjRGMDtORUdBVElWRSBDSVJDTEVEIE5VTUJFUiBTSVhURUVOO05vOzA7T047Ozs7MTY7Tjs7Ozs7CisyNEYxO05FR0FUSVZFIENJUkNMRUQgTlVNQkVSIFNFVkVOVEVFTjtObzswO09OOzs7OzE3O047Ozs7OworMjRGMjtORUdBVElWRSBDSVJDTEVEIE5VTUJFUiBFSUdIVEVFTjtObzswO09OOzs7OzE4O047Ozs7OworMjRGMztORUdBVElWRSBDSVJDTEVEIE5VTUJFUiBOSU5FVEVFTjtObzswO09OOzs7OzE5O047Ozs7OworMjRGNDtORUdBVElWRSBDSVJDTEVEIE5VTUJFUiBUV0VOVFk7Tm87MDtPTjs7OzsyMDtOOzs7OzsKKzI0RjU7RE9VQkxFIENJUkNMRUQgRElHSVQgT05FO05vOzA7T047OzsxOzE7Tjs7Ozs7CisyNEY2O0RPVUJMRSBDSVJDTEVEIERJR0lUIFRXTztObzswO09OOzs7MjsyO047Ozs7OworMjRGNztET1VCTEUgQ0lSQ0xFRCBESUdJVCBUSFJFRTtObzswO09OOzs7MzszO047Ozs7OworMjRGODtET1VCTEUgQ0lSQ0xFRCBESUdJVCBGT1VSO05vOzA7T047Ozs0OzQ7Tjs7Ozs7CisyNEY5O0RPVUJMRSBDSVJDTEVEIERJR0lUIEZJVkU7Tm87MDtPTjs7OzU7NTtOOzs7OzsKKzI0RkE7RE9VQkxFIENJUkNMRUQgRElHSVQgU0lYO05vOzA7T047Ozs2OzY7Tjs7Ozs7CisyNEZCO0RPVUJMRSBDSVJDTEVEIERJR0lUIFNFVkVOO05vOzA7T047Ozs3Ozc7Tjs7Ozs7CisyNEZDO0RPVUJMRSBDSVJDTEVEIERJR0lUIEVJR0hUO05vOzA7T047Ozs4Ozg7Tjs7Ozs7CisyNEZEO0RPVUJMRSBDSVJDTEVEIERJR0lUIE5JTkU7Tm87MDtPTjs7Ozk7OTtOOzs7OzsKKzI0RkU7RE9VQkxFIENJUkNMRUQgTlVNQkVSIFRFTjtObzswO09OOzs7OzEwO047Ozs7OworMjUwMDtCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIEhPUklaT05UQUw7Ozs7CisyNTAxO0JPWCBEUkFXSU5HUyBIRUFWWSBIT1JJWk9OVEFMO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgSE9SSVpPTlRBTDs7OzsKKzI1MDI7Qk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgVkVSVElDQUw7Ozs7CisyNTAzO0JPWCBEUkFXSU5HUyBIRUFWWSBWRVJUSUNBTDtTbzswO09OOzs7OztOO0ZPUk1TIEhFQVZZIFZFUlRJQ0FMOzs7OworMjUwNDtCT1ggRFJBV0lOR1MgTElHSFQgVFJJUExFIERBU0ggSE9SSVpPTlRBTDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIFRSSVBMRSBEQVNIIEhPUklaT05UQUw7Ozs7CisyNTA1O0JPWCBEUkFXSU5HUyBIRUFWWSBUUklQTEUgREFTSCBIT1JJWk9OVEFMO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgVFJJUExFIERBU0ggSE9SSVpPTlRBTDs7OzsKKzI1MDY7Qk9YIERSQVdJTkdTIExJR0hUIFRSSVBMRSBEQVNIIFZFUlRJQ0FMO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgVFJJUExFIERBU0ggVkVSVElDQUw7Ozs7CisyNTA3O0JPWCBEUkFXSU5HUyBIRUFWWSBUUklQTEUgREFTSCBWRVJUSUNBTDtTbzswO09OOzs7OztOO0ZPUk1TIEhFQVZZIFRSSVBMRSBEQVNIIFZFUlRJQ0FMOzs7OworMjUwODtCT1ggRFJBV0lOR1MgTElHSFQgUVVBRFJVUExFIERBU0ggSE9SSVpPTlRBTDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIFFVQURSVVBMRSBEQVNIIEhPUklaT05UQUw7Ozs7CisyNTA5O0JPWCBEUkFXSU5HUyBIRUFWWSBRVUFEUlVQTEUgREFTSCBIT1JJWk9OVEFMO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgUVVBRFJVUExFIERBU0ggSE9SSVpPTlRBTDs7OzsKKzI1MEE7Qk9YIERSQVdJTkdTIExJR0hUIFFVQURSVVBMRSBEQVNIIFZFUlRJQ0FMO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgUVVBRFJVUExFIERBU0ggVkVSVElDQUw7Ozs7CisyNTBCO0JPWCBEUkFXSU5HUyBIRUFWWSBRVUFEUlVQTEUgREFTSCBWRVJUSUNBTDtTbzswO09OOzs7OztOO0ZPUk1TIEhFQVZZIFFVQURSVVBMRSBEQVNIIFZFUlRJQ0FMOzs7OworMjUwQztCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBMSUdIVCBET1dOIEFORCBSSUdIVDs7OzsKKzI1MEQ7Qk9YIERSQVdJTkdTIERPV04gTElHSFQgQU5EIFJJR0hUIEhFQVZZO1NvOzA7T047Ozs7O047Rk9STVMgRE9XTiBMSUdIVCBBTkQgUklHSFQgSEVBVlk7Ozs7CisyNTBFO0JPWCBEUkFXSU5HUyBET1dOIEhFQVZZIEFORCBSSUdIVCBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIERPV04gSEVBVlkgQU5EIFJJR0hUIExJR0hUOzs7OworMjUwRjtCT1ggRFJBV0lOR1MgSEVBVlkgRE9XTiBBTkQgUklHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBIRUFWWSBET1dOIEFORCBSSUdIVDs7OzsKKzI1MTA7Qk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQ7U287MDtPTjs7Ozs7TjtGT1JNUyBMSUdIVCBET1dOIEFORCBMRUZUOzs7OworMjUxMTtCT1ggRFJBV0lOR1MgRE9XTiBMSUdIVCBBTkQgTEVGVCBIRUFWWTtTbzswO09OOzs7OztOO0ZPUk1TIERPV04gTElHSFQgQU5EIExFRlQgSEVBVlk7Ozs7CisyNTEyO0JPWCBEUkFXSU5HUyBET1dOIEhFQVZZIEFORCBMRUZUIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgRE9XTiBIRUFWWSBBTkQgTEVGVCBMSUdIVDs7OzsKKzI1MTM7Qk9YIERSQVdJTkdTIEhFQVZZIERPV04gQU5EIExFRlQ7U287MDtPTjs7Ozs7TjtGT1JNUyBIRUFWWSBET1dOIEFORCBMRUZUOzs7OworMjUxNDtCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgVVAgQU5EIFJJR0hUOzs7OworMjUxNTtCT1ggRFJBV0lOR1MgVVAgTElHSFQgQU5EIFJJR0hUIEhFQVZZO1NvOzA7T047Ozs7O047Rk9STVMgVVAgTElHSFQgQU5EIFJJR0hUIEhFQVZZOzs7OworMjUxNjtCT1ggRFJBV0lOR1MgVVAgSEVBVlkgQU5EIFJJR0hUIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgVVAgSEVBVlkgQU5EIFJJR0hUIExJR0hUOzs7OworMjUxNztCT1ggRFJBV0lOR1MgSEVBVlkgVVAgQU5EIFJJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgVVAgQU5EIFJJR0hUOzs7OworMjUxODtCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQ7U287MDtPTjs7Ozs7TjtGT1JNUyBMSUdIVCBVUCBBTkQgTEVGVDs7OzsKKzI1MTk7Qk9YIERSQVdJTkdTIFVQIExJR0hUIEFORCBMRUZUIEhFQVZZO1NvOzA7T047Ozs7O047Rk9STVMgVVAgTElHSFQgQU5EIExFRlQgSEVBVlk7Ozs7CisyNTFBO0JPWCBEUkFXSU5HUyBVUCBIRUFWWSBBTkQgTEVGVCBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIFVQIEhFQVZZIEFORCBMRUZUIExJR0hUOzs7OworMjUxQjtCT1ggRFJBV0lOR1MgSEVBVlkgVVAgQU5EIExFRlQ7U287MDtPTjs7Ozs7TjtGT1JNUyBIRUFWWSBVUCBBTkQgTEVGVDs7OzsKKzI1MUM7Qk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVDs7OzsKKzI1MUQ7Qk9YIERSQVdJTkdTIFZFUlRJQ0FMIExJR0hUIEFORCBSSUdIVCBIRUFWWTtTbzswO09OOzs7OztOO0ZPUk1TIFZFUlRJQ0FMIExJR0hUIEFORCBSSUdIVCBIRUFWWTs7OzsKKzI1MUU7Qk9YIERSQVdJTkdTIFVQIEhFQVZZIEFORCBSSUdIVCBET1dOIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgVVAgSEVBVlkgQU5EIFJJR0hUIERPV04gTElHSFQ7Ozs7CisyNTFGO0JPWCBEUkFXSU5HUyBET1dOIEhFQVZZIEFORCBSSUdIVCBVUCBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIERPV04gSEVBVlkgQU5EIFJJR0hUIFVQIExJR0hUOzs7OworMjUyMDtCT1ggRFJBV0lOR1MgVkVSVElDQUwgSEVBVlkgQU5EIFJJR0hUIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgVkVSVElDQUwgSEVBVlkgQU5EIFJJR0hUIExJR0hUOzs7OworMjUyMTtCT1ggRFJBV0lOR1MgRE9XTiBMSUdIVCBBTkQgUklHSFQgVVAgSEVBVlk7U287MDtPTjs7Ozs7TjtGT1JNUyBET1dOIExJR0hUIEFORCBSSUdIVCBVUCBIRUFWWTs7OzsKKzI1MjI7Qk9YIERSQVdJTkdTIFVQIExJR0hUIEFORCBSSUdIVCBET1dOIEhFQVZZO1NvOzA7T047Ozs7O047Rk9STVMgVVAgTElHSFQgQU5EIFJJR0hUIERPV04gSEVBVlk7Ozs7CisyNTIzO0JPWCBEUkFXSU5HUyBIRUFWWSBWRVJUSUNBTCBBTkQgUklHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBIRUFWWSBWRVJUSUNBTCBBTkQgUklHSFQ7Ozs7CisyNTI0O0JPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUOzs7OworMjUyNTtCT1ggRFJBV0lOR1MgVkVSVElDQUwgTElHSFQgQU5EIExFRlQgSEVBVlk7U287MDtPTjs7Ozs7TjtGT1JNUyBWRVJUSUNBTCBMSUdIVCBBTkQgTEVGVCBIRUFWWTs7OzsKKzI1MjY7Qk9YIERSQVdJTkdTIFVQIEhFQVZZIEFORCBMRUZUIERPV04gTElHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBVUCBIRUFWWSBBTkQgTEVGVCBET1dOIExJR0hUOzs7OworMjUyNztCT1ggRFJBV0lOR1MgRE9XTiBIRUFWWSBBTkQgTEVGVCBVUCBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIERPV04gSEVBVlkgQU5EIExFRlQgVVAgTElHSFQ7Ozs7CisyNTI4O0JPWCBEUkFXSU5HUyBWRVJUSUNBTCBIRUFWWSBBTkQgTEVGVCBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIFZFUlRJQ0FMIEhFQVZZIEFORCBMRUZUIExJR0hUOzs7OworMjUyOTtCT1ggRFJBV0lOR1MgRE9XTiBMSUdIVCBBTkQgTEVGVCBVUCBIRUFWWTtTbzswO09OOzs7OztOO0ZPUk1TIERPV04gTElHSFQgQU5EIExFRlQgVVAgSEVBVlk7Ozs7CisyNTJBO0JPWCBEUkFXSU5HUyBVUCBMSUdIVCBBTkQgTEVGVCBET1dOIEhFQVZZO1NvOzA7T047Ozs7O047Rk9STVMgVVAgTElHSFQgQU5EIExFRlQgRE9XTiBIRUFWWTs7OzsKKzI1MkI7Qk9YIERSQVdJTkdTIEhFQVZZIFZFUlRJQ0FMIEFORCBMRUZUO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgVkVSVElDQUwgQU5EIExFRlQ7Ozs7CisyNTJDO0JPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTDs7OzsKKzI1MkQ7Qk9YIERSQVdJTkdTIExFRlQgSEVBVlkgQU5EIFJJR0hUIERPV04gTElHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBMRUZUIEhFQVZZIEFORCBSSUdIVCBET1dOIExJR0hUOzs7OworMjUyRTtCT1ggRFJBV0lOR1MgUklHSFQgSEVBVlkgQU5EIExFRlQgRE9XTiBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIFJJR0hUIEhFQVZZIEFORCBMRUZUIERPV04gTElHSFQ7Ozs7CisyNTJGO0JPWCBEUkFXSU5HUyBET1dOIExJR0hUIEFORCBIT1JJWk9OVEFMIEhFQVZZO1NvOzA7T047Ozs7O047Rk9STVMgRE9XTiBMSUdIVCBBTkQgSE9SSVpPTlRBTCBIRUFWWTs7OzsKKzI1MzA7Qk9YIERSQVdJTkdTIERPV04gSEVBVlkgQU5EIEhPUklaT05UQUwgTElHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBET1dOIEhFQVZZIEFORCBIT1JJWk9OVEFMIExJR0hUOzs7OworMjUzMTtCT1ggRFJBV0lOR1MgUklHSFQgTElHSFQgQU5EIExFRlQgRE9XTiBIRUFWWTtTbzswO09OOzs7OztOO0ZPUk1TIFJJR0hUIExJR0hUIEFORCBMRUZUIERPV04gSEVBVlk7Ozs7CisyNTMyO0JPWCBEUkFXSU5HUyBMRUZUIExJR0hUIEFORCBSSUdIVCBET1dOIEhFQVZZO1NvOzA7T047Ozs7O047Rk9STVMgTEVGVCBMSUdIVCBBTkQgUklHSFQgRE9XTiBIRUFWWTs7OzsKKzI1MzM7Qk9YIERSQVdJTkdTIEhFQVZZIERPV04gQU5EIEhPUklaT05UQUw7U287MDtPTjs7Ozs7TjtGT1JNUyBIRUFWWSBET1dOIEFORCBIT1JJWk9OVEFMOzs7OworMjUzNDtCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUw7U287MDtPTjs7Ozs7TjtGT1JNUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTDs7OzsKKzI1MzU7Qk9YIERSQVdJTkdTIExFRlQgSEVBVlkgQU5EIFJJR0hUIFVQIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgTEVGVCBIRUFWWSBBTkQgUklHSFQgVVAgTElHSFQ7Ozs7CisyNTM2O0JPWCBEUkFXSU5HUyBSSUdIVCBIRUFWWSBBTkQgTEVGVCBVUCBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIFJJR0hUIEhFQVZZIEFORCBMRUZUIFVQIExJR0hUOzs7OworMjUzNztCT1ggRFJBV0lOR1MgVVAgTElHSFQgQU5EIEhPUklaT05UQUwgSEVBVlk7U287MDtPTjs7Ozs7TjtGT1JNUyBVUCBMSUdIVCBBTkQgSE9SSVpPTlRBTCBIRUFWWTs7OzsKKzI1Mzg7Qk9YIERSQVdJTkdTIFVQIEhFQVZZIEFORCBIT1JJWk9OVEFMIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgVVAgSEVBVlkgQU5EIEhPUklaT05UQUwgTElHSFQ7Ozs7CisyNTM5O0JPWCBEUkFXSU5HUyBSSUdIVCBMSUdIVCBBTkQgTEVGVCBVUCBIRUFWWTtTbzswO09OOzs7OztOO0ZPUk1TIFJJR0hUIExJR0hUIEFORCBMRUZUIFVQIEhFQVZZOzs7OworMjUzQTtCT1ggRFJBV0lOR1MgTEVGVCBMSUdIVCBBTkQgUklHSFQgVVAgSEVBVlk7U287MDtPTjs7Ozs7TjtGT1JNUyBMRUZUIExJR0hUIEFORCBSSUdIVCBVUCBIRUFWWTs7OzsKKzI1M0I7Qk9YIERSQVdJTkdTIEhFQVZZIFVQIEFORCBIT1JJWk9OVEFMO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgVVAgQU5EIEhPUklaT05UQUw7Ozs7CisyNTNDO0JPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMOzs7OworMjUzRDtCT1ggRFJBV0lOR1MgTEVGVCBIRUFWWSBBTkQgUklHSFQgVkVSVElDQUwgTElHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBMRUZUIEhFQVZZIEFORCBSSUdIVCBWRVJUSUNBTCBMSUdIVDs7OzsKKzI1M0U7Qk9YIERSQVdJTkdTIFJJR0hUIEhFQVZZIEFORCBMRUZUIFZFUlRJQ0FMIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgUklHSFQgSEVBVlkgQU5EIExFRlQgVkVSVElDQUwgTElHSFQ7Ozs7CisyNTNGO0JPWCBEUkFXSU5HUyBWRVJUSUNBTCBMSUdIVCBBTkQgSE9SSVpPTlRBTCBIRUFWWTtTbzswO09OOzs7OztOO0ZPUk1TIFZFUlRJQ0FMIExJR0hUIEFORCBIT1JJWk9OVEFMIEhFQVZZOzs7OworMjU0MDtCT1ggRFJBV0lOR1MgVVAgSEVBVlkgQU5EIERPV04gSE9SSVpPTlRBTCBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIFVQIEhFQVZZIEFORCBET1dOIEhPUklaT05UQUwgTElHSFQ7Ozs7CisyNTQxO0JPWCBEUkFXSU5HUyBET1dOIEhFQVZZIEFORCBVUCBIT1JJWk9OVEFMIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgRE9XTiBIRUFWWSBBTkQgVVAgSE9SSVpPTlRBTCBMSUdIVDs7OzsKKzI1NDI7Qk9YIERSQVdJTkdTIFZFUlRJQ0FMIEhFQVZZIEFORCBIT1JJWk9OVEFMIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgVkVSVElDQUwgSEVBVlkgQU5EIEhPUklaT05UQUwgTElHSFQ7Ozs7CisyNTQzO0JPWCBEUkFXSU5HUyBMRUZUIFVQIEhFQVZZIEFORCBSSUdIVCBET1dOIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgTEVGVCBVUCBIRUFWWSBBTkQgUklHSFQgRE9XTiBMSUdIVDs7OzsKKzI1NDQ7Qk9YIERSQVdJTkdTIFJJR0hUIFVQIEhFQVZZIEFORCBMRUZUIERPV04gTElHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBSSUdIVCBVUCBIRUFWWSBBTkQgTEVGVCBET1dOIExJR0hUOzs7OworMjU0NTtCT1ggRFJBV0lOR1MgTEVGVCBET1dOIEhFQVZZIEFORCBSSUdIVCBVUCBMSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIExFRlQgRE9XTiBIRUFWWSBBTkQgUklHSFQgVVAgTElHSFQ7Ozs7CisyNTQ2O0JPWCBEUkFXSU5HUyBSSUdIVCBET1dOIEhFQVZZIEFORCBMRUZUIFVQIExJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgUklHSFQgRE9XTiBIRUFWWSBBTkQgTEVGVCBVUCBMSUdIVDs7OzsKKzI1NDc7Qk9YIERSQVdJTkdTIERPV04gTElHSFQgQU5EIFVQIEhPUklaT05UQUwgSEVBVlk7U287MDtPTjs7Ozs7TjtGT1JNUyBET1dOIExJR0hUIEFORCBVUCBIT1JJWk9OVEFMIEhFQVZZOzs7OworMjU0ODtCT1ggRFJBV0lOR1MgVVAgTElHSFQgQU5EIERPV04gSE9SSVpPTlRBTCBIRUFWWTtTbzswO09OOzs7OztOO0ZPUk1TIFVQIExJR0hUIEFORCBET1dOIEhPUklaT05UQUwgSEVBVlk7Ozs7CisyNTQ5O0JPWCBEUkFXSU5HUyBSSUdIVCBMSUdIVCBBTkQgTEVGVCBWRVJUSUNBTCBIRUFWWTtTbzswO09OOzs7OztOO0ZPUk1TIFJJR0hUIExJR0hUIEFORCBMRUZUIFZFUlRJQ0FMIEhFQVZZOzs7OworMjU0QTtCT1ggRFJBV0lOR1MgTEVGVCBMSUdIVCBBTkQgUklHSFQgVkVSVElDQUwgSEVBVlk7U287MDtPTjs7Ozs7TjtGT1JNUyBMRUZUIExJR0hUIEFORCBSSUdIVCBWRVJUSUNBTCBIRUFWWTs7OzsKKzI1NEI7Qk9YIERSQVdJTkdTIEhFQVZZIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgVkVSVElDQUwgQU5EIEhPUklaT05UQUw7Ozs7CisyNTRDO0JPWCBEUkFXSU5HUyBMSUdIVCBET1VCTEUgREFTSCBIT1JJWk9OVEFMO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgRE9VQkxFIERBU0ggSE9SSVpPTlRBTDs7OzsKKzI1NEQ7Qk9YIERSQVdJTkdTIEhFQVZZIERPVUJMRSBEQVNIIEhPUklaT05UQUw7U287MDtPTjs7Ozs7TjtGT1JNUyBIRUFWWSBET1VCTEUgREFTSCBIT1JJWk9OVEFMOzs7OworMjU0RTtCT1ggRFJBV0lOR1MgTElHSFQgRE9VQkxFIERBU0ggVkVSVElDQUw7U287MDtPTjs7Ozs7TjtGT1JNUyBMSUdIVCBET1VCTEUgREFTSCBWRVJUSUNBTDs7OzsKKzI1NEY7Qk9YIERSQVdJTkdTIEhFQVZZIERPVUJMRSBEQVNIIFZFUlRJQ0FMO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgRE9VQkxFIERBU0ggVkVSVElDQUw7Ozs7CisyNTUwO0JPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTDtTbzswO09OOzs7OztOO0ZPUk1TIERPVUJMRSBIT1JJWk9OVEFMOzs7OworMjU1MTtCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMO1NvOzA7T047Ozs7O047Rk9STVMgRE9VQkxFIFZFUlRJQ0FMOzs7OworMjU1MjtCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRTtTbzswO09OOzs7OztOO0ZPUk1TIERPV04gU0lOR0xFIEFORCBSSUdIVCBET1VCTEU7Ozs7CisyNTUzO0JPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFO1NvOzA7T047Ozs7O047Rk9STVMgRE9XTiBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRTs7OzsKKzI1NTQ7Qk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIERPVUJMRSBET1dOIEFORCBSSUdIVDs7OzsKKzI1NTU7Qk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRTtTbzswO09OOzs7OztOO0ZPUk1TIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRTs7OzsKKzI1NTY7Qk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRTtTbzswO09OOzs7OztOO0ZPUk1TIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRTs7OzsKKzI1NTc7Qk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUO1NvOzA7T047Ozs7O047Rk9STVMgRE9VQkxFIERPV04gQU5EIExFRlQ7Ozs7CisyNTU4O0JPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRTtTbzswO09OOzs7OztOO0ZPUk1TIFVQIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFOzs7OworMjU1OTtCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEU7U287MDtPTjs7Ozs7TjtGT1JNUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRTs7OzsKKzI1NUE7Qk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBET1VCTEUgVVAgQU5EIFJJR0hUOzs7OworMjU1QjtCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRTtTbzswO09OOzs7OztOO0ZPUk1TIFVQIFNJTkdMRSBBTkQgTEVGVCBET1VCTEU7Ozs7CisyNTVDO0JPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIExFRlQgU0lOR0xFO1NvOzA7T047Ozs7O047Rk9STVMgVVAgRE9VQkxFIEFORCBMRUZUIFNJTkdMRTs7OzsKKzI1NUQ7Qk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVDtTbzswO09OOzs7OztOO0ZPUk1TIERPVUJMRSBVUCBBTkQgTEVGVDs7OzsKKzI1NUU7Qk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFO1NvOzA7T047Ozs7O047Rk9STVMgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEU7Ozs7CisyNTVGO0JPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRTtTbzswO09OOzs7OztOO0ZPUk1TIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFOzs7OworMjU2MDtCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQ7Ozs7CisyNTYxO0JPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFO1NvOzA7T047Ozs7O047Rk9STVMgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRTs7OzsKKzI1NjI7Qk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgTEVGVCBTSU5HTEU7U287MDtPTjs7Ozs7TjtGT1JNUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFOzs7OworMjU2MztCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUO1NvOzA7T047Ozs7O047Rk9STVMgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUOzs7OworMjU2NDtCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFO1NvOzA7T047Ozs7O047Rk9STVMgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFOzs7OworMjU2NTtCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFO1NvOzA7T047Ozs7O047Rk9STVMgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFOzs7OworMjU2NjtCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUw7U287MDtPTjs7Ozs7TjtGT1JNUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTDs7OzsKKzI1Njc7Qk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEU7U287MDtPTjs7Ozs7TjtGT1JNUyBVUCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFOzs7OworMjU2ODtCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRTtTbzswO09OOzs7OztOO0ZPUk1TIFVQIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEU7Ozs7CisyNTY5O0JPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUw7U287MDtPTjs7Ozs7TjtGT1JNUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUw7Ozs7CisyNTZBO0JPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFO1NvOzA7T047Ozs7O047Rk9STVMgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRTs7OzsKKzI1NkI7Qk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEU7U287MDtPTjs7Ozs7TjtGT1JNUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFOzs7OworMjU2QztCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMO1NvOzA7T047Ozs7O047Rk9STVMgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMOzs7OworMjU2RDtCT1ggRFJBV0lOR1MgTElHSFQgQVJDIERPV04gQU5EIFJJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgQVJDIERPV04gQU5EIFJJR0hUOzs7OworMjU2RTtCT1ggRFJBV0lOR1MgTElHSFQgQVJDIERPV04gQU5EIExFRlQ7U287MDtPTjs7Ozs7TjtGT1JNUyBMSUdIVCBBUkMgRE9XTiBBTkQgTEVGVDs7OzsKKzI1NkY7Qk9YIERSQVdJTkdTIExJR0hUIEFSQyBVUCBBTkQgTEVGVDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIEFSQyBVUCBBTkQgTEVGVDs7OzsKKzI1NzA7Qk9YIERSQVdJTkdTIExJR0hUIEFSQyBVUCBBTkQgUklHSFQ7U287MDtPTjs7Ozs7TjtGT1JNUyBMSUdIVCBBUkMgVVAgQU5EIFJJR0hUOzs7OworMjU3MTtCT1ggRFJBV0lOR1MgTElHSFQgRElBR09OQUwgVVBQRVIgUklHSFQgVE8gTE9XRVIgTEVGVDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIERJQUdPTkFMIFVQUEVSIFJJR0hUIFRPIExPV0VSIExFRlQ7Ozs7CisyNTcyO0JPWCBEUkFXSU5HUyBMSUdIVCBESUFHT05BTCBVUFBFUiBMRUZUIFRPIExPV0VSIFJJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgRElBR09OQUwgVVBQRVIgTEVGVCBUTyBMT1dFUiBSSUdIVDs7OzsKKzI1NzM7Qk9YIERSQVdJTkdTIExJR0hUIERJQUdPTkFMIENST1NTO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgRElBR09OQUwgQ1JPU1M7Ozs7CisyNTc0O0JPWCBEUkFXSU5HUyBMSUdIVCBMRUZUO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgTEVGVDs7OzsKKzI1NzU7Qk9YIERSQVdJTkdTIExJR0hUIFVQO1NvOzA7T047Ozs7O047Rk9STVMgTElHSFQgVVA7Ozs7CisyNTc2O0JPWCBEUkFXSU5HUyBMSUdIVCBSSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIFJJR0hUOzs7OworMjU3NztCT1ggRFJBV0lOR1MgTElHSFQgRE9XTjtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIERPV047Ozs7CisyNTc4O0JPWCBEUkFXSU5HUyBIRUFWWSBMRUZUO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgTEVGVDs7OzsKKzI1Nzk7Qk9YIERSQVdJTkdTIEhFQVZZIFVQO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgVVA7Ozs7CisyNTdBO0JPWCBEUkFXSU5HUyBIRUFWWSBSSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIEhFQVZZIFJJR0hUOzs7OworMjU3QjtCT1ggRFJBV0lOR1MgSEVBVlkgRE9XTjtTbzswO09OOzs7OztOO0ZPUk1TIEhFQVZZIERPV047Ozs7CisyNTdDO0JPWCBEUkFXSU5HUyBMSUdIVCBMRUZUIEFORCBIRUFWWSBSSUdIVDtTbzswO09OOzs7OztOO0ZPUk1TIExJR0hUIExFRlQgQU5EIEhFQVZZIFJJR0hUOzs7OworMjU3RDtCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhFQVZZIERPV047U287MDtPTjs7Ozs7TjtGT1JNUyBMSUdIVCBVUCBBTkQgSEVBVlkgRE9XTjs7OzsKKzI1N0U7Qk9YIERSQVdJTkdTIEhFQVZZIExFRlQgQU5EIExJR0hUIFJJR0hUO1NvOzA7T047Ozs7O047Rk9STVMgSEVBVlkgTEVGVCBBTkQgTElHSFQgUklHSFQ7Ozs7CisyNTdGO0JPWCBEUkFXSU5HUyBIRUFWWSBVUCBBTkQgTElHSFQgRE9XTjtTbzswO09OOzs7OztOO0ZPUk1TIEhFQVZZIFVQIEFORCBMSUdIVCBET1dOOzs7OworMjU4MDtVUFBFUiBIQUxGIEJMT0NLO1NvOzA7T047Ozs7O047Ozs7OworMjU4MTtMT1dFUiBPTkUgRUlHSFRIIEJMT0NLO1NvOzA7T047Ozs7O047Ozs7OworMjU4MjtMT1dFUiBPTkUgUVVBUlRFUiBCTE9DSztTbzswO09OOzs7OztOOzs7OzsKKzI1ODM7TE9XRVIgVEhSRUUgRUlHSFRIUyBCTE9DSztTbzswO09OOzs7OztOOzs7OzsKKzI1ODQ7TE9XRVIgSEFMRiBCTE9DSztTbzswO09OOzs7OztOOzs7OzsKKzI1ODU7TE9XRVIgRklWRSBFSUdIVEhTIEJMT0NLO1NvOzA7T047Ozs7O047Ozs7OworMjU4NjtMT1dFUiBUSFJFRSBRVUFSVEVSUyBCTE9DSztTbzswO09OOzs7OztOO0xPV0VSIFRIUkVFIFFVQVJURVIgQkxPQ0s7Ozs7CisyNTg3O0xPV0VSIFNFVkVOIEVJR0hUSFMgQkxPQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTg4O0ZVTEwgQkxPQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTg5O0xFRlQgU0VWRU4gRUlHSFRIUyBCTE9DSztTbzswO09OOzs7OztOOzs7OzsKKzI1OEE7TEVGVCBUSFJFRSBRVUFSVEVSUyBCTE9DSztTbzswO09OOzs7OztOO0xFRlQgVEhSRUUgUVVBUlRFUiBCTE9DSzs7OzsKKzI1OEI7TEVGVCBGSVZFIEVJR0hUSFMgQkxPQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNThDO0xFRlQgSEFMRiBCTE9DSztTbzswO09OOzs7OztOOzs7OzsKKzI1OEQ7TEVGVCBUSFJFRSBFSUdIVEhTIEJMT0NLO1NvOzA7T047Ozs7O047Ozs7OworMjU4RTtMRUZUIE9ORSBRVUFSVEVSIEJMT0NLO1NvOzA7T047Ozs7O047Ozs7OworMjU4RjtMRUZUIE9ORSBFSUdIVEggQkxPQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTkwO1JJR0hUIEhBTEYgQkxPQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTkxO0xJR0hUIFNIQURFO1NvOzA7T047Ozs7O047Ozs7OworMjU5MjtNRURJVU0gU0hBREU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTkzO0RBUksgU0hBREU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTk0O1VQUEVSIE9ORSBFSUdIVEggQkxPQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTk1O1JJR0hUIE9ORSBFSUdIVEggQkxPQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTk2O1FVQURSQU5UIExPV0VSIExFRlQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTk3O1FVQURSQU5UIExPV0VSIFJJR0hUO1NvOzA7T047Ozs7O047Ozs7OworMjU5ODtRVUFEUkFOVCBVUFBFUiBMRUZUO1NvOzA7T047Ozs7O047Ozs7OworMjU5OTtRVUFEUkFOVCBVUFBFUiBMRUZUIEFORCBMT1dFUiBMRUZUIEFORCBMT1dFUiBSSUdIVDtTbzswO09OOzs7OztOOzs7OzsKKzI1OUE7UVVBRFJBTlQgVVBQRVIgTEVGVCBBTkQgTE9XRVIgUklHSFQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTlCO1FVQURSQU5UIFVQUEVSIExFRlQgQU5EIFVQUEVSIFJJR0hUIEFORCBMT1dFUiBMRUZUO1NvOzA7T047Ozs7O047Ozs7OworMjU5QztRVUFEUkFOVCBVUFBFUiBMRUZUIEFORCBVUFBFUiBSSUdIVCBBTkQgTE9XRVIgUklHSFQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNTlEO1FVQURSQU5UIFVQUEVSIFJJR0hUO1NvOzA7T047Ozs7O047Ozs7OworMjU5RTtRVUFEUkFOVCBVUFBFUiBSSUdIVCBBTkQgTE9XRVIgTEVGVDtTbzswO09OOzs7OztOOzs7OzsKKzI1OUY7UVVBRFJBTlQgVVBQRVIgUklHSFQgQU5EIExPV0VSIExFRlQgQU5EIExPV0VSIFJJR0hUO1NvOzA7T047Ozs7O047Ozs7OworMjVBMDtCTEFDSyBTUVVBUkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUExO1dISVRFIFNRVUFSRTtTbzswO09OOzs7OztOOzs7OzsKKzI1QTI7V0hJVEUgU1FVQVJFIFdJVEggUk9VTkRFRCBDT1JORVJTO1NvOzA7T047Ozs7O047Ozs7OworMjVBMztXSElURSBTUVVBUkUgQ09OVEFJTklORyBCTEFDSyBTTUFMTCBTUVVBUkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUE0O1NRVUFSRSBXSVRIIEhPUklaT05UQUwgRklMTDtTbzswO09OOzs7OztOOzs7OzsKKzI1QTU7U1FVQVJFIFdJVEggVkVSVElDQUwgRklMTDtTbzswO09OOzs7OztOOzs7OzsKKzI1QTY7U1FVQVJFIFdJVEggT1JUSE9HT05BTCBDUk9TU0hBVENIIEZJTEw7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUE3O1NRVUFSRSBXSVRIIFVQUEVSIExFRlQgVE8gTE9XRVIgUklHSFQgRklMTDtTbzswO09OOzs7OztOOzs7OzsKKzI1QTg7U1FVQVJFIFdJVEggVVBQRVIgUklHSFQgVE8gTE9XRVIgTEVGVCBGSUxMO1NvOzA7T047Ozs7O047Ozs7OworMjVBOTtTUVVBUkUgV0lUSCBESUFHT05BTCBDUk9TU0hBVENIIEZJTEw7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUFBO0JMQUNLIFNNQUxMIFNRVUFSRTtTbzswO09OOzs7OztOOzs7OzsKKzI1QUI7V0hJVEUgU01BTEwgU1FVQVJFO1NvOzA7T047Ozs7O047Ozs7OworMjVBQztCTEFDSyBSRUNUQU5HTEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUFEO1dISVRFIFJFQ1RBTkdMRTtTbzswO09OOzs7OztOOzs7OzsKKzI1QUU7QkxBQ0sgVkVSVElDQUwgUkVDVEFOR0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVBRjtXSElURSBWRVJUSUNBTCBSRUNUQU5HTEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUIwO0JMQUNLIFBBUkFMTEVMT0dSQU07U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUIxO1dISVRFIFBBUkFMTEVMT0dSQU07U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUIyO0JMQUNLIFVQLVBPSU5USU5HIFRSSUFOR0xFO1NvOzA7T047Ozs7O047QkxBQ0sgVVAgUE9JTlRJTkcgVFJJQU5HTEU7Ozs7CisyNUIzO1dISVRFIFVQLVBPSU5USU5HIFRSSUFOR0xFO1NvOzA7T047Ozs7O047V0hJVEUgVVAgUE9JTlRJTkcgVFJJQU5HTEU7Ozs7CisyNUI0O0JMQUNLIFVQLVBPSU5USU5HIFNNQUxMIFRSSUFOR0xFO1NvOzA7T047Ozs7O047QkxBQ0sgVVAgUE9JTlRJTkcgU01BTEwgVFJJQU5HTEU7Ozs7CisyNUI1O1dISVRFIFVQLVBPSU5USU5HIFNNQUxMIFRSSUFOR0xFO1NvOzA7T047Ozs7O047V0hJVEUgVVAgUE9JTlRJTkcgU01BTEwgVFJJQU5HTEU7Ozs7CisyNUI2O0JMQUNLIFJJR0hULVBPSU5USU5HIFRSSUFOR0xFO1NvOzA7T047Ozs7O047QkxBQ0sgUklHSFQgUE9JTlRJTkcgVFJJQU5HTEU7Ozs7CisyNUI3O1dISVRFIFJJR0hULVBPSU5USU5HIFRSSUFOR0xFO1NtOzA7T047Ozs7O047V0hJVEUgUklHSFQgUE9JTlRJTkcgVFJJQU5HTEU7Ozs7CisyNUI4O0JMQUNLIFJJR0hULVBPSU5USU5HIFNNQUxMIFRSSUFOR0xFO1NvOzA7T047Ozs7O047QkxBQ0sgUklHSFQgUE9JTlRJTkcgU01BTEwgVFJJQU5HTEU7Ozs7CisyNUI5O1dISVRFIFJJR0hULVBPSU5USU5HIFNNQUxMIFRSSUFOR0xFO1NvOzA7T047Ozs7O047V0hJVEUgUklHSFQgUE9JTlRJTkcgU01BTEwgVFJJQU5HTEU7Ozs7CisyNUJBO0JMQUNLIFJJR0hULVBPSU5USU5HIFBPSU5URVI7U287MDtPTjs7Ozs7TjtCTEFDSyBSSUdIVCBQT0lOVElORyBQT0lOVEVSOzs7OworMjVCQjtXSElURSBSSUdIVC1QT0lOVElORyBQT0lOVEVSO1NvOzA7T047Ozs7O047V0hJVEUgUklHSFQgUE9JTlRJTkcgUE9JTlRFUjs7OzsKKzI1QkM7QkxBQ0sgRE9XTi1QT0lOVElORyBUUklBTkdMRTtTbzswO09OOzs7OztOO0JMQUNLIERPV04gUE9JTlRJTkcgVFJJQU5HTEU7Ozs7CisyNUJEO1dISVRFIERPV04tUE9JTlRJTkcgVFJJQU5HTEU7U287MDtPTjs7Ozs7TjtXSElURSBET1dOIFBPSU5USU5HIFRSSUFOR0xFOzs7OworMjVCRTtCTEFDSyBET1dOLVBPSU5USU5HIFNNQUxMIFRSSUFOR0xFO1NvOzA7T047Ozs7O047QkxBQ0sgRE9XTiBQT0lOVElORyBTTUFMTCBUUklBTkdMRTs7OzsKKzI1QkY7V0hJVEUgRE9XTi1QT0lOVElORyBTTUFMTCBUUklBTkdMRTtTbzswO09OOzs7OztOO1dISVRFIERPV04gUE9JTlRJTkcgU01BTEwgVFJJQU5HTEU7Ozs7CisyNUMwO0JMQUNLIExFRlQtUE9JTlRJTkcgVFJJQU5HTEU7U287MDtPTjs7Ozs7TjtCTEFDSyBMRUZUIFBPSU5USU5HIFRSSUFOR0xFOzs7OworMjVDMTtXSElURSBMRUZULVBPSU5USU5HIFRSSUFOR0xFO1NtOzA7T047Ozs7O047V0hJVEUgTEVGVCBQT0lOVElORyBUUklBTkdMRTs7OzsKKzI1QzI7QkxBQ0sgTEVGVC1QT0lOVElORyBTTUFMTCBUUklBTkdMRTtTbzswO09OOzs7OztOO0JMQUNLIExFRlQgUE9JTlRJTkcgU01BTEwgVFJJQU5HTEU7Ozs7CisyNUMzO1dISVRFIExFRlQtUE9JTlRJTkcgU01BTEwgVFJJQU5HTEU7U287MDtPTjs7Ozs7TjtXSElURSBMRUZUIFBPSU5USU5HIFNNQUxMIFRSSUFOR0xFOzs7OworMjVDNDtCTEFDSyBMRUZULVBPSU5USU5HIFBPSU5URVI7U287MDtPTjs7Ozs7TjtCTEFDSyBMRUZUIFBPSU5USU5HIFBPSU5URVI7Ozs7CisyNUM1O1dISVRFIExFRlQtUE9JTlRJTkcgUE9JTlRFUjtTbzswO09OOzs7OztOO1dISVRFIExFRlQgUE9JTlRJTkcgUE9JTlRFUjs7OzsKKzI1QzY7QkxBQ0sgRElBTU9ORDtTbzswO09OOzs7OztOOzs7OzsKKzI1Qzc7V0hJVEUgRElBTU9ORDtTbzswO09OOzs7OztOOzs7OzsKKzI1Qzg7V0hJVEUgRElBTU9ORCBDT05UQUlOSU5HIEJMQUNLIFNNQUxMIERJQU1PTkQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUM5O0ZJU0hFWUU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUNBO0xPWkVOR0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUNCO1dISVRFIENJUkNMRTtTbzswO09OOzs7OztOOzs7OzsKKzI1Q0M7RE9UVEVEIENJUkNMRTtTbzswO09OOzs7OztOOzs7OzsKKzI1Q0Q7Q0lSQ0xFIFdJVEggVkVSVElDQUwgRklMTDtTbzswO09OOzs7OztOOzs7OzsKKzI1Q0U7QlVMTFNFWUU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUNGO0JMQUNLIENJUkNMRTtTbzswO09OOzs7OztOOzs7OzsKKzI1RDA7Q0lSQ0xFIFdJVEggTEVGVCBIQUxGIEJMQUNLO1NvOzA7T047Ozs7O047Ozs7OworMjVEMTtDSVJDTEUgV0lUSCBSSUdIVCBIQUxGIEJMQUNLO1NvOzA7T047Ozs7O047Ozs7OworMjVEMjtDSVJDTEUgV0lUSCBMT1dFUiBIQUxGIEJMQUNLO1NvOzA7T047Ozs7O047Ozs7OworMjVEMztDSVJDTEUgV0lUSCBVUFBFUiBIQUxGIEJMQUNLO1NvOzA7T047Ozs7O047Ozs7OworMjVENDtDSVJDTEUgV0lUSCBVUFBFUiBSSUdIVCBRVUFEUkFOVCBCTEFDSztTbzswO09OOzs7OztOOzs7OzsKKzI1RDU7Q0lSQ0xFIFdJVEggQUxMIEJVVCBVUFBFUiBMRUZUIFFVQURSQU5UIEJMQUNLO1NvOzA7T047Ozs7O047Ozs7OworMjVENjtMRUZUIEhBTEYgQkxBQ0sgQ0lSQ0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVENztSSUdIVCBIQUxGIEJMQUNLIENJUkNMRTtTbzswO09OOzs7OztOOzs7OzsKKzI1RDg7SU5WRVJTRSBCVUxMRVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUQ5O0lOVkVSU0UgV0hJVEUgQ0lSQ0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVEQTtVUFBFUiBIQUxGIElOVkVSU0UgV0hJVEUgQ0lSQ0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVEQjtMT1dFUiBIQUxGIElOVkVSU0UgV0hJVEUgQ0lSQ0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVEQztVUFBFUiBMRUZUIFFVQURSQU5UIENJUkNVTEFSIEFSQztTbzswO09OOzs7OztOOzs7OzsKKzI1REQ7VVBQRVIgUklHSFQgUVVBRFJBTlQgQ0lSQ1VMQVIgQVJDO1NvOzA7T047Ozs7O047Ozs7OworMjVERTtMT1dFUiBSSUdIVCBRVUFEUkFOVCBDSVJDVUxBUiBBUkM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNURGO0xPV0VSIExFRlQgUVVBRFJBTlQgQ0lSQ1VMQVIgQVJDO1NvOzA7T047Ozs7O047Ozs7OworMjVFMDtVUFBFUiBIQUxGIENJUkNMRTtTbzswO09OOzs7OztOOzs7OzsKKzI1RTE7TE9XRVIgSEFMRiBDSVJDTEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUUyO0JMQUNLIExPV0VSIFJJR0hUIFRSSUFOR0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVFMztCTEFDSyBMT1dFUiBMRUZUIFRSSUFOR0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVFNDtCTEFDSyBVUFBFUiBMRUZUIFRSSUFOR0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVFNTtCTEFDSyBVUFBFUiBSSUdIVCBUUklBTkdMRTtTbzswO09OOzs7OztOOzs7OzsKKzI1RTY7V0hJVEUgQlVMTEVUO1NvOzA7T047Ozs7O047Ozs7OworMjVFNztTUVVBUkUgV0lUSCBMRUZUIEhBTEYgQkxBQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUU4O1NRVUFSRSBXSVRIIFJJR0hUIEhBTEYgQkxBQ0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUU5O1NRVUFSRSBXSVRIIFVQUEVSIExFRlQgRElBR09OQUwgSEFMRiBCTEFDSztTbzswO09OOzs7OztOOzs7OzsKKzI1RUE7U1FVQVJFIFdJVEggTE9XRVIgUklHSFQgRElBR09OQUwgSEFMRiBCTEFDSztTbzswO09OOzs7OztOOzs7OzsKKzI1RUI7V0hJVEUgU1FVQVJFIFdJVEggVkVSVElDQUwgQklTRUNUSU5HIExJTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUVDO1dISVRFIFVQLVBPSU5USU5HIFRSSUFOR0xFIFdJVEggRE9UO1NvOzA7T047Ozs7O047V0hJVEUgVVAgUE9JTlRJTkcgVFJJQU5HTEUgV0lUSCBET1Q7Ozs7CisyNUVEO1VQLVBPSU5USU5HIFRSSUFOR0xFIFdJVEggTEVGVCBIQUxGIEJMQUNLO1NvOzA7T047Ozs7O047VVAgUE9JTlRJTkcgVFJJQU5HTEUgV0lUSCBMRUZUIEhBTEYgQkxBQ0s7Ozs7CisyNUVFO1VQLVBPSU5USU5HIFRSSUFOR0xFIFdJVEggUklHSFQgSEFMRiBCTEFDSztTbzswO09OOzs7OztOO1VQIFBPSU5USU5HIFRSSUFOR0xFIFdJVEggUklHSFQgSEFMRiBCTEFDSzs7OzsKKzI1RUY7TEFSR0UgQ0lSQ0xFO1NvOzA7T047Ozs7O047Ozs7OworMjVGMDtXSElURSBTUVVBUkUgV0lUSCBVUFBFUiBMRUZUIFFVQURSQU5UO1NvOzA7T047Ozs7O047Ozs7OworMjVGMTtXSElURSBTUVVBUkUgV0lUSCBMT1dFUiBMRUZUIFFVQURSQU5UO1NvOzA7T047Ozs7O047Ozs7OworMjVGMjtXSElURSBTUVVBUkUgV0lUSCBMT1dFUiBSSUdIVCBRVUFEUkFOVDtTbzswO09OOzs7OztOOzs7OzsKKzI1RjM7V0hJVEUgU1FVQVJFIFdJVEggVVBQRVIgUklHSFQgUVVBRFJBTlQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUY0O1dISVRFIENJUkNMRSBXSVRIIFVQUEVSIExFRlQgUVVBRFJBTlQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUY1O1dISVRFIENJUkNMRSBXSVRIIExPV0VSIExFRlQgUVVBRFJBTlQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNUY2O1dISVRFIENJUkNMRSBXSVRIIExPV0VSIFJJR0hUIFFVQURSQU5UO1NvOzA7T047Ozs7O047Ozs7OworMjVGNztXSElURSBDSVJDTEUgV0lUSCBVUFBFUiBSSUdIVCBRVUFEUkFOVDtTbzswO09OOzs7OztOOzs7OzsKKzI1Rjg7VVBQRVIgTEVGVCBUUklBTkdMRTtTbTswO09OOzs7OztOOzs7OzsKKzI1Rjk7VVBQRVIgUklHSFQgVFJJQU5HTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyNUZBO0xPV0VSIExFRlQgVFJJQU5HTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyNUZCO1dISVRFIE1FRElVTSBTUVVBUkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyNUZDO0JMQUNLIE1FRElVTSBTUVVBUkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyNUZEO1dISVRFIE1FRElVTSBTTUFMTCBTUVVBUkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyNUZFO0JMQUNLIE1FRElVTSBTTUFMTCBTUVVBUkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyNUZGO0xPV0VSIFJJR0hUIFRSSUFOR0xFO1NtOzA7T047Ozs7O047Ozs7OworMjYwMDtCTEFDSyBTVU4gV0lUSCBSQVlTO1NvOzA7T047Ozs7O047Ozs7OworMjYwMTtDTE9VRDtTbzswO09OOzs7OztOOzs7OzsKKzI2MDI7VU1CUkVMTEE7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjAzO1NOT1dNQU47U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjA0O0NPTUVUO1NvOzA7T047Ozs7O047Ozs7OworMjYwNTtCTEFDSyBTVEFSO1NvOzA7T047Ozs7O047Ozs7OworMjYwNjtXSElURSBTVEFSO1NvOzA7T047Ozs7O047Ozs7OworMjYwNztMSUdIVE5JTkc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjA4O1RIVU5ERVJTVE9STTtTbzswO09OOzs7OztOOzs7OzsKKzI2MDk7U1VOO1NvOzA7T047Ozs7O047Ozs7OworMjYwQTtBU0NFTkRJTkcgTk9ERTtTbzswO09OOzs7OztOOzs7OzsKKzI2MEI7REVTQ0VORElORyBOT0RFO1NvOzA7T047Ozs7O047Ozs7OworMjYwQztDT05KVU5DVElPTjtTbzswO09OOzs7OztOOzs7OzsKKzI2MEQ7T1BQT1NJVElPTjtTbzswO09OOzs7OztOOzs7OzsKKzI2MEU7QkxBQ0sgVEVMRVBIT05FO1NvOzA7T047Ozs7O047Ozs7OworMjYwRjtXSElURSBURUxFUEhPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjEwO0JBTExPVCBCT1g7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjExO0JBTExPVCBCT1ggV0lUSCBDSEVDSztTbzswO09OOzs7OztOOzs7OzsKKzI2MTI7QkFMTE9UIEJPWCBXSVRIIFg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjEzO1NBTFRJUkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjE2O1dISVRFIFNIT0dJIFBJRUNFO1NvOzA7T047Ozs7O047Ozs7OworMjYxNztCTEFDSyBTSE9HSSBQSUVDRTtTbzswO09OOzs7OztOOzs7OzsKKzI2MTk7UkVWRVJTRUQgUk9UQVRFRCBGTE9SQUwgSEVBUlQgQlVMTEVUO1NvOzA7T047Ozs7O047Ozs7OworMjYxQTtCTEFDSyBMRUZUIFBPSU5USU5HIElOREVYO1NvOzA7T047Ozs7O047Ozs7OworMjYxQjtCTEFDSyBSSUdIVCBQT0lOVElORyBJTkRFWDtTbzswO09OOzs7OztOOzs7OzsKKzI2MUM7V0hJVEUgTEVGVCBQT0lOVElORyBJTkRFWDtTbzswO09OOzs7OztOOzs7OzsKKzI2MUQ7V0hJVEUgVVAgUE9JTlRJTkcgSU5ERVg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjFFO1dISVRFIFJJR0hUIFBPSU5USU5HIElOREVYO1NvOzA7T047Ozs7O047Ozs7OworMjYxRjtXSElURSBET1dOIFBPSU5USU5HIElOREVYO1NvOzA7T047Ozs7O047Ozs7OworMjYyMDtTS1VMTCBBTkQgQ1JPU1NCT05FUztTbzswO09OOzs7OztOOzs7OzsKKzI2MjE7Q0FVVElPTiBTSUdOO1NvOzA7T047Ozs7O047Ozs7OworMjYyMjtSQURJT0FDVElWRSBTSUdOO1NvOzA7T047Ozs7O047Ozs7OworMjYyMztCSU9IQVpBUkQgU0lHTjtTbzswO09OOzs7OztOOzs7OzsKKzI2MjQ7Q0FEVUNFVVM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjI1O0FOS0g7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjI2O09SVEhPRE9YIENST1NTO1NvOzA7T047Ozs7O047Ozs7OworMjYyNztDSEkgUkhPO1NvOzA7T047Ozs7O047Ozs7OworMjYyODtDUk9TUyBPRiBMT1JSQUlORTtTbzswO09OOzs7OztOOzs7OzsKKzI2Mjk7Q1JPU1MgT0YgSkVSVVNBTEVNO1NvOzA7T047Ozs7O047Ozs7OworMjYyQTtTVEFSIEFORCBDUkVTQ0VOVDtTbzswO09OOzs7OztOOzs7OzsKKzI2MkI7RkFSU0kgU1lNQk9MO1NvOzA7T047Ozs7O047U1lNQk9MIE9GIElSQU47Ozs7CisyNjJDO0FESSBTSEFLVEk7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjJEO0hBTU1FUiBBTkQgU0lDS0xFO1NvOzA7T047Ozs7O047Ozs7OworMjYyRTtQRUFDRSBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjJGO1lJTiBZQU5HO1NvOzA7T047Ozs7O047Ozs7OworMjYzMDtUUklHUkFNIEZPUiBIRUFWRU47U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjMxO1RSSUdSQU0gRk9SIExBS0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjMyO1RSSUdSQU0gRk9SIEZJUkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjMzO1RSSUdSQU0gRk9SIFRIVU5ERVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjM0O1RSSUdSQU0gRk9SIFdJTkQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjM1O1RSSUdSQU0gRk9SIFdBVEVSO1NvOzA7T047Ozs7O047Ozs7OworMjYzNjtUUklHUkFNIEZPUiBNT1VOVEFJTjtTbzswO09OOzs7OztOOzs7OzsKKzI2Mzc7VFJJR1JBTSBGT1IgRUFSVEg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjM4O1dIRUVMIE9GIERIQVJNQTtTbzswO09OOzs7OztOOzs7OzsKKzI2Mzk7V0hJVEUgRlJPV05JTkcgRkFDRTtTbzswO09OOzs7OztOOzs7OzsKKzI2M0E7V0hJVEUgU01JTElORyBGQUNFO1NvOzA7T047Ozs7O047Ozs7OworMjYzQjtCTEFDSyBTTUlMSU5HIEZBQ0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjNDO1dISVRFIFNVTiBXSVRIIFJBWVM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjNEO0ZJUlNUIFFVQVJURVIgTU9PTjtTbzswO09OOzs7OztOOzs7OzsKKzI2M0U7TEFTVCBRVUFSVEVSIE1PT047U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjNGO01FUkNVUlk7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjQwO0ZFTUFMRSBTSUdOO1NvOzA7T047Ozs7O047Ozs7OworMjY0MTtFQVJUSDtTbzswO09OOzs7OztOOzs7OzsKKzI2NDI7TUFMRSBTSUdOO1NvOzA7T047Ozs7O047Ozs7OworMjY0MztKVVBJVEVSO1NvOzA7T047Ozs7O047Ozs7OworMjY0NDtTQVRVUk47U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjQ1O1VSQU5VUztTbzswO09OOzs7OztOOzs7OzsKKzI2NDY7TkVQVFVORTtTbzswO09OOzs7OztOOzs7OzsKKzI2NDc7UExVVE87U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjQ4O0FSSUVTO1NvOzA7T047Ozs7O047Ozs7OworMjY0OTtUQVVSVVM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjRBO0dFTUlOSTtTbzswO09OOzs7OztOOzs7OzsKKzI2NEI7Q0FOQ0VSO1NvOzA7T047Ozs7O047Ozs7OworMjY0QztMRU87U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjREO1ZJUkdPO1NvOzA7T047Ozs7O047Ozs7OworMjY0RTtMSUJSQTtTbzswO09OOzs7OztOOzs7OzsKKzI2NEY7U0NPUlBJVVM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjUwO1NBR0lUVEFSSVVTO1NvOzA7T047Ozs7O047Ozs7OworMjY1MTtDQVBSSUNPUk47U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjUyO0FRVUFSSVVTO1NvOzA7T047Ozs7O047Ozs7OworMjY1MztQSVNDRVM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjU0O1dISVRFIENIRVNTIEtJTkc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjU1O1dISVRFIENIRVNTIFFVRUVOO1NvOzA7T047Ozs7O047Ozs7OworMjY1NjtXSElURSBDSEVTUyBST09LO1NvOzA7T047Ozs7O047Ozs7OworMjY1NztXSElURSBDSEVTUyBCSVNIT1A7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjU4O1dISVRFIENIRVNTIEtOSUdIVDtTbzswO09OOzs7OztOOzs7OzsKKzI2NTk7V0hJVEUgQ0hFU1MgUEFXTjtTbzswO09OOzs7OztOOzs7OzsKKzI2NUE7QkxBQ0sgQ0hFU1MgS0lORztTbzswO09OOzs7OztOOzs7OzsKKzI2NUI7QkxBQ0sgQ0hFU1MgUVVFRU47U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjVDO0JMQUNLIENIRVNTIFJPT0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjVEO0JMQUNLIENIRVNTIEJJU0hPUDtTbzswO09OOzs7OztOOzs7OzsKKzI2NUU7QkxBQ0sgQ0hFU1MgS05JR0hUO1NvOzA7T047Ozs7O047Ozs7OworMjY1RjtCTEFDSyBDSEVTUyBQQVdOO1NvOzA7T047Ozs7O047Ozs7OworMjY2MDtCTEFDSyBTUEFERSBTVUlUO1NvOzA7T047Ozs7O047Ozs7OworMjY2MTtXSElURSBIRUFSVCBTVUlUO1NvOzA7T047Ozs7O047Ozs7OworMjY2MjtXSElURSBESUFNT05EIFNVSVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjYzO0JMQUNLIENMVUIgU1VJVDtTbzswO09OOzs7OztOOzs7OzsKKzI2NjQ7V0hJVEUgU1BBREUgU1VJVDtTbzswO09OOzs7OztOOzs7OzsKKzI2NjU7QkxBQ0sgSEVBUlQgU1VJVDtTbzswO09OOzs7OztOOzs7OzsKKzI2NjY7QkxBQ0sgRElBTU9ORCBTVUlUO1NvOzA7T047Ozs7O047Ozs7OworMjY2NztXSElURSBDTFVCIFNVSVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjY4O0hPVCBTUFJJTkdTO1NvOzA7T047Ozs7O047Ozs7OworMjY2OTtRVUFSVEVSIE5PVEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjZBO0VJR0hUSCBOT1RFO1NvOzA7T047Ozs7O047Ozs7OworMjY2QjtCRUFNRUQgRUlHSFRIIE5PVEVTO1NvOzA7T047Ozs7O047QkFSUkVEIEVJR0hUSCBOT1RFUzs7OzsKKzI2NkM7QkVBTUVEIFNJWFRFRU5USCBOT1RFUztTbzswO09OOzs7OztOO0JBUlJFRCBTSVhURUVOVEggTk9URVM7Ozs7CisyNjZEO01VU0lDIEZMQVQgU0lHTjtTbzswO09OOzs7OztOO0ZMQVQ7Ozs7CisyNjZFO01VU0lDIE5BVFVSQUwgU0lHTjtTbzswO09OOzs7OztOO05BVFVSQUw7Ozs7CisyNjZGO01VU0lDIFNIQVJQIFNJR047U207MDtPTjs7Ozs7TjtTSEFSUDs7OzsKKzI2NzA7V0VTVCBTWVJJQUMgQ1JPU1M7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjcxO0VBU1QgU1lSSUFDIENST1NTO1NvOzA7T047Ozs7O047Ozs7OworMjY3MjtVTklWRVJTQUwgUkVDWUNMSU5HIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzI2NzM7UkVDWUNMSU5HIFNZTUJPTCBGT1IgVFlQRS0xIFBMQVNUSUNTO1NvOzA7T047Ozs7O047O3BldGU7OzsKKzI2NzQ7UkVDWUNMSU5HIFNZTUJPTCBGT1IgVFlQRS0yIFBMQVNUSUNTO1NvOzA7T047Ozs7O047O2hkcGU7OzsKKzI2NzU7UkVDWUNMSU5HIFNZTUJPTCBGT1IgVFlQRS0zIFBMQVNUSUNTO1NvOzA7T047Ozs7O047O3B2Yzs7OworMjY3NjtSRUNZQ0xJTkcgU1lNQk9MIEZPUiBUWVBFLTQgUExBU1RJQ1M7U287MDtPTjs7Ozs7Tjs7bGRwZTs7OworMjY3NztSRUNZQ0xJTkcgU1lNQk9MIEZPUiBUWVBFLTUgUExBU1RJQ1M7U287MDtPTjs7Ozs7Tjs7cHA7OzsKKzI2Nzg7UkVDWUNMSU5HIFNZTUJPTCBGT1IgVFlQRS02IFBMQVNUSUNTO1NvOzA7T047Ozs7O047O3BzOzs7CisyNjc5O1JFQ1lDTElORyBTWU1CT0wgRk9SIFRZUEUtNyBQTEFTVElDUztTbzswO09OOzs7OztOOztvdGhlcjs7OworMjY3QTtSRUNZQ0xJTkcgU1lNQk9MIEZPUiBHRU5FUklDIE1BVEVSSUFMUztTbzswO09OOzs7OztOOzs7OzsKKzI2N0I7QkxBQ0sgVU5JVkVSU0FMIFJFQ1lDTElORyBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNjdDO1JFQ1lDTEVEIFBBUEVSIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzI2N0Q7UEFSVElBTExZLVJFQ1lDTEVEIFBBUEVSIFNZTUJPTDtTbzswO09OOzs7OztOOzs7OzsKKzI2ODA7RElFIEZBQ0UtMTtTbzswO09OOzs7OztOOzs7OzsKKzI2ODE7RElFIEZBQ0UtMjtTbzswO09OOzs7OztOOzs7OzsKKzI2ODI7RElFIEZBQ0UtMztTbzswO09OOzs7OztOOzs7OzsKKzI2ODM7RElFIEZBQ0UtNDtTbzswO09OOzs7OztOOzs7OzsKKzI2ODQ7RElFIEZBQ0UtNTtTbzswO09OOzs7OztOOzs7OzsKKzI2ODU7RElFIEZBQ0UtNjtTbzswO09OOzs7OztOOzs7OzsKKzI2ODY7V0hJVEUgQ0lSQ0xFIFdJVEggRE9UIFJJR0hUO1NvOzA7T047Ozs7O047Ozs7OworMjY4NztXSElURSBDSVJDTEUgV0lUSCBUV08gRE9UUztTbzswO09OOzs7OztOOzs7OzsKKzI2ODg7QkxBQ0sgQ0lSQ0xFIFdJVEggV0hJVEUgRE9UIFJJR0hUO1NvOzA7T047Ozs7O047Ozs7OworMjY4OTtCTEFDSyBDSVJDTEUgV0lUSCBUV08gV0hJVEUgRE9UUztTbzswO09OOzs7OztOOzs7OzsKKzI3MDE7VVBQRVIgQkxBREUgU0NJU1NPUlM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzAyO0JMQUNLIFNDSVNTT1JTO1NvOzA7T047Ozs7O047Ozs7OworMjcwMztMT1dFUiBCTEFERSBTQ0lTU09SUztTbzswO09OOzs7OztOOzs7OzsKKzI3MDQ7V0hJVEUgU0NJU1NPUlM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzA2O1RFTEVQSE9ORSBMT0NBVElPTiBTSUdOO1NvOzA7T047Ozs7O047Ozs7OworMjcwNztUQVBFIERSSVZFO1NvOzA7T047Ozs7O047Ozs7OworMjcwODtBSVJQTEFORTtTbzswO09OOzs7OztOOzs7OzsKKzI3MDk7RU5WRUxPUEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzBDO1ZJQ1RPUlkgSEFORDtTbzswO09OOzs7OztOOzs7OzsKKzI3MEQ7V1JJVElORyBIQU5EO1NvOzA7T047Ozs7O047Ozs7OworMjcwRTtMT1dFUiBSSUdIVCBQRU5DSUw7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzBGO1BFTkNJTDtTbzswO09OOzs7OztOOzs7OzsKKzI3MTA7VVBQRVIgUklHSFQgUEVOQ0lMO1NvOzA7T047Ozs7O047Ozs7OworMjcxMTtXSElURSBOSUI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzEyO0JMQUNLIE5JQjtTbzswO09OOzs7OztOOzs7OzsKKzI3MTM7Q0hFQ0sgTUFSSztTbzswO09OOzs7OztOOzs7OzsKKzI3MTQ7SEVBVlkgQ0hFQ0sgTUFSSztTbzswO09OOzs7OztOOzs7OzsKKzI3MTU7TVVMVElQTElDQVRJT04gWDtTbzswO09OOzs7OztOOzs7OzsKKzI3MTY7SEVBVlkgTVVMVElQTElDQVRJT04gWDtTbzswO09OOzs7OztOOzs7OzsKKzI3MTc7QkFMTE9UIFg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzE4O0hFQVZZIEJBTExPVCBYO1NvOzA7T047Ozs7O047Ozs7OworMjcxOTtPVVRMSU5FRCBHUkVFSyBDUk9TUztTbzswO09OOzs7OztOOzs7OzsKKzI3MUE7SEVBVlkgR1JFRUsgQ1JPU1M7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzFCO09QRU4gQ0VOVFJFIENST1NTO1NvOzA7T047Ozs7O047T1BFTiBDRU5URVIgQ1JPU1M7Ozs7CisyNzFDO0hFQVZZIE9QRU4gQ0VOVFJFIENST1NTO1NvOzA7T047Ozs7O047SEVBVlkgT1BFTiBDRU5URVIgQ1JPU1M7Ozs7CisyNzFEO0xBVElOIENST1NTO1NvOzA7T047Ozs7O047Ozs7OworMjcxRTtTSEFET1dFRCBXSElURSBMQVRJTiBDUk9TUztTbzswO09OOzs7OztOOzs7OzsKKzI3MUY7T1VUTElORUQgTEFUSU4gQ1JPU1M7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzIwO01BTFRFU0UgQ1JPU1M7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzIxO1NUQVIgT0YgREFWSUQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzIyO0ZPVVIgVEVBUkRST1AtU1BPS0VEIEFTVEVSSVNLO1NvOzA7T047Ozs7O047Ozs7OworMjcyMztGT1VSIEJBTExPT04tU1BPS0VEIEFTVEVSSVNLO1NvOzA7T047Ozs7O047Ozs7OworMjcyNDtIRUFWWSBGT1VSIEJBTExPT04tU1BPS0VEIEFTVEVSSVNLO1NvOzA7T047Ozs7O047Ozs7OworMjcyNTtGT1VSIENMVUItU1BPS0VEIEFTVEVSSVNLO1NvOzA7T047Ozs7O047Ozs7OworMjcyNjtCTEFDSyBGT1VSIFBPSU5URUQgU1RBUjtTbzswO09OOzs7OztOOzs7OzsKKzI3Mjc7V0hJVEUgRk9VUiBQT0lOVEVEIFNUQVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzI5O1NUUkVTUyBPVVRMSU5FRCBXSElURSBTVEFSO1NvOzA7T047Ozs7O047Ozs7OworMjcyQTtDSVJDTEVEIFdISVRFIFNUQVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzJCO09QRU4gQ0VOVFJFIEJMQUNLIFNUQVI7U287MDtPTjs7Ozs7TjtPUEVOIENFTlRFUiBCTEFDSyBTVEFSOzs7OworMjcyQztCTEFDSyBDRU5UUkUgV0hJVEUgU1RBUjtTbzswO09OOzs7OztOO0JMQUNLIENFTlRFUiBXSElURSBTVEFSOzs7OworMjcyRDtPVVRMSU5FRCBCTEFDSyBTVEFSO1NvOzA7T047Ozs7O047Ozs7OworMjcyRTtIRUFWWSBPVVRMSU5FRCBCTEFDSyBTVEFSO1NvOzA7T047Ozs7O047Ozs7OworMjcyRjtQSU5XSEVFTCBTVEFSO1NvOzA7T047Ozs7O047Ozs7OworMjczMDtTSEFET1dFRCBXSElURSBTVEFSO1NvOzA7T047Ozs7O047Ozs7OworMjczMTtIRUFWWSBBU1RFUklTSztTbzswO09OOzs7OztOOzs7OzsKKzI3MzI7T1BFTiBDRU5UUkUgQVNURVJJU0s7U287MDtPTjs7Ozs7TjtPUEVOIENFTlRFUiBBU1RFUklTSzs7OzsKKzI3MzM7RUlHSFQgU1BPS0VEIEFTVEVSSVNLO1NvOzA7T047Ozs7O047Ozs7OworMjczNDtFSUdIVCBQT0lOVEVEIEJMQUNLIFNUQVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzM1O0VJR0hUIFBPSU5URUQgUElOV0hFRUwgU1RBUjtTbzswO09OOzs7OztOOzs7OzsKKzI3MzY7U0lYIFBPSU5URUQgQkxBQ0sgU1RBUjtTbzswO09OOzs7OztOOzs7OzsKKzI3Mzc7RUlHSFQgUE9JTlRFRCBSRUNUSUxJTkVBUiBCTEFDSyBTVEFSO1NvOzA7T047Ozs7O047Ozs7OworMjczODtIRUFWWSBFSUdIVCBQT0lOVEVEIFJFQ1RJTElORUFSIEJMQUNLIFNUQVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzM5O1RXRUxWRSBQT0lOVEVEIEJMQUNLIFNUQVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzNBO1NJWFRFRU4gUE9JTlRFRCBBU1RFUklTSztTbzswO09OOzs7OztOOzs7OzsKKzI3M0I7VEVBUkRST1AtU1BPS0VEIEFTVEVSSVNLO1NvOzA7T047Ozs7O047Ozs7OworMjczQztPUEVOIENFTlRSRSBURUFSRFJPUC1TUE9LRUQgQVNURVJJU0s7U287MDtPTjs7Ozs7TjtPUEVOIENFTlRFUiBURUFSRFJPUC1TUE9LRUQgQVNURVJJU0s7Ozs7CisyNzNEO0hFQVZZIFRFQVJEUk9QLVNQT0tFRCBBU1RFUklTSztTbzswO09OOzs7OztOOzs7OzsKKzI3M0U7U0lYIFBFVEFMTEVEIEJMQUNLIEFORCBXSElURSBGTE9SRVRURTtTbzswO09OOzs7OztOOzs7OzsKKzI3M0Y7QkxBQ0sgRkxPUkVUVEU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzQwO1dISVRFIEZMT1JFVFRFO1NvOzA7T047Ozs7O047Ozs7OworMjc0MTtFSUdIVCBQRVRBTExFRCBPVVRMSU5FRCBCTEFDSyBGTE9SRVRURTtTbzswO09OOzs7OztOOzs7OzsKKzI3NDI7Q0lSQ0xFRCBPUEVOIENFTlRSRSBFSUdIVCBQT0lOVEVEIFNUQVI7U287MDtPTjs7Ozs7TjtDSVJDTEVEIE9QRU4gQ0VOVEVSIEVJR0hUIFBPSU5URUQgU1RBUjs7OzsKKzI3NDM7SEVBVlkgVEVBUkRST1AtU1BPS0VEIFBJTldIRUVMIEFTVEVSSVNLO1NvOzA7T047Ozs7O047Ozs7OworMjc0NDtTTk9XRkxBS0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzQ1O1RJR0hUIFRSSUZPTElBVEUgU05PV0ZMQUtFO1NvOzA7T047Ozs7O047Ozs7OworMjc0NjtIRUFWWSBDSEVWUk9OIFNOT1dGTEFLRTtTbzswO09OOzs7OztOOzs7OzsKKzI3NDc7U1BBUktMRTtTbzswO09OOzs7OztOOzs7OzsKKzI3NDg7SEVBVlkgU1BBUktMRTtTbzswO09OOzs7OztOOzs7OzsKKzI3NDk7QkFMTE9PTi1TUE9LRUQgQVNURVJJU0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzRBO0VJR0hUIFRFQVJEUk9QLVNQT0tFRCBQUk9QRUxMRVIgQVNURVJJU0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzRCO0hFQVZZIEVJR0hUIFRFQVJEUk9QLVNQT0tFRCBQUk9QRUxMRVIgQVNURVJJU0s7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzREO1NIQURPV0VEIFdISVRFIENJUkNMRTtTbzswO09OOzs7OztOOzs7OzsKKzI3NEY7TE9XRVIgUklHSFQgRFJPUC1TSEFET1dFRCBXSElURSBTUVVBUkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzUwO1VQUEVSIFJJR0hUIERST1AtU0hBRE9XRUQgV0hJVEUgU1FVQVJFO1NvOzA7T047Ozs7O047Ozs7OworMjc1MTtMT1dFUiBSSUdIVCBTSEFET1dFRCBXSElURSBTUVVBUkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzUyO1VQUEVSIFJJR0hUIFNIQURPV0VEIFdISVRFIFNRVUFSRTtTbzswO09OOzs7OztOOzs7OzsKKzI3NTY7QkxBQ0sgRElBTU9ORCBNSU5VUyBXSElURSBYO1NvOzA7T047Ozs7O047Ozs7OworMjc1ODtMSUdIVCBWRVJUSUNBTCBCQVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzU5O01FRElVTSBWRVJUSUNBTCBCQVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzVBO0hFQVZZIFZFUlRJQ0FMIEJBUjtTbzswO09OOzs7OztOOzs7OzsKKzI3NUI7SEVBVlkgU0lOR0xFIFRVUk5FRCBDT01NQSBRVU9UQVRJT04gTUFSSyBPUk5BTUVOVDtTbzswO09OOzs7OztOOzs7OzsKKzI3NUM7SEVBVlkgU0lOR0xFIENPTU1BIFFVT1RBVElPTiBNQVJLIE9STkFNRU5UO1NvOzA7T047Ozs7O047Ozs7OworMjc1RDtIRUFWWSBET1VCTEUgVFVSTkVEIENPTU1BIFFVT1RBVElPTiBNQVJLIE9STkFNRU5UO1NvOzA7T047Ozs7O047Ozs7OworMjc1RTtIRUFWWSBET1VCTEUgQ09NTUEgUVVPVEFUSU9OIE1BUksgT1JOQU1FTlQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzYxO0NVUlZFRCBTVEVNIFBBUkFHUkFQSCBTSUdOIE9STkFNRU5UO1NvOzA7T047Ozs7O047Ozs7OworMjc2MjtIRUFWWSBFWENMQU1BVElPTiBNQVJLIE9STkFNRU5UO1NvOzA7T047Ozs7O047Ozs7OworMjc2MztIRUFWWSBIRUFSVCBFWENMQU1BVElPTiBNQVJLIE9STkFNRU5UO1NvOzA7T047Ozs7O047Ozs7OworMjc2NDtIRUFWWSBCTEFDSyBIRUFSVDtTbzswO09OOzs7OztOOzs7OzsKKzI3NjU7Uk9UQVRFRCBIRUFWWSBCTEFDSyBIRUFSVCBCVUxMRVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyNzY2O0ZMT1JBTCBIRUFSVDtTbzswO09OOzs7OztOOzs7OzsKKzI3Njc7Uk9UQVRFRCBGTE9SQUwgSEVBUlQgQlVMTEVUO1NvOzA7T047Ozs7O047Ozs7OworMjc2ODtNRURJVU0gTEVGVCBQQVJFTlRIRVNJUyBPUk5BTUVOVDtQczswO09OOzs7OztZOzs7OzsKKzI3Njk7TUVESVVNIFJJR0hUIFBBUkVOVEhFU0lTIE9STkFNRU5UO1BlOzA7T047Ozs7O1k7Ozs7OworMjc2QTtNRURJVU0gRkxBVFRFTkVEIExFRlQgUEFSRU5USEVTSVMgT1JOQU1FTlQ7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyNzZCO01FRElVTSBGTEFUVEVORUQgUklHSFQgUEFSRU5USEVTSVMgT1JOQU1FTlQ7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyNzZDO01FRElVTSBMRUZULVBPSU5USU5HIEFOR0xFIEJSQUNLRVQgT1JOQU1FTlQ7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyNzZEO01FRElVTSBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUIE9STkFNRU5UO1BlOzA7T047Ozs7O1k7Ozs7OworMjc2RTtIRUFWWSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLIE9STkFNRU5UO1BzOzA7T047Ozs7O1k7Ozs7OworMjc2RjtIRUFWWSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSyBPUk5BTUVOVDtQZTswO09OOzs7OztZOzs7OzsKKzI3NzA7SEVBVlkgTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUIE9STkFNRU5UO1BzOzA7T047Ozs7O1k7Ozs7OworMjc3MTtIRUFWWSBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUIE9STkFNRU5UO1BlOzA7T047Ozs7O1k7Ozs7OworMjc3MjtMSUdIVCBMRUZUIFRPUlRPSVNFIFNIRUxMIEJSQUNLRVQgT1JOQU1FTlQ7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyNzczO0xJR0hUIFJJR0hUIFRPUlRPSVNFIFNIRUxMIEJSQUNLRVQgT1JOQU1FTlQ7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyNzc0O01FRElVTSBMRUZUIENVUkxZIEJSQUNLRVQgT1JOQU1FTlQ7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyNzc1O01FRElVTSBSSUdIVCBDVVJMWSBCUkFDS0VUIE9STkFNRU5UO1BlOzA7T047Ozs7O1k7Ozs7OworMjc3NjtESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgRElHSVQgT05FO05vOzA7T047OzsxOzE7TjtJTlZFUlNFIENJUkNMRUQgRElHSVQgT05FOzs7OworMjc3NztESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgRElHSVQgVFdPO05vOzA7T047OzsyOzI7TjtJTlZFUlNFIENJUkNMRUQgRElHSVQgVFdPOzs7OworMjc3ODtESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgRElHSVQgVEhSRUU7Tm87MDtPTjs7OzM7MztOO0lOVkVSU0UgQ0lSQ0xFRCBESUdJVCBUSFJFRTs7OzsKKzI3Nzk7RElOR0JBVCBORUdBVElWRSBDSVJDTEVEIERJR0lUIEZPVVI7Tm87MDtPTjs7OzQ7NDtOO0lOVkVSU0UgQ0lSQ0xFRCBESUdJVCBGT1VSOzs7OworMjc3QTtESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgRElHSVQgRklWRTtObzswO09OOzs7NTs1O047SU5WRVJTRSBDSVJDTEVEIERJR0lUIEZJVkU7Ozs7CisyNzdCO0RJTkdCQVQgTkVHQVRJVkUgQ0lSQ0xFRCBESUdJVCBTSVg7Tm87MDtPTjs7OzY7NjtOO0lOVkVSU0UgQ0lSQ0xFRCBESUdJVCBTSVg7Ozs7CisyNzdDO0RJTkdCQVQgTkVHQVRJVkUgQ0lSQ0xFRCBESUdJVCBTRVZFTjtObzswO09OOzs7Nzs3O047SU5WRVJTRSBDSVJDTEVEIERJR0lUIFNFVkVOOzs7OworMjc3RDtESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgRElHSVQgRUlHSFQ7Tm87MDtPTjs7Ozg7ODtOO0lOVkVSU0UgQ0lSQ0xFRCBESUdJVCBFSUdIVDs7OzsKKzI3N0U7RElOR0JBVCBORUdBVElWRSBDSVJDTEVEIERJR0lUIE5JTkU7Tm87MDtPTjs7Ozk7OTtOO0lOVkVSU0UgQ0lSQ0xFRCBESUdJVCBOSU5FOzs7OworMjc3RjtESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgTlVNQkVSIFRFTjtObzswO09OOzs7OzEwO047SU5WRVJTRSBDSVJDTEVEIE5VTUJFUiBURU47Ozs7CisyNzgwO0RJTkdCQVQgQ0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIE9ORTtObzswO09OOzs7MTsxO047Q0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIE9ORTs7OzsKKzI3ODE7RElOR0JBVCBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgVFdPO05vOzA7T047OzsyOzI7TjtDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgVFdPOzs7OworMjc4MjtESU5HQkFUIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBUSFJFRTtObzswO09OOzs7MzszO047Q0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIFRIUkVFOzs7OworMjc4MztESU5HQkFUIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBGT1VSO05vOzA7T047Ozs0OzQ7TjtDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgRk9VUjs7OzsKKzI3ODQ7RElOR0JBVCBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgRklWRTtObzswO09OOzs7NTs1O047Q0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIEZJVkU7Ozs7CisyNzg1O0RJTkdCQVQgQ0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIFNJWDtObzswO09OOzs7Njs2O047Q0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIFNJWDs7OzsKKzI3ODY7RElOR0JBVCBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgU0VWRU47Tm87MDtPTjs7Ozc7NztOO0NJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBTRVZFTjs7OzsKKzI3ODc7RElOR0JBVCBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgRUlHSFQ7Tm87MDtPTjs7Ozg7ODtOO0NJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBFSUdIVDs7OzsKKzI3ODg7RElOR0JBVCBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgTklORTtObzswO09OOzs7OTs5O047Q0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIE5JTkU7Ozs7CisyNzg5O0RJTkdCQVQgQ0lSQ0xFRCBTQU5TLVNFUklGIE5VTUJFUiBURU47Tm87MDtPTjs7OzsxMDtOO0NJUkNMRUQgU0FOUy1TRVJJRiBOVU1CRVIgVEVOOzs7OworMjc4QTtESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBPTkU7Tm87MDtPTjs7OzE7MTtOO0lOVkVSU0UgQ0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIE9ORTs7OzsKKzI3OEI7RElOR0JBVCBORUdBVElWRSBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgVFdPO05vOzA7T047OzsyOzI7TjtJTlZFUlNFIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBUV087Ozs7CisyNzhDO0RJTkdCQVQgTkVHQVRJVkUgQ0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIFRIUkVFO05vOzA7T047OzszOzM7TjtJTlZFUlNFIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBUSFJFRTs7OzsKKzI3OEQ7RElOR0JBVCBORUdBVElWRSBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgRk9VUjtObzswO09OOzs7NDs0O047SU5WRVJTRSBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgRk9VUjs7OzsKKzI3OEU7RElOR0JBVCBORUdBVElWRSBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgRklWRTtObzswO09OOzs7NTs1O047SU5WRVJTRSBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgRklWRTs7OzsKKzI3OEY7RElOR0JBVCBORUdBVElWRSBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgU0lYO05vOzA7T047Ozs2OzY7TjtJTlZFUlNFIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBTSVg7Ozs7CisyNzkwO0RJTkdCQVQgTkVHQVRJVkUgQ0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIFNFVkVOO05vOzA7T047Ozs3Ozc7TjtJTlZFUlNFIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBTRVZFTjs7OzsKKzI3OTE7RElOR0JBVCBORUdBVElWRSBDSVJDTEVEIFNBTlMtU0VSSUYgRElHSVQgRUlHSFQ7Tm87MDtPTjs7Ozg7ODtOO0lOVkVSU0UgQ0lSQ0xFRCBTQU5TLVNFUklGIERJR0lUIEVJR0hUOzs7OworMjc5MjtESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBOSU5FO05vOzA7T047Ozs5Ozk7TjtJTlZFUlNFIENJUkNMRUQgU0FOUy1TRVJJRiBESUdJVCBOSU5FOzs7OworMjc5MztESU5HQkFUIE5FR0FUSVZFIENJUkNMRUQgU0FOUy1TRVJJRiBOVU1CRVIgVEVOO05vOzA7T047Ozs7MTA7TjtJTlZFUlNFIENJUkNMRUQgU0FOUy1TRVJJRiBOVU1CRVIgVEVOOzs7OworMjc5NDtIRUFWWSBXSURFLUhFQURFRCBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047SEVBVlkgV0lERS1IRUFERUQgUklHSFQgQVJST1c7Ozs7CisyNzk4O0hFQVZZIFNPVVRIIEVBU1QgQVJST1c7U287MDtPTjs7Ozs7TjtIRUFWWSBMT1dFUiBSSUdIVCBBUlJPVzs7OzsKKzI3OTk7SEVBVlkgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0hFQVZZIFJJR0hUIEFSUk9XOzs7OworMjc5QTtIRUFWWSBOT1JUSCBFQVNUIEFSUk9XO1NvOzA7T047Ozs7O047SEVBVlkgVVBQRVIgUklHSFQgQVJST1c7Ozs7CisyNzlCO0RSQUZUSU5HIFBPSU5UIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtEUkFGVElORyBQT0lOVCBSSUdIVCBBUlJPVzs7OzsKKzI3OUM7SEVBVlkgUk9VTkQtVElQUEVEIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtIRUFWWSBST1VORC1USVBQRUQgUklHSFQgQVJST1c7Ozs7CisyNzlEO1RSSUFOR0xFLUhFQURFRCBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047VFJJQU5HTEUtSEVBREVEIFJJR0hUIEFSUk9XOzs7OworMjc5RTtIRUFWWSBUUklBTkdMRS1IRUFERUQgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0hFQVZZIFRSSUFOR0xFLUhFQURFRCBSSUdIVCBBUlJPVzs7OzsKKzI3OUY7REFTSEVEIFRSSUFOR0xFLUhFQURFRCBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047REFTSEVEIFRSSUFOR0xFLUhFQURFRCBSSUdIVCBBUlJPVzs7OzsKKzI3QTA7SEVBVlkgREFTSEVEIFRSSUFOR0xFLUhFQURFRCBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047SEVBVlkgREFTSEVEIFRSSUFOR0xFLUhFQURFRCBSSUdIVCBBUlJPVzs7OzsKKzI3QTE7QkxBQ0sgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0JMQUNLIFJJR0hUIEFSUk9XOzs7OworMjdBMjtUSFJFRS1EIFRPUC1MSUdIVEVEIFJJR0hUV0FSRFMgQVJST1dIRUFEO1NvOzA7T047Ozs7O047VEhSRUUtRCBUT1AtTElHSFRFRCBSSUdIVCBBUlJPV0hFQUQ7Ozs7CisyN0EzO1RIUkVFLUQgQk9UVE9NLUxJR0hURUQgUklHSFRXQVJEUyBBUlJPV0hFQUQ7U287MDtPTjs7Ozs7TjtUSFJFRS1EIEJPVFRPTS1MSUdIVEVEIFJJR0hUIEFSUk9XSEVBRDs7OzsKKzI3QTQ7QkxBQ0sgUklHSFRXQVJEUyBBUlJPV0hFQUQ7U287MDtPTjs7Ozs7TjtCTEFDSyBSSUdIVCBBUlJPV0hFQUQ7Ozs7CisyN0E1O0hFQVZZIEJMQUNLIENVUlZFRCBET1dOV0FSRFMgQU5EIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtIRUFWWSBCTEFDSyBDVVJWRUQgRE9XTiBBTkQgUklHSFQgQVJST1c7Ozs7CisyN0E2O0hFQVZZIEJMQUNLIENVUlZFRCBVUFdBUkRTIEFORCBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047SEVBVlkgQkxBQ0sgQ1VSVkVEIFVQIEFORCBSSUdIVCBBUlJPVzs7OzsKKzI3QTc7U1FVQVQgQkxBQ0sgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO1NRVUFUIEJMQUNLIFJJR0hUIEFSUk9XOzs7OworMjdBODtIRUFWWSBDT05DQVZFLVBPSU5URUQgQkxBQ0sgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0hFQVZZIENPTkNBVkUtUE9JTlRFRCBCTEFDSyBSSUdIVCBBUlJPVzs7OzsKKzI3QTk7UklHSFQtU0hBREVEIFdISVRFIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtSSUdIVC1TSEFERUQgV0hJVEUgUklHSFQgQVJST1c7Ozs7CisyN0FBO0xFRlQtU0hBREVEIFdISVRFIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtMRUZULVNIQURFRCBXSElURSBSSUdIVCBBUlJPVzs7OzsKKzI3QUI7QkFDSy1USUxURUQgU0hBRE9XRUQgV0hJVEUgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0JBQ0stVElMVEVEIFNIQURPV0VEIFdISVRFIFJJR0hUIEFSUk9XOzs7OworMjdBQztGUk9OVC1USUxURUQgU0hBRE9XRUQgV0hJVEUgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0ZST05ULVRJTFRFRCBTSEFET1dFRCBXSElURSBSSUdIVCBBUlJPVzs7OzsKKzI3QUQ7SEVBVlkgTE9XRVIgUklHSFQtU0hBRE9XRUQgV0hJVEUgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0hFQVZZIExPV0VSIFJJR0hULVNIQURPV0VEIFdISVRFIFJJR0hUIEFSUk9XOzs7OworMjdBRTtIRUFWWSBVUFBFUiBSSUdIVC1TSEFET1dFRCBXSElURSBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047SEVBVlkgVVBQRVIgUklHSFQtU0hBRE9XRUQgV0hJVEUgUklHSFQgQVJST1c7Ozs7CisyN0FGO05PVENIRUQgTE9XRVIgUklHSFQtU0hBRE9XRUQgV0hJVEUgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO05PVENIRUQgTE9XRVIgUklHSFQtU0hBRE9XRUQgV0hJVEUgUklHSFQgQVJST1c7Ozs7CisyN0IxO05PVENIRUQgVVBQRVIgUklHSFQtU0hBRE9XRUQgV0hJVEUgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO05PVENIRUQgVVBQRVIgUklHSFQtU0hBRE9XRUQgV0hJVEUgUklHSFQgQVJST1c7Ozs7CisyN0IyO0NJUkNMRUQgSEVBVlkgV0hJVEUgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO0NJUkNMRUQgSEVBVlkgV0hJVEUgUklHSFQgQVJST1c7Ozs7CisyN0IzO1dISVRFLUZFQVRIRVJFRCBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047V0hJVEUtRkVBVEhFUkVEIFJJR0hUIEFSUk9XOzs7OworMjdCNDtCTEFDSy1GRUFUSEVSRUQgU09VVEggRUFTVCBBUlJPVztTbzswO09OOzs7OztOO0JMQUNLLUZFQVRIRVJFRCBMT1dFUiBSSUdIVCBBUlJPVzs7OzsKKzI3QjU7QkxBQ0stRkVBVEhFUkVEIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtCTEFDSy1GRUFUSEVSRUQgUklHSFQgQVJST1c7Ozs7CisyN0I2O0JMQUNLLUZFQVRIRVJFRCBOT1JUSCBFQVNUIEFSUk9XO1NvOzA7T047Ozs7O047QkxBQ0stRkVBVEhFUkVEIFVQUEVSIFJJR0hUIEFSUk9XOzs7OworMjdCNztIRUFWWSBCTEFDSy1GRUFUSEVSRUQgU09VVEggRUFTVCBBUlJPVztTbzswO09OOzs7OztOO0hFQVZZIEJMQUNLLUZFQVRIRVJFRCBMT1dFUiBSSUdIVCBBUlJPVzs7OzsKKzI3Qjg7SEVBVlkgQkxBQ0stRkVBVEhFUkVEIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtIRUFWWSBCTEFDSy1GRUFUSEVSRUQgUklHSFQgQVJST1c7Ozs7CisyN0I5O0hFQVZZIEJMQUNLLUZFQVRIRVJFRCBOT1JUSCBFQVNUIEFSUk9XO1NvOzA7T047Ozs7O047SEVBVlkgQkxBQ0stRkVBVEhFUkVEIFVQUEVSIFJJR0hUIEFSUk9XOzs7OworMjdCQTtURUFSRFJPUC1CQVJCRUQgUklHSFRXQVJEUyBBUlJPVztTbzswO09OOzs7OztOO1RFQVJEUk9QLUJBUkJFRCBSSUdIVCBBUlJPVzs7OzsKKzI3QkI7SEVBVlkgVEVBUkRST1AtU0hBTktFRCBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047SEVBVlkgVEVBUkRST1AtU0hBTktFRCBSSUdIVCBBUlJPVzs7OzsKKzI3QkM7V0VER0UtVEFJTEVEIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtXRURHRS1UQUlMRUQgUklHSFQgQVJST1c7Ozs7CisyN0JEO0hFQVZZIFdFREdFLVRBSUxFRCBSSUdIVFdBUkRTIEFSUk9XO1NvOzA7T047Ozs7O047SEVBVlkgV0VER0UtVEFJTEVEIFJJR0hUIEFSUk9XOzs7OworMjdCRTtPUEVOLU9VVExJTkVEIFJJR0hUV0FSRFMgQVJST1c7U287MDtPTjs7Ozs7TjtPUEVOLU9VVExJTkVEIFJJR0hUIEFSUk9XOzs7OworMjdEMDtXSElURSBESUFNT05EIFdJVEggQ0VOVFJFRCBET1Q7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0QxO0FORCBXSVRIIERPVDtTbTswO09OOzs7OztOOzs7OzsKKzI3RDI7RUxFTUVOVCBPRiBPUEVOSU5HIFVQV0FSRFM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0QzO0xPV0VSIFJJR0hUIENPUk5FUiBXSVRIIERPVDtTbTswO09OOzs7OztZOzs7OzsKKzI3RDQ7VVBQRVIgTEVGVCBDT1JORVIgV0lUSCBET1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyN0Q1O0xFRlQgT1VURVIgSk9JTjtTbTswO09OOzs7OztZOzs7OzsKKzI3RDY7UklHSFQgT1VURVIgSk9JTjtTbTswO09OOzs7OztZOzs7OzsKKzI3RDc7RlVMTCBPVVRFUiBKT0lOO1NtOzA7T047Ozs7O047Ozs7OworMjdEODtMQVJHRSBVUCBUQUNLO1NtOzA7T047Ozs7O047Ozs7OworMjdEOTtMQVJHRSBET1dOIFRBQ0s7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0RBO0xFRlQgQU5EIFJJR0hUIERPVUJMRSBUVVJOU1RJTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0RCO0xFRlQgQU5EIFJJR0hUIFRBQ0s7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0RDO0xFRlQgTVVMVElNQVA7U207MDtPTjs7Ozs7WTs7Ozs7CisyN0REO0xPTkcgUklHSFQgVEFDSztTbTswO09OOzs7OztZOzs7OzsKKzI3REU7TE9ORyBMRUZUIFRBQ0s7U207MDtPTjs7Ozs7WTs7Ozs7CisyN0RGO1VQIFRBQ0sgV0lUSCBDSVJDTEUgQUJPVkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0UwO0xPWkVOR0UgRElWSURFRCBCWSBIT1JJWk9OVEFMIFJVTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0UxO1dISVRFIENPTkNBVkUtU0lERUQgRElBTU9ORDtTbTswO09OOzs7OztOOzs7OzsKKzI3RTI7V0hJVEUgQ09OQ0FWRS1TSURFRCBESUFNT05EIFdJVEggTEVGVFdBUkRTIFRJQ0s7U207MDtPTjs7Ozs7WTs7Ozs7CisyN0UzO1dISVRFIENPTkNBVkUtU0lERUQgRElBTU9ORCBXSVRIIFJJR0hUV0FSRFMgVElDSztTbTswO09OOzs7OztZOzs7OzsKKzI3RTQ7V0hJVEUgU1FVQVJFIFdJVEggTEVGVFdBUkRTIFRJQ0s7U207MDtPTjs7Ozs7WTs7Ozs7CisyN0U1O1dISVRFIFNRVUFSRSBXSVRIIFJJR0hUV0FSRFMgVElDSztTbTswO09OOzs7OztZOzs7OzsKKzI3RTY7TUFUSEVNQVRJQ0FMIExFRlQgV0hJVEUgU1FVQVJFIEJSQUNLRVQ7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyN0U3O01BVEhFTUFUSUNBTCBSSUdIVCBXSElURSBTUVVBUkUgQlJBQ0tFVDtQZTswO09OOzs7OztZOzs7OzsKKzI3RTg7TUFUSEVNQVRJQ0FMIExFRlQgQU5HTEUgQlJBQ0tFVDtQczswO09OOzs7OztZOzs7OzsKKzI3RTk7TUFUSEVNQVRJQ0FMIFJJR0hUIEFOR0xFIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyN0VBO01BVEhFTUFUSUNBTCBMRUZUIERPVUJMRSBBTkdMRSBCUkFDS0VUO1BzOzA7T047Ozs7O1k7Ozs7OworMjdFQjtNQVRIRU1BVElDQUwgUklHSFQgRE9VQkxFIEFOR0xFIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyN0YwO1VQV0FSRFMgUVVBRFJVUExFIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjdGMTtET1dOV0FSRFMgUVVBRFJVUExFIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjdGMjtBTlRJQ0xPQ0tXSVNFIEdBUFBFRCBDSVJDTEUgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0YzO0NMT0NLV0lTRSBHQVBQRUQgQ0lSQ0xFIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjdGNDtSSUdIVCBBUlJPVyBXSVRIIENJUkNMRUQgUExVUztTbTswO09OOzs7OztOOzs7OzsKKzI3RjU7TE9ORyBMRUZUV0FSRFMgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0Y2O0xPTkcgUklHSFRXQVJEUyBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI3Rjc7TE9ORyBMRUZUIFJJR0hUIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjdGODtMT05HIExFRlRXQVJEUyBET1VCTEUgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0Y5O0xPTkcgUklHSFRXQVJEUyBET1VCTEUgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0ZBO0xPTkcgTEVGVCBSSUdIVCBET1VCTEUgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0ZCO0xPTkcgTEVGVFdBUkRTIEFSUk9XIEZST00gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjdGQztMT05HIFJJR0hUV0FSRFMgQVJST1cgRlJPTSBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyN0ZEO0xPTkcgTEVGVFdBUkRTIERPVUJMRSBBUlJPVyBGUk9NIEJBUjtTbTswO09OOzs7OztOOzs7OzsKKzI3RkU7TE9ORyBSSUdIVFdBUkRTIERPVUJMRSBBUlJPVyBGUk9NIEJBUjtTbTswO09OOzs7OztOOzs7OzsKKzI3RkY7TE9ORyBSSUdIVFdBUkRTIFNRVUlHR0xFIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjgwMDtCUkFJTExFIFBBVFRFUk4gQkxBTks7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODAxO0JSQUlMTEUgUEFUVEVSTiBET1RTLTE7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODAyO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODAzO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyO1NvOzA7T047Ozs7O047Ozs7OworMjgwNDtCUkFJTExFIFBBVFRFUk4gRE9UUy0zO1NvOzA7T047Ozs7O047Ozs7OworMjgwNTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMztTbzswO09OOzs7OztOOzs7OzsKKzI4MDY7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODA3O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMztTbzswO09OOzs7OztOOzs7OzsKKzI4MDg7QlJBSUxMRSBQQVRURVJOIERPVFMtNDtTbzswO09OOzs7OztOOzs7OzsKKzI4MDk7QlJBSUxMRSBQQVRURVJOIERPVFMtMTQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODBBO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI0O1NvOzA7T047Ozs7O047Ozs7OworMjgwQjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODBDO0JSQUlMTEUgUEFUVEVSTiBET1RTLTM0O1NvOzA7T047Ozs7O047Ozs7OworMjgwRDtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODBFO0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNDtTbzswO09OOzs7OztOOzs7OzsKKzI4MEY7QlJBSUxMRSBQQVRURVJOIERPVFMtMTIzNDtTbzswO09OOzs7OztOOzs7OzsKKzI4MTA7QlJBSUxMRSBQQVRURVJOIERPVFMtNTtTbzswO09OOzs7OztOOzs7OzsKKzI4MTE7QlJBSUxMRSBQQVRURVJOIERPVFMtMTU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODEyO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI1O1NvOzA7T047Ozs7O047Ozs7OworMjgxMztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODE0O0JSQUlMTEUgUEFUVEVSTiBET1RTLTM1O1NvOzA7T047Ozs7O047Ozs7OworMjgxNTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODE2O0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNTtTbzswO09OOzs7OztOOzs7OzsKKzI4MTc7QlJBSUxMRSBQQVRURVJOIERPVFMtMTIzNTtTbzswO09OOzs7OztOOzs7OzsKKzI4MTg7QlJBSUxMRSBQQVRURVJOIERPVFMtNDU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODE5O0JSQUlMTEUgUEFUVEVSTiBET1RTLTE0NTtTbzswO09OOzs7OztOOzs7OzsKKzI4MUE7QlJBSUxMRSBQQVRURVJOIERPVFMtMjQ1O1NvOzA7T047Ozs7O047Ozs7OworMjgxQjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjQ1O1NvOzA7T047Ozs7O047Ozs7OworMjgxQztCUkFJTExFIFBBVFRFUk4gRE9UUy0zNDU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODFEO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNDU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODFFO0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNDU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODFGO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzQ1O1NvOzA7T047Ozs7O047Ozs7OworMjgyMDtCUkFJTExFIFBBVFRFUk4gRE9UUy02O1NvOzA7T047Ozs7O047Ozs7OworMjgyMTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNjtTbzswO09OOzs7OztOOzs7OzsKKzI4MjI7QlJBSUxMRSBQQVRURVJOIERPVFMtMjY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODIzO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyNjtTbzswO09OOzs7OztOOzs7OzsKKzI4MjQ7QlJBSUxMRSBQQVRURVJOIERPVFMtMzY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODI1O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNjtTbzswO09OOzs7OztOOzs7OzsKKzI4MjY7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM2O1NvOzA7T047Ozs7O047Ozs7OworMjgyNztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM2O1NvOzA7T047Ozs7O047Ozs7OworMjgyODtCUkFJTExFIFBBVFRFUk4gRE9UUy00NjtTbzswO09OOzs7OztOOzs7OzsKKzI4Mjk7QlJBSUxMRSBQQVRURVJOIERPVFMtMTQ2O1NvOzA7T047Ozs7O047Ozs7OworMjgyQTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yNDY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODJCO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyNDY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODJDO0JSQUlMTEUgUEFUVEVSTiBET1RTLTM0NjtTbzswO09OOzs7OztOOzs7OzsKKzI4MkQ7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM0NjtTbzswO09OOzs7OztOOzs7OzsKKzI4MkU7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM0NjtTbzswO09OOzs7OztOOzs7OzsKKzI4MkY7QlJBSUxMRSBQQVRURVJOIERPVFMtMTIzNDY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODMwO0JSQUlMTEUgUEFUVEVSTiBET1RTLTU2O1NvOzA7T047Ozs7O047Ozs7OworMjgzMTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNTY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODMyO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI1NjtTbzswO09OOzs7OztOOzs7OzsKKzI4MzM7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI1NjtTbzswO09OOzs7OztOOzs7OzsKKzI4MzQ7QlJBSUxMRSBQQVRURVJOIERPVFMtMzU2O1NvOzA7T047Ozs7O047Ozs7OworMjgzNTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzU2O1NvOzA7T047Ozs7O047Ozs7OworMjgzNjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzU2O1NvOzA7T047Ozs7O047Ozs7OworMjgzNztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM1NjtTbzswO09OOzs7OztOOzs7OzsKKzI4Mzg7QlJBSUxMRSBQQVRURVJOIERPVFMtNDU2O1NvOzA7T047Ozs7O047Ozs7OworMjgzOTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNDU2O1NvOzA7T047Ozs7O047Ozs7OworMjgzQTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yNDU2O1NvOzA7T047Ozs7O047Ozs7OworMjgzQjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjQ1NjtTbzswO09OOzs7OztOOzs7OzsKKzI4M0M7QlJBSUxMRSBQQVRURVJOIERPVFMtMzQ1NjtTbzswO09OOzs7OztOOzs7OzsKKzI4M0Q7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM0NTY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODNFO0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNDU2O1NvOzA7T047Ozs7O047Ozs7OworMjgzRjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM0NTY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODQwO0JSQUlMTEUgUEFUVEVSTiBET1RTLTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODQxO0JSQUlMTEUgUEFUVEVSTiBET1RTLTE3O1NvOzA7T047Ozs7O047Ozs7OworMjg0MjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yNztTbzswO09OOzs7OztOOzs7OzsKKzI4NDM7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI3O1NvOzA7T047Ozs7O047Ozs7OworMjg0NDtCUkFJTExFIFBBVFRFUk4gRE9UUy0zNztTbzswO09OOzs7OztOOzs7OzsKKzI4NDU7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM3O1NvOzA7T047Ozs7O047Ozs7OworMjg0NjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODQ3O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODQ4O0JSQUlMTEUgUEFUVEVSTiBET1RTLTQ3O1NvOzA7T047Ozs7O047Ozs7OworMjg0OTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNDc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODRBO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI0NztTbzswO09OOzs7OztOOzs7OzsKKzI4NEI7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI0NztTbzswO09OOzs7OztOOzs7OzsKKzI4NEM7QlJBSUxMRSBQQVRURVJOIERPVFMtMzQ3O1NvOzA7T047Ozs7O047Ozs7OworMjg0RDtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzQ3O1NvOzA7T047Ozs7O047Ozs7OworMjg0RTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzQ3O1NvOzA7T047Ozs7O047Ozs7OworMjg0RjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM0NztTbzswO09OOzs7OztOOzs7OzsKKzI4NTA7QlJBSUxMRSBQQVRURVJOIERPVFMtNTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODUxO0JSQUlMTEUgUEFUVEVSTiBET1RTLTE1NztTbzswO09OOzs7OztOOzs7OzsKKzI4NTI7QlJBSUxMRSBQQVRURVJOIERPVFMtMjU3O1NvOzA7T047Ozs7O047Ozs7OworMjg1MztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjU3O1NvOzA7T047Ozs7O047Ozs7OworMjg1NDtCUkFJTExFIFBBVFRFUk4gRE9UUy0zNTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODU1O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODU2O0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODU3O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzU3O1NvOzA7T047Ozs7O047Ozs7OworMjg1ODtCUkFJTExFIFBBVFRFUk4gRE9UUy00NTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODU5O0JSQUlMTEUgUEFUVEVSTiBET1RTLTE0NTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODVBO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI0NTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODVCO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyNDU3O1NvOzA7T047Ozs7O047Ozs7OworMjg1QztCUkFJTExFIFBBVFRFUk4gRE9UUy0zNDU3O1NvOzA7T047Ozs7O047Ozs7OworMjg1RDtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzQ1NztTbzswO09OOzs7OztOOzs7OzsKKzI4NUU7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM0NTc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODVGO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzQ1NztTbzswO09OOzs7OztOOzs7OzsKKzI4NjA7QlJBSUxMRSBQQVRURVJOIERPVFMtNjc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODYxO0JSQUlMTEUgUEFUVEVSTiBET1RTLTE2NztTbzswO09OOzs7OztOOzs7OzsKKzI4NjI7QlJBSUxMRSBQQVRURVJOIERPVFMtMjY3O1NvOzA7T047Ozs7O047Ozs7OworMjg2MztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjY3O1NvOzA7T047Ozs7O047Ozs7OworMjg2NDtCUkFJTExFIFBBVFRFUk4gRE9UUy0zNjc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODY1O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNjc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODY2O0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNjc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODY3O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzY3O1NvOzA7T047Ozs7O047Ozs7OworMjg2ODtCUkFJTExFIFBBVFRFUk4gRE9UUy00Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODY5O0JSQUlMTEUgUEFUVEVSTiBET1RTLTE0Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODZBO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI0Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODZCO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyNDY3O1NvOzA7T047Ozs7O047Ozs7OworMjg2QztCUkFJTExFIFBBVFRFUk4gRE9UUy0zNDY3O1NvOzA7T047Ozs7O047Ozs7OworMjg2RDtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzQ2NztTbzswO09OOzs7OztOOzs7OzsKKzI4NkU7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM0Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODZGO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzQ2NztTbzswO09OOzs7OztOOzs7OzsKKzI4NzA7QlJBSUxMRSBQQVRURVJOIERPVFMtNTY3O1NvOzA7T047Ozs7O047Ozs7OworMjg3MTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNTY3O1NvOzA7T047Ozs7O047Ozs7OworMjg3MjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yNTY3O1NvOzA7T047Ozs7O047Ozs7OworMjg3MztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjU2NztTbzswO09OOzs7OztOOzs7OzsKKzI4NzQ7QlJBSUxMRSBQQVRURVJOIERPVFMtMzU2NztTbzswO09OOzs7OztOOzs7OzsKKzI4NzU7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM1Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODc2O0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNTY3O1NvOzA7T047Ozs7O047Ozs7OworMjg3NztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM1Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODc4O0JSQUlMTEUgUEFUVEVSTiBET1RTLTQ1Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODc5O0JSQUlMTEUgUEFUVEVSTiBET1RTLTE0NTY3O1NvOzA7T047Ozs7O047Ozs7OworMjg3QTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yNDU2NztTbzswO09OOzs7OztOOzs7OzsKKzI4N0I7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI0NTY3O1NvOzA7T047Ozs7O047Ozs7OworMjg3QztCUkFJTExFIFBBVFRFUk4gRE9UUy0zNDU2NztTbzswO09OOzs7OztOOzs7OzsKKzI4N0Q7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM0NTY3O1NvOzA7T047Ozs7O047Ozs7OworMjg3RTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzQ1Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODdGO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzQ1Njc7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODgwO0JSQUlMTEUgUEFUVEVSTiBET1RTLTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODgxO0JSQUlMTEUgUEFUVEVSTiBET1RTLTE4O1NvOzA7T047Ozs7O047Ozs7OworMjg4MjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yODtTbzswO09OOzs7OztOOzs7OzsKKzI4ODM7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI4O1NvOzA7T047Ozs7O047Ozs7OworMjg4NDtCUkFJTExFIFBBVFRFUk4gRE9UUy0zODtTbzswO09OOzs7OztOOzs7OzsKKzI4ODU7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM4O1NvOzA7T047Ozs7O047Ozs7OworMjg4NjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODg3O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODg4O0JSQUlMTEUgUEFUVEVSTiBET1RTLTQ4O1NvOzA7T047Ozs7O047Ozs7OworMjg4OTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNDg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODhBO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI0ODtTbzswO09OOzs7OztOOzs7OzsKKzI4OEI7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI0ODtTbzswO09OOzs7OztOOzs7OzsKKzI4OEM7QlJBSUxMRSBQQVRURVJOIERPVFMtMzQ4O1NvOzA7T047Ozs7O047Ozs7OworMjg4RDtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzQ4O1NvOzA7T047Ozs7O047Ozs7OworMjg4RTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzQ4O1NvOzA7T047Ozs7O047Ozs7OworMjg4RjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM0ODtTbzswO09OOzs7OztOOzs7OzsKKzI4OTA7QlJBSUxMRSBQQVRURVJOIERPVFMtNTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODkxO0JSQUlMTEUgUEFUVEVSTiBET1RTLTE1ODtTbzswO09OOzs7OztOOzs7OzsKKzI4OTI7QlJBSUxMRSBQQVRURVJOIERPVFMtMjU4O1NvOzA7T047Ozs7O047Ozs7OworMjg5MztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjU4O1NvOzA7T047Ozs7O047Ozs7OworMjg5NDtCUkFJTExFIFBBVFRFUk4gRE9UUy0zNTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODk1O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODk2O0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODk3O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzU4O1NvOzA7T047Ozs7O047Ozs7OworMjg5ODtCUkFJTExFIFBBVFRFUk4gRE9UUy00NTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODk5O0JSQUlMTEUgUEFUVEVSTiBET1RTLTE0NTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODlBO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI0NTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODlCO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyNDU4O1NvOzA7T047Ozs7O047Ozs7OworMjg5QztCUkFJTExFIFBBVFRFUk4gRE9UUy0zNDU4O1NvOzA7T047Ozs7O047Ozs7OworMjg5RDtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzQ1ODtTbzswO09OOzs7OztOOzs7OzsKKzI4OUU7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM0NTg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyODlGO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzQ1ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QTA7QlJBSUxMRSBQQVRURVJOIERPVFMtNjg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEExO0JSQUlMTEUgUEFUVEVSTiBET1RTLTE2ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QTI7QlJBSUxMRSBQQVRURVJOIERPVFMtMjY4O1NvOzA7T047Ozs7O047Ozs7OworMjhBMztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjY4O1NvOzA7T047Ozs7O047Ozs7OworMjhBNDtCUkFJTExFIFBBVFRFUk4gRE9UUy0zNjg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEE1O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNjg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEE2O0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNjg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEE3O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzY4O1NvOzA7T047Ozs7O047Ozs7OworMjhBODtCUkFJTExFIFBBVFRFUk4gRE9UUy00Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEE5O0JSQUlMTEUgUEFUVEVSTiBET1RTLTE0Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEFBO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI0Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEFCO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyNDY4O1NvOzA7T047Ozs7O047Ozs7OworMjhBQztCUkFJTExFIFBBVFRFUk4gRE9UUy0zNDY4O1NvOzA7T047Ozs7O047Ozs7OworMjhBRDtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzQ2ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QUU7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM0Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEFGO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzQ2ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QjA7QlJBSUxMRSBQQVRURVJOIERPVFMtNTY4O1NvOzA7T047Ozs7O047Ozs7OworMjhCMTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNTY4O1NvOzA7T047Ozs7O047Ozs7OworMjhCMjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yNTY4O1NvOzA7T047Ozs7O047Ozs7OworMjhCMztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjU2ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QjQ7QlJBSUxMRSBQQVRURVJOIERPVFMtMzU2ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QjU7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM1Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEI2O0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNTY4O1NvOzA7T047Ozs7O047Ozs7OworMjhCNztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM1Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEI4O0JSQUlMTEUgUEFUVEVSTiBET1RTLTQ1Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEI5O0JSQUlMTEUgUEFUVEVSTiBET1RTLTE0NTY4O1NvOzA7T047Ozs7O047Ozs7OworMjhCQTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yNDU2ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QkI7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI0NTY4O1NvOzA7T047Ozs7O047Ozs7OworMjhCQztCUkFJTExFIFBBVFRFUk4gRE9UUy0zNDU2ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QkQ7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM0NTY4O1NvOzA7T047Ozs7O047Ozs7OworMjhCRTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzQ1Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEJGO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzQ1Njg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEMwO0JSQUlMTEUgUEFUVEVSTiBET1RTLTc4O1NvOzA7T047Ozs7O047Ozs7OworMjhDMTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEMyO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QzM7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4QzQ7QlJBSUxMRSBQQVRURVJOIERPVFMtMzc4O1NvOzA7T047Ozs7O047Ozs7OworMjhDNTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzc4O1NvOzA7T047Ozs7O047Ozs7OworMjhDNjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzc4O1NvOzA7T047Ozs7O047Ozs7OworMjhDNztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4Qzg7QlJBSUxMRSBQQVRURVJOIERPVFMtNDc4O1NvOzA7T047Ozs7O047Ozs7OworMjhDOTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNDc4O1NvOzA7T047Ozs7O047Ozs7OworMjhDQTtCUkFJTExFIFBBVFRFUk4gRE9UUy0yNDc4O1NvOzA7T047Ozs7O047Ozs7OworMjhDQjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjQ3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4Q0M7QlJBSUxMRSBQQVRURVJOIERPVFMtMzQ3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4Q0Q7QlJBSUxMRSBQQVRURVJOIERPVFMtMTM0Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOENFO0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNDc4O1NvOzA7T047Ozs7O047Ozs7OworMjhDRjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM0Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEQwO0JSQUlMTEUgUEFUVEVSTiBET1RTLTU3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RDE7QlJBSUxMRSBQQVRURVJOIERPVFMtMTU3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RDI7QlJBSUxMRSBQQVRURVJOIERPVFMtMjU3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RDM7QlJBSUxMRSBQQVRURVJOIERPVFMtMTI1Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEQ0O0JSQUlMTEUgUEFUVEVSTiBET1RTLTM1Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEQ1O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNTc4O1NvOzA7T047Ozs7O047Ozs7OworMjhENjtCUkFJTExFIFBBVFRFUk4gRE9UUy0yMzU3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RDc7QlJBSUxMRSBQQVRURVJOIERPVFMtMTIzNTc4O1NvOzA7T047Ozs7O047Ozs7OworMjhEODtCUkFJTExFIFBBVFRFUk4gRE9UUy00NTc4O1NvOzA7T047Ozs7O047Ozs7OworMjhEOTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xNDU3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4REE7QlJBSUxMRSBQQVRURVJOIERPVFMtMjQ1Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOERCO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyNDU3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4REM7QlJBSUxMRSBQQVRURVJOIERPVFMtMzQ1Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEREO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNDU3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4REU7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM0NTc4O1NvOzA7T047Ozs7O047Ozs7OworMjhERjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjM0NTc4O1NvOzA7T047Ozs7O047Ozs7OworMjhFMDtCUkFJTExFIFBBVFRFUk4gRE9UUy02Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEUxO0JSQUlMTEUgUEFUVEVSTiBET1RTLTE2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEUyO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEUzO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyNjc4O1NvOzA7T047Ozs7O047Ozs7OworMjhFNDtCUkFJTExFIFBBVFRFUk4gRE9UUy0zNjc4O1NvOzA7T047Ozs7O047Ozs7OworMjhFNTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RTY7QlJBSUxMRSBQQVRURVJOIERPVFMtMjM2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEU3O0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RTg7QlJBSUxMRSBQQVRURVJOIERPVFMtNDY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RTk7QlJBSUxMRSBQQVRURVJOIERPVFMtMTQ2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEVBO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI0Njc4O1NvOzA7T047Ozs7O047Ozs7OworMjhFQjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjQ2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEVDO0JSQUlMTEUgUEFUVEVSTiBET1RTLTM0Njc4O1NvOzA7T047Ozs7O047Ozs7OworMjhFRDtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzQ2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEVFO0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNDY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RUY7QlJBSUxMRSBQQVRURVJOIERPVFMtMTIzNDY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RjA7QlJBSUxMRSBQQVRURVJOIERPVFMtNTY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RjE7QlJBSUxMRSBQQVRURVJOIERPVFMtMTU2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEYyO0JSQUlMTEUgUEFUVEVSTiBET1RTLTI1Njc4O1NvOzA7T047Ozs7O047Ozs7OworMjhGMztCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjU2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEY0O0JSQUlMTEUgUEFUVEVSTiBET1RTLTM1Njc4O1NvOzA7T047Ozs7O047Ozs7OworMjhGNTtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMzU2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEY2O0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNTY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4Rjc7QlJBSUxMRSBQQVRURVJOIERPVFMtMTIzNTY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4Rjg7QlJBSUxMRSBQQVRURVJOIERPVFMtNDU2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEY5O0JSQUlMTEUgUEFUVEVSTiBET1RTLTE0NTY3ODtTbzswO09OOzs7OztOOzs7OzsKKzI4RkE7QlJBSUxMRSBQQVRURVJOIERPVFMtMjQ1Njc4O1NvOzA7T047Ozs7O047Ozs7OworMjhGQjtCUkFJTExFIFBBVFRFUk4gRE9UUy0xMjQ1Njc4O1NvOzA7T047Ozs7O047Ozs7OworMjhGQztCUkFJTExFIFBBVFRFUk4gRE9UUy0zNDU2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEZEO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEzNDU2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEZFO0JSQUlMTEUgUEFUVEVSTiBET1RTLTIzNDU2Nzg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyOEZGO0JSQUlMTEUgUEFUVEVSTiBET1RTLTEyMzQ1Njc4O1NvOzA7T047Ozs7O047Ozs7OworMjkwMDtSSUdIVFdBUkRTIFRXTy1IRUFERUQgQVJST1cgV0lUSCBWRVJUSUNBTCBTVFJPS0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTAxO1JJR0hUV0FSRFMgVFdPLUhFQURFRCBBUlJPVyBXSVRIIERPVUJMRSBWRVJUSUNBTCBTVFJPS0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTAyO0xFRlRXQVJEUyBET1VCTEUgQVJST1cgV0lUSCBWRVJUSUNBTCBTVFJPS0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTAzO1JJR0hUV0FSRFMgRE9VQkxFIEFSUk9XIFdJVEggVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMjkwNDtMRUZUIFJJR0hUIERPVUJMRSBBUlJPVyBXSVRIIFZFUlRJQ0FMIFNUUk9LRTtTbTswO09OOzs7OztOOzs7OzsKKzI5MDU7UklHSFRXQVJEUyBUV08tSEVBREVEIEFSUk9XIEZST00gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjkwNjtMRUZUV0FSRFMgRE9VQkxFIEFSUk9XIEZST00gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjkwNztSSUdIVFdBUkRTIERPVUJMRSBBUlJPVyBGUk9NIEJBUjtTbTswO09OOzs7OztOOzs7OzsKKzI5MDg7RE9XTldBUkRTIEFSUk9XIFdJVEggSE9SSVpPTlRBTCBTVFJPS0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTA5O1VQV0FSRFMgQVJST1cgV0lUSCBIT1JJWk9OVEFMIFNUUk9LRTtTbTswO09OOzs7OztOOzs7OzsKKzI5MEE7VVBXQVJEUyBUUklQTEUgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTBCO0RPV05XQVJEUyBUUklQTEUgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTBDO0xFRlRXQVJEUyBET1VCTEUgREFTSCBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI5MEQ7UklHSFRXQVJEUyBET1VCTEUgREFTSCBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI5MEU7TEVGVFdBUkRTIFRSSVBMRSBEQVNIIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkwRjtSSUdIVFdBUkRTIFRSSVBMRSBEQVNIIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkxMDtSSUdIVFdBUkRTIFRXTy1IRUFERUQgVFJJUExFIERBU0ggQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTExO1JJR0hUV0FSRFMgQVJST1cgV0lUSCBET1RURUQgU1RFTTtTbTswO09OOzs7OztOOzs7OzsKKzI5MTI7VVBXQVJEUyBBUlJPVyBUTyBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTEzO0RPV05XQVJEUyBBUlJPVyBUTyBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTE0O1JJR0hUV0FSRFMgQVJST1cgV0lUSCBUQUlMIFdJVEggVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMjkxNTtSSUdIVFdBUkRTIEFSUk9XIFdJVEggVEFJTCBXSVRIIERPVUJMRSBWRVJUSUNBTCBTVFJPS0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTE2O1JJR0hUV0FSRFMgVFdPLUhFQURFRCBBUlJPVyBXSVRIIFRBSUw7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTE3O1JJR0hUV0FSRFMgVFdPLUhFQURFRCBBUlJPVyBXSVRIIFRBSUwgV0lUSCBWRVJUSUNBTCBTVFJPS0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTE4O1JJR0hUV0FSRFMgVFdPLUhFQURFRCBBUlJPVyBXSVRIIFRBSUwgV0lUSCBET1VCTEUgVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMjkxOTtMRUZUV0FSRFMgQVJST1ctVEFJTDtTbTswO09OOzs7OztOOzs7OzsKKzI5MUE7UklHSFRXQVJEUyBBUlJPVy1UQUlMO1NtOzA7T047Ozs7O047Ozs7OworMjkxQjtMRUZUV0FSRFMgRE9VQkxFIEFSUk9XLVRBSUw7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTFDO1JJR0hUV0FSRFMgRE9VQkxFIEFSUk9XLVRBSUw7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTFEO0xFRlRXQVJEUyBBUlJPVyBUTyBCTEFDSyBESUFNT05EO1NtOzA7T047Ozs7O047Ozs7OworMjkxRTtSSUdIVFdBUkRTIEFSUk9XIFRPIEJMQUNLIERJQU1PTkQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTFGO0xFRlRXQVJEUyBBUlJPVyBGUk9NIEJBUiBUTyBCTEFDSyBESUFNT05EO1NtOzA7T047Ozs7O047Ozs7OworMjkyMDtSSUdIVFdBUkRTIEFSUk9XIEZST00gQkFSIFRPIEJMQUNLIERJQU1PTkQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTIxO05PUlRIIFdFU1QgQU5EIFNPVVRIIEVBU1QgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTIyO05PUlRIIEVBU1QgQU5EIFNPVVRIIFdFU1QgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTIzO05PUlRIIFdFU1QgQVJST1cgV0lUSCBIT09LO1NtOzA7T047Ozs7O047Ozs7OworMjkyNDtOT1JUSCBFQVNUIEFSUk9XIFdJVEggSE9PSztTbTswO09OOzs7OztOOzs7OzsKKzI5MjU7U09VVEggRUFTVCBBUlJPVyBXSVRIIEhPT0s7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTI2O1NPVVRIIFdFU1QgQVJST1cgV0lUSCBIT09LO1NtOzA7T047Ozs7O047Ozs7OworMjkyNztOT1JUSCBXRVNUIEFSUk9XIEFORCBOT1JUSCBFQVNUIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkyODtOT1JUSCBFQVNUIEFSUk9XIEFORCBTT1VUSCBFQVNUIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkyOTtTT1VUSCBFQVNUIEFSUk9XIEFORCBTT1VUSCBXRVNUIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkyQTtTT1VUSCBXRVNUIEFSUk9XIEFORCBOT1JUSCBXRVNUIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkyQjtSSVNJTkcgRElBR09OQUwgQ1JPU1NJTkcgRkFMTElORyBESUFHT05BTDtTbTswO09OOzs7OztOOzs7OzsKKzI5MkM7RkFMTElORyBESUFHT05BTCBDUk9TU0lORyBSSVNJTkcgRElBR09OQUw7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTJEO1NPVVRIIEVBU1QgQVJST1cgQ1JPU1NJTkcgTk9SVEggRUFTVCBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI5MkU7Tk9SVEggRUFTVCBBUlJPVyBDUk9TU0lORyBTT1VUSCBFQVNUIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkyRjtGQUxMSU5HIERJQUdPTkFMIENST1NTSU5HIE5PUlRIIEVBU1QgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTMwO1JJU0lORyBESUFHT05BTCBDUk9TU0lORyBTT1VUSCBFQVNUIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkzMTtOT1JUSCBFQVNUIEFSUk9XIENST1NTSU5HIE5PUlRIIFdFU1QgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTMyO05PUlRIIFdFU1QgQVJST1cgQ1JPU1NJTkcgTk9SVEggRUFTVCBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI5MzM7V0FWRSBBUlJPVyBQT0lOVElORyBESVJFQ1RMWSBSSUdIVDtTbTswO09OOzs7OztOOzs7OzsKKzI5MzQ7QVJST1cgUE9JTlRJTkcgUklHSFRXQVJEUyBUSEVOIENVUlZJTkcgVVBXQVJEUztTbTswO09OOzs7OztOOzs7OzsKKzI5MzU7QVJST1cgUE9JTlRJTkcgUklHSFRXQVJEUyBUSEVOIENVUlZJTkcgRE9XTldBUkRTO1NtOzA7T047Ozs7O047Ozs7OworMjkzNjtBUlJPVyBQT0lOVElORyBET1dOV0FSRFMgVEhFTiBDVVJWSU5HIExFRlRXQVJEUztTbTswO09OOzs7OztOOzs7OzsKKzI5Mzc7QVJST1cgUE9JTlRJTkcgRE9XTldBUkRTIFRIRU4gQ1VSVklORyBSSUdIVFdBUkRTO1NtOzA7T047Ozs7O047Ozs7OworMjkzODtSSUdIVC1TSURFIEFSQyBDTE9DS1dJU0UgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTM5O0xFRlQtU0lERSBBUkMgQU5USUNMT0NLV0lTRSBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI5M0E7VE9QIEFSQyBBTlRJQ0xPQ0tXSVNFIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjkzQjtCT1RUT00gQVJDIEFOVElDTE9DS1dJU0UgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTNDO1RPUCBBUkMgQ0xPQ0tXSVNFIEFSUk9XIFdJVEggTUlOVVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTNEO1RPUCBBUkMgQU5USUNMT0NLV0lTRSBBUlJPVyBXSVRIIFBMVVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTNFO0xPV0VSIFJJR0hUIFNFTUlDSVJDVUxBUiBDTE9DS1dJU0UgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTNGO0xPV0VSIExFRlQgU0VNSUNJUkNVTEFSIEFOVElDTE9DS1dJU0UgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTQwO0FOVElDTE9DS1dJU0UgQ0xPU0VEIENJUkNMRSBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI5NDE7Q0xPQ0tXSVNFIENMT1NFRCBDSVJDTEUgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTQyO1JJR0hUV0FSRFMgQVJST1cgQUJPVkUgU0hPUlQgTEVGVFdBUkRTIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjk0MztMRUZUV0FSRFMgQVJST1cgQUJPVkUgU0hPUlQgUklHSFRXQVJEUyBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI5NDQ7U0hPUlQgUklHSFRXQVJEUyBBUlJPVyBBQk9WRSBMRUZUV0FSRFMgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTQ1O1JJR0hUV0FSRFMgQVJST1cgV0lUSCBQTFVTIEJFTE9XO1NtOzA7T047Ozs7O047Ozs7OworMjk0NjtMRUZUV0FSRFMgQVJST1cgV0lUSCBQTFVTIEJFTE9XO1NtOzA7T047Ozs7O047Ozs7OworMjk0NztSSUdIVFdBUkRTIEFSUk9XIFRIUk9VR0ggWDtTbTswO09OOzs7OztOOzs7OzsKKzI5NDg7TEVGVCBSSUdIVCBBUlJPVyBUSFJPVUdIIFNNQUxMIENJUkNMRTtTbTswO09OOzs7OztOOzs7OzsKKzI5NDk7VVBXQVJEUyBUV08tSEVBREVEIEFSUk9XIEZST00gU01BTEwgQ0lSQ0xFO1NtOzA7T047Ozs7O047Ozs7OworMjk0QTtMRUZUIEJBUkIgVVAgUklHSFQgQkFSQiBET1dOIEhBUlBPT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTRCO0xFRlQgQkFSQiBET1dOIFJJR0hUIEJBUkIgVVAgSEFSUE9PTjtTbTswO09OOzs7OztOOzs7OzsKKzI5NEM7VVAgQkFSQiBSSUdIVCBET1dOIEJBUkIgTEVGVCBIQVJQT09OO1NtOzA7T047Ozs7O047Ozs7OworMjk0RDtVUCBCQVJCIExFRlQgRE9XTiBCQVJCIFJJR0hUIEhBUlBPT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTRFO0xFRlQgQkFSQiBVUCBSSUdIVCBCQVJCIFVQIEhBUlBPT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTRGO1VQIEJBUkIgUklHSFQgRE9XTiBCQVJCIFJJR0hUIEhBUlBPT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTUwO0xFRlQgQkFSQiBET1dOIFJJR0hUIEJBUkIgRE9XTiBIQVJQT09OO1NtOzA7T047Ozs7O047Ozs7OworMjk1MTtVUCBCQVJCIExFRlQgRE9XTiBCQVJCIExFRlQgSEFSUE9PTjtTbTswO09OOzs7OztOOzs7OzsKKzI5NTI7TEVGVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQIFRPIEJBUjtTbTswO09OOzs7OztOOzs7OzsKKzI5NTM7UklHSFRXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBVUCBUTyBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTU0O1VQV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgUklHSFQgVE8gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjk1NTtET1dOV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgUklHSFQgVE8gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjk1NjtMRUZUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgRE9XTiBUTyBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTU3O1JJR0hUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgRE9XTiBUTyBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTU4O1VQV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgTEVGVCBUTyBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTU5O0RPV05XQVJEUyBIQVJQT09OIFdJVEggQkFSQiBMRUZUIFRPIEJBUjtTbTswO09OOzs7OztOOzs7OzsKKzI5NUE7TEVGVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQIEZST00gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjk1QjtSSUdIVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQIEZST00gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjk1QztVUFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFJJR0hUIEZST00gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjk1RDtET1dOV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgUklHSFQgRlJPTSBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTVFO0xFRlRXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBET1dOIEZST00gQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjk1RjtSSUdIVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIERPV04gRlJPTSBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTYwO1VQV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgTEVGVCBGUk9NIEJBUjtTbTswO09OOzs7OztOOzs7OzsKKzI5NjE7RE9XTldBUkRTIEhBUlBPT04gV0lUSCBCQVJCIExFRlQgRlJPTSBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTYyO0xFRlRXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBVUCBBQk9WRSBMRUZUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgRE9XTjtTbTswO09OOzs7OztOOzs7OzsKKzI5NjM7VVBXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBMRUZUIEJFU0lERSBVUFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFJJR0hUO1NtOzA7T047Ozs7O047Ozs7OworMjk2NDtSSUdIVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQIEFCT1ZFIFJJR0hUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgRE9XTjtTbTswO09OOzs7OztOOzs7OzsKKzI5NjU7RE9XTldBUkRTIEhBUlBPT04gV0lUSCBCQVJCIExFRlQgQkVTSURFIERPV05XQVJEUyBIQVJQT09OIFdJVEggQkFSQiBSSUdIVDtTbTswO09OOzs7OztOOzs7OzsKKzI5NjY7TEVGVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQIEFCT1ZFIFJJR0hUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgVVA7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTY3O0xFRlRXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBET1dOIEFCT1ZFIFJJR0hUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgRE9XTjtTbTswO09OOzs7OztOOzs7OzsKKzI5Njg7UklHSFRXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBVUCBBQk9WRSBMRUZUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgVVA7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTY5O1JJR0hUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgRE9XTiBBQk9WRSBMRUZUV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgRE9XTjtTbTswO09OOzs7OztOOzs7OzsKKzI5NkE7TEVGVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQIEFCT1ZFIExPTkcgREFTSDtTbTswO09OOzs7OztOOzs7OzsKKzI5NkI7TEVGVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIERPV04gQkVMT1cgTE9ORyBEQVNIO1NtOzA7T047Ozs7O047Ozs7OworMjk2QztSSUdIVFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFVQIEFCT1ZFIExPTkcgREFTSDtTbTswO09OOzs7OztOOzs7OzsKKzI5NkQ7UklHSFRXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBET1dOIEJFTE9XIExPTkcgREFTSDtTbTswO09OOzs7OztOOzs7OzsKKzI5NkU7VVBXQVJEUyBIQVJQT09OIFdJVEggQkFSQiBMRUZUIEJFU0lERSBET1dOV0FSRFMgSEFSUE9PTiBXSVRIIEJBUkIgUklHSFQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTZGO0RPV05XQVJEUyBIQVJQT09OIFdJVEggQkFSQiBMRUZUIEJFU0lERSBVUFdBUkRTIEhBUlBPT04gV0lUSCBCQVJCIFJJR0hUO1NtOzA7T047Ozs7O047Ozs7OworMjk3MDtSSUdIVCBET1VCTEUgQVJST1cgV0lUSCBST1VOREVEIEhFQUQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTcxO0VRVUFMUyBTSUdOIEFCT1ZFIFJJR0hUV0FSRFMgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTcyO1RJTERFIE9QRVJBVE9SIEFCT1ZFIFJJR0hUV0FSRFMgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTczO0xFRlRXQVJEUyBBUlJPVyBBQk9WRSBUSUxERSBPUEVSQVRPUjtTbTswO09OOzs7OztOOzs7OzsKKzI5NzQ7UklHSFRXQVJEUyBBUlJPVyBBQk9WRSBUSUxERSBPUEVSQVRPUjtTbTswO09OOzs7OztOOzs7OzsKKzI5NzU7UklHSFRXQVJEUyBBUlJPVyBBQk9WRSBBTE1PU1QgRVFVQUwgVE87U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTc2O0xFU1MtVEhBTiBBQk9WRSBMRUZUV0FSRFMgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTc3O0xFRlRXQVJEUyBBUlJPVyBUSFJPVUdIIExFU1MtVEhBTjtTbTswO09OOzs7OztOOzs7OzsKKzI5Nzg7R1JFQVRFUi1USEFOIEFCT1ZFIFJJR0hUV0FSRFMgQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTc5O1NVQlNFVCBBQk9WRSBSSUdIVFdBUkRTIEFSUk9XO1NtOzA7T047Ozs7O047Ozs7OworMjk3QTtMRUZUV0FSRFMgQVJST1cgVEhST1VHSCBTVUJTRVQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTdCO1NVUEVSU0VUIEFCT1ZFIExFRlRXQVJEUyBBUlJPVztTbTswO09OOzs7OztOOzs7OzsKKzI5N0M7TEVGVCBGSVNIIFRBSUw7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTdEO1JJR0hUIEZJU0ggVEFJTDtTbTswO09OOzs7OztOOzs7OzsKKzI5N0U7VVAgRklTSCBUQUlMO1NtOzA7T047Ozs7O047Ozs7OworMjk3RjtET1dOIEZJU0ggVEFJTDtTbTswO09OOzs7OztOOzs7OzsKKzI5ODA7VFJJUExFIFZFUlRJQ0FMIEJBUiBERUxJTUlURVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTgxO1ogTk9UQVRJT04gU1BPVDtTbTswO09OOzs7OztOOzs7OzsKKzI5ODI7WiBOT1RBVElPTiBUWVBFIENPTE9OO1NtOzA7T047Ozs7O047Ozs7OworMjk4MztMRUZUIFdISVRFIENVUkxZIEJSQUNLRVQ7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyOTg0O1JJR0hUIFdISVRFIENVUkxZIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyOTg1O0xFRlQgV0hJVEUgUEFSRU5USEVTSVM7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyOTg2O1JJR0hUIFdISVRFIFBBUkVOVEhFU0lTO1BlOzA7T047Ozs7O1k7Ozs7OworMjk4NztaIE5PVEFUSU9OIExFRlQgSU1BR0UgQlJBQ0tFVDtQczswO09OOzs7OztZOzs7OzsKKzI5ODg7WiBOT1RBVElPTiBSSUdIVCBJTUFHRSBCUkFDS0VUO1BlOzA7T047Ozs7O1k7Ozs7OworMjk4OTtaIE5PVEFUSU9OIExFRlQgQklORElORyBCUkFDS0VUO1BzOzA7T047Ozs7O1k7Ozs7OworMjk4QTtaIE5PVEFUSU9OIFJJR0hUIEJJTkRJTkcgQlJBQ0tFVDtQZTswO09OOzs7OztZOzs7OzsKKzI5OEI7TEVGVCBTUVVBUkUgQlJBQ0tFVCBXSVRIIFVOREVSQkFSO1BzOzA7T047Ozs7O1k7Ozs7OworMjk4QztSSUdIVCBTUVVBUkUgQlJBQ0tFVCBXSVRIIFVOREVSQkFSO1BlOzA7T047Ozs7O1k7Ozs7OworMjk4RDtMRUZUIFNRVUFSRSBCUkFDS0VUIFdJVEggVElDSyBJTiBUT1AgQ09STkVSO1BzOzA7T047Ozs7O1k7Ozs7OworMjk4RTtSSUdIVCBTUVVBUkUgQlJBQ0tFVCBXSVRIIFRJQ0sgSU4gQk9UVE9NIENPUk5FUjtQZTswO09OOzs7OztZOzs7OzsKKzI5OEY7TEVGVCBTUVVBUkUgQlJBQ0tFVCBXSVRIIFRJQ0sgSU4gQk9UVE9NIENPUk5FUjtQczswO09OOzs7OztZOzs7OzsKKzI5OTA7UklHSFQgU1FVQVJFIEJSQUNLRVQgV0lUSCBUSUNLIElOIFRPUCBDT1JORVI7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyOTkxO0xFRlQgQU5HTEUgQlJBQ0tFVCBXSVRIIERPVDtQczswO09OOzs7OztZOzs7OzsKKzI5OTI7UklHSFQgQU5HTEUgQlJBQ0tFVCBXSVRIIERPVDtQZTswO09OOzs7OztZOzs7OzsKKzI5OTM7TEVGVCBBUkMgTEVTUy1USEFOIEJSQUNLRVQ7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyOTk0O1JJR0hUIEFSQyBHUkVBVEVSLVRIQU4gQlJBQ0tFVDtQZTswO09OOzs7OztZOzs7OzsKKzI5OTU7RE9VQkxFIExFRlQgQVJDIEdSRUFURVItVEhBTiBCUkFDS0VUO1BzOzA7T047Ozs7O1k7Ozs7OworMjk5NjtET1VCTEUgUklHSFQgQVJDIExFU1MtVEhBTiBCUkFDS0VUO1BlOzA7T047Ozs7O1k7Ozs7OworMjk5NztMRUZUIEJMQUNLIFRPUlRPSVNFIFNIRUxMIEJSQUNLRVQ7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyOTk4O1JJR0hUIEJMQUNLIFRPUlRPSVNFIFNIRUxMIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyOTk5O0RPVFRFRCBGRU5DRTtTbTswO09OOzs7OztOOzs7OzsKKzI5OUE7VkVSVElDQUwgWklHWkFHIExJTkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOTlCO01FQVNVUkVEIEFOR0xFIE9QRU5JTkcgTEVGVDtTbTswO09OOzs7OztZOzs7OzsKKzI5OUM7UklHSFQgQU5HTEUgVkFSSUFOVCBXSVRIIFNRVUFSRTtTbTswO09OOzs7OztZOzs7OzsKKzI5OUQ7TUVBU1VSRUQgUklHSFQgQU5HTEUgV0lUSCBET1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyOTlFO0FOR0xFIFdJVEggUyBJTlNJREU7U207MDtPTjs7Ozs7WTs7Ozs7CisyOTlGO0FDVVRFIEFOR0xFO1NtOzA7T047Ozs7O1k7Ozs7OworMjlBMDtTUEhFUklDQUwgQU5HTEUgT1BFTklORyBMRUZUO1NtOzA7T047Ozs7O1k7Ozs7OworMjlBMTtTUEhFUklDQUwgQU5HTEUgT1BFTklORyBVUDtTbTswO09OOzs7OztZOzs7OzsKKzI5QTI7VFVSTkVEIEFOR0xFO1NtOzA7T047Ozs7O1k7Ozs7OworMjlBMztSRVZFUlNFRCBBTkdMRTtTbTswO09OOzs7OztZOzs7OzsKKzI5QTQ7QU5HTEUgV0lUSCBVTkRFUkJBUjtTbTswO09OOzs7OztZOzs7OzsKKzI5QTU7UkVWRVJTRUQgQU5HTEUgV0lUSCBVTkRFUkJBUjtTbTswO09OOzs7OztZOzs7OzsKKzI5QTY7T0JMSVFVRSBBTkdMRSBPUEVOSU5HIFVQO1NtOzA7T047Ozs7O1k7Ozs7OworMjlBNztPQkxJUVVFIEFOR0xFIE9QRU5JTkcgRE9XTjtTbTswO09OOzs7OztZOzs7OzsKKzI5QTg7TUVBU1VSRUQgQU5HTEUgV0lUSCBPUEVOIEFSTSBFTkRJTkcgSU4gQVJST1cgUE9JTlRJTkcgVVAgQU5EIFJJR0hUO1NtOzA7T047Ozs7O1k7Ozs7OworMjlBOTtNRUFTVVJFRCBBTkdMRSBXSVRIIE9QRU4gQVJNIEVORElORyBJTiBBUlJPVyBQT0lOVElORyBVUCBBTkQgTEVGVDtTbTswO09OOzs7OztZOzs7OzsKKzI5QUE7TUVBU1VSRUQgQU5HTEUgV0lUSCBPUEVOIEFSTSBFTkRJTkcgSU4gQVJST1cgUE9JTlRJTkcgRE9XTiBBTkQgUklHSFQ7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUFCO01FQVNVUkVEIEFOR0xFIFdJVEggT1BFTiBBUk0gRU5ESU5HIElOIEFSUk9XIFBPSU5USU5HIERPV04gQU5EIExFRlQ7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUFDO01FQVNVUkVEIEFOR0xFIFdJVEggT1BFTiBBUk0gRU5ESU5HIElOIEFSUk9XIFBPSU5USU5HIFJJR0hUIEFORCBVUDtTbTswO09OOzs7OztZOzs7OzsKKzI5QUQ7TUVBU1VSRUQgQU5HTEUgV0lUSCBPUEVOIEFSTSBFTkRJTkcgSU4gQVJST1cgUE9JTlRJTkcgTEVGVCBBTkQgVVA7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUFFO01FQVNVUkVEIEFOR0xFIFdJVEggT1BFTiBBUk0gRU5ESU5HIElOIEFSUk9XIFBPSU5USU5HIFJJR0hUIEFORCBET1dOO1NtOzA7T047Ozs7O1k7Ozs7OworMjlBRjtNRUFTVVJFRCBBTkdMRSBXSVRIIE9QRU4gQVJNIEVORElORyBJTiBBUlJPVyBQT0lOVElORyBMRUZUIEFORCBET1dOO1NtOzA7T047Ozs7O1k7Ozs7OworMjlCMDtSRVZFUlNFRCBFTVBUWSBTRVQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUIxO0VNUFRZIFNFVCBXSVRIIE9WRVJCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUIyO0VNUFRZIFNFVCBXSVRIIFNNQUxMIENJUkNMRSBBQk9WRTtTbTswO09OOzs7OztOOzs7OzsKKzI5QjM7RU1QVFkgU0VUIFdJVEggUklHSFQgQVJST1cgQUJPVkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUI0O0VNUFRZIFNFVCBXSVRIIExFRlQgQVJST1cgQUJPVkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUI1O0NJUkNMRSBXSVRIIEhPUklaT05UQUwgQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjlCNjtDSVJDTEVEIFZFUlRJQ0FMIEJBUjtTbTswO09OOzs7OztOOzs7OzsKKzI5Qjc7Q0lSQ0xFRCBQQVJBTExFTDtTbTswO09OOzs7OztOOzs7OzsKKzI5Qjg7Q0lSQ0xFRCBSRVZFUlNFIFNPTElEVVM7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUI5O0NJUkNMRUQgUEVSUEVORElDVUxBUjtTbTswO09OOzs7OztOOzs7OzsKKzI5QkE7Q0lSQ0xFIERJVklERUQgQlkgSE9SSVpPTlRBTCBCQVIgQU5EIFRPUCBIQUxGIERJVklERUQgQlkgVkVSVElDQUwgQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjlCQjtDSVJDTEUgV0lUSCBTVVBFUklNUE9TRUQgWDtTbTswO09OOzs7OztOOzs7OzsKKzI5QkM7Q0lSQ0xFRCBBTlRJQ0xPQ0tXSVNFLVJPVEFURUQgRElWSVNJT04gU0lHTjtTbTswO09OOzs7OztOOzs7OzsKKzI5QkQ7VVAgQVJST1cgVEhST1VHSCBDSVJDTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUJFO0NJUkNMRUQgV0hJVEUgQlVMTEVUO1NtOzA7T047Ozs7O047Ozs7OworMjlCRjtDSVJDTEVEIEJVTExFVDtTbTswO09OOzs7OztOOzs7OzsKKzI5QzA7Q0lSQ0xFRCBMRVNTLVRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyOUMxO0NJUkNMRUQgR1JFQVRFUi1USEFOO1NtOzA7T047Ozs7O1k7Ozs7OworMjlDMjtDSVJDTEUgV0lUSCBTTUFMTCBDSVJDTEUgVE8gVEhFIFJJR0hUO1NtOzA7T047Ozs7O1k7Ozs7OworMjlDMztDSVJDTEUgV0lUSCBUV08gSE9SSVpPTlRBTCBTVFJPS0VTIFRPIFRIRSBSSUdIVDtTbTswO09OOzs7OztZOzs7OzsKKzI5QzQ7U1FVQVJFRCBSSVNJTkcgRElBR09OQUwgU0xBU0g7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUM1O1NRVUFSRUQgRkFMTElORyBESUFHT05BTCBTTEFTSDtTbTswO09OOzs7OztZOzs7OzsKKzI5QzY7U1FVQVJFRCBBU1RFUklTSztTbTswO09OOzs7OztOOzs7OzsKKzI5Qzc7U1FVQVJFRCBTTUFMTCBDSVJDTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUM4O1NRVUFSRUQgU1FVQVJFO1NtOzA7T047Ozs7O047Ozs7OworMjlDOTtUV08gSk9JTkVEIFNRVUFSRVM7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUNBO1RSSUFOR0xFIFdJVEggRE9UIEFCT1ZFO1NtOzA7T047Ozs7O047Ozs7OworMjlDQjtUUklBTkdMRSBXSVRIIFVOREVSQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjlDQztTIElOIFRSSUFOR0xFO1NtOzA7T047Ozs7O047Ozs7OworMjlDRDtUUklBTkdMRSBXSVRIIFNFUklGUyBBVCBCT1RUT007U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUNFO1JJR0hUIFRSSUFOR0xFIEFCT1ZFIExFRlQgVFJJQU5HTEU7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUNGO0xFRlQgVFJJQU5HTEUgQkVTSURFIFZFUlRJQ0FMIEJBUjtTbTswO09OOzs7OztZOzs7OzsKKzI5RDA7VkVSVElDQUwgQkFSIEJFU0lERSBSSUdIVCBUUklBTkdMRTtTbTswO09OOzs7OztZOzs7OzsKKzI5RDE7Qk9XVElFIFdJVEggTEVGVCBIQUxGIEJMQUNLO1NtOzA7T047Ozs7O1k7Ozs7OworMjlEMjtCT1dUSUUgV0lUSCBSSUdIVCBIQUxGIEJMQUNLO1NtOzA7T047Ozs7O1k7Ozs7OworMjlEMztCTEFDSyBCT1dUSUU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUQ0O1RJTUVTIFdJVEggTEVGVCBIQUxGIEJMQUNLO1NtOzA7T047Ozs7O1k7Ozs7OworMjlENTtUSU1FUyBXSVRIIFJJR0hUIEhBTEYgQkxBQ0s7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUQ2O1dISVRFIEhPVVJHTEFTUztTbTswO09OOzs7OztOOzs7OzsKKzI5RDc7QkxBQ0sgSE9VUkdMQVNTO1NtOzA7T047Ozs7O047Ozs7OworMjlEODtMRUZUIFdJR0dMWSBGRU5DRTtQczswO09OOzs7OztZOzs7OzsKKzI5RDk7UklHSFQgV0lHR0xZIEZFTkNFO1BlOzA7T047Ozs7O1k7Ozs7OworMjlEQTtMRUZUIERPVUJMRSBXSUdHTFkgRkVOQ0U7UHM7MDtPTjs7Ozs7WTs7Ozs7CisyOURCO1JJR0hUIERPVUJMRSBXSUdHTFkgRkVOQ0U7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyOURDO0lOQ09NUExFVEUgSU5GSU5JVFk7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUREO1RJRSBPVkVSIElORklOSVRZO1NtOzA7T047Ozs7O047Ozs7OworMjlERTtJTkZJTklUWSBORUdBVEVEIFdJVEggVkVSVElDQUwgQkFSO1NtOzA7T047Ozs7O047Ozs7OworMjlERjtET1VCTEUtRU5ERUQgTVVMVElNQVA7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUUwO1NRVUFSRSBXSVRIIENPTlRPVVJFRCBPVVRMSU5FO1NtOzA7T047Ozs7O047Ozs7OworMjlFMTtJTkNSRUFTRVMgQVM7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUUyO1NIVUZGTEUgUFJPRFVDVDtTbTswO09OOzs7OztOOzs7OzsKKzI5RTM7RVFVQUxTIFNJR04gQU5EIFNMQU5URUQgUEFSQUxMRUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUU0O0VRVUFMUyBTSUdOIEFORCBTTEFOVEVEIFBBUkFMTEVMIFdJVEggVElMREUgQUJPVkU7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUU1O0lERU5USUNBTCBUTyBBTkQgU0xBTlRFRCBQQVJBTExFTDtTbTswO09OOzs7OztZOzs7OzsKKzI5RTY7R0xFSUNIIFNUQVJLO1NtOzA7T047Ozs7O047Ozs7OworMjlFNztUSEVSTU9EWU5BTUlDO1NtOzA7T047Ozs7O047Ozs7OworMjlFODtET1dOLVBPSU5USU5HIFRSSUFOR0xFIFdJVEggTEVGVCBIQUxGIEJMQUNLO1NtOzA7T047Ozs7O1k7Ozs7OworMjlFOTtET1dOLVBPSU5USU5HIFRSSUFOR0xFIFdJVEggUklHSFQgSEFMRiBCTEFDSztTbTswO09OOzs7OztZOzs7OzsKKzI5RUE7QkxBQ0sgRElBTU9ORCBXSVRIIERPV04gQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUVCO0JMQUNLIExPWkVOR0U7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUVDO1dISVRFIENJUkNMRSBXSVRIIERPV04gQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUVEO0JMQUNLIENJUkNMRSBXSVRIIERPV04gQVJST1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUVFO0VSUk9SLUJBUlJFRCBXSElURSBTUVVBUkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUVGO0VSUk9SLUJBUlJFRCBCTEFDSyBTUVVBUkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUYwO0VSUk9SLUJBUlJFRCBXSElURSBESUFNT05EO1NtOzA7T047Ozs7O047Ozs7OworMjlGMTtFUlJPUi1CQVJSRUQgQkxBQ0sgRElBTU9ORDtTbTswO09OOzs7OztOOzs7OzsKKzI5RjI7RVJST1ItQkFSUkVEIFdISVRFIENJUkNMRTtTbTswO09OOzs7OztOOzs7OzsKKzI5RjM7RVJST1ItQkFSUkVEIEJMQUNLIENJUkNMRTtTbTswO09OOzs7OztOOzs7OzsKKzI5RjQ7UlVMRS1ERUxBWUVEO1NtOzA7T047Ozs7O1k7Ozs7OworMjlGNTtSRVZFUlNFIFNPTElEVVMgT1BFUkFUT1I7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUY2O1NPTElEVVMgV0lUSCBPVkVSQkFSO1NtOzA7T047Ozs7O1k7Ozs7OworMjlGNztSRVZFUlNFIFNPTElEVVMgV0lUSCBIT1JJWk9OVEFMIFNUUk9LRTtTbTswO09OOzs7OztZOzs7OzsKKzI5Rjg7QklHIFNPTElEVVM7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUY5O0JJRyBSRVZFUlNFIFNPTElEVVM7U207MDtPTjs7Ozs7WTs7Ozs7CisyOUZBO0RPVUJMRSBQTFVTO1NtOzA7T047Ozs7O047Ozs7OworMjlGQjtUUklQTEUgUExVUztTbTswO09OOzs7OztOOzs7OzsKKzI5RkM7TEVGVC1QT0lOVElORyBDVVJWRUQgQU5HTEUgQlJBQ0tFVDtQczswO09OOzs7OztZOzs7OzsKKzI5RkQ7UklHSFQtUE9JTlRJTkcgQ1VSVkVEIEFOR0xFIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTs7Ozs7CisyOUZFO1RJTlk7U207MDtPTjs7Ozs7Tjs7Ozs7CisyOUZGO01JTlk7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTAwO04tQVJZIENJUkNMRUQgRE9UIE9QRVJBVE9SO1NtOzA7T047Ozs7O047Ozs7OworMkEwMTtOLUFSWSBDSVJDTEVEIFBMVVMgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTAyO04tQVJZIENJUkNMRUQgVElNRVMgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTAzO04tQVJZIFVOSU9OIE9QRVJBVE9SIFdJVEggRE9UO1NtOzA7T047Ozs7O047Ozs7OworMkEwNDtOLUFSWSBVTklPTiBPUEVSQVRPUiBXSVRIIFBMVVM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTA1O04tQVJZIFNRVUFSRSBJTlRFUlNFQ1RJT04gT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTA2O04tQVJZIFNRVUFSRSBVTklPTiBPUEVSQVRPUjtTbTswO09OOzs7OztOOzs7OzsKKzJBMDc7VFdPIExPR0lDQUwgQU5EIE9QRVJBVE9SO1NtOzA7T047Ozs7O047Ozs7OworMkEwODtUV08gTE9HSUNBTCBPUiBPUEVSQVRPUjtTbTswO09OOzs7OztOOzs7OzsKKzJBMDk7Ti1BUlkgVElNRVMgT1BFUkFUT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTBBO01PRFVMTyBUV08gU1VNO1NtOzA7T047Ozs7O1k7Ozs7OworMkEwQjtTVU1NQVRJT04gV0lUSCBJTlRFR1JBTDtTbTswO09OOzs7OztZOzs7OzsKKzJBMEM7UVVBRFJVUExFIElOVEVHUkFMIE9QRVJBVE9SO1NtOzA7T047PGNvbXBhdD4gMjIyQiAyMjJCIDIyMkIgMjIyQjs7OztZOzs7OzsKKzJBMEQ7RklOSVRFIFBBUlQgSU5URUdSQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTBFO0lOVEVHUkFMIFdJVEggRE9VQkxFIFNUUk9LRTtTbTswO09OOzs7OztZOzs7OzsKKzJBMEY7SU5URUdSQUwgQVZFUkFHRSBXSVRIIFNMQVNIO1NtOzA7T047Ozs7O1k7Ozs7OworMkExMDtDSVJDVUxBVElPTiBGVU5DVElPTjtTbTswO09OOzs7OztZOzs7OzsKKzJBMTE7QU5USUNMT0NLV0lTRSBJTlRFR1JBVElPTjtTbTswO09OOzs7OztZOzs7OzsKKzJBMTI7TElORSBJTlRFR1JBVElPTiBXSVRIIFJFQ1RBTkdVTEFSIFBBVEggQVJPVU5EIFBPTEU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTEzO0xJTkUgSU5URUdSQVRJT04gV0lUSCBTRU1JQ0lSQ1VMQVIgUEFUSCBBUk9VTkQgUE9MRTtTbTswO09OOzs7OztZOzs7OzsKKzJBMTQ7TElORSBJTlRFR1JBVElPTiBOT1QgSU5DTFVESU5HIFRIRSBQT0xFO1NtOzA7T047Ozs7O1k7Ozs7OworMkExNTtJTlRFR1JBTCBBUk9VTkQgQSBQT0lOVCBPUEVSQVRPUjtTbTswO09OOzs7OztZOzs7OzsKKzJBMTY7UVVBVEVSTklPTiBJTlRFR1JBTCBPUEVSQVRPUjtTbTswO09OOzs7OztZOzs7OzsKKzJBMTc7SU5URUdSQUwgV0lUSCBMRUZUV0FSRFMgQVJST1cgV0lUSCBIT09LO1NtOzA7T047Ozs7O1k7Ozs7OworMkExODtJTlRFR1JBTCBXSVRIIFRJTUVTIFNJR047U207MDtPTjs7Ozs7WTs7Ozs7CisyQTE5O0lOVEVHUkFMIFdJVEggSU5URVJTRUNUSU9OO1NtOzA7T047Ozs7O1k7Ozs7OworMkExQTtJTlRFR1JBTCBXSVRIIFVOSU9OO1NtOzA7T047Ozs7O1k7Ozs7OworMkExQjtJTlRFR1JBTCBXSVRIIE9WRVJCQVI7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTFDO0lOVEVHUkFMIFdJVEggVU5ERVJCQVI7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTFEO0pPSU47U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTFFO0xBUkdFIExFRlQgVFJJQU5HTEUgT1BFUkFUT1I7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTFGO1ogTk9UQVRJT04gU0NIRU1BIENPTVBPU0lUSU9OO1NtOzA7T047Ozs7O1k7Ozs7OworMkEyMDtaIE5PVEFUSU9OIFNDSEVNQSBQSVBJTkc7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTIxO1ogTk9UQVRJT04gU0NIRU1BIFBST0pFQ1RJT047U207MDtPTjs7Ozs7WTs7Ozs7CisyQTIyO1BMVVMgU0lHTiBXSVRIIFNNQUxMIENJUkNMRSBBQk9WRTtTbTswO09OOzs7OztOOzs7OzsKKzJBMjM7UExVUyBTSUdOIFdJVEggQ0lSQ1VNRkxFWCBBQ0NFTlQgQUJPVkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTI0O1BMVVMgU0lHTiBXSVRIIFRJTERFIEFCT1ZFO1NtOzA7T047Ozs7O1k7Ozs7OworMkEyNTtQTFVTIFNJR04gV0lUSCBET1QgQkVMT1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTI2O1BMVVMgU0lHTiBXSVRIIFRJTERFIEJFTE9XO1NtOzA7T047Ozs7O1k7Ozs7OworMkEyNztQTFVTIFNJR04gV0lUSCBTVUJTQ1JJUFQgVFdPO1NtOzA7T047Ozs7O047Ozs7OworMkEyODtQTFVTIFNJR04gV0lUSCBCTEFDSyBUUklBTkdMRTtTbTswO09OOzs7OztOOzs7OzsKKzJBMjk7TUlOVVMgU0lHTiBXSVRIIENPTU1BIEFCT1ZFO1NtOzA7T047Ozs7O1k7Ozs7OworMkEyQTtNSU5VUyBTSUdOIFdJVEggRE9UIEJFTE9XO1NtOzA7T047Ozs7O047Ozs7OworMkEyQjtNSU5VUyBTSUdOIFdJVEggRkFMTElORyBET1RTO1NtOzA7T047Ozs7O1k7Ozs7OworMkEyQztNSU5VUyBTSUdOIFdJVEggUklTSU5HIERPVFM7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTJEO1BMVVMgU0lHTiBJTiBMRUZUIEhBTEYgQ0lSQ0xFO1NtOzA7T047Ozs7O1k7Ozs7OworMkEyRTtQTFVTIFNJR04gSU4gUklHSFQgSEFMRiBDSVJDTEU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTJGO1ZFQ1RPUiBPUiBDUk9TUyBQUk9EVUNUO1NtOzA7T047Ozs7O047Ozs7OworMkEzMDtNVUxUSVBMSUNBVElPTiBTSUdOIFdJVEggRE9UIEFCT1ZFO1NtOzA7T047Ozs7O047Ozs7OworMkEzMTtNVUxUSVBMSUNBVElPTiBTSUdOIFdJVEggVU5ERVJCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTMyO1NFTUlESVJFQ1QgUFJPRFVDVCBXSVRIIEJPVFRPTSBDTE9TRUQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTMzO1NNQVNIIFBST0RVQ1Q7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTM0O01VTFRJUExJQ0FUSU9OIFNJR04gSU4gTEVGVCBIQUxGIENJUkNMRTtTbTswO09OOzs7OztZOzs7OzsKKzJBMzU7TVVMVElQTElDQVRJT04gU0lHTiBJTiBSSUdIVCBIQUxGIENJUkNMRTtTbTswO09OOzs7OztZOzs7OzsKKzJBMzY7Q0lSQ0xFRCBNVUxUSVBMSUNBVElPTiBTSUdOIFdJVEggQ0lSQ1VNRkxFWCBBQ0NFTlQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTM3O01VTFRJUExJQ0FUSU9OIFNJR04gSU4gRE9VQkxFIENJUkNMRTtTbTswO09OOzs7OztOOzs7OzsKKzJBMzg7Q0lSQ0xFRCBESVZJU0lPTiBTSUdOO1NtOzA7T047Ozs7O047Ozs7OworMkEzOTtQTFVTIFNJR04gSU4gVFJJQU5HTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTNBO01JTlVTIFNJR04gSU4gVFJJQU5HTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTNCO01VTFRJUExJQ0FUSU9OIFNJR04gSU4gVFJJQU5HTEU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTNDO0lOVEVSSU9SIFBST0RVQ1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTNEO1JJR0hUSEFORCBJTlRFUklPUiBQUk9EVUNUO1NtOzA7T047Ozs7O1k7Ozs7OworMkEzRTtaIE5PVEFUSU9OIFJFTEFUSU9OQUwgQ09NUE9TSVRJT047U207MDtPTjs7Ozs7WTs7Ozs7CisyQTNGO0FNQUxHQU1BVElPTiBPUiBDT1BST0RVQ1Q7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTQwO0lOVEVSU0VDVElPTiBXSVRIIERPVDtTbTswO09OOzs7OztOOzs7OzsKKzJBNDE7VU5JT04gV0lUSCBNSU5VUyBTSUdOO1NtOzA7T047Ozs7O047Ozs7OworMkE0MjtVTklPTiBXSVRIIE9WRVJCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTQzO0lOVEVSU0VDVElPTiBXSVRIIE9WRVJCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTQ0O0lOVEVSU0VDVElPTiBXSVRIIExPR0lDQUwgQU5EO1NtOzA7T047Ozs7O047Ozs7OworMkE0NTtVTklPTiBXSVRIIExPR0lDQUwgT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTQ2O1VOSU9OIEFCT1ZFIElOVEVSU0VDVElPTjtTbTswO09OOzs7OztOOzs7OzsKKzJBNDc7SU5URVJTRUNUSU9OIEFCT1ZFIFVOSU9OO1NtOzA7T047Ozs7O047Ozs7OworMkE0ODtVTklPTiBBQk9WRSBCQVIgQUJPVkUgSU5URVJTRUNUSU9OO1NtOzA7T047Ozs7O047Ozs7OworMkE0OTtJTlRFUlNFQ1RJT04gQUJPVkUgQkFSIEFCT1ZFIFVOSU9OO1NtOzA7T047Ozs7O047Ozs7OworMkE0QTtVTklPTiBCRVNJREUgQU5EIEpPSU5FRCBXSVRIIFVOSU9OO1NtOzA7T047Ozs7O047Ozs7OworMkE0QjtJTlRFUlNFQ1RJT04gQkVTSURFIEFORCBKT0lORUQgV0lUSCBJTlRFUlNFQ1RJT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTRDO0NMT1NFRCBVTklPTiBXSVRIIFNFUklGUztTbTswO09OOzs7OztOOzs7OzsKKzJBNEQ7Q0xPU0VEIElOVEVSU0VDVElPTiBXSVRIIFNFUklGUztTbTswO09OOzs7OztOOzs7OzsKKzJBNEU7RE9VQkxFIFNRVUFSRSBJTlRFUlNFQ1RJT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTRGO0RPVUJMRSBTUVVBUkUgVU5JT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTUwO0NMT1NFRCBVTklPTiBXSVRIIFNFUklGUyBBTkQgU01BU0ggUFJPRFVDVDtTbTswO09OOzs7OztOOzs7OzsKKzJBNTE7TE9HSUNBTCBBTkQgV0lUSCBET1QgQUJPVkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTUyO0xPR0lDQUwgT1IgV0lUSCBET1QgQUJPVkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTUzO0RPVUJMRSBMT0dJQ0FMIEFORDtTbTswO09OOzs7OztOOzs7OzsKKzJBNTQ7RE9VQkxFIExPR0lDQUwgT1I7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTU1O1RXTyBJTlRFUlNFQ1RJTkcgTE9HSUNBTCBBTkQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTU2O1RXTyBJTlRFUlNFQ1RJTkcgTE9HSUNBTCBPUjtTbTswO09OOzs7OztOOzs7OzsKKzJBNTc7U0xPUElORyBMQVJHRSBPUjtTbTswO09OOzs7OztZOzs7OzsKKzJBNTg7U0xPUElORyBMQVJHRSBBTkQ7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTU5O0xPR0lDQUwgT1IgT1ZFUkxBUFBJTkcgTE9HSUNBTCBBTkQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTVBO0xPR0lDQUwgQU5EIFdJVEggTUlERExFIFNURU07U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTVCO0xPR0lDQUwgT1IgV0lUSCBNSURETEUgU1RFTTtTbTswO09OOzs7OztOOzs7OzsKKzJBNUM7TE9HSUNBTCBBTkQgV0lUSCBIT1JJWk9OVEFMIERBU0g7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTVEO0xPR0lDQUwgT1IgV0lUSCBIT1JJWk9OVEFMIERBU0g7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTVFO0xPR0lDQUwgQU5EIFdJVEggRE9VQkxFIE9WRVJCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTVGO0xPR0lDQUwgQU5EIFdJVEggVU5ERVJCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTYwO0xPR0lDQUwgQU5EIFdJVEggRE9VQkxFIFVOREVSQkFSO1NtOzA7T047Ozs7O047Ozs7OworMkE2MTtTTUFMTCBWRUUgV0lUSCBVTkRFUkJBUjtTbTswO09OOzs7OztOOzs7OzsKKzJBNjI7TE9HSUNBTCBPUiBXSVRIIERPVUJMRSBPVkVSQkFSO1NtOzA7T047Ozs7O047Ozs7OworMkE2MztMT0dJQ0FMIE9SIFdJVEggRE9VQkxFIFVOREVSQkFSO1NtOzA7T047Ozs7O047Ozs7OworMkE2NDtaIE5PVEFUSU9OIERPTUFJTiBBTlRJUkVTVFJJQ1RJT047U207MDtPTjs7Ozs7WTs7Ozs7CisyQTY1O1ogTk9UQVRJT04gUkFOR0UgQU5USVJFU1RSSUNUSU9OO1NtOzA7T047Ozs7O1k7Ozs7OworMkE2NjtFUVVBTFMgU0lHTiBXSVRIIERPVCBCRUxPVztTbTswO09OOzs7OztOOzs7OzsKKzJBNjc7SURFTlRJQ0FMIFdJVEggRE9UIEFCT1ZFO1NtOzA7T047Ozs7O047Ozs7OworMkE2ODtUUklQTEUgSE9SSVpPTlRBTCBCQVIgV0lUSCBET1VCTEUgVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMkE2OTtUUklQTEUgSE9SSVpPTlRBTCBCQVIgV0lUSCBUUklQTEUgVkVSVElDQUwgU1RST0tFO1NtOzA7T047Ozs7O047Ozs7OworMkE2QTtUSUxERSBPUEVSQVRPUiBXSVRIIERPVCBBQk9WRTtTbTswO09OOzs7OztZOzs7OzsKKzJBNkI7VElMREUgT1BFUkFUT1IgV0lUSCBSSVNJTkcgRE9UUztTbTswO09OOzs7OztZOzs7OzsKKzJBNkM7U0lNSUxBUiBNSU5VUyBTSU1JTEFSO1NtOzA7T047Ozs7O1k7Ozs7OworMkE2RDtDT05HUlVFTlQgV0lUSCBET1QgQUJPVkU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTZFO0VRVUFMUyBXSVRIIEFTVEVSSVNLO1NtOzA7T047Ozs7O047Ozs7OworMkE2RjtBTE1PU1QgRVFVQUwgVE8gV0lUSCBDSVJDVU1GTEVYIEFDQ0VOVDtTbTswO09OOzs7OztZOzs7OzsKKzJBNzA7QVBQUk9YSU1BVEVMWSBFUVVBTCBPUiBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBNzE7RVFVQUxTIFNJR04gQUJPVkUgUExVUyBTSUdOO1NtOzA7T047Ozs7O047Ozs7OworMkE3MjtQTFVTIFNJR04gQUJPVkUgRVFVQUxTIFNJR047U207MDtPTjs7Ozs7Tjs7Ozs7CisyQTczO0VRVUFMUyBTSUdOIEFCT1ZFIFRJTERFIE9QRVJBVE9SO1NtOzA7T047Ozs7O1k7Ozs7OworMkE3NDtET1VCTEUgQ09MT04gRVFVQUw7U207MDtPTjs8Y29tcGF0PiAwMDNBIDAwM0EgMDAzRDs7OztZOzs7OzsKKzJBNzU7VFdPIENPTlNFQ1VUSVZFIEVRVUFMUyBTSUdOUztTbTswO09OOzxjb21wYXQ+IDAwM0QgMDAzRDs7OztOOzs7OzsKKzJBNzY7VEhSRUUgQ09OU0VDVVRJVkUgRVFVQUxTIFNJR05TO1NtOzA7T047PGNvbXBhdD4gMDAzRCAwMDNEIDAwM0Q7Ozs7Tjs7Ozs7CisyQTc3O0VRVUFMUyBTSUdOIFdJVEggVFdPIERPVFMgQUJPVkUgQU5EIFRXTyBET1RTIEJFTE9XO1NtOzA7T047Ozs7O047Ozs7OworMkE3ODtFUVVJVkFMRU5UIFdJVEggRk9VUiBET1RTIEFCT1ZFO1NtOzA7T047Ozs7O047Ozs7OworMkE3OTtMRVNTLVRIQU4gV0lUSCBDSVJDTEUgSU5TSURFO1NtOzA7T047Ozs7O1k7Ozs7OworMkE3QTtHUkVBVEVSLVRIQU4gV0lUSCBDSVJDTEUgSU5TSURFO1NtOzA7T047Ozs7O1k7Ozs7OworMkE3QjtMRVNTLVRIQU4gV0lUSCBRVUVTVElPTiBNQVJLIEFCT1ZFO1NtOzA7T047Ozs7O1k7Ozs7OworMkE3QztHUkVBVEVSLVRIQU4gV0lUSCBRVUVTVElPTiBNQVJLIEFCT1ZFO1NtOzA7T047Ozs7O1k7Ozs7OworMkE3RDtMRVNTLVRIQU4gT1IgU0xBTlRFRCBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBN0U7R1JFQVRFUi1USEFOIE9SIFNMQU5URUQgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyQTdGO0xFU1MtVEhBTiBPUiBTTEFOVEVEIEVRVUFMIFRPIFdJVEggRE9UIElOU0lERTtTbTswO09OOzs7OztZOzs7OzsKKzJBODA7R1JFQVRFUi1USEFOIE9SIFNMQU5URUQgRVFVQUwgVE8gV0lUSCBET1QgSU5TSURFO1NtOzA7T047Ozs7O1k7Ozs7OworMkE4MTtMRVNTLVRIQU4gT1IgU0xBTlRFRCBFUVVBTCBUTyBXSVRIIERPVCBBQk9WRTtTbTswO09OOzs7OztZOzs7OzsKKzJBODI7R1JFQVRFUi1USEFOIE9SIFNMQU5URUQgRVFVQUwgVE8gV0lUSCBET1QgQUJPVkU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTgzO0xFU1MtVEhBTiBPUiBTTEFOVEVEIEVRVUFMIFRPIFdJVEggRE9UIEFCT1ZFIFJJR0hUO1NtOzA7T047Ozs7O1k7Ozs7OworMkE4NDtHUkVBVEVSLVRIQU4gT1IgU0xBTlRFRCBFUVVBTCBUTyBXSVRIIERPVCBBQk9WRSBMRUZUO1NtOzA7T047Ozs7O1k7Ozs7OworMkE4NTtMRVNTLVRIQU4gT1IgQVBQUk9YSU1BVEU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTg2O0dSRUFURVItVEhBTiBPUiBBUFBST1hJTUFURTtTbTswO09OOzs7OztZOzs7OzsKKzJBODc7TEVTUy1USEFOIEFORCBTSU5HTEUtTElORSBOT1QgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyQTg4O0dSRUFURVItVEhBTiBBTkQgU0lOR0xFLUxJTkUgTk9UIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMkE4OTtMRVNTLVRIQU4gQU5EIE5PVCBBUFBST1hJTUFURTtTbTswO09OOzs7OztZOzs7OzsKKzJBOEE7R1JFQVRFUi1USEFOIEFORCBOT1QgQVBQUk9YSU1BVEU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQThCO0xFU1MtVEhBTiBBQk9WRSBET1VCTEUtTElORSBFUVVBTCBBQk9WRSBHUkVBVEVSLVRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyQThDO0dSRUFURVItVEhBTiBBQk9WRSBET1VCTEUtTElORSBFUVVBTCBBQk9WRSBMRVNTLVRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyQThEO0xFU1MtVEhBTiBBQk9WRSBTSU1JTEFSIE9SIEVRVUFMO1NtOzA7T047Ozs7O1k7Ozs7OworMkE4RTtHUkVBVEVSLVRIQU4gQUJPVkUgU0lNSUxBUiBPUiBFUVVBTDtTbTswO09OOzs7OztZOzs7OzsKKzJBOEY7TEVTUy1USEFOIEFCT1ZFIFNJTUlMQVIgQUJPVkUgR1JFQVRFUi1USEFOO1NtOzA7T047Ozs7O1k7Ozs7OworMkE5MDtHUkVBVEVSLVRIQU4gQUJPVkUgU0lNSUxBUiBBQk9WRSBMRVNTLVRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyQTkxO0xFU1MtVEhBTiBBQk9WRSBHUkVBVEVSLVRIQU4gQUJPVkUgRE9VQkxFLUxJTkUgRVFVQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTkyO0dSRUFURVItVEhBTiBBQk9WRSBMRVNTLVRIQU4gQUJPVkUgRE9VQkxFLUxJTkUgRVFVQUw7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTkzO0xFU1MtVEhBTiBBQk9WRSBTTEFOVEVEIEVRVUFMIEFCT1ZFIEdSRUFURVItVEhBTiBBQk9WRSBTTEFOVEVEIEVRVUFMO1NtOzA7T047Ozs7O1k7Ozs7OworMkE5NDtHUkVBVEVSLVRIQU4gQUJPVkUgU0xBTlRFRCBFUVVBTCBBQk9WRSBMRVNTLVRIQU4gQUJPVkUgU0xBTlRFRCBFUVVBTDtTbTswO09OOzs7OztZOzs7OzsKKzJBOTU7U0xBTlRFRCBFUVVBTCBUTyBPUiBMRVNTLVRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyQTk2O1NMQU5URUQgRVFVQUwgVE8gT1IgR1JFQVRFUi1USEFOO1NtOzA7T047Ozs7O1k7Ozs7OworMkE5NztTTEFOVEVEIEVRVUFMIFRPIE9SIExFU1MtVEhBTiBXSVRIIERPVCBJTlNJREU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQTk4O1NMQU5URUQgRVFVQUwgVE8gT1IgR1JFQVRFUi1USEFOIFdJVEggRE9UIElOU0lERTtTbTswO09OOzs7OztZOzs7OzsKKzJBOTk7RE9VQkxFLUxJTkUgRVFVQUwgVE8gT1IgTEVTUy1USEFOO1NtOzA7T047Ozs7O1k7Ozs7OworMkE5QTtET1VCTEUtTElORSBFUVVBTCBUTyBPUiBHUkVBVEVSLVRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyQTlCO0RPVUJMRS1MSU5FIFNMQU5URUQgRVFVQUwgVE8gT1IgTEVTUy1USEFOO1NtOzA7T047Ozs7O1k7Ozs7OworMkE5QztET1VCTEUtTElORSBTTEFOVEVEIEVRVUFMIFRPIE9SIEdSRUFURVItVEhBTjtTbTswO09OOzs7OztZOzs7OzsKKzJBOUQ7U0lNSUxBUiBPUiBMRVNTLVRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyQTlFO1NJTUlMQVIgT1IgR1JFQVRFUi1USEFOO1NtOzA7T047Ozs7O1k7Ozs7OworMkE5RjtTSU1JTEFSIEFCT1ZFIExFU1MtVEhBTiBBQk9WRSBFUVVBTFMgU0lHTjtTbTswO09OOzs7OztZOzs7OzsKKzJBQTA7U0lNSUxBUiBBQk9WRSBHUkVBVEVSLVRIQU4gQUJPVkUgRVFVQUxTIFNJR047U207MDtPTjs7Ozs7WTs7Ozs7CisyQUExO0RPVUJMRSBORVNURUQgTEVTUy1USEFOO1NtOzA7T047Ozs7O1k7Ozs7OworMkFBMjtET1VCTEUgTkVTVEVEIEdSRUFURVItVEhBTjtTbTswO09OOzs7OztZOzs7OzsKKzJBQTM7RE9VQkxFIE5FU1RFRCBMRVNTLVRIQU4gV0lUSCBVTkRFUkJBUjtTbTswO09OOzs7OztZOzs7OzsKKzJBQTQ7R1JFQVRFUi1USEFOIE9WRVJMQVBQSU5HIExFU1MtVEhBTjtTbTswO09OOzs7OztOOzs7OzsKKzJBQTU7R1JFQVRFUi1USEFOIEJFU0lERSBMRVNTLVRIQU47U207MDtPTjs7Ozs7Tjs7Ozs7CisyQUE2O0xFU1MtVEhBTiBDTE9TRUQgQlkgQ1VSVkU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUE3O0dSRUFURVItVEhBTiBDTE9TRUQgQlkgQ1VSVkU7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUE4O0xFU1MtVEhBTiBDTE9TRUQgQlkgQ1VSVkUgQUJPVkUgU0xBTlRFRCBFUVVBTDtTbTswO09OOzs7OztZOzs7OzsKKzJBQTk7R1JFQVRFUi1USEFOIENMT1NFRCBCWSBDVVJWRSBBQk9WRSBTTEFOVEVEIEVRVUFMO1NtOzA7T047Ozs7O1k7Ozs7OworMkFBQTtTTUFMTEVSIFRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyQUFCO0xBUkdFUiBUSEFOO1NtOzA7T047Ozs7O1k7Ozs7OworMkFBQztTTUFMTEVSIFRIQU4gT1IgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyQUFEO0xBUkdFUiBUSEFOIE9SIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMkFBRTtFUVVBTFMgU0lHTiBXSVRIIEJVTVBZIEFCT1ZFO1NtOzA7T047Ozs7O047Ozs7OworMkFBRjtQUkVDRURFUyBBQk9WRSBTSU5HTEUtTElORSBFUVVBTFMgU0lHTjtTbTswO09OOzs7OztZOzs7OzsKKzJBQjA7U1VDQ0VFRFMgQUJPVkUgU0lOR0xFLUxJTkUgRVFVQUxTIFNJR047U207MDtPTjs7Ozs7WTs7Ozs7CisyQUIxO1BSRUNFREVTIEFCT1ZFIFNJTkdMRS1MSU5FIE5PVCBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBQjI7U1VDQ0VFRFMgQUJPVkUgU0lOR0xFLUxJTkUgTk9UIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMkFCMztQUkVDRURFUyBBQk9WRSBFUVVBTFMgU0lHTjtTbTswO09OOzs7OztZOzs7OzsKKzJBQjQ7U1VDQ0VFRFMgQUJPVkUgRVFVQUxTIFNJR047U207MDtPTjs7Ozs7WTs7Ozs7CisyQUI1O1BSRUNFREVTIEFCT1ZFIE5PVCBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBQjY7U1VDQ0VFRFMgQUJPVkUgTk9UIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMkFCNztQUkVDRURFUyBBQk9WRSBBTE1PU1QgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyQUI4O1NVQ0NFRURTIEFCT1ZFIEFMTU9TVCBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBQjk7UFJFQ0VERVMgQUJPVkUgTk9UIEFMTU9TVCBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBQkE7U1VDQ0VFRFMgQUJPVkUgTk9UIEFMTU9TVCBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBQkI7RE9VQkxFIFBSRUNFREVTO1NtOzA7T047Ozs7O1k7Ozs7OworMkFCQztET1VCTEUgU1VDQ0VFRFM7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUJEO1NVQlNFVCBXSVRIIERPVDtTbTswO09OOzs7OztZOzs7OzsKKzJBQkU7U1VQRVJTRVQgV0lUSCBET1Q7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUJGO1NVQlNFVCBXSVRIIFBMVVMgU0lHTiBCRUxPVztTbTswO09OOzs7OztZOzs7OzsKKzJBQzA7U1VQRVJTRVQgV0lUSCBQTFVTIFNJR04gQkVMT1c7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUMxO1NVQlNFVCBXSVRIIE1VTFRJUExJQ0FUSU9OIFNJR04gQkVMT1c7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUMyO1NVUEVSU0VUIFdJVEggTVVMVElQTElDQVRJT04gU0lHTiBCRUxPVztTbTswO09OOzs7OztZOzs7OzsKKzJBQzM7U1VCU0VUIE9GIE9SIEVRVUFMIFRPIFdJVEggRE9UIEFCT1ZFO1NtOzA7T047Ozs7O1k7Ozs7OworMkFDNDtTVVBFUlNFVCBPRiBPUiBFUVVBTCBUTyBXSVRIIERPVCBBQk9WRTtTbTswO09OOzs7OztZOzs7OzsKKzJBQzU7U1VCU0VUIE9GIEFCT1ZFIEVRVUFMUyBTSUdOO1NtOzA7T047Ozs7O1k7Ozs7OworMkFDNjtTVVBFUlNFVCBPRiBBQk9WRSBFUVVBTFMgU0lHTjtTbTswO09OOzs7OztZOzs7OzsKKzJBQzc7U1VCU0VUIE9GIEFCT1ZFIFRJTERFIE9QRVJBVE9SO1NtOzA7T047Ozs7O1k7Ozs7OworMkFDODtTVVBFUlNFVCBPRiBBQk9WRSBUSUxERSBPUEVSQVRPUjtTbTswO09OOzs7OztZOzs7OzsKKzJBQzk7U1VCU0VUIE9GIEFCT1ZFIEFMTU9TVCBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBQ0E7U1VQRVJTRVQgT0YgQUJPVkUgQUxNT1NUIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMkFDQjtTVUJTRVQgT0YgQUJPVkUgTk9UIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMkFDQztTVVBFUlNFVCBPRiBBQk9WRSBOT1QgRVFVQUwgVE87U207MDtPTjs7Ozs7WTs7Ozs7CisyQUNEO1NRVUFSRSBMRUZUIE9QRU4gQk9YIE9QRVJBVE9SO1NtOzA7T047Ozs7O1k7Ozs7OworMkFDRTtTUVVBUkUgUklHSFQgT1BFTiBCT1ggT1BFUkFUT1I7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUNGO0NMT1NFRCBTVUJTRVQ7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUQwO0NMT1NFRCBTVVBFUlNFVDtTbTswO09OOzs7OztZOzs7OzsKKzJBRDE7Q0xPU0VEIFNVQlNFVCBPUiBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBRDI7Q0xPU0VEIFNVUEVSU0VUIE9SIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMkFEMztTVUJTRVQgQUJPVkUgU1VQRVJTRVQ7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUQ0O1NVUEVSU0VUIEFCT1ZFIFNVQlNFVDtTbTswO09OOzs7OztZOzs7OzsKKzJBRDU7U1VCU0VUIEFCT1ZFIFNVQlNFVDtTbTswO09OOzs7OztZOzs7OzsKKzJBRDY7U1VQRVJTRVQgQUJPVkUgU1VQRVJTRVQ7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUQ3O1NVUEVSU0VUIEJFU0lERSBTVUJTRVQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQUQ4O1NVUEVSU0VUIEJFU0lERSBBTkQgSk9JTkVEIEJZIERBU0ggV0lUSCBTVUJTRVQ7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQUQ5O0VMRU1FTlQgT0YgT1BFTklORyBET1dOV0FSRFM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQURBO1BJVENIRk9SSyBXSVRIIFRFRSBUT1A7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQURCO1RSQU5TVkVSU0FMIElOVEVSU0VDVElPTjtTbTswO09OOzs7OztOOzs7OzsKKzJBREM7Rk9SS0lORztTbTswO09OOzJBREQgMDMzODs7OztZOztub3QgaW5kZXBlbmRlbnQ7OzsKKzJBREQ7Tk9ORk9SS0lORztTbTswO09OOzs7OztOOztpbmRlcGVuZGVudDs7OworMkFERTtTSE9SVCBMRUZUIFRBQ0s7U207MDtPTjs7Ozs7WTs7Ozs7CisyQURGO1NIT1JUIERPV04gVEFDSztTbTswO09OOzs7OztOOzs7OzsKKzJBRTA7U0hPUlQgVVAgVEFDSztTbTswO09OOzs7OztOOzs7OzsKKzJBRTE7UEVSUEVORElDVUxBUiBXSVRIIFM7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQUUyO1ZFUlRJQ0FMIEJBUiBUUklQTEUgUklHSFQgVFVSTlNUSUxFO1NtOzA7T047Ozs7O1k7Ozs7OworMkFFMztET1VCTEUgVkVSVElDQUwgQkFSIExFRlQgVFVSTlNUSUxFO1NtOzA7T047Ozs7O1k7Ozs7OworMkFFNDtWRVJUSUNBTCBCQVIgRE9VQkxFIExFRlQgVFVSTlNUSUxFO1NtOzA7T047Ozs7O1k7Ozs7OworMkFFNTtET1VCTEUgVkVSVElDQUwgQkFSIERPVUJMRSBMRUZUIFRVUk5TVElMRTtTbTswO09OOzs7OztZOzs7OzsKKzJBRTY7TE9ORyBEQVNIIEZST00gTEVGVCBNRU1CRVIgT0YgRE9VQkxFIFZFUlRJQ0FMO1NtOzA7T047Ozs7O1k7Ozs7OworMkFFNztTSE9SVCBET1dOIFRBQ0sgV0lUSCBPVkVSQkFSO1NtOzA7T047Ozs7O047Ozs7OworMkFFODtTSE9SVCBVUCBUQUNLIFdJVEggVU5ERVJCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQUU5O1NIT1JUIFVQIFRBQ0sgQUJPVkUgU0hPUlQgRE9XTiBUQUNLO1NtOzA7T047Ozs7O047Ozs7OworMkFFQTtET1VCTEUgRE9XTiBUQUNLO1NtOzA7T047Ozs7O047Ozs7OworMkFFQjtET1VCTEUgVVAgVEFDSztTbTswO09OOzs7OztOOzs7OzsKKzJBRUM7RE9VQkxFIFNUUk9LRSBOT1QgU0lHTjtTbTswO09OOzs7OztZOzs7OzsKKzJBRUQ7UkVWRVJTRUQgRE9VQkxFIFNUUk9LRSBOT1QgU0lHTjtTbTswO09OOzs7OztZOzs7OzsKKzJBRUU7RE9FUyBOT1QgRElWSURFIFdJVEggUkVWRVJTRUQgTkVHQVRJT04gU0xBU0g7U207MDtPTjs7Ozs7WTs7Ozs7CisyQUVGO1ZFUlRJQ0FMIExJTkUgV0lUSCBDSVJDTEUgQUJPVkU7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQUYwO1ZFUlRJQ0FMIExJTkUgV0lUSCBDSVJDTEUgQkVMT1c7U207MDtPTjs7Ozs7Tjs7Ozs7CisyQUYxO0RPV04gVEFDSyBXSVRIIENJUkNMRSBCRUxPVztTbTswO09OOzs7OztOOzs7OzsKKzJBRjI7UEFSQUxMRUwgV0lUSCBIT1JJWk9OVEFMIFNUUk9LRTtTbTswO09OOzs7OztOOzs7OzsKKzJBRjM7UEFSQUxMRUwgV0lUSCBUSUxERSBPUEVSQVRPUjtTbTswO09OOzs7OztZOzs7OzsKKzJBRjQ7VFJJUExFIFZFUlRJQ0FMIEJBUiBCSU5BUlkgUkVMQVRJT047U207MDtPTjs7Ozs7Tjs7Ozs7CisyQUY1O1RSSVBMRSBWRVJUSUNBTCBCQVIgV0lUSCBIT1JJWk9OVEFMIFNUUk9LRTtTbTswO09OOzs7OztOOzs7OzsKKzJBRjY7VFJJUExFIENPTE9OIE9QRVJBVE9SO1NtOzA7T047Ozs7O047Ozs7OworMkFGNztUUklQTEUgTkVTVEVEIExFU1MtVEhBTjtTbTswO09OOzs7OztZOzs7OzsKKzJBRjg7VFJJUExFIE5FU1RFRCBHUkVBVEVSLVRIQU47U207MDtPTjs7Ozs7WTs7Ozs7CisyQUY5O0RPVUJMRS1MSU5FIFNMQU5URUQgTEVTUy1USEFOIE9SIEVRVUFMIFRPO1NtOzA7T047Ozs7O1k7Ozs7OworMkFGQTtET1VCTEUtTElORSBTTEFOVEVEIEdSRUFURVItVEhBTiBPUiBFUVVBTCBUTztTbTswO09OOzs7OztZOzs7OzsKKzJBRkI7VFJJUExFIFNPTElEVVMgQklOQVJZIFJFTEFUSU9OO1NtOzA7T047Ozs7O1k7Ozs7OworMkFGQztMQVJHRSBUUklQTEUgVkVSVElDQUwgQkFSIE9QRVJBVE9SO1NtOzA7T047Ozs7O047Ozs7OworMkFGRDtET1VCTEUgU09MSURVUyBPUEVSQVRPUjtTbTswO09OOzs7OztZOzs7OzsKKzJBRkU7V0hJVEUgVkVSVElDQUwgQkFSO1NtOzA7T047Ozs7O047Ozs7OworMkFGRjtOLUFSWSBXSElURSBWRVJUSUNBTCBCQVI7U207MDtPTjs7Ozs7Tjs7Ozs7CisyRTgwO0NKSyBSQURJQ0FMIFJFUEVBVDtTbzswO09OOzs7OztOOzs7OzsKKzJFODE7Q0pLIFJBRElDQUwgQ0xJRkY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTgyO0NKSyBSQURJQ0FMIFNFQ09ORCBPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTgzO0NKSyBSQURJQ0FMIFNFQ09ORCBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTg0O0NKSyBSQURJQ0FMIFNFQ09ORCBUSFJFRTtTbzswO09OOzs7OztOOzs7OzsKKzJFODU7Q0pLIFJBRElDQUwgUEVSU09OO1NvOzA7T047Ozs7O047Ozs7OworMkU4NjtDSksgUkFESUNBTCBCT1g7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTg3O0NKSyBSQURJQ0FMIFRBQkxFO1NvOzA7T047Ozs7O047Ozs7OworMkU4ODtDSksgUkFESUNBTCBLTklGRSBPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTg5O0NKSyBSQURJQ0FMIEtOSUZFIFRXTztTbzswO09OOzs7OztOOzs7OzsKKzJFOEE7Q0pLIFJBRElDQUwgRElWSU5BVElPTjtTbzswO09OOzs7OztOOzs7OzsKKzJFOEI7Q0pLIFJBRElDQUwgU0VBTDtTbzswO09OOzs7OztOOzs7OzsKKzJFOEM7Q0pLIFJBRElDQUwgU01BTEwgT05FO1NvOzA7T047Ozs7O047Ozs7OworMkU4RDtDSksgUkFESUNBTCBTTUFMTCBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRThFO0NKSyBSQURJQ0FMIExBTUUgT05FO1NvOzA7T047Ozs7O047Ozs7OworMkU4RjtDSksgUkFESUNBTCBMQU1FIFRXTztTbzswO09OOzs7OztOOzs7OzsKKzJFOTA7Q0pLIFJBRElDQUwgTEFNRSBUSFJFRTtTbzswO09OOzs7OztOOzs7OzsKKzJFOTE7Q0pLIFJBRElDQUwgTEFNRSBGT1VSO1NvOzA7T047Ozs7O047Ozs7OworMkU5MjtDSksgUkFESUNBTCBTTkFLRTtTbzswO09OOzs7OztOOzs7OzsKKzJFOTM7Q0pLIFJBRElDQUwgVEhSRUFEO1NvOzA7T047Ozs7O047Ozs7OworMkU5NDtDSksgUkFESUNBTCBTTk9VVCBPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTk1O0NKSyBSQURJQ0FMIFNOT1VUIFRXTztTbzswO09OOzs7OztOOzs7OzsKKzJFOTY7Q0pLIFJBRElDQUwgSEVBUlQgT05FO1NvOzA7T047Ozs7O047Ozs7OworMkU5NztDSksgUkFESUNBTCBIRUFSVCBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTk4O0NKSyBSQURJQ0FMIEhBTkQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTk5O0NKSyBSQURJQ0FMIFJBUDtTbzswO09OOzs7OztOOzs7OzsKKzJFOUI7Q0pLIFJBRElDQUwgQ0hPS0U7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTlDO0NKSyBSQURJQ0FMIFNVTjtTbzswO09OOzs7OztOOzs7OzsKKzJFOUQ7Q0pLIFJBRElDQUwgTU9PTjtTbzswO09OOzs7OztOOzs7OzsKKzJFOUU7Q0pLIFJBRElDQUwgREVBVEg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRTlGO0NKSyBSQURJQ0FMIE1PVEhFUjtTbzswO09OOzxjb21wYXQ+IDZCQ0Q7Ozs7Tjs7Ozs7CisyRUEwO0NKSyBSQURJQ0FMIENJVklMSUFOO1NvOzA7T047Ozs7O047Ozs7OworMkVBMTtDSksgUkFESUNBTCBXQVRFUiBPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUEyO0NKSyBSQURJQ0FMIFdBVEVSIFRXTztTbzswO09OOzs7OztOOzs7OzsKKzJFQTM7Q0pLIFJBRElDQUwgRklSRTtTbzswO09OOzs7OztOOzs7OzsKKzJFQTQ7Q0pLIFJBRElDQUwgUEFXIE9ORTtTbzswO09OOzs7OztOOzs7OzsKKzJFQTU7Q0pLIFJBRElDQUwgUEFXIFRXTztTbzswO09OOzs7OztOOzs7OzsKKzJFQTY7Q0pLIFJBRElDQUwgU0lNUExJRklFRCBIQUxGIFRSRUUgVFJVTks7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUE3O0NKSyBSQURJQ0FMIENPVztTbzswO09OOzs7OztOOzs7OzsKKzJFQTg7Q0pLIFJBRElDQUwgRE9HO1NvOzA7T047Ozs7O047Ozs7OworMkVBOTtDSksgUkFESUNBTCBKQURFO1NvOzA7T047Ozs7O047Ozs7OworMkVBQTtDSksgUkFESUNBTCBCT0xUIE9GIENMT1RIO1NvOzA7T047Ozs7O047Ozs7OworMkVBQjtDSksgUkFESUNBTCBFWUU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUFDO0NKSyBSQURJQ0FMIFNQSVJJVCBPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUFEO0NKSyBSQURJQ0FMIFNQSVJJVCBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUFFO0NKSyBSQURJQ0FMIEJBTUJPTztTbzswO09OOzs7OztOOzs7OzsKKzJFQUY7Q0pLIFJBRElDQUwgU0lMSztTbzswO09OOzs7OztOOzs7OzsKKzJFQjA7Q0pLIFJBRElDQUwgQy1TSU1QTElGSUVEIFNJTEs7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUIxO0NKSyBSQURJQ0FMIE5FVCBPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUIyO0NKSyBSQURJQ0FMIE5FVCBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUIzO0NKSyBSQURJQ0FMIE5FVCBUSFJFRTtTbzswO09OOzs7OztOOzs7OzsKKzJFQjQ7Q0pLIFJBRElDQUwgTkVUIEZPVVI7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUI1O0NKSyBSQURJQ0FMIE1FU0g7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUI2O0NKSyBSQURJQ0FMIFNIRUVQO1NvOzA7T047Ozs7O047Ozs7OworMkVCNztDSksgUkFESUNBTCBSQU07U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUI4O0NKSyBSQURJQ0FMIEVXRTtTbzswO09OOzs7OztOOzs7OzsKKzJFQjk7Q0pLIFJBRElDQUwgT0xEO1NvOzA7T047Ozs7O047Ozs7OworMkVCQTtDSksgUkFESUNBTCBCUlVTSCBPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUJCO0NKSyBSQURJQ0FMIEJSVVNIIFRXTztTbzswO09OOzs7OztOOzs7OzsKKzJFQkM7Q0pLIFJBRElDQUwgTUVBVDtTbzswO09OOzs7OztOOzs7OzsKKzJFQkQ7Q0pLIFJBRElDQUwgTU9SVEFSO1NvOzA7T047Ozs7O047Ozs7OworMkVCRTtDSksgUkFESUNBTCBHUkFTUyBPTkU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUJGO0NKSyBSQURJQ0FMIEdSQVNTIFRXTztTbzswO09OOzs7OztOOzs7OzsKKzJFQzA7Q0pLIFJBRElDQUwgR1JBU1MgVEhSRUU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUMxO0NKSyBSQURJQ0FMIFRJR0VSO1NvOzA7T047Ozs7O047Ozs7OworMkVDMjtDSksgUkFESUNBTCBDTE9USEVTO1NvOzA7T047Ozs7O047Ozs7OworMkVDMztDSksgUkFESUNBTCBXRVNUIE9ORTtTbzswO09OOzs7OztOOzs7OzsKKzJFQzQ7Q0pLIFJBRElDQUwgV0VTVCBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUM1O0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBTRUU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUM2O0NKSyBSQURJQ0FMIFNJTVBMSUZJRUQgSE9STjtTbzswO09OOzs7OztOOzs7OzsKKzJFQzc7Q0pLIFJBRElDQUwgSE9STjtTbzswO09OOzs7OztOOzs7OzsKKzJFQzg7Q0pLIFJBRElDQUwgQy1TSU1QTElGSUVEIFNQRUVDSDtTbzswO09OOzs7OztOOzs7OzsKKzJFQzk7Q0pLIFJBRElDQUwgQy1TSU1QTElGSUVEIFNIRUxMO1NvOzA7T047Ozs7O047Ozs7OworMkVDQTtDSksgUkFESUNBTCBGT09UO1NvOzA7T047Ozs7O047Ozs7OworMkVDQjtDSksgUkFESUNBTCBDLVNJTVBMSUZJRUQgQ0FSVDtTbzswO09OOzs7OztOOzs7OzsKKzJFQ0M7Q0pLIFJBRElDQUwgU0lNUExJRklFRCBXQUxLO1NvOzA7T047Ozs7O047Ozs7OworMkVDRDtDSksgUkFESUNBTCBXQUxLIE9ORTtTbzswO09OOzs7OztOOzs7OzsKKzJFQ0U7Q0pLIFJBRElDQUwgV0FMSyBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUNGO0NKSyBSQURJQ0FMIENJVFk7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUQwO0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBHT0xEO1NvOzA7T047Ozs7O047Ozs7OworMkVEMTtDSksgUkFESUNBTCBMT05HIE9ORTtTbzswO09OOzs7OztOOzs7OzsKKzJFRDI7Q0pLIFJBRElDQUwgTE9ORyBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUQzO0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBMT05HO1NvOzA7T047Ozs7O047Ozs7OworMkVENDtDSksgUkFESUNBTCBDLVNJTVBMSUZJRUQgR0FURTtTbzswO09OOzs7OztOOzs7OzsKKzJFRDU7Q0pLIFJBRElDQUwgTU9VTkQgT05FO1NvOzA7T047Ozs7O047Ozs7OworMkVENjtDSksgUkFESUNBTCBNT1VORCBUV087U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUQ3O0NKSyBSQURJQ0FMIFJBSU47U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUQ4O0NKSyBSQURJQ0FMIEJMVUU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUQ5O0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBUQU5ORUQgTEVBVEhFUjtTbzswO09OOzs7OztOOzs7OzsKKzJFREE7Q0pLIFJBRElDQUwgQy1TSU1QTElGSUVEIExFQUY7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRURCO0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBXSU5EO1NvOzA7T047Ozs7O047Ozs7OworMkVEQztDSksgUkFESUNBTCBDLVNJTVBMSUZJRUQgRkxZO1NvOzA7T047Ozs7O047Ozs7OworMkVERDtDSksgUkFESUNBTCBFQVQgT05FO1NvOzA7T047Ozs7O047Ozs7OworMkVERTtDSksgUkFESUNBTCBFQVQgVFdPO1NvOzA7T047Ozs7O047Ozs7OworMkVERjtDSksgUkFESUNBTCBFQVQgVEhSRUU7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUUwO0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBFQVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUUxO0NKSyBSQURJQ0FMIEhFQUQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUUyO0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBIT1JTRTtTbzswO09OOzs7OztOOzs7OzsKKzJFRTM7Q0pLIFJBRElDQUwgQk9ORTtTbzswO09OOzs7OztOOzs7OzsKKzJFRTQ7Q0pLIFJBRElDQUwgR0hPU1Q7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUU1O0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBGSVNIO1NvOzA7T047Ozs7O047Ozs7OworMkVFNjtDSksgUkFESUNBTCBDLVNJTVBMSUZJRUQgQklSRDtTbzswO09OOzs7OztOOzs7OzsKKzJFRTc7Q0pLIFJBRElDQUwgQy1TSU1QTElGSUVEIFNBTFQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUU4O0NKSyBSQURJQ0FMIFNJTVBMSUZJRUQgV0hFQVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUU5O0NKSyBSQURJQ0FMIFNJTVBMSUZJRUQgWUVMTE9XO1NvOzA7T047Ozs7O047Ozs7OworMkVFQTtDSksgUkFESUNBTCBDLVNJTVBMSUZJRUQgRlJPRztTbzswO09OOzs7OztOOzs7OzsKKzJFRUI7Q0pLIFJBRElDQUwgSi1TSU1QTElGSUVEIEVWRU47U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUVDO0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBFVkVOO1NvOzA7T047Ozs7O047Ozs7OworMkVFRDtDSksgUkFESUNBTCBKLVNJTVBMSUZJRUQgVE9PVEg7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRUVFO0NKSyBSQURJQ0FMIEMtU0lNUExJRklFRCBUT09USDtTbzswO09OOzs7OztOOzs7OzsKKzJFRUY7Q0pLIFJBRElDQUwgSi1TSU1QTElGSUVEIERSQUdPTjtTbzswO09OOzs7OztOOzs7OzsKKzJFRjA7Q0pLIFJBRElDQUwgQy1TSU1QTElGSUVEIERSQUdPTjtTbzswO09OOzs7OztOOzs7OzsKKzJFRjE7Q0pLIFJBRElDQUwgVFVSVExFO1NvOzA7T047Ozs7O047Ozs7OworMkVGMjtDSksgUkFESUNBTCBKLVNJTVBMSUZJRUQgVFVSVExFO1NvOzA7T047Ozs7O047Ozs7OworMkVGMztDSksgUkFESUNBTCBDLVNJTVBMSUZJRUQgVFVSVExFO1NvOzA7T047PGNvbXBhdD4gOUY5Rjs7OztOOzs7OzsKKzJGMDA7S0FOR1hJIFJBRElDQUwgT05FO1NvOzA7T047PGNvbXBhdD4gNEUwMDs7OztOOzs7OzsKKzJGMDE7S0FOR1hJIFJBRElDQUwgTElORTtTbzswO09OOzxjb21wYXQ+IDRFMjg7Ozs7Tjs7Ozs7CisyRjAyO0tBTkdYSSBSQURJQ0FMIERPVDtTbzswO09OOzxjb21wYXQ+IDRFMzY7Ozs7Tjs7Ozs7CisyRjAzO0tBTkdYSSBSQURJQ0FMIFNMQVNIO1NvOzA7T047PGNvbXBhdD4gNEUzRjs7OztOOzs7OzsKKzJGMDQ7S0FOR1hJIFJBRElDQUwgU0VDT05EO1NvOzA7T047PGNvbXBhdD4gNEU1OTs7OztOOzs7OzsKKzJGMDU7S0FOR1hJIFJBRElDQUwgSE9PSztTbzswO09OOzxjb21wYXQ+IDRFODU7Ozs7Tjs7Ozs7CisyRjA2O0tBTkdYSSBSQURJQ0FMIFRXTztTbzswO09OOzxjb21wYXQ+IDRFOEM7Ozs7Tjs7Ozs7CisyRjA3O0tBTkdYSSBSQURJQ0FMIExJRDtTbzswO09OOzxjb21wYXQ+IDRFQTA7Ozs7Tjs7Ozs7CisyRjA4O0tBTkdYSSBSQURJQ0FMIE1BTjtTbzswO09OOzxjb21wYXQ+IDRFQkE7Ozs7Tjs7Ozs7CisyRjA5O0tBTkdYSSBSQURJQ0FMIExFR1M7U287MDtPTjs8Y29tcGF0PiA1MTNGOzs7O047Ozs7OworMkYwQTtLQU5HWEkgUkFESUNBTCBFTlRFUjtTbzswO09OOzxjb21wYXQ+IDUxNjU7Ozs7Tjs7Ozs7CisyRjBCO0tBTkdYSSBSQURJQ0FMIEVJR0hUO1NvOzA7T047PGNvbXBhdD4gNTE2Qjs7OztOOzs7OzsKKzJGMEM7S0FOR1hJIFJBRElDQUwgRE9XTiBCT1g7U287MDtPTjs8Y29tcGF0PiA1MTgyOzs7O047Ozs7OworMkYwRDtLQU5HWEkgUkFESUNBTCBDT1ZFUjtTbzswO09OOzxjb21wYXQ+IDUxOTY7Ozs7Tjs7Ozs7CisyRjBFO0tBTkdYSSBSQURJQ0FMIElDRTtTbzswO09OOzxjb21wYXQ+IDUxQUI7Ozs7Tjs7Ozs7CisyRjBGO0tBTkdYSSBSQURJQ0FMIFRBQkxFO1NvOzA7T047PGNvbXBhdD4gNTFFMDs7OztOOzs7OzsKKzJGMTA7S0FOR1hJIFJBRElDQUwgT1BFTiBCT1g7U287MDtPTjs8Y29tcGF0PiA1MUY1Ozs7O047Ozs7OworMkYxMTtLQU5HWEkgUkFESUNBTCBLTklGRTtTbzswO09OOzxjb21wYXQ+IDUyMDA7Ozs7Tjs7Ozs7CisyRjEyO0tBTkdYSSBSQURJQ0FMIFBPV0VSO1NvOzA7T047PGNvbXBhdD4gNTI5Qjs7OztOOzs7OzsKKzJGMTM7S0FOR1hJIFJBRElDQUwgV1JBUDtTbzswO09OOzxjb21wYXQ+IDUyRjk7Ozs7Tjs7Ozs7CisyRjE0O0tBTkdYSSBSQURJQ0FMIFNQT09OO1NvOzA7T047PGNvbXBhdD4gNTMxNTs7OztOOzs7OzsKKzJGMTU7S0FOR1hJIFJBRElDQUwgUklHSFQgT1BFTiBCT1g7U287MDtPTjs8Y29tcGF0PiA1MzFBOzs7O047Ozs7OworMkYxNjtLQU5HWEkgUkFESUNBTCBISURJTkcgRU5DTE9TVVJFO1NvOzA7T047PGNvbXBhdD4gNTMzODs7OztOOzs7OzsKKzJGMTc7S0FOR1hJIFJBRElDQUwgVEVOO1NvOzA7T047PGNvbXBhdD4gNTM0MTs7OztOOzs7OzsKKzJGMTg7S0FOR1hJIFJBRElDQUwgRElWSU5BVElPTjtTbzswO09OOzxjb21wYXQ+IDUzNUM7Ozs7Tjs7Ozs7CisyRjE5O0tBTkdYSSBSQURJQ0FMIFNFQUw7U287MDtPTjs8Y29tcGF0PiA1MzY5Ozs7O047Ozs7OworMkYxQTtLQU5HWEkgUkFESUNBTCBDTElGRjtTbzswO09OOzxjb21wYXQ+IDUzODI7Ozs7Tjs7Ozs7CisyRjFCO0tBTkdYSSBSQURJQ0FMIFBSSVZBVEU7U287MDtPTjs8Y29tcGF0PiA1M0I2Ozs7O047Ozs7OworMkYxQztLQU5HWEkgUkFESUNBTCBBR0FJTjtTbzswO09OOzxjb21wYXQ+IDUzQzg7Ozs7Tjs7Ozs7CisyRjFEO0tBTkdYSSBSQURJQ0FMIE1PVVRIO1NvOzA7T047PGNvbXBhdD4gNTNFMzs7OztOOzs7OzsKKzJGMUU7S0FOR1hJIFJBRElDQUwgRU5DTE9TVVJFO1NvOzA7T047PGNvbXBhdD4gNTZENzs7OztOOzs7OzsKKzJGMUY7S0FOR1hJIFJBRElDQUwgRUFSVEg7U287MDtPTjs8Y29tcGF0PiA1NzFGOzs7O047Ozs7OworMkYyMDtLQU5HWEkgUkFESUNBTCBTQ0hPTEFSO1NvOzA7T047PGNvbXBhdD4gNThFQjs7OztOOzs7OzsKKzJGMjE7S0FOR1hJIFJBRElDQUwgR087U287MDtPTjs8Y29tcGF0PiA1OTAyOzs7O047Ozs7OworMkYyMjtLQU5HWEkgUkFESUNBTCBHTyBTTE9XTFk7U287MDtPTjs8Y29tcGF0PiA1OTBBOzs7O047Ozs7OworMkYyMztLQU5HWEkgUkFESUNBTCBFVkVOSU5HO1NvOzA7T047PGNvbXBhdD4gNTkxNTs7OztOOzs7OzsKKzJGMjQ7S0FOR1hJIFJBRElDQUwgQklHO1NvOzA7T047PGNvbXBhdD4gNTkyNzs7OztOOzs7OzsKKzJGMjU7S0FOR1hJIFJBRElDQUwgV09NQU47U287MDtPTjs8Y29tcGF0PiA1OTczOzs7O047Ozs7OworMkYyNjtLQU5HWEkgUkFESUNBTCBDSElMRDtTbzswO09OOzxjb21wYXQ+IDVCNTA7Ozs7Tjs7Ozs7CisyRjI3O0tBTkdYSSBSQURJQ0FMIFJPT0Y7U287MDtPTjs8Y29tcGF0PiA1QjgwOzs7O047Ozs7OworMkYyODtLQU5HWEkgUkFESUNBTCBJTkNIO1NvOzA7T047PGNvbXBhdD4gNUJGODs7OztOOzs7OzsKKzJGMjk7S0FOR1hJIFJBRElDQUwgU01BTEw7U287MDtPTjs8Y29tcGF0PiA1QzBGOzs7O047Ozs7OworMkYyQTtLQU5HWEkgUkFESUNBTCBMQU1FO1NvOzA7T047PGNvbXBhdD4gNUMyMjs7OztOOzs7OzsKKzJGMkI7S0FOR1hJIFJBRElDQUwgQ09SUFNFO1NvOzA7T047PGNvbXBhdD4gNUMzODs7OztOOzs7OzsKKzJGMkM7S0FOR1hJIFJBRElDQUwgU1BST1VUO1NvOzA7T047PGNvbXBhdD4gNUM2RTs7OztOOzs7OzsKKzJGMkQ7S0FOR1hJIFJBRElDQUwgTU9VTlRBSU47U287MDtPTjs8Y29tcGF0PiA1QzcxOzs7O047Ozs7OworMkYyRTtLQU5HWEkgUkFESUNBTCBSSVZFUjtTbzswO09OOzxjb21wYXQ+IDVEREI7Ozs7Tjs7Ozs7CisyRjJGO0tBTkdYSSBSQURJQ0FMIFdPUks7U287MDtPTjs8Y29tcGF0PiA1REU1Ozs7O047Ozs7OworMkYzMDtLQU5HWEkgUkFESUNBTCBPTkVTRUxGO1NvOzA7T047PGNvbXBhdD4gNURGMTs7OztOOzs7OzsKKzJGMzE7S0FOR1hJIFJBRElDQUwgVFVSQkFOO1NvOzA7T047PGNvbXBhdD4gNURGRTs7OztOOzs7OzsKKzJGMzI7S0FOR1hJIFJBRElDQUwgRFJZO1NvOzA7T047PGNvbXBhdD4gNUU3Mjs7OztOOzs7OzsKKzJGMzM7S0FOR1hJIFJBRElDQUwgU0hPUlQgVEhSRUFEO1NvOzA7T047PGNvbXBhdD4gNUU3QTs7OztOOzs7OzsKKzJGMzQ7S0FOR1hJIFJBRElDQUwgRE9UVEVEIENMSUZGO1NvOzA7T047PGNvbXBhdD4gNUU3Rjs7OztOOzs7OzsKKzJGMzU7S0FOR1hJIFJBRElDQUwgTE9ORyBTVFJJREU7U287MDtPTjs8Y29tcGF0PiA1RUY0Ozs7O047Ozs7OworMkYzNjtLQU5HWEkgUkFESUNBTCBUV08gSEFORFM7U287MDtPTjs8Y29tcGF0PiA1RUZFOzs7O047Ozs7OworMkYzNztLQU5HWEkgUkFESUNBTCBTSE9PVDtTbzswO09OOzxjb21wYXQ+IDVGMEI7Ozs7Tjs7Ozs7CisyRjM4O0tBTkdYSSBSQURJQ0FMIEJPVztTbzswO09OOzxjb21wYXQ+IDVGMTM7Ozs7Tjs7Ozs7CisyRjM5O0tBTkdYSSBSQURJQ0FMIFNOT1VUO1NvOzA7T047PGNvbXBhdD4gNUY1MDs7OztOOzs7OzsKKzJGM0E7S0FOR1hJIFJBRElDQUwgQlJJU1RMRTtTbzswO09OOzxjb21wYXQ+IDVGNjE7Ozs7Tjs7Ozs7CisyRjNCO0tBTkdYSSBSQURJQ0FMIFNURVA7U287MDtPTjs8Y29tcGF0PiA1RjczOzs7O047Ozs7OworMkYzQztLQU5HWEkgUkFESUNBTCBIRUFSVDtTbzswO09OOzxjb21wYXQ+IDVGQzM7Ozs7Tjs7Ozs7CisyRjNEO0tBTkdYSSBSQURJQ0FMIEhBTEJFUkQ7U287MDtPTjs8Y29tcGF0PiA2MjA4Ozs7O047Ozs7OworMkYzRTtLQU5HWEkgUkFESUNBTCBET09SO1NvOzA7T047PGNvbXBhdD4gNjIzNjs7OztOOzs7OzsKKzJGM0Y7S0FOR1hJIFJBRElDQUwgSEFORDtTbzswO09OOzxjb21wYXQ+IDYyNEI7Ozs7Tjs7Ozs7CisyRjQwO0tBTkdYSSBSQURJQ0FMIEJSQU5DSDtTbzswO09OOzxjb21wYXQ+IDY1MkY7Ozs7Tjs7Ozs7CisyRjQxO0tBTkdYSSBSQURJQ0FMIFJBUDtTbzswO09OOzxjb21wYXQ+IDY1MzQ7Ozs7Tjs7Ozs7CisyRjQyO0tBTkdYSSBSQURJQ0FMIFNDUklQVDtTbzswO09OOzxjb21wYXQ+IDY1ODc7Ozs7Tjs7Ozs7CisyRjQzO0tBTkdYSSBSQURJQ0FMIERJUFBFUjtTbzswO09OOzxjb21wYXQ+IDY1OTc7Ozs7Tjs7Ozs7CisyRjQ0O0tBTkdYSSBSQURJQ0FMIEFYRTtTbzswO09OOzxjb21wYXQ+IDY1QTQ7Ozs7Tjs7Ozs7CisyRjQ1O0tBTkdYSSBSQURJQ0FMIFNRVUFSRTtTbzswO09OOzxjb21wYXQ+IDY1Qjk7Ozs7Tjs7Ozs7CisyRjQ2O0tBTkdYSSBSQURJQ0FMIE5PVDtTbzswO09OOzxjb21wYXQ+IDY1RTA7Ozs7Tjs7Ozs7CisyRjQ3O0tBTkdYSSBSQURJQ0FMIFNVTjtTbzswO09OOzxjb21wYXQ+IDY1RTU7Ozs7Tjs7Ozs7CisyRjQ4O0tBTkdYSSBSQURJQ0FMIFNBWTtTbzswO09OOzxjb21wYXQ+IDY2RjA7Ozs7Tjs7Ozs7CisyRjQ5O0tBTkdYSSBSQURJQ0FMIE1PT047U287MDtPTjs8Y29tcGF0PiA2NzA4Ozs7O047Ozs7OworMkY0QTtLQU5HWEkgUkFESUNBTCBUUkVFO1NvOzA7T047PGNvbXBhdD4gNjcyODs7OztOOzs7OzsKKzJGNEI7S0FOR1hJIFJBRElDQUwgTEFDSztTbzswO09OOzxjb21wYXQ+IDZCMjA7Ozs7Tjs7Ozs7CisyRjRDO0tBTkdYSSBSQURJQ0FMIFNUT1A7U287MDtPTjs8Y29tcGF0PiA2QjYyOzs7O047Ozs7OworMkY0RDtLQU5HWEkgUkFESUNBTCBERUFUSDtTbzswO09OOzxjb21wYXQ+IDZCNzk7Ozs7Tjs7Ozs7CisyRjRFO0tBTkdYSSBSQURJQ0FMIFdFQVBPTjtTbzswO09OOzxjb21wYXQ+IDZCQjM7Ozs7Tjs7Ozs7CisyRjRGO0tBTkdYSSBSQURJQ0FMIERPIE5PVDtTbzswO09OOzxjb21wYXQ+IDZCQ0I7Ozs7Tjs7Ozs7CisyRjUwO0tBTkdYSSBSQURJQ0FMIENPTVBBUkU7U287MDtPTjs8Y29tcGF0PiA2QkQ0Ozs7O047Ozs7OworMkY1MTtLQU5HWEkgUkFESUNBTCBGVVI7U287MDtPTjs8Y29tcGF0PiA2QkRCOzs7O047Ozs7OworMkY1MjtLQU5HWEkgUkFESUNBTCBDTEFOO1NvOzA7T047PGNvbXBhdD4gNkMwRjs7OztOOzs7OzsKKzJGNTM7S0FOR1hJIFJBRElDQUwgU1RFQU07U287MDtPTjs8Y29tcGF0PiA2QzE0Ozs7O047Ozs7OworMkY1NDtLQU5HWEkgUkFESUNBTCBXQVRFUjtTbzswO09OOzxjb21wYXQ+IDZDMzQ7Ozs7Tjs7Ozs7CisyRjU1O0tBTkdYSSBSQURJQ0FMIEZJUkU7U287MDtPTjs8Y29tcGF0PiA3MDZCOzs7O047Ozs7OworMkY1NjtLQU5HWEkgUkFESUNBTCBDTEFXO1NvOzA7T047PGNvbXBhdD4gNzIyQTs7OztOOzs7OzsKKzJGNTc7S0FOR1hJIFJBRElDQUwgRkFUSEVSO1NvOzA7T047PGNvbXBhdD4gNzIzNjs7OztOOzs7OzsKKzJGNTg7S0FOR1hJIFJBRElDQUwgRE9VQkxFIFg7U287MDtPTjs8Y29tcGF0PiA3MjNCOzs7O047Ozs7OworMkY1OTtLQU5HWEkgUkFESUNBTCBIQUxGIFRSRUUgVFJVTks7U287MDtPTjs8Y29tcGF0PiA3MjNGOzs7O047Ozs7OworMkY1QTtLQU5HWEkgUkFESUNBTCBTTElDRTtTbzswO09OOzxjb21wYXQ+IDcyNDc7Ozs7Tjs7Ozs7CisyRjVCO0tBTkdYSSBSQURJQ0FMIEZBTkc7U287MDtPTjs8Y29tcGF0PiA3MjU5Ozs7O047Ozs7OworMkY1QztLQU5HWEkgUkFESUNBTCBDT1c7U287MDtPTjs8Y29tcGF0PiA3MjVCOzs7O047Ozs7OworMkY1RDtLQU5HWEkgUkFESUNBTCBET0c7U287MDtPTjs8Y29tcGF0PiA3MkFDOzs7O047Ozs7OworMkY1RTtLQU5HWEkgUkFESUNBTCBQUk9GT1VORDtTbzswO09OOzxjb21wYXQ+IDczODQ7Ozs7Tjs7Ozs7CisyRjVGO0tBTkdYSSBSQURJQ0FMIEpBREU7U287MDtPTjs8Y29tcGF0PiA3Mzg5Ozs7O047Ozs7OworMkY2MDtLQU5HWEkgUkFESUNBTCBNRUxPTjtTbzswO09OOzxjb21wYXQ+IDc0REM7Ozs7Tjs7Ozs7CisyRjYxO0tBTkdYSSBSQURJQ0FMIFRJTEU7U287MDtPTjs8Y29tcGF0PiA3NEU2Ozs7O047Ozs7OworMkY2MjtLQU5HWEkgUkFESUNBTCBTV0VFVDtTbzswO09OOzxjb21wYXQ+IDc1MTg7Ozs7Tjs7Ozs7CisyRjYzO0tBTkdYSSBSQURJQ0FMIExJRkU7U287MDtPTjs8Y29tcGF0PiA3NTFGOzs7O047Ozs7OworMkY2NDtLQU5HWEkgUkFESUNBTCBVU0U7U287MDtPTjs8Y29tcGF0PiA3NTI4Ozs7O047Ozs7OworMkY2NTtLQU5HWEkgUkFESUNBTCBGSUVMRDtTbzswO09OOzxjb21wYXQ+IDc1MzA7Ozs7Tjs7Ozs7CisyRjY2O0tBTkdYSSBSQURJQ0FMIEJPTFQgT0YgQ0xPVEg7U287MDtPTjs8Y29tcGF0PiA3NThCOzs7O047Ozs7OworMkY2NztLQU5HWEkgUkFESUNBTCBTSUNLTkVTUztTbzswO09OOzxjb21wYXQ+IDc1OTI7Ozs7Tjs7Ozs7CisyRjY4O0tBTkdYSSBSQURJQ0FMIERPVFRFRCBURU5UO1NvOzA7T047PGNvbXBhdD4gNzY3Njs7OztOOzs7OzsKKzJGNjk7S0FOR1hJIFJBRElDQUwgV0hJVEU7U287MDtPTjs8Y29tcGF0PiA3NjdEOzs7O047Ozs7OworMkY2QTtLQU5HWEkgUkFESUNBTCBTS0lOO1NvOzA7T047PGNvbXBhdD4gNzZBRTs7OztOOzs7OzsKKzJGNkI7S0FOR1hJIFJBRElDQUwgRElTSDtTbzswO09OOzxjb21wYXQ+IDc2QkY7Ozs7Tjs7Ozs7CisyRjZDO0tBTkdYSSBSQURJQ0FMIEVZRTtTbzswO09OOzxjb21wYXQ+IDc2RUU7Ozs7Tjs7Ozs7CisyRjZEO0tBTkdYSSBSQURJQ0FMIFNQRUFSO1NvOzA7T047PGNvbXBhdD4gNzdEQjs7OztOOzs7OzsKKzJGNkU7S0FOR1hJIFJBRElDQUwgQVJST1c7U287MDtPTjs8Y29tcGF0PiA3N0UyOzs7O047Ozs7OworMkY2RjtLQU5HWEkgUkFESUNBTCBTVE9ORTtTbzswO09OOzxjb21wYXQ+IDc3RjM7Ozs7Tjs7Ozs7CisyRjcwO0tBTkdYSSBSQURJQ0FMIFNQSVJJVDtTbzswO09OOzxjb21wYXQ+IDc5M0E7Ozs7Tjs7Ozs7CisyRjcxO0tBTkdYSSBSQURJQ0FMIFRSQUNLO1NvOzA7T047PGNvbXBhdD4gNzlCODs7OztOOzs7OzsKKzJGNzI7S0FOR1hJIFJBRElDQUwgR1JBSU47U287MDtPTjs8Y29tcGF0PiA3OUJFOzs7O047Ozs7OworMkY3MztLQU5HWEkgUkFESUNBTCBDQVZFO1NvOzA7T047PGNvbXBhdD4gN0E3NDs7OztOOzs7OzsKKzJGNzQ7S0FOR1hJIFJBRElDQUwgU1RBTkQ7U287MDtPTjs8Y29tcGF0PiA3QUNCOzs7O047Ozs7OworMkY3NTtLQU5HWEkgUkFESUNBTCBCQU1CT087U287MDtPTjs8Y29tcGF0PiA3QUY5Ozs7O047Ozs7OworMkY3NjtLQU5HWEkgUkFESUNBTCBSSUNFO1NvOzA7T047PGNvbXBhdD4gN0M3Mzs7OztOOzs7OzsKKzJGNzc7S0FOR1hJIFJBRElDQUwgU0lMSztTbzswO09OOzxjb21wYXQ+IDdDRjg7Ozs7Tjs7Ozs7CisyRjc4O0tBTkdYSSBSQURJQ0FMIEpBUjtTbzswO09OOzxjb21wYXQ+IDdGMzY7Ozs7Tjs7Ozs7CisyRjc5O0tBTkdYSSBSQURJQ0FMIE5FVDtTbzswO09OOzxjb21wYXQ+IDdGNTE7Ozs7Tjs7Ozs7CisyRjdBO0tBTkdYSSBSQURJQ0FMIFNIRUVQO1NvOzA7T047PGNvbXBhdD4gN0Y4QTs7OztOOzs7OzsKKzJGN0I7S0FOR1hJIFJBRElDQUwgRkVBVEhFUjtTbzswO09OOzxjb21wYXQ+IDdGQkQ7Ozs7Tjs7Ozs7CisyRjdDO0tBTkdYSSBSQURJQ0FMIE9MRDtTbzswO09OOzxjb21wYXQ+IDgwMDE7Ozs7Tjs7Ozs7CisyRjdEO0tBTkdYSSBSQURJQ0FMIEFORDtTbzswO09OOzxjb21wYXQ+IDgwMEM7Ozs7Tjs7Ozs7CisyRjdFO0tBTkdYSSBSQURJQ0FMIFBMT1c7U287MDtPTjs8Y29tcGF0PiA4MDEyOzs7O047Ozs7OworMkY3RjtLQU5HWEkgUkFESUNBTCBFQVI7U287MDtPTjs8Y29tcGF0PiA4MDMzOzs7O047Ozs7OworMkY4MDtLQU5HWEkgUkFESUNBTCBCUlVTSDtTbzswO09OOzxjb21wYXQ+IDgwN0Y7Ozs7Tjs7Ozs7CisyRjgxO0tBTkdYSSBSQURJQ0FMIE1FQVQ7U287MDtPTjs8Y29tcGF0PiA4MDg5Ozs7O047Ozs7OworMkY4MjtLQU5HWEkgUkFESUNBTCBNSU5JU1RFUjtTbzswO09OOzxjb21wYXQ+IDgxRTM7Ozs7Tjs7Ozs7CisyRjgzO0tBTkdYSSBSQURJQ0FMIFNFTEY7U287MDtPTjs8Y29tcGF0PiA4MUVBOzs7O047Ozs7OworMkY4NDtLQU5HWEkgUkFESUNBTCBBUlJJVkU7U287MDtPTjs8Y29tcGF0PiA4MUYzOzs7O047Ozs7OworMkY4NTtLQU5HWEkgUkFESUNBTCBNT1JUQVI7U287MDtPTjs8Y29tcGF0PiA4MUZDOzs7O047Ozs7OworMkY4NjtLQU5HWEkgUkFESUNBTCBUT05HVUU7U287MDtPTjs8Y29tcGF0PiA4MjBDOzs7O047Ozs7OworMkY4NztLQU5HWEkgUkFESUNBTCBPUFBPU0U7U287MDtPTjs8Y29tcGF0PiA4MjFCOzs7O047Ozs7OworMkY4ODtLQU5HWEkgUkFESUNBTCBCT0FUO1NvOzA7T047PGNvbXBhdD4gODIxRjs7OztOOzs7OzsKKzJGODk7S0FOR1hJIFJBRElDQUwgU1RPUFBJTkc7U287MDtPTjs8Y29tcGF0PiA4MjZFOzs7O047Ozs7OworMkY4QTtLQU5HWEkgUkFESUNBTCBDT0xPUjtTbzswO09OOzxjb21wYXQ+IDgyNzI7Ozs7Tjs7Ozs7CisyRjhCO0tBTkdYSSBSQURJQ0FMIEdSQVNTO1NvOzA7T047PGNvbXBhdD4gODI3ODs7OztOOzs7OzsKKzJGOEM7S0FOR1hJIFJBRElDQUwgVElHRVI7U287MDtPTjs8Y29tcGF0PiA4NjREOzs7O047Ozs7OworMkY4RDtLQU5HWEkgUkFESUNBTCBJTlNFQ1Q7U287MDtPTjs8Y29tcGF0PiA4NjZCOzs7O047Ozs7OworMkY4RTtLQU5HWEkgUkFESUNBTCBCTE9PRDtTbzswO09OOzxjb21wYXQ+IDg4NDA7Ozs7Tjs7Ozs7CisyRjhGO0tBTkdYSSBSQURJQ0FMIFdBTEsgRU5DTE9TVVJFO1NvOzA7T047PGNvbXBhdD4gODg0Qzs7OztOOzs7OzsKKzJGOTA7S0FOR1hJIFJBRElDQUwgQ0xPVEhFUztTbzswO09OOzxjb21wYXQ+IDg4NjM7Ozs7Tjs7Ozs7CisyRjkxO0tBTkdYSSBSQURJQ0FMIFdFU1Q7U287MDtPTjs8Y29tcGF0PiA4OTdFOzs7O047Ozs7OworMkY5MjtLQU5HWEkgUkFESUNBTCBTRUU7U287MDtPTjs8Y29tcGF0PiA4OThCOzs7O047Ozs7OworMkY5MztLQU5HWEkgUkFESUNBTCBIT1JOO1NvOzA7T047PGNvbXBhdD4gODlEMjs7OztOOzs7OzsKKzJGOTQ7S0FOR1hJIFJBRElDQUwgU1BFRUNIO1NvOzA7T047PGNvbXBhdD4gOEEwMDs7OztOOzs7OzsKKzJGOTU7S0FOR1hJIFJBRElDQUwgVkFMTEVZO1NvOzA7T047PGNvbXBhdD4gOEMzNzs7OztOOzs7OzsKKzJGOTY7S0FOR1hJIFJBRElDQUwgQkVBTjtTbzswO09OOzxjb21wYXQ+IDhDNDY7Ozs7Tjs7Ozs7CisyRjk3O0tBTkdYSSBSQURJQ0FMIFBJRztTbzswO09OOzxjb21wYXQ+IDhDNTU7Ozs7Tjs7Ozs7CisyRjk4O0tBTkdYSSBSQURJQ0FMIEJBREdFUjtTbzswO09OOzxjb21wYXQ+IDhDNzg7Ozs7Tjs7Ozs7CisyRjk5O0tBTkdYSSBSQURJQ0FMIFNIRUxMO1NvOzA7T047PGNvbXBhdD4gOEM5RDs7OztOOzs7OzsKKzJGOUE7S0FOR1hJIFJBRElDQUwgUkVEO1NvOzA7T047PGNvbXBhdD4gOEQ2NDs7OztOOzs7OzsKKzJGOUI7S0FOR1hJIFJBRElDQUwgUlVOO1NvOzA7T047PGNvbXBhdD4gOEQ3MDs7OztOOzs7OzsKKzJGOUM7S0FOR1hJIFJBRElDQUwgRk9PVDtTbzswO09OOzxjb21wYXQ+IDhEQjM7Ozs7Tjs7Ozs7CisyRjlEO0tBTkdYSSBSQURJQ0FMIEJPRFk7U287MDtPTjs8Y29tcGF0PiA4RUFCOzs7O047Ozs7OworMkY5RTtLQU5HWEkgUkFESUNBTCBDQVJUO1NvOzA7T047PGNvbXBhdD4gOEVDQTs7OztOOzs7OzsKKzJGOUY7S0FOR1hJIFJBRElDQUwgQklUVEVSO1NvOzA7T047PGNvbXBhdD4gOEY5Qjs7OztOOzs7OzsKKzJGQTA7S0FOR1hJIFJBRElDQUwgTU9STklORztTbzswO09OOzxjb21wYXQ+IDhGQjA7Ozs7Tjs7Ozs7CisyRkExO0tBTkdYSSBSQURJQ0FMIFdBTEs7U287MDtPTjs8Y29tcGF0PiA4RkI1Ozs7O047Ozs7OworMkZBMjtLQU5HWEkgUkFESUNBTCBDSVRZO1NvOzA7T047PGNvbXBhdD4gOTA5MTs7OztOOzs7OzsKKzJGQTM7S0FOR1hJIFJBRElDQUwgV0lORTtTbzswO09OOzxjb21wYXQ+IDkxNDk7Ozs7Tjs7Ozs7CisyRkE0O0tBTkdYSSBSQURJQ0FMIERJU1RJTkdVSVNIO1NvOzA7T047PGNvbXBhdD4gOTFDNjs7OztOOzs7OzsKKzJGQTU7S0FOR1hJIFJBRElDQUwgVklMTEFHRTtTbzswO09OOzxjb21wYXQ+IDkxQ0M7Ozs7Tjs7Ozs7CisyRkE2O0tBTkdYSSBSQURJQ0FMIEdPTEQ7U287MDtPTjs8Y29tcGF0PiA5MUQxOzs7O047Ozs7OworMkZBNztLQU5HWEkgUkFESUNBTCBMT05HO1NvOzA7T047PGNvbXBhdD4gOTU3Nzs7OztOOzs7OzsKKzJGQTg7S0FOR1hJIFJBRElDQUwgR0FURTtTbzswO09OOzxjb21wYXQ+IDk1ODA7Ozs7Tjs7Ozs7CisyRkE5O0tBTkdYSSBSQURJQ0FMIE1PVU5EO1NvOzA7T047PGNvbXBhdD4gOTYxQzs7OztOOzs7OzsKKzJGQUE7S0FOR1hJIFJBRElDQUwgU0xBVkU7U287MDtPTjs8Y29tcGF0PiA5NkI2Ozs7O047Ozs7OworMkZBQjtLQU5HWEkgUkFESUNBTCBTSE9SVCBUQUlMRUQgQklSRDtTbzswO09OOzxjb21wYXQ+IDk2Qjk7Ozs7Tjs7Ozs7CisyRkFDO0tBTkdYSSBSQURJQ0FMIFJBSU47U287MDtPTjs8Y29tcGF0PiA5NkU4Ozs7O047Ozs7OworMkZBRDtLQU5HWEkgUkFESUNBTCBCTFVFO1NvOzA7T047PGNvbXBhdD4gOTc1MTs7OztOOzs7OzsKKzJGQUU7S0FOR1hJIFJBRElDQUwgV1JPTkc7U287MDtPTjs8Y29tcGF0PiA5NzVFOzs7O047Ozs7OworMkZBRjtLQU5HWEkgUkFESUNBTCBGQUNFO1NvOzA7T047PGNvbXBhdD4gOTc2Mjs7OztOOzs7OzsKKzJGQjA7S0FOR1hJIFJBRElDQUwgTEVBVEhFUjtTbzswO09OOzxjb21wYXQ+IDk3Njk7Ozs7Tjs7Ozs7CisyRkIxO0tBTkdYSSBSQURJQ0FMIFRBTk5FRCBMRUFUSEVSO1NvOzA7T047PGNvbXBhdD4gOTdDQjs7OztOOzs7OzsKKzJGQjI7S0FOR1hJIFJBRElDQUwgTEVFSztTbzswO09OOzxjb21wYXQ+IDk3RUQ7Ozs7Tjs7Ozs7CisyRkIzO0tBTkdYSSBSQURJQ0FMIFNPVU5EO1NvOzA7T047PGNvbXBhdD4gOTdGMzs7OztOOzs7OzsKKzJGQjQ7S0FOR1hJIFJBRElDQUwgTEVBRjtTbzswO09OOzxjb21wYXQ+IDk4MDE7Ozs7Tjs7Ozs7CisyRkI1O0tBTkdYSSBSQURJQ0FMIFdJTkQ7U287MDtPTjs8Y29tcGF0PiA5OEE4Ozs7O047Ozs7OworMkZCNjtLQU5HWEkgUkFESUNBTCBGTFk7U287MDtPTjs8Y29tcGF0PiA5OERCOzs7O047Ozs7OworMkZCNztLQU5HWEkgUkFESUNBTCBFQVQ7U287MDtPTjs8Y29tcGF0PiA5OERGOzs7O047Ozs7OworMkZCODtLQU5HWEkgUkFESUNBTCBIRUFEO1NvOzA7T047PGNvbXBhdD4gOTk5Njs7OztOOzs7OzsKKzJGQjk7S0FOR1hJIFJBRElDQUwgRlJBR1JBTlQ7U287MDtPTjs8Y29tcGF0PiA5OTk5Ozs7O047Ozs7OworMkZCQTtLQU5HWEkgUkFESUNBTCBIT1JTRTtTbzswO09OOzxjb21wYXQ+IDk5QUM7Ozs7Tjs7Ozs7CisyRkJCO0tBTkdYSSBSQURJQ0FMIEJPTkU7U287MDtPTjs8Y29tcGF0PiA5QUE4Ozs7O047Ozs7OworMkZCQztLQU5HWEkgUkFESUNBTCBUQUxMO1NvOzA7T047PGNvbXBhdD4gOUFEODs7OztOOzs7OzsKKzJGQkQ7S0FOR1hJIFJBRElDQUwgSEFJUjtTbzswO09OOzxjb21wYXQ+IDlBREY7Ozs7Tjs7Ozs7CisyRkJFO0tBTkdYSSBSQURJQ0FMIEZJR0hUO1NvOzA7T047PGNvbXBhdD4gOUIyNTs7OztOOzs7OzsKKzJGQkY7S0FOR1hJIFJBRElDQUwgU0FDUklGSUNJQUwgV0lORTtTbzswO09OOzxjb21wYXQ+IDlCMkY7Ozs7Tjs7Ozs7CisyRkMwO0tBTkdYSSBSQURJQ0FMIENBVUxEUk9OO1NvOzA7T047PGNvbXBhdD4gOUIzMjs7OztOOzs7OzsKKzJGQzE7S0FOR1hJIFJBRElDQUwgR0hPU1Q7U287MDtPTjs8Y29tcGF0PiA5QjNDOzs7O047Ozs7OworMkZDMjtLQU5HWEkgUkFESUNBTCBGSVNIO1NvOzA7T047PGNvbXBhdD4gOUI1QTs7OztOOzs7OzsKKzJGQzM7S0FOR1hJIFJBRElDQUwgQklSRDtTbzswO09OOzxjb21wYXQ+IDlDRTU7Ozs7Tjs7Ozs7CisyRkM0O0tBTkdYSSBSQURJQ0FMIFNBTFQ7U287MDtPTjs8Y29tcGF0PiA5RTc1Ozs7O047Ozs7OworMkZDNTtLQU5HWEkgUkFESUNBTCBERUVSO1NvOzA7T047PGNvbXBhdD4gOUU3Rjs7OztOOzs7OzsKKzJGQzY7S0FOR1hJIFJBRElDQUwgV0hFQVQ7U287MDtPTjs8Y29tcGF0PiA5RUE1Ozs7O047Ozs7OworMkZDNztLQU5HWEkgUkFESUNBTCBIRU1QO1NvOzA7T047PGNvbXBhdD4gOUVCQjs7OztOOzs7OzsKKzJGQzg7S0FOR1hJIFJBRElDQUwgWUVMTE9XO1NvOzA7T047PGNvbXBhdD4gOUVDMzs7OztOOzs7OzsKKzJGQzk7S0FOR1hJIFJBRElDQUwgTUlMTEVUO1NvOzA7T047PGNvbXBhdD4gOUVDRDs7OztOOzs7OzsKKzJGQ0E7S0FOR1hJIFJBRElDQUwgQkxBQ0s7U287MDtPTjs8Y29tcGF0PiA5RUQxOzs7O047Ozs7OworMkZDQjtLQU5HWEkgUkFESUNBTCBFTUJST0lERVJZO1NvOzA7T047PGNvbXBhdD4gOUVGOTs7OztOOzs7OzsKKzJGQ0M7S0FOR1hJIFJBRElDQUwgRlJPRztTbzswO09OOzxjb21wYXQ+IDlFRkQ7Ozs7Tjs7Ozs7CisyRkNEO0tBTkdYSSBSQURJQ0FMIFRSSVBPRDtTbzswO09OOzxjb21wYXQ+IDlGMEU7Ozs7Tjs7Ozs7CisyRkNFO0tBTkdYSSBSQURJQ0FMIERSVU07U287MDtPTjs8Y29tcGF0PiA5RjEzOzs7O047Ozs7OworMkZDRjtLQU5HWEkgUkFESUNBTCBSQVQ7U287MDtPTjs8Y29tcGF0PiA5RjIwOzs7O047Ozs7OworMkZEMDtLQU5HWEkgUkFESUNBTCBOT1NFO1NvOzA7T047PGNvbXBhdD4gOUYzQjs7OztOOzs7OzsKKzJGRDE7S0FOR1hJIFJBRElDQUwgRVZFTjtTbzswO09OOzxjb21wYXQ+IDlGNEE7Ozs7Tjs7Ozs7CisyRkQyO0tBTkdYSSBSQURJQ0FMIFRPT1RIO1NvOzA7T047PGNvbXBhdD4gOUY1Mjs7OztOOzs7OzsKKzJGRDM7S0FOR1hJIFJBRElDQUwgRFJBR09OO1NvOzA7T047PGNvbXBhdD4gOUY4RDs7OztOOzs7OzsKKzJGRDQ7S0FOR1hJIFJBRElDQUwgVFVSVExFO1NvOzA7T047PGNvbXBhdD4gOUY5Qzs7OztOOzs7OzsKKzJGRDU7S0FOR1hJIFJBRElDQUwgRkxVVEU7U287MDtPTjs8Y29tcGF0PiA5RkEwOzs7O047Ozs7OworMkZGMDtJREVPR1JBUEhJQyBERVNDUklQVElPTiBDSEFSQUNURVIgTEVGVCBUTyBSSUdIVDtTbzswO09OOzs7OztOOzs7OzsKKzJGRjE7SURFT0dSQVBISUMgREVTQ1JJUFRJT04gQ0hBUkFDVEVSIEFCT1ZFIFRPIEJFTE9XO1NvOzA7T047Ozs7O047Ozs7OworMkZGMjtJREVPR1JBUEhJQyBERVNDUklQVElPTiBDSEFSQUNURVIgTEVGVCBUTyBNSURETEUgQU5EIFJJR0hUO1NvOzA7T047Ozs7O047Ozs7OworMkZGMztJREVPR1JBUEhJQyBERVNDUklQVElPTiBDSEFSQUNURVIgQUJPVkUgVE8gTUlERExFIEFORCBCRUxPVztTbzswO09OOzs7OztOOzs7OzsKKzJGRjQ7SURFT0dSQVBISUMgREVTQ1JJUFRJT04gQ0hBUkFDVEVSIEZVTEwgU1VSUk9VTkQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRkY1O0lERU9HUkFQSElDIERFU0NSSVBUSU9OIENIQVJBQ1RFUiBTVVJST1VORCBGUk9NIEFCT1ZFO1NvOzA7T047Ozs7O047Ozs7OworMkZGNjtJREVPR1JBUEhJQyBERVNDUklQVElPTiBDSEFSQUNURVIgU1VSUk9VTkQgRlJPTSBCRUxPVztTbzswO09OOzs7OztOOzs7OzsKKzJGRjc7SURFT0dSQVBISUMgREVTQ1JJUFRJT04gQ0hBUkFDVEVSIFNVUlJPVU5EIEZST00gTEVGVDtTbzswO09OOzs7OztOOzs7OzsKKzJGRjg7SURFT0dSQVBISUMgREVTQ1JJUFRJT04gQ0hBUkFDVEVSIFNVUlJPVU5EIEZST00gVVBQRVIgTEVGVDtTbzswO09OOzs7OztOOzs7OzsKKzJGRjk7SURFT0dSQVBISUMgREVTQ1JJUFRJT04gQ0hBUkFDVEVSIFNVUlJPVU5EIEZST00gVVBQRVIgUklHSFQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRkZBO0lERU9HUkFQSElDIERFU0NSSVBUSU9OIENIQVJBQ1RFUiBTVVJST1VORCBGUk9NIExPV0VSIExFRlQ7U287MDtPTjs7Ozs7Tjs7Ozs7CisyRkZCO0lERU9HUkFQSElDIERFU0NSSVBUSU9OIENIQVJBQ1RFUiBPVkVSTEFJRDtTbzswO09OOzs7OztOOzs7OzsKKzMwMDA7SURFT0dSQVBISUMgU1BBQ0U7WnM7MDtXUzs8d2lkZT4gMDAyMDs7OztOOzs7OzsKKzMwMDE7SURFT0dSQVBISUMgQ09NTUE7UG87MDtPTjs7Ozs7Tjs7Ozs7CiszMDAyO0lERU9HUkFQSElDIEZVTEwgU1RPUDtQbzswO09OOzs7OztOO0lERU9HUkFQSElDIFBFUklPRDs7OzsKKzMwMDM7RElUVE8gTUFSSztQbzswO09OOzs7OztOOzs7OzsKKzMwMDQ7SkFQQU5FU0UgSU5EVVNUUklBTCBTVEFOREFSRCBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CiszMDA1O0lERU9HUkFQSElDIElURVJBVElPTiBNQVJLO0xtOzA7TDs7Ozs7Tjs7Ozs7CiszMDA2O0lERU9HUkFQSElDIENMT1NJTkcgTUFSSztMbzswO0w7Ozs7O047Ozs7OworMzAwNztJREVPR1JBUEhJQyBOVU1CRVIgWkVSTztObDswO0w7Ozs7MDtOOzs7OzsKKzMwMDg7TEVGVCBBTkdMRSBCUkFDS0VUO1BzOzA7T047Ozs7O1k7T1BFTklORyBBTkdMRSBCUkFDS0VUOzs7OworMzAwOTtSSUdIVCBBTkdMRSBCUkFDS0VUO1BlOzA7T047Ozs7O1k7Q0xPU0lORyBBTkdMRSBCUkFDS0VUOzs7OworMzAwQTtMRUZUIERPVUJMRSBBTkdMRSBCUkFDS0VUO1BzOzA7T047Ozs7O1k7T1BFTklORyBET1VCTEUgQU5HTEUgQlJBQ0tFVDs7OzsKKzMwMEI7UklHSFQgRE9VQkxFIEFOR0xFIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTtDTE9TSU5HIERPVUJMRSBBTkdMRSBCUkFDS0VUOzs7OworMzAwQztMRUZUIENPUk5FUiBCUkFDS0VUO1BzOzA7T047Ozs7O1k7T1BFTklORyBDT1JORVIgQlJBQ0tFVDs7OzsKKzMwMEQ7UklHSFQgQ09STkVSIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTtDTE9TSU5HIENPUk5FUiBCUkFDS0VUOzs7OworMzAwRTtMRUZUIFdISVRFIENPUk5FUiBCUkFDS0VUO1BzOzA7T047Ozs7O1k7T1BFTklORyBXSElURSBDT1JORVIgQlJBQ0tFVDs7OzsKKzMwMEY7UklHSFQgV0hJVEUgQ09STkVSIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTtDTE9TSU5HIFdISVRFIENPUk5FUiBCUkFDS0VUOzs7OworMzAxMDtMRUZUIEJMQUNLIExFTlRJQ1VMQVIgQlJBQ0tFVDtQczswO09OOzs7OztZO09QRU5JTkcgQkxBQ0sgTEVOVElDVUxBUiBCUkFDS0VUOzs7OworMzAxMTtSSUdIVCBCTEFDSyBMRU5USUNVTEFSIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTtDTE9TSU5HIEJMQUNLIExFTlRJQ1VMQVIgQlJBQ0tFVDs7OzsKKzMwMTI7UE9TVEFMIE1BUks7U287MDtPTjs7Ozs7Tjs7Ozs7CiszMDEzO0dFVEEgTUFSSztTbzswO09OOzs7OztOOzs7OzsKKzMwMTQ7TEVGVCBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUO1BzOzA7T047Ozs7O1k7T1BFTklORyBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUOzs7OworMzAxNTtSSUdIVCBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUO1BlOzA7T047Ozs7O1k7Q0xPU0lORyBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUOzs7OworMzAxNjtMRUZUIFdISVRFIExFTlRJQ1VMQVIgQlJBQ0tFVDtQczswO09OOzs7OztZO09QRU5JTkcgV0hJVEUgTEVOVElDVUxBUiBCUkFDS0VUOzs7OworMzAxNztSSUdIVCBXSElURSBMRU5USUNVTEFSIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTtDTE9TSU5HIFdISVRFIExFTlRJQ1VMQVIgQlJBQ0tFVDs7OzsKKzMwMTg7TEVGVCBXSElURSBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUO1BzOzA7T047Ozs7O1k7T1BFTklORyBXSElURSBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUOzs7OworMzAxOTtSSUdIVCBXSElURSBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUO1BlOzA7T047Ozs7O1k7Q0xPU0lORyBXSElURSBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUOzs7OworMzAxQTtMRUZUIFdISVRFIFNRVUFSRSBCUkFDS0VUO1BzOzA7T047Ozs7O1k7T1BFTklORyBXSElURSBTUVVBUkUgQlJBQ0tFVDs7OzsKKzMwMUI7UklHSFQgV0hJVEUgU1FVQVJFIEJSQUNLRVQ7UGU7MDtPTjs7Ozs7WTtDTE9TSU5HIFdISVRFIFNRVUFSRSBCUkFDS0VUOzs7OworMzAxQztXQVZFIERBU0g7UGQ7MDtPTjs7Ozs7Tjs7Ozs7CiszMDFEO1JFVkVSU0VEIERPVUJMRSBQUklNRSBRVU9UQVRJT04gTUFSSztQczswO09OOzs7OztOOzs7OzsKKzMwMUU7RE9VQkxFIFBSSU1FIFFVT1RBVElPTiBNQVJLO1BlOzA7T047Ozs7O047Ozs7OworMzAxRjtMT1cgRE9VQkxFIFBSSU1FIFFVT1RBVElPTiBNQVJLO1BlOzA7T047Ozs7O047Ozs7OworMzAyMDtQT1NUQUwgTUFSSyBGQUNFO1NvOzA7T047Ozs7O047Ozs7OworMzAyMTtIQU5HWkhPVSBOVU1FUkFMIE9ORTtObDswO0w7Ozs7MTtOOzs7OzsKKzMwMjI7SEFOR1pIT1UgTlVNRVJBTCBUV087Tmw7MDtMOzs7OzI7Tjs7Ozs7CiszMDIzO0hBTkdaSE9VIE5VTUVSQUwgVEhSRUU7Tmw7MDtMOzs7OzM7Tjs7Ozs7CiszMDI0O0hBTkdaSE9VIE5VTUVSQUwgRk9VUjtObDswO0w7Ozs7NDtOOzs7OzsKKzMwMjU7SEFOR1pIT1UgTlVNRVJBTCBGSVZFO05sOzA7TDs7Ozs1O047Ozs7OworMzAyNjtIQU5HWkhPVSBOVU1FUkFMIFNJWDtObDswO0w7Ozs7NjtOOzs7OzsKKzMwMjc7SEFOR1pIT1UgTlVNRVJBTCBTRVZFTjtObDswO0w7Ozs7NztOOzs7OzsKKzMwMjg7SEFOR1pIT1UgTlVNRVJBTCBFSUdIVDtObDswO0w7Ozs7ODtOOzs7OzsKKzMwMjk7SEFOR1pIT1UgTlVNRVJBTCBOSU5FO05sOzA7TDs7Ozs5O047Ozs7OworMzAyQTtJREVPR1JBUEhJQyBMRVZFTCBUT05FIE1BUks7TW47MjE4O05TTTs7Ozs7Tjs7Ozs7CiszMDJCO0lERU9HUkFQSElDIFJJU0lORyBUT05FIE1BUks7TW47MjI4O05TTTs7Ozs7Tjs7Ozs7CiszMDJDO0lERU9HUkFQSElDIERFUEFSVElORyBUT05FIE1BUks7TW47MjMyO05TTTs7Ozs7Tjs7Ozs7CiszMDJEO0lERU9HUkFQSElDIEVOVEVSSU5HIFRPTkUgTUFSSztNbjsyMjI7TlNNOzs7OztOOzs7OzsKKzMwMkU7SEFOR1VMIFNJTkdMRSBET1QgVE9ORSBNQVJLO01uOzIyNDtOU007Ozs7O047Ozs7OworMzAyRjtIQU5HVUwgRE9VQkxFIERPVCBUT05FIE1BUks7TW47MjI0O05TTTs7Ozs7Tjs7Ozs7CiszMDMwO1dBVlkgREFTSDtQZDswO09OOzs7OztOOzs7OzsKKzMwMzE7VkVSVElDQUwgS0FOQSBSRVBFQVQgTUFSSztMbTswO0w7Ozs7O047Ozs7OworMzAzMjtWRVJUSUNBTCBLQU5BIFJFUEVBVCBXSVRIIFZPSUNFRCBTT1VORCBNQVJLO0xtOzA7TDs7Ozs7Tjs7Ozs7CiszMDMzO1ZFUlRJQ0FMIEtBTkEgUkVQRUFUIE1BUksgVVBQRVIgSEFMRjtMbTswO0w7Ozs7O047Ozs7OworMzAzNDtWRVJUSUNBTCBLQU5BIFJFUEVBVCBXSVRIIFZPSUNFRCBTT1VORCBNQVJLIFVQUEVSIEhBTEY7TG07MDtMOzs7OztOOzs7OzsKKzMwMzU7VkVSVElDQUwgS0FOQSBSRVBFQVQgTUFSSyBMT1dFUiBIQUxGO0xtOzA7TDs7Ozs7Tjs7Ozs7CiszMDM2O0NJUkNMRUQgUE9TVEFMIE1BUks7U287MDtPTjs8Y29tcGF0PiAzMDEyOzs7O047Ozs7OworMzAzNztJREVPR1JBUEhJQyBURUxFR1JBUEggTElORSBGRUVEIFNFUEFSQVRPUiBTWU1CT0w7U287MDtPTjs7Ozs7Tjs7Ozs7CiszMDM4O0hBTkdaSE9VIE5VTUVSQUwgVEVOO05sOzA7TDs8Y29tcGF0PiA1MzQxOzs7MTA7Tjs7Ozs7CiszMDM5O0hBTkdaSE9VIE5VTUVSQUwgVFdFTlRZO05sOzA7TDs8Y29tcGF0PiA1MzQ0Ozs7MjA7Tjs7Ozs7CiszMDNBO0hBTkdaSE9VIE5VTUVSQUwgVEhJUlRZO05sOzA7TDs8Y29tcGF0PiA1MzQ1Ozs7MzA7Tjs7Ozs7CiszMDNCO1ZFUlRJQ0FMIElERU9HUkFQSElDIElURVJBVElPTiBNQVJLO0xtOzA7TDs7Ozs7Tjs7Ozs7CiszMDNDO01BU1UgTUFSSztMbzswO0w7Ozs7O047Ozs7OworMzAzRDtQQVJUIEFMVEVSTkFUSU9OIE1BUks7UG87MDtPTjs7Ozs7Tjs7Ozs7CiszMDNFO0lERU9HUkFQSElDIFZBUklBVElPTiBJTkRJQ0FUT1I7U287MDtPTjs7Ozs7Tjs7Ozs7CiszMDNGO0lERU9HUkFQSElDIEhBTEYgRklMTCBTUEFDRTtTbzswO09OOzs7OztOOzs7OzsKKzMwNDE7SElSQUdBTkEgTEVUVEVSIFNNQUxMIEE7TG87MDtMOzs7OztOOzs7OzsKKzMwNDI7SElSQUdBTkEgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzMwNDM7SElSQUdBTkEgTEVUVEVSIFNNQUxMIEk7TG87MDtMOzs7OztOOzs7OzsKKzMwNDQ7SElSQUdBTkEgTEVUVEVSIEk7TG87MDtMOzs7OztOOzs7OzsKKzMwNDU7SElSQUdBTkEgTEVUVEVSIFNNQUxMIFU7TG87MDtMOzs7OztOOzs7OzsKKzMwNDY7SElSQUdBTkEgTEVUVEVSIFU7TG87MDtMOzs7OztOOzs7OzsKKzMwNDc7SElSQUdBTkEgTEVUVEVSIFNNQUxMIEU7TG87MDtMOzs7OztOOzs7OzsKKzMwNDg7SElSQUdBTkEgTEVUVEVSIEU7TG87MDtMOzs7OztOOzs7OzsKKzMwNDk7SElSQUdBTkEgTEVUVEVSIFNNQUxMIE87TG87MDtMOzs7OztOOzs7OzsKKzMwNEE7SElSQUdBTkEgTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzMwNEI7SElSQUdBTkEgTEVUVEVSIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDRDO0hJUkFHQU5BIExFVFRFUiBHQTtMbzswO0w7MzA0QiAzMDk5Ozs7O047Ozs7OworMzA0RDtISVJBR0FOQSBMRVRURVIgS0k7TG87MDtMOzs7OztOOzs7OzsKKzMwNEU7SElSQUdBTkEgTEVUVEVSIEdJO0xvOzA7TDszMDREIDMwOTk7Ozs7Tjs7Ozs7CiszMDRGO0hJUkFHQU5BIExFVFRFUiBLVTtMbzswO0w7Ozs7O047Ozs7OworMzA1MDtISVJBR0FOQSBMRVRURVIgR1U7TG87MDtMOzMwNEYgMzA5OTs7OztOOzs7OzsKKzMwNTE7SElSQUdBTkEgTEVUVEVSIEtFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDUyO0hJUkFHQU5BIExFVFRFUiBHRTtMbzswO0w7MzA1MSAzMDk5Ozs7O047Ozs7OworMzA1MztISVJBR0FOQSBMRVRURVIgS087TG87MDtMOzs7OztOOzs7OzsKKzMwNTQ7SElSQUdBTkEgTEVUVEVSIEdPO0xvOzA7TDszMDUzIDMwOTk7Ozs7Tjs7Ozs7CiszMDU1O0hJUkFHQU5BIExFVFRFUiBTQTtMbzswO0w7Ozs7O047Ozs7OworMzA1NjtISVJBR0FOQSBMRVRURVIgWkE7TG87MDtMOzMwNTUgMzA5OTs7OztOOzs7OzsKKzMwNTc7SElSQUdBTkEgTEVUVEVSIFNJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDU4O0hJUkFHQU5BIExFVFRFUiBaSTtMbzswO0w7MzA1NyAzMDk5Ozs7O047Ozs7OworMzA1OTtISVJBR0FOQSBMRVRURVIgU1U7TG87MDtMOzs7OztOOzs7OzsKKzMwNUE7SElSQUdBTkEgTEVUVEVSIFpVO0xvOzA7TDszMDU5IDMwOTk7Ozs7Tjs7Ozs7CiszMDVCO0hJUkFHQU5BIExFVFRFUiBTRTtMbzswO0w7Ozs7O047Ozs7OworMzA1QztISVJBR0FOQSBMRVRURVIgWkU7TG87MDtMOzMwNUIgMzA5OTs7OztOOzs7OzsKKzMwNUQ7SElSQUdBTkEgTEVUVEVSIFNPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDVFO0hJUkFHQU5BIExFVFRFUiBaTztMbzswO0w7MzA1RCAzMDk5Ozs7O047Ozs7OworMzA1RjtISVJBR0FOQSBMRVRURVIgVEE7TG87MDtMOzs7OztOOzs7OzsKKzMwNjA7SElSQUdBTkEgTEVUVEVSIERBO0xvOzA7TDszMDVGIDMwOTk7Ozs7Tjs7Ozs7CiszMDYxO0hJUkFHQU5BIExFVFRFUiBUSTtMbzswO0w7Ozs7O047Ozs7OworMzA2MjtISVJBR0FOQSBMRVRURVIgREk7TG87MDtMOzMwNjEgMzA5OTs7OztOOzs7OzsKKzMwNjM7SElSQUdBTkEgTEVUVEVSIFNNQUxMIFRVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDY0O0hJUkFHQU5BIExFVFRFUiBUVTtMbzswO0w7Ozs7O047Ozs7OworMzA2NTtISVJBR0FOQSBMRVRURVIgRFU7TG87MDtMOzMwNjQgMzA5OTs7OztOOzs7OzsKKzMwNjY7SElSQUdBTkEgTEVUVEVSIFRFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDY3O0hJUkFHQU5BIExFVFRFUiBERTtMbzswO0w7MzA2NiAzMDk5Ozs7O047Ozs7OworMzA2ODtISVJBR0FOQSBMRVRURVIgVE87TG87MDtMOzs7OztOOzs7OzsKKzMwNjk7SElSQUdBTkEgTEVUVEVSIERPO0xvOzA7TDszMDY4IDMwOTk7Ozs7Tjs7Ozs7CiszMDZBO0hJUkFHQU5BIExFVFRFUiBOQTtMbzswO0w7Ozs7O047Ozs7OworMzA2QjtISVJBR0FOQSBMRVRURVIgTkk7TG87MDtMOzs7OztOOzs7OzsKKzMwNkM7SElSQUdBTkEgTEVUVEVSIE5VO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDZEO0hJUkFHQU5BIExFVFRFUiBORTtMbzswO0w7Ozs7O047Ozs7OworMzA2RTtISVJBR0FOQSBMRVRURVIgTk87TG87MDtMOzs7OztOOzs7OzsKKzMwNkY7SElSQUdBTkEgTEVUVEVSIEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDcwO0hJUkFHQU5BIExFVFRFUiBCQTtMbzswO0w7MzA2RiAzMDk5Ozs7O047Ozs7OworMzA3MTtISVJBR0FOQSBMRVRURVIgUEE7TG87MDtMOzMwNkYgMzA5QTs7OztOOzs7OzsKKzMwNzI7SElSQUdBTkEgTEVUVEVSIEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDczO0hJUkFHQU5BIExFVFRFUiBCSTtMbzswO0w7MzA3MiAzMDk5Ozs7O047Ozs7OworMzA3NDtISVJBR0FOQSBMRVRURVIgUEk7TG87MDtMOzMwNzIgMzA5QTs7OztOOzs7OzsKKzMwNzU7SElSQUdBTkEgTEVUVEVSIEhVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDc2O0hJUkFHQU5BIExFVFRFUiBCVTtMbzswO0w7MzA3NSAzMDk5Ozs7O047Ozs7OworMzA3NztISVJBR0FOQSBMRVRURVIgUFU7TG87MDtMOzMwNzUgMzA5QTs7OztOOzs7OzsKKzMwNzg7SElSQUdBTkEgTEVUVEVSIEhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDc5O0hJUkFHQU5BIExFVFRFUiBCRTtMbzswO0w7MzA3OCAzMDk5Ozs7O047Ozs7OworMzA3QTtISVJBR0FOQSBMRVRURVIgUEU7TG87MDtMOzMwNzggMzA5QTs7OztOOzs7OzsKKzMwN0I7SElSQUdBTkEgTEVUVEVSIEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDdDO0hJUkFHQU5BIExFVFRFUiBCTztMbzswO0w7MzA3QiAzMDk5Ozs7O047Ozs7OworMzA3RDtISVJBR0FOQSBMRVRURVIgUE87TG87MDtMOzMwN0IgMzA5QTs7OztOOzs7OzsKKzMwN0U7SElSQUdBTkEgTEVUVEVSIE1BO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDdGO0hJUkFHQU5BIExFVFRFUiBNSTtMbzswO0w7Ozs7O047Ozs7OworMzA4MDtISVJBR0FOQSBMRVRURVIgTVU7TG87MDtMOzs7OztOOzs7OzsKKzMwODE7SElSQUdBTkEgTEVUVEVSIE1FO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDgyO0hJUkFHQU5BIExFVFRFUiBNTztMbzswO0w7Ozs7O047Ozs7OworMzA4MztISVJBR0FOQSBMRVRURVIgU01BTEwgWUE7TG87MDtMOzs7OztOOzs7OzsKKzMwODQ7SElSQUdBTkEgTEVUVEVSIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDg1O0hJUkFHQU5BIExFVFRFUiBTTUFMTCBZVTtMbzswO0w7Ozs7O047Ozs7OworMzA4NjtISVJBR0FOQSBMRVRURVIgWVU7TG87MDtMOzs7OztOOzs7OzsKKzMwODc7SElSQUdBTkEgTEVUVEVSIFNNQUxMIFlPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDg4O0hJUkFHQU5BIExFVFRFUiBZTztMbzswO0w7Ozs7O047Ozs7OworMzA4OTtISVJBR0FOQSBMRVRURVIgUkE7TG87MDtMOzs7OztOOzs7OzsKKzMwOEE7SElSQUdBTkEgTEVUVEVSIFJJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDhCO0hJUkFHQU5BIExFVFRFUiBSVTtMbzswO0w7Ozs7O047Ozs7OworMzA4QztISVJBR0FOQSBMRVRURVIgUkU7TG87MDtMOzs7OztOOzs7OzsKKzMwOEQ7SElSQUdBTkEgTEVUVEVSIFJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDhFO0hJUkFHQU5BIExFVFRFUiBTTUFMTCBXQTtMbzswO0w7Ozs7O047Ozs7OworMzA4RjtISVJBR0FOQSBMRVRURVIgV0E7TG87MDtMOzs7OztOOzs7OzsKKzMwOTA7SElSQUdBTkEgTEVUVEVSIFdJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMDkxO0hJUkFHQU5BIExFVFRFUiBXRTtMbzswO0w7Ozs7O047Ozs7OworMzA5MjtISVJBR0FOQSBMRVRURVIgV087TG87MDtMOzs7OztOOzs7OzsKKzMwOTM7SElSQUdBTkEgTEVUVEVSIE47TG87MDtMOzs7OztOOzs7OzsKKzMwOTQ7SElSQUdBTkEgTEVUVEVSIFZVO0xvOzA7TDszMDQ2IDMwOTk7Ozs7Tjs7Ozs7CiszMDk1O0hJUkFHQU5BIExFVFRFUiBTTUFMTCBLQTtMbzswO0w7Ozs7O047Ozs7OworMzA5NjtISVJBR0FOQSBMRVRURVIgU01BTEwgS0U7TG87MDtMOzs7OztOOzs7OzsKKzMwOTk7Q09NQklOSU5HIEtBVEFLQU5BLUhJUkFHQU5BIFZPSUNFRCBTT1VORCBNQVJLO01uOzg7TlNNOzs7OztOO05PTi1TUEFDSU5HIEtBVEFLQU5BLUhJUkFHQU5BIFZPSUNFRCBTT1VORCBNQVJLOzs7OworMzA5QTtDT01CSU5JTkcgS0FUQUtBTkEtSElSQUdBTkEgU0VNSS1WT0lDRUQgU09VTkQgTUFSSztNbjs4O05TTTs7Ozs7TjtOT04tU1BBQ0lORyBLQVRBS0FOQS1ISVJBR0FOQSBTRU1JLVZPSUNFRCBTT1VORCBNQVJLOzs7OworMzA5QjtLQVRBS0FOQS1ISVJBR0FOQSBWT0lDRUQgU09VTkQgTUFSSztTazswO09OOzxjb21wYXQ+IDAwMjAgMzA5OTs7OztOOzs7OzsKKzMwOUM7S0FUQUtBTkEtSElSQUdBTkEgU0VNSS1WT0lDRUQgU09VTkQgTUFSSztTazswO09OOzxjb21wYXQ+IDAwMjAgMzA5QTs7OztOOzs7OzsKKzMwOUQ7SElSQUdBTkEgSVRFUkFUSU9OIE1BUks7TG07MDtMOzs7OztOOzs7OzsKKzMwOUU7SElSQUdBTkEgVk9JQ0VEIElURVJBVElPTiBNQVJLO0xtOzA7TDszMDlEIDMwOTk7Ozs7Tjs7Ozs7CiszMDlGO0hJUkFHQU5BIERJR1JBUEggWU9SSTtMbzswO0w7PHZlcnRpY2FsPiAzMDg4IDMwOEE7Ozs7Tjs7Ozs7CiszMEEwO0tBVEFLQU5BLUhJUkFHQU5BIERPVUJMRSBIWVBIRU47UGQ7MDtPTjs7Ozs7Tjs7Ozs7CiszMEExO0tBVEFLQU5BIExFVFRFUiBTTUFMTCBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEEyO0tBVEFLQU5BIExFVFRFUiBBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEEzO0tBVEFLQU5BIExFVFRFUiBTTUFMTCBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEE0O0tBVEFLQU5BIExFVFRFUiBJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEE1O0tBVEFLQU5BIExFVFRFUiBTTUFMTCBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEE2O0tBVEFLQU5BIExFVFRFUiBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEE3O0tBVEFLQU5BIExFVFRFUiBTTUFMTCBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEE4O0tBVEFLQU5BIExFVFRFUiBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEE5O0tBVEFLQU5BIExFVFRFUiBTTUFMTCBPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEFBO0tBVEFLQU5BIExFVFRFUiBPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEFCO0tBVEFLQU5BIExFVFRFUiBLQTtMbzswO0w7Ozs7O047Ozs7OworMzBBQztLQVRBS0FOQSBMRVRURVIgR0E7TG87MDtMOzMwQUIgMzA5OTs7OztOOzs7OzsKKzMwQUQ7S0FUQUtBTkEgTEVUVEVSIEtJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEFFO0tBVEFLQU5BIExFVFRFUiBHSTtMbzswO0w7MzBBRCAzMDk5Ozs7O047Ozs7OworMzBBRjtLQVRBS0FOQSBMRVRURVIgS1U7TG87MDtMOzs7OztOOzs7OzsKKzMwQjA7S0FUQUtBTkEgTEVUVEVSIEdVO0xvOzA7TDszMEFGIDMwOTk7Ozs7Tjs7Ozs7CiszMEIxO0tBVEFLQU5BIExFVFRFUiBLRTtMbzswO0w7Ozs7O047Ozs7OworMzBCMjtLQVRBS0FOQSBMRVRURVIgR0U7TG87MDtMOzMwQjEgMzA5OTs7OztOOzs7OzsKKzMwQjM7S0FUQUtBTkEgTEVUVEVSIEtPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEI0O0tBVEFLQU5BIExFVFRFUiBHTztMbzswO0w7MzBCMyAzMDk5Ozs7O047Ozs7OworMzBCNTtLQVRBS0FOQSBMRVRURVIgU0E7TG87MDtMOzs7OztOOzs7OzsKKzMwQjY7S0FUQUtBTkEgTEVUVEVSIFpBO0xvOzA7TDszMEI1IDMwOTk7Ozs7Tjs7Ozs7CiszMEI3O0tBVEFLQU5BIExFVFRFUiBTSTtMbzswO0w7Ozs7O047Ozs7OworMzBCODtLQVRBS0FOQSBMRVRURVIgWkk7TG87MDtMOzMwQjcgMzA5OTs7OztOOzs7OzsKKzMwQjk7S0FUQUtBTkEgTEVUVEVSIFNVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEJBO0tBVEFLQU5BIExFVFRFUiBaVTtMbzswO0w7MzBCOSAzMDk5Ozs7O047Ozs7OworMzBCQjtLQVRBS0FOQSBMRVRURVIgU0U7TG87MDtMOzs7OztOOzs7OzsKKzMwQkM7S0FUQUtBTkEgTEVUVEVSIFpFO0xvOzA7TDszMEJCIDMwOTk7Ozs7Tjs7Ozs7CiszMEJEO0tBVEFLQU5BIExFVFRFUiBTTztMbzswO0w7Ozs7O047Ozs7OworMzBCRTtLQVRBS0FOQSBMRVRURVIgWk87TG87MDtMOzMwQkQgMzA5OTs7OztOOzs7OzsKKzMwQkY7S0FUQUtBTkEgTEVUVEVSIFRBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEMwO0tBVEFLQU5BIExFVFRFUiBEQTtMbzswO0w7MzBCRiAzMDk5Ozs7O047Ozs7OworMzBDMTtLQVRBS0FOQSBMRVRURVIgVEk7TG87MDtMOzs7OztOOzs7OzsKKzMwQzI7S0FUQUtBTkEgTEVUVEVSIERJO0xvOzA7TDszMEMxIDMwOTk7Ozs7Tjs7Ozs7CiszMEMzO0tBVEFLQU5BIExFVFRFUiBTTUFMTCBUVTtMbzswO0w7Ozs7O047Ozs7OworMzBDNDtLQVRBS0FOQSBMRVRURVIgVFU7TG87MDtMOzs7OztOOzs7OzsKKzMwQzU7S0FUQUtBTkEgTEVUVEVSIERVO0xvOzA7TDszMEM0IDMwOTk7Ozs7Tjs7Ozs7CiszMEM2O0tBVEFLQU5BIExFVFRFUiBURTtMbzswO0w7Ozs7O047Ozs7OworMzBDNztLQVRBS0FOQSBMRVRURVIgREU7TG87MDtMOzMwQzYgMzA5OTs7OztOOzs7OzsKKzMwQzg7S0FUQUtBTkEgTEVUVEVSIFRPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEM5O0tBVEFLQU5BIExFVFRFUiBETztMbzswO0w7MzBDOCAzMDk5Ozs7O047Ozs7OworMzBDQTtLQVRBS0FOQSBMRVRURVIgTkE7TG87MDtMOzs7OztOOzs7OzsKKzMwQ0I7S0FUQUtBTkEgTEVUVEVSIE5JO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMENDO0tBVEFLQU5BIExFVFRFUiBOVTtMbzswO0w7Ozs7O047Ozs7OworMzBDRDtLQVRBS0FOQSBMRVRURVIgTkU7TG87MDtMOzs7OztOOzs7OzsKKzMwQ0U7S0FUQUtBTkEgTEVUVEVSIE5PO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMENGO0tBVEFLQU5BIExFVFRFUiBIQTtMbzswO0w7Ozs7O047Ozs7OworMzBEMDtLQVRBS0FOQSBMRVRURVIgQkE7TG87MDtMOzMwQ0YgMzA5OTs7OztOOzs7OzsKKzMwRDE7S0FUQUtBTkEgTEVUVEVSIFBBO0xvOzA7TDszMENGIDMwOUE7Ozs7Tjs7Ozs7CiszMEQyO0tBVEFLQU5BIExFVFRFUiBISTtMbzswO0w7Ozs7O047Ozs7OworMzBEMztLQVRBS0FOQSBMRVRURVIgQkk7TG87MDtMOzMwRDIgMzA5OTs7OztOOzs7OzsKKzMwRDQ7S0FUQUtBTkEgTEVUVEVSIFBJO0xvOzA7TDszMEQyIDMwOUE7Ozs7Tjs7Ozs7CiszMEQ1O0tBVEFLQU5BIExFVFRFUiBIVTtMbzswO0w7Ozs7O047Ozs7OworMzBENjtLQVRBS0FOQSBMRVRURVIgQlU7TG87MDtMOzMwRDUgMzA5OTs7OztOOzs7OzsKKzMwRDc7S0FUQUtBTkEgTEVUVEVSIFBVO0xvOzA7TDszMEQ1IDMwOUE7Ozs7Tjs7Ozs7CiszMEQ4O0tBVEFLQU5BIExFVFRFUiBIRTtMbzswO0w7Ozs7O047Ozs7OworMzBEOTtLQVRBS0FOQSBMRVRURVIgQkU7TG87MDtMOzMwRDggMzA5OTs7OztOOzs7OzsKKzMwREE7S0FUQUtBTkEgTEVUVEVSIFBFO0xvOzA7TDszMEQ4IDMwOUE7Ozs7Tjs7Ozs7CiszMERCO0tBVEFLQU5BIExFVFRFUiBITztMbzswO0w7Ozs7O047Ozs7OworMzBEQztLQVRBS0FOQSBMRVRURVIgQk87TG87MDtMOzMwREIgMzA5OTs7OztOOzs7OzsKKzMwREQ7S0FUQUtBTkEgTEVUVEVSIFBPO0xvOzA7TDszMERCIDMwOUE7Ozs7Tjs7Ozs7CiszMERFO0tBVEFLQU5BIExFVFRFUiBNQTtMbzswO0w7Ozs7O047Ozs7OworMzBERjtLQVRBS0FOQSBMRVRURVIgTUk7TG87MDtMOzs7OztOOzs7OzsKKzMwRTA7S0FUQUtBTkEgTEVUVEVSIE1VO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEUxO0tBVEFLQU5BIExFVFRFUiBNRTtMbzswO0w7Ozs7O047Ozs7OworMzBFMjtLQVRBS0FOQSBMRVRURVIgTU87TG87MDtMOzs7OztOOzs7OzsKKzMwRTM7S0FUQUtBTkEgTEVUVEVSIFNNQUxMIFlBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEU0O0tBVEFLQU5BIExFVFRFUiBZQTtMbzswO0w7Ozs7O047Ozs7OworMzBFNTtLQVRBS0FOQSBMRVRURVIgU01BTEwgWVU7TG87MDtMOzs7OztOOzs7OzsKKzMwRTY7S0FUQUtBTkEgTEVUVEVSIFlVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEU3O0tBVEFLQU5BIExFVFRFUiBTTUFMTCBZTztMbzswO0w7Ozs7O047Ozs7OworMzBFODtLQVRBS0FOQSBMRVRURVIgWU87TG87MDtMOzs7OztOOzs7OzsKKzMwRTk7S0FUQUtBTkEgTEVUVEVSIFJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEVBO0tBVEFLQU5BIExFVFRFUiBSSTtMbzswO0w7Ozs7O047Ozs7OworMzBFQjtLQVRBS0FOQSBMRVRURVIgUlU7TG87MDtMOzs7OztOOzs7OzsKKzMwRUM7S0FUQUtBTkEgTEVUVEVSIFJFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEVEO0tBVEFLQU5BIExFVFRFUiBSTztMbzswO0w7Ozs7O047Ozs7OworMzBFRTtLQVRBS0FOQSBMRVRURVIgU01BTEwgV0E7TG87MDtMOzs7OztOOzs7OzsKKzMwRUY7S0FUQUtBTkEgTEVUVEVSIFdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEYwO0tBVEFLQU5BIExFVFRFUiBXSTtMbzswO0w7Ozs7O047Ozs7OworMzBGMTtLQVRBS0FOQSBMRVRURVIgV0U7TG87MDtMOzs7OztOOzs7OzsKKzMwRjI7S0FUQUtBTkEgTEVUVEVSIFdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEYzO0tBVEFLQU5BIExFVFRFUiBOO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEY0O0tBVEFLQU5BIExFVFRFUiBWVTtMbzswO0w7MzBBNiAzMDk5Ozs7O047Ozs7OworMzBGNTtLQVRBS0FOQSBMRVRURVIgU01BTEwgS0E7TG87MDtMOzs7OztOOzs7OzsKKzMwRjY7S0FUQUtBTkEgTEVUVEVSIFNNQUxMIEtFO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMEY3O0tBVEFLQU5BIExFVFRFUiBWQTtMbzswO0w7MzBFRiAzMDk5Ozs7O047Ozs7OworMzBGODtLQVRBS0FOQSBMRVRURVIgVkk7TG87MDtMOzMwRjAgMzA5OTs7OztOOzs7OzsKKzMwRjk7S0FUQUtBTkEgTEVUVEVSIFZFO0xvOzA7TDszMEYxIDMwOTk7Ozs7Tjs7Ozs7CiszMEZBO0tBVEFLQU5BIExFVFRFUiBWTztMbzswO0w7MzBGMiAzMDk5Ozs7O047Ozs7OworMzBGQjtLQVRBS0FOQSBNSURETEUgRE9UO1BjOzA7T047Ozs7O047Ozs7OworMzBGQztLQVRBS0FOQS1ISVJBR0FOQSBQUk9MT05HRUQgU09VTkQgTUFSSztMbTswO0w7Ozs7O047Ozs7OworMzBGRDtLQVRBS0FOQSBJVEVSQVRJT04gTUFSSztMbTswO0w7Ozs7O047Ozs7OworMzBGRTtLQVRBS0FOQSBWT0lDRUQgSVRFUkFUSU9OIE1BUks7TG07MDtMOzMwRkQgMzA5OTs7OztOOzs7OzsKKzMwRkY7S0FUQUtBTkEgRElHUkFQSCBLT1RPO0xvOzA7TDs8dmVydGljYWw+IDMwQjMgMzBDODs7OztOOzs7OzsKKzMxMDU7Qk9QT01PRk8gTEVUVEVSIEI7TG87MDtMOzs7OztOOzs7OzsKKzMxMDY7Qk9QT01PRk8gTEVUVEVSIFA7TG87MDtMOzs7OztOOzs7OzsKKzMxMDc7Qk9QT01PRk8gTEVUVEVSIE07TG87MDtMOzs7OztOOzs7OzsKKzMxMDg7Qk9QT01PRk8gTEVUVEVSIEY7TG87MDtMOzs7OztOOzs7OzsKKzMxMDk7Qk9QT01PRk8gTEVUVEVSIEQ7TG87MDtMOzs7OztOOzs7OzsKKzMxMEE7Qk9QT01PRk8gTEVUVEVSIFQ7TG87MDtMOzs7OztOOzs7OzsKKzMxMEI7Qk9QT01PRk8gTEVUVEVSIE47TG87MDtMOzs7OztOOzs7OzsKKzMxMEM7Qk9QT01PRk8gTEVUVEVSIEw7TG87MDtMOzs7OztOOzs7OzsKKzMxMEQ7Qk9QT01PRk8gTEVUVEVSIEc7TG87MDtMOzs7OztOOzs7OzsKKzMxMEU7Qk9QT01PRk8gTEVUVEVSIEs7TG87MDtMOzs7OztOOzs7OzsKKzMxMEY7Qk9QT01PRk8gTEVUVEVSIEg7TG87MDtMOzs7OztOOzs7OzsKKzMxMTA7Qk9QT01PRk8gTEVUVEVSIEo7TG87MDtMOzs7OztOOzs7OzsKKzMxMTE7Qk9QT01PRk8gTEVUVEVSIFE7TG87MDtMOzs7OztOOzs7OzsKKzMxMTI7Qk9QT01PRk8gTEVUVEVSIFg7TG87MDtMOzs7OztOOzs7OzsKKzMxMTM7Qk9QT01PRk8gTEVUVEVSIFpIO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMTE0O0JPUE9NT0ZPIExFVFRFUiBDSDtMbzswO0w7Ozs7O047Ozs7OworMzExNTtCT1BPTU9GTyBMRVRURVIgU0g7TG87MDtMOzs7OztOOzs7OzsKKzMxMTY7Qk9QT01PRk8gTEVUVEVSIFI7TG87MDtMOzs7OztOOzs7OzsKKzMxMTc7Qk9QT01PRk8gTEVUVEVSIFo7TG87MDtMOzs7OztOOzs7OzsKKzMxMTg7Qk9QT01PRk8gTEVUVEVSIEM7TG87MDtMOzs7OztOOzs7OzsKKzMxMTk7Qk9QT01PRk8gTEVUVEVSIFM7TG87MDtMOzs7OztOOzs7OzsKKzMxMUE7Qk9QT01PRk8gTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzMxMUI7Qk9QT01PRk8gTEVUVEVSIE87TG87MDtMOzs7OztOOzs7OzsKKzMxMUM7Qk9QT01PRk8gTEVUVEVSIEU7TG87MDtMOzs7OztOOzs7OzsKKzMxMUQ7Qk9QT01PRk8gTEVUVEVSIEVIO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMTFFO0JPUE9NT0ZPIExFVFRFUiBBSTtMbzswO0w7Ozs7O047Ozs7OworMzExRjtCT1BPTU9GTyBMRVRURVIgRUk7TG87MDtMOzs7OztOOzs7OzsKKzMxMjA7Qk9QT01PRk8gTEVUVEVSIEFVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMTIxO0JPUE9NT0ZPIExFVFRFUiBPVTtMbzswO0w7Ozs7O047Ozs7OworMzEyMjtCT1BPTU9GTyBMRVRURVIgQU47TG87MDtMOzs7OztOOzs7OzsKKzMxMjM7Qk9QT01PRk8gTEVUVEVSIEVOO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMTI0O0JPUE9NT0ZPIExFVFRFUiBBTkc7TG87MDtMOzs7OztOOzs7OzsKKzMxMjU7Qk9QT01PRk8gTEVUVEVSIEVORztMbzswO0w7Ozs7O047Ozs7OworMzEyNjtCT1BPTU9GTyBMRVRURVIgRVI7TG87MDtMOzs7OztOOzs7OzsKKzMxMjc7Qk9QT01PRk8gTEVUVEVSIEk7TG87MDtMOzs7OztOOzs7OzsKKzMxMjg7Qk9QT01PRk8gTEVUVEVSIFU7TG87MDtMOzs7OztOOzs7OzsKKzMxMjk7Qk9QT01PRk8gTEVUVEVSIElVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMTJBO0JPUE9NT0ZPIExFVFRFUiBWO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMTJCO0JPUE9NT0ZPIExFVFRFUiBORztMbzswO0w7Ozs7O047Ozs7OworMzEyQztCT1BPTU9GTyBMRVRURVIgR047TG87MDtMOzs7OztOOzs7OzsKKzMxMzE7SEFOR1VMIExFVFRFUiBLSVlFT0s7TG87MDtMOzxjb21wYXQ+IDExMDA7Ozs7TjtIQU5HVUwgTEVUVEVSIEdJWUVPRzs7OzsKKzMxMzI7SEFOR1VMIExFVFRFUiBTU0FOR0tJWUVPSztMbzswO0w7PGNvbXBhdD4gMTEwMTs7OztOO0hBTkdVTCBMRVRURVIgU1NBTkcgR0lZRU9HOzs7OworMzEzMztIQU5HVUwgTEVUVEVSIEtJWUVPSy1TSU9TO0xvOzA7TDs8Y29tcGF0PiAxMUFBOzs7O047SEFOR1VMIExFVFRFUiBHSVlFT0cgU0lPUzs7OzsKKzMxMzQ7SEFOR1VMIExFVFRFUiBOSUVVTjtMbzswO0w7PGNvbXBhdD4gMTEwMjs7OztOOzs7OzsKKzMxMzU7SEFOR1VMIExFVFRFUiBOSUVVTi1DSUVVQztMbzswO0w7PGNvbXBhdD4gMTFBQzs7OztOO0hBTkdVTCBMRVRURVIgTklFVU4gSklFVUo7Ozs7CiszMTM2O0hBTkdVTCBMRVRURVIgTklFVU4tSElFVUg7TG87MDtMOzxjb21wYXQ+IDExQUQ7Ozs7TjtIQU5HVUwgTEVUVEVSIE5JRVVOIEhJRVVIOzs7OworMzEzNztIQU5HVUwgTEVUVEVSIFRJS0VVVDtMbzswO0w7PGNvbXBhdD4gMTEwMzs7OztOO0hBTkdVTCBMRVRURVIgRElHRVVEOzs7OworMzEzODtIQU5HVUwgTEVUVEVSIFNTQU5HVElLRVVUO0xvOzA7TDs8Y29tcGF0PiAxMTA0Ozs7O047SEFOR1VMIExFVFRFUiBTU0FORyBESUdFVUQ7Ozs7CiszMTM5O0hBTkdVTCBMRVRURVIgUklFVUw7TG87MDtMOzxjb21wYXQ+IDExMDU7Ozs7TjtIQU5HVUwgTEVUVEVSIExJRVVMOzs7OworMzEzQTtIQU5HVUwgTEVUVEVSIFJJRVVMLUtJWUVPSztMbzswO0w7PGNvbXBhdD4gMTFCMDs7OztOO0hBTkdVTCBMRVRURVIgTElFVUwgR0lZRU9HOzs7OworMzEzQjtIQU5HVUwgTEVUVEVSIFJJRVVMLU1JRVVNO0xvOzA7TDs8Y29tcGF0PiAxMUIxOzs7O047SEFOR1VMIExFVFRFUiBMSUVVTCBNSUVVTTs7OzsKKzMxM0M7SEFOR1VMIExFVFRFUiBSSUVVTC1QSUVVUDtMbzswO0w7PGNvbXBhdD4gMTFCMjs7OztOO0hBTkdVTCBMRVRURVIgTElFVUwgQklFVUI7Ozs7CiszMTNEO0hBTkdVTCBMRVRURVIgUklFVUwtU0lPUztMbzswO0w7PGNvbXBhdD4gMTFCMzs7OztOO0hBTkdVTCBMRVRURVIgTElFVUwgU0lPUzs7OzsKKzMxM0U7SEFOR1VMIExFVFRFUiBSSUVVTC1USElFVVRIO0xvOzA7TDs8Y29tcGF0PiAxMUI0Ozs7O047SEFOR1VMIExFVFRFUiBMSUVVTCBUSUVVVDs7OzsKKzMxM0Y7SEFOR1VMIExFVFRFUiBSSUVVTC1QSElFVVBIO0xvOzA7TDs8Y29tcGF0PiAxMUI1Ozs7O047SEFOR1VMIExFVFRFUiBMSUVVTCBQSUVVUDs7OzsKKzMxNDA7SEFOR1VMIExFVFRFUiBSSUVVTC1ISUVVSDtMbzswO0w7PGNvbXBhdD4gMTExQTs7OztOO0hBTkdVTCBMRVRURVIgTElFVUwgSElFVUg7Ozs7CiszMTQxO0hBTkdVTCBMRVRURVIgTUlFVU07TG87MDtMOzxjb21wYXQ+IDExMDY7Ozs7Tjs7Ozs7CiszMTQyO0hBTkdVTCBMRVRURVIgUElFVVA7TG87MDtMOzxjb21wYXQ+IDExMDc7Ozs7TjtIQU5HVUwgTEVUVEVSIEJJRVVCOzs7OworMzE0MztIQU5HVUwgTEVUVEVSIFNTQU5HUElFVVA7TG87MDtMOzxjb21wYXQ+IDExMDg7Ozs7TjtIQU5HVUwgTEVUVEVSIFNTQU5HIEJJRVVCOzs7OworMzE0NDtIQU5HVUwgTEVUVEVSIFBJRVVQLVNJT1M7TG87MDtMOzxjb21wYXQ+IDExMjE7Ozs7TjtIQU5HVUwgTEVUVEVSIEJJRVVCIFNJT1M7Ozs7CiszMTQ1O0hBTkdVTCBMRVRURVIgU0lPUztMbzswO0w7PGNvbXBhdD4gMTEwOTs7OztOOzs7OzsKKzMxNDY7SEFOR1VMIExFVFRFUiBTU0FOR1NJT1M7TG87MDtMOzxjb21wYXQ+IDExMEE7Ozs7TjtIQU5HVUwgTEVUVEVSIFNTQU5HIFNJT1M7Ozs7CiszMTQ3O0hBTkdVTCBMRVRURVIgSUVVTkc7TG87MDtMOzxjb21wYXQ+IDExMEI7Ozs7Tjs7Ozs7CiszMTQ4O0hBTkdVTCBMRVRURVIgQ0lFVUM7TG87MDtMOzxjb21wYXQ+IDExMEM7Ozs7TjtIQU5HVUwgTEVUVEVSIEpJRVVKOzs7OworMzE0OTtIQU5HVUwgTEVUVEVSIFNTQU5HQ0lFVUM7TG87MDtMOzxjb21wYXQ+IDExMEQ7Ozs7TjtIQU5HVUwgTEVUVEVSIFNTQU5HIEpJRVVKOzs7OworMzE0QTtIQU5HVUwgTEVUVEVSIENISUVVQ0g7TG87MDtMOzxjb21wYXQ+IDExMEU7Ozs7TjtIQU5HVUwgTEVUVEVSIENJRVVDOzs7OworMzE0QjtIQU5HVUwgTEVUVEVSIEtISUVVS0g7TG87MDtMOzxjb21wYXQ+IDExMEY7Ozs7TjtIQU5HVUwgTEVUVEVSIEtJWUVPSzs7OzsKKzMxNEM7SEFOR1VMIExFVFRFUiBUSElFVVRIO0xvOzA7TDs8Y29tcGF0PiAxMTEwOzs7O047SEFOR1VMIExFVFRFUiBUSUVVVDs7OzsKKzMxNEQ7SEFOR1VMIExFVFRFUiBQSElFVVBIO0xvOzA7TDs8Y29tcGF0PiAxMTExOzs7O047SEFOR1VMIExFVFRFUiBQSUVVUDs7OzsKKzMxNEU7SEFOR1VMIExFVFRFUiBISUVVSDtMbzswO0w7PGNvbXBhdD4gMTExMjs7OztOOzs7OzsKKzMxNEY7SEFOR1VMIExFVFRFUiBBO0xvOzA7TDs8Y29tcGF0PiAxMTYxOzs7O047Ozs7OworMzE1MDtIQU5HVUwgTEVUVEVSIEFFO0xvOzA7TDs8Y29tcGF0PiAxMTYyOzs7O047Ozs7OworMzE1MTtIQU5HVUwgTEVUVEVSIFlBO0xvOzA7TDs8Y29tcGF0PiAxMTYzOzs7O047Ozs7OworMzE1MjtIQU5HVUwgTEVUVEVSIFlBRTtMbzswO0w7PGNvbXBhdD4gMTE2NDs7OztOOzs7OzsKKzMxNTM7SEFOR1VMIExFVFRFUiBFTztMbzswO0w7PGNvbXBhdD4gMTE2NTs7OztOOzs7OzsKKzMxNTQ7SEFOR1VMIExFVFRFUiBFO0xvOzA7TDs8Y29tcGF0PiAxMTY2Ozs7O047Ozs7OworMzE1NTtIQU5HVUwgTEVUVEVSIFlFTztMbzswO0w7PGNvbXBhdD4gMTE2Nzs7OztOOzs7OzsKKzMxNTY7SEFOR1VMIExFVFRFUiBZRTtMbzswO0w7PGNvbXBhdD4gMTE2ODs7OztOOzs7OzsKKzMxNTc7SEFOR1VMIExFVFRFUiBPO0xvOzA7TDs8Y29tcGF0PiAxMTY5Ozs7O047Ozs7OworMzE1ODtIQU5HVUwgTEVUVEVSIFdBO0xvOzA7TDs8Y29tcGF0PiAxMTZBOzs7O047Ozs7OworMzE1OTtIQU5HVUwgTEVUVEVSIFdBRTtMbzswO0w7PGNvbXBhdD4gMTE2Qjs7OztOOzs7OzsKKzMxNUE7SEFOR1VMIExFVFRFUiBPRTtMbzswO0w7PGNvbXBhdD4gMTE2Qzs7OztOOzs7OzsKKzMxNUI7SEFOR1VMIExFVFRFUiBZTztMbzswO0w7PGNvbXBhdD4gMTE2RDs7OztOOzs7OzsKKzMxNUM7SEFOR1VMIExFVFRFUiBVO0xvOzA7TDs8Y29tcGF0PiAxMTZFOzs7O047Ozs7OworMzE1RDtIQU5HVUwgTEVUVEVSIFdFTztMbzswO0w7PGNvbXBhdD4gMTE2Rjs7OztOOzs7OzsKKzMxNUU7SEFOR1VMIExFVFRFUiBXRTtMbzswO0w7PGNvbXBhdD4gMTE3MDs7OztOOzs7OzsKKzMxNUY7SEFOR1VMIExFVFRFUiBXSTtMbzswO0w7PGNvbXBhdD4gMTE3MTs7OztOOzs7OzsKKzMxNjA7SEFOR1VMIExFVFRFUiBZVTtMbzswO0w7PGNvbXBhdD4gMTE3Mjs7OztOOzs7OzsKKzMxNjE7SEFOR1VMIExFVFRFUiBFVTtMbzswO0w7PGNvbXBhdD4gMTE3Mzs7OztOOzs7OzsKKzMxNjI7SEFOR1VMIExFVFRFUiBZSTtMbzswO0w7PGNvbXBhdD4gMTE3NDs7OztOOzs7OzsKKzMxNjM7SEFOR1VMIExFVFRFUiBJO0xvOzA7TDs8Y29tcGF0PiAxMTc1Ozs7O047Ozs7OworMzE2NDtIQU5HVUwgRklMTEVSO0xvOzA7TDs8Y29tcGF0PiAxMTYwOzs7O047SEFOR1VMIENBRSBPTTs7OzsKKzMxNjU7SEFOR1VMIExFVFRFUiBTU0FOR05JRVVOO0xvOzA7TDs8Y29tcGF0PiAxMTE0Ozs7O047SEFOR1VMIExFVFRFUiBTU0FORyBOSUVVTjs7OzsKKzMxNjY7SEFOR1VMIExFVFRFUiBOSUVVTi1USUtFVVQ7TG87MDtMOzxjb21wYXQ+IDExMTU7Ozs7TjtIQU5HVUwgTEVUVEVSIE5JRVVOIERJR0VVRDs7OzsKKzMxNjc7SEFOR1VMIExFVFRFUiBOSUVVTi1TSU9TO0xvOzA7TDs8Y29tcGF0PiAxMUM3Ozs7O047SEFOR1VMIExFVFRFUiBOSUVVTiBTSU9TOzs7OworMzE2ODtIQU5HVUwgTEVUVEVSIE5JRVVOLVBBTlNJT1M7TG87MDtMOzxjb21wYXQ+IDExQzg7Ozs7TjtIQU5HVUwgTEVUVEVSIE5JRVVOIEJBTiBDSEkgRVVNOzs7OworMzE2OTtIQU5HVUwgTEVUVEVSIFJJRVVMLUtJWUVPSy1TSU9TO0xvOzA7TDs8Y29tcGF0PiAxMUNDOzs7O047SEFOR1VMIExFVFRFUiBMSUVVTCBHSVlFT0cgU0lPUzs7OzsKKzMxNkE7SEFOR1VMIExFVFRFUiBSSUVVTC1USUtFVVQ7TG87MDtMOzxjb21wYXQ+IDExQ0U7Ozs7TjtIQU5HVUwgTEVUVEVSIExJRVVMIERJR0VVRDs7OzsKKzMxNkI7SEFOR1VMIExFVFRFUiBSSUVVTC1QSUVVUC1TSU9TO0xvOzA7TDs8Y29tcGF0PiAxMUQzOzs7O047SEFOR1VMIExFVFRFUiBMSUVVTCBCSUVVQiBTSU9TOzs7OworMzE2QztIQU5HVUwgTEVUVEVSIFJJRVVMLVBBTlNJT1M7TG87MDtMOzxjb21wYXQ+IDExRDc7Ozs7TjtIQU5HVUwgTEVUVEVSIExJRVVMIEJBTiBDSEkgRVVNOzs7OworMzE2RDtIQU5HVUwgTEVUVEVSIFJJRVVMLVlFT1JJTkhJRVVIO0xvOzA7TDs8Y29tcGF0PiAxMUQ5Ozs7O047SEFOR1VMIExFVFRFUiBMSUVVTCBZRU9MSU4gSElFVUg7Ozs7CiszMTZFO0hBTkdVTCBMRVRURVIgTUlFVU0tUElFVVA7TG87MDtMOzxjb21wYXQ+IDExMUM7Ozs7TjtIQU5HVUwgTEVUVEVSIE1JRVVNIEJJRVVCOzs7OworMzE2RjtIQU5HVUwgTEVUVEVSIE1JRVVNLVNJT1M7TG87MDtMOzxjb21wYXQ+IDExREQ7Ozs7TjtIQU5HVUwgTEVUVEVSIE1JRVVNIFNJT1M7Ozs7CiszMTcwO0hBTkdVTCBMRVRURVIgTUlFVU0tUEFOU0lPUztMbzswO0w7PGNvbXBhdD4gMTFERjs7OztOO0hBTkdVTCBMRVRURVIgQklFVUIgQkFOIENISSBFVU07Ozs7CiszMTcxO0hBTkdVTCBMRVRURVIgS0FQWUVPVU5NSUVVTTtMbzswO0w7PGNvbXBhdD4gMTExRDs7OztOO0hBTkdVTCBMRVRURVIgTUlFVU0gU1VOIEdZRU9ORyBFVU07Ozs7CiszMTcyO0hBTkdVTCBMRVRURVIgUElFVVAtS0lZRU9LO0xvOzA7TDs8Y29tcGF0PiAxMTFFOzs7O047SEFOR1VMIExFVFRFUiBCSUVVQiBHSVlFT0c7Ozs7CiszMTczO0hBTkdVTCBMRVRURVIgUElFVVAtVElLRVVUO0xvOzA7TDs8Y29tcGF0PiAxMTIwOzs7O047SEFOR1VMIExFVFRFUiBCSUVVQiBESUdFVUQ7Ozs7CiszMTc0O0hBTkdVTCBMRVRURVIgUElFVVAtU0lPUy1LSVlFT0s7TG87MDtMOzxjb21wYXQ+IDExMjI7Ozs7TjtIQU5HVUwgTEVUVEVSIEJJRVVCIFNJT1MgR0lZRU9HOzs7OworMzE3NTtIQU5HVUwgTEVUVEVSIFBJRVVQLVNJT1MtVElLRVVUO0xvOzA7TDs8Y29tcGF0PiAxMTIzOzs7O047SEFOR1VMIExFVFRFUiBCSUVVQiBTSU9TIERJR0VVRDs7OzsKKzMxNzY7SEFOR1VMIExFVFRFUiBQSUVVUC1DSUVVQztMbzswO0w7PGNvbXBhdD4gMTEyNzs7OztOO0hBTkdVTCBMRVRURVIgQklFVUIgSklFVUo7Ozs7CiszMTc3O0hBTkdVTCBMRVRURVIgUElFVVAtVEhJRVVUSDtMbzswO0w7PGNvbXBhdD4gMTEyOTs7OztOO0hBTkdVTCBMRVRURVIgQklFVUIgVElFVVQ7Ozs7CiszMTc4O0hBTkdVTCBMRVRURVIgS0FQWUVPVU5QSUVVUDtMbzswO0w7PGNvbXBhdD4gMTEyQjs7OztOO0hBTkdVTCBMRVRURVIgQklFVUIgU1VOIEdZRU9ORyBFVU07Ozs7CiszMTc5O0hBTkdVTCBMRVRURVIgS0FQWUVPVU5TU0FOR1BJRVVQO0xvOzA7TDs8Y29tcGF0PiAxMTJDOzs7O047SEFOR1VMIExFVFRFUiBTU0FORyBCSUVVQiBTVU4gR1lFT05HIEVVTTs7OzsKKzMxN0E7SEFOR1VMIExFVFRFUiBTSU9TLUtJWUVPSztMbzswO0w7PGNvbXBhdD4gMTEyRDs7OztOO0hBTkdVTCBMRVRURVIgU0lPUyBHSVlFT0c7Ozs7CiszMTdCO0hBTkdVTCBMRVRURVIgU0lPUy1OSUVVTjtMbzswO0w7PGNvbXBhdD4gMTEyRTs7OztOO0hBTkdVTCBMRVRURVIgU0lPUyBOSUVVTjs7OzsKKzMxN0M7SEFOR1VMIExFVFRFUiBTSU9TLVRJS0VVVDtMbzswO0w7PGNvbXBhdD4gMTEyRjs7OztOO0hBTkdVTCBMRVRURVIgU0lPUyBESUdFVUQ7Ozs7CiszMTdEO0hBTkdVTCBMRVRURVIgU0lPUy1QSUVVUDtMbzswO0w7PGNvbXBhdD4gMTEzMjs7OztOO0hBTkdVTCBMRVRURVIgU0lPUyBCSUVVQjs7OzsKKzMxN0U7SEFOR1VMIExFVFRFUiBTSU9TLUNJRVVDO0xvOzA7TDs8Y29tcGF0PiAxMTM2Ozs7O047SEFOR1VMIExFVFRFUiBTSU9TIEpJRVVKOzs7OworMzE3RjtIQU5HVUwgTEVUVEVSIFBBTlNJT1M7TG87MDtMOzxjb21wYXQ+IDExNDA7Ozs7TjtIQU5HVUwgTEVUVEVSIEJBTiBDSEkgRVVNOzs7OworMzE4MDtIQU5HVUwgTEVUVEVSIFNTQU5HSUVVTkc7TG87MDtMOzxjb21wYXQ+IDExNDc7Ozs7TjtIQU5HVUwgTEVUVEVSIFNTQU5HIElFVU5HOzs7OworMzE4MTtIQU5HVUwgTEVUVEVSIFlFU0lFVU5HO0xvOzA7TDs8Y29tcGF0PiAxMTRDOzs7O047SEFOR1VMIExFVFRFUiBOR0lFVU5HOzs7OworMzE4MjtIQU5HVUwgTEVUVEVSIFlFU0lFVU5HLVNJT1M7TG87MDtMOzxjb21wYXQ+IDExRjE7Ozs7TjtIQU5HVUwgTEVUVEVSIE5HSUVVTkcgU0lPUzs7OzsKKzMxODM7SEFOR1VMIExFVFRFUiBZRVNJRVVORy1QQU5TSU9TO0xvOzA7TDs8Y29tcGF0PiAxMUYyOzs7O047SEFOR1VMIExFVFRFUiBOR0lFVU5HIEJBTiBDSEkgRVVNOzs7OworMzE4NDtIQU5HVUwgTEVUVEVSIEtBUFlFT1VOUEhJRVVQSDtMbzswO0w7PGNvbXBhdD4gMTE1Nzs7OztOO0hBTkdVTCBMRVRURVIgUElFVVAgU1VOIEdZRU9ORyBFVU07Ozs7CiszMTg1O0hBTkdVTCBMRVRURVIgU1NBTkdISUVVSDtMbzswO0w7PGNvbXBhdD4gMTE1ODs7OztOO0hBTkdVTCBMRVRURVIgU1NBTkcgSElFVUg7Ozs7CiszMTg2O0hBTkdVTCBMRVRURVIgWUVPUklOSElFVUg7TG87MDtMOzxjb21wYXQ+IDExNTk7Ozs7TjtIQU5HVUwgTEVUVEVSIFlFT0xJTiBISUVVSDs7OzsKKzMxODc7SEFOR1VMIExFVFRFUiBZTy1ZQTtMbzswO0w7PGNvbXBhdD4gMTE4NDs7OztOO0hBTkdVTCBMRVRURVIgWU9ZQTs7OzsKKzMxODg7SEFOR1VMIExFVFRFUiBZTy1ZQUU7TG87MDtMOzxjb21wYXQ+IDExODU7Ozs7TjtIQU5HVUwgTEVUVEVSIFlPWUFFOzs7OworMzE4OTtIQU5HVUwgTEVUVEVSIFlPLUk7TG87MDtMOzxjb21wYXQ+IDExODg7Ozs7TjtIQU5HVUwgTEVUVEVSIFlPSTs7OzsKKzMxOEE7SEFOR1VMIExFVFRFUiBZVS1ZRU87TG87MDtMOzxjb21wYXQ+IDExOTE7Ozs7TjtIQU5HVUwgTEVUVEVSIFlVWUVPOzs7OworMzE4QjtIQU5HVUwgTEVUVEVSIFlVLVlFO0xvOzA7TDs8Y29tcGF0PiAxMTkyOzs7O047SEFOR1VMIExFVFRFUiBZVVlFOzs7OworMzE4QztIQU5HVUwgTEVUVEVSIFlVLUk7TG87MDtMOzxjb21wYXQ+IDExOTQ7Ozs7TjtIQU5HVUwgTEVUVEVSIFlVSTs7OzsKKzMxOEQ7SEFOR1VMIExFVFRFUiBBUkFFQTtMbzswO0w7PGNvbXBhdD4gMTE5RTs7OztOO0hBTkdVTCBMRVRURVIgQUxBRSBBOzs7OworMzE4RTtIQU5HVUwgTEVUVEVSIEFSQUVBRTtMbzswO0w7PGNvbXBhdD4gMTFBMTs7OztOO0hBTkdVTCBMRVRURVIgQUxBRSBBRTs7OzsKKzMxOTA7SURFT0dSQVBISUMgQU5OT1RBVElPTiBMSU5LSU5HIE1BUks7U287MDtMOzs7OztOO0tBTkJVTiBUQVRFVEVOO0thbmJ1biBUYXRldGVuOzs7CiszMTkxO0lERU9HUkFQSElDIEFOTk9UQVRJT04gUkVWRVJTRSBNQVJLO1NvOzA7TDs7Ozs7TjtLQUVSSVRFTiBSRTtLYWVyaXRlbjs7OworMzE5MjtJREVPR1JBUEhJQyBBTk5PVEFUSU9OIE9ORSBNQVJLO05vOzA7TDs8c3VwZXI+IDRFMDA7OzsxO047S0FFUklURU4gSVRJO0thZXJpdGVuOzs7CiszMTkzO0lERU9HUkFQSElDIEFOTk9UQVRJT04gVFdPIE1BUks7Tm87MDtMOzxzdXBlcj4gNEU4Qzs7OzI7TjtLQUVSSVRFTiBOSTtLYWVyaXRlbjs7OworMzE5NDtJREVPR1JBUEhJQyBBTk5PVEFUSU9OIFRIUkVFIE1BUks7Tm87MDtMOzxzdXBlcj4gNEUwOTs7OzM7TjtLQUVSSVRFTiBTQU47S2Flcml0ZW47OzsKKzMxOTU7SURFT0dSQVBISUMgQU5OT1RBVElPTiBGT1VSIE1BUks7Tm87MDtMOzxzdXBlcj4gNTZEQjs7OzQ7TjtLQUVSSVRFTiBTSTtLYWVyaXRlbjs7OworMzE5NjtJREVPR1JBUEhJQyBBTk5PVEFUSU9OIFRPUCBNQVJLO1NvOzA7TDs8c3VwZXI+IDRFMEE7Ozs7TjtLQUVSSVRFTiBaWU9VO0thZXJpdGVuOzs7CiszMTk3O0lERU9HUkFQSElDIEFOTk9UQVRJT04gTUlERExFIE1BUks7U287MDtMOzxzdXBlcj4gNEUyRDs7OztOO0tBRVJJVEVOIFRZVVU7S2Flcml0ZW47OzsKKzMxOTg7SURFT0dSQVBISUMgQU5OT1RBVElPTiBCT1RUT00gTUFSSztTbzswO0w7PHN1cGVyPiA0RTBCOzs7O047S0FFUklURU4gR0U7S2Flcml0ZW47OzsKKzMxOTk7SURFT0dSQVBISUMgQU5OT1RBVElPTiBGSVJTVCBNQVJLO1NvOzA7TDs8c3VwZXI+IDc1MzI7Ozs7TjtLQUVSSVRFTiBLT1U7S2Flcml0ZW47OzsKKzMxOUE7SURFT0dSQVBISUMgQU5OT1RBVElPTiBTRUNPTkQgTUFSSztTbzswO0w7PHN1cGVyPiA0RTU5Ozs7O047S0FFUklURU4gT1RVO0thZXJpdGVuOzs7CiszMTlCO0lERU9HUkFQSElDIEFOTk9UQVRJT04gVEhJUkQgTUFSSztTbzswO0w7PHN1cGVyPiA0RTE5Ozs7O047S0FFUklURU4gSEVJO0thZXJpdGVuOzs7CiszMTlDO0lERU9HUkFQSElDIEFOTk9UQVRJT04gRk9VUlRIIE1BUks7U287MDtMOzxzdXBlcj4gNEUwMTs7OztOO0tBRVJJVEVOIFRFSTtLYWVyaXRlbjs7OworMzE5RDtJREVPR1JBUEhJQyBBTk5PVEFUSU9OIEhFQVZFTiBNQVJLO1NvOzA7TDs8c3VwZXI+IDU5Mjk7Ozs7TjtLQUVSSVRFTiBURU47S2Flcml0ZW47OzsKKzMxOUU7SURFT0dSQVBISUMgQU5OT1RBVElPTiBFQVJUSCBNQVJLO1NvOzA7TDs8c3VwZXI+IDU3MzA7Ozs7TjtLQUVSSVRFTiBUSTtLYWVyaXRlbjs7OworMzE5RjtJREVPR1JBUEhJQyBBTk5PVEFUSU9OIE1BTiBNQVJLO1NvOzA7TDs8c3VwZXI+IDRFQkE7Ozs7TjtLQUVSSVRFTiBaSU47S2Flcml0ZW47OzsKKzMxQTA7Qk9QT01PRk8gTEVUVEVSIEJVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUExO0JPUE9NT0ZPIExFVFRFUiBaSTtMbzswO0w7Ozs7O047Ozs7OworMzFBMjtCT1BPTU9GTyBMRVRURVIgSkk7TG87MDtMOzs7OztOOzs7OzsKKzMxQTM7Qk9QT01PRk8gTEVUVEVSIEdVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUE0O0JPUE9NT0ZPIExFVFRFUiBFRTtMbzswO0w7Ozs7O047Ozs7OworMzFBNTtCT1BPTU9GTyBMRVRURVIgRU5OO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUE2O0JPUE9NT0ZPIExFVFRFUiBPTztMbzswO0w7Ozs7O047Ozs7OworMzFBNztCT1BPTU9GTyBMRVRURVIgT05OO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUE4O0JPUE9NT0ZPIExFVFRFUiBJUjtMbzswO0w7Ozs7O047Ozs7OworMzFBOTtCT1BPTU9GTyBMRVRURVIgQU5OO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUFBO0JPUE9NT0ZPIExFVFRFUiBJTk47TG87MDtMOzs7OztOOzs7OzsKKzMxQUI7Qk9QT01PRk8gTEVUVEVSIFVOTjtMbzswO0w7Ozs7O047Ozs7OworMzFBQztCT1BPTU9GTyBMRVRURVIgSU07TG87MDtMOzs7OztOOzs7OzsKKzMxQUQ7Qk9QT01PRk8gTEVUVEVSIE5HRztMbzswO0w7Ozs7O047Ozs7OworMzFBRTtCT1BPTU9GTyBMRVRURVIgQUlOTjtMbzswO0w7Ozs7O047Ozs7OworMzFBRjtCT1BPTU9GTyBMRVRURVIgQVVOTjtMbzswO0w7Ozs7O047Ozs7OworMzFCMDtCT1BPTU9GTyBMRVRURVIgQU07TG87MDtMOzs7OztOOzs7OzsKKzMxQjE7Qk9QT01PRk8gTEVUVEVSIE9NO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUIyO0JPUE9NT0ZPIExFVFRFUiBPTkc7TG87MDtMOzs7OztOOzs7OzsKKzMxQjM7Qk9QT01PRk8gTEVUVEVSIElOTk47TG87MDtMOzs7OztOOzs7OzsKKzMxQjQ7Qk9QT01PRk8gRklOQUwgTEVUVEVSIFA7TG87MDtMOzs7OztOOzs7OzsKKzMxQjU7Qk9QT01PRk8gRklOQUwgTEVUVEVSIFQ7TG87MDtMOzs7OztOOzs7OzsKKzMxQjY7Qk9QT01PRk8gRklOQUwgTEVUVEVSIEs7TG87MDtMOzs7OztOOzs7OzsKKzMxQjc7Qk9QT01PRk8gRklOQUwgTEVUVEVSIEg7TG87MDtMOzs7OztOOzs7OzsKKzMxRjA7S0FUQUtBTkEgTEVUVEVSIFNNQUxMIEtVO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUYxO0tBVEFLQU5BIExFVFRFUiBTTUFMTCBTSTtMbzswO0w7Ozs7O047Ozs7OworMzFGMjtLQVRBS0FOQSBMRVRURVIgU01BTEwgU1U7TG87MDtMOzs7OztOOzs7OzsKKzMxRjM7S0FUQUtBTkEgTEVUVEVSIFNNQUxMIFRPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUY0O0tBVEFLQU5BIExFVFRFUiBTTUFMTCBOVTtMbzswO0w7Ozs7O047Ozs7OworMzFGNTtLQVRBS0FOQSBMRVRURVIgU01BTEwgSEE7TG87MDtMOzs7OztOOzs7OzsKKzMxRjY7S0FUQUtBTkEgTEVUVEVSIFNNQUxMIEhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUY3O0tBVEFLQU5BIExFVFRFUiBTTUFMTCBIVTtMbzswO0w7Ozs7O047Ozs7OworMzFGODtLQVRBS0FOQSBMRVRURVIgU01BTEwgSEU7TG87MDtMOzs7OztOOzs7OzsKKzMxRjk7S0FUQUtBTkEgTEVUVEVSIFNNQUxMIEhPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUZBO0tBVEFLQU5BIExFVFRFUiBTTUFMTCBNVTtMbzswO0w7Ozs7O047Ozs7OworMzFGQjtLQVRBS0FOQSBMRVRURVIgU01BTEwgUkE7TG87MDtMOzs7OztOOzs7OzsKKzMxRkM7S0FUQUtBTkEgTEVUVEVSIFNNQUxMIFJJO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMUZEO0tBVEFLQU5BIExFVFRFUiBTTUFMTCBSVTtMbzswO0w7Ozs7O047Ozs7OworMzFGRTtLQVRBS0FOQSBMRVRURVIgU01BTEwgUkU7TG87MDtMOzs7OztOOzs7OzsKKzMxRkY7S0FUQUtBTkEgTEVUVEVSIFNNQUxMIFJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CiszMjAwO1BBUkVOVEhFU0laRUQgSEFOR1VMIEtJWUVPSztTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTAwIDAwMjk7Ozs7TjtQQVJFTlRIRVNJWkVEIEhBTkdVTCBHSVlFT0c7Ozs7CiszMjAxO1BBUkVOVEhFU0laRUQgSEFOR1VMIE5JRVVOO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMDIgMDAyOTs7OztOOzs7OzsKKzMyMDI7UEFSRU5USEVTSVpFRCBIQU5HVUwgVElLRVVUO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMDMgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIERJR0VVRDs7OzsKKzMyMDM7UEFSRU5USEVTSVpFRCBIQU5HVUwgUklFVUw7U287MDtMOzxjb21wYXQ+IDAwMjggMTEwNSAwMDI5Ozs7O047UEFSRU5USEVTSVpFRCBIQU5HVUwgTElFVUw7Ozs7CiszMjA0O1BBUkVOVEhFU0laRUQgSEFOR1VMIE1JRVVNO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMDYgMDAyOTs7OztOOzs7OzsKKzMyMDU7UEFSRU5USEVTSVpFRCBIQU5HVUwgUElFVVA7U287MDtMOzxjb21wYXQ+IDAwMjggMTEwNyAwMDI5Ozs7O047UEFSRU5USEVTSVpFRCBIQU5HVUwgQklFVUI7Ozs7CiszMjA2O1BBUkVOVEhFU0laRUQgSEFOR1VMIFNJT1M7U287MDtMOzxjb21wYXQ+IDAwMjggMTEwOSAwMDI5Ozs7O047Ozs7OworMzIwNztQQVJFTlRIRVNJWkVEIEhBTkdVTCBJRVVORztTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTBCIDAwMjk7Ozs7Tjs7Ozs7CiszMjA4O1BBUkVOVEhFU0laRUQgSEFOR1VMIENJRVVDO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMEMgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIEpJRVVKOzs7OworMzIwOTtQQVJFTlRIRVNJWkVEIEhBTkdVTCBDSElFVUNIO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMEUgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIENJRVVDOzs7OworMzIwQTtQQVJFTlRIRVNJWkVEIEhBTkdVTCBLSElFVUtIO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMEYgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIEtJWUVPSzs7OzsKKzMyMEI7UEFSRU5USEVTSVpFRCBIQU5HVUwgVEhJRVVUSDtTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTEwIDAwMjk7Ozs7TjtQQVJFTlRIRVNJWkVEIEhBTkdVTCBUSUVVVDs7OzsKKzMyMEM7UEFSRU5USEVTSVpFRCBIQU5HVUwgUEhJRVVQSDtTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTExIDAwMjk7Ozs7TjtQQVJFTlRIRVNJWkVEIEhBTkdVTCBQSUVVUDs7OzsKKzMyMEQ7UEFSRU5USEVTSVpFRCBIQU5HVUwgSElFVUg7U287MDtMOzxjb21wYXQ+IDAwMjggMTExMiAwMDI5Ozs7O047Ozs7OworMzIwRTtQQVJFTlRIRVNJWkVEIEhBTkdVTCBLSVlFT0sgQTtTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTAwIDExNjEgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIEdBOzs7OworMzIwRjtQQVJFTlRIRVNJWkVEIEhBTkdVTCBOSUVVTiBBO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMDIgMTE2MSAwMDI5Ozs7O047UEFSRU5USEVTSVpFRCBIQU5HVUwgTkE7Ozs7CiszMjEwO1BBUkVOVEhFU0laRUQgSEFOR1VMIFRJS0VVVCBBO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMDMgMTE2MSAwMDI5Ozs7O047UEFSRU5USEVTSVpFRCBIQU5HVUwgREE7Ozs7CiszMjExO1BBUkVOVEhFU0laRUQgSEFOR1VMIFJJRVVMIEE7U287MDtMOzxjb21wYXQ+IDAwMjggMTEwNSAxMTYxIDAwMjk7Ozs7TjtQQVJFTlRIRVNJWkVEIEhBTkdVTCBMQTs7OzsKKzMyMTI7UEFSRU5USEVTSVpFRCBIQU5HVUwgTUlFVU0gQTtTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTA2IDExNjEgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIE1BOzs7OworMzIxMztQQVJFTlRIRVNJWkVEIEhBTkdVTCBQSUVVUCBBO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMDcgMTE2MSAwMDI5Ozs7O047UEFSRU5USEVTSVpFRCBIQU5HVUwgQkE7Ozs7CiszMjE0O1BBUkVOVEhFU0laRUQgSEFOR1VMIFNJT1MgQTtTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTA5IDExNjEgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIFNBOzs7OworMzIxNTtQQVJFTlRIRVNJWkVEIEhBTkdVTCBJRVVORyBBO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMEIgMTE2MSAwMDI5Ozs7O047UEFSRU5USEVTSVpFRCBIQU5HVUwgQTs7OzsKKzMyMTY7UEFSRU5USEVTSVpFRCBIQU5HVUwgQ0lFVUMgQTtTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTBDIDExNjEgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIEpBOzs7OworMzIxNztQQVJFTlRIRVNJWkVEIEhBTkdVTCBDSElFVUNIIEE7U287MDtMOzxjb21wYXQ+IDAwMjggMTEwRSAxMTYxIDAwMjk7Ozs7TjtQQVJFTlRIRVNJWkVEIEhBTkdVTCBDQTs7OzsKKzMyMTg7UEFSRU5USEVTSVpFRCBIQU5HVUwgS0hJRVVLSCBBO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMEYgMTE2MSAwMDI5Ozs7O047UEFSRU5USEVTSVpFRCBIQU5HVUwgS0E7Ozs7CiszMjE5O1BBUkVOVEhFU0laRUQgSEFOR1VMIFRISUVVVEggQTtTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTEwIDExNjEgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIFRBOzs7OworMzIxQTtQQVJFTlRIRVNJWkVEIEhBTkdVTCBQSElFVVBIIEE7U287MDtMOzxjb21wYXQ+IDAwMjggMTExMSAxMTYxIDAwMjk7Ozs7TjtQQVJFTlRIRVNJWkVEIEhBTkdVTCBQQTs7OzsKKzMyMUI7UEFSRU5USEVTSVpFRCBIQU5HVUwgSElFVUggQTtTbzswO0w7PGNvbXBhdD4gMDAyOCAxMTEyIDExNjEgMDAyOTs7OztOO1BBUkVOVEhFU0laRUQgSEFOR1VMIEhBOzs7OworMzIxQztQQVJFTlRIRVNJWkVEIEhBTkdVTCBDSUVVQyBVO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDExMEMgMTE2RSAwMDI5Ozs7O047UEFSRU5USEVTSVpFRCBIQU5HVUwgSlU7Ozs7CiszMjIwO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIE9ORTtObzswO0w7PGNvbXBhdD4gMDAyOCA0RTAwIDAwMjk7OzsxO047Ozs7OworMzIyMTtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBUV087Tm87MDtMOzxjb21wYXQ+IDAwMjggNEU4QyAwMDI5Ozs7MjtOOzs7OzsKKzMyMjI7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggVEhSRUU7Tm87MDtMOzxjb21wYXQ+IDAwMjggNEUwOSAwMDI5Ozs7MztOOzs7OzsKKzMyMjM7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggRk9VUjtObzswO0w7PGNvbXBhdD4gMDAyOCA1NkRCIDAwMjk7Ozs0O047Ozs7OworMzIyNDtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBGSVZFO05vOzA7TDs8Y29tcGF0PiAwMDI4IDRFOTQgMDAyOTs7OzU7Tjs7Ozs7CiszMjI1O1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIFNJWDtObzswO0w7PGNvbXBhdD4gMDAyOCA1MTZEIDAwMjk7Ozs2O047Ozs7OworMzIyNjtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBTRVZFTjtObzswO0w7PGNvbXBhdD4gMDAyOCA0RTAzIDAwMjk7Ozs3O047Ozs7OworMzIyNztQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBFSUdIVDtObzswO0w7PGNvbXBhdD4gMDAyOCA1MTZCIDAwMjk7Ozs4O047Ozs7OworMzIyODtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBOSU5FO05vOzA7TDs8Y29tcGF0PiAwMDI4IDRFNUQgMDAyOTs7Ozk7Tjs7Ozs7CiszMjI5O1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIFRFTjtObzswO0w7PGNvbXBhdD4gMDAyOCA1MzQxIDAwMjk7OzsxMDtOOzs7OzsKKzMyMkE7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggTU9PTjtTbzswO0w7PGNvbXBhdD4gMDAyOCA2NzA4IDAwMjk7Ozs7Tjs7Ozs7CiszMjJCO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIEZJUkU7U287MDtMOzxjb21wYXQ+IDAwMjggNzA2QiAwMDI5Ozs7O047Ozs7OworMzIyQztQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBXQVRFUjtTbzswO0w7PGNvbXBhdD4gMDAyOCA2QzM0IDAwMjk7Ozs7Tjs7Ozs7CiszMjJEO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIFdPT0Q7U287MDtMOzxjb21wYXQ+IDAwMjggNjcyOCAwMDI5Ozs7O047Ozs7OworMzIyRTtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBNRVRBTDtTbzswO0w7PGNvbXBhdD4gMDAyOCA5MUQxIDAwMjk7Ozs7Tjs7Ozs7CiszMjJGO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIEVBUlRIO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDU3MUYgMDAyOTs7OztOOzs7OzsKKzMyMzA7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggU1VOO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDY1RTUgMDAyOTs7OztOOzs7OzsKKzMyMzE7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggU1RPQ0s7U287MDtMOzxjb21wYXQ+IDAwMjggNjgyQSAwMDI5Ozs7O047Ozs7OworMzIzMjtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBIQVZFO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDY3MDkgMDAyOTs7OztOOzs7OzsKKzMyMzM7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggU09DSUVUWTtTbzswO0w7PGNvbXBhdD4gMDAyOCA3OTNFIDAwMjk7Ozs7Tjs7Ozs7CiszMjM0O1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIE5BTUU7U287MDtMOzxjb21wYXQ+IDAwMjggNTQwRCAwMDI5Ozs7O047Ozs7OworMzIzNTtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBTUEVDSUFMO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDcyNzkgMDAyOTs7OztOOzs7OzsKKzMyMzY7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggRklOQU5DSUFMO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDhDQTEgMDAyOTs7OztOOzs7OzsKKzMyMzc7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggQ09OR1JBVFVMQVRJT047U287MDtMOzxjb21wYXQ+IDAwMjggNzk1RCAwMDI5Ozs7O047Ozs7OworMzIzODtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBMQUJPUjtTbzswO0w7PGNvbXBhdD4gMDAyOCA1MkI0IDAwMjk7Ozs7Tjs7Ozs7CiszMjM5O1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIFJFUFJFU0VOVDtTbzswO0w7PGNvbXBhdD4gMDAyOCA0RUUzIDAwMjk7Ozs7Tjs7Ozs7CiszMjNBO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIENBTEw7U287MDtMOzxjb21wYXQ+IDAwMjggNTQ3QyAwMDI5Ozs7O047Ozs7OworMzIzQjtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBTVFVEWTtTbzswO0w7PGNvbXBhdD4gMDAyOCA1QjY2IDAwMjk7Ozs7Tjs7Ozs7CiszMjNDO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIFNVUEVSVklTRTtTbzswO0w7PGNvbXBhdD4gMDAyOCA3NkUzIDAwMjk7Ozs7Tjs7Ozs7CiszMjNEO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIEVOVEVSUFJJU0U7U287MDtMOzxjb21wYXQ+IDAwMjggNEYwMSAwMDI5Ozs7O047Ozs7OworMzIzRTtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBSRVNPVVJDRTtTbzswO0w7PGNvbXBhdD4gMDAyOCA4Q0M3IDAwMjk7Ozs7Tjs7Ozs7CiszMjNGO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIEFMTElBTkNFO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDUzNTQgMDAyOTs7OztOOzs7OzsKKzMyNDA7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggRkVTVElWQUw7U287MDtMOzxjb21wYXQ+IDAwMjggNzk2RCAwMDI5Ozs7O047Ozs7OworMzI0MTtQQVJFTlRIRVNJWkVEIElERU9HUkFQSCBSRVNUO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDRGMTEgMDAyOTs7OztOOzs7OzsKKzMyNDI7UEFSRU5USEVTSVpFRCBJREVPR1JBUEggU0VMRjtTbzswO0w7PGNvbXBhdD4gMDAyOCA4MUVBIDAwMjk7Ozs7Tjs7Ozs7CiszMjQzO1BBUkVOVEhFU0laRUQgSURFT0dSQVBIIFJFQUNIO1NvOzA7TDs8Y29tcGF0PiAwMDI4IDgxRjMgMDAyOTs7OztOOzs7OzsKKzMyNTE7Q0lSQ0xFRCBOVU1CRVIgVFdFTlRZIE9ORTtObzswO09OOzxjaXJjbGU+IDAwMzIgMDAzMTs7OzIxO047Ozs7OworMzI1MjtDSVJDTEVEIE5VTUJFUiBUV0VOVFkgVFdPO05vOzA7T047PGNpcmNsZT4gMDAzMiAwMDMyOzs7MjI7Tjs7Ozs7CiszMjUzO0NJUkNMRUQgTlVNQkVSIFRXRU5UWSBUSFJFRTtObzswO09OOzxjaXJjbGU+IDAwMzIgMDAzMzs7OzIzO047Ozs7OworMzI1NDtDSVJDTEVEIE5VTUJFUiBUV0VOVFkgRk9VUjtObzswO09OOzxjaXJjbGU+IDAwMzIgMDAzNDs7OzI0O047Ozs7OworMzI1NTtDSVJDTEVEIE5VTUJFUiBUV0VOVFkgRklWRTtObzswO09OOzxjaXJjbGU+IDAwMzIgMDAzNTs7OzI1O047Ozs7OworMzI1NjtDSVJDTEVEIE5VTUJFUiBUV0VOVFkgU0lYO05vOzA7T047PGNpcmNsZT4gMDAzMiAwMDM2Ozs7MjY7Tjs7Ozs7CiszMjU3O0NJUkNMRUQgTlVNQkVSIFRXRU5UWSBTRVZFTjtObzswO09OOzxjaXJjbGU+IDAwMzIgMDAzNzs7OzI3O047Ozs7OworMzI1ODtDSVJDTEVEIE5VTUJFUiBUV0VOVFkgRUlHSFQ7Tm87MDtPTjs8Y2lyY2xlPiAwMDMyIDAwMzg7OzsyODtOOzs7OzsKKzMyNTk7Q0lSQ0xFRCBOVU1CRVIgVFdFTlRZIE5JTkU7Tm87MDtPTjs8Y2lyY2xlPiAwMDMyIDAwMzk7OzsyOTtOOzs7OzsKKzMyNUE7Q0lSQ0xFRCBOVU1CRVIgVEhJUlRZO05vOzA7T047PGNpcmNsZT4gMDAzMyAwMDMwOzs7MzA7Tjs7Ozs7CiszMjVCO0NJUkNMRUQgTlVNQkVSIFRISVJUWSBPTkU7Tm87MDtPTjs8Y2lyY2xlPiAwMDMzIDAwMzE7OzszMTtOOzs7OzsKKzMyNUM7Q0lSQ0xFRCBOVU1CRVIgVEhJUlRZIFRXTztObzswO09OOzxjaXJjbGU+IDAwMzMgMDAzMjs7OzMyO047Ozs7OworMzI1RDtDSVJDTEVEIE5VTUJFUiBUSElSVFkgVEhSRUU7Tm87MDtPTjs8Y2lyY2xlPiAwMDMzIDAwMzM7OzszMztOOzs7OzsKKzMyNUU7Q0lSQ0xFRCBOVU1CRVIgVEhJUlRZIEZPVVI7Tm87MDtPTjs8Y2lyY2xlPiAwMDMzIDAwMzQ7OzszNDtOOzs7OzsKKzMyNUY7Q0lSQ0xFRCBOVU1CRVIgVEhJUlRZIEZJVkU7Tm87MDtPTjs8Y2lyY2xlPiAwMDMzIDAwMzU7OzszNTtOOzs7OzsKKzMyNjA7Q0lSQ0xFRCBIQU5HVUwgS0lZRU9LO1NvOzA7TDs8Y2lyY2xlPiAxMTAwOzs7O047Q0lSQ0xFRCBIQU5HVUwgR0lZRU9HOzs7OworMzI2MTtDSVJDTEVEIEhBTkdVTCBOSUVVTjtTbzswO0w7PGNpcmNsZT4gMTEwMjs7OztOOzs7OzsKKzMyNjI7Q0lSQ0xFRCBIQU5HVUwgVElLRVVUO1NvOzA7TDs8Y2lyY2xlPiAxMTAzOzs7O047Q0lSQ0xFRCBIQU5HVUwgRElHRVVEOzs7OworMzI2MztDSVJDTEVEIEhBTkdVTCBSSUVVTDtTbzswO0w7PGNpcmNsZT4gMTEwNTs7OztOO0NJUkNMRUQgSEFOR1VMIExJRVVMOzs7OworMzI2NDtDSVJDTEVEIEhBTkdVTCBNSUVVTTtTbzswO0w7PGNpcmNsZT4gMTEwNjs7OztOOzs7OzsKKzMyNjU7Q0lSQ0xFRCBIQU5HVUwgUElFVVA7U287MDtMOzxjaXJjbGU+IDExMDc7Ozs7TjtDSVJDTEVEIEhBTkdVTCBCSUVVQjs7OzsKKzMyNjY7Q0lSQ0xFRCBIQU5HVUwgU0lPUztTbzswO0w7PGNpcmNsZT4gMTEwOTs7OztOOzs7OzsKKzMyNjc7Q0lSQ0xFRCBIQU5HVUwgSUVVTkc7U287MDtMOzxjaXJjbGU+IDExMEI7Ozs7Tjs7Ozs7CiszMjY4O0NJUkNMRUQgSEFOR1VMIENJRVVDO1NvOzA7TDs8Y2lyY2xlPiAxMTBDOzs7O047Q0lSQ0xFRCBIQU5HVUwgSklFVUo7Ozs7CiszMjY5O0NJUkNMRUQgSEFOR1VMIENISUVVQ0g7U287MDtMOzxjaXJjbGU+IDExMEU7Ozs7TjtDSVJDTEVEIEhBTkdVTCBDSUVVQzs7OzsKKzMyNkE7Q0lSQ0xFRCBIQU5HVUwgS0hJRVVLSDtTbzswO0w7PGNpcmNsZT4gMTEwRjs7OztOO0NJUkNMRUQgSEFOR1VMIEtJWUVPSzs7OzsKKzMyNkI7Q0lSQ0xFRCBIQU5HVUwgVEhJRVVUSDtTbzswO0w7PGNpcmNsZT4gMTExMDs7OztOO0NJUkNMRUQgSEFOR1VMIFRJRVVUOzs7OworMzI2QztDSVJDTEVEIEhBTkdVTCBQSElFVVBIO1NvOzA7TDs8Y2lyY2xlPiAxMTExOzs7O047Q0lSQ0xFRCBIQU5HVUwgUElFVVA7Ozs7CiszMjZEO0NJUkNMRUQgSEFOR1VMIEhJRVVIO1NvOzA7TDs8Y2lyY2xlPiAxMTEyOzs7O047Ozs7OworMzI2RTtDSVJDTEVEIEhBTkdVTCBLSVlFT0sgQTtTbzswO0w7PGNpcmNsZT4gMTEwMCAxMTYxOzs7O047Q0lSQ0xFRCBIQU5HVUwgR0E7Ozs7CiszMjZGO0NJUkNMRUQgSEFOR1VMIE5JRVVOIEE7U287MDtMOzxjaXJjbGU+IDExMDIgMTE2MTs7OztOO0NJUkNMRUQgSEFOR1VMIE5BOzs7OworMzI3MDtDSVJDTEVEIEhBTkdVTCBUSUtFVVQgQTtTbzswO0w7PGNpcmNsZT4gMTEwMyAxMTYxOzs7O047Q0lSQ0xFRCBIQU5HVUwgREE7Ozs7CiszMjcxO0NJUkNMRUQgSEFOR1VMIFJJRVVMIEE7U287MDtMOzxjaXJjbGU+IDExMDUgMTE2MTs7OztOO0NJUkNMRUQgSEFOR1VMIExBOzs7OworMzI3MjtDSVJDTEVEIEhBTkdVTCBNSUVVTSBBO1NvOzA7TDs8Y2lyY2xlPiAxMTA2IDExNjE7Ozs7TjtDSVJDTEVEIEhBTkdVTCBNQTs7OzsKKzMyNzM7Q0lSQ0xFRCBIQU5HVUwgUElFVVAgQTtTbzswO0w7PGNpcmNsZT4gMTEwNyAxMTYxOzs7O047Q0lSQ0xFRCBIQU5HVUwgQkE7Ozs7CiszMjc0O0NJUkNMRUQgSEFOR1VMIFNJT1MgQTtTbzswO0w7PGNpcmNsZT4gMTEwOSAxMTYxOzs7O047Q0lSQ0xFRCBIQU5HVUwgU0E7Ozs7CiszMjc1O0NJUkNMRUQgSEFOR1VMIElFVU5HIEE7U287MDtMOzxjaXJjbGU+IDExMEIgMTE2MTs7OztOO0NJUkNMRUQgSEFOR1VMIEE7Ozs7CiszMjc2O0NJUkNMRUQgSEFOR1VMIENJRVVDIEE7U287MDtMOzxjaXJjbGU+IDExMEMgMTE2MTs7OztOO0NJUkNMRUQgSEFOR1VMIEpBOzs7OworMzI3NztDSVJDTEVEIEhBTkdVTCBDSElFVUNIIEE7U287MDtMOzxjaXJjbGU+IDExMEUgMTE2MTs7OztOO0NJUkNMRUQgSEFOR1VMIENBOzs7OworMzI3ODtDSVJDTEVEIEhBTkdVTCBLSElFVUtIIEE7U287MDtMOzxjaXJjbGU+IDExMEYgMTE2MTs7OztOO0NJUkNMRUQgSEFOR1VMIEtBOzs7OworMzI3OTtDSVJDTEVEIEhBTkdVTCBUSElFVVRIIEE7U287MDtMOzxjaXJjbGU+IDExMTAgMTE2MTs7OztOO0NJUkNMRUQgSEFOR1VMIFRBOzs7OworMzI3QTtDSVJDTEVEIEhBTkdVTCBQSElFVVBIIEE7U287MDtMOzxjaXJjbGU+IDExMTEgMTE2MTs7OztOO0NJUkNMRUQgSEFOR1VMIFBBOzs7OworMzI3QjtDSVJDTEVEIEhBTkdVTCBISUVVSCBBO1NvOzA7TDs8Y2lyY2xlPiAxMTEyIDExNjE7Ozs7TjtDSVJDTEVEIEhBTkdVTCBIQTs7OzsKKzMyN0Y7S09SRUFOIFNUQU5EQVJEIFNZTUJPTDtTbzswO0w7Ozs7O047Ozs7OworMzI4MDtDSVJDTEVEIElERU9HUkFQSCBPTkU7Tm87MDtMOzxjaXJjbGU+IDRFMDA7OzsxO047Ozs7OworMzI4MTtDSVJDTEVEIElERU9HUkFQSCBUV087Tm87MDtMOzxjaXJjbGU+IDRFOEM7OzsyO047Ozs7OworMzI4MjtDSVJDTEVEIElERU9HUkFQSCBUSFJFRTtObzswO0w7PGNpcmNsZT4gNEUwOTs7OzM7Tjs7Ozs7CiszMjgzO0NJUkNMRUQgSURFT0dSQVBIIEZPVVI7Tm87MDtMOzxjaXJjbGU+IDU2REI7Ozs0O047Ozs7OworMzI4NDtDSVJDTEVEIElERU9HUkFQSCBGSVZFO05vOzA7TDs8Y2lyY2xlPiA0RTk0Ozs7NTtOOzs7OzsKKzMyODU7Q0lSQ0xFRCBJREVPR1JBUEggU0lYO05vOzA7TDs8Y2lyY2xlPiA1MTZEOzs7NjtOOzs7OzsKKzMyODY7Q0lSQ0xFRCBJREVPR1JBUEggU0VWRU47Tm87MDtMOzxjaXJjbGU+IDRFMDM7Ozs3O047Ozs7OworMzI4NztDSVJDTEVEIElERU9HUkFQSCBFSUdIVDtObzswO0w7PGNpcmNsZT4gNTE2Qjs7Ozg7Tjs7Ozs7CiszMjg4O0NJUkNMRUQgSURFT0dSQVBIIE5JTkU7Tm87MDtMOzxjaXJjbGU+IDRFNUQ7Ozs5O047Ozs7OworMzI4OTtDSVJDTEVEIElERU9HUkFQSCBURU47Tm87MDtMOzxjaXJjbGU+IDUzNDE7OzsxMDtOOzs7OzsKKzMyOEE7Q0lSQ0xFRCBJREVPR1JBUEggTU9PTjtTbzswO0w7PGNpcmNsZT4gNjcwODs7OztOOzs7OzsKKzMyOEI7Q0lSQ0xFRCBJREVPR1JBUEggRklSRTtTbzswO0w7PGNpcmNsZT4gNzA2Qjs7OztOOzs7OzsKKzMyOEM7Q0lSQ0xFRCBJREVPR1JBUEggV0FURVI7U287MDtMOzxjaXJjbGU+IDZDMzQ7Ozs7Tjs7Ozs7CiszMjhEO0NJUkNMRUQgSURFT0dSQVBIIFdPT0Q7U287MDtMOzxjaXJjbGU+IDY3Mjg7Ozs7Tjs7Ozs7CiszMjhFO0NJUkNMRUQgSURFT0dSQVBIIE1FVEFMO1NvOzA7TDs8Y2lyY2xlPiA5MUQxOzs7O047Ozs7OworMzI4RjtDSVJDTEVEIElERU9HUkFQSCBFQVJUSDtTbzswO0w7PGNpcmNsZT4gNTcxRjs7OztOOzs7OzsKKzMyOTA7Q0lSQ0xFRCBJREVPR1JBUEggU1VOO1NvOzA7TDs8Y2lyY2xlPiA2NUU1Ozs7O047Ozs7OworMzI5MTtDSVJDTEVEIElERU9HUkFQSCBTVE9DSztTbzswO0w7PGNpcmNsZT4gNjgyQTs7OztOOzs7OzsKKzMyOTI7Q0lSQ0xFRCBJREVPR1JBUEggSEFWRTtTbzswO0w7PGNpcmNsZT4gNjcwOTs7OztOOzs7OzsKKzMyOTM7Q0lSQ0xFRCBJREVPR1JBUEggU09DSUVUWTtTbzswO0w7PGNpcmNsZT4gNzkzRTs7OztOOzs7OzsKKzMyOTQ7Q0lSQ0xFRCBJREVPR1JBUEggTkFNRTtTbzswO0w7PGNpcmNsZT4gNTQwRDs7OztOOzs7OzsKKzMyOTU7Q0lSQ0xFRCBJREVPR1JBUEggU1BFQ0lBTDtTbzswO0w7PGNpcmNsZT4gNzI3OTs7OztOOzs7OzsKKzMyOTY7Q0lSQ0xFRCBJREVPR1JBUEggRklOQU5DSUFMO1NvOzA7TDs8Y2lyY2xlPiA4Q0ExOzs7O047Ozs7OworMzI5NztDSVJDTEVEIElERU9HUkFQSCBDT05HUkFUVUxBVElPTjtTbzswO0w7PGNpcmNsZT4gNzk1RDs7OztOOzs7OzsKKzMyOTg7Q0lSQ0xFRCBJREVPR1JBUEggTEFCT1I7U287MDtMOzxjaXJjbGU+IDUyQjQ7Ozs7Tjs7Ozs7CiszMjk5O0NJUkNMRUQgSURFT0dSQVBIIFNFQ1JFVDtTbzswO0w7PGNpcmNsZT4gNzlEODs7OztOOzs7OzsKKzMyOUE7Q0lSQ0xFRCBJREVPR1JBUEggTUFMRTtTbzswO0w7PGNpcmNsZT4gNzUzNzs7OztOOzs7OzsKKzMyOUI7Q0lSQ0xFRCBJREVPR1JBUEggRkVNQUxFO1NvOzA7TDs8Y2lyY2xlPiA1OTczOzs7O047Ozs7OworMzI5QztDSVJDTEVEIElERU9HUkFQSCBTVUlUQUJMRTtTbzswO0w7PGNpcmNsZT4gOTA2OTs7OztOOzs7OzsKKzMyOUQ7Q0lSQ0xFRCBJREVPR1JBUEggRVhDRUxMRU5UO1NvOzA7TDs8Y2lyY2xlPiA1MTJBOzs7O047Ozs7OworMzI5RTtDSVJDTEVEIElERU9HUkFQSCBQUklOVDtTbzswO0w7PGNpcmNsZT4gNTM3MDs7OztOOzs7OzsKKzMyOUY7Q0lSQ0xFRCBJREVPR1JBUEggQVRURU5USU9OO1NvOzA7TDs8Y2lyY2xlPiA2Q0U4Ozs7O047Ozs7OworMzJBMDtDSVJDTEVEIElERU9HUkFQSCBJVEVNO1NvOzA7TDs8Y2lyY2xlPiA5ODA1Ozs7O047Ozs7OworMzJBMTtDSVJDTEVEIElERU9HUkFQSCBSRVNUO1NvOzA7TDs8Y2lyY2xlPiA0RjExOzs7O047Ozs7OworMzJBMjtDSVJDTEVEIElERU9HUkFQSCBDT1BZO1NvOzA7TDs8Y2lyY2xlPiA1MTk5Ozs7O047Ozs7OworMzJBMztDSVJDTEVEIElERU9HUkFQSCBDT1JSRUNUO1NvOzA7TDs8Y2lyY2xlPiA2QjYzOzs7O047Ozs7OworMzJBNDtDSVJDTEVEIElERU9HUkFQSCBISUdIO1NvOzA7TDs8Y2lyY2xlPiA0RTBBOzs7O047Ozs7OworMzJBNTtDSVJDTEVEIElERU9HUkFQSCBDRU5UUkU7U287MDtMOzxjaXJjbGU+IDRFMkQ7Ozs7TjtDSVJDTEVEIElERU9HUkFQSCBDRU5URVI7Ozs7CiszMkE2O0NJUkNMRUQgSURFT0dSQVBIIExPVztTbzswO0w7PGNpcmNsZT4gNEUwQjs7OztOOzs7OzsKKzMyQTc7Q0lSQ0xFRCBJREVPR1JBUEggTEVGVDtTbzswO0w7PGNpcmNsZT4gNURFNjs7OztOOzs7OzsKKzMyQTg7Q0lSQ0xFRCBJREVPR1JBUEggUklHSFQ7U287MDtMOzxjaXJjbGU+IDUzRjM7Ozs7Tjs7Ozs7CiszMkE5O0NJUkNMRUQgSURFT0dSQVBIIE1FRElDSU5FO1NvOzA7TDs8Y2lyY2xlPiA1MzNCOzs7O047Ozs7OworMzJBQTtDSVJDTEVEIElERU9HUkFQSCBSRUxJR0lPTjtTbzswO0w7PGNpcmNsZT4gNUI5Nzs7OztOOzs7OzsKKzMyQUI7Q0lSQ0xFRCBJREVPR1JBUEggU1RVRFk7U287MDtMOzxjaXJjbGU+IDVCNjY7Ozs7Tjs7Ozs7CiszMkFDO0NJUkNMRUQgSURFT0dSQVBIIFNVUEVSVklTRTtTbzswO0w7PGNpcmNsZT4gNzZFMzs7OztOOzs7OzsKKzMyQUQ7Q0lSQ0xFRCBJREVPR1JBUEggRU5URVJQUklTRTtTbzswO0w7PGNpcmNsZT4gNEYwMTs7OztOOzs7OzsKKzMyQUU7Q0lSQ0xFRCBJREVPR1JBUEggUkVTT1VSQ0U7U287MDtMOzxjaXJjbGU+IDhDQzc7Ozs7Tjs7Ozs7CiszMkFGO0NJUkNMRUQgSURFT0dSQVBIIEFMTElBTkNFO1NvOzA7TDs8Y2lyY2xlPiA1MzU0Ozs7O047Ozs7OworMzJCMDtDSVJDTEVEIElERU9HUkFQSCBOSUdIVDtTbzswO0w7PGNpcmNsZT4gNTkxQzs7OztOOzs7OzsKKzMyQjE7Q0lSQ0xFRCBOVU1CRVIgVEhJUlRZIFNJWDtObzswO09OOzxjaXJjbGU+IDAwMzMgMDAzNjs7OzM2O047Ozs7OworMzJCMjtDSVJDTEVEIE5VTUJFUiBUSElSVFkgU0VWRU47Tm87MDtPTjs8Y2lyY2xlPiAwMDMzIDAwMzc7OzszNztOOzs7OzsKKzMyQjM7Q0lSQ0xFRCBOVU1CRVIgVEhJUlRZIEVJR0hUO05vOzA7T047PGNpcmNsZT4gMDAzMyAwMDM4Ozs7Mzg7Tjs7Ozs7CiszMkI0O0NJUkNMRUQgTlVNQkVSIFRISVJUWSBOSU5FO05vOzA7T047PGNpcmNsZT4gMDAzMyAwMDM5Ozs7Mzk7Tjs7Ozs7CiszMkI1O0NJUkNMRUQgTlVNQkVSIEZPUlRZO05vOzA7T047PGNpcmNsZT4gMDAzNCAwMDMwOzs7NDA7Tjs7Ozs7CiszMkI2O0NJUkNMRUQgTlVNQkVSIEZPUlRZIE9ORTtObzswO09OOzxjaXJjbGU+IDAwMzQgMDAzMTs7OzQxO047Ozs7OworMzJCNztDSVJDTEVEIE5VTUJFUiBGT1JUWSBUV087Tm87MDtPTjs8Y2lyY2xlPiAwMDM0IDAwMzI7Ozs0MjtOOzs7OzsKKzMyQjg7Q0lSQ0xFRCBOVU1CRVIgRk9SVFkgVEhSRUU7Tm87MDtPTjs8Y2lyY2xlPiAwMDM0IDAwMzM7Ozs0MztOOzs7OzsKKzMyQjk7Q0lSQ0xFRCBOVU1CRVIgRk9SVFkgRk9VUjtObzswO09OOzxjaXJjbGU+IDAwMzQgMDAzNDs7OzQ0O047Ozs7OworMzJCQTtDSVJDTEVEIE5VTUJFUiBGT1JUWSBGSVZFO05vOzA7T047PGNpcmNsZT4gMDAzNCAwMDM1Ozs7NDU7Tjs7Ozs7CiszMkJCO0NJUkNMRUQgTlVNQkVSIEZPUlRZIFNJWDtObzswO09OOzxjaXJjbGU+IDAwMzQgMDAzNjs7OzQ2O047Ozs7OworMzJCQztDSVJDTEVEIE5VTUJFUiBGT1JUWSBTRVZFTjtObzswO09OOzxjaXJjbGU+IDAwMzQgMDAzNzs7OzQ3O047Ozs7OworMzJCRDtDSVJDTEVEIE5VTUJFUiBGT1JUWSBFSUdIVDtObzswO09OOzxjaXJjbGU+IDAwMzQgMDAzODs7OzQ4O047Ozs7OworMzJCRTtDSVJDTEVEIE5VTUJFUiBGT1JUWSBOSU5FO05vOzA7T047PGNpcmNsZT4gMDAzNCAwMDM5Ozs7NDk7Tjs7Ozs7CiszMkJGO0NJUkNMRUQgTlVNQkVSIEZJRlRZO05vOzA7T047PGNpcmNsZT4gMDAzNSAwMDMwOzs7NTA7Tjs7Ozs7CiszMkMwO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEpBTlVBUlk7U287MDtMOzxjb21wYXQ+IDAwMzEgNjcwODs7OztOOzs7OzsKKzMyQzE7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgRkVCUlVBUlk7U287MDtMOzxjb21wYXQ+IDAwMzIgNjcwODs7OztOOzs7OzsKKzMyQzI7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgTUFSQ0g7U287MDtMOzxjb21wYXQ+IDAwMzMgNjcwODs7OztOOzs7OzsKKzMyQzM7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgQVBSSUw7U287MDtMOzxjb21wYXQ+IDAwMzQgNjcwODs7OztOOzs7OzsKKzMyQzQ7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgTUFZO1NvOzA7TDs8Y29tcGF0PiAwMDM1IDY3MDg7Ozs7Tjs7Ozs7CiszMkM1O0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEpVTkU7U287MDtMOzxjb21wYXQ+IDAwMzYgNjcwODs7OztOOzs7OzsKKzMyQzY7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSlVMWTtTbzswO0w7PGNvbXBhdD4gMDAzNyA2NzA4Ozs7O047Ozs7OworMzJDNztJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBBVUdVU1Q7U287MDtMOzxjb21wYXQ+IDAwMzggNjcwODs7OztOOzs7OzsKKzMyQzg7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgU0VQVEVNQkVSO1NvOzA7TDs8Y29tcGF0PiAwMDM5IDY3MDg7Ozs7Tjs7Ozs7CiszMkM5O0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIE9DVE9CRVI7U287MDtMOzxjb21wYXQ+IDAwMzEgMDAzMCA2NzA4Ozs7O047Ozs7OworMzJDQTtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBOT1ZFTUJFUjtTbzswO0w7PGNvbXBhdD4gMDAzMSAwMDMxIDY3MDg7Ozs7Tjs7Ozs7CiszMkNCO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERFQ0VNQkVSO1NvOzA7TDs8Y29tcGF0PiAwMDMxIDAwMzIgNjcwODs7OztOOzs7OzsKKzMyRDA7Q0lSQ0xFRCBLQVRBS0FOQSBBO1NvOzA7TDs8Y2lyY2xlPiAzMEEyOzs7O047Ozs7OworMzJEMTtDSVJDTEVEIEtBVEFLQU5BIEk7U287MDtMOzxjaXJjbGU+IDMwQTQ7Ozs7Tjs7Ozs7CiszMkQyO0NJUkNMRUQgS0FUQUtBTkEgVTtTbzswO0w7PGNpcmNsZT4gMzBBNjs7OztOOzs7OzsKKzMyRDM7Q0lSQ0xFRCBLQVRBS0FOQSBFO1NvOzA7TDs8Y2lyY2xlPiAzMEE4Ozs7O047Ozs7OworMzJENDtDSVJDTEVEIEtBVEFLQU5BIE87U287MDtMOzxjaXJjbGU+IDMwQUE7Ozs7Tjs7Ozs7CiszMkQ1O0NJUkNMRUQgS0FUQUtBTkEgS0E7U287MDtMOzxjaXJjbGU+IDMwQUI7Ozs7Tjs7Ozs7CiszMkQ2O0NJUkNMRUQgS0FUQUtBTkEgS0k7U287MDtMOzxjaXJjbGU+IDMwQUQ7Ozs7Tjs7Ozs7CiszMkQ3O0NJUkNMRUQgS0FUQUtBTkEgS1U7U287MDtMOzxjaXJjbGU+IDMwQUY7Ozs7Tjs7Ozs7CiszMkQ4O0NJUkNMRUQgS0FUQUtBTkEgS0U7U287MDtMOzxjaXJjbGU+IDMwQjE7Ozs7Tjs7Ozs7CiszMkQ5O0NJUkNMRUQgS0FUQUtBTkEgS087U287MDtMOzxjaXJjbGU+IDMwQjM7Ozs7Tjs7Ozs7CiszMkRBO0NJUkNMRUQgS0FUQUtBTkEgU0E7U287MDtMOzxjaXJjbGU+IDMwQjU7Ozs7Tjs7Ozs7CiszMkRCO0NJUkNMRUQgS0FUQUtBTkEgU0k7U287MDtMOzxjaXJjbGU+IDMwQjc7Ozs7Tjs7Ozs7CiszMkRDO0NJUkNMRUQgS0FUQUtBTkEgU1U7U287MDtMOzxjaXJjbGU+IDMwQjk7Ozs7Tjs7Ozs7CiszMkREO0NJUkNMRUQgS0FUQUtBTkEgU0U7U287MDtMOzxjaXJjbGU+IDMwQkI7Ozs7Tjs7Ozs7CiszMkRFO0NJUkNMRUQgS0FUQUtBTkEgU087U287MDtMOzxjaXJjbGU+IDMwQkQ7Ozs7Tjs7Ozs7CiszMkRGO0NJUkNMRUQgS0FUQUtBTkEgVEE7U287MDtMOzxjaXJjbGU+IDMwQkY7Ozs7Tjs7Ozs7CiszMkUwO0NJUkNMRUQgS0FUQUtBTkEgVEk7U287MDtMOzxjaXJjbGU+IDMwQzE7Ozs7Tjs7Ozs7CiszMkUxO0NJUkNMRUQgS0FUQUtBTkEgVFU7U287MDtMOzxjaXJjbGU+IDMwQzQ7Ozs7Tjs7Ozs7CiszMkUyO0NJUkNMRUQgS0FUQUtBTkEgVEU7U287MDtMOzxjaXJjbGU+IDMwQzY7Ozs7Tjs7Ozs7CiszMkUzO0NJUkNMRUQgS0FUQUtBTkEgVE87U287MDtMOzxjaXJjbGU+IDMwQzg7Ozs7Tjs7Ozs7CiszMkU0O0NJUkNMRUQgS0FUQUtBTkEgTkE7U287MDtMOzxjaXJjbGU+IDMwQ0E7Ozs7Tjs7Ozs7CiszMkU1O0NJUkNMRUQgS0FUQUtBTkEgTkk7U287MDtMOzxjaXJjbGU+IDMwQ0I7Ozs7Tjs7Ozs7CiszMkU2O0NJUkNMRUQgS0FUQUtBTkEgTlU7U287MDtMOzxjaXJjbGU+IDMwQ0M7Ozs7Tjs7Ozs7CiszMkU3O0NJUkNMRUQgS0FUQUtBTkEgTkU7U287MDtMOzxjaXJjbGU+IDMwQ0Q7Ozs7Tjs7Ozs7CiszMkU4O0NJUkNMRUQgS0FUQUtBTkEgTk87U287MDtMOzxjaXJjbGU+IDMwQ0U7Ozs7Tjs7Ozs7CiszMkU5O0NJUkNMRUQgS0FUQUtBTkEgSEE7U287MDtMOzxjaXJjbGU+IDMwQ0Y7Ozs7Tjs7Ozs7CiszMkVBO0NJUkNMRUQgS0FUQUtBTkEgSEk7U287MDtMOzxjaXJjbGU+IDMwRDI7Ozs7Tjs7Ozs7CiszMkVCO0NJUkNMRUQgS0FUQUtBTkEgSFU7U287MDtMOzxjaXJjbGU+IDMwRDU7Ozs7Tjs7Ozs7CiszMkVDO0NJUkNMRUQgS0FUQUtBTkEgSEU7U287MDtMOzxjaXJjbGU+IDMwRDg7Ozs7Tjs7Ozs7CiszMkVEO0NJUkNMRUQgS0FUQUtBTkEgSE87U287MDtMOzxjaXJjbGU+IDMwREI7Ozs7Tjs7Ozs7CiszMkVFO0NJUkNMRUQgS0FUQUtBTkEgTUE7U287MDtMOzxjaXJjbGU+IDMwREU7Ozs7Tjs7Ozs7CiszMkVGO0NJUkNMRUQgS0FUQUtBTkEgTUk7U287MDtMOzxjaXJjbGU+IDMwREY7Ozs7Tjs7Ozs7CiszMkYwO0NJUkNMRUQgS0FUQUtBTkEgTVU7U287MDtMOzxjaXJjbGU+IDMwRTA7Ozs7Tjs7Ozs7CiszMkYxO0NJUkNMRUQgS0FUQUtBTkEgTUU7U287MDtMOzxjaXJjbGU+IDMwRTE7Ozs7Tjs7Ozs7CiszMkYyO0NJUkNMRUQgS0FUQUtBTkEgTU87U287MDtMOzxjaXJjbGU+IDMwRTI7Ozs7Tjs7Ozs7CiszMkYzO0NJUkNMRUQgS0FUQUtBTkEgWUE7U287MDtMOzxjaXJjbGU+IDMwRTQ7Ozs7Tjs7Ozs7CiszMkY0O0NJUkNMRUQgS0FUQUtBTkEgWVU7U287MDtMOzxjaXJjbGU+IDMwRTY7Ozs7Tjs7Ozs7CiszMkY1O0NJUkNMRUQgS0FUQUtBTkEgWU87U287MDtMOzxjaXJjbGU+IDMwRTg7Ozs7Tjs7Ozs7CiszMkY2O0NJUkNMRUQgS0FUQUtBTkEgUkE7U287MDtMOzxjaXJjbGU+IDMwRTk7Ozs7Tjs7Ozs7CiszMkY3O0NJUkNMRUQgS0FUQUtBTkEgUkk7U287MDtMOzxjaXJjbGU+IDMwRUE7Ozs7Tjs7Ozs7CiszMkY4O0NJUkNMRUQgS0FUQUtBTkEgUlU7U287MDtMOzxjaXJjbGU+IDMwRUI7Ozs7Tjs7Ozs7CiszMkY5O0NJUkNMRUQgS0FUQUtBTkEgUkU7U287MDtMOzxjaXJjbGU+IDMwRUM7Ozs7Tjs7Ozs7CiszMkZBO0NJUkNMRUQgS0FUQUtBTkEgUk87U287MDtMOzxjaXJjbGU+IDMwRUQ7Ozs7Tjs7Ozs7CiszMkZCO0NJUkNMRUQgS0FUQUtBTkEgV0E7U287MDtMOzxjaXJjbGU+IDMwRUY7Ozs7Tjs7Ozs7CiszMkZDO0NJUkNMRUQgS0FUQUtBTkEgV0k7U287MDtMOzxjaXJjbGU+IDMwRjA7Ozs7Tjs7Ozs7CiszMkZEO0NJUkNMRUQgS0FUQUtBTkEgV0U7U287MDtMOzxjaXJjbGU+IDMwRjE7Ozs7Tjs7Ozs7CiszMkZFO0NJUkNMRUQgS0FUQUtBTkEgV087U287MDtMOzxjaXJjbGU+IDMwRjI7Ozs7Tjs7Ozs7CiszMzAwO1NRVUFSRSBBUEFBVE87U287MDtMOzxzcXVhcmU+IDMwQTIgMzBEMSAzMEZDIDMwQzg7Ozs7TjtTUVVBUkVEIEFQQUFUTzs7OzsKKzMzMDE7U1FVQVJFIEFSVUhVQTtTbzswO0w7PHNxdWFyZT4gMzBBMiAzMEVCIDMwRDUgMzBBMTs7OztOO1NRVUFSRUQgQVJVSFVBOzs7OworMzMwMjtTUVVBUkUgQU5QRUE7U287MDtMOzxzcXVhcmU+IDMwQTIgMzBGMyAzMERBIDMwQTI7Ozs7TjtTUVVBUkVEIEFOUEVBOzs7OworMzMwMztTUVVBUkUgQUFSVTtTbzswO0w7PHNxdWFyZT4gMzBBMiAzMEZDIDMwRUI7Ozs7TjtTUVVBUkVEIEFBUlU7Ozs7CiszMzA0O1NRVUFSRSBJTklOR1U7U287MDtMOzxzcXVhcmU+IDMwQTQgMzBDQiAzMEYzIDMwQjA7Ozs7TjtTUVVBUkVEIElOSU5HVTs7OzsKKzMzMDU7U1FVQVJFIElOVEk7U287MDtMOzxzcXVhcmU+IDMwQTQgMzBGMyAzMEMxOzs7O047U1FVQVJFRCBJTlRJOzs7OworMzMwNjtTUVVBUkUgVU9OO1NvOzA7TDs8c3F1YXJlPiAzMEE2IDMwQTkgMzBGMzs7OztOO1NRVUFSRUQgVU9OOzs7OworMzMwNztTUVVBUkUgRVNVS1VVRE87U287MDtMOzxzcXVhcmU+IDMwQTggMzBCOSAzMEFGIDMwRkMgMzBDOTs7OztOO1NRVUFSRUQgRVNVS1VVRE87Ozs7CiszMzA4O1NRVUFSRSBFRUtBQTtTbzswO0w7PHNxdWFyZT4gMzBBOCAzMEZDIDMwQUIgMzBGQzs7OztOO1NRVUFSRUQgRUVLQUE7Ozs7CiszMzA5O1NRVUFSRSBPTlNVO1NvOzA7TDs8c3F1YXJlPiAzMEFBIDMwRjMgMzBCOTs7OztOO1NRVUFSRUQgT05TVTs7OzsKKzMzMEE7U1FVQVJFIE9PTVU7U287MDtMOzxzcXVhcmU+IDMwQUEgMzBGQyAzMEUwOzs7O047U1FVQVJFRCBPT01VOzs7OworMzMwQjtTUVVBUkUgS0FJUkk7U287MDtMOzxzcXVhcmU+IDMwQUIgMzBBNCAzMEVBOzs7O047U1FVQVJFRCBLQUlSSTs7OzsKKzMzMEM7U1FVQVJFIEtBUkFUVE87U287MDtMOzxzcXVhcmU+IDMwQUIgMzBFOSAzMEMzIDMwQzg7Ozs7TjtTUVVBUkVEIEtBUkFUVE87Ozs7CiszMzBEO1NRVUFSRSBLQVJPUklJO1NvOzA7TDs8c3F1YXJlPiAzMEFCIDMwRUQgMzBFQSAzMEZDOzs7O047U1FVQVJFRCBLQVJPUklJOzs7OworMzMwRTtTUVVBUkUgR0FST047U287MDtMOzxzcXVhcmU+IDMwQUMgMzBFRCAzMEYzOzs7O047U1FVQVJFRCBHQVJPTjs7OzsKKzMzMEY7U1FVQVJFIEdBTk1BO1NvOzA7TDs8c3F1YXJlPiAzMEFDIDMwRjMgMzBERTs7OztOO1NRVUFSRUQgR0FOTUE7Ozs7CiszMzEwO1NRVUFSRSBHSUdBO1NvOzA7TDs8c3F1YXJlPiAzMEFFIDMwQUM7Ozs7TjtTUVVBUkVEIEdJR0E7Ozs7CiszMzExO1NRVUFSRSBHSU5JSTtTbzswO0w7PHNxdWFyZT4gMzBBRSAzMENCIDMwRkM7Ozs7TjtTUVVBUkVEIEdJTklJOzs7OworMzMxMjtTUVVBUkUgS1lVUklJO1NvOzA7TDs8c3F1YXJlPiAzMEFEIDMwRTUgMzBFQSAzMEZDOzs7O047U1FVQVJFRCBLWVVSSUk7Ozs7CiszMzEzO1NRVUFSRSBHSVJVREFBO1NvOzA7TDs8c3F1YXJlPiAzMEFFIDMwRUIgMzBDMCAzMEZDOzs7O047U1FVQVJFRCBHSVJVREFBOzs7OworMzMxNDtTUVVBUkUgS0lSTztTbzswO0w7PHNxdWFyZT4gMzBBRCAzMEVEOzs7O047U1FVQVJFRCBLSVJPOzs7OworMzMxNTtTUVVBUkUgS0lST0dVUkFNVTtTbzswO0w7PHNxdWFyZT4gMzBBRCAzMEVEIDMwQjAgMzBFOSAzMEUwOzs7O047U1FVQVJFRCBLSVJPR1VSQU1VOzs7OworMzMxNjtTUVVBUkUgS0lST01FRVRPUlU7U287MDtMOzxzcXVhcmU+IDMwQUQgMzBFRCAzMEUxIDMwRkMgMzBDOCAzMEVCOzs7O047U1FVQVJFRCBLSVJPTUVFVE9SVTs7OzsKKzMzMTc7U1FVQVJFIEtJUk9XQVRUTztTbzswO0w7PHNxdWFyZT4gMzBBRCAzMEVEIDMwRUYgMzBDMyAzMEM4Ozs7O047U1FVQVJFRCBLSVJPV0FUVE87Ozs7CiszMzE4O1NRVUFSRSBHVVJBTVU7U287MDtMOzxzcXVhcmU+IDMwQjAgMzBFOSAzMEUwOzs7O047U1FVQVJFRCBHVVJBTVU7Ozs7CiszMzE5O1NRVUFSRSBHVVJBTVVUT047U287MDtMOzxzcXVhcmU+IDMwQjAgMzBFOSAzMEUwIDMwQzggMzBGMzs7OztOO1NRVUFSRUQgR1VSQU1VVE9OOzs7OworMzMxQTtTUVVBUkUgS1VSVVpFSVJPO1NvOzA7TDs8c3F1YXJlPiAzMEFGIDMwRUIgMzBCQyAzMEE0IDMwRUQ7Ozs7TjtTUVVBUkVEIEtVUlVaRUlSTzs7OzsKKzMzMUI7U1FVQVJFIEtVUk9PTkU7U287MDtMOzxzcXVhcmU+IDMwQUYgMzBFRCAzMEZDIDMwQ0Q7Ozs7TjtTUVVBUkVEIEtVUk9PTkU7Ozs7CiszMzFDO1NRVUFSRSBLRUVTVTtTbzswO0w7PHNxdWFyZT4gMzBCMSAzMEZDIDMwQjk7Ozs7TjtTUVVBUkVEIEtFRVNVOzs7OworMzMxRDtTUVVBUkUgS09SVU5BO1NvOzA7TDs8c3F1YXJlPiAzMEIzIDMwRUIgMzBDQTs7OztOO1NRVUFSRUQgS09SVU5BOzs7OworMzMxRTtTUVVBUkUgS09PUE87U287MDtMOzxzcXVhcmU+IDMwQjMgMzBGQyAzMEREOzs7O047U1FVQVJFRCBLT09QTzs7OzsKKzMzMUY7U1FVQVJFIFNBSUtVUlU7U287MDtMOzxzcXVhcmU+IDMwQjUgMzBBNCAzMEFGIDMwRUI7Ozs7TjtTUVVBUkVEIFNBSUtVUlU7Ozs7CiszMzIwO1NRVUFSRSBTQU5USUlNVTtTbzswO0w7PHNxdWFyZT4gMzBCNSAzMEYzIDMwQzEgMzBGQyAzMEUwOzs7O047U1FVQVJFRCBTQU5USUlNVTs7OzsKKzMzMjE7U1FVQVJFIFNJUklOR1U7U287MDtMOzxzcXVhcmU+IDMwQjcgMzBFQSAzMEYzIDMwQjA7Ozs7TjtTUVVBUkVEIFNJUklOR1U7Ozs7CiszMzIyO1NRVUFSRSBTRU5USTtTbzswO0w7PHNxdWFyZT4gMzBCQiAzMEYzIDMwQzE7Ozs7TjtTUVVBUkVEIFNFTlRJOzs7OworMzMyMztTUVVBUkUgU0VOVE87U287MDtMOzxzcXVhcmU+IDMwQkIgMzBGMyAzMEM4Ozs7O047U1FVQVJFRCBTRU5UTzs7OzsKKzMzMjQ7U1FVQVJFIERBQVNVO1NvOzA7TDs8c3F1YXJlPiAzMEMwIDMwRkMgMzBCOTs7OztOO1NRVUFSRUQgREFBU1U7Ozs7CiszMzI1O1NRVUFSRSBERVNJO1NvOzA7TDs8c3F1YXJlPiAzMEM3IDMwQjc7Ozs7TjtTUVVBUkVEIERFU0k7Ozs7CiszMzI2O1NRVUFSRSBET1JVO1NvOzA7TDs8c3F1YXJlPiAzMEM5IDMwRUI7Ozs7TjtTUVVBUkVEIERPUlU7Ozs7CiszMzI3O1NRVUFSRSBUT047U287MDtMOzxzcXVhcmU+IDMwQzggMzBGMzs7OztOO1NRVUFSRUQgVE9OOzs7OworMzMyODtTUVVBUkUgTkFOTztTbzswO0w7PHNxdWFyZT4gMzBDQSAzMENFOzs7O047U1FVQVJFRCBOQU5POzs7OworMzMyOTtTUVVBUkUgTk9UVE87U287MDtMOzxzcXVhcmU+IDMwQ0UgMzBDMyAzMEM4Ozs7O047U1FVQVJFRCBOT1RUTzs7OzsKKzMzMkE7U1FVQVJFIEhBSVRVO1NvOzA7TDs8c3F1YXJlPiAzMENGIDMwQTQgMzBDNDs7OztOO1NRVUFSRUQgSEFJVFU7Ozs7CiszMzJCO1NRVUFSRSBQQUFTRU5UTztTbzswO0w7PHNxdWFyZT4gMzBEMSAzMEZDIDMwQkIgMzBGMyAzMEM4Ozs7O047U1FVQVJFRCBQQUFTRU5UTzs7OzsKKzMzMkM7U1FVQVJFIFBBQVRVO1NvOzA7TDs8c3F1YXJlPiAzMEQxIDMwRkMgMzBDNDs7OztOO1NRVUFSRUQgUEFBVFU7Ozs7CiszMzJEO1NRVUFSRSBCQUFSRVJVO1NvOzA7TDs8c3F1YXJlPiAzMEQwIDMwRkMgMzBFQyAzMEVCOzs7O047U1FVQVJFRCBCQUFSRVJVOzs7OworMzMyRTtTUVVBUkUgUElBU1VUT1JVO1NvOzA7TDs8c3F1YXJlPiAzMEQ0IDMwQTIgMzBCOSAzMEM4IDMwRUI7Ozs7TjtTUVVBUkVEIFBJQVNVVE9SVTs7OzsKKzMzMkY7U1FVQVJFIFBJS1VSVTtTbzswO0w7PHNxdWFyZT4gMzBENCAzMEFGIDMwRUI7Ozs7TjtTUVVBUkVEIFBJS1VSVTs7OzsKKzMzMzA7U1FVQVJFIFBJS087U287MDtMOzxzcXVhcmU+IDMwRDQgMzBCMzs7OztOO1NRVUFSRUQgUElLTzs7OzsKKzMzMzE7U1FVQVJFIEJJUlU7U287MDtMOzxzcXVhcmU+IDMwRDMgMzBFQjs7OztOO1NRVUFSRUQgQklSVTs7OzsKKzMzMzI7U1FVQVJFIEhVQVJBRERPO1NvOzA7TDs8c3F1YXJlPiAzMEQ1IDMwQTEgMzBFOSAzMEMzIDMwQzk7Ozs7TjtTUVVBUkVEIEhVQVJBRERPOzs7OworMzMzMztTUVVBUkUgSFVJSVRPO1NvOzA7TDs8c3F1YXJlPiAzMEQ1IDMwQTMgMzBGQyAzMEM4Ozs7O047U1FVQVJFRCBIVUlJVE87Ozs7CiszMzM0O1NRVUFSRSBCVVNTWUVSVTtTbzswO0w7PHNxdWFyZT4gMzBENiAzMEMzIDMwQjcgMzBBNyAzMEVCOzs7O047U1FVQVJFRCBCVVNTWUVSVTs7OzsKKzMzMzU7U1FVQVJFIEhVUkFOO1NvOzA7TDs8c3F1YXJlPiAzMEQ1IDMwRTkgMzBGMzs7OztOO1NRVUFSRUQgSFVSQU47Ozs7CiszMzM2O1NRVUFSRSBIRUtVVEFBUlU7U287MDtMOzxzcXVhcmU+IDMwRDggMzBBRiAzMEJGIDMwRkMgMzBFQjs7OztOO1NRVUFSRUQgSEVLVVRBQVJVOzs7OworMzMzNztTUVVBUkUgUEVTTztTbzswO0w7PHNxdWFyZT4gMzBEQSAzMEJEOzs7O047U1FVQVJFRCBQRVNPOzs7OworMzMzODtTUVVBUkUgUEVOSUhJO1NvOzA7TDs8c3F1YXJlPiAzMERBIDMwQ0IgMzBEMjs7OztOO1NRVUFSRUQgUEVOSUhJOzs7OworMzMzOTtTUVVBUkUgSEVSVVRVO1NvOzA7TDs8c3F1YXJlPiAzMEQ4IDMwRUIgMzBDNDs7OztOO1NRVUFSRUQgSEVSVVRVOzs7OworMzMzQTtTUVVBUkUgUEVOU1U7U287MDtMOzxzcXVhcmU+IDMwREEgMzBGMyAzMEI5Ozs7O047U1FVQVJFRCBQRU5TVTs7OzsKKzMzM0I7U1FVQVJFIFBFRVpJO1NvOzA7TDs8c3F1YXJlPiAzMERBIDMwRkMgMzBCODs7OztOO1NRVUFSRUQgUEVFWkk7Ozs7CiszMzNDO1NRVUFSRSBCRUVUQTtTbzswO0w7PHNxdWFyZT4gMzBEOSAzMEZDIDMwQkY7Ozs7TjtTUVVBUkVEIEJFRVRBOzs7OworMzMzRDtTUVVBUkUgUE9JTlRPO1NvOzA7TDs8c3F1YXJlPiAzMEREIDMwQTQgMzBGMyAzMEM4Ozs7O047U1FVQVJFRCBQT0lOVE87Ozs7CiszMzNFO1NRVUFSRSBCT1JVVE87U287MDtMOzxzcXVhcmU+IDMwREMgMzBFQiAzMEM4Ozs7O047U1FVQVJFRCBCT1JVVE87Ozs7CiszMzNGO1NRVUFSRSBIT047U287MDtMOzxzcXVhcmU+IDMwREIgMzBGMzs7OztOO1NRVUFSRUQgSE9OOzs7OworMzM0MDtTUVVBUkUgUE9ORE87U287MDtMOzxzcXVhcmU+IDMwREQgMzBGMyAzMEM5Ozs7O047U1FVQVJFRCBQT05ETzs7OzsKKzMzNDE7U1FVQVJFIEhPT1JVO1NvOzA7TDs8c3F1YXJlPiAzMERCIDMwRkMgMzBFQjs7OztOO1NRVUFSRUQgSE9PUlU7Ozs7CiszMzQyO1NRVUFSRSBIT09OO1NvOzA7TDs8c3F1YXJlPiAzMERCIDMwRkMgMzBGMzs7OztOO1NRVUFSRUQgSE9PTjs7OzsKKzMzNDM7U1FVQVJFIE1BSUtVUk87U287MDtMOzxzcXVhcmU+IDMwREUgMzBBNCAzMEFGIDMwRUQ7Ozs7TjtTUVVBUkVEIE1BSUtVUk87Ozs7CiszMzQ0O1NRVUFSRSBNQUlSVTtTbzswO0w7PHNxdWFyZT4gMzBERSAzMEE0IDMwRUI7Ozs7TjtTUVVBUkVEIE1BSVJVOzs7OworMzM0NTtTUVVBUkUgTUFISEE7U287MDtMOzxzcXVhcmU+IDMwREUgMzBDMyAzMENGOzs7O047U1FVQVJFRCBNQUhIQTs7OzsKKzMzNDY7U1FVQVJFIE1BUlVLVTtTbzswO0w7PHNxdWFyZT4gMzBERSAzMEVCIDMwQUY7Ozs7TjtTUVVBUkVEIE1BUlVLVTs7OzsKKzMzNDc7U1FVQVJFIE1BTlNZT047U287MDtMOzxzcXVhcmU+IDMwREUgMzBGMyAzMEI3IDMwRTcgMzBGMzs7OztOO1NRVUFSRUQgTUFOU1lPTjs7OzsKKzMzNDg7U1FVQVJFIE1JS1VST047U287MDtMOzxzcXVhcmU+IDMwREYgMzBBRiAzMEVEIDMwRjM7Ozs7TjtTUVVBUkVEIE1JS1VST047Ozs7CiszMzQ5O1NRVUFSRSBNSVJJO1NvOzA7TDs8c3F1YXJlPiAzMERGIDMwRUE7Ozs7TjtTUVVBUkVEIE1JUkk7Ozs7CiszMzRBO1NRVUFSRSBNSVJJQkFBUlU7U287MDtMOzxzcXVhcmU+IDMwREYgMzBFQSAzMEQwIDMwRkMgMzBFQjs7OztOO1NRVUFSRUQgTUlSSUJBQVJVOzs7OworMzM0QjtTUVVBUkUgTUVHQTtTbzswO0w7PHNxdWFyZT4gMzBFMSAzMEFDOzs7O047U1FVQVJFRCBNRUdBOzs7OworMzM0QztTUVVBUkUgTUVHQVRPTjtTbzswO0w7PHNxdWFyZT4gMzBFMSAzMEFDIDMwQzggMzBGMzs7OztOO1NRVUFSRUQgTUVHQVRPTjs7OzsKKzMzNEQ7U1FVQVJFIE1FRVRPUlU7U287MDtMOzxzcXVhcmU+IDMwRTEgMzBGQyAzMEM4IDMwRUI7Ozs7TjtTUVVBUkVEIE1FRVRPUlU7Ozs7CiszMzRFO1NRVUFSRSBZQUFETztTbzswO0w7PHNxdWFyZT4gMzBFNCAzMEZDIDMwQzk7Ozs7TjtTUVVBUkVEIFlBQURPOzs7OworMzM0RjtTUVVBUkUgWUFBUlU7U287MDtMOzxzcXVhcmU+IDMwRTQgMzBGQyAzMEVCOzs7O047U1FVQVJFRCBZQUFSVTs7OzsKKzMzNTA7U1FVQVJFIFlVQU47U287MDtMOzxzcXVhcmU+IDMwRTYgMzBBMiAzMEYzOzs7O047U1FVQVJFRCBZVUFOOzs7OworMzM1MTtTUVVBUkUgUklUVE9SVTtTbzswO0w7PHNxdWFyZT4gMzBFQSAzMEMzIDMwQzggMzBFQjs7OztOO1NRVUFSRUQgUklUVE9SVTs7OzsKKzMzNTI7U1FVQVJFIFJJUkE7U287MDtMOzxzcXVhcmU+IDMwRUEgMzBFOTs7OztOO1NRVUFSRUQgUklSQTs7OzsKKzMzNTM7U1FVQVJFIFJVUElJO1NvOzA7TDs8c3F1YXJlPiAzMEVCIDMwRDQgMzBGQzs7OztOO1NRVUFSRUQgUlVQSUk7Ozs7CiszMzU0O1NRVUFSRSBSVVVCVVJVO1NvOzA7TDs8c3F1YXJlPiAzMEVCIDMwRkMgMzBENiAzMEVCOzs7O047U1FVQVJFRCBSVVVCVVJVOzs7OworMzM1NTtTUVVBUkUgUkVNVTtTbzswO0w7PHNxdWFyZT4gMzBFQyAzMEUwOzs7O047U1FVQVJFRCBSRU1VOzs7OworMzM1NjtTUVVBUkUgUkVOVE9HRU47U287MDtMOzxzcXVhcmU+IDMwRUMgMzBGMyAzMEM4IDMwQjIgMzBGMzs7OztOO1NRVUFSRUQgUkVOVE9HRU47Ozs7CiszMzU3O1NRVUFSRSBXQVRUTztTbzswO0w7PHNxdWFyZT4gMzBFRiAzMEMzIDMwQzg7Ozs7TjtTUVVBUkVEIFdBVFRPOzs7OworMzM1ODtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFpFUk87U287MDtMOzxjb21wYXQ+IDAwMzAgNzBCOTs7OztOOzs7OzsKKzMzNTk7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBPTkU7U287MDtMOzxjb21wYXQ+IDAwMzEgNzBCOTs7OztOOzs7OzsKKzMzNUE7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBUV087U287MDtMOzxjb21wYXQ+IDAwMzIgNzBCOTs7OztOOzs7OzsKKzMzNUI7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBUSFJFRTtTbzswO0w7PGNvbXBhdD4gMDAzMyA3MEI5Ozs7O047Ozs7OworMzM1QztJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIEZPVVI7U287MDtMOzxjb21wYXQ+IDAwMzQgNzBCOTs7OztOOzs7OzsKKzMzNUQ7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBGSVZFO1NvOzA7TDs8Y29tcGF0PiAwMDM1IDcwQjk7Ozs7Tjs7Ozs7CiszMzVFO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgU0lYO1NvOzA7TDs8Y29tcGF0PiAwMDM2IDcwQjk7Ozs7Tjs7Ozs7CiszMzVGO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgU0VWRU47U287MDtMOzxjb21wYXQ+IDAwMzcgNzBCOTs7OztOOzs7OzsKKzMzNjA7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBFSUdIVDtTbzswO0w7PGNvbXBhdD4gMDAzOCA3MEI5Ozs7O047Ozs7OworMzM2MTtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIE5JTkU7U287MDtMOzxjb21wYXQ+IDAwMzkgNzBCOTs7OztOOzs7OzsKKzMzNjI7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBURU47U287MDtMOzxjb21wYXQ+IDAwMzEgMDAzMCA3MEI5Ozs7O047Ozs7OworMzM2MztJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIEVMRVZFTjtTbzswO0w7PGNvbXBhdD4gMDAzMSAwMDMxIDcwQjk7Ozs7Tjs7Ozs7CiszMzY0O0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgVFdFTFZFO1NvOzA7TDs8Y29tcGF0PiAwMDMxIDAwMzIgNzBCOTs7OztOOzs7OzsKKzMzNjU7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBUSElSVEVFTjtTbzswO0w7PGNvbXBhdD4gMDAzMSAwMDMzIDcwQjk7Ozs7Tjs7Ozs7CiszMzY2O0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgRk9VUlRFRU47U287MDtMOzxjb21wYXQ+IDAwMzEgMDAzNCA3MEI5Ozs7O047Ozs7OworMzM2NztJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIEZJRlRFRU47U287MDtMOzxjb21wYXQ+IDAwMzEgMDAzNSA3MEI5Ozs7O047Ozs7OworMzM2ODtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFNJWFRFRU47U287MDtMOzxjb21wYXQ+IDAwMzEgMDAzNiA3MEI5Ozs7O047Ozs7OworMzM2OTtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFNFVkVOVEVFTjtTbzswO0w7PGNvbXBhdD4gMDAzMSAwMDM3IDcwQjk7Ozs7Tjs7Ozs7CiszMzZBO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgRUlHSFRFRU47U287MDtMOzxjb21wYXQ+IDAwMzEgMDAzOCA3MEI5Ozs7O047Ozs7OworMzM2QjtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIE5JTkVURUVOO1NvOzA7TDs8Y29tcGF0PiAwMDMxIDAwMzkgNzBCOTs7OztOOzs7OzsKKzMzNkM7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgSE9VUiBUV0VOVFk7U287MDtMOzxjb21wYXQ+IDAwMzIgMDAzMCA3MEI5Ozs7O047Ozs7OworMzM2RDtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFRXRU5UWS1PTkU7U287MDtMOzxjb21wYXQ+IDAwMzIgMDAzMSA3MEI5Ozs7O047Ozs7OworMzM2RTtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFRXRU5UWS1UV087U287MDtMOzxjb21wYXQ+IDAwMzIgMDAzMiA3MEI5Ozs7O047Ozs7OworMzM2RjtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBIT1VSIFRXRU5UWS1USFJFRTtTbzswO0w7PGNvbXBhdD4gMDAzMiAwMDMzIDcwQjk7Ozs7Tjs7Ozs7CiszMzcwO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIEhPVVIgVFdFTlRZLUZPVVI7U287MDtMOzxjb21wYXQ+IDAwMzIgMDAzNCA3MEI5Ozs7O047Ozs7OworMzM3MTtTUVVBUkUgSFBBO1NvOzA7TDs8c3F1YXJlPiAwMDY4IDAwNTAgMDA2MTs7OztOOzs7OzsKKzMzNzI7U1FVQVJFIERBO1NvOzA7TDs8c3F1YXJlPiAwMDY0IDAwNjE7Ozs7Tjs7Ozs7CiszMzczO1NRVUFSRSBBVTtTbzswO0w7PHNxdWFyZT4gMDA0MSAwMDU1Ozs7O047Ozs7OworMzM3NDtTUVVBUkUgQkFSO1NvOzA7TDs8c3F1YXJlPiAwMDYyIDAwNjEgMDA3Mjs7OztOOzs7OzsKKzMzNzU7U1FVQVJFIE9WO1NvOzA7TDs8c3F1YXJlPiAwMDZGIDAwNTY7Ozs7Tjs7Ozs7CiszMzc2O1NRVUFSRSBQQztTbzswO0w7PHNxdWFyZT4gMDA3MCAwMDYzOzs7O047Ozs7OworMzM3QjtTUVVBUkUgRVJBIE5BTUUgSEVJU0VJO1NvOzA7TDs8c3F1YXJlPiA1RTczIDYyMTA7Ozs7TjtTUVVBUkVEIFRXTyBJREVPR1JBUEhTIEVSQSBOQU1FIEhFSVNFSTs7OzsKKzMzN0M7U1FVQVJFIEVSQSBOQU1FIFNZT1VXQTtTbzswO0w7PHNxdWFyZT4gNjYyRCA1NDhDOzs7O047U1FVQVJFRCBUV08gSURFT0dSQVBIUyBFUkEgTkFNRSBTWU9VV0E7Ozs7CiszMzdEO1NRVUFSRSBFUkEgTkFNRSBUQUlTWU9VO1NvOzA7TDs8c3F1YXJlPiA1OTI3IDZCNjM7Ozs7TjtTUVVBUkVEIFRXTyBJREVPR1JBUEhTIEVSQSBOQU1FIFRBSVNZT1U7Ozs7CiszMzdFO1NRVUFSRSBFUkEgTkFNRSBNRUlaSTtTbzswO0w7PHNxdWFyZT4gNjYwRSA2Q0JCOzs7O047U1FVQVJFRCBUV08gSURFT0dSQVBIUyBFUkEgTkFNRSBNRUlaSTs7OzsKKzMzN0Y7U1FVQVJFIENPUlBPUkFUSU9OO1NvOzA7TDs8c3F1YXJlPiA2ODJBIDVGMEYgNEYxQSA3OTNFOzs7O047U1FVQVJFRCBGT1VSIElERU9HUkFQSFMgQ09SUE9SQVRJT047Ozs7CiszMzgwO1NRVUFSRSBQQSBBTVBTO1NvOzA7TDs8c3F1YXJlPiAwMDcwIDAwNDE7Ozs7TjtTUVVBUkVEIFBBIEFNUFM7Ozs7CiszMzgxO1NRVUFSRSBOQTtTbzswO0w7PHNxdWFyZT4gMDA2RSAwMDQxOzs7O047U1FVQVJFRCBOQTs7OzsKKzMzODI7U1FVQVJFIE1VIEE7U287MDtMOzxzcXVhcmU+IDAzQkMgMDA0MTs7OztOO1NRVUFSRUQgTVUgQTs7OzsKKzMzODM7U1FVQVJFIE1BO1NvOzA7TDs8c3F1YXJlPiAwMDZEIDAwNDE7Ozs7TjtTUVVBUkVEIE1BOzs7OworMzM4NDtTUVVBUkUgS0E7U287MDtMOzxzcXVhcmU+IDAwNkIgMDA0MTs7OztOO1NRVUFSRUQgS0E7Ozs7CiszMzg1O1NRVUFSRSBLQjtTbzswO0w7PHNxdWFyZT4gMDA0QiAwMDQyOzs7O047U1FVQVJFRCBLQjs7OzsKKzMzODY7U1FVQVJFIE1CO1NvOzA7TDs8c3F1YXJlPiAwMDREIDAwNDI7Ozs7TjtTUVVBUkVEIE1COzs7OworMzM4NztTUVVBUkUgR0I7U287MDtMOzxzcXVhcmU+IDAwNDcgMDA0Mjs7OztOO1NRVUFSRUQgR0I7Ozs7CiszMzg4O1NRVUFSRSBDQUw7U287MDtMOzxzcXVhcmU+IDAwNjMgMDA2MSAwMDZDOzs7O047U1FVQVJFRCBDQUw7Ozs7CiszMzg5O1NRVUFSRSBLQ0FMO1NvOzA7TDs8c3F1YXJlPiAwMDZCIDAwNjMgMDA2MSAwMDZDOzs7O047U1FVQVJFRCBLQ0FMOzs7OworMzM4QTtTUVVBUkUgUEY7U287MDtMOzxzcXVhcmU+IDAwNzAgMDA0Njs7OztOO1NRVUFSRUQgUEY7Ozs7CiszMzhCO1NRVUFSRSBORjtTbzswO0w7PHNxdWFyZT4gMDA2RSAwMDQ2Ozs7O047U1FVQVJFRCBORjs7OzsKKzMzOEM7U1FVQVJFIE1VIEY7U287MDtMOzxzcXVhcmU+IDAzQkMgMDA0Njs7OztOO1NRVUFSRUQgTVUgRjs7OzsKKzMzOEQ7U1FVQVJFIE1VIEc7U287MDtMOzxzcXVhcmU+IDAzQkMgMDA2Nzs7OztOO1NRVUFSRUQgTVUgRzs7OzsKKzMzOEU7U1FVQVJFIE1HO1NvOzA7TDs8c3F1YXJlPiAwMDZEIDAwNjc7Ozs7TjtTUVVBUkVEIE1HOzs7OworMzM4RjtTUVVBUkUgS0c7U287MDtMOzxzcXVhcmU+IDAwNkIgMDA2Nzs7OztOO1NRVUFSRUQgS0c7Ozs7CiszMzkwO1NRVUFSRSBIWjtTbzswO0w7PHNxdWFyZT4gMDA0OCAwMDdBOzs7O047U1FVQVJFRCBIWjs7OzsKKzMzOTE7U1FVQVJFIEtIWjtTbzswO0w7PHNxdWFyZT4gMDA2QiAwMDQ4IDAwN0E7Ozs7TjtTUVVBUkVEIEtIWjs7OzsKKzMzOTI7U1FVQVJFIE1IWjtTbzswO0w7PHNxdWFyZT4gMDA0RCAwMDQ4IDAwN0E7Ozs7TjtTUVVBUkVEIE1IWjs7OzsKKzMzOTM7U1FVQVJFIEdIWjtTbzswO0w7PHNxdWFyZT4gMDA0NyAwMDQ4IDAwN0E7Ozs7TjtTUVVBUkVEIEdIWjs7OzsKKzMzOTQ7U1FVQVJFIFRIWjtTbzswO0w7PHNxdWFyZT4gMDA1NCAwMDQ4IDAwN0E7Ozs7TjtTUVVBUkVEIFRIWjs7OzsKKzMzOTU7U1FVQVJFIE1VIEw7U287MDtMOzxzcXVhcmU+IDAzQkMgMjExMzs7OztOO1NRVUFSRUQgTVUgTDs7OzsKKzMzOTY7U1FVQVJFIE1MO1NvOzA7TDs8c3F1YXJlPiAwMDZEIDIxMTM7Ozs7TjtTUVVBUkVEIE1MOzs7OworMzM5NztTUVVBUkUgREw7U287MDtMOzxzcXVhcmU+IDAwNjQgMjExMzs7OztOO1NRVUFSRUQgREw7Ozs7CiszMzk4O1NRVUFSRSBLTDtTbzswO0w7PHNxdWFyZT4gMDA2QiAyMTEzOzs7O047U1FVQVJFRCBLTDs7OzsKKzMzOTk7U1FVQVJFIEZNO1NvOzA7TDs8c3F1YXJlPiAwMDY2IDAwNkQ7Ozs7TjtTUVVBUkVEIEZNOzs7OworMzM5QTtTUVVBUkUgTk07U287MDtMOzxzcXVhcmU+IDAwNkUgMDA2RDs7OztOO1NRVUFSRUQgTk07Ozs7CiszMzlCO1NRVUFSRSBNVSBNO1NvOzA7TDs8c3F1YXJlPiAwM0JDIDAwNkQ7Ozs7TjtTUVVBUkVEIE1VIE07Ozs7CiszMzlDO1NRVUFSRSBNTTtTbzswO0w7PHNxdWFyZT4gMDA2RCAwMDZEOzs7O047U1FVQVJFRCBNTTs7OzsKKzMzOUQ7U1FVQVJFIENNO1NvOzA7TDs8c3F1YXJlPiAwMDYzIDAwNkQ7Ozs7TjtTUVVBUkVEIENNOzs7OworMzM5RTtTUVVBUkUgS007U287MDtMOzxzcXVhcmU+IDAwNkIgMDA2RDs7OztOO1NRVUFSRUQgS007Ozs7CiszMzlGO1NRVUFSRSBNTSBTUVVBUkVEO1NvOzA7TDs8c3F1YXJlPiAwMDZEIDAwNkQgMDBCMjs7OztOO1NRVUFSRUQgTU0gU1FVQVJFRDs7OzsKKzMzQTA7U1FVQVJFIENNIFNRVUFSRUQ7U287MDtMOzxzcXVhcmU+IDAwNjMgMDA2RCAwMEIyOzs7O047U1FVQVJFRCBDTSBTUVVBUkVEOzs7OworMzNBMTtTUVVBUkUgTSBTUVVBUkVEO1NvOzA7TDs8c3F1YXJlPiAwMDZEIDAwQjI7Ozs7TjtTUVVBUkVEIE0gU1FVQVJFRDs7OzsKKzMzQTI7U1FVQVJFIEtNIFNRVUFSRUQ7U287MDtMOzxzcXVhcmU+IDAwNkIgMDA2RCAwMEIyOzs7O047U1FVQVJFRCBLTSBTUVVBUkVEOzs7OworMzNBMztTUVVBUkUgTU0gQ1VCRUQ7U287MDtMOzxzcXVhcmU+IDAwNkQgMDA2RCAwMEIzOzs7O047U1FVQVJFRCBNTSBDVUJFRDs7OzsKKzMzQTQ7U1FVQVJFIENNIENVQkVEO1NvOzA7TDs8c3F1YXJlPiAwMDYzIDAwNkQgMDBCMzs7OztOO1NRVUFSRUQgQ00gQ1VCRUQ7Ozs7CiszM0E1O1NRVUFSRSBNIENVQkVEO1NvOzA7TDs8c3F1YXJlPiAwMDZEIDAwQjM7Ozs7TjtTUVVBUkVEIE0gQ1VCRUQ7Ozs7CiszM0E2O1NRVUFSRSBLTSBDVUJFRDtTbzswO0w7PHNxdWFyZT4gMDA2QiAwMDZEIDAwQjM7Ozs7TjtTUVVBUkVEIEtNIENVQkVEOzs7OworMzNBNztTUVVBUkUgTSBPVkVSIFM7U287MDtMOzxzcXVhcmU+IDAwNkQgMjIxNSAwMDczOzs7O047U1FVQVJFRCBNIE9WRVIgUzs7OzsKKzMzQTg7U1FVQVJFIE0gT1ZFUiBTIFNRVUFSRUQ7U287MDtMOzxzcXVhcmU+IDAwNkQgMjIxNSAwMDczIDAwQjI7Ozs7TjtTUVVBUkVEIE0gT1ZFUiBTIFNRVUFSRUQ7Ozs7CiszM0E5O1NRVUFSRSBQQTtTbzswO0w7PHNxdWFyZT4gMDA1MCAwMDYxOzs7O047U1FVQVJFRCBQQTs7OzsKKzMzQUE7U1FVQVJFIEtQQTtTbzswO0w7PHNxdWFyZT4gMDA2QiAwMDUwIDAwNjE7Ozs7TjtTUVVBUkVEIEtQQTs7OzsKKzMzQUI7U1FVQVJFIE1QQTtTbzswO0w7PHNxdWFyZT4gMDA0RCAwMDUwIDAwNjE7Ozs7TjtTUVVBUkVEIE1QQTs7OzsKKzMzQUM7U1FVQVJFIEdQQTtTbzswO0w7PHNxdWFyZT4gMDA0NyAwMDUwIDAwNjE7Ozs7TjtTUVVBUkVEIEdQQTs7OzsKKzMzQUQ7U1FVQVJFIFJBRDtTbzswO0w7PHNxdWFyZT4gMDA3MiAwMDYxIDAwNjQ7Ozs7TjtTUVVBUkVEIFJBRDs7OzsKKzMzQUU7U1FVQVJFIFJBRCBPVkVSIFM7U287MDtMOzxzcXVhcmU+IDAwNzIgMDA2MSAwMDY0IDIyMTUgMDA3Mzs7OztOO1NRVUFSRUQgUkFEIE9WRVIgUzs7OzsKKzMzQUY7U1FVQVJFIFJBRCBPVkVSIFMgU1FVQVJFRDtTbzswO0w7PHNxdWFyZT4gMDA3MiAwMDYxIDAwNjQgMjIxNSAwMDczIDAwQjI7Ozs7TjtTUVVBUkVEIFJBRCBPVkVSIFMgU1FVQVJFRDs7OzsKKzMzQjA7U1FVQVJFIFBTO1NvOzA7TDs8c3F1YXJlPiAwMDcwIDAwNzM7Ozs7TjtTUVVBUkVEIFBTOzs7OworMzNCMTtTUVVBUkUgTlM7U287MDtMOzxzcXVhcmU+IDAwNkUgMDA3Mzs7OztOO1NRVUFSRUQgTlM7Ozs7CiszM0IyO1NRVUFSRSBNVSBTO1NvOzA7TDs8c3F1YXJlPiAwM0JDIDAwNzM7Ozs7TjtTUVVBUkVEIE1VIFM7Ozs7CiszM0IzO1NRVUFSRSBNUztTbzswO0w7PHNxdWFyZT4gMDA2RCAwMDczOzs7O047U1FVQVJFRCBNUzs7OzsKKzMzQjQ7U1FVQVJFIFBWO1NvOzA7TDs8c3F1YXJlPiAwMDcwIDAwNTY7Ozs7TjtTUVVBUkVEIFBWOzs7OworMzNCNTtTUVVBUkUgTlY7U287MDtMOzxzcXVhcmU+IDAwNkUgMDA1Njs7OztOO1NRVUFSRUQgTlY7Ozs7CiszM0I2O1NRVUFSRSBNVSBWO1NvOzA7TDs8c3F1YXJlPiAwM0JDIDAwNTY7Ozs7TjtTUVVBUkVEIE1VIFY7Ozs7CiszM0I3O1NRVUFSRSBNVjtTbzswO0w7PHNxdWFyZT4gMDA2RCAwMDU2Ozs7O047U1FVQVJFRCBNVjs7OzsKKzMzQjg7U1FVQVJFIEtWO1NvOzA7TDs8c3F1YXJlPiAwMDZCIDAwNTY7Ozs7TjtTUVVBUkVEIEtWOzs7OworMzNCOTtTUVVBUkUgTVYgTUVHQTtTbzswO0w7PHNxdWFyZT4gMDA0RCAwMDU2Ozs7O047U1FVQVJFRCBNViBNRUdBOzs7OworMzNCQTtTUVVBUkUgUFc7U287MDtMOzxzcXVhcmU+IDAwNzAgMDA1Nzs7OztOO1NRVUFSRUQgUFc7Ozs7CiszM0JCO1NRVUFSRSBOVztTbzswO0w7PHNxdWFyZT4gMDA2RSAwMDU3Ozs7O047U1FVQVJFRCBOVzs7OzsKKzMzQkM7U1FVQVJFIE1VIFc7U287MDtMOzxzcXVhcmU+IDAzQkMgMDA1Nzs7OztOO1NRVUFSRUQgTVUgVzs7OzsKKzMzQkQ7U1FVQVJFIE1XO1NvOzA7TDs8c3F1YXJlPiAwMDZEIDAwNTc7Ozs7TjtTUVVBUkVEIE1XOzs7OworMzNCRTtTUVVBUkUgS1c7U287MDtMOzxzcXVhcmU+IDAwNkIgMDA1Nzs7OztOO1NRVUFSRUQgS1c7Ozs7CiszM0JGO1NRVUFSRSBNVyBNRUdBO1NvOzA7TDs8c3F1YXJlPiAwMDREIDAwNTc7Ozs7TjtTUVVBUkVEIE1XIE1FR0E7Ozs7CiszM0MwO1NRVUFSRSBLIE9ITTtTbzswO0w7PHNxdWFyZT4gMDA2QiAwM0E5Ozs7O047U1FVQVJFRCBLIE9ITTs7OzsKKzMzQzE7U1FVQVJFIE0gT0hNO1NvOzA7TDs8c3F1YXJlPiAwMDREIDAzQTk7Ozs7TjtTUVVBUkVEIE0gT0hNOzs7OworMzNDMjtTUVVBUkUgQU07U287MDtMOzxzcXVhcmU+IDAwNjEgMDAyRSAwMDZEIDAwMkU7Ozs7TjtTUVVBUkVEIEFNOzs7OworMzNDMztTUVVBUkUgQlE7U287MDtMOzxzcXVhcmU+IDAwNDIgMDA3MTs7OztOO1NRVUFSRUQgQlE7Ozs7CiszM0M0O1NRVUFSRSBDQztTbzswO0w7PHNxdWFyZT4gMDA2MyAwMDYzOzs7O047U1FVQVJFRCBDQzs7OzsKKzMzQzU7U1FVQVJFIENEO1NvOzA7TDs8c3F1YXJlPiAwMDYzIDAwNjQ7Ozs7TjtTUVVBUkVEIENEOzs7OworMzNDNjtTUVVBUkUgQyBPVkVSIEtHO1NvOzA7TDs8c3F1YXJlPiAwMDQzIDIyMTUgMDA2QiAwMDY3Ozs7O047U1FVQVJFRCBDIE9WRVIgS0c7Ozs7CiszM0M3O1NRVUFSRSBDTztTbzswO0w7PHNxdWFyZT4gMDA0MyAwMDZGIDAwMkU7Ozs7TjtTUVVBUkVEIENPOzs7OworMzNDODtTUVVBUkUgREI7U287MDtMOzxzcXVhcmU+IDAwNjQgMDA0Mjs7OztOO1NRVUFSRUQgREI7Ozs7CiszM0M5O1NRVUFSRSBHWTtTbzswO0w7PHNxdWFyZT4gMDA0NyAwMDc5Ozs7O047U1FVQVJFRCBHWTs7OzsKKzMzQ0E7U1FVQVJFIEhBO1NvOzA7TDs8c3F1YXJlPiAwMDY4IDAwNjE7Ozs7TjtTUVVBUkVEIEhBOzs7OworMzNDQjtTUVVBUkUgSFA7U287MDtMOzxzcXVhcmU+IDAwNDggMDA1MDs7OztOO1NRVUFSRUQgSFA7Ozs7CiszM0NDO1NRVUFSRSBJTjtTbzswO0w7PHNxdWFyZT4gMDA2OSAwMDZFOzs7O047U1FVQVJFRCBJTjs7OzsKKzMzQ0Q7U1FVQVJFIEtLO1NvOzA7TDs8c3F1YXJlPiAwMDRCIDAwNEI7Ozs7TjtTUVVBUkVEIEtLOzs7OworMzNDRTtTUVVBUkUgS00gQ0FQSVRBTDtTbzswO0w7PHNxdWFyZT4gMDA0QiAwMDREOzs7O047U1FVQVJFRCBLTSBDQVBJVEFMOzs7OworMzNDRjtTUVVBUkUgS1Q7U287MDtMOzxzcXVhcmU+IDAwNkIgMDA3NDs7OztOO1NRVUFSRUQgS1Q7Ozs7CiszM0QwO1NRVUFSRSBMTTtTbzswO0w7PHNxdWFyZT4gMDA2QyAwMDZEOzs7O047U1FVQVJFRCBMTTs7OzsKKzMzRDE7U1FVQVJFIExOO1NvOzA7TDs8c3F1YXJlPiAwMDZDIDAwNkU7Ozs7TjtTUVVBUkVEIExOOzs7OworMzNEMjtTUVVBUkUgTE9HO1NvOzA7TDs8c3F1YXJlPiAwMDZDIDAwNkYgMDA2Nzs7OztOO1NRVUFSRUQgTE9HOzs7OworMzNEMztTUVVBUkUgTFg7U287MDtMOzxzcXVhcmU+IDAwNkMgMDA3ODs7OztOO1NRVUFSRUQgTFg7Ozs7CiszM0Q0O1NRVUFSRSBNQiBTTUFMTDtTbzswO0w7PHNxdWFyZT4gMDA2RCAwMDYyOzs7O047U1FVQVJFRCBNQiBTTUFMTDs7OzsKKzMzRDU7U1FVQVJFIE1JTDtTbzswO0w7PHNxdWFyZT4gMDA2RCAwMDY5IDAwNkM7Ozs7TjtTUVVBUkVEIE1JTDs7OzsKKzMzRDY7U1FVQVJFIE1PTDtTbzswO0w7PHNxdWFyZT4gMDA2RCAwMDZGIDAwNkM7Ozs7TjtTUVVBUkVEIE1PTDs7OzsKKzMzRDc7U1FVQVJFIFBIO1NvOzA7TDs8c3F1YXJlPiAwMDUwIDAwNDg7Ozs7TjtTUVVBUkVEIFBIOzs7OworMzNEODtTUVVBUkUgUE07U287MDtMOzxzcXVhcmU+IDAwNzAgMDAyRSAwMDZEIDAwMkU7Ozs7TjtTUVVBUkVEIFBNOzs7OworMzNEOTtTUVVBUkUgUFBNO1NvOzA7TDs8c3F1YXJlPiAwMDUwIDAwNTAgMDA0RDs7OztOO1NRVUFSRUQgUFBNOzs7OworMzNEQTtTUVVBUkUgUFI7U287MDtMOzxzcXVhcmU+IDAwNTAgMDA1Mjs7OztOO1NRVUFSRUQgUFI7Ozs7CiszM0RCO1NRVUFSRSBTUjtTbzswO0w7PHNxdWFyZT4gMDA3MyAwMDcyOzs7O047U1FVQVJFRCBTUjs7OzsKKzMzREM7U1FVQVJFIFNWO1NvOzA7TDs8c3F1YXJlPiAwMDUzIDAwNzY7Ozs7TjtTUVVBUkVEIFNWOzs7OworMzNERDtTUVVBUkUgV0I7U287MDtMOzxzcXVhcmU+IDAwNTcgMDA2Mjs7OztOO1NRVUFSRUQgV0I7Ozs7CiszM0UwO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBPTkU7U287MDtMOzxjb21wYXQ+IDAwMzEgNjVFNTs7OztOOzs7OzsKKzMzRTE7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXTztTbzswO0w7PGNvbXBhdD4gMDAzMiA2NUU1Ozs7O047Ozs7OworMzNFMjtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVEhSRUU7U287MDtMOzxjb21wYXQ+IDAwMzMgNjVFNTs7OztOOzs7OzsKKzMzRTM7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIEZPVVI7U287MDtMOzxjb21wYXQ+IDAwMzQgNjVFNTs7OztOOzs7OzsKKzMzRTQ7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIEZJVkU7U287MDtMOzxjb21wYXQ+IDAwMzUgNjVFNTs7OztOOzs7OzsKKzMzRTU7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFNJWDtTbzswO0w7PGNvbXBhdD4gMDAzNiA2NUU1Ozs7O047Ozs7OworMzNFNjtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgU0VWRU47U287MDtMOzxjb21wYXQ+IDAwMzcgNjVFNTs7OztOOzs7OzsKKzMzRTc7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIEVJR0hUO1NvOzA7TDs8Y29tcGF0PiAwMDM4IDY1RTU7Ozs7Tjs7Ozs7CiszM0U4O0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBOSU5FO1NvOzA7TDs8Y29tcGF0PiAwMDM5IDY1RTU7Ozs7Tjs7Ozs7CiszM0U5O0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBURU47U287MDtMOzxjb21wYXQ+IDAwMzEgMDAzMCA2NUU1Ozs7O047Ozs7OworMzNFQTtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgRUxFVkVOO1NvOzA7TDs8Y29tcGF0PiAwMDMxIDAwMzEgNjVFNTs7OztOOzs7OzsKKzMzRUI7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRUxWRTtTbzswO0w7PGNvbXBhdD4gMDAzMSAwMDMyIDY1RTU7Ozs7Tjs7Ozs7CiszM0VDO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUSElSVEVFTjtTbzswO0w7PGNvbXBhdD4gMDAzMSAwMDMzIDY1RTU7Ozs7Tjs7Ozs7CiszM0VEO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBGT1VSVEVFTjtTbzswO0w7PGNvbXBhdD4gMDAzMSAwMDM0IDY1RTU7Ozs7Tjs7Ozs7CiszM0VFO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBGSUZURUVOO1NvOzA7TDs8Y29tcGF0PiAwMDMxIDAwMzUgNjVFNTs7OztOOzs7OzsKKzMzRUY7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFNJWFRFRU47U287MDtMOzxjb21wYXQ+IDAwMzEgMDAzNiA2NUU1Ozs7O047Ozs7OworMzNGMDtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgU0VWRU5URUVOO1NvOzA7TDs8Y29tcGF0PiAwMDMxIDAwMzcgNjVFNTs7OztOOzs7OzsKKzMzRjE7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIEVJR0hURUVOO1NvOzA7TDs8Y29tcGF0PiAwMDMxIDAwMzggNjVFNTs7OztOOzs7OzsKKzMzRjI7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIE5JTkVURUVOO1NvOzA7TDs8Y29tcGF0PiAwMDMxIDAwMzkgNjVFNTs7OztOOzs7OzsKKzMzRjM7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRU5UWTtTbzswO0w7PGNvbXBhdD4gMDAzMiAwMDMwIDY1RTU7Ozs7Tjs7Ozs7CiszM0Y0O0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUV0VOVFktT05FO1NvOzA7TDs8Y29tcGF0PiAwMDMyIDAwMzEgNjVFNTs7OztOOzs7OzsKKzMzRjU7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRU5UWS1UV087U287MDtMOzxjb21wYXQ+IDAwMzIgMDAzMiA2NUU1Ozs7O047Ozs7OworMzNGNjtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVFdFTlRZLVRIUkVFO1NvOzA7TDs8Y29tcGF0PiAwMDMyIDAwMzMgNjVFNTs7OztOOzs7OzsKKzMzRjc7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRU5UWS1GT1VSO1NvOzA7TDs8Y29tcGF0PiAwMDMyIDAwMzQgNjVFNTs7OztOOzs7OzsKKzMzRjg7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRU5UWS1GSVZFO1NvOzA7TDs8Y29tcGF0PiAwMDMyIDAwMzUgNjVFNTs7OztOOzs7OzsKKzMzRjk7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRU5UWS1TSVg7U287MDtMOzxjb21wYXQ+IDAwMzIgMDAzNiA2NUU1Ozs7O047Ozs7OworMzNGQTtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVFdFTlRZLVNFVkVOO1NvOzA7TDs8Y29tcGF0PiAwMDMyIDAwMzcgNjVFNTs7OztOOzs7OzsKKzMzRkI7SURFT0dSQVBISUMgVEVMRUdSQVBIIFNZTUJPTCBGT1IgREFZIFRXRU5UWS1FSUdIVDtTbzswO0w7PGNvbXBhdD4gMDAzMiAwMDM4IDY1RTU7Ozs7Tjs7Ozs7CiszM0ZDO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUV0VOVFktTklORTtTbzswO0w7PGNvbXBhdD4gMDAzMiAwMDM5IDY1RTU7Ozs7Tjs7Ozs7CiszM0ZEO0lERU9HUkFQSElDIFRFTEVHUkFQSCBTWU1CT0wgRk9SIERBWSBUSElSVFk7U287MDtMOzxjb21wYXQ+IDAwMzMgMDAzMCA2NUU1Ozs7O047Ozs7OworMzNGRTtJREVPR1JBUEhJQyBURUxFR1JBUEggU1lNQk9MIEZPUiBEQVkgVEhJUlRZLU9ORTtTbzswO0w7PGNvbXBhdD4gMDAzMyAwMDMxIDY1RTU7Ozs7Tjs7Ozs7CiszNDAwOzxDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBBLCBGaXJzdD47TG87MDtMOzs7OztOOzs7OzsKKzREQjU7PENKSyBJZGVvZ3JhcGggRXh0ZW5zaW9uIEEsIExhc3Q+O0xvOzA7TDs7Ozs7Tjs7Ozs7Cis0RTAwOzxDSksgSWRlb2dyYXBoLCBGaXJzdD47TG87MDtMOzs7OztOOzs7OzsKKzlGQTU7PENKSyBJZGVvZ3JhcGgsIExhc3Q+O0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDAwO1lJIFNZTExBQkxFIElUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDAxO1lJIFNZTExBQkxFIElYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDAyO1lJIFNZTExBQkxFIEk7TG87MDtMOzs7OztOOzs7OzsKK0EwMDM7WUkgU1lMTEFCTEUgSVA7TG87MDtMOzs7OztOOzs7OzsKK0EwMDQ7WUkgU1lMTEFCTEUgSUVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDA1O1lJIFNZTExBQkxFIElFWDtMbzswO0w7Ozs7O047Ozs7OworQTAwNjtZSSBTWUxMQUJMRSBJRTtMbzswO0w7Ozs7O047Ozs7OworQTAwNztZSSBTWUxMQUJMRSBJRVA7TG87MDtMOzs7OztOOzs7OzsKK0EwMDg7WUkgU1lMTEFCTEUgQVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwMDk7WUkgU1lMTEFCTEUgQVg7TG87MDtMOzs7OztOOzs7OzsKK0EwMEE7WUkgU1lMTEFCTEUgQTtMbzswO0w7Ozs7O047Ozs7OworQTAwQjtZSSBTWUxMQUJMRSBBUDtMbzswO0w7Ozs7O047Ozs7OworQTAwQztZSSBTWUxMQUJMRSBVT1g7TG87MDtMOzs7OztOOzs7OzsKK0EwMEQ7WUkgU1lMTEFCTEUgVU87TG87MDtMOzs7OztOOzs7OzsKK0EwMEU7WUkgU1lMTEFCTEUgVU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDBGO1lJIFNZTExBQkxFIE9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDEwO1lJIFNZTExBQkxFIE9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDExO1lJIFNZTExBQkxFIE87TG87MDtMOzs7OztOOzs7OzsKK0EwMTI7WUkgU1lMTEFCTEUgT1A7TG87MDtMOzs7OztOOzs7OzsKK0EwMTM7WUkgU1lMTEFCTEUgRVg7TG87MDtMOzs7OztOOzs7OzsKK0EwMTQ7WUkgU1lMTEFCTEUgRTtMbzswO0w7Ozs7O047Ozs7OworQTAxNTtZSSBTWUxMQUJMRSBXVTtMbzswO0w7Ozs7O047Ozs7OworQTAxNjtZSSBTWUxMQUJMRSBCSVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwMTc7WUkgU1lMTEFCTEUgQklYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDE4O1lJIFNZTExBQkxFIEJJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDE5O1lJIFNZTExBQkxFIEJJUDtMbzswO0w7Ozs7O047Ozs7OworQTAxQTtZSSBTWUxMQUJMRSBCSUVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDFCO1lJIFNZTExBQkxFIEJJRVg7TG87MDtMOzs7OztOOzs7OzsKK0EwMUM7WUkgU1lMTEFCTEUgQklFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDFEO1lJIFNZTExBQkxFIEJJRVA7TG87MDtMOzs7OztOOzs7OzsKK0EwMUU7WUkgU1lMTEFCTEUgQkFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDFGO1lJIFNZTExBQkxFIEJBWDtMbzswO0w7Ozs7O047Ozs7OworQTAyMDtZSSBTWUxMQUJMRSBCQTtMbzswO0w7Ozs7O047Ozs7OworQTAyMTtZSSBTWUxMQUJMRSBCQVA7TG87MDtMOzs7OztOOzs7OzsKK0EwMjI7WUkgU1lMTEFCTEUgQlVPWDtMbzswO0w7Ozs7O047Ozs7OworQTAyMztZSSBTWUxMQUJMRSBCVU87TG87MDtMOzs7OztOOzs7OzsKK0EwMjQ7WUkgU1lMTEFCTEUgQlVPUDtMbzswO0w7Ozs7O047Ozs7OworQTAyNTtZSSBTWUxMQUJMRSBCT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EwMjY7WUkgU1lMTEFCTEUgQk9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDI3O1lJIFNZTExBQkxFIEJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDI4O1lJIFNZTExBQkxFIEJPUDtMbzswO0w7Ozs7O047Ozs7OworQTAyOTtZSSBTWUxMQUJMRSBCRVg7TG87MDtMOzs7OztOOzs7OzsKK0EwMkE7WUkgU1lMTEFCTEUgQkU7TG87MDtMOzs7OztOOzs7OzsKK0EwMkI7WUkgU1lMTEFCTEUgQkVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDJDO1lJIFNZTExBQkxFIEJVVDtMbzswO0w7Ozs7O047Ozs7OworQTAyRDtZSSBTWUxMQUJMRSBCVVg7TG87MDtMOzs7OztOOzs7OzsKK0EwMkU7WUkgU1lMTEFCTEUgQlU7TG87MDtMOzs7OztOOzs7OzsKK0EwMkY7WUkgU1lMTEFCTEUgQlVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDMwO1lJIFNZTExBQkxFIEJVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EwMzE7WUkgU1lMTEFCTEUgQlVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDMyO1lJIFNZTExBQkxFIEJZVDtMbzswO0w7Ozs7O047Ozs7OworQTAzMztZSSBTWUxMQUJMRSBCWVg7TG87MDtMOzs7OztOOzs7OzsKK0EwMzQ7WUkgU1lMTEFCTEUgQlk7TG87MDtMOzs7OztOOzs7OzsKK0EwMzU7WUkgU1lMTEFCTEUgQllQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDM2O1lJIFNZTExBQkxFIEJZUlg7TG87MDtMOzs7OztOOzs7OzsKK0EwMzc7WUkgU1lMTEFCTEUgQllSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDM4O1lJIFNZTExBQkxFIFBJVDtMbzswO0w7Ozs7O047Ozs7OworQTAzOTtZSSBTWUxMQUJMRSBQSVg7TG87MDtMOzs7OztOOzs7OzsKK0EwM0E7WUkgU1lMTEFCTEUgUEk7TG87MDtMOzs7OztOOzs7OzsKK0EwM0I7WUkgU1lMTEFCTEUgUElQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDNDO1lJIFNZTExBQkxFIFBJRVg7TG87MDtMOzs7OztOOzs7OzsKK0EwM0Q7WUkgU1lMTEFCTEUgUElFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDNFO1lJIFNZTExBQkxFIFBJRVA7TG87MDtMOzs7OztOOzs7OzsKK0EwM0Y7WUkgU1lMTEFCTEUgUEFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDQwO1lJIFNZTExBQkxFIFBBWDtMbzswO0w7Ozs7O047Ozs7OworQTA0MTtZSSBTWUxMQUJMRSBQQTtMbzswO0w7Ozs7O047Ozs7OworQTA0MjtZSSBTWUxMQUJMRSBQQVA7TG87MDtMOzs7OztOOzs7OzsKK0EwNDM7WUkgU1lMTEFCTEUgUFVPWDtMbzswO0w7Ozs7O047Ozs7OworQTA0NDtZSSBTWUxMQUJMRSBQVU87TG87MDtMOzs7OztOOzs7OzsKK0EwNDU7WUkgU1lMTEFCTEUgUFVPUDtMbzswO0w7Ozs7O047Ozs7OworQTA0NjtZSSBTWUxMQUJMRSBQT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EwNDc7WUkgU1lMTEFCTEUgUE9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDQ4O1lJIFNZTExBQkxFIFBPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDQ5O1lJIFNZTExBQkxFIFBPUDtMbzswO0w7Ozs7O047Ozs7OworQTA0QTtZSSBTWUxMQUJMRSBQVVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwNEI7WUkgU1lMTEFCTEUgUFVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDRDO1lJIFNZTExBQkxFIFBVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDREO1lJIFNZTExBQkxFIFBVUDtMbzswO0w7Ozs7O047Ozs7OworQTA0RTtZSSBTWUxMQUJMRSBQVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDRGO1lJIFNZTExBQkxFIFBVUjtMbzswO0w7Ozs7O047Ozs7OworQTA1MDtZSSBTWUxMQUJMRSBQWVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwNTE7WUkgU1lMTEFCTEUgUFlYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDUyO1lJIFNZTExBQkxFIFBZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDUzO1lJIFNZTExBQkxFIFBZUDtMbzswO0w7Ozs7O047Ozs7OworQTA1NDtZSSBTWUxMQUJMRSBQWVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDU1O1lJIFNZTExBQkxFIFBZUjtMbzswO0w7Ozs7O047Ozs7OworQTA1NjtZSSBTWUxMQUJMRSBCQklUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDU3O1lJIFNZTExBQkxFIEJCSVg7TG87MDtMOzs7OztOOzs7OzsKK0EwNTg7WUkgU1lMTEFCTEUgQkJJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDU5O1lJIFNZTExBQkxFIEJCSVA7TG87MDtMOzs7OztOOzs7OzsKK0EwNUE7WUkgU1lMTEFCTEUgQkJJRVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwNUI7WUkgU1lMTEFCTEUgQkJJRVg7TG87MDtMOzs7OztOOzs7OzsKK0EwNUM7WUkgU1lMTEFCTEUgQkJJRTtMbzswO0w7Ozs7O047Ozs7OworQTA1RDtZSSBTWUxMQUJMRSBCQklFUDtMbzswO0w7Ozs7O047Ozs7OworQTA1RTtZSSBTWUxMQUJMRSBCQkFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDVGO1lJIFNZTExBQkxFIEJCQVg7TG87MDtMOzs7OztOOzs7OzsKK0EwNjA7WUkgU1lMTEFCTEUgQkJBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDYxO1lJIFNZTExBQkxFIEJCQVA7TG87MDtMOzs7OztOOzs7OzsKK0EwNjI7WUkgU1lMTEFCTEUgQkJVT1g7TG87MDtMOzs7OztOOzs7OzsKK0EwNjM7WUkgU1lMTEFCTEUgQkJVTztMbzswO0w7Ozs7O047Ozs7OworQTA2NDtZSSBTWUxMQUJMRSBCQlVPUDtMbzswO0w7Ozs7O047Ozs7OworQTA2NTtZSSBTWUxMQUJMRSBCQk9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDY2O1lJIFNZTExBQkxFIEJCT1g7TG87MDtMOzs7OztOOzs7OzsKK0EwNjc7WUkgU1lMTEFCTEUgQkJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDY4O1lJIFNZTExBQkxFIEJCT1A7TG87MDtMOzs7OztOOzs7OzsKK0EwNjk7WUkgU1lMTEFCTEUgQkJFWDtMbzswO0w7Ozs7O047Ozs7OworQTA2QTtZSSBTWUxMQUJMRSBCQkU7TG87MDtMOzs7OztOOzs7OzsKK0EwNkI7WUkgU1lMTEFCTEUgQkJFUDtMbzswO0w7Ozs7O047Ozs7OworQTA2QztZSSBTWUxMQUJMRSBCQlVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDZEO1lJIFNZTExBQkxFIEJCVVg7TG87MDtMOzs7OztOOzs7OzsKK0EwNkU7WUkgU1lMTEFCTEUgQkJVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDZGO1lJIFNZTExBQkxFIEJCVVA7TG87MDtMOzs7OztOOzs7OzsKK0EwNzA7WUkgU1lMTEFCTEUgQkJVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EwNzE7WUkgU1lMTEFCTEUgQkJVUjtMbzswO0w7Ozs7O047Ozs7OworQTA3MjtZSSBTWUxMQUJMRSBCQllUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDczO1lJIFNZTExBQkxFIEJCWVg7TG87MDtMOzs7OztOOzs7OzsKK0EwNzQ7WUkgU1lMTEFCTEUgQkJZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDc1O1lJIFNZTExBQkxFIEJCWVA7TG87MDtMOzs7OztOOzs7OzsKK0EwNzY7WUkgU1lMTEFCTEUgTkJJVDtMbzswO0w7Ozs7O047Ozs7OworQTA3NztZSSBTWUxMQUJMRSBOQklYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDc4O1lJIFNZTExBQkxFIE5CSTtMbzswO0w7Ozs7O047Ozs7OworQTA3OTtZSSBTWUxMQUJMRSBOQklQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDdBO1lJIFNZTExBQkxFIE5CSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDdCO1lJIFNZTExBQkxFIE5CSUU7TG87MDtMOzs7OztOOzs7OzsKK0EwN0M7WUkgU1lMTEFCTEUgTkJJRVA7TG87MDtMOzs7OztOOzs7OzsKK0EwN0Q7WUkgU1lMTEFCTEUgTkJBVDtMbzswO0w7Ozs7O047Ozs7OworQTA3RTtZSSBTWUxMQUJMRSBOQkFYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDdGO1lJIFNZTExBQkxFIE5CQTtMbzswO0w7Ozs7O047Ozs7OworQTA4MDtZSSBTWUxMQUJMRSBOQkFQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDgxO1lJIFNZTExBQkxFIE5CT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EwODI7WUkgU1lMTEFCTEUgTkJPWDtMbzswO0w7Ozs7O047Ozs7OworQTA4MztZSSBTWUxMQUJMRSBOQk87TG87MDtMOzs7OztOOzs7OzsKK0EwODQ7WUkgU1lMTEFCTEUgTkJPUDtMbzswO0w7Ozs7O047Ozs7OworQTA4NTtZSSBTWUxMQUJMRSBOQlVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDg2O1lJIFNZTExBQkxFIE5CVVg7TG87MDtMOzs7OztOOzs7OzsKK0EwODc7WUkgU1lMTEFCTEUgTkJVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDg4O1lJIFNZTExBQkxFIE5CVVA7TG87MDtMOzs7OztOOzs7OzsKK0EwODk7WUkgU1lMTEFCTEUgTkJVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EwOEE7WUkgU1lMTEFCTEUgTkJVUjtMbzswO0w7Ozs7O047Ozs7OworQTA4QjtZSSBTWUxMQUJMRSBOQllUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDhDO1lJIFNZTExBQkxFIE5CWVg7TG87MDtMOzs7OztOOzs7OzsKK0EwOEQ7WUkgU1lMTEFCTEUgTkJZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDhFO1lJIFNZTExBQkxFIE5CWVA7TG87MDtMOzs7OztOOzs7OzsKK0EwOEY7WUkgU1lMTEFCTEUgTkJZUlg7TG87MDtMOzs7OztOOzs7OzsKK0EwOTA7WUkgU1lMTEFCTEUgTkJZUjtMbzswO0w7Ozs7O047Ozs7OworQTA5MTtZSSBTWUxMQUJMRSBITUlUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDkyO1lJIFNZTExBQkxFIEhNSVg7TG87MDtMOzs7OztOOzs7OzsKK0EwOTM7WUkgU1lMTEFCTEUgSE1JO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDk0O1lJIFNZTExBQkxFIEhNSVA7TG87MDtMOzs7OztOOzs7OzsKK0EwOTU7WUkgU1lMTEFCTEUgSE1JRVg7TG87MDtMOzs7OztOOzs7OzsKK0EwOTY7WUkgU1lMTEFCTEUgSE1JRTtMbzswO0w7Ozs7O047Ozs7OworQTA5NztZSSBTWUxMQUJMRSBITUlFUDtMbzswO0w7Ozs7O047Ozs7OworQTA5ODtZSSBTWUxMQUJMRSBITUFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDk5O1lJIFNZTExBQkxFIEhNQVg7TG87MDtMOzs7OztOOzs7OzsKK0EwOUE7WUkgU1lMTEFCTEUgSE1BO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMDlCO1lJIFNZTExBQkxFIEhNQVA7TG87MDtMOzs7OztOOzs7OzsKK0EwOUM7WUkgU1lMTEFCTEUgSE1VT1g7TG87MDtMOzs7OztOOzs7OzsKK0EwOUQ7WUkgU1lMTEFCTEUgSE1VTztMbzswO0w7Ozs7O047Ozs7OworQTA5RTtZSSBTWUxMQUJMRSBITVVPUDtMbzswO0w7Ozs7O047Ozs7OworQTA5RjtZSSBTWUxMQUJMRSBITU9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEEwO1lJIFNZTExBQkxFIEhNT1g7TG87MDtMOzs7OztOOzs7OzsKK0EwQTE7WUkgU1lMTEFCTEUgSE1PO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEEyO1lJIFNZTExBQkxFIEhNT1A7TG87MDtMOzs7OztOOzs7OzsKK0EwQTM7WUkgU1lMTEFCTEUgSE1VVDtMbzswO0w7Ozs7O047Ozs7OworQTBBNDtZSSBTWUxMQUJMRSBITVVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEE1O1lJIFNZTExBQkxFIEhNVTtMbzswO0w7Ozs7O047Ozs7OworQTBBNjtZSSBTWUxMQUJMRSBITVVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEE3O1lJIFNZTExBQkxFIEhNVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEE4O1lJIFNZTExBQkxFIEhNVVI7TG87MDtMOzs7OztOOzs7OzsKK0EwQTk7WUkgU1lMTEFCTEUgSE1ZWDtMbzswO0w7Ozs7O047Ozs7OworQTBBQTtZSSBTWUxMQUJMRSBITVk7TG87MDtMOzs7OztOOzs7OzsKK0EwQUI7WUkgU1lMTEFCTEUgSE1ZUDtMbzswO0w7Ozs7O047Ozs7OworQTBBQztZSSBTWUxMQUJMRSBITVlSWDtMbzswO0w7Ozs7O047Ozs7OworQTBBRDtZSSBTWUxMQUJMRSBITVlSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEFFO1lJIFNZTExBQkxFIE1JVDtMbzswO0w7Ozs7O047Ozs7OworQTBBRjtZSSBTWUxMQUJMRSBNSVg7TG87MDtMOzs7OztOOzs7OzsKK0EwQjA7WUkgU1lMTEFCTEUgTUk7TG87MDtMOzs7OztOOzs7OzsKK0EwQjE7WUkgU1lMTEFCTEUgTUlQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEIyO1lJIFNZTExBQkxFIE1JRVg7TG87MDtMOzs7OztOOzs7OzsKK0EwQjM7WUkgU1lMTEFCTEUgTUlFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEI0O1lJIFNZTExBQkxFIE1JRVA7TG87MDtMOzs7OztOOzs7OzsKK0EwQjU7WUkgU1lMTEFCTEUgTUFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEI2O1lJIFNZTExBQkxFIE1BWDtMbzswO0w7Ozs7O047Ozs7OworQTBCNztZSSBTWUxMQUJMRSBNQTtMbzswO0w7Ozs7O047Ozs7OworQTBCODtZSSBTWUxMQUJMRSBNQVA7TG87MDtMOzs7OztOOzs7OzsKK0EwQjk7WUkgU1lMTEFCTEUgTVVPVDtMbzswO0w7Ozs7O047Ozs7OworQTBCQTtZSSBTWUxMQUJMRSBNVU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEJCO1lJIFNZTExBQkxFIE1VTztMbzswO0w7Ozs7O047Ozs7OworQTBCQztZSSBTWUxMQUJMRSBNVU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEJEO1lJIFNZTExBQkxFIE1PVDtMbzswO0w7Ozs7O047Ozs7OworQTBCRTtZSSBTWUxMQUJMRSBNT1g7TG87MDtMOzs7OztOOzs7OzsKK0EwQkY7WUkgU1lMTEFCTEUgTU87TG87MDtMOzs7OztOOzs7OzsKK0EwQzA7WUkgU1lMTEFCTEUgTU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEMxO1lJIFNZTExBQkxFIE1FWDtMbzswO0w7Ozs7O047Ozs7OworQTBDMjtZSSBTWUxMQUJMRSBNRTtMbzswO0w7Ozs7O047Ozs7OworQTBDMztZSSBTWUxMQUJMRSBNVVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwQzQ7WUkgU1lMTEFCTEUgTVVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEM1O1lJIFNZTExBQkxFIE1VO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEM2O1lJIFNZTExBQkxFIE1VUDtMbzswO0w7Ozs7O047Ozs7OworQTBDNztZSSBTWUxMQUJMRSBNVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEM4O1lJIFNZTExBQkxFIE1VUjtMbzswO0w7Ozs7O047Ozs7OworQTBDOTtZSSBTWUxMQUJMRSBNWVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwQ0E7WUkgU1lMTEFCTEUgTVlYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMENCO1lJIFNZTExBQkxFIE1ZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMENDO1lJIFNZTExBQkxFIE1ZUDtMbzswO0w7Ozs7O047Ozs7OworQTBDRDtZSSBTWUxMQUJMRSBGSVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwQ0U7WUkgU1lMTEFCTEUgRklYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMENGO1lJIFNZTExBQkxFIEZJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEQwO1lJIFNZTExBQkxFIEZJUDtMbzswO0w7Ozs7O047Ozs7OworQTBEMTtZSSBTWUxMQUJMRSBGQVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwRDI7WUkgU1lMTEFCTEUgRkFYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEQzO1lJIFNZTExBQkxFIEZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEQ0O1lJIFNZTExBQkxFIEZBUDtMbzswO0w7Ozs7O047Ozs7OworQTBENTtZSSBTWUxMQUJMRSBGT1g7TG87MDtMOzs7OztOOzs7OzsKK0EwRDY7WUkgU1lMTEFCTEUgRk87TG87MDtMOzs7OztOOzs7OzsKK0EwRDc7WUkgU1lMTEFCTEUgRk9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEQ4O1lJIFNZTExBQkxFIEZVVDtMbzswO0w7Ozs7O047Ozs7OworQTBEOTtZSSBTWUxMQUJMRSBGVVg7TG87MDtMOzs7OztOOzs7OzsKK0EwREE7WUkgU1lMTEFCTEUgRlU7TG87MDtMOzs7OztOOzs7OzsKK0EwREI7WUkgU1lMTEFCTEUgRlVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMERDO1lJIFNZTExBQkxFIEZVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EwREQ7WUkgU1lMTEFCTEUgRlVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMERFO1lJIFNZTExBQkxFIEZZVDtMbzswO0w7Ozs7O047Ozs7OworQTBERjtZSSBTWUxMQUJMRSBGWVg7TG87MDtMOzs7OztOOzs7OzsKK0EwRTA7WUkgU1lMTEFCTEUgRlk7TG87MDtMOzs7OztOOzs7OzsKK0EwRTE7WUkgU1lMTEFCTEUgRllQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEUyO1lJIFNZTExBQkxFIFZJVDtMbzswO0w7Ozs7O047Ozs7OworQTBFMztZSSBTWUxMQUJMRSBWSVg7TG87MDtMOzs7OztOOzs7OzsKK0EwRTQ7WUkgU1lMTEFCTEUgVkk7TG87MDtMOzs7OztOOzs7OzsKK0EwRTU7WUkgU1lMTEFCTEUgVklQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEU2O1lJIFNZTExBQkxFIFZJRVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwRTc7WUkgU1lMTEFCTEUgVklFWDtMbzswO0w7Ozs7O047Ozs7OworQTBFODtZSSBTWUxMQUJMRSBWSUU7TG87MDtMOzs7OztOOzs7OzsKK0EwRTk7WUkgU1lMTEFCTEUgVklFUDtMbzswO0w7Ozs7O047Ozs7OworQTBFQTtZSSBTWUxMQUJMRSBWQVQ7TG87MDtMOzs7OztOOzs7OzsKK0EwRUI7WUkgU1lMTEFCTEUgVkFYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEVDO1lJIFNZTExBQkxFIFZBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEVEO1lJIFNZTExBQkxFIFZBUDtMbzswO0w7Ozs7O047Ozs7OworQTBFRTtZSSBTWUxMQUJMRSBWT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EwRUY7WUkgU1lMTEFCTEUgVk9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEYwO1lJIFNZTExBQkxFIFZPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEYxO1lJIFNZTExBQkxFIFZPUDtMbzswO0w7Ozs7O047Ozs7OworQTBGMjtZSSBTWUxMQUJMRSBWRVg7TG87MDtMOzs7OztOOzs7OzsKK0EwRjM7WUkgU1lMTEFCTEUgVkVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEY0O1lJIFNZTExBQkxFIFZVVDtMbzswO0w7Ozs7O047Ozs7OworQTBGNTtZSSBTWUxMQUJMRSBWVVg7TG87MDtMOzs7OztOOzs7OzsKK0EwRjY7WUkgU1lMTEFCTEUgVlU7TG87MDtMOzs7OztOOzs7OzsKK0EwRjc7WUkgU1lMTEFCTEUgVlVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEY4O1lJIFNZTExBQkxFIFZVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EwRjk7WUkgU1lMTEFCTEUgVlVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEZBO1lJIFNZTExBQkxFIFZZVDtMbzswO0w7Ozs7O047Ozs7OworQTBGQjtZSSBTWUxMQUJMRSBWWVg7TG87MDtMOzs7OztOOzs7OzsKK0EwRkM7WUkgU1lMTEFCTEUgVlk7TG87MDtMOzs7OztOOzs7OzsKK0EwRkQ7WUkgU1lMTEFCTEUgVllQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMEZFO1lJIFNZTExBQkxFIFZZUlg7TG87MDtMOzs7OztOOzs7OzsKK0EwRkY7WUkgU1lMTEFCTEUgVllSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTAwO1lJIFNZTExBQkxFIERJVDtMbzswO0w7Ozs7O047Ozs7OworQTEwMTtZSSBTWUxMQUJMRSBESVg7TG87MDtMOzs7OztOOzs7OzsKK0ExMDI7WUkgU1lMTEFCTEUgREk7TG87MDtMOzs7OztOOzs7OzsKK0ExMDM7WUkgU1lMTEFCTEUgRElQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTA0O1lJIFNZTExBQkxFIERJRVg7TG87MDtMOzs7OztOOzs7OzsKK0ExMDU7WUkgU1lMTEFCTEUgRElFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTA2O1lJIFNZTExBQkxFIERJRVA7TG87MDtMOzs7OztOOzs7OzsKK0ExMDc7WUkgU1lMTEFCTEUgREFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTA4O1lJIFNZTExBQkxFIERBWDtMbzswO0w7Ozs7O047Ozs7OworQTEwOTtZSSBTWUxMQUJMRSBEQTtMbzswO0w7Ozs7O047Ozs7OworQTEwQTtZSSBTWUxMQUJMRSBEQVA7TG87MDtMOzs7OztOOzs7OzsKK0ExMEI7WUkgU1lMTEFCTEUgRFVPWDtMbzswO0w7Ozs7O047Ozs7OworQTEwQztZSSBTWUxMQUJMRSBEVU87TG87MDtMOzs7OztOOzs7OzsKK0ExMEQ7WUkgU1lMTEFCTEUgRE9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTBFO1lJIFNZTExBQkxFIERPWDtMbzswO0w7Ozs7O047Ozs7OworQTEwRjtZSSBTWUxMQUJMRSBETztMbzswO0w7Ozs7O047Ozs7OworQTExMDtZSSBTWUxMQUJMRSBET1A7TG87MDtMOzs7OztOOzs7OzsKK0ExMTE7WUkgU1lMTEFCTEUgREVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTEyO1lJIFNZTExBQkxFIERFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTEzO1lJIFNZTExBQkxFIERFUDtMbzswO0w7Ozs7O047Ozs7OworQTExNDtZSSBTWUxMQUJMRSBEVVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExMTU7WUkgU1lMTEFCTEUgRFVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTE2O1lJIFNZTExBQkxFIERVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTE3O1lJIFNZTExBQkxFIERVUDtMbzswO0w7Ozs7O047Ozs7OworQTExODtZSSBTWUxMQUJMRSBEVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTE5O1lJIFNZTExBQkxFIERVUjtMbzswO0w7Ozs7O047Ozs7OworQTExQTtZSSBTWUxMQUJMRSBUSVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExMUI7WUkgU1lMTEFCTEUgVElYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTFDO1lJIFNZTExBQkxFIFRJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTFEO1lJIFNZTExBQkxFIFRJUDtMbzswO0w7Ozs7O047Ozs7OworQTExRTtZSSBTWUxMQUJMRSBUSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTFGO1lJIFNZTExBQkxFIFRJRTtMbzswO0w7Ozs7O047Ozs7OworQTEyMDtZSSBTWUxMQUJMRSBUSUVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTIxO1lJIFNZTExBQkxFIFRBVDtMbzswO0w7Ozs7O047Ozs7OworQTEyMjtZSSBTWUxMQUJMRSBUQVg7TG87MDtMOzs7OztOOzs7OzsKK0ExMjM7WUkgU1lMTEFCTEUgVEE7TG87MDtMOzs7OztOOzs7OzsKK0ExMjQ7WUkgU1lMTEFCTEUgVEFQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTI1O1lJIFNZTExBQkxFIFRVT1Q7TG87MDtMOzs7OztOOzs7OzsKK0ExMjY7WUkgU1lMTEFCTEUgVFVPWDtMbzswO0w7Ozs7O047Ozs7OworQTEyNztZSSBTWUxMQUJMRSBUVU87TG87MDtMOzs7OztOOzs7OzsKK0ExMjg7WUkgU1lMTEFCTEUgVFVPUDtMbzswO0w7Ozs7O047Ozs7OworQTEyOTtZSSBTWUxMQUJMRSBUT1Q7TG87MDtMOzs7OztOOzs7OzsKK0ExMkE7WUkgU1lMTEFCTEUgVE9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTJCO1lJIFNZTExBQkxFIFRPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTJDO1lJIFNZTExBQkxFIFRPUDtMbzswO0w7Ozs7O047Ozs7OworQTEyRDtZSSBTWUxMQUJMRSBURVg7TG87MDtMOzs7OztOOzs7OzsKK0ExMkU7WUkgU1lMTEFCTEUgVEU7TG87MDtMOzs7OztOOzs7OzsKK0ExMkY7WUkgU1lMTEFCTEUgVEVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTMwO1lJIFNZTExBQkxFIFRVVDtMbzswO0w7Ozs7O047Ozs7OworQTEzMTtZSSBTWUxMQUJMRSBUVVg7TG87MDtMOzs7OztOOzs7OzsKK0ExMzI7WUkgU1lMTEFCTEUgVFU7TG87MDtMOzs7OztOOzs7OzsKK0ExMzM7WUkgU1lMTEFCTEUgVFVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTM0O1lJIFNZTExBQkxFIFRVUlg7TG87MDtMOzs7OztOOzs7OzsKK0ExMzU7WUkgU1lMTEFCTEUgVFVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTM2O1lJIFNZTExBQkxFIERESVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExMzc7WUkgU1lMTEFCTEUgRERJWDtMbzswO0w7Ozs7O047Ozs7OworQTEzODtZSSBTWUxMQUJMRSBEREk7TG87MDtMOzs7OztOOzs7OzsKK0ExMzk7WUkgU1lMTEFCTEUgRERJUDtMbzswO0w7Ozs7O047Ozs7OworQTEzQTtZSSBTWUxMQUJMRSBERElFWDtMbzswO0w7Ozs7O047Ozs7OworQTEzQjtZSSBTWUxMQUJMRSBERElFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTNDO1lJIFNZTExBQkxFIERESUVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTNEO1lJIFNZTExBQkxFIEREQVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExM0U7WUkgU1lMTEFCTEUgRERBWDtMbzswO0w7Ozs7O047Ozs7OworQTEzRjtZSSBTWUxMQUJMRSBEREE7TG87MDtMOzs7OztOOzs7OzsKK0ExNDA7WUkgU1lMTEFCTEUgRERBUDtMbzswO0w7Ozs7O047Ozs7OworQTE0MTtZSSBTWUxMQUJMRSBERFVPWDtMbzswO0w7Ozs7O047Ozs7OworQTE0MjtZSSBTWUxMQUJMRSBERFVPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTQzO1lJIFNZTExBQkxFIEREVU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTQ0O1lJIFNZTExBQkxFIERET1Q7TG87MDtMOzs7OztOOzs7OzsKK0ExNDU7WUkgU1lMTEFCTEUgRERPWDtMbzswO0w7Ozs7O047Ozs7OworQTE0NjtZSSBTWUxMQUJMRSBERE87TG87MDtMOzs7OztOOzs7OzsKK0ExNDc7WUkgU1lMTEFCTEUgRERPUDtMbzswO0w7Ozs7O047Ozs7OworQTE0ODtZSSBTWUxMQUJMRSBEREVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTQ5O1lJIFNZTExBQkxFIERERTtMbzswO0w7Ozs7O047Ozs7OworQTE0QTtZSSBTWUxMQUJMRSBEREVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTRCO1lJIFNZTExBQkxFIEREVVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExNEM7WUkgU1lMTEFCTEUgRERVWDtMbzswO0w7Ozs7O047Ozs7OworQTE0RDtZSSBTWUxMQUJMRSBERFU7TG87MDtMOzs7OztOOzs7OzsKK0ExNEU7WUkgU1lMTEFCTEUgRERVUDtMbzswO0w7Ozs7O047Ozs7OworQTE0RjtZSSBTWUxMQUJMRSBERFVSWDtMbzswO0w7Ozs7O047Ozs7OworQTE1MDtZSSBTWUxMQUJMRSBERFVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTUxO1lJIFNZTExBQkxFIE5ESVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExNTI7WUkgU1lMTEFCTEUgTkRJWDtMbzswO0w7Ozs7O047Ozs7OworQTE1MztZSSBTWUxMQUJMRSBOREk7TG87MDtMOzs7OztOOzs7OzsKK0ExNTQ7WUkgU1lMTEFCTEUgTkRJUDtMbzswO0w7Ozs7O047Ozs7OworQTE1NTtZSSBTWUxMQUJMRSBORElFWDtMbzswO0w7Ozs7O047Ozs7OworQTE1NjtZSSBTWUxMQUJMRSBORElFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTU3O1lJIFNZTExBQkxFIE5EQVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExNTg7WUkgU1lMTEFCTEUgTkRBWDtMbzswO0w7Ozs7O047Ozs7OworQTE1OTtZSSBTWUxMQUJMRSBOREE7TG87MDtMOzs7OztOOzs7OzsKK0ExNUE7WUkgU1lMTEFCTEUgTkRBUDtMbzswO0w7Ozs7O047Ozs7OworQTE1QjtZSSBTWUxMQUJMRSBORE9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTVDO1lJIFNZTExBQkxFIE5ET1g7TG87MDtMOzs7OztOOzs7OzsKK0ExNUQ7WUkgU1lMTEFCTEUgTkRPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTVFO1lJIFNZTExBQkxFIE5ET1A7TG87MDtMOzs7OztOOzs7OzsKK0ExNUY7WUkgU1lMTEFCTEUgTkRFWDtMbzswO0w7Ozs7O047Ozs7OworQTE2MDtZSSBTWUxMQUJMRSBOREU7TG87MDtMOzs7OztOOzs7OzsKK0ExNjE7WUkgU1lMTEFCTEUgTkRFUDtMbzswO0w7Ozs7O047Ozs7OworQTE2MjtZSSBTWUxMQUJMRSBORFVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTYzO1lJIFNZTExBQkxFIE5EVVg7TG87MDtMOzs7OztOOzs7OzsKK0ExNjQ7WUkgU1lMTEFCTEUgTkRVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTY1O1lJIFNZTExBQkxFIE5EVVA7TG87MDtMOzs7OztOOzs7OzsKK0ExNjY7WUkgU1lMTEFCTEUgTkRVUlg7TG87MDtMOzs7OztOOzs7OzsKK0ExNjc7WUkgU1lMTEFCTEUgTkRVUjtMbzswO0w7Ozs7O047Ozs7OworQTE2ODtZSSBTWUxMQUJMRSBITklUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTY5O1lJIFNZTExBQkxFIEhOSVg7TG87MDtMOzs7OztOOzs7OzsKK0ExNkE7WUkgU1lMTEFCTEUgSE5JO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTZCO1lJIFNZTExBQkxFIEhOSVA7TG87MDtMOzs7OztOOzs7OzsKK0ExNkM7WUkgU1lMTEFCTEUgSE5JRVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExNkQ7WUkgU1lMTEFCTEUgSE5JRVg7TG87MDtMOzs7OztOOzs7OzsKK0ExNkU7WUkgU1lMTEFCTEUgSE5JRTtMbzswO0w7Ozs7O047Ozs7OworQTE2RjtZSSBTWUxMQUJMRSBITklFUDtMbzswO0w7Ozs7O047Ozs7OworQTE3MDtZSSBTWUxMQUJMRSBITkFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTcxO1lJIFNZTExBQkxFIEhOQVg7TG87MDtMOzs7OztOOzs7OzsKK0ExNzI7WUkgU1lMTEFCTEUgSE5BO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTczO1lJIFNZTExBQkxFIEhOQVA7TG87MDtMOzs7OztOOzs7OzsKK0ExNzQ7WUkgU1lMTEFCTEUgSE5VT1g7TG87MDtMOzs7OztOOzs7OzsKK0ExNzU7WUkgU1lMTEFCTEUgSE5VTztMbzswO0w7Ozs7O047Ozs7OworQTE3NjtZSSBTWUxMQUJMRSBITk9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTc3O1lJIFNZTExBQkxFIEhOT1g7TG87MDtMOzs7OztOOzs7OzsKK0ExNzg7WUkgU1lMTEFCTEUgSE5PUDtMbzswO0w7Ozs7O047Ozs7OworQTE3OTtZSSBTWUxMQUJMRSBITkVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTdBO1lJIFNZTExBQkxFIEhORTtMbzswO0w7Ozs7O047Ozs7OworQTE3QjtZSSBTWUxMQUJMRSBITkVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTdDO1lJIFNZTExBQkxFIEhOVVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExN0Q7WUkgU1lMTEFCTEUgTklUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTdFO1lJIFNZTExBQkxFIE5JWDtMbzswO0w7Ozs7O047Ozs7OworQTE3RjtZSSBTWUxMQUJMRSBOSTtMbzswO0w7Ozs7O047Ozs7OworQTE4MDtZSSBTWUxMQUJMRSBOSVA7TG87MDtMOzs7OztOOzs7OzsKK0ExODE7WUkgU1lMTEFCTEUgTklFWDtMbzswO0w7Ozs7O047Ozs7OworQTE4MjtZSSBTWUxMQUJMRSBOSUU7TG87MDtMOzs7OztOOzs7OzsKK0ExODM7WUkgU1lMTEFCTEUgTklFUDtMbzswO0w7Ozs7O047Ozs7OworQTE4NDtZSSBTWUxMQUJMRSBOQVg7TG87MDtMOzs7OztOOzs7OzsKK0ExODU7WUkgU1lMTEFCTEUgTkE7TG87MDtMOzs7OztOOzs7OzsKK0ExODY7WUkgU1lMTEFCTEUgTkFQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTg3O1lJIFNZTExBQkxFIE5VT1g7TG87MDtMOzs7OztOOzs7OzsKK0ExODg7WUkgU1lMTEFCTEUgTlVPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTg5O1lJIFNZTExBQkxFIE5VT1A7TG87MDtMOzs7OztOOzs7OzsKK0ExOEE7WUkgU1lMTEFCTEUgTk9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMThCO1lJIFNZTExBQkxFIE5PWDtMbzswO0w7Ozs7O047Ozs7OworQTE4QztZSSBTWUxMQUJMRSBOTztMbzswO0w7Ozs7O047Ozs7OworQTE4RDtZSSBTWUxMQUJMRSBOT1A7TG87MDtMOzs7OztOOzs7OzsKK0ExOEU7WUkgU1lMTEFCTEUgTkVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMThGO1lJIFNZTExBQkxFIE5FO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTkwO1lJIFNZTExBQkxFIE5FUDtMbzswO0w7Ozs7O047Ozs7OworQTE5MTtZSSBTWUxMQUJMRSBOVVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExOTI7WUkgU1lMTEFCTEUgTlVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTkzO1lJIFNZTExBQkxFIE5VO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTk0O1lJIFNZTExBQkxFIE5VUDtMbzswO0w7Ozs7O047Ozs7OworQTE5NTtZSSBTWUxMQUJMRSBOVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTk2O1lJIFNZTExBQkxFIE5VUjtMbzswO0w7Ozs7O047Ozs7OworQTE5NztZSSBTWUxMQUJMRSBITElUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTk4O1lJIFNZTExBQkxFIEhMSVg7TG87MDtMOzs7OztOOzs7OzsKK0ExOTk7WUkgU1lMTEFCTEUgSExJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTlBO1lJIFNZTExBQkxFIEhMSVA7TG87MDtMOzs7OztOOzs7OzsKK0ExOUI7WUkgU1lMTEFCTEUgSExJRVg7TG87MDtMOzs7OztOOzs7OzsKK0ExOUM7WUkgU1lMTEFCTEUgSExJRTtMbzswO0w7Ozs7O047Ozs7OworQTE5RDtZSSBTWUxMQUJMRSBITElFUDtMbzswO0w7Ozs7O047Ozs7OworQTE5RTtZSSBTWUxMQUJMRSBITEFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMTlGO1lJIFNZTExBQkxFIEhMQVg7TG87MDtMOzs7OztOOzs7OzsKK0ExQTA7WUkgU1lMTEFCTEUgSExBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUExO1lJIFNZTExBQkxFIEhMQVA7TG87MDtMOzs7OztOOzs7OzsKK0ExQTI7WUkgU1lMTEFCTEUgSExVT1g7TG87MDtMOzs7OztOOzs7OzsKK0ExQTM7WUkgU1lMTEFCTEUgSExVTztMbzswO0w7Ozs7O047Ozs7OworQTFBNDtZSSBTWUxMQUJMRSBITFVPUDtMbzswO0w7Ozs7O047Ozs7OworQTFBNTtZSSBTWUxMQUJMRSBITE9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUE2O1lJIFNZTExBQkxFIEhMTztMbzswO0w7Ozs7O047Ozs7OworQTFBNztZSSBTWUxMQUJMRSBITE9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUE4O1lJIFNZTExBQkxFIEhMRVg7TG87MDtMOzs7OztOOzs7OzsKK0ExQTk7WUkgU1lMTEFCTEUgSExFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUFBO1lJIFNZTExBQkxFIEhMRVA7TG87MDtMOzs7OztOOzs7OzsKK0ExQUI7WUkgU1lMTEFCTEUgSExVVDtMbzswO0w7Ozs7O047Ozs7OworQTFBQztZSSBTWUxMQUJMRSBITFVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUFEO1lJIFNZTExBQkxFIEhMVTtMbzswO0w7Ozs7O047Ozs7OworQTFBRTtZSSBTWUxMQUJMRSBITFVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUFGO1lJIFNZTExBQkxFIEhMVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUIwO1lJIFNZTExBQkxFIEhMVVI7TG87MDtMOzs7OztOOzs7OzsKK0ExQjE7WUkgU1lMTEFCTEUgSExZVDtMbzswO0w7Ozs7O047Ozs7OworQTFCMjtZSSBTWUxMQUJMRSBITFlYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUIzO1lJIFNZTExBQkxFIEhMWTtMbzswO0w7Ozs7O047Ozs7OworQTFCNDtZSSBTWUxMQUJMRSBITFlQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUI1O1lJIFNZTExBQkxFIEhMWVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUI2O1lJIFNZTExBQkxFIEhMWVI7TG87MDtMOzs7OztOOzs7OzsKK0ExQjc7WUkgU1lMTEFCTEUgTElUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUI4O1lJIFNZTExBQkxFIExJWDtMbzswO0w7Ozs7O047Ozs7OworQTFCOTtZSSBTWUxMQUJMRSBMSTtMbzswO0w7Ozs7O047Ozs7OworQTFCQTtZSSBTWUxMQUJMRSBMSVA7TG87MDtMOzs7OztOOzs7OzsKK0ExQkI7WUkgU1lMTEFCTEUgTElFVDtMbzswO0w7Ozs7O047Ozs7OworQTFCQztZSSBTWUxMQUJMRSBMSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUJEO1lJIFNZTExBQkxFIExJRTtMbzswO0w7Ozs7O047Ozs7OworQTFCRTtZSSBTWUxMQUJMRSBMSUVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUJGO1lJIFNZTExBQkxFIExBVDtMbzswO0w7Ozs7O047Ozs7OworQTFDMDtZSSBTWUxMQUJMRSBMQVg7TG87MDtMOzs7OztOOzs7OzsKK0ExQzE7WUkgU1lMTEFCTEUgTEE7TG87MDtMOzs7OztOOzs7OzsKK0ExQzI7WUkgU1lMTEFCTEUgTEFQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUMzO1lJIFNZTExBQkxFIExVT1Q7TG87MDtMOzs7OztOOzs7OzsKK0ExQzQ7WUkgU1lMTEFCTEUgTFVPWDtMbzswO0w7Ozs7O047Ozs7OworQTFDNTtZSSBTWUxMQUJMRSBMVU87TG87MDtMOzs7OztOOzs7OzsKK0ExQzY7WUkgU1lMTEFCTEUgTFVPUDtMbzswO0w7Ozs7O047Ozs7OworQTFDNztZSSBTWUxMQUJMRSBMT1Q7TG87MDtMOzs7OztOOzs7OzsKK0ExQzg7WUkgU1lMTEFCTEUgTE9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUM5O1lJIFNZTExBQkxFIExPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUNBO1lJIFNZTExBQkxFIExPUDtMbzswO0w7Ozs7O047Ozs7OworQTFDQjtZSSBTWUxMQUJMRSBMRVg7TG87MDtMOzs7OztOOzs7OzsKK0ExQ0M7WUkgU1lMTEFCTEUgTEU7TG87MDtMOzs7OztOOzs7OzsKK0ExQ0Q7WUkgU1lMTEFCTEUgTEVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUNFO1lJIFNZTExBQkxFIExVVDtMbzswO0w7Ozs7O047Ozs7OworQTFDRjtZSSBTWUxMQUJMRSBMVVg7TG87MDtMOzs7OztOOzs7OzsKK0ExRDA7WUkgU1lMTEFCTEUgTFU7TG87MDtMOzs7OztOOzs7OzsKK0ExRDE7WUkgU1lMTEFCTEUgTFVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUQyO1lJIFNZTExBQkxFIExVUlg7TG87MDtMOzs7OztOOzs7OzsKK0ExRDM7WUkgU1lMTEFCTEUgTFVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUQ0O1lJIFNZTExBQkxFIExZVDtMbzswO0w7Ozs7O047Ozs7OworQTFENTtZSSBTWUxMQUJMRSBMWVg7TG87MDtMOzs7OztOOzs7OzsKK0ExRDY7WUkgU1lMTEFCTEUgTFk7TG87MDtMOzs7OztOOzs7OzsKK0ExRDc7WUkgU1lMTEFCTEUgTFlQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUQ4O1lJIFNZTExBQkxFIExZUlg7TG87MDtMOzs7OztOOzs7OzsKK0ExRDk7WUkgU1lMTEFCTEUgTFlSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMURBO1lJIFNZTExBQkxFIEdJVDtMbzswO0w7Ozs7O047Ozs7OworQTFEQjtZSSBTWUxMQUJMRSBHSVg7TG87MDtMOzs7OztOOzs7OzsKK0ExREM7WUkgU1lMTEFCTEUgR0k7TG87MDtMOzs7OztOOzs7OzsKK0ExREQ7WUkgU1lMTEFCTEUgR0lQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMURFO1lJIFNZTExBQkxFIEdJRVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExREY7WUkgU1lMTEFCTEUgR0lFWDtMbzswO0w7Ozs7O047Ozs7OworQTFFMDtZSSBTWUxMQUJMRSBHSUU7TG87MDtMOzs7OztOOzs7OzsKK0ExRTE7WUkgU1lMTEFCTEUgR0lFUDtMbzswO0w7Ozs7O047Ozs7OworQTFFMjtZSSBTWUxMQUJMRSBHQVQ7TG87MDtMOzs7OztOOzs7OzsKK0ExRTM7WUkgU1lMTEFCTEUgR0FYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUU0O1lJIFNZTExBQkxFIEdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUU1O1lJIFNZTExBQkxFIEdBUDtMbzswO0w7Ozs7O047Ozs7OworQTFFNjtZSSBTWUxMQUJMRSBHVU9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUU3O1lJIFNZTExBQkxFIEdVT1g7TG87MDtMOzs7OztOOzs7OzsKK0ExRTg7WUkgU1lMTEFCTEUgR1VPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUU5O1lJIFNZTExBQkxFIEdVT1A7TG87MDtMOzs7OztOOzs7OzsKK0ExRUE7WUkgU1lMTEFCTEUgR09UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUVCO1lJIFNZTExBQkxFIEdPWDtMbzswO0w7Ozs7O047Ozs7OworQTFFQztZSSBTWUxMQUJMRSBHTztMbzswO0w7Ozs7O047Ozs7OworQTFFRDtZSSBTWUxMQUJMRSBHT1A7TG87MDtMOzs7OztOOzs7OzsKK0ExRUU7WUkgU1lMTEFCTEUgR0VUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUVGO1lJIFNZTExBQkxFIEdFWDtMbzswO0w7Ozs7O047Ozs7OworQTFGMDtZSSBTWUxMQUJMRSBHRTtMbzswO0w7Ozs7O047Ozs7OworQTFGMTtZSSBTWUxMQUJMRSBHRVA7TG87MDtMOzs7OztOOzs7OzsKK0ExRjI7WUkgU1lMTEFCTEUgR1VUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUYzO1lJIFNZTExBQkxFIEdVWDtMbzswO0w7Ozs7O047Ozs7OworQTFGNDtZSSBTWUxMQUJMRSBHVTtMbzswO0w7Ozs7O047Ozs7OworQTFGNTtZSSBTWUxMQUJMRSBHVVA7TG87MDtMOzs7OztOOzs7OzsKK0ExRjY7WUkgU1lMTEFCTEUgR1VSWDtMbzswO0w7Ozs7O047Ozs7OworQTFGNztZSSBTWUxMQUJMRSBHVVI7TG87MDtMOzs7OztOOzs7OzsKK0ExRjg7WUkgU1lMTEFCTEUgS0lUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMUY5O1lJIFNZTExBQkxFIEtJWDtMbzswO0w7Ozs7O047Ozs7OworQTFGQTtZSSBTWUxMQUJMRSBLSTtMbzswO0w7Ozs7O047Ozs7OworQTFGQjtZSSBTWUxMQUJMRSBLSVA7TG87MDtMOzs7OztOOzs7OzsKK0ExRkM7WUkgU1lMTEFCTEUgS0lFWDtMbzswO0w7Ozs7O047Ozs7OworQTFGRDtZSSBTWUxMQUJMRSBLSUU7TG87MDtMOzs7OztOOzs7OzsKK0ExRkU7WUkgU1lMTEFCTEUgS0lFUDtMbzswO0w7Ozs7O047Ozs7OworQTFGRjtZSSBTWUxMQUJMRSBLQVQ7TG87MDtMOzs7OztOOzs7OzsKK0EyMDA7WUkgU1lMTEFCTEUgS0FYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjAxO1lJIFNZTExBQkxFIEtBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjAyO1lJIFNZTExBQkxFIEtBUDtMbzswO0w7Ozs7O047Ozs7OworQTIwMztZSSBTWUxMQUJMRSBLVU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjA0O1lJIFNZTExBQkxFIEtVTztMbzswO0w7Ozs7O047Ozs7OworQTIwNTtZSSBTWUxMQUJMRSBLVU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjA2O1lJIFNZTExBQkxFIEtPVDtMbzswO0w7Ozs7O047Ozs7OworQTIwNztZSSBTWUxMQUJMRSBLT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyMDg7WUkgU1lMTEFCTEUgS087TG87MDtMOzs7OztOOzs7OzsKK0EyMDk7WUkgU1lMTEFCTEUgS09QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjBBO1lJIFNZTExBQkxFIEtFVDtMbzswO0w7Ozs7O047Ozs7OworQTIwQjtZSSBTWUxMQUJMRSBLRVg7TG87MDtMOzs7OztOOzs7OzsKK0EyMEM7WUkgU1lMTEFCTEUgS0U7TG87MDtMOzs7OztOOzs7OzsKK0EyMEQ7WUkgU1lMTEFCTEUgS0VQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjBFO1lJIFNZTExBQkxFIEtVVDtMbzswO0w7Ozs7O047Ozs7OworQTIwRjtZSSBTWUxMQUJMRSBLVVg7TG87MDtMOzs7OztOOzs7OzsKK0EyMTA7WUkgU1lMTEFCTEUgS1U7TG87MDtMOzs7OztOOzs7OzsKK0EyMTE7WUkgU1lMTEFCTEUgS1VQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjEyO1lJIFNZTExBQkxFIEtVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EyMTM7WUkgU1lMTEFCTEUgS1VSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjE0O1lJIFNZTExBQkxFIEdHSVQ7TG87MDtMOzs7OztOOzs7OzsKK0EyMTU7WUkgU1lMTEFCTEUgR0dJWDtMbzswO0w7Ozs7O047Ozs7OworQTIxNjtZSSBTWUxMQUJMRSBHR0k7TG87MDtMOzs7OztOOzs7OzsKK0EyMTc7WUkgU1lMTEFCTEUgR0dJRVg7TG87MDtMOzs7OztOOzs7OzsKK0EyMTg7WUkgU1lMTEFCTEUgR0dJRTtMbzswO0w7Ozs7O047Ozs7OworQTIxOTtZSSBTWUxMQUJMRSBHR0lFUDtMbzswO0w7Ozs7O047Ozs7OworQTIxQTtZSSBTWUxMQUJMRSBHR0FUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjFCO1lJIFNZTExBQkxFIEdHQVg7TG87MDtMOzs7OztOOzs7OzsKK0EyMUM7WUkgU1lMTEFCTEUgR0dBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjFEO1lJIFNZTExBQkxFIEdHQVA7TG87MDtMOzs7OztOOzs7OzsKK0EyMUU7WUkgU1lMTEFCTEUgR0dVT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EyMUY7WUkgU1lMTEFCTEUgR0dVT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyMjA7WUkgU1lMTEFCTEUgR0dVTztMbzswO0w7Ozs7O047Ozs7OworQTIyMTtZSSBTWUxMQUJMRSBHR1VPUDtMbzswO0w7Ozs7O047Ozs7OworQTIyMjtZSSBTWUxMQUJMRSBHR09UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjIzO1lJIFNZTExBQkxFIEdHT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyMjQ7WUkgU1lMTEFCTEUgR0dPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjI1O1lJIFNZTExBQkxFIEdHT1A7TG87MDtMOzs7OztOOzs7OzsKK0EyMjY7WUkgU1lMTEFCTEUgR0dFVDtMbzswO0w7Ozs7O047Ozs7OworQTIyNztZSSBTWUxMQUJMRSBHR0VYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjI4O1lJIFNZTExBQkxFIEdHRTtMbzswO0w7Ozs7O047Ozs7OworQTIyOTtZSSBTWUxMQUJMRSBHR0VQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjJBO1lJIFNZTExBQkxFIEdHVVQ7TG87MDtMOzs7OztOOzs7OzsKK0EyMkI7WUkgU1lMTEFCTEUgR0dVWDtMbzswO0w7Ozs7O047Ozs7OworQTIyQztZSSBTWUxMQUJMRSBHR1U7TG87MDtMOzs7OztOOzs7OzsKK0EyMkQ7WUkgU1lMTEFCTEUgR0dVUDtMbzswO0w7Ozs7O047Ozs7OworQTIyRTtZSSBTWUxMQUJMRSBHR1VSWDtMbzswO0w7Ozs7O047Ozs7OworQTIyRjtZSSBTWUxMQUJMRSBHR1VSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjMwO1lJIFNZTExBQkxFIE1HSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjMxO1lJIFNZTExBQkxFIE1HSUU7TG87MDtMOzs7OztOOzs7OzsKK0EyMzI7WUkgU1lMTEFCTEUgTUdBVDtMbzswO0w7Ozs7O047Ozs7OworQTIzMztZSSBTWUxMQUJMRSBNR0FYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjM0O1lJIFNZTExBQkxFIE1HQTtMbzswO0w7Ozs7O047Ozs7OworQTIzNTtZSSBTWUxMQUJMRSBNR0FQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjM2O1lJIFNZTExBQkxFIE1HVU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjM3O1lJIFNZTExBQkxFIE1HVU87TG87MDtMOzs7OztOOzs7OzsKK0EyMzg7WUkgU1lMTEFCTEUgTUdVT1A7TG87MDtMOzs7OztOOzs7OzsKK0EyMzk7WUkgU1lMTEFCTEUgTUdPVDtMbzswO0w7Ozs7O047Ozs7OworQTIzQTtZSSBTWUxMQUJMRSBNR09YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjNCO1lJIFNZTExBQkxFIE1HTztMbzswO0w7Ozs7O047Ozs7OworQTIzQztZSSBTWUxMQUJMRSBNR09QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjNEO1lJIFNZTExBQkxFIE1HRVg7TG87MDtMOzs7OztOOzs7OzsKK0EyM0U7WUkgU1lMTEFCTEUgTUdFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjNGO1lJIFNZTExBQkxFIE1HRVA7TG87MDtMOzs7OztOOzs7OzsKK0EyNDA7WUkgU1lMTEFCTEUgTUdVVDtMbzswO0w7Ozs7O047Ozs7OworQTI0MTtZSSBTWUxMQUJMRSBNR1VYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjQyO1lJIFNZTExBQkxFIE1HVTtMbzswO0w7Ozs7O047Ozs7OworQTI0MztZSSBTWUxMQUJMRSBNR1VQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjQ0O1lJIFNZTExBQkxFIE1HVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjQ1O1lJIFNZTExBQkxFIE1HVVI7TG87MDtMOzs7OztOOzs7OzsKK0EyNDY7WUkgU1lMTEFCTEUgSFhJVDtMbzswO0w7Ozs7O047Ozs7OworQTI0NztZSSBTWUxMQUJMRSBIWElYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjQ4O1lJIFNZTExBQkxFIEhYSTtMbzswO0w7Ozs7O047Ozs7OworQTI0OTtZSSBTWUxMQUJMRSBIWElQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjRBO1lJIFNZTExBQkxFIEhYSUVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjRCO1lJIFNZTExBQkxFIEhYSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjRDO1lJIFNZTExBQkxFIEhYSUU7TG87MDtMOzs7OztOOzs7OzsKK0EyNEQ7WUkgU1lMTEFCTEUgSFhJRVA7TG87MDtMOzs7OztOOzs7OzsKK0EyNEU7WUkgU1lMTEFCTEUgSFhBVDtMbzswO0w7Ozs7O047Ozs7OworQTI0RjtZSSBTWUxMQUJMRSBIWEFYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjUwO1lJIFNZTExBQkxFIEhYQTtMbzswO0w7Ozs7O047Ozs7OworQTI1MTtZSSBTWUxMQUJMRSBIWEFQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjUyO1lJIFNZTExBQkxFIEhYVU9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjUzO1lJIFNZTExBQkxFIEhYVU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjU0O1lJIFNZTExBQkxFIEhYVU87TG87MDtMOzs7OztOOzs7OzsKK0EyNTU7WUkgU1lMTEFCTEUgSFhVT1A7TG87MDtMOzs7OztOOzs7OzsKK0EyNTY7WUkgU1lMTEFCTEUgSFhPVDtMbzswO0w7Ozs7O047Ozs7OworQTI1NztZSSBTWUxMQUJMRSBIWE9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjU4O1lJIFNZTExBQkxFIEhYTztMbzswO0w7Ozs7O047Ozs7OworQTI1OTtZSSBTWUxMQUJMRSBIWE9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjVBO1lJIFNZTExBQkxFIEhYRVg7TG87MDtMOzs7OztOOzs7OzsKK0EyNUI7WUkgU1lMTEFCTEUgSFhFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjVDO1lJIFNZTExBQkxFIEhYRVA7TG87MDtMOzs7OztOOzs7OzsKK0EyNUQ7WUkgU1lMTEFCTEUgTkdJRVg7TG87MDtMOzs7OztOOzs7OzsKK0EyNUU7WUkgU1lMTEFCTEUgTkdJRTtMbzswO0w7Ozs7O047Ozs7OworQTI1RjtZSSBTWUxMQUJMRSBOR0lFUDtMbzswO0w7Ozs7O047Ozs7OworQTI2MDtZSSBTWUxMQUJMRSBOR0FUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjYxO1lJIFNZTExBQkxFIE5HQVg7TG87MDtMOzs7OztOOzs7OzsKK0EyNjI7WUkgU1lMTEFCTEUgTkdBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjYzO1lJIFNZTExBQkxFIE5HQVA7TG87MDtMOzs7OztOOzs7OzsKK0EyNjQ7WUkgU1lMTEFCTEUgTkdVT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EyNjU7WUkgU1lMTEFCTEUgTkdVT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyNjY7WUkgU1lMTEFCTEUgTkdVTztMbzswO0w7Ozs7O047Ozs7OworQTI2NztZSSBTWUxMQUJMRSBOR09UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjY4O1lJIFNZTExBQkxFIE5HT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyNjk7WUkgU1lMTEFCTEUgTkdPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjZBO1lJIFNZTExBQkxFIE5HT1A7TG87MDtMOzs7OztOOzs7OzsKK0EyNkI7WUkgU1lMTEFCTEUgTkdFWDtMbzswO0w7Ozs7O047Ozs7OworQTI2QztZSSBTWUxMQUJMRSBOR0U7TG87MDtMOzs7OztOOzs7OzsKK0EyNkQ7WUkgU1lMTEFCTEUgTkdFUDtMbzswO0w7Ozs7O047Ozs7OworQTI2RTtZSSBTWUxMQUJMRSBISVQ7TG87MDtMOzs7OztOOzs7OzsKK0EyNkY7WUkgU1lMTEFCTEUgSElFWDtMbzswO0w7Ozs7O047Ozs7OworQTI3MDtZSSBTWUxMQUJMRSBISUU7TG87MDtMOzs7OztOOzs7OzsKK0EyNzE7WUkgU1lMTEFCTEUgSEFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjcyO1lJIFNZTExBQkxFIEhBWDtMbzswO0w7Ozs7O047Ozs7OworQTI3MztZSSBTWUxMQUJMRSBIQTtMbzswO0w7Ozs7O047Ozs7OworQTI3NDtZSSBTWUxMQUJMRSBIQVA7TG87MDtMOzs7OztOOzs7OzsKK0EyNzU7WUkgU1lMTEFCTEUgSFVPVDtMbzswO0w7Ozs7O047Ozs7OworQTI3NjtZSSBTWUxMQUJMRSBIVU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjc3O1lJIFNZTExBQkxFIEhVTztMbzswO0w7Ozs7O047Ozs7OworQTI3ODtZSSBTWUxMQUJMRSBIVU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjc5O1lJIFNZTExBQkxFIEhPVDtMbzswO0w7Ozs7O047Ozs7OworQTI3QTtZSSBTWUxMQUJMRSBIT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyN0I7WUkgU1lMTEFCTEUgSE87TG87MDtMOzs7OztOOzs7OzsKK0EyN0M7WUkgU1lMTEFCTEUgSE9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjdEO1lJIFNZTExBQkxFIEhFWDtMbzswO0w7Ozs7O047Ozs7OworQTI3RTtZSSBTWUxMQUJMRSBIRTtMbzswO0w7Ozs7O047Ozs7OworQTI3RjtZSSBTWUxMQUJMRSBIRVA7TG87MDtMOzs7OztOOzs7OzsKK0EyODA7WUkgU1lMTEFCTEUgV0FUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjgxO1lJIFNZTExBQkxFIFdBWDtMbzswO0w7Ozs7O047Ozs7OworQTI4MjtZSSBTWUxMQUJMRSBXQTtMbzswO0w7Ozs7O047Ozs7OworQTI4MztZSSBTWUxMQUJMRSBXQVA7TG87MDtMOzs7OztOOzs7OzsKK0EyODQ7WUkgU1lMTEFCTEUgV1VPWDtMbzswO0w7Ozs7O047Ozs7OworQTI4NTtZSSBTWUxMQUJMRSBXVU87TG87MDtMOzs7OztOOzs7OzsKK0EyODY7WUkgU1lMTEFCTEUgV1VPUDtMbzswO0w7Ozs7O047Ozs7OworQTI4NztZSSBTWUxMQUJMRSBXT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyODg7WUkgU1lMTEFCTEUgV087TG87MDtMOzs7OztOOzs7OzsKK0EyODk7WUkgU1lMTEFCTEUgV09QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjhBO1lJIFNZTExBQkxFIFdFWDtMbzswO0w7Ozs7O047Ozs7OworQTI4QjtZSSBTWUxMQUJMRSBXRTtMbzswO0w7Ozs7O047Ozs7OworQTI4QztZSSBTWUxMQUJMRSBXRVA7TG87MDtMOzs7OztOOzs7OzsKK0EyOEQ7WUkgU1lMTEFCTEUgWklUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjhFO1lJIFNZTExBQkxFIFpJWDtMbzswO0w7Ozs7O047Ozs7OworQTI4RjtZSSBTWUxMQUJMRSBaSTtMbzswO0w7Ozs7O047Ozs7OworQTI5MDtZSSBTWUxMQUJMRSBaSVA7TG87MDtMOzs7OztOOzs7OzsKK0EyOTE7WUkgU1lMTEFCTEUgWklFWDtMbzswO0w7Ozs7O047Ozs7OworQTI5MjtZSSBTWUxMQUJMRSBaSUU7TG87MDtMOzs7OztOOzs7OzsKK0EyOTM7WUkgU1lMTEFCTEUgWklFUDtMbzswO0w7Ozs7O047Ozs7OworQTI5NDtZSSBTWUxMQUJMRSBaQVQ7TG87MDtMOzs7OztOOzs7OzsKK0EyOTU7WUkgU1lMTEFCTEUgWkFYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjk2O1lJIFNZTExBQkxFIFpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjk3O1lJIFNZTExBQkxFIFpBUDtMbzswO0w7Ozs7O047Ozs7OworQTI5ODtZSSBTWUxMQUJMRSBaVU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjk5O1lJIFNZTExBQkxFIFpVTztMbzswO0w7Ozs7O047Ozs7OworQTI5QTtZSSBTWUxMQUJMRSBaVU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjlCO1lJIFNZTExBQkxFIFpPVDtMbzswO0w7Ozs7O047Ozs7OworQTI5QztZSSBTWUxMQUJMRSBaT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyOUQ7WUkgU1lMTEFCTEUgWk87TG87MDtMOzs7OztOOzs7OzsKK0EyOUU7WUkgU1lMTEFCTEUgWk9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMjlGO1lJIFNZTExBQkxFIFpFWDtMbzswO0w7Ozs7O047Ozs7OworQTJBMDtZSSBTWUxMQUJMRSBaRTtMbzswO0w7Ozs7O047Ozs7OworQTJBMTtZSSBTWUxMQUJMRSBaRVA7TG87MDtMOzs7OztOOzs7OzsKK0EyQTI7WUkgU1lMTEFCTEUgWlVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkEzO1lJIFNZTExBQkxFIFpVWDtMbzswO0w7Ozs7O047Ozs7OworQTJBNDtZSSBTWUxMQUJMRSBaVTtMbzswO0w7Ozs7O047Ozs7OworQTJBNTtZSSBTWUxMQUJMRSBaVVA7TG87MDtMOzs7OztOOzs7OzsKK0EyQTY7WUkgU1lMTEFCTEUgWlVSWDtMbzswO0w7Ozs7O047Ozs7OworQTJBNztZSSBTWUxMQUJMRSBaVVI7TG87MDtMOzs7OztOOzs7OzsKK0EyQTg7WUkgU1lMTEFCTEUgWllUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkE5O1lJIFNZTExBQkxFIFpZWDtMbzswO0w7Ozs7O047Ozs7OworQTJBQTtZSSBTWUxMQUJMRSBaWTtMbzswO0w7Ozs7O047Ozs7OworQTJBQjtZSSBTWUxMQUJMRSBaWVA7TG87MDtMOzs7OztOOzs7OzsKK0EyQUM7WUkgU1lMTEFCTEUgWllSWDtMbzswO0w7Ozs7O047Ozs7OworQTJBRDtZSSBTWUxMQUJMRSBaWVI7TG87MDtMOzs7OztOOzs7OzsKK0EyQUU7WUkgU1lMTEFCTEUgQ0lUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkFGO1lJIFNZTExBQkxFIENJWDtMbzswO0w7Ozs7O047Ozs7OworQTJCMDtZSSBTWUxMQUJMRSBDSTtMbzswO0w7Ozs7O047Ozs7OworQTJCMTtZSSBTWUxMQUJMRSBDSVA7TG87MDtMOzs7OztOOzs7OzsKK0EyQjI7WUkgU1lMTEFCTEUgQ0lFVDtMbzswO0w7Ozs7O047Ozs7OworQTJCMztZSSBTWUxMQUJMRSBDSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkI0O1lJIFNZTExBQkxFIENJRTtMbzswO0w7Ozs7O047Ozs7OworQTJCNTtZSSBTWUxMQUJMRSBDSUVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkI2O1lJIFNZTExBQkxFIENBVDtMbzswO0w7Ozs7O047Ozs7OworQTJCNztZSSBTWUxMQUJMRSBDQVg7TG87MDtMOzs7OztOOzs7OzsKK0EyQjg7WUkgU1lMTEFCTEUgQ0E7TG87MDtMOzs7OztOOzs7OzsKK0EyQjk7WUkgU1lMTEFCTEUgQ0FQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkJBO1lJIFNZTExBQkxFIENVT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyQkI7WUkgU1lMTEFCTEUgQ1VPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkJDO1lJIFNZTExBQkxFIENVT1A7TG87MDtMOzs7OztOOzs7OzsKK0EyQkQ7WUkgU1lMTEFCTEUgQ09UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkJFO1lJIFNZTExBQkxFIENPWDtMbzswO0w7Ozs7O047Ozs7OworQTJCRjtZSSBTWUxMQUJMRSBDTztMbzswO0w7Ozs7O047Ozs7OworQTJDMDtZSSBTWUxMQUJMRSBDT1A7TG87MDtMOzs7OztOOzs7OzsKK0EyQzE7WUkgU1lMTEFCTEUgQ0VYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkMyO1lJIFNZTExBQkxFIENFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkMzO1lJIFNZTExBQkxFIENFUDtMbzswO0w7Ozs7O047Ozs7OworQTJDNDtZSSBTWUxMQUJMRSBDVVQ7TG87MDtMOzs7OztOOzs7OzsKK0EyQzU7WUkgU1lMTEFCTEUgQ1VYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkM2O1lJIFNZTExBQkxFIENVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkM3O1lJIFNZTExBQkxFIENVUDtMbzswO0w7Ozs7O047Ozs7OworQTJDODtZSSBTWUxMQUJMRSBDVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkM5O1lJIFNZTExBQkxFIENVUjtMbzswO0w7Ozs7O047Ozs7OworQTJDQTtZSSBTWUxMQUJMRSBDWVQ7TG87MDtMOzs7OztOOzs7OzsKK0EyQ0I7WUkgU1lMTEFCTEUgQ1lYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkNDO1lJIFNZTExBQkxFIENZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkNEO1lJIFNZTExBQkxFIENZUDtMbzswO0w7Ozs7O047Ozs7OworQTJDRTtZSSBTWUxMQUJMRSBDWVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkNGO1lJIFNZTExBQkxFIENZUjtMbzswO0w7Ozs7O047Ozs7OworQTJEMDtZSSBTWUxMQUJMRSBaWklUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkQxO1lJIFNZTExBQkxFIFpaSVg7TG87MDtMOzs7OztOOzs7OzsKK0EyRDI7WUkgU1lMTEFCTEUgWlpJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkQzO1lJIFNZTExBQkxFIFpaSVA7TG87MDtMOzs7OztOOzs7OzsKK0EyRDQ7WUkgU1lMTEFCTEUgWlpJRVQ7TG87MDtMOzs7OztOOzs7OzsKK0EyRDU7WUkgU1lMTEFCTEUgWlpJRVg7TG87MDtMOzs7OztOOzs7OzsKK0EyRDY7WUkgU1lMTEFCTEUgWlpJRTtMbzswO0w7Ozs7O047Ozs7OworQTJENztZSSBTWUxMQUJMRSBaWklFUDtMbzswO0w7Ozs7O047Ozs7OworQTJEODtZSSBTWUxMQUJMRSBaWkFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkQ5O1lJIFNZTExBQkxFIFpaQVg7TG87MDtMOzs7OztOOzs7OzsKK0EyREE7WUkgU1lMTEFCTEUgWlpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkRCO1lJIFNZTExBQkxFIFpaQVA7TG87MDtMOzs7OztOOzs7OzsKK0EyREM7WUkgU1lMTEFCTEUgWlpPWDtMbzswO0w7Ozs7O047Ozs7OworQTJERDtZSSBTWUxMQUJMRSBaWk87TG87MDtMOzs7OztOOzs7OzsKK0EyREU7WUkgU1lMTEFCTEUgWlpPUDtMbzswO0w7Ozs7O047Ozs7OworQTJERjtZSSBTWUxMQUJMRSBaWkVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkUwO1lJIFNZTExBQkxFIFpaRTtMbzswO0w7Ozs7O047Ozs7OworQTJFMTtZSSBTWUxMQUJMRSBaWkVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkUyO1lJIFNZTExBQkxFIFpaVVg7TG87MDtMOzs7OztOOzs7OzsKK0EyRTM7WUkgU1lMTEFCTEUgWlpVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkU0O1lJIFNZTExBQkxFIFpaVVA7TG87MDtMOzs7OztOOzs7OzsKK0EyRTU7WUkgU1lMTEFCTEUgWlpVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EyRTY7WUkgU1lMTEFCTEUgWlpVUjtMbzswO0w7Ozs7O047Ozs7OworQTJFNztZSSBTWUxMQUJMRSBaWllUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkU4O1lJIFNZTExBQkxFIFpaWVg7TG87MDtMOzs7OztOOzs7OzsKK0EyRTk7WUkgU1lMTEFCTEUgWlpZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkVBO1lJIFNZTExBQkxFIFpaWVA7TG87MDtMOzs7OztOOzs7OzsKK0EyRUI7WUkgU1lMTEFCTEUgWlpZUlg7TG87MDtMOzs7OztOOzs7OzsKK0EyRUM7WUkgU1lMTEFCTEUgWlpZUjtMbzswO0w7Ozs7O047Ozs7OworQTJFRDtZSSBTWUxMQUJMRSBOWklUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkVFO1lJIFNZTExBQkxFIE5aSVg7TG87MDtMOzs7OztOOzs7OzsKK0EyRUY7WUkgU1lMTEFCTEUgTlpJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkYwO1lJIFNZTExBQkxFIE5aSVA7TG87MDtMOzs7OztOOzs7OzsKK0EyRjE7WUkgU1lMTEFCTEUgTlpJRVg7TG87MDtMOzs7OztOOzs7OzsKK0EyRjI7WUkgU1lMTEFCTEUgTlpJRTtMbzswO0w7Ozs7O047Ozs7OworQTJGMztZSSBTWUxMQUJMRSBOWklFUDtMbzswO0w7Ozs7O047Ozs7OworQTJGNDtZSSBTWUxMQUJMRSBOWkFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkY1O1lJIFNZTExBQkxFIE5aQVg7TG87MDtMOzs7OztOOzs7OzsKK0EyRjY7WUkgU1lMTEFCTEUgTlpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkY3O1lJIFNZTExBQkxFIE5aQVA7TG87MDtMOzs7OztOOzs7OzsKK0EyRjg7WUkgU1lMTEFCTEUgTlpVT1g7TG87MDtMOzs7OztOOzs7OzsKK0EyRjk7WUkgU1lMTEFCTEUgTlpVTztMbzswO0w7Ozs7O047Ozs7OworQTJGQTtZSSBTWUxMQUJMRSBOWk9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMkZCO1lJIFNZTExBQkxFIE5aT1A7TG87MDtMOzs7OztOOzs7OzsKK0EyRkM7WUkgU1lMTEFCTEUgTlpFWDtMbzswO0w7Ozs7O047Ozs7OworQTJGRDtZSSBTWUxMQUJMRSBOWkU7TG87MDtMOzs7OztOOzs7OzsKK0EyRkU7WUkgU1lMTEFCTEUgTlpVWDtMbzswO0w7Ozs7O047Ozs7OworQTJGRjtZSSBTWUxMQUJMRSBOWlU7TG87MDtMOzs7OztOOzs7OzsKK0EzMDA7WUkgU1lMTEFCTEUgTlpVUDtMbzswO0w7Ozs7O047Ozs7OworQTMwMTtZSSBTWUxMQUJMRSBOWlVSWDtMbzswO0w7Ozs7O047Ozs7OworQTMwMjtZSSBTWUxMQUJMRSBOWlVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzAzO1lJIFNZTExBQkxFIE5aWVQ7TG87MDtMOzs7OztOOzs7OzsKK0EzMDQ7WUkgU1lMTEFCTEUgTlpZWDtMbzswO0w7Ozs7O047Ozs7OworQTMwNTtZSSBTWUxMQUJMRSBOWlk7TG87MDtMOzs7OztOOzs7OzsKK0EzMDY7WUkgU1lMTEFCTEUgTlpZUDtMbzswO0w7Ozs7O047Ozs7OworQTMwNztZSSBTWUxMQUJMRSBOWllSWDtMbzswO0w7Ozs7O047Ozs7OworQTMwODtZSSBTWUxMQUJMRSBOWllSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzA5O1lJIFNZTExBQkxFIFNJVDtMbzswO0w7Ozs7O047Ozs7OworQTMwQTtZSSBTWUxMQUJMRSBTSVg7TG87MDtMOzs7OztOOzs7OzsKK0EzMEI7WUkgU1lMTEFCTEUgU0k7TG87MDtMOzs7OztOOzs7OzsKK0EzMEM7WUkgU1lMTEFCTEUgU0lQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzBEO1lJIFNZTExBQkxFIFNJRVg7TG87MDtMOzs7OztOOzs7OzsKK0EzMEU7WUkgU1lMTEFCTEUgU0lFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzBGO1lJIFNZTExBQkxFIFNJRVA7TG87MDtMOzs7OztOOzs7OzsKK0EzMTA7WUkgU1lMTEFCTEUgU0FUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzExO1lJIFNZTExBQkxFIFNBWDtMbzswO0w7Ozs7O047Ozs7OworQTMxMjtZSSBTWUxMQUJMRSBTQTtMbzswO0w7Ozs7O047Ozs7OworQTMxMztZSSBTWUxMQUJMRSBTQVA7TG87MDtMOzs7OztOOzs7OzsKK0EzMTQ7WUkgU1lMTEFCTEUgU1VPWDtMbzswO0w7Ozs7O047Ozs7OworQTMxNTtZSSBTWUxMQUJMRSBTVU87TG87MDtMOzs7OztOOzs7OzsKK0EzMTY7WUkgU1lMTEFCTEUgU1VPUDtMbzswO0w7Ozs7O047Ozs7OworQTMxNztZSSBTWUxMQUJMRSBTT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EzMTg7WUkgU1lMTEFCTEUgU09YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzE5O1lJIFNZTExBQkxFIFNPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzFBO1lJIFNZTExBQkxFIFNPUDtMbzswO0w7Ozs7O047Ozs7OworQTMxQjtZSSBTWUxMQUJMRSBTRVg7TG87MDtMOzs7OztOOzs7OzsKK0EzMUM7WUkgU1lMTEFCTEUgU0U7TG87MDtMOzs7OztOOzs7OzsKK0EzMUQ7WUkgU1lMTEFCTEUgU0VQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzFFO1lJIFNZTExBQkxFIFNVVDtMbzswO0w7Ozs7O047Ozs7OworQTMxRjtZSSBTWUxMQUJMRSBTVVg7TG87MDtMOzs7OztOOzs7OzsKK0EzMjA7WUkgU1lMTEFCTEUgU1U7TG87MDtMOzs7OztOOzs7OzsKK0EzMjE7WUkgU1lMTEFCTEUgU1VQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzIyO1lJIFNZTExBQkxFIFNVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EzMjM7WUkgU1lMTEFCTEUgU1VSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzI0O1lJIFNZTExBQkxFIFNZVDtMbzswO0w7Ozs7O047Ozs7OworQTMyNTtZSSBTWUxMQUJMRSBTWVg7TG87MDtMOzs7OztOOzs7OzsKK0EzMjY7WUkgU1lMTEFCTEUgU1k7TG87MDtMOzs7OztOOzs7OzsKK0EzMjc7WUkgU1lMTEFCTEUgU1lQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzI4O1lJIFNZTExBQkxFIFNZUlg7TG87MDtMOzs7OztOOzs7OzsKK0EzMjk7WUkgU1lMTEFCTEUgU1lSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzJBO1lJIFNZTExBQkxFIFNTSVQ7TG87MDtMOzs7OztOOzs7OzsKK0EzMkI7WUkgU1lMTEFCTEUgU1NJWDtMbzswO0w7Ozs7O047Ozs7OworQTMyQztZSSBTWUxMQUJMRSBTU0k7TG87MDtMOzs7OztOOzs7OzsKK0EzMkQ7WUkgU1lMTEFCTEUgU1NJUDtMbzswO0w7Ozs7O047Ozs7OworQTMyRTtZSSBTWUxMQUJMRSBTU0lFWDtMbzswO0w7Ozs7O047Ozs7OworQTMyRjtZSSBTWUxMQUJMRSBTU0lFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzMwO1lJIFNZTExBQkxFIFNTSUVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzMxO1lJIFNZTExBQkxFIFNTQVQ7TG87MDtMOzs7OztOOzs7OzsKK0EzMzI7WUkgU1lMTEFCTEUgU1NBWDtMbzswO0w7Ozs7O047Ozs7OworQTMzMztZSSBTWUxMQUJMRSBTU0E7TG87MDtMOzs7OztOOzs7OzsKK0EzMzQ7WUkgU1lMTEFCTEUgU1NBUDtMbzswO0w7Ozs7O047Ozs7OworQTMzNTtZSSBTWUxMQUJMRSBTU09UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzM2O1lJIFNZTExBQkxFIFNTT1g7TG87MDtMOzs7OztOOzs7OzsKK0EzMzc7WUkgU1lMTEFCTEUgU1NPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzM4O1lJIFNZTExBQkxFIFNTT1A7TG87MDtMOzs7OztOOzs7OzsKK0EzMzk7WUkgU1lMTEFCTEUgU1NFWDtMbzswO0w7Ozs7O047Ozs7OworQTMzQTtZSSBTWUxMQUJMRSBTU0U7TG87MDtMOzs7OztOOzs7OzsKK0EzM0I7WUkgU1lMTEFCTEUgU1NFUDtMbzswO0w7Ozs7O047Ozs7OworQTMzQztZSSBTWUxMQUJMRSBTU1VUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzNEO1lJIFNZTExBQkxFIFNTVVg7TG87MDtMOzs7OztOOzs7OzsKK0EzM0U7WUkgU1lMTEFCTEUgU1NVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzNGO1lJIFNZTExBQkxFIFNTVVA7TG87MDtMOzs7OztOOzs7OzsKK0EzNDA7WUkgU1lMTEFCTEUgU1NZVDtMbzswO0w7Ozs7O047Ozs7OworQTM0MTtZSSBTWUxMQUJMRSBTU1lYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzQyO1lJIFNZTExBQkxFIFNTWTtMbzswO0w7Ozs7O047Ozs7OworQTM0MztZSSBTWUxMQUJMRSBTU1lQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzQ0O1lJIFNZTExBQkxFIFNTWVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzQ1O1lJIFNZTExBQkxFIFNTWVI7TG87MDtMOzs7OztOOzs7OzsKK0EzNDY7WUkgU1lMTEFCTEUgWkhBVDtMbzswO0w7Ozs7O047Ozs7OworQTM0NztZSSBTWUxMQUJMRSBaSEFYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzQ4O1lJIFNZTExBQkxFIFpIQTtMbzswO0w7Ozs7O047Ozs7OworQTM0OTtZSSBTWUxMQUJMRSBaSEFQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzRBO1lJIFNZTExBQkxFIFpIVU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzRCO1lJIFNZTExBQkxFIFpIVU87TG87MDtMOzs7OztOOzs7OzsKK0EzNEM7WUkgU1lMTEFCTEUgWkhVT1A7TG87MDtMOzs7OztOOzs7OzsKK0EzNEQ7WUkgU1lMTEFCTEUgWkhPVDtMbzswO0w7Ozs7O047Ozs7OworQTM0RTtZSSBTWUxMQUJMRSBaSE9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzRGO1lJIFNZTExBQkxFIFpITztMbzswO0w7Ozs7O047Ozs7OworQTM1MDtZSSBTWUxMQUJMRSBaSE9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzUxO1lJIFNZTExBQkxFIFpIRVQ7TG87MDtMOzs7OztOOzs7OzsKK0EzNTI7WUkgU1lMTEFCTEUgWkhFWDtMbzswO0w7Ozs7O047Ozs7OworQTM1MztZSSBTWUxMQUJMRSBaSEU7TG87MDtMOzs7OztOOzs7OzsKK0EzNTQ7WUkgU1lMTEFCTEUgWkhFUDtMbzswO0w7Ozs7O047Ozs7OworQTM1NTtZSSBTWUxMQUJMRSBaSFVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzU2O1lJIFNZTExBQkxFIFpIVVg7TG87MDtMOzs7OztOOzs7OzsKK0EzNTc7WUkgU1lMTEFCTEUgWkhVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzU4O1lJIFNZTExBQkxFIFpIVVA7TG87MDtMOzs7OztOOzs7OzsKK0EzNTk7WUkgU1lMTEFCTEUgWkhVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EzNUE7WUkgU1lMTEFCTEUgWkhVUjtMbzswO0w7Ozs7O047Ozs7OworQTM1QjtZSSBTWUxMQUJMRSBaSFlUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzVDO1lJIFNZTExBQkxFIFpIWVg7TG87MDtMOzs7OztOOzs7OzsKK0EzNUQ7WUkgU1lMTEFCTEUgWkhZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzVFO1lJIFNZTExBQkxFIFpIWVA7TG87MDtMOzs7OztOOzs7OzsKK0EzNUY7WUkgU1lMTEFCTEUgWkhZUlg7TG87MDtMOzs7OztOOzs7OzsKK0EzNjA7WUkgU1lMTEFCTEUgWkhZUjtMbzswO0w7Ozs7O047Ozs7OworQTM2MTtZSSBTWUxMQUJMRSBDSEFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzYyO1lJIFNZTExBQkxFIENIQVg7TG87MDtMOzs7OztOOzs7OzsKK0EzNjM7WUkgU1lMTEFCTEUgQ0hBO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzY0O1lJIFNZTExBQkxFIENIQVA7TG87MDtMOzs7OztOOzs7OzsKK0EzNjU7WUkgU1lMTEFCTEUgQ0hVT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EzNjY7WUkgU1lMTEFCTEUgQ0hVT1g7TG87MDtMOzs7OztOOzs7OzsKK0EzNjc7WUkgU1lMTEFCTEUgQ0hVTztMbzswO0w7Ozs7O047Ozs7OworQTM2ODtZSSBTWUxMQUJMRSBDSFVPUDtMbzswO0w7Ozs7O047Ozs7OworQTM2OTtZSSBTWUxMQUJMRSBDSE9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzZBO1lJIFNZTExBQkxFIENIT1g7TG87MDtMOzs7OztOOzs7OzsKK0EzNkI7WUkgU1lMTEFCTEUgQ0hPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzZDO1lJIFNZTExBQkxFIENIT1A7TG87MDtMOzs7OztOOzs7OzsKK0EzNkQ7WUkgU1lMTEFCTEUgQ0hFVDtMbzswO0w7Ozs7O047Ozs7OworQTM2RTtZSSBTWUxMQUJMRSBDSEVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzZGO1lJIFNZTExBQkxFIENIRTtMbzswO0w7Ozs7O047Ozs7OworQTM3MDtZSSBTWUxMQUJMRSBDSEVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzcxO1lJIFNZTExBQkxFIENIVVg7TG87MDtMOzs7OztOOzs7OzsKK0EzNzI7WUkgU1lMTEFCTEUgQ0hVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzczO1lJIFNZTExBQkxFIENIVVA7TG87MDtMOzs7OztOOzs7OzsKK0EzNzQ7WUkgU1lMTEFCTEUgQ0hVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EzNzU7WUkgU1lMTEFCTEUgQ0hVUjtMbzswO0w7Ozs7O047Ozs7OworQTM3NjtZSSBTWUxMQUJMRSBDSFlUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzc3O1lJIFNZTExBQkxFIENIWVg7TG87MDtMOzs7OztOOzs7OzsKK0EzNzg7WUkgU1lMTEFCTEUgQ0hZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzc5O1lJIFNZTExBQkxFIENIWVA7TG87MDtMOzs7OztOOzs7OzsKK0EzN0E7WUkgU1lMTEFCTEUgQ0hZUlg7TG87MDtMOzs7OztOOzs7OzsKK0EzN0I7WUkgU1lMTEFCTEUgQ0hZUjtMbzswO0w7Ozs7O047Ozs7OworQTM3QztZSSBTWUxMQUJMRSBSUkFYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzdEO1lJIFNZTExBQkxFIFJSQTtMbzswO0w7Ozs7O047Ozs7OworQTM3RTtZSSBTWUxMQUJMRSBSUlVPWDtMbzswO0w7Ozs7O047Ozs7OworQTM3RjtZSSBTWUxMQUJMRSBSUlVPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzgwO1lJIFNZTExBQkxFIFJST1Q7TG87MDtMOzs7OztOOzs7OzsKK0EzODE7WUkgU1lMTEFCTEUgUlJPWDtMbzswO0w7Ozs7O047Ozs7OworQTM4MjtZSSBTWUxMQUJMRSBSUk87TG87MDtMOzs7OztOOzs7OzsKK0EzODM7WUkgU1lMTEFCTEUgUlJPUDtMbzswO0w7Ozs7O047Ozs7OworQTM4NDtZSSBTWUxMQUJMRSBSUkVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzg1O1lJIFNZTExBQkxFIFJSRVg7TG87MDtMOzs7OztOOzs7OzsKK0EzODY7WUkgU1lMTEFCTEUgUlJFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzg3O1lJIFNZTExBQkxFIFJSRVA7TG87MDtMOzs7OztOOzs7OzsKK0EzODg7WUkgU1lMTEFCTEUgUlJVVDtMbzswO0w7Ozs7O047Ozs7OworQTM4OTtZSSBTWUxMQUJMRSBSUlVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzhBO1lJIFNZTExBQkxFIFJSVTtMbzswO0w7Ozs7O047Ozs7OworQTM4QjtZSSBTWUxMQUJMRSBSUlVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzhDO1lJIFNZTExBQkxFIFJSVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzhEO1lJIFNZTExBQkxFIFJSVVI7TG87MDtMOzs7OztOOzs7OzsKK0EzOEU7WUkgU1lMTEFCTEUgUlJZVDtMbzswO0w7Ozs7O047Ozs7OworQTM4RjtZSSBTWUxMQUJMRSBSUllYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzkwO1lJIFNZTExBQkxFIFJSWTtMbzswO0w7Ozs7O047Ozs7OworQTM5MTtZSSBTWUxMQUJMRSBSUllQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzkyO1lJIFNZTExBQkxFIFJSWVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzkzO1lJIFNZTExBQkxFIFJSWVI7TG87MDtMOzs7OztOOzs7OzsKK0EzOTQ7WUkgU1lMTEFCTEUgTlJBVDtMbzswO0w7Ozs7O047Ozs7OworQTM5NTtZSSBTWUxMQUJMRSBOUkFYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzk2O1lJIFNZTExBQkxFIE5SQTtMbzswO0w7Ozs7O047Ozs7OworQTM5NztZSSBTWUxMQUJMRSBOUkFQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzk4O1lJIFNZTExBQkxFIE5ST1g7TG87MDtMOzs7OztOOzs7OzsKK0EzOTk7WUkgU1lMTEFCTEUgTlJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzlBO1lJIFNZTExBQkxFIE5ST1A7TG87MDtMOzs7OztOOzs7OzsKK0EzOUI7WUkgU1lMTEFCTEUgTlJFVDtMbzswO0w7Ozs7O047Ozs7OworQTM5QztZSSBTWUxMQUJMRSBOUkVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzlEO1lJIFNZTExBQkxFIE5SRTtMbzswO0w7Ozs7O047Ozs7OworQTM5RTtZSSBTWUxMQUJMRSBOUkVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBMzlGO1lJIFNZTExBQkxFIE5SVVQ7TG87MDtMOzs7OztOOzs7OzsKK0EzQTA7WUkgU1lMTEFCTEUgTlJVWDtMbzswO0w7Ozs7O047Ozs7OworQTNBMTtZSSBTWUxMQUJMRSBOUlU7TG87MDtMOzs7OztOOzs7OzsKK0EzQTI7WUkgU1lMTEFCTEUgTlJVUDtMbzswO0w7Ozs7O047Ozs7OworQTNBMztZSSBTWUxMQUJMRSBOUlVSWDtMbzswO0w7Ozs7O047Ozs7OworQTNBNDtZSSBTWUxMQUJMRSBOUlVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0E1O1lJIFNZTExBQkxFIE5SWVQ7TG87MDtMOzs7OztOOzs7OzsKK0EzQTY7WUkgU1lMTEFCTEUgTlJZWDtMbzswO0w7Ozs7O047Ozs7OworQTNBNztZSSBTWUxMQUJMRSBOUlk7TG87MDtMOzs7OztOOzs7OzsKK0EzQTg7WUkgU1lMTEFCTEUgTlJZUDtMbzswO0w7Ozs7O047Ozs7OworQTNBOTtZSSBTWUxMQUJMRSBOUllSWDtMbzswO0w7Ozs7O047Ozs7OworQTNBQTtZSSBTWUxMQUJMRSBOUllSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0FCO1lJIFNZTExBQkxFIFNIQVQ7TG87MDtMOzs7OztOOzs7OzsKK0EzQUM7WUkgU1lMTEFCTEUgU0hBWDtMbzswO0w7Ozs7O047Ozs7OworQTNBRDtZSSBTWUxMQUJMRSBTSEE7TG87MDtMOzs7OztOOzs7OzsKK0EzQUU7WUkgU1lMTEFCTEUgU0hBUDtMbzswO0w7Ozs7O047Ozs7OworQTNBRjtZSSBTWUxMQUJMRSBTSFVPWDtMbzswO0w7Ozs7O047Ozs7OworQTNCMDtZSSBTWUxMQUJMRSBTSFVPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0IxO1lJIFNZTExBQkxFIFNIVU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0IyO1lJIFNZTExBQkxFIFNIT1Q7TG87MDtMOzs7OztOOzs7OzsKK0EzQjM7WUkgU1lMTEFCTEUgU0hPWDtMbzswO0w7Ozs7O047Ozs7OworQTNCNDtZSSBTWUxMQUJMRSBTSE87TG87MDtMOzs7OztOOzs7OzsKK0EzQjU7WUkgU1lMTEFCTEUgU0hPUDtMbzswO0w7Ozs7O047Ozs7OworQTNCNjtZSSBTWUxMQUJMRSBTSEVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0I3O1lJIFNZTExBQkxFIFNIRVg7TG87MDtMOzs7OztOOzs7OzsKK0EzQjg7WUkgU1lMTEFCTEUgU0hFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0I5O1lJIFNZTExBQkxFIFNIRVA7TG87MDtMOzs7OztOOzs7OzsKK0EzQkE7WUkgU1lMTEFCTEUgU0hVVDtMbzswO0w7Ozs7O047Ozs7OworQTNCQjtZSSBTWUxMQUJMRSBTSFVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0JDO1lJIFNZTExBQkxFIFNIVTtMbzswO0w7Ozs7O047Ozs7OworQTNCRDtZSSBTWUxMQUJMRSBTSFVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0JFO1lJIFNZTExBQkxFIFNIVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0JGO1lJIFNZTExBQkxFIFNIVVI7TG87MDtMOzs7OztOOzs7OzsKK0EzQzA7WUkgU1lMTEFCTEUgU0hZVDtMbzswO0w7Ozs7O047Ozs7OworQTNDMTtZSSBTWUxMQUJMRSBTSFlYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0MyO1lJIFNZTExBQkxFIFNIWTtMbzswO0w7Ozs7O047Ozs7OworQTNDMztZSSBTWUxMQUJMRSBTSFlQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0M0O1lJIFNZTExBQkxFIFNIWVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0M1O1lJIFNZTExBQkxFIFNIWVI7TG87MDtMOzs7OztOOzs7OzsKK0EzQzY7WUkgU1lMTEFCTEUgUkFUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0M3O1lJIFNZTExBQkxFIFJBWDtMbzswO0w7Ozs7O047Ozs7OworQTNDODtZSSBTWUxMQUJMRSBSQTtMbzswO0w7Ozs7O047Ozs7OworQTNDOTtZSSBTWUxMQUJMRSBSQVA7TG87MDtMOzs7OztOOzs7OzsKK0EzQ0E7WUkgU1lMTEFCTEUgUlVPWDtMbzswO0w7Ozs7O047Ozs7OworQTNDQjtZSSBTWUxMQUJMRSBSVU87TG87MDtMOzs7OztOOzs7OzsKK0EzQ0M7WUkgU1lMTEFCTEUgUlVPUDtMbzswO0w7Ozs7O047Ozs7OworQTNDRDtZSSBTWUxMQUJMRSBST1Q7TG87MDtMOzs7OztOOzs7OzsKK0EzQ0U7WUkgU1lMTEFCTEUgUk9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0NGO1lJIFNZTExBQkxFIFJPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0QwO1lJIFNZTExBQkxFIFJPUDtMbzswO0w7Ozs7O047Ozs7OworQTNEMTtZSSBTWUxMQUJMRSBSRVg7TG87MDtMOzs7OztOOzs7OzsKK0EzRDI7WUkgU1lMTEFCTEUgUkU7TG87MDtMOzs7OztOOzs7OzsKK0EzRDM7WUkgU1lMTEFCTEUgUkVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0Q0O1lJIFNZTExBQkxFIFJVVDtMbzswO0w7Ozs7O047Ozs7OworQTNENTtZSSBTWUxMQUJMRSBSVVg7TG87MDtMOzs7OztOOzs7OzsKK0EzRDY7WUkgU1lMTEFCTEUgUlU7TG87MDtMOzs7OztOOzs7OzsKK0EzRDc7WUkgU1lMTEFCTEUgUlVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0Q4O1lJIFNZTExBQkxFIFJVUlg7TG87MDtMOzs7OztOOzs7OzsKK0EzRDk7WUkgU1lMTEFCTEUgUlVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0RBO1lJIFNZTExBQkxFIFJZVDtMbzswO0w7Ozs7O047Ozs7OworQTNEQjtZSSBTWUxMQUJMRSBSWVg7TG87MDtMOzs7OztOOzs7OzsKK0EzREM7WUkgU1lMTEFCTEUgUlk7TG87MDtMOzs7OztOOzs7OzsKK0EzREQ7WUkgU1lMTEFCTEUgUllQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0RFO1lJIFNZTExBQkxFIFJZUlg7TG87MDtMOzs7OztOOzs7OzsKK0EzREY7WUkgU1lMTEFCTEUgUllSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0UwO1lJIFNZTExBQkxFIEpJVDtMbzswO0w7Ozs7O047Ozs7OworQTNFMTtZSSBTWUxMQUJMRSBKSVg7TG87MDtMOzs7OztOOzs7OzsKK0EzRTI7WUkgU1lMTEFCTEUgSkk7TG87MDtMOzs7OztOOzs7OzsKK0EzRTM7WUkgU1lMTEFCTEUgSklQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0U0O1lJIFNZTExBQkxFIEpJRVQ7TG87MDtMOzs7OztOOzs7OzsKK0EzRTU7WUkgU1lMTEFCTEUgSklFWDtMbzswO0w7Ozs7O047Ozs7OworQTNFNjtZSSBTWUxMQUJMRSBKSUU7TG87MDtMOzs7OztOOzs7OzsKK0EzRTc7WUkgU1lMTEFCTEUgSklFUDtMbzswO0w7Ozs7O047Ozs7OworQTNFODtZSSBTWUxMQUJMRSBKVU9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0U5O1lJIFNZTExBQkxFIEpVT1g7TG87MDtMOzs7OztOOzs7OzsKK0EzRUE7WUkgU1lMTEFCTEUgSlVPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0VCO1lJIFNZTExBQkxFIEpVT1A7TG87MDtMOzs7OztOOzs7OzsKK0EzRUM7WUkgU1lMTEFCTEUgSk9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0VEO1lJIFNZTExBQkxFIEpPWDtMbzswO0w7Ozs7O047Ozs7OworQTNFRTtZSSBTWUxMQUJMRSBKTztMbzswO0w7Ozs7O047Ozs7OworQTNFRjtZSSBTWUxMQUJMRSBKT1A7TG87MDtMOzs7OztOOzs7OzsKK0EzRjA7WUkgU1lMTEFCTEUgSlVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0YxO1lJIFNZTExBQkxFIEpVWDtMbzswO0w7Ozs7O047Ozs7OworQTNGMjtZSSBTWUxMQUJMRSBKVTtMbzswO0w7Ozs7O047Ozs7OworQTNGMztZSSBTWUxMQUJMRSBKVVA7TG87MDtMOzs7OztOOzs7OzsKK0EzRjQ7WUkgU1lMTEFCTEUgSlVSWDtMbzswO0w7Ozs7O047Ozs7OworQTNGNTtZSSBTWUxMQUJMRSBKVVI7TG87MDtMOzs7OztOOzs7OzsKK0EzRjY7WUkgU1lMTEFCTEUgSllUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0Y3O1lJIFNZTExBQkxFIEpZWDtMbzswO0w7Ozs7O047Ozs7OworQTNGODtZSSBTWUxMQUJMRSBKWTtMbzswO0w7Ozs7O047Ozs7OworQTNGOTtZSSBTWUxMQUJMRSBKWVA7TG87MDtMOzs7OztOOzs7OzsKK0EzRkE7WUkgU1lMTEFCTEUgSllSWDtMbzswO0w7Ozs7O047Ozs7OworQTNGQjtZSSBTWUxMQUJMRSBKWVI7TG87MDtMOzs7OztOOzs7OzsKK0EzRkM7WUkgU1lMTEFCTEUgUUlUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBM0ZEO1lJIFNZTExBQkxFIFFJWDtMbzswO0w7Ozs7O047Ozs7OworQTNGRTtZSSBTWUxMQUJMRSBRSTtMbzswO0w7Ozs7O047Ozs7OworQTNGRjtZSSBTWUxMQUJMRSBRSVA7TG87MDtMOzs7OztOOzs7OzsKK0E0MDA7WUkgU1lMTEFCTEUgUUlFVDtMbzswO0w7Ozs7O047Ozs7OworQTQwMTtZSSBTWUxMQUJMRSBRSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDAyO1lJIFNZTExBQkxFIFFJRTtMbzswO0w7Ozs7O047Ozs7OworQTQwMztZSSBTWUxMQUJMRSBRSUVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDA0O1lJIFNZTExBQkxFIFFVT1Q7TG87MDtMOzs7OztOOzs7OzsKK0E0MDU7WUkgU1lMTEFCTEUgUVVPWDtMbzswO0w7Ozs7O047Ozs7OworQTQwNjtZSSBTWUxMQUJMRSBRVU87TG87MDtMOzs7OztOOzs7OzsKK0E0MDc7WUkgU1lMTEFCTEUgUVVPUDtMbzswO0w7Ozs7O047Ozs7OworQTQwODtZSSBTWUxMQUJMRSBRT1Q7TG87MDtMOzs7OztOOzs7OzsKK0E0MDk7WUkgU1lMTEFCTEUgUU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDBBO1lJIFNZTExBQkxFIFFPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDBCO1lJIFNZTExBQkxFIFFPUDtMbzswO0w7Ozs7O047Ozs7OworQTQwQztZSSBTWUxMQUJMRSBRVVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0MEQ7WUkgU1lMTEFCTEUgUVVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDBFO1lJIFNZTExBQkxFIFFVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDBGO1lJIFNZTExBQkxFIFFVUDtMbzswO0w7Ozs7O047Ozs7OworQTQxMDtZSSBTWUxMQUJMRSBRVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDExO1lJIFNZTExBQkxFIFFVUjtMbzswO0w7Ozs7O047Ozs7OworQTQxMjtZSSBTWUxMQUJMRSBRWVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0MTM7WUkgU1lMTEFCTEUgUVlYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDE0O1lJIFNZTExBQkxFIFFZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDE1O1lJIFNZTExBQkxFIFFZUDtMbzswO0w7Ozs7O047Ozs7OworQTQxNjtZSSBTWUxMQUJMRSBRWVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDE3O1lJIFNZTExBQkxFIFFZUjtMbzswO0w7Ozs7O047Ozs7OworQTQxODtZSSBTWUxMQUJMRSBKSklUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDE5O1lJIFNZTExBQkxFIEpKSVg7TG87MDtMOzs7OztOOzs7OzsKK0E0MUE7WUkgU1lMTEFCTEUgSkpJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDFCO1lJIFNZTExBQkxFIEpKSVA7TG87MDtMOzs7OztOOzs7OzsKK0E0MUM7WUkgU1lMTEFCTEUgSkpJRVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0MUQ7WUkgU1lMTEFCTEUgSkpJRVg7TG87MDtMOzs7OztOOzs7OzsKK0E0MUU7WUkgU1lMTEFCTEUgSkpJRTtMbzswO0w7Ozs7O047Ozs7OworQTQxRjtZSSBTWUxMQUJMRSBKSklFUDtMbzswO0w7Ozs7O047Ozs7OworQTQyMDtZSSBTWUxMQUJMRSBKSlVPWDtMbzswO0w7Ozs7O047Ozs7OworQTQyMTtZSSBTWUxMQUJMRSBKSlVPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDIyO1lJIFNZTExBQkxFIEpKVU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDIzO1lJIFNZTExBQkxFIEpKT1Q7TG87MDtMOzs7OztOOzs7OzsKK0E0MjQ7WUkgU1lMTEFCTEUgSkpPWDtMbzswO0w7Ozs7O047Ozs7OworQTQyNTtZSSBTWUxMQUJMRSBKSk87TG87MDtMOzs7OztOOzs7OzsKK0E0MjY7WUkgU1lMTEFCTEUgSkpPUDtMbzswO0w7Ozs7O047Ozs7OworQTQyNztZSSBTWUxMQUJMRSBKSlVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDI4O1lJIFNZTExBQkxFIEpKVVg7TG87MDtMOzs7OztOOzs7OzsKK0E0Mjk7WUkgU1lMTEFCTEUgSkpVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDJBO1lJIFNZTExBQkxFIEpKVVA7TG87MDtMOzs7OztOOzs7OzsKK0E0MkI7WUkgU1lMTEFCTEUgSkpVUlg7TG87MDtMOzs7OztOOzs7OzsKK0E0MkM7WUkgU1lMTEFCTEUgSkpVUjtMbzswO0w7Ozs7O047Ozs7OworQTQyRDtZSSBTWUxMQUJMRSBKSllUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDJFO1lJIFNZTExBQkxFIEpKWVg7TG87MDtMOzs7OztOOzs7OzsKK0E0MkY7WUkgU1lMTEFCTEUgSkpZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDMwO1lJIFNZTExBQkxFIEpKWVA7TG87MDtMOzs7OztOOzs7OzsKK0E0MzE7WUkgU1lMTEFCTEUgTkpJVDtMbzswO0w7Ozs7O047Ozs7OworQTQzMjtZSSBTWUxMQUJMRSBOSklYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDMzO1lJIFNZTExBQkxFIE5KSTtMbzswO0w7Ozs7O047Ozs7OworQTQzNDtZSSBTWUxMQUJMRSBOSklQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDM1O1lJIFNZTExBQkxFIE5KSUVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDM2O1lJIFNZTExBQkxFIE5KSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDM3O1lJIFNZTExBQkxFIE5KSUU7TG87MDtMOzs7OztOOzs7OzsKK0E0Mzg7WUkgU1lMTEFCTEUgTkpJRVA7TG87MDtMOzs7OztOOzs7OzsKK0E0Mzk7WUkgU1lMTEFCTEUgTkpVT1g7TG87MDtMOzs7OztOOzs7OzsKK0E0M0E7WUkgU1lMTEFCTEUgTkpVTztMbzswO0w7Ozs7O047Ozs7OworQTQzQjtZSSBTWUxMQUJMRSBOSk9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDNDO1lJIFNZTExBQkxFIE5KT1g7TG87MDtMOzs7OztOOzs7OzsKK0E0M0Q7WUkgU1lMTEFCTEUgTkpPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDNFO1lJIFNZTExBQkxFIE5KT1A7TG87MDtMOzs7OztOOzs7OzsKK0E0M0Y7WUkgU1lMTEFCTEUgTkpVWDtMbzswO0w7Ozs7O047Ozs7OworQTQ0MDtZSSBTWUxMQUJMRSBOSlU7TG87MDtMOzs7OztOOzs7OzsKK0E0NDE7WUkgU1lMTEFCTEUgTkpVUDtMbzswO0w7Ozs7O047Ozs7OworQTQ0MjtZSSBTWUxMQUJMRSBOSlVSWDtMbzswO0w7Ozs7O047Ozs7OworQTQ0MztZSSBTWUxMQUJMRSBOSlVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDQ0O1lJIFNZTExBQkxFIE5KWVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0NDU7WUkgU1lMTEFCTEUgTkpZWDtMbzswO0w7Ozs7O047Ozs7OworQTQ0NjtZSSBTWUxMQUJMRSBOSlk7TG87MDtMOzs7OztOOzs7OzsKK0E0NDc7WUkgU1lMTEFCTEUgTkpZUDtMbzswO0w7Ozs7O047Ozs7OworQTQ0ODtZSSBTWUxMQUJMRSBOSllSWDtMbzswO0w7Ozs7O047Ozs7OworQTQ0OTtZSSBTWUxMQUJMRSBOSllSO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDRBO1lJIFNZTExBQkxFIE5ZSVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0NEI7WUkgU1lMTEFCTEUgTllJWDtMbzswO0w7Ozs7O047Ozs7OworQTQ0QztZSSBTWUxMQUJMRSBOWUk7TG87MDtMOzs7OztOOzs7OzsKK0E0NEQ7WUkgU1lMTEFCTEUgTllJUDtMbzswO0w7Ozs7O047Ozs7OworQTQ0RTtZSSBTWUxMQUJMRSBOWUlFVDtMbzswO0w7Ozs7O047Ozs7OworQTQ0RjtZSSBTWUxMQUJMRSBOWUlFWDtMbzswO0w7Ozs7O047Ozs7OworQTQ1MDtZSSBTWUxMQUJMRSBOWUlFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDUxO1lJIFNZTExBQkxFIE5ZSUVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDUyO1lJIFNZTExBQkxFIE5ZVU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDUzO1lJIFNZTExBQkxFIE5ZVU87TG87MDtMOzs7OztOOzs7OzsKK0E0NTQ7WUkgU1lMTEFCTEUgTllVT1A7TG87MDtMOzs7OztOOzs7OzsKK0E0NTU7WUkgU1lMTEFCTEUgTllPVDtMbzswO0w7Ozs7O047Ozs7OworQTQ1NjtZSSBTWUxMQUJMRSBOWU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDU3O1lJIFNZTExBQkxFIE5ZTztMbzswO0w7Ozs7O047Ozs7OworQTQ1ODtZSSBTWUxMQUJMRSBOWU9QO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDU5O1lJIFNZTExBQkxFIE5ZVVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0NUE7WUkgU1lMTEFCTEUgTllVWDtMbzswO0w7Ozs7O047Ozs7OworQTQ1QjtZSSBTWUxMQUJMRSBOWVU7TG87MDtMOzs7OztOOzs7OzsKK0E0NUM7WUkgU1lMTEFCTEUgTllVUDtMbzswO0w7Ozs7O047Ozs7OworQTQ1RDtZSSBTWUxMQUJMRSBYSVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0NUU7WUkgU1lMTEFCTEUgWElYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDVGO1lJIFNZTExBQkxFIFhJO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDYwO1lJIFNZTExBQkxFIFhJUDtMbzswO0w7Ozs7O047Ozs7OworQTQ2MTtZSSBTWUxMQUJMRSBYSUVUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDYyO1lJIFNZTExBQkxFIFhJRVg7TG87MDtMOzs7OztOOzs7OzsKK0E0NjM7WUkgU1lMTEFCTEUgWElFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDY0O1lJIFNZTExBQkxFIFhJRVA7TG87MDtMOzs7OztOOzs7OzsKK0E0NjU7WUkgU1lMTEFCTEUgWFVPWDtMbzswO0w7Ozs7O047Ozs7OworQTQ2NjtZSSBTWUxMQUJMRSBYVU87TG87MDtMOzs7OztOOzs7OzsKK0E0Njc7WUkgU1lMTEFCTEUgWE9UO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDY4O1lJIFNZTExBQkxFIFhPWDtMbzswO0w7Ozs7O047Ozs7OworQTQ2OTtZSSBTWUxMQUJMRSBYTztMbzswO0w7Ozs7O047Ozs7OworQTQ2QTtZSSBTWUxMQUJMRSBYT1A7TG87MDtMOzs7OztOOzs7OzsKK0E0NkI7WUkgU1lMTEFCTEUgWFlUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDZDO1lJIFNZTExBQkxFIFhZWDtMbzswO0w7Ozs7O047Ozs7OworQTQ2RDtZSSBTWUxMQUJMRSBYWTtMbzswO0w7Ozs7O047Ozs7OworQTQ2RTtZSSBTWUxMQUJMRSBYWVA7TG87MDtMOzs7OztOOzs7OzsKK0E0NkY7WUkgU1lMTEFCTEUgWFlSWDtMbzswO0w7Ozs7O047Ozs7OworQTQ3MDtZSSBTWUxMQUJMRSBYWVI7TG87MDtMOzs7OztOOzs7OzsKK0E0NzE7WUkgU1lMTEFCTEUgWUlUO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDcyO1lJIFNZTExBQkxFIFlJWDtMbzswO0w7Ozs7O047Ozs7OworQTQ3MztZSSBTWUxMQUJMRSBZSTtMbzswO0w7Ozs7O047Ozs7OworQTQ3NDtZSSBTWUxMQUJMRSBZSVA7TG87MDtMOzs7OztOOzs7OzsKK0E0NzU7WUkgU1lMTEFCTEUgWUlFVDtMbzswO0w7Ozs7O047Ozs7OworQTQ3NjtZSSBTWUxMQUJMRSBZSUVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDc3O1lJIFNZTExBQkxFIFlJRTtMbzswO0w7Ozs7O047Ozs7OworQTQ3ODtZSSBTWUxMQUJMRSBZSUVQO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDc5O1lJIFNZTExBQkxFIFlVT1Q7TG87MDtMOzs7OztOOzs7OzsKK0E0N0E7WUkgU1lMTEFCTEUgWVVPWDtMbzswO0w7Ozs7O047Ozs7OworQTQ3QjtZSSBTWUxMQUJMRSBZVU87TG87MDtMOzs7OztOOzs7OzsKK0E0N0M7WUkgU1lMTEFCTEUgWVVPUDtMbzswO0w7Ozs7O047Ozs7OworQTQ3RDtZSSBTWUxMQUJMRSBZT1Q7TG87MDtMOzs7OztOOzs7OzsKK0E0N0U7WUkgU1lMTEFCTEUgWU9YO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDdGO1lJIFNZTExBQkxFIFlPO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDgwO1lJIFNZTExBQkxFIFlPUDtMbzswO0w7Ozs7O047Ozs7OworQTQ4MTtZSSBTWUxMQUJMRSBZVVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0ODI7WUkgU1lMTEFCTEUgWVVYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDgzO1lJIFNZTExBQkxFIFlVO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDg0O1lJIFNZTExBQkxFIFlVUDtMbzswO0w7Ozs7O047Ozs7OworQTQ4NTtZSSBTWUxMQUJMRSBZVVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDg2O1lJIFNZTExBQkxFIFlVUjtMbzswO0w7Ozs7O047Ozs7OworQTQ4NztZSSBTWUxMQUJMRSBZWVQ7TG87MDtMOzs7OztOOzs7OzsKK0E0ODg7WUkgU1lMTEFCTEUgWVlYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDg5O1lJIFNZTExBQkxFIFlZO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDhBO1lJIFNZTExBQkxFIFlZUDtMbzswO0w7Ozs7O047Ozs7OworQTQ4QjtZSSBTWUxMQUJMRSBZWVJYO0xvOzA7TDs7Ozs7Tjs7Ozs7CitBNDhDO1lJIFNZTExBQkxFIFlZUjtMbzswO0w7Ozs7O047Ozs7OworQTQ5MDtZSSBSQURJQ0FMIFFPVDtTbzswO09OOzs7OztOOzs7OzsKK0E0OTE7WUkgUkFESUNBTCBMSTtTbzswO09OOzs7OztOOzs7OzsKK0E0OTI7WUkgUkFESUNBTCBLSVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNDkzO1lJIFJBRElDQUwgTllJUDtTbzswO09OOzs7OztOOzs7OzsKK0E0OTQ7WUkgUkFESUNBTCBDWVA7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNDk1O1lJIFJBRElDQUwgU1NJO1NvOzA7T047Ozs7O047Ozs7OworQTQ5NjtZSSBSQURJQ0FMIEdHT1A7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNDk3O1lJIFJBRElDQUwgR0VQO1NvOzA7T047Ozs7O047Ozs7OworQTQ5ODtZSSBSQURJQ0FMIE1JO1NvOzA7T047Ozs7O047Ozs7OworQTQ5OTtZSSBSQURJQ0FMIEhYSVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNDlBO1lJIFJBRElDQUwgTFlSO1NvOzA7T047Ozs7O047Ozs7OworQTQ5QjtZSSBSQURJQ0FMIEJCVVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNDlDO1lJIFJBRElDQUwgTU9QO1NvOzA7T047Ozs7O047Ozs7OworQTQ5RDtZSSBSQURJQ0FMIFlPO1NvOzA7T047Ozs7O047Ozs7OworQTQ5RTtZSSBSQURJQ0FMIFBVVDtTbzswO09OOzs7OztOOzs7OzsKK0E0OUY7WUkgUkFESUNBTCBIWFVPO1NvOzA7T047Ozs7O047Ozs7OworQTRBMDtZSSBSQURJQ0FMIFRBVDtTbzswO09OOzs7OztOOzs7OzsKK0E0QTE7WUkgUkFESUNBTCBHQTtTbzswO09OOzs7OztOOzs7OzsKK0E0QTI7WUkgUkFESUNBTCBaVVA7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEEzO1lJIFJBRElDQUwgQ1lUO1NvOzA7T047Ozs7O047Ozs7OworQTRBNDtZSSBSQURJQ0FMIEREVVI7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEE1O1lJIFJBRElDQUwgQlVSO1NvOzA7T047Ozs7O047Ozs7OworQTRBNjtZSSBSQURJQ0FMIEdHVU87U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEE3O1lJIFJBRElDQUwgTllPUDtTbzswO09OOzs7OztOOzs7OzsKK0E0QTg7WUkgUkFESUNBTCBUVTtTbzswO09OOzs7OztOOzs7OzsKK0E0QTk7WUkgUkFESUNBTCBPUDtTbzswO09OOzs7OztOOzs7OzsKK0E0QUE7WUkgUkFESUNBTCBKSlVUO1NvOzA7T047Ozs7O047Ozs7OworQTRBQjtZSSBSQURJQ0FMIFpPVDtTbzswO09OOzs7OztOOzs7OzsKK0E0QUM7WUkgUkFESUNBTCBQWVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEFEO1lJIFJBRElDQUwgSE1PO1NvOzA7T047Ozs7O047Ozs7OworQTRBRTtZSSBSQURJQ0FMIFlJVDtTbzswO09OOzs7OztOOzs7OzsKK0E0QUY7WUkgUkFESUNBTCBWVVI7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEIwO1lJIFJBRElDQUwgU0hZO1NvOzA7T047Ozs7O047Ozs7OworQTRCMTtZSSBSQURJQ0FMIFZFUDtTbzswO09OOzs7OztOOzs7OzsKK0E0QjI7WUkgUkFESUNBTCBaQTtTbzswO09OOzs7OztOOzs7OzsKK0E0QjM7WUkgUkFESUNBTCBKTztTbzswO09OOzs7OztOOzs7OzsKK0E0QjQ7WUkgUkFESUNBTCBOWlVQO1NvOzA7T047Ozs7O047Ozs7OworQTRCNTtZSSBSQURJQ0FMIEpKWTtTbzswO09OOzs7OztOOzs7OzsKK0E0QjY7WUkgUkFESUNBTCBHT1Q7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEI3O1lJIFJBRElDQUwgSkpJRTtTbzswO09OOzs7OztOOzs7OzsKK0E0Qjg7WUkgUkFESUNBTCBXTztTbzswO09OOzs7OztOOzs7OzsKK0E0Qjk7WUkgUkFESUNBTCBEVTtTbzswO09OOzs7OztOOzs7OzsKK0E0QkE7WUkgUkFESUNBTCBTSFVSO1NvOzA7T047Ozs7O047Ozs7OworQTRCQjtZSSBSQURJQ0FMIExJRTtTbzswO09OOzs7OztOOzs7OzsKK0E0QkM7WUkgUkFESUNBTCBDWTtTbzswO09OOzs7OztOOzs7OzsKK0E0QkQ7WUkgUkFESUNBTCBDVU9QO1NvOzA7T047Ozs7O047Ozs7OworQTRCRTtZSSBSQURJQ0FMIENJUDtTbzswO09OOzs7OztOOzs7OzsKK0E0QkY7WUkgUkFESUNBTCBIWE9QO1NvOzA7T047Ozs7O047Ozs7OworQTRDMDtZSSBSQURJQ0FMIFNIQVQ7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEMxO1lJIFJBRElDQUwgWlVSO1NvOzA7T047Ozs7O047Ozs7OworQTRDMjtZSSBSQURJQ0FMIFNIT1A7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEMzO1lJIFJBRElDQUwgQ0hFO1NvOzA7T047Ozs7O047Ozs7OworQTRDNDtZSSBSQURJQ0FMIFpaSUVUO1NvOzA7T047Ozs7O047Ozs7OworQTRDNTtZSSBSQURJQ0FMIE5CSUU7U287MDtPTjs7Ozs7Tjs7Ozs7CitBNEM2O1lJIFJBRElDQUwgS0U7U287MDtPTjs7Ozs7Tjs7Ozs7CitBQzAwOzxIYW5ndWwgU3lsbGFibGUsIEZpcnN0PjtMbzswO0w7Ozs7O047Ozs7OworRDdBMzs8SGFuZ3VsIFN5bGxhYmxlLCBMYXN0PjtMbzswO0w7Ozs7O047Ozs7OworRDgwMDs8Tm9uIFByaXZhdGUgVXNlIEhpZ2ggU3Vycm9nYXRlLCBGaXJzdD47Q3M7MDtMOzs7OztOOzs7OzsKK0RCN0Y7PE5vbiBQcml2YXRlIFVzZSBIaWdoIFN1cnJvZ2F0ZSwgTGFzdD47Q3M7MDtMOzs7OztOOzs7OzsKK0RCODA7PFByaXZhdGUgVXNlIEhpZ2ggU3Vycm9nYXRlLCBGaXJzdD47Q3M7MDtMOzs7OztOOzs7OzsKK0RCRkY7PFByaXZhdGUgVXNlIEhpZ2ggU3Vycm9nYXRlLCBMYXN0PjtDczswO0w7Ozs7O047Ozs7OworREMwMDs8TG93IFN1cnJvZ2F0ZSwgRmlyc3Q+O0NzOzA7TDs7Ozs7Tjs7Ozs7CitERkZGOzxMb3cgU3Vycm9nYXRlLCBMYXN0PjtDczswO0w7Ozs7O047Ozs7OworRTAwMDs8UHJpdmF0ZSBVc2UsIEZpcnN0PjtDbzswO0w7Ozs7O047Ozs7OworRjhGRjs8UHJpdmF0ZSBVc2UsIExhc3Q+O0NvOzA7TDs7Ozs7Tjs7Ozs7CitGOTAwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTAwO0xvOzA7TDs4QzQ4Ozs7O047Ozs7OworRjkwMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwMTtMbzswO0w7NjZGNDs7OztOOzs7OzsKK0Y5MDI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MDI7TG87MDtMOzhFQ0E7Ozs7Tjs7Ozs7CitGOTAzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTAzO0xvOzA7TDs4Q0M4Ozs7O047Ozs7OworRjkwNDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwNDtMbzswO0w7NkVEMTs7OztOOzs7OzsKK0Y5MDU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MDU7TG87MDtMOzRFMzI7Ozs7Tjs7Ozs7CitGOTA2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTA2O0xvOzA7TDs1M0U1Ozs7O047Ozs7OworRjkwNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwNztMbzswO0w7OUY5Qzs7OztOOzs7OzsKK0Y5MDg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MDg7TG87MDtMOzlGOUM7Ozs7Tjs7Ozs7CitGOTA5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTA5O0xvOzA7TDs1OTUxOzs7O047Ozs7OworRjkwQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwQTtMbzswO0w7OTFEMTs7OztOOzs7OzsKK0Y5MEI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MEI7TG87MDtMOzU1ODc7Ozs7Tjs7Ozs7CitGOTBDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTBDO0xvOzA7TDs1OTQ4Ozs7O047Ozs7OworRjkwRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkwRDtMbzswO0w7NjFGNjs7OztOOzs7OzsKK0Y5MEU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MEU7TG87MDtMOzc2Njk7Ozs7Tjs7Ozs7CitGOTBGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTBGO0xvOzA7TDs3Rjg1Ozs7O047Ozs7OworRjkxMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxMDtMbzswO0w7ODYzRjs7OztOOzs7OzsKK0Y5MTE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MTE7TG87MDtMOzg3QkE7Ozs7Tjs7Ozs7CitGOTEyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTEyO0xvOzA7TDs4OEY4Ozs7O047Ozs7OworRjkxMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxMztMbzswO0w7OTA4Rjs7OztOOzs7OzsKK0Y5MTQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MTQ7TG87MDtMOzZBMDI7Ozs7Tjs7Ozs7CitGOTE1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTE1O0xvOzA7TDs2RDFCOzs7O047Ozs7OworRjkxNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxNjtMbzswO0w7NzBEOTs7OztOOzs7OzsKK0Y5MTc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MTc7TG87MDtMOzczREU7Ozs7Tjs7Ozs7CitGOTE4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTE4O0xvOzA7TDs4NDNEOzs7O047Ozs7OworRjkxOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxOTtMbzswO0w7OTE2QTs7OztOOzs7OzsKK0Y5MUE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MUE7TG87MDtMOzk5RjE7Ozs7Tjs7Ozs7CitGOTFCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTFCO0xvOzA7TDs0RTgyOzs7O047Ozs7OworRjkxQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxQztMbzswO0w7NTM3NTs7OztOOzs7OzsKK0Y5MUQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MUQ7TG87MDtMOzZCMDQ7Ozs7Tjs7Ozs7CitGOTFFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTFFO0xvOzA7TDs3MjFCOzs7O047Ozs7OworRjkxRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkxRjtMbzswO0w7ODYyRDs7OztOOzs7OzsKK0Y5MjA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MjA7TG87MDtMOzlFMUU7Ozs7Tjs7Ozs7CitGOTIxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTIxO0xvOzA7TDs1RDUwOzs7O047Ozs7OworRjkyMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyMjtMbzswO0w7NkZFQjs7OztOOzs7OzsKK0Y5MjM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MjM7TG87MDtMOzg1Q0Q7Ozs7Tjs7Ozs7CitGOTI0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTI0O0xvOzA7TDs4OTY0Ozs7O047Ozs7OworRjkyNTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyNTtMbzswO0w7NjJDOTs7OztOOzs7OzsKK0Y5MjY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MjY7TG87MDtMOzgxRDg7Ozs7Tjs7Ozs7CitGOTI3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTI3O0xvOzA7TDs4ODFGOzs7O047Ozs7OworRjkyODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyODtMbzswO0w7NUVDQTs7OztOOzs7OzsKK0Y5Mjk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Mjk7TG87MDtMOzY3MTc7Ozs7Tjs7Ozs7CitGOTJBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTJBO0xvOzA7TDs2RDZBOzs7O047Ozs7OworRjkyQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyQjtMbzswO0w7NzJGQzs7OztOOzs7OzsKK0Y5MkM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MkM7TG87MDtMOzkwQ0U7Ozs7Tjs7Ozs7CitGOTJEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTJEO0xvOzA7TDs0Rjg2Ozs7O047Ozs7OworRjkyRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkyRTtMbzswO0w7NTFCNzs7OztOOzs7OzsKK0Y5MkY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MkY7TG87MDtMOzUyREU7Ozs7Tjs7Ozs7CitGOTMwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTMwO0xvOzA7TDs2NEM0Ozs7O047Ozs7OworRjkzMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzMTtMbzswO0w7NkFEMzs7OztOOzs7OzsKK0Y5MzI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MzI7TG87MDtMOzcyMTA7Ozs7Tjs7Ozs7CitGOTMzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTMzO0xvOzA7TDs3NkU3Ozs7O047Ozs7OworRjkzNDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzNDtMbzswO0w7ODAwMTs7OztOOzs7OzsKK0Y5MzU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MzU7TG87MDtMOzg2MDY7Ozs7Tjs7Ozs7CitGOTM2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTM2O0xvOzA7TDs4NjVDOzs7O047Ozs7OworRjkzNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzNztMbzswO0w7OERFRjs7OztOOzs7OzsKK0Y5Mzg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Mzg7TG87MDtMOzk3MzI7Ozs7Tjs7Ozs7CitGOTM5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTM5O0xvOzA7TDs5QjZGOzs7O047Ozs7OworRjkzQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzQTtMbzswO0w7OURGQTs7OztOOzs7OzsKK0Y5M0I7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5M0I7TG87MDtMOzc4OEM7Ozs7Tjs7Ozs7CitGOTNDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTNDO0xvOzA7TDs3OTdGOzs7O047Ozs7OworRjkzRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjkzRDtMbzswO0w7N0RBMDs7OztOOzs7OzsKK0Y5M0U7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5M0U7TG87MDtMOzgzQzk7Ozs7Tjs7Ozs7CitGOTNGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTNGO0xvOzA7TDs5MzA0Ozs7O047Ozs7OworRjk0MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0MDtMbzswO0w7OUU3Rjs7OztOOzs7OzsKK0Y5NDE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NDE7TG87MDtMOzhBRDY7Ozs7Tjs7Ozs7CitGOTQyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTQyO0xvOzA7TDs1OERGOzs7O047Ozs7OworRjk0MztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0MztMbzswO0w7NUYwNDs7OztOOzs7OzsKK0Y5NDQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NDQ7TG87MDtMOzdDNjA7Ozs7Tjs7Ozs7CitGOTQ1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTQ1O0xvOzA7TDs4MDdFOzs7O047Ozs7OworRjk0NjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0NjtMbzswO0w7NzI2Mjs7OztOOzs7OzsKK0Y5NDc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NDc7TG87MDtMOzc4Q0E7Ozs7Tjs7Ozs7CitGOTQ4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTQ4O0xvOzA7TDs4Q0MyOzs7O047Ozs7OworRjk0OTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0OTtMbzswO0w7OTZGNzs7OztOOzs7OzsKK0Y5NEE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NEE7TG87MDtMOzU4RDg7Ozs7Tjs7Ozs7CitGOTRCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTRCO0xvOzA7TDs1QzYyOzs7O047Ozs7OworRjk0QztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0QztMbzswO0w7NkExMzs7OztOOzs7OzsKK0Y5NEQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NEQ7TG87MDtMOzZEREE7Ozs7Tjs7Ozs7CitGOTRFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTRFO0xvOzA7TDs2RjBGOzs7O047Ozs7OworRjk0RjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk0RjtMbzswO0w7N0QyRjs7OztOOzs7OzsKK0Y5NTA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NTA7TG87MDtMOzdFMzc7Ozs7Tjs7Ozs7CitGOTUxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTUxO0xvOzA7TDs5NjRCOzs7O047Ozs7OworRjk1MjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1MjtMbzswO0w7NTJEMjs7OztOOzs7OzsKK0Y5NTM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NTM7TG87MDtMOzgwOEI7Ozs7Tjs7Ozs7CitGOTU0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTU0O0xvOzA7TDs1MURDOzs7O047Ozs7OworRjk1NTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1NTtMbzswO0w7NTFDQzs7OztOOzs7OzsKK0Y5NTY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NTY7TG87MDtMOzdBMUM7Ozs7Tjs7Ozs7CitGOTU3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTU3O0xvOzA7TDs3REJFOzs7O047Ozs7OworRjk1ODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1ODtMbzswO0w7ODNGMTs7OztOOzs7OzsKK0Y5NTk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NTk7TG87MDtMOzk2NzU7Ozs7Tjs7Ozs7CitGOTVBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTVBO0xvOzA7TDs4QjgwOzs7O047Ozs7OworRjk1QjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1QjtMbzswO0w7NjJDRjs7OztOOzs7OzsKK0Y5NUM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NUM7TG87MDtMOzZBMDI7Ozs7Tjs7Ozs7CitGOTVEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTVEO0xvOzA7TDs4QUZFOzs7O047Ozs7OworRjk1RTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk1RTtMbzswO0w7NEUzOTs7OztOOzs7OzsKK0Y5NUY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NUY7TG87MDtMOzVCRTc7Ozs7Tjs7Ozs7CitGOTYwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTYwO0xvOzA7TDs2MDEyOzs7O047Ozs7OworRjk2MTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2MTtMbzswO0w7NzM4Nzs7OztOOzs7OzsKK0Y5NjI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NjI7TG87MDtMOzc1NzA7Ozs7Tjs7Ozs7CitGOTYzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTYzO0xvOzA7TDs1MzE3Ozs7O047Ozs7OworRjk2NDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2NDtMbzswO0w7NzhGQjs7OztOOzs7OzsKK0Y5NjU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NjU7TG87MDtMOzRGQkY7Ozs7Tjs7Ozs7CitGOTY2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTY2O0xvOzA7TDs1RkE5Ozs7O047Ozs7OworRjk2NztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2NztMbzswO0w7NEUwRDs7OztOOzs7OzsKK0Y5Njg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Njg7TG87MDtMOzZDQ0M7Ozs7Tjs7Ozs7CitGOTY5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTY5O0xvOzA7TDs2NTc4Ozs7O047Ozs7OworRjk2QTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2QTtMbzswO0w7N0QyMjs7OztOOzs7OzsKK0Y5NkI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NkI7TG87MDtMOzUzQzM7Ozs7Tjs7Ozs7CitGOTZDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTZDO0xvOzA7TDs1ODVFOzs7O047Ozs7OworRjk2RDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk2RDtMbzswO0w7NzcwMTs7OztOOzs7OzsKK0Y5NkU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NkU7TG87MDtMOzg0NDk7Ozs7Tjs7Ozs7CitGOTZGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTZGO0xvOzA7TDs4QUFBOzs7O047Ozs7OworRjk3MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3MDtMbzswO0w7NkJCQTs7OztOOzs7OzsKK0Y5NzE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NzE7TG87MDtMOzhGQjA7Ozs7Tjs7Ozs7CitGOTcyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTcyO0xvOzA7TDs2Qzg4Ozs7O047Ozs7OworRjk3MztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3MztMbzswO0w7NjJGRTs7OztOOzs7OzsKK0Y5NzQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5NzQ7TG87MDtMOzgyRTU7Ozs7Tjs7Ozs7CitGOTc1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTc1O0xvOzA7TDs2M0EwOzs7O047Ozs7OworRjk3NjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3NjtMbzswO0w7NzU2NTs7OztOOzs7OzsKK0Y5Nzc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Nzc7TG87MDtMOzRFQUU7Ozs7Tjs7Ozs7CitGOTc4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTc4O0xvOzA7TDs1MTY5Ozs7O047Ozs7OworRjk3OTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3OTtMbzswO0w7NTFDOTs7OztOOzs7OzsKK0Y5N0E7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5N0E7TG87MDtMOzY4ODE7Ozs7Tjs7Ozs7CitGOTdCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTdCO0xvOzA7TDs3Q0U3Ozs7O047Ozs7OworRjk3QztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3QztMbzswO0w7ODI2Rjs7OztOOzs7OzsKK0Y5N0Q7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5N0Q7TG87MDtMOzhBRDI7Ozs7Tjs7Ozs7CitGOTdFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTdFO0xvOzA7TDs5MUNGOzs7O047Ozs7OworRjk3RjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk3RjtMbzswO0w7NTJGNTs7OztOOzs7OzsKK0Y5ODA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5ODA7TG87MDtMOzU0NDI7Ozs7Tjs7Ozs7CitGOTgxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTgxO0xvOzA7TDs1OTczOzs7O047Ozs7OworRjk4MjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4MjtMbzswO0w7NUVFQzs7OztOOzs7OzsKK0Y5ODM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5ODM7TG87MDtMOzY1QzU7Ozs7Tjs7Ozs7CitGOTg0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTg0O0xvOzA7TDs2RkZFOzs7O047Ozs7OworRjk4NTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4NTtMbzswO0w7NzkyQTs7OztOOzs7OzsKK0Y5ODY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5ODY7TG87MDtMOzk1QUQ7Ozs7Tjs7Ozs7CitGOTg3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTg3O0xvOzA7TDs5QTZBOzs7O047Ozs7OworRjk4ODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4ODtMbzswO0w7OUU5Nzs7OztOOzs7OzsKK0Y5ODk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5ODk7TG87MDtMOzlFQ0U7Ozs7Tjs7Ozs7CitGOThBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOThBO0xvOzA7TDs1MjlCOzs7O047Ozs7OworRjk4QjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4QjtMbzswO0w7NjZDNjs7OztOOzs7OzsKK0Y5OEM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OEM7TG87MDtMOzZCNzc7Ozs7Tjs7Ozs7CitGOThEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOThEO0xvOzA7TDs4RjYyOzs7O047Ozs7OworRjk4RTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk4RTtMbzswO0w7NUU3NDs7OztOOzs7OzsKK0Y5OEY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OEY7TG87MDtMOzYxOTA7Ozs7Tjs7Ozs7CitGOTkwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTkwO0xvOzA7TDs2MjAwOzs7O047Ozs7OworRjk5MTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5MTtMbzswO0w7NjQ5QTs7OztOOzs7OzsKK0Y5OTI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OTI7TG87MDtMOzZGMjM7Ozs7Tjs7Ozs7CitGOTkzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTkzO0xvOzA7TDs3MTQ5Ozs7O047Ozs7OworRjk5NDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5NDtMbzswO0w7NzQ4OTs7OztOOzs7OzsKK0Y5OTU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OTU7TG87MDtMOzc5Q0E7Ozs7Tjs7Ozs7CitGOTk2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTk2O0xvOzA7TDs3REY0Ozs7O047Ozs7OworRjk5NztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5NztMbzswO0w7ODA2Rjs7OztOOzs7OzsKK0Y5OTg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OTg7TG87MDtMOzhGMjY7Ozs7Tjs7Ozs7CitGOTk5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTk5O0xvOzA7TDs4NEVFOzs7O047Ozs7OworRjk5QTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5QTtMbzswO0w7OTAyMzs7OztOOzs7OzsKK0Y5OUI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OUI7TG87MDtMOzkzNEE7Ozs7Tjs7Ozs7CitGOTlDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTlDO0xvOzA7TDs1MjE3Ozs7O047Ozs7OworRjk5RDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjk5RDtMbzswO0w7NTJBMzs7OztOOzs7OzsKK0Y5OUU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5OUU7TG87MDtMOzU0QkQ7Ozs7Tjs7Ozs7CitGOTlGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTlGO0xvOzA7TDs3MEM4Ozs7O047Ozs7OworRjlBMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBMDtMbzswO0w7ODhDMjs7OztOOzs7OzsKK0Y5QTE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QTE7TG87MDtMOzhBQUE7Ozs7Tjs7Ozs7CitGOUEyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUEyO0xvOzA7TDs1RUM5Ozs7O047Ozs7OworRjlBMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBMztMbzswO0w7NUZGNTs7OztOOzs7OzsKK0Y5QTQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QTQ7TG87MDtMOzYzN0I7Ozs7Tjs7Ozs7CitGOUE1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUE1O0xvOzA7TDs2QkFFOzs7O047Ozs7OworRjlBNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBNjtMbzswO0w7N0MzRTs7OztOOzs7OzsKK0Y5QTc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QTc7TG87MDtMOzczNzU7Ozs7Tjs7Ozs7CitGOUE4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUE4O0xvOzA7TDs0RUU0Ozs7O047Ozs7OworRjlBOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBOTtMbzswO0w7NTZGOTs7OztOOzs7OzsKK0Y5QUE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QUE7TG87MDtMOzVCRTc7Ozs7Tjs7Ozs7CitGOUFCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUFCO0xvOzA7TDs1REJBOzs7O047Ozs7OworRjlBQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBQztMbzswO0w7NjAxQzs7OztOOzs7OzsKK0Y5QUQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QUQ7TG87MDtMOzczQjI7Ozs7Tjs7Ozs7CitGOUFFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUFFO0xvOzA7TDs3NDY5Ozs7O047Ozs7OworRjlBRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlBRjtMbzswO0w7N0Y5QTs7OztOOzs7OzsKK0Y5QjA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QjA7TG87MDtMOzgwNDY7Ozs7Tjs7Ozs7CitGOUIxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUIxO0xvOzA7TDs5MjM0Ozs7O047Ozs7OworRjlCMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCMjtMbzswO0w7OTZGNjs7OztOOzs7OzsKK0Y5QjM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QjM7TG87MDtMOzk3NDg7Ozs7Tjs7Ozs7CitGOUI0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUI0O0xvOzA7TDs5ODE4Ozs7O047Ozs7OworRjlCNTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCNTtMbzswO0w7NEY4Qjs7OztOOzs7OzsKK0Y5QjY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QjY7TG87MDtMOzc5QUU7Ozs7Tjs7Ozs7CitGOUI3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUI3O0xvOzA7TDs5MUI0Ozs7O047Ozs7OworRjlCODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCODtMbzswO0w7OTZCODs7OztOOzs7OzsKK0Y5Qjk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Qjk7TG87MDtMOzYwRTE7Ozs7Tjs7Ozs7CitGOUJBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUJBO0xvOzA7TDs0RTg2Ozs7O047Ozs7OworRjlCQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCQjtMbzswO0w7NTBEQTs7OztOOzs7OzsKK0Y5QkM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QkM7TG87MDtMOzVCRUU7Ozs7Tjs7Ozs7CitGOUJEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUJEO0xvOzA7TDs1QzNGOzs7O047Ozs7OworRjlCRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlCRTtMbzswO0w7NjU5OTs7OztOOzs7OzsKK0Y5QkY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QkY7TG87MDtMOzZBMDI7Ozs7Tjs7Ozs7CitGOUMwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUMwO0xvOzA7TDs3MUNFOzs7O047Ozs7OworRjlDMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDMTtMbzswO0w7NzY0Mjs7OztOOzs7OzsKK0Y5QzI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QzI7TG87MDtMOzg0RkM7Ozs7Tjs7Ozs7CitGOUMzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUMzO0xvOzA7TDs5MDdDOzs7O047Ozs7OworRjlDNDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDNDtMbzswO0w7OUY4RDs7OztOOzs7OzsKK0Y5QzU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5QzU7TG87MDtMOzY2ODg7Ozs7Tjs7Ozs7CitGOUM2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUM2O0xvOzA7TDs5NjJFOzs7O047Ozs7OworRjlDNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDNztMbzswO0w7NTI4OTs7OztOOzs7OzsKK0Y5Qzg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Qzg7TG87MDtMOzY3N0I7Ozs7Tjs7Ozs7CitGOUM5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUM5O0xvOzA7TDs2N0YzOzs7O047Ozs7OworRjlDQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDQTtMbzswO0w7NkQ0MTs7OztOOzs7OzsKK0Y5Q0I7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Q0I7TG87MDtMOzZFOUM7Ozs7Tjs7Ozs7CitGOUNDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUNDO0xvOzA7TDs3NDA5Ozs7O047Ozs7OworRjlDRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlDRDtMbzswO0w7NzU1OTs7OztOOzs7OzsKK0Y5Q0U7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Q0U7TG87MDtMOzc4NkI7Ozs7Tjs7Ozs7CitGOUNGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUNGO0xvOzA7TDs3RDEwOzs7O047Ozs7OworRjlEMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlEMDtMbzswO0w7OTg1RTs7OztOOzs7OzsKK0Y5RDE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RDE7TG87MDtMOzUxNkQ7Ozs7Tjs7Ozs7CitGOUQyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUQyO0xvOzA7TDs2MjJFOzs7O047Ozs7OworRjlEMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlEMztMbzswO0w7OTY3ODs7OztOOzs7OzsKK0Y5RDQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RDQ7TG87MDtMOzUwMkI7Ozs7Tjs7Ozs7CitGOUQ1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUQ1O0xvOzA7TDs1RDE5Ozs7O047Ozs7OworRjlENjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlENjtMbzswO0w7NkRFQTs7OztOOzs7OzsKK0Y5RDc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RDc7TG87MDtMOzhGMkE7Ozs7Tjs7Ozs7CitGOUQ4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUQ4O0xvOzA7TDs1RjhCOzs7O047Ozs7OworRjlEOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlEOTtMbzswO0w7NjE0NDs7OztOOzs7OzsKK0Y5REE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5REE7TG87MDtMOzY4MTc7Ozs7Tjs7Ozs7CitGOURCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOURCO0xvOzA7TDs3Mzg3Ozs7O047Ozs7OworRjlEQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlEQztMbzswO0w7OTY4Njs7OztOOzs7OzsKK0Y5REQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5REQ7TG87MDtMOzUyMjk7Ozs7Tjs7Ozs7CitGOURFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOURFO0xvOzA7TDs1NDBGOzs7O047Ozs7OworRjlERjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlERjtMbzswO0w7NUM2NTs7OztOOzs7OzsKK0Y5RTA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RTA7TG87MDtMOzY2MTM7Ozs7Tjs7Ozs7CitGOUUxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUUxO0xvOzA7TDs2NzRFOzs7O047Ozs7OworRjlFMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFMjtMbzswO0w7NjhBODs7OztOOzs7OzsKK0Y5RTM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RTM7TG87MDtMOzZDRTU7Ozs7Tjs7Ozs7CitGOUU0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUU0O0xvOzA7TDs3NDA2Ozs7O047Ozs7OworRjlFNTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFNTtMbzswO0w7NzVFMjs7OztOOzs7OzsKK0Y5RTY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RTY7TG87MDtMOzdGNzk7Ozs7Tjs7Ozs7CitGOUU3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUU3O0xvOzA7TDs4OENGOzs7O047Ozs7OworRjlFODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFODtMbzswO0w7ODhFMTs7OztOOzs7OzsKK0Y5RTk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RTk7TG87MDtMOzkxQ0M7Ozs7Tjs7Ozs7CitGOUVBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUVBO0xvOzA7TDs5NkUyOzs7O047Ozs7OworRjlFQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFQjtMbzswO0w7NTMzRjs7OztOOzs7OzsKK0Y5RUM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RUM7TG87MDtMOzZFQkE7Ozs7Tjs7Ozs7CitGOUVEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUVEO0xvOzA7TDs1NDFEOzs7O047Ozs7OworRjlFRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlFRTtMbzswO0w7NzFEMDs7OztOOzs7OzsKK0Y5RUY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RUY7TG87MDtMOzc0OTg7Ozs7Tjs7Ozs7CitGOUYwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUYwO0xvOzA7TDs4NUZBOzs7O047Ozs7OworRjlGMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGMTtMbzswO0w7OTZBMzs7OztOOzs7OzsKK0Y5RjI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RjI7TG87MDtMOzlDNTc7Ozs7Tjs7Ozs7CitGOUYzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUYzO0xvOzA7TDs5RTlGOzs7O047Ozs7OworRjlGNDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGNDtMbzswO0w7Njc5Nzs7OztOOzs7OzsKK0Y5RjU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RjU7TG87MDtMOzZEQ0I7Ozs7Tjs7Ozs7CitGOUY2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUY2O0xvOzA7TDs4MUU4Ozs7O047Ozs7OworRjlGNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGNztMbzswO0w7N0FDQjs7OztOOzs7OzsKK0Y5Rjg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5Rjg7TG87MDtMOzdCMjA7Ozs7Tjs7Ozs7CitGOUY5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUY5O0xvOzA7TDs3QzkyOzs7O047Ozs7OworRjlGQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGQTtMbzswO0w7NzJDMDs7OztOOzs7OzsKK0Y5RkI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RkI7TG87MDtMOzcwOTk7Ozs7Tjs7Ozs7CitGOUZDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUZDO0xvOzA7TDs4QjU4Ozs7O047Ozs7OworRjlGRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRjlGRDtMbzswO0w7NEVDMDs7OztOOzs7OzsKK0Y5RkU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5RkU7TG87MDtMOzgzMzY7Ozs7Tjs7Ozs7CitGOUZGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOUZGO0xvOzA7TDs1MjNBOzs7O047Ozs7OworRkEwMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwMDtMbzswO0w7NTIwNzs7OztOOzs7OzsKK0ZBMDE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMDE7TG87MDtMOzVFQTY7Ozs7Tjs7Ozs7CitGQTAyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTAyO0xvOzA7TDs2MkQzOzs7O047Ozs7OworRkEwMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwMztMbzswO0w7N0NENjs7OztOOzs7OzsKK0ZBMDQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMDQ7TG87MDtMOzVCODU7Ozs7Tjs7Ozs7CitGQTA1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTA1O0xvOzA7TDs2RDFFOzs7O047Ozs7OworRkEwNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwNjtMbzswO0w7NjZCNDs7OztOOzs7OzsKK0ZBMDc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMDc7TG87MDtMOzhGM0I7Ozs7Tjs7Ozs7CitGQTA4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTA4O0xvOzA7TDs4ODRDOzs7O047Ozs7OworRkEwOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwOTtMbzswO0w7OTY0RDs7OztOOzs7OzsKK0ZBMEE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMEE7TG87MDtMOzg5OEI7Ozs7Tjs7Ozs7CitGQTBCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTBCO0xvOzA7TDs1RUQzOzs7O047Ozs7OworRkEwQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEwQztMbzswO0w7NTE0MDs7OztOOzs7OzsKK0ZBMEQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMEQ7TG87MDtMOzU1QzA7Ozs7Tjs7Ozs7CitGQTBFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTBFO0xvOzA7TDs7Ozs7Tjs7Ozs7CitGQTBGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTBGO0xvOzA7TDs7Ozs7Tjs7Ozs7CitGQTEwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTEwO0xvOzA7TDs1ODVBOzs7O047Ozs7OworRkExMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExMTtMbzswO0w7Ozs7O047Ozs7OworRkExMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExMjtMbzswO0w7NjY3NDs7OztOOzs7OzsKK0ZBMTM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMTM7TG87MDtMOzs7OztOOzs7OzsKK0ZBMTQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMTQ7TG87MDtMOzs7OztOOzs7OzsKK0ZBMTU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMTU7TG87MDtMOzUxREU7Ozs7Tjs7Ozs7CitGQTE2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTE2O0xvOzA7TDs3MzJBOzs7O047Ozs7OworRkExNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExNztMbzswO0w7NzZDQTs7OztOOzs7OzsKK0ZBMTg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMTg7TG87MDtMOzc5M0M7Ozs7Tjs7Ozs7CitGQTE5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTE5O0xvOzA7TDs3OTVFOzs7O047Ozs7OworRkExQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExQTtMbzswO0w7Nzk2NTs7OztOOzs7OzsKK0ZBMUI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMUI7TG87MDtMOzc5OEY7Ozs7Tjs7Ozs7CitGQTFDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTFDO0xvOzA7TDs5NzU2Ozs7O047Ozs7OworRkExRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkExRDtMbzswO0w7N0NCRTs7OztOOzs7OzsKK0ZBMUU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMUU7TG87MDtMOzdGQkQ7Ozs7Tjs7Ozs7CitGQTFGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTFGO0xvOzA7TDs7Ozs7Tjs7Kjs7OworRkEyMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyMDtMbzswO0w7ODYxMjs7OztOOzs7OzsKK0ZBMjE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMjE7TG87MDtMOzs7OztOOzs7OzsKK0ZBMjI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMjI7TG87MDtMOzhBRjg7Ozs7Tjs7Ozs7CitGQTIzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTIzO0xvOzA7TDs7Ozs7Tjs7Kjs7OworRkEyNDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyNDtMbzswO0w7Ozs7O047Ozs7OworRkEyNTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyNTtMbzswO0w7OTAzODs7OztOOzs7OzsKK0ZBMjY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMjY7TG87MDtMOzkwRkQ7Ozs7Tjs7Ozs7CitGQTI3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTI3O0xvOzA7TDs7Ozs7Tjs7Ozs7CitGQTI4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTI4O0xvOzA7TDs7Ozs7Tjs7Ozs7CitGQTI5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTI5O0xvOzA7TDs7Ozs7Tjs7Ozs7CitGQTJBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTJBO0xvOzA7TDs5OEVGOzs7O047Ozs7OworRkEyQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEyQjtMbzswO0w7OThGQzs7OztOOzs7OzsKK0ZBMkM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMkM7TG87MDtMOzk5Mjg7Ozs7Tjs7Ozs7CitGQTJEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTJEO0xvOzA7TDs5REI0Ozs7O047Ozs7OworRkEzMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzMDtMbzswO0w7NEZBRTs7OztOOzs7OzsKK0ZBMzE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMzE7TG87MDtMOzUwRTc7Ozs7Tjs7Ozs7CitGQTMyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTMyO0xvOzA7TDs1MTREOzs7O047Ozs7OworRkEzMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzMztMbzswO0w7NTJDOTs7OztOOzs7OzsKK0ZBMzQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMzQ7TG87MDtMOzUyRTQ7Ozs7Tjs7Ozs7CitGQTM1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTM1O0xvOzA7TDs1MzUxOzs7O047Ozs7OworRkEzNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzNjtMbzswO0w7NTU5RDs7OztOOzs7OzsKK0ZBMzc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMzc7TG87MDtMOzU2MDY7Ozs7Tjs7Ozs7CitGQTM4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTM4O0xvOzA7TDs1NjY4Ozs7O047Ozs7OworRkEzOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzOTtMbzswO0w7NTg0MDs7OztOOzs7OzsKK0ZBM0E7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBM0E7TG87MDtMOzU4QTg7Ozs7Tjs7Ozs7CitGQTNCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTNCO0xvOzA7TDs1QzY0Ozs7O047Ozs7OworRkEzQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzQztMbzswO0w7NUM2RTs7OztOOzs7OzsKK0ZBM0Q7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBM0Q7TG87MDtMOzYwOTQ7Ozs7Tjs7Ozs7CitGQTNFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTNFO0xvOzA7TDs2MTY4Ozs7O047Ozs7OworRkEzRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkEzRjtMbzswO0w7NjE4RTs7OztOOzs7OzsKK0ZBNDA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNDA7TG87MDtMOzYxRjI7Ozs7Tjs7Ozs7CitGQTQxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTQxO0xvOzA7TDs2NTRGOzs7O047Ozs7OworRkE0MjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0MjtMbzswO0w7NjVFMjs7OztOOzs7OzsKK0ZBNDM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNDM7TG87MDtMOzY2OTE7Ozs7Tjs7Ozs7CitGQTQ0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTQ0O0xvOzA7TDs2ODg1Ozs7O047Ozs7OworRkE0NTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0NTtMbzswO0w7NkQ3Nzs7OztOOzs7OzsKK0ZBNDY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNDY7TG87MDtMOzZFMUE7Ozs7Tjs7Ozs7CitGQTQ3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTQ3O0xvOzA7TDs2RjIyOzs7O047Ozs7OworRkE0ODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0ODtMbzswO0w7NzE2RTs7OztOOzs7OzsKK0ZBNDk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNDk7TG87MDtMOzcyMkI7Ozs7Tjs7Ozs7CitGQTRBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTRBO0xvOzA7TDs3NDIyOzs7O047Ozs7OworRkE0QjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0QjtMbzswO0w7Nzg5MTs7OztOOzs7OzsKK0ZBNEM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNEM7TG87MDtMOzc5M0U7Ozs7Tjs7Ozs7CitGQTREO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTREO0xvOzA7TDs3OTQ5Ozs7O047Ozs7OworRkE0RTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE0RTtMbzswO0w7Nzk0ODs7OztOOzs7OzsKK0ZBNEY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNEY7TG87MDtMOzc5NTA7Ozs7Tjs7Ozs7CitGQTUwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTUwO0xvOzA7TDs3OTU2Ozs7O047Ozs7OworRkE1MTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1MTtMbzswO0w7Nzk1RDs7OztOOzs7OzsKK0ZBNTI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNTI7TG87MDtMOzc5OEQ7Ozs7Tjs7Ozs7CitGQTUzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTUzO0xvOzA7TDs3OThFOzs7O047Ozs7OworRkE1NDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1NDtMbzswO0w7N0E0MDs7OztOOzs7OzsKK0ZBNTU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNTU7TG87MDtMOzdBODE7Ozs7Tjs7Ozs7CitGQTU2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTU2O0xvOzA7TDs3QkMwOzs7O047Ozs7OworRkE1NztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1NztMbzswO0w7N0RGNDs7OztOOzs7OzsKK0ZBNTg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNTg7TG87MDtMOzdFMDk7Ozs7Tjs7Ozs7CitGQTU5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTU5O0xvOzA7TDs3RTQxOzs7O047Ozs7OworRkE1QTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1QTtMbzswO0w7N0Y3Mjs7OztOOzs7OzsKK0ZBNUI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNUI7TG87MDtMOzgwMDU7Ozs7Tjs7Ozs7CitGQTVDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTVDO0xvOzA7TDs4MUVEOzs7O047Ozs7OworRkE1RDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE1RDtMbzswO0w7ODI3OTs7OztOOzs7OzsKK0ZBNUU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNUU7TG87MDtMOzgyNzk7Ozs7Tjs7Ozs7CitGQTVGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTVGO0xvOzA7TDs4NDU3Ozs7O047Ozs7OworRkE2MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE2MDtMbzswO0w7ODkxMDs7OztOOzs7OzsKK0ZBNjE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNjE7TG87MDtMOzg5OTY7Ozs7Tjs7Ozs7CitGQTYyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTYyO0xvOzA7TDs4QjAxOzs7O047Ozs7OworRkE2MztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE2MztMbzswO0w7OEIzOTs7OztOOzs7OzsKK0ZBNjQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNjQ7TG87MDtMOzhDRDM7Ozs7Tjs7Ozs7CitGQTY1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTY1O0xvOzA7TDs4RDA4Ozs7O047Ozs7OworRkE2NjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE2NjtMbzswO0w7OEZCNjs7OztOOzs7OzsKK0ZBNjc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNjc7TG87MDtMOzkwMzg7Ozs7Tjs7Ozs7CitGQTY4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTY4O0xvOzA7TDs5NkUzOzs7O047Ozs7OworRkE2OTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtRkE2OTtMbzswO0w7OTdGRjs7OztOOzs7OzsKK0ZBNkE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBNkE7TG87MDtMOzk4M0I7Ozs7Tjs7Ozs7CitGQjAwO0xBVElOIFNNQUxMIExJR0FUVVJFIEZGO0xsOzA7TDs8Y29tcGF0PiAwMDY2IDAwNjY7Ozs7Tjs7Ozs7CitGQjAxO0xBVElOIFNNQUxMIExJR0FUVVJFIEZJO0xsOzA7TDs8Y29tcGF0PiAwMDY2IDAwNjk7Ozs7Tjs7Ozs7CitGQjAyO0xBVElOIFNNQUxMIExJR0FUVVJFIEZMO0xsOzA7TDs8Y29tcGF0PiAwMDY2IDAwNkM7Ozs7Tjs7Ozs7CitGQjAzO0xBVElOIFNNQUxMIExJR0FUVVJFIEZGSTtMbDswO0w7PGNvbXBhdD4gMDA2NiAwMDY2IDAwNjk7Ozs7Tjs7Ozs7CitGQjA0O0xBVElOIFNNQUxMIExJR0FUVVJFIEZGTDtMbDswO0w7PGNvbXBhdD4gMDA2NiAwMDY2IDAwNkM7Ozs7Tjs7Ozs7CitGQjA1O0xBVElOIFNNQUxMIExJR0FUVVJFIExPTkcgUyBUO0xsOzA7TDs8Y29tcGF0PiAwMTdGIDAwNzQ7Ozs7Tjs7Ozs7CitGQjA2O0xBVElOIFNNQUxMIExJR0FUVVJFIFNUO0xsOzA7TDs8Y29tcGF0PiAwMDczIDAwNzQ7Ozs7Tjs7Ozs7CitGQjEzO0FSTUVOSUFOIFNNQUxMIExJR0FUVVJFIE1FTiBOT1c7TGw7MDtMOzxjb21wYXQ+IDA1NzQgMDU3Njs7OztOOzs7OzsKK0ZCMTQ7QVJNRU5JQU4gU01BTEwgTElHQVRVUkUgTUVOIEVDSDtMbDswO0w7PGNvbXBhdD4gMDU3NCAwNTY1Ozs7O047Ozs7OworRkIxNTtBUk1FTklBTiBTTUFMTCBMSUdBVFVSRSBNRU4gSU5JO0xsOzA7TDs8Y29tcGF0PiAwNTc0IDA1NkI7Ozs7Tjs7Ozs7CitGQjE2O0FSTUVOSUFOIFNNQUxMIExJR0FUVVJFIFZFVyBOT1c7TGw7MDtMOzxjb21wYXQ+IDA1N0UgMDU3Njs7OztOOzs7OzsKK0ZCMTc7QVJNRU5JQU4gU01BTEwgTElHQVRVUkUgTUVOIFhFSDtMbDswO0w7PGNvbXBhdD4gMDU3NCAwNTZEOzs7O047Ozs7OworRkIxRDtIRUJSRVcgTEVUVEVSIFlPRCBXSVRIIEhJUklRO0xvOzA7UjswNUQ5IDA1QjQ7Ozs7Tjs7Ozs7CitGQjFFO0hFQlJFVyBQT0lOVCBKVURFTy1TUEFOSVNIIFZBUklLQTtNbjsyNjtOU007Ozs7O047SEVCUkVXIFBPSU5UIFZBUklLQTs7OzsKK0ZCMUY7SEVCUkVXIExJR0FUVVJFIFlJRERJU0ggWU9EIFlPRCBQQVRBSDtMbzswO1I7MDVGMiAwNUI3Ozs7O047Ozs7OworRkIyMDtIRUJSRVcgTEVUVEVSIEFMVEVSTkFUSVZFIEFZSU47TG87MDtSOzxmb250PiAwNUUyOzs7O047Ozs7OworRkIyMTtIRUJSRVcgTEVUVEVSIFdJREUgQUxFRjtMbzswO1I7PGZvbnQ+IDA1RDA7Ozs7Tjs7Ozs7CitGQjIyO0hFQlJFVyBMRVRURVIgV0lERSBEQUxFVDtMbzswO1I7PGZvbnQ+IDA1RDM7Ozs7Tjs7Ozs7CitGQjIzO0hFQlJFVyBMRVRURVIgV0lERSBIRTtMbzswO1I7PGZvbnQ+IDA1RDQ7Ozs7Tjs7Ozs7CitGQjI0O0hFQlJFVyBMRVRURVIgV0lERSBLQUY7TG87MDtSOzxmb250PiAwNURCOzs7O047Ozs7OworRkIyNTtIRUJSRVcgTEVUVEVSIFdJREUgTEFNRUQ7TG87MDtSOzxmb250PiAwNURDOzs7O047Ozs7OworRkIyNjtIRUJSRVcgTEVUVEVSIFdJREUgRklOQUwgTUVNO0xvOzA7Ujs8Zm9udD4gMDVERDs7OztOOzs7OzsKK0ZCMjc7SEVCUkVXIExFVFRFUiBXSURFIFJFU0g7TG87MDtSOzxmb250PiAwNUU4Ozs7O047Ozs7OworRkIyODtIRUJSRVcgTEVUVEVSIFdJREUgVEFWO0xvOzA7Ujs8Zm9udD4gMDVFQTs7OztOOzs7OzsKK0ZCMjk7SEVCUkVXIExFVFRFUiBBTFRFUk5BVElWRSBQTFVTIFNJR047U207MDtFVDs8Zm9udD4gMDAyQjs7OztOOzs7OzsKK0ZCMkE7SEVCUkVXIExFVFRFUiBTSElOIFdJVEggU0hJTiBET1Q7TG87MDtSOzA1RTkgMDVDMTs7OztOOzs7OzsKK0ZCMkI7SEVCUkVXIExFVFRFUiBTSElOIFdJVEggU0lOIERPVDtMbzswO1I7MDVFOSAwNUMyOzs7O047Ozs7OworRkIyQztIRUJSRVcgTEVUVEVSIFNISU4gV0lUSCBEQUdFU0ggQU5EIFNISU4gRE9UO0xvOzA7UjtGQjQ5IDA1QzE7Ozs7Tjs7Ozs7CitGQjJEO0hFQlJFVyBMRVRURVIgU0hJTiBXSVRIIERBR0VTSCBBTkQgU0lOIERPVDtMbzswO1I7RkI0OSAwNUMyOzs7O047Ozs7OworRkIyRTtIRUJSRVcgTEVUVEVSIEFMRUYgV0lUSCBQQVRBSDtMbzswO1I7MDVEMCAwNUI3Ozs7O047Ozs7OworRkIyRjtIRUJSRVcgTEVUVEVSIEFMRUYgV0lUSCBRQU1BVFM7TG87MDtSOzA1RDAgMDVCODs7OztOOzs7OzsKK0ZCMzA7SEVCUkVXIExFVFRFUiBBTEVGIFdJVEggTUFQSVE7TG87MDtSOzA1RDAgMDVCQzs7OztOOzs7OzsKK0ZCMzE7SEVCUkVXIExFVFRFUiBCRVQgV0lUSCBEQUdFU0g7TG87MDtSOzA1RDEgMDVCQzs7OztOOzs7OzsKK0ZCMzI7SEVCUkVXIExFVFRFUiBHSU1FTCBXSVRIIERBR0VTSDtMbzswO1I7MDVEMiAwNUJDOzs7O047Ozs7OworRkIzMztIRUJSRVcgTEVUVEVSIERBTEVUIFdJVEggREFHRVNIO0xvOzA7UjswNUQzIDA1QkM7Ozs7Tjs7Ozs7CitGQjM0O0hFQlJFVyBMRVRURVIgSEUgV0lUSCBNQVBJUTtMbzswO1I7MDVENCAwNUJDOzs7O047Ozs7OworRkIzNTtIRUJSRVcgTEVUVEVSIFZBViBXSVRIIERBR0VTSDtMbzswO1I7MDVENSAwNUJDOzs7O047Ozs7OworRkIzNjtIRUJSRVcgTEVUVEVSIFpBWUlOIFdJVEggREFHRVNIO0xvOzA7UjswNUQ2IDA1QkM7Ozs7Tjs7Ozs7CitGQjM4O0hFQlJFVyBMRVRURVIgVEVUIFdJVEggREFHRVNIO0xvOzA7UjswNUQ4IDA1QkM7Ozs7Tjs7Ozs7CitGQjM5O0hFQlJFVyBMRVRURVIgWU9EIFdJVEggREFHRVNIO0xvOzA7UjswNUQ5IDA1QkM7Ozs7Tjs7Ozs7CitGQjNBO0hFQlJFVyBMRVRURVIgRklOQUwgS0FGIFdJVEggREFHRVNIO0xvOzA7UjswNURBIDA1QkM7Ozs7Tjs7Ozs7CitGQjNCO0hFQlJFVyBMRVRURVIgS0FGIFdJVEggREFHRVNIO0xvOzA7UjswNURCIDA1QkM7Ozs7Tjs7Ozs7CitGQjNDO0hFQlJFVyBMRVRURVIgTEFNRUQgV0lUSCBEQUdFU0g7TG87MDtSOzA1REMgMDVCQzs7OztOOzs7OzsKK0ZCM0U7SEVCUkVXIExFVFRFUiBNRU0gV0lUSCBEQUdFU0g7TG87MDtSOzA1REUgMDVCQzs7OztOOzs7OzsKK0ZCNDA7SEVCUkVXIExFVFRFUiBOVU4gV0lUSCBEQUdFU0g7TG87MDtSOzA1RTAgMDVCQzs7OztOOzs7OzsKK0ZCNDE7SEVCUkVXIExFVFRFUiBTQU1FS0ggV0lUSCBEQUdFU0g7TG87MDtSOzA1RTEgMDVCQzs7OztOOzs7OzsKK0ZCNDM7SEVCUkVXIExFVFRFUiBGSU5BTCBQRSBXSVRIIERBR0VTSDtMbzswO1I7MDVFMyAwNUJDOzs7O047Ozs7OworRkI0NDtIRUJSRVcgTEVUVEVSIFBFIFdJVEggREFHRVNIO0xvOzA7UjswNUU0IDA1QkM7Ozs7Tjs7Ozs7CitGQjQ2O0hFQlJFVyBMRVRURVIgVFNBREkgV0lUSCBEQUdFU0g7TG87MDtSOzA1RTYgMDVCQzs7OztOOzs7OzsKK0ZCNDc7SEVCUkVXIExFVFRFUiBRT0YgV0lUSCBEQUdFU0g7TG87MDtSOzA1RTcgMDVCQzs7OztOOzs7OzsKK0ZCNDg7SEVCUkVXIExFVFRFUiBSRVNIIFdJVEggREFHRVNIO0xvOzA7UjswNUU4IDA1QkM7Ozs7Tjs7Ozs7CitGQjQ5O0hFQlJFVyBMRVRURVIgU0hJTiBXSVRIIERBR0VTSDtMbzswO1I7MDVFOSAwNUJDOzs7O047Ozs7OworRkI0QTtIRUJSRVcgTEVUVEVSIFRBViBXSVRIIERBR0VTSDtMbzswO1I7MDVFQSAwNUJDOzs7O047Ozs7OworRkI0QjtIRUJSRVcgTEVUVEVSIFZBViBXSVRIIEhPTEFNO0xvOzA7UjswNUQ1IDA1Qjk7Ozs7Tjs7Ozs7CitGQjRDO0hFQlJFVyBMRVRURVIgQkVUIFdJVEggUkFGRTtMbzswO1I7MDVEMSAwNUJGOzs7O047Ozs7OworRkI0RDtIRUJSRVcgTEVUVEVSIEtBRiBXSVRIIFJBRkU7TG87MDtSOzA1REIgMDVCRjs7OztOOzs7OzsKK0ZCNEU7SEVCUkVXIExFVFRFUiBQRSBXSVRIIFJBRkU7TG87MDtSOzA1RTQgMDVCRjs7OztOOzs7OzsKK0ZCNEY7SEVCUkVXIExJR0FUVVJFIEFMRUYgTEFNRUQ7TG87MDtSOzxjb21wYXQ+IDA1RDAgMDVEQzs7OztOOzs7OzsKK0ZCNTA7QVJBQklDIExFVFRFUiBBTEVGIFdBU0xBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NzE7Ozs7Tjs7Ozs7CitGQjUxO0FSQUJJQyBMRVRURVIgQUxFRiBXQVNMQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjcxOzs7O047Ozs7OworRkI1MjtBUkFCSUMgTEVUVEVSIEJFRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY3Qjs7OztOOzs7OzsKK0ZCNTM7QVJBQklDIExFVFRFUiBCRUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2N0I7Ozs7Tjs7Ozs7CitGQjU0O0FSQUJJQyBMRVRURVIgQkVFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY3Qjs7OztOOzs7OzsKK0ZCNTU7QVJBQklDIExFVFRFUiBCRUVIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY3Qjs7OztOOzs7OzsKK0ZCNTY7QVJBQklDIExFVFRFUiBQRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY3RTs7OztOOzs7OzsKK0ZCNTc7QVJBQklDIExFVFRFUiBQRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY3RTs7OztOOzs7OzsKK0ZCNTg7QVJBQklDIExFVFRFUiBQRUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2N0U7Ozs7Tjs7Ozs7CitGQjU5O0FSQUJJQyBMRVRURVIgUEVIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY3RTs7OztOOzs7OzsKK0ZCNUE7QVJBQklDIExFVFRFUiBCRUhFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjgwOzs7O047Ozs7OworRkI1QjtBUkFCSUMgTEVUVEVSIEJFSEVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2ODA7Ozs7Tjs7Ozs7CitGQjVDO0FSQUJJQyBMRVRURVIgQkVIRUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2ODA7Ozs7Tjs7Ozs7CitGQjVEO0FSQUJJQyBMRVRURVIgQkVIRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjgwOzs7O047Ozs7OworRkI1RTtBUkFCSUMgTEVUVEVSIFRURUhFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjdBOzs7O047Ozs7OworRkI1RjtBUkFCSUMgTEVUVEVSIFRURUhFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjdBOzs7O047Ozs7OworRkI2MDtBUkFCSUMgTEVUVEVSIFRURUhFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY3QTs7OztOOzs7OzsKK0ZCNjE7QVJBQklDIExFVFRFUiBUVEVIRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjdBOzs7O047Ozs7OworRkI2MjtBUkFCSUMgTEVUVEVSIFRFSEVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2N0Y7Ozs7Tjs7Ozs7CitGQjYzO0FSQUJJQyBMRVRURVIgVEVIRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY3Rjs7OztOOzs7OzsKK0ZCNjQ7QVJBQklDIExFVFRFUiBURUhFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY3Rjs7OztOOzs7OzsKK0ZCNjU7QVJBQklDIExFVFRFUiBURUhFSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2N0Y7Ozs7Tjs7Ozs7CitGQjY2O0FSQUJJQyBMRVRURVIgVFRFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjc5Ozs7O047Ozs7OworRkI2NztBUkFCSUMgTEVUVEVSIFRURUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY3OTs7OztOOzs7OzsKK0ZCNjg7QVJBQklDIExFVFRFUiBUVEVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjc5Ozs7O047Ozs7OworRkI2OTtBUkFCSUMgTEVUVEVSIFRURUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjc5Ozs7O047Ozs7OworRkI2QTtBUkFCSUMgTEVUVEVSIFZFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNkE0Ozs7O047Ozs7OworRkI2QjtBUkFCSUMgTEVUVEVSIFZFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNkE0Ozs7O047Ozs7OworRkI2QztBUkFCSUMgTEVUVEVSIFZFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDZBNDs7OztOOzs7OzsKK0ZCNkQ7QVJBQklDIExFVFRFUiBWRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNkE0Ozs7O047Ozs7OworRkI2RTtBUkFCSUMgTEVUVEVSIFBFSEVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2QTY7Ozs7Tjs7Ozs7CitGQjZGO0FSQUJJQyBMRVRURVIgUEVIRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZBNjs7OztOOzs7OzsKK0ZCNzA7QVJBQklDIExFVFRFUiBQRUhFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDZBNjs7OztOOzs7OzsKK0ZCNzE7QVJBQklDIExFVFRFUiBQRUhFSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2QTY7Ozs7Tjs7Ozs7CitGQjcyO0FSQUJJQyBMRVRURVIgRFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjg0Ozs7O047Ozs7OworRkI3MztBUkFCSUMgTEVUVEVSIERZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY4NDs7OztOOzs7OzsKK0ZCNzQ7QVJBQklDIExFVFRFUiBEWUVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjg0Ozs7O047Ozs7OworRkI3NTtBUkFCSUMgTEVUVEVSIERZRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjg0Ozs7O047Ozs7OworRkI3NjtBUkFCSUMgTEVUVEVSIE5ZRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY4Mzs7OztOOzs7OzsKK0ZCNzc7QVJBQklDIExFVFRFUiBOWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2ODM7Ozs7Tjs7Ozs7CitGQjc4O0FSQUJJQyBMRVRURVIgTllFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY4Mzs7OztOOzs7OzsKK0ZCNzk7QVJBQklDIExFVFRFUiBOWUVIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY4Mzs7OztOOzs7OzsKK0ZCN0E7QVJBQklDIExFVFRFUiBUQ0hFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjg2Ozs7O047Ozs7OworRkI3QjtBUkFCSUMgTEVUVEVSIFRDSEVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2ODY7Ozs7Tjs7Ozs7CitGQjdDO0FSQUJJQyBMRVRURVIgVENIRUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2ODY7Ozs7Tjs7Ozs7CitGQjdEO0FSQUJJQyBMRVRURVIgVENIRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjg2Ozs7O047Ozs7OworRkI3RTtBUkFCSUMgTEVUVEVSIFRDSEVIRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY4Nzs7OztOOzs7OzsKK0ZCN0Y7QVJBQklDIExFVFRFUiBUQ0hFSEVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2ODc7Ozs7Tjs7Ozs7CitGQjgwO0FSQUJJQyBMRVRURVIgVENIRUhFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY4Nzs7OztOOzs7OzsKK0ZCODE7QVJBQklDIExFVFRFUiBUQ0hFSEVIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY4Nzs7OztOOzs7OzsKK0ZCODI7QVJBQklDIExFVFRFUiBEREFIQUwgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY4RDs7OztOOzs7OzsKK0ZCODM7QVJBQklDIExFVFRFUiBEREFIQUwgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY4RDs7OztOOzs7OzsKK0ZCODQ7QVJBQklDIExFVFRFUiBEQUhBTCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjhDOzs7O047Ozs7OworRkI4NTtBUkFCSUMgTEVUVEVSIERBSEFMIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2OEM7Ozs7Tjs7Ozs7CitGQjg2O0FSQUJJQyBMRVRURVIgRFVMIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2OEU7Ozs7Tjs7Ozs7CitGQjg3O0FSQUJJQyBMRVRURVIgRFVMIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2OEU7Ozs7Tjs7Ozs7CitGQjg4O0FSQUJJQyBMRVRURVIgRERBTCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjg4Ozs7O047Ozs7OworRkI4OTtBUkFCSUMgTEVUVEVSIEREQUwgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY4ODs7OztOOzs7OzsKK0ZCOEE7QVJBQklDIExFVFRFUiBKRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY5ODs7OztOOzs7OzsKK0ZCOEI7QVJBQklDIExFVFRFUiBKRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY5ODs7OztOOzs7OzsKK0ZCOEM7QVJBQklDIExFVFRFUiBSUkVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2OTE7Ozs7Tjs7Ozs7CitGQjhEO0FSQUJJQyBMRVRURVIgUlJFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjkxOzs7O047Ozs7OworRkI4RTtBUkFCSUMgTEVUVEVSIEtFSEVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2QTk7Ozs7Tjs7Ozs7CitGQjhGO0FSQUJJQyBMRVRURVIgS0VIRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZBOTs7OztOOzs7OzsKK0ZCOTA7QVJBQklDIExFVFRFUiBLRUhFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDZBOTs7OztOOzs7OzsKK0ZCOTE7QVJBQklDIExFVFRFUiBLRUhFSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2QTk7Ozs7Tjs7Ozs7CitGQjkyO0FSQUJJQyBMRVRURVIgR0FGIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2QUY7Ozs7Tjs7Ozs7CitGQjkzO0FSQUJJQyBMRVRURVIgR0FGIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2QUY7Ozs7Tjs7Ozs7CitGQjk0O0FSQUJJQyBMRVRURVIgR0FGIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNkFGOzs7O047Ozs7OworRkI5NTtBUkFCSUMgTEVUVEVSIEdBRiBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2QUY7Ozs7Tjs7Ozs7CitGQjk2O0FSQUJJQyBMRVRURVIgR1VFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNkIzOzs7O047Ozs7OworRkI5NztBUkFCSUMgTEVUVEVSIEdVRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZCMzs7OztOOzs7OzsKK0ZCOTg7QVJBQklDIExFVFRFUiBHVUVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNkIzOzs7O047Ozs7OworRkI5OTtBUkFCSUMgTEVUVEVSIEdVRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNkIzOzs7O047Ozs7OworRkI5QTtBUkFCSUMgTEVUVEVSIE5HT0VIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2QjE7Ozs7Tjs7Ozs7CitGQjlCO0FSQUJJQyBMRVRURVIgTkdPRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZCMTs7OztOOzs7OzsKK0ZCOUM7QVJBQklDIExFVFRFUiBOR09FSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDZCMTs7OztOOzs7OzsKK0ZCOUQ7QVJBQklDIExFVFRFUiBOR09FSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2QjE7Ozs7Tjs7Ozs7CitGQjlFO0FSQUJJQyBMRVRURVIgTk9PTiBHSFVOTkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDZCQTs7OztOOzs7OzsKK0ZCOUY7QVJBQklDIExFVFRFUiBOT09OIEdIVU5OQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNkJBOzs7O047Ozs7OworRkJBMDtBUkFCSUMgTEVUVEVSIFJOT09OIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2QkI7Ozs7Tjs7Ozs7CitGQkExO0FSQUJJQyBMRVRURVIgUk5PT04gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZCQjs7OztOOzs7OzsKK0ZCQTI7QVJBQklDIExFVFRFUiBSTk9PTiBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDZCQjs7OztOOzs7OzsKK0ZCQTM7QVJBQklDIExFVFRFUiBSTk9PTiBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2QkI7Ozs7Tjs7Ozs7CitGQkE0O0FSQUJJQyBMRVRURVIgSEVIIFdJVEggWUVIIEFCT1ZFIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2QzA7Ozs7Tjs7Ozs7CitGQkE1O0FSQUJJQyBMRVRURVIgSEVIIFdJVEggWUVIIEFCT1ZFIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2QzA7Ozs7Tjs7Ozs7CitGQkE2O0FSQUJJQyBMRVRURVIgSEVIIEdPQUwgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDZDMTs7OztOOzs7OzsKK0ZCQTc7QVJBQklDIExFVFRFUiBIRUggR09BTCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNkMxOzs7O047Ozs7OworRkJBODtBUkFCSUMgTEVUVEVSIEhFSCBHT0FMIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNkMxOzs7O047Ozs7OworRkJBOTtBUkFCSUMgTEVUVEVSIEhFSCBHT0FMIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDZDMTs7OztOOzs7OzsKK0ZCQUE7QVJBQklDIExFVFRFUiBIRUggRE9BQ0hBU0hNRUUgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDZCRTs7OztOOzs7OzsKK0ZCQUI7QVJBQklDIExFVFRFUiBIRUggRE9BQ0hBU0hNRUUgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZCRTs7OztOOzs7OzsKK0ZCQUM7QVJBQklDIExFVFRFUiBIRUggRE9BQ0hBU0hNRUUgSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2QkU7Ozs7Tjs7Ozs7CitGQkFEO0FSQUJJQyBMRVRURVIgSEVIIERPQUNIQVNITUVFIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDZCRTs7OztOOzs7OzsKK0ZCQUU7QVJBQklDIExFVFRFUiBZRUggQkFSUkVFIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2RDI7Ozs7Tjs7Ozs7CitGQkFGO0FSQUJJQyBMRVRURVIgWUVIIEJBUlJFRSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNkQyOzs7O047Ozs7OworRkJCMDtBUkFCSUMgTEVUVEVSIFlFSCBCQVJSRUUgV0lUSCBIQU1aQSBBQk9WRSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNkQzOzs7O047Ozs7OworRkJCMTtBUkFCSUMgTEVUVEVSIFlFSCBCQVJSRUUgV0lUSCBIQU1aQSBBQk9WRSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNkQzOzs7O047Ozs7OworRkJEMztBUkFCSUMgTEVUVEVSIE5HIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2QUQ7Ozs7Tjs7Ozs7CitGQkQ0O0FSQUJJQyBMRVRURVIgTkcgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZBRDs7OztOOzs7OzsKK0ZCRDU7QVJBQklDIExFVFRFUiBORyBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDZBRDs7OztOOzs7OzsKK0ZCRDY7QVJBQklDIExFVFRFUiBORyBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2QUQ7Ozs7Tjs7Ozs7CitGQkQ3O0FSQUJJQyBMRVRURVIgVSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNkM3Ozs7O047Ozs7OworRkJEODtBUkFCSUMgTEVUVEVSIFUgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZDNzs7OztOOzs7OzsKK0ZCRDk7QVJBQklDIExFVFRFUiBPRSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNkM2Ozs7O047Ozs7OworRkJEQTtBUkFCSUMgTEVUVEVSIE9FIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2QzY7Ozs7Tjs7Ozs7CitGQkRCO0FSQUJJQyBMRVRURVIgWVUgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDZDODs7OztOOzs7OzsKK0ZCREM7QVJBQklDIExFVFRFUiBZVSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNkM4Ozs7O047Ozs7OworRkJERDtBUkFCSUMgTEVUVEVSIFUgV0lUSCBIQU1aQSBBQk9WRSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjc3Ozs7O047Ozs7OworRkJERTtBUkFCSUMgTEVUVEVSIFZFIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2Q0I7Ozs7Tjs7Ozs7CitGQkRGO0FSQUJJQyBMRVRURVIgVkUgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZDQjs7OztOOzs7OzsKK0ZCRTA7QVJBQklDIExFVFRFUiBLSVJHSElaIE9FIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2QzU7Ozs7Tjs7Ozs7CitGQkUxO0FSQUJJQyBMRVRURVIgS0lSR0hJWiBPRSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNkM1Ozs7O047Ozs7OworRkJFMjtBUkFCSUMgTEVUVEVSIEtJUkdISVogWVUgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDZDOTs7OztOOzs7OzsKK0ZCRTM7QVJBQklDIExFVFRFUiBLSVJHSElaIFlVIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2Qzk7Ozs7Tjs7Ozs7CitGQkU0O0FSQUJJQyBMRVRURVIgRSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNkQwOzs7O047Ozs7OworRkJFNTtBUkFCSUMgTEVUVEVSIEUgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDZEMDs7OztOOzs7OzsKK0ZCRTY7QVJBQklDIExFVFRFUiBFIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNkQwOzs7O047Ozs7OworRkJFNztBUkFCSUMgTEVUVEVSIEUgTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNkQwOzs7O047Ozs7OworRkJFODtBUkFCSUMgTEVUVEVSIFVJR0hVUiBLQVpBS0ggS0lSR0hJWiBBTEVGIE1BS1NVUkEgSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDk7Ozs7Tjs7Ozs7CitGQkU5O0FSQUJJQyBMRVRURVIgVUlHSFVSIEtBWkFLSCBLSVJHSElaIEFMRUYgTUFLU1VSQSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2NDk7Ozs7Tjs7Ozs7CitGQkVBO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIEFMRUYgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNiAwNjI3Ozs7O047Ozs7OworRkJFQjtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBBTEVGIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjYgMDYyNzs7OztOOzs7OzsKK0ZCRUM7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggQUUgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNiAwNkQ1Ozs7O047Ozs7OworRkJFRDtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBBRSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI2IDA2RDU7Ozs7Tjs7Ozs7CitGQkVFO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIFdBVyBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjI2IDA2NDg7Ozs7Tjs7Ozs7CitGQkVGO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIFdBVyBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI2IDA2NDg7Ozs7Tjs7Ozs7CitGQkYwO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIFUgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNiAwNkM3Ozs7O047Ozs7OworRkJGMTtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBVIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjYgMDZDNzs7OztOOzs7OzsKK0ZCRjI7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggT0UgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNiAwNkM2Ozs7O047Ozs7OworRkJGMztBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBPRSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI2IDA2QzY7Ozs7Tjs7Ozs7CitGQkY0O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIFlVIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjYgMDZDODs7OztOOzs7OzsKK0ZCRjU7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggWVUgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyNiAwNkM4Ozs7O047Ozs7OworRkJGNjtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBFIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjYgMDZEMDs7OztOOzs7OzsKK0ZCRjc7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggRSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI2IDA2RDA7Ozs7Tjs7Ozs7CitGQkY4O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIEUgSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MjYgMDZEMDs7OztOOzs7OzsKK0ZCRjk7QVJBQklDIExJR0FUVVJFIFVJR0hVUiBLSVJHSElaIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjYgMDY0OTs7OztOOzs7OzsKK0ZCRkE7QVJBQklDIExJR0FUVVJFIFVJR0hVUiBLSVJHSElaIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjYgMDY0OTs7OztOOzs7OzsKK0ZCRkI7QVJBQklDIExJR0FUVVJFIFVJR0hVUiBLSVJHSElaIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggQUxFRiBNQUtTVVJBIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjI2IDA2NDk7Ozs7Tjs7Ozs7CitGQkZDO0FSQUJJQyBMRVRURVIgRkFSU0kgWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2Q0M7Ozs7Tjs7Ozs7CitGQkZEO0FSQUJJQyBMRVRURVIgRkFSU0kgWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2Q0M7Ozs7Tjs7Ozs7CitGQkZFO0FSQUJJQyBMRVRURVIgRkFSU0kgWUVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNkNDOzs7O047Ozs7OworRkJGRjtBUkFCSUMgTEVUVEVSIEZBUlNJIFlFSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2Q0M7Ozs7Tjs7Ozs7CitGQzAwO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIEpFRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNiAwNjJDOzs7O047Ozs7OworRkMwMTtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBIQUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNiAwNjJEOzs7O047Ozs7OworRkMwMjtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjYgMDY0NTs7OztOOzs7OzsKK0ZDMDM7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjYgMDY0OTs7OztOOzs7OzsKK0ZDMDQ7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjYgMDY0QTs7OztOOzs7OzsKK0ZDMDU7QVJBQklDIExJR0FUVVJFIEJFSCBXSVRIIEpFRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyOCAwNjJDOzs7O047Ozs7OworRkMwNjtBUkFCSUMgTElHQVRVUkUgQkVIIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjggMDYyRDs7OztOOzs7OzsKK0ZDMDc7QVJBQklDIExJR0FUVVJFIEJFSCBXSVRIIEtIQUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyOCAwNjJFOzs7O047Ozs7OworRkMwODtBUkFCSUMgTElHQVRVUkUgQkVIIFdJVEggTUVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjI4IDA2NDU7Ozs7Tjs7Ozs7CitGQzA5O0FSQUJJQyBMSUdBVFVSRSBCRUggV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyOCAwNjQ5Ozs7O047Ozs7OworRkMwQTtBUkFCSUMgTElHQVRVUkUgQkVIIFdJVEggWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjggMDY0QTs7OztOOzs7OzsKK0ZDMEI7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIEpFRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyQSAwNjJDOzs7O047Ozs7OworRkMwQztBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkEgMDYyRDs7OztOOzs7OzsKK0ZDMEQ7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIEtIQUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyQSAwNjJFOzs7O047Ozs7OworRkMwRTtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggTUVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjJBIDA2NDU7Ozs7Tjs7Ozs7CitGQzBGO0FSQUJJQyBMSUdBVFVSRSBURUggV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyQSAwNjQ5Ozs7O047Ozs7OworRkMxMDtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkEgMDY0QTs7OztOOzs7OzsKK0ZDMTE7QVJBQklDIExJR0FUVVJFIFRIRUggV0lUSCBKRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkIgMDYyQzs7OztOOzs7OzsKK0ZDMTI7QVJBQklDIExJR0FUVVJFIFRIRUggV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkIgMDY0NTs7OztOOzs7OzsKK0ZDMTM7QVJBQklDIExJR0FUVVJFIFRIRUggV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyQiAwNjQ5Ozs7O047Ozs7OworRkMxNDtBUkFCSUMgTElHQVRVUkUgVEhFSCBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjJCIDA2NEE7Ozs7Tjs7Ozs7CitGQzE1O0FSQUJJQyBMSUdBVFVSRSBKRUVNIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkMgMDYyRDs7OztOOzs7OzsKK0ZDMTY7QVJBQklDIExJR0FUVVJFIEpFRU0gV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkMgMDY0NTs7OztOOzs7OzsKK0ZDMTc7QVJBQklDIExJR0FUVVJFIEhBSCBXSVRIIEpFRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyRCAwNjJDOzs7O047Ozs7OworRkMxODtBUkFCSUMgTElHQVRVUkUgSEFIIFdJVEggTUVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjJEIDA2NDU7Ozs7Tjs7Ozs7CitGQzE5O0FSQUJJQyBMSUdBVFVSRSBLSEFIIFdJVEggSkVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjJFIDA2MkM7Ozs7Tjs7Ozs7CitGQzFBO0FSQUJJQyBMSUdBVFVSRSBLSEFIIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkUgMDYyRDs7OztOOzs7OzsKK0ZDMUI7QVJBQklDIExJR0FUVVJFIEtIQUggV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkUgMDY0NTs7OztOOzs7OzsKK0ZDMUM7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBKRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzMgMDYyQzs7OztOOzs7OzsKK0ZDMUQ7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBIQUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzMyAwNjJEOzs7O047Ozs7OworRkMxRTtBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIEtIQUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzMyAwNjJFOzs7O047Ozs7OworRkMxRjtBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzMyAwNjQ1Ozs7O047Ozs7OworRkMyMDtBUkFCSUMgTElHQVRVUkUgU0FEIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzUgMDYyRDs7OztOOzs7OzsKK0ZDMjE7QVJBQklDIExJR0FUVVJFIFNBRCBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNSAwNjQ1Ozs7O047Ozs7OworRkMyMjtBUkFCSUMgTElHQVRVUkUgREFEIFdJVEggSkVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM2IDA2MkM7Ozs7Tjs7Ozs7CitGQzIzO0FSQUJJQyBMSUdBVFVSRSBEQUQgV0lUSCBIQUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNiAwNjJEOzs7O047Ozs7OworRkMyNDtBUkFCSUMgTElHQVRVUkUgREFEIFdJVEggS0hBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM2IDA2MkU7Ozs7Tjs7Ozs7CitGQzI1O0FSQUJJQyBMSUdBVFVSRSBEQUQgV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzYgMDY0NTs7OztOOzs7OzsKK0ZDMjY7QVJBQklDIExJR0FUVVJFIFRBSCBXSVRIIEhBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM3IDA2MkQ7Ozs7Tjs7Ozs7CitGQzI3O0FSQUJJQyBMSUdBVFVSRSBUQUggV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzcgMDY0NTs7OztOOzs7OzsKK0ZDMjg7QVJBQklDIExJR0FUVVJFIFpBSCBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzOCAwNjQ1Ozs7O047Ozs7OworRkMyOTtBUkFCSUMgTElHQVRVUkUgQUlOIFdJVEggSkVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM5IDA2MkM7Ozs7Tjs7Ozs7CitGQzJBO0FSQUJJQyBMSUdBVFVSRSBBSU4gV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzkgMDY0NTs7OztOOzs7OzsKK0ZDMkI7QVJBQklDIExJR0FUVVJFIEdIQUlOIFdJVEggSkVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjNBIDA2MkM7Ozs7Tjs7Ozs7CitGQzJDO0FSQUJJQyBMSUdBVFVSRSBHSEFJTiBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzQSAwNjQ1Ozs7O047Ozs7OworRkMyRDtBUkFCSUMgTElHQVRVUkUgRkVIIFdJVEggSkVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQxIDA2MkM7Ozs7Tjs7Ozs7CitGQzJFO0FSQUJJQyBMSUdBVFVSRSBGRUggV0lUSCBIQUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0MSAwNjJEOzs7O047Ozs7OworRkMyRjtBUkFCSUMgTElHQVRVUkUgRkVIIFdJVEggS0hBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQxIDA2MkU7Ozs7Tjs7Ozs7CitGQzMwO0FSQUJJQyBMSUdBVFVSRSBGRUggV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDEgMDY0NTs7OztOOzs7OzsKK0ZDMzE7QVJBQklDIExJR0FUVVJFIEZFSCBXSVRIIEFMRUYgTUFLU1VSQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQxIDA2NDk7Ozs7Tjs7Ozs7CitGQzMyO0FSQUJJQyBMSUdBVFVSRSBGRUggV0lUSCBZRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0MSAwNjRBOzs7O047Ozs7OworRkMzMztBUkFCSUMgTElHQVRVUkUgUUFGIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDIgMDYyRDs7OztOOzs7OzsKK0ZDMzQ7QVJBQklDIExJR0FUVVJFIFFBRiBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0MiAwNjQ1Ozs7O047Ozs7OworRkMzNTtBUkFCSUMgTElHQVRVUkUgUUFGIFdJVEggQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDIgMDY0OTs7OztOOzs7OzsKK0ZDMzY7QVJBQklDIExJR0FUVVJFIFFBRiBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQyIDA2NEE7Ozs7Tjs7Ozs7CitGQzM3O0FSQUJJQyBMSUdBVFVSRSBLQUYgV0lUSCBBTEVGIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDMgMDYyNzs7OztOOzs7OzsKK0ZDMzg7QVJBQklDIExJR0FUVVJFIEtBRiBXSVRIIEpFRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0MyAwNjJDOzs7O047Ozs7OworRkMzOTtBUkFCSUMgTElHQVRVUkUgS0FGIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDMgMDYyRDs7OztOOzs7OzsKK0ZDM0E7QVJBQklDIExJR0FUVVJFIEtBRiBXSVRIIEtIQUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0MyAwNjJFOzs7O047Ozs7OworRkMzQjtBUkFCSUMgTElHQVRVUkUgS0FGIFdJVEggTEFNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDMgMDY0NDs7OztOOzs7OzsKK0ZDM0M7QVJBQklDIExJR0FUVVJFIEtBRiBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0MyAwNjQ1Ozs7O047Ozs7OworRkMzRDtBUkFCSUMgTElHQVRVUkUgS0FGIFdJVEggQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDMgMDY0OTs7OztOOzs7OzsKK0ZDM0U7QVJBQklDIExJR0FUVVJFIEtBRiBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQzIDA2NEE7Ozs7Tjs7Ozs7CitGQzNGO0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBKRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDQgMDYyQzs7OztOOzs7OzsKK0ZDNDA7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEhBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ0IDA2MkQ7Ozs7Tjs7Ozs7CitGQzQxO0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBLSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDQgMDYyRTs7OztOOzs7OzsKK0ZDNDI7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0NCAwNjQ1Ozs7O047Ozs7OworRkM0MztBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDQgMDY0OTs7OztOOzs7OzsKK0ZDNDQ7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ0IDA2NEE7Ozs7Tjs7Ozs7CitGQzQ1O0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggSkVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ1IDA2MkM7Ozs7Tjs7Ozs7CitGQzQ2O0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDUgMDYyRDs7OztOOzs7OzsKK0ZDNDc7QVJBQklDIExJR0FUVVJFIE1FRU0gV0lUSCBLSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDUgMDYyRTs7OztOOzs7OzsKK0ZDNDg7QVJBQklDIExJR0FUVVJFIE1FRU0gV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDUgMDY0NTs7OztOOzs7OzsKK0ZDNDk7QVJBQklDIExJR0FUVVJFIE1FRU0gV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0NSAwNjQ5Ozs7O047Ozs7OworRkM0QTtBUkFCSUMgTElHQVRVUkUgTUVFTSBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ1IDA2NEE7Ozs7Tjs7Ozs7CitGQzRCO0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggSkVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ2IDA2MkM7Ozs7Tjs7Ozs7CitGQzRDO0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDYgMDYyRDs7OztOOzs7OzsKK0ZDNEQ7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBLSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDYgMDYyRTs7OztOOzs7OzsKK0ZDNEU7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBNRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDYgMDY0NTs7OztOOzs7OzsKK0ZDNEY7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0NiAwNjQ5Ozs7O047Ozs7OworRkM1MDtBUkFCSUMgTElHQVRVUkUgTk9PTiBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ2IDA2NEE7Ozs7Tjs7Ozs7CitGQzUxO0FSQUJJQyBMSUdBVFVSRSBIRUggV0lUSCBKRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDcgMDYyQzs7OztOOzs7OzsKK0ZDNTI7QVJBQklDIExJR0FUVVJFIEhFSCBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0NyAwNjQ1Ozs7O047Ozs7OworRkM1MztBUkFCSUMgTElHQVRVUkUgSEVIIFdJVEggQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDcgMDY0OTs7OztOOzs7OzsKK0ZDNTQ7QVJBQklDIExJR0FUVVJFIEhFSCBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ3IDA2NEE7Ozs7Tjs7Ozs7CitGQzU1O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBKRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NEEgMDYyQzs7OztOOzs7OzsKK0ZDNTY7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjRBIDA2MkQ7Ozs7Tjs7Ozs7CitGQzU3O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBLSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NEEgMDYyRTs7OztOOzs7OzsKK0ZDNTg7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0QSAwNjQ1Ozs7O047Ozs7OworRkM1OTtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NEEgMDY0OTs7OztOOzs7OzsKK0ZDNUE7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjRBIDA2NEE7Ozs7Tjs7Ozs7CitGQzVCO0FSQUJJQyBMSUdBVFVSRSBUSEFMIFdJVEggU1VQRVJTQ1JJUFQgQUxFRiBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjMwIDA2NzA7Ozs7Tjs7Ozs7CitGQzVDO0FSQUJJQyBMSUdBVFVSRSBSRUggV0lUSCBTVVBFUlNDUklQVCBBTEVGIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzEgMDY3MDs7OztOOzs7OzsKK0ZDNUQ7QVJBQklDIExJR0FUVVJFIEFMRUYgTUFLU1VSQSBXSVRIIFNVUEVSU0NSSVBUIEFMRUYgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0OSAwNjcwOzs7O047Ozs7OworRkM1RTtBUkFCSUMgTElHQVRVUkUgU0hBRERBIFdJVEggREFNTUFUQU4gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDAyMCAwNjRDIDA2NTE7Ozs7Tjs7Ozs7CitGQzVGO0FSQUJJQyBMSUdBVFVSRSBTSEFEREEgV0lUSCBLQVNSQVRBTiBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwMDIwIDA2NEQgMDY1MTs7OztOOzs7OzsKK0ZDNjA7QVJBQklDIExJR0FUVVJFIFNIQUREQSBXSVRIIEZBVEhBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDAwMjAgMDY0RSAwNjUxOzs7O047Ozs7OworRkM2MTtBUkFCSUMgTElHQVRVUkUgU0hBRERBIFdJVEggREFNTUEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDAyMCAwNjRGIDA2NTE7Ozs7Tjs7Ozs7CitGQzYyO0FSQUJJQyBMSUdBVFVSRSBTSEFEREEgV0lUSCBLQVNSQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwMDIwIDA2NTAgMDY1MTs7OztOOzs7OzsKK0ZDNjM7QVJBQklDIExJR0FUVVJFIFNIQUREQSBXSVRIIFNVUEVSU0NSSVBUIEFMRUYgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDAyMCAwNjUxIDA2NzA7Ozs7Tjs7Ozs7CitGQzY0O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIFJFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI2IDA2MzE7Ozs7Tjs7Ozs7CitGQzY1O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIFpBSU4gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyNiAwNjMyOzs7O047Ozs7OworRkM2NjtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjYgMDY0NTs7OztOOzs7OzsKK0ZDNjc7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggTk9PTiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI2IDA2NDY7Ozs7Tjs7Ozs7CitGQzY4O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI2IDA2NDk7Ozs7Tjs7Ozs7CitGQzY5O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI2IDA2NEE7Ozs7Tjs7Ozs7CitGQzZBO0FSQUJJQyBMSUdBVFVSRSBCRUggV0lUSCBSRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyOCAwNjMxOzs7O047Ozs7OworRkM2QjtBUkFCSUMgTElHQVRVUkUgQkVIIFdJVEggWkFJTiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI4IDA2MzI7Ozs7Tjs7Ozs7CitGQzZDO0FSQUJJQyBMSUdBVFVSRSBCRUggV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjggMDY0NTs7OztOOzs7OzsKK0ZDNkQ7QVJBQklDIExJR0FUVVJFIEJFSCBXSVRIIE5PT04gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyOCAwNjQ2Ozs7O047Ozs7OworRkM2RTtBUkFCSUMgTElHQVRVUkUgQkVIIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjggMDY0OTs7OztOOzs7OzsKK0ZDNkY7QVJBQklDIExJR0FUVVJFIEJFSCBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI4IDA2NEE7Ozs7Tjs7Ozs7CitGQzcwO0FSQUJJQyBMSUdBVFVSRSBURUggV0lUSCBSRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQSAwNjMxOzs7O047Ozs7OworRkM3MTtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggWkFJTiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJBIDA2MzI7Ozs7Tjs7Ozs7CitGQzcyO0FSQUJJQyBMSUdBVFVSRSBURUggV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkEgMDY0NTs7OztOOzs7OzsKK0ZDNzM7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIE5PT04gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQSAwNjQ2Ozs7O047Ozs7OworRkM3NDtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkEgMDY0OTs7OztOOzs7OzsKK0ZDNzU7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJBIDA2NEE7Ozs7Tjs7Ozs7CitGQzc2O0FSQUJJQyBMSUdBVFVSRSBUSEVIIFdJVEggUkVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkIgMDYzMTs7OztOOzs7OzsKK0ZDNzc7QVJBQklDIExJR0FUVVJFIFRIRUggV0lUSCBaQUlOIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkIgMDYzMjs7OztOOzs7OzsKK0ZDNzg7QVJBQklDIExJR0FUVVJFIFRIRUggV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkIgMDY0NTs7OztOOzs7OzsKK0ZDNzk7QVJBQklDIExJR0FUVVJFIFRIRUggV0lUSCBOT09OIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkIgMDY0Njs7OztOOzs7OzsKK0ZDN0E7QVJBQklDIExJR0FUVVJFIFRIRUggV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQiAwNjQ5Ozs7O047Ozs7OworRkM3QjtBUkFCSUMgTElHQVRVUkUgVEhFSCBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJCIDA2NEE7Ozs7Tjs7Ozs7CitGQzdDO0FSQUJJQyBMSUdBVFVSRSBGRUggV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0MSAwNjQ5Ozs7O047Ozs7OworRkM3RDtBUkFCSUMgTElHQVRVUkUgRkVIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDEgMDY0QTs7OztOOzs7OzsKK0ZDN0U7QVJBQklDIExJR0FUVVJFIFFBRiBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQyIDA2NDk7Ozs7Tjs7Ozs7CitGQzdGO0FSQUJJQyBMSUdBVFVSRSBRQUYgV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0MiAwNjRBOzs7O047Ozs7OworRkM4MDtBUkFCSUMgTElHQVRVUkUgS0FGIFdJVEggQUxFRiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQzIDA2Mjc7Ozs7Tjs7Ozs7CitGQzgxO0FSQUJJQyBMSUdBVFVSRSBLQUYgV0lUSCBMQU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0MyAwNjQ0Ozs7O047Ozs7OworRkM4MjtBUkFCSUMgTElHQVRVUkUgS0FGIFdJVEggTUVFTSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQzIDA2NDU7Ozs7Tjs7Ozs7CitGQzgzO0FSQUJJQyBMSUdBVFVSRSBLQUYgV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0MyAwNjQ5Ozs7O047Ozs7OworRkM4NDtBUkFCSUMgTElHQVRVUkUgS0FGIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDMgMDY0QTs7OztOOzs7OzsKK0ZDODU7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NCAwNjQ1Ozs7O047Ozs7OworRkM4NjtBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDQgMDY0OTs7OztOOzs7OzsKK0ZDODc7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ0IDA2NEE7Ozs7Tjs7Ozs7CitGQzg4O0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggQUxFRiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ1IDA2Mjc7Ozs7Tjs7Ozs7CitGQzg5O0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggTUVFTSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ1IDA2NDU7Ozs7Tjs7Ozs7CitGQzhBO0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggUkVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDYgMDYzMTs7OztOOzs7OzsKK0ZDOEI7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBaQUlOIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDYgMDYzMjs7OztOOzs7OzsKK0ZDOEM7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDYgMDY0NTs7OztOOzs7OzsKK0ZDOEQ7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBOT09OIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDYgMDY0Njs7OztOOzs7OzsKK0ZDOEU7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NiAwNjQ5Ozs7O047Ozs7OworRkM4RjtBUkFCSUMgTElHQVRVUkUgTk9PTiBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ2IDA2NEE7Ozs7Tjs7Ozs7CitGQzkwO0FSQUJJQyBMSUdBVFVSRSBBTEVGIE1BS1NVUkEgV0lUSCBTVVBFUlNDUklQVCBBTEVGIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDkgMDY3MDs7OztOOzs7OzsKK0ZDOTE7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIFJFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjRBIDA2MzE7Ozs7Tjs7Ozs7CitGQzkyO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBaQUlOIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NEEgMDYzMjs7OztOOzs7OzsKK0ZDOTM7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0QSAwNjQ1Ozs7O047Ozs7OworRkM5NDtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggTk9PTiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjRBIDA2NDY7Ozs7Tjs7Ozs7CitGQzk1O0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0QSAwNjQ5Ozs7O047Ozs7OworRkM5NjtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NEEgMDY0QTs7OztOOzs7OzsKK0ZDOTc7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggSkVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyNiAwNjJDOzs7O047Ozs7OworRkM5ODtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MjYgMDYyRDs7OztOOzs7OzsKK0ZDOTk7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIFdJVEggS0hBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyNiAwNjJFOzs7O047Ozs7OworRkM5QTtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEFNWkEgQUJPVkUgV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjI2IDA2NDU7Ozs7Tjs7Ozs7CitGQzlCO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIEhFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyNiAwNjQ3Ozs7O047Ozs7OworRkM5QztBUkFCSUMgTElHQVRVUkUgQkVIIFdJVEggSkVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyOCAwNjJDOzs7O047Ozs7OworRkM5RDtBUkFCSUMgTElHQVRVUkUgQkVIIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjI4IDA2MkQ7Ozs7Tjs7Ozs7CitGQzlFO0FSQUJJQyBMSUdBVFVSRSBCRUggV0lUSCBLSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjI4IDA2MkU7Ozs7Tjs7Ozs7CitGQzlGO0FSQUJJQyBMSUdBVFVSRSBCRUggV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjI4IDA2NDU7Ozs7Tjs7Ozs7CitGQ0EwO0FSQUJJQyBMSUdBVFVSRSBCRUggV0lUSCBIRUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MjggMDY0Nzs7OztOOzs7OzsKK0ZDQTE7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIEpFRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MkEgMDYyQzs7OztOOzs7OzsKK0ZDQTI7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyQSAwNjJEOzs7O047Ozs7OworRkNBMztBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggS0hBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyQSAwNjJFOzs7O047Ozs7OworRkNBNDtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyQSAwNjQ1Ozs7O047Ozs7OworRkNBNTtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggSEVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjJBIDA2NDc7Ozs7Tjs7Ozs7CitGQ0E2O0FSQUJJQyBMSUdBVFVSRSBUSEVIIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyQiAwNjQ1Ozs7O047Ozs7OworRkNBNztBUkFCSUMgTElHQVRVUkUgSkVFTSBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyQyAwNjJEOzs7O047Ozs7OworRkNBODtBUkFCSUMgTElHQVRVUkUgSkVFTSBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MkMgMDY0NTs7OztOOzs7OzsKK0ZDQTk7QVJBQklDIExJR0FUVVJFIEhBSCBXSVRIIEpFRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MkQgMDYyQzs7OztOOzs7OzsKK0ZDQUE7QVJBQklDIExJR0FUVVJFIEhBSCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MkQgMDY0NTs7OztOOzs7OzsKK0ZDQUI7QVJBQklDIExJR0FUVVJFIEtIQUggV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjJFIDA2MkM7Ozs7Tjs7Ozs7CitGQ0FDO0FSQUJJQyBMSUdBVFVSRSBLSEFIIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyRSAwNjQ1Ozs7O047Ozs7OworRkNBRDtBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIEpFRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzMgMDYyQzs7OztOOzs7OzsKK0ZDQUU7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzMgMDYyRDs7OztOOzs7OzsKK0ZDQUY7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBLSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjMzIDA2MkU7Ozs7Tjs7Ozs7CitGQ0IwO0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzMyAwNjQ1Ozs7O047Ozs7OworRkNCMTtBUkFCSUMgTElHQVRVUkUgU0FEIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM1IDA2MkQ7Ozs7Tjs7Ozs7CitGQ0IyO0FSQUJJQyBMSUdBVFVSRSBTQUQgV0lUSCBLSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM1IDA2MkU7Ozs7Tjs7Ozs7CitGQ0IzO0FSQUJJQyBMSUdBVFVSRSBTQUQgV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM1IDA2NDU7Ozs7Tjs7Ozs7CitGQ0I0O0FSQUJJQyBMSUdBVFVSRSBEQUQgV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM2IDA2MkM7Ozs7Tjs7Ozs7CitGQ0I1O0FSQUJJQyBMSUdBVFVSRSBEQUQgV0lUSCBIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzYgMDYyRDs7OztOOzs7OzsKK0ZDQjY7QVJBQklDIExJR0FUVVJFIERBRCBXSVRIIEtIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzYgMDYyRTs7OztOOzs7OzsKK0ZDQjc7QVJBQklDIExJR0FUVVJFIERBRCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzYgMDY0NTs7OztOOzs7OzsKK0ZDQjg7QVJBQklDIExJR0FUVVJFIFRBSCBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzNyAwNjJEOzs7O047Ozs7OworRkNCOTtBUkFCSUMgTElHQVRVUkUgWkFIIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzOCAwNjQ1Ozs7O047Ozs7OworRkNCQTtBUkFCSUMgTElHQVRVUkUgQUlOIFdJVEggSkVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzOSAwNjJDOzs7O047Ozs7OworRkNCQjtBUkFCSUMgTElHQVRVUkUgQUlOIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzOSAwNjQ1Ozs7O047Ozs7OworRkNCQztBUkFCSUMgTElHQVRVUkUgR0hBSU4gV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjNBIDA2MkM7Ozs7Tjs7Ozs7CitGQ0JEO0FSQUJJQyBMSUdBVFVSRSBHSEFJTiBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2M0EgMDY0NTs7OztOOzs7OzsKK0ZDQkU7QVJBQklDIExJR0FUVVJFIEZFSCBXSVRIIEpFRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDEgMDYyQzs7OztOOzs7OzsKK0ZDQkY7QVJBQklDIExJR0FUVVJFIEZFSCBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0MSAwNjJEOzs7O047Ozs7OworRkNDMDtBUkFCSUMgTElHQVRVUkUgRkVIIFdJVEggS0hBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0MSAwNjJFOzs7O047Ozs7OworRkNDMTtBUkFCSUMgTElHQVRVUkUgRkVIIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0MSAwNjQ1Ozs7O047Ozs7OworRkNDMjtBUkFCSUMgTElHQVRVUkUgUUFGIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQyIDA2MkQ7Ozs7Tjs7Ozs7CitGQ0MzO0FSQUJJQyBMSUdBVFVSRSBRQUYgV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQyIDA2NDU7Ozs7Tjs7Ozs7CitGQ0M0O0FSQUJJQyBMSUdBVFVSRSBLQUYgV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQzIDA2MkM7Ozs7Tjs7Ozs7CitGQ0M1O0FSQUJJQyBMSUdBVFVSRSBLQUYgV0lUSCBIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDMgMDYyRDs7OztOOzs7OzsKK0ZDQzY7QVJBQklDIExJR0FUVVJFIEtBRiBXSVRIIEtIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDMgMDYyRTs7OztOOzs7OzsKK0ZDQzc7QVJBQklDIExJR0FUVVJFIEtBRiBXSVRIIExBTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0MyAwNjQ0Ozs7O047Ozs7OworRkNDODtBUkFCSUMgTElHQVRVUkUgS0FGIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0MyAwNjQ1Ozs7O047Ozs7OworRkNDOTtBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggSkVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NCAwNjJDOzs7O047Ozs7OworRkNDQTtBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ0IDA2MkQ7Ozs7Tjs7Ozs7CitGQ0NCO0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBLSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ0IDA2MkU7Ozs7Tjs7Ozs7CitGQ0NDO0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ0IDA2NDU7Ozs7Tjs7Ozs7CitGQ0NEO0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBIRUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDQgMDY0Nzs7OztOOzs7OzsKK0ZDQ0U7QVJBQklDIExJR0FUVVJFIE1FRU0gV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ1IDA2MkM7Ozs7Tjs7Ozs7CitGQ0NGO0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ1IDA2MkQ7Ozs7Tjs7Ozs7CitGQ0QwO0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggS0hBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NSAwNjJFOzs7O047Ozs7OworRkNEMTtBUkFCSUMgTElHQVRVUkUgTUVFTSBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDUgMDY0NTs7OztOOzs7OzsKK0ZDRDI7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ2IDA2MkM7Ozs7Tjs7Ozs7CitGQ0QzO0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ2IDA2MkQ7Ozs7Tjs7Ozs7CitGQ0Q0O0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggS0hBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NiAwNjJFOzs7O047Ozs7OworRkNENTtBUkFCSUMgTElHQVRVUkUgTk9PTiBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDYgMDY0NTs7OztOOzs7OzsKK0ZDRDY7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBIRUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDYgMDY0Nzs7OztOOzs7OzsKK0ZDRDc7QVJBQklDIExJR0FUVVJFIEhFSCBXSVRIIEpFRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDcgMDYyQzs7OztOOzs7OzsKK0ZDRDg7QVJBQklDIExJR0FUVVJFIEhFSCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDcgMDY0NTs7OztOOzs7OzsKK0ZDRDk7QVJBQklDIExJR0FUVVJFIEhFSCBXSVRIIFNVUEVSU0NSSVBUIEFMRUYgSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDcgMDY3MDs7OztOOzs7OzsKK0ZDREE7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEpFRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NEEgMDYyQzs7OztOOzs7OzsKK0ZDREI7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0QSAwNjJEOzs7O047Ozs7OworRkNEQztBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggS0hBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0QSAwNjJFOzs7O047Ozs7OworRkNERDtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0QSAwNjQ1Ozs7O047Ozs7OworRkNERTtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggSEVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjRBIDA2NDc7Ozs7Tjs7Ozs7CitGQ0RGO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIE1FRU0gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjI2IDA2NDU7Ozs7Tjs7Ozs7CitGQ0UwO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQU1aQSBBQk9WRSBXSVRIIEhFSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MjYgMDY0Nzs7OztOOzs7OzsKK0ZDRTE7QVJBQklDIExJR0FUVVJFIEJFSCBXSVRIIE1FRU0gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjI4IDA2NDU7Ozs7Tjs7Ozs7CitGQ0UyO0FSQUJJQyBMSUdBVFVSRSBCRUggV0lUSCBIRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjI4IDA2NDc7Ozs7Tjs7Ozs7CitGQ0UzO0FSQUJJQyBMSUdBVFVSRSBURUggV0lUSCBNRUVNIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYyQSAwNjQ1Ozs7O047Ozs7OworRkNFNDtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggSEVIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYyQSAwNjQ3Ozs7O047Ozs7OworRkNFNTtBUkFCSUMgTElHQVRVUkUgVEhFSCBXSVRIIE1FRU0gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjJCIDA2NDU7Ozs7Tjs7Ozs7CitGQ0U2O0FSQUJJQyBMSUdBVFVSRSBUSEVIIFdJVEggSEVIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYyQiAwNjQ3Ozs7O047Ozs7OworRkNFNztBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIE1FRU0gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjMzIDA2NDU7Ozs7Tjs7Ozs7CitGQ0U4O0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggSEVIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYzMyAwNjQ3Ozs7O047Ozs7OworRkNFOTtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBNRUVNIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYzNCAwNjQ1Ozs7O047Ozs7OworRkNFQTtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBIRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjM0IDA2NDc7Ozs7Tjs7Ozs7CitGQ0VCO0FSQUJJQyBMSUdBVFVSRSBLQUYgV0lUSCBMQU0gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjQzIDA2NDQ7Ozs7Tjs7Ozs7CitGQ0VDO0FSQUJJQyBMSUdBVFVSRSBLQUYgV0lUSCBNRUVNIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY0MyAwNjQ1Ozs7O047Ozs7OworRkNFRDtBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggTUVFTSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2NDQgMDY0NTs7OztOOzs7OzsKK0ZDRUU7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBNRUVNIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY0NiAwNjQ1Ozs7O047Ozs7OworRkNFRjtBUkFCSUMgTElHQVRVUkUgTk9PTiBXSVRIIEhFSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2NDYgMDY0Nzs7OztOOzs7OzsKK0ZDRjA7QVJBQklDIExJR0FUVVJFIFlFSCBXSVRIIE1FRU0gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjRBIDA2NDU7Ozs7Tjs7Ozs7CitGQ0YxO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjRBIDA2NDc7Ozs7Tjs7Ozs7CitGQ0YyO0FSQUJJQyBMSUdBVFVSRSBTSEFEREEgV0lUSCBGQVRIQSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2NDAgMDY0RSAwNjUxOzs7O047Ozs7OworRkNGMztBUkFCSUMgTElHQVRVUkUgU0hBRERBIFdJVEggREFNTUEgTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjQwIDA2NEYgMDY1MTs7OztOOzs7OzsKK0ZDRjQ7QVJBQklDIExJR0FUVVJFIFNIQUREQSBXSVRIIEtBU1JBIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY0MCAwNjUwIDA2NTE7Ozs7Tjs7Ozs7CitGQ0Y1O0FSQUJJQyBMSUdBVFVSRSBUQUggV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNyAwNjQ5Ozs7O047Ozs7OworRkNGNjtBUkFCSUMgTElHQVRVUkUgVEFIIFdJVEggWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzcgMDY0QTs7OztOOzs7OzsKK0ZDRjc7QVJBQklDIExJR0FUVVJFIEFJTiBXSVRIIEFMRUYgTUFLU1VSQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM5IDA2NDk7Ozs7Tjs7Ozs7CitGQ0Y4O0FSQUJJQyBMSUdBVFVSRSBBSU4gV0lUSCBZRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzOSAwNjRBOzs7O047Ozs7OworRkNGOTtBUkFCSUMgTElHQVRVUkUgR0hBSU4gV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzQSAwNjQ5Ozs7O047Ozs7OworRkNGQTtBUkFCSUMgTElHQVRVUkUgR0hBSU4gV0lUSCBZRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzQSAwNjRBOzs7O047Ozs7OworRkNGQjtBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIEFMRUYgTUFLU1VSQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjMzIDA2NDk7Ozs7Tjs7Ozs7CitGQ0ZDO0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzMgMDY0QTs7OztOOzs7OzsKK0ZDRkQ7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzQgMDY0OTs7OztOOzs7OzsKK0ZDRkU7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzQgMDY0QTs7OztOOzs7OzsKK0ZDRkY7QVJBQklDIExJR0FUVVJFIEhBSCBXSVRIIEFMRUYgTUFLU1VSQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjJEIDA2NDk7Ozs7Tjs7Ozs7CitGRDAwO0FSQUJJQyBMSUdBVFVSRSBIQUggV0lUSCBZRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyRCAwNjRBOzs7O047Ozs7OworRkQwMTtBUkFCSUMgTElHQVRVUkUgSkVFTSBXSVRIIEFMRUYgTUFLU1VSQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjJDIDA2NDk7Ozs7Tjs7Ozs7CitGRDAyO0FSQUJJQyBMSUdBVFVSRSBKRUVNIFdJVEggWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkMgMDY0QTs7OztOOzs7OzsKK0ZEMDM7QVJBQklDIExJR0FUVVJFIEtIQUggV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyRSAwNjQ5Ozs7O047Ozs7OworRkQwNDtBUkFCSUMgTElHQVRVUkUgS0hBSCBXSVRIIFlFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjJFIDA2NEE7Ozs7Tjs7Ozs7CitGRDA1O0FSQUJJQyBMSUdBVFVSRSBTQUQgV0lUSCBBTEVGIE1BS1NVUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNSAwNjQ5Ozs7O047Ozs7OworRkQwNjtBUkFCSUMgTElHQVRVUkUgU0FEIFdJVEggWUVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzUgMDY0QTs7OztOOzs7OzsKK0ZEMDc7QVJBQklDIExJR0FUVVJFIERBRCBXSVRIIEFMRUYgTUFLU1VSQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM2IDA2NDk7Ozs7Tjs7Ozs7CitGRDA4O0FSQUJJQyBMSUdBVFVSRSBEQUQgV0lUSCBZRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNiAwNjRBOzs7O047Ozs7OworRkQwOTtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBKRUVNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzQgMDYyQzs7OztOOzs7OzsKK0ZEMEE7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzQgMDYyRDs7OztOOzs7OzsKK0ZEMEI7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggS0hBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM0IDA2MkU7Ozs7Tjs7Ozs7CitGRDBDO0FSQUJJQyBMSUdBVFVSRSBTSEVFTiBXSVRIIE1FRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNCAwNjQ1Ozs7O047Ozs7OworRkQwRDtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBSRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNCAwNjMxOzs7O047Ozs7OworRkQwRTtBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIFJFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjMzIDA2MzE7Ozs7Tjs7Ozs7CitGRDBGO0FSQUJJQyBMSUdBVFVSRSBTQUQgV0lUSCBSRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNSAwNjMxOzs7O047Ozs7OworRkQxMDtBUkFCSUMgTElHQVRVUkUgREFEIFdJVEggUkVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzYgMDYzMTs7OztOOzs7OzsKK0ZEMTE7QVJBQklDIExJR0FUVVJFIFRBSCBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM3IDA2NDk7Ozs7Tjs7Ozs7CitGRDEyO0FSQUJJQyBMSUdBVFVSRSBUQUggV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNyAwNjRBOzs7O047Ozs7OworRkQxMztBUkFCSUMgTElHQVRVUkUgQUlOIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzkgMDY0OTs7OztOOzs7OzsKK0ZEMTQ7QVJBQklDIExJR0FUVVJFIEFJTiBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM5IDA2NEE7Ozs7Tjs7Ozs7CitGRDE1O0FSQUJJQyBMSUdBVFVSRSBHSEFJTiBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjNBIDA2NDk7Ozs7Tjs7Ozs7CitGRDE2O0FSQUJJQyBMSUdBVFVSRSBHSEFJTiBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjNBIDA2NEE7Ozs7Tjs7Ozs7CitGRDE3O0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzMgMDY0OTs7OztOOzs7OzsKK0ZEMTg7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzMyAwNjRBOzs7O047Ozs7OworRkQxOTtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNCAwNjQ5Ozs7O047Ozs7OworRkQxQTtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNCAwNjRBOzs7O047Ozs7OworRkQxQjtBUkFCSUMgTElHQVRVUkUgSEFIIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkQgMDY0OTs7OztOOzs7OzsKK0ZEMUM7QVJBQklDIExJR0FUVVJFIEhBSCBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJEIDA2NEE7Ozs7Tjs7Ozs7CitGRDFEO0FSQUJJQyBMSUdBVFVSRSBKRUVNIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkMgMDY0OTs7OztOOzs7OzsKK0ZEMUU7QVJBQklDIExJR0FUVVJFIEpFRU0gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQyAwNjRBOzs7O047Ozs7OworRkQxRjtBUkFCSUMgTElHQVRVUkUgS0hBSCBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJFIDA2NDk7Ozs7Tjs7Ozs7CitGRDIwO0FSQUJJQyBMSUdBVFVSRSBLSEFIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkUgMDY0QTs7OztOOzs7OzsKK0ZEMjE7QVJBQklDIExJR0FUVVJFIFNBRCBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM1IDA2NDk7Ozs7Tjs7Ozs7CitGRDIyO0FSQUJJQyBMSUdBVFVSRSBTQUQgV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNSAwNjRBOzs7O047Ozs7OworRkQyMztBUkFCSUMgTElHQVRVUkUgREFEIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzYgMDY0OTs7OztOOzs7OzsKK0ZEMjQ7QVJBQklDIExJR0FUVVJFIERBRCBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM2IDA2NEE7Ozs7Tjs7Ozs7CitGRDI1O0FSQUJJQyBMSUdBVFVSRSBTSEVFTiBXSVRIIEpFRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNCAwNjJDOzs7O047Ozs7OworRkQyNjtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBIQUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNCAwNjJEOzs7O047Ozs7OworRkQyNztBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBLSEFIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzQgMDYyRTs7OztOOzs7OzsKK0ZEMjg7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggTUVFTSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM0IDA2NDU7Ozs7Tjs7Ozs7CitGRDI5O0FSQUJJQyBMSUdBVFVSRSBTSEVFTiBXSVRIIFJFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM0IDA2MzE7Ozs7Tjs7Ozs7CitGRDJBO0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggUkVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzMgMDYzMTs7OztOOzs7OzsKK0ZEMkI7QVJBQklDIExJR0FUVVJFIFNBRCBXSVRIIFJFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM1IDA2MzE7Ozs7Tjs7Ozs7CitGRDJDO0FSQUJJQyBMSUdBVFVSRSBEQUQgV0lUSCBSRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNiAwNjMxOzs7O047Ozs7OworRkQyRDtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM0IDA2MkM7Ozs7Tjs7Ozs7CitGRDJFO0FSQUJJQyBMSUdBVFVSRSBTSEVFTiBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzNCAwNjJEOzs7O047Ozs7OworRkQyRjtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBLSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM0IDA2MkU7Ozs7Tjs7Ozs7CitGRDMwO0FSQUJJQyBMSUdBVFVSRSBTSEVFTiBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzQgMDY0NTs7OztOOzs7OzsKK0ZEMzE7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBIRUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzMgMDY0Nzs7OztOOzs7OzsKK0ZEMzI7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggSEVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM0IDA2NDc7Ozs7Tjs7Ozs7CitGRDMzO0FSQUJJQyBMSUdBVFVSRSBUQUggV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM3IDA2NDU7Ozs7Tjs7Ozs7CitGRDM0O0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggSkVFTSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MzMgMDYyQzs7OztOOzs7OzsKK0ZEMzU7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBIQUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjMzIDA2MkQ7Ozs7Tjs7Ozs7CitGRDM2O0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggS0hBSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MzMgMDYyRTs7OztOOzs7OzsKK0ZEMzc7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggSkVFTSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MzQgMDYyQzs7OztOOzs7OzsKK0ZEMzg7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggSEFIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYzNCAwNjJEOzs7O047Ozs7OworRkQzOTtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBLSEFIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYzNCAwNjJFOzs7O047Ozs7OworRkQzQTtBUkFCSUMgTElHQVRVUkUgVEFIIFdJVEggTUVFTSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MzcgMDY0NTs7OztOOzs7OzsKK0ZEM0I7QVJBQklDIExJR0FUVVJFIFpBSCBXSVRIIE1FRU0gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjM4IDA2NDU7Ozs7Tjs7Ozs7CitGRDNDO0FSQUJJQyBMSUdBVFVSRSBBTEVGIFdJVEggRkFUSEFUQU4gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyNyAwNjRCOzs7O047Ozs7OworRkQzRDtBUkFCSUMgTElHQVRVUkUgQUxFRiBXSVRIIEZBVEhBVEFOIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjcgMDY0Qjs7OztOOzs7OzsKK0ZEM0U7T1JOQVRFIExFRlQgUEFSRU5USEVTSVM7UHM7MDtPTjs7Ozs7Tjs7Ozs7CitGRDNGO09STkFURSBSSUdIVCBQQVJFTlRIRVNJUztQZTswO09OOzs7OztOOzs7OzsKK0ZENTA7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIEpFRU0gV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjJBIDA2MkMgMDY0NTs7OztOOzs7OzsKK0ZENTE7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIEhBSCBXSVRIIEpFRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQSAwNjJEIDA2MkM7Ozs7Tjs7Ozs7CitGRDUyO0FSQUJJQyBMSUdBVFVSRSBURUggV0lUSCBIQUggV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjJBIDA2MkQgMDYyQzs7OztOOzs7OzsKK0ZENTM7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIEhBSCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MkEgMDYyRCAwNjQ1Ozs7O047Ozs7OworRkQ1NDtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggS0hBSCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MkEgMDYyRSAwNjQ1Ozs7O047Ozs7OworRkQ1NTtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggTUVFTSBXSVRIIEpFRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MkEgMDY0NSAwNjJDOzs7O047Ozs7OworRkQ1NjtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggTUVFTSBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyQSAwNjQ1IDA2MkQ7Ozs7Tjs7Ozs7CitGRDU3O0FSQUJJQyBMSUdBVFVSRSBURUggV0lUSCBNRUVNIFdJVEggS0hBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyQSAwNjQ1IDA2MkU7Ozs7Tjs7Ozs7CitGRDU4O0FSQUJJQyBMSUdBVFVSRSBKRUVNIFdJVEggTUVFTSBXSVRIIEhBSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJDIDA2NDUgMDYyRDs7OztOOzs7OzsKK0ZENTk7QVJBQklDIExJR0FUVVJFIEpFRU0gV0lUSCBNRUVNIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjJDIDA2NDUgMDYyRDs7OztOOzs7OzsKK0ZENUE7QVJBQklDIExJR0FUVVJFIEhBSCBXSVRIIE1FRU0gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyRCAwNjQ1IDA2NEE7Ozs7Tjs7Ozs7CitGRDVCO0FSQUJJQyBMSUdBVFVSRSBIQUggV0lUSCBNRUVNIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkQgMDY0NSAwNjQ5Ozs7O047Ozs7OworRkQ1QztBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIEhBSCBXSVRIIEpFRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzMgMDYyRCAwNjJDOzs7O047Ozs7OworRkQ1RDtBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIEpFRU0gV0lUSCBIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzMgMDYyQyAwNjJEOzs7O047Ozs7OworRkQ1RTtBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIEpFRU0gV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzMyAwNjJDIDA2NDk7Ozs7Tjs7Ozs7CitGRDVGO0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggTUVFTSBXSVRIIEhBSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjMzIDA2NDUgMDYyRDs7OztOOzs7OzsKK0ZENjA7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBNRUVNIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjMzIDA2NDUgMDYyRDs7OztOOzs7OzsKK0ZENjE7QVJBQklDIExJR0FUVVJFIFNFRU4gV0lUSCBNRUVNIFdJVEggSkVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzMyAwNjQ1IDA2MkM7Ozs7Tjs7Ozs7CitGRDYyO0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggTUVFTSBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzMyAwNjQ1IDA2NDU7Ozs7Tjs7Ozs7CitGRDYzO0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggTUVFTSBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzMgMDY0NSAwNjQ1Ozs7O047Ozs7OworRkQ2NDtBUkFCSUMgTElHQVRVUkUgU0FEIFdJVEggSEFIIFdJVEggSEFIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzUgMDYyRCAwNjJEOzs7O047Ozs7OworRkQ2NTtBUkFCSUMgTElHQVRVUkUgU0FEIFdJVEggSEFIIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM1IDA2MkQgMDYyRDs7OztOOzs7OzsKK0ZENjY7QVJBQklDIExJR0FUVVJFIFNBRCBXSVRIIE1FRU0gV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzUgMDY0NSAwNjQ1Ozs7O047Ozs7OworRkQ2NztBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBIQUggV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzQgMDYyRCAwNjQ1Ozs7O047Ozs7OworRkQ2ODtBUkFCSUMgTElHQVRVUkUgU0hFRU4gV0lUSCBIQUggV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM0IDA2MkQgMDY0NTs7OztOOzs7OzsKK0ZENjk7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggSkVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM0IDA2MkMgMDY0QTs7OztOOzs7OzsKK0ZENkE7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggTUVFTSBXSVRIIEtIQUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNCAwNjQ1IDA2MkU7Ozs7Tjs7Ozs7CitGRDZCO0FSQUJJQyBMSUdBVFVSRSBTSEVFTiBXSVRIIE1FRU0gV0lUSCBLSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM0IDA2NDUgMDYyRTs7OztOOzs7OzsKK0ZENkM7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggTUVFTSBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNCAwNjQ1IDA2NDU7Ozs7Tjs7Ozs7CitGRDZEO0FSQUJJQyBMSUdBVFVSRSBTSEVFTiBXSVRIIE1FRU0gV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM0IDA2NDUgMDY0NTs7OztOOzs7OzsKK0ZENkU7QVJBQklDIExJR0FUVVJFIERBRCBXSVRIIEhBSCBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM2IDA2MkQgMDY0OTs7OztOOzs7OzsKK0ZENkY7QVJBQklDIExJR0FUVVJFIERBRCBXSVRIIEtIQUggV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzYgMDYyRSAwNjQ1Ozs7O047Ozs7OworRkQ3MDtBUkFCSUMgTElHQVRVUkUgREFEIFdJVEggS0hBSCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzYgMDYyRSAwNjQ1Ozs7O047Ozs7OworRkQ3MTtBUkFCSUMgTElHQVRVUkUgVEFIIFdJVEggTUVFTSBXSVRIIEhBSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM3IDA2NDUgMDYyRDs7OztOOzs7OzsKK0ZENzI7QVJBQklDIExJR0FUVVJFIFRBSCBXSVRIIE1FRU0gV0lUSCBIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzcgMDY0NSAwNjJEOzs7O047Ozs7OworRkQ3MztBUkFCSUMgTElHQVRVUkUgVEFIIFdJVEggTUVFTSBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzcgMDY0NSAwNjQ1Ozs7O047Ozs7OworRkQ3NDtBUkFCSUMgTElHQVRVUkUgVEFIIFdJVEggTUVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM3IDA2NDUgMDY0QTs7OztOOzs7OzsKK0ZENzU7QVJBQklDIExJR0FUVVJFIEFJTiBXSVRIIEpFRU0gV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzkgMDYyQyAwNjQ1Ozs7O047Ozs7OworRkQ3NjtBUkFCSUMgTElHQVRVUkUgQUlOIFdJVEggTUVFTSBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzOSAwNjQ1IDA2NDU7Ozs7Tjs7Ozs7CitGRDc3O0FSQUJJQyBMSUdBVFVSRSBBSU4gV0lUSCBNRUVNIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzOSAwNjQ1IDA2NDU7Ozs7Tjs7Ozs7CitGRDc4O0FSQUJJQyBMSUdBVFVSRSBBSU4gV0lUSCBNRUVNIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzkgMDY0NSAwNjQ5Ozs7O047Ozs7OworRkQ3OTtBUkFCSUMgTElHQVRVUkUgR0hBSU4gV0lUSCBNRUVNIFdJVEggTUVFTSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjNBIDA2NDUgMDY0NTs7OztOOzs7OzsKK0ZEN0E7QVJBQklDIExJR0FUVVJFIEdIQUlOIFdJVEggTUVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjNBIDA2NDUgMDY0QTs7OztOOzs7OzsKK0ZEN0I7QVJBQklDIExJR0FUVVJFIEdIQUlOIFdJVEggTUVFTSBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjNBIDA2NDUgMDY0OTs7OztOOzs7OzsKK0ZEN0M7QVJBQklDIExJR0FUVVJFIEZFSCBXSVRIIEtIQUggV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDEgMDYyRSAwNjQ1Ozs7O047Ozs7OworRkQ3RDtBUkFCSUMgTElHQVRVUkUgRkVIIFdJVEggS0hBSCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDEgMDYyRSAwNjQ1Ozs7O047Ozs7OworRkQ3RTtBUkFCSUMgTElHQVRVUkUgUUFGIFdJVEggTUVFTSBXSVRIIEhBSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQyIDA2NDUgMDYyRDs7OztOOzs7OzsKK0ZEN0Y7QVJBQklDIExJR0FUVVJFIFFBRiBXSVRIIE1FRU0gV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDIgMDY0NSAwNjQ1Ozs7O047Ozs7OworRkQ4MDtBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggSEFIIFdJVEggTUVFTSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ0IDA2MkQgMDY0NTs7OztOOzs7OzsKK0ZEODE7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEhBSCBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ0IDA2MkQgMDY0QTs7OztOOzs7OzsKK0ZEODI7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEhBSCBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ0IDA2MkQgMDY0OTs7OztOOzs7OzsKK0ZEODM7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEpFRU0gV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ0IDA2MkMgMDYyQzs7OztOOzs7OzsKK0ZEODQ7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEpFRU0gV0lUSCBKRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDQgMDYyQyAwNjJDOzs7O047Ozs7OworRkQ4NTtBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggS0hBSCBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NCAwNjJFIDA2NDU7Ozs7Tjs7Ozs7CitGRDg2O0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBLSEFIIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NCAwNjJFIDA2NDU7Ozs7Tjs7Ozs7CitGRDg3O0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBNRUVNIFdJVEggSEFIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDQgMDY0NSAwNjJEOzs7O047Ozs7OworRkQ4ODtBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggTUVFTSBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NCAwNjQ1IDA2MkQ7Ozs7Tjs7Ozs7CitGRDg5O0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggSEFIIFdJVEggSkVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NSAwNjJEIDA2MkM7Ozs7Tjs7Ozs7CitGRDhBO0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggSEFIIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NSAwNjJEIDA2NDU7Ozs7Tjs7Ozs7CitGRDhCO0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggSEFIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDUgMDYyRCAwNjRBOzs7O047Ozs7OworRkQ4QztBUkFCSUMgTElHQVRVUkUgTUVFTSBXSVRIIEpFRU0gV0lUSCBIQUggSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDUgMDYyQyAwNjJEOzs7O047Ozs7OworRkQ4RDtBUkFCSUMgTElHQVRVUkUgTUVFTSBXSVRIIEpFRU0gV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ1IDA2MkMgMDY0NTs7OztOOzs7OzsKK0ZEOEU7QVJBQklDIExJR0FUVVJFIE1FRU0gV0lUSCBLSEFIIFdJVEggSkVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NSAwNjJFIDA2MkM7Ozs7Tjs7Ozs7CitGRDhGO0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggS0hBSCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDUgMDYyRSAwNjQ1Ozs7O047Ozs7OworRkQ5MjtBUkFCSUMgTElHQVRVUkUgTUVFTSBXSVRIIEpFRU0gV0lUSCBLSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ1IDA2MkMgMDYyRTs7OztOOzs7OzsKK0ZEOTM7QVJBQklDIExJR0FUVVJFIEhFSCBXSVRIIE1FRU0gV0lUSCBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ3IDA2NDUgMDYyQzs7OztOOzs7OzsKK0ZEOTQ7QVJBQklDIExJR0FUVVJFIEhFSCBXSVRIIE1FRU0gV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ3IDA2NDUgMDY0NTs7OztOOzs7OzsKK0ZEOTU7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBIQUggV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ2IDA2MkQgMDY0NTs7OztOOzs7OzsKK0ZEOTY7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBIQUggV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NiAwNjJEIDA2NDk7Ozs7Tjs7Ozs7CitGRDk3O0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggSkVFTSBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NiAwNjJDIDA2NDU7Ozs7Tjs7Ozs7CitGRDk4O0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggSkVFTSBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDYgMDYyQyAwNjQ1Ozs7O047Ozs7OworRkQ5OTtBUkFCSUMgTElHQVRVUkUgTk9PTiBXSVRIIEpFRU0gV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NiAwNjJDIDA2NDk7Ozs7Tjs7Ozs7CitGRDlBO0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggTUVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ2IDA2NDUgMDY0QTs7OztOOzs7OzsKK0ZEOUI7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBNRUVNIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDYgMDY0NSAwNjQ5Ozs7O047Ozs7OworRkQ5QztBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggTUVFTSBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0QSAwNjQ1IDA2NDU7Ozs7Tjs7Ozs7CitGRDlEO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBNRUVNIFdJVEggTUVFTSBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0QSAwNjQ1IDA2NDU7Ozs7Tjs7Ozs7CitGRDlFO0FSQUJJQyBMSUdBVFVSRSBCRUggV0lUSCBLSEFIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjggMDYyRSAwNjRBOzs7O047Ozs7OworRkQ5RjtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggSkVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJBIDA2MkMgMDY0QTs7OztOOzs7OzsKK0ZEQTA7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIEpFRU0gV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQSAwNjJDIDA2NDk7Ozs7Tjs7Ozs7CitGREExO0FSQUJJQyBMSUdBVFVSRSBURUggV0lUSCBLSEFIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkEgMDYyRSAwNjRBOzs7O047Ozs7OworRkRBMjtBUkFCSUMgTElHQVRVUkUgVEVIIFdJVEggS0hBSCBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJBIDA2MkUgMDY0OTs7OztOOzs7OzsKK0ZEQTM7QVJBQklDIExJR0FUVVJFIFRFSCBXSVRIIE1FRU0gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQSAwNjQ1IDA2NEE7Ozs7Tjs7Ozs7CitGREE0O0FSQUJJQyBMSUdBVFVSRSBURUggV0lUSCBNRUVNIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkEgMDY0NSAwNjQ5Ozs7O047Ozs7OworRkRBNTtBUkFCSUMgTElHQVRVUkUgSkVFTSBXSVRIIE1FRU0gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQyAwNjQ1IDA2NEE7Ozs7Tjs7Ozs7CitGREE2O0FSQUJJQyBMSUdBVFVSRSBKRUVNIFdJVEggSEFIIFdJVEggQUxFRiBNQUtTVVJBIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkMgMDYyRCAwNjQ5Ozs7O047Ozs7OworRkRBNztBUkFCSUMgTElHQVRVUkUgSkVFTSBXSVRIIE1FRU0gV0lUSCBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQyAwNjQ1IDA2NDk7Ozs7Tjs7Ozs7CitGREE4O0FSQUJJQyBMSUdBVFVSRSBTRUVOIFdJVEggS0hBSCBXSVRIIEFMRUYgTUFLU1VSQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjMzIDA2MkUgMDY0OTs7OztOOzs7OzsKK0ZEQTk7QVJBQklDIExJR0FUVVJFIFNBRCBXSVRIIEhBSCBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM1IDA2MkQgMDY0QTs7OztOOzs7OzsKK0ZEQUE7QVJBQklDIExJR0FUVVJFIFNIRUVOIFdJVEggSEFIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzQgMDYyRCAwNjRBOzs7O047Ozs7OworRkRBQjtBUkFCSUMgTElHQVRVUkUgREFEIFdJVEggSEFIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzYgMDYyRCAwNjRBOzs7O047Ozs7OworRkRBQztBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggSkVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ0IDA2MkMgMDY0QTs7OztOOzs7OzsKK0ZEQUQ7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIE1FRU0gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NCAwNjQ1IDA2NEE7Ozs7Tjs7Ozs7CitGREFFO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBIQUggV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0QSAwNjJEIDA2NEE7Ozs7Tjs7Ozs7CitGREFGO0FSQUJJQyBMSUdBVFVSRSBZRUggV0lUSCBKRUVNIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NEEgMDYyQyAwNjRBOzs7O047Ozs7OworRkRCMDtBUkFCSUMgTElHQVRVUkUgWUVIIFdJVEggTUVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjRBIDA2NDUgMDY0QTs7OztOOzs7OzsKK0ZEQjE7QVJBQklDIExJR0FUVVJFIE1FRU0gV0lUSCBNRUVNIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDUgMDY0NSAwNjRBOzs7O047Ozs7OworRkRCMjtBUkFCSUMgTElHQVRVUkUgUUFGIFdJVEggTUVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQyIDA2NDUgMDY0QTs7OztOOzs7OzsKK0ZEQjM7QVJBQklDIExJR0FUVVJFIE5PT04gV0lUSCBIQUggV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NiAwNjJEIDA2NEE7Ozs7Tjs7Ozs7CitGREI0O0FSQUJJQyBMSUdBVFVSRSBRQUYgV0lUSCBNRUVNIFdJVEggSEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQyIDA2NDUgMDYyRDs7OztOOzs7OzsKK0ZEQjU7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEhBSCBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDQgMDYyRCAwNjQ1Ozs7O047Ozs7OworRkRCNjtBUkFCSUMgTElHQVRVUkUgQUlOIFdJVEggTUVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM5IDA2NDUgMDY0QTs7OztOOzs7OzsKK0ZEQjc7QVJBQklDIExJR0FUVVJFIEtBRiBXSVRIIE1FRU0gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0MyAwNjQ1IDA2NEE7Ozs7Tjs7Ozs7CitGREI4O0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggSkVFTSBXSVRIIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0NiAwNjJDIDA2MkQ7Ozs7Tjs7Ozs7CitGREI5O0FSQUJJQyBMSUdBVFVSRSBNRUVNIFdJVEggS0hBSCBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ1IDA2MkUgMDY0QTs7OztOOzs7OzsKK0ZEQkE7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEpFRU0gV0lUSCBNRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQ0IDA2MkMgMDY0NTs7OztOOzs7OzsKK0ZEQkI7QVJBQklDIExJR0FUVVJFIEtBRiBXSVRIIE1FRU0gV0lUSCBNRUVNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDMgMDY0NSAwNjQ1Ozs7O047Ozs7OworRkRCQztBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggSkVFTSBXSVRIIE1FRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NCAwNjJDIDA2NDU7Ozs7Tjs7Ozs7CitGREJEO0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggSkVFTSBXSVRIIEhBSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ2IDA2MkMgMDYyRDs7OztOOzs7OzsKK0ZEQkU7QVJBQklDIExJR0FUVVJFIEpFRU0gV0lUSCBIQUggV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQyAwNjJEIDA2NEE7Ozs7Tjs7Ozs7CitGREJGO0FSQUJJQyBMSUdBVFVSRSBIQUggV0lUSCBKRUVNIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkQgMDYyQyAwNjRBOzs7O047Ozs7OworRkRDMDtBUkFCSUMgTElHQVRVUkUgTUVFTSBXSVRIIEpFRU0gV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NSAwNjJDIDA2NEE7Ozs7Tjs7Ozs7CitGREMxO0FSQUJJQyBMSUdBVFVSRSBGRUggV0lUSCBNRUVNIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDEgMDY0NSAwNjRBOzs7O047Ozs7OworRkRDMjtBUkFCSUMgTElHQVRVUkUgQkVIIFdJVEggSEFIIFdJVEggWUVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjggMDYyRCAwNjRBOzs7O047Ozs7OworRkRDMztBUkFCSUMgTElHQVRVUkUgS0FGIFdJVEggTUVFTSBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDMgMDY0NSAwNjQ1Ozs7O047Ozs7OworRkRDNDtBUkFCSUMgTElHQVRVUkUgQUlOIFdJVEggSkVFTSBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzkgMDYyQyAwNjQ1Ozs7O047Ozs7OworRkRDNTtBUkFCSUMgTElHQVRVUkUgU0FEIFdJVEggTUVFTSBXSVRIIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzUgMDY0NSAwNjQ1Ozs7O047Ozs7OworRkRDNjtBUkFCSUMgTElHQVRVUkUgU0VFTiBXSVRIIEtIQUggV0lUSCBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzMyAwNjJFIDA2NEE7Ozs7Tjs7Ozs7CitGREM3O0FSQUJJQyBMSUdBVFVSRSBOT09OIFdJVEggSkVFTSBXSVRIIFlFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ2IDA2MkMgMDY0QTs7OztOOzs7OzsKK0ZERjA7QVJBQklDIExJR0FUVVJFIFNBTExBIFVTRUQgQVMgS09SQU5JQyBTVE9QIFNJR04gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNSAwNjQ0IDA2RDI7Ozs7Tjs7Ozs7CitGREYxO0FSQUJJQyBMSUdBVFVSRSBRQUxBIFVTRUQgQVMgS09SQU5JQyBTVE9QIFNJR04gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0MiAwNjQ0IDA2RDI7Ozs7Tjs7Ozs7CitGREYyO0FSQUJJQyBMSUdBVFVSRSBBTExBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjI3IDA2NDQgMDY0NCAwNjQ3Ozs7O047Ozs7OworRkRGMztBUkFCSUMgTElHQVRVUkUgQUtCQVIgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNyAwNjQzIDA2MjggMDYzMTs7OztOOzs7OzsKK0ZERjQ7QVJBQklDIExJR0FUVVJFIE1PSEFNTUFEIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDUgMDYyRCAwNjQ1IDA2MkY7Ozs7Tjs7Ozs7CitGREY1O0FSQUJJQyBMSUdBVFVSRSBTQUxBTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM1IDA2NDQgMDYzOSAwNjQ1Ozs7O047Ozs7OworRkRGNjtBUkFCSUMgTElHQVRVUkUgUkFTT1VMIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzEgMDYzMyAwNjQ4IDA2NDQ7Ozs7Tjs7Ozs7CitGREY3O0FSQUJJQyBMSUdBVFVSRSBBTEFZSEUgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzOSAwNjQ0IDA2NEEgMDY0Nzs7OztOOzs7OzsKK0ZERjg7QVJBQklDIExJR0FUVVJFIFdBU0FMTEFNIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDggMDYzMyAwNjQ0IDA2NDU7Ozs7Tjs7Ozs7CitGREY5O0FSQUJJQyBMSUdBVFVSRSBTQUxMQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM1IDA2NDQgMDY0OTs7OztOOzs7OzsKK0ZERkE7QVJBQklDIExJR0FUVVJFIFNBTExBTExBSE9VIEFMQVlIRSBXQVNBTExBTTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNSAwNjQ0IDA2NDkgMDAyMCAwNjI3IDA2NDQgMDY0NCAwNjQ3IDAwMjAgMDYzOSAwNjQ0IDA2NEEgMDY0NyAwMDIwIDA2NDggMDYzMyAwNjQ0IDA2NDU7Ozs7TjtBUkFCSUMgTEVUVEVSIFNBTExBTExBSE9VIEFMQVlIRSBXQVNBTExBTTs7OzsKK0ZERkI7QVJBQklDIExJR0FUVVJFIEpBTExBSkFMQUxPVUhPVTtMbzswO0FMOzxpc29sYXRlZD4gMDYyQyAwNjQ0IDAwMjAgMDYyQyAwNjQ0IDA2MjcgMDY0NCAwNjQ3Ozs7O047QVJBQklDIExFVFRFUiBKQUxMQUpBTEFMT1VIT1U7Ozs7CitGREZDO1JJQUwgU0lHTjtTYzswO0FMOzxpc29sYXRlZD4gMDYzMSAwNkNDIDA2MjcgMDY0NDs7OztOOzs7OzsKK0ZFMDA7VkFSSUFUSU9OIFNFTEVDVE9SLTE7TW47MDtOU007Ozs7O047Ozs7OworRkUwMTtWQVJJQVRJT04gU0VMRUNUT1ItMjtNbjswO05TTTs7Ozs7Tjs7Ozs7CitGRTAyO1ZBUklBVElPTiBTRUxFQ1RPUi0zO01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMDM7VkFSSUFUSU9OIFNFTEVDVE9SLTQ7TW47MDtOU007Ozs7O047Ozs7OworRkUwNDtWQVJJQVRJT04gU0VMRUNUT1ItNTtNbjswO05TTTs7Ozs7Tjs7Ozs7CitGRTA1O1ZBUklBVElPTiBTRUxFQ1RPUi02O01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMDY7VkFSSUFUSU9OIFNFTEVDVE9SLTc7TW47MDtOU007Ozs7O047Ozs7OworRkUwNztWQVJJQVRJT04gU0VMRUNUT1ItODtNbjswO05TTTs7Ozs7Tjs7Ozs7CitGRTA4O1ZBUklBVElPTiBTRUxFQ1RPUi05O01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMDk7VkFSSUFUSU9OIFNFTEVDVE9SLTEwO01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMEE7VkFSSUFUSU9OIFNFTEVDVE9SLTExO01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMEI7VkFSSUFUSU9OIFNFTEVDVE9SLTEyO01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMEM7VkFSSUFUSU9OIFNFTEVDVE9SLTEzO01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMEQ7VkFSSUFUSU9OIFNFTEVDVE9SLTE0O01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMEU7VkFSSUFUSU9OIFNFTEVDVE9SLTE1O01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMEY7VkFSSUFUSU9OIFNFTEVDVE9SLTE2O01uOzA7TlNNOzs7OztOOzs7OzsKK0ZFMjA7Q09NQklOSU5HIExJR0FUVVJFIExFRlQgSEFMRjtNbjsyMzA7TlNNOzs7OztOOzs7OzsKK0ZFMjE7Q09NQklOSU5HIExJR0FUVVJFIFJJR0hUIEhBTEY7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CitGRTIyO0NPTUJJTklORyBET1VCTEUgVElMREUgTEVGVCBIQUxGO01uOzIzMDtOU007Ozs7O047Ozs7OworRkUyMztDT01CSU5JTkcgRE9VQkxFIFRJTERFIFJJR0hUIEhBTEY7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CitGRTMwO1BSRVNFTlRBVElPTiBGT1JNIEZPUiBWRVJUSUNBTCBUV08gRE9UIExFQURFUjtQbzswO09OOzx2ZXJ0aWNhbD4gMjAyNTs7OztOO0dMWVBIIEZPUiBWRVJUSUNBTCBUV08gRE9UIExFQURFUjs7OzsKK0ZFMzE7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIEVNIERBU0g7UGQ7MDtPTjs8dmVydGljYWw+IDIwMTQ7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgRU0gREFTSDs7OzsKK0ZFMzI7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIEVOIERBU0g7UGQ7MDtPTjs8dmVydGljYWw+IDIwMTM7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgRU4gREFTSDs7OzsKK0ZFMzM7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIExPVyBMSU5FO1BjOzA7T047PHZlcnRpY2FsPiAwMDVGOzs7O047R0xZUEggRk9SIFZFUlRJQ0FMIFNQQUNJTkcgVU5ERVJTQ09SRTs7OzsKK0ZFMzQ7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIFdBVlkgTE9XIExJTkU7UGM7MDtPTjs8dmVydGljYWw+IDAwNUY7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgU1BBQ0lORyBXQVZZIFVOREVSU0NPUkU7Ozs7CitGRTM1O1BSRVNFTlRBVElPTiBGT1JNIEZPUiBWRVJUSUNBTCBMRUZUIFBBUkVOVEhFU0lTO1BzOzA7T047PHZlcnRpY2FsPiAwMDI4Ozs7O047R0xZUEggRk9SIFZFUlRJQ0FMIE9QRU5JTkcgUEFSRU5USEVTSVM7Ozs7CitGRTM2O1BSRVNFTlRBVElPTiBGT1JNIEZPUiBWRVJUSUNBTCBSSUdIVCBQQVJFTlRIRVNJUztQZTswO09OOzx2ZXJ0aWNhbD4gMDAyOTs7OztOO0dMWVBIIEZPUiBWRVJUSUNBTCBDTE9TSU5HIFBBUkVOVEhFU0lTOzs7OworRkUzNztQUkVTRU5UQVRJT04gRk9STSBGT1IgVkVSVElDQUwgTEVGVCBDVVJMWSBCUkFDS0VUO1BzOzA7T047PHZlcnRpY2FsPiAwMDdCOzs7O047R0xZUEggRk9SIFZFUlRJQ0FMIE9QRU5JTkcgQ1VSTFkgQlJBQ0tFVDs7OzsKK0ZFMzg7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIFJJR0hUIENVUkxZIEJSQUNLRVQ7UGU7MDtPTjs8dmVydGljYWw+IDAwN0Q7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgQ0xPU0lORyBDVVJMWSBCUkFDS0VUOzs7OworRkUzOTtQUkVTRU5UQVRJT04gRk9STSBGT1IgVkVSVElDQUwgTEVGVCBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUO1BzOzA7T047PHZlcnRpY2FsPiAzMDE0Ozs7O047R0xZUEggRk9SIFZFUlRJQ0FMIE9QRU5JTkcgVE9SVE9JU0UgU0hFTEwgQlJBQ0tFVDs7OzsKK0ZFM0E7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIFJJR0hUIFRPUlRPSVNFIFNIRUxMIEJSQUNLRVQ7UGU7MDtPTjs8dmVydGljYWw+IDMwMTU7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgQ0xPU0lORyBUT1JUT0lTRSBTSEVMTCBCUkFDS0VUOzs7OworRkUzQjtQUkVTRU5UQVRJT04gRk9STSBGT1IgVkVSVElDQUwgTEVGVCBCTEFDSyBMRU5USUNVTEFSIEJSQUNLRVQ7UHM7MDtPTjs8dmVydGljYWw+IDMwMTA7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgT1BFTklORyBCTEFDSyBMRU5USUNVTEFSIEJSQUNLRVQ7Ozs7CitGRTNDO1BSRVNFTlRBVElPTiBGT1JNIEZPUiBWRVJUSUNBTCBSSUdIVCBCTEFDSyBMRU5USUNVTEFSIEJSQUNLRVQ7UGU7MDtPTjs8dmVydGljYWw+IDMwMTE7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgQ0xPU0lORyBCTEFDSyBMRU5USUNVTEFSIEJSQUNLRVQ7Ozs7CitGRTNEO1BSRVNFTlRBVElPTiBGT1JNIEZPUiBWRVJUSUNBTCBMRUZUIERPVUJMRSBBTkdMRSBCUkFDS0VUO1BzOzA7T047PHZlcnRpY2FsPiAzMDBBOzs7O047R0xZUEggRk9SIFZFUlRJQ0FMIE9QRU5JTkcgRE9VQkxFIEFOR0xFIEJSQUNLRVQ7Ozs7CitGRTNFO1BSRVNFTlRBVElPTiBGT1JNIEZPUiBWRVJUSUNBTCBSSUdIVCBET1VCTEUgQU5HTEUgQlJBQ0tFVDtQZTswO09OOzx2ZXJ0aWNhbD4gMzAwQjs7OztOO0dMWVBIIEZPUiBWRVJUSUNBTCBDTE9TSU5HIERPVUJMRSBBTkdMRSBCUkFDS0VUOzs7OworRkUzRjtQUkVTRU5UQVRJT04gRk9STSBGT1IgVkVSVElDQUwgTEVGVCBBTkdMRSBCUkFDS0VUO1BzOzA7T047PHZlcnRpY2FsPiAzMDA4Ozs7O047R0xZUEggRk9SIFZFUlRJQ0FMIE9QRU5JTkcgQU5HTEUgQlJBQ0tFVDs7OzsKK0ZFNDA7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIFJJR0hUIEFOR0xFIEJSQUNLRVQ7UGU7MDtPTjs8dmVydGljYWw+IDMwMDk7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgQ0xPU0lORyBBTkdMRSBCUkFDS0VUOzs7OworRkU0MTtQUkVTRU5UQVRJT04gRk9STSBGT1IgVkVSVElDQUwgTEVGVCBDT1JORVIgQlJBQ0tFVDtQczswO09OOzx2ZXJ0aWNhbD4gMzAwQzs7OztOO0dMWVBIIEZPUiBWRVJUSUNBTCBPUEVOSU5HIENPUk5FUiBCUkFDS0VUOzs7OworRkU0MjtQUkVTRU5UQVRJT04gRk9STSBGT1IgVkVSVElDQUwgUklHSFQgQ09STkVSIEJSQUNLRVQ7UGU7MDtPTjs8dmVydGljYWw+IDMwMEQ7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgQ0xPU0lORyBDT1JORVIgQlJBQ0tFVDs7OzsKK0ZFNDM7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIExFRlQgV0hJVEUgQ09STkVSIEJSQUNLRVQ7UHM7MDtPTjs8dmVydGljYWw+IDMwMEU7Ozs7TjtHTFlQSCBGT1IgVkVSVElDQUwgT1BFTklORyBXSElURSBDT1JORVIgQlJBQ0tFVDs7OzsKK0ZFNDQ7UFJFU0VOVEFUSU9OIEZPUk0gRk9SIFZFUlRJQ0FMIFJJR0hUIFdISVRFIENPUk5FUiBCUkFDS0VUO1BlOzA7T047PHZlcnRpY2FsPiAzMDBGOzs7O047R0xZUEggRk9SIFZFUlRJQ0FMIENMT1NJTkcgV0hJVEUgQ09STkVSIEJSQUNLRVQ7Ozs7CitGRTQ1O1NFU0FNRSBET1Q7UG87MDtPTjs7Ozs7Tjs7Ozs7CitGRTQ2O1dISVRFIFNFU0FNRSBET1Q7UG87MDtPTjs7Ozs7Tjs7Ozs7CitGRTQ5O0RBU0hFRCBPVkVSTElORTtQbzswO09OOzxjb21wYXQ+IDIwM0U7Ozs7TjtTUEFDSU5HIERBU0hFRCBPVkVSU0NPUkU7Ozs7CitGRTRBO0NFTlRSRUxJTkUgT1ZFUkxJTkU7UG87MDtPTjs8Y29tcGF0PiAyMDNFOzs7O047U1BBQ0lORyBDRU5URVJMSU5FIE9WRVJTQ09SRTs7OzsKK0ZFNEI7V0FWWSBPVkVSTElORTtQbzswO09OOzxjb21wYXQ+IDIwM0U7Ozs7TjtTUEFDSU5HIFdBVlkgT1ZFUlNDT1JFOzs7OworRkU0QztET1VCTEUgV0FWWSBPVkVSTElORTtQbzswO09OOzxjb21wYXQ+IDIwM0U7Ozs7TjtTUEFDSU5HIERPVUJMRSBXQVZZIE9WRVJTQ09SRTs7OzsKK0ZFNEQ7REFTSEVEIExPVyBMSU5FO1BjOzA7T047PGNvbXBhdD4gMDA1Rjs7OztOO1NQQUNJTkcgREFTSEVEIFVOREVSU0NPUkU7Ozs7CitGRTRFO0NFTlRSRUxJTkUgTE9XIExJTkU7UGM7MDtPTjs8Y29tcGF0PiAwMDVGOzs7O047U1BBQ0lORyBDRU5URVJMSU5FIFVOREVSU0NPUkU7Ozs7CitGRTRGO1dBVlkgTE9XIExJTkU7UGM7MDtPTjs8Y29tcGF0PiAwMDVGOzs7O047U1BBQ0lORyBXQVZZIFVOREVSU0NPUkU7Ozs7CitGRTUwO1NNQUxMIENPTU1BO1BvOzA7Q1M7PHNtYWxsPiAwMDJDOzs7O047Ozs7OworRkU1MTtTTUFMTCBJREVPR1JBUEhJQyBDT01NQTtQbzswO09OOzxzbWFsbD4gMzAwMTs7OztOOzs7OzsKK0ZFNTI7U01BTEwgRlVMTCBTVE9QO1BvOzA7Q1M7PHNtYWxsPiAwMDJFOzs7O047U01BTEwgUEVSSU9EOzs7OworRkU1NDtTTUFMTCBTRU1JQ09MT047UG87MDtPTjs8c21hbGw+IDAwM0I7Ozs7Tjs7Ozs7CitGRTU1O1NNQUxMIENPTE9OO1BvOzA7Q1M7PHNtYWxsPiAwMDNBOzs7O047Ozs7OworRkU1NjtTTUFMTCBRVUVTVElPTiBNQVJLO1BvOzA7T047PHNtYWxsPiAwMDNGOzs7O047Ozs7OworRkU1NztTTUFMTCBFWENMQU1BVElPTiBNQVJLO1BvOzA7T047PHNtYWxsPiAwMDIxOzs7O047Ozs7OworRkU1ODtTTUFMTCBFTSBEQVNIO1BkOzA7T047PHNtYWxsPiAyMDE0Ozs7O047Ozs7OworRkU1OTtTTUFMTCBMRUZUIFBBUkVOVEhFU0lTO1BzOzA7T047PHNtYWxsPiAwMDI4Ozs7O047U01BTEwgT1BFTklORyBQQVJFTlRIRVNJUzs7OzsKK0ZFNUE7U01BTEwgUklHSFQgUEFSRU5USEVTSVM7UGU7MDtPTjs8c21hbGw+IDAwMjk7Ozs7TjtTTUFMTCBDTE9TSU5HIFBBUkVOVEhFU0lTOzs7OworRkU1QjtTTUFMTCBMRUZUIENVUkxZIEJSQUNLRVQ7UHM7MDtPTjs8c21hbGw+IDAwN0I7Ozs7TjtTTUFMTCBPUEVOSU5HIENVUkxZIEJSQUNLRVQ7Ozs7CitGRTVDO1NNQUxMIFJJR0hUIENVUkxZIEJSQUNLRVQ7UGU7MDtPTjs8c21hbGw+IDAwN0Q7Ozs7TjtTTUFMTCBDTE9TSU5HIENVUkxZIEJSQUNLRVQ7Ozs7CitGRTVEO1NNQUxMIExFRlQgVE9SVE9JU0UgU0hFTEwgQlJBQ0tFVDtQczswO09OOzxzbWFsbD4gMzAxNDs7OztOO1NNQUxMIE9QRU5JTkcgVE9SVE9JU0UgU0hFTEwgQlJBQ0tFVDs7OzsKK0ZFNUU7U01BTEwgUklHSFQgVE9SVE9JU0UgU0hFTEwgQlJBQ0tFVDtQZTswO09OOzxzbWFsbD4gMzAxNTs7OztOO1NNQUxMIENMT1NJTkcgVE9SVE9JU0UgU0hFTEwgQlJBQ0tFVDs7OzsKK0ZFNUY7U01BTEwgTlVNQkVSIFNJR047UG87MDtFVDs8c21hbGw+IDAwMjM7Ozs7Tjs7Ozs7CitGRTYwO1NNQUxMIEFNUEVSU0FORDtQbzswO09OOzxzbWFsbD4gMDAyNjs7OztOOzs7OzsKK0ZFNjE7U01BTEwgQVNURVJJU0s7UG87MDtPTjs8c21hbGw+IDAwMkE7Ozs7Tjs7Ozs7CitGRTYyO1NNQUxMIFBMVVMgU0lHTjtTbTswO0VUOzxzbWFsbD4gMDAyQjs7OztOOzs7OzsKK0ZFNjM7U01BTEwgSFlQSEVOLU1JTlVTO1BkOzA7RVQ7PHNtYWxsPiAwMDJEOzs7O047Ozs7OworRkU2NDtTTUFMTCBMRVNTLVRIQU4gU0lHTjtTbTswO09OOzxzbWFsbD4gMDAzQzs7OztOOzs7OzsKK0ZFNjU7U01BTEwgR1JFQVRFUi1USEFOIFNJR047U207MDtPTjs8c21hbGw+IDAwM0U7Ozs7Tjs7Ozs7CitGRTY2O1NNQUxMIEVRVUFMUyBTSUdOO1NtOzA7T047PHNtYWxsPiAwMDNEOzs7O047Ozs7OworRkU2ODtTTUFMTCBSRVZFUlNFIFNPTElEVVM7UG87MDtPTjs8c21hbGw+IDAwNUM7Ozs7TjtTTUFMTCBCQUNLU0xBU0g7Ozs7CitGRTY5O1NNQUxMIERPTExBUiBTSUdOO1NjOzA7RVQ7PHNtYWxsPiAwMDI0Ozs7O047Ozs7OworRkU2QTtTTUFMTCBQRVJDRU5UIFNJR047UG87MDtFVDs8c21hbGw+IDAwMjU7Ozs7Tjs7Ozs7CitGRTZCO1NNQUxMIENPTU1FUkNJQUwgQVQ7UG87MDtPTjs8c21hbGw+IDAwNDA7Ozs7Tjs7Ozs7CitGRTcwO0FSQUJJQyBGQVRIQVRBTiBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwMDIwIDA2NEI7Ozs7TjtBUkFCSUMgU1BBQ0lORyBGQVRIQVRBTjs7OzsKK0ZFNzE7QVJBQklDIFRBVFdFRUwgV0lUSCBGQVRIQVRBTiBBQk9WRTtMbzswO0FMOzxtZWRpYWw+IDA2NDAgMDY0Qjs7OztOO0FSQUJJQyBGQVRIQVRBTiBPTiBUQVRXRUVMOzs7OworRkU3MjtBUkFCSUMgREFNTUFUQU4gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDAyMCAwNjRDOzs7O047QVJBQklDIFNQQUNJTkcgREFNTUFUQU47Ozs7CitGRTczO0FSQUJJQyBUQUlMIEZSQUdNRU5UO0xvOzA7QUw7Ozs7O047Ozs7OworRkU3NDtBUkFCSUMgS0FTUkFUQU4gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDAyMCAwNjREOzs7O047QVJBQklDIFNQQUNJTkcgS0FTUkFUQU47Ozs7CitGRTc2O0FSQUJJQyBGQVRIQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwMDIwIDA2NEU7Ozs7TjtBUkFCSUMgU1BBQ0lORyBGQVRIQUg7Ozs7CitGRTc3O0FSQUJJQyBGQVRIQSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2NDAgMDY0RTs7OztOO0FSQUJJQyBGQVRIQUggT04gVEFUV0VFTDs7OzsKK0ZFNzg7QVJBQklDIERBTU1BIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDAwMjAgMDY0Rjs7OztOO0FSQUJJQyBTUEFDSU5HIERBTU1BSDs7OzsKK0ZFNzk7QVJBQklDIERBTU1BIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY0MCAwNjRGOzs7O047QVJBQklDIERBTU1BSCBPTiBUQVRXRUVMOzs7OworRkU3QTtBUkFCSUMgS0FTUkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDAyMCAwNjUwOzs7O047QVJBQklDIFNQQUNJTkcgS0FTUkFIOzs7OworRkU3QjtBUkFCSUMgS0FTUkEgTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjQwIDA2NTA7Ozs7TjtBUkFCSUMgS0FTUkFIIE9OIFRBVFdFRUw7Ozs7CitGRTdDO0FSQUJJQyBTSEFEREEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDAyMCAwNjUxOzs7O047QVJBQklDIFNQQUNJTkcgU0hBRERBSDs7OzsKK0ZFN0Q7QVJBQklDIFNIQUREQSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2NDAgMDY1MTs7OztOO0FSQUJJQyBTSEFEREFIIE9OIFRBVFdFRUw7Ozs7CitGRTdFO0FSQUJJQyBTVUtVTiBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwMDIwIDA2NTI7Ozs7TjtBUkFCSUMgU1BBQ0lORyBTVUtVTjs7OzsKK0ZFN0Y7QVJBQklDIFNVS1VOIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY0MCAwNjUyOzs7O047QVJBQklDIFNVS1VOIE9OIFRBVFdFRUw7Ozs7CitGRTgwO0FSQUJJQyBMRVRURVIgSEFNWkEgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyMTs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBIQU1aQUg7Ozs7CitGRTgxO0FSQUJJQyBMRVRURVIgQUxFRiBXSVRIIE1BRERBIEFCT1ZFIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MjI7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgTUFEREFIIE9OIEFMRUY7Ozs7CitGRTgyO0FSQUJJQyBMRVRURVIgQUxFRiBXSVRIIE1BRERBIEFCT1ZFIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MjI7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIE1BRERBSCBPTiBBTEVGOzs7OworRkU4MztBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBIQU1aQSBBQk9WRSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjIzOzs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIEhBTVpBSCBPTiBBTEVGOzs7OworRkU4NDtBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBIQU1aQSBBQk9WRSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjIzOzs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBIQU1aQUggT04gQUxFRjs7OzsKK0ZFODU7QVJBQklDIExFVFRFUiBXQVcgV0lUSCBIQU1aQSBBQk9WRSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjI0Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIEhBTVpBSCBPTiBXQVc7Ozs7CitGRTg2O0FSQUJJQyBMRVRURVIgV0FXIFdJVEggSEFNWkEgQUJPVkUgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyNDs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgSEFNWkFIIE9OIFdBVzs7OzsKK0ZFODc7QVJBQklDIExFVFRFUiBBTEVGIFdJVEggSEFNWkEgQkVMT1cgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNTs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBIQU1aQUggVU5ERVIgQUxFRjs7OzsKK0ZFODg7QVJBQklDIExFVFRFUiBBTEVGIFdJVEggSEFNWkEgQkVMT1cgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyNTs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgSEFNWkFIIFVOREVSIEFMRUY7Ozs7CitGRTg5O0FSQUJJQyBMRVRURVIgWUVIIFdJVEggSEFNWkEgQUJPVkUgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyNjs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBIQU1aQUggT04gWUE7Ozs7CitGRThBO0FSQUJJQyBMRVRURVIgWUVIIFdJVEggSEFNWkEgQUJPVkUgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyNjs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgSEFNWkFIIE9OIFlBOzs7OworRkU4QjtBUkFCSUMgTEVUVEVSIFlFSCBXSVRIIEhBTVpBIEFCT1ZFIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjI2Ozs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIEhBTVpBSCBPTiBZQTs7OzsKK0ZFOEM7QVJBQklDIExFVFRFUiBZRUggV0lUSCBIQU1aQSBBQk9WRSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MjY7Ozs7TjtHTFlQSCBGT1IgTUVESUFMIEFSQUJJQyBIQU1aQUggT04gWUE7Ozs7CitGRThEO0FSQUJJQyBMRVRURVIgQUxFRiBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjI3Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIEFMRUY7Ozs7CitGRThFO0FSQUJJQyBMRVRURVIgQUxFRiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI3Ozs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBBTEVGOzs7OworRkU4RjtBUkFCSUMgTEVUVEVSIEJFSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjI4Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIEJBQTs7OzsKK0ZFOTA7QVJBQklDIExFVFRFUiBCRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyODs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgQkFBOzs7OworRkU5MTtBUkFCSUMgTEVUVEVSIEJFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyODs7OztOO0dMWVBIIEZPUiBJTklUSUFMIEFSQUJJQyBCQUE7Ozs7CitGRTkyO0FSQUJJQyBMRVRURVIgQkVIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYyODs7OztOO0dMWVBIIEZPUiBNRURJQUwgQVJBQklDIEJBQTs7OzsKK0ZFOTM7QVJBQklDIExFVFRFUiBURUggTUFSQlVUQSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjI5Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIFRBQSBNQVJCVVRBSDs7OzsKK0ZFOTQ7QVJBQklDIExFVFRFUiBURUggTUFSQlVUQSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjI5Ozs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBUQUEgTUFSQlVUQUg7Ozs7CitGRTk1O0FSQUJJQyBMRVRURVIgVEVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkE7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgVEFBOzs7OworRkU5NjtBUkFCSUMgTEVUVEVSIFRFSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjJBOzs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBUQUE7Ozs7CitGRTk3O0FSQUJJQyBMRVRURVIgVEVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjJBOzs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIFRBQTs7OzsKK0ZFOTg7QVJBQklDIExFVFRFUiBURUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjJBOzs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgVEFBOzs7OworRkU5OTtBUkFCSUMgTEVUVEVSIFRIRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyQjs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBUSEFBOzs7OworRkU5QTtBUkFCSUMgTEVUVEVSIFRIRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQjs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgVEhBQTs7OzsKK0ZFOUI7QVJBQklDIExFVFRFUiBUSEVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjJCOzs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIFRIQUE7Ozs7CitGRTlDO0FSQUJJQyBMRVRURVIgVEhFSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MkI7Ozs7TjtHTFlQSCBGT1IgTUVESUFMIEFSQUJJQyBUSEFBOzs7OworRkU5RDtBUkFCSUMgTEVUVEVSIEpFRU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyQzs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBKRUVNOzs7OworRkU5RTtBUkFCSUMgTEVUVEVSIEpFRU0gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyQzs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgSkVFTTs7OzsKK0ZFOUY7QVJBQklDIExFVFRFUiBKRUVNIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjJDOzs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIEpFRU07Ozs7CitGRUEwO0FSQUJJQyBMRVRURVIgSkVFTSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MkM7Ozs7TjtHTFlQSCBGT1IgTUVESUFMIEFSQUJJQyBKRUVNOzs7OworRkVBMTtBUkFCSUMgTEVUVEVSIEhBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjJEOzs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIEhBQTs7OzsKK0ZFQTI7QVJBQklDIExFVFRFUiBIQUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYyRDs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgSEFBOzs7OworRkVBMztBUkFCSUMgTEVUVEVSIEhBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyRDs7OztOO0dMWVBIIEZPUiBJTklUSUFMIEFSQUJJQyBIQUE7Ozs7CitGRUE0O0FSQUJJQyBMRVRURVIgSEFIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYyRDs7OztOO0dMWVBIIEZPUiBNRURJQUwgQVJBQklDIEhBQTs7OzsKK0ZFQTU7QVJBQklDIExFVFRFUiBLSEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MkU7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgS0hBQTs7OzsKK0ZFQTY7QVJBQklDIExFVFRFUiBLSEFIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkU7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIEtIQUE7Ozs7CitGRUE3O0FSQUJJQyBMRVRURVIgS0hBSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYyRTs7OztOO0dMWVBIIEZPUiBJTklUSUFMIEFSQUJJQyBLSEFBOzs7OworRkVBODtBUkFCSUMgTEVUVEVSIEtIQUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjJFOzs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgS0hBQTs7OzsKK0ZFQTk7QVJBQklDIExFVFRFUiBEQUwgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYyRjs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBEQUw7Ozs7CitGRUFBO0FSQUJJQyBMRVRURVIgREFMIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MkY7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIERBTDs7OzsKK0ZFQUI7QVJBQklDIExFVFRFUiBUSEFMIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzA7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgVEhBTDs7OzsKK0ZFQUM7QVJBQklDIExFVFRFUiBUSEFMIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzA7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIFRIQUw7Ozs7CitGRUFEO0FSQUJJQyBMRVRURVIgUkVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzE7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgUkE7Ozs7CitGRUFFO0FSQUJJQyBMRVRURVIgUkVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzE7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIFJBOzs7OworRkVBRjtBUkFCSUMgTEVUVEVSIFpBSU4gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzMjs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBaQUlOOzs7OworRkVCMDtBUkFCSUMgTEVUVEVSIFpBSU4gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzMjs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgWkFJTjs7OzsKK0ZFQjE7QVJBQklDIExFVFRFUiBTRUVOIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2MzM7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgU0VFTjs7OzsKK0ZFQjI7QVJBQklDIExFVFRFUiBTRUVOIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzM7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIFNFRU47Ozs7CitGRUIzO0FSQUJJQyBMRVRURVIgU0VFTiBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzMzs7OztOO0dMWVBIIEZPUiBJTklUSUFMIEFSQUJJQyBTRUVOOzs7OworRkVCNDtBUkFCSUMgTEVUVEVSIFNFRU4gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjMzOzs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgU0VFTjs7OzsKK0ZFQjU7QVJBQklDIExFVFRFUiBTSEVFTiBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM0Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIFNIRUVOOzs7OworRkVCNjtBUkFCSUMgTEVUVEVSIFNIRUVOIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzQ7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIFNIRUVOOzs7OworRkVCNztBUkFCSUMgTEVUVEVSIFNIRUVOIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM0Ozs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIFNIRUVOOzs7OworRkVCODtBUkFCSUMgTEVUVEVSIFNIRUVOIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYzNDs7OztOO0dMWVBIIEZPUiBNRURJQUwgQVJBQklDIFNIRUVOOzs7OworRkVCOTtBUkFCSUMgTEVUVEVSIFNBRCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM1Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIFNBRDs7OzsKK0ZFQkE7QVJBQklDIExFVFRFUiBTQUQgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzNTs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgU0FEOzs7OworRkVCQjtBUkFCSUMgTEVUVEVSIFNBRCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDYzNTs7OztOO0dMWVBIIEZPUiBJTklUSUFMIEFSQUJJQyBTQUQ7Ozs7CitGRUJDO0FSQUJJQyBMRVRURVIgU0FEIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYzNTs7OztOO0dMWVBIIEZPUiBNRURJQUwgQVJBQklDIFNBRDs7OzsKK0ZFQkQ7QVJBQklDIExFVFRFUiBEQUQgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDYzNjs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBEQUQ7Ozs7CitGRUJFO0FSQUJJQyBMRVRURVIgREFEIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2MzY7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIERBRDs7OzsKK0ZFQkY7QVJBQklDIExFVFRFUiBEQUQgSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2MzY7Ozs7TjtHTFlQSCBGT1IgSU5JVElBTCBBUkFCSUMgREFEOzs7OworRkVDMDtBUkFCSUMgTEVUVEVSIERBRCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2MzY7Ozs7TjtHTFlQSCBGT1IgTUVESUFMIEFSQUJJQyBEQUQ7Ozs7CitGRUMxO0FSQUJJQyBMRVRURVIgVEFIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2Mzc7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgVEFIOzs7OworRkVDMjtBUkFCSUMgTEVUVEVSIFRBSCBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM3Ozs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBUQUg7Ozs7CitGRUMzO0FSQUJJQyBMRVRURVIgVEFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM3Ozs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIFRBSDs7OzsKK0ZFQzQ7QVJBQklDIExFVFRFUiBUQUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjM3Ozs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgVEFIOzs7OworRkVDNTtBUkFCSUMgTEVUVEVSIFpBSCBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjM4Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIERIQUg7Ozs7CitGRUM2O0FSQUJJQyBMRVRURVIgWkFIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2Mzg7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIERIQUg7Ozs7CitGRUM3O0FSQUJJQyBMRVRURVIgWkFIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM4Ozs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIERIQUg7Ozs7CitGRUM4O0FSQUJJQyBMRVRURVIgWkFIIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDYzODs7OztOO0dMWVBIIEZPUiBNRURJQUwgQVJBQklDIERIQUg7Ozs7CitGRUM5O0FSQUJJQyBMRVRURVIgQUlOIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2Mzk7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgQUlOOzs7OworRkVDQTtBUkFCSUMgTEVUVEVSIEFJTiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjM5Ozs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBBSU47Ozs7CitGRUNCO0FSQUJJQyBMRVRURVIgQUlOIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjM5Ozs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIEFJTjs7OzsKK0ZFQ0M7QVJBQklDIExFVFRFUiBBSU4gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjM5Ozs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgQUlOOzs7OworRkVDRDtBUkFCSUMgTEVUVEVSIEdIQUlOIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2M0E7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgR0hBSU47Ozs7CitGRUNFO0FSQUJJQyBMRVRURVIgR0hBSU4gRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDYzQTs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgR0hBSU47Ozs7CitGRUNGO0FSQUJJQyBMRVRURVIgR0hBSU4gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2M0E7Ozs7TjtHTFlQSCBGT1IgSU5JVElBTCBBUkFCSUMgR0hBSU47Ozs7CitGRUQwO0FSQUJJQyBMRVRURVIgR0hBSU4gTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjNBOzs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgR0hBSU47Ozs7CitGRUQxO0FSQUJJQyBMRVRURVIgRkVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDE7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgRkE7Ozs7CitGRUQyO0FSQUJJQyBMRVRURVIgRkVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDE7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIEZBOzs7OworRkVEMztBUkFCSUMgTEVUVEVSIEZFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0MTs7OztOO0dMWVBIIEZPUiBJTklUSUFMIEFSQUJJQyBGQTs7OzsKK0ZFRDQ7QVJBQklDIExFVFRFUiBGRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjQxOzs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgRkE7Ozs7CitGRUQ1O0FSQUJJQyBMRVRURVIgUUFGIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDI7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgUUFGOzs7OworRkVENjtBUkFCSUMgTEVUVEVSIFFBRiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQyOzs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBRQUY7Ozs7CitGRUQ3O0FSQUJJQyBMRVRURVIgUUFGIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjQyOzs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIFFBRjs7OzsKK0ZFRDg7QVJBQklDIExFVFRFUiBRQUYgTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjQyOzs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgUUFGOzs7OworRkVEOTtBUkFCSUMgTEVUVEVSIEtBRiBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQzOzs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIENBRjs7OzsKK0ZFREE7QVJBQklDIExFVFRFUiBLQUYgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0Mzs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgQ0FGOzs7OworRkVEQjtBUkFCSUMgTEVUVEVSIEtBRiBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0Mzs7OztOO0dMWVBIIEZPUiBJTklUSUFMIEFSQUJJQyBDQUY7Ozs7CitGRURDO0FSQUJJQyBMRVRURVIgS0FGIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY0Mzs7OztOO0dMWVBIIEZPUiBNRURJQUwgQVJBQklDIENBRjs7OzsKK0ZFREQ7QVJBQklDIExFVFRFUiBMQU0gSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0NDs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBMQU07Ozs7CitGRURFO0FSQUJJQyBMRVRURVIgTEFNIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDQ7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIExBTTs7OzsKK0ZFREY7QVJBQklDIExFVFRFUiBMQU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDQ7Ozs7TjtHTFlQSCBGT1IgSU5JVElBTCBBUkFCSUMgTEFNOzs7OworRkVFMDtBUkFCSUMgTEVUVEVSIExBTSBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2NDQ7Ozs7TjtHTFlQSCBGT1IgTUVESUFMIEFSQUJJQyBMQU07Ozs7CitGRUUxO0FSQUJJQyBMRVRURVIgTUVFTSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ1Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIE1FRU07Ozs7CitGRUUyO0FSQUJJQyBMRVRURVIgTUVFTSBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ1Ozs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBNRUVNOzs7OworRkVFMztBUkFCSUMgTEVUVEVSIE1FRU0gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDU7Ozs7TjtHTFlQSCBGT1IgSU5JVElBTCBBUkFCSUMgTUVFTTs7OzsKK0ZFRTQ7QVJBQklDIExFVFRFUiBNRUVNIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY0NTs7OztOO0dMWVBIIEZPUiBNRURJQUwgQVJBQklDIE1FRU07Ozs7CitGRUU1O0FSQUJJQyBMRVRURVIgTk9PTiBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ2Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIE5PT047Ozs7CitGRUU2O0FSQUJJQyBMRVRURVIgTk9PTiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ2Ozs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBOT09OOzs7OworRkVFNztBUkFCSUMgTEVUVEVSIE5PT04gSU5JVElBTCBGT1JNO0xvOzA7QUw7PGluaXRpYWw+IDA2NDY7Ozs7TjtHTFlQSCBGT1IgSU5JVElBTCBBUkFCSUMgTk9PTjs7OzsKK0ZFRTg7QVJBQklDIExFVFRFUiBOT09OIE1FRElBTCBGT1JNO0xvOzA7QUw7PG1lZGlhbD4gMDY0Njs7OztOO0dMWVBIIEZPUiBNRURJQUwgQVJBQklDIE5PT047Ozs7CitGRUU5O0FSQUJJQyBMRVRURVIgSEVIIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDc7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgSEE7Ozs7CitGRUVBO0FSQUJJQyBMRVRURVIgSEVIIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDc7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIEhBOzs7OworRkVFQjtBUkFCSUMgTEVUVEVSIEhFSCBJTklUSUFMIEZPUk07TG87MDtBTDs8aW5pdGlhbD4gMDY0Nzs7OztOO0dMWVBIIEZPUiBJTklUSUFMIEFSQUJJQyBIQTs7OzsKK0ZFRUM7QVJBQklDIExFVFRFUiBIRUggTUVESUFMIEZPUk07TG87MDtBTDs8bWVkaWFsPiAwNjQ3Ozs7O047R0xZUEggRk9SIE1FRElBTCBBUkFCSUMgSEE7Ozs7CitGRUVEO0FSQUJJQyBMRVRURVIgV0FXIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDg7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgV0FXOzs7OworRkVFRTtBUkFCSUMgTEVUVEVSIFdBVyBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ4Ozs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBXQVc7Ozs7CitGRUVGO0FSQUJJQyBMRVRURVIgQUxFRiBNQUtTVVJBIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDk7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgQUxFRiBNQVFTVVJBSDs7OzsKK0ZFRjA7QVJBQklDIExFVFRFUiBBTEVGIE1BS1NVUkEgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0OTs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgQUxFRiBNQVFTVVJBSDs7OzsKK0ZFRjE7QVJBQklDIExFVFRFUiBZRUggSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0QTs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBZQTs7OzsKK0ZFRjI7QVJBQklDIExFVFRFUiBZRUggRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0QTs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgWUE7Ozs7CitGRUYzO0FSQUJJQyBMRVRURVIgWUVIIElOSVRJQUwgRk9STTtMbzswO0FMOzxpbml0aWFsPiAwNjRBOzs7O047R0xZUEggRk9SIElOSVRJQUwgQVJBQklDIFlBOzs7OworRkVGNDtBUkFCSUMgTEVUVEVSIFlFSCBNRURJQUwgRk9STTtMbzswO0FMOzxtZWRpYWw+IDA2NEE7Ozs7TjtHTFlQSCBGT1IgTUVESUFMIEFSQUJJQyBZQTs7OzsKK0ZFRjU7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEFMRUYgV0lUSCBNQUREQSBBQk9WRSBJU09MQVRFRCBGT1JNO0xvOzA7QUw7PGlzb2xhdGVkPiAwNjQ0IDA2MjI7Ozs7TjtHTFlQSCBGT1IgSVNPTEFURSBBUkFCSUMgTUFEREFIIE9OIExJR0FUVVJFIExBTSBBTEVGOzs7OworRkVGNjtBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggQUxFRiBXSVRIIE1BRERBIEFCT1ZFIEZJTkFMIEZPUk07TG87MDtBTDs8ZmluYWw+IDA2NDQgMDYyMjs7OztOO0dMWVBIIEZPUiBGSU5BTCBBUkFCSUMgTUFEREFIIE9OIExJR0FUVVJFIExBTSBBTEVGOzs7OworRkVGNztBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggQUxFRiBXSVRIIEhBTVpBIEFCT1ZFIElTT0xBVEVEIEZPUk07TG87MDtBTDs8aXNvbGF0ZWQ+IDA2NDQgMDYyMzs7OztOO0dMWVBIIEZPUiBJU09MQVRFIEFSQUJJQyBIQU1aQUggT04gTElHQVRVUkUgTEFNIEFMRUY7Ozs7CitGRUY4O0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBBTEVGIFdJVEggSEFNWkEgQUJPVkUgRklOQUwgRk9STTtMbzswO0FMOzxmaW5hbD4gMDY0NCAwNjIzOzs7O047R0xZUEggRk9SIEZJTkFMIEFSQUJJQyBIQU1aQUggT04gTElHQVRVUkUgTEFNIEFMRUY7Ozs7CitGRUY5O0FSQUJJQyBMSUdBVFVSRSBMQU0gV0lUSCBBTEVGIFdJVEggSEFNWkEgQkVMT1cgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0NCAwNjI1Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIEhBTVpBSCBVTkRFUiBMSUdBVFVSRSBMQU0gQUxFRjs7OzsKK0ZFRkE7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEFMRUYgV0lUSCBIQU1aQSBCRUxPVyBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ0IDA2MjU7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIEhBTVpBSCBVTkRFUiBMSUdBVFVSRSBMQU0gQUxFRjs7OzsKK0ZFRkI7QVJBQklDIExJR0FUVVJFIExBTSBXSVRIIEFMRUYgSVNPTEFURUQgRk9STTtMbzswO0FMOzxpc29sYXRlZD4gMDY0NCAwNjI3Ozs7O047R0xZUEggRk9SIElTT0xBVEUgQVJBQklDIExJR0FUVVJFIExBTSBBTEVGOzs7OworRkVGQztBUkFCSUMgTElHQVRVUkUgTEFNIFdJVEggQUxFRiBGSU5BTCBGT1JNO0xvOzA7QUw7PGZpbmFsPiAwNjQ0IDA2Mjc7Ozs7TjtHTFlQSCBGT1IgRklOQUwgQVJBQklDIExJR0FUVVJFIExBTSBBTEVGOzs7OworRkVGRjtaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFO0NmOzA7Qk47Ozs7O047QllURSBPUkRFUiBNQVJLOzs7OworRkYwMTtGVUxMV0lEVEggRVhDTEFNQVRJT04gTUFSSztQbzswO09OOzx3aWRlPiAwMDIxOzs7O047Ozs7OworRkYwMjtGVUxMV0lEVEggUVVPVEFUSU9OIE1BUks7UG87MDtPTjs8d2lkZT4gMDAyMjs7OztOOzs7OzsKK0ZGMDM7RlVMTFdJRFRIIE5VTUJFUiBTSUdOO1BvOzA7RVQ7PHdpZGU+IDAwMjM7Ozs7Tjs7Ozs7CitGRjA0O0ZVTExXSURUSCBET0xMQVIgU0lHTjtTYzswO0VUOzx3aWRlPiAwMDI0Ozs7O047Ozs7OworRkYwNTtGVUxMV0lEVEggUEVSQ0VOVCBTSUdOO1BvOzA7RVQ7PHdpZGU+IDAwMjU7Ozs7Tjs7Ozs7CitGRjA2O0ZVTExXSURUSCBBTVBFUlNBTkQ7UG87MDtPTjs8d2lkZT4gMDAyNjs7OztOOzs7OzsKK0ZGMDc7RlVMTFdJRFRIIEFQT1NUUk9QSEU7UG87MDtPTjs8d2lkZT4gMDAyNzs7OztOOzs7OzsKK0ZGMDg7RlVMTFdJRFRIIExFRlQgUEFSRU5USEVTSVM7UHM7MDtPTjs8d2lkZT4gMDAyODs7OztZO0ZVTExXSURUSCBPUEVOSU5HIFBBUkVOVEhFU0lTOzs7OworRkYwOTtGVUxMV0lEVEggUklHSFQgUEFSRU5USEVTSVM7UGU7MDtPTjs8d2lkZT4gMDAyOTs7OztZO0ZVTExXSURUSCBDTE9TSU5HIFBBUkVOVEhFU0lTOzs7OworRkYwQTtGVUxMV0lEVEggQVNURVJJU0s7UG87MDtPTjs8d2lkZT4gMDAyQTs7OztOOzs7OzsKK0ZGMEI7RlVMTFdJRFRIIFBMVVMgU0lHTjtTbTswO0VUOzx3aWRlPiAwMDJCOzs7O047Ozs7OworRkYwQztGVUxMV0lEVEggQ09NTUE7UG87MDtDUzs8d2lkZT4gMDAyQzs7OztOOzs7OzsKK0ZGMEQ7RlVMTFdJRFRIIEhZUEhFTi1NSU5VUztQZDswO0VUOzx3aWRlPiAwMDJEOzs7O047Ozs7OworRkYwRTtGVUxMV0lEVEggRlVMTCBTVE9QO1BvOzA7Q1M7PHdpZGU+IDAwMkU7Ozs7TjtGVUxMV0lEVEggUEVSSU9EOzs7OworRkYwRjtGVUxMV0lEVEggU09MSURVUztQbzswO0VTOzx3aWRlPiAwMDJGOzs7O047RlVMTFdJRFRIIFNMQVNIOzs7OworRkYxMDtGVUxMV0lEVEggRElHSVQgWkVSTztOZDswO0VOOzx3aWRlPiAwMDMwOzA7MDswO047Ozs7OworRkYxMTtGVUxMV0lEVEggRElHSVQgT05FO05kOzA7RU47PHdpZGU+IDAwMzE7MTsxOzE7Tjs7Ozs7CitGRjEyO0ZVTExXSURUSCBESUdJVCBUV087TmQ7MDtFTjs8d2lkZT4gMDAzMjsyOzI7MjtOOzs7OzsKK0ZGMTM7RlVMTFdJRFRIIERJR0lUIFRIUkVFO05kOzA7RU47PHdpZGU+IDAwMzM7MzszOzM7Tjs7Ozs7CitGRjE0O0ZVTExXSURUSCBESUdJVCBGT1VSO05kOzA7RU47PHdpZGU+IDAwMzQ7NDs0OzQ7Tjs7Ozs7CitGRjE1O0ZVTExXSURUSCBESUdJVCBGSVZFO05kOzA7RU47PHdpZGU+IDAwMzU7NTs1OzU7Tjs7Ozs7CitGRjE2O0ZVTExXSURUSCBESUdJVCBTSVg7TmQ7MDtFTjs8d2lkZT4gMDAzNjs2OzY7NjtOOzs7OzsKK0ZGMTc7RlVMTFdJRFRIIERJR0lUIFNFVkVOO05kOzA7RU47PHdpZGU+IDAwMzc7Nzs3Ozc7Tjs7Ozs7CitGRjE4O0ZVTExXSURUSCBESUdJVCBFSUdIVDtOZDswO0VOOzx3aWRlPiAwMDM4Ozg7ODs4O047Ozs7OworRkYxOTtGVUxMV0lEVEggRElHSVQgTklORTtOZDswO0VOOzx3aWRlPiAwMDM5Ozk7OTs5O047Ozs7OworRkYxQTtGVUxMV0lEVEggQ09MT047UG87MDtDUzs8d2lkZT4gMDAzQTs7OztOOzs7OzsKK0ZGMUI7RlVMTFdJRFRIIFNFTUlDT0xPTjtQbzswO09OOzx3aWRlPiAwMDNCOzs7O047Ozs7OworRkYxQztGVUxMV0lEVEggTEVTUy1USEFOIFNJR047U207MDtPTjs8d2lkZT4gMDAzQzs7OztZOzs7OzsKK0ZGMUQ7RlVMTFdJRFRIIEVRVUFMUyBTSUdOO1NtOzA7T047PHdpZGU+IDAwM0Q7Ozs7Tjs7Ozs7CitGRjFFO0ZVTExXSURUSCBHUkVBVEVSLVRIQU4gU0lHTjtTbTswO09OOzx3aWRlPiAwMDNFOzs7O1k7Ozs7OworRkYxRjtGVUxMV0lEVEggUVVFU1RJT04gTUFSSztQbzswO09OOzx3aWRlPiAwMDNGOzs7O047Ozs7OworRkYyMDtGVUxMV0lEVEggQ09NTUVSQ0lBTCBBVDtQbzswO09OOzx3aWRlPiAwMDQwOzs7O047Ozs7OworRkYyMTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgQTtMdTswO0w7PHdpZGU+IDAwNDE7Ozs7Tjs7OztGRjQxOworRkYyMjtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgQjtMdTswO0w7PHdpZGU+IDAwNDI7Ozs7Tjs7OztGRjQyOworRkYyMztGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgQztMdTswO0w7PHdpZGU+IDAwNDM7Ozs7Tjs7OztGRjQzOworRkYyNDtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRDtMdTswO0w7PHdpZGU+IDAwNDQ7Ozs7Tjs7OztGRjQ0OworRkYyNTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRTtMdTswO0w7PHdpZGU+IDAwNDU7Ozs7Tjs7OztGRjQ1OworRkYyNjtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRjtMdTswO0w7PHdpZGU+IDAwNDY7Ozs7Tjs7OztGRjQ2OworRkYyNztGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRztMdTswO0w7PHdpZGU+IDAwNDc7Ozs7Tjs7OztGRjQ3OworRkYyODtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSDtMdTswO0w7PHdpZGU+IDAwNDg7Ozs7Tjs7OztGRjQ4OworRkYyOTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSTtMdTswO0w7PHdpZGU+IDAwNDk7Ozs7Tjs7OztGRjQ5OworRkYyQTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSjtMdTswO0w7PHdpZGU+IDAwNEE7Ozs7Tjs7OztGRjRBOworRkYyQjtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSztMdTswO0w7PHdpZGU+IDAwNEI7Ozs7Tjs7OztGRjRCOworRkYyQztGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTDtMdTswO0w7PHdpZGU+IDAwNEM7Ozs7Tjs7OztGRjRDOworRkYyRDtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTTtMdTswO0w7PHdpZGU+IDAwNEQ7Ozs7Tjs7OztGRjREOworRkYyRTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTjtMdTswO0w7PHdpZGU+IDAwNEU7Ozs7Tjs7OztGRjRFOworRkYyRjtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTztMdTswO0w7PHdpZGU+IDAwNEY7Ozs7Tjs7OztGRjRGOworRkYzMDtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUDtMdTswO0w7PHdpZGU+IDAwNTA7Ozs7Tjs7OztGRjUwOworRkYzMTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUTtMdTswO0w7PHdpZGU+IDAwNTE7Ozs7Tjs7OztGRjUxOworRkYzMjtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUjtMdTswO0w7PHdpZGU+IDAwNTI7Ozs7Tjs7OztGRjUyOworRkYzMztGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUztMdTswO0w7PHdpZGU+IDAwNTM7Ozs7Tjs7OztGRjUzOworRkYzNDtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVDtMdTswO0w7PHdpZGU+IDAwNTQ7Ozs7Tjs7OztGRjU0OworRkYzNTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVTtMdTswO0w7PHdpZGU+IDAwNTU7Ozs7Tjs7OztGRjU1OworRkYzNjtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVjtMdTswO0w7PHdpZGU+IDAwNTY7Ozs7Tjs7OztGRjU2OworRkYzNztGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVztMdTswO0w7PHdpZGU+IDAwNTc7Ozs7Tjs7OztGRjU3OworRkYzODtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgWDtMdTswO0w7PHdpZGU+IDAwNTg7Ozs7Tjs7OztGRjU4OworRkYzOTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgWTtMdTswO0w7PHdpZGU+IDAwNTk7Ozs7Tjs7OztGRjU5OworRkYzQTtGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgWjtMdTswO0w7PHdpZGU+IDAwNUE7Ozs7Tjs7OztGRjVBOworRkYzQjtGVUxMV0lEVEggTEVGVCBTUVVBUkUgQlJBQ0tFVDtQczswO09OOzx3aWRlPiAwMDVCOzs7O1k7RlVMTFdJRFRIIE9QRU5JTkcgU1FVQVJFIEJSQUNLRVQ7Ozs7CitGRjNDO0ZVTExXSURUSCBSRVZFUlNFIFNPTElEVVM7UG87MDtPTjs8d2lkZT4gMDA1Qzs7OztOO0ZVTExXSURUSCBCQUNLU0xBU0g7Ozs7CitGRjNEO0ZVTExXSURUSCBSSUdIVCBTUVVBUkUgQlJBQ0tFVDtQZTswO09OOzx3aWRlPiAwMDVEOzs7O1k7RlVMTFdJRFRIIENMT1NJTkcgU1FVQVJFIEJSQUNLRVQ7Ozs7CitGRjNFO0ZVTExXSURUSCBDSVJDVU1GTEVYIEFDQ0VOVDtTazswO09OOzx3aWRlPiAwMDVFOzs7O047RlVMTFdJRFRIIFNQQUNJTkcgQ0lSQ1VNRkxFWDs7OzsKK0ZGM0Y7RlVMTFdJRFRIIExPVyBMSU5FO1BjOzA7T047PHdpZGU+IDAwNUY7Ozs7TjtGVUxMV0lEVEggU1BBQ0lORyBVTkRFUlNDT1JFOzs7OworRkY0MDtGVUxMV0lEVEggR1JBVkUgQUNDRU5UO1NrOzA7T047PHdpZGU+IDAwNjA7Ozs7TjtGVUxMV0lEVEggU1BBQ0lORyBHUkFWRTs7OzsKK0ZGNDE7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBBO0xsOzA7TDs8d2lkZT4gMDA2MTs7OztOOzs7RkYyMTs7RkYyMQorRkY0MjtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEI7TGw7MDtMOzx3aWRlPiAwMDYyOzs7O047OztGRjIyOztGRjIyCitGRjQzO0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgQztMbDswO0w7PHdpZGU+IDAwNjM7Ozs7Tjs7O0ZGMjM7O0ZGMjMKK0ZGNDQ7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBEO0xsOzA7TDs8d2lkZT4gMDA2NDs7OztOOzs7RkYyNDs7RkYyNAorRkY0NTtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEU7TGw7MDtMOzx3aWRlPiAwMDY1Ozs7O047OztGRjI1OztGRjI1CitGRjQ2O0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgRjtMbDswO0w7PHdpZGU+IDAwNjY7Ozs7Tjs7O0ZGMjY7O0ZGMjYKK0ZGNDc7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBHO0xsOzA7TDs8d2lkZT4gMDA2Nzs7OztOOzs7RkYyNzs7RkYyNworRkY0ODtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEg7TGw7MDtMOzx3aWRlPiAwMDY4Ozs7O047OztGRjI4OztGRjI4CitGRjQ5O0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgSTtMbDswO0w7PHdpZGU+IDAwNjk7Ozs7Tjs7O0ZGMjk7O0ZGMjkKK0ZGNEE7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBKO0xsOzA7TDs8d2lkZT4gMDA2QTs7OztOOzs7RkYyQTs7RkYyQQorRkY0QjtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEs7TGw7MDtMOzx3aWRlPiAwMDZCOzs7O047OztGRjJCOztGRjJCCitGRjRDO0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgTDtMbDswO0w7PHdpZGU+IDAwNkM7Ozs7Tjs7O0ZGMkM7O0ZGMkMKK0ZGNEQ7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBNO0xsOzA7TDs8d2lkZT4gMDA2RDs7OztOOzs7RkYyRDs7RkYyRAorRkY0RTtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIE47TGw7MDtMOzx3aWRlPiAwMDZFOzs7O047OztGRjJFOztGRjJFCitGRjRGO0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgTztMbDswO0w7PHdpZGU+IDAwNkY7Ozs7Tjs7O0ZGMkY7O0ZGMkYKK0ZGNTA7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBQO0xsOzA7TDs8d2lkZT4gMDA3MDs7OztOOzs7RkYzMDs7RkYzMAorRkY1MTtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFE7TGw7MDtMOzx3aWRlPiAwMDcxOzs7O047OztGRjMxOztGRjMxCitGRjUyO0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgUjtMbDswO0w7PHdpZGU+IDAwNzI7Ozs7Tjs7O0ZGMzI7O0ZGMzIKK0ZGNTM7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBTO0xsOzA7TDs8d2lkZT4gMDA3Mzs7OztOOzs7RkYzMzs7RkYzMworRkY1NDtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFQ7TGw7MDtMOzx3aWRlPiAwMDc0Ozs7O047OztGRjM0OztGRjM0CitGRjU1O0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgVTtMbDswO0w7PHdpZGU+IDAwNzU7Ozs7Tjs7O0ZGMzU7O0ZGMzUKK0ZGNTY7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBWO0xsOzA7TDs8d2lkZT4gMDA3Njs7OztOOzs7RkYzNjs7RkYzNgorRkY1NztGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFc7TGw7MDtMOzx3aWRlPiAwMDc3Ozs7O047OztGRjM3OztGRjM3CitGRjU4O0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgWDtMbDswO0w7PHdpZGU+IDAwNzg7Ozs7Tjs7O0ZGMzg7O0ZGMzgKK0ZGNTk7RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBZO0xsOzA7TDs8d2lkZT4gMDA3OTs7OztOOzs7RkYzOTs7RkYzOQorRkY1QTtGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFo7TGw7MDtMOzx3aWRlPiAwMDdBOzs7O047OztGRjNBOztGRjNBCitGRjVCO0ZVTExXSURUSCBMRUZUIENVUkxZIEJSQUNLRVQ7UHM7MDtPTjs8d2lkZT4gMDA3Qjs7OztZO0ZVTExXSURUSCBPUEVOSU5HIENVUkxZIEJSQUNLRVQ7Ozs7CitGRjVDO0ZVTExXSURUSCBWRVJUSUNBTCBMSU5FO1NtOzA7T047PHdpZGU+IDAwN0M7Ozs7TjtGVUxMV0lEVEggVkVSVElDQUwgQkFSOzs7OworRkY1RDtGVUxMV0lEVEggUklHSFQgQ1VSTFkgQlJBQ0tFVDtQZTswO09OOzx3aWRlPiAwMDdEOzs7O1k7RlVMTFdJRFRIIENMT1NJTkcgQ1VSTFkgQlJBQ0tFVDs7OzsKK0ZGNUU7RlVMTFdJRFRIIFRJTERFO1NtOzA7T047PHdpZGU+IDAwN0U7Ozs7TjtGVUxMV0lEVEggU1BBQ0lORyBUSUxERTs7OzsKK0ZGNUY7RlVMTFdJRFRIIExFRlQgV0hJVEUgUEFSRU5USEVTSVM7UHM7MDtPTjs8d2lkZT4gMjk4NTs7OztZOzsqOzs7CitGRjYwO0ZVTExXSURUSCBSSUdIVCBXSElURSBQQVJFTlRIRVNJUztQZTswO09OOzx3aWRlPiAyOTg2Ozs7O1k7Oyo7OzsKK0ZGNjE7SEFMRldJRFRIIElERU9HUkFQSElDIEZVTEwgU1RPUDtQbzswO09OOzxuYXJyb3c+IDMwMDI7Ozs7TjtIQUxGV0lEVEggSURFT0dSQVBISUMgUEVSSU9EOzs7OworRkY2MjtIQUxGV0lEVEggTEVGVCBDT1JORVIgQlJBQ0tFVDtQczswO09OOzxuYXJyb3c+IDMwMEM7Ozs7WTtIQUxGV0lEVEggT1BFTklORyBDT1JORVIgQlJBQ0tFVDs7OzsKK0ZGNjM7SEFMRldJRFRIIFJJR0hUIENPUk5FUiBCUkFDS0VUO1BlOzA7T047PG5hcnJvdz4gMzAwRDs7OztZO0hBTEZXSURUSCBDTE9TSU5HIENPUk5FUiBCUkFDS0VUOzs7OworRkY2NDtIQUxGV0lEVEggSURFT0dSQVBISUMgQ09NTUE7UG87MDtPTjs8bmFycm93PiAzMDAxOzs7O047Ozs7OworRkY2NTtIQUxGV0lEVEggS0FUQUtBTkEgTUlERExFIERPVDtQYzswO09OOzxuYXJyb3c+IDMwRkI7Ozs7Tjs7Ozs7CitGRjY2O0hBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgV087TG87MDtMOzxuYXJyb3c+IDMwRjI7Ozs7Tjs7Ozs7CitGRjY3O0hBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgQTtMbzswO0w7PG5hcnJvdz4gMzBBMTs7OztOOzs7OzsKK0ZGNjg7SEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBJO0xvOzA7TDs8bmFycm93PiAzMEEzOzs7O047Ozs7OworRkY2OTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIFU7TG87MDtMOzxuYXJyb3c+IDMwQTU7Ozs7Tjs7Ozs7CitGRjZBO0hBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgRTtMbzswO0w7PG5hcnJvdz4gMzBBNzs7OztOOzs7OzsKK0ZGNkI7SEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBPO0xvOzA7TDs8bmFycm93PiAzMEE5Ozs7O047Ozs7OworRkY2QztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIFlBO0xvOzA7TDs8bmFycm93PiAzMEUzOzs7O047Ozs7OworRkY2RDtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIFlVO0xvOzA7TDs8bmFycm93PiAzMEU1Ozs7O047Ozs7OworRkY2RTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIFlPO0xvOzA7TDs8bmFycm93PiAzMEU3Ozs7O047Ozs7OworRkY2RjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIFRVO0xvOzA7TDs8bmFycm93PiAzMEMzOzs7O047Ozs7OworRkY3MDtIQUxGV0lEVEggS0FUQUtBTkEtSElSQUdBTkEgUFJPTE9OR0VEIFNPVU5EIE1BUks7TG07MDtMOzxuYXJyb3c+IDMwRkM7Ozs7Tjs7Ozs7CitGRjcxO0hBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgQTtMbzswO0w7PG5hcnJvdz4gMzBBMjs7OztOOzs7OzsKK0ZGNzI7SEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBJO0xvOzA7TDs8bmFycm93PiAzMEE0Ozs7O047Ozs7OworRkY3MztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFU7TG87MDtMOzxuYXJyb3c+IDMwQTY7Ozs7Tjs7Ozs7CitGRjc0O0hBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgRTtMbzswO0w7PG5hcnJvdz4gMzBBODs7OztOOzs7OzsKK0ZGNzU7SEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBPO0xvOzA7TDs8bmFycm93PiAzMEFBOzs7O047Ozs7OworRkY3NjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEtBO0xvOzA7TDs8bmFycm93PiAzMEFCOzs7O047Ozs7OworRkY3NztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEtJO0xvOzA7TDs8bmFycm93PiAzMEFEOzs7O047Ozs7OworRkY3ODtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEtVO0xvOzA7TDs8bmFycm93PiAzMEFGOzs7O047Ozs7OworRkY3OTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEtFO0xvOzA7TDs8bmFycm93PiAzMEIxOzs7O047Ozs7OworRkY3QTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEtPO0xvOzA7TDs8bmFycm93PiAzMEIzOzs7O047Ozs7OworRkY3QjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNBO0xvOzA7TDs8bmFycm93PiAzMEI1Ozs7O047Ozs7OworRkY3QztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNJO0xvOzA7TDs8bmFycm93PiAzMEI3Ozs7O047Ozs7OworRkY3RDtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNVO0xvOzA7TDs8bmFycm93PiAzMEI5Ozs7O047Ozs7OworRkY3RTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNFO0xvOzA7TDs8bmFycm93PiAzMEJCOzs7O047Ozs7OworRkY3RjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNPO0xvOzA7TDs8bmFycm93PiAzMEJEOzs7O047Ozs7OworRkY4MDtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFRBO0xvOzA7TDs8bmFycm93PiAzMEJGOzs7O047Ozs7OworRkY4MTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFRJO0xvOzA7TDs8bmFycm93PiAzMEMxOzs7O047Ozs7OworRkY4MjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFRVO0xvOzA7TDs8bmFycm93PiAzMEM0Ozs7O047Ozs7OworRkY4MztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFRFO0xvOzA7TDs8bmFycm93PiAzMEM2Ozs7O047Ozs7OworRkY4NDtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFRPO0xvOzA7TDs8bmFycm93PiAzMEM4Ozs7O047Ozs7OworRkY4NTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE5BO0xvOzA7TDs8bmFycm93PiAzMENBOzs7O047Ozs7OworRkY4NjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE5JO0xvOzA7TDs8bmFycm93PiAzMENCOzs7O047Ozs7OworRkY4NztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE5VO0xvOzA7TDs8bmFycm93PiAzMENDOzs7O047Ozs7OworRkY4ODtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE5FO0xvOzA7TDs8bmFycm93PiAzMENEOzs7O047Ozs7OworRkY4OTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE5PO0xvOzA7TDs8bmFycm93PiAzMENFOzs7O047Ozs7OworRkY4QTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEhBO0xvOzA7TDs8bmFycm93PiAzMENGOzs7O047Ozs7OworRkY4QjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEhJO0xvOzA7TDs8bmFycm93PiAzMEQyOzs7O047Ozs7OworRkY4QztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEhVO0xvOzA7TDs8bmFycm93PiAzMEQ1Ozs7O047Ozs7OworRkY4RDtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEhFO0xvOzA7TDs8bmFycm93PiAzMEQ4Ozs7O047Ozs7OworRkY4RTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEhPO0xvOzA7TDs8bmFycm93PiAzMERCOzs7O047Ozs7OworRkY4RjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE1BO0xvOzA7TDs8bmFycm93PiAzMERFOzs7O047Ozs7OworRkY5MDtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE1JO0xvOzA7TDs8bmFycm93PiAzMERGOzs7O047Ozs7OworRkY5MTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE1VO0xvOzA7TDs8bmFycm93PiAzMEUwOzs7O047Ozs7OworRkY5MjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE1FO0xvOzA7TDs8bmFycm93PiAzMEUxOzs7O047Ozs7OworRkY5MztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE1PO0xvOzA7TDs8bmFycm93PiAzMEUyOzs7O047Ozs7OworRkY5NDtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFlBO0xvOzA7TDs8bmFycm93PiAzMEU0Ozs7O047Ozs7OworRkY5NTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFlVO0xvOzA7TDs8bmFycm93PiAzMEU2Ozs7O047Ozs7OworRkY5NjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFlPO0xvOzA7TDs8bmFycm93PiAzMEU4Ozs7O047Ozs7OworRkY5NztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFJBO0xvOzA7TDs8bmFycm93PiAzMEU5Ozs7O047Ozs7OworRkY5ODtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFJJO0xvOzA7TDs8bmFycm93PiAzMEVBOzs7O047Ozs7OworRkY5OTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFJVO0xvOzA7TDs8bmFycm93PiAzMEVCOzs7O047Ozs7OworRkY5QTtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFJFO0xvOzA7TDs8bmFycm93PiAzMEVDOzs7O047Ozs7OworRkY5QjtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFJPO0xvOzA7TDs8bmFycm93PiAzMEVEOzs7O047Ozs7OworRkY5QztIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFdBO0xvOzA7TDs8bmFycm93PiAzMEVGOzs7O047Ozs7OworRkY5RDtIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE47TG87MDtMOzxuYXJyb3c+IDMwRjM7Ozs7Tjs7Ozs7CitGRjlFO0hBTEZXSURUSCBLQVRBS0FOQSBWT0lDRUQgU09VTkQgTUFSSztMbTswO0w7PG5hcnJvdz4gMzA5OTs7OztOOztoYWxmd2lkdGgga2F0YWthbmEtaGlyYWdhbmEgdm9pY2VkIHNvdW5kIG1hcms7OzsKK0ZGOUY7SEFMRldJRFRIIEtBVEFLQU5BIFNFTUktVk9JQ0VEIFNPVU5EIE1BUks7TG07MDtMOzxuYXJyb3c+IDMwOUE7Ozs7Tjs7aGFsZndpZHRoIGthdGFrYW5hLWhpcmFnYW5hIHNlbWktdm9pY2VkIHNvdW5kIG1hcms7OzsKK0ZGQTA7SEFMRldJRFRIIEhBTkdVTCBGSUxMRVI7TG87MDtMOzxuYXJyb3c+IDMxNjQ7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIENBRSBPTTs7OzsKK0ZGQTE7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgS0lZRU9LO0xvOzA7TDs8bmFycm93PiAzMTMxOzs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgR0lZRU9HOzs7OworRkZBMjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBTU0FOR0tJWUVPSztMbzswO0w7PG5hcnJvdz4gMzEzMjs7OztOO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HIEdJWUVPRzs7OzsKK0ZGQTM7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgS0lZRU9LLVNJT1M7TG87MDtMOzxuYXJyb3c+IDMxMzM7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBHSVlFT0cgU0lPUzs7OzsKK0ZGQTQ7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgTklFVU47TG87MDtMOzxuYXJyb3c+IDMxMzQ7Ozs7Tjs7Ozs7CitGRkE1O0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIE5JRVVOLUNJRVVDO0xvOzA7TDs8bmFycm93PiAzMTM1Ozs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgTklFVU4gSklFVUo7Ozs7CitGRkE2O0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIE5JRVVOLUhJRVVIO0xvOzA7TDs8bmFycm93PiAzMTM2Ozs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgTklFVU4gSElFVUg7Ozs7CitGRkE3O0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFRJS0VVVDtMbzswO0w7PG5hcnJvdz4gMzEzNzs7OztOO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIERJR0VVRDs7OzsKK0ZGQTg7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgU1NBTkdUSUtFVVQ7TG87MDtMOzxuYXJyb3c+IDMxMzg7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBTU0FORyBESUdFVUQ7Ozs7CitGRkE5O0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMO0xvOzA7TDs8bmFycm93PiAzMTM5Ozs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgTElFVUw7Ozs7CitGRkFBO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLUtJWUVPSztMbzswO0w7PG5hcnJvdz4gMzEzQTs7OztOO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIExJRVVMIEdJWUVPRzs7OzsKK0ZGQUI7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUklFVUwtTUlFVU07TG87MDtMOzxuYXJyb3c+IDMxM0I7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBMSUVVTCBNSUVVTTs7OzsKK0ZGQUM7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUklFVUwtUElFVVA7TG87MDtMOzxuYXJyb3c+IDMxM0M7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBMSUVVTCBCSUVVQjs7OzsKK0ZGQUQ7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUklFVUwtU0lPUztMbzswO0w7PG5hcnJvdz4gMzEzRDs7OztOO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIExJRVVMIFNJT1M7Ozs7CitGRkFFO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLVRISUVVVEg7TG87MDtMOzxuYXJyb3c+IDMxM0U7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBMSUVVTCBUSUVVVDs7OzsKK0ZGQUY7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUklFVUwtUEhJRVVQSDtMbzswO0w7PG5hcnJvdz4gMzEzRjs7OztOO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIExJRVVMIFBJRVVQOzs7OworRkZCMDtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBSSUVVTC1ISUVVSDtMbzswO0w7PG5hcnJvdz4gMzE0MDs7OztOO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIExJRVVMIEhJRVVIOzs7OworRkZCMTtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBNSUVVTTtMbzswO0w7PG5hcnJvdz4gMzE0MTs7OztOOzs7OzsKK0ZGQjI7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUElFVVA7TG87MDtMOzxuYXJyb3c+IDMxNDI7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBCSUVVQjs7OzsKK0ZGQjM7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgU1NBTkdQSUVVUDtMbzswO0w7PG5hcnJvdz4gMzE0Mzs7OztOO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HIEJJRVVCOzs7OworRkZCNDtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBQSUVVUC1TSU9TO0xvOzA7TDs8bmFycm93PiAzMTQ0Ozs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgQklFVUIgU0lPUzs7OzsKK0ZGQjU7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgU0lPUztMbzswO0w7PG5hcnJvdz4gMzE0NTs7OztOOzs7OzsKK0ZGQjY7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgU1NBTkdTSU9TO0xvOzA7TDs8bmFycm93PiAzMTQ2Ozs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgU1NBTkcgU0lPUzs7OzsKK0ZGQjc7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgSUVVTkc7TG87MDtMOzxuYXJyb3c+IDMxNDc7Ozs7Tjs7Ozs7CitGRkI4O0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIENJRVVDO0xvOzA7TDs8bmFycm93PiAzMTQ4Ozs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgSklFVUo7Ozs7CitGRkI5O0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HQ0lFVUM7TG87MDtMOzxuYXJyb3c+IDMxNDk7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBTU0FORyBKSUVVSjs7OzsKK0ZGQkE7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgQ0hJRVVDSDtMbzswO0w7PG5hcnJvdz4gMzE0QTs7OztOO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIENJRVVDOzs7OworRkZCQjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBLSElFVUtIO0xvOzA7TDs8bmFycm93PiAzMTRCOzs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgS0lZRU9LOzs7OworRkZCQztIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBUSElFVVRIO0xvOzA7TDs8bmFycm93PiAzMTRDOzs7O047SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgVElFVVQ7Ozs7CitGRkJEO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFBISUVVUEg7TG87MDtMOzxuYXJyb3c+IDMxNEQ7Ozs7TjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBQSUVVUDs7OzsKK0ZGQkU7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgSElFVUg7TG87MDtMOzxuYXJyb3c+IDMxNEU7Ozs7Tjs7Ozs7CitGRkMyO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEE7TG87MDtMOzxuYXJyb3c+IDMxNEY7Ozs7Tjs7Ozs7CitGRkMzO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEFFO0xvOzA7TDs8bmFycm93PiAzMTUwOzs7O047Ozs7OworRkZDNDtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZQTtMbzswO0w7PG5hcnJvdz4gMzE1MTs7OztOOzs7OzsKK0ZGQzU7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgWUFFO0xvOzA7TDs8bmFycm93PiAzMTUyOzs7O047Ozs7OworRkZDNjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBFTztMbzswO0w7PG5hcnJvdz4gMzE1Mzs7OztOOzs7OzsKK0ZGQzc7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgRTtMbzswO0w7PG5hcnJvdz4gMzE1NDs7OztOOzs7OzsKK0ZGQ0E7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgWUVPO0xvOzA7TDs8bmFycm93PiAzMTU1Ozs7O047Ozs7OworRkZDQjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZRTtMbzswO0w7PG5hcnJvdz4gMzE1Njs7OztOOzs7OzsKK0ZGQ0M7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgTztMbzswO0w7PG5hcnJvdz4gMzE1Nzs7OztOOzs7OzsKK0ZGQ0Q7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgV0E7TG87MDtMOzxuYXJyb3c+IDMxNTg7Ozs7Tjs7Ozs7CitGRkNFO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFdBRTtMbzswO0w7PG5hcnJvdz4gMzE1OTs7OztOOzs7OzsKK0ZGQ0Y7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgT0U7TG87MDtMOzxuYXJyb3c+IDMxNUE7Ozs7Tjs7Ozs7CitGRkQyO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFlPO0xvOzA7TDs8bmFycm93PiAzMTVCOzs7O047Ozs7OworRkZEMztIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBVO0xvOzA7TDs8bmFycm93PiAzMTVDOzs7O047Ozs7OworRkZENDtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBXRU87TG87MDtMOzxuYXJyb3c+IDMxNUQ7Ozs7Tjs7Ozs7CitGRkQ1O0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFdFO0xvOzA7TDs8bmFycm93PiAzMTVFOzs7O047Ozs7OworRkZENjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBXSTtMbzswO0w7PG5hcnJvdz4gMzE1Rjs7OztOOzs7OzsKK0ZGRDc7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgWVU7TG87MDtMOzxuYXJyb3c+IDMxNjA7Ozs7Tjs7Ozs7CitGRkRBO0hBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEVVO0xvOzA7TDs8bmFycm93PiAzMTYxOzs7O047Ozs7OworRkZEQjtIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZSTtMbzswO0w7PG5hcnJvdz4gMzE2Mjs7OztOOzs7OzsKK0ZGREM7SEFMRldJRFRIIEhBTkdVTCBMRVRURVIgSTtMbzswO0w7PG5hcnJvdz4gMzE2Mzs7OztOOzs7OzsKK0ZGRTA7RlVMTFdJRFRIIENFTlQgU0lHTjtTYzswO0VUOzx3aWRlPiAwMEEyOzs7O047Ozs7OworRkZFMTtGVUxMV0lEVEggUE9VTkQgU0lHTjtTYzswO0VUOzx3aWRlPiAwMEEzOzs7O047Ozs7OworRkZFMjtGVUxMV0lEVEggTk9UIFNJR047U207MDtPTjs8d2lkZT4gMDBBQzs7OztOOzs7OzsKK0ZGRTM7RlVMTFdJRFRIIE1BQ1JPTjtTazswO09OOzx3aWRlPiAwMEFGOzs7O047RlVMTFdJRFRIIFNQQUNJTkcgTUFDUk9OOyo7OzsKK0ZGRTQ7RlVMTFdJRFRIIEJST0tFTiBCQVI7U287MDtPTjs8d2lkZT4gMDBBNjs7OztOO0ZVTExXSURUSCBCUk9LRU4gVkVSVElDQUwgQkFSOzs7OworRkZFNTtGVUxMV0lEVEggWUVOIFNJR047U2M7MDtFVDs8d2lkZT4gMDBBNTs7OztOOzs7OzsKK0ZGRTY7RlVMTFdJRFRIIFdPTiBTSUdOO1NjOzA7RVQ7PHdpZGU+IDIwQTk7Ozs7Tjs7Ozs7CitGRkU4O0hBTEZXSURUSCBGT1JNUyBMSUdIVCBWRVJUSUNBTDtTbzswO09OOzxuYXJyb3c+IDI1MDI7Ozs7Tjs7Ozs7CitGRkU5O0hBTEZXSURUSCBMRUZUV0FSRFMgQVJST1c7U207MDtPTjs8bmFycm93PiAyMTkwOzs7O047Ozs7OworRkZFQTtIQUxGV0lEVEggVVBXQVJEUyBBUlJPVztTbTswO09OOzxuYXJyb3c+IDIxOTE7Ozs7Tjs7Ozs7CitGRkVCO0hBTEZXSURUSCBSSUdIVFdBUkRTIEFSUk9XO1NtOzA7T047PG5hcnJvdz4gMjE5Mjs7OztOOzs7OzsKK0ZGRUM7SEFMRldJRFRIIERPV05XQVJEUyBBUlJPVztTbTswO09OOzxuYXJyb3c+IDIxOTM7Ozs7Tjs7Ozs7CitGRkVEO0hBTEZXSURUSCBCTEFDSyBTUVVBUkU7U287MDtPTjs8bmFycm93PiAyNUEwOzs7O047Ozs7OworRkZFRTtIQUxGV0lEVEggV0hJVEUgQ0lSQ0xFO1NvOzA7T047PG5hcnJvdz4gMjVDQjs7OztOOzs7OzsKK0ZGRjk7SU5URVJMSU5FQVIgQU5OT1RBVElPTiBBTkNIT1I7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitGRkZBO0lOVEVSTElORUFSIEFOTk9UQVRJT04gU0VQQVJBVE9SO0NmOzA7Qk47Ozs7O047Ozs7OworRkZGQjtJTlRFUkxJTkVBUiBBTk5PVEFUSU9OIFRFUk1JTkFUT1I7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitGRkZDO09CSkVDVCBSRVBMQUNFTUVOVCBDSEFSQUNURVI7U287MDtPTjs7Ozs7Tjs7Ozs7CitGRkZEO1JFUExBQ0VNRU5UIENIQVJBQ1RFUjtTbzswO09OOzs7OztOOzs7OzsKKzEwMzAwO09MRCBJVEFMSUMgTEVUVEVSIEE7TG87MDtMOzs7OztOOzs7OzsKKzEwMzAxO09MRCBJVEFMSUMgTEVUVEVSIEJFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMwMjtPTEQgSVRBTElDIExFVFRFUiBLRTtMbzswO0w7Ozs7O047Ozs7OworMTAzMDM7T0xEIElUQUxJQyBMRVRURVIgREU7TG87MDtMOzs7OztOOzs7OzsKKzEwMzA0O09MRCBJVEFMSUMgTEVUVEVSIEU7TG87MDtMOzs7OztOOzs7OzsKKzEwMzA1O09MRCBJVEFMSUMgTEVUVEVSIFZFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMwNjtPTEQgSVRBTElDIExFVFRFUiBaRTtMbzswO0w7Ozs7O047Ozs7OworMTAzMDc7T0xEIElUQUxJQyBMRVRURVIgSEU7TG87MDtMOzs7OztOOzs7OzsKKzEwMzA4O09MRCBJVEFMSUMgTEVUVEVSIFRIRTtMbzswO0w7Ozs7O047Ozs7OworMTAzMDk7T0xEIElUQUxJQyBMRVRURVIgSTtMbzswO0w7Ozs7O047Ozs7OworMTAzMEE7T0xEIElUQUxJQyBMRVRURVIgS0E7TG87MDtMOzs7OztOOzs7OzsKKzEwMzBCO09MRCBJVEFMSUMgTEVUVEVSIEVMO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMwQztPTEQgSVRBTElDIExFVFRFUiBFTTtMbzswO0w7Ozs7O047Ozs7OworMTAzMEQ7T0xEIElUQUxJQyBMRVRURVIgRU47TG87MDtMOzs7OztOOzs7OzsKKzEwMzBFO09MRCBJVEFMSUMgTEVUVEVSIEVTSDtMbzswO0w7Ozs7O047Ozs7OworMTAzMEY7T0xEIElUQUxJQyBMRVRURVIgTztMbzswO0w7Ozs7O047O0ZhbGlzY2FuOzs7CisxMDMxMDtPTEQgSVRBTElDIExFVFRFUiBQRTtMbzswO0w7Ozs7O047Ozs7OworMTAzMTE7T0xEIElUQUxJQyBMRVRURVIgU0hFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMxMjtPTEQgSVRBTElDIExFVFRFUiBLVTtMbzswO0w7Ozs7O047Ozs7OworMTAzMTM7T0xEIElUQUxJQyBMRVRURVIgRVI7TG87MDtMOzs7OztOOzs7OzsKKzEwMzE0O09MRCBJVEFMSUMgTEVUVEVSIEVTO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMxNTtPTEQgSVRBTElDIExFVFRFUiBURTtMbzswO0w7Ozs7O047Ozs7OworMTAzMTY7T0xEIElUQUxJQyBMRVRURVIgVTtMbzswO0w7Ozs7O047Ozs7OworMTAzMTc7T0xEIElUQUxJQyBMRVRURVIgRUtTO0xvOzA7TDs7Ozs7Tjs7RmFsaXNjYW47OzsKKzEwMzE4O09MRCBJVEFMSUMgTEVUVEVSIFBIRTtMbzswO0w7Ozs7O047Ozs7OworMTAzMTk7T0xEIElUQUxJQyBMRVRURVIgS0hFO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMxQTtPTEQgSVRBTElDIExFVFRFUiBFRjtMbzswO0w7Ozs7O047Ozs7OworMTAzMUI7T0xEIElUQUxJQyBMRVRURVIgRVJTO0xvOzA7TDs7Ozs7Tjs7VW1icmlhbjs7OworMTAzMUM7T0xEIElUQUxJQyBMRVRURVIgQ0hFO0xvOzA7TDs7Ozs7Tjs7VW1icmlhbjs7OworMTAzMUQ7T0xEIElUQUxJQyBMRVRURVIgSUk7TG87MDtMOzs7OztOOztPc2Nhbjs7OworMTAzMUU7T0xEIElUQUxJQyBMRVRURVIgVVU7TG87MDtMOzs7OztOOztPc2Nhbjs7OworMTAzMjA7T0xEIElUQUxJQyBOVU1FUkFMIE9ORTtObzswO0w7Ozs7MTtOOzs7OzsKKzEwMzIxO09MRCBJVEFMSUMgTlVNRVJBTCBGSVZFO05vOzA7TDs7Ozs1O047Ozs7OworMTAzMjI7T0xEIElUQUxJQyBOVU1FUkFMIFRFTjtObzswO0w7Ozs7MTA7Tjs7Ozs7CisxMDMyMztPTEQgSVRBTElDIE5VTUVSQUwgRklGVFk7Tm87MDtMOzs7OzUwO047Ozs7OworMTAzMzA7R09USElDIExFVFRFUiBBSFNBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMzMTtHT1RISUMgTEVUVEVSIEJBSVJLQU47TG87MDtMOzs7OztOOzs7OzsKKzEwMzMyO0dPVEhJQyBMRVRURVIgR0lCQTtMbzswO0w7Ozs7O047Ozs7OworMTAzMzM7R09USElDIExFVFRFUiBEQUdTO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMzNDtHT1RISUMgTEVUVEVSIEFJSFZVUztMbzswO0w7Ozs7O047Ozs7OworMTAzMzU7R09USElDIExFVFRFUiBRQUlSVEhSQTtMbzswO0w7Ozs7O047Ozs7OworMTAzMzY7R09USElDIExFVFRFUiBJVUpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMzNztHT1RISUMgTEVUVEVSIEhBR0w7TG87MDtMOzs7OztOOzs7OzsKKzEwMzM4O0dPVEhJQyBMRVRURVIgVEhJVVRIO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMzOTtHT1RISUMgTEVUVEVSIEVJUztMbzswO0w7Ozs7O047Ozs7OworMTAzM0E7R09USElDIExFVFRFUiBLVVNNQTtMbzswO0w7Ozs7O047Ozs7OworMTAzM0I7R09USElDIExFVFRFUiBMQUdVUztMbzswO0w7Ozs7O047Ozs7OworMTAzM0M7R09USElDIExFVFRFUiBNQU5OQTtMbzswO0w7Ozs7O047Ozs7OworMTAzM0Q7R09USElDIExFVFRFUiBOQVVUSFM7TG87MDtMOzs7OztOOzs7OzsKKzEwMzNFO0dPVEhJQyBMRVRURVIgSkVSO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDMzRjtHT1RISUMgTEVUVEVSIFVSVVM7TG87MDtMOzs7OztOOzs7OzsKKzEwMzQwO0dPVEhJQyBMRVRURVIgUEFJUlRIUkE7TG87MDtMOzs7OztOOzs7OzsKKzEwMzQxO0dPVEhJQyBMRVRURVIgTklORVRZO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0MjtHT1RISUMgTEVUVEVSIFJBSURBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0MztHT1RISUMgTEVUVEVSIFNBVUlMO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0NDtHT1RISUMgTEVUVEVSIFRFSVdTO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0NTtHT1RISUMgTEVUVEVSIFdJTkpBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0NjtHT1RISUMgTEVUVEVSIEZBSUhVO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0NztHT1RISUMgTEVUVEVSIElHR1dTO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0ODtHT1RISUMgTEVUVEVSIEhXQUlSO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0OTtHT1RISUMgTEVUVEVSIE9USEFMO0xvOzA7TDs7Ozs7Tjs7Ozs7CisxMDM0QTtHT1RISUMgTEVUVEVSIE5JTkUgSFVORFJFRDtObDswO0w7Ozs7O047Ozs7OworMTA0MDA7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBMT05HIEk7THU7MDtMOzs7OztOOzs7OzEwNDI4OworMTA0MDE7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBMT05HIEU7THU7MDtMOzs7OztOOzs7OzEwNDI5OworMTA0MDI7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBMT05HIEE7THU7MDtMOzs7OztOOzs7OzEwNDJBOworMTA0MDM7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBMT05HIEFIO0x1OzA7TDs7Ozs7Tjs7OzsxMDQyQjsKKzEwNDA0O0RFU0VSRVQgQ0FQSVRBTCBMRVRURVIgTE9ORyBPO0x1OzA7TDs7Ozs7Tjs7OzsxMDQyQzsKKzEwNDA1O0RFU0VSRVQgQ0FQSVRBTCBMRVRURVIgTE9ORyBPTztMdTswO0w7Ozs7O047Ozs7MTA0MkQ7CisxMDQwNjtERVNFUkVUIENBUElUQUwgTEVUVEVSIFNIT1JUIEk7THU7MDtMOzs7OztOOzs7OzEwNDJFOworMTA0MDc7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBTSE9SVCBFO0x1OzA7TDs7Ozs7Tjs7OzsxMDQyRjsKKzEwNDA4O0RFU0VSRVQgQ0FQSVRBTCBMRVRURVIgU0hPUlQgQTtMdTswO0w7Ozs7O047Ozs7MTA0MzA7CisxMDQwOTtERVNFUkVUIENBUElUQUwgTEVUVEVSIFNIT1JUIEFIO0x1OzA7TDs7Ozs7Tjs7OzsxMDQzMTsKKzEwNDBBO0RFU0VSRVQgQ0FQSVRBTCBMRVRURVIgU0hPUlQgTztMdTswO0w7Ozs7O047Ozs7MTA0MzI7CisxMDQwQjtERVNFUkVUIENBUElUQUwgTEVUVEVSIFNIT1JUIE9PO0x1OzA7TDs7Ozs7Tjs7OzsxMDQzMzsKKzEwNDBDO0RFU0VSRVQgQ0FQSVRBTCBMRVRURVIgQVk7THU7MDtMOzs7OztOOzs7OzEwNDM0OworMTA0MEQ7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBPVztMdTswO0w7Ozs7O047Ozs7MTA0MzU7CisxMDQwRTtERVNFUkVUIENBUElUQUwgTEVUVEVSIFdVO0x1OzA7TDs7Ozs7Tjs7OzsxMDQzNjsKKzEwNDBGO0RFU0VSRVQgQ0FQSVRBTCBMRVRURVIgWUVFO0x1OzA7TDs7Ozs7Tjs7OzsxMDQzNzsKKzEwNDEwO0RFU0VSRVQgQ0FQSVRBTCBMRVRURVIgSDtMdTswO0w7Ozs7O047Ozs7MTA0Mzg7CisxMDQxMTtERVNFUkVUIENBUElUQUwgTEVUVEVSIFBFRTtMdTswO0w7Ozs7O047Ozs7MTA0Mzk7CisxMDQxMjtERVNFUkVUIENBUElUQUwgTEVUVEVSIEJFRTtMdTswO0w7Ozs7O047Ozs7MTA0M0E7CisxMDQxMztERVNFUkVUIENBUElUQUwgTEVUVEVSIFRFRTtMdTswO0w7Ozs7O047Ozs7MTA0M0I7CisxMDQxNDtERVNFUkVUIENBUElUQUwgTEVUVEVSIERFRTtMdTswO0w7Ozs7O047Ozs7MTA0M0M7CisxMDQxNTtERVNFUkVUIENBUElUQUwgTEVUVEVSIENIRUU7THU7MDtMOzs7OztOOzs7OzEwNDNEOworMTA0MTY7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBKRUU7THU7MDtMOzs7OztOOzs7OzEwNDNFOworMTA0MTc7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBLQVk7THU7MDtMOzs7OztOOzs7OzEwNDNGOworMTA0MTg7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBHQVk7THU7MDtMOzs7OztOOzs7OzEwNDQwOworMTA0MTk7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBFRjtMdTswO0w7Ozs7O047Ozs7MTA0NDE7CisxMDQxQTtERVNFUkVUIENBUElUQUwgTEVUVEVSIFZFRTtMdTswO0w7Ozs7O047Ozs7MTA0NDI7CisxMDQxQjtERVNFUkVUIENBUElUQUwgTEVUVEVSIEVUSDtMdTswO0w7Ozs7O047Ozs7MTA0NDM7CisxMDQxQztERVNFUkVUIENBUElUQUwgTEVUVEVSIFRIRUU7THU7MDtMOzs7OztOOzs7OzEwNDQ0OworMTA0MUQ7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBFUztMdTswO0w7Ozs7O047Ozs7MTA0NDU7CisxMDQxRTtERVNFUkVUIENBUElUQUwgTEVUVEVSIFpFRTtMdTswO0w7Ozs7O047Ozs7MTA0NDY7CisxMDQxRjtERVNFUkVUIENBUElUQUwgTEVUVEVSIEVTSDtMdTswO0w7Ozs7O047Ozs7MTA0NDc7CisxMDQyMDtERVNFUkVUIENBUElUQUwgTEVUVEVSIFpIRUU7THU7MDtMOzs7OztOOzs7OzEwNDQ4OworMTA0MjE7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBFUjtMdTswO0w7Ozs7O047Ozs7MTA0NDk7CisxMDQyMjtERVNFUkVUIENBUElUQUwgTEVUVEVSIEVMO0x1OzA7TDs7Ozs7Tjs7OzsxMDQ0QTsKKzEwNDIzO0RFU0VSRVQgQ0FQSVRBTCBMRVRURVIgRU07THU7MDtMOzs7OztOOzs7OzEwNDRCOworMTA0MjQ7REVTRVJFVCBDQVBJVEFMIExFVFRFUiBFTjtMdTswO0w7Ozs7O047Ozs7MTA0NEM7CisxMDQyNTtERVNFUkVUIENBUElUQUwgTEVUVEVSIEVORztMdTswO0w7Ozs7O047Ozs7MTA0NEQ7CisxMDQyODtERVNFUkVUIFNNQUxMIExFVFRFUiBMT05HIEk7TGw7MDtMOzs7OztOOzs7MTA0MDA7OzEwNDAwCisxMDQyOTtERVNFUkVUIFNNQUxMIExFVFRFUiBMT05HIEU7TGw7MDtMOzs7OztOOzs7MTA0MDE7OzEwNDAxCisxMDQyQTtERVNFUkVUIFNNQUxMIExFVFRFUiBMT05HIEE7TGw7MDtMOzs7OztOOzs7MTA0MDI7OzEwNDAyCisxMDQyQjtERVNFUkVUIFNNQUxMIExFVFRFUiBMT05HIEFIO0xsOzA7TDs7Ozs7Tjs7OzEwNDAzOzsxMDQwMworMTA0MkM7REVTRVJFVCBTTUFMTCBMRVRURVIgTE9ORyBPO0xsOzA7TDs7Ozs7Tjs7OzEwNDA0OzsxMDQwNAorMTA0MkQ7REVTRVJFVCBTTUFMTCBMRVRURVIgTE9ORyBPTztMbDswO0w7Ozs7O047OzsxMDQwNTs7MTA0MDUKKzEwNDJFO0RFU0VSRVQgU01BTEwgTEVUVEVSIFNIT1JUIEk7TGw7MDtMOzs7OztOOzs7MTA0MDY7OzEwNDA2CisxMDQyRjtERVNFUkVUIFNNQUxMIExFVFRFUiBTSE9SVCBFO0xsOzA7TDs7Ozs7Tjs7OzEwNDA3OzsxMDQwNworMTA0MzA7REVTRVJFVCBTTUFMTCBMRVRURVIgU0hPUlQgQTtMbDswO0w7Ozs7O047OzsxMDQwODs7MTA0MDgKKzEwNDMxO0RFU0VSRVQgU01BTEwgTEVUVEVSIFNIT1JUIEFIO0xsOzA7TDs7Ozs7Tjs7OzEwNDA5OzsxMDQwOQorMTA0MzI7REVTRVJFVCBTTUFMTCBMRVRURVIgU0hPUlQgTztMbDswO0w7Ozs7O047OzsxMDQwQTs7MTA0MEEKKzEwNDMzO0RFU0VSRVQgU01BTEwgTEVUVEVSIFNIT1JUIE9PO0xsOzA7TDs7Ozs7Tjs7OzEwNDBCOzsxMDQwQgorMTA0MzQ7REVTRVJFVCBTTUFMTCBMRVRURVIgQVk7TGw7MDtMOzs7OztOOzs7MTA0MEM7OzEwNDBDCisxMDQzNTtERVNFUkVUIFNNQUxMIExFVFRFUiBPVztMbDswO0w7Ozs7O047OzsxMDQwRDs7MTA0MEQKKzEwNDM2O0RFU0VSRVQgU01BTEwgTEVUVEVSIFdVO0xsOzA7TDs7Ozs7Tjs7OzEwNDBFOzsxMDQwRQorMTA0Mzc7REVTRVJFVCBTTUFMTCBMRVRURVIgWUVFO0xsOzA7TDs7Ozs7Tjs7OzEwNDBGOzsxMDQwRgorMTA0Mzg7REVTRVJFVCBTTUFMTCBMRVRURVIgSDtMbDswO0w7Ozs7O047OzsxMDQxMDs7MTA0MTAKKzEwNDM5O0RFU0VSRVQgU01BTEwgTEVUVEVSIFBFRTtMbDswO0w7Ozs7O047OzsxMDQxMTs7MTA0MTEKKzEwNDNBO0RFU0VSRVQgU01BTEwgTEVUVEVSIEJFRTtMbDswO0w7Ozs7O047OzsxMDQxMjs7MTA0MTIKKzEwNDNCO0RFU0VSRVQgU01BTEwgTEVUVEVSIFRFRTtMbDswO0w7Ozs7O047OzsxMDQxMzs7MTA0MTMKKzEwNDNDO0RFU0VSRVQgU01BTEwgTEVUVEVSIERFRTtMbDswO0w7Ozs7O047OzsxMDQxNDs7MTA0MTQKKzEwNDNEO0RFU0VSRVQgU01BTEwgTEVUVEVSIENIRUU7TGw7MDtMOzs7OztOOzs7MTA0MTU7OzEwNDE1CisxMDQzRTtERVNFUkVUIFNNQUxMIExFVFRFUiBKRUU7TGw7MDtMOzs7OztOOzs7MTA0MTY7OzEwNDE2CisxMDQzRjtERVNFUkVUIFNNQUxMIExFVFRFUiBLQVk7TGw7MDtMOzs7OztOOzs7MTA0MTc7OzEwNDE3CisxMDQ0MDtERVNFUkVUIFNNQUxMIExFVFRFUiBHQVk7TGw7MDtMOzs7OztOOzs7MTA0MTg7OzEwNDE4CisxMDQ0MTtERVNFUkVUIFNNQUxMIExFVFRFUiBFRjtMbDswO0w7Ozs7O047OzsxMDQxOTs7MTA0MTkKKzEwNDQyO0RFU0VSRVQgU01BTEwgTEVUVEVSIFZFRTtMbDswO0w7Ozs7O047OzsxMDQxQTs7MTA0MUEKKzEwNDQzO0RFU0VSRVQgU01BTEwgTEVUVEVSIEVUSDtMbDswO0w7Ozs7O047OzsxMDQxQjs7MTA0MUIKKzEwNDQ0O0RFU0VSRVQgU01BTEwgTEVUVEVSIFRIRUU7TGw7MDtMOzs7OztOOzs7MTA0MUM7OzEwNDFDCisxMDQ0NTtERVNFUkVUIFNNQUxMIExFVFRFUiBFUztMbDswO0w7Ozs7O047OzsxMDQxRDs7MTA0MUQKKzEwNDQ2O0RFU0VSRVQgU01BTEwgTEVUVEVSIFpFRTtMbDswO0w7Ozs7O047OzsxMDQxRTs7MTA0MUUKKzEwNDQ3O0RFU0VSRVQgU01BTEwgTEVUVEVSIEVTSDtMbDswO0w7Ozs7O047OzsxMDQxRjs7MTA0MUYKKzEwNDQ4O0RFU0VSRVQgU01BTEwgTEVUVEVSIFpIRUU7TGw7MDtMOzs7OztOOzs7MTA0MjA7OzEwNDIwCisxMDQ0OTtERVNFUkVUIFNNQUxMIExFVFRFUiBFUjtMbDswO0w7Ozs7O047OzsxMDQyMTs7MTA0MjEKKzEwNDRBO0RFU0VSRVQgU01BTEwgTEVUVEVSIEVMO0xsOzA7TDs7Ozs7Tjs7OzEwNDIyOzsxMDQyMgorMTA0NEI7REVTRVJFVCBTTUFMTCBMRVRURVIgRU07TGw7MDtMOzs7OztOOzs7MTA0MjM7OzEwNDIzCisxMDQ0QztERVNFUkVUIFNNQUxMIExFVFRFUiBFTjtMbDswO0w7Ozs7O047OzsxMDQyNDs7MTA0MjQKKzEwNDREO0RFU0VSRVQgU01BTEwgTEVUVEVSIEVORztMbDswO0w7Ozs7O047OzsxMDQyNTs7MTA0MjUKKzFEMDAwO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBQU0lMSTtTbzswO0w7Ozs7O047Ozs7OworMUQwMDE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIERBU0VJQTtTbzswO0w7Ozs7O047Ozs7OworMUQwMDI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFBFUklTUE9NRU5JO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAwMztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgT1hFSUEgRUtGT05JVElLT047U287MDtMOzs7OztOOzs7OzsKKzFEMDA0O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBPWEVJQSBESVBMSTtTbzswO0w7Ozs7O047Ozs7OworMUQwMDU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFZBUkVJQSBFS0ZPTklUSUtPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwMDY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFZBUkVJQSBESVBMSTtTbzswO0w7Ozs7O047Ozs7OworMUQwMDc7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtBVEhJU1RJO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAwODtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgU1lSTUFUSUtJO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAwOTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUEFSQUtMSVRJS0k7U287MDtMOzs7OztOOzs7OzsKKzFEMDBBO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBZUE9LUklTSVM7U287MDtMOzs7OztOOzs7OzsKKzFEMDBCO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBZUE9LUklTSVMgRElQTEk7U287MDtMOzs7OztOOzs7OzsKKzFEMDBDO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLUkVNQVNUSTtTbzswO0w7Ozs7O047Ozs7OworMUQwMEQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFQRVNPIEVLRk9OSVRJS09OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAwRTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRVhPIEVLRk9OSVRJS09OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAwRjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVEVMRUlBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAxMDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS0VOVElNQVRBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAxMTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQVBPU1RST0ZPUztTbzswO0w7Ozs7O047Ozs7OworMUQwMTI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFQT1NUUk9GT1MgRElQTEk7U287MDtMOzs7OztOOzs7OzsKKzFEMDEzO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBTWU5FVk1BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAxNDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVEhJVEE7U287MDtMOzs7OztOOzs7OzsKKzFEMDE1O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBPTElHT04gQVJDSEFJT047U287MDtMOzs7OztOOzs7OzsKKzFEMDE2O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBHT1JHT04gQVJDSEFJT047U287MDtMOzs7OztOOzs7OzsKKzFEMDE3O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBQU0lMT047U287MDtMOzs7OztOOzs7OzsKKzFEMDE4O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBDSEFNSUxPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwMTk7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFZBVEhZO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAxQTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgSVNPTiBBUkNIQUlPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwMUI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtFTlRJTUEgQVJDSEFJT047U287MDtMOzs7OztOOzs7OzsKKzFEMDFDO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLRU5USU1BVEEgQVJDSEFJT047U287MDtMOzs7OztOOzs7OzsKKzFEMDFEO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBTQVhJTUFUQTtTbzswO0w7Ozs7O047Ozs7OworMUQwMUU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFBBUklDSE9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAxRjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgU1RBVlJPUyBBUE9ERVhJQTtTbzswO0w7Ozs7O047Ozs7OworMUQwMjA7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE9YRUlBSSBBUkNIQUlPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwMjE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFZBUkVJQUkgQVJDSEFJT047U287MDtMOzs7OztOOzs7OzsKKzFEMDIyO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBBUE9ERVJNQSBBUkNIQUlPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwMjM7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFQT1RIRU1BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAyNDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS0xBU01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAyNTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUkVWTUE7U287MDtMOzs7OztOOzs7OzsKKzFEMDI2O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBQSUFTTUEgQVJDSEFJT047U287MDtMOzs7OztOOzs7OzsKKzFEMDI3O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBUSU5BR01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAyODtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQU5BVFJJQ0hJU01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAyOTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgU0VJU01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAyQTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgU1lOQUdNQSBBUkNIQUlPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwMkI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFNZTkFHTUEgTUVUQSBTVEFWUk9VO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAyQztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgT1lSQU5JU01BIEFSQ0hBSU9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAyRDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVEhFTUE7U287MDtMOzs7OztOOzs7OzsKKzFEMDJFO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBMRU1PSTtTbzswO0w7Ozs7O047Ozs7OworMUQwMkY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIERZTztTbzswO0w7Ozs7O047Ozs7OworMUQwMzA7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFRSSUE7U287MDtMOzs7OztOOzs7OzsKKzFEMDMxO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBURVNTRVJBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAzMjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS1JBVElNQVRBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAzMztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQVBFU08gRVhPIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwMzQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBBUkNIQUlPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwMzU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIElNSUZUSE9SQTtTbzswO0w7Ozs7O047Ozs7OworMUQwMzY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFRST01JS09OIEFSQ0hBSU9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAzNztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS0FUQVZBIFRST01JS09OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAzODtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUEVMQVNUT047U287MDtMOzs7OztOOzs7OzsKKzFEMDM5O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBQU0lGSVNUT047U287MDtMOzs7OztOOzs7OzsKKzFEMDNBO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLT05URVZNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwM0I7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIENIT1JFVk1BIEFSQ0hBSU9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAzQztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUkFQSVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwM0Q7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFBBUkFLQUxFU01BIEFSQ0hBSU9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDAzRTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUEFSQUtMSVRJS0kgQVJDSEFJT047U287MDtMOzs7OztOOzs7OzsKKzFEMDNGO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBJQ0hBRElOO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA0MDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgTkFOQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNDE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFBFVEFTTUE7U287MDtMOzs7OztOOzs7OzsKKzFEMDQyO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLT05URVZNQSBBTExPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA0MztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVFJPTUlLT04gQUxMTztTbzswO0w7Ozs7O047Ozs7OworMUQwNDQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFNUUkFHR0lTTUFUQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNDU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEdST05USElTTUFUQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNDY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIElTT04gTkVPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA0NztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgT0xJR09OIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwNDg7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE9YRUlBIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwNDk7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFBFVEFTVEk7U287MDtMOzs7OztOOzs7OzsKKzFEMDRBO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLT1VGSVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNEI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFBFVEFTVE9LT1VGSVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNEM7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtSQVRJTU9LT1VGSVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNEQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFBFTEFTVE9OIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwNEU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtFTlRJTUFUQSBORU8gQU5PO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA0RjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS0VOVElNQSBORU8gQU5PO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA1MDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgWVBTSUxJO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA1MTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQVBPU1RST0ZPUyBORU87U287MDtMOzs7OztOOzs7OzsKKzFEMDUyO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBBUE9TVFJPRk9JIFNZTkRFU01PUyBORU87U287MDtMOzs7OztOOzs7OzsKKzFEMDUzO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBZUE9SUk9JO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA1NDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS1JBVElNT1lQT1JST09OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA1NTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRUxBRlJPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwNTY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIENIQU1JTEk7U287MDtMOzs7OztOOzs7OzsKKzFEMDU3O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBNSUtST04gSVNPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwNTg7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFZBUkVJQSBORU87U287MDtMOzs7OztOOzs7OzsKKzFEMDU5O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBQSUFTTUEgTkVPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA1QTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUFNJRklTVE9OIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwNUI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE9NQUxPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwNUM7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFOVElLRU5PTUE7U287MDtMOzs7OztOOzs7OzsKKzFEMDVEO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBMWUdJU01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA1RTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUEFSQUtMSVRJS0kgTkVPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA1RjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUEFSQUtBTEVTTUEgTkVPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA2MDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRVRFUk9OIFBBUkFLQUxFU01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA2MTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS1lMSVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNjI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFOVElLRU5PS1lMSVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNjM7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFRST01JS09OIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwNjQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEVLU1RSRVBUT047U287MDtMOzs7OztOOzs7OzsKKzFEMDY1O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBTWU5BR01BIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwNjY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFNZUk1BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA2NztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQ0hPUkVWTUEgTkVPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA2ODtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRVBFR0VSTUE7U287MDtMOzs7OztOOzs7OzsKKzFEMDY5O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBTRUlTTUEgTkVPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA2QTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgWElST04gS0xBU01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA2QjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVFJPTUlLT1BTSUZJU1RPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwNkM7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFBTSUZJU1RPTFlHSVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNkQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFRST01JS09MWUdJU01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA2RTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVFJPTUlLT1BBUkFLQUxFU01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA2RjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUFNJRklTVE9QQVJBS0FMRVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwNzA7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFRST01JS09TWU5BR01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA3MTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgUFNJRklTVE9TWU5BR01BO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA3MjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgR09SR09TWU5USEVUT047U287MDtMOzs7OztOOzs7OzsKKzFEMDczO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBBUkdPU1lOVEhFVE9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA3NDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRVRFUk9OIEFSR09TWU5USEVUT047U287MDtMOzs7OztOOzs7OzsKKzFEMDc1O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBPWVJBTklTTUEgTkVPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA3NjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVEhFTUFUSVNNT1MgRVNPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA3NztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVEhFTUFUSVNNT1MgRVhPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA3ODtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVEhFTUEgQVBMT1VOO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA3OTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVEhFUyBLQUkgQVBPVEhFUztTbzswO0w7Ozs7O047Ozs7OworMUQwN0E7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtBVEFWQVNNQTtTbzswO0w7Ozs7O047Ozs7OworMUQwN0I7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEVORE9GT05PTjtTbzswO0w7Ozs7O047Ozs7OworMUQwN0M7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFlGRU4gS0FUTztTbzswO0w7Ozs7O047Ozs7OworMUQwN0Q7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFlGRU4gQU5PO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA3RTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgU1RBVlJPUztTbzswO0w7Ozs7O047Ozs7OworMUQwN0Y7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtMQVNNQSBBTk87U287MDtMOzs7OztOOzs7OzsKKzFEMDgwO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBESVBMSSBBUkNIQUlPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwODE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtSQVRJTUEgQVJDSEFJT047U287MDtMOzs7OztOOzs7OzsKKzFEMDgyO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLUkFUSU1BIEFMTE87U287MDtMOzs7OztOOzs7OzsKKzFEMDgzO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLUkFUSU1BIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwODQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFQT0RFUk1BIE5FTztTbzswO0w7Ozs7O047Ozs7OworMUQwODU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFQTEk7U287MDtMOzs7OztOOzs7OzsKKzFEMDg2O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBESVBMSTtTbzswO0w7Ozs7O047Ozs7OworMUQwODc7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFRSSVBMSTtTbzswO0w7Ozs7O047Ozs7OworMUQwODg7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFRFVFJBUExJO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA4OTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS09ST05JUztTbzswO0w7Ozs7O047Ozs7OworMUQwOEE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIExFSU1NQSBFTk9TIENIUk9OT1U7U287MDtMOzs7OztOOzs7OzsKKzFEMDhCO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBMRUlNTUEgRFlPIENIUk9OT047U287MDtMOzs7OztOOzs7OzsKKzFEMDhDO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBMRUlNTUEgVFJJT04gQ0hST05PTjtTbzswO0w7Ozs7O047Ozs7OworMUQwOEQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIExFSU1NQSBURVNTQVJPTiBDSFJPTk9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA4RTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgTEVJTU1BIElNSVNFT1MgQ0hST05PVTtTbzswO0w7Ozs7O047Ozs7OworMUQwOEY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEdPUkdPTiBORU8gQU5PO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA5MDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgR09SR09OIFBBUkVTVElHTUVOT04gQVJJU1RFUkE7U287MDtMOzs7OztOOzs7OzsKKzFEMDkxO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBHT1JHT04gUEFSRVNUSUdNRU5PTiBERVhJQTtTbzswO0w7Ozs7O047Ozs7OworMUQwOTI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIERJR09SR09OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA5MztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRElHT1JHT04gUEFSRVNUSUdNRU5PTiBBUklTVEVSQSBLQVRPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA5NDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRElHT1JHT04gUEFSRVNUSUdNRU5PTiBBUklTVEVSQSBBTk87U287MDtMOzs7OztOOzs7OzsKKzFEMDk1O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBESUdPUkdPTiBQQVJFU1RJR01FTk9OIERFWElBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA5NjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgVFJJR09SR09OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA5NztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQVJHT047U287MDtMOzs7OztOOzs7OzsKKzFEMDk4O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBJTUlESUFSR09OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA5OTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRElBUkdPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwOUE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFHT0dJIFBPTEkgQVJHSTtTbzswO0w7Ozs7O047Ozs7OworMUQwOUI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFHT0dJIEFSR09URVJJO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDA5QztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQUdPR0kgQVJHSTtTbzswO0w7Ozs7O047Ozs7OworMUQwOUQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFHT0dJIE1FVFJJQTtTbzswO0w7Ozs7O047Ozs7OworMUQwOUU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFHT0dJIE1FU0k7U287MDtMOzs7OztOOzs7OzsKKzFEMDlGO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBBR09HSSBHT1JHSTtTbzswO0w7Ozs7O047Ozs7OworMUQwQTA7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFHT0dJIEdPUkdPVEVSSTtTbzswO0w7Ozs7O047Ozs7OworMUQwQTE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFHT0dJIFBPTEkgR09SR0k7U287MDtMOzs7OztOOzs7OzsKKzFEMEEyO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBNQVJUWVJJQSBQUk9UT1MgSUNIT1M7U287MDtMOzs7OztOOzs7OzsKKzFEMEEzO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBNQVJUWVJJQSBBTExJIFBST1RPUyBJQ0hPUztTbzswO0w7Ozs7O047Ozs7OworMUQwQTQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE1BUlRZUklBIERFWVRFUk9TIElDSE9TO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBBNTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgTUFSVFlSSUEgQUxMSSBERVlURVJPUyBJQ0hPUztTbzswO0w7Ozs7O047Ozs7OworMUQwQTY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE1BUlRZUklBIFRSSVRPUyBJQ0hPUztTbzswO0w7Ozs7O047Ozs7OworMUQwQTc7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE1BUlRZUklBIFRSSUZPTklBUztTbzswO0w7Ozs7O047Ozs7OworMUQwQTg7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE1BUlRZUklBIFRFVEFSVE9TIElDSE9TO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBBOTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgTUFSVFlSSUEgVEVUQVJUT1MgTEVHRVRPUyBJQ0hPUztTbzswO0w7Ozs7O047Ozs7OworMUQwQUE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE1BUlRZUklBIExFR0VUT1MgSUNIT1M7U287MDtMOzs7OztOOzs7OzsKKzFEMEFCO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBNQVJUWVJJQSBQTEFHSU9TIElDSE9TO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBBQztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgSVNBS0lBIFRFTE9VUyBJQ0hJTUFUT1M7U287MDtMOzs7OztOOzs7OzsKKzFEMEFEO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBBUE9TVFJPRk9JIFRFTE9VUyBJQ0hJTUFUT1M7U287MDtMOzs7OztOOzs7OzsKKzFEMEFFO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBGQU5FUk9TSVMgVEVUUkFGT05JQVM7U287MDtMOzs7OztOOzs7OzsKKzFEMEFGO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBGQU5FUk9TSVMgTU9OT0ZPTklBUztTbzswO0w7Ozs7O047Ozs7OworMUQwQjA7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZBTkVST1NJUyBESUZPTklBUztTbzswO0w7Ozs7O047Ozs7OworMUQwQjE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE1BUlRZUklBIFZBUllTIElDSE9TO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBCMjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgTUFSVFlSSUEgUFJPVE9WQVJZUyBJQ0hPUztTbzswO0w7Ozs7O047Ozs7OworMUQwQjM7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIE1BUlRZUklBIFBMQUdJT1MgVEVUQVJUT1MgSUNIT1M7U287MDtMOzs7OztOOzs7OzsKKzFEMEI0O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBHT1JUSE1JS09OIE4gQVBMT1VOO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBCNTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgR09SVEhNSUtPTiBOIERJUExPVU47U287MDtMOzs7OztOOzs7OzsKKzFEMEI2O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBFTkFSWElTIEtBSSBGVEhPUkEgVk9VO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBCNztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgSU1JRk9OT047U287MDtMOzs7OztOOzs7OzsKKzFEMEI4O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBJTUlGVEhPUk9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBCOTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRlRIT1JBIEFSQ0hBSU9OIERFWVRFUk9VIElDSE9VO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBCQTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRlRIT1JBIERJQVRPTklLSSBQQTtTbzswO0w7Ozs7O047Ozs7OworMUQwQkI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBESUFUT05JS0kgTkFOQTtTbzswO0w7Ozs7O047Ozs7OworMUQwQkM7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBOQU9TIElDSE9TO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBCRDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRlRIT1JBIERJQVRPTklLSSBESTtTbzswO0w7Ozs7O047Ozs7OworMUQwQkU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBTS0xJUk9OIERJQVRPTk9OIERJO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBCRjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRlRIT1JBIERJQVRPTklLSSBLRTtTbzswO0w7Ozs7O047Ozs7OworMUQwQzA7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBESUFUT05JS0kgWk87U287MDtMOzs7OztOOzs7OzsKKzFEMEMxO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBGVEhPUkEgRElBVE9OSUtJIE5JIEtBVE87U287MDtMOzs7OztOOzs7OzsKKzFEMEMyO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBGVEhPUkEgRElBVE9OSUtJIE5JIEFOTztTbzswO0w7Ozs7O047Ozs7OworMUQwQzM7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBNQUxBS09OIENIUk9NQSBESUZPTklBUztTbzswO0w7Ozs7O047Ozs7OworMUQwQzQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBNQUxBS09OIENIUk9NQSBNT05PRk9OSUFTO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBDNTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRkhUT1JBIFNLTElST04gQ0hST01BIFZBU0lTO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBDNjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRlRIT1JBIFNLTElST04gQ0hST01BIFNZTkFGSTtTbzswO0w7Ozs7O047Ozs7OworMUQwQzc7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBORU5BTk87U287MDtMOzs7OztOOzs7OzsKKzFEMEM4O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBDSFJPQSBaWUdPUztTbzswO0w7Ozs7O047Ozs7OworMUQwQzk7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIENIUk9BIEtMSVRPTjtTbzswO0w7Ozs7O047Ozs7OworMUQwQ0E7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIENIUk9BIFNQQVRISTtTbzswO0w7Ozs7O047Ozs7OworMUQwQ0I7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEZUSE9SQSBJIFlGRVNJUyBURVRBUlRJTU9SSU9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBDQztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRlRIT1JBIEVOQVJNT05JT1MgQU5USUZPTklBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBDRDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgWUZFU0lTIFRSSVRJTU9SSU9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBDRTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRElFU0lTIFRSSVRJTU9SSU9OO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBDRjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRElFU0lTIFRFVEFSVElNT1JJT047U287MDtMOzs7OztOOzs7OzsKKzFEMEQwO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBESUVTSVMgQVBMSSBEWU8gRE9ERUtBVEE7U287MDtMOzs7OztOOzs7OzsKKzFEMEQxO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBESUVTSVMgTU9OT0dSQU1NT1MgVEVTU0VSQSBET0RFS0FUQTtTbzswO0w7Ozs7O047Ozs7OworMUQwRDI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIERJRVNJUyBESUdSQU1NT1MgRVggRE9ERUtBVEE7U287MDtMOzs7OztOOzs7OzsKKzFEMEQzO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBESUVTSVMgVFJJR1JBTU1PUyBPS1RPIERPREVLQVRBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBENDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgWUZFU0lTIEFQTEkgRFlPIERPREVLQVRBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBENTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgWUZFU0lTIE1PTk9HUkFNTU9TIFRFU1NFUkEgRE9ERUtBVEE7U287MDtMOzs7OztOOzs7OzsKKzFEMEQ2O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBZRkVTSVMgRElHUkFNTU9TIEVYIERPREVLQVRBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBENztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgWUZFU0lTIFRSSUdSQU1NT1MgT0tUTyBET0RFS0FUQTtTbzswO0w7Ozs7O047Ozs7OworMUQwRDg7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEdFTklLSSBESUVTSVM7U287MDtMOzs7OztOOzs7OzsKKzFEMEQ5O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBHRU5JS0kgWUZFU0lTO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBEQTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRElBU1RPTEkgQVBMSSBNSUtSSTtTbzswO0w7Ozs7O047Ozs7OworMUQwREI7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIERJQVNUT0xJIEFQTEkgTUVHQUxJO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBEQztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRElBU1RPTEkgRElQTEk7U287MDtMOzs7OztOOzs7OzsKKzFEMEREO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBESUFTVE9MSSBUSEVTRU9TO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBERTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgU0lNQU5TSVMgVEhFU0VPUztTbzswO0w7Ozs7O047Ozs7OworMUQwREY7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFNJTUFOU0lTIFRIRVNFT1MgRElTSU1PVTtTbzswO0w7Ozs7O047Ozs7OworMUQwRTA7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFNJTUFOU0lTIFRIRVNFT1MgVFJJU0lNT1U7U287MDtMOzs7OztOOzs7OzsKKzFEMEUxO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBTSU1BTlNJUyBUSEVTRU9TIFRFVFJBU0lNT1U7U287MDtMOzs7OztOOzs7OzsKKzFEMEUyO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBTSU1BTlNJUyBBUlNFT1M7U287MDtMOzs7OztOOzs7OzsKKzFEMEUzO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBTSU1BTlNJUyBBUlNFT1MgRElTSU1PVTtTbzswO0w7Ozs7O047Ozs7OworMUQwRTQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFNJTUFOU0lTIEFSU0VPUyBUUklTSU1PVTtTbzswO0w7Ozs7O047Ozs7OworMUQwRTU7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIFNJTUFOU0lTIEFSU0VPUyBURVRSQVNJTU9VO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBFNjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgRElHUkFNTUEgR0c7U287MDtMOzs7OztOOzs7OzsKKzFEMEU3O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBESUZUT0dHT1MgT1U7U287MDtMOzs7OztOOzs7OzsKKzFEMEU4O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBTVElHTUE7U287MDtMOzs7OztOOzs7OzsKKzFEMEU5O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBBUktUSUtPIFBBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBFQTtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQVJLVElLTyBWT1U7U287MDtMOzs7OztOOzs7OzsKKzFEMEVCO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBBUktUSUtPIEdBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBFQztCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQVJLVElLTyBESTtTbzswO0w7Ozs7O047Ozs7OworMUQwRUQ7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEFSS1RJS08gS0U7U287MDtMOzs7OztOOzs7OzsKKzFEMEVFO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBBUktUSUtPIFpPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBFRjtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgQVJLVElLTyBOSTtTbzswO0w7Ozs7O047Ozs7OworMUQwRjA7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtFTlRJTUFUQSBORU8gTUVTTztTbzswO0w7Ozs7O047Ozs7OworMUQwRjE7QllaQU5USU5FIE1VU0lDQUwgU1lNQk9MIEtFTlRJTUEgTkVPIE1FU087U287MDtMOzs7OztOOzs7OzsKKzFEMEYyO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLRU5USU1BVEEgTkVPIEtBVE87U287MDtMOzs7OztOOzs7OzsKKzFEMEYzO0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBLRU5USU1BIE5FTyBLQVRPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDBGNDtCWVpBTlRJTkUgTVVTSUNBTCBTWU1CT0wgS0xBU01BIEtBVE87U287MDtMOzs7OztOOzs7OzsKKzFEMEY1O0JZWkFOVElORSBNVVNJQ0FMIFNZTUJPTCBHT1JHT04gTkVPIEtBVE87U287MDtMOzs7OztOOzs7OzsKKzFEMTAwO01VU0lDQUwgU1lNQk9MIFNJTkdMRSBCQVJMSU5FO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEwMTtNVVNJQ0FMIFNZTUJPTCBET1VCTEUgQkFSTElORTtTbzswO0w7Ozs7O047Ozs7OworMUQxMDI7TVVTSUNBTCBTWU1CT0wgRklOQUwgQkFSTElORTtTbzswO0w7Ozs7O047Ozs7OworMUQxMDM7TVVTSUNBTCBTWU1CT0wgUkVWRVJTRSBGSU5BTCBCQVJMSU5FO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEwNDtNVVNJQ0FMIFNZTUJPTCBEQVNIRUQgQkFSTElORTtTbzswO0w7Ozs7O047Ozs7OworMUQxMDU7TVVTSUNBTCBTWU1CT0wgU0hPUlQgQkFSTElORTtTbzswO0w7Ozs7O047Ozs7OworMUQxMDY7TVVTSUNBTCBTWU1CT0wgTEVGVCBSRVBFQVQgU0lHTjtTbzswO0w7Ozs7O047Ozs7OworMUQxMDc7TVVTSUNBTCBTWU1CT0wgUklHSFQgUkVQRUFUIFNJR047U287MDtMOzs7OztOOzs7OzsKKzFEMTA4O01VU0lDQUwgU1lNQk9MIFJFUEVBVCBET1RTO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEwOTtNVVNJQ0FMIFNZTUJPTCBEQUwgU0VHTk87U287MDtMOzs7OztOOzs7OzsKKzFEMTBBO01VU0lDQUwgU1lNQk9MIERBIENBUE87U287MDtMOzs7OztOOzs7OzsKKzFEMTBCO01VU0lDQUwgU1lNQk9MIFNFR05PO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEwQztNVVNJQ0FMIFNZTUJPTCBDT0RBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEwRDtNVVNJQ0FMIFNZTUJPTCBSRVBFQVRFRCBGSUdVUkUtMTtTbzswO0w7Ozs7O047Ozs7OworMUQxMEU7TVVTSUNBTCBTWU1CT0wgUkVQRUFURUQgRklHVVJFLTI7U287MDtMOzs7OztOOzs7OzsKKzFEMTBGO01VU0lDQUwgU1lNQk9MIFJFUEVBVEVEIEZJR1VSRS0zO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDExMDtNVVNJQ0FMIFNZTUJPTCBGRVJNQVRBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDExMTtNVVNJQ0FMIFNZTUJPTCBGRVJNQVRBIEJFTE9XO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDExMjtNVVNJQ0FMIFNZTUJPTCBCUkVBVEggTUFSSztTbzswO0w7Ozs7O047Ozs7OworMUQxMTM7TVVTSUNBTCBTWU1CT0wgQ0FFU1VSQTtTbzswO0w7Ozs7O047Ozs7OworMUQxMTQ7TVVTSUNBTCBTWU1CT0wgQlJBQ0U7U287MDtMOzs7OztOOzs7OzsKKzFEMTE1O01VU0lDQUwgU1lNQk9MIEJSQUNLRVQ7U287MDtMOzs7OztOOzs7OzsKKzFEMTE2O01VU0lDQUwgU1lNQk9MIE9ORS1MSU5FIFNUQUZGO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDExNztNVVNJQ0FMIFNZTUJPTCBUV08tTElORSBTVEFGRjtTbzswO0w7Ozs7O047Ozs7OworMUQxMTg7TVVTSUNBTCBTWU1CT0wgVEhSRUUtTElORSBTVEFGRjtTbzswO0w7Ozs7O047Ozs7OworMUQxMTk7TVVTSUNBTCBTWU1CT0wgRk9VUi1MSU5FIFNUQUZGO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDExQTtNVVNJQ0FMIFNZTUJPTCBGSVZFLUxJTkUgU1RBRkY7U287MDtMOzs7OztOOzs7OzsKKzFEMTFCO01VU0lDQUwgU1lNQk9MIFNJWC1MSU5FIFNUQUZGO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDExQztNVVNJQ0FMIFNZTUJPTCBTSVgtU1RSSU5HIEZSRVRCT0FSRDtTbzswO0w7Ozs7O047Ozs7OworMUQxMUQ7TVVTSUNBTCBTWU1CT0wgRk9VUi1TVFJJTkcgRlJFVEJPQVJEO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDExRTtNVVNJQ0FMIFNZTUJPTCBHIENMRUY7U287MDtMOzs7OztOOzs7OzsKKzFEMTFGO01VU0lDQUwgU1lNQk9MIEcgQ0xFRiBPVFRBVkEgQUxUQTtTbzswO0w7Ozs7O047Ozs7OworMUQxMjA7TVVTSUNBTCBTWU1CT0wgRyBDTEVGIE9UVEFWQSBCQVNTQTtTbzswO0w7Ozs7O047Ozs7OworMUQxMjE7TVVTSUNBTCBTWU1CT0wgQyBDTEVGO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEyMjtNVVNJQ0FMIFNZTUJPTCBGIENMRUY7U287MDtMOzs7OztOOzs7OzsKKzFEMTIzO01VU0lDQUwgU1lNQk9MIEYgQ0xFRiBPVFRBVkEgQUxUQTtTbzswO0w7Ozs7O047Ozs7OworMUQxMjQ7TVVTSUNBTCBTWU1CT0wgRiBDTEVGIE9UVEFWQSBCQVNTQTtTbzswO0w7Ozs7O047Ozs7OworMUQxMjU7TVVTSUNBTCBTWU1CT0wgRFJVTSBDTEVGLTE7U287MDtMOzs7OztOOzs7OzsKKzFEMTI2O01VU0lDQUwgU1lNQk9MIERSVU0gQ0xFRi0yO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEyQTtNVVNJQ0FMIFNZTUJPTCBET1VCTEUgU0hBUlA7U287MDtMOzs7OztOOzs7OzsKKzFEMTJCO01VU0lDQUwgU1lNQk9MIERPVUJMRSBGTEFUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEyQztNVVNJQ0FMIFNZTUJPTCBGTEFUIFVQO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEyRDtNVVNJQ0FMIFNZTUJPTCBGTEFUIERPV047U287MDtMOzs7OztOOzs7OzsKKzFEMTJFO01VU0lDQUwgU1lNQk9MIE5BVFVSQUwgVVA7U287MDtMOzs7OztOOzs7OzsKKzFEMTJGO01VU0lDQUwgU1lNQk9MIE5BVFVSQUwgRE9XTjtTbzswO0w7Ozs7O047Ozs7OworMUQxMzA7TVVTSUNBTCBTWU1CT0wgU0hBUlAgVVA7U287MDtMOzs7OztOOzs7OzsKKzFEMTMxO01VU0lDQUwgU1lNQk9MIFNIQVJQIERPV047U287MDtMOzs7OztOOzs7OzsKKzFEMTMyO01VU0lDQUwgU1lNQk9MIFFVQVJURVIgVE9ORSBTSEFSUDtTbzswO0w7Ozs7O047Ozs7OworMUQxMzM7TVVTSUNBTCBTWU1CT0wgUVVBUlRFUiBUT05FIEZMQVQ7U287MDtMOzs7OztOOzs7OzsKKzFEMTM0O01VU0lDQUwgU1lNQk9MIENPTU1PTiBUSU1FO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEzNTtNVVNJQ0FMIFNZTUJPTCBDVVQgVElNRTtTbzswO0w7Ozs7O047Ozs7OworMUQxMzY7TVVTSUNBTCBTWU1CT0wgT1RUQVZBIEFMVEE7U287MDtMOzs7OztOOzs7OzsKKzFEMTM3O01VU0lDQUwgU1lNQk9MIE9UVEFWQSBCQVNTQTtTbzswO0w7Ozs7O047Ozs7OworMUQxMzg7TVVTSUNBTCBTWU1CT0wgUVVJTkRJQ0VTSU1BIEFMVEE7U287MDtMOzs7OztOOzs7OzsKKzFEMTM5O01VU0lDQUwgU1lNQk9MIFFVSU5ESUNFU0lNQSBCQVNTQTtTbzswO0w7Ozs7O047Ozs7OworMUQxM0E7TVVTSUNBTCBTWU1CT0wgTVVMVEkgUkVTVDtTbzswO0w7Ozs7O047Ozs7OworMUQxM0I7TVVTSUNBTCBTWU1CT0wgV0hPTEUgUkVTVDtTbzswO0w7Ozs7O047Ozs7OworMUQxM0M7TVVTSUNBTCBTWU1CT0wgSEFMRiBSRVNUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEzRDtNVVNJQ0FMIFNZTUJPTCBRVUFSVEVSIFJFU1Q7U287MDtMOzs7OztOOzs7OzsKKzFEMTNFO01VU0lDQUwgU1lNQk9MIEVJR0hUSCBSRVNUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDEzRjtNVVNJQ0FMIFNZTUJPTCBTSVhURUVOVEggUkVTVDtTbzswO0w7Ozs7O047Ozs7OworMUQxNDA7TVVTSUNBTCBTWU1CT0wgVEhJUlRZLVNFQ09ORCBSRVNUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE0MTtNVVNJQ0FMIFNZTUJPTCBTSVhUWS1GT1VSVEggUkVTVDtTbzswO0w7Ozs7O047Ozs7OworMUQxNDI7TVVTSUNBTCBTWU1CT0wgT05FIEhVTkRSRUQgVFdFTlRZLUVJR0hUSCBSRVNUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE0MztNVVNJQ0FMIFNZTUJPTCBYIE5PVEVIRUFEO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE0NDtNVVNJQ0FMIFNZTUJPTCBQTFVTIE5PVEVIRUFEO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE0NTtNVVNJQ0FMIFNZTUJPTCBDSVJDTEUgWCBOT1RFSEVBRDtTbzswO0w7Ozs7O047Ozs7OworMUQxNDY7TVVTSUNBTCBTWU1CT0wgU1FVQVJFIE5PVEVIRUFEIFdISVRFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE0NztNVVNJQ0FMIFNZTUJPTCBTUVVBUkUgTk9URUhFQUQgQkxBQ0s7U287MDtMOzs7OztOOzs7OzsKKzFEMTQ4O01VU0lDQUwgU1lNQk9MIFRSSUFOR0xFIE5PVEVIRUFEIFVQIFdISVRFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE0OTtNVVNJQ0FMIFNZTUJPTCBUUklBTkdMRSBOT1RFSEVBRCBVUCBCTEFDSztTbzswO0w7Ozs7O047Ozs7OworMUQxNEE7TVVTSUNBTCBTWU1CT0wgVFJJQU5HTEUgTk9URUhFQUQgTEVGVCBXSElURTtTbzswO0w7Ozs7O047Ozs7OworMUQxNEI7TVVTSUNBTCBTWU1CT0wgVFJJQU5HTEUgTk9URUhFQUQgTEVGVCBCTEFDSztTbzswO0w7Ozs7O047Ozs7OworMUQxNEM7TVVTSUNBTCBTWU1CT0wgVFJJQU5HTEUgTk9URUhFQUQgUklHSFQgV0hJVEU7U287MDtMOzs7OztOOzs7OzsKKzFEMTREO01VU0lDQUwgU1lNQk9MIFRSSUFOR0xFIE5PVEVIRUFEIFJJR0hUIEJMQUNLO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE0RTtNVVNJQ0FMIFNZTUJPTCBUUklBTkdMRSBOT1RFSEVBRCBET1dOIFdISVRFO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE0RjtNVVNJQ0FMIFNZTUJPTCBUUklBTkdMRSBOT1RFSEVBRCBET1dOIEJMQUNLO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE1MDtNVVNJQ0FMIFNZTUJPTCBUUklBTkdMRSBOT1RFSEVBRCBVUCBSSUdIVCBXSElURTtTbzswO0w7Ozs7O047Ozs7OworMUQxNTE7TVVTSUNBTCBTWU1CT0wgVFJJQU5HTEUgTk9URUhFQUQgVVAgUklHSFQgQkxBQ0s7U287MDtMOzs7OztOOzs7OzsKKzFEMTUyO01VU0lDQUwgU1lNQk9MIE1PT04gTk9URUhFQUQgV0hJVEU7U287MDtMOzs7OztOOzs7OzsKKzFEMTUzO01VU0lDQUwgU1lNQk9MIE1PT04gTk9URUhFQUQgQkxBQ0s7U287MDtMOzs7OztOOzs7OzsKKzFEMTU0O01VU0lDQUwgU1lNQk9MIFRSSUFOR0xFLVJPVU5EIE5PVEVIRUFEIERPV04gV0hJVEU7U287MDtMOzs7OztOOzs7OzsKKzFEMTU1O01VU0lDQUwgU1lNQk9MIFRSSUFOR0xFLVJPVU5EIE5PVEVIRUFEIERPV04gQkxBQ0s7U287MDtMOzs7OztOOzs7OzsKKzFEMTU2O01VU0lDQUwgU1lNQk9MIFBBUkVOVEhFU0lTIE5PVEVIRUFEO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE1NztNVVNJQ0FMIFNZTUJPTCBWT0lEIE5PVEVIRUFEO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE1ODtNVVNJQ0FMIFNZTUJPTCBOT1RFSEVBRCBCTEFDSztTbzswO0w7Ozs7O047Ozs7OworMUQxNTk7TVVTSUNBTCBTWU1CT0wgTlVMTCBOT1RFSEVBRDtTbzswO0w7Ozs7O047Ozs7OworMUQxNUE7TVVTSUNBTCBTWU1CT0wgQ0xVU1RFUiBOT1RFSEVBRCBXSElURTtTbzswO0w7Ozs7O047Ozs7OworMUQxNUI7TVVTSUNBTCBTWU1CT0wgQ0xVU1RFUiBOT1RFSEVBRCBCTEFDSztTbzswO0w7Ozs7O047Ozs7OworMUQxNUM7TVVTSUNBTCBTWU1CT0wgQlJFVkU7U287MDtMOzs7OztOOzs7OzsKKzFEMTVEO01VU0lDQUwgU1lNQk9MIFdIT0xFIE5PVEU7U287MDtMOzs7OztOOzs7OzsKKzFEMTVFO01VU0lDQUwgU1lNQk9MIEhBTEYgTk9URTtTbzswO0w7MUQxNTcgMUQxNjU7Ozs7Tjs7Ozs7CisxRDE1RjtNVVNJQ0FMIFNZTUJPTCBRVUFSVEVSIE5PVEU7U287MDtMOzFEMTU4IDFEMTY1Ozs7O047Ozs7OworMUQxNjA7TVVTSUNBTCBTWU1CT0wgRUlHSFRIIE5PVEU7U287MDtMOzFEMTVGIDFEMTZFOzs7O047Ozs7OworMUQxNjE7TVVTSUNBTCBTWU1CT0wgU0lYVEVFTlRIIE5PVEU7U287MDtMOzFEMTVGIDFEMTZGOzs7O047Ozs7OworMUQxNjI7TVVTSUNBTCBTWU1CT0wgVEhJUlRZLVNFQ09ORCBOT1RFO1NvOzA7TDsxRDE1RiAxRDE3MDs7OztOOzs7OzsKKzFEMTYzO01VU0lDQUwgU1lNQk9MIFNJWFRZLUZPVVJUSCBOT1RFO1NvOzA7TDsxRDE1RiAxRDE3MTs7OztOOzs7OzsKKzFEMTY0O01VU0lDQUwgU1lNQk9MIE9ORSBIVU5EUkVEIFRXRU5UWS1FSUdIVEggTk9URTtTbzswO0w7MUQxNUYgMUQxNzI7Ozs7Tjs7Ozs7CisxRDE2NTtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgU1RFTTtNYzsyMTY7TDs7Ozs7Tjs7Ozs7CisxRDE2NjtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgU1BSRUNIR0VTQU5HIFNURU07TWM7MjE2O0w7Ozs7O047Ozs7OworMUQxNjc7TVVTSUNBTCBTWU1CT0wgQ09NQklOSU5HIFRSRU1PTE8tMTtNbjsxO05TTTs7Ozs7Tjs7Ozs7CisxRDE2ODtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgVFJFTU9MTy0yO01uOzE7TlNNOzs7OztOOzs7OzsKKzFEMTY5O01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBUUkVNT0xPLTM7TW47MTtOU007Ozs7O047Ozs7OworMUQxNkE7TVVTSUNBTCBTWU1CT0wgRklOR0VSRUQgVFJFTU9MTy0xO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE2QjtNVVNJQ0FMIFNZTUJPTCBGSU5HRVJFRCBUUkVNT0xPLTI7U287MDtMOzs7OztOOzs7OzsKKzFEMTZDO01VU0lDQUwgU1lNQk9MIEZJTkdFUkVEIFRSRU1PTE8tMztTbzswO0w7Ozs7O047Ozs7OworMUQxNkQ7TVVTSUNBTCBTWU1CT0wgQ09NQklOSU5HIEFVR01FTlRBVElPTiBET1Q7TWM7MjI2O0w7Ozs7O047Ozs7OworMUQxNkU7TVVTSUNBTCBTWU1CT0wgQ09NQklOSU5HIEZMQUctMTtNYzsyMTY7TDs7Ozs7Tjs7Ozs7CisxRDE2RjtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgRkxBRy0yO01jOzIxNjtMOzs7OztOOzs7OzsKKzFEMTcwO01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBGTEFHLTM7TWM7MjE2O0w7Ozs7O047Ozs7OworMUQxNzE7TVVTSUNBTCBTWU1CT0wgQ09NQklOSU5HIEZMQUctNDtNYzsyMTY7TDs7Ozs7Tjs7Ozs7CisxRDE3MjtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgRkxBRy01O01jOzIxNjtMOzs7OztOOzs7OzsKKzFEMTczO01VU0lDQUwgU1lNQk9MIEJFR0lOIEJFQU07Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisxRDE3NDtNVVNJQ0FMIFNZTUJPTCBFTkQgQkVBTTtDZjswO0JOOzs7OztOOzs7OzsKKzFEMTc1O01VU0lDQUwgU1lNQk9MIEJFR0lOIFRJRTtDZjswO0JOOzs7OztOOzs7OzsKKzFEMTc2O01VU0lDQUwgU1lNQk9MIEVORCBUSUU7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisxRDE3NztNVVNJQ0FMIFNZTUJPTCBCRUdJTiBTTFVSO0NmOzA7Qk47Ozs7O047Ozs7OworMUQxNzg7TVVTSUNBTCBTWU1CT0wgRU5EIFNMVVI7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisxRDE3OTtNVVNJQ0FMIFNZTUJPTCBCRUdJTiBQSFJBU0U7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CisxRDE3QTtNVVNJQ0FMIFNZTUJPTCBFTkQgUEhSQVNFO0NmOzA7Qk47Ozs7O047Ozs7OworMUQxN0I7TVVTSUNBTCBTWU1CT0wgQ09NQklOSU5HIEFDQ0VOVDtNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzFEMTdDO01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBTVEFDQ0FUTztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzFEMTdEO01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBURU5VVE87TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CisxRDE3RTtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgU1RBQ0NBVElTU0lNTztNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzFEMTdGO01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBNQVJDQVRPO01uOzIyMDtOU007Ozs7O047Ozs7OworMUQxODA7TVVTSUNBTCBTWU1CT0wgQ09NQklOSU5HIE1BUkNBVE8tU1RBQ0NBVE87TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CisxRDE4MTtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgQUNDRU5ULVNUQUNDQVRPO01uOzIyMDtOU007Ozs7O047Ozs7OworMUQxODI7TVVTSUNBTCBTWU1CT0wgQ09NQklOSU5HIExPVVJFO01uOzIyMDtOU007Ozs7O047Ozs7OworMUQxODM7TVVTSUNBTCBTWU1CT0wgQVJQRUdHSUFUTyBVUDtTbzswO0w7Ozs7O047Ozs7OworMUQxODQ7TVVTSUNBTCBTWU1CT0wgQVJQRUdHSUFUTyBET1dOO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE4NTtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgRE9JVDtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzFEMTg2O01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBSSVA7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CisxRDE4NztNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgRkxJUDtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzFEMTg4O01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBTTUVBUjtNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzFEMTg5O01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBCRU5EO01uOzIzMDtOU007Ozs7O047Ozs7OworMUQxOEE7TVVTSUNBTCBTWU1CT0wgQ09NQklOSU5HIERPVUJMRSBUT05HVUU7TW47MjIwO05TTTs7Ozs7Tjs7Ozs7CisxRDE4QjtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgVFJJUExFIFRPTkdVRTtNbjsyMjA7TlNNOzs7OztOOzs7OzsKKzFEMThDO01VU0lDQUwgU1lNQk9MIFJJTkZPUlpBTkRPO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE4RDtNVVNJQ0FMIFNZTUJPTCBTVUJJVE87U287MDtMOzs7OztOOzs7OzsKKzFEMThFO01VU0lDQUwgU1lNQk9MIFo7U287MDtMOzs7OztOOzs7OzsKKzFEMThGO01VU0lDQUwgU1lNQk9MIFBJQU5PO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE5MDtNVVNJQ0FMIFNZTUJPTCBNRVpaTztTbzswO0w7Ozs7O047Ozs7OworMUQxOTE7TVVTSUNBTCBTWU1CT0wgRk9SVEU7U287MDtMOzs7OztOOzs7OzsKKzFEMTkyO01VU0lDQUwgU1lNQk9MIENSRVNDRU5ETztTbzswO0w7Ozs7O047Ozs7OworMUQxOTM7TVVTSUNBTCBTWU1CT0wgREVDUkVTQ0VORE87U287MDtMOzs7OztOOzs7OzsKKzFEMTk0O01VU0lDQUwgU1lNQk9MIEdSQUNFIE5PVEUgU0xBU0g7U287MDtMOzs7OztOOzs7OzsKKzFEMTk1O01VU0lDQUwgU1lNQk9MIEdSQUNFIE5PVEUgTk8gU0xBU0g7U287MDtMOzs7OztOOzs7OzsKKzFEMTk2O01VU0lDQUwgU1lNQk9MIFRSO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE5NztNVVNJQ0FMIFNZTUJPTCBUVVJOO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE5ODtNVVNJQ0FMIFNZTUJPTCBJTlZFUlRFRCBUVVJOO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE5OTtNVVNJQ0FMIFNZTUJPTCBUVVJOIFNMQVNIO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE5QTtNVVNJQ0FMIFNZTUJPTCBUVVJOIFVQO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE5QjtNVVNJQ0FMIFNZTUJPTCBPUk5BTUVOVCBTVFJPS0UtMTtTbzswO0w7Ozs7O047Ozs7OworMUQxOUM7TVVTSUNBTCBTWU1CT0wgT1JOQU1FTlQgU1RST0tFLTI7U287MDtMOzs7OztOOzs7OzsKKzFEMTlEO01VU0lDQUwgU1lNQk9MIE9STkFNRU5UIFNUUk9LRS0zO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDE5RTtNVVNJQ0FMIFNZTUJPTCBPUk5BTUVOVCBTVFJPS0UtNDtTbzswO0w7Ozs7O047Ozs7OworMUQxOUY7TVVTSUNBTCBTWU1CT0wgT1JOQU1FTlQgU1RST0tFLTU7U287MDtMOzs7OztOOzs7OzsKKzFEMUEwO01VU0lDQUwgU1lNQk9MIE9STkFNRU5UIFNUUk9LRS02O1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFBMTtNVVNJQ0FMIFNZTUJPTCBPUk5BTUVOVCBTVFJPS0UtNztTbzswO0w7Ozs7O047Ozs7OworMUQxQTI7TVVTSUNBTCBTWU1CT0wgT1JOQU1FTlQgU1RST0tFLTg7U287MDtMOzs7OztOOzs7OzsKKzFEMUEzO01VU0lDQUwgU1lNQk9MIE9STkFNRU5UIFNUUk9LRS05O1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFBNDtNVVNJQ0FMIFNZTUJPTCBPUk5BTUVOVCBTVFJPS0UtMTA7U287MDtMOzs7OztOOzs7OzsKKzFEMUE1O01VU0lDQUwgU1lNQk9MIE9STkFNRU5UIFNUUk9LRS0xMTtTbzswO0w7Ozs7O047Ozs7OworMUQxQTY7TVVTSUNBTCBTWU1CT0wgSEFVUFRTVElNTUU7U287MDtMOzs7OztOOzs7OzsKKzFEMUE3O01VU0lDQUwgU1lNQk9MIE5FQkVOU1RJTU1FO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFBODtNVVNJQ0FMIFNZTUJPTCBFTkQgT0YgU1RJTU1FO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFBOTtNVVNJQ0FMIFNZTUJPTCBERUdSRUUgU0xBU0g7U287MDtMOzs7OztOOzs7OzsKKzFEMUFBO01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBET1dOIEJPVztNbjsyMzA7TlNNOzs7OztOOzs7OzsKKzFEMUFCO01VU0lDQUwgU1lNQk9MIENPTUJJTklORyBVUCBCT1c7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CisxRDFBQztNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgSEFSTU9OSUM7TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CisxRDFBRDtNVVNJQ0FMIFNZTUJPTCBDT01CSU5JTkcgU05BUCBQSVpaSUNBVE87TW47MjMwO05TTTs7Ozs7Tjs7Ozs7CisxRDFBRTtNVVNJQ0FMIFNZTUJPTCBQRURBTCBNQVJLO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFBRjtNVVNJQ0FMIFNZTUJPTCBQRURBTCBVUCBNQVJLO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFCMDtNVVNJQ0FMIFNZTUJPTCBIQUxGIFBFREFMIE1BUks7U287MDtMOzs7OztOOzs7OzsKKzFEMUIxO01VU0lDQUwgU1lNQk9MIEdMSVNTQU5ETyBVUDtTbzswO0w7Ozs7O047Ozs7OworMUQxQjI7TVVTSUNBTCBTWU1CT0wgR0xJU1NBTkRPIERPV047U287MDtMOzs7OztOOzs7OzsKKzFEMUIzO01VU0lDQUwgU1lNQk9MIFdJVEggRklOR0VSTkFJTFM7U287MDtMOzs7OztOOzs7OzsKKzFEMUI0O01VU0lDQUwgU1lNQk9MIERBTVA7U287MDtMOzs7OztOOzs7OzsKKzFEMUI1O01VU0lDQUwgU1lNQk9MIERBTVAgQUxMO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFCNjtNVVNJQ0FMIFNZTUJPTCBNQVhJTUE7U287MDtMOzs7OztOOzs7OzsKKzFEMUI3O01VU0lDQUwgU1lNQk9MIExPTkdBO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFCODtNVVNJQ0FMIFNZTUJPTCBCUkVWSVM7U287MDtMOzs7OztOOzs7OzsKKzFEMUI5O01VU0lDQUwgU1lNQk9MIFNFTUlCUkVWSVMgV0hJVEU7U287MDtMOzs7OztOOzs7OzsKKzFEMUJBO01VU0lDQUwgU1lNQk9MIFNFTUlCUkVWSVMgQkxBQ0s7U287MDtMOzs7OztOOzs7OzsKKzFEMUJCO01VU0lDQUwgU1lNQk9MIE1JTklNQTtTbzswO0w7MUQxQjkgMUQxNjU7Ozs7Tjs7Ozs7CisxRDFCQztNVVNJQ0FMIFNZTUJPTCBNSU5JTUEgQkxBQ0s7U287MDtMOzFEMUJBIDFEMTY1Ozs7O047Ozs7OworMUQxQkQ7TVVTSUNBTCBTWU1CT0wgU0VNSU1JTklNQSBXSElURTtTbzswO0w7MUQxQkIgMUQxNkU7Ozs7Tjs7Ozs7CisxRDFCRTtNVVNJQ0FMIFNZTUJPTCBTRU1JTUlOSU1BIEJMQUNLO1NvOzA7TDsxRDFCQyAxRDE2RTs7OztOOzs7OzsKKzFEMUJGO01VU0lDQUwgU1lNQk9MIEZVU0EgV0hJVEU7U287MDtMOzFEMUJCIDFEMTZGOzs7O047Ozs7OworMUQxQzA7TVVTSUNBTCBTWU1CT0wgRlVTQSBCTEFDSztTbzswO0w7MUQxQkMgMUQxNkY7Ozs7Tjs7Ozs7CisxRDFDMTtNVVNJQ0FMIFNZTUJPTCBMT05HQSBQRVJGRUNUQSBSRVNUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFDMjtNVVNJQ0FMIFNZTUJPTCBMT05HQSBJTVBFUkZFQ1RBIFJFU1Q7U287MDtMOzs7OztOOzs7OzsKKzFEMUMzO01VU0lDQUwgU1lNQk9MIEJSRVZJUyBSRVNUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFDNDtNVVNJQ0FMIFNZTUJPTCBTRU1JQlJFVklTIFJFU1Q7U287MDtMOzs7OztOOzs7OzsKKzFEMUM1O01VU0lDQUwgU1lNQk9MIE1JTklNQSBSRVNUO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFDNjtNVVNJQ0FMIFNZTUJPTCBTRU1JTUlOSU1BIFJFU1Q7U287MDtMOzs7OztOOzs7OzsKKzFEMUM3O01VU0lDQUwgU1lNQk9MIFRFTVBVUyBQRVJGRUNUVU0gQ1VNIFBST0xBVElPTkUgUEVSRkVDVEE7U287MDtMOzs7OztOOzs7OzsKKzFEMUM4O01VU0lDQUwgU1lNQk9MIFRFTVBVUyBQRVJGRUNUVU0gQ1VNIFBST0xBVElPTkUgSU1QRVJGRUNUQTtTbzswO0w7Ozs7O047Ozs7OworMUQxQzk7TVVTSUNBTCBTWU1CT0wgVEVNUFVTIFBFUkZFQ1RVTSBDVU0gUFJPTEFUSU9ORSBQRVJGRUNUQSBESU1JTlVUSU9OLTE7U287MDtMOzs7OztOOzs7OzsKKzFEMUNBO01VU0lDQUwgU1lNQk9MIFRFTVBVUyBJTVBFUkZFQ1RVTSBDVU0gUFJPTEFUSU9ORSBQRVJGRUNUQTtTbzswO0w7Ozs7O047Ozs7OworMUQxQ0I7TVVTSUNBTCBTWU1CT0wgVEVNUFVTIElNUEVSRkVDVFVNIENVTSBQUk9MQVRJT05FIElNUEVSRkVDVEE7U287MDtMOzs7OztOOzs7OzsKKzFEMUNDO01VU0lDQUwgU1lNQk9MIFRFTVBVUyBJTVBFUkZFQ1RVTSBDVU0gUFJPTEFUSU9ORSBJTVBFUkZFQ1RBIERJTUlOVVRJT04tMTtTbzswO0w7Ozs7O047Ozs7OworMUQxQ0Q7TVVTSUNBTCBTWU1CT0wgVEVNUFVTIElNUEVSRkVDVFVNIENVTSBQUk9MQVRJT05FIElNUEVSRkVDVEEgRElNSU5VVElPTi0yO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFDRTtNVVNJQ0FMIFNZTUJPTCBURU1QVVMgSU1QRVJGRUNUVU0gQ1VNIFBST0xBVElPTkUgSU1QRVJGRUNUQSBESU1JTlVUSU9OLTM7U287MDtMOzs7OztOOzs7OzsKKzFEMUNGO01VU0lDQUwgU1lNQk9MIENST0lYO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFEMDtNVVNJQ0FMIFNZTUJPTCBHUkVHT1JJQU4gQyBDTEVGO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFEMTtNVVNJQ0FMIFNZTUJPTCBHUkVHT1JJQU4gRiBDTEVGO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFEMjtNVVNJQ0FMIFNZTUJPTCBTUVVBUkUgQjtTbzswO0w7Ozs7O047Ozs7OworMUQxRDM7TVVTSUNBTCBTWU1CT0wgVklSR0E7U287MDtMOzs7OztOOzs7OzsKKzFEMUQ0O01VU0lDQUwgU1lNQk9MIFBPREFUVVM7U287MDtMOzs7OztOOzs7OzsKKzFEMUQ1O01VU0lDQUwgU1lNQk9MIENMSVZJUztTbzswO0w7Ozs7O047Ozs7OworMUQxRDY7TVVTSUNBTCBTWU1CT0wgU0NBTkRJQ1VTO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFENztNVVNJQ0FMIFNZTUJPTCBDTElNQUNVUztTbzswO0w7Ozs7O047Ozs7OworMUQxRDg7TVVTSUNBTCBTWU1CT0wgVE9SQ1VMVVM7U287MDtMOzs7OztOOzs7OzsKKzFEMUQ5O01VU0lDQUwgU1lNQk9MIFBPUlJFQ1RVUztTbzswO0w7Ozs7O047Ozs7OworMUQxREE7TVVTSUNBTCBTWU1CT0wgUE9SUkVDVFVTIEZMRVhVUztTbzswO0w7Ozs7O047Ozs7OworMUQxREI7TVVTSUNBTCBTWU1CT0wgU0NBTkRJQ1VTIEZMRVhVUztTbzswO0w7Ozs7O047Ozs7OworMUQxREM7TVVTSUNBTCBTWU1CT0wgVE9SQ1VMVVMgUkVTVVBJTlVTO1NvOzA7TDs7Ozs7Tjs7Ozs7CisxRDFERDtNVVNJQ0FMIFNZTUJPTCBQRVMgU1VCUFVOQ1RJUztTbzswO0w7Ozs7O047Ozs7OworMUQ0MDA7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBBO0x1OzA7TDs8Zm9udD4gMDA0MTs7OztOOzs7OzsKKzFENDAxO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgQjtMdTswO0w7PGZvbnQ+IDAwNDI7Ozs7Tjs7Ozs7CisxRDQwMjtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEM7THU7MDtMOzxmb250PiAwMDQzOzs7O047Ozs7OworMUQ0MDM7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBEO0x1OzA7TDs8Zm9udD4gMDA0NDs7OztOOzs7OzsKKzFENDA0O01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgRTtMdTswO0w7PGZvbnQ+IDAwNDU7Ozs7Tjs7Ozs7CisxRDQwNTtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047Ozs7OworMUQ0MDY7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBHO0x1OzA7TDs8Zm9udD4gMDA0Nzs7OztOOzs7OzsKKzFENDA3O01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgSDtMdTswO0w7PGZvbnQ+IDAwNDg7Ozs7Tjs7Ozs7CisxRDQwODtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047Ozs7OworMUQ0MDk7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBKO0x1OzA7TDs8Zm9udD4gMDA0QTs7OztOOzs7OzsKKzFENDBBO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgSztMdTswO0w7PGZvbnQ+IDAwNEI7Ozs7Tjs7Ozs7CisxRDQwQjtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047Ozs7OworMUQ0MEM7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBNO0x1OzA7TDs8Zm9udD4gMDA0RDs7OztOOzs7OzsKKzFENDBEO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgTjtMdTswO0w7PGZvbnQ+IDAwNEU7Ozs7Tjs7Ozs7CisxRDQwRTtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIE87THU7MDtMOzxmb250PiAwMDRGOzs7O047Ozs7OworMUQ0MEY7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBQO0x1OzA7TDs8Zm9udD4gMDA1MDs7OztOOzs7OzsKKzFENDEwO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgUTtMdTswO0w7PGZvbnQ+IDAwNTE7Ozs7Tjs7Ozs7CisxRDQxMTtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047Ozs7OworMUQ0MTI7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBTO0x1OzA7TDs8Zm9udD4gMDA1Mzs7OztOOzs7OzsKKzFENDEzO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgVDtMdTswO0w7PGZvbnQ+IDAwNTQ7Ozs7Tjs7Ozs7CisxRDQxNDtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIFU7THU7MDtMOzxmb250PiAwMDU1Ozs7O047Ozs7OworMUQ0MTU7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBWO0x1OzA7TDs8Zm9udD4gMDA1Njs7OztOOzs7OzsKKzFENDE2O01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgVztMdTswO0w7PGZvbnQ+IDAwNTc7Ozs7Tjs7Ozs7CisxRDQxNztNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIFg7THU7MDtMOzxmb250PiAwMDU4Ozs7O047Ozs7OworMUQ0MTg7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBZO0x1OzA7TDs8Zm9udD4gMDA1OTs7OztOOzs7OzsKKzFENDE5O01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgWjtMdTswO0w7PGZvbnQ+IDAwNUE7Ozs7Tjs7Ozs7CisxRDQxQTtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBBO0xsOzA7TDs8Zm9udD4gMDA2MTs7OztOOzs7OzsKKzFENDFCO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEI7TGw7MDtMOzxmb250PiAwMDYyOzs7O047Ozs7OworMUQ0MUM7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgQztMbDswO0w7PGZvbnQ+IDAwNjM7Ozs7Tjs7Ozs7CisxRDQxRDtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBEO0xsOzA7TDs8Zm9udD4gMDA2NDs7OztOOzs7OzsKKzFENDFFO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEU7TGw7MDtMOzxmb250PiAwMDY1Ozs7O047Ozs7OworMUQ0MUY7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgRjtMbDswO0w7PGZvbnQ+IDAwNjY7Ozs7Tjs7Ozs7CisxRDQyMDtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBHO0xsOzA7TDs8Zm9udD4gMDA2Nzs7OztOOzs7OzsKKzFENDIxO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEg7TGw7MDtMOzxmb250PiAwMDY4Ozs7O047Ozs7OworMUQ0MjI7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgSTtMbDswO0w7PGZvbnQ+IDAwNjk7Ozs7Tjs7Ozs7CisxRDQyMztNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBKO0xsOzA7TDs8Zm9udD4gMDA2QTs7OztOOzs7OzsKKzFENDI0O01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEs7TGw7MDtMOzxmb250PiAwMDZCOzs7O047Ozs7OworMUQ0MjU7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgTDtMbDswO0w7PGZvbnQ+IDAwNkM7Ozs7Tjs7Ozs7CisxRDQyNjtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBNO0xsOzA7TDs8Zm9udD4gMDA2RDs7OztOOzs7OzsKKzFENDI3O01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIE47TGw7MDtMOzxmb250PiAwMDZFOzs7O047Ozs7OworMUQ0Mjg7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgTztMbDswO0w7PGZvbnQ+IDAwNkY7Ozs7Tjs7Ozs7CisxRDQyOTtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBQO0xsOzA7TDs8Zm9udD4gMDA3MDs7OztOOzs7OzsKKzFENDJBO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFE7TGw7MDtMOzxmb250PiAwMDcxOzs7O047Ozs7OworMUQ0MkI7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgUjtMbDswO0w7PGZvbnQ+IDAwNzI7Ozs7Tjs7Ozs7CisxRDQyQztNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBTO0xsOzA7TDs8Zm9udD4gMDA3Mzs7OztOOzs7OzsKKzFENDJEO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFQ7TGw7MDtMOzxmb250PiAwMDc0Ozs7O047Ozs7OworMUQ0MkU7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgVTtMbDswO0w7PGZvbnQ+IDAwNzU7Ozs7Tjs7Ozs7CisxRDQyRjtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBWO0xsOzA7TDs8Zm9udD4gMDA3Njs7OztOOzs7OzsKKzFENDMwO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFc7TGw7MDtMOzxmb250PiAwMDc3Ozs7O047Ozs7OworMUQ0MzE7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgWDtMbDswO0w7PGZvbnQ+IDAwNzg7Ozs7Tjs7Ozs7CisxRDQzMjtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBZO0xsOzA7TDs8Zm9udD4gMDA3OTs7OztOOzs7OzsKKzFENDMzO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFo7TGw7MDtMOzxmb250PiAwMDdBOzs7O047Ozs7OworMUQ0MzQ7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEE7THU7MDtMOzxmb250PiAwMDQxOzs7O047Ozs7OworMUQ0MzU7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEI7THU7MDtMOzxmb250PiAwMDQyOzs7O047Ozs7OworMUQ0MzY7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEM7THU7MDtMOzxmb250PiAwMDQzOzs7O047Ozs7OworMUQ0Mzc7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEQ7THU7MDtMOzxmb250PiAwMDQ0Ozs7O047Ozs7OworMUQ0Mzg7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEU7THU7MDtMOzxmb250PiAwMDQ1Ozs7O047Ozs7OworMUQ0Mzk7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047Ozs7OworMUQ0M0E7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEc7THU7MDtMOzxmb250PiAwMDQ3Ozs7O047Ozs7OworMUQ0M0I7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEg7THU7MDtMOzxmb250PiAwMDQ4Ozs7O047Ozs7OworMUQ0M0M7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047Ozs7OworMUQ0M0Q7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEo7THU7MDtMOzxmb250PiAwMDRBOzs7O047Ozs7OworMUQ0M0U7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEs7THU7MDtMOzxmb250PiAwMDRCOzs7O047Ozs7OworMUQ0M0Y7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047Ozs7OworMUQ0NDA7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIE07THU7MDtMOzxmb250PiAwMDREOzs7O047Ozs7OworMUQ0NDE7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIE47THU7MDtMOzxmb250PiAwMDRFOzs7O047Ozs7OworMUQ0NDI7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIE87THU7MDtMOzxmb250PiAwMDRGOzs7O047Ozs7OworMUQ0NDM7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFA7THU7MDtMOzxmb250PiAwMDUwOzs7O047Ozs7OworMUQ0NDQ7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFE7THU7MDtMOzxmb250PiAwMDUxOzs7O047Ozs7OworMUQ0NDU7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047Ozs7OworMUQ0NDY7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFM7THU7MDtMOzxmb250PiAwMDUzOzs7O047Ozs7OworMUQ0NDc7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFQ7THU7MDtMOzxmb250PiAwMDU0Ozs7O047Ozs7OworMUQ0NDg7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFU7THU7MDtMOzxmb250PiAwMDU1Ozs7O047Ozs7OworMUQ0NDk7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFY7THU7MDtMOzxmb250PiAwMDU2Ozs7O047Ozs7OworMUQ0NEE7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFc7THU7MDtMOzxmb250PiAwMDU3Ozs7O047Ozs7OworMUQ0NEI7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFg7THU7MDtMOzxmb250PiAwMDU4Ozs7O047Ozs7OworMUQ0NEM7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFk7THU7MDtMOzxmb250PiAwMDU5Ozs7O047Ozs7OworMUQ0NEQ7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFo7THU7MDtMOzxmb250PiAwMDVBOzs7O047Ozs7OworMUQ0NEU7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBBO0xsOzA7TDs8Zm9udD4gMDA2MTs7OztOOzs7OzsKKzFENDRGO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgQjtMbDswO0w7PGZvbnQ+IDAwNjI7Ozs7Tjs7Ozs7CisxRDQ1MDtNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIEM7TGw7MDtMOzxmb250PiAwMDYzOzs7O047Ozs7OworMUQ0NTE7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBEO0xsOzA7TDs8Zm9udD4gMDA2NDs7OztOOzs7OzsKKzFENDUyO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgRTtMbDswO0w7PGZvbnQ+IDAwNjU7Ozs7Tjs7Ozs7CisxRDQ1MztNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIEY7TGw7MDtMOzxmb250PiAwMDY2Ozs7O047Ozs7OworMUQ0NTQ7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBHO0xsOzA7TDs8Zm9udD4gMDA2Nzs7OztOOzs7OzsKKzFENDU2O01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgSTtMbDswO0w7PGZvbnQ+IDAwNjk7Ozs7Tjs7Ozs7CisxRDQ1NztNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIEo7TGw7MDtMOzxmb250PiAwMDZBOzs7O047Ozs7OworMUQ0NTg7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBLO0xsOzA7TDs8Zm9udD4gMDA2Qjs7OztOOzs7OzsKKzFENDU5O01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgTDtMbDswO0w7PGZvbnQ+IDAwNkM7Ozs7Tjs7Ozs7CisxRDQ1QTtNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIE07TGw7MDtMOzxmb250PiAwMDZEOzs7O047Ozs7OworMUQ0NUI7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBOO0xsOzA7TDs8Zm9udD4gMDA2RTs7OztOOzs7OzsKKzFENDVDO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgTztMbDswO0w7PGZvbnQ+IDAwNkY7Ozs7Tjs7Ozs7CisxRDQ1RDtNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIFA7TGw7MDtMOzxmb250PiAwMDcwOzs7O047Ozs7OworMUQ0NUU7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBRO0xsOzA7TDs8Zm9udD4gMDA3MTs7OztOOzs7OzsKKzFENDVGO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgUjtMbDswO0w7PGZvbnQ+IDAwNzI7Ozs7Tjs7Ozs7CisxRDQ2MDtNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIFM7TGw7MDtMOzxmb250PiAwMDczOzs7O047Ozs7OworMUQ0NjE7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBUO0xsOzA7TDs8Zm9udD4gMDA3NDs7OztOOzs7OzsKKzFENDYyO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgVTtMbDswO0w7PGZvbnQ+IDAwNzU7Ozs7Tjs7Ozs7CisxRDQ2MztNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIFY7TGw7MDtMOzxmb250PiAwMDc2Ozs7O047Ozs7OworMUQ0NjQ7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBXO0xsOzA7TDs8Zm9udD4gMDA3Nzs7OztOOzs7OzsKKzFENDY1O01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgWDtMbDswO0w7PGZvbnQ+IDAwNzg7Ozs7Tjs7Ozs7CisxRDQ2NjtNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIFk7TGw7MDtMOzxmb250PiAwMDc5Ozs7O047Ozs7OworMUQ0Njc7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBaO0xsOzA7TDs8Zm9udD4gMDA3QTs7OztOOzs7OzsKKzFENDY4O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEE7THU7MDtMOzxmb250PiAwMDQxOzs7O047Ozs7OworMUQ0Njk7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgQjtMdTswO0w7PGZvbnQ+IDAwNDI7Ozs7Tjs7Ozs7CisxRDQ2QTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBDO0x1OzA7TDs8Zm9udD4gMDA0Mzs7OztOOzs7OzsKKzFENDZCO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEQ7THU7MDtMOzxmb250PiAwMDQ0Ozs7O047Ozs7OworMUQ0NkM7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgRTtMdTswO0w7PGZvbnQ+IDAwNDU7Ozs7Tjs7Ozs7CisxRDQ2RDtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBGO0x1OzA7TDs8Zm9udD4gMDA0Njs7OztOOzs7OzsKKzFENDZFO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEc7THU7MDtMOzxmb250PiAwMDQ3Ozs7O047Ozs7OworMUQ0NkY7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgSDtMdTswO0w7PGZvbnQ+IDAwNDg7Ozs7Tjs7Ozs7CisxRDQ3MDtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBJO0x1OzA7TDs8Zm9udD4gMDA0OTs7OztOOzs7OzsKKzFENDcxO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIEo7THU7MDtMOzxmb250PiAwMDRBOzs7O047Ozs7OworMUQ0NzI7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgSztMdTswO0w7PGZvbnQ+IDAwNEI7Ozs7Tjs7Ozs7CisxRDQ3MztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBMO0x1OzA7TDs8Zm9udD4gMDA0Qzs7OztOOzs7OzsKKzFENDc0O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIE07THU7MDtMOzxmb250PiAwMDREOzs7O047Ozs7OworMUQ0NzU7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgTjtMdTswO0w7PGZvbnQ+IDAwNEU7Ozs7Tjs7Ozs7CisxRDQ3NjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBPO0x1OzA7TDs8Zm9udD4gMDA0Rjs7OztOOzs7OzsKKzFENDc3O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFA7THU7MDtMOzxmb250PiAwMDUwOzs7O047Ozs7OworMUQ0Nzg7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgUTtMdTswO0w7PGZvbnQ+IDAwNTE7Ozs7Tjs7Ozs7CisxRDQ3OTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBSO0x1OzA7TDs8Zm9udD4gMDA1Mjs7OztOOzs7OzsKKzFENDdBO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFM7THU7MDtMOzxmb250PiAwMDUzOzs7O047Ozs7OworMUQ0N0I7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgVDtMdTswO0w7PGZvbnQ+IDAwNTQ7Ozs7Tjs7Ozs7CisxRDQ3QztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBVO0x1OzA7TDs8Zm9udD4gMDA1NTs7OztOOzs7OzsKKzFENDdEO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFY7THU7MDtMOzxmb250PiAwMDU2Ozs7O047Ozs7OworMUQ0N0U7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgVztMdTswO0w7PGZvbnQ+IDAwNTc7Ozs7Tjs7Ozs7CisxRDQ3RjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBYO0x1OzA7TDs8Zm9udD4gMDA1ODs7OztOOzs7OzsKKzFENDgwO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFk7THU7MDtMOzxmb250PiAwMDU5Ozs7O047Ozs7OworMUQ0ODE7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgWjtMdTswO0w7PGZvbnQ+IDAwNUE7Ozs7Tjs7Ozs7CisxRDQ4MjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgQTtMbDswO0w7PGZvbnQ+IDAwNjE7Ozs7Tjs7Ozs7CisxRDQ4MztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgQjtMbDswO0w7PGZvbnQ+IDAwNjI7Ozs7Tjs7Ozs7CisxRDQ4NDtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgQztMbDswO0w7PGZvbnQ+IDAwNjM7Ozs7Tjs7Ozs7CisxRDQ4NTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRDtMbDswO0w7PGZvbnQ+IDAwNjQ7Ozs7Tjs7Ozs7CisxRDQ4NjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRTtMbDswO0w7PGZvbnQ+IDAwNjU7Ozs7Tjs7Ozs7CisxRDQ4NztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRjtMbDswO0w7PGZvbnQ+IDAwNjY7Ozs7Tjs7Ozs7CisxRDQ4ODtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRztMbDswO0w7PGZvbnQ+IDAwNjc7Ozs7Tjs7Ozs7CisxRDQ4OTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgSDtMbDswO0w7PGZvbnQ+IDAwNjg7Ozs7Tjs7Ozs7CisxRDQ4QTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgSTtMbDswO0w7PGZvbnQ+IDAwNjk7Ozs7Tjs7Ozs7CisxRDQ4QjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgSjtMbDswO0w7PGZvbnQ+IDAwNkE7Ozs7Tjs7Ozs7CisxRDQ4QztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgSztMbDswO0w7PGZvbnQ+IDAwNkI7Ozs7Tjs7Ozs7CisxRDQ4RDtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgTDtMbDswO0w7PGZvbnQ+IDAwNkM7Ozs7Tjs7Ozs7CisxRDQ4RTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgTTtMbDswO0w7PGZvbnQ+IDAwNkQ7Ozs7Tjs7Ozs7CisxRDQ4RjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgTjtMbDswO0w7PGZvbnQ+IDAwNkU7Ozs7Tjs7Ozs7CisxRDQ5MDtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgTztMbDswO0w7PGZvbnQ+IDAwNkY7Ozs7Tjs7Ozs7CisxRDQ5MTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUDtMbDswO0w7PGZvbnQ+IDAwNzA7Ozs7Tjs7Ozs7CisxRDQ5MjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUTtMbDswO0w7PGZvbnQ+IDAwNzE7Ozs7Tjs7Ozs7CisxRDQ5MztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUjtMbDswO0w7PGZvbnQ+IDAwNzI7Ozs7Tjs7Ozs7CisxRDQ5NDtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUztMbDswO0w7PGZvbnQ+IDAwNzM7Ozs7Tjs7Ozs7CisxRDQ5NTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVDtMbDswO0w7PGZvbnQ+IDAwNzQ7Ozs7Tjs7Ozs7CisxRDQ5NjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVTtMbDswO0w7PGZvbnQ+IDAwNzU7Ozs7Tjs7Ozs7CisxRDQ5NztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVjtMbDswO0w7PGZvbnQ+IDAwNzY7Ozs7Tjs7Ozs7CisxRDQ5ODtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVztMbDswO0w7PGZvbnQ+IDAwNzc7Ozs7Tjs7Ozs7CisxRDQ5OTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgWDtMbDswO0w7PGZvbnQ+IDAwNzg7Ozs7Tjs7Ozs7CisxRDQ5QTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgWTtMbDswO0w7PGZvbnQ+IDAwNzk7Ozs7Tjs7Ozs7CisxRDQ5QjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgWjtMbDswO0w7PGZvbnQ+IDAwN0E7Ozs7Tjs7Ozs7CisxRDQ5QztNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgQTtMdTswO0w7PGZvbnQ+IDAwNDE7Ozs7Tjs7Ozs7CisxRDQ5RTtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgQztMdTswO0w7PGZvbnQ+IDAwNDM7Ozs7Tjs7Ozs7CisxRDQ5RjtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgRDtMdTswO0w7PGZvbnQ+IDAwNDQ7Ozs7Tjs7Ozs7CisxRDRBMjtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgRztMdTswO0w7PGZvbnQ+IDAwNDc7Ozs7Tjs7Ozs7CisxRDRBNTtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgSjtMdTswO0w7PGZvbnQ+IDAwNEE7Ozs7Tjs7Ozs7CisxRDRBNjtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgSztMdTswO0w7PGZvbnQ+IDAwNEI7Ozs7Tjs7Ozs7CisxRDRBOTtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgTjtMdTswO0w7PGZvbnQ+IDAwNEU7Ozs7Tjs7Ozs7CisxRDRBQTtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgTztMdTswO0w7PGZvbnQ+IDAwNEY7Ozs7Tjs7Ozs7CisxRDRBQjtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgUDtMdTswO0w7PGZvbnQ+IDAwNTA7Ozs7Tjs7Ozs7CisxRDRBQztNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgUTtMdTswO0w7PGZvbnQ+IDAwNTE7Ozs7Tjs7Ozs7CisxRDRBRTtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgUztMdTswO0w7PGZvbnQ+IDAwNTM7Ozs7Tjs7Ozs7CisxRDRBRjtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgVDtMdTswO0w7PGZvbnQ+IDAwNTQ7Ozs7Tjs7Ozs7CisxRDRCMDtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgVTtMdTswO0w7PGZvbnQ+IDAwNTU7Ozs7Tjs7Ozs7CisxRDRCMTtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgVjtMdTswO0w7PGZvbnQ+IDAwNTY7Ozs7Tjs7Ozs7CisxRDRCMjtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgVztMdTswO0w7PGZvbnQ+IDAwNTc7Ozs7Tjs7Ozs7CisxRDRCMztNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgWDtMdTswO0w7PGZvbnQ+IDAwNTg7Ozs7Tjs7Ozs7CisxRDRCNDtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgWTtMdTswO0w7PGZvbnQ+IDAwNTk7Ozs7Tjs7Ozs7CisxRDRCNTtNQVRIRU1BVElDQUwgU0NSSVBUIENBUElUQUwgWjtMdTswO0w7PGZvbnQ+IDAwNUE7Ozs7Tjs7Ozs7CisxRDRCNjtNQVRIRU1BVElDQUwgU0NSSVBUIFNNQUxMIEE7TGw7MDtMOzxmb250PiAwMDYxOzs7O047Ozs7OworMUQ0Qjc7TUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBCO0xsOzA7TDs8Zm9udD4gMDA2Mjs7OztOOzs7OzsKKzFENEI4O01BVEhFTUFUSUNBTCBTQ1JJUFQgU01BTEwgQztMbDswO0w7PGZvbnQ+IDAwNjM7Ozs7Tjs7Ozs7CisxRDRCOTtNQVRIRU1BVElDQUwgU0NSSVBUIFNNQUxMIEQ7TGw7MDtMOzxmb250PiAwMDY0Ozs7O047Ozs7OworMUQ0QkI7TUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBGO0xsOzA7TDs8Zm9udD4gMDA2Njs7OztOOzs7OzsKKzFENEJEO01BVEhFTUFUSUNBTCBTQ1JJUFQgU01BTEwgSDtMbDswO0w7PGZvbnQ+IDAwNjg7Ozs7Tjs7Ozs7CisxRDRCRTtNQVRIRU1BVElDQUwgU0NSSVBUIFNNQUxMIEk7TGw7MDtMOzxmb250PiAwMDY5Ozs7O047Ozs7OworMUQ0QkY7TUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBKO0xsOzA7TDs8Zm9udD4gMDA2QTs7OztOOzs7OzsKKzFENEMwO01BVEhFTUFUSUNBTCBTQ1JJUFQgU01BTEwgSztMbDswO0w7PGZvbnQ+IDAwNkI7Ozs7Tjs7Ozs7CisxRDRDMjtNQVRIRU1BVElDQUwgU0NSSVBUIFNNQUxMIE07TGw7MDtMOzxmb250PiAwMDZEOzs7O047Ozs7OworMUQ0QzM7TUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBOO0xsOzA7TDs8Zm9udD4gMDA2RTs7OztOOzs7OzsKKzFENEM1O01BVEhFTUFUSUNBTCBTQ1JJUFQgU01BTEwgUDtMbDswO0w7PGZvbnQ+IDAwNzA7Ozs7Tjs7Ozs7CisxRDRDNjtNQVRIRU1BVElDQUwgU0NSSVBUIFNNQUxMIFE7TGw7MDtMOzxmb250PiAwMDcxOzs7O047Ozs7OworMUQ0Qzc7TUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBSO0xsOzA7TDs8Zm9udD4gMDA3Mjs7OztOOzs7OzsKKzFENEM4O01BVEhFTUFUSUNBTCBTQ1JJUFQgU01BTEwgUztMbDswO0w7PGZvbnQ+IDAwNzM7Ozs7Tjs7Ozs7CisxRDRDOTtNQVRIRU1BVElDQUwgU0NSSVBUIFNNQUxMIFQ7TGw7MDtMOzxmb250PiAwMDc0Ozs7O047Ozs7OworMUQ0Q0E7TUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBVO0xsOzA7TDs8Zm9udD4gMDA3NTs7OztOOzs7OzsKKzFENENCO01BVEhFTUFUSUNBTCBTQ1JJUFQgU01BTEwgVjtMbDswO0w7PGZvbnQ+IDAwNzY7Ozs7Tjs7Ozs7CisxRDRDQztNQVRIRU1BVElDQUwgU0NSSVBUIFNNQUxMIFc7TGw7MDtMOzxmb250PiAwMDc3Ozs7O047Ozs7OworMUQ0Q0Q7TUFUSEVNQVRJQ0FMIFNDUklQVCBTTUFMTCBYO0xsOzA7TDs8Zm9udD4gMDA3ODs7OztOOzs7OzsKKzFENENFO01BVEhFTUFUSUNBTCBTQ1JJUFQgU01BTEwgWTtMbDswO0w7PGZvbnQ+IDAwNzk7Ozs7Tjs7Ozs7CisxRDRDRjtNQVRIRU1BVElDQUwgU0NSSVBUIFNNQUxMIFo7TGw7MDtMOzxmb250PiAwMDdBOzs7O047Ozs7OworMUQ0RDA7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgQTtMdTswO0w7PGZvbnQ+IDAwNDE7Ozs7Tjs7Ozs7CisxRDREMTtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBCO0x1OzA7TDs8Zm9udD4gMDA0Mjs7OztOOzs7OzsKKzFENEQyO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEM7THU7MDtMOzxmb250PiAwMDQzOzs7O047Ozs7OworMUQ0RDM7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgRDtMdTswO0w7PGZvbnQ+IDAwNDQ7Ozs7Tjs7Ozs7CisxRDRENDtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBFO0x1OzA7TDs8Zm9udD4gMDA0NTs7OztOOzs7OzsKKzFENEQ1O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047Ozs7OworMUQ0RDY7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgRztMdTswO0w7PGZvbnQ+IDAwNDc7Ozs7Tjs7Ozs7CisxRDRENztNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBIO0x1OzA7TDs8Zm9udD4gMDA0ODs7OztOOzs7OzsKKzFENEQ4O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047Ozs7OworMUQ0RDk7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgSjtMdTswO0w7PGZvbnQ+IDAwNEE7Ozs7Tjs7Ozs7CisxRDREQTtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBLO0x1OzA7TDs8Zm9udD4gMDA0Qjs7OztOOzs7OzsKKzFENERCO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047Ozs7OworMUQ0REM7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgTTtMdTswO0w7PGZvbnQ+IDAwNEQ7Ozs7Tjs7Ozs7CisxRDRERDtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBOO0x1OzA7TDs8Zm9udD4gMDA0RTs7OztOOzs7OzsKKzFENERFO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIE87THU7MDtMOzxmb250PiAwMDRGOzs7O047Ozs7OworMUQ0REY7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgUDtMdTswO0w7PGZvbnQ+IDAwNTA7Ozs7Tjs7Ozs7CisxRDRFMDtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBRO0x1OzA7TDs8Zm9udD4gMDA1MTs7OztOOzs7OzsKKzFENEUxO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047Ozs7OworMUQ0RTI7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgUztMdTswO0w7PGZvbnQ+IDAwNTM7Ozs7Tjs7Ozs7CisxRDRFMztNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBUO0x1OzA7TDs8Zm9udD4gMDA1NDs7OztOOzs7OzsKKzFENEU0O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFU7THU7MDtMOzxmb250PiAwMDU1Ozs7O047Ozs7OworMUQ0RTU7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgVjtMdTswO0w7PGZvbnQ+IDAwNTY7Ozs7Tjs7Ozs7CisxRDRFNjtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBXO0x1OzA7TDs8Zm9udD4gMDA1Nzs7OztOOzs7OzsKKzFENEU3O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBDQVBJVEFMIFg7THU7MDtMOzxmb250PiAwMDU4Ozs7O047Ozs7OworMUQ0RTg7TUFUSEVNQVRJQ0FMIEJPTEQgU0NSSVBUIENBUElUQUwgWTtMdTswO0w7PGZvbnQ+IDAwNTk7Ozs7Tjs7Ozs7CisxRDRFOTtNQVRIRU1BVElDQUwgQk9MRCBTQ1JJUFQgQ0FQSVRBTCBaO0x1OzA7TDs8Zm9udD4gMDA1QTs7OztOOzs7OzsKKzFENEVBO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBBO0xsOzA7TDs8Zm9udD4gMDA2MTs7OztOOzs7OzsKKzFENEVCO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBCO0xsOzA7TDs8Zm9udD4gMDA2Mjs7OztOOzs7OzsKKzFENEVDO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBDO0xsOzA7TDs8Zm9udD4gMDA2Mzs7OztOOzs7OzsKKzFENEVEO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBEO0xsOzA7TDs8Zm9udD4gMDA2NDs7OztOOzs7OzsKKzFENEVFO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBFO0xsOzA7TDs8Zm9udD4gMDA2NTs7OztOOzs7OzsKKzFENEVGO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBGO0xsOzA7TDs8Zm9udD4gMDA2Njs7OztOOzs7OzsKKzFENEYwO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBHO0xsOzA7TDs8Zm9udD4gMDA2Nzs7OztOOzs7OzsKKzFENEYxO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBIO0xsOzA7TDs8Zm9udD4gMDA2ODs7OztOOzs7OzsKKzFENEYyO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBJO0xsOzA7TDs8Zm9udD4gMDA2OTs7OztOOzs7OzsKKzFENEYzO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBKO0xsOzA7TDs8Zm9udD4gMDA2QTs7OztOOzs7OzsKKzFENEY0O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBLO0xsOzA7TDs8Zm9udD4gMDA2Qjs7OztOOzs7OzsKKzFENEY1O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBMO0xsOzA7TDs8Zm9udD4gMDA2Qzs7OztOOzs7OzsKKzFENEY2O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBNO0xsOzA7TDs8Zm9udD4gMDA2RDs7OztOOzs7OzsKKzFENEY3O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBOO0xsOzA7TDs8Zm9udD4gMDA2RTs7OztOOzs7OzsKKzFENEY4O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBPO0xsOzA7TDs8Zm9udD4gMDA2Rjs7OztOOzs7OzsKKzFENEY5O01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBQO0xsOzA7TDs8Zm9udD4gMDA3MDs7OztOOzs7OzsKKzFENEZBO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBRO0xsOzA7TDs8Zm9udD4gMDA3MTs7OztOOzs7OzsKKzFENEZCO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBSO0xsOzA7TDs8Zm9udD4gMDA3Mjs7OztOOzs7OzsKKzFENEZDO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBTO0xsOzA7TDs8Zm9udD4gMDA3Mzs7OztOOzs7OzsKKzFENEZEO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBUO0xsOzA7TDs8Zm9udD4gMDA3NDs7OztOOzs7OzsKKzFENEZFO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBVO0xsOzA7TDs8Zm9udD4gMDA3NTs7OztOOzs7OzsKKzFENEZGO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBWO0xsOzA7TDs8Zm9udD4gMDA3Njs7OztOOzs7OzsKKzFENTAwO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBXO0xsOzA7TDs8Zm9udD4gMDA3Nzs7OztOOzs7OzsKKzFENTAxO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBYO0xsOzA7TDs8Zm9udD4gMDA3ODs7OztOOzs7OzsKKzFENTAyO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBZO0xsOzA7TDs8Zm9udD4gMDA3OTs7OztOOzs7OzsKKzFENTAzO01BVEhFTUFUSUNBTCBCT0xEIFNDUklQVCBTTUFMTCBaO0xsOzA7TDs8Zm9udD4gMDA3QTs7OztOOzs7OzsKKzFENTA0O01BVEhFTUFUSUNBTCBGUkFLVFVSIENBUElUQUwgQTtMdTswO0w7PGZvbnQ+IDAwNDE7Ozs7Tjs7Ozs7CisxRDUwNTtNQVRIRU1BVElDQUwgRlJBS1RVUiBDQVBJVEFMIEI7THU7MDtMOzxmb250PiAwMDQyOzs7O047Ozs7OworMUQ1MDc7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBEO0x1OzA7TDs8Zm9udD4gMDA0NDs7OztOOzs7OzsKKzFENTA4O01BVEhFTUFUSUNBTCBGUkFLVFVSIENBUElUQUwgRTtMdTswO0w7PGZvbnQ+IDAwNDU7Ozs7Tjs7Ozs7CisxRDUwOTtNQVRIRU1BVElDQUwgRlJBS1RVUiBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047Ozs7OworMUQ1MEE7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBHO0x1OzA7TDs8Zm9udD4gMDA0Nzs7OztOOzs7OzsKKzFENTBEO01BVEhFTUFUSUNBTCBGUkFLVFVSIENBUElUQUwgSjtMdTswO0w7PGZvbnQ+IDAwNEE7Ozs7Tjs7Ozs7CisxRDUwRTtNQVRIRU1BVElDQUwgRlJBS1RVUiBDQVBJVEFMIEs7THU7MDtMOzxmb250PiAwMDRCOzs7O047Ozs7OworMUQ1MEY7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBMO0x1OzA7TDs8Zm9udD4gMDA0Qzs7OztOOzs7OzsKKzFENTEwO01BVEhFTUFUSUNBTCBGUkFLVFVSIENBUElUQUwgTTtMdTswO0w7PGZvbnQ+IDAwNEQ7Ozs7Tjs7Ozs7CisxRDUxMTtNQVRIRU1BVElDQUwgRlJBS1RVUiBDQVBJVEFMIE47THU7MDtMOzxmb250PiAwMDRFOzs7O047Ozs7OworMUQ1MTI7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBPO0x1OzA7TDs8Zm9udD4gMDA0Rjs7OztOOzs7OzsKKzFENTEzO01BVEhFTUFUSUNBTCBGUkFLVFVSIENBUElUQUwgUDtMdTswO0w7PGZvbnQ+IDAwNTA7Ozs7Tjs7Ozs7CisxRDUxNDtNQVRIRU1BVElDQUwgRlJBS1RVUiBDQVBJVEFMIFE7THU7MDtMOzxmb250PiAwMDUxOzs7O047Ozs7OworMUQ1MTY7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBTO0x1OzA7TDs8Zm9udD4gMDA1Mzs7OztOOzs7OzsKKzFENTE3O01BVEhFTUFUSUNBTCBGUkFLVFVSIENBUElUQUwgVDtMdTswO0w7PGZvbnQ+IDAwNTQ7Ozs7Tjs7Ozs7CisxRDUxODtNQVRIRU1BVElDQUwgRlJBS1RVUiBDQVBJVEFMIFU7THU7MDtMOzxmb250PiAwMDU1Ozs7O047Ozs7OworMUQ1MTk7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBWO0x1OzA7TDs8Zm9udD4gMDA1Njs7OztOOzs7OzsKKzFENTFBO01BVEhFTUFUSUNBTCBGUkFLVFVSIENBUElUQUwgVztMdTswO0w7PGZvbnQ+IDAwNTc7Ozs7Tjs7Ozs7CisxRDUxQjtNQVRIRU1BVElDQUwgRlJBS1RVUiBDQVBJVEFMIFg7THU7MDtMOzxmb250PiAwMDU4Ozs7O047Ozs7OworMUQ1MUM7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgQ0FQSVRBTCBZO0x1OzA7TDs8Zm9udD4gMDA1OTs7OztOOzs7OzsKKzFENTFFO01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEE7TGw7MDtMOzxmb250PiAwMDYxOzs7O047Ozs7OworMUQ1MUY7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgQjtMbDswO0w7PGZvbnQ+IDAwNjI7Ozs7Tjs7Ozs7CisxRDUyMDtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBDO0xsOzA7TDs8Zm9udD4gMDA2Mzs7OztOOzs7OzsKKzFENTIxO01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEQ7TGw7MDtMOzxmb250PiAwMDY0Ozs7O047Ozs7OworMUQ1MjI7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgRTtMbDswO0w7PGZvbnQ+IDAwNjU7Ozs7Tjs7Ozs7CisxRDUyMztNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBGO0xsOzA7TDs8Zm9udD4gMDA2Njs7OztOOzs7OzsKKzFENTI0O01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEc7TGw7MDtMOzxmb250PiAwMDY3Ozs7O047Ozs7OworMUQ1MjU7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgSDtMbDswO0w7PGZvbnQ+IDAwNjg7Ozs7Tjs7Ozs7CisxRDUyNjtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBJO0xsOzA7TDs8Zm9udD4gMDA2OTs7OztOOzs7OzsKKzFENTI3O01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIEo7TGw7MDtMOzxmb250PiAwMDZBOzs7O047Ozs7OworMUQ1Mjg7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgSztMbDswO0w7PGZvbnQ+IDAwNkI7Ozs7Tjs7Ozs7CisxRDUyOTtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBMO0xsOzA7TDs8Zm9udD4gMDA2Qzs7OztOOzs7OzsKKzFENTJBO01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIE07TGw7MDtMOzxmb250PiAwMDZEOzs7O047Ozs7OworMUQ1MkI7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgTjtMbDswO0w7PGZvbnQ+IDAwNkU7Ozs7Tjs7Ozs7CisxRDUyQztNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBPO0xsOzA7TDs8Zm9udD4gMDA2Rjs7OztOOzs7OzsKKzFENTJEO01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFA7TGw7MDtMOzxmb250PiAwMDcwOzs7O047Ozs7OworMUQ1MkU7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgUTtMbDswO0w7PGZvbnQ+IDAwNzE7Ozs7Tjs7Ozs7CisxRDUyRjtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBSO0xsOzA7TDs8Zm9udD4gMDA3Mjs7OztOOzs7OzsKKzFENTMwO01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFM7TGw7MDtMOzxmb250PiAwMDczOzs7O047Ozs7OworMUQ1MzE7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgVDtMbDswO0w7PGZvbnQ+IDAwNzQ7Ozs7Tjs7Ozs7CisxRDUzMjtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBVO0xsOzA7TDs8Zm9udD4gMDA3NTs7OztOOzs7OzsKKzFENTMzO01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFY7TGw7MDtMOzxmb250PiAwMDc2Ozs7O047Ozs7OworMUQ1MzQ7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgVztMbDswO0w7PGZvbnQ+IDAwNzc7Ozs7Tjs7Ozs7CisxRDUzNTtNQVRIRU1BVElDQUwgRlJBS1RVUiBTTUFMTCBYO0xsOzA7TDs8Zm9udD4gMDA3ODs7OztOOzs7OzsKKzFENTM2O01BVEhFTUFUSUNBTCBGUkFLVFVSIFNNQUxMIFk7TGw7MDtMOzxmb250PiAwMDc5Ozs7O047Ozs7OworMUQ1Mzc7TUFUSEVNQVRJQ0FMIEZSQUtUVVIgU01BTEwgWjtMbDswO0w7PGZvbnQ+IDAwN0E7Ozs7Tjs7Ozs7CisxRDUzODtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEE7THU7MDtMOzxmb250PiAwMDQxOzs7O047Ozs7OworMUQ1Mzk7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBCO0x1OzA7TDs8Zm9udD4gMDA0Mjs7OztOOzs7OzsKKzFENTNCO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIENBUElUQUwgRDtMdTswO0w7PGZvbnQ+IDAwNDQ7Ozs7Tjs7Ozs7CisxRDUzQztNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEU7THU7MDtMOzxmb250PiAwMDQ1Ozs7O047Ozs7OworMUQ1M0Q7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBGO0x1OzA7TDs8Zm9udD4gMDA0Njs7OztOOzs7OzsKKzFENTNFO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIENBUElUQUwgRztMdTswO0w7PGZvbnQ+IDAwNDc7Ozs7Tjs7Ozs7CisxRDU0MDtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047Ozs7OworMUQ1NDE7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBKO0x1OzA7TDs8Zm9udD4gMDA0QTs7OztOOzs7OzsKKzFENTQyO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIENBUElUQUwgSztMdTswO0w7PGZvbnQ+IDAwNEI7Ozs7Tjs7Ozs7CisxRDU0MztNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047Ozs7OworMUQ1NDQ7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBNO0x1OzA7TDs8Zm9udD4gMDA0RDs7OztOOzs7OzsKKzFENTQ2O01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIENBUElUQUwgTztMdTswO0w7PGZvbnQ+IDAwNEY7Ozs7Tjs7Ozs7CisxRDU0QTtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFM7THU7MDtMOzxmb250PiAwMDUzOzs7O047Ozs7OworMUQ1NEI7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBUO0x1OzA7TDs8Zm9udD4gMDA1NDs7OztOOzs7OzsKKzFENTRDO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIENBUElUQUwgVTtMdTswO0w7PGZvbnQ+IDAwNTU7Ozs7Tjs7Ozs7CisxRDU0RDtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFY7THU7MDtMOzxmb250PiAwMDU2Ozs7O047Ozs7OworMUQ1NEU7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgQ0FQSVRBTCBXO0x1OzA7TDs8Zm9udD4gMDA1Nzs7OztOOzs7OzsKKzFENTRGO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIENBUElUQUwgWDtMdTswO0w7PGZvbnQ+IDAwNTg7Ozs7Tjs7Ozs7CisxRDU1MDtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBDQVBJVEFMIFk7THU7MDtMOzxmb250PiAwMDU5Ozs7O047Ozs7OworMUQ1NTI7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgQTtMbDswO0w7PGZvbnQ+IDAwNjE7Ozs7Tjs7Ozs7CisxRDU1MztNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBCO0xsOzA7TDs8Zm9udD4gMDA2Mjs7OztOOzs7OzsKKzFENTU0O01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEM7TGw7MDtMOzxmb250PiAwMDYzOzs7O047Ozs7OworMUQ1NTU7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgRDtMbDswO0w7PGZvbnQ+IDAwNjQ7Ozs7Tjs7Ozs7CisxRDU1NjtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBFO0xsOzA7TDs8Zm9udD4gMDA2NTs7OztOOzs7OzsKKzFENTU3O01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEY7TGw7MDtMOzxmb250PiAwMDY2Ozs7O047Ozs7OworMUQ1NTg7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgRztMbDswO0w7PGZvbnQ+IDAwNjc7Ozs7Tjs7Ozs7CisxRDU1OTtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBIO0xsOzA7TDs8Zm9udD4gMDA2ODs7OztOOzs7OzsKKzFENTVBO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEk7TGw7MDtMOzxmb250PiAwMDY5Ozs7O047Ozs7OworMUQ1NUI7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgSjtMbDswO0w7PGZvbnQ+IDAwNkE7Ozs7Tjs7Ozs7CisxRDU1QztNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBLO0xsOzA7TDs8Zm9udD4gMDA2Qjs7OztOOzs7OzsKKzFENTVEO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIEw7TGw7MDtMOzxmb250PiAwMDZDOzs7O047Ozs7OworMUQ1NUU7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgTTtMbDswO0w7PGZvbnQ+IDAwNkQ7Ozs7Tjs7Ozs7CisxRDU1RjtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBOO0xsOzA7TDs8Zm9udD4gMDA2RTs7OztOOzs7OzsKKzFENTYwO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIE87TGw7MDtMOzxmb250PiAwMDZGOzs7O047Ozs7OworMUQ1NjE7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgUDtMbDswO0w7PGZvbnQ+IDAwNzA7Ozs7Tjs7Ozs7CisxRDU2MjtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBRO0xsOzA7TDs8Zm9udD4gMDA3MTs7OztOOzs7OzsKKzFENTYzO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFI7TGw7MDtMOzxmb250PiAwMDcyOzs7O047Ozs7OworMUQ1NjQ7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgUztMbDswO0w7PGZvbnQ+IDAwNzM7Ozs7Tjs7Ozs7CisxRDU2NTtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBUO0xsOzA7TDs8Zm9udD4gMDA3NDs7OztOOzs7OzsKKzFENTY2O01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFU7TGw7MDtMOzxmb250PiAwMDc1Ozs7O047Ozs7OworMUQ1Njc7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgVjtMbDswO0w7PGZvbnQ+IDAwNzY7Ozs7Tjs7Ozs7CisxRDU2ODtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBXO0xsOzA7TDs8Zm9udD4gMDA3Nzs7OztOOzs7OzsKKzFENTY5O01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIFNNQUxMIFg7TGw7MDtMOzxmb250PiAwMDc4Ozs7O047Ozs7OworMUQ1NkE7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgU01BTEwgWTtMbDswO0w7PGZvbnQ+IDAwNzk7Ozs7Tjs7Ozs7CisxRDU2QjtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBTTUFMTCBaO0xsOzA7TDs8Zm9udD4gMDA3QTs7OztOOzs7OzsKKzFENTZDO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBBO0x1OzA7TDs8Zm9udD4gMDA0MTs7OztOOzs7OzsKKzFENTZEO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBCO0x1OzA7TDs8Zm9udD4gMDA0Mjs7OztOOzs7OzsKKzFENTZFO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBDO0x1OzA7TDs8Zm9udD4gMDA0Mzs7OztOOzs7OzsKKzFENTZGO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBEO0x1OzA7TDs8Zm9udD4gMDA0NDs7OztOOzs7OzsKKzFENTcwO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBFO0x1OzA7TDs8Zm9udD4gMDA0NTs7OztOOzs7OzsKKzFENTcxO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBGO0x1OzA7TDs8Zm9udD4gMDA0Njs7OztOOzs7OzsKKzFENTcyO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBHO0x1OzA7TDs8Zm9udD4gMDA0Nzs7OztOOzs7OzsKKzFENTczO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBIO0x1OzA7TDs8Zm9udD4gMDA0ODs7OztOOzs7OzsKKzFENTc0O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBJO0x1OzA7TDs8Zm9udD4gMDA0OTs7OztOOzs7OzsKKzFENTc1O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBKO0x1OzA7TDs8Zm9udD4gMDA0QTs7OztOOzs7OzsKKzFENTc2O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBLO0x1OzA7TDs8Zm9udD4gMDA0Qjs7OztOOzs7OzsKKzFENTc3O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBMO0x1OzA7TDs8Zm9udD4gMDA0Qzs7OztOOzs7OzsKKzFENTc4O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBNO0x1OzA7TDs8Zm9udD4gMDA0RDs7OztOOzs7OzsKKzFENTc5O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBOO0x1OzA7TDs8Zm9udD4gMDA0RTs7OztOOzs7OzsKKzFENTdBO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBPO0x1OzA7TDs8Zm9udD4gMDA0Rjs7OztOOzs7OzsKKzFENTdCO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBQO0x1OzA7TDs8Zm9udD4gMDA1MDs7OztOOzs7OzsKKzFENTdDO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBRO0x1OzA7TDs8Zm9udD4gMDA1MTs7OztOOzs7OzsKKzFENTdEO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBSO0x1OzA7TDs8Zm9udD4gMDA1Mjs7OztOOzs7OzsKKzFENTdFO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBTO0x1OzA7TDs8Zm9udD4gMDA1Mzs7OztOOzs7OzsKKzFENTdGO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBUO0x1OzA7TDs8Zm9udD4gMDA1NDs7OztOOzs7OzsKKzFENTgwO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBVO0x1OzA7TDs8Zm9udD4gMDA1NTs7OztOOzs7OzsKKzFENTgxO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBWO0x1OzA7TDs8Zm9udD4gMDA1Njs7OztOOzs7OzsKKzFENTgyO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBXO0x1OzA7TDs8Zm9udD4gMDA1Nzs7OztOOzs7OzsKKzFENTgzO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBYO0x1OzA7TDs8Zm9udD4gMDA1ODs7OztOOzs7OzsKKzFENTg0O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBZO0x1OzA7TDs8Zm9udD4gMDA1OTs7OztOOzs7OzsKKzFENTg1O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgQ0FQSVRBTCBaO0x1OzA7TDs8Zm9udD4gMDA1QTs7OztOOzs7OzsKKzFENTg2O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgQTtMbDswO0w7PGZvbnQ+IDAwNjE7Ozs7Tjs7Ozs7CisxRDU4NztNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEI7TGw7MDtMOzxmb250PiAwMDYyOzs7O047Ozs7OworMUQ1ODg7TUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBDO0xsOzA7TDs8Zm9udD4gMDA2Mzs7OztOOzs7OzsKKzFENTg5O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgRDtMbDswO0w7PGZvbnQ+IDAwNjQ7Ozs7Tjs7Ozs7CisxRDU4QTtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEU7TGw7MDtMOzxmb250PiAwMDY1Ozs7O047Ozs7OworMUQ1OEI7TUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBGO0xsOzA7TDs8Zm9udD4gMDA2Njs7OztOOzs7OzsKKzFENThDO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgRztMbDswO0w7PGZvbnQ+IDAwNjc7Ozs7Tjs7Ozs7CisxRDU4RDtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEg7TGw7MDtMOzxmb250PiAwMDY4Ozs7O047Ozs7OworMUQ1OEU7TUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBJO0xsOzA7TDs8Zm9udD4gMDA2OTs7OztOOzs7OzsKKzFENThGO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgSjtMbDswO0w7PGZvbnQ+IDAwNkE7Ozs7Tjs7Ozs7CisxRDU5MDtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIEs7TGw7MDtMOzxmb250PiAwMDZCOzs7O047Ozs7OworMUQ1OTE7TUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBMO0xsOzA7TDs8Zm9udD4gMDA2Qzs7OztOOzs7OzsKKzFENTkyO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgTTtMbDswO0w7PGZvbnQ+IDAwNkQ7Ozs7Tjs7Ozs7CisxRDU5MztNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIE47TGw7MDtMOzxmb250PiAwMDZFOzs7O047Ozs7OworMUQ1OTQ7TUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBPO0xsOzA7TDs8Zm9udD4gMDA2Rjs7OztOOzs7OzsKKzFENTk1O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgUDtMbDswO0w7PGZvbnQ+IDAwNzA7Ozs7Tjs7Ozs7CisxRDU5NjtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFE7TGw7MDtMOzxmb250PiAwMDcxOzs7O047Ozs7OworMUQ1OTc7TUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBSO0xsOzA7TDs8Zm9udD4gMDA3Mjs7OztOOzs7OzsKKzFENTk4O01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgUztMbDswO0w7PGZvbnQ+IDAwNzM7Ozs7Tjs7Ozs7CisxRDU5OTtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFQ7TGw7MDtMOzxmb250PiAwMDc0Ozs7O047Ozs7OworMUQ1OUE7TUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBVO0xsOzA7TDs8Zm9udD4gMDA3NTs7OztOOzs7OzsKKzFENTlCO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgVjtMbDswO0w7PGZvbnQ+IDAwNzY7Ozs7Tjs7Ozs7CisxRDU5QztNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFc7TGw7MDtMOzxmb250PiAwMDc3Ozs7O047Ozs7OworMUQ1OUQ7TUFUSEVNQVRJQ0FMIEJPTEQgRlJBS1RVUiBTTUFMTCBYO0xsOzA7TDs8Zm9udD4gMDA3ODs7OztOOzs7OzsKKzFENTlFO01BVEhFTUFUSUNBTCBCT0xEIEZSQUtUVVIgU01BTEwgWTtMbDswO0w7PGZvbnQ+IDAwNzk7Ozs7Tjs7Ozs7CisxRDU5RjtNQVRIRU1BVElDQUwgQk9MRCBGUkFLVFVSIFNNQUxMIFo7TGw7MDtMOzxmb250PiAwMDdBOzs7O047Ozs7OworMUQ1QTA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBBO0x1OzA7TDs8Zm9udD4gMDA0MTs7OztOOzs7OzsKKzFENUExO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgQjtMdTswO0w7PGZvbnQ+IDAwNDI7Ozs7Tjs7Ozs7CisxRDVBMjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEM7THU7MDtMOzxmb250PiAwMDQzOzs7O047Ozs7OworMUQ1QTM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBEO0x1OzA7TDs8Zm9udD4gMDA0NDs7OztOOzs7OzsKKzFENUE0O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgRTtMdTswO0w7PGZvbnQ+IDAwNDU7Ozs7Tjs7Ozs7CisxRDVBNTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047Ozs7OworMUQ1QTY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBHO0x1OzA7TDs8Zm9udD4gMDA0Nzs7OztOOzs7OzsKKzFENUE3O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgSDtMdTswO0w7PGZvbnQ+IDAwNDg7Ozs7Tjs7Ozs7CisxRDVBODtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047Ozs7OworMUQ1QTk7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBKO0x1OzA7TDs8Zm9udD4gMDA0QTs7OztOOzs7OzsKKzFENUFBO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgSztMdTswO0w7PGZvbnQ+IDAwNEI7Ozs7Tjs7Ozs7CisxRDVBQjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047Ozs7OworMUQ1QUM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBNO0x1OzA7TDs8Zm9udD4gMDA0RDs7OztOOzs7OzsKKzFENUFEO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgTjtMdTswO0w7PGZvbnQ+IDAwNEU7Ozs7Tjs7Ozs7CisxRDVBRTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIE87THU7MDtMOzxmb250PiAwMDRGOzs7O047Ozs7OworMUQ1QUY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBQO0x1OzA7TDs8Zm9udD4gMDA1MDs7OztOOzs7OzsKKzFENUIwO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgUTtMdTswO0w7PGZvbnQ+IDAwNTE7Ozs7Tjs7Ozs7CisxRDVCMTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047Ozs7OworMUQ1QjI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBTO0x1OzA7TDs8Zm9udD4gMDA1Mzs7OztOOzs7OzsKKzFENUIzO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgVDtMdTswO0w7PGZvbnQ+IDAwNTQ7Ozs7Tjs7Ozs7CisxRDVCNDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFU7THU7MDtMOzxmb250PiAwMDU1Ozs7O047Ozs7OworMUQ1QjU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBWO0x1OzA7TDs8Zm9udD4gMDA1Njs7OztOOzs7OzsKKzFENUI2O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgVztMdTswO0w7PGZvbnQ+IDAwNTc7Ozs7Tjs7Ozs7CisxRDVCNztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBDQVBJVEFMIFg7THU7MDtMOzxmb250PiAwMDU4Ozs7O047Ozs7OworMUQ1Qjg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQ0FQSVRBTCBZO0x1OzA7TDs8Zm9udD4gMDA1OTs7OztOOzs7OzsKKzFENUI5O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIENBUElUQUwgWjtMdTswO0w7PGZvbnQ+IDAwNUE7Ozs7Tjs7Ozs7CisxRDVCQTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBBO0xsOzA7TDs8Zm9udD4gMDA2MTs7OztOOzs7OzsKKzFENUJCO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEI7TGw7MDtMOzxmb250PiAwMDYyOzs7O047Ozs7OworMUQ1QkM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgQztMbDswO0w7PGZvbnQ+IDAwNjM7Ozs7Tjs7Ozs7CisxRDVCRDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBEO0xsOzA7TDs8Zm9udD4gMDA2NDs7OztOOzs7OzsKKzFENUJFO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEU7TGw7MDtMOzxmb250PiAwMDY1Ozs7O047Ozs7OworMUQ1QkY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgRjtMbDswO0w7PGZvbnQ+IDAwNjY7Ozs7Tjs7Ozs7CisxRDVDMDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBHO0xsOzA7TDs8Zm9udD4gMDA2Nzs7OztOOzs7OzsKKzFENUMxO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEg7TGw7MDtMOzxmb250PiAwMDY4Ozs7O047Ozs7OworMUQ1QzI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgSTtMbDswO0w7PGZvbnQ+IDAwNjk7Ozs7Tjs7Ozs7CisxRDVDMztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBKO0xsOzA7TDs8Zm9udD4gMDA2QTs7OztOOzs7OzsKKzFENUM0O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIEs7TGw7MDtMOzxmb250PiAwMDZCOzs7O047Ozs7OworMUQ1QzU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgTDtMbDswO0w7PGZvbnQ+IDAwNkM7Ozs7Tjs7Ozs7CisxRDVDNjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBNO0xsOzA7TDs8Zm9udD4gMDA2RDs7OztOOzs7OzsKKzFENUM3O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIE47TGw7MDtMOzxmb250PiAwMDZFOzs7O047Ozs7OworMUQ1Qzg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgTztMbDswO0w7PGZvbnQ+IDAwNkY7Ozs7Tjs7Ozs7CisxRDVDOTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBQO0xsOzA7TDs8Zm9udD4gMDA3MDs7OztOOzs7OzsKKzFENUNBO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFE7TGw7MDtMOzxmb250PiAwMDcxOzs7O047Ozs7OworMUQ1Q0I7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgUjtMbDswO0w7PGZvbnQ+IDAwNzI7Ozs7Tjs7Ozs7CisxRDVDQztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBTO0xsOzA7TDs8Zm9udD4gMDA3Mzs7OztOOzs7OzsKKzFENUNEO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFQ7TGw7MDtMOzxmb250PiAwMDc0Ozs7O047Ozs7OworMUQ1Q0U7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgVTtMbDswO0w7PGZvbnQ+IDAwNzU7Ozs7Tjs7Ozs7CisxRDVDRjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBWO0xsOzA7TDs8Zm9udD4gMDA3Njs7OztOOzs7OzsKKzFENUQwO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFc7TGw7MDtMOzxmb250PiAwMDc3Ozs7O047Ozs7OworMUQ1RDE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgU01BTEwgWDtMbDswO0w7PGZvbnQ+IDAwNzg7Ozs7Tjs7Ozs7CisxRDVEMjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBTTUFMTCBZO0xsOzA7TDs8Zm9udD4gMDA3OTs7OztOOzs7OzsKKzFENUQzO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIFNNQUxMIFo7TGw7MDtMOzxmb250PiAwMDdBOzs7O047Ozs7OworMUQ1RDQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEE7THU7MDtMOzxmb250PiAwMDQxOzs7O047Ozs7OworMUQ1RDU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEI7THU7MDtMOzxmb250PiAwMDQyOzs7O047Ozs7OworMUQ1RDY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEM7THU7MDtMOzxmb250PiAwMDQzOzs7O047Ozs7OworMUQ1RDc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEQ7THU7MDtMOzxmb250PiAwMDQ0Ozs7O047Ozs7OworMUQ1RDg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEU7THU7MDtMOzxmb250PiAwMDQ1Ozs7O047Ozs7OworMUQ1RDk7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047Ozs7OworMUQ1REE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEc7THU7MDtMOzxmb250PiAwMDQ3Ozs7O047Ozs7OworMUQ1REI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEg7THU7MDtMOzxmb250PiAwMDQ4Ozs7O047Ozs7OworMUQ1REM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047Ozs7OworMUQ1REQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEo7THU7MDtMOzxmb250PiAwMDRBOzs7O047Ozs7OworMUQ1REU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEs7THU7MDtMOzxmb250PiAwMDRCOzs7O047Ozs7OworMUQ1REY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047Ozs7OworMUQ1RTA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIE07THU7MDtMOzxmb250PiAwMDREOzs7O047Ozs7OworMUQ1RTE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIE47THU7MDtMOzxmb250PiAwMDRFOzs7O047Ozs7OworMUQ1RTI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIE87THU7MDtMOzxmb250PiAwMDRGOzs7O047Ozs7OworMUQ1RTM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFA7THU7MDtMOzxmb250PiAwMDUwOzs7O047Ozs7OworMUQ1RTQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFE7THU7MDtMOzxmb250PiAwMDUxOzs7O047Ozs7OworMUQ1RTU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047Ozs7OworMUQ1RTY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFM7THU7MDtMOzxmb250PiAwMDUzOzs7O047Ozs7OworMUQ1RTc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFQ7THU7MDtMOzxmb250PiAwMDU0Ozs7O047Ozs7OworMUQ1RTg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFU7THU7MDtMOzxmb250PiAwMDU1Ozs7O047Ozs7OworMUQ1RTk7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFY7THU7MDtMOzxmb250PiAwMDU2Ozs7O047Ozs7OworMUQ1RUE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFc7THU7MDtMOzxmb250PiAwMDU3Ozs7O047Ozs7OworMUQ1RUI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFg7THU7MDtMOzxmb250PiAwMDU4Ozs7O047Ozs7OworMUQ1RUM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFk7THU7MDtMOzxmb250PiAwMDU5Ozs7O047Ozs7OworMUQ1RUQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFo7THU7MDtMOzxmb250PiAwMDVBOzs7O047Ozs7OworMUQ1RUU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBBO0xsOzA7TDs8Zm9udD4gMDA2MTs7OztOOzs7OzsKKzFENUVGO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgQjtMbDswO0w7PGZvbnQ+IDAwNjI7Ozs7Tjs7Ozs7CisxRDVGMDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEM7TGw7MDtMOzxmb250PiAwMDYzOzs7O047Ozs7OworMUQ1RjE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBEO0xsOzA7TDs8Zm9udD4gMDA2NDs7OztOOzs7OzsKKzFENUYyO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgRTtMbDswO0w7PGZvbnQ+IDAwNjU7Ozs7Tjs7Ozs7CisxRDVGMztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEY7TGw7MDtMOzxmb250PiAwMDY2Ozs7O047Ozs7OworMUQ1RjQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBHO0xsOzA7TDs8Zm9udD4gMDA2Nzs7OztOOzs7OzsKKzFENUY1O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgSDtMbDswO0w7PGZvbnQ+IDAwNjg7Ozs7Tjs7Ozs7CisxRDVGNjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEk7TGw7MDtMOzxmb250PiAwMDY5Ozs7O047Ozs7OworMUQ1Rjc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBKO0xsOzA7TDs8Zm9udD4gMDA2QTs7OztOOzs7OzsKKzFENUY4O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgSztMbDswO0w7PGZvbnQ+IDAwNkI7Ozs7Tjs7Ozs7CisxRDVGOTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEw7TGw7MDtMOzxmb250PiAwMDZDOzs7O047Ozs7OworMUQ1RkE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBNO0xsOzA7TDs8Zm9udD4gMDA2RDs7OztOOzs7OzsKKzFENUZCO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgTjtMbDswO0w7PGZvbnQ+IDAwNkU7Ozs7Tjs7Ozs7CisxRDVGQztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIE87TGw7MDtMOzxmb250PiAwMDZGOzs7O047Ozs7OworMUQ1RkQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBQO0xsOzA7TDs8Zm9udD4gMDA3MDs7OztOOzs7OzsKKzFENUZFO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgUTtMbDswO0w7PGZvbnQ+IDAwNzE7Ozs7Tjs7Ozs7CisxRDVGRjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFI7TGw7MDtMOzxmb250PiAwMDcyOzs7O047Ozs7OworMUQ2MDA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBTO0xsOzA7TDs8Zm9udD4gMDA3Mzs7OztOOzs7OzsKKzFENjAxO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgVDtMbDswO0w7PGZvbnQ+IDAwNzQ7Ozs7Tjs7Ozs7CisxRDYwMjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFU7TGw7MDtMOzxmb250PiAwMDc1Ozs7O047Ozs7OworMUQ2MDM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBWO0xsOzA7TDs8Zm9udD4gMDA3Njs7OztOOzs7OzsKKzFENjA0O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgVztMbDswO0w7PGZvbnQ+IDAwNzc7Ozs7Tjs7Ozs7CisxRDYwNTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFg7TGw7MDtMOzxmb250PiAwMDc4Ozs7O047Ozs7OworMUQ2MDY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBZO0xsOzA7TDs8Zm9udD4gMDA3OTs7OztOOzs7OzsKKzFENjA3O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgWjtMbDswO0w7PGZvbnQ+IDAwN0E7Ozs7Tjs7Ozs7CisxRDYwODtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBBO0x1OzA7TDs8Zm9udD4gMDA0MTs7OztOOzs7OzsKKzFENjA5O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEI7THU7MDtMOzxmb250PiAwMDQyOzs7O047Ozs7OworMUQ2MEE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgQztMdTswO0w7PGZvbnQ+IDAwNDM7Ozs7Tjs7Ozs7CisxRDYwQjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBEO0x1OzA7TDs8Zm9udD4gMDA0NDs7OztOOzs7OzsKKzFENjBDO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEU7THU7MDtMOzxmb250PiAwMDQ1Ozs7O047Ozs7OworMUQ2MEQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgRjtMdTswO0w7PGZvbnQ+IDAwNDY7Ozs7Tjs7Ozs7CisxRDYwRTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBHO0x1OzA7TDs8Zm9udD4gMDA0Nzs7OztOOzs7OzsKKzFENjBGO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEg7THU7MDtMOzxmb250PiAwMDQ4Ozs7O047Ozs7OworMUQ2MTA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgSTtMdTswO0w7PGZvbnQ+IDAwNDk7Ozs7Tjs7Ozs7CisxRDYxMTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBKO0x1OzA7TDs8Zm9udD4gMDA0QTs7OztOOzs7OzsKKzFENjEyO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIEs7THU7MDtMOzxmb250PiAwMDRCOzs7O047Ozs7OworMUQ2MTM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgTDtMdTswO0w7PGZvbnQ+IDAwNEM7Ozs7Tjs7Ozs7CisxRDYxNDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBNO0x1OzA7TDs8Zm9udD4gMDA0RDs7OztOOzs7OzsKKzFENjE1O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIE47THU7MDtMOzxmb250PiAwMDRFOzs7O047Ozs7OworMUQ2MTY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgTztMdTswO0w7PGZvbnQ+IDAwNEY7Ozs7Tjs7Ozs7CisxRDYxNztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBQO0x1OzA7TDs8Zm9udD4gMDA1MDs7OztOOzs7OzsKKzFENjE4O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFE7THU7MDtMOzxmb250PiAwMDUxOzs7O047Ozs7OworMUQ2MTk7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgUjtMdTswO0w7PGZvbnQ+IDAwNTI7Ozs7Tjs7Ozs7CisxRDYxQTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBTO0x1OzA7TDs8Zm9udD4gMDA1Mzs7OztOOzs7OzsKKzFENjFCO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFQ7THU7MDtMOzxmb250PiAwMDU0Ozs7O047Ozs7OworMUQ2MUM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgVTtMdTswO0w7PGZvbnQ+IDAwNTU7Ozs7Tjs7Ozs7CisxRDYxRDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBWO0x1OzA7TDs8Zm9udD4gMDA1Njs7OztOOzs7OzsKKzFENjFFO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFc7THU7MDtMOzxmb250PiAwMDU3Ozs7O047Ozs7OworMUQ2MUY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIENBUElUQUwgWDtMdTswO0w7PGZvbnQ+IDAwNTg7Ozs7Tjs7Ozs7CisxRDYyMDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBJVEFMSUMgQ0FQSVRBTCBZO0x1OzA7TDs8Zm9udD4gMDA1OTs7OztOOzs7OzsKKzFENjIxO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIElUQUxJQyBDQVBJVEFMIFo7THU7MDtMOzxmb250PiAwMDVBOzs7O047Ozs7OworMUQ2MjI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEE7TGw7MDtMOzxmb250PiAwMDYxOzs7O047Ozs7OworMUQ2MjM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEI7TGw7MDtMOzxmb250PiAwMDYyOzs7O047Ozs7OworMUQ2MjQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEM7TGw7MDtMOzxmb250PiAwMDYzOzs7O047Ozs7OworMUQ2MjU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEQ7TGw7MDtMOzxmb250PiAwMDY0Ozs7O047Ozs7OworMUQ2MjY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEU7TGw7MDtMOzxmb250PiAwMDY1Ozs7O047Ozs7OworMUQ2Mjc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEY7TGw7MDtMOzxmb250PiAwMDY2Ozs7O047Ozs7OworMUQ2Mjg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEc7TGw7MDtMOzxmb250PiAwMDY3Ozs7O047Ozs7OworMUQ2Mjk7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEg7TGw7MDtMOzxmb250PiAwMDY4Ozs7O047Ozs7OworMUQ2MkE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEk7TGw7MDtMOzxmb250PiAwMDY5Ozs7O047Ozs7OworMUQ2MkI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEo7TGw7MDtMOzxmb250PiAwMDZBOzs7O047Ozs7OworMUQ2MkM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEs7TGw7MDtMOzxmb250PiAwMDZCOzs7O047Ozs7OworMUQ2MkQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIEw7TGw7MDtMOzxmb250PiAwMDZDOzs7O047Ozs7OworMUQ2MkU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIE07TGw7MDtMOzxmb250PiAwMDZEOzs7O047Ozs7OworMUQ2MkY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIE47TGw7MDtMOzxmb250PiAwMDZFOzs7O047Ozs7OworMUQ2MzA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIE87TGw7MDtMOzxmb250PiAwMDZGOzs7O047Ozs7OworMUQ2MzE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFA7TGw7MDtMOzxmb250PiAwMDcwOzs7O047Ozs7OworMUQ2MzI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFE7TGw7MDtMOzxmb250PiAwMDcxOzs7O047Ozs7OworMUQ2MzM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFI7TGw7MDtMOzxmb250PiAwMDcyOzs7O047Ozs7OworMUQ2MzQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFM7TGw7MDtMOzxmb250PiAwMDczOzs7O047Ozs7OworMUQ2MzU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFQ7TGw7MDtMOzxmb250PiAwMDc0Ozs7O047Ozs7OworMUQ2MzY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFU7TGw7MDtMOzxmb250PiAwMDc1Ozs7O047Ozs7OworMUQ2Mzc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFY7TGw7MDtMOzxmb250PiAwMDc2Ozs7O047Ozs7OworMUQ2Mzg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFc7TGw7MDtMOzxmb250PiAwMDc3Ozs7O047Ozs7OworMUQ2Mzk7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFg7TGw7MDtMOzxmb250PiAwMDc4Ozs7O047Ozs7OworMUQ2M0E7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFk7TGw7MDtMOzxmb250PiAwMDc5Ozs7O047Ozs7OworMUQ2M0I7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgSVRBTElDIFNNQUxMIFo7TGw7MDtMOzxmb250PiAwMDdBOzs7O047Ozs7OworMUQ2M0M7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBBO0x1OzA7TDs8Zm9udD4gMDA0MTs7OztOOzs7OzsKKzFENjNEO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgQjtMdTswO0w7PGZvbnQ+IDAwNDI7Ozs7Tjs7Ozs7CisxRDYzRTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEM7THU7MDtMOzxmb250PiAwMDQzOzs7O047Ozs7OworMUQ2M0Y7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBEO0x1OzA7TDs8Zm9udD4gMDA0NDs7OztOOzs7OzsKKzFENjQwO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgRTtMdTswO0w7PGZvbnQ+IDAwNDU7Ozs7Tjs7Ozs7CisxRDY0MTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047Ozs7OworMUQ2NDI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBHO0x1OzA7TDs8Zm9udD4gMDA0Nzs7OztOOzs7OzsKKzFENjQzO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgSDtMdTswO0w7PGZvbnQ+IDAwNDg7Ozs7Tjs7Ozs7CisxRDY0NDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047Ozs7OworMUQ2NDU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBKO0x1OzA7TDs8Zm9udD4gMDA0QTs7OztOOzs7OzsKKzFENjQ2O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgSztMdTswO0w7PGZvbnQ+IDAwNEI7Ozs7Tjs7Ozs7CisxRDY0NztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047Ozs7OworMUQ2NDg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBNO0x1OzA7TDs8Zm9udD4gMDA0RDs7OztOOzs7OzsKKzFENjQ5O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgTjtMdTswO0w7PGZvbnQ+IDAwNEU7Ozs7Tjs7Ozs7CisxRDY0QTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE87THU7MDtMOzxmb250PiAwMDRGOzs7O047Ozs7OworMUQ2NEI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBQO0x1OzA7TDs8Zm9udD4gMDA1MDs7OztOOzs7OzsKKzFENjRDO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgUTtMdTswO0w7PGZvbnQ+IDAwNTE7Ozs7Tjs7Ozs7CisxRDY0RDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047Ozs7OworMUQ2NEU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBTO0x1OzA7TDs8Zm9udD4gMDA1Mzs7OztOOzs7OzsKKzFENjRGO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgVDtMdTswO0w7PGZvbnQ+IDAwNTQ7Ozs7Tjs7Ozs7CisxRDY1MDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFU7THU7MDtMOzxmb250PiAwMDU1Ozs7O047Ozs7OworMUQ2NTE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBWO0x1OzA7TDs8Zm9udD4gMDA1Njs7OztOOzs7OzsKKzFENjUyO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgVztMdTswO0w7PGZvbnQ+IDAwNTc7Ozs7Tjs7Ozs7CisxRDY1MztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFg7THU7MDtMOzxmb250PiAwMDU4Ozs7O047Ozs7OworMUQ2NTQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBZO0x1OzA7TDs8Zm9udD4gMDA1OTs7OztOOzs7OzsKKzFENjU1O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgWjtMdTswO0w7PGZvbnQ+IDAwNUE7Ozs7Tjs7Ozs7CisxRDY1NjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBBO0xsOzA7TDs8Zm9udD4gMDA2MTs7OztOOzs7OzsKKzFENjU3O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEI7TGw7MDtMOzxmb250PiAwMDYyOzs7O047Ozs7OworMUQ2NTg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgQztMbDswO0w7PGZvbnQ+IDAwNjM7Ozs7Tjs7Ozs7CisxRDY1OTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBEO0xsOzA7TDs8Zm9udD4gMDA2NDs7OztOOzs7OzsKKzFENjVBO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEU7TGw7MDtMOzxmb250PiAwMDY1Ozs7O047Ozs7OworMUQ2NUI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgRjtMbDswO0w7PGZvbnQ+IDAwNjY7Ozs7Tjs7Ozs7CisxRDY1QztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBHO0xsOzA7TDs8Zm9udD4gMDA2Nzs7OztOOzs7OzsKKzFENjVEO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEg7TGw7MDtMOzxmb250PiAwMDY4Ozs7O047Ozs7OworMUQ2NUU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgSTtMbDswO0w7PGZvbnQ+IDAwNjk7Ozs7Tjs7Ozs7CisxRDY1RjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBKO0xsOzA7TDs8Zm9udD4gMDA2QTs7OztOOzs7OzsKKzFENjYwO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEs7TGw7MDtMOzxmb250PiAwMDZCOzs7O047Ozs7OworMUQ2NjE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgTDtMbDswO0w7PGZvbnQ+IDAwNkM7Ozs7Tjs7Ozs7CisxRDY2MjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBNO0xsOzA7TDs8Zm9udD4gMDA2RDs7OztOOzs7OzsKKzFENjYzO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIE47TGw7MDtMOzxmb250PiAwMDZFOzs7O047Ozs7OworMUQ2NjQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgTztMbDswO0w7PGZvbnQ+IDAwNkY7Ozs7Tjs7Ozs7CisxRDY2NTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBQO0xsOzA7TDs8Zm9udD4gMDA3MDs7OztOOzs7OzsKKzFENjY2O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFE7TGw7MDtMOzxmb250PiAwMDcxOzs7O047Ozs7OworMUQ2Njc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgUjtMbDswO0w7PGZvbnQ+IDAwNzI7Ozs7Tjs7Ozs7CisxRDY2ODtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBTO0xsOzA7TDs8Zm9udD4gMDA3Mzs7OztOOzs7OzsKKzFENjY5O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFQ7TGw7MDtMOzxmb250PiAwMDc0Ozs7O047Ozs7OworMUQ2NkE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgVTtMbDswO0w7PGZvbnQ+IDAwNzU7Ozs7Tjs7Ozs7CisxRDY2QjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBWO0xsOzA7TDs8Zm9udD4gMDA3Njs7OztOOzs7OzsKKzFENjZDO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFc7TGw7MDtMOzxmb250PiAwMDc3Ozs7O047Ozs7OworMUQ2NkQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgWDtMbDswO0w7PGZvbnQ+IDAwNzg7Ozs7Tjs7Ozs7CisxRDY2RTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBZO0xsOzA7TDs8Zm9udD4gMDA3OTs7OztOOzs7OzsKKzFENjZGO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFo7TGw7MDtMOzxmb250PiAwMDdBOzs7O047Ozs7OworMUQ2NzA7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEE7THU7MDtMOzxmb250PiAwMDQxOzs7O047Ozs7OworMUQ2NzE7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEI7THU7MDtMOzxmb250PiAwMDQyOzs7O047Ozs7OworMUQ2NzI7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEM7THU7MDtMOzxmb250PiAwMDQzOzs7O047Ozs7OworMUQ2NzM7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEQ7THU7MDtMOzxmb250PiAwMDQ0Ozs7O047Ozs7OworMUQ2NzQ7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEU7THU7MDtMOzxmb250PiAwMDQ1Ozs7O047Ozs7OworMUQ2NzU7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEY7THU7MDtMOzxmb250PiAwMDQ2Ozs7O047Ozs7OworMUQ2NzY7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEc7THU7MDtMOzxmb250PiAwMDQ3Ozs7O047Ozs7OworMUQ2Nzc7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEg7THU7MDtMOzxmb250PiAwMDQ4Ozs7O047Ozs7OworMUQ2Nzg7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEk7THU7MDtMOzxmb250PiAwMDQ5Ozs7O047Ozs7OworMUQ2Nzk7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEo7THU7MDtMOzxmb250PiAwMDRBOzs7O047Ozs7OworMUQ2N0E7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEs7THU7MDtMOzxmb250PiAwMDRCOzs7O047Ozs7OworMUQ2N0I7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIEw7THU7MDtMOzxmb250PiAwMDRDOzs7O047Ozs7OworMUQ2N0M7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIE07THU7MDtMOzxmb250PiAwMDREOzs7O047Ozs7OworMUQ2N0Q7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIE47THU7MDtMOzxmb250PiAwMDRFOzs7O047Ozs7OworMUQ2N0U7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIE87THU7MDtMOzxmb250PiAwMDRGOzs7O047Ozs7OworMUQ2N0Y7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFA7THU7MDtMOzxmb250PiAwMDUwOzs7O047Ozs7OworMUQ2ODA7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFE7THU7MDtMOzxmb250PiAwMDUxOzs7O047Ozs7OworMUQ2ODE7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFI7THU7MDtMOzxmb250PiAwMDUyOzs7O047Ozs7OworMUQ2ODI7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFM7THU7MDtMOzxmb250PiAwMDUzOzs7O047Ozs7OworMUQ2ODM7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFQ7THU7MDtMOzxmb250PiAwMDU0Ozs7O047Ozs7OworMUQ2ODQ7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFU7THU7MDtMOzxmb250PiAwMDU1Ozs7O047Ozs7OworMUQ2ODU7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFY7THU7MDtMOzxmb250PiAwMDU2Ozs7O047Ozs7OworMUQ2ODY7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFc7THU7MDtMOzxmb250PiAwMDU3Ozs7O047Ozs7OworMUQ2ODc7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFg7THU7MDtMOzxmb250PiAwMDU4Ozs7O047Ozs7OworMUQ2ODg7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFk7THU7MDtMOzxmb250PiAwMDU5Ozs7O047Ozs7OworMUQ2ODk7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBDQVBJVEFMIFo7THU7MDtMOzxmb250PiAwMDVBOzs7O047Ozs7OworMUQ2OEE7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBBO0xsOzA7TDs8Zm9udD4gMDA2MTs7OztOOzs7OzsKKzFENjhCO01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgQjtMbDswO0w7PGZvbnQ+IDAwNjI7Ozs7Tjs7Ozs7CisxRDY4QztNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEM7TGw7MDtMOzxmb250PiAwMDYzOzs7O047Ozs7OworMUQ2OEQ7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBEO0xsOzA7TDs8Zm9udD4gMDA2NDs7OztOOzs7OzsKKzFENjhFO01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgRTtMbDswO0w7PGZvbnQ+IDAwNjU7Ozs7Tjs7Ozs7CisxRDY4RjtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEY7TGw7MDtMOzxmb250PiAwMDY2Ozs7O047Ozs7OworMUQ2OTA7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBHO0xsOzA7TDs8Zm9udD4gMDA2Nzs7OztOOzs7OzsKKzFENjkxO01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgSDtMbDswO0w7PGZvbnQ+IDAwNjg7Ozs7Tjs7Ozs7CisxRDY5MjtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEk7TGw7MDtMOzxmb250PiAwMDY5Ozs7O047Ozs7OworMUQ2OTM7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBKO0xsOzA7TDs8Zm9udD4gMDA2QTs7OztOOzs7OzsKKzFENjk0O01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgSztMbDswO0w7PGZvbnQ+IDAwNkI7Ozs7Tjs7Ozs7CisxRDY5NTtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIEw7TGw7MDtMOzxmb250PiAwMDZDOzs7O047Ozs7OworMUQ2OTY7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBNO0xsOzA7TDs8Zm9udD4gMDA2RDs7OztOOzs7OzsKKzFENjk3O01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgTjtMbDswO0w7PGZvbnQ+IDAwNkU7Ozs7Tjs7Ozs7CisxRDY5ODtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIE87TGw7MDtMOzxmb250PiAwMDZGOzs7O047Ozs7OworMUQ2OTk7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBQO0xsOzA7TDs8Zm9udD4gMDA3MDs7OztOOzs7OzsKKzFENjlBO01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgUTtMbDswO0w7PGZvbnQ+IDAwNzE7Ozs7Tjs7Ozs7CisxRDY5QjtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFI7TGw7MDtMOzxmb250PiAwMDcyOzs7O047Ozs7OworMUQ2OUM7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBTO0xsOzA7TDs8Zm9udD4gMDA3Mzs7OztOOzs7OzsKKzFENjlEO01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgVDtMbDswO0w7PGZvbnQ+IDAwNzQ7Ozs7Tjs7Ozs7CisxRDY5RTtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFU7TGw7MDtMOzxmb250PiAwMDc1Ozs7O047Ozs7OworMUQ2OUY7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBWO0xsOzA7TDs8Zm9udD4gMDA3Njs7OztOOzs7OzsKKzFENkEwO01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgVztMbDswO0w7PGZvbnQ+IDAwNzc7Ozs7Tjs7Ozs7CisxRDZBMTtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIFNNQUxMIFg7TGw7MDtMOzxmb250PiAwMDc4Ozs7O047Ozs7OworMUQ2QTI7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBTTUFMTCBZO0xsOzA7TDs8Zm9udD4gMDA3OTs7OztOOzs7OzsKKzFENkEzO01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgU01BTEwgWjtMbDswO0w7PGZvbnQ+IDAwN0E7Ozs7Tjs7Ozs7CisxRDZBODtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEFMUEhBO0x1OzA7TDs8Zm9udD4gMDM5MTs7OztOOzs7OzsKKzFENkE5O01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgQkVUQTtMdTswO0w7PGZvbnQ+IDAzOTI7Ozs7Tjs7Ozs7CisxRDZBQTtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEdBTU1BO0x1OzA7TDs8Zm9udD4gMDM5Mzs7OztOOzs7OzsKKzFENkFCO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgREVMVEE7THU7MDtMOzxmb250PiAwMzk0Ozs7O047Ozs7OworMUQ2QUM7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBFUFNJTE9OO0x1OzA7TDs8Zm9udD4gMDM5NTs7OztOOzs7OzsKKzFENkFEO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgWkVUQTtMdTswO0w7PGZvbnQ+IDAzOTY7Ozs7Tjs7Ozs7CisxRDZBRTtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEVUQTtMdTswO0w7PGZvbnQ+IDAzOTc7Ozs7Tjs7Ozs7CisxRDZBRjtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIFRIRVRBO0x1OzA7TDs8Zm9udD4gMDM5ODs7OztOOzs7OzsKKzFENkIwO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgSU9UQTtMdTswO0w7PGZvbnQ+IDAzOTk7Ozs7Tjs7Ozs7CisxRDZCMTtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIEtBUFBBO0x1OzA7TDs8Zm9udD4gMDM5QTs7OztOOzs7OzsKKzFENkIyO01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgTEFNREE7THU7MDtMOzxmb250PiAwMzlCOzs7O047Ozs7OworMUQ2QjM7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBNVTtMdTswO0w7PGZvbnQ+IDAzOUM7Ozs7Tjs7Ozs7CisxRDZCNDtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIE5VO0x1OzA7TDs8Zm9udD4gMDM5RDs7OztOOzs7OzsKKzFENkI1O01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgWEk7THU7MDtMOzxmb250PiAwMzlFOzs7O047Ozs7OworMUQ2QjY7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBPTUlDUk9OO0x1OzA7TDs8Zm9udD4gMDM5Rjs7OztOOzs7OzsKKzFENkI3O01BVEhFTUFUSUNBTCBCT0xEIENBUElUQUwgUEk7THU7MDtMOzxmb250PiAwM0EwOzs7O047Ozs7OworMUQ2Qjg7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBSSE87THU7MDtMOzxmb250PiAwM0ExOzs7O047Ozs7OworMUQ2Qjk7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBUSEVUQSBTWU1CT0w7THU7MDtMOzxmb250PiAwM0Y0Ozs7O047Ozs7OworMUQ2QkE7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBTSUdNQTtMdTswO0w7PGZvbnQ+IDAzQTM7Ozs7Tjs7Ozs7CisxRDZCQjtNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIFRBVTtMdTswO0w7PGZvbnQ+IDAzQTQ7Ozs7Tjs7Ozs7CisxRDZCQztNQVRIRU1BVElDQUwgQk9MRCBDQVBJVEFMIFVQU0lMT047THU7MDtMOzxmb250PiAwM0E1Ozs7O047Ozs7OworMUQ2QkQ7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBQSEk7THU7MDtMOzxmb250PiAwM0E2Ozs7O047Ozs7OworMUQ2QkU7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBDSEk7THU7MDtMOzxmb250PiAwM0E3Ozs7O047Ozs7OworMUQ2QkY7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBQU0k7THU7MDtMOzxmb250PiAwM0E4Ozs7O047Ozs7OworMUQ2QzA7TUFUSEVNQVRJQ0FMIEJPTEQgQ0FQSVRBTCBPTUVHQTtMdTswO0w7PGZvbnQ+IDAzQTk7Ozs7Tjs7Ozs7CisxRDZDMTtNQVRIRU1BVElDQUwgQk9MRCBOQUJMQTtTbTswO0w7PGZvbnQ+IDIyMDc7Ozs7Tjs7Ozs7CisxRDZDMjtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBBTFBIQTtMbDswO0w7PGZvbnQ+IDAzQjE7Ozs7Tjs7Ozs7CisxRDZDMztNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBCRVRBO0xsOzA7TDs8Zm9udD4gMDNCMjs7OztOOzs7OzsKKzFENkM0O01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEdBTU1BO0xsOzA7TDs8Zm9udD4gMDNCMzs7OztOOzs7OzsKKzFENkM1O01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIERFTFRBO0xsOzA7TDs8Zm9udD4gMDNCNDs7OztOOzs7OzsKKzFENkM2O01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIEVQU0lMT047TGw7MDtMOzxmb250PiAwM0I1Ozs7O047Ozs7OworMUQ2Qzc7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgWkVUQTtMbDswO0w7PGZvbnQ+IDAzQjY7Ozs7Tjs7Ozs7CisxRDZDODtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBFVEE7TGw7MDtMOzxmb250PiAwM0I3Ozs7O047Ozs7OworMUQ2Qzk7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgVEhFVEE7TGw7MDtMOzxmb250PiAwM0I4Ozs7O047Ozs7OworMUQ2Q0E7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgSU9UQTtMbDswO0w7PGZvbnQ+IDAzQjk7Ozs7Tjs7Ozs7CisxRDZDQjtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBLQVBQQTtMbDswO0w7PGZvbnQ+IDAzQkE7Ozs7Tjs7Ozs7CisxRDZDQztNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBMQU1EQTtMbDswO0w7PGZvbnQ+IDAzQkI7Ozs7Tjs7Ozs7CisxRDZDRDtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBNVTtMbDswO0w7PGZvbnQ+IDAzQkM7Ozs7Tjs7Ozs7CisxRDZDRTtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBOVTtMbDswO0w7PGZvbnQ+IDAzQkQ7Ozs7Tjs7Ozs7CisxRDZDRjtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBYSTtMbDswO0w7PGZvbnQ+IDAzQkU7Ozs7Tjs7Ozs7CisxRDZEMDtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBPTUlDUk9OO0xsOzA7TDs8Zm9udD4gMDNCRjs7OztOOzs7OzsKKzFENkQxO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFBJO0xsOzA7TDs8Zm9udD4gMDNDMDs7OztOOzs7OzsKKzFENkQyO01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFJITztMbDswO0w7PGZvbnQ+IDAzQzE7Ozs7Tjs7Ozs7CisxRDZEMztNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBGSU5BTCBTSUdNQTtMbDswO0w7PGZvbnQ+IDAzQzI7Ozs7Tjs7Ozs7CisxRDZENDtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBTSUdNQTtMbDswO0w7PGZvbnQ+IDAzQzM7Ozs7Tjs7Ozs7CisxRDZENTtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBUQVU7TGw7MDtMOzxmb250PiAwM0M0Ozs7O047Ozs7OworMUQ2RDY7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgVVBTSUxPTjtMbDswO0w7PGZvbnQ+IDAzQzU7Ozs7Tjs7Ozs7CisxRDZENztNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBQSEk7TGw7MDtMOzxmb250PiAwM0M2Ozs7O047Ozs7OworMUQ2RDg7TUFUSEVNQVRJQ0FMIEJPTEQgU01BTEwgQ0hJO0xsOzA7TDs8Zm9udD4gMDNDNzs7OztOOzs7OzsKKzFENkQ5O01BVEhFTUFUSUNBTCBCT0xEIFNNQUxMIFBTSTtMbDswO0w7PGZvbnQ+IDAzQzg7Ozs7Tjs7Ozs7CisxRDZEQTtNQVRIRU1BVElDQUwgQk9MRCBTTUFMTCBPTUVHQTtMbDswO0w7PGZvbnQ+IDAzQzk7Ozs7Tjs7Ozs7CisxRDZEQjtNQVRIRU1BVElDQUwgQk9MRCBQQVJUSUFMIERJRkZFUkVOVElBTDtTbTswO0w7PGZvbnQ+IDIyMDI7Ozs7Tjs7Ozs7CisxRDZEQztNQVRIRU1BVElDQUwgQk9MRCBFUFNJTE9OIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRjU7Ozs7Tjs7Ozs7CisxRDZERDtNQVRIRU1BVElDQUwgQk9MRCBUSEVUQSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0QxOzs7O047Ozs7OworMUQ2REU7TUFUSEVNQVRJQ0FMIEJPTEQgS0FQUEEgU1lNQk9MO0xsOzA7TDs8Zm9udD4gMDNGMDs7OztOOzs7OzsKKzFENkRGO01BVEhFTUFUSUNBTCBCT0xEIFBISSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0Q1Ozs7O047Ozs7OworMUQ2RTA7TUFUSEVNQVRJQ0FMIEJPTEQgUkhPIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRjE7Ozs7Tjs7Ozs7CisxRDZFMTtNQVRIRU1BVElDQUwgQk9MRCBQSSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0Q2Ozs7O047Ozs7OworMUQ2RTI7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEFMUEhBO0x1OzA7TDs8Zm9udD4gMDM5MTs7OztOOzs7OzsKKzFENkUzO01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBCRVRBO0x1OzA7TDs8Zm9udD4gMDM5Mjs7OztOOzs7OzsKKzFENkU0O01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBHQU1NQTtMdTswO0w7PGZvbnQ+IDAzOTM7Ozs7Tjs7Ozs7CisxRDZFNTtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgREVMVEE7THU7MDtMOzxmb250PiAwMzk0Ozs7O047Ozs7OworMUQ2RTY7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEVQU0lMT047THU7MDtMOzxmb250PiAwMzk1Ozs7O047Ozs7OworMUQ2RTc7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFpFVEE7THU7MDtMOzxmb250PiAwMzk2Ozs7O047Ozs7OworMUQ2RTg7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEVUQTtMdTswO0w7PGZvbnQ+IDAzOTc7Ozs7Tjs7Ozs7CisxRDZFOTtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgVEhFVEE7THU7MDtMOzxmb250PiAwMzk4Ozs7O047Ozs7OworMUQ2RUE7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIElPVEE7THU7MDtMOzxmb250PiAwMzk5Ozs7O047Ozs7OworMUQ2RUI7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIEtBUFBBO0x1OzA7TDs8Zm9udD4gMDM5QTs7OztOOzs7OzsKKzFENkVDO01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBMQU1EQTtMdTswO0w7PGZvbnQ+IDAzOUI7Ozs7Tjs7Ozs7CisxRDZFRDtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgTVU7THU7MDtMOzxmb250PiAwMzlDOzs7O047Ozs7OworMUQ2RUU7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIE5VO0x1OzA7TDs8Zm9udD4gMDM5RDs7OztOOzs7OzsKKzFENkVGO01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBYSTtMdTswO0w7PGZvbnQ+IDAzOUU7Ozs7Tjs7Ozs7CisxRDZGMDtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgT01JQ1JPTjtMdTswO0w7PGZvbnQ+IDAzOUY7Ozs7Tjs7Ozs7CisxRDZGMTtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgUEk7THU7MDtMOzxmb250PiAwM0EwOzs7O047Ozs7OworMUQ2RjI7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIFJITztMdTswO0w7PGZvbnQ+IDAzQTE7Ozs7Tjs7Ozs7CisxRDZGMztNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgVEhFVEEgU1lNQk9MO0x1OzA7TDs8Zm9udD4gMDNGNDs7OztOOzs7OzsKKzFENkY0O01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBTSUdNQTtMdTswO0w7PGZvbnQ+IDAzQTM7Ozs7Tjs7Ozs7CisxRDZGNTtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgVEFVO0x1OzA7TDs8Zm9udD4gMDNBNDs7OztOOzs7OzsKKzFENkY2O01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBVUFNJTE9OO0x1OzA7TDs8Zm9udD4gMDNBNTs7OztOOzs7OzsKKzFENkY3O01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBQSEk7THU7MDtMOzxmb250PiAwM0E2Ozs7O047Ozs7OworMUQ2Rjg7TUFUSEVNQVRJQ0FMIElUQUxJQyBDQVBJVEFMIENISTtMdTswO0w7PGZvbnQ+IDAzQTc7Ozs7Tjs7Ozs7CisxRDZGOTtNQVRIRU1BVElDQUwgSVRBTElDIENBUElUQUwgUFNJO0x1OzA7TDs8Zm9udD4gMDNBODs7OztOOzs7OzsKKzFENkZBO01BVEhFTUFUSUNBTCBJVEFMSUMgQ0FQSVRBTCBPTUVHQTtMdTswO0w7PGZvbnQ+IDAzQTk7Ozs7Tjs7Ozs7CisxRDZGQjtNQVRIRU1BVElDQUwgSVRBTElDIE5BQkxBO1NtOzA7TDs8Zm9udD4gMjIwNzs7OztOOzs7OzsKKzFENkZDO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgQUxQSEE7TGw7MDtMOzxmb250PiAwM0IxOzs7O047Ozs7OworMUQ2RkQ7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBCRVRBO0xsOzA7TDs8Zm9udD4gMDNCMjs7OztOOzs7OzsKKzFENkZFO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgR0FNTUE7TGw7MDtMOzxmb250PiAwM0IzOzs7O047Ozs7OworMUQ2RkY7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBERUxUQTtMbDswO0w7PGZvbnQ+IDAzQjQ7Ozs7Tjs7Ozs7CisxRDcwMDtNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIEVQU0lMT047TGw7MDtMOzxmb250PiAwM0I1Ozs7O047Ozs7OworMUQ3MDE7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBaRVRBO0xsOzA7TDs8Zm9udD4gMDNCNjs7OztOOzs7OzsKKzFENzAyO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgRVRBO0xsOzA7TDs8Zm9udD4gMDNCNzs7OztOOzs7OzsKKzFENzAzO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgVEhFVEE7TGw7MDtMOzxmb250PiAwM0I4Ozs7O047Ozs7OworMUQ3MDQ7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBJT1RBO0xsOzA7TDs8Zm9udD4gMDNCOTs7OztOOzs7OzsKKzFENzA1O01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgS0FQUEE7TGw7MDtMOzxmb250PiAwM0JBOzs7O047Ozs7OworMUQ3MDY7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBMQU1EQTtMbDswO0w7PGZvbnQ+IDAzQkI7Ozs7Tjs7Ozs7CisxRDcwNztNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIE1VO0xsOzA7TDs8Zm9udD4gMDNCQzs7OztOOzs7OzsKKzFENzA4O01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgTlU7TGw7MDtMOzxmb250PiAwM0JEOzs7O047Ozs7OworMUQ3MDk7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBYSTtMbDswO0w7PGZvbnQ+IDAzQkU7Ozs7Tjs7Ozs7CisxRDcwQTtNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIE9NSUNST047TGw7MDtMOzxmb250PiAwM0JGOzs7O047Ozs7OworMUQ3MEI7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBQSTtMbDswO0w7PGZvbnQ+IDAzQzA7Ozs7Tjs7Ozs7CisxRDcwQztNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIFJITztMbDswO0w7PGZvbnQ+IDAzQzE7Ozs7Tjs7Ozs7CisxRDcwRDtNQVRIRU1BVElDQUwgSVRBTElDIFNNQUxMIEZJTkFMIFNJR01BO0xsOzA7TDs8Zm9udD4gMDNDMjs7OztOOzs7OzsKKzFENzBFO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgU0lHTUE7TGw7MDtMOzxmb250PiAwM0MzOzs7O047Ozs7OworMUQ3MEY7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBUQVU7TGw7MDtMOzxmb250PiAwM0M0Ozs7O047Ozs7OworMUQ3MTA7TUFUSEVNQVRJQ0FMIElUQUxJQyBTTUFMTCBVUFNJTE9OO0xsOzA7TDs8Zm9udD4gMDNDNTs7OztOOzs7OzsKKzFENzExO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgUEhJO0xsOzA7TDs8Zm9udD4gMDNDNjs7OztOOzs7OzsKKzFENzEyO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgQ0hJO0xsOzA7TDs8Zm9udD4gMDNDNzs7OztOOzs7OzsKKzFENzEzO01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgUFNJO0xsOzA7TDs8Zm9udD4gMDNDODs7OztOOzs7OzsKKzFENzE0O01BVEhFTUFUSUNBTCBJVEFMSUMgU01BTEwgT01FR0E7TGw7MDtMOzxmb250PiAwM0M5Ozs7O047Ozs7OworMUQ3MTU7TUFUSEVNQVRJQ0FMIElUQUxJQyBQQVJUSUFMIERJRkZFUkVOVElBTDtTbTswO0w7PGZvbnQ+IDIyMDI7Ozs7Tjs7Ozs7CisxRDcxNjtNQVRIRU1BVElDQUwgSVRBTElDIEVQU0lMT04gU1lNQk9MO0xsOzA7TDs8Zm9udD4gMDNGNTs7OztOOzs7OzsKKzFENzE3O01BVEhFTUFUSUNBTCBJVEFMSUMgVEhFVEEgU1lNQk9MO0xsOzA7TDs8Zm9udD4gMDNEMTs7OztOOzs7OzsKKzFENzE4O01BVEhFTUFUSUNBTCBJVEFMSUMgS0FQUEEgU1lNQk9MO0xsOzA7TDs8Zm9udD4gMDNGMDs7OztOOzs7OzsKKzFENzE5O01BVEhFTUFUSUNBTCBJVEFMSUMgUEhJIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRDU7Ozs7Tjs7Ozs7CisxRDcxQTtNQVRIRU1BVElDQUwgSVRBTElDIFJITyBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0YxOzs7O047Ozs7OworMUQ3MUI7TUFUSEVNQVRJQ0FMIElUQUxJQyBQSSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0Q2Ozs7O047Ozs7OworMUQ3MUM7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgQUxQSEE7THU7MDtMOzxmb250PiAwMzkxOzs7O047Ozs7OworMUQ3MUQ7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgQkVUQTtMdTswO0w7PGZvbnQ+IDAzOTI7Ozs7Tjs7Ozs7CisxRDcxRTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBHQU1NQTtMdTswO0w7PGZvbnQ+IDAzOTM7Ozs7Tjs7Ozs7CisxRDcxRjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBERUxUQTtMdTswO0w7PGZvbnQ+IDAzOTQ7Ozs7Tjs7Ozs7CisxRDcyMDtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBFUFNJTE9OO0x1OzA7TDs8Zm9udD4gMDM5NTs7OztOOzs7OzsKKzFENzIxO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFpFVEE7THU7MDtMOzxmb250PiAwMzk2Ozs7O047Ozs7OworMUQ3MjI7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgRVRBO0x1OzA7TDs8Zm9udD4gMDM5Nzs7OztOOzs7OzsKKzFENzIzO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFRIRVRBO0x1OzA7TDs8Zm9udD4gMDM5ODs7OztOOzs7OzsKKzFENzI0O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIElPVEE7THU7MDtMOzxmb250PiAwMzk5Ozs7O047Ozs7OworMUQ3MjU7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgS0FQUEE7THU7MDtMOzxmb250PiAwMzlBOzs7O047Ozs7OworMUQ3MjY7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgTEFNREE7THU7MDtMOzxmb250PiAwMzlCOzs7O047Ozs7OworMUQ3Mjc7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgTVU7THU7MDtMOzxmb250PiAwMzlDOzs7O047Ozs7OworMUQ3Mjg7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgTlU7THU7MDtMOzxmb250PiAwMzlEOzs7O047Ozs7OworMUQ3Mjk7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgWEk7THU7MDtMOzxmb250PiAwMzlFOzs7O047Ozs7OworMUQ3MkE7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgT01JQ1JPTjtMdTswO0w7PGZvbnQ+IDAzOUY7Ozs7Tjs7Ozs7CisxRDcyQjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBQSTtMdTswO0w7PGZvbnQ+IDAzQTA7Ozs7Tjs7Ozs7CisxRDcyQztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBSSE87THU7MDtMOzxmb250PiAwM0ExOzs7O047Ozs7OworMUQ3MkQ7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgVEhFVEEgU1lNQk9MO0x1OzA7TDs8Zm9udD4gMDNGNDs7OztOOzs7OzsKKzFENzJFO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFNJR01BO0x1OzA7TDs8Zm9udD4gMDNBMzs7OztOOzs7OzsKKzFENzJGO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFRBVTtMdTswO0w7PGZvbnQ+IDAzQTQ7Ozs7Tjs7Ozs7CisxRDczMDtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBVUFNJTE9OO0x1OzA7TDs8Zm9udD4gMDNBNTs7OztOOzs7OzsKKzFENzMxO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIFBISTtMdTswO0w7PGZvbnQ+IDAzQTY7Ozs7Tjs7Ozs7CisxRDczMjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgQ0FQSVRBTCBDSEk7THU7MDtMOzxmb250PiAwM0E3Ozs7O047Ozs7OworMUQ3MzM7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgUFNJO0x1OzA7TDs8Zm9udD4gMDNBODs7OztOOzs7OzsKKzFENzM0O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBDQVBJVEFMIE9NRUdBO0x1OzA7TDs8Zm9udD4gMDNBOTs7OztOOzs7OzsKKzFENzM1O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBOQUJMQTtTbTswO0w7PGZvbnQ+IDIyMDc7Ozs7Tjs7Ozs7CisxRDczNjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgQUxQSEE7TGw7MDtMOzxmb250PiAwM0IxOzs7O047Ozs7OworMUQ3Mzc7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEJFVEE7TGw7MDtMOzxmb250PiAwM0IyOzs7O047Ozs7OworMUQ3Mzg7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIEdBTU1BO0xsOzA7TDs8Zm9udD4gMDNCMzs7OztOOzs7OzsKKzFENzM5O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBERUxUQTtMbDswO0w7PGZvbnQ+IDAzQjQ7Ozs7Tjs7Ozs7CisxRDczQTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRVBTSUxPTjtMbDswO0w7PGZvbnQ+IDAzQjU7Ozs7Tjs7Ozs7CisxRDczQjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgWkVUQTtMbDswO0w7PGZvbnQ+IDAzQjY7Ozs7Tjs7Ozs7CisxRDczQztNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgRVRBO0xsOzA7TDs8Zm9udD4gMDNCNzs7OztOOzs7OzsKKzFENzNEO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBUSEVUQTtMbDswO0w7PGZvbnQ+IDAzQjg7Ozs7Tjs7Ozs7CisxRDczRTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgSU9UQTtMbDswO0w7PGZvbnQ+IDAzQjk7Ozs7Tjs7Ozs7CisxRDczRjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgS0FQUEE7TGw7MDtMOzxmb250PiAwM0JBOzs7O047Ozs7OworMUQ3NDA7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIExBTURBO0xsOzA7TDs8Zm9udD4gMDNCQjs7OztOOzs7OzsKKzFENzQxO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBNVTtMbDswO0w7PGZvbnQ+IDAzQkM7Ozs7Tjs7Ozs7CisxRDc0MjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgTlU7TGw7MDtMOzxmb250PiAwM0JEOzs7O047Ozs7OworMUQ3NDM7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFhJO0xsOzA7TDs8Zm9udD4gMDNCRTs7OztOOzs7OzsKKzFENzQ0O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBPTUlDUk9OO0xsOzA7TDs8Zm9udD4gMDNCRjs7OztOOzs7OzsKKzFENzQ1O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBQSTtMbDswO0w7PGZvbnQ+IDAzQzA7Ozs7Tjs7Ozs7CisxRDc0NjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUkhPO0xsOzA7TDs8Zm9udD4gMDNDMTs7OztOOzs7OzsKKzFENzQ3O01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBGSU5BTCBTSUdNQTtMbDswO0w7PGZvbnQ+IDAzQzI7Ozs7Tjs7Ozs7CisxRDc0ODtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgU0lHTUE7TGw7MDtMOzxmb250PiAwM0MzOzs7O047Ozs7OworMUQ3NDk7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFRBVTtMbDswO0w7PGZvbnQ+IDAzQzQ7Ozs7Tjs7Ozs7CisxRDc0QTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgVVBTSUxPTjtMbDswO0w7PGZvbnQ+IDAzQzU7Ozs7Tjs7Ozs7CisxRDc0QjtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgUEhJO0xsOzA7TDs8Zm9udD4gMDNDNjs7OztOOzs7OzsKKzFENzRDO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBTTUFMTCBDSEk7TGw7MDtMOzxmb250PiAwM0M3Ozs7O047Ozs7OworMUQ3NEQ7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFNNQUxMIFBTSTtMbDswO0w7PGZvbnQ+IDAzQzg7Ozs7Tjs7Ozs7CisxRDc0RTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgU01BTEwgT01FR0E7TGw7MDtMOzxmb250PiAwM0M5Ozs7O047Ozs7OworMUQ3NEY7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFBBUlRJQUwgRElGRkVSRU5USUFMO1NtOzA7TDs8Zm9udD4gMjIwMjs7OztOOzs7OzsKKzFENzUwO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBFUFNJTE9OIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRjU7Ozs7Tjs7Ozs7CisxRDc1MTtNQVRIRU1BVElDQUwgQk9MRCBJVEFMSUMgVEhFVEEgU1lNQk9MO0xsOzA7TDs8Zm9udD4gMDNEMTs7OztOOzs7OzsKKzFENzUyO01BVEhFTUFUSUNBTCBCT0xEIElUQUxJQyBLQVBQQSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0YwOzs7O047Ozs7OworMUQ3NTM7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFBISSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0Q1Ozs7O047Ozs7OworMUQ3NTQ7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFJITyBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0YxOzs7O047Ozs7OworMUQ3NTU7TUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIFBJIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRDY7Ozs7Tjs7Ozs7CisxRDc1NjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgQUxQSEE7THU7MDtMOzxmb250PiAwMzkxOzs7O047Ozs7OworMUQ3NTc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEJFVEE7THU7MDtMOzxmb250PiAwMzkyOzs7O047Ozs7OworMUQ3NTg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIEdBTU1BO0x1OzA7TDs8Zm9udD4gMDM5Mzs7OztOOzs7OzsKKzFENzU5O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBERUxUQTtMdTswO0w7PGZvbnQ+IDAzOTQ7Ozs7Tjs7Ozs7CisxRDc1QTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgRVBTSUxPTjtMdTswO0w7PGZvbnQ+IDAzOTU7Ozs7Tjs7Ozs7CisxRDc1QjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgWkVUQTtMdTswO0w7PGZvbnQ+IDAzOTY7Ozs7Tjs7Ozs7CisxRDc1QztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgRVRBO0x1OzA7TDs8Zm9udD4gMDM5Nzs7OztOOzs7OzsKKzFENzVEO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBUSEVUQTtMdTswO0w7PGZvbnQ+IDAzOTg7Ozs7Tjs7Ozs7CisxRDc1RTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgSU9UQTtMdTswO0w7PGZvbnQ+IDAzOTk7Ozs7Tjs7Ozs7CisxRDc1RjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgS0FQUEE7THU7MDtMOzxmb250PiAwMzlBOzs7O047Ozs7OworMUQ3NjA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIExBTURBO0x1OzA7TDs8Zm9udD4gMDM5Qjs7OztOOzs7OzsKKzFENzYxO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBNVTtMdTswO0w7PGZvbnQ+IDAzOUM7Ozs7Tjs7Ozs7CisxRDc2MjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgTlU7THU7MDtMOzxmb250PiAwMzlEOzs7O047Ozs7OworMUQ3NjM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFhJO0x1OzA7TDs8Zm9udD4gMDM5RTs7OztOOzs7OzsKKzFENzY0O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBPTUlDUk9OO0x1OzA7TDs8Zm9udD4gMDM5Rjs7OztOOzs7OzsKKzFENzY1O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBQSTtMdTswO0w7PGZvbnQ+IDAzQTA7Ozs7Tjs7Ozs7CisxRDc2NjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgUkhPO0x1OzA7TDs8Zm9udD4gMDNBMTs7OztOOzs7OzsKKzFENzY3O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBUSEVUQSBTWU1CT0w7THU7MDtMOzxmb250PiAwM0Y0Ozs7O047Ozs7OworMUQ3Njg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFNJR01BO0x1OzA7TDs8Zm9udD4gMDNBMzs7OztOOzs7OzsKKzFENzY5O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBUQVU7THU7MDtMOzxmb250PiAwM0E0Ozs7O047Ozs7OworMUQ3NkE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFVQU0lMT047THU7MDtMOzxmb250PiAwM0E1Ozs7O047Ozs7OworMUQ3NkI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIFBISTtMdTswO0w7PGZvbnQ+IDAzQTY7Ozs7Tjs7Ozs7CisxRDc2QztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIENBUElUQUwgQ0hJO0x1OzA7TDs8Zm9udD4gMDNBNzs7OztOOzs7OzsKKzFENzZEO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgQ0FQSVRBTCBQU0k7THU7MDtMOzxmb250PiAwM0E4Ozs7O047Ozs7OworMUQ3NkU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBDQVBJVEFMIE9NRUdBO0x1OzA7TDs8Zm9udD4gMDNBOTs7OztOOzs7OzsKKzFENzZGO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgTkFCTEE7U207MDtMOzxmb250PiAyMjA3Ozs7O047Ozs7OworMUQ3NzA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBBTFBIQTtMbDswO0w7PGZvbnQ+IDAzQjE7Ozs7Tjs7Ozs7CisxRDc3MTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIEJFVEE7TGw7MDtMOzxmb250PiAwM0IyOzs7O047Ozs7OworMUQ3NzI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBHQU1NQTtMbDswO0w7PGZvbnQ+IDAzQjM7Ozs7Tjs7Ozs7CisxRDc3MztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIERFTFRBO0xsOzA7TDs8Zm9udD4gMDNCNDs7OztOOzs7OzsKKzFENzc0O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgRVBTSUxPTjtMbDswO0w7PGZvbnQ+IDAzQjU7Ozs7Tjs7Ozs7CisxRDc3NTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFpFVEE7TGw7MDtMOzxmb250PiAwM0I2Ozs7O047Ozs7OworMUQ3NzY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBFVEE7TGw7MDtMOzxmb250PiAwM0I3Ozs7O047Ozs7OworMUQ3Nzc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBUSEVUQTtMbDswO0w7PGZvbnQ+IDAzQjg7Ozs7Tjs7Ozs7CisxRDc3ODtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIElPVEE7TGw7MDtMOzxmb250PiAwM0I5Ozs7O047Ozs7OworMUQ3Nzk7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBLQVBQQTtMbDswO0w7PGZvbnQ+IDAzQkE7Ozs7Tjs7Ozs7CisxRDc3QTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIExBTURBO0xsOzA7TDs8Zm9udD4gMDNCQjs7OztOOzs7OzsKKzFENzdCO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgTVU7TGw7MDtMOzxmb250PiAwM0JDOzs7O047Ozs7OworMUQ3N0M7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBOVTtMbDswO0w7PGZvbnQ+IDAzQkQ7Ozs7Tjs7Ozs7CisxRDc3RDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFhJO0xsOzA7TDs8Zm9udD4gMDNCRTs7OztOOzs7OzsKKzFENzdFO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgT01JQ1JPTjtMbDswO0w7PGZvbnQ+IDAzQkY7Ozs7Tjs7Ozs7CisxRDc3RjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFBJO0xsOzA7TDs8Zm9udD4gMDNDMDs7OztOOzs7OzsKKzFENzgwO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgUkhPO0xsOzA7TDs8Zm9udD4gMDNDMTs7OztOOzs7OzsKKzFENzgxO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgU01BTEwgRklOQUwgU0lHTUE7TGw7MDtMOzxmb250PiAwM0MyOzs7O047Ozs7OworMUQ3ODI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBTSUdNQTtMbDswO0w7PGZvbnQ+IDAzQzM7Ozs7Tjs7Ozs7CisxRDc4MztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFRBVTtMbDswO0w7PGZvbnQ+IDAzQzQ7Ozs7Tjs7Ozs7CisxRDc4NDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFNNQUxMIFVQU0lMT047TGw7MDtMOzxmb250PiAwM0M1Ozs7O047Ozs7OworMUQ3ODU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBQSEk7TGw7MDtMOzxmb250PiAwM0M2Ozs7O047Ozs7OworMUQ3ODY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBDSEk7TGw7MDtMOzxmb250PiAwM0M3Ozs7O047Ozs7OworMUQ3ODc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBQU0k7TGw7MDtMOzxmb250PiAwM0M4Ozs7O047Ozs7OworMUQ3ODg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBTTUFMTCBPTUVHQTtMbDswO0w7PGZvbnQ+IDAzQzk7Ozs7Tjs7Ozs7CisxRDc4OTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFBBUlRJQUwgRElGRkVSRU5USUFMO1NtOzA7TDs8Zm9udD4gMjIwMjs7OztOOzs7OzsKKzFENzhBO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRVBTSUxPTiBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0Y1Ozs7O047Ozs7OworMUQ3OEI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBUSEVUQSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0QxOzs7O047Ozs7OworMUQ3OEM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBLQVBQQSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0YwOzs7O047Ozs7OworMUQ3OEQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBQSEkgU1lNQk9MO0xsOzA7TDs8Zm9udD4gMDNENTs7OztOOzs7OzsKKzFENzhFO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgUkhPIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRjE7Ozs7Tjs7Ozs7CisxRDc4RjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIFBJIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRDY7Ozs7Tjs7Ozs7CisxRDc5MDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEFMUEhBO0x1OzA7TDs8Zm9udD4gMDM5MTs7OztOOzs7OzsKKzFENzkxO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgQkVUQTtMdTswO0w7PGZvbnQ+IDAzOTI7Ozs7Tjs7Ozs7CisxRDc5MjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEdBTU1BO0x1OzA7TDs8Zm9udD4gMDM5Mzs7OztOOzs7OzsKKzFENzkzO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgREVMVEE7THU7MDtMOzxmb250PiAwMzk0Ozs7O047Ozs7OworMUQ3OTQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBFUFNJTE9OO0x1OzA7TDs8Zm9udD4gMDM5NTs7OztOOzs7OzsKKzFENzk1O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgWkVUQTtMdTswO0w7PGZvbnQ+IDAzOTY7Ozs7Tjs7Ozs7CisxRDc5NjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEVUQTtMdTswO0w7PGZvbnQ+IDAzOTc7Ozs7Tjs7Ozs7CisxRDc5NztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFRIRVRBO0x1OzA7TDs8Zm9udD4gMDM5ODs7OztOOzs7OzsKKzFENzk4O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgSU9UQTtMdTswO0w7PGZvbnQ+IDAzOTk7Ozs7Tjs7Ozs7CisxRDc5OTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIEtBUFBBO0x1OzA7TDs8Zm9udD4gMDM5QTs7OztOOzs7OzsKKzFENzlBO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgTEFNREE7THU7MDtMOzxmb250PiAwMzlCOzs7O047Ozs7OworMUQ3OUI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBNVTtMdTswO0w7PGZvbnQ+IDAzOUM7Ozs7Tjs7Ozs7CisxRDc5QztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIE5VO0x1OzA7TDs8Zm9udD4gMDM5RDs7OztOOzs7OzsKKzFENzlEO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgWEk7THU7MDtMOzxmb250PiAwMzlFOzs7O047Ozs7OworMUQ3OUU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBPTUlDUk9OO0x1OzA7TDs8Zm9udD4gMDM5Rjs7OztOOzs7OzsKKzFENzlGO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIENBUElUQUwgUEk7THU7MDtMOzxmb250PiAwM0EwOzs7O047Ozs7OworMUQ3QTA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBSSE87THU7MDtMOzxmb250PiAwM0ExOzs7O047Ozs7OworMUQ3QTE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBUSEVUQSBTWU1CT0w7THU7MDtMOzxmb250PiAwM0Y0Ozs7O047Ozs7OworMUQ3QTI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBTSUdNQTtMdTswO0w7PGZvbnQ+IDAzQTM7Ozs7Tjs7Ozs7CisxRDdBMztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFRBVTtMdTswO0w7PGZvbnQ+IDAzQTQ7Ozs7Tjs7Ozs7CisxRDdBNDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBDQVBJVEFMIFVQU0lMT047THU7MDtMOzxmb250PiAwM0E1Ozs7O047Ozs7OworMUQ3QTU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBQSEk7THU7MDtMOzxmb250PiAwM0E2Ozs7O047Ozs7OworMUQ3QTY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBDSEk7THU7MDtMOzxmb250PiAwM0E3Ozs7O047Ozs7OworMUQ3QTc7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBQU0k7THU7MDtMOzxmb250PiAwM0E4Ozs7O047Ozs7OworMUQ3QTg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgQ0FQSVRBTCBPTUVHQTtMdTswO0w7PGZvbnQ+IDAzQTk7Ozs7Tjs7Ozs7CisxRDdBOTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBOQUJMQTtTbTswO0w7PGZvbnQ+IDIyMDc7Ozs7Tjs7Ozs7CisxRDdBQTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBBTFBIQTtMbDswO0w7PGZvbnQ+IDAzQjE7Ozs7Tjs7Ozs7CisxRDdBQjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBCRVRBO0xsOzA7TDs8Zm9udD4gMDNCMjs7OztOOzs7OzsKKzFEN0FDO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEdBTU1BO0xsOzA7TDs8Zm9udD4gMDNCMzs7OztOOzs7OzsKKzFEN0FEO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIERFTFRBO0xsOzA7TDs8Zm9udD4gMDNCNDs7OztOOzs7OzsKKzFEN0FFO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIEVQU0lMT047TGw7MDtMOzxmb250PiAwM0I1Ozs7O047Ozs7OworMUQ3QUY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgWkVUQTtMbDswO0w7PGZvbnQ+IDAzQjY7Ozs7Tjs7Ozs7CisxRDdCMDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBFVEE7TGw7MDtMOzxmb250PiAwM0I3Ozs7O047Ozs7OworMUQ3QjE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgVEhFVEE7TGw7MDtMOzxmb250PiAwM0I4Ozs7O047Ozs7OworMUQ3QjI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgSU9UQTtMbDswO0w7PGZvbnQ+IDAzQjk7Ozs7Tjs7Ozs7CisxRDdCMztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBLQVBQQTtMbDswO0w7PGZvbnQ+IDAzQkE7Ozs7Tjs7Ozs7CisxRDdCNDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBMQU1EQTtMbDswO0w7PGZvbnQ+IDAzQkI7Ozs7Tjs7Ozs7CisxRDdCNTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBNVTtMbDswO0w7PGZvbnQ+IDAzQkM7Ozs7Tjs7Ozs7CisxRDdCNjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBOVTtMbDswO0w7PGZvbnQ+IDAzQkQ7Ozs7Tjs7Ozs7CisxRDdCNztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBYSTtMbDswO0w7PGZvbnQ+IDAzQkU7Ozs7Tjs7Ozs7CisxRDdCODtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBPTUlDUk9OO0xsOzA7TDs8Zm9udD4gMDNCRjs7OztOOzs7OzsKKzFEN0I5O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFBJO0xsOzA7TDs8Zm9udD4gMDNDMDs7OztOOzs7OzsKKzFEN0JBO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFJITztMbDswO0w7PGZvbnQ+IDAzQzE7Ozs7Tjs7Ozs7CisxRDdCQjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBGSU5BTCBTSUdNQTtMbDswO0w7PGZvbnQ+IDAzQzI7Ozs7Tjs7Ozs7CisxRDdCQztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBTSUdNQTtMbDswO0w7PGZvbnQ+IDAzQzM7Ozs7Tjs7Ozs7CisxRDdCRDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBUQVU7TGw7MDtMOzxmb250PiAwM0M0Ozs7O047Ozs7OworMUQ3QkU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgVVBTSUxPTjtMbDswO0w7PGZvbnQ+IDAzQzU7Ozs7Tjs7Ozs7CisxRDdCRjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBQSEk7TGw7MDtMOzxmb250PiAwM0M2Ozs7O047Ozs7OworMUQ3QzA7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgU01BTEwgQ0hJO0xsOzA7TDs8Zm9udD4gMDNDNzs7OztOOzs7OzsKKzFEN0MxO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFNNQUxMIFBTSTtMbDswO0w7PGZvbnQ+IDAzQzg7Ozs7Tjs7Ozs7CisxRDdDMjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBTTUFMTCBPTUVHQTtMbDswO0w7PGZvbnQ+IDAzQzk7Ozs7Tjs7Ozs7CisxRDdDMztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBQQVJUSUFMIERJRkZFUkVOVElBTDtTbTswO0w7PGZvbnQ+IDIyMDI7Ozs7Tjs7Ozs7CisxRDdDNDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBFUFNJTE9OIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRjU7Ozs7Tjs7Ozs7CisxRDdDNTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBUSEVUQSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0QxOzs7O047Ozs7OworMUQ3QzY7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgS0FQUEEgU1lNQk9MO0xsOzA7TDs8Zm9udD4gMDNGMDs7OztOOzs7OzsKKzFEN0M3O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgSVRBTElDIFBISSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0Q1Ozs7O047Ozs7OworMUQ3Qzg7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBJVEFMSUMgUkhPIFNZTUJPTDtMbDswO0w7PGZvbnQ+IDAzRjE7Ozs7Tjs7Ozs7CisxRDdDOTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIElUQUxJQyBQSSBTWU1CT0w7TGw7MDtMOzxmb250PiAwM0Q2Ozs7O047Ozs7OworMUQ3Q0U7TUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgWkVSTztOZDswO0VOOzxmb250PiAwMDMwOzA7MDswO047Ozs7OworMUQ3Q0Y7TUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgT05FO05kOzA7RU47PGZvbnQ+IDAwMzE7MTsxOzE7Tjs7Ozs7CisxRDdEMDtNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBUV087TmQ7MDtFTjs8Zm9udD4gMDAzMjsyOzI7MjtOOzs7OzsKKzFEN0QxO01BVEhFTUFUSUNBTCBCT0xEIERJR0lUIFRIUkVFO05kOzA7RU47PGZvbnQ+IDAwMzM7MzszOzM7Tjs7Ozs7CisxRDdEMjtNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBGT1VSO05kOzA7RU47PGZvbnQ+IDAwMzQ7NDs0OzQ7Tjs7Ozs7CisxRDdEMztNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBGSVZFO05kOzA7RU47PGZvbnQ+IDAwMzU7NTs1OzU7Tjs7Ozs7CisxRDdENDtNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBTSVg7TmQ7MDtFTjs8Zm9udD4gMDAzNjs2OzY7NjtOOzs7OzsKKzFEN0Q1O01BVEhFTUFUSUNBTCBCT0xEIERJR0lUIFNFVkVOO05kOzA7RU47PGZvbnQ+IDAwMzc7Nzs3Ozc7Tjs7Ozs7CisxRDdENjtNQVRIRU1BVElDQUwgQk9MRCBESUdJVCBFSUdIVDtOZDswO0VOOzxmb250PiAwMDM4Ozg7ODs4O047Ozs7OworMUQ3RDc7TUFUSEVNQVRJQ0FMIEJPTEQgRElHSVQgTklORTtOZDswO0VOOzxmb250PiAwMDM5Ozk7OTs5O047Ozs7OworMUQ3RDg7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgWkVSTztOZDswO0VOOzxmb250PiAwMDMwOzA7MDswO047Ozs7OworMUQ3RDk7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgT05FO05kOzA7RU47PGZvbnQ+IDAwMzE7MTsxOzE7Tjs7Ozs7CisxRDdEQTtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBUV087TmQ7MDtFTjs8Zm9udD4gMDAzMjsyOzI7MjtOOzs7OzsKKzFEN0RCO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIERJR0lUIFRIUkVFO05kOzA7RU47PGZvbnQ+IDAwMzM7MzszOzM7Tjs7Ozs7CisxRDdEQztNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBGT1VSO05kOzA7RU47PGZvbnQ+IDAwMzQ7NDs0OzQ7Tjs7Ozs7CisxRDdERDtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBGSVZFO05kOzA7RU47PGZvbnQ+IDAwMzU7NTs1OzU7Tjs7Ozs7CisxRDdERTtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBTSVg7TmQ7MDtFTjs8Zm9udD4gMDAzNjs2OzY7NjtOOzs7OzsKKzFEN0RGO01BVEhFTUFUSUNBTCBET1VCTEUtU1RSVUNLIERJR0lUIFNFVkVOO05kOzA7RU47PGZvbnQ+IDAwMzc7Nzs3Ozc7Tjs7Ozs7CisxRDdFMDtNQVRIRU1BVElDQUwgRE9VQkxFLVNUUlVDSyBESUdJVCBFSUdIVDtOZDswO0VOOzxmb250PiAwMDM4Ozg7ODs4O047Ozs7OworMUQ3RTE7TUFUSEVNQVRJQ0FMIERPVUJMRS1TVFJVQ0sgRElHSVQgTklORTtOZDswO0VOOzxmb250PiAwMDM5Ozk7OTs5O047Ozs7OworMUQ3RTI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgWkVSTztOZDswO0VOOzxmb250PiAwMDMwOzA7MDswO047Ozs7OworMUQ3RTM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgT05FO05kOzA7RU47PGZvbnQ+IDAwMzE7MTsxOzE7Tjs7Ozs7CisxRDdFNDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBUV087TmQ7MDtFTjs8Zm9udD4gMDAzMjsyOzI7MjtOOzs7OzsKKzFEN0U1O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIFRIUkVFO05kOzA7RU47PGZvbnQ+IDAwMzM7MzszOzM7Tjs7Ozs7CisxRDdFNjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBGT1VSO05kOzA7RU47PGZvbnQ+IDAwMzQ7NDs0OzQ7Tjs7Ozs7CisxRDdFNztNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBGSVZFO05kOzA7RU47PGZvbnQ+IDAwMzU7NTs1OzU7Tjs7Ozs7CisxRDdFODtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBTSVg7TmQ7MDtFTjs8Zm9udD4gMDAzNjs2OzY7NjtOOzs7OzsKKzFEN0U5O01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIERJR0lUIFNFVkVOO05kOzA7RU47PGZvbnQ+IDAwMzc7Nzs3Ozc7Tjs7Ozs7CisxRDdFQTtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBESUdJVCBFSUdIVDtOZDswO0VOOzxmb250PiAwMDM4Ozg7ODs4O047Ozs7OworMUQ3RUI7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgRElHSVQgTklORTtOZDswO0VOOzxmb250PiAwMDM5Ozk7OTs5O047Ozs7OworMUQ3RUM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBaRVJPO05kOzA7RU47PGZvbnQ+IDAwMzA7MDswOzA7Tjs7Ozs7CisxRDdFRDtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIERJR0lUIE9ORTtOZDswO0VOOzxmb250PiAwMDMxOzE7MTsxO047Ozs7OworMUQ3RUU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBUV087TmQ7MDtFTjs8Zm9udD4gMDAzMjsyOzI7MjtOOzs7OzsKKzFEN0VGO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgVEhSRUU7TmQ7MDtFTjs8Zm9udD4gMDAzMzszOzM7MztOOzs7OzsKKzFEN0YwO01BVEhFTUFUSUNBTCBTQU5TLVNFUklGIEJPTEQgRElHSVQgRk9VUjtOZDswO0VOOzxmb250PiAwMDM0OzQ7NDs0O047Ozs7OworMUQ3RjE7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBGSVZFO05kOzA7RU47PGZvbnQ+IDAwMzU7NTs1OzU7Tjs7Ozs7CisxRDdGMjtNQVRIRU1BVElDQUwgU0FOUy1TRVJJRiBCT0xEIERJR0lUIFNJWDtOZDswO0VOOzxmb250PiAwMDM2OzY7Njs2O047Ozs7OworMUQ3RjM7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBTRVZFTjtOZDswO0VOOzxmb250PiAwMDM3Ozc7Nzs3O047Ozs7OworMUQ3RjQ7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBFSUdIVDtOZDswO0VOOzxmb250PiAwMDM4Ozg7ODs4O047Ozs7OworMUQ3RjU7TUFUSEVNQVRJQ0FMIFNBTlMtU0VSSUYgQk9MRCBESUdJVCBOSU5FO05kOzA7RU47PGZvbnQ+IDAwMzk7OTs5Ozk7Tjs7Ozs7CisxRDdGNjtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIFpFUk87TmQ7MDtFTjs8Zm9udD4gMDAzMDswOzA7MDtOOzs7OzsKKzFEN0Y3O01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgRElHSVQgT05FO05kOzA7RU47PGZvbnQ+IDAwMzE7MTsxOzE7Tjs7Ozs7CisxRDdGODtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIFRXTztOZDswO0VOOzxmb250PiAwMDMyOzI7MjsyO047Ozs7OworMUQ3Rjk7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBUSFJFRTtOZDswO0VOOzxmb250PiAwMDMzOzM7MzszO047Ozs7OworMUQ3RkE7TUFUSEVNQVRJQ0FMIE1PTk9TUEFDRSBESUdJVCBGT1VSO05kOzA7RU47PGZvbnQ+IDAwMzQ7NDs0OzQ7Tjs7Ozs7CisxRDdGQjtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIEZJVkU7TmQ7MDtFTjs8Zm9udD4gMDAzNTs1OzU7NTtOOzs7OzsKKzFEN0ZDO01BVEhFTUFUSUNBTCBNT05PU1BBQ0UgRElHSVQgU0lYO05kOzA7RU47PGZvbnQ+IDAwMzY7Njs2OzY7Tjs7Ozs7CisxRDdGRDtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIFNFVkVOO05kOzA7RU47PGZvbnQ+IDAwMzc7Nzs3Ozc7Tjs7Ozs7CisxRDdGRTtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIEVJR0hUO05kOzA7RU47PGZvbnQ+IDAwMzg7ODs4Ozg7Tjs7Ozs7CisxRDdGRjtNQVRIRU1BVElDQUwgTU9OT1NQQUNFIERJR0lUIE5JTkU7TmQ7MDtFTjs8Zm9udD4gMDAzOTs5Ozk7OTtOOzs7OzsKKzIwMDAwOzxDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBCLCBGaXJzdD47TG87MDtMOzs7OztOOzs7OzsKKzJBNkQ2OzxDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBCLCBMYXN0PjtMbzswO0w7Ozs7O047Ozs7OworMkY4MDA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODAwO0xvOzA7TDs0RTNEOzs7O047Ozs7OworMkY4MDE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODAxO0xvOzA7TDs0RTM4Ozs7O047Ozs7OworMkY4MDI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODAyO0xvOzA7TDs0RTQxOzs7O047Ozs7OworMkY4MDM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODAzO0xvOzA7TDsyMDEyMjs7OztOOzs7OzsKKzJGODA0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwNDtMbzswO0w7NEY2MDs7OztOOzs7OzsKKzJGODA1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwNTtMbzswO0w7NEZBRTs7OztOOzs7OzsKKzJGODA2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwNjtMbzswO0w7NEZCQjs7OztOOzs7OzsKKzJGODA3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwNztMbzswO0w7NTAwMjs7OztOOzs7OzsKKzJGODA4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwODtMbzswO0w7NTA3QTs7OztOOzs7OzsKKzJGODA5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwOTtMbzswO0w7NTA5OTs7OztOOzs7OzsKKzJGODBBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwQTtMbzswO0w7NTBFNzs7OztOOzs7OzsKKzJGODBCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwQjtMbzswO0w7NTBDRjs7OztOOzs7OzsKKzJGODBDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwQztMbzswO0w7MzQ5RTs7OztOOzs7OzsKKzJGODBEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgwRDtMbzswO0w7MjA2M0E7Ozs7Tjs7Ozs7CisyRjgwRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MEU7TG87MDtMOzUxNEQ7Ozs7Tjs7Ozs7CisyRjgwRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MEY7TG87MDtMOzUxNTQ7Ozs7Tjs7Ozs7CisyRjgxMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MTA7TG87MDtMOzUxNjQ7Ozs7Tjs7Ozs7CisyRjgxMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MTE7TG87MDtMOzUxNzc7Ozs7Tjs7Ozs7CisyRjgxMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MTI7TG87MDtMOzIwNTFDOzs7O047Ozs7OworMkY4MTM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODEzO0xvOzA7TDszNEI5Ozs7O047Ozs7OworMkY4MTQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODE0O0xvOzA7TDs1MTY3Ozs7O047Ozs7OworMkY4MTU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODE1O0xvOzA7TDs1MThEOzs7O047Ozs7OworMkY4MTY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODE2O0xvOzA7TDsyMDU0Qjs7OztOOzs7OzsKKzJGODE3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxNztMbzswO0w7NTE5Nzs7OztOOzs7OzsKKzJGODE4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxODtMbzswO0w7NTFBNDs7OztOOzs7OzsKKzJGODE5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxOTtMbzswO0w7NEVDQzs7OztOOzs7OzsKKzJGODFBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxQTtMbzswO0w7NTFBQzs7OztOOzs7OzsKKzJGODFCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxQjtMbzswO0w7NTFCNTs7OztOOzs7OzsKKzJGODFDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgxQztMbzswO0w7MjkxREY7Ozs7Tjs7Ozs7CisyRjgxRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MUQ7TG87MDtMOzUxRjU7Ozs7Tjs7Ozs7CisyRjgxRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MUU7TG87MDtMOzUyMDM7Ozs7Tjs7Ozs7CisyRjgxRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MUY7TG87MDtMOzM0REY7Ozs7Tjs7Ozs7CisyRjgyMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjA7TG87MDtMOzUyM0I7Ozs7Tjs7Ozs7CisyRjgyMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjE7TG87MDtMOzUyNDY7Ozs7Tjs7Ozs7CisyRjgyMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjI7TG87MDtMOzUyNzI7Ozs7Tjs7Ozs7CisyRjgyMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjM7TG87MDtMOzUyNzc7Ozs7Tjs7Ozs7CisyRjgyNDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjQ7TG87MDtMOzM1MTU7Ozs7Tjs7Ozs7CisyRjgyNTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjU7TG87MDtMOzUyQzc7Ozs7Tjs7Ozs7CisyRjgyNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MjY7TG87MDtMOzUyQzk7Ozs7Tjs7Ozs7CisyRjgyNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4Mjc7TG87MDtMOzUyRTQ7Ozs7Tjs7Ozs7CisyRjgyODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4Mjg7TG87MDtMOzUyRkE7Ozs7Tjs7Ozs7CisyRjgyOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4Mjk7TG87MDtMOzUzMDU7Ozs7Tjs7Ozs7CisyRjgyQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MkE7TG87MDtMOzUzMDY7Ozs7Tjs7Ozs7CisyRjgyQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MkI7TG87MDtMOzUzMTc7Ozs7Tjs7Ozs7CisyRjgyQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MkM7TG87MDtMOzUzNDk7Ozs7Tjs7Ozs7CisyRjgyRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MkQ7TG87MDtMOzUzNTE7Ozs7Tjs7Ozs7CisyRjgyRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MkU7TG87MDtMOzUzNUE7Ozs7Tjs7Ozs7CisyRjgyRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MkY7TG87MDtMOzUzNzM7Ozs7Tjs7Ozs7CisyRjgzMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzA7TG87MDtMOzUzN0Q7Ozs7Tjs7Ozs7CisyRjgzMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzE7TG87MDtMOzUzN0Y7Ozs7Tjs7Ozs7CisyRjgzMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzI7TG87MDtMOzUzN0Y7Ozs7Tjs7Ozs7CisyRjgzMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzM7TG87MDtMOzUzN0Y7Ozs7Tjs7Ozs7CisyRjgzNDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4MzQ7TG87MDtMOzIwQTJDOzs7O047Ozs7OworMkY4MzU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODM1O0xvOzA7TDs3MDcwOzs7O047Ozs7OworMkY4MzY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODM2O0xvOzA7TDs1M0NBOzs7O047Ozs7OworMkY4Mzc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODM3O0xvOzA7TDs1M0RGOzs7O047Ozs7OworMkY4Mzg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODM4O0xvOzA7TDsyMEI2Mzs7OztOOzs7OzsKKzJGODM5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzOTtMbzswO0w7NTNFQjs7OztOOzs7OzsKKzJGODNBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzQTtMbzswO0w7NTNGMTs7OztOOzs7OzsKKzJGODNCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzQjtMbzswO0w7NTQwNjs7OztOOzs7OzsKKzJGODNDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzQztMbzswO0w7NTQ5RTs7OztOOzs7OzsKKzJGODNEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzRDtMbzswO0w7NTQzODs7OztOOzs7OzsKKzJGODNFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzRTtMbzswO0w7NTQ0ODs7OztOOzs7OzsKKzJGODNGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjgzRjtMbzswO0w7NTQ2ODs7OztOOzs7OzsKKzJGODQwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0MDtMbzswO0w7NTRBMjs7OztOOzs7OzsKKzJGODQxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0MTtMbzswO0w7NTRGNjs7OztOOzs7OzsKKzJGODQyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0MjtMbzswO0w7NTUxMDs7OztOOzs7OzsKKzJGODQzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0MztMbzswO0w7NTU1Mzs7OztOOzs7OzsKKzJGODQ0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0NDtMbzswO0w7NTU2Mzs7OztOOzs7OzsKKzJGODQ1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0NTtMbzswO0w7NTU4NDs7OztOOzs7OzsKKzJGODQ2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0NjtMbzswO0w7NTU4NDs7OztOOzs7OzsKKzJGODQ3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0NztMbzswO0w7NTU5OTs7OztOOzs7OzsKKzJGODQ4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0ODtMbzswO0w7NTVBQjs7OztOOzs7OzsKKzJGODQ5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0OTtMbzswO0w7NTVCMzs7OztOOzs7OzsKKzJGODRBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0QTtMbzswO0w7NTVDMjs7OztOOzs7OzsKKzJGODRCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0QjtMbzswO0w7NTcxNjs7OztOOzs7OzsKKzJGODRDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0QztMbzswO0w7NTYwNjs7OztOOzs7OzsKKzJGODREO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0RDtMbzswO0w7NTcxNzs7OztOOzs7OzsKKzJGODRFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0RTtMbzswO0w7NTY1MTs7OztOOzs7OzsKKzJGODRGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg0RjtMbzswO0w7NTY3NDs7OztOOzs7OzsKKzJGODUwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1MDtMbzswO0w7NTIwNzs7OztOOzs7OzsKKzJGODUxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1MTtMbzswO0w7NThFRTs7OztOOzs7OzsKKzJGODUyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1MjtMbzswO0w7NTdDRTs7OztOOzs7OzsKKzJGODUzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1MztMbzswO0w7NTdGNDs7OztOOzs7OzsKKzJGODU0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1NDtMbzswO0w7NTgwRDs7OztOOzs7OzsKKzJGODU1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1NTtMbzswO0w7NTc4Qjs7OztOOzs7OzsKKzJGODU2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1NjtMbzswO0w7NTgzMjs7OztOOzs7OzsKKzJGODU3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1NztMbzswO0w7NTgzMTs7OztOOzs7OzsKKzJGODU4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1ODtMbzswO0w7NThBQzs7OztOOzs7OzsKKzJGODU5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg1OTtMbzswO0w7MjE0RTQ7Ozs7Tjs7Ozs7CisyRjg1QTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NUE7TG87MDtMOzU4RjI7Ozs7Tjs7Ozs7CisyRjg1QjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NUI7TG87MDtMOzU4Rjc7Ozs7Tjs7Ozs7CisyRjg1QztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NUM7TG87MDtMOzU5MDY7Ozs7Tjs7Ozs7CisyRjg1RDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NUQ7TG87MDtMOzU5MUE7Ozs7Tjs7Ozs7CisyRjg1RTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NUU7TG87MDtMOzU5MjI7Ozs7Tjs7Ozs7CisyRjg1RjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NUY7TG87MDtMOzU5NjI7Ozs7Tjs7Ozs7CisyRjg2MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NjA7TG87MDtMOzIxNkE4Ozs7O047Ozs7OworMkY4NjE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODYxO0xvOzA7TDsyMTZFQTs7OztOOzs7OzsKKzJGODYyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2MjtMbzswO0w7NTlFQzs7OztOOzs7OzsKKzJGODYzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2MztMbzswO0w7NUExQjs7OztOOzs7OzsKKzJGODY0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2NDtMbzswO0w7NUEyNzs7OztOOzs7OzsKKzJGODY1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2NTtMbzswO0w7NTlEODs7OztOOzs7OzsKKzJGODY2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2NjtMbzswO0w7NUE2Njs7OztOOzs7OzsKKzJGODY3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2NztMbzswO0w7MzZFRTs7OztOOzs7OzsKKzJGODY4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg2ODtMbzswO0w7MjEzNkE7Ozs7Tjs7Ozs7CisyRjg2OTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4Njk7TG87MDtMOzVCMDg7Ozs7Tjs7Ozs7CisyRjg2QTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NkE7TG87MDtMOzVCM0U7Ozs7Tjs7Ozs7CisyRjg2QjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NkI7TG87MDtMOzVCM0U7Ozs7Tjs7Ozs7CisyRjg2QztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4NkM7TG87MDtMOzIxOUM4Ozs7O047Ozs7OworMkY4NkQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODZEO0xvOzA7TDs1QkMzOzs7O047Ozs7OworMkY4NkU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODZFO0xvOzA7TDs1QkQ4Ozs7O047Ozs7OworMkY4NkY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODZGO0xvOzA7TDs1QkU3Ozs7O047Ozs7OworMkY4NzA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODcwO0xvOzA7TDs1QkYzOzs7O047Ozs7OworMkY4NzE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODcxO0xvOzA7TDsyMUIxODs7OztOOzs7OzsKKzJGODcyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3MjtMbzswO0w7NUJGRjs7OztOOzs7OzsKKzJGODczO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3MztMbzswO0w7NUMwNjs7OztOOzs7OzsKKzJGODc0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3NDtMbzswO0w7NUYzMzs7OztOOzs7OzsKKzJGODc1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3NTtMbzswO0w7NUMyMjs7OztOOzs7OzsKKzJGODc2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3NjtMbzswO0w7Mzc4MTs7OztOOzs7OzsKKzJGODc3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3NztMbzswO0w7NUM2MDs7OztOOzs7OzsKKzJGODc4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3ODtMbzswO0w7NUM2RTs7OztOOzs7OzsKKzJGODc5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3OTtMbzswO0w7NUNDMDs7OztOOzs7OzsKKzJGODdBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3QTtMbzswO0w7NUM4RDs7OztOOzs7OzsKKzJGODdCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg3QjtMbzswO0w7MjFERTQ7Ozs7Tjs7Ozs7CisyRjg3QztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4N0M7TG87MDtMOzVENDM7Ozs7Tjs7Ozs7CisyRjg3RDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4N0Q7TG87MDtMOzIxREU2Ozs7O047Ozs7OworMkY4N0U7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODdFO0xvOzA7TDs1RDZFOzs7O047Ozs7OworMkY4N0Y7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODdGO0xvOzA7TDs1RDZCOzs7O047Ozs7OworMkY4ODA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODgwO0xvOzA7TDs1RDdDOzs7O047Ozs7OworMkY4ODE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODgxO0xvOzA7TDs1REUxOzs7O047Ozs7OworMkY4ODI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODgyO0xvOzA7TDs1REUyOzs7O047Ozs7OworMkY4ODM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODgzO0xvOzA7TDszODJGOzs7O047Ozs7OworMkY4ODQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODg0O0xvOzA7TDs1REZEOzs7O047Ozs7OworMkY4ODU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODg1O0xvOzA7TDs1RTI4Ozs7O047Ozs7OworMkY4ODY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODg2O0xvOzA7TDs1RTNEOzs7O047Ozs7OworMkY4ODc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODg3O0xvOzA7TDs1RTY5Ozs7O047Ozs7OworMkY4ODg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODg4O0xvOzA7TDszODYyOzs7O047Ozs7OworMkY4ODk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODg5O0xvOzA7TDsyMjE4Mzs7OztOOzs7OzsKKzJGODhBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4QTtMbzswO0w7Mzg3Qzs7OztOOzs7OzsKKzJGODhCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4QjtMbzswO0w7NUVCMDs7OztOOzs7OzsKKzJGODhDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4QztMbzswO0w7NUVCMzs7OztOOzs7OzsKKzJGODhEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4RDtMbzswO0w7NUVCNjs7OztOOzs7OzsKKzJGODhFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4RTtMbzswO0w7NUVDQTs7OztOOzs7OzsKKzJGODhGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg4RjtMbzswO0w7MkEzOTI7Ozs7Tjs7Ozs7CisyRjg5MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OTA7TG87MDtMOzVFRkU7Ozs7Tjs7Ozs7CisyRjg5MTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OTE7TG87MDtMOzIyMzMxOzs7O047Ozs7OworMkY4OTI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODkyO0xvOzA7TDsyMjMzMTs7OztOOzs7OzsKKzJGODkzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5MztMbzswO0w7ODIwMTs7OztOOzs7OzsKKzJGODk0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5NDtMbzswO0w7NUYyMjs7OztOOzs7OzsKKzJGODk1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5NTtMbzswO0w7NUYyMjs7OztOOzs7OzsKKzJGODk2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5NjtMbzswO0w7MzhDNzs7OztOOzs7OzsKKzJGODk3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjg5NztMbzswO0w7MjMyQjg7Ozs7Tjs7Ozs7CisyRjg5ODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4OTg7TG87MDtMOzI2MURBOzs7O047Ozs7OworMkY4OTk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODk5O0xvOzA7TDs1RjYyOzs7O047Ozs7OworMkY4OUE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODlBO0xvOzA7TDs1RjZCOzs7O047Ozs7OworMkY4OUI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODlCO0xvOzA7TDszOEUzOzs7O047Ozs7OworMkY4OUM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODlDO0xvOzA7TDs1RjlBOzs7O047Ozs7OworMkY4OUQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODlEO0xvOzA7TDs1RkNEOzs7O047Ozs7OworMkY4OUU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODlFO0xvOzA7TDs1RkQ3Ozs7O047Ozs7OworMkY4OUY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGODlGO0xvOzA7TDs1RkY5Ozs7O047Ozs7OworMkY4QTA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEEwO0xvOzA7TDs2MDgxOzs7O047Ozs7OworMkY4QTE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEExO0xvOzA7TDszOTNBOzs7O047Ozs7OworMkY4QTI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEEyO0xvOzA7TDszOTFDOzs7O047Ozs7OworMkY4QTM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEEzO0xvOzA7TDs2MDk0Ozs7O047Ozs7OworMkY4QTQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEE0O0xvOzA7TDsyMjZENDs7OztOOzs7OzsKKzJGOEE1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBNTtMbzswO0w7NjBDNzs7OztOOzs7OzsKKzJGOEE2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBNjtMbzswO0w7NjE0ODs7OztOOzs7OzsKKzJGOEE3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBNztMbzswO0w7NjE0Qzs7OztOOzs7OzsKKzJGOEE4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBODtMbzswO0w7NjE0RTs7OztOOzs7OzsKKzJGOEE5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBOTtMbzswO0w7NjE0Qzs7OztOOzs7OzsKKzJGOEFBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBQTtMbzswO0w7NjE3QTs7OztOOzs7OzsKKzJGOEFCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBQjtMbzswO0w7NjE4RTs7OztOOzs7OzsKKzJGOEFDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBQztMbzswO0w7NjFCMjs7OztOOzs7OzsKKzJGOEFEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBRDtMbzswO0w7NjFBNDs7OztOOzs7OzsKKzJGOEFFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBRTtMbzswO0w7NjFBRjs7OztOOzs7OzsKKzJGOEFGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhBRjtMbzswO0w7NjFERTs7OztOOzs7OzsKKzJGOEIwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCMDtMbzswO0w7NjFGMjs7OztOOzs7OzsKKzJGOEIxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCMTtMbzswO0w7NjFGNjs7OztOOzs7OzsKKzJGOEIyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCMjtMbzswO0w7NjIxMDs7OztOOzs7OzsKKzJGOEIzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCMztMbzswO0w7NjIxQjs7OztOOzs7OzsKKzJGOEI0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCNDtMbzswO0w7NjI1RDs7OztOOzs7OzsKKzJGOEI1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCNTtMbzswO0w7NjJCMTs7OztOOzs7OzsKKzJGOEI2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCNjtMbzswO0w7NjJENDs7OztOOzs7OzsKKzJGOEI3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCNztMbzswO0w7NjM1MDs7OztOOzs7OzsKKzJGOEI4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhCODtMbzswO0w7MjJCMEM7Ozs7Tjs7Ozs7CisyRjhCOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4Qjk7TG87MDtMOzYzM0Q7Ozs7Tjs7Ozs7CisyRjhCQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QkE7TG87MDtMOzYyRkM7Ozs7Tjs7Ozs7CisyRjhCQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QkI7TG87MDtMOzYzNjg7Ozs7Tjs7Ozs7CisyRjhCQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QkM7TG87MDtMOzYzODM7Ozs7Tjs7Ozs7CisyRjhCRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QkQ7TG87MDtMOzYzRTQ7Ozs7Tjs7Ozs7CisyRjhCRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4QkU7TG87MDtMOzIyQkYxOzs7O047Ozs7OworMkY4QkY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEJGO0xvOzA7TDs2NDIyOzs7O047Ozs7OworMkY4QzA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEMwO0xvOzA7TDs2M0M1Ozs7O047Ozs7OworMkY4QzE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEMxO0xvOzA7TDs2M0E5Ozs7O047Ozs7OworMkY4QzI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEMyO0xvOzA7TDszQTJFOzs7O047Ozs7OworMkY4QzM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEMzO0xvOzA7TDs2NDY5Ozs7O047Ozs7OworMkY4QzQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEM0O0xvOzA7TDs2NDdFOzs7O047Ozs7OworMkY4QzU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEM1O0xvOzA7TDs2NDlEOzs7O047Ozs7OworMkY4QzY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEM2O0xvOzA7TDs2NDc3Ozs7O047Ozs7OworMkY4Qzc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEM3O0xvOzA7TDszQTZDOzs7O047Ozs7OworMkY4Qzg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEM4O0xvOzA7TDs2NTRGOzs7O047Ozs7OworMkY4Qzk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEM5O0xvOzA7TDs2NTZDOzs7O047Ozs7OworMkY4Q0E7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOENBO0xvOzA7TDsyMzAwQTs7OztOOzs7OzsKKzJGOENCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDQjtMbzswO0w7NjVFMzs7OztOOzs7OzsKKzJGOENDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDQztMbzswO0w7NjZGODs7OztOOzs7OzsKKzJGOENEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDRDtMbzswO0w7NjY0OTs7OztOOzs7OzsKKzJGOENFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDRTtMbzswO0w7M0IxOTs7OztOOzs7OzsKKzJGOENGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhDRjtMbzswO0w7NjY5MTs7OztOOzs7OzsKKzJGOEQwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEMDtMbzswO0w7M0IwODs7OztOOzs7OzsKKzJGOEQxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEMTtMbzswO0w7M0FFNDs7OztOOzs7OzsKKzJGOEQyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEMjtMbzswO0w7NTE5Mjs7OztOOzs7OzsKKzJGOEQzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEMztMbzswO0w7NTE5NTs7OztOOzs7OzsKKzJGOEQ0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhENDtMbzswO0w7NjcwMDs7OztOOzs7OzsKKzJGOEQ1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhENTtMbzswO0w7NjY5Qzs7OztOOzs7OzsKKzJGOEQ2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhENjtMbzswO0w7ODBBRDs7OztOOzs7OzsKKzJGOEQ3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhENztMbzswO0w7NDNEOTs7OztOOzs7OzsKKzJGOEQ4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEODtMbzswO0w7NjcxNzs7OztOOzs7OzsKKzJGOEQ5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEOTtMbzswO0w7NjcxQjs7OztOOzs7OzsKKzJGOERBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEQTtMbzswO0w7NjcyMTs7OztOOzs7OzsKKzJGOERCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEQjtMbzswO0w7Njc1RTs7OztOOzs7OzsKKzJGOERDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhEQztMbzswO0w7Njc1Mzs7OztOOzs7OzsKKzJGOEREO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhERDtMbzswO0w7MjMzQzM7Ozs7Tjs7Ozs7CisyRjhERTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4REU7TG87MDtMOzNCNDk7Ozs7Tjs7Ozs7CisyRjhERjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4REY7TG87MDtMOzY3RkE7Ozs7Tjs7Ozs7CisyRjhFMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RTA7TG87MDtMOzY3ODU7Ozs7Tjs7Ozs7CisyRjhFMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RTE7TG87MDtMOzY4NTI7Ozs7Tjs7Ozs7CisyRjhFMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RTI7TG87MDtMOzY4ODU7Ozs7Tjs7Ozs7CisyRjhFMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RTM7TG87MDtMOzIzNDZEOzs7O047Ozs7OworMkY4RTQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEU0O0xvOzA7TDs2ODhFOzs7O047Ozs7OworMkY4RTU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEU1O0xvOzA7TDs2ODFGOzs7O047Ozs7OworMkY4RTY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEU2O0xvOzA7TDs2OTE0Ozs7O047Ozs7OworMkY4RTc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEU3O0xvOzA7TDszQjlEOzs7O047Ozs7OworMkY4RTg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEU4O0xvOzA7TDs2OTQyOzs7O047Ozs7OworMkY4RTk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEU5O0xvOzA7TDs2OUEzOzs7O047Ozs7OworMkY4RUE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEVBO0xvOzA7TDs2OUVBOzs7O047Ozs7OworMkY4RUI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEVCO0xvOzA7TDs2QUE4Ozs7O047Ozs7OworMkY4RUM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEVDO0xvOzA7TDsyMzZBMzs7OztOOzs7OzsKKzJGOEVEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFRDtMbzswO0w7NkFEQjs7OztOOzs7OzsKKzJGOEVFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFRTtMbzswO0w7M0MxODs7OztOOzs7OzsKKzJGOEVGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhFRjtMbzswO0w7NkIyMTs7OztOOzs7OzsKKzJGOEYwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhGMDtMbzswO0w7MjM4QTc7Ozs7Tjs7Ozs7CisyRjhGMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjE7TG87MDtMOzZCNTQ7Ozs7Tjs7Ozs7CisyRjhGMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjI7TG87MDtMOzNDNEU7Ozs7Tjs7Ozs7CisyRjhGMztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjM7TG87MDtMOzZCNzI7Ozs7Tjs7Ozs7CisyRjhGNDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjQ7TG87MDtMOzZCOUY7Ozs7Tjs7Ozs7CisyRjhGNTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjU7TG87MDtMOzZCQkE7Ozs7Tjs7Ozs7CisyRjhGNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RjY7TG87MDtMOzZCQkI7Ozs7Tjs7Ozs7CisyRjhGNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4Rjc7TG87MDtMOzIzQThEOzs7O047Ozs7OworMkY4Rjg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEY4O0xvOzA7TDsyMUQwQjs7OztOOzs7OzsKKzJGOEY5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjhGOTtMbzswO0w7MjNBRkE7Ozs7Tjs7Ozs7CisyRjhGQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RkE7TG87MDtMOzZDNEU7Ozs7Tjs7Ozs7CisyRjhGQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY4RkI7TG87MDtMOzIzQ0JDOzs7O047Ozs7OworMkY4RkM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEZDO0xvOzA7TDs2Q0JGOzs7O047Ozs7OworMkY4RkQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEZEO0xvOzA7TDs2Q0NEOzs7O047Ozs7OworMkY4RkU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEZFO0xvOzA7TDs2QzY3Ozs7O047Ozs7OworMkY4RkY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOEZGO0xvOzA7TDs2RDE2Ozs7O047Ozs7OworMkY5MDA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTAwO0xvOzA7TDs2RDNFOzs7O047Ozs7OworMkY5MDE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTAxO0xvOzA7TDs2RDc3Ozs7O047Ozs7OworMkY5MDI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTAyO0xvOzA7TDs2RDQxOzs7O047Ozs7OworMkY5MDM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTAzO0xvOzA7TDs2RDY5Ozs7O047Ozs7OworMkY5MDQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTA0O0xvOzA7TDs2RDc4Ozs7O047Ozs7OworMkY5MDU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTA1O0xvOzA7TDs2RDg1Ozs7O047Ozs7OworMkY5MDY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTA2O0xvOzA7TDsyM0QxRTs7OztOOzs7OzsKKzJGOTA3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwNztMbzswO0w7NkQzNDs7OztOOzs7OzsKKzJGOTA4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwODtMbzswO0w7NkUyRjs7OztOOzs7OzsKKzJGOTA5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwOTtMbzswO0w7NkU2RTs7OztOOzs7OzsKKzJGOTBBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwQTtMbzswO0w7M0QzMzs7OztOOzs7OzsKKzJGOTBCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwQjtMbzswO0w7NkVDQjs7OztOOzs7OzsKKzJGOTBDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwQztMbzswO0w7NkVDNzs7OztOOzs7OzsKKzJGOTBEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkwRDtMbzswO0w7MjNFRDE7Ozs7Tjs7Ozs7CisyRjkwRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MEU7TG87MDtMOzZERjk7Ozs7Tjs7Ozs7CisyRjkwRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MEY7TG87MDtMOzZGNkU7Ozs7Tjs7Ozs7CisyRjkxMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MTA7TG87MDtMOzIzRjVFOzs7O047Ozs7OworMkY5MTE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTExO0xvOzA7TDsyM0Y4RTs7OztOOzs7OzsKKzJGOTEyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxMjtMbzswO0w7NkZDNjs7OztOOzs7OzsKKzJGOTEzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxMztMbzswO0w7NzAzOTs7OztOOzs7OzsKKzJGOTE0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxNDtMbzswO0w7NzAxRTs7OztOOzs7OzsKKzJGOTE1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxNTtMbzswO0w7NzAxQjs7OztOOzs7OzsKKzJGOTE2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxNjtMbzswO0w7M0Q5Njs7OztOOzs7OzsKKzJGOTE3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxNztMbzswO0w7NzA0QTs7OztOOzs7OzsKKzJGOTE4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxODtMbzswO0w7NzA3RDs7OztOOzs7OzsKKzJGOTE5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxOTtMbzswO0w7NzA3Nzs7OztOOzs7OzsKKzJGOTFBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxQTtMbzswO0w7NzBBRDs7OztOOzs7OzsKKzJGOTFCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkxQjtMbzswO0w7MjA1MjU7Ozs7Tjs7Ozs7CisyRjkxQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MUM7TG87MDtMOzcxNDU7Ozs7Tjs7Ozs7CisyRjkxRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5MUQ7TG87MDtMOzI0MjYzOzs7O047Ozs7OworMkY5MUU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTFFO0xvOzA7TDs3MTlDOzs7O047Ozs7OworMkY5MUY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTFGO0xvOzA7TDs0M0FCOzs7O047Ozs7OworMkY5MjA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTIwO0xvOzA7TDs3MjI4Ozs7O047Ozs7OworMkY5MjE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTIxO0xvOzA7TDs3MjM1Ozs7O047Ozs7OworMkY5MjI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTIyO0xvOzA7TDs3MjUwOzs7O047Ozs7OworMkY5MjM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTIzO0xvOzA7TDsyNDYwODs7OztOOzs7OzsKKzJGOTI0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkyNDtMbzswO0w7NzI4MDs7OztOOzs7OzsKKzJGOTI1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkyNTtMbzswO0w7NzI5NTs7OztOOzs7OzsKKzJGOTI2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkyNjtMbzswO0w7MjQ3MzU7Ozs7Tjs7Ozs7CisyRjkyNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Mjc7TG87MDtMOzI0ODE0Ozs7O047Ozs7OworMkY5Mjg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTI4O0xvOzA7TDs3MzdBOzs7O047Ozs7OworMkY5Mjk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTI5O0xvOzA7TDs3MzhCOzs7O047Ozs7OworMkY5MkE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTJBO0xvOzA7TDszRUFDOzs7O047Ozs7OworMkY5MkI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTJCO0xvOzA7TDs3M0E1Ozs7O047Ozs7OworMkY5MkM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTJDO0xvOzA7TDszRUI4Ozs7O047Ozs7OworMkY5MkQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTJEO0xvOzA7TDszRUI4Ozs7O047Ozs7OworMkY5MkU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTJFO0xvOzA7TDs3NDQ3Ozs7O047Ozs7OworMkY5MkY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTJGO0xvOzA7TDs3NDVDOzs7O047Ozs7OworMkY5MzA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTMwO0xvOzA7TDs3NDcxOzs7O047Ozs7OworMkY5MzE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTMxO0xvOzA7TDs3NDg1Ozs7O047Ozs7OworMkY5MzI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTMyO0xvOzA7TDs3NENBOzs7O047Ozs7OworMkY5MzM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTMzO0xvOzA7TDszRjFCOzs7O047Ozs7OworMkY5MzQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTM0O0xvOzA7TDs3NTI0Ozs7O047Ozs7OworMkY5MzU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTM1O0xvOzA7TDsyNEMzNjs7OztOOzs7OzsKKzJGOTM2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkzNjtMbzswO0w7NzUzRTs7OztOOzs7OzsKKzJGOTM3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkzNztMbzswO0w7MjRDOTI7Ozs7Tjs7Ozs7CisyRjkzODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Mzg7TG87MDtMOzc1NzA7Ozs7Tjs7Ozs7CisyRjkzOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Mzk7TG87MDtMOzIyMTlGOzs7O047Ozs7OworMkY5M0E7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTNBO0xvOzA7TDs3NjEwOzs7O047Ozs7OworMkY5M0I7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTNCO0xvOzA7TDsyNEZBMTs7OztOOzs7OzsKKzJGOTNDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjkzQztMbzswO0w7MjRGQjg7Ozs7Tjs7Ozs7CisyRjkzRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5M0Q7TG87MDtMOzI1MDQ0Ozs7O047Ozs7OworMkY5M0U7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTNFO0xvOzA7TDszRkZDOzs7O047Ozs7OworMkY5M0Y7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTNGO0xvOzA7TDs0MDA4Ozs7O047Ozs7OworMkY5NDA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTQwO0xvOzA7TDs3NkY0Ozs7O047Ozs7OworMkY5NDE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTQxO0xvOzA7TDsyNTBGMzs7OztOOzs7OzsKKzJGOTQyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0MjtMbzswO0w7MjUwRjI7Ozs7Tjs7Ozs7CisyRjk0MztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NDM7TG87MDtMOzI1MTE5Ozs7O047Ozs7OworMkY5NDQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTQ0O0xvOzA7TDsyNTEzMzs7OztOOzs7OzsKKzJGOTQ1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0NTtMbzswO0w7NzcxRTs7OztOOzs7OzsKKzJGOTQ2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0NjtMbzswO0w7NzcxRjs7OztOOzs7OzsKKzJGOTQ3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0NztMbzswO0w7NzcxRjs7OztOOzs7OzsKKzJGOTQ4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0ODtMbzswO0w7Nzc0QTs7OztOOzs7OzsKKzJGOTQ5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0OTtMbzswO0w7NDAzOTs7OztOOzs7OzsKKzJGOTRBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0QTtMbzswO0w7Nzc4Qjs7OztOOzs7OzsKKzJGOTRCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0QjtMbzswO0w7NDA0Njs7OztOOzs7OzsKKzJGOTRDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0QztMbzswO0w7NDA5Njs7OztOOzs7OzsKKzJGOTREO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk0RDtMbzswO0w7MjU0MUQ7Ozs7Tjs7Ozs7CisyRjk0RTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NEU7TG87MDtMOzc4NEU7Ozs7Tjs7Ozs7CisyRjk0RjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NEY7TG87MDtMOzc4OEM7Ozs7Tjs7Ozs7CisyRjk1MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTA7TG87MDtMOzc4Q0M7Ozs7Tjs7Ozs7CisyRjk1MTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTE7TG87MDtMOzQwRTM7Ozs7Tjs7Ozs7CisyRjk1MjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTI7TG87MDtMOzI1NjI2Ozs7O047Ozs7OworMkY5NTM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTUzO0xvOzA7TDs3OTU2Ozs7O047Ozs7OworMkY5NTQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTU0O0xvOzA7TDsyNTY5QTs7OztOOzs7OzsKKzJGOTU1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk1NTtMbzswO0w7MjU2QzU7Ozs7Tjs7Ozs7CisyRjk1NjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTY7TG87MDtMOzc5OEY7Ozs7Tjs7Ozs7CisyRjk1NztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTc7TG87MDtMOzc5RUI7Ozs7Tjs7Ozs7CisyRjk1ODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTg7TG87MDtMOzQxMkY7Ozs7Tjs7Ozs7CisyRjk1OTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NTk7TG87MDtMOzdBNDA7Ozs7Tjs7Ozs7CisyRjk1QTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NUE7TG87MDtMOzdBNEE7Ozs7Tjs7Ozs7CisyRjk1QjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NUI7TG87MDtMOzdBNEY7Ozs7Tjs7Ozs7CisyRjk1QztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NUM7TG87MDtMOzI1OTdDOzs7O047Ozs7OworMkY5NUQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTVEO0xvOzA7TDsyNUFBNzs7OztOOzs7OzsKKzJGOTVFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk1RTtMbzswO0w7MjVBQTc7Ozs7Tjs7Ozs7CisyRjk1RjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NUY7TG87MDtMOzdBQUU7Ozs7Tjs7Ozs7CisyRjk2MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NjA7TG87MDtMOzQyMDI7Ozs7Tjs7Ozs7CisyRjk2MTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NjE7TG87MDtMOzI1QkFCOzs7O047Ozs7OworMkY5NjI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTYyO0xvOzA7TDs3QkM2Ozs7O047Ozs7OworMkY5NjM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTYzO0xvOzA7TDs3QkM5Ozs7O047Ozs7OworMkY5NjQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTY0O0xvOzA7TDs0MjI3Ozs7O047Ozs7OworMkY5NjU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTY1O0xvOzA7TDsyNUM4MDs7OztOOzs7OzsKKzJGOTY2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2NjtMbzswO0w7N0NEMjs7OztOOzs7OzsKKzJGOTY3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2NztMbzswO0w7NDJBMDs7OztOOzs7OzsKKzJGOTY4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2ODtMbzswO0w7N0NFODs7OztOOzs7OzsKKzJGOTY5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2OTtMbzswO0w7N0NFMzs7OztOOzs7OzsKKzJGOTZBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2QTtMbzswO0w7N0QwMDs7OztOOzs7OzsKKzJGOTZCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk2QjtMbzswO0w7MjVGODY7Ozs7Tjs7Ozs7CisyRjk2QztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NkM7TG87MDtMOzdENjM7Ozs7Tjs7Ozs7CisyRjk2RDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NkQ7TG87MDtMOzQzMDE7Ozs7Tjs7Ozs7CisyRjk2RTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NkU7TG87MDtMOzdEQzc7Ozs7Tjs7Ozs7CisyRjk2RjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NkY7TG87MDtMOzdFMDI7Ozs7Tjs7Ozs7CisyRjk3MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzA7TG87MDtMOzdFNDU7Ozs7Tjs7Ozs7CisyRjk3MTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzE7TG87MDtMOzQzMzQ7Ozs7Tjs7Ozs7CisyRjk3MjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzI7TG87MDtMOzI2MjI4Ozs7O047Ozs7OworMkY5NzM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTczO0xvOzA7TDsyNjI0Nzs7OztOOzs7OzsKKzJGOTc0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk3NDtMbzswO0w7NDM1OTs7OztOOzs7OzsKKzJGOTc1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk3NTtMbzswO0w7MjYyRDk7Ozs7Tjs7Ozs7CisyRjk3NjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5NzY7TG87MDtMOzdGN0E7Ozs7Tjs7Ozs7CisyRjk3NztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Nzc7TG87MDtMOzI2MzNFOzs7O047Ozs7OworMkY5Nzg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTc4O0xvOzA7TDs3Rjk1Ozs7O047Ozs7OworMkY5Nzk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTc5O0xvOzA7TDs3RkZBOzs7O047Ozs7OworMkY5N0E7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTdBO0xvOzA7TDs4MDA1Ozs7O047Ozs7OworMkY5N0I7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTdCO0xvOzA7TDsyNjREQTs7OztOOzs7OzsKKzJGOTdDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk3QztMbzswO0w7MjY1MjM7Ozs7Tjs7Ozs7CisyRjk3RDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5N0Q7TG87MDtMOzgwNjA7Ozs7Tjs7Ozs7CisyRjk3RTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5N0U7TG87MDtMOzI2NUE4Ozs7O047Ozs7OworMkY5N0Y7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTdGO0xvOzA7TDs4MDcwOzs7O047Ozs7OworMkY5ODA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTgwO0xvOzA7TDsyMzM1Rjs7OztOOzs7OzsKKzJGOTgxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4MTtMbzswO0w7NDNENTs7OztOOzs7OzsKKzJGOTgyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4MjtMbzswO0w7ODBCMjs7OztOOzs7OzsKKzJGOTgzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4MztMbzswO0w7ODEwMzs7OztOOzs7OzsKKzJGOTg0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4NDtMbzswO0w7NDQwQjs7OztOOzs7OzsKKzJGOTg1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4NTtMbzswO0w7ODEzRTs7OztOOzs7OzsKKzJGOTg2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4NjtMbzswO0w7NUFCNTs7OztOOzs7OzsKKzJGOTg3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4NztMbzswO0w7MjY3QTc7Ozs7Tjs7Ozs7CisyRjk4ODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5ODg7TG87MDtMOzI2N0I1Ozs7O047Ozs7OworMkY5ODk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTg5O0xvOzA7TDsyMzM5Mzs7OztOOzs7OzsKKzJGOThBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjk4QTtMbzswO0w7MjMzOUM7Ozs7Tjs7Ozs7CisyRjk4QjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OEI7TG87MDtMOzgyMDE7Ozs7Tjs7Ozs7CisyRjk4QztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OEM7TG87MDtMOzgyMDQ7Ozs7Tjs7Ozs7CisyRjk4RDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OEQ7TG87MDtMOzhGOUU7Ozs7Tjs7Ozs7CisyRjk4RTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OEU7TG87MDtMOzQ0NkI7Ozs7Tjs7Ozs7CisyRjk4RjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OEY7TG87MDtMOzgyOTE7Ozs7Tjs7Ozs7CisyRjk5MDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTA7TG87MDtMOzgyOEI7Ozs7Tjs7Ozs7CisyRjk5MTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTE7TG87MDtMOzgyOUQ7Ozs7Tjs7Ozs7CisyRjk5MjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTI7TG87MDtMOzUyQjM7Ozs7Tjs7Ozs7CisyRjk5MztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTM7TG87MDtMOzgyQjE7Ozs7Tjs7Ozs7CisyRjk5NDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTQ7TG87MDtMOzgyQjM7Ozs7Tjs7Ozs7CisyRjk5NTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTU7TG87MDtMOzgyQkQ7Ozs7Tjs7Ozs7CisyRjk5NjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTY7TG87MDtMOzgyRTY7Ozs7Tjs7Ozs7CisyRjk5NztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5OTc7TG87MDtMOzI2QjNDOzs7O047Ozs7OworMkY5OTg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTk4O0xvOzA7TDs4MkU1Ozs7O047Ozs7OworMkY5OTk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTk5O0xvOzA7TDs4MzFEOzs7O047Ozs7OworMkY5OUE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTlBO0xvOzA7TDs4MzYzOzs7O047Ozs7OworMkY5OUI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTlCO0xvOzA7TDs4M0FEOzs7O047Ozs7OworMkY5OUM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTlDO0xvOzA7TDs4MzIzOzs7O047Ozs7OworMkY5OUQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTlEO0xvOzA7TDs4M0JEOzs7O047Ozs7OworMkY5OUU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTlFO0xvOzA7TDs4M0U3Ozs7O047Ozs7OworMkY5OUY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOTlGO0xvOzA7TDs4NDU3Ozs7O047Ozs7OworMkY5QTA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUEwO0xvOzA7TDs4MzUzOzs7O047Ozs7OworMkY5QTE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUExO0xvOzA7TDs4M0NBOzs7O047Ozs7OworMkY5QTI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUEyO0xvOzA7TDs4M0NDOzs7O047Ozs7OworMkY5QTM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUEzO0xvOzA7TDs4M0RDOzs7O047Ozs7OworMkY5QTQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUE0O0xvOzA7TDsyNkMzNjs7OztOOzs7OzsKKzJGOUE1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBNTtMbzswO0w7MjZENkI7Ozs7Tjs7Ozs7CisyRjlBNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QTY7TG87MDtMOzI2Q0Q1Ozs7O047Ozs7OworMkY5QTc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUE3O0xvOzA7TDs0NTJCOzs7O047Ozs7OworMkY5QTg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUE4O0xvOzA7TDs4NEYxOzs7O047Ozs7OworMkY5QTk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUE5O0xvOzA7TDs4NEYzOzs7O047Ozs7OworMkY5QUE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUFBO0xvOzA7TDs4NTE2Ozs7O047Ozs7OworMkY5QUI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUFCO0xvOzA7TDsyNzNDQTs7OztOOzs7OzsKKzJGOUFDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBQztMbzswO0w7ODU2NDs7OztOOzs7OzsKKzJGOUFEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlBRDtMbzswO0w7MjZGMkM7Ozs7Tjs7Ozs7CisyRjlBRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QUU7TG87MDtMOzQ1NUQ7Ozs7Tjs7Ozs7CisyRjlBRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QUY7TG87MDtMOzQ1NjE7Ozs7Tjs7Ozs7CisyRjlCMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QjA7TG87MDtMOzI2RkIxOzs7O047Ozs7OworMkY5QjE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUIxO0xvOzA7TDsyNzBEMjs7OztOOzs7OzsKKzJGOUIyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCMjtMbzswO0w7NDU2Qjs7OztOOzs7OzsKKzJGOUIzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCMztMbzswO0w7ODY1MDs7OztOOzs7OzsKKzJGOUI0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCNDtMbzswO0w7ODY1Qzs7OztOOzs7OzsKKzJGOUI1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCNTtMbzswO0w7ODY2Nzs7OztOOzs7OzsKKzJGOUI2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCNjtMbzswO0w7ODY2OTs7OztOOzs7OzsKKzJGOUI3O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCNztMbzswO0w7ODZBOTs7OztOOzs7OzsKKzJGOUI4O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCODtMbzswO0w7ODY4ODs7OztOOzs7OzsKKzJGOUI5O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCOTtMbzswO0w7ODcwRTs7OztOOzs7OzsKKzJGOUJBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCQTtMbzswO0w7ODZFMjs7OztOOzs7OzsKKzJGOUJCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCQjtMbzswO0w7ODc3OTs7OztOOzs7OzsKKzJGOUJDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCQztMbzswO0w7ODcyODs7OztOOzs7OzsKKzJGOUJEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCRDtMbzswO0w7ODc2Qjs7OztOOzs7OzsKKzJGOUJFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCRTtMbzswO0w7ODc4Njs7OztOOzs7OzsKKzJGOUJGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlCRjtMbzswO0w7NEQ1Nzs7OztOOzs7OzsKKzJGOUMwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDMDtMbzswO0w7ODdFMTs7OztOOzs7OzsKKzJGOUMxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDMTtMbzswO0w7ODgwMTs7OztOOzs7OzsKKzJGOUMyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDMjtMbzswO0w7NDVGOTs7OztOOzs7OzsKKzJGOUMzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDMztMbzswO0w7ODg2MDs7OztOOzs7OzsKKzJGOUM0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDNDtMbzswO0w7ODg2Mzs7OztOOzs7OzsKKzJGOUM1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDNTtMbzswO0w7Mjc2Njc7Ozs7Tjs7Ozs7CisyRjlDNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5QzY7TG87MDtMOzg4RDc7Ozs7Tjs7Ozs7CisyRjlDNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Qzc7TG87MDtMOzg4REU7Ozs7Tjs7Ozs7CisyRjlDODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Qzg7TG87MDtMOzQ2MzU7Ozs7Tjs7Ozs7CisyRjlDOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Qzk7TG87MDtMOzg4RkE7Ozs7Tjs7Ozs7CisyRjlDQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Q0E7TG87MDtMOzM0QkI7Ozs7Tjs7Ozs7CisyRjlDQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Q0I7TG87MDtMOzI3OEFFOzs7O047Ozs7OworMkY5Q0M7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUNDO0xvOzA7TDsyNzk2Njs7OztOOzs7OzsKKzJGOUNEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDRDtMbzswO0w7NDZCRTs7OztOOzs7OzsKKzJGOUNFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDRTtMbzswO0w7NDZDNzs7OztOOzs7OzsKKzJGOUNGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlDRjtMbzswO0w7OEFBMDs7OztOOzs7OzsKKzJGOUQwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEMDtMbzswO0w7OEFFRDs7OztOOzs7OzsKKzJGOUQxO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEMTtMbzswO0w7OEI4QTs7OztOOzs7OzsKKzJGOUQyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEMjtMbzswO0w7OEM1NTs7OztOOzs7OzsKKzJGOUQzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEMztMbzswO0w7MjdDQTg7Ozs7Tjs7Ozs7CisyRjlENDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDQ7TG87MDtMOzhDQUI7Ozs7Tjs7Ozs7CisyRjlENTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDU7TG87MDtMOzhDQzE7Ozs7Tjs7Ozs7CisyRjlENjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDY7TG87MDtMOzhEMUI7Ozs7Tjs7Ozs7CisyRjlENztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDc7TG87MDtMOzhENzc7Ozs7Tjs7Ozs7CisyRjlEODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RDg7TG87MDtMOzI3RjJGOzs7O047Ozs7OworMkY5RDk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUQ5O0xvOzA7TDsyMDgwNDs7OztOOzs7OzsKKzJGOURBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEQTtMbzswO0w7OERDQjs7OztOOzs7OzsKKzJGOURCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEQjtMbzswO0w7OERCQzs7OztOOzs7OzsKKzJGOURDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlEQztMbzswO0w7OERGMDs7OztOOzs7OzsKKzJGOUREO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlERDtMbzswO0w7MjA4REU7Ozs7Tjs7Ozs7CisyRjlERTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5REU7TG87MDtMOzhFRDQ7Ozs7Tjs7Ozs7CisyRjlERjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5REY7TG87MDtMOzhGMzg7Ozs7Tjs7Ozs7CisyRjlFMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTA7TG87MDtMOzI4NUQyOzs7O047Ozs7OworMkY5RTE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUUxO0xvOzA7TDsyODVFRDs7OztOOzs7OzsKKzJGOUUyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlFMjtMbzswO0w7OTA5NDs7OztOOzs7OzsKKzJGOUUzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlFMztMbzswO0w7OTBGMTs7OztOOzs7OzsKKzJGOUU0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlFNDtMbzswO0w7OTExMTs7OztOOzs7OzsKKzJGOUU1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlFNTtMbzswO0w7Mjg3MkU7Ozs7Tjs7Ozs7CisyRjlFNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTY7TG87MDtMOzkxMUI7Ozs7Tjs7Ozs7CisyRjlFNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTc7TG87MDtMOzkyMzg7Ozs7Tjs7Ozs7CisyRjlFODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTg7TG87MDtMOzkyRDc7Ozs7Tjs7Ozs7CisyRjlFOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RTk7TG87MDtMOzkyRDg7Ozs7Tjs7Ozs7CisyRjlFQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RUE7TG87MDtMOzkyN0M7Ozs7Tjs7Ozs7CisyRjlFQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RUI7TG87MDtMOzkzRjk7Ozs7Tjs7Ozs7CisyRjlFQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RUM7TG87MDtMOzk0MTU7Ozs7Tjs7Ozs7CisyRjlFRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RUQ7TG87MDtMOzI4QkZBOzs7O047Ozs7OworMkY5RUU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUVFO0xvOzA7TDs5NThCOzs7O047Ozs7OworMkY5RUY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUVGO0xvOzA7TDs0OTk1Ozs7O047Ozs7OworMkY5RjA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUYwO0xvOzA7TDs5NUI3Ozs7O047Ozs7OworMkY5RjE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUYxO0xvOzA7TDsyOEQ3Nzs7OztOOzs7OzsKKzJGOUYyO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGMjtMbzswO0w7NDlFNjs7OztOOzs7OzsKKzJGOUYzO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGMztMbzswO0w7OTZDMzs7OztOOzs7OzsKKzJGOUY0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGNDtMbzswO0w7NURCMjs7OztOOzs7OzsKKzJGOUY1O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGNTtMbzswO0w7OTcyMzs7OztOOzs7OzsKKzJGOUY2O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGNjtMbzswO0w7MjkxNDU7Ozs7Tjs7Ozs7CisyRjlGNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5Rjc7TG87MDtMOzI5MjFBOzs7O047Ozs7OworMkY5Rjg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUY4O0xvOzA7TDs0QTZFOzs7O047Ozs7OworMkY5Rjk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUY5O0xvOzA7TDs0QTc2Ozs7O047Ozs7OworMkY5RkE7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUZBO0xvOzA7TDs5N0UwOzs7O047Ozs7OworMkY5RkI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGOUZCO0xvOzA7TDsyOTQwQTs7OztOOzs7OzsKKzJGOUZDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGQztMbzswO0w7NEFCMjs7OztOOzs7OzsKKzJGOUZEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRjlGRDtMbzswO0w7Mjk0OTY7Ozs7Tjs7Ozs7CisyRjlGRTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RkU7TG87MDtMOzk4MEI7Ozs7Tjs7Ozs7CisyRjlGRjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkY5RkY7TG87MDtMOzk4MEI7Ozs7Tjs7Ozs7CisyRkEwMDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMDA7TG87MDtMOzk4Mjk7Ozs7Tjs7Ozs7CisyRkEwMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMDE7TG87MDtMOzI5NUI2Ozs7O047Ozs7OworMkZBMDI7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTAyO0xvOzA7TDs5OEUyOzs7O047Ozs7OworMkZBMDM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTAzO0xvOzA7TDs0QjMzOzs7O047Ozs7OworMkZBMDQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTA0O0xvOzA7TDs5OTI5Ozs7O047Ozs7OworMkZBMDU7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTA1O0xvOzA7TDs5OUE3Ozs7O047Ozs7OworMkZBMDY7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTA2O0xvOzA7TDs5OUMyOzs7O047Ozs7OworMkZBMDc7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTA3O0xvOzA7TDs5OUZFOzs7O047Ozs7OworMkZBMDg7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTA4O0xvOzA7TDs0QkNFOzs7O047Ozs7OworMkZBMDk7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTA5O0xvOzA7TDsyOUIzMDs7OztOOzs7OzsKKzJGQTBBO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwQTtMbzswO0w7OUIxMjs7OztOOzs7OzsKKzJGQTBCO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwQjtMbzswO0w7OUM0MDs7OztOOzs7OzsKKzJGQTBDO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwQztMbzswO0w7OUNGRDs7OztOOzs7OzsKKzJGQTBEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwRDtMbzswO0w7NENDRTs7OztOOzs7OzsKKzJGQTBFO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwRTtMbzswO0w7NENFRDs7OztOOzs7OzsKKzJGQTBGO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkEwRjtMbzswO0w7OUQ2Nzs7OztOOzs7OzsKKzJGQTEwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkExMDtMbzswO0w7MkEwQ0U7Ozs7Tjs7Ozs7CisyRkExMTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTE7TG87MDtMOzRDRjg7Ozs7Tjs7Ozs7CisyRkExMjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTI7TG87MDtMOzJBMTA1Ozs7O047Ozs7OworMkZBMTM7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILTJGQTEzO0xvOzA7TDsyQTIwRTs7OztOOzs7OzsKKzJGQTE0O0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC0yRkExNDtMbzswO0w7MkEyOTE7Ozs7Tjs7Ozs7CisyRkExNTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTU7TG87MDtMOzlFQkI7Ozs7Tjs7Ozs7CisyRkExNjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTY7TG87MDtMOzRENTY7Ozs7Tjs7Ozs7CisyRkExNztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTc7TG87MDtMOzlFRjk7Ozs7Tjs7Ozs7CisyRkExODtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTg7TG87MDtMOzlFRkU7Ozs7Tjs7Ozs7CisyRkExOTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMTk7TG87MDtMOzlGMDU7Ozs7Tjs7Ozs7CisyRkExQTtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMUE7TG87MDtMOzlGMEY7Ozs7Tjs7Ozs7CisyRkExQjtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMUI7TG87MDtMOzlGMTY7Ozs7Tjs7Ozs7CisyRkExQztDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMUM7TG87MDtMOzlGM0I7Ozs7Tjs7Ozs7CisyRkExRDtDSksgQ09NUEFUSUJJTElUWSBJREVPR1JBUEgtMkZBMUQ7TG87MDtMOzJBNjAwOzs7O047Ozs7OworRTAwMDE7TEFOR1VBR0UgVEFHO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwMjA7VEFHIFNQQUNFO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwMjE7VEFHIEVYQ0xBTUFUSU9OIE1BUks7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAyMjtUQUcgUVVPVEFUSU9OIE1BUks7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAyMztUQUcgTlVNQkVSIFNJR047Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAyNDtUQUcgRE9MTEFSIFNJR047Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAyNTtUQUcgUEVSQ0VOVCBTSUdOO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwMjY7VEFHIEFNUEVSU0FORDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDI3O1RBRyBBUE9TVFJPUEhFO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwMjg7VEFHIExFRlQgUEFSRU5USEVTSVM7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAyOTtUQUcgUklHSFQgUEFSRU5USEVTSVM7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAyQTtUQUcgQVNURVJJU0s7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAyQjtUQUcgUExVUyBTSUdOO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwMkM7VEFHIENPTU1BO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwMkQ7VEFHIEhZUEhFTi1NSU5VUztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDJFO1RBRyBGVUxMIFNUT1A7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAyRjtUQUcgU09MSURVUztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDMwO1RBRyBESUdJVCBaRVJPO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwMzE7VEFHIERJR0lUIE9ORTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDMyO1RBRyBESUdJVCBUV087Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAzMztUQUcgRElHSVQgVEhSRUU7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDAzNDtUQUcgRElHSVQgRk9VUjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDM1O1RBRyBESUdJVCBGSVZFO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwMzY7VEFHIERJR0lUIFNJWDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDM3O1RBRyBESUdJVCBTRVZFTjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDM4O1RBRyBESUdJVCBFSUdIVDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDM5O1RBRyBESUdJVCBOSU5FO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwM0E7VEFHIENPTE9OO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwM0I7VEFHIFNFTUlDT0xPTjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDNDO1RBRyBMRVNTLVRIQU4gU0lHTjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDNEO1RBRyBFUVVBTFMgU0lHTjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDNFO1RBRyBHUkVBVEVSLVRIQU4gU0lHTjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDNGO1RBRyBRVUVTVElPTiBNQVJLO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNDA7VEFHIENPTU1FUkNJQUwgQVQ7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA0MTtUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDQyO1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBCO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNDM7VEFHIExBVElOIENBUElUQUwgTEVUVEVSIEM7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA0NDtUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDQ1O1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBFO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNDY7VEFHIExBVElOIENBUElUQUwgTEVUVEVSIEY7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA0NztUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDQ4O1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBIO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNDk7VEFHIExBVElOIENBUElUQUwgTEVUVEVSIEk7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA0QTtUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDRCO1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBLO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNEM7VEFHIExBVElOIENBUElUQUwgTEVUVEVSIEw7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA0RDtUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDRFO1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBOO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNEY7VEFHIExBVElOIENBUElUQUwgTEVUVEVSIE87Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA1MDtUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDUxO1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBRO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNTI7VEFHIExBVElOIENBUElUQUwgTEVUVEVSIFI7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA1MztUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDU0O1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBUO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNTU7VEFHIExBVElOIENBUElUQUwgTEVUVEVSIFU7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA1NjtUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDU3O1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBXO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNTg7VEFHIExBVElOIENBUElUQUwgTEVUVEVSIFg7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA1OTtUQUcgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDVBO1RBRyBMQVRJTiBDQVBJVEFMIExFVFRFUiBaO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNUI7VEFHIExFRlQgU1FVQVJFIEJSQUNLRVQ7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA1QztUQUcgUkVWRVJTRSBTT0xJRFVTO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNUQ7VEFHIFJJR0hUIFNRVUFSRSBCUkFDS0VUO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNUU7VEFHIENJUkNVTUZMRVggQUNDRU5UO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNUY7VEFHIExPVyBMSU5FO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwNjA7VEFHIEdSQVZFIEFDQ0VOVDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDYxO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgQTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDYyO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgQjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDYzO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgQztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDY0O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgRDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDY1O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgRTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDY2O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgRjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDY3O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgRztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDY4O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgSDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDY5O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgSTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDZBO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgSjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDZCO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgSztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDZDO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgTDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDZEO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgTTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDZFO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgTjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDZGO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgTztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDcwO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgUDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDcxO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgUTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDcyO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgUjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDczO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgUztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDc0O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgVDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDc1O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgVTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDc2O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgVjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDc3O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgVztDZjswO0JOOzs7OztOOzs7OzsKK0UwMDc4O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgWDtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDc5O1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgWTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDdBO1RBRyBMQVRJTiBTTUFMTCBMRVRURVIgWjtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDdCO1RBRyBMRUZUIENVUkxZIEJSQUNLRVQ7Q2Y7MDtCTjs7Ozs7Tjs7Ozs7CitFMDA3QztUQUcgVkVSVElDQUwgTElORTtDZjswO0JOOzs7OztOOzs7OzsKK0UwMDdEO1RBRyBSSUdIVCBDVVJMWSBCUkFDS0VUO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwN0U7VEFHIFRJTERFO0NmOzA7Qk47Ozs7O047Ozs7OworRTAwN0Y7Q0FOQ0VMIFRBRztDZjswO0JOOzs7OztOOzs7OzsKK0YwMDAwOzxQbGFuZSAxNSBQcml2YXRlIFVzZSwgRmlyc3Q+O0NvOzA7TDs7Ozs7Tjs7Ozs7CitGRkZGRDs8UGxhbmUgMTUgUHJpdmF0ZSBVc2UsIExhc3Q+O0NvOzA7TDs7Ozs7Tjs7Ozs7CisxMDAwMDA7PFBsYW5lIDE2IFByaXZhdGUgVXNlLCBGaXJzdD47Q287MDtMOzs7OztOOzs7OzsKKzEwRkZGRDs8UGxhbmUgMTYgUHJpdmF0ZSBVc2UsIExhc3Q+O0NvOzA7TDs7Ozs7Tjs7Ozs7CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJBcHAuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9jYWxlbmRhci9DYWxlbmRhckFwcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5NjE5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJBcHAuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJBcHAuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xOSAwNDoxMDoyMyAkIAorICogJFJldmlzaW9uOiAxLjcgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8uY2FsZW5kYXI7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby4qOworCitpbXBvcnQgamF2YS5hcHBsZXQuQXBwbGV0OworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworaW1wb3J0IGphdmEuaW8uKjsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLmltcGwuKjsKKworLyoqCisgKiBDYWxlbmRhckFwcCBkZW1vbnN0cmF0ZXMgaG93IENhbGVuZGFyIHdvcmtzLgorICovCitwdWJsaWMgY2xhc3MgQ2FsZW5kYXJBcHAgZXh0ZW5kcyBEZW1vQXBwbGV0Cit7CisgICAgLyoqCisgICAgICogVGhlIG1haW4gZnVuY3Rpb24gd2hpY2ggZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIENhbGVuZGFyRGVtbworICAgICAqIGFwcGxldCB3aGVuIGFuIGFwcGxldCBpcyBzdGFydGVkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmd2W10pIHsKKworICAgICAgICBuZXcgQ2FsZW5kYXJBcHAoKS5zaG93RGVtbygpOworICAgIH0KKworICAgIC8qIFRoaXMgY3JlYXRlcyBhIENhbGVuZGFyRnJhbWUgZm9yIHRoZSBkZW1vIGFwcGxldC4gKi8KKyAgICBwdWJsaWMgRnJhbWUgY3JlYXRlRGVtb0ZyYW1lKERlbW9BcHBsZXQgYXBwbGV0KSB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsZW5kYXJGcmFtZShhcHBsZXQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9jYWxlbmRhci9DYWxlbmRhckNhbGMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9jYWxlbmRhci9DYWxlbmRhckNhbGMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wY2I3Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2NhbGVuZGFyL0NhbGVuZGFyQ2FsYy5qYXZhCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJDYWxjLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTkgMDQ6MTA6MjMgJCAKKyAqICRSZXZpc2lvbjogMS4xMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuZGVtby5jYWxlbmRhcjsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLio7CisKK2ltcG9ydCBqYXZhLmFwcGxldC5BcHBsZXQ7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCisvL2ltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CisKKy8vaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkNhbGVuZGFyOworLy9pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CisvL2ltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5UaW1lWm9uZTsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LmRlbW8uaW1wbC4qOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworLyoqCisgKiBDYWxlbmRhckNhbGMgZGVtb25zdHJhdGVzIGhvdyBEYXRlL1RpbWUgZm9ybWF0dGVyIHdvcmtzLgorICovCitwdWJsaWMgY2xhc3MgQ2FsZW5kYXJDYWxjIGV4dGVuZHMgRGVtb0FwcGxldAoreworICAgIC8qKgorICAgICAqIFRoZSBtYWluIGZ1bmN0aW9uIHdoaWNoIGRlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBNdWx0aUNhbGVuZGFyRGVtbworICAgICAqIGFwcGxldCB3aGVuIGFuIGFwcGxldCBpcyBzdGFydGVkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmd2W10pIHsKKyAgICAgICAgbmV3IENhbGVuZGFyQ2FsYygpLnNob3dEZW1vKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBjcmVhdGVzIGEgQ2FsZW5kYXJDYWxjRnJhbWUgZm9yIHRoZSBkZW1vIGFwcGxldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgRnJhbWUgY3JlYXRlRGVtb0ZyYW1lKERlbW9BcHBsZXQgYXBwbGV0KSB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsZW5kYXJDYWxjRnJhbWUoYXBwbGV0KTsKKyAgICB9Cit9CisKKy8qKgorICogQSBGcmFtZSBpcyBhIHRvcC1sZXZlbCB3aW5kb3cgd2l0aCBhIHRpdGxlLiBUaGUgZGVmYXVsdCBsYXlvdXQgZm9yIGEgZnJhbWUKKyAqIGlzIEJvcmRlckxheW91dC4gIFRoZSBDYWxlbmRhckNhbGNGcmFtZSBjbGFzcyBkZWZpbmVzIHRoZSB3aW5kb3cgbGF5b3V0IG9mCisgKiBNdWx0aUNhbGVuZGFyRGVtby4KKyAqLworY2xhc3MgQ2FsZW5kYXJDYWxjRnJhbWUgZXh0ZW5kcyBGcmFtZSBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyCit7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nICAgICBjcmVkaXRTdHJpbmcgPSAiIjsKKworICAgIHN0YXRpYyBmaW5hbCBMb2NhbGVbXSBsb2NhbGVzID0gRGVtb1V0aWxpdHkuZ2V0RzdMb2NhbGVzKCk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuICAgIERFQlVHID0gZmFsc2U7CisKKyAgICBwcml2YXRlIERlbW9BcHBsZXQgICAgICAgICAgICAgIGFwcGxldDsKKyAgICBwcml2YXRlIGxvbmcgICAgICAgICAgICAgICAgICAgIHRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFJvbGxBZGRGaWVsZCBrUm9sbEFkZEZpZWxkc1tdID0geworICAgICAgICBuZXcgUm9sbEFkZEZpZWxkKENhbGVuZGFyLllFQVIsICAgICAgICAgICAgICAgICAiWWVhciIgKSwKKyAgICAgICAgbmV3IFJvbGxBZGRGaWVsZChDYWxlbmRhci5NT05USCwgICAgICAgICAgICAgICAgIk1vbnRoIiApLAorICAgICAgICBuZXcgUm9sbEFkZEZpZWxkKENhbGVuZGFyLldFRUtfT0ZfTU9OVEgsICAgICAgICAiV2VlayBvZiBNb250aCIgKSwKKyAgICAgICAgbmV3IFJvbGxBZGRGaWVsZChDYWxlbmRhci5XRUVLX09GX1lFQVIsICAgICAgICAgIldlZWsgb2YgWWVhciIgKSwKKyAgICAgICAgbmV3IFJvbGxBZGRGaWVsZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsICAgICAgICAgIkRheSBvZiBNb250aCIgKSwKKyAgICAgICAgbmV3IFJvbGxBZGRGaWVsZChDYWxlbmRhci5EQVlfT0ZfV0VFSywgICAgICAgICAgIkRheSBvZiBXZWVrIiApLAorICAgICAgICBuZXcgUm9sbEFkZEZpZWxkKENhbGVuZGFyLkRBWV9PRl9XRUVLX0lOX01PTlRILCAiRGF5IG9mIFdlZWsgaW4gTW9udGgiICksCisgICAgICAgIG5ldyBSb2xsQWRkRmllbGQoQ2FsZW5kYXIuREFZX09GX1lFQVIsICAgICAgICAgICJEYXkgb2YgWWVhciIgKSwKKyAgICAgICAgbmV3IFJvbGxBZGRGaWVsZChDYWxlbmRhci5BTV9QTSwgICAgICAgICAgICAgICAgIkFNL1BNIiApLAorICAgICAgICBuZXcgUm9sbEFkZEZpZWxkKENhbGVuZGFyLkhPVVJfT0ZfREFZLCAgICAgICAgICAiSG91ciBvZiBkYXkiICksCisgICAgICAgIG5ldyBSb2xsQWRkRmllbGQoQ2FsZW5kYXIuSE9VUiwgICAgICAgICAgICAgICAgICJIb3VyIiApLAorICAgICAgICBuZXcgUm9sbEFkZEZpZWxkKENhbGVuZGFyLk1JTlVURSwgICAgICAgICAgICAgICAiTWludXRlIiApLAorICAgICAgICBuZXcgUm9sbEFkZEZpZWxkKENhbGVuZGFyLlNFQ09ORCwgICAgICAgICAgICAgICAiU2Vjb25kIiApLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IENhbGVuZGFyQ2FsY0ZyYW1lIHRoYXQgaXMgaW5pdGlhbGx5IGludmlzaWJsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsZW5kYXJDYWxjRnJhbWUoRGVtb0FwcGxldCBhcHBsZXQpCisgICAgeworICAgICAgICBzdXBlcigiTXVsdGlwbGUgQ2FsZW5kYXIgRGVtbyIpOworICAgICAgICB0aGlzLmFwcGxldCA9IGFwcGxldDsKKyAgICAgICAgaW5pdCgpOworICAgICAgICBzdGFydCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBhcHBsZXQuIFlvdSBuZXZlciBuZWVkIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgaXQKKyAgICAgKiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgc3lzdGVtIG9uY2UgdGhlIGFwcGxldCBpcyBjcmVhdGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGluaXQoKQorICAgIHsKKyAgICAgICAgYnVpbGRHVUkoKTsKKworICAgICAgICBwYXR0ZXJuVGV4dC5zZXRUZXh0KCBjYWxlbmRhcnNbMF0udG9QYXR0ZXJuKCkgKTsKKworICAgICAgICAvLyBGb3JjZSBhbiB1cGRhdGUgb2YgdGhlIGRpc3BsYXkKKyAgICAgICAgY2l0eUNoYW5nZWQoKTsKKyAgICAgICAgbWlsbGlzRm9ybWF0KCk7CisgICAgICAgIGVuYWJsZUV2ZW50cyhLZXlFdmVudC5LRVlfUkVMRUFTRUQpOworICAgICAgICBlbmFibGVFdmVudHMoV2luZG93RXZlbnQuV0lORE9XX0NMT1NJTkcpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gcGFja2FnZSBwcml2YXRlCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2b2lkIGFkZFdpdGhGb250KENvbnRhaW5lciBjb250YWluZXIsIENvbXBvbmVudCBmb28sIEZvbnQgZm9udCkgeworICAgICAgICBpZiAoZm9udCAhPSBudWxsKQorICAgICAgICAgICAgZm9vLnNldEZvbnQoZm9udCk7CisgICAgICAgIGNvbnRhaW5lci5hZGQoZm9vKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgdG8gc3RhcnQgdGhlIGFwcGxldC4gWW91IG5ldmVyIG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZAorICAgICAqIGRpcmVjdGx5LCBpdCBpcyBjYWxsZWQgd2hlbiB0aGUgYXBwbGV0J3MgZG9jdW1lbnQgaXMgdmlzaXRlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdGFydCgpCisgICAgeworICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgfQorCisgICAgVGV4dEZpZWxkIHBhdHRlcm5UZXh0OworCisgICAgQ2hvaWNlIGRhdGVNZW51OworICAgIENob2ljZSBsb2NhbGVNZW51OworCisgICAgQnV0dG9uIHVwOworICAgIEJ1dHRvbiBkb3duOworCisgICAgQ2hlY2tib3ggZ2V0Um9sbDsKKyAgICBDaGVja2JveCBnZXRBZGQ7CisKKyAgICBwdWJsaWMgdm9pZCBidWlsZEdVSSgpCisgICAgeworICAgICAgICBzZXRCYWNrZ3JvdW5kKERlbW9VdGlsaXR5LmJnQ29sb3IpOworICAgICAgICBzZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoKSk7IC8vIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCBpdCBpcy4KKworLy8gVElUTEUKKyAgICAgICAgTGFiZWwgbGFiZWwxPW5ldyBMYWJlbCgiQ2FsZW5kYXIgQ29udmVydGVyIiwgTGFiZWwuQ0VOVEVSKTsKKyAgICAgICAgbGFiZWwxLnNldEZvbnQoRGVtb1V0aWxpdHkudGl0bGVGb250KTsKKyAgICAgICAgYWRkKGxhYmVsMSk7CisgICAgICAgIGFkZChEZW1vVXRpbGl0eS5jcmVhdGVTcGFjZXIoKSk7CisKKy8vIElPIFBhbmVsCisgICAgICAgIFBhbmVsIHRvcFBhbmVsID0gbmV3IFBhbmVsKCk7CisgICAgICAgIHRvcFBhbmVsLnNldExheW91dChuZXcgRmxvd0xheW91dCgpKTsKKworICAgICAgICBDaGVja2JveEdyb3VwIGdyb3VwMT0gbmV3IENoZWNrYm94R3JvdXAoKTsKKworICAgICAgICAvLyBTZXQgdXAgdGhlIGNvbnRyb2xzIGZvciBlYWNoIGNhbGVuZGFyIHdlJ3JlIGRlbW9uc3RyYXRpbmcKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWxlbmRhcnMubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNhbGVuZGFyc1tpXS5uYW1lLCBMYWJlbC5SSUdIVCk7CisgICAgICAgICAgICBsYWJlbC5zZXRGb250KERlbW9VdGlsaXR5LmxhYmVsRm9udCk7CisgICAgICAgICAgICB0b3BQYW5lbC5hZGQobGFiZWwpOworCisgICAgICAgICAgICB0b3BQYW5lbC5hZGQoY2FsZW5kYXJzW2ldLnRleHQpOworCisgICAgICAgICAgICBmaW5hbCBpbnQgaiA9IGk7CisgICAgICAgICAgICBjYWxlbmRhcnNbaV0udGV4dC5hZGRBY3Rpb25MaXN0ZW5lciggbmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHRDaGFuZ2VkKGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKTsKKworICAgICAgICAgICAgY2FsZW5kYXJzW2ldLnJvbGxBZGQuc2V0Q2hlY2tib3hHcm91cChncm91cDEpOworICAgICAgICAgICAgdG9wUGFuZWwuYWRkKGNhbGVuZGFyc1tpXS5yb2xsQWRkKTsKKyAgICAgICAgfQorICAgICAgICBjYWxlbmRhcnNbMF0ucm9sbEFkZC5zZXRTdGF0ZSh0cnVlKTsgICAgLy8gTWFrZSB0aGUgZmlyc3Qgb25lIHNlbGVjdGVkCisKKyAgICAgICAgTGFiZWwgbGFiZWw0PW5ldyBMYWJlbCgiUGF0dGVybiIsIExhYmVsLlJJR0hUKTsKKyAgICAgICAgbGFiZWw0LnNldEZvbnQoRGVtb1V0aWxpdHkubGFiZWxGb250KTsKKyAgICAgICAgdG9wUGFuZWwuYWRkKGxhYmVsNCk7CisKKyAgICAgICAgcGF0dGVyblRleHQ9bmV3IFRleHRGaWVsZChGSUVMRF9DT0xVTU5TKTsKKyAgICAgICAgcGF0dGVyblRleHQuc2V0Rm9udChEZW1vVXRpbGl0eS5lZGl0Rm9udCk7CisgICAgICAgIHRvcFBhbmVsLmFkZChwYXR0ZXJuVGV4dCk7CisgICAgICAgIHRvcFBhbmVsLmFkZChuZXcgTGFiZWwoIiIpKTsKKworICAgICAgICBEZW1vVXRpbGl0eS5maXhHcmlkKHRvcFBhbmVsLDMpOworICAgICAgICBhZGQodG9wUGFuZWwpOworICAgICAgICBhZGQoRGVtb1V0aWxpdHkuY3JlYXRlU3BhY2VyKCkpOworCisvLyBST0xMIC8gQURECisgICAgICAgIFBhbmVsIHJvbGxBZGRQYW5lbD1uZXcgUGFuZWwoKTsKKyAgICAgICAgeworICAgICAgICAgICAgcm9sbEFkZFBhbmVsLnNldExheW91dChuZXcgRmxvd0xheW91dCgpKTsKKworICAgICAgICAgICAgUGFuZWwgcm9sbEFkZEJveGVzID0gbmV3IFBhbmVsKCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcm9sbEFkZEJveGVzLnNldExheW91dChuZXcgR3JpZExheW91dCgyLDEpKTsKKyAgICAgICAgICAgICAgICBDaGVja2JveEdyb3VwIGdyb3VwMj0gbmV3IENoZWNrYm94R3JvdXAoKTsKKyAgICAgICAgICAgICAgICBnZXRSb2xsID0gbmV3IENoZWNrYm94KCJSb2xsIixncm91cDIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBnZXRBZGQgPSBuZXcgQ2hlY2tib3goIkFkZCIsZ3JvdXAyLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIHJvbGxBZGRCb3hlcy5hZGQoZ2V0Um9sbCk7CisgICAgICAgICAgICAgICAgcm9sbEFkZEJveGVzLmFkZChnZXRBZGQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBMYWJlbCBkYXRlTGFiZWw9bmV3IExhYmVsKCJEYXRlIEZpZWxkcyIpOworICAgICAgICAgICAgZGF0ZUxhYmVsLnNldEZvbnQoRGVtb1V0aWxpdHkubGFiZWxGb250KTsKKworICAgICAgICAgICAgZGF0ZU1lbnU9IG5ldyBDaG9pY2UoKTsKKyAgICAgICAgICAgIGRhdGVNZW51LnNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuY2hvaWNlQ29sb3IpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrUm9sbEFkZEZpZWxkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGRhdGVNZW51LmFkZEl0ZW0oa1JvbGxBZGRGaWVsZHNbaV0ubmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGtSb2xsQWRkRmllbGRzW2ldLmZpZWxkID09IENhbGVuZGFyLk1PTlRIKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGVNZW51LnNlbGVjdChpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFBhbmVsIHVwRG93biA9IG5ldyBQYW5lbCgpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVwRG93bi5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwxKSk7CisKKyAgICAgICAgICAgICAgICAvLyAqKiogSWYgdGhlIGltYWdlcyBhcmUgbm90IGZvdW5kLCB3ZSB1c2UgdGhlIGxhYmVsLgorICAgICAgICAgICAgICAgIHVwID0gbmV3IEJ1dHRvbigiXiIpOworICAgICAgICAgICAgICAgIGRvd24gPSBuZXcgQnV0dG9uKCJ2Iik7CisgICAgICAgICAgICAgICAgdXAuc2V0QmFja2dyb3VuZChEZW1vVXRpbGl0eS5iZ0NvbG9yKTsKKyAgICAgICAgICAgICAgICBkb3duLnNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuYmdDb2xvcik7CisgICAgICAgICAgICAgICAgdXBEb3duLmFkZCh1cCk7CisgICAgICAgICAgICAgICAgdXBEb3duLmFkZChkb3duKTsKKyAgICAgICAgICAgICAgICB1cC5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgICAgICBkb3duLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByb2xsQWRkUGFuZWwuYWRkKGRhdGVMYWJlbCk7CisgICAgICAgICAgICByb2xsQWRkUGFuZWwuYWRkKGRhdGVNZW51KTsKKyAgICAgICAgICAgIHJvbGxBZGRQYW5lbC5hZGQocm9sbEFkZEJveGVzKTsKKyAgICAgICAgICAgIHJvbGxBZGRQYW5lbC5hZGQodXBEb3duKTsKKworICAgICAgICB9CisgICAgICAgIFBhbmVsIGxvY2FsZVBhbmVsID0gbmV3IFBhbmVsKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE1ha2UgdGhlIGxvY2FsZSBwb3B1cCBtZW51cworICAgICAgICAgICAgbG9jYWxlTWVudT0gbmV3IENob2ljZSgpOworICAgICAgICAgICAgTG9jYWxlIGRlZmF1bHRMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICAgICAgaW50IGJlc3RNYXRjaCA9IC0xLCB0aGlzTWF0Y2ggPSAtMTsKKyAgICAgICAgICAgIGludCBzZWxlY3RNZSA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBsb2NhbGVzW2ldLmdldExhbmd1YWdlKCkuZXF1YWxzKGxvY2FsZXNbaS0xXS5nZXRMYW5ndWFnZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICBpIDwgbG9jYWxlcy5sZW5ndGggLSAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW2ldLmdldExhbmd1YWdlKCkuZXF1YWxzKGxvY2FsZXNbaSsxXS5nZXRMYW5ndWFnZSgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZU1lbnUuYWRkSXRlbSggbG9jYWxlc1tpXS5nZXREaXNwbGF5TmFtZSgpICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxlTWVudS5hZGRJdGVtKCBsb2NhbGVzW2ldLmdldERpc3BsYXlMYW5ndWFnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdGhpc01hdGNoID0gRGVtb1V0aWxpdHkuY29tcGFyZUxvY2FsZXMobG9jYWxlc1tpXSwgZGVmYXVsdExvY2FsZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHRoaXNNYXRjaCA+PSBiZXN0TWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoID0gdGhpc01hdGNoOworICAgICAgICAgICAgICAgICAgICBzZWxlY3RNZSA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBsb2NhbGVNZW51LnNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuY2hvaWNlQ29sb3IpOworICAgICAgICAgICAgbG9jYWxlTWVudS5zZWxlY3Qoc2VsZWN0TWUpOworCisgICAgICAgICAgICBMYWJlbCBsb2NhbGVMYWJlbCA9bmV3IExhYmVsKCJEaXNwbGF5IExvY2FsZSIpOworICAgICAgICAgICAgbG9jYWxlTGFiZWwuc2V0Rm9udChEZW1vVXRpbGl0eS5sYWJlbEZvbnQpOworCisgICAgICAgICAgICBsb2NhbGVQYW5lbC5hZGQobG9jYWxlTGFiZWwpOworICAgICAgICAgICAgbG9jYWxlUGFuZWwuYWRkKGxvY2FsZU1lbnUpOworICAgICAgICAgICAgRGVtb1V0aWxpdHkuZml4R3JpZChsb2NhbGVQYW5lbCwyKTsKKworICAgICAgICAgICAgbG9jYWxlTWVudS5hZGRJdGVtTGlzdGVuZXIoIG5ldyBJdGVtTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgaXRlbVN0YXRlQ2hhbmdlZChJdGVtRXZlbnQgZSkgeworICAgICAgICAgICAgICAgICAgICBMb2NhbGUgbG9jID0gbG9jYWxlc1tsb2NhbGVNZW51LmdldFNlbGVjdGVkSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hhbmdlIGxvY2FsZSB0byAiICsgbG9jLmdldERpc3BsYXlOYW1lKCkpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsZW5kYXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhcnNbaV0uc2V0TG9jYWxlKGxvYyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWlsbGlzRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOworICAgICAgICB9CisgICAgICAgIGFkZChyb2xsQWRkUGFuZWwpOworICAgICAgICBhZGQoRGVtb1V0aWxpdHkuY3JlYXRlU3BhY2VyKCkpOworICAgICAgICBhZGQobG9jYWxlUGFuZWwpOworICAgICAgICBhZGQoRGVtb1V0aWxpdHkuY3JlYXRlU3BhY2VyKCkpOworCisvLyBDT1BZUklHSFQKKyAgICAgICAgUGFuZWwgY29weXJpZ2h0UGFuZWwgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgYWRkV2l0aEZvbnQgKGNvcHlyaWdodFBhbmVsLG5ldyBMYWJlbChEZW1vVXRpbGl0eS5jb3B5cmlnaHQxLCBMYWJlbC5MRUZUKSwKKyAgICAgICAgICAgIERlbW9VdGlsaXR5LmNyZWRpdEZvbnQpOworICAgICAgICBEZW1vVXRpbGl0eS5maXhHcmlkKGNvcHlyaWdodFBhbmVsLDEpOworICAgICAgICBhZGQoY29weXJpZ2h0UGFuZWwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdXNlcnMgY2hhbmdlIHRoZSBwYXR0ZXJuIHRleHQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Rm9ybWF0RnJvbVBhdHRlcm4oKSB7CisgICAgICAgIFN0cmluZyB0aW1lUGF0dGVybiA9IHBhdHRlcm5UZXh0LmdldFRleHQoKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGVuZGFycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgY2FsZW5kYXJzW2ldLmFwcGx5UGF0dGVybih0aW1lUGF0dGVybik7CisgICAgICAgIH0KKworICAgICAgICBtaWxsaXNGb3JtYXQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBwYXJzZSB0aGUgdGltZQorICAgICAqIHN0cmluZyBpbiBvbmUgb2YgdGhlIGZvcm1hdHRlZCBkYXRlIGZpZWxkcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRleHRDaGFuZ2VkKGludCBpbmRleCkgeworICAgICAgICBTdHJpbmcgcmlnaHRTdHJpbmcgPSBjYWxlbmRhcnNbaW5kZXhdLnRleHQuZ2V0VGV4dCgpOworCisgICAgICAgIFBhcnNlUG9zaXRpb24gc3RhdHVzID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisKKyAgICAgICAgaWYgKHJpZ2h0U3RyaW5nLmxlbmd0aCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yVGV4dCgiRXJyb3I6IG5vIGlucHV0IHRvIHBhcnNlISIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIERhdGUgZGF0ZSA9IGNhbGVuZGFyc1tpbmRleF0uZm9ybWF0LnBhcnNlKHJpZ2h0U3RyaW5nLCBzdGF0dXMpOworICAgICAgICAgICAgdGltZSA9IGRhdGUuZ2V0VGltZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWxlbmRhcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICBjYWxlbmRhcnNbaV0udGV4dC5zZXRUZXh0KCJFUlJPUiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVycm9yVGV4dCgiRXhjZXB0aW9uOiAiICsgZS5nZXRDbGFzcygpLnRvU3RyaW5nKCkgKyAiIHBhcnNpbmc6ICIrcmlnaHRTdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IHN0YXJ0ID0gY2FsZW5kYXJzW2luZGV4XS50ZXh0LmdldFNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAgIGludCBlbmQgPSBjYWxlbmRhcnNbaW5kZXhdLnRleHQuZ2V0U2VsZWN0aW9uRW5kKCk7CisKKyAgICAgICAgbWlsbGlzRm9ybWF0KCk7CisKKyAgICAgICAgY2FsZW5kYXJzW2luZGV4XS50ZXh0LnNlbGVjdChzdGFydCxlbmQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIGZvcm1hdCB0aGUgdGltZQorICAgICAqIGluIHRoZSAiTWlsbGlzIiB0ZXh0IGZpZWxkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1pbGxpc0Zvcm1hdCgpIHsKKyAgICAgICAgU3RyaW5nIG91dCA9ICIiOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsZW5kYXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG91dCA9IGNhbGVuZGFyc1tpXS5mb3JtYXQuZm9ybWF0KG5ldyBEYXRlKHRpbWUpKTsKKyAgICAgICAgICAgICAgICBjYWxlbmRhcnNbaV0udGV4dC5zZXRUZXh0KG91dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBjYWxlbmRhcnNbaV0udGV4dC5zZXRUZXh0KCJFUlJPUiIpOworICAgICAgICAgICAgICAgIGVycm9yVGV4dCgiRXhjZXB0aW9uOiAiICsgZS5nZXRDbGFzcygpLnRvU3RyaW5nKCkgKyAiIGZvcm1hdHRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY2FsZW5kYXJzW2ldLm5hbWUgKyAiICIgKyB0aW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB1c2VycyBjaGFuZ2UgdGhlIHBhdHRlcm4gdGV4dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwYXR0ZXJuVGV4dENoYW5nZWQoKSB7CisgICAgICAgIHNldEZvcm1hdEZyb21QYXR0ZXJuKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB1c2VycyBzZWxlY3QgYSBuZXcgcmVwcmVzZW50YXRpdmUgY2l0eS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjaXR5Q2hhbmdlZCgpIHsKKyAgICAgICAgVGltZVpvbmUgdGltZVpvbmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWxlbmRhcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNhbGVuZGFyc1tpXS5mb3JtYXQuc2V0VGltZVpvbmUodGltZVpvbmUpOworICAgICAgICB9CisgICAgICAgIG1pbGxpc0Zvcm1hdCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdXNlcnMgc2VsZWN0IGEgbmV3IHRpbWUgZmllbGQKKyAgICAgKiB0byBhZGQgb3Igcm9sbCBpdHMgdmFsdWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGF0ZUZpZWxkQ2hhbmdlZChib29sZWFuIHVwKSB7CisgICAgICAgIGludCBmaWVsZCA9IGtSb2xsQWRkRmllbGRzW2RhdGVNZW51LmdldFNlbGVjdGVkSW5kZXgoKV0uZmllbGQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWxlbmRhcnMubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjYWxlbmRhcnNbaV0ucm9sbEFkZC5nZXRTdGF0ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhbGVuZGFyIGMgPSBjYWxlbmRhcnNbaV0uY2FsZW5kYXI7CisgICAgICAgICAgICAgICAgYy5zZXRUaW1lKG5ldyBEYXRlKHRpbWUpKTsKKworICAgICAgICAgICAgICAgIGlmIChnZXRBZGQuZ2V0U3RhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjLmFkZChmaWVsZCwgdXAgPyAxIDogLTEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGMucm9sbChmaWVsZCwgdXApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRpbWUgPSBjLmdldFRpbWUoKS5nZXRUaW1lKCk7CisgICAgICAgICAgICAgICAgbWlsbGlzRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcmludCBvdXQgdGhlIGVycm9yIG1lc3NhZ2Ugd2hpbGUgZGVidWdnaW5nIHRoaXMgcHJvZ3JhbS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlcnJvclRleHQoU3RyaW5nIHMpCisgICAgeworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENhbGxlZCBpZiBhbiBhY3Rpb24gb2NjdXJzIGluIHRoZSBDYWxlbmRhckNhbGNGcmFtZSBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2dCkKKyAgICB7CisgICAgICAgIC8vICoqKiBCdXR0b24gZXZlbnRzIGFyZSBoYW5kbGVkIGhlcmUuCisgICAgICAgIE9iamVjdCBvYmogPSBldnQuZ2V0U291cmNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWN0aW9uICIgKyBvYmopOworICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgQnV0dG9uKSB7CisgICAgICAgICAgICBpZiAoZXZ0LmdldFNvdXJjZSgpID09IHVwKSB7CisgICAgICAgICAgICAgICAgZGF0ZUZpZWxkQ2hhbmdlZChmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoZXZ0LmdldFNvdXJjZSgpID09IGRvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZUZpZWxkQ2hhbmdlZCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBIYW5kbGVzIHRoZSBldmVudC4gUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBpcyBoYW5kbGVkIGFuZCBzaG91bGQgbm90CisgICAgICogYmUgcGFzc2VkIHRvIHRoZSBwYXJlbnQgb2YgdGhpcyBjb21wb25lbnQuIFRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIKKyAgICAgKiBjYWxscyBzb21lIGhlbHBlciBtZXRob2RzIHRvIG1ha2UgbGlmZSBlYXNpZXIgb24gdGhlIHByb2dyYW1tZXIuCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0tleUV2ZW50KEtleUV2ZW50IGV2dCkKKyAgICB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigia2V5ICIgKyBldnQpOworICAgICAgICBpZiAoZXZ0LmdldElEKCkgPT0gS2V5RXZlbnQuS0VZX1JFTEVBU0VEKSB7IAorICAgICAgICAgICAgaWYgKGV2dC5nZXRTb3VyY2UoKSA9PSBwYXR0ZXJuVGV4dCkgeworICAgICAgICAgICAgICAgIHBhdHRlcm5UZXh0Q2hhbmdlZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWxlbmRhcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV2dC5nZXRTb3VyY2UoKSA9PSBjYWxlbmRhcnNbaV0udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENoYW5nZWQoaSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1dpbmRvd0V2ZW50KFdpbmRvd0V2ZW50IGV2dCkgCisgICAgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndpbmRvdyAiICsgZXZ0KTsKKyAgICAgICAgaWYgKGV2dC5nZXRJRCgpID09IFdpbmRvd0V2ZW50LldJTkRPV19DTE9TSU5HICYmIAorICAgICAgICAgICAgZXZ0LmdldFNvdXJjZSgpID09IHRoaXMpIHsKKyAgICAgICAgICAgIHRoaXMuaGlkZSgpOworICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7CisKKyAgICAgICAgICAgIGlmIChhcHBsZXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgYXBwbGV0LmRlbW9DbG9zZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZSBTeXN0ZW0uZXhpdCgwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKgorICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NFdmVudChBV1RFdmVudCBldnQpCisgICAgeworICAgICAgICBpZiAoZXZ0LmdldElEKCkgPT0gQVdURXZlbnQuIEV2ZW50LkFDVElPTl9FVkVOVCAmJiBldnQudGFyZ2V0ID09IHVwKSB7CisgICAgICAgICAgICBkYXRlRmllbGRDaGFuZ2VkKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZ0LmlkID09IEV2ZW50LkFDVElPTl9FVkVOVCAmJiBldnQudGFyZ2V0ID09IGRvd24pIHsKKyAgICAgICAgICAgIGRhdGVGaWVsZENoYW5nZWQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgKi8KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCAgICAgICAgRklFTERfQ09MVU1OUyA9IDM1OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyAgICAgREVGQVVMVF9GT1JNQVQgPSAiRUVFRSBNTU1NIGQsIHl5eXkgRyI7CisKKworICAgIGNsYXNzIENhbGVuZGFyUmVjIHsKKyAgICAgICAgcHVibGljIENhbGVuZGFyUmVjKFN0cmluZyBuYW1lU3RyLCBDYWxlbmRhciBjYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lU3RyOworICAgICAgICAgICAgY2FsZW5kYXIgPSBjYWw7CisgICAgICAgICAgICByb2xsQWRkID0gbmV3IENoZWNrYm94KCk7CisKKyAgICAgICAgICAgIHRleHQgPSBuZXcgSlRleHRGaWVsZCgiIixGSUVMRF9DT0xVTU5TKTsKKyAgICAgICAgICAgIHRleHQuc2V0Rm9udChEZW1vVXRpbGl0eS5lZGl0Rm9udCk7CisKKyAgICAgICAgICAgIGZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5GVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgICAgICAvL2Zvcm1hdC5hcHBseVBhdHRlcm4oREVGQVVMVF9GT1JNQVQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0TG9jYWxlKExvY2FsZSBsb2MpIHsKKyAgICAgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gdG9QYXR0ZXJuKCk7CisKKyAgICAgICAgICAgIGZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKGNhbGVuZGFyLCBEYXRlRm9ybWF0LkZVTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2MpOworICAgICAgICAgICAgYXBwbHlQYXR0ZXJuKHBhdHRlcm4pOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgYXBwbHlQYXR0ZXJuKFN0cmluZyBwYXR0ZXJuKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0IGluc3RhbmNlb2YgU2ltcGxlRGF0ZUZvcm1hdCkgeworICAgICAgICAgICAgICAgICgoU2ltcGxlRGF0ZUZvcm1hdClmb3JtYXQpLmFwcGx5UGF0dGVybihwYXR0ZXJuKTsKKy8vaGV5IHthbH0gLSAKKy8vICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgaW5zdGFuY2VvZiBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdCkgeworLy8gICAgICAgICAgICAgICAgKChqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdClmb3JtYXQpLmFwcGx5UGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgdG9QYXR0ZXJuKCkgeworICAgICAgICAgICAgaWYgKGZvcm1hdCBpbnN0YW5jZW9mIFNpbXBsZURhdGVGb3JtYXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKChTaW1wbGVEYXRlRm9ybWF0KWZvcm1hdCkudG9QYXR0ZXJuKCk7CisvL2hleSB7YWx9IC0gCisvLyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0IGluc3RhbmNlb2YgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQpIHsKKy8vICAgICAgICAgICAgICAgIHJldHVybiAoKGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0KWZvcm1hdCkudG9QYXR0ZXJuKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIENhbGVuZGFyICBjYWxlbmRhcjsKKyAgICAgICAgRGF0ZUZvcm1hdCAgICAgICAgICBmb3JtYXQ7CisgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgbmFtZTsKKyAgICAgICAgSlRleHRGaWVsZCAgICAgICAgICAgdGV4dDsKKyAgICAgICAgQ2hlY2tib3ggICAgICAgICAgICByb2xsQWRkOworICAgIH07CisKKyAgICBwcml2YXRlIGZpbmFsIENhbGVuZGFyUmVjW10gY2FsZW5kYXJzID0geworICAgICAgICBuZXcgQ2FsZW5kYXJSZWMoIkdyZWdvcmlhbiIsICAgICAgICBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKSksCisgICAgICAgIG5ldyBDYWxlbmRhclJlYygiSGVicmV3IiwgICAgICAgICAgIG5ldyBIZWJyZXdDYWxlbmRhcigpKSwKKyAgICAgICAgbmV3IENhbGVuZGFyUmVjKCJJc2xhbWljIChjaXZpbCkiLCAgbWFrZUlzbGFtaWModHJ1ZSkpLAorICAgICAgICBuZXcgQ2FsZW5kYXJSZWMoIklzbGFtaWMgKHRydWUpIiwgICBtYWtlSXNsYW1pYyhmYWxzZSkpLAorICAgICAgICBuZXcgQ2FsZW5kYXJSZWMoIkJ1ZGRoaXN0IiwgICAgICAgICBuZXcgQnVkZGhpc3RDYWxlbmRhcigpKSwKKyAgICAgICAgbmV3IENhbGVuZGFyUmVjKCJKYXBhbmVzZSIsICAgICAgICAgbmV3IEphcGFuZXNlQ2FsZW5kYXIoKSksCisvLyAgICAgICAgbmV3IENhbGVuZGFyUmVjKCJDaGluZXNlIiwgICAgICAgICAgbmV3IENoaW5lc2VDYWxlbmRhcigpKSwKKyAgICB9OworCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgQ2FsZW5kYXIgbWFrZUlzbGFtaWMoYm9vbGVhbiBjaXZpbCkgeworICAgICAgICBJc2xhbWljQ2FsZW5kYXIgY2FsID0gbmV3IElzbGFtaWNDYWxlbmRhcigpOworICAgICAgICBjYWwuc2V0Q2l2aWwoY2l2aWwpOworICAgICAgICByZXR1cm4gY2FsOworICAgIH07Cit9OworCitjbGFzcyBSb2xsQWRkRmllbGQgeworICAgIFJvbGxBZGRGaWVsZChpbnQgZmllbGQsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMuZmllbGQgPSBmaWVsZDsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB9CisgICAgaW50IGZpZWxkOworICAgIFN0cmluZyBuYW1lOworfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9jYWxlbmRhci9DYWxlbmRhckZyYW1lLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJGcmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmMDQ5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJGcmFtZS5qYXZhCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJGcmFtZS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE5IDA0OjEwOjIzICQgCisgKiAkUmV2aXNpb246IDEuMTAgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8uY2FsZW5kYXI7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5IZWJyZXdDYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkJ1ZGRoaXN0Q2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5KYXBhbmVzZUNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuSXNsYW1pY0NhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKKy8vaW1wb3J0IGphdmEudXRpbC5TaW1wbGVUaW1lWm9uZTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lOworaW1wb3J0IGphdmEuYXBwbGV0LkFwcGxldDsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS5uZXQuKjsKK2ltcG9ydCBqYXZhLmlvLio7CisvL2ltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisvL2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKy8vaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisvL2ltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5UaW1lWm9uZTsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby5pbXBsLio7CisKKy8qKgorICogQSBGcmFtZSBpcyBhIHRvcC1sZXZlbCB3aW5kb3cgd2l0aCBhIHRpdGxlLiBUaGUgZGVmYXVsdCBsYXlvdXQgZm9yIGEgZnJhbWUKKyAqIGlzIEJvcmRlckxheW91dC4gIFRoZSBDYWxlbmRhckZyYW1lIGNsYXNzIGRlZmluZXMgdGhlIHdpbmRvdyBsYXlvdXQgb2YKKyAqIENhbGVuZGFyRGVtby4KKyAqLworY2xhc3MgQ2FsZW5kYXJGcmFtZSBleHRlbmRzIEZyYW1lCit7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBEZW1vQXBwbGV0IGFwcGxldDsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQ2FsZW5kYXJGcmFtZSB0aGF0IGlzIGluaXRpYWxseSBpbnZpc2libGUuCisgICAgICovCisgICAgcHVibGljIENhbGVuZGFyRnJhbWUoRGVtb0FwcGxldCBteUFwcGxldCkKKyAgICB7CisgICAgICAgIHN1cGVyKCJDYWxlbmRhciBEZW1vIik7CisgICAgICAgIHRoaXMuYXBwbGV0ID0gbXlBcHBsZXQ7CisgICAgICAgIGluaXQoKTsKKworICAgICAgICAvLyBXaGVuIHRoZSB3aW5kb3cgaXMgY2xvc2VkLCB3ZSB3YW50IHRvIHNodXQgZG93biB0aGUgYXBwbGV0IG9yIGFwcGxpY2F0aW9uCisgICAgICAgIGFkZFdpbmRvd0xpc3RlbmVyKAorICAgICAgICAgICAgbmV3IFdpbmRvd0FkYXB0ZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhXaW5kb3dFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgICAgIHNldFZpc2libGUoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBkaXNwb3NlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxldCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBsZXQuZGVtb0Nsb3NlZCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgU3lzdGVtLmV4aXQoMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOworICAgIH0KKworICAgIHByaXZhdGUgQ2hvaWNlICAgICAgICAgIGRpc3BsYXlNZW51OworICAgIHByaXZhdGUgTG9jYWxlW10gICAgICAgIGxvY2FsZXMgPSBEZW1vVXRpbGl0eS5nZXRHN0xvY2FsZXMoKTsKKworICAgIHByaXZhdGUgQ2FsZW5kYXIgICAgICAgIGNhbGVuZGFyc1tdICAgPSBuZXcgQ2FsZW5kYXJbMl07CisgICAgcHJpdmF0ZSBDaG9pY2UgICAgICAgICAgY2FsTWVudVtdICAgICA9IG5ldyBDaG9pY2VbMl07CisgICAgcHJpdmF0ZSBDb2xvcmVkTGFiZWwgICAgbW9udGhMYWJlbFtdICA9IG5ldyBDb2xvcmVkTGFiZWxbMl07CisgICAgcHJpdmF0ZSBEYXRlRm9ybWF0ICAgICAgbW9udGhGb3JtYXRbXSA9IG5ldyBEYXRlRm9ybWF0WzJdOworCisgICAgcHJpdmF0ZSBCdXR0b24gICAgICAgICAgcHJldlllYXI7CisgICAgcHJpdmF0ZSBCdXR0b24gICAgICAgICAgcHJldk1vbnRoOworICAgIHByaXZhdGUgQnV0dG9uICAgICAgICAgIGdvdG9Ub2RheTsKKyAgICBwcml2YXRlIEJ1dHRvbiAgICAgICAgICBuZXh0TW9udGg7CisgICAgcHJpdmF0ZSBCdXR0b24gICAgICAgICAgbmV4dFllYXI7CisgICAgcHJpdmF0ZSBDYWxlbmRhclBhbmVsICAgY2FsZW5kYXJQYW5lbDsKKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkKENvbnRhaW5lciBjb250YWluZXIsIENvbXBvbmVudCBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZEJhZ0xheW91dCBnLCBHcmlkQmFnQ29uc3RyYWludHMgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ3JpZHdpZHRoLCBpbnQgd2VpZ2h0eCkKKyAgICB7CisgICAgICAgIGMuZ3JpZHdpZHRoID0gZ3JpZHdpZHRoOworICAgICAgICBjLndlaWdodHggPSB3ZWlnaHR4OworICAgICAgICBnLnNldENvbnN0cmFpbnRzKGNvbXBvbmVudCwgYyk7CisgICAgICAgIGNvbnRhaW5lci5hZGQoY29tcG9uZW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgYXBwbGV0LiBZb3UgbmV2ZXIgbmVlZCB0byBjYWxsIHRoaXMgZGlyZWN0bHksIGl0CisgICAgICogaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHN5c3RlbSBvbmNlIHRoZSBhcHBsZXQgaXMgY3JlYXRlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBpbml0KCkgeworICAgICAgICBzZXRCYWNrZ3JvdW5kKERlbW9VdGlsaXR5LmJnQ29sb3IpOworICAgICAgICBzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgxMCwxMCkpOworCisgICAgICAgIFBhbmVsIHRvcFBhbmVsID0gbmV3IFBhbmVsKCk7CisgICAgICAgIEdyaWRCYWdMYXlvdXQgZyA9IG5ldyBHcmlkQmFnTGF5b3V0KCk7CisgICAgICAgIHRvcFBhbmVsLnNldExheW91dChnKTsKKyAgICAgICAgR3JpZEJhZ0NvbnN0cmFpbnRzIGMgPSBuZXcgR3JpZEJhZ0NvbnN0cmFpbnRzKCk7CisgICAgICAgIGMuZmlsbCA9IEdyaWRCYWdDb25zdHJhaW50cy5IT1JJWk9OVEFMOworCisgICAgICAgIC8vIEJ1aWxkIHRoZSB0d28gbWVudXMgZm9yIHNlbGVjdGluZyB3aGljaCBjYWxlbmRhciBpcyBkaXNwbGF5ZWQsCisgICAgICAgIC8vIHBsdXMgdGhlIG1vbnRoL3llYXIgbGFiZWwgZm9yIGVhY2ggY2FsZW5kYXIKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgICAgIGNhbE1lbnVbaV0gPSBuZXcgQ2hvaWNlKCk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IENBTEVOREFSUy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGNhbE1lbnVbaV0uYWRkSXRlbShDQUxFTkRBUlNbal0ubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxNZW51W2ldLnNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuY2hvaWNlQ29sb3IpOworICAgICAgICAgICAgY2FsTWVudVtpXS5zZWxlY3QoaSk7CisgICAgICAgICAgICBjYWxNZW51W2ldLmFkZEl0ZW1MaXN0ZW5lcihuZXcgQ2FsTWVudUxpc3RlbmVyKCkpOworCisgICAgICAgICAgICAvLyBMYWJlbCBmb3IgdGhlIGN1cnJlbnQgbW9udGggbmFtZQorICAgICAgICAgICAgbW9udGhMYWJlbFtpXSA9IG5ldyBDb2xvcmVkTGFiZWwoIiIsIENPTE9SU1tpXSk7CisgICAgICAgICAgICBtb250aExhYmVsW2ldLnNldEZvbnQoRGVtb1V0aWxpdHkudGl0bGVGb250KTsKKworICAgICAgICAgICAgLy8gQW5kIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHRvIHVzZSBmb3IgdGhpcyBzbG90CisgICAgICAgICAgICBjYWxlbmRhcnNbaV0gPSBDQUxFTkRBUlNbaV0uY2FsZW5kYXI7CisKKyAgICAgICAgICAgIGFkZCh0b3BQYW5lbCwgY2FsTWVudVtpXSwgZywgYywgNSwgMCk7CisgICAgICAgICAgICBhZGQodG9wUGFuZWwsIG1vbnRoTGFiZWxbaV0sIGcsIGMsIEdyaWRCYWdDb25zdHJhaW50cy5SRU1BSU5ERVIsIDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IGFkZCB0aGUgbmV4dC9wcmV2aW91cyB5ZWFyL21vbnRoIGJ1dHRvbnM6CisgICAgICAgIHByZXZZZWFyID0gbmV3IEJ1dHRvbigiPDwiKTsKKyAgICAgICAgcHJldlllYXIuYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFkZEFjdGlvbihDYWxlbmRhci5ZRUFSLCAtMSkpOworCisgICAgICAgIHByZXZNb250aCA9IG5ldyBCdXR0b24oIjwiKTsKKyAgICAgICAgcHJldk1vbnRoLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBZGRBY3Rpb24oQ2FsZW5kYXIuTU9OVEgsIC0xKSk7CisKKyAgICAgICAgZ290b1RvZGF5ID0gbmV3IEJ1dHRvbigiVG9kYXkiKTsKKyAgICAgICAgZ290b1RvZGF5LmFkZEFjdGlvbkxpc3RlbmVyKCBuZXcgQWN0aW9uTGlzdGVuZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGNhbGVuZGFyUGFuZWwuc2V0RGF0ZSggbmV3IERhdGUoKSApOworICAgICAgICAgICAgICAgIHVwZGF0ZU1vbnRoTmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisKKyAgICAgICAgbmV4dE1vbnRoID0gbmV3IEJ1dHRvbigiPiIpOworICAgICAgICBuZXh0TW9udGguYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFkZEFjdGlvbihDYWxlbmRhci5NT05USCwgMSkpOworCisgICAgICAgIG5leHRZZWFyID0gbmV3IEJ1dHRvbigiPj4iKTsKKyAgICAgICAgbmV4dFllYXIuYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFkZEFjdGlvbihDYWxlbmRhci5ZRUFSLCAxKSk7CisKKyAgICAgICAgYy5maWxsID0gR3JpZEJhZ0NvbnN0cmFpbnRzLk5PTkU7CisgICAgICAgIGFkZCh0b3BQYW5lbCwgcHJldlllYXIsICBnLCBjLCAxLCAwKTsKKyAgICAgICAgYWRkKHRvcFBhbmVsLCBwcmV2TW9udGgsIGcsIGMsIDEsIDApOworICAgICAgICBhZGQodG9wUGFuZWwsIGdvdG9Ub2RheSwgZywgYywgMSwgMCk7CisgICAgICAgIGFkZCh0b3BQYW5lbCwgbmV4dE1vbnRoLCBnLCBjLCAxLCAwKTsKKyAgICAgICAgYWRkKHRvcFBhbmVsLCBuZXh0WWVhciwgIGcsIGMsIDEsIDApOworCisgICAgICAgIC8vIE5vdyBhZGQgdGhlIG1lbnUgZm9yIHNlbGVjdGluZyB0aGUgZGlzcGxheSBsYW5ndWFnZQorICAgICAgICBQYW5lbCBkaXNwbGF5UGFuZWwgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgeworICAgICAgICAgICAgZGlzcGxheU1lbnUgPSBuZXcgQ2hvaWNlKCk7CisgICAgICAgICAgICBMb2NhbGUgZGVmYXVsdExvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgICAgICBpbnQgYmVzdE1hdGNoID0gLTEsIHRoaXNNYXRjaCA9IC0xOworICAgICAgICAgICAgaW50IHNlbGVjdE1lID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW2ldLmdldExhbmd1YWdlKCkuZXF1YWxzKGxvY2FsZXNbaS0xXS5nZXRMYW5ndWFnZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICBpIDwgbG9jYWxlcy5sZW5ndGggLSAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW2ldLmdldExhbmd1YWdlKCkuZXF1YWxzKGxvY2FsZXNbaSsxXS5nZXRMYW5ndWFnZSgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlNZW51LmFkZEl0ZW0oIGxvY2FsZXNbaV0uZ2V0RGlzcGxheU5hbWUoKSApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlNZW51LmFkZEl0ZW0oIGxvY2FsZXNbaV0uZ2V0RGlzcGxheUxhbmd1YWdlKCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRoaXNNYXRjaCA9IERlbW9VdGlsaXR5LmNvbXBhcmVMb2NhbGVzKGxvY2FsZXNbaV0sIGRlZmF1bHRMb2NhbGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh0aGlzTWF0Y2ggPj0gYmVzdE1hdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIGJlc3RNYXRjaCA9IHRoaXNNYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0TWUgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGlzcGxheU1lbnUuc2V0QmFja2dyb3VuZChEZW1vVXRpbGl0eS5jaG9pY2VDb2xvcik7CisgICAgICAgICAgICBkaXNwbGF5TWVudS5zZWxlY3Qoc2VsZWN0TWUpOworCisgICAgICAgICAgICBkaXNwbGF5TWVudS5hZGRJdGVtTGlzdGVuZXIoIG5ldyBJdGVtTGlzdGVuZXIoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBpdGVtU3RhdGVDaGFuZ2VkKEl0ZW1FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvY2FsZSBsb2MgPSBsb2NhbGVzW2Rpc3BsYXlNZW51LmdldFNlbGVjdGVkSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyUGFuZWwuc2V0TG9jYWxlKCBsb2MgKTsKKyAgICAgICAgICAgICAgICAgICAgbW9udGhGb3JtYXRbMF0gPSBtb250aEZvcm1hdFsxXSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1vbnRoTmFtZSgpOworICAgICAgICAgICAgICAgICAgICByZXBhaW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOworCisgICAgICAgICAgICBMYWJlbCBsMSA9IG5ldyBMYWJlbCgiRGlzcGxheSBMYW5ndWFnZToiLCBMYWJlbC5SSUdIVCk7CisgICAgICAgICAgICBsMS5zZXRGb250KERlbW9VdGlsaXR5LmxhYmVsRm9udCk7CisKKyAgICAgICAgICAgIGRpc3BsYXlQYW5lbC5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoKSk7CisgICAgICAgICAgICBkaXNwbGF5UGFuZWwuYWRkKGwxKTsKKyAgICAgICAgICAgIGRpc3BsYXlQYW5lbC5hZGQoZGlzcGxheU1lbnUpOworCisgICAgICAgIH0KKyAgICAgICAgYy5maWxsID0gR3JpZEJhZ0NvbnN0cmFpbnRzLk5PTkU7CisgICAgICAgIGMuYW5jaG9yID0gR3JpZEJhZ0NvbnN0cmFpbnRzLkVBU1Q7CisKKyAgICAgICAgYWRkKHRvcFBhbmVsLCBkaXNwbGF5UGFuZWwsIGcsIGMsIEdyaWRCYWdDb25zdHJhaW50cy5SRU1BSU5ERVIsIDApOworCisgICAgICAgIC8vIFRoZSB0aXRsZSwgYnV0dG9ucywgZXRjLiBnbyBpbiBhIHBhbmVsIGF0IHRoZSB0b3Agb2YgdGhlIHdpbmRvdworICAgICAgICBhZGQoIk5vcnRoIiwgdG9wUGFuZWwpOworCisgICAgICAgIC8vIFRoZSBjb3B5cmlnaHQgbm90aWNlIGdvZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93CisgICAgICAgIExhYmVsIGNvcHlyaWdodCA9IG5ldyBMYWJlbChEZW1vVXRpbGl0eS5jb3B5cmlnaHQxLCBMYWJlbC5MRUZUKTsKKyAgICAgICAgY29weXJpZ2h0LnNldEZvbnQoRGVtb1V0aWxpdHkuY3JlZGl0Rm9udCk7CisgICAgICAgIGFkZCgiU291dGgiLCBjb3B5cmlnaHQpOworCisgICAgICAgIC8vIE5vdyBjcmVhdGUgdGhlIGJpZyBjYWxlbmRhciBwYW5lbCBhbmQgc3RpY2sgaXQgaW4gdGhlIG1pZGRsZQorICAgICAgICBjYWxlbmRhclBhbmVsID0gbmV3IENhbGVuZGFyUGFuZWwoIGxvY2FsZXNbZGlzcGxheU1lbnUuZ2V0U2VsZWN0ZWRJbmRleCgpXSApOworICAgICAgICBhZGQoIkNlbnRlciIsIGNhbGVuZGFyUGFuZWwpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAgICBjYWxlbmRhclBhbmVsLnNldENhbGVuZGFyKGksIGNhbGVuZGFyc1tpXSk7CisgICAgICAgICAgICBjYWxlbmRhclBhbmVsLnNldENvbG9yKGksIENPTE9SU1tpXSk7CisgICAgICAgIH0KKworICAgICAgICB1cGRhdGVNb250aE5hbWUoKTsKKyAgICB9OworCisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlTW9udGhOYW1lKCkKKyAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtb250aEZvcm1hdFtpXSA9PSBudWxsKSB7ICAgICAvLyBUT0RPOiBvcHRpbWl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZUZvcm1hdCBmID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJzW2ldLCBEYXRlRm9ybWF0Lk1FRElVTSwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW2Rpc3BsYXlNZW51LmdldFNlbGVjdGVkSW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgaW5zdGFuY2VvZiBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQgZjEgPSAoY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0KSBmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYxLmFwcGx5UGF0dGVybigiTU1NTSwgeXl5eSBHIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjEuc2V0VGltZVpvbmUobmV3IFNpbXBsZVRpbWVab25lKDAsICJVVEMiKSk7CisvL2hleSB7YWx9IC0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmIGluc3RhbmNlb2YgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0IGYxID0gKGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0KSBmOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgZjEuYXBwbHlQYXR0ZXJuKCJNTU1NLCB5eXl5IEciKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYxLnNldFRpbWVab25lKG5ldyBTaW1wbGVUaW1lWm9uZSgwLCAiVVRDIikpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhGb3JtYXRbaV0gPSBmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9oZXkge2x3fSAtIHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIGluIHRoaXMgcm91dGluZSB0aGF0IGN1YXNlcyBleGNlcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbW9udGhMYWJlbFtpXS5zZXRUZXh0KCBtb250aEZvcm1hdFtpXS5mb3JtYXQoIGNhbGVuZGFyUGFuZWwuZmlyc3RPZk1vbnRoKCkgKSk7CisgICAgICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsTWVudUxpc3RlbmVyIHJlc3BvbmRzIHRvIGV2ZW50cyBpbiB0aGUgdHdvIHBvcHVwIG1lbnVzIHRoYXQgc2VsZWN0CisgICAgICogdGhlIGNhbGVuZGFyIHN5c3RlbXMgdG8gYmUgdXNlZCBpbiB0aGUgZGlzcGxheS4gIEl0IGZpZ3VyZXMgb3V0IHdoaWNoCisgICAgICogb2YgdGhlIHR3byBtZW51cyB0aGUgZXZlbnQgb2NjdXJyZWQgaW4gYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgKiBlbGVtZW50IG9mIHRoZSBjYWxlbmRhcnNbXSBhcnJheSB0byBtYXRjaCB0aGUgbmV3IHNlbGVjdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIENhbE1lbnVMaXN0ZW5lciBpbXBsZW1lbnRzIEl0ZW1MaXN0ZW5lcgorICAgIHsKKyAgICAgICAgIHB1YmxpYyB2b2lkIGl0ZW1TdGF0ZUNoYW5nZWQoSXRlbUV2ZW50IGUpCisgICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbE1lbnUubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGUuZ2V0SXRlbVNlbGVjdGFibGUoKSA9PSBjYWxNZW51W2ldKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgdGhlIG1lbnUgdGhhdCB0aGUgZXZlbnQgaGFwcGVuZWQgaW4uCisgICAgICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggbmV3IGNhbGVuZGFyIHRoZXkgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyIG5ld0NhbCA9IENBTEVOREFSU1sgY2FsTWVudVtpXS5nZXRTZWxlY3RlZEluZGV4KCkgXS5jYWxlbmRhcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2FsICE9IGNhbGVuZGFyc1tpXSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYW55IG9mIHRoZSBvdGhlciBtZW51cyBhcmUgc2V0IHRvIHRoZSBzYW1lIG5ldyBjYWxlbmRhcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgYWJvdXQgdG8gdXNlIGZvciB0aGlzIG1lbnUsIHNldCB0aGVtIHRvIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxlbmRhciBmcm9tICp0aGlzKiBtZW51IHNvIHdlIHdvbid0IGhhdmUgdHdvIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNhbGVuZGFycy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqICE9IGkgJiYgY2FsZW5kYXJzW2pdID09IG5ld0NhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhcnNbal0gPSBjYWxlbmRhcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyUGFuZWwuc2V0Q2FsZW5kYXIoaiwgY2FsZW5kYXJzW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhGb3JtYXRbal0gPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgQ0FMRU5EQVJTLmxlbmd0aDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsZW5kYXJzW2pdID09IENBTEVOREFSU1trXS5jYWxlbmRhcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbE1lbnVbal0uc2VsZWN0KGspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHVwZGF0ZSB0aGlzIG1lbnUgdG8gdXNlIHRoZSBuZXcgY2FsZW5kYXIgdGhlIHVzZXIgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyc1tpXSA9IG5ld0NhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyUGFuZWwuc2V0Q2FsZW5kYXIoaSwgbmV3Q2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoRm9ybWF0W2ldID0gbnVsbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTW9udGhOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBBZGRBY3Rpb24gaGFuZGxlcyB0aGUgbmV4dC9wcmV2aW91cyB5ZWFyL21vbnRoIGJ1dHRvbnMuLi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIEFkZEFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKyAgICAgICAgQWRkQWN0aW9uKGludCBmaWVsZCwgaW50IGFtb3VudCkgeworICAgICAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkOworICAgICAgICAgICAgdGhpcy5hbW91bnQgPSBhbW91bnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgY2FsZW5kYXJQYW5lbC5hZGQoZmllbGQsIGFtb3VudCk7CisgICAgICAgICAgICB1cGRhdGVNb250aE5hbWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgaW50IGZpZWxkLCBhbW91bnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29sb3JlZExhYmVsIGlzIHNpbWlsYXIgdG8gamF2YS5hd3QuTGFiZWwsIHdpdGggdHdvIGRpZmZlcmVuY2VzOgorICAgICAqCisgICAgICogIC0gWW91IGNhbiBzZXQgaXRzIHRleHQgY29sb3IKKyAgICAgKgorICAgICAqICAtIEl0IGRyYXdzIHRleHQgdXNpbmcgZHJhd1N0cmluZyByYXRoZXIgdGhhbiB1c2luZyBhIGhvc3Qtc3BlY2lmaWMKKyAgICAgKiAgICAiUGVlciIgb2JqZWN0IGxpa2UgQVdUIGRvZXMuICBPbiAxLjIsIHVzaW5nIGRyYXdTdHJpbmcgZ2l2ZXMKKyAgICAgKiAgICB1cyBCaWRpIHJlb3JkZXJpbmcgZm9yIGZyZWUuCisgICAgICovCisgICAgc3RhdGljIHByaXZhdGUgY2xhc3MgQ29sb3JlZExhYmVsIGV4dGVuZHMgQ29tcG9uZW50IHsKKyAgICAgICAgcHVibGljIENvbG9yZWRMYWJlbChTdHJpbmcgbGFiZWwpIHsKKyAgICAgICAgICAgIHRleHQgPSBsYWJlbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBDb2xvcmVkTGFiZWwoU3RyaW5nIGxhYmVsLCBDb2xvciBjKSB7CisgICAgICAgICAgICB0ZXh0ID0gbGFiZWw7CisgICAgICAgICAgICBjb2xvciA9IGM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyBsYWJlbCkgeworICAgICAgICAgICAgdGV4dCA9IGxhYmVsOworICAgICAgICAgICAgcmVwYWludCgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0Rm9udChGb250IGYpIHsKKyAgICAgICAgICAgIGZvbnQgPSBmOworICAgICAgICAgICAgcmVwYWludCgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZykgeworICAgICAgICAgICAgRm9udE1ldHJpY3MgZm0gPSBnLmdldEZvbnRNZXRyaWNzKGZvbnQpOworCisgICAgICAgICAgICBSZWN0YW5nbGUgYm91bmRzID0gZ2V0Qm91bmRzKCk7CisKKyAgICAgICAgICAgIGcuc2V0Q29sb3IoY29sb3IpOworICAgICAgICAgICAgZy5zZXRGb250KGZvbnQpOworICAgICAgICAgICAgZy5kcmF3U3RyaW5nKHRleHQsIGZtLnN0cmluZ1dpZHRoKCJcdTAwYTAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0LzIgKyBmbS5nZXRIZWlnaHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgIC0gZm0uZ2V0QXNjZW50KCkgKyBmbS5nZXRMZWFkaW5nKCkvMik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgRGltZW5zaW9uIGdldFByZWZlcnJlZFNpemUoKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0TWluaW11bVNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBEaW1lbnNpb24gZ2V0TWluaW11bVNpemUoKSB7CisgICAgICAgICAgICBGb250TWV0cmljcyBmbSA9IGdldEZvbnRNZXRyaWNzKGZvbnQpOworCisgICAgICAgICAgICByZXR1cm4gbmV3IERpbWVuc2lvbiggZm0uc3RyaW5nV2lkdGgodGV4dCkgKyAyKmZtLnN0cmluZ1dpZHRoKCJcdTAwYTAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS5nZXRIZWlnaHQoKSArIGZtLmdldExlYWRpbmcoKSoyKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0ZXh0OworICAgICAgICBDb2xvciBjb2xvciA9IENvbG9yLmJsYWNrOworICAgICAgICBGb250IGZvbnQgPSBEZW1vVXRpbGl0eS5sYWJlbEZvbnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJpbnQgb3V0IHRoZSBlcnJvciBtZXNzYWdlIHdoaWxlIGRlYnVnZ2luZyB0aGlzIHByb2dyYW0uCisgICAgICovCisgICAgcHVibGljIHZvaWQgZXJyb3JUZXh0KFN0cmluZyBzKQorICAgIHsKKyAgICAgICAgaWYgKERFQlVHKQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBDYWxlbmRhclJlYyB7CisgICAgICAgIHB1YmxpYyBDYWxlbmRhclJlYyhTdHJpbmcgbmFtZVN0ciwgQ2FsZW5kYXIgY2FsKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1lID0gbmFtZVN0cjsKKyAgICAgICAgICAgIGNhbGVuZGFyID0gY2FsOworICAgICAgICB9CisKKyAgICAgICAgQ2FsZW5kYXIgIGNhbGVuZGFyOworICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIG5hbWU7CisgICAgfTsKKworICAgIHByaXZhdGUgZmluYWwgQ2FsZW5kYXJSZWNbXSBDQUxFTkRBUlMgPSB7CisgICAgICAgIG5ldyBDYWxlbmRhclJlYygiR3JlZ29yaWFuIENhbGVuZGFyIiwgICAgICAgbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCkpLAorICAgICAgICBuZXcgQ2FsZW5kYXJSZWMoIkhlYnJldyBDYWxlbmRhciIsICAgICAgICAgIG5ldyBIZWJyZXdDYWxlbmRhcigpKSwKKyAgICAgICAgbmV3IENhbGVuZGFyUmVjKCJJc2xhbWljIENhbGVuZGFyIiwgICAgICAgICBtYWtlSXNsYW1pYyhmYWxzZSkpLAorICAgICAgICBuZXcgQ2FsZW5kYXJSZWMoIklzbGFtaWMgQ2l2aWwgQ2FsZW5kYXIgIiwgIG1ha2VJc2xhbWljKHRydWUpKSwKKyAgICAgICAgbmV3IENhbGVuZGFyUmVjKCJCdWRkaGlzdCBDYWxlbmRhciIsICAgICAgICBuZXcgQnVkZGhpc3RDYWxlbmRhcigpKSwKKyAgICAgICAgbmV3IENhbGVuZGFyUmVjKCJKYXBhbmVzZSBDYWxlbmRhciIsICAgICAgICBuZXcgSmFwYW5lc2VDYWxlbmRhcigpKSwKKyAgICB9OworCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgQ2FsZW5kYXIgbWFrZUlzbGFtaWMoYm9vbGVhbiBjaXZpbCkgeworICAgICAgICBJc2xhbWljQ2FsZW5kYXIgY2FsID0gbmV3IElzbGFtaWNDYWxlbmRhcigpOworICAgICAgICBjYWwuc2V0Q2l2aWwoY2l2aWwpOworICAgICAgICByZXR1cm4gY2FsOworICAgIH07CisKKyAgICBzdGF0aWMgZmluYWwgQ29sb3JbXSBDT0xPUlMgPSB7IENvbG9yLmJsdWUsIENvbG9yLmJsYWNrIH07Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9jYWxlbmRhci9DYWxlbmRhclBhbmVsLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJQYW5lbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFkMDVjNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJQYW5lbC5qYXZhCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vY2FsZW5kYXIvQ2FsZW5kYXJQYW5lbC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE5IDA0OjEwOjIzICQgCisgKiAkUmV2aXNpb246IDEuOSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuZGVtby5jYWxlbmRhcjsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLio7CisKK2ltcG9ydCBqYXZhLmFwcGxldC5BcHBsZXQ7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworLy9pbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS5uZXQuKjsKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8vaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKKy8vaW1wb3J0IGphdmEudXRpbC5TaW1wbGVUaW1lWm9uZTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lOworLy9pbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLmltcGwuKjsKKworY2xhc3MgQ2FsZW5kYXJQYW5lbCBleHRlbmRzIENhbnZhcyB7CisKKyAgICBwdWJsaWMgQ2FsZW5kYXJQYW5lbCggTG9jYWxlIGxvY2FsZSApIHsKKyAgICAgICAgc2V0TG9jYWxlKGxvY2FsZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgaWYgKGZEaXNwbGF5TG9jYWxlID09IG51bGwgfHwgIWZEaXNwbGF5TG9jYWxlLmVxdWFscyhsb2NhbGUpKSB7CisgICAgICAgICAgICBmRGlzcGxheUxvY2FsZSA9IGxvY2FsZTsKKyAgICAgICAgICAgIGRpcnR5ID0gdHJ1ZTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmQ2FsZW5kYXIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZkNhbGVuZGFyW2ldICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZlN5bWJvbHNbaV0gPSBuZXcgRGF0ZUZvcm1hdFN5bWJvbHMoZkNhbGVuZGFyW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRGlzcGxheUxvY2FsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGxhbmcgPSBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKTsKKyAgICAgICAgICAgIGxlZnRUb1JpZ2h0ID0gIShsYW5nLmVxdWFscygiaXciKSB8fCBsYW5nLmVxdWFscygiYXIiKSk7CisKKyAgICAgICAgICAgIHJlcGFpbnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldERhdGUoRGF0ZSBkYXRlKSB7CisgICAgICAgIGZTdGFydE9mTW9udGggPSBkYXRlOworICAgICAgICBkaXJ0eSA9IHRydWU7CisgICAgICAgIHJlcGFpbnQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGQoaW50IGZpZWxkLCBpbnQgZGVsdGEpCisgICAgeworICAgICAgICBzeW5jaHJvbml6ZWQoZkNhbGVuZGFyKSB7CisgICAgICAgICAgICBmQ2FsZW5kYXJbMF0uc2V0VGltZShmU3RhcnRPZk1vbnRoKTsKKyAgICAgICAgICAgIGZDYWxlbmRhclswXS5hZGQoZmllbGQsIGRlbHRhKTsKKyAgICAgICAgICAgIGZTdGFydE9mTW9udGggPSBmQ2FsZW5kYXJbMF0uZ2V0VGltZSgpOworICAgICAgICB9CisgICAgICAgIGRpcnR5ID0gdHJ1ZTsKKyAgICAgICAgcmVwYWludCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENvbG9yKGludCBpbmRleCwgQ29sb3IgYykgeworICAgICAgICBmQ29sb3JbaW5kZXhdID0gYzsKKyAgICAgICAgcmVwYWludCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENhbGVuZGFyKGludCBpbmRleCwgQ2FsZW5kYXIgYykgeworICAgICAgICBEYXRlIGRhdGUgPSAoZkNhbGVuZGFyW2luZGV4XSA9PSBudWxsKSA/IG5ldyBEYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmQ2FsZW5kYXJbaW5kZXhdLmdldFRpbWUoKTsKKworICAgICAgICBmQ2FsZW5kYXJbaW5kZXhdID0gYzsKKyAgICAgICAgZkNhbGVuZGFyW2luZGV4XS5zZXRUaW1lKGRhdGUpOworCisgICAgICAgIGZTeW1ib2xzW2luZGV4XSA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scyhjLCBmRGlzcGxheUxvY2FsZSk7CisgICAgICAgIGRpcnR5ID0gdHJ1ZTsKKyAgICAgICAgcmVwYWludCgpOworICAgIH0KKworICAgIHB1YmxpYyBDYWxlbmRhciBnZXRDYWxlbmRhcihpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIGZDYWxlbmRhcltpbmRleF07CisgICAgfQorCisgICAgcHVibGljIExvY2FsZSBnZXREaXNwbGF5TG9jYWxlKCkgeworICAgICAgICByZXR1cm4gZkRpc3BsYXlMb2NhbGU7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZmlyc3RPZk1vbnRoKCkgeworICAgICAgICByZXR1cm4gZlN0YXJ0T2ZNb250aDsKKyAgICB9CisKKyAgICBwcml2YXRlIERhdGUgc3RhcnRPZk1vbnRoKERhdGUgZGF0ZUluTW9udGgpCisgICAgeworICAgICAgICBzeW5jaHJvbml6ZWQoZkNhbGVuZGFyKSB7CisgICAgICAgICAgICBmQ2FsZW5kYXJbMF0uc2V0VGltZShkYXRlSW5Nb250aCk7CisKKyAgICAgICAgICAgIGludCBlcmEgPSBmQ2FsZW5kYXJbMF0uZ2V0KENhbGVuZGFyLkVSQSk7CisgICAgICAgICAgICBpbnQgeWVhciA9IGZDYWxlbmRhclswXS5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgICAgICBpbnQgbW9udGggPSBmQ2FsZW5kYXJbMF0uZ2V0KENhbGVuZGFyLk1PTlRIKTsKKworICAgICAgICAgICAgZkNhbGVuZGFyWzBdLmNsZWFyKCk7CisgICAgICAgICAgICBmQ2FsZW5kYXJbMF0uc2V0KENhbGVuZGFyLkVSQSwgZXJhKTsKKyAgICAgICAgICAgIGZDYWxlbmRhclswXS5zZXQoQ2FsZW5kYXIuWUVBUiwgeWVhcik7CisgICAgICAgICAgICBmQ2FsZW5kYXJbMF0uc2V0KENhbGVuZGFyLk1PTlRILCBtb250aCk7CisgICAgICAgICAgICBmQ2FsZW5kYXJbMF0uc2V0KENhbGVuZGFyLkRBVEUsIDEpOworCisgICAgICAgICAgICByZXR1cm4gZkNhbGVuZGFyWzBdLmdldFRpbWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjYWxjdWxhdGUoKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQXMgYSB3b3JrYXJvdW5kIGZvciBKREsgMS4xLjMgYW5kIGJlbG93LCB3aGVyZSBDYWxlbmRhcnMgYW5kIHRpbWUKKyAgICAgICAgLy8gem9uZXMgYXJlIGEgYml0IGdvb2Z5LCBhbHdheXMgc2V0IG15IGNhbGVuZGFyJ3MgdGltZSB6b25lIHRvIFVUQy4KKyAgICAgICAgLy8gWW91IHdvdWxkIHRoaW5rIEkgd291bGQgd2FudCB0byBkbyB0aGlzIGluIHRoZSAic2V0IiBmdW5jdGlvbiBhYm92ZSwKKyAgICAgICAgLy8gYnV0IGlmIEkgZG8gdGhhdCwgdGhlIHByb2dyYW0gaGFuZ3Mgd2hlbiB0aGlzIGNsYXNzIGlzIGxvYWRlZCwKKyAgICAgICAgLy8gcGVyaGFwcyBkdWUgdG8gc29tZSBzb3J0IG9mIHN0YXRpYyBpbml0aWFsaXphdGlvbiBvcmRlcmluZyBwcm9ibGVtLgorICAgICAgICAvLyBTbyBJIGRvIGl0IGhlcmUgaW5zdGVhZC4KKyAgICAgICAgLy8KKyAgICAgICAgZkNhbGVuZGFyWzBdLnNldFRpbWVab25lKG5ldyBTaW1wbGVUaW1lWm9uZSgwLCAiVVRDIikpOworCisgICAgICAgIENhbGVuZGFyIGMgPSAoQ2FsZW5kYXIpZkNhbGVuZGFyWzBdLmNsb25lKCk7IC8vIFRlbXBvcmFyeSBjb3B5CisKKyAgICAgICAgZlN0YXJ0T2ZNb250aCA9IHN0YXJ0T2ZNb250aChmU3RhcnRPZk1vbnRoKTsKKworICAgICAgICAvLyBTdGFzaCBhd2F5IGEgZmV3IHVzZWZ1bCBjb25zdGFudHMgZm9yIHRoaXMgY2FsZW5kYXIgYW5kIGRpc3BsYXkKKyAgICAgICAgbWluRGF5ID0gYy5nZXRNaW5pbXVtKENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgZGF5c0luV2VlayA9IGMuZ2V0TWF4aW11bShDYWxlbmRhci5EQVlfT0ZfV0VFSykgLSBtaW5EYXkgKyAxOworCisgICAgICAgIGZpcnN0RGF5T2ZXZWVrID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoZkRpc3BsYXlMb2NhbGUpLmdldEZpcnN0RGF5T2ZXZWVrKCk7CisKKyAgICAgICAgLy8gU3Rhc2ggYXdheSBhIERhdGUgZm9yIHRoZSBzdGFydCBvZiB0aGlzIG1vbnRoCisKKyAgICAgICAgLy8gRmluZCB0aGUgZGF5IG9mIHdlZWsgb2YgdGhlIGZpcnN0IGRheSBpbiB0aGlzIG1vbnRoCisgICAgICAgIGMuc2V0VGltZShmU3RhcnRPZk1vbnRoKTsKKyAgICAgICAgZmlyc3REYXlJbk1vbnRoID0gYy5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOworICAgICAgICBpbnQgZmlyc3RXZWVrID0gYy5nZXQoQ2FsZW5kYXIuV0VFS19PRl9NT05USCk7CisKKyAgICAgICAgLy8gTm93IGZpbmQgdGhlICMgb2YgZGF5cyBpbiB0aGUgbW9udGgKKyAgICAgICAgYy5yb2xsKENhbGVuZGFyLkRBVEUsIGZhbHNlKTsKKyAgICAgICAgZGF5c0luTW9udGggPSBjLmdldChDYWxlbmRhci5EQVRFKTsKKworICAgICAgICAvLyBGaW5hbGx5LCBmaW5kIHRoZSBlbmQgb2YgdGhlIG1vbnRoLCBpLmUuIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBvbmUKKyAgICAgICAgYy5yb2xsKENhbGVuZGFyLkRBVEUsIHRydWUpOworICAgICAgICBjLmFkZChDYWxlbmRhci5NT05USCwgMSk7CisgICAgICAgIGMuZ2V0VGltZSgpOyAgICAgICAgLy8gSkRLIDEuMS4yIGJ1ZyB3b3JrYXJvdW5kCisgICAgICAgIGMuYWRkKENhbGVuZGFyLlNFQ09ORCwgLTEpOworICAgICAgICBEYXRlIGVuZE9mTW9udGggPSBjLmdldFRpbWUoKTsKKyAgICAgICAgZW5kT2ZNb250aCA9IG51bGw7CisgICAgICAgIGludCBsYXN0V2VlayA9IGMuZ2V0KENhbGVuZGFyLldFRUtfT0ZfTU9OVEgpOworCisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGZ1bGwgb3IgcGFydGlhbCB3ZWVrcyBpbiB0aGlzIG1vbnRoLgorICAgICAgICBudW1XZWVrcyA9IGxhc3RXZWVrIC0gZmlyc3RXZWVrICsgMTsKKworICAgICAgICBkaXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBpbnQgWElOU0VUID0gNDsKKyAgICBzdGF0aWMgZmluYWwgaW50IFlJTlNFVCA9IDI7CisKKyAgICAvKgorICAgICAqIENvbnZlcnQgZnJvbSB0aGUgZGF5IG51bWJlciB3aXRoaW4gYSBtb250aCAoMS1iYXNlZCkKKyAgICAgKiB0byB0aGUgY2VsbCBjb29yZGluYXRlcyBvbiB0aGUgY2FsZW5kYXIgKDAtYmFzZWQpCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGRhdGVUb0NlbGwoaW50IGRhdGUsIFBvaW50IHBvcykKKyAgICB7CisgICAgICAgIGludCBjZWxsID0gKGRhdGUgKyBmaXJzdERheUluTW9udGggLSBmaXJzdERheU9mV2VlayAtIG1pbkRheSk7CisgICAgICAgIGlmIChmaXJzdERheUluTW9udGggPCBmaXJzdERheU9mV2VlaykgeworICAgICAgICAgICAgY2VsbCArPSBkYXlzSW5XZWVrOworICAgICAgICB9CisKKyAgICAgICAgcG9zLnggPSBjZWxsICUgZGF5c0luV2VlazsKKyAgICAgICAgcG9zLnkgPSBjZWxsIC8gZGF5c0luV2VlazsKKyAgICB9CisgICAgcHJpdmF0ZSBQb2ludCBkYXRlVG9DZWxsKGludCBkYXRlKSB7CisgICAgICAgIFBvaW50IHAgPSBuZXcgUG9pbnQoMCwwKTsKKyAgICAgICAgZGF0ZVRvQ2VsbChkYXRlLCBwKTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZykgeworCisgICAgICAgIGlmIChkaXJ0eSkgeworICAgICAgICAgICAgY2FsY3VsYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBQb2ludCBjZWxsUG9zID0gbmV3IFBvaW50KDAsMCk7ICAgICAvLyBUZW1wb3JhcnkgdmFyaWFibGUKKyAgICAgICAgRGltZW5zaW9uIGQgPSB0aGlzLmdldFNpemUoKTsKKworICAgICAgICBnLnNldENvbG9yKENvbG9yLmxpZ2h0R3JheSk7CisgICAgICAgIGcuZmlsbFJlY3QoMCwwLGQud2lkdGgsZC5oZWlnaHQpOworCisgICAgICAgIC8vIERyYXcgdGhlIGRheSBuYW1lcyBhdCB0aGUgdG9wCisgICAgICAgIGcuc2V0Q29sb3IoQ29sb3IuYmxhY2spOworICAgICAgICBnLnNldEZvbnQoRGVtb1V0aWxpdHkubGFiZWxGb250KTsKKyAgICAgICAgRm9udE1ldHJpY3MgZm0gPSBnLmdldEZvbnRNZXRyaWNzKCk7CisgICAgICAgIGludCBsYWJlbEhlaWdodCA9IGZtLmdldEhlaWdodCgpICsgWUlOU0VUICogMjsKKworICAgICAgICBpbnQgdiA9IGZtLmdldEFzY2VudCgpICsgWUlOU0VUOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRheXNJbldlZWs7IGkrKykgeworICAgICAgICAgICAgaW50IGRheU51bSA9IChpICsgbWluRGF5ICsgZmlyc3REYXlPZldlZWsgLSAyKSAlIGRheXNJbldlZWsgKyAxOworICAgICAgICAgICAgU3RyaW5nIGRheU5hbWUgPSBmU3ltYm9sc1swXS5nZXRXZWVrZGF5cygpW2RheU51bV07CisKKworICAgICAgICAgICAgZG91YmxlIGg7CisgICAgICAgICAgICBpZiAobGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICBoID0gZC53aWR0aCooaSArIDAuNSkgLyBkYXlzSW5XZWVrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoID0gZC53aWR0aCooZGF5c0luV2VlayAtIGkgLSAwLjUpIC8gZGF5c0luV2VlazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGggLT0gZm0uc3RyaW5nV2lkdGgoZGF5TmFtZSkgLyAyOworCisgICAgICAgICAgICBnLmRyYXdTdHJpbmcoZGF5TmFtZSwgKGludCloLCB2KTsKKyAgICAgICAgfQorCisgICAgICAgIGRvdWJsZSBjZWxsSGVpZ2h0ID0gKGQuaGVpZ2h0IC0gbGFiZWxIZWlnaHQgLSAxKSAvIG51bVdlZWtzOworICAgICAgICBkb3VibGUgY2VsbFdpZHRoID0gKGRvdWJsZSkoZC53aWR0aCAtIDEpIC8gZGF5c0luV2VlazsKKworICAgICAgICAvLyBEcmF3IGEgd2hpdGUgYmFja2dyb3VuZCBpbiB0aGUgcGFydCBvZiB0aGUgY2FsZW5kYXIKKyAgICAgICAgLy8gdGhhdCBkaXNwbGF5cyB0aGlzIG1vbnRoLgorICAgICAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IGhvdyBtdWNoIG9mIHRoZSBmaXJzdCB3ZWVrIHNob3VsZCBiZSBzaGFkZWQuCisgICAgICAgIHsKKyAgICAgICAgICAgIGcuc2V0Q29sb3IoQ29sb3Iud2hpdGUpOworICAgICAgICAgICAgZGF0ZVRvQ2VsbCgxLCBjZWxsUG9zKTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IChpbnQpKGNlbGxQb3MueCpjZWxsV2lkdGgpOyAgLy8gV2lkdGggb2YgdW5zaGFkZWQgYXJlYQorCisgICAgICAgICAgICBpZiAobGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICBnLmZpbGxSZWN0KChpbnQpKHdpZHRoKSwgbGFiZWxIZWlnaHQgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZC53aWR0aCAtIHdpZHRoLCAoaW50KWNlbGxIZWlnaHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBnLmZpbGxSZWN0KDAsIGxhYmVsSGVpZ2h0ICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGQud2lkdGggLSB3aWR0aCwgKGludCljZWxsSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWxsIG9mIHRoZSBpbnRlcm1lZGlhdGUgd2Vla3MgZ2V0IHNoYWRlZCBjb21wbGV0ZWx5CisgICAgICAgICAgICBnLmZpbGxSZWN0KDAsIChpbnQpKGxhYmVsSGVpZ2h0ICsgY2VsbEhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICBkLndpZHRoLCAoaW50KShjZWxsSGVpZ2h0ICogKG51bVdlZWtzIC0gMikpKTsKKworICAgICAgICAgICAgLy8gTm93IGZpZ3VyZSBvdXQgdGhlIGxhc3Qgd2Vlay4KKyAgICAgICAgICAgIGRhdGVUb0NlbGwoZGF5c0luTW9udGgsIGNlbGxQb3MpOworICAgICAgICAgICAgd2lkdGggPSAoaW50KSgoY2VsbFBvcy54KzEpKmNlbGxXaWR0aCk7ICAvLyBXaWR0aCBvZiBzaGFkZWQgYXJlYQorCisgICAgICAgICAgICBpZiAobGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICBnLmZpbGxSZWN0KDAsIChpbnQpKGxhYmVsSGVpZ2h0ICsgKG51bVdlZWtzLTEpICogY2VsbEhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgKGludCljZWxsSGVpZ2h0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZy5maWxsUmVjdChkLndpZHRoIC0gd2lkdGgsIChpbnQpKGxhYmVsSGVpZ2h0ICsgKG51bVdlZWtzLTEpICogY2VsbEhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgKGludCljZWxsSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIC8vIERyYXcgdGhlIFgvWSBncmlkIGxpbmVzCisgICAgICAgIGcuc2V0Q29sb3IoQ29sb3IuYmxhY2spOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBudW1XZWVrczsgaSsrKSB7CisgICAgICAgICAgICBpbnQgeSA9IChpbnQpKGxhYmVsSGVpZ2h0ICsgaSAqIGNlbGxIZWlnaHQpOworICAgICAgICAgICAgZy5kcmF3TGluZSgwLCB5LCBkLndpZHRoIC0gMSwgeSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gZGF5c0luV2VlazsgaSsrKSB7CisgICAgICAgICAgICBpbnQgeCA9IChpbnQpKGkgKiBjZWxsV2lkdGgpOworICAgICAgICAgICAgZy5kcmF3TGluZSh4LCBsYWJlbEhlaWdodCwgeCwgZC5oZWlnaHQgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBsb29wIHRocm91Z2ggYWxsIG9mIHRoZSBkYXlzIGluIHRoZSBtb250aCwgZmlndXJlIG91dCB3aGVyZQorICAgICAgICAvLyB0aGV5IGdvIGluIHRoZSBncmlkLCBhbmQgZHJhdyB0aGUgZGF5ICMgZm9yIGVhY2ggb25lCisKKyAgICAgICAgLy8gRmlndXJlIG91dCB0aGUgZGF0ZSBvZiB0aGUgZmlyc3QgY2VsbCBpbiB0aGUgY2FsZW5kYXIgZGlzcGxheQorICAgICAgICBpbnQgY2VsbCA9ICgxICsgZmlyc3REYXlJbk1vbnRoIC0gZmlyc3REYXlPZldlZWsgLSBtaW5EYXkpOworICAgICAgICBpZiAoZmlyc3REYXlJbk1vbnRoIDwgZmlyc3REYXlPZldlZWspIHsKKyAgICAgICAgICAgIGNlbGwgKz0gZGF5c0luV2VlazsKKyAgICAgICAgfQorCisgICAgICAgIENhbGVuZGFyIGMgPSAoQ2FsZW5kYXIpZkNhbGVuZGFyWzBdLmNsb25lKCk7CisgICAgICAgIGMuc2V0VGltZShmU3RhcnRPZk1vbnRoKTsKKyAgICAgICAgYy5hZGQoQ2FsZW5kYXIuREFURSwgLWNlbGwpOworCisgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbnVtV2Vla3M7IHJvdysrKSB7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkYXlzSW5XZWVrOyBjb2wrKykgeworCisgICAgICAgICAgICAgICAgZy5zZXRGb250KERlbW9VdGlsaXR5Lm51bWJlckZvbnQpOworICAgICAgICAgICAgICAgIGcuc2V0Q29sb3IoQ29sb3IuYmxhY2spOworICAgICAgICAgICAgICAgIGZtID0gZy5nZXRGb250TWV0cmljcygpOworCisgICAgICAgICAgICAgICAgaW50IGNlbGx4OworICAgICAgICAgICAgICAgIGlmIChsZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgICAgICBjZWxseCA9IChpbnQpKChjb2wpICogY2VsbFdpZHRoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjZWxseCA9IChpbnQpKChkYXlzSW5XZWVrIC0gY29sIC0gMSkgKiBjZWxsV2lkdGgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludCBjZWxseSA9IChpbnQpKHJvdyAqIGNlbGxIZWlnaHQgKyBsYWJlbEhlaWdodCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmQ2FsZW5kYXJbaV0uc2V0VGltZShjLmdldFRpbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50IGRhdGUgPSBmQ2FsZW5kYXJbaV0uZ2V0KENhbGVuZGFyLkRBVEUpOworICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGRhdGUpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF5TnVtID0gYnVmZmVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50IHg7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gY2VsbHggKyAoaW50KWNlbGxXaWR0aCAtIFhJTlNFVCAtIGZtLnN0cmluZ1dpZHRoKGRheU51bSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gY2VsbHggKyBYSU5TRVQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IHkgPSBjZWxseSArICsgZm0uZ2V0QXNjZW50KCkgKyBZSU5TRVQgKyBpICogZm0uZ2V0SGVpZ2h0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZDb2xvcltpXSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnLnNldENvbG9yKGZDb2xvcltpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZy5kcmF3U3RyaW5nKGRheU51bSwgeCwgeSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUgPT0gMSB8fCByb3cgPT0gMCAmJiBjb2wgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZy5zZXRGb250KERlbW9VdGlsaXR5Lm51bWJlckZvbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1vbnRoID0gZlN5bWJvbHNbaV0uZ2V0TW9udGhzKClbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZDYWxlbmRhcltpXS5nZXQoQ2FsZW5kYXIuTU9OVEgpXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGNlbGx4ICsgWElOU0VUOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gY2VsbHggKyAoaW50KWNlbGxXaWR0aCAtIFhJTlNFVCAtIGZtLnN0cmluZ1dpZHRoKG1vbnRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGcuZHJhd1N0cmluZyhtb250aCwgeCwgeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjLmFkZChDYWxlbmRhci5EQVRFLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEltcG9ydGFudCBzdGF0ZSB2YXJpYWJsZXMKKyAgICBwcml2YXRlIENhbGVuZGFyW10gICAgICAgICAgZkNhbGVuZGFyID0gbmV3IENhbGVuZGFyWzRdOworICAgIHByaXZhdGUgQ29sb3JbXSAgICAgICAgICAgICBmQ29sb3IgPSBuZXcgQ29sb3JbNF07CisKKyAgICBwcml2YXRlIExvY2FsZSAgICAgICAgICAgICAgZkRpc3BsYXlMb2NhbGU7CisgICAgcHJpdmF0ZSBEYXRlRm9ybWF0U3ltYm9sc1tdIGZTeW1ib2xzID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzWzRdOworCisgICAgcHJpdmF0ZSBEYXRlICAgICAgICAgICAgICAgIGZTdGFydE9mTW9udGggPSBuZXcgRGF0ZSgpOyAgICAgLy8gMDA6MDA6MDAgb24gZmlyc3QgZGF5IG9mIG1vbnRoCisKKyAgICAvLyBDYWNoZWQgY2FsY3VsYXRpb25zIHRvIG1ha2UgZHJhd2luZyBmYXN0ZXIuCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50ICAgICAgIG1pbkRheTsgICAgICAgICAgIC8vIE1pbmltdW0gbGVnYWwgZGF5ICMKKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgICAgICAgZGF5c0luV2VlazsgICAgICAgLy8gIyBvZiBkYXlzIGluIGEgd2VlaworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCAgICAgICBmaXJzdERheU9mV2VlazsgICAvLyBGaXJzdCBkYXkgdG8gZGlzcGxheSBpbiB3ZWVrCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50ICAgICAgIG51bVdlZWtzOyAgICAgICAgIC8vICMgZnVsbCBvciBwYXJ0aWFsIHdlZWtzIGluIG1vbnRoCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50ICAgICAgIGRheXNJbk1vbnRoOyAgICAgIC8vICMgZGF5cyBpbiB0aGlzIG1vbnRoCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50ICAgICAgIGZpcnN0RGF5SW5Nb250aDsgIC8vIERheSBvZiB3ZWVrIG9mIGZpcnN0IGRheSBpbiBtb250aAorICAgIHByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gICBsZWZ0VG9SaWdodDsKKworICAgIHByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gZGlydHkgPSB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2NhbGVuZGFyL3BhY2thZ2UuaHRtbCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9jYWxlbmRhci9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDY1MjAwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9jYWxlbmRhci9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9jYWxlbmRhci9wYWNrYWdlLmh0bWwsdiAkCisgICRSZXZpc2lvbjogMS4xICQKKyAgJERhdGU6IDIwMDAvMDMvMTUgMDY6Mjg6NDggJAorLS0+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSI+CitDYWxlbmRhciBkZW1vIGFwcGxpY2F0aW9ucyBpbmNsdWRpbmcgZGF0ZS90aW1lIGFyaXRobWV0aWMuCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2hvbGlkYXkvSG9saWRheUJvcmRlclBhbmVsLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaG9saWRheS9Ib2xpZGF5Qm9yZGVyUGFuZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MmIxMjFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2hvbGlkYXkvSG9saWRheUJvcmRlclBhbmVsLmphdmEKQEAgLTAsMCArMSw1NTEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk3LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9ob2xpZGF5L0hvbGlkYXlCb3JkZXJQYW5lbC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA0OjU1ICQgCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8uaG9saWRheTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLio7CitpbXBvcnQgamF2YS5hd3QuKjsKKworLyoqCisgKiBWYXJpb3VzIGdyYXBoaWNhbCBib3JkZXJzLiBUaGUgYm9yZGVyIGl0c2VsZiBpcyBhIFBhbmVsIHNvIHRoYXQgaXQgY2FuCisgKiBjb250YWluIG90aGVyIENvbXBvbmVudHMgKGkuZS4gaXQgYm9yZGVycyBzb21ldGhpbmcpLiBZb3UgdXNlIHRoZQorICogSG9saWRheUJvcmRlclBhbmVsIGxpa2UgYW55IG90aGVyIFBhbmVsOiB5b3Ugc2V0IHRoZSBsYXlvdXQgdGhhdCB5b3UgcHJlZmVyIGFuZAorICogYWRkIENvbXBvbmVudHMgdG8gaXQuIEJld2FyZSB0aGF0IGEgbnVsbCBsYXlvdXQgZG9lcyBub3Qgb2JleSB0aGUgaW5zZXRzCisgKiBvZiB0aGUgcGFuZWwgc28gaWYgeW91IHVzZSBudWxsIGxheW91dHMsIGFkanVzdCB5b3VyIG1lYXN1cmVtZW50cyB0bworICogaGFuZGxlIHRoZSBib3JkZXIgYnkgY2FsbGluZyBpbnNldHMoKS4KKyAqCisgKiBAYXV0aG9yICBBbmR5IENsYXJrLCBUYWxpZ2VudCBJbmMuCisgKiBAdmVyc2lvbiAxLjAKKyAqLworcHVibGljIGNsYXNzIEhvbGlkYXlCb3JkZXJQYW5lbCBleHRlbmRzIFBhbmVsIHsKKyAgICAvLyBDb25zdGFudHMKKworICAgIC8qKiBTb2xpZCBib3JkZXIuICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU09MSUQgPSAwOworICAgIC8qKiBBIHJhaXNlZCBib3JkZXIuICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgUkFJU0VEID0gMTsKKyAgICAvKiogQSBsb3dlcmVkIGJvcmRlci4gKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBMT1dFUkVEID0gMjsKKyAgICAvKiogQW4gZXRjaGVkIGluIGJvcmRlci4gKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBJTiA9IDM7CisgICAgLyoqIEFuIGV0Y2hlZCBvdXQgYm9yZGVyLiAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE9VVCA9IDQ7CisKKyAgICAvKiogTGVmdCBhbGlnbm1lbnQuICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTEVGVCA9IDA7CisgICAgLyoqIENlbnRlciBhbGlnbm1lbnQuICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQ0VOVEVSID0gMTsKKyAgICAvKiogUmlnaHQgYWxpZ25tZW50LiAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFJJR0hUID0gMjsKKworICAgIC8qKiBEZWZhdWx0IHN0eWxlIChJTikuICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgREVGQVVMVF9TVFlMRSA9IElOOworICAgIC8qKiBEZWZhdWx0IHRoaWNrbmVzcyAoMTApLiAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERFRkFVTFRfVEhJQ0tORVNTID0gMTA7CisgICAgLyoqIERlZmF1bHQgdGhpY2tuZXNzIGZvciBzb2xpZCBib3JkZXJzICg0KS4gKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUZBVUxUX1NPTElEX1RISUNLTkVTUyA9IDQ7CisgICAgLyoqIERlZmF1bHQgdGhpY2tuZXNzIGZvciByYWlzZWQgYm9yZGVycyAoMikuICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgREVGQVVMVF9SQUlTRURfVEhJQ0tORVNTID0gMjsKKyAgICAvKiogRGVmYXVsdCB0aGlja25lc3MgZm9yIGxvd2VyZWQgYm9yZGVycyAoMikuICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgREVGQVVMVF9MT1dFUkVEX1RISUNLTkVTUyA9IDI7CisgICAgLyoqIERlZmF1bHQgdGhpY2tuZXNzIGZvciBldGNoZWQtaW4gYm9yZGVycyAoMTApLiAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERFRkFVTFRfSU5fVEhJQ0tORVNTID0gMTA7CisgICAgLyoqIERlZmF1bHQgdGhpY2tuZXNzIGZvciBldGNoZWQtb3V0IGJvcmRlcnMgKDEwKS4gKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUZBVUxUX09VVF9USElDS05FU1MgPSAxMDsKKyAgICAvKiogRGVmYXVsdCBnYXAgYmV0d2VlbiBib3JkZXIgYW5kIGNvbnRhaW5lZCBjb21wb25lbnQgKDUpLiAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERFRkFVTFRfR0FQID0gNTsKKyAgICAvKiogRGVmYXVsdCBjb2xvciAoYmxhY2spLiBBcHBsaWVzIHRvIFNPTElEIGFuZCBldGNoZWQgYm9yZGVycy4gKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIERFRkFVTFRfQ09MT1IgPSBDb2xvci5ibGFjazsKKworICAgIC8qKiBEZWZhdWx0IGZvbnQgKFRpbWVzUm9tYW4sUExBSU4sMTQpLiBPbmx5IGFwcGxpZXMgdG8gZXRjaGVkIGJvcmRlcnMuICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBGb250IERFRkFVTFRfRk9OVCA9IG5ldyBGb250KCJUaW1lc1JvbWFuIiwgRm9udC5QTEFJTiwgMTQpOworICAgIC8qKiBEZWZhdWx0IGFsaWdubWVudCAoTEVGVCkuIE9ubHkgYXBwbGllcyB0byBldGNoZWQgYm9yZGVycy4gKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUZBVUxUX0FMSUdOTUVOVCA9IExFRlQ7CisKKyAgICAvLyBEYXRhCisgICAgcHJpdmF0ZSBpbnQgc3R5bGU7CisgICAgcHJpdmF0ZSBpbnQgdGhpY2tuZXNzOworICAgIHByaXZhdGUgaW50IGdhcDsKKyAgICBwcml2YXRlIENvbG9yIGNvbG9yOworCisgICAgcHJpdmF0ZSBGb250IGZvbnQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgdGV4dDsKKyAgICBwcml2YXRlIGludCBhbGlnbm1lbnQ7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4gTWFrZXMgZGVmYXVsdCBib3JkZXIuCisgICAgICovCisgICAgcHVibGljIEhvbGlkYXlCb3JkZXJQYW5lbCgpIHsKKworICAgICAgICAvLyBpbml0aWFsaXplIGRhdGEKKyAgICAgICAgc3R5bGUgICAgICAgPSBERUZBVUxUX1NUWUxFOworICAgICAgICB0aGlja25lc3MgICA9IERFRkFVTFRfVEhJQ0tORVNTOworICAgICAgICBnYXAgICAgICAgICA9IERFRkFVTFRfR0FQOworICAgICAgICBjb2xvciAgICAgICA9IERFRkFVTFRfQ09MT1I7CisKKyAgICAgICAgdGV4dCAgICAgICAgPSBudWxsOworICAgICAgICBmb250ICAgICAgICA9IERFRkFVTFRfRk9OVDsKKyAgICAgICAgYWxpZ25tZW50ICAgPSBERUZBVUxUX0FMSUdOTUVOVDsKKworICAgICAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4gTWFrZXMgYW4gZXRjaGVkIElOIGJvcmRlciB3aXRoIGdpdmVuIHRleHQgY2FwdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0ZXh0ICBUZXh0IGNhcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgSG9saWRheUJvcmRlclBhbmVsKFN0cmluZyB0ZXh0KSB7CisgICAgICAgIHRoaXMoKTsKKworICAgICAgICBzdHlsZSA9IElOOworICAgICAgICB0aGlzLnRleHQgPSB0ZXh0OworICAgICAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4gTWFrZXMgU09MSUQgYm9yZGVyIHdpdGggY29sb3IgYW5kIHRoaWNrbmVzcyBnaXZlbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb2xvciAgICAgVGhlIGNvbG9yIGZvciB0aGUgYm9yZGVyLgorICAgICAqIEBwYXJhbSB0aGlja25lc3MgVGhlIHRoaWNrbmVzcyBvZiB0aGUgYm9yZGVyLgorICAgICAqLworICAgIHB1YmxpYyBIb2xpZGF5Qm9yZGVyUGFuZWwoQ29sb3IgY29sb3IsIGludCB0aGlja25lc3MpIHsKKyAgICAgICAgdGhpcygpOworCisgICAgICAgIHN0eWxlID0gU09MSUQ7CisgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvcjsKKyAgICAgICAgdGhpcy50aGlja25lc3MgPSB0aGlja25lc3M7CisgICAgICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLiBNYWtlcyBhIGJvcmRlciBvZiB0aGUgZ2l2ZW4gc3R5bGUgd2l0aCB0aGUgZGVmYXVsdAorICAgICAqIHRoaWNrbmVzcyBmb3IgdGhhdCBzdHlsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdHlsZSBUaGUgc3R5bGUgZm9yIHRoaXMgYm9yZGVyLgorICAgICAqLworICAgIHB1YmxpYyBIb2xpZGF5Qm9yZGVyUGFuZWwoaW50IHN0eWxlKSB7CisgICAgICAgIHRoaXMoKTsKKworICAgICAgICAvLyBzZXQgdGhpY2tuZXNzIGFwcHJvcHJpYXRlIHRvIHRoaXMgc3R5bGUKKyAgICAgICAgaW50IHRoaWNrbmVzczsKKyAgICAgICAgc3dpdGNoIChzdHlsZSkgeworICAgICAgICAgICAgY2FzZSBTT0xJRDogdGhpY2tuZXNzID0gREVGQVVMVF9TT0xJRF9USElDS05FU1M7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBSQUlTRUQ6IHRoaWNrbmVzcyA9IERFRkFVTFRfUkFJU0VEX1RISUNLTkVTUzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExPV0VSRUQ6IHRoaWNrbmVzcyA9IERFRkFVTFRfTE9XRVJFRF9USElDS05FU1M7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBJTjogdGhpY2tuZXNzID0gREVGQVVMVF9JTl9USElDS05FU1M7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBPVVQ6IHRoaWNrbmVzcyA9IERFRkFVTFRfT1VUX1RISUNLTkVTUzsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IERFRkFVTFRfVEhJQ0tORVNTOworICAgICAgICAgICAgfQorCisgICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZTsKKyAgICAgICAgdGhpcy50aGlja25lc3MgPSB0aGlja25lc3M7CisgICAgICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLiBNYWtlcyBib3JkZXIgd2l0aCBnaXZlbiBzdHlsZSBhbmQgdGhpY2tuZXNzLgorICAgICAqCisgICAgICogQHBhcmFtIHN0eWxlICAgICBUaGUgc3R5bGUgZm9yIHRoaXMgYm9yZGVyLgorICAgICAqIEBwYXJhbSB0aGlja25lc3MgVGhlIHRoaWNrbmVzcyBmb3IgdGhpcyBib3JkZXIuCisgICAgICovCisgICAgcHVibGljIEhvbGlkYXlCb3JkZXJQYW5lbChpbnQgc3R5bGUsIGludCB0aGlja25lc3MpIHsKKyAgICAgICAgdGhpcygpOworCisgICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZTsKKyAgICAgICAgdGhpcy50aGlja25lc3MgPSB0aGlja25lc3M7CisgICAgICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluc2V0cyBvZiB0aGlzIHBhbmVsLi4KKyAgICAgKi8KKyAgICBwdWJsaWMgSW5zZXRzIGdldEluc2V0cygpIHsKKyAgICAgICAgaW50IGFkanVzdG1lbnQgPSAwOworCisgICAgICAgIC8vIGFkanVzdCBmb3IgdGV4dCBzdHJpbmcKKyAgICAgICAgaWYgKHN0eWxlID09IElOIHx8IHN0eWxlID09IE9VVCkgeworICAgICAgICAgICAgaWYgKHRleHQgIT0gbnVsbCAmJiB0ZXh0Lmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHNldCBmb250IGFuZCBnZXQgaW5mbworICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gZ2V0R3JhcGhpY3MoKS5nZXRGb250TWV0cmljcyhmb250KS5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodCA+IHRoaWNrbmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdG1lbnQgPSBoZWlnaHQgLSB0aGlja25lc3M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZzoganVzdCBpbiBjYXNlIHRoZXJlIGlzIG5vIGdyYXBoaWNzIGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgLy8gICBhdCB0aGUgYmVnaW5uaW5nLgorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyByZXR1cm4gYXBwcm9wcmlhdGUgaW5zZXRzCisgICAgICAgIGludCBkaXN0ID0gdGhpY2tuZXNzICsgZ2FwOworICAgICAgICByZXR1cm4gbmV3IEluc2V0cyhkaXN0ICsgYWRqdXN0bWVudCwgZGlzdCwgZGlzdCwgZGlzdCk7CisgICAgICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHN0eWxlIG9mIHRoZSBib3JkZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSBzdHlsZSBUaGUgbmV3IHN0eWxlLgorICAgICAqLworICAgIHB1YmxpYyBIb2xpZGF5Qm9yZGVyUGFuZWwgc2V0U3R5bGUoaW50IHN0eWxlKSB7CisKKyAgICAgICAgLy8gc2V0IHRoZSBzdHlsZSBhbmQgcmUtbGF5b3V0IHRoZSBwYW5lbAorICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGU7CisgICAgICAgIGRvTGF5b3V0KCk7CisgICAgICAgIHJlcGFpbnQoKTsKKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc3R5bGUgb2YgdGhlIGJvcmRlcgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0U3R5bGUoKSB7CisKKyAgICAgICAgcmV0dXJuIHN0eWxlOworICAgICAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIGJvcmRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0aGlja25lc3MgVGhlIG5ldyB0aGlja25lc3MKKyAgICAgKi8KKyAgICBwdWJsaWMgSG9saWRheUJvcmRlclBhbmVsIHNldFRoaWNrbmVzcyhpbnQgdGhpY2tuZXNzKSB7CisKKyAgICAgICAgaWYgKHRoaWNrbmVzcyA+IDApIHsKKyAgICAgICAgICAgIHRoaXMudGhpY2tuZXNzID0gdGhpY2tuZXNzOworICAgICAgICAgICAgZG9MYXlvdXQoKTsKKyAgICAgICAgICAgIHJlcGFpbnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBib3JkZXIuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRUaGlja25lc3MoKSB7CisKKyAgICAgICAgcmV0dXJuIHRoaWNrbmVzczsKKyAgICAgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2FwIGJldHdlZW4gdGhlIGJvcmRlciBhbmQgdGhlIGNvbnRhaW5lZCBDb21wb25lbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZ2FwIFRoZSBuZXcgZ2FwLCBpbiBwaXhlbHMuCisgICAgICovCisgICAgcHVibGljIEhvbGlkYXlCb3JkZXJQYW5lbCBzZXRHYXAoaW50IGdhcCkgeworCisgICAgICAgIGlmIChnYXAgPiAtMSkgeworICAgICAgICAgICAgdGhpcy5nYXAgPSBnYXA7CisgICAgICAgICAgICBkb0xheW91dCgpOworICAgICAgICAgICAgcmVwYWludCgpOworICAgICAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBnYXAgYmV0d2VlbiB0aGUgYm9yZGVyIGFuZCB0aGUgY29udGFpbmVkIENvbXBvbmVudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEdhcCgpIHsKKworICAgICAgICByZXR1cm4gZ2FwOworICAgICAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGNvbG9yIGZvciBTT0xJRCBib3JkZXJzIGFuZCB0aGUgY2FwdGlvbiB0ZXh0CisgICAgICogY29sb3IgZm9yIGV0Y2hlZCBib3JkZXJzLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbG9yIFRoZSBuZXcgY29sb3IuCisgICAgICovCisgICAgcHVibGljIEhvbGlkYXlCb3JkZXJQYW5lbCBzZXRDb2xvcihDb2xvciBjb2xvcikgeworCisgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvcjsKKyAgICAgICAgaWYgKHN0eWxlID09IFNPTElEIHx8IHN0eWxlID09IElOIHx8IHN0eWxlID09IE9VVCkKKyAgICAgICAgICAgIHJlcGFpbnQoKTsKKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjb2xvciBmb3IgU09MSUQgYm9yZGVycyBhbmQgdGhlIGNhcHRpb24KKyAgICAgKiB0ZXh0IGNvbG9yIGZvciBldGNoZWQgYm9yZGVycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ29sb3IgZ2V0Q29sb3IoKSB7CisKKyAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBmb250LiBPbmx5IGFwcGxpZXMgdG8gZXRjaGVkIGJvcmRlcnMuCisgICAgICovCisgICAgcHVibGljIEhvbGlkYXlCb3JkZXJQYW5lbCBzZXRUZXh0Rm9udChGb250IGZvbnQpIHsKKworICAgICAgICAvLyBzZXQgZm9udAorICAgICAgICBpZiAoZm9udCAhPSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmZvbnQgPSBmb250OworICAgICAgICAgICAgaWYgKHN0eWxlID09IElOIHx8IHN0eWxlID09IE9VVCkgeworICAgICAgICAgICAgICAgIGRvTGF5b3V0KCk7CisgICAgICAgICAgICAgICAgcmVwYWludCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZm9udCBvZiB0aGUgdGV4dC4gT25seSBhcHBsaWVzIHRvIGV0Y2hlZCBib3JkZXJzLgorICAgICAqLworICAgIHB1YmxpYyBGb250IGdldFRleHRGb250KCkgeworCisgICAgICAgIHJldHVybiBmb250OworICAgICAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSB0ZXh0LiBPbmx5IGFwcGxpZXMgdG8gZXRjaGVkIGJvcmRlcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGV4dCAgVGhlIG5ldyB0ZXh0LgorICAgICAqLworICAgIHB1YmxpYyBIb2xpZGF5Qm9yZGVyUGFuZWwgc2V0VGV4dChTdHJpbmcgdGV4dCkgeworCisgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgICAgIGlmIChzdHlsZSA9PSBJTiB8fCBzdHlsZSA9PSBPVVQpIHsKKyAgICAgICAgICAgIGRvTGF5b3V0KCk7CisgICAgICAgICAgICByZXBhaW50KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRleHQuIE9ubHkgYXBwbGllcyB0byBldGNoZWQgYm9yZGVycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisKKyAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHRleHQgYWxpZ25tZW50LiBPbmx5IGFwcGxpZXMgdG8gZXRjaGVkIGJvcmRlcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWxpZ25tZW50IFRoZSBuZXcgYWxpZ25tZW50LgorICAgICAqLworICAgIHB1YmxpYyBIb2xpZGF5Qm9yZGVyUGFuZWwgc2V0QWxpZ25tZW50KGludCBhbGlnbm1lbnQpIHsKKworICAgICAgICB0aGlzLmFsaWdubWVudCA9IGFsaWdubWVudDsKKyAgICAgICAgaWYgKHN0eWxlID09IElOIHx8IHN0eWxlID09IE9VVCkgeworICAgICAgICAgICAgZG9MYXlvdXQoKTsKKyAgICAgICAgICAgIHJlcGFpbnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdGV4dCBhbGlnbm1lbnQuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRBbGlnbm1lbnQoKSB7CisKKyAgICAgICAgcmV0dXJuIGFsaWdubWVudDsKKyAgICAgICAgfQorCisgICAgLyoqCisgICAgICogUmVwYWludHMgdGhlIGJvcmRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBnIFRoZSBncmFwaGljcyBjb250ZXh0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGcpIHsKKworICAgICAgICAvLyBnZXQgY3VycmVudCBkaW1lbnNpb25zCisgICAgICAgIERpbWVuc2lvbiBzaXplID0gZ2V0U2l6ZSgpOworICAgICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoOworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7CisKKyAgICAgICAgLy8gc2V0IGNvbG9ycworICAgICAgICBDb2xvciBsaWdodCA9IGdldEJhY2tncm91bmQoKS5icmlnaHRlcigpLmJyaWdodGVyKCkuYnJpZ2h0ZXIoKTsKKyAgICAgICAgQ29sb3IgZGFyayA9IGdldEJhY2tncm91bmQoKS5kYXJrZXIoKS5kYXJrZXIoKS5kYXJrZXIoKTsKKworICAgICAgICAvLyBEcmF3IGJvcmRlcgorICAgICAgICBzd2l0Y2ggKHN0eWxlKSB7CisgICAgICAgICAgICBjYXNlIFJBSVNFRDogICAgLy8gM0QgQm9yZGVyIChpbiBvciBvdXQpCisgICAgICAgICAgICBjYXNlIExPV0VSRUQ6CisgICAgICAgICAgICAgICAgQ29sb3IgdG9wbGVmdCA9IG51bGw7CisgICAgICAgICAgICAgICAgQ29sb3IgYm90dG9tcmlnaHQgPSBudWxsOworCisgICAgICAgICAgICAgICAgLy8gc2V0IGNvbG9ycworICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBSQUlTRUQpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9wbGVmdCA9IGxpZ2h0OworICAgICAgICAgICAgICAgICAgICBib3R0b21yaWdodCA9IGRhcms7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdG9wbGVmdCA9IGRhcms7CisgICAgICAgICAgICAgICAgICAgIGJvdHRvbXJpZ2h0ID0gbGlnaHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGRyYXcgYm9yZGVyCisgICAgICAgICAgICAgICAgZy5zZXRDb2xvcih0b3BsZWZ0KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaWNrbmVzczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGcuZHJhd0xpbmUoaSwgaSwgd2lkdGggLSBpIC0gMiwgaSk7CisgICAgICAgICAgICAgICAgICAgIGcuZHJhd0xpbmUoaSwgaSArIDEsIGksIGhlaWdodCAtIGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGcuc2V0Q29sb3IoYm90dG9tcmlnaHQpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpY2tuZXNzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZy5kcmF3TGluZShpICsgMSwgaGVpZ2h0IC0gaSAtIDEsIHdpZHRoIC0gaSAtIDEsIGhlaWdodCAtIGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgZy5kcmF3TGluZSh3aWR0aCAtIGkgLSAxLCBpLCB3aWR0aCAtIGkgLSAxLCBoZWlnaHQgLSBpIC0gMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJTjogICAgLy8gRXRjaGVkIEJvcmRlciAoaW4gb3Igb3V0KQorICAgICAgICAgICAgY2FzZSBPVVQ6CisgICAgICAgICAgICAgICAgaW50IGFkanVzdDEgPSAwOworICAgICAgICAgICAgICAgIGludCBhZGp1c3QyID0gMDsKKworICAgICAgICAgICAgICAgIC8vIHNldCBmb250IGFuZCBnZXQgaW5mbworICAgICAgICAgICAgICAgIEZvbnQgb2xkZm9udCA9IGcuZ2V0Rm9udCgpOworICAgICAgICAgICAgICAgIGcuc2V0Rm9udChmb250KTsKKyAgICAgICAgICAgICAgICBGb250TWV0cmljcyBmbSA9IGcuZ2V0Rm9udE1ldHJpY3MoKTsKKyAgICAgICAgICAgICAgICBpbnQgYXNjZW50ID0gZm0uZ2V0QXNjZW50KCk7CisKKyAgICAgICAgICAgICAgICAvLyBzZXQgYWRqdXN0bWVudAorICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBJTikKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0MSA9IDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhZGp1c3QyID0gMTsKKworICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBhZGp1c3RtZW50IGZvciB0ZXh0CisgICAgICAgICAgICAgICAgaW50IGFkanVzdG1lbnQgPSAwOworICAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9IG51bGwgJiYgdGV4dC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFzY2VudCA+IHRoaWNrbmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdG1lbnQgPSAoYXNjZW50IC0gdGhpY2tuZXNzKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRoZSBhZGp1c3RtZW50IGlzIHRoZXJlIHNvIHRoYXQgd2UgYWx3YXlzIGRyYXcgdGhlCisgICAgICAgICAgICAgICAgLy8gbGlnaHQgcmVjdGFuZ2xlIGZpcnN0LiBPdGhlcndpc2UsIHlvdXIgZXllIHBpY2tzIHVwCisgICAgICAgICAgICAgICAgLy8gdGhlIGRpc2NyZXBhbmN5IHdoZXJlIHRoZSBsaWdodCByZWN0LiBwYXNzZXMgb3ZlcgorICAgICAgICAgICAgICAgIC8vIHRoZSBkYXJrZXIgcmVjdC4KKyAgICAgICAgICAgICAgICBpbnQgeCA9IHRoaWNrbmVzcyAvIDI7CisgICAgICAgICAgICAgICAgaW50IHkgPSB0aGlja25lc3MgLyAyICsgYWRqdXN0bWVudDsKKyAgICAgICAgICAgICAgICBpbnQgdyA9IHdpZHRoIC0gdGhpY2tuZXNzIC0gMTsKKyAgICAgICAgICAgICAgICBpbnQgaCA9IGhlaWdodCAtIHRoaWNrbmVzcyAtIDEgLSBhZGp1c3RtZW50OworCisgICAgICAgICAgICAgICAgLy8gZHJhdyByZWN0YW5nbGVzCisgICAgICAgICAgICAgICAgZy5zZXRDb2xvcihsaWdodCk7CisgICAgICAgICAgICAgICAgZy5kcmF3UmVjdCh4ICsgYWRqdXN0MSwgeSArIGFkanVzdDEsIHcsIGgpOworICAgICAgICAgICAgICAgIGcuc2V0Q29sb3IoZGFyayk7CisgICAgICAgICAgICAgICAgZy5kcmF3UmVjdCh4ICsgYWRqdXN0MiwgeSArIGFkanVzdDIsIHcsIGgpOworCisgICAgICAgICAgICAgICAgLy8gZHJhdyB0ZXh0LCBpZiBhcHBsaWNhYmxlCisgICAgICAgICAgICAgICAgaWYgKHRleHQgIT0gbnVsbCAmJiB0ZXh0Lmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgZHJhd2luZyBhcmVhCisgICAgICAgICAgICAgICAgICAgIGludCBmb250aGVpZ2h0ID0gZm0uZ2V0SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgIGludCBzdHJ3aWR0aCA9IGZtLnN0cmluZ1dpZHRoKHRleHQpOworCisgICAgICAgICAgICAgICAgICAgIGludCB0ZXh0d2lkdGggPSB3aWR0aCAtIDIgKiAodGhpY2tuZXNzICsgNSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ3aWR0aCA+IHRleHR3aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cndpZHRoID0gdGV4dHdpZHRoOworCisgICAgICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBvZmZzZXQgZm9yIGFsaWdubWVudAorICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFsaWdubWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDRU5URVI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKHdpZHRoIC0gc3Ryd2lkdGgpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUklHSFQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gd2lkdGggLSBzdHJ3aWR0aCAtIHRoaWNrbmVzcyAtIDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIExFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBhc3N1bWUgbGVmdCBhbGlnbm1lbnQgaWYgaW52YWxpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaWNrbmVzcyArIDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgZHJhd2luZyBhcmVhIGFuZCBzZXQgY2xpcHBpbmcgcmVnaW9uCisgICAgICAgICAgICAgICAgICAgIGcuY2xlYXJSZWN0KG9mZnNldCAtIDUsIDAsIHN0cndpZHRoICArIDEwLCBmb250aGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgZy5jbGlwUmVjdChvZmZzZXQsIDAsIHN0cndpZHRoLCBmb250aGVpZ2h0KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBkcmF3IHRleHQKKyAgICAgICAgICAgICAgICAgICAgZy5zZXRDb2xvcihjb2xvcik7CisgICAgICAgICAgICAgICAgICAgIGcuZHJhd1N0cmluZyh0ZXh0LCBvZmZzZXQsIGFzY2VudCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVzdG9yZSBvbGQgY2xpcHBpbmcgYXJlYQorICAgICAgICAgICAgICAgICAgICBnLmNsaXBSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBnLnNldEZvbnQob2xkZm9udCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU09MSUQ6CisgICAgICAgICAgICBkZWZhdWx0OiAvLyBhc3N1bWUgU09MSUQKKyAgICAgICAgICAgICAgICBnLnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaWNrbmVzczsgaSsrKQorICAgICAgICAgICAgICAgICAgICBnLmRyYXdSZWN0KGksIGksIHdpZHRoIC0gMiAqIGkgLSAxLCBoZWlnaHQgLSAyICogaSAtIDEpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNldHRpbmdzIG9mIHRoaXMgSG9saWRheUJvcmRlclBhbmVsIGluc3RhbmNlIGFzIGEgc3RyaW5nLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBzdHIgPSBuZXcgU3RyaW5nQnVmZmVyKCJIb2xpZGF5Qm9yZGVyUGFuZWxbIik7CisKKyAgICAgICAgLy8gc3R5bGUKKyAgICAgICAgc3RyLmFwcGVuZCgic3R5bGU9Iik7CisgICAgICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICAgICAgICAgIGNhc2UgU09MSUQ6IHN0ci5hcHBlbmQoIlNPTElEIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBSQUlTRUQ6IHN0ci5hcHBlbmQoIlJBSVNFRCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTE9XRVJFRDogc3RyLmFwcGVuZCgiTE9XRVJFRCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSU46IHN0ci5hcHBlbmQoIklOIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBPVVQ6IHN0ci5hcHBlbmQoIk9VVCIpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHN0ci5hcHBlbmQoInVua25vd24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgc3RyLmFwcGVuZCgiLCIpOworCisgICAgICAgIC8vIHRoaWNrbmVzcworICAgICAgICBzdHIuYXBwZW5kKCJ0aGlja25lc3M9Iik7CisgICAgICAgIHN0ci5hcHBlbmQodGhpY2tuZXNzKTsKKyAgICAgICAgc3RyLmFwcGVuZCgiLCIpOworCisgICAgICAgIC8vIGdhcAorICAgICAgICBzdHIuYXBwZW5kKCJnYXA9Iik7CisgICAgICAgIHN0ci5hcHBlbmQoZ2FwKTsKKyAgICAgICAgc3RyLmFwcGVuZCgiLCIpOworCisgICAgICAgIC8vIGNvbG9yCisgICAgICAgIHN0ci5hcHBlbmQoY29sb3IpOworICAgICAgICBzdHIuYXBwZW5kKCIsIik7CisKKyAgICAgICAgLy8gZm9udAorICAgICAgICBzdHIuYXBwZW5kKGZvbnQpOworICAgICAgICBzdHIuYXBwZW5kKCIsIik7CisKKyAgICAgICAgLy8gdGV4dAorICAgICAgICBzdHIuYXBwZW5kKCJ0ZXh0PSIpOworICAgICAgICBzdHIuYXBwZW5kKHRleHQpOworICAgICAgICBzdHIuYXBwZW5kKCIsIik7CisKKyAgICAgICAgLy8gYWxpZ25tZW50CisgICAgICAgIHN0ci5hcHBlbmQoImFsaWdubWVudD0iKTsKKyAgICAgICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKKyAgICAgICAgICAgIGNhc2UgTEVGVDogc3RyLmFwcGVuZCgiTEVGVCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0VOVEVSOiBzdHIuYXBwZW5kKCJDRU5URVIiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJJR0hUOiBzdHIuYXBwZW5kKCJSSUdIVCIpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHN0ci5hcHBlbmQoInVua25vd24iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBzdHIuYXBwZW5kKCJdIik7CisKKyAgICAgICAgcmV0dXJuIHN0ci50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICB9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9ob2xpZGF5L0hvbGlkYXlDYWxlbmRhckRlbW8uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9ob2xpZGF5L0hvbGlkYXlDYWxlbmRhckRlbW8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2FmMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2hvbGlkYXkvSG9saWRheUNhbGVuZGFyRGVtby5qYXZhCkBAIC0wLDAgKzEsNzIyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaG9saWRheS9Ib2xpZGF5Q2FsZW5kYXJEZW1vLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTkgMDQ6MTA6MjMgJCAKKyAqICRSZXZpc2lvbjogMS45ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLmhvbGlkYXk7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby4qOworaW1wb3J0IGphdmEuYXBwbGV0LkFwcGxldDsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CisvL2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLm5ldC4qOworaW1wb3J0IGphdmEuaW8uKjsKKworLy9pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0U3ltYm9sczsKKy8vaW1wb3J0IGphdmEudXRpbC5TaW1wbGVUaW1lWm9uZTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby5pbXBsLio7CisKKy8qKgorICogQ2FsZW5kYXJEZW1vIGRlbW9uc3RyYXRlcyBob3cgQ2FsZW5kYXIgd29ya3MuCisgKi8KK3B1YmxpYyBjbGFzcyBIb2xpZGF5Q2FsZW5kYXJEZW1vIGV4dGVuZHMgRGVtb0FwcGxldCAKK3sKKyAgICAvKioKKyAgICAgKiBUaGUgbWFpbiBmdW5jdGlvbiB3aGljaCBkZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgQ2FsZW5kYXJEZW1vCisgICAgICogYXBwbGV0IHdoZW4gYW4gYXBwbGV0IGlzIHN0YXJ0ZWQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3ZbXSkgeworCisgICAgICAgIG5ldyBIb2xpZGF5Q2FsZW5kYXJEZW1vKCkuc2hvd0RlbW8oKTsKKyAgICB9CisKKyAgICAvKiBUaGlzIGNyZWF0ZXMgYSBDYWxlbmRhckZyYW1lIGZvciB0aGUgZGVtbyBhcHBsZXQuICovCisgICAgcHVibGljIEZyYW1lIGNyZWF0ZURlbW9GcmFtZShEZW1vQXBwbGV0IGFwcGxldCkgeworICAgICAgICByZXR1cm4gbmV3IENhbGVuZGFyRnJhbWUoYXBwbGV0KTsKKyAgICB9CisKKwkvKioKKwkqIEEgRnJhbWUgaXMgYSB0b3AtbGV2ZWwgd2luZG93IHdpdGggYSB0aXRsZS4gVGhlIGRlZmF1bHQgbGF5b3V0IGZvciBhIGZyYW1lCisJKiBpcyBCb3JkZXJMYXlvdXQuICBUaGUgQ2FsZW5kYXJGcmFtZSBjbGFzcyBkZWZpbmVzIHRoZSB3aW5kb3cgbGF5b3V0IG9mCisJKiBDYWxlbmRhckRlbW8uCisJKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBDYWxlbmRhckZyYW1lIGV4dGVuZHMgRnJhbWUgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVtTGlzdGVuZXIKKwl7CisgICAgCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjcmVkaXRTdHJpbmcgPSAiIjsKKworICAgIAlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisKKyAgICAJcHJpdmF0ZSBMb2NhbGUgY3VyTG9jYWxlID0gTG9jYWxlLlVTOworCisgICAgCXByaXZhdGUgRGVtb0FwcGxldCBhcHBsZXQ7CisKKyAgICAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxlW10gY2FsZW5kYXJzID0geworICAgICAgICAJLy9uZXcgTG9jYWxlKCJkZSIsIkFUIiksCisgICAgICAgIAlMb2NhbGUuQ0FOQURBLAorICAgICAgICAJTG9jYWxlLkNBTkFEQV9GUkVOQ0gsCisgICAgICAgIAlMb2NhbGUuRlJBTkNFLAorICAgICAgICAJTG9jYWxlLkdFUk1BTlksCisgICAgICAgIAluZXcgTG9jYWxlKCJpdyIsIklMIiksCisgICAgICAgIAluZXcgTG9jYWxlKCJlbCIsIkdSIiksCisgICAgICAgIAkvL25ldyBMb2NhbGUoImVzIiwiTVgiKSwKKyAgICAgICAgCUxvY2FsZS5VSywKKyAgICAgICAgCUxvY2FsZS5VUywKKyAgICAJfTsKKyAgICAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxlW10gZGlzcGxheXMgPSB7CisgICAgICAgIAlMb2NhbGUuQ0FOQURBLAorICAgICAgICAJTG9jYWxlLlVLLAorICAgICAgICAJTG9jYWxlLlVTLAorICAgICAgICAJTG9jYWxlLkZSQU5DRSwKKyAgICAgICAgCUxvY2FsZS5DQU5BREFfRlJFTkNILAorICAgICAgICAJLy9uZXcgTG9jYWxlKCJkZSIsIkFUIiksCisgICAgICAgIAlMb2NhbGUuR0VSTUFOLAorICAgICAgICAJbmV3IExvY2FsZSgiZWwiLCJHUiIpLAorICAgICAgICAJLy9uZXcgTG9jYWxlKCJpdyIsIklMIiksCisgICAgICAgIAluZXcgTG9jYWxlKCJlcyIsIk1YIiksCisgICAgCX07CisKKyAgICAJLyoqCisgICAgCSogQ29uc3RydWN0cyBhIG5ldyBDYWxlbmRhckZyYW1lIHRoYXQgaXMgaW5pdGlhbGx5IGludmlzaWJsZS4KKyAgICAJKi8KKyAgICAJcHVibGljIENhbGVuZGFyRnJhbWUoRGVtb0FwcGxldCBhcHBsZXQpCisgICAgCXsKKyAgICAgICAgCXN1cGVyKCJDYWxlbmRhciBEZW1vIik7CisgICAgICAgIAl0aGlzLmFwcGxldCA9IGFwcGxldDsKKyAgICAgICAgCWluaXQoKTsKKyAgICAgICAgCXN0YXJ0KCk7CisgICAgICAgIAllbmFibGVFdmVudHMoV2luZG93RXZlbnQuV0lORE9XX0NMT1NJTkcpOworICAgIAl9CisKKyAgICAJLyoqCisgICAgCSogSW5pdGlhbGl6ZXMgdGhlIGFwcGxldC4gWW91IG5ldmVyIG5lZWQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5LCBpdAorICAgIAkqIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzeXN0ZW0gb25jZSB0aGUgYXBwbGV0IGlzIGNyZWF0ZWQuCisgICAgCSovCisgICAgCXB1YmxpYyB2b2lkIGluaXQoKQorICAgIAl7CisgICAgICAgIAkvLyBHZXQgRzcgbG9jYWxlcyBvbmx5IGZvciBkZW1vIHB1cnBvc2UuIFRvIGdldCBhbGwgdGhlIGxvY2FsZXMKKyAgICAgICAgCS8vIHN1cHBvcnRlZCwgc3dpdGNoIHRvIGNhbGxpbmcgQ2FsZW5kYXIuZ2V0QXZhaWxhYmxlTG9jYWxlcygpLgorICAgICAgICAJLy8gY29tbWVudGVkCisgICAgICAgIAlsb2NhbGVzID0gZGlzcGxheXM7CisKKyAgICAgICAgCWJ1aWxkR1VJKCk7CisgICAgCX0KKworICAgIAkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAkvLyBwYWNrYWdlIHByaXZhdGUKKyAgICAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAJdm9pZCBhZGRXaXRoRm9udChDb250YWluZXIgY29udGFpbmVyLCBDb21wb25lbnQgZm9vLCBGb250IGZvbnQpIHsKKyAgICAgICAgCWlmIChmb250ICE9IG51bGwpCisgICAgICAgICAgICAJZm9vLnNldEZvbnQoZm9udCk7CisgICAgICAgIAljb250YWluZXIuYWRkKGZvbyk7CisgICAgCX0KKworICAgIAkvKioKKyAgICAJKiBDYWxsZWQgdG8gc3RhcnQgdGhlIGFwcGxldC4gWW91IG5ldmVyIG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZAorICAgIAkqIGRpcmVjdGx5LCBpdCBpcyBjYWxsZWQgd2hlbiB0aGUgYXBwbGV0J3MgZG9jdW1lbnQgaXMgdmlzaXRlZC4KKyAgICAJKi8KKyAgICAJcHVibGljIHZvaWQgc3RhcnQoKQorICAgIAl7CisgICAgICAgIAkvLyBkbyBub3RoaW5nCisgICAgCX0KKworICAgIAlwcml2YXRlIENob2ljZSAgICAgICAgICBsb2NhbGVNZW51OworICAgIAlwcml2YXRlIENob2ljZSAgICAgICAgICBkaXNwbGF5TWVudTsKKyAgICAJcHJpdmF0ZSBMb2NhbGVbXSAgICAgICAgbG9jYWxlczsKKworICAgIAlwcml2YXRlIExhYmVsICAgICAgICAgICBtb250aExhYmVsOworICAgIAlwcml2YXRlIEJ1dHRvbiAgICAgICAgICBwcmV2WWVhcjsKKyAgICAJcHJpdmF0ZSBCdXR0b24gICAgICAgICAgcHJldk1vbnRoOworICAgIAlwcml2YXRlIEJ1dHRvbiAgICAgICAgICBnb3RvVG9kYXk7CisgICAgCXByaXZhdGUgQnV0dG9uICAgICAgICAgIG5leHRNb250aDsKKyAgICAJcHJpdmF0ZSBCdXR0b24gICAgICAgICAgbmV4dFllYXI7CisgICAgCXByaXZhdGUgQ2FsZW5kYXJQYW5lbCAgIGNhbGVuZGFyUGFuZWw7CisKKyAgICAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxlIGtGaXJzdExvY2FsZSA9IExvY2FsZS5VUzsKKworICAgIAlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZChDb250YWluZXIgY29udGFpbmVyLCBDb21wb25lbnQgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlHcmlkQmFnTGF5b3V0IGcsIEdyaWRCYWdDb25zdHJhaW50cyBjKQorICAgIAl7CisgICAgICAgIAlnLnNldENvbnN0cmFpbnRzKGNvbXBvbmVudCwgYyk7CisgICAgICAgIAljb250YWluZXIuYWRkKGNvbXBvbmVudCk7CisgICAgCX0KKworICAgIAlwdWJsaWMgdm9pZCBidWlsZEdVSSgpCisgICAgCXsKKyAgICAgICAgCXNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuYmdDb2xvcik7CisgICAgICAgIAlzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgxMCwxMCkpOworCisgICAgICAgIAkvLyBMYWJlbCBmb3IgdGhlIGRlbW8ncyB0aXRsZQorICAgICAgICAJTGFiZWwgdGl0bGVMYWJlbCA9IG5ldyBMYWJlbCgiQ2FsZW5kYXIgRGVtbyIsIExhYmVsLkNFTlRFUik7CisgICAgICAgIAl0aXRsZUxhYmVsLnNldEZvbnQoRGVtb1V0aWxpdHkudGl0bGVGb250KTsKKworICAgICAgICAJLy8gTGFiZWwgZm9yIHRoZSBjdXJyZW50IG1vbnRoIG5hbWUKKyAgICAgICAgCW1vbnRoTGFiZWwgPSBuZXcgTGFiZWwoIiIsIExhYmVsLkxFRlQpOworICAgICAgICAJbW9udGhMYWJlbC5zZXRGb250KG5ldyBGb250KERlbW9VdGlsaXR5LnRpdGxlRm9udC5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJRGVtb1V0aWxpdHkudGl0bGVGb250LmdldFN0eWxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJKERlbW9VdGlsaXR5LnRpdGxlRm9udC5nZXRTaXplKCkgKiAzKS8yKSk7CisKKyAgICAgICAgCS8vIE1ha2UgdGhlIGxvY2FsZSBwb3B1cCBtZW51cworICAgICAgICAJbG9jYWxlTWVudT0gbmV3IENob2ljZSgpOworICAgICAgICAJbG9jYWxlTWVudS5hZGRJdGVtTGlzdGVuZXIodGhpcyk7CisgICAgICAgIAlpbnQgc2VsZWN0TWUgPSAwOworICAgICAgICAJCisgICAgICAgIAlmb3IgKGludCBpID0gMDsgaSA8IGNhbGVuZGFycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgCWlmIChpID4gMCAmJgorICAgICAgICAgICAgICAgICAgICAJY2FsZW5kYXJzW2ldLmdldENvdW50cnkoKS5lcXVhbHMoY2FsZW5kYXJzW2ktMV0uZ2V0Q291bnRyeSgpKSB8fAorICAgICAgICAgICAgICAgIAlpIDwgY2FsZW5kYXJzLmxlbmd0aCAtIDEgJiYKKyAgICAgICAgICAgICAgICAgICAgCWNhbGVuZGFyc1tpXS5nZXRDb3VudHJ5KCkuZXF1YWxzKGNhbGVuZGFyc1tpKzFdLmdldENvdW50cnkoKSkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgICAgIAlsb2NhbGVNZW51LmFkZEl0ZW0oY2FsZW5kYXJzW2ldLmdldERpc3BsYXlDb3VudHJ5KCkgKyAiICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWNhbGVuZGFyc1tpXS5nZXREaXNwbGF5TGFuZ3VhZ2UoKSArICIpIik7CisgICAgICAgICAgICAJfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAJbG9jYWxlTWVudS5hZGRJdGVtKCBjYWxlbmRhcnNbaV0uZ2V0RGlzcGxheUNvdW50cnkoKSApOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAkKKyAgICAgICAgICAgIAlpZiAoY2FsZW5kYXJzW2ldLmVxdWFscyhrRmlyc3RMb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgCXNlbGVjdE1lID0gaTsKKyAgICAgICAgICAgIAl9CisgICAgICAgIAl9CisgICAgICAgIAkKKyAgICAgICAgCWxvY2FsZU1lbnUuc2V0QmFja2dyb3VuZChEZW1vVXRpbGl0eS5jaG9pY2VDb2xvcik7CisgICAgICAgIAlsb2NhbGVNZW51LnNlbGVjdChzZWxlY3RNZSk7CisKKyAgICAgICAgCWRpc3BsYXlNZW51ID0gbmV3IENob2ljZSgpOworICAgICAgICAJZGlzcGxheU1lbnUuYWRkSXRlbUxpc3RlbmVyKHRoaXMpOworICAgICAgICAJCisgICAgICAgIAlzZWxlY3RNZSA9IDA7CisgICAgICAgIAlmb3IgKGludCBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIAlpZiAoaSA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgCWxvY2FsZXNbaV0uZ2V0TGFuZ3VhZ2UoKS5lcXVhbHMobG9jYWxlc1tpLTFdLmdldExhbmd1YWdlKCkpIHx8CisgICAgICAgICAgICAgICAgCWkgPCBsb2NhbGVzLmxlbmd0aCAtIDEgJiYKKyAgICAgICAgICAgICAgICAgICAgCWxvY2FsZXNbaV0uZ2V0TGFuZ3VhZ2UoKS5lcXVhbHMobG9jYWxlc1tpKzFdLmdldExhbmd1YWdlKCkpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgICAJZGlzcGxheU1lbnUuYWRkSXRlbSggbG9jYWxlc1tpXS5nZXREaXNwbGF5TmFtZSgpICk7CisgICAgICAgICAgICAJfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAJZGlzcGxheU1lbnUuYWRkSXRlbSggbG9jYWxlc1tpXS5nZXREaXNwbGF5TGFuZ3VhZ2UoKSk7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgCQorICAgICAgICAgICAgCWlmIChsb2NhbGVzW2ldLmVxdWFscyhrRmlyc3RMb2NhbGUpKSB7CisgICAgICAgICAgICAJICAgIHNlbGVjdE1lID0gaTsKKyAgICAgICAgICAgIAl9CisgICAgICAgIAl9CisgICAgICAgIAkKKyAgICAgICAgCWRpc3BsYXlNZW51LnNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuY2hvaWNlQ29sb3IpOworICAgICAgICAJZGlzcGxheU1lbnUuc2VsZWN0KHNlbGVjdE1lKTsKKworICAgICAgICAJLy8gTWFrZSBhbGwgdGhlIG5leHQvcHJldmlvdXMvdG9kYXkgYnV0dG9ucworICAgICAgICAJcHJldlllYXIgPSBuZXcgQnV0dG9uKCI8PCIpOworICAgICAgICAJcHJldlllYXIuYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgICAgIAlwcmV2TW9udGggPSBuZXcgQnV0dG9uKCI8Iik7CisgICAgICAgIAlwcmV2TW9udGguYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgICAgIAlnb3RvVG9kYXkgPSBuZXcgQnV0dG9uKCJUb2RheSIpOworICAgICAgICAJZ290b1RvZGF5LmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICAJbmV4dE1vbnRoID0gbmV3IEJ1dHRvbigiPiIpOworICAgICAgICAJbmV4dE1vbnRoLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICAJbmV4dFllYXIgPSBuZXcgQnV0dG9uKCI+PiIpOworICAgICAgICAJbmV4dFllYXIuYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisKKyAgICAgICAgCS8vIFRoZSBtb250aCBuYW1lIGFuZCB0aGUgY29udHJvbCBidXR0b25zIGFyZSBidW5jaGVkIHRvZ2V0aGVyCisgICAgICAgIAlQYW5lbCBtb250aFBhbmVsID0gbmV3IFBhbmVsKCk7CisgICAgICAgIAl7CisgICAgICAgICAgICAJR3JpZEJhZ0xheW91dCBnID0gbmV3IEdyaWRCYWdMYXlvdXQoKTsKKyAgICAgICAgICAgIAlHcmlkQmFnQ29uc3RyYWludHMgYyA9IG5ldyBHcmlkQmFnQ29uc3RyYWludHMoKTsKKyAgICAgICAgICAgIAltb250aFBhbmVsLnNldExheW91dChnKTsKKworICAgICAgICAgICAgCWMud2VpZ2h0eCA9IDE7CisgICAgICAgICAgICAJYy53ZWlnaHR5ID0gMTsKKworICAgICAgICAgICAgCWMuZ3JpZHdpZHRoID0gMTsKKyAgICAgICAgICAgIAljLmZpbGwgPSBHcmlkQmFnQ29uc3RyYWludHMuSE9SSVpPTlRBTDsKKyAgICAgICAgICAgIAljLmdyaWR3aWR0aCA9IEdyaWRCYWdDb25zdHJhaW50cy5SRU1BSU5ERVI7CisgICAgICAgICAgICAJYWRkKG1vbnRoUGFuZWwsIG1vbnRoTGFiZWwsIGcsIGMpOworCisgICAgICAgICAgICAJYy5ncmlkd2lkdGggPSAxOworICAgICAgICAgICAgCWFkZChtb250aFBhbmVsLCBwcmV2WWVhciwgZywgYyk7CisgICAgICAgICAgICAJYWRkKG1vbnRoUGFuZWwsIHByZXZNb250aCwgZywgYyk7CisgICAgICAgICAgICAJYWRkKG1vbnRoUGFuZWwsIGdvdG9Ub2RheSwgZywgYyk7CisgICAgICAgICAgICAJYWRkKG1vbnRoUGFuZWwsIG5leHRNb250aCwgZywgYyk7CisgICAgICAgICAgICAJYy5ncmlkd2lkdGggPSBHcmlkQmFnQ29uc3RyYWludHMuUkVNQUlOREVSOworICAgICAgICAgICAgCWFkZChtb250aFBhbmVsLCBuZXh0WWVhciwgZywgYyk7CisgICAgICAgIAl9CisKKyAgICAgICAgCS8vIFN0aWNrIHRoZSBtZW51IGFuZCBidXR0b25zIGluIGEgbGl0dGxlICJjb250cm9sIHBhbmVsIgorICAgICAgICAJUGFuZWwgbWVudVBhbmVsID0gbmV3IFBhbmVsKCk7CisgICAgICAgIAl7CisgICAgICAgICAgICAJR3JpZEJhZ0xheW91dCBnID0gbmV3IEdyaWRCYWdMYXlvdXQoKTsKKyAgICAgICAgICAgIAlHcmlkQmFnQ29uc3RyYWludHMgYyA9IG5ldyBHcmlkQmFnQ29uc3RyYWludHMoKTsKKyAgICAgICAgICAgIAltZW51UGFuZWwuc2V0TGF5b3V0KGcpOworCisgICAgICAgICAgICAJYy53ZWlnaHR4ID0gMTsKKyAgICAgICAgICAgIAljLndlaWdodHkgPSAxOworCisgICAgICAgICAgICAJYy5maWxsID0gR3JpZEJhZ0NvbnN0cmFpbnRzLkhPUklaT05UQUw7CisKKyAgICAgICAgICAgIAljLmdyaWR3aWR0aCA9IEdyaWRCYWdDb25zdHJhaW50cy5SRUxBVElWRTsKKyAgICAgICAgICAgIAlMYWJlbCBsMSA9IG5ldyBMYWJlbCgiSG9saWRheXMiKTsKKyAgICAgICAgICAgIAlsMS5zZXRGb250KERlbW9VdGlsaXR5LmxhYmVsRm9udCk7CisgICAgICAgICAgICAJYWRkKG1lbnVQYW5lbCwgbDEsIGcsIGMpOworCisgICAgICAgICAgICAJYy5ncmlkd2lkdGggPSBHcmlkQmFnQ29uc3RyYWludHMuUkVNQUlOREVSOworICAgICAgICAgICAgCWFkZChtZW51UGFuZWwsIGxvY2FsZU1lbnUsIGcsIGMpOworCisgICAgICAgICAgICAJYy5ncmlkd2lkdGggPSBHcmlkQmFnQ29uc3RyYWludHMuUkVMQVRJVkU7CisgICAgICAgICAgICAJTGFiZWwgbDIgPSBuZXcgTGFiZWwoIkRpc3BsYXk6Iik7CisgICAgICAgICAgICAJbDIuc2V0Rm9udChEZW1vVXRpbGl0eS5sYWJlbEZvbnQpOworICAgICAgICAgICAgCWFkZChtZW51UGFuZWwsIGwyLCBnLCBjKTsKKworICAgICAgICAgICAgCWMuZ3JpZHdpZHRoID0gR3JpZEJhZ0NvbnN0cmFpbnRzLlJFTUFJTkRFUjsKKyAgICAgICAgICAgIAlhZGQobWVudVBhbmVsLCBkaXNwbGF5TWVudSwgZywgYyk7CisgICAgICAgIAl9CisKKyAgICAgICAgCS8vIFRoZSB0aXRsZSwgYnV0dG9ucywgZXRjLiBnbyBpbiBhIHBhbmVsIGF0IHRoZSB0b3Agb2YgdGhlIHdpbmRvdworICAgICAgICAJUGFuZWwgdG9wUGFuZWwgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgCXsKKyAgICAgICAgICAgIAl0b3BQYW5lbC5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKworICAgICAgICAgICAgCS8vdG9wUGFuZWwuYWRkKCJOb3J0aCIsIHRpdGxlTGFiZWwpOworICAgICAgICAgICAgCXRvcFBhbmVsLmFkZCgiQ2VudGVyIiwgbW9udGhQYW5lbCk7CisgICAgICAgICAgICAJdG9wUGFuZWwuYWRkKCJFYXN0IiwgbWVudVBhbmVsKTsKKyAgICAgICAgCX0KKyAgICAgICAgCWFkZCgiTm9ydGgiLCB0b3BQYW5lbCk7CisKKyAgICAgICAgCS8vIFRoZSBjb3B5cmlnaHQgbm90aWNlIGdvZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93CisgICAgICAgIAlMYWJlbCBjb3B5cmlnaHQgPSBuZXcgTGFiZWwoRGVtb1V0aWxpdHkuY29weXJpZ2h0MSwgTGFiZWwuTEVGVCk7CisgICAgICAgIAljb3B5cmlnaHQuc2V0Rm9udChEZW1vVXRpbGl0eS5jcmVkaXRGb250KTsKKyAgICAgICAgCWFkZCgiU291dGgiLCBjb3B5cmlnaHQpOworCisgICAgICAgIAkvLyBOb3cgY3JlYXRlIHRoZSBiaWcgY2FsZW5kYXIgcGFuZWwgYW5kIHN0aWNrIGl0IGluIHRoZSBtaWRkbGUKKyAgICAgICAgCWNhbGVuZGFyUGFuZWwgPSBuZXcgQ2FsZW5kYXJQYW5lbCgga0ZpcnN0TG9jYWxlICk7CisgICAgICAgIAlhZGQoIkNlbnRlciIsIGNhbGVuZGFyUGFuZWwpOworCisgICAgICAgIAl1cGRhdGVNb250aE5hbWUoKTsKKyAgICAJfQorCisgICAgCXByaXZhdGUgdm9pZCB1cGRhdGVNb250aE5hbWUoKQorICAgIAl7CisgICAgICAgIAlTaW1wbGVEYXRlRm9ybWF0IGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiTU1NTSB5eXl5eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWNhbGVuZGFyUGFuZWwuZ2V0RGlzcGxheUxvY2FsZSgpKTsKKyAgICAgICAgCWYuc2V0Q2FsZW5kYXIoY2FsZW5kYXJQYW5lbC5nZXRDYWxlbmRhcigpKTsKKyAgICAgICAgCWYuc2V0VGltZVpvbmUobmV3IFNpbXBsZVRpbWVab25lKDAsICJVVEMiKSk7ICAgICAgICAvLyBKREsgMS4xLjIgd29ya2Fyb3VuZAorICAgICAgICAJbW9udGhMYWJlbC5zZXRUZXh0KCBmLmZvcm1hdCggY2FsZW5kYXJQYW5lbC5maXJzdE9mTW9udGgoKSApKTsKKyAgICAJfQorICAgIAkKKyAgICAJLyoqCisgICAgCSogSGFuZGxlcyB0aGUgZXZlbnQuIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnQgaXMgaGFuZGxlZCBhbmQgc2hvdWxkIG5vdAorICAgIAkqIGJlIHBhc3NlZCB0byB0aGUgcGFyZW50IG9mIHRoaXMgY29tcG9uZW50LiBUaGUgZGVmYXVsdCBldmVudCBoYW5kbGVyCisgICAgCSogY2FsbHMgc29tZSBoZWxwZXIgbWV0aG9kcyB0byBtYWtlIGxpZmUgZWFzaWVyIG9uIHRoZSBwcm9ncmFtbWVyLgorICAgIAkqLworICAgIAlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkKKyAgICAJeworICAgIAkgICAgT2JqZWN0IG9iaiA9IGUuZ2V0U291cmNlKCk7CisgICAgCSAgICAKKyAgICAJICAgIC8vICoqKiBCdXR0b24gZXZlbnRzIGFyZSBoYW5kbGVkIGhlcmUuCisgICAgICAgIAlpZiAob2JqIGluc3RhbmNlb2YgQnV0dG9uKSB7CisgICAgICAgICAgICAJaWYgKG9iaiA9PSBuZXh0TW9udGgpIHsKKyAgICAgICAgICAgICAgICAJY2FsZW5kYXJQYW5lbC5hZGQoQ2FsZW5kYXIuTU9OVEgsICsxKTsKKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICAJZWxzZQorICAgICAgICAgICAgCWlmIChvYmogPT0gcHJldk1vbnRoKSB7CisgICAgICAgICAgICAgICAgCWNhbGVuZGFyUGFuZWwuYWRkKENhbGVuZGFyLk1PTlRILCAtMSk7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgCWVsc2UKKyAgICAgICAgICAgIAlpZiAob2JqID09IHByZXZZZWFyKSB7CisgICAgICAgICAgICAgICAgCWNhbGVuZGFyUGFuZWwuYWRkKENhbGVuZGFyLllFQVIsIC0xKTsKKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICAJZWxzZQorICAgICAgICAgICAgCWlmIChvYmogPT0gbmV4dFllYXIpIHsKKyAgICAgICAgICAgICAgICAJY2FsZW5kYXJQYW5lbC5hZGQoQ2FsZW5kYXIuWUVBUiwgKzEpOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAllbHNlCisgICAgICAgICAgICAJaWYgKG9iaiA9PSBnb3RvVG9kYXkpIHsKKyAgICAgICAgICAgICAgICAJY2FsZW5kYXJQYW5lbC5zZXQoIG5ldyBEYXRlKCkgKTsKKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICAJdXBkYXRlTW9udGhOYW1lKCk7CisgICAgICAgIAl9CisgICAgCX0KKyAgICAJCisgICAgCXB1YmxpYyB2b2lkIGl0ZW1TdGF0ZUNoYW5nZWQoSXRlbUV2ZW50IGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIE9iamVjdCBvYmogPSBlLmdldFNvdXJjZSgpOworICAgICAgICAgICAgaWYgKG9iaiA9PSBsb2NhbGVNZW51KSB7CisgICAgICAgICAgICAJY2FsZW5kYXJQYW5lbC5zZXRDYWxlbmRhckxvY2FsZShjYWxlbmRhcnNbbG9jYWxlTWVudS5nZXRTZWxlY3RlZEluZGV4KCldKTsKKyAgICAgICAgICAgIAl1cGRhdGVNb250aE5hbWUoKTsKKyAgICAgICAgCX0KKyAgICAgICAgCWVsc2UgCisgICAgICAgIAkgICAgaWYgKG9iaiA9PSBkaXNwbGF5TWVudSkgeworICAgICAgICAgICAgCSAgICBjYWxlbmRhclBhbmVsLnNldERpc3BsYXlMb2NhbGUobG9jYWxlc1tkaXNwbGF5TWVudS5nZXRTZWxlY3RlZEluZGV4KCldKTsKKyAgICAgICAgICAgIAkgICAgdXBkYXRlTW9udGhOYW1lKCk7CisgICAgICAgICAgICAJfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAJKiBQcmludCBvdXQgdGhlIGVycm9yIG1lc3NhZ2Ugd2hpbGUgZGVidWdnaW5nIHRoaXMgcHJvZ3JhbS4KKyAgICAJKi8KKyAgICAJcHVibGljIHZvaWQgZXJyb3JUZXh0KFN0cmluZyBzKQorICAgIAl7CisgICAgICAgIAlpZiAoREVCVUcpCisgICAgICAgIAl7CisgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgICAgICAJfQorICAgIAl9CisgICAgCQorICAgIAlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzV2luZG93RXZlbnQoV2luZG93RXZlbnQgZSkKKyAgICAgICAgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJldmVudCAiICsgZSk7CisgICAgICAgICAgICBpZiAoZS5nZXRJRCgpID09IFdpbmRvd0V2ZW50LldJTkRPV19DTE9TSU5HKSB7CisgICAgICAgICAgICAJdGhpcy5oaWRlKCk7CisgICAgICAgICAgICAJdGhpcy5kaXNwb3NlKCk7CisKKyAgICAgICAgICAgIAlpZiAoYXBwbGV0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIAkgICAgYXBwbGV0LmRlbW9DbG9zZWQoKTsKKyAgICAgICAgICAgIAl9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICAgICAgICAgIAl9CisgICAgICAgIAl9CisgICAgICAgIH0KKwl9CisKKworCXByaXZhdGUgc3RhdGljIGNsYXNzIENhbGVuZGFyUGFuZWwgZXh0ZW5kcyBDYW52YXMgeworCisgICAgCXB1YmxpYyBDYWxlbmRhclBhbmVsKCBMb2NhbGUgbG9jYWxlICkgeworICAgICAgICAJc2V0KGxvY2FsZSwgbG9jYWxlLCBuZXcgRGF0ZSgpKTsKKyAgICAJfQorCisgICAgCXB1YmxpYyB2b2lkIHNldENhbGVuZGFyTG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgCXNldChsb2NhbGUsIGZEaXNwbGF5TG9jYWxlLCBmQ2FsZW5kYXIuZ2V0VGltZSgpKTsKKyAgICAJfQorCisgICAgCXB1YmxpYyB2b2lkIHNldERpc3BsYXlMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAJc2V0KGZDYWxlbmRhckxvY2FsZSwgbG9jYWxlLCBmQ2FsZW5kYXIuZ2V0VGltZSgpKTsKKyAgICAJfQorCisgICAgCXB1YmxpYyB2b2lkIHNldChEYXRlIGRhdGUpIHsKKyAgICAgICAgCXNldChmQ2FsZW5kYXJMb2NhbGUsIGZEaXNwbGF5TG9jYWxlLCBkYXRlKTsKKyAgICAJfQorCisgICAgCXB1YmxpYyB2b2lkIHNldChMb2NhbGUgbG9jLCBMb2NhbGUgZGlzcGxheSwgRGF0ZSBkYXRlKQorICAgIAl7CisgICAgICAgIAlpZiAoZkNhbGVuZGFyTG9jYWxlID09IG51bGwgfHwgIWxvYy5lcXVhbHMoZkNhbGVuZGFyTG9jYWxlKSkgeworICAgICAgICAgICAgCWZDYWxlbmRhckxvY2FsZSA9IGxvYzsKKyAgICAgICAgICAgIAlmQ2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShmQ2FsZW5kYXJMb2NhbGUpOworICAgICAgICAgICAgCWZBbGxIb2xpZGF5cyA9IEhvbGlkYXkuZ2V0SG9saWRheXMoZkNhbGVuZGFyTG9jYWxlKTsKKyAgICAgICAgCX0KKyAgICAgICAgCWlmIChmRGlzcGxheUxvY2FsZSA9PSBudWxsIHx8ICFkaXNwbGF5LmVxdWFscyhmRGlzcGxheUxvY2FsZSkpIHsKKyAgICAgICAgICAgIAlmRGlzcGxheUxvY2FsZSA9IGRpc3BsYXk7CisgICAgICAgICAgICAJZlN5bWJvbHMgPSBuZXcgRGF0ZUZvcm1hdFN5bWJvbHMoZkRpc3BsYXlMb2NhbGUpOworICAgICAgICAJfQorCisgICAgICAgIAlmU3RhcnRPZk1vbnRoID0gZGF0ZTsKKworICAgICAgICAJZGlydHkgPSB0cnVlOworICAgICAgICAJcmVwYWludCgpOworICAgIAl9CisKKyAgICAJcHVibGljIHZvaWQgYWRkKGludCBmaWVsZCwgaW50IGRlbHRhKQorICAgIAl7CisgICAgICAgIAlzeW5jaHJvbml6ZWQoZkNhbGVuZGFyKSB7CisgICAgICAgICAgICAJZkNhbGVuZGFyLnNldFRpbWUoZlN0YXJ0T2ZNb250aCk7CisgICAgICAgICAgICAJZkNhbGVuZGFyLmFkZChmaWVsZCwgZGVsdGEpOworICAgICAgICAgICAgCWZTdGFydE9mTW9udGggPSBmQ2FsZW5kYXIuZ2V0VGltZSgpOworICAgICAgICAJfQorICAgICAgICAJZGlydHkgPSB0cnVlOworICAgICAgICAJcmVwYWludCgpOworICAgIAl9CisKKyAgICAJcHVibGljIGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXIgZ2V0Q2FsZW5kYXIoKSB7CisgICAgICAgIAlyZXR1cm4gZkNhbGVuZGFyOworICAgIAl9CisKKyAgICAJcHVibGljIExvY2FsZSBnZXRDYWxlbmRhckxvY2FsZSgpIHsKKyAgICAgICAgCXJldHVybiBmQ2FsZW5kYXJMb2NhbGU7CisgICAgCX0KKworICAgIAlwdWJsaWMgTG9jYWxlIGdldERpc3BsYXlMb2NhbGUoKSB7CisgICAgICAgIAlyZXR1cm4gZkRpc3BsYXlMb2NhbGU7CisgICAgCX0KKworCisgICAgCXB1YmxpYyBEYXRlIGZpcnN0T2ZNb250aCgpIHsKKyAgICAgICAgCXJldHVybiBmU3RhcnRPZk1vbnRoOworICAgIAl9CisKKyAgICAJcHJpdmF0ZSBEYXRlIHN0YXJ0T2ZNb250aChEYXRlIGRhdGVJbk1vbnRoKQorICAgIAl7CisgICAgICAgIAlzeW5jaHJvbml6ZWQoZkNhbGVuZGFyKSB7CisgICAgICAgICAgICAJZkNhbGVuZGFyLnNldFRpbWUoZGF0ZUluTW9udGgpOyAgICAgICAgICAgICAvLyBUT0RPOiBzeW5jaHJvbml6YXRpb24KKworICAgICAgICAgICAgCWludCBlcmEgPSBmQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLkVSQSk7CisgICAgICAgICAgICAJaW50IHllYXIgPSBmQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICAgICAgCWludCBtb250aCA9IGZDYWxlbmRhci5nZXQoQ2FsZW5kYXIuTU9OVEgpOworCisgICAgICAgICAgICAJZkNhbGVuZGFyLmNsZWFyKCk7CisgICAgICAgICAgICAJZkNhbGVuZGFyLnNldChDYWxlbmRhci5FUkEsIGVyYSk7CisgICAgICAgICAgICAJZkNhbGVuZGFyLnNldChDYWxlbmRhci5ZRUFSLCB5ZWFyKTsKKyAgICAgICAgICAgIAlmQ2FsZW5kYXIuc2V0KENhbGVuZGFyLk1PTlRILCBtb250aCk7CisgICAgICAgICAgICAJZkNhbGVuZGFyLnNldChDYWxlbmRhci5EQVRFLCAxKTsKKworICAgICAgICAgICAgCXJldHVybiBmQ2FsZW5kYXIuZ2V0VGltZSgpOworICAgICAgICAJfQorICAgIAl9CisKKyAgICAJcHJpdmF0ZSB2b2lkIGNhbGN1bGF0ZSgpCisgICAgCXsKKyAgICAgICAgCS8vCisgICAgICAgIAkvLyBBcyBhIHdvcmthcm91bmQgZm9yIEpESyAxLjEuMyBhbmQgYmVsb3csIHdoZXJlIENhbGVuZGFycyBhbmQgdGltZQorICAgICAgICAJLy8gem9uZXMgYXJlIGEgYml0IGdvb2Z5LCBhbHdheXMgc2V0IG15IGNhbGVuZGFyJ3MgdGltZSB6b25lIHRvIFVUQy4KKyAgICAgICAgCS8vIFlvdSB3b3VsZCB0aGluayBJIHdvdWxkIHdhbnQgdG8gZG8gdGhpcyBpbiB0aGUgInNldCIgZnVuY3Rpb24gYWJvdmUsCisgICAgICAgIAkvLyBidXQgaWYgSSBkbyB0aGF0LCB0aGUgcHJvZ3JhbSBoYW5ncyB3aGVuIHRoaXMgY2xhc3MgaXMgbG9hZGVkLAorICAgICAgICAJLy8gcGVyaGFwcyBkdWUgdG8gc29tZSBzb3J0IG9mIHN0YXRpYyBpbml0aWFsaXphdGlvbiBvcmRlcmluZyBwcm9ibGVtLgorICAgICAgICAJLy8gU28gSSBkbyBpdCBoZXJlIGluc3RlYWQuCisgICAgICAgIAkvLworICAgICAgICAJZkNhbGVuZGFyLnNldFRpbWVab25lKG5ldyBTaW1wbGVUaW1lWm9uZSgwLCAiVVRDIikpOworCisgICAgICAgIAlDYWxlbmRhciBjID0gKENhbGVuZGFyKWZDYWxlbmRhci5jbG9uZSgpOyAvLyBUZW1wb3JhcnkgY29weQorCisgICAgICAgIAlmU3RhcnRPZk1vbnRoID0gc3RhcnRPZk1vbnRoKGZTdGFydE9mTW9udGgpOworCisgICAgICAgIAkvLyBTdGFzaCBhd2F5IGEgZmV3IHVzZWZ1bCBjb25zdGFudHMgZm9yIHRoaXMgY2FsZW5kYXIgYW5kIGRpc3BsYXkKKyAgICAgICAgCW1pbkRheSA9IGMuZ2V0TWluaW11bShDYWxlbmRhci5EQVlfT0ZfV0VFSyk7CisgICAgICAgIAlkYXlzSW5XZWVrID0gYy5nZXRNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9XRUVLKSAtIG1pbkRheSArIDE7CisKKyAgICAgICAgCWZpcnN0RGF5T2ZXZWVrID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoZkRpc3BsYXlMb2NhbGUpLmdldEZpcnN0RGF5T2ZXZWVrKCk7CisKKyAgICAgICAgCS8vIFN0YXNoIGF3YXkgYSBEYXRlIGZvciB0aGUgc3RhcnQgb2YgdGhpcyBtb250aAorCisgICAgICAgIAkvLyBGaW5kIHRoZSBkYXkgb2Ygd2VlayBvZiB0aGUgZmlyc3QgZGF5IGluIHRoaXMgbW9udGgKKyAgICAgICAgCWMuc2V0VGltZShmU3RhcnRPZk1vbnRoKTsKKyAgICAgICAgCWZpcnN0RGF5SW5Nb250aCA9IGMuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKworICAgICAgICAJLy8gTm93IGZpbmQgdGhlICMgb2YgZGF5cyBpbiB0aGUgbW9udGgKKyAgICAgICAgCWMucm9sbChDYWxlbmRhci5EQVRFLCBmYWxzZSk7CisgICAgICAgIAlkYXlzSW5Nb250aCA9IGMuZ2V0KENhbGVuZGFyLkRBVEUpOworCisgICAgICAgIAkvLyBGaW5hbGx5LCBmaW5kIHRoZSBlbmQgb2YgdGhlIG1vbnRoLCBpLmUuIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBvbmUKKyAgICAgICAgCWMucm9sbChDYWxlbmRhci5EQVRFLCB0cnVlKTsKKyAgICAgICAgCWMuYWRkKENhbGVuZGFyLk1PTlRILCAxKTsKKyAgICAgICAgCWMuZ2V0VGltZSgpOyAgICAgICAgLy8gSkRLIDEuMS4yIGJ1ZyB3b3JrYXJvdW5kCisgICAgICAgIAljLmFkZChDYWxlbmRhci5TRUNPTkQsIC0xKTsKKyAgICAgICAgCURhdGUgZW5kT2ZNb250aCA9IGMuZ2V0VGltZSgpOworCisgICAgICAgIAkvLworICAgICAgICAJLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZnVsbCBvciBwYXJ0aWFsIHdlZWtzIGluIHRoaXMgbW9udGguCisgICAgICAgIAkvLyBUbyBkbyB0aGlzIEkgY2FuIGp1c3QgcmV1c2UgdGhlIGNvZGUgdGhhdCBjYWxjdWxhdGVzIHdoaWNoCisgICAgICAgIAkvLyBjYWxlbmRhciBjZWxsIGNvbnRhaW5zIGEgZ2l2ZW4gZGF0ZS4KKyAgICAgICAgCS8vCisgICAgICAgIAludW1XZWVrcyA9IGRhdGVUb0NlbGwoZGF5c0luTW9udGgpLnkgLSBkYXRlVG9DZWxsKDEpLnkgKyAxOworCisgICAgICAgIAkvLyBSZW1lbWJlciB3aGljaCBob2xpZGF5cyBmYWxsIG9uIHdoaWNoIGRheXMgaW4gdGhpcyBtb250aCwKKyAgICAgICAgCS8vIHRvIHNhdmUgdGhlIHRyb3VibGUgb2YgaGF2aW5nIHRvIGRvIGl0IGxhdGVyCisgICAgICAgIAlmSG9saWRheXMuc2V0U2l6ZSgwKTsKKworICAgICAgICAJZm9yIChpbnQgaCA9IDA7IGggPCBmQWxsSG9saWRheXMubGVuZ3RoOyBoKyspCisgICAgICAgIAl7CisgICAgICAgICAgICAJRGF0ZSBkID0gZlN0YXJ0T2ZNb250aDsKKyAgICAgICAgICAgIAl3aGlsZSAoIChkID0gZkFsbEhvbGlkYXlzW2hdLmZpcnN0QmV0d2VlbihkLCBlbmRPZk1vbnRoKSApICE9IG51bGwpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgICAgIAljLnNldFRpbWUoZCk7CisgICAgICAgICAgICAgICAgCWZIb2xpZGF5cy5hZGRFbGVtZW50KCBuZXcgSG9saWRheUluZm8oYy5nZXQoQ2FsZW5kYXIuREFURSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWZBbGxIb2xpZGF5c1toXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJZkFsbEhvbGlkYXlzW2hdLmdldERpc3BsYXlOYW1lKGZEaXNwbGF5TG9jYWxlKSApKTsKKworICAgICAgICAgICAgICAgIAlkLnNldFRpbWUoIGQuZ2V0VGltZSgpICsgMTAwMCApOyAgICAvLyAiZCsrIgorICAgICAgICAgICAgCX0KKyAgICAgICAgCX0KKyAgICAgICAgCWRpcnR5ID0gZmFsc2U7CisgICAgCX0KKworICAgIAlzdGF0aWMgZmluYWwgaW50IElOU0VUID0gMjsKKworICAgIAkvKgorICAgIAkqIENvbnZlcnQgZnJvbSB0aGUgZGF5IG51bWJlciB3aXRoaW4gYSBtb250aCAoMS1iYXNlZCkKKyAgICAJKiB0byB0aGUgY2VsbCBjb29yZGluYXRlcyBvbiB0aGUgY2FsZW5kYXIgKDAtYmFzZWQpCisgICAgCSovCisgICAgCXByaXZhdGUgdm9pZCBkYXRlVG9DZWxsKGludCBkYXRlLCBQb2ludCBwb3MpCisgICAgCXsKKyAgICAgICAgCWludCBjZWxsID0gKGRhdGUgKyBmaXJzdERheUluTW9udGggLSBmaXJzdERheU9mV2VlayAtIG1pbkRheSk7CisgICAgICAgIAlpZiAoZmlyc3REYXlJbk1vbnRoIDwgZmlyc3REYXlPZldlZWspIHsKKyAgICAgICAgICAgIAljZWxsICs9IGRheXNJbldlZWs7CisgICAgICAgIAl9CisKKyAgICAgICAgCXBvcy54ID0gY2VsbCAlIGRheXNJbldlZWs7CisgICAgICAgIAlwb3MueSA9IGNlbGwgLyBkYXlzSW5XZWVrOworICAgIAl9CisgICAgCXByaXZhdGUgUG9pbnQgZGF0ZVRvQ2VsbChpbnQgZGF0ZSkgeworICAgICAgICAJUG9pbnQgcCA9IG5ldyBQb2ludCgwLDApOworICAgICAgICAJZGF0ZVRvQ2VsbChkYXRlLCBwKTsKKyAgICAgICAgCXJldHVybiBwOworICAgIAl9CisKKyAgICAJcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZykgeworCisgICAgICAgIAlpZiAoZGlydHkpIHsKKyAgICAgICAgICAgIAljYWxjdWxhdGUoKTsKKyAgICAgICAgCX0KKworICAgICAgICAJUG9pbnQgY2VsbFBvcyA9IG5ldyBQb2ludCgwLDApOyAgICAgLy8gVGVtcG9yYXJ5IHZhcmlhYmxlCisgICAgICAgIAlEaW1lbnNpb24gZCA9IGdldFNpemUoKTsKKworICAgICAgICAJZy5zZXRDb2xvcihEZW1vVXRpbGl0eS5iZ0NvbG9yKTsKKyAgICAgICAgCWcuZmlsbFJlY3QoMCwwLGQud2lkdGgsZC5oZWlnaHQpOworCisgICAgICAgIAkvLyBEcmF3IHRoZSBkYXkgbmFtZXMgYXQgdGhlIHRvcAorICAgICAgICAJZy5zZXRDb2xvcihDb2xvci5ibGFjayk7CisgICAgICAgIAlnLnNldEZvbnQoRGVtb1V0aWxpdHkubGFiZWxGb250KTsKKyAgICAgICAgCUZvbnRNZXRyaWNzIGZtID0gZy5nZXRGb250TWV0cmljcygpOworICAgICAgICAJaW50IGxhYmVsSGVpZ2h0ID0gZm0uZ2V0SGVpZ2h0KCkgKyBJTlNFVCAqIDI7CisKKyAgICAgICAgCWludCB2ID0gZm0uZ2V0QXNjZW50KCkgKyBJTlNFVDsKKyAgICAgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgZGF5c0luV2VlazsgaSsrKSB7CisgICAgICAgICAgICAJaW50IGRheU51bSA9IChpICsgbWluRGF5ICsgZmlyc3REYXlPZldlZWsgLSAyKSAlIGRheXNJbldlZWsgKyAxOworICAgICAgICAgICAgCVN0cmluZyBkYXlOYW1lID0gZlN5bWJvbHMuZ2V0V2Vla2RheXMoKVtkYXlOdW1dOworCisgICAgICAgICAgICAJaW50IGggPSAoaW50KSAoZC53aWR0aCAqIChpICsgMC41KSkgLyBkYXlzSW5XZWVrOworICAgICAgICAgICAgCWggLT0gZm0uc3RyaW5nV2lkdGgoZGF5TmFtZSkgLyAyOworCisgICAgICAgICAgICAJZy5kcmF3U3RyaW5nKGRheU5hbWUsIGgsIHYpOworICAgICAgICAJfQorCisgICAgICAgIAlkb3VibGUgY2VsbEhlaWdodCA9IChkLmhlaWdodCAtIGxhYmVsSGVpZ2h0IC0gMSkgLyBudW1XZWVrczsKKyAgICAgICAgCWRvdWJsZSBjZWxsV2lkdGggPSAoZG91YmxlKShkLndpZHRoIC0gMSkgLyBkYXlzSW5XZWVrOworCisgICAgICAgIAkvLyBEcmF3IGEgd2hpdGUgYmFja2dyb3VuZCBpbiB0aGUgcGFydCBvZiB0aGUgY2FsZW5kYXIKKyAgICAgICAgCS8vIHRoYXQgZGlzcGxheXMgdGhpcyBtb250aC4KKyAgICAgICAgCS8vIEZpcnN0IGZpZ3VyZSBvdXQgaG93IG11Y2ggb2YgdGhlIGZpcnN0IHdlZWsgc2hvdWxkIGJlIHNoYWRlZC4KKyAgICAgICAgCXsKKyAgICAgICAgICAgIAlnLnNldENvbG9yKENvbG9yLndoaXRlKTsKKyAgICAgICAgICAgIAlkYXRlVG9DZWxsKDEsIGNlbGxQb3MpOworICAgICAgICAgICAgCWludCB3aWR0aCA9IChpbnQpKGNlbGxQb3MueCpjZWxsV2lkdGgpOyAgLy8gV2lkdGggb2YgdW5zaGFkZWQgYXJlYQorCisgICAgICAgICAgICAJZy5maWxsUmVjdCgoaW50KSh3aWR0aCksIGxhYmVsSGVpZ2h0ICwKKyAgICAgICAgICAgICAgICAgICAgCShpbnQpKGQud2lkdGggLSB3aWR0aCksIChpbnQpY2VsbEhlaWdodCk7CisKKyAgICAgICAgICAgIAkvLyBBbGwgb2YgdGhlIGludGVybWVkaWF0ZSB3ZWVrcyBnZXQgc2hhZGVkIGNvbXBsZXRlbHkKKyAgICAgICAgICAgIAlnLmZpbGxSZWN0KDAsIChpbnQpKGxhYmVsSGVpZ2h0ICsgY2VsbEhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAJZC53aWR0aCwgKGludCkoY2VsbEhlaWdodCAqIChudW1XZWVrcyAtIDIpKSk7CisKKyAgICAgICAgICAgIAkvLyBOb3cgZmlndXJlIG91dCB0aGUgbGFzdCB3ZWVrLgorICAgICAgICAgICAgCWRhdGVUb0NlbGwoZGF5c0luTW9udGgsIGNlbGxQb3MpOworICAgICAgICAgICAgCXdpZHRoID0gKGludCkoKGNlbGxQb3MueCsxKSpjZWxsV2lkdGgpOyAgLy8gV2lkdGggb2Ygc2hhZGVkIGFyZWEKKworICAgICAgICAgICAgCWcuZmlsbFJlY3QoMCwgKGludCkobGFiZWxIZWlnaHQgKyAobnVtV2Vla3MtMSkgKiBjZWxsSGVpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIAl3aWR0aCwgKGludCkoY2VsbEhlaWdodCkpOworCisgICAgICAgIAl9CisgICAgICAgIAkvLyBEcmF3IHRoZSBYL1kgZ3JpZCBsaW5lcworICAgICAgICAJZy5zZXRDb2xvcihDb2xvci5ibGFjayk7CisgICAgICAgIAlmb3IgKGludCBpID0gMDsgaSA8PSBudW1XZWVrczsgaSsrKSB7CisgICAgICAgICAgICAJaW50IHkgPSAoaW50KShsYWJlbEhlaWdodCArIGkgKiBjZWxsSGVpZ2h0KTsKKyAgICAgICAgICAgIAlnLmRyYXdMaW5lKDAsIHksIGQud2lkdGggLSAxLCB5KTsKKyAgICAgICAgCX0KKyAgICAgICAgCWZvciAoaW50IGkgPSAwOyBpIDw9IGRheXNJbldlZWs7IGkrKykgeworICAgICAgICAgICAgCWludCB4ID0gKGludCkoaSAqIGNlbGxXaWR0aCk7CisgICAgICAgICAgICAJZy5kcmF3TGluZSh4LCBsYWJlbEhlaWdodCwgeCwgZC5oZWlnaHQgLSAxKTsKKyAgICAgICAgCX0KKworICAgICAgICAJLy8gTm93IGxvb3AgdGhyb3VnaCBhbGwgb2YgdGhlIGRheXMgaW4gdGhlIG1vbnRoLCBmaWd1cmUgb3V0IHdoZXJlCisgICAgICAgIAkvLyB0aGV5IGdvIGluIHRoZSBncmlkLCBhbmQgZHJhdyB0aGUgZGF5ICMgZm9yIGVhY2ggb25lCisgICAgICAgIAlGb250IG51bWJlckZvbnQgPSBuZXcgRm9udCgiSGVsdmV0aWNhIixGb250LlBMQUlOLDEyKTsKKyAgICAgICAgCS8vIG5vdCB1c2VkIEZvbnQgaG9saWRheUZvbnQgPSBEZW1vVXRpbGl0eS5jcmVkaXRGb250OworCisgICAgICAgIAlDYWxlbmRhciBjID0gKENhbGVuZGFyKWZDYWxlbmRhci5jbG9uZSgpOworICAgICAgICAJYy5zZXRUaW1lKGZTdGFydE9mTW9udGgpOworCisgICAgICAgIAlmb3IgKGludCBpID0gMSwgaCA9IDA7IGkgPD0gZGF5c0luTW9udGg7IGkrKykgeworICAgICAgICAgICAgCWcuc2V0Rm9udChudW1iZXJGb250KTsKKyAgICAgICAgICAgIAlnLnNldENvbG9yKENvbG9yLmJsYWNrKTsKKyAgICAgICAgICAgIAlmbSA9IGcuZ2V0Rm9udE1ldHJpY3MoKTsKKworICAgICAgICAgICAgCWRhdGVUb0NlbGwoaSwgY2VsbFBvcyk7CisgICAgICAgICAgICAJaW50IHggPSAoaW50KSgoY2VsbFBvcy54ICsgMSkgKiBjZWxsV2lkdGgpOworICAgICAgICAgICAgCWludCB5ID0gKGludCkoY2VsbFBvcy55ICogY2VsbEhlaWdodCArIGxhYmVsSGVpZ2h0KTsKKworICAgICAgICAgICAgCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICAJYnVmZmVyLmFwcGVuZChpKTsKKyAgICAgICAgICAgIAlTdHJpbmcgZGF5TnVtID0gYnVmZmVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgICAgIAl4ID0geCAtIElOU0VUIC0gZm0uc3RyaW5nV2lkdGgoZGF5TnVtKTsKKyAgICAgICAgICAgIAl5ID0geSArIGZtLmdldEFzY2VudCgpICsgSU5TRVQ7CisKKyAgICAgICAgICAgIAlnLmRyYXdTdHJpbmcoZGF5TnVtLCB4LCB5KTsKKworICAgICAgICAgICAgCS8vIFNlZSBpZiBhbnkgb2YgdGhlIGhvbGlkYXlzIGxhbmQgb24gdGhpcyBkYXkuLi4uCisgICAgICAgICAgICAJSG9saWRheUluZm8gaW5mbyA9IG51bGw7CisgICAgICAgICAgICAJaW50IGNvdW50ID0gMDsKKworICAgICAgICAgICAgCS8vIENvb3JkaW5hdGVzIG9mIGxvd2VyLWxlZnQgY29ybmVyIG9mIGNlbGwuCisgICAgICAgICAgICAJeCA9IChpbnQpKChjZWxsUG9zLngpICogY2VsbFdpZHRoKTsKKyAgICAgICAgICAgIAl5ID0gKGludCkoKGNlbGxQb3MueSsxKSAqIGNlbGxIZWlnaHQpICsgbGFiZWxIZWlnaHQ7CisKKyAgICAgICAgICAgIAl3aGlsZSAoaCA8IGZIb2xpZGF5cy5zaXplKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgCShpbmZvID0gKEhvbGlkYXlJbmZvKWZIb2xpZGF5cy5lbGVtZW50QXQoaCkpLmRhdGUgPD0gaSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAgICAgCWlmIChpbmZvLmRhdGUgPT0gaSkgeworICAgICAgICAgICAgICAgICAgICAJLy8gRHJhdyB0aGUgaG9saWRheSBoZXJlLgorICAgICAgICAgICAgICAgICAgICAJZy5zZXRGb250KG51bWJlckZvbnQpOworICAgICAgICAgICAgICAgICAgICAJZy5zZXRDb2xvcihDb2xvci5yZWQpOworCisgICAgICAgICAgICAgICAgICAgIAlEZW1vVGV4dEJveCBib3ggPSBuZXcgRGVtb1RleHRCb3goZywgaW5mby5uYW1lLCAoaW50KShjZWxsV2lkdGggLSBJTlNFVCkpOworICAgICAgICAgICAgICAgICAgICAJYm94LmRyYXcoZywgeCArIElOU0VULCB5IC0gSU5TRVQgLSBib3guZ2V0SGVpZ2h0KCkpOworCisgICAgICAgICAgICAgICAgICAgIAl5IC09IChib3guZ2V0SGVpZ2h0KCkgKyBJTlNFVCk7CisgICAgICAgICAgICAgICAgICAgIAljb3VudCsrOworICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgCWgrKzsKKyAgICAgICAgICAgIAl9CisgICAgICAgIAl9CisgICAgCX0KKworICAgIAkvLyBJbXBvcnRhbnQgc3RhdGUgdmFyaWFibGVzCisgICAgCXByaXZhdGUgTG9jYWxlICAgICAgICAgICAgICBmQ2FsZW5kYXJMb2NhbGU7ICAgIC8vIFdob3NlIGNhbGVuZGFyCisgICAgCXByaXZhdGUgQ2FsZW5kYXIgICAgICAgICAgICBmQ2FsZW5kYXI7ICAgICAgICAgIC8vIENhbGVuZGFyIGZvciBjYWxjdWxhdGlvbnMKKworICAgIAlwcml2YXRlIExvY2FsZSAgICAgICAgICAgICAgZkRpc3BsYXlMb2NhbGU7ICAgICAvLyBIb3cgdG8gZGlzcGxheSBpdAorICAgIAlwcml2YXRlIERhdGVGb3JtYXRTeW1ib2xzICAgZlN5bWJvbHM7ICAgICAgICAgICAvLyBTeW1ib2xzIGZvciBkcmF3aW5nCisKKyAgICAJcHJpdmF0ZSBEYXRlICAgICAgICAgICAgICAgIGZTdGFydE9mTW9udGg7ICAgICAgLy8gMDA6MDA6MDAgb24gZmlyc3QgZGF5IG9mIG1vbnRoCisKKyAgICAJLy8gQ2FjaGVkIGNhbGN1bGF0aW9ucyB0byBtYWtlIGRyYXdpbmcgZmFzdGVyLgorICAgIAlwcml2YXRlIHRyYW5zaWVudCBpbnQgbWluRGF5OyAgICAgICAgICAgLy8gTWluaW11bSBsZWdhbCBkYXkgIworICAgIAlwcml2YXRlIHRyYW5zaWVudCBpbnQgZGF5c0luV2VlazsgICAgICAgLy8gIyBvZiBkYXlzIGluIGEgd2VlaworICAgIAlwcml2YXRlIHRyYW5zaWVudCBpbnQgZmlyc3REYXlPZldlZWs7ICAgLy8gRmlyc3QgZGF5IHRvIGRpc3BsYXkgaW4gd2VlaworICAgIAlwcml2YXRlIHRyYW5zaWVudCBpbnQgbnVtV2Vla3M7ICAgICAgICAgLy8gIyBmdWxsIG9yIHBhcnRpYWwgd2Vla3MgaW4gbW9udGgKKyAgICAJcHJpdmF0ZSB0cmFuc2llbnQgaW50IGRheXNJbk1vbnRoOyAgICAgIC8vICMgZGF5cyBpbiB0aGlzIG1vbnRoCisgICAgCXByaXZhdGUgdHJhbnNpZW50IGludCBmaXJzdERheUluTW9udGg7ICAvLyBEYXkgb2Ygd2VlayBvZiBmaXJzdCBkYXkgaW4gbW9udGgKKworICAgIAlwcml2YXRlIHRyYW5zaWVudCBIb2xpZGF5W10gZkFsbEhvbGlkYXlzOworICAgIAlwcml2YXRlIHRyYW5zaWVudCBWZWN0b3IgICAgZkhvbGlkYXlzID0gbmV3IFZlY3Rvcig1LDUpOworCisgICAgCXByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gZGlydHkgPSB0cnVlOworCX0KKworCXByaXZhdGUgc3RhdGljIGNsYXNzIEhvbGlkYXlJbmZvIHsKKyAgICAJcHVibGljIEhvbGlkYXlJbmZvKGludCBkYXRlLCBIb2xpZGF5IGhvbGlkYXksIFN0cmluZyBuYW1lKSB7CisgICAgICAgIAl0aGlzLmRhdGUgPSBkYXRlOworICAgICAgICAJdGhpcy5ob2xpZGF5ID0gaG9saWRheTsKKyAgICAgICAgCXRoaXMubmFtZSA9IG5hbWU7CisgICAgCX0KKworICAgIAlwdWJsaWMgSG9saWRheSBob2xpZGF5OworICAgIAlwdWJsaWMgaW50IGRhdGU7CisgICAgCXB1YmxpYyBTdHJpbmcgbmFtZTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9ob2xpZGF5L3BhY2thZ2UuaHRtbCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9ob2xpZGF5L3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZmEzZTRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2hvbGlkYXkvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaG9saWRheS9wYWNrYWdlLmh0bWwsdiAkCisgICRSZXZpc2lvbjogMS4xICQKKyAgJERhdGU6IDIwMDAvMDMvMTUgMDY6NTQ6NTAgJAorLS0+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSI+CitIb2xpZGF5IGRlbW8gYXBwbGljYXRpb24uCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvQXBwbGV0RnJhbWUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9pbXBsL0FwcGxldEZyYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODlkNjc4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9pbXBsL0FwcGxldEZyYW1lLmphdmEKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9pbXBsL0FwcGxldEZyYW1lLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDQ6NTYgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuZGVtby5pbXBsOworaW1wb3J0IGphdmEuYXBwbGV0Lio7CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqCisgKiA8cD5BIEZyYW1lIHRoYXQgcnVucyBhbiBBcHBsZXQgd2l0aGluIGl0c2VsZiwgbWFraW5nIGl0IHBvc3NpYmxlCisgKiBmb3IgYW4gYXBwbGV0IHRvIHJ1biBhcyBhbiBhcHBsaWNhdGlvbi4gIFVzYWdlOgorICoKKyAqIDxwcmU+CisgKiBwdWJsaWMgY2xhc3MgTXlBcHBsZXQgZXh0ZW5kcyBBcHBsZXQgeworICogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAqICAgICAgICAgTXlBcHBsZXQgYXBwbGV0ID0gbmV3IE15QXBwbGV0KCk7CisgKiAgICAgICAgIG5ldyBBcHBsZXRGcmFtZSgiTXkgQXBwbGV0IFJ1bm5pbmcgQXMgQW4gQXBwIiwgYXBwbGV0LCA2NDAsIDQ4MCk7CisgKiAgICAgfQorICogICAgIC4uLgorICogfQorICogPHByZT4KKyAqCisgKiA8cD5Db3B5cmlnaHQgJmNvcHk7IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAdmVyc2lvbiAkUkNTZmlsZTogQXBwbGV0RnJhbWUuamF2YSx2ICQgJFJldmlzaW9uOiAxLjQgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNDo1NiAkCisgKi8KK3B1YmxpYyBjbGFzcyBBcHBsZXRGcmFtZSBleHRlbmRzIEZyYW1lIGltcGxlbWVudHMgQXBwbGV0U3R1YiwgQXBwbGV0Q29udGV4dCB7CisKKyAgICBBcHBsZXQgYXBwbGV0OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICJcdTAwQTkgSUJNIENvcnBvcmF0aW9uIDE5OTkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBGcmFtZSBydW5uaW5nIHRoZSBnaXZlbiBBcHBsZXQgd2l0aCB0aGUgZGVmYXVsdCBzaXplCisgICAgICogb2YgNjQwIGJ5IDQ4MC4KKyAgICAgKiBXaGVuIHRoZSBGcmFtZSBpcyBjbG9zZWQsIHRoZSBhcHBsZXQncyBzdG9wKCkgbWV0aG9kIGlzIGNhbGxlZCwKKyAgICAgKiB0aGUgRnJhbWUgaXMgZGlzcG9zZSgpZCBvZiwgYW5kIFN5c3RlbS5leGl0KDApIGlzIGNhbGxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIHRoZSBGcmFtZSB0aXRsZQorICAgICAqIEBwYXJhbSBhcHBsZXQgdGhlIGFwcGxldCB0byBiZSBydW4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXBwbGV0RnJhbWUoU3RyaW5nIG5hbWUsIEFwcGxldCBhcHBsZXQpIHsKKyAgICAgICAgdGhpcyhuYW1lLCBhcHBsZXQsIDY0MCwgNDgwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBGcmFtZSBydW5uaW5nIHRoZSBnaXZlbiBBcHBsZXQgd2l0aCB0aGUgZ2l2ZW4gc2l6ZS4KKyAgICAgKiBXaGVuIHRoZSBGcmFtZSBpcyBjbG9zZWQsIHRoZSBhcHBsZXQncyBzdG9wKCkgbWV0aG9kIGlzIGNhbGxlZCwKKyAgICAgKiB0aGUgRnJhbWUgaXMgZGlzcG9zZSgpZCBvZiwgYW5kIFN5c3RlbS5leGl0KDApIGlzIGNhbGxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIHRoZSBGcmFtZSB0aXRsZQorICAgICAqIEBwYXJhbSBhcHBsZXQgdGhlIGFwcGxldCB0byBiZSBydW4KKyAgICAgKiBAcGFyYW0gd2lkdGggd2lkdGggb2YgdGhlIEZyYW1lCisgICAgICogQHBhcmFtIGhlaWdodCBoZWlnaHQgb2YgdGhlIEZyYW1lCisgICAgICovCisgICAgcHVibGljIEFwcGxldEZyYW1lKFN0cmluZyBuYW1lLCBBcHBsZXQgYXBwbGV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgc3VwZXIobmFtZSk7CisgICAgICAgIHRoaXMuYXBwbGV0ID0gYXBwbGV0OworICAgICAgICBhcHBsZXQuc2V0U3R1Yih0aGlzKTsKKworICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBhZGQoIkNlbnRlciIsIGFwcGxldCk7CisgICAgICAgIHNob3coKTsKKyAgICAgICAgYWRkV2luZG93TGlzdGVuZXIobmV3IFdpbmRvd0FkYXB0ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9zaW5nKFdpbmRvd0V2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBBcHBsZXRGcmFtZS50aGlzLmFwcGxldC5zdG9wKCk7CisgICAgICAgICAgICAgICAgZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBhcHBsZXQuaW5pdCgpOworICAgICAgICBhcHBsZXQuc3RhcnQoKTsKKyAgICB9CisKKyAgICAvLyBBcHBsZXRTdHViIEFQSQorICAgIHB1YmxpYyB2b2lkIGFwcGxldFJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgQXBwbGV0Q29udGV4dCBnZXRBcHBsZXRDb250ZXh0KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgVVJMIGdldENvZGVCYXNlKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgVVJMIGdldERvY3VtZW50QmFzZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHJldHVybiAiUEFSQU1FVEVSIjsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0FjdGl2ZSgpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIEFwcGxldENvbnRleHQgQVBJCisgICAgcHVibGljIEFwcGxldCBnZXRBcHBsZXQoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGFwcGxldDsKKyAgICB9CisKKyAgICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QXBwbGV0cygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIEF1ZGlvQ2xpcCBnZXRBdWRpb0NsaXAoVVJMIHVybCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoVVJMIHVybCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzaG93RG9jdW1lbnQoVVJMIHVybCkge30KKyAgICBwdWJsaWMgdm9pZCBzaG93RG9jdW1lbnQoVVJMIHVybCwgU3RyaW5nIHRhcmdldCkge30KKworICAgIHB1YmxpYyB2b2lkIHNob3dTdGF0dXMoU3RyaW5nIHN0YXR1cykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3RhdHVzKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgc2V0U3RyZWFtKFN0cmluZyBrZXksIElucHV0U3RyZWFtIHN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICB9CisgICAgCisgICAgcHVibGljIElucHV0U3RyZWFtIGdldFN0cmVhbShTdHJpbmcga2V5KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgSXRlcmF0b3IgZ2V0U3RyZWFtS2V5cygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb0FwcGxldC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb0FwcGxldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIxNTNlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaW1wbC9EZW1vQXBwbGV0LmphdmEKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb0FwcGxldC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE5IDA0OjEwOjIzICQgCisgKiAkUmV2aXNpb246IDEuNiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuZGVtby5pbXBsOworCitpbXBvcnQgamF2YS5hcHBsZXQuQXBwbGV0OworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGVtb0FwcGxldCBleHRlbmRzIGphdmEuYXBwbGV0LkFwcGxldCB7CisgICAgcHJpdmF0ZSBCdXR0b24gICBkZW1vQnV0dG9uOworICAgIHByaXZhdGUgRnJhbWUgICAgZGVtb0ZyYW1lOworCXByaXZhdGUgc3RhdGljIGludCBkZW1vRnJhbWVDb3VudCA9IDA7CisKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgRnJhbWUgY3JlYXRlRGVtb0ZyYW1lKERlbW9BcHBsZXQgYXBwbGV0KTsKKyAgICBwcm90ZWN0ZWQgRGltZW5zaW9uIGdldERlZmF1bHRGcmFtZVNpemUoRGVtb0FwcGxldCBhcHBsZXQsIEZyYW1lIGYpIHsKKyAgICAJcmV0dXJuIG5ldyBEaW1lbnNpb24oNzAwLCA1NTApOworICAgIH0KKworICAgIC8vQ3JlYXRlIGEgYnV0dG9uIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBkZW1vCisgICAgcHVibGljIHZvaWQgaW5pdCgpCisgICAgeworICAgICAgICBzZXRCYWNrZ3JvdW5kKENvbG9yLndoaXRlKTsKKyAgICAgICAgZGVtb0J1dHRvbiA9IG5ldyBCdXR0b24oIkRlbW8iKTsKKyAgICAgICAgZGVtb0J1dHRvbi5zZXRCYWNrZ3JvdW5kKENvbG9yLnllbGxvdyk7CisgICAgICAgIGFkZCggZGVtb0J1dHRvbiApOworCisgICAgICAgIGRlbW9CdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIoIG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGlmIChlLmdldElEKCkgPT0gQWN0aW9uRXZlbnQuQUNUSU9OX1BFUkZPUk1FRCkgeworICAgICAgICAgICAgICAgICAgICBkZW1vQnV0dG9uLnNldExhYmVsKCJsb2FkaW5nIik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlbW9GcmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGRlbW9GcmFtZSA9IGNyZWF0ZURlbW9GcmFtZShEZW1vQXBwbGV0LnRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICBzaG93RGVtbygpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVtb0J1dHRvbi5zZXRMYWJlbCgiRGVtbyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzaG93RGVtbygpCisgICAgeworICAgIAlkZW1vRnJhbWUgPSBjcmVhdGVEZW1vRnJhbWUodGhpcyk7CisgICAgICAgIGRlbW9GcmFtZS5kb0xheW91dCgpOworICAgICAgICBEaW1lbnNpb24gZCA9IGdldERlZmF1bHRGcmFtZVNpemUodGhpcywgZGVtb0ZyYW1lKTsKKyAgICAgICAgZGVtb0ZyYW1lLnNldFNpemUoZC53aWR0aCwgZC5oZWlnaHQpOworICAgICAgICBkZW1vRnJhbWUuc2hvdygpOworCQlkZW1vRnJhbWVPcGVuZWQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBkZW1vQ2xvc2VkKCkKKyAgICB7CisgICAgICAgIGRlbW9GcmFtZSA9IG51bGw7CisJCWRlbW9GcmFtZUNsb3NlZCgpOworICAgIH0KKworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBkZW1vRnJhbWVPcGVuZWQoKSB7CisJCWRlbW9GcmFtZUNvdW50Kys7CisgICAgfQorCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBkZW1vRnJhbWVDbG9zZWQoKSB7CisJCWlmICgtLWRlbW9GcmFtZUNvdW50ID09IDApIHsKKwkJCVN5c3RlbS5leGl0KDApOworCQl9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaW1wbC9EZW1vVGV4dEJveC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb1RleHRCb3guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYmY1M2UzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb1RleHRCb3guamF2YQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb1RleHRCb3guamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xOSAwNDoxMDoyMyAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLmltcGw7CisKKworaW1wb3J0IGphdmEudGV4dC5CcmVha0l0ZXJhdG9yOworaW1wb3J0IGphdmEuYXd0Lio7CisKK3B1YmxpYyBjbGFzcyBEZW1vVGV4dEJveCB7CisKKyAgICBwdWJsaWMgRGVtb1RleHRCb3goR3JhcGhpY3MgZywgU3RyaW5nIHRleHQsIGludCB3aWR0aCkKKyAgICB7CisgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgICAgIHRoaXMuY2hhcnMgPSBuZXcgY2hhclt0ZXh0Lmxlbmd0aCgpXTsKKyAgICAgICAgdGV4dC5nZXRDaGFycygwLCB0ZXh0Lmxlbmd0aCgpLCBjaGFycywgMCk7CisKKyAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOworICAgICAgICB0aGlzLnBvcnQgPSBnOworICAgICAgICB0aGlzLm1ldHJpY3MgPSBnLmdldEZvbnRNZXRyaWNzKCk7CisKKyAgICAgICAgYnJlYWtUZXh0KCk7CisgICAgfQorCisgICAgcHVibGljICBpbnQgZ2V0SGVpZ2h0KCkgeworICAgICAgICByZXR1cm4gKG5icmVha3MgKyAxKSAqIG1ldHJpY3MuZ2V0SGVpZ2h0KCk7CisgICAgfQorCisgICAgcHVibGljICB2b2lkIGRyYXcoR3JhcGhpY3MgZywgaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKworICAgICAgICB5ICs9IG1ldHJpY3MuZ2V0QXNjZW50KCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYnJlYWtzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGcuZHJhd0NoYXJzKGNoYXJzLCBpbmRleCwgYnJlYWtQb3NbaV0gLSBpbmRleCwgeCwgeSk7CisgICAgICAgICAgICBpbmRleCA9IGJyZWFrUG9zW2ldOworICAgICAgICAgICAgeSArPSBtZXRyaWNzLmdldEhlaWdodCgpOworICAgICAgICB9CisKKyAgICAgICAgZy5kcmF3Q2hhcnMoY2hhcnMsIGluZGV4LCBjaGFycy5sZW5ndGggLSBpbmRleCwgeCwgeSk7CisgICAgfQorCisKKyAgICBwcml2YXRlIHZvaWQgYnJlYWtUZXh0KCkKKyAgICB7CisgICAgICAgIGlmIChtZXRyaWNzLmNoYXJzV2lkdGgoY2hhcnMsIDAsIGNoYXJzLmxlbmd0aCkgPiB3aWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgQnJlYWtJdGVyYXRvciBpdGVyID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoKTsKKyAgICAgICAgICAgIGl0ZXIuc2V0VGV4dCh0ZXh0KTsKKworICAgICAgICAgICAgaW50IHN0YXJ0ID0gaXRlci5maXJzdCgpOworICAgICAgICAgICAgaW50IGVuZCA9IHN0YXJ0OworICAgICAgICAgICAgaW50IHBvczsKKworICAgICAgICAgICAgd2hpbGUgKCAocG9zID0gaXRlci5uZXh0KCkpICE9IEJyZWFrSXRlcmF0b3IuRE9ORSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHcgPSBtZXRyaWNzLmNoYXJzV2lkdGgoY2hhcnMsIHN0YXJ0LCBwb3MgLSBzdGFydCk7CisgICAgICAgICAgICAgICAgaWYgKHcgPiB3aWR0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGdvbmUgcGFzdCB0aGUgbWF4aW11bSB3aWR0aCwgc28gYnJlYWsgdGhlIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCA+IHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgYXQgbGVhc3Qgb25lIGJyZWFrIHBvc2l0aW9uIGJlZm9yZSB0aGlzIHBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICBicmVha1Bvc1tuYnJlYWtzKytdID0gZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBlbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBwb3M7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3ZXJlbid0IGFueSBicmVhayBwb3NpdGlvbnMgYmVmb3JlIHRoaXMgb25lLCBzbworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHRoaXMgd29yZCBvdmVyZmxvdyB0aGUgbWFyZ2luICh5dWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtQb3NbbmJyZWFrcysrXSA9IHBvczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kID0gcG9zOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24gc3RpbGwgZml0cyBvbiB0aGUgbGluZTsgaXQncyB0aGUgYmVzdAorICAgICAgICAgICAgICAgICAgICAvLyB0ZW50YXRpdmUgYnJlYWsgcG9zaXRpb24gd2UgaGF2ZSBzbyBmYXIuCisgICAgICAgICAgICAgICAgICAgIGVuZCA9IHBvczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nICAgICAgICAgIHRleHQ7CisgICAgcHJpdmF0ZSBjaGFyW10gICAgICAgICAgY2hhcnM7CisgICAgcHJpdmF0ZSBHcmFwaGljcyAgICAgICAgcG9ydDsKKyAgICBwcml2YXRlIEZvbnRNZXRyaWNzICAgICBtZXRyaWNzOworICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgIHdpZHRoOworCisgICAgcHJpdmF0ZSBpbnRbXSAgICAgICAgICAgYnJlYWtQb3MgPSBuZXcgaW50WzEwXTsgLy8gVE9ETzogZ2V0IHJlYWwKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICBuYnJlYWtzID0gMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaW1wbC9EZW1vVXRpbGl0eS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb1V0aWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZjVhZmRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb1V0aWxpdHkuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvRGVtb1V0aWxpdHkuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wMSAyMDoyNzoyMCAkIAorICogJFJldmlzaW9uOiAxLjggJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLmltcGw7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEubGFuZy4qOworaW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgRGVtb1V0aWxpdHkKK3sKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvbnQgdGl0bGVGb250ID0gbmV3IEZvbnQoIlRpbWVzUm9tYW4iLEZvbnQuQk9MRCwxOCk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBGb250IGxhYmVsRm9udCA9IG5ldyBGb250KCJUaW1lc1JvbWFuIixGb250LkJPTEQsMTQpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRm9udCBjaG9pY2VGb250ID0gbmV3IEZvbnQoIkhlbHZldGljYSIsRm9udC5CT0xELDEyKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvbnQgZWRpdEZvbnQgPSBuZXcgRm9udCgiSGVsdmV0aWNhIixGb250LlBMQUlOLDE0KTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEZvbnQgY3JlZGl0Rm9udCA9IG5ldyBGb250KCJIZWx2ZXRpY2EiLEZvbnQuUExBSU4sMTApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRm9udCBudW1iZXJGb250ID0gbmV3IEZvbnQoInNhbnNzZXJpZiIsIEZvbnQuUExBSU4sIDE0KTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29sb3IgYmdDb2xvciA9IENvbG9yLmxpZ2h0R3JheTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbG9yIGNob2ljZUNvbG9yID0gQ29sb3Iud2hpdGU7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQxID0KKyAgICAgICAgIkNvcHlyaWdodCAoQykgSUJNIENvcnAgYW5kIG90aGVycy4gMTk5NyAtIDIwMDIgQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisKKyAgICAvKioKKyAgICBQcm92aWRlcyBlYXN5IHdheSB0byB1c2UgYmFzaWMgZnVuY3Rpb25zIG9mIEdyaWRCYWdMYXlvdXQsIHdpdGhvdXQKKyAgICB0aGUgY29tcGxpY2F0aW9ucy4gQWZ0ZXIgYnVpbGRpbmcgYSBwYW5lbCwgYW5kIGluc2VydGluZyBhbGwgdGhlCisgICAgKiBzdWJjb21wb25lbnRzLCBjYWxsIHRoaXMgdG8gbGF5IGl0IG91dCBpbiB0aGUgZGVzaXJlZCBudW1iZXIgb2YgY29sdW1ucy4KKyAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmaXhHcmlkKENvbnRhaW5lciBjb250LCBpbnQgY29sdW1ucykgeworICAgICAgICBHcmlkQmFnTGF5b3V0IGdyaWRiYWcgPSBuZXcgR3JpZEJhZ0xheW91dCgpOworICAgICAgICBjb250LnNldExheW91dChncmlkYmFnKTsKKworICAgICAgICBHcmlkQmFnQ29uc3RyYWludHMgYyA9IG5ldyBHcmlkQmFnQ29uc3RyYWludHMoKTsKKyAgICAgICAgYy5maWxsID0gR3JpZEJhZ0NvbnN0cmFpbnRzLlZFUlRJQ0FMOworICAgICAgICBjLndlaWdodHggPSAxLjA7CisgICAgICAgIGMuaW5zZXRzID0gbmV3IEluc2V0cygyLDIsMiwyKTsKKworICAgICAgICBDb21wb25lbnRbXSBjb21wb25lbnRzID0gY29udC5nZXRDb21wb25lbnRzKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgLy8gbm90IHVzZWQgaW50IGNvbE51bWJlciA9IGklY29sdW1uczsKKyAgICAgICAgICAgIGMuZ3JpZHdpZHRoID0gMTsgICAgLy8gZGVmYXVsdAorICAgICAgICAgICAgaWYgKChpJWNvbHVtbnMpID09IGNvbHVtbnMgLSAxKQorICAgICAgICAgICAgICAgIGMuZ3JpZHdpZHRoID0gR3JpZEJhZ0NvbnN0cmFpbnRzLlJFTUFJTkRFUjsgICAgLy8gbGFzdCBpbiBncmlkCisgICAgICAgICAgICBpZiAoY29tcG9uZW50c1tpXSBpbnN0YW5jZW9mIExhYmVsKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoICgoKExhYmVsKWNvbXBvbmVudHNbaV0pLmdldEFsaWdubWVudCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBMYWJlbC5DRU5URVI6IGMuYW5jaG9yID0gR3JpZEJhZ0NvbnN0cmFpbnRzLkNFTlRFUjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBMYWJlbC5MRUZUOiBjLmFuY2hvciA9IEdyaWRCYWdDb25zdHJhaW50cy5XRVNUOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIExhYmVsLlJJR0hUOiBjLmFuY2hvciA9IEdyaWRCYWdDb25zdHJhaW50cy5FQVNUOyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBncmlkYmFnLnNldENvbnN0cmFpbnRzKGNvbXBvbmVudHNbaV0sIGMpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICAvKioKKyAgICBQcm92aWRlcyBlYXN5IHdheSB0byBjaGFuZ2UgdGhlIHNwYWNpbmcgYXJvdW5kIGFuIG9iamVjdCBpbiBhIEdyaWRCYWdMYXlvdXQuCisgICAgQ2FsbCBBRlRFUiBmaXhHcmlkQmFnLCBwYXNzaW5nIGluIHRoZSBjb250YWluZXIsIHRoZSBjb21wb25lbnQsIGFuZCB0aGUKKyAgICBuZXcgaW5zZXRzLgorICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldEluc2V0cyhDb250YWluZXIgY29udCwgQ29tcG9uZW50IGNvbXAsIEluc2V0cyBpbnNldHMpIHsKKyAgICAgICAgR3JpZEJhZ0xheW91dCBnYmwgPSAoR3JpZEJhZ0xheW91dCljb250LmdldExheW91dCgpOworICAgICAgICBHcmlkQmFnQ29uc3RyYWludHMgZyA9IGdibC5nZXRDb25zdHJhaW50cyhjb21wKTsKKyAgICAgICAgZy5pbnNldHMgPSBpbnNldHM7CisgICAgICAgIGdibC5zZXRDb25zdHJhaW50cyhjb21wLGcpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUGFuZWwgY3JlYXRlU3BhY2VyKCkgeworICAgICAgICBQYW5lbCBzcGFjZXIgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgc3BhY2VyLnNldExheW91dChudWxsKTsKKyAgICAgICAgc3BhY2VyLnNldFNpemUoMTAwMCwgMSk7CisgICAgICAgIHJldHVybiBzcGFjZXI7CisgICAgfQorCisgICAgLy8gdG8gYXZvaWQgZ29vZnkgdXBkYXRlcyBhbmQgbWlzcGxhY2VkIGN1cnNvcnMKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VGV4dChUZXh0Q29tcG9uZW50IGFyZWEsIFN0cmluZyBuZXdUZXh0KSB7CisgICAgICAgIFN0cmluZyBmb28gPSBhcmVhLmdldFRleHQoKTsKKyAgICAgICAgaWYgKGZvby5lcXVhbHMobmV3VGV4dCkpIHJldHVybjsKKyAgICAgICAgYXJlYS5zZXRUZXh0KG5ld1RleHQpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0d28gbG9jYWxzLiBSZXR1cm4gdmFsdWUgaXMgbmVnYXRpdmUKKyAgICAgKiBpZiB0aGV5J3JlIGRpZmZlcmVudCwgYW5kIG1vcmUgcG9zaXRpdmUgdGhlIG1vcmUKKyAgICAgKiBmaWVsZHMgdGhhdCBtYXRjaC4KKyAgICAgKi8KKyAgICAgCisgICAgcHVibGljIHN0YXRpYyBpbnQgY29tcGFyZUxvY2FsZXMoTG9jYWxlIGwxLCBMb2NhbGUgbDIpCisgICAgeworICAgICAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgICAgIAorICAgICAgICBpZiAobDEuZ2V0TGFuZ3VhZ2UoKS5lcXVhbHMobDIuZ2V0TGFuZ3VhZ2UoKSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAxOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobDEuZ2V0Q291bnRyeSgpLmVxdWFscyhsMi5nZXRDb3VudHJ5KCkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDE7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGwxLmdldFZhcmlhbnQoKS5lcXVhbHMobDIuZ2V0VmFyaWFudCgpKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldCB0aGUgRzcgbG9jYWxlIGxpc3QgZm9yIGRlbW9zLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTG9jYWxlW10gZ2V0RzdMb2NhbGVzKCkgeworICAgICAgICByZXR1cm4gbG9jYWxlTGlzdDsKKyAgICB9CisgICAgcHJpdmF0ZSBzdGF0aWMgTG9jYWxlW10gbG9jYWxlTGlzdCA9IHsKKyAgICAgICAgbmV3IExvY2FsZSgiREEiLCAiREsiLCAiIiksCisgICAgICAgIG5ldyBMb2NhbGUoIkVOIiwgIlVTIiwgIiIpLAorICAgICAgICBuZXcgTG9jYWxlKCJFTiIsICJHQiIsICIiKSwKKyAgICAgICAgbmV3IExvY2FsZSgiRU4iLCAiQ0EiLCAiIiksCisgICAgICAgIG5ldyBMb2NhbGUoIkZSIiwgIkZSIiwgIiIpLAorICAgICAgICBuZXcgTG9jYWxlKCJGUiIsICJDQSIsICIiKSwKKyAgICAgICAgbmV3IExvY2FsZSgiREUiLCAiREUiLCAiIiksCisgICAgICAgIG5ldyBMb2NhbGUoIklUIiwgIklUIiwgIiIpLAorICAgIC8vbmV3IExvY2FsZSgiSkEiLCAiSlAiLCAiIiksCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9pbXBsL0R1bWJUZXh0Q29tcG9uZW50LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaW1wbC9EdW1iVGV4dENvbXBvbmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmYzQxODQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaW1wbC9EdW1iVGV4dENvbXBvbmVudC5qYXZhCkBAIC0wLDAgKzEsODA0IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaW1wbC9EdW1iVGV4dENvbXBvbmVudC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAzLzE5IDAwOjE3OjAxICQgCisgKiAkUmV2aXNpb246IDEuNiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8uaW1wbDsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS50ZXh0Lio7CitpbXBvcnQgamF2YS5hd3QuZGF0YXRyYW5zZmVyLio7CisKKy8vIExJVTogQ2hhbmdlZCBmcm9tIGZpbmFsIHRvIG5vbi1maW5hbAorcHVibGljIGNsYXNzIER1bWJUZXh0Q29tcG9uZW50IGV4dGVuZHMgQ2FudmFzCisgIGltcGxlbWVudHMgS2V5TGlzdGVuZXIsIE1vdXNlTGlzdGVuZXIsIE1vdXNlTW90aW9uTGlzdGVuZXIsIEZvY3VzTGlzdGVuZXIKKyAgeworICAgIHByaXZhdGUgdHJhbnNpZW50IHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0KKyAgICAgICJDb3B5cmlnaHQgXHUwMEE5IDE5OTgsIE1hcmsgRGF2aXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIjsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudHMgPSAiIjsKKyAgICBwcml2YXRlIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7CisgICAgcHJpdmF0ZSBpbnQgYWN0aXZlU3RhcnQgPSAtMTsKKyAgICBwcml2YXRlIGJvb2xlYW4gZWRpdGFibGUgPSB0cnVlOworCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgU2VsZWN0aW9uIHRlbXBTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgYm9vbGVhbiBmb2N1czsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBCcmVha0l0ZXJhdG9yIGxpbmVCcmVha2VyID0gQnJlYWtJdGVyYXRvci5nZXRMaW5lSW5zdGFuY2UoKTsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBCcmVha0l0ZXJhdG9yIHdvcmRCcmVha2VyID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoKTsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBCcmVha0l0ZXJhdG9yIGNoYXJCcmVha2VyID0gQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZSgpOworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCBsaW5lQXNjZW50OworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCBsaW5lSGVpZ2h0OworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCBsaW5lTGVhZGluZzsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgbGFzdEhlaWdodCA9IDEwOworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCBsYXN0V2lkdGggPSA1MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xJTkVTID0gMjAwOyAvLyBMSVU6IFVzZSBzeW1ib2xpYyBuYW1lCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50W10gbGluZVN0YXJ0cyA9IG5ldyBpbnRbTUFYX0xJTkVTXTsgLy8gTElVCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50IGxpbmVDb3VudCA9IDE7CisKKyAgICBwcml2YXRlIHRyYW5zaWVudCBib29sZWFuIHZhbGlkID0gZmFsc2U7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgRm9udE1ldHJpY3MgZm07CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgYm9vbGVhbiByZWRvTGluZXMgPSB0cnVlOworICAgIHByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gZG91YmxlQ2xpY2sgPSBmYWxzZTsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBUZXh0TGlzdGVuZXIgdGV4dExpc3RlbmVyOworICAgIHByaXZhdGUgdHJhbnNpZW50IEFjdGlvbkxpc3RlbmVyIHNlbGVjdGlvbkxpc3RlbmVyOworICAgIHByaXZhdGUgdHJhbnNpZW50IEltYWdlIGNhY2hlSW1hZ2U7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgRGltZW5zaW9uIG15U2l6ZTsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgeEluc2V0ID0gNTsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgeUluc2V0ID0gNTsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBQb2ludCBzdGFydFBvaW50ID0gbmV3IFBvaW50KCk7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgUG9pbnQgZW5kUG9pbnQgPSBuZXcgUG9pbnQoKTsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBQb2ludCBjYXJldFBvaW50ID0gbmV3IFBvaW50KCk7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgUG9pbnQgYWN0aXZlUG9pbnQgPSBuZXcgUG9pbnQoKTsKKyAgICAKKyAgICAvL3ByaXZhdGUgdHJhbnNpZW50IHN0YXRpYyBTdHJpbmcgY2xpcEJvYXJkOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBDUiA9ICdcMDE1JzsgLy8gTElVCisKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgcHVibGljIER1bWJUZXh0Q29tcG9uZW50KCkgeworICAgICAgICBhZGRNb3VzZUxpc3RlbmVyKHRoaXMpOworICAgICAgICBhZGRNb3VzZU1vdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICBhZGRLZXlMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgYWRkRm9jdXNMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgc2V0Q3Vyc29yKEN1cnNvci5nZXRQcmVkZWZpbmVkQ3Vyc29yKEN1cnNvci5URVhUX0NVUlNPUikpOworCisgICAgfQorCisvLyA9PT09PT09PT09PT09PT09IEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PQorCisgICAgcHVibGljIGJvb2xlYW4gaXNGb2N1c1RyYXZlcnNhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisJcHVibGljIHZvaWQgYWRkQWN0aW9uTGlzdGVuZXIoQWN0aW9uTGlzdGVuZXIgbCkgeworICAgICAgICBzZWxlY3Rpb25MaXN0ZW5lciA9IEFXVEV2ZW50TXVsdGljYXN0ZXIuYWRkKHNlbGVjdGlvbkxpc3RlbmVyLCBsKTsKKwl9CisKKwlwdWJsaWMgdm9pZCByZW1vdmVBY3Rpb25MaXN0ZW5lcihBY3Rpb25MaXN0ZW5lciBsKSB7CisgICAgICAgIHNlbGVjdGlvbkxpc3RlbmVyID0gQVdURXZlbnRNdWx0aWNhc3Rlci5yZW1vdmUoc2VsZWN0aW9uTGlzdGVuZXIsIGwpOworCX0KKworCXB1YmxpYyB2b2lkIGFkZFRleHRMaXN0ZW5lcihUZXh0TGlzdGVuZXIgbCkgeworICAgICAgICB0ZXh0TGlzdGVuZXIgPSBBV1RFdmVudE11bHRpY2FzdGVyLmFkZCh0ZXh0TGlzdGVuZXIsIGwpOworCX0KKworCXB1YmxpYyB2b2lkIHJlbW92ZVRleHRMaXN0ZW5lcihUZXh0TGlzdGVuZXIgbCkgeworICAgICAgICB0ZXh0TGlzdGVuZXIgPSBBV1RFdmVudE11bHRpY2FzdGVyLnJlbW92ZSh0ZXh0TGlzdGVuZXIsIGwpOworCX0KKworICAgIHByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gcHJlc3NlZDsKKworCXB1YmxpYyB2b2lkIG1vdXNlUHJlc3NlZChNb3VzZUV2ZW50IGUpIHsKKwkgICAgaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oIm1vdXNlUHJlc3NlZCIpOworCSAgICBpZiAocHJlc3NlZCkgeworCSAgICAgICAgc2VsZWN0KGUsZmFsc2UpOworCSAgICB9IGVsc2UgeworICAgICAgICAgICAgZG91YmxlQ2xpY2sgPSBlLmdldENsaWNrQ291bnQoKSA+IDE7CisgICAgICAgICAgICByZXF1ZXN0Rm9jdXMoKTsKKyAgICAgICAgICAgIHNlbGVjdChlLCB0cnVlKTsKKyAgICAJICAgIHByZXNzZWQgPSB0cnVlOworCSAgICB9CisJfQorCisJcHVibGljIHZvaWQgbW91c2VEcmFnZ2VkKE1vdXNlRXZlbnQgZSkgeworCSAgICBpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigibW91c2VEcmFnZ2VkIik7CisJICAgIHNlbGVjdChlLCBmYWxzZSk7CisJfQorCisJcHVibGljIHZvaWQgbW91c2VSZWxlYXNlZChNb3VzZUV2ZW50IGUpIHsKKwkgICAgaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oIm1vdXNlUmVsZWFzZWQiKTsKKwkgICAgcHJlc3NlZCA9IGZhbHNlOworCX0KKworCXB1YmxpYyB2b2lkIG1vdXNlRW50ZXJlZChNb3VzZUV2ZW50IGUpIHsKKwkgICAgLy9pZiAocHJlc3NlZCkgc2VsZWN0KGUsIGZhbHNlKTsKKwl9CisKKwlwdWJsaWMgdm9pZCBtb3VzZUV4aXRlZChNb3VzZUV2ZW50IGUpeworCSAgICAvL2lmIChwcmVzc2VkKSBzZWxlY3QoZSwgZmFsc2UpOworCX0KKworCXB1YmxpYyB2b2lkIG1vdXNlQ2xpY2tlZChNb3VzZUV2ZW50IGUpIHt9CisJcHVibGljIHZvaWQgbW91c2VNb3ZlZChNb3VzZUV2ZW50IGUpIHt9CisKKworICAgIHB1YmxpYyB2b2lkIGZvY3VzR2FpbmVkKEZvY3VzRXZlbnQgZSkgeworCSAgICBpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigiZm9jdXNHYWluZWQiKTsKKwkgICAgZm9jdXMgPSB0cnVlOworCSAgICB2YWxpZCA9IGZhbHNlOworCSAgICByZXBhaW50KDE2KTsKKwl9CisJcHVibGljIHZvaWQgZm9jdXNMb3N0KEZvY3VzRXZlbnQgZSkgeworCSAgICBpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigiZm9jdXNMb3N0Iik7CisJICAgIGZvY3VzID0gZmFsc2U7CisJICAgIHZhbGlkID0gZmFsc2U7CisJICAgIHJlcGFpbnQoMTYpOworCX0KKworICAgIHB1YmxpYyB2b2lkIHNlbGVjdChNb3VzZUV2ZW50IGUsIGJvb2xlYW4gZmlyc3QpIHsKKyAgICAgICAgc2V0S2V5U3RhcnQoLTEpOworCSAgICBwb2ludDJPZmZzZXQoZS5nZXRQb2ludCgpLCB0ZW1wU2VsZWN0aW9uKTsKKyAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICBpZiAoKGUuZ2V0TW9kaWZpZXJzKCkgJiBJbnB1dEV2ZW50LlNISUZUX01BU0spID09IDApIHsKKyAgICAgICAgICAgICAgICB0ZW1wU2VsZWN0aW9uLmFuY2hvciA9IHRlbXBTZWxlY3Rpb24uY2FyZXQ7CisgICAgICAgICAgICB9CisJICAgIH0KKwkgICAgLy8gZml4IHdvcmRzCisJICAgIGlmIChkb3VibGVDbGljaykgeworCSAgICAgICAgdGVtcFNlbGVjdGlvbi5leHBhbmQod29yZEJyZWFrZXIpOworCSAgICB9CisJICAgIHNlbGVjdCh0ZW1wU2VsZWN0aW9uKTsKKyAgICB9CisgICAgCisJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKSB7CisgICAgICAgIGludCBjb2RlID0gZS5nZXRLZXlDb2RlKCk7CisgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJrZXlQcmVzc2VkICIKKyAgICAgICAgICArIGhleCgoY2hhciljb2RlKSArICIsICIgKyBoZXgoKGNoYXIpZS5nZXRNb2RpZmllcnMoKSkpOworICAgICAgICBpbnQgc3RhcnQgPSBzZWxlY3Rpb24uZ2V0U3RhcnQoKTsKKyAgICAgICAgaW50IGVuZCA9IHNlbGVjdGlvbi5nZXRFbmQoKTsKKyAgICAgICAgYm9vbGVhbiBzaGlmdCA9IChlLmdldE1vZGlmaWVycygpICYgS2V5RXZlbnQuU0hJRlRfTUFTSykgIT0gMDsKKyAgICAgICAgYm9vbGVhbiBjdHJsID0gKGUuZ2V0TW9kaWZpZXJzKCkgJiBLZXlFdmVudC5DVFJMX01BU0spICE9IDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICBjYXNlIEtleUV2ZW50LlZLX1E6CisgICAgICAgICAgICBpZiAoIWN0cmwgfHwgIWVkaXRhYmxlKSBicmVhazsKKyAgICAgICAgICAgIHNldEtleVN0YXJ0KC0xKTsKKyAgICAgICAgICAgIGZpeEhleCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfVjoKKyAgICAgICAgICAgIGlmICghY3RybCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoIWVkaXRhYmxlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5nZXRUb29sa2l0KCkuYmVlcCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXN0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfQzoKKyAgICAgICAgICAgIGlmICghY3RybCkgYnJlYWs7CisgICAgICAgICAgICBjb3B5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlFdmVudC5WS19YOgorICAgICAgICAgICAgaWYgKCFjdHJsKSBicmVhazsKKyAgICAgICAgICAgIGlmICghZWRpdGFibGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmdldFRvb2xraXQoKS5iZWVwKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvcHkoKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRUZXh0KCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleUV2ZW50LlZLX0E6CisgICAgICAgICAgICBpZiAoIWN0cmwpIGJyZWFrOworICAgICAgICAgICAgc2V0S2V5U3RhcnQoLTEpOworICAgICAgICAgICAgc2VsZWN0KEludGVnZXIuTUFYX1ZBTFVFLCAwLCBmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlFdmVudC5WS19SSUdIVDoKKyAgICAgICAgICAgIHNldEtleVN0YXJ0KC0xKTsKKyAgICAgICAgICAgIHRlbXBTZWxlY3Rpb24uc2V0KHNlbGVjdGlvbik7CisgICAgICAgICAgICB0ZW1wU2VsZWN0aW9uLm5leHRCb3VuZChjdHJsID8gd29yZEJyZWFrZXIgOiBjaGFyQnJlYWtlciwgKzEsIHNoaWZ0KTsKKyAgICAgICAgICAgIHNlbGVjdCh0ZW1wU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleUV2ZW50LlZLX0xFRlQ6CisgICAgICAgICAgICBzZXRLZXlTdGFydCgtMSk7CisgICAgICAgICAgICB0ZW1wU2VsZWN0aW9uLnNldChzZWxlY3Rpb24pOworICAgICAgICAgICAgdGVtcFNlbGVjdGlvbi5uZXh0Qm91bmQoY3RybCA/IHdvcmRCcmVha2VyIDogY2hhckJyZWFrZXIsIC0xLCBzaGlmdCk7CisgICAgICAgICAgICBzZWxlY3QodGVtcFNlbGVjdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlFdmVudC5WS19VUDogLy8gTElVOiBBZGQgc3VwcG9ydCBmb3IgdXAgYXJyb3cKKyAgICAgICAgICAgIHNldEtleVN0YXJ0KC0xKTsKKyAgICAgICAgICAgIHRlbXBTZWxlY3Rpb24uc2V0KHNlbGVjdGlvbik7CisgICAgICAgICAgICB0ZW1wU2VsZWN0aW9uLmNhcmV0ID0gbGluZURlbHRhKHRlbXBTZWxlY3Rpb24uY2FyZXQsIC0xKTsKKyAgICAgICAgICAgIGlmICghc2hpZnQpIHsKKyAgICAgICAgICAgICAgICB0ZW1wU2VsZWN0aW9uLmFuY2hvciA9IHRlbXBTZWxlY3Rpb24uY2FyZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxlY3QodGVtcFNlbGVjdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlFdmVudC5WS19ET1dOOiAvLyBMSVU6IEFkZCBzdXBwb3J0IGZvciBkb3duIGFycm93CisgICAgICAgICAgICBzZXRLZXlTdGFydCgtMSk7CisgICAgICAgICAgICB0ZW1wU2VsZWN0aW9uLnNldChzZWxlY3Rpb24pOworICAgICAgICAgICAgdGVtcFNlbGVjdGlvbi5jYXJldCA9IGxpbmVEZWx0YSh0ZW1wU2VsZWN0aW9uLmNhcmV0LCArMSk7CisgICAgICAgICAgICBpZiAoIXNoaWZ0KSB7CisgICAgICAgICAgICAgICAgdGVtcFNlbGVjdGlvbi5hbmNob3IgPSB0ZW1wU2VsZWN0aW9uLmNhcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VsZWN0KHRlbXBTZWxlY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfREVMRVRFOiAvLyBMSVU6IEFkZCBkZWxldGUga2V5IHN1cHBvcnQKKyAgICAgICAgICAgIGlmICghZWRpdGFibGUpIGJyZWFrOworICAgICAgICAgICAgc2V0S2V5U3RhcnQoLTEpOworICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCgpID09IDApIGJyZWFrOworICAgICAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb24uZ2V0U3RhcnQoKTsKKyAgICAgICAgICAgIGVuZCA9IHNlbGVjdGlvbi5nZXRFbmQoKTsKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICArK2VuZDsKKyAgICAgICAgICAgICAgICBpZiAoZW5kID4gY29udGVudHMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2V0VG9vbGtpdCgpLmJlZXAoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGxhY2VSYW5nZSgiIiwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29weSgpIHsKKyAgICAgICAgQ2xpcGJvYXJkIGNiID0gdGhpcy5nZXRUb29sa2l0KCkuZ2V0U3lzdGVtQ2xpcGJvYXJkKCk7CisgICAgICAgIFN0cmluZ1NlbGVjdGlvbiBzcyA9IG5ldyBTdHJpbmdTZWxlY3Rpb24oCisgICAgICAgICAgICBjb250ZW50cy5zdWJzdHJpbmcoc2VsZWN0aW9uLmdldFN0YXJ0KCksIHNlbGVjdGlvbi5nZXRFbmQoKSkpOworICAgICAgICBjYi5zZXRDb250ZW50cyhzcywgc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHBhc3RlICgpIHsKKyAgICAgICAgQ2xpcGJvYXJkIGNiID0gdGhpcy5nZXRUb29sa2l0KCkuZ2V0U3lzdGVtQ2xpcGJvYXJkKCk7CisgICAgICAgIFRyYW5zZmVyYWJsZSB0ID0gY2IuZ2V0Q29udGVudHModGhpcyk7CisgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0VG9vbGtpdCgpLmJlZXAoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHRlbXAgPSAoU3RyaW5nKSB0LmdldFRyYW5zZmVyRGF0YShEYXRhRmxhdm9yLnN0cmluZ0ZsYXZvcik7CisgICAgICAgICAgICBpbnNlcnRUZXh0KHRlbXApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhpcy5nZXRUb29sa2l0KCkuYmVlcCgpOworICAgICAgICB9ICAgICAgICAgICAgCisgICAgfQorCisgICAgLyoqCisgICAgICogTElVOiBHaXZlbiBhbiBvZmZzZXQgaW50byBjb250ZW50cywgbW92ZXMgdXAgb3IgZG93biBieSBsaW5lcywKKyAgICAgKiBhY2NvcmRpbmcgdG8gbGluZVN0YXJ0c1tdLgorICAgICAqIEBwYXJhbSBvZmYgdGhlIG9mZnNldCBpbnRvIGNvbnRlbnRzCisgICAgICogQHBhcmFtIGRlbHRhIGhvdyBtYW55IGxpbmVzIHRvIG1vdmUgdXAgKDwgMCkgb3IgZG93biAoPiAwKQorICAgICAqIEByZXR1cm4gdGhlIG5ldyBvZmZzZXQgaW50byBjb250ZW50cworICAgICAqLworICAgIHByaXZhdGUgaW50IGxpbmVEZWx0YShpbnQgb2ZmLCBpbnQgZGVsdGEpIHsKKyAgICAgICAgaW50IGxpbmUgPSBmaW5kTGluZShvZmYsIGZhbHNlKTsKKyAgICAgICAgaW50IHBvc0luTGluZSA9IG9mZiAtIGxpbmVTdGFydHNbbGluZV07CisgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigib2ZmPSIgKyBvZmYgKyAiIGF0ICIgKyBsaW5lICsgIjoiICsgcG9zSW5MaW5lKTsKKyAgICAgICAgbGluZSArPSBkZWx0YTsKKyAgICAgICAgaWYgKGxpbmUgPCAwKSB7CisgICAgICAgICAgICBsaW5lID0gcG9zSW5MaW5lID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChsaW5lID49IGxpbmVDb3VudCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRzLmxlbmd0aCgpOworICAgICAgICB9CisgICAgICAgIG9mZiA9IGxpbmVTdGFydHNbbGluZV0gKyBwb3NJbkxpbmU7CisgICAgICAgIGlmIChvZmYgPj0gbGluZVN0YXJ0c1tsaW5lKzFdKSB7CisgICAgICAgICAgICBvZmYgPSBsaW5lU3RhcnRzW2xpbmUrMV0gLSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvZmY7CisgICAgfQorICAgICAgCisJcHVibGljIHZvaWQga2V5UmVsZWFzZWQoS2V5RXZlbnQgZSkgeworICAgICAgICBpbnQgY29kZSA9IGUuZ2V0S2V5Q29kZSgpOworICAgICAgICBpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigia2V5UmVsZWFzZWQgIgorICAgICAgICAgICsgaGV4KChjaGFyKWNvZGUpICsgIiwgIiArIGhleCgoY2hhcillLmdldE1vZGlmaWVycygpKSk7CisgICAgfQorCisJcHVibGljIHZvaWQga2V5VHlwZWQoS2V5RXZlbnQgZSkgeworICAgICAgICBjaGFyIGNoID0gZS5nZXRLZXlDaGFyKCk7CisgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJrZXlUeXBlZCAiCisgICAgICAgICAgKyBoZXgoKGNoYXIpY2gpICsgIiwgIiArIGhleCgoY2hhcillLmdldE1vZGlmaWVycygpKSk7CisgICAgICAgIGlmICgoZS5nZXRNb2RpZmllcnMoKSAmIEtleUV2ZW50LkNUUkxfTUFTSykgIT0gMCkgcmV0dXJuOworICAgICAgICBpbnQgc3RhcnQsIGVuZDsKKyAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICBjYXNlIEtleUV2ZW50LkNIQVJfVU5ERUZJTkVEOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfQkFDS19TUEFDRToKKyAgICAgICAgICAgIC8vc2V0S2V5U3RhcnQoLTEpOworICAgICAgICAgICAgaWYgKCFlZGl0YWJsZSkgYnJlYWs7CisgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoKCkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBzdGFydCA9IHNlbGVjdGlvbi5nZXRTdGFydCgpOworICAgICAgICAgICAgZW5kID0gc2VsZWN0aW9uLmdldEVuZCgpOworICAgICAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgICAgICAgICAgIC0tc3RhcnQ7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBnZXRUb29sa2l0KCkuYmVlcCgpOyAvLyBMSVU6IEFkZCBhdWRpbyBmZWVkYmFjayBvZiBOT1AKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGxhY2VSYW5nZSgiIiwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBicmVhazsgICAgICAgIAorICAgICAgICBjYXNlIEtleUV2ZW50LlZLX0RFTEVURToKKyAgICAgICAgICAgIC8vc2V0S2V5U3RhcnQoLTEpOworICAgICAgICAgICAgaWYgKCFlZGl0YWJsZSkgYnJlYWs7CisgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoKCkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBzdGFydCA9IHNlbGVjdGlvbi5nZXRTdGFydCgpOworICAgICAgICAgICAgZW5kID0gc2VsZWN0aW9uLmdldEVuZCgpOworICAgICAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgICAgICAgICAgICsrZW5kOworICAgICAgICAgICAgICAgIGlmIChlbmQgPiBjb250ZW50cy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBnZXRUb29sa2l0KCkuYmVlcCgpOyAvLyBMSVU6IEFkZCBhdWRpbyBmZWVkYmFjayBvZiBOT1AKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGxhY2VSYW5nZSgiIiwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICghZWRpdGFibGUpIGJyZWFrOworICAgICAgICAgICAgLy8gTElVOiBEaXNwYXRjaCB0byBzdWJjbGFzcyBBUEkKKyAgICAgICAgICAgIGhhbmRsZUtleVR5cGVkKGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBMSVU6IFN1YmNsYXNzIEFQSSBmb3IgaGFuZGxpbmcgb2Yga2V5IHR5cGluZworICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUtleVR5cGVkKEtleUV2ZW50IGUpIHsKKyAgICAgICAgaW5zZXJ0VGV4dChTdHJpbmcudmFsdWVPZihlLmdldEtleUNoYXIoKSkpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRLZXlTdGFydChpbnQga2V5U3RhcnQpIHsKKyAgICAgICAgaWYgKGFjdGl2ZVN0YXJ0ICE9IGtleVN0YXJ0KSB7CisgICAgICAgICAgICBhY3RpdmVTdGFydCA9IGtleVN0YXJ0OworICAgICAgICAgICAgcmVwYWludCgxMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVLZXlTdGFydCgpIHsKKyAgICAJaWYgKGFjdGl2ZVN0YXJ0ID4gc2VsZWN0aW9uLmdldFN0YXJ0KCkpIHsKKyAgICAgICAgICAgIGFjdGl2ZVN0YXJ0ID0gc2VsZWN0aW9uLmdldFN0YXJ0KCk7CisgICAgICAgICAgICByZXBhaW50KDEwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgaW50IGdldEtleVN0YXJ0KCkgeworICAgICAgICByZXR1cm4gYWN0aXZlU3RhcnQ7CisgICAgfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT0gQ29udHJvbCA9PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0RWRpdGFibGUoYm9vbGVhbiBiKSB7CisgICAgICAgIGVkaXRhYmxlID0gYjsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VkaXRhYmxlKCkgeworICAgICAgICByZXR1cm4gZWRpdGFibGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2VsZWN0KFNlbGVjdGlvbiBuZXdTZWxlY3Rpb24pIHsKKyAgICAgICAgbmV3U2VsZWN0aW9uLnBpbihjb250ZW50cyk7CisgICAgICAgIGlmICghc2VsZWN0aW9uLmVxdWFscyhuZXdTZWxlY3Rpb24pKSB7CisgICAgICAgICAgICBzZWxlY3Rpb24uc2V0KG5ld1NlbGVjdGlvbik7CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlbGVjdGlvbkxpc3RlbmVyLmFjdGlvblBlcmZvcm1lZCgKKyAgICAgICAgICAgICAgICAgIG5ldyBBY3Rpb25FdmVudCh0aGlzLCBBY3Rpb25FdmVudC5BQ1RJT05fUEVSRk9STUVELAorICAgICAgICAgICAgICAgICAgICAiU2VsZWN0aW9uIENoYW5nZWQiLCAwKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBhaW50KDEwKTsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZWxlY3QoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgICAgIHNlbGVjdChzdGFydCwgZW5kLCBmYWxzZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2VsZWN0KGludCBzdGFydCwgaW50IGVuZCwgYm9vbGVhbiBjbGlja0FmdGVyKSB7CisgICAgICAgIHRlbXBTZWxlY3Rpb24uc2V0KHN0YXJ0LCBlbmQsIGNsaWNrQWZ0ZXIpOworICAgICAgICBzZWxlY3QodGVtcFNlbGVjdGlvbik7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRTZWxlY3Rpb25TdGFydCgpIHsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5nZXRTdGFydCgpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0U2VsZWN0aW9uRW5kKCkgeworICAgICAgICByZXR1cm4gc2VsZWN0aW9uLmdldEVuZCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEJvdW5kcyhpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkgeworICAgICAgICBzdXBlci5zZXRCb3VuZHMoeCx5LHcsaCk7CisgICAgICAgIHJlZG9MaW5lcyA9IHRydWU7CisgICAgfQorCisgICAgcHVibGljIERpbWVuc2lvbiBnZXRQcmVmZXJyZWRTaXplKCkgeworICAgICAgICByZXR1cm4gbmV3IERpbWVuc2lvbihsYXN0V2lkdGgsbGFzdEhlaWdodCk7CisgICAgfQorCisgICAgcHVibGljIERpbWVuc2lvbiBnZXRNYXhpbXVtU2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24obGFzdFdpZHRoLGxhc3RIZWlnaHQpOworICAgIH0KKworICAgIHB1YmxpYyBEaW1lbnNpb24gZ2V0TWluaW11bVNpemUoKSB7CisgICAgICAgIHJldHVybiBuZXcgRGltZW5zaW9uKGxhc3RIZWlnaHQsbGFzdEhlaWdodCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCkgeworICAgICAgICBzZXRUZXh0Mih0ZXh0KTsKKyAgICAgICAgc2VsZWN0KHRlbXBTZWxlY3Rpb24uc2V0KHNlbGVjdGlvbikucGluKGNvbnRlbnRzKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VGV4dDIoU3RyaW5nIHRleHQpIHsKKyAgICAgICAgY29udGVudHMgPSB0ZXh0OworICAgICAgICBjaGFyQnJlYWtlci5zZXRUZXh0KHRleHQpOworICAgICAgICB3b3JkQnJlYWtlci5zZXRUZXh0KHRleHQpOworICAgICAgICBsaW5lQnJlYWtlci5zZXRUZXh0KHRleHQpOworICAgICAgICByZWRvTGluZXMgPSB0cnVlOworICAgICAgICBpZiAodGV4dExpc3RlbmVyICE9IG51bGwpCisgICAgICAgICAgICB0ZXh0TGlzdGVuZXIudGV4dFZhbHVlQ2hhbmdlZCgKKyAgICAgICAgICAgICAgbmV3IFRleHRFdmVudCh0aGlzLCBUZXh0RXZlbnQuVEVYVF9WQUxVRV9DSEFOR0VEKSk7CisgICAgICAgIHJlcGFpbnQoMTYpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGluc2VydFRleHQoU3RyaW5nIHRleHQpIHsKKyAgICAgICAgaWYgKGFjdGl2ZVN0YXJ0ID09IC0xKSBhY3RpdmVTdGFydCA9IHNlbGVjdGlvbi5nZXRTdGFydCgpOworICAgICAgICByZXBsYWNlUmFuZ2UodGV4dCwgc2VsZWN0aW9uLmdldFN0YXJ0KCksIHNlbGVjdGlvbi5nZXRFbmQoKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcmVwbGFjZVJhbmdlKFN0cmluZyBzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKKyAgICAgICAgc2V0VGV4dDIoY29udGVudHMuc3Vic3RyaW5nKDAsc3RhcnQpICsgcworICAgICAgICAgICsgY29udGVudHMuc3Vic3RyaW5nKGVuZCkpOworICAgICAgICBzZWxlY3QodGVtcFNlbGVjdGlvbi5zZXQoc2VsZWN0aW9uKS4KKyAgICAgICAgICBmaXhBZnRlclJlcGxhY2Uoc3RhcnQsIGVuZCwgcy5sZW5ndGgoKSkpOworICAgICAgICB2YWxpZGF0ZUtleVN0YXJ0KCk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworICAgICAgICByZXR1cm4gY29udGVudHM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Rm9udChGb250IGZvbnQpIHsKKyAgICAgICAgc3VwZXIuc2V0Rm9udChmb250KTsKKyAgICAgICAgcmVkb0xpbmVzID0gdHJ1ZTsKKyAgICAgICAgcmVwYWludCgxNik7CisgICAgfQorCisgICAgLy8gPT09PT09PT09PT09PT09PT09IEdyYXBoaWNzID09PT09PT09PT09PT09PT09PT09PT0KKworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZShHcmFwaGljcyBnKSB7CisgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJ1cGRhdGUiKTsKKyAgICAgICAgcGFpbnQoZyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZykgeworICAgICAgICBteVNpemUgPSBnZXRTaXplKCk7CisgICAgICAgIGlmIChjYWNoZUltYWdlID09IG51bGwKKyAgICAgICAgICB8fCBjYWNoZUltYWdlLmdldEhlaWdodCh0aGlzKSAhPSBteVNpemUuaGVpZ2h0CisgICAgICAgICAgfHwgY2FjaGVJbWFnZS5nZXRXaWR0aCh0aGlzKSAhPSBteVNpemUud2lkdGgpIHsKKyAgICAgICAgICAgIGNhY2hlSW1hZ2UgPSBjcmVhdGVJbWFnZShteVNpemUud2lkdGgsIG15U2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXZhbGlkIHx8IHJlZG9MaW5lcykgeworICAgICAgICAgICAgaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oInBhaW50aW5nIik7CisgICAgICAgICAgICBwYWludDIoY2FjaGVJbWFnZS5nZXRHcmFwaGljcygpKTsKKyAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvL2dldFRvb2xraXQoKS5zeW5jKCk7CisgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJjb3B5aW5nIik7CisgICAgICAgIGcuZHJhd0ltYWdlKGNhY2hlSW1hZ2UsCisgICAgICAgICAgMCwgMCwgbXlTaXplLndpZHRoLCBteVNpemUuaGVpZ2h0LAorICAgICAgICAgIDAsIDAsIG15U2l6ZS53aWR0aCwgbXlTaXplLmhlaWdodCwKKyAgICAgICAgICB0aGlzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBwYWludDIoR3JhcGhpY3MgZykgeworICAgICAgICBnLmNsZWFyUmVjdCgwLCAwLCBteVNpemUud2lkdGgsIG15U2l6ZS5oZWlnaHQpOworICAgICAgICBpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigicHJpbnQiKTsKKyAgICAgICAgaWYgKGZvY3VzKSBnLnNldENvbG9yKENvbG9yLmJsYWNrKTsKKyAgICAgICAgZWxzZSBnLnNldENvbG9yKENvbG9yLmdyYXkpOworICAgICAgICBnLmRyYXdSZWN0KDAsMCxteVNpemUud2lkdGgtMSxteVNpemUuaGVpZ2h0LTEpOworICAgICAgICBnLnNldENsaXAoMSwxLAorICAgICAgICAgIG15U2l6ZS53aWR0aC0yLG15U2l6ZS5oZWlnaHQtMik7CisgICAgICAgIGcuc2V0Q29sb3IoQ29sb3IuYmxhY2spOworICAgICAgICBnLnNldEZvbnQoZ2V0Rm9udCgpKTsKKyAgICAgICAgZm0gPSBnLmdldEZvbnRNZXRyaWNzKCk7CisgICAgICAgIGxpbmVBc2NlbnQgPSBmbS5nZXRBc2NlbnQoKTsKKyAgICAgICAgbGluZUxlYWRpbmcgPSBmbS5nZXRMZWFkaW5nKCk7CisgICAgICAgIGxpbmVIZWlnaHQgPSBsaW5lQXNjZW50ICsgZm0uZ2V0RGVzY2VudCgpICsgbGluZUxlYWRpbmc7CisgICAgICAgIGludCB5ID0geUluc2V0ICsgbGluZUFzY2VudDsKKyAgICAgICAgU3RyaW5nIGxhc3RTdWJzdHJpbmcgPSAiIjsKKyAgICAgICAgaWYgKHJlZG9MaW5lcykgZml4TGluZVN0YXJ0cyhteVNpemUud2lkdGgteEluc2V0LXhJbnNldCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGluZUNvdW50OyB5ICs9IGxpbmVIZWlnaHQsICsraSkgeworICAgICAgICAgICAgLy8gTElVOiBEb24ndCBkaXNwbGF5IHRlcm1pbmF0aW5nIF5NIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGludCBsaW0gPSBsaW5lU3RhcnRzW2krMV07CisgICAgICAgICAgICBpZiAobGltID4gMCAmJiBjb250ZW50cy5sZW5ndGgoKSA+IDAgJiYKKyAgICAgICAgICAgICAgICBjb250ZW50cy5jaGFyQXQobGltLTEpID09IENSKSAtLWxpbTsKKyAgICAgICAgICAgIGxhc3RTdWJzdHJpbmcgPSBjb250ZW50cy5zdWJzdHJpbmcobGluZVN0YXJ0c1tpXSxsaW0pOworICAgICAgICAgICAgZy5kcmF3U3RyaW5nKGxhc3RTdWJzdHJpbmcsIHhJbnNldCwgeSk7CisgICAgICAgIH0KKyAgICAgICAgZHJhd1NlbGVjdGlvbihnLCBsYXN0U3Vic3RyaW5nKTsKKyAgICAgICAgbGFzdEhlaWdodCA9IHkgKyB5SW5zZXQgLSBsaW5lSGVpZ2h0ICsgeUluc2V0OworICAgICAgICBsYXN0V2lkdGggPSBteVNpemUud2lkdGgteEluc2V0LXhJbnNldDsKKyAgICB9CisKKyAgICB2b2lkIHBhaW50UmVjdChHcmFwaGljcyBnLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkgeworICAgICAgICBpZiAoZm9jdXMpIHsKKyAgICAgICAgICAgIGcuZmlsbFJlY3QoeCwgeSwgdywgaCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnLmRyYXdSZWN0KHgsIHksIHctMSwgaC0xKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGRyYXdTZWxlY3Rpb24oR3JhcGhpY3MgZywgU3RyaW5nIGxhc3RTdWJzdHJpbmcpIHsKKyAgICAgICAgZy5zZXRYT1JNb2RlKENvbG9yLmJsYWNrKTsKKyAgICAgICAgaWYgKGFjdGl2ZVN0YXJ0ICE9IC0xKSB7CisgICAgICAgICAgICBvZmZzZXQyUG9pbnQoYWN0aXZlU3RhcnQsIGZhbHNlLCBhY3RpdmVQb2ludCk7CisgICAgICAgICAgICBnLnNldENvbG9yKENvbG9yLm1hZ2VudGEpOworICAgICAgICAgICAgaW50IGxpbmUgPSBhY3RpdmVQb2ludC54IC0gMTsKKyAgICAgICAgICAgIGcuZmlsbFJlY3QobGluZSwgYWN0aXZlUG9pbnQueSwgMSwgbGluZUhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKKyAgICAgICAgICAgIG9mZnNldDJQb2ludChzZWxlY3Rpb24uY2FyZXQsIHNlbGVjdGlvbi5jbGlja0FmdGVyLCBjYXJldFBvaW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmb2N1cykgZy5zZXRDb2xvcihDb2xvci5ibHVlKTsKKyAgICAgICAgICAgIGVsc2UgZy5zZXRDb2xvcihDb2xvci55ZWxsb3cpOworICAgICAgICAgICAgb2Zmc2V0MlBvaW50KHNlbGVjdGlvbi5nZXRTdGFydCgpLCB0cnVlLCBzdGFydFBvaW50KTsKKyAgICAgICAgICAgIG9mZnNldDJQb2ludChzZWxlY3Rpb24uZ2V0RW5kKCksIGZhbHNlLCBlbmRQb2ludCk7CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmdldFN0YXJ0KCkgPT0gc2VsZWN0aW9uLmNhcmV0KQorICAgICAgICAgICAgICAgIGNhcmV0UG9pbnQuc2V0TG9jYXRpb24oc3RhcnRQb2ludCk7CisgICAgICAgICAgICBlbHNlIGNhcmV0UG9pbnQuc2V0TG9jYXRpb24oZW5kUG9pbnQpOworICAgICAgICAgICAgaWYgKHN0YXJ0UG9pbnQueSA9PSBlbmRQb2ludC55KSB7CisgICAgICAgICAgICAgICAgcGFpbnRSZWN0KGcsIHN0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55LAorICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMSxlbmRQb2ludC54LXN0YXJ0UG9pbnQueCksIGxpbmVIZWlnaHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYWludFJlY3QoZywgc3RhcnRQb2ludC54LCBzdGFydFBvaW50LnksCisgICAgICAgICAgICAgICAgICAobXlTaXplLndpZHRoLXhJbnNldCktc3RhcnRQb2ludC54LCBsaW5lSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb2ludC55ICsgbGluZUhlaWdodCA8IGVuZFBvaW50LnkpCisgICAgICAgICAgICAgICAgICBwYWludFJlY3QoZywgeEluc2V0LCBzdGFydFBvaW50LnkgKyBsaW5lSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgKG15U2l6ZS53aWR0aC14SW5zZXQpLXhJbnNldCwgZW5kUG9pbnQueSAtIHN0YXJ0UG9pbnQueSAtIGxpbmVIZWlnaHQpOworICAgICAgICAgICAgICAgIHBhaW50UmVjdChnLCB4SW5zZXQsIGVuZFBvaW50LnksIGVuZFBvaW50LngteEluc2V0LCBsaW5lSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZm9jdXMgfHwgc2VsZWN0aW9uLmlzQ2FyZXQoKSkgeworICAgICAgICAgICAgaWYgKGZvY3VzKSBnLnNldENvbG9yKENvbG9yLmdyZWVuKTsKKyAgICAgICAgICAgIGVsc2UgZy5zZXRDb2xvcihDb2xvci5yZWQpOworICAgICAgICAgICAgaW50IGxpbmUgPSBjYXJldFBvaW50LnggLSAoc2VsZWN0aW9uLmNsaWNrQWZ0ZXIgPyAwIDogMSk7CisgICAgICAgICAgICBnLmZpbGxSZWN0KGxpbmUsIGNhcmV0UG9pbnQueSwgMSwgbGluZUhlaWdodCk7CisgICAgICAgICAgICBpbnQgdyA9IGxpbmVIZWlnaHQvMTIgKyAxOworICAgICAgICAgICAgaW50IGJyYWNlcyA9IGxpbmUgLSAoc2VsZWN0aW9uLmNsaWNrQWZ0ZXIgPyAtMSA6IHcpOworICAgICAgICAgICAgZy5maWxsUmVjdChicmFjZXMsIGNhcmV0UG9pbnQueSwgdywgMSk7CisgICAgICAgICAgICBnLmZpbGxSZWN0KGJyYWNlcywgY2FyZXRQb2ludC55ICsgbGluZUhlaWdodCAtIDEsIHcsIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFBvaW50IG9mZnNldDJQb2ludChpbnQgb2ZmLCBib29sZWFuIHN0YXJ0LCBQb2ludCBwKSB7CisgICAgICAgIGludCBsaW5lID0gZmluZExpbmUob2ZmLCBzdGFydCk7CisgICAgICAgIGludCB3aWR0aCA9IDA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aWR0aCA9IGZtLnN0cmluZ1dpZHRoKAorICAgICAgICAgICAgICBjb250ZW50cy5zdWJzdHJpbmcobGluZVN0YXJ0c1tsaW5lXSwgb2ZmKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICAgIH0KKyAgICAgICAgcC54ID0gd2lkdGggKyB4SW5zZXQ7CisgICAgICAgIGlmIChwLnggPiBteVNpemUud2lkdGggLSB4SW5zZXQpCisgICAgICAgICAgICBwLnggPSBteVNpemUud2lkdGggLSB4SW5zZXQ7CisgICAgICAgIHAueSA9IGxpbmVIZWlnaHQgKiBsaW5lICsgeUluc2V0OworICAgICAgICByZXR1cm4gcDsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBmaW5kTGluZShpbnQgb2ZmLCBib29sZWFuIHN0YXJ0KSB7CisgICAgICAgIC8vIGlmIGl0IGlzIHN0YXJ0LCB0aGVuIGdvIHRvIHRoZSBuZXh0IGxpbmUhCisgICAgICAgIGlmIChzdGFydCkgKytvZmY7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGluZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIC8vIExJVTogVGhpcyB3YXMgPD0gOyBjaGFuZ2VkIHRvIDwgdG8gbWFrZSBjYXJldCBhZnRlcgorICAgICAgICAgICAgLy8gZmluYWwgQ1IgaW4gbGluZSBhcHBlYXIgYXQgU1RBUlQgb2YgbmV4dCBsaW5lLgorICAgICAgICAgICAgaWYgKG9mZiA8IGxpbmVTdGFydHNbaV0pIHJldHVybiBpLTE7CisgICAgICAgIH0KKyAgICAgICAgLy8gTElVOiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlOyBhZnRlciBDUiBhdCBlbmQgb2YgdGhlIGxhc3QgbGluZQorICAgICAgICBpZiAob2ZmID09IGxpbmVTdGFydHNbbGluZUNvdW50XSAmJgorICAgICAgICAgICAgb2ZmID4gMCAmJiBjb250ZW50cy5sZW5ndGgoKSA+IDAgJiYgY29udGVudHMuY2hhckF0KG9mZi0xKSA9PSBDUikgeworICAgICAgICAgICAgcmV0dXJuIGxpbmVDb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZUNvdW50LTE7CisgICAgfQorCisgICAgLy8gb2Zmc2V0cyBvbiBhbnkgbGluZSB3aWxsIGdvIGZyb20gc3RhcnQsdHJ1ZSB0byBlbmQsZmFsc2UKKyAgICAvLyBleGNsdWRpbmcgc3RhcnQsZmFsc2UgYW5kIGVuZCx0cnVlCisgICAgcHVibGljIFNlbGVjdGlvbiBwb2ludDJPZmZzZXQoUG9pbnQgcCwgU2VsZWN0aW9uIG8pIHsKKyAgICAgICAgaWYgKHAueSA8IHlJbnNldCkgeworICAgICAgICAgICAgby5jYXJldCA9IDA7CisgICAgICAgICAgICBvLmNsaWNrQWZ0ZXIgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG87CisgICAgICAgIH0KKyAgICAgICAgaW50IGxpbmUgPSAocC55IC0geUluc2V0KS9saW5lSGVpZ2h0OworICAgICAgICBpZiAobGluZSA+PSBsaW5lQ291bnQpIHsKKyAgICAgICAgICAgIG8uY2FyZXQgPSBjb250ZW50cy5sZW5ndGgoKTsKKyAgICAgICAgICAgIG8uY2xpY2tBZnRlciA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG87CisgICAgICAgIH0KKyAgICAgICAgaW50IHRhcmdldCA9IHAueCAtIHhJbnNldDsKKyAgICAgICAgaWYgKHRhcmdldCA8PSAwKSB7CisgICAgICAgICAgICBvLmNhcmV0ID0gbGluZVN0YXJ0c1tsaW5lXTsKKyAgICAgICAgICAgIG8uY2xpY2tBZnRlciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgfQorICAgICAgICBpbnQgbG93R3Vlc3MgPSBsaW5lU3RhcnRzW2xpbmVdOworICAgICAgICBpbnQgbG93V2lkdGggPSAwOworICAgICAgICBpbnQgaGlnaEd1ZXNzID0gbGluZVN0YXJ0c1tsaW5lKzFdOworICAgICAgICBpbnQgaGlnaFdpZHRoID0gZm0uc3RyaW5nV2lkdGgoY29udGVudHMuc3Vic3RyaW5nKGxpbmVTdGFydHNbbGluZV0saGlnaEd1ZXNzKSk7CisgICAgICAgIGlmICh0YXJnZXQgPj0gaGlnaFdpZHRoKSB7CisgICAgICAgICAgICBvLmNhcmV0ID0gbGluZVN0YXJ0c1tsaW5lKzFdOworICAgICAgICAgICAgby5jbGlja0FmdGVyID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAobG93R3Vlc3MgPCBoaWdoR3Vlc3MgLSAxKSB7CisgICAgICAgICAgICBpbnQgZ3Vlc3MgPSAobG93R3Vlc3MgKyBoaWdoR3Vlc3MpLzI7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBmbS5zdHJpbmdXaWR0aChjb250ZW50cy5zdWJzdHJpbmcobGluZVN0YXJ0c1tsaW5lXSxndWVzcykpOworICAgICAgICAgICAgaWYgKHdpZHRoIDw9IHRhcmdldCkgeworICAgICAgICAgICAgICAgIGxvd0d1ZXNzID0gZ3Vlc3M7CisgICAgICAgICAgICAgICAgbG93V2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gdGFyZ2V0KSBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGlnaEd1ZXNzID0gZ3Vlc3M7CisgICAgICAgICAgICAgICAgaGlnaFdpZHRoID0gd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gYXQgZW5kLCBlaXRoZXIgbG93V2lkdGggPCB0YXJnZXQgPCB3aWR0aChsb3crMSksIG9yIGxvd1dpZHRoID0gdGFyZ2V0CisgICAgICAgIGludCBoaWdoQm91bmQgPSBjaGFyQnJlYWtlci5mb2xsb3dpbmcobG93R3Vlc3MpOworICAgICAgICBpbnQgbG93Qm91bmQgPSBjaGFyQnJlYWtlci5wcmV2aW91cygpOworICAgICAgICAvLyB3ZSBhcmUgbm93IGF0IGNoYXJhY3RlciBib3VuZGFyaWVzCisgICAgICAgIGlmIChsb3dCb3VuZCAhPSBsb3dHdWVzcykKKyAgICAgICAgICAgIGxvd1dpZHRoID0gZm0uc3RyaW5nV2lkdGgoY29udGVudHMuc3Vic3RyaW5nKGxpbmVTdGFydHNbbGluZV0sbG93Qm91bmQpKTsKKyAgICAgICAgaWYgKGhpZ2hCb3VuZCAhPSBoaWdoR3Vlc3MpCisgICAgICAgICAgICBoaWdoV2lkdGggPSBmbS5zdHJpbmdXaWR0aChjb250ZW50cy5zdWJzdHJpbmcobGluZVN0YXJ0c1tsaW5lXSxoaWdoQm91bmQpKTsKKyAgICAgICAgLy8gd2Ugbm93IGhhdmUgdGhlIHJpZ2h0IHdpZHRocworICAgICAgICBpZiAodGFyZ2V0IC0gbG93V2lkdGggPCBoaWdoV2lkdGggLSB0YXJnZXQpIHsKKyAgICAgICAgICAgIG8uY2FyZXQgPSBsb3dCb3VuZDsKKyAgICAgICAgICAgIG8uY2xpY2tBZnRlciA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvLmNhcmV0ID0gaGlnaEJvdW5kOworICAgICAgICAgICAgby5jbGlja0FmdGVyID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gd2Ugbm93IGhhdmUgdGhlIGNsb3Nlc3QhCisgICAgICAgIHJldHVybiBvOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmaXhMaW5lU3RhcnRzKGludCB3aWR0aCkgeworICAgICAgICBsaW5lQ291bnQgPSAxOworICAgICAgICBsaW5lU3RhcnRzWzBdID0gMDsKKyAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIGxpbmVTdGFydHNbMV0gPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGludCBlbmQgPSAwOworICAgICAgICAvLyBMSVU6IEFkZCBjaGVjayBmb3IgTUFYX0xJTkVTCisgICAgICAgIGZvciAoaW50IHN0YXJ0ID0gMDsgc3RhcnQgPCBjb250ZW50cy5sZW5ndGgoKSAmJiBsaW5lQ291bnQgPCBNQVhfTElORVM7CisgICAgICAgICAgICAgc3RhcnQgPSBlbmQpIHsKKyAgICAgICAgICAgIGVuZCA9IG5leHRMaW5lKGZtLCBzdGFydCwgd2lkdGgpOworICAgICAgICAgICAgbGluZVN0YXJ0c1tsaW5lQ291bnQrK10gPSBlbmQ7CisgICAgICAgICAgICBpZiAoZW5kID09IHN0YXJ0KSB7IC8vIExJVTogQXNzZXJ0aW9uCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm5leHRMaW5lIGJyb2tlbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC0tbGluZUNvdW50OworICAgICAgICByZWRvTGluZXMgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBMSVU6IEVuaGFuY2VkIHRvIHdyYXAgbG9uZyBsaW5lcy4gIEJ1ZyB3aXRoIHJldHVybiBvZiBzdGFydCBmaXhlZC4KKyAgICBwdWJsaWMgaW50IG5leHRMaW5lKEZvbnRNZXRyaWNzIGZtLCBpbnQgc3RhcnQsIGludCB3aWR0aCkgeworICAgICAgICBpbnQgbGVuID0gY29udGVudHMubGVuZ3RoKCk7CisgICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICAvLyBjaGVjayBmb3IgbGluZSBzZXBhcmF0b3IKKyAgICAgICAgICAgIGNoYXIgY2ggPSAoY29udGVudHMuY2hhckF0KGkpKTsKKyAgICAgICAgICAgIGlmIChjaCA+PSAweDAwMEEgJiYgY2ggPD0gMHgwMDBEIHx8IGNoID09IDB4MjAyOCB8fCBjaCA9PSAweDIwMjkpIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBpICsgMTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gMHgwMDBEICYmIGkrMSA8IGxlbiAmJiBjb250ZW50cy5jaGFyQXQoaSsxKSA9PSAweDAwMEEpIC8vIGNybGYKKyAgICAgICAgICAgICAgICAgICAgKytsZW47IC8vIGdyYWIgZXh0cmEgY2hhcgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFN0cmluZyBzdWJqZWN0ID0gY29udGVudHMuc3Vic3RyaW5nKHN0YXJ0LGxlbik7CisgICAgICAgIGlmICh2aXNpYmxlV2lkdGgoZm0sIHN1YmplY3QpIDw9IHdpZHRoKQorICAgICAgICAgIHJldHVybiBsZW47CisKKyAgICAgICAgLy8gTElVOiBSZW1haW5kZXIgb2YgdGhpcyBtZXRob2QgcmV3cml0dGVuIHRvIGFjY29tb2RhdGUgbGluZXMKKyAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIGNvbXBvbmVudCB3aWR0aCBieSBmaXJzdCB0cnlpbmcgdG8gYnJlYWsKKyAgICAgICAgLy8gaW50byBsaW5lczsgdGhlbiB3b3JkczsgZmluYWxseSBjaGFycy4KKyAgICAgICAgaW50IG4gPSBmaW5kRml0dGluZ0JyZWFrKGZtLCBzdWJqZWN0LCB3aWR0aCwgbGluZUJyZWFrZXIpOworICAgICAgICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICBuID0gZmluZEZpdHRpbmdCcmVhayhmbSwgc3ViamVjdCwgd2lkdGgsIHdvcmRCcmVha2VyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICBuID0gZmluZEZpdHRpbmdCcmVhayhmbSwgc3ViamVjdCwgd2lkdGgsIGNoYXJCcmVha2VyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbiA+IDAgPyBzdGFydCArIG4gOiBsZW47CisgICAgfQorCisgICAgLyoqCisgICAgICogTElVOiBGaW5kcyB0aGUgbG9uZ2VzdCBzdWJzdHJpbmcgdGhhdCBmaXRzIGEgZ2l2ZW4gd2lkdGgKKyAgICAgKiBjb21wb3NlZCBvZiBzdWJ1bml0cyByZXR1cm5lZCBieSBhIEJyZWFrSXRlcmF0b3IuICBJZiB0aGUgc21hbGxlc3QKKyAgICAgKiBzdWJ1bml0IGlzIHRvbyBsb25nLCByZXR1cm5zIDAuCisgICAgICogQHBhcmFtIGZtIG1ldHJpY3MgdG8gdXNlCisgICAgICogQHBhcmFtIGxpbmUgdGhlIHN0cmluZyB0byBiZSBmaXggaW50byB3aWR0aAorICAgICAqIEBwYXJhbSB3aWR0aCBsaW5lLnN1YnN0cmluZygwLCByZXN1bHQpIG11c3QgYmUgPD0gd2lkdGgKKyAgICAgKiBAcGFyYW0gYnJlYWtlciB0aGUgQnJlYWtJdGVyYXRvciB0aGF0IHdpbGwgYmUgdXNlZCB0byBmaW5kIHN1YnVuaXRzCisgICAgICogQHJldHVybiBtYXhpbXVtIGNoYXJhY3RlcnMsIGF0IGJvdW5kYXJpZXMgcmV0dXJuZWQgYnkgYnJlYWtlciwKKyAgICAgKiB0aGF0IGZpdCBpbnRvIHdpZHRoLCBvciB6ZXJvIG9uIGZhaWx1cmUKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBmaW5kRml0dGluZ0JyZWFrKEZvbnRNZXRyaWNzIGZtLCBTdHJpbmcgbGluZSwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJlYWtJdGVyYXRvciBicmVha2VyKSB7CisgICAgICAgIGJyZWFrZXIuc2V0VGV4dChsaW5lKTsKKyAgICAgICAgaW50IGxhc3QgPSBicmVha2VyLmZpcnN0KCk7CisgICAgICAgIGludCBlbmQgPSBicmVha2VyLm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGVuZCAhPSBCcmVha0l0ZXJhdG9yLkRPTkUgJiYKKyAgICAgICAgICAgICAgIHZpc2libGVXaWR0aChmbSwgbGluZS5zdWJzdHJpbmcoMCwgZW5kKSkgPD0gd2lkdGgpIHsKKyAgICAgICAgICAgIGxhc3QgPSBlbmQ7CisgICAgICAgICAgICBlbmQgPSBicmVha2VyLm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGFzdDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHZpc2libGVXaWR0aChGb250TWV0cmljcyBmbSwgU3RyaW5nIHMpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IHMubGVuZ3RoKCktMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGNoYXIgY2ggPSBzLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmICghKGNoID09ICcgJyB8fCBjaCA+PSAweDAwMEEgJiYgY2ggPD0gMHgwMDBEIHx8IGNoID09IDB4MjAyOCB8fCBjaCA9PSAweDIwMjkpKQorICAgICAgICAgICAgICByZXR1cm4gZm0uc3RyaW5nV2lkdGgocy5zdWJzdHJpbmcoMCxpKzEpKTs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisvLyA9PT09PT09PT09PT09PT0gVXRpbGl0eSA9PT09PT09PT09PT09PT09PT09PQorCisgICAgcHJpdmF0ZSB2b2lkIGZpeEhleCgpIHsKKyAgICAgICAgaWYgKHNlbGVjdGlvbi5nZXRFbmQoKSA9PSAwKSByZXR1cm47CisgICAgICAgIGludCBzdG9yZSA9IDA7CisgICAgICAgIGludCBwbGFjZXMgPSAxOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBpbnQgbWluID0gTWF0aC5taW4oOCxzZWxlY3Rpb24uZ2V0RW5kKCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbjsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGNoID0gY29udGVudHMuY2hhckF0KHNlbGVjdGlvbi5nZXRFbmQoKS0xLWkpOworICAgICAgICAgICAgaW50IHZhbHVlID0gQ2hhcmFjdGVyLmdldE51bWVyaWNWYWx1ZShjaCk7CisgICAgICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gMTUpIGJyZWFrOworICAgICAgICAgICAgc3RvcmUgKz0gcGxhY2VzICogdmFsdWU7CisgICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgcGxhY2VzICo9IDE2OworICAgICAgICB9CisgICAgICAgIFN0cmluZyBhZGQgPSAiIjsKKyAgICAgICAgaW50IGJvdHRvbSA9IHN0b3JlICYgMHhGRkZGOworICAgICAgICBpZiAoc3RvcmUgPj0gMHhEODAwMDAwMCAmJiBzdG9yZSA8IDB4REMwMDAwMDAKKyAgICAgICAgICAmJiBib3R0b20gPj0gMHhEQzAwICYmIGJvdHRvbSA8IDB4RTAwMCkgeyAvLyBzdXJyb2dhdGVzCisgICAgICAgICAgICBhZGQgPSAiIiArIChjaGFyKShzdG9yZSA+PiAxNikgKyAoY2hhcilib3R0b207CisgICAgICAgIH0gZWxzZSBpZiAoc3RvcmUgPiAweEZGRkYgJiYgc3RvcmUgPD0gMHgxMEZGRkYpIHsKKyAgICAgICAgICAgIHN0b3JlIC09IDB4MTAwMDA7CisgICAgICAgICAgICBhZGQgPSAiIiArIChjaGFyKSgoKHN0b3JlID4+IDEwKSAmIDB4M0ZGKSArIDB4RDgwMCkKKyAgICAgICAgICAgICAgKyAoY2hhcikoKHN0b3JlICYgMHgzRkYpICsgMHhEQzAwKTsKKyAgICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPj0gNCkgeworICAgICAgICAgICAgY291bnQgPSA0OworICAgICAgICAgICAgYWRkID0gIiIrKGNoYXIpKHN0b3JlICYgMHhGRkZGKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgICAgIGNoYXIgY2ggPSBjb250ZW50cy5jaGFyQXQoc2VsZWN0aW9uLmdldEVuZCgpLTEpOworICAgICAgICAgICAgYWRkID0gaGV4KGNoKTsKKyAgICAgICAgICAgIGlmIChjaCA+PSAweERDMDAgJiYgY2ggPD0gMHhERkZGICYmIHNlbGVjdGlvbi5nZXRFbmQoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICBjaCA9IGNvbnRlbnRzLmNoYXJBdChzZWxlY3Rpb24uZ2V0RW5kKCktMik7CisgICAgICAgICAgICAgICAgaWYgKGNoID49IDB4RDgwMCAmJiBjaCA8PSAweERCRkYpIHsKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSAyOworICAgICAgICAgICAgICAgICAgICBhZGQgPSBoZXgoY2gpICsgYWRkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXBsYWNlUmFuZ2UoYWRkLCBzZWxlY3Rpb24uZ2V0RW5kKCktY291bnQsIHNlbGVjdGlvbi5nZXRFbmQoKSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaGV4KGNoYXIgY2gpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IEludGVnZXIudG9TdHJpbmcoY2gsMTYpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIHJlc3VsdCA9ICIwMDAwIi5zdWJzdHJpbmcocmVzdWx0Lmxlbmd0aCgpLDQpICsgcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9pbXBsL1NlbGVjdGlvbi5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvU2VsZWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTljMTNjZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9pbXBsL1NlbGVjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaW1wbC9TZWxlY3Rpb24uamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNDo1NyAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLmltcGw7CitpbXBvcnQgamF2YS50ZXh0Lio7CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBTZWxlY3Rpb24geworCisgICAgcHVibGljIGludCBhbmNob3I7CisgICAgcHVibGljIGludCBjYXJldDsKKyAgICBwdWJsaWMgYm9vbGVhbiBjbGlja0FmdGVyOworCisgICAgcHVibGljIGludCBnZXRTdGFydCgpIHsKKyAgICAgICAgcmV0dXJuIGFuY2hvciA8IGNhcmV0ID8gYW5jaG9yIDogY2FyZXQ7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRFbmQoKSB7CisgICAgICAgIHJldHVybiBhbmNob3IgPiBjYXJldCA/IGFuY2hvciA6IGNhcmV0OworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzQ2FyZXQoKSB7CisgICAgICAgIHJldHVybiBhbmNob3IgPT0gY2FyZXQ7CisgICAgfQorCisgICAgcHVibGljIFNlbGVjdGlvbiBzZXQoU2VsZWN0aW9uIG90aGVyKSB7CisgICAgICAgIGFuY2hvciA9IG90aGVyLmFuY2hvcjsKKyAgICAgICAgY2FyZXQgPSBvdGhlci5jYXJldDsKKyAgICAgICAgY2xpY2tBZnRlciA9IG90aGVyLmNsaWNrQWZ0ZXI7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBTZWxlY3Rpb24gc2V0KGludCBhbmNob3IsIGludCBjYXJldCwgYm9vbGVhbiBjbGlja0FmdGVyKSB7CisgICAgICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yOworICAgICAgICB0aGlzLmNhcmV0ID0gY2FyZXQ7CisgICAgICAgIHRoaXMuY2xpY2tBZnRlciA9IGNsaWNrQWZ0ZXI7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKKyAgICAgICAgU2VsZWN0aW9uIG90aGVyMiA9IChTZWxlY3Rpb24pb3RoZXI7CisgICAgICAgIHJldHVybiBhbmNob3IgPT0gb3RoZXIyLmFuY2hvcgorICAgICAgICAgICYmIGNhcmV0ID09IG90aGVyMi5jYXJldAorICAgICAgICAgICYmIGNsaWNrQWZ0ZXIgPT0gb3RoZXIyLmNsaWNrQWZ0ZXI7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNMZXNzVGhhbihTZWxlY3Rpb24gb3RoZXIpIHsKKyAgICAgICAgcmV0dXJuIGdldFN0YXJ0KCkgPCBvdGhlci5nZXRFbmQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2VsZWN0aW9uIHBpbihTdHJpbmcgdGV4dCkgeworICAgICAgICBpZiAoYW5jaG9yID4gdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgYW5jaG9yID0gdGV4dC5sZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlIGlmIChhbmNob3IgPCAwKSB7CisgICAgICAgICAgICBhbmNob3IgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChjYXJldCA+IHRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGNhcmV0ID0gdGV4dC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGNsaWNrQWZ0ZXIgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGNhcmV0IDwgMCkgeworICAgICAgICAgICAgY2FyZXQgPSAwOworICAgICAgICAgICAgY2xpY2tBZnRlciA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyBTZWxlY3Rpb24gc3dhcChTZWxlY3Rpb24gYWZ0ZXIpIHsKKyAgICAgICAgaW50IHRlbXAgPSBhbmNob3I7CisgICAgICAgIGFuY2hvciA9IGFmdGVyLmFuY2hvcjsKKyAgICAgICAgYWZ0ZXIuYW5jaG9yID0gdGVtcDsKKyAgICAgICAgdGVtcCA9IGNhcmV0OworICAgICAgICBjYXJldCA9IGFmdGVyLmNhcmV0OworICAgICAgICBhZnRlci5jYXJldCA9IHRlbXA7CisgICAgICAgIGJvb2xlYW4gYiA9IGNsaWNrQWZ0ZXI7CisgICAgICAgIGNsaWNrQWZ0ZXIgPSBhZnRlci5jbGlja0FmdGVyOworICAgICAgICBhZnRlci5jbGlja0FmdGVyID0gYjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIFNlbGVjdGlvbiBmaXhBZnRlclJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgbGVuKSB7CisgICAgICAgIGlmIChhbmNob3IgPj0gc3RhcnQpIHsKKyAgICAgICAgICAgIGlmIChhbmNob3IgPCBlbmQpIGFuY2hvciA9IGVuZDsKKyAgICAgICAgICAgIGFuY2hvciA9IHN0YXJ0ICsgbGVuICsgYW5jaG9yIC0gZW5kOworICAgICAgICB9CisgICAgICAgIGlmIChjYXJldCA+PSBzdGFydCkgeworICAgICAgICAgICAgaWYgKGNhcmV0IDwgZW5kKSBjYXJldCA9IGVuZDsKKyAgICAgICAgICAgIGNhcmV0ID0gc3RhcnQgKyBsZW4gKyBjYXJldCAtIGVuZDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAgICAgLy8gTWFjICYgV2luZG93cyBjb25zaWRlcmFibHkgZGlmZmVyZW50CisgICAgICAgIC8vIE1hYzogZW5kKysuIElmIHN0YXJ0IT1lbmQsIHN0YXJ0PWVuZAorICAgICAgICAvLyAgU0hJRlQ6IG1vdmUgZW5kIHJpZ2h0CisgICAgICAgIC8vICBDVEw6IG5vIGRpZmZlcmVudAorICAgICAgICAvLyBXaW5kb3dzOgorICAgICAgICAvLyAgVU5TSElGVEVEOiBpZiBzdGFydCE9ZW5kLCBzdGFydCA9IGVuZCwgZWxzZSBzdGFydD1lbmQ9ZW5kKzE7CisgICAgICAgIC8vICAgICAgIGFuY2hvciA9IHRpcCA9IHN0YXJ0CisgICAgICAgIC8vICBTSElGVDogdGlwKysKKyAgICAgICAgLy8gIENUTDogaWYgc3RhcnQhPWVuZCwgc3RhcnQgPSBlbmQgPSBuZXh0Ym91bmQoZW5kLTEpLAorICAgICAgICAvLyAgIGVsc2Ugc3RhcnQ9ZW5kPW5leHRib3VuZChlbmQpCisgICAgICAgIC8vICAgICAgIGFuY2hvciA9IHRpcCA9IHN0YXJ0CisgICAgICAgIC8vICBDVEwvU0hJRlQ6IHRpcCA9IG5leHRib3VuZCh0aXApCisKKyAgICBwdWJsaWMgU2VsZWN0aW9uIG5leHRCb3VuZChCcmVha0l0ZXJhdG9yIGJyZWFrZXIsCisgICAgICBpbnQgZGlyZWN0aW9uLCBib29sZWFuIGV4dGVuZCkgeworICAgICAgICBpZiAoIWV4dGVuZCAmJiBhbmNob3IgIT0gY2FyZXQpIGNhcmV0IC09IGRpcmVjdGlvbjsKKyAgICAgICAgY2FyZXQgPSBuZXh0KGNhcmV0LCBicmVha2VyLCBkaXJlY3Rpb24sIHRydWUpOworICAgICAgICBpZiAoIWV4dGVuZCkgYW5jaG9yID0gY2FyZXQ7CisgICAgICAgIGNsaWNrQWZ0ZXIgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLy8gZXhwYW5kIHN0YXJ0IGFuZCBlbmQgdG8gd29yZCBicmVha3MtLWlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IG9uIG9uZQorICAgIHB1YmxpYyB2b2lkIGV4cGFuZChCcmVha0l0ZXJhdG9yIGJyZWFrZXIpIHsKKyAgICAgICAgaWYgKGFuY2hvciA8PSBjYXJldCkgeworICAgICAgICAgICAgYW5jaG9yID0gbmV4dChhbmNob3IsYnJlYWtlciwtMSxmYWxzZSk7CisgICAgICAgICAgICBjYXJldCA9IG5leHQoY2FyZXQsYnJlYWtlciwxLGZhbHNlKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGJyZWFrZXIuZm9sbG93aW5nKGFuY2hvcik7CisgICAgICAgICAgICAgICAgYW5jaG9yID0gYnJlYWtlci5wcmV2aW91cygpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNhcmV0ID0gYnJlYWtlci5mb2xsb3dpbmcoY2FyZXQtMSk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbmNob3IgPSBuZXh0KGFuY2hvcixicmVha2VyLDEsZmFsc2UpOworICAgICAgICAgICAgY2FyZXQgPSBuZXh0KGNhcmV0LGJyZWFrZXIsLTEsZmFsc2UpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYnJlYWtlci5mb2xsb3dpbmcoY2FyZXQpOworICAgICAgICAgICAgICAgIGNhcmV0ID0gYnJlYWtlci5wcmV2aW91cygpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFuY2hvciA9IGJyZWFrZXIuZm9sbG93aW5nKGFuY2hvci0xKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGRpZmZlcmVudCA9IGZhbHNlIC0gbW92ZSB0byBuZXh0IGJvdW5kYXJ5LCB1bmxlc3Mgb24gb25lCisgICAgLy8gdHJ1ZSAtIG1vdmUgdG8gbmV4dCBib3VuZGFyeSwgZXZlbiBpZiBvbiBvbmUKKyAgICBwdWJsaWMgc3RhdGljIGludCBuZXh0KGludCBwb3NpdGlvbiwgQnJlYWtJdGVyYXRvciBicmVha2VyLAorICAgICAgaW50IGRpcmVjdGlvbiwgYm9vbGVhbiBkaWZmZXJlbnQpIHsKKyAgICAgICAgaWYgKCFkaWZmZXJlbnQpIHBvc2l0aW9uIC09IGRpcmVjdGlvbjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPiAwKSB7CisgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBicmVha2VyLmZvbGxvd2luZyhwb3NpdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrZXIuZm9sbG93aW5nKHBvc2l0aW9uLTEpOworICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gYnJlYWtlci5wcmV2aW91cygpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvcGFja2FnZS5odG1sIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL2ltcGwvcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0OThjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vaW1wbC9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9pbXBsL3BhY2thZ2UuaHRtbCx2ICQKKyAgJFJldmlzaW9uOiAxLjEgJAorICAkRGF0ZTogMjAwMC8wMy8xNSAxNzo0Mzo0MCAkCistLT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIj4KK1NoYXJlZCB1dGlsaXRpZXMgZm9yIGRlbW8gYXBwbGljYXRpb25zIGFuZCBBcHBsZXRzLgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYmJpL0JyZWFrSXRlcmF0b3JSdWxlc19lbl9VU19ERU1PLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJiaS9CcmVha0l0ZXJhdG9yUnVsZXNfZW5fVVNfREVNTy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlZDI1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJiaS9CcmVha0l0ZXJhdG9yUnVsZXNfZW5fVVNfREVNTy5qYXZhCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJiaS9CcmVha0l0ZXJhdG9yUnVsZXNfZW5fVVNfREVNTy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE5IDA0OjEwOjIzICQgCisgKiAkUmV2aXNpb246IDEuOCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8ucmJiaTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS5uZXQuVVJMOworCisvKioKKyAqIFRoaXMgcmVzb3VyY2UgYnVuZGxlIGlzIGluY2x1ZGVkIGZvciB0ZXN0aW5nIGFuZCBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzIG9ubHkuCisgKiBJdCBhcHBsaWVzIHRoZSBkaWN0aW9uYXJ5LWJhc2VkIGFsZ29yaXRobSB0byBFbmdsaXNoIHRleHQgdGhhdCBoYXMgaGFkIGFsbCB0aGUKKyAqIHNwYWNlcyByZW1vdmVkLiAgT25jZSB3ZSBoYXZlIGdvb2QgdGVzdCBjYXNlcyBmb3IgVGhhaSwgd2Ugd2lsbCByZXBsYWNlIHRoaXMKKyAqIHdpdGggZ29vZCByZXNvdXJjZSBkYXRhIChhbmQgYSBnb29kIGRpY3Rpb25hcnkgZmlsZSkgZm9yIFRoYWkKKyAqLworcHVibGljIGNsYXNzIEJyZWFrSXRlcmF0b3JSdWxlc19lbl9VU19ERU1PIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkwgdXJsID0KKyAgICAgICAgQnJlYWtJdGVyYXRvclJ1bGVzX2VuX1VTX0RFTU8uY2xhc3MuZ2V0UmVzb3VyY2UoIi9jb20vaWJtL2RhdGEvbWlzYy9lbmdsaXNoLmRpY3QiKTsKKyAgICAKKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRzOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGNvbnRlbnRzID0geworICAgICAgICAvLyBuYW1lcyBvZiBjbGFzc2VzIHRvIGluc3RhbnRpYXRlIGZvciB0aGUgZGlmZmVyZW50IGtpbmRzIG9mIGJyZWFrCisgICAgICAgIC8vIGl0ZXJhdG9yLiAgTm90aWNlIHdlJ3JlIG5vdyB1c2luZyBEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yCisgICAgICAgIC8vIGZvciB3b3JkIGFuZCBsaW5lIGJyZWFraW5nLgorICAgICAgICB7ICJCcmVha0l0ZXJhdG9yQ2xhc3NlcyIsCisgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAiUnVsZUJhc2VkQnJlYWtJdGVyYXRvciIsICAgICAgICAgICAvLyBjaGFyYWN0ZXItYnJlYWsgaXRlcmF0b3IgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yIiwgICAgIC8vIHdvcmQtYnJlYWsgaXRlcmF0b3IgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yIiwgICAgIC8vIGxpbmUtYnJlYWsgaXRlcmF0b3IgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIiB9ICAgICAgICAgIC8vIHNlbnRlbmNlLWJyZWFrIGl0ZXJhdG9yIGNsYXNzCisgICAgICAgIH0sCisgICAgICAgIAorICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIHNhbWUgd29yZC1icmVha2luZyBydWxlcyBhcyBhcmUgc3BlY2lmaWVkIGluIHRoZSBkZWZhdWx0CisgICAgICAgIC8vIHJlc291cmNlLCBleGNlcHQgdGhhdCB0aGUgTGF0aW4gbGV0dGVycywgYXBvc3Ryb3BoZSwgYW5kIGh5cGhlbiBhcmUKKyAgICAgICAgLy8gc3BlY2lmaWVkIGFzIGRpY3Rpb25hcnkgY2hhcmFjdGVycworICAgICAgICB7ICJXb3JkQnJlYWtSdWxlcyIsCisgICAgICAgICAgICAvLyBpZ25vcmUgbm9uLXNwYWNpbmcgbWFya3MsIGVuY2xvc2luZyBtYXJrcywgYW5kIGZvcm1hdCBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgLy8gYWxsIG9mIHdoaWNoIHNob3VsZCBub3QgaW5mbHVlbmNlIHRoZSBhbGdvcml0aG0KKyAgICAgICAgICAgICIkX2lnbm9yZV89W1s6TW46XVs6TWU6XVs6Q2Y6XV07IgorCisgICAgICAgICAgICAvLyBsb3dlciBhbmQgdXBwZXIgY2FzZSBSb21hbiBsZXR0ZXJzLCBhcG9zdHJvcGh5IGFuZCBkYXNoIGFyZQorICAgICAgICAgICAgLy8gaW4gdGhlIEVuZ2xpc2ggZGljdGlvbmFyeQorICAgICAgICAgICAgKyAiJF9kaWN0aW9uYXJ5Xz1bYS16QS1aXFwnXFwtXTsiCisKKyAgICAgICAgICAgIC8vIEhpbmRpIHBocmFzZSBzZXBhcmF0b3IsIGthbmppLCBrYXRha2FuYSwgaGlyYWdhbmEsIENKSyBkaWFjcml0aWNhbHMsCisgICAgICAgICAgICAvLyBvdGhlciBsZXR0ZXJzLCBhbmQgZGlnaXRzCisgICAgICAgICAgICArICIkZGFuZGE9W1x1MDk2NFx1MDk2NV07IgorICAgICAgICAgICAgKyAiJGthbmppPVtcdTMwMDVcdTRlMDAtXHU5ZmE1XHVmOTAwLVx1ZmEyZF07IgorICAgICAgICAgICAgKyAiJGthdGE9W1x1MzA5OS1cdTMwOWNcdTMwYTEtXHUzMGZlXTsiCisgICAgICAgICAgICArICIkaGlyYT1bXHUzMDQxLVx1MzA5ZVx1MzBmY107IgorICAgICAgICAgICAgKyAiJGxldD1bW1s6TDpdWzpNYzpdXS1bJGthbmppJGthdGEkaGlyYV1dOyIKKyAgICAgICAgICAgICsgIiRkZ3Q9WzpOOl07IgorCisgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZDogY3VycmVudGx5CisgICAgICAgICAgICAvLyBkYXNoZXMsIGFwb3N0cm9waGVzLCBhbmQgcXVvdGF0aW9uIG1hcmtzCisgICAgICAgICAgICArICIkbWlkX3dvcmQ9W1s6UGQ6XVx1MDBhZFx1MjAyN1xcXCJcXFwnXTsiCisKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uIHRoYXQgY2FuIG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgYSBudW1iZXI6IGN1cnJlbnRseQorICAgICAgICAgICAgLy8gYXBvc3Ryb3BoZXMsIHFvdXRhdGlvbiBtYXJrcywgcGVyaW9kcywgY29tbWFzLCBhbmQgdGhlIEFyYWJpYworICAgICAgICAgICAgLy8gZGVjaW1hbCBwb2ludAorICAgICAgICAgICAgKyAiJG1pZF9udW09W1xcXCJcXFwnXFwsXHUwNjZiXFwuXTsiCisKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uIHRoYXQgY2FuIG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBudW1iZXI6IGN1cnJlbnRseQorICAgICAgICAgICAgLy8gdGhlIHBlcmlvZCwgdGhlIG51bWJlciBzaWduLCBhbmQgYWxsIGN1cnJlbmN5IHN5bWJvbHMgZXhjZXB0IHRoZSBjZW50cyBzaWduCisgICAgICAgICAgICArICIkcHJlX251bT1bW1s6U2M6XS1bXHUwMGEyXV1cXCNcXC5dOyIKKworICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24gdGhhdCBjYW4gb2NjdXIgYXQgdGhlIGVuZCBvZiBhIG51bWJlcjogY3VycmVudGx5CisgICAgICAgICAgICAvLyB0aGUgcGVyY2VudCwgcGVyLXRob3VzYW5kLCBwZXItdGVuLXRob3VzYW5kLCBhbmQgQXJhYmljIHBlcmNlbnQKKyAgICAgICAgICAgIC8vIHNpZ25zLCB0aGUgY2VudHMgc2lnbiwgYW5kIHRoZSBhbXBlcnNhbmQKKyAgICAgICAgICAgICsgIiRwb3N0X251bT1bXFwlXFwmXHUwMGEyXHUwNjZhXHUyMDMwXHUyMDMxXTsiCisKKyAgICAgICAgICAgIC8vIGxpbmUgc2VwYXJhdG9yczogY3VycmVudGx5IExGLCBGRiwgUFMsIGFuZCBMUworICAgICAgICAgICAgKyAiJGxzPVtcblx1MDAwY1x1MjAyOFx1MjAyOV07IgorCisgICAgICAgICAgICAvLyB3aGl0ZXNwYWNlOiBhbGwgc3BhY2Ugc2VwYXJhdG9ycyBhbmQgdGhlIHRhYiBjaGFyYWN0ZXIKKyAgICAgICAgICAgICsgIiR3cz1bWzpaczpdXHRdOyIKKworICAgICAgICAgICAgLy8gYSB3b3JkIGlzIGEgc2VxdWVuY2Ugb2YgbGV0dGVycyB0aGF0IG1heSBjb250YWluIGludGVybmFsCisgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiwgYXMgbG9uZyBhcyBpdCBiZWdpbnMgYW5kIGVuZHMgd2l0aCBhIGxldHRlciBhbmQKKyAgICAgICAgICAgIC8vIG5ldmVyIGNvbnRhaW5zIHR3byBwdW5jdHVhdGlvbiBtYXJrcyBpbiBhIHJvdworICAgICAgICAgICAgKyAiJHdvcmQ9KCRsZXQrKCRtaWRfd29yZCRsZXQrKSokZGFuZGE/KTsiCisKKyAgICAgICAgICAgIC8vIGEgbnVtYmVyIGlzIGEgc2VxdWVuY2Ugb2YgZGlnaXRzIHRoYXQgbWF5IGNvbnRhaW4gaW50ZXJuYWwKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uLCBhcyBsb25nIGFzIGl0IGJlZ2lucyBhbmQgZW5kcyB3aXRoIGEgZGlnaXQgYW5kCisgICAgICAgICAgICAvLyBuZXZlciBjb250YWlucyB0d28gcHVuY3R1YXRpb24gbWFya3MgaW4gYSByb3cuCisgICAgICAgICAgICArICIkbnVtYmVyPSgkZGd0KygkbWlkX251bSRkZ3QrKSopOyIKKworICAgICAgICAgICAgLy8gYnJlYWsgYWZ0ZXIgZXZlcnkgY2hhcmFjdGVyLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucworICAgICAgICAgICAgLy8gKHRoaXMgd2lsbCBjYXVzZSBwdW5jdHVhdGlvbiBtYXJrcyB0aGF0IGFyZW4ndCBjb25zaWRlcmVkCisgICAgICAgICAgICAvLyBwYXJ0IG9mIHdvcmRzIG9yIG51bWJlcnMgdG8gYmUgdHJlYXRlZCBhcyB3b3JkcyB1bnRvIHRoZW1zZWx2ZXMpCisgICAgICAgICAgICArICIuOyIKKworICAgICAgICAgICAgLy8ga2VlcCB0b2dldGhlciBhbnkgc2VxdWVuY2Ugb2YgY29udGlndW91cyB3b3JkcyBhbmQgbnVtYmVycworICAgICAgICAgICAgLy8gKGluY2x1ZGluZyBqdXN0IG9uZSBvZiBlaXRoZXIpLCBwbHVzIGFuIG9wdGlvbmFsIHRyYWlsaW5nCisgICAgICAgICAgICAvLyBudW1iZXItc3VmZml4IGNoYXJhY3RlcgorICAgICAgICAgICAgKyAiJHdvcmQ/KCRudW1iZXIkd29yZCkqKCRudW1iZXIkcG9zdF9udW0/KT87IgorCisgICAgICAgICAgICAvLyBrZWVwIHRvZ2V0aGVyIGFuZCBzZXF1ZW5jZSBvZiBjb250aWd1b3VzIHdvcmRzIGFuZCBudW1iZXJzCisgICAgICAgICAgICAvLyB0aGF0IHN0YXJ0cyB3aXRoIGEgbnVtYmVyLXByZWZpeCBjaGFyYWN0ZXIgYW5kIGEgbnVtYmVyLAorICAgICAgICAgICAgLy8gYW5kIG1heSBlbmQgd2l0aCBhIG51bWJlci1zdWZmaXggY2hhcmFjdGVyCisgICAgICAgICAgICArICIkcHJlX251bSgkbnVtYmVyJHdvcmQpKigkbnVtYmVyJHBvc3RfbnVtPyk/OyIKKworICAgICAgICAgICAgLy8ga2VlcCB0b2dldGhlciBydW5zIG9mIHdoaXRlc3BhY2UgKG9wdGlvbmFsbHkgd2l0aCBhIHNpbmdsZSB0cmFpbGluZworICAgICAgICAgICAgLy8gbGluZSBzZXBhcmF0b3Igb3IgQ1JMRiBzZXF1ZW5jZSkKKyAgICAgICAgICAgICsgIiR3cypccj8kbHM/OyIKKworICAgICAgICAgICAgLy8ga2VlcCB0b2dldGhlciBydW5zIG9mIEthdGFrYW5hCisgICAgICAgICAgICArICIka2F0YSo7IgorCisgICAgICAgICAgICAvLyBrZWVwIHRvZ2V0aGVyIHJ1bnMgb2YgSGlyYWdhbmEKKyAgICAgICAgICAgICsgIiRoaXJhKjsiCisKKyAgICAgICAgICAgIC8vIGtlZXAgdG9nZXRoZXIgcnVucyBvZiBLYW5qaQorICAgICAgICAgICAgKyAiJGthbmppKjsifSwKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSBsaW5lLWJyZWFraW5nIHJ1bGVzIGFzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgLy8gcmVzb3VyY2UsIGV4Y2VwdCB0aGF0IHRoZSBMYXRpbiBsZXR0ZXJzLCBhcG9zdHJvcGhlLCBhbmQgaHlwaGVuIGFyZQorICAgICAgICAvLyBzcGVjaWZpZWQgYXMgZGljdGlvbmFyeSBjaGFyYWN0ZXJzCisgICAgICAgIHsgIkxpbmVCcmVha1J1bGVzIiwKKyAgICAgICAgICAgIC8vIGlnbm9yZSBub24tc3BhY2luZyBtYXJrcywgZW5jbG9zaW5nIG1hcmtzLCBhbmQgZm9ybWF0IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICIkX2lnbm9yZV89W1s6TW46XVs6TWU6XVs6Q2Y6XV07IgorCisgICAgICAgICAgICAvLyBsb3dlciBhbmQgdXBwZXIgY2FzZSBSb21hbiBsZXR0ZXJzLCBhcG9zdHJvcGh5IGFuZCBkYXNoCisgICAgICAgICAgICAvLyBhcmUgaW4gdGhlIEVuZ2xpc2ggZGljdGlvbmFyeQorICAgICAgICAgICAgKyAiJF9kaWN0aW9uYXJ5Xz1bYS16QS1aXFwnXFwtXTsiCisKKyAgICAgICAgICAgIC8vIEhpbmRpIHBocmFzZSBzZXBhcmF0b3JzCisgICAgICAgICAgICArICIkZGFuZGE9W1x1MDk2NFx1MDk2NV07IgorCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgYWx3YXlzIGNhdXNlIGEgYnJlYWs6IEVUWCwgdGFiLCBMRiwgRkYsIExTLCBhbmQgUFMKKyAgICAgICAgICAgICsgIiRicmVhaz1bXHUwMDAzXHRcblxmXHUyMDI4XHUyMDI5XTsiCisKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgdGhhdCBhbHdheXMgcHJldmVudCBhIGJyZWFrOiB0aGUgbm9uLWJyZWFraW5nIHNwYWNlCisgICAgICAgICAgICAvLyBhbmQgc2ltaWxhciBjaGFyYWN0ZXJzCisgICAgICAgICAgICArICIkbmJzcD1bXHUwMGEwXHUyMDA3XHUyMDExXHVmZWZmXTsiCisKKyAgICAgICAgICAgIC8vIHdoaXRlc3BhY2U6IHNwYWNlIHNlcGFyYXRvcnMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycywgZXhjZXB0IGZvcgorICAgICAgICAgICAgLy8gQ1IgYW5kIHRoZSBvdGhlciBjaGFyYWN0ZXJzIG1lbnRpb25lZCBhYm92ZQorICAgICAgICAgICAgKyAiJHNwYWNlPVtbWzpaczpdWzpDYzpdXS1bJG5ic3AkYnJlYWtccl1dOyIKKworICAgICAgICAgICAgLy8gZGFzaGVzOiBkYXNoIHB1bmN0dWF0aW9uIGFuZCB0aGUgZGlzY3JldGlvbmFyeSBoeXBoZW4sIGV4Y2VwdCBmb3IKKyAgICAgICAgICAgIC8vIG5vbi1icmVha2luZyBoeXBoZW5zCisgICAgICAgICAgICArICIkZGFzaD1bW1s6UGQ6XVx1MDBhZF0tWyRuYnNwXV07IgorCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgc3RpY2sgdG8gYSB3b3JkIGlmIHRoZXkgcHJlY2VkZSBpdDogY3VycmVuY3kgc3ltYm9scworICAgICAgICAgICAgLy8gKGV4Y2VwdCB0aGUgY2VudHMgc2lnbikgYW5kIHN0YXJ0aW5nIHB1bmN0dWF0aW9uCisgICAgICAgICAgICArICIkcHJlX3dvcmQ9W1tbOlNjOl0tW1x1MDBhMl1dWzpQczpdXFxcIlxcXCddOyIKKworICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB0aGF0IHN0aWNrIHRvIGEgd29yZCBpZiB0aGV5IGZvbGxvdyBpdDogZW5kaW5nIHB1bmN0dWF0aW9uLAorICAgICAgICAgICAgLy8gb3RoZXIgcHVuY3R1YXRpb24gdGhhdCB1c3VhbGx5IG9jY3VycyBhdCB0aGUgZW5kIG9mIGEgc2VudGVuY2UsCisgICAgICAgICAgICAvLyBzbWFsbCBLYW5hIGNoYXJhY3RlcnMsIHNvbWUgQ0pLIGRpYWNyaXRpY3MsIGV0Yy4KKyAgICAgICAgICAgICsgIiRwb3N0X3dvcmQ9W1s6UGU6XVxcIVxcXCJcXFwnXFwlXFwuXFwsXFw6XFw7XFw/XHUwMGEyXHUwMGIwXHUwNjZhXHUyMDMwLVx1MjAzNCIKKyAgICAgICAgICAgICAgICAgICAgKyAiXHUyMTAzXHUyMTA1XHUyMTA5XHUzMDAxXHUzMDAyXHUzMDA1XHUzMDQxXHUzMDQzXHUzMDQ1XHUzMDQ3XHUzMDQ5XHUzMDYzIgorICAgICAgICAgICAgICAgICAgICArICJcdTMwODNcdTMwODVcdTMwODdcdTMwOGVcdTMwOTktXHUzMDllXHUzMGExXHUzMGEzXHUzMGE1XHUzMGE3XHUzMGE5IgorICAgICAgICAgICAgICAgICAgICArICJcdTMwYzNcdTMwZTNcdTMwZTVcdTMwZTdcdTMwZWVcdTMwZjVcdTMwZjZcdTMwZmMtXHUzMGZlXHVmZjAxXHVmZjBjIgorICAgICAgICAgICAgICAgICAgICArICJcdWZmMGVcdWZmMWZdOyIKKworICAgICAgICAgICAgLy8gS2Fuamk6IGFjdHVhbGx5IGluY2x1ZGVzIGJvdGggS2FuamkgYW5kIEthbmEsIGV4Y2VwdCBmb3Igc21hbGwgS2FuYSBhbmQKKyAgICAgICAgICAgIC8vIENKSyBkaWFjcml0aWNzCisgICAgICAgICAgICArICIka2Fuamk9W1tcdTRlMDAtXHU5ZmE1XHVmOTAwLVx1ZmEyZFx1MzA0MS1cdTMwOTRcdTMwYTEtXHUzMGZhXS1bJHBvc3Rfd29yZCRfaWdub3JlX11dOyIKKworICAgICAgICAgICAgLy8gZGlnaXRzCisgICAgICAgICAgICArICIkZGlnaXQ9W1s6TmQ6XVs6Tm86XV07IgorCisgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyOiBwZXJpb2RzIGFuZCBjb21tYXMKKyAgICAgICAgICAgICsgIiRtaWRfbnVtPVtcXC5cXCxdOyIKKworICAgICAgICAgICAgLy8gZXZlcnl0aGluZyBub3QgbWVudGlvbmVkIGFib3ZlLCBwbHVzIHRoZSBxdW90ZSBtYXJrcyAod2hpY2ggYXJlIGJvdGgKKyAgICAgICAgICAgIC8vIDxwcmUtd29yZD4sIDxwb3N0LXdvcmQ+LCBhbmQgPGNoYXI+KQorICAgICAgICAgICAgKyAiJGNoYXI9W14kYnJlYWskc3BhY2UkZGFzaCRrYW5qaSRuYnNwJF9pZ25vcmVfJHByZV93b3JkJHBvc3Rfd29yZCRtaWRfbnVtJGRhbmRhXHJcXFwiXFxcJ107IgorCisgICAgICAgICAgICAvLyBhICJudW1iZXIiIGlzIGEgcnVuIG9mIHByZWZpeCBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMsIGZvbGxvd2VkIGJ5IG9uZSBvcgorICAgICAgICAgICAgLy8gbW9yZSBkaWdpdHMgd2l0aCBpc29sYXRlZCBudW1iZXItcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbnRlcnNwZXJzZWQKKyAgICAgICAgICAgICsgIiRudW1iZXI9KFskcHJlX3dvcmQkZGFzaF0qJGRpZ2l0KygkbWlkX251bSRkaWdpdCspKik7IgorCisgICAgICAgICAgICAvLyB0aGUgYmFzaWMgY29yZSBvZiBhIHdvcmQgY2FuIGJlIGVpdGhlciBhICJudW1iZXIiIGFzIGRlZmluZWQgYWJvdmUsIGEgc2luZ2xlCisgICAgICAgICAgICAvLyAiS2FuamkiIGNoYXJhY3Rlciwgb3IgYSBydW4gb2YgYW55IG51bWJlciBvZiBub3QtZXhwbGljaXRseS1tZW50aW9uZWQKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgKHRoaXMgaW5jbHVkZXMgTGF0aW4gbGV0dGVycykKKyAgICAgICAgICAgICsgIiR3b3JkX2NvcmU9KFskcHJlX3dvcmQkY2hhcl0qfCRrYW5qaXwkbnVtYmVyKTsiCisKKyAgICAgICAgICAgIC8vIGEgd29yZCBtYXkgZW5kIHdpdGggYW4gb3B0aW9uYWwgc3VmZml4IHRoYXQgYmUgZWl0aGVyIGEgcnVuIG9mIG9uZSBvcgorICAgICAgICAgICAgLy8gbW9yZSBkYXNoZXMgb3IgYSBydW4gb2Ygd29yZC1zdWZmaXggY2hhcmFjdGVycywgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwKKyAgICAgICAgICAgIC8vIHJ1biBvZiB3aGl0ZXNwYWNlCisgICAgICAgICAgICArICIkd29yZF9zdWZmaXg9KCgkZGFzaCt8JHBvc3Rfd29yZCopJHNwYWNlKik7IgorCisgICAgICAgICAgICAvLyBhIHdvcmQsIHRodXMsIGlzIGFuIG9wdGlvbmFsIHJ1biBvZiB3b3JkLXByZWZpeCBjaGFyYWN0ZXJzLCBmb2xsb3dlZCBieQorICAgICAgICAgICAgLy8gYSB3b3JkIGNvcmUgYW5kIGEgd29yZCBzdWZmaXggKHRoZSBzeW50YXggb2YgPHdvcmQtY29yZT4gYW5kIDx3b3JkLXN1ZmZpeD4KKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IGFsbG93cyBlaXRoZXIgb2YgdGhlbSB0byBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLCBwdXR0aW5nIGEgYnJlYWsKKyAgICAgICAgICAgIC8vIGJldHdlZW4gdGhpbmdzIGxpa2UgIikoIiBvciAiYWFhKGFhYSIKKyAgICAgICAgICAgICsgIiR3b3JkPSgkcHJlX3dvcmQqJHdvcmRfY29yZSR3b3JkX3N1ZmZpeCk7IgorCisgICAgICAgICAgICAvLyBmaW5hbGx5LCB0aGUgcnVsZSB0aGF0IGRvZXMgdGhlIHdvcms6IEtlZXAgdG9nZXRoZXIgYW55IHJ1biBvZiB3b3JkcyB0aGF0CisgICAgICAgICAgICAvLyBhcmUgam9pbmVkIGJ5IHJ1bnMgb2Ygb25lIG9mIG1vcmUgbm9uLXNwYWNpbmcgbWFyay4gIEFsc28ga2VlcCBhIHRyYWlsaW5nCisgICAgICAgICAgICAvLyBsaW5lLWJyZWFrIGNoYXJhY3RlciBvciBDUkxGIGNvbWJpbmF0aW9uIHdpdGggdGhlIHdvcmQuICAobGluZSBzZXBhcmF0b3JzCisgICAgICAgICAgICAvLyAid2luIiBvdmVyIG5ic3AncykKKyAgICAgICAgICAgICsgIiR3b3JkKCRuYnNwKyR3b3JkKSpccj8kYnJlYWs/OyIgfSwKKyAgICAgICAgICAgIAorICAgICAgICAvLyB0aGVzZSB0d28gcmVzb3VyY2VzIHNwZWNpZnkgdGhlIHBhdGhuYW1lcyBvZiB0aGUgZGljdGlvbmFyeSBmaWxlcyB0bworICAgICAgICAvLyB1c2UgZm9yIHdvcmQgYnJlYWtpbmcgYW5kIGxpbmUgYnJlYWtpbmcuICBCb3RoIGN1cnJlbnRseSByZWZlciB0byAKKyAgICAgICAgLy8gYSBmaWxlIGNhbGxlZCBlbmdsaXNoLmRpY3QgcGxhY2VkIGluIGNvbS5pYm0uaWN1LmltcGwuZGF0YQorICAgICAgICAvLyBzb21ld2hlcmUgaW4gdGhlIGNsYXNzIHBhdGguICBJdCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQKKyAgICAgICAgLy8gZW5nbGlzaC5kaWN0IHdhcyBjcmVhdGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHksIGFuZCBkb2Vzbid0CisgICAgICAgIC8vIGNvbWUgYW55d2hlcmUgY2xvc2UgdG8gYmVpbmcgYW4gZXhoYXVzdGl2ZSBkaWN0aW9uYXJ5IG9mIEVuZ2xpc2gKKyAgICAgICAgLy8gd29yZHMgKGJhc2ljYWxseSwgaXQgY29udGFpbnMgYWxsIHRoZSB3b3JkcyBpbiB0aGUgRGVjbGFyYXRpb24gb2YKKyAgICAgICAgLy8gSW5kZXBlbmRlbmNlLCBhbmQgdGhlIFJldmlzZWQgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgYm9vayBvZiBHZW5lc2lzLAorICAgICAgICAvLyBwbHVzIGEgZmV3IG90aGVyIHdvcmRzIHRocm93biBpbiB0byBzaG93IG1vcmUgaW50ZXJlc3RpbmcgY2FzZXMpLgorICAgICAgICAvLyB7ICJXb3JkQnJlYWtEaWN0aW9uYXJ5IiwgImNvbVxcaWJtXFx0ZXh0XFxyZXNvdXJjZXNcXGVuZ2xpc2guZGljdCIgfSwKKyAgICAgICAgLy8geyAiTGluZUJyZWFrRGljdGlvbmFyeSIsICJjb21cXGlibVxcdGV4dFxccmVzb3VyY2VzXFxlbmdsaXNoLmRpY3QiIH0KKyAgICAgICAgeyAiV29yZEJyZWFrRGljdGlvbmFyeSIsIHVybCB9LAorICAgICAgICB7ICJMaW5lQnJlYWtEaWN0aW9uYXJ5IiwgdXJsIH0KKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JiYmkvREJCSURlbW8uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYmJpL0RCQklEZW1vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjUwYmQyZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYmJpL0RCQklEZW1vLmphdmEKQEAgLTAsMCArMSw0NjkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYmJpL0RCQklEZW1vLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDgvMDEgMjA6Mjc6MjAgJCAKKyAqICRSZXZpc2lvbjogMS4xMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8ucmJiaTsKKworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LmRlbW8uKjsKK2ltcG9ydCBqYXZhLmFwcGxldC5BcHBsZXQ7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5LZXlFdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5JdGVtTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuSXRlbUV2ZW50OworaW1wb3J0IGphdmF4LnN3aW5nLkpUZXh0QXJlYTsKK2ltcG9ydCBqYXZheC5zd2luZy5KU2Nyb2xsUGFuZTsKK2ltcG9ydCBqYXZheC5zd2luZy5Cb3JkZXJGYWN0b3J5OworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLmltcGwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkJyZWFrSXRlcmF0b3I7CisKK3B1YmxpYyBjbGFzcyBEQkJJRGVtbyBleHRlbmRzIERlbW9BcHBsZXQKK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJndltdKSB7CisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KG5ldyBMb2NhbGUoImVuIiwgIlVTIiwgIkRFTU8iKSk7CisJCW5ldyBEQkJJRGVtbygpLnNob3dEZW1vKCk7CisgICAgfQorCisgICAgcHVibGljIEZyYW1lIGNyZWF0ZURlbW9GcmFtZShEZW1vQXBwbGV0IGFwcGxldCkgeworICAgICAgICByZXR1cm4gbmV3IERCQklGcmFtZShhcHBsZXQpOworICAgIH0KK30KKworCisKK2NsYXNzIERCQklGcmFtZSBleHRlbmRzIEZyYW1lIGltcGxlbWVudHMgSXRlbUxpc3RlbmVyCit7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNyZWRpdFN0cmluZyA9CisgICAgICAgICJ2MS4xYTksIERlbW8iOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJRUxEX0NPTFVNTlMgPSA0NTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGb250IGNob2ljZUZvbnQgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKyAgICBwcml2YXRlIERlbW9BcHBsZXQgYXBwbGV0OworCisgICAgZmluYWwgU3RyaW5nIHJpZ2h0ID0gIi0tPiI7CisgICAgZmluYWwgU3RyaW5nIGxlZnQgPSAiPC0tIjsKKworICAgIHByaXZhdGUgQnJlYWtJdGVyYXRvciBlbnVtOworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNjdHJsZG93bl8gPSBmYWxzZTsKKworSlRleHRBcmVhIHRleHQ7CisvLyAgICBUZXh0QXJlYSB0ZXh0OworICAgIENob2ljZSBib3VuZDsKKworICAgIHB1YmxpYyBEQkJJRnJhbWUoRGVtb0FwcGxldCBhcHBsZXQpCisgICAgeworICAgICAgICB0aGlzLmFwcGxldCA9IGFwcGxldDsKKyAgICAgICAgaW5pdCgpOworICAgICAgICBzdGFydCgpOworICAgIH0KKworCisKKyAgICBwdWJsaWMgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY2hlY2tDaGFuZ2UoKTsKKyAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMjUwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgZSkgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICovCisgICAgfQorCisgICAgaW50IHMsIGU7CisgICAgaW50IHRzLCB0ZTsKKworICAgIHB1YmxpYyB2b2lkIGNoZWNrQ2hhbmdlKCkKKyAgICB7CisvLyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjaGVja0NoYW5nZS4uLiIpOworICAgICAgICBpZiAoKHRleHQuZ2V0U2VsZWN0aW9uU3RhcnQoKSAmIDB4N0ZGRikgIT0gdHMgfHwKKyAgICAgICAgICAgICh0ZXh0LmdldFNlbGVjdGlvbkVuZCgpICYgMHg3RkZGKSAhPSB0ZSkgeworCisgICAgICAgICAgICAvLyBub3QgdXNlZCBpbnQgdGVtcFMgPSB0ZXh0LmdldFNlbGVjdGlvblN0YXJ0KCkgJiAweDdGRkY7CisgICAgICAgICAgICAvLyBub3QgdXNlZCBpbnQgdGVtcEUgPSB0ZXh0LmdldFNlbGVjdGlvbkVuZCgpICYgMHg3RkZGOworCisvLyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4iKTsKKy8vICAgICAgICAgIHNlbGVjdCgwLCAwKTsKKy8vICAgICAgICAgIHNlbGVjdCh0ZW1wUywgdGVtcEUpOworICAgICAgICAgICAgLy9zZWxlY3QodGVtcFMgLSAodHMgLSBzKSwgdGVtcEUgLSAodGUgLSBlKSk7CisvLyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjwiKTsKKworCisvLyAgICAgICAgICBpZiAocyAhPSB0cyB8fCBlICE9IHRlKSBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgcygiK3MrIikgdHMoIit0cysiKSBlKCIrZSsiKSB0ZSgiK3RlKyIpIik7CisvLyAgICAgICAgICBpZiAodGVtcFMgIT0gdHMgfHwgdGVtcEUgIT0gdGUpIFN5c3RlbS5vdXQucHJpbnRsbigiPnMoIitzKyIpIHRlbXBTKCIrdGVtcFMrIikgZSgiK2UrIikgdGVtcEUoIit0ZW1wRSsiKSIpOworLy8gICAgICAgICAgc2VsZWN0KHMgLSAodHMgLSBzKSwgZSAtICh0ZSAtIGUpKTsKKy8vICAgICAgICAgIGlmICh0ZW1wUyAhPSB0cyB8fCB0ZW1wRSAhPSB0ZSkgU3lzdGVtLm91dC5wcmludGxuKCJzKCIrcysiKSB0ZW1wUygiK3RlbXBTKyIpIGUoIitlKyIpIHRlbXBFKCIrdGVtcEUrIikiKTsKKworLy8gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsa2RzbGtzaiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2VsZWN0KGludCBzSW4sIGludCBlSW4pCisgICAgeworICAgICAgICBzID0gc0luOworICAgICAgICBlID0gZUluOworICAgICAgICB0ZXh0LnNlbGVjdChzLCBlKTsKKyAgICAgICAgdHMgPSB0ZXh0LmdldFNlbGVjdGlvblN0YXJ0KCkgJiAweDdGRkY7CisgICAgICAgIHRlID0gdGV4dC5nZXRTZWxlY3Rpb25FbmQoKSAmIDB4N0ZGRjsKKy8vICAgICAgICBpZiAocyAhPSB0cyB8fCBlICE9IHRlKSB7CisvLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPnMoIitzKyIpIHRzKCIrdHMrIikgZSgiK2UrIikgdGUoIit0ZSsiKSIpOworLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICIrKHRzLXMpKyIsIisodGUtZSkpOworLy8gICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldFNlbGVjdGlvblN0YXJ0KCkKKyAgICB7CisgICAgICAgIGNoZWNrQ2hhbmdlKCk7CisvLyAgICAgIHJldHVybiBzOworICAgICAgICByZXR1cm4gdGV4dC5nZXRTZWxlY3Rpb25TdGFydCgpICYgMHg3RkZGOworICAgIH0KKworCisgICAgcHVibGljIGludCBnZXRTZWxlY3Rpb25FbmQoKQorICAgIHsKKyAgICAgICAgY2hlY2tDaGFuZ2UoKTsKKy8vICAgICAgcmV0dXJuIGU7CisgICAgICAgIHJldHVybiB0ZXh0LmdldFNlbGVjdGlvbkVuZCgpICYgMHg3RkZGOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBzeW5jaHJvbml6ZWQgdm9pZCBzZWxlY3RSYW5nZShpbnQgcywgaW50IGUpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy9pZiAoZ2V0U2VsZWN0aW9uU3RhcnQoKSAhPSBzIHx8IGdldFNlbGVjdGlvbkVuZCgpICE9IGUpIHsKKyAgICAgICAgICAgICAgICAvL3RleHQuc2VsZWN0KHMsIGUpOworICAgICAgICAgICAgICAgIHNlbGVjdChzLGUpOworICAgICAgICAgICAgLy99CisvLyAgICAgICAgICBpZiAoZ2V0U2VsZWN0aW9uU3RhcnQoKSAhPSBzIHx8IGdldFNlbGVjdGlvbkVuZCgpICE9IGUpIHsKKy8vICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFHSCEgc2VsZWN0KCIrcysiLCIrZSsiKSAtPiAoIisKKy8vICAgICAgICAgICAgICBnZXRTZWxlY3Rpb25TdGFydCgpKyIsIitnZXRTZWxlY3Rpb25FbmQoKSsiKSIpOworLy8gICAgICAgICAgICAgIHRleHQuc2VsZWN0KHMgLSAoZ2V0U2VsZWN0aW9uU3RhcnQoKSAtIHMpLCBlIC0gKGdldFNlbGVjdGlvbkVuZCgpIC0gZSkpOworLy8gICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhwKSB7CisgICAgICAgICAgICBlcnJvclRleHQoZXhwLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorCisKKworICAgIHB1YmxpYyB2b2lkIGluaXQoKQorICAgIHsKKyAgICAgICAgYnVpbGRHVUkoKTsKKyAgICB9CisKKworICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkKKyAgICB7CisgICAgfQorCisKKyAgICB2b2lkIGFkZFdpdGhGb250KENvbnRhaW5lciBjb250YWluZXIsIENvbXBvbmVudCBmb28sIEZvbnQgZm9udCkgeworICAgICAgICBpZiAoZm9udCAhPSBudWxsKQorICAgICAgICAgICAgZm9vLnNldEZvbnQoZm9udCk7CisgICAgICAgIGNvbnRhaW5lci5hZGQoZm9vKTsKKyAgICB9CisKKworCisgICBwdWJsaWMgdm9pZCBidWlsZEdVSSgpCisgICAgeworICAgICAgICBzZXRCYWNrZ3JvdW5kKERlbW9VdGlsaXR5LmJnQ29sb3IpOworICAgICAgICBzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKworICAgICAgIFBhbmVsIHRvcFBhbmVsID0gbmV3IFBhbmVsKCk7CisKKyAgICAgICAgICAgIExhYmVsIHRpdGxlTGFiZWwgPQorICAgICAgICAgICAgICAgIG5ldyBMYWJlbCgiVGV4dCBCb3VuZGFyeSBEZW1vIiwgTGFiZWwuQ0VOVEVSKTsKKyAgICAgICAgICAgIHRpdGxlTGFiZWwuc2V0Rm9udChEZW1vVXRpbGl0eS50aXRsZUZvbnQpOworICAgICAgICAgICAgdG9wUGFuZWwuYWRkKHRpdGxlTGFiZWwpOworCisgICAgICAgICAgICAvL0xhYmVsIGRlbW89bmV3IExhYmVsKGNyZWRpdFN0cmluZywgTGFiZWwuQ0VOVEVSKTsKKyAgICAgICAgICAgIC8vZGVtby5zZXRGb250KERlbW9VdGlsaXR5LmNyZWRpdEZvbnQpOworICAgICAgICAgICAgLy90b3BQYW5lbC5hZGQoZGVtbyk7CisKKyAgICAgICAgICAgIFBhbmVsIGNob2ljZVBhbmVsID0gbmV3IFBhbmVsKCk7CisKKyAgICAgICAgICAgIExhYmVsIGRlbW8xPW5ldyBMYWJlbCgiQm91bmRhcmllcyIsIExhYmVsLkxFRlQpOworICAgICAgICAgICAgZGVtbzEuc2V0Rm9udChEZW1vVXRpbGl0eS5sYWJlbEZvbnQpOworICAgICAgICAgICAgY2hvaWNlUGFuZWwuYWRkKGRlbW8xKTsKKworICAgICAgICAgICAgYm91bmQgPSBuZXcgQ2hvaWNlKCk7CisgICAgICAgICAgICAgICAgYm91bmQuc2V0QmFja2dyb3VuZChEZW1vVXRpbGl0eS5jaG9pY2VDb2xvcik7CisgICAgICAgICAgICBib3VuZC5hZGRJdGVtKCJTZW50ZW5jZSIpOworICAgICAgICAgICAgYm91bmQuYWRkSXRlbSgiTGluZSBCcmVhayIpOworICAgICAgICAgICAgYm91bmQuYWRkSXRlbSgiV29yZCIpOworICAgICAgICAgICAgYm91bmQuYWRkSXRlbSgiQ2hhciIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBib3VuZC5hZGRJdGVtTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBpZiAoY2hvaWNlRm9udCAhPSBudWxsKQorICAgICAgICAgICAgICAgIGJvdW5kLnNldEZvbnQoY2hvaWNlRm9udCk7CisKKyAgICAgICAgICAgIGNob2ljZVBhbmVsLmFkZChib3VuZCk7CisgICAgICAgICAgICB0b3BQYW5lbC5hZGQoY2hvaWNlUGFuZWwpOworCisgICAgICAgICAgICBEZW1vVXRpbGl0eS5maXhHcmlkKHRvcFBhbmVsLDEpOworCisKKyAgICAgICAgYWRkKCJOb3J0aCIsIHRvcFBhbmVsKTsKKworCisgICAgICAgICAgICBpbnQgUk9XUyA9IDE1OworICAgICAgICAgICAgaW50IENPTFVNTlMgPSA1MDsKKy8vICAgICAgICAgICAgdGV4dCA9IG5ldyBUZXh0QXJlYShnZXRJbml0aWFsVGV4dCgpLCBST1dTLCBDT0xVTU5TKTsKK3RleHQgPSBuZXcgSlRleHRBcmVhKGdldEluaXRpYWxUZXh0KCksIFJPV1MsIENPTFVNTlMpOwordGV4dC5zZXRMaW5lV3JhcCh0cnVlKTsKK3RleHQuc2V0V3JhcFN0eWxlV29yZCh0cnVlKTsKKyAgICAgICAgICAgIHRleHQuc2V0RWRpdGFibGUodHJ1ZSk7CisgICAgICAgICAgICB0ZXh0LnNlbGVjdEFsbCgpOworICAgICAgICAgICAgdGV4dC5zZXRGb250KERlbW9VdGlsaXR5LmVkaXRGb250KTsKKyAgICAgICAgICAgIHRleHQuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRW1wdHlCb3JkZXIoMiwgMiwgMiwgMikpOworCisgICAgICAgIGFkZCgiQ2VudGVyIiwgbmV3IEpTY3JvbGxQYW5lKHRleHQsIEpTY3JvbGxQYW5lLlZFUlRJQ0FMX1NDUk9MTEJBUl9BTFdBWVMsCisgICAgICAgICAgICAgICAgICAgICAgICBKU2Nyb2xsUGFuZS5IT1JJWk9OVEFMX1NDUk9MTEJBUl9ORVZFUikpOworCisgICAgICAgIFBhbmVsIGNvcHlyaWdodFBhbmVsID0gbmV3IFBhbmVsKCk7CisgICAgICAgIGFkZFdpdGhGb250IChjb3B5cmlnaHRQYW5lbCwKKyAgICAgICAgICAgIG5ldyBMYWJlbChEZW1vVXRpbGl0eS5jb3B5cmlnaHQxLCBMYWJlbC5MRUZUKSxEZW1vVXRpbGl0eS5jcmVkaXRGb250KTsKKyAgICAgICAgRGVtb1V0aWxpdHkuZml4R3JpZChjb3B5cmlnaHRQYW5lbCwxKTsKKyAgICAgICAgYWRkKCJTb3V0aCIsIGNvcHlyaWdodFBhbmVsKTsKKworICAgICAgICAvL2xheW91dCgpOworICAgICAgICBoYW5kbGVFbnVtQ2hhbmdlZCgpOworICAgICAgICAKKyAgICAgICAgZW5hYmxlRXZlbnRzKFdpbmRvd0V2ZW50LldJTkRPV19DTE9TSU5HKTsKKyAgICAgICAgZW5hYmxlRXZlbnRzKEtleUV2ZW50LktFWV9QUkVTU0VEKTsKKyAgICAgICAgZW5hYmxlRXZlbnRzKEtleUV2ZW50LktFWV9SRUxFQVNFRCk7CisKKyAgICAgICAgLy8gKG5ldyBUaHJlYWQodGhpcykpLnN0YXJ0KCk7CisgICAgfQorCisKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbFRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuCisiV2hlbixpbnRoZWNvdXJzZW9maHVtYW5ldmVudHMsaXRiZWNvbWVzbmVjZXNzYXJ5Zm9yb25lcGVvcGxldG9kaXNzb2x2ZXRoZXBvbGl0aWNhbGJvbmRzd2hpY2hoYXZlIgorKyAiY29ubmVjdGVkdGhlbXdpdGhhbm90aGVyLGFuZHRvYXNzdW1lYW1vbmd0aGVwb3dlcnNvZnRoZWVhcnRoLHRoZXNlcGFyYXRlYW5kZXF1YWxzdGF0aW9udG93aGljaHRoZWxhd3MiCisrICJvZm5hdHVyZWFuZG9mbmF0dXJlJ3NHb2RlbnRpdGxldGhlbSxhZGVjZW50cmVzcGVjdHRvdGhlb3BpbmlvbnNvZm1hbmtpbmRyZXF1aXJlc3RoYXR0aGV5c2hvdWxkZGVjbGFyZXRoZSIKKysgImNhdXNlc3doaWNoaW1wZWx0aGVtdG90aGVzZXBhcmF0aW9uLlxuIgorKyAiV2Vob2xkdGhlc2V0cnV0aHN0b2Jlc2VsZi1ldmlkZW50LHRoYXRhbGxtZW5hcmVjcmVhdGVkZXF1YWwsdGhhdHRoZXlhcmVlbmRvd2VkYnl0aGVpckNyZWF0b3J3aXRoY2VydGFpbiIKKysgInVuYWxpZW5hYmxlcmlnaHRzLHRoYXRhbW9uZ3RoZXNlYXJlbGlmZSxsaWJlcnR5YW5kdGhlcHVyc3VpdG9maGFwcGluZXNzLlRoYXR0b3NlY3VyZXRoZXNlcmlnaHRzLGdvdmVybm1lbnRzYXJlIgorKyAiaW5zdGl0dXRlZGFtb25nbWVuLGRlcml2aW5ndGhlaXJqdXN0cG93ZXJzZnJvbXRoZWNvbnNlbnRvZnRoZWdvdmVybmVkLlRoYXR3aGVuZXZlcmFueWZvcm1vZmdvdmVybm1lbnQiCisrICJiZWNvbWVzZGVzdHJ1Y3RpdmV0b3RoZXNlZW5kcyxpdGlzdGhlcmlnaHRvZnRoZXBlb3BsZXRvYWx0ZXJvcnRvYWJvbGlzaGl0LGFuZHRvaW5zdGl0dXRlbmV3Z292ZXJubWVudCxsYXlpbmciCisrICJpdHNmb3VuZGF0aW9ub25zdWNocHJpbmNpcGxlc2FuZG9yZ2FuaXppbmdpdHNwb3dlcnNpbnN1Y2hmb3JtLGFzdG90aGVtc2hhbGxzZWVtbW9zdGxpa2VseXRvZWZmZWN0dGhlaXJzYWZldHkiCisrICJhbmRoYXBwaW5lc3MuUHJ1ZGVuY2UsaW5kZWVkLHdpbGxkaWN0YXRldGhhdGdvdmVybm1lbnRzbG9uZ2VzdGFibGlzaGVkc2hvdWxkbm90YmVjaGFuZ2VkZm9ybGlnaHRhbmR0cmFuc2llbnQiCisrICJjYXVzZXM7YW5kYWNjb3JkaW5nbHlhbGxleHBlcmllbmNlaGF0aHNob3dudGhhdG1hbmtpbmRhcmVtb3JlZGlzcG9zZWR0b3N1ZmZlcix3aGlsZWV2aWxzYXJlc3VmZmVyYWJsZSx0aGFuIgorKyAidG9yaWdodHRoZW1zZWx2ZXNieWFib2xpc2hpbmd0aGVmb3Jtc3Rvd2hpY2h0aGV5YXJlYWNjdXN0b21lZC5CdXR3aGVuYWxvbmd0cmFpbm9mYWJ1c2VzYW5kdXN1cnBhdGlvbnMsIgorKyAicHVyc3VpbmdpbnZhcmlhYmx5dGhlc2FtZW9iamVjdGV2aW5jZXNhZGVzaWdudG9yZWR1Y2V0aGVtdW5kZXJhYnNvbHV0ZWRlc3BvdGlzbSxpdGlzdGhlaXJyaWdodCxpdGlzdGhlaXJkdXR5LCIKKysgInRvdGhyb3dvZmZzdWNoZ292ZXJubWVudCxhbmR0b3Byb3ZpZGVuZXdndWFyZHNmb3J0aGVpcmZ1dHVyZXNlY3VyaXR5Li0tU3VjaGhhc2JlZW50aGVwYXRpZW50c3VmZmVyYW5jZW9mIgorKyAidGhlc2Vjb2xvbmllczthbmRzdWNoaXNub3d0aGVuZWNlc3NpdHl3aGljaGNvbnN0cmFpbnN0aGVtdG9hbHRlcnRoZWlyZm9ybWVyc3lzdGVtc29mZ292ZXJubWVudC5UaGVoaXN0b3J5IgorKyAib2Z0aGVwcmVzZW50S2luZ29mR3JlYXRCcml0YWluaXNhaGlzdG9yeW9mcmVwZWF0ZWRpbmp1cmllc2FuZHVzdXJwYXRpb25zLGFsbGhhdmluZ2luZGlyZWN0b2JqZWN0dGhlIgorKyAiZXN0YWJsaXNobWVudG9mYW5hYnNvbHV0ZXR5cmFubnlvdmVydGhlc2VzdGF0ZXMuVG9wcm92ZXRoaXMsbGV0ZmFjdHNiZXN1Ym1pdHRlZHRvYWNhbmRpZHdvcmxkLlxuIgorKyAiSGVoYXNyZWZ1c2VkaGlzYXNzZW50dG9sYXdzLHRoZW1vc3R3aG9sZXNvbWVhbmRuZWNlc3Nhcnlmb3J0aGVwdWJsaWNnb29kLlxuIgorKyAiSGVoYXNmb3JiaWRkZW5oaXNnb3Zlcm5vcnN0b3Bhc3NsYXdzb2ZpbW1lZGlhdGVhbmRwcmVzc2luZ2ltcG9ydGFuY2UsdW5sZXNzc3VzcGVuZGVkaW50aGVpcm9wZXJhdGlvbnRpbGwiCisrICJoaXNhc3NlbnRzaG91bGRiZW9idGFpbmVkO2FuZHdoZW5zb3N1c3BlbmRlZCxoZWhhc3V0dGVybHluZWdsZWN0ZWR0b2F0dGVuZHRvdGhlbS5cbiIKKysgIkhlaGFzcmVmdXNlZHRvcGFzc290aGVybGF3c2ZvcnRoZWFjY29tbW9kYXRpb25vZmxhcmdlZGlzdHJpY3Rzb2ZwZW9wbGUsdW5sZXNzdGhvc2VwZW9wbGV3b3VsZHJlbGlucXVpc2giCisrICJ0aGVyaWdodG9mcmVwcmVzZW50YXRpb25pbnRoZWxlZ2lzbGF0dXJlLGFyaWdodGluZXN0aW1hYmxldG90aGVtYW5kZm9ybWlkYWJsZXRvdHlyYW50c29ubHkuXG4iCisrICJIZWhhc2NhbGxlZHRvZ2V0aGVybGVnaXNsYXRpdmVib2RpZXNhdHBsYWNlc3VudXN1YWwsdW5jb21mb3J0YWJsZSxhbmRkaXN0YW50ZnJvbXRoZWRlcG9zaXRvcnlvZnRoZWlycHVibGljIgorKyAicmVjb3Jkcyxmb3J0aGVzb2xlcHVycG9zZW9mZmF0aWd1aW5ndGhlbWludG9jb21wbGlhbmNld2l0aGhpc21lYXN1cmVzLlxuIgorKyAiSGVoYXNkaXNzb2x2ZWRyZXByZXNlbnRhdGl2ZWhvdXNlc3JlcGVhdGVkbHksZm9yb3Bwb3Npbmd3aXRobWFubHlmaXJtbmVzc2hpc2ludmFzaW9uc29udGhlcmlnaHRzb2Z0aGVwZW9wbGUuXG4iCisrICJIZWhhc3JlZnVzZWRmb3JhbG9uZ3RpbWUsYWZ0ZXJzdWNoZGlzc29sdXRpb25zLHRvY2F1c2VvdGhlcnN0b2JlZWxlY3RlZDt3aGVyZWJ5dGhlbGVnaXNsYXRpdmVwb3dlcnMsIgorKyAiaW5jYXBhYmxlb2Zhbm5paGlsYXRpb24saGF2ZXJldHVybmVkdG90aGVwZW9wbGVhdGxhcmdlZm9ydGhlaXJleGVyY2lzZTt0aGVzdGF0ZXJlbWFpbmluZ2ludGhlbWVhbnRpbWVleHBvc2VkIgorKyAidG9hbGx0aGVkYW5nZXJzb2ZpbnZhc2lvbmZyb213aXRob3V0LGFuZGNvbnZ1bHNpb25zd2l0aGluLlxuIgorKyAiSGVoYXNlbmRlYXZvcmVkdG9wcmV2ZW50dGhlcG9wdWxhdGlvbm9mdGhlc2VzdGF0ZXM7Zm9ydGhhdHB1cnBvc2VvYnN0cnVjdGluZ3RoZWxhd3Nmb3JuYXR1cmFsaXphdGlvbm9mIgorKyAiZm9yZWlnbmVycztyZWZ1c2luZ3RvcGFzc290aGVyc3RvZW5jb3VyYWdldGhlaXJtaWdyYXRpb25oaXRoZXIsYW5kcmFpc2luZ3RoZWNvbmRpdGlvbnNvZm5ld2FwcHJvcHJpYXRpb25zb2YiCisrICJsYW5kcy5cbiIKKysgIkhlaGFzb2JzdHJ1Y3RlZHRoZWFkbWluaXN0cmF0aW9ub2ZqdXN0aWNlLGJ5cmVmdXNpbmdoaXNhc3NlbnR0b2xhd3Nmb3Jlc3RhYmxpc2hpbmdqdWRpY2lhcnlwb3dlcnMuXG4iCisrICJIZWhhc21hZGVqdWRnZXNkZXBlbmRlbnRvbmhpc3dpbGxhbG9uZSxmb3J0aGV0ZW51cmVvZnRoZWlyb2ZmaWNlcyxhbmR0aGVhbW91bnRhbmRwYXltZW50b2Z0aGVpcnNhbGFyaWVzLlxuIgorKyAiSGVoYXNlcmVjdGVkYW11bHRpdHVkZW9mbmV3b2ZmaWNlcyxhbmRzZW50aGl0aGVyc3dhcm1zb2ZvZmZpY2Vyc3RvaGFyYXNzb3VycGVvcGxlLGFuZGVhdG91dHRoZWlyIgorKyAic3Vic3RhbmNlLlxuIgorKyAiSGVoYXNrZXB0YW1vbmd1cyxpbnRpbWVzb2ZwZWFjZSxzdGFuZGluZ2FybWllc3dpdGhvdXR0aGVjb25zZW50b2ZvdXJsZWdpc2xhdHVyZS5cbiIKKysgIkhlaGFzYWZmZWN0ZWR0b3JlbmRlcnRoZW1pbGl0YXJ5aW5kZXBlbmRlbnRvZmFuZHN1cGVyaW9ydG9jaXZpbHBvd2VyLlxuIgorKyAiSGVoYXNjb21iaW5lZHdpdGhvdGhlcnN0b3N1YmplY3R1c3RvYWp1cmlzZGljdGlvbmZvcmVpZ250b291cmNvbnN0aXR1dGlvbixhbmR1bmFja25vd2xlZGdlZGJ5b3VybGF3czsiCisrICJnaXZpbmdoaXNhc3NlbnR0b3RoZWlyYWN0c29mcHJldGVuZGVkbGVnaXNsYXRpb246XG4iCisrICJGb3JxdWFydGVyaW5nbGFyZ2Vib2RpZXNvZmFybWVkdHJvb3BzYW1vbmd1czpcbiIKKysgIkZvcnByb3RlY3Rpbmd0aGVtLGJ5bW9ja3RyaWFsLGZyb21wdW5pc2htZW50Zm9yYW55bXVyZGVyc3doaWNodGhleXNob3VsZGNvbW1pdG9udGhlaW5oYWJpdGFudHNvZnRoZXNlIgorKyAic3RhdGVzOlxuIgorKyAiRm9yY3V0dGluZ29mZm91cnRyYWRld2l0aGFsbHBhcnRzb2Z0aGV3b3JsZDpcbiIKKysgIkZvcmltcG9zaW5ndGF4ZXNvbnVzd2l0aG91dG91cmNvbnNlbnQ6XG4iCisrICJGb3JkZXByaXZpbmd1c2lubWFueWNhc2VzLG9mdGhlYmVuZWZpdHNvZnRyaWFsYnlqdXJ5OlxuIgorKyAiRm9ydHJhbnNwb3J0aW5ndXNiZXlvbmRzZWFzdG9iZXRyaWVkZm9ycHJldGVuZGVkb2ZmZW5zZXM6XG4iCisrICJGb3JhYm9saXNoaW5ndGhlZnJlZXN5c3RlbW9mRW5nbGlzaGxhd3NpbmFuZWlnaGJvcmluZ3Byb3ZpbmNlLGVzdGFibGlzaGluZ3RoZXJlaW5hbmFyYml0cmFyeWdvdmVybm1lbnQsYW5kIgorKyAiZW5sYXJnaW5naXRzYm91bmRhcmllc3NvYXN0b3JlbmRlcml0YXRvbmNlYW5leGFtcGxlYW5kZml0aW5zdHJ1bWVudGZvcmludHJvZHVjaW5ndGhlc2FtZWFic29sdXRlcnVsZWludGhlc2UiCisrICJjb2xvbmllczpcbiIKKysgIkZvcnRha2luZ2F3YXlvdXJjaGFydGVycyxhYm9saXNoaW5nb3VybW9zdHZhbHVhYmxlbGF3cyxhbmRhbHRlcmluZ2Z1bmRhbWVudGFsbHl0aGVmb3Jtc29mb3VyZ292ZXJubWVudHM6XG4iCisrICJGb3JzdXNwZW5kaW5nb3Vyb3dubGVnaXNsYXR1cmVzLGFuZGRlY2xhcmluZ3RoZW1zZWx2ZXNpbnZlc3RlZHdpdGhwb3dlcnRvbGVnaXNsYXRlZm9ydXNpbmFsbGNhc2Vzd2hhdHNvZXZlci5cbiIKKysgIkhlaGFzYWJkaWNhdGVkZ292ZXJubWVudGhlcmUsYnlkZWNsYXJpbmd1c291dG9maGlzcHJvdGVjdGlvbmFuZHdhZ2luZ3dhcmFnYWluc3R1cy5cbiIKKysgIkhlaGFzcGx1bmRlcmVkb3Vyc2VhcyxyYXZhZ2Vkb3VyY29hc3RzLGJ1cm5lZG91cnRvd25zLGFuZGRlc3Ryb3llZHRoZWxpdmVzb2ZvdXJwZW9wbGUuXG4iCisrICJIZWlzYXR0aGlzdGltZXRyYW5zcG9ydGluZ2xhcmdlYXJtaWVzb2Zmb3JlaWdubWVyY2VuYXJpZXN0b2NvbXBsZXRldGhld29ya3NvZmRlYXRoLGRlc29sYXRpb25hbmR0eXJhbm55LCIKKysgImFscmVhZHliZWd1bndpdGhjaXJjdW1zdGFuY2Vzb2ZjcnVlbHR5YW5kcGVyZmlkeXNjYXJjZWx5cGFyYWxsZWxlZGludGhlbW9zdGJhcmJhcm91c2FnZXMsYW5kdG90YWxseXVud29ydGh5IgorKyAidGhlaGVhZG9mYWNpdmlsaXplZG5hdGlvbi5cbiIKKysgIkhlaGFzY29uc3RyYWluZWRvdXJmZWxsb3djaXRpemVuc3Rha2VuY2FwdGl2ZW9udGhlaGlnaHNlYXN0b2JlYXJhcm1zYWdhaW5zdHRoZWlyY291bnRyeSx0b2JlY29tZXRoZSIKKysgImV4ZWN1dGlvbmVyc29mdGhlaXJmcmllbmRzYW5kYnJldGhyZW4sb3J0b2ZhbGx0aGVtc2VsdmVzYnl0aGVpcmhhbmRzLlxuIgorKyAiSGVoYXNleGNpdGVkZG9tZXN0aWNpbnN1cnJlY3Rpb25zYW1vbmdzdHVzLGFuZGhhc2VuZGVhdm9yZWR0b2JyaW5nb250aGVpbmhhYml0YW50c29mb3VyZnJvbnRpZXJzLHRoZSIKKysgIm1lcmNpbGVzc0luZGlhbnNhdmFnZXMsd2hvc2Vrbm93bnJ1bGVvZndhcmZhcmUsaXN1bmRpc3Rpbmd1aXNoZWRkZXN0cnVjdGlvbm9mYWxsYWdlcyxzZXhlc2FuZGNvbmRpdGlvbnMuXG4iCisrICJJbmV2ZXJ5c3RhZ2VvZnRoZXNlb3BwcmVzc2lvbnN3ZWhhdmVwZXRpdGlvbmVkZm9ycmVkcmVzc2ludGhlbW9zdGh1bWJsZXRlcm1zOm91cnJlcGVhdGVkcGV0aXRpb25zaGF2ZSIKKysgImJlZW5hbnN3ZXJlZG9ubHlieXJlcGVhdGVkaW5qdXJ5LkFwcmluY2Usd2hvc2VjaGFyYWN0ZXJpc3RodXNtYXJrZWRieWV2ZXJ5YWN0d2hpY2htYXlkZWZpbmVhdHlyYW50LGlzIgorKyAidW5maXR0b2JldGhlcnVsZXJvZmFmcmVlcGVvcGxlLlxuIgorKyAiTm9yaGF2ZXdlYmVlbndhbnRpbmdpbmF0dGVudGlvbnRvb3VyQnJpdGlzaGJyZXRocmVuLldlaGF2ZXdhcm5lZHRoZW1mcm9tdGltZXRvdGltZW9mYXR0ZW1wdHNieXRoZWlyIgorKyAibGVnaXNsYXR1cmV0b2V4dGVuZGFudW53YXJyYW50YWJsZWp1cmlzZGljdGlvbm92ZXJ1cy5XZWhhdmVyZW1pbmRlZHRoZW1vZnRoZWNpcmN1bXN0YW5jZXNvZm91cmVtaWdyYXRpb24iCisrICJhbmRzZXR0bGVtZW50aGVyZS5XZWhhdmVhcHBlYWxlZHRvdGhlaXJuYXRpdmVqdXN0aWNlYW5kbWFnbmFuaW1pdHksYW5kd2VoYXZlY29uanVyZWR0aGVtYnl0aGV0aWVzb2ZvdXIiCisrICJjb21tb25raW5kcmVkdG9kaXNhdm93dGhlc2V1c3VycGF0aW9ucyx3aGljaCx3b3VsZGluZXZpdGFibHlpbnRlcnJ1cHRvdXJjb25uZWN0aW9uc2FuZGNvcnJlc3BvbmRlbmNlLldlIgorKyAibXVzdCx0aGVyZWZvcmUsYWNxdWllc2NlaW50aGVuZWNlc3NpdHksd2hpY2hkZW5vdW5jZXNvdXJzZXBhcmF0aW9uLGFuZGhvbGR0aGVtLGFzd2Vob2xkdGhlcmVzdG9mbWFua2luZCwiCisrICJlbmVtaWVzaW53YXIsaW5wZWFjZWZyaWVuZHMuXG4iCisrICJXZSx0aGVyZWZvcmUsdGhlcmVwcmVzZW50YXRpdmVzb2Z0aGVVbml0ZWRTdGF0ZXNvZkFtZXJpY2EsaW5HZW5lcmFsQ29uZ3Jlc3MsYXNzZW1ibGVkLGFwcGVhbGluZ3RvdGhlIgorKyAiU3VwcmVtZUp1ZGdlb2Z0aGV3b3JsZGZvcnRoZXJlY3RpdHVkZW9mb3VyaW50ZW50aW9ucyxkbyxpbnRoZW5hbWUsYW5kYnl0aGVhdXRob3JpdHlvZnRoZWdvb2RwZW9wbGVvZiIKKysgInRoZXNlY29sb25pZXMsc29sZW1ubHlwdWJsaXNoYW5kZGVjbGFyZSx0aGF0dGhlc2V1bml0ZWRjb2xvbmllc2FyZSxhbmRvZnJpZ2h0b3VnaHR0b2JlZnJlZWFuZGluZGVwZW5kZW50IgorKyAic3RhdGVzO3RoYXR0aGV5YXJlYWJzb2x2ZWRmcm9tYWxsYWxsZWdpYW5jZXRvdGhlQnJpdGlzaENyb3duLGFuZHRoYXRhbGxwb2xpdGljYWxjb25uZWN0aW9uYmV0d2VlbnRoZW1hbmR0aGUiCisrICJzdGF0ZW9mR3JlYXRCcml0YWluLGlzYW5kb3VnaHR0b2JldG90YWxseWRpc3NvbHZlZDthbmR0aGF0YXNmcmVlYW5kaW5kZXBlbmRlbnRzdGF0ZXMsdGhleWhhdmVmdWxscG93ZXJ0byIKKysgImxldmV5d2FyLGNvbmNsdWRlcGVhY2UsY29udHJhY3RhbGxpYW5jZXMsZXN0YWJsaXNoY29tbWVyY2UsYW5kdG9kb2FsbG90aGVyYWN0c2FuZHRoaW5nc3doaWNoaW5kZXBlbmRlbnQiCisrICJzdGF0ZXNtYXlvZnJpZ2h0ZG8uQW5kZm9ydGhlc3VwcG9ydG9mdGhpc2RlY2xhcmF0aW9uLHdpdGhhZmlybXJlbGlhbmNlb250aGVwcm90ZWN0aW9ub2ZEaXZpbmVQcm92aWRlbmNlLHdlIgorKyAibXV0dWFsbHlwbGVkZ2V0b2VhY2hvdGhlcm91cmxpdmVzLG91cmZvcnR1bmVzYW5kb3Vyc2FjcmVkaG9ub3IuXG4iOworICAgIH0KKworCisgICAgcHVibGljIHZvaWQgaGFuZGxlRW51bUNoYW5nZWQoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHMgPSBib3VuZC5nZXRTZWxlY3RlZEl0ZW0oKTsKKyAgICAgICAgaWYgKHMuZXF1YWxzKCJDaGFyIikpIHsKKyAgICAgICAgICAgIGVycm9yVGV4dCgiZ2V0Q2hhcmFjdGVySW5zdGFuY2UiKTsKKyAgICAgICAgICAgIGVudW0gPSBCcmVha0l0ZXJhdG9yLmdldENoYXJhY3Rlckluc3RhbmNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocy5lcXVhbHMoIldvcmQiKSkgeworICAgICAgICAgICAgZXJyb3JUZXh0KCJnZXRXb3JkSW5zdGFuY2UiKTsKKyAgICAgICAgICAgIGVudW0gPSBCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHMuZXF1YWxzKCJMaW5lIEJyZWFrIikpIHsKKyAgICAgICAgICAgIGVycm9yVGV4dCgiZ2V0TGluZUluc3RhbmNlIik7CisgICAgICAgICAgICBlbnVtID0gQnJlYWtJdGVyYXRvci5nZXRMaW5lSW5zdGFuY2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8qIGlmIChzLmVxdWFscygiU2VudGVuY2UiKSkgKi8geworICAgICAgICAgICAgZXJyb3JUZXh0KCJnZXRTZW50ZW5jZUluc3RhbmNlIik7CisgICAgICAgICAgICBlbnVtID0gQnJlYWtJdGVyYXRvci5nZXRTZW50ZW5jZUluc3RhbmNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZW51bS5zZXRUZXh0KHRleHQuZ2V0VGV4dCgpKTsKKyAgICAgICAgc2VsZWN0UmFuZ2UoMCwgMCk7CisgICAgICAgIC8vdGV4dC5zZWxlY3QoMCwwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBoYW5kbGVGb3J3YXJkKCkKKyAgICB7CisgICAgICAgIHRyeSB7CisvLyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVudGVyaW5nIGhhbmRsZUZvcndhcmQiKTsKKyAgICAgICAgICAgIGVudW0uc2V0VGV4dCh0ZXh0LmdldFRleHQoKSk7CisgICAgICAgICAgICBpbnQgb2xkU3RhcnQgPSBnZXRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICAgICAgaW50IG9sZEVuZCA9IGdldFNlbGVjdGlvbkVuZCgpOworCisvLyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhhbmRsZUZvcndhcmQ6IG9sZFN0YXJ0PSIgKyBvbGRTdGFydCArICIsIG9sZEVuZD0iICsgb2xkRW5kKTsKKworICAgICAgICAgICAgaWYgKG9sZEVuZCA8IDEpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RSYW5nZSgwLCBlbnVtLmZvbGxvd2luZygwKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcyA9IGVudW0uZm9sbG93aW5nKG9sZEVuZC0xKTsKKyAgICAgICAgICAgICAgICBpbnQgZSA9IGVudW0ubmV4dCgpOworICAgICAgICAgICAgICAgIGlmIChlID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGUgPSBzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZWxlY3RSYW5nZShzLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vdGV4dC5zZWxlY3QocywgZSk7CisgICAgICAgICAgICBlcnJvclRleHQoIjwiICsgb2xkU3RhcnQgKyAiLCIgKyBvbGRFbmQgKyAiPiAtPiA8IiArCisgICAgICAgICAgICAgICAgcyArICIsIiArIGUgKyAiPiIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhwKSB7CisgICAgICAgICAgICBlcnJvclRleHQoZXhwLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgaGFuZGxlQmFja3dhcmQoKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGVudW0uc2V0VGV4dCh0ZXh0LmdldFRleHQoKSk7CisgICAgICAgICAgICBpbnQgb2xkU3RhcnQgPSBnZXRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICAgICAgaW50IG9sZEVuZCA9IGdldFNlbGVjdGlvbkVuZCgpOworICAgICAgICAgICAgaWYgKG9sZFN0YXJ0IDwgMSkgeworICAgICAgICAgICAgICAgIHNlbGVjdFJhbmdlKDAsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGUgPSBlbnVtLmZvbGxvd2luZyhvbGRTdGFydC0xKTsKKyAgICAgICAgICAgICAgICBpbnQgcyA9IGVudW0ucHJldmlvdXMoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3RSYW5nZShzLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vdGV4dC5zZWxlY3QocywgZSk7CisgICAgICAgICAgICBlcnJvclRleHQoIjwiICsgb2xkU3RhcnQgKyAiLCIgKyBvbGRFbmQgKyAiPiAtPiA8IiArIHMgKyAiLCIgKyBlICsgIj4iKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4cCkgeworICAgICAgICAgICAgZXJyb3JUZXh0KGV4cC50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGl0ZW1TdGF0ZUNoYW5nZWQoSXRlbUV2ZW50IGV2dCkKKyAgICB7CisgICAgICAgIGlmIChldnQuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBDaG9pY2UpIHsKKyAgICAgICAgICAgIGhhbmRsZUVudW1DaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBlcnJvclRleHQoU3RyaW5nIHMpCisgICAgeworICAgICAgIGlmIChERUJVRykKKyAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzV2luZG93RXZlbnQoV2luZG93RXZlbnQgZXZ0KQorICAgIHsKKyAgICAgICAgaWYgKGV2dC5nZXRJRCgpID09IFdpbmRvd0V2ZW50LldJTkRPV19DTE9TSU5HICYmIAorICAgICAgICAgICAgZXZ0LmdldFdpbmRvdygpID09IHRoaXMpIHsKKyAgICAgICAgICAgIGhpZGUoKTsKKyAgICAgICAgICAgIGRpc3Bvc2UoKTsKKyAgICAgICAgICAgIGlmIChhcHBsZXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFwcGxldC5kZW1vQ2xvc2VkKCk7CisgICAgICAgICAgICB9IGVsc2UgU3lzdGVtLmV4aXQoMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0tleUV2ZW50KEtleUV2ZW50IGV2dCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZXZ0LmdldElEKCkpIHsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZX1BSRVNTRUQgOgorICAgICAgICAgICAgICAgIGlmIChldnQuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0NPTlRST0wpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNjdHJsZG93bl8gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZX1JFTEVBU0VEIDoKKyAgICAgICAgICAgICAgICAvLyBrZXkgZGV0ZWN0aW9uIGZvciBsZWZ0IGFuZCByaWdodCBidXR0b25zIGFyZSByZW1vdmVkCisgICAgICAgICAgICAgICAgLy8gdG8gZW11bGF0ZSB0aGUgb2xkIHJlbGVhc2UgYmVoYXZpb3VyCisgICAgICAgICAgICAgICAgaW50IGtleSA9IGV2dC5nZXRLZXlDb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBLZXlFdmVudC5WS19OICYmIGlzY3RybGRvd25fKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUZvcndhcmQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBpZiAoa2V5ID09IEtleUV2ZW50LlZLX1AgJiYgaXNjdHJsZG93bl8pIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQmFja3dhcmQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBpZiAoa2V5ID09IEtleUV2ZW50LlZLX0NPTlRST0wpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNjdHJsZG93bl8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJiaS9SQkJJRGVtby5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JiYmkvUkJCSURlbW8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDJiMzgwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JiYmkvUkJCSURlbW8uamF2YQpAQCAtMCwwICsxLDQ1MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JiYmkvUkJCSURlbW8uamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wMSAyMDoyNzoyMSAkIAorICogJFJldmlzaW9uOiAxLjcgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLnJiYmk7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby4qOworaW1wb3J0IGphdmEuYXBwbGV0LkFwcGxldDsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LktleUV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lkl0ZW1MaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5JdGVtRXZlbnQ7CitpbXBvcnQgamF2YXguc3dpbmcuSlRleHRBcmVhOworaW1wb3J0IGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lOworaW1wb3J0IGphdmF4LnN3aW5nLkJvcmRlckZhY3Rvcnk7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LmRlbW8uaW1wbC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQnJlYWtJdGVyYXRvcjsKKworcHVibGljIGNsYXNzIFJCQklEZW1vIGV4dGVuZHMgRGVtb0FwcGxldAoreworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmd2W10pIHsKKyAgICAgICAgTG9jYWxlLnNldERlZmF1bHQobmV3IExvY2FsZSgiZW4iLCAiVVMiKSk7CisJCW5ldyBSQkJJRGVtbygpLnNob3dEZW1vKCk7CisgICAgfQorCisgICAgcHVibGljIEZyYW1lIGNyZWF0ZURlbW9GcmFtZShEZW1vQXBwbGV0IGFwcGxldCkgeworICAgICAgICByZXR1cm4gbmV3IFJCQklGcmFtZShhcHBsZXQpOworICAgIH0KK30KKworCisKK2NsYXNzIFJCQklGcmFtZSBleHRlbmRzIEZyYW1lIGltcGxlbWVudHMgSXRlbUxpc3RlbmVyCit7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNyZWRpdFN0cmluZyA9CisgICAgICAgICJ2MS4xYTksIERlbW8iOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJRUxEX0NPTFVNTlMgPSA0NTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGb250IGNob2ljZUZvbnQgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKyAgICBwcml2YXRlIERlbW9BcHBsZXQgYXBwbGV0OworCisgICAgZmluYWwgU3RyaW5nIHJpZ2h0ID0gIi0tPiI7CisgICAgZmluYWwgU3RyaW5nIGxlZnQgPSAiPC0tIjsKKworICAgIHByaXZhdGUgQnJlYWtJdGVyYXRvciBlbnVtOworICAgIHByaXZhdGUgYm9vbGVhbiAgICAgICBpc2N0cmxkb3duXyA9IGZhbHNlOworCitKVGV4dEFyZWEgdGV4dDsKKy8vICAgIFRleHRBcmVhIHRleHQ7CisgICAgQ2hvaWNlIGJvdW5kOworCisgICAgcHVibGljIFJCQklGcmFtZShEZW1vQXBwbGV0IGFwcGxldCkKKyAgICB7CisgICAgICAgIHRoaXMuYXBwbGV0ID0gYXBwbGV0OworICAgICAgICBpbml0KCk7CisgICAgICAgIHN0YXJ0KCk7CisgICAgfQorCisKKworICAgIHB1YmxpYyB2b2lkIHJ1bigpCisgICAgeworICAgICAgICAvKgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjaGVja0NoYW5nZSgpOworICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgyNTApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICB9CisKKyAgICBpbnQgcywgZTsKKyAgICBpbnQgdHMsIHRlOworCisgICAgcHVibGljIHZvaWQgY2hlY2tDaGFuZ2UoKQorICAgIHsKKy8vICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNoZWNrQ2hhbmdlLi4uIik7CisgICAgICAgIGlmICgodGV4dC5nZXRTZWxlY3Rpb25TdGFydCgpICYgMHg3RkZGKSAhPSB0cyB8fAorICAgICAgICAgICAgKHRleHQuZ2V0U2VsZWN0aW9uRW5kKCkgJiAweDdGRkYpICE9IHRlKSB7CisKKyAgICAgICAgICAgIC8vIG5vdCB1c2VkIGludCB0ZW1wUyA9IHRleHQuZ2V0U2VsZWN0aW9uU3RhcnQoKSAmIDB4N0ZGRjsKKyAgICAgICAgICAgIC8vIG5vdCB1c2VkIGludCB0ZW1wRSA9IHRleHQuZ2V0U2VsZWN0aW9uRW5kKCkgJiAweDdGRkY7CisKKy8vICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPiIpOworLy8gICAgICAgICAgc2VsZWN0KDAsIDApOworLy8gICAgICAgICAgc2VsZWN0KHRlbXBTLCB0ZW1wRSk7CisgICAgICAgICAgICAvL3NlbGVjdCh0ZW1wUyAtICh0cyAtIHMpLCB0ZW1wRSAtICh0ZSAtIGUpKTsKKy8vICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPCIpOworCisKKy8vICAgICAgICAgIGlmIChzICE9IHRzIHx8IGUgIT0gdGUpIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBzKCIrcysiKSB0cygiK3RzKyIpIGUoIitlKyIpIHRlKCIrdGUrIikiKTsKKy8vICAgICAgICAgIGlmICh0ZW1wUyAhPSB0cyB8fCB0ZW1wRSAhPSB0ZSkgU3lzdGVtLm91dC5wcmludGxuKCI+cygiK3MrIikgdGVtcFMoIit0ZW1wUysiKSBlKCIrZSsiKSB0ZW1wRSgiK3RlbXBFKyIpIik7CisvLyAgICAgICAgICBzZWxlY3QocyAtICh0cyAtIHMpLCBlIC0gKHRlIC0gZSkpOworLy8gICAgICAgICAgaWYgKHRlbXBTICE9IHRzIHx8IHRlbXBFICE9IHRlKSBTeXN0ZW0ub3V0LnByaW50bG4oInMoIitzKyIpIHRlbXBTKCIrdGVtcFMrIikgZSgiK2UrIikgdGVtcEUoIit0ZW1wRSsiKSIpOworCisvLyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxrZHNsa3NqIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZWxlY3QoaW50IHNJbiwgaW50IGVJbikKKyAgICB7CisgICAgICAgIHMgPSBzSW47CisgICAgICAgIGUgPSBlSW47CisgICAgICAgIHRleHQuc2VsZWN0KHMsIGUpOworICAgICAgICB0cyA9IHRleHQuZ2V0U2VsZWN0aW9uU3RhcnQoKSAmIDB4N0ZGRjsKKyAgICAgICAgdGUgPSB0ZXh0LmdldFNlbGVjdGlvbkVuZCgpICYgMHg3RkZGOworLy8gICAgICAgIGlmIChzICE9IHRzIHx8IGUgIT0gdGUpIHsKKy8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+cygiK3MrIikgdHMoIit0cysiKSBlKCIrZSsiKSB0ZSgiK3RlKyIpIik7CisvLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIisodHMtcykrIiwiKyh0ZS1lKSk7CisvLyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0U2VsZWN0aW9uU3RhcnQoKQorICAgIHsKKyAgICAgICAgY2hlY2tDaGFuZ2UoKTsKKy8vICAgICAgcmV0dXJuIHM7CisgICAgICAgIHJldHVybiB0ZXh0LmdldFNlbGVjdGlvblN0YXJ0KCkgJiAweDdGRkY7CisgICAgfQorCisKKyAgICBwdWJsaWMgaW50IGdldFNlbGVjdGlvbkVuZCgpCisgICAgeworICAgICAgICBjaGVja0NoYW5nZSgpOworLy8gICAgICByZXR1cm4gZTsKKyAgICAgICAgcmV0dXJuIHRleHQuZ2V0U2VsZWN0aW9uRW5kKCkgJiAweDdGRkY7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHN5bmNocm9uaXplZCB2b2lkIHNlbGVjdFJhbmdlKGludCBzLCBpbnQgZSkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvL2lmIChnZXRTZWxlY3Rpb25TdGFydCgpICE9IHMgfHwgZ2V0U2VsZWN0aW9uRW5kKCkgIT0gZSkgeworICAgICAgICAgICAgICAgIC8vdGV4dC5zZWxlY3QocywgZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0KHMsZSk7CisgICAgICAgICAgICAvL30KKy8vICAgICAgICAgIGlmIChnZXRTZWxlY3Rpb25TdGFydCgpICE9IHMgfHwgZ2V0U2VsZWN0aW9uRW5kKCkgIT0gZSkgeworLy8gICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQUdIISBzZWxlY3QoIitzKyIsIitlKyIpIC0+ICgiKworLy8gICAgICAgICAgICAgIGdldFNlbGVjdGlvblN0YXJ0KCkrIiwiK2dldFNlbGVjdGlvbkVuZCgpKyIpIik7CisvLyAgICAgICAgICAgICAgdGV4dC5zZWxlY3QocyAtIChnZXRTZWxlY3Rpb25TdGFydCgpIC0gcyksIGUgLSAoZ2V0U2VsZWN0aW9uRW5kKCkgLSBlKSk7CisvLyAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleHApIHsKKyAgICAgICAgICAgIGVycm9yVGV4dChleHAudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKworCisgICAgcHVibGljIHZvaWQgaW5pdCgpCisgICAgeworICAgICAgICBidWlsZEdVSSgpOworICAgIH0KKworCisgICAgcHVibGljIHZvaWQgc3RhcnQoKQorICAgIHsKKyAgICB9CisKKworICAgIHZvaWQgYWRkV2l0aEZvbnQoQ29udGFpbmVyIGNvbnRhaW5lciwgQ29tcG9uZW50IGZvbywgRm9udCBmb250KSB7CisgICAgICAgIGlmIChmb250ICE9IG51bGwpCisgICAgICAgICAgICBmb28uc2V0Rm9udChmb250KTsKKyAgICAgICAgY29udGFpbmVyLmFkZChmb28pOworICAgIH0KKworCisKKyAgIHB1YmxpYyB2b2lkIGJ1aWxkR1VJKCkKKyAgICB7CisgICAgICAgIHNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuYmdDb2xvcik7CisgICAgICAgIHNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCisgICAgICAgUGFuZWwgdG9wUGFuZWwgPSBuZXcgUGFuZWwoKTsKKworICAgICAgICAgICAgTGFiZWwgdGl0bGVMYWJlbCA9CisgICAgICAgICAgICAgICAgbmV3IExhYmVsKCJEZXZhIFRleHQgQm91bmRhcnkgRGVtbyIsIExhYmVsLkNFTlRFUik7CisgICAgICAgICAgICB0aXRsZUxhYmVsLnNldEZvbnQoRGVtb1V0aWxpdHkudGl0bGVGb250KTsKKyAgICAgICAgICAgIHRvcFBhbmVsLmFkZCh0aXRsZUxhYmVsKTsKKworICAgICAgICAgICAgLy9MYWJlbCBkZW1vPW5ldyBMYWJlbChjcmVkaXRTdHJpbmcsIExhYmVsLkNFTlRFUik7CisgICAgICAgICAgICAvL2RlbW8uc2V0Rm9udChEZW1vVXRpbGl0eS5jcmVkaXRGb250KTsKKyAgICAgICAgICAgIC8vdG9wUGFuZWwuYWRkKGRlbW8pOworCisgICAgICAgICAgICBQYW5lbCBjaG9pY2VQYW5lbCA9IG5ldyBQYW5lbCgpOworCisgICAgICAgICAgICBMYWJlbCBkZW1vMT1uZXcgTGFiZWwoIkJvdW5kYXJpZXMiLCBMYWJlbC5MRUZUKTsKKyAgICAgICAgICAgIGRlbW8xLnNldEZvbnQoRGVtb1V0aWxpdHkubGFiZWxGb250KTsKKyAgICAgICAgICAgIGNob2ljZVBhbmVsLmFkZChkZW1vMSk7CisKKyAgICAgICAgICAgIGJvdW5kID0gbmV3IENob2ljZSgpOworICAgICAgICAgICAgICAgIGJvdW5kLnNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuY2hvaWNlQ29sb3IpOworICAgICAgICAgICAgYm91bmQuYWRkSXRlbSgiU2VudGVuY2UiKTsKKyAgICAgICAgICAgIGJvdW5kLmFkZEl0ZW0oIkxpbmUgQnJlYWsiKTsKKyAgICAgICAgICAgIGJvdW5kLmFkZEl0ZW0oIldvcmQiKTsKKyAgICAgICAgICAgIGJvdW5kLmFkZEl0ZW0oIkNoYXIiKTsKKyAgICAgICAgICAgIGJvdW5kLmFkZEl0ZW1MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIGlmIChjaG9pY2VGb250ICE9IG51bGwpCisgICAgICAgICAgICAgICAgYm91bmQuc2V0Rm9udChjaG9pY2VGb250KTsKKworICAgICAgICAgICAgY2hvaWNlUGFuZWwuYWRkKGJvdW5kKTsKKyAgICAgICAgICAgIHRvcFBhbmVsLmFkZChjaG9pY2VQYW5lbCk7CisKKyAgICAgICAgICAgIERlbW9VdGlsaXR5LmZpeEdyaWQodG9wUGFuZWwsMSk7CisKKworICAgICAgICBhZGQoIk5vcnRoIiwgdG9wUGFuZWwpOworCisKKyAgICAgICAgICAgIGludCBST1dTID0gMTU7CisgICAgICAgICAgICBpbnQgQ09MVU1OUyA9IDUwOworLy8gICAgICAgICAgICB0ZXh0ID0gbmV3IFRleHRBcmVhKGdldEluaXRpYWxUZXh0KCksIFJPV1MsIENPTFVNTlMpOworICAgICAgICAgICAgdGV4dCA9IG5ldyBKVGV4dEFyZWEoZ2V0SW5pdGlhbFRleHQoKSwgUk9XUywgQ09MVU1OUyk7CisgICAgICAgICAgICB0ZXh0LnNldExpbmVXcmFwKHRydWUpOworICAgICAgICAgICAgdGV4dC5zZXRXcmFwU3R5bGVXb3JkKHRydWUpOworICAgICAgICAgICAgdGV4dC5zZXRFZGl0YWJsZSh0cnVlKTsKKyAgICAgICAgICAgIHRleHQuc2VsZWN0QWxsKCk7CisgICAgICAgICAgICB0ZXh0LnNldEZvbnQobmV3IEZvbnQoIkRldmFuYWdhcmkgTVQgZm9yIElCTSIsIEZvbnQuUExBSU4sIDQ4KSk7CisgICAgICAgICAgICB0ZXh0LnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUVtcHR5Qm9yZGVyKDIsIDIsIDIsIDIpKTsKKworICAgICAgICBhZGQoIkNlbnRlciIsIG5ldyBKU2Nyb2xsUGFuZSh0ZXh0LCBKU2Nyb2xsUGFuZS5WRVJUSUNBTF9TQ1JPTExCQVJfQUxXQVlTLAorICAgICAgICAgICAgICAgICAgICAgICAgSlNjcm9sbFBhbmUuSE9SSVpPTlRBTF9TQ1JPTExCQVJfTkVWRVIpKTsKKworICAgICAgICBQYW5lbCBjb3B5cmlnaHRQYW5lbCA9IG5ldyBQYW5lbCgpOworICAgICAgICBhZGRXaXRoRm9udCAoY29weXJpZ2h0UGFuZWwsCisgICAgICAgICAgICBuZXcgTGFiZWwoRGVtb1V0aWxpdHkuY29weXJpZ2h0MSwgTGFiZWwuTEVGVCksRGVtb1V0aWxpdHkuY3JlZGl0Rm9udCk7CisgICAgICAgIERlbW9VdGlsaXR5LmZpeEdyaWQoY29weXJpZ2h0UGFuZWwsMSk7CisgICAgICAgIGFkZCgiU291dGgiLCBjb3B5cmlnaHRQYW5lbCk7CisKKyAgICAgICAgLy9sYXlvdXQoKTsKKyAgICAgICAgaGFuZGxlRW51bUNoYW5nZWQoKTsKKyAgICAgICAgCisgICAgICAgIGVuYWJsZUV2ZW50cyhXaW5kb3dFdmVudC5XSU5ET1dfQ0xPU0lORyk7CisgICAgICAgIGVuYWJsZUV2ZW50cyhLZXlFdmVudC5LRVlfUFJFU1NFRCk7CisgICAgICAgIGVuYWJsZUV2ZW50cyhLZXlFdmVudC5LRVlfUkVMRUFTRUQpOyAgICAKKworICAgICAgICAvLyAobmV3IFRocmVhZCh0aGlzKSkuc3RhcnQoKTsKKyAgICB9CisKKworCisgICAgcHVibGljIFN0cmluZyBnZXRJbml0aWFsVGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICJcdTA5MzZcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MmVcdTA5MjZcdTA5NGQgIiArCisgICAgICAgICAgICAiXHUwOTJkXHUwOTE3XHUwOTM1XHUwOTI2XHUwOTRkXHUwOTE3XHUwOTQwXHUwOTI0XHUwOTNlICIgKworICAgICAgICAgICAgIlx1MDkwNVx1MDkyN1x1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyZiAiICsKKyAgICAgICAgICAgICJcdTA5MDVcdTA5MzBcdTA5NGRcdTA5MWNcdTA5NDFcdTA5MjggIiArCisgICAgICAgICAgICAiXHUwOTM1XHUwOTNmXHUwOTM3XHUwOTNlXHUwOTI2ICIgKworICAgICAgICAgICAgIlx1MDkyZlx1MDk0Ylx1MDkxNyAiICsKKyAgICAgICAgICAgICJcdTA5MjdcdTA5NDNcdTA5MjRcdTA5MzBcdTA5M2VcdTA5MzdcdTA5NGRcdTA5MWZcdTA5NGRcdTA5MzAgIiArCisgICAgICAgICAgICAiXHUwOTA5XHUwOTM1XHUwOTNFXHUwOTFBXHUwOTQzICIgKworICAgICAgICAgICAgIlx1MDkyN1x1MDkzMFx1MDk0ZFx1MDkyZVx1MDkxNVx1MDk0ZFx1MDkzN1x1MDk0N1x1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0NyAiICsKKyAgICAgICAgICAgICJcdTA5MTVcdTA5NDFcdTA5MzBcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzdcdTA5NDdcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDcgIiArCisgICAgICAgICAgICAiXHUwOTM4XHUwOTJlXHUwOTM1XHUwOTQ3XHUwOTI0XHUwOTNlICIgKworICAgICAgICAgICAgIlx1MDkyZlx1MDk0MVx1MDkyZlx1MDk0MVx1MDkyNFx1MDk0ZFx1MDkzOFx1MDkzNVx1MDkwMyAiICsKKyAgICAgICAgICAgICJcdTA5MmVcdTA5M2VcdTA5MmVcdTA5MTVcdTA5M2VcdTA5MDMgIiArCisgICAgICAgICAgICAiXHUwOTJhXHUwOTNlXHUwOTIzXHUwOTRkXHUwOTIxXHUwOTM1XHUwOTNlXHUwOTM2XHUwOTRkXHUwOTFhXHUwOTQ4XHUwOTM1ICIgKworICAgICAgICAgICAgIlx1MDkxNVx1MDkzZlx1MDkyZVx1MDkxNVx1MDk0MVx1MDkzMFx1MDk0ZFx1MDkzNVx1MDkyNCAiICsKKyAgICAgICAgICAgICJcdTA5MzhcdTA5MDJcdTA5MWNcdTA5MzUiOworICAgIH0KKworCisgICAgcHVibGljIHZvaWQgaGFuZGxlRW51bUNoYW5nZWQoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHMgPSBib3VuZC5nZXRTZWxlY3RlZEl0ZW0oKTsKKyAgICAgICAgaWYgKHMuZXF1YWxzKCJDaGFyIikpIHsKKyAgICAgICAgICAgIGVycm9yVGV4dCgiZ2V0Q2hhcmFjdGVySW5zdGFuY2UiKTsKKyAgICAgICAgICAgIGVudW0gPSBCcmVha0l0ZXJhdG9yLmdldENoYXJhY3Rlckluc3RhbmNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocy5lcXVhbHMoIldvcmQiKSkgeworICAgICAgICAgICAgZXJyb3JUZXh0KCJ0V29yZEJyZWFrIik7CisgICAgICAgICAgICBlbnVtID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzLmVxdWFscygiTGluZSBCcmVhayIpKSB7CisgICAgICAgICAgICBlcnJvclRleHQoImdldExpbmVJbnN0YW5jZSIpOworICAgICAgICAgICAgZW51bSA9IEJyZWFrSXRlcmF0b3IuZ2V0TGluZUluc3RhbmNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBpZiAocy5lcXVhbHMoIlNlbnRlbmNlIikpICovIHsKKyAgICAgICAgICAgIGVycm9yVGV4dCgiZ2V0U2VudGVuY2VJbnN0YW5jZSIpOworICAgICAgICAgICAgZW51bSA9IEJyZWFrSXRlcmF0b3IuZ2V0U2VudGVuY2VJbnN0YW5jZSgpOworICAgICAgICB9CisgICAgICAgIGVudW0uc2V0VGV4dCh0ZXh0LmdldFRleHQoKSk7CisgICAgICAgIHNlbGVjdFJhbmdlKDAsIDApOworICAgICAgICAvL3RleHQuc2VsZWN0KDAsMCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgaGFuZGxlRm9yd2FyZCgpCisgICAgeworICAgICAgICB0cnkgeworLy8gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbnRlcmluZyBoYW5kbGVGb3J3YXJkIik7CisgICAgICAgICAgICBlbnVtLnNldFRleHQodGV4dC5nZXRUZXh0KCkpOworICAgICAgICAgICAgaW50IG9sZFN0YXJ0ID0gZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgICAgIGludCBvbGRFbmQgPSBnZXRTZWxlY3Rpb25FbmQoKTsKKworLy8gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoYW5kbGVGb3J3YXJkOiBvbGRTdGFydD0iICsgb2xkU3RhcnQgKyAiLCBvbGRFbmQ9IiArIG9sZEVuZCk7CisKKyAgICAgICAgICAgIGlmIChvbGRFbmQgPCAxKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0UmFuZ2UoMCwgZW51bS5mb2xsb3dpbmcoMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IHMgPSBlbnVtLmZvbGxvd2luZyhvbGRFbmQtMSk7CisgICAgICAgICAgICAgICAgaW50IGUgPSBlbnVtLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoZSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBlID0gczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VsZWN0UmFuZ2UocywgZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL3RleHQuc2VsZWN0KHMsIGUpOworICAgICAgICAgICAgZXJyb3JUZXh0KCI8IiArIG9sZFN0YXJ0ICsgIiwiICsgb2xkRW5kICsgIj4gLT4gPCIgKworICAgICAgICAgICAgICAgIHMgKyAiLCIgKyBlICsgIj4iKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4cCkgeworICAgICAgICAgICAgZXJyb3JUZXh0KGV4cC50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGhhbmRsZUJhY2t3YXJkKCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBlbnVtLnNldFRleHQodGV4dC5nZXRUZXh0KCkpOworICAgICAgICAgICAgaW50IG9sZFN0YXJ0ID0gZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgICAgIGludCBvbGRFbmQgPSBnZXRTZWxlY3Rpb25FbmQoKTsKKyAgICAgICAgICAgIGlmIChvbGRTdGFydCA8IDEpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RSYW5nZSgwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCBlID0gZW51bS5mb2xsb3dpbmcob2xkU3RhcnQtMSk7CisgICAgICAgICAgICAgICAgaW50IHMgPSBlbnVtLnByZXZpb3VzKCk7CisgICAgICAgICAgICAgICAgc2VsZWN0UmFuZ2UocywgZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL3RleHQuc2VsZWN0KHMsIGUpOworICAgICAgICAgICAgZXJyb3JUZXh0KCI8IiArIG9sZFN0YXJ0ICsgIiwiICsgb2xkRW5kICsgIj4gLT4gPCIgKyBzICsgIiwiICsgZSArICI+Iik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleHApIHsKKyAgICAgICAgICAgIGVycm9yVGV4dChleHAudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgIHB1YmxpYyBib29sZWFuIGFjdGlvbihFdmVudCBldnQsIE9iamVjdCBvYmopCisgICAgeworCisgICAgICAgIGlmKGV2dC50YXJnZXQgaW5zdGFuY2VvZiBCdXR0b24gJiYgbGVmdC5lcXVhbHMob2JqKSkKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlQmFja3dhcmQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoZXZ0LnRhcmdldCBpbnN0YW5jZW9mIEJ1dHRvbiAmJiByaWdodC5lcXVhbHMob2JqKSkKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlRm9yd2FyZCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihldnQudGFyZ2V0IGluc3RhbmNlb2YgQ2hvaWNlKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGVFbnVtQ2hhbmdlZCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUV2ZW50KEV2ZW50IGV2dCkKKyAgICB7CisgICAgICAgIGlmIChldnQuaWQgPT0gRXZlbnQuS0VZX1BSRVNTIHx8IGV2dC5pZCA9PSBFdmVudC5LRVlfQUNUSU9OKSB7CisgICAgICAgICAgICBpZiAoZXZ0LmtleSA9PSBFdmVudC5SSUdIVCB8fCAoZXZ0LmtleSA9PSAweDBFICYmIGV2dC5jb250cm9sRG93bigpKSkgeworICAgICAgICAgICAgICAgIGhhbmRsZUZvcndhcmQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGV2dC5rZXkgPT0gRXZlbnQuTEVGVCB8fCAoZXZ0LmtleSA9PSAweDEwICYmIGV2dC5jb250cm9sRG93bigpKSkgeworICAgICAgICAgICAgICAgIGhhbmRsZUJhY2t3YXJkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICBpZiAoZXZ0LmlkID09IEV2ZW50LldJTkRPV19ERVNUUk9ZICYmIGV2dC50YXJnZXQgPT0gdGhpcykgeworICAgICAgICAgICAgdGhpcy5oaWRlKCk7CisgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXBwbGV0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgIGFwcGxldC5kZW1vQ2xvc2VkKCk7CisgICAgICAgICAgICAgICB9IGVsc2UgU3lzdGVtLmV4aXQoMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIuaGFuZGxlRXZlbnQoZXZ0KTsKKyAgICB9Ki8KKworICAgIHB1YmxpYyB2b2lkIGl0ZW1TdGF0ZUNoYW5nZWQoSXRlbUV2ZW50IGV2dCkKKyAgICB7CisgICAgICAgIGlmIChldnQuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBDaG9pY2UpIHsKKyAgICAgICAgICAgIGhhbmRsZUVudW1DaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBlcnJvclRleHQoU3RyaW5nIHMpCisgICAgeworICAgICAgIGlmIChERUJVRykKKyAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzV2luZG93RXZlbnQoV2luZG93RXZlbnQgZXZ0KQorICAgIHsKKyAgICAgICAgaWYgKGV2dC5nZXRJRCgpID09IFdpbmRvd0V2ZW50LldJTkRPV19DTE9TSU5HICYmIAorICAgICAgICAgICAgZXZ0LmdldFdpbmRvdygpID09IHRoaXMpIHsKKyAgICAgICAgICAgIGhpZGUoKTsKKyAgICAgICAgICAgIGRpc3Bvc2UoKTsKKyAgICAgICAgICAgIGlmIChhcHBsZXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFwcGxldC5kZW1vQ2xvc2VkKCk7CisgICAgICAgICAgICB9IGVsc2UgU3lzdGVtLmV4aXQoMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0tleUV2ZW50KEtleUV2ZW50IGV2dCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZXZ0LmdldElEKCkpIHsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZX1BSRVNTRUQgOgorICAgICAgICAgICAgICAgIGlmIChldnQuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0NPTlRST0wpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNjdHJsZG93bl8gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZX1JFTEVBU0VEIDoKKyAgICAgICAgICAgICAgICAvLyBrZXkgZGV0ZWN0aW9uIGZvciBsZWZ0IGFuZCByaWdodCBidXR0b25zIGFyZSByZW1vdmVkCisgICAgICAgICAgICAgICAgLy8gdG8gZW11bGF0ZSB0aGUgb2xkIHJlbGVhc2UgYmVoYXZpb3VyCisgICAgICAgICAgICAgICAgaW50IGtleSA9IGV2dC5nZXRLZXlDb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBLZXlFdmVudC5WS19OICYmIGlzY3RybGRvd25fKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUZvcndhcmQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBpZiAoa2V5ID09IEtleUV2ZW50LlZLX1AgJiYgaXNjdHJsZG93bl8pIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQmFja3dhcmQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBpZiAoa2V5ID09IEtleUV2ZW50LlZLX0NPTlRST0wpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNjdHJsZG93bl8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJiaS9UZXh0Qm91bmREZW1vLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJiaS9UZXh0Qm91bmREZW1vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmFhYjkzYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYmJpL1RleHRCb3VuZERlbW8uamF2YQpAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JiYmkvVGV4dEJvdW5kRGVtby5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA4LzAxIDIwOjI3OjIxICQgCisgKiAkUmV2aXNpb246IDEuOSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8ucmJiaTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLio7CitpbXBvcnQgamF2YS5hcHBsZXQuQXBwbGV0OworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuSXRlbUxpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lkl0ZW1FdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5LZXlFdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKK2ltcG9ydCBqYXZheC5zd2luZy5KVGV4dEFyZWE7CitpbXBvcnQgamF2YXguc3dpbmcuSlNjcm9sbFBhbmU7CitpbXBvcnQgamF2YXguc3dpbmcuQm9yZGVyRmFjdG9yeTsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby5pbXBsLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5CcmVha0l0ZXJhdG9yOworCitwdWJsaWMgY2xhc3MgVGV4dEJvdW5kRGVtbyBleHRlbmRzIERlbW9BcHBsZXQKK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJndltdKSB7CisgICAgICAgIG5ldyBUZXh0Qm91bmREZW1vKCkuc2hvd0RlbW8oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgRnJhbWUgY3JlYXRlRGVtb0ZyYW1lKERlbW9BcHBsZXQgYXBwbGV0KSB7CisgICAgICAgIHJldHVybiBuZXcgVGV4dEJvdW5kRnJhbWUoYXBwbGV0KTsKKyAgICB9Cit9CisKKworCitjbGFzcyBUZXh0Qm91bmRGcmFtZSBleHRlbmRzIEZyYW1lIGltcGxlbWVudHMgSXRlbUxpc3RlbmVyCit7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNyZWRpdFN0cmluZyA9CisgICAgICAgICJ2MS4xYTksIERlbW8iOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJRUxEX0NPTFVNTlMgPSA0NTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGb250IGNob2ljZUZvbnQgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKyAgICBwcml2YXRlIERlbW9BcHBsZXQgYXBwbGV0OworCisgICAgZmluYWwgU3RyaW5nIHJpZ2h0ID0gIi0tPiI7CisgICAgZmluYWwgU3RyaW5nIGxlZnQgPSAiPC0tIjsKKworICAgIHByaXZhdGUgQnJlYWtJdGVyYXRvciBlbnVtOworICAgIHByaXZhdGUgYm9vbGVhbiBpc2N0cmxkb3duXyA9IGZhbHNlOworCitKVGV4dEFyZWEgdGV4dDsKKy8vICAgIFRleHRBcmVhIHRleHQ7CisgICAgQ2hvaWNlIGJvdW5kOworCisgICAgcHVibGljIFRleHRCb3VuZEZyYW1lKERlbW9BcHBsZXQgYXBwbGV0KQorICAgIHsKKyAgICAgICAgdGhpcy5hcHBsZXQgPSBhcHBsZXQ7CisgICAgICAgIGluaXQoKTsKKyAgICAgICAgc3RhcnQoKTsKKyAgICB9CisKKworCisgICAgcHVibGljIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNoZWNrQ2hhbmdlKCk7CisgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDI1MCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAqLworICAgIH0KKworICAgIGludCBzLCBlOworICAgIGludCB0cywgdGU7CisKKyAgICBwdWJsaWMgdm9pZCBjaGVja0NoYW5nZSgpCisgICAgeworLy8gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2hlY2tDaGFuZ2UuLi4iKTsKKyAgICAgICAgaWYgKCh0ZXh0LmdldFNlbGVjdGlvblN0YXJ0KCkgJiAweDdGRkYpICE9IHRzIHx8CisgICAgICAgICAgICAodGV4dC5nZXRTZWxlY3Rpb25FbmQoKSAmIDB4N0ZGRikgIT0gdGUpIHsKKworICAgICAgICAgICAgLy8gbm90IHVzZWQgaW50IHRlbXBTID0gdGV4dC5nZXRTZWxlY3Rpb25TdGFydCgpICYgMHg3RkZGOworICAgICAgICAgICAgLy8gbm90IHVzZWQgaW50IHRlbXBFID0gdGV4dC5nZXRTZWxlY3Rpb25FbmQoKSAmIDB4N0ZGRjsKKworLy8gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Iik7CisvLyAgICAgICAgICBzZWxlY3QoMCwgMCk7CisvLyAgICAgICAgICBzZWxlY3QodGVtcFMsIHRlbXBFKTsKKyAgICAgICAgICAgIC8vc2VsZWN0KHRlbXBTIC0gKHRzIC0gcyksIHRlbXBFIC0gKHRlIC0gZSkpOworLy8gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8Iik7CisKKworLy8gICAgICAgICAgaWYgKHMgIT0gdHMgfHwgZSAhPSB0ZSkgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIHMoIitzKyIpIHRzKCIrdHMrIikgZSgiK2UrIikgdGUoIit0ZSsiKSIpOworLy8gICAgICAgICAgaWYgKHRlbXBTICE9IHRzIHx8IHRlbXBFICE9IHRlKSBTeXN0ZW0ub3V0LnByaW50bG4oIj5zKCIrcysiKSB0ZW1wUygiK3RlbXBTKyIpIGUoIitlKyIpIHRlbXBFKCIrdGVtcEUrIikiKTsKKy8vICAgICAgICAgIHNlbGVjdChzIC0gKHRzIC0gcyksIGUgLSAodGUgLSBlKSk7CisvLyAgICAgICAgICBpZiAodGVtcFMgIT0gdHMgfHwgdGVtcEUgIT0gdGUpIFN5c3RlbS5vdXQucHJpbnRsbigicygiK3MrIikgdGVtcFMoIit0ZW1wUysiKSBlKCIrZSsiKSB0ZW1wRSgiK3RlbXBFKyIpIik7CisKKy8vICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGtkc2xrc2oiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNlbGVjdChpbnQgc0luLCBpbnQgZUluKQorICAgIHsKKyAgICAgICAgcyA9IHNJbjsKKyAgICAgICAgZSA9IGVJbjsKKyAgICAgICAgdGV4dC5zZWxlY3QocywgZSk7CisgICAgICAgIHRzID0gdGV4dC5nZXRTZWxlY3Rpb25TdGFydCgpICYgMHg3RkZGOworICAgICAgICB0ZSA9IHRleHQuZ2V0U2VsZWN0aW9uRW5kKCkgJiAweDdGRkY7CisvLyAgICAgICAgaWYgKHMgIT0gdHMgfHwgZSAhPSB0ZSkgeworLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj5zKCIrcysiKSB0cygiK3RzKyIpIGUoIitlKyIpIHRlKCIrdGUrIikiKTsKKy8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAiKyh0cy1zKSsiLCIrKHRlLWUpKTsKKy8vICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRTZWxlY3Rpb25TdGFydCgpCisgICAgeworICAgICAgICBjaGVja0NoYW5nZSgpOworLy8gICAgICByZXR1cm4gczsKKyAgICAgICAgcmV0dXJuIHRleHQuZ2V0U2VsZWN0aW9uU3RhcnQoKSAmIDB4N0ZGRjsKKyAgICB9CisKKworICAgIHB1YmxpYyBpbnQgZ2V0U2VsZWN0aW9uRW5kKCkKKyAgICB7CisgICAgICAgIGNoZWNrQ2hhbmdlKCk7CisvLyAgICAgIHJldHVybiBlOworICAgICAgICByZXR1cm4gdGV4dC5nZXRTZWxlY3Rpb25FbmQoKSAmIDB4N0ZGRjsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgc3luY2hyb25pemVkIHZvaWQgc2VsZWN0UmFuZ2UoaW50IHMsIGludCBlKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vaWYgKGdldFNlbGVjdGlvblN0YXJ0KCkgIT0gcyB8fCBnZXRTZWxlY3Rpb25FbmQoKSAhPSBlKSB7CisgICAgICAgICAgICAgICAgLy90ZXh0LnNlbGVjdChzLCBlKTsKKyAgICAgICAgICAgICAgICBzZWxlY3QocyxlKTsKKyAgICAgICAgICAgIC8vfQorLy8gICAgICAgICAgaWYgKGdldFNlbGVjdGlvblN0YXJ0KCkgIT0gcyB8fCBnZXRTZWxlY3Rpb25FbmQoKSAhPSBlKSB7CisvLyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBR0ghIHNlbGVjdCgiK3MrIiwiK2UrIikgLT4gKCIrCisvLyAgICAgICAgICAgICAgZ2V0U2VsZWN0aW9uU3RhcnQoKSsiLCIrZ2V0U2VsZWN0aW9uRW5kKCkrIikiKTsKKy8vICAgICAgICAgICAgICB0ZXh0LnNlbGVjdChzIC0gKGdldFNlbGVjdGlvblN0YXJ0KCkgLSBzKSwgZSAtIChnZXRTZWxlY3Rpb25FbmQoKSAtIGUpKTsKKy8vICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4cCkgeworICAgICAgICAgICAgZXJyb3JUZXh0KGV4cC50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKworCisKKyAgICBwdWJsaWMgdm9pZCBpbml0KCkKKyAgICB7CisgICAgICAgIGJ1aWxkR1VJKCk7CisgICAgfQorCisKKyAgICBwdWJsaWMgdm9pZCBzdGFydCgpCisgICAgeworICAgIH0KKworCisgICAgdm9pZCBhZGRXaXRoRm9udChDb250YWluZXIgY29udGFpbmVyLCBDb21wb25lbnQgZm9vLCBGb250IGZvbnQpIHsKKyAgICAgICAgaWYgKGZvbnQgIT0gbnVsbCkKKyAgICAgICAgICAgIGZvby5zZXRGb250KGZvbnQpOworICAgICAgICBjb250YWluZXIuYWRkKGZvbyk7CisgICAgfQorCisKKworICAgcHVibGljIHZvaWQgYnVpbGRHVUkoKQorICAgIHsKKyAgICAgICAgc2V0QmFja2dyb3VuZChEZW1vVXRpbGl0eS5iZ0NvbG9yKTsKKyAgICAgICAgc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisKKyAgICAgICBQYW5lbCB0b3BQYW5lbCA9IG5ldyBQYW5lbCgpOworCisgICAgICAgICAgICBMYWJlbCB0aXRsZUxhYmVsID0KKyAgICAgICAgICAgICAgICBuZXcgTGFiZWwoIlRleHQgQm91bmRhcnkgRGVtbyIsIExhYmVsLkNFTlRFUik7CisgICAgICAgICAgICB0aXRsZUxhYmVsLnNldEZvbnQoRGVtb1V0aWxpdHkudGl0bGVGb250KTsKKyAgICAgICAgICAgIHRvcFBhbmVsLmFkZCh0aXRsZUxhYmVsKTsKKworICAgICAgICAgICAgLy9MYWJlbCBkZW1vPW5ldyBMYWJlbChjcmVkaXRTdHJpbmcsIExhYmVsLkNFTlRFUik7CisgICAgICAgICAgICAvL2RlbW8uc2V0Rm9udChEZW1vVXRpbGl0eS5jcmVkaXRGb250KTsKKyAgICAgICAgICAgIC8vdG9wUGFuZWwuYWRkKGRlbW8pOworCisgICAgICAgICAgICBQYW5lbCBjaG9pY2VQYW5lbCA9IG5ldyBQYW5lbCgpOworCisgICAgICAgICAgICBMYWJlbCBkZW1vMT1uZXcgTGFiZWwoIkJvdW5kYXJpZXMiLCBMYWJlbC5MRUZUKTsKKyAgICAgICAgICAgIGRlbW8xLnNldEZvbnQoRGVtb1V0aWxpdHkubGFiZWxGb250KTsKKyAgICAgICAgICAgIGNob2ljZVBhbmVsLmFkZChkZW1vMSk7CisKKyAgICAgICAgICAgIGJvdW5kID0gbmV3IENob2ljZSgpOworICAgICAgICAgICAgICAgIGJvdW5kLnNldEJhY2tncm91bmQoRGVtb1V0aWxpdHkuY2hvaWNlQ29sb3IpOworICAgICAgICAgICAgYm91bmQuYWRkSXRlbSgiU2VudGVuY2UiKTsKKyAgICAgICAgICAgIGJvdW5kLmFkZEl0ZW0oIkxpbmUgQnJlYWsiKTsKKyAgICAgICAgICAgIGJvdW5kLmFkZEl0ZW0oIldvcmQiKTsKKyAgICAgICAgICAgIGJvdW5kLmFkZEl0ZW0oIkNoYXIiKTsKKyAgICAgICAgICAgIGJvdW5kLmFkZEl0ZW1MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIGlmIChjaG9pY2VGb250ICE9IG51bGwpCisgICAgICAgICAgICAgICAgYm91bmQuc2V0Rm9udChjaG9pY2VGb250KTsKKworICAgICAgICAgICAgY2hvaWNlUGFuZWwuYWRkKGJvdW5kKTsKKyAgICAgICAgICAgIHRvcFBhbmVsLmFkZChjaG9pY2VQYW5lbCk7CisKKyAgICAgICAgICAgIERlbW9VdGlsaXR5LmZpeEdyaWQodG9wUGFuZWwsMSk7CisKKworICAgICAgICBhZGQoIk5vcnRoIiwgdG9wUGFuZWwpOworCisKKyAgICAgICAgICAgIGludCBST1dTID0gMTU7CisgICAgICAgICAgICBpbnQgQ09MVU1OUyA9IDUwOworLy8gICAgICAgICAgICB0ZXh0ID0gbmV3IFRleHRBcmVhKGdldEluaXRpYWxUZXh0KCksIFJPV1MsIENPTFVNTlMpOwordGV4dCA9IG5ldyBKVGV4dEFyZWEoZ2V0SW5pdGlhbFRleHQoKSwgUk9XUywgQ09MVU1OUyk7Cit0ZXh0LnNldExpbmVXcmFwKHRydWUpOwordGV4dC5zZXRXcmFwU3R5bGVXb3JkKHRydWUpOworICAgICAgICAgICAgdGV4dC5zZXRFZGl0YWJsZSh0cnVlKTsKKyAgICAgICAgICAgIHRleHQuc2VsZWN0QWxsKCk7CisgICAgICAgICAgICB0ZXh0LnNldEZvbnQoRGVtb1V0aWxpdHkuZWRpdEZvbnQpOworICAgICAgICAgICAgdGV4dC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFbXB0eUJvcmRlcigyLCAyLCAyLCAyKSk7CisKKyAgICAgICAgYWRkKCJDZW50ZXIiLCBuZXcgSlNjcm9sbFBhbmUodGV4dCwgSlNjcm9sbFBhbmUuVkVSVElDQUxfU0NST0xMQkFSX0FMV0FZUywKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTY3JvbGxQYW5lLkhPUklaT05UQUxfU0NST0xMQkFSX05FVkVSKSk7CisKKyAgICAgICAgUGFuZWwgY29weXJpZ2h0UGFuZWwgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgYWRkV2l0aEZvbnQgKGNvcHlyaWdodFBhbmVsLAorICAgICAgICAgICAgbmV3IExhYmVsKERlbW9VdGlsaXR5LmNvcHlyaWdodDEsIExhYmVsLkxFRlQpLERlbW9VdGlsaXR5LmNyZWRpdEZvbnQpOworICAgICAgICBEZW1vVXRpbGl0eS5maXhHcmlkKGNvcHlyaWdodFBhbmVsLDEpOworICAgICAgICBhZGQoIlNvdXRoIiwgY29weXJpZ2h0UGFuZWwpOworCisgICAgICAgIC8vbGF5b3V0KCk7CisgICAgICAgIGhhbmRsZUVudW1DaGFuZ2VkKCk7CisgICAgICAgIAorICAgICAgICBlbmFibGVFdmVudHMoV2luZG93RXZlbnQuV0lORE9XX0NMT1NJTkcpOworICAgICAgICBlbmFibGVFdmVudHMoS2V5RXZlbnQuS0VZX1BSRVNTRUQpOworICAgICAgICBlbmFibGVFdmVudHMoS2V5RXZlbnQuS0VZX1JFTEVBU0VEKTsKKworICAgICAgICAvLyAobmV3IFRocmVhZCh0aGlzKSkuc3RhcnQoKTsKKyAgICB9CisKKworCisgICAgcHVibGljIFN0cmluZyBnZXRJbml0aWFsVGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4KKyAgICAvKgorICAgICAgICAgICAgIlwiVGhpcyBpcyBhIHNlbnRlbmNlLlwiIFRoaXMgaXMgbm90LlwiIFwiYmVjYXVzZS4gQW5kIGdvLiAiICsKKyAgICAgICAgICAgICJUaGlzIGlzIGEgc2ltcGxlIDAxMi41NjYsNSBzYW1wbGUgc2VudGVuY2UuIFxuIisKKyAgICAgICAgICAgICJJdCBkb2VzIG5vdCBoYXZlIHRvIG1ha2UgYW55IHNlbnNlIGFzIHlvdSBjYW4gc2VlLiBcbiIrCisgICAgICAgICAgICAiTmVsIG1lenpvIGRlbCBjYW1taW4gZGkgbm9zdHJhIHZpdGEsIG1pIHJpdHJvdmFpIGluICIrCisgICAgICAgICAgICAgICAgInVuYSBzZWx2YSBvc2N1cmEuIFxuIisKKyAgICAgICAgICAgICJDaGUgbGEgZHJpdHRhIHZpYSBhdmVvIHNtYXJyaXRhLiBcbiIrCisgICAgICAgICAgICAiSGUgc2FpZCwgdGhhdCBJIHNhaWQsIHRoYXQgeW91IHNhaWQhISBcbiIrCisgICAgICAgICAgICAiRG9uJ3Qgcm9jayB0aGUgYm9hdC5cblxuIisKKyAgICAgICAgICAgICJCZWNhdXNlIEkgYW0gdGhlIGRhZGR5LCB0aGF0IGlzIHdoeS4gXG4iKworICAgICAgICAgICAgIk5vdCBvbiBteSB0aW1lIChlbCB0aW1vLikhIFxuIisKKyAgICAgICAgICAgICJUYWJcdFRhYlxyVGFiXHRXb3cuIisKKyAgICAgICAgICAgICJTbyB3aGF0ISFcblxuIisKKyAgICAgICAgICAgICJJcyB0aGlzIGEgcXVlc3Rpb24/Pz8gICIgKworICAgICAgICAgICAgIkkgd29uZGVyLi4uSG1tLlxuIiArCisgICAgICAgICAgICAiSGFycmlzIHRodW1iZWQgZG93biBzZXZlcmFsLCBpbmNsdWRpbmcgXCJBd2F5IFdlIEdvXCIgIisKKyAgICAgICAgICAgICAgICAiKHdoaWNoIGJlY2FtZSB0aGUgaHVnZSBzdWNjZXNzIE9rbGFob21hISkuIFxuIisKKyAgICAgICAgICAgICJPbmUgc3BlY2llcywgQi4gYW50aHJhY2lzLCBpcyBoaWdobHkgdmlydWxlbnQuXG4iKworICAgICAgICAgICAgIldvbGYgc2FpZCBhYm91dCBTb3VuZGVyOiBcIkJlYXV0aWZ1bGx5IHRob3VnaHQtb3V0IGFuZCAiKworICAgICAgICAgICAgICAgICJkaXJlY3RlZC5cIlxuIisKKyAgICAgICAgICAgICJIYXZlIHlvdSBldmVyIHNhaWQsIFwiVGhpcyBpcyB3aGVyZSBJIHNoYWxsIGxpdmVcIj8gXG4iKworICAgICAgICAgICAgIkhlIDEwMDAsMjMzLDQ1Ni4wMDAgYW5zd2VyZWQsIFwiWW91IG1heSBub3QhXCIgXG4iKworICAgICAgICAgICAgIkFub3RoZXIgcG9wdWxhciBzYXlpbmcgaXM6IFwiSG93IGRvIHlvdSBkbz9cIi4gXG4iKworICAgICAgICAgICAgIldoYXQgaXMgdGhlIHByb3BlciB1c2Ugb2YgdGhlIGFiYnJldmlhdGlvbiBwcC4/IFxuIisKKyAgICAgICAgICAgICJZZXMsIEkgYW0gMSwyMy4zMjIlIGRlZmluYXRlbGx5IDEyXCIgdGFsbCEhIjsKKyAgICAqLworICAgICAgICAgICAgIihcIlRoaXMgaXMgYSBjb21wbGV0ZSBzZW50ZW5jZS5cIikgVGhpcyBpcyAoXCJub3QuXCIpIGFsc28uICAiCisgICAgICAgICAgICArIkFuIGFiYnJldmlhdGlvbiBpbiB0aGUgbWlkZGxlLCBldGMuIGFuZCBvbmUgYXQgdGhlIGVuZCwgZXRjLiAiKworICAgICAgICAgICAgICAgICJUaGlzICIKKyAgICAgICAgICAgICsiaXMgYSBzaW1wbGUgc2FtcGxlIDAxMi41NjYsNSBzZW50ZW5jZS4gSXQgZG9lc24ndCAiCisgICAgICAgICAgICArImhhdmUgdG8gbWFrZSBhbnkgc2Vuc2UsIGFzIHlvdSBjYW4gc2VlLiBOZWwgbWV6em8gZGVsICBjIgorICAgICAgICAgICAgKyJhbW1pbiBkaSBub3N0cmEgdml0YSwgbWkgcml0cm92YWkgaW4gdW5hIHNlbHZhIG9zY3VyYS4gQ2hlICIKKyAgICAgICAgICAgICsibGEgZHJpdHRhIHZpYSBhdmVvIHNtYXJyaXRhLiBOb3Qgb24gbXkgdGltZSAoZWwgdGltby4pISBBbmQgIgorICAgICAgICAgICAgKyJ0YWJ1bGF0ZWQgY29sdW1uczogXHRDb2wxXHRDb2wyXHQzLDQ1NiUuXHQgIgorICAgICAgICAgICAgKyJJcyB0aGlzIGEgcXVlc3Rpb24/Pz8gIEkgd29uZGVyLi4uIEhtbS4gSGFycmlzIHRodW1iZWQgIgorICAgICAgICAgICAgKyJkb3duIHNldmVyYWwsIGluY2x1ZGluZyBcIkF3YXkgV2UgR29cIiAod2hpY2ggYmVjYW1lIHRoZSAgIgorICAgICAgICAgICAgKyJodWdlIHN1Y2Nlc3MgT2tsYWhvbWEhKS4gT25lIHNwZWNpZXMsIEIuIGFudGhyYWNpcywgaXMgICIKKyAgICAgICAgICAgICsiaGlnaGx5IHZpcnVsZW50LiBXb2xmIHNhaWQgYWJvdXQgU291bmRlcjogXCJCZWF1dGlmdWxseSAgIgorICAgICAgICAgICAgKyJ0aG91Z2h0LW91dCBhbmQgZGlyZWN0ZWQuXCIgSGF2ZSB5b3UgZXZlciBzYWlkLCBcIlRoaXMgaXMgIisKKyAgICAgICAgICAgICAgICAid2hlcmUgSSAiCisgICAgICAgICAgICArInNoYWxsIGxpdmVcIj8gSGUgc2FpZCAxMDAwLDIzMyw0NTYuMDAwIGFuZCBhbnN3ZXJlZCwgXCJZb3UgIisKKyAgICAgICAgICAgICAgICAibWF5IG5vdCFcIiAgIgorICAgICAgICAgICAgKyJBbm90aGVyIHBvcHVsYXIgc2F5aW5nIGlzOiBcIkhvdyBkbyB5b3UgZG8/XCIuIFdoYXQgaXMgdGhlICAiCisgICAgICAgICAgICArInByb3BlciB1c2Ugb2YgdGhlIGFiYnJldmlhdGlvbiBwcC4/IFllcywgSSBhbSAxMlwnIDNcIiB0YWxsISEiOworICAgIH0KKworCisgICAgcHVibGljIHZvaWQgaGFuZGxlRW51bUNoYW5nZWQoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHMgPSBib3VuZC5nZXRTZWxlY3RlZEl0ZW0oKTsKKyAgICAgICAgaWYgKHMuZXF1YWxzKCJDaGFyIikpIHsKKyAgICAgICAgICAgIGVycm9yVGV4dCgiZ2V0Q2hhcmFjdGVySW5zdGFuY2UiKTsKKyAgICAgICAgICAgIGVudW0gPSBCcmVha0l0ZXJhdG9yLmdldENoYXJhY3Rlckluc3RhbmNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocy5lcXVhbHMoIldvcmQiKSkgeworICAgICAgICAgICAgZXJyb3JUZXh0KCJ0V29yZEJyZWFrIik7CisgICAgICAgICAgICBlbnVtID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzLmVxdWFscygiTGluZSBCcmVhayIpKSB7CisgICAgICAgICAgICBlcnJvclRleHQoImdldExpbmVJbnN0YW5jZSIpOworICAgICAgICAgICAgZW51bSA9IEJyZWFrSXRlcmF0b3IuZ2V0TGluZUluc3RhbmNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBpZiAocy5lcXVhbHMoIlNlbnRlbmNlIikpICovIHsKKyAgICAgICAgICAgIGVycm9yVGV4dCgiZ2V0U2VudGVuY2VJbnN0YW5jZSIpOworICAgICAgICAgICAgZW51bSA9IEJyZWFrSXRlcmF0b3IuZ2V0U2VudGVuY2VJbnN0YW5jZSgpOworICAgICAgICB9CisgICAgICAgIGVudW0uc2V0VGV4dCh0ZXh0LmdldFRleHQoKSk7CisgICAgICAgIHNlbGVjdFJhbmdlKDAsIDApOworICAgICAgICAvL3RleHQuc2VsZWN0KDAsMCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgaGFuZGxlRm9yd2FyZCgpCisgICAgeworICAgICAgICB0cnkgeworLy8gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbnRlcmluZyBoYW5kbGVGb3J3YXJkIik7CisgICAgICAgICAgICBlbnVtLnNldFRleHQodGV4dC5nZXRUZXh0KCkpOworICAgICAgICAgICAgaW50IG9sZFN0YXJ0ID0gZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgICAgIGludCBvbGRFbmQgPSBnZXRTZWxlY3Rpb25FbmQoKTsKKworLy8gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoYW5kbGVGb3J3YXJkOiBvbGRTdGFydD0iICsgb2xkU3RhcnQgKyAiLCBvbGRFbmQ9IiArIG9sZEVuZCk7CisKKyAgICAgICAgICAgIGlmIChvbGRFbmQgPCAxKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0UmFuZ2UoMCwgZW51bS5mb2xsb3dpbmcoMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IHMgPSBlbnVtLmZvbGxvd2luZyhvbGRFbmQtMSk7CisgICAgICAgICAgICAgICAgaW50IGUgPSBlbnVtLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoZSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBlID0gczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VsZWN0UmFuZ2UocywgZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL3RleHQuc2VsZWN0KHMsIGUpOworICAgICAgICAgICAgZXJyb3JUZXh0KCI8IiArIG9sZFN0YXJ0ICsgIiwiICsgb2xkRW5kICsgIj4gLT4gPCIgKworICAgICAgICAgICAgICAgIHMgKyAiLCIgKyBlICsgIj4iKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4cCkgeworICAgICAgICAgICAgZXJyb3JUZXh0KGV4cC50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGhhbmRsZUJhY2t3YXJkKCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBlbnVtLnNldFRleHQodGV4dC5nZXRUZXh0KCkpOworICAgICAgICAgICAgaW50IG9sZFN0YXJ0ID0gZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgICAgIGludCBvbGRFbmQgPSBnZXRTZWxlY3Rpb25FbmQoKTsKKyAgICAgICAgICAgIGlmIChvbGRTdGFydCA8IDEpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RSYW5nZSgwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCBlID0gZW51bS5mb2xsb3dpbmcob2xkU3RhcnQtMSk7CisgICAgICAgICAgICAgICAgaW50IHMgPSBlbnVtLnByZXZpb3VzKCk7CisgICAgICAgICAgICAgICAgc2VsZWN0UmFuZ2UocywgZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL3RleHQuc2VsZWN0KHMsIGUpOworICAgICAgICAgICAgZXJyb3JUZXh0KCI8IiArIG9sZFN0YXJ0ICsgIiwiICsgb2xkRW5kICsgIj4gLT4gPCIgKyBzICsgIiwiICsgZSArICI+Iik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleHApIHsKKyAgICAgICAgICAgIGVycm9yVGV4dChleHAudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBpdGVtU3RhdGVDaGFuZ2VkKEl0ZW1FdmVudCBldnQpCisgICAgeworICAgICAgICBpZiAoZXZ0LmdldFNvdXJjZSgpIGluc3RhbmNlb2YgQ2hvaWNlKSB7CisgICAgICAgICAgICBoYW5kbGVFbnVtQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZXJyb3JUZXh0KFN0cmluZyBzKQorICAgIHsKKyAgICAgICBpZiAoREVCVUcpCisgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1dpbmRvd0V2ZW50KFdpbmRvd0V2ZW50IGV2dCkKKyAgICB7CisgICAgICAgIGlmIChldnQuZ2V0SUQoKSA9PSBXaW5kb3dFdmVudC5XSU5ET1dfQ0xPU0lORyAmJiAKKyAgICAgICAgICAgIGV2dC5nZXRXaW5kb3coKSA9PSB0aGlzKSB7CisgICAgICAgICAgICBoaWRlKCk7CisgICAgICAgICAgICBkaXNwb3NlKCk7CisgICAgICAgICAgICBpZiAoYXBwbGV0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhcHBsZXQuZGVtb0Nsb3NlZCgpOworICAgICAgICAgICAgfSBlbHNlIFN5c3RlbS5leGl0KDApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NLZXlFdmVudChLZXlFdmVudCBldnQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGV2dC5nZXRJRCgpKSB7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWV9QUkVTU0VEIDoKKyAgICAgICAgICAgICAgICBpZiAoZXZ0LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5WS19DT05UUk9MKSB7CisgICAgICAgICAgICAgICAgICAgIGlzY3RybGRvd25fID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWV9SRUxFQVNFRCA6CisgICAgICAgICAgICAgICAgLy8ga2V5IGRldGVjdGlvbiBmb3IgbGVmdCBhbmQgcmlnaHQgYnV0dG9ucyBhcmUgcmVtb3ZlZAorICAgICAgICAgICAgICAgIC8vIHRvIGVtdWxhdGUgdGhlIG9sZCByZWxlYXNlIGJlaGF2aW91cgorICAgICAgICAgICAgICAgIGludCBrZXkgPSBldnQuZ2V0S2V5Q29kZSgpOworICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gS2V5RXZlbnQuVktfTiAmJiBpc2N0cmxkb3duXykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVGb3J3YXJkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBLZXlFdmVudC5WS19QICYmIGlzY3RybGRvd25fKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJhY2t3YXJkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoa2V5ID09IEtleUV2ZW50LlZLX0NPTlRST0wpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNjdHJsZG93bl8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJiaS9wYWNrYWdlLmh0bWwgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJiaS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTVkNmZhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYmJpL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JiYmkvcGFja2FnZS5odG1sLHYgJAorICAkUmV2aXNpb246IDEuMSAkCisgICREYXRlOiAyMDAwLzAzLzE1IDE3OjQzOjUzICQKKy0tPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiPgorUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBhbmQgRGljdGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvciBkZW1vIGFwcGxpY2F0aW9ucy4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJuZi9SYm5mRGVtby5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JibmYvUmJuZkRlbW8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NzIyMzAyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JibmYvUmJuZkRlbW8uamF2YQpAQCAtMCwwICsxLDUzMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JibmYvUmJuZkRlbW8uamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xOSAwNDoxMDoyNCAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLnJibmY7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby4qOworaW1wb3J0IGphdmEuYXBwbGV0LkFwcGxldDsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LkJyZWFrSXRlcmF0b3I7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby5pbXBsLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5SdWxlQmFzZWROdW1iZXJGb3JtYXQ7CisKK3B1YmxpYyBjbGFzcyBSYm5mRGVtbyBleHRlbmRzIERlbW9BcHBsZXQgeworICAgIC8qKgorICAgICAqIFB1dHMgYSBjb3B5cmlnaHQgaW4gdGhlIC5jbGFzcyBmaWxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodE5vdGljZQorICAgICAgICA9ICJDb3B5cmlnaHQgXHUwMGE5MTk5Ny0xOTk4IElCTSBDb3JwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLyoKKyAgICAgKiBjb2RlIHRvIHJ1biB0aGUgZGVtbyBhcyBhbiBhcHBsaWNhdGlvbgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHsKKyAgICAJbmV3IFJibmZEZW1vKCkuc2hvd0RlbW8oKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgRGltZW5zaW9uIGdldERlZmF1bHRGcmFtZVNpemUoRGVtb0FwcGxldCBhcHBsZXQsIEZyYW1lIGYpIHsKKyAgICAJcmV0dXJuIG5ldyBEaW1lbnNpb24oNDMwLDI3MCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIEZyYW1lIGNyZWF0ZURlbW9GcmFtZShEZW1vQXBwbGV0IGFwcGxldCkgeworICAgICAgICBmaW5hbCBGcmFtZSB3aW5kb3cgPSBuZXcgRnJhbWUoIk51bWJlciBTcGVsbG91dCBEZW1vIik7CisgICAgICAgIHdpbmRvdy5zZXRTaXplKDgwMCwgNjAwKTsKKyAgICAgICAgd2luZG93LnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCisgICAgICAgIFBhbmVsIG1haW5QYW5lbCA9IG5ldyBQYW5lbCgpOworICAgICAgICBtYWluUGFuZWwuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsMikpOworCisgICAgICAgIGNvbW1lbnRhcnlGaWVsZCA9IG5ldyBUZXh0QXJlYSgiIiwgMCwgMCwgVGV4dEFyZWEuU0NST0xMQkFSU19WRVJUSUNBTF9PTkxZKTsKKyAgICAgICAgY29tbWVudGFyeUZpZWxkLnNldFNpemUoODAwLCA1MCk7CisgICAgICAgIGNvbW1lbnRhcnlGaWVsZC5zZXRUZXh0KFJibmZTYW1wbGVSdWxlU2V0cy5zYW1wbGVSdWxlU2V0Q29tbWVudGFyeVswXSk7CisgICAgICAgIGNvbW1lbnRhcnlGaWVsZC5zZXRFZGl0YWJsZShmYWxzZSk7CisgICAgICAgIGNvbW1lbnRhcnlGaWVsZC5zZXRGb250KG5ldyBGb250KCJIZWx2ZXRpY2EiLCBGb250LlBMQUlOLCAxNCkpOworCisgICAgICAgIHNwZWxsb3V0Rm9ybWF0dGVyID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChSYm5mU2FtcGxlUnVsZVNldHMudXNFbmdsaXNoLCBMb2NhbGUuVVMpOworICAgICAgICBzcGVsbG91dEZvcm1hdHRlci5zZXRMZW5pZW50UGFyc2VNb2RlKGxlbmllbnRQYXJzZSk7CisgICAgICAgIHBvcHVsYXRlUnVsZVNldE1lbnUoKTsKKyAgICAgICAgbnVtYmVyRm9ybWF0dGVyID0gbmV3IERlY2ltYWxGb3JtYXQoIiMsIyMwLiMjIyMjIyMjIyMiKTsKKyAgICAgICAgcGFyc2VQb3NpdGlvbiA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICB0aGVOdW1iZXIgPSAwOworCisgICAgICAgIG51bWJlckZpZWxkID0gbmV3IFRleHRGaWVsZCgpOworICAgICAgICBudW1iZXJGaWVsZC5zZXRGb250KG5ldyBGb250KCJTZXJpZiIsIEZvbnQuUExBSU4sIDI0KSk7CisgICAgICAgIHRleHRGaWVsZCA9IG5ldyBEZW1vVGV4dEZpZWxkSG9sZGVyKCk7CisgICAgICAgIHRleHRGaWVsZC5zZXRGb250KG5ldyBGb250KCJTZXJpZiIsIEZvbnQuUExBSU4sIDI0KSk7CisgICAgICAgIHJ1bGVzRmllbGQgPSBuZXcgRGVtb1RleHRGaWVsZEhvbGRlcigpOworICAgICAgICBydWxlc0ZpZWxkLnNldEZvbnQobmV3IEZvbnQoIlNlcmlmIiwgRm9udC5QTEFJTiwgMTQpKTsKKyAgICAgICAgbGVuaWVudFBhcnNlQnV0dG9uID0gbmV3IENoZWNrYm94KCJMZW5pZW50IHBhcnNlIiwgbGVuaWVudFBhcnNlKTsKKworICAgICAgICBudW1iZXJGaWVsZC5hZGRUZXh0TGlzdGVuZXIobmV3IFRleHRMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHRleHRWYWx1ZUNoYW5nZWQoVGV4dEV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW51bWJlckZpZWxkSGFzRm9jdXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIFN0cmluZyBmaWVsZFRleHQgPSAoKFRleHRDb21wb25lbnQpKGUuZ2V0U291cmNlKCkpKS5nZXRUZXh0KCk7CisgICAgICAgICAgICAgICAgcGFyc2VQb3NpdGlvbi5zZXRJbmRleCgwKTsKKyAgICAgICAgICAgICAgICBOdW1iZXIgdGVtcCA9IG51bWJlckZvcm1hdHRlci5wYXJzZShmaWVsZFRleHQsIHBhcnNlUG9zaXRpb24pOworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IG51bGwgfHwgcGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhlTnVtYmVyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLnNldFRleHQoIlBBUlNFIEVSUk9SIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGVOdW1iZXIgPSB0ZW1wLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC5zZXRUZXh0KHNwZWxsb3V0Rm9ybWF0dGVyLmZvcm1hdCh0aGVOdW1iZXIsIHJ1bGVTZXROYW1lKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisKKyAgICAgICAgbnVtYmVyRmllbGQuYWRkRm9jdXNMaXN0ZW5lcihuZXcgRm9jdXNBZGFwdGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgZm9jdXNMb3N0KEZvY3VzRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIG51bWJlckZpZWxkSGFzRm9jdXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBudW1iZXJGaWVsZC5zZXRUZXh0KG51bWJlckZvcm1hdHRlci5mb3JtYXQodGhlTnVtYmVyKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGZvY3VzR2FpbmVkKEZvY3VzRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIG51bWJlckZpZWxkSGFzRm9jdXMgPSB0cnVlOworICAgICAgICAgICAgICAgIG51bWJlckZpZWxkLnNlbGVjdEFsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisKKyAgICAgICAgdGV4dEZpZWxkLmFkZEtleUxpc3RlbmVyKG5ldyBLZXlBZGFwdGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQga2V5VHlwZWQoS2V5RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGlmIChlLmdldEtleUNoYXIoKSA9PSAnXHQnKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmaWVsZFRleHQgPSAoKFRleHRDb21wb25lbnQpKGUuZ2V0U291cmNlKCkpKS5nZXRUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0SW5kZXgoMCk7CisgICAgICAgICAgICAgICAgICAgIHRoZU51bWJlciA9IHNwZWxsb3V0Rm9ybWF0dGVyLnBhcnNlKGZpZWxkVGV4dCwgcGFyc2VQb3NpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVOdW1iZXIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRmllbGQuc2V0VGV4dCgiUEFSU0UgRVJST1IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC5zZWxlY3RBbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkgPCBmaWVsZFRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC5zZWxlY3QocGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpLCBmaWVsZFRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRmllbGQuc2V0VGV4dChudW1iZXJGb3JtYXR0ZXIuZm9ybWF0KHRoZU51bWJlcikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLnNlbGVjdEFsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRmllbGQuc2V0VGV4dChudW1iZXJGb3JtYXR0ZXIuZm9ybWF0KHRoZU51bWJlcikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGUuY29uc3VtZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworCisgICAgICAgIHRleHRGaWVsZC5hZGRGb2N1c0xpc3RlbmVyKG5ldyBGb2N1c0FkYXB0ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBmb2N1c0xvc3QoRm9jdXNFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpZWxkVGV4dCA9ICgoVGV4dENvbXBvbmVudCkoZS5nZXRTb3VyY2UoKSkpLmdldFRleHQoKTsKKyAgICAgICAgICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEluZGV4KDApOworICAgICAgICAgICAgICAgIHRoZU51bWJlciA9IHNwZWxsb3V0Rm9ybWF0dGVyLnBhcnNlKGZpZWxkVGV4dCwgcGFyc2VQb3NpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBudW1iZXJGaWVsZC5zZXRUZXh0KCJQQVJTRSBFUlJPUiIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyRmllbGQuc2V0VGV4dChudW1iZXJGb3JtYXR0ZXIuZm9ybWF0KHRoZU51bWJlcikpOworICAgICAgICAgICAgICAgIHRleHRGaWVsZC5zZXRUZXh0KHRleHRGaWVsZC5nZXRUZXh0KCkpOyAvLyB0ZXh0RmllbGQucmVwYWludCgpIGRpZG4ndCB3b3JrIHJpZ2h0CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGZvY3VzR2FpbmVkKEZvY3VzRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIHRleHRGaWVsZC5zZWxlY3RBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworCisgICAgICAgIHJ1bGVzRmllbGQuYWRkS2V5TGlzdGVuZXIobmV3IEtleUFkYXB0ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBrZXlUeXBlZChLZXlFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaWYgKGUuZ2V0S2V5Q2hhcigpID09ICdcdCcpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpZWxkVGV4dCA9ICgoVGV4dENvbXBvbmVudCkoZS5nZXRTb3VyY2UoKSkpLmdldFRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlck1lbnUuZ2V0U2VsZWN0ZWRJdGVtKCkuZXF1YWxzKCJDdXN0b20iKSB8fCAhZmllbGRUZXh0LmVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJibmZTYW1wbGVSdWxlU2V0cy5zYW1wbGVSdWxlU2V0c1tmb3JtYXR0ZXJNZW51LmdldFNlbGVjdGVkSW5kZXgoKV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCB0ZW1wID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChmaWVsZFRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuc2V0TGVuaWVudFBhcnNlTW9kZShsZW5pZW50UGFyc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlUnVsZVNldE1lbnUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbG91dEZvcm1hdHRlciA9IHRlbXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tUnVsZVNldCA9IGZpZWxkVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJNZW51LnNlbGVjdCgiQ3VzdG9tIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudGFyeUZpZWxkLnNldFRleHQoUmJuZlNhbXBsZVJ1bGVTZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVSdWxlU2V0Q29tbWVudGFyeVtSYm5mU2FtcGxlUnVsZVNldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZVJ1bGVTZXRDb21tZW50YXJ5Lmxlbmd0aCAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpc3BsYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24geCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC5zZXRUZXh0KHgudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZS5jb25zdW1lKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisKKyAgICAgICAgcnVsZXNGaWVsZC5hZGRGb2N1c0xpc3RlbmVyKG5ldyBGb2N1c0FkYXB0ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBmb2N1c0xvc3QoRm9jdXNFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpZWxkVGV4dCA9ICgoVGV4dENvbXBvbmVudCkoZS5nZXRTb3VyY2UoKSkpLmdldFRleHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyTWVudS5nZXRTZWxlY3RlZEl0ZW0oKS5lcXVhbHMoIkN1c3RvbSIpIHx8ICFmaWVsZFRleHQuZXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYm5mU2FtcGxlUnVsZVNldHMuc2FtcGxlUnVsZVNldHNbZm9ybWF0dGVyTWVudS5nZXRTZWxlY3RlZEluZGV4KCldKSkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IHRlbXAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KGZpZWxkVGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnNldExlbmllbnRQYXJzZU1vZGUobGVuaWVudFBhcnNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlUnVsZVNldE1lbnUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsb3V0Rm9ybWF0dGVyID0gdGVtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVJ1bGVTZXQgPSBmaWVsZFRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJNZW51LnNlbGVjdCgiQ3VzdG9tIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZWRpc3BsYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC5zZXRUZXh0KHgudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcnVsZXNGaWVsZC5zZXRUZXh0KHJ1bGVzRmllbGQuZ2V0VGV4dCgpKTsgLy8gcnVsZXNGaWVsZC5yZXBhaW50KCkgZGlkbid0IHdvcmsgcmlnaHQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworCisgICAgICAgIGxlbmllbnRQYXJzZUJ1dHRvbi5hZGRJdGVtTGlzdGVuZXIobmV3IEl0ZW1MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGl0ZW1TdGF0ZUNoYW5nZWQoSXRlbUV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBsZW5pZW50UGFyc2UgPSBsZW5pZW50UGFyc2VCdXR0b24uZ2V0U3RhdGUoKTsKKyAgICAgICAgICAgICAgICBzcGVsbG91dEZvcm1hdHRlci5zZXRMZW5pZW50UGFyc2VNb2RlKGxlbmllbnRQYXJzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKworICAgICAgICBudW1iZXJGaWVsZC5zZXRUZXh0KG51bWJlckZvcm1hdHRlci5mb3JtYXQodGhlTnVtYmVyKSk7CisgICAgICAgIG51bWJlckZpZWxkLnNlbGVjdEFsbCgpOworICAgICAgICB0ZXh0RmllbGQuc2V0VGV4dChzcGVsbG91dEZvcm1hdHRlci5mb3JtYXQodGhlTnVtYmVyLCBydWxlU2V0TmFtZSkpOworCisgICAgICAgIFBhbmVsIGxlZnRQYW5lbCA9IG5ldyBQYW5lbCgpOworICAgICAgICBsZWZ0UGFuZWwuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIFBhbmVsIHBhbmVsID0gbmV3IFBhbmVsKCk7CisgICAgICAgIHBhbmVsLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworICAgICAgICBQYW5lbCBwYW5lbDEgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgcGFuZWwxLnNldExheW91dChuZXcgR3JpZExheW91dCgzLCAxKSk7CisgICAgICAgIHBhbmVsMS5hZGQobmV3IFBhbmVsKCkpOworICAgICAgICBwYW5lbDEuYWRkKG51bWJlckZpZWxkLCAiQ2VudGVyIik7CisgICAgICAgIHBhbmVsMS5hZGQobGVuaWVudFBhcnNlQnV0dG9uKTsKKyAgICAgICAgcGFuZWwuYWRkKHBhbmVsMSwgIkNlbnRlciIpOworICAgICAgICBQYW5lbCBwYW5lbDIgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgcGFuZWwyLnNldExheW91dChuZXcgR3JpZExheW91dCgzLCAzKSk7CisgICAgICAgIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKCIrMTAwIik7CisgICAgICAgIGJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lciggbmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICByb2xsKDEwMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICAgICAgcGFuZWwyLmFkZChidXR0b24pOworICAgICAgICBidXR0b24gPSBuZXcgQnV0dG9uKCIrMTAiKTsKKyAgICAgICAgYnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKCBuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIHJvbGwoMTApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgICAgIHBhbmVsMi5hZGQoYnV0dG9uKTsKKyAgICAgICAgYnV0dG9uID0gbmV3IEJ1dHRvbigiKzEiKTsKKyAgICAgICAgYnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKCBuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIHJvbGwoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICAgICAgcGFuZWwyLmFkZChidXR0b24pOworICAgICAgICBidXR0b24gPSBuZXcgQnV0dG9uKCI8Iik7CisgICAgICAgIGJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lciggbmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICB0aGVOdW1iZXIgKj0gMTA7CisgICAgICAgICAgICAgICAgcmVkaXNwbGF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICAgICAgcGFuZWwyLmFkZChidXR0b24pOworICAgICAgICBwYW5lbDIuYWRkKG5ldyBQYW5lbCgpKTsKKyAgICAgICAgYnV0dG9uID0gbmV3IEJ1dHRvbigiPiIpOworICAgICAgICBidXR0b24uYWRkQWN0aW9uTGlzdGVuZXIoIG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgdGhlTnVtYmVyIC89IDEwOworICAgICAgICAgICAgICAgIHJlZGlzcGxheSgpOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgICAgIHBhbmVsMi5hZGQoYnV0dG9uKTsKKyAgICAgICAgYnV0dG9uID0gbmV3IEJ1dHRvbigiLTEwMCIpOworICAgICAgICBidXR0b24uYWRkQWN0aW9uTGlzdGVuZXIoIG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgcm9sbCgtMTAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgICAgICBwYW5lbDIuYWRkKGJ1dHRvbik7CisgICAgICAgIGJ1dHRvbiA9IG5ldyBCdXR0b24oIi0xMCIpOworICAgICAgICBidXR0b24uYWRkQWN0aW9uTGlzdGVuZXIoIG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgcm9sbCgtMTApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgICAgIHBhbmVsMi5hZGQoYnV0dG9uKTsKKyAgICAgICAgYnV0dG9uID0gbmV3IEJ1dHRvbigiLTEiKTsKKyAgICAgICAgYnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKCBuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIHJvbGwoLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgICAgIHBhbmVsMi5hZGQoYnV0dG9uKTsKKyAgICAgICAgcGFuZWwuYWRkKHBhbmVsMiwgIkVhc3QiKTsKKyAgICAgICAgbGVmdFBhbmVsLmFkZChwYW5lbCwgIk5vcnRoIik7CisgICAgICAgIGxlZnRQYW5lbC5hZGQodGV4dEZpZWxkLCAiQ2VudGVyIik7CisKKyAgICAgICAgUGFuZWwgcmlnaHRQYW5lbCA9IG5ldyBQYW5lbCgpOworICAgICAgICByaWdodFBhbmVsLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworICAgICAgICBmb3JtYXR0ZXJNZW51ID0gbmV3IENob2ljZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFJibmZTYW1wbGVSdWxlU2V0cy5zYW1wbGVSdWxlU2V0TmFtZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBmb3JtYXR0ZXJNZW51LmFkZEl0ZW0oUmJuZlNhbXBsZVJ1bGVTZXRzLnNhbXBsZVJ1bGVTZXROYW1lc1tpXSk7CisgICAgICAgIGZvcm1hdHRlck1lbnUuYWRkSXRlbSgiQ3VzdG9tIik7CisgICAgICAgIGZvcm1hdHRlck1lbnUuYWRkSXRlbUxpc3RlbmVyKG5ldyBJdGVtTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBpdGVtU3RhdGVDaGFuZ2VkKEl0ZW1FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgQ2hvaWNlIHNvdXJjZSA9IChDaG9pY2UpKGUuZ2V0U291cmNlKCkpOworICAgICAgICAgICAgICAgIGludCBpdGVtID0gc291cmNlLmdldFNlbGVjdGVkSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBMb2NhbGUgbG9jYWxlID0gUmJuZlNhbXBsZVJ1bGVTZXRzLnNhbXBsZVJ1bGVTZXRMb2NhbGVzW2l0ZW1dOworCisgICAgICAgICAgICAgICAgY29tbWVudGFyeUZpZWxkLnNldFRleHQoUmJuZlNhbXBsZVJ1bGVTZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVSdWxlU2V0Q29tbWVudGFyeVtpdGVtXSk7CisKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwgJiYgKGxvY2FsZS5nZXRMYW5ndWFnZSgpLmVxdWFscygiaXciKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbG9jYWxlLmdldExhbmd1YWdlKCkuZXF1YWxzKCJydSIpIHx8IGxvY2FsZS5nZXRMYW5ndWFnZSgpLmVxdWFscygiamEiKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbG9jYWxlLmdldExhbmd1YWdlKCkuZXF1YWxzKCJlbCIpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKS5lcXVhbHMoInpoIikpKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC50b2dnbGVQYW5lcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHJ1bGVzRmllbGQudG9nZ2xlUGFuZXMoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLnRvZ2dsZVBhbmVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBydWxlc0ZpZWxkLnRvZ2dsZVBhbmVzKHRydWUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1ha2VOZXdTcGVsbG91dEZvcm1hdHRlcigpOworICAgICAgICAgICAgICAgIHJlZGlzcGxheSgpOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisKKyAgICAgICAgcnVsZVNldE1lbnUgPSBuZXcgQ2hvaWNlKCk7CisgICAgICAgIHBvcHVsYXRlUnVsZVNldE1lbnUoKTsKKworICAgICAgICBydWxlU2V0TWVudS5hZGRJdGVtTGlzdGVuZXIobmV3IEl0ZW1MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGl0ZW1TdGF0ZUNoYW5nZWQoSXRlbUV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBydWxlU2V0TmFtZSA9IHJ1bGVTZXRNZW51LmdldFNlbGVjdGVkSXRlbSgpOworICAgICAgICAgICAgICAgIHJlZGlzcGxheSgpOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisKKyAgICAgICAgUGFuZWwgbWVudVBhbmVsID0gbmV3IFBhbmVsKCk7CisgICAgICAgIG1lbnVQYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMSwgMikpOworICAgICAgICBtZW51UGFuZWwuYWRkKGZvcm1hdHRlck1lbnUpOworICAgICAgICBtZW51UGFuZWwuYWRkKHJ1bGVTZXRNZW51KTsKKyAgICAgICAgcmlnaHRQYW5lbC5hZGQobWVudVBhbmVsLCAiTm9ydGgiKTsKKworICAgICAgICBydWxlc0ZpZWxkLnNldFRleHQoUmJuZlNhbXBsZVJ1bGVTZXRzLnNhbXBsZVJ1bGVTZXRzW2Zvcm1hdHRlck1lbnUuZ2V0U2VsZWN0ZWRJbmRleCgpXSk7CisgICAgICAgIHJpZ2h0UGFuZWwuYWRkKHJ1bGVzRmllbGQsICJDZW50ZXIiKTsKKworICAgICAgICBtYWluUGFuZWwuYWRkKGxlZnRQYW5lbCk7CisgICAgICAgIG1haW5QYW5lbC5hZGQocmlnaHRQYW5lbCk7CisKKyAgICAgICAgd2luZG93LmFkZChtYWluUGFuZWwsICJDZW50ZXIiKTsKKyAgICAgICAgd2luZG93LmFkZChjb21tZW50YXJ5RmllbGQsICJTb3V0aCIpOworCisgICAgICAgIHdpbmRvdy5kb0xheW91dCgpOworICAgICAgICB3aW5kb3cuc2hvdygpOworICAgICAgICByZXR1cm4gd2luZG93OworICAgIH0KKworICAgIHZvaWQgcm9sbChpbnQgZGVsdGEpIHsKKyAgICAgICAgdGhlTnVtYmVyICs9IGRlbHRhOworICAgICAgICByZWRpc3BsYXkoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZGlzcGxheSgpIHsKKyAgICAgICAgbnVtYmVyRmllbGQuc2V0VGV4dChudW1iZXJGb3JtYXR0ZXIuZm9ybWF0KHRoZU51bWJlcikpOworICAgICAgICB0ZXh0RmllbGQuc2V0VGV4dChzcGVsbG91dEZvcm1hdHRlci5mb3JtYXQodGhlTnVtYmVyLCBydWxlU2V0TmFtZSkpOworICAgIH0KKworICAgIHZvaWQgbWFrZU5ld1NwZWxsb3V0Rm9ybWF0dGVyKCkgeworICAgICAgICBpbnQgaXRlbSA9IGZvcm1hdHRlck1lbnUuZ2V0U2VsZWN0ZWRJbmRleCgpOworICAgICAgICBTdHJpbmcgZm9ybWF0dGVyTWVudUl0ZW0gPSBmb3JtYXR0ZXJNZW51LmdldFNlbGVjdGVkSXRlbSgpOworCisgICAgICAgIGlmIChmb3JtYXR0ZXJNZW51SXRlbS5lcXVhbHMoIkN1c3RvbSIpKSB7CisgICAgICAgICAgICBydWxlc0ZpZWxkLnNldFRleHQoY3VzdG9tUnVsZVNldCk7CisgICAgICAgICAgICBzcGVsbG91dEZvcm1hdHRlciA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoY3VzdG9tUnVsZVNldCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBydWxlc0ZpZWxkLnNldFRleHQoUmJuZlNhbXBsZVJ1bGVTZXRzLnNhbXBsZVJ1bGVTZXRzW2l0ZW1dKTsKKworICAgICAgICAgICAgTG9jYWxlIGxvY2FsZSA9IFJibmZTYW1wbGVSdWxlU2V0cy5zYW1wbGVSdWxlU2V0TG9jYWxlc1tpdGVtXTsKKyAgICAgICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBsb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworCisgICAgICAgICAgICBzcGVsbG91dEZvcm1hdHRlciA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoUmJuZlNhbXBsZVJ1bGVTZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZVJ1bGVTZXRzW2l0ZW1dLCBsb2NhbGUpOworICAgICAgICB9CisgICAgICAgIHNwZWxsb3V0Rm9ybWF0dGVyLnNldExlbmllbnRQYXJzZU1vZGUobGVuaWVudFBhcnNlKTsKKyAgICAgICAgcG9wdWxhdGVSdWxlU2V0TWVudSgpOworICAgIH0KKworICAgIHZvaWQgcG9wdWxhdGVSdWxlU2V0TWVudSgpIHsKKyAgICAgICAgU3RyaW5nW10gcnVsZVNldE5hbWVzID0gc3BlbGxvdXRGb3JtYXR0ZXIuZ2V0UnVsZVNldE5hbWVzKCk7CisKKyAgICAgICAgaWYgKHJ1bGVTZXRNZW51ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJ1bGVTZXRNZW51LnJlbW92ZUFsbCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydWxlU2V0TmFtZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgcnVsZVNldE1lbnUuYWRkSXRlbShydWxlU2V0TmFtZXNbaV0pOworCisgICAgICAgICAgICBydWxlU2V0TmFtZSA9IHJ1bGVTZXRNZW51LmdldFNlbGVjdGVkSXRlbSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJ1bGVTZXROYW1lID0gcnVsZVNldE5hbWVzWzBdOworICAgIH0KKworICAgIHByaXZhdGUgRnJhbWUgZGVtb1dpbmRvdyA9IG51bGw7CisKKyAgICBwcml2YXRlIFRleHRDb21wb25lbnQgbnVtYmVyRmllbGQ7CisgICAgcHJpdmF0ZSBEZW1vVGV4dEZpZWxkSG9sZGVyIHRleHRGaWVsZDsKKyAgICBwcml2YXRlIERlbW9UZXh0RmllbGRIb2xkZXIgcnVsZXNGaWVsZDsKKyAgICBwcml2YXRlIFRleHRDb21wb25lbnQgY29tbWVudGFyeUZpZWxkOworICAgIHByaXZhdGUgQ2hlY2tib3ggbGVuaWVudFBhcnNlQnV0dG9uOworCisgICAgcHJpdmF0ZSBib29sZWFuIG51bWJlckZpZWxkSGFzRm9jdXMgPSB0cnVlOworCisgICAgcHJpdmF0ZSBSdWxlQmFzZWROdW1iZXJGb3JtYXQgc3BlbGxvdXRGb3JtYXR0ZXI7CisgICAgcHJpdmF0ZSBEZWNpbWFsRm9ybWF0IG51bWJlckZvcm1hdHRlcjsKKyAgICBwcml2YXRlIFBhcnNlUG9zaXRpb24gcGFyc2VQb3NpdGlvbjsKKworICAgIHByaXZhdGUgYm9vbGVhbiBsZW5pZW50UGFyc2UgPSB0cnVlOworCisgICAgcHJpdmF0ZSBkb3VibGUgdGhlTnVtYmVyID0gMDsKKyAgICBwcml2YXRlIGJvb2xlYW4gY2FuRWRpdCA9IHRydWU7CisKKyAgICBwcml2YXRlIENob2ljZSBmb3JtYXR0ZXJNZW51OworICAgIHByaXZhdGUgQ2hvaWNlIHJ1bGVTZXRNZW51OworICAgIHByaXZhdGUgU3RyaW5nIHJ1bGVTZXROYW1lOworCisgICAgcHJpdmF0ZSBTdHJpbmcgY3VzdG9tUnVsZVNldCA9ICJOTyBSVUxFUyEiOworfQorCitjbGFzcyBEZW1vVGV4dEZpZWxkIGV4dGVuZHMgQ29tcG9uZW50IHsKKyAgICBwdWJsaWMgRGVtb1RleHRGaWVsZCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KSB7CisgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgICAgIHRoaXMucmVwYWludCgpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZykgeworICAgICAgICBGb250IGZvbnQgPSBnZXRGb250KCk7CisgICAgICAgIEZvbnRNZXRyaWNzIGZtID0gZy5nZXRGb250TWV0cmljcygpOworICAgICAgICBnLnNldEZvbnQoZm9udCk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZ2V0VGV4dCgpOworICAgICAgICBCcmVha0l0ZXJhdG9yIGJpID0gQnJlYWtJdGVyYXRvci5nZXRMaW5lSW5zdGFuY2UoKTsKKyAgICAgICAgYmkuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgaW50IGxpbmVIZWlnaHQgPSBmbS5nZXRIZWlnaHQoKTsKKyAgICAgICAgaW50IHdpZHRoID0gZ2V0U2l6ZSgpLndpZHRoOworICAgICAgICBpbnQgcGVuWSA9IGZtLmdldEFzY2VudCgpOworICAgICAgICBpbnQgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgaW50IHRlbXBMaW5lRW5kID0gYmkuZmlyc3QoKTsKKyAgICAgICAgaW50IGxpbmVFbmQgPSAwOworICAgICAgICBpbnQgbWF4TGluZUVuZCA9IDA7CisgICAgICAgIHRvdGFsSGVpZ2h0ID0gMDsKKworICAgICAgICB3aGlsZSAobGluZVN0YXJ0IDwgdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgbWF4TGluZUVuZCA9IHRleHQuaW5kZXhPZignXG4nLCBsaW5lU3RhcnQpOworICAgICAgICAgICAgaWYgKG1heExpbmVFbmQgPT0gLTEpCisgICAgICAgICAgICAgICAgbWF4TGluZUVuZCA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgd2hpbGUgKHRlbXBMaW5lRW5kICE9IEJyZWFrSXRlcmF0b3IuRE9ORSAmJiBmbS5zdHJpbmdXaWR0aCh0ZXh0LnN1YnN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQsIHRlbXBMaW5lRW5kKSkgPCB3aWR0aCkgeworICAgICAgICAgICAgICAgIGxpbmVFbmQgPSB0ZW1wTGluZUVuZDsKKyAgICAgICAgICAgICAgICB0ZW1wTGluZUVuZCA9IGJpLm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lU3RhcnQgPj0gbGluZUVuZCkgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wTGluZUVuZCA9PSBCcmVha0l0ZXJhdG9yLkRPTkUpCisgICAgICAgICAgICAgICAgICAgIGxpbmVFbmQgPSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbGluZUVuZCA9IHRlbXBMaW5lRW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxpbmVFbmQgPiBtYXhMaW5lRW5kKQorICAgICAgICAgICAgICAgIGxpbmVFbmQgPSBtYXhMaW5lRW5kOworICAgICAgICAgICAgZy5kcmF3U3RyaW5nKHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGluZUVuZCksIDAsIHBlblkpOworICAgICAgICAgICAgcGVuWSArPSBsaW5lSGVpZ2h0OworICAgICAgICAgICAgdG90YWxIZWlnaHQgKz0gbGluZUhlaWdodDsKKyAgICAgICAgICAgIGxpbmVTdGFydCA9IGxpbmVFbmQ7CisgICAgICAgICAgICBpZiAobGluZVN0YXJ0IDwgdGV4dC5sZW5ndGgoKSAmJiB0ZXh0LmNoYXJBdChsaW5lU3RhcnQpID09ICdcbicpCisgICAgICAgICAgICAgICAgKytsaW5lU3RhcnQ7CisgICAgICAgIH0KKyAgICB9CisKKy8qCisgICAgcHVibGljIERpbWVuc2lvbiBnZXRQcmVmZXJyZWRTaXplKCkgeworICAgICAgICBEaW1lbnNpb24gc2l6ZSA9IGdldFBhcmVudCgpLmdldFNpemUoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oc2l6ZS53aWR0aCwgdG90YWxIZWlnaHQpOworICAgIH0KKyovCisKKyAgICBwcml2YXRlIFN0cmluZyB0ZXh0OworICAgIHByaXZhdGUgaW50IHRvdGFsSGVpZ2h0OworfQorCitjbGFzcyBEZW1vVGV4dEZpZWxkSG9sZGVyIGV4dGVuZHMgUGFuZWwgeworICAgIHB1YmxpYyBEZW1vVGV4dEZpZWxkSG9sZGVyKCkgeworICAgICAgICB0ZjEgPSBuZXcgVGV4dEFyZWEoIiIsIDAsIDAsIFRleHRBcmVhLlNDUk9MTEJBUlNfVkVSVElDQUxfT05MWSk7CisgICAgICAgIHRmMiA9IG5ldyBEZW1vVGV4dEZpZWxkKCk7CisgICAgICAgIHNwID0gbmV3IFNjcm9sbFBhbmUoKTsKKworICAgICAgICBzZXRMYXlvdXQobmV3IENhcmRMYXlvdXQoKSk7CisKKyAgICAgICAgc3AuYWRkKHRmMiwgIlRleHRGaWVsZDEiKTsKKyAgICAgICAgc3Auc2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgIGFkZCh0ZjEsICJUZXN0RmllbGQyIik7CisgICAgICAgIGFkZChzcCwgIlNjcm9sbFBhbmUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRGb2N1c0xpc3RlbmVyKEZvY3VzTGlzdGVuZXIgbCkgeworICAgICAgICB0ZjEuYWRkRm9jdXNMaXN0ZW5lcihsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRLZXlMaXN0ZW5lcihLZXlMaXN0ZW5lciBsKSB7CisgICAgICAgIHRmMS5hZGRLZXlMaXN0ZW5lcihsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KSB7CisgICAgICAgIHRmMS5zZXRUZXh0KHRleHQpOworICAgICAgICB0ZjIuc2V0VGV4dCh0ZXh0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisgICAgICAgIHJldHVybiB0ZjEuZ2V0VGV4dCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNlbGVjdChpbnQgc3RhcnQsIGludCBlbmQpIHsKKyAgICAgICAgdGYxLnNlbGVjdChzdGFydCwgZW5kKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZWxlY3RBbGwoKSB7CisgICAgICAgIHRmMS5zZWxlY3RBbGwoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0b2dnbGVQYW5lcyhib29sZWFuIGNhblNob3dSZWFsVGV4dEZpZWxkKSB7CisgICAgICAgIGlmIChjYW5TaG93UmVhbFRleHRGaWVsZCAhPSBzaG93aW5nUmVhbFRleHRGaWVsZCkgeworICAgICAgICAgICAgQ2FyZExheW91dCBsYXlvdXQgPSAoQ2FyZExheW91dCkoZ2V0TGF5b3V0KCkpOworICAgICAgICAgICAgbGF5b3V0Lm5leHQodGhpcyk7CisgICAgICAgICAgICBzaG93aW5nUmVhbFRleHRGaWVsZCA9IGNhblNob3dSZWFsVGV4dEZpZWxkOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBUZXh0QXJlYSB0ZjEgPSBudWxsOworICAgIHByaXZhdGUgRGVtb1RleHRGaWVsZCB0ZjIgPSBudWxsOworICAgIHByaXZhdGUgU2Nyb2xsUGFuZSBzcCA9IG51bGw7CisgICAgcHJpdmF0ZSBib29sZWFuIHNob3dpbmdSZWFsVGV4dEZpZWxkID0gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYm5mL1JibmZTYW1wbGVSdWxlU2V0cy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JibmYvUmJuZlNhbXBsZVJ1bGVTZXRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWY4YTY5YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYm5mL1JibmZTYW1wbGVSdWxlU2V0cy5qYXZhCkBAIC0wLDAgKzEsMTk0OSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JibmYvUmJuZlNhbXBsZVJ1bGVTZXRzLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDQ6NTkgJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuZGVtby5yYm5mOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LmRlbW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCisvKioKKyAqIEEgY29sbGVjdGlvbiBvZiBleGFtcGxlIHJ1bGUgc2V0cyBmb3IgdXNlIHdpdGggUnVsZUJhc2VkTnVtYmVyRm9ybWF0LgorICogVGhlc2UgZXhhbXBsZXMgYXJlIGludGVuZGVkIHRvIHNlcnZlIGJvdGggYXMgZGVtb25zdHJhdGlvbnMgb2Ygd2hhdCBjYW4KKyAqIGJlIGRvbmUgd2l0aCB0aGlzIGZyYW1ld29yaywgYW5kIGFzIHN0YXJ0aW5nIHBvaW50cyBmb3IgZGVzaWduaW5nIG5ldworICogcnVsZSBzZXRzLgorICoKKyAqIEZvciB0aG9zZSB0aGF0IGNsYWltIHRvIHJlcHJlc2VudCBudW1iZXItc3BlbGxvdXQgcnVsZXMgZm9yIGxhbmd1YWdlcworICogb3RoZXIgdGhhbiBVLlMuIEVuZ2xpc2gsIHdlIG1ha2Ugbm8gY2xhaW1zIG9mIGVpdGhlciBhY2N1cmFjeSBvcgorICogY29tcGxldGVuZXNzLiAgSW4gZmFjdCwgd2Uga25vdyB0aGVtIHRvIGJlIGluY29tcGxldGUsIGFuZCBzdXNwZWN0CisgKiBtb3N0IGhhdmUgbWlzdGFrZXMgaW4gdGhlbS4gIElmIHlvdSBzZWUgc29tZXRoaW5nIHRoYXQgeW91IGtub3cgaXMgd3JvbmcsCisgKiBwbGVhc2UgdGVsbCB1cyEKKyAqCisgKiBAYXV0aG9yIFJpY2hhcmQgR2lsbGFtCisgKiBAdmVyc2lvbiAkVmVyc2lvbiQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDQ6NTkgJAorICovCitwdWJsaWMgY2xhc3MgUmJuZlNhbXBsZVJ1bGVTZXRzIHsKKyAgICAvKioKKyAgICAgKiBQdXRzIGEgY29weXJpZ2h0IGluIHRoZSAuY2xhc3MgZmlsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHROb3RpY2UKKyAgICAgICAgPSAiQ29weXJpZ2h0IFx1MDBhOTE5OTctMTk5OCBJQk0gQ29ycC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gU3BlbGxvdXQgcnVsZXMgZm9yIHZhcmlvdXMgbGFuZ3VhZ2VzCisgICAgLy8KKyAgICAvLyBUaGUgZm9sbG93aW5nIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBkZXNjcmlwdGlvbnMgc2hvdyB0aGUgcnVsZXMgZm9yCisgICAgLy8gc3BlbGxpbmcgb3V0IG51bWVyaWMgdmFsdWVzIGluIHZhcmlvdXMgbGFuZ3VhZ2VzLiAgQXMgbWVudGlvbmVkCisgICAgLy8gYmVmb3JlLCB3ZSBjYW5ub3Qgdm91Y2ggZm9yIHRoZSBhY2N1cmFjeSBvciBjb21wbGV0ZW5lc3Mgb2YgdGhpcworICAgIC8vIGRhdGEsIGFsdGhvdWdoIHdlIGJlbGlldmUgaXQncyBwcmV0dHkgY2xvc2UuICBCYXNpY2FsbHksIHRoaXMKKyAgICAvLyByZXByZXNlbnRzIG9uZSBkYXkncyB3b3J0aCBvZiBXZWItc3VyZmluZy4gIElmIHlvdSBjYW4gc3VwcGx5IHRoZQorICAgIC8vIG1pc3NpbmcgaW5mb3JtYXRpb24gaW4gYW55IG9mIHRoZXNlIHJ1bGUgc2V0cywgb3IgaWYgeW91IGZpbmQgZXJyb3JzLAorICAgIC8vIG9yIGlmIHlvdSBjYW4gc3VwcGx5IHNwZWxsb3V0IHJ1bGVzIGZvciBsYW5ndWFnZXMgdGhhdCBhcmVuJ3Qgc2hvd24KKyAgICAvLyBoZXJlLCB3ZSB3YW50IHRvIGhlYXIgZnJvbSB5b3UhCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFNwZWxsb3V0IHJ1bGVzIGZvciBVLlMuIEVuZ2xpc2guICBUaGlzIGRlbW9uc3RyYXRpb24gdmVyc2lvbiBvZiB0aGUKKyAgICAgKiBVLlMuIEVuZ2xpc2ggc3BlbGxvdXQgcnVsZXMgaGFzIGZvdXIgdmFyaWFudHM6IDEpICVzaW1wbGlmaWVkIGlzIGEKKyAgICAgKiBzZXQgb2YgcnVsZXMgc2hvd2luZyB0aGUgc2ltcGxlIG1ldGhvZCBvZiBzcGVsbGluZyBvdXQgbnVtYmVycyBpbgorICAgICAqIEVuZ2xpc2g6IDI4OSBpcyBmb3JtYXR0ZWQgYXMgInR3byBodW5kcmVkIGVpZ2h0eS1uaW5lIi4gIDIpICVhbHQtdGVlbnMKKyAgICAgKiBpcyB0aGUgc2FtZSBhcyAlc2ltcGxpZmllZCwgZXhjZXB0IHRoYXQgdmFsdWVzIGJldHdlZW4gMSwwMDAgYW5kIDksOTk5CisgICAgICogd2hvc2UgaHVuZHJlZHMgcGxhY2UgaXNuJ3QgemVybyBhcmUgZm9ybWF0dGVkIGluIGh1bmRyZWRzLiAgRm9yIGV4YW1wbGUsCisgICAgICogMSw5ODMgaXMgZm9ybWF0dGVkIGFzICJuaW5ldGVlbiBodW5kcmVkIGVpZ2h0eS10aHJlZSwiIGFuZCAyLDE4MyBpcworICAgICAqIGZvcm1hdHRlZCBhcyAidHdlbnR5LW9uZSBodW5kcmVkIGVpZ2h0eS10aHJlZSwiIGJ1dCAyLDA4MyBpcyBzdGlsbAorICAgICAqIGZvcm1hdHRlZCBhcyAidHdvIHRob3VzYW5kIGVpZ2h0eS10aHJlZS4iICAzKSAlb3JkaW5hbCBmb3JtYXRzIHRoZQorICAgICAqIHZhbHVlcyBhcyBvcmRpbmFsIG51bWJlcnMgaW4gRW5nbGlzaCAoZS5nLiwgMjg5IGlzICJ0d28gaHVuZHJlZCBlaWdodHktCisgICAgICogbmludGgiKS4gIDQpICVkZWZhdWx0IHVzZXMgYSBtb3JlIGNvbXBsaWNhdGVkIGFsZ29yaXRobSB0byBmb3JtYXQKKyAgICAgKiBudW1iZXJzIGluIGEgbW9yZSBuYXR1cmFsIHdheTogMjg5IGlzIGZvcm1hdHRlZCBhcyAidHdvIGh1bmRyZWQgQU5ECisgICAgICogZWlnaHR5LW5pbmUiIGFuZCBjb21tYXMgYXJlIGluc2VydGVkIGJldHdlZW4gdGhlIHRob3VzYW5kcyBncm91cHMgZm9yCisgICAgICogdmFsdWVzIGFib3ZlIDEwMCwwMDAuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdXNFbmdsaXNoID0KKyAgICAgICAgLy8gVGhpcyBydWxlIHNldCBzaG93cyB0aGUgbm9ybWFsIHNpbXBsZSBmb3JtYXR0aW5nIHJ1bGVzIGZvciBFbmdsaXNoCisgICAgICAgICIlc2ltcGxpZmllZDpcbiIKKyAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlciBydWxlLiAgVGhpcyBydWxlIGlzIHVzZWQgdG8gZm9ybWF0IG5lZ2F0aXZlCisgICAgICAgICAgICAgICAvLyBudW1iZXJzLiAgVGhlIHJlc3VsdCBvZiBmb3JtYXR0aW5nIHRoZSBudW1iZXIncyBhYnNvbHV0ZQorICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgcGxhY2VkIHdoZXJlIHRoZSA+PiBpcy4KKyAgICAgICAgKyAiICAgIC14OiBtaW51cyA+PjtcbiIKKyAgICAgICAgICAgICAgIC8vIGZhY3Rpb24gcnVsZS4gIFRoaXMgcnVsZSBpcyB1c2VkIGZvciBmb3JtYXR0aW5nIG51bWJlcnMKKyAgICAgICAgICAgICAgIC8vIHdpdGggZnJhY3Rpb25hbCBwYXJ0cy4gIFRoZSByZXN1bHQgb2YgZm9ybWF0dGluZyB0aGUKKyAgICAgICAgICAgICAgIC8vIG51bWJlcidzIGludGVncmFsIHBhcnQgaXMgc3Vic3RpdHV0ZWQgZm9yIHRoZSA8PCwgYW5kCisgICAgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IG9mIGZvcm1hdHRpbmcgdGhlIG51bWJlcidzIGZyYWN0aW9uYWwgcGFydAorICAgICAgICAgICAgICAgLy8gKG9uZSBkaWdpdCBhdCBhIHRpbWUsIGUuZy4sIDAuMTIzIGlzICJ6ZXJvIHBvaW50IG9uZSB0d28KKyAgICAgICAgICAgICAgIC8vIHRocmVlIikgcmVwbGFjZXMgdGhlID4+LgorICAgICAgICArICIgICAgeC54OiA8PCBwb2ludCA+PjtcbiIKKyAgICAgICAgICAgICAgIC8vIHRoZSBydWxlcyBmb3IgdGhlIHZhbHVlcyBmcm9tIDAgdG8gMTkgYXJlIHNpbXBseSB0aGUKKyAgICAgICAgICAgICAgIC8vIHdvcmRzIGZvciB0aG9zZSBudW1iZXJzCisgICAgICAgICsgIiAgICB6ZXJvOyBvbmU7IHR3bzsgdGhyZWU7IGZvdXI7IGZpdmU7IHNpeDsgc2V2ZW47IGVpZ2h0OyBuaW5lO1xuIgorICAgICAgICArICIgICAgdGVuOyBlbGV2ZW47IHR3ZWx2ZTsgdGhpcnRlZW47IGZvdXJ0ZWVuOyBmaWZ0ZWVuOyBzaXh0ZWVuO1xuIgorICAgICAgICArICIgICAgICAgIHNldmVudGVlbjsgZWlnaHRlZW47IG5pbmV0ZWVuO1xuIgorICAgICAgICAgICAgICAgLy8gYmVnaW5uaW5nIGF0IDIwLCB3ZSB1c2UgdGhlID4+IHRvIG1hcmsgdGhlIHBvc2l0aW9uIHdoZXJlCisgICAgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IG9mIGZvcm1hdHRpbmcgdGhlIG51bWJlcidzIG9uZXMgZGlnaXQuICBUaHVzLAorICAgICAgICAgICAgICAgLy8gd2Ugb25seSBuZWVkIGEgbmV3IHJ1bGUgYXQgZXZlcnkgbXVsdGlwbGUgb2YgMTAuICBUZXh0IGluCisgICAgICAgICAgICAgICAvLyBiYWNrZXRzIGlzIG9taXR0ZWQgaWYgdGhlIHZhbHVlIGJlaW5nIGZvcm1hdHRlZCBpcyBhbgorICAgICAgICAgICAgICAgLy8gZXZlbiBtdWx0aXBsZSBvZiAxMC4KKyAgICAgICAgKyAiICAgIDIwOiB0d2VudHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDMwOiB0aGlydHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDQwOiBmb3J0eVstPj5dO1xuIgorICAgICAgICArICIgICAgNTA6IGZpZnR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICA2MDogc2l4dHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDcwOiBzZXZlbnR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICA4MDogZWlnaHR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICA5MDogbmluZXR5Wy0+Pl07XG4iCisgICAgICAgICAgICAgICAvLyBiZWdpbm5pbmcgYXQgMTAwLCB3ZSBjYW4gdXNlIDw8IHRvIG1hcmsgdGhlIHBvc2l0aW9uIHdoZXJlCisgICAgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IG9mIGZvcm1hdHRpbmcgdGhlIG11bHRpcGxlIG9mIDEwMCBpcyB0byBiZQorICAgICAgICAgICAgICAgLy8gaW5zZXJ0ZWQuICBOb3RpY2UgYWxzbyB0aGF0IHRoZSBtZWFuaW5nIG9mID4+IGhhcyBzaGlmdGVkOgorICAgICAgICAgICAgICAgLy8gaGVyZSwgaXQgcmVmZXJzIHRvIGJvdGggdGhlIG9uZXMgcGxhY2UgYW5kIHRoZSB0ZW5zIHBsYWNlLgorICAgICAgICAgICAgICAgLy8gVGhlIG1lYW5pbmdzIG9mIHRoZSA8PCBhbmQgPj4gdG9rZW5zIGRlcGVuZCBvbiB0aGUgYmFzZSB2YWx1ZQorICAgICAgICAgICAgICAgLy8gb2YgdGhlIHJ1bGUuICBBIHJ1bGUncyBkaXZpc29yIGlzICh1c3VhbGx5KSB0aGUgaGlnaGVzdAorICAgICAgICAgICAgICAgLy8gcG93ZXIgb2YgMTAgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJ1bGUncyBiYXNlCisgICAgICAgICAgICAgICAvLyB2YWx1ZS4gIFRoZSB2YWx1ZSBiZWluZyBmb3JtYXR0ZWQgaXMgZGl2aWRlZCBieSB0aGUgcnVsZSdzCisgICAgICAgICAgICAgICAvLyBkaXZpc29yLCBhbmQgdGhlIGludGVncmFsIHF1b3RpZW50IGlzIHVzZWQgdG8gZ2V0IHRoZSB0ZXh0CisgICAgICAgICAgICAgICAvLyBmb3IgPDwsIHdoaWxlIHRoZSByZW1haW5kZXIgaXMgdXNlZCB0byBwcm9kdWNlIHRoZSB0ZXh0CisgICAgICAgICAgICAgICAvLyBmb3IgPj4uICBBZ2FpbiwgdGV4dCBpbiBicmFja2V0cyBpcyBvbWl0dGVkIGlmIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgLy8gYmVpbmcgZm9ybWF0dGVkIGlzIGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIHJ1bGUncyBkaXZpc29yCisgICAgICAgICAgICAgICAvLyAoaW4gdGhpcyBjYXNlLCBhbiBldmVuIG11bHRpcGxlIG9mIDEwMCkKKyAgICAgICAgKyAiICAgIDEwMDogPDwgaHVuZHJlZFsgPj5dO1xuIgorICAgICAgICAgICAgICAgLy8gVGhlIHJ1bGVzIGZvciB0aGUgaGlnaGVyIG51bWJlcnMgd29yayB0aGUgc2FtZSB3YXkgYXMgdGhlCisgICAgICAgICAgICAgICAvLyBydWxlIGZvciAxMDA6IEFnYWluLCB0aGUgPDwgYW5kID4+IHRva2VucyBkZXBlbmQgb24gdGhlCisgICAgICAgICAgICAgICAvLyBydWxlJ3MgZGl2aXNvciwgd2hpY2ggZm9yIGFsbCB0aGVzZSBydWxlcyBpcyBhbHNvIHRoZSBydWxlJ3MKKyAgICAgICAgICAgICAgIC8vIGJhc2UgdmFsdWUuICBUbyBncm91cCBieSB0aG91c2FuZCwgd2Ugc2ltcGx5IGRvbid0IGhhdmUgYW55CisgICAgICAgICAgICAgICAvLyBydWxlcyBiZXR3ZWVuIDEsMDAwIGFuZCAxLDAwMCwwMDAuCisgICAgICAgICsgIiAgICAxMDAwOiA8PCB0aG91c2FuZFsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiA8PCBtaWxsaW9uWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwOiA8PCBiaWxsaW9uWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMDogPDwgdHJpbGxpb25bID4+XTtcbiIKKyAgICAgICAgICAgICAgIC8vIG92ZXJmbG93IHJ1bGUuICBUaGlzIHJ1bGUgc3BlY2lmaWVzIHRoYXQgdmFsdWVzIG9mIGEKKyAgICAgICAgICAgICAgIC8vIHF1YWRyaWxsaW9uIG9yIG1vcmUgYXJlIHNob3duIGluIG51bWVyYWxzIHJhdGhlciB0aGFuIHdvcmRzLgorICAgICAgICAgICAgICAgLy8gVGhlID09IHRva2VuIG1lYW5zIHRvIGZvcm1hdCAod2l0aCBuZXcgcnVsZXMpIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgLy8gYmVpbmcgZm9ybWF0dGVkIGJ5IHRoaXMgcnVsZSBhbmQgcGxhY2UgdGhlIHJlc3VsdCB3aGVyZQorICAgICAgICAgICAgICAgLy8gdGhlID09IGlzLiAgVGhlICMsIyMwIGluc2lkZSB0aGUgPT0gc2lnbnMgaXMgYQorICAgICAgICAgICAgICAgLy8gRGVjaW1hbEZvcm1hdCBwYXR0ZXJuLiAgSXQgc3BlY2lmaWVzIHRoYXQgdGhlIHZhbHVlIHNob3VsZAorICAgICAgICAgICAgICAgLy8gYmUgZm9ybWF0dGVkIHdpdGggYSBEZWNpbWFsRm9ybWF0IG9iamVjdCwgYW5kIHRoYXQgaXQKKyAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBmb3JtYXR0ZWQgd2l0aCBubyBkZWNpbWFsIHBsYWNlcywgYXQgbGVhc3Qgb25lCisgICAgICAgICAgICAgICAvLyBkaWdpdCwgYW5kIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4KKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMCwwMDAsMDAwLDAwMDogPSMsIyMwPTtcbiIKKworICAgICAgICAvLyBUaGlzIHJ1bGUgc2V0IGZvcm1hdHMgbnVtYmVycyBiZXR3ZWVuIDEsMDAwIGFuZCA5LDk5OSBzb21ld2hhdAorICAgICAgICAvLyBkaWZmZXJlbnRseTogSWYgdGhlIGh1bmRyZWRzIGRpZ2l0IGlzIG5vdCB6ZXJvLCB0aGUgZmlyc3QgdHdvCisgICAgICAgIC8vIGRpZ2l0cyBhcmUgdHJlYXRlZCBhcyBhIG51bWJlciBvZiBodW5kcmVkcy4gIEZvciBleGFtcGxlLCAyLDE5NworICAgICAgICAvLyB3b3VsZCBjb21lIG91dCBhcyAidHdlbnR5LW9uZSBodW5kcmVkIG5pbmV0eS1zZXZlbi4iCisgICAgICAgICsgIiVhbHQtdGVlbnM6XG4iCisgICAgICAgICAgICAgICAvLyBqdXN0IHVzZSAlc2ltcGxpZmllZCB0byBmb3JtYXQgdmFsdWVzIGJlbG93IDEsMDAwCisgICAgICAgICsgIiAgICA9JXNpbXBsaWZpZWQ9O1xuIgorICAgICAgICAgICAgICAgLy8gdmFsdWVzIGJldHdlZW4gMSwwMDAgYW5kIDksOTk5IGFyZSBkZWxlZ2F0ZWQgdG8gJSVhbHQtaHVuZHJlZHMKKyAgICAgICAgICAgICAgIC8vIGZvciBmb3JtYXR0aW5nLiAgVGhlID4gYWZ0ZXIgIjEwMDAiIGRlY3JlYXNlcyB0aGUgZXhwb25lbnQKKyAgICAgICAgICAgICAgIC8vIG9mIHRoZSBydWxlJ3MgcmFkaXggYnkgb25lLCBjYXVzaW5nIHRoZSBydWxlJ3MgZGl2aXNvcgorICAgICAgICAgICAgICAgLy8gdG8gYmUgMTAwIGluc3RlYWQgb2YgMSwwMDAuICBUaGlzIGNhdXNlcyB0aGUgZmlyc3QgVFdPCisgICAgICAgICAgICAgICAvLyBkaWdpdHMgb2YgdGhlIG51bWJlciwgaW5zdGVhZCBvZiBqdXN0IHRoZSBmaXJzdCBkaWdpdCwKKyAgICAgICAgICAgICAgIC8vIHRvIGJlIHNlbnQgdG8gJSVhbHQtaHVuZHJlZHMKKyAgICAgICAgKyAiICAgIDEwMDA+OiA8JSVhbHQtaHVuZHJlZHM8WyA+Pl07XG4iCisgICAgICAgICAgICAgICAvLyBmb3IgdmFsdWVzIG9mIDEwLDAwMCBhbmQgbW9yZSwgd2UgYWdhaW4ganVzdCB1c2UgJXNpbXBsaWZpZWQKKyAgICAgICAgKyAiICAgIDEwLDAwMDogPSVzaW1wbGlmaWVkPTtcbiIKKyAgICAgICAgLy8gVGhpcyBydWxlIHNldCB1c2VzIHNvbWUgb2JzY3VyZSB2b29kb28gb2YgdGhlIGRlc2NyaXB0aW9uIGxhbmd1YWdlCisgICAgICAgIC8vIHRvIGZvcm1hdCB0aGUgZmlyc3QgdHdvIGRpZ2l0cyBvZiBhIHZhbHVlIGluIHRoZSB0aG91c2FuZHMuCisgICAgICAgIC8vIFRoZSBydWxlIGF0IDEwIGZvcm1hdHMgdGhlIGZpcnN0IHR3byBkaWdpdHMgYXMgYSBtdWx0aXBsZSBvZiAxLDAwMAorICAgICAgICAvLyBhbmQgdGhlIHJ1bGUgYXQgMTEgZm9ybWF0cyB0aGUgZmlyc3QgdHdvIGRpZ2l0cyBhcyBhIG11bHRpcGxlIG9mCisgICAgICAgIC8vIDEwMC4gIFRoaXMgd29ya3MgYmVjYXVzZSBvZiBzb21ldGhpbmcga25vd24gYXMgdGhlICJyb2xsYmFjayBydWxlIjoKKyAgICAgICAgLy8gaWYgdGhlIHJ1bGUgYXBwbGljYWJsZSB0byB0aGUgdmFsdWUgYmVpbmcgZm9ybWF0dGVkIGhhcyB0d28KKyAgICAgICAgLy8gc3Vic3RpdHV0aW9ucywgdGhlIHZhbHVlIGJlaW5nIGZvcm1hdHRlZCBpcyBhbiBldmVuIG11bHRpcGxlIG9mCisgICAgICAgIC8vIHRoZSBydWxlJ3MgZGl2aXNvciwgYW5kIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZSBJU04nVCBhbiBldmVuIG11bHRpcGxlCisgICAgICAgIC8vIGlmIHRoZSBydWxlJ3MgZGl2aXNvciwgdGhlbiB0aGUgcnVsZSB0aGF0IHByZWNlZGVzIHRoaXMgb25lIGluIHRoZQorICAgICAgICAvLyBsaXN0IGlzIHVzZWQgaW5zdGVhZC4gIChUaGUgW10gbm90YXRpb24gaXMgaW1wbGVtZW50ZWQgaW50ZXJuYWxseQorICAgICAgICAvLyB1c2luZyB0aGlzIG5vdGF0aW9uOiBhIHJ1bGUgY29udGFpbmluZyBbXSBpcyBzcGxpdCBpbnRvIHR3byBydWxlcywKKyAgICAgICAgLy8gYW5kIHRoZSByaWdodCBvbmUgaXMgY2hvc2VuIHVzaW5nIHRoZSByb2xsYmFjayBydWxlLikgSW4gdGhpcyBjYXNlLAorICAgICAgICAvLyBpdCBtZWFucyB0aGF0IGlmIHRoZSBmaXJzdCB0d28gZGlnaXRzIGFyZSBhbiBldmVuIG11bHRpcGxlIG9mIDEwLAorICAgICAgICAvLyB0aGV5J3JlIGZvcm1hdHRlZCB3aXRoIHRoZSAxMCBydWxlIChjb250YWluaW5nICJ0aG91c2FuZCIpLCBhbmQgaWYKKyAgICAgICAgLy8gdGhleSdyZSBub3QsIHRoZXkncmUgZm9ybWF0dGVkIHdpdGggdGhlIDExIHJ1bGUgKGNvbnRhaW5pbmcKKyAgICAgICAgLy8gImh1bmRyZWQiKS4gICUlZW1wdHkgaXMgYSBoYWNrIHRvIGNhdXNlIHRoZSByb2xsYmFjayBydWxlIHRvIGJlCisgICAgICAgIC8vIGludm9rZWQ6IGl0IG1ha2VzIHRoZSAxMSBydWxlIGhhdmUgdHdvIHN1YnN0aXR1dGlvbnMsIGV2ZW4gdGhvdWdoCisgICAgICAgIC8vIHRoZSBzZWNvbmQgc3Vic3RpdHV0aW9uIChjYWxsaW5nICUlZW1wdHkpIGRvZXNuJ3QgYWN0dWFsbHkgZG8KKyAgICAgICAgLy8gYW55dGhpbmcuCisgICAgICAgICsgIiUlYWx0LWh1bmRyZWRzOlxuIgorICAgICAgICArICIgICAgMDogU0hPVUxEIE5FVkVSIEdFVCBIRVJFITtcbiIKKyAgICAgICAgKyAiICAgIDEwOiA8JXNpbXBsaWZpZWQ8IHRob3VzYW5kO1xuIgorICAgICAgICArICIgICAgMTE6ID0lc2ltcGxpZmllZD0gaHVuZHJlZD4lJWVtcHR5PjtcbiIKKyAgICAgICAgKyAiJSVlbXB0eTpcbiIKKyAgICAgICAgKyAiICAgIDA6OyIKKworICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGlzIHRoZSBzYW1lIGFzICVzaW1wbGlmaWVkLCBleGNlcHQgdGhhdCBpdCBmb3JtYXRzCisgICAgICAgIC8vIHRoZSB2YWx1ZSBhcyBhbiBvcmRpbmFsIG51bWJlcjogMjM0IGlzIGZvcm1hdHRlZCBhcyAidHdvIGh1bmRyZWQKKyAgICAgICAgLy8gdGhpcnR5LWZvdXJ0aCIuICBOb3RpY2UgdGhlIGNhbGxzIHRvIF5zaW1wbGlmaWVkOiB3ZSBoYXZlIHRvCisgICAgICAgIC8vIGNhbGwgJXNpbXBsaWZpZWQgdG8gYXZvaWQgZ2V0dGluZyAic2Vjb25kIGh1bmRyZWQgdGhpcnR5LWZvdXJ0aC4iCisgICAgICAgICsgIiVvcmRpbmFsOlxuIgorICAgICAgICArICIgICAgemVyb3RoOyBmaXJzdDsgc2Vjb25kOyB0aGlyZDsgZm91cnRoOyBmaWZ0aDsgc2l4dGg7IHNldmVudGg7XG4iCisgICAgICAgICsgIiAgICAgICAgZWlnaHRoOyBuaW50aDtcbiIKKyAgICAgICAgKyAiICAgIHRlbnRoOyBlbGV2ZW50aDsgdHdlbGZ0aDsgdGhpcnRlZW50aDsgZm91cnRlZW50aDtcbiIKKyAgICAgICAgKyAiICAgICAgICBmaWZ0ZWVudGg7IHNpeHRlZW50aDsgc2V2ZW50ZWVudGg7IGVpZ2h0ZWVudGg7XG4iCisgICAgICAgICsgIiAgICAgICAgbmluZXRlZW50aDtcbiIKKyAgICAgICAgKyAiICAgIHR3ZW50aWV0aDsgdHdlbnR5LT4+O1xuIgorICAgICAgICArICIgICAgMzA6IHRoaXJ0aWV0aDsgdGhpcnR5LT4+O1xuIgorICAgICAgICArICIgICAgNDA6IGZvcnRpZXRoOyBmb3J0eS0+PjtcbiIKKyAgICAgICAgKyAiICAgIDUwOiBmaWZ0aWV0aDsgZmlmdHktPj47XG4iCisgICAgICAgICsgIiAgICA2MDogc2l4dGlldGg7IHNpeHR5LT4+O1xuIgorICAgICAgICArICIgICAgNzA6IHNldmVudGlldGg7IHNldmVudHktPj47XG4iCisgICAgICAgICsgIiAgICA4MDogZWlnaHRpZXRoOyBlaWdodHktPj47XG4iCisgICAgICAgICsgIiAgICA5MDogbmluZXRpZXRoOyBuaW5ldHktPj47XG4iCisgICAgICAgICsgIiAgICAxMDA6IDwlc2ltcGxpZmllZDwgaHVuZHJlZHRoOyA8JXNpbXBsaWZpZWQ8IGh1bmRyZWQgPj47XG4iCisgICAgICAgICsgIiAgICAxMDAwOiA8JXNpbXBsaWZpZWQ8IHRob3VzYW5kdGg7IDwlc2ltcGxpZmllZDwgdGhvdXNhbmQgPj47XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDA6IDwlc2ltcGxpZmllZDwgbWlsbGlvbnRoOyA8JXNpbXBsaWZpZWQ8IG1pbGxpb24gPj47XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwOiA8JXNpbXBsaWZpZWQ8IGJpbGxpb250aDtcbiIKKyAgICAgICAgKyAiICAgICAgICA8JXNpbXBsaWZpZWQ8IGJpbGxpb24gPj47XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMDogPCVzaW1wbGlmaWVkPCB0cmlsbGlvbnRoO1xuIgorICAgICAgICArICIgICAgICAgIDwlc2ltcGxpZmllZDwgdHJpbGxpb24gPj47XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD07IgorCisgICAgICAgIC8vICVkZWZhdWx0IGlzIGEgbW9yZSBlbGFib3JhdGUgZm9ybSBvZiAlc2ltcGxpZmllZDsgIEl0IGlzIGJhc2ljYWxseQorICAgICAgICAvLyB0aGUgc2FtZSwgZXhjZXB0IHRoYXQgaXQgaW50cm9kdWNlcyAiYW5kIiBiZWZvcmUgdGhlIG9uZXMgZGlnaXQKKyAgICAgICAgLy8gd2hlbiBhcHByb3ByaWF0ZSAoYmFzaWNhbGx5LCBiZXR3ZWVuIHRoZSB0ZW5zIGFuZCBvbmVzIGRpZ2l0cykgYW5kCisgICAgICAgIC8vIHNlcGFyYXRlcyB0aGUgdGhvdXNhbmRzIGdyb3VwcyB3aXRoIGNvbW1hcyBpbiB2YWx1ZXMgb3ZlciAxMDAsMDAwLgorICAgICAgICArICIlZGVmYXVsdDpcbiIKKyAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlLW51bWJlciBhbmQgZnJhY3Rpb24gcnVsZXMuICBUaGVzZSBhcmUgdGhlIHNhbWUKKyAgICAgICAgICAgICAgIC8vIGFzIHRob3NlIGZvciAlc2ltcGxpZmllZCwgYnV0IGF2ZSB0byBiZSBzdGF0ZWQgaGVyZSB0b28KKyAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBpcyBhbiBlbnRyeSBwb2ludAorICAgICAgICArICIgICAgLXg6IG1pbnVzID4+O1xuIgorICAgICAgICArICIgICAgeC54OiA8PCBwb2ludCA+PjtcbiIKKyAgICAgICAgICAgICAgIC8vIGp1c3QgdXNlICVzaW1wbGlmaWVkIGZvciB2YWx1ZXMgYmVsb3cgMTAwCisgICAgICAgICsgIiAgICA9JXNpbXBsaWZpZWQ9O1xuIgorICAgICAgICAgICAgICAgLy8gZm9yIHZhbHVlcyBmcm9tIDEwMCB0byA5LDk5OSB1c2UgJSVhbmQgdG8gZGVjaWRlIHdoZXRoZXIgb3IKKyAgICAgICAgICAgICAgIC8vIG5vdCB0byBpbnRlcnBvc2UgdGhlICJhbmQiCisgICAgICAgICsgIiAgICAxMDA6IDw8IGh1bmRyZWRbID4lJWFuZD5dO1xuIgorICAgICAgICArICIgICAgMTAwMDogPDwgdGhvdXNhbmRbID4lJWFuZD5dO1xuIgorICAgICAgICAgICAgICAgLy8gZm9yIHZhbHVlcyBvZiAxMDAsMDAwIGFuZCB1cCwgdXNlICUlY29tbWFzIHRvIGludGVycG9zZSB0aGUKKyAgICAgICAgICAgICAgIC8vIGNvbW1hcyBpbiB0aGUgcmlnaHQgcGxhY2VzIChhbmQgYWxzbyB0byBpbnRlcnBvc2UgdGhlICJhbmQiKQorICAgICAgICArICIgICAgMTAwLDAwMD4+OiA8PCB0aG91c2FuZFs+JSVjb21tYXM+XTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMDogPDwgbWlsbGlvbls+JSVjb21tYXM+XTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMCwwMDA6IDw8IGJpbGxpb25bPiUlY29tbWFzPl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMDogPDwgdHJpbGxpb25bPiUlY29tbWFzPl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD07XG4iCisgICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBwYXNzZWQgdG8gdGhpcyBydWxlIHNldCBpcyBncmVhdGVyIHRoYW4gMTAwLCBkb24ndAorICAgICAgICAvLyBhZGQgdGhlICJhbmQiOyBpZiBpdCdzIGxlc3MgdGhhbiAxMDAsIGFkZCAiYW5kIiBiZWZvcmUgdGhlIGxhc3QKKyAgICAgICAgLy8gZGlnaXRzCisgICAgICAgICsgIiUlYW5kOlxuIgorICAgICAgICArICIgICAgYW5kID0lZGVmYXVsdD07XG4iCisgICAgICAgICsgIiAgICAxMDA6ID0lZGVmYXVsdD07XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgaXMgdXNlZCB0byBwbGFjZSB0aGUgY29tbWFzCisgICAgICAgICsgIiUlY29tbWFzOlxuIgorICAgICAgICAgICAgICAgLy8gZm9yIHZhbHVlcyBiZWxvdyAxMDAsIGFkZCAiYW5kIiAodGhlIGFwb3N0cm9waGUgYXQgdGhlCisgICAgICAgICAgICAgICAvLyBiZWdpbm5pbmcgaXMgaWdub3JlZCwgYnV0IGNhdXNlcyB0aGUgc3BhY2UgdGhhdCBmb2xsb3dzIGl0CisgICAgICAgICAgICAgICAvLyB0byBiZSBzaWduaWZpY2FudDogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgcnVsZXMKKyAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgJSVjb21tYXMgZG9uJ3QgcHV0IGEgc3BhY2UgYmVmb3JlIGl0KQorICAgICAgICArICIgICAgJyBhbmQgPSVkZWZhdWx0PTtcbiIKKyAgICAgICAgICAgICAgIC8vIHB1dCBhIGNvbW1hIGFmdGVyIHRoZSB0aG91c2FuZHMgKG9yIHdoYXRldmVyIHByZWNlZGVkIHRoZQorICAgICAgICAgICAgICAgLy8gaHVuZHJlZHMpCisgICAgICAgICsgIiAgICAxMDA6ICwgPSVkZWZhdWx0PTtcbiIKKyAgICAgICAgICAgICAgIC8vIHB1dCBhIGNvbW1hIGFmdGVyIHRoZSBtaWxsaW9ucyAob3Igd2hhdGV2ZXIgcHJlY2VkZXMgdGhlCisgICAgICAgICAgICAgICAvLyB0aG91c2FuZHMpCisgICAgICAgICsgIiAgICAxMDAwOiAsIDwlZGVmYXVsdDwgdGhvdXNhbmQsID4lZGVmYXVsdD47XG4iCisgICAgICAgICAgICAgICAvLyBhbmQgc28gb24uLi4KKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMDogLCA9JWRlZmF1bHQ9OyIKKyAgICAgICAgLy8gJSVsZW5pZW50LXBhcnNlIGlzbid0IHJlYWxseSBhIHNldCBvZiBudW1iZXIgZm9ybWF0dGluZyBydWxlczsKKyAgICAgICAgLy8gaXQncyBhIHNldCBvZiBjb2xsYXRpb24gcnVsZXMuICBMZW5pZW50LXBhcnNlIG1vZGUgdXNlcyBhIENvbGxhdG9yCisgICAgICAgIC8vIG9iamVjdCB0byBjb21wYXJlIGZyYWdtZW50cyBvZiB0aGUgdGV4dCBiZWluZyBwYXJzZWQgdG8gdGhlIHRleHQKKyAgICAgICAgLy8gaW4gdGhlIHJ1bGVzLCBhbGxvd2luZyBtb3JlIGxlZXdheSBpbiB0aGUgbWF0Y2hpbmcgdGV4dC4gIFRoaXMgc2V0CisgICAgICAgIC8vIG9mIHJ1bGVzIHRlbGxzIHRoZSBmb3JtYXR0ZXIgdG8gaWdub3JlIGNvbW1hcyB3aGVuIHBhcnNpbmcgKGl0CisgICAgICAgIC8vIGFscmVhZHkgaWdub3JlcyBzcGFjZXMsIHdoaWNoIGlzIHdoeSB3ZSByZWZlciB0byB0aGUgc3BhY2U7IGl0IGFsc28KKyAgICAgICAgLy8gaWdub3JlcyBoeXBoZW5zLCBtYWtpbmcgInR3ZW50eSBvbmUiIGFuZCAidHdlbnR5LW9uZSIgcGFyc2UKKyAgICAgICAgLy8gaWRlbnRpY2FsbHkpCisgICAgICAgICsgIiUlbGVuaWVudC1wYXJzZTpcbiIKKyAgICAgICAgKyAiICAgICYgJyAnICwgJywnIDtcbiI7CisKKyAgICAvKioKKyAgICAgKiBTcGVsbG91dCBydWxlcyBmb3IgVS5LLiBFbmdsaXNoLiAgVS5LLiBFbmdsaXNoIGhhcyBvbmUgc2lnbmlmaWNhbnQKKyAgICAgKiBkaWZmZXJlbmNlIGZyb20gVS5TLiBFbmdsaXNoOiB0aGUgbmFtZXMgZm9yIHZhbHVlcyBvZiAxLDAwMCwwMDAsMDAwCisgICAgICogYW5kIGhpZ2hlci4gIEluIEFtZXJpY2FuIEVuZ2xpc2gsIGVhY2ggc3VjY2Vzc2l2ZSAiLWlsbGlvbiIgaXMgMSwwMDAKKyAgICAgKiB0aW1lcyBncmVhdGVyIHRoYW4gdGhlIHByZWNlZGluZyBvbmU6IDEsMDAwLDAwMCwwMDAgaXMgIm9uZSBiaWxsaW9uIgorICAgICAqIGFuZCAxLDAwMCwwMDAsMDAwLDAwMCBpcyAib25lIHRyaWxsaW9uLiIgIEluIEJyaXRpc2ggRW5nbGlzaCwgZWFjaAorICAgICAqIHN1Y2Nlc3NpdmUgIi1pbGxpb24iIGlzIG9uZSBtaWxsaW9uIHRpbWVzIGdyZWF0ZXIgdGhhbiB0aGUgb25lIGJlZm9yZToKKyAgICAgKiAib25lIGJpbGxpb24iIGlzIDEsMDAwLDAwMCwwMDAsMDAwIChvciB3aGF0IEFtZXJpY2FucyB3b3VsZCBjYWxsIGEKKyAgICAgKiAidHJpbGxpb24iKSwgYW5kICJvbmUgdHJpbGxpb24iIGlzIDEsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAuCisgICAgICogMSwwMDAsMDAwLDAwMCBpbiBCcml0aXNoIEVuZ2xpc2ggaXMgIm9uZSB0aG91c2FuZCBtaWxsaW9uLiIgIChUaGlzCisgICAgICogdmFsdWUgaXMgc29tZXRpbWVzIGNhbGxlZCBhICJtaWxsaWFyZCwiIGJ1dCB0aGlzIHdvcmQgc2VlbXMgdG8gaGF2ZQorICAgICAqIGZhbGxlbiBpbnRvIGRpc3VzZS4pCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdWtFbmdsaXNoID0KKyAgICAgICAgIiVzaW1wbGlmaWVkOlxuIgorICAgICAgICArICIgICAgLXg6IG1pbnVzID4+O1xuIgorICAgICAgICArICIgICAgeC54OiA8PCBwb2ludCA+PjtcbiIKKyAgICAgICAgKyAiICAgIHplcm87IG9uZTsgdHdvOyB0aHJlZTsgZm91cjsgZml2ZTsgc2l4OyBzZXZlbjsgZWlnaHQ7IG5pbmU7XG4iCisgICAgICAgICsgIiAgICB0ZW47IGVsZXZlbjsgdHdlbHZlOyB0aGlydGVlbjsgZm91cnRlZW47IGZpZnRlZW47IHNpeHRlZW47XG4iCisgICAgICAgICsgIiAgICAgICAgc2V2ZW50ZWVuOyBlaWdodGVlbjsgbmluZXRlZW47XG4iCisgICAgICAgICsgIiAgICAyMDogdHdlbnR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICAzMDogdGhpcnR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICA0MDogZm9ydHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDUwOiBmaWZ0eVstPj5dO1xuIgorICAgICAgICArICIgICAgNjA6IHNpeHR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICA3MDogc2V2ZW50eVstPj5dO1xuIgorICAgICAgICArICIgICAgODA6IGVpZ2h0eVstPj5dO1xuIgorICAgICAgICArICIgICAgOTA6IG5pbmV0eVstPj5dO1xuIgorICAgICAgICArICIgICAgMTAwOiA8PCBodW5kcmVkWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxMDAwOiA8PCB0aG91c2FuZFsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiA8PCBtaWxsaW9uWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMDogPDwgYmlsbGlvblsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDAsMDAwOiA9IywjIzA9O1xuIgorICAgICAgICArICIlYWx0LXRlZW5zOlxuIgorICAgICAgICArICIgICAgPSVzaW1wbGlmaWVkPTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDA+OiA8JSVhbHQtaHVuZHJlZHM8WyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxMCwwMDA6ID0lc2ltcGxpZmllZD07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDA6IDw8IG1pbGxpb25bID4lc2ltcGxpZmllZD5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDA6IDw8IGJpbGxpb25bID4lc2ltcGxpZmllZD5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDAsMDAwOiA9IywjIzA9O1xuIgorICAgICAgICArICIlJWFsdC1odW5kcmVkczpcbiIKKyAgICAgICAgKyAiICAgIDA6IFNIT1VMRCBORVZFUiBHRVQgSEVSRSE7XG4iCisgICAgICAgICsgIiAgICAxMDogPCVzaW1wbGlmaWVkPCB0aG91c2FuZDtcbiIKKyAgICAgICAgKyAiICAgIDExOiA9JXNpbXBsaWZpZWQ9IGh1bmRyZWQ+JSVlbXB0eT47XG4iCisgICAgICAgICsgIiUlZW1wdHk6XG4iCisgICAgICAgICsgIiAgICAwOjsiCisgICAgICAgICsgIiVvcmRpbmFsOlxuIgorICAgICAgICArICIgICAgemVyb3RoOyBmaXJzdDsgc2Vjb25kOyB0aGlyZDsgZm91cnRoOyBmaWZ0aDsgc2l4dGg7IHNldmVudGg7XG4iCisgICAgICAgICsgIiAgICAgICAgZWlnaHRoOyBuaW50aDtcbiIKKyAgICAgICAgKyAiICAgIHRlbnRoOyBlbGV2ZW50aDsgdHdlbGZ0aDsgdGhpcnRlZW50aDsgZm91cnRlZW50aDtcbiIKKyAgICAgICAgKyAiICAgICAgICBmaWZ0ZWVudGg7IHNpeHRlZW50aDsgc2V2ZW50ZWVudGg7IGVpZ2h0ZWVudGg7XG4iCisgICAgICAgICsgIiAgICAgICAgbmluZXRlZW50aDtcbiIKKyAgICAgICAgKyAiICAgIHR3ZW50aWV0aDsgdHdlbnR5LT4+O1xuIgorICAgICAgICArICIgICAgMzA6IHRoaXJ0aWV0aDsgdGhpcnR5LT4+O1xuIgorICAgICAgICArICIgICAgNDA6IGZvcnRpZXRoOyBmb3J0eS0+PjtcbiIKKyAgICAgICAgKyAiICAgIDUwOiBmaWZ0aWV0aDsgZmlmdHktPj47XG4iCisgICAgICAgICsgIiAgICA2MDogc2l4dGlldGg7IHNpeHR5LT4+O1xuIgorICAgICAgICArICIgICAgNzA6IHNldmVudGlldGg7IHNldmVudHktPj47XG4iCisgICAgICAgICsgIiAgICA4MDogZWlnaHRpZXRoOyBlaWdodHktPj47XG4iCisgICAgICAgICsgIiAgICA5MDogbmluZXRpZXRoOyBuaW5ldHktPj47XG4iCisgICAgICAgICsgIiAgICAxMDA6IDwlc2ltcGxpZmllZDwgaHVuZHJlZHRoOyA8JXNpbXBsaWZpZWQ8IGh1bmRyZWQgPj47XG4iCisgICAgICAgICsgIiAgICAxMDAwOiA8JXNpbXBsaWZpZWQ8IHRob3VzYW5kdGg7IDwlc2ltcGxpZmllZDwgdGhvdXNhbmQgPj47XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDA6IDwlc2ltcGxpZmllZDwgbWlsbGlvbnRoOyA8JXNpbXBsaWZpZWQ8IG1pbGxpb24gPj47XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMDogPCVzaW1wbGlmaWVkPCBiaWxsaW9udGg7XG4iCisgICAgICAgICsgIiAgICAgICAgPCVzaW1wbGlmaWVkPCBiaWxsaW9uID4+O1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDAsMDAwOiA9IywjIzA9OyIKKyAgICAgICAgKyAiJWRlZmF1bHQ6XG4iCisgICAgICAgICsgIiAgICAteDogbWludXMgPj47XG4iCisgICAgICAgICsgIiAgICB4Lng6IDw8IHBvaW50ID4+O1xuIgorICAgICAgICArICIgICAgPSVzaW1wbGlmaWVkPTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDogPDwgaHVuZHJlZFsgPiUlYW5kPl07XG4iCisgICAgICAgICsgIiAgICAxMDAwOiA8PCB0aG91c2FuZFsgPiUlYW5kPl07XG4iCisgICAgICAgICsgIiAgICAxMDAsMDAwPj46IDw8IHRob3VzYW5kWz4lJWNvbW1hcz5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiA8PCBtaWxsaW9uWz4lJWNvbW1hcz5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDA6IDw8IGJpbGxpb25bPiUlY29tbWFzPl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD07XG4iCisgICAgICAgICsgIiUlYW5kOlxuIgorICAgICAgICArICIgICAgYW5kID0lZGVmYXVsdD07XG4iCisgICAgICAgICsgIiAgICAxMDA6ID0lZGVmYXVsdD07XG4iCisgICAgICAgICsgIiUlY29tbWFzOlxuIgorICAgICAgICArICIgICAgJyBhbmQgPSVkZWZhdWx0PTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDogLCA9JWRlZmF1bHQ9O1xuIgorICAgICAgICArICIgICAgMTAwMDogLCA8JWRlZmF1bHQ8IHRob3VzYW5kLCA+JWRlZmF1bHQ+O1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiAsID0lZGVmYXVsdD07IgorICAgICAgICArICIlJWxlbmllbnQtcGFyc2U6XG4iCisgICAgICAgICsgIiAgICAmICcgJyAsICcsJyA7XG4iOworICAgIC8vIENvdWxkIHNvbWVvbmUgcGxlYXNlIGNvcnJlY3QgbWUgaWYgSSdtIHdyb25nIGFib3V0ICJtaWxsaWFyZCIgZmFsbGluZworICAgIC8vIGludG8gZGlzdXNlLCBvciBoYXZlIG1pc3NlZCBhbnkgb3RoZXIgZGV0YWlscyBvZiBob3cgbGFyZ2UgbnVtYmVycworICAgIC8vIGFyZSByZW5kZXJlZC4gIEFsc28sIGNvdWxkIHNvbWVvbmUgcGxlYXNlIHByb3ZpZGUgbWUgd2l0aCBpbmZvcm1hdGlvbgorICAgIC8vIG9uIHdoaWNoIG90aGVyIEVuZ2xpc2gtc3BlYWtpbmcgY291bnRyaWVzIHVzZSB3aGljaCBzeXN0ZW0/ICBSaWdodCBub3csCisgICAgLy8gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIFUuUy4gc3lzdGVtIGlzIHVzZWQgaW4gQ2FuYWRhIGFuZCB0aGF0IGFsbCB0aGUKKyAgICAvLyBvdGhlciBFbmdsaXNoLXNwZWFraW5nIGNvdW50cmllcyBmb2xsb3cgdGhlIEJyaXRpc2ggc3lzdGVtLiAgQ2FuCisgICAgLy8gc29tZW9uZSBvdXQgdGhlcmUgY29uZmlybSB0aGlzPworCisgICAgLyoqCisgICAgICogU3BlbGxvdXQgcnVsZXMgZm9yIFNwYW5pc2guICBUaGUgU3BhbmlzaCBydWxlcyBhcmUgcXVpdGUgc2ltaWxhciB0bworICAgICAqIHRoZSBFbmdsaXNoIHJ1bGVzLCBidXQgdGhlcmUgYXJlIHNvbWUgaW1wb3J0YW50IGRpZmZlcmVuY2VzOgorICAgICAqIEZpcnN0LCB3ZSBoYXZlIHRvIHByb3ZpZGUgc2VwYXJhdGUgcnVsZXMgZm9yIG1vc3Qgb2YgdGhlIHR3ZW50aWVzCisgICAgICogYmVjYXVzZSB0aGUgb25lcyBkaWdpdCBmcmVxdWVudGx5IHBpY2tzIHVwIGFuIGFjY2VudCBtYXJrIHRoYXQgaXQKKyAgICAgKiBkb2Vzbid0IGhhdmUgd2hlbiBzdGFuZGluZyBhbG9uZS4gIFNlY29uZCwgZWFjaCBtdWx0aXBsZSBvZiAxMDAgaGFzCisgICAgICogdG8gYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGUgbXVsdGlwbGllciBvbiAxMDAgdmVyeSBvZnRlbgorICAgICAqIGNoYW5nZXMgZm9ybSBpbiB0aGUgY29udHJhY3Rpb246IDUwMCBpcyAicXVpbmllbnRvcywiIG5vdAorICAgICAqICJjaW5jb2NpZW50b3MuIiAgSW4gYWRkaXRpb24sIHRoZSB3b3JkIGZvciAxMDAgaXMgImNpZW4iIHdoZW4KKyAgICAgKiBzdGFuZGluZyBhbG9uZSwgYnV0IGNoYW5nZXMgdG8gImNpZW50byIgd2hlbiBmb2xsb3dlZCBieSBtb3JlIGRpZ2l0cy4KKyAgICAgKiBUaGVyZSBhbHNvIHNvbWUgb3RoZXIgZGlmZmVyZW5jZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3BhbmlzaCA9CisgICAgICAgIC8vIG5lZ2F0aXZlLW51bWJlciBhbmQgZnJhY3Rpb24gcnVsZXMKKyAgICAgICAgIi14OiBtZW5vcyA+PjtcbiIKKyAgICAgICAgKyAieC54OiA8PCBwdW50byA+PjtcbiIKKyAgICAgICAgLy8gd29yZHMgZm9yIHZhbHVlcyBmcm9tIDAgdG8gMTkKKyAgICAgICAgKyAiY2VybzsgdW5vOyBkb3M7IHRyZXM7IGN1YXRybzsgY2luY287IHNlaXM7IHNpZXRlOyBvY2hvOyBudWV2ZTtcbiIKKyAgICAgICAgKyAiZGllejsgb25jZTsgZG9jZTsgdHJlY2U7IGNhdG9yY2U7IHF1aW5jZTsgZGllY2lzXHUwMGU5aXM7XG4iCisgICAgICAgICsgIiAgICBkaWVjaXNpZXRlOyBkaWVjaW9jaG87IGRpZWNpbnVldmU7XG4iCisgICAgICAgIC8vIHdvcmRzIGZvciB2YWx1ZXMgZnJvbSAyMCB0byAyOSAobmVjZXNzYXJ5IGJlY2F1c2UgdGhlIG9uZXMgZGlnaXQKKyAgICAgICAgLy8gb2Z0ZW4gcGlja3MgdXAgYW4gYWNjZW50IG1hcmsgaXQgZG9lc24ndCBoYXZlIHdoZW4gc3RhbmRpbmcgYWxvbmUpCisgICAgICAgICsgInZlaW50ZTsgdmVpbnRpdW5vOyB2ZWludGlkXHUwMGYzczsgdmVpbnRpdHJcdTAwZTlzOyB2ZWludGljdWF0cm87XG4iCisgICAgICAgICsgIiAgICB2ZWludGljaW5jbzsgdmVpbnRpc1x1MDBlOWlzOyB2ZWludGlzaWV0ZTsgdmVpbnRpb2NobztcbiIKKyAgICAgICAgKyAiICAgIHZlaW50aW51ZXZlO1xuIgorICAgICAgICAvLyB3b3JkcyBmb3IgbXVsdGlwbGVzIG9mIDEwIChub3RpY2UgdGhhdCB0aGUgdGVucyBkaWdpdCBpcyBzZXBhcmF0ZWQKKyAgICAgICAgLy8gZnJvbSB0aGUgb25lcyBkaWdpdCBieSB0aGUgd29yZCAieSIuKQorICAgICAgICArICIzMDogdHJlaW50YVsgeSA+Pl07XG4iCisgICAgICAgICsgIjQwOiBjdWFyZW50YVsgeSA+Pl07XG4iCisgICAgICAgICsgIjUwOiBjaW5jdWVudGFbIHkgPj5dO1xuIgorICAgICAgICArICI2MDogc2VzZW50YVsgeSA+Pl07XG4iCisgICAgICAgICsgIjcwOiBzZXRlbnRhWyB5ID4+XTtcbiIKKyAgICAgICAgKyAiODA6IG9jaGVudGFbIHkgPj5dO1xuIgorICAgICAgICArICI5MDogbm92ZW50YVsgeSA+Pl07XG4iCisgICAgICAgIC8vIDEwMCBieSBpdHNlbGYgaXMgImNpZW4sIiBidXQgMTAwIGZvbGxvd2VkIGJ5IHNvbWV0aGluZyBpcyAiY2luZXRvIgorICAgICAgICArICIxMDA6IGNpZW47XG4iCisgICAgICAgICsgIjEwMTogY2llbnRvID4+O1xuIgorICAgICAgICAvLyB3b3JkcyBmb3IgbXVsdGlwbGVzIG9mIDEwMCAobXVzdCBiZSBzdGF0ZWQgYmVjYXVzZSB0aGV5J3JlCisgICAgICAgIC8vIHJhcmVseSBzaW1wbGUgY29uY2F0ZW5hdGlvbnMpCisgICAgICAgICsgIjIwMDogZG9zY2llbnRvc1sgPj5dO1xuIgorICAgICAgICArICIzMDA6IHRyZXNjaWVudG9zWyA+Pl07XG4iCisgICAgICAgICsgIjQwMDogY3VhdHJvY2llbnRvc1sgPj5dO1xuIgorICAgICAgICArICI1MDA6IHF1aW5pZW50b3NbID4+XTtcbiIKKyAgICAgICAgKyAiNjAwOiBzZWlzY2llbnRvc1sgPj5dO1xuIgorICAgICAgICArICI3MDA6IHNldGVjaWVudG9zWyA+Pl07XG4iCisgICAgICAgICsgIjgwMDogb2Nob2NpZW50b3NbID4+XTtcbiIKKyAgICAgICAgKyAiOTAwOiBub3ZlY2llbnRvc1sgPj5dO1xuIgorICAgICAgICAvLyBmb3IgMSwwMDAsIHRoZSBtdWx0aXBsaWVyIG9uICJtaWwiIGlzIG9taXR0ZWQ6IDIsMDAwIGlzICJkb3MgbWlsLCIKKyAgICAgICAgLy8gYnV0IDEsMDAwIGlzIGp1c3QgIm1pbC4iCisgICAgICAgICsgIjEwMDA6IG1pbFsgPj5dO1xuIgorICAgICAgICArICIyMDAwOiA8PCBtaWxbID4+XTtcbiIKKyAgICAgICAgLy8gMSwwMDAsMDAwIGlzICJ1biBtaWxsb24sIiBub3QgInVubyBtaWxsb24iCisgICAgICAgICsgIjEsMDAwLDAwMDogdW4gbWlsbFx1MDBmM25bID4+XTtcbiIKKyAgICAgICAgKyAiMiwwMDAsMDAwOiA8PCBtaWxsXHUwMGYzblsgPj5dO1xuIgorICAgICAgICAvLyBvdmVyZmxvdyBydWxlCisgICAgICAgICsgIjEsMDAwLDAwMCwwMDA6ID0jLCMjMD0gKGluY29tcGxldGUgZGF0YSk7IjsKKyAgICAvLyBUaGUgU3BhbmlzaCBydWxlcyBhcmUgaW5jb21wbGV0ZS4gIEknbSBtaXNzaW5nIGluZm9ybWF0aW9uIG9uIG5lZ2F0aXZlCisgICAgLy8gbnVtYmVycyBhbmQgbnVtYmVycyB3aXRoIGZyYWN0aW9uYWwgcGFydHMuICBJIGFsc28gZG9uJ3QgaGF2ZQorICAgIC8vIGluZm9ybWF0aW9uIG9uIG51bWJlcnMgaGlnaGVyIHRoYW4gdGhlIG1pbGxpb25zCisKKyAgICAvKioKKyAgICAgKiBTcGVsbG91dCBydWxlcyBmb3IgRnJlbmNoLiAgRnJlbmNoIGFkZHMgc29tZSBpbnRlcmVzdGluZyBxdWlya3Mgb2YgaXRzCisgICAgICogb3duOiAxKSBUaGUgd29yZCAiZXQiIGlzIGludGVycG9zZWQgYmV0d2VlbiB0aGUgdGVucyBhbmQgb25lcyBkaWdpdHMsCisgICAgICogYnV0IG9ubHkgaWYgdGhlIG9uZXMgZGlnaXQgaWYgMTogMjAgaXMgInZpbmd0LCIgYW5kIDIgaXMgInZpbmd0LWRldXgsIgorICAgICAqIGJ1dCAyMSBpcyAidmluZ3QtZXQtdW4uIiAgMikgIFRoZXJlIGFyZSBubyB3b3JkcyBmb3IgNzAsIDgwLCBvciA5MC4KKyAgICAgKiAicXVhdHJlLXZpbmd0cyIgKCJmb3VyIHR3ZW50aWVzIikgaXMgdXNlZCBmb3IgODAsIGFuZCB2YWx1ZXMgcHJvY2VlZAorICAgICAqIGJ5IHNjb3JlIGZyb20gNjAgdG8gOTkgKGUuZy4sIDczIGlzICJzb2l4YW50ZS10cmVpemUiIFsic2l4dHktdGhpcnRlZW4iXSkuCisgICAgICogTnVtYmVycyBmcm9tIDEsMTAwIHRvIDEsMTk5IGFyZSByZW5kZXJlZCBhcyBodW5kcmVkcyByYXRoZXIgdGhhbgorICAgICAqIHRob3VzYW5kczogMSwxMDAgaXMgIm9uemUgY2VudHMiICgiZWxldmVuIGh1bmRyZWQiKSwgcmF0aGVyIHRoYW4KKyAgICAgKiAibWlsbGUgY2VudCIgKCJvbmUgdGhvdXNhbmQgb25lIGh1bmRyZWQiKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGZyZW5jaCA9CisgICAgICAgIC8vIHRoZSBtYWluIHJ1bGUgc2V0CisgICAgICAgICIlbWFpbjpcbiIKKyAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlLW51bWJlciBhbmQgZnJhY3Rpb24gcnVsZXMKKyAgICAgICAgKyAiICAgIC14OiBtb2lucyA+PjtcbiIKKyAgICAgICAgKyAiICAgIHgueDogPDwgdmlyZ3VsZSA+PjtcbiIKKyAgICAgICAgICAgICAgIC8vIHdvcmRzIGZvciBudW1iZXJzIGZyb20gMCB0byAxMAorICAgICAgICArICIgICAgelx1MDBlOXJvOyB1bjsgZGV1eDsgdHJvaXM7IHF1YXRyZTsgY2lucTsgc2l4OyBzZXB0OyBodWl0OyBuZXVmO1xuIgorICAgICAgICArICIgICAgZGl4OyBvbnplOyBkb3V6ZTsgdHJlaXplOyBxdWF0b3J6ZTsgcXVpbnplOyBzZWl6ZTtcbiIKKyAgICAgICAgKyAiICAgICAgICBkaXgtc2VwdDsgZGl4LWh1aXQ7IGRpeC1uZXVmO1xuIgorICAgICAgICAgICAgICAgLy8gb3JkcyBmb3IgdGhlIG11bHRpcGxlcyBvZiAxMDogJSVhbHQtb25lcyBpbnNlcnRzICJldCIKKyAgICAgICAgICAgICAgIC8vIHdoZW4gbmVlZGVkCisgICAgICAgICsgIiAgICAyMDogdmluZ3RbLT4lJWFsdC1vbmVzPl07XG4iCisgICAgICAgICsgIiAgICAzMDogdHJlbnRlWy0+JSVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgNDA6IHF1YXJhbnRlWy0+JSVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgNTA6IGNpbnF1YW50ZVstPiUlYWx0LW9uZXM+XTtcbiIKKyAgICAgICAgICAgICAgIC8vIHJ1bGUgZm9yIDYwLiAgVGhlIC8yMCBjYXVzZXMgdGhpcyBydWxlJ3MgbXVsdGlwbGllciB0byBiZQorICAgICAgICAgICAgICAgLy8gMjAgcmF0aGVyIHRoYW4gMTAsIGFsbG93aW5oZyB1cyB0byByZWN1cnNlIGZvciBhbGwgdmFsdWVzCisgICAgICAgICAgICAgICAvLyBmcm9tIDYwIHRvIDc5Li4uCisgICAgICAgICsgIiAgICA2MC8yMDogc29peGFudGVbLT4lJWFsdC1vbmVzPl07XG4iCisgICAgICAgICAgICAgICAvLyAuLi5leGNlcHQgZm9yIDcxLCB3aGljaCBtdXN0IGJlIHNwZWNpYWwtY2FzZWQKKyAgICAgICAgKyAiICAgIDcxOiBzb2l4YW50ZSBldCBvbnplO1xuIgorICAgICAgICAgICAgICAgLy8gYXQgNzIsIHdlIGhhdmUgdG8gcmVwZWF0IHRoZSBydWxlIGZvciA2MCB0byBnZXQgdXMgdG8gNzkKKyAgICAgICAgKyAiICAgIDcyLzIwOiBzb2l4YW50ZS0+JSVhbHQtb25lcz47XG4iCisgICAgICAgICAgICAgICAvLyBhdCA4MCwgd2Ugc3RhdGUgYSBuZXcgcnVsZSB3aXRoIHRoZSBwaHJhc2UgZm9yIDgwLiAgU2luY2UKKyAgICAgICAgICAgICAgIC8vIGl0IGNoYW5nZXMgZm9ybSB3aGVuIHRoZXJlJ3MgYSBvbmVzIGRpZ2l0LCB3ZSBuZWVkIGEgc2Vjb25kCisgICAgICAgICAgICAgICAvLyBydWxlIGF0IDgxLiAgVGhpcyBydWxlIGFsc28gaW5jbHVkZXMgIi8yMCwiIGFsbG93aW5nIGl0IHRvCisgICAgICAgICAgICAgICAvLyBiZSB1c2VkIGNvcnJlY3RseSBmb3IgYWxsIHZhbHVlcyB1cCB0byA5OQorICAgICAgICArICIgICAgODA6IHF1YXRyZS12aW5ndHM7IDgxLzIwOiBxdWF0cmUtdmluZ3QtPj47XG4iCisgICAgICAgICAgICAgICAvLyAiY2VudCIgYmVjb21lcyBwbHVyYWwgd2hlbiBwcmVjZWRlZCBieSBhIG11bHRpcGxpZXIsIGFuZAorICAgICAgICAgICAgICAgLy8gdGhlIG11bHRpcGxpZXIgaXMgb21pdHRlZCBmcm9tIHRoZSBzaW5ndWxhciBmb3JtCisgICAgICAgICsgIiAgICAxMDA6IGNlbnRbID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDIwMDogPDwgY2VudHNbID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDA6IG1pbGxlWyA+Pl07XG4iCisgICAgICAgICAgICAgICAvLyB2YWx1ZXMgZnJvbSAxLDEwMCB0byAxLDE5OSBhcmUgcmVuZGVyZWQgYXMgIm9uemUgY2VudHMuLi4iCisgICAgICAgICAgICAgICAvLyBpbnN0ZWFkIG9mICJtaWxsZSBjZW50Li4uIiAgVGhlID4gYWZ0ZXIgIjEwMDAiIGRlY3JlYXNlcworICAgICAgICAgICAgICAgLy8gdGhlIHJ1bGUncyBleHBvbmVudCwgY2F1c2luZyBpdHMgbXVsdGlwbGllciB0byBiZSAxMDAgaW5zdGVhZAorICAgICAgICAgICAgICAgLy8gb2YgMSwwMDAuICBUaGlzIHByZXZlbnRzIHVzIGZyb20gZ2V0dGluZyAib256ZSBjZW50cyBjZW50CisgICAgICAgICAgICAgICAvLyB2aW5ndC1kZXV4IiAoImVsZXZlbiBodW5kcmVkIG9uZSBodW5kcmVkIHR3ZW50eS10d28iKS4KKyAgICAgICAgKyAiICAgIDExMDA+OiBvbnplIGNlbnRzWyA+Pl07XG4iCisgICAgICAgICAgICAgICAvLyBhdCAxLDIwMCwgd2UgZ28gYmFjayB0byBmb3JtYXRpbmcgaW4gdGhvdXNhbmRzLCBzbyB3ZQorICAgICAgICAgICAgICAgLy8gcmVwZWF0IHRoZSBydWxlIGZvciAxLDAwMAorICAgICAgICArICIgICAgMTIwMDogbWlsbGUgPj47XG4iCisgICAgICAgICAgICAgICAvLyBhdCAyLDAwMCwgdGhlIG11bHRpcGxpZXIgaXMgYWRkZWQKKyAgICAgICAgKyAiICAgIDIwMDA6IDw8IG1pbGxlWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDA6IDw8IG1pbGxpb25bID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMCwwMDA6IDw8IG1pbGxpYXJkZVsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDA6IDw8IGJpbGxpb25bID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMCwwMDAsMDAwLDAwMDogPSMsIyMwPTtcbiIKKyAgICAgICAgLy8gJSVhbHQtb25lcyBpcyB1c2VkIHRvIGluc2VydCAiZXQiIHdoZW4gdGhlIG9uZXMgZGlnaXQgaXMgMQorICAgICAgICArICIlJWFsdC1vbmVzOlxuIgorICAgICAgICArICIgICAgOyBldC11bjsgPSVtYWluPTsiOworCisgICAgLyoqCisgICAgICogU3BlbGxvdXQgcnVsZXMgZm9yIFN3aXNzIEZyZW5jaC4gIFN3aXNzIEZyZW5jaCBkaWZmZXJzIGZyb20gRnJlbmNoIEZyZW5jaAorICAgICAqIGluIHRoYXQgaXQgZG9lcyBoYXZlIHdvcmRzIGZvciA3MCwgODAsIGFuZCA5MC4gIFRoaXMgcnVsZSBzZXQgc2hvd3MgdGhlbSwKKyAgICAgKiBhbmQgaXMgc2ltcGxlciBhcyBhIHJlc3VsdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzd2lzc0ZyZW5jaCA9CisgICAgICAgICIlbWFpbjpcbiIKKyAgICAgICAgKyAiICAgIC14OiBtb2lucyA+PjtcbiIKKyAgICAgICAgKyAiICAgIHgueDogPDwgdmlyZ3VsZSA+PjtcbiIKKyAgICAgICAgKyAiICAgIHpcdTAwZTlybzsgdW47IGRldXg7IHRyb2lzOyBxdWF0cmU7IGNpbnE7IHNpeDsgc2VwdDsgaHVpdDsgbmV1ZjtcbiIKKyAgICAgICAgKyAiICAgIGRpeDsgb256ZTsgZG91emU7IHRyZWl6ZTsgcXVhdG9yemU7IHF1aW56ZTsgc2VpemU7XG4iCisgICAgICAgICsgIiAgICAgICAgZGl4LXNlcHQ7IGRpeC1odWl0OyBkaXgtbmV1ZjtcbiIKKyAgICAgICAgKyAiICAgIDIwOiB2aW5ndFstPiUlYWx0LW9uZXM+XTtcbiIKKyAgICAgICAgKyAiICAgIDMwOiB0cmVudGVbLT4lJWFsdC1vbmVzPl07XG4iCisgICAgICAgICsgIiAgICA0MDogcXVhcmFudGVbLT4lJWFsdC1vbmVzPl07XG4iCisgICAgICAgICsgIiAgICA1MDogY2lucXVhbnRlWy0+JSVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgNjA6IHNvaXhhbnRlWy0+JSVhbHQtb25lcz5dO1xuIgorICAgICAgICAgICAgICAgLy8gbm90aWNlIG5ldyB3b3JkcyBmb3IgNzAsIDgwLCBhbmQgOTAKKyAgICAgICAgKyAiICAgIDcwOiBzZXB0YW50ZVstPiUlYWx0LW9uZXM+XTtcbiIKKyAgICAgICAgKyAiICAgIDgwOiBvY3RhbnRlWy0+JSVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgOTA6IG5vbmFudGVbLT4lJWFsdC1vbmVzPl07XG4iCisgICAgICAgICsgIiAgICAxMDA6IGNlbnRbID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDIwMDogPDwgY2VudHNbID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDA6IG1pbGxlWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxMTAwPjogb256ZSBjZW50c1sgPj5dO1xuIgorICAgICAgICArICIgICAgMTIwMDogbWlsbGUgPj47XG4iCisgICAgICAgICsgIiAgICAyMDAwOiA8PCBtaWxsZVsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiA8PCBtaWxsaW9uWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwOiA8PCBtaWxsaWFyZGVbID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMCwwMDAsMDAwOiA8PCBiaWxsaW9uWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD07XG4iCisgICAgICAgICsgIiUlYWx0LW9uZXM6XG4iCisgICAgICAgICsgIiAgICA7IGV0LXVuOyA9JW1haW49OyI7CisgICAgLy8gSSdtIG5vdCAxMDAlIHN1cmUgYWJvdXQgU3dpc3MgRnJlbmNoLiAgSXMKKyAgICAvLyB0aGlzIGNvcnJlY3Q/ICBJcyAib256ZSBjZW50cyIgY29tbW9ubHkgdXNlZCBmb3IgMSwxMDAgaW4gYm90aCBGcmFuY2UKKyAgICAvLyBhbmQgU3dpdHplcmxhbmQ/ICBDYW4gc29tZW9uZSBmaWxsIG1lIGluIG9uIHRoZSBydWxlcyBmb3IgdGhlIG90aGVyCisgICAgLy8gRnJlbmNoLXNwZWFraW5nIGNvdW50cmllcz8gIEkndmUgaGVhcmQgY29uZmxpY3Rpbmcgb3BpbmlvbnMgb24gd2hpY2gKKyAgICAvLyB2ZXJzaW9uIGlzIHVzZWQgaW4gQ2FuYWRhLCBhbmQgSSB1bmRlcnN0YW5kIHRoZXJlJ3MgYW4gYWx0ZXJuYXRlIHNldAorICAgIC8vIG9mIHdvcmRzIGZvciA3MCwgODAsIGFuZCA5MCB0aGF0IGlzIHVzZWQgc29tZXdoZXJlLCBidXQgSSBkb24ndCBrbm93CisgICAgLy8gd2hhdCB0aG9zZSB3b3JkcyBhcmUgb3Igd2hlcmUgdGhleSdyZSB1c2VkLgorCisgICAgLyoqCisgICAgICogU3BlbGxvdXQgcnVsZXMgZm9yIEdlcm1hbi4gIEdlcm1hbiBhbHNvIGFkZHMgc29tZSBpbnRlcmVzdGluZworICAgICAqIGNoYXJhY3RlcmlzdGljcy4gIEZvciB2YWx1ZXMgYmVsb3cgMSwwMDAsMDAwLCBudW1iZXJzIGFyZSBjdXN0b21hcmlseQorICAgICAqIHdyaXR0ZW4gb3V0IGFzIGEgc2luZ2xlIHdvcmQuICBBbmQgdGhlIG9uZXMgZGlnaXQgUFJFQ0VERVMgdGhlIHRlbnMKKyAgICAgKiBkaWdpdCAoZS5nLiwgMjMgaXMgImRyZWl1bmR6d2FuemlnLCIgbm90ICJ6d2FuemlndW5kZHJlaSIpLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdlcm1hbiA9CisgICAgICAgIC8vIDEgaXMgImVpbnMiIHdoZW4gYnkgaXRzZWxmLCBidXQgdHVybnMgaW50byAiZWluIiBpbiBtb3N0CisgICAgICAgIC8vIGNvbWJpbmF0aW9ucworICAgICAgICAiJWFsdC1vbmVzOlxuIgorICAgICAgICArICIgICAgbnVsbDsgZWluczsgPSUlbWFpbj07XG4iCisgICAgICAgICsgIiUlbWFpbjpcbiIKKyAgICAgICAgICAgICAgIC8vIHdvcmRzIGZvciBudW1iZXJzIGZyb20gMCB0byAxMi4gIE5vdGljZSB0aGF0IHRoZSB2YWx1ZXMKKyAgICAgICAgICAgICAgIC8vIGZyb20gMTMgdG8gMTkgY2FuIGRlcml2ZWQgYWxnb3JpdGhtaWNhbGx5LCB1bmxpa2UgaW4gbW9zdAorICAgICAgICAgICAgICAgLy8gb3RoZXIgbGFuZ3VhZ2VzCisgICAgICAgICsgIiAgICBudWxsOyBlaW47IHp3ZWk7IGRyZWk7IHZpZXI7IGZcdTAwZmNuZjsgc2VjaHM7IHNpZWJlbjsgYWNodDsgbmV1bjtcbiIKKyAgICAgICAgKyAiICAgIHplaG47IGVsZjsgendcdTAwZjZsZjsgPj56ZWhuO1xuIgorICAgICAgICAgICAgICAgLy8gcnVsZXMgZm9yIHRoZSBtdWx0aXBsZXMgb2YgMTAuICBOb3RpY2UgdGhhdCB0aGUgb25lcyBkaWdpdAorICAgICAgICAgICAgICAgLy8gZ29lcyBvbiB0aGUgZnJvbnQKKyAgICAgICAgKyAiICAgIDIwOiBbPj51bmRdendhbnppZztcbiIKKyAgICAgICAgKyAiICAgIDMwOiBbPj51bmRdZHJlaVx1MDBkZmlnO1xuIgorICAgICAgICArICIgICAgNDA6IFs+PnVuZF12aWVyemlnO1xuIgorICAgICAgICArICIgICAgNTA6IFs+PnVuZF1mXHUwMGZjbmZ6aWc7XG4iCisgICAgICAgICsgIiAgICA2MDogWz4+dW5kXXNlY2h6aWc7XG4iCisgICAgICAgICsgIiAgICA3MDogWz4+dW5kXXNpZWJ6aWc7XG4iCisgICAgICAgICsgIiAgICA4MDogWz4+dW5kXWFjaHR6aWc7XG4iCisgICAgICAgICsgIiAgICA5MDogWz4+dW5kXW5ldW56aWc7XG4iCisgICAgICAgICsgIiAgICAxMDA6IGh1bmRlcnRbPiVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgMjAwOiA8PGh1bmRlcnRbPiVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgMTAwMDogdGF1c2VuZFs+JWFsdC1vbmVzPl07XG4iCisgICAgICAgICsgIiAgICAyMDAwOiA8PHRhdXNlbmRbPiVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiBlaW5lIE1pbGxpb25bID4lYWx0LW9uZXM+XTtcbiIKKyAgICAgICAgKyAiICAgIDIsMDAwLDAwMDogPDwgTWlsbGlvbmVuWyA+JWFsdC1vbmVzPl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwOiBlaW5lIE1pbGxpYXJkZVsgPiVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgMiwwMDAsMDAwLDAwMDogPDwgTWlsbGlhcmRlblsgPiVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDA6IGVpbmUgQmlsbGlvblsgPiVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgMiwwMDAsMDAwLDAwMCwwMDA6IDw8IEJpbGxpb25lblsgPiVhbHQtb25lcz5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDAsMDAwOiA9IywjIzA9OyI7CisgICAgLy8gYWdhaW4sIEknbSBub3QgMTAwJSBzdXJlIG9mIHRoZXNlIHJ1bGVzLiAgSSB0aGluayBib3RoICJodW5kZXJ0IiBhbmQKKyAgICAvLyAiZWluaHVuZGVydCIgYXJlIGNvcnJlY3Qgb3IgMTAwLCBidXQgSSdtIG5vdCBzdXJlIHdoaWNoIGlzIHByZWZlcmFibGUKKyAgICAvLyBpbiBzaXR1YXRpb25zIHdoZXJlIHRoaXMgZnJhbWV3b3JrIGlzIGxpa2VseSB0byBiZSB1c2VkLiAgQWxzbywgaXMgaXQKKyAgICAvLyByZWFsbHkgdHJ1ZSB0aGF0IG51bWJlcnMgYXJlIHJ1biB0b2dldGhlciBpbnRvIGNvbXBvdW5kIHdvcmRzIGFsbCB0aGUKKyAgICAvLyB0aW1lPyAgQW5kIGFnYWluLCBJJ20gbWlzc2luZyBpbmZvcm1hdGlvbiBvbiBuZWdhdGl2ZSBudW1iZXJzIGFuZAorICAgIC8vIGRlY2ltYXMuCisKKyAgICAvKioKKyAgICAgKiBTcGVsbG91dCBydWxlcyBmb3IgSXRhbGlhbi4gIExpa2UgR2VybWFuLCBtb3N0IEl0YWxpYW4gbnVtYmVycyBhcmUKKyAgICAgKiB3cml0dGVuIGFzIHNpbmdsZSB3b3Jkcy4gIFdoYXQgbWFrZXMgdGhlc2UgcnVsZXMgY29tcGxpY2F0ZWQgaXMgdGhlIHJ1bGUKKyAgICAgKiB0aGF0IHNheXMgdGhhdCB3aGVuIGEgd29yZCBlbmRpbmcgaW4gYSB2b3dlbCBhbmQgYSB3b3JkIGJlZ2lubmluZyB3aXRoCisgICAgICogYSB2b3dlbCBhcmUgY29tYmluZWQgaW50byBhIGNvbXBvdW5kLCB0aGUgdm93ZWwgaXMgZHJvcHBlZCBmcm9tIHRoZQorICAgICAqIGVuZCBvZiB0aGUgZmlyc3Qgd29yZDogMTgwIGlzICJjZW50b3R0YW50YSwiIG5vdCAiY2VudG9vdHRhbnRhLiIKKyAgICAgKiBUaGUgY29tcGxleGl0eSBvZiB0aGlzIHJ1bGUgc2V0IGlzIHRvIHByb2R1Y2UgdGhpcyBiZWhhdmlvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBpdGFsaWFuID0KKyAgICAgICAgLy8gbWFpbiBydWxlIHNldC4gIEZvbGxvd3MgdGhlIHBhdHRlcm5zIG9mIHRoZSBwcmVjZWRpbmcgcnVsZSBzZXRzLAorICAgICAgICAvLyBleGNlcHQgdGhhdCB0aGUgZmluYWwgdm93ZWwgaXMgb21pdHRlZCBmcm9tIHdvcmRzIGVuZGluZyBpbgorICAgICAgICAvLyB2b3dlbHMgd2hlbiB0aGV5IGFyZSBmb2xsb3dlZCBieSBhbm90aGVyIHdvcmQ7IGluc3RlYWQsIHdlIGhhdmUKKyAgICAgICAgLy8gc2VwYXJhdGUgcnVsZSBzZXRzIHRoYXQgYXJlIGlkZW50aWNhbCB0byB0aGlzIG9uZSwgZXhjZXB0IHRoYXQKKyAgICAgICAgLy8gYWxsIHRoZSB3b3JkcyB0aGF0IGRvbid0IGJlZ2luIHdpdGggYSB2b3dlbCBoYXZlIGEgdm93ZWwgdGFja2VkCisgICAgICAgIC8vIG9udG8gdGhlbSBhdCB0aGUgZnJvbnQuICBBIHdvcmQgZW5kaW5nIGluIGEgdm93ZWwgY2FsbHMgYQorICAgICAgICAvLyBzdWJzdGl0dXRpb24gdGhhdCB3aWxsIHN1cHBseSB0aGF0IHZvd2VsLCB1bmxlc3MgdGhhdCB2b3dlbCBpcyB0bworICAgICAgICAvLyBiZSBlbGlkZWQuCisgICAgICAgICIlbWFpbjpcbiIKKyAgICAgICAgKyAiICAgIC14OiBtZW5vID4+O1xuIgorICAgICAgICArICIgICAgeC54OiA8PCB2aXJnb2xhID4+O1xuIgorICAgICAgICArICIgICAgemVybzsgdW5vOyBkdWU7IHRyZTsgcXVhdHRybzsgY2lucXVlOyBzZWk7IHNldHRlOyBvdHRvO1xuIgorICAgICAgICArICIgICAgICAgIG5vdmU7XG4iCisgICAgICAgICsgIiAgICBkaWVjaTsgdW5kaWNpOyBkb2RpY2k7IHRyZWRpY2k7IHF1YXR0b3JkaWNpOyBxdWluZGljaTsgc2VkaWNpO1xuIgorICAgICAgICArICIgICAgICAgIGRpY2lhc2V0dGU7IGRpY2lvdHRvOyBkaWNpYW5ub3ZlO1xuIgorICAgICAgICArICIgICAgMjA6IHZlbnRpOyB2ZW50PiUld2l0aC1pPjtcbiIKKyAgICAgICAgKyAiICAgIDMwOiB0cmVudGE7IHRyZW50PiUld2l0aC1pPjtcbiIKKyAgICAgICAgKyAiICAgIDQwOiBxdWFyYW50YTsgcXVhcmFudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICA1MDogY2lucXVhbnRhOyBjaW5xdWFudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICA2MDogc2Vzc2FudGE7IHNlc3NhbnQ+JSV3aXRoLWE+O1xuIgorICAgICAgICArICIgICAgNzA6IHNldHRhbnRhOyBzZXR0YW50PiUld2l0aC1hPjtcbiIKKyAgICAgICAgKyAiICAgIDgwOiBvdHRhbnRhOyBvdHRhbnQ+JSV3aXRoLWE+O1xuIgorICAgICAgICArICIgICAgOTA6IG5vdmFudGE7IG5vdmFudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICAxMDA6IGNlbnRvOyBjZW50Wz4lJXdpdGgtbz5dO1xuIgorICAgICAgICArICIgICAgMjAwOiA8PGNlbnRvOyA8PGNlbnRbPiUld2l0aC1vPl07XG4iCisgICAgICAgICsgIiAgICAxMDAwOiBtaWxsZTsgbWlsbFs+JSV3aXRoLWk+XTtcbiIKKyAgICAgICAgKyAiICAgIDIwMDA6IDw8bWlsYTsgPDxtaWxbPiUld2l0aC1hPl07XG4iCisgICAgICAgICsgIiAgICAxMDAsMDAwPj46IDw8bWlsYVsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiA9IywjIzA9IChpbmNvbXBsZXRlIGRhdGEpO1xuIgorICAgICAgICArICIlJXdpdGgtYTpcbiIKKyAgICAgICAgKyAiICAgIGF6ZXJvOyB1bm87IGFkdWU7IGF0cmU7IGFxdWF0dHJvOyBhY2lucXVlOyBhc2VpOyBhc2V0dGU7IG90dG87XG4iCisgICAgICAgICsgIiAgICAgICAgYW5vdmU7XG4iCisgICAgICAgICsgIiAgICBhZGllY2k7IHVuZGljaTsgYWRvZGljaTsgYXRyZWRpY2k7IGFxdWF0dG9yZGljaTsgYXF1aW5kaWNpOyBhc2VkaWNpO1xuIgorICAgICAgICArICIgICAgICAgIGFkaWNpYXNldHRlOyBhZGljaW90dG87IGFkaWNpYW5ub3ZlO1xuIgorICAgICAgICArICIgICAgMjA6IGF2ZW50aTsgYXZlbnQ+JSV3aXRoLWk+O1xuIgorICAgICAgICArICIgICAgMzA6IGF0cmVudGE7IGF0cmVudD4lJXdpdGgtaT47XG4iCisgICAgICAgICsgIiAgICA0MDogYXF1YXJhbnRhOyBhcXVhcmFudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICA1MDogYWNpbnF1YW50YTsgYWNpbnF1YW50PiUld2l0aC1hPjtcbiIKKyAgICAgICAgKyAiICAgIDYwOiBhc2Vzc2FudGE7IGFzZXNzYW50PiUld2l0aC1hPjtcbiIKKyAgICAgICAgKyAiICAgIDcwOiBhc2V0dGFudGE7IGFzZXR0YW50PiUld2l0aC1hPjtcbiIKKyAgICAgICAgKyAiICAgIDgwOiBvdHRhbnRhOyBvdHRhbnQ+JSV3aXRoLWE+O1xuIgorICAgICAgICArICIgICAgOTA6IGFub3ZhbnRhOyBhbm92YW50PiUld2l0aC1hPjtcbiIKKyAgICAgICAgKyAiICAgIDEwMDogYWNlbnRvOyBhY2VudFs+JSV3aXRoLW8+XTtcbiIKKyAgICAgICAgKyAiICAgIDIwMDogPCUld2l0aC1hPGNlbnRvOyA8JSV3aXRoLWE8Y2VudFs+JSV3aXRoLW8+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDA6IGFtaWxsZTsgYW1pbGxbPiUld2l0aC1pPl07XG4iCisgICAgICAgICsgIiAgICAyMDAwOiA8JSV3aXRoLWE8bWlsYTsgPCUld2l0aC1hPG1pbFs+JSV3aXRoLWE+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwMCwwMDA6ID0lbWFpbj07XG4iCisgICAgICAgICsgIiUld2l0aC1pOlxuIgorICAgICAgICArICIgICAgaXplcm87IHVubzsgaWR1ZTsgaXRyZTsgaXF1YXR0cm87IGljaW5xdWU7IGlzZWk7IGlzZXR0ZTsgb3R0bztcbiIKKyAgICAgICAgKyAiICAgICAgICBpbm92ZTtcbiIKKyAgICAgICAgKyAiICAgIGlkaWVjaTsgdW5kaWNpOyBpZG9kaWNpOyBpdHJlZGljaTsgaXF1YXR0b3JkaWNpOyBpcXVpbmRpY2k7IGlzZWRpY2k7XG4iCisgICAgICAgICsgIiAgICAgICAgaWRpY2lhc2V0dGU7IGlkaWNpb3R0bzsgaWRpY2lhbm5vdmU7XG4iCisgICAgICAgICsgIiAgICAyMDogaXZlbnRpOyBpdmVudD4lJXdpdGgtaT47XG4iCisgICAgICAgICsgIiAgICAzMDogaXRyZW50YTsgaXRyZW50PiUld2l0aC1pPjtcbiIKKyAgICAgICAgKyAiICAgIDQwOiBpcXVhcmFudGE7IGlxdWFyYW50PiUld2l0aC1hPjtcbiIKKyAgICAgICAgKyAiICAgIDUwOiBpY2lucXVhbnRhOyBpY2lucXVhbnQ+JSV3aXRoLWE+O1xuIgorICAgICAgICArICIgICAgNjA6IGlzZXNzYW50YTsgaXNlc3NhbnQ+JSV3aXRoLWE+O1xuIgorICAgICAgICArICIgICAgNzA6IGlzZXR0YW50YTsgaXNldHRhbnQ+JSV3aXRoLWE+O1xuIgorICAgICAgICArICIgICAgODA6IG90dGFudGE7IG90dGFudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICA5MDogaW5vdmFudGE7IGlub3ZhbnQ+JSV3aXRoLWE+O1xuIgorICAgICAgICArICIgICAgMTAwOiBpY2VudG87IGljZW50Wz4lJXdpdGgtbz5dO1xuIgorICAgICAgICArICIgICAgMjAwOiA8JSV3aXRoLWk8Y2VudG87IDwlJXdpdGgtaTxjZW50Wz4lJXdpdGgtbz5dO1xuIgorICAgICAgICArICIgICAgMTAwMDogaW1pbGxlOyBpbWlsbFs+JSV3aXRoLWk+XTtcbiIKKyAgICAgICAgKyAiICAgIDIwMDA6IDwlJXdpdGgtaTxtaWxhOyA8JSV3aXRoLWk8bWlsWz4lJXdpdGgtYT5dO1xuIgorICAgICAgICArICIgICAgMTAwLDAwMDogPSVtYWluPTtcbiIKKyAgICAgICAgKyAiJSV3aXRoLW86XG4iCisgICAgICAgICsgIiAgICBvemVybzsgdW5vOyBvZHVlOyBvdHJlOyBvcXVhdHRybzsgb2NpbnF1ZTsgb3NlaTsgb3NldHRlOyBvdHRvO1xuIgorICAgICAgICArICIgICAgICAgIG9ub3ZlO1xuIgorICAgICAgICArICIgICAgb2RpZWNpOyB1bmRpY2k7IG9kb2RpY2k7IG90cmVkaWNpOyBvcXVhdHRvcmRpY2k7IG9xdWluZGljaTsgb3NlZGljaTtcbiIKKyAgICAgICAgKyAiICAgICAgICBvZGljaWFzZXR0ZTsgb2RpY2lvdHRvOyBvZGljaWFubm92ZTtcbiIKKyAgICAgICAgKyAiICAgIDIwOiBvdmVudGk7IG92ZW50PiUld2l0aC1pPjtcbiIKKyAgICAgICAgKyAiICAgIDMwOiBvdHJlbnRhOyBvdHJlbnQ+JSV3aXRoLWk+O1xuIgorICAgICAgICArICIgICAgNDA6IG9xdWFyYW50YTsgb3F1YXJhbnQ+JSV3aXRoLWE+O1xuIgorICAgICAgICArICIgICAgNTA6IG9jaW5xdWFudGE7IG9jaW5xdWFudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICA2MDogb3Nlc3NhbnRhOyBvc2Vzc2FudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICA3MDogb3NldHRhbnRhOyBvc2V0dGFudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICA4MDogb3R0YW50YTsgb3R0YW50PiUld2l0aC1hPjtcbiIKKyAgICAgICAgKyAiICAgIDkwOiBvbm92YW50YTsgb25vdmFudD4lJXdpdGgtYT47XG4iCisgICAgICAgICsgIiAgICAxMDA6IG9jZW50bzsgb2NlbnRbPiUld2l0aC1vPl07XG4iCisgICAgICAgICsgIiAgICAyMDA6IDwlJXdpdGgtbzxjZW50bzsgPCUld2l0aC1vPGNlbnRbPiUld2l0aC1vPl07XG4iCisgICAgICAgICsgIiAgICAxMDAwOiBvbWlsbGU7IG9taWxsWz4lJXdpdGgtaT5dO1xuIgorICAgICAgICArICIgICAgMjAwMDogPCUld2l0aC1vPG1pbGE7IDwlJXdpdGgtbzxtaWxbPiUld2l0aC1hPl07XG4iCisgICAgICAgICsgIiAgICAxMDAsMDAwOiA9JW1haW49O1xuIjsKKyAgICAvLyBDYW4gc29tZW9uZSBjb25maXJtIHRoYXQgSSBkaWQgdGhlIHZvd2VsLWVsaWRpbmcgdGhpbmcgcmlnaHQ/ICBJJ20KKyAgICAvLyBub3QgMTAwJSBzdXJlIEknbSBkb2luZyBpdCBpbiBhbGwgdGhlIHJpZ2h0IHBsYWNlcywgb3IgY29tcGxldGVseQorICAgIC8vIGNvcnJlY3RseS4gIEFsc28sIEkgZG9uJ3QgaGF2ZSBpbmZvcm1hdGlvbiBmb3IgbmVnYXRpdmVzIGFuZCBkZWNpbWFscywKKyAgICAvLyBhbmQgSSBsYWNrIHdvcmRzIGZyb3IgdmFsdWVzIGZyb20gMSwwMDAsMDAwIG9uIHVwLgorCisgICAgLyoqCisgICAgICogU3BlbGxvdXQgcnVsZXMgZm9yIFN3ZWRpc2guCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3dlZGlzaCA9CisgICAgICAgICJub2xsOyBldHQ7IHR2XHUwMGU1OyB0cmU7IGZ5cmE7IGZlbTsgc2V4OyBzam87IFx1MDBlNXR0YTsgbmlvO1xuIgorICAgICAgICArICJ0aW87IGVsdmE7IHRvbHY7IHRyZXR0b247IGZqb3J0b247IGZlbXRvbjsgc2V4dG9uOyBzanV0dG9uOyBhcnRvbjsgbml0dG9uO1xuIgorICAgICAgICArICIyMDogdGp1Z29bPj5dO1xuIgorICAgICAgICArICIzMDogdHJldHRpb1s+Pl07XG4iCisgICAgICAgICsgIjQwOiBmeXJ0aW9bPj5dO1xuIgorICAgICAgICArICI1MDogZmVtdGlvWz4+XTtcbiIKKyAgICAgICAgKyAiNjA6IHNleHRpb1s+Pl07XG4iCisgICAgICAgICsgIjcwOiBzanV0dGlvWz4+XTtcbiIKKyAgICAgICAgKyAiODA6IFx1MDBlNXR0aW9bPj5dO1xuIgorICAgICAgICArICI5MDogbml0dGlvWz4+XTtcbiIKKyAgICAgICAgKyAiMTAwOiBodW5kcmFbPj5dO1xuIgorICAgICAgICArICIyMDA6IDw8aHVuZHJhWz4+XTtcbiIKKyAgICAgICAgKyAiMTAwMDogdHVzZW5bID4+XTtcbiIKKyAgICAgICAgKyAiMjAwMDogPDwgdHVzZW5bID4+XTtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwOiBlbiBtaWxqb25bID4+XTtcbiIKKyAgICAgICAgKyAiMiwwMDAsMDAwOiA8PCBtaWxqb25bID4+XTtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwLDAwMDogZW4gbWlsamFyZFsgPj5dO1xuIgorICAgICAgICArICIyLDAwMCwwMDAsMDAwOiA8PCBtaWxqYXJkWyA+Pl07XG4iCisgICAgICAgICsgIjEsMDAwLDAwMCwwMDAsMDAwOiBlbiBiaWxqb25bID4+XTtcbiIKKyAgICAgICAgKyAiMiwwMDAsMDAwLDAwMCwwMDA6IDw8IGJpbGpvblsgPj5dO1xuIgorICAgICAgICArICIxLDAwMCwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD0iOworICAgIC8vIGNhbiBzb21lb25lIHN1cHBseSBtZSB3aXRoIGluZm9ybWF0aW9uIG9uIG5lZ2F0aXZlcyBhbmQgZGVjaW1hbHM/CisKKyAgICAvKioKKyAgICAgKiBTcGVsbG91dCBydWxlcyBmb3IgRHV0Y2guICBOb3RpY2UgdGhhdCBpbiBEdXRjaCwgYXMgaW4gR2VybWFuLAorICAgICAqIHRoZSBvbmVzIGRpZ2l0IHByZWNlZGVzIHRoZSB0ZW5zIGRpZ2l0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGR1dGNoID0KKyAgICAgICAgIiAteDogbWluID4+O1xuIgorICAgICAgICArICJ4Lng6IDw8IGtvbW1hID4+O1xuIgorICAgICAgICArICIoemVybz8pOyBlZW47IHR3ZWU7IGRyaWU7IHZpZXI7IHZpamY7IHplczsgemV2ZW47IGFjaHQ7IG5lZ2VuO1xuIgorICAgICAgICArICJ0aWVuOyBlbGY7IHR3YWFsZjsgZGVydGllbjsgdmVlcnRpZW47IHZpamZ0aWVuOyB6ZXN0aWVuO1xuIgorICAgICAgICArICJ6ZXZlbnRpZW47IGFjaHRpZW47IG5lZ2VudGllbjtcbiIKKyAgICAgICAgKyAiMjA6IFs+PiBlbiBddHdpbnRpZztcbiIKKyAgICAgICAgKyAiMzA6IFs+PiBlbiBdZGVydGlnO1xuIgorICAgICAgICArICI0MDogWz4+IGVuIF12ZWVydGlnO1xuIgorICAgICAgICArICI1MDogWz4+IGVuIF12aWpmdGlnO1xuIgorICAgICAgICArICI2MDogWz4+IGVuIF16ZXN0aWc7XG4iCisgICAgICAgICsgIjcwOiBbPj4gZW4gXXpldmVudGlnO1xuIgorICAgICAgICArICI4MDogWz4+IGVuIF10YWNodGlnO1xuIgorICAgICAgICArICI5MDogWz4+IGVuIF1uZWdlbnRpZztcbiIKKyAgICAgICAgKyAiMTAwOiA8PCBob25kZXJkWyA+Pl07XG4iCisgICAgICAgICsgIjEwMDA6IDw8IGR1aXplbmRbID4+XTtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwOiA8PCBtaWxqb2VuWyA+Pl07XG4iCisgICAgICAgICsgIjEsMDAwLDAwMCwwMDA6IDw8IGJpbGpvZW5bID4+XTtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD0iOworCisgICAgLyoqCisgICAgICogU3BlbGxvdXQgcnVsZXMgZm9yIEphcGFuZXNlLiAgSW4gSmFwYW5lc2UsIHRoZXJlIHJlYWxseSBpc24ndCBhbnkKKyAgICAgKiBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgbnVtYmVyIHdyaXR0ZW4gb3V0IGluIGRpZ2l0cyBhbmQgYSBudW1iZXIKKyAgICAgKiB3cml0dGVuIG91dCBpbiB3b3JkczogdGhlIGlkZW9ncmFwaGljIGNoYXJhY3RlcnMgYXJlIGJvdGggZGlnaXRzCisgICAgICogYW5kIHdvcmRzLiAgVGhpcyBydWxlIHNldCBwcm92aWRlcyB0d28gdmFyaWFudHM6ICAldHJhZGl0aW9uYWwKKyAgICAgKiB1c2VzIHRoZSB0cmFkaXRpb25hbCBDSksgbnVtZXJhbHMgKHdoaWNoIGFyZSBhbHNvIHVzZWQgaW4gQ2hpbmEKKyAgICAgKiBhbmQgS29yZWEpLiAgJWZpbmFuY2lhbCB1c2VzIGFsdGVybmF0ZSBpZGVvZ3JhcGhzIGZvciBtYW55IG51bWJlcnMKKyAgICAgKiB0aGF0IGFyZSBoYXJkZXIgdG8gYWx0ZXIgdGhhbiB0aGUgdHJhZGl0aW9uYWwgbnVtZXJhbHMgKG9uZSBjb3VsZAorICAgICAqIGZhaXJseSBlYXNpbHkgY2hhbmdlIGEgb25lIHRvCisgICAgICogYSB0aHJlZSBqdXN0IGJ5IGFkZGluZyB0d28gc3Ryb2tlcywgZm9yIGV4YW1wbGUpLiAgVGhpcyBpcyBhbHNvIGRvbmUgaW4KKyAgICAgKiB0aGUgb3RoZXIgY291bnRyaWVzIHVzaW5nIENoaW5lc2UgaWRvZ3JhcGhzLCBidXQgZGlmZmVyZW50IGlkZW9ncmFwaHMKKyAgICAgKiBhcmUgdXNlZCBpbiB0aG9zZSBwbGFjZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgamFwYW5lc2UgPQorICAgICAgICAiJWZpbmFuY2lhbDpcbiIKKyAgICAgICAgKyAiICAgIFx1OTZmNjsgXHU1OGYxOyBcdTVmMTA7IFx1NTNjMjsgXHU1NmRiOyBcdTRmMGQ7IFx1NTE2ZDsgXHU0ZTAzOyBcdTUxNmI7IFx1NGU1ZDtcbiIKKyAgICAgICAgKyAiICAgIFx1NjJmZVs+Pl07XG4iCisgICAgICAgICsgIiAgICAyMDogPDxcdTYyZmVbPj5dO1xuIgorICAgICAgICArICIgICAgMTAwOiA8PFx1NzY3ZVs+Pl07XG4iCisgICAgICAgICsgIiAgICAxMDAwOiA8PFx1NTM0M1s+Pl07XG4iCisgICAgICAgICsgIiAgICAxMCwwMDA6IDw8XHU0ZTA3Wz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwMCwwMDAsMDAwOiA8PFx1NTEwNFs+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMDogPDxcdTUxNDZbPj5dO1xuIgorICAgICAgICArICIgICAgMTAsMDAwLDAwMCwwMDAsMDAwLDAwMDogPSMsIyMwPTtcbiIKKyAgICAgICAgKyAiJXRyYWRpdGlvbmFsOlxuIgorICAgICAgICArICIgICAgXHU5NmY2OyBcdTRlMDA7IFx1NGU4YzsgXHU0ZTA5OyBcdTU2ZGI7IFx1NGU5NDsgXHU1MTZkOyBcdTRlMDM7IFx1NTE2YjsgXHU0ZTVkO1xuIgorICAgICAgICArICIgICAgXHU1MzQxWz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDIwOiA8PFx1NTM0MVs+Pl07XG4iCisgICAgICAgICsgIiAgICAxMDA6IDw8XHU3NjdlWz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDA6IDw8XHU1MzQzWz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwLDAwMDogPDxcdTRlMDdbPj5dO1xuIgorICAgICAgICArICIgICAgMTAwLDAwMCwwMDA6IDw8XHU1MTA0Wz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMCwwMDAsMDAwOiA8PFx1NTE0Nls+Pl07XG4iCisgICAgICAgICsgIiAgICAxMCwwMDAsMDAwLDAwMCwwMDAsMDAwOiA9IywjIzA9OyI7CisgICAgLy8gQ2FuIHNvbWVvbmUgc3VwcGx5IG1lIHdpdGggdGhlIHJpZ2h0IGZyYXVkLXByb29mIGlkZW9ncmFwaHMgZm9yCisgICAgLy8gU2ltcGxpZmllZCBhbmQgVHJhZGl0aW9uYWwgQ2hpbmVzZSwgYW5kIGZvciBLb3JlYW4/ICBDYW4gc29tZW9uZQorICAgIC8vIHN1cHBseSBtZSB3aXRoIGluZm9ybWF0aW9uIG9uIG5lZ2F0aXZlcyBhbmQgZGVjaW1hbHM/CisKKyAgICAvKioKKyAgICAgKiBTcGVsbG91dCBydWxlcyBmb3IgR3JlZWsuICBBZ2FpbiBpbiBHcmVlayB3ZSBoYXZlIHRvIHN1cHBseSB0aGUgd29yZHMKKyAgICAgKiBmb3IgdGhlIG11bHRpcGxlcyBvZiAxMDAgYmVjYXVzZSB0aGV5IGNhbid0IGJlIGRlcml2ZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAqIEFsc28sIHRoZSB0ZW5zIGRnaXQgY2hhbmdlcyBmb3JtIHdoZW4gZm9sbG93ZWQgYnkgYSBvbmVzIGRpZ2l0OiBhbgorICAgICAqIGFjY2VudCBtYXJrIGRpc2FwcGVhcnMgZnJvbSB0aGUgdGVucyBkaWdpdCBhbmQgbW92ZXMgdG8gdGhlIG9uZXMgZGlnaXQuCisgICAgICogVGhlcmVmb3JlLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBbXSBub3RhdGlvbiwgd2UgYWN0dWFsbHkgaGF2ZSB0byB1c2UKKyAgICAgKiB0d28gc2VwYXJhdGUgcnVsZXMgZm9yIGVhY2ggbXVsdGlwbGUgb2YgMTAgdG8gc2hvdyB0aGUgdHdvIGZvcm1zIG9mCisgICAgICogdGhlIHdvcmQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ3JlZWsgPQorICAgICAgICAiemVybyAoaW5jb21wbGV0ZSBkYXRhKTsgXHUwM2FkXHUwM2JkXHUwM2IxOyBcdTAzYjRcdTAzY2RcdTAzYmY7IFx1MDNiNFx1MDNjMVx1MDNhZlx1MDNiMTsgIgorICAgICAgICArICJcdTAzYzRcdTAzYWRcdTAzYzNcdTAzYzNcdTAzYjVcdTAzYzFcdTAzYjE7IFx1MDNjMFx1MDNhZFx1MDNiZFx1MDNjNFx1MDNiNTsgIgorICAgICAgICArICJcdTAzYWRcdTAzYmVcdTAzYjk7IFx1MDNiNVx1MDNjMFx1MDNjNFx1MDNhYzsgXHUwM2JmXHUwM2JhXHUwM2M0XHUwM2NlOyAiCisgICAgICAgICsgIlx1MDNiNVx1MDNiZFx1MDNiZFx1MDNhZFx1MDNiMTtcbiIKKyAgICAgICAgKyAiMTA6IFx1MDNiNFx1MDNhZFx1MDNiYVx1MDNiMTsgIgorICAgICAgICArICJcdTAzYWRcdTAzYmRcdTAzYjRcdTAzYjVcdTAzYmFcdTAzYjE7IFx1MDNiNFx1MDNjZVx1MDNiNFx1MDNiNVx1MDNiYVx1MDNiMTsgIgorICAgICAgICArICJcdTAzYjRcdTAzYjVcdTAzYmFcdTAzYjE+PjtcbiIKKyAgICAgICAgKyAiMjA6IFx1MDNiNVx1MDNhZlx1MDNiYVx1MDNiZlx1MDNjM1x1MDNiOTsgXHUwM2I1XHUwM2I5XHUwM2JhXHUwM2JmXHUwM2MzXHUwM2I5Pj47XG4iCisgICAgICAgICsgIjMwOiBcdTAzYzRcdTAzYzFcdTAzYjlcdTAzYWNcdTAzYmRcdTAzYzRcdTAzYjE7IFx1MDNjNFx1MDNjMVx1MDNiOVx1MDNiMVx1MDNiZFx1MDNjNFx1MDNiMT4+O1xuIgorICAgICAgICArICI0MDogXHUwM2MzXHUwM2IxXHUwM2MxXHUwM2FjXHUwM2JkXHUwM2M0XHUwM2IxOyBcdTAzYzNcdTAzYjFcdTAzYzFcdTAzYjFcdTAzYmRcdTAzYzRcdTAzYjE+PjtcbiIKKyAgICAgICAgKyAiNTA6IFx1MDNjMFx1MDNiNVx1MDNiZFx1MDNhZVx1MDNiZFx1MDNjNFx1MDNiMTsgXHUwM2MwXHUwM2I1XHUwM2JkXHUwM2I3XHUwM2JkXHUwM2M0XHUwM2IxPj47XG4iCisgICAgICAgICsgIjYwOiBcdTAzYjVcdTAzYmVcdTAzYWVcdTAzYmRcdTAzYzRcdTAzYjE7IFx1MDNiNVx1MDNiZVx1MDNiN1x1MDNiZFx1MDNjNFx1MDNiMT4+O1xuIgorICAgICAgICArICI3MDogXHUwM2I1XHUwM2IyXHUwM2I0XHUwM2JmXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2M0XHUwM2IxOyAiCisgICAgICAgICsgIlx1MDNiNVx1MDNiMlx1MDNiNFx1MDNiZlx1MDNiY1x1MDNiN1x1MDNiZFx1MDNjNFx1MDNiMT4+O1xuIgorICAgICAgICArICI4MDogXHUwM2JmXHUwM2IzXHUwM2I0XHUwM2NjXHUwM2JkXHUwM2M0XHUwM2IxOyBcdTAzYmZcdTAzYjNcdTAzYjRcdTAzYmZcdTAzYmRcdTAzYzRcdTAzYjE+PjtcbiIKKyAgICAgICAgKyAiOTA6IFx1MDNiNVx1MDNiZFx1MDNiZFx1MDNiNVx1MDNiZFx1MDNhZVx1MDNiZFx1MDNjNFx1MDNiMTsgIgorICAgICAgICArICJcdTAzYjVcdTAzYmRcdTAzYmRcdTAzYjVcdTAzYmRcdTAzYjdcdTAzYmRcdTAzYzRcdTAzYjE+PjtcbiIKKyAgICAgICAgKyAiMTAwOiBcdTAzYjVcdTAzYmFcdTAzYjFcdTAzYzRcdTAzY2NbXHUwM2JkID4+XTtcbiIKKyAgICAgICAgKyAiMjAwOiBcdTAzYjRcdTAzYjlcdTAzYjFcdTAzYmFcdTAzY2NcdTAzYzNcdTAzYjlcdTAzYjFbID4+XTtcbiIKKyAgICAgICAgKyAiMzAwOiBcdTAzYzRcdTAzYzFcdTAzYjlcdTAzYjFcdTAzYmFcdTAzY2NcdTAzYzNcdTAzYjlcdTAzYjFbID4+XTtcbiIKKyAgICAgICAgKyAiNDAwOiBcdTAzYzRcdTAzYjVcdTAzYzRcdTAzYzFcdTAzYjFcdTAzYmFcdTAzY2NcdTAzYzNcdTAzYjlcdTAzYjFbID4+XTtcbiIKKyAgICAgICAgKyAiNTAwOiBcdTAzYzBcdTAzYjVcdTAzYmRcdTAzYzRcdTAzYjFcdTAzYmFcdTAzY2NcdTAzYzNcdTAzYjlcdTAzYjFbID4+XTtcbiIKKyAgICAgICAgKyAiNjAwOiBcdTAzYjVcdTAzYmVcdTAzYjFcdTAzYmFcdTAzY2NcdTAzYzNcdTAzYjlcdTAzYjFbID4+XTtcbiIKKyAgICAgICAgKyAiNzAwOiBcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjFcdTAzYmFcdTAzY2NcdTAzYzNcdTAzYjlcdTAzYjFbID4+XTtcbiIKKyAgICAgICAgKyAiODAwOiBcdTAzYmZcdTAzYmFcdTAzYzRcdTAzYjFcdTAzYmFcdTAzY2NcdTAzYzNcdTAzYjlcdTAzYjFbID4+XTtcbiIKKyAgICAgICAgKyAiOTAwOiBcdTAzYjVcdTAzYmRcdTAzYmRcdTAzYjlcdTAzYjFcdTAzYmFcdTAzY2NcdTAzYzNcdTAzYjlcdTAzYjFbID4+XTtcbiIKKyAgICAgICAgKyAiMTAwMDogXHUwM2M3XHUwM2FmXHUwM2JiXHUwM2I5XHUwM2IxWyA+Pl07XG4iCisgICAgICAgICsgIjIwMDA6IDw8IFx1MDNjN1x1MDNhZlx1MDNiYlx1MDNiOVx1MDNiMVsgPj5dO1xuIgorICAgICAgICArICIxLDAwMCwwMDA6IDw8IFx1MDNiNVx1MDNiYVx1MDNiMVx1MDNjNFx1MDNiZlx1MDNiY1x1MDNiY1x1MDNiOVx1MDNjY1x1MDNjMVx1MDNiOVx1MDNiZlsgPj5dO1xuIgorICAgICAgICArICIxLDAwMCwwMDAsMDAwOiA8PCBcdTAzYjRcdTAzYjlcdTAzYzNcdTAzYjVcdTAzYmFcdTAzYjFcdTAzYzRcdTAzYmZcdTAzYmNcdTAzYmNcdTAzYjlcdTAzY2NcdTAzYzFcdTAzYjlcdTAzYmZbID4+XTtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD0iOworICAgIC8vIENhbiBzb21lb25lIHN1cHBseSBtZSB3aXRoIGluZm9ybWF0aW9uIG9uIG5lZ2F0aXZlcyBhbmQgZGVjaW1hbHM/CisgICAgLy8gSSdtIGFsc28gbWlzc2luZyB0aGUgd29yZCBmb3IgemVyby4gIENhbiBzb21lb25lIGNsdWUgbWUgaW4/CisKKyAgICAvKioKKyAgICAgKiBTcGVsbG91dCBydWxlcyBmb3IgUnVzc2lhbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBydXNzaWFuID0KKyAgICAgICAgIlx1MDQzZFx1MDQzZVx1MDQzYlx1MDQ0YzsgXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkOyBcdTA0MzRcdTA0MzJcdTA0MzA7IFx1MDQ0Mlx1MDQ0MFx1MDQzODsgIgorICAgICAgICArICJcdTA0NDdcdTA0MzVcdTA0NDJcdTA0NGJcdTA0NDBcdTA0MzU7IFx1MDQzZlx1MDQ0Zlx1MDQ0MjsgXHUwNDQ4XHUwNDM1XHUwNDQxXHUwNDQyOyAiCisgICAgICAgICsgIlx1MDQ0MVx1MDQzNVx1MDQzY1x1MDQ0YzsgXHUwNDMyXHUwNDNlXHUwNDQxXHUwNDM1XHUwNDNjXHUwNDRjOyBcdTA0MzRcdTA0MzVcdTA0MzJcdTA0NGZcdTA0NDI7XG4iCisgICAgICAgICsgIjEwOiBcdTA0MzRcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDI7ICIKKyAgICAgICAgKyAiXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDNkXHUwNDMwXHUwNDM0XHUwNDQ2XHUwNDMwXHUwNDQyXHUwNDRjO1xuIgorICAgICAgICArICJcdTA0MzRcdTA0MzJcdTA0MzVcdTA0M2RcdTA0M2RcdTA0MzBcdTA0MzRcdTA0NDZcdTA0MzBcdTA0NDJcdTA0NGM7ICIKKyAgICAgICAgKyAiXHUwNDQyXHUwNDQwXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDM0XHUwNDQ2XHUwNDMwXHUwNDQyXHUwNDRjOyAiCisgICAgICAgICsgIlx1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQ0Ylx1MDQ0MFx1MDQzZFx1MDQzMFx1MDQzNFx1MDQ0Nlx1MDQzMFx1MDQ0Mlx1MDQ0YztcbiIKKyAgICAgICAgKyAiMTU6IFx1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzMFx1MDQzNFx1MDQ0Nlx1MDQzMFx1MDQ0Mlx1MDQ0YzsgIgorICAgICAgICArICJcdTA0NDhcdTA0MzVcdTA0NDFcdTA0NDJcdTA0M2RcdTA0MzBcdTA0MzRcdTA0NDZcdTA0MzBcdTA0NDJcdTA0NGM7ICIKKyAgICAgICAgKyAiXHUwNDQxXHUwNDM1XHUwNDNjXHUwNDNkXHUwNDMwXHUwNDM0XHUwNDQ2XHUwNDMwXHUwNDQyXHUwNDRjOyAiCisgICAgICAgICsgIlx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzNVx1MDQzY1x1MDQzZFx1MDQzMFx1MDQzNFx1MDQ0Nlx1MDQzMFx1MDQ0Mlx1MDQ0YzsgIgorICAgICAgICArICJcdTA0MzRcdTA0MzVcdTA0MzJcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzBcdTA0MzRcdTA0NDZcdTA0MzBcdTA0NDJcdTA0NGM7XG4iCisgICAgICAgICsgIjIwOiBcdTA0MzRcdTA0MzJcdTA0MzBcdTA0MzRcdTA0NDZcdTA0MzBcdTA0NDJcdTA0NGNbID4+XTtcbiIKKyAgICAgICAgKyAiMzA6IFx1MDQ0Mlx1MDQ0MFx1MDQzYlx1MDQzNFx1MDQ0Nlx1MDQzMFx1MDQ0Mlx1MDQ0Y1sgPj5dO1xuIgorICAgICAgICArICI0MDogXHUwNDQxXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhWyA+Pl07XG4iCisgICAgICAgICsgIjUwOiBcdTA0M2ZcdTA0NGZcdTA0NDJcdTA0NGNcdTA0MzRcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDJbID4+XTtcbiIKKyAgICAgICAgKyAiNjA6IFx1MDQ0OFx1MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQ0Y1x1MDQzNFx1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0MlsgPj5dO1xuIgorICAgICAgICArICI3MDogXHUwNDQxXHUwNDM1XHUwNDNjXHUwNDRjXHUwNDM0XHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQyWyA+Pl07XG4iCisgICAgICAgICsgIjgwOiBcdTA0MzJcdTA0M2VcdTA0NDFcdTA0MzVcdTA0M2NcdTA0NGNcdTA0MzRcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDJbID4+XTtcbiIKKyAgICAgICAgKyAiOTA6IFx1MDQzNFx1MDQzNVx1MDQzMlx1MDQ0Zlx1MDQzZFx1MDQzZVx1MDQ0MVx1MDQ0Mlx1MDQzZVsgPj5dO1xuIgorICAgICAgICArICIxMDA6IFx1MDQ0MVx1MDQ0Mlx1MDQzZVsgPj5dO1xuIgorICAgICAgICArICIyMDA6IDw8IFx1MDQ0MVx1MDQ0Mlx1MDQzZVsgPj5dO1xuIgorICAgICAgICArICIxMDAwOiBcdTA0NDJcdTA0NGJcdTA0NDFcdTA0NGZcdTA0NDdcdTA0MzBbID4+XTtcbiIKKyAgICAgICAgKyAiMjAwMDogPDwgXHUwNDQyXHUwNDRiXHUwNDQxXHUwNDRmXHUwNDQ3XHUwNDMwWyA+Pl07XG4iCisgICAgICAgICsgIjEsMDAwLDAwMDogXHUwNDNjXHUwNDM4XHUwNDNiXHUwNDNiXHUwNDM4XHUwNDNlXHUwNDNkWyA+Pl07XG4iCisgICAgICAgICsgIjIsMDAwLDAwMDogPDwgXHUwNDNjXHUwNDM4XHUwNDNiXHUwNDNiXHUwNDM4XHUwNDNlXHUwNDNkWyA+Pl07XG4iCisgICAgICAgICsgIjEsMDAwLDAwMCwwMDA6ID0jLCMjMD07IjsKKyAgICAvLyBDYW4gc29tZW9uZSBzdXBwbHkgbWUgd2l0aCBpbmZvcm1hdGlvbiBvbiBuZWdhdGl2ZXMgYW5kIGRlY2ltYWxzPworICAgIC8vIEhvdyBhYm91dCB3b3JkcyBmb3IgYmlsbGlvbnMgYW5kIHRyaWxsaW9ucz8KKworICAgIC8qKgorICAgICAqIFNwZWxsb3V0IHJ1bGVzIGZvciBIZWJyZXcuICBIZWJyZXcgYWN0dWFsbHkgaGFzIGluZmxlY3RlZCBmb3JtcyBmb3IKKyAgICAgKiBtb3N0IG9mIHRoZSBsb3dlci1vcmRlciBudW1iZXJzLiAgVGhlIG1hc2N1bGluZSBmb3JtcyBhcmUgc2hvd24KKyAgICAgKiBoZXJlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGhlYnJldyA9CisgICAgICAgICJ6ZXJvIChpbmNvbXBsZXRlIGRhdGEpOyBcdTA1ZDBcdTA1ZDRcdTA1ZDM7IFx1MDVlOVx1MDVkMlx1MDVkOVx1MDVkOVx1MDVkZDsgXHUwNWU5XHUwNWRjXHUwNWQ1XHUwNWU5XHUwNWQ0O1xuIgorICAgICAgICArICI0OiBcdTA1ZDBcdTA1ZDNcdTA1ZDFcdTA1ZTZcdTA1ZDQ7IFx1MDVkN1x1MDVkMlx1MDVkNVx1MDVkOVx1MDVlOVx1MDVkNDsgXHUwNWU5XHUwNWU5XHUwNWQ0O1xuIgorICAgICAgICArICI3OiBcdTA1ZTlcdTA1ZDFcdTA1ZTZcdTA1ZDQ7IFx1MDVlOVx1MDVkZVx1MDVkNVx1MDVkMlx1MDVkNDsgXHUwNWVhXHUwNWU5XHUwNWU2XHUwNWQ0O1xuIgorICAgICAgICArICIxMDogXHUwNWU2XHUwNWU5XHUwNWQzXHUwNWQ0WyA+Pl07XG4iCisgICAgICAgICsgIjIwOiBcdTA1ZTZcdTA1ZTlcdTA1ZDNcdTA1ZDlcdTA1ZGRbID4+XTtcbiIKKyAgICAgICAgKyAiMzA6IFx1MDVlOVx1MDVkY1x1MDVkNVx1MDVlOVx1MDVkOVx1MDVkZFsgPj5dO1xuIgorICAgICAgICArICI0MDogXHUwNWQwXHUwNWQzXHUwNWQxXHUwNWU2XHUwNWQ5XHUwNWRkWyA+Pl07XG4iCisgICAgICAgICsgIjUwOiBcdTA1ZDdcdTA1ZGVcdTA1ZDlcdTA1ZTlcdTA1ZDlcdTA1ZGRbID4+XTtcbiIKKyAgICAgICAgKyAiNjA6IFx1MDVlOVx1MDVlOVx1MDVkOVx1MDVkZFsgPj5dO1xuIgorICAgICAgICArICI3MDogXHUwNWU5XHUwNWQxXHUwNWU2XHUwNWQ5XHUwNWRkWyA+Pl07XG4iCisgICAgICAgICsgIjgwOiBcdTA1ZTlcdTA1ZGVcdTA1ZDVcdTA1ZDJcdTA1ZDlcdTA1ZGRbID4+XTtcbiIKKyAgICAgICAgKyAiOTA6IFx1MDVlYVx1MDVlOVx1MDVlNlx1MDVkOVx1MDVkZFsgPj5dO1xuIgorICAgICAgICArICIxMDA6IFx1MDVkZVx1MDVkMFx1MDVkNFsgPj5dO1xuIgorICAgICAgICArICIyMDA6IDw8IFx1MDVkZVx1MDVkMFx1MDVkNFsgPj5dO1xuIgorICAgICAgICArICIxMDAwOiBcdTA1ZDBcdTA1ZGNcdTA1ZTNbID4+XTtcbiIKKyAgICAgICAgKyAiMjAwMDogPDwgXHUwNWQwXHUwNWRjXHUwNWUzWyA+Pl07XG4iCisgICAgICAgICsgIjEsMDAwLDAwMDogPSMsIyMwPSAoaW5jb21wbGV0ZSBkYXRhKTsiOworICAgIC8vIFRoaXMgZGF0YSBpcyB3b2VmdWxseSBpbmNvbXBsZXRlLiAgQ2FuIHNvbWVvbmUgZmlsbCBtZSBpbiBvbiB0aGUKKyAgICAvLyB2YXJpb3VzIGluZmxlY3RlZCBmb3JtcyBvZiB0aGUgbnVtYmVycywgd2hpY2ggc2VlbSB0byBiZSBuZWNlc3NhcnkKKyAgICAvLyB0byBkbyBIZWJyZXcgY29ycmVjdGx5PyAgQ2FuIHNvbW9uZSBzdXBwbHkgbWUgd2l0aCBkYXRhIGZvciB2YWx1ZXMKKyAgICAvLyBmcm9tIDEsMDAwLDAwMCBvbiB1cD8gIFdoYXQgYWJvdXQgdGhlIHdvcmQgZm9yIHplcm8/ICBXaGF0IGFib3V0CisgICAgLy8gaW5mb3JtYXRpb24gb24gbmVnYXRpdmVzIGFuZCBkZWNpbWFscz8KKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gU2ltcGxlIGV4YW1wbGVzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFRoaXMgcnVsZSBzZXQgYWRkcyBhbiBFbmdsaXNoIG9yZGluYWwgYWJicmV2aWF0aW9uIHRvIHRoZSBlbmQgb2YgYQorICAgICAqIG51bWJlci4gIEZvciBleGFtcGxlLCAyIGlzIGZvcm1hdHRlZCBhcyAiMm5kIi4gIFBhcnNpbmcgZG9lc24ndCB3b3JrIHdpdGgKKyAgICAgKiB0aGlzIHJ1bGUgc2V0LiAgVG8gcGFyc2UsIHVzZSBEZWNpbWFsRm9ybWF0IG9uIHRoZSBudW1lcmFsLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIG9yZGluYWwgPQorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGZvcm1hdHMgdGhlIG51bWVyYWwgYW5kIGNhbGxzICUlYWJicmV2IHRvCisgICAgICAgIC8vIHN1cHBseSB0aGUgYWJicmV2aWF0aW9uCisgICAgICAgICIlbWFpbjpcbiIKKyAgICAgICAgKyAiICAgID0jLCMjMD09JSVhYmJyZXY9O1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IHN1cHBsaWVzIHRoZSBhYmJyZXZpYXRpb24KKyAgICAgICAgKyAiJSVhYmJyZXY6XG4iCisgICAgICAgICAgICAgICAvLyB0aGUgYWJicmV2aWF0aW9ucy4gIEV2ZXJ5dGhpbmcgZnJvbSA0IHRvIDE5IGVuZHMgaW4gInRoIgorICAgICAgICArICIgICAgdGg7IHN0OyBuZDsgcmQ7IHRoO1xuIgorICAgICAgICAgICAgICAgLy8gYXQgMjAsIHdlIGJlZ2luIHJlcGVhdGluZyB0aGUgY3ljbGUgZXZlcnkgMTAgKDEzIGlzICIxM3RoIiwKKyAgICAgICAgICAgICAgIC8vIGJ1dCAyMyBhbmQgMzMgYXJlICIyM3JkIiBhbmQgIjMzcmQiKSAgV2UgZG8gdGhpcyBieQorICAgICAgICAgICAgICAgLy8gaWdub3JpbmcgYWxsIGJ1ZyB0aGUgb25lcyBkaWdpdCBpbiBzZWxlY3RpbmcgdGhlIGFiYnJldmlhdGlvbgorICAgICAgICArICIgICAgMjA6ID4+O1xuIgorICAgICAgICAgICAgICAgLy8gYXQgMTAwLCB3ZSByZXBlYXQgdGhlIHdob2xlIGN5Y2xlIGJ5IGNvbnNpZGVyaW5nIG9ubHkgdGhlCisgICAgICAgICAgICAgICAvLyB0ZW5zIGFuZCBvbmVzIGRpZ2l0cyBpbiBwaWNraW5nIGFuIGFiYnJldmlhdGlvbgorICAgICAgICArICIgICAgMTAwOiA+PjtcbiI7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIGEgc2ltcGxlIG1lc3NhZ2UtZm9ybWF0dGluZyBleGFtcGxlLiAgTm9ybWFsbHkgb25lIHdvdWxkCisgICAgICogdXNlIENob2ljZUZvcm1hdCBhbmQgTWVzc2FnZUZvcm1hdCB0byBkbyBzb21ldGhpbmcgdGhpcyBzaW1wbGUsCisgICAgICogYnV0IHRoaXMgc2hvd3MgaXQgY291bGQgYmUgZG9uZSB3aXRoIFJ1bGVCYXNlZE51bWJlckZvcm1hdCB0b28uCisgICAgICogQSBtZXNzYWdlLWZvcm1hdHRpbmcgZXhhbXBsZSB0aGF0IG1pZ2h0IHdvcmsgYmV0dGVyIHdpdGgKKyAgICAgKiBSdWxlQmFzZWROdW1iZXJGb3JtYXQgYXBwZWFycyBsYXRlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBtZXNzYWdlMSA9CisgICAgICAgIC8vIHRoaXMgcnVsZSBzdXJyb3VuZHMgd2hhdGV2ZXIgdGhlIG90aGVyIHJ1bGVzIHByb2R1Y2Ugd2l0aCB0aGUKKyAgICAgICAgLy8gcmVzdCBvZiB0aGUgc2VudGVuY2UKKyAgICAgICAgInguMDogVGhlIHNlYXJjaCBmb3VuZCA8PC47XG4iCisgICAgICAgIC8vIHVzZSB3b3JkcyBmb3IgdmFsdWVzIGJlbG93IDEwIChhbmQgY2hhbmdlIHRvICJmaWxlIiBmb3IgMSkKKyAgICAgICAgKyAibm8gZmlsZXM7IG9uZSBmaWxlOyB0d28gZmlsZXM7IHRocmVlIGZpbGVzOyBmb3VyIGZpbGVzOyBmaXZlIGZpbGVzO1xuIgorICAgICAgICArICIgICAgc2l4IGZpbGVzOyBzZXZlbiBmaWxlczsgZWlnaHQgZmlsZXM7IG5pbmUgZmlsZXM7XG4iCisgICAgICAgIC8vIHVzZSBudW1lcmFscyBmb3IgdmFsdWVzIGhpZ2hlciB0aGFuIDEwCisgICAgICAgICsgIj0jLCMjMD0gZmlsZXM7IjsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gRnJhY3Rpb24gaGFuZGxpbmcKKyAgICAvLworICAgIC8vIFRoZSBuZXh0IGZldyBleGFtcGxlcyBzaG93IGhvdyBSdWxlQmFzZWROdW1iZXJGb3JtYXQgY2FuIGJlIHVzZWQgZm9yCisgICAgLy8gbW9yZSBmbGV4aWJsZSBoYW5kbGluZyBvZiBmcmFjdGlvbnMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogVGhpcyBleGFtcGxlIGZvcm1hdHMgYSBudW1iZXIgaW4gb25lIG9mIHRoZSB0d28gc3R5bGVzIG9mdGVuIHVzZWQKKyAgICAgKiBvbiBjaGVja3MuICAlZG9sbGFycy1hbmQtaHVuZHJlZHRocyBmb3JtYXRzIGNlbnRzIGFzIGh1bmRyZWR0aHMgb2YKKyAgICAgKiBhIGRvbGxhciAoMjMuNDAgY29tZXMgb3V0IGFzICJ0d2VudHktdGhyZWUgYW5kIDQwLzEwMCBkb2xsYXJzIikuCisgICAgICogJWRvbGxhcnMtYW5kLWNlbnRzIGZvcm1hdHMgaW4gZG9sbGFycyBhbmQgY2VudHMgKDIzLjQwIGNvbWVzIG91dCBhcworICAgICAqICJ0d2VudHktdGhyZWUgZG9sbGFycyBhbmQgZm9ydHkgY2VudHMiKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGRvbGxhcnNBbmRDZW50cyA9CisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgZm9ybWF0cyBudW1iZXJzIGFzIGRvbGxhcnMgYW5kIGNlbnRzCisgICAgICAgICIlZG9sbGFycy1hbmQtY2VudHM6XG4iCisgICAgICAgICAgICAgICAvLyBpZiB0aGUgdmFsdWUgaXMgMSBvciBtb3JlLCBwdXQgInh4IGRvbGxhcnMgYW5kIHl5IGNlbnRzIi4KKyAgICAgICAgICAgICAgIC8vIHRoZSAiYW5kIHkgY2VudHMiIHBhcnQgaXMgc3VwcHJlc3NlZCBpZiB0aGUgdmFsdWUgaXMgYW4KKyAgICAgICAgICAgICAgIC8vIGV2ZW4gbnVtYmVyIG9mIGRvbGxhcnMKKyAgICAgICAgKyAiICAgIHguMDogPDwgW2FuZCA+JSVjZW50cz5dO1xuIgorICAgICAgICAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGlzIGJldHdlZW4gMCBhbmQgMSwgcHV0ICJ4eCBjZW50cyIKKyAgICAgICAgKyAiICAgIDAueDogPiUlY2VudHM+O1xuIgorICAgICAgICAgICAgICAgLy8gdGhlc2UgdGhyZWUgcnVsZXMgdGFrZSBjYXJlIG9mIHRoZSBzaW5ndWxhciBhbmQgcGx1cmFsCisgICAgICAgICAgICAgICAvLyBmb3JtcyBvZiAiZG9sbGFyIiBhbmQgdXNlICUlbWFpbiB0byBmb3JtYXQgdGhlIG51bWJlcgorICAgICAgICArICIgICAgMDogemVybyBkb2xsYXJzOyBvbmUgZG9sbGFyOyA9JSVtYWluPSBkb2xsYXJzO1xuIgorICAgICAgICAvLyB0aGVzZSBhcmUgdGhlIHJlZ3VsYXIgVS5TLiBFbmdsaXNoIG51bWJlciBzcGVsbG91dCBydWxlcworICAgICAgICArICIlJW1haW46XG4iCisgICAgICAgICsgIiAgICB6ZXJvOyBvbmU7IHR3bzsgdGhyZWU7IGZvdXI7IGZpdmU7IHNpeDsgc2V2ZW47IGVpZ2h0OyBuaW5lO1xuIgorICAgICAgICArICIgICAgdGVuOyBlbGV2ZW47IHR3ZWx2ZTsgdGhpcnRlZW47IGZvdXJ0ZWVuOyBmaWZ0ZWVuOyBzaXh0ZWVuO1xuIgorICAgICAgICArICIgICAgICAgIHNldmVudGVlbjsgZWlnaHRlZW47IG5pbmV0ZWVuO1xuIgorICAgICAgICArICIgICAgMjA6IHR3ZW50eVstPj5dO1xuIgorICAgICAgICArICIgICAgMzA6IHRoaXJ0eVstPj5dO1xuIgorICAgICAgICArICIgICAgNDA6IGZvcnR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICA1MDogZmlmdHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDYwOiBzaXh0eVstPj5dO1xuIgorICAgICAgICArICIgICAgNzA6IHNldmVudHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDgwOiBlaWdodHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDkwOiBuaW5ldHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDogPDwgaHVuZHJlZFsgPj5dO1xuIgorICAgICAgICArICIgICAgMTAwMDogPDwgdGhvdXNhbmRbID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMDogPDwgbWlsbGlvblsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMDogPDwgYmlsbGlvblsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDA6IDw8IHRyaWxsaW9uWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD07XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSB0YWtlcyBjYXJlIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIHZhbHVlLiAgSXQKKyAgICAgICAgLy8gbXVsdGlwbGllcyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkIGJ5CisgICAgICAgIC8vIDEwMCwgZm9ybWF0cyBpdCB3aXRoICUlbWFpbiwgYW5kIHRoZW4gYWRkZXMgdGhlIHdvcmQgImNlbnQiIG9yCisgICAgICAgIC8vICJjZW50cyIgdG8gdGhlIGVuZC4gIChUaGUgdGV4dCBpbiBicmFja2V0cyBpcyBvbWl0dGVkIGlmIHRoZQorICAgICAgICAvLyBudW1lcmF0b3Igb2YgdGhlIGZyYWN0aW9uIGlzIDEuKQorICAgICAgICArICIlJWNlbnRzOlxuIgorICAgICAgICArICIgICAgMTAwOiA8JSVtYWluPCBjZW50W3NdO1xuIgorCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgZm9ybWF0cyBudW1iZXJzIGFzIGRvbGxhcnMgYW5kIGh1bmRyZWR0aHMgb2YgZG9sbGFycworICAgICAgICArICIlZG9sbGFycy1hbmQtaHVuZHJlZHRoczpcbiIKKyAgICAgICAgICAgICAgIC8vIHRoaXMgcnVsZSB0YWtlcyBjYXJlIG9mIHRoZSBnZW5lcmFsIHNoZWxsIG9mIHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgIC8vIHN0cmluZy4gIFdlIGFsd2F5cyBzaG93IHRoZSBjZW50cywgZXZlbiB3aGVuIHRoZXJlIGFyZW4ndAorICAgICAgICAgICAgICAgLy8gYW55LiAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgd29yZCBpcyBhbHdheXMgImRvbGxhcnMiLS0KKyAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIHNpbmd1bGFyIGZvcm0uICBXZSB1c2UKKyAgICAgICAgICAgICAgIC8vICUlbWFpbiB0byBmb3JtYXQgdGhlIG51bWJlciBvZiBkb2xsYXJzIGFuZCAlJWh1bmRyZWR0aHMgdG8KKyAgICAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgbnVtYmVyIG9mIGNlbnRzCisgICAgICAgICsgIiAgICB4LjA6IDwlJW1haW48IGFuZCA+JSVodW5kcmVkdGhzPi8xMDAgZG9sbGFycztcbiIKKyAgICAgICAgLy8gdGhpcyBydWxlIHNldCBmb3JtYXRzIHRoZSBjZW50cyBmb3IgJWRvbGxhcnMtYW5kLWh1bmRyZWR0aHMuCisgICAgICAgIC8vIEl0IG11bHRpcGxpZXMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgbnVtYmVyIGJ5IDEwMCBhbmQgZm9ybWF0cworICAgICAgICAvLyB0aGUgcmVzdWx0IHVzaW5nIGEgRGVjaW1hbEZvcm1hdCAoIjAwIiB0ZWxscyB0aGUgRGVjaW1hbEZvcm1hdCB0bworICAgICAgICAvLyBhbHdheXMgdXNlIHR3byBkaWdpdHMsIGV2ZW4gZm9yIG51bWJlcnMgdW5kZXIgMTApCisgICAgICAgICsgIiUlaHVuZHJlZHRoczpcbiIKKyAgICAgICAgKyAiICAgIDEwMDogPDAwPDtcbiI7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHJ1bGUgc2V0IHNob3dzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIG51bWJlciBhcyBhIGZyYWN0aW9uCisgICAgICogd2l0aCBhIHBvd2VyIG9mIDEwIGFzIHRoZSBkZW5vbWluYXRvci4gIFNvbWUgbGFuZ3VhZ2VzIGRvbid0IHNwZWxsCisgICAgICogb3V0IHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgYSBudW1iZXIgYXMgInBvaW50IG9uZSB0d28gdGhyZWUsIiBidXQKKyAgICAgKiBhbHdheXMgcmVuZGVyIGl0IGFzIGEgZnJhY3Rpb24uICBJZiB3ZSBzdGlsbCB3YW50IHRvIHRyZWF0IHRoZSBmcmFjdGlvbmFsCisgICAgICogcGFydCBvZiB0aGUgbnVtYmVyIGFzIGEgZGVjaW1hbCwgdGhlbiB0aGUgZnJhY3Rpb24ncyBkZW5vbWluYXRvcgorICAgICAqIGlzIGFsd2F5cyBhIHBvd2VyIG9mIDEwLiAgVGhpcyBleGFtcGxlIGRvZXMgdGhhdDogMjMuMTI1IGlzIGZvcm1hdHRlZAorICAgICAqIGFzICJ0d2VudHktdGhyZWUgYW5kIG9uZSBodW5kcmVkIHR3ZW50eS1maXZlIHRob3VzYW5kdGhzIiAoYXMgb3Bwb3NlZAorICAgICAqIHRvICJ0d2VudHktdGhyZWUgcG9pbnQgb25lIHR3byBmaXZlIiBvciAidHdlbnR5LXRocmVlIGFuZCBvbmUgZWlnaHRoIikuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVjaW1hbEFzRnJhY3Rpb24gPQorICAgICAgICAvLyB0aGUgcmVndWxhciBVLlMuIEVuZ2xpc2ggc3BlbGxvdXQgcnVsZXMsIHdpdGggb25lIGRpZmZlcmVuY2UKKyAgICAgICAgIiVtYWluOlxuIgorICAgICAgICArICIgICAgLXg6IG1pbnVzID4+O1xuIgorICAgICAgICAgICAgICAgLy8gdGhlIGRpZmZlcmVuY2UuICBUaGlzIHJ1bGUgdXNlcyAlJWZyYWMgdG8gc2hvdyB0aGUgZnJhY3Rpb25hbAorICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgbnVtYmVyLiAgVGV4dCBpbiBicmFja2V0cyBpcyBvbWl0dGVkIHdoZW4gdGhlCisgICAgICAgICAgICAgICAvLyB2YWx1ZSBpcyBiZXR3ZWVuIDAgYW5kIDEgKGNhdXNpbmcgMC4zIHRvIGNvbWUgb3V0IGFzICJ0aHJlZQorICAgICAgICAgICAgICAgLy8gdGVudGhzIiBpbnN0ZWFkIG9mICJ6ZXJvIGFuZCB0aHJlZSB0ZW50aHMiKS4KKyAgICAgICAgKyAiICAgIHgueDogWzw8IGFuZCBdPiUlZnJhYz47XG4iCisgICAgICAgICsgIiAgICB6ZXJvOyBvbmU7IHR3bzsgdGhyZWU7IGZvdXI7IGZpdmU7IHNpeDsgc2V2ZW47IGVpZ2h0OyBuaW5lO1xuIgorICAgICAgICArICIgICAgdGVuOyBlbGV2ZW47IHR3ZWx2ZTsgdGhpcnRlZW47IGZvdXJ0ZWVuOyBmaWZ0ZWVuOyBzaXh0ZWVuO1xuIgorICAgICAgICArICIgICAgICAgIHNldmVudGVlbjsgZWlnaHRlZW47IG5pbmV0ZWVuO1xuIgorICAgICAgICArICIgICAgdHdlbnR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICAzMDogdGhpcnR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICA0MDogZm9ydHlbLT4+XTtcbiIKKyAgICAgICAgKyAiICAgIDUwOiBmaWZ0eVstPj5dO1xuIgorICAgICAgICArICIgICAgNjA6IHNpeHR5Wy0+Pl07XG4iCisgICAgICAgICsgIiAgICA3MDogc2V2ZW50eVstPj5dO1xuIgorICAgICAgICArICIgICAgODA6IGVpZ2h0eVstPj5dO1xuIgorICAgICAgICArICIgICAgOTA6IG5pbmV0eVstPj5dO1xuIgorICAgICAgICArICIgICAgMTAwOiA8PCBodW5kcmVkWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxMDAwOiA8PCB0aG91c2FuZFsgPj5dO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiA8PCBtaWxsaW9uWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwOiA8PCBiaWxsaW9uWyA+Pl07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMDogPDwgdHJpbGxpb25bID4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMCwwMDAsMDAwLDAwMDogPSMsIyMwPTtcbiIKKyAgICAgICAgLy8gdGhlIHJ1bGUgc2V0IHRoYXQgZm9ybWF0cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBudW1iZXIuCisgICAgICAgIC8vIFRoZSBydWxlIHRoYXQgaXMgdXNlZCBpcyB0aGUgb25lIHRoYXQsIHdoZW4gaXRzIGJhYXNlIHZhbHVlIGlzCisgICAgICAgIC8vIG11bHRpcGxpZWQgYnkgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZCwKKyAgICAgICAgLy8gcHJvZHVjZXMgdGhlIHJlc3VsdCBjbG9zZXN0IHRvIHplcm8uICBUaHVzLCB0aGUgYmFzZSB2YWx1ZXMgYXJlCisgICAgICAgIC8vIHByb3NwZWN0aXZlIGRlbm9taW5hdG9ycyBvZiB0aGUgZnJhY3Rpb24uICBUaGUgPDwgbWFya3MgdGhlIHBsYWNlCisgICAgICAgIC8vIHdoZXJlIHRoZSBudW1lcmF0b3Igb2YgdGhlIGZyYWN0aW9uICh0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHRoZQorICAgICAgICAvLyBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIG51bWJlciBieSB0aGUgcnVsZSdzIGJhc2UgdmFsdWUpIGlzCisgICAgICAgIC8vIHBsYWNlZC4gIFRleHQgaW4gYnJhY2tldHMgaXMgb21pdHRlZCB3aGVuIHRoZSBudW1lcmF0b3IgaXMgMSwgZ2l2aW5nCisgICAgICAgIC8vIHVzIHRoZSBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm1zIG9mIHRoZSB3b3Jkcy4KKyAgICAgICAgLy8gW0luIGxhbmd1YWdlcyB3aGVyZSB0aGUgc2luZ3VsYXIgYW5kIHBsdXJhbCBhcmUgY29tcGxldGVseSBkaWZmZXJlbnQKKyAgICAgICAgLy8gd29yZHMsIHRoZSBydWxlIGNhbiBqdXN0IGJlIHN0YXRlZCB0d2ljZTogdGhlIHNlY29uZCB0aW1lIHdpdGgKKyAgICAgICAgLy8gdGhlIHBsdXJhbCBmb3JtLl0KKyAgICAgICAgKyAiJSVmcmFjOlxuIgorICAgICAgICArICIgICAgMTA6IDw8IHRlbnRoW3NdO1xuIgorICAgICAgICArICIgICAgMTAwOiA8PCBodW5kcmVkdGhbc107XG4iCisgICAgICAgICsgIiAgICAxMDAwOiA8PCB0aG91c2FuZHRoW3NdO1xuIgorICAgICAgICArICIgICAgMTAsMDAwOiA8PCB0ZW4tdGhvdXNhbmR0aFtzXTtcbiIKKyAgICAgICAgKyAiICAgIDEwMCwwMDA6IDw8IGh1bmRyZWQtdGhvdXNhbmR0aFtzXTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMDogPDwgbWlsbGlvbnRoW3NdOyI7CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgd2l0aCBjbG9zZXN0IGZyYWN0aW9uLiAgVGhpcyBleGFtcGxlIGZvcm1hdHMgYSB2YWx1ZSB1c2luZworICAgICAqIG51bWVyYWxzLCBidXQgc2hvd3MgdGhlIGZyYWN0aW9uYWwgcGFydCBhcyBhIHJhdGlvIChmcmFjdGlvbikgcmF0aGVyCisgICAgICogdGhhbiBhIGRlY2ltYWwuICBUaGUgZnJhY3Rpb24gYWx3YXlzIGhhcyBhIGRlbm9taW5hdG9yIGJldHdlZW4gMiBhbmQgMTAuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY2xvc2VzdEZyYWN0aW9uID0KKyAgICAgICAgIiVtYWluOlxuIgorICAgICAgICAgICAgICAgLy8gdGhpcyBydWxlIGZvcm1hdHMgdGhlIG51bWJlciBpZiBpdCdzIDEgb3IgbW9yZS4gIEl0IGZvcm1hdHMKKyAgICAgICAgICAgICAgIC8vIHRoZSBpbnRlZ3JhbCBwYXJ0IHVzaW5nIGEgRGVjaW1hbEZvcm1hdCAoIiMsIyMwIiBwdXRzCisgICAgICAgICAgICAgICAvLyB0aG91c2FuZHMgc2VwYXJhdG9ycyBpbiB0aGUgcmlnaHQgcGxhY2VzKSBhbmQgdGhlIGZyYWN0aW9uYWwKKyAgICAgICAgICAgICAgIC8vIHBhcnQgdXNpbmcgJSVmcmFjLiAgSWYgdGhlcmUgaXMgbm8gZnJhY3Rpb25hbCBwYXJ0LCBpdAorICAgICAgICAgICAgICAgLy8ganVzdCBzaG93cyB0aGUgaW50ZWdyYWwgcGFydC4KKyAgICAgICAgKyAiICAgIHguMDogPCMsIyMwPFsgPiUlZnJhYz5dO1xuIgorICAgICAgICAgICAgICAgLy8gdGhpcyBydWxlIGZvcm1hdHMgdGhlIG51bWJlciBpZiBpdCdzIGJldHdlZW4gMCBhbmQgMS4gIEl0CisgICAgICAgICAgICAgICAvLyBzaG93cyBvbmx5IHRoZSBmcmFjdGlvbmFsIHBhcnQgKDAuNSBzaG93cyB1cCBhcyAiMS8yLCIgbm90CisgICAgICAgICAgICAgICAvLyAiMCAxLzIiKQorICAgICAgICArICIgICAgMC54OiA+JSVmcmFjPjtcbiIKKyAgICAgICAgLy8gdGhlIGZyYWN0aW9uIHJ1bGUgc2V0LiAgVGhpcyB3b3JrcyB0aGUgc2FtZSB3YXkgYXMgdGhlIG9uZSBpbiB0aGUKKyAgICAgICAgLy8gcHJlY2VkaW5nIGV4YW1wbGU6IFdlIG11bHRpcGx5IHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIG51bWJlcgorICAgICAgICAvLyBiZWluZyBmb3JtYXR0ZWQgYnkgZWFjaCBydWxlJ3MgYmFzZSB2YWx1ZSBhbmQgdXNlIHRoZSBydWxlIHRoYXQKKyAgICAgICAgLy8gcHJvZHVjZXMgdGhlIHJlc3VsdCBjbG9zZXN0IHRvIDAgKG9yIHRoZSBmaXJzdCBydWxlIHRoYXQgcHJvZHVjZXMgMCkuCisgICAgICAgIC8vIFNpbmNlIHdlIG9ubHkgcHJvdmlkZSBydWxlcyBmb3IgdGhlIG51bWJlcnMgZnJvbSAyIHRvIDEwLCB3ZSBrbm93CisgICAgICAgIC8vIHdlJ2xsIGdldCBhIGZyYWN0aW9uIHdpdGggYSBkZW5vbWluYXRvciBiZXR3ZWVuIDIgYW5kIDEwLgorICAgICAgICAvLyAiPDA8IiBjYXVzZXMgdGhlIG51bWVyYXRvciBvZiB0aGUgZnJhY3Rpb24gdG8gYmUgZm9ybWF0dGVkCisgICAgICAgIC8vIHVzaW5nIG51bWVyYWxzCisgICAgICAgICsgIiUlZnJhYzpcbiIKKyAgICAgICAgKyAiICAgIDI6IDEvMjtcbiIKKyAgICAgICAgKyAiICAgIDM6IDwwPC8zO1xuIgorICAgICAgICArICIgICAgNDogPDA8LzQ7XG4iCisgICAgICAgICsgIiAgICA1OiA8MDwvNTtcbiIKKyAgICAgICAgKyAiICAgIDY6IDwwPC82O1xuIgorICAgICAgICArICIgICAgNzogPDA8Lzc7XG4iCisgICAgICAgICsgIiAgICA4OiA8MDwvODtcbiIKKyAgICAgICAgKyAiICAgIDk6IDwwPC85O1xuIgorICAgICAgICArICIgICAgMTA6IDwwPC8xMDtcbiI7CisKKyAgICAvKioKKyAgICAgKiBBbWVyaWNhbiBzdG9jay1wcmljZSBmb3JtYXR0aW5nLiAgTm9uLWludGVncmFsIHN0b2NrIHByaWNlcyBhcmUgc3RpbGwKKyAgICAgKiBnZW5lcmFsbHkgc2hvd24gaW4gZWlnaHRocyBvciBzaXh0ZWVudGhzIG9mIGRvbGxhcnMgaW5zdGVhZCBvZiBkb2xsYXJzCisgICAgICogYW5kIGNlbnRzLiAgVGhpcyBleGFtcGxlIGZvcm1hdHMgc3RvY2sgcHJpY2VzIGluIHRoaXMgd2F5IGlmIHBvc3NpYmxlLAorICAgICAqIGFuZCBpbiBkb2xsYXJzIGFuZCBjZW50cyBpZiBub3QuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RvY2sgPQorICAgICAgICAiJW1haW46XG4iCisgICAgICAgICAgICAgICAvLyB0aGlzIHJ1bGUgZm9ybWF0cyB0aGUgaW50ZWdyYWwgcGFydCBvZiB0aGUgbnVtYmVyIGluIG51bWVyYWxzCisgICAgICAgICAgICAgICAvLyBhbmQgKGlmIG5lY2Vzc2FyeSkgdGhlIGZyYWN0aW9uYWwgcGFydCB1c2luZyAlJWZyYWMxCisgICAgICAgICsgIiAgICB4LjA6IDwjLCMjMDxbPiUlZnJhYzE+XTtcbiIKKyAgICAgICAgICAgICAgIC8vIHRoaXMgcnVsZSBpcyB1c2VkIGZvciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxIGFuZCBvbWl0cyB0aGUKKyAgICAgICAgICAgICAgIC8vIGludGVncmFsIHBhcnQKKyAgICAgICAgKyAiICAgIDAueDogPiUlZnJhYzI+O1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGlzIHVzZWQgdG8gZm9ybWF0IHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIG51bWJlciB3aGVuCisgICAgICAgIC8vIHRoZXJlJ3MgYW4gaW50ZWdyYWwgcGFydCBiZWZvcmUgaXQgKGFnYWluLCB3ZSB0cnkgYWxsIGRlbm9taW5hdG9ycworICAgICAgICAvLyBhbmQgdXNlIHRoZSAiYmVzdCIgb25lKQorICAgICAgICArICIlJWZyYWMxOlxuIgorICAgICAgICAgICAgICAgLy8gZm9yIGV2ZW4gbXVsdGlwbGVzIG9mIDEvNCwgZm9ybWF0IHRoZSBmcmFjdGlvbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgIC8vIHR5cG9ncmFwaGVyJ3MgZnJhY3Rpb25zCisgICAgICAgICsgIiAgICA0OiA8JSVxdWFydGVyczw7XG4iCisgICAgICAgICAgICAgICAvLyBmb3JtYXQgdGhlIHZhbHVlIGFzIGEgbnVtYmVyIG9mIGVpZ2h0aHMsIHNpeHRlZW50aHMsIG9yCisgICAgICAgICAgICAgICAvLyB0aGlydHktc2Vjb25kcywgd2hpY2hldmVyIHByb2R1Y2VzIHRoZSBtb3N0IGFjY3VyYXRlIHZhbHVlLgorICAgICAgICAgICAgICAgLy8gVGhlIGFwb3N0cm9waGUgYXQgdGhlIGZyb250IG9mIHRoZXNlIHJ1bGVzIGlzIGlnbm9yZWQsIGJ1dAorICAgICAgICAgICAgICAgLy8gaXQgbWFrZXMgdGhlIHNwYWNlIHRoYXQgZm9sbG93cyBpdCBzaWduaWZpY2FudC4gIFRoaXMgcHV0cyBhCisgICAgICAgICAgICAgICAvLyBzcGFjZSBiZXR3ZWVuIHRoZSB2YWx1ZSdzIGludGVncmFsIGFuZCBmcmFjdGlvbmFsIHBhcnRzIHNvCisgICAgICAgICAgICAgICAvLyB5b3UgY2FuIHJlYWQgaXQKKyAgICAgICAgKyAiICAgIDg6ICcgPDA8Lzg7XG4iCisgICAgICAgICsgIiAgICAxNjogJyA8MDwvMTY7XG4iCisgICAgICAgICsgIiAgICAzMjogJyA8MDwvMzI7XG4iCisgICAgICAgICAgICAgICAvLyBpZiB3ZSBjYW4ndCByZWFzb25hYmx5IGZvcm1hdCB0aGUgbnVtYmVyIGluIHBvd2VycyBvZiAyLAorICAgICAgICAgICAgICAgLy8gdGhlbiBzaG93IGl0IGFzIGRvbGxhcnMgYW5kIGNlbnRzCisgICAgICAgICsgIiAgICAxMDA6IC48MDA8O1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGlzIHVzZWQgd2hlbiB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSB2YWx1ZSBzdGFuZHMKKyAgICAgICAgLy8gYWxvbmUKKyAgICAgICAgKyAiJSVmcmFjMjpcbiIKKyAgICAgICAgKyAiICAgIDQ6IDwlJXF1YXJ0ZXJzPDtcbiIKKyAgICAgICAgICAgICAgIC8vIGZvciBmcmFjdGlvbnMgdGhhdCB3ZSBjYW4ndCBzaG93IHVzaW5nIHR5cG9ncmFwaGVyJ3MgZnJhY3Rpb25zLAorICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGZyYWN0aW9uCisgICAgICAgICsgIiAgICA4OiA8MDwvODtcbiIKKyAgICAgICAgKyAiICAgIDE2OiA8MDwvMTY7XG4iCisgICAgICAgICsgIiAgICAzMjogPDA8LzMyO1xuIgorICAgICAgICAgICAgICAgLy8gYnV0IGRvbGxhcnMgYW5kIGNlbnRzIGxvb2sgYmV0dGVyIHdpdGggYSBsZWFkaW5nIDAKKyAgICAgICAgKyAiICAgIDEwMDogMC48MDA8O1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGZvcm1hdHMgMS80LCAxLzIsIGFuZCAzLzQgdXNpbmcgdHlwb2dyYXBoZXIncyBmcmFjdGlvbnMKKyAgICAgICAgKyAiJSVxdWFydGVyczpcbiIKKyAgICAgICAgKyAiICAgIDsgXHUwMGJjOyBcdTAwYmQ7IFx1MDBiZTtcbiIKKyAgICAgICAgLy8gdGhlcmUgYXJlIHRoZSBsZW5pZW50LXBhcnNlIHJ1bGVzLiAgVGhlc2UgYWxsb3cgdGhlIHVzZXIgdG8gdHlwZQorICAgICAgICAvLyAiMS80LCIgIjEvMiwiIGFuZCAiMy80IiBpbnN0ZWFkIG9mIHRoZWlyIHR5cG9ncmFwaGljYWwgY291bnRlcnBhcnRzCisgICAgICAgIC8vIGFuZCBzdGlsbCBoYXZlIHRoZW0gYmUgdW5kZXJzdG9vZCBieSB0aGUgZm9ybWF0dGVyCisgICAgICAgICsgIiUlbGVuaWVudC1wYXJzZTpcbiIKKyAgICAgICAgKyAiICAgICYgJzEvNCcgLCBcdTAwYmNcbiIKKyAgICAgICAgKyAiICAgICYgJzEvMicgLCBcdTAwYmRcbiIKKyAgICAgICAgKyAiICAgICYgJzMvNCcgLCBcdTAwYmVcbjsiOworCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBDaGFuZ2luZyBkaW1lbnNpb25zCisgICAgLy8KKyAgICAvLyBUaGUgbmV4dCBmZXcgZXhhbXBsZXMgZGVtb25zdHJhdGUgdXNpbmcgYSBSdWxlQmFzZWROdW1iZXJGb3JtYXQgdG8KKyAgICAvLyBjaGFuZ2UgdGhlIHVuaXRzIGEgdmFsdWUgaXMgZGVub21pbmF0ZWQgaW4gZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogVGhlIGV4YW1wbGUgc2hvd3MgbGFyZ2UgbnVtYmVycyB0aGUgd2F5IHRoZXkgb2Z0ZW4gYXBwZWFyIGlzIG53ZXNwYXBlcnM6CisgICAgICogMSwyMDAsMDAwIGlzIGZvcm1hdHRlZCBhcyAiMS4yIG1pbGxpb24iLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGFiYkVuZ2xpc2ggPQorICAgICAgICAiPSMsIyMwPTtcbiIKKyAgICAgICAgLy8gdGhpcyBpcyBmYWlybHkgc2VsZi1leHBsYW5hdG9yeSwgYnV0IG5vdGUgdGhhdCB0aGUgPDwgc3Vic3RpdHV0aW9uCisgICAgICAgIC8vIGNhbiBzaG93IHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIHN1YnN0aXR1dGlvbiB2YWx1ZSBpZiB0aGUgdXNlcgorICAgICAgICAvLyB3YW50cyBpdAorICAgICAgICArICIxLDAwMCwwMDA6IDwjIzAuIyMjPCBtaWxsaW9uO1xuIgorICAgICAgICArICIxLDAwMCwwMDAsMDAwOiA8IyMwLiMjIzwgYmlsbGlvbjtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwLDAwMCwwMDA6IDwjIzAuIyMjPCB0cmlsbGlvbjtcbiI7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGV4YW1wbGUgdGFrZXMgYSBudW1iZXIgb2YgbWV0ZXJzIGFuZCBmb3JtYXRzIGl0IGluIHdoYXRldmVyIHVuaXQKKyAgICAgKiB3aWxsIHByb2R1Y2UgYSBudW1iZXIgd2l0aCBmcm9tIG9uZSB0byB0aHJlZSBkaWdpdHMgYmVmb3JlIHRoZSBkZWNpbWFsCisgICAgICogcG9pbnQuICBGb3IgZXhhbXBsZSwgMjMwLDAwMCBpcyBmb3JtYXR0ZWQgYXMgIjIzMCBrbSIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdW5pdHMgPQorICAgICAgICAiJW1haW46XG4iCisgICAgICAgICAgICAgICAvLyBmb3IgdmFsdWVzIGJldHdlZW4gMCBhbmQgMSwgZGVsZWdhdGUgdG8gJSVzbWFsbAorICAgICAgICArICIgICAgMC54OiA+JSVzbWFsbD47XG4iCisgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHNob3cgYmV0d2VlbiAzIGFuZCA2IHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgIC8vIGFsb25nIHdpdGggdGhlIG1vc3QgYXBwcm9wcmlhdGUgdW5pdAorICAgICAgICArICIgICAgMDogPSMjMC4jIyM9IG07XG4iCisgICAgICAgICsgIiAgICAxLDAwMDogPCMjMC4jIyM8IGttO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiA8IyMwLiMjIzwgTW07XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwOiA8IyMwLiMjIzwgR207XG4iCisgICAgICAgICsgIiAgICAxLDAwMCwwMDAsMDAwLDAwMDogPCMsIyMwLiMjIzwgVG07XG4iCisgICAgICAgIC8vICUlc21hbGwgZm9ybWF0cyB0aGUgbnVtYmVyIHdoZW4gaXQncyBsZXNzIHRoZW4gMS4gIEl0IG11bHRpcGxpZXMgdGhlCisgICAgICAgIC8vIHZhbHVlIGJ5IG9uZSBiaWxsaW9uLCBhbmQgdGhlbiB1c2VzICUlc21hbGwyIHRvIGFjdHVhbGx5IGRvIHRoZQorICAgICAgICAvLyBmb3JtYXR0aW5nLgorICAgICAgICArICIlJXNtYWxsOlxuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwLDAwMCwwMDA6IDwlJXNtYWxsMjw7XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgYWN0dWFsbHkgZm9ybWF0cyBzbWFsbCB2YWx1ZXMuICAlJXNtYWxsIHBhc3NlcyB0aGlzCisgICAgICAgIC8vIHJ1bGUgc2V0IGEgbnVtYmVyIG9mIHBpY29tZXRlcnMsIGFuZCBpdCB0YWtlcyBjYXJlIG9mIHNjYWxpbmcgdXAgYXMKKyAgICAgICAgLy8gYXBwcm9wcmlhdGUgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgJW1haW4gZG9lcyAod2UgY2FuJ3Qgbm9ybWFsbHkKKyAgICAgICAgLy8gaGFuZGxlIGZyYWN0aW9uYWwgdmFsdWVzIHRoaXMgd2F5OiBoZXJlLCB3ZSdyZSBjb25jZXJuZWQgYWJvdXQKKyAgICAgICAgLy8gbWFnbml0dWRlOyBtb3N0IG9mIHRoZSB0aW1lLCB3ZSdyZSBjb25jZXJuZWQgYWJvdXQgcHJlY3Npb24pCisgICAgICAgICsgIiUlc21hbGwyOlxuIgorICAgICAgICArICIgICAgMDogPSMjMD0gcG07XG4iCisgICAgICAgICsgIiAgICAxLDAwMDogPCMjMC4jIyM8IG5tO1xuIgorICAgICAgICArICIgICAgMSwwMDAsMDAwOiA8IyMwLiMjIzwgXHUwMGI1bTtcbiIKKyAgICAgICAgKyAiICAgIDEsMDAwLDAwMCwwMDA6IDwjIzAuIyMjPCBtbTtcbiI7CisKKyAgICAvKioKKyAgICAgKiBBIG1vcmUgY29tcGxpY2F0ZWQgbWVzc2FnZS1mb3JtYXR0aW5nIGV4YW1wbGUuICBIZXJlLCBpbiBhZGRpdGlvbiB0bworICAgICAqIGhhbmRsaW5nIHRoZSBzaW5ndWxhciBhbmQgcGx1cmFsIHZlcnNpb25zIG9mIHRoZSB3b3JkLCB0aGUgdmFsdWUgaXMKKyAgICAgKiBkZW5vbWluYXRlZCBpbiBieXRlcywga2lsb2J5dGVzLCBvciBtZWdhYnl0ZXMgZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUuCisgICAgICogQWxzbyBub3RpY2UgdGhhdCBpdCBjb3JyZWN0bHkgdHJlYXRzIGEga2lsb2J5dGUgYXMgMSwwMjQgYnl0ZXMgKG5vdCAxLDAwMCksCisgICAgICogYW5kIGEgbWVnYWJ5dGUgYXMgMSwwMjQga2lsb2J5dGVzIChub3QgMSwwMDApLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIG1lc3NhZ2UyID0KKyAgICAgICAgLy8gdGhpcyBydWxlIHN1cHBsaWVzIHRoZSBzaGVsbCBvZiB0aGUgc2VudGVuY2UKKyAgICAgICAgInguMDogVGhlcmUgPDwgZnJlZSBzcGFjZSBvbiB0aGUgZGlzay47XG4iCisgICAgICAgIC8vIGhhbmRsZSBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm1zIG9mICJieXRlIiAoYW5kIGZvcm1hdCAwIGFzCisgICAgICAgIC8vICJUaGVyZSBpcyBubyBmcmVlIHNwYWNlLi4uIikKKyAgICAgICAgKyAiMDogaXMgbm87XG4iCisgICAgICAgICsgImlzIG9uZSBieXRlIG9mO1xuIgorICAgICAgICArICJhcmUgPTA9IGJ5dGVzIG9mO1xuIgorICAgICAgICAvLyBmb3IgdmFsdWVzIGFib3ZlIDEsMDI0LCBmb3JtYXQgdGhlIG51bWJlciBpbiBLIChzaW5jZSAiSyIgaXMgdXN1YWxseQorICAgICAgICAvLyBwcm9tb3VuY2VkICJLIiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQncyBzaW5ndWxhciBvciBwbHVyYWwsIHdlCisgICAgICAgIC8vIGRvbid0IHdvcnJ5IGFib3V0IHRoZSBwbHVyYWwgZm9ybSkuICBUaGUgIi8xMDI0IiBoZXJlIGNhdXNlcyB1cyB0bworICAgICAgICAvLyB0cmVhdCBhIEsgYXMgMSwwMjQgYnl0ZXMgcmF0aGVyIHRoYW4gMSwwMDAgYnl0ZXMuCisgICAgICAgICsgIjEwMjQvMTAyNDogaXMgPDA8SyBvZjtcbiIKKyAgICAgICAgLy8gZm9yIHZhbHVlcyBhYm91dCAxLDA0OCw1NzYsIGZvcm1hdCB0aGUgbnVtYmVyIGluIE1iLiAgU2luY2UgIk1iIiBpcworICAgICAgICAvLyB1c3VhbGx5IHByb21vdW5jZWQgIm1lZyIgaW4gc2luZ3VsYXIgYW5kICJtZWdzIiBpbiBwbHVyYWwsIHdlIGRvIGhhdmUKKyAgICAgICAgLy8gYm90aCBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm1zLiAgQWdhaW4sIG5vdGljZSB3ZSB0cmVhdCBhIG1lZ2FieXRlCisgICAgICAgIC8vIGFzIDEsMDI0IGtpbG9ieXRlcy4KKyAgICAgICAgKyAiMSwwNDgsNTc2LzEwMjQ6IGlzIDEgTWIgb2Y7XG4iCisgICAgICAgICsgIjIsMDk3LDE1Mi8xMDI0OiBhcmUgPDA8IE1iIG9mOyI7CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIEFsdGVybmF0ZSByYWRpY2VzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFRoaXMgZXhhbXBsZSBmb3JtYXRzIGEgbnVtYmVyIGluIGRvemVucyBhbmQgZ3Jvc3MuICBUaGlzIGlzIGludGVuZGVkIHRvCisgICAgICogZGVtb25zdHJhdGUgaG93IHRoaXMgcnVsZSBzZXQgY2FuIGJlIHVzZWQgdG8gZm9ybWF0IG51bWJlcnMgaW4gc3lzdGVtcworICAgICAqIG90aGVyIHRoYW4gYmFzZSAxMC4gIFRoZSAiLzEyIiBhZnRlciB0aGUgcnVsZXMnIGJhc2UgdmFsdWVzIGNvbnRyb2xzIHRoaXMuCisgICAgICogQWxzbyBub3RpY2UgdGhhdCB0aGUgYmFzZSBkb2Vzbid0IGhhdmUgdG8gYmUgY29uc2lzdGVudCB0aHJvdWdob3V0IHRoZQorICAgICAqIHdob2xlIHJ1bGUgc2V0OiB3ZSBnbyBiYWNrIHRvIGJhc2UgMTAgZm9yIHZhbHVlcyBvdmVyIDEsMDAwLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGRvemVucyA9CisgICAgICAgIC8vIHdvcmRzIGZvciBudW1iZXJzLi4uCisgICAgICAgICJ6ZXJvOyBvbmU7IHR3bzsgdGhyZWU7IGZvdXI7IGZpdmU7IHNpeDtcbiIKKyAgICAgICAgKyAic2V2ZW47IGVpZ2h0OyBuaW5lOyB0ZW47IGVsZXZlbjtcbiIKKyAgICAgICAgLy8gZm9ybWF0IHZhbHVlcyBvdmVyIDEyIGluIGRvemVucworICAgICAgICArICIxMi8xMjogPDwgZG96ZW5bIGFuZCA+Pl07XG4iCisgICAgICAgIC8vIGZvcm1hdCB2YWx1ZXMgb3ZlciAxNDQgaW4gZ3Jvc3MKKyAgICAgICAgKyAiMTQ0LzEyOiA8PCBncm9zc1ssID4+XTtcbiIKKyAgICAgICAgLy8gZm9ybWF0IHZhbHVlcyBvdmVyIDEsMDAwIGluIHRob3VzYW5kcworICAgICAgICArICIxMDAwOiA8PCB0aG91c2FuZFssID4+XTtcbiIKKyAgICAgICAgLy8gb3ZlcmZsb3cgcnVsZS4gIEZvcm1hdCB2YWx1ZXMgb3ZlciAxMCwwMDAgaW4gbnVtZXJhbHMKKyAgICAgICAgKyAiMTAsMDAwOiA9IywjIzA9O1xuIjsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gTWFqb3IgYW5kIG1pbm9yIHVuaXRzCisgICAgLy8KKyAgICAvLyBUaGVzZSBleGFtcGxlcyBzaG93IGhvdyBhIHNpbmdsZSB2YWx1ZSBjYW4gYmUgZGl2aWRlZCB1cCBpbnRvIG1ham9yCisgICAgLy8gYW5kIG1pbm9yIHVuaXRzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVhY2ggb3RoZXIgYnkgYSBmYWN0b3Igb2YgMTAuCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFRoaXMgZXhhbXBsZSBmb3JtYXRzIGEgbnVtYmVyIG9mIHNlY29uZHMgaW4gc2V4YWdlc2ltYWwgbm90YXRpb24KKyAgICAgKiAoaS5lLiwgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzKS4gICV3aXRoLXdvcmRzIGZvcm1hdHMgaXQgd2l0aAorICAgICAqIHdvcmRzICgzNzQwIGlzICIxIGhvdXIsIDIgbWludXRlcywgMjAgc2Vjb25kcyIpIGFuZCAlaW4tbnVtZXJhbHMKKyAgICAgKiBmb3JtYXRzIGl0IGVudGlyZWx5IGluIG51bWVyYWxzICgzNzQwIGlzICIxOjAyOjIwIikuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZHVyYXRpb25JblNlY29uZHMgPQorICAgICAgICAvLyBtYWluIHJ1bGUgc2V0IGZvciBmb3JtYXR0aW5nIHdpdGggd29yZHMKKyAgICAgICAgIiV3aXRoLXdvcmRzOlxuIgorICAgICAgICAgICAgICAgLy8gdGFrZSBjYXJlIG9mIHNpbmd1bGFyIGFuZCBwbHVyYWwgZm9ybXMgb2YgInNlY29uZCIKKyAgICAgICAgKyAiICAgIDAgc2Vjb25kczsgMSBzZWNvbmQ7ID0wPSBzZWNvbmRzO1xuIgorICAgICAgICAgICAgICAgLy8gdXNlICUlbWluIHRvIGZvcm1hdCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDYwIHNlY29uZHMKKyAgICAgICAgKyAiICAgIDYwLzYwOiA8JSVtaW48WywgPj5dO1xuIgorICAgICAgICAgICAgICAgLy8gdXNlICUlaHIgdG8gZm9ybWF0IHZhbHVlcyBncmVhdGVyIHRoYW4gMyw2MDAgc2Vjb25kcworICAgICAgICAgICAgICAgLy8gKHRoZSAiPj4+IiBiZWxvdyBjYXVzZXMgdXMgdG8gc2VlIHRoZSBudW1iZXIgb2YgbWludXRlcworICAgICAgICAgICAgICAgLy8gd2hlbiB3aGVuIHRoZXJlIGFyZSB6ZXJvIG1pbnV0ZXMpCisgICAgICAgICsgIiAgICAzNjAwLzYwOiA8JSVocjxbLCA+Pj5dO1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IHRha2VzIGNhcmUgb2YgdGhlIHNpbmd1bGFyIGFuZCBwbHVyYWwgZm9ybXMKKyAgICAgICAgLy8gb2YgIm1pbnV0ZSIKKyAgICAgICAgKyAiJSVtaW46XG4iCisgICAgICAgICsgIiAgICAwIG1pbnV0ZXM7IDEgbWludXRlOyA9MD0gbWludXRlcztcbiIKKyAgICAgICAgLy8gdGhpcyBydWxlIHNldCB0YWtlcyBjYXJlIG9mIHRoZSBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm1zCisgICAgICAgIC8vIG9mICJob3VyIgorICAgICAgICArICIlJWhyOlxuIgorICAgICAgICArICIgICAgMCBob3VyczsgMSBob3VyOyA9MD0gaG91cnM7XG4iCisKKyAgICAgICAgLy8gbWFpbiBydWxlIHNldCBmb3IgZm9ybWF0dGluZyBpbiBudW1lcmFscworICAgICAgICArICIlaW4tbnVtZXJhbHM6XG4iCisgICAgICAgICAgICAgICAvLyB2YWx1ZXMgYmVsb3cgNjAgc2Vjb25kcyBhcmUgc2hvd24gd2l0aCAic2VjLiIKKyAgICAgICAgKyAiICAgID0wPSBzZWMuO1xuIgorICAgICAgICAgICAgICAgLy8gaGlnaGVyIHZhbHVlcyBhcmUgc2hvd24gd2l0aCBjb2xvbnM6ICUlbWluLXNlYyBpcyB1c2VkIGZvcgorICAgICAgICAgICAgICAgLy8gdmFsdWVzIGJlbG93IDMsNjAwIHNlY29uZHMuLi4KKyAgICAgICAgKyAiICAgIDYwOiA9JSVtaW4tc2VjPTtcbiIKKyAgICAgICAgICAgICAgIC8vIC4uLmFuZCAlJWhyLW1pbi1zZWMgaXMgdXNlZCBmb3IgdmFsdWVzIG9mIDMsNjAwIHNlY29uZHMKKyAgICAgICAgICAgICAgIC8vIGFuZCBhYm92ZQorICAgICAgICArICIgICAgMzYwMDogPSUlaHItbWluLXNlYz07XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBjYXVzZXMgdmFsdWVzIG9mIGxlc3MgdGhhbiAxMCBtaW51dGVzIHRvIHNob3cgd2l0aG91dAorICAgICAgICAvLyBhIGxlYWRpbmcgemVybworICAgICAgICArICIlJW1pbi1zZWM6XG4iCisgICAgICAgICsgIiAgICAwOiA6PTAwPTtcbiIKKyAgICAgICAgKyAiICAgIDYwLzYwOiA8MDw+PjtcbiIKKyAgICAgICAgLy8gdGhpcyBydWxlIHNldCBpcyB1c2VkIGZvciB2YWx1ZXMgb2YgMyw2MDAgb3IgbW9yZS4gIE1pbnV0ZXMgYXJlIGFsd2F5cworICAgICAgICAvLyBzaG93biwgYW5kIGFsd2F5cyBzaG93biB3aXRoIHR3byBkaWdpdHMKKyAgICAgICAgKyAiJSVoci1taW4tc2VjOlxuIgorICAgICAgICArICIgICAgMDogOj0wMD07XG4iCisgICAgICAgICsgIiAgICA2MC82MDogPDAwPD4+O1xuIgorICAgICAgICArICIgICAgMzYwMC82MDogPCMsIyMwPDo+Pj47XG4iCisgICAgICAgIC8vIHRoZSBsZW5pZW50LXBhcnNlIHJ1bGVzIGFsbG93IHNldmVyYWwgZGlmZmVyZW50IGNoYXJhY3RlcnMgdG8gYmUgdXNlZAorICAgICAgICAvLyBhcyBkZWxpbWl0ZXJzIGJldHdlZW4gaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzCisgICAgICAgICsgIiUlbGVuaWVudC1wYXJzZTpcbiIKKyAgICAgICAgKyAiICAgICYgOiA9IC4gPSAnICcgPSAtO1xuIjsKKworICAgIC8qKgorICAgICAqIFRoaXMgZXhhbXBsZSBmb3JtYXRzIGEgbnVtYmVyIG9mIGhvdXJzIGluIHNleGFnZXNpbWFsIG5vdGF0aW9uIChpLmUuLAorICAgICAqIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcykuICAld2l0aC13b3JkcyBmb3JtYXRzIHRoZSB2YWx1ZSB1c2luZworICAgICAqIHdvcmRzIGZvciB0aGUgdW5pdHMsIGFuZCAlaW4tbnVtZXJhbHMgZm9ybWF0cyB0aGUgdmFsdWUgdXNpbmcgb25seQorICAgICAqIG51bWVyYWxzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGR1cmF0aW9uSW5Ib3VycyA9CisgICAgICAgIC8vIG1haW4gZW50cnkgcG9pbnQgZm9yIGZvcm1hdHRpbmcgd2l0aCB3b3JkcworICAgICAgICAiJXdpdGgtd29yZHM6XG4iCisgICAgICAgICAgICAgICAvLyB0aGlzIHJ1bGUgb21pdHMgbWludXRlcyBhbmQgc2Vjb25kcyB3aGVuIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgICAgLy8gYW4gZXZlbiBudW1iZXIgb2YgaG91cnMKKyAgICAgICAgKyAiICAgIHguMDogPDxbLCA+JSVtaW4tc2VjPl07XG4iCisgICAgICAgICAgICAgICAvLyB0aGVzZSBydWxlcyB0YWtlIGNhcmUgb2YgdGhlIHNpbmd1bGFyIGFuZCBwbHVyYWwgZm9ybXMKKyAgICAgICAgICAgICAgIC8vIG9mIGhvdXJzCisgICAgICAgICsgIiAgICAwIGhvdXJzOyAxIGhvdXI7ID0jLCMjMD0gaG91cnM7XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgdGFrZXMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgbnVtYmVyIGFuZCBtdWx0aXBsaWVzCisgICAgICAgIC8vIGl0IGJ5IDMsNjAwICh0dXJuaW5nIGl0IGludG8gYSBudW1iZXIgb2Ygc2Vjb25kcykuICBUaGVuIGl0IGRlbGVnYXRlcworICAgICAgICAvLyB0byAlJW1pbi1zZWMtaW1wbGVtZW50YXRpb24gdG8gZm9ybWF0IHRoZSByZXN1bHRpbmcgdmFsdWUKKyAgICAgICAgKyAiJSVtaW4tc2VjOlxuIgorICAgICAgICArICIgICAgMzYwMDogPSUlbWluLXNlYy1pbXBsZW1lbnRhdGlvbj07XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgZm9ybWF0cyB0aGUgc2Vjb25kcyBhcyBlaXRoZXIgc2Vjb25kcyBvciBtaW51dGVzIGFuZAorICAgICAgICAvLyBzZWNvbmRzLCBhbmQgdGFrZXMgY2FyZSBvZiB0aGUgc2luZ3VsYXIgYW5kIHBsdXJhbCBmb3JtcyBvZgorICAgICAgICAvLyAibWludXRlIiBhbmQgInNlY29uZCIKKyAgICAgICAgKyAiJSVtaW4tc2VjLWltcGxlbWVudGF0aW9uOlxuIgorICAgICAgICArICIgICAgMCBzZWNvbmRzOyAxIHNlY29uZDsgPTA9IHNlY29uZHM7XG4iCisgICAgICAgICsgIiAgICA2MC82MDogMSBtaW51dGVbLCA+Pl07XG4iCisgICAgICAgICsgIiAgICAxMjAvNjA6IDwwPCBtaW51dGVzWywgPj5dO1xuIgorCisgICAgICAgIC8vIG1haW4gZW50cnkgcG9pbnQgZm9yIGZvcm1hdHRpbmcgaW4gbnVtZXJhbHMKKyAgICAgICAgKyAiJWluLW51bWVyYWxzOlxuIgorICAgICAgICAgICAgICAgLy8gc2hvdyBtaW51dGVzIGV2ZW4gZm9yIGV2ZW4gbnVtYmVycyBvZiBob3VycworICAgICAgICArICIgICAgeC4wOiA8IywjIzA8OjAwO1xuIgorICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgdG8gJSVtaW4tc2VjMiB0byBmb3JtYXQgbWludXRlcyBhbmQgc2Vjb25kcworICAgICAgICArICIgICAgeC54OiA8IywjIzA8Oj4lJW1pbi1zZWMyPjtcbiIKKyAgICAgICAgLy8gdGhpcyBydWxlIHNldCBmb3JtYXRzIG1pbnV0ZXMgd2hlbiB0aGVyZSBpcyBhbiBldmVuIG51bWJlciBvZgorICAgICAgICAvLyBtaW51dGVzLCBhbmQgZGVsZWdhdGVzIHRvICUlbWluLXNlYzItaW1wbGVtZW50YXRpb24gd2hlbiB0aGVyZQorICAgICAgICAvLyBhcmUgc2Vjb25kcworICAgICAgICArICIlJW1pbi1zZWMyOlxuIgorICAgICAgICArICIgICAgNjA6IDwwMDw7XG4iCisgICAgICAgICsgIiAgICAzNjAwOiA8JSVtaW4tc2VjMi1pbXBsZW1lbnRhdGlvbjw7XG4iCisgICAgICAgIC8vIHRoZXNlIHR3byBydWxlIHNldHMgYXJlIHVzZWQgdG8gZm9ybWF0IHRoZSBtaW51dGVzIGFuZCBzZWNvbmRzCisgICAgICAgICsgIiUlbWluLXNlYzItaW1wbGVtZW50YXRpb246XG4iCisgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgZmV3ZXIgdGhhbiA2MCBzZWNvbmRzLCBzaG93IHRoZSBtaW51dGVzIGFueXdheQorICAgICAgICArICIgICAgMDogMDA6PTAwPTtcbiIKKyAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBtaW51dGVzLCBmb3JtYXQgdGhlbSB0b28sIGFuZCBhbHdheXMgdXNlIDIgZGlnaXRzCisgICAgICAgICAgICAgICAvLyBmb3IgYm90aCBtaW51dGVzIGFuZCBzZWNvbmRzCisgICAgICAgICsgIiAgICA2MDogPSUlbWluLXNlYzM9O1xuIgorICAgICAgICArICIlJW1pbi1zZWMzOlxuIgorICAgICAgICArICIgICAgMDogOj0wMD07XG4iCisgICAgICAgICsgIiAgICA2MC82MDogPDAwPD4+O1xuIgorICAgICAgICAvLyB0aGUgbGVuaWVudC1wYXJzZSBydWxlcyBhbGxvdyB0aGUgdXNlciB0byB1c2UgYW55IG9mIHNldmVyYWwKKyAgICAgICAgLy8gY2hhcmFjdGVycyBhcyBkZWxpbWl0ZXJzIGJldHdlZW4gaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzCisgICAgICAgICsgIiUlbGVuaWVudC1wYXJzZTpcbiIKKyAgICAgICAgKyAiICAgICYgOiA9IC4gPSAnICcgPSAtO1xuIjsKKworICAgIC8qKgorICAgICAqIFRoaXMgcnVsZSBzZXQgZm9ybWF0cyBhIG51bWJlciBvZiBwb3VuZHMgYXMgcG91bmRzLCBzaGlsbGluZ3MsIGFuZAorICAgICAqIHBlbmNlIGluIHRoZSBvbGQgRW5nbGlzaCBzeXN0ZW0gb2YgY3VycmVuY3kuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgcG91bmRzU2hpbGxpbmdzQW5kUGVuY2UgPQorICAgICAgICAvLyBmb3IgdmFsdWVzIG9mIDEgb3IgbW9yZSwgZm9ybWF0IHRoZSBpbnRlZ3JhbCBwYXJ0IHdpdGggYSBwb3VuZAorICAgICAgICAvLyBzaWduIGluIGZyb250LCBhbmQgc2hvdyBzaGlsbGluZ3MgYW5kIHBlbmNlIGlmIG5lY2Vzc2FyeQorICAgICAgICAiJW1haW46XG4iCisgICAgICAgICsgIiAgICB4LjA6IFx1MDBhMzwjLCMjMDxbID4lJXNoaWxsaW5ncy1hbmQtcGVuY2U+XTtcbiIKKyAgICAgICAgLy8gZm9yIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEsIG9taXQgdGhlIG51bWJlciBvZiBwb3VuZHMKKyAgICAgICAgKyAiICAgIDAueDogPiUlcGVuY2UtYWxvbmU+O1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGlzIHVzZWQgdG8gc2hvdyBzaGlsbGluZ3MgYW5kIHBlbmNlLiAgSXQgbXVsdGlwbGllcworICAgICAgICAvLyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBudW1iZXIgYnkgMjQwICh0aGUgbnVtYmVyIG9mIHBlbmNlIGluIGEKKyAgICAgICAgLy8gcG91bmQpIGFuZCB1c2VzICUlc2hpbGxpbmdzLWFuZC1wZW5jZS1pbXBsZW1lbnRhdGlvbiB0byBmb3JtYXQKKyAgICAgICAgLy8gdGhlIHJlc3VsdAorICAgICAgICArICIlJXNoaWxsaW5ncy1hbmQtcGVuY2U6XG4iCisgICAgICAgICsgIiAgICAyNDA6IDwlJXNoaWxsaW5ncy1hbmQtcGVuY2UtaW1wbGVtZW50YXRpb248O1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGlzIHVzZWQgdG8gc2hvdyBzaGlsbGluZ3MgYW5kIHBlbmNlIHdoZW4gdGhlcmUgYXJlCisgICAgICAgIC8vIG5vIHBvdW5kcy4gIEl0IGFsc28gbXVsdGlwbGllcyB0aGUgdmFsdWUgYnkgMjQwLCBhbmQgdGhlbiBpdCB1c2VzCisgICAgICAgIC8vICUlcGVuY2UtYWxvbmUtaW1wbGVtZW50YXRpb24gdG8gZm9ybWF0IHRoZSByZXN1bHQuCisgICAgICAgICsgIiUlcGVuY2UtYWxvbmU6XG4iCisgICAgICAgICsgIiAgICAyNDA6IDwlJXBlbmNlLWFsb25lLWltcGxlbWVudGF0aW9uPDtcbiIKKyAgICAgICAgLy8gdGhpcyBydWxlIHNldCBmb3JtYXRzIGEgbnVtYmVyIG9mIHBlbmNlIHdoZW4gd2Uga25vdyB3ZSBhbHNvCisgICAgICAgIC8vIGhhdmUgcG91bmRzLiAgV2UgYWx3YXlzIHNob3cgc2hpbGxpbmdzICh3aXRoIGEgMCBpZiBuZWNlc3NhcnkpLAorICAgICAgICAvLyBidXQgb25seSBzaG93IHBlbmNlIGlmIHRoZSB2YWx1ZSBpc24ndCBhbiBldmVuIG51bWJlciBvZiBzaGlsbGluZ3MKKyAgICAgICAgKyAiJSVzaGlsbGluZ3MtYW5kLXBlbmNlLWltcGxlbWVudGF0aW9uOlxuIgorICAgICAgICArICIgICAgMC87IDAvPTA9O1xuIgorICAgICAgICArICIgICAgMTIvMTI6IDwwPC9bPjA+XTtcbiIKKyAgICAgICAgLy8gdGhpcyBydWxlIHNldCBmb3JtYXRzIGEgbnVtYmVyIG9mIHBlbmNlIHdoZW4gd2Uga25vdyB0aGVyZSBhcmUKKyAgICAgICAgLy8gbm8gcG91bmRzLiAgVmFsdWVzIGxlc3MgdGhhbiBhIHNoaWxsaW5nIGFyZSBzaG93biB3aXRoICJkLiIgKHRoZQorICAgICAgICAvLyBhYmJyZXZpYXRpb24gZm9yIHBlbmNlKSwgYW5kIHZhbHVlcyBncmVhdGVyIHRoYW4gYSBzaGlsbGluZyBhcmUKKyAgICAgICAgLy8gc2hvd24gd2l0aCBhIHNoaWxsaW5nIGJhciAoYW5kIHdpdGhvdXQgcGVuY2Ugd2hlbiB0aGUgdmFsdWUgaXMKKyAgICAgICAgLy8gYW4gZXZlbiBudW1iZXIgb2Ygc2hpbGxpbmdzKQorICAgICAgICArICIlJXBlbmNlLWFsb25lLWltcGxlbWVudGF0aW9uOlxuIgorICAgICAgICArICIgICAgPTA9IGQuO1xuIgorICAgICAgICArICIgICAgMTIvMTI6IDwwPC9bPjA+XTtcbiI7CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIEFsdGVybmF0ZSBudW1lcmF0aW9uIHN5c3RlbXMKKyAgICAvLworICAgIC8vIFRoZXNlIGV4YW1wbGVzIHNob3cgaG93IFJ1bGVCYXNlZE51bWJlckZvcm1hdCBjYW4gYmUgdXNlZCB0byBmb3JtYXQKKyAgICAvLyBudW1iZXJzIHVzaW5nIG5vbi1wb3NpdGlvbmFsIG51bWVyYXRpb24gc3lzdGVtcy4KKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogQXJhYmljIGRpZ2l0cy4gIFRoaXMgZXhhbXBsZSBmb3JtYXRzIG51bWJlcnMgaW4gQXJhYmljIG51bWVyYWxzLgorICAgICAqIE5vcm1hbGx5LCB5b3UnZCBkbyB0aGlzIHdpdGggRGVjaW1hbEZvcm1hdCwgYnV0IHRoaXMgc2hvd3MgdGhhdAorICAgICAqIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBjYW4gaGFuZGxlIGl0IHRvby4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBhcmFiaWNOdW1lcmFscyA9CisgICAgICAgICIwOyAxOyAyOyAzOyA0OyA1OyA2OyA3OyA4OyA5O1xuIgorICAgICAgICArICIxMDogPDw+PjtcbiIKKyAgICAgICAgKyAiMTAwOiA8PD4+PjtcbiIKKyAgICAgICAgKyAiMTAwMDogPDwsPj4+O1xuIgorICAgICAgICArICIxLDAwMCwwMDA6IDw8LD4+PjtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwLDAwMDogPDwsPj4+O1xuIgorICAgICAgICArICIxLDAwMCwwMDAsMDAwLDAwMDogPDwsPj4+O1xuIgorICAgICAgICArICIxLDAwMCwwMDAsMDAwLDAwMCwwMDA6ID0jLCMjMD07XG4iCisgICAgICAgICsgIi14OiAtPj47XG4iCisgICAgICAgICsgIngueDogPDwuPj47IjsKKworICAgIC8qKgorICAgICAqIFdvcmRzIGZvciBkaWdpdHMuICBGb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgdGhlIEFyYWJpYy1udW1lcmFscworICAgICAqIGV4YW1wbGUgYWJvdmUsIGJ1dCB1c2VzIHdvcmRzIGZvciB0aGUgdmFyaW91cyBkaWdpdHMgKGUuZy4sIDEyMyBjb21lcworICAgICAqIG91dCBhcyAib25lIHR3byB0aHJlZSIpLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHdvcmRzRm9yRGlnaXRzID0KKyAgICAgICAgIi14OiBtaW51cyA+PjtcbiIKKyAgICAgICAgKyAieC54OiA8PCBwb2ludCA+PjtcbiIKKyAgICAgICAgKyAiemVybzsgb25lOyB0d287IHRocmVlOyBmb3VyOyBmaXZlOyBzaXg7XG4iCisgICAgICAgICsgIiAgICBzZXZlbjsgZWlnaHQ7IG5pbmU7XG4iCisgICAgICAgICsgIjEwOiA8PCA+PjtcbiIKKyAgICAgICAgKyAiMTAwOiA8PCA+Pj47XG4iCisgICAgICAgICsgIjEwMDA6IDw8LCA+Pj47XG4iCisgICAgICAgICsgIjEsMDAwLDAwMDogPDwsID4+PjtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwLDAwMDogPDwsID4+PjtcbiIKKyAgICAgICAgKyAiMSwwMDAsMDAwLDAwMCwwMDA6IDw8LCA+Pj47XG4iCisgICAgICAgICsgIjEsMDAwLDAwMCwwMDAsMDAwLDAwMDogPSMsIyMwPTtcbiI7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGV4YW1wbGUgZm9ybWF0cyBudW1iZXJzIHVzaW5nIENoaW5lc2UgY2hhcmFjdGVycyBpbiB0aGUgQXJhYmljCisgICAgICogcGxhY2UtdmFsdWUgbWV0aG9kLiAgVGhpcyB3YXMgdXNlZCBoaXN0b3JpY2FsbHkgaW4gQ2hpbmEgZm9yIGEgd2hpbGUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY2hpbmVzZVBsYWNlVmFsdWUgPQorICAgICAgICAiXHUzMDA3OyBcdTRlMDA7IFx1NGU4YzsgXHU0ZTA5OyBcdTU2ZGI7IFx1NGU5NDsgXHU1MTZkOyBcdTRlMDM7IFx1NTE2YjsgXHU0ZTVkO1xuIgorICAgICAgICArICIxMDogPDw+PjtcbiIKKyAgICAgICAgKyAiMTAwOiA8PD4+PjtcbiIKKyAgICAgICAgKyAiMTAwMDogPDw+Pj47XG4iCisgICAgICAgICsgIjEsMDAwLDAwMDogPDw+Pj47XG4iCisgICAgICAgICsgIjEsMDAwLDAwMCwwMDA6IDw8Pj4+O1xuIgorICAgICAgICArICIxLDAwMCwwMDAsMDAwLDAwMDogPDw+Pj47XG4iCisgICAgICAgICsgIjEsMDAwLDAwMCwwMDAsMDAwLDAwMDogPSMsIyMwPTtcbiI7CisKKyAgICAvKioKKyAgICAgKiBSb21hbiBudW1lcmFscy4gIFRoaXMgZXhhbXBsZSBoYXMgdHdvIHZhcmlhbnRzOiAlbW9kZXJuIHNob3dzIGhvdyBsYXJnZQorICAgICAqIG51bWJlcnMgYXJlIHVzdWFsbHkgaGFuZGxlZCB0b2RheTsgJWhpc3RvcmljYWwgc2VzIHRoZSBvbGRlciBzeW1ib2xzIGZvcgorICAgICAqIHRob3VzYW5kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyByb21hbk51bWVyYWxzID0KKyAgICAgICAgIiVoaXN0b3JpY2FsOlxuIgorICAgICAgICArICIgICAgPSVtb2Rlcm49O1xuIgorICAgICAgICAgICAgICAgLy8gaW4gZWFybHkgUm9tYW4gbnVtZXJhbHMsIDEsMDAwIHdhcyBzaG93biB3aXRoIGEgY2lyY2xlCisgICAgICAgICAgICAgICAvLyBiaXNlY3RlZCBieSBhIHZlcnRpY2FsIGxpbmUuICBBZGRpdGlvbmFsIHRob3VzYW5kcyB3ZXJlCisgICAgICAgICAgICAgICAvLyBzaG93biBieSBhZGRpbmcgbW9yZSBjb25jZW50cmljIGNpcmNsZXMsIGFuZCBmaXZlcyB3ZXJlCisgICAgICAgICAgICAgICAvLyBzaG93biBieSBjdXR0aW5nIHRoZSBzeW1ib2wgZm9yIG5leHQtaGlnaGVyIHBvd2VyIG9mIDEwCisgICAgICAgICAgICAgICAvLyBpbiBoYWxmICh0aGUgbGV0dGVyIEQgZm9yIDUwMCBldm9sdmVkIGZyb20gdGhpcykuCisgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBnbyBiZXlvbmQgNDAsMDAwLCBidXQgVW5pY29kZSBkb2Vzbid0IGVuY29kZQorICAgICAgICAgICAgICAgLy8gdGhlIHN5bWJvbHMgZm9yIGhpZ2hlciBudW1iZXJzLworICAgICAgICArICIgICAgMTAwMDogXHUyMTgwWz4+XTsgMjAwMDogXHUyMTgwXHUyMTgwWz4+XTsgMzAwMDogXHUyMTgwXHUyMTgwXHUyMTgwWz4+XTsgNDAwMDogXHUyMTgwXHUyMTgxWz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDUwMDA6IFx1MjE4MVs+Pl07IDYwMDA6IFx1MjE4MVx1MjE4MFs+Pl07IDcwMDA6IFx1MjE4MVx1MjE4MFx1MjE4MFs+Pl07XG4iCisgICAgICAgICsgIiAgICA4MDAwOiBcdTIxODFcdTIxODBcdTIxODBcdTIxODBbPj5dOyA5MDAwOiBcdTIxODBcdTIxODJbPj5dO1xuIgorICAgICAgICArICIgICAgMTAsMDAwOiBcdTIxODJbPj5dOyAyMCwwMDA6IFx1MjE4Mlx1MjE4Mls+Pl07IDMwLDAwMDogXHUyMTgyXHUyMTgyXHUyMTgyWz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDQwLDAwMDogPSMsIyMwPTtcbiIKKyAgICAgICAgKyAiJW1vZGVybjpcbiIKKyAgICAgICAgKyAiICAgIDsgSTsgSUk7IElJSTsgSVY7IFY7IFZJOyBWSUk7IFZJSUk7IElYO1xuIgorICAgICAgICArICIgICAgMTA6IFhbPj5dOyAyMDogWFhbPj5dOyAzMDogWFhYWz4+XTsgNDA6IFhMWz4+XTsgNTA6IExbPj5dO1xuIgorICAgICAgICArICIgICAgNjA6IExYWz4+XTsgNzA6IExYWFs+Pl07IDgwOiBMWFhYWz4+XTsgOTA6IFhDWz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDEwMDogQ1s+Pl07IDIwMDogQ0NbPj5dOyAzMDA6IENDQ1s+Pl07IDQwMDogQ0RbPj5dOyA1MDA6IERbPj5dO1xuIgorICAgICAgICArICIgICAgNjAwOiBEQ1s+Pl07IDcwMDogRENDWz4+XTsgODAwOiBEQ0NDWz4+XTsgOTAwOiBDTVs+Pl07XG4iCisgICAgICAgICAgICAgICAvLyBpbiBtb2Rlcm4gUm9tYW4gbnVtZXJhbHMsIGhpZ2ggbnVtYmVycyBhcmUgZ2VuZXJhbGx5IHNob3duCisgICAgICAgICAgICAgICAvLyBieSBwbGFjaW5nIGEgYmFyIG92ZXIgdGhlIGxldHRlcnMgZm9yIHRoZSBsb3dlciBudW1iZXJzOgorICAgICAgICAgICAgICAgLy8gdGhlIGJhciBtdWx0aXBsaWVkIGEgbGV0dGVyJ3MgdmFsdWUgYnkgMSwwMDAKKyAgICAgICAgKyAiICAgIDEwMDA6IE1bPj5dOyAyMDAwOiBNTVs+Pl07IDMwMDA6IE1NTVs+Pl07IDQwMDA6IE1WXHUwMzA2Wz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDUwMDA6IFZcdTAzMDZbPj5dOyA2MDAwOiBWXHUwMzA2TVs+Pl07IDcwMDA6IFZcdTAzMDZNTVs+Pl07XG4iCisgICAgICAgICsgIiAgICA4MDAwOiBWXHUwMzA2TU1NWz4+XTsgOTAwMDogTVhcdTAzMDZbPj5dO1xuIgorICAgICAgICArICIgICAgMTAsMDAwOiBYXHUwMzA2Wz4+XTsgMjAsMDAwOiBYXHUwMzA2WFx1MDMwNls+Pl07IDMwLDAwMDogWFx1MDMwNlhcdTAzMDZYXHUwMzA2Wz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDQwLDAwMDogWFx1MDMwNkxcdTAzMDZbPj5dOyA1MCwwMDA6IExcdTAzMDZbPj5dOyA2MCwwMDA6IExcdTAzMDZYXHUwMzA2Wz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDcwLDAwMDogTFx1MDMwNlhcdTAzMDZYXHUwMzA2Wz4+XTsgODAsMDAwOiBMXHUwMzA2WFx1MDMwNlhcdTAzMDZYXHUwMzA2Wz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDkwLDAwMDogWFx1MDMwNkNcdTAzMDZbPj5dO1xuIgorICAgICAgICArICIgICAgMTAwLDAwMDogQ1x1MDMwNls+Pl07IDIwMCwwMDA6IENcdTAzMDZDXHUwMzA2Wz4+XTsgMzAwLDAwMDogQ1x1MDMwNkNcdTAzMDZbPj5dO1xuIgorICAgICAgICArICIgICAgNDAwLDAwMDogQ1x1MDMwNkRcdTAzMDZbPj5dOyA1MDAsMDAwOiBEXHUwMzA2Wz4+XTsgNjAwLDAwMDogRFx1MDMwNkNcdTAzMDZbPj5dO1xuIgorICAgICAgICArICIgICAgNzAwLDAwMDogRFx1MDMwNkNcdTAzMDZDXHUwMzA2Wz4+XTsgODAwLDAwMDogRFx1MDMwNkNcdTAzMDZDXHUwMzA2Q1x1MDMwNls+Pl07XG4iCisgICAgICAgICsgIiAgICA5MDAsMDAwOiA9IywjIzA9O1xuIjsKKworICAgIC8qKgorICAgICAqIEhlYnJldyBhbHBoYWJldGljIG51bWVyYWxzLiAgQmVmb3JlIGFkb3B0aW9uIG9mIEFyYWJpYyBudW1lcmFscywgSGVicmV3IHNwZWFrZXJzCisgICAgICogdXNlZCB0aGUgbGV0dGVyIG9mIHRoZWlyIGFscGhhYmV0IGFzIG51bWVyYWxzLiAgVGhlIGZpcnN0IG5pbmUgbGV0dGVycyBvZgorICAgICAqIHRoZSBhbHBoYWJldCByZXBlc2VudGVkIHRoZSB2YWx1ZXMgZnJvbSAxIHRvIDksIHRoZSBzZWNvbmQgbmluZSBsZXR0ZXJzIHRoZQorICAgICAqIG11bHRpcGxlcyBvZiAxMCwgYW5kIHRoZSByZW1haW5pbmcgbGV0dGVycyB0aGUgbXVsdGlwbGVzIG9mIDEwMC4gIFNpbmNlIHRoZXkKKyAgICAgKiByYW4gb3V0IG9mIGxldHRlcnMgYXQgNDAwLCB0aGUgcmVtYWluaW5nIG11bHRpcGxlcyBvZiAxMDAgd2VyZSByZXByZXNlbnRlZAorICAgICAqIHVzaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgZXhpc3RpbmcgbGV0dGVycyBmb3IgdGhlIGh1bmRyZWRzLiAgTnVtYmVycyB3ZXJlCisgICAgICogZGlzdGluZ3Vpc2hlZCBmcm9tIHdvcmRzIGluIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB3YXlzOiB0aGUgd2F5IHNob3duIGhlcmUKKyAgICAgKiB1c2VzIGEgc2luZ2xlIG1hcmsgYWZ0ZXIgYSBudW1iZXIgY29uc2lzdGluZyBvZiBvbmUgbGV0dGVyLCBhbmQgYSBkb3VibGUKKyAgICAgKiBtYXJrIGJldHdlZW4gdGhlIGxhc3QgdHdvIGxldHRlcnMgb2YgYSBudW1iZXIgY29uc2lzdGluZyBvZiB0d28gb3IgbW9yZQorICAgICAqIGxldHRlcnMuICBUd28gZG90cyBvdmVyIGEgbGV0dGVyIG11bHRpcGxpZWQgaXRzIHZhbHVlIGJ5IDEsMDAwLiAgQWxzbywgc2luY2UKKyAgICAgKiB0aGUgbGV0dGVyIGZvciAxMCBpcyB0aGUgZmlyc3QgbGV0dGVyIG9mIEdvZCdzIG5hbWUgYW5kIHRoZSBsZXR0ZXJzIGZvciA1IGFuZCA2CisgICAgICogYXJlIGxldHRlcnMgaW4gR29kJ3MgbmFtZSwgd2hpY2ggd2Fzbid0IHN1cHBvc2VkIHRvIGJlIHdyaXR0ZW4gb3Igc3Bva2VuLCAxNSBhbmQKKyAgICAgKiAxNiB3ZXJlIHVzdWFsbHkgd3JpdHRlbiBhcyA5ICsgNiBhbmQgOSArIDcgaW5zdGVhZCBvZiAxMCArIDUgYW5kIDEwICsgNi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBoZWJyZXdBbHBoYWJldGljID0KKyAgICAgICAgLy8gbGV0dGVycyBmb3IgdGhlIG9uZXMKKyAgICAgICAgIiUlb25lczpcbiIKKyAgICAgICAgKyAiICAgIChubyB6ZXJvKTsgXHUwNWQwOyBcdTA1ZDE7IFx1MDVkMjsgXHUwNWQzOyBcdTA1ZDQ7IFx1MDVkNTsgXHUwNWQ2OyBcdTA1ZDc7IFx1MDVkODtcbiIKKyAgICAgICAgLy8gbGV0dGVycyBmb3IgdGhlIHRlbnMKKyAgICAgICAgKyAiJSV0ZW5zOlxuIgorICAgICAgICArICIgICAgOyBcdTA1ZDk7IFx1MDVkYjsgXHUwNWRjOyBcdTA1ZGU7IFx1MDVlMDsgXHUwNWUxOyBcdTA1ZTI7IFx1MDVlNDsgXHUwNWU2O1xuIgorICAgICAgICAvLyBsZXR0ZXJzIGZvciB0aGUgZmlyc3QgZm91ciBodW5kcmVkcworICAgICAgICArICIlJWh1bmRyZWRzOlxuIgorICAgICAgICArICIgICAgOyBcdTA1ZTc7IFx1MDVlODsgXHUwNWU5OyBcdTA1ZWE7XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgaXMgdXNlZCB0byB3cml0ZSB0aGUgY29tYmluYXRpb24gb2YgdGhlIHRlbnMgYW5kIG9uZXMgZGlnaXRzCisgICAgICAgIC8vIHdoZW4gd2Uga25vdyB0aGF0IG5vIG90aGVyIGRpZ2l0cyBwcmVjZWRlIHRoZW06IHRoZXkgcHV0IHRoZSBudW1lcmFsIG1hcmtzCisgICAgICAgIC8vIGluIHRoZSByaWdodCBwbGFjZSBhbmQgcHJvcGVybHkgaGFuZGxlIDE1IGFuZCAxNiAoSSdtIHVzaW5nIHRoZSBtYXRoZW1hdGljYWwKKyAgICAgICAgLy8gcHJpbWUgY2hhcmFjdGVycyBmb3IgdGhlIG51bWVyYWwgbWFya3MgYmVjYXVzZSBteSBVbmljb2RlIGZvbnQgZG9lc24ndAorICAgICAgICAvLyBpbmNsdWRlIHRoZSByZWFsIEhlYnJldyBjaGFyYWN0ZXJzLCB3aGljaCBsb29rIGp1c3QgbGlrZSB0aGUgcHJpbWUgbWFya3MpCisgICAgICAgICsgIiUldGVucy1hbmQtb25lczpcbiIKKyAgICAgICAgICAgICAgIC8vIGZvciB2YWx1ZXMgbGVzcyB0aGFuIDEwLCBqdXN0IHVzZSAlJW9uZXMgYW5kIHB1dCB0aGUgbnVtZXJhbCBtYXJrCisgICAgICAgICAgICAgICAvLyBhZnRlcndhcmQKKyAgICAgICAgKyAiICAgID0lJW9uZXM9XHUyMDMyO1xuIgorICAgICAgICAgICAgICAgLy8gcHV0IHRoZSBudW1lcmFsIG1hcmsgYXQgdGhlIGVuZCBmb3IgMTAsIGJ1dCBpbiB0aGUgbWlkZGxlIGZvcgorICAgICAgICAgICAgICAgLy8gMTEgdGhyb3VnaCAxNAorICAgICAgICArICIgICAgMTA6IDwlJXRlbnM8XHUyMDMyOyA8JSV0ZW5zPFx1MjAzMz4lJW9uZXM+O1xuIgorICAgICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNlIDE1IGFuZCAxNgorICAgICAgICArICIgICAgMTU6IFx1MDVkOFx1MjAzM1x1MDVkNTsgMTY6IFx1MDVkOFx1MjAzM1x1MDVkNjtcbiIKKyAgICAgICAgICAgICAgIC8vIGdvIGJhY2sgdG8gdGhlIG5vcm1hbCBtZXRob2QgYXQgMTcKKyAgICAgICAgKyAiICAgIDE3OiA8JSV0ZW5zPFx1MjAzMz4lJW9uZXM+O1xuIgorICAgICAgICAgICAgICAgLy8gcmVwZWF0IHRoZSBydWxlcyBmb3IgMTAgYW5kIDExIHRvIGNvdmVyIHRoZSB2YWx1ZXMgZnJvbSAyMCB0byA5OQorICAgICAgICArICIgICAgMjA6IDwlJXRlbnM8XHUyMDMyOyA8JSV0ZW5zPFx1MjAzMz4lJW9uZXM+O1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGlzIHVzZWQgdG8gZm9ybWF0IG51bWJlcnMgYmVsb3cgMSwwMDAuICBJdCByZWxpZXMgb24KKyAgICAgICAgLy8gJSV0ZW5zLWFuZC1vbmVzIHRvIGZvcm1hdCB0aGUgdGVucyBhbmQgb25lcyBwbGFjZXMsIGFuZCBhZGRzIGxvZ2ljCisgICAgICAgIC8vIHRvIGhhbmRsZSB0aGUgaGlnaCBodW5kcmVkcyBhbmQgdGhlIG51bWVyYWwgbWFya3Mgd2hlbiB0aGVyZSBpcyBubworICAgICAgICAvLyB0ZW5zIGRpZ2l0LiAgTm90aWNlIGhvdyB0aGUgcnVsZXMgYXJlIHBhaXJlZDogYWxsIG9mIHRoZXNlIHBhaXJzIG9mCisgICAgICAgIC8vIHJ1bGVzIHRha2UgYWR2YW50YWdlIG9mIHRoZSByb2xsYmFjayBydWxlOiBpZiB0aGUgdmFsdWUgKGJldHdlZW4gMTAwCisgICAgICAgIC8vIGFuZCA0OTkpIGlzIGFuIGV2ZW4gbXVsdGlwbGUgb2YgMTAwLCB0aGUgcnVsZSBmb3IgMTAwIGlzIHVzZWQ7IG90aGVyd2lzZSwKKyAgICAgICAgLy8gdGhlIHJ1bGUgZm9yIDEwMSAodGhlIGZvbGxvd2luZyBydWxlKSBpcyB1c2VkLiAgVGhlIGZpcnN0IHJ1bGUgaW4gZWFjaAorICAgICAgICAvLyBwYWlyICh0aGUgb25lIGZvciB0aGUgZXZlbiBtdWx0aXBsZSkgcGxhY2VzIHRoZSBudW1lcmFsIG1hcmsgaW4gYSBkaWZmZXJlbnQKKyAgICAgICAgLy8gc3BvdCB0aGFuIHRoZSBzZWNvbmQgcnVsZSBpbiBlYWNoIHBhaXIgKHdoaWNoIGtub3dzIHRoZXJlIGFyZSBtb3JlIGRpZ2l0cworICAgICAgICAvLyBhbmQgcmVsaWVzIG9uIHRoZSBydWxlIHN1cHBseWluZyB0aGVtIHRvIGFsc28gc3VwcGx5IHRoZSBudW1lcmFsIG1hcmspLgorICAgICAgICAvLyBUaGUgY2FsbCB0byAlJW51bGwgaW4gbGluZSAxMCBpcyB0aGVyZSBzaW1wbHkgdG8gaW52b2tlIHRoZSByb2xsYmFjaworICAgICAgICAvLyBydWxlLgorICAgICAgICArICIlJWxvdy1vcmRlcjpcbiIKKyAgICAgICAgICAgICAgIC8vIHRoaXMgcnVsZSBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBvdGhlciBjaGFyYWN0ZXJzIGJlZm9yZS4KKyAgICAgICAgICAgICAgIC8vIEl0IHBsYWNlcyB0aGUgbnVtZXJhbCBtYXJrIGJlZm9yZSB0aGUgbGFzdCBkaWdpdAorICAgICAgICArICIgICAgXHUyMDMzPSUlb25lcz07XG4iCisgICAgICAgICAgICAgICAvLyB0aGUgcnVsZSBmb3IgMTAgcGxhY2VzIHRoZSBudW1lcmFsIG1hcmsgYmVmb3JlIHRoZSAxMCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgIC8vIChiZWNhdXNlIHdlIGtub3cgaXQncyB0aGUgbGFzdCBjaGFyYWN0ZXIpOyB0aGUgcnVsZSBmb3IgMTEgcmVsaWVzCisgICAgICAgICAgICAgICAvLyBvbiAlJXRlbnMtYW5kLW9uZXMgdG8gcGxhY2UgdGhlIG51bWVyYWwgbWFyaworICAgICAgICArICIgICAgMTA6IFx1MjAzMzwlJXRlbnM8OyA9JSV0ZW5zLWFuZC1vbmVzPT4lJW51bGw+O1xuIgorICAgICAgICAgICAgICAgLy8gdGhlIHJ1bGUgZm9yIDEwMCBwbGFjZXMgdGhlIG51bWVyYWwgbWFyayBiZWZvcmUgdGhlIDEwMCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgIC8vICh3ZSBrbm93IGl0J3MgdGhlIGxhc3QgY2hhcmFjdGVyKTsgdGhlIHJ1bGUgZm9yIDEwMSByZWN1cnNlcyB0bworICAgICAgICAgICAgICAgLy8gZmlsbCBpbiB0aGUgcmVtYWluaW5nIGRpZ2l0cyBhbmQgdGhlIG51bWVyYWwgbWFyaworICAgICAgICArICIgICAgMTAwOiA8JSVodW5kcmVkczxcdTIwMzI7IDwlJWh1bmRyZWRzPD4+O1xuIgorICAgICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNlIHRoZSBodW5kcmVkcyBmcm9tIDUwMCB0byA5MDAgYmVjYXVzZSB0aGV5IGNvbnNpc3Qgb2YKKyAgICAgICAgICAgICAgIC8vIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyCisgICAgICAgICsgIiAgICA1MDA6IFx1MDVlYVx1MjAzM1x1MDVlNzsgXHUwNWVhXHUwNWU3Pj47XG4iCisgICAgICAgICsgIiAgICA2MDA6IFx1MDVlYVx1MjAzM1x1MDVlODsgXHUwNWVhXHUwNWU4Pj47XG4iCisgICAgICAgICsgIiAgICA3MDA6IFx1MDVlYVx1MjAzM1x1MDVlOTsgXHUwNWVhXHUwNWU5Pj47XG4iCisgICAgICAgICsgIiAgICA4MDA6IFx1MDVlYVx1MjAzM1x1MDVlYTsgXHUwNWVhXHUwNWVhPj47XG4iCisgICAgICAgICsgIiAgICA5MDA6IFx1MDVlYVx1MDVlYVx1MjAzM1x1MDVlNzsgXHUwNWVhXHUwNWVhXHUwNWU3Pj47XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgaXMgdXNlZCB0byBmb3JtYXQgdmFsdWVzIG9mIDEsMDAwIG9yIG1vcmUuICBIZXJlLCB3ZSBkb24ndAorICAgICAgICAvLyB3b3JyeSBhYm91dCB0aGUgbnVtZXJhbCBtYXJrLCBhbmQgd2UgYWRkIHR3byBkb3RzICh0aGUgVW5pY29kZSBjb21iaW5pbmcKKyAgICAgICAgLy8gZGlhZXJlc2lzIGNoYXJhY3RlcikgdG8gZXZlciBsZXR0ZXIKKyAgICAgICAgKyAiJSVoaWdoLW9yZGVyOlxuIgorICAgICAgICAgICAgICAgLy8gcHV0IHRoZSBvbmVzIGRpZ2l0LCBmb2xsb3dlZCBieSB0aGUgZGlhZXJlc2lzCisgICAgICAgICsgIiAgICA9JSVvbmVzPVx1MDMwODtcbiIKKyAgICAgICAgICAgICAgIC8vIHRoZSB0ZW5zIGNhbiBiZSBoYW5kbGVkIHdpdGggcmVjdXJzaW9uCisgICAgICAgICsgIiAgICAxMDogPCUldGVuczxcdTAzMDhbPj5dO1xuIgorICAgICAgICAgICAgICAgLy8gc3RpbGwgaGF2ZSB0byBzcGVjaWFsLWNhc2UgMTUgYW5kIDE2CisgICAgICAgICsgIiAgICAxNTogXHUwNWQ4XHUwMzA4XHUwNWQ1XHUwMzA4OyAxNjogXHUwNWQ4XHUwMDMwNzhcdTA1ZDZcdTAzMDg7XG4iCisgICAgICAgICAgICAgICAvLyBiYWNrIHRvIHRoZSByZWd1bGFyIHJ1bGVzIGF0IDE3CisgICAgICAgICsgIiAgICAxNzogPCUldGVuczxcdTAzMDhbPj5dO1xuIgorICAgICAgICAgICAgICAgLy8gdGhlIGh1bmRyZWRzIHdpdGggdGhlIGRvdHMgYWRkZWQgKGFuZCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0CisgICAgICAgICAgICAgICAvLyBwbGFjaW5nIHRoZSBudW1lcmFsIG1hcmspCisgICAgICAgICsgIiAgICAxMDA6IDwlJWh1bmRyZWRzPFx1MDMwOFs+Pl07XG4iCisgICAgICAgICsgIiAgICA1MDA6IFx1MDVlYVx1MDMwOFx1MDVlN1x1MDMwOFs+Pl07XG4iCisgICAgICAgICsgIiAgICA2MDA6IFx1MDVlYVx1MDMwOFx1MDVlOFx1MDMwOFs+Pl07XG4iCisgICAgICAgICsgIiAgICA3MDA6IFx1MDVlYVx1MDMwOFx1MDVlOVx1MDMwOFs+Pl07XG4iCisgICAgICAgICsgIiAgICA4MDA6IFx1MDVlYVx1MDMwOFx1MDVlYVx1MDMwOFs+Pl07XG4iCisgICAgICAgICsgIiAgICA5MDA6IFx1MDVlYVx1MDMwOFx1MDVlYVx1MDMwOFx1MDVlN1x1MDMwOFs+Pl07XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgZG9lc24ndCBkbyBhbnl0aGluZzsgaXQncyB1c2VkIGJ5IHNvbWUgb3RoZXIgcnVsZXMgdG8KKyAgICAgICAgLy8gaW52b2tlIHRoZSByb2xsYmFjayBydWxlCisgICAgICAgICsgIiAlJW51bGw6XG4iCisgICAgICAgICsgIiAgICA7XG4iCisgICAgICAgIC8vIHRoZSBtYWluIHJ1bGUgc2V0LgorICAgICAgICArICIlbWFpbjpcbiIKKyAgICAgICAgICAgICAgIC8vIGZvciB2YWx1ZXMgYmVsb3cgMTAsIGp1c3Qgb3V0cHV0IHRoZSBsZXR0ZXIgYW5kIHRoZSBudW1lcmFsIG1hcmsKKyAgICAgICAgKyAiICAgID0lJW9uZXM9XHUyMDMyO1xuIgorICAgICAgICAgICAgICAgLy8gZm9yIHZhbHVlcyBmcm9tIDEwIHRvIDk5LCB1c2UgJSV0ZW5zLWFuZC1vbmVzIHRvIGRvIHRoZSBmb3JtYXR0aW5nCisgICAgICAgICsgIiAgICAxMDogPSUldGVucy1hbmQtb25lcz07XG4iCisgICAgICAgICAgICAgICAvLyBmb3IgdmFsdWVzIGZyb20gMTAwIHRvIDk5OSwgdXNlICUlbG93LW9yZGVyIHRvIGRvIHRoZSBmb3JtYXR0aW5nCisgICAgICAgICsgIiAgICAxMDA6ID0lJWxvdy1vcmRlcj07XG4iCisgICAgICAgICAgICAgICAvLyBmb3IgdmFsdWVzIG9mIDEsMDAwIGFuZCBvdmVyLCB1c2UgJSVoaWdoLW9yZGVyIHRvIGRvIHRoZSBmb3JtYXR0aW5nCisgICAgICAgICsgIiAgICAxMDAwOiA8JSVoaWdoLW9yZGVyPFs+JSVsb3ctb3JkZXI+XTtcbiI7CisKKyAgICAvKioKKyAgICAgKiBHcmVlayBhbHBoYWJldGljIG51bWVyYWxzLiAgVGhlIEdyZWVrcywgYmVmb3JlIGFkb3B0aW5nIHRoZSBBcmFiaWMgbnVtZXJhbHMsCisgICAgICogYWxzbyB1c2VkIHRoZSBsZXR0ZXJzIG9mIHRoZWlyIGFscGhhYmV0IGFzIG51bWVyYWxzLiAgVGhlcmUgYXJlIHRocmVlIG5vdy0KKyAgICAgKiBvYnNvbGV0ZSBHcmVlayBsZXR0ZXJzIHRoYXQgYXJlIHVzZWQgYXMgbnVtZXJhbHM7IG1hbnkgZm9udHMgZG9uJ3QgaGF2ZSB0aGVtLgorICAgICAqIExhcmdlIG51bWJlcnMgd2VyZSBoYW5kbGVkIG1hbnkgZGlmZmVyZW50IHdheXM7IHRoZSB3YXkgc2hvd24gaGVyZSBkaXZpZGVzCisgICAgICogbGFyZ2UgbnVtYmVycyBpbnRvIGdyb3VwcyBvZiBmb3VyIGxldHRlcnMgKGZhY3RvcnMgb2YgMTAsMDAwKSwgYW5kIHNlcGFyYXRlcworICAgICAqIHRoZSBncm91cHMgd2l0aCB0aGUgY2FwaXRhbCBsZXR0ZXIgbXUgKGZvciBteXJpYWQpLiAgQ2FwaXRhbCBsZXR0ZXJzIGFyZSB1c2VkCisgICAgICogZm9yIHZhbHVlcyBiZWxvdyAxMCwwMDA7IHNtYWxsIGxldHRlcnMgZm9yIGhpZ2hlciBudW1iZXJzICh0byBtYWtlIHRoZSBjYXBpdGFsCisgICAgICogbXUgc3RhbmQgb3V0KS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBncmVla0FscGhhYmV0aWMgPQorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGlzIHVzZWQgZm9yIGZvcm1hdHRpbmcgbnVtYmVycyBiZWxvdyAxMCwwMDAuICBJdCB1c2VzCisgICAgICAgIC8vIGNhcGl0YWwgbGV0dGVycy4KKyAgICAgICAgIiUlbG93LW9yZGVyOlxuIgorICAgICAgICArICIgICAgKG5vIHplcm8pOyBcdTAzOTE7IFx1MDM5MjsgXHUwMzkzOyBcdTAzOTQ7IFx1MDM5NTsgXHUwM2RjOyBcdTAzOTY7IFx1MDM5NzsgXHUwMzk4O1xuIgorICAgICAgICArICIgICAgMTA6IFx1MDM5OVs+Pl07IDIwOiBcdTAzOWFbPj5dOyAzMDogXHUwMzliWz4+XTsgNDA6IFx1MDM5Y1s+Pl07IDUwOiBcdTAzOWRbPj5dO1xuIgorICAgICAgICArICIgICAgNjA6IFx1MDM5ZVs+Pl07IDcwOiBcdTAzOWZbPj5dOyA4MDogXHUwM2EwWz4+XTsgOTA6IFx1MDNkZVs+Pl07XG4iCisgICAgICAgICsgIiAgICAxMDA6IFx1MDNhMVs+Pl07IDIwMDogXHUwM2EzWz4+XTsgMzAwOiBcdTAzYTRbPj5dOyA0MDA6IFx1MDNhNVs+Pl07XG4iCisgICAgICAgICsgIiAgICA1MDA6IFx1MDNhNls+Pl07IDYwMDogXHUwM2E3Wz4+XTsgNzAwOiBcdTAzYThbPj5dOyA4MDA6IFx1MDNhOVs+Pl07XG4iCisgICAgICAgICsgIiAgICA5MDA6IFx1MDNlMFs+Pl07XG4iCisgICAgICAgICAgICAgICAvLyB0aGUgdGhvdXNhbmRzIGFyZSByZXByZXNlbnRlZCBieSB0aGUgc2FtZSBudW1iZXJzIGFzIHRoZSBvbmVzLCBidXQKKyAgICAgICAgICAgICAgIC8vIHdpdGggYSBjb21tYS1saWtlIG1hcmsgYWRkZWQgdG8gdGhlaXIgbGVmdCBzaG91bGRlcgorICAgICAgICArICIgICAgMTAwMDogXHUwMzkxXHUwMzEzWz4+XTsgMjAwMDogXHUwMzkyXHUwMzEzWz4+XTsgMzAwMDogXHUwMzkzXHUwMzEzWz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDQwMDA6IFx1MDM5NFx1MDMxM1s+Pl07IDUwMDA6IFx1MDM5NVx1MDMxM1s+Pl07IDYwMDA6IFx1MDNkY1x1MDMxM1s+Pl07XG4iCisgICAgICAgICsgIiAgICA3MDAwOiBcdTAzOTZcdTAzMTNbPj5dOyA4MDAwOiBcdTAzOTdcdTAzMTNbPj5dOyA5MDAwOiBcdTAzOThcdTAzMTNbPj5dO1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IGlzIHRoZSBzYW1lIGFzIGFib3ZlLCBidXQgdXNlcyBsb3dlcmNhc2UgbGV0dGVycy4gIEl0IGlzIHVzZWQKKyAgICAgICAgLy8gZm9yIGZvcm1hdHRpbmcgdGhlIGdyb3VwcyBpbiBudW1iZXJzIGFib3ZlIDEwLDAwMC4KKyAgICAgICAgKyAiJSVoaWdoLW9yZGVyOlxuIgorICAgICAgICArICIgICAgKG5vIHplcm8pOyBcdTAzYjE7IFx1MDNiMjsgXHUwM2IzOyBcdTAzYjQ7IFx1MDNiNTsgXHUwM2RjOyBcdTAzYjY7IFx1MDNiNzsgXHUwM2I4O1xuIgorICAgICAgICArICIgICAgMTA6IFx1MDNiOVs+Pl07IDIwOiBcdTAzYmFbPj5dOyAzMDogXHUwM2JiWz4+XTsgNDA6IFx1MDNiY1s+Pl07IDUwOiBcdTAzYmRbPj5dO1xuIgorICAgICAgICArICIgICAgNjA6IFx1MDNiZVs+Pl07IDcwOiBcdTAzYmZbPj5dOyA4MDogXHUwM2MwWz4+XTsgOTA6IFx1MDNkZVs+Pl07XG4iCisgICAgICAgICsgIiAgICAxMDA6IFx1MDNjMVs+Pl07IDIwMDogXHUwM2MzWz4+XTsgMzAwOiBcdTAzYzRbPj5dOyA0MDA6IFx1MDNjNVs+Pl07XG4iCisgICAgICAgICsgIiAgICA1MDA6IFx1MDNjNls+Pl07IDYwMDogXHUwM2M3Wz4+XTsgNzAwOiBcdTAzYzhbPj5dOyA4MDA6IFx1MDNjOVs+Pl07XG4iCisgICAgICAgICsgIiAgICA5MDA6IFx1MDNjMFs+Pl07XG4iCisgICAgICAgICsgIiAgICAxMDAwOiBcdTAzYjFcdTAzMTNbPj5dOyAyMDAwOiBcdTAzYjJcdTAzMTNbPj5dOyAzMDAwOiBcdTAzYjNcdTAzMTNbPj5dO1xuIgorICAgICAgICArICIgICAgNDAwMDogXHUwM2I0XHUwMzEzWz4+XTsgNTAwMDogXHUwM2I1XHUwMzEzWz4+XTsgNjAwMDogXHUwM2RjXHUwMzEzWz4+XTtcbiIKKyAgICAgICAgKyAiICAgIDcwMDA6IFx1MDNiNlx1MDMxM1s+Pl07IDgwMDA6IFx1MDNiN1x1MDMxM1s+Pl07IDkwMDA6IFx1MDNiOFx1MDMxM1s+Pl07XG4iCisgICAgICAgIC8vIHRoZSBtYWluIHJ1bGUgc2V0CisgICAgICAgICsgIiVtYWluOlxuIgorICAgICAgICAgICAgICAgLy8gZm9yIHZhbHVlcyBiZWxvdyAxMCwwMDAsIGp1c3QgdXNlICUlbG93LW9yZGVyCisgICAgICAgICsgIiAgICA9JSVsb3ctb3JkZXI9O1xuIgorICAgICAgICAgICAgICAgLy8gZm9yIHZhbHVlcyBhYm92ZSAxMCwwMDAsIHNwbGl0IGludG8gdHdvIGdyb3VwcyBvZiBmb3VyIGRpZ2l0cworICAgICAgICAgICAgICAgLy8gYW5kIGZvcm1hdCBlYWNoIHdpdGggJSVoaWdoLW9yZGVyIChwdXR0aW5nIGFuIE0gaW4gYmV0d2VuKQorICAgICAgICArICIgICAgMTAsMDAwOiA8JSVoaWdoLW9yZGVyPFx1MDM5Yz4lJWhpZ2gtb3JkZXI+O1xuIgorICAgICAgICAgICAgICAgLy8gZm9yIHZhbHVlcyBhYm92ZSAxMDAsMDAwLDAwMCwgYWRkIGFub3RoZXIgZ3JvdXAgb250byB0aGUgZnJvbnQKKyAgICAgICAgICAgICAgIC8vIGFuZCBhbm90aGVyIE0KKyAgICAgICAgKyAiICAgIDEwMCwwMDAsMDAwOiA8JSVoaWdoLW9yZGVyPFx1MDM5Yz4+XG4iOworCisgICAgLyoqCisgICAgICogQSBsaXN0IG9mIGFsbCB0aGUgc2FtcGxlIHJ1bGUgc2V0cywgdXNlZCBieSB0aGUgZGVtbyBwcm9ncmFtLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gc2FtcGxlUnVsZVNldHMgPQorICAgICAgICB7IHVzRW5nbGlzaCwKKyAgICAgICAgICB1a0VuZ2xpc2gsCisgICAgICAgICAgc3BhbmlzaCwKKyAgICAgICAgICBmcmVuY2gsCisgICAgICAgICAgc3dpc3NGcmVuY2gsCisgICAgICAgICAgZ2VybWFuLAorICAgICAgICAgIGl0YWxpYW4sCisgICAgICAgICAgc3dlZGlzaCwKKyAgICAgICAgICBkdXRjaCwKKyAgICAgICAgICBqYXBhbmVzZSwKKyAgICAgICAgICBncmVlaywKKyAgICAgICAgICBydXNzaWFuLAorICAgICAgICAgIGhlYnJldywKKyAgICAgICAgICBvcmRpbmFsLAorICAgICAgICAgIG1lc3NhZ2UxLAorICAgICAgICAgIGRvbGxhcnNBbmRDZW50cywKKyAgICAgICAgICBkZWNpbWFsQXNGcmFjdGlvbiwKKyAgICAgICAgICBjbG9zZXN0RnJhY3Rpb24sCisgICAgICAgICAgc3RvY2ssCisgICAgICAgICAgYWJiRW5nbGlzaCwKKyAgICAgICAgICB1bml0cywKKyAgICAgICAgICBtZXNzYWdlMiwKKyAgICAgICAgICBkb3plbnMsCisgICAgICAgICAgZHVyYXRpb25JblNlY29uZHMsCisgICAgICAgICAgZHVyYXRpb25JbkhvdXJzLAorICAgICAgICAgIHBvdW5kc1NoaWxsaW5nc0FuZFBlbmNlLAorICAgICAgICAgIGFyYWJpY051bWVyYWxzLAorICAgICAgICAgIHdvcmRzRm9yRGlnaXRzLAorICAgICAgICAgIGNoaW5lc2VQbGFjZVZhbHVlLAorICAgICAgICAgIHJvbWFuTnVtZXJhbHMsCisgICAgICAgICAgaGVicmV3QWxwaGFiZXRpYywKKyAgICAgICAgICBncmVla0FscGhhYmV0aWMgfTsKKworICAgIC8qKgorICAgICAqIFRoZSBkaXNwbGF5YWJsZSBuYW1lcyBmb3IgYWxsIHRoZSBzYW1wbGUgcnVsZSBzZXRzLCBpbiB0aGUgc2FtZSBvcmRlciBhcworICAgICAqIHRoZSBwcmVjZWRpbmcgYXJyYXkuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzYW1wbGVSdWxlU2V0TmFtZXMgPQorICAgICAgICB7ICJFbmdsaXNoIChVUykiLAorICAgICAgICAgICJFbmdsaXNoIChVSykiLAorICAgICAgICAgICJTcGFuaXNoIiwKKyAgICAgICAgICAiRnJlbmNoIChGcmFuY2UpIiwKKyAgICAgICAgICAiRnJlbmNoIChTd2l0emVybGFuZCkiLAorICAgICAgICAgICJHZXJtYW4iLAorICAgICAgICAgICJJdGFsaWFuIiwKKyAgICAgICAgICAiU3dlZGlzaCIsCisgICAgICAgICAgIkR1dGNoIiwKKyAgICAgICAgICAiSmFwYW5lc2UiLAorICAgICAgICAgICJHcmVlayIsCisgICAgICAgICAgIlJ1c3NpYW4iLAorICAgICAgICAgICJIZWJyZXciLAorICAgICAgICAgICJFbmdsaXNoIG9yZGluYWwgYWJicmV2aWF0aW9ucyIsCisgICAgICAgICAgIlNpbXBsZSBtZXNzYWdlIGZvcm1hdHRpbmciLAorICAgICAgICAgICJEb2xsYXJzIGFuZCBjZW50cyIsCisgICAgICAgICAgIkRlY2ltYWxzIGFzIGZyYWN0aW9ucyIsCisgICAgICAgICAgIkNsb3Nlc3QgZnJhY3Rpb24iLAorICAgICAgICAgICJTdG9jayBwcmljZXMiLAorICAgICAgICAgICJBYmJyZXZpYXRlZCBVUyBFbmdsaXNoIiwKKyAgICAgICAgICAiQ2hhbmdpbmcgZGltZW5zaW9ucyIsCisgICAgICAgICAgIkNvbXBsZXggbWVzc2FnZSBmb3JtYXR0aW5nIiwKKyAgICAgICAgICAiRG96ZW5zIiwKKyAgICAgICAgICAiRHVyYXRpb24gKHZhbHVlIGluIHNlY29uZHMpIiwKKyAgICAgICAgICAiRHVyYXRpb24gKHZhbHVlIGluIGhvdXJzKSIsCisgICAgICAgICAgIlBvdW5kcywgc2hpbGxpbmdzLCBhbmQgcGVuY2UiLAorICAgICAgICAgICJBcmFiaWMgbnVtZXJhbHMiLAorICAgICAgICAgICJXb3JkcyBmb3IgZGlnaXRzIiwKKyAgICAgICAgICAiQ2hpbmVzZSBwbGFjZS12YWx1ZSBub3RhdGlvbiIsCisgICAgICAgICAgIlJvbWFuIG51bWVyYWxzIiwKKyAgICAgICAgICAiSGVicmV3IGFobHBoYWJldGljIG51bWVyYWxzIiwKKyAgICAgICAgICAiR3JlZWsgYWxwaGFiZXRpYyBudW1lcmFscyIgfTsKKworICAgIC8qKgorICAgICAqIFRoZSBiYXNlIGxvY2FsZSBmb3IgZWFjaCBvZiB0aGUgc2FtcGxlIHJ1bGUgc2V0cy4gIFRoZSBsb2NhbGUgaXMgdXNlZCB0bworICAgICAqIGRldGVybWluZSBEZWNpbWFsRm9ybWF0IGJlaGF2aW9yLCBsZW5pZW50LXBhcnNlIGJlaGF2aW9yLCBhbmQgdGV4dC1kaXNwbGF5CisgICAgICogc2VsZWN0aW9uICh3ZSBoYXZlIGEgaGFjayBpbiBoZXJlIHRvIGFsbG93IGRpc3BsYXkgb2Ygbm9uLUxhdGluIHNjcmlwdHMpLgorICAgICAqIE51bGwgbWVhbnMgdGhlIGxvY2FsZSBzZXR0aW5nIGlzIGlycmVsZXZhbnQgYW5kIHRoZSBkZWZhdWx0IGNhbiBiZSB1c2VkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgTG9jYWxlW10gc2FtcGxlUnVsZVNldExvY2FsZXMgPQorICAgICAgICB7IExvY2FsZS5VUywKKyAgICAgICAgICBMb2NhbGUuVUssCisgICAgICAgICAgbmV3IExvY2FsZSgiZXMiLCAiIiwgIiIpLAorICAgICAgICAgIExvY2FsZS5GUkFOQ0UsCisgICAgICAgICAgbmV3IExvY2FsZSgiZnIiLCAiQ0giLCAiIiksCisgICAgICAgICAgTG9jYWxlLkdFUk1BTiwKKyAgICAgICAgICBMb2NhbGUuSVRBTElBTiwKKyAgICAgICAgICBuZXcgTG9jYWxlKCJzdiIsICIiLCAiIiksCisgICAgICAgICAgbmV3IExvY2FsZSgibmwiLCAiIiwgIiIpLAorICAgICAgICAgIExvY2FsZS5KQVBBTkVTRSwKKyAgICAgICAgICBuZXcgTG9jYWxlKCJlbCIsICIiLCAiIiksCisgICAgICAgICAgbmV3IExvY2FsZSgicnUiLCAiIiwgIiIpLAorICAgICAgICAgIG5ldyBMb2NhbGUoIml3IiwgIiIsICIiKSwKKyAgICAgICAgICBMb2NhbGUuRU5HTElTSCwKKyAgICAgICAgICBMb2NhbGUuRU5HTElTSCwKKyAgICAgICAgICBMb2NhbGUuVVMsCisgICAgICAgICAgTG9jYWxlLkVOR0xJU0gsCisgICAgICAgICAgbnVsbCwKKyAgICAgICAgICBudWxsLAorICAgICAgICAgIExvY2FsZS5FTkdMSVNILAorICAgICAgICAgIG51bGwsCisgICAgICAgICAgTG9jYWxlLkVOR0xJU0gsCisgICAgICAgICAgTG9jYWxlLkVOR0xJU0gsCisgICAgICAgICAgbnVsbCwKKyAgICAgICAgICBudWxsLAorICAgICAgICAgIExvY2FsZS5VSywKKyAgICAgICAgICBudWxsLAorICAgICAgICAgIExvY2FsZS5FTkdMSVNILAorICAgICAgICAgIG5ldyBMb2NhbGUoInpoIiwgIiIsICIiKSwKKyAgICAgICAgICBudWxsLAorICAgICAgICAgIG5ldyBMb2NhbGUoIml3IiwgIiIsICIiKSwKKyAgICAgICAgICBuZXcgTG9jYWxlKCJlbCIsICIiLCAiIiksCisgICAgICAgICAgbnVsbCB9OworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gc2FtcGxlUnVsZVNldENvbW1lbnRhcnkgPSB7CisgICAgICAgICAgICAiVGhpcyBkZW1vbnN0cmF0aW9uIHZlcnNpb24gb2YgdGhlICIKKyAgICAgICAgICAgICsgIlUuUy4gRW5nbGlzaCBzcGVsbG91dCBydWxlcyBoYXMgZm91ciB2YXJpYW50czogMSkgJXNpbXBsaWZpZWQgaXMgYSAiCisgICAgICAgICAgICArICJzZXQgb2YgcnVsZXMgc2hvd2luZyB0aGUgc2ltcGxlIG1ldGhvZCBvZiBzcGVsbGluZyBvdXQgbnVtYmVycyBpbiAiCisgICAgICAgICAgICArICJFbmdsaXNoOiAyODkgaXMgZm9ybWF0dGVkIGFzIFwidHdvIGh1bmRyZWQgZWlnaHR5LW5pbmVcIi4gIDIpICVhbHQtdGVlbnMgIgorICAgICAgICAgICAgKyAiaXMgdGhlIHNhbWUgYXMgJXNpbXBsaWZpZWQsIGV4Y2VwdCB0aGF0IHZhbHVlcyBiZXR3ZWVuIDEsMDAwIGFuZCA5LDk5OSAiCisgICAgICAgICAgICArICJ3aG9zZSBodW5kcmVkcyBwbGFjZSBpc24ndCB6ZXJvIGFyZSBmb3JtYXR0ZWQgaW4gaHVuZHJlZHMuICBGb3IgZXhhbXBsZSwgIgorICAgICAgICAgICAgKyAiMSw5ODMgaXMgZm9ybWF0dGVkIGFzIFwibmluZXRlZW4gaHVuZHJlZCBlaWdodHktdGhyZWUsXCIgYW5kIDIsMTgzIGlzICIKKyAgICAgICAgICAgICsgImZvcm1hdHRlZCBhcyBcInR3ZW50eS1vbmUgaHVuZHJlZCBlaWdodHktdGhyZWUsXCIgYnV0IDIsMDgzIGlzIHN0aWxsICIKKyAgICAgICAgICAgICsgImZvcm1hdHRlZCBhcyBcInR3byB0aG91c2FuZCBlaWdodHktdGhyZWUuXCIgIDMpICVvcmRpbmFsIGZvcm1hdHMgdGhlICIKKyAgICAgICAgICAgICsgInZhbHVlcyBhcyBvcmRpbmFsIG51bWJlcnMgaW4gRW5nbGlzaCAoZS5nLiwgMjg5IGlzIFwidHdvIGh1bmRyZWQgZWlnaHR5LSIKKyAgICAgICAgICAgICsgIm5pbnRoXCIpLiAgNCkgJWRlZmF1bHQgdXNlcyBhIG1vcmUgY29tcGxpY2F0ZWQgYWxnb3JpdGhtIHRvIGZvcm1hdCAiCisgICAgICAgICAgICArICJudW1iZXJzIGluIGEgbW9yZSBuYXR1cmFsIHdheTogMjg5IGlzIGZvcm1hdHRlZCBhcyBcInR3byBodW5kcmVkIEFORCAiCisgICAgICAgICAgICArICJlaWdodHktbmluZVwiIGFuZCBjb21tYXMgYXJlIGluc2VydGVkIGJldHdlZW4gdGhlIHRob3VzYW5kcyBncm91cHMgZm9yICIKKyAgICAgICAgICAgICsgInZhbHVlcyBhYm92ZSAxMDAsMDAwLiIsCisKKyAgICAgICAgICAgICJVLksuIEVuZ2xpc2ggaGFzIG9uZSBzaWduaWZpY2FudCAiCisgICAgICAgICAgICArICJkaWZmZXJlbmNlIGZyb20gVS5TLiBFbmdsaXNoOiB0aGUgbmFtZXMgZm9yIHZhbHVlcyBvZiAxLDAwMCwwMDAsMDAwICIKKyAgICAgICAgICAgICsgImFuZCBoaWdoZXIuICBJbiBBbWVyaWNhbiBFbmdsaXNoLCBlYWNoIHN1Y2Nlc3NpdmUgXCItaWxsaW9uXCIgaXMgMSwwMDAgIgorICAgICAgICAgICAgKyAidGltZXMgZ3JlYXRlciB0aGFuIHRoZSBwcmVjZWRpbmcgb25lOiAxLDAwMCwwMDAsMDAwIGlzIFwib25lIGJpbGxpb25cIiAiCisgICAgICAgICAgICArICJhbmQgMSwwMDAsMDAwLDAwMCwwMDAgaXMgXCJvbmUgdHJpbGxpb24uXCIgIEluIEJyaXRpc2ggRW5nbGlzaCwgZWFjaCAiCisgICAgICAgICAgICArICJzdWNjZXNzaXZlIFwiLWlsbGlvblwiIGlzIG9uZSBtaWxsaW9uIHRpbWVzIGdyZWF0ZXIgdGhhbiB0aGUgb25lIGJlZm9yZTogIgorICAgICAgICAgICAgKyAiXCJvbmUgYmlsbGlvblwiIGlzIDEsMDAwLDAwMCwwMDAsMDAwIChvciB3aGF0IEFtZXJpY2FucyB3b3VsZCBjYWxsIGEgIgorICAgICAgICAgICAgKyAiXCJ0cmlsbGlvblwiKSwgYW5kIFwib25lIHRyaWxsaW9uXCIgaXMgMSwwMDAsMDAwLDAwMCwwMDAsMDAwLDAwMC4gICIKKyAgICAgICAgICAgICsgIjEsMDAwLDAwMCwwMDAgaW4gQnJpdGlzaCBFbmdsaXNoIGlzIFwib25lIHRob3VzYW5kIG1pbGxpb24uXCIgIChUaGlzICIKKyAgICAgICAgICAgICsgInZhbHVlIGlzIHNvbWV0aW1lcyBjYWxsZWQgYSBcIm1pbGxpYXJkLFwiIGJ1dCB0aGlzIHdvcmQgc2VlbXMgdG8gaGF2ZSAiCisgICAgICAgICAgICArICJmYWxsZW4gaW50byBkaXN1c2UuKSIsCisKKyAgICAgICAgICAgICJUaGUgU3BhbmlzaCBydWxlcyBhcmUgcXVpdGUgc2ltaWxhciB0byAiCisgICAgICAgICAgICArICJ0aGUgRW5nbGlzaCBydWxlcywgYnV0IHRoZXJlIGFyZSBzb21lIGltcG9ydGFudCBkaWZmZXJlbmNlczogIgorICAgICAgICAgICAgKyAiRmlyc3QsIHdlIGhhdmUgdG8gcHJvdmlkZSBzZXBhcmF0ZSBydWxlcyBmb3IgbW9zdCBvZiB0aGUgdHdlbnRpZXMgIgorICAgICAgICAgICAgKyAiYmVjYXVzZSB0aGUgb25lcyBkaWdpdCBmcmVxdWVudGx5IHBpY2tzIHVwIGFuIGFjY2VudCBtYXJrIHRoYXQgaXQgIgorICAgICAgICAgICAgKyAiZG9lc24ndCBoYXZlIHdoZW4gc3RhbmRpbmcgYWxvbmUuICBTZWNvbmQsIGVhY2ggbXVsdGlwbGUgb2YgMTAwIGhhcyAiCisgICAgICAgICAgICArICJ0byBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBtdWx0aXBsaWVyIG9uIDEwMCB2ZXJ5IG9mdGVuICIKKyAgICAgICAgICAgICsgImNoYW5nZXMgZm9ybSBpbiB0aGUgY29udHJhY3Rpb246IDUwMCBpcyBcInF1aW5pZW50b3MsXCIgbm90ICIKKyAgICAgICAgICAgICsgIlwiY2luY29jaWVudG9zLlwiICBJbiBhZGRpdGlvbiwgdGhlIHdvcmQgZm9yIDEwMCBpcyBcImNpZW5cIiB3aGVuICIKKyAgICAgICAgICAgICsgInN0YW5kaW5nIGFsb25lLCBidXQgY2hhbmdlcyB0byBcImNpZW50b1wiIHdoZW4gZm9sbG93ZWQgYnkgbW9yZSBkaWdpdHMuICAiCisgICAgICAgICAgICArICJUaGVyZSBhbHNvIHNvbWUgb3RoZXIgZGlmZmVyZW5jZXMuIiwKKworICAgICAgICAgICAgIkZyZW5jaCBhZGRzIHNvbWUgaW50ZXJlc3RpbmcgcXVpcmtzIG9mIGl0cyAiCisgICAgICAgICAgICArICJvd246IDEpIFRoZSB3b3JkIFwiZXRcIiBpcyBpbnRlcnBvc2VkIGJldHdlZW4gdGhlIHRlbnMgYW5kIG9uZXMgZGlnaXRzLCAiCisgICAgICAgICAgICArICJidXQgb25seSBpZiB0aGUgb25lcyBkaWdpdCBpZiAxOiAyMCBpcyBcInZpbmd0LFwiIGFuZCAyIGlzIFwidmluZ3QtZGV1eCxcIiAiCisgICAgICAgICAgICArICJidXQgMjEgaXMgXCJ2aW5ndC1ldC11bi5cIiAgMikgIFRoZXJlIGFyZSBubyB3b3JkcyBmb3IgNzAsIDgwLCBvciA5MC4gICIKKyAgICAgICAgICAgICsgIlwicXVhdHJlLXZpbmd0c1wiIChcImZvdXIgdHdlbnRpZXNcIikgaXMgdXNlZCBmb3IgODAsIGFuZCB2YWx1ZXMgcHJvY2VlZCAiCisgICAgICAgICAgICArICJieSBzY29yZSBmcm9tIDYwIHRvIDk5IChlLmcuLCA3MyBpcyBcInNvaXhhbnRlLXRyZWl6ZVwiIFtcInNpeHR5LXRoaXJ0ZWVuXCJdKS4gICIKKyAgICAgICAgICAgICsgIk51bWJlcnMgZnJvbSAxLDEwMCB0byAxLDE5OSBhcmUgcmVuZGVyZWQgYXMgaHVuZHJlZHMgcmF0aGVyIHRoYW4gIgorICAgICAgICAgICAgKyAidGhvdXNhbmRzOiAxLDEwMCBpcyBcIm9uemUgY2VudHNcIiAoXCJlbGV2ZW4gaHVuZHJlZFwiKSwgcmF0aGVyIHRoYW4gIgorICAgICAgICAgICAgKyAiXCJtaWxsZSBjZW50XCIgKFwib25lIHRob3VzYW5kIG9uZSBodW5kcmVkXCIpIiwKKworICAgICAgICAgICAgIlN3aXNzIEZyZW5jaCBkaWZmZXJzIGZyb20gRnJlbmNoIEZyZW5jaCAiCisgICAgICAgICAgICArICJpbiB0aGF0IGl0IGRvZXMgaGF2ZSB3b3JkcyBmb3IgNzAsIDgwLCBhbmQgOTAuICBUaGlzIHJ1bGUgc2V0IHNob3dzIHRoZW0sICIKKyAgICAgICAgICAgICsgImFuZCBpcyBzaW1wbGVyIGFzIGEgcmVzdWx0LiIsCisKKyAgICAgICAgICAgICJHZXJtYW4gYWxzbyBhZGRzIHNvbWUgaW50ZXJlc3RpbmcgIgorICAgICAgICAgICAgKyAiY2hhcmFjdGVyaXN0aWNzLiAgRm9yIHZhbHVlcyBiZWxvdyAxLDAwMCwwMDAsIG51bWJlcnMgYXJlIGN1c3RvbWFyaWx5ICIKKyAgICAgICAgICAgICsgIndyaXR0ZW4gb3V0IGFzIGEgc2luZ2xlIHdvcmQuICBBbmQgdGhlIG9uZXMgZGlnaXQgUFJFQ0VERVMgdGhlIHRlbnMgIgorICAgICAgICAgICAgKyAiZGlnaXQgKGUuZy4sIDIzIGlzIFwiZHJlaXVuZHp3YW56aWcsXCIgbm90IFwiendhbnppZ3VuZGRyZWlcIikuIiwKKworICAgICAgICAgICAgIkxpa2UgR2VybWFuLCBtb3N0IEl0YWxpYW4gbnVtYmVycyBhcmUgIgorICAgICAgICAgICAgKyAid3JpdHRlbiBhcyBzaW5nbGUgd29yZHMuICBXaGF0IG1ha2VzIHRoZXNlIHJ1bGVzIGNvbXBsaWNhdGVkIGlzIHRoZSBydWxlICIKKyAgICAgICAgICAgICsgInRoYXQgc2F5cyB0aGF0IHdoZW4gYSB3b3JkIGVuZGluZyBpbiBhIHZvd2VsIGFuZCBhIHdvcmQgYmVnaW5uaW5nIHdpdGggIgorICAgICAgICAgICAgKyAiYSB2b3dlbCBhcmUgY29tYmluZWQgaW50byBhIGNvbXBvdW5kLCB0aGUgdm93ZWwgaXMgZHJvcHBlZCBmcm9tIHRoZSAiCisgICAgICAgICAgICArICJlbmQgb2YgdGhlIGZpcnN0IHdvcmQ6IDE4MCBpcyBcImNlbnRvdHRhbnRhLFwiIG5vdCBcImNlbnRvb3R0YW50YS5cIiAgIgorICAgICAgICAgICAgKyAiVGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBydWxlIHNldCBpcyB0byBwcm9kdWNlIHRoaXMgYmVoYXZpb3IuIiwKKworICAgICAgICAgICAgIlNwZWxsb3V0IHJ1bGVzIGZvciBTd2VkaXNoLiIsCisKKyAgICAgICAgICAgICJTcGVsbG91dCBydWxlcyBmb3IgRHV0Y2guICBOb3RpY2UgdGhhdCBpbiBEdXRjaCwgYXMgaW4gR2VybWFuLCIKKyAgICAgICAgICAgICsgInRoZSBvbmVzIGRpZ2l0IHByZWNlZGVzIHRoZSB0ZW5zIGRpZ2l0LiIsCisKKyAgICAgICAgICAgICJJbiBKYXBhbmVzZSwgdGhlcmUgcmVhbGx5IGlzbid0IGFueSAiCisgICAgICAgICAgICArICJkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgbnVtYmVyIHdyaXR0ZW4gb3V0IGluIGRpZ2l0cyBhbmQgYSBudW1iZXIgIgorICAgICAgICAgICAgKyAid3JpdHRlbiBvdXQgaW4gd29yZHM6IHRoZSBpZGVvZ3JhcGhpYyBjaGFyYWN0ZXJzIGFyZSBib3RoIGRpZ2l0cyAiCisgICAgICAgICAgICArICJhbmQgd29yZHMuICBUaGlzIHJ1bGUgc2V0IHByb3ZpZGVzIHR3byB2YXJpYW50czogICV0cmFkaXRpb25hbCAiCisgICAgICAgICAgICArICJ1c2VzIHRoZSB0cmFkaXRpb25hbCBDSksgbnVtZXJhbHMgKHdoaWNoIGFyZSBhbHNvIHVzZWQgaW4gQ2hpbmEgIgorICAgICAgICAgICAgKyAiYW5kIEtvcmVhKS4gICVmaW5hbmNpYWwgdXNlcyBhbHRlcm5hdGUgaWRlb2dyYXBocyBmb3IgbWFueSBudW1iZXJzICIKKyAgICAgICAgICAgICsgInRoYXQgYXJlIGhhcmRlciB0byBhbHRlciB0aGFuIHRoZSB0cmFkaXRpb25hbCBudW1lcmFscyAob25lIGNvdWxkICIKKyAgICAgICAgICAgICsgImZhaXJseSBlYXNpbHkgY2hhbmdlIGEgb25lIHRvICIKKyAgICAgICAgICAgICsgImEgdGhyZWUganVzdCBieSBhZGRpbmcgdHdvIHN0cm9rZXMsIGZvciBleGFtcGxlKS4gIFRoaXMgaXMgYWxzbyBkb25lIGluICIKKyAgICAgICAgICAgICsgInRoZSBvdGhlciBjb3VudHJpZXMgdXNpbmcgQ2hpbmVzZSBpZG9ncmFwaHMsIGJ1dCBkaWZmZXJlbnQgaWRlb2dyYXBocyAiCisgICAgICAgICAgICArICJhcmUgdXNlZCBpbiB0aG9zZSBwbGFjZXMuIiwKKworICAgICAgICAgICAgIkFnYWluIGluIEdyZWVrIHdlIGhhdmUgdG8gc3VwcGx5IHRoZSB3b3JkcyAiCisgICAgICAgICAgICArICJmb3IgdGhlIG11bHRpcGxlcyBvZiAxMDAgYmVjYXVzZSB0aGV5IGNhbid0IGJlIGRlcml2ZWQgYWxnb3JpdGhtaWNhbGx5LiAgIgorICAgICAgICAgICAgKyAiQWxzbywgdGhlIHRlbnMgZGdpdCBjaGFuZ2VzIGZvcm0gd2hlbiBmb2xsb3dlZCBieSBhIG9uZXMgZGlnaXQ6IGFuICIKKyAgICAgICAgICAgICsgImFjY2VudCBtYXJrIGRpc2FwcGVhcnMgZnJvbSB0aGUgdGVucyBkaWdpdCBhbmQgbW92ZXMgdG8gdGhlIG9uZXMgZGlnaXQuICAiCisgICAgICAgICAgICArICJUaGVyZWZvcmUsIGluc3RlYWQgb2YgdXNpbmcgdGhlIFtdIG5vdGF0aW9uLCB3ZSBhY3R1YWxseSBoYXZlIHRvIHVzZSAiCisgICAgICAgICAgICArICJ0d28gc2VwYXJhdGUgcnVsZXMgZm9yIGVhY2ggbXVsdGlwbGUgb2YgMTAgdG8gc2hvdyB0aGUgdHdvIGZvcm1zIG9mICIKKyAgICAgICAgICAgICsgInRoZSB3b3JkLiIsCisKKyAgICAgICAgICAgICJTcGVsbG91dCBydWxlcyBmb3IgUnVzc2lhbi4iLAorCisgICAgICAgICAgICAiU3BlbGxvdXQgcnVsZXMgZm9yIEhlYnJldy4gIEhlYnJldyBhY3R1YWxseSBoYXMgaW5mbGVjdGVkIGZvcm1zIGZvciAiCisgICAgICAgICAgICArICJtb3N0IG9mIHRoZSBsb3dlci1vcmRlciBudW1iZXJzLiAgVGhlIG1hc2N1bGluZSBmb3JtcyBhcmUgc2hvd24gIgorICAgICAgICAgICAgKyAiaGVyZS4iLAorCisgICAgICAgICAgICAiVGhpcyBydWxlIHNldCBhZGRzIGFuIEVuZ2xpc2ggb3JkaW5hbCBhYmJyZXZpYXRpb24gdG8gdGhlIGVuZCBvZiBhICIKKyAgICAgICAgICAgICsgIm51bWJlci4gIEZvciBleGFtcGxlLCAyIGlzIGZvcm1hdHRlZCBhcyBcIjJuZFwiLiAgUGFyc2luZyBkb2Vzbid0IHdvcmsgd2l0aCAiCisgICAgICAgICAgICArICJ0aGlzIHJ1bGUgc2V0LiAgVG8gcGFyc2UsIHVzZSBEZWNpbWFsRm9ybWF0IG9uIHRoZSBudW1lcmFsLiIsCisKKyAgICAgICAgICAgICJUaGlzIGlzIGEgc2ltcGxlIG1lc3NhZ2UtZm9ybWF0dGluZyBleGFtcGxlLiAgTm9ybWFsbHkgb25lIHdvdWxkICIKKyAgICAgICAgICAgICsgInVzZSBDaG9pY2VGb3JtYXQgYW5kIE1lc3NhZ2VGb3JtYXQgdG8gZG8gc29tZXRoaW5nIHRoaXMgc2ltcGxlLCAiCisgICAgICAgICAgICArICJidXQgdGhpcyBzaG93cyBpdCBjb3VsZCBiZSBkb25lIHdpdGggUnVsZUJhc2VkTnVtYmVyRm9ybWF0IHRvby4gICIKKyAgICAgICAgICAgICsgIkEgbWVzc2FnZS1mb3JtYXR0aW5nIGV4YW1wbGUgdGhhdCBtaWdodCB3b3JrIGJldHRlciB3aXRoICIKKyAgICAgICAgICAgICsgIlJ1bGVCYXNlZE51bWJlckZvcm1hdCBhcHBlYXJzIGxhdGVyLiIsCisKKyAgICAgICAgICAgICJUaGUgbmV4dCBmZXcgZXhhbXBsZXMgZGVtb25zdHJhdGUgZnJhY3Rpb24gaGFuZGxpbmcuICAiCisgICAgICAgICAgICArICJUaGlzIGV4YW1wbGUgZm9ybWF0cyBhIG51bWJlciBpbiBvbmUgb2YgdGhlIHR3byBzdHlsZXMgb2Z0ZW4gdXNlZCAiCisgICAgICAgICAgICArICJvbiBjaGVja3MuICAlZG9sbGFycy1hbmQtaHVuZHJlZHRocyBmb3JtYXRzIGNlbnRzIGFzIGh1bmRyZWR0aHMgb2YgIgorICAgICAgICAgICAgKyAiYSBkb2xsYXIgKDIzLjQwIGNvbWVzIG91dCBhcyBcInR3ZW50eS10aHJlZSBhbmQgNDAvMTAwIGRvbGxhcnNcIikuICAiCisgICAgICAgICAgICArICIlZG9sbGFycy1hbmQtY2VudHMgZm9ybWF0cyBpbiBkb2xsYXJzIGFuZCBjZW50cyAoMjMuNDAgY29tZXMgb3V0IGFzICIKKyAgICAgICAgICAgICsgIlwidHdlbnR5LXRocmVlIGRvbGxhcnMgYW5kIGZvcnR5IGNlbnRzXCIpIiwKKworICAgICAgICAgICAgIlRoaXMgcnVsZSBzZXQgc2hvd3MgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgbnVtYmVyIGFzIGEgZnJhY3Rpb24gIgorICAgICAgICAgICAgKyAid2l0aCBhIHBvd2VyIG9mIDEwIGFzIHRoZSBkZW5vbWluYXRvci4gIFNvbWUgbGFuZ3VhZ2VzIGRvbid0IHNwZWxsICIKKyAgICAgICAgICAgICsgIm91dCB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIGEgbnVtYmVyIGFzIFwicG9pbnQgb25lIHR3byB0aHJlZSxcIiBidXQgIgorICAgICAgICAgICAgKyAiYWx3YXlzIHJlbmRlciBpdCBhcyBhIGZyYWN0aW9uLiAgSWYgd2Ugc3RpbGwgd2FudCB0byB0cmVhdCB0aGUgZnJhY3Rpb25hbCAiCisgICAgICAgICAgICArICJwYXJ0IG9mIHRoZSBudW1iZXIgYXMgYSBkZWNpbWFsLCB0aGVuIHRoZSBmcmFjdGlvbidzIGRlbm9taW5hdG9yICIKKyAgICAgICAgICAgICsgImlzIGFsd2F5cyBhIHBvd2VyIG9mIDEwLiAgVGhpcyBleGFtcGxlIGRvZXMgdGhhdDogMjMuMTI1IGlzIGZvcm1hdHRlZCAiCisgICAgICAgICAgICArICJhcyBcInR3ZW50eS10aHJlZSBhbmQgb25lIGh1bmRyZWQgdHdlbnR5LWZpdmUgdGhvdXNhbmR0aHNcIiAoYXMgb3Bwb3NlZCAiCisgICAgICAgICAgICArICJ0byBcInR3ZW50eS10aHJlZSBwb2ludCBvbmUgdHdvIGZpdmVcIiBvciBcInR3ZW50eS10aHJlZSBhbmQgb25lIGVpZ2h0aFwiKS4iLAorCisgICAgICAgICAgICAiTnVtYmVyIHdpdGggY2xvc2VzdCBmcmFjdGlvbi4gIFRoaXMgZXhhbXBsZSBmb3JtYXRzIGEgdmFsdWUgdXNpbmcgIgorICAgICAgICAgICAgKyAibnVtZXJhbHMsIGJ1dCBzaG93cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFzIGEgcmF0aW8gKGZyYWN0aW9uKSByYXRoZXIgIgorICAgICAgICAgICAgKyAidGhhbiBhIGRlY2ltYWwuICBUaGUgZnJhY3Rpb24gYWx3YXlzIGhhcyBhIGRlbm9taW5hdG9yIGJldHdlZW4gMiBhbmQgMTAuIiwKKworICAgICAgICAgICAgIkFtZXJpY2FuIHN0b2NrLXByaWNlIGZvcm1hdHRpbmcuICBOb24taW50ZWdyYWwgc3RvY2sgcHJpY2VzIGFyZSBzdGlsbCAiCisgICAgICAgICAgICArICJnZW5lcmFsbHkgc2hvd24gaW4gZWlnaHRocyBvciBzaXh0ZWVudGhzIG9mIGRvbGxhcnMgaW5zdGVhZCBvZiBkb2xsYXJzICIKKyAgICAgICAgICAgICsgImFuZCBjZW50cy4gIFRoaXMgZXhhbXBsZSBmb3JtYXRzIHN0b2NrIHByaWNlcyBpbiB0aGlzIHdheSBpZiBwb3NzaWJsZSwgIgorICAgICAgICAgICAgKyAiYW5kIGluIGRvbGxhcnMgYW5kIGNlbnRzIGlmIG5vdC4iLAorCisgICAgICAgICAgICAiVGhlIG5leHQgZmV3IGV4YW1wbGVzIGRlbW9uc3RyYXRlIHVzaW5nIGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IHRvICIKKyAgICAgICAgICAgICsgImNoYW5nZSB0aGUgdW5pdHMgYSB2YWx1ZSBpcyBkZW5vbWluYXRlZCBpbiBkZXBlbmRpbmcgb24gaXRzIG1hZ25pdHVkZS4gICIKKyAgICAgICAgICAgICsgIlRoZSBleGFtcGxlIHNob3dzIGxhcmdlIG51bWJlcnMgdGhlIHdheSB0aGV5IG9mdGVuIGFwcGVhciBpcyBud2VzcGFwZXJzOiAiCisgICAgICAgICAgICArICIxLDIwMCwwMDAgaXMgZm9ybWF0dGVkIGFzIFwiMS4yIG1pbGxpb25cIi4iLAorCisgICAgICAgICAgICAiVGhpcyBleGFtcGxlIHRha2VzIGEgbnVtYmVyIG9mIG1ldGVycyBhbmQgZm9ybWF0cyBpdCBpbiB3aGF0ZXZlciB1bml0ICIKKyAgICAgICAgICAgICsgIndpbGwgcHJvZHVjZSBhIG51bWJlciB3aXRoIGZyb20gb25lIHRvIHRocmVlIGRpZ2l0cyBiZWZvcmUgdGhlIGRlY2ltYWwgIgorICAgICAgICAgICAgKyAicG9pbnQuICBGb3IgZXhhbXBsZSwgMjMwLDAwMCBpcyBmb3JtYXR0ZWQgYXMgXCIyMzAga21cIi4iLAorCisgICAgICAgICAgICAiQSBtb3JlIGNvbXBsaWNhdGVkIG1lc3NhZ2UtZm9ybWF0dGluZyBleGFtcGxlLiAgSGVyZSwgaW4gYWRkaXRpb24gdG8gIgorICAgICAgICAgICAgKyAiaGFuZGxpbmcgdGhlIHNpbmd1bGFyIGFuZCBwbHVyYWwgdmVyc2lvbnMgb2YgdGhlIHdvcmQsIHRoZSB2YWx1ZSBpcyAiCisgICAgICAgICAgICArICJkZW5vbWluYXRlZCBpbiBieXRlcywga2lsb2J5dGVzLCBvciBtZWdhYnl0ZXMgZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUuICAiCisgICAgICAgICAgICArICJBbHNvIG5vdGljZSB0aGF0IGl0IGNvcnJlY3RseSB0cmVhdHMgYSBraWxvYnl0ZSBhcyAxLDAyNCBieXRlcyAobm90IDEsMDAwKSwgIgorICAgICAgICAgICAgKyAiYW5kIGEgbWVnYWJ5dGUgYXMgMSwwMjQga2lsb2J5dGVzIChub3QgMSwwMDApLiIsCisKKyAgICAgICAgICAgICJUaGlzIGV4YW1wbGUgZm9ybWF0cyBhIG51bWJlciBpbiBkb3plbnMgYW5kIGdyb3NzLiAgVGhpcyBpcyBpbnRlbmRlZCB0byAiCisgICAgICAgICAgICArICJkZW1vbnN0cmF0ZSBob3cgdGhpcyBydWxlIHNldCBjYW4gYmUgdXNlZCB0byBmb3JtYXQgbnVtYmVycyBpbiBzeXN0ZW1zICIKKyAgICAgICAgICAgICsgIm90aGVyIHRoYW4gYmFzZSAxMC4gIFRoZSBcIi8xMlwiIGFmdGVyIHRoZSBydWxlcycgYmFzZSB2YWx1ZXMgY29udHJvbHMgdGhpcy4gICIKKyAgICAgICAgICAgICsgIkFsc28gbm90aWNlIHRoYXQgdGhlIGJhc2UgZG9lc24ndCBoYXZlIHRvIGJlIGNvbnNpc3RlbnQgdGhyb3VnaG91dCB0aGUgIgorICAgICAgICAgICAgKyAid2hvbGUgcnVsZSBzZXQ6IHdlIGdvIGJhY2sgdG8gYmFzZSAxMCBmb3IgdmFsdWVzIG92ZXIgMSwwMDAuIiwKKworICAgICAgICAgICAgIlRoZSBuZXh0IGZldyBleGFtcGxlcyBzaG93IGhvdyBhIHNpbmdsZSB2YWx1ZSBjYW4gYmUgZGl2aWRlZCB1cCBpbnRvIG1ham9yICIKKyAgICAgICAgICAgICsgImFuZCBtaW5vciB1bml0cyB0aGF0IGRvbid0IHJlbGF0ZSB0byBlYWNoIG90aGVyIGJ5IGEgZmFjdG9yIG9mIDEwLiAgIgorICAgICAgICAgICAgKyAiVGhpcyBleGFtcGxlIGZvcm1hdHMgYSBudW1iZXIgb2Ygc2Vjb25kcyBpbiBzZXhhZ2VzaW1hbCBub3RhdGlvbiAiCisgICAgICAgICAgICArICIoaS5lLiwgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzKS4gICV3aXRoLXdvcmRzIGZvcm1hdHMgaXQgd2l0aCAiCisgICAgICAgICAgICArICJ3b3JkcyAoMzc0MCBpcyBcIjEgaG91ciwgMiBtaW51dGVzLCAyMCBzZWNvbmRzXCIpIGFuZCAlaW4tbnVtZXJhbHMgIgorICAgICAgICAgICAgKyAiZm9ybWF0cyBpdCBlbnRpcmVseSBpbiBudW1lcmFscyAoMzc0MCBpcyBcIjE6MDI6MjBcIikuIiwKKworICAgICAgICAgICAgIlRoaXMgZXhhbXBsZSBmb3JtYXRzIGEgbnVtYmVyIG9mIGhvdXJzIGluIHNleGFnZXNpbWFsIG5vdGF0aW9uIChpLmUuLCAiCisgICAgICAgICAgICArICJob3VycywgbWludXRlcywgYW5kIHNlY29uZHMpLiAgJXdpdGgtd29yZHMgZm9ybWF0cyB0aGUgdmFsdWUgdXNpbmcgIgorICAgICAgICAgICAgKyAid29yZHMgZm9yIHRoZSB1bml0cywgYW5kICVpbi1udW1lcmFscyBmb3JtYXRzIHRoZSB2YWx1ZSB1c2luZyBvbmx5ICIKKyAgICAgICAgICAgICsgIm51bWVyYWxzLiIsCisKKyAgICAgICAgICAgICJUaGlzIHJ1bGUgc2V0IGZvcm1hdHMgYSBudW1iZXIgb2YgcG91bmRzIGFzIHBvdW5kcywgc2hpbGxpbmdzLCBhbmQgIgorICAgICAgICAgICAgKyAicGVuY2UgaW4gdGhlIG9sZCBFbmdsaXNoIHN5c3RlbSBvZiBjdXJyZW5jeS4iLAorCisgICAgICAgICAgICAiVGhlc2UgZXhhbXBsZXMgc2hvdyBob3cgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGNhbiBiZSB1c2VkIHRvIGZvcm1hdCAiCisgICAgICAgICAgICArICJudW1iZXJzIHVzaW5nIG5vbi1wb3NpdGlvbmFsIG51bWVyYXRpb24gc3lzdGVtcy4gICIKKyAgICAgICAgICAgICsgIlRoaXMgZXhhbXBsZSBmb3JtYXRzIG51bWJlcnMgaW4gQXJhYmljIG51bWVyYWxzLiAgIgorICAgICAgICAgICAgKyAiTm9ybWFsbHksIHlvdSdkIGRvIHRoaXMgd2l0aCBEZWNpbWFsRm9ybWF0LCBidXQgdGhpcyBzaG93cyB0aGF0ICIKKyAgICAgICAgICAgICsgIlJ1bGVCYXNlZE51bWJlckZvcm1hdCBjYW4gaGFuZGxlIGl0IHRvby4iLAorCisgICAgICAgICAgICAiVGhpcyBleGFtcGxlIGZvbGxvd3MgdGhlIHNhbWUgcGF0dGVybiBhcyB0aGUgQXJhYmljLW51bWVyYWxzICIKKyAgICAgICAgICAgICsgImV4YW1wbGUsIGJ1dCB1c2VzIHdvcmRzIGZvciB0aGUgdmFyaW91cyBkaWdpdHMgKGUuZy4sIDEyMyBjb21lcyAiCisgICAgICAgICAgICArICJvdXQgYXMgXCJvbmUgdHdvIHRocmVlXCIpLiIsCisKKyAgICAgICAgICAgICJUaGlzIGV4YW1wbGUgZm9ybWF0cyBudW1iZXJzIHVzaW5nIENoaW5lc2UgY2hhcmFjdGVycyBpbiB0aGUgQXJhYmljICIKKyAgICAgICAgICAgICsgInBsYWNlLXZhbHVlIG1ldGhvZC4gIFRoaXMgd2FzIHVzZWQgaGlzdG9yaWNhbGx5IGluIENoaW5hIGZvciBhIHdoaWxlLiIsCisKKyAgICAgICAgICAgICJSb21hbiBudW1lcmFscy4gIFRoaXMgZXhhbXBsZSBoYXMgdHdvIHZhcmlhbnRzOiAlbW9kZXJuIHNob3dzIGhvdyBsYXJnZSAiCisgICAgICAgICAgICArICJudW1iZXJzIGFyZSB1c3VhbGx5IGhhbmRsZWQgdG9kYXk7ICVoaXN0b3JpY2FsIHNlcyB0aGUgb2xkZXIgc3ltYm9scyBmb3IgIgorICAgICAgICAgICAgKyAidGhvdXNhbmRzLiAgTm90IGFsbCBvZiB0aGUgY2hhcmFjdGVycyBhcmUgZGlzcGxheWFibGUgd2l0aCBtb3N0IGZvbnRzLiIsCisKKyAgICAgICAgICAgICJIZWJyZXcgYWxwaGFiZXRpYyBudW1lcmFscy4gIEJlZm9yZSBhZG9wdGlvbiBvZiBBcmFiaWMgbnVtZXJhbHMsIEhlYnJldyBzcGVha2VycyAiCisgICAgICAgICAgICArICJ1c2VkIHRoZSBsZXR0ZXIgb2YgdGhlaXIgYWxwaGFiZXQgYXMgbnVtZXJhbHMuICBUaGUgZmlyc3QgbmluZSBsZXR0ZXJzIG9mICIKKyAgICAgICAgICAgICsgInRoZSBhbHBoYWJldCByZXBlc2VudGVkIHRoZSB2YWx1ZXMgZnJvbSAxIHRvIDksIHRoZSBzZWNvbmQgbmluZSBsZXR0ZXJzIHRoZSAiCisgICAgICAgICAgICArICJtdWx0aXBsZXMgb2YgMTAsIGFuZCB0aGUgcmVtYWluaW5nIGxldHRlcnMgdGhlIG11bHRpcGxlcyBvZiAxMDAuICBTaW5jZSB0aGV5ICIKKyAgICAgICAgICAgICsgInJhbiBvdXQgb2YgbGV0dGVycyBhdCA0MDAsIHRoZSByZW1haW5pbmcgbXVsdGlwbGVzIG9mIDEwMCB3ZXJlIHJlcHJlc2VudGVkICIKKyAgICAgICAgICAgICsgInVzaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgZXhpc3RpbmcgbGV0dGVycyBmb3IgdGhlIGh1bmRyZWRzLiAgTnVtYmVycyB3ZXJlICIKKyAgICAgICAgICAgICsgImRpc3Rpbmd1aXNoZWQgZnJvbSB3b3JkcyBpbiBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5czogdGhlIHdheSBzaG93biBoZXJlICIKKyAgICAgICAgICAgICsgInVzZXMgYSBzaW5nbGUgbWFyayBhZnRlciBhIG51bWJlciBjb25zaXN0aW5nIG9mIG9uZSBsZXR0ZXIsIGFuZCBhIGRvdWJsZSAiCisgICAgICAgICAgICArICJtYXJrIGJldHdlZW4gdGhlIGxhc3QgdHdvIGxldHRlcnMgb2YgYSBudW1iZXIgY29uc2lzdGluZyBvZiB0d28gb3IgbW9yZSAiCisgICAgICAgICAgICArICJsZXR0ZXJzLiAgVHdvIGRvdHMgb3ZlciBhIGxldHRlciBtdWx0aXBsaWVkIGl0cyB2YWx1ZSBieSAxLDAwMC4gIEFsc28sIHNpbmNlICIKKyAgICAgICAgICAgICsgInRoZSBsZXR0ZXIgZm9yIDEwIGlzIHRoZSBmaXJzdCBsZXR0ZXIgb2YgR29kJ3MgbmFtZSBhbmQgdGhlIGxldHRlcnMgZm9yIDUgYW5kIDYgIgorICAgICAgICAgICAgKyAiYXJlIGxldHRlcnMgaW4gR29kJ3MgbmFtZSwgd2hpY2ggd2Fzbid0IHN1cHBvc2VkIHRvIGJlIHdyaXR0ZW4gb3Igc3Bva2VuLCAxNSBhbmQgIgorICAgICAgICAgICAgKyAiMTYgd2VyZSB1c3VhbGx5IHdyaXR0ZW4gYXMgOSArIDYgYW5kIDkgKyA3IGluc3RlYWQgb2YgMTAgKyA1IGFuZCAxMCArIDYuIiwKKworICAgICAgICAgICAgIkdyZWVrIGFscGhhYmV0aWMgbnVtZXJhbHMuICBUaGUgR3JlZWtzLCBiZWZvcmUgYWRvcHRpbmcgdGhlIEFyYWJpYyBudW1lcmFscywgIgorICAgICAgICAgICAgKyAiYWxzbyB1c2VkIHRoZSBsZXR0ZXJzIG9mIHRoZWlyIGFscGhhYmV0IGFzIG51bWVyYWxzLiAgVGhlcmUgYXJlIHRocmVlIG5vdy0iCisgICAgICAgICAgICArICJvYnNvbGV0ZSBHcmVlayBsZXR0ZXJzIHRoYXQgYXJlIHVzZWQgYXMgbnVtZXJhbHM7IG1hbnkgZm9udHMgZG9uJ3QgaGF2ZSB0aGVtLiAgIgorICAgICAgICAgICAgKyAiTGFyZ2UgbnVtYmVycyB3ZXJlIGhhbmRsZWQgbWFueSBkaWZmZXJlbnQgd2F5czsgdGhlIHdheSBzaG93biBoZXJlIGRpdmlkZXMgIgorICAgICAgICAgICAgKyAibGFyZ2UgbnVtYmVycyBpbnRvIGdyb3VwcyBvZiBmb3VyIGxldHRlcnMgKGZhY3RvcnMgb2YgMTAsMDAwKSwgYW5kIHNlcGFyYXRlcyAiCisgICAgICAgICAgICArICJ0aGUgZ3JvdXBzIHdpdGggdGhlIGNhcGl0YWwgbGV0dGVyIG11IChmb3IgbXlyaWFkKS4gIENhcGl0YWwgbGV0dGVycyBhcmUgdXNlZCAiCisgICAgICAgICAgICArICJmb3IgdmFsdWVzIGJlbG93IDEwLDAwMDsgc21hbGwgbGV0dGVycyBmb3IgaGlnaGVyIG51bWJlcnMgKHRvIG1ha2UgdGhlIGNhcGl0YWwgIgorICAgICAgICAgICAgKyAibXUgc3RhbmQgb3V0KS4iLAorCisgICAgICAgICAgICAiVGhpcyBpcyBhIGN1c3RvbSAodXNlci1kZWZpbmVkKSBydWxlIHNldC4iCisgICAgICAgIH07Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJuZi9wYWNrYWdlLmh0bWwgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vcmJuZi9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzBiODQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby9yYm5mL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3JibmYvcGFja2FnZS5odG1sLHYgJAorICAkUmV2aXNpb246IDEuMSAkCisgICREYXRlOiAyMDAwLzAzLzE1IDE3OjQ0OjAyICQKKy0tPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiPgorUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGRlbW8gYXBwbGlhdGlvbi4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvQW55VHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9BbnlUcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MGYxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvQW55VHJhbnNsaXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDMwNiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9BbnlUcmFuc2xpdGVyYXRvci5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjE6NTA6NDQgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8udHJhbnNsaXQ7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LmRlbW8uaW1wbC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBBbnlUcmFuc2xpdGVyYXRvciBleHRlbmRzIFRyYW5zbGl0ZXJhdG9yIHsKKwkKKwlzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworCXByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWU7CisJcHJpdmF0ZSBSdW5JdGVyYXRvciBpdDsKKwlwcml2YXRlIFBvc2l0aW9uIHJ1bjsKKwkKKwkKKwlwdWJsaWMgQW55VHJhbnNsaXRlcmF0b3IoU3RyaW5nIHRhcmdldE5hbWUsIFVuaWNvZGVGaWx0ZXIgZmlsdGVyLCBSdW5JdGVyYXRvciBpdCl7CisJCXN1cGVyKCJBbnktIiArIHRhcmdldE5hbWUsIGZpbHRlcik7CisJCXRoaXMudGFyZ2V0TmFtZSA9IHRhcmdldE5hbWU7CisJCXRoaXMuaXQgPSBpdDsKKwkJcnVuID0gbmV3IFBvc2l0aW9uKCk7CisJfQorCQorCXB1YmxpYyBBbnlUcmFuc2xpdGVyYXRvcihTdHJpbmcgdGFyZ2V0TmFtZSwgVW5pY29kZUZpbHRlciBmaWx0ZXIpeworCQl0aGlzKHRhcmdldE5hbWUsIGZpbHRlciwgbmV3IFNjcmlwdFJ1bkl0ZXJhdG9yKCkpOworCX0KKwkKKwlzdGF0aWMgcHJpdmF0ZSBUcmFuc2xpdGVyYXRvciBoZXggPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiW15cXHUwMDIwLVxcdTAwN0VdIGhleCIpOworCQorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVRyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIG9mZnNldHMsIGJvb2xlYW4gaXNJbmNyZW1lbnRhbCkgeworICAgIAlpZiAoREVCVUcpIHsKKyAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigiLSBoYW5kbGVUcmFuc2xpdGVyYXRlICIgKyBoZXgudHJhbnNsaXRlcmF0ZSh0ZXh0LnRvU3RyaW5nKCkpCisgICAgCQkJKyAiLCAiICsgdG9TdHJpbmcob2Zmc2V0cykpOworICAgIAl9CisJCWl0LnJlc2V0KHRleHQsIG9mZnNldHMpOworCQkKKyAgICAgICAgd2hpbGUgKGl0Lm5leHQocnVuKSkgeworCQkJaWYgKHRhcmdldE5hbWUuZXF1YWxzSWdub3JlQ2FzZShpdC5nZXROYW1lKCkpKSB7CisJCQkJaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oIlNraXBwaW5nIGlkZW50aWNhbDogIiArIHRhcmdldE5hbWUpOworCQkJCXJ1bi5zdGFydCA9IHJ1bi5saW1pdDsgLy8gc2hvdyB3ZSBwcm9jZXNzZWQKKwkJCQljb250aW51ZTsgLy8gc2tpcCBpZiBzYW1lCisJCQl9CisgICAgICAgIAkKKwkJCVRyYW5zbGl0ZXJhdG9yIHQ7CisJCQlTdHJpbmcgaWQgPSBpdC5nZXROYW1lKCkgKyAnLScgKyB0YXJnZXROYW1lOworCQkJdHJ5IHsKKyAgICAgICAgCQl0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoaWQpOworICAgICAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4KSB7CisgICAgICAgIAkJaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkbid0IGZpbmQ6ICIgKyBpZCArICIsIFRyeWluZyBMYXRpbiBhcyBQaXZvdCIpOworCQkJCWlkID0gaXQuZ2V0TmFtZSgpICsgIi1MYXRpbjsgTGF0aW4tIiArIHRhcmdldE5hbWU7CisJCQkJdHJ5IHsKKyAgICAgICAgCQkJdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKGlkKTsKKyAgICAgICAgCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgyKSB7CisgICAgICAgIAkJCWlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZG4ndCBmaW5kOiAiICsgaWQpOworICAgICAgICAJCQljb250aW51ZTsKKyAgICAgICAgCQl9CisgICAgICAgIAl9CisgICAgICAgIAkvLyBUT0RPIGNhdGNoIGVycm9yIGxhdGVyISEKKyAgICAgICAgCQkKKyAgICAgICAgCWlmIChERUJVRykgeworICAgICAgICAJCVN5c3RlbS5vdXQucHJpbnRsbih0LmdldElEKCkpOworICAgICAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQ6ICIgKyBoZXgudHJhbnNsaXRlcmF0ZSh0ZXh0LnRvU3RyaW5nKCkpCisgICAgICAgIAkJICsgIiwgIiArIHRvU3RyaW5nKHJ1bikpOworICAgICAgICAJfQorICAgICAgICAJCisgICAgICAgIAlpZiAoaXNJbmNyZW1lbnRhbCAmJiBpdC5hdEVuZCgpKSB7CisgICAgICAgIAkJdC50cmFuc2xpdGVyYXRlKHRleHQsIHJ1bik7CisgICAgICAgIAl9IGVsc2UgeworICAgICAgICAJCXQuZmluaXNoVHJhbnNsaXRlcmF0aW9uKHRleHQsIHJ1bik7CisgICAgICAgIAl9CisgICAgICAgIAkvLyBhZGp1c3QgdGhlIG9mZnNldHMgaW4gbGluZSB3aXRoIHRoZSBjaGFuZ2VzCisgICAgICAgIAlpdC5hZGp1c3QocnVuLmxpbWl0KTsKKyAgICAgICAgCQorICAgICAgICAJaWYgKERFQlVHKSB7CisgICAgICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCJvdXRwdXQ6ICIgKyBoZXgudHJhbnNsaXRlcmF0ZSh0ZXh0LnRvU3RyaW5nKCkpCisgICAgICAgIAkJICsgIiwgIiArIHRvU3RyaW5nKHJ1bikpOworICAgICAgICAJfQorICAgICAgICB9CisKKwkJLy8gc2hvdyBob3cgZmFyIHdlIGdvdCEKKwkJaXQuZ2V0RXhwYW5zZShvZmZzZXRzKTsKKwkJaWYgKHJ1bi5zdGFydCA9PSBydW4ubGltaXQpIG9mZnNldHMuc3RhcnQgPSBvZmZzZXRzLmxpbWl0OworCQllbHNlIG9mZnNldHMuc3RhcnQgPSBydW4uc3RhcnQ7CisgICAgCWlmIChERUJVRykgeworICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCIrIGhhbmRsZVRyYW5zbGl0ZXJhdGU6ICIgKyAiLCAiICsgdG9TdHJpbmcob2Zmc2V0cykpOworICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgCX0KKyAgICB9CisgICAgCisgICAgLy8gc2hvdWxkIGJlIG1ldGhvZCBvbiBQb3NpdGlvbgorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKFBvc2l0aW9uIG9mZnNldHMpIHsKKyAgICAJcmV0dXJuICJbY3M6ICIgKyBvZmZzZXRzLmNvbnRleHRTdGFydAorICAgIAkJCSsgIiwgczogIiArIG9mZnNldHMuc3RhcnQKKyAgICAJCQkrICIsIGw6ICIgKyBvZmZzZXRzLmxpbWl0CisgICAgCQkJKyAiLCBjbDogIiArIG9mZnNldHMuY29udGV4dExpbWl0CisgICAgCQkJKyAiXSI7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBpbnRlcmZhY2UgUnVuSXRlcmF0b3IgeworICAgIAlwdWJsaWMgdm9pZCByZXNldChSZXBsYWNlYWJsZSB0ZXh0LCBQb3NpdGlvbiBleHBhbnNlKTsKKyAgICAJcHVibGljIHZvaWQgZ2V0RXhwYW5zZShQb3NpdGlvbiBydW4pOworICAgIAlwdWJsaWMgdm9pZCByZXNldCgpOworICAgIAlwdWJsaWMgYm9vbGVhbiBuZXh0KFBvc2l0aW9uIHJ1bik7CisgICAgCXB1YmxpYyB2b2lkIGdldEN1cnJlbnQoUG9zaXRpb24gcnVuKTsKKyAgICAJcHVibGljIFN0cmluZyBnZXROYW1lKCk7CisgICAgCXB1YmxpYyB2b2lkIGFkanVzdChpbnQgbmV3Q3VycmVudExpbWl0KTsKKyAgICAJcHVibGljIGJvb2xlYW4gYXRFbmQoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHNlcmllcyBvZiByYW5nZXMgY29ycmVzcG9uZGluZyB0byBzY3JpcHRzLiBUaGV5IHdpbGwgYmUgb2YgdGhlIGZvcm06CisgICAgICogY2NjY1NTY1NTY2NjY1RUY1RjY2NjCS0gd2hlcmUgYyBpcyBjb21tb24sIFMgaXMgdGhlIGZpcnN0IHNjcmlwdCBhbmQgVCBpcyB0aGUgc2Vjb25kCisgICAgICp8ICAgICAgICAgICAgfAkJCS0gZmlyc3QgcnVuCisgICAgICogICAgICAgICB8ICAgICAgICAgICAgfAktIHNlY29uZCBydW4KKyAgICAgKiBUaGF0IGlzLCB0aGUgcnVucyB3aWxsIG92ZXJsYXAuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgc28gdGhhdCBhIHRyYW5zbGl0ZXJhdG9yIGNhbgorICAgICAqIGNvbnNpZGVyIGNvbW1vbiBjaGFyYWN0ZXJzIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgc2NyaXB0cy4KKyAgICAgKiBUaGUgb25seSB0aW1lIHRoYXQgY29udGV4dFN0YXJ0ICE9IHN0YXJ0IGlzIGZvciB0aGUgZmlyc3QgcnVuIAorICAgICAqCSh0aGUgY29udGV4dCBpcyB0aGUgc3RhcnQgY29udGV4dCBvZiB0aGUgZW50aXJlIGV4cGFuc2UpCisgICAgICogVGhlIG9ubHkgdGltZSB0aGF0IGNvbnRleHRMaW1pdCAhPSBsaW1pdCBpcyBmb3IgdGhlIGxhc3QgcnVuIAorICAgICAqCSh0aGUgY29udGV4dCBpcyB0aGUgZW5kIGNvbnRleHQgb2YgdGhlIGVudGlyZSBleHBhbnNlKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU2NyaXB0UnVuSXRlcmF0b3IgaW1wbGVtZW50cyBSdW5JdGVyYXRvciB7CisgICAgCXByaXZhdGUgUmVwbGFjZWFibGUgdGV4dDsKKyAgICAJcHJpdmF0ZSBQb3NpdGlvbiBleHBhbnNlID0gbmV3IFBvc2l0aW9uKCk7CisgICAgCXByaXZhdGUgUG9zaXRpb24gY3VycmVudCA9IG5ldyBQb3NpdGlvbigpOworICAgIAlwcml2YXRlIGludCBzY3JpcHQ7CisgICAgCXByaXZhdGUgYm9vbGVhbiBkb25lID0gdHJ1ZTsKKyAgICAJCisKKyAgICAJcHVibGljIHZvaWQgcmVzZXQoUmVwbGFjZWFibGUgdGV4dCwgUG9zaXRpb24gZXhwYW5zZSkgeworICAgIAkJc2V0KHRoaXMuZXhwYW5zZSwgZXhwYW5zZSk7CisgICAgCQl0aGlzLnRleHQgPSB0ZXh0OworICAgIAkJcmVzZXQoKTsKKyAgICAJfQorICAgIAkJCisgICAgCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworICAgIAkJZG9uZSA9IGZhbHNlOworICAgIAkJdGhpcy5leHBhbnNlID0gZXhwYW5zZTsKKyAgICAJCXNjcmlwdCA9IFVTY3JpcHQuSU5WQUxJRF9DT0RFOworICAgIAkJLy8gc2V0IHVwIGZpcnN0IHJhbmdlIHRvIGJlIGVtcHR5LCBhdCBiZWdpbm5pbmcKKyAgICAJCWN1cnJlbnQuY29udGV4dFN0YXJ0ID0gZXhwYW5zZS5jb250ZXh0U3RhcnQ7CisgICAgCQljdXJyZW50LnN0YXJ0ID0gY3VycmVudC5saW1pdCA9IGN1cnJlbnQuY29udGV4dExpbWl0ID0gZXhwYW5zZS5zdGFydDsgICAgCQkKKyAgICAJfQorICAgIAkJCisgICAgCXB1YmxpYyBib29sZWFuIG5leHQoUG9zaXRpb24gcnVuKSB7CisgICAgCQlpZiAoZG9uZSkgcmV0dXJuIGZhbHNlOworICAgIAkJaWYgKERFQlVHKSB7CisgICAgCQkJU3lzdGVtLm91dC5wcmludGxuKCIrY3M6ICIgKyBjdXJyZW50LmNvbnRleHRTdGFydAorICAgIAkJCQkrICIsIHM6ICIgKyBjdXJyZW50LnN0YXJ0CisgICAgCQkJCSsgIiwgbDogIiArIGN1cnJlbnQubGltaXQKKyAgICAJCQkJKyAiLCBjbDogIiArIGN1cnJlbnQuY29udGV4dExpbWl0KTsKKyAgICAJCX0KKyAgICAJCS8vIHJlc2V0IHN0YXJ0IGNvbnRleHQgcnVuIHRvIHRoZSBsYXN0IGVuZAorICAgIAkJY3VycmVudC5zdGFydCA9IGN1cnJlbnQubGltaXQ7CisgICAgCQkKKyAgICAJCS8vIFBoYXNlIDEuIEJhY2t1cCB0aGUgU1RBUlQgdmFsdWUgdGhyb3VnaCBDT01NT04gdW50aWwgd2UgZ2V0IHRvIGV4cGFuc2Uuc3RhcnQgb3IgYSByZWFsIHNjcmlwdC4KKyAgICAJCWludCBpLCBjcDsKKyAgICAJCWludCBsaW1pdCA9IGV4cGFuc2Uuc3RhcnQ7CisgICAgCQlmb3IgKGkgPSBjdXJyZW50LnN0YXJ0OyBpID4gbGltaXQ7IGkgLT0gVVRGMTYuZ2V0Q2hhckNvdW50KGNwKSkgeworICAgIAkJCWNwID0gdGV4dC5jaGFyMzJBdChpKTsKKyAgICAJCQlpbnQgc2NyaXB0ID0gVVNjcmlwdC5nZXRTY3JpcHQoY3ApOworICAgIAkJCWlmIChzY3JpcHQgIT0gVVNjcmlwdC5DT01NT04gJiYgc2NyaXB0ICE9IFVTY3JpcHQuSU5IRVJJVEVEKSBicmVhazsKKyAgICAJCX0KKyAgICAJCWN1cnJlbnQuc3RhcnQgPSBpOworICAgIAkJY3VycmVudC5jb250ZXh0U3RhcnQgPSAoaSA9PSBsaW1pdCkgPyBleHBhbnNlLmNvbnRleHRTdGFydCA6IGk7IC8vIGV4dGVuZCBhdCBzdGFydAorICAgIAkJCisgICAgCQkvLyBQSEFTRSAyLiBNb3ZlIHVwIHRoZSBMSU1JVCB2YWx1ZSB0aHJvdWdoIENPTU1PTiBvciBzaW5nbGUgc2NyaXB0IHVudGlsIHdlIGdldCB0byBleHBhbnNlLmxpbWl0CisgICAgCQlpbnQgbGFzdFNjcmlwdCA9IFVTY3JpcHQuQ09NTU9OOworICAgIAkJaW50IHZlcnlMYXN0U2NyaXB0ID0gVVNjcmlwdC5DT01NT047CisgICAgCQlsaW1pdCA9IGV4cGFuc2UubGltaXQ7IAorICAgIAkJZm9yIChpID0gY3VycmVudC5saW1pdDsgaSA8IGxpbWl0OyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAJCQljcCA9IHRleHQuY2hhcjMyQXQoaSk7CisgICAgCQkJaW50IHNjcmlwdCA9IFVTY3JpcHQuZ2V0U2NyaXB0KGNwKTsKKyAgICAJCQlpZiAoc2NyaXB0ID09IFVTY3JpcHQuSU5IRVJJVEVEKSBzY3JpcHQgPSBVU2NyaXB0LkNPTU1PTjsKKyAgICAJCQlpZiAoc2NyaXB0ICE9IFVTY3JpcHQuQ09NTU9OKSB7CisgICAgCQkJCS8vIGlmIHdlIGZpbmQgYSByZWFsIHNjcmlwdDoKKyAgICAJCQkJLy8gICBpZiB3ZSBhbHJlYWR5IGhhZCBhIHNjcmlwdCwgYmFpbAorICAgIAkJCQkvLyAgIG90aGVyd2lzZSBzZXQgb3VyIHNjcmlwdAorICAgIAkJCQlpZiAobGFzdFNjcmlwdCA9PSBVU2NyaXB0LkNPTU1PTikgbGFzdFNjcmlwdCA9IHNjcmlwdDsKKyAgICAJCQkJZWxzZSBpZiAobGFzdFNjcmlwdCAhPSBzY3JpcHQpIGJyZWFrOworICAgIAkJCX0KKyAgICAJCX0KKyAgICAJCWN1cnJlbnQubGltaXQgPSBpOworICAgIAkJY3VycmVudC5jb250ZXh0TGltaXQgPSAoaSA9PSBsaW1pdCkgPyBleHBhbnNlLmNvbnRleHRMaW1pdCA6IGk7IC8vIGV4dGVuZCBhdCBlbmQKKyAgICAJCWRvbmUgPSAoaSA9PSBsaW1pdCk7CisgICAgCQlzY3JpcHQgPSBsYXN0U2NyaXB0OworICAgIAkJCisgICAgCQlpZiAoREVCVUcpIHsKKyAgICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oIi1jczogIiArIGN1cnJlbnQuY29udGV4dFN0YXJ0CisgICAgCQkJCSsgIiwgczogIiArIGN1cnJlbnQuc3RhcnQKKyAgICAJCQkJKyAiLCBsOiAiICsgY3VycmVudC5saW1pdAorICAgIAkJCQkrICIsIGNsOiAiICsgY3VycmVudC5jb250ZXh0TGltaXQpOworICAgIAkJfQorICAgIAkJCisgICAgCQlzZXQocnVuLCBjdXJyZW50KTsKKyAgICAJCXJldHVybiB0cnVlOworICAgIAl9CisgICAgCQorICAgIAkvLyBTSE9VTEQgQkUgTUVUSE9EIE9OIFBPU0lUSU9OCisgICAgCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXQoUG9zaXRpb24gcnVuLCBQb3NpdGlvbiBjdXJyZW50KSB7CisgICAgCQlydW4uY29udGV4dFN0YXJ0ID0gY3VycmVudC5jb250ZXh0U3RhcnQ7CisgICAgCQlydW4uc3RhcnQgPSBjdXJyZW50LnN0YXJ0OworICAgIAkJcnVuLmxpbWl0ID0gY3VycmVudC5saW1pdDsKKyAgICAJCXJ1bi5jb250ZXh0TGltaXQgPSBjdXJyZW50LmNvbnRleHRMaW1pdDsKKyAgICAJfQorICAgIAkKKyAgICAJcHVibGljIGJvb2xlYW4gYXRFbmQoKSB7CisgICAgCQlyZXR1cm4gY3VycmVudC5saW1pdCA9PSBleHBhbnNlLmxpbWl0OworICAgIAl9CisgICAgCQorICAgIAlwdWJsaWMgdm9pZCBnZXRDdXJyZW50KFBvc2l0aW9uIHJ1bikgeworICAgIAkJc2V0KHJ1biwgY3VycmVudCk7CisgICAgCX0KKyAgICAJCisgICAgCXB1YmxpYyB2b2lkIGdldEV4cGFuc2UoUG9zaXRpb24gcnVuKSB7CisgICAgCQlzZXQocnVuLCBleHBhbnNlKTsKKyAgICAJfQorICAgIAkKKyAgICAJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgIAkJcmV0dXJuIFVTY3JpcHQuZ2V0TmFtZShzY3JpcHQpOworICAgIAl9CisgICAgCQorICAgIAlwdWJsaWMgdm9pZCBhZGp1c3QoaW50IG5ld0N1cnJlbnRMaW1pdCkgeworICAgIAkJaWYgKGV4cGFuc2UgPT0gbnVsbCkgeworICAgIAkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk11c3QgcmVzZXQoKSBiZWZvcmUgY2FsbGluZyIpOworICAgIAkJfQorICAgIAkJaW50IGRlbHRhID0gbmV3Q3VycmVudExpbWl0IC0gY3VycmVudC5saW1pdDsKKyAgICAJCWN1cnJlbnQubGltaXQgKz0gZGVsdGE7CisgICAgCQljdXJyZW50LmNvbnRleHRMaW1pdCArPSBkZWx0YTsKKyAgICAJCWV4cGFuc2UubGltaXQgKz0gZGVsdGE7CisgICAgCQlleHBhbnNlLmNvbnRleHRMaW1pdCArPSBkZWx0YTsKKyAgICAJfQorICAgIAkKKyAgICAJLy8gcmVnaXN0ZXIgQW55LVNjcmlwdCBmb3IgZXZlcnkgc2NyaXB0LgorICAgIAkKKyAgICAJcHJpdmF0ZSBzdGF0aWMgU2V0IHNjcmlwdExpc3QgPSBuZXcgSGFzaFNldCgpOworICAgIAkKKyAgICAJcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQW55VG9TY3JpcHQoKSB7CisgICAgCQlzeW5jaHJvbml6ZWQgKHNjcmlwdExpc3QpIHsKKyAgICAgICAgCQlFbnVtZXJhdGlvbiBzb3VyY2VzID0gVHJhbnNsaXRlcmF0b3IuZ2V0QXZhaWxhYmxlU291cmNlcygpOworICAgICAgICAJCXdoaWxlKHNvdXJjZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIAkJU3RyaW5nIHNvdXJjZSA9IChTdHJpbmcpIHNvdXJjZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIAkJaWYgKHNvdXJjZS5lcXVhbHMoIkFueSIpKSBjb250aW51ZTsgLy8gdG8ga2VlcCBmcm9tIGxvb3BpbmcKKwkgICAgICAgICAgICAJCisgICAgICAgICAgICAJCUVudW1lcmF0aW9uIHRhcmdldHMgPSBUcmFuc2xpdGVyYXRvci5nZXRBdmFpbGFibGVUYXJnZXRzKHNvdXJjZSk7CisgICAgICAgICAgICAJCXdoaWxlKHRhcmdldHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAJCVN0cmluZyB0YXJnZXQgPSAoU3RyaW5nKSB0YXJnZXRzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAJCQlpZiAoVVNjcmlwdC5nZXRDb2RlKHRhcmdldCkgPT0gbnVsbCkgY29udGludWU7IC8vIFNLSVAgdW5sZXNzIHdlIGhhdmUgYSBzY3JpcHQgKG9yIGxvY2FsZSkKKyAgICAgICAgICAgIAkJCWlmIChzY3JpcHRMaXN0LmNvbnRhaW5zKHRhcmdldCkpIGNvbnRpbnVlOyAvLyBhbHJlYWR5IGVuY291bnRlcmVkCisgICAgICAgICAgICAJCQlzY3JpcHRMaXN0LmFkZCh0YXJnZXQpOyAvLyBvdGhlcndpc2UgYWRkIGZvciBsYXRlciB0ZXN0aW5nCisJICAgICAgICAgICAgCQkKKyAgICAgICAgICAgICAgICAJCVNldCB2YXJpYW50U2V0ID0gYWRkKG5ldyBUcmVlU2V0KCksIFRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZVZhcmlhbnRzKHNvdXJjZSwgdGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgCQlpZiAodmFyaWFudFNldC5zaXplKCkgPCAyKSB7CisgICAgCQkJCQkJQW55VHJhbnNsaXRlcmF0b3IgYXQgPSBuZXcgQW55VHJhbnNsaXRlcmF0b3IodGFyZ2V0LCBudWxsKTsKKyAgICAJCQkJCQlEdW1teUZhY3RvcnkuYWRkKGF0LmdldElEKCksIGF0KTsKKyAgICAgICAgICAgICAgICAJCX0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIAkJSXRlcmF0b3IgdmFyaWFudHMgPSB2YXJpYW50U2V0Lml0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIAkJd2hpbGUodmFyaWFudHMuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAJCVN0cmluZyB2YXJpYW50ID0gKFN0cmluZykgdmFyaWFudHMubmV4dCgpOworICAgIAkJCQkJCQlBbnlUcmFuc2xpdGVyYXRvciBhdCA9IG5ldyBBbnlUcmFuc2xpdGVyYXRvcigKKyAgICAJCQkJCQkJCSh2YXJpYW50Lmxlbmd0aCgpID4gMCkgPyB0YXJnZXQgKyAiLyIgKyB2YXJpYW50IDogdGFyZ2V0LCBudWxsKTsKKyAgICAJCQkJCQkJRHVtbXlGYWN0b3J5LmFkZChhdC5nZXRJRCgpLCBhdCk7CisgICAgICAgICAgICAgICAgICAgIAkJfQorICAgICAgICAgICAgICAgIAkJfQorICAgICAgICAgICAgCQl9CisgICAgICAgIAkJfQorICAgICAgICAJfQorICAgIAl9CisgICAgCQorICAgIAlzdGF0aWMgY2xhc3MgRHVtbXlGYWN0b3J5IGltcGxlbWVudHMgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSB7CisgICAgICAgIAlzdGF0aWMgRHVtbXlGYWN0b3J5IHNpbmdsZXRvbiA9IG5ldyBEdW1teUZhY3RvcnkoKTsKKyAgICAgICAgCXN0YXRpYyBIYXNoTWFwIG0gPSBuZXcgSGFzaE1hcCgpOworCisgICAgICAgIAkvLyBTaW5jZSBUcmFuc2xpdGVyYXRvcnMgYXJlIGltbXV0YWJsZSwgd2UgZG9uJ3QgaGF2ZSB0byBjbG9uZSBvbiBzZXQgJiBnZXQKKyAgICAgICAgCXN0YXRpYyB2b2lkIGFkZChTdHJpbmcgSUQsIFRyYW5zbGl0ZXJhdG9yIHQpIHsKKyAgICAgICAgICAgIAltLnB1dChJRCwgdCk7CisgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJSZWdpc3RlcmluZzogIiArIElEICsgIiwgIiArIHQudG9SdWxlcyh0cnVlKSk7CisgICAgICAgICAgICAJVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXJGYWN0b3J5KElELCBzaW5nbGV0b24pOworICAgICAgICAJfQorICAgICAgICAJcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgCXJldHVybiAoVHJhbnNsaXRlcmF0b3IpIG0uZ2V0KElEKTsKKyAgICAgICAgCX0KKyAgICAJfQorICAgIAkKKyAgICAJLy8gTmljZSBsaXR0bGUgVXRpbGl0eSBmb3IgY29udmVydGluZyBFbnVtZXJhdGlvbiB0byBjb2xsZWN0aW9uCisgICAgCXN0YXRpYyBTZXQgYWRkKFNldCBzLCBFbnVtZXJhdGlvbiBlbnVtKSB7CisgICAgICAgIAl3aGlsZShlbnVtLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAJcy5hZGQoZW51bS5uZXh0RWxlbWVudCgpKTsKKyAgICAgICAgCX0KKyAgICAgICAgCXJldHVybiBzOworICAgIAl9CisgICAgCQorICAgIAkKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvRGVtby5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0RlbW8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yODMyMzhmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0RlbW8uamF2YQpAQCAtMCwwICsxLDEzODEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9EZW1vLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDcvMjYgMTk6NTY6NTggJCAKKyAqICRSZXZpc2lvbjogMS4yNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LmRlbW8udHJhbnNsaXQ7CitpbXBvcnQgamF2YS5hcHBsZXQuKjsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLmltcGwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuKjsKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8qKgorICogQSBmcmFtZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBleHBlcmltZW50IHdpdGgga2V5Ym9hcmQKKyAqIHRyYW5zbGl0ZXJhdGlvbi4gIFRoaXMgY2xhc3MgaGFzIGEgbWFpbigpIG1ldGhvZCBzbyBpdCBjYW4gYmUgcnVuCisgKiBhcyBhbiBhcHBsaWNhdGlvbi4gIFRoZSBmcmFtZSBjb250YWlucyBhbiBlZGl0YWJsZSB0ZXh0IGNvbXBvbmVudAorICogYW5kIHVzZXMga2V5Ym9hcmQgdHJhbnNsaXRlcmF0aW9uIHRvIHByb2Nlc3Mga2V5Ym9hcmQgZXZlbnRzLgorICoKKyAqIDxwPkNvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uIDE5OTkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEB2ZXJzaW9uICRSQ1NmaWxlOiBEZW1vLmphdmEsdiAkICRSZXZpc2lvbjogMS4yNCAkICREYXRlOiAyMDAyLzA3LzI2IDE5OjU2OjU4ICQKKyAqLworcHVibGljIGNsYXNzIERlbW8gZXh0ZW5kcyBGcmFtZSB7CisKKyAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBUlRfVEVYVCA9ICIoY3V0LFx1MDNCQVx1MDNDNVx1MDNDNCxcdTA1RDAsXHUzMEFGXHUzMEM4LFx1NEU4MCxcdTA5MUFcdTA5NDFcdTA5MjRcdTA5NEQpIjsKKworICAgIFRyYW5zbGl0ZXJhdG9yIHRyYW5zbGl0ID0gbnVsbDsKKyAgICBTdHJpbmcgZm9udE5hbWUgPSAiQXJpYWwgVW5pY29kZSBNUyI7CisgICAgaW50IGZvbnRTaXplID0gMTg7CisgICAgCisgICAgCisKKyAgICAvKgorICAgIGJvb2xlYW4gY29tcG91bmQgPSBmYWxzZTsKKyAgICBUcmFuc2xpdGVyYXRvcltdIGNvbXBvdW5kVHJhbnNsaXQgPSBuZXcgVHJhbnNsaXRlcmF0b3JbTUFYX0NPTVBPVU5EXTsKKyAgICBzdGF0aWMgZmluYWwgaW50IE1BWF9DT01QT1VORCA9IDEyODsKKyAgICBpbnQgY29tcG91bmRDb3VudCA9IDA7CisgICAgKi8KKworICAgIFRyYW5zbGl0ZXJhdGluZ1RleHRDb21wb25lbnQgdGV4dCA9IG51bGw7CisKKyAgICBNZW51IHRyYW5zbGl0TWVudTsKKyAgICBDaGVja2JveE1lbnVJdGVtIHRyYW5zbGl0SXRlbTsKKyAgICBDaGVja2JveE1lbnVJdGVtIG5vVHJhbnNsaXRJdGVtOworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBOT19UUkFOU0xJVEVSQVRPUiA9ICJOb25lIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAiXHUwMEE5IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEZyYW1lIGYgPSBuZXcgRGVtbyg2MDAsIDIwMCk7CisgICAgICAgIGYuYWRkV2luZG93TGlzdGVuZXIobmV3IFdpbmRvd0FkYXB0ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9zaW5nKFdpbmRvd0V2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGYuc2V0VmlzaWJsZSh0cnVlKTsKKyAgICB9CisKKwlwdWJsaWMgRGVtbyhpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgc3VwZXIoIlRyYW5zbGl0ZXJhdGlvbiBEZW1vIik7CisKKyAgICAgICAgaW5pdE1lbnVzKCk7CisKKyAgICAgICAgYWRkV2luZG93TGlzdGVuZXIobmV3IFdpbmRvd0FkYXB0ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9zaW5nKFdpbmRvd0V2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRleHQgPSBuZXcgVHJhbnNsaXRlcmF0aW5nVGV4dENvbXBvbmVudCgpOworICAgICAgICBGb250IGZvbnQgPSBuZXcgRm9udChmb250TmFtZSwgRm9udC5QTEFJTiwgZm9udFNpemUpOworICAgICAgICB0ZXh0LnNldEZvbnQoZm9udCk7CisgICAgICAgIHRleHQuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgdGV4dC5zZXRWaXNpYmxlKHRydWUpOworICAgICAgICB0ZXh0LnNldFRleHQoU1RBUlRfVEVYVCk7CisgICAgICAgIGFkZCh0ZXh0KTsKKworICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBzZXRUcmFuc2xpdGVyYXRvcigiTGF0aW4tR3JlZWsiLCBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaW5pdE1lbnVzKCkgeworICAgICAgICBNZW51QmFyIG1iYXI7CisgICAgICAgIE1lbnUgbWVudTsKKyAgICAgICAgTWVudUl0ZW0gbWl0ZW07CisgICAgICAgIENoZWNrYm94TWVudUl0ZW0gY2l0ZW07CisgICAgICAgIAorICAgICAgICBzZXRNZW51QmFyKG1iYXIgPSBuZXcgTWVudUJhcigpKTsKKyAgICAgICAgbWJhci5hZGQobWVudSA9IG5ldyBNZW51KCJGaWxlIikpOworICAgICAgICBtZW51LmFkZChtaXRlbSA9IG5ldyBNZW51SXRlbSgiUXVpdCIpKTsKKyAgICAgICAgbWl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKy8qCisgICAgICAgIGZpbmFsIEl0ZW1MaXN0ZW5lciBzZXRUcmFuc2xpdGVyYXRvckxpc3RlbmVyID0gbmV3IEl0ZW1MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGl0ZW1TdGF0ZUNoYW5nZWQoSXRlbUV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBDaGVja2JveE1lbnVJdGVtIGl0ZW0gPSAoQ2hlY2tib3hNZW51SXRlbSkgZS5nZXRTb3VyY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoZS5nZXRTdGF0ZUNoYW5nZSgpID09IEl0ZW1FdmVudC5ERVNFTEVDVEVEKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGxldCB0aGUgY3VycmVudCB0cmFuc2xpdGVyYXRvciBiZSBkZXNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHJlc2VsZWN0IGl0LgorICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFN0YXRlKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIGFuIGl0ZW0gdG8gYSBjb21wb3VuZCB0cmFuc2xpdGVyYXRvcgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVBZGRUb0NvbXBvdW5kKGl0ZW0uZ2V0TGFiZWwoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtICE9IHRyYW5zbGl0SXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBEZXNlbGVjdCBwcmV2aW91cyBjaG9pY2UuICBEb24ndCBuZWVkIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0U3RhdGUodHJ1ZSkgb24gbmV3IGNob2ljZS4KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsaXRJdGVtLnNldFN0YXRlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsaXRJdGVtID0gaXRlbTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2V0VHJhbnNsaXRlcmF0b3IoaXRlbS5nZXRMYWJlbCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisqLworICAgICAgICAvKgorICAgICAgICB0cmFuc2xpdE1lbnUuYWRkKHRyYW5zbGl0SXRlbSA9IG5vVHJhbnNsaXRJdGVtID0KKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2hlY2tib3hNZW51SXRlbShOT19UUkFOU0xJVEVSQVRPUiwgdHJ1ZSkpOworICAgICAgICBub1RyYW5zbGl0SXRlbS5hZGRJdGVtTGlzdGVuZXIobmV3IEl0ZW1MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGl0ZW1TdGF0ZUNoYW5nZWQoSXRlbUV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICAvLyBDYW4ndCB1bmNoZWNrIE5vbmUgLS0gYW55IGFjdGlvbiBoZXJlIHNldHMgTm9uZSB0byB0cnVlCisgICAgICAgICAgICAgICAgc2V0Tm9UcmFuc2xpdGVyYXRvcigpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICB0cmFuc2xpdE1lbnUuYWRkU2VwYXJhdG9yKCk7CisgICAgICAgICovCisKKy8qCisgICAgICAgIHRyYW5zbGl0TWVudS5hZGQoY2l0ZW0gPSBuZXcgQ2hlY2tib3hNZW51SXRlbSgiQ29tcG91bmQiKSk7CisgICAgICAgIGNpdGVtLmFkZEl0ZW1MaXN0ZW5lcihuZXcgSXRlbUxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgaXRlbVN0YXRlQ2hhbmdlZChJdGVtRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIENoZWNrYm94TWVudUl0ZW0gaXRlbSA9IChDaGVja2JveE1lbnVJdGVtKSBlLmdldFNvdXJjZSgpOworICAgICAgICAgICAgICAgIGlmIChlLmdldFN0YXRlQ2hhbmdlKCkgPT0gSXRlbUV2ZW50LkRFU0VMRUNURUQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgY29tcG91bmQgZ2V0cyBkZXNlbGVjdGVkLCB0aGVuIHNlbGVjdCBOT05FCisgICAgICAgICAgICAgICAgICAgIHNldE5vVHJhbnNsaXRlcmF0b3IoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjb21wb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBTd2l0Y2hpbmcgZnJvbSBub24tY29tcG91bmQgdG8gY29tcG91bmQKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsaXRJdGVtLnNldFN0YXRlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsaXRJdGVtID0gaXRlbTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsaXQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBjb21wb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kQ291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8TUFYX0NPTVBPVU5EOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kVHJhbnNsaXRbaV0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIAorICAgICAgICB0cmFuc2xpdE1lbnUuYWRkU2VwYXJhdG9yKCk7CisgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICBmb3IgKEVudW1lcmF0aW9uIGU9Z2V0U3lzdGVtVHJhbnNsaXRlcmF0b3JOYW1lcygpLmVsZW1lbnRzKCk7CisgICAgICAgICAgICAgZS5oYXNNb3JlRWxlbWVudHMoKTsgKSB7CisgICAgICAgICAgICBTdHJpbmcgcyA9IChTdHJpbmcpIGUubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHRyYW5zbGl0TWVudS5hZGQoY2l0ZW0gPSBuZXcgQ2hlY2tib3hNZW51SXRlbShzKSk7CisgICAgICAgICAgICBjaXRlbS5hZGRJdGVtTGlzdGVuZXIoc2V0VHJhbnNsaXRlcmF0b3JMaXN0ZW5lcik7CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICAgICAgCisgICAgICAgIE1lbnUgZm9udE1lbnUgPSBuZXcgTWVudSgiRm9udCIpOworICAgICAgICBTdHJpbmdbXSBmb250cyA9IEdyYXBoaWNzRW52aXJvbm1lbnQuZ2V0TG9jYWxHcmFwaGljc0Vudmlyb25tZW50KCkuZ2V0QXZhaWxhYmxlRm9udEZhbWlseU5hbWVzKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9udHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIE1lbnVJdGVtIG1JdGVtID0gbmV3IE1lbnVJdGVtKGZvbnRzW2ldKTsKKyAgICAgICAgICAgIG1JdGVtLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBGb250QWN0aW9uTGlzdGVuZXIoZm9udHNbaV0pKTsKKyAgICAgICAgICAgIGZvbnRNZW51LmFkZChtSXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgbWJhci5hZGQoZm9udE1lbnUpOworICAgICAgICAKKyAgICAgICAgTWVudSBzaXplTWVudSA9IG5ldyBNZW51KCJTaXplIik7CisgICAgICAgIGludFtdIHNpemVzID0gezksIDEwLCAxMiwgMTQsIDE4LCAyNCwgMzYsIDQ4LCA3Mn07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIE1lbnVJdGVtIG1JdGVtID0gbmV3IE1lbnVJdGVtKCIiICsgc2l6ZXNbaV0pOworICAgICAgICAgICAgbUl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIobmV3IFNpemVBY3Rpb25MaXN0ZW5lcihzaXplc1tpXSkpOworICAgICAgICAgICAgc2l6ZU1lbnUuYWRkKG1JdGVtKTsKKyAgICAgICAgfQorICAgICAgICBtYmFyLmFkZChzaXplTWVudSk7CisgICAgICAgIAorICAgICAgICB0cmFuc2xpdCA9IG51bGw7CisgICAgICAgIAorICAgICAgICBtYmFyLmFkZCh0cmFuc2xpdE1lbnUgPSBuZXcgTWVudSgiVHJhbnNsaXRlcmF0b3IiKSk7CisgICAgICAgIAorICAgICAgICB0cmFuc2xpdE1lbnUuYWRkKGNvbnZlcnRTZWxlY3Rpb25JdGVtID0gbmV3IE1lbnVJdGVtKCJUcmFuc2xpdGVyYXRlIiwgCisgICAgICAgICAgICBuZXcgTWVudVNob3J0Y3V0KEtleUV2ZW50LlZLX0spKSk7CisgICAgICAgIGNvbnZlcnRTZWxlY3Rpb25JdGVtLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlQmF0Y2hUcmFuc2xpdGVyYXRlKHRyYW5zbGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0cmFuc2xpdE1lbnUuYWRkKHN3YXBTZWxlY3Rpb25JdGVtID0gbmV3IE1lbnVJdGVtKCJSZXZlcnNlIiwgCisgICAgICAgICAgICBuZXcgTWVudVNob3J0Y3V0KEtleUV2ZW50LlZLX1MpKSk7CisgICAgICAgIHN3YXBTZWxlY3Rpb25JdGVtLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAJVHJhbnNsaXRlcmF0b3IgaW52OworICAgICAgICAgICAgCXRyeSB7CisgICAgICAgICAgICAgICAgCWludiA9IHRyYW5zbGl0LmdldEludmVyc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24geCkgeworICAgICAgICAgICAgICAgIAlpbnYgPSBuZXcgTnVsbFRyYW5zbGl0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCXNldFRyYW5zbGl0ZXJhdG9yKGludi5nZXRJRCgpLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0cmFuc2xpdE1lbnUuYWRkKGNvbnZlcnRUeXBpbmdJdGVtID0gbmV3IE1lbnVJdGVtKCJObyBUeXBpbmcgQ29udmVyc2lvbiIsCisgICAgICAgICAgICBuZXcgTWVudVNob3J0Y3V0KEtleUV2ZW50LlZLX1QpKSk7CisgICAgICAgIGNvbnZlcnRUeXBpbmdJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0cmFuc2xpdGVyYXRlVHlwaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHQuc2V0VHJhbnNsaXRlcmF0b3IodHJhbnNsaXQpOworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VHlwaW5nSXRlbS5zZXRMYWJlbCgiTm8gVHlwaW5nIENvbnZlcnNpb24iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0ZXh0LmZsdXNoKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHQuc2V0VHJhbnNsaXRlcmF0b3IobnVsbCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUeXBpbmdJdGVtLnNldExhYmVsKCJDb252ZXJ0IFR5cGluZyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cmFuc2xpdGVyYXRlVHlwaW5nID0gIXRyYW5zbGl0ZXJhdGVUeXBpbmc7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdHJhbnNsaXRNZW51LmFkZChoaXN0b3J5TWVudSA9IG5ldyBNZW51KCJSZWNlbnQiKSk7CisgICAgICAgIAorICAgICAgICBoZWxwRGlhbG9nID0gbmV3IEluZm9EaWFsb2codGhpcywgIlNpbXBsZSBEZW1vIiwgIkluc3RydWN0aW9ucyIsCisgICAgICAgICAgICJDVEwgQSwgWCwgQywgViBoYXZlIGN1c3RvbWFyeSBtZWFuaW5ncy5cbiIKKyAgICAgICAgICsgIkFycm93IGtleXMsIGRlbGV0ZSBhbmQgYmFja3NwYWNlIHdvcmsuXG4iCisgICAgICAgICArICJUbyBnZXQgYSBjaGFyYWN0ZXIgZnJvbSBpdHMgY29udHJvbCBwb2ludCwgdHlwZSB0aGUgaGV4LCB0aGVuIGhpdCBDVEwgUSIKKyAgICAgICAgKTsKKyAgICAgICAgaGVscERpYWxvZy5nZXRBcmVhKCkuc2V0RWRpdGFibGUoZmFsc2UpOworICAgICAgICAKKyAgICAgICAKKyAgICAgICAgTWVudSBoZWxwTWVudTsKKyAgICAgICAgbWJhci5hZGQoaGVscE1lbnUgPSBuZXcgTWVudSgiRXh0cmFzIikpOworICAgICAgICBoZWxwTWVudS5hZGQobWl0ZW0gPSBuZXcgTWVudUl0ZW0oIkhlbHAiKSk7CisgICAgICAgIG1pdGVtLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaGVscERpYWxvZy5zaG93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOyAgIAorICAgICAgICAKKyAgICAgICAgaGV4RGlhbG9nID0gbmV3IEluZm9EaWFsb2codGhpcywgIkhleCBFbnRyeSIsICJVc2UgVSsuLi4sIFxcdS4uLiwgXFx4ey4uLn0sIG9yICYjeC4uLjsiLAorICAgICAgICAgICAiXFx1MDBFMSIKKyAgICAgICAgKTsKKyAgICAgICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIkluc2VydCIpOworICAgICAgICBidXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaGV4VmFsdWUgPSBoZXhEaWFsb2cuZ2V0QXJlYSgpLmdldFRleHQoKTsKKyAgICAgICAgICAgICAgICB0ZXh0Lmluc2VydFRleHQoZnJvbUhleC50cmFuc2xpdGVyYXRlKGhleFZhbHVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBoZXhEaWFsb2cuZ2V0Qm90dG9tKCkuYWRkKGJ1dHRvbik7CisgICAgICAgIAorICAgICAgICBoZWxwTWVudS5hZGQobWl0ZW0gPSBuZXcgTWVudUl0ZW0oIkhleC4uLiIsIAorICAgICAgICAgICAgbmV3IE1lbnVTaG9ydGN1dChLZXlFdmVudC5WS19IKSkpOworICAgICAgICBtaXRlbS5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGhleERpYWxvZy5zaG93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcG91bmQgVHJhbnNsaXRlcmF0b3IKKyAgICAgICAgCisgICAgICAgIGNvbXBvdW5kRGlhbG9nID0gbmV3IEluZm9EaWFsb2codGhpcywgIkNvbXBvdW5kIFRyYW5zbGl0ZXJhdG9yIiwgIiIsCisgICAgICAgICAgICJbXlxcdTAwMDAtXFx1MDBGRl0gaGV4IgorICAgICAgICApOworICAgICAgICBidXR0b24gPSBuZXcgQnV0dG9uKCJTZXQiKTsKKyAgICAgICAgYnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbXBvdW5kID0gIiI7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgY29tcG91bmQgPSBjb21wb3VuZERpYWxvZy5nZXRBcmVhKCkuZ2V0VGV4dCgpOworICAgICAgICAgICAgICAgICAgICBzZXRUcmFuc2xpdGVyYXRvcihjb21wb3VuZCwgbnVsbCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICBjb21wb3VuZERpYWxvZy5nZXRBcmVhKCkuc2V0VGV4dChjb21wb3VuZCArICJcbiIgKyBleC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGNvbXBvdW5kRGlhbG9nLmdldEJvdHRvbSgpLmFkZChidXR0b24pOworICAgICAgICAKKyAgICAgICAgdHJhbnNsaXRNZW51LmFkZChtaXRlbSA9IG5ldyBNZW51SXRlbSgiTXVsdGlwbGUuLi4iLCAKKyAgICAgICAgICAgIG5ldyBNZW51U2hvcnRjdXQoS2V5RXZlbnQuVktfTSkpKTsKKyAgICAgICAgbWl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBjb21wb3VuZERpYWxvZy5zaG93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gUnVsZUJhc2VkIFRyYW5zbGl0ZXJhdG9yCisgICAgICAgIAorICAgICAgICBydWxlc0RpYWxvZyA9IG5ldyBJbmZvRGlhbG9nKHRoaXMsICJSdWxlLUJhc2VkIFRyYW5zbGl0ZXJhdG9yIiwgIiIsCisgICAgICAgICAgICIoW0EtWl0pID4gJkhleCgkMSkgJk5hbWUoJDEpO1xyXG4iIAorICAgICAgICAgICAgKyAiJkhleC1BbnkoJDEpIDwgKCdcXCcgW3VVXSBbYS1mQS1GMC05XSopO1xyXG4iIAorCQkJKyAiJk5hbWUtQW55KCQxKSA8ICgneycgW15cXH1dKiAnfScpOyIKKyAgICAgICAgKTsKKyAgICAgICAgYnV0dG9uID0gbmV3IEJ1dHRvbigiU2V0Iik7CisgICAgICAgIGJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBjb21wb3VuZCA9ICIiOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kID0gcnVsZXNEaWFsb2cuZ2V0QXJlYSgpLmdldFRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGlkID0gcnVsZUlkLmdldFRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHJhbnNsaXRlcmF0b3IoY29tcG91bmQsIGlkKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGVzRGlhbG9nLmdldEFyZWEoKS5zZXRUZXh0KGNvbXBvdW5kICsgIlxuIyIgKyBleC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJ1bGVzRGlhbG9nLmdldEJvdHRvbSgpLmFkZChidXR0b24pOworICAgICAgICBydWxlSWQgPSBuZXcgVGV4dEZpZWxkKCJ0ZXN0MSIsIDIwKTsKKyAgICAgICAgTGFiZWwgdGVtcCA9IG5ldyBMYWJlbCgiIE5hbWU6Iik7CisgICAgICAgIHJ1bGVzRGlhbG9nLmdldEJvdHRvbSgpLmFkZCh0ZW1wKTsKKyAgICAgICAgcnVsZXNEaWFsb2cuZ2V0Qm90dG9tKCkuYWRkKHJ1bGVJZCk7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgdHJhbnNsaXRNZW51LmFkZChtaXRlbSA9IG5ldyBNZW51SXRlbSgiRnJvbSBSdWxlcy4uLiIsIAorICAgICAgICAgICAgbmV3IE1lbnVTaG9ydGN1dChLZXlFdmVudC5WS19SKSkpOworICAgICAgICBtaXRlbS5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIHJ1bGVzRGlhbG9nLnNob3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgdHJhbnNsaXRNZW51LmFkZChtaXRlbSA9IG5ldyBNZW51SXRlbSgiRnJvbSBGaWxlLi4uIiwgCisgICAgICAgICAgICBuZXcgTWVudVNob3J0Y3V0KEtleUV2ZW50LlZLX0YpKSk7CisgICAgICAgIG1pdGVtLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBGaWxlTGlzdGVuZXIodGhpcywgUlVMRV9GSUxFKSk7CisgICAgICAgIAorICAgICAgICB0cmFuc2xpdE1lbnUuYWRkKG1pdGVtID0gbmV3IE1lbnVJdGVtKCJUZXN0IEZpbGUuLi4iKSk7CisgICAgICAgIG1pdGVtLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBGaWxlTGlzdGVuZXIodGhpcywgVEVTVF9GSUxFKSk7CisgICAgICAgIAorICAgICAgICAvLyBGbGVzaCBvdXQgdGhlIG1lbnUgd2l0aCB0aGUgaW5zdGFsbGVkIHRyYW5zbGl0ZXJhdG9ycworICAgICAgICAKKyAgICAgICAgdHJhbnNsaXRNZW51LmFkZFNlcGFyYXRvcigpOworICAgICAgICAKKyAgICAgICAgSXRlcmF0b3Igc291cmNlcyA9IGFkZChuZXcgVHJlZVNldCgpLCBUcmFuc2xpdGVyYXRvci5nZXRBdmFpbGFibGVTb3VyY2VzKCkpLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlKHNvdXJjZXMuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgc291cmNlID0gKFN0cmluZykgc291cmNlcy5uZXh0KCk7CisgICAgICAgICAgICBJdGVyYXRvciB0YXJnZXRzID0gYWRkKG5ldyBUcmVlU2V0KCksIFRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZVRhcmdldHMoc291cmNlKSkuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIE1lbnUgdGFyZ2V0TWVudSA9IG5ldyBNZW51KHNvdXJjZSk7CisgICAgICAgICAgICB3aGlsZSh0YXJnZXRzLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnZXQgPSAoU3RyaW5nKSB0YXJnZXRzLm5leHQoKTsKKyAgICAgICAgICAgICAgICBTZXQgdmFyaWFudFNldCA9IGFkZChuZXcgVHJlZVNldCgpLCBUcmFuc2xpdGVyYXRvci5nZXRBdmFpbGFibGVWYXJpYW50cyhzb3VyY2UsIHRhcmdldCkpOworICAgICAgICAgICAgICAgIGlmICh2YXJpYW50U2V0LnNpemUoKSA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgbWl0ZW0gPSBuZXcgTWVudUl0ZW0odGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbWl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIobmV3IFRyYW5zbGl0ZXJhdGlvbkxpc3RlbmVyKHNvdXJjZSArICItIiArIHRhcmdldCkpOworICAgICAgICAgICAgICAgICAgICB0YXJnZXRNZW51LmFkZChtaXRlbSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3IgdmFyaWFudHMgPSB2YXJpYW50U2V0Lml0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIE1lbnUgdmFyaWFudE1lbnUgPSBuZXcgTWVudSh0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSh2YXJpYW50cy5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYW50ID0gKFN0cmluZykgdmFyaWFudHMubmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lbnVOYW1lID0gdmFyaWFudC5sZW5ndGgoKSA9PSAwID8gIjxkZWZhdWx0PiIgOiB2YXJpYW50OworICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIjwiICsgc291cmNlICsgIi0iICsgdGFyZ2V0ICsgIi8iICsgdmFyaWFudCArICI+LCA8IiArIG1lbnVOYW1lICsgIj4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pdGVtID0gbmV3IE1lbnVJdGVtKG1lbnVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pdGVtLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBUcmFuc2xpdGVyYXRpb25MaXN0ZW5lcihzb3VyY2UgKyAiLSIgKyB0YXJnZXQgKyAiLyIgKyB2YXJpYW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50TWVudS5hZGQobWl0ZW0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRhcmdldE1lbnUuYWRkKHZhcmlhbnRNZW51KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cmFuc2xpdE1lbnUuYWRkKHRhcmdldE1lbnUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAKKyAgICB9CisgICAgCisgICAgc3RhdGljIGZpbmFsIGludCBSVUxFX0ZJTEUgPSAwLCBURVNUX0ZJTEUgPSAxOworICAgIC8vCisgICAgc3RhdGljIGNsYXNzIEZpbGVMaXN0ZW5lciBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKyAgICAgICAgRGVtbyBmcmFtZTsKKyAgICAgICAgaW50IGNob2ljZTsKKyAgICAgICAgCisgICAgICAgIEZpbGVMaXN0ZW5lcihEZW1vIGZyYW1lLCBpbnQgY2hvaWNlKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7CisgICAgICAgICAgICB0aGlzLmNob2ljZSA9IGNob2ljZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IGZyYW1lLnRyYW5zbGl0LmdldElEKCk7CisgICAgICAgICAgICBpbnQgc2xhc2hQb3MgPSBpZC5pbmRleE9mKCcvJyk7CisgICAgICAgICAgICBTdHJpbmcgdmFyaWFudCA9ICIiOworICAgICAgICAgICAgaWYgKHNsYXNoUG9zID49IDApIHsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0gIl8iICsgaWQuc3Vic3RyaW5nKHNsYXNoUG9zKzEpOworICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyaW5nKDAsIHNsYXNoUG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgRmlsZURpYWxvZyBmaWxlRGlhbG9nID0gbmV3IEZpbGVEaWFsb2coZnJhbWUsICJJbnB1dCBGaWxlIik7CisgICAgICAgICAgICBmaWxlRGlhbG9nLnNldEZpbGUoIlRlc3RfIiArIGlkICsgIi50eHQiKTsKKyAgICAgICAgICAgIGZpbGVEaWFsb2cuc2hvdygpOworICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZURpYWxvZy5nZXRGaWxlKCk7CisgICAgICAgICAgICBTdHJpbmcgZmlsZURpcmVjdG9yeSA9IGZpbGVEaWFsb2cuZ2V0RGlyZWN0b3J5KCk7CisgICAgICAgICAgICBpZiAoZmlsZU5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKGZpbGVEaXJlY3RvcnksIGZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNob2ljZSA9PSBSVUxFX0ZJTEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBzdHVmZiBpbnRvIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZik7CisgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbVJlYWRlciBpc3IgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZmlzLCAiVVRGOCIpOworICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoaXNyLCAzMioxMDI0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBici5yZWFkTGluZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCgpID4gMCAmJiBsaW5lLmNoYXJBdCgwKSA9PSAnXHVGRUZGJykgbGluZSA9IGxpbmUuc3Vic3RyaW5nKDEpOyAvLyBzdHJpcCBCT00KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQobGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBici5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gZmlsZSBuYW1lIGludG8gaWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCJUcmFuc2xpdGVyYXRvcl8iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyaW5nKCJUcmFuc2xpdGVyYXRvcl8iLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MgPSBmaWxlTmFtZS5pbmRleE9mKCdfJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gZmlsZU5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIHBvcykgKyAiLSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvczIgPSBmaWxlTmFtZS5pbmRleE9mKCdfJywgcG9zKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MyIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArPSBmaWxlTmFtZS5zdWJzdHJpbmcocG9zKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICs9IGZpbGVOYW1lLnN1YnN0cmluZyhwb3MrMSwgcG9zMikgKyAiLyIgKyBmaWxlTmFtZS5zdWJzdHJpbmcocG9zMiArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGlkLmxhc3RJbmRleE9mKCcuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID49IDApIGlkID0gaWQuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuc2V0VHJhbnNsaXRlcmF0b3IoYnVmZmVyLnRvU3RyaW5nKCksIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaG9pY2UgPT0gVEVTVF9GSUxFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5UZXN0RmlsZShmLCBmcmFtZS50cmFuc2xpdCwgdmFyaWFudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTIpIHsKKyAgICAgICAgICAgICAgICAgICAgZTIucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvYmxlbSBvcGVuaW5nL3JlYWRpbmc6ICIgKyBmaWxlRGlyZWN0b3J5ICsgIiwgIiArIGZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWxlRGlhbG9nLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKworICAgIGJvb2xlYW4gdHJhbnNsaXRlcmF0ZVR5cGluZyA9IHRydWU7CisgICAgVHJhbnNsaXRlcmF0b3IgZnJvbUhleCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJIZXgtQW55Iik7CisgICAgSW5mb0RpYWxvZyBoZWxwRGlhbG9nOworICAgIEluZm9EaWFsb2cgaGV4RGlhbG9nOworICAgIEluZm9EaWFsb2cgY29tcG91bmREaWFsb2c7CisgICAgSW5mb0RpYWxvZyBydWxlc0RpYWxvZzsKKyAgICBUZXh0RmllbGQgcnVsZUlkOworICAgIE1lbnVJdGVtIGNvbnZlcnRTZWxlY3Rpb25JdGVtID0gbnVsbDsKKyAgICBNZW51SXRlbSBzd2FwU2VsZWN0aW9uSXRlbSA9IG51bGw7CisgICAgTWVudUl0ZW0gY29udmVydFR5cGluZ0l0ZW0gPSBudWxsOworICAgIE1lbnUgaGlzdG9yeU1lbnU7CisgICAgTWFwIGhpc3RvcnlNYXAgPSBuZXcgSGFzaE1hcCgpOworICAgIFNldCBoaXN0b3J5U2V0ID0gbmV3IFRyZWVTZXQobmV3IENvbXBhcmF0b3IoKSB7CisgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IGEsIE9iamVjdCBiKSB7CisgICAgICAgICAgICAgICAgTWVudUl0ZW0gYWEgPSAoTWVudUl0ZW0pYTsKKyAgICAgICAgICAgICAgICBNZW51SXRlbSBiYiA9IChNZW51SXRlbSliOworICAgICAgICAgICAgICAgIHJldHVybiBhYS5nZXRMYWJlbCgpLmNvbXBhcmVUbyhiYi5nZXRMYWJlbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIAorICAgIC8vIEFERCBGYWN0b3J5IHNpbmNlIG90aGVyd2lzZSBnZXRJbnZlcnNlIGJsb3dzIG91dAorICAgIHN0YXRpYyBjbGFzcyBEdW1teUZhY3RvcnkgaW1wbGVtZW50cyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5IHsKKyAgICAgICAgc3RhdGljIER1bW15RmFjdG9yeSBzaW5nbGV0b24gPSBuZXcgRHVtbXlGYWN0b3J5KCk7CisgICAgICAgIHN0YXRpYyBIYXNoTWFwIG0gPSBuZXcgSGFzaE1hcCgpOworCisgICAgICAgIC8vIFNpbmNlIFRyYW5zbGl0ZXJhdG9ycyBhcmUgaW1tdXRhYmxlLCB3ZSBkb24ndCBoYXZlIHRvIGNsb25lIG9uIHNldCAmIGdldAorICAgICAgICBzdGF0aWMgdm9pZCBhZGQoU3RyaW5nIElELCBUcmFuc2xpdGVyYXRvciB0KSB7CisgICAgICAgICAgICBtLnB1dChJRCwgdCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZ2lzdGVyaW5nOiAiICsgSUQgKyAiLCAiICsgdC50b1J1bGVzKHRydWUpKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeShJRCwgc2luZ2xldG9uKTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICByZXR1cm4gKFRyYW5zbGl0ZXJhdG9yKSBtLmdldChJRCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcHJpbnRCcmVha3MoaW50IG51bSwgU3RyaW5nIHRlc3RTb3VyY2UsIEJyZWFrSXRlcmF0b3IgYmkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiOworICAgICAgICBpbnQgbGFzdFBvcyA9IDA7CisgICAgCXdoaWxlICh0cnVlKSB7CisgICAgCSAgICBpbnQgcG9zID0gYmkubmV4dCgpOworICAgIAkgICAgaWYgKHBvcyA9PSBiaS5ET05FKSBicmVhazsKKyAgICAJICAgIHJlc3VsdCArPSB0ZXN0U291cmNlLnN1YnN0cmluZyhsYXN0UG9zLCBwb3MpICsgIiYiOworICAgIAkgICAgbGFzdFBvcyA9IHBvczsKKyAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbihwb3MpOworICAgIAl9CisgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCIgKyBudW0gKyAiOiAiICsgcmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcHJpbnRJdGVyYXRpb24oaW50IG51bSwgU3RyaW5nIHRlc3RTb3VyY2UsIENoYXJhY3Rlckl0ZXJhdG9yIGNpKSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSAiIjsKKyAgICAJd2hpbGUgKHRydWUpIHsKKyAgICAJICAgIGNoYXIgY2ggPSBjaS5uZXh0KCk7CisgICAgCSAgICBpZiAoY2ggPT0gY2kuRE9ORSkgYnJlYWs7CisgICAgCSAgICByZXN1bHQgKz0gY2ggKyAiKCIgKyBjaS5nZXRJbmRleCgpICsgIikiOworICAgIAl9CisgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCIgKyBudW0gKyAiOiAiICsgcmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcHJpbnRTb3VyY2VzKCkgeworICAgICAgICBTdHJpbmdbXSBsaXN0ID0geyJMYXRpbi1UaGFpTG9naWNhbCIsICJUaGFpTG9naWNhbC1MYXRpbiIsICJUaGFpLVRoYWlMb2dpY2FsIiwgIlRoYWlMb2dpY2FsLVRoYWkifTsKKyAgICAgICAgVW5pY29kZVNldCBhbGwgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHRyID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UobGlzdFtpXSk7CisgICAgICAgICAgICBVbmljb2RlU2V0IHNyYyA9IHRyLmdldFNvdXJjZVNldCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpc3RbaV0gKyAiOiAiICsgc3JjLnRvUGF0dGVybih0cnVlKSk7CisgICAgICAgICAgICBhbGwuYWRkQWxsKHNyYyk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBbGw6ICIgKyBhbGwudG9QYXR0ZXJuKHRydWUpKTsKKyAgICAgICAgVW5pY29kZVNldCByZW0gPSBuZXcgVW5pY29kZVNldCgiW1s6bGF0aW46XVs6dGhhaTpdXSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1pc3NpbmcgZnJvbSBbOmxhdGluOl1bOnRoYWk6XTogIiArIGFsbC5yZW1vdmVBbGwocmVtKS50b1BhdHRlcm4odHJ1ZSkpOworICAgIH0KKyAgICAKKyAgICAvLyAyMDBFO0xFRlQtVE8tUklHSFQgTUFSSztDZjswO0w7Ozs7O047Ozs7OworCisgICAgc3RhdGljIFRyYW5zbGl0ZXJhdG9yIHRpdGxlID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoInRpdGxlIik7CisgICAgc3RhdGljIFN0cmluZyBoZXhBbmROYW1lUnVsZXMgPSAiICAgIChbOmM6XSkgPiBcXHUyMDBFICZoZXgvdW5pY29kZSgkMSkgJyAoICkgJyAmbmFtZSgkMSkgXFx1MjAwRSAnICc7IgorICAgICAgICArICIoWzptYXJrOl0pID4gXFx1MjAwRSAmaGV4L3VuaWNvZGUoJDEpICcgKCAnIFxcdTIwMEUgXHUyNUNDICQxIFxcdTIwMEUgJyApICcgJm5hbWUoJDEpIFxcdTIwMEUgJyAnOyIKKyAgICAgICAgKyAiKC4pID4gXFx1MjAwRSAmaGV4L3VuaWNvZGUoJDEpICcgKCAnIFxcdTIwMEUgJDEgXFx1MjAwRSAnICkgJyAmbmFtZSgkMSkgJyAnIFxcdTIwMEU7IjsKKworICAgIHN0YXRpYyBUcmFuc2xpdGVyYXRvciBoZXhBbmROYW1lID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJhbnktaGV4QW5kTmFtZSIsIAorICAgICAgICBoZXhBbmROYW1lUnVsZXMsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgIAorCisKKyAgICAvL3N0YXRpYyBUcmFuc2xpdGVyYXRvciB1cHBlciA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJ1cHBlciIpOworICAgICAKKyAgICBzdGF0aWMgZmluYWwgYnl0ZSBOT05FID0gMCwgVElUTEVXT1JEID0gMSwgVElUTEVMSU5FID0gMjsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZW5UZXN0RmlsZShGaWxlIHNvdXJjZUZpbGUsIFRyYW5zbGl0ZXJhdG9yIHRyYW5zbGl0LCBTdHJpbmcgdmFyaWFudCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWRpbmc6ICIgKyBzb3VyY2VGaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7CisgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcigKKyAgICAgICAgICAgICAgICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlSW5wdXRTdHJlYW0oc291cmNlRmlsZSksICJVVEYtOCIpKTsKKyAgICAgICAgICAgIFN0cmluZyB0YXJnZXRGaWxlID0gc291cmNlRmlsZS5nZXRDYW5vbmljYWxQYXRoKCk7CisgICAgICAgICAgICBpbnQgZG90UG9zID0gdGFyZ2V0RmlsZS5sYXN0SW5kZXhPZignLicpOworICAgICAgICAgICAgaWYgKGRvdFBvcyA+PSAwKSB0YXJnZXRGaWxlID0gdGFyZ2V0RmlsZS5zdWJzdHJpbmcoMCxkb3RQb3MpOworICAgICAgICAgICAgdGFyZ2V0RmlsZSArPSB2YXJpYW50OworICAgICAgICAgICAgCisgICAgICAgICAgICBGaWxlIG91dEZpbGUgPSBuZXcgRmlsZSh0YXJnZXRGaWxlICsgIi5odG1sIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyaXRpbmc6ICIgKyBvdXRGaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IG5ldyBQcmludFdyaXRlcigKKyAgICAgICAgICAgICAgICBuZXcgQnVmZmVyZWRXcml0ZXIoCisgICAgICAgICAgICAgICAgICAgIG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRGaWxlKSwgIlVURi04IikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIGRpcmVjdGlvbiA9ICIiOworICAgICAgICAgICAgU3RyaW5nIGlkID0gdHJhbnNsaXQuZ2V0SUQoKTsKKyAgICAgICAgICAgIGlmIChpZC5pbmRleE9mKCJBcmFiaWMiKSA+PSAwIHx8IGlkLmluZGV4T2YoIkhlYnJldyIpID49IDApIHsKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiIGRpcmVjdGlvbjogcnRsOyI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sZWFuIHRlc3RSb3VuZFRyaXAgPSB0cnVlOworICAgICAgICAgICAgYm9vbGVhbiBnZW5lcmF0ZVNldHMgPSB0cnVlOworICAgICAgICAgICAgaWYgKGlkLnN0YXJ0c1dpdGgoIkhhbi0iKSB8fCBpZC5zdGFydHNXaXRoKCJqYS0iKSkgeworICAgICAgICAgICAgICAgIHRlc3RSb3VuZFRyaXAgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZVNldHMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD48bWV0YSBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIGNvbnRlbnQ9J3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCc+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHN0eWxlPjwhLS0iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJ0ZCwgdGggICAgICAgeyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBib3JkZXI6IDFweCBzb2xpZCBibGFjayB9Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigidGQucyAgICAgICB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRUU7IiArIGRpcmVjdGlvbiArICIgfSIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oInRkLnIgICAgICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0NDQ0NDOyIgKyBkaXJlY3Rpb24gKyAiIH0iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJ0ZC5uICAgICAgIHsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzsgfSIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oInRkLnRpdGxlICAgICAgIHsgYm9yZGVyOiAwcHggc29saWQgYmxhY2t9Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigic3Bhbi5kICAgICAgIHsgYmFja2dyb3VuZC1jb2xvcjogI0ZGNjY2NiB9Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigic3Bhbi5yICAgICAgIHsgYmFja2dyb3VuZC1jb2xvcjogIzY2RkY2NiB9Iik7CisKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJib2R5ICAgICAgICAgeyBmb250LWZhbWlseTogJ0FyaWFsIFVuaWNvZGUgTVMnLCAnTHVjaWRhIFNhbnMgVW5pY29kZScsIEFyaWFsLCBzYW5zLXNlcmlmOyBtYXJnaW46IDUgfSIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIi0tPjwvc3R5bGU+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPiIgKyBpZCArICIgVHJhbnNsaXRlcmF0aW9uIENoZWNrPC90aXRsZT48L2hlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHkgYmdjb2xvcj0nI0ZGRkZGRic+PHA+U2VlIDxhIGhyZWY9J1Rlc3RfSW5zdHJ1Y3Rpb25zLmh0bWwnPlRlc3RfSW5zdHJ1Y3Rpb25zLmh0bWw8L2E+IGZvciBkZXRhaWxzLjwvcD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGFibGU+Iik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vb3V0LnByaW50bG4oIjx0cj48dGggd2lkdGg9JzMzJSc+VGhhaTwvdGg+PHRoIHdpZHRoPSczMyUnPkxhdGluPC90aD48dGggd2lkdGg9JzMzJSc+VGhhaTwvdGg+PC90cj4iKTsKKyAgCisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0bCA9IHRyYW5zbGl0OworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgbHQgPSB0bC5nZXRJbnZlcnNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGx0RmlsdGVyID0gdGwuZ2V0SW52ZXJzZSgpOworICAgICAgICAgICAgbHRGaWx0ZXIuc2V0RmlsdGVyKG5ldyBVbmljb2RlU2V0KCJbOl5MdTpdIikpOworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdGxGaWx0ZXIgPSBsdC5nZXRJbnZlcnNlKCk7CisgICAgICAgICAgICB0bEZpbHRlci5zZXRGaWx0ZXIobmV3IFVuaWNvZGVTZXQoIls6Xkx1Ol0iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIls6Xkx1Ol0iICsgIGx0LmdldElEKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBCcmVha0l0ZXJhdG9yIHNlbnRlbmNlQnJlYWsgPSBCcmVha0l0ZXJhdG9yLmdldFNlbnRlbmNlSW5zdGFuY2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnl0ZSB0aXRsZVNldHRpbmcgPSBUSVRMRUxJTkU7CisgICAgICAgICAgICBib29sZWFuIHVwcGVyZmlsdGVyID0gZmFsc2U7CisgICAgICAgICAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbi5yZWFkTGluZSgpOworICAgICAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwpIGJyZWFrOworICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTsKKyAgICAgICAgICAgICAgICBpZiAobGluZS5sZW5ndGgoKSA9PSAwKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT0gJ1x1RkVGRicpIGxpbmUgPSBsaW5lLnN1YnN0cmluZygxKTsgLy8gcmVtb3ZlIEJPTQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PSAnIycpIGNvbnRpbnVlOyAvLyBjb21tZW50cworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChsaW5lLmVxdWFscygiQFRJVExFQ0FTRUAiKSkgeworICAgICAgICAgICAgICAgICAgICB0aXRsZVNldHRpbmcgPSBUSVRMRVdPUkQ7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSd0aXRsZSc+PGI+TmFtZXM8L2I+PC90ZD48L3RyPiIpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuZXF1YWxzKCJAVVBQRVJGSUxURVJAIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBwZXJmaWx0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgiQFNFVCIpKSB7CisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTZXQgcyA9IG5ldyBVbmljb2RlU2V0KGxpbmUuc3Vic3RyaW5nKDQpLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSd0aXRsZSc+PGI+Q2hhcmFjdGVyczwvYj48L3RkPjwvdHI+Iik7CisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTZXRJdGVyYXRvciBpdCA9IG5ldyBVbmljb2RlU2V0SXRlcmF0b3Iocyk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFNlbnRlbmNlVG9UYWJsZShvdXQsIGl0LmNvZGVwb2ludCAhPSBpdC5JU19TVFJJTkcgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBVVEYxNi52YWx1ZU9mKGl0LmNvZGVwb2ludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0LnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT05FLCB0cnVlLCB0ZXN0Um91bmRUcmlwLCBmaXJzdCwgdGwsIGx0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZW50ZW5jZUJyZWFrLnNldFRleHQobGluZSk7CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZW5kID0gc2VudGVuY2VCcmVhay5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gc2VudGVuY2VCcmVhay5ET05FKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvcmVTZW50ZW5jZSA9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ29yZTogIiArIGhleC50cmFuc2xpdGVyYXRlKGNvcmVTZW50ZW5jZSkpOworICAgICAgICAgICAgICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGludCBvbGRQb3MgPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAob2xkUG9zIDwgY29yZVNlbnRlbmNlLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYWNrLCBiZWNhdXNlIHNlbnRlbmNlIGRvZXNuJ3Qgc2VlbSB0byBiZSB3b3JraW5nIHJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gY29yZVNlbnRlbmNlLmluZGV4T2YoIi4gIiwgb2xkUG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPCAwKSBwb3MgPSBjb3JlU2VudGVuY2UubGVuZ3RoKCk7IGVsc2UgcG9zID0gcG9zKzI7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zMiA9IGNvcmVTZW50ZW5jZS5pbmRleE9mKCdcdTMwMDInLCBvbGRQb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvczIgPCAwKSBwb3MyID0gY29yZVNlbnRlbmNlLmxlbmd0aCgpOyBlbHNlIHBvczIgPSBwb3MyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPiBwb3MyKSBwb3MgPSBwb3MyOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNlbnRlbmNlID0gY29yZVNlbnRlbmNlLnN1YnN0cmluZyhvbGRQb3MsIHBvcykudHJpbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlNlbnRlbmNlOiAiICsgaGV4LnRyYW5zbGl0ZXJhdGUoY29yZVNlbnRlbmNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRQb3MgPSBwb3M7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFNlbnRlbmNlVG9UYWJsZShvdXQsIHNlbnRlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlU2V0dGluZywgZmFsc2UsIHRlc3RSb3VuZFRyaXAsIGZpcnN0LCB0bCwgbHQpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdGFibGU+PC9ib2R5PiIpOworICAgICAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5vdyB3cml0ZSB0aGUgc291cmNlL3RhcmdldCBzZXRzCisgICAgICAgICAgICBpZiAoZ2VuZXJhdGVTZXRzKSB7CisgICAgICAgICAgICAgICAgb3V0RmlsZSA9IG5ldyBGaWxlKHRhcmdldEZpbGUgKyAiX1NldHMuaHRtbCIpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JpdGluZzogIiArIG91dEZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoCisgICAgICAgICAgICAgICAgICAgIG5ldyBCdWZmZXJlZFdyaXRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0RmlsZSksICJVVEYtOCIpKSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Jz4iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHN0eWxlPjwhLS0iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiYm9keSAgICAgICAgIHsgZm9udC1mYW1pbHk6ICdBcmlhbCBVbmljb2RlIE1TJywgJ0x1Y2lkYSBTYW5zIFVuaWNvZGUnLCBBcmlhbCwgc2Fucy1zZXJpZjsgbWFyZ2luOiA1IH0iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiLS0+PC9zdHlsZT4iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPiIgKyBpZCArICIgVHJhbnNsaXRlcmF0aW9uIFNldHM8L3RpdGxlPjwvaGVhZD4iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHkgYmdjb2xvcj0nI0ZGRkZGRic+Iik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IGRhc2hQb3MgPSBpZC5pbmRleE9mKCctJyk7CisgICAgICAgICAgICAgICAgaW50IHNsYXNoUG9zID0gaWQuaW5kZXhPZignLycpOworICAgICAgICAgICAgICAgIGlmIChzbGFzaFBvcyA8IDApIHNsYXNoUG9zID0gaWQubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgVW5pY29kZVNldCBzb3VyY2VTdXBlciA9IG51bGw7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRlbXAgPSBpZC5zdWJzdHJpbmcoMCxkYXNoUG9zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAuZXF1YWxzKCJqYSIpKSBzb3VyY2VTdXBlciA9IG5ldyBVbmljb2RlU2V0KCJbWzpIYW46XVs6aGlyYWdhbmE6XVs6a2F0YWthbmE6XV0iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBzb3VyY2VTdXBlciA9IG5ldyBVbmljb2RlU2V0KCJbWzoiICsgdGVtcCArICI6XVs6TW46XVs6TWU6XV0iKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBVbmljb2RlU2V0IHRhcmdldFN1cGVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdXBlciA9IG5ldyBVbmljb2RlU2V0KCJbWzoiICsgaWQuc3Vic3RyaW5nKGRhc2hQb3MrMSwgc2xhc2hQb3MpICsgIjpdWzpNbjpdWzpNZTpdXSIpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBuZmRTdHlsZSA9IENMT1NFX0NBU0UgfCBDTE9TRV9GTEFUVEVOIHwgQ0xPU0VfQ0FOT05JQ0FMOworICAgICAgICAgICAgICAgIGludCBuZmtkU3R5bGUgPSBuZmRTdHlsZSB8IENMT1NFX0NPTVBBVElCSUxJVFk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx1bD4iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHA+PGI+Tm9uZTwvYj48L3A+Iik7CisgICAgICAgICAgICAgICAgc2hvd1NldHMob3V0LCB0cmFuc2xpdCwgbHQsIG51bGwsIG51bGwsIDApOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8cD48Yj5ORkQ8L2I+PC9wPiIpOworICAgICAgICAgICAgICAgIHNob3dTZXRzKG91dCwgdHJhbnNsaXQsIGx0LCBzb3VyY2VTdXBlciwgdGFyZ2V0U3VwZXIsIG5mZFN0eWxlKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHA+PGI+TkZLRDwvYj48L3A+Iik7CisgICAgICAgICAgICAgICAgc2hvd1NldHMob3V0LCB0cmFuc2xpdCwgbHQsIHNvdXJjZVN1cGVyLCB0YXJnZXRTdXBlciwgbmZrZFN0eWxlKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC91bD48L2JvZHk+Iik7CisgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgV3JpdGluZyIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBhZGRTZW50ZW5jZVRvVGFibGUoUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgc2VudGVuY2UsIAorICAgICAgICAgICAgYnl0ZSB0aXRsZVNldHRpbmcsIGJvb2xlYW4gYWRkTmFtZSwgYm9vbGVhbiB0ZXN0Um91bmRUcmlwLCBib29sZWFuIGZpcnN0LAorICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdGwsIFRyYW5zbGl0ZXJhdG9yIGx0KSB7CisgICAgICAgIGlmIChzZW50ZW5jZS5sZW5ndGgoKSA9PSAwKSByZXR1cm47IC8vIHNraXAgZW1wdHkgbGluZXMKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBvcmlnaW5hbFNob3cgPSBzZW50ZW5jZTsKKyAgICAgICAgU3RyaW5nIGxhdGluOworICAgICAgICBsYXRpbiA9IHRsLnRyYW5zbGl0ZXJhdGUoc2F2ZUFzY2lpLnRyYW5zbGl0ZXJhdGUoc2VudGVuY2UpKTsKKworICAgICAgICBTdHJpbmcgbGF0aW5TaG93ID0gbGF0aW47CisgICAgICAgIGlmICh0aXRsZVNldHRpbmcgPT0gVElUTEVXT1JEKSB7CisgICAgICAgICAgICBsYXRpblNob3cgPSB0aXRsZS50cmFuc2xpdGVyYXRlKGxhdGluKTsKKyAgICAgICAgfSBlbHNlIGlmICh0aXRsZVNldHRpbmcgPT0gVElUTEVMSU5FKSB7CisgICAgICAgICAgICBsYXRpblNob3cgPSB0aXRsZWNhc2VGaXJzdFdvcmQobGF0aW5TaG93KTsKKyAgICAgICAgfQorICAgICAgICBsYXRpblNob3cgPSByZXN0b3JlQXNjaWkudHJhbnNsaXRlcmF0ZShsYXRpblNob3cpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyByZXZlcnNlOworICAgICAgICByZXZlcnNlID0gcmVzdG9yZUFzY2lpLnRyYW5zbGl0ZXJhdGUobHQudHJhbnNsaXRlcmF0ZShsYXRpbikpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBORktEU2VudGVuY2UgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShzZW50ZW5jZSwgTm9ybWFsaXplci5ORktEKTsKKyAgICAgICAgU3RyaW5nIE5GS0RMYXRpbiA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGxhdGluLCBOb3JtYWxpemVyLk5GS0QpOworICAgICAgICBTdHJpbmcgTkZLRFJldmVyc2UgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShyZXZlcnNlLCBOb3JtYWxpemVyLk5GS0QpOworICAgICAgICAKKyAgICAgICAgaWYgKGxhdGluU2hvdy5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICBsYXRpblNob3cgPSAiPGk+ZW1wdHk8L2k+IjsKKyAgICAgICAgfSBlbHNlIGlmIChORktEU2VudGVuY2UuZXF1YWxzKE5GS0RMYXRpbikpIHsKKyAgICAgICAgICAgIGxhdGluU2hvdyA9ICI8c3BhbiBjbGFzcz0ncic+IiArIGxhdGluU2hvdyArICI8L3NwYW4+IjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcmV2ZXJzZVNob3cgPSByZXZlcnNlOworICAgICAgICAKKyAgICAgICAgaWYgKHRlc3RSb3VuZFRyaXAgJiYgIU5GS0RSZXZlcnNlLmVxdWFscyhORktEU2VudGVuY2UpKSB7CisgICAgICAgICAgICBpbnQgbWluTGVuID0gcmV2ZXJzZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChtaW5MZW4gPiBzZW50ZW5jZS5sZW5ndGgoKSkgbWluTGVuID0gc2VudGVuY2UubGVuZ3RoKCk7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5MZW47ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChyZXZlcnNlLmNoYXJBdChpKSAhPSBzZW50ZW5jZS5jaGFyQXQoaSkpIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9vcmlnaW5hbFNob3cgPSBzZW50ZW5jZS5zdWJzdHJpbmcoMCxpKSArICI8c3BhbiBjbGFzcz0nZCc+IiArIHNlbnRlbmNlLnN1YnN0cmluZyhpKSArICI8L3NwYW4+IjsKKyAgICAgICAgICAgIHJldmVyc2VTaG93ID0gcmV2ZXJzZVNob3cubGVuZ3RoKCkgPT0gMCAKKyAgICAgICAgICAgICAgICA/ICI8aT5lbXB0eTwvaT4iIAorICAgICAgICAgICAgICAgIC8vOiByZXZlcnNlLnN1YnN0cmluZygwLGkpICsgIjxzcGFuIGNsYXNzPSdkJz4iICsgcmV2ZXJzZS5zdWJzdHJpbmcoaSkgKyAiPC9zcGFuPiI7CisgICAgICAgICAgICAgICAgOiBzaG93RGlmZmVyZW5jZShzZW50ZW5jZSwgcmV2ZXJzZSk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRyPjx0ZCBjbGFzcz0ncyciICsgKGZpcnN0ID8gIiB3aWR0aD0nNTAlJz4iIDogIj4iKSArIG9yaWdpbmFsU2hvdyAKKyAgICAgICAgICAgICAgICArICI8L3RkPjx0ZCByb3dTcGFuPScyJz4iICsgbGF0aW5TaG93CisgICAgICAgICAgICAgICAgKyAiPC90ZD48L3RyPjx0cj48dGQgY2xhc3M9J3InPiIgKyByZXZlcnNlU2hvdworICAgICAgICAgICAgICAgICsgIjwvdGQ+PC90cj4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+PHRkIGNsYXNzPSdzJyIgKyAoZmlyc3QgPyAiIHdpZHRoPSc1MCUnPiIgOiAiPiIpICsgb3JpZ2luYWxTaG93IAorICAgICAgICAgICAgICAgICsgIjwvdGQ+PHRkPiIgKyBsYXRpblNob3cKKyAgICAgICAgICAgICAgICArICI8L3RkPjwvdHI+Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFkZE5hbWUpIHsKKyAgICAgICAgICAgIGxhdGluU2hvdyA9IGhleEFuZE5hbWUudHJhbnNsaXRlcmF0ZShsYXRpbik7CisgICAgICAgICAgICBpZiAobGF0aW5TaG93Lmxlbmd0aCgpID09IDApIGxhdGluU2hvdyA9ICI8aT5lbXB0eTwvaT4iOworICAgICAgICAgICAgb3JpZ2luYWxTaG93ID0gaGV4QW5kTmFtZS50cmFuc2xpdGVyYXRlKHNlbnRlbmNlKTsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbFNob3cubGVuZ3RoKCkgPT0gMCkgb3JpZ2luYWxTaG93ID0gIjxpPmVtcHR5PC9pPiI7CisKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+PHRkIGNsYXNzPSduJz4iICsgb3JpZ2luYWxTaG93CisgICAgICAgICAgICAgICAgKyAiPC90ZD48dGQgY2xhc3M9J24nPiIgKyBsYXRpblNob3cKKyAgICAgICAgICAgICAgICArICI8L3RkPjwvdHI+Iik7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50bG4oIjx0cj48dGQ+PC90ZD48L3RyPiIpOworICAgICAgICAKKyAgICB9CisgICAgCisgICAgc3RhdGljIFN0cmluZyBzaG93RGlmZmVyZW5jZShTdHJpbmcgYXMsIFN0cmluZyBicykgeworICAgICAgICBEaWZmZXIgZGlmZmVyID0gbmV3IERpZmZlcigzMDAsIDMpOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpbnQgbWF4ID0gYXMubGVuZ3RoKCk7CisgICAgICAgIGlmIChtYXggPCBicy5sZW5ndGgoKSkgbWF4ID0gYnMubGVuZ3RoKCk7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IG1heDsgKytqKSB7CisgICAgICAgICAgICBpZiAoaiA8IGFzLmxlbmd0aCgpKSBkaWZmZXIuYWRkQShhcy5zdWJzdHJpbmcoaiwgaisxKSk7CisgICAgICAgICAgICBpZiAoaiA8IGJzLmxlbmd0aCgpKSBkaWZmZXIuYWRkQihicy5zdWJzdHJpbmcoaiwgaisxKSk7CisgICAgICAgICAgICBkaWZmZXIuY2hlY2tNYXRjaChqID09IG1heCk7CisKKyAgICAgICAgICAgIGlmIChkaWZmZXIuZ2V0QUNvdW50KCkgIT0gMCB8fCBkaWZmZXIuZ2V0QkNvdW50KCkgIT0gMCkgeworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoIi4uLiIpOworICAgICAgICAgICAgICAgIGlmIChkaWZmZXIuZ2V0QUNvdW50KCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKCI8c3BhbiBjbGFzcz0ncic+Iik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlmZmVyLmdldEFDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoZGlmZmVyLmdldEEoaSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoIjwvc3Bhbj4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRpZmZlci5nZXRCQ291bnQoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoIjxzcGFuIGNsYXNzPSdkJz4iKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWZmZXIuZ2V0QkNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZChkaWZmZXIuZ2V0QihpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgiPC9zcGFuPiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKCIuLi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHNob3dTZXRzKFByaW50V3JpdGVyIG91dCwgVHJhbnNsaXRlcmF0b3IgdHJhbnNsaXQsIFRyYW5zbGl0ZXJhdG9yIGludmVyc2UsCisgICAgICBVbmljb2RlU2V0IHNvdXJjZVN1cGVyLCBVbmljb2RlU2V0IHRhcmdldFN1cGVyLCBpbnQgb3B0aW9ucykgeworICAgICAgICBvdXQucHJpbnRsbigiPGxpPlNvdXJjZSBTZXQ6PHVsPjxsaT4iICsgICAgICAgICB0b1BhdHRlcm4oY2xvc2VVbmljb2RlU2V0KHRyYW5zbGl0LmdldFNvdXJjZVNldCgpLCBvcHRpb25zKSwgc291cmNlU3VwZXIpICsgIjwvbGk+PC91bD48L2xpPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPGxpPlJldmVyc2UgVGFyZ2V0IFNldDo8dWw+PGxpPiIgKyB0b1BhdHRlcm4oY2xvc2VVbmljb2RlU2V0KGludmVyc2UuZ2V0VGFyZ2V0U2V0KCksICBvcHRpb25zKSwgc291cmNlU3VwZXIpICsgIjwvbGk+PC91bD48L2xpPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPGxpPlRhcmdldCBTZXQ6PHVsPjxsaT4iICsgICAgICAgICB0b1BhdHRlcm4oY2xvc2VVbmljb2RlU2V0KHRyYW5zbGl0LmdldFRhcmdldFNldCgpLCBvcHRpb25zKSwgdGFyZ2V0U3VwZXIpICsgIjwvbGk+PC91bD48L2xpPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPGxpPlJldmVyc2UgU291cmNlIFNldDo8dWw+PGxpPiIgKyB0b1BhdHRlcm4oY2xvc2VVbmljb2RlU2V0KGludmVyc2UuZ2V0U291cmNlU2V0KCksICBvcHRpb25zKSwgdGFyZ2V0U3VwZXIpICsgIjwvbGk+PC91bD48L2xpPiIpOworICAgIH0KKyAgICAgICAgCisgICAgc3RhdGljIGZpbmFsIGludCBDTE9TRV9DQVNFID0gMSwgQ0xPU0VfRkxBVFRFTiA9IDIsIENMT1NFX0NBTk9OSUNBTCA9IDQsIENMT1NFX0NPTVBBVElCSUxJVFkgPSA4OworICAgIAorICAgIHN0YXRpYyBVbmljb2RlU2V0IGNsb3NlVW5pY29kZVNldChVbmljb2RlU2V0IHNvdXJjZSwgaW50IG9wdGlvbnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMgPT0gMCkgcmV0dXJuIHNvdXJjZTsKKyAgICAgICAgCisgICAgICAgIFVuaWNvZGVTZXRJdGVyYXRvciBpdCA9IG5ldyBVbmljb2RlU2V0SXRlcmF0b3Ioc291cmNlKTsKKyAgICAgICAgVW5pY29kZVNldCBhZGRpdGlvbnMgPSBuZXcgVW5pY29kZVNldCgpOyAvLyB0byBhdm9pZCBtZXNzaW5nIHVwIGl0ZXJhdG9yCisgICAgICAgIFVuaWNvZGVTZXQgcmVtb3ZhbHMgPSBuZXcgVW5pY29kZVNldCgpOyAvLyB0byBhdm9pZCBtZXNzaW5nIHVwIGl0ZXJhdG9yCisgICAgICAgIFN0cmluZyBiYXNlOworICAgICAgICBpbnQgY3A7CisgICAgICAgIAorICAgICAgICAvLyBBZGQgYWxsIGNhc2UgZXF1aXZhbGVudHMKKyAgICAgICAgaWYgKChvcHRpb25zICYgQ0xPU0VfQ0FTRSkgIT0gMCkgeworICAgICAgICAgICAgd2hpbGUgKGl0Lm5leHQoKSkgeworICAgICAgICAgICAgICAgIGNwID0gaXQuY29kZXBvaW50OworICAgICAgICAgICAgICAgIGlmIChjcCA9PSBpdC5JU19TVFJJTkcpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGludCB0eXBlID0gVUNoYXJhY3Rlci5nZXRUeXBlKGNwKTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBDaGFyYWN0ZXIuVVBQRVJDQVNFX0xFVFRFUiB8fCB0eXBlID09IENoYXJhY3Rlci5MT1dFUkNBU0VfTEVUVEVSIHx8IHR5cGUgPT0gQ2hhcmFjdGVyLlRJVExFQ0FTRV9MRVRURVIpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25zLmFkZChVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKFVURjE2LnZhbHVlT2YoY3ApKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9ucy5hZGQoVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShVVEYxNi52YWx1ZU9mKGNwKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZS5hZGRBbGwoYWRkaXRpb25zKTsKKyAgICAgICAgfQorICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGNhbm9uaWNhbCBjbG9zdXJlIG9mIGFsbCBzdHJpbmdzIGFuZCBjaGFyYWN0ZXJzIGluIHNvdXJjZQorICAgICAgICBpZiAoKG9wdGlvbnMgJiBDTE9TRV9DQU5PTklDQUwpICE9IDApIHsKKyAgICAgICAgICAgIGl0LnJlc2V0KCk7CisgICAgICAgICAgICBhZGRpdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgICAgIENhbm9uaWNhbEl0ZXJhdG9yIGNpID0gbmV3IENhbm9uaWNhbEl0ZXJhdG9yKCIuIik7CisgICAgICAgICAgICB3aGlsZSAoaXQubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LmNvZGVwb2ludCA9PSBpdC5JU19TVFJJTkcpIGJhc2UgPSBpdC5zdHJpbmc7CisgICAgICAgICAgICAgICAgZWxzZSBiYXNlID0gVVRGMTYudmFsdWVPZihpdC5jb2RlcG9pbnQpOworICAgICAgICAgICAgICAgIGNpLnNldFNvdXJjZShiYXNlKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdHJpYWwgPSBjaS5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmlhbCA9PSBudWxsKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyaWFsLmVxdWFscyhiYXNlKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9ucy5hZGQodHJpYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZS5hZGRBbGwoYWRkaXRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGZsYXR0ZW4gc3RyaW5ncworICAgICAgICBpZiAoKG9wdGlvbnMgJiBDTE9TRV9GTEFUVEVOKSAhPSAwKSB7CisgICAgICAgICAgICBpdC5yZXNldCgpOworICAgICAgICAgICAgYWRkaXRpb25zLmNsZWFyKCk7CisgICAgICAgICAgICB3aGlsZSAoaXQubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LmNvZGVwb2ludCAhPSBpdC5JU19TVFJJTkcpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGFkZGl0aW9ucy5hZGRBbGwoaXQuc3RyaW5nKTsKKyAgICAgICAgICAgICAgICByZW1vdmFscy5hZGQoaXQuc3RyaW5nKTsKKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZmxhdHRlbmluZyAnIiArIGhleC50cmFuc2xpdGVyYXRlKGl0LnN0cmluZykgKyAiJyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlLmFkZEFsbChhZGRpdGlvbnMpOworICAgICAgICAgICAgc291cmNlLnJlbW92ZUFsbChyZW1vdmFscyk7CisgICAgICAgIH0KKyAgICAgICAKKyAgICAgICAgLy8gTm93IGFkZCBkZWNvbXBvc2l0aW9ucyBvZiBjaGFyYWN0ZXJzIGluIHNvdXJjZQorICAgICAgICBpZiAoKG9wdGlvbnMgJiBDTE9TRV9DT01QQVRJQklMSVRZKSAhPSAwKSB7CisgICAgICAgICAgICBpdC5yZXNldChzb3VyY2UpOworICAgICAgICAgICAgYWRkaXRpb25zLmNsZWFyKCk7CisgICAgICAgICAgICB3aGlsZSAoaXQubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LmNvZGVwb2ludCA9PSBpdC5JU19TVFJJTkcpIGJhc2UgPSBpdC5zdHJpbmc7CisgICAgICAgICAgICAgICAgZWxzZSBiYXNlID0gVVRGMTYudmFsdWVPZihpdC5jb2RlcG9pbnQpOworICAgICAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLmlzTm9ybWFsaXplZChiYXNlLCBOb3JtYWxpemVyLk5GS0QpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGVjb21wID0gTm9ybWFsaXplci5ub3JtYWxpemUoYmFzZSwgTm9ybWFsaXplci5ORktEKTsKKyAgICAgICAgICAgICAgICBhZGRpdGlvbnMuYWRkKGRlY29tcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2UuYWRkQWxsKGFkZGl0aW9ucyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5vdyBhZGQgYW55IG90aGVyIGNoYXJhY3RlciB0aGF0IGRlY29tcG9zZXMgdG8gYSBjaGFyYWN0ZXIgaW4gc291cmNlCisgICAgICAgICAgICBmb3IgKGNwID0gMDsgY3AgPCAweDEwRkZGRjsgKytjcCkgeworICAgICAgICAgICAgICAgIGlmICghVUNoYXJhY3Rlci5pc0RlZmluZWQoY3ApKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoTm9ybWFsaXplci5pc05vcm1hbGl6ZWQoY3AsIE5vcm1hbGl6ZXIuTkZLRCkpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY29udGFpbnMoY3ApKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGVjb21wID0gTm9ybWFsaXplci5ub3JtYWxpemUoY3AsIE5vcm1hbGl6ZXIuTkZLRCk7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jb250YWluc0FsbChkZWNvbXApKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkaW5nOiAiICsgSW50ZWdlci50b1N0cmluZyhjcCwxNikgKyAiICIgKyBVQ2hhcmFjdGVyLmdldE5hbWUoY3ApKTsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLmFkZChjcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RyaW5nIHRvUGF0dGVybihVbmljb2RlU2V0IHNvdXJjZSwgVW5pY29kZVNldCBzdXBlcnNldCkgeworICAgICAgICBpZiAoc3VwZXJzZXQgIT0gbnVsbCkgeworICAgICAgICAgICAgc291cmNlLnJlbW92ZUFsbChzdXBlcnNldCk7CisgICAgICAgICAgICByZXR1cm4gIlsiICsgc3VwZXJzZXQudG9QYXR0ZXJuKHRydWUpICsgIiAiICsgc291cmNlLnRvUGF0dGVybih0cnVlKSArICJdIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc291cmNlLnRvUGF0dGVybih0cnVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEJyZWFrSXRlcmF0b3IgYmkgPSBCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZSgpOworICAgIAorICAgIHN0YXRpYyBTdHJpbmcgdGl0bGVjYXNlRmlyc3RXb3JkKFN0cmluZyBsaW5lKSB7CisgICAgICAgIC8vIHNlYXJjaCBmb3IgZmlyc3Qgd29yZCB3aXRoIGxldHRlcnMuIElmIHRoZSBmaXJzdCBsZXR0ZXIgaXMgbG93ZXIsIHRoZW4gdGl0bGVjYXNlIGl0LgorICAgICAgICBiaS5zZXRUZXh0KGxpbmUpOworICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaW50IGVuZCA9IGJpLm5leHQoKTsKKyAgICAgICAgICAgIGlmIChlbmQgPT0gYmkuRE9ORSkgYnJlYWs7CisgICAgICAgICAgICBpbnQgZmlyc3RMZXR0ZXJUeXBlID0gZ2V0Rmlyc3RMZXR0ZXJUeXBlKGxpbmUsIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgaWYgKGZpcnN0TGV0dGVyVHlwZSAhPSBDaGFyYWN0ZXIuVU5BU1NJR05FRCkgeworICAgICAgICAgICAgICAgIGlmIChmaXJzdExldHRlclR5cGUgIT0gQ2hhcmFjdGVyLkxPV0VSQ0FTRV9MRVRURVIpIGJyZWFrOworICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydCkgCisgICAgICAgICAgICAgICAgICAgICsgVUNoYXJhY3Rlci50b1RpdGxlQ2FzZShsaW5lLnN1YnN0cmluZyhzdGFydCwgZW5kKSwgYmkpCisgICAgICAgICAgICAgICAgICAgICsgbGluZS5zdWJzdHJpbmcoZW5kKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZCA9IHN0YXJ0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaW5lOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZmluYWwgaW50IExFVFRFUl9NQVNLID0gCisgICAgICAgICAgKDE8PENoYXJhY3Rlci5VUFBFUkNBU0VfTEVUVEVSKQorICAgICAgICB8ICgxPDxDaGFyYWN0ZXIuTE9XRVJDQVNFX0xFVFRFUikKKyAgICAgICAgfCAoMTw8Q2hhcmFjdGVyLlRJVExFQ0FTRV9MRVRURVIpCisgICAgICAgIHwgKDE8PENoYXJhY3Rlci5NT0RJRklFUl9MRVRURVIpCisgICAgICAgIHwgKDE8PENoYXJhY3Rlci5PVEhFUl9MRVRURVIpCisgICAgICAgIDsKKyAgICAKKyAgICBzdGF0aWMgaW50IGdldEZpcnN0TGV0dGVyVHlwZShTdHJpbmcgbGluZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgICAgIGludCBjcDsKKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAgICAgICAgIGNwID0gVVRGMTYuY2hhckF0KGxpbmUsIGkpOworICAgICAgICAgICAgaW50IHR5cGUgPSBVQ2hhcmFjdGVyLmdldFR5cGUoY3ApOworICAgICAgICAgICAgaWYgKCgoMTw8dHlwZSkgJiBMRVRURVJfTUFTSykgIT0gMCkgcmV0dXJuIHR5cGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlci5VTkFTU0lHTkVEOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBwcmludE5hbWVzKFVuaWNvZGVTZXQgcywgU3RyaW5nIHRhcmdldEZpbGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEZpbGUgb3V0RmlsZSA9IG5ldyBGaWxlKHRhcmdldEZpbGUpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcml0aW5nOiAiICsgb3V0RmlsZS5nZXRDYW5vbmljYWxQYXRoKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKAorICAgICAgICAgICAgICAgIG5ldyBCdWZmZXJlZFdyaXRlcigKKyAgICAgICAgICAgICAgICAgICAgbmV3IE91dHB1dFN0cmVhbVdyaXRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dEZpbGUpLCAiVVRGLTgiKSkpOworICAgICAgICAgICAgVW5pY29kZVNldCBtYWluID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVW5pY29kZVNldCBvdGhlcnMgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIGl0ID0gbmV3IFVuaWNvZGVTZXRJdGVyYXRvcihzKTsKKyAgICAgICAgICAgIHdoaWxlIChpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVVDaGFyYWN0ZXIuaXNEZWZpbmVkKGl0LmNvZGVwb2ludCkpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghTm9ybWFsaXplci5pc05vcm1hbGl6ZWQoaXQuY29kZXBvaW50LCBOb3JtYWxpemVyLk5GRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGl0LmNvZGVwb2ludCwgTm9ybWFsaXplci5ORkQpOworICAgICAgICAgICAgICAgICAgICBvdGhlcnMuYWRkQWxsKGRlY29tcCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiICIgKyBVVEYxNi52YWx1ZU9mKGl0LmNvZGVwb2ludCkgKyAiIDw+IFhYWCAjICIgKyBVQ2hhcmFjdGVyLmdldE5hbWUoaXQuY29kZXBvaW50KSk7CisgICAgICAgICAgICAgICAgbWFpbi5hZGQoaXQuY29kZXBvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG90aGVycy5zaXplKCkgIT0gMCkgeworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJEZWNvbXBvc2VkIGNoYXJhY3RlcnMgZm91bmQgYWJvdmU6ICIpOworICAgICAgICAgICAgICAgIG90aGVycy5yZW1vdmVBbGwobWFpbik7CisgICAgICAgICAgICAgICAgaXQucmVzZXQob3RoZXJzKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXQubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCIgIiArIFVURjE2LnZhbHVlT2YoaXQuY29kZXBvaW50KSArICIgPD4gWFhYICMgIiArIFVDaGFyYWN0ZXIuZ2V0TmFtZShpdC5jb2RlcG9pbnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIFdyaXRpbmciKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIFRyYW5zbGl0ZXJhdG9yIGhleCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJbXlxcdTAwMjAtXFx1MDA3RV0gaGV4Iik7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBzYXZlUnVsZXMgPSAKKyAgICAgICAgICAiQSA8PiBcdUVBNDE7IEIgPD4gXHVFQTQyOyBDIDw+IFx1RUE0MzsgRCA8PiBcdUVBNDQ7IEUgPD4gXHVFQTQ1OyBGIDw+IFx1RUE0NjsgRyA8PiBcdUVBNDc7IEggPD4gXHVFQTQ4OyBJIDw+IFx1RUE0OTsgIgorICAgICAgICArICJKIDw+IFx1RUE0QTsgSyA8PiBcdUVBNEI7IEwgPD4gXHVFQTRDOyBNIDw+IFx1RUE0RDsgTiA8PiBcdUVBNEU7IE8gPD4gXHVFQTRGOyBQIDw+IFx1RUE1MDsgUSA8PiBcdUVBNTE7IFIgPD4gXHVFQTUyOyAiCisgICAgICAgICsgIlMgPD4gXHVFQTUzOyBUIDw+IFx1RUE1NDsgVSA8PiBcdUVBNTU7IFYgPD4gXHVFQTU2OyBXIDw+IFx1RUE1NzsgWCA8PiBcdUVBNTg7IFkgPD4gXHVFQTU5OyBaIDw+IFx1RUE1QTsgIgorICAgICAgICArICJhIDw+IFx1RUE2MTsgYiA8PiBcdUVBNjI7IGMgPD4gXHVFQTYzOyBkIDw+IFx1RUE2NDsgZSA8PiBcdUVBNjU7IGYgPD4gXHVFQTY2OyBnIDw+IFx1RUE2NzsgaCA8PiBcdUVBNjg7IGkgPD4gXHVFQTY5OyAiCisgICAgICAgICsgImogPD4gXHVFQTZBOyBrIDw+IFx1RUE2QjsgbCA8PiBcdUVBNkM7IG0gPD4gXHVFQTZEOyBuIDw+IFx1RUE2RTsgbyA8PiBcdUVBNkY7IHAgPD4gXHVFQTcwOyBxIDw+IFx1RUE3MTsgciA8PiBcdUVBNzI7ICIKKyAgICAgICAgKyAicyA8PiBcdUVBNzM7IHQgPD4gXHVFQTc0OyB1IDw+IFx1RUE3NTsgdiA8PiBcdUVBNzY7IHcgPD4gXHVFQTc3OyB4IDw+IFx1RUE3ODsgeSA8PiBcdUVBNzk7IHogPD4gXHVFQTdBOyI7CisgICAgICAgIAorICAgIHN0YXRpYyBUcmFuc2xpdGVyYXRvciBzYXZlQXNjaWkgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoImFzY2lpLXNhdmVkIiwgc2F2ZVJ1bGVzLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICBzdGF0aWMgVHJhbnNsaXRlcmF0b3IgcmVzdG9yZUFzY2lpID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJhc2NpaS1zYXZlZCIsIHNhdmVSdWxlcywgVHJhbnNsaXRlcmF0b3IuUkVWRVJTRSk7CisgICAgCisgICAgc3RhdGljIHsKKyAgICAgICAgCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAKKyAgICAgICAgZm9yIChjaGFyIGkgPSAnQSc7IGkgPD0gJ3onOyArK2kpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoaSArICIgPD4gIiArIGhleC50cmFuc2xpdGVyYXRlKFN0cmluZy52YWx1ZU9mKChjaGFyKSgweEVBMDAgKyBpKSkpICsgIjsgIik7CisgICAgICAgIH0KKworICAgICAgICBVbmljb2RlU2V0IHggPSBuZXcgVW5pY29kZVNldCgiW1s6XmNjYz0wOl0mWzpeY2NjPTIzMDpdXSIpOworICAgICAgICB4ID0geC5jb21wbGVtZW50KCk7CisgICAgICAgIHggPSB4LmNvbXBsZW1lbnQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0OiAiICsgeC50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICAKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgeSA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygieHh4IiwgIiRub3RBYm92ZSA9IFtbOl5jY2M9MDpdJls6XmNjYz0yMzA6XV07IHUgKCRub3RBYm92ZSopIFx1MDMwOCA+IFhYWCB8ICQxOyAiLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZ1tdIHRlc3RMaXN0ID0geyJ1XHUwMzA4IiwgInVcdTAzMTZcdTAzMDgiLCAidVx1MDMwOFx1MDMxNiIsICJ1XHUwMzAxXHUwMzA4IiwgInVcdTAzMDhcdTAzMDEifTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0TGlzdC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIHl5ID0geS50cmFuc2xpdGVyYXRlKHRlc3RMaXN0W2ldKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZXgudHJhbnNsaXRlcmF0ZSh0ZXN0TGlzdFtpXSkgKyAiID0+ICIgKyBoZXgudHJhbnNsaXRlcmF0ZSh5eSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvL3ByaW50TmFtZXMobmV3IFVuaWNvZGVTZXQoIltcdTA2MDAtXHUwNkZGXSIpLCAiQXJhYmljLUxhdGluLnR4dCIpOworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8qICAKKyAgICAgICAgQnJlYWtUcmFuc2xpdGVyYXRvci5yZWdpc3RlcigpOworICAgICAgICAKKyAgICAJQnJlYWtUcmFuc2xpdGVyYXRvciB0ZXN0VHJhbnMgPSBuZXcgQnJlYWtUcmFuc2xpdGVyYXRvcigiQW55LVhYWCIsIG51bGwsIG51bGwsICIkIik7CisgICAgCVN0cmluZyB0ZXN0U291cmNlID0gIlRoZSBRdWljazogICBCcm93biBmb3gtLWp1bXBlZC4iOworICAgIAlCcmVha0l0ZXJhdG9yIGJpID0gdGVzdFRyYW5zLmdldEJyZWFrSXRlcmF0b3IoKTsKKyAgICAgICAgYmkuc2V0VGV4dChuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGVzdFNvdXJjZSkpOworICAgICAgICBwcmludEJyZWFrcygwLCB0ZXN0U291cmNlLCBiaSk7CisgICAgICAgIC8vYmkuc2V0VGV4dChVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2UodGVzdFNvdXJjZSkpOworICAgICAgICAvL3ByaW50QnJlYWtzKDEsIHRlc3RTb3VyY2UsIGJpKTsKKyAgICAgICAgCisgICAgICAgIHByaW50SXRlcmF0aW9uKDIsIHRlc3RTb3VyY2UsIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXN0U291cmNlKSk7CisgICAgICAgIC8vcHJpbnRJdGVyYXRpb24oMywgdGVzdFNvdXJjZSwgVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHRlc3RTb3VyY2UpKTsKKyAgICAgICAgCisgICAgCQorICAgIAkKKyAgICAJU3RyaW5nIHRlc3QgPSB0ZXN0VHJhbnMudHJhbnNsaXRlcmF0ZSh0ZXN0U291cmNlKTsKKyAgICAJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0MzogIiArIHRlc3QpOworICAgIAlEdW1teUZhY3RvcnkuYWRkKHRlc3RUcmFucy5nZXRJRCgpLCB0ZXN0VHJhbnMpOworICAgIAkqLworICAgIAkKKyAgICAJLy8gQW55VHJhbnNsaXRlcmF0b3IuU2NyaXB0UnVuSXRlcmF0b3IucmVnaXN0ZXJBbnlUb1NjcmlwdCgpOworICAgIAkKKyAgICAJQW55VHJhbnNsaXRlcmF0b3IgYXQgPSBuZXcgQW55VHJhbnNsaXRlcmF0b3IoIkdyZWVrIiwgbnVsbCk7CisgICAgCWF0LnRyYW5zbGl0ZXJhdGUoIihjYXQsXHUwM2IxLFx1MDkxNSkiKTsKKyAgICAJRHVtbXlGYWN0b3J5LmFkZChhdC5nZXRJRCgpLCBhdCk7CisgICAgCQorICAgIAlhdCA9IG5ldyBBbnlUcmFuc2xpdGVyYXRvcigiRGV2YW5hZ2FyaSIsIG51bGwpOworICAgIAlhdC50cmFuc2xpdGVyYXRlKCIoY2F0LFx1MDNiMSxcdTA5MTUpIik7CisgICAgCUR1bW15RmFjdG9yeS5hZGQoYXQuZ2V0SUQoKSwgYXQpOworICAgIAkKKyAgICAJYXQgPSBuZXcgQW55VHJhbnNsaXRlcmF0b3IoIkxhdGluIiwgbnVsbCk7CisgICAgCWF0LnRyYW5zbGl0ZXJhdGUoIihjYXQsXHUwM2IxLFx1MDkxNSkiKTsKKyAgICAJRHVtbXlGYWN0b3J5LmFkZChhdC5nZXRJRCgpLCBhdCk7CisgICAgCQorICAgICAgICBEdW1teUZhY3RvcnkuYWRkKCJBbnktZ2lmIiwgVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJnaWYiLCAiJ1xcJ3UoLi4pKC4uKSA+ICc8aW1nIHNyYz1cImh0dHA6Ly93d3cudW5pY29kZS5vcmcvZ2lmcy8yNC8nICQxICcvVScgJDEkMiAnLmdpZlwiPic7IiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCkpOyAgICAJCisgICAgICAgIER1bW15RmFjdG9yeS5hZGQoImdpZi1BbnkiLCBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LU51bGwiKSk7ICAgIAkKKworICAgICAgICBEdW1teUZhY3RvcnkuYWRkKCJBbnktUmVtb3ZlQ3VybHkiLCBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIlJlbW92ZUN1cmx5IiwgIltcXHtcXH1dID4gOyIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpKTsgICAgCQorICAgICAgICBEdW1teUZhY3RvcnkuYWRkKCJSZW1vdmVDdXJseS1BbnkiLCBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LU51bGwiKSk7CisgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyeWluZyAmaGV4Iik7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoImhleDIiLCAiKC4pID4gJmhleCgkMSk7IiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnaXN0ZXJpbmciKTsKKyAgICAgICAgRHVtbXlGYWN0b3J5LmFkZCgiQW55LWhleDIiLCB0KTsgICAgCQorICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcnlpbmcgJmdpZiIpOworICAgICAgICB0ID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJnaWYyIiwgIiguKSA+ICZhbnktZ2lmKCQxKTsiLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWdpc3RlcmluZyIpOworICAgICAgICBEdW1teUZhY3RvcnkuYWRkKCJBbnktZ2lmMiIsIHQpOyAgICAKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIHNldFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBuYW1lLCBTdHJpbmcgaWQpIHsKKyAgICAgICAgaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdDogIiArIG5hbWUpOworICAgICAgICBpZiAoaWQgPT0gbnVsbCkgeworICAgICAgICAJdHJhbnNsaXQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShuYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyByZXZlcnNlSWQgPSAiIjsKKyAgICAgICAgICAgIGludCBwb3MgPSBpZC5pbmRleE9mKCctJyk7CisgICAgICAgICAgICBpZiAocG9zIDwgMCkgeworICAgICAgICAgICAgCXJldmVyc2VJZCA9IGlkICsgIi1BbnkiOworICAgICAgICAgICAgCWlkID0gIkFueS0iICsgaWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBwb3MyID0gaWQuaW5kZXhPZigiLyIsIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKHBvczIgPCAwKSB7CisgICAgICAgICAgICAJICAgIHJldmVyc2VJZCA9IGlkLnN1YnN0cmluZyhwb3MrMSkgKyAiLSIgKyBpZC5zdWJzdHJpbmcoMCxwb3MpOworICAgICAgICAgICAgCX0gZWxzZSB7CisgICAgICAgICAgICAJICAgIHJldmVyc2VJZCA9IGlkLnN1YnN0cmluZyhwb3MrMSwgcG9zMikgKyAiLSIgKyBpZC5zdWJzdHJpbmcoMCxwb3MpICsgaWQuc3Vic3RyaW5nKHBvczIpOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAJCisgICAgICAgIAl0cmFuc2xpdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcyhpZCwgbmFtZSwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIAlpZiAoREVCVUcpIHsKKyAgICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKkZvcndhcmQgUnVsZXMiKTsKKyAgICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oKChSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcil0cmFuc2xpdCkudG9SdWxlcyh0cnVlKSk7CisgICAgICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipTb3VyY2UgU2V0Iik7CisgICAgICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKHRyYW5zbGl0LmdldFNvdXJjZVNldCgpLnRvUGF0dGVybih0cnVlKSk7CisgICAgICAgIAl9CisgICAgICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipUYXJnZXQgU2V0Iik7CisgICAgICAgIAkgICAgVW5pY29kZVNldCB0YXJnZXQgPSB0cmFuc2xpdC5nZXRUYXJnZXRTZXQoKTsKKyAgICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4odGFyZ2V0LnRvUGF0dGVybih0cnVlKSk7CisgICAgICAgIAkgICAgVW5pY29kZVNldCByZXN0ID0gbmV3IFVuaWNvZGVTZXQoIlthLXpdIikucmVtb3ZlQWxsKHRhcmdldCk7CisgICAgICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipBU0NJSSAtIFRhcmdldCBTZXQiKTsKKyAgICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzdC50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICAJICAgIAorICAgICAgICAgICAgRHVtbXlGYWN0b3J5LmFkZChpZCwgdHJhbnNsaXQpOworICAgICAgICAgICAgCisgICAgICAgIAlUcmFuc2xpdGVyYXRvciB0cmFuc2xpdDIgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMocmV2ZXJzZUlkLCBuYW1lLCBUcmFuc2xpdGVyYXRvci5SRVZFUlNFKTsKKyAgICAgICAgCWlmIChERUJVRykgeworICAgICAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqQmFja3dhcmQgUnVsZXMiKTsKKyAgICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oKChSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcil0cmFuc2xpdDIpLnRvUnVsZXModHJ1ZSkpOworICAgICAgICAJfQorICAgICAgICAgICAgRHVtbXlGYWN0b3J5LmFkZChyZXZlcnNlSWQsIHRyYW5zbGl0Mik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHJldiA9IHRyYW5zbGl0LmdldEludmVyc2UoKTsKKyAgICAgICAgCWlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCIqKipJbnZlcnNlIFJ1bGVzIik7CisgICAgICAgIAlpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigoKFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKXJldikudG9SdWxlcyh0cnVlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICB0ZXh0LmZsdXNoKCk7CisgICAgICAgIHRleHQuc2V0VHJhbnNsaXRlcmF0b3IodHJhbnNsaXQpOworICAgICAgICBjb252ZXJ0U2VsZWN0aW9uSXRlbS5zZXRMYWJlbChUcmFuc2xpdGVyYXRvci5nZXREaXNwbGF5TmFtZSh0cmFuc2xpdC5nZXRJRCgpKSk7CisgICAgICAgIAorICAgICAgICBhZGRIaXN0b3J5KHRyYW5zbGl0KTsKKyAgICAgICAgCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGludjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgCWludiA9IHRyYW5zbGl0LmdldEludmVyc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIAlpbnYgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmIChpbnYgIT0gbnVsbCkgeworICAgICAgICAgICAgYWRkSGlzdG9yeShpbnYpOworICAgICAgICAgICAgc3dhcFNlbGVjdGlvbkl0ZW0uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3YXBTZWxlY3Rpb25JdGVtLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2V0IHRyYW5zbGl0ZXJhdG9yOiAiICsgdHJhbnNsaXQuZ2V0SUQoKQorICAgICAgICAgICAgKyAoaW52ID09IG51bGwgPyAiIGFuZCAiICsgaW52LmdldElEKCkgOiAiIikpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEhpc3RvcnkoVHJhbnNsaXRlcmF0b3IgdHJhbnNsaXQpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSB0cmFuc2xpdC5nZXRJRCgpOworICAgICAgICBNZW51SXRlbSBjbWkgPSAoTWVudUl0ZW0pIGhpc3RvcnlNYXAuZ2V0KG5hbWUpOworICAgICAgICBpZiAoY21pID09IG51bGwpIHsKKyAgICAgICAgICAgIGNtaSA9IG5ldyBNZW51SXRlbSh0cmFuc2xpdC5nZXREaXNwbGF5TmFtZShuYW1lKSk7CisgICAgICAgICAgICBjbWkuYWRkQWN0aW9uTGlzdGVuZXIobmV3IFRyYW5zbGl0ZXJhdGlvbkxpc3RlbmVyKG5hbWUpKTsKKyAgICAgICAgICAgIGhpc3RvcnlNYXAucHV0KG5hbWUsIGNtaSk7CisgICAgICAgICAgICBoaXN0b3J5U2V0LmFkZChjbWkpOworICAgICAgICAgICAgaGlzdG9yeU1lbnUucmVtb3ZlQWxsKCk7CisgICAgICAgICAgICBJdGVyYXRvciBpdCA9IGhpc3RvcnlTZXQuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBoaXN0b3J5TWVudS5hZGQoKE1lbnVJdGVtKWl0Lm5leHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgY2xhc3MgVHJhbnNsaXRlcmF0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciwgSXRlbUxpc3RlbmVyIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRpb25MaXN0ZW5lcihTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgc2V0VHJhbnNsaXRlcmF0b3IobmFtZSwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgaXRlbVN0YXRlQ2hhbmdlZChJdGVtRXZlbnQgZSkgeworICAgICAgICAgICAgaWYgKGUuZ2V0U3RhdGVDaGFuZ2UoKSA9PSBlLlNFTEVDVEVEKSB7CisgICAgICAgICAgICAgICAgc2V0VHJhbnNsaXRlcmF0b3IobmFtZSwgbnVsbCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNldFRyYW5zbGl0ZXJhdG9yKCJBbnktTnVsbCIsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGNsYXNzIEZvbnRBY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIHB1YmxpYyBGb250QWN0aW9uTGlzdGVuZXIoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJGb250OiAiICsgbmFtZSk7CisgICAgICAgICAgICBmb250TmFtZSA9IG5hbWU7CisgICAgICAgICAgICB0ZXh0LnNldEZvbnQobmV3IEZvbnQoZm9udE5hbWUsIEZvbnQuUExBSU4sIGZvbnRTaXplKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgY2xhc3MgU2l6ZUFjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgQWN0aW9uTGlzdGVuZXIgeworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgcHVibGljIFNpemVBY3Rpb25MaXN0ZW5lcihpbnQgc2l6ZSkgeworICAgICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oIlNpemU6ICIgKyBzaXplKTsKKyAgICAgICAgICAgIGZvbnRTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIHRleHQuc2V0Rm9udChuZXcgRm9udChmb250TmFtZSwgRm9udC5QTEFJTiwgZm9udFNpemUpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTZXQgYWRkKFNldCBzLCBFbnVtZXJhdGlvbiBlbnVtKSB7CisgICAgICAgIHdoaWxlKGVudW0uaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIHMuYWRkKGVudW0ubmV4dEVsZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgc29ydGVkIGxpc3Qgb2YgdGhlIHN5c3RlbSB0cmFuc2xpdGVyYXRvcnMuCisgICAgICovCisgICAgIC8qCisgICAgcHJpdmF0ZSBzdGF0aWMgVmVjdG9yIGdldFN5c3RlbVRyYW5zbGl0ZXJhdG9yTmFtZXMoKSB7CisgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOworICAgICAgICBmb3IgKEVudW1lcmF0aW9uIGU9VHJhbnNsaXRlcmF0b3IuZ2V0QXZhaWxhYmxlSURzKCk7CisgICAgICAgICAgICAgZS5oYXNNb3JlRWxlbWVudHMoKTsgKSB7CisgICAgICAgICAgICB2LmFkZEVsZW1lbnQoZS5uZXh0RWxlbWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbnNlcnRpb24gc29ydCwgTyhuXjIpIGFjY2VwdGFibGUgZm9yIHNtYWxsIG4KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPCh2LnNpemUoKS0xKTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgYSA9IChTdHJpbmcpIHYuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgZm9yIChpbnQgaj1pKzE7IGo8di5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIFN0cmluZyBiID0gKFN0cmluZykgdi5lbGVtZW50QXQoaik7CisgICAgICAgICAgICAgICAgaWYgKGEuY29tcGFyZVRvKGIpID4gMCkgeworICAgICAgICAgICAgICAgICAgICB2LnNldEVsZW1lbnRBdChiLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgdi5zZXRFbGVtZW50QXQoYSwgaik7CisgICAgICAgICAgICAgICAgICAgIGEgPSBiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgKi8KKworLyoKKyAgICBwcml2YXRlIHZvaWQgc2V0Tm9UcmFuc2xpdGVyYXRvcigpIHsKKyAgICAgICAgdHJhbnNsaXRJdGVtID0gbm9UcmFuc2xpdEl0ZW07CisgICAgICAgIG5vVHJhbnNsaXRJdGVtLnNldFN0YXRlKHRydWUpOworICAgICAgICBoYW5kbGVTZXRUcmFuc2xpdGVyYXRvcihub1RyYW5zbGl0SXRlbS5nZXRMYWJlbCgpKTsKKyAgICAgICAgY29tcG91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRyYW5zbGl0TWVudS5nZXRJdGVtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBNZW51SXRlbSBpdCA9IHRyYW5zbGl0TWVudS5nZXRJdGVtKGkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG5vVHJhbnNsaXRJdGVtICYmIGl0IGluc3RhbmNlb2YgQ2hlY2tib3hNZW51SXRlbSkgeworICAgICAgICAgICAgICAgICgoQ2hlY2tib3hNZW51SXRlbSkgaXQpLnNldFN0YXRlKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyovCisvKgorICAgIHByaXZhdGUgdm9pZCBoYW5kbGVBZGRUb0NvbXBvdW5kKFN0cmluZyBuYW1lKSB7CisgICAgICAgIGlmIChjb21wb3VuZENvdW50IDwgTUFYX0NPTVBPVU5EKSB7CisgICAgICAgICAgICBjb21wb3VuZFRyYW5zbGl0W2NvbXBvdW5kQ291bnRdID0gZGVjb2RlVHJhbnNsaXRJdGVtKG5hbWUpOworICAgICAgICAgICAgKytjb21wb3VuZENvdW50OworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdFtdID0gbmV3IFRyYW5zbGl0ZXJhdG9yW2NvbXBvdW5kQ291bnRdOworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShjb21wb3VuZFRyYW5zbGl0LCAwLCB0LCAwLCBjb21wb3VuZENvdW50KTsKKyAgICAgICAgICAgIHRyYW5zbGl0ID0gbmV3IENvbXBvdW5kVHJhbnNsaXRlcmF0b3IodCk7CisgICAgICAgICAgICB0ZXh0LnNldFRyYW5zbGl0ZXJhdG9yKHRyYW5zbGl0KTsKKyAgICAgICAgfQorICAgIH0KKyovCisvKgorICAgIHByaXZhdGUgdm9pZCBoYW5kbGVTZXRUcmFuc2xpdGVyYXRvcihTdHJpbmcgbmFtZSkgeworICAgICAgICB0cmFuc2xpdCA9IGRlY29kZVRyYW5zbGl0SXRlbShuYW1lKTsKKyAgICAgICAgdGV4dC5zZXRUcmFuc2xpdGVyYXRvcih0cmFuc2xpdCk7CisgICAgfQorICAgICovCisKKyAgICAvKioKKyAgICAgKiBEZWNvZGUgYSBtZW51IGl0ZW0gdGhhdCBsb29rcyBsaWtlIDx0cmFuc2xpdCBuYW1lPi4KKyAgICAgKi8KKyAgICAgLyoKKyAgICBwcml2YXRlIHN0YXRpYyBUcmFuc2xpdGVyYXRvciBkZWNvZGVUcmFuc2xpdEl0ZW0oU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIChuYW1lLmVxdWFscyhOT19UUkFOU0xJVEVSQVRPUikpCisgICAgICAgICAgICA/IG51bGwgOiBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShuYW1lKTsKKyAgICB9CisgICAgKi8KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVCYXRjaFRyYW5zbGl0ZXJhdGUoVHJhbnNsaXRlcmF0b3IgdHJhbnNsaXQpIHsKKyAgICAgICAgaWYgKHRyYW5zbGl0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzdGFydCA9IHRleHQuZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgaW50IGVuZCA9IHRleHQuZ2V0U2VsZWN0aW9uRW5kKCk7CisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHMgPQorICAgICAgICAgICAgbmV3IFJlcGxhY2VhYmxlU3RyaW5nKHRleHQuZ2V0VGV4dCgpLnN1YnN0cmluZyhzdGFydCwgZW5kKSk7CisKKyAgICAgICAgU3RyaW5nQnVmZmVyIGxvZyA9IG51bGw7CisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgbG9nID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgbG9nLmFwcGVuZCgnIicgKyBzLnRvU3RyaW5nKCkgKyAiXCIgKHN0YXJ0ICIgKyBzdGFydCArCisgICAgICAgICAgICAgICAgICAgICAgICIsIGVuZCAiICsgZW5kICsgIikgLT4gXCIiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUocyk7CisgICAgICAgIFN0cmluZyBzdHIgPSBzLnRvU3RyaW5nKCk7CisKKyAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBsb2cuYXBwZW5kKHN0ciArICJcIiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCYXRjaCAiICsgdHJhbnNsaXQuZ2V0SUQoKSArICI6ICIgKyBsb2cudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICB0ZXh0LnJlcGxhY2VSYW5nZShzdHIsIHN0YXJ0LCBlbmQpOworICAgICAgICB0ZXh0LnNlbGVjdChzdGFydCwgc3RhcnQgKyBzdHIubGVuZ3RoKCkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVDbG9zZSgpIHsKKyAgICAgICAgaGVscERpYWxvZy5kaXNwb3NlKCk7CisgICAgICAgIGRpc3Bvc2UoKTsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICBjbGFzcyBJbmZvRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKKyAgICAgICAgcHJvdGVjdGVkIEJ1dHRvbiBidXR0b247CisgICAgICAgIHByb3RlY3RlZCBUZXh0QXJlYSBhcmVhOworICAgICAgICBwcm90ZWN0ZWQgRGlhbG9nIG1lOworICAgICAgICBwcm90ZWN0ZWQgUGFuZWwgYm90dG9tOworICAgICAgICAKKyAgICAgICAgcHVibGljIFRleHRBcmVhIGdldEFyZWEoKSB7CisgICAgICAgICAgICByZXR1cm4gYXJlYTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIFBhbmVsIGdldEJvdHRvbSgpIHsKKyAgICAgICAgICAgIHJldHVybiBib3R0b207CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEluZm9EaWFsb2coRnJhbWUgcGFyZW50LCBTdHJpbmcgdGl0bGUsIFN0cmluZyBsYWJlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN1cGVyKHBhcmVudCwgdGl0bGUsIGZhbHNlKTsKKyAgICAgICAgICAgIG1lID0gdGhpczsKKyAgICAgICAgICAgIHRoaXMuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgICAgICBpZiAobGFiZWwubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgICAgIHRoaXMuYWRkKCJOb3J0aCIsIG5ldyBMYWJlbChsYWJlbCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBhcmVhID0gbmV3IFRleHRBcmVhKG1lc3NhZ2UsIDgsIDgwLCBUZXh0QXJlYS5TQ1JPTExCQVJTX1ZFUlRJQ0FMX09OTFkpOworICAgICAgICAgICAgdGhpcy5hZGQoIkNlbnRlciIsIGFyZWEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBidXR0b24gPSBuZXcgQnV0dG9uKCJIaWRlIik7CisgICAgICAgICAgICBidXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgICAgIG1lLmhpZGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGJvdHRvbSA9IG5ldyBQYW5lbCgpOworICAgICAgICAgICAgYm90dG9tLnNldExheW91dChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LkNFTlRFUiwgMCwgMCkpOworICAgICAgICAgICAgYm90dG9tLmFkZChidXR0b24pOworICAgICAgICAgICAgdGhpcy5hZGQoIlNvdXRoIiwgYm90dG9tKTsKKyAgICAgICAgICAgIHRoaXMucGFjaygpOworICAgICAgICAgICAgYWRkV2luZG93TGlzdGVuZXIobmV3IFdpbmRvd0FkYXB0ZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhXaW5kb3dFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgICAgIG1lLmhpZGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0RlbW9BcHBsZXQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9EZW1vQXBwbGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2M2ZjA2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9EZW1vQXBwbGV0LmphdmEKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0RlbW9BcHBsZXQuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTowMCAkIAorICogJFJldmlzaW9uOiAxLjYgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLnRyYW5zbGl0OworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKK2ltcG9ydCBqYXZhLmFwcGxldC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5kZW1vLmltcGwuQXBwbGV0RnJhbWU7CisKKy8qKgorICogQSBzaW1wbGUgQXBwbGV0IHRoYXQgc2hvd3MgYSBidXR0b24uICBXaGVuIHByZXNzZWQsIHRoZSBidXR0b24KKyAqIHNob3dzIHRoZSBEZW1vQXBwbGV0RnJhbWUuICBUaGlzIEFwcGxldCBpcyBtZWFudCB0byBiZSBlbWJlZGRlZAorICogaW4gYSB3ZWIgcGFnZS4KKyAqCisgKiA8cD5Db3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiAxOTk5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAdmVyc2lvbiAkUkNTZmlsZTogRGVtb0FwcGxldC5qYXZhLHYgJCAkUmV2aXNpb246IDEuNiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjAwICQKKyAqLworcHVibGljIGNsYXNzIERlbW9BcHBsZXQgZXh0ZW5kcyBBcHBsZXQgeworCisgICAgRGVtbyBmcmFtZSA9IG51bGw7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICJcdTAwQTkgSUJNIENvcnBvcmF0aW9uIDE5OTkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgZmluYWwgRGVtb0FwcGxldCBhcHBsZXQgPSBuZXcgRGVtb0FwcGxldCgpOworICAgICAgICBuZXcgQXBwbGV0RnJhbWUoIlRyYW5zbGl0ZXJhdGlvbiBEZW1vIiwgYXBwbGV0LCA2NDAsIDQ4MCk7CisgICAgfQorCisJcHVibGljIHZvaWQgaW5pdCgpIHsKKworCQlCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbigiVHJhbnNsaXRlcmF0aW9uIERlbW8iKTsKKwkJYnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisJCSAgICAgICAgaWYgKGZyYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUgPSBuZXcgRGVtbyg2MDAsIDIwMCk7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLmFkZFdpbmRvd0xpc3RlbmVyKG5ldyBXaW5kb3dBZGFwdGVyKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhXaW5kb3dFdmVudCB3ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZyYW1lLnNldFZpc2libGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgZnJhbWUudG9Gcm9udCgpOworCQkgICAgfQorCQl9KTsKKworCQlhZGQoYnV0dG9uKTsKKworICAgICAgICBEaW1lbnNpb24gc2l6ZSA9IGJ1dHRvbi5nZXRQcmVmZXJyZWRTaXplKCk7CisgICAgICAgIHNpemUud2lkdGggKz0gMTA7CisgICAgICAgIHNpemUuaGVpZ2h0ICs9IDEwOworCisJCXJlc2l6ZShzaXplKTsKKwl9CisJCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKKyAgICAgICAgaWYgKGZyYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZyYW1lLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBmcmFtZSA9IG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0RpZmZlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0RpZmZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Yzg4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvRGlmZmVyLmphdmEKQEAgLTAsMCArMSwxNzcgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvRGlmZmVyLmphdmEsdiAkCisqICREYXRlOiAyMDAyLzA3LzI2IDIwOjA5OjAxICQKKyogJFJldmlzaW9uOiAxLjEgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuZGVtby50cmFuc2xpdDsKKworLyoqIFZFUlkgQmFzaWMgRGlmZiBwcm9ncmFtLiBDb21wYXJlcyB0d28gc2VxdWVuY2VzIG9mIG9iamVjdHMgZmVkIGludG8gaXQsIGFuZAorICogbGV0cyB5b3Uga25vdyB3aGVyZSB0aGV5IGFyZSBkaWZmZXJlbnQuCisgKiBAYXV0aG9yIE1hcmsgRGF2aXMKKyAqIEB2ZXJzaW9uIDEuMAorICovCisKK2ZpbmFsIHB1YmxpYyBjbGFzcyBEaWZmZXIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9CisgICAgICAiQ29weXJpZ2h0IChDKSAyMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIjsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBzdGFja1NpemUgVGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgZGlmZmVyZW5jZSB5b3UgZXhwZWN0LgorICAgICAqIEBwYXJhbSBtYXRjaENvdW50IFRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBoYXZlIHRvIGJlIHRoZSBzYW1lIHRvIGNvdW50IGFzIGEgbWF0Y2gKKyAgICAgKi8KKyAgICBwdWJsaWMgRGlmZmVyKGludCBzdGFja1NpemUsIGludCBtYXRjaENvdW50KSB7CisgICAgICAgIHRoaXMuU1RBQ0tTSVpFID0gc3RhY2tTaXplOworICAgICAgICB0aGlzLkVRVUFMU0laRSA9IG1hdGNoQ291bnQ7CisgICAgICAgIGEgPSBuZXcgT2JqZWN0W3N0YWNrU2l6ZSttYXRjaENvdW50XTsKKyAgICAgICAgYiA9IG5ldyBPYmplY3Rbc3RhY2tTaXplK21hdGNoQ291bnRdOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZCAoT2JqZWN0IGFTdHIsIE9iamVjdCBiU3RyKSB7CisgICAgICAgIGFkZEEoYVN0cik7CisgICAgICAgIGFkZEIoYlN0cik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkQSAoT2JqZWN0IGFTdHIpIHsKKyAgICAgICAgZmx1c2goKTsKKyAgICAgICAgYVthQ291bnQrK10gPSBhU3RyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZEIgKE9iamVjdCBiU3RyKSB7CisgICAgICAgIGZsdXNoKCk7CisgICAgICAgIGJbYkNvdW50KytdID0gYlN0cjsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEFMaW5lKGludCBvZmZzZXQpIHsKKyAgICAgICAgcmV0dXJuIGFMaW5lICsgbWF4U2FtZSArIG9mZnNldDsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGdldEEoaW50IG9mZnNldCkgeworICAgICAgICBpZiAob2Zmc2V0IDwgMCkgcmV0dXJuIGxhc3Q7CisgICAgICAgIGlmIChvZmZzZXQgPiBhVG9wLW1heFNhbWUpIHJldHVybiBuZXh0OworICAgICAgICByZXR1cm4gYVtvZmZzZXRdOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QUNvdW50KCkgeworICAgICAgICByZXR1cm4gYVRvcC1tYXhTYW1lOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QkNvdW50KCkgeworICAgICAgICByZXR1cm4gYlRvcC1tYXhTYW1lOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QkxpbmUoaW50IG9mZnNldCkgeworICAgICAgICByZXR1cm4gYkxpbmUgKyBtYXhTYW1lICsgb2Zmc2V0OworICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgZ2V0QihpbnQgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKSByZXR1cm4gbGFzdDsKKyAgICAgICAgaWYgKG9mZnNldCA+IGJUb3AtbWF4U2FtZSkgcmV0dXJuIG5leHQ7CisgICAgICAgIHJldHVybiBiW29mZnNldF07CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2hlY2tNYXRjaChib29sZWFuIGZpbmFsUGFzcykgeworICAgICAgICAvLyBmaW5kIHRoZSBpbml0aWFsIHN0cmluZ3MgdGhhdCBhcmUgdGhlIHNhbWUKKyAgICAgICAgaW50IG1heCA9IGFDb3VudDsKKyAgICAgICAgaWYgKG1heCA+IGJDb3VudCkgbWF4ID0gYkNvdW50OworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG1heDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWFbaV0uZXF1YWxzKGJbaV0pKSBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBhbGwgaXRlbXMgdXAgdG8gaSBhcmUgZXF1YWwKKyAgICAgICAgbWF4U2FtZSA9IGk7CisgICAgICAgIGFUb3AgPSBiVG9wID0gbWF4U2FtZTsKKyAgICAgICAgaWYgKG1heFNhbWUgPiAwKSBsYXN0ID0gYVttYXhTYW1lLTFdOworICAgICAgICBuZXh0ID0gIiI7CisKKyAgICAgICAgaWYgKGZpbmFsUGFzcykgeworICAgICAgICAgICAgYVRvcCA9IGFDb3VudDsKKyAgICAgICAgICAgIGJUb3AgPSBiQ291bnQ7CisgICAgICAgICAgICBuZXh0ID0gIiI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoYUNvdW50IC0gbWF4U2FtZSA8IEVRVUFMU0laRSB8fCBiQ291bnQgLSBtYXhTYW1lIDwgRVFVQUxTSVpFKSByZXR1cm47CisKKyAgICAgICAgLy8gbm93IHNlZSBpZiB0aGUgbGFzdCBmZXcgYSdzIG9jY3VyIGFueXdoZXJlIGluIHRoZSBiJ3MsIG9yIHZpY2UgdmVyc2EKKyAgICAgICAgaW50IG1hdGNoID0gZmluZCAoYSwgYUNvdW50LUVRVUFMU0laRSwgYUNvdW50LCBiLCBtYXhTYW1lLCBiQ291bnQpOworICAgICAgICBpZiAobWF0Y2ggIT0gLTEpIHsKKyAgICAgICAgICAgIGFUb3AgPSBhQ291bnQtRVFVQUxTSVpFOworICAgICAgICAgICAgYlRvcCA9IG1hdGNoOworICAgICAgICAgICAgbmV4dCA9IGFbYVRvcF07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbWF0Y2ggPSBmaW5kIChiLCBiQ291bnQtRVFVQUxTSVpFLCBiQ291bnQsIGEsIG1heFNhbWUsIGFDb3VudCk7CisgICAgICAgIGlmIChtYXRjaCAhPSAtMSkgeworICAgICAgICAgICAgYlRvcCA9IGJDb3VudC1FUVVBTFNJWkU7CisgICAgICAgICAgICBhVG9wID0gbWF0Y2g7CisgICAgICAgICAgICBuZXh0ID0gYltiVG9wXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoYUNvdW50ID49IFNUQUNLU0laRSB8fCBiQ291bnQgPj0gU1RBQ0tTSVpFKSB7CisgICAgICAgICAgICAvLyBmbHVzaCBzb21lIG9mIHRoZW0KKyAgICAgICAgICAgIGFDb3VudCA9IChhQ291bnQgKyBtYXhTYW1lKSAvIDI7CisgICAgICAgICAgICBiQ291bnQgPSAoYkNvdW50ICsgbWF4U2FtZSkgLyAyOworICAgICAgICAgICAgbmV4dCA9ICIiOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIENvbnZlbmllbnQgdXRpbGl0eQorICAgICAqIGZpbmRzIGEgc2VnbWVudCBvZiB0aGUgZmlyc3QgYXJyYXkgaW4gdGhlIHNlY29uZCBhcnJheS4KKyAgICAgKiBAcmV0dXJuIC0xIGlmIG5vdCBmb3VuZCwgb3RoZXJ3aXNlIHN0YXJ0IHBvc2l0aW9uIGluIGIKKyAgICAgKi8KKworICAgIHB1YmxpYyBpbnQgZmluZCAoT2JqZWN0W10gYSwgaW50IGFTdGFydCwgaW50IGFFbmQsIE9iamVjdFtdIGIsIGludCBiU3RhcnQsIGludCBiRW5kKSB7CisgICAgICAgIGludCBsZW4gPSBhRW5kIC0gYVN0YXJ0OworICAgICAgICBpbnQgYkVuZE1pbnVzID0gYkVuZCAtIGxlbjsKKyAgICAgICAgdHJ5QToKKyAgICAgICAgZm9yIChpbnQgaSA9IGJTdGFydDsgaSA8PSBiRW5kTWludXM7ICsraSkgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsZW47ICsraikgeworICAgICAgICAgICAgICAgIGlmICghYltpICsgal0uZXF1YWxzKGFbYVN0YXJ0ICsgal0pKSBjb250aW51ZSB0cnlBOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGk7IC8vIHdlIGhhdmUgYSBtYXRjaCEKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBQUklWQVRFUyA9PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBwcml2YXRlIHZvaWQgZmx1c2goKSB7CisgICAgICAgIGlmIChhVG9wICE9IDApIHsKKyAgICAgICAgICAgIGludCBuZXdDb3VudCA9IGFDb3VudC1hVG9wOworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShhLCBhVG9wLCBhLCAwLCBuZXdDb3VudCk7CisgICAgICAgICAgICBhQ291bnQgPSBuZXdDb3VudDsKKyAgICAgICAgICAgIGFMaW5lICs9IGFUb3A7CisgICAgICAgICAgICBhVG9wID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiVG9wICE9IDApIHsKKyAgICAgICAgICAgIGludCBuZXdDb3VudCA9IGJDb3VudC1iVG9wOworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShiLCBiVG9wLCBiLCAwLCBuZXdDb3VudCk7CisgICAgICAgICAgICBiQ291bnQgPSBuZXdDb3VudDsKKyAgICAgICAgICAgIGJMaW5lICs9IGJUb3A7CisgICAgICAgICAgICBiVG9wID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgaW50IFNUQUNLU0laRTsKKyAgICBwcml2YXRlIGludCBFUVVBTFNJWkU7CisKKyAgICBwcml2YXRlIE9iamVjdCBbXSBhOworICAgIHByaXZhdGUgT2JqZWN0IFtdIGI7CisgICAgcHJpdmF0ZSBPYmplY3QgbGFzdCA9ICIiOworICAgIHByaXZhdGUgT2JqZWN0IG5leHQgPSAiIjsKKyAgICBwcml2YXRlIGludCBhQ291bnQgPSAwOworICAgIHByaXZhdGUgaW50IGJDb3VudCA9IDA7CisgICAgcHJpdmF0ZSBpbnQgYUxpbmUgPSAxOworICAgIHByaXZhdGUgaW50IGJMaW5lID0gMTsKKyAgICBwcml2YXRlIGludCBtYXhTYW1lID0gMCwgYVRvcCA9IDAsIGJUb3AgPSAwOworCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvSW5mb0RpYWxvZy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0luZm9EaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWI5MTEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0luZm9EaWFsb2cuamF2YQpAQCAtMCwwICsxLDU4IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L0luZm9EaWFsb2cuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIxOjUwOjQ0ICQKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLnRyYW5zbGl0OworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS5hd3QuKjsKK3B1YmxpYyBjbGFzcyBJbmZvRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKKyAgICBwcm90ZWN0ZWQgQnV0dG9uIGJ1dHRvbjsKKyAgICBwcm90ZWN0ZWQgVGV4dEFyZWEgYXJlYTsKKyAgICBwcm90ZWN0ZWQgRGlhbG9nIG1lOworICAgIHByb3RlY3RlZCBQYW5lbCBib3R0b207CisgICAgICAgIAorICAgIHB1YmxpYyBUZXh0QXJlYSBnZXRBcmVhKCkgeworICAgICAgICByZXR1cm4gYXJlYTsKKyAgICB9CisgICAgICAgIAorICAgIHB1YmxpYyBQYW5lbCBnZXRCb3R0b20oKSB7CisgICAgICAgIHJldHVybiBib3R0b207CisgICAgfQorICAgICAgICAKKyAgICBJbmZvRGlhbG9nKEZyYW1lIHBhcmVudCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgbGFiZWwsIFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIHN1cGVyKHBhcmVudCwgdGl0bGUsIGZhbHNlKTsKKyAgICAgICAgbWUgPSB0aGlzOworICAgICAgICB0aGlzLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworICAgICAgICBpZiAobGFiZWwubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgdGhpcy5hZGQoIk5vcnRoIiwgbmV3IExhYmVsKGxhYmVsKSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBhcmVhID0gbmV3IFRleHRBcmVhKG1lc3NhZ2UsIDgsIDgwLCBUZXh0QXJlYS5TQ1JPTExCQVJTX1ZFUlRJQ0FMX09OTFkpOworICAgICAgICB0aGlzLmFkZCgiQ2VudGVyIiwgYXJlYSk7CisgICAgICAgICAgICAKKyAgICAgICAgYnV0dG9uID0gbmV3IEJ1dHRvbigiSGlkZSIpOworICAgICAgICBidXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBtZS5oaWRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBib3R0b20gPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgYm90dG9tLnNldExheW91dChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LkNFTlRFUiwgMCwgMCkpOworICAgICAgICBib3R0b20uYWRkKGJ1dHRvbik7CisgICAgICAgIHRoaXMuYWRkKCJTb3V0aCIsIGJvdHRvbSk7CisgICAgICAgIHRoaXMucGFjaygpOworICAgICAgICBhZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIG1lLmhpZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1Rlc3RfQXJhYmljLUxhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9UZXN0X0FyYWJpYy1MYXRpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViMTlmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9UZXN0X0FyYWJpYy1MYXRpbi50eHQKQEAgLTAsMCArMSwyOCBAQAor77u/Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1Rlc3RfQXJhYmljLUxhdGluLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDcvMjYgMjA6MDk6MDEgJAorIyAkUmV2aXNpb246IDEuMSAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BVUFBFUkZJTFRFUkAKK9mF2Kcg2YfZiiDYp9mE2LTZgdix2Kkg2KfZhNmF2YjYrdiv2KkgItmK2YjZhtmQ2YPZiNivIiDYnworCivYo9iz2KfYs9mL2KfYjCDYqtiq2LnYp9mF2YQg2KfZhNit2YjYp9iz2YrYqCDZgdmC2Lcg2YXYuSDYp9mE2KPYsdmC2KfZhdiMINmI2KrZgtmI2YUg2KjYqtiu2LLZitmGINin2YTYo9it2LHZgSDZiNin2YTZhdit2KfYsdmBINin2YTYo9iu2LHZiSDYqNi52K8g2KPZhiDYqtmP2LnYt9mKINix2YLZhdinINmF2LnZitmG2Kcg2YTZg9mEINmI2KfYrdivINmF2YbZh9inLiDZiNmC2KjZhCDYp9iu2KrYsdin2LkgItmK2YjZhtmQ2YPZiNivItiMINmD2KfZhiDZh9mG2KfZgyDZhdim2KfYqiDYp9mE2KPZhti42YXYqSDZhNmE2KrYtNmB2YrYsSDZiNiq2K7YtdmK2LUg2YfYsNmHINin2YTYo9ix2YLYp9mFINmE2YTZhdit2KfYsdmB2Iwg2YjZhNmFINmK2YjYrNivINmG2LjYp9mFINiq2LTZgdmK2LEg2YjYp9it2K8g2YrYrdiq2YjZiiDYudmE2Ykg2KzZhdmK2Lkg2KfZhNmF2K3Yp9ix2YEg2KfZhNi22LHZiNix2YrYqS4g2YjYudmE2Ykg2LPYqNmK2YQg2KfZhNmF2KvYp9mE2Iwg2YHYpdmGINin2YTYp9iq2K3Yp9ivINin2YTYo9mI2LHZiNio2Yog2YTZiNit2K/Zh9iMINin2K3YqtmI2Ykg2KfZhNi52K/ZitivINmF2YYg2KfZhNi02YHYsdin2Kog2KfZhNmF2K7YqtmE2YHYqSDZhNmK2LrYt9mKINis2YXZiti5INin2YTZhNi62KfYqiDYp9mE2YXYs9iq2K7Yr9mF2Kkg2YHZiiDYp9mE2KfYqtit2KfYry4g2YjYrdiq2Ykg2YTZiCDYp9i52KrYqNix2YbYpyDZhNi62Kkg2YjYp9it2K/YqdiMINmD2KfZhNmE2LrYqSDYp9mE2KXZhtis2YTZitiy2YrYqdiMINmB2KXZhiDYrNiv2YjZhCDYtNmB2LHYqSDZiNin2K3YryDZhNmFINmK2YPZgSDZhNin2LPYqtmK2LnYp9ioINis2YXZiti5INin2YTYo9it2LHZgSDZiNi52YTYp9mF2KfYqiDYp9mE2KrYsdmC2YrZhSDZiNin2YTYsdmF2YjYsiDYp9mE2YHZhtmK2Kkg2YjYp9mE2LnZhNmF2YrYqSDYp9mE2LTYp9im2LnYqSDYp9mE2KfYs9iq2LnZhdin2YQuCisKKyAKKwor2YjYqtis2K/YsSDYp9mE2YXZhNin2K3YuNipINij2YYg2KPZhti42YXYqSDYp9mE2KrYtNmB2YrYsSDYp9mE2YXYrtiq2YTZgdipINiq2KrYudin2LHYtiDZhdi5INio2LnYttmH2Kcg2KfZhNio2LnYti4g2YjYqNi52KjYp9ix2Kkg2KPYrtix2YnYjCDZitmF2YPZhiDYo9mGINmK2LPYqtiu2K/ZkNmFINis2K/ZiNmE2Yog2LTZgdix2Kkg2YbZgdizINin2YTYsdmC2YUg2YTYqtmF2KvZitmEINmF2K3YsdmB2YrZhiDZhdiu2KrZhNmB2YrZhtiMINij2Ygg2LHZgtmF2YrZhiDZhdiu2KrZhNmB2YrZhiDZhNiq2YXYq9mK2YQg2YbZgdizINin2YTZhdit2LHZgS4g2YjZhNmIINij2K7YsNmG2Kcg2KPZiiDYrNmH2KfYsiDYrdin2LPZiNio2Iwg2YjYqNiu2KfYtdipINis2YfYp9iyINin2YTZhtin2K/ZhCAoc2VydmVyKdiMINmB2YrYrNioINij2YYg2KrZg9mI2YYg2YTYr9mK2Ycg2KfZhNmC2K/YsdipINi52YTZiSDYp9mE2KrYudin2YXZhCDZhdi5INi52K/YryDZg9io2YrYsSDZhdmGINin2YTYtNmB2LHYp9iqINin2YTZhdiu2KrZhNmB2KnYjCDZiNmK2KrZhSDYqti12YXZitmF2Ycg2LnZhNmJINmH2LDYpyDYp9mE2KPYs9in2LMuINmI2YXYuSDYsNmE2YPYjCDZgdi52YbYr9mF2Kcg2KrZhdixINin2YTYqNmK2KfZhtin2Kog2LnYqNixINij2YbYuNmF2Kkg2YXYrtiq2YTZgdip2Iwg2KrZiNis2K8g2YfZhtin2YMg2K7Yt9mI2LHYqSDZhNi22YrYp9i5INij2Ygg2KrYrdix2YrZgSDYqNi52LYg2YfYsNmHINin2YTYqNmK2KfZhtin2KouCisKKyAKKworItmK2YjZhtmQ2YPZiNivIiDYqti62YrYsSDZh9iw2Kcg2YPZhNmK2KcgIQorCivYqtiu2LXYtSDYp9mE2LTZgdix2Kkg2KfZhNmF2YjYrdiv2KkgItmK2YjZhtmQ2YPZiNivIiDYsdmC2YXYpyDZiNit2YrYr9inINmE2YPZhCDZhdit2LHZgSDZgdmKINis2YXZiti5INin2YTZhNi62KfYqiDYp9mE2LnYp9mE2YXZitip2Iwg2YjYsNmE2YMg2KjYuti2INin2YTZhti42LEg2LnZhiDZhtmI2Lkg2KfZhNit2KfYs9mI2Kgg2KPZiCDYp9mE2KjYsdin2YXYrCDYp9mE2YXYs9iq2K7Yr9mF2KkuINmI2YLYryDYqtmFINiq2KjZhtmKINmF2YjYp9i12YHYqSAi2YrZiNmG2ZDZg9mI2K8iINmF2YYg2YLYqNmEINmC2KfYr9ipINin2YTYtdin2YbYudmK2YYg2YTYo9mG2LjZhdipINin2YTYrdmI2KfYs9mK2Kgg2YHZiiDYp9mE2LnYp9mE2YXYjCDZhdir2YQg2LTYsdmD2KfYqiDYotmKLtio2You2KXZhS4gKElCTSnYjCDYo9io2YQgKEFQUExFKdiMINmH2ZDZitmS2YjZhNmQ2Kog2KjYp9mD2LHYryAoSGV3bGV0dC1QYWNrYXJkKSDYjCDZhdin2YrZg9ix2YjYs9mI2YHYqiAoTWljcm9zb2Z0KdiMINij2YjYsdin2YPZkNmEIChPcmFjbGUpINiMINi12YYgKFN1bikg2YjYutmK2LHZh9inLiDZg9mF2Kcg2KPZhiDYp9mE2YXZiNin2LXZgdin2Kog2YjYp9mE2YXZgtin2YrZitizINin2YTYrdiv2YrYq9ipICjZhdir2YQg2YTYutipINin2YTYqNix2YXYrNipICLYrNin2YHYpyIgIkpBVkEiINmI2YTYutipICLYpdmD2LMg2KXZhSDYpdmEIiAiWE1MIiDYp9mE2KrZiiDYqtiz2KrYrtiv2YUg2YTYqNix2YXYrNipINin2YTYp9mG2KrYsdmG2YrYqikg2KrYqti32YTYqCDYp9iz2KrYrtiv2KfZhSAi2YrZiNmG2ZDZg9mI2K8iLiDYudmE2KfZiNipINi52YTZiSDYsNmE2YMg2Iwg2YHYpdmGICLZitmI2YbZkNmD2YjYryIg2YfZiiDYp9mE2LfYsdmK2YLYqSDYp9mE2LHYs9mF2YrYqSDZhNiq2LfYqNmK2YIg2KfZhNmF2YLZitin2LMg2KfZhNi52KfZhNmF2Yog2KXZitiy2Ygg2aHZoNmm2aTZpiAgKElTTyAxMDY0NikgLgorCisgCisKK9il2YYg2KjYstmI2Log2YXZiNin2LXZgdipICLZitmI2YbZkNmD2YjYryIg2YjYqtmI2YHZkdmP2LEg2KfZhNij2YbYuNmF2Kkg2KfZhNiq2Yog2KrYs9iq2K7Yr9mF2Ycg2YjYqtiv2LnZhdmH2Iwg2YrYudiq2KjYsSDZhdmGINij2YfZhSDYp9mE2KfYrtiq2LHYp9i52KfYqiDYp9mE2K3Yr9mK2KvYqSDZgdmKINi52YjZhNmF2Kkg2KfZhNio2LHZhdis2YrYp9iqINmE2KzZhdmK2Lkg2KfZhNmE2LrYp9iqINmB2Yog2KfZhNi52KfZhNmFLiDZiNil2YYg2KfYs9iq2K7Yr9in2YUgItmK2YjZhtmQ2YPZiNivIiDZgdmKINi52KfZhNmFINin2YTYp9mG2KrYsdmG2YrYqiDYs9mK2KTYr9mKINil2YTZiSDYqtmI2YHZitixINmD2KjZitixINmF2YLYp9ix2YbYqSDZhdi5INin2LPYqtiu2K/Yp9mFINin2YTZhdis2YXZiNi52KfYqiDYp9mE2KrZgtmE2YrYr9mK2Kkg2YTZhNmF2K3Yp9ix2YEg2KfZhNmF2LTZgdix2KkuINmD2YXYpyDYo9mGINin2LPYqtiu2K/Yp9mFICLZitmI2YbZkNmD2YjYryIg2LPZitmP2YXZg9mR2ZDZhiDYp9mE2YXYqNix2YXYrCDZhdmGINmD2KrYp9io2Kkg2KfZhNio2LHZhtin2YXYrCDZhdix2Kkg2YjYp9it2K/YqdiMINmI2KfYs9iq2K7Yr9in2YXZhyDYudmE2Ykg2KPZiiDZhtmI2Lkg2YXZhiDYp9mE2KPYrNmH2LLYqSDYo9mIINin2YTYo9mG2LjZhdip2Iwg2YjZhNij2Yog2YTYutipINij2Ygg2K/ZiNmE2Kkg2YHZiiDYp9mE2LnYp9mE2YUg2KPZitmG2YXYpyDZg9in2YbYqtiMINiv2YjZhiDYp9mE2K3Yp9is2Kkg2YTYpdi52KfYr9ipINin2YTYqNix2YXYrNipINij2Ygg2KXYrNix2KfYoSDYo9mKINiq2LnYr9mK2YQuINmI2KPYrtmK2LHYp9iMINmB2KXZhiDYp9iz2KrYrtiv2KfZhSAi2YrZiNmG2ZDZg9mI2K8iINiz2YrZhdmD2YYg2KfZhNio2YrYp9mG2KfYqiDZhdmGINin2YTYp9mG2KrZgtin2YQg2LnYqNixINin2YTYo9mG2LjZhdipINmI2KfZhNij2KzZh9iy2Kkg2KfZhNmF2K7YqtmE2YHYqSDYr9mI2YYg2KPZiiDYrti32YjYsdipINmE2KrYrdix2YrZgdmH2KfYjCDZhdmH2YXYpyDYqti52K/Yr9iqINin2YTYtNix2YPYp9iqINin2YTYtdin2YbYudipINmE2YTYo9mG2LjZhdipINmI2KfZhNmE2LrYp9iq2Iwg2YjYp9mE2K/ZiNmEINin2YTYqtmKINiq2YXYsSDZhdmGINiu2YTYp9mE2YfYpyDZh9iw2Ycg2KfZhNio2YrYp9mG2KfYqi4gCisKK0BTRVQgW1tbOkFyYWJpYzpdICYgW1x1MDYwMC1cdTA2RkZdXSBb4oCOXHUwNjBDXHUwNjFCXHUwNjFGXHUwNjQwXHUwNjRCLVx1MDY1NVx1MDY2MC1cdTA2NkNcdTA2RjAtXHUwNkY5XV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9HcmVlay1MYXRpbi50eHQgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9HcmVlay1MYXRpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhYzZhMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9UZXN0X0dyZWVrLUxhdGluLnR4dApAQCAtMCwwICsxLDc3IEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9HcmVlay1MYXRpbi50eHQsdiAkCisjICREYXRlOiAyMDAyLzA3LzI2IDIwOjA5OjAxICQKKyMgJFJldmlzaW9uOiAxLjEgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK86kzrkgzrXOr869zrHOuSDPhM6/IFVuaWNvZGU/IAorCivOlyDOus+JzrTOuc66zr/Pg861zrvOr860zrEgVW5pY29kZSDPgM+Bzr/PhM61zq/Ovc61zrkgzq3Ovc6xzr0gzrrOsc65IM68zr/Ovc6xzrTOuc66z4wgzrHPgc65zrjOvM+MIM6zzrnOsSDOus6szrjOtSDPh86xz4HOsc66z4TOrs+BzrEsIM6xzr3Otc6+zqzPgc+EzrfPhM6xIM6xz4DPjCDPhM6/IM67zrXOuc+Ezr/Phc+BzrPOuc66z4wgz4PPjc+Dz4TOt868zrEsIM6xzr3Otc6+zqzPgc+EzrfPhM6xIM6xz4DPjCDPhM6/IM67zr/Os865z4POvM65zrrPjCwgzrHOvc61zr7OrM+Bz4TOt8+EzrEgzrHPgM+MIM+EzrfOvSDOs867z47Pg8+DzrEuCisKK86fzrkgzrfOu861zrrPhM+Bzr/Ovc65zrrOv86vIM+Fz4DOv867zr/Os865z4PPhM6tz4IsIM+DzrUgz4TOtc67zrnOus6uIM6xzr3OrM67z4XPg863LCDPh861zrnPgc6vzrbOv869z4TOsc65IM6xz4DOu8+Oz4IgzrHPgc65zrjOvM6/z43Pgi4gzpHPgM6/zrjOt866zrXPjc6/z4XOvSDOs8+BzqzOvM68zrHPhM6xIM66zrHOuSDOrM67zrvOv8+Fz4Igz4fOsc+BzrHOus+Ezq7Pgc61z4IgzrHOvc+EzrnPg8+Ezr/Ouc+Hz47Ovc+EzrHPgiDPg8+Ezr8gzrrOsc64zq3Ovc6xIM+Ezr/Phc+CIM6xz4DPjCDOrc69zrHOvSDOsc+BzrnOuM68z4wgKM6/zr3Ov868zqzOts6/z4XOvM61IM68zq/OsSDPhM6tz4TOv865zrEgzrHOvc+EzrnPg8+Ezr/Ouc+Hzq/OsSDOus+JzrTOuc66zr/Pg861zrvOr860zrEpLiDOoM+BzrnOvSDPhM63zr0gzrXPhs61z43Pgc61z4POtyDPhM6/z4UgVW5pY29kZSwgz4XPgM6uz4HPh86xzr0gzrXOus6xz4TOv869z4TOrM60zrXPgiDOtM65zrHPhs6/z4HOtc+EzrnOus6tz4IgzrrPic60zrnOus6/z4POtc67zq/OtM61z4IuIM6bz4zOs8+JIM+AzrXPgc65zr/Pgc65z4POvM+Ozr0gzrzOtc6zzq3OuM6/z4XPgiDPjM68z4nPgiwgz4POtSDOus6xzrzOr86xIM66z4nOtM65zrrOv8+DzrXOu86vzrTOsSDOtM61zr0gz4fPic+Bzr/Pjc+DzrHOvSDOsc+BzrrOtc+Ezr/OryDPh86xz4HOsc66z4TOrs+BzrXPgjogzrvPjM6zzr/PhSDPh86sz4HOuc69LCDOtyDOlc+Fz4HPic+AzrHPis66zq4gzojOvc+Jz4POtyDPh8+BzrXOuc6xzrbPjM+EzrHOvSDPgM67zq7OuM6/z4IgzrTOuc6xz4bOv8+BzrXPhM65zrrPjs69IM66z4nOtM65zrrOv8+DzrXOu86vzrTPic69IM6zzrnOsSDOvc6xIM66zrHOu8+Nz4jOtc65IM+MzrvOtc+CIM+EzrnPgiDOs867z47Pg8+DzrXPgiDPhM+Jzr0gz4fPic+Bz47OvS3OvM61zrvPjs69IM+EzrfPgi4gzpHOus+MzrzOsSDOus6xzrkgzrPOuc6xIM68zq/OsSDOus6xzrkgzrzPjM69zrcgzrPOu8+Oz4PPg86xLCDPjM+Az4nPgiDPgC7Phy4gz4TOsSDOkc6zzrPOu865zrrOrCwgzrzOr86xIM66z4nOtM65zrrOv8+DzrXOu86vzrTOsSDOtM61zr0gzrXPgM6xz4HOus6/z43Pg861IM6zzrnOsSDOvc6xIM66zrHOu8+Nz4jOtc65IM+MzrvOsSDPhM6xIM6zz4HOrM68zrzOsc+EzrEsIM+DzrfOvM61zq/OsSDPg8+Ezq/Ovs63z4IgzrrOsc65IM+EzrXPh869zrnOus6sIM+Dz43OvM6yzr/Ou86xIM61z4XPgc61zq/Osc+CIM+Hz4HOrs+DzrfPgi4KKworzpXOus+Ez4zPgiDOsc+Fz4TOv8+NLCDOv865IM66z4nOtM65zrrOv8+DzrXOu86vzrTOtc+CIM6xz4XPhM6tz4IgzrTOuc6xz4bPic69zr/Pjc+DzrHOvSDOvM61z4TOsc6+z40gz4TOv8+Fz4IuIM6Iz4TPg865LCDOtM+Nzr8gzrrPic60zrnOus6/z4POtc67zq/OtM61z4IgzrzPgM6/z4HOv8+Nz4POsc69IM66zqzOu867zrnPg8+EzrEgzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6/z43OvSDPhM6/zr0gzq/OtM65zr8gzrHPgc65zrjOvM+MIM6zzrnOsSDOtM+Nzr8gzrTOuc6xz4bOv8+BzrXPhM65zrrOv8+Nz4Igz4fOsc+BzrHOus+Ezq7Pgc61z4IsIM6uIM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOv8+Nzr0gzrTOuc6xz4bOv8+BzrXPhM65zrrOv8+Nz4IgzrHPgc65zrjOvM6/z43PgiDOs865zrEgz4TOv869IM6vzrTOuc6/IM+HzrHPgc6xzrrPhM6uz4HOsS4gzprOrM64zrUgz4XPgM6/zrvOv86zzrnPg8+Ezq7PgiAozrrOsc65IM65zrTOr8+Jz4IgzrXOrM69IM6uz4TOsc69IM60zrnOsc66zr/OvM65z4PPhM6uz4IpIM6tz4DPgc61z4DOtSDOvc6xIM+Fz4DOv8+Dz4TOt8+Bzq/Ots61zrkgz4DOu86uzrjOv8+CIM60zrnOsc+Gzr/Pgc61z4TOuc66z47OvSDOus+JzrTOuc66zr/Pg861zrvOr860z4nOvc6HIM+EzrHPhc+Ez4zPh8+Bzr/Ovc6xIM66zqzOuM61IM+Gzr/Pgc6sIM+Azr/PhSDOtM61zrTOv868zq3Ovc6xIM68zrXPhM6xz4bOrc+Bzr/Ovc+EzrHOvSDOvM61z4TOsc6+z40gzrTOuc6xz4bOv8+BzrXPhM65zrrPjs69IM66z4nOtM65zrrOv8+DzrXOu86vzrTPic69IM6uIM67zrXOuc+Ezr/Phc+BzrPOuc66z47OvSDPg8+Fz4PPhM63zrzOrM+Ez4nOvSwgz4TOsSDOtM61zrTOv868zq3Ovc6xIM6xz4XPhM6sIM66zrnOvc60z43Ovc61z4XOsc69IM69zrEgzrHOu867zr/Ouc+JzrjOv8+Nzr0uCisKK86kzr8gVW5pY29kZSDOsc67zrvOrM62zrXOuSDOsc+Fz4TOriDPhM63zr0gzrrOsc+EzqzPg8+EzrHPg863IQorzqTOvyBVbmljb2RlIM+Az4HOv8+EzrXOr869zrXOuSDOrc69zrHOvSDOvM6/zr3Osc60zrnOus+MIM6xz4HOuc64zrzPjCDOs865zrEgzrrOrM64zrUgz4fOsc+BzrHOus+Ezq7Pgc6xLCDOsc69zrXOvs6sz4HPhM63z4TOsSDOsc+Az4wgz4TOvyDOu861zrnPhM6/z4XPgc6zzrnOus+MIM+Dz43Pg8+EzrfOvM6xLCDOsc69zrXOvs6sz4HPhM63z4TOsSDOsc+Az4wgz4TOvyDOu86/zrPOuc+DzrzOuc66z4wsIM6xzr3Otc6+zqzPgc+EzrfPhM6xIM6xz4DPjCDPhM63zr0gzrPOu8+Oz4PPg86xLiDOpM63zr0gzrrPic60zrnOus6/z4POtc67zq/OtM6xIFVuaWNvZGUgzq3Ph86/z4XOvSDOsc+Dz4DOsc+DzrjOtc6vIM66zr/Pgc+Fz4bOsc6vzr/OuSDPgM6xz4HOrM6zzr/Ovc+EzrXPgiDPhM6/z4Ugz4fPjs+Bzr/PhSDPhM+Jzr0gzrvOv86zzrnPg868zrnOus+Ozr0gz4zPgM+Jz4Igzr/OuTogQXBwbGUsIEhQLCBJQk0sIEp1c3RTeXN0ZW0sIE1pY3Jvc29mdCwgT3JhY2xlLCBTQVAsIFN1biwgU3liYXNlLCBVbmlzeXMgzrrOsc65IM+Azr/Ou867zr/OryDOrM67zrvOv865LiDOpM6/IFVuaWNvZGUgzrHPgM6xzrnPhM6/z43OvSDPgM6/zrvOu86tz4Igz4PPjc6zz4fPgc6/zr3Otc+CIM+Ez4XPgM6/z4DOv865zq7Pg861zrnPgiDPjM+Az4nPgiDOv865OiBYTUwsIEphdmEsIEVDTUFTY3JpcHQgKEphdmFTY3JpcHQpLCBMREFQLCBDT1JCQSAzLjAsIFdNTCwgzrouzrvPgC4sIM66zrHOuSDOtc6vzr3Osc65IM63IM61z4DOr8+DzrfOvM63IM68zq3OuM6/zrTOv8+CIM61z4bOsc+BzrzOv86zzq7PgiDPhM63z4Igz4TPhc+Azr/PgM6/zq/Ot8+DzrfPgiBJU08vSUVDIDEwNjQ2LiDOpc+Azr/Pg8+EzrfPgc6vzrbOtc+EzrHOuSDOsc+Az4wgz4DOv867zrvOrCDOu861zrnPhM6/z4XPgc6zzrnOus6sIM+Dz4XPg8+Ezq7OvM6xz4TOsSwgz4zOu86/z4XPgiDPhM6/z4XPgiDPg8+Nz4fPgc6/zr3Ov8+Fz4Igz4DOtc+BzrnOt86zzrfPhM6tz4IgzpTOuc6xzrTOuc66z4TPjc6/z4UsIM66zrHOuSDPgM6/zrvOu86sIM6szrvOu86xIM+Az4HOv8+Kz4zOvc+EzrEuIM6XIM61zrzPhs6szr3Ouc+Dzrcgz4TOt8+CIM66z4nOtM65zrrOv8+DzrXOu86vzrTOsc+CIFVuaWNvZGUsIM66zrHOuSDOtyDOtM65zrHOuM61z4POuc68z4zPhM63z4TOsSDOtc+BzrPOsc67zrXOr8+Jzr0gz4DOv8+FIM69zrEgz4TOt869IM+Fz4DOv8+Dz4TOt8+Bzq/Ots6/z4XOvSDOtc6vzr3Osc65IM6xz4DPjCDPhM65z4Igz4POt868zrHOvc+EzrnOus+Mz4TOtc+BzrXPgiDOtc6+zrXOu86vzr7Otc65z4Igz4TOt8+CIM+Az4HPjM+Dz4bOsc+EzrfPgiDPhM61z4fOvc6/zrvOv86zzq/Osc+CIM67zr/Os865z4POvM65zrrPjs69LgorCivOlyDOtc69z4PPic68zqzPhM+Jz4POtyDPhM6/z4UgVW5pY29kZSDPg861IM61z4bOsc+BzrzOv86zzq3PgiDPgM61zrvOrM+EzrctzrTOuc6xzrrOv868zrnPg8+Ezq4gzq4gIm11bHRpLXRpZXJlZCIgz4DPgc6/z4PPhs6tz4HOtc65IM+DzrfOvM6xzr3PhM65zrrOrc+CIM6/zrnOus6/zr3Ov868zq/Otc+CIM+DzrUgz4PPh86tz4POtyDOvM61IM+EzrnPgiDPic+CIM+Ez47Pgc6xIM+Fz4DOrM+Bz4fOv8+Fz4POtc+CIM66z4nOtM65zrrOv8+DzrXOu86vzrTOtc+CLiDOp86sz4HOuc+CIM+Dz4TOvyBVbmljb2RlIM6tzr3OsSDOus6xzrkgzrzPjM69zr8gz4DPgc6/z4rPjM69IM6uIM68zq/OsSDOus6xzrkgzrzPjM69zrcgz4TOv8+Azr/OuM61z4POr86xIM6UzrnOsc60zrnOus+Ez43Ov8+FIM68z4DOv8+BzrXOryDOvc6xIM61z4DOuc66zr/Ouc69z4nOvc61zq8gzrzOtSDOtM65zqzPhs6/z4HOsSDOu861zrnPhM6/z4XPgc6zzrnOus6sIM+Dz4XPg8+Ezq7OvM6xz4TOsSwgz4POtSDOtM65zqzPhs6/z4HOtc+CIM6zzrvPjs+Dz4POtc+CIM66zrHOuSDPh8+Oz4HOtc+CLCDPh8+Jz4HOr8+CIM+EzrfOvSDOsc69zqzOs866zrcgzrXPgM6xzr3Osc+Az4HOv86zz4HOsc68zrzOsc+EzrnPg868zr/PjS4gzpPOr869zrXPhM6xzrkgzq3PhM+DzrkgzrTPhc69zrHPhM6uIM63IM68zrXPhM6xz4bOv8+BzqwgzrTOtc60zr/OvM6tzr3Pic69IM6xzr3OrM68zrXPg86xIM+DzrUgz4DOu86uzrjOv8+CIM60zrnOsc+Gzr/Pgc61z4TOuc66z47OvSDPg8+Fz4PPhM63zrzOrM+Ez4nOvSDOtM6vz4fPic+CIM66zq/Ovc60z4XOvc6/IM6xzrvOu86/zq/Pic+DzrfPgi4KKworzqPPh861z4TOuc66zqwgzrzOtSDPhM6/IM6azr/Ovc+Dz4zPgc+EzrnOv8+FzrwgVW5pY29kZQorVM6/IM6azr/Ovc+Dz4zPgc+EzrnOv8+FzrwgVW5pY29kZSDOtc6vzr3Osc65IM6tzr3Osc+CIM66zr/Ouc69z4nPhs61zrvOrs+CIM6/z4HOs86xzr3Ouc+DzrzPjM+CzocgzrnOtM+Bz43OuM63zrrOtSDOs865zrEgzr3OsSDOsc69zrHPgM+Ez43Ovs61zrksIM69zrEgzrXPgM61zrrPhM61zq/Ovc61zrkgzrrOsc65IM69zrEgzrzOtc+EzrHOtM+Oz4POtc65IM+EzrfOvSDPh8+Bzq7Pg863IM+EzrfPgiDOus+JzrTOuc66zr/Pg861zrvOr860zrHPgiBVbmljb2RlIM+Azr/PhSDOus6xzrjOv8+Bzq/Ots61zrkgz4TOt869IM6xzr3Osc+AzrHPgc6sz4PPhM6xz4POtyDOus61zrnOvM6tzr3Ov8+FIM+DzrUgz4PPjc6zz4fPgc6/zr3OsSDOu86/zrPOuc+DzrzOuc66zqwgz4DPgc6/z4rPjM69z4TOsSDOus6xzrkgz4TPhc+Azr/PgM6/zrnOrs+DzrXOuc+CLiDOnM61zrPOrM67zr/PgiDOsc+BzrnOuM68z4zPgiDOtc+EzrHOuc+BzrXOuc+Ozr0gzrrOsc65IM6/z4HOs86xzr3Ouc+DzrzPjs69IM+EzrfPgiDOtM65zrXOuM69zr/Pjc+CIM6yzrnOv868zrfPh86xzr3Or86xz4Igz4XPgM6/zrvOv86zzrnPg8+Ez47OvSDOus6xzrkgzrvOv86zzrnPg868zrnOus+Ozr0gzrXOr869zrHOuSDOvM6tzrvOtyDPhM6/z4UgzprOv869z4PPjM+Bz4TOuc6/z4XOvCBVbmljb2RlLiDOpM6/IM6azr/Ovc+Dz4zPgc+EzrnOv8+Fzrwgz4fPgc63zrzOsc+Ezr/OtM6/z4TOtc6vz4TOsc65IM68z4zOvc6/IM6xz4DPjCDPhM65z4Igz4PPhc69zrTPgc6/zrzOrc+CIM+Ez4nOvSDOvM61zrvPjs69IM+Ezr/PhS4gzpzOrc67zr/PgiDPhM6/z4UgzrrOv869z4PPjM+Bz4TOuc6/z4XOvCBVbmljb2RlIM68z4DOv8+BzrXOryDOvc6xIM6zzq/Ovc61zrkgzr/Ouc6/z4POtM6uz4DOv8+EzrUgKM6/z4HOs86xzr3Ouc+DzrzPjM+CLCDOtc+EzrHOuc+BzrXOr86xIM6uIM65zrTOuc+Oz4TOt8+CLCDOv8+Azr/Phc60zq7PgM6/z4TOtSDPg8+Ezr/OvSDOus+Mz4POvM6/KSDPgM6/z4Ugzr3OsSDPhc+Azr/Pg8+EzrfPgc6vzrbOtc65IM+EzrfOvSDOus+JzrTOuc66zr/Pg861zrvOr860zrEgVW5pY29kZSDOus6xzrkgzr3OsSDOtc+AzrnOuM+FzrzOtc6vIM69zrEgz4PPhc69zrTPgc6szrzOtc65IM+Dz4TOt869IM61z4DOrc66z4TOsc+DzrcgzrrOsc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOt8+CLgorCivOk865zrEgz4DOtc+BzrHOuc+Ezq3Pgc+JIM+AzrvOt8+Bzr/Phs6/z4HOr861z4IsIM6yzrvOrc+AzrUgz4TOuc+CIM61zr7Ors+CIM65z4PPhM6/z4POtc67zq/OtM61z4I6IM6TzrvPic+Dz4POrM+BzrksIM6UzrXOr86zzrzOsc+EzrEgz4DPgc6/z4rPjM69z4TPic69IM+Dz4XOvM6yzrHPhM+Ozr0gzrzOtSDPhM6/IFVuaWNvZGUsIM6kzrXPh869zrnOus6uIM6VzrnPg86xzrPPic6zzq4gzrrOsc65IM6nz4HOrs+DzrnOvM61z4Igz4DOt86zzq3PgiDPgM67zrfPgc6/z4bOv8+BzrnPjs69LgorCisoQU5DSUVOVCkKKwor4byEzr3OtM+BzrEgzrzOv865IOG8lM69zr3Otc+AzrUsIM68zr/hv6bPg86xLCDPgM6/zrvPjc+Ez4HOv8+Azr/OvSwg4b2Dz4IgzrzOrM67zrEgz4DOv867zrvhvbAKK8+AzrvOrM6zz4fOuM63LCDhvJDPgM614b22IM6kz4HOv86vzrfPgiDhvLHOtc+B4b24zr0gz4DPhM6/zrvOr861zrjPgc6/zr0g4byUz4DOtc+Bz4POtc69Ogorz4DOv867zrvhv7bOvSDOtOKAmSDhvIDOvc64z4HPjs+Az4nOvSDhvLTOtM61zr0g4byEz4PPhM61zrEgzrrOseG9tiDOvc+Mzr/OvSDhvJTOs869z4ksCivPgM6/zrvOu+G9sCDOtOKAmSDhvYUgzrPigJkg4byQzr0gz4DPjM69z4Thv7Mgz4DOrM64zrXOvSDhvITOu86zzrXOsSDhvYPOvSDOus6xz4ThvbAgzrjPhc68z4zOvSwKK+G8gM+Bzr3Pjc68zrXOvc6/z4Ig4bylzr0gz4TOtSDPiM+Fz4fhvbTOvSDOus6x4b22IM69z4zPg8+Ezr/OvSDhvJHPhM6xzq/Pgc+Jzr0uCivhvIDOu8674oCZIM6/4b2QzrTigJkg4b2jz4Ig4byRz4TOrM+Bzr/Phc+CIOG8kM+Bz4HPjc+DzrHPhM6/LCDhvLHOrc68zrXOvc+Mz4Igz4DOtc+BOgorzrHhvZDPhOG/ts69IM6z4b2wz4Egz4PPhs61z4TOrc+B4b+Dz4POuc69IOG8gM+EzrHPg864zrHOu86v4b+Dz4POuc69IOG9hM67zr/Ovc+Ezr8sCivOvc6uz4DOuc6/zrksIM6/4byzIM66zrHPhOG9sCDOss6/4b+mz4Ig4b2Zz4DOtc+Bzq/Ov869zr/PgiDhvKjOtc67zq/Ov865zr8KK+G8pM+DzrjOuc6/zr06IM6x4b2Qz4ThvbDPgSDhvYEgz4TOv+G/ls+DzrnOvSDhvIDPhs61zq/Ou861z4TOvyDOvc+Mz4PPhM65zrzOv869IOG8ps68zrHPgS4KK8+E4b+2zr0g4byBzrzPjM64zrXOvSDOs861LCDOuM61zqwsIM64z43Os86xz4TOtc+BIM6UzrnPjM+CLCDOteG8sM+A4b2yIM66zrHhvbYg4byhzrzhv5bOvS4KKyoKK+G8lM69zrjigJkg4byEzrvOu86/zrkgzrzhvbLOvSDPgM6szr3PhM61z4IsIOG9hc+Dzr/OuSDPhs+NzrPOv869IM6x4bywz4DhvbrOvSDhvYTOu861zrjPgc6/zr0sCivOv+G8tM66zr/OuSDhvJTPg86xzr0sIM+Az4zOu861zrzPjM69IM+EzrUgz4DOtc+GzrXPhc6zz4zPhM61z4Ig4bygzrThvbIgzrjOrM67zrHPg8+DzrHOvToKK8+E4b24zr0gzrTigJkgzr/hvLbOv869IM69z4zPg8+Ezr/PhSDOus61z4fPgc63zrzOrc69zr/OvSDhvKDOtOG9siDOs8+Fzr3Osc65zrrhvbjPggorzr3Pjc68z4bOtyDPgM+Mz4TOvc654oCZIOG8lM+Bz4XOus61IM6azrHOu8+Fz4jhvbwgzrThv5bOsSDOuM61zqzPic69CivhvJDOvSDPg8+Azq3Pg8+DzrkgzrPOu86xz4bPhc+Bzr/hv5bPg865LCDOu865zrvOsc65zr/OvM6tzr3OtyDPgM+Mz4POuc69IM614by2zr3Osc65Lgor4byAzrvOu+KAmSDhvYXPhM61IM604b20IOG8lM+Ezr/PgiDhvKbOu864zrUgz4DOtc+BzrnPgM67zr/OvM6tzr3Pic69IOG8kM69zrnOsc+Fz4Thv7bOvSwKK8+E4b+3IM6/4byxIOG8kM+AzrXOus67z47Pg86xzr3PhM6/IM64zrXOv+G9tiDOv+G8ts66z4zOvc60zrUgzr3Orc61z4POuM6xzrkKK8614bywz4Ig4by4zrjOrM66zrfOvSwgzr/hvZDOtOKAmSDhvJTOvc64zrEgz4DOtc+Gz4XOs868zq3Ovc6/z4Ig4bymzrXOvSDhvIDOrc64zrvPic69CivOus6x4b22IM68zrXPhOG9sCDOv+G8t8+Dzrkgz4bOr867zr/Ouc+DzrkuIM64zrXOv+G9tiDOtOKAmSDhvJDOu86tzrHOuc+Bzr/OvSDhvIXPgM6xzr3PhM61z4IKK869z4zPg8+GzrkgzqDOv8+DzrXOuc60zqzPic69zr/Pgjog4b2BIM604oCZIOG8gM+Dz4DOtc+Bz4fhvbLPgiDOvM61zr3Orc6xzrnOvc61zr0KK+G8gM69z4TOuc64zq3hv7Mg4b2IzrTPhc+D4b+Gzrkgz4DOrM+Bzr/PgiDhvKPOvSDOs86x4b+WzrHOvSDhvLHOus6tz4POuM6xzrkuCisqCivhvIDOu8674oCZIOG9gSDOvOG9ss69IM6R4bywzrjOr86/z4DOsc+CIM68zrXPhM61zrrOr86xzrjOtSDPhM63zrvPjM644oCZIOG8kM+Mzr3PhM6xz4IsCivOkeG8sM64zq/Ov8+AzrHPgiDPhM6/4b22IM60zrnPh8644b2wIM60zrXOtM6xzq/Osc+EzrHOuSwg4byUz4PPh86xz4TOv865IOG8gM69zrTPgeG/ts69LAorzr/hvLEgzrzhvbLOvSDOtM+Fz4POv868zq3Ovc6/z4Ug4b2Zz4DOtc+Bzq/Ov869zr/PgiDOv+G8sSDOtOKAmSDhvIDOvc65z4zOvc+Ezr/PgiwKK+G8gM69z4TOuc+Mz4nOvSDPhM6xz43Pgc+Jzr0gz4TOtSDOus6x4b22IOG8gM+Bzr3Otc654b+2zr0g4byRzrrOsc+Ez4zOvM6yzrfPgi4KK+G8lM69zrjigJkg4b2FIM6z4oCZIOG8kM+Ezq3Pgc+AzrXPhM6/IM60zrHOuc+E4b22IM+AzrHPgc6uzrzOtc69zr/Pgjogzr/hvLEgzrThvbIgzrThvbQg4byEzrvOu86/zrkKK86WzrfOveG9uM+CIOG8kM694b22IM68zrXOs86sz4HOv865z4POuc69IOG9iM67z4XOvM+Azq/Ov8+FIOG8gc64z4HPjM6/zrkg4bymz4POsc69Lgorz4TOv+G/ls+DzrkgzrThvbIgzrzPjc64z4nOvSDhvKbPgc+HzrUgz4DOsc+E4b20z4Eg4byAzr3OtM+B4b+2zr0gz4TOtSDOuM614b+2zr0gz4TOtToKK868zr3Ors+DzrHPhM6/IM6z4b2wz4EgzrrOsc+E4b2wIM64z4XOvOG9uM69IOG8gM68z43OvM6/zr3Ov8+CIM6R4bywzrPOr8+DzrjOv865zr8sCivPhM+Mzr0g4b+l4oCZIOG8iM6zzrHOvM61zrzOvc6/zr3Or860zrfPgiDPhM63zrvOtc66zrvPhc+E4b24z4Ig4byUzrrPhM6xzr3igJkg4b2Iz4HOrc+Dz4TOt8+COgorz4TOv+G/piDhvYUgzrPigJkg4byQz4DOuc68zr3Ot8+DzrjOteG9ts+CIOG8lM+AzrXigJkg4byAzrjOsc69zqzPhM6/zrnPg865IM68zrXPhM63z43OtM6xOgorKgor4oCc4b2iIM+Az4zPgM6/zrksIM6/4by3zr/OvSDOtM6uIM69z4UgzrjOtc6/4b26z4IgzrLPgc6/z4TOv+G9tiDOseG8sM+EzrnPjM+Jzr3PhM6xzrk6CivhvJDOviDhvKHOvM6tz4nOvSDOs86sz4Egz4bOsc+DzrkgzrrOrM664oCZIOG8lM68zrzOtc69zrHOuSwgzr/hvLEgzrThvbIgzrrOseG9tiDOseG9kM+Ezr/hvbYKK8+Dz4bhv4fPg865zr0g4byAz4TOsc+DzrjOsc67zq/hv4PPg865zr0g4b2Rz4DhvbLPgSDOvM+Mz4HOv869IOG8hM67zrPOteKAmSDhvJTPh86/z4XPg865zr0sCivhvaHPgiDOus6x4b22IM694b+mzr0gzpHhvLTOs865z4POuM6/z4Ig4b2Rz4DhvbLPgSDOvM+Mz4HOv869IOG8iM+Ez4HOtc6vzIjOtM6xzr8KK86z4b+GzrzigJkg4byEzrvOv8+Hzr/OvSDOvM69zrfPg8+Ezq7OvSwgz4ThvbjOvSDOtOKAmSDhvJTOus+EzrHOvc61IM69zr/Pg8+Ezq7Pg86xzr3PhM6xLAorzrXhvLDOtOG9vM+CIM6x4bywz4DhvbrOvSDhvYTOu861zrjPgc6/zr0sIOG8kM+AzrXhvbYgz4DPgc+MIM6/4byxIM614by0z4DOv868zrXOvSDhvKHOvM614b+Wz4IsCivhvJnPgc68zrXOr86xzr0gz4DOrc68z4jOsc69z4TOtc+CLCDhvJDPjc+DzrrOv8+Azr/OvSDhvIDPgc6zzrXPis+Gz4zOvc+EzrfOvSwKK868zq7PhOKAmSDOseG9kM+E4b24zr0gzrrPhM61zq/Ovc61zrnOvSDOvM6uz4TOtSDOvM69zqzOsc+DzrjOsc65IOG8hM66zr/Ouc+EzrnOvToKK+G8kM66IM6z4b2wz4Eg4b2Iz4HOrc+Dz4TOsc6/IM+Ezq/Pg865z4Ig4byUz4PPg861z4TOsc65IOG8iM+Ez4HOtc6vzIjOtM6xzr8sCivhvYHPgM+Az4zPhOKAmSDhvILOvSDhvKHOss6uz4Phv4Mgz4TOtSDOus6x4b22IOG8p8+CIOG8sc68zrXOr8+BzrXPhM6xzrkgzrHhvLTOt8+CLgor4b2jz4Ig4byUz4bOsc644oCZIOG8mc+BzrzOtc6vzrHPgiwg4byAzrvOu+KAmSDOv+G9kCDPhs+Bzq3Ovc6xz4IgzpHhvLDOs86vz4POuM6/zrnOvworz4DOteG/ls644oCZIOG8gM6zzrHOuOG9sCDPhs+Bzr/Ovc6tz4nOvTogzr3hv6bOvSDOtOKAmSDhvIHOuM+Bz4zOsSDPgM6szr3PhOKAmSDhvIDPgM6tz4TOuc+DzrXOvS7igJ0KKworQFNFVCBbW1s6R3JlZWs6XSZbXHUwMzcwLVx1MDNFMSBcdTAzRjAtXHUwM0ZGXV0gW1w6LTs/XHUwMEI3XHUwMzdFXHUwMzg3XV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9IYW4tTGF0aW4udHh0IGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1Rlc3RfSGFuLUxhdGluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQ4MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1Rlc3RfSGFuLUxhdGluLnR4dApAQCAtMCwwICsxLDMwIEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9IYW4tTGF0aW4udHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wNy8yNiAyMDowOTowMSAkCisjICRSZXZpc2lvbjogMS4xICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQFVQUEVSRklMVEVSQAor5LuA5LmI5pivVW5pY29kZSjnu5/kuIDnoIEpPworVW5pY29kZee7meavj+S4quWtl+espuaPkOS+m+S6huS4gOS4quWUr+S4gOeahOaVsOWtl++8jAor5LiN6K665piv5LuA5LmI5bmz5Y+w77yMCivkuI3orrrmmK/ku4DkuYjnqIvluo/vvIwKK+S4jeiuuuaYr+S7gOS5iOivreiogOOAggorCivln7rmnKzkuIrvvIzorqHnrpfmnLrlj6rmmK/lpITnkIbmlbDlrZfjgILlroPku6zmjIflrprkuIDkuKrmlbDlrZfvvIzmnaXlgqjlrZjlrZfmr43miJblhbbku5blrZfnrKbjgILlnKjliJvpgKBVbmljb2Rl5LmL5YmN77yM5pyJ5pWw55m+56eN5oyH5a6a6L+Z5Lqb5pWw5a2X55qE57yW56CB57O757uf44CC5rKh5pyJ5LiA5Liq57yW56CB5Y+v5Lul5YyF5ZCr6Laz5aSf55qE5a2X56ym77ya5L6L5aaC77yM5Y2V5Y2V5qyn5bee5YWx5ZCM5L2T5bCx6ZyA6KaB5aW95Yeg56eN5LiN5ZCM55qE57yW56CB5p2l5YyF5ous5omA5pyJ55qE6K+t6KiA44CC5Y2z5L2/5piv5Y2V5LiA56eN6K+t6KiA77yM5L6L5aaC6Iux6K+t77yM5Lmf5rKh5pyJ5ZOq5LiA5Liq57yW56CB5Y+v5Lul6YCC55So5LqO5omA5pyJ55qE5a2X5q+N77yM5qCH54K556ym5Y+377yM5ZKM5bi455So55qE5oqA5pyv56ym5Y+344CCCisKK+i/meS6m+e8lueggeezu+e7n+S5n+S8muS6kuebuOWGsueqgeOAguS5n+WwseaYr+ivtO+8jOS4pOenjee8lueggeWPr+iDveS9v+eUqOebuOWQjOeahOaVsOWtl+S7o+ihqOS4pOS4quS4jeWQjOeahOWtl+espu+8jOaIluS9v+eUqOS4jeWQjOeahOaVsOWtl+S7o+ihqOebuOWQjOeahOWtl+espuOAguS7u+S9leS4gOWPsOeJueWumueahOiuoeeul+acuijnibnliKvmmK/mnI3liqHlmagp6YO96ZyA6KaB5pSv5oyB6K645aSa5LiN5ZCM55qE57yW56CB77yM5L2G5piv77yM5LiN6K665LuA5LmI5pe25YCZ5pWw5o2u6YCa6L+H5LiN5ZCM55qE57yW56CB5oiW5bmz5Y+w5LmL6Ze077yM6YKj5Lqb5pWw5o2u5oC75Lya5pyJ5o2f5Z2P55qE5Y2x6Zmp44CCCisKK1VuaWNvZGXmraPlnKjmlLnlj5jmiYDmnInov5nkuIDliIfvvIEKK1VuaWNvZGXnu5nmr4/kuKrlrZfnrKbmj5DkvpvkuobkuIDkuKrllK/kuIDnmoTmlbDlrZfvvIzkuI3orrrmmK/ku4DkuYjlubPlj7DvvIzkuI3orrrmmK/ku4DkuYjnqIvluo/vvIzkuI3orrrku4DkuYjor63oqIDjgIJVbmljb2Rl5qCH5YeG5bey57uP6KKr6L+Z5Lqb5bel5Lia55WM55qE6aKG5a+85Lus5omA6YeH55So77yM5L6L5aaC77yaQXBwbGUsIEhQLCBJQk0sIEp1c3RTeXN0ZW0sIE1pY3Jvc29mdCwgT3JhY2xlLCBTQVAsIFN1biwgU3liYXNlLCBVbmlzeXPlkozlhbblroPorrjlpJrlhazlj7jjgILmnIDmlrDnmoTmoIflh4bpg73pnIDopoFVbmljb2Rl77yM5L6L5aaCWE1MLCBKYXZhLCBFQ01BU2NyaXB0IChKYXZhU2NyaXB0KSwgTERBUCwgQ09SQkEgMy4wLCBXTUznrYnnrYnvvIzlubbkuJTvvIxVbmljb2Rl5piv5a6e546wSVNPL0lFQyAxMDY0NueahOato+inhOaWueW8j+OAguiuuOWkmuaTjeS9nOezu+e7n++8jOaJgOacieacgOaWsOeahOa1j+iniOWZqOWSjOiuuOWkmuWFtuS7luS6p+WTgemDveaUr+aMgeWug+OAglVuaWNvZGXmoIflh4bnmoTlh7rnjrDlkozmlK/mjIHlroPlt6XlhbfnmoTlrZjlnKjvvIzmmK/ov5HmnaXlhajnkIPova/ku7bmioDmnK/mnIDph43opoHnmoTlj5HlsZXotovlir/jgIIKKwor5bCGVW5pY29kZeS4juWuouaIt+acjeWKoeWZqOaIluWkmuWxguW6lOeUqOeoi+W6j+WSjOe9keermee7k+WQiO+8jOavlOS9v+eUqOS8oOe7n+Wtl+espumbhuiKguecgei0ueeUqOOAglVuaWNvZGXkvb/ljZXkuIDova/ku7bkuqflk4HmiJbljZXkuIDnvZHnq5nog73lpJ/otK/nqb/lpJrkuKrlubPlj7DvvIzor63oqIDlkozlm73lrrbvvIzogIzkuI3pnIDopoHph43lu7rjgILlroPlj6/lsIbmlbDmja7kvKDovpPliLDorrjlpJrkuI3lkIznmoTns7vnu5/vvIzogIzml6DmjZ/lnY/jgIIKKwor5YWz5LqOVW5pY29kZeWtpuacr+WtpuS8mgorVW5pY29kZeWtpuacr+WtpuS8muaYr+S4gOS4qumdnuebiOWIqeeahOe7hOe7h++8jOaYr+S4uuWPkeWxle+8jOaJqeWxleWSjOaOqOW5v+S9v+eUqFVuaWNvZGXmoIflh4bogIzlu7rnq4vnmoTvvIxVbmljb2Rl5a2m5pyv5a2m5Lya6K6+56uL5LqG546w5Luj6L2v5Lu25Lqn5ZOB5ZKM5qCH5YeG5paH5pys55qE6KGo56S65rOV44CC5a2m5pyv5a2m5Lya55qE5Lya5ZGY5Luj6KGo5LqG5bm/5rOb6aKG5Z+f55qE6K6h566X5py65ZKM6LWE6K6v5bel5Lia55qE5YWs5Y+45ZKM57uE57uH44CC5a2m5pyv5a2m5Lya5Y+q55Sx5Lya5ZGY5o+Q5L6b6LWE6YeR44CCVW5pY29kZeWtpuacr+WtpuS8mueahOS8muWRmOi1hOagvOW8gOaUvue7meS4lueVjOS4iuS7u+S9leaUr+aMgVVuaWNvZGXmoIflh4blkozluIzmnJvljY/liqnlhbbmianlsZXlkozmiafooYznmoTnu4Tnu4flj4rkuKrkurrjgIIKKwor5qyy55+l5pu05aSa5L+h5oGv77yM6K+35Y+C6ZiF5pyv6K+t6K+N5rGH6KGo77yMVW5pY29kZeS6p+WTgeagt+acrO+8jOaKgOacr+eugOS7i+WSjOWPguiAg+i1hOaWmeOAggorCitDaGluZXNlIHRyYW5zbGF0aW9uIGJ5ICDpu47lnIvnj40sIFhlcm94ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1Rlc3RfSGVicmV3LUxhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9UZXN0X0hlYnJldy1MYXRpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZTkxNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9UZXN0X0hlYnJldy1MYXRpbi50eHQKQEAgLTAsMCArMSwzMCBAQAor77u/Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1Rlc3RfSGVicmV3LUxhdGluLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDcvMjYgMjA6MDk6MDEgJAorIyAkUmV2aXNpb246IDEuMSAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BVUFBFUkZJTFRFUkAKK9ee15Qg15bXlCDXmdeV16DXmden15XXkyAoVW5pY29kZSk/CivXmdeV16DXmden15XXkyDXnten16bXlCDXnteh16TXqCDXmdeZ15fXldeT15kg15zXm9ecINeq15UsIAor15zXkCDXntep16DXlCDXotecINeQ15nXlteVINek15zXmNek15XXqNee15QsIAor15zXkCDXntep16DXlCDXkdeQ15nXlteVINeq15XXm9eg15nXqiwgCivXldec15Ag157Xqdeg15Qg15HXkNeZ15bXlSDXqdek15QuCisKK9eR15DXldek158g15HXodeZ16HXmSwg157Xl9ep15HXmdedINei15XXoden15nXnSDXqNenINeR157Xodek16jXmdedLiDXlNedINee15DXl9eh16DXmdedINeQ15XXqteZ15XXqiDXldeq15XXldeZ150g15DXl9eo15nXnSDXotecLdeZ15PXmSDXlNen16bXkNeqINee16HXpNeoINec15vXnCDXkNeX15Mg157XlNedLiDXkdeY16jXnSDXlNeV157XpteQINeU15nXldeg15nXp9eV15MsINeU15nXlSDXnteQ15XXqiDXntei16jXm9eV16og16fXmdeT15XXkyDXqdeV16DXldeqINec15TXp9em15DXqiDXlNee16HXpNeo15nXnSDXlNec15zXlS4g15DXoyDXnNeQINeQ15fXqiDXnteU158g15nXm9ec15Qg15zXlNeb15nXnCDXm9ee15XXqiDXqteV15XXmdedINee16HXpNen16ouINec15PXldeS157XkDog16jXpyDXnNeQ15nXl9eV15Mg15TXkNeZ16jXldek15DXmSDXoNeT16jXqdeZ150g15vXnteUINeh15XXkteZINen15nXk9eV15PXmdedINep15XXoNeZ150g16LXnCDXnteg16og15zXm9eh15XXqiDXkNeqINeb15wg15TXqdek15XXqiDXlNee15PXldeR16jXldeqINeR15UuINeZ16rXmdeo15Qg157XlteQ16og15DXoyDXnNep16TXlCDXkdeV15PXk9eqLCDXm9ee15Ug15DXoNeS15zXmdeqINec157XqdecLCDXnNeQINeU15nXlCDXk9eZINeR157Xoteo15vXqiDXp9eZ15PXldeTINeQ15fXqiDXkdei15HXldeoINeb15wg15TXkNeV16rXmdeV16osINeh15nXnteg15kg15TXpNeZ16HXldenINeV15TXodee15zXmdedINeU15jXm9eg15nXmdedINep15HXqdeZ157XldepINep15XXmNejLiAKKwor157Xoteo15vXldeqINen15nXk9eV15Mg15DXnNeVINeQ16Mg16HXldeq16jXldeqINeW15Ug15DXqiDXlteVLiDXm9ec15XXnteoLCDXqdeg15kg16fXmdeT15XXk9eZ150g15nXm9eV15zXmdedINec15TXqdeq157XqSDXkdeQ15XXqteVINee16HXpNeoINec16nXoNeZINeq15XXmdedINeg15HXk9ec15nXnSwg15DXlSDXnNeU16nXqtee16kg15HXnteh16TXqNeZ150g16nXldeg15nXnSDXnNeQ15XXqteVINeq15UuINei15wg15vXnCDXnteX16nXkSAo15XXkdee15nXldeX15Mg16nXqNeq15nXnSkg15zXqtee15XXmiDXkdee16HXpNeoINeo15Eg16nXnCDXntei16jXm9eV16og16fXmdeT15XXkyDXqdeV16DXldeqOyDXkNeV15zXnSDXm9ecINeQ15nXnteqINep16DXqteV16DXmdedINei15XXkdeo15nXnSDXkdeZ158g157Xoteo15vXldeqINen15nXk9eV15Mg15DXlSDXpNec15jXpNeV16jXnteV16og16nXldeg15XXqiDXp9eZ15nXnSDXlNeh15nXm9eV158g16nXmdeZ16TXktee15UuCisKK9eZ15XXoNeZ16fXldeTINee16nXoNeUINeQ16og15vXnCDXlteUIQor15nXldeg15nXp9eV15Mg157Xp9em15Qg157Xodek16gg15nXmdeX15XXk9eZINec15vXnCDXqteVLCDXnNec15Ag16rXnNeV16og15HXpNec15jXpNeV16jXnteULCDXkdeq15XXm9eg15nXqiwg15DXlSDXkdep16TXlC4g16rXp9efINeU15nXldeg15nXp9eV15Mg15DXldee16Ug16LXnC3XmdeT15kg15TXnteV15HXmdec15nXnSDXkdeq16LXqdeZ15nXlCDXm9ee15UgQXBwbGXigI8sIEhQ4oCPLCBJQk3igI8sIEp1c3RTeXN0ZW3igI8sIE1pY3Jvc29mdOKAjywgT3JhY2xl4oCPLCBTQVDigI8sIFN1buKAjywgU3liYXNl4oCPLCBVbmlzeXPigI8g15XXqNeR15nXnSDXkNeX16jXmdedLiDXmdeV16DXmden15XXkyDXoNeT16jXqSDXotecLdeZ15PXmSDXqten16DXmdedINee15XXk9eo16DXmdeZ150g15vXnteVIFhNTOKAjywgSmF2YeKAjywgRUNNQVNjcmlwdCAoSmF2YVNjcmlwdCnigI7igI8sIExEQVDigI8sIENPUkJBIDMuMOKAjuKAjywgV01M4oCPINeV15vXk9eV157XlCwg15XXnteU15XXldeUINec157Xotep15Qg15DXqiDXlNeZ15nXqdeV150g15TXqNep157XmSDXqdecINeq16fXnyBJU08vSUVDIDEwNjQ2LiDXlNeV15Ag16DXqtee15og16LXnCDXmdeT15kg157Xoteo15vXldeqINeU16TXotec15Qg16jXkdeV16osINeb15wg15TXk9ek15PXpNeg15nXnSDXlNeX15PXmdep15nXnSwg15XXnteV16bXqNeZ150g16jXkdeZ150g15DXl9eo15nXnS4g15TXldek16LXqiDXqten158g15TXmdeV16DXmden15XXkyDXldeW157Xmdeg15XXqiDXlNeb15zXmdedINeU16rXldee15vXmdedINeR15Ug16DXnteg15XXqiDXotedINeU157Xktee15XXqiDXlNeb15zXnC3XoteV15zXnteZ15XXqiDXlNeX16nXldeR15XXqiDXkdeZ15XXqteoLCDXkNep16gg157Xodeq157XoNeV16og15zXkNeX16jXldeg15Qg15HXmNeb16DXldec15XXkteZ15nXqiDXlNeq15XXm9eg15QuCisKK9ep15nXnNeV15Eg15nXldeg15nXp9eV15Mg15HXmdeZ16nXldee15kg16nXqNeqLdec16fXldeXINeQ15Ug15HXmdeZ16nXldee15nXnSDXqNeR15kt16nXm9eR15XXqiDXldeR15DXqteo15kg15DXmdeg15jXqNeg15gg157XkNek16nXqCDXl9eZ16HXm9eV158g16DXmdeb16gg15HXotec15XXmdeV16og15zXoteV157XqiDXlNep15nXnteV16kg15HXodeT16jXldeqINeU16rXldeV15nXnSDXlNee16HXldeo16rXmdeV16ouINeU15XXk9eV16og15zXmdeV16DXmden15XXkywg157Xldem16gg16rXldeb16DXlCDXkNeX15Mg15DXlSDXkNeq16gg15nXl9eZ15Mg15HXqNep16og15nXm9eV15wg15zXlNeo15fXmdeRINeQ16og15nXoteT15nXlSDXnNee15LXldeV158g16TXnNeY16TXldeo157XldeqLCDXkNeo16bXldeqINeV16nXpNeV16og15zXnNeQINem15XXqNeaINeR16nXmdeg15XXmdeZ150g157XqNeX15nXp9eZ150uINeZ15XXoNeZ16fXldeTINee15DXpNep16gg157XoteR16gg16DXqteV16DXmdedINeT16jXmiDXntei16jXm9eV16og16jXkdeV16og15XXqdeV16DXldeqINee15HXnNeZINep15nXmdek15LXnteVLgorCivXpNeo15jXmdedINeQ15XXk9eV16og15TXp9eV16DXodeV16jXpteZ15XXnSDXqdecINeZ15XXoNeZ16fXldeTIChVbmljb2RlIENvbnNvcnRpdW0pIAor15TXp9eV16DXodeV16jXpteZ15XXnSDXqdecINeZ15XXoNeZ16fXldeTINeU15XXkCDXkNeo15LXldefINec15zXkCDXnteY16jXqiDXqNeV15XXlyDXqdeg15XXodeTINeb15PXmSDXnNek16rXlywg15zXlNeo15fXmdeRINeV15zXp9eT150g15DXqiDXlNep15nXnteV16kg15HXqten158g15nXldeg15nXp9eV15MsINeQ16nXqCDXnteS15PXmdeoINeQ16og15nXmdem15XXkiDXlNeY16fXodeYINeR157Xldem16jXmSDXqteV15vXoNeUINeV16rXp9eg15nXnSDXnteV15PXqNeg15nXmdedLiDXl9eR16jXmdedINeR16fXldeg16HXldeo16bXmdeV150g157XkteV15XXnyDXqNeX15Eg16nXnCDXqteQ15LXmdeT15nXnSDXldeQ16jXkteV16DXmdedINeR16rXotep15nXmdeqINeU157Xl9ep15HXmdedINeV16LXmdeR15XXkyDXlNee15nXk9eiLiDXlNen15XXoNeh15XXqNem15nXldedINee157Xldee158g16LXnC3XmdeT15kg15PXnteZLdeX15HXqCDXkdec15HXky4g15TXl9eR16jXldeqINeR16fXldeg16HXldeo16bXmdeV150g15nXldeg15nXp9eV15Mg16TXqteV15fXlCDXnNeQ16jXkteV16DXmdedINeV15zXkNeg16nXmdedINek16jXmNeZ15nXnSwg15HXm9ecINeo15fXkdeZINeU16LXldec150sINeQ16nXqCDXqteV157Xm9eZ150g15HXqten158g15nXldeg15nXp9eV15Mg15XXntei15XXoNeZ15nXoNeZ150g15zXodeZ15nXoiDXkdeU16rXpNeq15fXldeq15Ug15XXlNeY157Xoteq15UuCisKK9ec157XmdeT16Ig16DXldeh16MsINeo15DXlCDXnteZ15zXldefINee15XXoNeX15nXnSwg16jXqdeZ157XlCDXl9ec16fXmdeqINep15wg157Xldem16jXmdedINee15XXqteQ157XmdedINec15nXldeg15nXp9eV15MsINee15HXldeQINeY15vXoNeZINeVLSDXl9eV157XqNeZINei15bXqCBb16fXmdep15XXqNeZ150g15HXkNeg15LXnNeZ16pdLgorCitAU0VUIFtbOkhlYnJldzpdIFtcdTA1QjAtXHUwNUI5XHUwNUJCLVx1MDVCQ1x1MDVDMS1cdTA1QzJcdTIxMzUtXHUyMTM4XV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9JbnN0cnVjdGlvbnMuaHRtbCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9UZXN0X0luc3RydWN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjAxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9JbnN0cnVjdGlvbnMuaHRtbApAQCAtMCwwICsxLDE1NiBAQAorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTWljcm9zb2Z0IEZyb250UGFnZSA0LjAiPgorPG1ldGEgbmFtZT0iUHJvZ0lkIiBjb250ZW50PSJGcm9udFBhZ2UuRWRpdG9yLkRvY3VtZW50Ij4KKzx0aXRsZT5OZXcgVHJhbnNsaXRlcmF0aW9uIFRlc3QgRmlsZXM8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIj4KKworPGgyPk5ldyBUcmFuc2xpdGVyYXRpb24gVGVzdCBGaWxlczwvaDI+Cis8cD5UaGUgVGVzdF8qLmh0bWwgZmlsZXMgc2hvdyB0aGUgdHJhbnNsaXRlcmF0aW9uIG9mIGNoYXJhY3RlcnMgZm9yIGdpdmVuCitsYW5ndWFnZXMuIFRoZSBzYW1wbGUgZm9yIGVhY2ggbGFuZ3VhZ2UgY29uc2lzdHMgb2YgJnF1b3Q7V2hhdCBJcyBVbmljb2RlJnF1b3Q7CitpbiBUaGFpLCBmb2xsb3dlZCBieSBvdGhlciBhdmFpbGFibGUgdGV4dC4gVGhlIHRleHQgaXMgYnJva2VuIGFwYXJ0IGludG8KK3NlbnRlbmNlcyBmb3IgZWFzZSBvZiB2aWV3aW5nIChub3RlOiB3ZSBrbm93IG9mIHNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgc2VudGVuY2UKK3J1bGVzIGZvciBKYXBhbmVzZSBhbmQgQ2hpbmVzZSkuIFRoZSBsZWZ0IGNvbHVtbiBpcyB0aGUgb3JpZ2luYWwsIGFuZCB0aGUgcmlnaHQKK2lzIHRoZSByb21hbml6YXRpb24uIFRoZSBwcm9ncmFtIGFsc28gY29udmVydHMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2NyaXB0LiBJZgordGhlcmUgaXMgYSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBzb3VyY2UgYW5kIHRoZSByZXZlcnNlIHRyYW5zZm9ybWF0aW9uLCB0aGF0CitpcyBpbmRpY2F0ZWQgYnkgbWFraW5nIHRoZSBiYWNrZ3JvdW5kIDxmb250IGNvbG9yPSIjRkYwMDAwIj48Yj5yZWQ8L2I+PC9mb250PgorZnJvbSB0aGF0IHBvaW50IG9uLjwvcD4KKzxibG9ja3F1b3RlPgorICA8cD48aT48Yj5Ob3RlOiA8L2I+SWYgeW91IGhhdmUgc29tZSBtb3JlIHRleHQgdGhhdCB5b3Ugd291bGQgbGlrZSBhZGRlZCB0byB0aGUKKyAgc2FtcGxlLCBqdXN0IGxldCBtZSBrbm93LiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIG5hbWUgbGlzdHMsIHNpbmNlCisgIHRoZXkgYXJlIHRoZSB0eXBpY2FsIHNvdXJjZS48L2k+PC9wPgorPC9ibG9ja3F1b3RlPgorPGgzPlN0YW5kYXJkczwvaDM+Cis8cD5UaGUgZ29hbCBpcyB0byBmb2xsb3cgYSBnaXZlbiBzdGFuZGFyZCwgc3VjaCBhcyBJU08qIG9yIFVOR0VHTiB3aGVyZXZlcgorcG9zc2libGUuIFdlIGFsc28gbmVlZCB0byByb3VuZC10cmlwLCBzbyBpbiBzb21lIGNhc2VzLCB0aGF0IG1lYW5zIGFkZGluZyBzb21lCithZGRpdGlvbmFsIGFjY2VudCBtYXJrcyB0byBkaXNhbWJpZ3VhdGUgY2hhcmFjdGVycy4gQW5kIG9mdGVuIHRoZSBzb3VyY2UKK3N0YW5kYXJkcyBhcmUgbWlzc2luZyBzb21lIGNoYXJhY3RlcnMsIHN1Y2ggYXMgY2hhcmFjdGVycyB3aXRoIGNvbWJpbmluZyBIYW16YXMKK2luIEFyYWJpYy4gUmVtZW1iZXIgdGhhdCB0aGUgZ29hbCBmb3IgdGhlc2UgaXMgdHJhbnNsaXRlcmF0aW9uICh1bmFtYmlndW91c2x5CityZXByZXNlbnRpbmcgYWxsIHRoZSBsZXR0ZXJzIGluIHRoZSBvcmlnaW5hbCksIG5vdCB0cmFuc2NyaXB0aW9uIChyZXByZXNlbnRpbmcKK3RoZSBiZXN0IHByb251bmNpYXRpb24pLjwvcD4KKzx1bD4KKyAgPGxpPjxiPjxhIGhyZWY9IlRlc3RfVGhhaS1MYXRpbi5odG1sIj5UaGFpPC9hPjo8L2I+IElTTyAxMTk0MCAmbHQ7IDxhIGhyZWY9Imh0dHA6Ly9ob21lcGFnZS5tYWMuY29tL3NpcmJpbmtzL3BkZi9UaGFpLnIyLnBkZiI+aHR0cDovL2hvbWVwYWdlLm1hYy5jb20vc2lyYmlua3MvcGRmL1RoYWkucjIucGRmPC9hPgorICAgICZndDsgcGx1cyBhIGZldyBpdGVtczoKKyAgICA8dWw+CisgICAgICA8bGk+QWNjZW50cyBtYXkgYmUgYWRkZWQgdG8gdGhlIExhdGluIGZvciBkaXNhbWJpZ3VhdGlvbi48L2xpPgorICAgICAgPGxpPkluIHRoZSBuZXh0IHJlbGVhc2UsIHdlJ2QgbGlrZSB0byBkbyB0aGUgVU5HRUdOIHZlcnNpb24gJmx0OyA8YSBocmVmPSJodHRwOi8vd3d3LmVraS5lZS93Z3JzL3JvbTFfdGgucGRmIj5odHRwOi8vd3d3LmVraS5lZS93Z3JzL3JvbTFfdGgucGRmPC9hPgorICAgICAgICAmZ3Q7IHdoaWNoIGlzIHByb2JhYmx5IG1vcmUgdXNlZnVsIChhbmQgcmVhZGFibGUpLCBhbmQgZm9sbG93cyBtb3JlCisgICAgICAgIGNsb3NlbHkgdGhlIFRoYWkgc3RhbmRhcmQuPC9saT4KKyAgICAgIDxsaT5TcGFjZXMgYXJlIHByb3ZpZGVkIGF0IHdvcmQtYnJlYWtzLCB1c2luZyB0aGUgVGhhaSBCcmVha0l0ZXJhdG9yLjwvbGk+CisgICAgICA8bGk+QW4gaW5oZXJlbnQgdm93ZWwgKCYjNzg4NTspIGlzIGFkZGVkLCBhcyBpbiBVTkdFR04uIFRoZSBkb3QgaXMgZm9yCisgICAgICAgIGRpc2FtYmlndWF0aW9uLgorICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPjxpPk5vdGU6IGlmIHRoZSBpbmhlcmVudCB2b3dlbCBwb3NpdGlvbnMgY2Fubm90IGJlIGFsZ29yaXRobWljYWxseQorICAgICAgICAgICAgZGV0ZXJtaW5lZCwgbGV0IG1lIGtub3cgYW5kIEkgd2lsbCByZW1vdmUgdGhlbS48L2k+PC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgPC91bD4KKyAgPC9saT4KKyAgPGxpPjxiPjxhIGhyZWY9IlRlc3RfQXJhYmljLUxhdGluLmh0bWwiPkFyYWJpYzwvYT46IDwvYj5HZW5lcmFsbHkgZm9sbG93cworICAgIFVOR0VHTiAmbHQ7IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWtpLmVlL3dncnMvcm9tMV9hci5wZGYiPmh0dHA6Ly93d3cuZWtpLmVlL3dncnMvcm9tMV9hci5wZGY8L2E+CisgICAgJmd0OworICAgIDx1bD4KKyAgICAgIDxsaT5BY2NlbnRzIG1heSBiZSBhZGRlZCB0byB0aGUgTGF0aW4gZm9yIGRpc2FtYmlndWF0aW9uLjwvbGk+CisgICAgICA8bGk+T2NjYXNpb25hbGx5IGRldmlhdGVzIGluIHRoZSBkaXJlY3Rpb24gb2YgSVNPIDIzMyAmbHQ7IDxhIGhyZWY9Imh0dHA6Ly9ob21lcGFnZS5tYWMuY29tL3NpcmJpbmtzL3BkZi9BcmFiaWMucGRmIj5odHRwOi8vaG9tZXBhZ2UubWFjLmNvbS9zaXJiaW5rcy9wZGYvQXJhYmljLnBkZjwvYT4KKyAgICAgICAgJmd0OworICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPndpdGggdW5kZXJkb3QgaW5zdGVhZCBvZiBjZWRpbGxhIGZvciBsZXR0ZXIgbGlrZSBTQUQsIHNpbmNlIHRob3NlCisgICAgICAgICAgICBhcmUgZXhwbGljaXRseSBpbiBVbmljb2RlIGZvciB0cmFuc2xpdGVyYXRpb24gb2YgQXJhYmljPC9saT4KKyAgICAgICAgICA8bGk+YWRkaW5nIGV4dHJhIG5vbi1BcmFiaWMtbGFuZ3VhZ2UgbGV0dGVycywgbGlrZSBQRUguIE5vdGU6IG5vdCBhbGwKKyAgICAgICAgICAgIGV4dGVuZGVkIEFyYWJpYyBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkIHlldC48L2xpPgorICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgIDxsaT5Eb2VzIDxpPm5vdDwvaT4gZG8gYXNzaW1pbGF0aW9uIG9mICZxdW90O2FsJnF1b3Q7LCBub3IgaHlwaGVuYXRpb24gb2YKKyAgICAgICAgaXQuCisgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGk+V2hpbGUgaXQgY291bGQgYmUgZG9uZSwgd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHByZWZpeAorICAgICAgICAgICAgJnF1b3Q7YWwmcXVvdDsgY291bGQgb2NjdXIgb3RoZXIgdGhhbiBhcyB0aGUgZGVmaW5pdGUgYXJ0aWNsZSAoc2luY2UKKyAgICAgICAgICAgIG5vIHNwYWNlIGlzIHVzZWQpLjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgPGxpPlRoaXMgaXMgdHJhbnNsaXRlcmF0aW9uLiBGb3IgPGk+dHJhbnNjcmlwdGlvbjwvaT4gb25lIHdvdWxkIHdhbnQgYW4KKyAgICAgICAgZW5naW5lIHRoYXQgYWRkZWQgcG9pbnRzIGFwcHJvcHJpYXRlbHkgdG8gdGhlIEhlYnJldy48L2xpPgorICAgIDwvdWw+CisgIDwvbGk+CisgIDxsaT48Yj48YSBocmVmPSJUZXN0X0hlYnJldy1MYXRpbi5odG1sIj5IZWJyZXc8L2E+PC9iPjxiPjogPC9iPkdlbmVyYWxseQorICAgIGZvbGxvd3MgVU5HRUdOICZsdDsgPGEgaHJlZj0iaHR0cDovL3d3dy5la2kuZWUvd2dycy9yb20xX2hlLnBkZiI+aHR0cDovL3d3dy5la2kuZWUvd2dycy9yb20xX2hlLnBkZjwvYT4KKyAgICAmZ3Q7LCB3aXRoIHNvbWUgZXhjZXB0aW9uczoKKyAgICA8dWw+CisgICAgICA8bGk+QWNjZW50cyBtYXkgYmUgYWRkZWQgdG8gdGhlIExhdGluIGZvciBkaXNhbWJpZ3VhdGlvbi48L2xpPgorICAgICAgPGxpPkNvbWJpbmF0aW9ucyBvZiBkYWdlc2gsIHNoaW4vc2luIGRvdCB0aGF0IHdvdWxkIHByb2R1Y2UgZGlmZmVyZW50CisgICAgICAgIGxldHRlcnMgYXJlIG5vdCB5ZXQgY2FsbGVkIG91dC48L2xpPgorICAgICAgPGxpPk5vdGUgdGhhdCB0aGUgZmluYWwgZm9ybXMgYXJlIG5vdCBwcmVzZXJ2ZWQuIFRodXMsIHdoZW4gZ29pbmcgZnJvbQorICAgICAgICBMYXRpbiB0byBIZWJyZXcsIGEgY2hhcmFjdGVyIGlzIGdpdmVuIGZpbmFsIGZvcm0gZGVwZW5kaW5nIG9uIGl0cworICAgICAgICBwb3NpdGlvbi4KKyAgICAgICAgPHVsPgorICAgICAgICAgIDxsaT5FLmcuICYjMTUwMjsmIzE1MDE7JiMxNTAyOyYjMTUwMTsgPSZndDsgbW1tbSA9Jmd0OworICAgICAgICAgICAgJiMxNTAyOyYjMTUwMjsmIzE1MDI7JiMxNTAxOzwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgPGxpPlRoaXMgaXMgdHJhbnNsaXRlcmF0aW9uLiBGb3IgPGk+dHJhbnNjcmlwdGlvbjwvaT4gb25lIHdvdWxkIHdhbnQgYW4KKyAgICAgICAgZW5naW5lIHRoYXQgYWRkZWQgcG9pbnRzIGFwcHJvcHJpYXRlbHkgdG8gdGhlIEhlYnJldy48L2xpPgorICAgICAgPGxpPlNlZSBhbHNvICZsdDsgPGEgaHJlZj0iaHR0cDovL2hvbWVwYWdlLm1hYy5jb20vc2lyYmlua3MvcGRmL0hlYnJldy5yMS5wZGYiPmh0dHA6Ly9ob21lcGFnZS5tYWMuY29tL3NpcmJpbmtzL3BkZi9IZWJyZXcucjEucGRmPC9hPgorICAgICAgICAmZ3Q7IGZvciB0aGUgSVNPIHZlcnNpb24uIFRoZSBDaGljYWdvIE1hbnVhbCBvZiBTdHlsZSBoYXMgYSBjbGVhciB0YWJsZQorICAgICAgICBvZiBtYXBwaW5ncyBmb3IgdGhlIHZvd2VsIG1hcmtzLjwvbGk+CisgICAgPC91bD4KKyAgPC9saT4KKyAgPGxpPjxiPjxhIGhyZWY9IlRlc3RfSGFuLUxhdGluLmh0bWwiPkhhbjwvYT46PC9iPiBVc2VzIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3Lm1hbmRhcmludG9vbHMuY29tL2NlZGljdC5odG1sIj5DRURJQ1Q8L2E+CisgICAgZGF0YSBwbHVzIFVuaWNvZGUgVW5paGFuIDxpPmtNYW5kYXJpbjwvaT4gdmFsdWVzIGZvciBwaW55aW4uIERvZXNuJ3QKKyAgICByb3VuZHRyaXAhCisgICAgPHVsPgorICAgICAgPGxpPjxpPk5vdGU6IDwvaT50aGUgQ2hpbmVzZSBwcm9udW5jaWF0aW9uIG9mIEhhbiBjaGFyYWN0ZXJzIHZhcmllcyBieQorICAgICAgICBjb250ZXh0IGFuZCBncmFtbWFyLCB0aG91Z2ggbm93aGVyZSBuZWFyIGFzIG11Y2ggYSBKYXBhbmVzZS4KKyAgICAgICAgPHVsPgorICAgICAgICAgIDxsaT5JZGVhbGx5IHdlJ2QgaGF2ZSBhbiB1bmRlcmx5aW5nIGVuZ2luZSBmb3IgdGhpcy4gSW4gMi40IHdlIHdpbGwKKyAgICAgICAgICAgIGhhdmUgYSBwbHVnLWluIGludGVyZmFjZSBzbyB0aGF0IHBlb3BsZSBjb3VsZCBhZGQgb25lLCBzdWNoIGFzIHRoZQorICAgICAgICAgICAgSUJNIGVuZ2luZS48L2xpPgorICAgICAgICAgIDxsaT5UaGUgZGF0YSBmcm9tIENFRElDVCBhbmQgVW5paGFuIGRvbid0IGxpc3QgdGhlIG1vc3QgZnJlcXVlbnQKKyAgICAgICAgICAgIGNob2ljZSBmaXJzdCwgc28gd2Ugd2lsbCBiZSB1cGRhdGluZyB0aGF0LjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgIDwvdWw+CisgIDwvbGk+CisgIDxsaT48YSBocmVmPSJUZXN0X0dyZWVrLUxhdGluX1VOR0VHTi5odG1sIj48Yj5HcmVlay9VTkdFR048L2I+PC9hPjogVXNlcyBhCisgICAgbW9kZXJuIEdyZWVrIHRyYW5zbGl0ZXJhdGlvbiwgYmFzZWQgb24gdGhlIFVOR0VHTiBydWxlcyBhdCAmbHQ7IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWtpLmVlL3dncnMvcm9tMV9lbC5wZGYiPmh0dHA6Ly93d3cuZWtpLmVlL3dncnMvcm9tMV9lbC5wZGY8L2E+CisgICAgJmd0Oy4gVGhpcyB2ZXJzaW9uIHdpbGwgbm90IHJvdW5kdHJpcCBhbmNpZW50IEdyZWVrLjwvbGk+CisgIDxsaT48YSBocmVmPSJUZXN0X0dyZWVrLUxhdGluLmh0bWwiPjxiPkdyZWVrPC9iPjwvYT46IFVzZXMgYSBjbGFzc2ljIEdyZWVrCisgICAgdHJhbnNsaXRlcmF0aW9uLiBUaGlzIHZlcnNpb24gd2lsbCBub3Qgcm91bmR0cmlwIG1vZGVybiBHcmVlay48L2xpPgorPC91bD4KKzxoMz48Yj5Ob3RlczwvYj48L2gzPgorPG9sPgorICA8bGk+Rm9yIHJlYWRhYmlsaXR5LCB0aGUgZmlsZXMgaGF2ZSBhIGZldyBvdGhlciB0aGluZ3MgYmVzaWRlcyBqdXN0IHRoZQorICAgIHRyYW5zbGl0ZXJhdGlvbjoKKyAgICA8dWw+CisgICAgICA8bGk+VGhlIGZpcnN0IHdvcmQgb2YgdGhlIHNlbnRlbmNlcyBhcmUgdGl0bGVjYXNlZCwgYXMgYXJlIG5hbWVzICh3aGVyZSB3ZQorICAgICAgICBoYXZlIGEgbmFtZS1saXN0LCBzdWNoIGFzIGluIFRoYWkpLjwvbGk+CisgICAgICA8bGk+VGhlIExhdGluIGluIHRoZSBvcmlnaW5hbCBpcyBtYXBwZWQgdG8gdGhlIHByaXZhdGUtdXNlIHpvbmUgYmVmb3JlCisgICAgICAgIGNvbnZlcnNpb24sIGFuZCB0aGVuIGFnYWluIGFmdGVyIGNvbnZlcnNpb24uIFRoaXMgZG9lcyBoYXZlIHRoZSBkb3duc2lkZQorICAgICAgICB0aGF0IGFueSBydWxlcyAoc3VjaCBhcyBpbiBIYW4pIHRoYXQgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0IChlLmcuIGZvcgorICAgICAgICBpbnNlcnRpbmcgc3BhY2VzIG9yIGNhcGl0YWxpemF0aW9uKSB3aWxsIGd1bSB1cCBhIGxpdHRsZSBiaXQuIFRoaXMgaXMKKyAgICAgICAganVzdCBhbiBhcnRpZmFjdCBvZiB0aGUgdGVzdCBkaXNwbGF5LjwvbGk+CisgICAgPC91bD4KKyAgPC9saT4KKyAgPGxpPkkgZG9uJ3QgdGhpbmsgdGhhdCBJU08gMTE5NDAgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCB3YXkgdG8gcm9tYW5pemUsIGJ1dAorICAgIGl0IGlzIGF0IGxlYXN0IGNvbXBsZXRlIGFuZCBhIHN0YW5kYXJkLiBTbyB3aGF0IEkgYW0gaW50ZXJlc3RlZCBpbiBqdXN0IGZvcgorICAgIG5vdyBpcyB3aGV0aGVyIHRoZSBzYW1wbGVzIGluIHRoZSBmaWxlIGZvbGxvdyBpdCAod2l0aCB0aGUgYWJvdmUKKyAgICBleGNlcHRpb25zKS48L2xpPgorICA8bGk+U29tZSBvZiB0aGUgZmlsZXMgYWxzbyBoYXZlIGEgc2V0IG9mIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCwgb25lIGNoYXJhY3RlcgorICAgIHBlciByb3csIHdpdGggYSBmb2xsb3dpbmcgcm93IGxpc3RpbmcgdGhlIGhleCBhbmQgbmFtZS48L2xpPgorICA8bGk+VGhlIHNvdXJjZSBydWxlcyBmb3IgYWxsIG9mIHRoZXNlIGlzIGluIHRoZSBmb2xsb3dpbmcgVVJMLiBTbyBpZiB5b3Ugd2FudAorICAgIHRvIGtub3cgdGhlIGRldGFpbHMgb2YgaG93IHRoZSBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkLCB0aGF0IGlzIHRoZSBwbGFjZSB0bworICAgIGxvb2suCisgICAgPHVsPgorICAgICAgPGxpPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jdnMvaWN1NGovaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS8iPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jdnMvaWN1NGovaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS88L2E+PGJyPgorICAgICAgPC9saT4KKyAgICA8L3VsPgorICA8L2xpPgorPC9vbD4KKworPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9UaGFpLUxhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9UZXN0X1RoYWktTGF0aW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZmY4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9UaGFpLUxhdGluLnR4dApAQCAtMCwwICsxLDczIEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVGVzdF9UaGFpLUxhdGluLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDcvMjYgMjA6MDk6MDEgJAorIyAkUmV2aXNpb246IDEuMSAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BVUFBFUkZJTFRFUkAKK1VuaWNvZGUg4LiE4Li34Lit4Lit4Liw4LmE4LijPworVW5pY29kZSDguIHguLPguKvguJnguJTguKvguKHguLLguKLguYDguKXguILguYDguInguJ7guLLguLDguKrguLPguKvguKPguLHguJrguJfguLjguIHguK3guLHguIHguILguKPguLAKK+C5guC4lOC4ouC5hOC4oeC5iOC4quC4meC5g+C4iOC4p+C5iOC4suC5gOC4m+C5h+C4meC5geC4nuC4peC5h+C4leC4n+C4reC4o+C5jOC4oeC5g+C4lAor4LmE4Lih4LmI4LiC4Li24LmJ4LiZ4LiB4Lix4Lia4Lin4LmI4Liy4LiI4Liw4LmA4Lib4LmH4LiZ4LmC4Lib4Lij4LmB4LiB4Lij4Lih4LmD4LiUCivguYHguKXguLDguYTguKHguYjguKfguYjguLLguIjguLDguYDguJvguYfguJnguKDguLLguKnguLLguYPguJQKKwor4LmC4LiU4Lii4Lie4Li34LmJ4LiZ4LiQ4Liy4LiZ4LmB4Lil4LmJ4LinLCDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYzguIjguLDguYDguIHguLXguYjguKLguKfguILguYnguK3guIfguIHguLHguJrguYDguKPguLfguYjguK3guIfguILguK3guIfguJXguLHguKfguYDguKXguIIuIOC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jOC4iOC4seC4lOC5gOC4geC5h+C4muC4leC4seC4p+C4reC4seC4geC4qeC4o+C5geC4peC4sOC4reC4seC4geC4guC4o+C4sOC4reC4t+C5iOC4meC5hiDguYLguJTguKLguIHguLLguKPguIHguLPguKvguJnguJTguKvguKHguLLguKLguYDguKXguILguYPguKvguYnguKrguLPguKvguKPguLHguJrguYHguJXguYjguKXguLDguJXguLHguKcuIOC4geC5iOC4reC4meC4q+C4meC5ieC4suC4l+C4teC5iOC5iiBVbmljb2RlIOC4iOC4sOC4luC4ueC4geC4quC4o+C5ieC4suC4h+C4guC4tuC5ieC4mSwg4LmE4LiU4LmJ4Lih4Li14Lij4Liw4Lia4LiaIGVuY29kaW5nIOC4reC4ouC4ueC5iOC4q+C4peC4suC4ouC4o+C5ieC4reC4ouC4o+C4sOC4muC4muC4quC4s+C4q+C4o+C4seC4muC4geC4suC4o+C4geC4s+C4q+C4meC4lOC4q+C4oeC4suC4ouC5gOC4peC4guC5gOC4q+C4peC5iOC4suC4meC4teC5iS4g4LmE4Lih4LmI4Lih4Li1IGVuY29kaW5nIOC5g+C4lOC4l+C4teC5iOC4oeC4teC4iOC4s+C4meC4p+C4meC4leC4seC4p+C4reC4seC4geC4guC4o+C4sOC4oeC4suC4geC5gOC4nuC4teC4ouC4h+C4nuC4rTog4Lii4LiB4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4LmA4LiK4LmI4LiZLCDguYDguInguJ7guLLguLDguYPguJnguIHguKXguLjguYjguKHguKrguKvguKDguLLguJ7guKLguLjguYLguKPguJvguYDguJ7guLXguKLguIfguYHguKvguYjguIfguYDguJTguLXguKLguKcg4LiB4LmH4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4Lir4Lil4Liy4LiiIGVuY29kaW5nIOC5g+C4meC4geC4suC4o+C4hOC4o+C4reC4muC4hOC4peC4uOC4oeC4l+C4uOC4geC4oOC4suC4qeC4suC5g+C4meC4geC4peC4uOC5iOC4oS4g4Lir4Lij4Li34Lit4LmB4Lih4LmJ4LmB4LiV4LmI4LmD4LiZ4Lig4Liy4Lip4Liy4LmA4LiU4Li14LmI4Lii4LinIOC5gOC4iuC5iOC4mSDguKDguLLguKnguLLguK3guLHguIfguIHguKTguKkg4LiB4LmH4LmE4Lih4LmI4Lih4Li1IGVuY29kaW5nIOC5g+C4lOC4l+C4teC5iOC5gOC4nuC4teC4ouC4h+C4nuC4reC4quC4s+C4q+C4o+C4seC4muC4l+C4uOC4geC4leC4seC4p+C4reC4seC4geC4qeC4oywg4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lir4Lih4Liy4Lii4Lin4Lij4Lij4LiE4LiV4Lit4LiZIOC5geC4peC4sOC4quC4seC4jeC4peC4seC4geC4qeC4k+C5jOC4l+C4suC4h+C5gOC4l+C4hOC4meC4tOC4hOC4l+C4teC5iOC5g+C4iuC5ieC4geC4seC4meC4reC4ouC4ueC5iOC4l+C4seC5iOC4p+C5hOC4my4gCisKK+C4o+C4sOC4muC4miBlbmNvZGluZyDguYDguKvguKXguYjguLLguJnguLXguYnguKLguLHguIfguILguLHguJTguYHguKLguYnguIfguIvguLbguYjguIfguIHguLHguJnguYHguKXguLDguIHguLHguJkuIOC4meC4seC5iOC4meC4geC5h+C4hOC4t+C4rSwg4LmD4LiZ4Liq4Lit4LiHIGVuY29kaW5nIOC4quC4suC4oeC4suC4o+C4luC5g+C4iuC5ieC4q+C4oeC4suC4ouC5gOC4peC4guC5gOC4lOC4teC4ouC4p+C4geC4seC4meC4quC4s+C4q+C4o+C4seC4muC4leC4seC4p+C4reC4seC4geC4guC4o+C4sOC4quC4reC4h+C4leC4seC4p+C4l+C4teC5iOC5geC4leC4geC4leC5iOC4suC4h+C4geC4seC4mSzguKvguKPguLfguK3guYPguIrguYnguKvguKHguLLguKLguYDguKXguILguJXguYjguLLguIfguIHguLHguJnguKrguLPguKvguKPguLHguJrguK3guLHguIHguILguKPguLDguJXguLHguKfguYDguJTguLXguKLguKfguIHguLHguJkuIOC5g+C4meC4o+C4sOC4muC4muC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jCAo4LmC4LiU4Lii4LmA4LiJ4Lie4Liy4Liw4LmA4LiL4Li04Lij4LmM4Lif4LmA4Lin4Lit4Lij4LmMKSDguJXguYnguK3guIfguKHguLXguIHguLLguKPguKrguJnguLHguJrguKrguJnguLjguJnguKvguKXguLLguKIgZW5jb2Rpbmc7IOC5geC4peC4sOC5gOC4oeC4t+C5iOC4reC4guC5ieC4reC4oeC4ueC4peC4l+C4teC5iOC4nOC5iOC4suC4meC5hOC4m+C4oeC4suC4o+C4sOC4q+C4p+C5iOC4suC4h+C4geC4suC4o+C5gOC4guC5ieC4suC4o+C4q+C4seC4quC4q+C4o+C4t+C4reC5geC4nuC4peC5h+C4leC4n+C4reC4o+C5jOC4oeC4l+C4teC5iOC4leC5iOC4suC4h+C4geC4seC4mSwg4LiC4LmJ4Lit4Lih4Li54Lil4LiZ4Lix4LmJ4LiZ4LiI4Liw4LmA4Liq4Li14LmI4Lii4LiH4LiV4LmI4Lit4LiB4Liy4Lij4Lic4Li04LiU4Lie4Lil4Liy4LiU4LmA4Liq4Li14Lii4Lir4Liy4LiiLgorCitVbmljb2RlIOC4iOC4sOC5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4quC4tOC5iOC4h+C5gOC4q+C4peC5iOC4suC4meC4seC5ieC4meC4l+C4seC5ieC4h+C4q+C4oeC4lCEKK1VuaWNvZGUg4LiB4Liz4Lir4LiZ4LiU4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LmA4LiJ4Lie4Liy4Liw4Liq4Liz4Lir4Lij4Lix4Lia4LmB4LiV4LmI4Lil4Liw4Lit4Lix4LiB4LiC4Lij4LiwLCDguYLguJTguKLguYTguKHguYjguKrguJnguYPguIjguKfguYjguLLguYDguJvguYfguJnguYHguJ7guKXguYfguJXguJ/guK3guKPguYzguKHguYPguJQsIOC5hOC4oeC5iOC4guC4tuC5ieC4meC4geC4seC4muC4p+C5iOC4suC4iOC4sOC5gOC4m+C5h+C4meC5guC4m+C4o+C5geC4geC4o+C4oeC5g+C4lOC5geC4peC4sOC5hOC4oeC5iOC4p+C5iOC4suC4iOC4sOC5gOC4m+C5h+C4meC4oOC4suC4qeC4suC5g+C4lC4g4Lih4Liy4LiV4Lij4LiQ4Liy4LiZIFVuaWNvZGUg4LmE4LiU4LmJ4LiW4Li54LiB4LiZ4Liz4LmE4Lib4LmD4LiK4LmJ4LmC4LiU4Lii4Lic4Li54LmJ4LiZ4Liz4LmD4LiZ4Lit4Li44LiV4Liq4Liy4Lir4LiB4Lij4Lij4LihIOC5gOC4iuC5iOC4mSBBcHBsZSwgSFAsIElCTSwgSnVzdFN5c3RlbSwgTWljcm9zb2Z0LCBPcmFjbGUsIFNBUCwgU3VuLCBTeWJhc2UsIFVuaXN5cyDguYHguKXguLDguK3guLfguYjguJnguYYg4Lit4Li14LiB4Lih4Liy4LiBLiBVbmljb2RlIOC5gOC4m+C5h+C4meC4quC4tOC5iOC4h+C4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC4quC4s+C4q+C4o+C4seC4muC4oeC4suC4leC4o+C4kOC4suC4meC5g+C4q+C4oeC5iOC5hiDguYDguIrguYjguJkgWE1MLCBKYXZhLCBFQ01BU2NyaXB0IChKYXZhU2NyaXB0KSwgTERBUCwgQ09SQkEgMy4wLCBXTUwg4Liv4Lil4LivLiwg4LmB4Lil4Liw4LmA4Lib4LmH4LiZ4LmB4LiZ4Lin4LiX4Liy4LiH4Lit4Lii4LmI4Liy4LiH4LmA4Lib4LmH4LiZ4LiX4Liy4LiH4LiB4Liy4Lij4LmD4LiZ4LiB4Liy4Lij4LiX4LizIElTTy9JRUMgMTA2NDYuIFVuaWNvZGUg4LmE4LiU4LmJ4Lij4Lix4Lia4LiB4Liy4Lij4Liq4LiZ4Lix4Lia4Liq4LiZ4Li44LiZ4LmD4LiZ4Lij4Liw4Lia4Lia4Lib4LiP4Li04Lia4Lix4LiV4Li04LiB4Liy4Lij4LiI4Liz4LiZ4Lin4LiZ4Lih4Liy4LiBLCDguJrguKPguLLguKfguYDguIvguK3guKPguYzguYPguKvguKHguYjguYYg4LiX4LiB4LiV4Lix4LinLCDguYHguKXguLDguJzguKXguLTguJXguKDguLHguJPguJHguYzguK3guLfguYjguJnguYYg4Lit4Li14LiB4Lih4Liy4LiBLiDguIHguLLguKPguYDguIHguLTguJTguILguLbguYnguJnguILguK3guIcgVW5pY29kZSBTdGFuZGFyZCDguYHguKXguLDguJfguLnguKXguKrguYzguJXguYjguLLguIfguYYg4LiX4Li14LmI4Lih4Li14LmD4LiZ4LiB4Liy4Lij4Liq4LiZ4Lix4Lia4Liq4LiZ4Li44LiZIFVuaWNvZGUsIOC5gOC4m+C5h+C4meC4q+C4meC4tuC5iOC4h+C5g+C4meC5geC4meC4p+C5guC4meC5ieC4oeC4l+C4suC4h+C5gOC4l+C4hOC5guC4meC5guC4peC4ouC4teC4i+C4reC4n+C4leC5jOC5geC4p+C4o+C5jOC4o+C4sOC4lOC4seC4muC5guC4peC4geC4l+C4teC5iOC4oeC4teC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jeC4l+C4teC5iOC4quC4uOC4lC4KKwor4LiB4Liy4Lij4Lij4Lin4LihIFVuaWNvZGUg4LmA4LiC4LmJ4Liy4LmE4Lib4LmD4LiZ4Lij4Liw4Lia4Lia4LmE4LiE4Lil4LmA4Lit4LmH4LiZ4LiV4LmMLeC5gOC4i+C4tOC4o+C5jOC4n+C5gOC4p+C4reC4o+C5jCDguKvguKPguLfguK3guYHguK3guYfguJ7guJ7guKXguLTguYDguITguIrguLHguJnguYHguJrguJogbXVsdGktdGllcmVkIOC5geC4peC4sOC5gOC4p+C5h+C4muC5hOC4i+C4leC5jCDguIjguLDguJfguLPguYPguKvguYnguYDguIHguLTguJTguIHguLLguKPguJvguKPguLDguKvguKLguLHguJTguITguYjguLLguYPguIrguYnguIjguYjguLLguKLguKHguLLguIHguIHguKfguYjguLLguIHguLLguKPguYPguIrguYnguIrguLjguJTguK3guLHguIHguILguKPguLDguYHguJrguJrguYDguJTguLTguKEuIFVuaWNvZGUg4LiX4Liz4LmD4Lir4LmJ4Lic4Lil4Li04LiV4Lig4Lix4LiT4LiR4LmM4LiL4Lit4Lif4LiV4LmM4LmB4Lin4Lij4LmM4Lir4LiZ4Li24LmI4LiH4LmA4LiU4Li14Lii4LinIOC4q+C4o+C4t+C4reC5gOC4p+C5h+C4muC5hOC4i+C4leC5jOC5geC4q+C5iOC4h+C5gOC4lOC4teC4ouC4pyDguKPguK3guIfguKPguLHguJrguYTguJTguYnguKvguKXguLLguKLguYHguJ7guKXguYfguJXguJ/guK3guKPguYzguKEsIOC4q+C4peC4suC4ouC4oOC4suC4qeC4suC5geC4peC4sOC4q+C4peC4suC4ouC4m+C4o+C4sOC5gOC4l+C4qOC5guC4lOC4ouC5hOC4oeC5iOC4leC5ieC4reC4h+C4l+C4s+C4geC4suC4o+C4o+C4t+C5ieC4reC4m+C4o+C4seC4muC4o+C4sOC4muC4mi4gVW5pY29kZSDguKLguLHguIfguJfguLPguYPguKvguYnguILguYnguK3guKHguLnguKXguKrguLLguKHguLLguKPguJbguYDguITguKXguLfguYjguK3guJnguKLguYnguLLguKLguYTguJvguKHguLLguYPguJnguKvguKXguLLguKLguYYg4Lij4Liw4Lia4Lia4LmC4LiU4Lii4LmE4Lih4LmI4LmA4LiB4Li04LiU4LiE4Lin4Liy4Lih4Lic4Li04LiU4Lie4Lil4Liy4LiU4LmA4Liq4Li14Lii4Lir4Liy4LiiLgorCivguYDguIHguLXguYjguKLguKfguIHguLHguJogVW5pY29kZSBDb25zb3J0aXVtCitVbmljb2RlIENvbnNvcnRpdW0g4LmA4Lib4LmH4LiZ4Lit4LiH4LiE4LmM4LiB4Lij4LmE4Lih4LmI4LmB4Liq4Lin4LiH4Lir4Liy4LiB4Liz4LmE4Lij4LiX4Li14LmI4LiB4LmI4Lit4LiV4Lix4LmJ4LiH4LiC4Li24LmJ4LiZ4LmA4Lie4Li34LmI4Lit4Lie4Lix4LiS4LiZ4LiyLCDguILguKLguLLguKLguYHguKXguLDguKrguYjguIfguYDguKrguKPguLTguKHguIHguLLguKPguYPguIrguYkgVW5pY29kZSBTdGFuZGFyZCwg4LiL4Li24LmI4LiH4LiB4Liz4Lir4LiZ4LiU4Lij4Li54Lib4LmB4Lia4Lia4LiB4Liy4Lij4LmB4LiX4LiZ4LiE4LmI4Liy4LiC4Lit4LiH4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LmD4LiZ4Lic4Lil4Li04LiV4Lig4Lix4LiT4LiR4LmM4LiL4Lit4Lif4LiV4LmM4LmB4Lin4Lij4LmM4LmB4Lil4Liw4Lih4Liy4LiV4Lij4LiQ4Liy4LiZ4LmD4Lir4Lih4LmI4LmGLiDguKrguKHguLLguIrguLTguIHguILguK3guIfguKrguKHguLLguITguKHguYDguJvguYfguJnguJXguLHguKfguYHguJfguJnguIjguLLguIHguJrguKPguLTguKnguLHguJfguYHguKXguLDguK3guIfguITguYzguIHguKPguYPguJnguK3guLjguJXguKrguLLguKvguIHguKPguKPguKHguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYzguYHguKXguLDguIHguLLguKPguJvguKPguLDguKHguKfguKXguJzguKXguKrguLLguKPguKrguJnguYDguJfguKguIOC4quC4oeC4suC4hOC4oeC5hOC4lOC5ieC4o+C4seC4muC4geC4suC4o+C4quC4meC4seC4muC4quC4meC4uOC4meC4l+C4suC4h+C4geC4suC4o+C5gOC4h+C4tOC4meC4nOC5iOC4suC4meC4l+C4suC4h+C4hOC5iOC4suC4mOC4o+C4o+C4oeC5gOC4meC4teC4ouC4oeC4guC4reC4h+C4geC4suC4o+C5gOC4m+C5h+C4meC4quC4oeC4suC4iuC4tOC4geC5gOC4l+C5iOC4suC4meC4seC5ieC4mS4g4Liq4Lih4Liy4LiK4Li04LiB4Lig4Liy4Lie4LiC4Lit4LiHIFVuaWNvZGUgQ29uc29ydGl1bSDguYDguJvguLTguJTguIHguKfguYnguLLguIfguKrguLPguKvguKPguLHguJrguK3guIfguITguYzguIHguKPguKvguKPguLfguK3guJrguLjguITguITguKXguYPguJTguYYg4LmD4LiZ4LmC4Lil4LiB4LiX4Li14LmI4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4Liq4LiZ4Lix4Lia4Liq4LiZ4Li44LiZIFVuaWNvZGUgU3RhbmRhcmQg4LmB4Lil4Liw4LiK4LmI4Lin4Lii4LmA4Lir4Lil4Li34Lit4LiB4Liy4Lij4LiC4Lii4Liy4Lii4LiV4Lix4Lin4LmB4Lil4Liw4LiB4Liy4Lij4LiZ4LizIFVuaWNvZGUg4LmE4Lib4LmD4LiK4LmJ4LiH4Liy4LiZLiAKKwor4Liq4Liz4Lir4Lij4Lix4Lia4LiC4LmJ4Lit4Lih4Li54Lil4LmA4Lie4Li04LmI4Lih4LmA4LiV4Li04LihLCDguYPguKvguYnguJTguLnguJfguLXguYggR2xvc3NhcnksIFNhbXBsZSBVbmljb2RlLUVuYWJsZWQgUHJvZHVjdHMsIFRlY2huaWNhbCBJbnRyb2R1Y3Rpb24g4LmB4Lil4LiwIFVzZWZ1bCBSZXNvdXJjZXMuCisKK+C5gOC4m+C5h+C4meC4oeC4meC4uOC4qeC4ouC5jOC4quC4uOC4lOC4m+C4o+C4sOC5gOC4quC4o+C4tOC4kOC5gOC4peC4tOC4qOC4hOC4uOC4k+C4hOC5iOC4sgor4LiB4Lin4LmI4Liy4Lia4Lij4Lij4LiU4Liy4Lid4Li54LiH4Liq4Lix4LiV4Lin4LmM4LmA4LiU4Lij4Lix4LiI4LiJ4Liy4LiZCivguIjguIfguJ3guYjguLLguJ/guLHguJnguJ7guLHguJLguJnguLLguKfguLTguIrguLLguIHguLLguKMKK+C4reC4ouC5iOC4suC4peC5ieC4suC4h+C4nOC4peC4suC4jeC4pOC5heC5gOC4guC5iOC4meC4huC5iOC4suC4muC4teC4keC4suC5g+C4hOC4owor4LmE4Lih4LmI4LiW4Li34Lit4LmC4LiX4Lip4LmC4LiB4Lij4LiY4LmB4LiK4LmI4LiH4LiL4Lix4LiU4Liu4Li24LiU4Liu4Lix4LiU4LiU4LmI4LiyCivguKvguLHguJTguK3guKDguLHguKLguYDguKvguKHguLfguK3guJnguIHguLXguKzguLLguK3guLHguIrguIzguLLguKrguLHguKIKK+C4m+C4j+C4tOC4muC4seC4leC4tOC4m+C4o+C4sOC4nuC4pOC4leC4tOC4geC4juC4geC4s+C4q+C4meC4lOC5g+C4iAor4Lie4Li54LiU4LiI4Liy4LmD4Lir4LmJ4LiI4LmK4LiwIOC5hiDguIjguYvguLIg4LmGIOC4meC5iOC4suC4n+C4seC4h+C5gOC4reC4ouC4rworCivguYHguKvguKXguYjguIfguJfguLXguYjguKHguLIgOiDguKrguKHguLLguITguKHguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYzguYHguKvguYjguIfguJvguKPguLDguYDguJfguKjguYTguJfguKIKKwor4LiF4LiZ4LiD4Lin4LiUIGtobyBraHVhdCBhbmQga2hvIGtob24KK0BUSVRMRUNBU0VACivguIHguYrguIHguYDguK7guIcg4LmB4LiL4LmI4LmB4LiV4LmJCivguIHguIrguIHguKMg4Lio4Lij4Liy4LiX4LiY4LiX4Lix4LiVCivguIHguJXguLTguIHguLIg4Lit4Lix4LiH4LiE4Liq4Li44Lig4LiTCivguIHguJnguIEg4LiY4Lij4Lij4Lih4Lib4Lij4Liw4LiX4Li14LibCivguIHguJnguIEg4Lin4LiH4Lio4LmM4LiX4Lit4LiH4Lio4Lij4Li1CivguIHguJnguIHguIHguKMg4LiK4LmJ4Liy4LiH4LmA4Lii4LmH4LiZ4LiJ4LmI4LizCivguIHguJnguIHguInguLHguJXguKPguYwg4LiW4Liy4Lin4Lij4LiZ4Lix4LiZ4LiX4LmMCivguIHguJnguIHguJnguKfguKUg4LmC4Lib4Lip4Lii4Liw4LiZ4Lix4LiZ4LiX4LiZ4LmMCivguIHguJnguIHguJ7guKMg4LiE4Lih4LiE4Liy4LiiCivguIHguJnguIHguJ7guKMg4LiV4Li14Lij4LmA4Lil4Li04Lio4Lie4Liy4LiZ4Li04LiKCivguIHguJnguIHguJ7guKMg4Lie4Lix4LiZ4LiX4LijCivguIHguJnguIHguJ7guKMg4Lio4Lij4Li14Lia4Lix4LiT4LiR4Li04LiVCivguIHguJnguIHguJ7guKMg4Lit4LiV4Li04Lin4Lij4Lij4LiT4Liy4Lie4Lix4LiS4LiZ4LmMCivguIHguJnguIHguJ7guKPguKPguJMg4Lio4Lij4Li14Lin4LiZ4Liy4Lig4Li04Lij4Lih4Lii4LmMCivguIHguJnguIHguKPguLHguJXguJnguYwg4LmA4LiB4Li14Lii4Lij4LiV4Li04Lii4Li04LmI4LiH4Lit4Lix4LiH4Lio4Li44Lil4Li1CivguIHguJnguIHguKPguLHguJXguJnguYwg4Liq4Li44LiY4Lij4Lij4Lih4Lie4Li04LiX4Lix4LiB4Lip4LmMCivguIHguJnguIHguKfguKPguKPguJMg4LiE4LiH4LiE4Liy4Lib4Lij4Liw4LmA4Liq4Lij4Li04LiQCivguIHguJnguIHguKfguKPguKPguJMg4LmB4LiL4LmI4LmA4LiV4Li14Lii4LinCivguIHguJnguIHguKfguKPguKPguJMg4Lia4Li44LiN4Lib4Lij4Liw4LmA4Liq4Lij4Li04LiQCivguIHguJnguIHguKfguKPguKPguJMg4Lij4Lix4LiB4LiX4Lij4Lix4Lie4Lii4LmMCivguIHguJnguIHguKfguKPguKPguJMg4Liq4Lix4LiI4LiI4Lie4LiH4Lip4LmMCivguIHguJnguIHguKfguKPguKPguJMg4Lit4Li44LmJ4Lii4Lin4LiH4Lio4LmM4LmE4Lie4Lio4Liy4LilCivguIHguJnguIHguKjguLHguIHguJTguLTguYwg4Lii4Li04LmI4LiH4Lii4LiHCivguIHguJnguIHguYHguIHguYnguKcg4LiB4Lij4Liq4Lih4Li04LiVCivguIHguJnguLTguKnguJDguLIg4LiX4LiZ4Li44LiW4LiZ4Lit4Lih4Lij4Liy4Lip4LiO4Lij4LmMCivguIHguJnguLTguKnguJDguLIg4Lir4Lin4Lix4LiH4Lin4Li04Lia4Li54Lil4Lii4LmM4LiB4Li04LiICivguIHguKHguKUg4LiB4Liy4LiN4LiI4LiZ4LmC4Lij4LiI4LiZ4LmMCivguIHguKHguKUg4LiE4Lix4Lih4Lig4Li14Lij4LmMCivguIHguKHguKUg4LmA4LiI4LiV4LiZ4LmM4Lih4LiH4LiE4Lil4Lij4Lix4LiV4LiZ4LmMCivguIHguKHguKUg4LiK4Li54LiV4Lij4Liw4LiB4Li54Lil4LiY4Lij4Lij4LihCitAU0VUIFtbOnRoYWk6XSBcdTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU1Ql0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvVHJhbnNsaXRlcmF0aW5nVGV4dENvbXBvbmVudC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1RyYW5zbGl0ZXJhdGluZ1RleHRDb21wb25lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZDY2OTcyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1RyYW5zbGl0ZXJhdGluZ1RleHRDb21wb25lbnQuamF2YQpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L1RyYW5zbGl0ZXJhdGluZ1RleHRDb21wb25lbnQuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMy8xOSAwMDoxNzoyNyAkIAorICogJFJldmlzaW9uOiAxLjUgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5kZW1vLnRyYW5zbGl0OworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmEudGV4dC4qOworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LmRlbW8uaW1wbC4qOworCisvKioKKyAqIEEgc3ViY2xhc3Mgb2Yge0BsaW5rIER1bWJUZXh0Q29tcG9uZW50fSB0aGF0IHBhc3NlcyBrZXkgZXZlbnRzIHRocm91Z2gKKyAqIGEge0BsaW5rIGNvbS5pYm0uaWN1LnRleHQuVHJhbnNsaXRlcmF0b3J9LgorICoKKyAqIDxwPkNvcHlyaWdodCAmY29weTsgSUJNIENvcnBvcmF0aW9uIDE5OTkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEB2ZXJzaW9uICRSQ1NmaWxlOiBUcmFuc2xpdGVyYXRpbmdUZXh0Q29tcG9uZW50LmphdmEsdiAkICRSZXZpc2lvbjogMS41ICQgJERhdGU6IDIwMDIvMDMvMTkgMDA6MTc6MjcgJAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNsaXRlcmF0aW5nVGV4dENvbXBvbmVudCBleHRlbmRzIER1bWJUZXh0Q29tcG9uZW50IHsKKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKworICAgIHByaXZhdGUgVHJhbnNsaXRlcmF0b3IgdHJhbnNsaXQgPSBudWxsOworICAgIAorICAgIC8vIE5PVEU6IERJU0FCTEUgVEhFIFNUQVJUIEFORCBDVVJTT1IgVU5USUwgV0UgQ0FOIEdFVCBJVCBUTyBXT1JLIEFUIEFMTAorCisgICAgLy8gSW5kZXggaW50byBnZXRUZXh0KCkgd2hlcmUgdGhlIHN0YXJ0IG9mIHRyYW5zbGl0ZXJhdGlvbiBpcy4KKyAgICAvLyBBcyB3ZSBjb21taXQgdGV4dCBkdXJpbmcgdHJhbnNsaXRlcmF0aW9uLCB3ZSBhZHZhbmNlCisgICAgLy8gdGhpcy4KKyAgICAvL3ByaXZhdGUgaW50IHN0YXJ0ID0gMDsKKworICAgIC8vIEluZGV4IGludG8gZ2V0VGV4dCgpIHdoZXJlIHRoZSBjdXJzb3IgaXM7IGN1cnNvciA+PSBzdGFydAorICAgIC8vcHJpdmF0ZSBpbnQgY3Vyc29yID0gMDsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAiXHUwMEE5IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgVHJhbnNsaXRlcmF0aW5nVGV4dENvbXBvbmVudCgpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgLyoKKyAgICAgICAgYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBnZXQgYW4gQWN0aW9uRXZlbnQgb25seSB3aGVuIHRoZSBzZWxlY3Rpb24gY2hhbmdlcworICAgICAgICAgICAgICAgIHJlc2V0VHJhbnNsaXRlcmF0aW9uU3RhcnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgICovCisgICAgfQorCisgICAgLyoqCisgICAgICoge0BsaW5rIER1bWJUZXh0Q29tcG9uZW50fSBBUEkuICBGcmFtZXdvcmsgbWV0aG9kIHRoYXQgaXMgY2FsbGVkCisgICAgICogd2hlbiBhIDxjb2RlPktleUV2ZW50PC9jb2RlPiBpcyByZWNlaXZlZC4gIFRoaXMgaW1wbGVtZW50YXRpb24KKyAgICAgKiBydW5zIHRoZSBuZXcgY2hhcmFjdGVyIHRocm91Z2ggdGhlIGN1cnJlbnQKKyAgICAgKiA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4sIGlmIG9uZSBpcyBzZXQsIGFuZCBpbnNlcnRzIHRoZQorICAgICAqIHRyYW5zbGl0ZXJhdGVkIHRleHQgaW50byB0aGUgYnVmZmVyLgorICAgICAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUtleVR5cGVkKEtleUV2ZW50IGUpIHsKKyAgICAgICAgY2hhciBjaCA9IGUuZ2V0S2V5Q2hhcigpOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYW5zbGl0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHNldEtleVN0YXJ0KC0xKTsKKyAgICAgICAgICAgIHN1cGVyLmhhbmRsZUtleVR5cGVkKGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdHJhbnNsaXRlcmF0ZShjaCwgZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBmbHVzaCgpIHsKKyAgICAgICAgaWYgKHRyYW5zbGl0ICE9IG51bGwpIHRyYW5zbGl0ZXJhdGUoJ1x1RkZGRicsIHRydWUpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCB0cmFuc2xpdGVyYXRlKGNoYXIgY2gsIGJvb2xlYW4gZmx1c2gpIHsKKworICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjYXNlIG1vdGl2YXRlcyB0aGUgdHdvIGxpbmVzIHRoYXQgcmVjb21wdXRlCisgICAgICAgIC8vIHN0YXJ0IGFuZCBjdXJzb3IgYmVsb3cuCisKKyAgICAgICAgLy8gICAgICAiICAgICAiICAgCisgICAgICAgIC8vIGEgYiBjIHEgcnxzIHQgdSBtIG0KKyAgICAgICAgLy8gMCAxIDIgMyA0IDUgNiA3IDggOQorICAgICAgICAvLyAgICAgICAwIDEgMgorCisgICAgICAgIC8vIHN0YXJ0IDMsIGN1cnNvciA1LCBzZWwgNiAtPiB7IDAsIDMsIDIgfQorICAgICAgICAvLyA6IG5ldyBpbnRbXSB7IDAsIHNlbCAtIHN0YXJ0LCBjdXJzb3IgLSBzdGFydCB9OworICAgICAgICAKKyAgICAgICAgLy8gc3o+OTl8OQorCisgICAgICAgIC8vICAgICAgIiAgICAgeyAgICIKKyAgICAgICAgLy8gYSBiIGMgcSByIDkgOXw5IHQgdSBtIG0KKyAgICAgICAgLy8gMCAxIDIgMyA0IDUgNiA3IDggOSBhIGIKKyAgICAgICAgLy8gICAgICAgMCAxIDIgMyA0CisKKyAgICAgICAgLy8geyAzLCA1LCA0IH0gLT4gc3RhcnQgNiwgY3Vyc29yIDcsIHNlbCA4CisgICAgICAgIC8vIDogc3RhcnQgKz0gaW5kZXhbMF07CisgICAgICAgIC8vIDogY3Vyc29yID0gc3RhcnQgKyBpbmRleFsyXSAtIGluZGV4WzBdOworICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAvLyBOZWVkIHRvIHNhdmUgc3RhcnQgYmVjYXVzZSBjYWxscyB0byByZXBsYWNlUmFuZ2Ugd2lsbCB1cGRhdGUKKyAgICAgICAgLy8gc3RhcnQgYW5kIGN1cnNvci4KKyAgICAgICAgLy9pbnQgc2F2ZVN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgaW50IGVuZCA9IGZsdXNoID8gZ2V0U2VsZWN0aW9uRW5kKCkgOiBnZXRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICBTdHJpbmcgc291cmNlVGV4dCA9IGdldFRleHQoKS5zdWJzdHJpbmcoMCxlbmQpOworICAgICAgICBSZXBsYWNlYWJsZVN0cmluZyBidWYgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoc291cmNlVGV4dCk7CisgICAgICAgIC8qYnVmLnJlcGxhY2UoMCwgMSwgZ2V0VGV4dCgpLnN1YnN0cmluZyhzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTZWxlY3Rpb25TdGFydCgpKSk7Ki8KKworICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBpbmRleCA9IG5ldyBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbigpOworICAgICAgICBpbmRleC5jb250ZXh0TGltaXQgPSBidWYubGVuZ3RoKCk7CisgICAgICAgIGluZGV4LmNvbnRleHRTdGFydCA9IDA7CisgICAgICAgIGluZGV4LnN0YXJ0ID0gZ2V0S2V5U3RhcnQoKTsKKyAgICAgICAgaWYgKGluZGV4LnN0YXJ0ID09IC0xKSBpbmRleC5zdGFydCA9IGdldFNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAgIGluZGV4LmxpbWl0ID0gYnVmLmxlbmd0aCgpOworCisgICAgICAgIFN0cmluZ0J1ZmZlciBsb2cgPSBudWxsOworICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNsaXRlcmF0b3I6ICIgKyB0cmFuc2xpdC5nZXRJRCgpKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRnJvbTpcdCIgKyAnIicgKyBidWYudG9TdHJpbmcoKSArICciJworICAgICAgICAgICAgICAgICsgIjsge2NzOiAiICsgaW5kZXguY29udGV4dFN0YXJ0CisgICAgICAgICAgICAgICAgKyAiLCBzOiAiICsgaW5kZXguc3RhcnQKKyAgICAgICAgICAgICAgICArICIsIGw6ICIgKyBpbmRleC5saW1pdAorICAgICAgICAgICAgICAgICsgIiwgY2w6ICIgKyBpbmRleC5jb250ZXh0TGltaXQgCisgICAgICAgICAgICAgICAgKyAifSIgKyAiOyAnIiArIGNoICsgIiciCisgICAgICAgICAgICAgICAgKyAiICIgKyBnZXRLZXlTdGFydCgpCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZsdXNoKSB7CisgICAgICAgICAgICB0cmFuc2xpdC5maW5pc2hUcmFuc2xpdGVyYXRpb24oYnVmLCBpbmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0cmFuc2xpdC50cmFuc2xpdGVyYXRlKGJ1ZiwgaW5kZXgsIGNoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvOlx0IiArICciJyArIGJ1Zi50b1N0cmluZygpICsgJyInCisgICAgICAgICAgICAgICAgKyAiOyB7Y3M6ICIgKyBpbmRleC5jb250ZXh0U3RhcnQKKyAgICAgICAgICAgICAgICArICIsIHM6ICIgKyBpbmRleC5zdGFydAorICAgICAgICAgICAgICAgICsgIiwgbDogIiArIGluZGV4LmxpbWl0CisgICAgICAgICAgICAgICAgKyAiLCBjbDogIiArIGluZGV4LmNvbnRleHRMaW1pdCAKKyAgICAgICAgICAgICAgICArICJ9IgorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICBidWYucmVwbGFjZShidWYubGVuZ3RoKCksIGJ1Zi5sZW5ndGgoKSwgU3RyaW5nLnZhbHVlT2YoY2gpKTsKKyAgICAgICAgdHJhbnNsaXQudHJhbnNsaXRlcmF0ZShidWYpOworICAgICAgICAqLworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOworICAgICAgICAvL2lmIChyZXN1bHQuZXF1YWxzKHNvdXJjZVRleHQgKyBjaCkpIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHJlcGxhY2VSYW5nZShyZXN1bHQsIDAsIGdldFNlbGVjdGlvbkVuZCgpKTsKKyAgICAgICAgc2V0S2V5U3RhcnQoaW5kZXguc3RhcnQpOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBzdGFydCBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSBjYWxsYmFjayB0bworICAgICAgICAvLyByZXNldFRyYW5zbGl0ZXJhdG9yU3RhcnQoKSB2aWEgcmVwbGFjZVJhbmdlKCkgLS0gc28gdXNlIG91cgorICAgICAgICAvLyBsb2NhbCBjb3B5LCBzYXZlU3RhcnQuCisKKyAgICAgICAgLy8gVGhlIFNUQVJUIGluZGV4IGlzIHplcm8tYmFzZWQuICBPbiBlbnRyeSB0byB0cmFuc2xpdGVyYXRlKCksCisgICAgICAgIC8vIGl0IHdhcyB6ZXJvLiAgV2UgY2FuIHRoZXJlZm9yZSBqdXN0IGFkZCBpdCB0byBvdXIgb3JpZ2luYWwKKyAgICAgICAgLy8gZ2V0VGV4dCgpLWJhc2VkIGluZGV4IHZhbHVlIG9mIHN0YXJ0IChpbiBzYXZlU3RhcnQpIHRvIGdldAorICAgICAgICAvLyB0aGUgbmV3IGdldFRleHQoKS1iYXNlZCBzdGFydC4KKy8vICAgICAgICBzdGFydCA9IHNhdmVTdGFydCArIGluZGV4LmNvbnRleHRTdGFydDsKKworICAgICAgICAvLyBNYWtlIHRoZSBjdXJzb3IgZ2V0VGV4dCgpLWJhc2VkLiAgVGhlIENVUlNPUiBpbmRleCBpcyB6ZXJvLWJhc2VkLgorLy8gICAgICAgIGN1cnNvciA9IHN0YXJ0ICsgaW5kZXguc3RhcnQgLSBpbmRleC5jb250ZXh0U3RhcnQ7CisKKy8qCisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgU3RyaW5nIG91dCA9IGJ1Zi50b1N0cmluZygpOworICAgICAgICAgICAgbG9nLmFwcGVuZChvdXQuc3Vic3RyaW5nKDAsIGluZGV4LmNvbnRleHRTdGFydCkpLgorICAgICAgICAgICAgICAgIGFwcGVuZCgneycpLgorICAgICAgICAgICAgICAgIGFwcGVuZChvdXQuc3Vic3RyaW5nKGluZGV4LmNvbnRleHRTdGFydCwgaW5kZXguc3RhcnQpKS4KKyAgICAgICAgICAgICAgICBhcHBlbmQoJ3wnKS4KKyAgICAgICAgICAgICAgICBhcHBlbmQob3V0LnN1YnN0cmluZyhpbmRleC5zdGFydCkpLgorICAgICAgICAgICAgICAgIGFwcGVuZCgnIicpOworICAgICAgICAgICAgbG9nLmFwcGVuZCgiLCB7IiArIGluZGV4LmNvbnRleHRTdGFydCArICIsICIgKyBpbmRleC5jb250ZXh0TGltaXQgKyAiLCAiICsgaW5kZXguc3RhcnQgKyAifSwgIik7CisvLyAgICAgICAgICAgIGxvZy5hcHBlbmQoInN0YXJ0ICIgKyBzdGFydCArICIsIGN1cnNvciAiICsgY3Vyc29yKTsKKyAgICAgICAgICAgIGxvZy5hcHBlbmQoIiwgc2VsICIgKyBnZXRTZWxlY3Rpb25TdGFydCgpKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlc2NhcGUobG9nLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgfQorICAgICAgICAqLworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHtAbGluayBjb20uaWJtLmljdS50ZXh0LlRyYW5zbGl0ZXJhdG9yfSBhbmQgZGlyZWN0aW9uIHRvCisgICAgICogdXNlIHRvIHByb2Nlc3MgaW5jb21pbmcgPGNvZGU+S2V5RXZlbnQ8L2NvZGU+cy4KKyAgICAgKiBAcGFyYW0gdCB0aGUge0BsaW5rIGNvbS5pYm0uaWN1LnRleHQuVHJhbnNsaXRlcmF0b3J9IHRvIHVzZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGl0ZXJhdG9yKFRyYW5zbGl0ZXJhdG9yIHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgaWYgKHRyYW5zbGl0ICE9IHQpIHsgLy8gW3NpY10gcG9pbnRlciBjb21wYXJlIG9rOyBzaW5nbGV0b25zCisgICAgICAgICAgICByZXNldFRyYW5zbGl0ZXJhdGlvblN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICAgICAgdHJhbnNsaXQgPSB0OworICAgIH0KKworICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRUcmFuc2xpdGVyYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIHRyYW5zbGl0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc2V0IHRoZSBzdGFydCBwb2ludCBhdCB3aGljaCB0cmFuc2xpdGVyYXRpb24gYmVnaW5zLiAgVGhpcworICAgICAqIG5lZWRzIHRvIGJlIGRvbmUgd2hlbiB0aGUgdXNlciBtb3ZlcyB0aGUgY3Vyc29yIG9yIHdoZW4gdGhlCisgICAgICogY3VycmVudCB7QGxpbmsgY29tLmlibS5pY3UudGV4dC5UcmFuc2xpdGVyYXRvcn0gaXMgY2hhbmdlZC4gCisgICAgICovCisgICAgIC8qCisgICAgcHJpdmF0ZSB2b2lkIHJlc2V0VHJhbnNsaXRlcmF0aW9uU3RhcnQoKSB7CisgICAgICAgIHN0YXJ0ID0gZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgY3Vyc29yID0gc3RhcnQ7CisgICAgfQorICAgICovCisKKyAgICAvKioKKyAgICAgKiBFc2NhcGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYXMgVW5pY29kZS4KKyAgICAgKiBKVVNUIEZPUiBERUJVR0dJTkcgT1VUUFVULgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGVzY2FwZShTdHJpbmcgcykgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8cy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBzLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChjID49ICcgJyAmJiBjIDw9IDB4MDA3RikgeworICAgICAgICAgICAgICAgIGlmIChjID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiXFxcXCIpOyAvLyBUaGF0IGlzLCAiXFwiCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIlxcdSIpOworICAgICAgICAgICAgICAgIGlmIChjIDwgMHgxMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJzAnKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPCAweDEwMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgnMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPCAweDEwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgnMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoSW50ZWdlci50b0hleFN0cmluZyhjKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9kZW1vLmJhdCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9kZW1vLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MDc1OWJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L2RlbW8uYmF0CkBAIC0wLDAgKzEsMTkgQEAKK1JFTSAvKgorUkVNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1JFTSAgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorUkVNICAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitSRU0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1JFTSAgKgorUkVNICAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9kZW1vLmJhdCx2ICQgCitSRU0gICogJERhdGU6IDIwMDAvMDMvMTAgMDM6NDc6NDQgJCAKK1JFTSAgKiAkUmV2aXNpb246IDEuMiAkCitSRU0gICoKK1JFTSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1JFTSAgKi8KK1JFTSBGb3IgYmVzdCByZXN1bHRzLCBydW4gdGhlIGRlbW8gYXMgYW4gYXBwbGV0IGluc2lkZSBvZiBOZXRzY2FwZQorUkVNIHdpdGggQml0c3RyZWFtIEN5YmVyYml0IGluc3RhbGxlZC4KKworUkVNIHNldHVwIHlvdXIgSkRLIDEuMS54IHBhdGggYW5kIGNsYXNzcGF0aCBoZXJlOgorY2FsbCBKREsxMQorc2V0IENMQVNTUEFUSD0uLi90cmFuc2xpdC5qYXI7JUNMQVNTUEFUSCUKK2phdmF3IERlbW8KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9kZW1vLmh0bWwgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvZGVtby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2NTVkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvZGVtby5odG1sCkBAIC0wLDAgKzEsMjcgQEAKKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+VHJhbnNsaXRlcmF0aW9uIERlbW88L1RJVExFPgorPC9IRUFEPgorPEJPRFk+CisKKzxBUFBMRVQgQ09ERT0iY29tLmlibS5kZW1vLnRyYW5zbGl0LkRlbW9BcHBsZXQuY2xhc3MiIFdJRFRIPTE0MCBIRUlHSFQ9MzM+PC9BUFBMRVQ+CisKKzxIUj4KKworSWYgeW91IGRvbid0IHNlZSBhIGJ1dHRvbiBhYm92ZSwgdGhlbiB5b3VyIGJyb3dzZXIgaXMgZmFpbGluZyB0bworbG9jYXRlIHRoZSBuZWNlc3NhcnkgSmF2YSBjbGFzcyBmaWxlcy4KKworPFA+CisKK09uZSB3YXkgdG8gbWFrZSB0aGlzIHdvcmsgaXMgdG8gY29weSB0aGlzIEhUTUwgZmlsZSB0bworPGNvZGU+aWN1NGovc3JjPC9jb2RlPiwgYW5kIG1ha2Ugc3VyZSB0aGUgSmF2YSBmaWxlcyBpbiB0aGUgZGlyZWN0b3JpZXMKK3VuZGVyIDxjb2RlPmljdTRqL3NyYy9jb208L2NvZGU+IGFyZSBidWlsdC4gIFRoZW4gb3BlbiB0aGlzIEhUTUwgZmlsZQordXNpbmcgYSBicm93c2VyIG9yIGFwcGxldHZpZXdlci4KKworPFA+CisKK0ZvciBiZXN0IHJlc3VsdHMsIHJ1biB0aGlzIGRlbW8gYXMgYW4gYXBwbGV0IHdpdGhpbiBOZXRzY2FwZSB3aXRoCitCaXRzdHJlYW0gQ3liZXJiaXQgaW5zdGFsbGVkLgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvcGFja2FnZS5odG1sIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDE0NjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L3BhY2thZ2UuaHRtbCx2ICQKKyAgJFJldmlzaW9uOiAxLjEgJAorICAkRGF0ZTogMjAwMC8wMy8xNSAxNzo0NDoxMiAkCistLT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIj4KK1RyYW5zbGl0ZXJhdG9yIGRlbW8gYXBwbGlhdGlvbi4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvcmVzb3VyY2VzL1RyYW5zbGl0ZXJhdG9yX0hhbl9QaW55aW4udHh0IGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L3Jlc291cmNlcy9UcmFuc2xpdGVyYXRvcl9IYW5fUGlueWluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjdjMjFkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L3Jlc291cmNlcy9UcmFuc2xpdGVyYXRvcl9IYW5fUGlueWluLnR4dApAQCAtMCwwICsxLDIwMzY1IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2VuZXJhdGVkOiBGcmkgSmFuIDI2IDE1OjE0OjQ4IDIwMDEKKyMgVG9vbDogLi5cLi5cdG9vbHNcdHJhbnNsaXRcaGFucGlueWluLnBsCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBIYW4tUGlueWluCisKKyMgTWVjaGFuaWNhbGx5IGRlcml2ZWQgZnJvbSBcZGVza1xVbmloYW4udHh0IChmdHAudW5pY29kZS5vcmcpLCB2ZXJzaW9uOgorIworIwlOYW1lOiAgICAgICAgICAgICBVbmloYW4gZGF0YWJhc2UKKyMJVW5pY29kZSB2ZXJzaW9uOiAgMy4wYjEKKyMJVGFibGUgdmVyc2lvbjogICAgMS4xCisjCURhdGU6ICAgICAgICAgICAgIDIgSnVseSAxOTk5CisjCisjCUNvcHlyaWdodCAoYykgMTk5Ni0xOTk5IFVuaWNvZGUsIEluYy4gIEFsbCBSaWdodHMgcmVzZXJ2ZWQuCisKK+S4gSA+IGTEq25nOyAjNEUwMQor5LiCID4ga8SDbzsgIzRFMDIKK+S4gyA+IHHEqzsgIzRFMDMKK+S4hCA+IHNow6BuZzsgIzRFMDQKK+S4hSA+IHhpw6A7ICM0RTA1CivkuIcgPiBtw7I7ICM0RTA3CivkuIggPiB6aMOgbmc7ICM0RTA4CivkuIkgPiBzxIFuOyAjNEUwOQor5LiKID4gc2jDoG5nOyAjNEUwQQor5LiLID4geGnDoDsgIzRFMEIKK+S4jCA+IGrEqzsgIzRFMEMKK+S4jSA+IGLDuTsgIzRFMEQKK+S4jiA+IHnFrTsgIzRFMEUKK+S4jyA+IG1pxINuOyAjNEUwRgor5LiQID4gZ8OgaTsgIzRFMTAKK+S4kSA+IGNoxY91OyAjNEUxMQor5LiSID4gY2jFj3U7ICM0RTEyCivkuJMgPiB6aHXEgW47ICM0RTEzCivkuJQgPiBxacSVOyAjNEUxNAor5LiVID4gcMSrOyAjNEUxNQor5LiWID4gc2jDrDsgIzRFMTYKK+S4lyA+IHNow6w7ICM0RTE3CivkuJggPiBxxKt1OyAjNEUxOAor5LiZID4gYsStbmc7ICM0RTE5CivkuJogPiB5w6g7ICM0RTFBCivkuJsgPiBjw7NuZzsgIzRFMUIKK+S4nCA+IGTFjW5nOyAjNEUxQwor5LidID4gc8SrOyAjNEUxRAor5LieID4gY2jDqW5nOyAjNEUxRQor5LifID4gZMSrdTsgIzRFMUYKK+S4oCA+IHHEq3U7ICM0RTIwCivkuKEgPiBsacSDbmc7ICM0RTIxCivkuKIgPiBkxKt1OyAjNEUyMgor5LijID4gecWPdTsgIzRFMjMKK+S4pCA+IGxpxINuZzsgIzRFMjQKK+S4pSA+IHnDoW47ICM0RTI1CivkuKYgPiBiw6xuZzsgIzRFMjYKK+S4pyA+IHPEgW5nOyAjNEUyNwor5LioID4gZ8WtbjsgIzRFMjgKK+S4qSA+IGrEq3U7ICM0RTI5CivkuKogPiBnw6g7ICM0RTJBCivkuKsgPiB5xIE7ICM0RTJCCivkuKwgPiBxacOhbmc7ICM0RTJDCivkuK0gPiB6aMWNbmc7ICM0RTJECivkuK4gPiBqxK07ICM0RTJFCivkuK8gPiBqacOoOyAjNEUyRgor5LiwID4gZsSTbmc7ICM0RTMwCivkuLEgPiBndcOgbjsgIzRFMzEKK+S4siA+IGNodcOgbjsgIzRFMzIKK+S4syA+IGNoxINuOyAjNEUzMwor5Li0ID4gbMOtbjsgIzRFMzQKK+S4tSA+IHpoxa1vOyAjNEUzNQor5Li2ID4gemjFrTsgIzRFMzYKK+S4uCA+IHfDoW47ICM0RTM4CivkuLkgPiBkxIFuOyAjNEUzOQor5Li6ID4gd8OoaTsgIzRFM0EKK+S4uyA+IHpoxa07ICM0RTNCCivkuLwgPiBqxK1uZzsgIzRFM0MKK+S4vSA+IGzDrDsgIzRFM0QKK+S4viA+IGrFrTsgIzRFM0UKK+S4vyA+IHBpxJU7ICM0RTNGCivkuYAgPiBmw7o7ICM0RTQwCivkuYEgPiB5w607ICM0RTQxCivkuYIgPiB5w6w7ICM0RTQyCivkuYMgPiBuxINpOyAjNEU0Mwor5LmFID4gasStdTsgIzRFNDUKK+S5hiA+IGrErXU7ICM0RTQ2CivkuYcgPiB6aMOpOyAjNEU0Nwor5LmIID4gecSBbzsgIzRFNDgKK+S5iSA+IHnDrDsgIzRFNDkKK+S5iyA+IHpoxKs7ICM0RTRCCivkuYwgPiB3xas7ICM0RTRDCivkuY0gPiB6aMOgOyAjNEU0RAor5LmOID4gaMWrOyAjNEU0RQor5LmPID4gZsOhOyAjNEU0Rgor5LmQID4gbMOoOyAjNEU1MAor5LmRID4gemjDsm5nOyAjNEU1MQor5LmSID4gcMSrbmc7ICM0RTUyCivkuZMgPiBwYW5nOyAjNEU1Mwor5LmUID4gcWnDoW87ICM0RTU0CivkuZUgPiBoxa07ICM0RTU1CivkuZYgPiBndcSBaTsgIzRFNTYKK+S5lyA+IGNow6luZzsgIzRFNTcKK+S5mCA+IGNow6luZzsgIzRFNTgKK+S5mSA+IHnErTsgIzRFNTkKK+S5miA+IHnErW47ICM0RTVBCivkuZwgPiBtacSTOyAjNEU1Qwor5LmdID4gasStdTsgIzRFNUQKK+S5niA+IHHErTsgIzRFNUUKK+S5nyA+IHnElTsgIzRFNUYKK+S5oCA+IHjDrTsgIzRFNjAKK+S5oSA+IHhpxIFuZzsgIzRFNjEKK+S5oiA+IGfDoGk7ICM0RTYyCivkuaMgPiBkxKt1OyAjNEU2Mwor5LmmID4gc2jFqzsgIzRFNjYKK+S5qCA+IHNoxK07ICM0RTY4CivkuakgPiBqxKs7ICM0RTY5CivkuaogPiBuxIFuZzsgIzRFNkEKK+S5qyA+IGppxIE7ICM0RTZCCivkua0gPiBzaMOtOyAjNEU2RAor5LmwID4gbcSDaTsgIzRFNzAKK+S5sSA+IGx1w6BuOyAjNEU3MQor5LmzID4gcsWtOyAjNEU3Mwor5Lm0ID4geHXDqTsgIzRFNzQKK+S5tSA+IHnEg247ICM0RTc1CivkubYgPiBmxa07ICM0RTc2CivkubcgPiBzaMSBOyAjNEU3Nwor5Lm4ID4gbsSDOyAjNEU3OAor5Lm5ID4gZ8SBbjsgIzRFNzkKK+S5viA+IGfEgW47ICM0RTdFCivkub8gPiBjaMOsOyAjNEU3Rgor5LqAID4gZ8WraTsgIzRFODAKK+S6gSA+IGfEgW47ICM0RTgxCivkuoIgPiBsdcOgbjsgIzRFODIKK+S6gyA+IGzDrW47ICM0RTgzCivkuoQgPiB5w6w7ICM0RTg0CivkuoUgPiBqdcOpOyAjNEU4NQor5LqGID4gbGnEg287ICM0RTg2CivkuoggPiB5w7o7ICM0RTg4CivkuokgPiB6aMSTbmc7ICM0RTg5CivkuoogPiBzaMOsOyAjNEU4QQor5LqLID4gc2jDrDsgIzRFOEIKK+S6jCA+IMOocjsgIzRFOEMKK+S6jSA+IGNow7k7ICM0RThECivkuo4gPiB5w7o7ICM0RThFCivkuo8gPiB5w7o7ICM0RThGCivkupAgPiB5w7o7ICM0RTkwCivkupEgPiB5w7puOyAjNEU5MQor5LqSID4gaMO5OyAjNEU5Mgor5LqTID4gccOtOyAjNEU5Mwor5LqUID4gd8WtOyAjNEU5NAor5LqVID4gasStbmc7ICM0RTk1CivkupYgPiBzw6w7ICM0RTk2CivkupcgPiBzw7lpOyAjNEU5Nwor5LqYID4gZ8OobjsgIzRFOTgKK+S6mSA+IGfDqG47ICM0RTk5CivkupogPiB5w6A7ICM0RTlBCivkupsgPiB4acSTOyAjNEU5Qgor5LqcID4gecOgOyAjNEU5Qwor5LqdID4gccOtOyAjNEU5RAor5LqeID4gecOgOyAjNEU5RQor5LqfID4gasOtOyAjNEU5Rgor5LqgID4gdMOzdTsgIzRFQTAKK+S6oSA+IHfDoW5nOyAjNEVBMQor5LqiID4ga8Ogbmc7ICM0RUEyCivkuqMgPiB0w6A7ICM0RUEzCivkuqQgPiBqacSBbzsgIzRFQTQKK+S6pSA+IGjDoGk7ICM0RUE1CivkuqYgPiB5w6w7ICM0RUE2CivkuqcgPiBjaMSDbjsgIzRFQTcKK+S6qCA+IGjEk25nOyAjNEVBOAor5LqpID4gbcWtOyAjNEVBOQor5LqrID4geGnEg25nOyAjNEVBQgor5LqsID4gasSrbmc7ICM0RUFDCivkuq0gPiB0w61uZzsgIzRFQUQKK+S6riA+IGxpw6BuZzsgIzRFQUUKK+S6ryA+IHhpxINuZzsgIzRFQUYKK+S6sCA+IGrEq25nOyAjNEVCMAor5LqxID4gecOoOyAjNEVCMQor5LqyID4gccSrbjsgIzRFQjIKK+S6syA+IGLDszsgIzRFQjMKK+S6tCA+IHnDsnU7ICM0RUI0CivkurUgPiB4acOoOyAjNEVCNQor5Lq2ID4gZMSDbjsgIzRFQjYKK+S6tyA+IGxpw6FuOyAjNEVCNwor5Lq4ID4gZMWtbzsgIzRFQjgKK+S6uSA+IHfElWk7ICM0RUI5CivkurogPiByw6luOyAjNEVCQQor5Lq7ID4gcsOpbjsgIzRFQkIKK+S6vCA+IGrDrTsgIzRFQkMKK+S6viA+IHfDoW5nOyAjNEVCRQor5Lq/ID4gecOsOyAjNEVCRgor5LuAID4gc2jDrTsgIzRFQzAKK+S7gSA+IHLDqW47ICM0RUMxCivku4IgPiBsw6g7ICM0RUMyCivku4MgPiBkxKtuZzsgIzRFQzMKK+S7hCA+IHrDqDsgIzRFQzQKK+S7hSA+IGrErW47ICM0RUM1Civku4YgPiBwxas7ICM0RUM2Civku4cgPiBjaMOzdTsgIzRFQzcKK+S7iCA+IGLEgTsgIzRFQzgKK+S7iSA+IHpoxINuZzsgIzRFQzkKK+S7iiA+IGrEq247ICM0RUNBCivku4sgPiBqacOoOyAjNEVDQgor5LuMID4gYsSrbmc7ICM0RUNDCivku40gPiByw6luZzsgIzRFQ0QKK+S7jiA+IGPDs25nOyAjNEVDRQor5LuPID4gZsOzOyAjNEVDRgor5LuQID4gc8SDbjsgIzRFRDAKK+S7kSA+IGzDum47ICM0RUQxCivku5MgPiBjxIFuZzsgIzRFRDMKK+S7lCA+IHrErTsgIzRFRDQKK+S7lSA+IHNow6w7ICM0RUQ1Civku5YgPiB0xIE7ICM0RUQ2Civku5cgPiB6aMOgbmc7ICM0RUQ3Civku5ggPiBmw7k7ICM0RUQ4Civku5kgPiB4acSBbjsgIzRFRDkKK+S7miA+IHhpxIFuOyAjNEVEQQor5LubID4gdMWrbzsgIzRFREIKK+S7nCA+IGjDs25nOyAjNEVEQwor5LudID4gdMOzbmc7ICM0RURECivku54gPiByw6huOyAjNEVERQor5LufID4gcWnEgW47ICM0RURGCivku6AgPiBnw6FuOyAjNEVFMAor5LuhID4gecOsOyAjNEVFMQor5LuiID4gZMOtOyAjNEVFMgor5LujID4gZMOgaTsgIzRFRTMKK+S7pCA+IGzDrG5nOyAjNEVFNAor5LulID4gecStOyAjNEVFNQor5LumID4gY2jDoG87ICM0RUU2Civku6cgPiBjaMOhbmc7ICM0RUU3Civku6ggPiBzxIE7ICM0RUU4Civku6ogPiB5w607ICM0RUVBCivku6sgPiBtw7k7ICM0RUVCCivku6wgPiBtZW47ICM0RUVDCivku60gPiByw6huOyAjNEVFRAor5LuuID4gamnEgzsgIzRFRUUKK+S7ryA+IGNow6BvOyAjNEVFRgor5LuwID4gecSDbmc7ICM0RUYwCivku7EgPiBxacOhbjsgIzRFRjEKK+S7siA+IHpow7JuZzsgIzRFRjIKK+S7syA+IHDErTsgIzRFRjMKK+S7tCA+IHfDoG47ICM0RUY0Civku7UgPiB3xa07ICM0RUY1Civku7YgPiBqacOgbjsgIzRFRjYKK+S7tyA+IGppw6g7ICM0RUY3Civku7ggPiB5xINvOyAjNEVGOAor5Lu5ID4gZsSTbmc7ICM0RUY5Civku7ogPiBjxIFuZzsgIzRFRkEKK+S7uyA+IHLDqG47ICM0RUZCCivku7wgPiB3w6FuZzsgIzRFRkMKK+S7vSA+IGbDqG47ICM0RUZECivku74gPiBkxKs7ICM0RUZFCivku78gPiBmxINuZzsgIzRFRkYKK+S8gCA+IHpoxY1uZzsgIzRGMDAKK+S8gSA+IHHErTsgIzRGMDEKK+S8giA+IHDDqGk7ICM0RjAyCivkvIMgPiB5w7o7ICM0RjAzCivkvIQgPiBkacOgbzsgIzRGMDQKK+S8hSA+IGTDuW47ICM0RjA1CivkvIYgPiB3w6huOyAjNEYwNgor5LyHID4gecOsOyAjNEYwNwor5LyIID4geMStbjsgIzRGMDgKK+S8iSA+IGvDoG5nOyAjNEYwOQor5LyKID4gecSrOyAjNEYwQQor5LyLID4gasOtOyAjNEYwQgor5LyMID4gw6BpOyAjNEYwQwor5LyNID4gd8WtOyAjNEYwRAor5LyOID4gasOsOyAjNEYwRQor5LyPID4gZsO6OyAjNEYwRgor5LyQID4gZsOhOyAjNEYxMAor5LyRID4geMSrdTsgIzRGMTEKK+S8kiA+IGrDrG47ICM0RjEyCivkvJMgPiBixJNpOyAjNEYxMwor5LyUID4gZMSDbjsgIzRGMTQKK+S8lSA+IGbFqzsgIzRGMTUKK+S8liA+IHTEg25nOyAjNEYxNgor5LyXID4gemjDsm5nOyAjNEYxNwor5LyYID4gecWNdTsgIzRGMTgKK+S8mSA+IGjFrW87ICM0RjE5CivkvJogPiBow7lpOyAjNEYxQQor5LybID4gecWtOyAjNEYxQgor5LycID4gY8O5aTsgIzRGMUMKK+S8nSA+IGNodcOhbjsgIzRGMUQKK+S8niA+IHPEg247ICM0RjFFCivkvJ8gPiB3xJVpOyAjNEYxRgor5LygID4gY2h1w6FuOyAjNEYyMAor5LyhID4gY2jEkzsgIzRGMjEKK+S8oiA+IHnDoTsgIzRGMjIKK+S8oyA+IHhpw6BuOyAjNEYyMwor5LykID4gc2jEgW5nOyAjNEYyNAor5LylID4gY2jEgW5nOyAjNEYyNQor5LymID4gbMO6bjsgIzRGMjYKK+S8pyA+IGPEgW5nOyAjNEYyNwor5LyoID4geMO5bjsgIzRGMjgKK+S8qSA+IHjDrG47ICM0RjI5CivkvKogPiB3xJVpOyAjNEYyQQor5LyrID4gemjDuTsgIzRGMkIKK+S8rSA+IHh1w6FuOyAjNEYyRAor5LyuID4gbsO6OyAjNEYyRQor5LyvID4gYsOzOyAjNEYyRgor5LywID4gZ8WrOyAjNEYzMAor5LyxID4gbsStOyAjNEYzMQor5LyyID4gbsStOyAjNEYzMgor5LyzID4geGnDqDsgIzRGMzMKK+S8tCA+IGLDoG47ICM0RjM0CivkvLUgPiB4w7k7ICM0RjM1CivkvLYgPiBsw61uZzsgIzRGMzYKK+S8tyA+IHpow7J1OyAjNEYzNwor5Ly4ID4gc2jEk247ICM0RjM4CivkvLkgPiBxxas7ICM0RjM5CivkvLogPiBzw6w7ICM0RjNBCivkvLsgPiBixJNuZzsgIzRGM0IKK+S8vCA+IHPDrDsgIzRGM0MKK+S8vSA+IGppxIE7ICM0RjNECivkvL4gPiBwxKs7ICM0RjNFCivkvL8gPiB5w6w7ICM0RjNGCivkvYAgPiBzw6w7ICM0RjQwCivkvYEgPiDEg2k7ICM0RjQxCivkvYIgPiB6aMSTbmc7ICM0RjQyCivkvYMgPiBkacOgbjsgIzRGNDMKK+S9hCA+IGjDoW47ICM0RjQ0CivkvYUgPiBtw6BpOyAjNEY0NQor5L2GID4gZMOgbjsgIzRGNDYKK+S9hyA+IHpow7k7ICM0RjQ3CivkvYggPiBiw7k7ICM0RjQ4CivkvYkgPiBxxas7ICM0RjQ5CivkvYogPiBixK07ICM0RjRBCivkvYsgPiBzaMOgbzsgIzRGNEIKK+S9jCA+IGPErTsgIzRGNEMKK+S9jSA+IHfDqGk7ICM0RjRECivkvY4gPiBkxKs7ICM0RjRFCivkvY8gPiB6aMO5OyAjNEY0Rgor5L2QID4gesWtbzsgIzRGNTAKK+S9kSA+IHnDsnU7ICM0RjUxCivkvZIgPiB5xIFuZzsgIzRGNTIKK+S9kyA+IHTErTsgIzRGNTMKK+S9lCA+IHpow6BuOyAjNEY1NAor5L2VID4gaMOpOyAjNEY1NQor5L2WID4gYsOsOyAjNEY1Ngor5L2XID4gdMWrbzsgIzRGNTcKK+S9mCA+IHNow6k7ICM0RjU4CivkvZkgPiB5w7o7ICM0RjU5CivkvZogPiB5w6w7ICM0RjVBCivkvZsgPiBmw7M7ICM0RjVCCivkvZwgPiB6w7lvOyAjNEY1Qwor5L2dID4ga8OydTsgIzRGNUQKK+S9niA+IG7DrG5nOyAjNEY1RQor5L2fID4gdMOzbmc7ICM0RjVGCivkvaAgPiBuxK07ICM0RjYwCivkvaEgPiB4dcSBbjsgIzRGNjEKK+S9oiA+IHHDujsgIzRGNjIKK+S9oyA+IHnDsm5nOyAjNEY2Mwor5L2kID4gd8SDOyAjNEY2NAor5L2lID4gcWnEgW47ICM0RjY1CivkvacgPiBrxIM7ICM0RjY3CivkvakgPiBww6hpOyAjNEY2OQor5L2qID4gaHXDoWk7ICM0RjZBCivkvasgPiBow6g7ICM0RjZCCivkvawgPiBsxINvOyAjNEY2Qwor5L2tID4geGnDoW5nOyAjNEY2RAor5L2uID4gZ8OpOyAjNEY2RQor5L2vID4gecOhbmc7ICM0RjZGCivkvbAgPiBixINpOyAjNEY3MAor5L2xID4gZsSDOyAjNEY3MQor5L2yID4gbcOtbmc7ICM0RjcyCivkvbMgPiBqaWE7ICM0RjczCivkvbQgPiDDqHI7ICM0Rjc0CivkvbUgPiBiw6xuZzsgIzRGNzUKK+S9tiA+IGrDrTsgIzRGNzYKK+S9tyA+IGjElW47ICM0Rjc3CivkvbggPiBow7pvOyAjNEY3OAor5L25ID4gZ8WtaTsgIzRGNzkKK+S9uiA+IHF1w6FuOyAjNEY3QQor5L27ID4gdGnEgW87ICM0RjdCCivkvbwgPiBqacSDbzsgIzRGN0MKK+S9vSA+IGPDrDsgIzRGN0QKK+S9viA+IHnDrDsgIzRGN0UKK+S9vyA+IHNoxK07ICM0RjdGCivkvoAgPiB4w61uZzsgIzRGODAKK+S+gSA+IHNoxJNuOyAjNEY4MQor5L6CID4gdMWrbzsgIzRGODIKK+S+gyA+IGvEg247ICM0RjgzCivkvoQgPiB6aMOtOyAjNEY4NAor5L6FID4gZ8SBaTsgIzRGODUKK+S+hiA+IGzDoWk7ICM0Rjg2CivkvocgPiB5w607ICM0Rjg3CivkvoggPiBjaMStOyAjNEY4OAor5L6JID4ga3XEgTsgIzRGODkKK+S+iiA+IGd1xIFuZzsgIzRGOEEKK+S+iyA+IGzDrDsgIzRGOEIKK+S+jCA+IHnEq247ICM0RjhDCivkvo0gPiBzaMOsOyAjNEY4RAor5L6OID4gbcStOyAjNEY4RQor5L6PID4gemjFqzsgIzRGOEYKK+S+kCA+IHjDuTsgIzRGOTAKK+S+kSA+IHnDsnU7ICM0RjkxCivkvpIgPiDEgW47ICM0RjkyCivkvpMgPiBsw7k7ICM0RjkzCivkvpQgPiBtw7N1OyAjNEY5NAor5L6VID4gw6lyOyAjNEY5NQor5L6WID4gbMO6bjsgIzRGOTYKK+S+lyA+IHTDs25nOyAjNEY5Nwor5L6YID4gY2jDoDsgIzRGOTgKK+S+mSA+IGNow6w7ICM0Rjk5CivkvpogPiB4w7luOyAjNEY5QQor5L6bID4gZ8WNbmc7ICM0RjlCCivkvpwgPiB6aMWNdTsgIzRGOUMKK+S+nSA+IHnEqzsgIzRGOUQKK+S+niA+IHLFrTsgIzRGOUUKK+S+nyA+IGppw6BuOyAjNEY5Rgor5L6gID4geGnDoTsgIzRGQTAKK+S+oSA+IGppw6A7ICM0RkExCivkvqIgPiB6w6BpOyAjNEZBMgor5L6jID4gbMeaOyAjNEZBMwor5L6lID4gamnEg287ICM0RkE1CivkvqYgPiB6aMSTbjsgIzRGQTYKK+S+pyA+IGPDqDsgIzRGQTcKK+S+qCA+IHFpw6FvOyAjNEZBOAor5L6pID4ga3XDoGk7ICM0RkE5CivkvqogPiBjaMOhaTsgIzRGQUEKK+S+qyA+IG7DrG5nOyAjNEZBQgor5L6sID4gbsOzbmc7ICM0RkFDCivkvq0gPiBqxK1uOyAjNEZBRAor5L6uID4gd8WtOyAjNEZBRQor5L6vID4gaMOzdTsgIzRGQUYKK+S+sCA+IGrErW9uZzsgIzRGQjAKK+S+sSA+IGNoxJVuZzsgIzRGQjEKK+S+siA+IHpow6huOyAjNEZCMgor5L6zID4gesO5bzsgIzRGQjMKK+S+tCA+IGNoxY91OyAjNEZCNAor5L61ID4gccSrbjsgIzRGQjUKK+S+tiA+IGzHmjsgIzRGQjYKK+S+tyA+IGrDujsgIzRGQjcKK+S+uCA+IHNow7k7ICM0RkI4CivkvrkgPiB0xK1uZzsgIzRGQjkKK+S+uiA+IHNow6huOyAjNEZCQQor5L67ID4gdMWrbzsgIzRGQkIKK+S+vCA+IGLDszsgIzRGQkMKK+S+vSA+IG7DoW47ICM0RkJECivkvr4gPiBoxIFvOyAjNEZCRQor5L6/ID4gYmnDoG47ICM0RkJGCivkv4AgPiB0xa1pOyAjNEZDMAor5L+BID4gecWtOyAjNEZDMQor5L+CID4geMOsOyAjNEZDMgor5L+DID4gY8O5OyAjNEZDMwor5L+EID4gw6k7ICM0RkM0Civkv4UgPiBxw611OyAjNEZDNQor5L+GID4geMO6OyAjNEZDNgor5L+HID4ga3XEg25nOyAjNEZDNwor5L+IID4ga8O5OyAjNEZDOAor5L+JID4gd8O5OyAjNEZDOQor5L+KID4gasO5bjsgIzRGQ0EKK+S/iyA+IHnDrDsgIzRGQ0IKK+S/jCA+IGbFrTsgIzRGQ0MKK+S/jSA+IGzDoW5nOyAjNEZDRAor5L+OID4gesWtOyAjNEZDRQor5L+PID4gcWnDoG87ICM0RkNGCivkv5AgPiBsw6w7ICM0RkQwCivkv5EgPiB5xY9uZzsgIzRGRDEKK+S/kiA+IGjDuW47ICM0RkQyCivkv5MgPiBqw6xuZzsgIzRGRDMKK+S/lCA+IHhpw6BuOyAjNEZENAor5L+VID4gc8OgbjsgIzRGRDUKK+S/liA+IHDEg2k7ICM0RkQ2Civkv5cgPiBzw7o7ICM0RkQ3Civkv5ggPiBmw7o7ICM0RkQ4Civkv5kgPiB4xKs7ICM0RkQ5Civkv5ogPiBsxK07ICM0RkRBCivkv5sgPiBmxa07ICM0RkRCCivkv5wgPiBwxKtuZzsgIzRGREMKK+S/nSA+IGLEg287ICM0RkRECivkv54gPiB5w7o7ICM0RkRFCivkv58gPiBzw6w7ICM0RkRGCivkv6AgPiB4acOhOyAjNEZFMAor5L+hID4geMOsbjsgIzRGRTEKK+S/oiA+IHjEq3U7ICM0RkUyCivkv6MgPiB5xa07ICM0RkUzCivkv6QgPiB0w6w7ICM0RkU0Civkv6UgPiBjaMSTOyAjNEZFNQor5L+mID4gY2jDs3U7ICM0RkU2Civkv6ggPiB5xINuOyAjNEZFOAor5L+pID4gbGnEgzsgIzRGRTkKK+S/qiA+IGzDrDsgIzRGRUEKK+S/qyA+IGzDoWk7ICM0RkVCCivkv60gPiBqacSDbjsgIzRGRUQKK+S/riA+IHjEq3U7ICM0RkVFCivkv68gPiBmxa07ICM0RkVGCivkv7AgPiBow6g7ICM0RkYwCivkv7EgPiBqw7k7ICM0RkYxCivkv7IgPiB4acOgbzsgIzRGRjIKK+S/syA+IHDDoWk7ICM0RkYzCivkv7QgPiBqacOgbjsgIzRGRjQKK+S/tSA+IGJpw6BvOyAjNEZGNQor5L+2ID4gY2jDuTsgIzRGRjYKK+S/tyA+IGbDqGk7ICM0RkY3Civkv7ggPiBmw6huZzsgIzRGRjgKK+S/uSA+IHnDoDsgIzRGRjkKK+S/uiA+IMSDbjsgIzRGRkEKK+S/uyA+IGLDqGk7ICM0RkZCCivkv7wgPiB5w7k7ICM0RkZDCivkv70gPiB4xKtuOyAjNEZGRAor5L++ID4gYsStOyAjNEZGRQor5L+/ID4gamnDoG47ICM0RkZGCivlgIAgPiBjaMSBbmc7ICM1MDAwCivlgIEgPiBjaMOtOyAjNTAwMQor5YCCID4gYsOsbmc7ICM1MDAyCivlgIMgPiB6w6FuOyAjNTAwMwor5YCEID4gecOhbzsgIzUwMDQKK+WAhSA+IGPDuWk7ICM1MDA1CivlgIYgPiBsacSDOyAjNTAwNgor5YCHID4gd8SDbjsgIzUwMDcKK+WAiCA+IGzDoWk7ICM1MDA4CivlgIkgPiBjxIFuZzsgIzUwMDkKK+WAiiA+IHrDsm5nOyAjNTAwQQor5YCLID4gZ8OoOyAjNTAwQgor5YCMID4gZ3XEgW47ICM1MDBDCivlgI0gPiBiw6hpOyAjNTAwRAor5YCOID4gdGnEgW47ICM1MDBFCivlgI8gPiBzaMWrOyAjNTAwRgor5YCQID4gc2jFqzsgIzUwMTAKK+WAkSA+IG1lbjsgIzUwMTEKK+WAkiA+IGTEg287ICM1MDEyCivlgJMgPiB0w6FuOyAjNTAxMwor5YCUID4ganXDqTsgIzUwMTQKK+WAlSA+IGNow7ppOyAjNTAxNQor5YCWID4geMOsbmc7ICM1MDE2CivlgJcgPiBww6luZzsgIzUwMTcKK+WAmCA+IHTEg25nOyAjNTAxOAor5YCZID4gaMOydTsgIzUwMTkKK+WAmiA+IHnErTsgIzUwMUEKK+WAmyA+IHHEqzsgIzUwMUIKK+WAnCA+IHTDrDsgIzUwMUMKK+WAnSA+IGfDoG47ICM1MDFECivlgJ4gPiBqw6xuZzsgIzUwMUUKK+WAnyA+IGppw6g7ICM1MDFGCivlgKAgPiBzxatpOyAjNTAyMAor5YChID4gY2jDoG5nOyAjNTAyMQor5YCiID4gamnDqTsgIzUwMjIKK+WAoyA+IGbEg25nOyAjNTAyMwor5YCkID4gemjDrTsgIzUwMjQKK+WApSA+IGvFjW5nOyAjNTAyNQor5YCmID4ganXDoG47ICM1MDI2CivlgKcgPiB6xY1uZzsgIzUwMjcKK+WAqCA+IGrDuTsgIzUwMjgKK+WAqSA+IHFpw6BuOyAjNTAyOQor5YCqID4gbsOtOyAjNTAyQQor5YCrID4gbMO6bjsgIzUwMkIKK+WArCA+IHpoxatvOyAjNTAyQwor5YCtID4gd8STaTsgIzUwMkQKK+WAriA+IGzFrW87ICM1MDJFCivlgK8gPiBzxY1uZzsgIzUwMkYKK+WAsCA+IGzDqW5nOyAjNTAzMAor5YCxID4gaMO5bjsgIzUwMzEKK+WAsiA+IGTFjW5nOyAjNTAzMgor5YCzID4gesOsOyAjNTAzMwor5YC0ID4gYsOobjsgIzUwMzQKK+WAtSA+IHfFrTsgIzUwMzUKK+WAtiA+IGrDuTsgIzUwMzYKK+WAtyA+IG7DoGk7ICM1MDM3CivlgLggPiBjxINpOyAjNTAzOAor5YC5ID4gamnEg247ICM1MDM5CivlgLogPiB6aMOgaTsgIzUwM0EKK+WAuyA+IHnEkzsgIzUwM0IKK+WAvCA+IHpow607ICM1MDNDCivlgL0gPiBzaMOgOyAjNTAzRAor5YC+ID4gccSrbmc7ICM1MDNFCivlgYAgPiB5xKtuZzsgIzUwNDAKK+WBgSA+IGNoxJNuZzsgIzUwNDEKK+WBgiA+IGppxIFuOyAjNTA0Mgor5YGDID4gecSDbjsgIzUwNDMKK+WBhCA+IG51w6BuOyAjNTA0NAor5YGFID4gemjDsm5nOyAjNTA0NQor5YGGID4gY2jFrW47ICM1MDQ2CivlgYcgPiBqacSDOyAjNTA0Nwor5YGIID4gamnDqTsgIzUwNDgKK+WBiSA+IHfElWk7ICM1MDQ5CivlgYogPiB5xa07ICM1MDRBCivlgYsgPiBixK1uZzsgIzUwNEIKK+WBjCA+IHLDuW87ICM1MDRDCivlgY0gPiB0w607ICM1MDRECivlgY4gPiB3xJNpOyAjNTA0RQor5YGPID4gcGnEgW47ICM1MDRGCivlgZAgPiB5w6BuOyAjNTA1MAor5YGRID4gZsSTbmc7ICM1MDUxCivlgZIgPiB0xINuZzsgIzUwNTIKK+WBkyA+IHfDsjsgIzUwNTMKK+WBlCA+IMOoOyAjNTA1NAor5YGVID4geGnDqTsgIzUwNTUKK+WBliA+IGNoxJU7ICM1MDU2CivlgZcgPiBzaMSVbmc7ICM1MDU3CivlgZggPiBrxINuOyAjNTA1OAor5YGZID4gZMOsOyAjNTA1OQor5YGaID4gesO5bzsgIzUwNUEKK+WBmyA+IGNoxIE7ICM1MDVCCivlgZwgPiB0w61uZzsgIzUwNUMKK+WBnSA+IGLDqGk7ICM1MDVECivlgZ4gPiB5w6g7ICM1MDVFCivlgZ8gPiBodcOhbmc7ICM1MDVGCivlgaAgPiB5xINvOyAjNTA2MAor5YGhID4gemjDoG47ICM1MDYxCivlgaIgPiBjaMWPdTsgIzUwNjIKK+WBoyA+IHnEgW47ICM1MDYzCivlgaQgPiB5xY91OyAjNTA2NAor5YGlID4gamnDoG47ICM1MDY1CivlgaYgPiB4xas7ICM1MDY2CivlgacgPiB6aMSBOyAjNTA2Nwor5YGoID4gY8SrOyAjNTA2OAor5YGpID4gZsO5OyAjNTA2OQor5YGqID4gYsSrOyAjNTA2QQor5YGrID4gemjDrDsgIzUwNkIKK+WBrCA+IHrFj25nOyAjNTA2Qwor5YGtID4gbWnEg247ICM1MDZECivlga4gPiBqw607ICM1MDZFCivlga8gPiB5xK07ICM1MDZGCivlgbAgPiB4acOoOyAjNTA3MAor5YGxID4geMO6bjsgIzUwNzEKK+WBsiA+IHPEqzsgIzUwNzIKK+WBsyA+IGR1xIFuOyAjNTA3Mwor5YG0ID4gY8OoOyAjNTA3NAor5YG1ID4gemjEk247ICM1MDc1CivlgbYgPiDFj3U7ICM1MDc2CivlgbcgPiB0xY11OyAjNTA3Nwor5YG4ID4gdMWNdTsgIzUwNzgKK+WBuSA+IGLDqGk7ICM1MDc5CivlgbogPiB6w6E7ICM1MDdBCivlgbsgPiBsx5o7ICM1MDdCCivlgbwgPiBqacOpOyAjNTA3Qwor5YG9ID4gd8SVaTsgIzUwN0QKK+WBviA+IGbDqG47ICM1MDdFCivlgb8gPiBjaMOhbmc7ICM1MDdGCivlgoAgPiBnxatpOyAjNTA4MAor5YKBID4gc8WPdTsgIzUwODEKK+WCgiA+IHpow6w7ICM1MDgyCivlgoMgPiBzw7k7ICM1MDgzCivlgoQgPiB4acSBOyAjNTA4NAor5YKFID4gZsO5OyAjNTA4NQor5YKGID4geXXDoG47ICM1MDg2CivlgocgPiByxY9uZzsgIzUwODcKK+WCiCA+IGzDrDsgIzUwODgKK+WCiSA+IHLDuTsgIzUwODkKK+WCiiA+IHnFrW47ICM1MDhBCivlgosgPiBnw7J1OyAjNTA4Qgor5YKMID4gbcOgOyAjNTA4Qwor5YKNID4gYsOgbmc7ICM1MDhECivlgo4gPiBkacSBbjsgIzUwOEUKK+WCjyA+IHTDoW5nOyAjNTA4Rgor5YKQID4gaMOgbzsgIzUwOTAKK+WCkSA+IGppw6k7ICM1MDkxCivlgpIgPiB4xKs7ICM1MDkyCivlgpMgPiBzaMOgbjsgIzUwOTMKK+WClCA+IHFpw6BuOyAjNTA5NAor5YKVID4ganXDqTsgIzUwOTUKK+WCliA+IGPEgW5nOyAjNTA5Ngor5YKXID4gY2jDuTsgIzUwOTcKK+WCmCA+IHPEg247ICM1MDk4CivlgpkgPiBiw6hpOyAjNTA5OQor5YKaID4geGnDoG87ICM1MDlBCivlgpsgPiB5xY9uZzsgIzUwOUIKK+WCnCA+IHnDoW87ICM1MDlDCivlgp0gPiB0w6BuOyAjNTA5RAor5YKeID4gc8WrbzsgIzUwOUUKK+WCnyA+IHnEg25nOyAjNTA5Rgor5YKgID4gZsSBOyAjNTBBMAor5YKhID4gYsOsbmc7ICM1MEExCivlgqIgPiBqacSBOyAjNTBBMgor5YKjID4gZMSDaTsgIzUwQTMKK+WCpCA+IHrDoGk7ICM1MEE0CivlgqUgPiB0xINuZzsgIzUwQTUKK+WCpyA+IGLDrG47ICM1MEE3CivlgqggPiBjaMWtOyAjNTBBOAor5YKpID4gbsO6bzsgIzUwQTkKK+WCqiA+IGPEgW47ICM1MEFBCivlgqsgPiBsxJVpOyAjNTBBQgor5YKsID4gY8WraTsgIzUwQUMKK+WCrSA+IHnFjW5nOyAjNTBBRAor5YKuID4gesSBbzsgIzUwQUUKK+WCryA+IHrFj25nOyAjNTBBRgor5YKwID4gcMOpbmc7ICM1MEIwCivlgrEgPiBzxY9uZzsgIzUwQjEKK+WCsiA+IMOgbzsgIzUwQjIKK+WCsyA+IGNodcOhbjsgIzUwQjMKK+WCtCA+IHnFrTsgIzUwQjQKK+WCtSA+IHpow6BpOyAjNTBCNQor5YK2ID4gY8OydTsgIzUwQjYKK+WCtyA+IHNoxIFuZzsgIzUwQjcKK+WCuCA+IHFpxINuZzsgIzUwQjgKK+WCuSA+IGrDrG5nOyAjNTBCOQor5YK6ID4gY2jDrDsgIzUwQkEKK+WCuyA+IHNoxIM7ICM1MEJCCivlgrwgPiBow6BuOyAjNTBCQwor5YK9ID4gemjEgW5nOyAjNTBCRAor5YK+ID4gccSrbmc7ICM1MEJFCivlgr8gPiB5w6BuOyAjNTBCRgor5YOAID4gZMOsOyAjNTBDMAor5YOBID4geMSrOyAjNTBDMQor5YOCID4gbMeaOyAjNTBDMgor5YODID4gYsOoaTsgIzUwQzMKK+WDhCA+IHBpw6BvOyAjNTBDNAor5YOFID4gasStbjsgIzUwQzUKK+WDhiA+IGxpw6FuOyAjNTBDNgor5YOHID4gbMO5OyAjNTBDNwor5YOIID4gbcOgbjsgIzUwQzgKK+WDiSA+IHFpxIFuOyAjNTBDOQor5YOKID4geGnEgW47ICM1MENBCivlg4sgPiB0w6BuOyAjNTBDQgor5YOMID4gecOtbmc7ICM1MENDCivlg40gPiBkw7JuZzsgIzUwQ0QKK+WDjiA+IHpodcOgbjsgIzUwQ0UKK+WDjyA+IHhpw6BuZzsgIzUwQ0YKK+WDkCA+IHNow6BuOyAjNTBEMAor5YORID4gcWnDoW87ICM1MEQxCivlg5IgPiBqxK1vbmc7ICM1MEQyCivlg5MgPiB0xa1pOyAjNTBEMwor5YOUID4gesWtbjsgIzUwRDQKK+WDlSA+IHDDujsgIzUwRDUKK+WDliA+IHjEqzsgIzUwRDYKK+WDlyA+IGzDoW87ICM1MEQ3Civlg5ggPiBjaMSDbmc7ICM1MEQ4Civlg5kgPiBndcSBbmc7ICM1MEQ5Civlg5ogPiBsacOhbzsgIzUwREEKK+WDmyA+IHHEqzsgIzUwREIKK+WDnCA+IGTDqG5nOyAjNTBEQwor5YOdID4gY2jDoW47ICM1MERECivlg54gPiB3xJVpOyAjNTBERQor5YOfID4gasSrOyAjNTBERgor5YOgID4gZsSBbjsgIzUwRTAKK+WDoSA+IGjDuWk7ICM1MEUxCivlg6IgPiBjaHXEg247ICM1MEUyCivlg6MgPiBqacOgbjsgIzUwRTMKK+WDpCA+IGTDoG47ICM1MEU0Civlg6UgPiBqacSDbzsgIzUwRTUKK+WDpiA+IGrDrHU7ICM1MEU2Civlg6cgPiBzxJNuZzsgIzUwRTcKK+WDqCA+IGbDqG47ICM1MEU4Civlg6kgPiB4acOgbjsgIzUwRTkKK+WDqiA+IGp1w6k7ICM1MEVBCivlg6sgPiDDqDsgIzUwRUIKK+WDrCA+IGppxIFvOyAjNTBFQwor5YOtID4gamnDoG47ICM1MEVECivlg64gPiB0w7NuZzsgIzUwRUUKK+WDryA+IGzErW47ICM1MEVGCivlg7AgPiBiw7M7ICM1MEYwCivlg7EgPiBnw7k7ICM1MEYxCivlg7MgPiBzw7k7ICM1MEYzCivlg7QgPiB4acOgbjsgIzUwRjQKK+WDtSA+IGppxIFuZzsgIzUwRjUKK+WDtiA+IG3ErW47ICM1MEY2Civlg7cgPiB5w6g7ICM1MEY3Civlg7ggPiBqw6xuOyAjNTBGOAor5YO5ID4gamnDoDsgIzUwRjkKK+WDuiA+IHFpw6BvOyAjNTBGQQor5YO7ID4gcMOsOyAjNTBGQgor5YO8ID4gZsSTbmc7ICM1MEZDCivlg70gPiB6aMOydTsgIzUwRkQKK+WDviA+IMOgaTsgIzUwRkUKK+WDvyA+IHPDoGk7ICM1MEZGCivlhIAgPiB5w607ICM1MTAwCivlhIEgPiBqw7luOyAjNTEwMQor5YSCID4gbsOzbmc7ICM1MTAyCivlhIMgPiBjaMOhbjsgIzUxMDMKK+WEhCA+IHnDrDsgIzUxMDQKK+WEhSA+IGTEgW5nOyAjNTEwNQor5YSGID4gasStbmc7ICM1MTA2CivlhIcgPiB4dcSBbjsgIzUxMDcKK+WEiCA+IGt1w6BpOyAjNTEwOAor5YSJID4gamnEg247ICM1MTA5CivlhIogPiBjaMO5OyAjNTEwQQor5YSLID4gZMSBbjsgIzUxMEIKK+WEjCA+IGppxINvOyAjNTEwQwor5YSNID4gc2jEgzsgIzUxMEQKK+WEjiA+IHrDoGk7ICM1MTBFCivlhJAgPiBiw6xuOyAjNTExMAor5YSRID4gw6BuOyAjNTExMQor5YSSID4gcsO6OyAjNTExMgor5YSTID4gdMOhaTsgIzUxMTMKK+WElCA+IGNow7N1OyAjNTExNAor5YSVID4gY2jDoWk7ICM1MTE1CivlhJYgPiBsw6FuOyAjNTExNgor5YSXID4gbsStOyAjNTExNwor5YSYID4gasStbjsgIzUxMTgKK+WEmSA+IHFpw6BuOyAjNTExOQor5YSaID4gbcOpbmc7ICM1MTFBCivlhJsgPiB3xa07ICM1MTFCCivlhJwgPiBuw61uZzsgIzUxMUMKK+WEnSA+IHHDrW9uZzsgIzUxMUQKK+WEniA+IG7ErTsgIzUxMUUKK+WEnyA+IGNow6FuZzsgIzUxMUYKK+WEoCA+IGxpw6g7ICM1MTIwCivlhKEgPiBsxJVpOyAjNTEyMQor5YSiID4gbMeaOyAjNTEyMgor5YSjID4ga3XDoG5nOyAjNTEyMwor5YSkID4gYsOgbzsgIzUxMjQKK+WEpSA+IGTDujsgIzUxMjUKK+WEpiA+IGJpxIFvOyAjNTEyNgor5YSnID4gesSDbjsgIzUxMjcKK+WEqCA+IHpow607ICM1MTI4CivlhKkgPiBzw6w7ICM1MTI5CivlhKogPiB5xY11OyAjNTEyQQor5YSrID4gaMOhbzsgIzUxMkIKK+WErCA+IGNow6huOyAjNTEyQwor5YStID4gY2jDqG47ICM1MTJECivlhK4gPiBsw6w7ICM1MTJFCivlhK8gPiB0w6luZzsgIzUxMkYKK+WEsCA+IHfElWk7ICM1MTMwCivlhLEgPiBsxY9uZzsgIzUxMzEKK+WEsiA+IGNoxa07ICM1MTMyCivlhLMgPiBjaMOgbjsgIzUxMzMKK+WEtCA+IHLDoW5nOyAjNTEzNAor5YS1ID4gc2jFqzsgIzUxMzUKK+WEtiA+IGjDuWk7ICM1MTM2CivlhLcgPiBsw6w7ICM1MTM3CivlhLggPiBsw7pvOyAjNTEzOAor5YS5ID4gesSDbjsgIzUxMzkKK+WEuiA+IG7Dum87ICM1MTNBCivlhLsgPiB0xINuZzsgIzUxM0IKK+WEvCA+IHnEg247ICM1MTNDCivlhL0gPiBsxJVpOyAjNTEzRAor5YS+ID4gbsOgbmc7ICM1MTNFCivlhL8gPiDDqXI7ICM1MTNGCivlhYAgPiB3w7k7ICM1MTQwCivlhYEgPiB5xa1uOyAjNTE0MQor5YWCID4gesSBbjsgIzUxNDIKK+WFgyA+IHl1w6FuOyAjNTE0Mwor5YWEID4geMSrb25nOyAjNTE0NAor5YWFID4gY2jFjW5nOyAjNTE0NQor5YWGID4gemjDoG87ICM1MTQ2CivlhYcgPiB4xKtvbmc7ICM1MTQ3CivlhYggPiB4acSBbjsgIzUxNDgKK+WFiSA+IGd1xIFuZzsgIzUxNDkKK+WFiiA+IGTDuWk7ICM1MTRBCivlhYsgPiBrw6g7ICM1MTRCCivlhYwgPiBkw7lpOyAjNTE0Qwor5YWNID4gbWnEg247ICM1MTRECivlhY4gPiB0w7k7ICM1MTRFCivlhY8gPiBjaMOhbmc7ICM1MTRGCivlhZAgPiDDqXI7ICM1MTUwCivlhZEgPiBkw7lpOyAjNTE1MQor5YWSID4gw6lyOyAjNTE1Mgor5YWTID4geMSrbjsgIzUxNTMKK+WFlCA+IHTDuTsgIzUxNTQKK+WFlSA+IHPDrDsgIzUxNTUKK+WFliA+IHnEg247ICM1MTU2CivlhZcgPiB5xINuOyAjNTE1Nwor5YWYID4gc2jErTsgIzUxNTgKK+WFmSA+IHNow60nICdrw6g7ICM1MTU5CivlhZogPiBkxINuZzsgIzUxNUEKK+WFmyA+IHFpxIFuOyAjNTE1Qgor5YWcID4gZMWNdTsgIzUxNUMKK+WFnSA+IGbEk247ICM1MTVECivlhZ4gPiBtw6FvOyAjNTE1RQor5YWfID4gc2jEk247ICM1MTVGCivlhaAgPiBkxY11OyAjNTE2MAor5YWhID4gYsSDaScgJ2vDqDsgIzUxNjEKK+WFoiA+IGrEq25nOyAjNTE2Mgor5YWjID4gbMStOyAjNTE2Mwor5YWkID4gaHXDoW5nOyAjNTE2NAor5YWlID4gcsO5OyAjNTE2NQor5YWmID4gd8Ohbmc7ICM1MTY2CivlhacgPiBuw6hpOyAjNTE2Nwor5YWoID4gcXXDoW47ICM1MTY4CivlhakgPiBsacSDbmc7ICM1MTY5CivlhaogPiB5w7o7ICM1MTZBCivlhasgPiBixIE7ICM1MTZCCivlhawgPiBnxY1uZzsgIzUxNkMKK+WFrSA+IGzDrHU7ICM1MTZECivlha4gPiB4xKs7ICM1MTZFCivlhbAgPiBsw6FuOyAjNTE3MAor5YWxID4gZ8Oybmc7ICM1MTcxCivlhbIgPiB0acSBbjsgIzUxNzIKK+WFsyA+IGd1xIFuOyAjNTE3Mwor5YW0ID4geMSrbmc7ICM1MTc0CivlhbUgPiBixKtuZzsgIzUxNzUKK+WFtiA+IHHDrTsgIzUxNzYKK+WFtyA+IGrDuTsgIzUxNzcKK+WFuCA+IGRpxINuOyAjNTE3OAor5YW5ID4gesSrOyAjNTE3OQor5YW7ID4gecSDbmc7ICM1MTdCCivlhbwgPiBqacSBbjsgIzUxN0MKK+WFvSA+IHNow7J1OyAjNTE3RAor5YW+ID4gasOsOyAjNTE3RQor5YW/ID4gecOsOyAjNTE3Rgor5YaAID4gasOsOyAjNTE4MAor5YaBID4gY2jEg247ICM1MTgxCivlhoIgPiBqxKtvbmc7ICM1MTgyCivlhoMgPiBtYW87ICM1MTgzCivlhoQgPiByxINuOyAjNTE4NAor5YaFID4gbsOoaTsgIzUxODUKK+WGhiA+IHl1YW47ICM1MTg2CivlhocgPiBtxINvOyAjNTE4Nwor5YaIID4gZ8SBbmc7ICM1MTg4CivlhokgPiByxINuOyAjNTE4OQor5YaKID4gY8OoOyAjNTE4QQor5YaLID4gasSrb25nOyAjNTE4Qgor5YaMID4gY8OoOyAjNTE4Qwor5YaNID4gesOgaTsgIzUxOEQKK+WGjiA+IGd1xIM7ICM1MThFCivlho8gPiBqxK1vbmc7ICM1MThGCivlhpAgPiBtw6BvOyAjNTE5MAor5YaRID4gemjDsnU7ICM1MTkxCivlhpIgPiBtw7J1OyAjNTE5Mgor5YaTID4gZ8OydTsgIzUxOTMKK+WGlCA+IHjFrTsgIzUxOTQKK+WGlSA+IG1pxINuOyAjNTE5NQor5YaWID4gbcOsOyAjNTE5Ngor5YaXID4gcsWPbmc7ICM1MTk3CivlhpggPiB5w61uOyAjNTE5OAor5YaZID4geGnElTsgIzUxOTkKK+WGmiA+IGvEg247ICM1MTlBCivlhpsgPiBqxatuOyAjNTE5Qgor5YacID4gbsOzbmc7ICM1MTlDCivlhp0gPiB5w607ICM1MTlECivlhp4gPiBtw607ICM1MTlFCivlhp8gPiBzaMOsOyAjNTE5Rgor5YagID4gZ3XEgW47ICM1MUEwCivlhqEgPiBtw6luZzsgIzUxQTEKK+WGoiA+IHpoxY9uZzsgIzUxQTIKK+WGoyA+IGrDuTsgIzUxQTMKK+WGpCA+IHl1xIFuOyAjNTFBNAor5YalID4gbcOtbmc7ICM1MUE1CivlhqYgPiBrw7J1OyAjNTFBNgor5YaoID4gZsO5OyAjNTFBOAor5YapID4geGnElTsgIzUxQTkKK+WGqiA+IG3DrDsgIzUxQUEKK+WGqyA+IGLEq25nOyAjNTFBQgor5YasID4gZMWNbmc7ICM1MUFDCivlhq0gPiB0w6FpOyAjNTFBRAor5YauID4gZ8SBbmc7ICM1MUFFCivlhq8gPiBmw6luZzsgIzUxQUYKK+WGsCA+IGLEq25nOyAjNTFCMAor5YaxID4gaMO5OyAjNTFCMQor5YayID4gY2jFjW5nOyAjNTFCMgor5YazID4ganXDqTsgIzUxQjMKK+WGtCA+IGjDuTsgIzUxQjQKK+WGtSA+IGt1w6BuZzsgIzUxQjUKK+WGtiA+IHnElTsgIzUxQjYKK+WGtyA+IGzElW5nOyAjNTFCNwor5Ya4ID4gcMOgbjsgIzUxQjgKK+WGuSA+IGbDujsgIzUxQjkKK+WGuiA+IG3ErW47ICM1MUJBCivlhrsgPiBkw7JuZzsgIzUxQkIKK+WGvCA+IHhpxINuOyAjNTFCQwor5Ya9ID4gbGnDqDsgIzUxQkQKK+WGviA+IHhpw6E7ICM1MUJFCivlhr8gPiBqacSBbjsgIzUxQkYKK+WHgCA+IGrDrG5nOyAjNTFDMAor5YeBID4gc2jDuTsgIzUxQzEKK+WHgiA+IG3ElWk7ICM1MUMyCivlh4MgPiB0w7o7ICM1MUMzCivlh4QgPiBxxKs7ICM1MUM0Civlh4UgPiBnw7k7ICM1MUM1Civlh4YgPiB6aMWtbjsgIzUxQzYKK+WHhyA+IHPDsm5nOyAjNTFDNwor5YeIID4gasOsbmc7ICM1MUM4Civlh4kgPiBsacOhbmc7ICM1MUM5Civlh4ogPiBxw6xuZzsgIzUxQ0EKK+WHiyA+IGRpxIFvOyAjNTFDQgor5YeMID4gbMOtbmc7ICM1MUNDCivlh40gPiBkw7JuZzsgIzUxQ0QKK+WHjiA+IGfDoG47ICM1MUNFCivlh48gPiBqacSDbjsgIzUxQ0YKK+WHkCA+IHnEq247ICM1MUQwCivlh5EgPiBjw7J1OyAjNTFEMQor5YeSID4gecOtOyAjNTFEMgor5YeTID4gbMOsOyAjNTFEMwor5YeUID4gY8SBbmc7ICM1MUQ0Civlh5UgPiBtxK1uZzsgIzUxRDUKK+WHliA+IHpodcSVbjsgIzUxRDYKK+WHlyA+IGPDumk7ICM1MUQ3Civlh5ggPiBzxKs7ICM1MUQ4Civlh5kgPiBkw7pvOyAjNTFEOQor5YeaID4gasOsbjsgIzUxREEKK+WHmyA+IGzErW47ICM1MURCCivlh5wgPiBsxK1uOyAjNTFEQwor5YedID4gbsOtbmc7ICM1MURECivlh54gPiB4xKs7ICM1MURFCivlh58gPiBkw7o7ICM1MURGCivlh6AgPiBqxKs7ICM1MUUwCivlh6EgPiBmw6FuOyAjNTFFMQor5YeiID4gZsOhbjsgIzUxRTIKK+WHoyA+IGbDoW47ICM1MUUzCivlh6QgPiBmw6huZzsgIzUxRTQKK+WHpSA+IGrFqzsgIzUxRTUKK+WHpiA+IGNoxa07ICM1MUU2Civlh6ggPiBmxJNuZzsgIzUxRTgKK+WHqyA+IGbDujsgIzUxRUIKK+WHrCA+IGbEk25nOyAjNTFFQwor5YetID4gcMOtbmc7ICM1MUVECivlh64gPiBmxJNuZzsgIzUxRUUKK+WHryA+IGvEg2k7ICM1MUVGCivlh7AgPiBodcOhbmc7ICM1MUYwCivlh7EgPiBrxINpOyAjNTFGMQor5YeyID4gZ8SBbjsgIzUxRjIKK+WHsyA+IGTDqG5nOyAjNTFGMwor5Ye0ID4gcMOtbmc7ICM1MUY0Civlh7UgPiBxxas7ICM1MUY1Civlh7YgPiB4xKtvbmc7ICM1MUY2Civlh7cgPiBrdcOgaTsgIzUxRjcKK+WHuCA+IHTFqzsgIzUxRjgKK+WHuSA+IMSBbzsgIzUxRjkKK+WHuiA+IGNoxas7ICM1MUZBCivlh7sgPiBqw607ICM1MUZCCivlh7wgPiBkw6BuZzsgIzUxRkMKK+WHvSA+IGjDoW47ICM1MUZECivlh74gPiBow6FuOyAjNTFGRQor5Ye/ID4gesOhbzsgIzUxRkYKK+WIgCA+IGTEgW87ICM1MjAwCivliIEgPiBkacSBbzsgIzUyMDEKK+WIgiA+IGTEgW87ICM1MjAyCivliIMgPiByw6huOyAjNTIwMwor5YiEID4gcsOobjsgIzUyMDQKK+WIhSA+IGNodcSBbmc7ICM1MjA1CivliIYgPiBmxJNuOyAjNTIwNgor5YiHID4gcWnEkzsgIzUyMDcKK+WIiCA+IHnDrDsgIzUyMDgKK+WIiSA+IGrEqzsgIzUyMDkKK+WIiiA+IGvEgW47ICM1MjBBCivliIsgPiBxacOgbjsgIzUyMEIKK+WIjCA+IGPFrW47ICM1MjBDCivliI0gPiBjaMO6OyAjNTIwRAor5YiOID4gd8SVbjsgIzUyMEUKK+WIjyA+IGrEqzsgIzUyMEYKK+WIkCA+IGTEg247ICM1MjEwCivliJEgPiB4w61uZzsgIzUyMTEKK+WIkiA+IGh1w6E7ICM1MjEyCivliJMgPiB3w6FuOyAjNTIxMwor5YiUID4ganXDqTsgIzUyMTQKK+WIlSA+IGzDrTsgIzUyMTUKK+WIliA+IHl1w6g7ICM1MjE2CivliJcgPiBsacOoOyAjNTIxNwor5YiYID4gbMOtdTsgIzUyMTgKK+WImSA+IHrDqTsgIzUyMTkKK+WImiA+IGfEgW5nOyAjNTIxQQor5YibID4gY2h1w6BuZzsgIzUyMUIKK+WInCA+IGbDujsgIzUyMUMKK+WInSA+IGNoxas7ICM1MjFECivliJ4gPiBxw7k7ICM1MjFFCivliJ8gPiBqxas7ICM1MjFGCivliKAgPiBzaMSBbjsgIzUyMjAKK+WIoSA+IG3ErW47ICM1MjIxCivliKIgPiBsw61uZzsgIzUyMjIKK+WIoyA+IHpoxY1uZzsgIzUyMjMKK+WIpCA+IHDDoG47ICM1MjI0CivliKUgPiBiacOpOyAjNTIyNQor5YimID4gamnDqTsgIzUyMjYKK+WIpyA+IGppw6k7ICM1MjI3CivliKggPiBiw6BvOyAjNTIyOAor5YipID4gbMOsOyAjNTIyOQor5YiqID4gc2jEgW47ICM1MjJBCivliKsgPiBiacOpOyAjNTIyQgor5YisID4gY2jEg247ICM1MjJDCivliK0gPiBqxK1uZzsgIzUyMkQKK+WIriA+IGd1xIE7ICM1MjJFCivliK8gPiBnxJNuOyAjNTIyRgor5YiwID4gZMOgbzsgIzUyMzAKK+WIsSA+IGNodcOgbmc7ICM1MjMxCivliLIgPiBrxatpOyAjNTIzMgor5YizID4ga8WrOyAjNTIzMwor5Yi0ID4gZMO5bzsgIzUyMzQKK+WItSA+IMOocjsgIzUyMzUKK+WItiA+IHpow6w7ICM1MjM2CivliLcgPiBzaHXEgTsgIzUyMzcKK+WIuCA+IHF1w6BuOyAjNTIzOAor5Yi5ID4gY2jDoDsgIzUyMzkKK+WIuiA+IGPDrDsgIzUyM0EKK+WIuyA+IGvDqDsgIzUyM0IKK+WIvCA+IGppw6k7ICM1MjNDCivliL0gPiBnw7lpOyAjNTIzRAor5Yi+ID4gY8OsOyAjNTIzRQor5Yi/ID4gZ8O5aTsgIzUyM0YKK+WJgCA+IGvEg2k7ICM1MjQwCivliYEgPiBkw7lvOyAjNTI0MQor5YmCID4gasOsOyAjNTI0Mgor5YmDID4gdMOsOyAjNTI0Mwor5YmEID4gasStbmc7ICM1MjQ0CivliYUgPiBsw7N1OyAjNTI0NQor5YmGID4gZ8STbjsgIzUyNDYKK+WJhyA+IHrDqTsgIzUyNDcKK+WJiCA+IHl1xIFuOyAjNTI0OAor5YmJID4gY8O5bzsgIzUyNDkKK+WJiiA+IHh1xJM7ICM1MjRBCivliYsgPiBrw6g7ICM1MjRCCivliYwgPiBsw6A7ICM1MjRDCivliY0gPiBxacOhbjsgIzUyNEQKK+WJjiA+IGNow6A7ICM1MjRFCivliY8gPiBjaHXDoG5nOyAjNTI0Rgor5YmQID4gZ3XEgzsgIzUyNTAKK+WJkSA+IGppw6BuOyAjNTI1MQor5YmSID4gY8O5bzsgIzUyNTIKK+WJkyA+IGzDrTsgIzUyNTMKK+WJlCA+IHTEqzsgIzUyNTQKK+WJlSA+IGbDqGk7ICM1MjU1CivliZYgPiBwxY11OyAjNTI1Ngor5YmXID4gY2jEg247ICM1MjU3CivliZggPiBxw607ICM1MjU4CivliZkgPiBjaHXDoG5nOyAjNTI1OQor5YmaID4gesOsOyAjNTI1QQor5YmbID4gZ8SBbmc7ICM1MjVCCivliZwgPiB3xIFuOyAjNTI1Qwor5YmdID4gYsWNOyAjNTI1RAor5YmeID4gasSrOyAjNTI1RQor5YmfID4gZMWrbzsgIzUyNUYKK+WJoCA+IHHDrW5nOyAjNTI2MAor5YmhID4gecSDbjsgIzUyNjEKK+WJoiA+IHpow7pvOyAjNTI2Mgor5YmjID4gamnDoG47ICM1MjYzCivliaQgPiBqw6w7ICM1MjY0CivliaUgPiBixY07ICM1MjY1CivliaYgPiB5xIFuOyAjNTI2Ngor5YmnID4gasO5OyAjNTI2Nwor5YmoID4gaMO5bzsgIzUyNjgKK+WJqSA+IHNow6huZzsgIzUyNjkKK+WJqiA+IGppxINuOyAjNTI2QQor5YmrID4gZMO6bzsgIzUyNkIKK+WJrCA+IGR1xIFuOyAjNTI2Qwor5YmtID4gd8WrOyAjNTI2RAor5YmuID4gZ3XEgzsgIzUyNkUKK+WJryA+IGbDuTsgIzUyNkYKK+WJsCA+IHNow6huZzsgIzUyNzAKK+WJsSA+IGppw6BuOyAjNTI3MQor5YmyID4gZ8STOyAjNTI3Mgor5YmzID4gemjEgTsgIzUyNzMKK+WJtCA+IGvEg2k7ICM1Mjc0CivlibUgPiBjaHXDoG5nOyAjNTI3NQor5Ym2ID4ganXEgW47ICM1Mjc2CivlibcgPiBjaMSDbjsgIzUyNzcKK+WJuCA+IHR1w6FuOyAjNTI3OAor5Ym5ID4gbMO5OyAjNTI3OQor5Ym6ID4gbMOtOyAjNTI3QQor5Ym7ID4gZsOzdTsgIzUyN0IKK+WJvCA+IHNoxIFuOyAjNTI3Qwor5Ym9ID4gcGnDoG87ICM1MjdECivlib4gPiBrxY11OyAjNTI3RQor5Ym/ID4gamnEg287ICM1MjdGCivlioAgPiBndcSBOyAjNTI4MAor5YqBID4gcWnEgW87ICM1MjgxCivlioIgPiBqdcOpOyAjNTI4Mgor5YqDID4gaHXDoDsgIzUyODMKK+WKhCA+IHpow6E7ICM1Mjg0CivlioUgPiB6aMO5bzsgIzUyODUKK+WKhiA+IGxpw6FuOyAjNTI4Ngor5YqHID4gasO5OyAjNTI4Nwor5YqIID4gcMSrOyAjNTI4OAor5YqJID4gbMOtdTsgIzUyODkKK+WKiiA+IGfDuWk7ICM1MjhBCivliosgPiBqacSDbzsgIzUyOEIKK+WKjCA+IGfDuWk7ICM1MjhDCivlio0gPiBqacOgbjsgIzUyOEQKK+WKjiA+IGppw6BuOyAjNTI4RQor5YqPID4gdMSBbmc7ICM1MjhGCivlipAgPiBoxatvOyAjNTI5MAor5YqRID4gasOsOyAjNTI5MQor5YqSID4gamnDoG47ICM1MjkyCivlipMgPiB5w6w7ICM1MjkzCivlipQgPiBqacOgbjsgIzUyOTQKK+WKlSA+IHpow607ICM1Mjk1CivlipYgPiBjaMOhbjsgIzUyOTYKK+WKlyA+IGN1w6FuOyAjNTI5Nwor5YqYID4gbcOzOyAjNTI5OAor5YqZID4gbMOtOyAjNTI5OQor5YqaID4gemjDujsgIzUyOUEKK+WKmyA+IGzDrDsgIzUyOUIKK+WKnCA+IHnEgTsgIzUyOUMKK+WKnSA+IHF1w6BuOyAjNTI5RAor5YqeID4gYsOgbjsgIzUyOUUKK+WKnyA+IGfFjW5nOyAjNTI5Rgor5YqgID4gamnEgTsgIzUyQTAKK+WKoSA+IHfDuTsgIzUyQTEKK+WKoiA+IG3DoGk7ICM1MkEyCivliqMgPiBsacOoOyAjNTJBMwor5YqkID4gasOsbjsgIzUyQTQKK+WKpSA+IGvEk25nOyAjNTJBNQor5YqmID4geGnDqTsgIzUyQTYKK+WKpyA+IHpoxK07ICM1MkE3CivliqggPiBkw7JuZzsgIzUyQTgKK+WKqSA+IHpow7k7ICM1MkE5CivliqogPiBuxa07ICM1MkFBCivliqsgPiBqacOpOyAjNTJBQgor5YqsID4gccO6OyAjNTJBQwor5YqtID4gc2jDoG87ICM1MkFECivliq4gPiB5w6w7ICM1MkFFCivliq8gPiB6aMWrOyAjNTJBRgor5YqwID4gbWnEg287ICM1MkIwCivlirEgPiBsw6w7ICM1MkIxCivlirIgPiBqw6xuZzsgIzUyQjIKK+WKsyA+IGzDoW87ICM1MkIzCivlirQgPiBsw6FvOyAjNTJCNAor5Yq1ID4ganXDoG47ICM1MkI1CivlirYgPiBrxY91OyAjNTJCNgor5Yq3ID4gecOhbmc7ICM1MkI3CivlirggPiB3xIE7ICM1MkI4CivlirkgPiB4acOgbzsgIzUyQjkKK+WKuiA+IG3Ds3U7ICM1MkJBCivlirsgPiBrdcSBbmc7ICM1MkJCCivlirwgPiBqacOpOyAjNTJCQwor5Yq9ID4gbGnDqDsgIzUyQkQKK+WKviA+IGjDqTsgIzUyQkUKK+WKvyA+IHNow6w7ICM1MkJGCivli4AgPiBrw6g7ICM1MkMwCivli4EgPiBqw6xuZzsgIzUyQzEKK+WLgiA+IGjDoW87ICM1MkMyCivli4MgPiBiw7M7ICM1MkMzCivli4QgPiBtxK1uOyAjNTJDNAor5YuFID4gY2jDrDsgIzUyQzUKK+WLhiA+IGzDoW5nOyAjNTJDNgor5YuHID4gecWPbmc7ICM1MkM3Civli4ggPiB5xY9uZzsgIzUyQzgKK+WLiSA+IG1pxINuOyAjNTJDOQor5YuKID4ga8OoOyAjNTJDQQor5YuLID4geMWrbjsgIzUyQ0IKK+WLjCA+IGp1w6BuOyAjNTJDQwor5YuNID4gccOtbmc7ICM1MkNECivli44gPiBsw7k7ICM1MkNFCivli48gPiBwxY91OyAjNTJDRgor5YuQID4gbcSVbmc7ICM1MkQwCivli5EgPiBsw6BpOyAjNTJEMQor5YuSID4gbMOoOyAjNTJEMgor5YuTID4ga8OgaTsgIzUyRDMKK+WLlCA+IG1pxINuOyAjNTJENAor5YuVID4gZMOybmc7ICM1MkQ1Civli5YgPiB4w7k7ICM1MkQ2Civli5cgPiB4w7k7ICM1MkQ3Civli5ggPiBrxIFuOyAjNTJEOAor5YuZID4gd8O5OyAjNTJEOQor5YuaID4gecOsOyAjNTJEQQor5YubID4geMWrbjsgIzUyREIKK+WLnCA+IHfElW5nOyAjNTJEQwor5YudID4gc2jDqG5nOyAjNTJERAor5YueID4gbMOhbzsgIzUyREUKK+WLnyA+IG3DuTsgIzUyREYKK+WLoCA+IGzDuTsgIzUyRTAKK+WLoSA+IHBpw6BvOyAjNTJFMQor5YuiID4gc2jDrDsgIzUyRTIKK+WLoyA+IGrEqzsgIzUyRTMKK+WLpCA+IHHDrW47ICM1MkU0Civli6UgPiBxacSDbmc7ICM1MkU1Civli6YgPiBqacSDbzsgIzUyRTYKK+WLpyA+IHF1w6BuOyAjNTJFNwor5YuoID4gecSDbmc7ICM1MkU4Civli6kgPiB5w6w7ICM1MkU5Civli6ogPiBqdcOpOyAjNTJFQQor5YurID4gZsOhbjsgIzUyRUIKK+WLrCA+IGp1w6BuOyAjNTJFQwor5YutID4gdMOzbmc7ICM1MkVECivli64gPiBqw7k7ICM1MkVFCivli68gPiBkxIFuOyAjNTJFRgor5YuwID4geGnDqTsgIzUyRjAKK+WLsSA+IG3DoGk7ICM1MkYxCivli7IgPiB4xatuOyAjNTJGMgor5YuzID4geMWrbjsgIzUyRjMKK+WLtCA+IGzHnDsgIzUyRjQKK+WLtSA+IGzDrDsgIzUyRjUKK+WLtiA+IGNow6g7ICM1MkY2Civli7cgPiByw6FuZzsgIzUyRjcKK+WLuCA+IHF1w6BuOyAjNTJGOAor5Yu5ID4gYsSBbzsgIzUyRjkKK+WLuiA+IHNow6FvOyAjNTJGQQor5Yu7ID4gecO6bjsgIzUyRkIKK+WLvCA+IGrEq3U7ICM1MkZDCivli70gPiBiw6BvOyAjNTJGRAor5Yu+ID4gZ8WNdTsgIzUyRkUKK+WLvyA+IHfDuTsgIzUyRkYKK+WMgCA+IHnDum47ICM1MzAwCivljIMgPiBnw6BpOyAjNTMwMwor5YyEID4gZ8OgaTsgIzUzMDQKK+WMhSA+IGLEgW87ICM1MzA1CivljIYgPiBjxY1uZzsgIzUzMDYKK+WMiCA+IHjEq29uZzsgIzUzMDgKK+WMiSA+IHDEk25nOyAjNTMwOQor5YyKID4gasO6OyAjNTMwQQor5YyLID4gdMOhbzsgIzUzMEIKK+WMjCA+IGfDqTsgIzUzMEMKK+WMjSA+IHDDujsgIzUzMEQKK+WMjiA+IMOgbjsgIzUzMEUKK+WMjyA+IHDDoW87ICM1MzBGCivljJAgPiBmw7o7ICM1MzEwCivljJEgPiBnxY1uZzsgIzUzMTEKK+WMkiA+IGTDoTsgIzUzMTIKK+WMkyA+IGrDrHU7ICM1MzEzCivljJQgPiBxxKtvbmc7ICM1MzE0CivljJUgPiBixK07ICM1MzE1CivljJYgPiBodcOgOyAjNTMxNgor5YyXID4gYsSVaTsgIzUzMTcKK+WMmCA+IG7Eg287ICM1MzE4CivljJkgPiBjaMOtOyAjNTMxOQor5YyaID4gZsSBbmc7ICM1MzFBCivljJsgPiBqw6x1OyAjNTMxQgor5YycID4gecOtOyAjNTMxQwor5YydID4gesSBOyAjNTMxRAor5YyeID4gamnDoG5nOyAjNTMxRQor5YyfID4ga8Ogbmc7ICM1MzFGCivljKAgPiBqacOgbmc7ICM1MzIwCivljKEgPiBrdcSBbmc7ICM1MzIxCivljKIgPiBoxas7ICM1MzIyCivljKMgPiB4acOhOyAjNTMyMwor5YykID4gccWrOyAjNTMyNAor5YylID4gYmnDoG47ICM1MzI1CivljKYgPiBnxa1pOyAjNTMyNgor5YynID4gcWnDqDsgIzUzMjcKK+WMqCA+IHrEgW5nOyAjNTMyOAor5YypID4ga3XEgW5nOyAjNTMyOQor5YyqID4gZsSVaTsgIzUzMkEKK+WMqyA+IGjFqzsgIzUzMkIKK+WMrCA+IHTDs3U7ICM1MzJDCivljK0gPiBnxa1pOyAjNTMyRAor5YyuID4gZ8O5aTsgIzUzMkUKK+WMryA+IGjDuWk7ICM1MzJGCivljLAgPiBkxIFuOyAjNTMzMAor5YyxID4gZ8O5aTsgIzUzMzEKK+WMsiA+IGxpw6FuOyAjNTMzMgor5YyzID4gbGnDoW47ICM1MzMzCivljLQgPiBzdcSDbjsgIzUzMzQKK+WMtSA+IGTDujsgIzUzMzUKK+WMtiA+IGrDrHU7ICM1MzM2CivljLcgPiBxw7o7ICM1MzM3CivljLggPiB4xK07ICM1MzM4CivljLkgPiBwxK07ICM1MzM5CivljLogPiBxxas7ICM1MzNBCivljLsgPiB5w6w7ICM1MzNCCivljLwgPiBxacOgOyAjNTMzQwor5Yy9ID4gecSDbjsgIzUzM0QKK+WMviA+IGJpxINuOyAjNTMzRQor5Yy/ID4gbsOsOyAjNTMzRgor5Y2AID4gccWrOyAjNTM0MAor5Y2BID4gc2jDrTsgIzUzNDEKK+WNgiA+IHjDrG47ICM1MzQyCivljYMgPiBxacSBbjsgIzUzNDMKK+WNhCA+IG5pw6BuOyAjNTM0NAor5Y2FID4gc8OgOyAjNTM0NQor5Y2GID4gesO6OyAjNTM0Ngor5Y2HID4gc2jEk25nOyAjNTM0Nwor5Y2IID4gd8WtOyAjNTM0OAor5Y2JID4gaMO5aTsgIzUzNDkKK+WNiiA+IGLDoG47ICM1MzRBCivljYsgPiBzaMOsOyAjNTM0Qgor5Y2MID4geMOsOyAjNTM0Qwor5Y2NID4gd8OgbjsgIzUzNEQKK+WNjiA+IGh1w6E7ICM1MzRFCivljY8gPiB4acOpOyAjNTM0Rgor5Y2QID4gd8OgbjsgIzUzNTAKK+WNkSA+IGLEk2k7ICM1MzUxCivljZIgPiB6w7o7ICM1MzUyCivljZMgPiB6aMWrbzsgIzUzNTMKK+WNlCA+IHhpw6k7ICM1MzU0CivljZUgPiBkxIFuOyAjNTM1NQor5Y2WID4gbcOgaTsgIzUzNTYKK+WNlyA+IG7DoW47ICM1MzU3CivljZggPiBkxIFuOyAjNTM1OAor5Y2ZID4gasOtOyAjNTM1OQor5Y2aID4gYsOzOyAjNTM1QQor5Y2bID4gc2h1w6BpOyAjNTM1Qgor5Y2cID4gYsWtOyAjNTM1Qwor5Y2dID4ga3XDoG5nOyAjNTM1RAor5Y2eID4gYmnDoG47ICM1MzVFCivljZ8gPiBixa07ICM1MzVGCivljaAgPiB6aMSBbjsgIzUzNjAKK+WNoSA+IHFpxIM7ICM1MzYxCivljaIgPiBsw7o7ICM1MzYyCivljaMgPiB5xY91OyAjNTM2Mwor5Y2kID4gbMWtOyAjNTM2NAor5Y2lID4geMSrOyAjNTM2NQor5Y2mID4gZ3XDoDsgIzUzNjYKK+WNpyA+IHfDsjsgIzUzNjcKK+WNqCA+IHhpw6g7ICM1MzY4CivljakgPiBqacOpOyAjNTM2OQor5Y2qID4gamnDqTsgIzUzNkEKK+WNqyA+IHfDqGk7ICM1MzZCCivljawgPiDDoW5nOyAjNTM2Qwor5Y2tID4gccOtb25nOyAjNTM2RAor5Y2uID4gemjEqzsgIzUzNkUKK+WNryA+IG3Eg287ICM1MzZGCivljbAgPiB5w6xuOyAjNTM3MAor5Y2xID4gd8STaTsgIzUzNzEKK+WNsiA+IHNow6BvOyAjNTM3Mgor5Y2zID4gasOtOyAjNTM3Mwor5Y20ID4gcXXDqDsgIzUzNzQKK+WNtSA+IGx1xINuOyAjNTM3NQor5Y22ID4gc2jDrDsgIzUzNzYKK+WNtyA+IGp1w6BuOyAjNTM3Nwor5Y24ID4geGnDqDsgIzUzNzgKK+WNuSA+IHjDuTsgIzUzNzkKK+WNuiA+IGrErW47ICM1MzdBCivljbsgPiBxdcOoOyAjNTM3Qgor5Y28ID4gd8O5OyAjNTM3Qwor5Y29ID4gasOtOyAjNTM3RAor5Y2+ID4gw6g7ICM1MzdFCivljb8gPiBxxKtuZzsgIzUzN0YKK+WOgCA+IHjEqzsgIzUzODAKK+WOgiA+IGjDoG47ICM1MzgyCivljoMgPiB6aMSBbjsgIzUzODMKK+WOhCA+IMOoOyAjNTM4NAor5Y6FID4gdMSrbmc7ICM1Mzg1CivljoYgPiBsw6w7ICM1Mzg2CivljocgPiB6aMOpOyAjNTM4Nwor5Y6IID4gaMSDbjsgIzUzODgKK+WOiSA+IGzDrDsgIzUzODkKK+WOiiA+IHnEgzsgIzUzOEEKK+WOiyA+IHnEgTsgIzUzOEIKK+WOjCA+IHnDoG47ICM1MzhDCivljo0gPiBzaMOoOyAjNTM4RAor5Y6OID4gemjErTsgIzUzOEUKK+WOjyA+IHpoxIM7ICM1MzhGCivljpAgPiBww6FuZzsgIzUzOTAKK+WOkiA+IGjDqTsgIzUzOTIKK+WOkyA+IHnDoTsgIzUzOTMKK+WOlCA+IHpow6w7ICM1Mzk0CivljpUgPiBjw6g7ICM1Mzk1CivljpYgPiBww6FuZzsgIzUzOTYKK+WOlyA+IHTDrTsgIzUzOTcKK+WOmCA+IGzDrTsgIzUzOTgKK+WOmSA+IHNow6g7ICM1Mzk5CivljpogPiBow7J1OyAjNTM5QQor5Y6bID4gdMSrbmc7ICM1MzlCCivljpwgPiB6xatpOyAjNTM5Qwor5Y6dID4gY8O5bzsgIzUzOUQKK+WOniA+IGbDqGk7ICM1MzlFCivljp8gPiB5dcOhbjsgIzUzOUYKK+WOoCA+IGPDqDsgIzUzQTAKK+WOoSA+IHl1w6FuOyAjNTNBMQor5Y6iID4geGnEgW5nOyAjNTNBMgor5Y6jID4gecSDbjsgIzUzQTMKK+WOpCA+IGzDrDsgIzUzQTQKK+WOpSA+IGp1w6k7ICM1M0E1CivljqYgPiBzaMOgOyAjNTNBNgor5Y6nID4gZGnEgW47ICM1M0E3CivljqggPiBjaMO6OyAjNTNBOAor5Y6pID4gasOsdTsgIzUzQTkKK+WOqiA+IHHDrW47ICM1M0FBCivljqsgPiDDoW87ICM1M0FCCivljqwgPiBnxa1pOyAjNTNBQwor5Y6tID4gecOgbjsgIzUzQUQKK+WOriA+IHPEqzsgIzUzQUUKK+WOryA+IGzDrDsgIzUzQUYKK+WOsCA+IGNoxINuZzsgIzUzQjAKK+WOsSA+IGzDoW47ICM1M0IxCivljrIgPiBsw6w7ICM1M0IyCivljrMgPiB5w6FuOyAjNTNCMwor5Y60ID4gecSDbjsgIzUzQjQKK+WOtSA+IHl1w6FuOyAjNTNCNQor5Y62ID4gc8SrOyAjNTNCNgor5Y63ID4gZ8WNbmc7ICM1M0I3CivljrggPiBsw61uOyAjNTNCOAor5Y65ID4gccOtdTsgIzUzQjkKK+WOuiA+IHHDuTsgIzUzQkEKK+WOuyA+IHHDuTsgIzUzQkIKK+WOvSA+IGzElWk7ICM1M0JECivljr4gPiBkxas7ICM1M0JFCivljr8gPiB4acOgbjsgIzUzQkYKK+WPgCA+IHpodcSBbjsgIzUzQzAKK+WPgSA+IHPEgW47ICM1M0MxCivlj4IgPiBjxIFuOyAjNTNDMgor5Y+DID4gY8SBbjsgIzUzQzMKK+WPhCA+IGPEgW47ICM1M0M0Civlj4UgPiBjxIFuOyAjNTNDNQor5Y+GID4gw6BpOyAjNTNDNgor5Y+HID4gZMOgaTsgIzUzQzcKK+WPiCA+IHnDsnU7ICM1M0M4Civlj4kgPiBjaGE7ICM1M0M5Civlj4ogPiBqw607ICM1M0NBCivlj4sgPiB5xY91OyAjNTNDQgor5Y+MID4gc2h1xIFuZzsgIzUzQ0MKK+WPjSA+IGbEg247ICM1M0NECivlj44gPiBzaMWNdTsgIzUzQ0UKK+WPjyA+IGd1w6BpOyAjNTNDRgor5Y+QID4gYsOhOyAjNTNEMAor5Y+RID4gZsSBOyAjNTNEMQor5Y+SID4gcsO5bzsgIzUzRDIKK+WPkyA+IHNow6w7ICM1M0QzCivlj5QgPiBzaMWrOyAjNTNENAor5Y+VID4gemjDum87ICM1M0Q1Civlj5YgPiBxxas7ICM1M0Q2Civlj5cgPiBzaMOydTsgIzUzRDcKK+WPmCA+IGJpw6BuOyAjNTNEOAor5Y+ZID4geMO5OyAjNTNEOQor5Y+aID4gamnEgzsgIzUzREEKK+WPmyA+IHDDoG47ICM1M0RCCivlj5wgPiBzxY91OyAjNTNEQwor5Y+dID4gZ8OgbzsgIzUzREQKK+WPniA+IHfDqGk7ICM1M0RFCivlj58gPiBzxY91OyAjNTNERgor5Y+gID4gZGnDqTsgIzUzRTAKK+WPoSA+IHLDuWk7ICM1M0UxCivlj6IgPiBjw7NuZzsgIzUzRTIKK+WPoyA+IGvFj3U7ICM1M0UzCivlj6QgPiBnxa07ICM1M0U0Civlj6UgPiBqw7k7ICM1M0U1Civlj6YgPiBsw6xuZzsgIzUzRTYKK+WPpyA+IGd1xIM7ICM1M0U3Civlj6ggPiB0xIFvOyAjNTNFOAor5Y+pID4ga8OydTsgIzUzRTkKK+WPqiA+IHpoxK07ICM1M0VBCivlj6sgPiBqacOgbzsgIzUzRUIKK+WPrCA+IHpow6BvOyAjNTNFQwor5Y+tID4gYsSBOyAjNTNFRAor5Y+uID4gZMSrbmc7ICM1M0VFCivlj68gPiBrxJU7ICM1M0VGCivlj7AgPiB0w6FpOyAjNTNGMAor5Y+xID4gY2jDrDsgIzUzRjEKK+WPsiA+IHNoxK07ICM1M0YyCivlj7MgPiB5w7J1OyAjNTNGMwor5Y+0ID4gccOtdTsgIzUzRjQKK+WPtSA+IHDFjzsgIzUzRjUKK+WPtiA+IHhpw6k7ICM1M0Y2Civlj7cgPiBow6BvOyAjNTNGNwor5Y+4ID4gc8SrOyAjNTNGOAor5Y+5ID4gdMOgbjsgIzUzRjkKK+WPuiA+IGNoxK07ICM1M0ZBCivlj7sgPiBsw6g7ICM1M0ZCCivlj7wgPiBkacSBbzsgIzUzRkMKK+WPvSA+IGrEqzsgIzUzRkQKK+WPvyA+IGjFjW5nOyAjNTNGRgor5ZCAID4gbWnEkzsgIzU0MDAKK+WQgSA+IHjFqzsgIzU0MDEKK+WQgiA+IG3DoW5nOyAjNTQwMgor5ZCDID4gY2jEqzsgIzU0MDMKK+WQhCA+IGfDqDsgIzU0MDQKK+WQhSA+IHh1xIFuOyAjNTQwNQor5ZCGID4gecSBbzsgIzU0MDYKK+WQhyA+IHrErTsgIzU0MDcKK+WQiCA+IGjDqTsgIzU0MDgKK+WQiSA+IGrDrTsgIzU0MDkKK+WQiiA+IGRpw6BvOyAjNTQwQQor5ZCLID4gY8O5bjsgIzU0MEIKK+WQjCA+IHTDs25nOyAjNTQwQwor5ZCNID4gbcOtbmc7ICM1NDBECivlkI4gPiBow7J1OyAjNTQwRQor5ZCPID4gbMOsOyAjNTQwRgor5ZCQID4gdMWtOyAjNTQxMAor5ZCRID4geGnDoG5nOyAjNTQxMQor5ZCSID4gemjDoDsgIzU0MTIKK+WQkyA+IHhpw6A7ICM1NDEzCivlkJQgPiB5xJU7ICM1NDE0CivlkJUgPiBsx5o7ICM1NDE1CivlkJYgPiDEgTsgIzU0MTYKK+WQlyA+IG1hOyAjNTQxNwor5ZCYID4gxY91OyAjNTQxOAor5ZCZID4geHXEkzsgIzU0MTkKK+WQmiA+IHnEqzsgIzU0MUEKK+WQmyA+IGrFq247ICM1NDFCCivlkJwgPiBjaMWPdTsgIzU0MUMKK+WQnSA+IGzDrG47ICM1NDFECivlkJ4gPiB0xatuOyAjNTQxRQor5ZCfID4gecOtbjsgIzU0MUYKK+WQoCA+IGbDqGk7ICM1NDIwCivlkKEgPiBixK07ICM1NDIxCivlkKIgPiBxw6xuOyAjNTQyMgor5ZCjID4gccOsbjsgIzU0MjMKK+WQpCA+IGppw6g7ICM1NDI0CivlkKUgPiBiw7k7ICM1NDI1CivlkKYgPiBmxY91OyAjNTQyNgor5ZCnID4gYmE7ICM1NDI3CivlkKggPiBkxatuOyAjNTQyOAor5ZCpID4gZsSTbjsgIzU0MjkKK+WQqiA+IMOpOyAjNTQyQQor5ZCrID4gaMOhbjsgIzU0MkIKK+WQrCA+IHTEq25nOyAjNTQyQwor5ZCtID4gaMOhbmc7ICM1NDJECivlkK4gPiBzaMWtbjsgIzU0MkUKK+WQryA+IHHErTsgIzU0MkYKK+WQsCA+IGjDs25nOyAjNTQzMAor5ZCxID4gemjEqzsgIzU0MzEKK+WQsiA+IHNoxJVuOyAjNTQzMgor5ZCzID4gd8O6OyAjNTQzMwor5ZC0ID4gd8O6OyAjNTQzNAor5ZC1ID4gY2jEg287ICM1NDM1CivlkLYgPiBuw6g7ICM1NDM2CivlkLcgPiB4dcOoOyAjNTQzNwor5ZC4ID4geMSrOyAjNTQzOAor5ZC5ID4gY2jFq2k7ICM1NDM5CivlkLogPiBkxY11OyAjNTQzQQor5ZC7ID4gd8SVbjsgIzU0M0IKK+WQvCA+IGjFj3U7ICM1NDNDCivlkL0gPiDDs3U7ICM1NDNECivlkL4gPiB3w7o7ICM1NDNFCivlkL8gPiBnw6BvOyAjNTQzRgor5ZGAID4gecSBOyAjNTQ0MAor5ZGBID4gasO5bjsgIzU0NDEKK+WRgiA+IGzHmjsgIzU0NDIKK+WRgyA+IMOoOyAjNTQ0Mwor5ZGEID4gZ8OpOyAjNTQ0NAor5ZGFID4gbcOpaTsgIzU0NDUKK+WRhiA+IMOhaTsgIzU0NDYKK+WRhyA+IHHErTsgIzU0NDcKK+WRiCA+IGNow6luZzsgIzU0NDgKK+WRiSA+IHfDujsgIzU0NDkKK+WRiiA+IGfDoG87ICM1NDRBCivlkYsgPiBmxas7ICM1NDRCCivlkYwgPiBqacOgbzsgIzU0NEMKK+WRjSA+IGjFjW5nOyAjNTQ0RAor5ZGOID4gY2jErTsgIzU0NEUKK+WRjyA+IHNoxJNuZzsgIzU0NEYKK+WRkCA+IG7DqDsgIzU0NTAKK+WRkSA+IHTFq247ICM1NDUxCivlkZIgPiBmxa07ICM1NDUyCivlkZMgPiB5w6w7ICM1NDUzCivlkZQgPiBkxIFpOyAjNTQ1NAor5ZGVID4gxY11OyAjNTQ1NQor5ZGWID4gbMOsOyAjNTQ1Ngor5ZGXID4gYsOgaTsgIzU0NTcKK+WRmCA+IHl1w6FuOyAjNTQ1OAor5ZGZID4ga3XEgWk7ICM1NDU5CivlkZsgPiBxacSBbmc7ICM1NDVCCivlkZwgPiB3xas7ICM1NDVDCivlkZ0gPiDDqDsgIzU0NUQKK+WRniA+IHNoxKs7ICM1NDVFCivlkZ8gPiBxdcSDbjsgIzU0NUYKK+WRoCA+IHDEk247ICM1NDYwCivlkaEgPiB3xJVuOyAjNTQ2MQor5ZGiID4gbsOtOyAjNTQ2Mgor5ZGjID4gbcyBOyAjNTQ2Mwor5ZGkID4gbMStbmc7ICM1NDY0CivlkaUgPiByxINuOyAjNTQ2NQor5ZGmID4gecWNdTsgIzU0NjYKK+WRpyA+IGTErTsgIzU0NjcKK+WRqCA+IHpoxY11OyAjNTQ2OAor5ZGpID4gc2jDrDsgIzU0NjkKK+WRqiA+IHpow7J1OyAjNTQ2QQor5ZGrID4gdGnEkzsgIzU0NkIKK+WRrCA+IHjDrDsgIzU0NkMKK+WRrSA+IHnDrDsgIzU0NkQKK+WRriA+IHHDrDsgIzU0NkUKK+WRryA+IHDDrW5nOyAjNTQ2Rgor5ZGwID4gesStOyAjNTQ3MAor5ZGxID4gZ8WrOyAjNTQ3MQor5ZGyID4gesSrOyAjNTQ3Mgor5ZGzID4gd8OoaTsgIzU0NzMKK+WRtCA+IHjFqzsgIzU0NzQKK+WRtSA+IGjEkzsgIzU0NzUKK+WRtiA+IG7DoW87ICM1NDc2CivlkbcgPiB4acSBOyAjNTQ3Nwor5ZG4ID4gcMSTaTsgIzU0NzgKK+WRuSA+IHnDrDsgIzU0NzkKK+WRuiA+IHhpxIFvOyAjNTQ3QQor5ZG7ID4gc2jEk247ICM1NDdCCivlkbwgPiBoxas7ICM1NDdDCivlkb0gPiBtw6xuZzsgIzU0N0QKK+WRviA+IGTDoTsgIzU0N0UKK+WRvyA+IHHFqzsgIzU0N0YKK+WSgCA+IGrFrTsgIzU0ODAKK+WSgSA+IGfDqG07ICM1NDgxCivlkoIgPiB6xIE7ICM1NDgyCivlkoMgPiB0xatvOyAjNTQ4Mwor5ZKEID4gZMWrbzsgIzU0ODQKK+WShSA+IHDDsnU7ICM1NDg1CivlkoYgPiBww6FvOyAjNTQ4Ngor5ZKHID4gYsOsOyAjNTQ4Nwor5ZKIID4gZsO6OyAjNTQ4OAor5ZKJID4gecSBbmc7ICM1NDg5CivlkoogPiBow6k7ICM1NDhBCivlkosgPiB6aMOgOyAjNTQ4Qgor5ZKMID4gaMOpOyAjNTQ4Qwor5ZKNID4gaMSBaTsgIzU0OEQKK+WSjiA+IGrDrHU7ICM1NDhFCivlko8gPiB5xY9uZzsgIzU0OEYKK+WSkCA+IGbDuTsgIzU0OTAKK+WSkSA+IHF1w6g7ICM1NDkxCivlkpIgPiB6aMOydTsgIzU0OTIKK+WSkyA+IHfEgzsgIzU0OTMKK+WSlCA+IGvEgzsgIzU0OTQKK+WSlSA+IGfFqzsgIzU0OTUKK+WSliA+IGvEgTsgIzU0OTYKK+WSlyA+IHrFrW87ICM1NDk3CivlkpggPiBiw7k7ICM1NDk4CivlkpkgPiBsw7NuZzsgIzU0OTkKK+WSmiA+IGTFjW5nOyAjNTQ5QQor5ZKbID4gbsOtbmc7ICM1NDlCCivlkp0gPiBzxKs7ICM1NDlECivlkp4gPiB4acOgbjsgIzU0OUUKK+WSnyA+IGjDuW87ICM1NDlGCivlkqAgPiBxw6w7ICM1NEEwCivlkqEgPiDDqHI7ICM1NEExCivlkqIgPiDDqDsgIzU0QTIKK+WSoyA+IGd1xIFuZzsgIzU0QTMKK+WSpCA+IHpow6A7ICM1NEE0CivlkqUgPiB4w6w7ICM1NEE1CivlkqYgPiB5w607ICM1NEE2CivlkqcgPiBsacSVOyAjNTRBNwor5ZKoID4gesSrOyAjNTRBOAor5ZKpID4gbWnEkzsgIzU0QTkKK+WSqiA+IG3EqzsgIzU0QUEKK+WSqyA+IHpoxK07ICM1NEFCCivlkqwgPiB5xINvOyAjNTRBQwor5ZKtID4gasSrOyAjNTRBRAor5ZKuID4gemjDsnU7ICM1NEFFCivlkq8gPiBnxJM7ICM1NEFGCivlkrAgPiBzaHXDoGk7ICM1NEIwCivlkrEgPiB6w6FuOyAjNTRCMQor5ZKyID4geGnDoG87ICM1NEIyCivlkrMgPiBrw6k7ICM1NEIzCivlkrQgPiBoxatpOyAjNTRCNAor5ZK1ID4ga3XEgTsgIzU0QjUKK+WStiA+IGh1w6BpOyAjNTRCNgor5ZK3ID4gdMOhbzsgIzU0QjcKK+WSuCA+IHhpw6FuOyAjNTRCOAor5ZK5ID4gw6g7ICM1NEI5CivlkrogPiB4dcSBbjsgIzU0QkEKK+WSuyA+IHjEq3U7ICM1NEJCCivlkrwgPiB3xIFpOyAjNTRCQwor5ZK9ID4gecSBbjsgIzU0QkQKK+WSviA+IGzEg287ICM1NEJFCivlkr8gPiB5xKs7ICM1NEJGCivlk4AgPiDEgWk7ICM1NEMwCivlk4EgPiBwxK1uOyAjNTRDMQor5ZOCID4gc2jElW47ICM1NEMyCivlk4MgPiB0w7NuZzsgIzU0QzMKK+WThCA+IGjFjW5nOyAjNTRDNAor5ZOFID4geMSrb25nOyAjNTRDNQor5ZOGID4gY2jErTsgIzU0QzYKK+WThyA+IHfEgTsgIzU0QzcKK+WTiCA+IGjEgTsgIzU0QzgKK+WTiSA+IHrEgWk7ICM1NEM5Civlk4ogPiB5w7k7ICM1NENBCivlk4sgPiBkw6w7ICM1NENCCivlk4wgPiBww6BpOyAjNTRDQwor5ZONID4geGnEg25nOyAjNTRDRAor5ZOOID4gxIFpOyAjNTRDRQor5ZOPID4gaMSVbjsgIzU0Q0YKK+WTkCA+IGt1xIFuZzsgIzU0RDAKK+WTkSA+IHnEgzsgIzU0RDEKK+WTkiA+IGTEgTsgIzU0RDIKK+WTkyA+IHhpxIFvOyAjNTREMwor5ZOUID4gYsOsOyAjNTRENAor5ZOVID4geXXElTsgIzU0RDUKK+WTlyA+IGh1xIE7ICM1NEQ3Civlk5kgPiBrdcOgaTsgIzU0RDkKK+WTmiA+IGTFrW87ICM1NERBCivlk5wgPiBqw6w7ICM1NERDCivlk50gPiBuw7NuZzsgIzU0REQKK+WTniA+IG3FjXU7ICM1NERFCivlk58gPiB5bzsgIzU0REYKK+WToCA+IGjDoG87ICM1NEUwCivlk6EgPiB5dcOhbjsgIzU0RTEKK+WToiA+IGzDsm5nOyAjNTRFMgor5ZOjID4gcMWPdTsgIzU0RTMKK+WTpCA+IG3DoW5nOyAjNTRFNAor5ZOlID4gZ8STOyAjNTRFNQor5ZOmID4gw6k7ICM1NEU2Civlk6cgPiBjaMSrOyAjNTRFNwor5ZOoID4gc2jDoG87ICM1NEU4Civlk6kgPiBsxKs7ICM1NEU5Civlk6ogPiBuxIM7ICM1NEVBCivlk6sgPiB6w7o7ICM1NEVCCivlk6wgPiBow6k7ICM1NEVDCivlk60gPiBrxas7ICM1NEVECivlk64gPiB4acSBbzsgIzU0RUUKK+WTryA+IHhpw6BuOyAjNTRFRgor5ZOwID4gbMOhbzsgIzU0RjAKK+WTsSA+IGLFjTsgIzU0RjEKK+WTsiA+IHpow6k7ICM1NEYyCivlk7MgPiB6aMSBOyAjNTRGMwor5ZO0ID4gbGnDoG5nOyAjNTRGNAor5ZO1ID4gYsSBOyAjNTRGNQor5ZO2ID4gbWnEkzsgIzU0RjYKK+WTtyA+IGzDqDsgIzU0RjcKK+WTuCA+IHPFq2k7ICM1NEY4Civlk7kgPiBmw7N1OyAjNTRGOQor5ZO6ID4gYsWtOyAjNTRGQQor5ZO7ID4gaMOgbjsgIzU0RkIKK+WTvCA+IGjEk25nOyAjNTRGQwor5ZO9ID4gZ8SVbmc7ICM1NEZECivlk74gPiBzaMWrbzsgIzU0RkUKK+WTvyA+IGfElTsgIzU0RkYKK+WUgCA+IHnFj3U7ICM1NTAwCivllIEgPiB5w6BuOyAjNTUwMQor5ZSCID4gZ8WtOyAjNTUwMgor5ZSDID4gZ8WtOyAjNTUwMwor5ZSEID4gYsOgaTsgIzU1MDQKK+WUhSA+IGjEgW47ICM1NTA1CivllIYgPiBzxatvOyAjNTUwNgor5ZSHID4gY2jDum47ICM1NTA3CivllIggPiB5w6w7ICM1NTA4CivllIkgPiDEgWk7ICM1NTA5CivllIogPiBqacOhOyAjNTUwQQor5ZSLID4gdMWtOyAjNTUwQgor5ZSMID4geGnDoW47ICM1NTBDCivllI0gPiBodcSDbjsgIzU1MEQKK+WUjiA+IGzEqzsgIzU1MEUKK+WUjyA+IHjEqzsgIzU1MEYKK+WUkCA+IHTDoW5nOyAjNTUxMAor5ZSRID4gesO5bzsgIzU1MTEKK+WUkiA+IHHDrXU7ICM1NTEyCivllJMgPiBjaMSTOyAjNTUxMwor5ZSUID4gd8O6OyAjNTUxNAor5ZSVID4gesOgbzsgIzU1MTUKK+WUliA+IHnEgzsgIzU1MTYKK+WUlyA+IGTFjXU7ICM1NTE3CivllJggPiBxxK07ICM1NTE4CivllJkgPiBkw607ICM1NTE5CivllJogPiBxw6xuOyAjNTUxQQor5ZSbID4gbcOgOyAjNTUxQgor5ZSdID4gaMWPbmc7ICM1NTFECivllJ4gPiBkxY91OyAjNTUxRQor5ZSgID4gbMOhbzsgIzU1MjAKK+WUoSA+IGxpxINuZzsgIzU1MjEKK+WUoiA+IHPFrW87ICM1NTIyCivllKMgPiB6w6BvOyAjNTUyMwor5ZSkID4gaHXDoG47ICM1NTI0CivllKYgPiBzaMSBOyAjNTUyNgor5ZSnID4gasSrOyAjNTUyNwor5ZSoID4gesWtbzsgIzU1MjgKK+WUqSA+IHfFjTsgIzU1MjkKK+WUqiA+IGbElW5nOyAjNTUyQQor5ZSrID4gecOtbjsgIzU1MkIKK+WUrCA+IGjFrTsgIzU1MkMKK+WUrSA+IHHEqzsgIzU1MkQKK+WUriA+IHNow7J1OyAjNTUyRQor5ZSvID4gd8OpaTsgIzU1MkYKK+WUsCA+IHNodcSBOyAjNTUzMAor5ZSxID4gY2jDoG5nOyAjNTUzMQor5ZSyID4gw6lyOyAjNTUzMgor5ZSzID4gbMOsOyAjNTUzMwor5ZS0ID4gcWnDoG5nOyAjNTUzNAor5ZS1ID4gxINuOyAjNTUzNQor5ZS2ID4gamnDqDsgIzU1MzYKK+WUtyA+IHnFjTsgIzU1MzcKK+WUuCA+IG5pw6BuOyAjNTUzOAor5ZS5ID4gecWrOyAjNTUzOQor5ZS6ID4gdGnEg247ICM1NTNBCivllLsgPiBsxINpOyAjNTUzQgor5ZS8ID4gc2jDoDsgIzU1M0MKK+WUvSA+IHjEqzsgIzU1M0QKK+WUviA+IHTDuW87ICM1NTNFCivllL8gPiBoxas7ICM1NTNGCivllYAgPiDDoWk7ICM1NTQwCivllYEgPiB6aMWNdTsgIzU1NDEKK+WVgiA+IG7DsnU7ICM1NTQyCivllYMgPiBrxJVuOyAjNTU0Mwor5ZWEID4gemjDum87ICM1NTQ0CivllYUgPiB6aMO6bzsgIzU1NDUKK+WVhiA+IHNoxIFuZzsgIzU1NDYKK+WVhyA+IGTDrTsgIzU1NDcKK+WViCA+IGjDqG5nOyAjNTU0OAor5ZWJID4gbMOhbjsgIzU1NDkKK+WViiA+IGE7ICM1NTRBCivllYsgPiB4acSBbzsgIzU1NEIKK+WVjCA+IHhpxIFuZzsgIzU1NEMKK+WVjSA+IHTFq247ICM1NTRECivllY4gPiB3xa07ICM1NTRFCivllY8gPiB3w6huOyAjNTU0Rgor5ZWQID4gY8O5aTsgIzU1NTAKK+WVkSA+IHNow6A7ICM1NTUxCivllZIgPiBoxas7ICM1NTUyCivllZMgPiBxxK07ICM1NTUzCivllZQgPiBxxK07ICM1NTU0CivllZUgPiB0w6FvOyAjNTU1NQor5ZWWID4gZMOgbjsgIzU1NTYKK+WVlyA+IGTDoG47ICM1NTU3CivllZggPiB5w6g7ICM1NTU4CivllZkgPiB6xK07ICM1NTU5CivllZogPiBixK07ICM1NTVBCivllZsgPiBjw7lpOyAjNTU1Qgor5ZWcID4gY2jDuW87ICM1NTVDCivllZ0gPiBow6k7ICM1NTVECivllZ4gPiB5xIM7ICM1NTVFCivllZ8gPiBxxK07ICM1NTVGCivllaAgPiB6aMOpOyAjNTU2MAor5ZWhID4gcMSTaTsgIzU1NjEKK+WVoiA+IGxpxINuZzsgIzU1NjIKK+WVoyA+IHhpw6FuOyAjNTU2Mwor5ZWkID4gcMOtOyAjNTU2NAor5ZWlID4gc2jDoDsgIzU1NjUKK+WVpiA+IGxhOyAjNTU2Ngor5ZWnID4gesOpOyAjNTU2Nwor5ZWoID4gccSrbmc7ICM1NTY4CivllakgPiBndcOgOyAjNTU2OQor5ZWqID4gcMSBOyAjNTU2QQor5ZWrID4gemjElTsgIzU1NkIKK+WVrCA+IHPDqDsgIzU1NkMKK+WVrSA+IHpodcOgbjsgIzU1NkQKK+WVriA+IG5pw6g7ICM1NTZFCivlla8gPiBndW87ICM1NTZGCivllbAgPiBsxatvOyAjNTU3MAor5ZWxID4gecSBbjsgIzU1NzEKK+WVsiA+IGTDrDsgIzU1NzIKK+WVsyA+IHF1w6FuOyAjNTU3Mwor5ZW0ID4gdMSBbjsgIzU1NzQKK+WVtSA+IGJvOyAjNTU3NQor5ZW2ID4gZMOsbmc7ICM1NTc2CivllbcgPiBsxIFuZzsgIzU1NzcKK+WVuCA+IHhpw6BvOyAjNTU3OAor5ZW6ID4gdMOhbmc7ICM1NTdBCivllbsgPiBjaMOsOyAjNTU3Qgor5ZW8ID4gdMOtOyAjNTU3Qwor5ZW9ID4gw6FuOyAjNTU3RAor5ZW+ID4gasSrdTsgIzU1N0UKK+WVvyA+IGTDoG47ICM1NTdGCivlloAgPiBrw6g7ICM1NTgwCivlloEgPiB5w7NuZzsgIzU1ODEKK+WWgiA+IHfDqGk7ICM1NTgyCivlloMgPiBuw6FuOyAjNTU4Mwor5ZaEID4gc2jDoG47ICM1NTg0CivlloUgPiB5w7k7ICM1NTg1CivlloYgPiB6aMOpOyAjNTU4Ngor5ZaHID4gbMSDOyAjNTU4Nwor5ZaIID4gamnEkzsgIzU1ODgKK+WWiSA+IGjDs3U7ICM1NTg5CivlloogPiBoxINuOyAjNTU4QQor5ZaLID4gZGnDqTsgIzU1OEIKK+WWjCA+IHpoxY11OyAjNTU4Qwor5ZaNID4gY2jDoWk7ICM1NThECivllo4gPiB3xIFpOyAjNTU4RQor5ZaPID4gcsSVOyAjNTU4Rgor5ZaQID4gecO5OyAjNTU5MAor5ZaRID4gecSrbjsgIzU1OTEKK+WWkiA+IHrDoW47ICM1NTkyCivllpMgPiB5xIFvOyAjNTU5Mwor5ZaUID4gd8WNOyAjNTU5NAor5ZaVID4gbWnEg247ICM1NTk1CivllpYgPiBow7o7ICM1NTk2CivllpcgPiB5xa1uOyAjNTU5Nwor5ZaYID4gY2h1xINuOyAjNTU5OAor5ZaZID4gaMO5aTsgIzU1OTkKK+WWmiA+IGh1w6BuOyAjNTU5QQor5ZabID4gaHXDoG47ICM1NTlCCivllpwgPiB4xK07ICM1NTlDCivllp0gPiBoxJM7ICM1NTlECivllp4gPiBqxKs7ICM1NTlFCivllp8gPiBrw7lpOyAjNTU5Rgor5ZagID4gemjFj25nOyAjNTVBMAor5ZahID4gd8SVaTsgIzU1QTEKK+WWoiA+IHNow6A7ICM1NUEyCivllqMgPiB4xa07ICM1NUEzCivllqQgPiBodcOhbmc7ICM1NUE0CivllqUgPiBkw7k7ICM1NUE1CivllqYgPiBuacOoOyAjNTVBNgor5ZanID4gMXh1xIFuOyAjNTVBNwor5ZaoID4gbGnDoG5nOyAjNTVBOAor5ZapID4gecO5OyAjNTVBOQor5ZaqID4gc8SBbmc7ICM1NUFBCivllqsgPiBjaMSrOyAjNTVBQgor5ZasID4gcWnDoW87ICM1NUFDCivllq0gPiB5w6BuOyAjNTVBRAor5ZauID4gZMSBbjsgIzU1QUUKK+WWryA+IHDEk247ICM1NUFGCivllrAgPiBjxIFuOyAjNTVCMAor5ZaxID4gbMOtOyAjNTVCMQor5ZayID4geW87ICM1NUIyCivllrMgPiB6aMSBOyAjNTVCMwor5Za0ID4gd8STaTsgIzU1QjQKK+WWtSA+IG1pxIFvOyAjNTVCNQor5Za2ID4gecOtbmc7ICM1NUI2CivllrcgPiBwxJNuOyAjNTVCNwor5Za5ID4ga8O6aTsgIzU1QjkKK+WWuiA+IHjDrDsgIzU1QkEKK+WWuyA+IHnDuTsgIzU1QkIKK+WWvCA+IGppw6k7ICM1NUJDCivllr0gPiBsb3U7ICM1NUJECivllr4gPiBrw7k7ICM1NUJFCivllr8gPiBzw6BvOyAjNTVCRgor5ZeAID4gaMO5bzsgIzU1QzAKK+WXgSA+IHTDrTsgIzU1QzEKK+WXgiA+IHnDoW87ICM1NUMyCivll4MgPiBow6g7ICM1NUMzCivll4QgPiDDoTsgIzU1QzQKK+WXhSA+IHjDrHU7ICM1NUM1Civll4YgPiBxacSBbmc7ICM1NUM2Civll4cgPiBzw6g7ICM1NUM3Civll4ggPiB5xY1uZzsgIzU1QzgKK+WXiSA+IHPDuTsgIzU1QzkKK+WXiiA+IGjFj25nOyAjNTVDQQor5ZeLID4geGnDqTsgIzU1Q0IKK+WXjCA+IHnDrDsgIzU1Q0MKK+WXjSA+IHPFq287ICM1NUNECivll44gPiBtYTsgIzU1Q0UKK+WXjyA+IGNoxIE7ICM1NUNGCivll5AgPiBow6BpOyAjNTVEMAor5ZeRID4ga8OoOyAjNTVEMQor5ZeSID4gdMOgOyAjNTVEMgor5ZeTID4gc8SDbmc7ICM1NUQzCivll5QgPiB0acOhbjsgIzU1RDQKK+WXlSA+IHLDuTsgIzU1RDUKK+WXliA+IHPFjXU7ICM1NUQ2Civll5cgPiB3xIE7ICM1NUQ3Civll5ggPiBqxKs7ICM1NUQ4Civll5kgPiBwxINuZzsgIzU1RDkKK+WXmiA+IHfFqzsgIzU1REEKK+WXmyA+IHhpw6FuOyAjNTVEQgor5ZecID4gc2jDrDsgIzU1REMKK+WXnSA+IGfDqTsgIzU1REQKK+WXniA+IHrEqzsgIzU1REUKK+WXnyA+IGppxJM7ICM1NURGCivll6AgPiBsw7lvOyAjNTVFMAor5ZehID4gd8STbmc7ICM1NUUxCivll6IgPiB3w6A7ICM1NUUyCivll6MgPiBzw6w7ICM1NUUzCivll6QgPiBjaMSrOyAjNTVFNAor5ZelID4gaMOhbzsgIzU1RTUKK+WXpiA+IHPFq287ICM1NUU2Civll6cgPiBqacSBJyAnbMO6bjsgIzU1RTcKK+WXqCA+IGjEg2k7ICM1NUU4Civll6kgPiBzxa1vOyAjNTVFOQor5ZeqID4gccOtbjsgIzU1RUEKK+WXqyA+IG5pw6g7ICM1NUVCCivll6wgPiBoxJM7ICM1NUVDCivll64gPiBzw6BpOyAjNTVFRQor5ZevID4gbsyAZzsgIzU1RUYKK+WXsCA+IGfDqDsgIzU1RjAKK+WXsSA+IG7DoTsgIzU1RjEKK+WXsiA+IGRpxIM7ICM1NUYyCivll7MgPiDDoGk7ICM1NUYzCivll7UgPiB0xY1uZzsgIzU1RjUKK+WXtiA+IGLDrDsgIzU1RjYKK+WXtyA+IMOhbzsgIzU1RjcKK+WXuCA+IMOhbzsgIzU1RjgKK+WXuSA+IGxpw6FuOyAjNTVGOQor5Ze6ID4gY8WraTsgIzU1RkEKK+WXuyA+IHpoxJM7ICM1NUZCCivll7wgPiBtw7I7ICM1NUZDCivll70gPiBzw7J1OyAjNTVGRAor5Ze+ID4gc8WPdTsgIzU1RkUKK+WXvyA+IHTEg247ICM1NUZGCivlmIAgPiBkw607ICM1NjAwCivlmIEgPiBxxKs7ICM1NjAxCivlmIIgPiBqacOgbzsgIzU2MDIKK+WYgyA+IGNoxY1uZzsgIzU2MDMKK+WYhCA+IGppxIFvOyAjNTYwNAor5ZiFID4ga8SDaTsgIzU2MDUKK+WYhiA+IHTDoG47ICM1NjA2CivlmIcgPiBzxIFuOyAjNTYwNwor5ZiIID4gY8OhbzsgIzU2MDgKK+WYiSA+IGppxIE7ICM1NjA5CivlmIogPiDDoWk7ICM1NjBBCivlmIsgPiB4acSBbzsgIzU2MEIKK+WYjCA+IHBpxIFvOyAjNTYwQwor5ZiNID4gbG91OyAjNTYwRAor5ZiOID4gZ8SBOyAjNTYwRQor5ZiPID4gZ8WtOyAjNTYwRgor5ZiQID4geGnEgW87ICM1NjEwCivlmJEgPiBoxas7ICM1NjExCivlmJIgPiBow7lpOyAjNTYxMgor5ZiTID4gZ3VvOyAjNTYxMwor5ZiUID4gxY11OyAjNTYxNAor5ZiVID4geGnEgW47ICM1NjE1CivlmJYgPiB6w6k7ICM1NjE2CivlmJcgPiBjaMOhbmc7ICM1NjE3CivlmJggPiB4xas7ICM1NjE4CivlmJkgPiBww7M7ICM1NjE5CivlmJogPiBkw6k7ICM1NjFBCivlmJsgPiBtYTsgIzU2MUIKK+WYnCA+IG3DoDsgIzU2MUMKK+WYnSA+IGjDujsgIzU2MUQKK+WYniA+IGxlaTsgIzU2MUUKK+WYnyA+IGTFqzsgIzU2MUYKK+WYoCA+IGfEgTsgIzU2MjAKK+WYoSA+IHTEgW5nOyAjNTYyMQor5ZiiID4gecSVOyAjNTYyMgor5ZijID4gYsSTbmc7ICM1NjIzCivlmKQgPiB5xKtuZzsgIzU2MjQKK+WYpiA+IGppw6BvOyAjNTYyNgor5ZinID4gbcSrOyAjNTYyNwor5ZioID4geGnDoG87ICM1NjI4CivlmKkgPiBodcSBOyAjNTYyOQor5ZiqID4gbcSDaTsgIzU2MkEKK+WYqyA+IHLDoW47ICM1NjJCCivlmKwgPiB6xatvOyAjNTYyQwor5ZitID4gcMSTbmc7ICM1NjJECivlmK4gPiBsw6FvOyAjNTYyRQor5ZivID4geGnDoG87ICM1NjJGCivlmLAgPiBqxKs7ICM1NjMwCivlmLEgPiB6aMWtOyAjNTYzMQor5ZiyID4gY2jDoW87ICM1NjMyCivlmLMgPiBrw7lpOyAjNTYzMwor5Zi0ID4gesWtaTsgIzU2MzQKK+WYtSA+IHhpxIFvOyAjNTYzNQor5Zi2ID4gc8SrOyAjNTYzNgor5Zi3ID4gaMOhbzsgIzU2MzcKK+WYuCA+IGbFrTsgIzU2MzgKK+WYuSA+IGxpw6FvOyAjNTYzOQor5Zi6ID4gcWnDoW87ICM1NjNBCivlmLsgPiB4xKs7ICM1NjNCCivlmLwgPiB4w6x1OyAjNTYzQwor5Zi9ID4gdMSBbjsgIzU2M0QKK+WYviA+IHTDoW47ICM1NjNFCivlmL8gPiBtw7I7ICM1NjNGCivlmYAgPiB4w7luOyAjNTY0MAor5ZmBID4gxJU7ICM1NjQxCivlmYIgPiB6xa1uOyAjNTY0Mgor5ZmDID4gZsSBbjsgIzU2NDMKK+WZhCA+IGNoxKs7ICM1NjQ0CivlmYUgPiBoxatpOyAjNTY0NQor5ZmGID4gesSDbjsgIzU2NDYKK+WZhyA+IGNodcOhbmc7ICM1NjQ3CivlmYggPiBjw7k7ICM1NjQ4CivlmYkgPiBkw6BuOyAjNTY0OQor5ZmKID4gecO5OyAjNTY0QQor5ZmLID4gdMWrbjsgIzU2NEIKK+WZjCA+IGNoxJNuZzsgIzU2NEMKK+WZjSA+IGppw6BvOyAjNTY0RAor5ZmOID4gecSTOyAjNTY0RQor5ZmPID4geMSrOyAjNTY0Rgor5ZmQID4gccOsOyAjNTY1MAor5ZmRID4gaMOhbzsgIzU2NTEKK+WZkiA+IGxpw6FuOyAjNTY1Mgor5ZmTID4geMWrOyAjNTY1Mwor5ZmUID4gZMSTbmc7ICM1NjU0CivlmZUgPiBoxatpOyAjNTY1NQor5ZmWID4gecOtbjsgIzU2NTYKK+WZlyA+IHDFqzsgIzU2NTcKK+WZmCA+IGp1xJM7ICM1NjU4CivlmZkgPiBxw61uOyAjNTY1OQor5ZmaID4geMO6bjsgIzU2NUEKK+WZmyA+IG5pw6g7ICM1NjVCCivlmZwgPiBsxas7ICM1NjVDCivlmZ0gPiBzxKs7ICM1NjVECivlmZ4gPiB5xINuOyAjNTY1RQor5ZmfID4gecOsbmc7ICM1NjVGCivlmaAgPiBkxIE7ICM1NjYwCivlmaEgPiBkxIFuOyAjNTY2MQor5ZmiID4gecWtOyAjNTY2Mgor5ZmjID4gemjDsnU7ICM1NjYzCivlmaQgPiBqw6xuOyAjNTY2NAor5ZmlID4gbsOzbmc7ICM1NjY1CivlmaYgPiB5dcSVOyAjNTY2Ngor5ZmnID4gaMO5aTsgIzU2NjcKK+WZqCA+IHHDrDsgIzU2NjgKK+WZqSA+IMOoOyAjNTY2OQor5ZmqID4gesOgbzsgIzU2NkEKK+WZqyA+IHnEqzsgIzU2NkIKK+WZrCA+IHNow6w7ICM1NjZDCivlma0gPiBqacOgbzsgIzU2NkQKK+WZriA+IHl1xIFuOyAjNTY2RQor5ZmvID4gw6BpOyAjNTY2Rgor5ZmwID4gecWNbmc7ICM1NjcwCivlmbEgPiBqdcOpOyAjNTY3MQor5ZmyID4ga3XDoGk7ICM1NjcyCivlmbMgPiB5xa07ICM1NjczCivlmbQgPiBwxJNuOyAjNTY3NAor5Zm1ID4gZMOgbzsgIzU2NzUKK+WZtiA+IGfDqTsgIzU2NzYKK+WZtyA+IHjEq247ICM1Njc3CivlmbggPiBkxatuOyAjNTY3OAor5Zm5ID4gZMSBbmc7ICM1Njc5CivlmbsgPiBzYWk7ICM1NjdCCivlmbwgPiBwxKs7ICM1NjdDCivlmb0gPiBwxK07ICM1NjdECivlmb4gPiB5xKtuOyAjNTY3RQor5Zm/ID4gesWtaTsgIzU2N0YKK+WagCA+IG7DrW5nOyAjNTY4MAor5ZqBID4gZMOtOyAjNTY4MQor5ZqCID4gbMOgbjsgIzU2ODIKK+WagyA+IHTEgTsgIzU2ODMKK+WahCA+IGjDuW87ICM1Njg0CivlmoUgPiByw7o7ICM1Njg1CivlmoYgPiBoxIFvOyAjNTY4Ngor5ZqHID4geGnDoDsgIzU2ODcKK+WaiCA+IHnDoDsgIzU2ODgKK+WaiSA+IGTFq287ICM1Njg5CivlmoogPiB4w6w7ICM1NjhBCivlmosgPiBjaMOzdTsgIzU2OEIKK+WajCA+IGrDrDsgIzU2OEMKK+WajSA+IGrDrG47ICM1NjhECivlmo4gPiBow6FvOyAjNTY4RQor5ZqPID4gdMOsOyAjNTY4Rgor5ZqQID4gY2jDoW5nOyAjNTY5MAor5ZqTID4gY8SBOyAjNTY5Mwor5ZqUID4gdMOsOyAjNTY5NAor5ZqVID4gbMWrOyAjNTY5NQor5ZqWID4gaMO5aTsgIzU2OTYKK+WalyA+IGLDszsgIzU2OTcKK+WamCA+IHnFjXU7ICM1Njk4CivlmpkgPiBuacOoOyAjNTY5OQor5ZqaID4gecOtbjsgIzU2OUEKK+WamyA+IGjDuTsgIzU2OUIKK+WanCA+IG3DsjsgIzU2OUMKK+WanSA+IGh1xIFuZzsgIzU2OUQKK+WaniA+IHpow6k7ICM1NjlFCivlmp8gPiBsw607ICM1NjlGCivlmqAgPiBsw611OyAjNTZBMAor5ZqiID4gbsOhbmc7ICM1NkEyCivlmqMgPiB4acSBbzsgIzU2QTMKK+WapCA+IG3DszsgIzU2QTQKK+WapSA+IHnDoG47ICM1NkE1CivlmqYgPiBsw6w7ICM1NkE2CivlmqcgPiBsw7o7ICM1NkE3CivlmqggPiBsw7NuZzsgIzU2QTgKK+WaqSA+IGbDujsgIzU2QTkKK+WaqiA+IGTDoG47ICM1NkFBCivlmqsgPiBjaMOobjsgIzU2QUIKK+WarCA+IHDDrW47ICM1NkFDCivlmq0gPiBwxK07ICM1NkFECivlmq4gPiB4acOgbmc7ICM1NkFFCivlmq8gPiBow7lvOyAjNTZBRgor5ZqwID4gbcOzOyAjNTZCMAor5ZqxID4geMOsOyAjNTZCMQor5ZqyID4gZMWtbzsgIzU2QjIKK+WasyA+IGvDuTsgIzU2QjMKK+WatCA+IHnDoW47ICM1NkI0CivlmrUgPiBjaMOhbjsgIzU2QjUKK+WatiA+IHnEq25nOyAjNTZCNgor5Zq3ID4gcsSDbmc7ICM1NkI3CivlmrggPiBkacSDbjsgIzU2QjgKK+WauSA+IGzEgTsgIzU2QjkKK+WauiA+IHTDoDsgIzU2QkEKK+WauyA+IHhpxIFvOyAjNTZCQgor5Zq8ID4gamnDoW87ICM1NkJDCivlmr0gPiBjaMO5bzsgIzU2QkQKK+WaviA+IGh1xIFuOyAjNTZCRQor5Zq/ID4gaMO5bzsgIzU2QkYKK+WbgCA+IHpodcOgbjsgIzU2QzAKK+WbgSA+IG5pw6g7ICM1NkMxCivlm4IgPiB4acSBbzsgIzU2QzIKK+WbgyA+IGPDoDsgIzU2QzMKK+WbhCA+IGzDrTsgIzU2QzQKK+WbhSA+IGNoxINuOyAjNTZDNQor5ZuGID4gY2jDoGk7ICM1NkM2Civlm4cgPiBsw6w7ICM1NkM3Civlm4ggPiB5w6w7ICM1NkM4Civlm4kgPiBsxatvOyAjNTZDOQor5ZuKID4gbsOhbmc7ICM1NkNBCivlm4sgPiB6w6BuOyAjNTZDQgor5ZuMID4gc8WrOyAjNTZDQwor5ZuNID4geMStOyAjNTZDRAor5ZuPID4gamnEgW47ICM1NkNGCivlm5AgPiB6w6E7ICM1NkQwCivlm5EgPiB6aMWtOyAjNTZEMQor5ZuSID4gbMOhbjsgIzU2RDIKK+WbkyA+IG5pw6g7ICM1NkQzCivlm5QgPiBuxIFuZzsgIzU2RDQKK+WblyA+IHfDqWk7ICM1NkQ3Civlm5ggPiBow7ppOyAjNTZEOAor5ZuZID4gecSrbjsgIzU2RDkKK+WbmiA+IHHDrXU7ICM1NkRBCivlm5sgPiBzw6w7ICM1NkRCCivlm5wgPiBuw61uOyAjNTZEQwor5ZudID4gamnEg247ICM1NkRECivlm54gPiBow7ppOyAjNTZERQor5ZufID4geMOsbjsgIzU2REYKK+WboCA+IHnEq247ICM1NkUwCivlm6EgPiBuxIFuOyAjNTZFMQor5ZuiID4gdHXDoW47ICM1NkUyCivlm6MgPiB0dcOhbjsgIzU2RTMKK+WbpCA+IGTDuW47ICM1NkU0Civlm6UgPiBrw6BuZzsgIzU2RTUKK+WbpiA+IHl1xIFuOyAjNTZFNgor5ZunID4gasStb25nOyAjNTZFNwor5ZuoID4gcGnEgW47ICM1NkU4Civlm6kgPiB5w7luOyAjNTZFOQor5ZuqID4gY8WNbmc7ICM1NkVBCivlm6sgPiBow7o7ICM1NkVCCivlm6wgPiBow7ppOyAjNTZFQwor5ZutID4geXXDoW47ICM1NkVECivlm64gPiB5w7N1OyAjNTZFRQor5ZuvID4gZ8O6bzsgIzU2RUYKK+WbsCA+IGvDuW47ICM1NkYwCivlm7EgPiBjxY1uZzsgIzU2RjEKK+WbsiA+IHfDqWk7ICM1NkYyCivlm7MgPiB0w7o7ICM1NkYzCivlm7QgPiB3w6lpOyAjNTZGNAor5Zu1ID4gbMO6bjsgIzU2RjUKK+WbtiA+IGfDum87ICM1NkY2Civlm7cgPiBxxatuOyAjNTZGNwor5Zu4ID4gcsOsOyAjNTZGOAor5Zu5ID4gbMOtbmc7ICM1NkY5Civlm7ogPiBnw7k7ICM1NkZBCivlm7sgPiBnw7pvOyAjNTZGQgor5Zu8ID4gdMSBaTsgIzU2RkMKK+WbvSA+IGfDum87ICM1NkZECivlm74gPiB0w7o7ICM1NkZFCivlm78gPiB5w7J1OyAjNTZGRgor5ZyAID4gZ8O6bzsgIzU3MDAKK+WcgSA+IHnDrW47ICM1NzAxCivlnIIgPiBow7luOyAjNTcwMgor5ZyDID4gcMWtOyAjNTcwMwor5ZyEID4gecWtOyAjNTcwNAor5ZyFID4gaMOhbjsgIzU3MDUKK+WchiA+IHl1w6FuOyAjNTcwNgor5ZyHID4gbMO6bjsgIzU3MDcKK+WciCA+IHF1xIFuOyAjNTcwOAor5ZyJID4gecWtOyAjNTcwOQor5ZyKID4gccSrbmc7ICM1NzBBCivlnIsgPiBnw7pvOyAjNTcwQgor5ZyMID4gY2h1w6FuOyAjNTcwQwor5ZyNID4gd8OpaTsgIzU3MEQKK+WcjiA+IHl1w6FuOyAjNTcwRQor5ZyPID4gcXXEgW47ICM1NzBGCivlnJAgPiBrxas7ICM1NzEwCivlnJEgPiBmw7k7ICM1NzExCivlnJIgPiB5dcOhbjsgIzU3MTIKK+WckyA+IHl1w6FuOyAjNTcxMwor5ZyUID4gw6g7ICM1NzE0CivlnJUgPiB0w7onICdzaMWrJyAnZ3XEg247ICM1NzE1CivlnJYgPiB0w7o7ICM1NzE2CivlnJcgPiB0w7o7ICM1NzE3CivlnJggPiB0dcOhbjsgIzU3MTgKK+WcmSA+IGzHnGU7ICM1NzE5CivlnJogPiBow7lpOyAjNTcxQQor5ZybID4gecOsOyAjNTcxQgor5ZycID4geXXDoW47ICM1NzFDCivlnJ0gPiBsdcOhbjsgIzU3MUQKK+WcniA+IGx1w6FuOyAjNTcxRQor5ZyfID4gdMWtOyAjNTcxRgor5ZygID4gecOgOyAjNTcyMAor5ZyhID4gdMWtOyAjNTcyMQor5ZyiID4gdMSrbmc7ICM1NzIyCivlnKMgPiBzaMOobmc7ICM1NzIzCivlnKQgPiBwxa07ICM1NzI0CivlnKUgPiBsw7k7ICM1NzI1CivlnKcgPiB5xIE7ICM1NzI3CivlnKggPiB6w6BpOyAjNTcyOAor5ZypID4gd8OpaTsgIzU3MjkKK+WcqiA+IGfEkzsgIzU3MkEKK+WcqyA+IHnDuTsgIzU3MkIKK+WcrCA+IHfFqzsgIzU3MkMKK+WcrSA+IGfFq2k7ICM1NzJECivlnK4gPiBwxK07ICM1NzJFCivlnK8gPiB5w607ICM1NzJGCivlnLAgPiBkw6w7ICM1NzMwCivlnLEgPiBxacSBbjsgIzU3MzEKK+WcsiA+IHFpxIFuOyAjNTczMgor5ZyzID4gemjDqG47ICM1NzMzCivlnLQgPiB6aMO6bzsgIzU3MzQKK+WctSA+IGTDoG5nOyAjNTczNQor5Zy2ID4gcWnDoDsgIzU3MzYKK+WcuSA+IGt1w6BuZzsgIzU3MzkKK+WcuiA+IGNow6FuZzsgIzU3M0EKK+WcuyA+IHHDrTsgIzU3M0IKK+WcvCA+IG5pw6g7ICM1NzNDCivlnL0gPiBtw7I7ICM1NzNECivlnL4gPiBqw607ICM1NzNFCivlnL8gPiBqacOhOyAjNTczRgor5Z2AID4gemjErTsgIzU3NDAKK+WdgSA+IHpoxK07ICM1NzQxCivlnYIgPiBixINuOyAjNTc0Mgor5Z2DID4geMWrbjsgIzU3NDMKK+WdhCA+IHTDs3U7ICM1NzQ0CivlnYUgPiBxxK1uOyAjNTc0NQor5Z2GID4gZsOpbjsgIzU3NDYKK+WdhyA+IGrFq247ICM1NzQ3CivlnYggPiBrxJNuZzsgIzU3NDgKK+WdiSA+IHTDum47ICM1NzQ5CivlnYogPiBmxIFuZzsgIzU3NEEKK+WdiyA+IGbDqG47ICM1NzRCCivlnYwgPiBiw6huOyAjNTc0Qwor5Z2NID4gdMSBbjsgIzU3NEQKK+WdjiA+IGvEg247ICM1NzRFCivlnY8gPiBwxKs7ICM1NzRGCivlnZAgPiB6w7lvOyAjNTc1MAor5Z2RID4ga8STbmc7ICM1NzUxCivlnZIgPiBiw6w7ICM1NzUyCivlnZMgPiB4w61uZzsgIzU3NTMKK+WdlCA+IGTDrDsgIzU3NTQKK+WdlSA+IGrEq25nOyAjNTc1NQor5Z2WID4gasOsOyAjNTc1Ngor5Z2XID4ga3XDoGk7ICM1NzU3CivlnZggPiBkxK07ICM1NzU4CivlnZkgPiBqxKtuZzsgIzU3NTkKK+WdmiA+IGppxIFuOyAjNTc1QQor5Z2bID4gdMOhbjsgIzU3NUIKK+WdnCA+IGzDrDsgIzU3NUMKK+WdnSA+IGLDoDsgIzU3NUQKK+WdniA+IHfDuTsgIzU3NUUKK+WdnyA+IGbDqW47ICM1NzVGCivlnaAgPiB6aMO5aTsgIzU3NjAKK+WdoSA+IHDFjTsgIzU3NjEKK+WdoiA+IHDEg247ICM1NzYyCivlnaMgPiB0xIFuZzsgIzU3NjMKK+WdpCA+IGvFq247ICM1NzY0CivlnaUgPiBxxas7ICM1NzY1CivlnaYgPiB0xINuOyAjNTc2Ngor5Z2nID4gemjEqzsgIzU3NjcKK+WdqCA+IHTDum87ICM1NzY4CivlnakgPiBnxIFuOyAjNTc2OQor5Z2qID4gcMOtbmc7ICM1NzZBCivlnasgPiBkacOgbjsgIzU3NkIKK+WdrCA+IGd1w6A7ICM1NzZDCivlna0gPiBuw607ICM1NzZECivlna4gPiB0w6FpOyAjNTc2RQor5Z2vID4gcMSrOyAjNTc2Rgor5Z2wID4gasSrb25nOyAjNTc3MAor5Z2xID4gecSDbmc7ICM1NzcxCivlnbIgPiBmw7M7ICM1NzcyCivlnbMgPiDDoG87ICM1NzczCivlnbQgPiBsw6x1OyAjNTc3NAor5Z21ID4gccSrdTsgIzU3NzUKK+WdtiA+IG3DuTsgIzU3NzYKK+WdtyA+IGvElTsgIzU3NzcKK+WduCA+IGfDsnU7ICM1Nzc4CivlnbkgPiB4dcOoOyAjNTc3OQor5Z26ID4gYsOhOyAjNTc3QQor5Z27ID4gY2jDrTsgIzU3N0IKK+WdvCA+IGNow6g7ICM1NzdDCivlnb0gPiBsw61uZzsgIzU3N0QKK+WdviA+IHpow7k7ICM1NzdFCivlnb8gPiBmw7k7ICM1NzdGCivlnoAgPiBoxas7ICM1NzgwCivlnoEgPiB6aMOsOyAjNTc4MQor5Z6CID4gY2jDumk7ICM1NzgyCivlnoMgPiBsxIE7ICM1NzgzCivlnoQgPiBsxY9uZzsgIzU3ODQKK+WehSA+IGzFj25nOyAjNTc4NQor5Z6GID4gbMO6OyAjNTc4Ngor5Z6HID4gw6BvOyAjNTc4Nwor5Z6JID4gcMOhbzsgIzU3ODkKK+WeiyA+IHjDrW5nOyAjNTc4Qgor5Z6MID4gZMOybmc7ICM1NzhDCivlno0gPiBqw6w7ICM1NzhECivlno4gPiBrw6g7ICM1NzhFCivlno8gPiBsw7k7ICM1NzhGCivlnpAgPiBjw607ICM1NzkwCivlnpEgPiBjaMStOyAjNTc5MQor5Z6SID4gbMSVaTsgIzU3OTIKK+WekyA+IGfEgWk7ICM1NzkzCivlnpQgPiB5xKtuOyAjNTc5NAor5Z6VID4gaMOydTsgIzU3OTUKK+WeliA+IGTFq2k7ICM1Nzk2CivlnpcgPiB6aMOgbzsgIzU3OTcKK+WemCA+IGbDujsgIzU3OTgKK+WemSA+IGd1xIFuZzsgIzU3OTkKK+WemiA+IHnDoW87ICM1NzlBCivlnpsgPiBkxa1vOyAjNTc5Qgor5Z6cID4gZMWtbzsgIzU3OUMKK+WenSA+IGfFrWk7ICM1NzlECivlnp4gPiBjaMOhOyAjNTc5RQor5Z6fID4gecOhbmc7ICM1NzlGCivlnqAgPiB5w61uOyAjNTdBMAor5Z6hID4gZsOhOyAjNTdBMQor5Z6iID4gZ8OydTsgIzU3QTIKK+WeoyA+IHl1w6FuOyAjNTdBMwor5Z6kID4gZGnDqTsgIzU3QTQKK+WepSA+IHhpw6k7ICM1N0E1CivlnqYgPiBrxJVuOyAjNTdBNgor5Z6nID4gasSrb25nOyAjNTdBNwor5Z6oID4gc2jFj3U7ICM1N0E4CivlnqkgPiDDqDsgIzU3QTkKK+WeqyA+IGRpw6BuOyAjNTdBQgor5Z6sID4gaMOzbmc7ICM1N0FDCivlnq0gPiB3w7k7ICM1N0FECivlnq4gPiBrdcSDOyAjNTdBRQor5Z6xID4gZMOgbmc7ICM1N0IxCivlnrIgPiBrxINpOyAjNTdCMgor5Z60ID4gbsSDbzsgIzU3QjQKK+WetSA+IMSDbjsgIzU3QjUKK+WetiA+IHjEq25nOyAjNTdCNgor5Z63ID4geGnDoG47ICM1N0I3CivlnrggPiBodcOgbjsgIzU3QjgKK+WeuSA+IGLEgW5nOyAjNTdCOQor5Z66ID4gcMSTaTsgIzU3QkEKK+WeuyA+IGLDoDsgIzU3QkIKK+WevCA+IHnDrDsgIzU3QkMKK+WevSA+IHnDrG47ICM1N0JECivlnr4gPiBow6BuOyAjNTdCRQor5Z6/ID4geMO5OyAjNTdCRgor5Z+AID4gY2jDumk7ICM1N0MwCivln4EgPiBjw6luOyAjNTdDMQor5Z+CID4gZ8SVbmc7ICM1N0MyCivln4MgPiDEgWk7ICM1N0MzCivln4QgPiBww6luZzsgIzU3QzQKK+WfhSA+IGbDoW5nOyAjNTdDNQor5Z+GID4gcXXDqDsgIzU3QzYKK+WfhyA+IHnFj25nOyAjNTdDNwor5Z+IID4geMO5bjsgIzU3QzgKK+WfiSA+IGppw6E7ICM1N0M5Civln4ogPiBkw6w7ICM1N0NBCivln4sgPiBtw6FpOyAjNTdDQgor5Z+MID4gbMOgbmc7ICM1N0NDCivln40gPiB4dcOgbjsgIzU3Q0QKK+WfjiA+IGNow6luZzsgIzU3Q0UKK+WfjyA+IHnDoW47ICM1N0NGCivln5AgPiBqxKtuOyAjNTdEMAor5Z+RID4gemjDqTsgIzU3RDEKK+WfkiA+IGzDqGk7ICM1N0QyCivln5MgPiBsacOoOyAjNTdEMwor5Z+UID4gYsO5OyAjNTdENAor5Z+VID4gY2jDqW5nOyAjNTdENQor5Z+XID4gYsO5OyAjNTdENwor5Z+YID4gc2jDrTsgIzU3RDgKK+WfmSA+IHjFq247ICM1N0Q5Civln5ogPiBnxatvOyAjNTdEQQor5Z+bID4gasSrb25nOyAjNTdEQgor5Z+cID4gecSVOyAjNTdEQwor5Z+dID4gbmnDoG47ICM1N0RECivln54gPiBkxK07ICM1N0RFCivln58gPiB5w7k7ICM1N0RGCivln6AgPiBiw7k7ICM1N0UwCivln6EgPiB5w6A7ICM1N0UxCivln6IgPiBqdcSDbjsgIzU3RTIKK+WfoyA+IHPDuWk7ICM1N0UzCivln6QgPiBww607ICM1N0U0Civln6UgPiBjaMSTbmc7ICM1N0U1Civln6YgPiB3xINuOyAjNTdFNgor5Z+nID4gasO5OyAjNTdFNwor5Z+oID4gbMWtbjsgIzU3RTgKK+WfqSA+IHpoxJNuZzsgIzU3RTkKK+WfqiA+IGvFjW5nOyAjNTdFQQor5Z+rID4gY2jFj25nOyAjNTdFQgor5Z+sID4gZMWNbmc7ICM1N0VDCivln60gPiBkw6BpOyAjNTdFRAor5Z+uID4gdMOgbjsgIzU3RUUKK+WfryA+IMSDbjsgIzU3RUYKK+WfsCA+IGPDoGk7ICM1N0YwCivln7EgPiBzaMO6OyAjNTdGMQor5Z+yID4gYsSVbmc7ICM1N0YyCivln7MgPiBrxINuOyAjNTdGMwor5Z+0ID4gemjDrTsgIzU3RjQKK+WftSA+IGTFrW87ICM1N0Y1Civln7YgPiB5w6w7ICM1N0Y2Civln7cgPiB6aMOtOyAjNTdGNwor5Z+4ID4gecOsOyAjNTdGOAor5Z+5ID4gcMOpaTsgIzU3RjkKK+WfuiA+IGrEqzsgIzU3RkEKK+WfuyA+IHpoxa1uOyAjNTdGQgor5Z+8ID4gccOtOyAjNTdGQwor5Z+9ID4gc8OgbzsgIzU3RkQKK+WfviA+IGrDuTsgIzU3RkUKK+WfvyA+IG7DrTsgIzU3RkYKK+WggCA+IGvFqzsgIzU4MDAKK+WggSA+IGvDqDsgIzU4MDEKK+WggiA+IHTDoW5nOyAjNTgwMgor5aCDID4ga8WrbjsgIzU4MDMKK+WghCA+IG7DrDsgIzU4MDQKK+WghSA+IGppxIFuOyAjNTgwNQor5aCGID4gZMWraTsgIzU4MDYKK+WghyA+IGrErW47ICM1ODA3CivloIggPiBnxIFuZzsgIzU4MDgKK+WgiSA+IHnDuTsgIzU4MDkKK+WgiiA+IMOoOyAjNTgwQQor5aCLID4gcMOpbmc7ICM1ODBCCivloIwgPiBnw7k7ICM1ODBDCivloI0gPiB0w7k7ICM1ODBECivloI4gPiBsw6huZzsgIzU4MEUKK+WgkCA+IHnDoTsgIzU4MTAKK+WgkSA+IHFpw6BuOyAjNTgxMQor5aCTID4gw6BuOyAjNTgxMwor5aCVID4gZMO5bzsgIzU4MTUKK+WgliA+IG7Eg287ICM1ODE2CivloJcgPiB0xas7ICM1ODE3CivloJggPiBjaMOpbmc7ICM1ODE4CivloJkgPiB5xKtuOyAjNTgxOQor5aCaID4gaMO6bjsgIzU4MUEKK+WgmyA+IGLDrDsgIzU4MUIKK+WgnCA+IGxpw6BuOyAjNTgxQwor5aCdID4gZ8WrbzsgIzU4MUQKK+WgniA+IGRpw6k7ICM1ODFFCivloJ8gPiB6aHXDoG47ICM1ODFGCivloKAgPiBow7J1OyAjNTgyMAor5aChID4gYsSDbzsgIzU4MjEKK+WgoiA+IGLEg287ICM1ODIyCivloKMgPiB5w7o7ICM1ODIzCivloKQgPiBkxKs7ICM1ODI0CivloKUgPiBtw6FvOyAjNTgyNQor5aCmID4gamnEkzsgIzU4MjYKK+WgpyA+IHJ1w6FuOyAjNTgyNwor5aCoID4gw6g7ICM1ODI4CivloKkgPiBnw6huZzsgIzU4MjkKK+WgqiA+IGvEgW47ICM1ODJBCivloKsgPiB6xY1uZzsgIzU4MkIKK+WgrCA+IHnDujsgIzU4MkMKK+WgrSA+IGh1w6FuZzsgIzU4MkQKK+WgriA+IMOoOyAjNTgyRQor5aCvID4gecOhbzsgIzU4MkYKK+WgsCA+IHnDoG47ICM1ODMwCivloLEgPiBiw6BvOyAjNTgzMQor5aCyID4gasOtOyAjNTgzMgor5aCzID4gbcOpaTsgIzU4MzMKK+WgtCA+IGNow6FuZzsgIzU4MzQKK+WgtSA+IGTFrTsgIzU4MzUKK+WgtiA+IHTDum87ICM1ODM2CivloLcgPiB5w6xuOyAjNTgzNwor5aC4ID4gZsOpbmc7ICM1ODM4CivloLkgPiB6aMOybmc7ICM1ODM5CivloLogPiBqacOoOyAjNTgzQQor5aC7ID4gemjEk247ICM1ODNCCivloLwgPiBmxJNuZzsgIzU4M0MKK+WgvSA+IGfEgW5nOyAjNTgzRAor5aC+ID4gY2h1xINuOyAjNTgzRQor5aC/ID4gamnEg247ICM1ODNGCivloYIgPiB4acOgbmc7ICM1ODQyCivloYMgPiBodcSBbmc7ICM1ODQzCivloYQgPiBsw6luZzsgIzU4NDQKK+WhhSA+IGR1w6BuOyAjNTg0NQor5aGHID4geHXEgW47ICM1ODQ3CivloYggPiBqw6w7ICM1ODQ4CivloYkgPiBqw607ICM1ODQ5CivloYogPiBrdcOgaTsgIzU4NEEKK+WhiyA+IHnDrW5nOyAjNTg0Qgor5aGMID4gdMSBOyAjNTg0Qwor5aGNID4gY2jDqW5nOyAjNTg0RAor5aGOID4gecWPbmc7ICM1ODRFCivloY8gPiBrxINpOyAjNTg0Rgor5aGQID4gc8O5OyAjNTg1MAor5aGRID4gc8O5OyAjNTg1MQor5aGSID4gc2jDrTsgIzU4NTIKK+WhkyA+IG3DrDsgIzU4NTMKK+WhlCA+IHTEgzsgIzU4NTQKK+WhlSA+IHfElW5nOyAjNTg1NQor5aGWID4gY2jDqW5nOyAjNTg1Ngor5aGXID4gdMO6OyAjNTg1Nwor5aGYID4gdMOhbmc7ICM1ODU4CivloZkgPiBxdcOoOyAjNTg1OQor5aGaID4gemjFj25nOyAjNTg1QQor5aGbID4gbMOsOyAjNTg1Qgor5aGcID4gcMOpbmc7ICM1ODVDCivloZ0gPiBiw6BuZzsgIzU4NUQKK+WhniA+IHPEgWk7ICM1ODVFCivloZ8gPiB6w6BuZzsgIzU4NUYKK+WhoCA+IGTFq2k7ICM1ODYwCivloaEgPiB0acOhbjsgIzU4NjEKK+WhoiA+IHfDuTsgIzU4NjIKK+WhoyA+IGNoxJVuZzsgIzU4NjMKK+WhpCA+IHjFq247ICM1ODY0CivloaUgPiBnw6k7ICM1ODY1CivloaYgPiB6aMOobjsgIzU4NjYKK+WhpyA+IMOgaTsgIzU4NjcKK+WhqCA+IGfFjW5nOyAjNTg2OAor5aGpID4gecOhbjsgIzU4NjkKK+WhqiA+IGvEg247ICM1ODZBCivloasgPiB0acOhbjsgIzU4NkIKK+WhrCA+IHl1w6FuOyAjNTg2Qwor5aGtID4gd8STbjsgIzU4NkQKK+WhriA+IHhpw6g7ICM1ODZFCivloa8gPiBsw6x1OyAjNTg2Rgor5aGxID4gbMSDbmc7ICM1ODcxCivlobIgPiBjaMOhbmc7ICM1ODcyCivlobMgPiBww6luZzsgIzU4NzMKK+WhtCA+IGLDqG5nOyAjNTg3NAor5aG1ID4gY2jDqW47ICM1ODc1CivlobYgPiBjw7k7ICM1ODc2CivlobcgPiBsxa07ICM1ODc3CivlobggPiDFj3U7ICM1ODc4CivlobkgPiBxacOgbjsgIzU4NzkKK+WhuiA+IG3DqWk7ICM1ODdBCivlobsgPiBtw7I7ICM1ODdCCivlobwgPiB6aHXEgW47ICM1ODdDCivlob0gPiBzaHXEg25nOyAjNTg3RAor5aG+ID4gc2jDujsgIzU4N0UKK+WhvyA+IGzFj3U7ICM1ODdGCivlooAgPiBjaMOtOyAjNTg4MAor5aKBID4gbcOgbjsgIzU4ODEKK+WigiA+IGJpxIFvOyAjNTg4Mgor5aKDID4gasOsbmc7ICM1ODgzCivlooQgPiBxxKs7ICM1ODg0CivlooUgPiBzaMO5OyAjNTg4NQor5aKGID4gZMOsOyAjNTg4Ngor5aKHID4gemjEgW5nOyAjNTg4Nwor5aKIID4ga8OgbjsgIzU4ODgKK+WiiSA+IHnFjW5nOyAjNTg4OQor5aKKID4gZGnDoG47ICM1ODhBCivloosgPiBjaMSVbjsgIzU4OEIKK+WijCA+IHpoxKs7ICM1ODhDCivloo0gPiB4w6w7ICM1ODhECivloo4gPiBnxatvOyAjNTg4RQor5aKPID4gcWnEg25nOyAjNTg4Rgor5aKQID4gasOsbjsgIzU4OTAKK+WikSA+IGTEqzsgIzU4OTEKK+WikiA+IHNoxIFuZzsgIzU4OTIKK+WikyA+IG3DuTsgIzU4OTMKK+WilCA+IGPFq2k7ICM1ODk0CivlopUgPiB5w6BuOyAjNTg5NQor5aKWID4gdMSDOyAjNTg5Ngor5aKXID4gesSTbmc7ICM1ODk3CivlopggPiBxw607ICM1ODk4CivlopkgPiBxacOhbmc7ICM1ODk5CivlopogPiBsacOhbmc7ICM1ODlBCivlopwgPiB6aMO5aTsgIzU4OUMKK+WinSA+IHFpxIFvOyAjNTg5RAor5aKeID4gesSTbmc7ICM1ODlFCivlop8gPiB4xas7ICM1ODlGCivloqAgPiBzaMOgbjsgIzU4QTAKK+WioSA+IHNow6BuOyAjNThBMQor5aKiID4gYsOhOyAjNThBMgor5aKjID4gcMWrOyAjNThBMwor5aKkID4ga3XDoGk7ICM1OEE0CivloqUgPiBkxY9uZzsgIzU4QTUKK+WipiA+IGbDoW47ICM1OEE2CivloqcgPiBxdcOoOyAjNThBNwor5aKoID4gbcOyOyAjNThBOAor5aKpID4gZMWrbjsgIzU4QTkKK+WiqiA+IGTFq247ICM1OEFBCivloqsgPiBkxatuOyAjNThBQgor5aKsID4gZMOsOyAjNThBQwor5aKtID4gc2jDqG5nOyAjNThBRAor5aKuID4gZMO5bzsgIzU4QUUKK+WiryA+IGTDuW87ICM1OEFGCivlorAgPiB0w6FuOyAjNThCMAor5aKxID4gZMOobmc7ICM1OEIxCivlorIgPiB3xa07ICM1OEIyCivlorMgPiBmw6luOyAjNThCMwor5aK0ID4gaHXDoW5nOyAjNThCNAor5aK1ID4gdMOhbjsgIzU4QjUKK+WitiA+IGTEgTsgIzU4QjYKK+WityA+IHnDqDsgIzU4QjcKK+WiuiA+IHnDuTsgIzU4QkEKK+WiuyA+IHFpw6FuZzsgIzU4QkIKK+WivCA+IGrEqzsgIzU4QkMKK+WivSA+IHFpxIFvOyAjNThCRAor5aK+ID4ga8SVbjsgIzU4QkUKK+WivyA+IHnDrDsgIzU4QkYKK+WjgCA+IHDDrTsgIzU4QzAKK+WjgSA+IGLDrDsgIzU4QzEKK+WjgiA+IGRpw6BuOyAjNThDMgor5aODID4gamnEgW5nOyAjNThDMwor5aOEID4gecSVOyAjNThDNAor5aOFID4gecWNbmc7ICM1OEM1Civlo4YgPiBiw7M7ICM1OEM2Civlo4cgPiB0w6FuOyAjNThDNwor5aOIID4gbMSDbjsgIzU4QzgKK+WjiSA+IGrDuTsgIzU4QzkKK+WjiiA+IGh1w6BpOyAjNThDQQor5aOLID4gZMOgbmc7ICM1OENCCivlo4wgPiByxINuZzsgIzU4Q0MKK+WjjSA+IHFpw6BuOyAjNThDRAor5aOOID4geMWrbjsgIzU4Q0UKK+WjjyA+IGzDoG47ICM1OENGCivlo5AgPiB4xK07ICM1OEQwCivlo5EgPiBow6g7ICM1OEQxCivlo5IgPiDDoGk7ICM1OEQyCivlo5MgPiB5xIE7ICM1OEQzCivlo5QgPiBkxINvOyAjNThENAor5aOVID4gaMOhbzsgIzU4RDUKK+WjliA+IHJ1w6FuOyAjNThENgor5aOYID4gbMSVaTsgIzU4RDgKK+WjmSA+IGt1w6BuZzsgIzU4RDkKK+WjmiA+IGzDujsgIzU4REEKK+WjmyA+IHnDoW47ICM1OERCCivlo5wgPiB0w6FuOyAjNThEQwor5aOdID4gd8OpaTsgIzU4REQKK+WjniA+IGh1w6BpOyAjNThERQor5aOfID4gbMWPbmc7ICM1OERGCivlo6AgPiBsxY9uZzsgIzU4RTAKK+WjoSA+IHLDuWk7ICM1OEUxCivlo6IgPiBsw6w7ICM1OEUyCivlo6MgPiBsw61uOyAjNThFMwor5aOkID4gcsSDbmc7ICM1OEU0Civlo6YgPiB4xatuOyAjNThFNgor5aOnID4gecOhbjsgIzU4RTcKK+WjqCA+IGzDqWk7ICM1OEU4Civlo6kgPiBiw6A7ICM1OEU5Civlo6sgPiBzaMOsOyAjNThFQgor5aOsID4gcsOpbjsgIzU4RUMKK+WjriA+IHpodcOgbmc7ICM1OEVFCivlo68gPiB6aHXDoG5nOyAjNThFRgor5aOwID4gc2jEk25nOyAjNThGMAor5aOxID4gecSrOyAjNThGMQor5aOyID4gbcOgaTsgIzU4RjIKK+WjsyA+IGvDqTsgIzU4RjMKK+WjtCA+IHpoxa07ICM1OEY0Civlo7UgPiB6aHXDoG5nOyAjNThGNQor5aO2ID4gaMO6OyAjNThGNgor5aO3ID4gaMO6OyAjNThGNwor5aO4ID4ga8WtbjsgIzU4RjgKK+WjuSA+IHnEqzsgIzU4RjkKK+WjuiA+IGjDujsgIzU4RkEKK+WjuyA+IHjDuTsgIzU4RkIKK+WjvCA+IGvFrW47ICM1OEZDCivlo70gPiBzaMOydTsgIzU4RkQKK+WjviA+IG3Eg25nOyAjNThGRQor5aO/ID4gesWtbjsgIzU4RkYKK+WkgCA+IHNow7J1OyAjNTkwMAor5aSBID4gecSrOyAjNTkwMQor5aSCID4gemjErTsgIzU5MDIKK+WkgyA+IGfFqzsgIzU5MDMKK+WkhCA+IGNow7k7ICM1OTA0CivlpIUgPiBqacOgbmc7ICM1OTA1CivlpIYgPiBmxJNuZzsgIzU5MDYKK+WkhyA+IGLDqGk7ICM1OTA3CivlpIkgPiBiacOgbjsgIzU5MDkKK+WkiiA+IHPFq2k7ICM1OTBBCivlpIsgPiBxxatuOyAjNTkwQgor5aSMID4gbMOtbmc7ICM1OTBDCivlpI0gPiBmw7k7ICM1OTBECivlpI4gPiB6w7lvOyAjNTkwRQor5aSPID4geGnDoDsgIzU5MEYKK+WkkCA+IHjDrG9uZzsgIzU5MTAKK+WkkiA+IG7DoW87ICM1OTEyCivlpJMgPiB4acOgOyAjNTkxMwor5aSUID4ga8O6aTsgIzU5MTQKK+WklSA+IHjEqzsgIzU5MTUKK+WkliA+IHfDoGk7ICM1OTE2CivlpJcgPiB5dcOgbjsgIzU5MTcKK+WkmCA+IG3Eg287ICM1OTE4CivlpJkgPiBzw7k7ICM1OTE5CivlpJogPiBkxatvOyAjNTkxQQor5aSbID4gZMWrbzsgIzU5MUIKK+WknCA+IHnDqDsgIzU5MUMKK+WknSA+IHHDrW5nOyAjNTkxRAor5aSfID4gZ8OydTsgIzU5MUYKK+WkoCA+IGfDsnU7ICM1OTIwCivlpKEgPiBxw6w7ICM1OTIxCivlpKIgPiBtw6huZzsgIzU5MjIKK+WkoyA+IG3DqG5nOyAjNTkyMwor5aSkID4gecOtbjsgIzU5MjQKK+WkpSA+IGjFrW87ICM1OTI1CivlpKYgPiBjaMOobjsgIzU5MjYKK+WkpyA+IGTDoDsgIzU5MjcKK+WkqCA+IHrDqDsgIzU5MjgKK+WkqSA+IHRpxIFuOyAjNTkyOQor5aSqID4gdMOgaTsgIzU5MkEKK+WkqyA+IGbFqzsgIzU5MkIKK+WkrCA+IGd1w6BpOyAjNTkyQwor5aStID4gecSDbzsgIzU5MkQKK+WkriA+IHnEgW5nOyAjNTkyRQor5aSvID4gaMSBbmc7ICM1OTJGCivlpLAgPiBnxINvOyAjNTkzMAor5aSxID4gc2jEqzsgIzU5MzEKK+WksiA+IGLElW47ICM1OTMyCivlpLMgPiB0w6BpOyAjNTkzMwor5aS0ID4gdMOzdTsgIzU5MzQKK+WktSA+IHnEg247ICM1OTM1CivlpLYgPiBixK07ICM1OTM2CivlpLcgPiB5w607ICM1OTM3CivlpLggPiBrdcSBOyAjNTkzOAor5aS5ID4gamnEgTsgIzU5MzkKK+WkuiA+IGTDum87ICM1OTNBCivlpLwgPiBrdcSDbmc7ICM1OTNDCivlpL0gPiB5w7luOyAjNTkzRAor5aS+ID4gamnEgTsgIzU5M0UKK+WkvyA+IHDEgTsgIzU5M0YKK+WlgCA+IMSTbjsgIzU5NDAKK+WlgSA+IGxpw6FuOyAjNTk0MQor5aWCID4gaHXDoG47ICM1OTQyCivlpYMgPiBkw6w7ICM1OTQzCivlpYQgPiB5xINuOyAjNTk0NAor5aWFID4gcMOgbzsgIzU5NDUKK+WlhiA+IHF1xINuOyAjNTk0Ngor5aWHID4gccOtOyAjNTk0Nwor5aWIID4gbsOgaTsgIzU5NDgKK+WliSA+IGbDqG5nOyAjNTk0OQor5aWKID4geGnDqTsgIzU5NEEKK+WliyA+IGbDqG47ICM1OTRCCivlpYwgPiBkacSDbjsgIzU5NEMKK+WljiA+IGvDumk7ICM1OTRFCivlpY8gPiB6w7J1OyAjNTk0Rgor5aWQID4gaHXDoG47ICM1OTUwCivlpZEgPiBxw6w7ICM1OTUxCivlpZIgPiBrxIFpOyAjNTk1Mgor5aWTID4gemjDoDsgIzU5NTMKK+WllCA+IGLEk247ICM1OTU0CivlpZUgPiB5w6w7ICM1OTU1CivlpZYgPiBqacSDbmc7ICM1OTU2CivlpZcgPiB0w6BvOyAjNTk1Nwor5aWYID4gesOgbmc7ICM1OTU4CivlpZkgPiBixJVuOyAjNTk1OQor5aWaID4geMSrOyAjNTk1QQor5aWbID4geGnEg25nOyAjNTk1Qgor5aWcID4gZsSVaTsgIzU5NUMKK+WlnSA+IGRpxIFvOyAjNTk1RAor5aWeID4geMO5bjsgIzU5NUUKK+WlnyA+IGvEk25nOyAjNTk1Rgor5aWgID4gZGnDoG47ICM1OTYwCivlpaEgPiDDoG87ICM1OTYxCivlpaIgPiBzaMSTOyAjNTk2Mgor5aWjID4gd8SVbmc7ICM1OTYzCivlpaQgPiBwxINuOyAjNTk2NAor5aWlID4gw6BvOyAjNTk2NQor5aWmID4gd8O5OyAjNTk2Ngor5aWnID4gw6BvOyAjNTk2Nwor5aWoID4gamnEg25nOyAjNTk2OAor5aWpID4gbGnDoW47ICM1OTY5CivlpaogPiBkw7pvOyAjNTk2QQor5aWrID4gecWrbjsgIzU5NkIKK+WlrCA+IGppxINuZzsgIzU5NkMKK+WlrSA+IHNow6w7ICM1OTZECivlpa4gPiBmw6huOyAjNTk2RQor5aWvID4gaMO5bzsgIzU5NkYKK+WlsCA+IGLDrDsgIzU5NzAKK+WlsSA+IGxpw6FuOyAjNTk3MQor5aWyID4gZMWtbzsgIzU5NzIKK+WlsyA+IG7HmjsgIzU5NzMKK+WltCA+IG7DujsgIzU5NzQKK+WltSA+IGTEq25nOyAjNTk3NQor5aW2ID4gbsSDaTsgIzU5NzYKK+WltyA+IHFpxIFuOyAjNTk3Nwor5aW4ID4gamnEgW47ICM1OTc4CivlpbkgPiB0xIE7ICM1OTc5CivlpbogPiBqxK11OyAjNTk3QQor5aW7ID4gbsOhbjsgIzU5N0IKK+WlvCA+IGNow6A7ICM1OTdDCivlpb0gPiBoxINvOyAjNTk3RAor5aW+ID4geGnEgW47ICM1OTdFCivlpb8gPiBmw6BuOyAjNTk3Rgor5aaAID4gasStOyAjNTk4MAor5aaBID4gc2jDuW87ICM1OTgxCivlpoIgPiByw7o7ICM1OTgyCivlpoMgPiBmxJNpOyAjNTk4Mwor5aaEID4gd8Ogbmc7ICM1OTg0CivlpoUgPiBow7NuZzsgIzU5ODUKK+WmhiA+IHpodcSBbmc7ICM1OTg2CivlpocgPiBmw7k7ICM1OTg3CivlpoggPiBtxIE7ICM1OTg4CivlpokgPiBkxIFuOyAjNTk4OQor5aaKID4gcsOobjsgIzU5OEEKK+WmiyA+IGbFqzsgIzU5OEIKK+WmjCA+IGrDrG5nOyAjNTk4Qwor5aaNID4gecOhbjsgIzU5OEQKK+WmjiA+IHhpw6g7ICM1OThFCivlpo8gPiB3w6huOyAjNTk4Rgor5aaQID4gemjFjW5nOyAjNTk5MAor5aaRID4gcMSBOyAjNTk5MQor5aaSID4gZMO5OyAjNTk5Mgor5aaTID4gasOsOyAjNTk5Mwor5aaUID4ga8STbmc7ICM1OTk0CivlppUgPiB6aMOybmc7ICM1OTk1CivlppYgPiB5xIFvOyAjNTk5Ngor5aaXID4gasOsbjsgIzU5OTcKK+WmmCA+IHnDum47ICM1OTk4CivlppkgPiBtacOgbzsgIzU5OTkKK+WmmiA+IHDEk2k7ICM1OTlBCivlppwgPiB5dcOoOyAjNTk5Qwor5aadID4gemh1xIFuZzsgIzU5OUQKK+WmniA+IG7Eq3U7ICM1OTlFCivlpp8gPiB5w6BuOyAjNTk5Rgor5aagID4gbsOgOyAjNTlBMAor5aahID4geMSrbjsgIzU5QTEKK+WmoiA+IGbDqW47ICM1OUEyCivlpqMgPiBixK07ICM1OUEzCivlpqQgPiB5w7o7ICM1OUE0CivlpqUgPiB0xa1vOyAjNTlBNQor5aamID4gZsSTbmc7ICM1OUE2CivlpqcgPiB5dcOhbjsgIzU5QTcKK+WmqCA+IGbDoW5nOyAjNTlBOAor5aapID4gd8WtOyAjNTlBOQor5aaqID4gecO5OyAjNTlBQQor5aarID4gZ8WraTsgIzU5QUIKK+WmrCA+IGTDuTsgIzU5QUMKK+WmrSA+IGLDoTsgIzU5QUQKK+WmriA+IG7EqzsgIzU5QUUKK+WmryA+IHpow7N1OyAjNTlBRgor5aawID4gemjDum87ICM1OUIwCivlprEgPiB6aMSBbzsgIzU5QjEKK+WmsiA+IGTDoTsgIzU5QjIKK+WmsyA+IG7Eg2k7ICM1OUIzCivlprQgPiB5dcSDbjsgIzU5QjQKK+WmtSA+IHTFj3U7ICM1OUI1CivlprYgPiB4dcOhbjsgIzU5QjYKK+WmtyA+IHpow607ICM1OUI3CivlprggPiDEkzsgIzU5QjgKK+WmuSA+IG3DqGk7ICM1OUI5CivlprogPiBtw7I7ICM1OUJBCivlprsgPiBxxKs7ICM1OUJCCivlprwgPiBiw6w7ICM1OUJDCivlpr0gPiBzaMSTbjsgIzU5QkQKK+WmviA+IHFpw6g7ICM1OUJFCivlpr8gPiDEkzsgIzU5QkYKK+WngCA+IGjDqTsgIzU5QzAKK+WngSA+IHjFrTsgIzU5QzEKK+WngiA+IGbDoTsgIzU5QzIKK+WngyA+IHpoxJNuZzsgIzU5QzMKK+WnhCA+IG3DrW47ICM1OUM0Civlp4UgPiBiw6BuOyAjNTlDNQor5aeGID4gbcWtOyAjNTlDNgor5aeHID4gZsWrOyAjNTlDNwor5aeIID4gbMOtbmc7ICM1OUM4Civlp4kgPiB6xK07ICM1OUM5Civlp4ogPiB6xK07ICM1OUNBCivlp4sgPiBzaMStOyAjNTlDQgor5aeMID4gcsSDbjsgIzU5Q0MKK+WnjSA+IHNoxIFuOyAjNTlDRAor5aeOID4gecSBbmc7ICM1OUNFCivlp48gPiBtw6FuOyAjNTlDRgor5aeQID4gamnElTsgIzU5RDAKK+WnkSA+IGfFqzsgIzU5RDEKK+WnkiA+IHPDrDsgIzU5RDIKK+WnkyA+IHjDrG5nOyAjNTlEMwor5aeUID4gd8SVaTsgIzU5RDQKK+WnlSA+IHrEqzsgIzU5RDUKK+WnliA+IGrDuTsgIzU5RDYKK+WnlyA+IHNoxIFuOyAjNTlENwor5aeYID4gcMSrbjsgIzU5RDgKK+WnmSA+IHLDqG47ICM1OUQ5Civlp5ogPiB5w6FvOyAjNTlEQQor5aebID4gdMWPbmc7ICM1OURCCivlp5wgPiBqacSBbmc7ICM1OURDCivlp50gPiBzaMWrOyAjNTlERAor5aeeID4gasOtOyAjNTlERQor5aefID4gZ8SBaTsgIzU5REYKK+WnoCA+IHNow6BuZzsgIzU5RTAKK+WnoSA+IGvDuW87ICM1OUUxCivlp6IgPiBqdcSBbjsgIzU5RTIKK+WnoyA+IGppxIFvOyAjNTlFMwor5aekID4gZ8OydTsgIzU5RTQKK+WnpSA+IG3FrTsgIzU5RTUKK+WnpiA+IGppxIFuOyAjNTlFNgor5aenID4gamnEgW47ICM1OUU3Civlp6ggPiB5w607ICM1OUU4Civlp6kgPiBuacOgbjsgIzU5RTkKK+WnqiA+IHpow607ICM1OUVBCivlp6sgPiBqxKs7ICM1OUVCCivlp6wgPiBqxKs7ICM1OUVDCivlp60gPiB4acOgbjsgIzU5RUQKK+WnriA+IGjDqW5nOyAjNTlFRQor5aevID4gZ3XEgW5nOyAjNTlFRgor5aewID4gasWrbjsgIzU5RjAKK+WnsSA+IGt1xIE7ICM1OUYxCivlp7IgPiB5w6BuOyAjNTlGMgor5aezID4gbcStbmc7ICM1OUYzCivlp7QgPiBsacOoOyAjNTlGNAor5ae1ID4gcMOoaTsgIzU5RjUKK+WntiA+IHnEg247ICM1OUY2Civlp7cgPiB5w7J1OyAjNTlGNwor5ae4ID4gecOhbjsgIzU5RjgKK+WnuSA+IGNow6A7ICM1OUY5Civlp7ogPiBzaMSTbjsgIzU5RkEKK+WnuyA+IHnEq247ICM1OUZCCivlp7wgPiBjaMStOyAjNTlGQwor5ae9ID4gZ8WtaTsgIzU5RkQKK+WnviA+IHF1xIFuOyAjNTlGRQor5ae/ID4gesSrOyAjNTlGRgor5aiAID4gc8WNbmc7ICM1QTAwCivlqIEgPiB3xJNpOyAjNUEwMQor5aiCID4gaMOzbmc7ICM1QTAyCivlqIMgPiB3w6E7ICM1QTAzCivlqIQgPiBsw7N1OyAjNUEwNAor5aiFID4gecOgOyAjNUEwNQor5aiGID4gcsSDbzsgIzVBMDYKK+WohyA+IGppxIFvOyAjNUEwNwor5aiIID4gbHXDoW47ICM1QTA4CivlqIkgPiBwxKtuZzsgIzVBMDkKK+WoiiA+IHhpw6BuOyAjNUEwQQor5aiLID4gc2jDoG87ICM1QTBCCivlqIwgPiBsxK07ICM1QTBDCivlqI0gPiBjaMOpbmc7ICM1QTBECivlqI4gPiB4acOgbzsgIzVBMEUKK+WojyA+IG3DoW5nOyAjNUEwRgor5aiQID4gZnU7ICM1QTEwCivlqJEgPiBzxatvOyAjNUExMQor5aiSID4gd8WtOyAjNUExMgor5aiTID4gd8SVaTsgIzVBMTMKK+WolCA+IGvDqDsgIzVBMTQKK+WolSA+IGzDoGk7ICM1QTE1CivlqJYgPiBjaMO5bzsgIzVBMTYKK+WolyA+IGTDrG5nOyAjNUExNwor5aiYID4gbmnDoW5nOyAjNUExOAor5aiZID4geMOtbmc7ICM1QTE5CivlqJogPiBuw6FuOyAjNUExQQor5aibID4gecO6OyAjNUExQgor5aicID4gbsO6bzsgIzVBMUMKK+WonSA+IHDEk2k7ICM1QTFECivlqJ4gPiBuxJVpOyAjNUExRQor5aifID4ganXEgW47ICM1QTFGCivlqKAgPiBzaMSTbjsgIzVBMjAKK+WooSA+IHpow6w7ICM1QTIxCivlqKIgPiBow6FuOyAjNUEyMgor5aijID4gZMOsOyAjNUEyMwor5aikID4gemh1xIFuZzsgIzVBMjQKK+WopSA+IMOpOyAjNUEyNQor5aimID4gcMOtbjsgIzVBMjYKK+WopyA+IHTDuWk7ICM1QTI3CivlqKggPiBow6BuOyAjNUEyOAor5aipID4gbWnEg247ICM1QTI5CivlqKogPiB3w7o7ICM1QTJBCivlqKsgPiB5w6FuOyAjNUEyQgor5aisID4gd8WtOyAjNUEyQwor5aitID4geMSrOyAjNUEyRAor5aiuID4gecOhbjsgIzVBMkUKK+WoryA+IHnDujsgIzVBMkYKK+WosCA+IHPDrDsgIzVBMzAKK+WosSA+IHnDujsgIzVBMzEKK+WosiA+IHfEgTsgIzVBMzIKK+WotCA+IHhpw6FuOyAjNUEzNAor5ai1ID4gasWrOyAjNUEzNQor5ai2ID4gccWtOyAjNUEzNgor5ai3ID4gc2jDuWk7ICM1QTM3CivlqLggPiBxxKs7ICM1QTM4CivlqLkgPiB4acOhbjsgIzVBMzkKK+WouiA+IHpoxatpOyAjNUEzQQor5ai7ID4gZMWNbmc7ICM1QTNCCivlqLwgPiBjaMSBbmc7ICM1QTNDCivlqL0gPiBsw7k7ICM1QTNECivlqL4gPiDEg2k7ICM1QTNFCivlqL8gPiDEkzsgIzVBM0YKK+WpgCA+IMSTOyAjNUE0MAor5amBID4gbMOzdTsgIzVBNDEKK+WpgiA+IG1pw6FuOyAjNUE0Mgor5amDID4gY8Ozbmc7ICM1QTQzCivlqYQgPiBwxY91OyAjNUE0NAor5amFID4gasO6OyAjNUE0NQor5amGID4gcMOzOyAjNUE0Ngor5amHID4gY8SDaTsgIzVBNDcKK+WpiCA+IGTDrW5nOyAjNUE0OAor5amJID4gd8SDbjsgIzVBNDkKK+WpiiA+IGJpxINvOyAjNUE0QQor5amLID4geGnEgW87ICM1QTRCCivlqYwgPiBzaMWtOyAjNUE0Qwor5amNID4gccStOyAjNUE0RAor5amOID4gaMWraTsgIzVBNEUKK+WpjyA+IGbDuTsgIzVBNEYKK+WpkCA+IMSTOyAjNUE1MAor5amRID4gd8WPOyAjNUE1MQor5amSID4gdMOhbjsgIzVBNTIKK+WpkyA+IGbEk2k7ICM1QTUzCivlqZQgPiB3ZWk7ICM1QTU0CivlqZUgPiBqacOpOyAjNUE1NQor5amWID4gdGnEgW47ICM1QTU2CivlqZcgPiBuw607ICM1QTU3CivlqZggPiBxdcOhbjsgIzVBNTgKK+WpmSA+IGrDrG5nOyAjNUE1OQor5amaID4gaMWrbjsgIzVBNUEKK+WpmyA+IGrEq25nOyAjNUE1Qgor5amcID4gcWnEgW47ICM1QTVDCivlqZ0gPiBkacOgbjsgIzVBNUQKK+WpniA+IHjDrG5nOyAjNUE1RQor5amfID4gaMO5OyAjNUE1Rgor5amgID4gd8OgOyAjNUE2MAor5amhID4gbMOhaTsgIzVBNjEKK+WpoiA+IGLDrDsgIzVBNjIKK+WpoyA+IHnEq247ICM1QTYzCivlqaQgPiBjaMWNdTsgIzVBNjQKK+WppSA+IGNow7lvOyAjNUE2NQor5ammID4gZsO5OyAjNUE2Ngor5amnID4gasOsbmc7ICM1QTY3CivlqaggPiBsw7puOyAjNUE2OAor5ampID4gecOgbjsgIzVBNjkKK+WpqiA+IGzDoW47ICM1QTZBCivlqasgPiBrxatuOyAjNUE2Qgor5amsID4gecOtbjsgIzVBNkMKK+WprSA+IHnDoDsgIzVBNkQKK+WpriA+IGp1OyAjNUE2RQor5amvID4gbMOsOyAjNUE2Rgor5amwID4gZGnEg247ICM1QTcwCivlqbEgPiB4acOhbjsgIzVBNzEKK+WpsyA+IGh1w6A7ICM1QTczCivlqbQgPiB5xKtuZzsgIzVBNzQKK+WptSA+IGNow6FuOyAjNUE3NQor5am2ID4gc2jElW47ICM1QTc2CivlqbcgPiB0w61uZzsgIzVBNzcKK+WpuCA+IGTDoG5nOyAjNUE3OAor5am5ID4gecSDbzsgIzVBNzkKK+WpuiA+IHfDuTsgIzVBN0EKK+WpuyA+IG7DoG47ICM1QTdCCivlqbwgPiByw7lvOyAjNUE3Qwor5am9ID4gamnEgzsgIzVBN0QKK+WpviA+IHTFjXU7ICM1QTdFCivlqb8gPiB4w7k7ICM1QTdGCivlqoAgPiB5w7o7ICM1QTgwCivlqoEgPiB3xJNpOyAjNUE4MQor5aqCID4gdMOtOyAjNUE4Mgor5aqDID4gcsOzdTsgIzVBODMKK+WqhCA+IG3ElWk7ICM1QTg0CivlqoUgPiBkxIFuOyAjNUE4NQor5aqGID4gcnXEg247ICM1QTg2CivlqocgPiBxxKtuOyAjNUE4Nwor5aqIID4gaHVpOyAjNUE4OAor5aqJID4gd8WrOyAjNUE4OQor5aqKID4gcWnDoW47ICM1QThBCivlqosgPiBjaMWrbjsgIzVBOEIKK+WqjCA+IG3DoW87ICM1QThDCivlqo0gPiBmw7k7ICM1QThECivlqo4gPiBqacSVOyAjNUE4RQor5aqPID4gZHXEgW47ICM1QThGCivlqpAgPiB4xKs7ICM1QTkwCivlqpEgPiB6aMOybmc7ICM1QTkxCivlqpIgPiBtw6lpOyAjNUE5Mgor5aqTID4gaHXDoW5nOyAjNUE5Mwor5aqUID4gbWnDoW47ICM1QTk0CivlqpUgPiDEgW47ICM1QTk1CivlqpYgPiB5xKtuZzsgIzVBOTYKK+WqlyA+IHh1xIFuOyAjNUE5Nwor5aqYID4gamllOyAjNUE5OAor5aqZID4gd8STaTsgIzVBOTkKK+WqmiA+IG3DqGk7ICM1QTlBCivlqpsgPiB5dcOgbjsgIzVBOUIKK+WqnCA+IHpoxJNuOyAjNUE5Qwor5aqdID4gccSrdTsgIzVBOUQKK+WqniA+IHTDrTsgIzVBOUUKK+WqnyA+IHhpw6g7ICM1QTlGCivlqqAgPiB0xa1vOyAjNUFBMAor5aqhID4gbGnDoG47ICM1QUExCivlqqIgPiBtw6BvOyAjNUFBMgor5aqjID4gcsSDbjsgIzVBQTMKK+WqpCA+IHPEqzsgIzVBQTQKK+WqpSA+IHBpxIFuOyAjNUFBNQor5aqmID4gd8OoaTsgIzVBQTYKK+WqpyA+IHfEgTsgIzVBQTcKK+WqqCA+IGrDrHU7ICM1QUE4CivlqqkgPiBow7o7ICM1QUE5CivlqqogPiDEg287ICM1QUFBCivlqq0gPiB4xas7ICM1QUFECivlqq4gPiB0xY11OyAjNUFBRQor5aqvID4gZ8WraTsgIzVBQUYKK+WqsCA+IHrFjXU7ICM1QUIwCivlqrEgPiB5w6FvOyAjNUFCMQor5aqyID4gcMOsOyAjNUFCMgor5aqzID4geMOtOyAjNUFCMwor5aq0ID4geXXDoW47ICM1QUI0CivlqrUgPiB5w6xuZzsgIzVBQjUKK+WqtiA+IHLDs25nOyAjNUFCNgor5aq3ID4gcsO5OyAjNUFCNwor5aq4ID4gY2jEqzsgIzVBQjgKK+WquSA+IGzDrXU7ICM1QUI5CivlqrogPiBtxJVpOyAjNUFCQQor5aq7ID4gcMOhbjsgIzVBQkIKK+WqvCA+IMSDbzsgIzVBQkMKK+WqvSA+IG3EgTsgIzVBQkQKK+WqviA+IGfDsnU7ICM1QUJFCivlqr8gPiBrw7lpOyAjNUFCRgor5auAID4gccOtbjsgIzVBQzAKK+WrgSA+IGppw6A7ICM1QUMxCivlq4IgPiBzxINvOyAjNUFDMgor5auDID4gemjEk247ICM1QUMzCivlq4QgPiB5dcOhbjsgIzVBQzQKK+WrhSA+IGNoxIE7ICM1QUM1Civlq4YgPiB5w7NuZzsgIzVBQzYKK+WrhyA+IG3DrW5nOyAjNUFDNwor5auIID4gecSrbmc7ICM1QUM4Civlq4kgPiBqw607ICM1QUM5Civlq4ogPiBzw7k7ICM1QUNBCivlq4sgPiBuacSDbzsgIzVBQ0IKK+WrjCA+IHhpw6FuOyAjNUFDQwor5auNID4gdMSBbzsgIzVBQ0QKK+WrjiA+IHDDoW5nOyAjNUFDRQor5auPID4gbMOhbmc7ICM1QUNGCivlq5AgPiBuxINvOyAjNUFEMAor5auRID4gYsOhbzsgIzVBRDEKK+WrkiA+IMOgaTsgIzVBRDIKK+WrkyA+IHDDrDsgIzVBRDMKK+WrlCA+IHDDrW47ICM1QUQ0Civlq5UgPiB5w6w7ICM1QUQ1Civlq5YgPiBwacOgbzsgIzVBRDYKK+WrlyA+IHnDuTsgIzVBRDcKK+WrmCA+IGzDqWk7ICM1QUQ4Civlq5kgPiB4dcOhbjsgIzVBRDkKK+WrmiA+IG3DoG47ICM1QURBCivlq5sgPiB5xKs7ICM1QURCCivlq5wgPiB6aMSBbmc7ICM1QURDCivlq50gPiBrxIFuZzsgIzVBREQKK+WrniA+IHnDs25nOyAjNUFERQor5aufID4gbsOsOyAjNUFERgor5augID4gbMOtOyAjNUFFMAor5auhID4gZMOtOyAjNUFFMQor5auiID4gZ8WraTsgIzVBRTIKK+WroyA+IHnEgW47ICM1QUUzCivlq6QgPiBqw6xuOyAjNUFFNAor5aulID4gemh1xIFuOyAjNUFFNQor5aumID4gY2jDoW5nOyAjNUFFNgor5aunID4gY8OoOyAjNUFFNwor5auoID4gaMSBbjsgIzVBRTgKK+WrqSA+IG7DqG47ICM1QUU5Civlq6ogPiBsw6BvOyAjNUFFQQor5aurID4gbcOzOyAjNUFFQgor5ausID4gemjEkzsgIzVBRUMKK+WrrSA+IGjDuTsgIzVBRUQKK+WrriA+IGjDuTsgIzVBRUUKK+WrryA+IMOgbzsgIzVBRUYKK+WrsCA+IG7DqG47ICM1QUYwCivlq7EgPiBxacOhbmc7ICM1QUYxCivlq7MgPiBwacOoOyAjNUFGMwor5au0ID4gZ8WrOyAjNUFGNAor5au1ID4gd8WtOyAjNUFGNQor5au2ID4gamnDoW87ICM1QUY2Civlq7cgPiB0xa1vOyAjNUFGNwor5au4ID4gemjEg247ICM1QUY4Civlq7kgPiBtw6FvOyAjNUFGOQor5au6ID4geGnDoW47ICM1QUZBCivlq7sgPiB4acOhbjsgIzVBRkIKK+WrvCA+IG3DsjsgIzVBRkMKK+WrvSA+IGxpw6FvOyAjNUFGRAor5au+ID4gbGnDoW47ICM1QUZFCivlq78gPiBodcOgOyAjNUFGRgor5ayAID4gZ8WraTsgIzVCMDAKK+WsgSA+IGTEk25nOyAjNUIwMQor5ayCID4gemjEqzsgIzVCMDIKK+WsgyA+IHjFqzsgIzVCMDMKK+WshCA+IHlpOyAjNUIwNAor5ayFID4gaHXDoTsgIzVCMDUKK+WshiA+IHjEqzsgIzVCMDYKK+WshyA+IGjDuWk7ICM1QjA3CivlrIggPiByxINvOyAjNUIwOAor5ayJID4geMSrOyAjNUIwOQor5ayKID4gecOgbjsgIzVCMEEKK+WsiyA+IGNow6FuOyAjNUIwQgor5ayMID4gamnEgW87ICM1QjBDCivlrI0gPiBtxJVpOyAjNUIwRAor5ayOID4gZsOgbjsgIzVCMEUKK+WsjyA+IGbEgW47ICM1QjBGCivlrJAgPiB4acSBbjsgIzVCMTAKK+WskSA+IHnDrDsgIzVCMTEKK+WskiA+IHfDqGk7ICM1QjEyCivlrJMgPiBqacOgbzsgIzVCMTMKK+WslCA+IGbDuTsgIzVCMTQKK+WslSA+IHNow6w7ICM1QjE1CivlrJYgPiBiw6w7ICM1QjE2CivlrJcgPiBzaMOgbjsgIzVCMTcKK+WsmCA+IHPDuWk7ICM1QjE4CivlrJkgPiBxacOhbmc7ICM1QjE5CivlrJogPiBsacSDbjsgIzVCMUEKK+WsmyA+IGh1w6FuOyAjNUIxQgor5aycID4geGluOyAjNUIxQwor5aydID4gbmnEg287ICM1QjFECivlrJ4gPiBkxY9uZzsgIzVCMUUKK+WsnyA+IHnDrDsgIzVCMUYKK+WsoCA+IGPDoW47ICM1QjIwCivlrKEgPiDDoGk7ICM1QjIxCivlrKIgPiBuacOhbmc7ICM1QjIyCivlrKMgPiBuw6luZzsgIzVCMjMKK+WspCA+IG3EgTsgIzVCMjQKK+WspSA+IHRpxINvOyAjNUIyNQor5aymID4gY2jDs3U7ICM1QjI2CivlrKcgPiBqw6xuOyAjNUIyNwor5ayoID4gY8OtOyAjNUIyOAor5aypID4gecO6OyAjNUIyOQor5ayqID4gcMOtbjsgIzVCMkEKK+WsqyA+IHlvbmc7ICM1QjJCCivlrKwgPiB4xas7ICM1QjJDCivlrK0gPiBuxINpOyAjNUIyRAor5ayuID4gecSBbjsgIzVCMkUKK+WsryA+IHTDoWk7ICM1QjJGCivlrLAgPiB5xKtuZzsgIzVCMzAKK+WssSA+IGPDoW47ICM1QjMxCivlrLIgPiBuacSDbzsgIzVCMzIKK+WssyA+IHdvOyAjNUIzMwor5ay0ID4gecOtbmc7ICM1QjM0CivlrLUgPiBtacOhbjsgIzVCMzUKK+WstyA+IG3EgTsgIzVCMzcKK+WsuCA+IHNoxJVuOyAjNUIzOAor5ay5ID4geMOsbmc7ICM1QjM5CivlrLogPiBuw6w7ICM1QjNBCivlrLsgPiBkw7o7ICM1QjNCCivlrLwgPiBsxK11OyAjNUIzQwor5ay9ID4geXXEgW47ICM1QjNECivlrL4gPiBsxINuOyAjNUIzRQor5ay/ID4gecOgbjsgIzVCM0YKK+WtgCA+IHNodcSBbmc7ICM1QjQwCivlrYEgPiBsw61uZzsgIzVCNDEKK+WtgiA+IGppxINvOyAjNUI0Mgor5a2DID4gbmnDoW5nOyAjNUI0Mwor5a2EID4gbMSDbjsgIzVCNDQKK+WthSA+IHhpxIFuOyAjNUI0NQor5a2GID4gecSrbmc7ICM1QjQ2CivlrYcgPiBzaHXEgW5nOyAjNUI0Nwor5a2IID4gc2h1xIFpOyAjNUI0OAor5a2JID4gcXXDoW47ICM1QjQ5CivlrYogPiBtxK07ICM1QjRBCivlrYsgPiBsw607ICM1QjRCCivlrYwgPiBsdcOhbjsgIzVCNEMKK+WtjSA+IHnDoW47ICM1QjRECivlrY4gPiB6aMWtOyAjNUI0RQor5a2PID4gbMSDbjsgIzVCNEYKK+WtkCA+IHrErTsgIzVCNTAKK+WtkSA+IGppw6k7ICM1QjUxCivlrZIgPiBqdcOpOyAjNUI1Mgor5a2TID4ganXDqTsgIzVCNTMKK+WtlCA+IGvFj25nOyAjNUI1NAor5a2VID4gecO5bjsgIzVCNTUKK+WtliA+IHrEqzsgIzVCNTYKK+WtlyA+IHrDrDsgIzVCNTcKK+WtmCA+IGPDum47ICM1QjU4CivlrZkgPiBzxatuOyAjNUI1OQor5a2aID4gZsO6OyAjNUI1QQor5a2bID4gYsOoaTsgIzVCNUIKK+WtnCA+IHrEqzsgIzVCNUMKK+WtnSA+IHhpw6BvOyAjNUI1RAor5a2eID4geMOsbjsgIzVCNUUKK+WtnyA+IG3DqG5nOyAjNUI1Rgor5a2gID4gc8OsOyAjNUI2MAor5a2hID4gdMSBaTsgIzVCNjEKK+WtoiA+IGLEgW87ICM1QjYyCivlraMgPiBqw6w7ICM1QjYzCivlraQgPiBnxas7ICM1QjY0CivlraUgPiBuw7o7ICM1QjY1CivlraYgPiB4dcOpOyAjNUI2Ngor5a2oID4gemh1xINuOyAjNUI2OAor5a2pID4gaMOhaTsgIzVCNjkKK+WtqiA+IGx1w6FuOyAjNUI2QQor5a2rID4gc8WrbjsgIzVCNkIKK+WtrCA+IGh1w6BpOyAjNUI2Qwor5a2tID4gbWnEkzsgIzVCNkQKK+WtriA+IGPDs25nOyAjNUI2RQor5a2vID4gcWnEgW47ICM1QjZGCivlrbAgPiBzaMO6OyAjNUI3MAor5a2xID4gY2jDoW47ICM1QjcxCivlrbIgPiB5xIE7ICM1QjcyCivlrbMgPiB6xKs7ICM1QjczCivlrbQgPiBuxK07ICM1Qjc0CivlrbUgPiBmxas7ICM1Qjc1CivlrbYgPiB6xKs7ICM1Qjc2CivlrbcgPiBsw607ICM1Qjc3CivlrbggPiB4dcOpOyAjNUI3OAor5a25ID4gYsOyOyAjNUI3OQor5a26ID4gcsO6OyAjNUI3QQor5a27ID4gbMOhaTsgIzVCN0IKK+WtvCA+IG5pw6g7ICM1QjdDCivlrb0gPiBuacOoOyAjNUI3RAor5a2+ID4gecSrbmc7ICM1QjdFCivlrb8gPiBsdcOhbjsgIzVCN0YKK+WugCA+IG1pw6FuOyAjNUI4MAor5a6BID4gemjDuTsgIzVCODEKK+WugiA+IHLFj25nOyAjNUI4Mgor5a6DID4gdMSBOyAjNUI4Mwor5a6EID4gZ8WtaTsgIzVCODQKK+WuhSA+IHpow6FpOyAjNUI4NQor5a6GID4gccOtb25nOyAjNUI4Ngor5a6HID4gecWtOyAjNUI4Nwor5a6IID4gc2jFj3U7ICM1Qjg4CivlrokgPiDEgW47ICM1Qjg5CivlroogPiB0w7o7ICM1QjhBCivlrosgPiBzw7JuZzsgIzVCOEIKK+WujCA+IHfDoW47ICM1QjhDCivlro0gPiByw7J1OyAjNUI4RAor5a6OID4gecSDbzsgIzVCOEUKK+WujyA+IGjDs25nOyAjNUI4Rgor5a6QID4gecOtOyAjNUI5MAor5a6RID4gasStbmc7ICM1QjkxCivlrpIgPiB6aMWrbjsgIzVCOTIKK+WukyA+IG3DrDsgIzVCOTMKK+WulCA+IHpoxa07ICM1Qjk0CivlrpUgPiBkw6BuZzsgIzVCOTUKK+WuliA+IGjDs25nOyAjNUI5Ngor5a6XID4gesWNbmc7ICM1Qjk3CivlrpggPiBndcSBbjsgIzVCOTgKK+WumSA+IHpow7J1OyAjNUI5OQor5a6aID4gZMOsbmc7ICM1QjlBCivlrpsgPiB3xINuOyAjNUI5Qgor5a6cID4gecOtOyAjNUI5Qwor5a6dID4gYsSDbzsgIzVCOUQKK+WuniA+IHNow607ICM1QjlFCivlrp8gPiBzaMOtOyAjNUI5Rgor5a6gID4gY2jFj25nOyAjNUJBMAor5a6hID4gc2jElW47ICM1QkExCivlrqIgPiBrw6g7ICM1QkEyCivlrqMgPiB4dcSBbjsgIzVCQTMKK+WupCA+IHNow6w7ICM1QkE0CivlrqUgPiB5w7J1OyAjNUJBNQor5a6mID4gaHXDoG47ICM1QkE2CivlrqcgPiB5w607ICM1QkE3CivlrqggPiB0acSDbzsgIzVCQTgKK+WuqSA+IHNoxK07ICM1QkE5CivlrqogPiB4acOgbjsgIzVCQUEKK+WuqyA+IGfFjW5nOyAjNUJBQgor5a6sID4gY2jDqW5nOyAjNUJBQwor5a6tID4gccO6bjsgIzVCQUQKK+WuriA+IGfFjW5nOyAjNUJBRQor5a6vID4geGnEgW87ICM1QkFGCivlrrAgPiB6xINpOyAjNUJCMAor5a6xID4gemjDoDsgIzVCQjEKK+WusiA+IGLEg287ICM1QkIyCivlrrMgPiBow6BpOyAjNUJCMwor5a60ID4gecOgbjsgIzVCQjQKK+WutSA+IHhpxIFvOyAjNUJCNQor5a62ID4gamnEgTsgIzVCQjYKK+WutyA+IHNoxJVuOyAjNUJCNwor5a64ID4gY2jDqW47ICM1QkI4CivlrrkgPiByw7NuZzsgIzVCQjkKK+WuuiA+IGh1xINuZzsgIzVCQkEKK+WuuyA+IG3DrDsgIzVCQkIKK+WuvCA+IGvDsnU7ICM1QkJDCivlrr0gPiBrdcSBbjsgIzVCQkQKK+WuviA+IGLEq247ICM1QkJFCivlrr8gPiBzw7k7ICM1QkJGCivlr4AgPiBjw6BpOyAjNUJDMAor5a+BID4gesSDbjsgIzVCQzEKK+WvgiA+IGrDrDsgIzVCQzIKK+WvgyA+IHl1xIFuOyAjNUJDMwor5a+EID4gasOsOyAjNUJDNAor5a+FID4gecOtbjsgIzVCQzUKK+WvhiA+IG3DrDsgIzVCQzYKK+WvhyA+IGvDsnU7ICM1QkM3Civlr4ggPiBxxKtuZzsgIzVCQzgKK+WviSA+IHF1w6g7ICM1QkM5Civlr4ogPiB6aMSTbjsgIzVCQ0EKK+WviyA+IGppxINuOyAjNUJDQgor5a+MID4gZsO5OyAjNUJDQwor5a+NID4gbsOtbmc7ICM1QkNECivlr44gPiBiw6xuZzsgIzVCQ0UKK+WvjyA+IGh1w6FuOyAjNUJDRgor5a+QID4gbcOoaTsgIzVCRDAKK+WvkSA+IHHErW47ICM1QkQxCivlr5IgPiBow6FuOyAjNUJEMgor5a+TID4gecO5OyAjNUJEMwor5a+UID4gc2jDrTsgIzVCRDQKK+WvlSA+IG7DrW5nOyAjNUJENQor5a+WID4gccOsbjsgIzVCRDYKK+WvlyA+IG7DrW5nOyAjNUJENwor5a+YID4gemjDrDsgIzVCRDgKK+WvmSA+IHnFrTsgIzVCRDkKK+WvmiA+IGLEg287ICM1QkRBCivlr5sgPiBrdcSBbjsgIzVCREIKK+WvnCA+IG7DrW5nOyAjNUJEQwor5a+dID4gccStbjsgIzVCREQKK+WvniA+IG3DsjsgIzVCREUKK+WvnyA+IGNow6E7ICM1QkRGCivlr6AgPiBqw7k7ICM1QkUwCivlr6EgPiBndcSDOyAjNUJFMQor5a+iID4gccStbjsgIzVCRTIKK+WvoyA+IGjFqzsgIzVCRTMKK+WvpCA+IHfDuTsgIzVCRTQKK+WvpSA+IGxpw6FvOyAjNUJFNQor5a+mID4gc2jDrTsgIzVCRTYKK+WvpyA+IHpow7k7ICM1QkU3Civlr6ggPiB6aMOgaTsgIzVCRTgKK+WvqSA+IHNoxJVuOyAjNUJFOQor5a+qID4gd8SVaTsgIzVCRUEKK+WvqyA+IHhpxJU7ICM1QkVCCivlr6wgPiBrdcSBbjsgIzVCRUMKK+WvrSA+IGjDuWk7ICM1QkVECivlr64gPiBsacOhbzsgIzVCRUUKK+WvryA+IGrDuW47ICM1QkVGCivlr7AgPiBodcOhbjsgIzVCRjAKK+WvsSA+IHnDrDsgIzVCRjEKK+WvsiA+IHnDrTsgIzVCRjIKK+WvsyA+IGLEg287ICM1QkYzCivlr7QgPiBxw6xuOyAjNUJGNAor5a+1ID4gY2jFj25nOyAjNUJGNQor5a+2ID4gYsSDbzsgIzVCRjYKK+WvtyA+IGbEk25nOyAjNUJGNwor5a+4ID4gY8O5bjsgIzVCRjgKK+WvuSA+IGTDuWk7ICM1QkY5Civlr7ogPiBzw6w7ICM1QkZBCivlr7sgPiB4w7puOyAjNUJGQgor5a+8ID4gZMSDbzsgIzVCRkMKK+WvvSA+IGzHnDsgIzVCRkQKK+WvviA+IGTDuWk7ICM1QkZFCivlr78gPiBzaMOydTsgIzVCRkYKK+WwgCA+IHDFjzsgIzVDMDAKK+WwgSA+IGbEk25nOyAjNUMwMQor5bCCID4gemh1xIFuOyAjNUMwMgor5bCDID4gZsWrOyAjNUMwMwor5bCEID4gc2jDqDsgIzVDMDQKK+WwhSA+IGvDqDsgIzVDMDUKK+WwhiA+IGppxIFuZzsgIzVDMDYKK+WwhyA+IGppxIFuZzsgIzVDMDcKK+WwiCA+IHpodcSBbjsgIzVDMDgKK+WwiSA+IHfDqGk7ICM1QzA5CivlsIogPiB6xatuOyAjNUMwQQor5bCLID4geMO6bjsgIzVDMEIKK+WwjCA+IHNow7k7ICM1QzBDCivlsI0gPiBkw7lpOyAjNUMwRAor5bCOID4gZMSDbzsgIzVDMEUKK+WwjyA+IHhpxINvOyAjNUMwRgor5bCQID4gasSrOyAjNUMxMAor5bCRID4gc2jEg287ICM1QzExCivlsJIgPiDElXI7ICM1QzEyCivlsJMgPiDElXI7ICM1QzEzCivlsJQgPiDElXI7ICM1QzE0CivlsJUgPiBnxIM7ICM1QzE1CivlsJYgPiBqacSBbjsgIzVDMTYKK+WwlyA+IHNow7o7ICM1QzE3CivlsJggPiBjaMOpbjsgIzVDMTgKK+WwmSA+IHNow6BuZzsgIzVDMTkKK+WwmiA+IHNow6BuZzsgIzVDMUEKK+WwmyA+IG1vOyAjNUMxQgor5bCcID4gZ8OhOyAjNUMxQwor5bCdID4gY2jDoW5nOyAjNUMxRAor5bCeID4gbGnDoG87ICM1QzFFCivlsJ8gPiB4acSDbjsgIzVDMUYKK+WwoCA+IHhpxINuOyAjNUMyMAor5bCiID4gd8SBbmc7ICM1QzIyCivlsKMgPiB3xIFuZzsgIzVDMjMKK+WwpCA+IHnDs3U7ICM1QzI0CivlsKUgPiBsacOgbzsgIzVDMjUKK+WwpiA+IGxpw6BvOyAjNUMyNgor5bCnID4gecOhbzsgIzVDMjcKK+WwqCA+IG3DoW5nOyAjNUMyOAor5bCpID4gd8SBbmc7ICM1QzI5CivlsKogPiB3xIFuZzsgIzVDMkEKK+WwqyA+IHfEgW5nOyAjNUMyQgor5bCsID4gZ8OgOyAjNUMyQwor5bCtID4gecOhbzsgIzVDMkQKK+WwriA+IGTDuW87ICM1QzJFCivlsK8gPiBrw7lpOyAjNUMyRgor5bCwID4gemjFj25nOyAjNUMzMAor5bCxID4gasOsdTsgIzVDMzEKK+WwsiA+IGfEgW47ICM1QzMyCivlsLMgPiBnxa07ICM1QzMzCivlsLQgPiBnxIFuOyAjNUMzNAor5bC1ID4gdMO6aTsgIzVDMzUKK+WwtiA+IGfEgW47ICM1QzM2CivlsLcgPiBnxIFuOyAjNUMzNwor5bC4ID4gc2jEqzsgIzVDMzgKK+WwuSA+IHnErW47ICM1QzM5CivlsLogPiBjaMStOyAjNUMzQQor5bC7ID4ga8SBbzsgIzVDM0IKK+WwvCA+IG7DrTsgIzVDM0MKK+WwvSA+IGrErW47ICM1QzNECivlsL4gPiB3xJVpOyAjNUMzRQor5bC/ID4gbmnDoG87ICM1QzNGCivlsYAgPiBqw7o7ICM1QzQwCivlsYEgPiBww6w7ICM1QzQxCivlsYIgPiBjw6luZzsgIzVDNDIKK+WxgyA+IHjDrDsgIzVDNDMKK+WxhCA+IGLEqzsgIzVDNDQKK+WxhSA+IGrFqzsgIzVDNDUKK+WxhiA+IGppw6g7ICM1QzQ2CivlsYcgPiB0acOhbjsgIzVDNDcKK+WxiCA+IHHFqzsgIzVDNDgKK+WxiSA+IHTDrDsgIzVDNDkKK+WxiiA+IGppw6g7ICM1QzRBCivlsYsgPiB3xas7ICM1QzRCCivlsYwgPiBkacSDbzsgIzVDNEMKK+WxjSA+IHNoxKs7ICM1QzRECivlsY4gPiBzaMStOyAjNUM0RQor5bGPID4gcMOtbmc7ICM1QzRGCivlsZAgPiBqxKs7ICM1QzUwCivlsZEgPiB4acOoOyAjNUM1MQor5bGSID4gY2jDqW47ICM1QzUyCivlsZMgPiB4w6w7ICM1QzUzCivlsZQgPiBuw607ICM1QzU0CivlsZUgPiB6aMSDbjsgIzVDNTUKK+WxliA+IHjEqzsgIzVDNTYKK+WxmCA+IG3Eg247ICM1QzU4CivlsZkgPiDEkzsgIzVDNTkKK+WxmiA+IGzDsnU7ICM1QzVBCivlsZsgPiBww61uZzsgIzVDNUIKK+WxnCA+IHTDrDsgIzVDNUMKK+WxnSA+IGbDqGk7ICM1QzVECivlsZ4gPiBzaMWtOyAjNUM1RQor5bGfID4geGnDqDsgIzVDNUYKK+WxoCA+IHTDujsgIzVDNjAKK+WxoSA+IGzHmjsgIzVDNjEKK+WxoiA+IGzHmjsgIzVDNjIKK+WxoyA+IHjErTsgIzVDNjMKK+WxpCA+IGPDqW5nOyAjNUM2NAor5bGlID4gbMeaOyAjNUM2NQor5bGmID4gasO5OyAjNUM2Ngor5bGnID4geGnDqDsgIzVDNjcKK+WxqCA+IGrDuTsgIzVDNjgKK+WxqSA+IGp1xJM7ICM1QzY5CivlsaogPiBsacOhbzsgIzVDNkEKK+WxqyA+IGp1w6k7ICM1QzZCCivlsawgPiBzaMWtOyAjNUM2Qwor5bGtID4geMOsOyAjNUM2RAor5bGuID4gY2jDqDsgIzVDNkUKK+WxryA+IHTDum47ICM1QzZGCivlsbAgPiBuw6w7ICM1QzcwCivlsbEgPiBzaMSBbjsgIzVDNzEKK+WxsyA+IHhpxIFuOyAjNUM3Mwor5bG0ID4gbMOsOyAjNUM3NAor5bG1ID4geHXEkzsgIzVDNzUKK+WxuCA+IGzDs25nOyAjNUM3OAor5bG5ID4gecOsOyAjNUM3OQor5bG6ID4gccStOyAjNUM3QQor5bG7ID4gcsOobjsgIzVDN0IKK+WxvCA+IHfDuTsgIzVDN0MKK+WxvSA+IGjDoG47ICM1QzdECivlsb4gPiBzaMSTbjsgIzVDN0UKK+WxvyA+IHnFrTsgIzVDN0YKK+WygCA+IGNoxas7ICM1QzgwCivlsoEgPiBzw7lpOyAjNUM4MQor5bKCID4gccStOyAjNUM4Mgor5bKEID4geXXDqDsgIzVDODQKK+WyhSA+IGLEg247ICM1Qzg1CivlsoYgPiB5xINvOyAjNUM4Ngor5bKHID4gw6FuZzsgIzVDODcKK+WyiCA+IHnDoTsgIzVDODgKK+WyiSA+IHfDuTsgIzVDODkKK+WyiiA+IGppw6k7ICM1QzhBCivlsosgPiDDqDsgIzVDOEIKK+WyjCA+IGrDrTsgIzVDOEMKK+WyjSA+IHFpxIFuOyAjNUM4RAor5bKOID4gZsSTbjsgIzVDOEUKK+WyjyA+IHl1w6FuOyAjNUM4Rgor5bKQID4gccOtOyAjNUM5MAor5bKRID4gY8OpbjsgIzVDOTEKK+WykiA+IHFpw6FuOyAjNUM5Mgor5bKTID4gccOtOyAjNUM5Mwor5bKUID4gY2jDoDsgIzVDOTQKK+WylSA+IGppw6g7ICM1Qzk1CivlspYgPiBxxas7ICM1Qzk2CivlspcgPiBnxINuZzsgIzVDOTcKK+WymCA+IHhpw6BuOyAjNUM5OAor5bKZID4gw6BvOyAjNUM5OQor5bKaID4gbMOhbjsgIzVDOUEKK+WymyA+IGTEg287ICM1QzlCCivlspwgPiBixIE7ICM1QzlDCivlsp0gPiB6w7lvOyAjNUM5RAor5bKeID4gesO5bzsgIzVDOUUKK+WynyA+IHnEg25nOyAjNUM5Rgor5bKgID4gasO5OyAjNUNBMAor5bKhID4gZ8SBbmc7ICM1Q0ExCivlsqIgPiBrxJU7ICM1Q0EyCivlsqMgPiBnxY91OyAjNUNBMwor5bKkID4geHXDqDsgIzVDQTQKK+WypSA+IGLEk2k7ICM1Q0E1CivlsqYgPiBsw6w7ICM1Q0E2CivlsqcgPiB0acOhbzsgIzVDQTcKK+WyqCA+IGrFqzsgIzVDQTgKK+WyqSA+IHnDoW47ICM1Q0E5CivlsqogPiBmw7o7ICM1Q0FBCivlsqsgPiB4w6x1OyAjNUNBQgor5bKsID4gamnEgzsgIzVDQUMKK+WyrSA+IGzDrW5nOyAjNUNBRAor5bKuID4gdMO6bzsgIzVDQUUKK+WyryA+IHDEk2k7ICM1Q0FGCivlsrAgPiB5xY91OyAjNUNCMAor5bKxID4gZMOgaTsgIzVDQjEKK+WysiA+IGt1w6BuZzsgIzVDQjIKK+WysyA+IHl1w6g7ICM1Q0IzCivlsrQgPiBxxas7ICM1Q0I0CivlsrUgPiBow7k7ICM1Q0I1CivlsrYgPiBww7I7ICM1Q0I2CivlsrcgPiBtw61uOyAjNUNCNwor5bK4ID4gw6BuOyAjNUNCOAor5bK5ID4gdGnDoW87ICM1Q0I5CivlsrogPiBsw61uZzsgIzVDQkEKK+WyuyA+IGNow607ICM1Q0JCCivlsr0gPiBkxY1uZzsgIzVDQkQKK+WyvyA+IGvFq2k7ICM1Q0JGCivls4AgPiB4w6x1OyAjNUNDMAor5bOBID4gbcSDbzsgIzVDQzEKK+WzgiA+IHTDs25nOyAjNUNDMgor5bODID4geHXDqTsgIzVDQzMKK+WzhCA+IHnDrDsgIzVDQzQKK+WzhiA+IGjEkzsgIzVDQzYKK+WzhyA+IGvEkzsgIzVDQzcKK+WziCA+IGzDuW87ICM1Q0M4Civls4kgPiDEkzsgIzVDQzkKK+WziiA+IGbDuTsgIzVDQ0EKK+WziyA+IHjDum47ICM1Q0NCCivls4wgPiBkacOpOyAjNUNDQwor5bONID4gbMO5OyAjNUNDRAor5bOOID4gxIFuOyAjNUNDRQor5bOPID4gxJVyOyAjNUNDRgor5bOQID4gZ8SBaTsgIzVDRDAKK+WzkSA+IHF1w6FuOyAjNUNEMQor5bOSID4gdMOzbmc7ICM1Q0QyCivls5MgPiB5w607ICM1Q0QzCivls5QgPiBtxa07ICM1Q0Q0Civls5UgPiBzaMOtOyAjNUNENQor5bOWID4gxIFuOyAjNUNENgor5bOXID4gd8OpaTsgIzVDRDcKK+WzmCA+IGjFqzsgIzVDRDgKK+WzmSA+IHpow6w7ICM1Q0Q5Civls5ogPiBtw6w7ICM1Q0RBCivls5sgPiBsxK07ICM1Q0RCCivls5wgPiBqxKs7ICM1Q0RDCivls50gPiB0w7NuZzsgIzVDREQKK+WzniA+IHfDqWk7ICM1Q0RFCivls58gPiB5w7J1OyAjNUNERgor5bOhID4geGnDoTsgIzVDRTEKK+WzoiA+IGzErTsgIzVDRTIKK+WzoyA+IHnDoW87ICM1Q0UzCivls6QgPiBqacOgbzsgIzVDRTQKK+WzpSA+IHpoxJNuZzsgIzVDRTUKK+WzpiA+IGx1w6FuOyAjNUNFNgor5bOnID4gamnEgW87ICM1Q0U3Civls6ggPiDDqTsgIzVDRTgKK+WzqSA+IMOpOyAjNUNFOQor5bOqID4gecO5OyAjNUNFQQor5bOrID4gecOpOyAjNUNFQgor5bOsID4gYsWrOyAjNUNFQwor5bOtID4gcWnDoG87ICM1Q0VECivls64gPiBxxatuOyAjNUNFRQor5bOvID4gZsSTbmc7ICM1Q0VGCivls7AgPiBmxJNuZzsgIzVDRjAKK+WzsSA+IG7DoW87ICM1Q0YxCivls7IgPiBsxK07ICM1Q0YyCivls7MgPiB5w7N1OyAjNUNGMwor5bO0ID4geGnDoG47ICM1Q0Y0Civls7UgPiBow7NuZzsgIzVDRjUKK+WztiA+IGTEg287ICM1Q0Y2Civls7cgPiBzaMSTbjsgIzVDRjcKK+WzuCA+IGNow6luZzsgIzVDRjgKK+WzuSA+IHTDujsgIzVDRjkKK+WzuiA+IGfElW5nOyAjNUNGQQor5bO7ID4gasO5bjsgIzVDRkIKK+WzvCA+IGjDoG87ICM1Q0ZDCivls70gPiB4acOhOyAjNUNGRAor5bO+ID4gecSrbjsgIzVDRkUKK+WzvyA+IHnFrTsgIzVDRkYKK+W0gCA+IGzDoG5nOyAjNUQwMAor5bSBID4ga8SDbjsgIzVEMDEKK+W0giA+IGzDoW87ICM1RDAyCivltIMgPiBsw6FpOyAjNUQwMwor5bSEID4geGnEg247ICM1RDA0CivltIUgPiBxdcOoOyAjNUQwNQor5bSGID4ga8WNbmc7ICM1RDA2CivltIcgPiBjaMOzbmc7ICM1RDA3CivltIggPiBjaMOzbmc7ICM1RDA4CivltIkgPiB0w6A7ICM1RDA5CivltIogPiBsaW47ICM1RDBBCivltIsgPiBodcOhOyAjNUQwQgor5bSMID4gasWrOyAjNUQwQwor5bSNID4gbMOhaTsgIzVEMEQKK+W0jiA+IHHDrTsgIzVEMEUKK+W0jyA+IG3DrW47ICM1RDBGCivltJAgPiBrxatuOyAjNUQxMAor5bSRID4ga8WrbjsgIzVEMTEKK+W0kiA+IHrDujsgIzVEMTIKK+W0kyA+IGfDuTsgIzVEMTMKK+W0lCA+IGPFq2k7ICM1RDE0CivltJUgPiB5w6E7ICM1RDE1CivltJYgPiB5w6E7ICM1RDE2CivltJcgPiBnxINuZzsgIzVEMTcKK+W0mCA+IGzDum47ICM1RDE4CivltJkgPiBsw7puOyAjNUQxOQor5bSaID4gbMOpbmc7ICM1RDFBCivltJsgPiBqdcOpOyAjNUQxQgor5bScID4gZMWrbzsgIzVEMUMKK+W0nSA+IHpoxJNuZzsgIzVEMUQKK+W0niA+IGfFq287ICM1RDFFCivltJ8gPiB5w61uOyAjNUQxRgor5bSgID4gZMWNbmc7ICM1RDIwCivltKEgPiBow6FuOyAjNUQyMQor5bSiID4gemjEk25nOyAjNUQyMgor5bSjID4gd8SVaTsgIzVEMjMKK+W0pCA+IHnDoW87ICM1RDI0CivltKUgPiBwxK07ICM1RDI1CivltKYgPiB5xIFuOyAjNUQyNgor5bSnID4gc8WNbmc7ICM1RDI3CivltKggPiBqacOpOyAjNUQyOAor5bSpID4gYsSTbmc7ICM1RDI5CivltKogPiB6w7o7ICM1RDJBCivltKsgPiBqdcOpOyAjNUQyQgor5bSsID4gZMWNbmc7ICM1RDJDCivltK0gPiB6aMSDbjsgIzVEMkQKK+W0riA+IGfDuTsgIzVEMkUKK+W0ryA+IHnDrW47ICM1RDJGCivltLEgPiB6w6k7ICM1RDMxCivltLIgPiBodcOhbmc7ICM1RDMyCivltLMgPiB5w7o7ICM1RDMzCivltLQgPiB3xJNpOyAjNUQzNAor5bS1ID4gecOhbmc7ICM1RDM1CivltLYgPiBmxJNuZzsgIzVEMzYKK+W0tyA+IHHDrXU7ICM1RDM3CivltLggPiBkw7luOyAjNUQzOAor5bS5ID4gdMOtOyAjNUQzOQor5bS6ID4gecStOyAjNUQzQQor5bS7ID4gemjDrDsgIzVEM0IKK+W0vCA+IHNow6w7ICM1RDNDCivltL0gPiB6xINpOyAjNUQzRAor5bS+ID4gecSDbzsgIzVEM0UKK+W0vyA+IMOoOyAjNUQzRgor5bWAID4gemjDuTsgIzVENDAKK+W1gSA+IGvEgW47ICM1RDQxCivltYIgPiBsx5w7ICM1RDQyCivltYMgPiB5xINuOyAjNUQ0Mwor5bWEID4gbcSVaTsgIzVENDQKK+W1hSA+IGfEgW47ICM1RDQ1CivltYYgPiBqxKs7ICM1RDQ2CivltYcgPiBqxKs7ICM1RDQ3CivltYggPiBodcSDbjsgIzVENDgKK+W1iSA+IHTDrW5nOyAjNUQ0OQor5bWKID4gc2jDqG5nOyAjNUQ0QQor5bWLID4gbcOpaTsgIzVENEIKK+W1jCA+IHFpw6BuOyAjNUQ0Qwor5bWNID4gd8O5OyAjNUQ0RAor5bWOID4gecO6OyAjNUQ0RQor5bWPID4gesWNbmc7ICM1RDRGCivltZAgPiBsw6FuOyAjNUQ1MAor5bWRID4ganXDqTsgIzVENTEKK+W1kiA+IHnDoW47ICM1RDUyCivltZMgPiB5w6FuOyAjNUQ1Mwor5bWUID4gd8SVaTsgIzVENTQKK+W1lSA+IHrFjW5nOyAjNUQ1NQor5bWWID4gY2jDoTsgIzVENTYKK+W1lyA+IHPDuWk7ICM1RDU3CivltZggPiByw7NuZzsgIzVENTgKK+W1miA+IHHEq247ICM1RDVBCivltZsgPiB5w7o7ICM1RDVCCivltZ0gPiBsxY91OyAjNUQ1RAor5bWeID4gdMO6OyAjNUQ1RQor5bWfID4gZMWraTsgIzVENUYKK+W1oCA+IHjEqzsgIzVENjAKK+W1oSA+IHfEk25nOyAjNUQ2MQor5bWiID4gY8SBbmc7ICM1RDYyCivltaMgPiBkxIFuZzsgIzVENjMKK+W1pCA+IGjDs25nOyAjNUQ2NAor5bWlID4gamnDqTsgIzVENjUKK+W1piA+IMOhaTsgIzVENjYKK+W1pyA+IGzDrXU7ICM1RDY3CivltaggPiB3xa07ICM1RDY4CivltakgPiBzxY1uZzsgIzVENjkKK+W1qiA+IHFpxIFvOyAjNUQ2QQor5bWrID4gesSrOyAjNUQ2Qgor5bWsID4gd8OpaTsgIzVENkMKK+W1rSA+IGLEk25nOyAjNUQ2RAor5bWuID4gZGnEgW47ICM1RDZFCivlta8gPiBjw7pvOyAjNUQ2Rgor5bWwID4gcWnEg247ICM1RDcwCivltbEgPiB5xY9uZzsgIzVENzEKK+W1siA+IG5pw6g7ICM1RDcyCivltbMgPiBjw7pvOyAjNUQ3Mwor5bW0ID4gasOtOyAjNUQ3NAor5bW3ID4gc8WPbmc7ICM1RDc3CivltbggPiB6xY1uZzsgIzVENzgKK+W1uSA+IGppw6BuZzsgIzVENzkKK+W1uiA+IGxpw6FvOyAjNUQ3QQor5bW7ID4ga2FuZzsgIzVEN0IKK+W1vCA+IGNoxINuOyAjNUQ3Qwor5bW9ID4gZGnDqTsgIzVEN0QKK+W1viA+IGPEk247ICM1RDdFCivltb8gPiBkxK1uZzsgIzVEN0YKK+W2gCA+IHTFqzsgIzVEODAKK+W2gSA+IGzFj3U7ICM1RDgxCivltoIgPiB6aMOgbmc7ICM1RDgyCivltoMgPiB6aMSDbjsgIzVEODMKK+W2hCA+IHpoxINuOyAjNUQ4NAor5baFID4gw6FvOyAjNUQ4NQor5baGID4gY8OhbzsgIzVEODYKK+W2hyA+IHHFqzsgIzVEODcKK+W2iCA+IHFpxIFuZzsgIzVEODgKK+W2iSA+IHrFq2k7ICM1RDg5CivltoogPiB6xa1pOyAjNUQ4QQor5baLID4gZMSDbzsgIzVEOEIKK+W2jCA+IGTEg287ICM1RDhDCivlto0gPiB4w607ICM1RDhECivlto4gPiB5w7k7ICM1RDhFCivlto8gPiBiw7M7ICM1RDhGCivltpAgPiBsw7NuZzsgIzVEOTAKK+W2kSA+IHhpxINuZzsgIzVEOTEKK+W2kiA+IGPDqW5nOyAjNUQ5Mgor5baTID4gYsWNOyAjNUQ5Mwor5baUID4gccSrbjsgIzVEOTQKK+W2lSA+IGppxIFvOyAjNUQ5NQor5baWID4gecSDbjsgIzVEOTYKK+W2lyA+IGzDoW87ICM1RDk3CivltpggPiB6aMOgbjsgIzVEOTgKK+W2mSA+IGzDrW47ICM1RDk5CivltpogPiBsacOhbzsgIzVEOUEKK+W2myA+IGxpw6FvOyAjNUQ5Qgor5bacID4gasSrbjsgIzVEOUMKK+W2nSA+IGTDqG5nOyAjNUQ5RAor5baeID4gZMO5bzsgIzVEOUUKK+W2nyA+IHrFq247ICM1RDlGCivltqAgPiBqacOgbzsgIzVEQTAKK+W2oSA+IGfDuWk7ICM1REExCivltqIgPiB5w6FvOyAjNURBMgor5bajID4gcWnDoW87ICM1REEzCivltqQgPiB5w6FvOyAjNURBNAor5balID4ganXDqTsgIzVEQTUKK+W2piA+IHpoxIFuOyAjNURBNgor5banID4gecOsOyAjNURBNwor5baoID4geHXDqTsgIzVEQTgKK+W2qSA+IG7DoW87ICM1REE5CivltqogPiB5w6g7ICM1REFBCivltqsgPiB5w6g7ICM1REFCCivltqwgPiB5w607ICM1REFDCivltq0gPiDDqDsgIzVEQUQKK+W2riA+IHhpxINuOyAjNURBRQor5bavID4gasOtOyAjNURBRgor5bawID4geGnDqDsgIzVEQjAKK+W2sSA+IGvElTsgIzVEQjEKK+W2siA+IHjEqzsgIzVEQjIKK+W2syA+IGTDrDsgIzVEQjMKK+W2tCA+IMOgbzsgIzVEQjQKK+W2tSA+IHrFrWk7ICM1REI1CivltrcgPiBuw6w7ICM1REI3CivltrggPiByw7NuZzsgIzVEQjgKK+W2uSA+IGTEg287ICM1REI5CivltrogPiBsxK1uZzsgIzVEQkEKK+W2uyA+IHrDoTsgIzVEQkIKK+W2vCA+IHnFrTsgIzVEQkMKK+W2vSA+IHl1w6g7ICM1REJECivltr4gPiB5xK1uOyAjNURCRQor5beAID4gamnEkzsgIzVEQzAKK+W3gSA+IGzDrDsgIzVEQzEKK+W3giA+IHPFrWk7ICM1REMyCivlt4MgPiBsw7NuZzsgIzVEQzMKK+W3hCA+IGzDs25nOyAjNURDNAor5beFID4gZGnEgW47ICM1REM1Civlt4YgPiB5w61uZzsgIzVEQzYKK+W3hyA+IHjEqzsgIzVEQzcKK+W3iCA+IGrDujsgIzVEQzgKK+W3iSA+IGNow6FuOyAjNURDOQor5beKID4gecStbmc7ICM1RENBCivlt4sgPiBrxatpOyAjNURDQgor5beMID4gecOhbjsgIzVEQ0MKK+W3jSA+IHfEk2k7ICM1RENECivlt44gPiBuw6FvOyAjNURDRQor5bePID4gcXXDoW47ICM1RENGCivlt5AgPiBjaMSDbzsgIzVERDAKK+W3kSA+IGN1w6FuOyAjNUREMQor5beSID4gbHXDoW47ICM1REQyCivlt5MgPiBkacSBbjsgIzVERDMKK+W3lCA+IGRpxIFuOyAjNURENAor5beWID4gecOhbjsgIzVERDYKK+W3lyA+IHnDoW47ICM1REQ3Civlt5ggPiB5xINuOyAjNUREOAor5beZID4gbsOhbzsgIzVERDkKK+W3miA+IHnEg247ICM1RERBCivlt5sgPiBjaHXEgW47ICM1RERCCivlt5wgPiBnw7lpOyAjNUREQwor5bedID4gY2h1xIFuOyAjNURERAor5beeID4gemjFjXU7ICM1RERFCivlt58gPiBodcSBbmc7ICM1RERGCivlt6AgPiBqxKtuZzsgIzVERTAKK+W3oSA+IHjDum47ICM1REUxCivlt6IgPiBjaMOhbzsgIzVERTIKK+W3oyA+IGNow6FvOyAjNURFMwor5bekID4gbGnEkzsgIzVERTQKK+W3pSA+IGfFjW5nOyAjNURFNQor5bemID4gesWtbzsgIzVERTYKK+W3pyA+IHFpxINvOyAjNURFNwor5beoID4gasO5OyAjNURFOAor5bepID4gZ8WPbmc7ICM1REU5Civlt6sgPiB3xas7ICM1REVCCivlt64gPiBjaMSBaTsgIzVERUUKK+W3ryA+IHHDrXU7ICM1REVGCivlt7AgPiBxw611OyAjNURGMAor5bexID4gasStOyAjNURGMQor5beyID4gecStOyAjNURGMgor5bezID4gc8OsOyAjNURGMwor5be0ID4gYsSBOyAjNURGNAor5be1ID4gemjEqzsgIzVERjUKK+W3tiA+IHpoxIFvOyAjNURGNgor5be3ID4geGnDoG5nOyAjNURGNwor5be4ID4gecOtOyAjNURGOAor5be5ID4gasStbjsgIzVERjkKK+W3uiA+IHjDuW47ICM1REZBCivlt7sgPiBqdcOgbjsgIzVERkIKK+W3vSA+IHjDuW47ICM1REZECivlt74gPiBqxKtuOyAjNURGRQor5be/ID4gZsO6OyAjNURGRgor5biAID4gesSBOyAjNUUwMAor5biBID4gYsOsOyAjNUUwMQor5biCID4gc2jDrDsgIzVFMDIKK+W4gyA+IGLDuTsgIzVFMDMKK+W4hCA+IGTEq25nOyAjNUUwNAor5biFID4gc2h1w6BpOyAjNUUwNQor5biGID4gZsSBbjsgIzVFMDYKK+W4hyA+IG5pw6g7ICM1RTA3CivluIggPiBzaMSrOyAjNUUwOAor5biJID4gZsSTbjsgIzVFMDkKK+W4iiA+IHDDoDsgIzVFMEEKK+W4iyA+IHpoxK07ICM1RTBCCivluIwgPiB4xKs7ICM1RTBDCivluI0gPiBow7k7ICM1RTBECivluI4gPiBkw6BuOyAjNUUwRQor5biPID4gd8OpaTsgIzVFMEYKK+W4kCA+IHpow6BuZzsgIzVFMTAKK+W4kSA+IHTEg25nOyAjNUUxMQor5biSID4gZMOgaTsgIzVFMTIKK+W4kyA+IG3DoDsgIzVFMTMKK+W4lCA+IHDDqGk7ICM1RTE0CivluJUgPiBww6A7ICM1RTE1CivluJYgPiB0acSTOyAjNUUxNgor5biXID4gZsO6OyAjNUUxNwor5biYID4gbGnDoW47ICM1RTE4CivluJkgPiB6aMOsOyAjNUUxOQor5biaID4gemjFj3U7ICM1RTFBCivluJsgPiBiw7M7ICM1RTFCCivluJwgPiB6aMOsOyAjNUUxQwor5bidID4gZMOsOyAjNUUxRAor5bieID4gbcOyOyAjNUUxRQor5bifID4gecOsOyAjNUUxRgor5bigID4gecOsOyAjNUUyMAor5bihID4gcMOtbmc7ICM1RTIxCivluKIgPiBxacOgOyAjNUUyMgor5bijID4ganXDoG47ICM1RTIzCivluKQgPiByw7o7ICM1RTI0CivluKUgPiBzaHXDoGk7ICM1RTI1CivluKYgPiBkw6BpOyAjNUUyNgor5binID4gemjDqG5nOyAjNUUyNwor5bioID4gc2jDuWk7ICM1RTI4CivluKkgPiBxacOgbzsgIzVFMjkKK+W4qiA+IHpoxJNuOyAjNUUyQQor5birID4gc2jEqzsgIzVFMkIKK+W4rCA+IHHDum47ICM1RTJDCivluK0gPiB4w607ICM1RTJECivluK4gPiBixIFuZzsgIzVFMkUKK+W4ryA+IGTDoGk7ICM1RTJGCivluLAgPiBnxatpOyAjNUUzMAor5bixID4gY2jDs3U7ICM1RTMxCivluLIgPiBww61uZzsgIzVFMzIKK+W4syA+IHpow6BuZzsgIzVFMzMKK+W4tCA+IHNoxIE7ICM1RTM0CivluLUgPiB3xIFuOyAjNUUzNQor5bi2ID4gZMOgaTsgIzVFMzYKK+W4tyA+IHfDqWk7ICM1RTM3CivluLggPiBjaMOhbmc7ICM1RTM4CivluLkgPiBzaMOgOyAjNUUzOQor5bi6ID4gccOtOyAjNUUzQQor5bi7ID4gesOpOyAjNUUzQgor5bi8ID4gZ8O6bzsgIzVFM0MKK+W4vSA+IG3DoG87ICM1RTNECivluL4gPiBkxa07ICM1RTNFCivluL8gPiBow7N1OyAjNUUzRgor5bmAID4gemjDqG5nOyAjNUU0MAor5bmBID4geMWrOyAjNUU0MQor5bmCID4gbcOsOyAjNUU0Mgor5bmDID4gd8OpaTsgIzVFNDMKK+W5hCA+IHfDsjsgIzVFNDQKK+W5hSA+IGbDujsgIzVFNDUKK+W5hiA+IHnDrDsgIzVFNDYKK+W5hyA+IGLEgW5nOyAjNUU0Nwor5bmIID4gcMOtbmc7ICM1RTQ4CivluYogPiBnxY1uZzsgIzVFNEEKK+W5iyA+IHDDoW47ICM1RTRCCivluYwgPiBodcSDbmc7ICM1RTRDCivluY0gPiBkxIFvOyAjNUU0RAor5bmOID4gbcOsOyAjNUU0RQor5bmPID4gamnEgTsgIzVFNEYKK+W5kCA+IHTDqW5nOyAjNUU1MAor5bmRID4gaMWraTsgIzVFNTEKK+W5kiA+IHpoxY1uZzsgIzVFNTIKK+W5kyA+IHNoxIFuOyAjNUU1Mwor5bmUID4gbcOgbjsgIzVFNTQKK+W5lSA+IG3DuTsgIzVFNTUKK+W5liA+IGJpxIFvOyAjNUU1Ngor5bmXID4gZ8O6bzsgIzVFNTcKK+W5mCA+IHrDqTsgIzVFNTgKK+W5mSA+IG3DuTsgIzVFNTkKK+W5miA+IGLEgW5nOyAjNUU1QQor5bmbID4gemjDoG5nOyAjNUU1Qgor5bmcID4gasStb25nOyAjNUU1Qwor5bmdID4gY2jEg247ICM1RTVECivluZ4gPiBmw7o7ICM1RTVFCivluZ8gPiB6aMOsOyAjNUU1Rgor5bmgID4gaMWrOyAjNUU2MAor5bmhID4gZsSBbjsgIzVFNjEKK+W5oiA+IGNodcOhbmc7ICM1RTYyCivluaMgPiBiw6w7ICM1RTYzCivluaYgPiBtw6w7ICM1RTY2CivluacgPiBxacSBbzsgIzVFNjcKK+W5qCA+IGNoxIFuOyAjNUU2OAor5bmpID4gZsOpbjsgIzVFNjkKK+W5qiA+IG3DqW5nOyAjNUU2QQor5bmrID4gYsSBbmc7ICM1RTZCCivluawgPiBjaMOzdTsgIzVFNkMKK+W5rSA+IG1pw6g7ICM1RTZECivlua4gPiBjaMO6OyAjNUU2RQor5bmvID4gamnDqTsgIzVFNkYKK+W5sCA+IHhpxINuOyAjNUU3MAor5bmxID4gbMOhbjsgIzVFNzEKK+W5siA+IGfEgW47ICM1RTcyCivlubMgPiBww61uZzsgIzVFNzMKK+W5tCA+IG5pw6FuOyAjNUU3NAor5bm1ID4gcWnEgW47ICM1RTc1CivlubYgPiBiw6xuZzsgIzVFNzYKK+W5tyA+IGLDrG5nOyAjNUU3Nwor5bm4ID4geMOsbmc7ICM1RTc4CivlubkgPiBnw6BuOyAjNUU3OQor5bm6ID4gecSBbzsgIzVFN0EKK+W5uyA+IGh1w6BuOyAjNUU3Qgor5bm8ID4gecOydTsgIzVFN0MKK+W5vSA+IHnFjXU7ICM1RTdECivlub4gPiBqxK07ICM1RTdFCivlub8gPiB5xINuOyAjNUU3Rgor5bqAID4gcMStOyAjNUU4MAor5bqBID4gdMSrbmc7ICM1RTgxCivluoIgPiB6w6g7ICM1RTgyCivluoMgPiBndcSDbmc7ICM1RTgzCivluoQgPiB6aHXEgW5nOyAjNUU4NAor5bqFID4gbW87ICM1RTg1CivluoYgPiBxw6xuZzsgIzVFODYKK+W6hyA+IGLDrDsgIzVFODcKK+W6iCA+IHHDrW47ICM1RTg4CivluokgPiBkw7luOyAjNUU4OQor5bqKID4gY2h1w6FuZzsgIzVFOEEKK+W6iyA+IGfFrWk7ICM1RThCCivluowgPiB5xIM7ICM1RThDCivluo0gPiBiw6BpOyAjNUU4RAor5bqOID4gamnDqDsgIzVFOEUKK+W6jyA+IHjDuTsgIzVFOEYKK+W6kCA+IGzDujsgIzVFOTAKK+W6kSA+IHfFrTsgIzVFOTEKK+W6kyA+IGvDuTsgIzVFOTMKK+W6lCA+IHnDrG5nOyAjNUU5NAor5bqVID4gZMStOyAjNUU5NQor5bqWID4gcMOhbzsgIzVFOTYKK+W6lyA+IGRpw6BuOyAjNUU5Nwor5bqYID4gecSBOyAjNUU5OAor5bqZID4gbWnDoG87ICM1RTk5CivlupogPiBnxJNuZzsgIzVFOUEKK+W6myA+IGPEqzsgIzVFOUIKK+W6nCA+IGbFrTsgIzVFOUMKK+W6nSA+IHTDs25nOyAjNUU5RAor5bqeID4gcMOhbmc7ICM1RTlFCivlup8gPiBmw6hpOyAjNUU5Rgor5bqgID4geGnDoW5nOyAjNUVBMAor5bqhID4gecStOyAjNUVBMQor5bqiID4gemjDrDsgIzVFQTIKK+W6oyA+IHRpxIFvOyAjNUVBMwor5bqkID4gemjDrDsgIzVFQTQKK+W6pSA+IHjEq3U7ICM1RUE1CivluqYgPiBkw7k7ICM1RUE2CivluqcgPiB6w7lvOyAjNUVBNwor5bqoID4geGnEgW87ICM1RUE4CivluqkgPiB0w7o7ICM1RUE5CivluqogPiBnxa1pOyAjNUVBQQor5bqrID4ga8O5OyAjNUVBQgor5bqsID4gcMOhbmc7ICM1RUFDCivluq0gPiB0w61uZzsgIzVFQUQKK+W6riA+IHnFj3U7ICM1RUFFCivluq8gPiBixas7ICM1RUFGCivlurAgPiBkxKtuZzsgIzVFQjAKK+W6sSA+IGNoxJVuZzsgIzVFQjEKK+W6siA+IGzDoWk7ICM1RUIyCivlurMgPiBixJNpOyAjNUVCMwor5bq0ID4gasOtOyAjNUVCNAor5bq1ID4gxIFuOyAjNUVCNQor5bq2ID4gc2jDuTsgIzVFQjYKK+W6tyA+IGvEgW5nOyAjNUVCNwor5bq4ID4gecWNbmc7ICM1RUI4CivlurkgPiB0xa1vOyAjNUVCOQor5bq6ID4gc8WNbmc7ICM1RUJBCivlursgPiBzaMO5OyAjNUVCQgor5bq8ID4gccStbmc7ICM1RUJDCivlur0gPiB5w7k7ICM1RUJECivlur4gPiB5xa07ICM1RUJFCivlur8gPiBtacOgbzsgIzVFQkYKK+W7gCA+IHPFjXU7ICM1RUMwCivlu4EgPiBjw6g7ICM1RUMxCivlu4IgPiB4acSBbmc7ICM1RUMyCivlu4MgPiBmw6hpOyAjNUVDMwor5buEID4gasOsdTsgIzVFQzQKK+W7hSA+IGjDqTsgIzVFQzUKK+W7hiA+IGjDuWk7ICM1RUM2Civlu4cgPiBsw6x1OyAjNUVDNwor5buIID4gc2jDoDsgIzVFQzgKK+W7iSA+IGxpw6FuOyAjNUVDOQor5buKID4gbMOhbmc7ICM1RUNBCivlu4sgPiBzxY11OyAjNUVDQgor5buMID4gamnDoG47ICM1RUNDCivlu40gPiBwxY91OyAjNUVDRAor5buOID4gccStbmc7ICM1RUNFCivlu48gPiBqw6x1OyAjNUVDRgor5buQID4gasOsdTsgIzVFRDAKK+W7kSA+IHHDrW47ICM1RUQxCivlu5IgPiDDoW87ICM1RUQyCivlu5MgPiBrw7lvOyAjNUVEMwor5buUID4gbMOzdTsgIzVFRDQKK+W7lSA+IHnEq247ICM1RUQ1Civlu5YgPiBsacOgbzsgIzVFRDYKK+W7lyA+IGTDoGk7ICM1RUQ3Civlu5ggPiBsw7k7ICM1RUQ4Civlu5kgPiB5w6w7ICM1RUQ5Civlu5ogPiBjaMO6OyAjNUVEQQor5bubID4gY2jDoW47ICM1RURCCivlu5wgPiB0xas7ICM1RURDCivlu50gPiBzxKs7ICM1RURECivlu54gPiB4xKtuOyAjNUVERQor5bufID4gbWnDoG87ICM1RURGCivlu6AgPiBjaMSDbmc7ICM1RUUwCivlu6EgPiB3xa07ICM1RUUxCivlu6IgPiBmw6hpOyAjNUVFMgor5bujID4gZ3XEg25nOyAjNUVFMwor5bulID4ga3XDoGk7ICM1RUU1Civlu6YgPiBiw6w7ICM1RUU2Civlu6cgPiBxacOhbmc7ICM1RUU3Civlu6ggPiB4acOoOyAjNUVFOAor5bupID4gbMStbjsgIzVFRTkKK+W7qiA+IGzErW47ICM1RUVBCivlu6sgPiBsacOhbzsgIzVFRUIKK+W7rCA+IGzDujsgIzVFRUMKK+W7riA+IHnDrW5nOyAjNUVFRQor5buvID4geGnEgW47ICM1RUVGCivlu7AgPiB0xKtuZzsgIzVFRjAKK+W7sSA+IHnFjW5nOyAjNUVGMQor5buyID4gbMOtOyAjNUVGMgor5buzID4gdMSrbmc7ICM1RUYzCivlu7QgPiB5xK1uOyAjNUVGNAor5bu1ID4geMO6bjsgIzVFRjUKK+W7tiA+IHnDoW47ICM1RUY2Civlu7cgPiB0w61uZzsgIzVFRjcKK+W7uCA+IGTDrTsgIzVFRjgKK+W7uSA+IHDDsjsgIzVFRjkKK+W7uiA+IGppw6BuOyAjNUVGQQor5bu7ID4gaMO6aTsgIzVFRkIKK+W7vCA+IG7Eg2k7ICM1RUZDCivlu70gPiBow7ppOyAjNUVGRAor5bu+ID4gZ8Oybmc7ICM1RUZFCivlu78gPiBuacOgbjsgIzVFRkYKK+W8gCA+IGvEgWk7ICM1RjAwCivlvIEgPiBiacOgbjsgIzVGMDEKK+W8giA+IHnDrDsgIzVGMDIKK+W8gyA+IHHDrDsgIzVGMDMKK+W8hCA+IG7Dsm5nOyAjNUYwNAor5byFID4gZsOpbjsgIzVGMDUKK+W8hiA+IGrFrTsgIzVGMDYKK+W8hyA+IHnEg247ICM1RjA3CivlvIggPiB5w6w7ICM1RjA4CivlvIkgPiB6w6BuZzsgIzVGMDkKK+W8iiA+IGLDrDsgIzVGMEEKK+W8iyA+IHnDrDsgIzVGMEIKK+W8jCA+IHnEqzsgIzVGMEMKK+W8jSA+IMOocjsgIzVGMEQKK+W8jiA+IHPEgW47ICM1RjBFCivlvI8gPiBzaMOsOyAjNUYwRgor5byQID4gw6hyOyAjNUYxMAor5byRID4gc2jDrDsgIzVGMTEKK+W8kiA+IHNow6w7ICM1RjEyCivlvJMgPiBnxY1uZzsgIzVGMTMKK+W8lCA+IGRpw6BvOyAjNUYxNAor5byVID4gecStbjsgIzVGMTUKK+W8liA+IGjDuTsgIzVGMTYKK+W8lyA+IGbDujsgIzVGMTcKK+W8mCA+IGjDs25nOyAjNUYxOAor5byZID4gd8WrOyAjNUYxOQor5byaID4gdMO6aTsgIzVGMUEKK+W8myA+IGNow607ICM1RjFCCivlvJwgPiBqacOgbmc7ICM1RjFDCivlvJ0gPiBiw6A7ICM1RjFECivlvJ4gPiBzaMSVbjsgIzVGMUUKK+W8nyA+IGTDrDsgIzVGMUYKK+W8oCA+IHpoxIFuZzsgIzVGMjAKK+W8oSA+IGp1w6k7ICM1RjIxCivlvKIgPiB0xIFvOyAjNUYyMgor5byjID4gZsWtOyAjNUYyMwor5bykID4gZMStOyAjNUYyNAor5bylID4gbcOtOyAjNUYyNQor5bymID4geGnDoW47ICM1RjI2CivlvKcgPiBow7o7ICM1RjI3CivlvKggPiBjaMSBbzsgIzVGMjgKK+W8qSA+IG7FrTsgIzVGMjkKK+W8qiA+IGrDrG5nOyAjNUYyQQor5byrID4gemjElW47ICM1RjJCCivlvKwgPiB5w607ICM1RjJDCivlvK0gPiBtxK07ICM1RjJECivlvK4gPiBxdcSBbjsgIzVGMkUKK+W8ryA+IHfEgW47ICM1RjJGCivlvLAgPiBzaMSBbzsgIzVGMzAKK+W8sSA+IHLDuW87ICM1RjMxCivlvLIgPiB4dcSBbjsgIzVGMzIKK+W8syA+IGrDrG5nOyAjNUYzMwor5by0ID4gZMWrbjsgIzVGMzQKK+W8tSA+IHpoxIFuZzsgIzVGMzUKK+W8tiA+IGppw6BuZzsgIzVGMzYKK+W8tyA+IHFpw6FuZzsgIzVGMzcKK+W8uCA+IHDDqW5nOyAjNUYzOAor5by5ID4gZMOgbjsgIzVGMzkKK+W8uiA+IHFpw6FuZzsgIzVGM0EKK+W8uyA+IGLDrDsgIzVGM0IKK+W8vCA+IGLDrDsgIzVGM0MKK+W8vSA+IHNow6g7ICM1RjNECivlvL4gPiBkw6BuOyAjNUYzRQor5by/ID4gamnEg247ICM1RjNGCivlvYAgPiBnw7J1OyAjNUY0MAor5b2CID4gZsSBOyAjNUY0Mgor5b2DID4gYsOsOyAjNUY0Mwor5b2EID4ga8WNdTsgIzVGNDQKK+W9hiA+IGJpw6g7ICM1RjQ2CivlvYcgPiB4acSBbzsgIzVGNDcKK+W9iCA+IGTDoG47ICM1RjQ4CivlvYkgPiBrw7lvOyAjNUY0OQor5b2KID4gcWnDoW5nOyAjNUY0QQor5b2LID4gaMOzbmc7ICM1RjRCCivlvYwgPiBtw607ICM1RjRDCivlvY0gPiBrw7lvOyAjNUY0RAor5b2OID4gd8SBbjsgIzVGNEUKK+W9jyA+IGp1w6k7ICM1RjRGCivlvZAgPiBqw6w7ICM1RjUwCivlvZEgPiBqw6w7ICM1RjUxCivlvZIgPiBnxatpOyAjNUY1Mgor5b2TID4gZMSBbmc7ICM1RjUzCivlvZQgPiBsw7k7ICM1RjU0CivlvZUgPiBsw7k7ICM1RjU1CivlvZYgPiB0dcOgbjsgIzVGNTYKK+W9lyA+IGjDuWk7ICM1RjU3CivlvZggPiB6aMOsOyAjNUY1OAor5b2ZID4gaMO5aTsgIzVGNTkKK+W9miA+IGjDuWk7ICM1RjVBCivlvZsgPiB5w607ICM1RjVCCivlvZwgPiB5w607ICM1RjVDCivlvZ0gPiB5w607ICM1RjVECivlvZ4gPiB5w607ICM1RjVFCivlvZ8gPiBow7lvOyAjNUY1Rgor5b2gID4gaMO5bzsgIzVGNjAKK+W9oSA+IHNoxIFuOyAjNUY2MQor5b2iID4geMOtbmc7ICM1RjYyCivlvaMgPiB3w6luOyAjNUY2Mwor5b2kID4gdMOzbmc7ICM1RjY0CivlvaUgPiB5w6BuOyAjNUY2NQor5b2mID4gecOgbjsgIzVGNjYKK+W9pyA+IHnDuTsgIzVGNjcKK+W9qCA+IGNoxKs7ICM1RjY4CivlvakgPiBjxINpOyAjNUY2OQor5b2qID4gYmnEgW87ICM1RjZBCivlvasgPiBkacSBbzsgIzVGNkIKK+W9rCA+IGLEq247ICM1RjZDCivlva0gPiBww6luZzsgIzVGNkQKK+W9riA+IHnFj25nOyAjNUY2RQor5b2vID4gcGnEgW87ICM1RjZGCivlvbAgPiB6aMSBbmc7ICM1RjcwCivlvbEgPiB5xK1uZzsgIzVGNzEKK+W9siA+IGNoxKs7ICM1RjcyCivlvbMgPiBjaMOsOyAjNUY3Mwor5b20ID4gemjDum87ICM1Rjc0CivlvbUgPiB0xa1vOyAjNUY3NQor5b22ID4gasOtOyAjNUY3Ngor5b23ID4gcMOhbmc7ICM1Rjc3CivlvbggPiB6aMWNbmc7ICM1Rjc4CivlvbkgPiB5w6w7ICM1Rjc5CivlvbogPiB3w6FuZzsgIzVGN0EKK+W9uyA+IGNow6g7ICM1RjdCCivlvbwgPiBixK07ICM1RjdDCivlvb0gPiBjaMOtOyAjNUY3RAor5b2+ID4gbMStbmc7ICM1RjdFCivlvb8gPiBmw7o7ICM1RjdGCivlvoAgPiB3xINuZzsgIzVGODAKK+W+gSA+IHpoxJNuZzsgIzVGODEKK+W+giA+IGPDujsgIzVGODIKK+W+gyA+IHfEg25nOyAjNUY4Mwor5b6EID4gasOsbmc7ICM1Rjg0CivlvoUgPiBkw6BpOyAjNUY4NQor5b6GID4geMSrOyAjNUY4Ngor5b6HID4geMO5bjsgIzVGODcKK+W+iCA+IGjElW47ICM1Rjg4CivlvokgPiB5w6FuZzsgIzVGODkKK+W+iiA+IGh1w6FpOyAjNUY4QQor5b6LID4gbMecOyAjNUY4Qgor5b6MID4gaMOydTsgIzVGOEMKK+W+jSA+IHfEgTsgIzVGOEQKK+W+jiA+IGNoxJVuZzsgIzVGOEUKK+W+jyA+IHpow6w7ICM1RjhGCivlvpAgPiB4w7o7ICM1RjkwCivlvpEgPiBqw6xuZzsgIzVGOTEKK+W+kiA+IHTDujsgIzVGOTIKK+W+kyA+IGPDs25nOyAjNUY5Mwor5b6VID4gbMOhaTsgIzVGOTUKK+W+liA+IGPDs25nOyAjNUY5Ngor5b6XID4gZMOpOyAjNUY5Nwor5b6YID4gcMOhaTsgIzVGOTgKK+W+mSA+IHjErTsgIzVGOTkKK+W+myA+IHHDrDsgIzVGOUIKK+W+nCA+IGNow6FuZzsgIzVGOUMKK+W+nSA+IHpow6w7ICM1RjlECivlvp4gPiBjw7NuZzsgIzVGOUUKK+W+nyA+IHpoxY11OyAjNUY5Rgor5b6gID4gbMOhaTsgIzVGQTAKK+W+oSA+IHnDuTsgIzVGQTEKK+W+oiA+IHhpw6g7ICM1RkEyCivlvqMgPiBqacOoOyAjNUZBMwor5b6kID4gamnDoG47ICM1RkE0CivlvqUgPiBjaMOtOyAjNUZBNQor5b6mID4gamnEgzsgIzVGQTYKK+W+pyA+IGJpw6BuOyAjNUZBNwor5b6oID4gaHXDoW5nOyAjNUZBOAor5b6pID4gZsO5OyAjNUZBOQor5b6qID4geMO6bjsgIzVGQUEKK+W+qyA+IHfElWk7ICM1RkFCCivlvqwgPiBww6FuZzsgIzVGQUMKK+W+rSA+IHnDoW87ICM1RkFECivlvq4gPiB3xJNpOyAjNUZBRQor5b6vID4geMSrOyAjNUZBRgor5b6wID4gemjEk25nOyAjNUZCMAor5b6xID4gcGnDoG87ICM1RkIxCivlvrIgPiBjaMOtOyAjNUZCMgor5b6zID4gZMOpOyAjNUZCMwor5b60ID4gemjEk25nOyAjNUZCNAor5b61ID4gemjEk25nOyAjNUZCNQor5b62ID4gYmnDqDsgIzVGQjYKK+W+tyA+IGTDqTsgIzVGQjcKK+W+uCA+IGNoxY1uZzsgIzVGQjgKK+W+uSA+IGNow6g7ICM1RkI5CivlvrogPiBqacSDbzsgIzVGQkEKK+W+uyA+IHfDqGk7ICM1RkJCCivlvrwgPiBqacOgbzsgIzVGQkMKK+W+vSA+IGjFq2k7ICM1RkJECivlvr4gPiBtw6lpOyAjNUZCRQor5b6/ID4gbMOybmc7ICM1RkJGCivlv4AgPiB4acSBbmc7ICM1RkMwCivlv4EgPiBiw6BvOyAjNUZDMQor5b+CID4gccO6OyAjNUZDMgor5b+DID4geMSrbjsgIzVGQzMKK+W/hCA+IHNow7knICd4xKtuJyAncMOhbmc7ICM1RkM0Civlv4UgPiBiw6w7ICM1RkM1Civlv4YgPiB5w6w7ICM1RkM2Civlv4cgPiBsw6g7ICM1RkM3Civlv4ggPiByw6luOyAjNUZDOAor5b+JID4gZMSBbzsgIzVGQzkKK+W/iiA+IGTDrG5nOyAjNUZDQQor5b+LID4gZ8SDaTsgIzVGQ0IKK+W/jCA+IGrDrDsgIzVGQ0MKK+W/jSA+IHLElW47ICM1RkNECivlv44gPiByw6luOyAjNUZDRQor5b+PID4gY2jDoG47ICM1RkNGCivlv5AgPiB0xINuOyAjNUZEMAor5b+RID4gdMOoOyAjNUZEMQor5b+SID4gdMOoOyAjNUZEMgor5b+TID4gZ8SBbjsgIzVGRDMKK+W/lCA+IHHDrDsgIzVGRDQKK+W/lSA+IHNow6w7ICM1RkQ1Civlv5YgPiBjxa1uOyAjNUZENgor5b+XID4gemjDrDsgIzVGRDcKK+W/mCA+IHfDoG5nOyAjNUZEOAor5b+ZID4gbcOhbmc7ICM1RkQ5Civlv5ogPiB4xKs7ICM1RkRBCivlv5sgPiBmw6FuOyAjNUZEQgor5b+cID4gecSrbmc7ICM1RkRDCivlv50gPiB0acSDbjsgIzVGREQKK+W/niA+IG3DrW47ICM1RkRFCivlv58gPiBtw61uOyAjNUZERgor5b+gID4gemjFjW5nOyAjNUZFMAor5b+hID4gY2jFjW5nOyAjNUZFMQor5b+iID4gd8O5OyAjNUZFMgor5b+jID4gasOtOyAjNUZFMwor5b+kID4gd8WtOyAjNUZFNAor5b+lID4geMOsOyAjNUZFNQor5b+mID4gecOoOyAjNUZFNgor5b+nID4gecWNdTsgIzVGRTcKK+W/qCA+IHfDoG47ICM1RkU4Civlv6kgPiBjxY1uZzsgIzVGRTkKK+W/qiA+IHpoxY1uZzsgIzVGRUEKK+W/qyA+IGt1w6BpOyAjNUZFQgor5b+sID4gecO5OyAjNUZFQwor5b+tID4gYmnDoG47ICM1RkVECivlv64gPiB6aMOsOyAjNUZFRQor5b+vID4gccOtOyAjNUZFRgor5b+wID4gY8O5aTsgIzVGRjAKK+W/sSA+IGNow6luOyAjNUZGMQor5b+yID4gdMOgaTsgIzVGRjIKK+W/syA+IHTDum47ICM1RkYzCivlv7QgPiBxacOhbjsgIzVGRjQKK+W/tSA+IG5pw6BuOyAjNUZGNQor5b+2ID4gaMO6bjsgIzVGRjYKK+W/tyA+IHjEq29uZzsgIzVGRjcKK+W/uCA+IG7ErXU7ICM1RkY4Civlv7kgPiB3xINuZzsgIzVGRjkKK+W/uiA+IHhpxIFuOyAjNUZGQQor5b+7ID4geMSrbjsgIzVGRkIKK+W/vCA+IGvEgW5nOyAjNUZGQwor5b+9ID4gaMWrOyAjNUZGRAor5b++ID4ga8OgaTsgIzVGRkUKK+W/vyA+IGbDqG47ICM1RkZGCivmgIAgPiBodcOhaTsgIzYwMDAKK+aAgSA+IHTDoGk7ICM2MDAxCivmgIIgPiBzxY9uZzsgIzYwMDIKK+aAgyA+IHfFrTsgIzYwMDMKK+aAhCA+IMOydTsgIzYwMDQKK+aAhSA+IGNow6BuZzsgIzYwMDUKK+aAhiA+IGNodcOgbmc7ICM2MDA2CivmgIcgPiBqw7k7ICM2MDA3CivmgIggPiB5w6w7ICM2MDA4CivmgIkgPiBixINvOyAjNjAwOQor5oCKID4gY2jEgW87ICM2MDBBCivmgIsgPiBtw61uOyAjNjAwQgor5oCMID4gcMSTaTsgIzYwMEMKK+aAjSA+IHrDuW87ICM2MDBECivmgI4gPiB6xJVuOyAjNjAwRQor5oCPID4gecOgbmc7ICM2MDBGCivmgJAgPiBrw7J1OyAjNjAxMAor5oCRID4gYsOgbjsgIzYwMTEKK+aAkiA+IG7DuTsgIzYwMTIKK+aAkyA+IG7DoW87ICM2MDEzCivmgJQgPiB6aMSTbmc7ICM2MDE0CivmgJUgPiBww6A7ICM2MDE1CivmgJYgPiBiw7k7ICM2MDE2CivmgJcgPiB0acSTOyAjNjAxNwor5oCYID4gZ8O5OyAjNjAxOAor5oCZID4gaMO5OyAjNjAxOQor5oCaID4gasO5OyAjNjAxQQor5oCbID4gZMOhOyAjNjAxQgor5oCcID4gbGnDoW47ICM2MDFDCivmgJ0gPiBzxKs7ICM2MDFECivmgJ4gPiBjaMWNdTsgIzYwMUUKK+aAnyA+IGTDrDsgIzYwMUYKK+aAoCA+IGTDoGk7ICM2MDIwCivmgKEgPiB5w607ICM2MDIxCivmgKIgPiB0w7o7ICM2MDIyCivmgKMgPiB5w7N1OyAjNjAyMwor5oCkID4gZsWrOyAjNjAyNAor5oClID4gasOtOyAjNjAyNQor5oCmID4gcMSTbmc7ICM2MDI2CivmgKcgPiB4w6xuZzsgIzYwMjcKK+aAqCA+IHl1w6BuOyAjNjAyOAor5oCpID4gbsOtOyAjNjAyOQor5oCqID4gZ3XDoGk7ICM2MDJBCivmgKsgPiBmw7o7ICM2MDJCCivmgKwgPiB4w6w7ICM2MDJDCivmgK0gPiBiw6w7ICM2MDJECivmgK4gPiB5xY11OyAjNjAyRQor5oCvID4gcWnDqDsgIzYwMkYKK+aAsCA+IHh1w6BuOyAjNjAzMAor5oCxID4gY8WNbmc7ICM2MDMxCivmgLIgPiBixK1uZzsgIzYwMzIKK+aAsyA+IGh1xINuZzsgIzYwMzMKK+aAtCA+IHjDuTsgIzYwMzQKK+aAtSA+IGNow7k7ICM2MDM1CivmgLYgPiBwxKs7ICM2MDM2CivmgLcgPiB4xKs7ICM2MDM3CivmgLggPiB4xKs7ICM2MDM4CivmgLkgPiB0xIFuOyAjNjAzOQor5oC7ID4gesWPbmc7ICM2MDNCCivmgLwgPiBkw7lpOyAjNjAzQwor5oC/ID4gecOsOyAjNjAzRgor5oGAID4gY2jErTsgIzYwNDAKK+aBgSA+IHLDqG47ICM2MDQxCivmgYIgPiB4w7puOyAjNjA0Mgor5oGDID4gc2jDrDsgIzYwNDMKK+aBhCA+IHjDrDsgIzYwNDQKK+aBhSA+IGzEg287ICM2MDQ1CivmgYYgPiBow6luZzsgIzYwNDYKK+aBhyA+IGt1xIFuZzsgIzYwNDcKK+aBiCA+IG3DujsgIzYwNDgKK+aBiSA+IHpoxK07ICM2MDQ5CivmgYogPiB4acOpOyAjNjA0QQor5oGLID4gbGnDoG47ICM2MDRCCivmgYwgPiB0acSBbzsgIzYwNEMKK+aBjSA+IGh1xINuZzsgIzYwNEQKK+aBjiA+IGRpw6k7ICM2MDRFCivmgY8gPiBoxINvOyAjNjA0Rgor5oGQID4ga8WPbmc7ICM2MDUwCivmgZEgPiBnxa1pOyAjNjA1MQor5oGSID4gaMOpbmc7ICM2MDUyCivmgZMgPiB4xKs7ICM2MDUzCivmgZQgPiB4acOgbzsgIzYwNTQKK+aBlSA+IHNow7k7ICM2MDU1CivmgZYgPiBzxKs7ICM2MDU2CivmgZcgPiBrdcSDOyAjNjA1Nwor5oGYID4gccSrdTsgIzYwNTgKK+aBmSA+IHnDoG5nOyAjNjA1OQor5oGaID4gaMO5aTsgIzYwNUEKK+aBmyA+IGjDumk7ICM2MDVCCivmgZwgPiBjaMOsOyAjNjA1Qwor5oGdID4gamnDoTsgIzYwNUQKK+aBniA+IHnDrTsgIzYwNUUKK+aBnyA+IHjEq29uZzsgIzYwNUYKK+aBoCA+IGd1w6BpOyAjNjA2MAor5oGhID4gbMOsbjsgIzYwNjEKK+aBoiA+IGjFq2k7ICM2MDYyCivmgaMgPiB6w6w7ICM2MDYzCivmgaQgPiB4w7k7ICM2MDY0CivmgaUgPiBjaMStOyAjNjA2NQor5oGmID4geGnDoG5nOyAjNjA2Ngor5oGnID4gbsecOyAjNjA2Nwor5oGoID4gaMOobjsgIzYwNjgKK+aBqSA+IMSTbjsgIzYwNjkKK+aBqiA+IGvDqDsgIzYwNkEKK+aBqyA+IHTFjW5nOyAjNjA2Qgor5oGsID4gdGnDoW47ICM2MDZDCivmga0gPiBnxY1uZzsgIzYwNkQKK+aBriA+IHF1w6FuOyAjNjA2RQor5oGvID4geMSrOyAjNjA2Rgor5oGwID4gcWnDoDsgIzYwNzAKK+aBsSA+IHl1w6g7ICM2MDcxCivmgbIgPiBwxJNuZzsgIzYwNzIKK+aBsyA+IGvElW47ICM2MDczCivmgbQgPiBkw6k7ICM2MDc0CivmgbUgPiBow7lpOyAjNjA3NQor5oG2ID4gw6g7ICM2MDc2CivmgbggPiB0w7JuZzsgIzYwNzgKK+aBuSA+IHnDoG47ICM2MDc5CivmgbogPiBrxINpOyAjNjA3QQor5oG7ID4gY8OoOyAjNjA3Qgor5oG8ID4gbsSDbzsgIzYwN0MKK+aBvSA+IHnDuW47ICM2MDdECivmgb4gPiBtw6FuZzsgIzYwN0UKK+aBvyA+IHnFj25nOyAjNjA3Rgor5oKAID4gecWPbmc7ICM2MDgwCivmgoEgPiB5dcSBbjsgIzYwODEKK+aCgiA+IHDEqzsgIzYwODIKK+aCgyA+IGvFrW47ICM2MDgzCivmgoQgPiBxacSDbzsgIzYwODQKK+aChSA+IHl1w6g7ICM2MDg1CivmgoYgPiB5w7k7ICM2MDg2CivmgocgPiB5w7k7ICM2MDg3CivmgoggPiBqacOoOyAjNjA4OAor5oKJID4geMSrOyAjNjA4OQor5oKKID4gemjDqTsgIzYwOEEKK+aCiyA+IGzDrG47ICM2MDhCCivmgowgPiB0w6w7ICM2MDhDCivmgo0gPiBow6BuOyAjNjA4RAor5oKOID4gaMOgbzsgIzYwOEUKK+aCjyA+IHFpw6g7ICM2MDhGCivmgpAgPiB0w6w7ICM2MDkwCivmgpEgPiBiw7k7ICM2MDkxCivmgpIgPiB5w6w7ICM2MDkyCivmgpMgPiBxacOgbjsgIzYwOTMKK+aClCA+IGjFrWk7ICM2MDk0CivmgpUgPiB4xKs7ICM2MDk1CivmgpYgPiBiw6hpOyAjNjA5Ngor5oKXID4gbcOhbjsgIzYwOTcKK+aCmCA+IHnEqzsgIzYwOTgKK+aCmSA+IGjEk25nOyAjNjA5OQor5oKaID4gc8WPbmc7ICM2MDlBCivmgpsgPiBxdcSBbjsgIzYwOUIKK+aCnCA+IGNoxJVuZzsgIzYwOUMKK+aCnSA+IGjFq2k7ICM2MDlECivmgp4gPiB3w7k7ICM2MDlFCivmgp8gPiB3w7k7ICM2MDlGCivmgqAgPiB5xY11OyAjNjBBMAor5oKhID4gbMOtOyAjNjBBMQor5oKiID4gbGnDoG5nOyAjNjBBMgor5oKjID4gaHXDoG47ICM2MEEzCivmgqQgPiBjxY1uZzsgIzYwQTQKK+aCpSA+IHnDrDsgIzYwQTUKK+aCpiA+IHl1w6g7ICM2MEE2CivmgqcgPiBsw6w7ICM2MEE3CivmgqggPiBuw61uOyAjNjBBOAor5oKpID4gbsSDbzsgIzYwQTkKK+aCqiA+IMOoOyAjNjBBQQor5oKrID4gcXXDqDsgIzYwQUIKK+aCrCA+IHh1w6FuOyAjNjBBQwor5oKtID4gcWnEgW47ICM2MEFECivmgq4gPiB3w7k7ICM2MEFFCivmgq8gPiBtxK1uOyAjNjBBRgor5oKwID4gY8Ozbmc7ICM2MEIwCivmgrEgPiBmxJVpOyAjNjBCMQor5oKyID4gYsSTaTsgIzYwQjIKK+aCsyA+IGTDum87ICM2MEIzCivmgrQgPiBjw7lpOyAjNjBCNAor5oK1ID4gY2jDoG5nOyAjNjBCNQor5oK2ID4gbcOobjsgIzYwQjYKK+aCtyA+IGzDrDsgIzYwQjcKK+aCuCA+IGrDrDsgIzYwQjgKK+aCuSA+IGd1w6BuOyAjNjBCOQor5oK6ID4gZ3XDoG47ICM2MEJBCivmgrsgPiB4w6xuZzsgIzYwQkIKK+aCvCA+IGTDoG87ICM2MEJDCivmgr0gPiBxxKs7ICM2MEJECivmgr4gPiBrxY1uZzsgIzYwQkUKK+aCvyA+IHRpxINuOyAjNjBCRgor5oOAID4gbMO6bjsgIzYwQzAKK+aDgSA+IHjEqzsgIzYwQzEKK+aDgiA+IGvEg247ICM2MEMyCivmg4MgPiBrxatuOyAjNjBDMwor5oOEID4gbsOsOyAjNjBDNAor5oOFID4gccOtbmc7ICM2MEM1Civmg4YgPiBjaMOzdTsgIzYwQzYKK+aDhyA+IGTFq247ICM2MEM3Civmg4ggPiBnxa1vOyAjNjBDOAor5oOJID4gY2jEgW47ICM2MEM5Civmg4ogPiBsacOhbmc7ICM2MENBCivmg4sgPiB3xINuOyAjNjBDQgor5oOMID4geXXEgW47ICM2MENDCivmg40gPiBqxKtuOyAjNjBDRAor5oOOID4gasOsOyAjNjBDRQor5oOPID4gbMOtbjsgIzYwQ0YKK+aDkCA+IHnDuTsgIzYwRDAKK+aDkSA+IGjDuW87ICM2MEQxCivmg5IgPiBow6k7ICM2MEQyCivmg5MgPiBxdcOhbjsgIzYwRDMKK+aDlCA+IHTDoW47ICM2MEQ0Civmg5UgPiB0w6w7ICM2MEQ1Civmg5YgPiB0w6w7ICM2MEQ2Civmg5cgPiBuacSTOyAjNjBENwor5oOYID4gd8SDbmc7ICM2MEQ4Civmg5kgPiBjaMO5bzsgIzYwRDkKK+aDmiA+IGLFqzsgIzYwREEKK+aDmyA+IGjFq247ICM2MERCCivmg5wgPiB4xKs7ICM2MERDCivmg50gPiB0xINuZzsgIzYwREQKK+aDniA+IHjEq247ICM2MERFCivmg58gPiB3w6lpOyAjNjBERgor5oOgID4gaMO5aTsgIzYwRTAKK+aDoSA+IMOoOyAjNjBFMQor5oOiID4gcsWtaTsgIzYwRTIKK+aDoyA+IHrFj25nOyAjNjBFMwor5oOkID4gamnEgW47ICM2MEU0Civmg6UgPiB5xY9uZzsgIzYwRTUKK+aDpiA+IGRpw6BuOyAjNjBFNgor5oOnID4gasO5OyAjNjBFNwor5oOoID4gY8SDbjsgIzYwRTgKK+aDqSA+IGNow6luZzsgIzYwRTkKK+aDqiA+IGTDqTsgIzYwRUEKK+aDqyA+IGLDqGk7ICM2MEVCCivmg6wgPiBxacOoOyAjNjBFQwor5oOtID4gY8OhbjsgIzYwRUQKK+aDriA+IGTDoG47ICM2MEVFCivmg68gPiBndcOgbjsgIzYwRUYKK+aDsCA+IGTDuW87ICM2MEYwCivmg7EgPiBuxINvOyAjNjBGMQor5oOyID4gecO5bjsgIzYwRjIKK+aDsyA+IHhpxINuZzsgIzYwRjMKK+aDtCA+IHpow7lpOyAjNjBGNAor5oO1ID4gZGnDqDsgIzYwRjUKK+aDtiA+IGh1w6FuZzsgIzYwRjYKK+aDtyA+IGNoxa1uOyAjNjBGNwor5oO4ID4gccOtb25nOyAjNjBGOAor5oO5ID4gcsSVOyAjNjBGOQor5oO6ID4geMSrbmc7ICM2MEZBCivmg7sgPiBjw6g7ICM2MEZCCivmg7wgPiBiacSDbjsgIzYwRkMKK+aDvSA+IGjFq247ICM2MEZECivmg74gPiB6xY1uZzsgIzYwRkUKK+aDvyA+IHTDrTsgIzYwRkYKK+aEgCA+IHFpxINvOyAjNjEwMAor5oSBID4gY2jDs3U7ICM2MTAxCivmhIIgPiBiw6hpOyAjNjEwMgor5oSDID4geHXEgW47ICM2MTAzCivmhIQgPiB3xJNpOyAjNjEwNAor5oSFID4gZ8OpOyAjNjEwNQor5oSGID4gcWnEgW47ICM2MTA2CivmhIcgPiB3xJVpOyAjNjEwNwor5oSIID4gecO5OyAjNjEwOAor5oSJID4gecO6OyAjNjEwOQor5oSKID4gYsOsOyAjNjEwQQor5oSLID4geHXEgW47ICM2MTBCCivmhIwgPiBodcOgbjsgIzYxMEMKK+aEjSA+IG3ErW47ICM2MTBECivmhI4gPiBiw6w7ICM2MTBFCivmhI8gPiB5w6w7ICM2MTBGCivmhJAgPiBtacSDbjsgIzYxMTAKK+aEkSA+IHnFj25nOyAjNjExMQor5oSSID4ga8OgaTsgIzYxMTIKK+aEkyA+IGTDoG5nOyAjNjExMwor5oSUID4gecSrbjsgIzYxMTQKK+aElSA+IMOoOyAjNjExNQor5oSWID4gY2jDqW47ICM2MTE2CivmhJcgPiBtw7J1OyAjNjExNwor5oSYID4ga8OoOyAjNjExOAor5oSZID4ga8OoOyAjNjExOQor5oSaID4gecO6OyAjNjExQQor5oSbID4gw6BpOyAjNjExQgor5oScID4gcWnDqDsgIzYxMUMKK+aEnSA+IHnEg247ICM2MTFECivmhJ4gPiBuw7lvOyAjNjExRQor5oSfID4gZ8SDbjsgIzYxMUYKK+aEoCA+IHnDuW47ICM2MTIwCivmhKEgPiB6xY9uZzsgIzYxMjEKK+aEoiA+IHPEgWk7ICM2MTIyCivmhKMgPiBsw6luZzsgIzYxMjMKK+aEpCA+IGbDqG47ICM2MTI0CivmhKYgPiBrw7lpOyAjNjEyNgor5oSnID4ga8O5aTsgIzYxMjcKK+aEqCA+IHF1w6g7ICM2MTI4CivmhKkgPiBnxY1uZzsgIzYxMjkKK+aEqiA+IHnDum47ICM2MTJBCivmhKsgPiBzw7k7ICM2MTJCCivmhKwgPiBzw7k7ICM2MTJDCivmhK0gPiBxw607ICM2MTJECivmhK4gPiB5w6FvOyAjNjEyRQor5oSvID4gc8WPbmc7ICM2MTJGCivmhLAgPiBodcSDbmc7ICM2MTMwCivmhLEgPiBqw607ICM2MTMxCivmhLIgPiBnxa07ICM2MTMyCivmhLMgPiBqw7k7ICM2MTMzCivmhLQgPiBjaHXDoG5nOyAjNjEzNAor5oS1ID4gbsOsOyAjNjEzNQor5oS2ID4geGnDqTsgIzYxMzYKK+aEtyA+IGvEg2k7ICM2MTM3CivmhLggPiB6aMSVbmc7ICM2MTM4CivmhLkgPiB5xY9uZzsgIzYxMzkKK+aEuiA+IGPEg287ICM2MTNBCivmhLsgPiBzw7luOyAjNjEzQgor5oS8ID4gc2jDqG47ICM2MTNDCivmhL0gPiBiw7M7ICM2MTNECivmhL4gPiBrw6BpOyAjNjEzRQor5oS/ID4geXXDoG47ICM2MTNGCivmhYAgPiB4acOpOyAjNjE0MAor5oWBID4gaMO5bjsgIzYxNDEKK+aFgiA+IHnFj25nOyAjNjE0Mgor5oWDID4gecSDbmc7ICM2MTQzCivmhYQgPiBsw6w7ICM2MTQ0CivmhYUgPiBzxIFvOyAjNjE0NQor5oWGID4gdMSBbzsgIzYxNDYKK+aFhyA+IHnEq247ICM2MTQ3CivmhYggPiBjw607ICM2MTQ4CivmhYkgPiB4w7k7ICM2MTQ5CivmhYogPiBxacOgbjsgIzYxNEEKK+aFiyA+IHTDoGk7ICM2MTRCCivmhYwgPiBodcSBbmc7ICM2MTRDCivmhY0gPiB5w7luOyAjNjE0RAor5oWOID4gc2jDqG47ICM2MTRFCivmhY8gPiBtxK1uZzsgIzYxNEYKK+aFkSA+IHNow6g7ICM2MTUxCivmhZIgPiBjw7NuZzsgIzYxNTIKK+aFkyA+IHBpw6BvOyAjNjE1Mwor5oWUID4gbcOyOyAjNjE1NAor5oWVID4gbcO5OyAjNjE1NQor5oWWID4gZ8O6bzsgIzYxNTYKK+aFlyA+IGNow6w7ICM2MTU3CivmhZggPiBjxINuOyAjNjE1OAor5oWZID4gY8OhbjsgIzYxNTkKK+aFmiA+IGPDoW47ICM2MTVBCivmhZsgPiBjw7ppOyAjNjE1Qgor5oWcID4gbcStbjsgIzYxNUMKK+aFnSA+IHTDqDsgIzYxNUQKK+aFniA+IHpoxIFuZzsgIzYxNUUKK+aFnyA+IHTDsm5nOyAjNjE1Rgor5oWgID4gw6BvOyAjNjE2MAor5oWhID4gc2h1xINuZzsgIzYxNjEKK+aFoiA+IG3DoG47ICM2MTYyCivmhaMgPiBndcOgbjsgIzYxNjMKK+aFpCA+IHF1w6g7ICM2MTY0CivmhaUgPiB6w6BvOyAjNjE2NQor5oWmID4gasOsdTsgIzYxNjYKK+aFpyA+IGjDuWk7ICM2MTY3CivmhaggPiBrxINpOyAjNjE2OAor5oWpID4gbGnDoW47ICM2MTY5CivmhaogPiDDsnU7ICM2MTZBCivmhasgPiBzxY9uZzsgIzYxNkIKK+aFrCA+IGrErW47ICM2MTZDCivmha0gPiB5w6xuOyAjNjE2RAor5oWuID4gbMecOyAjNjE2RQor5oWvID4gc2jEgW5nOyAjNjE2Rgor5oWwID4gd8OoaTsgIzYxNzAKK+aFsSA+IHR1w6FuOyAjNjE3MQor5oWyID4gbcOhbjsgIzYxNzIKK+aFsyA+IHFpxIFuOyAjNjE3Mwor5oW0ID4gc2jDqDsgIzYxNzQKK+aFtSA+IHnFjW5nOyAjNjE3NQor5oW2ID4gccOsbmc7ICM2MTc2CivmhbcgPiBrxIFuZzsgIzYxNzcKK+aFuCA+IGTDrDsgIzYxNzgKK+aFuSA+IHpow607ICM2MTc5CivmhbogPiBsw7N1OyAjNjE3QQor5oW7ID4ganXDoG47ICM2MTdCCivmhbwgPiBxxKs7ICM2MTdDCivmhb0gPiBxxKs7ICM2MTdECivmhb4gPiB5w7k7ICM2MTdFCivmhb8gPiBww61uZzsgIzYxN0YKK+aGgCA+IGxpw6FvOyAjNjE4MAor5oaBID4gY8WNbmc7ICM2MTgxCivmhoIgPiB5xY11OyAjNjE4Mgor5oaDID4gY2jFjW5nOyAjNjE4Mwor5oaEID4gemjDrDsgIzYxODQKK+aGhSA+IHTDsm5nOyAjNjE4NQor5oaGID4gY2jEk25nOyAjNjE4Ngor5oaHID4gccOsOyAjNjE4Nwor5oaIID4gccWrOyAjNjE4OAor5oaJID4gcMOpbmc7ICM2MTg5CivmhoogPiBiw6hpOyAjNjE4QQor5oaLID4gYmnEkzsgIzYxOEIKK+aGjCA+IGNow7puOyAjNjE4Qwor5oaNID4gamnEgW87ICM2MThECivmho4gPiB6xJNuZzsgIzYxOEUKK+aGjyA+IGNow6w7ICM2MThGCivmhpAgPiBsacOhbjsgIzYxOTAKK+aGkSA+IHDDrW5nOyAjNjE5MQor5oaSID4ga8O5aTsgIzYxOTIKK+aGkyA+IGjDuWk7ICM2MTkzCivmhpQgPiBxacOhbzsgIzYxOTQKK+aGlSA+IGNow6luZzsgIzYxOTUKK+aGliA+IHnDrG47ICM2MTk2CivmhpcgPiB5w6xuOyAjNjE5Nwor5oaYID4geMStOyAjNjE5OAor5oaZID4geMStOyAjNjE5OQor5oaaID4gZMOgbjsgIzYxOUEKK+aGmyA+IHTDoW47ICM2MTlCCivmhpwgPiBkxa1vOyAjNjE5Qwor5oadID4gZMO5aTsgIzYxOUQKK+aGniA+IGTDuWk7ICM2MTlFCivmhp8gPiBzw7k7ICM2MTlGCivmhqAgPiBqdcOpOyAjNjFBMAor5oahID4gY8OoOyAjNjFBMQor5oaiID4geGnEgW87ICM2MUEyCivmhqMgPiBmw6FuOyAjNjFBMwor5oakID4gZsOobjsgIzYxQTQKK+aGpSA+IGzDoW87ICM2MUE1CivmhqYgPiBsw6BvOyAjNjFBNgor5oanID4gY2jFjW5nOyAjNjFBNwor5oaoID4gaMSBbjsgIzYxQTgKK+aGqSA+IHHDrDsgIzYxQTkKK+aGqiA+IHhpw6FuOyAjNjFBQQor5oarID4gbcStbjsgIzYxQUIKK+aGrCA+IGrErW5nOyAjNjFBQwor5oatID4gbGnEg287ICM2MUFECivmhq4gPiB3xa07ICM2MUFFCivmhq8gPiBjxINuOyAjNjFBRgor5oawID4ganXDqTsgIzYxQjAKK+aGsSA+IGPDuTsgIzYxQjEKK+aGsiA+IHhpw6BuOyAjNjFCMgor5oazID4gdMSDbjsgIzYxQjMKK+aGtCA+IHNow6luZzsgIzYxQjQKK+aGtSA+IHDEqzsgIzYxQjUKK+aGtiA+IHnDrDsgIzYxQjYKK+aGtyA+IGNoxa07ICM2MUI3CivmhrggPiB4acSBbjsgIzYxQjgKK+aGuSA+IG7DoW87ICM2MUI5CivmhrogPiBkw6BuOyAjNjFCQQor5oa7ID4gdMSDbjsgIzYxQkIKK+aGvCA+IGrErW5nOyAjNjFCQwor5oa9ID4gc8WNbmc7ICM2MUJECivmhr4gPiBow6BuOyAjNjFCRQor5oa/ID4gamnEgW87ICM2MUJGCivmh4AgPiB3w6BpOyAjNjFDMAor5oeBID4gaHXDoW47ICM2MUMxCivmh4IgPiBkxY9uZzsgIzYxQzIKK+aHgyA+IHHDrW47ICM2MUMzCivmh4QgPiBxw61uOyAjNjFDNAor5oeFID4gccO6OyAjNjFDNQor5oeGID4gY8SDbzsgIzYxQzYKK+aHhyA+IGvElW47ICM2MUM3Civmh4ggPiB4acOoOyAjNjFDOAor5oeJID4gecOsbmc7ICM2MUM5Civmh4ogPiDDoG87ICM2MUNBCivmh4sgPiBtw6BvOyAjNjFDQgor5oeMID4gecOsOyAjNjFDQwor5oeNID4gbMStbjsgIzYxQ0QKK+aHjiA+IHPDqDsgIzYxQ0UKK+aHjyA+IGrDuW47ICM2MUNGCivmh5AgPiBodcOhaTsgIzYxRDAKK+aHkSA+IG3DqG47ICM2MUQxCivmh5IgPiBsxINuOyAjNjFEMgor5oeTID4gw6BpOyAjNjFEMwor5oeUID4gbMStbjsgIzYxRDQKK+aHlSA+IHnEgW47ICM2MUQ1Civmh5YgPiBndcSBOyAjNjFENgor5oeXID4geGnDoDsgIzYxRDcKK+aHmCA+IGNow6w7ICM2MUQ4Civmh5kgPiB5xa07ICM2MUQ5Civmh5ogPiB5w6xuOyAjNjFEQQor5oebID4gZMSBaTsgIzYxREIKK+aHnCA+IG3DqG5nOyAjNjFEQwor5oedID4gw6BpOyAjNjFERAor5oeeID4gbcOpbmc7ICM2MURFCivmh58gPiBkw7lpOyAjNjFERgor5oegID4gccOtOyAjNjFFMAor5oehID4gbcWPOyAjNjFFMQor5oeiID4gbMOhbjsgIzYxRTIKK+aHoyA+IG3DqG47ICM2MUUzCivmh6QgPiBjaMOzdTsgIzYxRTQKK+aHpSA+IHpow6w7ICM2MUU1Civmh6YgPiBuw7lvOyAjNjFFNgor5oenID4gbsO5bzsgIzYxRTcKK+aHqCA+IHnEgW47ICM2MUU4Civmh6kgPiB5xINuZzsgIzYxRTkKK+aHqiA+IGLDszsgIzYxRUEKK+aHqyA+IHpow607ICM2MUVCCivmh6wgPiBrdcOgbmc7ICM2MUVDCivmh60gPiBrdcOgbmc7ICM2MUVECivmh64gPiB5xY91OyAjNjFFRQor5oevID4gZsWrOyAjNjFFRgor5oewID4gbMOtdTsgIzYxRjAKK+aHsSA+IG1pw6g7ICM2MUYxCivmh7IgPiBjaMOpbmc7ICM2MUYyCivmh7QgPiBjaMOgbjsgIzYxRjQKK+aHtSA+IG3DqW5nOyAjNjFGNQor5oe2ID4gbMSDbjsgIzYxRjYKK+aHtyA+IGh1w6FpOyAjNjFGNwor5oe4ID4geHXDoW47ICM2MUY4Civmh7kgPiByw6BuZzsgIzYxRjkKK+aHuiA+IGNow6BuOyAjNjFGQQor5oe7ID4gasOsOyAjNjFGQgor5oe8ID4gasO5OyAjNjFGQwor5oe9ID4gaHXEgW47ICM2MUZECivmh74gPiBzaMOoOyAjNjFGRQor5oe/ID4gecOsOyAjNjFGRgor5oiAID4gbGnDoG47ICM2MjAwCivmiIEgPiBuxINuOyAjNjIwMQor5oiCID4gbcOtOyAjNjIwMgor5oiDID4gdMSDbmc7ICM2MjAzCivmiIQgPiBqdcOpOyAjNjIwNAor5oiFID4gZ8Ogbmc7ICM2MjA1CivmiIYgPiBnw6BuZzsgIzYyMDYKK+aIhyA+IGfDoG5nOyAjNjIwNwor5oiIID4gZ8STOyAjNjIwOAor5oiJID4geXXDqDsgIzYyMDkKK+aIiiA+IHfDuTsgIzYyMEEKK+aIiyA+IGppxIFuOyAjNjIwQgor5oiMID4geMWrOyAjNjIwQwor5oiNID4gc2jDuTsgIzYyMEQKK+aIjiA+IHLDs25nOyAjNjIwRQor5oiPID4geMOsOyAjNjIwRgor5oiQID4gY2jDqW5nOyAjNjIxMAor5oiRID4gd8WPOyAjNjIxMQor5oiSID4gamnDqDsgIzYyMTIKK+aIkyA+IGfEkzsgIzYyMTMKK+aIlCA+IGppxIFuOyAjNjIxNAor5oiVID4gcWnEgW5nOyAjNjIxNQor5oiWID4gaMO5bzsgIzYyMTYKK+aIlyA+IHFpxIFuZzsgIzYyMTcKK+aImCA+IHpow6BuOyAjNjIxOAor5oiZID4gZMOybmc7ICM2MjE5CivmiJogPiBxxKs7ICM2MjFBCivmiJsgPiBqacOhOyAjNjIxQgor5oicID4gZGnDqTsgIzYyMUMKK+aInSA+IHrDqWk7ICM2MjFECivmiJ4gPiBqacOhOyAjNjIxRQor5oifID4gasStOyAjNjIxRgor5oigID4gc2jDrDsgIzYyMjAKK+aIoSA+IGvEgW47ICM2MjIxCivmiKIgPiBqw607ICM2MjIyCivmiKMgPiBrw7ppOyAjNjIyMwor5oikID4gZ8OgaTsgIzYyMjQKK+aIpSA+IGTElW5nOyAjNjIyNQor5oimID4gemjDoG47ICM2MjI2CivmiKcgPiBjaHXEgW5nOyAjNjIyNwor5oioID4gZ8STOyAjNjIyOAor5oipID4gamnEg247ICM2MjI5CivmiKogPiBqacOpOyAjNjIyQQor5oirID4gecO5OyAjNjIyQgor5oisID4gamnEg247ICM2MjJDCivmiK0gPiB5xINuOyAjNjIyRAor5oiuID4gbMO5OyAjNjIyRQor5oivID4geMOsOyAjNjIyRgor5oiwID4gemjDoG47ICM2MjMwCivmiLEgPiB4w6w7ICM2MjMxCivmiLIgPiB4w6w7ICM2MjMyCivmiLMgPiBjaMWrbzsgIzYyMzMKK+aItCA+IGTDoGk7ICM2MjM0CivmiLUgPiBxw7o7ICM2MjM1CivmiLYgPiBow7k7ICM2MjM2CivmiLcgPiBow7k7ICM2MjM3CivmiLggPiBow7k7ICM2MjM4CivmiLkgPiDDqDsgIzYyMzkKK+aIuiA+IHNow6w7ICM2MjNBCivmiLsgPiBsw6w7ICM2MjNCCivmiLwgPiBtxINvOyAjNjIzQwor5oi9ID4gaMO5OyAjNjIzRAor5oi+ID4gbMOsOyAjNjIzRQor5oi/ID4gZsOhbmc7ICM2MjNGCivmiYAgPiBzxa1vOyAjNjI0MAor5omBID4gYmnEg247ICM2MjQxCivmiYIgPiBkacOgbjsgIzYyNDIKK+aJgyA+IGrEq29uZzsgIzYyNDMKK+aJhCA+IHNoxINuZzsgIzYyNDQKK+aJhSA+IHnDrTsgIzYyNDUKK+aJhiA+IHnErTsgIzYyNDYKK+aJhyA+IHNow6BuOyAjNjI0Nwor5omIID4gaMO5OyAjNjI0OAor5omJID4gZsSTaTsgIzYyNDkKK+aJiiA+IHnEg247ICM2MjRBCivmiYsgPiBzaMWPdTsgIzYyNEIKK+aJjCA+IHTMhCcgJ3NoxY91JyAncMOhbmc7ICM2MjRDCivmiY0gPiBjw6FpOyAjNjI0RAor5omOID4gemjEgTsgIzYyNEUKK+aJjyA+IHHDrXU7ICM2MjRGCivmiZAgPiBsw6g7ICM2MjUwCivmiZEgPiBixas7ICM2MjUxCivmiZIgPiBixIE7ICM2MjUyCivmiZMgPiBkxIM7ICM2MjUzCivmiZQgPiByxJNuZzsgIzYyNTQKK+aJlSA+IGbDujsgIzYyNTUKK+aJlyA+IHrDoGk7ICM2MjU3CivmiZggPiB0xatvOyAjNjI1OAor5omZID4gemjDoG5nOyAjNjI1OQor5omaID4gZGnEgW87ICM2MjVBCivmiZsgPiBrw6FuZzsgIzYyNUIKK+aJnCA+IHnFqzsgIzYyNUMKK+aJnSA+IGvFqzsgIzYyNUQKK+aJniA+IGjDoG47ICM2MjVFCivmiZ8gPiBzaMSTbjsgIzYyNUYKK+aJoCA+IGNoxIE7ICM2MjYwCivmiaEgPiB5xK07ICM2MjYxCivmiaIgPiBnxa07ICM2MjYyCivmiaMgPiBrw7J1OyAjNjI2Mwor5omkID4gd8O5OyAjNjI2NAor5omlID4gdMWrbzsgIzYyNjUKK+aJpiA+IHFpxIFuOyAjNjI2Ngor5omnID4gemjDrTsgIzYyNjcKK+aJqCA+IHLDqG47ICM2MjY4CivmiakgPiBrw7lvOyAjNjI2OQor5omqID4gbcOpbjsgIzYyNkEKK+aJqyA+IHPEg287ICM2MjZCCivmiawgPiB5w6FuZzsgIzYyNkMKK+aJrSA+IG7ErXU7ICM2MjZECivmia4gPiBiw6BuOyAjNjI2RQor5omvID4gY2jElTsgIzYyNkYKK+aJsCA+IHLEg287ICM2MjcwCivmibEgPiB4xKs7ICM2MjcxCivmibIgPiBxacOhbjsgIzYyNzIKK+aJsyA+IGLEgW47ICM2MjczCivmibQgPiBqacOhOyAjNjI3NAor5om1ID4gecO6OyAjNjI3NQor5om2ID4gZsO6OyAjNjI3Ngor5om3ID4gw6BvOyAjNjI3Nwor5om4ID4geMSrOyAjNjI3OAor5om5ID4gcMSrOyAjNjI3OQor5om6ID4gemjErTsgIzYyN0EKK+aJuyA+IHrDrDsgIzYyN0IKK+aJvCA+IMOoOyAjNjI3Qwor5om9ID4gZMO5bjsgIzYyN0QKK+aJviA+IHpoxINvOyAjNjI3RQor5om/ID4gY2jDqW5nOyAjNjI3Rgor5oqAID4gasOsOyAjNjI4MAor5oqBID4gecSDbjsgIzYyODEKK+aKgiA+IGt1w6FuZzsgIzYyODIKK+aKgyA+IGJpw6BuOyAjNjI4Mwor5oqEID4gY2jEgW87ICM2Mjg0CivmioUgPiBqxas7ICM2Mjg1CivmioYgPiB3w6huOyAjNjI4Ngor5oqHID4gaMO6OyAjNjI4Nwor5oqIID4geXXDqDsgIzYyODgKK+aKiSA+IGp1w6k7ICM2Mjg5CivmioogPiBixIM7ICM2MjhBCivmiosgPiBxw6xuOyAjNjI4Qgor5oqMID4gemjElW47ICM2MjhDCivmio0gPiB6aMSVbmc7ICM2MjhECivmio4gPiB5xa1uOyAjNjI4RQor5oqPID4gd8OhbjsgIzYyOEYKK+aKkCA+IG7DuTsgIzYyOTAKK+aKkSA+IHnDrDsgIzYyOTEKK+aKkiA+IHNoxas7ICM2MjkyCivmipMgPiB6aHXEgTsgIzYyOTMKK+aKlCA+IHDDs3U7ICM2Mjk0CivmipUgPiB0w7N1OyAjNjI5NQor5oqWID4gZMWPdTsgIzYyOTYKK+aKlyA+IGvDoG5nOyAjNjI5Nwor5oqYID4gemjDqTsgIzYyOTgKK+aKmSA+IHDDs3U7ICM2Mjk5CivmipogPiBmxa07ICM2MjlBCivmipsgPiBwxIFvOyAjNjI5Qgor5oqcID4gYsOhOyAjNjI5Qwor5oqdID4gxINvOyAjNjI5RAor5oqeID4gesOpOyAjNjI5RQor5oqfID4gdHXDoW47ICM2MjlGCivmiqAgPiBrxY11OyAjNjJBMAor5oqhID4gbMO6bjsgIzYyQTEKK+aKoiA+IHFpxINuZzsgIzYyQTIKK+aKpCA+IGjDuTsgIzYyQTQKK+aKpSA+IGLDoG87ICM2MkE1CivmiqYgPiBixK1uZzsgIzYyQTYKK+aKpyA+IHpoxK07ICM2MkE3CivmiqggPiBwxJNuZzsgIzYyQTgKK+aKqSA+IHTEgW47ICM2MkE5CivmiqogPiBwxas7ICM2MkFBCivmiqsgPiBwxKs7ICM2MkFCCivmiqwgPiB0w6FpOyAjNjJBQwor5oqtID4gecSDbzsgIzYyQUQKK+aKriA+IHpoxJVuOyAjNjJBRQor5oqvID4gemjEgTsgIzYyQUYKK+aKsCA+IHnEg25nOyAjNjJCMAor5oqxID4gYsOgbzsgIzYyQjEKK+aKsiA+IGjEkzsgIzYyQjIKK+aKsyA+IG7ErTsgIzYyQjMKK+aKtCA+IHnDrDsgIzYyQjQKK+aKtSA+IGTErTsgIzYyQjUKK+aKtiA+IGNow6w7ICM2MkI2CivmircgPiBwxKs7ICM2MkI3CivmirggPiB6xIE7ICM2MkI4CivmirkgPiBtxY87ICM2MkI5CivmirogPiBtxY87ICM2MkJBCivmirsgPiBzaMOobjsgIzYyQkIKK+aKvCA+IHnEgTsgIzYyQkMKK+aKvSA+IGNoxY11OyAjNjJCRAor5oq+ID4gccWrOyAjNjJCRQor5oq/ID4gbcStbjsgIzYyQkYKK+aLgCA+IGNow7k7ICM2MkMwCivmi4EgPiBqacSBOyAjNjJDMQor5ouCID4gZsO6OyAjNjJDMgor5ouDID4gemjEg247ICM2MkMzCivmi4QgPiB6aMWtOyAjNjJDNAor5ouFID4gZMOgbjsgIzYyQzUKK+aLhiA+IGNoxIFpOyAjNjJDNgor5ouHID4gbcWtOyAjNjJDNwor5ouIID4gbmnDoW47ICM2MkM4Civmi4kgPiBsxIE7ICM2MkM5Civmi4ogPiBmxa07ICM2MkNBCivmi4sgPiBwxIFvOyAjNjJDQgor5ouMID4gYsOgbjsgIzYyQ0MKK+aLjSA+IHDEgWk7ICM2MkNECivmi44gPiBsxKtuZzsgIzYyQ0UKK+aLjyA+IG7DoTsgIzYyQ0YKK+aLkCA+IGd1xINpOyAjNjJEMAor5ouRID4gcWnDoW47ICM2MkQxCivmi5IgPiBqw7k7ICM2MkQyCivmi5MgPiB0w7lvOyAjNjJEMwor5ouUID4gYsOhOyAjNjJENAor5ouVID4gdMWrbzsgIzYyRDUKK+aLliA+IHTFq287ICM2MkQ2Civmi5cgPiDEg287ICM2MkQ3Civmi5ggPiBqxas7ICM2MkQ4Civmi5kgPiB6aMO6bzsgIzYyRDkKK+aLmiA+IHDDoG47ICM2MkRBCivmi5sgPiB6aMSBbzsgIzYyREIKK+aLnCA+IGLDoGk7ICM2MkRDCivmi50gPiBiw6BpOyAjNjJERAor5oueID4gZMStOyAjNjJERQor5oufID4gbsStOyAjNjJERgor5ougID4gasO5OyAjNjJFMAor5ouhID4ga8O5bzsgIzYyRTEKK+aLoiA+IGzFj25nOyAjNjJFMgor5oujID4gamnEg247ICM2MkUzCivmi6UgPiB5xY9uZzsgIzYyRTUKK+aLpiA+IGzDoW47ICM2MkU2Civmi6cgPiBuw61uZzsgIzYyRTcKK+aLqCA+IGLFjTsgIzYyRTgKK+aLqSA+IHrDqTsgIzYyRTkKK+aLqiA+IHFpxIFuOyAjNjJFQQor5ourID4gaMOpbjsgIzYyRUIKK+aLrCA+IGd1xIE7ICM2MkVDCivmi60gPiBzaMOsOyAjNjJFRAor5ouuID4gamnDqTsgIzYyRUUKK+aLryA+IHpoxJVuZzsgIzYyRUYKK+aLsCA+IG7ErW47ICM2MkYwCivmi7EgPiBnxY9uZzsgIzYyRjEKK+aLsiA+IGfFj25nOyAjNjJGMgor5ouzID4gcXXDoW47ICM2MkYzCivmi7QgPiBzaHXEgW47ICM2MkY0Civmi7UgPiBjw7puOyAjNjJGNQor5ou2ID4gesSDbjsgIzYyRjYKK+aLtyA+IGvEg287ICM2MkY3Civmi7ggPiBjaMStOyAjNjJGOAor5ou5ID4geGnDqTsgIzYyRjkKK+aLuiA+IGPDqDsgIzYyRkEKK+aLuyA+IGjFq2k7ICM2MkZCCivmi7wgPiBwxKtuOyAjNjJGQwor5ou9ID4gemh1xIFpOyAjNjJGRAor5ou+ID4gc2jDrTsgIzYyRkUKK+aLvyA+IG7DoTsgIzYyRkYKK+aMgCA+IGLDsjsgIzYzMDAKK+aMgSA+IGNow607ICM2MzAxCivmjIIgPiBndcOgOyAjNjMwMgor5oyDID4gemjDrDsgIzYzMDMKK+aMhCA+IGvDuW87ICM2MzA0CivmjIUgPiBkxa1vOyAjNjMwNQor5oyGID4gZMWtbzsgIzYzMDYKK+aMhyA+IHpoxK07ICM2MzA3CivmjIggPiBxacOoOyAjNjMwOAor5oyJID4gw6BuOyAjNjMwOQor5oyKID4gbsOybmc7ICM2MzBBCivmjIsgPiB6aMOobjsgIzYzMEIKK+aMjCA+IGfDqTsgIzYzMEMKK+aMjSA+IGppw6BvOyAjNjMwRAor5oyOID4ga8WrOyAjNjMwRQor5oyPID4gZMOybmc7ICM2MzBGCivmjJAgPiByw7o7ICM2MzEwCivmjJEgPiB0acSBbzsgIzYzMTEKK+aMkiA+IGxpw6g7ICM2MzEyCivmjJMgPiB6aMSBOyAjNjMxMwor5oyUID4gbMeaOyAjNjMxNAor5oyVID4gZGnDqTsgIzYzMTUKK+aMliA+IHfEgTsgIzYzMTYKK+aMlyA+IGp1w6k7ICM2MzE3CivmjJkgPiBqxa07ICM2MzE5CivmjJogPiB6aMOsOyAjNjMxQQor5oybID4gbHXDoW47ICM2MzFCCivmjJwgPiB5w6A7ICM2MzFDCivmjJ0gPiB6aHXEgTsgIzYzMUQKK+aMniA+IHTDoDsgIzYzMUUKK+aMnyA+IHhpw6k7ICM2MzFGCivmjKAgPiBuw6FvOyAjNjMyMAor5oyhID4gZMSDbmc7ICM2MzIxCivmjKIgPiBqacSDbzsgIzYzMjIKK+aMoyA+IHpoxJNuZzsgIzYzMjMKK+aMpCA+IGrErTsgIzYzMjQKK+aMpSA+IGjFq2k7ICM2MzI1CivmjKYgPiB4w7puOyAjNjMyNgor5oyoID4gxIFpOyAjNjMyOAor5oypID4gdMWrbzsgIzYzMjkKK+aMqiA+IG7Dum87ICM2MzJBCivmjKsgPiBjw7lvOyAjNjMyQgor5oysID4gYsOzOyAjNjMyQwor5oytID4gZ8SVbmc7ICM2MzJECivmjK4gPiB0xK07ICM2MzJFCivmjK8gPiB6aMOobjsgIzYzMkYKK+aMsCA+IGNow6luZzsgIzYzMzAKK+aMsSA+IHPFq287ICM2MzMxCivmjLIgPiBzxatvOyAjNjMzMgor5oyzID4ga8STbmc7ICM2MzMzCivmjLQgPiBtxJVpOyAjNjMzNAor5oy1ID4gbMOybmc7ICM2MzM1CivmjLYgPiBqw7o7ICM2MzM2CivmjLcgPiBww6luZzsgIzYzMzcKK+aMuCA+IGppxINuOyAjNjMzOAor5oy5ID4gecOsOyAjNjMzOQor5oy6ID4gdMStbmc7ICM2MzNBCivmjLsgPiBzaMSBbjsgIzYzM0IKK+aMvCA+IG7DuW87ICM2MzNDCivmjL0gPiB3xINuOyAjNjMzRAor5oy+ID4geGnDqTsgIzYzM0UKK+aMvyA+IGNoxIE7ICM2MzNGCivmjYAgPiBmxJNuZzsgIzYzNDAKK+aNgSA+IGppxINvOyAjNjM0MQor5o2CID4gd8WtOyAjNjM0Mgor5o2DID4gasO5bjsgIzYzNDMKK+aNhCA+IGrDrHU7ICM2MzQ0CivmjYUgPiB0xY9uZzsgIzYzNDUKK+aNhiA+IGvFrW47ICM2MzQ2CivmjYcgPiBow7lvOyAjNjM0Nwor5o2IID4gdMO6OyAjNjM0OAor5o2JID4gemjFq287ICM2MzQ5CivmjYogPiBww7N1OyAjNjM0QQor5o2LID4gbMOoOyAjNjM0Qgor5o2MID4gYsSBOyAjNjM0Qwor5o2NID4gaMOgbjsgIzYzNEQKK+aNjiA+IHNoxIFvOyAjNjM0RQor5o2PID4gbmnEkzsgIzYzNEYKK+aNkCA+IGp1xIFuOyAjNjM1MAor5o2RID4gesOpOyAjNjM1MQor5o2SID4gc8WPbmc7ICM2MzUyCivmjZMgPiB5w6k7ICM2MzUzCivmjZQgPiBqdcOpOyAjNjM1NAor5o2VID4gYsWtOyAjNjM1NQor5o2WID4gaHXDoW47ICM2MzU2CivmjZcgPiBiw7k7ICM2MzU3CivmjZggPiB6w7luOyAjNjM1OAor5o2ZID4gecOsOyAjNjM1OQor5o2aID4gemjEgWk7ICM2MzVBCivmjZsgPiBsx5o7ICM2MzVCCivmjZwgPiBzxY11OyAjNjM1Qwor5o2dID4gdMWrbzsgIzYzNUQKK+aNniA+IGzEgW87ICM2MzVFCivmjZ8gPiBzxa1uOyAjNjM1Rgor5o2gID4gYsSBbmc7ICM2MzYwCivmjaEgPiBqacSDbjsgIzYzNjEKK+aNoiA+IGh1w6BuOyAjNjM2Mgor5o2jID4gZMSDbzsgIzYzNjMKK+aNpSA+IHfDoG47ICM2MzY1CivmjaYgPiBxw61uOyAjNjM2Ngor5o2nID4gcMSVbmc7ICM2MzY3CivmjaggPiBzaMSVOyAjNjM2OAor5o2pID4gbGnDqDsgIzYzNjkKK+aNqiA+IG3DrW47ICM2MzZBCivmjasgPiBtw6luOyAjNjM2Qgor5o2sID4gZsWtOyAjNjM2Qwor5o2tID4gYsSDaTsgIzYzNkQKK+aNriA+IGrDuTsgIzYzNkUKK+aNryA+IGTEg287ICM2MzZGCivmjbAgPiB3xY87ICM2MzcwCivmjbEgPiDDoWk7ICM2MzcxCivmjbIgPiBqdcSDbjsgIzYzNzIKK+aNsyA+IHl1w6g7ICM2MzczCivmjbQgPiB6xY9uZzsgIzYzNzQKK+aNtSA+IGNoxJVuOyAjNjM3NQor5o22ID4gY2jDumk7ICM2Mzc2CivmjbcgPiBqacOpOyAjNjM3Nwor5o24ID4gdMWrOyAjNjM3OAor5o25ID4gYsOobjsgIzYzNzkKK+aNuiA+IG7DoDsgIzYzN0EKK+aNuyA+IG5pxINuOyAjNjM3Qgor5o28ID4gbsO6bzsgIzYzN0MKK+aNvSA+IHrDujsgIzYzN0QKK+aNviA+IHfDsjsgIzYzN0UKK+aNvyA+IHjEqzsgIzYzN0YKK+aOgCA+IHhpxIFuOyAjNjM4MAor5o6BID4gY2jDqW5nOyAjNjM4MQor5o6CID4gZGnEgW47ICM2MzgyCivmjoMgPiBzxINvOyAjNjM4Mwor5o6EID4gbMO6bjsgIzYzODQKK+aOhSA+IHHDrG5nOyAjNjM4NQor5o6GID4gZ8SBbmc7ICM2Mzg2CivmjocgPiBkw7pvOyAjNjM4Nwor5o6IID4gc2jDsnU7ICM2Mzg4CivmjokgPiBkacOgbzsgIzYzODkKK+aOiiA+IHDDs3U7ICM2MzhBCivmjosgPiBkxK07ICM2MzhCCivmjowgPiB6aMSDbmc7ICM2MzhDCivmjo0gPiBnxa1uOyAjNjM4RAor5o6OID4gasStOyAjNjM4RQor5o6PID4gdMSBbzsgIzYzOEYKK+aOkCA+IHFpxIE7ICM2MzkwCivmjpEgPiBxw607ICM2MzkxCivmjpIgPiBww6FpOyAjNjM5Mgor5o6TID4gc2jDujsgIzYzOTMKK+aOlCA+IHFpxIFuOyAjNjM5NAor5o6VID4gbMOsbmc7ICM2Mzk1CivmjpYgPiB5w6w7ICM2Mzk2CivmjpcgPiB5w6A7ICM2Mzk3CivmjpggPiBqdcOpOyAjNjM5OAor5o6ZID4gemjEk25nOyAjNjM5OQor5o6aID4gbGnEg25nOyAjNjM5QQor5o6bID4gZ3XDoDsgIzYzOUIKK+aOnCA+IHnErTsgIzYzOUMKK+aOnSA+IGjDuW87ICM2MzlECivmjp4gPiBzaMOgbjsgIzYzOUUKK+aOnyA+IHpoxJVuZzsgIzYzOUYKK+aOoCA+IGzHnGU7ICM2M0EwCivmjqEgPiBjxINpOyAjNjNBMQor5o6iID4gdMOgbjsgIzYzQTIKK+aOoyA+IGNow6g7ICM2M0EzCivmjqQgPiBixKtuZzsgIzYzQTQKK+aOpSA+IGppxJM7ICM2M0E1CivmjqYgPiB0w6w7ICM2M0E2CivmjqcgPiBrw7JuZzsgIzYzQTcKK+aOqCA+IHTFq2k7ICM2M0E4CivmjqkgPiB5xINuOyAjNjNBOQor5o6qID4gY8O5bzsgIzYzQUEKK+aOqyA+IHrFjXU7ICM2M0FCCivmjqwgPiBqw7o7ICM2M0FDCivmjq0gPiB0acOgbjsgIzYzQUQKK+aOriA+IHFpw6FuOyAjNjNBRQor5o6vID4ga8OobjsgIzYzQUYKK+aOsCA+IGLEgWk7ICM2M0IwCivmjrEgPiBzaMWPdTsgIzYzQjEKK+aOsiA+IGppxJM7ICM2M0IyCivmjrMgPiBsxa07ICM2M0IzCivmjrQgPiBnw7pvOyAjNjNCNAor5o63ID4gemjDrTsgIzYzQjcKK+aOuCA+IGTEg247ICM2M0I4CivmjrogPiB4acSBbjsgIzYzQkEKK+aOuyA+IHPEgW87ICM2M0JCCivmjrwgPiBndcOgbjsgIzYzQkMKK+aOvSA+IHDDqG5nOyAjNjNCRAor5o6+ID4geXXDoG47ICM2M0JFCivmjr8gPiBuw7lvOyAjNjNCRgor5o+AID4gamnEg247ICM2M0MwCivmj4EgPiB6aMSTbjsgIzYzQzEKK+aPgiA+IGrEq3U7ICM2M0MyCivmj4MgPiBqacSBbjsgIzYzQzMKK+aPhCA+IHnDujsgIzYzQzQKK+aPhSA+IHnDoW47ICM2M0M1Civmj4YgPiBrw7ppOyAjNjNDNgor5o+HID4gbsSDbjsgIzYzQzcKK+aPiCA+IGjFjW5nOyAjNjNDOAor5o+JID4gcsOzdTsgIzYzQzkKK+aPiiA+IHDDrDsgIzYzQ0EKK+aPiyA+IHfEk2k7ICM2M0NCCivmj4wgPiBzxIFpOyAjNjNDQwor5o+NID4gesOydTsgIzYzQ0QKK+aPjiA+IHh1xIFuOyAjNjNDRQor5o+PID4gbWnDoW87ICM2M0NGCivmj5AgPiB0w607ICM2M0QwCivmj5EgPiBuacSTOyAjNjNEMQor5o+SID4gY2jEgTsgIzYzRDIKK+aPkyA+IHNow6w7ICM2M0QzCivmj5QgPiB6xY9uZzsgIzYzRDQKK+aPlSA+IHpow6huOyAjNjNENQor5o+WID4gecSrOyAjNjNENgor5o+XID4gc2jFrW47ICM2M0Q3Civmj5ggPiBow6luZzsgIzYzRDgKK+aPmSA+IGJpw6BuOyAjNjNEOQor5o+aID4gecOhbmc7ICM2M0RBCivmj5sgPiBodcOgbjsgIzYzREIKK+aPnCA+IHnEg247ICM2M0RDCivmj50gPiB6dcOgbjsgIzYzREQKK+aPniA+IMSDbjsgIzYzREUKK+aPnyA+IHjFqzsgIzYzREYKK+aPoCA+IHnDoDsgIzYzRTAKK+aPoSA+IHfDsjsgIzYzRTEKK+aPoiA+IGvDqDsgIzYzRTIKK+aPoyA+IGNodcSDaTsgIzYzRTMKK+aPpCA+IGrDrTsgIzYzRTQKK+aPpSA+IHTDrDsgIzYzRTUKK+aPpiA+IGzDoTsgIzYzRTYKK+aPpyA+IGzDoDsgIzYzRTcKK+aPqCA+IGNow6luZzsgIzYzRTgKK+aPqSA+IGvEgWk7ICM2M0U5Civmj6ogPiBqxKt1OyAjNjNFQQor5o+rID4gasSrdTsgIzYzRUIKK+aPrCA+IHTDujsgIzYzRUMKK+aPrSA+IGppxJM7ICM2M0VECivmj64gPiBoxatpOyAjNjNFRQor5o+vID4gZ8STbmc7ICM2M0VGCivmj7AgPiBjaMOybmc7ICM2M0YwCivmj7EgPiBzaMO5bzsgIzYzRjEKK+aPsiA+IHNow6k7ICM2M0YyCivmj7MgPiB4acOoOyAjNjNGMwor5o+0ID4geXXDoW47ICM2M0Y0Civmj7UgPiBxacOhbjsgIzYzRjUKK+aPtiA+IHnDqTsgIzYzRjYKK+aPtyA+IGNoxIE7ICM2M0Y3Civmj7ggPiB6aMSBOyAjNjNGOAor5o+5ID4gYsSTaTsgIzYzRjkKK+aPuiA+IHnDoW87ICM2M0ZBCivmj70gPiBsxINuOyAjNjNGRAor5o++ID4gd8OobjsgIzYzRkUKK+aPvyA+IHHDrG47ICM2M0ZGCivmkIAgPiBjaMSBbjsgIzY0MDAKK+aQgSA+IGfEkzsgIzY0MDEKK+aQgiA+IGzFj3U7ICM2NDAyCivmkIMgPiB6xY9uZzsgIzY0MDMKK+aQhCA+IGfEk25nOyAjNjQwNAor5pCFID4gamnEg287ICM2NDA1CivmkIYgPiBnw7J1OyAjNjQwNgor5pCHID4gccOsbjsgIzY0MDcKK+aQiCA+IHnFj25nOyAjNjQwOAor5pCJID4gcXXDqDsgIzY0MDkKK+aQiiA+IGNoxY11OyAjNjQwQQor5pCLID4gY2jErTsgIzY0MEIKK+aQjCA+IHpoxINuOyAjNjQwQwor5pCNID4gc8WtbjsgIzY0MEQKK+aQjiA+IHPFq247ICM2NDBFCivmkI8gPiBiw7M7ICM2NDBGCivmkJAgPiBjaMO5OyAjNjQxMAor5pCRID4gcsWPbmc7ICM2NDExCivmkJIgPiBiw6huZzsgIzY0MTIKK+aQkyA+IGPFq287ICM2NDEzCivmkJQgPiBzxIFvOyAjNjQxNAor5pCVID4ga8OoOyAjNjQxNQor5pCWID4gecOhbzsgIzY0MTYKK+aQlyA+IGTEg287ICM2NDE3CivmkJggPiB6aMSrOyAjNjQxOAor5pCZID4gbsO5OyAjNjQxOQor5pCaID4geGnDqTsgIzY0MUEKK+aQmyA+IGppxIFuOyAjNjQxQgor5pCcID4gc8WNdTsgIzY0MUMKK+aQnSA+IHHErXU7ICM2NDFECivmkJ4gPiBnxINvOyAjNjQxRQor5pCfID4geGnEg247ICM2NDFGCivmkKAgPiBzaMO5bzsgIzY0MjAKK+aQoSA+IHPEg25nOyAjNjQyMQor5pCiID4gasOsbjsgIzY0MjIKK+aQoyA+IG1pw6g7ICM2NDIzCivmkKQgPiDDqDsgIzY0MjQKK+aQpSA+IGNow7ppOyAjNjQyNQor5pCmID4gbsO5bzsgIzY0MjYKK+aQpyA+IHNoxIFuOyAjNjQyNwor5pCoID4gdMOgOyAjNjQyOAor5pCpID4gamnDqTsgIzY0MjkKK+aQqiA+IHTDoW5nOyAjNjQyQQor5pCrID4gcMOhbjsgIzY0MkIKK+aQrCA+IGLEgW47ICM2NDJDCivmkK0gPiBkxIE7ICM2NDJECivmkK4gPiBsw6w7ICM2NDJFCivmkK8gPiB0xIFvOyAjNjQyRgor5pCwID4gaMO6OyAjNjQzMAor5pCxID4gemjDrDsgIzY0MzEKK+aQsiA+IHfEgTsgIzY0MzIKK+aQsyA+IHhpw6E7ICM2NDMzCivmkLQgPiBxacSBbjsgIzY0MzQKK+aQtSA+IHfDqG47ICM2NDM1CivmkLYgPiBxacSDbmc7ICM2NDM2CivmkLcgPiB0acOhbjsgIzY0MzcKK+aQuCA+IHpoxJNuOyAjNjQzOAor5pC5ID4gw6g7ICM2NDM5CivmkLogPiB4xKs7ICM2NDNBCivmkLsgPiBuw7lvOyAjNjQzQgor5pC8ID4gcXXDoW47ICM2NDNDCivmkL0gPiBjaMOhOyAjNjQzRAor5pC+ID4gemjDoDsgIzY0M0UKK+aQvyA+IGfDqTsgIzY0M0YKK+aRgCA+IHfFrTsgIzY0NDAKK+aRgSA+IMOobjsgIzY0NDEKK+aRgiA+IHNow6g7ICM2NDQyCivmkYMgPiBrw6FuZzsgIzY0NDMKK+aRhCA+IHNow6g7ICM2NDQ0CivmkYUgPiBzaMWrOyAjNjQ0NQor5pGGID4gYsSDaTsgIzY0NDYKK+aRhyA+IHnDoW87ICM2NDQ3CivmkYggPiBiw6xuOyAjNjQ0OAor5pGJID4gc8WNdTsgIzY0NDkKK+aRiiA+IHTEgW47ICM2NDRBCivmkYsgPiBzw6A7ICM2NDRCCivmkYwgPiBjaMSDbjsgIzY0NEMKK+aRjSA+IHPFq287ICM2NDRECivmkY4gPiBsacOhbzsgIzY0NEUKK+aRjyA+IGNoxY1uZzsgIzY0NEYKK+aRkCA+IGNodcSBbmc7ICM2NDUwCivmkZEgPiBnw7pvOyAjNjQ1MQor5pGSID4gYsOsbmc7ICM2NDUyCivmkZMgPiBmw6luZzsgIzY0NTMKK+aRlCA+IHNodcSBaTsgIzY0NTQKK+aRlSA+IGTDrDsgIzY0NTUKK+aRliA+IHHDrDsgIzY0NTYKK+aRlyA+IHNvdTsgIzY0NTcKK+aRmCA+IHpoxIFpOyAjNjQ1OAor5pGZID4gbGnEg247ICM2NDU5CivmkZogPiB0w6FuZzsgIzY0NUEKK+aRmyA+IGNoxKs7ICM2NDVCCivmkZwgPiBndcOgbjsgIzY0NUMKK+aRnSA+IGzDuTsgIzY0NUQKK+aRniA+IGzDum87ICM2NDVFCivmkZ8gPiBsxY91OyAjNjQ1Rgor5pGgID4gesWPbmc7ICM2NDYwCivmkaEgPiBnw6BpOyAjNjQ2MQor5pGiID4gaMO5OyAjNjQ2Mgor5pGjID4gemjEgTsgIzY0NjMKK+aRpCA+IGNodcSDbmc7ICM2NDY0CivmkaUgPiB0w6BuZzsgIzY0NjUKK+aRpiA+IGh1w6A7ICM2NDY2CivmkacgPiBjxatpOyAjNjQ2Nwor5pGoID4gbsOhaTsgIzY0NjgKK+aRqSA+IG3DszsgIzY0NjkKK+aRqiA+IGppxIFuZzsgIzY0NkEKK+aRqyA+IGfFq2k7ICM2NDZCCivmkawgPiB5w6xuZzsgIzY0NkMKK+aRrSA+IHpow607ICM2NDZECivmka4gPiDDoW87ICM2NDZFCivmka8gPiB6aMOsOyAjNjQ2Rgor5pGwID4gbmnDqDsgIzY0NzAKK+aRsSA+IG3DoW47ICM2NDcxCivmkbIgPiBzaMOgbjsgIzY0NzIKK+aRsyA+IGvFjXU7ICM2NDczCivmkbQgPiBzaMWrOyAjNjQ3NAor5pG1ID4gc8WtbzsgIzY0NzUKK+aRtiA+IHR1w6FuOyAjNjQ3Ngor5pG3ID4gamnEg287ICM2NDc3CivmkbggPiBtxY07ICM2NDc4CivmkbkgPiBtw7M7ICM2NDc5CivmkbogPiB6aMOpOyAjNjQ3QQor5pG7ID4geGnEgW47ICM2NDdCCivmkbwgPiBrxJNuZzsgIzY0N0MKK+aRvSA+IHBpxINvOyAjNjQ3RAor5pG+ID4gamnDoG5nOyAjNjQ3RQor5pG/ID4gecSrbjsgIzY0N0YKK+aSgCA+IGfDsnU7ICM2NDgwCivmkoEgPiBxacSBbjsgIzY0ODEKK+aSgiA+IGzHnGU7ICM2NDgyCivmkoMgPiBqw607ICM2NDgzCivmkoQgPiB5xKtuZzsgIzY0ODQKK+aShSA+IGp1xJM7ICM2NDg1CivmkoYgPiBwacSTOyAjNjQ4Ngor5pKHID4gcGnElTsgIzY0ODcKK+aSiCA+IGzEgW87ICM2NDg4CivmkokgPiBkxatuOyAjNjQ4OQor5pKKID4geGnDoG47ICM2NDhBCivmkosgPiBydcOhbjsgIzY0OEIKK+aSjCA+IGvDuWk7ICM2NDhDCivmko0gPiB6xINuOyAjNjQ4RAor5pKOID4gecOsOyAjNjQ4RQor5pKPID4geMO6bjsgIzY0OEYKK+aSkCA+IGNoxJNuZzsgIzY0OTAKK+aSkSA+IGNoxJNuZzsgIzY0OTEKK+aSkiA+IHPEgzsgIzY0OTIKK+aSkyA+IG7DoW87ICM2NDkzCivmkpQgPiBow6huZzsgIzY0OTQKK+aSlSA+IHPEqzsgIzY0OTUKK+aSliA+IHFpxINuOyAjNjQ5Ngor5pKXID4gaHXDoW5nOyAjNjQ5Nwor5pKYID4gZMSBOyAjNjQ5OAor5pKZID4gesWtbjsgIzY0OTkKK+aSmiA+IG5pxINuOyAjNjQ5QQor5pKbID4gbMStbjsgIzY0OUIKK+aSnCA+IHpoxJVuZzsgIzY0OUMKK+aSnSA+IGjFq2k7ICM2NDlECivmkp4gPiB6aHXDoG5nOyAjNjQ5RQor5pKfID4gamnEg287ICM2NDlGCivmkqAgPiBqxK07ICM2NEEwCivmkqEgPiBjxIFvOyAjNjRBMQor5pKiID4gZMSDbjsgIzY0QTIKK+aSoyA+IGTEg247ICM2NEEzCivmkqQgPiBjaMOoOyAjNjRBNAor5pKlID4gYsWNOyAjNjRBNQor5pKmID4gY2jElTsgIzY0QTYKK+aSpyA+IGp1w6k7ICM2NEE3CivmkqggPiB4acSBbzsgIzY0QTgKK+aSqSA+IGxpw6FvOyAjNjRBOQor5pKqID4gYsOobjsgIzY0QUEKK+aSqyA+IGbFrTsgIzY0QUIKK+aSrCA+IHFpw6BvOyAjNjRBQwor5pKtID4gYsOyOyAjNjRBRAor5pKuID4gY8WrbzsgIzY0QUUKK+aSryA+IHpow7pvOyAjNjRBRgor5pKwID4gemh1w6BuOyAjNjRCMAor5pKxID4gdMWtbzsgIzY0QjEKK+aSsiA+IHDFqzsgIzY0QjIKK+aSsyA+IHHDrG47ICM2NEIzCivmkrQgPiBkxatuOyAjNjRCNAor5pK1ID4gbmnEg247ICM2NEI1CivmkrcgPiB4acOpOyAjNjRCNwor5pK4ID4gbMWtOyAjNjRCOAor5pK5ID4gamnEg287ICM2NEI5CivmkrogPiBjdcSBbjsgIzY0QkEKK+aSuyA+IHTDoDsgIzY0QkIKK+aSvCA+IGjDoG47ICM2NEJDCivmkr0gPiBxacOgbzsgIzY0QkQKK+aSviA+IHpodcSBOyAjNjRCRQor5pK/ID4gamnEg247ICM2NEJGCivmk4AgPiBnxINuOyAjNjRDMAor5pOBID4gecWPbmc7ICM2NEMxCivmk4IgPiBsw6lpOyAjNjRDMgor5pODID4ga8WtbzsgIzY0QzMKK+aThCA+IGzFrTsgIzY0QzQKK+aThSA+IHNow6BuOyAjNjRDNQor5pOGID4gemjDum87ICM2NEM2Civmk4cgPiB6w6k7ICM2NEM3Civmk4ggPiBwxas7ICM2NEM4Civmk4kgPiBjaMO5bzsgIzY0QzkKK+aTiiA+IGrDrTsgIzY0Q0EKK+aTiyA+IGTEg25nOyAjNjRDQgor5pOMID4gc8WtbzsgIzY0Q0MKK+aTjSA+IGPEgW87ICM2NENECivmk44gPiBxw61uZzsgIzY0Q0UKK+aTjyA+IGrDrG5nOyAjNjRDRgor5pOQID4gaHXDoG47ICM2NEQwCivmk5EgPiBqacSTOyAjNjREMQor5pOSID4gccOtbjsgIzY0RDIKK+aTkyA+IGt1xINpOyAjNjREMwor5pOUID4gZMSBbjsgIzY0RDQKK+aTlSA+IHjEqzsgIzY0RDUKK+aTliA+IGfElTsgIzY0RDYKK+aTlyA+IHDDrDsgIzY0RDcKK+aTmCA+IGLDsjsgIzY0RDgKK+aTmSA+IMOgbzsgIzY0RDkKK+aTmiA+IGrDuTsgIzY0REEKK+aTmyA+IHnDqDsgIzY0REIKK+aTniA+IHPFj3U7ICM2NERFCivmk58gPiBtw607ICM2NERGCivmk6AgPiBqxK07ICM2NEUwCivmk6EgPiB0w6FpOyAjNjRFMQor5pOiID4gemjDum87ICM2NEUyCivmk6MgPiBkxINvOyAjNjRFMwor5pOkID4geMStbmc7ICM2NEU0Civmk6UgPiBsxINuOyAjNjRFNQor5pOmID4gY8SBOyAjNjRFNgor5pOnID4gasWtOyAjNjRFNwor5pOoID4gecOpOyAjNjRFOAor5pOpID4gcsWtOyAjNjRFOQor5pOqID4gecOoOyAjNjRFQQor5pOrID4gecOoOyAjNjRFQgor5pOsID4gbsStOyAjNjRFQwor5pOtID4gaMO5OyAjNjRFRAor5pOuID4gasOtOyAjNjRFRQor5pOvID4gYsOsbjsgIzY0RUYKK+aTsCA+IG7DrW5nOyAjNjRGMAor5pOxID4gZ8STOyAjNjRGMQor5pOyID4gemjDrTsgIzY0RjIKK+aTsyA+IGppw6k7ICM2NEYzCivmk7QgPiBrw7lvOyAjNjRGNAor5pO1ID4gbcOzOyAjNjRGNQor5pO2ID4gamnDoG47ICM2NEY2Civmk7cgPiB4acOpOyAjNjRGNwor5pO4ID4gbGnDqDsgIzY0RjgKK+aTuSA+IHTEgW47ICM2NEY5Civmk7ogPiBixINpOyAjNjRGQQor5pO7ID4gc8WPdTsgIzY0RkIKK+aTvCA+IGzFrTsgIzY0RkMKK+aTvSA+IGzHnGU7ICM2NEZECivmk74gPiByxINvOyAjNjRGRQor5pO/ID4gemjDrTsgIzY0RkYKK+aUgCA+IHDEgW47ICM2NTAwCivmlIEgPiB5xINuZzsgIzY1MDEKK+aUgiA+IGzDqGk7ICM2NTAyCivmlIMgPiBzw6A7ICM2NTAzCivmlIQgPiBzaMWrOyAjNjUwNAor5pSFID4gesSDbjsgIzY1MDUKK+aUhiA+IG5pxINuOyAjNjUwNgor5pSHID4geGnEg247ICM2NTA3CivmlIggPiBqw7luOyAjNjUwOAor5pSJID4gaMO5bzsgIzY1MDkKK+aUiiA+IGzDrDsgIzY1MEEKK+aUiyA+IGzDoDsgIzY1MEIKK+aUjCA+IGjDoG47ICM2NTBDCivmlI0gPiB5w61uZzsgIzY1MEQKK+aUjiA+IGzDujsgIzY1MEUKK+aUjyA+IGzFj25nOyAjNjUwRgor5pSQID4gcWnEgW47ICM2NTEwCivmlJEgPiBxacSBbjsgIzY1MTEKK+aUkiA+IHrEg247ICM2NTEyCivmlJMgPiBxacSBbjsgIzY1MTMKK+aUlCA+IGzDoW47ICM2NTE0CivmlJUgPiBzxIFuOyAjNjUxNQor5pSWID4gecSrbmc7ICM2NTE2CivmlJcgPiBtw6lpOyAjNjUxNwor5pSYID4gcsOhbmc7ICM2NTE4CivmlJkgPiBjaMSBbjsgIzY1MTkKK+aUmyA+IGN1xIFuOyAjNjUxQgor5pScID4geMSrOyAjNjUxQwor5pSdID4gc2jDqDsgIzY1MUQKK+aUniA+IGzFrW87ICM2NTFFCivmlJ8gPiBqw7luOyAjNjUxRgor5pSgID4gbcOtOyAjNjUyMAor5pShID4gbMOtOyAjNjUyMQor5pSiID4gesSDbjsgIzY1MjIKK+aUoyA+IGzHmGFuOyAjNjUyMwor5pSkID4gdMSBbjsgIzY1MjQKK+aUpSA+IHp1w6BuOyAjNjUyNQor5pSmID4gbMOsOyAjNjUyNgor5pSnID4gZGnEgW47ICM2NTI3CivmlKggPiB3xIE7ICM2NTI4CivmlKkgPiBkxINuZzsgIzY1MjkKK+aUqiA+IGppxINvOyAjNjUyQQor5pSrID4ganXDqTsgIzY1MkIKK+aUrCA+IGzEg247ICM2NTJDCivmlK0gPiBsw6w7ICM2NTJECivmlK4gPiBuxINuZzsgIzY1MkUKK+aUryA+IHpoxKs7ICM2NTJGCivmlLAgPiBnw7lpOyAjNjUzMAor5pSxID4gZ8WtaTsgIzY1MzEKK+aUsiA+IHHEqzsgIzY1MzIKK+aUsyA+IHjDrW47ICM2NTMzCivmlLQgPiBwxas7ICM2NTM0CivmlLUgPiBzxatpOyAjNjUzNQor5pS2ID4gc2jFjXU7ICM2NTM2CivmlLcgPiBrw6FvOyAjNjUzNwor5pS4ID4gecWNdTsgIzY1MzgKK+aUuSA+IGfEg2k7ICM2NTM5CivmlLogPiB5xK07ICM2NTNBCivmlLsgPiBnxY1uZzsgIzY1M0IKK+aUvCA+IGfEgW47ICM2NTNDCivmlL0gPiBixIFuOyAjNjUzRAor5pS+ID4gZsOgbmc7ICM2NTNFCivmlL8gPiB6aMOobmc7ICM2NTNGCivmlYAgPiBiw7M7ICM2NTQwCivmlYEgPiBkacSBbjsgIzY1NDEKK+aVgiA+IGvDsnU7ICM2NTQyCivmlYMgPiBtxK1uOyAjNjU0Mwor5pWEID4gd8O5OyAjNjU0NAor5pWFID4gZ8O5OyAjNjU0NQor5pWGID4gaMOpOyAjNjU0Ngor5pWHID4gY8OoOyAjNjU0Nwor5pWIID4geGnDoG87ICM2NTQ4CivmlYkgPiBtxK07ICM2NTQ5CivmlYogPiBjaMO5OyAjNjU0QQor5pWLID4gZ8OpOyAjNjU0Qgor5pWMID4gZMOtOyAjNjU0Qwor5pWNID4geMO5OyAjNjU0RAor5pWOID4gamnDoG87ICM2NTRFCivmlY8gPiBtxK1uOyAjNjU0Rgor5pWQID4gY2jDqW47ICM2NTUwCivmlZEgPiBqw6x1OyAjNjU1MQor5pWSID4gemjDqG47ICM2NTUyCivmlZMgPiBkw7pvOyAjNjU1Mwor5pWUID4gecWtOyAjNjU1NAor5pWVID4gY2jDrDsgIzY1NTUKK+aVliA+IMOhbzsgIzY1NTYKK+aVlyA+IGLDoGk7ICM2NTU3CivmlZggPiB4w7k7ICM2NTU4CivmlZkgPiBqacOgbzsgIzY1NTkKK+aVmiA+IGTDum87ICM2NTVBCivmlZsgPiBsacOgbjsgIzY1NUIKK+aVnCA+IG5pw6g7ICM2NTVDCivmlZ0gPiBiw6w7ICM2NTVECivmlZ4gPiBjaMSDbmc7ICM2NTVFCivmlZ8gPiBkacSDbjsgIzY1NUYKK+aVoCA+IGTDum87ICM2NTYwCivmlaEgPiB5w6w7ICM2NTYxCivmlaIgPiBnxINuOyAjNjU2Mgor5pWjID4gc8OgbjsgIzY1NjMKK+aVpCA+IGvElTsgIzY1NjQKK+aVpSA+IHnDoG47ICM2NTY1CivmlaYgPiBkxatuOyAjNjU2Ngor5pWnID4gccStOyAjNjU2Nwor5pWoID4gZMWPdTsgIzY1NjgKK+aVqSA+IHhpw6BvOyAjNjU2OQor5pWqID4gZMO6bzsgIzY1NkEKK+aVqyA+IGppw6BvOyAjNjU2Qgor5pWsID4gasOsbmc7ICM2NTZDCivmla0gPiB5w6FuZzsgIzY1NkQKK+aVriA+IHhpw6E7ICM2NTZFCivmla8gPiBtw61uOyAjNjU2Rgor5pWwID4gc2jDuTsgIzY1NzAKK+aVsSA+IMOhaTsgIzY1NzEKK+aVsiA+IHFpxIFvOyAjNjU3Mgor5pWzID4gw6FpOyAjNjU3Mwor5pW0ID4gemjElW5nOyAjNjU3NAor5pW1ID4gZMOtOyAjNjU3NQor5pW2ID4gemjDqG47ICM2NTc2CivmlbcgPiBmxas7ICM2NTc3CivmlbggPiBzaMO5OyAjNjU3OAor5pW5ID4gbGnDoW87ICM2NTc5CivmlbogPiBxxas7ICM2NTdBCivmlbsgPiB4w6xvbmc7ICM2NTdCCivmlbwgPiB4xK07ICM2NTdDCivmlb0gPiBqacSDbzsgIzY1N0QKK+aVvyA+IGppxINvOyAjNjU3Rgor5paAID4gemjDum87ICM2NTgwCivmloEgPiB5w6w7ICM2NTgxCivmloIgPiBsacOgbjsgIzY1ODIKK+aWgyA+IGLDrDsgIzY1ODMKK+aWhCA+IGzDrDsgIzY1ODQKK+aWhSA+IHhpw6BvOyAjNjU4NQor5paGID4geGnDoG87ICM2NTg2CivmlocgPiB3w6luOyAjNjU4Nwor5paIID4geHXDqTsgIzY1ODgKK+aWiSA+IHHDrTsgIzY1ODkKK+aWiiA+IHHDrTsgIzY1OEEKK+aWiyA+IHpoxIFpOyAjNjU4Qgor5paMID4gYsSrbjsgIzY1OEMKK+aWjSA+IGp1w6k7ICM2NThECivmlo4gPiB6aMSBaTsgIzY1OEUKK+aWkCA+IGbElWk7ICM2NTkwCivmlpEgPiBixIFuOyAjNjU5MQor5paSID4gYsSBbjsgIzY1OTIKK+aWkyA+IGzDoW47ICM2NTkzCivmlpQgPiB5xa07ICM2NTk0CivmlpUgPiBsw6FuOyAjNjU5NQor5paWID4gd8SVaTsgIzY1OTYKK+aWlyA+IGTFj3U7ICM2NTk3CivmlpggPiBzaMSTbmc7ICM2NTk4CivmlpkgPiBsacOgbzsgIzY1OTkKK+aWmiA+IGppxIM7ICM2NTlBCivmlpsgPiBow7o7ICM2NTlCCivmlpwgPiB4acOpOyAjNjU5Qwor5padID4gamnEgzsgIzY1OUQKK+aWniA+IHnFrTsgIzY1OUUKK+aWnyA+IHpoxJNuOyAjNjU5Rgor5pagID4gamnDoG87ICM2NUEwCivmlqEgPiB3w7I7ICM2NUExCivmlqIgPiB0xY91OyAjNjVBMgor5pajID4gY2jDuTsgIzY1QTMKK+aWpCA+IGrEq247ICM2NUE0CivmlqUgPiBjaMOsOyAjNjVBNQor5pamID4gecOtbjsgIzY1QTYKK+aWpyA+IGbFrTsgIzY1QTcKK+aWqCA+IHFpxIFuZzsgIzY1QTgKK+aWqSA+IHpoxINuOyAjNjVBOQor5paqID4gccO6OyAjNjVBQQor5parID4gemjDum87ICM2NUFCCivmlqwgPiB6aMSDbjsgIzY1QUMKK+aWrSA+IGR1w6BuOyAjNjVBRAor5pauID4gemjDum87ICM2NUFFCivmlq8gPiBzxKs7ICM2NUFGCivmlrAgPiB4xKtuOyAjNjVCMAor5paxID4gemjDum87ICM2NUIxCivmlrIgPiB6aMO6bzsgIzY1QjIKK+aWsyA+IHHDrW47ICM2NUIzCivmlrQgPiBsw61uOyAjNjVCNAor5pa1ID4gemjDum87ICM2NUI1CivmlrYgPiBjaMO5OyAjNjVCNgor5pa3ID4gZHXDoG47ICM2NUI3CivmlrggPiB6aMWtOyAjNjVCOAor5pa5ID4gZsSBbmc7ICM2NUI5CivmlrogPiB4acOoOyAjNjVCQQor5pa7ID4gaMOhbmc7ICM2NUJCCivmlrwgPiB5w7o7ICM2NUJDCivmlr0gPiBzaMSrOyAjNjVCRAor5pa+ID4gcMOoaTsgIzY1QkUKK+aWvyA+IHnDs3U7ICM2NUJGCivml4EgPiBww6FuZzsgIzY1QzEKK+aXgiA+IHHDrTsgIzY1QzIKK+aXgyA+IHpoxIFuOyAjNjVDMwor5peEID4gbcOhbzsgIzY1QzQKK+aXhSA+IGzHmjsgIzY1QzUKK+aXhiA+IHDDqGk7ICM2NUM2Civml4cgPiBwxKs7ICM2NUM3Civml4ggPiBsw611OyAjNjVDOAor5peJID4gZsWrOyAjNjVDOQor5peKID4gZsSDbmc7ICM2NUNBCivml4sgPiB4dcOhbjsgIzY1Q0IKK+aXjCA+IGrEq25nOyAjNjVDQwor5peNID4gasSrbmc7ICM2NUNECivml44gPiBuxK07ICM2NUNFCivml48gPiB6w7o7ICM2NUNGCivml5AgPiB6aMOgbzsgIzY1RDAKK+aXkSA+IHnErTsgIzY1RDEKK+aXkiA+IGzDrXU7ICM2NUQyCivml5MgPiBzaMSBbzsgIzY1RDMKK+aXlCA+IGppw6BuOyAjNjVENAor5peWID4gecStOyAjNjVENgor5peXID4gccOtOyAjNjVENwor5peYID4gemjDrDsgIzY1RDgKK+aXmSA+IGbEgW47ICM2NUQ5Civml5ogPiBwacSBbzsgIzY1REEKK+aXmyA+IGbEgW47ICM2NURCCivml5wgPiB6aMSBbjsgIzY1REMKK+aXnSA+IGd1w6BpOyAjNjVERAor5peeID4gc8O5aTsgIzY1REUKK+aXnyA+IHnDujsgIzY1REYKK+aXoCA+IHfDujsgIzY1RTAKK+aXoSA+IGrDrDsgIzY1RTEKK+aXoiA+IGrDrDsgIzY1RTIKK+aXoyA+IGrDrDsgIzY1RTMKK+aXpCA+IGjDuW87ICM2NUU0Civml6UgPiByw6w7ICM2NUU1Civml6YgPiBkw6BuOyAjNjVFNgor5penID4gasOsdTsgIzY1RTcKK+aXqCA+IHpoxK07ICM2NUU4Civml6kgPiB6xINvOyAjNjVFOQor5peqID4geGnDqTsgIzY1RUEKK+aXqyA+IHRpxIFvOyAjNjVFQgor5pesID4geMO6bjsgIzY1RUMKK+aXrSA+IHjDuTsgIzY1RUQKK+aXriA+IHjDuTsgIzY1RUUKK+aXryA+IHjDuTsgIzY1RUYKK+aXsCA+IGfDoG47ICM2NUYwCivml7EgPiBow6BuOyAjNjVGMQor5peyID4gdMOhaTsgIzY1RjIKK+aXsyA+IGTDrDsgIzY1RjMKK+aXtCA+IHjFqzsgIzY1RjQKK+aXtSA+IGNoxINuOyAjNjVGNQor5pe2ID4gc2jDrTsgIzY1RjYKK+aXtyA+IGt1w6BuZzsgIzY1RjcKK+aXuCA+IHnDoW5nOyAjNjVGOAor5pe5ID4gc2jDrTsgIzY1RjkKK+aXuiA+IHfDoG5nOyAjNjVGQQor5pe7ID4gbcOtbjsgIzY1RkIKK+aXvCA+IG3DrW47ICM2NUZDCivml70gPiB0xatuOyAjNjVGRAor5pe+ID4gY2jFq247ICM2NUZFCivml78gPiB3xa07ICM2NUZGCivmmIAgPiB5w7puOyAjNjYwMAor5piBID4gYsOoaTsgIzY2MDEKK+aYgiA+IMOhbmc7ICM2NjAyCivmmIMgPiB6w6g7ICM2NjAzCivmmIQgPiBixINuOyAjNjYwNAor5piFID4gamnDqTsgIzY2MDUKK+aYhiA+IGvFq247ICM2NjA2CivmmIcgPiBzaMSTbmc7ICM2NjA3CivmmIggPiBow7k7ICM2NjA4CivmmIkgPiBmxINuZzsgIzY2MDkKK+aYiiA+IGjDoG87ICM2NjBBCivmmIsgPiBnw7lpOyAjNjYwQgor5piMID4gY2jEgW5nOyAjNjYwQwor5piNID4geHXEgW47ICM2NjBECivmmI4gPiBtw61uZzsgIzY2MEUKK+aYjyA+IGjFq247ICM2NjBGCivmmJAgPiBmxJNuOyAjNjYxMAor5piRID4gccStbjsgIzY2MTEKK+aYkiA+IGjFqzsgIzY2MTIKK+aYkyA+IHnDrDsgIzY2MTMKK+aYlCA+IHjDrTsgIzY2MTQKK+aYlSA+IHjEq247ICM2NjE1CivmmJYgPiB5w6FuOyAjNjYxNgor5piXID4gesOoOyAjNjYxNwor5piYID4gZsSDbmc7ICM2NjE4CivmmJkgPiB0w6FuOyAjNjYxOQor5piaID4gc2jDqG47ICM2NjFBCivmmJsgPiBqw7k7ICM2NjFCCivmmJwgPiB5w6FuZzsgIzY2MUMKK+aYnSA+IHrEg247ICM2NjFECivmmJ4gPiBixK1uZzsgIzY2MUUKK+aYnyA+IHjEq25nOyAjNjYxRgor5pigID4gecOsbmc7ICM2NjIwCivmmKEgPiB4dcOgbjsgIzY2MjEKK+aYoiA+IHDElWk7ICM2NjIyCivmmKMgPiB6aMSVbjsgIzY2MjMKK+aYpCA+IGzEq25nOyAjNjYyNAor5pilID4gY2jFq247ICM2NjI1CivmmKYgPiBow6BvOyAjNjYyNgor5pinID4gbcOoaTsgIzY2MjcKK+aYqCA+IHrDum87ICM2NjI4CivmmKkgPiBtw7I7ICM2NjI5CivmmKogPiBiacOgbjsgIzY2MkEKK+aYqyA+IHjFrTsgIzY2MkIKK+aYrCA+IGjFq247ICM2NjJDCivmmK0gPiB6aMSBbzsgIzY2MkQKK+aYriA+IHrDsm5nOyAjNjYyRQor5pivID4gc2jDrDsgIzY2MkYKK+aYsCA+IHNow6w7ICM2NjMwCivmmLEgPiB5w7k7ICM2NjMxCivmmLIgPiBmw6hpOyAjNjYzMgor5pizID4gZGnDqTsgIzY2MzMKK+aYtCA+IG3Eg287ICM2NjM0CivmmLUgPiBuw6w7ICM2NjM1CivmmLYgPiBjaMSDbmc7ICM2NjM2CivmmLcgPiB3xJNuOyAjNjYzNwor5pi4ID4gZMWNbmc7ICM2NjM4CivmmLkgPiDEg2k7ICM2NjM5CivmmLogPiBixK1uZzsgIzY2M0EKK+aYuyA+IMOhbmc7ICM2NjNCCivmmLwgPiB6aMOydTsgIzY2M0MKK+aYvSA+IGzDs25nOyAjNjYzRAor5pi+ID4geGnEg247ICM2NjNFCivmmL8gPiBrdcOgbmc7ICM2NjNGCivmmYAgPiB0acSDbzsgIzY2NDAKK+aZgSA+IGNow6FvOyAjNjY0MQor5pmCID4gc2jDrTsgIzY2NDIKK+aZgyA+IGh1xINuZzsgIzY2NDMKK+aZhCA+IGh1xINuZzsgIzY2NDQKK+aZhSA+IHh1xIFuOyAjNjY0NQor5pmGID4ga8O6aTsgIzY2NDYKK+aZhyA+IHjFqzsgIzY2NDcKK+aZiCA+IGppxINvOyAjNjY0OAor5pmJID4gasOsbjsgIzY2NDkKK+aZiiA+IHpoxK07ICM2NjRBCivmmYsgPiBqw6xuOyAjNjY0Qgor5pmMID4gc2jEg25nOyAjNjY0Qwor5pmNID4gdMOzbmc7ICM2NjRECivmmY4gPiBoxY9uZzsgIzY2NEUKK+aZjyA+IHnDoG47ICM2NjRGCivmmZAgPiBnxIFpOyAjNjY1MAor5pmRID4geGnEg25nOyAjNjY1MQor5pmSID4gc2jDoGk7ICM2NjUyCivmmZMgPiB4acSDbzsgIzY2NTMKK+aZlCA+IHnEkzsgIzY2NTQKK+aZlSA+IHnFq247ICM2NjU1CivmmZYgPiBoxatpOyAjNjY1Ngor5pmXID4gaMOhbjsgIzY2NTcKK+aZmCA+IGjDoG47ICM2NjU4CivmmZkgPiBqw7luOyAjNjY1OQor5pmaID4gd8SDbjsgIzY2NUEKK+aZmyA+IHhpw6BuOyAjNjY1Qgor5pmcID4ga8WrbjsgIzY2NUMKK+aZnSA+IHpow7J1OyAjNjY1RAor5pmeID4geMSrOyAjNjY1RQor5pmfID4gY2jDqW5nOyAjNjY1Rgor5pmgID4gc2jDqW5nOyAjNjY2MAor5pmhID4gYsWrOyAjNjY2MQor5pmiID4gemjEkzsgIzY2NjIKK+aZoyA+IHpoxJM7ICM2NjYzCivmmaQgPiB3w7k7ICM2NjY0CivmmaUgPiBow6BuOyAjNjY2NQor5pmmID4gaMO5aTsgIzY2NjYKK+aZpyA+IGjDoG87ICM2NjY3CivmmaggPiBjaMOpbjsgIzY2NjgKK+aZqSA+IHfEg247ICM2NjY5CivmmaogPiB0acSDbjsgIzY2NkEKK+aZqyA+IHpow7pvOyAjNjY2Qgor5pmsID4gesO5aTsgIzY2NkMKK+aZrSA+IHpoxY91OyAjNjY2RAor5pmuID4gcMWtOyAjNjY2RQor5pmvID4gasStbmc7ICM2NjZGCivmmbAgPiB4xKs7ICM2NjcwCivmmbEgPiBzaMSDbjsgIzY2NzEKK+aZsiA+IHnErTsgIzY2NzIKK+aZsyA+IHjDrDsgIzY2NzMKK+aZtCA+IHHDrW5nOyAjNjY3NAor5pm1ID4gccStOyAjNjY3NQor5pm2ID4gasSrbmc7ICM2Njc2CivmmbcgPiBnxa1pOyAjNjY3Nwor5pm4ID4gemjElW47ICM2Njc4CivmmbkgPiB5w6w7ICM2Njc5CivmmbogPiB6aMOsOyAjNjY3QQor5pm7ID4gxINuOyAjNjY3Qgor5pm8ID4gd8SDbjsgIzY2N0MKK+aZvSA+IGzDrW47ICM2NjdECivmmb4gPiBsacOgbmc7ICM2NjdFCivmmb8gPiBjaMSBbmc7ICM2NjdGCivmmoAgPiB3xINuZzsgIzY2ODAKK+aagSA+IHhpxINvOyAjNjY4MQor5pqCID4gesOgbjsgIzY2ODIKK+aahCA+IHh1xIFuOyAjNjY4NAor5pqFID4geHXEg247ICM2Njg1CivmmoYgPiB5w607ICM2Njg2CivmmocgPiB4acOhOyAjNjY4Nwor5pqIID4gecWrbjsgIzY2ODgKK+aaiSA+IGjFq2k7ICM2Njg5CivmmoogPiBmxa07ICM2NjhBCivmmosgPiBtxK1uOyAjNjY4Qgor5pqMID4ga8O6aTsgIzY2OEMKK+aajSA+IGjDqDsgIzY2OEQKK+aajiA+IHnDrG5nOyAjNjY4RQor5pqPID4gZMWtOyAjNjY4Rgor5pqQID4gd8SVaTsgIzY2OTAKK+aakSA+IHNoxa07ICM2NjkxCivmmpIgPiBxw61uZzsgIzY2OTIKK+aakyA+IG3DoG87ICM2NjkzCivmmpQgPiBuw6FuOyAjNjY5NAor5pqVID4gamnEg247ICM2Njk1CivmmpYgPiBudcSDbjsgIzY2OTYKK+aalyA+IMOgbjsgIzY2OTcKK+aamCA+IHnDoW5nOyAjNjY5OAor5pqZID4gY2jFq247ICM2Njk5CivmmpogPiB5w6FvOyAjNjY5QQor5pqbID4gc8WtbzsgIzY2OUIKK+aanCA+IGrDrG47ICM2NjlDCivmmp0gPiBtw61uZzsgIzY2OUQKK+aaniA+IGppxINvOyAjNjY5RQor5pqfID4ga8SDaTsgIzY2OUYKK+aaoCA+IGfEg287ICM2NkEwCivmmqEgPiB3xJVuZzsgIzY2QTEKK+aaoiA+IGNow6BuZzsgIzY2QTIKK+aaoyA+IHHDrDsgIzY2QTMKK+aapCA+IGjDoG87ICM2NkE0CivmmqUgPiB5w6BuOyAjNjZBNQor5pqmID4gbMOsOyAjNjZBNgor5pqnID4gw6BpOyAjNjZBNwor5pqoID4gasOsOyAjNjZBOAor5pqpID4gZ8O5aTsgIzY2QTkKK+aaqiA+IG3ElW47ICM2NkFBCivmmqsgPiB6w6BuOyAjNjZBQgor5pqsID4geGnDqDsgIzY2QUMKK+aarSA+IGjDoG87ICM2NkFECivmmq4gPiBtw7k7ICM2NkFFCivmmq8gPiBtw7I7ICM2NkFGCivmmrAgPiBjxY1uZzsgIzY2QjAKK+aasSA+IG7DrDsgIzY2QjEKK+aasiA+IHpoxIFuZzsgIzY2QjIKK+aasyA+IGjDuWk7ICM2NkIzCivmmrQgPiBiw6BvOyAjNjZCNAor5pq1ID4gaMOgbjsgIzY2QjUKK+aatiA+IHh1w6FuOyAjNjZCNgor5pq3ID4gY2h1w6FuOyAjNjZCNwor5pq4ID4gbGnDoW87ICM2NkI4CivmmrkgPiB4acSBbjsgIzY2QjkKK+aauiA+IGTDoG47ICM2NkJBCivmmrsgPiBqxK1uZzsgIzY2QkIKK+aavCA+IHBpxJM7ICM2NkJDCivmmr0gPiBsw61uOyAjNjZCRAor5pq+ID4gdMWrbjsgIzY2QkUKK+aavyA+IHjErTsgIzY2QkYKK+abgCA+IHnDrDsgIzY2QzAKK+abgSA+IGrDrDsgIzY2QzEKK+abgiA+IGh1w6BuZzsgIzY2QzIKK+abgyA+IHTDoGk7ICM2NkMzCivmm4QgPiB5w6g7ICM2NkM0Civmm4UgPiB5w6g7ICM2NkM1Civmm4YgPiBsw6w7ICM2NkM2Civmm4cgPiB0w6FuOyAjNjZDNwor5puIID4gdMOzbmc7ICM2NkM4Civmm4kgPiB4acSDbzsgIzY2QzkKK+abiiA+IGbDqGk7ICM2NkNBCivmm4sgPiBxxK1uOyAjNjZDQgor5puMID4gemjDoG87ICM2NkNDCivmm40gPiBow6BvOyAjNjZDRAor5puOID4gecOsOyAjNjZDRQor5puPID4geGnDoG5nOyAjNjZDRgor5puQID4geMSrbmc7ICM2NkQwCivmm5EgPiBzxJNuOyAjNjZEMQor5puSID4gamnEg287ICM2NkQyCivmm5MgPiBiw6BvOyAjNjZEMwor5puUID4gasOsbmc7ICM2NkQ0Civmm5UgPiB5acOgbjsgIzY2RDUKK+abliA+IMOgaTsgIzY2RDYKK+ablyA+IHnDqDsgIzY2RDcKK+abmCA+IHLDujsgIzY2RDgKK+abmSA+IHNow7k7ICM2NkQ5Civmm5ogPiBtw6luZzsgIzY2REEKK+abmyA+IHjFq247ICM2NkRCCivmm5wgPiB5w6BvOyAjNjZEQwor5pudID4gcMO5OyAjNjZERAor5pueID4gbMOsOyAjNjZERQor5pufID4gY2jDqW47ICM2NkRGCivmm6AgPiBrdcOgbmc7ICM2NkUwCivmm6EgPiBkacOpOyAjNjZFMQor5pujID4gecOgbjsgIzY2RTMKK+abpCA+IGjDuW87ICM2NkU0Civmm6UgPiBsw7o7ICM2NkU1Civmm6YgPiB4xKs7ICM2NkU2Civmm6cgPiByw7NuZzsgIzY2RTcKK+abqCA+IGzDs25nOyAjNjZFOAor5pupID4gbsSDbmc7ICM2NkU5Civmm6ogPiBsxa1vOyAjNjZFQQor5purID4gbHXDoW47ICM2NkVCCivmm6wgPiBzaMOgaTsgIzY2RUMKK+abrSA+IHTEg25nOyAjNjZFRAor5puuID4gecSDbjsgIzY2RUUKK+abryA+IGNow7o7ICM2NkVGCivmm7AgPiB5dcSTOyAjNjZGMAor5puxID4geXXEkzsgIzY2RjEKK+absiA+IHHFrTsgIzY2RjIKK+absyA+IHnDrDsgIzY2RjMKK+abtCA+IGfDqG5nOyAjNjZGNAor5pu1ID4gecOoOyAjNjZGNQor5pu2ID4gaMWrOyAjNjZGNgor5pu3ID4gaMOpOyAjNjZGNwor5pu4ID4gc2jFqzsgIzY2RjgKK+abuSA+IGPDoW87ICM2NkY5Civmm7ogPiBjw6FvOyAjNjZGQQor5pu8ID4gbcOgbjsgIzY2RkMKK+abvSA+IGPEk25nOyAjNjZGRAor5pu+ID4gY8Opbmc7ICM2NkZFCivmm78gPiB0w6w7ICM2NkZGCivmnIAgPiB6w7lpOyAjNjcwMAor5pyBID4gY8SDbjsgIzY3MDEKK+acgiA+IHjDuTsgIzY3MDIKK+acgyA+IGjDuWk7ICM2NzAzCivmnIQgPiB5w6xuOyAjNjcwNAor5pyFID4gcWnDqDsgIzY3MDUKK+achiA+IGbEk247ICM2NzA2CivmnIcgPiBww607ICM2NzA3CivmnIggPiB5dcOoOyAjNjcwOAor5pyJID4gecWPdTsgIzY3MDkKK+aciiA+IHJ1xINuOyAjNjcwQQor5pyLID4gcMOpbmc7ICM2NzBCCivmnIwgPiBixIFuOyAjNjcwQwor5pyNID4gZsO6OyAjNjcwRAor5pyOID4gbMOtbmc7ICM2NzBFCivmnI8gPiBmxJVpOyAjNjcwRgor5pyQID4gccO6OyAjNjcxMAor5pySID4gbsecOyAjNjcxMgor5pyTID4gdGnDoG87ICM2NzEzCivmnJQgPiBzaMO5bzsgIzY3MTQKK+aclSA+IHpow6huOyAjNjcxNQor5pyWID4gbMSDbmc7ICM2NzE2CivmnJcgPiBsxINuZzsgIzY3MTcKK+acmCA+IGp1xIFuOyAjNjcxOAor5pyZID4gbcOtbmc7ICM2NzE5CivmnJogPiBodcSBbmc7ICM2NzFBCivmnJsgPiB3w6BuZzsgIzY3MUIKK+acnCA+IHTFq247ICM2NzFDCivmnJ0gPiB6aMSBbzsgIzY3MUQKK+acniA+IGrEqzsgIzY3MUUKK+acnyA+IHHDrTsgIzY3MUYKK+acoCA+IHnEq25nOyAjNjcyMAor5pyhID4gesWNbmc7ICM2NzIxCivmnKIgPiB3w6BuZzsgIzY3MjIKK+acoyA+IHTDs25nOyAjNjcyMwor5pykID4gbMSDbmc7ICM2NzI0CivmnKYgPiBtw6luZzsgIzY3MjYKK+acpyA+IGzDs25nOyAjNjcyNwor5pyoID4gbcO5OyAjNjcyOAor5pypID4gZMSVbmc7ICM2NzI5CivmnKogPiB3w6hpOyAjNjcyQQor5pyrID4gbcOyOyAjNjcyQgor5pysID4gYsSVbjsgIzY3MkMKK+acrSA+IHpow6E7ICM2NzJECivmnK4gPiB6aMO6OyAjNjcyRQor5pyvID4gemjDujsgIzY3MkYKK+acsSA+IHpoxas7ICM2NzMxCivmnLIgPiByw6luOyAjNjczMgor5pyzID4gYsSBOyAjNjczMwor5py0ID4gcMOyOyAjNjczNAor5py1ID4gZMWtbzsgIzY3MzUKK+actiA+IGTFrW87ICM2NzM2CivmnLcgPiBkxIFvOyAjNjczNwor5py4ID4gbMOsOyAjNjczOAor5py5ID4gccOtdTsgIzY3MzkKK+acuiA+IGrEqzsgIzY3M0EKK+acuyA+IGrEq3U7ICM2NzNCCivmnLwgPiBixK07ICM2NzNDCivmnL0gPiB4xK11OyAjNjczRAor5py+ID4gdMOtbmc7ICM2NzNFCivmnL8gPiBjw6w7ICM2NzNGCivmnYAgPiBzaMSBOyAjNjc0MAor5p2CID4gesOhOyAjNjc0Mgor5p2DID4gcXXDoW47ICM2NzQzCivmnYQgPiBxacSBbjsgIzY3NDQKK+adhSA+IHnDujsgIzY3NDUKK+adhiA+IGfEgW47ICM2NzQ2CivmnYcgPiB3xas7ICM2NzQ3CivmnYggPiBjaMSBOyAjNjc0OAor5p2JID4gc2jEgW47ICM2NzQ5CivmnYogPiB4w7puOyAjNjc0QQor5p2LID4gZsSBbjsgIzY3NEIKK+adjCA+IHfDuTsgIzY3NEMKK+adjSA+IHrErTsgIzY3NEQKK+adjiA+IGzErTsgIzY3NEUKK+adjyA+IHjDrG5nOyAjNjc0Rgor5p2QID4gY8OhaTsgIzY3NTAKK+adkSA+IGPFq247ICM2NzUxCivmnZIgPiByw6huOyAjNjc1Mgor5p2TID4gc2jDoW87ICM2NzUzCivmnZQgPiB0xatvOyAjNjc1NAor5p2VID4gZMOsOyAjNjc1NQor5p2WID4gemjDoG5nOyAjNjc1Ngor5p2XID4gbcOhbmc7ICM2NzU3CivmnZggPiBjaMOsOyAjNjc1OAor5p2ZID4gecOsOyAjNjc1OQor5p2aID4gZ8WtOyAjNjc1QQor5p2bID4gZ8WNbmc7ICM2NzVCCivmnZwgPiBkw7k7ICM2NzVDCivmnZ0gPiB5w607ICM2NzVECivmnZ4gPiBxxK07ICM2NzVFCivmnZ8gPiBzaMO5OyAjNjc1Rgor5p2gID4gZ8SBbmc7ICM2NzYwCivmnaEgPiB0acOhbzsgIzY3NjEKK+adpSA+IGzDoWk7ICM2NzY1CivmnacgPiBtw6FuZzsgIzY3NjcKK+adqCA+IHnDoW5nOyAjNjc2OAor5p2pID4gbcOgOyAjNjc2OQor5p2qID4gbWnEg287ICM2NzZBCivmnasgPiBzw6w7ICM2NzZCCivmnawgPiB5dcOhbjsgIzY3NkMKK+adrSA+IGjDoW5nOyAjNjc2RAor5p2uID4gZsOoaTsgIzY3NkUKK+adryA+IGLEk2k7ICM2NzZGCivmnbAgPiBqacOpOyAjNjc3MAor5p2xID4gZMWNbmc7ICM2NzcxCivmnbIgPiBnxINvOyAjNjc3Mgor5p2zID4gecSDbzsgIzY3NzMKK+adtCA+IHhpxIFuOyAjNjc3NAor5p21ID4gY2jFrTsgIzY3NzUKK+adtiA+IHHFq247ICM2Nzc2CivmnbcgPiBww6E7ICM2Nzc3CivmnbggPiBzaMWrOyAjNjc3OAor5p25ID4gaHXDoDsgIzY3NzkKK+aduiA+IHjEq247ICM2NzdBCivmnbsgPiBjaMWPdTsgIzY3N0IKK+advCA+IHpow7k7ICM2NzdDCivmnb0gPiBjaMWPdTsgIzY3N0QKK+adviA+IHPFjW5nOyAjNjc3RQor5p2/ID4gYsSDbjsgIzY3N0YKK+aegCA+IHPFjW5nOyAjNjc4MAor5p6BID4gasOtOyAjNjc4MQor5p6CID4geXXDqDsgIzY3ODIKK+aegyA+IGrDrG47ICM2NzgzCivmnoQgPiBnxY11OyAjNjc4NAor5p6FID4gasSrOyAjNjc4NQor5p6GID4gbcOhbzsgIzY3ODYKK+aehyA+IHDDrTsgIzY3ODcKK+aeiCA+IGLDrDsgIzY3ODgKK+aeiSA+IHfEg25nOyAjNjc4OQor5p6KID4gw6BuZzsgIzY3OEEKK+aeiyA+IGbEgW5nOyAjNjc4Qgor5p6MID4gZsOpbjsgIzY3OEMKK+aejSA+IHnDrDsgIzY3OEQKK+aejiA+IGbDujsgIzY3OEUKK+aejyA+IG7DoW47ICM2NzhGCivmnpAgPiB4xKs7ICM2NzkwCivmnpEgPiBow7k7ICM2NzkxCivmnpIgPiB5w6E7ICM2NzkyCivmnpMgPiBkxY91OyAjNjc5Mwor5p6UID4geMO6bjsgIzY3OTQKK+aelSA+IHpoxJVuOyAjNjc5NQor5p6WID4gecSBbzsgIzY3OTYKK+aelyA+IGzDrW47ICM2Nzk3CivmnpggPiByw7lpOyAjNjc5OAor5p6ZID4gw6k7ICM2Nzk5CivmnpogPiBtw6lpOyAjNjc5QQor5p6bID4gemjDoG87ICM2NzlCCivmnpwgPiBnxa1vOyAjNjc5Qwor5p6dID4gemjEqzsgIzY3OUQKK+aeniA+IGPFjW5nOyAjNjc5RQor5p6fID4gecO5bjsgIzY3OUYKK+aeoSA+IGTFj3U7ICM2N0ExCivmnqIgPiBzaMWrOyAjNjdBMgor5p6jID4gesSDbzsgIzY3QTMKK+aepSA+IGzDrDsgIzY3QTUKK+aepyA+IGppw6BuOyAjNjdBNwor5p6oID4gY2jDqW5nOyAjNjdBOAor5p6qID4gcWnEgW5nOyAjNjdBQQor5p6rID4gZsSTbmc7ICM2N0FCCivmnqwgPiBuw6FuOyAjNjdBQwor5p6tID4geGnEgW87ICM2N0FECivmnq4gPiB4acSBbjsgIzY3QUUKK+aeryA+IGvFqzsgIzY3QUYKK+aesCA+IHDDrW5nOyAjNjdCMAor5p6xID4gecOtOyAjNjdCMQor5p6yID4geMStOyAjNjdCMgor5p6zID4gemjEqzsgIzY3QjMKK+aetCA+IGd1xINpOyAjNjdCNAor5p61ID4geGnEgW87ICM2N0I1CivmnrYgPiBqacOgOyAjNjdCNgor5p63ID4gamnEgTsgIzY3QjcKK+aeuCA+IGfFj3U7ICM2N0I4CivmnrkgPiBmxas7ICM2N0I5CivmnrogPiBtw7I7ICM2N0JBCivmnrsgPiB5w6w7ICM2N0JCCivmnrwgPiB5w6g7ICM2N0JDCivmnr0gPiB5w6g7ICM2N0JECivmnr4gPiBzaMOsOyAjNjdCRQor5p6/ID4gbmnDqDsgIzY3QkYKK+afgCA+IGLErTsgIzY3QzAKK+afgSA+IGTDuW87ICM2N0MxCivmn4IgPiB5w607ICM2N0MyCivmn4MgPiBsw61uZzsgIzY3QzMKK+afhCA+IGLErW5nOyAjNjdDNAor5p+FID4gbsStOyAjNjdDNQor5p+GID4gbMSBOyAjNjdDNgor5p+HID4gaMOpOyAjNjdDNwor5p+IID4gcMOhbjsgIzY3QzgKK+afiSA+IGbDoW47ICM2N0M5Civmn4ogPiB6aMWNbmc7ICM2N0NBCivmn4sgPiBkw6BpOyAjNjdDQgor5p+MID4gY8OtOyAjNjdDQwor5p+NID4gecSBbmc7ICM2N0NECivmn44gPiBmxas7ICM2N0NFCivmn48gPiBiw7M7ICM2N0NGCivmn5AgPiBtxY91OyAjNjdEMAor5p+RID4gZ8SBbjsgIzY3RDEKK+afkiA+IHHEqzsgIzY3RDIKK+afkyA+IHLEg247ICM2N0QzCivmn5QgPiByw7N1OyAjNjdENAor5p+VID4gbcOgbzsgIzY3RDUKK+afliA+IHpoxIFvOyAjNjdENgor5p+XID4gc8WNbmc7ICM2N0Q3Civmn5ggPiB6aMOoOyAjNjdEOAor5p+ZID4geGnDoTsgIzY3RDkKK+afmiA+IHnDsnU7ICM2N0RBCivmn5sgPiBzaMSTbjsgIzY3REIKK+afnCA+IGrFrTsgIzY3REMKK+afnSA+IHTDuW87ICM2N0RECivmn54gPiB6w7lvOyAjNjdERQor5p+fID4gbsOhbjsgIzY3REYKK+afoCA+IG7DrW5nOyAjNjdFMAor5p+hID4gecWPbmc7ICM2N0UxCivmn6IgPiBkxK07ICM2N0UyCivmn6MgPiB6aMOtOyAjNjdFMwor5p+kID4gemjEgTsgIzY3RTQKK+afpSA+IGNow6E7ICM2N0U1Civmn6YgPiBkw6BuOyAjNjdFNgor5p+nID4gZ8WrOyAjNjdFNwor5p+oID4gcHU7ICM2N0U4Civmn6kgPiBqw6x1OyAjNjdFOQor5p+qID4gxIFvOyAjNjdFQQor5p+rID4gZsO6OyAjNjdFQgor5p+sID4gamnEg247ICM2N0VDCivmn60gPiBixY07ICM2N0VECivmn64gPiBkw7lvOyAjNjdFRQor5p+vID4ga8STOyAjNjdFRgor5p+wID4gbsOgaTsgIzY3RjAKK+afsSA+IHpow7k7ICM2N0YxCivmn7IgPiBiw6w7ICM2N0YyCivmn7MgPiBsxK11OyAjNjdGMwor5p+0ID4gY2jDoWk7ICM2N0Y0Civmn7UgPiB6aMOgOyAjNjdGNQor5p+2ID4gc8OsOyAjNjdGNgor5p+3ID4gemjDuTsgIzY3RjcKK+afuCA+IHDEk2k7ICM2N0Y4Civmn7kgPiBzaMOsOyAjNjdGOQor5p+6ID4gZ3XEg2k7ICM2N0ZBCivmn7sgPiBjaMOhOyAjNjdGQgor5p+8ID4gecSDbzsgIzY3RkMKK+afvSA+IGp1w6k7ICM2N0ZECivmn74gPiBqw6x1OyAjNjdGRQor5p+/ID4gc2jDrDsgIzY3RkYKK+aggCA+IHpoxKs7ICM2ODAwCivmoIEgPiBsxK11OyAjNjgwMQor5qCCID4gbcOpaTsgIzY4MDIKK+aghCA+IHLDs25nOyAjNjgwNAor5qCFID4gemjDoDsgIzY4MDUKK+aghyA+IGJpxIFvOyAjNjgwNwor5qCIID4gemjDoG47ICM2ODA4CivmoIkgPiBqacOpOyAjNjgwOQor5qCKID4gbMOzbmc7ICM2ODBBCivmoIsgPiBkw7JuZzsgIzY4MEIKK+agjCA+IGzDujsgIzY4MEMKK+agjiA+IGzDrDsgIzY4MEUKK+agjyA+IGzDoW47ICM2ODBGCivmoJAgPiB5xY9uZzsgIzY4MTAKK+agkSA+IHNow7k7ICM2ODExCivmoJIgPiB4w7puOyAjNjgxMgor5qCTID4gc2h1xIFuOyAjNjgxMwor5qCUID4gccOsOyAjNjgxNAor5qCVID4gemjEk247ICM2ODE1CivmoJYgPiBxxKs7ICM2ODE2CivmoJcgPiBsw6w7ICM2ODE3CivmoJggPiB5xK07ICM2ODE4CivmoJkgPiB4acOhbmc7ICM2ODE5CivmoJogPiB6aMOobjsgIzY4MUEKK+agmyA+IGzDrDsgIzY4MUIKK+agnCA+IHPDuTsgIzY4MUMKK+agnSA+IGd1xIE7ICM2ODFECivmoJ4gPiBrxIFuOyAjNjgxRQor5qCfID4gYsSrbmc7ICM2ODFGCivmoKAgPiByxJVuOyAjNjgyMAor5qChID4geGnDoG87ICM2ODIxCivmoKIgPiBiw7M7ICM2ODIyCivmoKMgPiByxJVuOyAjNjgyMwor5qCkID4gYsOsbmc7ICM2ODI0CivmoKUgPiB6xKs7ICM2ODI1CivmoKYgPiBjaMOzdTsgIzY4MjYKK+agpyA+IHnDrDsgIzY4MjcKK+agqCA+IGppw6k7ICM2ODI4CivmoKkgPiB4xa07ICM2ODI5CivmoKogPiB6aMWrOyAjNjgyQQor5qCrID4gamnDoG47ICM2ODJCCivmoKwgPiB6w7lpOyAjNjgyQwor5qCtID4gw6lyOyAjNjgyRAor5qCuID4gxJVyOyAjNjgyRQor5qCvID4gecWPdTsgIzY4MkYKK+agsCA+IGbDoTsgIzY4MzAKK+agsSA+IGfFj25nOyAjNjgzMQor5qCyID4ga8SDbzsgIzY4MzIKK+agsyA+IGzEg287ICM2ODMzCivmoLQgPiB6aMSBbjsgIzY4MzQKK+agtSA+IGzDrDsgIzY4MzUKK+agtiA+IHlpbjsgIzY4MzYKK+agtyA+IHnDoW5nOyAjNjgzNwor5qC4ID4gaMOpOyAjNjgzOAor5qC5ID4gZ8STbjsgIzY4MzkKK+aguiA+IHpoxK07ICM2ODNBCivmoLsgPiBjaMOsOyAjNjgzQgor5qC8ID4gZ8OpOyAjNjgzQwor5qC9ID4gesSBaTsgIzY4M0QKK+agviA+IGx1w6FuOyAjNjgzRQor5qC/ID4gZsO6OyAjNjgzRgor5qGAID4gamnDqTsgIzY4NDAKK+ahgSA+IGjDoW5nOyAjNjg0MQor5qGCID4gZ8O5aTsgIzY4NDIKK+ahgyA+IHTDoW87ICM2ODQzCivmoYQgPiBndcOgbmc7ICM2ODQ0CivmoYUgPiB3w6lpOyAjNjg0NQor5qGGID4ga3XDoG5nOyAjNjg0Ngor5qGHID4gcsO6OyAjNjg0Nwor5qGIID4gw6BuOyAjNjg0OAor5qGJID4gw6BuOyAjNjg0OQor5qGKID4ganXDoG47ICM2ODRBCivmoYsgPiB5w607ICM2ODRCCivmoYwgPiB6aMWrbzsgIzY4NEMKK+ahjSA+IGvFqzsgIzY4NEQKK+ahjiA+IHpow607ICM2ODRFCivmoY8gPiBxw61vbmc7ICM2ODRGCivmoZAgPiB0w7NuZzsgIzY4NTAKK+ahkSA+IHPEgW5nOyAjNjg1MQor5qGSID4gc8SBbmc7ICM2ODUyCivmoZMgPiBodcOhbjsgIzY4NTMKK+ahlCA+IGppw6k7ICM2ODU0CivmoZUgPiBqw6x1OyAjNjg1NQor5qGWID4geHXDqDsgIzY4NTYKK+ahlyA+IGTDuW87ICM2ODU3CivmoZggPiB6aMO5aTsgIzY4NTgKK+ahmSA+IHnDujsgIzY4NTkKK+ahmiA+IHrEg247ICM2ODVBCivmoZwgPiB5xKtuZzsgIzY4NUMKK+ahnyA+IHpow6BuOyAjNjg1Rgor5qGgID4gecOhOyAjNjg2MAor5qGhID4gbsOhbzsgIzY4NjEKK+ahoiA+IHpoxJNuOyAjNjg2Mgor5qGjID4gZMSDbmc7ICM2ODYzCivmoaQgPiBxxKs7ICM2ODY0CivmoaUgPiBxacOhbzsgIzY4NjUKK+ahpiA+IGh1w6A7ICM2ODY2CivmoacgPiBrdcOgaTsgIzY4NjcKK+ahqCA+IGppxINuZzsgIzY4NjgKK+ahqSA+IHpodcSBbmc7ICM2ODY5CivmoaogPiB4w7puOyAjNjg2QQor5qGrID4gc8WrbzsgIzY4NkIKK+ahrCA+IHNoxIE7ICM2ODZDCivmoa0gPiB6aMSTbjsgIzY4NkQKK+ahriA+IGLEk2k7ICM2ODZFCivmoa8gPiB0xKtuZzsgIzY4NkYKK+ahsCA+IGd1xIE7ICM2ODcwCivmobEgPiBqw6xuZzsgIzY4NzEKK+ahsiA+IGLDszsgIzY4NzIKK+ahsyA+IGLDqG47ICM2ODczCivmobQgPiBmw7o7ICM2ODc0CivmobUgPiByxa1pOyAjNjg3NQor5qG2ID4gdMWPbmc7ICM2ODc2CivmobcgPiBqdcOpOyAjNjg3Nwor5qG4ID4geMSrOyAjNjg3OAor5qG5ID4gbMOhbmc7ICM2ODc5CivmobogPiBsxK11OyAjNjg3QQor5qG7ID4gZsSTbmc7ICM2ODdCCivmobwgPiBxxKs7ICM2ODdDCivmob0gPiB3xJVuOyAjNjg3RAor5qG+ID4gasWrbjsgIzY4N0UKK+ahvyA+IGfEg247ICM2ODdGCivmooAgPiBjw7k7ICM2ODgwCivmooEgPiBsacOhbmc7ICM2ODgxCivmooIgPiBxw611OyAjNjg4Mgor5qKDID4gdMStbmc7ICM2ODgzCivmooQgPiB5xY91OyAjNjg4NAor5qKFID4gbcOpaTsgIzY4ODUKK+aihiA+IGLEgW5nOyAjNjg4Ngor5qKHID4gbMOybmc7ICM2ODg3CivmooggPiBwxJNuZzsgIzY4ODgKK+aiiSA+IHpodcSBbmc7ICM2ODg5CivmooogPiBkw6w7ICM2ODhBCivmoosgPiB4dcSBbjsgIzY4OEIKK+aijCA+IHTDujsgIzY4OEMKK+aijSA+IHrDoG87ICM2ODhECivmoo4gPiDEgW87ICM2ODhFCivmoo8gPiBnw7k7ICM2ODhGCivmopAgPiBiw6w7ICM2ODkwCivmopEgPiBkw607ICM2ODkxCivmopIgPiBow6FuOyAjNjg5Mgor5qKTID4gesStOyAjNjg5Mwor5qKUID4gemjEqzsgIzY4OTQKK+ailSA+IHLDqG47ICM2ODk1CivmopYgPiBiw6hpOyAjNjg5Ngor5qKXID4gZ8SVbmc7ICM2ODk3CivmopggPiBqacOgbjsgIzY4OTgKK+aimSA+IGh1w6BuOyAjNjg5OQor5qKaID4gd8SDbjsgIzY4OUEKK+aimyA+IG7Dum87ICM2ODlCCivmopwgPiBqacOhOyAjNjg5Qwor5qKdID4gdGnDoW87ICM2ODlECivmop4gPiBqw6w7ICM2ODlFCivmop8gPiB4acSBbzsgIzY4OUYKK+aioCA+IGzHmjsgIzY4QTAKK+aioSA+IGh1w6FuOyAjNjhBMQor5qKiID4gc2jEgW87ICM2OEEyCivmoqMgPiBjw6luOyAjNjhBMwor5qKkID4gZsOpbjsgIzY4QTQKK+aipSA+IHPFjW5nOyAjNjhBNQor5qKmID4gbcOobmc7ICM2OEE2CivmoqcgPiB3w7o7ICM2OEE3CivmoqggPiBsw607ICM2OEE4CivmoqkgPiBsw607ICM2OEE5CivmoqogPiBkw7J1OyAjNjhBQQor5qKrID4gY8STbjsgIzY4QUIKK+airCA+IHnErW5nOyAjNjhBQwor5qKtID4gc8WrbzsgIzY4QUQKK+airiA+IGrDujsgIzY4QUUKK+airyA+IHTEqzsgIzY4QUYKK+aisCA+IGppw6g7ICM2OEIwCivmorEgPiBrxa1uOyAjNjhCMQor5qKyID4gemjDum87ICM2OEIyCivmorMgPiBzaMWrOyAjNjhCMwor5qK0ID4gY2jEgW47ICM2OEI0CivmorUgPiBmw6BuOyAjNjhCNQor5qK2ID4gd8SVaTsgIzY4QjYKK+aityA+IGrDrG5nOyAjNjhCNwor5qK4ID4gbMOtOyAjNjhCOAor5qK5ID4gYsSrbmc7ICM2OEI5CivmorwgPiB0w6FvOyAjNjhCQwor5qK9ID4gemjDrDsgIzY4QkQKK+aiviA+IGzDoWk7ICM2OEJFCivmor8gPiBsacOhbjsgIzY4QkYKK+ajgCA+IGppxINuOyAjNjhDMAor5qOBID4gemjDum87ICM2OEMxCivmo4IgPiBsw61uZzsgIzY4QzIKK+ajgyA+IGzDrTsgIzY4QzMKK+ajhCA+IHHDrDsgIzY4QzQKK+ajhSA+IGLDrG5nOyAjNjhDNQor5qOGID4gemjFq247ICM2OEM2Civmo4cgPiBjxY1uZzsgIzY4QzcKK+ajiCA+IHFpw6BuOyAjNjhDOAor5qOJID4gbWnDoW47ICM2OEM5Civmo4ogPiBxw607ICM2OENBCivmo4sgPiBxw607ICM2OENCCivmo4wgPiBjxINpOyAjNjhDQwor5qONID4gZ8O5bjsgIzY4Q0QKK+ajjiA+IGNow6FuOyAjNjhDRQor5qOPID4gdMOoOyAjNjhDRgor5qOQID4gZsSVaTsgIzY4RDAKK+ajkSA+IHDDoWk7ICM2OEQxCivmo5IgPiBiw6BuZzsgIzY4RDIKK+ajkyA+IHDFj3U7ICM2OEQzCivmo5QgPiBoxatuOyAjNjhENAor5qOVID4gesWNbmc7ICM2OEQ1Civmo5YgPiBjaMOpbmc7ICM2OEQ2Civmo5cgPiB6xINvOyAjNjhENwor5qOYID4gasOtOyAjNjhEOAor5qOZID4gbMOsOyAjNjhEOQor5qOaID4gcMOpbmc7ICM2OERBCivmo5sgPiB5w7k7ICM2OERCCivmo5wgPiB5w7k7ICM2OERDCivmo50gPiBnw7k7ICM2OERECivmo54gPiBow7puOyAjNjhERQor5qOfID4gZMOybmc7ICM2OERGCivmo6AgPiB0w6FuZzsgIzY4RTAKK+ajoSA+IGfEgW5nOyAjNjhFMQor5qOiID4gd8SDbmc7ICM2OEUyCivmo6MgPiBkw6w7ICM2OEUzCivmo6QgPiB4w607ICM2OEU0Civmo6UgPiBmw6FuOyAjNjhFNQor5qOmID4gY2jEk25nOyAjNjhFNgor5qOnID4gemjDoG47ICM2OEU3Civmo6ggPiBxxK07ICM2OEU4Civmo6kgPiB5dcSBbjsgIzY4RTkKK+ajqiA+IHnEg247ICM2OEVBCivmo6sgPiB5w7k7ICM2OEVCCivmo6wgPiBxdcSBbjsgIzY4RUMKK+ajrSA+IHnDrDsgIzY4RUQKK+ajriA+IHPEk247ICM2OEVFCivmo68gPiByxJVuOyAjNjhFRgor5qOwID4gY2jDumk7ICM2OEYwCivmo7EgPiBsw6luZzsgIzY4RjEKK+ajsiA+IHHEqzsgIzY4RjIKK+ajsyA+IHpow7pvOyAjNjhGMwor5qO0ID4gZsO6OyAjNjhGNAor5qO1ID4ga8STOyAjNjhGNQor5qO2ID4gbMOhaTsgIzY4RjYKK+ajtyA+IHrFjXU7ICM2OEY3Civmo7ggPiB6xY11OyAjNjhGOAor5qO5ID4gemjFq287ICM2OEY5Civmo7ogPiBndcSBbjsgIzY4RkEKK+ajuyA+IGbDqW47ICM2OEZCCivmo7wgPiBmw6luOyAjNjhGQwor5qO9ID4gY2jEk247ICM2OEZECivmo74gPiBxw61vbmc7ICM2OEZFCivmo78gPiBuacOoOyAjNjhGRgor5qSAID4gd8SDbjsgIzY5MDAKK+akgSA+IGfFrW87ICM2OTAxCivmpIIgPiBsw7k7ICM2OTAyCivmpIMgPiBow6FvOyAjNjkwMwor5qSEID4gamnEkzsgIzY5MDQKK+akhSA+IHnErTsgIzY5MDUKK+akhiA+IGNow7N1OyAjNjkwNgor5qSHID4gasWtOyAjNjkwNwor5qSIID4gasO6OyAjNjkwOAor5qSJID4gY2jDqW5nOyAjNjkwOQor5qSKID4gesO6bzsgIzY5MEEKK+akiyA+IGxpw6FuZzsgIzY5MEIKK+akjCA+IHFpxIFuZzsgIzY5MEMKK+akjSA+IHpow607ICM2OTBECivmpI4gPiB6aMWraTsgIzY5MEUKK+akjyA+IHnEgTsgIzY5MEYKK+akkCA+IGrFqzsgIzY5MTAKK+akkSA+IGLEk2k7ICM2OTExCivmpJIgPiBqacSBbzsgIzY5MTIKK+akkyA+IHpow7pvOyAjNjkxMwor5qSUID4gesSrOyAjNjkxNAor5qSVID4gYsSrbjsgIzY5MTUKK+akliA+IHDDqW5nOyAjNjkxNgor5qSXID4gZMOsbmc7ICM2OTE3CivmpJggPiBjaMWtOyAjNjkxOAor5qScID4gamnEg247ICM2OTFDCivmpJ0gPiBnxatpOyAjNjkxRAor5qSeID4geMOsOyAjNjkxRQor5qSfID4gZMO6OyAjNjkxRgor5qSgID4gcWnDoG47ICM2OTIwCivmpKQgPiBsw7pvOyAjNjkyNAor5qSlID4gemjEqzsgIzY5MjUKK+akqiA+IHDDqG5nOyAjNjkyQQor5qSrID4gemjEg247ICM2OTJCCivmpK0gPiB0xa1vOyAjNjkyRAor5qSuID4gc8STbjsgIzY5MkUKK+akryA+IGTDum87ICM2OTJGCivmpLAgPiB5w6k7ICM2OTMwCivmpLEgPiBmw7J1OyAjNjkzMQor5qSyID4gd8SVaTsgIzY5MzIKK+aksyA+IHfEk2k7ICM2OTMzCivmpLQgPiBkdcOgbjsgIzY5MzQKK+aktSA+IGppxIM7ICM2OTM1CivmpLYgPiB6xY1uZzsgIzY5MzYKK+aktyA+IGppxIFuOyAjNjkzNwor5qS4ID4gecOtOyAjNjkzOAor5qS5ID4gc2jDqG47ICM2OTM5CivmpLogPiB4w607ICM2OTNBCivmpLsgPiB5w6BuOyAjNjkzQgor5qS8ID4gecSDbjsgIzY5M0MKK+akvSA+IGNodcOhbjsgIzY5M0QKK+akviA+IHpow6BuOyAjNjkzRQor5qS/ID4gY2jFq247ICM2OTNGCivmpYAgPiB5xa07ICM2OTQwCivmpYEgPiBow6k7ICM2OTQxCivmpYIgPiB6aMSBOyAjNjk0Mgor5qWDID4gd8OyOyAjNjk0Mwor5qWEID4gcGnDoW47ICM2OTQ0CivmpYUgPiBiw6w7ICM2OTQ1CivmpYYgPiB5xIFvOyAjNjk0Ngor5qWHID4gaMO5bzsgIzY5NDcKK+aliCA+IHjFqzsgIzY5NDgKK+aliSA+IHLDuW87ICM2OTQ5CivmpYogPiB5w6FuZzsgIzY5NEEKK+aliyA+IGzDoDsgIzY5NEIKK+aljCA+IHnDoW47ICM2OTRDCivmpY0gPiBixJVuOyAjNjk0RAor5qWOID4gaMO6bjsgIzY5NEUKK+aljyA+IGvDumk7ICM2OTRGCivmpZAgPiBqacOoOyAjNjk1MAor5qWRID4ga8O6aTsgIzY5NTEKK+alkiA+IHPEqzsgIzY5NTIKK+alkyA+IGbEk25nOyAjNjk1Mwor5qWUID4geGnDqDsgIzY5NTQKK+allSA+IHTFrW87ICM2OTU1CivmpZYgPiB6aMOsOyAjNjk1Ngor5qWXID4gamnDoG47ICM2OTU3CivmpZggPiBtw7k7ICM2OTU4CivmpZkgPiBtw6BvOyAjNjk1OQor5qWaID4gY2jFrTsgIzY5NUEKK+almyA+IGjDuTsgIzY5NUIKK+alnCA+IGjDujsgIzY5NUMKK+alnSA+IGxpw6BuOyAjNjk1RAor5qWeID4gbMOpbmc7ICM2OTVFCivmpZ8gPiB0w61uZzsgIzY5NUYKK+aloCA+IG7DoW47ICM2OTYwCivmpaEgPiB5w7o7ICM2OTYxCivmpaIgPiB5w7N1OyAjNjk2Mgor5qWjID4gbcOpaTsgIzY5NjMKK+alpCA+IHPFj25nOyAjNjk2NAor5qWlID4geHXDoG47ICM2OTY1CivmpaYgPiB4dcOgbjsgIzY5NjYKK+alpyA+IHnEq25nOyAjNjk2Nwor5qWoID4gemjEk247ICM2OTY4CivmpakgPiBwacOhbjsgIzY5NjkKK+alqiA+IHnDqDsgIzY5NkEKK+alqyA+IGrDrTsgIzY5NkIKK+alrCA+IGppw6k7ICM2OTZDCivmpa0gPiB5w6g7ICM2OTZECivmpa4gPiBjaMWtOyAjNjk2RQor5qWvID4gc2jFrW47ICM2OTZGCivmpbAgPiB5w7o7ICM2OTcwCivmpbEgPiBjw7J1OyAjNjk3MQor5qWyID4gd8STaTsgIzY5NzIKK+alsyA+IG3DqWk7ICM2OTczCivmpbQgPiBkw6w7ICM2OTc0CivmpbUgPiBqw607ICM2OTc1CivmpbYgPiBqacOpOyAjNjk3Ngor5qW3ID4ga8SDaTsgIzY5NzcKK+aluCA+IHHEq3U7ICM2OTc4CivmpbkgPiB5w61uZzsgIzY5NzkKK+aluiA+IHLDs3U7ICM2OTdBCivmpbsgPiBow6luZzsgIzY5N0IKK+alvCA+IGzDs3U7ICM2OTdDCivmpb0gPiBsw6g7ICM2OTdECivmpoAgPiBwxK1uOyAjNjk4MAor5qaCID4gZ8OgaTsgIzY5ODIKK+amgyA+IHTDoW47ICM2OTgzCivmpoQgPiBsxINuOyAjNjk4NAor5qaFID4gecO6bjsgIzY5ODUKK+amhiA+IHnDujsgIzY5ODYKK+amhyA+IGNow6huOyAjNjk4Nwor5qaIID4gbMeYOyAjNjk4OAor5qaJID4gasWtOyAjNjk4OQor5qaNID4geGnDqDsgIzY5OEQKK+amjiA+IGppxIM7ICM2OThFCivmpo8gPiB5w6w7ICM2OThGCivmppAgPiB6aMSDbjsgIzY5OTAKK+amkSA+IGbDuTsgIzY5OTEKK+amkiA+IG7DoGk7ICM2OTkyCivmppMgPiBtw6w7ICM2OTkzCivmppQgPiBsw6FuZzsgIzY5OTQKK+amlSA+IHLDs25nOyAjNjk5NQor5qaWID4gZ8WtOyAjNjk5Ngor5qaXID4gamnDoG47ICM2OTk3CivmppggPiBqxa07ICM2OTk4CivmppkgPiB0xIM7ICM2OTk5CivmppogPiB5xINvOyAjNjk5QQor5qabID4gemjEk247ICM2OTlCCivmppwgPiBixINuZzsgIzY5OUMKK+amnSA+IHNoxIE7ICM2OTlECivmpp4gPiB5dcOhbjsgIzY5OUUKK+amnyA+IHrErTsgIzY5OUYKK+amoCA+IG3Eq25nOyAjNjlBMAor5qahID4gc8O5OyAjNjlBMQor5qaiID4gamnDoDsgIzY5QTIKK+amoyA+IHnDoW87ICM2OUEzCivmpqQgPiBqacOpOyAjNjlBNAor5qalID4gaHXEg25nOyAjNjlBNQor5qamID4gZ8OgbjsgIzY5QTYKK+ampyA+IGbElWk7ICM2OUE3CivmpqggPiB6aMOgOyAjNjlBOAor5qapID4gcWnDoW47ICM2OUE5CivmpqogPiBtw6A7ICM2OUFBCivmpqsgPiBzxa1uOyAjNjlBQgor5qasID4geXXDoW47ICM2OUFDCivmpq0gPiB4acOoOyAjNjlBRAor5qauID4gcsOzbmc7ICM2OUFFCivmpq8gPiBzaMOtOyAjNjlBRgor5qawID4gemjEqzsgIzY5QjAKK+amsSA+IGPFq2k7ICM2OUIxCivmprIgPiB5w7puOyAjNjlCMgor5qazID4gdMOtbmc7ICM2OUIzCivmprQgPiBsw611OyAjNjlCNAor5qa1ID4gcsOzbmc7ICM2OUI1CivmprYgPiB0w6FuZzsgIzY5QjYKK+amtyA+IHF1w6g7ICM2OUI3CivmprggPiB6aMSBaTsgIzY5QjgKK+amuSA+IHPEqzsgIzY5QjkKK+amuiA+IHNow6huZzsgIzY5QkEKK+amuyA+IHTDoDsgIzY5QkIKK+amvCA+IGvDqDsgIzY5QkMKK+amvSA+IHjEqzsgIzY5QkQKK+amviA+IGfDuTsgIzY5QkUKK+amvyA+IHHEqzsgIzY5QkYKK+angCA+IGvEg287ICM2OUMwCivmp4EgPiBnxINvOyAjNjlDMQor5qeCID4gc8WrbjsgIzY5QzIKK+angyA+IHDDoW47ICM2OUMzCivmp4QgPiB0xIFvOyAjNjlDNAor5qeFID4gZ8OpOyAjNjlDNQor5qeGID4geMO6bjsgIzY5QzYKK+anhyA+IGRpxIFuOyAjNjlDNwor5qeIID4gbsOydTsgIzY5QzgKK+aniSA+IGrDrTsgIzY5QzkKK+aniiA+IHNow7lvOyAjNjlDQQor5qeLID4gZ8OydTsgIzY5Q0IKK+anjCA+IGNow7ppOyAjNjlDQwor5qeNID4gcWnEgW5nOyAjNjlDRAor5qeOID4gY2jEgTsgIzY5Q0UKK+anjyA+IHFpxINuOyAjNjlDRgor5qeQID4gaHXDoWk7ICM2OUQwCivmp5EgPiBtw6lpOyAjNjlEMQor5qeSID4geMO5OyAjNjlEMgor5qeTID4gZ8Ogbmc7ICM2OUQzCivmp5QgPiBnxIFvOyAjNjlENAor5qeVID4gemjDum87ICM2OUQ1Civmp5YgPiB0w7lvOyAjNjlENgor5qeYID4gecOgbmc7ICM2OUQ4Civmp5kgPiBkacSBbjsgIzY5RDkKK+anmiA+IGppxIM7ICM2OURBCivmp5sgPiBqacOgbjsgIzY5REIKK+annCA+IHrDuWk7ICM2OURDCivmp58gPiBixKtuOyAjNjlERgor5qegID4gemjFqzsgIzY5RTAKK+anoiA+IHjDrTsgIzY5RTIKK+anoyA+IHHErTsgIzY5RTMKK+anpCA+IGxpw6FuOyAjNjlFNAor5qelID4gaMO5aTsgIzY5RTUKK+anpiA+IHnDs25nOyAjNjlFNgor5qenID4gcWnDoG47ICM2OUU3Civmp6ggPiBnxa1vOyAjNjlFOAor5qepID4gZ8OgaTsgIzY5RTkKK+anqiA+IGfDoGk7ICM2OUVBCivmp6sgPiB0dcOhbjsgIzY5RUIKK+anrCA+IGh1w6A7ICM2OUVDCivmp60gPiBjw7k7ICM2OUVECivmp64gPiBzxJNuOyAjNjlFRQor5qevID4gY8WraTsgIzY5RUYKK+ansCA+IGLDqG5nOyAjNjlGMAor5qexID4gecWPdTsgIzY5RjEKK+ansiA+IGjDujsgIzY5RjIKK+ansyA+IGppxINuZzsgIzY5RjMKK+antCA+IGjDuTsgIzY5RjQKK+antSA+IGh1w6BuOyAjNjlGNQor5qe2ID4ga8O5aTsgIzY5RjYKK+antyA+IHnDrDsgIzY5RjcKK+anuCA+IG5pw6g7ICM2OUY4Civmp7kgPiBnxIFvOyAjNjlGOQor5qe6ID4ga8SBbmc7ICM2OUZBCivmp7sgPiBnxatpOyAjNjlGQgor5qe8ID4gZ8WraTsgIzY5RkMKK+anvSA+IGPDoW87ICM2OUZECivmp74gPiBtw6FuOyAjNjlGRQor5qe/ID4gasStbjsgIzY5RkYKK+aogCA+IGTDrDsgIzZBMDAKK+aogSA+IHpodcSBbmc7ICM2QTAxCivmqIIgPiBsw6g7ICM2QTAyCivmqIMgPiBsw6FuZzsgIzZBMDMKK+aohCA+IGNow6luOyAjNkEwNAor5qiFID4gY8WNbmc7ICM2QTA1CivmqIYgPiBsw607ICM2QTA2CivmqIcgPiB4xKt1OyAjNkEwNwor5qiIID4gccOtbmc7ICM2QTA4CivmqIkgPiBzaHXEg25nOyAjNkEwOQor5qiKID4gZsOhbjsgIzZBMEEKK+aoiyA+IHTFjW5nOyAjNkEwQgor5qiMID4gZ3XDoG47ICM2QTBDCivmqI0gPiBqxKs7ICM2QTBECivmqI4gPiBzxatvOyAjNkEwRQor5qiPID4gbMSVaTsgIzZBMEYKK+aokCA+IGzFrTsgIzZBMTAKK+aokSA+IGxpw6FuZzsgIzZBMTEKK+aokiA+IG3DrDsgIzZBMTIKK+aokyA+IGzDs3U7ICM2QTEzCivmqJQgPiBjaMOhbzsgIzZBMTQKK+aolSA+IHPDuTsgIzZBMTUKK+aoliA+IGvEkzsgIzZBMTYKK+aolyA+IHNoxas7ICM2QTE3CivmqJggPiB0w6FuZzsgIzZBMTgKK+aomSA+IGJpxIFvOyAjNkExOQor5qiaID4gbMO5OyAjNkExQQor5qibID4gasSrdTsgIzZBMUIKK+aonCA+IHNow7k7ICM2QTFDCivmqJ0gPiB6aMSBOyAjNkExRAor5qieID4gc2jFqzsgIzZBMUUKK+aonyA+IHpoxIFuZzsgIzZBMUYKK+aooCA+IG3DqW47ICM2QTIwCivmqKEgPiBtw7M7ICM2QTIxCivmqKIgPiBuacSDbzsgIzZBMjIKK+aooyA+IHnDoG5nOyAjNkEyMwor5qikID4gdGnDoW87ICM2QTI0CivmqKUgPiBww6luZzsgIzZBMjUKK+aopiA+IHpow7k7ICM2QTI2CivmqKcgPiBzaMSBOyAjNkEyNwor5qioID4geMSrOyAjNkEyOAor5qipID4gcXXDoW47ICM2QTI5CivmqKogPiBow6luZzsgIzZBMkEKK+aoqyA+IGppxIFuOyAjNkEyQgor5qisID4gY8WNbmc7ICM2QTJDCivmqK8gPiBxacOhbmc7ICM2QTJGCivmqLEgPiB5xKtuZzsgIzZBMzEKK+aosiA+IMOocjsgIzZBMzIKK+aosyA+IHjDrW47ICM2QTMzCivmqLQgPiB6aMOtOyAjNkEzNAor5qi1ID4gcWnDoW87ICM2QTM1CivmqLYgPiB6xatpOyAjNkEzNgor5qi3ID4gY8WNbmc7ICM2QTM3CivmqLggPiBww7o7ICM2QTM4CivmqLkgPiBzaMO5OyAjNkEzOQor5qi6ID4gaHXDoDsgIzZBM0EKK+aouyA+IGvDuWk7ICM2QTNCCivmqLwgPiB6aMSTbjsgIzZBM0MKK+aovSA+IHrFq247ICM2QTNECivmqL4gPiB5dcOoOyAjNkEzRQor5qi/ID4gemjEg247ICM2QTNGCivmqYAgPiB4xKs7ICM2QTQwCivmqYEgPiB4w7puOyAjNkE0MQor5qmCID4gZGnDoG47ICM2QTQyCivmqYMgPiBmxIE7ICM2QTQzCivmqYQgPiBnxINuOyAjNkE0NAor5qmFID4gbcOzOyAjNkE0NQor5qmGID4gd8WtOyAjNkE0Ngor5qmHID4gcWnEgW87ICM2QTQ3CivmqYggPiBuw6FvOyAjNkE0OAor5qmJID4gbMOsbjsgIzZBNDkKK+apiiA+IGzDrXU7ICM2QTRBCivmqYsgPiBxacOhbzsgIzZBNEIKK+apjCA+IHhpw6BuOyAjNkE0Qwor5qmNID4gcsO5bjsgIzZBNEQKK+apjiA+IGbDoW47ICM2QTRFCivmqY8gPiB6aMSDbjsgIzZBNEYKK+apkCA+IHTDuW87ICM2QTUwCivmqZEgPiBsxINvOyAjNkE1MQor5qmSID4gecO6bjsgIzZBNTIKK+apkyA+IHNow7luOyAjNkE1Mwor5qmUID4gdMO6aTsgIzZBNTQKK+aplSA+IGNoxJNuZzsgIzZBNTUKK+apliA+IHTDoW5nOyAjNkE1Ngor5qmXID4gbcOpbmc7ICM2QTU3CivmqZggPiBqw7o7ICM2QTU4CivmqZkgPiBjaMOpbmc7ICM2QTU5CivmqZogPiBzw7k7ICM2QTVBCivmqZsgPiBqdcOpOyAjNkE1Qgor5qmcID4ganXDqTsgIzZBNUMKK+apnSA+IHTEgW47ICM2QTVECivmqZ4gPiBow7lpOyAjNkE1RQor5qmfID4gasSrOyAjNkE1Rgor5qmgID4gbsWtbzsgIzZBNjAKK+apoSA+IHhpw6BuZzsgIzZBNjEKK+apoiA+IHTFrW87ICM2QTYyCivmqaMgPiBuxK1uZzsgIzZBNjMKK+appCA+IHLFrWk7ICM2QTY0CivmqaUgPiB6aMWrOyAjNkE2NQor5qmmID4gY2h1w6FuZzsgIzZBNjYKK+appyA+IHrEk25nOyAjNkE2Nwor5qmoID4gZsOpbjsgIzZBNjgKK+apqSA+IHHDrW9uZzsgIzZBNjkKK+apqiA+IHLEg247ICM2QTZBCivmqasgPiBow6luZzsgIzZBNkIKK+aprCA+IGPDqW47ICM2QTZDCivmqa0gPiBnxas7ICM2QTZECivmqa4gPiBsxK11OyAjNkE2RQor5qmvID4gbMOgbzsgIzZBNkYKK+apsCA+IGfEgW87ICM2QTcwCivmqbEgPiBjaMO6OyAjNkE3MQor5qm2ID4gasOtOyAjNkE3Ngor5qm3ID4gZMWNdTsgIzZBNzcKK+apuSA+IGzFrTsgIzZBNzkKK+apvCA+IHl1w6FuOyAjNkE3Qwor5qm9ID4gdMOgOyAjNkE3RAor5qm+ID4gc2jFqzsgIzZBN0UKK+apvyA+IGppxIFuZzsgIzZBN0YKK+aqgCA+IHTDoW47ICM2QTgwCivmqoEgPiBsxK1uOyAjNkE4MQor5qqCID4gbsOzbmc7ICM2QTgyCivmqoMgPiB5xK1uOyAjNkE4Mwor5qqEID4geMOtOyAjNkE4NAor5qqFID4gc8O5aTsgIzZBODUKK+aqhiA+IHNoxIFuOyAjNkE4Ngor5qqHID4gesO5aTsgIzZBODcKK+aqiCA+IHh1w6FuOyAjNkE4OAor5qqJID4gY2jEk25nOyAjNkE4OQor5qqKID4gZ8OgbjsgIzZBOEEKK+aqiyA+IGrFqzsgIzZBOEIKK+aqjCA+IHrDuWk7ICM2QThDCivmqo0gPiB5w6w7ICM2QThECivmqo4gPiBxw61uOyAjNkE4RQor5qqPID4gcMWtOyAjNkE4Rgor5qqQID4gecOhbjsgIzZBOTAKK+aqkSA+IGzDqWk7ICM2QTkxCivmqpIgPiBmxJNuZzsgIzZBOTIKK+aqkyA+IGjFrWk7ICM2QTkzCivmqpQgPiBkxINuZzsgIzZBOTQKK+aqlSA+IGrDrDsgIzZBOTUKK+aqliA+IHPDuWk7ICM2QTk2CivmqpcgPiBiw7I7ICM2QTk3CivmqpggPiBiw6w7ICM2QTk4CivmqpkgPiBkxK1uZzsgIzZBOTkKK+aqmiA+IGNoxa07ICM2QTlBCivmqpsgPiB6aHXEgTsgIzZBOUIKK+aqnCA+IGt1w6BpOyAjNkE5Qwor5qqdID4gasOtOyAjNkE5RAor5qqeID4gamnElTsgIzZBOUUKK+aqnyA+IGppxIM7ICM2QTlGCivmqqAgPiBxw61uZzsgIzZBQTAKK+aqoSA+IHpow6g7ICM2QUExCivmqqIgPiBqacSDbjsgIzZBQTIKK+aqoyA+IHFpw6FuZzsgIzZBQTMKK+aqpCA+IGTDoG87ICM2QUE0CivmqqUgPiB5xK07ICM2QUE1CivmqqYgPiBiacSDbzsgIzZBQTYKK+aqpyA+IHPFjW5nOyAjNkFBNwor5qqoID4gc2jEkzsgIzZBQTgKK+aqqSA+IGzErW47ICM2QUE5CivmqqsgPiBjaMOhOyAjNkFBQgor5qqsID4gbcOpbmc7ICM2QUFDCivmqq0gPiB5w61uOyAjNkFBRAor5qquID4gdMOhbzsgIzZBQUUKK+aqryA+IHTDoWk7ICM2QUFGCivmqrAgPiBtacOhbjsgIzZBQjAKK+aqsSA+IHHDrTsgIzZBQjEKK+aqsiA+IHTDs2FuOyAjNkFCMgor5qqzID4gYsSrbjsgIzZBQjMKK+aqtCA+IGjDuW87ICM2QUI0CivmqrUgPiBqw6w7ICM2QUI1CivmqrYgPiBxacSBbjsgIzZBQjYKK+aqtyA+IG3DrTsgIzZBQjcKK+aquCA+IG7DrW5nOyAjNkFCOAor5qq5ID4gecSrOyAjNkFCOQor5qq6ID4gZ8SDbzsgIzZBQkEKK+aquyA+IGppw6BuOyAjNkFCQgor5qq8ID4gecOsbjsgIzZBQkMKK+aqvSA+IMOpcjsgIzZBQkQKK+aqviA+IHHErW5nOyAjNkFCRQor5qq/ID4gecSDbjsgIzZBQkYKK+argCA+IHHDrTsgIzZBQzAKK+argSA+IG3DrDsgIzZBQzEKK+argiA+IHpow6BvOyAjNkFDMgor5quDID4gZ8O5aTsgIzZBQzMKK+arhCA+IGNoxatuOyAjNkFDNAor5quFID4gasSrOyAjNkFDNQor5quGID4ga8O6aTsgIzZBQzYKK+arhyA+IHDDszsgIzZBQzcKK+ariCA+IGTDqG5nOyAjNkFDOAor5quJID4gY2jDujsgIzZBQzkKK+ariyA+IG1pw6FuOyAjNkFDQgor5quMID4gecWNdTsgIzZBQ0MKK+arjSA+IHpow6w7ICM2QUNECivmq44gPiBndcOgbmc7ICM2QUNFCivmq48gPiBxacSBbjsgIzZBQ0YKK+arkCA+IGzElWk7ICM2QUQwCivmq5EgPiBsxJVpOyAjNkFEMQor5quSID4gc8OgOyAjNkFEMgor5quTID4gbMWtOyAjNkFEMwor5quUID4gbMOsOyAjNkFENAor5quVID4gY3XDoW47ICM2QUQ1Civmq5YgPiBsx5g7ICM2QUQ2Civmq5cgPiBtacOoOyAjNkFENwor5quYID4gaMO5aTsgIzZBRDgKK+armSA+IMWNdTsgIzZBRDkKK+armiA+IGzHmDsgIzZBREEKK+armyA+IGppw6k7ICM2QURCCivmq5wgPiBnxIFvOyAjNkFEQwor5qudID4gZMO6OyAjNkFERAor5queID4geXXDoW47ICM2QURFCivmq58gPiBsw6w7ICM2QURGCivmq6AgPiBmw6hpOyAjNkFFMAor5quhID4gemjDum87ICM2QUUxCivmq6IgPiBzxY91OyAjNkFFMgor5qujID4gbGnDoW47ICM2QUUzCivmq6UgPiBjaMO6OyAjNkFFNQor5qunID4gemjFqzsgIzZBRTcKK+arqCA+IGzDujsgIzZBRTgKK+arqSA+IHnDoW47ICM2QUU5Civmq6ogPiBsw6w7ICM2QUVBCivmq6sgPiB6aMWrOyAjNkFFQgor5qusID4gY2jDqG47ICM2QUVDCivmq60gPiBqacOpOyAjNkFFRAor5quuID4gw6g7ICM2QUVFCivmq68gPiBzxas7ICM2QUVGCivmq7AgPiBodcOhaTsgIzZBRjAKK+arsSA+IG5pw6g7ICM2QUYxCivmq7IgPiB5w7k7ICM2QUYyCivmq7MgPiBsw7NuZzsgIzZBRjMKK+artCA+IGzDoGk7ICM2QUY0Civmq7YgPiB4acSDbjsgIzZBRjYKK+aruCA+IGrFrTsgIzZBRjgKK+aruSA+IHhpxIFvOyAjNkFGOQor5qu6ID4gbMOtbmc7ICM2QUZBCivmq7sgPiB5xKtuZzsgIzZBRkIKK+arvCA+IGppxIFuOyAjNkFGQwor5qu9ID4gecStbjsgIzZBRkQKK+arviA+IHnDs3U7ICM2QUZFCivmq78gPiB5w61uZzsgIzZBRkYKK+asgCA+IHhpxIFuZzsgIzZCMDAKK+asgSA+IG7Ds25nOyAjNkIwMQor5qyCID4gYsOzOyAjNkIwMgor5qyDID4gY2jDoW47ICM2QjAzCivmrIQgPiBsw6FuOyAjNkIwNAor5qyFID4gasWtOyAjNkIwNQor5qyGID4gc2h1xIFuZzsgIzZCMDYKK+ashyA+IHNow6g7ICM2QjA3CivmrIggPiB3w6lpOyAjNkIwOAor5qyJID4gY8Oybmc7ICM2QjA5CivmrIogPiBxdcOhbjsgIzZCMEEKK+asiyA+IHHDujsgIzZCMEIKK+asjiA+IHnDuTsgIzZCMEUKK+asjyA+IGzDum87ICM2QjBGCivmrJAgPiBsxK07ICM2QjEwCivmrJEgPiB6w6BuOyAjNkIxMQor5qySID4gbHXDoW47ICM2QjEyCivmrJMgPiBkxINuZzsgIzZCMTMKK+aslCA+IGp1w6k7ICM2QjE0CivmrJYgPiBsxINuOyAjNkIxNgor5qyXID4gbMOhbjsgIzZCMTcKK+asmCA+IHpoxa07ICM2QjE4CivmrJkgPiBsw6lpOyAjNkIxOQor5qyaID4gbMStOyAjNkIxQQor5qybID4gYsOgOyAjNkIxQgor5qycID4gbsOhbmc7ICM2QjFDCivmrJ0gPiB5w7k7ICM2QjFECivmrJ4gPiBsw61uZzsgIzZCMUUKK+asoCA+IHFpw6BuOyAjNkIyMAor5qyhID4gY8OsOyAjNkIyMQor5qyiID4gaHXEgW47ICM2QjIyCivmrKMgPiB4xKtuOyAjNkIyMwor5qykID4gecO6OyAjNkIyNAor5qylID4gecO5OyAjNkIyNQor5qymID4gcWnEgW47ICM2QjI2CivmrKcgPiDFjXU7ICM2QjI3CivmrKggPiB4xas7ICM2QjI4CivmrKkgPiBjaMSBbzsgIzZCMjkKK+asqiA+IGNow7k7ICM2QjJBCivmrKsgPiBjaMSrOyAjNkIyQgor5qysID4ga8OgaTsgIzZCMkMKK+asrSA+IHnDrDsgIzZCMkQKK+asriA+IGp1w6k7ICM2QjJFCivmrK8gPiB4w607ICM2QjJGCivmrLAgPiB4xas7ICM2QjMwCivmrLEgPiB4acOgOyAjNkIzMQor5qyyID4gecO5OyAjNkIzMgor5qyzID4ga3XDoGk7ICM2QjMzCivmrLQgPiBsw6FuZzsgIzZCMzQKK+astSA+IGt1xINuOyAjNkIzNQor5qy2ID4gc2jDuW87ICM2QjM2CivmrLcgPiB4xKs7ICM2QjM3CivmrLggPiDEg2k7ICM2QjM4CivmrLkgPiB5xKs7ICM2QjM5CivmrLogPiBxxKs7ICM2QjNBCivmrLsgPiBoxas7ICM2QjNCCivmrLwgPiBjaMStOyAjNkIzQwor5qy9ID4gccSrbjsgIzZCM0QKK+asviA+IGt1xINuOyAjNkIzRQor5qy/ID4ga8SDbjsgIzZCM0YKK+atgCA+IGt1xINuOyAjNkI0MAor5q2BID4ga8SDbjsgIzZCNDEKK+atgiA+IGNodcOhbjsgIzZCNDIKK+atgyA+IHNow6A7ICM2QjQzCivmrYQgPiBndWE7ICM2QjQ0CivmrYUgPiB5xKtuOyAjNkI0NQor5q2GID4geMSrbjsgIzZCNDYKK+athyA+IHhpxJM7ICM2QjQ3CivmrYggPiB5w7o7ICM2QjQ4CivmrYkgPiBxacOgbjsgIzZCNDkKK+atiiA+IHhpxIFvOyAjNkI0QQor5q2LID4gecOtOyAjNkI0Qgor5q2MID4gZ8STOyAjNkI0Qwor5q2NID4gd8WrOyAjNkI0RAor5q2OID4gdMOgbjsgIzZCNEUKK+atjyA+IGrDrG47ICM2QjRGCivmrZAgPiDFjXU7ICM2QjUwCivmrZEgPiBoxas7ICM2QjUxCivmrZIgPiB0w6w7ICM2QjUyCivmrZMgPiBodcSBbjsgIzZCNTMKK+atlCA+IHjFqzsgIzZCNTQKK+atlSA+IHDDqG47ICM2QjU1CivmrZYgPiB4xKs7ICM2QjU2CivmrZcgPiB4acOgbzsgIzZCNTcKK+atmCA+IHjFqzsgIzZCNTgKK+atmSA+IHjDrDsgIzZCNTkKK+atmyA+IGxpw6BuOyAjNkI1Qgor5q2cID4gY2jDuTsgIzZCNUMKK+atnSA+IHnDrDsgIzZCNUQKK+atniA+IGvEg247ICM2QjVFCivmrZ8gPiB5w7o7ICM2QjVGCivmraAgPiBjaMO5bzsgIzZCNjAKK+atoSA+IGh1xIFuOyAjNkI2MQor5q2iID4gemjErTsgIzZCNjIKK+atoyA+IHpow6huZzsgIzZCNjMKK+atpCA+IGPErTsgIzZCNjQKK+atpSA+IGLDuTsgIzZCNjUKK+atpiA+IHfFrTsgIzZCNjYKK+atpyA+IHHDrTsgIzZCNjcKK+atqCA+IGLDuTsgIzZCNjgKK+atqSA+IGLDuTsgIzZCNjkKK+atqiA+IHfEgWk7ICM2QjZBCivmrasgPiBqw7k7ICM2QjZCCivmrawgPiBxacOhbjsgIzZCNkMKK+atrSA+IGNow607ICM2QjZECivmra4gPiBzw6g7ICM2QjZFCivmra8gPiBjaMStOyAjNkI2Rgor5q2wID4gc8OoOyAjNkI3MAor5q2xID4gemjFj25nOyAjNkI3MQor5q2yID4gc8O5aTsgIzZCNzIKK+atsyA+IHPDuWk7ICM2QjczCivmrbQgPiBsw6w7ICM2Qjc0CivmrbUgPiBjw7lvOyAjNkI3NQor5q22ID4gecO6OyAjNkI3Ngor5q23ID4gbMOsOyAjNkI3Nwor5q24ID4gZ8WraTsgIzZCNzgKK+atuSA+IGTEg2k7ICM2Qjc5CivmrbogPiBkxINpOyAjNkI3QQor5q27ID4gc8StOyAjNkI3Qgor5q28ID4gamnEgW47ICM2QjdDCivmrb0gPiB6aMOpOyAjNkI3RAor5q2+ID4gbcOyOyAjNkI3RQor5q2/ID4gbcOyOyAjNkI3Rgor5q6AID4gecSDbzsgIzZCODAKK+augSA+IG3DsjsgIzZCODEKK+augiA+IGPDujsgIzZCODIKK+augyA+IHnEgW5nOyAjNkI4Mwor5q6EID4gdGnEg247ICM2Qjg0CivmroUgPiBzaMSTbmc7ICM2Qjg1CivmroYgPiBkw6BpOyAjNkI4Ngor5q6HID4gc2jEgW5nOyAjNkI4Nwor5q6IID4geMO5OyAjNkI4OAor5q6JID4geMO5bjsgIzZCODkKK+auiiA+IHNoxas7ICM2QjhBCivmrosgPiBjw6FuOyAjNkI4Qgor5q6MID4ganXDqTsgIzZCOEMKK+aujSA+IHBpxINvOyAjNkI4RAor5q6OID4gcWnDoDsgIzZCOEUKK+aujyA+IHHDrHU7ICM2QjhGCivmrpAgPiBzw7k7ICM2QjkwCivmrpEgPiBxw61uZzsgIzZCOTEKK+aukiA+IHnFrW47ICM2QjkyCivmrpMgPiBsacOgbjsgIzZCOTMKK+aulCA+IHnDrDsgIzZCOTQKK+aulSA+IGbFj3U7ICM2Qjk1CivmrpYgPiB6aMOtOyAjNkI5Ngor5q6XID4gecOoOyAjNkI5Nwor5q6YID4gY8OhbjsgIzZCOTgKK+aumSA+IGjFq247ICM2Qjk5CivmrpogPiBkxIFuOyAjNkI5QQor5q6bID4gasOtOyAjNkI5Qgor5q6cID4gecOoOyAjNkI5Qwor5q6dID4gemhlbjsgIzZCOUQKK+auniA+IHnFrW47ICM2QjlFCivmrp8gPiB3xJNuOyAjNkI5Rgor5q6gID4gY2jDsnU7ICM2QkEwCivmrqEgPiBiw6xuOyAjNkJBMQor5q6iID4gdMOsOyAjNkJBMgor5q6jID4gasStbjsgIzZCQTMKK+aupCA+IHNoxIFuZzsgIzZCQTQKK+aupSA+IHnDrW47ICM2QkE1CivmrqYgPiBkacSBbzsgIzZCQTYKK+aupyA+IGPDuTsgIzZCQTcKK+auqCA+IGjDuWk7ICM2QkE4CivmrqkgPiBjdcOgbjsgIzZCQTkKK+auqiA+IHnDrDsgIzZCQUEKK+auqyA+IGTEgW47ICM2QkFCCivmrqwgPiBkw7k7ICM2QkFDCivmrq0gPiBqacSBbmc7ICM2QkFECivmrq4gPiBsacOgbjsgIzZCQUUKK+auryA+IGLDrG47ICM2QkFGCivmrrAgPiBkw7o7ICM2QkIwCivmrrIgPiBqacSBbjsgIzZCQjIKK+ausyA+IHNoxas7ICM2QkIzCivmrrQgPiDFjXU7ICM2QkI0CivmrrUgPiBkdcOgbjsgIzZCQjUKK+autiA+IHpow7k7ICM2QkI2CivmrrcgPiB5xKtuOyAjNkJCNwor5q64ID4gccOsbmc7ICM2QkI4CivmrrkgPiB5w6w7ICM2QkI5CivmrrogPiBzaMSBOyAjNkJCQQor5q67ID4gcXXDqDsgIzZCQkIKK+auvCA+IGvDqTsgIzZCQkMKK+auvSA+IHnDoW87ICM2QkJECivmrr4gPiBqw7luOyAjNkJCRQor5q6/ID4gZGnDoG47ICM2QkJGCivmr4AgPiBoxa1pOyAjNkJDMAor5q+BID4gaMWtaTsgIzZCQzEKK+avgiA+IGfFrTsgIzZCQzIKK+avgyA+IHF1w6g7ICM2QkMzCivmr4QgPiBqxKs7ICM2QkM0Civmr4UgPiB5w6w7ICM2QkM1Civmr4YgPiDFjXU7ICM2QkM2Civmr4cgPiBoxa1pOyAjNkJDNwor5q+IID4gZHXDoG47ICM2QkM4Civmr4kgPiB5xKs7ICM2QkM5Civmr4ogPiB4acSBbzsgIzZCQ0EKK+aviyA+IHfDujsgIzZCQ0IKK+avjCA+IGd1w6BuOyAjNkJDQwor5q+NID4gbcWtOyAjNkJDRAor5q+OID4gbcSVaTsgIzZCQ0UKK+avjyA+IG3ElWk7ICM2QkNGCivmr5AgPiDEg2k7ICM2QkQwCivmr5EgPiB6xa1vOyAjNkJEMQor5q+SID4gZMO6OyAjNkJEMgor5q+TID4gecO5OyAjNkJEMwor5q+UID4gYsStOyAjNkJENAor5q+VID4gYsOsOyAjNkJENQor5q+WID4gYsOsOyAjNkJENgor5q+XID4gcMOtOyAjNkJENwor5q+YID4gcMOtOyAjNkJEOAor5q+ZID4gYsOsOyAjNkJEOQor5q+aID4gY2jDoW47ICM2QkRBCivmr5sgPiBtw6FvOyAjNkJEQgor5q+eID4gcMO6OyAjNkJERQor5q+gID4gamnEgTsgIzZCRTAKK+avoSA+IHpoxIFuOyAjNkJFMQor5q+iID4gc8SBaTsgIzZCRTIKK+avoyA+IG3DuTsgIzZCRTMKK+avpCA+IHTDuW87ICM2QkU0Civmr6UgPiB4w7puOyAjNkJFNQor5q+mID4gw6hyOyAjNkJFNgor5q+nID4gcsOzbmc7ICM2QkU3Civmr6ggPiB4acSDbjsgIzZCRTgKK+avqSA+IGrDujsgIzZCRTkKK+avqiA+IG3DujsgIzZCRUEKK+avqyA+IGjDoW87ICM2QkVCCivmr6wgPiBxw611OyAjNkJFQwor5q+tID4gZMOydTsgIzZCRUQKK+avryA+IHTEg247ICM2QkVGCivmr7AgPiBww6lpOyAjNkJGMAor5q+xID4gasO6OyAjNkJGMQor5q+yID4gZMO6bzsgIzZCRjIKK+avsyA+IGPDuWk7ICM2QkYzCivmr7QgPiBixKs7ICM2QkY0Civmr7UgPiBzxIFuOyAjNkJGNQor5q+3ID4gbcOgbzsgIzZCRjcKK+avuCA+IHPFq2k7ICM2QkY4Civmr7kgPiB5xas7ICM2QkY5Civmr7ogPiB5xas7ICM2QkZBCivmr7sgPiB0w7lvOyAjNkJGQgor5q+8ID4gaMOpOyAjNkJGQwor5q+9ID4gamnDoG47ICM2QkZECivmr74gPiB0w6A7ICM2QkZFCivmr78gPiBzxIFuOyAjNkJGRgor5rCAID4gbMeYOyAjNkMwMAor5rCBID4gbcO6OyAjNkMwMQor5rCCID4gbMOtOyAjNkMwMgor5rCDID4gdMOzbmc7ICM2QzAzCivmsIQgPiByxY9uZzsgIzZDMDQKK+awhSA+IGNoxINuZzsgIzZDMDUKK+awhiA+IHDFrTsgIzZDMDYKK+awhyA+IGzDum87ICM2QzA3CivmsIggPiB6aMSBbjsgIzZDMDgKK+awiSA+IHPDoG87ICM2QzA5CivmsIogPiB6aMSBbjsgIzZDMEEKK+awiyA+IG3DqW5nOyAjNkMwQgor5rCMID4gbMO6bzsgIzZDMEMKK+awjSA+IHHDujsgIzZDMEQKK+awjiA+IGRpw6k7ICM2QzBFCivmsI8gPiBzaMOsOyAjNkMwRgor5rCQID4gZMStOyAjNkMxMAor5rCRID4gbcOtbjsgIzZDMTEKK+awkiA+IGp1w6k7ICM2QzEyCivmsJMgPiBtw6FuZzsgIzZDMTMKK+awlCA+IHHDrDsgIzZDMTQKK+awlSA+IHBpxJM7ICM2QzE1CivmsJYgPiBuxINpOyAjNkMxNgor5rCXID4gccOsOyAjNkMxNwor5rCYID4gZMSBbzsgIzZDMTgKK+awmSA+IHhpxIFuOyAjNkMxOQor5rCaID4gY2h1xIFuOyAjNkMxQQor5rCbID4gZsSTbjsgIzZDMUIKK+awnCA+IHLDrDsgIzZDMUMKK+awnSA+IG7DqGk7ICM2QzFECivmsJ8gPiBmw7o7ICM2QzFGCivmsKAgPiBzaMSTbjsgIzZDMjAKK+awoSA+IGTFjW5nOyAjNkMyMQor5rCiID4gccSrbmc7ICM2QzIyCivmsKMgPiBxw6w7ICM2QzIzCivmsKQgPiB5xKtuOyAjNkMyNAor5rClID4geMSrOyAjNkMyNQor5rCmID4gaMOgaTsgIzZDMjYKK+awpyA+IHnEg25nOyAjNkMyNwor5rCoID4gxIFuOyAjNkMyOAor5rCpID4gecOgOyAjNkMyOQor5rCqID4ga8OoOyAjNkMyQQor5rCrID4gccSrbmc7ICM2QzJCCivmsKwgPiB5w6A7ICM2QzJDCivmsK0gPiBkxY1uZzsgIzZDMkQKK+awriA+IGTDoG47ICM2QzJFCivmsK8gPiBsx5w7ICM2QzJGCivmsLAgPiBxxKtuZzsgIzZDMzAKK+awsSA+IHnEg25nOyAjNkMzMQor5rCyID4gecWrbjsgIzZDMzIKK+awsyA+IHnFq247ICM2QzMzCivmsLQgPiBzaMWtaTsgIzZDMzQKK+awtSA+IHPEgW4nICdkacSDbicgJ3Noxa1pOyAjNkMzNQor5rC2ID4gemjElW5nOyAjNkMzNgor5rC3ID4gYsSrbmc7ICM2QzM3CivmsLggPiB5xY9uZzsgIzZDMzgKK+awuSA+IGTDoG5nOyAjNkMzOQor5rC7ID4gbMOoOyAjNkMzQgor5rC8ID4gbsOsOyAjNkMzQwor5rC9ID4gdMWtbjsgIzZDM0QKK+awviA+IGbDoG47ICM2QzNFCivmsL8gPiBnxa1pOyAjNkMzRgor5rGAID4gdMSrbmc7ICM2QzQwCivmsYEgPiB6aMSrOyAjNkM0MQor5rGCID4gccOtdTsgIzZDNDIKK+axgyA+IGLEq247ICM2QzQzCivmsYQgPiB6w6g7ICM2QzQ0CivmsYUgPiBtacSDbjsgIzZDNDUKK+axhiA+IGN1xIFuOyAjNkM0Ngor5rGHID4gaMO5aTsgIzZDNDcKK+axiCA+IGRpxIFvOyAjNkM0OAor5rGJID4gecOsOyAjNkM0OQor5rGKID4gY2jDoDsgIzZDNEEKK+axiyA+IHpow7pvOyAjNkM0Qgor5rGMID4gY2h1w6BuOyAjNkM0Qwor5rGNID4gd8OhbjsgIzZDNEQKK+axjiA+IGbDoG47ICM2QzRFCivmsY8gPiBkw6BpOyAjNkM0Rgor5rGQID4geMOsOyAjNkM1MAor5rGRID4gdMWrbzsgIzZDNTEKK+axkiA+IG3DoW5nOyAjNkM1Mgor5rGTID4gccOtdTsgIzZDNTMKK+axlCA+IHHDrDsgIzZDNTQKK+axlSA+IHNow6BuOyAjNkM1NQor5rGWID4gcMOgaTsgIzZDNTYKK+axlyA+IGjDoG47ICM2QzU3CivmsZggPiBxacSBbjsgIzZDNTgKK+axmSA+IHfFqzsgIzZDNTkKK+axmiA+IHfFqzsgIzZDNUEKK+axmyA+IHjDuW47ICM2QzVCCivmsZwgPiBzw6w7ICM2QzVDCivmsZ0gPiByxa07ICM2QzVECivmsZ4gPiBnxY9uZzsgIzZDNUUKK+axnyA+IGppxIFuZzsgIzZDNUYKK+axoCA+IGNow607ICM2QzYwCivmsaEgPiB3xas7ICM2QzYxCivmsaQgPiB0xIFuZzsgIzZDNjQKK+axpSA+IHpoxKs7ICM2QzY1CivmsaYgPiBjaMOtOyAjNkM2Ngor5rGnID4gcWnEgW47ICM2QzY3CivmsaggPiBtw6w7ICM2QzY4CivmsakgPiB5w7k7ICM2QzY5CivmsaogPiB3xIFuZzsgIzZDNkEKK+axqyA+IHHDrG5nOyAjNkM2Qgor5rGsID4gasStbmc7ICM2QzZDCivmsa0gPiByw7lpOyAjNkM2RAor5rGuID4gasWrbjsgIzZDNkUKK+axryA+IGjDs25nOyAjNkM2Rgor5rGwID4gdMOgaTsgIzZDNzAKK+axsSA+IHF1xINuOyAjNkM3MQor5rGyID4gasOtOyAjNkM3Mgor5rGzID4gYmnDoG47ICM2QzczCivmsbQgPiBiacOgbjsgIzZDNzQKK+axtSA+IGfDoG47ICM2Qzc1CivmsbYgPiB3w6huOyAjNkM3Ngor5rG3ID4gemjFjW5nOyAjNkM3Nwor5rG4ID4gZsSBbmc7ICM2Qzc4CivmsbkgPiB4xKtvbmc7ICM2Qzc5CivmsbogPiBqdcOpOyAjNkM3QQor5rG7ID4gaMSDbmc7ICM2QzdCCivmsbwgPiBuacWNdTsgIzZDN0MKK+axvSA+IHHDrDsgIzZDN0QKK+axviA+IGbDqW47ICM2QzdFCivmsb8gPiB4w7k7ICM2QzdGCivmsoAgPiB4w7k7ICM2QzgwCivmsoEgPiBxw6xuOyAjNkM4MQor5rKCID4gecOtOyAjNkM4Mgor5rKDID4gd8OyOyAjNkM4Mwor5rKEID4gecO6bjsgIzZDODQKK+ayhSA+IHl1w6FuOyAjNkM4NQor5rKGID4gaMOhbmc7ICM2Qzg2CivmsocgPiB5xINuOyAjNkM4Nwor5rKIID4gY2jDqW47ICM2Qzg4CivmsokgPiBjaMOpbjsgIzZDODkKK+ayiiA+IGTDoG47ICM2QzhBCivmsosgPiB5w7N1OyAjNkM4Qgor5rKMID4gZMO5bjsgIzZDOEMKK+ayjSA+IGjDuTsgIzZDOEQKK+ayjiA+IGjDuW87ICM2QzhFCivmso8gPiBxacSTOyAjNkM4Rgor5rKQID4gbcO5OyAjNkM5MAor5rKRID4gcsOzdTsgIzZDOTEKK+aykiA+IG3DqWk7ICM2QzkyCivmspMgPiB0w6A7ICM2QzkzCivmspQgPiBtacSDbjsgIzZDOTQKK+aylSA+IHfDuTsgIzZDOTUKK+ayliA+IGNoxY1uZzsgIzZDOTYKK+aylyA+IHRpxIFuOyAjNkM5Nwor5rKYID4gYsStOyAjNkM5OAor5rKZID4gc2jEgTsgIzZDOTkKK+aymiA+IHpoxK07ICM2QzlBCivmspsgPiBww6hpOyAjNkM5Qgor5rKcID4gcMOgbjsgIzZDOUMKK+aynSA+IHpoxa1pOyAjNkM5RAor5rKeID4gesSBOyAjNkM5RQor5rKfID4gZ8WNdTsgIzZDOUYKK+ayoCA+IGzDrXU7ICM2Q0EwCivmsqEgPiBtw6lpOyAjNkNBMQor5rKiID4gesOpOyAjNkNBMgor5rKjID4gZsSTbmc7ICM2Q0EzCivmsqQgPiDDsnU7ICM2Q0E0CivmsqUgPiBsw6w7ICM2Q0E1CivmsqYgPiBsw7puOyAjNkNBNgor5rKnID4gY8SBbmc7ICM2Q0E3CivmsqggPiBmw6luZzsgIzZDQTgKK+ayqSA+IHfDqWk7ICM2Q0E5CivmsqogPiBow7k7ICM2Q0FBCivmsqsgPiBtw7I7ICM2Q0FCCivmsqwgPiBtw6hpOyAjNkNBQwor5rKtID4gc2jDuTsgIzZDQUQKK+ayriA+IGrFqzsgIzZDQUUKK+ayryA+IHrEg247ICM2Q0FGCivmsrAgPiB0xatvOyAjNkNCMAor5rKxID4gdMO6bzsgIzZDQjEKK+aysiA+IHTDum87ICM2Q0IyCivmsrMgPiBow6k7ICM2Q0IzCivmsrQgPiBsw6w7ICM2Q0I0CivmsrUgPiBtxK07ICM2Q0I1CivmsrYgPiB5w607ICM2Q0I2CivmsrcgPiBmxIE7ICM2Q0I3CivmsrggPiBmw6hpOyAjNkNCOAor5rK5ID4gecOzdTsgIzZDQjkKK+ayuiA+IHRpw6FuOyAjNkNCQQor5rK7ID4gemjDrDsgIzZDQkIKK+ayvCA+IHpoxINvOyAjNkNCQwor5rK9ID4gZ8WrOyAjNkNCRAor5rK+ID4gemjEgW47ICM2Q0JFCivmsr8gPiB5w6FuOyAjNkNCRgor5rOAID4gc8SrOyAjNkNDMAor5rOBID4ga3XDoG5nOyAjNkNDMQor5rOCID4gasStb25nOyAjNkNDMgor5rODID4gasO5OyAjNkNDMwor5rOEID4geGnDqDsgIzZDQzQKK+azhSA+IHHDrXU7ICM2Q0M1Civms4YgPiB5xKs7ICM2Q0M2Civms4cgPiBqacSBOyAjNkNDNwor5rOIID4gemjFjW5nOyAjNkNDOAor5rOJID4gcXXDoW47ICM2Q0M5Civms4ogPiBiw7M7ICM2Q0NBCivms4sgPiBow7lpOyAjNkNDQgor5rOMID4gbcOsOyAjNkNDQwor5rONID4gYsSTbjsgIzZDQ0QKK+azjiA+IHpow7pvOyAjNkNDRQor5rOPID4gY2jDuTsgIzZDQ0YKK+azkCA+IGzDqDsgIzZDRDAKK+azkSA+IHnFj3U7ICM2Q0QxCivms5IgPiBnxas7ICM2Q0QyCivms5MgPiBow7NuZzsgIzZDRDMKK+azlCA+IGfEgW47ICM2Q0Q0Civms5UgPiBmxIM7ICM2Q0Q1Civms5YgPiBtxINvOyAjNkNENgor5rOXID4gc8OsOyAjNkNENwor5rOYID4gaMWrOyAjNkNEOAor5rOZID4gcMOtbmc7ICM2Q0Q5Civms5ogPiBjxK07ICM2Q0RBCivms5sgPiBmw6BuOyAjNkNEQgor5rOcID4gY2jDrTsgIzZDREMKK+aznSA+IHPDuTsgIzZDREQKK+azniA+IG7DrG5nOyAjNkNERQor5rOfID4gY2jEk25nOyAjNkNERgor5rOgID4gbMOtbmc7ICM2Q0UwCivms6EgPiBww6BvOyAjNkNFMQor5rOiID4gYsWNOyAjNkNFMgor5rOjID4gccOsOyAjNkNFMwor5rOkID4gc8OsOyAjNkNFNAor5rOlID4gbsOtOyAjNkNFNQor5rOmID4gasO6OyAjNkNFNgor5rOnID4geXXDqDsgIzZDRTcKK+azqCA+IHpow7k7ICM2Q0U4Civms6kgPiBzaMSTbmc7ICM2Q0U5Civms6ogPiBsw6hpOyAjNkNFQQor5rOrID4geHXDoG47ICM2Q0VCCivms6wgPiB4dcOoOyAjNkNFQwor5rOtID4gZsWrOyAjNkNFRAor5rOuID4gcMOgbjsgIzZDRUUKK+azryA+IG3ErW47ICM2Q0VGCivms7AgPiB0w6BpOyAjNkNGMAor5rOxID4gecSBbmc7ICM2Q0YxCivms7IgPiBqxK07ICM2Q0YyCivms7MgPiB5xY9uZzsgIzZDRjMKK+aztCA+IGd1w6BuOyAjNkNGNAor5rO1ID4gYsOobmc7ICM2Q0Y1Civms7YgPiB4dcOpOyAjNkNGNgor5rO3ID4gbMOzbmc7ICM2Q0Y3Civms7ggPiBsw7o7ICM2Q0Y4Civms7ogPiBiw7M7ICM2Q0ZBCivms7sgPiB4acOoOyAjNkNGQgor5rO8ID4gcMWNOyAjNkNGQwor5rO9ID4gesOpOyAjNkNGRAor5rO+ID4gasSrbmc7ICM2Q0ZFCivms78gPiB5w61uOyAjNkNGRgor5rSAID4gemjFjXU7ICM2RDAwCivmtIEgPiBqw607ICM2RDAxCivmtIIgPiB5w6w7ICM2RDAyCivmtIMgPiBoxatpOyAjNkQwMwor5rSEID4gaMO6aTsgIzZEMDQKK+a0hSA+IHrFrWk7ICM2RDA1CivmtIYgPiBjaMOpbmc7ICM2RDA2CivmtIcgPiB5xKtuOyAjNkQwNwor5rSIID4gd8OpaTsgIzZEMDgKK+a0iSA+IGjDsnU7ICM2RDA5CivmtIogPiBqacOgbjsgIzZEMEEKK+a0iyA+IHnDoW5nOyAjNkQwQgor5rSMID4gbGnDqDsgIzZEMEMKK+a0jSA+IHPDrDsgIzZEMEQKK+a0jiA+IGrDrDsgIzZEMEUKK+a0jyA+IMOpcjsgIzZEMEYKK+a0kCA+IHjDrW5nOyAjNkQxMAor5rSRID4gZsO6OyAjNkQxMQor5rSSID4gc8SDOyAjNkQxMgor5rSTID4gc8WtbzsgIzZEMTMKK+a0lCA+IHpoxK07ICM2RDE0CivmtJUgPiB5xKtuOyAjNkQxNQor5rSWID4gd8O6OyAjNkQxNgor5rSXID4geMStOyAjNkQxNwor5rSYID4ga8SDbzsgIzZEMTgKK+a0mSA+IHpoxas7ICM2RDE5CivmtJogPiBqacOgbmc7ICM2RDFBCivmtJsgPiBsw7lvOyAjNkQxQgor5rSdID4gw6BuOyAjNkQxRAor5rSeID4gZMOybmc7ICM2RDFFCivmtJ8gPiB5w607ICM2RDFGCivmtKAgPiBtw7N1OyAjNkQyMAor5rShID4gbMSVaTsgIzZEMjEKK+a0oiA+IHnEqzsgIzZEMjIKK+a0oyA+IG3ErTsgIzZEMjMKK+a0pCA+IHF1w6FuOyAjNkQyNAor5rSlID4gasSrbjsgIzZEMjUKK+a0piA+IG3DsjsgIzZEMjYKK+a0pyA+IHfElWk7ICM2RDI3CivmtKggPiB4acOhbzsgIzZEMjgKK+a0qSA+IHhpw6g7ICM2RDI5CivmtKogPiBow7NuZzsgIzZEMkEKK+a0qyA+IHjDuTsgIzZEMkIKK+a0rCA+IHNow7lvOyAjNkQyQwor5rStID4ga3XEgW5nOyAjNkQyRAor5rSuID4gdMSBbzsgIzZEMkUKK+a0ryA+IHFpw6g7ICM2RDJGCivmtLAgPiBqw7k7ICM2RDMwCivmtLEgPiDElXI7ICM2RDMxCivmtLIgPiB6aMWNdTsgIzZEMzIKK+a0syA+IHLDuTsgIzZEMzMKK+a0tCA+IHDDrW5nOyAjNkQzNAor5rS1ID4geMO6bjsgIzZEMzUKK+a0tiA+IHjEq29uZzsgIzZEMzYKK+a0tyA+IHpow6w7ICM2RDM3CivmtLggPiBndcSBbmc7ICM2RDM4CivmtLkgPiBodcOhbjsgIzZEMzkKK+a0uiA+IG3DrW5nOyAjNkQzQQor5rS7ID4gaMO6bzsgIzZEM0IKK+a0vCA+IHfEgTsgIzZEM0MKK+a0vSA+IHFpw6A7ICM2RDNECivmtL4gPiBww6BpOyAjNkQzRQor5rS/ID4gd8WrOyAjNkQzRgor5rWAID4gccWtOyAjNkQ0MAor5rWBID4gbMOtdTsgIzZENDEKK+a1giA+IHnDrDsgIzZENDIKK+a1gyA+IGppw6E7ICM2RDQzCivmtYQgPiBqw6xuZzsgIzZENDQKK+a1hSA+IHFpxINuOyAjNkQ0NQor5rWGID4gamnEgW5nOyAjNkQ0Ngor5rWHID4gamnEgW87ICM2RDQ3CivmtYggPiBjaMOpbmc7ICM2RDQ4CivmtYkgPiBzaMSrOyAjNkQ0OQor5rWKID4gemjDum87ICM2RDRBCivmtYsgPiBjw6g7ICM2RDRCCivmtY0gPiBrdcOgaTsgIzZENEQKK+a1jiA+IGrDrDsgIzZENEUKK+a1jyA+IGzDrXU7ICM2RDRGCivmtZAgPiBjaMSDbjsgIzZENTAKK+a1kSA+IGjDum47ICM2RDUxCivmtZIgPiBoxa07ICM2RDUyCivmtZMgPiBuw7NuZzsgIzZENTMKK+a1lCA+IHjDum47ICM2RDU0CivmtZUgPiBqw6xuOyAjNkQ1NQor5rWWID4gbGnDqDsgIzZENTYKK+a1lyA+IHHDrXU7ICM2RDU3CivmtZggPiB3xJVpOyAjNkQ1OAor5rWZID4gemjDqDsgIzZENTkKK+a1miA+IGrDuW47ICM2RDVBCivmtZsgPiBow6BuOyAjNkQ1Qgor5rWcID4gYsSBbmc7ICM2RDVDCivmtZ0gPiBtw6FuZzsgIzZENUQKK+a1niA+IHpow7pvOyAjNkQ1RQor5rWfID4gecOzdTsgIzZENUYKK+a1oCA+IHjEqzsgIzZENjAKK+a1oSA+IGLDszsgIzZENjEKK+a1oiA+IGTDsnU7ICM2RDYyCivmtaMgPiB3xINuOyAjNkQ2Mwor5rWkID4gaMOzbmc7ICM2RDY0CivmtaUgPiB5w6w7ICM2RDY1CivmtaYgPiBwxa07ICM2RDY2CivmtacgPiB5xK1uZzsgIzZENjcKK+a1qCA+IGzEg247ICM2RDY4CivmtakgPiBow6BvOyAjNkQ2OQor5rWqID4gbMOgbmc7ICM2RDZBCivmtasgPiBoxINuOyAjNkQ2Qgor5rWsID4gbMStOyAjNkQ2Qwor5rWtID4gZ8STbmc7ICM2RDZECivmta4gPiBmw7o7ICM2RDZFCivmta8gPiB3w7o7ICM2RDZGCivmtbAgPiBsacOgbjsgIzZENzAKK+a1sSA+IGNow7puOyAjNkQ3MQor5rWyID4gZsOpbmc7ICM2RDcyCivmtbMgPiB5w6w7ICM2RDczCivmtbQgPiB5w7k7ICM2RDc0CivmtbUgPiB0w7NuZzsgIzZENzUKK+a1tiA+IGzDoW87ICM2RDc2CivmtbcgPiBoxINpOyAjNkQ3Nwor5rW4ID4gasOsbjsgIzZENzgKK+a1uSA+IGppw6E7ICM2RDc5CivmtbogPiBjaMWNbmc7ICM2RDdBCivmtbsgPiB3xJVuZzsgIzZEN0IKK+a1vCA+IG3ElWk7ICM2RDdDCivmtb0gPiBzxatpOyAjNkQ3RAor5rW+ID4gY2jEk25nOyAjNkQ3RQor5rW/ID4gcMOoaTsgIzZEN0YKK+a2gCA+IHhpw6BuOyAjNkQ4MAor5raBID4gc2jDqG47ICM2RDgxCivmtoIgPiB0w7o7ICM2RDgyCivmtoMgPiBrw7luOyAjNkQ4Mwor5raEID4gcMSrbjsgIzZEODQKK+a2hSA+IG5pw6g7ICM2RDg1CivmtoYgPiBow6BuOyAjNkQ4Ngor5raHID4gasSrbmc7ICM2RDg3CivmtoggPiB4acSBbzsgIzZEODgKK+a2iSA+IHNow6g7ICM2RDg5CivmtoogPiBuacOgbjsgIzZEOEEKK+a2iyA+IHTFqzsgIzZEOEIKK+a2jCA+IHnFj25nOyAjNkQ4Qwor5raNID4geGnDoG87ICM2RDhECivmto4gPiB4acOhbjsgIzZEOEUKK+a2jyA+IHTErW5nOyAjNkQ4Rgor5raQID4gw6k7ICM2RDkwCivmtpEgPiBzw7k7ICM2RDkxCivmtpIgPiB0xatuOyAjNkQ5Mgor5raTID4ganXEgW47ICM2RDkzCivmtpQgPiBjw6luOyAjNkQ5NAor5raVID4gdMOsOyAjNkQ5NQor5raWID4gbMOsOyAjNkQ5Ngor5raXID4gc2jDuWk7ICM2RDk3CivmtpggPiBzw6w7ICM2RDk4CivmtpkgPiBsw6hpOyAjNkQ5OQor5raaID4gc2jDuWk7ICM2RDlBCivmtpsgPiB0xIFvOyAjNkQ5Qgor5racID4gZMO6OyAjNkQ5Qwor5radID4gbMOgbzsgIzZEOUQKK+a2niA+IGzDoWk7ICM2RDlFCivmtp8gPiBsacOhbjsgIzZEOUYKK+a2oCA+IHfDqWk7ICM2REEwCivmtqEgPiB3xY07ICM2REExCivmtqIgPiB5w7puOyAjNkRBMgor5rajID4gaHXDoG47ICM2REEzCivmtqQgPiBkw607ICM2REE0CivmtqYgPiByw7luOyAjNkRBNgor5ranID4gamnDoG47ICM2REE3CivmtqggPiB6aMSDbmc7ICM2REE4CivmtqkgPiBzw6g7ICM2REE5CivmtqogPiBmw7o7ICM2REFBCivmtqsgPiBndcOgbjsgIzZEQUIKK+a2rCA+IHjDrG5nOyAjNkRBQwor5ratID4gc2jDsnU7ICM2REFECivmtq4gPiBzaHXDoG47ICM2REFFCivmtq8gPiB5w6E7ICM2REFGCivmtrAgPiBjaMO5bzsgIzZEQjAKK+a2sSA+IHpow6BuZzsgIzZEQjEKK+a2siA+IHnDqDsgIzZEQjIKK+a2syA+IGvFjW5nOyAjNkRCMwor5ra0ID4gd8OyOyAjNkRCNAor5ra1ID4gaMOhbjsgIzZEQjUKK+a2tiA+IHTFq287ICM2REI2CivmtrcgPiBkxY1uZzsgIzZEQjcKK+a2uCA+IGjDqTsgIzZEQjgKK+a2uSA+IHfFjTsgIzZEQjkKK+a2uiA+IGrFqzsgIzZEQkEKK+a2uyA+IGfDoG47ICM2REJCCivmtrwgPiBsacOhbmc7ICM2REJDCivmtr0gPiBoxatuOyAjNkRCRAor5ra+ID4gdMOgOyAjNkRCRQor5ra/ID4gemjDum87ICM2REJGCivmt4AgPiBkacOgbjsgIzZEQzAKK+a3gSA+IHFpw6g7ICM2REMxCivmt4IgPiBkw6k7ICM2REMyCivmt4MgPiBqdcOgbjsgIzZEQzMKK+a3hCA+IHrEqzsgIzZEQzQKK+a3hSA+IHjEqzsgIzZEQzUKK+a3hiA+IHnDoW87ICM2REM2Civmt4cgPiBxw607ICM2REM3Civmt4ggPiBnxa07ICM2REM4Civmt4kgPiBnxa1vOyAjNkRDOQor5reKID4gaMOgbjsgIzZEQ0EKK+a3iyA+IGzDrW47ICM2RENCCivmt4wgPiB0xINuZzsgIzZEQ0MKK+a3jSA+IHpoxY11OyAjNkRDRAor5reOID4gcMSVbmc7ICM2RENFCivmt48gPiBow6BvOyAjNkRDRgor5reQID4gY2jEgW5nOyAjNkREMAor5reRID4gc2jDujsgIzZERDEKK+a3kiA+IHHEqzsgIzZERDIKK+a3kyA+IGbEgW5nOyAjNkREMwor5reUID4gY2jDrDsgIzZERDQKK+a3lSA+IGzDuTsgIzZERDUKK+a3liA+IG7DoG87ICM2REQ2Civmt5cgPiBqw7o7ICM2REQ3Civmt5ggPiB0w6FvOyAjNkREOAor5reZID4gY8Ozbmc7ICM2REQ5Civmt5ogPiBsw6hpOyAjNkREQQor5rebID4gemjDrDsgIzZEREIKK+a3nCA+IHDDqW5nOyAjNkREQwor5redID4gZsOpaTsgIzZEREQKK+a3niA+IHPFjW5nOyAjNkRERQor5refID4gdGnEg247ICM2RERGCivmt6AgPiBww6w7ICM2REUwCivmt6EgPiBkw6BuOyAjNkRFMQor5reiID4gecO5OyAjNkRFMgor5rejID4gbsOtOyAjNkRFMwor5rekID4gecWrOyAjNkRFNAor5relID4gbMO5OyAjNkRFNQor5remID4gZ8OgbjsgIzZERTYKK+a3pyA+IG3DrDsgIzZERTcKK+a3qCA+IGrDrG5nOyAjNkRFOAor5repID4gbMOtbmc7ICM2REU5Civmt6ogPiBsw7puOyAjNkRFQQor5rerID4gecOtbjsgIzZERUIKK+a3rCA+IGPDuWk7ICM2REVDCivmt60gPiBxw7o7ICM2REVECivmt64gPiBodcOhaTsgIzZERUUKK+a3ryA+IHnDuTsgIzZERUYKK+a3sCA+IG5pw6BuOyAjNkRGMAor5rexID4gc2jEk247ICM2REYxCivmt7IgPiBwacOhbzsgIzZERjIKK+a3syA+IGNow7puOyAjNkRGMwor5re0ID4gd8OgOyAjNkRGNAor5re1ID4geXXEgW47ICM2REY1Civmt7YgPiBsw6FpOyAjNkRGNgor5re3ID4gaMWtbjsgIzZERjcKK+a3uCA+IHHEq25nOyAjNkRGOAor5re5ID4gecSBbjsgIzZERjkKK+a3uiA+IHFpxINuOyAjNkRGQQor5re7ID4gdGnEgW47ICM2REZCCivmt7wgPiBtacSDbzsgIzZERkMKK+a3vSA+IHpoxK07ICM2REZECivmt74gPiB5xK1uOyAjNkRGRQor5re/ID4gbcOsOyAjNkRGRgor5riAID4gYsSTbjsgIzZFMDAKK+a4gSA+IHl1xIFuOyAjNkUwMQor5riCID4gd8OobjsgIzZFMDIKK+a4gyA+IHLDqDsgIzZFMDMKK+a4hCA+IGbEk2k7ICM2RTA0CivmuIUgPiBxxKtuZzsgIzZFMDUKK+a4hiA+IHl1xIFuOyAjNkUwNgor5riHID4ga8SVOyAjNkUwNwor5riIID4gasOsOyAjNkUwOAor5riJID4gc2jDqDsgIzZFMDkKK+a4iiA+IHl1xIFuOyAjNkUwQQor5riMID4gbMO5OyAjNkUwQwor5riNID4gesOsOyAjNkUwRAor5riOID4gZMO6OyAjNkUwRQor5riQID4gamnDoG47ICM2RTEwCivmuJEgPiBtxK1uOyAjNkUxMQor5riSID4gcMOsOyAjNkUxMgor5riUID4gecO6OyAjNkUxNAor5riVID4geXXEgW47ICM2RTE1CivmuJYgPiBzaMSVbjsgIzZFMTYKK+a4lyA+IHNow6huOyAjNkUxNwor5riYID4gcsOzdTsgIzZFMTgKK+a4mSA+IGh1w6BuOyAjNkUxOQor5riaID4gemjFrTsgIzZFMUEKK+a4myA+IGppxINuOyAjNkUxQgor5ricID4gbnXEg247ICM2RTFDCivmuJ0gPiB5w7o7ICM2RTFECivmuJ4gPiBxw611OyAjNkUxRQor5rifID4gdMOtbmc7ICM2RTFGCivmuKAgPiBxw7o7ICM2RTIwCivmuKEgPiBkw7k7ICM2RTIxCivmuKIgPiBmw6luZzsgIzZFMjIKK+a4oyA+IHpoxIE7ICM2RTIzCivmuKQgPiBiw7M7ICM2RTI0CivmuKUgPiB3w7I7ICM2RTI1CivmuKYgPiB3xY07ICM2RTI2CivmuKcgPiBkw6w7ICM2RTI3CivmuKggPiB3xJNpOyAjNkUyOAor5ripID4gd8STbjsgIzZFMjkKK+a4qiA+IHLDujsgIzZFMkEKK+a4qyA+IHhpw6g7ICM2RTJCCivmuKwgPiBjw6g7ICM2RTJDCivmuK0gPiB3w6hpOyAjNkUyRAor5riuID4gZ8STOyAjNkUyRQor5rivID4gZ8SDbmc7ICM2RTJGCivmuLAgPiB5xINuOyAjNkUzMAor5rixID4gaMOzbmc7ICM2RTMxCivmuLIgPiB4dcOgbjsgIzZFMzIKK+a4syA+IG3ErTsgIzZFMzMKK+a4tCA+IGvElTsgIzZFMzQKK+a4tSA+IG3DoW87ICM2RTM1CivmuLYgPiB5xKtuZzsgIzZFMzYKK+a4tyA+IHnEg247ICM2RTM3CivmuLggPiB5w7N1OyAjNkUzOAor5ri5ID4gaMWNbmc7ICM2RTM5CivmuLogPiBtacSDbzsgIzZFM0EKK+a4uyA+IHjErW5nOyAjNkUzQgor5ri8ID4gbcSVaTsgIzZFM0MKK+a4vSA+IHrEgWk7ICM2RTNECivmuL4gPiBow7puOyAjNkUzRQor5ri/ID4gbsOgaTsgIzZFM0YKK+a5gCA+IGvDumk7ICM2RTQwCivmuYEgPiBzaMOtOyAjNkU0MQor5rmCID4gw6g7ICM2RTQyCivmuYMgPiBww6BpOyAjNkU0Mwor5rmEID4gbcOpaTsgIzZFNDQKK+a5hSA+IGxpw6BuOyAjNkU0NQor5rmGID4gccOsOyAjNkU0Ngor5rmHID4gccOsOyAjNkU0Nwor5rmIID4gbcOpaTsgIzZFNDgKK+a5iSA+IHRpw6FuOyAjNkU0OQor5rmKID4gY8OydTsgIzZFNEEKK+a5iyA+IHfDqWk7ICM2RTRCCivmuYwgPiBjxIFuOyAjNkU0Qwor5rmNID4gdHXEgW47ICM2RTRECivmuY4gPiBtacSDbjsgIzZFNEUKK+a5jyA+IGjDuWk7ICM2RTRGCivmuZAgPiBtw7I7ICM2RTUwCivmuZEgPiB4xa07ICM2RTUxCivmuZIgPiBqw607ICM2RTUyCivmuZMgPiBww6luOyAjNkU1Mwor5rmUID4gamnEgW47ICM2RTU0CivmuZUgPiBqacSDbjsgIzZFNTUKK+a5liA+IGjDujsgIzZFNTYKK+a5lyA+IGbDqG5nOyAjNkU1Nwor5rmYID4geGnEgW5nOyAjNkU1OAor5rmZID4gecOsOyAjNkU1OQor5rmaID4gecOsbjsgIzZFNUEKK+a5myA+IHpow6BuOyAjNkU1Qgor5rmcID4gc2jDrTsgIzZFNUMKK+a5nSA+IGppxJM7ICM2RTVECivmuZ4gPiBjaMOpbmc7ICM2RTVFCivmuZ8gPiBodcOhbmc7ICM2RTVGCivmuaAgPiB0w6BuOyAjNkU2MAor5rmhID4gecO6OyAjNkU2MQor5rmiID4gYsOsOyAjNkU2Mgor5rmjID4gbcStbjsgIzZFNjMKK+a5pCA+IHNoxKs7ICM2RTY0CivmuaUgPiB0w7o7ICM2RTY1CivmuaYgPiBzaMSTbmc7ICM2RTY2CivmuacgPiB5xY9uZzsgIzZFNjcKK+a5qCA+IHHDuTsgIzZFNjgKK+a5qSA+IHpow7JuZzsgIzZFNjkKK+a5qiA+IHN1w6hpOyAjNkU2QQor5rmrID4gasSrdTsgIzZFNkIKK+a5rCA+IGppxINvOyAjNkU2Qwor5rmtID4gcWnDs3U7ICM2RTZECivmua4gPiB5xKtuOyAjNkU2RQor5rmvID4gdMSBbmc7ICM2RTZGCivmubAgPiBsw7NuZzsgIzZFNzAKK+a5sSA+IGjDuW87ICM2RTcxCivmubIgPiB5dcOhbjsgIzZFNzIKK+a5syA+IG7Eg247ICM2RTczCivmubQgPiBiw6BuOyAjNkU3NAor5rm1ID4gecWPdTsgIzZFNzUKK+a5tiA+IHF1w6FuOyAjNkU3Ngor5rm3ID4gY2jDumk7ICM2RTc3CivmubggPiBsacOgbmc7ICM2RTc4CivmubkgPiBjaMOhbjsgIzZFNzkKK+a5uiA+IHnDoW47ICM2RTdBCivmubsgPiBjaMO6bjsgIzZFN0IKK+a5vCA+IG5pw6g7ICM2RTdDCivmub0gPiB6xKs7ICM2RTdECivmub4gPiB3xIFuOyAjNkU3RQor5rm/ID4gc2jEqzsgIzZFN0YKK+a6gCA+IG3Eg247ICM2RTgwCivmuoEgPiB5w61uZzsgIzZFODEKK+a6gyA+IGvDuWk7ICM2RTgzCivmuoUgPiBqacOgbjsgIzZFODUKK+a6hiA+IHjDuTsgIzZFODYKK+a6hyA+IGzHmjsgIzZFODcKK+a6iCA+IGfFq2k7ICM2RTg4CivmuokgPiBnw6BpOyAjNkU4OQor5rqMID4gcMWNOyAjNkU4Qwor5rqNID4gasOsbjsgIzZFOEQKK+a6jiA+IGfDuWk7ICM2RThFCivmuo8gPiB0w6FuZzsgIzZFOEYKK+a6kCA+IHl1w6FuOyAjNkU5MAor5rqRID4gc8WtbzsgIzZFOTEKK+a6kiA+IHl1w6FuOyAjNkU5Mgor5rqTID4gbGnDoW47ICM2RTkzCivmupQgPiB5xINvOyAjNkU5NAor5rqVID4gbcOobmc7ICM2RTk1CivmupYgPiB6aMWtbjsgIzZFOTYKK+a6lyA+IHNow6luZzsgIzZFOTcKK+a6mCA+IGvDqDsgIzZFOTgKK+a6mSA+IHTDoGk7ICM2RTk5CivmupogPiBkw6E7ICM2RTlBCivmupsgPiB3xIE7ICM2RTlCCivmupwgPiBsxKt1OyAjNkU5Qwor5rqdID4gZ8WNdTsgIzZFOUQKK+a6niA+IHPEgW87ICM2RTlFCivmup8gPiBtw61uZzsgIzZFOUYKK+a6oCA+IHpow6A7ICM2RUEwCivmuqEgPiBzaMOtOyAjNkVBMQor5rqiID4gecOsOyAjNkVBMgor5rqjID4gbMO6bjsgIzZFQTMKK+a6pCA+IG3EgzsgIzZFQTQKK+a6pSA+IHDFrTsgIzZFQTUKK+a6piA+IHfDqWk7ICM2RUE2CivmuqcgPiBsw6w7ICM2RUE3CivmuqggPiBjw6FpOyAjNkVBOAor5rqpID4gd8O5OyAjNkVBOQor5rqqID4geMSrOyAjNkVBQQor5rqrID4gd8STbjsgIzZFQUIKK+a6rCA+IHFpxIFuZzsgIzZFQUMKK+a6rSA+IHrDqTsgIzZFQUQKK+a6riA+IHNoxKs7ICM2RUFFCivmuq8gPiBzw7k7ICM2RUFGCivmurAgPiB5xKs7ICM2RUIwCivmurEgPiB6aMSTbjsgIzZFQjEKK+a6siA+IHPFjXU7ICM2RUIyCivmurMgPiB5w7puOyAjNkVCMwor5rq0ID4geMOsdTsgIzZFQjQKK+a6tSA+IHnEq247ICM2RUI1CivmurYgPiByw7NuZzsgIzZFQjYKK+a6tyA+IGjDuW47ICM2RUI3CivmurggPiBzw7k7ICM2RUI4CivmurkgPiBzw7k7ICM2RUI5CivmurogPiBuw6w7ICM2RUJBCivmursgPiB0w6A7ICM2RUJCCivmurwgPiBzaMSrOyAjNkVCQwor5rq9ID4gcsO5OyAjNkVCRAor5rq+ID4gd8STaTsgIzZFQkUKK+a6vyA+IHDDoG47ICM2RUJGCivmu4AgPiBjaMO5OyAjNkVDMAor5ruBID4gY2jDujsgIzZFQzEKK+a7giA+IHDEgW5nOyAjNkVDMgor5ruDID4gd8SVbmc7ICM2RUMzCivmu4QgPiBjxIFuZzsgIzZFQzQKK+a7hSA+IG1pw6g7ICM2RUM1Civmu4YgPiBow6k7ICM2RUM2Civmu4cgPiBkacSBbjsgIzZFQzcKK+a7iCA+IGjDoG87ICM2RUM4Civmu4kgPiBodcSDbmc7ICM2RUM5Civmu4ogPiB4w6w7ICM2RUNBCivmu4sgPiB6xKs7ICM2RUNCCivmu4wgPiBkw607ICM2RUNDCivmu40gPiB6aMStOyAjNkVDRAor5ruOID4gecOtbmc7ICM2RUNFCivmu48gPiBmxa07ICM2RUNGCivmu5AgPiBqacOpOyAjNkVEMAor5ruRID4gaHXDoTsgIzZFRDEKK+a7kiA+IGfEkzsgIzZFRDIKK+a7kyA+IHrErTsgIzZFRDMKK+a7lCA+IHTEgW87ICM2RUQ0Civmu5UgPiB0w6luZzsgIzZFRDUKK+a7liA+IHPFq2k7ICM2RUQ2Civmu5cgPiBixK07ICM2RUQ3Civmu5ggPiBqacOgbzsgIzZFRDgKK+a7mSA+IGjDuWk7ICM2RUQ5Civmu5ogPiBnxa1uOyAjNkVEQQor5rubID4gecOtbjsgIzZFREIKK+a7nCA+IGfEgW87ICM2RURDCivmu50gPiBsw7NuZzsgIzZFREQKK+a7niA+IHpow6w7ICM2RURFCivmu58gPiB5w6BuOyAjNkVERgor5rugID4gc2jDqDsgIzZFRTAKK+a7oSA+IG3Eg247ICM2RUUxCivmu6IgPiB5w6xuZzsgIzZFRTIKK+a7oyA+IGNow7puOyAjNkVFMwor5rukID4gbMecOyAjNkVFNAor5rulID4gbMOgbjsgIzZFRTUKK+a7piA+IGx1w6FuOyAjNkVFNgor5ruoID4gYsSrbjsgIzZFRTgKK+a7qSA+IHTEgW47ICM2RUU5Civmu6ogPiB5w7k7ICM2RUVBCivmu6sgPiBzxY91OyAjNkVFQgor5rusID4gaMO5OyAjNkVFQwor5rutID4gYsOsOyAjNkVFRAor5ruuID4gYmnEgW87ICM2RUVFCivmu68gPiB6aMOsOyAjNkVFRgor5ruwID4gamnEg25nOyAjNkVGMAor5ruxID4ga8OydTsgIzZFRjEKK+a7siA+IHNow6huOyAjNkVGMgor5ruzID4gc2jEgW5nOyAjNkVGMwor5ru0ID4gZMSrOyAjNkVGNAor5ru1ID4gbcOsOyAjNkVGNQor5ru2ID4gw6FvOyAjNkVGNgor5ru3ID4gbMWtOyAjNkVGNwor5ru4ID4gaMWtOyAjNkVGOAor5ru5ID4gaMWrOyAjNkVGOQor5ru6ID4gecOzdTsgIzZFRkEKK+a7uyA+IGNoxINuOyAjNkVGQgor5ru8ID4gZsOgbjsgIzZFRkMKK+a7vSA+IHnDs25nOyAjNkVGRAor5ru+ID4gZ8WtbjsgIzZFRkUKK+a7vyA+IG3Eg247ICM2RUZGCivmvIAgPiBxw6xuZzsgIzZGMDAKK+a8gSA+IHnDujsgIzZGMDEKK+a8giA+IHBpxIFvOyAjNkYwMgor5ryDID4gasOtOyAjNkYwMwor5ryEID4gecOhOyAjNkYwNAor5ryFID4gamnEg287ICM2RjA1CivmvIYgPiBxxKs7ICM2RjA2CivmvIcgPiB4xK07ICM2RjA3CivmvIggPiBqw6w7ICM2RjA4CivmvIkgPiBsw7k7ICM2RjA5CivmvIogPiBsx5o7ICM2RjBBCivmvIsgPiBsw7NuZzsgIzZGMEIKK+a8jCA+IGrErW47ICM2RjBDCivmvI0gPiBnw7pvOyAjNkYwRAor5ryOID4gY8Ozbmc7ICM2RjBFCivmvI8gPiBsw7J1OyAjNkYwRgor5ryQID4gemjDrTsgIzZGMTAKK+a8kSA+IGfDoGk7ICM2RjExCivmvJIgPiBxacOhbmc7ICM2RjEyCivmvJMgPiBsw607ICM2RjEzCivmvJQgPiB5xINuOyAjNkYxNAor5ryVID4gY8OhbzsgIzZGMTUKK+a8liA+IGppw6BvOyAjNkYxNgor5ryXID4gY8WNbmc7ICM2RjE3CivmvJggPiBxw7puOyAjNkYxOAor5ryZID4gdHXDoW47ICM2RjE5CivmvJogPiDDsnU7ICM2RjFBCivmvJsgPiB0w6luZzsgIzZGMUIKK+a8nCA+IHnElTsgIzZGMUMKK+a8nSA+IHjDrTsgIzZGMUQKK+a8niA+IG3DrDsgIzZGMUUKK+a8nyA+IHTDoW5nOyAjNkYxRgor5rygID4gbcOyOyAjNkYyMAor5ryhID4gc2jEgW5nOyAjNkYyMQor5ryiID4gaMOgbjsgIzZGMjIKK+a8oyA+IGxpw6FuOyAjNkYyMwor5rykID4gbMSDbjsgIzZGMjQKK+a8pSA+IHfEgTsgIzZGMjUKK+a8piA+IGzDrTsgIzZGMjYKK+a8pyA+IHFpw6FuOyAjNkYyNwor5ryoID4gZsOpbmc7ICM2RjI4CivmvKkgPiB4dcOhbjsgIzZGMjkKK+a8qiA+IHnEqzsgIzZGMkEKK+a8qyA+IG3DoG47ICM2RjJCCivmvKwgPiB6w6w7ICM2RjJDCivmvK0gPiBtxINuZzsgIzZGMkQKK+a8riA+IGvEgW5nOyAjNkYyRQor5ryvID4gbMSVaTsgIzZGMkYKK+a8sCA+IHDEk25nOyAjNkYzMAor5ryxID4gc2jDuTsgIzZGMzEKK+a8siA+IHpoxINuZzsgIzZGMzIKK+a8syA+IHpoxIFuZzsgIzZGMzMKK+a8tCA+IGNow7NuZzsgIzZGMzQKK+a8tSA+IHjDuTsgIzZGMzUKK+a8tiA+IGh1w6BuOyAjNkYzNgor5ry3ID4ga8O5bzsgIzZGMzcKK+a8uCA+IGppw6BuOyAjNkYzOAor5ry5ID4gecSBbjsgIzZGMzkKK+a8uiA+IGNodcSDbmc7ICM2RjNBCivmvLsgPiBsacOhbzsgIzZGM0IKK+a8vCA+IGPFrWk7ICM2RjNDCivmvL0gPiB0w607ICM2RjNECivmvL4gPiB5w6BuZzsgIzZGM0UKK+a8vyA+IGppxIFuZzsgIzZGM0YKK+a9gCA+IGPDs25nOyAjNkY0MAor5r2BID4gecStbmc7ICM2RjQxCivmvYIgPiBow7NuZzsgIzZGNDIKK+a9gyA+IHjDum47ICM2RjQzCivmvYQgPiBzaMO5OyAjNkY0NAor5r2FID4gZ3XDoG47ICM2RjQ1CivmvYYgPiB5w61uZzsgIzZGNDYKK+a9hyA+IHhpxIFvOyAjNkY0Nwor5r2KID4geMO5OyAjNkY0QQor5r2LID4gbGnDoG47ICM2RjRCCivmvYwgPiB6aMOsOyAjNkY0Qwor5r2NID4gd8OpaTsgIzZGNEQKK+a9jiA+IHDDrDsgIzZGNEUKK+a9jyA+IGp1w6k7ICM2RjRGCivmvZAgPiBqacOgbzsgIzZGNTAKK+a9kSA+IHDFjTsgIzZGNTEKK+a9kiA+IGTDoG5nOyAjNkY1Mgor5r2TID4gaMO5aTsgIzZGNTMKK+a9lCA+IGppw6k7ICM2RjU0CivmvZUgPiB3xa07ICM2RjU1CivmvZYgPiBww6E7ICM2RjU2CivmvZcgPiBqw607ICM2RjU3CivmvZggPiBwxIFuOyAjNkY1OAor5r2ZID4gZ8O6aTsgIzZGNTkKK+a9miA+IHhpxIFvOyAjNkY1QQor5r2bID4gcWnDoW47ICM2RjVCCivmvZwgPiBxacOhbjsgIzZGNUMKK+a9nSA+IHjEqzsgIzZGNUQKK+a9niA+IGzDuTsgIzZGNUUKK+a9nyA+IHjDrDsgIzZGNUYKK+a9oCA+IHh1w6BuOyAjNkY2MAor5r2hID4gZMO5bjsgIzZGNjEKK+a9oiA+IGh1w6FuZzsgIzZGNjIKK+a9oyA+IG3ErW47ICM2RjYzCivmvaQgPiByw7luOyAjNkY2NAor5r2lID4gc8O5OyAjNkY2NQor5r2mID4gbGnDoW87ICM2RjY2CivmvacgPiB6aMSTbjsgIzZGNjcKK+a9qCA+IHpoxY1uZzsgIzZGNjgKK+a9qSA+IHnDrDsgIzZGNjkKK+a9qiA+IGTDrTsgIzZGNkEKK+a9qyA+IHfEgW47ICM2RjZCCivmvawgPiBkw6BuOyAjNkY2Qwor5r2tID4gdMOhbjsgIzZGNkQKK+a9riA+IGNow6FvOyAjNkY2RQor5r2vID4geMO6bjsgIzZGNkYKK+a9sCA+IGvDuWk7ICM2RjcwCivmvbEgPiB5aWU7ICM2RjcxCivmvbIgPiBzaMOgbzsgIzZGNzIKK+a9syA+IHTDujsgIzZGNzMKK+a9tCA+IHpoxas7ICM2Rjc0CivmvbUgPiBzw6BuOyAjNkY3NQor5r22ID4gaMSTaTsgIzZGNzYKK+a9tyA+IGLErTsgIzZGNzcKK+a9uCA+IHNoxIFuOyAjNkY3OAor5r25ID4gY2jDoW47ICM2Rjc5CivmvbogPiBjaMOhbjsgIzZGN0EKK+a9uyA+IHNoxa07ICM2RjdCCivmvbwgPiB0w7NuZzsgIzZGN0MKK+a9vSA+IHDFrTsgIzZGN0QKK+a9viA+IGzDrW47ICM2RjdFCivmvb8gPiB3w6lpOyAjNkY3Rgor5r6AID4gc8OoOyAjNkY4MAor5r6BID4gc8OoOyAjNkY4MQor5r6CID4gY2jDqW5nOyAjNkY4Mgor5r6DID4gasOsb25nOyAjNkY4Mwor5r6EID4gY2jDqW5nOyAjNkY4NAor5r6FID4gaHXDoDsgIzZGODUKK+a+hiA+IGppxIFvOyAjNkY4Ngor5r6HID4gbMOgbzsgIzZGODcKK+a+iCA+IGNow6g7ICM2Rjg4CivmvokgPiBnxINuOyAjNkY4OQor5r6KID4gY8WrbjsgIzZGOEEKK+a+iyA+IGjDqG5nOyAjNkY4Qgor5r6MID4gc8SrOyAjNkY4Qwor5r6NID4gc2jDuTsgIzZGOEQKK+a+jiA+IHDDqW5nOyAjNkY4RQor5r6PID4gaMOgbjsgIzZGOEYKK+a+kCA+IHnDum47ICM2RjkwCivmvpEgPiBsw6x1OyAjNkY5MQor5r6SID4gaMOybmc7ICM2RjkyCivmvpMgPiBmw7o7ICM2RjkzCivmvpQgPiBow6BvOyAjNkY5NAor5r6VID4gaMOpOyAjNkY5NQor5r6WID4geGnEgW47ICM2Rjk2CivmvpcgPiBqacOgbjsgIzZGOTcKK+a+mCA+IHNoxIFuOyAjNkY5OAor5r6ZID4geMOsOyAjNkY5OQor5r6cID4gbMOhbjsgIzZGOUMKK+a+niA+IHnDujsgIzZGOUUKK+a+nyA+IGzErW47ICM2RjlGCivmvqAgPiBtxK1uOyAjNkZBMAor5r6hID4gesSDbzsgIzZGQTEKK+a+oiA+IGTEgW5nOyAjNkZBMgor5r6jID4gd8SDbjsgIzZGQTMKK+a+pCA+IHrDqTsgIzZGQTQKK+a+pSA+IHhpw6g7ICM2RkE1CivmvqYgPiB5w7k7ICM2RkE2CivmvqcgPiBsxK07ICM2RkE3CivmvqggPiBzaMOsOyAjNkZBOAor5r6pID4geHXDqTsgIzZGQTkKK+a+qiA+IGzDrW5nOyAjNkZBQQor5r6rID4gbcOgbjsgIzZGQUIKK+a+rCA+IHrEqzsgIzZGQUMKK+a+rSA+IHnFjW5nOyAjNkZBRAor5r6uID4ga3XDoGk7ICM2RkFFCivmvq8gPiBjw6BuOyAjNkZBRgor5r6wID4gbGnDoG47ICM2RkIwCivmvrEgPiBkacOgbjsgIzZGQjEKK+a+siA+IHnDqDsgIzZGQjIKK+a+syA+IMOgbzsgIzZGQjMKK+a+tCA+IGh1w6FuOyAjNkZCNAor5r61ID4gemjEk247ICM2RkI1CivmvrYgPiBjaMOhbjsgIzZGQjYKK+a+tyA+IG3DoG47ICM2RkI3CivmvrggPiBkxINuOyAjNkZCOAor5r65ID4gZMOgbjsgIzZGQjkKK+a+uiA+IHnDrDsgIzZGQkEKK+a+uyA+IHPDuWk7ICM2RkJCCivmvrwgPiBww6w7ICM2RkJDCivmvr0gPiBqw7k7ICM2RkJECivmvr4gPiB0w6A7ICM2RkJFCivmvr8gPiBxw61uOyAjNkZCRgor5r+AID4gasSrOyAjNkZDMAor5r+BID4gemjDum87ICM2RkMxCivmv4IgPiBsacOhbjsgIzZGQzIKK+a/gyA+IG7Ds25nOyAjNkZDMwor5r+EID4gZ8WrbzsgIzZGQzQKK+a/hSA+IGrDrG47ICM2RkM1Civmv4YgPiBmw6luOyAjNkZDNgor5r+HID4gc8OoOyAjNkZDNwor5r+IID4gasOtOyAjNkZDOAor5r+JID4gc8WraTsgIzZGQzkKK+a/iiA+IGjDuWk7ICM2RkNBCivmv4sgPiBjaMWtOyAjNkZDQgor5r+MID4gdMOgOyAjNkZDQwor5r+NID4gc8WNbmc7ICM2RkNECivmv44gPiBkxK1uZzsgIzZGQ0UKK+a/kCA+IHpoxa07ICM2RkQwCivmv5EgPiBsw6BpOyAjNkZEMQor5r+SID4gYsSrbjsgIzZGRDIKK+a/kyA+IGxpw6FuOyAjNkZEMwor5r+UID4gbcStOyAjNkZENAor5r+VID4gc2jEqzsgIzZGRDUKK+a/liA+IHNow7k7ICM2RkQ2Civmv5cgPiBtw6w7ICM2RkQ3Civmv5ggPiBuw6xuZzsgIzZGRDgKK+a/mSA+IHnDrW5nOyAjNkZEOQor5r+aID4gecOtbmc7ICM2RkRBCivmv5sgPiBtw6luZzsgIzZGREIKK+a/nCA+IGrDrG47ICM2RkRDCivmv50gPiBxw607ICM2RkRECivmv54gPiBww6w7ICM2RkRFCivmv58gPiBqw6w7ICM2RkRGCivmv6AgPiBow6FvOyAjNkZFMAor5r+hID4gcsO6OyAjNkZFMQor5r+iID4gesWtaTsgIzZGRTIKK+a/oyA+IHfDsjsgIzZGRTMKK+a/pCA+IHTEgW87ICM2RkU0Civmv6UgPiB5w6xuOyAjNkZFNQor5r+mID4gecStbjsgIzZGRTYKK+a/pyA+IGTDuWk7ICM2RkU3Civmv6ggPiBjw607ICM2RkU4Civmv6kgPiBow7lvOyAjNkZFOQor5r+qID4gasOsbmc7ICM2RkVBCivmv6sgPiBsw6BuOyAjNkZFQgor5r+sID4gasO5bjsgIzZGRUMKK+a/rSA+IMOgaTsgIzZGRUQKK+a/riA+IHDFqzsgIzZGRUUKK+a/ryA+IHpow7pvOyAjNkZFRgor5r+wID4gd8OpaTsgIzZGRjAKK+a/sSA+IGLEq247ICM2RkYxCivmv7IgPiBnxa07ICM2RkYyCivmv7MgPiBxacOhbjsgIzZGRjMKK+a/tCA+IHjDrW5nOyAjNkZGNAor5r+2ID4ga8O5bzsgIzZGRjYKK+a/tyA+IGbDqGk7ICM2RkY3Civmv7ogPiBqacOgbjsgIzZGRkEKK+a/uyA+IHfElWk7ICM2RkZCCivmv7wgPiBsw7lvOyAjNkZGQwor5r+9ID4gesOgbjsgIzZGRkQKK+a/viA+IGzHnDsgIzZGRkUKK+a/vyA+IGzDrDsgIzZGRkYKK+eAgCA+IHnFjXU7ICM3MDAwCivngIEgPiB5w6BuZzsgIzcwMDEKK+eAgiA+IGzFrTsgIzcwMDIKK+eAgyA+IHPDrDsgIzcwMDMKK+eAhCA+IGppw6k7ICM3MDA0CivngIUgPiB5w6xuZzsgIzcwMDUKK+eAhiA+IGTDujsgIzcwMDYKK+eAhyA+IHfEg25nOyAjNzAwNwor54CIID4gaMWraTsgIzcwMDgKK+eAiSA+IHhpw6g7ICM3MDA5CivngIogPiBww6FuOyAjNzAwQQor54CLID4gc2jElW47ICM3MDBCCivngIwgPiBiacSBbzsgIzcwMEMKK+eAjSA+IGNow6FuOyAjNzAwRAor54COID4gbcOyOyAjNzAwRQor54CPID4gbMOtdTsgIzcwMEYKK+eAkCA+IGppxIFuOyAjNzAxMAor54CRID4gcMO5OyAjNzAxMQor54CSID4gc8OoOyAjNzAxMgor54CTID4gY2jDqW5nOyAjNzAxMwor54CUID4gZ8WtOyAjNzAxNAor54CVID4gYsSrbjsgIzcwMTUKK+eAliA+IGjDuW87ICM3MDE2CivngJcgPiB4acOgbjsgIzcwMTcKK+eAmCA+IGzDujsgIzcwMTgKK+eAmSA+IHHEq247ICM3MDE5CivngJogPiBow6BuOyAjNzAxQQor54CbID4gecOtbmc7ICM3MDFCCivngJwgPiB5xY1uZzsgIzcwMUMKK+eAnSA+IGzDrDsgIzcwMUQKK+eAniA+IGrDrG5nOyAjNzAxRQor54CfID4geGnEgW87ICM3MDFGCivngKAgPiB5w61uZzsgIzcwMjAKK+eAoSA+IHPFrWk7ICM3MDIxCivngKIgPiB3w6lpOyAjNzAyMgor54CjID4geGnDqDsgIzcwMjMKK+eApCA+IGh1w6FpOyAjNzAyNAor54ClID4gaMOgbzsgIzcwMjUKK+eApiA+IHpoxas7ICM3MDI2CivngKcgPiBsw7NuZzsgIzcwMjcKK+eAqCA+IGzDoGk7ICM3MDI4CivngKkgPiBkw7lpOyAjNzAyOQor54CqID4gZsOhbjsgIzcwMkEKK+eAqyA+IGjDujsgIzcwMkIKK+eArCA+IGzDoGk7ICM3MDJDCivngK8gPiB5w61uZzsgIzcwMkYKK+eAsCA+IG3DrTsgIzcwMzAKK+eAsSA+IGrDrDsgIzcwMzEKK+eAsiA+IGxpw6BuOyAjNzAzMgor54CzID4gamnDoG47ICM3MDMzCivngLQgPiB5xK1uZzsgIzcwMzQKK+eAtSA+IGbDqG47ICM3MDM1CivngLYgPiBsw61uOyAjNzAzNgor54C3ID4gecOsOyAjNzAzNwor54C4ID4gamnEgW47ICM3MDM4CivngLkgPiB5dcOoOyAjNzAzOQor54C6ID4gY2jDoW47ICM3MDNBCivngLsgPiBkw6BpOyAjNzAzQgor54C8ID4gcsOhbmc7ICM3MDNDCivngL0gPiBqacSDbjsgIzcwM0QKK+eAviA+IGzDoW47ICM3MDNFCivngL8gPiBmw6FuOyAjNzAzRgor54GAID4gc2h1w6BuZzsgIzcwNDAKK+eBgSA+IHl1xIFuOyAjNzA0MQor54GCID4gemjDum87ICM3MDQyCivngYMgPiBmxJNuZzsgIzcwNDMKK+eBhCA+IHNow6g7ICM3MDQ0CivngYUgPiBsxJVpOyAjNzA0NQor54GGID4gbMOhbjsgIzcwNDYKK+eBhyA+IGPDs25nOyAjNzA0Nwor54GIID4gccO6OyAjNzA0OAor54GJID4gecWNbmc7ICM3MDQ5CivngYogPiBxacOhbjsgIzcwNEEKK+eBiyA+IGbEgzsgIzcwNEIKK+eBjCA+IGd1w6BuOyAjNzA0Qwor54GNID4gcXXDqDsgIzcwNEQKK+eBjiA+IHnDoG47ICM3MDRFCivngY8gPiBow6BvOyAjNzA0Rgor54GRID4gc8SDOyAjNzA1MQor54GSID4gesOgbjsgIzcwNTIKK+eBkyA+IGx1w6FuOyAjNzA1Mwor54GUID4gecOgbjsgIzcwNTQKK+eBlSA+IGzDrTsgIzcwNTUKK+eBliA+IG3ErTsgIzcwNTYKK+eBlyA+IHNow6BuOyAjNzA1Nwor54GYID4gdMSBbjsgIzcwNTgKK+eBmSA+IGTEg25nOyAjNzA1OQor54GaID4gamnEg287ICM3MDVBCivngZsgPiBjaMSDbjsgIzcwNUIKK+eBnSA+IGjDoG87ICM3MDVECivngZ4gPiBiw6A7ICM3MDVFCivngZ8gPiB6aMO6OyAjNzA1Rgor54GgID4gbMSDbjsgIzcwNjAKK+eBoSA+IGzDoW47ICM3MDYxCivngaIgPiBuxINuZzsgIzcwNjIKK+eBoyA+IHfEgW47ICM3MDYzCivngaQgPiBsdcOhbjsgIzcwNjQKK+eBpSA+IHjDum47ICM3MDY1CivngaYgPiB4acSDbjsgIzcwNjYKK+eBpyA+IHnDoG47ICM3MDY3CivngaggPiBnxINuOyAjNzA2OAor54GpID4gecOgbjsgIzcwNjkKK+eBqiA+IHnDuTsgIzcwNkEKK+eBqyA+IGjFrW87ICM3MDZCCivngawgPiBzw6wnICdkacSDbicgJ2jFrW87ICM3MDZDCivnga0gPiBtacOoOyAjNzA2RAor54GuID4gZ3XEgW5nOyAjNzA2RQor54GvID4gZMSTbmc7ICM3MDZGCivngbAgPiBoxatpOyAjNzA3MAor54GxID4geGnEgW87ICM3MDcxCivngbIgPiB4acSBbzsgIzcwNzIKK+eBsyA+IGjFqzE7ICM3MDczCivngbQgPiBow7NuZzsgIzcwNzQKK+eBtSA+IGzDrW5nOyAjNzA3NQor54G2ID4gesOgbzsgIzcwNzYKK+eBtyA+IHpodcOgbjsgIzcwNzcKK+eBuCA+IGrErXU7ICM3MDc4CivngbkgPiB6aMOgOyAjNzA3OQor54G6ID4geGnDqDsgIzcwN0EKK+eBuyA+IGNow6w7ICM3MDdCCivngbwgPiB6aMO6bzsgIzcwN0MKK+eBvSA+IHrEgWk7ICM3MDdECivngb4gPiB6xIFpOyAjNzA3RQor54G/ID4gY8OgbjsgIzcwN0YKK+eCgCA+IHnDoW5nOyAjNzA4MAor54KBID4gccOsOyAjNzA4MQor54KCID4gemjFjW5nOyAjNzA4Mgor54KDID4gZsOpbjsgIzcwODMKK+eChCA+IG7ErXU7ICM3MDg0CivngoUgPiBqxK1vbmc7ICM3MDg1CivngoYgPiB3w6luOyAjNzA4Ngor54KHID4gcMOyOyAjNzA4Nwor54KIID4gecOsOyAjNzA4OAor54KJID4gbMO6OyAjNzA4OQor54KKID4gY2jFq2k7ICM3MDhBCivngosgPiBwxKs7ICM3MDhCCivngowgPiBrw6BpOyAjNzA4Qwor54KNID4gcMOgbjsgIzcwOEQKK+eCjiA+IHnDoW47ICM3MDhFCivngo8gPiBrw6BpOyAjNzA4Rgor54KQID4gcMOgbmc7ICM3MDkwCivngpEgPiBtw7k7ICM3MDkxCivngpIgPiBjaMSDbzsgIzcwOTIKK+eCkyA+IGxpw6BvOyAjNzA5Mwor54KUID4gZ8O5aTsgIzcwOTQKK+eClSA+IGvDoG5nOyAjNzA5NQor54KWID4gdMWrbjsgIzcwOTYKK+eClyA+IGd1xIFuZzsgIzcwOTcKK+eCmCA+IHjEq247ICM3MDk4CivngpkgPiB6aMOsOyAjNzA5OQor54KaID4gZ3Vhbmc7ICM3MDlBCivngpsgPiBndcSBbmc7ICM3MDlCCivngpwgPiB3xJVpOyAjNzA5Qwor54KdID4gcWnDoG5nOyAjNzA5RAor54KfID4gZMOhOyAjNzA5Rgor54KgID4geGnDoTsgIzcwQTAKK+eCoSA+IHpoxJNuZzsgIzcwQTEKK+eCoiA+IHpow7o7ICM3MEEyCivngqMgPiBrxJU7ICM3MEEzCivngqQgPiB6aMOgbzsgIzcwQTQKK+eCpSA+IGbDujsgIzcwQTUKK+eCpiA+IGLDoTsgIzcwQTYKK+eCpyA+IGTDuW87ICM3MEE3CivngqggPiBkw7lvOyAjNzBBOAor54KpID4gbMOsbmc7ICM3MEE5CivngqogPiB6aMO6bzsgIzcwQUEKK+eCqyA+IHh1w6BuOyAjNzBBQgor54KsID4gasO5OyAjNzBBQwor54KtID4gdMOgbjsgIzcwQUQKK+eCriA+IHDDoG87ICM3MEFFCivngq8gPiBqxK1vbmc7ICM3MEFGCivngrAgPiBww6FvOyAjNzBCMAor54KxID4gdMOhaTsgIzcwQjEKK+eCsiA+IHTDoWk7ICM3MEIyCivngrMgPiBixK1uZzsgIzcwQjMKK+eCtCA+IHnEg25nOyAjNzBCNAor54K1ID4gdMWNbmc7ICM3MEI1CivngrYgPiBoxIFuOyAjNzBCNgor54K3ID4gemjDuTsgIzcwQjcKK+eCuCA+IHpow6A7ICM3MEI4CivngrkgPiBkacSDbjsgIzcwQjkKK+eCuiA+IHfDqGk7ICM3MEJBCivngrsgPiBzaMOtOyAjNzBCQgor54K8ID4gbGnDoG47ICM3MEJDCivngr0gPiBjaMOsOyAjNzBCRAor54K+ID4gaHXEg25nOyAjNzBCRQor54OAID4gaMWrOyAjNzBDMAor54OBID4gc2jDuW87ICM3MEMxCivng4IgPiBsw6BuOyAjNzBDMgor54ODID4gasStbmc7ICM3MEMzCivng4QgPiBqacSDbzsgIzcwQzQKK+eDhSA+IHjDuTsgIzcwQzUKK+eDhiA+IHjDrW5nOyAjNzBDNgor54OHID4gcXXDoG47ICM3MEM3Civng4ggPiBsacOoOyAjNzBDOAor54OJID4gaHXDoG47ICM3MEM5Civng4ogPiB5w6FuZzsgIzcwQ0EKK+eDiyA+IHhpxIFvOyAjNzBDQgor54OMID4geMSrdTsgIzcwQ0MKK+eDjSA+IHhpxINuOyAjNzBDRAor54OOID4gecOtbjsgIzcwQ0UKK+eDjyA+IHfFqzsgIzcwQ0YKK+eDkCA+IHpoxY11OyAjNzBEMAor54ORID4gecOhbzsgIzcwRDEKK+eDkiA+IHNow6w7ICM3MEQyCivng5MgPiB3xJNpOyAjNzBEMwor54OUID4gdMOzbmc7ICM3MEQ0Civng5UgPiB4dcOoOyAjNzBENQor54OWID4gesSBaTsgIzcwRDYKK+eDlyA+IGvDoGk7ICM3MEQ3Civng5ggPiBoxY1uZzsgIzcwRDgKK+eDmSA+IGzDuW87ICM3MEQ5Civng5ogPiB4acOhOyAjNzBEQQor54ObID4gemjDujsgIzcwREIKK+eDnCA+IHh1xINuOyAjNzBEQwor54OdID4gemjEk25nOyAjNzBERAor54OeID4gcMOyOyAjNzBERQor54OfID4gecSBbjsgIzcwREYKK+eDoCA+IGjFrWk7ICM3MEUwCivng6EgPiBndcSBbmc7ICM3MEUxCivng6IgPiB6aMOoOyAjNzBFMgor54OjID4gaMWraTsgIzcwRTMKK+eDpCA+IGvEg287ICM3MEU0Civng6YgPiBmw6FuOyAjNzBFNgor54OnID4gc2jEgW87ICM3MEU3Civng6ggPiB5w6g7ICM3MEU4Civng6kgPiBow7lpOyAjNzBFOQor54OrID4gdMOgbmc7ICM3MEVCCivng6wgPiBqw6xuOyAjNzBFQwor54OtID4gcsOoOyAjNzBFRAor54OvID4geMSrOyAjNzBFRgor54OwID4gZsO6OyAjNzBGMAor54OxID4gasStb25nOyAjNzBGMQor54OyID4gY2jDqDsgIzcwRjIKK+eDsyA+IHDFrTsgIzcwRjMKK+eDtCA+IGrErW5nOyAjNzBGNAor54O1ID4gemjDum87ICM3MEY1Civng7YgPiB0xK1uZzsgIzcwRjYKK+eDtyA+IHfDoW47ICM3MEY3Civng7ggPiBoxINpOyAjNzBGOAor54O5ID4gcMSTbmc7ICM3MEY5Civng7ogPiBsxINuZzsgIzcwRkEKK+eDuyA+IHNoxIFuOyAjNzBGQgor54O8ID4gaMWrOyAjNzBGQwor54O9ID4gZsSTbmc7ICM3MEZECivng74gPiBjaMOsOyAjNzBGRQor54O/ID4gcsOzbmc7ICM3MEZGCivnhIAgPiBow7o7ICM3MTAwCivnhIEgPiB4aTsgIzcxMDEKK+eEgiA+IHNow7o7ICM3MTAyCivnhIMgPiBow6g7ICM3MTAzCivnhIQgPiB4xatuOyAjNzEwNAor54SFID4ga8O5OyAjNzEwNQor54SGID4ganXDqTsgIzcxMDYKK+eEhyA+IHhpxIFvOyAjNzEwNwor54SIID4geMSrOyAjNzEwOAor54SJID4gecSBbjsgIzcxMDkKK+eEiiA+IGjDoG47ICM3MTBBCivnhIsgPiB6aHXDoG5nOyAjNzEwQgor54SMID4gasO5bjsgIzcxMEMKK+eEjSA+IGTDrDsgIzcxMEQKK+eEjiA+IHhpw6g7ICM3MTBFCivnhI8gPiBqw607ICM3MTBGCivnhJAgPiB3w7k7ICM3MTEwCivnhJMgPiBow6FuOyAjNzExMwor54SUID4gecOgbjsgIzcxMTQKK+eElSA+IGh1w6BuOyAjNzExNQor54SWID4gbcOobjsgIzcxMTYKK+eElyA+IGrDujsgIzcxMTcKK+eEmCA+IGNow7N1OyAjNzExOAor54SZID4gYsOoaTsgIzcxMTkKK+eEmiA+IGbDqW47ICM3MTFBCivnhJsgPiBsw6xuOyAjNzExQgor54ScID4ga8WrbjsgIzcxMUMKK+eEnSA+IGjDuW47ICM3MTFECivnhJ4gPiB0xatuOyAjNzExRQor54SfID4geMOtOyAjNzExRgor54SgID4gY8O5aTsgIzcxMjAKK+eEoSA+IHfDujsgIzcxMjEKK+eEoiA+IGjFjW5nOyAjNzEyMgor54SjID4gasO5OyAjNzEyMwor54SkID4gZsWtOyAjNzEyNAor54SlID4gd8OyOyAjNzEyNQor54SmID4gamnEgW87ICM3MTI2CivnhKcgPiBjxY1uZzsgIzcxMjcKK+eEqCA+IGbDqG5nOyAjNzEyOAor54SpID4gcMSrbmc7ICM3MTI5CivnhKogPiBxxKtvbmc7ICM3MTJBCivnhKsgPiByw7lvOyAjNzEyQgor54SsID4geMOtOyAjNzEyQwor54StID4gccOtb25nOyAjNzEyRAor54SuID4geMOsbjsgIzcxMkUKK+eEryA+IHpow7pvOyAjNzEyRgor54SwID4gecOgbjsgIzcxMzAKK+eEsSA+IHnDoG47ICM3MTMxCivnhLIgPiB5w6w7ICM3MTMyCivnhLMgPiBqdcOpOyAjNzEzMwor54S0ID4gecO5OyAjNzEzNAor54S1ID4gZ8Ogbmc7ICM3MTM1CivnhLYgPiByw6FuOyAjNzEzNgor54S3ID4gcMOtOyAjNzEzNwor54S4ID4gZ8WtOyAjNzEzOAor54S6ID4gc2jEk25nOyAjNzEzQQor54S7ID4gY2jDoG5nOyAjNzEzQgor54S8ID4gc2jEgW87ICM3MTNDCivnhYEgPiBjaMOpbjsgIzcxNDEKK+eFgiA+IGjDqDsgIzcxNDIKK+eFgyA+IGvFrWk7ICM3MTQzCivnhYQgPiB6aMWNbmc7ICM3MTQ0CivnhYUgPiBkdcOgbjsgIzcxNDUKK+eFhiA+IHhpxIE7ICM3MTQ2CivnhYcgPiBoxatpOyAjNzE0Nwor54WIID4gZsOobmc7ICM3MTQ4CivnhYkgPiBsacOgbjsgIzcxNDkKK+eFiiA+IHh1xIFuOyAjNzE0QQor54WLID4geMSrbmc7ICM3MTRCCivnhYwgPiBodcOhbmc7ICM3MTRDCivnhY0gPiBqacSDbzsgIzcxNEQKK+eFjiA+IGppxIFuOyAjNzE0RQor54WPID4gYsOsOyAjNzE0Rgor54WQID4gecSrbmc7ICM3MTUwCivnhZEgPiB6aMWtOyAjNzE1MQor54WSID4gd8SVaTsgIzcxNTIKK+eFkyA+IHR1xIFuOyAjNzE1Mwor54WUID4gdGnDoG47ICM3MTU0CivnhZUgPiB4xKs7ICM3MTU1CivnhZYgPiBudcSDbjsgIzcxNTYKK+eFlyA+IG51xINuOyAjNzE1Nwor54WYID4gY2jDoW47ICM3MTU4CivnhZkgPiB5xIFuOyAjNzE1OQor54WaID4gasStb25nOyAjNzE1QQor54WbID4gasStb25nOyAjNzE1Qgor54WcID4gecO5OyAjNzE1Qwor54WdID4gbcOoaTsgIzcxNUQKK+eFniA+IHNow6A7ICM3MTVFCivnhZ8gPiB3w6hpOyAjNzE1Rgor54WgID4gecOoOyAjNzE2MAor54WhID4geMOsbjsgIzcxNjEKK+eFoiA+IHHDrW9uZzsgIzcxNjIKK+eFoyA+IHLFj3U7ICM3MTYzCivnhaQgPiBtw6lpOyAjNzE2NAor54WlID4gaHXDoG47ICM3MTY1CivnhaYgPiB4xa07ICM3MTY2CivnhacgPiB6aMOgbzsgIzcxNjcKK+eFqCA+IHfEk2k7ICM3MTY4CivnhakgPiBmw6FuOyAjNzE2OQor54WqID4gccOtdTsgIzcxNkEKK+eFqyA+IHPDuWk7ICM3MTZCCivnhawgPiB5w6FuZzsgIzcxNkMKK+eFrSA+IGxpw6g7ICM3MTZECivnha4gPiB6aMWtOyAjNzE2RQor54WvID4gamllOyAjNzE2Rgor54WwID4gZ8OgbzsgIzcxNzAKK+eFsSA+IGd1xIE7ICM3MTcxCivnhbIgPiBiw6BvOyAjNzE3Mgor54WzID4gaMO6OyAjNzE3Mwor54W0ID4gecWrbjsgIzcxNzQKK+eFtSA+IHhpxIE7ICM3MTc1CivnhbggPiBiacSBbjsgIzcxNzgKK+eFuSA+IGfDsnU7ICM3MTc5CivnhbogPiB0w7lpOyAjNzE3QQor54W7ID4gdMOhbmc7ICM3MTdCCivnhbwgPiBjaMSDbzsgIzcxN0MKK+eFvSA+IHNoxIFuOyAjNzE3RAor54W+ID4gbjsgIzcxN0UKK+eFvyA+IGLDszsgIzcxN0YKK+eGgCA+IGh1xINuZzsgIzcxODAKK+eGgSA+IHhpw6k7ICM3MTgxCivnhoIgPiB4w6w7ICM3MTgyCivnhoMgPiB3w7k7ICM3MTgzCivnhoQgPiB4w607ICM3MTg0CivnhoUgPiB5w7puOyAjNzE4NQor54aGID4gaMOpOyAjNzE4Ngor54aHID4gaMOoOyAjNzE4Nwor54aIID4geMSrOyAjNzE4OAor54aJID4gecO6bjsgIzcxODkKK+eGiiA+IHjDrW9uZzsgIzcxOEEKK+eGiyA+IG7DoWk7ICM3MThCCivnhowgPiBzaMOgbjsgIzcxOEMKK+eGjSA+IHFpb25nOyAjNzE4RAor54aOID4gecOgbzsgIzcxOEUKK+eGjyA+IHjFq247ICM3MThGCivnhpAgPiBtw6w7ICM3MTkwCivnhpEgPiBsacOhbjsgIzcxOTEKK+eGkiA+IHnDrW5nOyAjNzE5Mgor54aTID4gd8OobjsgIzcxOTMKK+eGlCA+IHLDs25nOyAjNzE5NAor54aXID4gcWnDoG5nOyAjNzE5Nwor54aYID4gbMSrdTsgIzcxOTgKK+eGmSA+IHjEqzsgIzcxOTkKK+eGmiA+IGLDrDsgIzcxOUEKK+eGmyA+IGJpxIFvOyAjNzE5Qgor54acID4gesWPbmc7ICM3MTlDCivnhp0gPiBsw7k7ICM3MTlECivnhp4gPiBqacSBbjsgIzcxOUUKK+eGnyA+IHNow7N1OyAjNzE5Rgor54agID4gecOsOyAjNzFBMAor54ahID4gbMOzdTsgIzcxQTEKK+eGoiA+IGbEk25nOyAjNzFBMgor54ajID4gc8WraTsgIzcxQTMKK+eGpCA+IHnDrDsgIzcxQTQKK+eGpSA+IHTFjW5nOyAjNzFBNQor54amID4ganXDqTsgIzcxQTYKK+eGpyA+IHrFjW5nOyAjNzFBNwor54aoID4gecO5bjsgIzcxQTgKK+eGqSA+IGjDuTsgIzcxQTkKK+eGqiA+IHnDrTsgIzcxQUEKK+eGqyA+IHpow6w7ICM3MUFCCivnhqwgPiDDoW87ICM3MUFDCivnhq0gPiB3w6hpOyAjNzFBRAor54auID4gbGnDoW87ICM3MUFFCivnhq8gPiBow6BuOyAjNzFBRgor54awID4gxY11OyAjNzFCMAor54axID4gcsOoOyAjNzFCMQor54ayID4gasStb25nOyAjNzFCMgor54azID4gbcOgbjsgIzcxQjMKK+eGtSA+IHNoxIFuZzsgIzcxQjUKK+eGtiA+IGN1w6BuOyAjNzFCNgor54a3ID4gesSTbmc7ICM3MUI3CivnhrggPiBqacSBbjsgIzcxQjgKK+eGuSA+IHjEqzsgIzcxQjkKK+eGuiA+IHjEqzsgIzcxQkEKK+eGuyA+IHjEqzsgIzcxQkIKK+eGvCA+IHnDrDsgIzcxQkMKK+eGvSA+IHhpw6BvOyAjNzFCRAor54a+ID4gY2jDrDsgIzcxQkUKK+eGvyA+IGh1w6FuZzsgIzcxQkYKK+eHgCA+IGNoxINuOyAjNzFDMAor54eBID4gecOoOyAjNzFDMQor54eCID4gcWnDoW47ICM3MUMyCivnh4MgPiByw6FuOyAjNzFDMwor54eEID4gecOgbjsgIzcxQzQKK+eHhSA+IHhpw6FuOyAjNzFDNQor54eGID4gcWnDoW87ICM3MUM2Civnh4cgPiB6w7luOyAjNzFDNwor54eIID4gZMSTbmc7ICM3MUM4Civnh4kgPiBkw7luOyAjNzFDOQor54eKID4gc2jEk247ICM3MUNBCivnh4sgPiBqacSBbzsgIzcxQ0IKK+eHjCA+IGbDqW47ICM3MUNDCivnh40gPiBzxKs7ICM3MUNECivnh44gPiBsacOgbzsgIzcxQ0UKK+eHjyA+IHnDuTsgIzcxQ0YKK+eHkCA+IGzDrW47ICM3MUQwCivnh5EgPiB0w7NuZzsgIzcxRDEKK+eHkiA+IHNoxIFvOyAjNzFEMgor54eTID4gZsSTbjsgIzcxRDMKK+eHlCA+IGbDoW47ICM3MUQ0Civnh5UgPiB5w6BuOyAjNzFENQor54eWID4geMO6bjsgIzcxRDYKK+eHlyA+IGzDoG47ICM3MUQ3Civnh5ggPiBtxJVpOyAjNzFEOAor54eZID4gdMOgbmc7ICM3MUQ5Civnh5ogPiB5xKs7ICM3MURBCivnh5sgPiBqxK1uZzsgIzcxREIKK+eHnCA+IG3DqG47ICM3MURDCivnh58gPiB5w61uZzsgIzcxREYKK+eHoCA+IHnDuTsgIzcxRTAKK+eHoSA+IHnDrDsgIzcxRTEKK+eHoiA+IHh1w6k7ICM3MUUyCivnh6MgPiBsw6FuOyAjNzFFMwor54ekID4gdMOgaTsgIzcxRTQKK+eHpSA+IHrDoG87ICM3MUU1Civnh6YgPiBjw6BuOyAjNzFFNgor54enID4gc8O5aTsgIzcxRTcKK+eHqCA+IHjEqzsgIzcxRTgKK+eHqSA+IHF1w6g7ICM3MUU5Civnh6ogPiBjxY1uZzsgIzcxRUEKK+eHqyA+IGxpw6FuOyAjNzFFQgor54esID4gaMWtaTsgIzcxRUMKK+eHrSA+IHpow7o7ICM3MUVECivnh64gPiB4acOoOyAjNzFFRQor54evID4gbMOtbmc7ICM3MUVGCivnh7AgPiB3xJNpOyAjNzFGMAor54exID4gecOsOyAjNzFGMQor54eyID4geGnDqTsgIzcxRjIKK+eHsyA+IHpow6BvOyAjNzFGMwor54e0ID4gaMO5aTsgIzcxRjQKK+eHtyA+IGzDoW47ICM3MUY3Civnh7ggPiByw7o7ICM3MUY4Civnh7kgPiB4acSDbjsgIzcxRjkKK+eHuiA+IGvEg287ICM3MUZBCivnh7sgPiB4xatuOyAjNzFGQgor54e8ID4gasOsbjsgIzcxRkMKK+eHvSA+IGNow7N1OyAjNzFGRAor54e+ID4gY2jDs3U7ICM3MUZFCivnh78gPiB5w6BvOyAjNzFGRgor54iAID4gaMOoOyAjNzIwMAor54iBID4gbMOgbjsgIzcyMDEKK+eIgiA+IGJpxIFvOyAjNzIwMgor54iDID4gcsOzbmc7ICM3MjAzCivniIQgPiBsw6w7ICM3MjA0CivniIUgPiBtw7I7ICM3MjA1CivniIYgPiBiw6BvOyAjNzIwNgor54iHID4gcsO5bzsgIzcyMDcKK+eIiCA+IGzHmDsgIzcyMDgKK+eIiSA+IGzDoDsgIzcyMDkKK+eIiiA+IMOhbzsgIzcyMEEKK+eIiyA+IHjDuW47ICM3MjBCCivniIwgPiBrdcOgbmc7ICM3MjBDCivniI0gPiBzaMO5bzsgIzcyMEQKK+eIjyA+IGzDrDsgIzcyMEYKK+eIkCA+IGzDujsgIzcyMTAKK+eIkSA+IGp1w6k7ICM3MjExCivniJIgPiBsacOgbzsgIzcyMTIKK+eIkyA+IHnDoG47ICM3MjEzCivniJQgPiB4xKs7ICM3MjE0CivniJUgPiB4acOoOyAjNzIxNQor54iWID4gbMOzbmc7ICM3MjE2CivniJcgPiB5w6g7ICM3MjE3CivniJkgPiByxINuZzsgIzcyMTkKK+eImiA+IHl1w6g7ICM3MjFBCivniJsgPiBsw6BuOyAjNzIxQgor54icID4gY8Ozbmc7ICM3MjFDCivniJ0gPiBqdcOpOyAjNzIxRAor54ieID4gdMOzbmc7ICM3MjFFCivniJ8gPiBndcOgbjsgIzcyMUYKK+eIoSA+IGNow6g7ICM3MjIxCivniKIgPiBtw607ICM3MjIyCivniKMgPiB0xINuZzsgIzcyMjMKK+eIpCA+IGzDoG47ICM3MjI0CivniKUgPiB6aMO6OyAjNzIyNQor54inID4gbMOtbmc7ICM3MjI3CivniKggPiBjdcOgbjsgIzcyMjgKK+eIqSA+IHnDuTsgIzcyMjkKK+eIqiA+IHpodcSDOyAjNzIyQQor54isID4gcMOhOyAjNzIyQwor54itID4gemjEk25nOyAjNzIyRAor54iuID4gcMOhbzsgIzcyMkUKK+eIryA+IGNoxJNuZzsgIzcyMkYKK+eIsCA+IHl1w6FuOyAjNzIzMAor54ixID4gw6BpOyAjNzIzMQor54iyID4gd8OoaTsgIzcyMzIKK+eItCA+IGp1w6k7ICM3MjM0CivniLUgPiBqdcOpOyAjNzIzNQor54i2ID4gZsO5OyAjNzIzNgor54i3ID4gecOpOyAjNzIzNwor54i4ID4gYsOgOyAjNzIzOAor54i5ID4gZGnEkzsgIzcyMzkKK+eIuiA+IHnDqTsgIzcyM0EKK+eIuyA+IHnDoW87ICM3MjNCCivniLwgPiB6xa07ICM3MjNDCivniL0gPiBzaHXEg25nOyAjNzIzRAor54i+ID4gxJVyOyAjNzIzRQor54i/ID4gcWnDoW5nOyAjNzIzRgor54mAID4gY2h1w6FuZzsgIzcyNDAKK+eJgSA+IGfEkzsgIzcyNDEKK+eJgiA+IHrEgW5nOyAjNzI0Mgor54mDID4gZGnDqTsgIzcyNDMKK+eJhCA+IHFpxIFuZzsgIzcyNDQKK+eJhSA+IHnDs25nOyAjNzI0NQor54mGID4gcWnDoW5nOyAjNzI0Ngor54mHID4gcGnDoG47ICM3MjQ3CivniYggPiBixINuOyAjNzI0OAor54mJID4gcMOgbjsgIzcyNDkKK+eJiiA+IHNow6FvOyAjNzI0QQor54mLID4gamnEgW47ICM3MjRCCivniYwgPiBww6FpOyAjNzI0Qwor54mNID4gZMO6OyAjNzI0RAor54mOID4gY2h1xIFuZzsgIzcyNEUKK+eJjyA+IHTDs3U7ICM3MjRGCivniZAgPiB6aMOhOyAjNzI1MAor54mRID4gYmnEgW47ICM3MjUxCivniZIgPiBkacOpOyAjNzI1Mgor54mTID4gYsSDbmc7ICM3MjUzCivniZQgPiBiw7M7ICM3MjU0CivniZUgPiBjaHXEgW5nOyAjNzI1NQor54mWID4gecWPdTsgIzcyNTYKK+eJmCA+IGTDujsgIzcyNTgKK+eJmSA+IHnDoTsgIzcyNTkKK+eJmiA+IGNow6huZzsgIzcyNUEKK+eJmyA+IG7DrXU7ICM3MjVCCivniZ0gPiBww6xuOyAjNzI1RAor54meID4gasSrdTsgIzcyNUUKK+eJnyA+IG3Ds3U7ICM3MjVGCivniaAgPiB0xatvOyAjNzI2MAor54mhID4gbcWtOyAjNzI2MQor54miID4gbMOhbzsgIzcyNjIKK+eJoyA+IHLDqG47ICM3MjYzCivniaQgPiBtw6FuZzsgIzcyNjQKK+eJpSA+IGbEgW5nOyAjNzI2NQor54mmID4gbcOhbzsgIzcyNjYKK+eJpyA+IG3DuTsgIzcyNjcKK+eJqCA+IGfEgW5nOyAjNzI2OAor54mpID4gd8O5OyAjNzI2OQor54mqID4gecOgbjsgIzcyNkEKK+eJqyA+IGfEkzsgIzcyNkIKK+eJrCA+IGLDqGk7ICM3MjZDCivnia0gPiBzw6w7ICM3MjZECivnia4gPiBqacOgbjsgIzcyNkUKK+eJryA+IGfFrTsgIzcyNkYKK+eJsCA+IHnDsnU7ICM3MjcwCivnibEgPiBnxJM7ICM3MjcxCivnibIgPiBzaMSTbmc7ICM3MjcyCivnibMgPiBtxa07ICM3MjczCivnibQgPiBkxK07ICM3Mjc0CivnibUgPiBxacSBbjsgIzcyNzUKK+eJtiA+IHF1w6BuOyAjNzI3Ngor54m3ID4gcXXDoW47ICM3Mjc3CivnibggPiB6w6w7ICM3Mjc4CivnibkgPiB0w6g7ICM3Mjc5CivnibogPiB4xKs7ICM3MjdBCivnibsgPiBtw6FuZzsgIzcyN0IKK+eJvCA+IGvEk25nOyAjNzI3Qwor54m9ID4gcWnEgW47ICM3MjdECivnib4gPiB3w7o7ICM3MjdFCivnib8gPiBnw7k7ICM3MjdGCivnioAgPiB4xKs7ICM3MjgwCivnioEgPiBsw607ICM3MjgxCivnioIgPiBsw607ICM3MjgyCivnioMgPiBwxY91OyAjNzI4Mwor54qEID4gasSrOyAjNzI4NAor54qFID4gZ8SBbmc7ICM3Mjg1CivnioYgPiB6aMOtOyAjNzI4Ngor54qHID4gYsSTbjsgIzcyODcKK+eKiCA+IHF1w6FuOyAjNzI4OAor54qJID4gcsO6bjsgIzcyODkKK+eKiiA+IGTDujsgIzcyOEEKK+eKiyA+IGrDuTsgIzcyOEIKK+eKjCA+IGppxIE7ICM3MjhDCivnio0gPiBqacSBbjsgIzcyOEQKK+eKjiA+IGbEk25nOyAjNzI4RQor54qPID4gcGnEgW47ICM3MjhGCivnipAgPiBrxJM7ICM3MjkwCivnipEgPiBqw7o7ICM3MjkxCivnipIgPiBrw6BvOyAjNzI5Mgor54qTID4gY2jDujsgIzcyOTMKK+eKlCA+IHjDrDsgIzcyOTQKK+eKlSA+IGLDqGk7ICM3Mjk1CivnipYgPiBsw7lvOyAjNzI5Ngor54qXID4gamnDqDsgIzcyOTcKK+eKmCA+IG3DoTsgIzcyOTgKK+eKmSA+IHPEgW47ICM3Mjk5CivnipogPiB3w6hpOyAjNzI5QQor54qbID4gbMOtOyAjNzI5Qgor54qcID4gZMWrbjsgIzcyOUMKK+eKnSA+IHTDs25nOyAjNzI5RAor54qfID4gamnDoG5nOyAjNzI5Rgor54qhID4gbMOsOyAjNzJBMQor54qiID4gZMO6OyAjNzJBMgor54qjID4gbGnDqDsgIzcyQTMKK+eKpCA+IHDDrTsgIzcyQTQKK+eKpSA+IHBpxINvOyAjNzJBNQor54qmID4gYsOgbzsgIzcyQTYKK+eKpyA+IHjEqzsgIzcyQTcKK+eKqCA+IGNoxY11OyAjNzJBOAor54qpID4gd8OoaTsgIzcyQTkKK+eKqiA+IGvDumk7ICM3MkFBCivniqsgPiBjaMWNdTsgIzcyQUIKK+eKrCA+IHF1xINuOyAjNzJBQwor54qtID4gZsSDbicgJ3F1xINuJyAncMOhbmc7ICM3MkFECivniq4gPiBiw6E7ICM3MkFFCivniq8gPiBmw6BuOyAjNzJBRgor54qwID4gccOtdTsgIzcyQjAKK+eKsSA+IGrErTsgIzcyQjEKK+eKsiA+IGPDoWk7ICM3MkIyCivnirMgPiBjaMO6bzsgIzcyQjMKK+eKtCA+IMOgbjsgIzcyQjQKK+eKtSA+IGppw6k7ICM3MkI1CivnirYgPiB6aHXDoG5nOyAjNzJCNgor54q3ID4gZ3XEg25nOyAjNzJCNwor54q4ID4gbcOgOyAjNzJCOAor54q5ID4gecOzdTsgIzcyQjkKK+eKuiA+IGvDoG5nOyAjNzJCQQor54q7ID4gYsOzOyAjNzJCQgor54q8ID4gaMWPdTsgIzcyQkMKK+eKvSA+IHnDoTsgIzcyQkQKK+eKviA+IHnDrW47ICM3MkJFCivnir8gPiBodcSBbjsgIzcyQkYKK+eLgCA+IHpodcOgbmc7ICM3MkMwCivni4EgPiB5xa1uOyAjNzJDMQor54uCID4ga3XDoW5nOyAjNzJDMgor54uDID4gbsStdTsgIzcyQzMKK+eLhCA+IGTDrTsgIzcyQzQKK+eLhSA+IHHEq25nOyAjNzJDNQor54uGID4gemjDsm5nOyAjNzJDNgor54uHID4gbcO5OyAjNzJDNwor54uIID4gYsOoaTsgIzcyQzgKK+eLiSA+IHDEqzsgIzcyQzkKK+eLiiA+IGrDujsgIzcyQ0EKK+eLiyA+IG7DrTsgIzcyQ0IKK+eLjCA+IHNoxJNuZzsgIzcyQ0MKK+eLjSA+IHDDoW87ICM3MkNECivni44gPiB4acOhOyAjNzJDRQor54uPID4gdMO6bzsgIzcyQ0YKK+eLkCA+IGjDujsgIzcyRDAKK+eLkSA+IGzDrW5nOyAjNzJEMQor54uSID4gZsOoaTsgIzcyRDIKK+eLkyA+IHDEqzsgIzcyRDMKK+eLlCA+IG7ErTsgIzcyRDQKK+eLlSA+IMSDbzsgIzcyRDUKK+eLliA+IHnDsnU7ICM3MkQ2Civni5cgPiBnxY91OyAjNzJENwor54uYID4geXXDqDsgIzcyRDgKK+eLmSA+IGrFqzsgIzcyRDkKK+eLmiA+IGTDoG47ICM3MkRBCivni5sgPiBww7I7ICM3MkRCCivni5wgPiBnxa07ICM3MkRDCivni50gPiB4acSDbjsgIzcyREQKK+eLniA+IG7DrW5nOyAjNzJERQor54ufID4gaHXDoW47ICM3MkRGCivni6AgPiBoxJVuOyAjNzJFMAor54uhID4gamnEg287ICM3MkUxCivni6IgPiBow6k7ICM3MkUyCivni6MgPiB6aMOgbzsgIzcyRTMKK+eLpCA+IGrDrTsgIzcyRTQKK+eLpSA+IHjDuW47ICM3MkU1Civni6YgPiBzaMSBbjsgIzcyRTYKK+eLpyA+IHTDoDsgIzcyRTcKK+eLqCA+IHLDs25nOyAjNzJFOAor54upID4gc2jDsnU7ICM3MkU5Civni6ogPiB0xY1uZzsgIzcyRUEKK+eLqyA+IGzEg287ICM3MkVCCivni6wgPiBkw7o7ICM3MkVDCivni60gPiB4acOhOyAjNzJFRAor54uuID4gc2jEqzsgIzcyRUUKK+eLryA+IGh1w6E7ICM3MkVGCivni7AgPiB6aMSTbmc7ICM3MkYwCivni7EgPiB5w7k7ICM3MkYxCivni7IgPiBzxatuOyAjNzJGMgor54uzID4gecO6OyAjNzJGMwor54u0ID4gYsOsOyAjNzJGNAor54u1ID4gbcOhbmc7ICM3MkY1Civni7YgPiB4xK07ICM3MkY2Civni7cgPiBqdcOgbjsgIzcyRjcKK+eLuCA+IGzDrTsgIzcyRjgKK+eLuSA+IHhpw6E7ICM3MkY5Civni7ogPiB5w61uOyAjNzJGQQor54u7ID4gc3XEgW47ICM3MkZCCivni7wgPiBsw6FuZzsgIzcyRkMKK+eLvSA+IGLDqGk7ICM3MkZECivni74gPiB6aMOsOyAjNzJGRQor54u/ID4gecOhbjsgIzcyRkYKK+eMgCA+IHNoxIE7ICM3MzAwCivnjIEgPiBsw6w7ICM3MzAxCivnjIIgPiBow6BuOyAjNzMwMgor54yDID4geGnEg247ICM3MzAzCivnjIQgPiBqxKtuZzsgIzczMDQKK+eMhSA+IHDDoWk7ICM3MzA1CivnjIYgPiBmxJNpOyAjNzMwNgor54yHID4gecOhbzsgIzczMDcKK+eMiCA+IGLDoDsgIzczMDgKK+eMiSA+IHHDrTsgIzczMDkKK+eMiiA+IG7DrTsgIzczMEEKK+eMiyA+IGJpxIFvOyAjNzMwQgor54yMID4gecOsbjsgIzczMEMKK+eMjSA+IGzDoWk7ICM3MzBECivnjI4gPiB4w607ICM3MzBFCivnjI8gPiBqacSBbjsgIzczMEYKK+eMkCA+IHFpxIFuZzsgIzczMTAKK+eMkSA+IGvFq247ICM3MzExCivnjJIgPiB5xIFuOyAjNzMxMgor54yTID4gZ8WtbzsgIzczMTMKK+eMlCA+IHrDsm5nOyAjNzMxNAor54yVID4gbcOtOyAjNzMxNQor54yWID4gY2jEgW5nOyAjNzMxNgor54yXID4gecSrOyAjNzMxNwor54yYID4gemjDrDsgIzczMTgKK+eMmSA+IHpoxJNuZzsgIzczMTkKK+eMmiA+IHnDoTsgIzczMUEKK+eMmyA+IG3ElW5nOyAjNzMxQgor54ycID4gY8SBaTsgIzczMUMKK+eMnSA+IGPDuTsgIzczMUQKK+eMniA+IHNow6g7ICM3MzFFCivnjKEgPiBsw7pvOyAjNzMyMQor54yiID4gaMO6OyAjNzMyMgor54yjID4gesWNbmc7ICM3MzIzCivnjKQgPiBqw6w7ICM3MzI0CivnjKUgPiB3xJVpOyAjNzMyNQor54ymID4gZsSTbmc7ICM3MzI2CivnjKcgPiB3xY07ICM3MzI3CivnjKggPiB5dcOhbjsgIzczMjgKK+eMqSA+IHjEq25nOyAjNzMyOQor54yqID4gemjFqzsgIzczMkEKK+eMqyA+IG3EgW87ICM3MzJCCivnjKwgPiB3w6hpOyAjNzMyQwor54ytID4geXXDoW47ICM3MzJECivnjK4gPiB4acOgbjsgIzczMkUKK+eMryA+IHR1xIFuOyAjNzMyRgor54ywID4gecOgOyAjNzMzMAor54yxID4gbsOhbzsgIzczMzEKK+eMsiA+IHhpxJM7ICM3MzMyCivnjLMgPiBqacSBOyAjNzMzMwor54y0ID4gaMOzdTsgIzczMzQKK+eMtSA+IGJpxIFuOyAjNzMzNQor54y2ID4gecOzdTsgIzczMzYKK+eMtyA+IHnDs3U7ICM3MzM3CivnjLggPiBtw6lpOyAjNzMzOAor54y5ID4gemjEgTsgIzczMzkKK+eMuiA+IHnDoW87ICM3MzNBCivnjLsgPiBzxatuOyAjNzMzQgor54y8ID4gYsOzOyAjNzMzQwor54y9ID4gbcOtbmc7ICM3MzNECivnjL4gPiBodcOhOyAjNzMzRQor54y/ID4geXXDoW47ICM3MzNGCivnjYAgPiBzxY11OyAjNzM0MAor542BID4gbcOgOyAjNzM0MQor542CID4geXXDoW47ICM3MzQyCivnjYMgPiBkxIFpOyAjNzM0Mwor542EID4gecO5OyAjNzM0NAor542FID4gc2jEqzsgIzczNDUKK+eNhiA+IGjDoW87ICM3MzQ2CivnjYggPiB5w6w7ICM3MzQ4CivnjYkgPiB6aMSTbjsgIzczNDkKK+eNiiA+IGNodcOgbmc7ICM3MzRBCivnjYsgPiBow6FvOyAjNzM0Qgor542MID4gbcOgbjsgIzczNEMKK+eNjSA+IGrDrG5nOyAjNzM0RAor542OID4gamnEg25nOyAjNzM0RQor542PID4gbcO6OyAjNzM0Rgor542QID4gemjEgW5nOyAjNzM1MAor542RID4gY2jDoW47ICM3MzUxCivnjZIgPiDDoW87ICM3MzUyCivnjZMgPiDDoW87ICM3MzUzCivnjZQgPiBow6FvOyAjNzM1NAor542VID4gY8WraTsgIzczNTUKK+eNliA+IGbDqW47ICM3MzU2CivnjZcgPiBqdcOpOyAjNzM1Nwor542YID4gYsOsOyAjNzM1OAor542ZID4gYsOsOyAjNzM1OQor542aID4gaHXDoW5nOyAjNzM1QQor542bID4gcMO6OyAjNzM1Qgor542cID4gbMOtbjsgIzczNUMKK+eNnSA+IHnDuTsgIzczNUQKK+eNniA+IHTDs25nOyAjNzM1RQor542fID4gecOgbzsgIzczNUYKK+eNoCA+IGxpw6FvOyAjNzM2MAor542hID4gc2jDuW87ICM3MzYxCivnjaIgPiB4acSBbzsgIzczNjIKK+eNpSA+IHjDrTsgIzczNjUKK+eNpiA+IGfDqTsgIzczNjYKK+eNpyA+IGp1w6BuOyAjNzM2Nwor542oID4gZMO6OyAjNzM2OAor542pID4gaMO5aTsgIzczNjkKK+eNqiA+IGt1w6BpOyAjNzM2QQor542rID4geGnEg247ICM3MzZCCivnjawgPiB4acOoOyAjNzM2Qwor542tID4gdMOgOyAjNzM2RAor542uID4geGnEg247ICM3MzZFCivnja8gPiB4xatuOyAjNzM2Rgor542wID4gbsOtbmc7ICM3MzcwCivnjbEgPiBww61uOyAjNzM3MQor542yID4gaMO5bzsgIzczNzIKK+eNsyA+IG7DsnU7ICM3MzczCivnjbQgPiBtw6luZzsgIzczNzQKK+eNtSA+IGxpw6g7ICM3Mzc1CivnjbYgPiBuw6FvOyAjNzM3Ngor5423ID4gZ3XEg25nOyAjNzM3Nwor5424ID4gc2jDsnU7ICM3Mzc4CivnjbkgPiBsw7o7ICM3Mzc5CivnjbogPiB0w6A7ICM3MzdBCivnjbsgPiB4acOgbjsgIzczN0IKK+eNvCA+IG3DrTsgIzczN0MKK+eNvSA+IHLDoW5nOyAjNzM3RAor542+ID4gaHXEgW47ICM3MzdFCivnjb8gPiBuw6FvOyAjNzM3Rgor546AID4gbMO6bzsgIzczODAKK+eOgSA+IHhpxINuOyAjNzM4MQor546CID4gccOtOyAjNzM4Mgor546DID4ganXDqTsgIzczODMKK+eOhCA+IHh1w6FuOyAjNzM4NAor546FID4gbWnDoG87ICM3Mzg1CivnjoYgPiB6xKs7ICM3Mzg2CivnjocgPiBsx5w7ICM3Mzg3CivnjoggPiBsw7o7ICM3Mzg4CivnjokgPiB5w7k7ICM3Mzg5CivnjoogPiBzw7k7ICM3MzhBCivnjosgPiB3w6FuZzsgIzczOEIKK+eOjCA+IHHDrXU7ICM3MzhDCivnjo0gPiBnxIM7ICM3MzhECivnjo4gPiBkxKtuZzsgIzczOEUKK+eOjyA+IGzDqDsgIzczOEYKK+eOkCA+IGLEgTsgIzczOTAKK+eOkSA+IGrEqzsgIzczOTEKK+eOkiA+IGjDs25nOyAjNzM5Mgor546TID4gZMOsOyAjNzM5Mwor546UID4gcXXDoG47ICM3Mzk0CivnjpUgPiBnxIFuOyAjNzM5NQor546WID4gasStdTsgIzczOTYKK+eOlyA+IHnDujsgIzczOTcKK+eOmCA+IGrErTsgIzczOTgKK+eOmSA+IHnDujsgIzczOTkKK+eOmiA+IHnDoW5nOyAjNzM5QQor546bID4gbcSDOyAjNzM5Qgor546cID4gZ8WNbmc7ICM3MzlDCivnjp0gPiB3xa07ICM3MzlECivnjp4gPiBmxas7ICM3MzlFCivnjp8gPiB3w6luOyAjNzM5Rgor546gID4gamnDqDsgIzczQTAKK+eOoSA+IHnDoDsgIzczQTEKK+eOoiA+IGbDqW47ICM3M0EyCivnjqMgPiBiacOgbjsgIzczQTMKK+eOpCA+IGLElW5nOyAjNzNBNAor546lID4geXXDqDsgIzczQTUKK+eOpiA+IGp1w6k7ICM3M0E2CivnjqcgPiB5xa1uOyAjNzNBNwor546oID4ganXDqTsgIzczQTgKK+eOqSA+IHfDoW47ICM3M0E5CivnjqogPiBqacSBbjsgIzczQUEKK+eOqyA+IG3DqWk7ICM3M0FCCivnjqwgPiBkxINuOyAjNzNBQwor546tID4gcMOtOyAjNzNBRAor546uID4gd8SVaTsgIzczQUUKK+eOryA+IGh1w6FuOyAjNzNBRgor546wID4geGnDoG47ICM3M0IwCivnjrEgPiBxacSBbmc7ICM3M0IxCivnjrIgPiBsw61uZzsgIzczQjIKK+eOsyA+IGTDoGk7ICM3M0IzCivnjrQgPiB5w6w7ICM3M0I0CivnjrUgPiDDoW47ICM3M0I1CivnjrYgPiBww61uZzsgIzczQjYKK+eOtyA+IGRpw6BuOyAjNzNCNwor5464ID4gZsO6OyAjNzNCOAor5465ID4geHXDoW47ICM3M0I5CivnjrogPiB4xK07ICM3M0JBCivnjrsgPiBixY07ICM3M0JCCivnjrwgPiBjxK07ICM3M0JDCivnjr0gPiBnxY91OyAjNzNCRAor546+ID4gamnEgzsgIzczQkUKK+eOvyA+IHNow6FvOyAjNzNCRgor54+AID4gcMOyOyAjNzNDMAor54+BID4gY8OtOyAjNzNDMQor54+CID4ga8STOyAjNzNDMgor54+DID4gcsSDbjsgIzczQzMKK+ePhCA+IHNoxJNuZzsgIzczQzQKK+ePhSA+IHNoxJNuOyAjNzNDNQor54+GID4gecOtOyAjNzNDNgor54+HID4gesWtOyAjNzNDNwor54+IID4gamnEgTsgIzczQzgKK+ePiSA+IG3DrW47ICM3M0M5Civnj4ogPiBzaMSBbjsgIzczQ0EKK+ePiyA+IGzErXU7ICM3M0NCCivnj4wgPiBiw6w7ICM3M0NDCivnj40gPiB6aMSTbjsgIzczQ0QKK+ePjiA+IHpoxJNuOyAjNzNDRQor54+PID4ganXDqTsgIzczQ0YKK+ePkCA+IGbDoDsgIzczRDAKK+ePkSA+IGzDs25nOyAjNzNEMQor54+SID4gasSrbjsgIzczRDIKK+ePkyA+IGppw6BvOyAjNzNEMwor54+UID4gamnDoG47ICM3M0Q0Civnj5UgPiBsw6w7ICM3M0Q1Civnj5YgPiBndcSBbmc7ICM3M0Q2Civnj5cgPiB4acSBbjsgIzczRDcKK+ePmCA+IHpoxY11OyAjNzNEOAor54+ZID4gZ8WPbmc7ICM3M0Q5Civnj5ogPiB5xIFuOyAjNzNEQQor54+bID4geMOsdTsgIzczREIKK+ePnCA+IHnDoW5nOyAjNzNEQwor54+dID4geMWtOyAjNzNERAor54+eID4gbMO5bzsgIzczREUKK+ePnyA+IHPDuTsgIzczREYKK+ePoCA+IHpoxas7ICM3M0UwCivnj6EgPiBxw61uOyAjNzNFMQor54+iID4ga8OobjsgIzczRTIKK+ePoyA+IHjDum47ICM3M0UzCivnj6QgPiBixINvOyAjNzNFNAor54+lID4gxJVyOyAjNzNFNQor54+mID4geGnDoG5nOyAjNzNFNgor54+nID4gecOhbzsgIzczRTcKK+ePqCA+IHhpw6E7ICM3M0U4Civnj6kgPiBow6luZzsgIzczRTkKK+ePqiA+IGfFq2k7ICM3M0VBCivnj6sgPiBjaMWNbmc7ICM3M0VCCivnj6wgPiB4w7k7ICM3M0VDCivnj60gPiBixIFuOyAjNzNFRAor54+uID4gcMOoaTsgIzczRUUKK+ePsCA+IGTEgW5nOyAjNzNGMAor54+yID4gaMO6bjsgIzczRjIKK+ePsyA+IHfDqW47ICM3M0YzCivnj7QgPiDDqTsgIzczRjQKK+ePtSA+IGNow6luZzsgIzczRjUKK+ePtiA+IHTDrTsgIzczRjYKK+ePtyA+IHfFrTsgIzczRjcKK+ePuCA+IHfDujsgIzczRjgKK+ePuSA+IGNow6luZzsgIzczRjkKK+ePuiA+IGrDuW47ICM3M0ZBCivnj7sgPiBtw6lpOyAjNzNGQgor54+8ID4gYsOoaTsgIzczRkMKK+ePvSA+IHTErW5nOyAjNzNGRAor54++ID4geGnDoG47ICM3M0ZFCivnj78gPiBjaMO5bzsgIzczRkYKK+eQgCA+IGjDoW47ICM3NDAwCivnkIEgPiB4dWFuOyAjNzQwMQor55CCID4gecOhbjsgIzc0MDIKK+eQgyA+IHHDrXU7ICM3NDAzCivnkIQgPiBxdcSDbjsgIzc0MDQKK+eQhSA+IGzDoW5nOyAjNzQwNQor55CGID4gbMStOyAjNzQwNgor55CHID4geMOsdTsgIzc0MDcKK+eQiCA+IGbDujsgIzc0MDgKK+eQiSA+IGzDrXU7ICM3NDA5CivnkIogPiB5w6k7ICM3NDBBCivnkIsgPiB4xKs7ICM3NDBCCivnkIwgPiBsw61uZzsgIzc0MEMKK+eQjSA+IGzDrDsgIzc0MEQKK+eQjiA+IGrDrG47ICM3NDBFCivnkI8gPiBsacOhbjsgIzc0MEYKK+eQkCA+IHPFrW87ICM3NDEwCivnkJMgPiB3w6FuOyAjNzQxMwor55CUID4gZGnDoG47ICM3NDE0CivnkJUgPiBww61uOyAjNzQxNQor55CWID4gemjEg247ICM3NDE2CivnkJcgPiBjw7lpOyAjNzQxNwor55CYID4gbcOtbjsgIzc0MTgKK+eQmSA+IHnDuTsgIzc0MTkKK+eQmiA+IGrFqzsgIzc0MUEKK+eQmyA+IGNoxJNuOyAjNzQxQgor55CcID4gbMOhaTsgIzc0MUMKK+eQnSA+IHfDqW47ICM3NDFECivnkJ4gPiBzaMOobmc7ICM3NDFFCivnkJ8gPiB3w6lpOyAjNzQxRgor55CgID4gZGnEg247ICM3NDIwCivnkKEgPiBjaMO5OyAjNzQyMQor55CiID4gemjDum87ICM3NDIyCivnkKMgPiBwxJVpOyAjNzQyMwor55CkID4gY2jEk25nOyAjNzQyNAor55ClID4gaMWtOyAjNzQyNQor55CmID4gccOtOyAjNzQyNgor55CnID4gw6g7ICM3NDI3CivnkKggPiBrxatuOyAjNzQyOAor55CpID4gY2jEgW5nOyAjNzQyOQor55CqID4gccOtOyAjNzQyQQor55CrID4gYsSVbmc7ICM3NDJCCivnkKwgPiB3xINuOyAjNzQyQwor55CtID4gbMO5OyAjNzQyRAor55CuID4gY8Ozbmc7ICM3NDJFCivnkK8gPiBndcSDbjsgIzc0MkYKK+eQsCA+IHnEg247ICM3NDMwCivnkLEgPiBkacSBbzsgIzc0MzEKK+eQsiA+IGLDqGk7ICM3NDMyCivnkLMgPiBsw61uOyAjNzQzMwor55C0ID4gccOtbjsgIzc0MzQKK+eQtSA+IHDDrTsgIzc0MzUKK+eQtiA+IHDDoTsgIzc0MzYKK+eQtyA+IHF1w6g7ICM3NDM3CivnkLggPiB6aMO6bzsgIzc0MzgKK+eQuSA+IHHDrW47ICM3NDM5CivnkLogPiBmw6A7ICM3NDNBCivnkLwgPiBxw61vbmc7ICM3NDNDCivnkL0gPiBkxa07ICM3NDNECivnkL4gPiBqacOoOyAjNzQzRQor55C/ID4gaMO6bjsgIzc0M0YKK+eRgCA+IHnFrTsgIzc0NDAKK+eRgSA+IG3DoG87ICM3NDQxCivnkYIgPiBtw6lpOyAjNzQ0Mgor55GDID4gY2h1bjsgIzc0NDMKK+eRhCA+IHh1xIFuOyAjNzQ0NAor55GFID4gdMOtOyAjNzQ0NQor55GGID4geMSrbmc7ICM3NDQ2CivnkYcgPiBkw6BpOyAjNzQ0Nwor55GIID4gcsOzdTsgIzc0NDgKK+eRiSA+IG3DrW47ICM3NDQ5CivnkYogPiB6aMSTbjsgIzc0NEEKK+eRiyA+IHfElWk7ICM3NDRCCivnkYwgPiBydcSDbjsgIzc0NEMKK+eRjSA+IGh1w6BuOyAjNzQ0RAor55GOID4gamnEkzsgIzc0NEUKK+eRjyA+IGNodcSBbjsgIzc0NEYKK+eRkCA+IGppxINuOyAjNzQ1MAor55GRID4gemh1w6BuOyAjNzQ1MQor55GSID4gecOhbmc7ICM3NDUyCivnkZMgPiBsacOgbjsgIzc0NTMKK+eRlCA+IHF1w6FuOyAjNzQ1NAor55GVID4geGnDoTsgIzc0NTUKK+eRliA+IGR1w6BuOyAjNzQ1Ngor55GXID4geXXDoG47ICM3NDU3CivnkZggPiB5w6k7ICM3NDU4CivnkZkgPiBuxINvOyAjNzQ1OQor55GaID4gaMO6OyAjNzQ1QQor55GbID4gecSrbmc7ICM3NDVCCivnkZwgPiB5w7o7ICM3NDVDCivnkZ0gPiBodcOhbmc7ICM3NDVECivnkZ4gPiByw7lpOyAjNzQ1RQor55GfID4gc8OoOyAjNzQ1Rgor55GgID4gbMOtdTsgIzc0NjAKK+eRoSA+IHNoaTsgIzc0NjEKK+eRoiA+IHLDs25nOyAjNzQ2Mgor55GjID4gc8WtbzsgIzc0NjMKK+eRpCA+IHnDoW87ICM3NDY0CivnkaUgPiB3xJNuOyAjNzQ2NQor55GmID4gd8WrOyAjNzQ2Ngor55GnID4gasSrbjsgIzc0NjcKK+eRqCA+IGrDrG47ICM3NDY4CivnkakgPiB5w61uZzsgIzc0NjkKK+eRqiA+IG3EgzsgIzc0NkEKK+eRqyA+IHTEgW87ICM3NDZCCivnkawgPiBsw611OyAjNzQ2Qwor55GtID4gdMOhbmc7ICM3NDZECivnka4gPiBsw6w7ICM3NDZFCivnka8gPiBsw6FuZzsgIzc0NkYKK+eRsCA+IGfFq2k7ICM3NDcwCivnkbEgPiB6aMOobjsgIzc0NzEKK+eRsiA+IHFpxIFuZzsgIzc0NzIKK+eRsyA+IGPFrW87ICM3NDczCivnkbQgPiBqdcOpOyAjNzQ3NAor55G1ID4gemjEg287ICM3NDc1CivnkbYgPiB5w6FvOyAjNzQ3Ngor55G3ID4gw6BpOyAjNzQ3Nwor55G4ID4gYsSrbjsgIzc0NzgKK+eRuSA+IHTDujsgIzc0NzkKK+eRuiA+IGNow6FuZzsgIzc0N0EKK+eRuyA+IGvFq247ICM3NDdCCivnkbwgPiB6aHXEgW47ICM3NDdDCivnkb0gPiBjxY1uZzsgIzc0N0QKK+eRviA+IGrErW47ICM3NDdFCivnkb8gPiB5xKs7ICM3NDdGCivnkoAgPiBjxa1pOyAjNzQ4MAor55KBID4gY8WNbmc7ICM3NDgxCivnkoIgPiBxw607ICM3NDgyCivnkoMgPiBsw607ICM3NDgzCivnkoQgPiB5xK1uZzsgIzc0ODQKK+eShSA+IHPFrW87ICM3NDg1CivnkoYgPiBxw611OyAjNzQ4Ngor55KHID4geHXDoW47ICM3NDg3CivnkoggPiDDoW87ICM3NDg4CivnkokgPiBsacOhbjsgIzc0ODkKK+eSiiA+IG3DoW47ICM3NDhBCivnkosgPiB6aMSBbmc7ICM3NDhCCivnkowgPiB5w61uOyAjNzQ4Qwor55KOID4gecSrbmc7ICM3NDhFCivnko8gPiB6aMOsOyAjNzQ4Rgor55KQID4gbMO5OyAjNzQ5MAor55KRID4gd8O6OyAjNzQ5MQor55KSID4gZMSTbmc7ICM3NDkyCivnkpMgPiB4acOydTsgIzc0OTMKK+eSlCA+IHrEk25nOyAjNzQ5NAor55KVID4geMO6bjsgIzc0OTUKK+eSliA+IHHDujsgIzc0OTYKK+eSlyA+IGTDoG5nOyAjNzQ5Nwor55KYID4gbMOtbjsgIzc0OTgKK+eSmSA+IGxpw6FvOyAjNzQ5OQor55KaID4gccOtb25nOyAjNzQ5QQor55KbID4gc8O5OyAjNzQ5Qgor55KcID4gaHXDoW5nOyAjNzQ5Qwor55KdID4gZ8WraTsgIzc0OUQKK+eSniA+IHDDujsgIzc0OUUKK+eSnyA+IGrErW5nOyAjNzQ5Rgor55KgID4gZsOhbjsgIzc0QTAKK+eSoSA+IGrDrG47ICM3NEExCivnkqIgPiBsw611OyAjNzRBMgor55KjID4gasSrOyAjNzRBMwor55KlID4gasStbmc7ICM3NEE1CivnkqYgPiDDoGk7ICM3NEE2CivnkqcgPiBiw6w7ICM3NEE3CivnkqggPiBjw6BuOyAjNzRBOAor55KpID4gccO6OyAjNzRBOQor55KqID4gesSDbzsgIzc0QUEKK+eSqyA+IGTEgW5nOyAjNzRBQgor55KsID4gamnEg287ICM3NEFDCivnkq0gPiBnw7luOyAjNzRBRAor55KuID4gdMSDbjsgIzc0QUUKK+eSryA+IGjDuWk7ICM3NEFGCivnkrAgPiBodcOhbjsgIzc0QjAKK+eSsSA+IHPDqDsgIzc0QjEKK+eSsiA+IHPDuWk7ICM3NEIyCivnkrMgPiB0acOhbjsgIzc0QjMKK+eStSA+IHnDujsgIzc0QjUKK+eStiA+IGrDrG47ICM3NEI2CivnkrcgPiBsw7o7ICM3NEI3CivnkrggPiBixKtuOyAjNzRCOAor55K5ID4gc2jDsnU7ICM3NEI5CivnkrogPiB3w6huOyAjNzRCQQor55K7ID4gesWtaTsgIzc0QkIKK+eSvCA+IGzDoW47ICM3NEJDCivnkr0gPiB4xK07ICM3NEJECivnkr4gPiBqw6w7ICM3NEJFCivnkr8gPiB4dcOhbjsgIzc0QkYKK+eTgCA+IHJ1xINuOyAjNzRDMAor55OBID4gaMO5bzsgIzc0QzEKK+eTgiA+IGfDoGk7ICM3NEMyCivnk4MgPiBsw6lpOyAjNzRDMwor55OEID4gZMO6OyAjNzRDNAor55OFID4gbMOsOyAjNzRDNQor55OGID4gemjDrTsgIzc0QzYKK+eThyA+IHLDs3U7ICM3NEM3Civnk4ggPiBsw607ICM3NEM4Civnk4kgPiB6w6BuOyAjNzRDOQor55OKID4gccOtb25nOyAjNzRDQQor55OLID4gemjDqTsgIzc0Q0IKK+eTjCA+IGfFq2k7ICM3NENDCivnk40gPiBzw7lpOyAjNzRDRAor55OOID4gbMOgOyAjNzRDRQor55OPID4gbMOzbmc7ICM3NENGCivnk5AgPiBsw7o7ICM3NEQwCivnk5EgPiBsw6w7ICM3NEQxCivnk5IgPiB6w6BuOyAjNzREMgor55OTID4gbMOgbjsgIzc0RDMKK+eTlCA+IHnEq25nOyAjNzRENAor55OVID4gbcOtOyAjNzRENQor55OWID4geGnEgW5nOyAjNzRENgor55OXID4geMSrOyAjNzRENwor55OYID4gZ3XDoG47ICM3NEQ4Civnk5kgPiBkw6BvOyAjNzREOQor55OaID4gesOgbjsgIzc0REEKK+eTmyA+IGh1w6FuOyAjNzREQgor55OcID4gZ3XEgTsgIzc0REMKK+eTnSA+IGLDszsgIzc0REQKK+eTniA+IGRpw6k7ICM3NERFCivnk58gPiBiw6FvOyAjNzRERgor55OgID4gaMO5OyAjNzRFMAor55OhID4gemjDrTsgIzc0RTEKK+eToiA+IHBpw6FvOyAjNzRFMgor55OjID4gYsOgbjsgIzc0RTMKK+eTpCA+IHLDoW5nOyAjNzRFNAor55OlID4gbMOsOyAjNzRFNQor55OmID4gd8SDOyAjNzRFNgor55OoID4gamnEgW5nOyAjNzRFOAor55OpID4gcWnDoW4nICd3xIM7ICM3NEU5Civnk6ogPiBmxINuOyAjNzRFQQor55OrID4gcMOpbjsgIzc0RUIKK+eTrCA+IGbEg25nOyAjNzRFQwor55OtID4gZMSDbjsgIzc0RUQKK+eTriA+IHfDqG5nOyAjNzRFRQor55OvID4gxY11OyAjNzRFRgor55OzID4gaMO6OyAjNzRGMwor55O0ID4gbMOtbmc7ICM3NEY0Civnk7UgPiB5w607ICM3NEY1Civnk7YgPiBww61uZzsgIzc0RjYKK+eTtyA+IGPDrTsgIzc0RjcKK+eTuSA+IGp1w6BuOyAjNzRGOQor55O6ID4gY2jDoW5nOyAjNzRGQQor55O7ID4gY2jEqzsgIzc0RkIKK+eTvSA+IGTDoG5nOyAjNzRGRAor55O+ID4gbcSVbmc7ICM3NEZFCivnk78gPiBwxY91OyAjNzRGRgor55SAID4gemjDuWk7ICM3NTAwCivnlIEgPiBww61uZzsgIzc1MDEKK+eUgiA+IGJpxIFuOyAjNzUwMgor55SDID4gemjDsnU7ICM3NTAzCivnlIQgPiB6aMSTbjsgIzc1MDQKK+eUhiA+IGPDrTsgIzc1MDYKK+eUhyA+IHnEq25nOyAjNzUwNwor55SIID4gccOsOyAjNzUwOAor55SJID4geGnDoW47ICM3NTA5CivnlIogPiBsxY91OyAjNzUwQQor55SLID4gZMOsOyAjNzUwQgor55SMID4gxY11OyAjNzUwQwor55SNID4gbcOpbmc7ICM3NTBECivnlI4gPiB6aHXEgW47ICM3NTBFCivnlI8gPiBww6huZzsgIzc1MEYKK+eUkCA+IGzDrW47ICM3NTEwCivnlJEgPiB6w6huZzsgIzc1MTEKK+eUkiA+IHfFrTsgIzc1MTIKK+eUkyA+IHDDrDsgIzc1MTMKK+eUlCA+IGTEgW47ICM3NTE0CivnlJUgPiB3w6huZzsgIzc1MTUKK+eUliA+IHnEq25nOyAjNzUxNgor55SXID4gecSDbjsgIzc1MTcKK+eUmCA+IGfEgW47ICM3NTE4CivnlJkgPiBkw6BpOyAjNzUxOQor55SaID4gc2jDqW47ICM3NTFBCivnlJsgPiB0acOhbjsgIzc1MUIKK+eUnCA+IHRpw6FuOyAjNzUxQwor55SdID4gaMSBbjsgIzc1MUQKK+eUniA+IGNow6FuZzsgIzc1MUUKK+eUnyA+IHNoxJNuZzsgIzc1MUYKK+eUoCA+IHHDrW5nOyAjNzUyMAor55ShID4gc2jEk25nOyAjNzUyMQor55SiID4gY2jEg247ICM3NTIyCivnlKMgPiBjaMSDbjsgIzc1MjMKK+eUpCA+IHLDumk7ICM3NTI0CivnlKUgPiBzaMSTbmc7ICM3NTI1CivnlKYgPiBzxas7ICM3NTI2CivnlKcgPiBzxJNuOyAjNzUyNwor55SoID4gecOybmc7ICM3NTI4CivnlKkgPiBzaHXEg2k7ICM3NTI5CivnlKogPiBsw7k7ICM3NTJBCivnlKsgPiBmxa07ICM3NTJCCivnlKwgPiB5xY9uZzsgIzc1MkMKK+eUrSA+IGLDqW5nOyAjNzUyRAor55SuID4gZsOobmc7ICM3NTJFCivnlK8gPiBuw61uZzsgIzc1MkYKK+eUsCA+IHRpw6FuOyAjNzUzMAor55SxID4gecOzdTsgIzc1MzEKK+eUsiA+IGppxIM7ICM3NTMyCivnlLMgPiBzaMSTbjsgIzc1MzMKK+eUtCA+IHpow6E7ICM3NTM0CivnlLUgPiBkacOgbjsgIzc1MzUKK+eUtiA+IGbDujsgIzc1MzYKK+eUtyA+IG7DoW47ICM3NTM3CivnlLggPiBkacOgbjsgIzc1MzgKK+eUuSA+IHDDrW5nOyAjNzUzOQor55S6ID4gdMStbmc7ICM3NTNBCivnlLsgPiBodcOgOyAjNzUzQgor55S8ID4gdMStbmc7ICM3NTNDCivnlL0gPiBxdcSDbjsgIzc1M0QKK+eUviA+IHrEqzsgIzc1M0UKK+eUvyA+IG3DqW5nOyAjNzUzRgor55WAID4gYsOsOyAjNzU0MAor55WBID4gccOtOyAjNzU0MQor55WCID4gbMOsdTsgIzc1NDIKK+eVgyA+IHjDum47ICM3NTQzCivnlYQgPiBsw611OyAjNzU0NAor55WFID4gY2jDoG5nOyAjNzU0NQor55WGID4gbcWtOyAjNzU0Ngor55WHID4gecO6bjsgIzc1NDcKK+eViCA+IGbDoG47ICM3NTQ4CivnlYkgPiBmw7o7ICM3NTQ5CivnlYogPiBnxJNuZzsgIzc1NEEKK+eViyA+IHRpw6FuOyAjNzU0Qgor55WMID4gamnDqDsgIzc1NEMKK+eVjSA+IGppw6g7ICM3NTRECivnlY4gPiBxdcSDbjsgIzc1NEUKK+eVjyA+IHfDqGk7ICM3NTRGCivnlZAgPiBmw7o7ICM3NTUwCivnlZEgPiB0acOhbjsgIzc1NTEKK+eVkiA+IG3FrTsgIzc1NTIKK+eVlCA+IHDDoG47ICM3NTU0CivnlZUgPiBqacSBbmc7ICM3NTU1CivnlZYgPiB3xIE7ICM3NTU2CivnlZcgPiBkw6E7ICM3NTU3CivnlZggPiBuw6FuOyAjNzU1OAor55WZID4gbMOtdTsgIzc1NTkKK+eVmiA+IGLElW47ICM3NTVBCivnlZsgPiB6aMSVbjsgIzc1NUIKK+eVnCA+IGNow7k7ICM3NTVDCivnlZ0gPiBtxa07ICM3NTVECivnlZ4gPiBtxa07ICM3NTVFCivnlZ8gPiBjw6g7ICM3NTVGCivnlaEgPiBnxIFpOyAjNzU2MQor55WiID4gYsOsOyAjNzU2Mgor55WjID4gZMOhOyAjNzU2Mwor55WkID4gemjDrDsgIzc1NjQKK+eVpSA+IGzHnGU7ICM3NTY1CivnlaYgPiBxw607ICM3NTY2CivnlacgPiBsx5xlOyAjNzU2Nwor55WoID4gcMSBbjsgIzc1NjgKK+eVqiA+IGbEgW47ICM3NTZBCivnlasgPiBodcOgOyAjNzU2Qgor55WsID4gecO6OyAjNzU2Qwor55WtID4gecO6OyAjNzU2RAor55WuID4gbcWtOyAjNzU2RQor55WvID4gasO5bjsgIzc1NkYKK+eVsCA+IHnDrDsgIzc1NzAKK+eVsSA+IGzDrXU7ICM3NTcxCivnlbIgPiB5w7o7ICM3NTcyCivnlbMgPiBkacOpOyAjNzU3Mwor55W0ID4gY2jDs3U7ICM3NTc0CivnlbUgPiBodcOgOyAjNzU3NQor55W2ID4gZMSBbmc7ICM3NTc2CivnlbcgPiBjaMO5bzsgIzc1NzcKK+eVuCA+IGrEqzsgIzc1NzgKK+eVuSA+IHfEg247ICM3NTc5CivnlbogPiBqacSBbmc7ICM3NTdBCivnlbsgPiBzaMOpbmc7ICM3NTdCCivnlbwgPiBjaMOgbmc7ICM3NTdDCivnlb0gPiB0dcSDbjsgIzc1N0QKK+eVviA+IGzDqWk7ICM3NTdFCivnlb8gPiBqxKs7ICM3NTdGCivnloAgPiBjaMSBOyAjNzU4MAor55aBID4gbMOtdTsgIzc1ODEKK+eWgyA+IHR1xINuOyAjNzU4Mwor55aEID4gbMOtbjsgIzc1ODQKK+eWhSA+IGppxIFuZzsgIzc1ODUKK+eWhiA+IGppxIFuZzsgIzc1ODYKK+eWhyA+IGNow7N1OyAjNzU4Nwor55aIID4gYsOyOyAjNzU4OAor55aJID4gZGnDqTsgIzc1ODkKK+eWiiA+IGRpw6k7ICM3NThBCivnlosgPiBwxK07ICM3NThCCivnlowgPiBuacOoOyAjNzU4Qwor55aNID4gZMOgbjsgIzc1OEQKK+eWjiA+IHNoxas7ICM3NThFCivnlo8gPiBzaMWrOyAjNzU4Rgor55aQID4gemjDrDsgIzc1OTAKK+eWkSA+IHnDrTsgIzc1OTEKK+eWkiA+IGNodcOhbmc7ICM3NTkyCivnlpMgPiBuxINpOyAjNzU5Mwor55aUID4gZMSrbmc7ICM3NTk0CivnlpUgPiBixK07ICM3NTk1CivnlpYgPiBqacOpOyAjNzU5Ngor55aXID4gbGnDoW87ICM3NTk3CivnlpggPiBnxY1uZzsgIzc1OTgKK+eWmSA+IGfEkzsgIzc1OTkKK+eWmiA+IGrDrHU7ICM3NTlBCivnlpsgPiB6aMWPdTsgIzc1OUIKK+eWnCA+IHhpw6A7ICM3NTlDCivnlp0gPiBzaMOgbjsgIzc1OUQKK+eWniA+IHjFqzsgIzc1OUUKK+eWnyA+IG7HnGU7ICM3NTlGCivnlqAgPiBsw6w7ICM3NUEwCivnlqEgPiB5w6FuZzsgIzc1QTEKK+eWoiA+IGNow6huOyAjNzVBMgor55ajID4gecOzdTsgIzc1QTMKK+eWpCA+IGLEgTsgIzc1QTQKK+eWpSA+IGppw6g7ICM3NUE1CivnlqYgPiBqdcOpOyAjNzVBNgor55anID4gemjEqzsgIzc1QTcKK+eWqCA+IHhpxIE7ICM3NUE4CivnlqkgPiBjw7lpOyAjNzVBOQor55aqID4gYsOsOyAjNzVBQQor55arID4gecOsOyAjNzVBQgor55asID4gbMOsOyAjNzVBQwor55atID4gesOybmc7ICM3NUFECivnlq4gPiBjaHXEgW5nOyAjNzVBRQor55avID4gZsSTbmc7ICM3NUFGCivnlrAgPiB6aMO5OyAjNzVCMAor55axID4gcMOgbzsgIzc1QjEKK+eWsiA+IHDDrTsgIzc1QjIKK+eWsyA+IGfEgW47ICM3NUIzCivnlrQgPiBrxJM7ICM3NUI0CivnlrUgPiBjxKs7ICM3NUI1CivnlrYgPiB4acOoOyAjNzVCNgor55a3ID4gccOtOyAjNzVCNwor55a4ID4gZMSDbjsgIzc1QjgKK+eWuSA+IHpoxJVuOyAjNzVCOQor55a6ID4gZsOhOyAjNzVCQQor55a7ID4gemjErTsgIzc1QkIKK+eWvCA+IHTDqW5nOyAjNzVCQwor55a9ID4gasWrOyAjNzVCRAor55a+ID4gasOtOyAjNzVCRQor55a/ID4gZsOoaTsgIzc1QkYKK+eXgCA+IHHDujsgIzc1QzAKK+eXgSA+IGRpw6BuOyAjNzVDMQor55eCID4gamnEgTsgIzc1QzIKK+eXgyA+IHhpw6FuOyAjNzVDMwor55eEID4gY2jDoTsgIzc1QzQKK+eXhSA+IGLDrG5nOyAjNzVDNQor55eGID4gbsOsOyAjNzVDNgor55eHID4gemjDqG5nOyAjNzVDNwor55eIID4gecWNbmc7ICM3NUM4Civnl4kgPiBqw6xuZzsgIzc1QzkKK+eXiiA+IHF1w6FuOyAjNzVDQQor55eLID4gY2jDs25nOyAjNzVDQgor55eMID4gdMWNbmc7ICM3NUNDCivnl40gPiB5w607ICM3NUNECivnl44gPiBrxIFpOyAjNzVDRQor55ePID4gd8SVaTsgIzc1Q0YKK+eXkCA+IGjDumk7ICM3NUQwCivnl5EgPiBkxa1vOyAjNzVEMQor55eSID4gecSDbmc7ICM3NUQyCivnl5MgPiBjaMOsOyAjNzVEMwor55eUID4gemjDrDsgIzc1RDQKK+eXlSA+IGjDqW47ICM3NUQ1Civnl5YgPiB5xIM7ICM3NUQ2Civnl5cgPiBtw6hpOyAjNzVENwor55eYID4gZMOydTsgIzc1RDgKK+eXmSA+IGrDrG5nOyAjNzVEOQor55eaID4geGnEgW87ICM3NURBCivnl5sgPiB0w7JuZzsgIzc1REIKK+eXnCA+IHTFqzsgIzc1REMKK+eXnSA+IG3DoW5nOyAjNzVERAor55eeID4gcMStOyAjNzVERQor55efID4geGnEgW87ICM3NURGCivnl6AgPiBzdcSBbjsgIzc1RTAKK+eXoSA+IHDFqzsgIzc1RTEKK+eXoiA+IGzDrDsgIzc1RTIKK+eXoyA+IHpow6w7ICM3NUUzCivnl6QgPiBjw7pvOyAjNzVFNAor55elID4gZMO6bzsgIzc1RTUKK+eXpiA+IHfDuTsgIzc1RTYKK+eXpyA+IHNoxIE7ICM3NUU3Civnl6ggPiBsw6FvOyAjNzVFOAor55epID4gc2jDsnU7ICM3NUU5Civnl6ogPiBodcOgbjsgIzc1RUEKK+eXqyA+IHhpw6FuOyAjNzVFQgor55esID4gecOsOyAjNzVFQwor55etID4gcMOpbmc7ICM3NUVECivnl64gPiB6aMOgbmc7ICM3NUVFCivnl68gPiBndcSDbjsgIzc1RUYKK+eXsCA+IHTDoW47ICM3NUYwCivnl7EgPiBmw6hpOyAjNzVGMQor55eyID4gbcOhOyAjNzVGMgor55ezID4gbMOtbjsgIzc1RjMKK+eXtCA+IGNoxKs7ICM3NUY0Civnl7UgPiBqw6w7ICM3NUY1Civnl7YgPiBkacSDbjsgIzc1RjYKK+eXtyA+IMSBbjsgIzc1RjcKK+eXuCA+IGNow6w7ICM3NUY4Civnl7kgPiBiw6w7ICM3NUY5Civnl7ogPiBixJNpOyAjNzVGQQor55e7ID4gbcOtbjsgIzc1RkIKK+eXvCA+IGfFqzsgIzc1RkMKK+eXvSA+IGTFq2k7ICM3NUZECivnl74gPiDEkzsgIzc1RkUKK+eXvyA+IHfElWk7ICM3NUZGCivnmIAgPiB5xas7ICM3NjAwCivnmIEgPiBjw7lpOyAjNzYwMQor55iCID4gecSDOyAjNzYwMgor55iDID4gemjFrTsgIzc2MDMKK+eYhCA+IGPDuTsgIzc2MDQKK+eYhSA+IGTDoG47ICM3NjA1CivnmIYgPiBzaMOobjsgIzc2MDYKK+eYhyA+IHpoxa1uZzsgIzc2MDcKK+eYiCA+IGrDrDsgIzc2MDgKK+eYiSA+IHnDuTsgIzc2MDkKK+eYiiA+IGjDs3U7ICM3NjBBCivnmIsgPiBmxJNuZzsgIzc2MEIKK+eYjCA+IGzDoDsgIzc2MEMKK+eYjSA+IHnDoW5nOyAjNzYwRAor55iOID4gc2jDqG47ICM3NjBFCivnmI8gPiB0w7o7ICM3NjBGCivnmJAgPiB5xa07ICM3NjEwCivnmJEgPiBndcSBOyAjNzYxMQor55iSID4gd8OpbjsgIzc2MTIKK+eYkyA+IGh1w6BuOyAjNzYxMwor55iUID4ga8O5OyAjNzYxNAor55iVID4gamnEgzsgIzc2MTUKK+eYliA+IHnEq247ICM3NjE2CivnmJcgPiB5w6w7ICM3NjE3CivnmJggPiBsx5g7ICM3NjE4CivnmJkgPiBzxIFvOyAjNzYxOQor55iaID4ganXDqTsgIzc2MUEKK+eYmyA+IGNow6w7ICM3NjFCCivnmJwgPiB4w607ICM3NjFDCivnmJ0gPiBndcSBbjsgIzc2MUQKK+eYniA+IHnDrDsgIzc2MUUKK+eYnyA+IHfEk247ICM3NjFGCivnmKAgPiBqw607ICM3NjIwCivnmKEgPiBjaHXEgW5nOyAjNzYyMQor55iiID4gYsSBbjsgIzc2MjIKK+eYoyA+IGzElWk7ICM3NjIzCivnmKQgPiBsw611OyAjNzYyNAor55ilID4gY2jDoGk7ICM3NjI1CivnmKYgPiBzaMOydTsgIzc2MjYKK+eYpyA+IG7HnGU7ICM3NjI3CivnmKggPiBkacSBbjsgIzc2MjgKK+eYqSA+IGTEgTsgIzc2MjkKK+eYqiA+IHBpxJM7ICM3NjJBCivnmKsgPiB0xIFuOyAjNzYyQgor55isID4gemjDoG5nOyAjNzYyQwor55itID4gYmnEgW87ICM3NjJECivnmK4gPiBzaGVuOyAjNzYyRQor55ivID4gY8O5OyAjNzYyRgor55iwID4gbMWtbzsgIzc2MzAKK+eYsSA+IHnDrDsgIzc2MzEKK+eYsiA+IHrDsm5nOyAjNzYzMgor55izID4gY2jFjXU7ICM3NjMzCivnmLQgPiB6aMOgbmc7ICM3NjM0CivnmLUgPiB6aMOgaTsgIzc2MzUKK+eYtiA+IHPDsnU7ICM3NjM2CivnmLcgPiBzxa1vOyAjNzYzNwor55i4ID4gcXXDqTsgIzc2MzgKK+eYuSA+IGRpw6BvOyAjNzYzOQor55i6ID4gbMOydTsgIzc2M0EKK+eYuyA+IGzHmDsgIzc2M0IKK+eYvCA+IG3DsjsgIzc2M0MKK+eYvSA+IGrDrG47ICM3NjNECivnmL4gPiB5xK1uOyAjNzYzRQor55i/ID4gecStbmc7ICM3NjNGCivnmYAgPiBodcOhbmc7ICM3NjQwCivnmYEgPiBmw7o7ICM3NjQxCivnmYIgPiBsacOhbzsgIzc2NDIKK+eZgyA+IGzDs25nOyAjNzY0Mwor55mEID4gcWnDoW87ICM3NjQ0CivnmYUgPiBsw611OyAjNzY0NQor55mGID4gbMOhbzsgIzc2NDYKK+eZhyA+IHhpw6FuOyAjNzY0Nwor55mIID4gZsOoaTsgIzc2NDgKK+eZiSA+IGTDoG47ICM3NjQ5CivnmYogPiB5w6xuOyAjNzY0QQor55mLID4gaMOoOyAjNzY0Qgor55mMID4gecOhbjsgIzc2NEMKK+eZjSA+IGLEgW47ICM3NjRECivnmY4gPiB4acOhbjsgIzc2NEUKK+eZjyA+IGd1xIFuOyAjNzY0Rgor55mQID4gZ3XDoGk7ICM3NjUwCivnmZEgPiBuw7NuZzsgIzc2NTEKK+eZkiA+IHnDuTsgIzc2NTIKK+eZkyA+IHfDqWk7ICM3NjUzCivnmZQgPiB5w6w7ICM3NjU0CivnmZUgPiB5xY1uZzsgIzc2NTUKK+eZliA+IHDErTsgIzc2NTYKK+eZlyA+IGzElWk7ICM3NjU3CivnmZggPiBsw6w7ICM3NjU4CivnmZkgPiBzaMWtOyAjNzY1OQor55maID4gZMOgbjsgIzc2NUEKK+eZmyA+IGzErW47ICM3NjVCCivnmZwgPiBkacOgbjsgIzc2NUMKK+eZnSA+IGzErW47ICM3NjVECivnmZ4gPiBsw6BpOyAjNzY1RQor55mfID4gcGnEkzsgIzc2NUYKK+eZoCA+IGrDrDsgIzc2NjAKK+eZoSA+IGNoxKs7ICM3NjYxCivnmaIgPiB5xINuZzsgIzc2NjIKK+eZoyA+IHhpxINuOyAjNzY2Mwor55mkID4gamnDqTsgIzc2NjQKK+eZpSA+IHpoxJNuZzsgIzc2NjUKK+eZpyA+IGzDrDsgIzc2NjcKK+eZqCA+IGjDuW87ICM3NjY4CivnmakgPiBsw6BpOyAjNzY2OQor55mrID4gZGnEgW47ICM3NjZCCivnmawgPiB4acSDbjsgIzc2NkMKK+eZrSA+IHnErW5nOyAjNzY2RAor55muID4gecStbjsgIzc2NkUKK+eZryA+IHHDujsgIzc2NkYKK+eZsCA+IHnFjW5nOyAjNzY3MAor55mxID4gdMSBbjsgIzc2NzEKK+eZsiA+IGRpxIFuOyAjNzY3Mgor55mzID4gbMWtbzsgIzc2NzMKK+eZtCA+IGzHmGFuOyAjNzY3NAor55m1ID4gbHXDoW47ICM3Njc1CivnmbYgPiBixY07ICM3Njc2CivnmbggPiBnxa1pOyAjNzY3OAor55m5ID4gcMWNOyAjNzY3OQor55m6ID4gZsSBOyAjNzY3QQor55m7ID4gZMSTbmc7ICM3NjdCCivnmbwgPiBmxIE7ICM3NjdDCivnmb0gPiBiw6FpOyAjNzY3RAor55m+ID4gYsSDaTsgIzc2N0UKK+eZvyA+IHFpw6k7ICM3NjdGCivnmoAgPiBixKs7ICM3NjgwCivnmoEgPiB6w6BvOyAjNzY4MQor55qCID4gesOgbzsgIzc2ODIKK+eagyA+IG3DoG87ICM3NjgzCivnmoQgPiBkZTsgIzc2ODQKK+eahSA+IHDEgTsgIzc2ODUKK+eahiA+IGppxJM7ICM3Njg2CivnmocgPiBodcOhbmc7ICM3Njg3CivnmoggPiBnxatpOyAjNzY4OAor55qJID4gY8StOyAjNzY4OQor55qKID4gbMOtbmc7ICM3NjhBCivnmosgPiBnxIFvOyAjNzY4Qgor55qMID4gbcOyOyAjNzY4Qwor55qNID4gasOtOyAjNzY4RAor55qOID4gamnEg287ICM3NjhFCivnmo8gPiBwxJVuZzsgIzc2OEYKK+eakCA+IGfEgW87ICM3NjkwCivnmpEgPiDDoWk7ICM3NjkxCivnmpIgPiDDqTsgIzc2OTIKK+eakyA+IGjDoG87ICM3NjkzCivnmpQgPiBow6BuOyAjNzY5NAor55qVID4gYsSrOyAjNzY5NQor55qWID4gd8SDbjsgIzc2OTYKK+ealyA+IGNow7N1OyAjNzY5Nwor55qYID4gcWnDoG47ICM3Njk4CivnmpkgPiB4xKs7ICM3Njk5CivnmpogPiDDoWk7ICM3NjlBCivnmpsgPiBqxK1vbmc7ICM3NjlCCivnmpwgPiBow6BvOyAjNzY5Qwor55qdID4gaHXEg25nOyAjNzY5RAor55qeID4gaMOgbzsgIzc2OUUKK+eanyA+IHrDqTsgIzc2OUYKK+eaoCA+IGPFrWk7ICM3NkEwCivnmqEgPiBow6BvOyAjNzZBMQor55qiID4geGnEg287ICM3NkEyCivnmqMgPiB5w6g7ICM3NkEzCivnmqQgPiBww7M7ICM3NkE0CivnmqUgPiBow6BvOyAjNzZBNQor55qmID4gamnEg287ICM3NkE2CivnmqcgPiDDoGk7ICM3NkE3CivnmqggPiB4xKtuZzsgIzc2QTgKK+eaqSA+IGh1w6BuZzsgIzc2QTkKK+eaqiA+IGzDrDsgIzc2QUEKK+eaqyA+IHBpxINvOyAjNzZBQgor55qsID4gaMOoOyAjNzZBQwor55qtID4gamnDoG87ICM3NkFECivnmq4gPiBww607ICM3NkFFCivnmq8gPiBnxINuOyAjNzZBRgor55qwID4gcMOgbzsgIzc2QjAKK+easSA+IHpow7J1OyAjNzZCMQor55qyID4gasWrbjsgIzc2QjIKK+easyA+IHHDrXU7ICM3NkIzCivnmrQgPiBjxatuOyAjNzZCNAor55q1ID4gcXXDqDsgIzc2QjUKK+eatiA+IHpoxIE7ICM3NkI2CivnmrcgPiBnxa07ICM3NkI3CivnmrggPiBqxatuOyAjNzZCOAor55q5ID4gasWrbjsgIzc2QjkKK+eauiA+IHpow7J1OyAjNzZCQQor55q7ID4gemjEgTsgIzc2QkIKK+eavCA+IGfFrTsgIzc2QkMKK+eavSA+IHpoxINuOyAjNzZCRAor55q+ID4gZMO6OyAjNzZCRQor55q/ID4gbcStbjsgIzc2QkYKK+ebgCA+IHHErTsgIzc2QzAKK+ebgSA+IHnDrW5nOyAjNzZDMQor55uCID4gecO6OyAjNzZDMgor55uDID4gYsSTaTsgIzc2QzMKK+ebhCA+IHpoxIFvOyAjNzZDNAor55uFID4gemjFjW5nOyAjNzZDNQor55uGID4gcMOpbjsgIzc2QzYKK+ebhyA+IGjDqTsgIzc2QzcKK+ebiCA+IHnDrW5nOyAjNzZDOAor55uJID4gaMOpOyAjNzZDOQor55uKID4gecOsOyAjNzZDQQor55uLID4gYsWNOyAjNzZDQgor55uMID4gd8SDbjsgIzc2Q0MKK+ebjSA+IGjDqTsgIzc2Q0QKK+ebjiA+IMOgbmc7ICM3NkNFCivnm48gPiB6aMSDbjsgIzc2Q0YKK+ebkCA+IHnDoW47ICM3NkQwCivnm5EgPiBqacSBbjsgIzc2RDEKK+ebkiA+IGjDqTsgIzc2RDIKK+ebkyA+IHnFqzsgIzc2RDMKK+eblCA+IGvFq2k7ICM3NkQ0Civnm5UgPiBmw6BuOyAjNzZENQor55uWID4gZ8OgaTsgIzc2RDYKK+eblyA+IGTDoG87ICM3NkQ3Civnm5ggPiBww6FuOyAjNzZEOAor55uZID4gZsWtOyAjNzZEOQor55uaID4gccOtdTsgIzc2REEKK+ebmyA+IHNow6huZzsgIzc2REIKK+ebnCA+IGTDoG87ICM3NkRDCivnm50gPiBsw7k7ICM3NkRECivnm54gPiB6aMSDbjsgIzc2REUKK+ebnyA+IG3DqW5nOyAjNzZERgor55ugID4gbMStOyAjNzZFMAor55uhID4gasOsbjsgIzc2RTEKK+eboiA+IHjDuTsgIzc2RTIKK+eboyA+IGppxIFuOyAjNzZFMwor55ukID4gcMOhbjsgIzc2RTQKK+ebpSA+IGd1w6BuOyAjNzZFNQor55umID4gxIFuOyAjNzZFNgor55unID4gbMO6OyAjNzZFNwor55uoID4gc2jFrTsgIzc2RTgKK+ebqSA+IHpoxY11OyAjNzZFOQor55uqID4gZMOgbmc7ICM3NkVBCivnm6sgPiDEgW47ICM3NkVCCivnm6wgPiBnxa07ICM3NkVDCivnm60gPiBsw6w7ICM3NkVECivnm64gPiBtw7k7ICM3NkVFCivnm68gPiBjaMOpbmc7ICM3NkVGCivnm7AgPiBnxINuOyAjNzZGMAor55uxID4geMWrOyAjNzZGMQor55uyID4gbcOhbmc7ICM3NkYyCivnm7MgPiBtw6FuZzsgIzc2RjMKK+ebtCA+IHpow607ICM3NkY0Civnm7UgPiBxw6w7ICM3NkY1Civnm7YgPiBydcSDbjsgIzc2RjYKK+ebtyA+IHRpw6FuOyAjNzZGNwor55u4ID4geGnEgW5nOyAjNzZGOAor55u5ID4gZMO5bjsgIzc2RjkKK+ebuiA+IHjEq247ICM3NkZBCivnm7sgPiB4w6w7ICM3NkZCCivnm7wgPiBww6BuOyAjNzZGQwor55u9ID4gZsSTbmc7ICM3NkZECivnm74gPiBkw7luOyAjNzZGRQor55u/ID4gbcOtbjsgIzc2RkYKK+ecgCA+IG3DrW5nOyAjNzcwMAor55yBID4gc2jElW5nOyAjNzcwMQor55yCID4gc2jDrDsgIzc3MDIKK+ecgyA+IHnDum47ICM3NzAzCivnnIQgPiBtacSDbjsgIzc3MDQKK+echSA+IHDEgW47ICM3NzA1CivnnIYgPiBmxINuZzsgIzc3MDYKK+echyA+IG1pxINvOyAjNzcwNwor55yIID4gZMSBbjsgIzc3MDgKK+eciSA+IG3DqWk7ICM3NzA5CivnnIogPiBtw6BvOyAjNzcwQQor55yLID4ga8OgbjsgIzc3MEIKK+ecjCA+IHhpw6BuOyAjNzcwQwor55yNID4gxY11OyAjNzcwRAor55yOID4gc2jDrDsgIzc3MEUKK+ecjyA+IHnEgW5nOyAjNzcwRgor55yQID4gemjEk25nOyAjNzcxMAor55yRID4gecSDbzsgIzc3MTEKK+eckiA+IHNow6huOyAjNzcxMgor55yTID4gaMO5bzsgIzc3MTMKK+eclCA+IGTDoDsgIzc3MTQKK+eclSA+IHpoxJVuOyAjNzcxNQor55yWID4ga3XDoG5nOyAjNzcxNgor55yXID4gasWrOyAjNzcxNwor55yYID4gc2jDqG47ICM3NzE4CivnnJkgPiBjaMOsOyAjNzcxOQor55yaID4gc2jElW5nOyAjNzcxQQor55ybID4gbcOoaTsgIzc3MUIKK+ecnCA+IG3DsjsgIzc3MUMKK+ecnSA+IHpow7k7ICM3NzFECivnnJ4gPiB6aMSTbjsgIzc3MUUKK+ecnyA+IHpoxJNuOyAjNzcxRgor55ygID4gbWnDoW47ICM3NzIwCivnnKEgPiBkxKs7ICM3NzIxCivnnKIgPiB5dcSBbjsgIzc3MjIKK+ecoyA+IGRpw6k7ICM3NzIzCivnnKQgPiB5w607ICM3NzI0CivnnKUgPiB6w6w7ICM3NzI1CivnnKYgPiB6w6w7ICM3NzI2CivnnKcgPiBjaMSDbzsgIzc3MjcKK+ecqCA+IHpoxIM7ICM3NzI4CivnnKkgPiB4dcOgbjsgIzc3MjkKK+ecqiA+IGLErW5nOyAjNzcyQQor55yrID4gbcStOyAjNzcyQgor55ysID4gbMOzbmc7ICM3NzJDCivnnK0gPiBzxatpOyAjNzcyRAor55yuID4gZMOybmc7ICM3NzJFCivnnK8gPiBtxK07ICM3NzJGCivnnLAgPiBkacOpOyAjNzczMAor55yxID4gecOtOyAjNzczMQor55yyID4gw6hyOyAjNzczMgor55yzID4gbcStbmc7ICM3NzMzCivnnLQgPiB4dcOgbjsgIzc3MzQKK+ectSA+IGNoxKs7ICM3NzM1CivnnLYgPiBrdcOgbmc7ICM3NzM2CivnnLcgPiBqdcOgbjsgIzc3MzcKK+ecuCA+IG3Ds3U7ICM3NzM4CivnnLkgPiB6aMOobjsgIzc3MzkKK+ecuiA+IHRpw6BvOyAjNzczQQor55y7ID4gecOhbmc7ICM3NzNCCivnnLwgPiB5xINuOyAjNzczQwor55y9ID4gbcOyOyAjNzczRAor55y+ID4gemjDsm5nOyAjNzczRQor55y/ID4gbcOgaTsgIzc3M0YKK+edgCA+IHpow6FvOyAjNzc0MAor552BID4gemjEk25nOyAjNzc0MQor552CID4gbcOpaTsgIzc3NDIKK+edgyA+IGrDuW47ICM3NzQzCivnnYQgPiBzaMOgbzsgIzc3NDQKK+edhSA+IGjDoG47ICM3NzQ1CivnnYYgPiBodcSDbjsgIzc3NDYKK+edhyA+IGTDrDsgIzc3NDcKK+ediCA+IGNoxJVuZzsgIzc3NDgKK+ediSA+IGPFq287ICM3NzQ5CivnnYogPiBqdcOgbjsgIzc3NEEKK+ediyA+IMOpOyAjNzc0Qgor552MID4gd8SDbjsgIzc3NEMKK+edjSA+IHhpw6BuOyAjNzc0RAor552OID4geMSrOyAjNzc0RQor552PID4ga8O5bjsgIzc3NEYKK+edkCA+IGzDoGk7ICM3NzUwCivnnZEgPiBqacSDbjsgIzc3NTEKK+edkiA+IHNoxINuOyAjNzc1Mgor552TID4gdGnEg247ICM3NzUzCivnnZQgPiBoxa1uOyAjNzc1NAor552VID4gd8SDbjsgIzc3NTUKK+edliA+IGzDrW5nOyAjNzc1Ngor552XID4gc2jDrDsgIzc3NTcKK+edmCA+IHHDrW9uZzsgIzc3NTgKK+edmSA+IGxpw6g7ICM3NzU5CivnnZogPiB5w6FpOyAjNzc1QQor552bID4gasSrbmc7ICM3NzVCCivnnZwgPiB6aMSTbmc7ICM3NzVDCivnnZ0gPiBsw607ICM3NzVECivnnZ4gPiBsw6BpOyAjNzc1RQor552fID4gc8O5aTsgIzc3NUYKK+edoCA+IGp1w6BuOyAjNzc2MAor552hID4gc2jDuWk7ICM3NzYxCivnnaIgPiBzxatpOyAjNzc2Mgor552jID4gZMWrOyAjNzc2Mwor552kID4gYsOsOyAjNzc2NAor552lID4gYsOsOyAjNzc2NQor552mID4gbcO5OyAjNzc2Ngor552nID4gaMWrbjsgIzc3NjcKK+edqCA+IG7DrDsgIzc3NjgKK+edqSA+IGzDuTsgIzc3NjkKK+edqiA+IHnDrDsgIzc3NkEKK+edqyA+IGppw6k7ICM3NzZCCivnnawgPiBjxINpOyAjNzc2Qwor552tID4gemjFj3U7ICM3NzZECivnna4gPiB5w7o7ICM3NzZFCivnna8gPiBoxatuOyAjNzc2Rgor552wID4gbcOgOyAjNzc3MAor552xID4geGnDoDsgIzc3NzEKK+edsiA+IHjErW5nOyAjNzc3Mgor552zID4geMSrOyAjNzc3Mwor5520ID4gZ8O5bjsgIzc3NzQKK+edtSA+IGNhaTsgIzc3NzUKK+edtiA+IGNoxa1uOyAjNzc3Ngor5523ID4gamnEgW47ICM3Nzc3CivnnbggPiBtw6hpOyAjNzc3OAor5525ID4gZMWtOyAjNzc3OQor5526ID4gaMOzdTsgIzc3N0EKK+eduyA+IHh1xIFuOyAjNzc3Qgor5528ID4gdMOsOyAjNzc3Qwor5529ID4ga8O6aTsgIzc3N0QKK+edviA+IGfEgW87ICM3NzdFCivnnb8gPiByw7lpOyAjNzc3Rgor556AID4gbcOydTsgIzc3ODAKK+eegSA+IHjDuTsgIzc3ODEKK+eegiA+IGbEgTsgIzc3ODIKK+eegyA+IHfEk247ICM3NzgzCivnnoQgPiBtacOhbzsgIzc3ODQKK+eehSA+IGNoxY91OyAjNzc4NQor556GID4ga8O5aTsgIzc3ODYKK+eehyA+IG3EqzsgIzc3ODcKK+eeiCA+IHfElW5nOyAjNzc4OAor556JID4ga8OydTsgIzc3ODkKK+eeiiA+IGTDoG5nOyAjNzc4QQor556LID4gY2jEk247ICM3NzhCCivnnowgPiBrxJM7ICM3NzhDCivnno0gPiBzxY91OyAjNzc4RAor556OID4geGnEgTsgIzc3OEUKK+eejyA+IHHDrW9uZzsgIzc3OEYKK+eekCA+IG3DoG87ICM3NzkwCivnnpEgPiBtw61uZzsgIzc3OTEKK+eekiA+IG3DoW47ICM3NzkyCivnnpMgPiBzaMO5aTsgIzc3OTMKK+eelCA+IHrDqTsgIzc3OTQKK+eelSA+IHpow6BuZzsgIzc3OTUKK+eeliA+IHnDrDsgIzc3OTYKK+eelyA+IGRpxIFvOyAjNzc5Nwor556YID4gxY11OyAjNzc5OAor556ZID4gbcOyOyAjNzc5OQor556aID4gc2jDuW47ICM3NzlBCivnnpsgPiBjxY1uZzsgIzc3OUIKK+eenCA+IGzFjXU7ICM3NzlDCivnnp0gPiBjaMSrOyAjNzc5RAor556eID4gbcOhbjsgIzc3OUUKK+eenyA+IHBpxINvOyAjNzc5Rgor556gID4gY2jEk25nOyAjNzdBMAor556hID4gasOsOyAjNzdBMQor556iID4gbcOpbmc7ICM3N0EyCivnnqQgPiByw7puOyAjNzdBNAor556lID4gcGnEkzsgIzc3QTUKK+eepiA+IHjEqzsgIzc3QTYKK+eepyA+IHFpw6FvOyAjNzdBNwor556oID4gcMO6OyAjNzdBOAor556pID4gemjFrTsgIzc3QTkKK+eeqiA+IGTDqG5nOyAjNzdBQQor556rID4gc2jElW47ICM3N0FCCivnnqwgPiBzaMO5bjsgIzc3QUMKK+eerSA+IGxpxINvOyAjNzdBRAor556uID4gY2jDqDsgIzc3QUUKK+eeryA+IHhpw6FuOyAjNzdBRgor556wID4ga8OgbjsgIzc3QjAKK+eesSA+IHnDqDsgIzc3QjEKK+eesiA+IHjDuTsgIzc3QjIKK+eesyA+IHTDs25nOyAjNzdCMwor5560ID4gbcOzdTsgIzc3QjQKK+eetSA+IGzDrW47ICM3N0I1CivnnrYgPiBrw7lpOyAjNzdCNgor5563ID4geGnDoW47ICM3N0I3CivnnrggPiB5w6g7ICM3N0I4CivnnrkgPiDDoGk7ICM3N0I5CivnnrogPiBow7lpOyAjNzdCQQor5567ID4gemjEgW47ICM3N0JCCivnnrwgPiBqacSDbjsgIzc3QkMKK+eevSA+IGfFrTsgIzc3QkQKK+eeviA+IHpow6BvOyAjNzdCRQor556/ID4gccWrOyAjNzdCRgor55+AID4gd8OpaTsgIzc3QzAKK+efgSA+IGNoxY91OyAjNzdDMQor55+CID4gc8OgbzsgIzc3QzIKK+efgyA+IG7ErW5nOyAjNzdDMwor55+EID4geMWrbjsgIzc3QzQKK+efhSA+IHnDoG87ICM3N0M1Civnn4YgPiBow7lvOyAjNzdDNgor55+HID4gbcOpbmc7ICM3N0M3Civnn4ggPiBtacOhbjsgIzc3QzgKK+efiSA+IGLEq247ICM3N0M5Civnn4ogPiBtacOhbjsgIzc3Q0EKK+efiyA+IGzDrDsgIzc3Q0IKK+efjCA+IGt1w6BuZzsgIzc3Q0MKK+efjSA+IGp1w6k7ICM3N0NECivnn44gPiB4dcSBbjsgIzc3Q0UKK+efjyA+IG1pw6FuOyAjNzdDRgor55+QID4gaMO5bzsgIzc3RDAKK+efkSA+IGzDujsgIzc3RDEKK+efkiA+IG3DqW5nOyAjNzdEMgor55+TID4gbMOzbmc7ICM3N0QzCivnn5QgPiBndcOgbjsgIzc3RDQKK+eflSA+IG3Eg247ICM3N0Q1Civnn5YgPiB4xK07ICM3N0Q2Civnn5cgPiBjaMO5OyAjNzdENwor55+YID4gdMSDbmc7ICM3N0Q4Civnn5kgPiBrw6BuOyAjNzdEOQor55+aID4gemjFrTsgIzc3REEKK+efmyA+IG3DoW87ICM3N0RCCivnn5wgPiBqxKtuOyAjNzdEQwor55+dID4gbMOtbjsgIzc3REQKK+efniA+IHnDuTsgIzc3REUKK+efnyA+IHNow7lvOyAjNzdERgor55+gID4gY8OoOyAjNzdFMAor55+hID4ganXDqTsgIzc3RTEKK+efoiA+IHNoxK07ICM3N0UyCivnn6MgPiB5xK07ICM3N0UzCivnn6QgPiBzaMSVbjsgIzc3RTQKK+efpSA+IHpoxKs7ICM3N0U1Civnn6YgPiBow7N1OyAjNzdFNgor55+nID4gc2jElW47ICM3N0U3Civnn6ggPiB5xK1uZzsgIzc3RTgKK+efqSA+IGrFrTsgIzc3RTkKK+efqiA+IHpoxY11OyAjNzdFQQor55+rID4gamnEg287ICM3N0VCCivnn6wgPiBjw7pvOyAjNzdFQwor55+tID4gZHXEg247ICM3N0VECivnn64gPiDEg2k7ICM3N0VFCivnn68gPiBqacSDbzsgIzc3RUYKK+efsCA+IHrEk25nOyAjNzdGMAor55+xID4gaMO5bzsgIzc3RjEKK+efsiA+IGLEg2k7ICM3N0YyCivnn7MgPiBzaMOtOyAjNzdGMwor55+0ID4gZMOsbmc7ICM3N0Y0Civnn7UgPiBxw6w7ICM3N0Y1Civnn7YgPiBqxKs7ICM3N0Y2Civnn7cgPiB6xK07ICM3N0Y3Civnn7ggPiBnxIFuOyAjNzdGOAor55+5ID4gd8O5OyAjNzdGOQor55+6ID4gdMWrbzsgIzc3RkEKK+efuyA+IGvDuTsgIzc3RkIKK+efvCA+IHFpxIFuZzsgIzc3RkMKK+efvSA+IHjDrDsgIzc3RkQKK+efviA+IGbDoW47ICM3N0ZFCivnn78gPiBrdcOgbmc7ICM3N0ZGCivnoIAgPiBkw6BuZzsgIzc4MDAKK+eggSA+IG3EgzsgIzc4MDEKK+eggiA+IHNoxIE7ICM3ODAyCivnoIMgPiBkxIFuOyAjNzgwMwor56CEID4ganXDqTsgIzc4MDQKK+eghSA+IGzDrDsgIzc4MDUKK+eghiA+IGbFqzsgIzc4MDYKK+eghyA+IG3DrW47ICM3ODA3CivnoIggPiBuxa1vOyAjNzgwOAor56CJID4gaMO5bzsgIzc4MDkKK+egiiA+IGvDoG5nOyAjNzgwQQor56CLID4gemjErTsgIzc4MEIKK+egjCA+IHHDrDsgIzc4MEMKK+egjSA+IGvEg247ICM3ODBECivnoI4gPiBqacOoOyAjNzgwRQor56CPID4gZsSTbjsgIzc4MEYKK+egkCA+IMOoOyAjNzgxMAor56CRID4gecOgOyAjNzgxMQor56CSID4gcMSrOyAjNzgxMgor56CTID4gemjDqTsgIzc4MTMKK+eglCA+IHnDoW47ICM3ODE0CivnoJUgPiBzw7lpOyAjNzgxNQor56CWID4gemh1xIFuOyAjNzgxNgor56CXID4gY2jEkzsgIzc4MTcKK+egmCA+IGTDuW47ICM3ODE4CivnoJkgPiBwxIFuOyAjNzgxOQor56CaID4gecOgbjsgIzc4MUEKK+egnCA+IGbEk25nOyAjNzgxQwor56CdID4gZsOhOyAjNzgxRAor56CeID4gbcOyOyAjNzgxRQor56CfID4gemjDoDsgIzc4MUYKK+egoCA+IHHFqzsgIzc4MjAKK+egoSA+IHnDuTsgIzc4MjEKK+egoiA+IGzFrW87ICM3ODIyCivnoKMgPiB0w7pvOyAjNzgyMwor56CkID4gdMO6bzsgIzc4MjQKK+egpSA+IGTErTsgIzc4MjUKK+egpiA+IHpow6BpOyAjNzgyNgor56CnID4gemjEk247ICM3ODI3CivnoKggPiDDoGk7ICM3ODI4CivnoKkgPiBmw6hpOyAjNzgyOQor56CqID4gbcWtOyAjNzgyQQor56CrID4gemjFrTsgIzc4MkIKK+egrCA+IGzDrDsgIzc4MkMKK+egrSA+IGJpxIFuOyAjNzgyRAor56CuID4gbsWtOyAjNzgyRQor56CvID4gcMSrbmc7ICM3ODJGCivnoLAgPiBwxJNuZzsgIzc4MzAKK+egsSA+IGzDrW5nOyAjNzgzMQor56CyID4gcMOgbzsgIzc4MzIKK+egsyA+IGzDqDsgIzc4MzMKK+egtCA+IHDDsjsgIzc4MzQKK+egtSA+IGLFjTsgIzc4MzUKK+egtiA+IHDDsjsgIzc4MzYKK+egtyA+IHNoxJNuOyAjNzgzNwor56C4ID4gesOhOyAjNzgzOAor56C5ID4gbsWtbzsgIzc4MzkKK+eguiA+IGzDrDsgIzc4M0EKK+eguyA+IGzDs25nOyAjNzgzQgor56C8ID4gdMOzbmc7ICM3ODNDCivnoL4gPiBsw6w7ICM3ODNFCivnoYAgPiBjaMWtOyAjNzg0MAor56GBID4ga8STbmc7ICM3ODQxCivnoYIgPiBxdcOhbjsgIzc4NDIKK+ehgyA+IHpoxas7ICM3ODQzCivnoYQgPiBrdcSBbmc7ICM3ODQ0CivnoYUgPiBow7lvOyAjNzg0NQor56GGID4gw6g7ICM3ODQ2CivnoYcgPiBuw6FvOyAjNzg0Nwor56GIID4gamnDoTsgIzc4NDgKK+ehiSA+IGzDuTsgIzc4NDkKK+ehiiA+IHfElWk7ICM3ODRBCivnoYsgPiDDoGk7ICM3ODRCCivnoYwgPiBsw7lvOyAjNzg0Qwor56GNID4ga8OobjsgIzc4NEQKK+ehjiA+IHjDrW5nOyAjNzg0RQor56GPID4gecOhbjsgIzc4NEYKK+ehkCA+IHTDs25nOyAjNzg1MAor56GRID4gcMSTbmc7ICM3ODUxCivnoZIgPiB4xKs7ICM3ODUyCivnoZQgPiBow7NuZzsgIzc4NTQKK+ehlSA+IHNow7lvOyAjNzg1NQor56GWID4geGnDoTsgIzc4NTYKK+ehlyA+IHFpxIFvOyAjNzg1Nwor56GZID4gd8OoaTsgIzc4NTkKK+ehmiA+IHFpw6FvOyAjNzg1QQor56GcID4ga8STbmc7ICM3ODVDCivnoZ0gPiB4acSBbzsgIzc4NUQKK+ehniA+IHF1w6g7ICM3ODVFCivnoZ8gPiBjaMOgbjsgIzc4NUYKK+ehoCA+IGzEg25nOyAjNzg2MAor56GhID4gaMOzbmc7ICM3ODYxCivnoaIgPiB5w7o7ICM3ODYyCivnoaMgPiB4acSBbzsgIzc4NjMKK+ehpCA+IHhpw6E7ICM3ODY0CivnoaUgPiBtxINuZzsgIzc4NjUKK+ehpiA+IGzDsm5nOyAjNzg2Ngor56GnID4gxK1vbmc7ICM3ODY3CivnoaggPiBjaMSTOyAjNzg2OAor56GpID4gY2jDqDsgIzc4NjkKK+ehqiA+IMOpOyAjNzg2QQor56GrID4gbMOtdTsgIzc4NkIKK+ehrCA+IHnDrG5nOyAjNzg2Qwor56GtID4gbcOhbmc7ICM3ODZECivnoa4gPiBxdcOoOyAjNzg2RQor56GvID4gecOgbjsgIzc4NkYKK+ehsCA+IHNoxIE7ICM3ODcwCivnobEgPiBrxa1uOyAjNzg3MQor56GyID4gecO5OyAjNzg3Mgor56G1ID4gbMWtOyAjNzg3NQor56G2ID4gY2jElW47ICM3ODc2CivnobcgPiBqacSDbjsgIzc4NzcKK+ehuCA+IG51w6g7ICM3ODc4CivnobkgPiBzxY1uZzsgIzc4NzkKK+ehuiA+IHpow7pvOyAjNzg3QQor56G7ID4ga8STbmc7ICM3ODdCCivnobwgPiBww6luZzsgIzc4N0MKK+ehvSA+IHnEg247ICM3ODdECivnob4gPiB6aMO5aTsgIzc4N0UKK+ehvyA+IGvFjW5nOyAjNzg3Rgor56KAID4gY8Opbmc7ICM3ODgwCivnooEgPiBxw607ICM3ODgxCivnooIgPiB6w7JuZzsgIzc4ODIKK+eigyA+IHHDrG5nOyAjNzg4Mwor56KEID4gbMOtbjsgIzc4ODQKK+eihSA+IGrFq247ICM3ODg1CivnooYgPiBixY07ICM3ODg2CivnoocgPiBkw6xuZzsgIzc4ODcKK+eiiCA+IG3DrW47ICM3ODg4CivnookgPiBkacSBbzsgIzc4ODkKK+eiiiA+IGppxIFuOyAjNzg4QQor56KLID4gaMOoOyAjNzg4Qgor56KMID4gbMO5OyAjNzg4Qwor56KNID4gw6BpOyAjNzg4RAor56KOID4gc8O5aTsgIzc4OEUKK+eijyA+IHF1w6g7ICM3ODhGCivnopAgPiBsw61uZzsgIzc4OTAKK+eikSA+IGLEk2k7ICM3ODkxCivnopIgPiB5w61uOyAjNzg5Mgor56KTID4gZMO5aTsgIzc4OTMKK+eilCA+IHfFrTsgIzc4OTQKK+eilSA+IHHDrTsgIzc4OTUKK+eiliA+IGzDuW47ICM3ODk2CivnopcgPiB3xINuOyAjNzg5Nwor56KYID4gZGnEg247ICM3ODk4CivnopkgPiBnxIFuZzsgIzc4OTkKK+eimiA+IHDDqWk7ICM3ODlBCivnopsgPiBxw6w7ICM3ODlCCivnopwgPiBjaMSVbjsgIzc4OUMKK+einSA+IHJ1xINuOyAjNzg5RAor56KeID4gecOhbjsgIzc4OUUKK+einyA+IGRpw6k7ICM3ODlGCivnoqAgPiBkw6xuZzsgIzc4QTAKK+eioSA+IGTDujsgIzc4QTEKK+eioiA+IHTDum87ICM3OEEyCivnoqMgPiBqacOpOyAjNzhBMwor56KkID4gecSrbmc7ICM3OEE0CivnoqUgPiBiacSDbjsgIzc4QTUKK+eipiA+IGvDqDsgIzc4QTYKK+eipyA+IGLDrDsgIzc4QTcKK+eiqCA+IHfEk2k7ICM3OEE4CivnoqkgPiBzaMO5bzsgIzc4QTkKK+eiqiA+IHpoxJNuOyAjNzhBQQor56KrID4gZHXDoG47ICM3OEFCCivnoqwgPiB4acOhOyAjNzhBQwor56KtID4gZMOgbmc7ICM3OEFECivnoq4gPiB0w607ICM3OEFFCivnoq8gPiBuxINvOyAjNzhBRgor56KwID4gcMOobmc7ICM3OEIwCivnorEgPiBqacSDbjsgIzc4QjEKK+eisiA+IGTDrDsgIzc4QjIKK+eisyA+IHTDoG47ICM3OEIzCivnorQgPiBjaMOhOyAjNzhCNAor56K2ID4gccOsOyAjNzhCNgor56K4ID4gZsSTbmc7ICM3OEI4CivnorkgPiB4dcOgbjsgIzc4QjkKK+eiuiA+IHF1w6g7ICM3OEJBCivnorsgPiBxdcOoOyAjNzhCQgor56K8ID4gbcSDOyAjNzhCQwor56K9ID4gZ8WNbmc7ICM3OEJECivnor4gPiBuacOgbjsgIzc4QkUKK+eivyA+IHPDuTsgIzc4QkYKK+ejgCA+IMOpOyAjNzhDMAor56OBID4gY8OtOyAjNzhDMQor56OCID4gbMOsdTsgIzc4QzIKK+ejgyA+IHPEqzsgIzc4QzMKK+ejhCA+IHTDoW5nOyAjNzhDNAor56OFID4gYsOgbmc7ICM3OEM1Civno4YgPiBodcOhOyAjNzhDNgor56OHID4gcMSrOyAjNzhDNwor56OIID4gd8SVaTsgIzc4QzgKK+ejiSA+IHPEg25nOyAjNzhDOQor56OKID4gbMSVaTsgIzc4Q0EKK+ejiyA+IGPFq287ICM3OENCCivno4wgPiB6aMSTbjsgIzc4Q0MKK+ejjSA+IHhpw6E7ICM3OENECivno44gPiBxxKs7ICM3OENFCivno48gPiBsacOhbjsgIzc4Q0YKK+ejkCA+IHDDoW47ICM3OEQwCivno5EgPiB3w6hpOyAjNzhEMQor56OSID4gecWtbjsgIzc4RDIKK+ejkyA+IGTFq2k7ICM3OEQzCivno5QgPiB6aMOpOyAjNzhENAor56OVID4ga8STOyAjNzhENQor56OWID4gbMSBOyAjNzhENgor56OYID4gccOsbmc7ICM3OEQ4Civno5kgPiBnxa1uOyAjNzhEOQor56OaID4gemh1xIFuOyAjNzhEQQor56ObID4gY2jDoW47ICM3OERCCivno5wgPiBxw6w7ICM3OERDCivno50gPiDDoW87ICM3OERECivno54gPiBwxJNuZzsgIzc4REUKK+ejnyA+IGzDuTsgIzc4REYKK+ejoCA+IGzFrTsgIzc4RTAKK+ejoSA+IGvDoG47ICM3OEUxCivno6IgPiBxacSDbmc7ICM3OEUyCivno6MgPiBjaMSVbjsgIzc4RTMKK+ejpCA+IHnErW47ICM3OEU0Civno6UgPiBsxJVpOyAjNzhFNQor56OmID4gYmnEgW87ICM3OEU2Civno6cgPiBxw6w7ICM3OEU3Civno6ggPiBtw7M7ICM3OEU4Civno6kgPiBxxKs7ICM3OEU5Civno6ogPiBjxatpOyAjNzhFQQor56OrID4gesWNbmc7ICM3OEVCCivno6wgPiBxw6xuZzsgIzc4RUMKK+ejrSA+IGNow7lvOyAjNzhFRAor56OvID4gasSrOyAjNzhFRgor56OwID4gc2jDoG47ICM3OEYwCivno7EgPiBsw6FvOyAjNzhGMQor56OyID4gccO6OyAjNzhGMgor56OzID4gesSTbmc7ICM3OEYzCivno7QgPiBkw6huZzsgIzc4RjQKK+ejtSA+IGppw6BuOyAjNzhGNQor56O2ID4geMOsOyAjNzhGNgor56O3ID4gbMOsbjsgIzc4RjcKK+ejuCA+IGTDrG5nOyAjNzhGOAor56O5ID4gZGnDoG47ICM3OEY5Civno7ogPiBodcOhbmc7ICM3OEZBCivno7sgPiBww6FuOyAjNzhGQgor56O8ID4gesOhOyAjNzhGQwor56O9ID4gcWnEgW87ICM3OEZECivno74gPiBkxKs7ICM3OEZFCivno78gPiBsw6w7ICM3OEZGCivnpIEgPiBqacSBbzsgIzc5MDEKK+ekgyA+IHpoxINuZzsgIzc5MDMKK+ekhCA+IHFpw6FvOyAjNzkwNAor56SFID4gZMWrbjsgIzc5MDUKK+ekhiA+IHhpxINuOyAjNzkwNgor56SHID4gecO5OyAjNzkwNwor56SIID4gemjDuWk7ICM3OTA4CivnpIkgPiBow6k7ICM3OTA5CivnpIogPiBow7lvOyAjNzkwQQor56SLID4gemjDoWk7ICM3OTBCCivnpIwgPiBsw6hpOyAjNzkwQwor56SNID4ga8SVOyAjNzkwRAor56SOID4gY2jFrTsgIzc5MEUKK+ekjyA+IGrDrTsgIzc5MEYKK+ekkCA+IHF1w6g7ICM3OTEwCivnpJEgPiBkw6BuZzsgIzc5MTEKK+ekkiA+IHnErTsgIzc5MTIKK+ekkyA+IGppxIFuZzsgIzc5MTMKK+eklCA+IHDDrDsgIzc5MTQKK+eklSA+IHDEqzsgIzc5MTUKK+ekliA+IHnDuTsgIzc5MTYKK+eklyA+IHDEq247ICM3OTE3CivnpJggPiBxw6w7ICM3OTE4CivnpJkgPiDDoGk7ICM3OTE5CivnpJogPiBrw6BpOyAjNzkxQQor56SbID4gamnEgW47ICM3OTFCCivnpJwgPiB5w7k7ICM3OTFDCivnpJ0gPiBydcSDbjsgIzc5MUQKK+ekniA+IG3DqW5nOyAjNzkxRQor56SfID4gcMOgbzsgIzc5MUYKK+ekoCA+IGPDrTsgIzc5MjAKK+ekoyA+IG1pw6g7ICM3OTIzCivnpKQgPiBjxIM7ICM3OTI0CivnpKUgPiB4acOhbjsgIzc5MjUKK+ekpiA+IGt1w6BuZzsgIzc5MjYKK+ekpyA+IGzDqGk7ICM3OTI3CivnpKggPiBsxJVpOyAjNzkyOAor56SpID4gemjDrDsgIzc5MjkKK+ekqiA+IGzDrDsgIzc5MkEKK+ekqyA+IGzDrDsgIzc5MkIKK+ekrCA+IGbDoW47ICM3OTJDCivnpK0gPiBxdcOoOyAjNzkyRAor56SuID4gcMOgbzsgIzc5MkUKK+ekryA+IHnEq25nOyAjNzkyRgor56SwID4gbMOsOyAjNzkzMAor56SxID4gbMOzbmc7ICM3OTMxCivnpLIgPiBsw7NuZzsgIzc5MzIKK+eksyA+IG3DsjsgIzc5MzMKK+ektCA+IGLDszsgIzc5MzQKK+ektSA+IHNodcSBbmc7ICM3OTM1CivnpLYgPiBndcOgbjsgIzc5MzYKK+ektyA+IGzDoW47ICM3OTM3CivnpLggPiB6xINuOyAjNzkzOAor56S5ID4gecOhbjsgIzc5MzkKK+ekuiA+IHNow6w7ICM3OTNBCivnpLsgPiBzaMOsJyAnesOsJyAncMOhbmc7ICM3OTNCCivnpLwgPiBsxK07ICM3OTNDCivnpL0gPiByw6luZzsgIzc5M0QKK+ekviA+IHNow6g7ICM3OTNFCivnpL8gPiB5dcOoOyAjNzkzRgor56WAID4gc8OsOyAjNzk0MAor56WBID4gccOtOyAjNzk0MQor56WCID4gdMSBOyAjNzk0Mgor56WDID4gbcOgOyAjNzk0Mwor56WEID4geGnDqDsgIzc5NDQKK+elhSA+IHhpxIFuOyAjNzk0NQor56WGID4geGnEgW47ICM3OTQ2CivnpYcgPiB6aMSrOyAjNzk0Nwor56WIID4gccOtOyAjNzk0OAor56WJID4gemjErTsgIzc5NDkKK+eliiA+IGLEk25nOyAjNzk0QQor56WLID4gZMO5aTsgIzc5NEIKK+eljCA+IHpow7JuZzsgIzc5NEMKK+eljiA+IHnEqzsgIzc5NEUKK+eljyA+IHNow607ICM3OTRGCivnpZAgPiB5w7J1OyAjNzk1MAor56WRID4gemjDrDsgIzc5NTEKK+elkiA+IHRpw6FvOyAjNzk1Mgor56WTID4gZsO6OyAjNzk1Mwor56WUID4gZsO5OyAjNzk1NAor56WVID4gbcOsOyAjNzk1NQor56WWID4gesWtOyAjNzk1Ngor56WXID4gemjEqzsgIzc5NTcKK+elmCA+IHN1w6BuOyAjNzk1OAor56WZID4gbcOoaTsgIzc5NTkKK+elmiA+IHrDuW87ICM3OTVBCivnpZsgPiBxxas7ICM3OTVCCivnpZwgPiBow7k7ICM3OTVDCivnpZ0gPiB6aMO5OyAjNzk1RAor56WeID4gc2jDqW47ICM3OTVFCivnpZ8gPiBzw7lpOyAjNzk1Rgor56WgID4gY8OtOyAjNzk2MAor56WhID4gY2jDoWk7ICM3OTYxCivnpaIgPiBtw607ICM3OTYyCivnpaMgPiBsx5o7ICM3OTYzCivnpaQgPiB5xa07ICM3OTY0CivnpaUgPiB4acOhbmc7ICM3OTY1CivnpaYgPiB3w7o7ICM3OTY2CivnpacgPiB0acSBbzsgIzc5NjcKK+elqCA+IHBpw6BvOyAjNzk2OAor56WpID4gemjFqzsgIzc5NjkKK+elqiA+IGfFrWk7ICM3OTZBCivnpasgPiB4acOhOyAjNzk2Qgor56WsID4gemjEqzsgIzc5NkMKK+elrSA+IGrDrDsgIzc5NkQKK+elriA+IGfDoG87ICM3OTZFCivnpa8gPiB6aMSTbjsgIzc5NkYKK+elsCA+IGfDoG87ICM3OTcwCivnpbEgPiBzaMO5aTsgIzc5NzEKK+elsiA+IGrEq247ICM3OTcyCivnpbMgPiBjaMSVbjsgIzc5NzMKK+eltCA+IGfEgWk7ICM3OTc0CivnpbUgPiBrxa1uOyAjNzk3NQor56W2ID4gZMOsOyAjNzk3Ngor56W3ID4gZMSDbzsgIzc5NzcKK+eluCA+IGjDuW87ICM3OTc4CivnpbkgPiB0w6FvOyAjNzk3OQor56W6ID4gccOtOyAjNzk3QQor56W7ID4gZ8O5OyAjNzk3Qgor56W8ID4gZ3XDoG47ICM3OTdDCivnpb0gPiB6w7lpOyAjNzk3RAor56W+ID4gbMOtbmc7ICM3OTdFCivnpb8gPiBsw7k7ICM3OTdGCivnpoAgPiBixK1uZzsgIzc5ODAKK+emgSA+IGrDrG47ICM3OTgxCivnpoIgPiBkxINvOyAjNzk4Mgor56aDID4gemjDrTsgIzc5ODMKK+emhCA+IGzDuTsgIzc5ODQKK+emhSA+IHNow6BuOyAjNzk4NQor56aGID4gYsSTaTsgIzc5ODYKK+emhyA+IHpoxJU7ICM3OTg3CivnpoggPiBoxatpOyAjNzk4OAor56aJID4gecWPdTsgIzc5ODkKK+emiiA+IHjDrDsgIzc5OEEKK+emiyA+IHnEq247ICM3OThCCivnpowgPiB6xKs7ICM3OThDCivnpo0gPiBow7lvOyAjNzk4RAor56aOID4gemjEk247ICM3OThFCivnpo8gPiBmw7o7ICM3OThGCivnppAgPiB5dcOgbjsgIzc5OTAKK+emkSA+IHfDujsgIzc5OTEKK+emkiA+IHhpxINuOyAjNzk5Mgor56aTID4gecOhbmc7ICM3OTkzCivnppQgPiB0w607ICM3OTk0CivnppUgPiB5xKs7ICM3OTk1CivnppYgPiBtw6lpOyAjNzk5Ngor56aXID4gc8SrOyAjNzk5Nwor56aYID4gZMOsOyAjNzk5OAor56aaID4gemjDum87ICM3OTlBCivnppsgPiB6aMSTbjsgIzc5OUIKK+emnCA+IHnFj25nOyAjNzk5Qwor56adID4gasOtOyAjNzk5RAor56aeID4gZ8OgbzsgIzc5OUUKK+emnyA+IHTDoW5nOyAjNzk5Rgor56agID4gc8SrOyAjNzlBMAor56ahID4gbcOgOyAjNzlBMQor56aiID4gdMSBOyAjNzlBMgor56akID4geHXEgW47ICM3OUE0CivnpqUgPiBxw607ICM3OUE1CivnpqYgPiB5w7k7ICM3OUE2CivnpqcgPiB4xKs7ICM3OUE3CivnpqggPiBqxKs7ICM3OUE4CivnpqkgPiBzw6w7ICM3OUE5CivnpqogPiBjaMOhbjsgIzc5QUEKK+emqyA+IHTEg247ICM3OUFCCivnpqwgPiBrdcOgaTsgIzc5QUMKK+emrSA+IHPDuWk7ICM3OUFECivnpq4gPiBsxK07ICM3OUFFCivnpq8gPiBuw7NuZzsgIzc5QUYKK+emsCA+IG7ErTsgIzc5QjAKK+emsSA+IGTEg287ICM3OUIxCivnprIgPiBsw6w7ICM3OUIyCivnprMgPiByw6FuZzsgIzc5QjMKK+emtCA+IHl1w6g7ICM3OUI0CivnprUgPiB0w607ICM3OUI1CivnprYgPiB6xINuOyAjNzlCNgor56a3ID4gbMOoaTsgIzc5QjcKK+emuCA+IHLDs3U7ICM3OUI4CivnprkgPiB5xa07ICM3OUI5CivnprogPiB5w7o7ICM3OUJBCivnprsgPiBjaMSrOyAjNzlCQgor56a8ID4geGnDqDsgIzc5QkMKK+emvSA+IHHDrW47ICM3OUJECivnpr4gPiBow6k7ICM3OUJFCivnpr8gPiB0xas7ICM3OUJGCivnp4AgPiB4w6x1OyAjNzlDMAor56eBID4gc8SrOyAjNzlDMQor56eCID4gcsOpbjsgIzc5QzIKK+engyA+IHTFqzsgIzc5QzMKK+enhCA+IHrErTsgIzc5QzQKK+enhSA+IGNow6E7ICM3OUM1Civnp4YgPiBnxINuOyAjNzlDNgor56eHID4gecOsOyAjNzlDNwor56eIID4geGnEgW47ICM3OUM4Civnp4kgPiBixK1uZzsgIzc5QzkKK+eniiA+IG5pw6FuOyAjNzlDQQor56eLID4gccSrdTsgIzc5Q0IKK+enjCA+IHHEq3U7ICM3OUNDCivnp40gPiBjaMOzbmc7ICM3OUNECivnp44gPiBmw6luOyAjNzlDRQor56ePID4gaMOgbzsgIzc5Q0YKK+enkCA+IHnDum47ICM3OUQwCivnp5EgPiBrxJM7ICM3OUQxCivnp5IgPiBtacSDbzsgIzc5RDIKK+enkyA+IHpoxKs7ICM3OUQzCivnp5QgPiBnxJNuZzsgIzc5RDQKK+enlSA+IGLErTsgIzc5RDUKK+enliA+IHpoxKs7ICM3OUQ2Civnp5cgPiB5w7k7ICM3OUQ3Civnp5ggPiBtw6w7ICM3OUQ4Civnp5kgPiBrw7k7ICM3OUQ5Civnp5ogPiBiw6BuOyAjNzlEQQor56ebID4gcMSrOyAjNzlEQgor56ecID4gbsOtOyAjNzlEQwor56edID4gbMOsOyAjNzlERAor56eeID4gecOzdTsgIzc5REUKK+ennyA+IHrFqzsgIzc5REYKK+enoCA+IHDEqzsgIzc5RTAKK+enoSA+IGLDoTsgIzc5RTEKK+enoiA+IGzDrW5nOyAjNzlFMgor56ejID4gbcOyOyAjNzlFMwor56ekID4gY2jDqG5nOyAjNzlFNAor56elID4gbmnDoW47ICM3OUU1Civnp6YgPiBxw61uOyAjNzlFNgor56enID4gecSBbmc7ICM3OUU3Civnp6ggPiB6w7pvOyAjNzlFOAor56epID4gemjDrDsgIzc5RTkKK+enqiA+IHpoxKs7ICM3OUVBCivnp6sgPiBzaMO6OyAjNzlFQgor56esID4gasO5OyAjNzlFQwor56etID4gesStOyAjNzlFRAor56euID4gaMO6bzsgIzc5RUUKK+enryA+IGrEqzsgIzc5RUYKK+ensCA+IGNoxJNuZzsgIzc5RjAKK+ensSA+IHTDs25nOyAjNzlGMQor56eyID4gemjDrDsgIzc5RjIKK+ensyA+IGjDum87ICM3OUYzCivnp7QgPiBow6k7ICM3OUY0Civnp7UgPiB5xKtuOyAjNzlGNQor56e2ID4gesSrOyAjNzlGNgor56e3ID4gemjDrTsgIzc5RjcKK+enuCA+IGppxJM7ICM3OUY4Civnp7kgPiByxJVuOyAjNzlGOQor56e6ID4gZMO5OyAjNzlGQQor56e7ID4gecOtOyAjNzlGQgor56e8ID4gemjFqzsgIzc5RkMKK+envSA+IGjDuWk7ICM3OUZECivnp74gPiBuw7NuZzsgIzc5RkUKK+envyA+IGbFrTsgIzc5RkYKK+eogCA+IHjEqzsgIzdBMDAKK+eogSA+IGvEg287ICM3QTAxCivnqIIgPiBsw6FuZzsgIzdBMDIKK+eogyA+IGbFqzsgIzdBMDMKK+eohCA+IHrDqDsgIzdBMDQKK+eohSA+IHNow7lpOyAjN0EwNQor56iGID4gbMeaOyAjN0EwNgor56iHID4ga8WtbjsgIzdBMDcKK+eoiCA+IGfEg247ICM3QTA4CivnqIkgPiBnxJNuZzsgIzdBMDkKK+eoiiA+IHTDrTsgIzdBMEEKK+eoiyA+IGNow6luZzsgIzdBMEIKK+eojCA+IHTDujsgIzdBMEMKK+eojSA+IHNoxIFvOyAjN0EwRAor56iOID4gc2jDuWk7ICM3QTBFCivnqI8gPiB5w6A7ICM3QTBGCivnqJAgPiBsxa1uOyAjN0ExMAor56iRID4gbMO5OyAjN0ExMQor56iSID4gZ8O5OyAjN0ExMgor56iTID4gesO6bzsgIzdBMTMKK+eolCA+IHLElW47ICM3QTE0CivnqJUgPiB6aMO5bjsgIzdBMTUKK+eoliA+IGLDoG5nOyAjN0ExNgor56iXID4gYsOgaTsgIzdBMTcKK+eomCA+IGrEqzsgIzdBMTgKK+eomSA+IHpow607ICM3QTE5CivnqJogPiB6aMOsOyAjN0ExQQor56ibID4ga8WtbjsgIzdBMUIKK+eonCA+IGzDqW5nOyAjN0ExQwor56idID4gcMOpbmc7ICM3QTFECivnqJ4gPiBrxJM7ICM3QTFFCivnqJ8gPiBixK1uZzsgIzdBMUYKK+eooCA+IGNow7N1OyAjN0EyMAor56ihID4gesO6OyAjN0EyMQor56iiID4gecO5OyAjN0EyMgor56ijID4gc8WrOyAjN0EyMwor56ikID4gbMecZTsgIzdBMjQKK+eopiA+IHnEqzsgIzdBMjYKK+eopyA+IHjDrDsgIzdBMjcKK+eoqCA+IGJpxIFuOyAjN0EyOAor56ipID4gasOsOyAjN0EyOQor56iqID4gZsO5OyAjN0EyQQor56irID4gYsSrOyAjN0EyQgor56isID4gbsO5bzsgIzdBMkMKK+eorSA+IGppxJM7ICM3QTJECivnqK4gPiB6aMWPbmc7ICM3QTJFCivnqK8gPiB6xY1uZzsgIzdBMkYKK+eosCA+IHjFqzsgIzdBMzAKK+eosSA+IGNoxJNuZzsgIzdBMzEKK+eosiA+IGTDoG87ICM3QTMyCivnqLMgPiB3xJVuOyAjN0EzMwor56i0ID4gbGnDoW47ICM3QTM0CivnqLUgPiB6xKs7ICM3QTM1CivnqLYgPiB5w7k7ICM3QTM2CivnqLcgPiBqw6w7ICM3QTM3CivnqLggPiB4w7k7ICM3QTM4CivnqLkgPiB6aMSVbjsgIzdBMzkKK+eouiA+IHpow6w7ICM3QTNBCivnqLsgPiBkw6BvOyAjN0EzQgor56i8ID4gamnDoDsgIzdBM0MKK+eovSA+IGrEqzsgIzdBM0QKK+eoviA+IGfEg287ICM3QTNFCivnqL8gPiBnxINvOyAjN0EzRgor56mAID4gZ8WtOyAjN0E0MAor56mBID4gcsOzbmc7ICM3QTQxCivnqYIgPiBzw7lpOyAjN0E0Mgor56mEID4gasOsOyAjN0E0NAor56mFID4ga8SBbmc7ICM3QTQ1CivnqYYgPiBtw7k7ICM3QTQ2CivnqYcgPiBzaMSBbjsgIzdBNDcKK+epiCA+IG3DqW47ICM3QTQ4CivnqYkgPiB6aMOsOyAjN0E0OQor56mKID4gasOsOyAjN0E0QQor56mLID4gbMO5OyAjN0E0Qgor56mMID4gc8WrOyAjN0E0Qwor56mNID4gasSrOyAjN0E0RAor56mOID4gecStbmc7ICM3QTRFCivnqY8gPiB3xJVuOyAjN0E0Rgor56mQID4gccSrdTsgIzdBNTAKK+epkSA+IHPDqDsgIzdBNTEKK+epkyA+IHnDrDsgIzdBNTMKK+eplCA+IGh1w6FuZzsgIzdBNTQKK+eplSA+IHFpw6g7ICM3QTU1CivnqZYgPiBqxK07ICM3QTU2CivnqZcgPiBzw7lpOyAjN0E1Nwor56mYID4geGnEgW87ICM3QTU4CivnqZkgPiBww7o7ICM3QTU5CivnqZogPiBqacSBbzsgIzdBNUEKK+epmyA+IHpoxatvOyAjN0E1Qgor56mcID4gdMOzbmc7ICM3QTVDCivnqZ4gPiBsx5o7ICM3QTVFCivnqZ8gPiBzw7lpOyAjN0E1Rgor56mgID4gbsOzbmc7ICM3QTYwCivnqaEgPiBzw6g7ICM3QTYxCivnqaIgPiBow7lpOyAjN0E2Mgor56mjID4gcsOhbmc7ICM3QTYzCivnqaQgPiBuw7lvOyAjN0E2NAor56mlID4gecO5OyAjN0E2NQor56mmID4gYmluOyAjN0E2Ngor56mnID4gasOsOyAjN0E2Nwor56moID4gdMO6aTsgIzdBNjgKK+epqSA+IHfElW47ICM3QTY5CivnqaogPiBjaMSTbmc7ICM3QTZBCivnqasgPiBow7lvOyAjN0E2Qgor56msID4gZ8WPbmc7ICM3QTZDCivnqa0gPiBsx5o7ICM3QTZECivnqa4gPiBiacSBbzsgIzdBNkUKK+epsCA+IHLDoW5nOyAjN0E3MAor56mxID4gemjFq287ICM3QTcxCivnqbIgPiBsw607ICM3QTcyCivnqbMgPiB6w6BuOyAjN0E3Mwor56m0ID4geHXDqDsgIzdBNzQKK+eptSA+IHfEgTsgIzdBNzUKK+eptiA+IGrDrHU7ICM3QTc2CivnqbcgPiBxw61vbmc7ICM3QTc3CivnqbggPiB4w6w7ICM3QTc4CivnqbkgPiBxxKtvbmc7ICM3QTc5CivnqbogPiBrxY1uZzsgIzdBN0EKK+epuyA+IHnFqzsgIzdBN0IKK+epvCA+IHPEk247ICM3QTdDCivnqb0gPiBqxK1uZzsgIzdBN0QKK+epviA+IHnDoG87ICM3QTdFCivnqb8gPiBjaHXEgW47ICM3QTdGCivnqoAgPiB6aMWrbjsgIzdBODAKK+eqgSA+IHTDujsgIzdBODEKK+eqgiA+IGzDoW87ICM3QTgyCivnqoMgPiBxacOoOyAjN0E4Mwor56qEID4gemjEg2k7ICM3QTg0CivnqoUgPiB5xINvOyAjN0E4NQor56qGID4gYmnEg247ICM3QTg2CivnqocgPiBiw6FvOyAjN0E4Nwor56qIID4gecSDbzsgIzdBODgKK+eqiSA+IGLErW5nOyAjN0E4OQor56qKID4gd8SBOyAjN0E4QQor56qLID4gemjDujsgIzdBOEIKK+eqjCA+IGppw6BvOyAjN0E4Qwor56qNID4gcWnDoG87ICM3QThECivnqo4gPiBkacOgbzsgIzdBOEUKK+eqjyA+IHfFqzsgIzdBOEYKK+eqkCA+IGfFq2k7ICM3QTkwCivnqpEgPiB5w6FvOyAjN0E5MQor56qSID4gemjDrDsgIzdBOTIKK+eqkyA+IGNodcSBbmc7ICM3QTkzCivnqpQgPiB5xINvOyAjN0E5NAor56qVID4gdGnEg287ICM3QTk1CivnqpYgPiBqacOgbzsgIzdBOTYKK+eqlyA+IGNodcSBbmc7ICM3QTk3CivnqpggPiBqxK1vbmc7ICM3QTk4CivnqpkgPiB4acSBbzsgIzdBOTkKK+eqmiA+IGNow6luZzsgIzdBOUEKK+eqmyA+IGvDsnU7ICM3QTlCCivnqpwgPiBjdcOgbjsgIzdBOUMKK+eqnSA+IHfFjTsgIzdBOUQKK+eqniA+IGTDoG47ICM3QTlFCivnqp8gPiBrxas7ICM3QTlGCivnqqAgPiBrxJM7ICM3QUEwCivnqqEgPiB6aMO5aTsgIzdBQTEKK+eqoiA+IHjDuTsgIzdBQTIKK+eqoyA+IHPDuTsgIzdBQTMKK+eqpCA+IGd1YW47ICM3QUE0CivnqqUgPiBrxatpOyAjN0FBNQor56qmID4gZMOydTsgIzdBQTYKK+eqqCA+IHnDrG47ICM3QUE4CivnqqkgPiB3xY07ICM3QUE5CivnqqogPiB3xIE7ICM3QUFBCivnqqsgPiB5w6A7ICM3QUFCCivnqqwgPiB5w7o7ICM3QUFDCivnqq0gPiBqw7k7ICM3QUFECivnqq4gPiBxw61vbmc7ICM3QUFFCivnqq8gPiB5w6FvOyAjN0FBRgor56qwID4gecOhbzsgIzdBQjAKK+eqsSA+IHRpw6BvOyAjN0FCMQor56qyID4gY2jDoW87ICM3QUIyCivnqrMgPiB5xa07ICM3QUIzCivnqrQgPiB0acOhbjsgIzdBQjQKK+eqtSA+IGRpw6BvOyAjN0FCNQor56q2ID4gasO5OyAjN0FCNgor56q3ID4gbGnDoW87ICM3QUI3CivnqrggPiB4xKs7ICM3QUI4CivnqrkgPiB3w7k7ICM3QUI5CivnqrogPiBrxatpOyAjN0FCQQor56q7ID4gY2h1xIFuZzsgIzdBQkIKK+eqvCA+IHpoxIFvOyAjN0FCQwor56q+ID4ga3XEg247ICM3QUJFCivnqr8gPiBsw7NuZzsgIzdBQkYKK+ergCA+IGNoxJNuZzsgIzdBQzAKK+ergSA+IGPDuWk7ICM3QUMxCivnq4IgPiBwacOhbzsgIzdBQzIKK+ergyA+IHrDoG87ICM3QUMzCivnq4QgPiBjdcOgbjsgIzdBQzQKK+erhSA+IHFpw6BvOyAjN0FDNQor56uGID4gccOtb25nOyAjN0FDNgor56uHID4gZMOydTsgIzdBQzcKK+eriCA+IHrDoG87ICM3QUM4Civnq4kgPiBsxY9uZzsgIzdBQzkKK+eriiA+IHFpw6g7ICM3QUNBCivnq4sgPiBsw6w7ICM3QUNCCivnq4wgPiBjaMO5OyAjN0FDQwor56uNID4gc2jDrScgJ2fFjW5nJyAnc2jEk25nOyAjN0FDRAor56uOID4gZsOydTsgIzdBQ0UKK+erjyA+IHFpxIFuJyAnZ8WNbmcnICdzaMSTbmc7ICM3QUNGCivnq5AgPiBjaMO5OyAjN0FEMAor56uRID4gaMOzbmc7ICM3QUQxCivnq5IgPiBxw607ICM3QUQyCivnq5MgPiBxacSBbicgJ2bEk24nICd6aMSrJyAnecSrJyAnZ8WNbmcnICdzaMSTbmc7ICM3QUQzCivnq5QgPiBnxY1uZycgJ3NoxJNuZzsgIzdBRDQKK+erlSA+IHNow60nICdmxJNuJyAnemjEqycgJ3nEqycgJ2fFjW5nJyAnc2jEk25nOyAjN0FENQor56uWID4gc2jDuTsgIzdBRDYKK+erlyA+IG1pw6BvOyAjN0FENwor56uYID4gasWtOyAjN0FEOAor56uZID4gemjDoG47ICM3QUQ5Civnq5ogPiB6aMO5OyAjN0FEQQor56ubID4gbMOtbmc7ICM3QURCCivnq5wgPiBsw7NuZzsgIzdBREMKK+ernSA+IGLDrG5nOyAjN0FERAor56ueID4gasOsbmc7ICM3QURFCivnq58gPiBqw6xuZzsgIzdBREYKK+eroCA+IHpoxIFuZzsgIzdBRTAKK+eroSA+IHnEqycgJ2fFjW5nJyAnc2jEk25nJyAnZGUnICd5xKsnICdixINpJyAnYsOoaTsgIzdBRTEKK+eroiA+IHPDrDsgIzdBRTIKK+eroyA+IGrDuW47ICM3QUUzCivnq6QgPiBow7NuZzsgIzdBRTQKK+erpSA+IHTDs25nOyAjN0FFNQor56umID4gc8WPbmc7ICM3QUU2Civnq6cgPiBqw6xuZzsgIzdBRTcKK+erqCA+IGRpw6BvOyAjN0FFOAor56upID4gecOsOyAjN0FFOQor56uqID4gc2jDuTsgIzdBRUEKK+erqyA+IGrDrG5nOyAjN0FFQgor56usID4gccWtOyAjN0FFQwor56utID4gamnDqTsgIzdBRUQKK+erriA+IHDDrW5nOyAjN0FFRQor56uvID4gZHXEgW47ICM3QUVGCivnq7AgPiBzaMOhbzsgIzdBRjAKK+ersSA+IHpodcSDbjsgIzdBRjEKK+ersiA+IGPDqW5nOyAjN0FGMgor56uzID4gZMSTbmc7ICM3QUYzCivnq7QgPiBjxatpOyAjN0FGNAor56u1ID4gaHXEgWk7ICM3QUY1Civnq7YgPiBqw6xuZzsgIzdBRjYKK+ertyA+IGvDoG47ICM3QUY3Civnq7ggPiBqw6xuZzsgIzdBRjgKK+eruSA+IHpow7o7ICM3QUY5Civnq7ogPiB6aMO6OyAjN0FGQQor56u7ID4gbMOoOyAjN0FGQgor56u8ID4gcMOpbmc7ICM3QUZDCivnq70gPiB5w7o7ICM3QUZECivnq74gPiBjaMOtOyAjN0FGRQor56u/ID4gZ8SBbjsgIzdBRkYKK+esgCA+IG3DoW5nOyAjN0IwMAor56yBID4gemjDujsgIzdCMDEKK+esgyA+IGTFrTsgIzdCMDMKK+eshCA+IGrEqzsgIzdCMDQKK+eshSA+IHhpw6FvOyAjN0IwNQor56yGID4gYsSBOyAjN0IwNgor56yHID4gc3XDoG47ICM3QjA3CivnrIggPiBqw607ICM3QjA4CivnrIkgPiB6aMSVbjsgIzdCMDkKK+esiiA+IHpow6BvOyAjN0IwQQor56yLID4gc8WtbjsgIzdCMEIKK+esjCA+IHnDoTsgIzdCMEMKK+esjSA+IHpow7lpOyAjN0IwRAor56yOID4geXXDoW47ICM3QjBFCivnrI8gPiBow7k7ICM3QjBGCivnrJAgPiBnxIFuZzsgIzdCMTAKK+eskSA+IHhpw6BvOyAjN0IxMQor56ySID4gY8OpbjsgIzdCMTIKK+eskyA+IHDDrTsgIzdCMTMKK+eslCA+IGLErTsgIzdCMTQKK+eslSA+IGppxINuOyAjN0IxNQor56yWID4gecStOyAjN0IxNgor56yXID4gZMWNbmc7ICM3QjE3CivnrJggPiBzaMSBbjsgIzdCMTgKK+esmSA+IHNoxJNuZzsgIzdCMTkKK+esmiA+IHhpw6E7ICM3QjFBCivnrJsgPiBkw607ICM3QjFCCivnrJwgPiB6aMO6OyAjN0IxQwor56ydID4gbsOgOyAjN0IxRAor56yeID4gY2jEqzsgIzdCMUUKK+esnyA+IGfFqzsgIzdCMUYKK+esoCA+IGzDrDsgIzdCMjAKK+esoSA+IHFpw6g7ICM3QjIxCivnrKIgPiBtxK1uOyAjN0IyMgor56yjID4gYsSBbzsgIzdCMjMKK+espCA+IHRpw6FvOyAjN0IyNAor56ylID4gc8OsOyAjN0IyNQor56ymID4gZsO6OyAjN0IyNgor56ynID4gY8OoOyAjN0IyNwor56yoID4gYsOobjsgIzdCMjgKK+esqSA+IHDDqGk7ICM3QjI5CivnrKogPiBkw6E7ICM3QjJBCivnrKsgPiB6xK07ICM3QjJCCivnrKwgPiBkw6w7ICM3QjJDCivnrK0gPiBsw61uZzsgIzdCMkQKK+esriA+IHrDqTsgIzdCMkUKK+esryA+IG7DujsgIzdCMkYKK+essCA+IGbDujsgIzdCMzAKK+essSA+IGfFj3U7ICM3QjMxCivnrLIgPiBmxIFuOyAjN0IzMgor56yzID4gamnEgTsgIzdCMzMKK+estCA+IGfElTsgIzdCMzQKK+estSA+IGbDoG47ICM3QjM1CivnrLYgPiBzaMStOyAjN0IzNgor56y3ID4gbcSDbzsgIzdCMzcKK+esuCA+IHDFjzsgIzdCMzgKK+esuiA+IGppxIFuOyAjN0IzQQor56y7ID4gccOtb25nOyAjN0IzQgor56y8ID4gbMOzbmc7ICM3QjNDCivnrL4gPiBiacSBbjsgIzdCM0UKK+esvyA+IGzDuW87ICM3QjNGCivnrYAgPiBnw7lpOyAjN0I0MAor562BID4gccWtOyAjN0I0MQor562CID4gY2jDrTsgIzdCNDIKK+etgyA+IHnEq247ICM3QjQzCivnrYQgPiB5w6BvOyAjN0I0NAor562FID4geGnEg247ICM3QjQ1CivnrYYgPiBixK07ICM3QjQ2CivnrYcgPiBxw61vbmc7ICM3QjQ3CivnrYggPiBndcSBOyAjN0I0OAor562JID4gZMSVbmc7ICM3QjQ5CivnrYogPiBqacSDbzsgIzdCNEEKK+etiyA+IGrEq247ICM3QjRCCivnrYwgPiBxdcOhbjsgIzdCNEMKK+etjSA+IHPFrW47ICM3QjRECivnrY4gPiByw7o7ICM3QjRFCivnrY8gPiBmw6E7ICM3QjRGCivnrZAgPiBrdcSBbmc7ICM3QjUwCivnrZEgPiB6aMO6OyAjN0I1MQor562SID4gdMWPbmc7ICM3QjUyCivnrZMgPiBqxKs7ICM3QjUzCivnrZQgPiBkw6E7ICM3QjU0CivnrZUgPiB4w61uZzsgIzdCNTUKK+etliA+IGPDqDsgIzdCNTYKK+etlyA+IHpow7JuZzsgIzdCNTcKK+etmCA+IGvDsnU7ICM3QjU4CivnrZkgPiBsw6FpOyAjN0I1OQor562aID4gYsOsOyAjN0I1QQor562bID4gc2jEgWk7ICM3QjVCCivnrZwgPiBkxIFuZzsgIzdCNUMKK+etnSA+IHpoxJNuZzsgIzdCNUQKK+etniA+IGPDqDsgIzdCNUUKK+etnyA+IGbFqzsgIzdCNUYKK+etoCA+IHnDum47ICM3QjYwCivnraEgPiB0w7o7ICM3QjYxCivnraIgPiBww6E7ICM3QjYyCivnraMgPiBsw6w7ICM3QjYzCivnraQgPiBsw6FuZzsgIzdCNjQKK+etpSA+IGrFrTsgIzdCNjUKK+etpiA+IGd1xINuOyAjN0I2Ngor562nID4gamnEg247ICM3QjY3CivnraggPiBow6FuOyAjN0I2OAor562pID4gdMOzbmc7ICM3QjY5CivnraogPiB4acOhOyAjN0I2QQor562rID4gemjDrDsgIzdCNkIKK+etrCA+IGNow6luZzsgIzdCNkMKK+etrSA+IHN1w6BuOyAjN0I2RAor562uID4gc2jDrDsgIzdCNkUKK+etryA+IHpow7k7ICM3QjZGCivnrbAgPiB6w7pvOyAjN0I3MAor562xID4geGnEg287ICM3QjcxCivnrbIgPiBzaMSBbzsgIzdCNzIKK+etsyA+IHTDrW5nOyAjN0I3Mwor5620ID4gY8OoOyAjN0I3NAor5621ID4gecOhbjsgIzdCNzUKK+ettiA+IGfEg287ICM3Qjc2CivnrbcgPiBrdcOgaTsgIzdCNzcKK+etuCA+IGfEgW47ICM3Qjc4CivnrbkgPiBjaMOzdTsgIzdCNzkKK+etuyA+IGfDoG5nOyAjN0I3Qgor5628ID4gecO6bjsgIzdCN0MKK+etviA+IHFpxIFuOyAjN0I3RQor562/ID4geGnEg287ICM3QjdGCivnroAgPiBqacSDbjsgIzdCODAKK+eugSA+IHDDujsgIzdCODEKK+eugiA+IGzDoWk7ICM3QjgyCivnroMgPiB6xY11OyAjN0I4Mwor566EID4gYsOsOyAjN0I4NAor566FID4gYsOsOyAjN0I4NQor566GID4gYsOsOyAjN0I4Ngor566HID4gZ8OoOyAjN0I4Nwor566IID4gY2jDrTsgIzdCODgKK+euiSA+IGd1xINpOyAjN0I4OQor566KID4gecWrOyAjN0I4QQor566LID4gamnEgW47ICM3QjhCCivnrowgPiB6aMOgbzsgIzdCOEMKK+eujSA+IGfFqzsgIzdCOEQKK+eujiA+IGNow607ICM3QjhFCivnro8gPiB6aMSTbmc7ICM3QjhGCivnrpAgPiBqxKtuZzsgIzdCOTAKK+eukSA+IHNow6A7ICM3QjkxCivnrpIgPiB6aMWPdTsgIzdCOTIKK+eukyA+IGzDuTsgIzdCOTMKK+eulCA+IGLDszsgIzdCOTQKK+eulSA+IGrEqzsgIzdCOTUKK+euliA+IGzDrW47ICM3Qjk2CivnrpcgPiBzdcOgbjsgIzdCOTcKK+eumCA+IGrDuW47ICM3Qjk4CivnrpkgPiBmw7o7ICM3Qjk5CivnrpogPiB6aMOhOyAjN0I5QQor566bID4gZ8WrOyAjN0I5Qgor566cID4ga8WNbmc7ICM3QjlDCivnrp0gPiBxacOhbjsgIzdCOUQKK+euniA+IHF1xIFuOyAjN0I5RQor566fID4gasO5bjsgIzdCOUYKK+euoCA+IGNow7ppOyAjN0JBMAor566hID4gZ3XEg247ICM3QkExCivnrqIgPiB5dcSBbjsgIzdCQTIKK+euoyA+IGPDqDsgIzdCQTMKK+eupCA+IGrDujsgIzdCQTQKK+eupSA+IGLFjzsgIzdCQTUKK+eupiA+IHrDqTsgIzdCQTYKK+eupyA+IHFpw6g7ICM3QkE3CivnrqggPiB0w7lvOyAjN0JBOAor566pID4gbMO6bzsgIzdCQTkKK+euqiA+IGTEgW47ICM3QkFBCivnrqsgPiB4acSBbzsgIzdCQUIKK+eurCA+IHLDuW87ICM3QkFDCivnrq0gPiBqacOgbjsgIzdCQUQKK+euriA+IHh1YW47ICM3QkFFCivnrq8gPiBiacSBbjsgIzdCQUYKK+eusCA+IHPFrW47ICM3QkIwCivnrrEgPiB4acSBbmc7ICM3QkIxCivnrrIgPiB4acSDbjsgIzdCQjIKK+eusyA+IHDDrW5nOyAjN0JCMwor5660ID4gemjEk247ICM3QkI0CivnrrUgPiBzaMSVbmc7ICM3QkI1CivnrrYgPiBow7o7ICM3QkI2CivnrrcgPiBzaMSrOyAjN0JCNwor5664ID4gemjDuTsgIzdCQjgKK+euuSA+IHl1xJM7ICM3QkI5CivnrrogPiBjaMWtbjsgIzdCQkEKK+euuyA+IGzHnDsgIzdCQkIKK+euvCA+IHfFqzsgIzdCQkMKK+euvSA+IGTFj25nOyAjN0JCRAor566+ID4geGnEgW87ICM3QkJFCivnrr8gPiBqw607ICM3QkJGCivnr4AgPiBqacOpOyAjN0JDMAor56+BID4gaHXDoW5nOyAjN0JDMQor56+CID4geMSrbmc7ICM3QkMyCivnr4MgPiBtw6lpOyAjN0JDMwor56+EID4gZsOgbjsgIzdCQzQKK+evhSA+IGNow7ppOyAjN0JDNQor56+GID4gemh1w6BuOyAjN0JDNgor56+HID4gcGnEgW47ICM3QkM3Civnr4ggPiBmxJNuZzsgIzdCQzgKK+eviSA+IHpow7o7ICM3QkM5Civnr4ogPiBow7NuZzsgIzdCQ0EKK+eviyA+IHFpw6g7ICM3QkNCCivnr4wgPiBow7N1OyAjN0JDQwor56+NID4gccSrdTsgIzdCQ0QKK+evjiA+IG1pxINvOyAjN0JDRQor56+PID4gcWnDoG47ICM3QkNGCivnr5EgPiBrw7lpOyAjN0JEMQor56+TID4gbMWPdTsgIzdCRDMKK+evlCA+IHnDum47ICM3QkQ0Civnr5UgPiBow6k7ICM3QkQ1Civnr5YgPiB0w6FuZzsgIzdCRDYKK+evlyA+IHl1w6g7ICM3QkQ3Civnr5ggPiBjaMWNdTsgIzdCRDgKK+evmSA+IGfEgW87ICM3QkQ5Civnr5ogPiBmxJVpOyAjN0JEQQor56+bID4gcsO5bzsgIzdCREIKK+evnCA+IHpoxJNuZzsgIzdCREMKK+evnSA+IGfFjXU7ICM3QkRECivnr54gPiBuacOoOyAjN0JERQor56+fID4gcWnDoG47ICM3QkRGCivnr6AgPiB4acSDbzsgIzdCRTAKK+evoSA+IGN1w6BuOyAjN0JFMQor56+iID4gZ8WNbmc7ICM3QkUyCivnr6MgPiBww6FuZzsgIzdCRTMKK+evpCA+IGTFrTsgIzdCRTQKK+evpSA+IGzDrDsgIzdCRTUKK+evpiA+IGLDrDsgIzdCRTYKK+evpyA+IHpow7pvOyAjN0JFNwor56+oID4gY2jDujsgIzdCRTgKK+evqSA+IHNoxIFpOyAjN0JFOQor56+qID4gY2jDrTsgIzdCRUEKK+evqyA+IHpow7o7ICM3QkVCCivnr6wgPiBxacSBbmc7ICM3QkVDCivnr60gPiBsw7NuZzsgIzdCRUQKK+evriA+IGzDoW47ICM3QkVFCivnr68gPiBqacSBbjsgIzdCRUYKK+evsCA+IGLDuTsgIzdCRjAKK+evsSA+IGzDrTsgIzdCRjEKK+evsiA+IGjDuWk7ICM3QkYyCivnr7MgPiBiw6w7ICM3QkYzCivnr7QgPiBkw607ICM3QkY0Civnr7UgPiBjxY1uZzsgIzdCRjUKK+evtiA+IHnEgW47ICM3QkY2Civnr7cgPiBww6luZzsgIzdCRjcKK+evuCA+IHPEk247ICM3QkY4Civnr7kgPiB6aHXDoG47ICM3QkY5Civnr7ogPiBww6FpOyAjN0JGQQor56+7ID4gcGnDoG87ICM3QkZCCivnr7wgPiBkxY11OyAjN0JGQwor56+9ID4gecWtOyAjN0JGRAor56++ID4gbWnDqDsgIzdCRkUKK+evvyA+IHpodcSBbjsgIzdCRkYKK+ewgCA+IHrDqTsgIzdDMDAKK+ewgSA+IHjErTsgIzdDMDEKK+ewgiA+IGfDum87ICM3QzAyCivnsIMgPiB5w607ICM3QzAzCivnsIQgPiBow7k7ICM3QzA0CivnsIUgPiBjaMSDbjsgIzdDMDUKK+ewhiA+IGvDsnU7ICM3QzA2CivnsIcgPiBjw7k7ICM3QzA3CivnsIggPiBww61uZzsgIzdDMDgKK+ewiSA+IGNow7J1OyAjN0MwOQor57CKID4gasSrOyAjN0MwQQor57CLID4gZ8WtaTsgIzdDMEIKK+ewjCA+IHPDuTsgIzdDMEMKK+ewjSA+IGzFj3U7ICM3QzBECivnsI4gPiB6aMOgOyAjN0MwRQor57CPID4gbMO5OyAjN0MwRgor57CQID4gbmnEg247ICM3QzEwCivnsJEgPiBzxatvOyAjN0MxMQor57CSID4gY3XDoG47ICM3QzEyCivnsJQgPiBzxatvOyAjN0MxNAor57CVID4gbMOoOyAjN0MxNQor57CWID4gZHXDoG47ICM3QzE2CivnsJggPiB4acSBbzsgIzdDMTgKK+ewmSA+IGLDszsgIzdDMTkKK+ewmiA+IG3DrDsgIzdDMUEKK+ewmyA+IHPEqzsgIzdDMUIKK+ewnCA+IGTDoG5nOyAjN0MxQwor57CdID4gbGnDoW87ICM3QzFECivnsJ4gPiBkxIFuOyAjN0MxRQor57CfID4gZGnDoG47ICM3QzFGCivnsKAgPiBmxa07ICM3QzIwCivnsKEgPiBqacSDbjsgIzdDMjEKK+ewoiA+IG3ErW47ICM3QzIyCivnsKMgPiBrw7lpOyAjN0MyMwor57CkID4gZMOgaTsgIzdDMjQKK+ewpSA+IHFpw6FvOyAjN0MyNQor57CmID4gZMSTbmc7ICM3QzI2CivnsKcgPiBodcOhbmc7ICM3QzI3CivnsKggPiBzxa1uOyAjN0MyOAor57CpID4gbMOhbzsgIzdDMjkKK+ewqiA+IHrEgW47ICM3QzJBCivnsKsgPiB4acSBbzsgIzdDMkIKK+ewrCA+IGTDuTsgIzdDMkMKK+ewrSA+IHNow6w7ICM3QzJECivnsK4gPiB6xIFuOyAjN0MyRQor57CwID4gcMOhaTsgIzdDMzAKK+ewsiA+IHDDoWk7ICM3QzMyCivnsLMgPiBnw6BuOyAjN0MzMwor57C0ID4gasO5OyAjN0MzNAor57C1ID4gZMO5OyAjN0MzNQor57C2ID4gbMO5OyAjN0MzNgor57C3ID4gecOhbjsgIzdDMzcKK+ewuCA+IGLDsjsgIzdDMzgKK+ewuSA+IGTEgW5nOyAjN0MzOQor57C6ID4gc8OgaTsgIzdDM0EKK+ewuyA+IGvEkzsgIzdDM0IKK+ewvCA+IGzDs25nOyAjN0MzQwor57C9ID4gcWnEgW47ICM3QzNECivnsL4gPiBsacOhbjsgIzdDM0UKK+ewvyA+IGLDszsgIzdDM0YKK+exgCA+IHpow7J1OyAjN0M0MAor57GBID4gbMOgaTsgIzdDNDEKK+exgyA+IGzDoW47ICM3QzQzCivnsYQgPiBrw7lpOyAjN0M0NAor57GFID4gecO6OyAjN0M0NQor57GGID4geXXDqDsgIzdDNDYKK+exhyA+IGjDoW87ICM3QzQ3CivnsYggPiB6aMSTbjsgIzdDNDgKK+exiSA+IHTDoWk7ICM3QzQ5CivnsYogPiB0w6w7ICM3QzRBCivnsYsgPiBtw607ICM3QzRCCivnsYwgPiBjaMOzdTsgIzdDNEMKK+exjSA+IGrDrTsgIzdDNEQKK+exkCA+IHTDqW5nOyAjN0M1MAor57GRID4gemh1w6BuOyAjN0M1MQor57GSID4gemjDsnU7ICM3QzUyCivnsZMgPiBmxIFuOyAjN0M1Mwor57GUID4gc8WPdTsgIzdDNTQKK+exlSA+IHpow7J1OyAjN0M1NQor57GXID4gemjDum87ICM3QzU3CivnsZggPiB0w6luZzsgIzdDNTgKK+exmSA+IGzDuTsgIzdDNTkKK+exmiA+IGzDujsgIzdDNUEKK+exmyA+IGppxIFuOyAjN0M1Qgor57GcID4gdMO5bzsgIzdDNUMKK+exnSA+IHnDrW5nOyAjN0M1RAor57GeID4gecO5OyAjN0M1RQor57GfID4gbMOgaTsgIzdDNUYKK+exoCA+IGzDs25nOyAjN0M2MAor57GiID4gbGnDoW47ICM3QzYyCivnsaMgPiBsw6FuOyAjN0M2Mwor57GkID4gcWnEgW47ICM3QzY0CivnsaUgPiB5dcOoOyAjN0M2NQor57GmID4gemjFjW5nOyAjN0M2Ngor57GnID4gccO6OyAjN0M2Nwor57GoID4gbGnDoW47ICM3QzY4CivnsakgPiBiacSBbjsgIzdDNjkKK+exqiA+IGR1w6BuOyAjN0M2QQor57GrID4genXEg247ICM3QzZCCivnsawgPiBsw607ICM3QzZDCivnsa0gPiBzxKs7ICM3QzZECivnsa4gPiBsw7pvOyAjN0M2RQor57GvID4gecOtbmc7ICM3QzZGCivnsbAgPiB5dcOoOyAjN0M3MAor57GxID4gemjDum87ICM3QzcxCivnsbIgPiB4xas7ICM3QzcyCivnsbMgPiBtxK07ICM3QzczCivnsbQgPiBkw607ICM3Qzc0CivnsbUgPiBmw6FuOyAjN0M3NQor57G2ID4gc2jEk247ICM3Qzc2CivnsbcgPiB6aMOpOyAjN0M3Nwor57G4ID4gc2jEk247ICM3Qzc4CivnsbkgPiBux5o7ICM3Qzc5CivnsbogPiB4acOpOyAjN0M3QQor57G7ID4gbMOoaTsgIzdDN0IKK+exvCA+IHhpxIFuOyAjN0M3Qwor57G9ID4gesStOyAjN0M3RAor57G+ID4gbsOtOyAjN0M3RQor57G/ID4gY8O5bjsgIzdDN0YKK+eygSA+IHFpxIFuOyAjN0M4MQor57KDID4gYsStOyAjN0M4Mwor57KEID4gYsSDbjsgIzdDODQKK+eyhSA+IHfDuTsgIzdDODUKK+eyhiA+IHNoxIE7ICM3Qzg2CivnsocgPiBrxIFuZzsgIzdDODcKK+eyiCA+IHLFj3U7ICM3Qzg4CivnsokgPiBmxJVuOyAjN0M4OQor57KKID4gYsOsOyAjN0M4QQor57KLID4gY8O5aTsgIzdDOEIKK+eyjSA+IGzDrTsgIzdDOEQKK+eyjiA+IGNoxK07ICM3QzhFCivnspEgPiBixIE7ICM3QzkxCivnspIgPiBsw6w7ICM3QzkyCivnspMgPiBnxIFuOyAjN0M5Mwor57KUID4gasO5OyAjN0M5NAor57KVID4gcMOyOyAjN0M5NQor57KWID4gbcOyOyAjN0M5Ngor57KXID4gY8WrOyAjN0M5Nwor57KYID4gbmnDoW47ICM3Qzk4CivnspkgPiB6aMOydTsgIzdDOTkKK+eymiA+IGzDrTsgIzdDOUEKK+eymyA+IHPDuTsgIzdDOUIKK+eynCA+IHRpw6BvOyAjN0M5Qwor57KdID4gbMOsOyAjN0M5RAor57KeID4gccSrOyAjN0M5RQor57KfID4gc8O5OyAjN0M5Rgor57KgID4gaMOzbmc7ICM3Q0EwCivnsqEgPiB0w7NuZzsgIzdDQTEKK+eyoiA+IHrEqzsgIzdDQTIKK+eyoyA+IGPDqDsgIzdDQTMKK+eypCA+IHl1w6g7ICM3Q0E0CivnsqUgPiB6aMWNdTsgIzdDQTUKK+eypiA+IGzDrG47ICM3Q0E2CivnsqcgPiB6aHXEgW5nOyAjN0NBNwor57KoID4gYsSDaTsgIzdDQTgKK+eyqiA+IGbDqG47ICM3Q0FBCivnsq4gPiBsacOhbmc7ICM3Q0FFCivnsq8gPiB4acOgbjsgIzdDQUYKK+eysCA+IGbDujsgIzdDQjAKK+eysSA+IGxpw6FuZzsgIzdDQjEKK+eysiA+IGPDoG47ICM3Q0IyCivnsrMgPiBnxJNuZzsgIzdDQjMKK+eytCA+IGzErTsgIzdDQjQKK+eytSA+IHl1w6g7ICM3Q0I1CivnsrYgPiBsw7k7ICM3Q0I2CivnsrcgPiBqw7o7ICM3Q0I3CivnsrggPiBxw607ICM3Q0I4CivnsrkgPiBjw7lpOyAjN0NCOQor57K6ID4gYsOgaTsgIzdDQkEKK+eyuyA+IHpoxIFuZzsgIzdDQkIKK+eyvCA+IGzDrW47ICM3Q0JDCivnsr0gPiB6w7JuZzsgIzdDQkQKK+eyviA+IGrEq25nOyAjN0NCRQor57K/ID4gZ8WtbzsgIzdDQkYKK+ezgSA+IHPEgW47ICM3Q0MxCivns4IgPiBzxINuOyAjN0NDMgor57ODID4gdMOhbmc7ICM3Q0MzCivns4QgPiBiacSBbjsgIzdDQzQKK+ezhSA+IHLFj3U7ICM3Q0M1Civns4YgPiBtacOgbjsgIzdDQzYKK+ezhyA+IGjDs3U7ICM3Q0M3Civns4ggPiB4xa07ICM3Q0M4Civns4kgPiB6w7JuZzsgIzdDQzkKK+eziiA+IGjDujsgIzdDQ0EKK+eziyA+IGppw6BuOyAjN0NDQgor57OMID4gesOhbjsgIzdDQ0MKK+ezjSA+IGPDrTsgIzdDQ0QKK+ezjiA+IGzDrTsgIzdDQ0UKK+ezjyA+IHhpw6g7ICM3Q0NGCivns5AgPiBmxas7ICM3Q0QwCivns5EgPiBuw6w7ICM3Q0QxCivns5IgPiBiw6hpOyAjN0NEMgor57OTID4gZ8WtOyAjN0NEMwor57OUID4geMStdTsgIzdDRDQKK+ezlSA+IGfEgW87ICM3Q0Q1Civns5YgPiB0w6FuZzsgIzdDRDYKK+ezlyA+IHHErXU7ICM3Q0Q3Civns5kgPiBjxIFvOyAjN0NEOQor57OaID4gemh1xIFuZzsgIzdDREEKK+ezmyA+IHTDoW5nOyAjN0NEQgor57OcID4gbcOtOyAjN0NEQwor57OdID4gc8SBbjsgIzdDREQKK+ezniA+IGbDqG47ICM3Q0RFCivns58gPiB6xIFvOyAjN0NERgor57OgID4ga8SBbmc7ICM3Q0UwCivns6EgPiBqacOgbmc7ICM3Q0UxCivns6IgPiBtw7M7ICM3Q0UyCivns6MgPiBzxINuOyAjN0NFMwor57OkID4gc8SDbjsgIzdDRTQKK+ezpSA+IG7DuW87ICM3Q0U1Civns6YgPiB4xKs7ICM3Q0U2Civns6cgPiBsacOhbmc7ICM3Q0U3Civns6ggPiBqacOgbmc7ICM3Q0U4Civns6kgPiBrdcOgaTsgIzdDRTkKK+ezqiA+IGLDszsgIzdDRUEKK+ezqyA+IGh1w6FuOyAjN0NFQgor57OtID4gesOybmc7ICM3Q0VECivns64gPiB4acOgbjsgIzdDRUUKK+ezryA+IG7DuW87ICM3Q0VGCivns7AgPiB0dcOhbjsgIzdDRjAKK+ezsSA+IG5pw6g7ICM3Q0YxCivns7IgPiBsw6w7ICM3Q0YyCivns7MgPiB6w7lvOyAjN0NGMwor57O0ID4gZMOtOyAjN0NGNAor57O1ID4gbmnDqDsgIzdDRjUKK+eztiA+IHRpw6BvOyAjN0NGNgor57O3ID4gbMOhbjsgIzdDRjcKK+ezuCA+IG3DrDsgIzdDRjgKK+ezuSA+IGppxINvJyAnc8SrJyAncMOhbmc7ICM3Q0Y5Civns7ogPiBqxKt1OyAjN0NGQQor57O7ID4geMOsOyAjN0NGQgor57O8ID4gZ8WNbmc7ICM3Q0ZDCivns70gPiB6aMSVbmc7ICM3Q0ZECivns74gPiBqxKt1OyAjN0NGRQor57O/ID4gecOydTsgIzdDRkYKK+e0gCA+IGrDrDsgIzdEMDAKK+e0gSA+IGNow6A7ICM3RDAxCivntIIgPiB6aMOydTsgIzdEMDIKK+e0gyA+IHjDum47ICM3RDAzCivntIQgPiB5dcSTOyAjN0QwNAor57SFID4gaMOzbmc7ICM3RDA1CivntIYgPiB5xas7ICM3RDA2CivntIcgPiBow6k7ICM3RDA3CivntIggPiB3w6FuOyAjN0QwOAor57SJID4gcsOobjsgIzdEMDkKK+e0iiA+IHfDqG47ICM3RDBBCivntIsgPiB3w6luOyAjN0QwQgor57SMID4gccOtdTsgIzdEMEMKK+e0jSA+IG7DoDsgIzdEMEQKK+e0jiA+IHrEqzsgIzdEMEUKK+e0jyA+IHTFj3U7ICM3RDBGCivntJAgPiBuxK11OyAjN0QxMAor57SRID4gZsOzdTsgIzdEMTEKK+e0kiA+IGppw6g7ICM3RDEyCivntJMgPiBzaMWrOyAjN0QxMwor57SUID4gY2jDum47ICM3RDE0CivntJUgPiBww607ICM3RDE1CivntJYgPiB5xK1uOyAjN0QxNgor57SXID4gc2jEgTsgIzdEMTcKK+e0mCA+IGjDs25nOyAjN0QxOAor57SZID4gemjErTsgIzdEMTkKK+e0miA+IGrDrTsgIzdEMUEKK+e0myA+IGbEk247ICM3RDFCCivntJwgPiB5w7puOyAjN0QxQwor57SdID4gcsOpbjsgIzdEMUQKK+e0niA+IGTEg247ICM3RDFFCivntJ8gPiBqxKtuOyAjN0QxRgor57SgID4gc8O5OyAjN0QyMAor57ShID4gZsSDbmc7ICM3RDIxCivntKIgPiBzxa1vOyAjN0QyMgor57SjID4gY8O5aTsgIzdEMjMKK+e0pCA+IGrErXU7ICM3RDI0CivntKUgPiB6aMOhOyAjN0QyNQor57SnID4gasStbjsgIzdEMjcKK+e0qCA+IGbDuTsgIzdEMjgKK+e0qSA+IHpow6w7ICM3RDI5CivntKogPiBjxK07ICM3RDJBCivntKsgPiB6xK07ICM3RDJCCivntKwgPiBjaMOzdTsgIzdEMkMKK+e0rSA+IGjDs25nOyAjN0QyRAor57SuID4gemjDoTsgIzdEMkUKK+e0ryA+IGzDqGk7ICM3RDJGCivntLAgPiB4w6w7ICM3RDMwCivntLEgPiBmw7o7ICM3RDMxCivntLIgPiB4acOoOyAjN0QzMgor57SzID4gc2jEk247ICM3RDMzCivntLQgPiBiw6hpOyAjN0QzNAor57S1ID4gemjDuTsgIzdEMzUKK+e0tiA+IHHFrTsgIzdEMzYKK+e0tyA+IGzDrW5nOyAjN0QzNwor57S4ID4gemjDuTsgIzdEMzgKK+e0uSA+IHNow6BvOyAjN0QzOQor57S6ID4gZ8OgbjsgIzdEM0EKK+e0uyA+IHnEgW5nOyAjN0QzQgor57S8ID4gZsO6OyAjN0QzQwor57S9ID4gdMO6bzsgIzdEM0QKK+e0viA+IHpoxJVuOyAjN0QzRQor57S/ID4gZMOgaTsgIzdEM0YKK+e1gCA+IHpow7pvOyAjN0Q0MAor57WBID4gc2jEqzsgIzdENDEKK+e1giA+IHpoxY1uZzsgIzdENDIKK+e1gyA+IHhpw6FuOyAjN0Q0Mwor57WEID4gesWtOyAjN0Q0NAor57WFID4gasStb25nOyAjN0Q0NQor57WGID4gYsOgbjsgIzdENDYKK+e1hyA+IGrDuTsgIzdENDcKK+e1iCA+IG3DsjsgIzdENDgKK+e1iSA+IHNow7k7ICM3RDQ5CivntYogPiB6w7lpOyAjN0Q0QQor57WMID4gasSrbmc7ICM3RDRDCivntY0gPiByw6luOyAjN0Q0RAor57WOID4gaMOobmc7ICM3RDRFCivntY8gPiB4acOoOyAjN0Q0Rgor57WQID4gamnDqTsgIzdENTAKK+e1kSA+IHpoxas7ICM3RDUxCivntZIgPiBjaMOzdTsgIzdENTIKK+e1kyA+IGd1w6A7ICM3RDUzCivntZQgPiBixINpOyAjN0Q1NAor57WVID4ganXDqTsgIzdENTUKK+e1liA+IGt1w6BuZzsgIzdENTYKK+e1lyA+IGjDujsgIzdENTcKK+e1mCA+IGPDrDsgIzdENTgKK+e1mSA+IGfEk25nOyAjN0Q1OQor57WaID4gZ8STbmc7ICM3RDVBCivntZsgPiB0xIFvOyAjN0Q1Qgor57WcID4geGnDqTsgIzdENUMKK+e1nSA+IGvDuTsgIzdENUQKK+e1niA+IGppxINvOyAjN0Q1RQor57WfID4gcXXEgW47ICM3RDVGCivntaAgPiBnxINpOyAjN0Q2MAor57WhID4gbMO5bzsgIzdENjEKK+e1oiA+IHh1w6BuOyAjN0Q2Mgor57WjID4gYsSrbmc7ICM3RDYzCivntaQgPiB4acOgbjsgIzdENjQKK+e1pSA+IGbDujsgIzdENjUKK+e1piA+IGfElWk7ICM3RDY2CivntacgPiB0w7NuZzsgIzdENjcKK+e1qCA+IHLDs25nOyAjN0Q2OAor57WpID4gdGnDoG87ICM3RDY5CivntaogPiB5xKtuOyAjN0Q2QQor57WrID4gbMSVaTsgIzdENkIKK+e1rCA+IHhpw6g7ICM3RDZDCivnta0gPiBxdcOgbjsgIzdENkQKK+e1riA+IHjDuTsgIzdENkUKK+e1ryA+IGzHnG47ICM3RDZGCivntbAgPiBkacOpOyAjN0Q3MAor57WxID4gdMWPbmc7ICM3RDcxCivntbIgPiBzxKs7ICM3RDcyCivntbMgPiBqacOgbmc7ICM3RDczCivntbQgPiB4acOhbmc7ICM3RDc0CivntbUgPiBow7lpOyAjN0Q3NQor57W2ID4ganXDqTsgIzdENzYKK+e1tyA+IHpow607ICM3RDc3CivntbggPiBqacSDbjsgIzdENzgKK+e1uSA+IGp1w6BuOyAjN0Q3OQor57W6ID4gY2jEqzsgIzdEN0EKK+e1uyA+IG1pxINuOyAjN0Q3Qgor57W8ID4gemjElW47ICM3RDdDCivntb0gPiBsx5o7ICM3RDdECivntb4gPiBjaMOpbmc7ICM3RDdFCivntb8gPiBxw611OyAjN0Q3Rgor57aAID4gc2jFqzsgIzdEODAKK+e2gSA+IGLEg25nOyAjN0Q4MQor57aCID4gdMWPbmc7ICM3RDgyCivntoMgPiB4acSBbzsgIzdEODMKK+e2hCA+IHfDoG47ICM3RDg0CivntoUgPiBxxKtuOyAjN0Q4NQor57aGID4gZ8SVbmc7ICM3RDg2CivntocgPiB4xK11OyAjN0Q4Nwor57aIID4gdMOtOyAjN0Q4OAor57aJID4geMOsdTsgIzdEODkKK+e2iiA+IHhpw6k7ICM3RDhBCivntosgPiBow7NuZzsgIzdEOEIKK+e2jCA+IHjDrDsgIzdEOEMKK+e2jSA+IGbDujsgIzdEOEQKK+e2jiA+IHTEq25nOyAjN0Q4RQor57aPID4gc8WraTsgIzdEOEYKK+e2kCA+IGTDuWk7ICM3RDkwCivntpEgPiBrxa1uOyAjN0Q5MQor57aSID4gZsWrOyAjN0Q5Mgor57aTID4gasSrbmc7ICM3RDkzCivntpQgPiBow7k7ICM3RDk0CivntpUgPiB6aMSrOyAjN0Q5NQor57aWID4gecOhbjsgIzdEOTYKK+e2lyA+IGrErW9uZzsgIzdEOTcKK+e2mCA+IGbDqW5nOyAjN0Q5OAor57aZID4gasOsOyAjN0Q5OQor57acID4gesOybmc7ICM3RDlDCivntp0gPiBsw61uOyAjN0Q5RAor57aeID4gZMWtbzsgIzdEOUUKK+e2nyA+IGzDrDsgIzdEOUYKK+e2oCA+IGzHnDsgIzdEQTAKK+e2oSA+IGxpw6FuZzsgIzdEQTEKK+e2oiA+IGNow7N1OyAjN0RBMgor57ajID4gcXXEg247ICM3REEzCivntqQgPiBzaMOgbzsgIzdEQTQKK+e2pSA+IHHDrDsgIzdEQTUKK+e2piA+IHHDrTsgIzdEQTYKK+e2pyA+IHpoxa1uOyAjN0RBNwor57aoID4gccOtOyAjN0RBOAor57apID4gd8SDbjsgIzdEQTkKK+e2qiA+IHFpw6BuOyAjN0RBQQor57arID4geGnDoG47ICM3REFCCivntqwgPiBzaMOydTsgIzdEQUMKK+e2rSA+IHfDqWk7ICM3REFECivntq4gPiBxxK07ICM3REFFCivntq8gPiB0w6FvOyAjN0RBRgor57awID4gd8SDbjsgIzdEQjAKK+e2sSA+IGfEgW5nOyAjN0RCMQor57ayID4gd8SDbmc7ICM3REIyCivntrMgPiBixJNuZzsgIzdEQjMKK+e2tCA+IHpow7lpOyAjN0RCNAor57a1ID4gY8SDaTsgIzdEQjUKK+e2tiA+IGfFrW87ICM3REI2CivntrcgPiBjw7lpOyAjN0RCNwor57a4ID4gbMO6bjsgIzdEQjgKK+e2uSA+IGzErXU7ICM3REI5CivntrogPiBxxK07ICM3REJBCivntrsgPiB6aMOgbjsgIzdEQkIKK+e2vCA+IGLEk2k7ICM3REJDCivntr0gPiBjaMO5bzsgIzdEQkQKK+e2viA+IGzDrW5nOyAjN0RCRQor57a/ID4gbWnDoW47ICM3REJGCivnt4AgPiBxxKs7ICM3REMwCivnt4EgPiBxacOoOyAjN0RDMQor57eCID4gdMSBbjsgIzdEQzIKK+e3gyA+IHrFjW5nOyAjN0RDMwor57eEID4gZ8WtbjsgIzdEQzQKK+e3hSA+IHrFjXU7ICM3REM1Civnt4YgPiB5w6w7ICM3REM2Civnt4cgPiB6xKs7ICM3REM3Civnt4ggPiB4w6xuZzsgIzdEQzgKK+e3iSA+IGxpxINuZzsgIzdEQzkKK+e3iiA+IGrErW47ICM3RENBCivnt4sgPiBmxJNpOyAjN0RDQgor57eMID4gcsO6aTsgIzdEQ0MKK+e3jSA+IG3DrW47ICM3RENECivnt44gPiB5w7k7ICM3RENFCivnt48gPiB6xY9uZzsgIzdEQ0YKK+e3kCA+IGbDoW47ICM3REQwCivnt5EgPiBsx5w7ICM3REQxCivnt5IgPiB4w7k7ICM3REQyCivnt5MgPiB5aW5nbDsgIzdERDMKK+e3lCA+IHpow6BuZzsgIzdERDQKK+e3liA+IHjDuTsgIzdERDYKK+e3lyA+IHhpxIFuZzsgIzdERDcKK+e3mCA+IGppxIFuOyAjN0REOAor57eZID4ga8OoOyAjN0REOQor57eaID4geGnDoG47ICM3RERBCivnt5sgPiBydcSDbjsgIzdEREIKK+e3nCA+IG1pw6FuOyAjN0REQwor57edID4gccOsOyAjN0RERAor57eeID4gZHXDoG47ICM3RERFCivnt58gPiB6aMOybmc7ICM3RERGCivnt6AgPiBkw6w7ICM3REUwCivnt6EgPiBtw61uOyAjN0RFMQor57eiID4gbWnDoW87ICM3REUyCivnt6MgPiB5dcOhbjsgIzdERTMKK+e3pCA+IHhpw6g7ICM3REU0Civnt6UgPiBixINvOyAjN0RFNQor57emID4gc8SrOyAjN0RFNgor57enID4gccSrdTsgIzdERTcKK+e3qCA+IGJpxIFuOyAjN0RFOAor57epID4gaHXEg247ICM3REU5Civnt6ogPiBnxJNuZzsgIzdERUEKK+e3qyA+IGPFjW5nOyAjN0RFQgor57esID4gbWnEg247ICM3REVDCivnt60gPiB3w6hpOyAjN0RFRAor57euID4gZsO5OyAjN0RFRQor57evID4gd8SVaTsgIzdERUYKK+e3sCA+IHnDujsgIzdERjAKK+e3sSA+IGfFjXU7ICM3REYxCivnt7IgPiBtacSDbzsgIzdERjIKK+e3syA+IHhpw6k7ICM3REYzCivnt7QgPiBsacOgbjsgIzdERjQKK+e3tSA+IHrFjW5nOyAjN0RGNQor57e2ID4gYmnDoG47ICM3REY2Civnt7cgPiB5w7luOyAjN0RGNwor57e4ID4gecSrbjsgIzdERjgKK+e3uSA+IHTDrTsgIzdERjkKK+e3uiA+IGd1xIE7ICM3REZBCivnt7sgPiB6aMOsOyAjN0RGQgor57e8ID4gecWrbjsgIzdERkMKK+e3vSA+IGNoxJNuZzsgIzdERkQKK+e3viA+IGNow6FuOyAjN0RGRQor57e/ID4gZMOgaTsgIzdERkYKK+e4gCA+IHhpw6E7ICM3RTAwCivnuIEgPiB5dcOhbjsgIzdFMDEKK+e4giA+IHrFj25nOyAjN0UwMgor57iDID4geMWrOyAjN0UwMwor57iGID4gZ8STbmc7ICM3RTA2CivnuIggPiB5w61uZzsgIzdFMDgKK+e4iSA+IGrDrG47ICM3RTA5CivnuIogPiB5w6w7ICM3RTBBCivnuIsgPiB6aMO5aTsgIzdFMEIKK+e4jCA+IG7DrDsgIzdFMEMKK+e4jSA+IGLEgW5nOyAjN0UwRAor57iOID4gZ8WtOyAjN0UwRQor57iPID4gcMOhbjsgIzdFMEYKK+e4kCA+IHpow7J1OyAjN0UxMAor57iRID4gamnEgW47ICM3RTExCivnuJIgPiBjxa1vOyAjN0UxMgor57iTID4gcXXEg247ICM3RTEzCivnuJQgPiBzaHXEg25nOyAjN0UxNAor57iVID4gecWrbjsgIzdFMTUKK+e4liA+IHhpw6E7ICM3RTE2CivnuJcgPiBzaHXEgWk7ICM3RTE3CivnuJggPiB4xKs7ICM3RTE4CivnuJkgPiByw7NuZzsgIzdFMTkKK+e4miA+IHTEgW87ICM3RTFBCivnuJsgPiBmw7o7ICM3RTFCCivnuJwgPiB5w7puOyAjN0UxQwor57idID4gemjEk247ICM3RTFECivnuJ4gPiBnxINvOyAjN0UxRQor57ifID4gcsO5OyAjN0UxRgor57igID4gaMO6OyAjN0UyMAor57ihID4gesSDaTsgIzdFMjEKK+e4oiA+IHTDqW5nOyAjN0UyMgor57ijID4geGnDoG47ICM3RTIzCivnuKQgPiBzw7k7ICM3RTI0CivnuKUgPiB6aMSVbjsgIzdFMjUKK+e4piA+IHrDsm5nOyAjN0UyNgor57inID4gdMSBbzsgIzdFMjcKK+e4qSA+IGPDoGk7ICM3RTI5CivnuKogPiBiw6w7ICM3RTJBCivnuKsgPiBmw6luZzsgIzdFMkIKK+e4rCA+IGPDuTsgIzdFMkMKK+e4rSA+IGzDrTsgIzdFMkQKK+e4riA+IHPFq287ICM3RTJFCivnuK8gPiB5xK1uOyAjN0UyRgor57iwID4geMStOyAjN0UzMAor57ixID4gesOybmc7ICM3RTMxCivnuLIgPiBsw6lpOyAjN0UzMgor57izID4gemh1w6BuOyAjN0UzMwor57i0ID4gcWnEgW47ICM3RTM0CivnuLUgPiBtw6BuOyAjN0UzNQor57i2ID4gemjDrTsgIzdFMzYKK+e4tyA+IGzHmjsgIzdFMzcKK+e4uCA+IG3DsjsgIzdFMzgKK+e4uSA+IHBpxINvOyAjN0UzOQor57i6ID4gbGnDoW47ICM3RTNBCivnuLsgPiBtw607ICM3RTNCCivnuLwgPiB4dcOgbjsgIzdFM0MKK+e4vSA+IHrFj25nOyAjN0UzRAor57i+ID4gasSrOyAjN0UzRQor57i/ID4gc2jEgW47ICM3RTNGCivnuYAgPiBzw7lpOyAjN0U0MAor57mBID4gZsOhbjsgIzdFNDEKK+e5giA+IHNodcOgaTsgIzdFNDIKK+e5gyA+IGLEk25nOyAjN0U0Mwor57mEID4gecSrOyAjN0U0NAor57mFID4gc8SBbzsgIzdFNDUKK+e5hiA+IG3Ds3U7ICM3RTQ2CivnuYcgPiB6aMOydTsgIzdFNDcKK+e5iCA+IHFpxINuZzsgIzdFNDgKK+e5iSA+IGjDum47ICM3RTQ5CivnuYsgPiB4w6w7ICM3RTRCCivnuY0gPiB4w6x1OyAjN0U0RAor57mOID4gcsOhbjsgIzdFNEUKK+e5jyA+IHh1w6BuOyAjN0U0Rgor57mQID4gaMO5aTsgIzdFNTAKK+e5kSA+IHFpxIFvOyAjN0U1MQor57mSID4gesSTbmc7ICM3RTUyCivnuZMgPiB6xa1vOyAjN0U1Mwor57mUID4gemjEqzsgIzdFNTQKK+e5lSA+IHNow6BuOyAjN0U1NQor57mWID4gc8SDbjsgIzdFNTYKK+e5lyA+IGzDrW47ICM3RTU3CivnuZggPiB5w7k7ICM3RTU4CivnuZkgPiBmxIFuOyAjN0U1OQor57maID4gbGnDoW87ICM3RTVBCivnuZsgPiBjaMO5bzsgIzdFNUIKK+e5nCA+IHrFq247ICM3RTVDCivnuZ0gPiBqacOgbjsgIzdFNUQKK+e5niA+IHLDoG87ICM3RTVFCivnuZ8gPiBjaMSDbjsgIzdFNUYKK+e5oCA+IHLFrWk7ICM3RTYwCivnuaEgPiB4w6x1OyAjN0U2MQor57miID4gaMO5aTsgIzdFNjIKK+e5oyA+IGh1w6A7ICM3RTYzCivnuaQgPiB6dcSDbjsgIzdFNjQKK+e5pSA+IHjEqzsgIzdFNjUKK+e5piA+IHFpxINuZzsgIzdFNjYKK+e5qCA+IGTDoTsgIzdFNjgKK+e5qSA+IHNow6luZzsgIzdFNjkKK+e5qiA+IGjDuWk7ICM3RTZBCivnuasgPiB4w6w7ICM3RTZCCivnuawgPiBzw6g7ICM3RTZDCivnua0gPiBqacSDbjsgIzdFNkQKK+e5riA+IGppxIFuZzsgIzdFNkUKK+e5ryA+IGh1w6FuOyAjN0U2Rgor57mwID4gesSDbzsgIzdFNzAKK+e5sSA+IGPFjW5nOyAjN0U3MQor57myID4gamnDqDsgIzdFNzIKK+e5syA+IGppxINvOyAjN0U3Mwor57m0ID4gYsOyOyAjN0U3NAor57m1ID4gY2jDoW47ICM3RTc1CivnubYgPiB5w6w7ICM3RTc2CivnubcgPiBuw6FvOyAjN0U3Nwor57m4ID4gc8O5aTsgIzdFNzgKK+e5uSA+IHnDrDsgIzdFNzkKK+e5uiA+IHNoxINpOyAjN0U3QQor57m7ID4geMWrOyAjN0U3Qgor57m8ID4gasOsOyAjN0U3Qwor57m9ID4gYsSrbjsgIzdFN0QKK+e5viA+IHFpxINuOyAjN0U3RQor57m/ID4gbMOhbjsgIzdFN0YKK+e6gCA+IHDDujsgIzdFODAKK+e6gSA+IHjFq247ICM3RTgxCivnuoIgPiB6dcSDbjsgIzdFODIKK+e6gyA+IHHDrTsgIzdFODMKK+e6hCA+IHDDqW5nOyAjN0U4NAor57qFID4gbMOsOyAjN0U4NQor57qGID4gbcOyOyAjN0U4Ngor57qHID4gbMOoaTsgIzdFODcKK+e6iCA+IHhpw6k7ICM3RTg4CivnuokgPiB6dcSDbjsgIzdFODkKK+e6iiA+IGt1w6BuZzsgIzdFOEEKK+e6iyA+IHnFjXU7ICM3RThCCivnuowgPiB4w7k7ICM3RThDCivnuo0gPiBsw6lpOyAjN0U4RAor57qOID4geGnEgW47ICM3RThFCivnuo8gPiBjaMOhbjsgIzdFOEYKK+e6kSA+IGzDujsgIzdFOTEKK+e6kiA+IGNow6FuOyAjN0U5Mgor57qTID4gecSrbmc7ICM3RTkzCivnupQgPiBjw6FpOyAjN0U5NAor57qVID4geGnEgW5nOyAjN0U5NQor57qWID4geGnEgW47ICM3RTk2CivnupcgPiB6xatpOyAjN0U5Nwor57qYID4genXEg247ICM3RTk4CivnupkgPiBsw7lvOyAjN0U5OQor57qaID4geMStOyAjN0U5QQor57qbID4gZMOgbzsgIzdFOUIKK+e6nCA+IGzDoG47ICM3RTlDCivnup0gPiBsw6lpOyAjN0U5RAor57qeID4gbGnDoG47ICM3RTlFCivnup8gPiBzxKs7ICM3RTlGCivnuqAgPiBqxKt1OyAjN0VBMAor57qhID4gecWrOyAjN0VBMQor57qiID4gaMOzbmc7ICM3RUEyCivnuqMgPiB6aMOydTsgIzdFQTMKK+e6pCA+IHhpxIFuOyAjN0VBNAor57qlID4gaMOpOyAjN0VBNQor57qmID4geXXEkzsgIzdFQTYKK+e6pyA+IGrDrTsgIzdFQTcKK+e6qCA+IHfDoW47ICM3RUE4CivnuqkgPiBrdcOgbmc7ICM3RUE5CivnuqogPiBqw6w7ICM3RUFBCivnuqsgPiByw6huOyAjN0VBQgor57qsID4gd8SVaTsgIzdFQUMKK+e6rSA+IHnDum47ICM3RUFECivnuq4gPiBow7NuZzsgIzdFQUUKK+e6ryA+IGNow7puOyAjN0VBRgor57qwID4gcMOtOyAjN0VCMAor57qxID4gc2jEgTsgIzdFQjEKK+e6siA+IGfEgW5nOyAjN0VCMgor57qzID4gbsOgOyAjN0VCMwor57q0ID4gcsOpbjsgIzdFQjQKK+e6tSA+IHrDsm5nOyAjN0VCNQor57q2ID4gbMO6bjsgIzdFQjYKK+e6tyA+IGbEk247ICM3RUI3CivnurggPiB6aMStOyAjN0VCOAor57q5ID4gd8OpbjsgIzdFQjkKK+e6uiA+IGbEg25nOyAjN0VCQQor57q7ID4gemjDuTsgIzdFQkIKK+e6vCA+IHnErW47ICM3RUJDCivnur0gPiBuxK11OyAjN0VCRAor57q+ID4gc2jFqzsgIzdFQkUKK+e6vyA+IHhpw6BuOyAjN0VCRgor57uAID4gZ8OgbjsgIzdFQzAKK+e7gSA+IHhpw6g7ICM3RUMxCivnu4IgPiBmw7o7ICM3RUMyCivnu4MgPiBsacOgbjsgIzdFQzMKK+e7hCA+IHrFrTsgIzdFQzQKK+e7hSA+IHNoxJNuOyAjN0VDNQor57uGID4geMOsOyAjN0VDNgor57uHID4gemjEqzsgIzdFQzcKK+e7iCA+IHpoxY1uZzsgIzdFQzgKK+e7iSA+IHpow7J1OyAjN0VDOQor57uKID4gYsOgbjsgIzdFQ0EKK+e7iyA+IGbDujsgIzdFQ0IKK+e7jCA+IHpow7pvOyAjN0VDQwor57uNID4gc2jDoG87ICM3RUNECivnu44gPiB5w6w7ICM3RUNFCivnu48gPiBqxKtuZzsgIzdFQ0YKK+e7kCA+IGTDoGk7ICM3RUQwCivnu5EgPiBixINuZzsgIzdFRDEKK+e7kiA+IHLDs25nOyAjN0VEMgor57uTID4gamnDqTsgIzdFRDMKK+e7lCA+IGvDuTsgIzdFRDQKK+e7lSA+IHLDoG87ICM3RUQ1Civnu5YgPiBkacOpOyAjN0VENgor57uXID4gaMOobmc7ICM3RUQ3Civnu5ggPiBow7lpOyAjN0VEOAor57uZID4gZ8SVaTsgIzdFRDkKK+e7miA+IHh1w6BuOyAjN0VEQQor57ubID4gamnDoG5nOyAjN0VEQgor57ucID4gbMO5bzsgIzdFREMKK+e7nSA+IGp1w6k7ICM3RURECivnu54gPiBqacSDbzsgIzdFREUKK+e7nyA+IHTFj25nOyAjN0VERgor57ugID4gZ8SVbmc7ICM3RUUwCivnu6EgPiB4acSBbzsgIzdFRTEKK+e7oiA+IGp1w6BuOyAjN0VFMgor57ujID4geMOsdTsgIzdFRTMKK+e7pCA+IHjDrDsgIzdFRTQKK+e7pSA+IHPFq2k7ICM3RUU1Civnu6YgPiB0xIFvOyAjN0VFNgor57unID4gasOsOyAjN0VFNwor57uoID4gdMOtOyAjN0VFOAor57upID4gasSrOyAjN0VFOQor57uqID4geMO5OyAjN0VFQQor57urID4gbMOtbmc7ICM3RUVCCivnu60gPiB4w7k7ICM3RUVECivnu64gPiBxxK07ICM3RUVFCivnu68gPiBmxJNpOyAjN0VFRgor57uwID4gY2jDuW87ICM3RUYwCivnu7EgPiB6aMSDbmc7ICM3RUYxCivnu7IgPiBnxa1uOyAjN0VGMgor57uzID4gc2jDqW5nOyAjN0VGMwor57u0ID4gd8OpaTsgIzdFRjQKK+e7tSA+IG1pw6FuOyAjN0VGNQor57u2ID4gc2jDsnU7ICM3RUY2Civnu7cgPiBixJNuZzsgIzdFRjcKK+e7uCA+IGNow7N1OyAjN0VGOAor57u5ID4gdMOhbzsgIzdFRjkKK+e7uiA+IGzErXU7ICM3RUZBCivnu7sgPiBxdcSDbjsgIzdFRkIKK+e7vCA+IHrDsm5nOyAjN0VGQwor57u9ID4gemjDoG47ICM3RUZECivnu74gPiB3xINuOyAjN0VGRQor57u/ID4gbMecOyAjN0VGRgor57yAID4gemjDuWk7ICM3RjAwCivnvIEgPiB6xKs7ICM3RjAxCivnvIIgPiBrw6g7ICM3RjAyCivnvIMgPiB4acSBbmc7ICM3RjAzCivnvIQgPiBqacSBbjsgIzdGMDQKK+e8hSA+IG1pxINuOyAjN0YwNQor57yGID4gbMOgbjsgIzdGMDYKK+e8hyA+IHTDrTsgIzdGMDcKK+e8iCA+IG1pxINvOyAjN0YwOAor57yJID4gccOsOyAjN0YwOQor57yKID4gecWrbjsgIzdGMEEKK+e8iyA+IGjDuWk7ICM3RjBCCivnvIwgPiBzxKs7ICM3RjBDCivnvI0gPiBkxa1vOyAjN0YwRAor57yOID4gZHXDoG47ICM3RjBFCivnvI8gPiBiacOgbjsgIzdGMEYKK+e8kCA+IHhpw6BuOyAjN0YxMAor57yRID4gZ8WNdTsgIzdGMTEKK+e8kiA+IHpow7lpOyAjN0YxMgor57yTID4gaHXEg247ICM3RjEzCivnvJQgPiBkw6w7ICM3RjE0CivnvJUgPiBsx5o7ICM3RjE1CivnvJYgPiBiacSBbjsgIzdGMTYKK+e8lyA+IG3DrW47ICM3RjE3CivnvJggPiB5dcOhbjsgIzdGMTgKK+e8mSA+IGrDrG47ICM3RjE5CivnvJogPiBmw7o7ICM3RjFBCivnvJsgPiByw7k7ICM3RjFCCivnvJwgPiB6aMSTbjsgIzdGMUMKK+e8nSA+IGbDqW5nOyAjN0YxRAor57yeID4gc2h1xIFpOyAjN0YxRQor57yfID4gZ8SDbzsgIzdGMUYKK+e8oCA+IGNow6FuOyAjN0YyMAor57yhID4gbMOtOyAjN0YyMQor57yiID4gecOsOyAjN0YyMgor57yjID4gamnEgW47ICM3RjIzCivnvKQgPiBixKtuOyAjN0YyNAor57ylID4gcGnEg287ICM3RjI1CivnvKYgPiBtw6BuOyAjN0YyNgor57ynID4gbMOpaTsgIzdGMjcKK+e8qCA+IHnEq25nOyAjN0YyOAor57ypID4gc8WrbzsgIzdGMjkKK+e8qiA+IG3Ds3U7ICM3RjJBCivnvKsgPiBzxIFvOyAjN0YyQgor57ysID4geGnDqTsgIzdGMkMKK+e8rSA+IGxpw6FvOyAjN0YyRAor57yuID4gc2jDoG47ICM3RjJFCivnvK8gPiB6xJNuZzsgIzdGMkYKK+e8sCA+IGppxIFuZzsgIzdGMzAKK+e8sSA+IHFpxINuOyAjN0YzMQor57yyID4gesSDbzsgIzdGMzIKK+e8syA+IGh1w6FuOyAjN0YzMwor57y0ID4gamnEg287ICM3RjM0CivnvLUgPiB6dcSDbjsgIzdGMzUKK+e8tiA+IGbFj3U7ICM3RjM2CivnvLcgPiB4acOoOyAjN0YzNwor57y4ID4gZ8SBbmc7ICM3RjM4CivnvLkgPiBmxY91OyAjN0YzOQor57y6ID4gcXXEkzsgIzdGM0EKK+e8uyA+IGbFj3U7ICM3RjNCCivnvL0gPiBixY07ICM3RjNECivnvL4gPiBww61uZzsgIzdGM0UKK+e8vyA+IGjDsnU7ICM3RjNGCivnvYEgPiBnxIFuZzsgIzdGNDEKK+e9giA+IHnEq25nOyAjN0Y0Mgor572DID4gecSrbmc7ICM3RjQzCivnvYQgPiBxw6xuZzsgIzdGNDQKK+e9hSA+IHhpw6A7ICM3RjQ1CivnvYYgPiBndcOgbjsgIzdGNDYKK+e9hyA+IHrFq247ICM3RjQ3CivnvYggPiB0w6FuOyAjN0Y0OAor572KID4gccOsOyAjN0Y0QQor572LID4gd8Oobmc7ICM3RjRCCivnvYwgPiB5xKtuZzsgIzdGNEMKK+e9jSA+IGzDqWk7ICM3RjRECivnvY4gPiB0w6FuOyAjN0Y0RQor572PID4gbMO6OyAjN0Y0Rgor572QID4gZ3XDoG47ICM3RjUwCivnvZEgPiB3xINuZzsgIzdGNTEKK+e9kiA+IHfEg25nOyAjN0Y1Mgor572TID4gZ8SBbmc7ICM3RjUzCivnvZQgPiB3xINuZzsgIzdGNTQKK+e9lSA+IGjEg247ICM3RjU1CivnvZcgPiBsxatvOyAjN0Y1Nwor572YID4gZsO6OyAjN0Y1OAor572ZID4gbcOtOyAjN0Y1OQor572aID4gZsOhOyAjN0Y1QQor572bID4gZ8WrOyAjN0Y1Qgor572cID4gemjFrTsgIzdGNUMKK+e9nSA+IGrFqzsgIzdGNUQKK+e9niA+IG3DoW87ICM3RjVFCivnvZ8gPiBnxa07ICM3RjVGCivnvaAgPiBtw61uOyAjN0Y2MAor572hID4gZ8SBbmc7ICM3RjYxCivnvaIgPiBiw6A7ICM3RjYyCivnvaMgPiBndcOgOyAjN0Y2Mwor572kID4gdMOtOyAjN0Y2NAor572lID4ganXDoG47ICM3RjY1CivnvaYgPiBmxas7ICM3RjY2CivnvacgPiBsw61uOyAjN0Y2Nwor572oID4gecSDbjsgIzdGNjgKK+e9qSA+IHpow6BvOyAjN0Y2OQor572qID4gesO5aTsgIzdGNkEKK+e9qyA+IGd1w6A7ICM3RjZCCivnvawgPiB6aMO6bzsgIzdGNkMKK+e9rSA+IHnDuTsgIzdGNkQKK+e9riA+IHpow6w7ICM3RjZFCivnva8gPiDEg247ICM3RjZGCivnvbAgPiBmw6E7ICM3RjcwCivnvbEgPiBuxINuOyAjN0Y3MQor572yID4gc2jFrTsgIzdGNzIKK+e9syA+IHPEqzsgIzdGNzMKK+e9tCA+IHDDrTsgIzdGNzQKK+e9tSA+IG3DoDsgIzdGNzUKK+e9tiA+IGzErXU7ICM3Rjc2CivnvbcgPiBiw6A7ICM3Rjc3CivnvbggPiBmw6E7ICM3Rjc4CivnvbkgPiBsw607ICM3Rjc5CivnvbogPiBjaMSBbzsgIzdGN0EKK+e9uyA+IHfDqGk7ICM3RjdCCivnvbwgPiBiw6w7ICM3RjdDCivnvb0gPiBqw6w7ICM3RjdECivnvb4gPiB6xJNuZzsgIzdGN0UKK+e9vyA+IHTDs25nOyAjN0Y3Rgor576AID4gbMStdTsgIzdGODAKK+e+gSA+IGrEqzsgIzdGODEKK+e+giA+IGp1w6BuOyAjN0Y4Mgor576DID4gbcOsOyAjN0Y4Mwor576EID4gemjDoG87ICM3Rjg0CivnvoUgPiBsw7pvOyAjN0Y4NQor576GID4gcMOtOyAjN0Y4Ngor576HID4gasSrOyAjN0Y4Nwor576IID4gasSrOyAjN0Y4OAor576JID4gbHXDoW47ICM3Rjg5CivnvoogPiB5w6FuZzsgIzdGOEEKK+e+iyA+IG1pxJM7ICM3RjhCCivnvowgPiBxacSBbmc7ICM3RjhDCivnvo0gPiB0w6A7ICM3RjhECivnvo4gPiBtxJVpOyAjN0Y4RQor576PID4gecOhbmc7ICM3RjhGCivnvpAgPiB5xY91OyAjN0Y5MAor576RID4gecWPdTsgIzdGOTEKK+e+kiA+IGbDqW47ICM3RjkyCivnvpMgPiBixIE7ICM3RjkzCivnvpQgPiBnxIFvOyAjN0Y5NAor576VID4gecOgbmc7ICM3Rjk1CivnvpYgPiBnxa07ICM3Rjk2CivnvpcgPiBxacSBbmc7ICM3Rjk3CivnvpggPiB6xIFuZzsgIzdGOTgKK+e+mSA+IGfEgW87ICM3Rjk5CivnvpogPiBsw61uZzsgIzdGOUEKK+e+myA+IHnDrDsgIzdGOUIKK+e+nCA+IHpow7k7ICM3RjlDCivnvp0gPiBkxKs7ICM3RjlECivnvp4gPiB4xKt1OyAjN0Y5RQor576fID4gcWnEgW47ICM3RjlGCivnvqAgPiB5w607ICM3RkEwCivnvqEgPiB4acOgbjsgIzdGQTEKK+e+oiA+IHLDs25nOyAjN0ZBMgor576jID4gccO6bjsgIzdGQTMKK+e+pCA+IHHDum47ICM3RkE0CivnvqUgPiBxacSBbjsgIzdGQTUKK+e+piA+IGh1w6FuOyAjN0ZBNgor576nID4gesWraTsgIzdGQTcKK+e+qCA+IHhpw6BuOyAjN0ZBOAor576pID4gecOsOyAjN0ZBOQor576rID4gcWnEgW5nOyAjN0ZBQgor576sID4geGnDoW47ICM3RkFDCivnvq0gPiB5w7o7ICM3RkFECivnvq4gPiBnxJNuZzsgIzdGQUUKK+e+ryA+IGppw6k7ICM3RkFGCivnvrAgPiB0xIFuZzsgIzdGQjAKK+e+sSA+IHl1w6FuOyAjN0ZCMQor576yID4geMSrOyAjN0ZCMgor576zID4gZsOhbjsgIzdGQjMKK+e+tCA+IHNoxIFuOyAjN0ZCNAor5761ID4gZsSVbjsgIzdGQjUKK+e+tiA+IHNoxIFuOyAjN0ZCNgor5763ID4gbGnEg247ICM3RkI3CivnvrggPiBsw6lpOyAjN0ZCOAor5765ID4gZ8STbmc7ICM3RkI5CivnvrogPiBuw7N1OyAjN0ZCQQor5767ID4gcWnDoG5nOyAjN0ZCQgor5768ID4gY2jDoG47ICM3RkJDCivnvr0gPiB5xa07ICM3RkJECivnvr4gPiBnw7JuZzsgIzdGQkUKK+e+vyA+IHnDrDsgIzdGQkYKK+e/gCA+IGNow7NuZzsgIzdGQzAKK+e/gSA+IHfEk25nOyAjN0ZDMQor57+CID4gZsSTbjsgIzdGQzIKK+e/gyA+IGjDs25nOyAjN0ZDMwor57+EID4gY2jDrDsgIzdGQzQKK+e/hSA+IGNow6w7ICM3RkM1Civnv4YgPiBjw7lpOyAjN0ZDNgor57+HID4gZsO6OyAjN0ZDNwor57+IID4geGnDoTsgIzdGQzgKK+e/iSA+IHDElW47ICM3RkM5Civnv4ogPiB5w6w7ICM3RkNBCivnv4sgPiBsxIE7ICM3RkNCCivnv4wgPiB5w6w7ICM3RkNDCivnv40gPiBwxKs7ICM3RkNECivnv44gPiBsw61uZzsgIzdGQ0UKK+e/jyA+IGzDrHU7ICM3RkNGCivnv5AgPiB6aMOsOyAjN0ZEMAor57+RID4gccO6OyAjN0ZEMQor57+SID4geMOtOyAjN0ZEMgor57+TID4geGnDqTsgIzdGRDMKK+e/lCA+IHhpw6FuZzsgIzdGRDQKK+e/lSA+IHjDrDsgIzdGRDUKK+e/liA+IHjDrDsgIzdGRDYKK+e/lyA+IHHDrTsgIzdGRDcKK+e/mCA+IHFpw6FvOyAjN0ZEOAor57+ZID4gaMO5aTsgIzdGRDkKK+e/miA+IGjFq2k7ICM3RkRBCivnv5sgPiB4acSBbzsgIzdGREIKK+e/nCA+IHPDqDsgIzdGREMKK+e/nSA+IGjDs25nOyAjN0ZERAor57+eID4gamnEgW5nOyAjN0ZERQor57+fID4gZMOtOyAjN0ZERgor57+gID4gY8O5aTsgIzdGRTAKK+e/oSA+IGbElWk7ICM3RkUxCivnv6IgPiB0xIFvOyAjN0ZFMgor57+jID4gc2jDoDsgIzdGRTMKK+e/pCA+IGNow6w7ICM3RkU0Civnv6UgPiB6aMO5OyAjN0ZFNQor57+mID4gamnEg247ICM3RkU2Civnv6cgPiB4dcSBbjsgIzdGRTcKK+e/qCA+IHNow6w7ICM3RkU4Civnv6kgPiBwacSBbjsgIzdGRTkKK+e/qiA+IHrFjW5nOyAjN0ZFQQor57+rID4gd8OgbjsgIzdGRUIKK+e/rCA+IGjFq2k7ICM3RkVDCivnv60gPiBow7N1OyAjN0ZFRAor57+uID4gaMOpOyAjN0ZFRQor57+vID4gaMOoOyAjN0ZFRgor57+wID4gaMOgbjsgIzdGRjAKK+e/sSA+IMOhbzsgIzdGRjEKK+e/siA+IHBpxIFvOyAjN0ZGMgor57+zID4gecOsOyAjN0ZGMwor57+0ID4gbGnDoW47ICM3RkY0Civnv7UgPiBxw7o7ICM3RkY1Civnv7cgPiBsw61uOyAjN0ZGNwor57+4ID4gcMSVbjsgIzdGRjgKK+e/uSA+IHFpw6FvOyAjN0ZGOQor57+6ID4gw6FvOyAjN0ZGQQor57+7ID4gZsSBbjsgIzdGRkIKK+e/vCA+IHnDrDsgIzdGRkMKK+e/vSA+IGjDuWk7ICM3RkZECivnv74gPiB4dcSBbjsgIzdGRkUKK+e/vyA+IGTDoG87ICM3RkZGCivogIAgPiB5w6BvOyAjODAwMAor6ICBID4gbMSDbzsgIzgwMDEKK+iAgyA+IGvEg287ICM4MDAzCivogIQgPiBtw6BvOyAjODAwNAor6ICFID4gemjElTsgIzgwMDUKK+iAhiA+IHHDrTsgIzgwMDYKK+iAhyA+IGfFj3U7ICM4MDA3CivogIggPiBnxY91OyAjODAwOAor6ICJID4gZ8WPdTsgIzgwMDkKK+iAiiA+IGRpw6g7ICM4MDBBCivogIsgPiBkacOoOyAjODAwQgor6ICMID4gw6lyOyAjODAwQwor6ICNID4gc2h1xIM7ICM4MDBECivogI4gPiBydcSDbjsgIzgwMEUKK+iAjyA+IMOpcjsgIzgwMEYKK+iAkCA+IG7DoGk7ICM4MDEwCivogJEgPiB6aHXEgW47ICM4MDExCivogJIgPiBsxJVpOyAjODAxMgor6ICTID4gdMSrbmc7ICM4MDEzCivogJQgPiB6xK07ICM4MDE0CivogJUgPiBnxJNuZzsgIzgwMTUKK+iAliA+IGNow6BvOyAjODAxNgor6ICXID4gaMOgbzsgIzgwMTcKK+iAmCA+IHnDum47ICM4MDE4CivogJkgPiBww6E7ICM4MDE5CivogJogPiBwxKs7ICM4MDFBCivogJsgPiBjaMOtOyAjODAxQgor6ICcID4gc8OsOyAjODAxQwor6ICdID4gY2jDujsgIzgwMUQKK+iAniA+IGppxIE7ICM4MDFFCivogJ8gPiBqw7k7ICM4MDFGCivogKAgPiBow6k7ICM4MDIwCivogKEgPiBjaMO6OyAjODAyMQor6ICiID4gbMOgbzsgIzgwMjIKK+iAoyA+IGzFrW47ICM4MDIzCivogKQgPiBqw607ICM4MDI0CivogKUgPiB0xINuZzsgIzgwMjUKK+iApiA+IMWPdTsgIzgwMjYKK+iApyA+IGzDs3U7ICM4MDI3CivogKggPiBuw7J1OyAjODAyOAor6ICpID4gZ8WNdTsgIzgwMjkKK+iAqiA+IHDEg25nOyAjODAyQQor6ICrID4gesOpOyAjODAyQgor6ICsID4gbMOzdTsgIzgwMkMKK+iArSA+IGrEqzsgIzgwMkQKK+iAriA+IGzDoG87ICM4MDJFCivogK8gPiBow7lvOyAjODAyRgor6ICwID4gecWNdTsgIzgwMzAKK+iAsSA+IG3DsjsgIzgwMzEKK+iAsiA+IGh1w6FpOyAjODAzMgor6ICzID4gxJVyOyAjODAzMwor6IC0ID4gemjDqTsgIzgwMzQKK+iAtSA+IHTEq25nOyAjODAzNQor6IC2ID4gecOpOyAjODAzNgor6IC3ID4gZMSBOyAjODAzNwor6IC4ID4gc8WPbmc7ICM4MDM4CivogLkgPiBxw61uOyAjODAzOQor6IC6ID4gecO6bjsgIzgwM0EKK+iAuyA+IGNoxK07ICM4MDNCCivogLwgPiBkxIFuOyAjODAzQwor6IC9ID4gZMSBbjsgIzgwM0QKK+iAviA+IGjDs25nOyAjODAzRQor6IC/ID4gZ8SVbmc7ICM4MDNGCivogYAgPiB6aMOtOyAjODA0MAor6IGCID4gbmnDqDsgIzgwNDIKK+iBgyA+IGTEgW47ICM4MDQzCivogYQgPiB6aMSVbjsgIzgwNDQKK+iBhSA+IGNow6g7ICM4MDQ1CivogYYgPiBsw61uZzsgIzgwNDYKK+iBhyA+IHpoxJNuZzsgIzgwNDcKK+iBiCA+IHnFj3U7ICM4MDQ4CivogYkgPiB3xIE7ICM4MDQ5CivogYogPiBsacOhbzsgIzgwNEEKK+iBiyA+IGzDs25nOyAjODA0Qgor6IGMID4gemjDrTsgIzgwNEMKK+iBjSA+IG7DrW5nOyAjODA0RAor6IGOID4gdGnEgW87ICM4MDRFCivogY8gPiDDqXI7ICM4MDRGCivogZAgPiB5w6A7ICM4MDUwCivogZEgPiBkacOpOyAjODA1MQor6IGSID4gZ3XEgTsgIzgwNTIKK+iBlCA+IGxpw6FuOyAjODA1NAor6IGVID4gaMOgbzsgIzgwNTUKK+iBliA+IHNow6huZzsgIzgwNTYKK+iBlyA+IGxpw6g7ICM4MDU3CivogZggPiBww6xuOyAjODA1OAor6IGZID4gasSrbmc7ICM4MDU5CivogZogPiBqw7k7ICM4MDVBCivogZsgPiBiw6w7ICM4MDVCCivogZwgPiBkxK07ICM4MDVDCivogZ0gPiBnw7pvOyAjODA1RAor6IGeID4gd8OpbjsgIzgwNUUKK+iBnyA+IHjDuTsgIzgwNUYKK+iBoCA+IHDDrW5nOyAjODA2MAor6IGhID4gY8WNbmc7ICM4MDYxCivogaQgPiB0w61uZzsgIzgwNjQKK+iBpSA+IHnFrTsgIzgwNjUKK+iBpiA+IGPFjW5nOyAjODA2Ngor6IGnID4ga8O6aTsgIzgwNjcKK+iBqSA+IGvDuWk7ICM4MDY5CivogaogPiBjxY1uZzsgIzgwNkEKK+iBqyA+IGxpw6FuOyAjODA2Qgor6IGsID4gd8SVbmc7ICM4MDZDCivoga0gPiBrw7lpOyAjODA2RAor6IGuID4gbGnDoW47ICM4MDZFCivoga8gPiBsacOhbjsgIzgwNkYKK+iBsCA+IGPFjW5nOyAjODA3MAor6IGxID4gw6FvOyAjODA3MQor6IGyID4gc2jEk25nOyAjODA3Mgor6IGzID4gc8WPbmc7ICM4MDczCivogbQgPiB0xKtuZzsgIzgwNzQKK+iBtSA+IGvDuWk7ICM4MDc1CivogbYgPiBuacOoOyAjODA3Ngor6IG3ID4gemjDrTsgIzgwNzcKK+iBuCA+IGTEgW47ICM4MDc4CivogbkgPiBuw61uZzsgIzgwNzkKK+iBuiA+IHFpZTsgIzgwN0EKK+iBuyA+IGrEqzsgIzgwN0IKK+iBvCA+IHTEq25nOyAjODA3Qwor6IG9ID4gdMSrbmc7ICM4MDdECivogb4gPiBsw7NuZzsgIzgwN0UKK+iBvyA+IHnDuTsgIzgwN0YKK+iCgCA+IHnDuTsgIzgwODAKK+iCgSA+IHpow6BvOyAjODA4MQor6IKCID4gc8OsOyAjODA4Mgor6IKDID4gc8O5OyAjODA4Mwor6IKEID4gecOsOyAjODA4NAor6IKFID4gc8O5OyAjODA4NQor6IKGID4gc8OsOyAjODA4Ngor6IKHID4gemjDoG87ICM4MDg3CivogoggPiB6aMOgbzsgIzgwODgKK+iCiSA+IHLDsnU7ICM4MDg5CivogoogPiB5w6w7ICM4MDhBCivogosgPiBsw6g7ICM4MDhCCivogowgPiBqxKs7ICM4MDhDCivogo0gPiBxw611OyAjODA4RAor6IKOID4ga8SVbjsgIzgwOEUKK+iCjyA+IGPDoG87ICM4MDhGCivogpAgPiBnxJM7ICM4MDkwCivogpEgPiBkw6w7ICM4MDkxCivogpIgPiBodcOhbjsgIzgwOTIKK+iCkyA+IGh1xIFuZzsgIzgwOTMKK+iClCA+IHnErTsgIzgwOTQKK+iClSA+IHLDqG47ICM4MDk1CivogpYgPiB4acOgbzsgIzgwOTYKK+iClyA+IHLFrTsgIzgwOTcKK+iCmCA+IHpoxY91OyAjODA5OAor6IKZID4geXXEgW47ICM4MDk5CivogpogPiBkw7k7ICM4MDlBCivogpsgPiBnxIFuZzsgIzgwOUIKK+iCnCA+IHLDs25nOyAjODA5Qwor6IKdID4gZ8SBbjsgIzgwOUQKK+iCniA+IGNoxIE7ICM4MDlFCivogp8gPiB3w7I7ICM4MDlGCivogqAgPiBjaMOhbmc7ICM4MEEwCivogqEgPiBnxa07ICM4MEExCivogqIgPiB6aMSrOyAjODBBMgor6IKjID4gaMOhbjsgIzgwQTMKK+iCpCA+IGbFqzsgIzgwQTQKK+iCpSA+IGbDqWk7ICM4MEE1CivogqYgPiBmw6luOyAjODBBNgor6IKnID4gcMSTaTsgIzgwQTcKK+iCqCA+IHDDoG5nOyAjODBBOAor6IKpID4gamnEgW47ICM4MEE5CivogqogPiBmw6FuZzsgIzgwQUEKK+iCqyA+IHpoxatuOyAjODBBQgor6IKsID4gecOzdTsgIzgwQUMKK+iCrSA+IG7DoDsgIzgwQUQKK+iCriA+IGjDoW5nOyAjODBBRQor6IKvID4ga8SVbjsgIzgwQUYKK+iCsCA+IHLDoW47ICM4MEIwCivogrEgPiBnxY1uZzsgIzgwQjEKK+iCsiA+IHnDuTsgIzgwQjIKK+iCsyA+IHfElW47ICM4MEIzCivogrQgPiB5w6FvOyAjODBCNAor6IK1ID4gasOsbjsgIzgwQjUKK+iCtiA+IHDDrTsgIzgwQjYKK+iCtyA+IHFpxIFuOyAjODBCNwor6IK4ID4geMOsOyAjODBCOAor6IK5ID4geMSrOyAjODBCOQor6IK6ID4gZsOoaTsgIzgwQkEKK+iCuyA+IGvElW47ICM4MEJCCivogrwgPiBqxK1uZzsgIzgwQkMKK+iCvSA+IHTDoGk7ICM4MEJECivogr4gPiBzaMOobjsgIzgwQkUKK+iCvyA+IHpoxY9uZzsgIzgwQkYKK+iDgCA+IHpow6BuZzsgIzgwQzAKK+iDgSA+IHhpw6k7ICM4MEMxCivog4IgPiBzaMSTbjsgIzgwQzIKK+iDgyA+IHfDqGk7ICM4MEMzCivog4QgPiB6aMOydTsgIzgwQzQKK+iDhSA+IGRpw6k7ICM4MEM1Civog4YgPiBkxINuOyAjODBDNgor6IOHID4gZsOoaTsgIzgwQzcKK+iDiCA+IGLDoTsgIzgwQzgKK+iDiSA+IGLDszsgIzgwQzkKK+iDiiA+IHHDujsgIzgwQ0EKK+iDiyA+IHRpw6FuOyAjODBDQgor6IOMID4gYsOoaTsgIzgwQ0MKK+iDjSA+IGd1xIE7ICM4MENECivog44gPiB0xIFpOyAjODBDRQor6IOPID4gesStOyAjODBDRgor6IOQID4ga8WrOyAjODBEMAor6IORID4gemjEqzsgIzgwRDEKK+iDkiA+IG7DrDsgIzgwRDIKK+iDkyA+IHDDrW5nOyAjODBEMwor6IOUID4gesOsOyAjODBENAor6IOVID4gZsO5OyAjODBENQor6IOWID4gcMOgbmc7ICM4MEQ2Civog5cgPiB6aMSTbjsgIzgwRDcKK+iDmCA+IHhpw6FuOyAjODBEOAor6IOZID4gesO5bzsgIzgwRDkKK+iDmiA+IHDEk2k7ICM4MERBCivog5sgPiBqacSDOyAjODBEQgor6IOcID4gc2jDqG5nOyAjODBEQwor6IOdID4gemjEqzsgIzgwREQKK+iDniA+IGLEgW87ICM4MERFCivog58gPiBtxa07ICM4MERGCivog6AgPiBxxas7ICM4MEUwCivog6EgPiBow7o7ICM4MEUxCivog6IgPiBrxJM7ICM4MEUyCivog6MgPiB5xK07ICM4MEUzCivog6QgPiB5w6xuOyAjODBFNAor6IOlID4geMWrOyAjODBFNQor6IOmID4gecSBbmc7ICM4MEU2Civog6cgPiBsw7NuZzsgIzgwRTcKK+iDqCA+IGTDsm5nOyAjODBFOAor6IOpID4ga8SDOyAjODBFOQor6IOqID4gbMO6OyAjODBFQQor6IOrID4gasOsbmc7ICM4MEVCCivog6wgPiBuxa07ICM4MEVDCivog60gPiB5xIFuOyAjODBFRAor6IOuID4gcMOhbmc7ICM4MEVFCivog68gPiBrdcOgOyAjODBFRgor6IOwID4gecOtOyAjODBGMAor6IOxID4gZ3XEgW5nOyAjODBGMQor6IOyID4gZ8SBaTsgIzgwRjIKK+iDsyA+IGfEkzsgIzgwRjMKK+iDtCA+IGTDsm5nOyAjODBGNAor6IO1ID4gemjDrDsgIzgwRjUKK+iDtiA+IHhpw6FvOyAjODBGNgor6IO3ID4geMSrb25nOyAjODBGNwor6IO4ID4geMSrb25nOyAjODBGOAor6IO5ID4gw6lyOyAjODBGOQor6IO6ID4gw6g7ICM4MEZBCivog7sgPiB4w61uZzsgIzgwRkIKK+iDvCA+IHBpw6FuOyAjODBGQwor6IO9ID4gbsOpbmc7ICM4MEZECivog74gPiB6w6w7ICM4MEZFCivog78gPiBndWk7ICM4MEZGCivohIAgPiBjaMOpbmc7ICM4MTAwCivohIEgPiB0acOgbzsgIzgxMDEKK+iEgiA+IHpoxKs7ICM4MTAyCivohIMgPiBjw7lpOyAjODEwMwor6ISEID4gbcOpaTsgIzgxMDQKK+iEhSA+IHhpw6k7ICM4MTA1CivohIYgPiBjw7lpOyAjODEwNgor6ISHID4geGnDqTsgIzgxMDcKK+iEiCA+IG3DsjsgIzgxMDgKK+iEiSA+IG3DoGk7ICM4MTA5CivohIogPiBqw607ICM4MTBBCivohI0gPiBrdcOgaTsgIzgxMEQKK+iEjiA+IHPDoDsgIzgxMEUKK+iEjyA+IHrEgW5nOyAjODEwRgor6ISQID4gccOtOyAjODExMAor6ISRID4gbsSDbzsgIzgxMTEKK+iEkiA+IG3ErTsgIzgxMTIKK+iEkyA+IG7Ds25nOyAjODExMwor6ISUID4gbHXDoW47ICM4MTE0CivohJUgPiB3xINuOyAjODExNQor6ISWID4gYsOzOyAjODExNgor6ISXID4gd8SVbjsgIzgxMTcKK+iEmCA+IGd1xINuOyAjODExOAor6ISZID4gccOtdTsgIzgxMTkKK+iEmiA+IGppxINvOyAjODExQQor6ISbID4gasOsbmc7ICM4MTFCCivohJwgPiByw7N1OyAjODExQwor6ISdID4gaMSTbmc7ICM4MTFECivohJ4gPiBjxa1vOyAjODExRQor6ISfID4gbGnDqDsgIzgxMUYKK+iEoCA+IHNoxIFuOyAjODEyMAor6IShID4gdMStbmc7ICM4MTIxCivohKIgPiBtw6lpOyAjODEyMgor6ISjID4gY2jDum47ICM4MTIzCivohKQgPiBzaMOobjsgIzgxMjQKK+iEpSA+IHhpw6k7ICM4MTI1CivohKYgPiBkZTsgIzgxMjYKK+iEpyA+IHrFq2k7ICM4MTI3CivohKggPiBjw7k7ICM4MTI4CivohKkgPiB4xKt1OyAjODEyOQor6ISqID4geMOsbjsgIzgxMkEKK+iEqyA+IHTFq287ICM4MTJCCivohKwgPiBwxIFvOyAjODEyQwor6IStID4gY2jDqW5nOyAjODEyRAor6ISuID4gbsSVaTsgIzgxMkUKK+iEryA+IGbFrTsgIzgxMkYKK+iEsCA+IGTDsnU7ICM4MTMwCivohLEgPiB0xatvOyAjODEzMQor6ISyID4gbmnDoG87ICM4MTMyCivohLQgPiBwxK07ICM4MTM0CivohLUgPiBnxa07ICM4MTM1CivohLYgPiBndcSBOyAjODEzNgor6IS3ID4gbMOsOyAjODEzNwor6IS4ID4gbGnEg247ICM4MTM4CivohLkgPiB6aMOgbmc7ICM4MTM5CivohLogPiBjw7lpOyAjODEzQQor6IS7ID4gamnDqTsgIzgxM0IKK+iEvCA+IGxpxINuZzsgIzgxM0MKK+iEvSA+IHpoxY11OyAjODEzRAor6IS+ID4gcMOtOyAjODEzRQor6IS/ID4gYmnEgW87ICM4MTNGCivohYAgPiBsw7puOyAjODE0MAor6IWBID4gcGnDoW47ICM4MTQxCivohYIgPiBnw7lvOyAjODE0Mgor6IWDID4ga8O5aTsgIzgxNDMKK+iFhCA+IGNow7ppOyAjODE0NAor6IWFID4gZMOgbjsgIzgxNDUKK+iFhiA+IHRpxINuOyAjODE0Ngor6IWHID4gbsSVaTsgIzgxNDcKK+iFiCA+IGrEq25nOyAjODE0OAor6IWJID4gamnEkzsgIzgxNDkKK+iFiiA+IGzDoDsgIzgxNEEKK+iFiyA+IHnDrDsgIzgxNEIKK+iFjCA+IMSBbjsgIzgxNEMKK+iFjSA+IHLElW47ICM4MTRECivohY4gPiBzaMOobjsgIzgxNEUKK+iFjyA+IGNow7lvOyAjODE0Rgor6IWQID4gZsWtOyAjODE1MAor6IWRID4gZsWtOyAjODE1MQor6IWSID4gasWrOyAjODE1Mgor6IWTID4gZsOpaTsgIzgxNTMKK+iFlCA+IHFpxIFuZzsgIzgxNTQKK+iFlSA+IHfDoG47ICM4MTU1CivohZYgPiBkw7JuZzsgIzgxNTYKK+iFlyA+IHDDrTsgIzgxNTcKK+iFmCA+IGfDum87ICM4MTU4CivohZkgPiB6xY1uZzsgIzgxNTkKK+iFmiA+IGTDrG5nOyAjODE1QQor6IWbID4gd8WrOyAjODE1Qgor6IWcID4gbcOpaTsgIzgxNUMKK+iFnSA+IHJ1xINuOyAjODE1RAor6IWeID4gemh1w6BuOyAjODE1RQor6IWfID4gemjDrDsgIzgxNUYKK+iFoCA+IGPDsnU7ICM4MTYwCivohaEgPiBndcSBOyAjODE2MQor6IWiID4gxY91OyAjODE2Mgor6IWjID4gZMOsOyAjODE2Mwor6IWkID4gxIFuOyAjODE2NAor6IWlID4geMSrbmc7ICM4MTY1CivohaYgPiBuxINvOyAjODE2Ngor6IWnID4gecO6OyAjODE2Nwor6IWoID4gY2h1xINuOyAjODE2OAor6IWpID4gbsSDbjsgIzgxNjkKK+iFqiA+IHnDuW47ICM4MTZBCivohasgPiB6aMWPbmc7ICM4MTZCCivohawgPiByw7N1OyAjODE2Qwor6IWtID4gw6g7ICM4MTZECivoha4gPiBzxIFpOyAjODE2RQor6IWvID4gdMO6OyAjODE2Rgor6IWwID4gecSBbzsgIzgxNzAKK+iFsSA+IGppw6BuOyAjODE3MQor6IWyID4gd8SVaTsgIzgxNzIKK+iFsyA+IGppxINvOyAjODE3Mwor6IW0ID4gecO6OyAjODE3NAor6IW1ID4gamnEgTsgIzgxNzUKK+iFtiA+IGR1w6BuOyAjODE3Ngor6IW3ID4gYsOsOyAjODE3Nwor6IW4ID4gY2jDoW5nOyAjODE3OAor6IW5ID4gZsO5OyAjODE3OQor6IW6ID4geGnDoG47ICM4MTdBCivohbsgPiBuw6w7ICM4MTdCCivohbwgPiBtacSDbjsgIzgxN0MKK+iFvSA+IHfDoDsgIzgxN0QKK+iFviA+IHTDqW5nOyAjODE3RQor6IW/ID4gdMWtaTsgIzgxN0YKK+iGgCA+IGLEg25nOyAjODE4MAor6IaBID4gcWnEgW47ICM4MTgxCivohoIgPiBsx5o7ICM4MTgyCivohoMgPiB3w6A7ICM4MTgzCivohoQgPiBzw7J1OyAjODE4NAor6IaFID4gdMOhbmc7ICM4MTg1CivohoYgPiBzw7k7ICM4MTg2CivohocgPiB6aMO5aTsgIzgxODcKK+iGiCA+IGfDqTsgIzgxODgKK+iGiSA+IHnDrDsgIzgxODkKK+iGiiA+IGLDszsgIzgxOEEKK+iGiyA+IGxpw6FvOyAjODE4Qgor6IaMID4gasOtOyAjODE4Qwor6IaNID4gcMOtOyAjODE4RAor6IaOID4geGnDqTsgIzgxOEUKK+iGjyA+IGfEgW87ICM4MThGCivohpAgPiBsx5o7ICM4MTkwCivohpEgPiBiw6xuOyAjODE5MQor6IaSID4gb3U7ICM4MTkyCivohpMgPiBjaMOhbmc7ICM4MTkzCivohpQgPiBsw7k7ICM4MTk0CivohpUgPiBnw7pvOyAjODE5NQor6IaWID4gcMSBbmc7ICM4MTk2CivohpcgPiBjaHXDoWk7ICM4MTk3CivohpggPiBwacSDbzsgIzgxOTgKK+iGmSA+IGppxINuZzsgIzgxOTkKK+iGmiA+IGbFqzsgIzgxOUEKK+iGmyA+IHTDoW5nOyAjODE5Qgor6IacID4gbcOyOyAjODE5Qwor6IadID4geMSrOyAjODE5RAor6IaeID4gemh1xIFuOyAjODE5RQor6IafID4gbMecOyAjODE5Rgor6IagID4gamnEgW87ICM4MUEwCivohqEgPiB5w6xuZzsgIzgxQTEKK+iGoiA+IGzHmDsgIzgxQTIKK+iGoyA+IHpow6w7ICM4MUEzCivohqUgPiBjaMWrbjsgIzgxQTUKK+iGpiA+IGxpxINuOyAjODFBNgor6IanID4gdMOzbmc7ICM4MUE3CivohqggPiBww6luZzsgIzgxQTgKK+iGqSA+IG7DrDsgIzgxQTkKK+iGqiA+IHpow6A7ICM4MUFBCivohqsgPiBsacOhbzsgIzgxQUIKK+iGrCA+IGPDuWk7ICM4MUFDCivohq0gPiBnxatpOyAjODFBRAor6IauID4geGnEgW87ICM4MUFFCivohq8gPiB0xJNuZzsgIzgxQUYKK+iGsCA+IGbDoW47ICM4MUIwCivohrEgPiB6aMOtOyAjODFCMQor6IayID4gamnEgW87ICM4MUIyCivohrMgPiBzaMOgbjsgIzgxQjMKK+iGtCA+IHfDujsgIzgxQjQKK+iGtSA+IGPDuWk7ICM4MUI1CivohrYgPiByw7luOyAjODFCNgor6Ia3ID4geGnEgW5nOyAjODFCNwor6Ia4ID4gc8WtaTsgIzgxQjgKK+iGuSA+IGbDqG47ICM4MUI5CivohrogPiB5xKtuZzsgIzgxQkEKK+iGuyA+IHTEg247ICM4MUJCCivohrwgPiB6aHXEgTsgIzgxQkMKK+iGvSA+IGTEg247ICM4MUJECivohr4gPiBrdcOgaTsgIzgxQkUKK+iGvyA+IG7Ds25nOyAjODFCRgor6IeAID4gdMO6bjsgIzgxQzAKK+iHgSA+IGxpw6FuOyAjODFDMQor6IeCID4gYsOsOyAjODFDMgor6IeDID4gecWPbmc7ICM4MUMzCivoh4QgPiBqdcOpOyAjODFDNAor6IeFID4gY2jDuTsgIzgxQzUKK+iHhiA+IHnDrDsgIzgxQzYKK+iHhyA+IGp1xINuOyAjODFDNwor6IeIID4gbMOgOyAjODFDOAor6IeJID4gbGnEg247ICM4MUM5Civoh4ogPiBzxIFvOyAjODFDQQor6IeLID4gdMO6bjsgIzgxQ0IKK+iHjCA+IGfFrTsgIzgxQ0MKK+iHjSA+IHHDrTsgIzgxQ0QKK+iHjiA+IGPDuWk7ICM4MUNFCivoh48gPiBiw6xuOyAjODFDRgor6IeQID4geMWrbjsgIzgxRDAKK+iHkSA+IHLDujsgIzgxRDEKK+iHkiA+IGjDuW87ICM4MUQyCivoh5MgPiB6w6BuZzsgIzgxRDMKK+iHlCA+IHhpw6BuOyAjODFENAor6IeVID4gYmnEgW87ICM4MUQ1Civoh5YgPiB4w6xuZzsgIzgxRDYKK+iHlyA+IGt1xIFuOyAjODFENwor6IeYID4gbMOgOyAjODFEOAor6IeZID4gecSBbjsgIzgxRDkKK+iHmiA+IGzDujsgIzgxREEKK+iHmyA+IGjDuW87ICM4MURCCivoh5wgPiB6xIFuZzsgIzgxREMKK+iHnSA+IGzFrW87ICM4MURECivoh54gPiBxw7o7ICM4MURFCivoh58gPiB6w6BuZzsgIzgxREYKK+iHoCA+IGx1w6FuOyAjODFFMAor6IehID4gbsOtOyAjODFFMQor6IeiID4gesSBbmc7ICM4MUUyCivoh6MgPiBjaMOpbjsgIzgxRTMKK+iHpCA+IHFpxIFuOyAjODFFNAor6IelID4gd8OyOyAjODFFNQor6IemID4gZ3XDoG5nOyAjODFFNgor6IenID4gesOhbmc7ICM4MUU3Civoh6ggPiBsw61uOyAjODFFOAor6IepID4gZ3XDoG5nOyAjODFFOQor6IeqID4gesOsOyAjODFFQQor6IerID4gamnEg287ICM4MUVCCivoh6wgPiBuacOoOyAjODFFQwor6IetID4gY2jDsnU7ICM4MUVECivoh64gPiBqw6w7ICM4MUVFCivoh68gPiBnxIFvOyAjODFFRgor6IewID4gY2jDsnU7ICM4MUYwCivoh7EgPiBtacOhbjsgIzgxRjEKK+iHsiA+IG5pw6g7ICM4MUYyCivoh7MgPiB6aMOsOyAjODFGMwor6Ie0ID4gemjDrDsgIzgxRjQKK+iHtSA+IGfDqTsgIzgxRjUKK+iHtiA+IGppw6BuOyAjODFGNgor6Ie3ID4gZGnDqTsgIzgxRjcKK+iHuCA+IHpow6w7ICM4MUY4Civoh7kgPiB4xKt1OyAjODFGOQor6Ie6ID4gdMOhaTsgIzgxRkEKK+iHuyA+IHpoxJNuOyAjODFGQgor6Ie8ID4gasOsdTsgIzgxRkMKK+iHvSA+IHhpw6BuOyAjODFGRAor6Ie+ID4gecO6OyAjODFGRQor6Ie/ID4gY2jEgTsgIzgxRkYKK+iIgCA+IHnEg287ICM4MjAwCivoiIEgPiB5w7o7ICM4MjAxCivoiIIgPiBjaMWNbmc7ICM4MjAyCivoiIMgPiB4w6w7ICM4MjAzCivoiIQgPiB4w6w7ICM4MjA0CivoiIUgPiBqw6x1OyAjODIwNQor6IiGID4gecO6OyAjODIwNgor6IiHID4gecWtOyAjODIwNwor6IiIID4geMSrbmc7ICM4MjA4CivoiIkgPiBqxa07ICM4MjA5CivoiIogPiBqw6x1OyAjODIwQQor6IiLID4geMOsbjsgIzgyMEIKK+iIjCA+IHNow6k7ICM4MjBDCivoiI0gPiBzaMOoOyAjODIwRAor6IiPID4gasStdTsgIzgyMEYKK+iIkCA+IHNow6w7ICM4MjEwCivoiJEgPiB0xIFuOyAjODIxMQor6IiSID4gc2jFqzsgIzgyMTIKK+iIkyA+IHNow6w7ICM4MjEzCivoiJQgPiB0acSDbjsgIzgyMTQKK+iIlSA+IGTDoG47ICM4MjE1CivoiJYgPiBww7k7ICM4MjE2CivoiJcgPiBww7k7ICM4MjE3CivoiJggPiBndcSDbjsgIzgyMTgKK+iImSA+IGh1w6A7ICM4MjE5CivoiJogPiB0xIFuOyAjODIxQQor6IibID4gY2h1xINuOyAjODIxQgor6IicID4gc2jDuW47ICM4MjFDCivoiJ0gPiB4acOhOyAjODIxRAor6IieID4gd8WtOyAjODIxRQor6IifID4gemjFjXU7ICM4MjFGCivoiKAgPiBkxIFvOyAjODIyMAor6IihID4gZ8SBbmc7ICM4MjIxCivoiKIgPiBzaMSBbjsgIzgyMjIKK+iIoyA+IHnErTsgIzgyMjMKK+iIpSA+IHDEgTsgIzgyMjUKK+iIpiA+IHTDoGk7ICM4MjI2CivoiKcgPiBmw6FuOyAjODIyNwor6IioID4gYsSDbjsgIzgyMjgKK+iIqSA+IGNodcOhbjsgIzgyMjkKK+iIqiA+IGjDoW5nOyAjODIyQQor6IirID4gZsSDbmc7ICM4MjJCCivoiKwgPiBixIFuOyAjODIyQwor6IitID4gcXXDqDsgIzgyMkQKK+iIryA+IHpoxY1uZzsgIzgyMkYKK+iIsCA+IGppw6BuOyAjODIzMAor6IixID4gY8SBbmc7ICM4MjMxCivoiLIgPiBsw61uZzsgIzgyMzIKK+iIsyA+IHpow7o7ICM4MjMzCivoiLQgPiB6w6k7ICM4MjM0CivoiLUgPiBkw7lvOyAjODIzNQor6Ii2ID4gYsOzOyAjODIzNgor6Ii3ID4geGnDoW47ICM4MjM3CivoiLggPiBnxJU7ICM4MjM4CivoiLkgPiBjaHXDoW47ICM4MjM5CivoiLogPiBqacOhOyAjODIzQQor6Ii7ID4gbMWtOyAjODIzQgor6Ii8ID4gaMOzbmc7ICM4MjNDCivoiL0gPiBww6FuZzsgIzgyM0QKK+iIviA+IHjEqzsgIzgyM0UKK+iJgCA+IGbDujsgIzgyNDAKK+iJgSA+IHrDoG87ICM4MjQxCivoiYIgPiBmw6luZzsgIzgyNDIKK+iJgyA+IGzDrTsgIzgyNDMKK+iJhCA+IHNoxIFvOyAjODI0NAor6ImFID4gecO6OyAjODI0NQor6ImGID4gbMOhbmc7ICM4MjQ2CivoiYcgPiB0xK1uZzsgIzgyNDcKK+iJiSA+IHfElWk7ICM4MjQ5CivoiYogPiBiw7M7ICM4MjRBCivoiYsgPiBtxJVuZzsgIzgyNEIKK+iJjCA+IG5pw6BuOyAjODI0Qwor6ImNID4gasWrOyAjODI0RAor6ImOID4gaHXDoW5nOyAjODI0RQor6ImPID4gc2jFj3U7ICM4MjRGCivoiZAgPiB6xY1uZzsgIzgyNTAKK+iJkSA+IGJpw6BuOyAjODI1MQor6ImSID4gbcOgbzsgIzgyNTIKK+iJkyA+IGRpw6k7ICM4MjUzCivoiZUgPiBiw6BuZzsgIzgyNTUKK+iJliA+IGNoxIE7ICM4MjU2CivoiZcgPiB5w6w7ICM4MjU3CivoiZggPiBzxIFvOyAjODI1OAor6ImZID4gY8SBbmc7ICM4MjU5CivoiZogPiBjw6FvOyAjODI1QQor6ImbID4gbMOzdTsgIzgyNUIKK+iJnCA+IGTDoGk7ICM4MjVDCivoiZ4gPiB5w6BvOyAjODI1RQor6ImfID4gdMOzbmc7ICM4MjVGCivoiaEgPiBkxIFuZzsgIzgyNjEKK+iJoiA+IHTDoW47ICM4MjYyCivoiaMgPiBsxa07ICM4MjYzCivoiaQgPiB5xK07ICM4MjY0CivoiaUgPiBqacOoOyAjODI2NQor6ImmID4gamnDoG47ICM4MjY2CivoiacgPiBow7lvOyAjODI2Nwor6ImoID4gbcOpbmc7ICM4MjY4CivoiakgPiBxw607ICM4MjY5CivoiaogPiBsxa07ICM4MjZBCivoiasgPiBsw7o7ICM4MjZCCivoiawgPiBjaMOhbjsgIzgyNkMKK+iJrSA+IHNodcSBbmc7ICM4MjZECivoia4gPiBnw6huOyAjODI2RQor6ImvID4gbGnDoW5nOyAjODI2Rgor6ImwID4gamnEgW47ICM4MjcwCivoibEgPiBqacSBbjsgIzgyNzEKK+iJsiA+IHPDqDsgIzgyNzIKK+iJsyA+IHnDoG47ICM4MjczCivoibQgPiBmw7o7ICM4Mjc0CivoibUgPiBww61uZzsgIzgyNzUKK+iJtiA+IHnDoG47ICM4Mjc2CivoibcgPiB5w6BuOyAjODI3Nwor6Im4ID4gY8SDbzsgIzgyNzgKK+iJuSA+IGPEg28nICd6w6wnICd0w7N1OyAjODI3OQor6Im6ID4gecOsOyAjODI3QQor6Im7ID4gbMOoOyAjODI3Qgor6Im8ID4gdMSrbmc7ICM4MjdDCivoib0gPiBxw611OyAjODI3RAor6Im+ID4gw6BpOyAjODI3RQor6Im/ID4gbsSDaTsgIzgyN0YKK+iKgCA+IHRpw6FvOyAjODI4MAor6IqBID4gamnEgW87ICM4MjgxCivoioIgPiBqacOpOyAjODI4Mgor6IqDID4gcMOpbmc7ICM4MjgzCivoioQgPiB3w6FuOyAjODI4NAor6IqFID4gecOsOyAjODI4NQor6IqGID4gY2jEgWk7ICM4Mjg2CivoiocgPiBtacOhbjsgIzgyODcKK+iKiCA+IG1pxJM7ICM4Mjg4CivoiokgPiBnxIFuOyAjODI4OQor6IqKID4gcWnEgW47ICM4MjhBCivoiosgPiB5w7k7ICM4MjhCCivoiowgPiB5w7k7ICM4MjhDCivoio0gPiBzaMO5bzsgIzgyOEQKK+iKjiA+IHHEq29uZzsgIzgyOEUKK+iKjyA+IHTFrTsgIzgyOEYKK+iKkCA+IHhpw6A7ICM4MjkwCivoipEgPiBxxK07ICM4MjkxCivoipIgPiBtw6FuZzsgIzgyOTIKK+iKkyA+IHrErTsgIzgyOTMKK+iKlCA+IGjFrWk7ICM4Mjk0CivoipUgPiBzxatpOyAjODI5NQor6IqWID4gemjDrDsgIzgyOTYKK+iKlyA+IHhpxIFuZzsgIzgyOTcKK+iKmCA+IGLEqzsgIzgyOTgKK+iKmSA+IGbDujsgIzgyOTkKK+iKmiA+IHTDum47ICM4MjlBCivoipsgPiB3xJVpOyAjODI5Qgor6IqcID4gd8O6OyAjODI5Qwor6IqdID4gemjEqzsgIzgyOUQKK+iKniA+IHHErTsgIzgyOUUKK+iKnyA+IHNoxIFuOyAjODI5Rgor6IqgID4gd8OpbjsgIzgyQTAKK+iKoSA+IHFpw6BuOyAjODJBMQor6IqiID4gcsOpbjsgIzgyQTIKK+iKoyA+IGbFj3U7ICM4MkEzCivoiqQgPiBrxY11OyAjODJBNAor6IqlID4gamnDqDsgIzgyQTUKK+iKpiA+IGzDujsgIzgyQTYKK+iKpyA+IHjDuTsgIzgyQTcKK+iKqCA+IGrDrTsgIzgyQTgKK+iKqSA+IHHDrW47ICM4MkE5CivoiqogPiBxw607ICM4MkFBCivoiqsgPiB5dcOhbjsgIzgyQUIKK+iKrCA+IGbEk247ICM4MkFDCivoiq0gPiBixIE7ICM4MkFECivoiq4gPiByw7lpOyAjODJBRQor6IqvID4geMSrbjsgIzgyQUYKK+iKsCA+IGrDrDsgIzgyQjAKK+iKsSA+IGh1xIE7ICM4MkIxCivoirIgPiBodcSBOyAjODJCMgor6IqzID4gZsSBbmc7ICM4MkIzCivoirQgPiB3w7k7ICM4MkI0CivoirUgPiBqdcOpOyAjODJCNQor6Iq2ID4gZ8WNdTsgIzgyQjYKK+iKtyA+IHpoxK07ICM4MkI3CivoirggPiB5w7puOyAjODJCOAor6Iq5ID4gccOtbjsgIzgyQjkKK+iKuiA+IMSDbzsgIzgyQkEKK+iKuyA+IGNow7o7ICM4MkJCCivoirwgPiBtw6BvOyAjODJCQwor6Iq9ID4gecOhOyAjODJCRAor6Iq+ID4gZsOoaTsgIzgyQkUKK+iKvyA+IHLDqG5nOyAjODJCRgor6IuAID4gaMOhbmc7ICM4MkMwCivoi4EgPiBjxY1uZzsgIzgyQzEKK+iLgiA+IHnDrW47ICM4MkMyCivoi4MgPiB5xY91OyAjODJDMwor6IuEID4gYmnDoG47ICM4MkM0Civoi4UgPiB5w6w7ICM4MkM1Civoi4cgPiB3xJVpOyAjODJDNwor6IuIID4gbMOsOyAjODJDOAor6IuJID4gcMStOyAjODJDOQor6IuKID4gw6g7ICM4MkNBCivoi4sgPiB4acOgbjsgIzgyQ0IKK+iLjCA+IGNow6FuZzsgIzgyQ0MKK+iLjSA+IGPEgW5nOyAjODJDRAor6IuOID4gbcOpbmc7ICM4MkNFCivoi48gPiBzxas7ICM4MkNGCivoi5AgPiB5w607ICM4MkQwCivoi5EgPiB5dcOgbjsgIzgyRDEKK+iLkiA+IHLEg247ICM4MkQyCivoi5MgPiBsw61uZzsgIzgyRDMKK+iLlCA+IHTDoWk7ICM4MkQ0Civoi5UgPiB0acOhbzsgIzgyRDUKK+iLliA+IGTErTsgIzgyRDYKK+iLlyA+IG1pw6FvOyAjODJENwor6IuYID4gccStb25nOyAjODJEOAor6IuZID4gbMOsOyAjODJEOQor6IuaID4gecOybmc7ICM4MkRBCivoi5sgPiBrxJM7ICM4MkRCCivoi5wgPiBtw7k7ICM4MkRDCivoi50gPiBww6hpOyAjODJERAor6IueID4gYsSBbzsgIzgyREUKK+iLnyA+IGfFj3U7ICM4MkRGCivoi6AgPiBtw61uOyAjODJFMAor6IuhID4gecStOyAjODJFMQor6IuiID4gecStOyAjODJFMgor6IujID4gasO5OyAjODJFMwor6IukID4gcMStOyAjODJFNAor6IulID4gcsO5bzsgIzgyRTUKK+iLpiA+IGvFrTsgIzgyRTYKK+iLpyA+IHpow7k7ICM4MkU3Civoi6ggPiBuxK07ICM4MkU4Civoi6kgPiBiw7M7ICM4MkU5Civoi6ogPiBixK1uZzsgIzgyRUEKK+iLqyA+IHNoxIFuOyAjODJFQgor6IusID4gccOtdTsgIzgyRUMKK+iLrSA+IHnEg287ICM4MkVECivoi64gPiB4acSBbjsgIzgyRUUKK+iLryA+IGLElW47ICM4MkVGCivoi7AgPiBow7NuZzsgIzgyRjAKK+iLsSA+IHnEq25nOyAjODJGMQor6IuyID4gemjEgzsgIzgyRjIKK+iLsyA+IGTFjW5nOyAjODJGMwor6Iu0ID4gasWrOyAjODJGNAor6Iu1ID4gZGnDqTsgIzgyRjUKK+iLtiA+IG5pw6k7ICM4MkY2Civoi7cgPiBnxIFuOyAjODJGNwor6Iu4ID4gaMWrOyAjODJGOAor6Iu5ID4gcMOtbmc7ICM4MkY5Civoi7ogPiBtw6lpOyAjODJGQQor6Iu7ID4gZsO6OyAjODJGQgor6Iu8ID4gc2jEk25nOyAjODJGQwor6Iu9ID4gZ8WrOyAjODJGRAor6Iu+ID4gYsOsOyAjODJGRQor6Iu/ID4gd8OoaTsgIzgyRkYKK+iMgCA+IGbDujsgIzgzMDAKK+iMgSA+IHpow7pvOyAjODMwMQor6IyCID4gbcOgbzsgIzgzMDIKK+iMgyA+IGbDoG47ICM4MzAzCivojIQgPiBxacOpOyAjODMwNAor6IyFID4gbcOhbzsgIzgzMDUKK+iMhiA+IG3Eg287ICM4MzA2CivojIcgPiBiw6E7ICM4MzA3CivojIggPiB6xK07ICM4MzA4CivojIkgPiBtw7I7ICM4MzA5CivojIogPiB6xKs7ICM4MzBBCivojIsgPiBkxK07ICM4MzBCCivojIwgPiBjaMOtOyAjODMwQwor6IyNID4gasOsOyAjODMwRAor6IyOID4gasSrbmc7ICM4MzBFCivojI8gPiBsw7NuZzsgIzgzMEYKK+iMkSA+IG5pxINvOyAjODMxMQor6IyTID4geHXDqTsgIzgzMTMKK+iMlCA+IHnDrW5nOyAjODMxNAor6IyVID4gccOtb25nOyAjODMxNQor6IyWID4gZ8OpOyAjODMxNgor6IyXID4gbcStbmc7ICM4MzE3CivojJggPiBsw6w7ICM4MzE4CivojJkgPiByw7NuZzsgIzgzMTkKK+iMmiA+IHnDrG47ICM4MzFBCivojJsgPiBnw6huOyAjODMxQgor6IycID4gcWnDoG47ICM4MzFDCivojJ0gPiBjaMSDaTsgIzgzMUQKK+iMniA+IGNow6luOyAjODMxRQor6IyfID4gecO5OyAjODMxRgor6IygID4geMSrdTsgIzgzMjAKK+iMoSA+IHrDrDsgIzgzMjEKK+iMoiA+IGxpw6g7ICM4MzIyCivojKMgPiB3w7o7ICM4MzIzCivojKQgPiBqw6w7ICM4MzI0CivojKUgPiBrxatpOyAjODMyNQor6IymID4gY8OoOyAjODMyNgor6IynID4gY2jDs25nOyAjODMyNwor6IyoID4gY8OtOyAjODMyOAor6IypID4gZ8WPdTsgIzgzMjkKK+iMqiA+IGd1xIFuZzsgIzgzMkEKK+iMqyA+IG3DoW5nOyAjODMyQgor6IysID4gY2jDrTsgIzgzMkMKK+iMrSA+IGppxIFvOyAjODMyRAor6IyuID4gamnEgW87ICM4MzJFCivojK8gPiBmw7o7ICM4MzJGCivojLAgPiB5w7o7ICM4MzMwCivojLEgPiB6aMWrOyAjODMzMQor6IyyID4gesSrOyAjODMzMgor6IyzID4gamnEgW5nOyAjODMzMwor6Iy0ID4gaMO6aTsgIzgzMzQKK+iMtSA+IHnEq247ICM4MzM1CivojLYgPiBjaMOhOyAjODMzNgor6Iy3ID4gZsOhOyAjODMzNwor6Iy4ID4gcsOzbmc7ICM4MzM4CivojLkgPiByw7o7ICM4MzM5CivojLogPiBjaMWNbmc7ICM4MzNBCivojLsgPiBtxINuZzsgIzgzM0IKK+iMvCA+IHTDs25nOyAjODMzQwor6Iy9ID4gemjDsm5nOyAjODMzRAor6Iy/ID4gemjDujsgIzgzM0YKK+iNgCA+IHjDum47ICM4MzQwCivojYEgPiBodcOhbjsgIzgzNDEKK+iNgiA+IGt1xIE7ICM4MzQyCivojYMgPiBxdcOhbjsgIzgzNDMKK+iNhCA+IGfEgWk7ICM4MzQ0CivojYUgPiBkxIE7ICM4MzQ1CivojYYgPiBqxKtuZzsgIzgzNDYKK+iNhyA+IHjDrG5nOyAjODM0Nwor6I2IID4gcXXDoG47ICM4MzQ4CivojYkgPiBjxINvOyAjODM0OQor6I2KID4gasSrbmc7ICM4MzRBCivojYsgPiDDqXI7ICM4MzRCCivojYwgPiDDoG47ICM4MzRDCivojY0gPiBzaMWNdTsgIzgzNEQKK+iNjiA+IGNow607ICM4MzRFCivojY8gPiByxJVuOyAjODM0Rgor6I2QID4gamnDoG47ICM4MzUwCivojZEgPiB0w607ICM4MzUxCivojZIgPiBodcSBbmc7ICM4MzUyCivojZMgPiBww61uZzsgIzgzNTMKK+iNlCA+IGzDrDsgIzgzNTQKK+iNlSA+IGrEq247ICM4MzU1CivojZYgPiBsxINvOyAjODM1Ngor6I2XID4gc2jDuTsgIzgzNTcKK+iNmCA+IHpodcSBbmc7ICM4MzU4CivojZkgPiBkw6E7ICM4MzU5CivojZogPiBqacOhOyAjODM1QQor6I2bID4gcsOhbzsgIzgzNUIKK+iNnCA+IGLDrDsgIzgzNUMKK+iNnSA+IHrDqTsgIzgzNUQKK+iNniA+IHFpw6FvOyAjODM1RQor6I2fID4gaMO5aTsgIzgzNUYKK+iNoCA+IHHDrTsgIzgzNjAKK+iNoSA+IGTDoG5nOyAjODM2MQor6I2jID4gcsOzbmc7ICM4MzYzCivojaQgPiBoxatuOyAjODM2NAor6I2lID4gecOtbmc7ICM4MzY1CivojaYgPiBsw7lvOyAjODM2Ngor6I2nID4gecOtbmc7ICM4MzY3CivojaggPiB4w7puOyAjODM2OAor6I2pID4gasOsbjsgIzgzNjkKK+iNqiA+IHPFq247ICM4MzZBCivojasgPiB5w6xuOyAjODM2Qgor6I2sID4gbcSDaTsgIzgzNkMKK+iNrSA+IGjDs25nOyAjODM2RAor6I2uID4gemjDsnU7ICM4MzZFCivoja8gPiB5w6BvOyAjODM2Rgor6I2wID4gZMO5OyAjODM3MAor6I2xID4gd8SVaTsgIzgzNzEKK+iNsiA+IGNow7k7ICM4MzcyCivojbMgPiBkw7J1OyAjODM3Mwor6I20ID4gZsWrOyAjODM3NAor6I21ID4gcsSVbjsgIzgzNzUKK+iNtiA+IHnDrW47ICM4Mzc2CivojbcgPiBow6k7ICM4Mzc3CivojbggPiBiw607ICM4Mzc4CivojbkgPiBiw7k7ICM4Mzc5CivojbogPiB5w7puOyAjODM3QQor6I27ID4gZMOtOyAjODM3Qgor6I28ID4gdMO6OyAjODM3Qwor6I29ID4gc8WraTsgIzgzN0QKK+iNviA+IHPFq2k7ICM4MzdFCivojb8gPiBjaMOpbmc7ICM4MzdGCivojoAgPiBjaMOpbjsgIzgzODAKK+iOgSA+IHfDujsgIzgzODEKK+iOgiA+IGJpw6k7ICM4MzgyCivojoMgPiB4xKs7ICM4MzgzCivojoQgPiBnxJVuZzsgIzgzODQKK+iOhSA+IGzDrDsgIzgzODUKK+iOhiA+IGbFrTsgIzgzODYKK+iOhyA+IHpow7k7ICM4Mzg3CivojoggPiBtw7I7ICM4Mzg4CivojokgPiBsw6w7ICM4Mzg5CivojoogPiB6aHXEgW5nOyAjODM4QQor6I6LID4gasOtOyAjODM4Qgor6I6MID4gZMO6bzsgIzgzOEMKK+iOjSA+IHHDrXU7ICM4MzhECivojo4gPiBzaMSBOyAjODM4RQor6I6PID4gc8WrbzsgIzgzOEYKK+iOkCA+IGNow6luOyAjODM5MAor6I6RID4gZsSTbmc7ICM4MzkxCivojpIgPiBqxa07ICM4MzkyCivojpMgPiBtw6lpOyAjODM5Mwor6I6UID4gbcOpbmc7ICM4Mzk0CivojpUgPiB4w6xuZzsgIzgzOTUKK+iOliA+IGrEq25nOyAjODM5Ngor6I6XID4gY2jEkzsgIzgzOTcKK+iOmCA+IHjEq247ICM4Mzk4CivojpkgPiBqxatuOyAjODM5OQor6I6aID4gecOhbjsgIzgzOUEKK+iOmyA+IHTDrW5nOyAjODM5Qgor6I6cID4gZGnDoG87ICM4MzlDCivojp0gPiBjw7lvOyAjODM5RAor6I6eID4gd8SDbjsgIzgzOUUKK+iOnyA+IGjDoG47ICM4MzlGCivojqAgPiB5xY91OyAjODNBMAor6I6hID4gY8O5bzsgIzgzQTEKK+iOoiA+IGppw6E7ICM4M0EyCivojqMgPiB3w6FuZzsgIzgzQTMKK+iOpCA+IHnDs3U7ICM4M0E0CivojqUgPiBuxK11OyAjODNBNQor6I6mID4gc2jEgW87ICM4M0E2CivojqcgPiB4acOgbjsgIzgzQTcKK+iOqCA+IGzDoW5nOyAjODNBOAor6I6pID4gZsO6OyAjODNBOQor6I6qID4gw6k7ICM4M0FBCivojqsgPiBtw7I7ICM4M0FCCivojqwgPiB3w6huOyAjODNBQwor6I6tID4gamnDqTsgIzgzQUQKK+iOriA+IG7DoW47ICM4M0FFCivojq8gPiBtw7k7ICM4M0FGCivojrAgPiBrxINuOyAjODNCMAor6I6xID4gbMOhaTsgIzgzQjEKK+iOsiA+IGxpw6FuOyAjODNCMgor6I6zID4gc2jDrTsgIzgzQjMKK+iOtCA+IHfFjTsgIzgzQjQKK+iOtiA+IGxpxINuOyAjODNCNgor6I63ID4gaMO5bzsgIzgzQjcKK+iOuCA+IHnDs3U7ICM4M0I4CivojrkgPiB5w61uZzsgIzgzQjkKK+iOuiA+IHnEq25nOyAjODNCQQor6I68ID4gY2jDum47ICM4M0JDCivojr0gPiBtxINuZzsgIzgzQkQKK+iOviA+IG3Eg25nOyAjODNCRQor6I6/ID4gY8OsOyAjODNCRgor6I+AID4gd8SDbjsgIzgzQzAKK+iPgSA+IGrEq25nOyAjODNDMQor6I+CID4gZMSrOyAjODNDMgor6I+DID4gccO6OyAjODNDMwor6I+EID4gZMWNbmc7ICM4M0M0Civoj4UgPiBqacSBbjsgIzgzQzUKK+iPhiA+IHrFjXU7ICM4M0M2Civoj4cgPiBnxas7ICM4M0M3Civoj4ggPiBsxIE7ICM4M0M4Civoj4kgPiBsw7k7ICM4M0M5Civoj4ogPiBqw7o7ICM4M0NBCivoj4sgPiB3w6hpOyAjODNDQgor6I+MID4gasO5bjsgIzgzQ0MKK+iPjSA+IG5pw6g7ICM4M0NECivoj44gPiBrxatuOyAjODNDRQor6I+PID4gaMOpOyAjODNDRgor6I+QID4gcMO6OyAjODNEMAor6I+RID4gesSrOyAjODNEMQor6I+SID4gZ8SDbzsgIzgzRDIKK+iPkyA+IGfFrW87ICM4M0QzCivoj5QgPiBmw7o7ICM4M0Q0Civoj5UgPiBsw7puOyAjODNENQor6I+WID4gY2jEgW5nOyAjODNENgor6I+XID4gY2jDs3U7ICM4M0Q3Civoj5ggPiBzxY1uZzsgIzgzRDgKK+iPmSA+IGNow7ppOyAjODNEOQor6I+aID4gemjDoG47ICM4M0RBCivoj5sgPiBtw6luOyAjODNEQgor6I+cID4gY8OgaTsgIzgzREMKK+iPnSA+IGLDoTsgIzgzREQKK+iPniA+IGzDrTsgIzgzREUKK+iPnyA+IHTDuTsgIzgzREYKK+iPoCA+IGLFjTsgIzgzRTAKK+iPoSA+IGjDoG47ICM4M0UxCivoj6IgPiBiw6BvOyAjODNFMgor6I+jID4gccOsbjsgIzgzRTMKK+iPpCA+IGp1xINuOyAjODNFNAor6I+lID4geMSrOyAjODNFNQor6I+mID4gccOtbjsgIzgzRTYKK+iPpyA+IGTErTsgIzgzRTcKK+iPqCA+IGppxJM7ICM4M0U4Civoj6kgPiBww7o7ICM4M0U5Civoj6ogPiBkw6BuZzsgIzgzRUEKK+iPqyA+IGrErW47ICM4M0VCCivoj6wgPiB6aMSDbzsgIzgzRUMKK+iPrSA+IHTDoWk7ICM4M0VECivoj64gPiBnxJNuZzsgIzgzRUUKK+iPryA+IGh1w6E7ICM4M0VGCivoj7AgPiBnxas7ICM4M0YwCivoj7EgPiBsw61uZzsgIzgzRjEKK+iPsiA+IGbEk2k7ICM4M0YyCivoj7MgPiBqxKtuOyAjODNGMwor6I+0ID4gxIFuOyAjODNGNAor6I+1ID4gd8SDbmc7ICM4M0Y1Civoj7YgPiBixJVuZzsgIzgzRjYKK+iPtyA+IHpoxY91OyAjODNGNwor6I+4ID4gecSBbjsgIzgzRjgKK+iPuSA+IGrFqzsgIzgzRjkKK+iPuiA+IGppxIFuOyAjODNGQQor6I+7ID4gbMStbjsgIzgzRkIKK+iPvCA+IHTEg247ICM4M0ZDCivoj70gPiBzaMO6OyAjODNGRAor6I++ID4gdGnDoW47ICM4M0ZFCivoj78gPiBkw6BvOyAjODNGRgor6JCAID4gaMWtOyAjODQwMAor6JCBID4gccOtOyAjODQwMQor6JCCID4gaMOpOyAjODQwMgor6JCDID4gY8O5aTsgIzg0MDMKK+iQhCA+IHTDoW87ICM4NDA0CivokIUgPiBjaMWrbjsgIzg0MDUKK+iQhiA+IGLEk2k7ICM4NDA2CivokIcgPiBjaMOhbmc7ICM4NDA3CivokIggPiBodcOhbjsgIzg0MDgKK+iQiSA+IGbDqWk7ICM4NDA5CivokIogPiBsw6FpOyAjODQwQQor6JCLID4gccSrOyAjODQwQgor6JCMID4gbcOpbmc7ICM4NDBDCivokI0gPiBww61uZzsgIzg0MEQKK+iQjiA+IHfEk2k7ICM4NDBFCivokI8gPiBkw6BuOyAjODQwRgor6JCQID4gc2jDoDsgIzg0MTAKK+iQkSA+IGh1w6FuOyAjODQxMQor6JCSID4gecSDbjsgIzg0MTIKK+iQkyA+IHnDrTsgIzg0MTMKK+iQlCA+IHRpw6FvOyAjODQxNAor6JCVID4gccOtOyAjODQxNQor6JCWID4gd8SDbjsgIzg0MTYKK+iQlyA+IGPDqDsgIzg0MTcKK+iQmCA+IG7DoGk7ICM4NDE4CivokJogPiB0w7lvOyAjODQxQQor6JCbID4gasSrdTsgIzg0MUIKK+iQnCA+IHRpxJM7ICM4NDFDCivokJ0gPiBsw7pvOyAjODQxRAor6JCgID4gbcOpbmc7ICM4NDIwCivokKQgPiB5w61uZzsgIzg0MjQKK+iQpSA+IHnDrW5nOyAjODQyNQor6JCmID4gecOtbmc7ICM4NDI2CivokKcgPiB4acSBbzsgIzg0MjcKK+iQqCA+IHPDoDsgIzg0MjgKK+iQqSA+IHHEq3U7ICM4NDI5CivokKogPiBrxJM7ICM4NDJBCivokKsgPiB4acOgbmc7ICM4NDJCCivokKwgPiB3w6BuOyAjODQyQwor6JCtID4gecWtOyAjODQyRAor6JCuID4gecO5OyAjODQyRQor6JCvID4gZsO5OyAjODQyRgor6JCwID4gbGnDoG47ICM4NDMwCivokLEgPiB4dcSBbjsgIzg0MzEKK+iQsiA+IHl1w6FuOyAjODQzMgor6JCzID4gbsOhbjsgIzg0MzMKK+iQtCA+IHrDqTsgIzg0MzQKK+iQtSA+IHfFjTsgIzg0MzUKK+iQtiA+IGNoxa1uOyAjODQzNgor6JC3ID4geGnEgW87ICM4NDM3CivokLggPiB5w7o7ICM4NDM4CivokLkgPiBwacSBbjsgIzg0MzkKK+iQuiA+IG3DoG87ICM4NDNBCivokLsgPiDEgW47ICM4NDNCCivokLwgPiDDqDsgIzg0M0MKK+iQvSA+IGzDuW87ICM4NDNECivokL4gPiB5w61uZzsgIzg0M0UKK+iQvyA+IGjDum87ICM4NDNGCivokYAgPiBndcSBOyAjODQ0MAor6JGBID4gamnEgW5nOyAjODQ0MQor6JGCID4gbWnEg247ICM4NDQyCivokYMgPiB6w7pvOyAjODQ0Mwor6JGEID4gesO5bzsgIzg0NDQKK+iRhSA+IGrFqzsgIzg0NDUKK+iRhiA+IGLEg287ICM4NDQ2CivokYcgPiByw7N1OyAjODQ0Nwor6JGIID4geMStOyAjODQ0OAor6JGJID4geGnDqTsgIzg0NDkKK+iRiiA+IMSBbjsgIzg0NEEKK+iRiyA+IHHDujsgIzg0NEIKK+iRjCA+IGppxIFuOyAjODQ0Qwor6JGNID4gZsO6OyAjODQ0RAor6JGOID4gbMecOyAjODQ0RQor6JGPID4gasSrbmc7ICM4NDRGCivokZAgPiBww6luOyAjODQ1MAor6JGRID4gZsSTbmc7ICM4NDUxCivokZIgPiBow7NuZzsgIzg0NTIKK+iRkyA+IGjDs25nOyAjODQ1Mwor6JGUID4gaMOzdTsgIzg0NTQKK+iRlSA+IHnDoW47ICM4NDU1CivokZYgPiB0w7o7ICM4NDU2CivokZcgPiB6aMO5OyAjODQ1Nwor6JGYID4gesSrOyAjODQ1OAor6JGZID4geGnEgW5nOyAjODQ1OQor6JGaID4gc2jDqG47ICM4NDVBCivokZsgPiBnxJU7ICM4NDVCCivokZwgPiBqacOpOyAjODQ1Qwor6JGdID4gasOsbmc7ICM4NDVECivokZ4gPiBtxK07ICM4NDVFCivokZ8gPiBodcOhbmc7ICM4NDVGCivokaAgPiBzaMSTbjsgIzg0NjAKK+iRoSA+IHDDujsgIzg0NjEKK+iRoiA+IGfDoGk7ICM4NDYyCivokaMgPiBkxY9uZzsgIzg0NjMKK+iRpCA+IHpow7J1OyAjODQ2NAor6JGlID4gcWnDoW47ICM4NDY1CivokaYgPiB3xJVpOyAjODQ2Ngor6JGnID4gYsOzOyAjODQ2Nwor6JGoID4gd8STaTsgIzg0NjgKK+iRqSA+IHDEgTsgIzg0NjkKK+iRqiA+IGrDrDsgIzg0NkEKK+iRqyA+IGjDujsgIzg0NkIKK+iRrCA+IHrDoG5nOyAjODQ2Qwor6JGtID4gamnEgTsgIzg0NkQKK+iRriA+IGR1w6BuOyAjODQ2RQor6JGvID4gecOgbzsgIzg0NkYKK+iRsCA+IGrDuW47ICM4NDcwCivokbEgPiBjxY1uZzsgIzg0NzEKK+iRsiA+IHF1w6FuOyAjODQ3Mgor6JGzID4gd8STaTsgIzg0NzMKK+iRtCA+IHhpw6FuOyAjODQ3NAor6JG1ID4ga8O6aTsgIzg0NzUKK+iRtiA+IHTDrW5nOyAjODQ3Ngor6JG3ID4gaMWrbjsgIzg0NzcKK+iRuCA+IHjErTsgIzg0NzgKK+iRuSA+IHNoxKs7ICM4NDc5CivokbogPiBxw6w7ICM4NDdBCivokbsgPiBsw6FuOyAjODQ3Qgor6JG8ID4gesWNbmc7ICM4NDdDCivokb0gPiB5xIFvOyAjODQ3RAor6JG+ID4geXXEgW47ICM4NDdFCivokb8gPiBtw6lpOyAjODQ3Rgor6JKAID4gecWrbjsgIzg0ODAKK+iSgSA+IHNow7k7ICM4NDgxCivokoIgPiBkw6w7ICM4NDgyCivokoMgPiB6aHXDoG47ICM4NDgzCivokoQgPiBndcSBbjsgIzg0ODQKK+iShiA+IHh1xJM7ICM4NDg2CivokocgPiBjaMSDbjsgIzg0ODcKK+iSiCA+IGvEg2k7ICM4NDg4CivokokgPiBrw7lpOyAjODQ4OQor6JKLID4gamnEg25nOyAjODQ4Qgor6JKMID4gbMOzdTsgIzg0OEMKK+iSjSA+IHfDqWk7ICM4NDhECivoko4gPiBww6BpOyAjODQ4RQor6JKQID4gc8WNdTsgIzg0OTAKK+iSkSA+IHnEq247ICM4NDkxCivokpIgPiBzaMSrOyAjODQ5Mgor6JKTID4gY2jDum47ICM4NDkzCivokpQgPiBzaMOtOyAjODQ5NAor6JKVID4gecWrbjsgIzg0OTUKK+iSliA+IHpoxJNuOyAjODQ5Ngor6JKXID4gbMOgbmc7ICM4NDk3CivokpggPiBuw7o7ICM4NDk4CivokpkgPiBtw6luZzsgIzg0OTkKK+iSmiA+IGjDqTsgIzg0OUEKK+iSmyA+IHF1xJM7ICM4NDlCCivokpwgPiBzdcOgbjsgIzg0OUMKK+iSnSA+IHl1w6FuOyAjODQ5RAor6JKeID4gbMOsOyAjODQ5RQor6JKfID4gasWtOyAjODQ5Rgor6JKgID4geMOtOyAjODRBMAor6JKhID4gcMOhbmc7ICM4NEExCivokqIgPiBjaMO6OyAjODRBMgor6JKjID4geMO6OyAjODRBMwor6JKkID4gdMO6OyAjODRBNAor6JKlID4gbMOtdTsgIzg0QTUKK+iSpiA+IHfDsjsgIzg0QTYKK+iSpyA+IHpoxJNuOyAjODRBNwor6JKoID4gcWnDoG47ICM4NEE4CivokqkgPiB6xas7ICM4NEE5CivokqogPiBww7I7ICM4NEFBCivokqsgPiBjxatvOyAjODRBQgor6JKsID4geXXEgW47ICM4NEFDCivokq0gPiBjaMO6OyAjODRBRAor6JKuID4gecO5OyAjODRBRQor6JKvID4ga3XEg2k7ICM4NEFGCivokrAgPiBww6FuOyAjODRCMAor6JKxID4gcMO6OyAjODRCMQor6JKyID4gcMO6OyAjODRCMgor6JKzID4gbsOgOyAjODRCMwor6JK0ID4gc2jDuW87ICM4NEI0CivokrUgPiB4xKs7ICM4NEI1CivokrYgPiBmw6luOyAjODRCNgor6JK3ID4gecO6bjsgIzg0QjcKK+iSuCA+IHpoxJNuZzsgIzg0QjgKK+iSuSA+IGppxIFuOyAjODRCOQor6JK6ID4gasOtOyAjODRCQQor6JK7ID4gcsO5bzsgIzg0QkIKK+iSvCA+IGPEgW5nOyAjODRCQwor6JK9ID4gxJNuOyAjODRCRAor6JK+ID4gbcOtOyAjODRCRQor6JK/ID4gaMSBbzsgIzg0QkYKK+iTgCA+IHPFq247ICM4NEMwCivok4EgPiB6aMSTbjsgIzg0QzEKK+iTgiA+IG3DrW5nOyAjODRDMgor6JODID4gc291OyAjODRDMwor6JOEID4geMO5OyAjODRDNAor6JOFID4gbMOtdTsgIzg0QzUKK+iThiA+IHjDrTsgIzg0QzYKK+iThyA+IGfFrTsgIzg0QzcKK+iTiCA+IGzDoW5nOyAjODRDOAor6JOJID4gcsOzbmc7ICM4NEM5Civok4ogPiB3xJVuZzsgIzg0Q0EKK+iTiyA+IGfDoGk7ICM4NENCCivok4wgPiBjw7lvOyAjODRDQwor6JONID4gc2jEqzsgIzg0Q0QKK+iTjiA+IHTDoW5nOyAjODRDRQor6JOPID4gbMWtbzsgIzg0Q0YKK+iTkCA+IHLDuTsgIzg0RDAKK+iTkSA+IHPFq287ICM4NEQxCivok5IgPiB4acSBbjsgIzg0RDIKK+iTkyA+IGLDqGk7ICM4NEQzCivok5QgPiB5xINvOyAjODRENAor6JOVID4gZ8O5aTsgIzg0RDUKK+iTliA+IGLEqzsgIzg0RDYKK+iTlyA+IHrFj25nOyAjODRENwor6JOYID4gZ8WtbjsgIzg0RDgKK+iTmiA+IHjEq3U7ICM4NERBCivok5sgPiBjw6g7ICM4NERCCivok50gPiBsw6FuOyAjODRERAor6JOfID4gasOsOyAjODRERgor6JOgID4gbMOtOyAjODRFMAor6JOhID4gY8SBbjsgIzg0RTEKK+iToiA+IGzDoW5nOyAjODRFMgor6JOjID4gecO5OyAjODRFMwor6JOlID4gecOsbmc7ICM4NEU1Civok6YgPiBtw7I7ICM4NEU2Civok6cgPiBkacOgbzsgIzg0RTcKK+iTqCA+IHRpxIFvOyAjODRFOAor6JOpID4gbcOgbzsgIzg0RTkKK+iTqiA+IHTFjW5nOyAjODRFQQor6JOrID4gemjDujsgIzg0RUIKK+iTrCA+IHDDqW5nOyAjODRFQwor6JOtID4gxIFuOyAjODRFRAor6JOuID4gbGnDoW47ICM4NEVFCivok68gPiBjxY1uZzsgIzg0RUYKK+iTsCA+IHjErTsgIzg0RjAKK+iTsSA+IHDDrW5nOyAjODRGMQor6JOyID4gccSrdTsgIzg0RjIKK+iTsyA+IGrDrG47ICM4NEYzCivok7QgPiBjaMO6bjsgIzg0RjQKK+iTtSA+IGppw6k7ICM4NEY1Civok7YgPiB3xJVpOyAjODRGNgor6JO3ID4gdMWraTsgIzg0RjcKK+iTuCA+IGPDoW87ICM4NEY4Civok7kgPiB5xa07ICM4NEY5Civok7ogPiB5w6w7ICM4NEZBCivok7sgPiBqw607ICM4NEZCCivok7wgPiBsacSDbzsgIzg0RkMKK+iTvSA+IGLDrDsgIzg0RkQKK+iTviA+IGzFrTsgIzg0RkUKK+iTvyA+IHPDuTsgIzg0RkYKK+iUgCA+IGLDuTsgIzg1MDAKK+iUgSA+IHpoxIFuZzsgIzg1MDEKK+iUgiA+IGzDum87ICM4NTAyCivolIMgPiBqacOgbmc7ICM4NTAzCivolIQgPiBtw6BuOyAjODUwNAor6JSFID4gecOhbjsgIzg1MDUKK+iUhiA+IGzDrW5nOyAjODUwNgor6JSHID4gasOsOyAjODUwNwor6JSIID4gcGnEg287ICM4NTA4CivolIkgPiBnxa1uOyAjODUwOQor6JSKID4gaMSDbjsgIzg1MEEKK+iUiyA+IGTDrTsgIzg1MEIKK+iUjCA+IHPDuTsgIzg1MEMKK+iUjSA+IGzDuTsgIzg1MEQKK+iUjiA+IHNow6g7ICM4NTBFCivolI8gPiBzaMSBbmc7ICM4NTBGCivolJAgPiBkw607ICM4NTEwCivolJEgPiBtacOoOyAjODUxMQor6JSSID4geMWrbjsgIzg1MTIKK+iUkyA+IG3DoG47ICM4NTEzCivolJQgPiBiw7M7ICM4NTE0CivolJUgPiBkw6w7ICM4NTE1CivolJYgPiBjw7pvOyAjODUxNgor6JSXID4gemjDqDsgIzg1MTcKK+iUmCA+IHPEk247ICM4NTE4CivolJkgPiB4dcOgbjsgIzg1MTkKK+iUmiA+IHfDqGk7ICM4NTFBCivolJsgPiBow7o7ICM4NTFCCivolJwgPiDDoW87ICM4NTFDCivolJ0gPiBtxK07ICM4NTFECivolJ4gPiBsw7N1OyAjODUxRQor6JSfID4gY8O5OyAjODUxRgor6JSgID4gemjFjW5nOyAjODUyMAor6JShID4gY8OgaTsgIzg1MjEKK+iUoiA+IHDDszsgIzg1MjIKK+iUoyA+IGppxINuZzsgIzg1MjMKK+iUpCA+IG3DrDsgIzg1MjQKK+iUpSA+IGPFjW5nOyAjODUyNQor6JSmID4gbmnEg287ICM4NTI2CivolKcgPiBow7lpOyAjODUyNwor6JSoID4gasO5bjsgIzg1MjgKK+iUqSA+IHnDrW47ICM4NTI5CivolKogPiBqacOgbjsgIzg1MkEKK+iUqyA+IHnEgW47ICM4NTJCCivolKwgPiBzaMWrOyAjODUyQwor6JStID4gecOsbjsgIzg1MkQKK+iUriA+IGvDuWk7ICM4NTJFCivolK8gPiBjaMOpbjsgIzg1MkYKK+iUsCA+IGjDuTsgIzg1MzAKK+iUsSA+IHNoxIE7ICM4NTMxCivolLIgPiBrw7J1OyAjODUzMgor6JSzID4gcWnDoG47ICM4NTMzCivolLQgPiBtw6E7ICM4NTM0CivolLUgPiB6xIFuZzsgIzg1MzUKK+iUtyA+IHFpw6FuZzsgIzg1MzcKK+iUuCA+IGTFjXU7ICM4NTM4CivolLkgPiBsacOgbjsgIzg1MzkKK+iUuiA+IGzDrG47ICM4NTNBCivolLsgPiBrw7J1OyAjODUzQgor6JS8ID4gxINpOyAjODUzQwor6JS9ID4gYsOsOyAjODUzRAor6JS+ID4gbMOtOyAjODUzRQor6JS/ID4gd8OpaTsgIzg1M0YKK+iVgCA+IGrDrTsgIzg1NDAKK+iVgSA+IHjDum47ICM4NTQxCivolYIgPiBzaMOobmc7ICM4NTQyCivolYMgPiBmw6FuOyAjODU0Mwor6JWEID4gbcOpbmc7ICM4NTQ0CivolYUgPiDFj3U7ICM4NTQ1CivolYYgPiBjaMSDbjsgIzg1NDYKK+iVhyA+IGRpxINuOyAjODU0Nwor6JWIID4geMO5bjsgIzg1NDgKK+iViSA+IGppxIFvOyAjODU0OQor6JWKID4gcsWtaTsgIzg1NEEKK+iViyA+IHLFrWk7ICM4NTRCCivolYwgPiBsxJVpOyAjODU0Qwor6JWNID4gecO6OyAjODU0RAor6JWOID4gcWnDoW87ICM4NTRFCivolY8gPiBjaMO6OyAjODU0Rgor6JWQID4gaHXDoTsgIzg1NTAKK+iVkSA+IGppxIFuOyAjODU1MQor6JWSID4gbcSDaTsgIzg1NTIKK+iVkyA+IHnDum47ICM4NTUzCivolZQgPiBixIFvOyAjODU1NAor6JWVID4gecOzdTsgIzg1NTUKK+iVliA+IHHDujsgIzg1NTYKK+iVlyA+IGzDuTsgIzg1NTcKK+iVmCA+IHLDoW87ICM4NTU4CivolZkgPiBow7lpOyAjODU1OQor6JWaID4gw6g7ICM4NTVBCivolZsgPiB0w6luZzsgIzg1NUIKK+iVnCA+IGbElWk7ICM4NTVDCivolZ0gPiBqdcOpOyAjODU1RAor6JWeID4gesO5aTsgIzg1NUUKK+iVnyA+IGbDoDsgIzg1NUYKK+iVoCA+IHLDujsgIzg1NjAKK+iVoSA+IGbDqW47ICM4NTYxCivolaIgPiBrw7lpOyAjODU2Mgor6JWjID4gc2jDuW47ICM4NTYzCivolaQgPiByw7ppOyAjODU2NAor6JWlID4gecSDOyAjODU2NQor6JWmID4geMWrOyAjODU2Ngor6JWnID4gZsO5OyAjODU2Nwor6JWoID4ganXDqTsgIzg1NjgKK+iVqSA+IGTDoG5nOyAjODU2OQor6JWqID4gd8O6OyAjODU2QQor6JWrID4gdMOzbmc7ICM4NTZCCivolawgPiBzxKs7ICM4NTZDCivola0gPiB4acSBbzsgIzg1NkQKK+iVriA+IHjDrDsgIzg1NkUKK+iVryA+IGzDs25nOyAjODU2Rgor6JWwID4gecO5bjsgIzg1NzAKK+iVsiA+IHHDrTsgIzg1NzIKK+iVsyA+IGppxIFuOyAjODU3Mwor6JW0ID4gecO5bjsgIzg1NzQKK+iVtSA+IHPFq247ICM4NTc1CivolbYgPiBsw61uZzsgIzg1NzYKK+iVtyA+IHnDuTsgIzg1NzcKK+iVuCA+IHhpw6E7ICM4NTc4CivolbkgPiB5xY1uZzsgIzg1NzkKK+iVuiA+IGrDrTsgIzg1N0EKK+iVuyA+IGjDsm5nOyAjODU3Qgor6JW8ID4gc8OsOyAjODU3Qwor6JW9ID4gbsOzbmc7ICM4NTdECivolb4gPiBsxJVpOyAjODU3RQor6JW/ID4geHXEgW47ICM4NTdGCivoloAgPiB5w7luOyAjODU4MAor6JaBID4gecO5OyAjODU4MQor6JaCID4geMOtOyAjODU4Mgor6JaDID4gaMOgbzsgIzg1ODMKK+iWhCA+IGLDszsgIzg1ODQKK+iWhSA+IGjEgW87ICM4NTg1CivoloYgPiDDoGk7ICM4NTg2CivolocgPiB3w6lpOyAjODU4Nwor6JaIID4gaMO5aTsgIzg1ODgKK+iWiSA+IHfDqGk7ICM4NTg5CivoloogPiBqw6w7ICM4NThBCivolosgPiBjxKs7ICM4NThCCivolowgPiB4acSBbmc7ICM4NThDCivolo0gPiBsdcOgbjsgIzg1OEQKK+iWjiA+IG1pw6g7ICM4NThFCivolo8gPiB5w6w7ICM4NThGCivolpAgPiBsw6luZzsgIzg1OTAKK+iWkSA+IGppxIFuZzsgIzg1OTEKK+iWkiA+IGPDoG47ICM4NTkyCivolpMgPiBzaMSTbjsgIzg1OTMKK+iWlCA+IHFpw6FuZzsgIzg1OTQKK+iWlSA+IGxpw6FuOyAjODU5NQor6JaWID4ga8STOyAjODU5Ngor6JaXID4geXXDoW47ICM4NTk3CivolpggPiBkw6E7ICM4NTk4CivolpkgPiB0w6w7ICM4NTk5CivolpogPiB0w6FuZzsgIzg1OUEKK+iWmyA+IHhpxJM7ICM4NTlCCivolpwgPiBiw6w7ICM4NTlDCivolp0gPiB6aMOhbjsgIzg1OUQKK+iWniA+IHPFq247ICM4NTlFCivolp8gPiBsacSDbjsgIzg1OUYKK+iWoCA+IGbDoW47ICM4NUEwCivolqEgPiBkxK1uZzsgIzg1QTEKK+iWoiA+IGppxJM7ICM4NUEyCivolqMgPiBnxa07ICM4NUEzCivolqQgPiB4acOoOyAjODVBNAor6JalID4gc2jFrTsgIzg1QTUKK+iWpiA+IGppw6BuOyAjODVBNgor6JanID4ga8SDbzsgIzg1QTcKK+iWqCA+IGjFjW5nOyAjODVBOAor6JapID4gc8OgOyAjODVBOQor6JaqID4geMSrbjsgIzg1QUEKK+iWqyA+IHjFq247ICM4NUFCCivolqwgPiB5w6BvOyAjODVBQwor6JauID4gc8WPdTsgIzg1QUUKK+iWryA+IHNoxa07ICM4NUFGCivolrAgPiB4xatuOyAjODVCMAor6JaxID4gZMO5aTsgIzg1QjEKK+iWsiA+IHDDrW47ICM4NUIyCivolrMgPiB3xJVpOyAjODVCMwor6Ja0ID4gbsOpbmc7ICM4NUI0CivolrUgPiBjaMOzdTsgIzg1QjUKK+iWtiA+IG3DoWk7ICM4NUI2CivolrcgPiByw7o7ICM4NUI3CivolrggPiBwacSBbzsgIzg1QjgKK+iWuSA+IHTDoWk7ICM4NUI5CivolrogPiBxw607ICM4NUJBCivolrsgPiB6xINvOyAjODVCQgor6Ja8ID4gY2jDqW47ICM4NUJDCivolr0gPiB6aMSTbjsgIzg1QkQKK+iWviA+IMSVcjsgIzg1QkUKK+iWvyA+IG7ErTsgIzg1QkYKK+iXgCA+IHnDrW5nOyAjODVDMAor6JeBID4gZ8SDbzsgIzg1QzEKK+iXgiA+IGPDsm5nOyAjODVDMgor6JeDID4geGnEgW87ICM4NUMzCivol4QgPiBxw607ICM4NUM0Civol4UgPiBmw6E7ICM4NUM1Civol4YgPiBqacSDbjsgIzg1QzYKK+iXhyA+IHjDuTsgIzg1QzcKK+iXiCA+IGvFq2k7ICM4NUM4Civol4kgPiBqacOoOyAjODVDOQor6JeKID4gYmnEg247ICM4NUNBCivol4sgPiBkacOgbzsgIzg1Q0IKK+iXjCA+IG3DrDsgIzg1Q0MKK+iXjSA+IGzDoW47ICM4NUNECivol44gPiBqw6xuOyAjODVDRQor6JePID4gY8Ohbmc7ICM4NUNGCivol5AgPiBtacSDbzsgIzg1RDAKK+iXkSA+IHHDrW9uZzsgIzg1RDEKK+iXkiA+IHFpw6g7ICM4NUQyCivol5MgPiB4acSDbjsgIzg1RDMKK+iXlSA+IMWPdTsgIzg1RDUKK+iXliA+IHhpw6FuOyAjODVENgor6JeXID4gc8O5OyAjODVENwor6JeYID4gbMeYOyAjODVEOAor6JeZID4gecOsOyAjODVEOQor6JeaID4geMO5OyAjODVEQQor6JebID4geGnElTsgIzg1REIKK+iXnCA+IGzDrTsgIzg1REMKK+iXnSA+IHnDrDsgIzg1REQKK+iXniA+IGzEgzsgIzg1REUKK+iXnyA+IGzElWk7ICM4NURGCivol6AgPiB4acOgbzsgIzg1RTAKK+iXoSA+IGTDrTsgIzg1RTEKK+iXoiA+IHpoxK07ICM4NUUyCivol6MgPiBixJNpOyAjODVFMwor6JekID4gdMOpbmc7ICM4NUU0Civol6UgPiB5w6BvOyAjODVFNQor6JemID4gbcOyOyAjODVFNgor6JenID4gaHXEg247ICM4NUU3Civol6ggPiBwacSDbzsgIzg1RTgKK+iXqSA+IGbDoW47ICM4NUU5Civol6ogPiBzxY91OyAjODVFQQor6JerID4gdMOhbjsgIzg1RUIKK+iXrCA+IHTFq2k7ICM4NUVDCivol60gPiBxw61vbmc7ICM4NUVECivol64gPiBxacOhbzsgIzg1RUUKK+iXryA+IHfDqGk7ICM4NUVGCivol7AgPiBsw611OyAjODVGMAor6JexID4gaMO5aTsgIzg1RjEKK+iXsyA+IGfEg287ICM4NUYzCivol7QgPiB5w7luOyAjODVGNAor6Je2ID4gbMOsOyAjODVGNgor6Je3ID4gc2jFrTsgIzg1RjcKK+iXuCA+IGNow7o7ICM4NUY4Civol7kgPiDEg2k7ICM4NUY5Civol7ogPiBsw6xuOyAjODVGQQor6Je7ID4gesSDbzsgIzg1RkIKK+iXvCA+IHh1xIFuOyAjODVGQwor6Je9ID4gY2jDqG47ICM4NUZECivol74gPiBsw6BpOyAjODVGRQor6Je/ID4gaMO5bzsgIzg1RkYKK+iYgCA+IHTDuW87ICM4NjAwCivomIEgPiB3w7k7ICM4NjAxCivomIIgPiByxa1pOyAjODYwMgor6JiDID4gcsWtaTsgIzg2MDMKK+iYhCA+IHHDrTsgIzg2MDQKK+iYhSA+IGjDqW5nOyAjODYwNQor6JiGID4gbMO6OyAjODYwNgor6JiHID4gc8WrOyAjODYwNwor6JiIID4gdMO6aTsgIzg2MDgKK+iYiSA+IG3DoW5nOyAjODYwOQor6JiKID4gecO5bjsgIzg2MEEKK+iYiyA+IHDDrW47ICM4NjBCCivomIwgPiB5xa07ICM4NjBDCivomI0gPiB4xatuOyAjODYwRAor6JiOID4gasOsOyAjODYwRQor6JiPID4gasSrb25nOyAjODYwRgor6JiQID4geGnEgW47ICM4NjEwCivomJEgPiBtw7M7ICM4NjExCivomJMgPiBzxas7ICM4NjEzCivomJQgPiBqxKtvbmc7ICM4NjE0CivomJYgPiBuacOoOyAjODYxNgor6JiXID4gYsOyOyAjODYxNwor6JiYID4gcsOhbmc7ICM4NjE4CivomJkgPiB5w6w7ICM4NjE5CivomJogPiB4acSDbjsgIzg2MUEKK+iYmyA+IHnDujsgIzg2MUIKK+iYnCA+IGrDujsgIzg2MUMKK+iYnSA+IGxpw6BuOyAjODYxRAor6JieID4gbGnDoG47ICM4NjFFCivomJ8gPiB5xK1uOyAjODYxRgor6JigID4gcWnDoW5nOyAjODYyMAor6JihID4gecSrbmc7ICM4NjIxCivomKIgPiBsw7NuZzsgIzg2MjIKK+iYoyA+IHTDsm5nOyAjODYyMwor6JikID4gd8SVaTsgIzg2MjQKK+iYpSA+IHl1w6g7ICM4NjI1CivomKYgPiBsw61uZzsgIzg2MjYKK+iYpyA+IHHDujsgIzg2MjcKK+iYqCA+IHnDoW87ICM4NjI4CivomKkgPiBmw6FuOyAjODYyOQor6JiqID4gbcOtOyAjODYyQQor6JirID4gbMOhbjsgIzg2MkIKK+iYrCA+IGvFq2k7ICM4NjJDCivomK0gPiBsw6FuOyAjODYyRAor6JiuID4gasOsOyAjODYyRQor6JivID4gZMOgbmc7ICM4NjJGCivomLEgPiBsw6hpOyAjODYzMQor6JiyID4gbMOpaTsgIzg2MzIKK+iYsyA+IGh1xIM7ICM4NjMzCivomLQgPiBmxJNuZzsgIzg2MzQKK+iYtSA+IHpow607ICM4NjM1CivomLYgPiB3w6hpOyAjODYzNgor6Ji3ID4ga8O6aTsgIzg2MzcKK+iYuCA+IHpow6BuOyAjODYzOAor6Ji5ID4gaHXDoGk7ICM4NjM5CivomLogPiBsw607ICM4NjNBCivomLsgPiBqw6w7ICM4NjNCCivomLwgPiBtw607ICM4NjNDCivomL0gPiBsxJVpOyAjODYzRAor6Ji+ID4gaHXDoGk7ICM4NjNFCivomL8gPiBsw7pvOyAjODYzRgor6JmAID4gasSrOyAjODY0MAor6JmBID4ga8O6aTsgIzg2NDEKK+iZgiA+IGzDuTsgIzg2NDIKK+iZgyA+IGppxIFuOyAjODY0Mwor6JmGID4gbMOpaTsgIzg2NDYKK+iZhyA+IHF1xINuOyAjODY0Nwor6JmIID4geGnEgW87ICM4NjQ4CivomYkgPiB5w6w7ICM4NjQ5CivomYogPiBsdcOhbjsgIzg2NEEKK+iZiyA+IG3DqW47ICM4NjRCCivomYwgPiBiacSTOyAjODY0Qwor6JmNID4gaMWrOyAjODY0RAor6JmOID4gaMWtOyAjODY0RQor6JmPID4gbMWtOyAjODY0Rgor6JmQID4gbsecZTsgIzg2NTAKK+iZkSA+IGzHnDsgIzg2NTEKK+iZkiA+IHPEqzsgIzg2NTIKK+iZkyA+IHhpxIFvOyAjODY1Mwor6JmUID4gcWnDoW47ICM4NjU0CivomZUgPiBjaMO5OyAjODY1NQor6JmWID4gaMWrOyAjODY1Ngor6JmXID4geMWrOyAjODY1Nwor6JmYID4gY8O6bzsgIzg2NTgKK+iZmSA+IGbDujsgIzg2NTkKK+iZmiA+IHjFqzsgIzg2NUEKK+iZmyA+IHjFqzsgIzg2NUIKK+iZnCA+IGzFrTsgIzg2NUMKK+iZnSA+IGjFrTsgIzg2NUQKK+iZniA+IHnDujsgIzg2NUUKK+iZnyA+IGjDoG87ICM4NjVGCivomaAgPiBqacSDbzsgIzg2NjAKK+iZoSA+IGrDuTsgIzg2NjEKK+iZoiA+IGfDum87ICM4NjYyCivomaMgPiBiw6BvOyAjODY2Mwor6JmkID4gecOhbjsgIzg2NjQKK+iZpSA+IHpow6BuOyAjODY2NQor6JmmID4gemjDoG47ICM4NjY2CivomacgPiBrxatpOyAjODY2Nwor6JmoID4gYsSBbjsgIzg2NjgKK+iZqSA+IHjDrDsgIzg2NjkKK+iZqiA+IHNow7o7ICM4NjZBCivomasgPiBjaMOzbmc7ICM4NjZCCivomawgPiBxw611OyAjODY2Qwor6JmtID4gZGnEgW87ICM4NjZECivoma4gPiBqxKs7ICM4NjZFCivoma8gPiBxw611OyAjODY2Rgor6JmwID4gY2jDqW5nOyAjODY3MAor6JmxID4gc2jEqzsgIzg2NzEKK+iZsyA+IGTDrDsgIzg2NzMKK+iZtCA+IHpow6k7ICM4Njc0CivombUgPiBzaMOpOyAjODY3NQor6Jm2ID4gecWrOyAjODY3Ngor6Jm3ID4gZ8SBbjsgIzg2NzcKK+iZuCA+IHrErTsgIzg2NzgKK+iZuSA+IGjDs25nOyAjODY3OQor6Jm6ID4gaMWtaTsgIzg2N0EKK+iZuyA+IG3DqW5nOyAjODY3Qgor6Jm8ID4gZ8OoOyAjODY3Qwor6Jm9ID4gc8WraTsgIzg2N0QKK+iZviA+IHhpxIE7ICM4NjdFCivomb8gPiBjaMOgaTsgIzg2N0YKK+iagCA+IHNow607ICM4NjgwCivomoEgPiB5xK07ICM4NjgxCivomoIgPiBtxIM7ICM4NjgyCivomoMgPiB4acOgbmc7ICM4NjgzCivomoQgPiBmxIFuZzsgIzg2ODQKK+iahSA+IMOoOyAjODY4NQor6JqGID4gcMSBOyAjODY4Ngor6JqHID4gY2jErTsgIzg2ODcKK+iaiCA+IHFpxIFuOyAjODY4OAor6JqJID4gd8OpbjsgIzg2ODkKK+iaiiA+IHfDqW47ICM4NjhBCivomosgPiByw7lpOyAjODY4Qgor6JqMID4gYsOgbmc7ICM4NjhDCivomo0gPiBixK07ICM4NjhECivomo4gPiB5dcOoOyAjODY4RQor6JqPID4geXXDqDsgIzg2OEYKK+iakCA+IGrFq247ICM4NjkwCivompEgPiBxw607ICM4NjkxCivompIgPiByw6FuOyAjODY5Mgor6JqTID4gecStbjsgIzg2OTMKK+ialCA+IHHDrTsgIzg2OTQKK+ialSA+IHRpxINuOyAjODY5NQor6JqWID4geXXDoW47ICM4Njk2CivompcgPiBqdcOpOyAjODY5Nwor6JqYID4gaMO6aTsgIzg2OTgKK+iamSA+IHHDrW47ICM4Njk5CivompogPiBxw607ICM4NjlBCivompsgPiB6aMOybmc7ICM4NjlCCivompwgPiB5w6E7ICM4NjlDCivomp0gPiBjw6w7ICM4NjlECivomp4gPiBtw7k7ICM4NjlFCivomp8gPiB3w6FuZzsgIzg2OUYKK+iaoCA+IGbDqW47ICM4NkEwCivomqEgPiBmw6luOyAjODZBMQor6JqiID4gaMOhbmc7ICM4NkEyCivomqMgPiBnxY1uZzsgIzg2QTMKK+iapCA+IHrEg287ICM4NkE0CivomqUgPiBmxa07ICM4NkE1CivomqYgPiByw6FuOyAjODZBNgor6JqnID4gamnDqDsgIzg2QTcKK+iaqCA+IGbDujsgIzg2QTgKK+iaqSA+IGNoxKs7ICM4NkE5CivomqogPiBkxY91OyAjODZBQQor6JqrID4gcGnDoW87ICM4NkFCCivomqwgPiB4acOgbjsgIzg2QUMKK+iarSA+IG7DrTsgIzg2QUQKK+iariA+IHTDqDsgIzg2QUUKK+iaryA+IHHEq3U7ICM4NkFGCivomrAgPiB5w7N1OyAjODZCMAor6JqxID4gemjDoDsgIzg2QjEKK+iasiA+IHDDrW5nOyAjODZCMgor6JqzID4gY2jDrTsgIzg2QjMKK+iatCA+IHnFj3U7ICM4NkI0CivomrUgPiBow6k7ICM4NkI1CivomrYgPiBoxIFuOyAjODZCNgor6Jq3ID4gasO5OyAjODZCNwor6Jq4ID4gbMOsOyAjODZCOAor6Jq5ID4gZsO5OyAjODZCOQor6Jq6ID4gcsOhbjsgIzg2QkEKK+iauyA+IHpow6E7ICM4NkJCCivomrwgPiBnxY91OyAjODZCQwor6Jq9ID4gcMOtOyAjODZCRAor6Jq+ID4gYsWPOyAjODZCRQor6Jq/ID4geGnDoW47ICM4NkJGCivom4AgPiB6aMO5OyAjODZDMAor6JuBID4gZGnEgW87ICM4NkMxCivom4IgPiBiacSVOyAjODZDMgor6JuDID4gYsStbmc7ICM4NkMzCivom4QgPiBnxas7ICM4NkM0Civom4UgPiByw6FuOyAjODZDNQor6JuGID4gccWrOyAjODZDNgor6JuHID4gc2jDqTsgIzg2QzcKK+ibiCA+IHRpw6g7ICM4NkM4Civom4kgPiBsw61uZzsgIzg2QzkKK+ibiiA+IGfFrTsgIzg2Q0EKK+ibiyA+IGTDoG47ICM4NkNCCivom4wgPiBnxa07ICM4NkNDCivom40gPiB5w61uZzsgIzg2Q0QKK+ibjiA+IGzDrDsgIzg2Q0UKK+ibjyA+IGNoxJNuZzsgIzg2Q0YKK+ibkCA+IHHFqzsgIzg2RDAKK+ibkSA+IG3Ds3U7ICM4NkQxCivom5IgPiBnw6k7ICM4NkQyCivom5MgPiBjw6w7ICM4NkQzCivom5QgPiBow7ppOyAjODZENAor6JuVID4gaMO6aTsgIzg2RDUKK+ibliA+IG3DoW5nOyAjODZENgor6JuXID4gZsO5OyAjODZENwor6JuYID4gecOhbmc7ICM4NkQ4Civom5kgPiB3xIE7ICM4NkQ5Civom5ogPiBsacOoOyAjODZEQQor6JubID4gemjFqzsgIzg2REIKK+ibnCA+IHnEqzsgIzg2REMKK+ibnSA+IHhpw6FuOyAjODZERAor6JueID4ga8O5bzsgIzg2REUKK+ibnyA+IGppxIFvOyAjODZERgor6JugID4gbMOsOyAjODZFMAor6JuhID4gecOsOyAjODZFMQor6JuiID4gcMOtbmc7ICM4NkUyCivom6MgPiBqxKs7ICM4NkUzCivom6QgPiBow6E7ICM4NkU0Civom6UgPiBzaMOpOyAjODZFNQor6JumID4gecOtOyAjODZFNgor6JunID4gd8SDbmc7ICM4NkU3Civom6ggPiBtw7I7ICM4NkU4Civom6kgPiBxw61vbmc7ICM4NkU5Civom6ogPiBxacOoOyAjODZFQQor6JurID4gZ8WtaTsgIzg2RUIKK+ibrCA+IGfFj25nOyAjODZFQwor6JutID4gemjDrDsgIzg2RUQKK+ibriA+IG3DoW47ICM4NkVFCivom7AgPiB6aMOtOyAjODZGMAor6JuxID4gamnDoTsgIzg2RjEKK+ibsiA+IHLDoW87ICM4NkYyCivom7MgPiBzxKs7ICM4NkYzCivom7QgPiBxw607ICM4NkY0Civom7UgPiB4xKtuZzsgIzg2RjUKK+ibtiA+IGxpw6g7ICM4NkY2Civom7cgPiBxw611OyAjODZGNwor6Ju4ID4gc2jEgW87ICM4NkY4Civom7kgPiB5xY9uZzsgIzg2RjkKK+ibuiA+IGppw6E7ICM4NkZBCivom7sgPiBzaMO5aTsgIzg2RkIKK+ibvCA+IGNoxJM7ICM4NkZDCivom70gPiBiw6BpOyAjODZGRAor6Ju+ID4gw6k7ICM4NkZFCivom78gPiBow6BuOyAjODZGRgor6JyAID4gc2jFrTsgIzg3MDAKK+icgSA+IHh1w6FuOyAjODcwMQor6JyCID4gZsSTbmc7ICM4NzAyCivonIMgPiBzaMOobjsgIzg3MDMKK+ichCA+IHpow6huOyAjODcwNAor6JyFID4gZsWtOyAjODcwNQor6JyGID4geGnDoG47ICM4NzA2CivonIcgPiB6aMOpOyAjODcwNwor6JyIID4gd8O6OyAjODcwOAor6JyJID4gZsO6OyAjODcwOQor6JyKID4gbMOtOyAjODcwQQor6JyLID4gbMOhbmc7ICM4NzBCCivonIwgPiBiw6w7ICM4NzBDCivonI0gPiBjaMO6OyAjODcwRAor6JyOID4geXXEgW47ICM4NzBFCivonI8gPiB5xY91OyAjODcwRgor6JyQID4gamnDqTsgIzg3MTAKK+ickSA+IGTDoG47ICM4NzExCivonJIgPiB5w6FuOyAjODcxMgor6JyTID4gdMOtbmc7ICM4NzEzCivonJQgPiBkacOgbjsgIzg3MTQKK+iclSA+IHNow7lpOyAjODcxNQor6JyWID4gaMO6aTsgIzg3MTYKK+iclyA+IGd1xIE7ICM4NzE3CivonJggPiB6aMSrOyAjODcxOAor6JyZID4gc8WNbmc7ICM4NzE5CivonJogPiBmxJNpOyAjODcxQQor6JybID4gasWrOyAjODcxQgor6JycID4gbcOsOyAjODcxQwor6JydID4gccOtOyAjODcxRAor6JyeID4gccOtOyAjODcxRQor6JyfID4gecO5OyAjODcxRgor6JygID4gasWtbjsgIzg3MjAKK+icoSA+IHpow6A7ICM4NzIxCivonKIgPiBtxJVuZzsgIzg3MjIKK+icoyA+IHFpxIFuZzsgIzg3MjMKK+icpCA+IHPEqzsgIzg3MjQKK+icpSA+IHjEqzsgIzg3MjUKK+icpiA+IGzDum47ICM4NzI2CivonKcgPiBsw6w7ICM4NzI3CivonKggPiBkacOpOyAjODcyOAor6JypID4gdGnDoW87ICM4NzI5CivonKogPiB0xIFvOyAjODcyQQor6JyrID4ga8WrbjsgIzg3MkIKK+icrCA+IGfEgW47ICM4NzJDCivonK0gPiBow6BuOyAjODcyRAor6JyuID4gecO5OyAjODcyRQor6JyvID4gYsOgbmc7ICM4NzJGCivonLAgPiBmw6lpOyAjODczMAor6JyxID4gcMOtOyAjODczMQor6JyyID4gd8SVaTsgIzg3MzIKK+icsyA+IGTFq247ICM4NzMzCivonLQgPiB5w6w7ICM4NzM0CivonLUgPiB5dcSBbjsgIzg3MzUKK+ictiA+IHPDuTsgIzg3MzYKK+ictyA+IHF1w6FuOyAjODczNwor6Jy4ID4gcWnEg247ICM4NzM4CivonLkgPiByw7lpOyAjODczOQor6Jy6ID4gbsOtOyAjODczQQor6Jy7ID4gccSrbmc7ICM4NzNCCivonLwgPiB3w6hpOyAjODczQwor6Jy9ID4gbGnEg25nOyAjODczRAor6Jy+ID4gZ8WtbzsgIzg3M0UKK+icvyA+IHfEgW47ICM4NzNGCivonYAgPiBkxY1uZzsgIzg3NDAKK+idgSA+IMOoOyAjODc0MQor6J2CID4gYsSDbjsgIzg3NDIKK+idgyA+IGTDrDsgIzg3NDMKK+idhCA+IHfEg25nOyAjODc0NAor6J2FID4gY8OhbjsgIzg3NDUKK+idhiA+IHnEg25nOyAjODc0Ngor6J2HID4gecOtbmc7ICM4NzQ3CivonYggPiBnxatvOyAjODc0OAor6J2JID4gY2jDoW47ICM4NzQ5CivonYsgPiBsw6A7ICM4NzRCCivonYwgPiBrxJM7ICM4NzRDCivonY0gPiBqw607ICM4NzRECivonY4gPiBow6k7ICM4NzRFCivonY8gPiB0w61uZzsgIzg3NEYKK+idkCA+IG3DoGk7ICM4NzUwCivonZEgPiB4xas7ICM4NzUxCivonZIgPiBtacOhbjsgIzg3NTIKK+idkyA+IHnDujsgIzg3NTMKK+idlCA+IGppxJM7ICM4NzU0CivonZUgPiBzaMOtOyAjODc1NQor6J2WID4geHXEgW47ICM4NzU2CivonZcgPiBodcOhbmc7ICM4NzU3CivonZggPiB5xINuOyAjODc1OAor6J2ZID4gYmnEgW47ICM4NzU5CivonZogPiByw7N1OyAjODc1QQor6J2bID4gd8STaTsgIzg3NUIKK+idnCA+IGbDuTsgIzg3NUMKK+idnSA+IHl1w6FuOyAjODc1RAor6J2eID4gbcOoaTsgIzg3NUUKK+idnyA+IHfDqGk7ICM4NzVGCivonaAgPiBmw7o7ICM4NzYwCivonaEgPiBydcSDbjsgIzg3NjEKK+idoiA+IHhpw6k7ICM4NzYyCivonaMgPiB5w7N1OyAjODc2Mwor6J2kID4gccOtdTsgIzg3NjQKK+idpSA+IG3DoW87ICM4NzY1CivonaYgPiB4acSBOyAjODc2Ngor6J2nID4gecSrbmc7ICM4NzY3CivonaggPiBzaMSrOyAjODc2OAor6J2pID4gY2jDs25nOyAjODc2OQor6J2qID4gdMSBbmc7ICM4NzZBCivonasgPiB6aMWrOyAjODc2Qgor6J2sID4gesWNbmc7ICM4NzZDCivona0gPiB0w607ICM4NzZECivona4gPiBmw7k7ICM4NzZFCivona8gPiB5dcOhbjsgIzg3NkYKK+idsCA+IGjFrWk7ICM4NzcwCivonbEgPiBtw6luZzsgIzg3NzEKK+idsiA+IGzDoDsgIzg3NzIKK+idsyA+IGTDujsgIzg3NzMKK+idtCA+IGjDujsgIzg3NzQKK+idtSA+IHHEq3U7ICM4Nzc1CivonbYgPiBkacOpOyAjODc3Ngor6J23ID4gbMOsOyAjODc3Nwor6J24ID4gZ3XEgTsgIzg3NzgKK+iduSA+IHnFq247ICM4Nzc5CivonbogPiBqxa07ICM4NzdBCivonbsgPiBuxINuOyAjODc3Qgor6J28ID4gbMOzdTsgIzg3N0MKK+idvSA+IHHFrW47ICM4NzdECivonb4gPiByw7NuZzsgIzg3N0UKK+idvyA+IHnDrW5nOyAjODc3Rgor6J6AID4gamnEgW5nOyAjODc4MAor6J6CID4gbMOhbmc7ICM4NzgyCivonoMgPiBww6FuZzsgIzg3ODMKK+iehCA+IHPEqzsgIzg3ODQKK+iehSA+IHjEqzsgIzg3ODUKK+iehiA+IGPDrDsgIzg3ODYKK+iehyA+IHjEqzsgIzg3ODcKK+ieiCA+IHl1w6FuOyAjODc4OAor6J6JID4gd8STbmc7ICM4Nzg5CivonoogPiBsacOhbjsgIzg3OEEKK+ieiyA+IHPFjXU7ICM4NzhCCivonowgPiBixIFuOyAjODc4Qwor6J6NID4gcsOzbmc7ICM4NzhECivono4gPiByw7NuZzsgIzg3OEUKK+iejyA+IGrDrTsgIzg3OEYKK+iekCA+IHfFqzsgIzg3OTAKK+iekSA+IHHDrHU7ICM4NzkxCivonpIgPiBow6BuOyAjODc5Mgor6J6TID4gccOtbjsgIzg3OTMKK+ielCA+IHnDrTsgIzg3OTQKK+ielSA+IGLEqzsgIzg3OTUKK+ieliA+IGh1w6E7ICM4Nzk2CivonpcgPiB0w6FuZzsgIzg3OTcKK+iemCA+IHnErTsgIzg3OTgKK+iemSA+IGTDuTsgIzg3OTkKK+iemiA+IG7DoGk7ICM4NzlBCivonpsgPiBow6k7ICM4NzlCCivonpwgPiBow7o7ICM4NzlDCivonp0gPiBow7lpOyAjODc5RAor6J6eID4gbcSDOyAjODc5RQor6J6fID4gbcOtbmc7ICM4NzlGCivonqAgPiB5w6w7ICM4N0EwCivonqEgPiB3w6luOyAjODdBMQor6J6iID4gecOtbmc7ICM4N0EyCivonqMgPiB0w6luZzsgIzg3QTMKK+iepCA+IHnFrTsgIzg3QTQKK+iepSA+IGPEgW5nOyAjODdBNQor6J6oID4gbcSDbjsgIzg3QTgKK+ieqiA+IHNoxIFuZzsgIzg3QUEKK+ieqyA+IHpoxJM7ICM4N0FCCivonqwgPiBjw6FvOyAjODdBQwor6J6tID4gY2jEqzsgIzg3QUQKK+ieriA+IGTDrDsgIzg3QUUKK+ieryA+IMOhbzsgIzg3QUYKK+iesCA+IGzDuTsgIzg3QjAKK+iesSA+IHfDqGk7ICM4N0IxCivonrIgPiB6aMOsOyAjODdCMgor6J6zID4gdMOhbmc7ICM4N0IzCivonrQgPiBjaMOpbjsgIzg3QjQKK+ietSA+IHBpxIFvOyAjODdCNQor6J62ID4gccO6OyAjODdCNgor6J63ID4gcMOtOyAjODdCNwor6J64ID4gecO6OyAjODdCOAor6J65ID4gamnDoG47ICM4N0I5CivonrogPiBsw7pvOyAjODdCQQor6J67ID4gbMOzdTsgIzg3QkIKK+ievCA+IHHErW47ICM4N0JDCivonr0gPiB6aMWNbmc7ICM4N0JECivonr4gPiB5xK1uOyAjODdCRQor6J6/ID4gamnEgW5nOyAjODdCRgor6J+AID4gc2h1w6BpOyAjODdDMAor6J+BID4gd8OpbjsgIzg3QzEKK+ifgiA+IGppxIFvOyAjODdDMgor6J+DID4gd8OgbjsgIzg3QzMKK+ifhCA+IHpow607ICM4N0M0Civon4UgPiB6aMOoOyAjODdDNQor6J+GID4gbcOhOyAjODdDNgor6J+HID4gbcOhOyAjODdDNwor6J+IID4gZ8WrbzsgIzg3QzgKK+ifiSA+IGzDrXU7ICM4N0M5Civon4ogPiBtw6FvOyAjODdDQQor6J+LID4geMSrOyAjODdDQgor6J+MID4gY8WNbmc7ICM4N0NDCivon40gPiBsw607ICM4N0NECivon44gPiBtxINuOyAjODdDRQor6J+PID4geGnEgW87ICM4N0NGCivon5EgPiB6aMSBbmc7ICM4N0QxCivon5IgPiBtxINuZzsgIzg3RDIKK+ifkyA+IHhpw6BuZzsgIzg3RDMKK+iflCA+IG3DsjsgIzg3RDQKK+iflSA+IHrFq2k7ICM4N0Q1Civon5YgPiBzxKs7ICM4N0Q2Civon5cgPiBxxKt1OyAjODdENwor6J+YID4gdMOoOyAjODdEOAor6J+ZID4gemjDrTsgIzg3RDkKK+ifmiA+IHDDqW5nOyAjODdEQQor6J+bID4gcMOpbmc7ICM4N0RCCivon5wgPiBqacSDbzsgIzg3REMKK+ifnSA+IHHDujsgIzg3REQKK+ifniA+IGJpw6k7ICM4N0RFCivon58gPiBsacOhbzsgIzg3REYKK+ifoCA+IHDDoW47ICM4N0UwCivon6EgPiBnxa1pOyAjODdFMQor6J+iID4geMStOyAjODdFMgor6J+jID4gasStOyAjODdFMwor6J+kID4gemh1xIFuOyAjODdFNAor6J+lID4gaHXDoW5nOyAjODdFNQor6J+mID4gZsOoaTsgIzg3RTYKK+ifpyA+IGzDoW87ICM4N0U3Civon6ggPiBqdcOpOyAjODdFOAor6J+pID4ganXDqTsgIzg3RTkKK+ifqiA+IGjDuWk7ICM4N0VBCivon6sgPiB5w61uOyAjODdFQgor6J+sID4gY2jDoW47ICM4N0VDCivon60gPiBqacSBbzsgIzg3RUQKK+ifriA+IHNow6BuOyAjODdFRQor6J+vID4gcsOhbzsgIzg3RUYKK+ifsCA+IHhpxIFvOyAjODdGMAor6J+xID4gbcOzdTsgIzg3RjEKK+ifsiA+IGNow7NuZzsgIzg3RjIKK+ifsyA+IHjDum47ICM4N0YzCivon7QgPiBzxKs7ICM4N0Y0Civon7YgPiBjaMSTbmc7ICM4N0Y2Civon7cgPiBkxIFuZzsgIzg3RjcKK+ifuCA+IGzErTsgIzg3RjgKK+ifuSA+IHhpw6g7ICM4N0Y5Civon7ogPiBzaMOgbjsgIzg3RkEKK+ifuyA+IHnErTsgIzg3RkIKK+ifvCA+IGrErW5nOyAjODdGQwor6J+9ID4gZMOhOyAjODdGRAor6J++ID4gY2jDoW47ICM4N0ZFCivon78gPiBxw6w7ICM4N0ZGCivooIAgPiBjxKs7ICM4ODAwCivooIEgPiB4acOgbmc7ICM4ODAxCivooIIgPiBzaMOoOyAjODgwMgor6KCDID4gbMWtbzsgIzg4MDMKK+ighCA+IHHDrW47ICM4ODA0CivooIUgPiB5w61uZzsgIzg4MDUKK+ighiA+IGNow6BpOyAjODgwNgor6KCHID4gbMOsOyAjODgwNwor6KCIID4gesOpOyAjODgwOAor6KCJID4geHXEgW47ICM4ODA5CivooIogPiBsacOhbjsgIzg4MEEKK+igiyA+IHpow7o7ICM4ODBCCivooIwgPiB6w6k7ICM4ODBDCivooI0gPiB4acSTOyAjODgwRAor6KCOID4gbcSDbmc7ICM4ODBFCivooI8gPiB4acOoOyAjODgwRgor6KCQID4gccOtOyAjODgxMAor6KCRID4gcsOzbmc7ICM4ODExCivooJIgPiBqacSDbjsgIzg4MTIKK+igkyA+IG3ElW5nOyAjODgxMwor6KCUID4gaMOhbzsgIzg4MTQKK+iglSA+IHJ1xINuOyAjODgxNQor6KCWID4gaMO5bzsgIzg4MTYKK+iglyA+IHpow7pvOyAjODgxNwor6KCYID4gamnDqTsgIzg4MTgKK+igmSA+IGLEq247ICM4ODE5CivooJogPiBow6g7ICM4ODFBCivooJsgPiBtacOoOyAjODgxQgor6KCcID4gZsOhbjsgIzg4MUMKK+ignSA+IGzDqWk7ICM4ODFECivooJ4gPiBqacOpOyAjODgxRQor6KCfID4gbMOgOyAjODgxRgor6KCgID4gbcOsOyAjODgyMAor6KChID4gbMStOyAjODgyMQor6KCiID4gY2jFrW47ICM4ODIyCivooKMgPiBsw6w7ICM4ODIzCivooKQgPiBxxKt1OyAjODgyNAor6KClID4gbmnDqDsgIzg4MjUKK+igpiA+IGzDujsgIzg4MjYKK+igpyA+IGTDuTsgIzg4MjcKK+igqCA+IHhpxIFvOyAjODgyOAor6KCpID4gemjFqzsgIzg4MjkKK+igqiA+IGzDs25nOyAjODgyQQor6KCrID4gbMOsOyAjODgyQgor6KCsID4gbMOzbmc7ICM4ODJDCivooK0gPiBmxJNuZzsgIzg4MkQKK+igriA+IHnEkzsgIzg4MkUKK+igryA+IGLDqG5nOyAjODgyRgor6KCwID4gc2jDoG5nOyAjODgzMAor6KCxID4gZ8WtOyAjODgzMQor6KCyID4ganXEgW47ICM4ODMyCivooLMgPiB5xKtuZzsgIzg4MzMKK+igtSA+IHjEqzsgIzg4MzUKK+igtiA+IGPDoW47ICM4ODM2CivooLcgPiBxw7o7ICM4ODM3CivooLggPiBxdcOhbjsgIzg4MzgKK+iguSA+IGTDuTsgIzg4MzkKK+iguiA+IGPDoW47ICM4ODNBCivooLsgPiBtw6FuOyAjODgzQgor6KC8ID4ganXDqTsgIzg4M0MKK+igvSA+IGppw6k7ICM4ODNECivooL4gPiB6aMO6OyAjODgzRQor6KC/ID4gemjDoTsgIzg4M0YKK+ihgCA+IHhpxJU7ICM4ODQwCivooYEgPiBodcSBbmc7ICM4ODQxCivooYIgPiBuw6x1OyAjODg0Mgor6KGDID4gcMSTaTsgIzg4NDMKK+ihhCA+IG7HnDsgIzg4NDQKK+ihhSA+IHjDrG47ICM4ODQ1CivooYYgPiB6aMOybmc7ICM4ODQ2CivooYcgPiBtw7I7ICM4ODQ3CivooYggPiDDqHI7ICM4ODQ4CivooYkgPiBrw6g7ICM4ODQ5CivooYogPiBtacOoOyAjODg0QQor6KGLID4geMOsOyAjODg0Qgor6KGMID4geMOtbmc7ICM4ODRDCivooY0gPiB5xINuOyAjODg0RAor6KGOID4ga8OgbjsgIzg4NEUKK+ihjyA+IHl1w6BuOyAjODg0Rgor6KGRID4gbMOtbmc7ICM4ODUxCivooZIgPiB4dcOgbjsgIzg4NTIKK+ihkyA+IHNow7k7ICM4ODUzCivooZQgPiB4acOhbjsgIzg4NTQKK+ihlSA+IHTDsm5nOyAjODg1NQor6KGWID4gbMOybmc7ICM4ODU2CivooZcgPiBqacSTOyAjODg1Nwor6KGYID4geGnDoW47ICM4ODU4CivooZkgPiB5w6E7ICM4ODU5CivooZogPiBow7o7ICM4ODVBCivooZsgPiB3w6hpOyAjODg1Qgor6KGcID4gZMOgbzsgIzg4NUMKK+ihnSA+IGNoxY1uZzsgIzg4NUQKK+ihniA+IHfDqGk7ICM4ODVFCivooZ8gPiBkw6BvOyAjODg1Rgor6KGgID4gemjFq247ICM4ODYwCivooaEgPiBow6luZzsgIzg4NjEKK+ihoiA+IHHDujsgIzg4NjIKK+ihoyA+IHnEqzsgIzg4NjMKK+ihpCA+IHnEqycgJ3rDrCcgJ3DDoW5nOyAjODg2NAor6KGlID4gYsWtOyAjODg2NQor6KGmID4gZ8SDbjsgIzg4NjYKK+ihpyA+IHnDujsgIzg4NjcKK+ihqCA+IGJpxINvOyAjODg2OAor6KGpID4gY2jDoDsgIzg4NjkKK+ihqiA+IHnErTsgIzg4NkEKK+ihqyA+IHNoxIFuOyAjODg2Qgor6KGsID4gY2jDqG47ICM4ODZDCivooa0gPiBmxas7ICM4ODZECivooa4gPiBnxa1uOyAjODg2RQor6KGvID4gZsSTbjsgIzg4NkYKK+ihsCA+IHNodcSBaTsgIzg4NzAKK+ihsSA+IGppw6k7ICM4ODcxCivoobIgPiBuw6A7ICM4ODcyCivoobMgPiB6aMWNbmc7ICM4ODczCivoobQgPiBkxINuOyAjODg3NAor6KG1ID4gcsOsOyAjODg3NQor6KG2ID4gemjDsm5nOyAjODg3Ngor6KG3ID4gemjFjW5nOyAjODg3Nwor6KG4ID4geGnDqDsgIzg4NzgKK+ihuSA+IHHDrTsgIzg4NzkKK+ihuiA+IHhpw6k7ICM4ODdBCivoobsgPiByw6FuOyAjODg3Qgor6KG8ID4gemjEqzsgIzg4N0MKK+ihvSA+IHLDqG47ICM4ODdECivoob4gPiBxxKtuOyAjODg3RQor6KG/ID4gasSrbjsgIzg4N0YKK+iigCA+IGrFq247ICM4ODgwCivoooEgPiB5dcOhbjsgIzg4ODEKK+iigiA+IG3DqGk7ICM4ODgyCivoooMgPiBjaMOgaTsgIzg4ODMKK+iihCA+IMSDbzsgIzg4ODQKK+iihSA+IG5pxINvOyAjODg4NQor6KKGID4gaMWraTsgIzg4ODYKK+iihyA+IHLDoW47ICM4ODg3CivoooggPiBqacSBOyAjODg4OAor6KKJID4gdMO6bzsgIzg4ODkKK+iiiiA+IGzErW5nOyAjODg4QQor6KKLID4gZMOgaTsgIzg4OEIKK+iijCA+IGLDoG87ICM4ODhDCivooo0gPiBww6FvOyAjODg4RAor6KKOID4gecOgbzsgIzg4OEUKK+iijyA+IHrDuW87ICM4ODhGCivoopAgPiBiw6w7ICM4ODkwCivoopEgPiBzaMOgbzsgIzg4OTEKK+iikiA+IHTEg247ICM4ODkyCivoopMgPiBqxa07ICM4ODkzCivoopQgPiBow6g7ICM4ODk0CivoopUgPiBzaMO5OyAjODg5NQor6KKWID4geMOsdTsgIzg4OTYKK+iilyA+IHpoxJVuOyAjODg5Nwor6KKYID4gecOtOyAjODg5OAor6KKZID4gcMOgOyAjODg5OQor6KKaID4gYsWNOyAjODg5QQor6KKbID4gZMSrOyAjODg5Qgor6KKcID4gd8OgOyAjODg5Qwor6KKdID4gZsO5OyAjODg5RAor6KKeID4gZ8WtbjsgIzg4OUUKK+iinyA+IHpow6w7ICM4ODlGCivooqAgPiB6aMOsOyAjODhBMAor6KKhID4gcsOhbjsgIzg4QTEKK+iioiA+IHDDoG47ICM4OEEyCivooqMgPiB5w6w7ICM4OEEzCivooqQgPiBtw6BvOyAjODhBNAor6KKlID4gdHVvOyAjODhBNQor6KKmID4gbsOgOyAjODhBNgor6KKnID4ga8WNdTsgIzg4QTcKK+iiqCA+IHhpw6BuOyAjODhBOAor6KKpID4gY2jEgW47ICM4OEE5CivooqogPiBxxas7ICM4OEFBCivooqsgPiBiw6hpOyAjODhBQgor6KKsID4gZ8WtbjsgIzg4QUMKK+iirSA+IHjDrTsgIzg4QUQKK+iiryA+IGLDszsgIzg4QUYKK+iisSA+IGbDujsgIzg4QjEKK+iisiA+IHnDrTsgIzg4QjIKK+iisyA+IGNoxK07ICM4OEIzCivoorQgPiBrw7k7ICM4OEI0CivoorUgPiByw6huOyAjODhCNQor6KK2ID4gamnDoG5nOyAjODhCNgor6KK3ID4gamnDoTsgIzg4QjcKK+iiuCA+IGPDum47ICM4OEI4CivoorkgPiBtw7I7ICM4OEI5CivoorogPiBqacOpOyAjODhCQQor6KK7ID4gw6lyOyAjODhCQgor6KK8ID4gbMO5bzsgIzg4QkMKK+iivSA+IHLDujsgIzg4QkQKK+iiviA+IHpoxas7ICM4OEJFCivoor8gPiBnxatpOyAjODhCRgor6KOAID4gecSrbjsgIzg4QzAKK+ijgSA+IGPDoWk7ICM4OEMxCivoo4IgPiBsacOoOyAjODhDMgor6KOFID4gemh1xIFuZzsgIzg4QzUKK+ijhiA+IGTEgW5nOyAjODhDNgor6KOIID4ga8WrbjsgIzg4QzgKK+ijiSA+IGvDqG47ICM4OEM5Civoo4ogPiBuacSDbzsgIzg4Q0EKK+ijiyA+IHNow7k7ICM4OENCCivoo4wgPiBqacOhOyAjODhDQwor6KONID4ga8WtbjsgIzg4Q0QKK+ijjiA+IGNow6luZzsgIzg4Q0UKK+ijjyA+IGzErTsgIzg4Q0YKK+ijkCA+IGp1xIFuOyAjODhEMAor6KORID4gc2jEk247ICM4OEQxCivoo5IgPiBww7N1OyAjODhEMgor6KOTID4gZ8OpOyAjODhEMwor6KOUID4gecOsOyAjODhENAor6KOVID4gecO5OyAjODhENQor6KOWID4gemjElW47ICM4OEQ2Civoo5cgPiBsw611OyAjODhENwor6KOYID4gccOtdTsgIzg4RDgKK+ijmSA+IHHDum47ICM4OEQ5Civoo5ogPiBqw6w7ICM4OERBCivoo5sgPiB5w6w7ICM4OERCCivoo5wgPiBixa07ICM4OERDCivoo50gPiB6aHXEgW5nOyAjODhERAor6KOeID4gc2jDuWk7ICM4OERFCivoo58gPiBzaMSBOyAjODhERgor6KOgID4gccO6bjsgIzg4RTAKK+ijoSA+IGzErTsgIzg4RTEKK+ijoiA+IGxpw6FuOyAjODhFMgor6KOjID4gbGnDoG47ICM4OEUzCivoo6QgPiBrw7k7ICM4OEU0Civoo6UgPiBqacSDbjsgIzg4RTUKK+ijpiA+IGbDs3U7ICM4OEU2Civoo6cgPiBjaMSBbjsgIzg4RTcKK+ijqCA+IGLDrDsgIzg4RTgKK+ijqSA+IGfFq247ICM4OEU5Civoo6ogPiB0w6FvOyAjODhFQQor6KOrID4geXXDoG47ICM4OEVCCivoo6wgPiBsw61uZzsgIzg4RUMKK+ijrSA+IGNoxK07ICM4OEVECivoo64gPiBjaMSBbmc7ICM4OEVFCivoo68gPiBjaMOzdTsgIzg4RUYKK+ijsCA+IGTDum87ICM4OEYwCivoo7EgPiBiacSDbzsgIzg4RjEKK+ijsiA+IGxpxINuZzsgIzg4RjIKK+ijsyA+IGNow6FuZzsgIzg4RjMKK+ijtCA+IHDDqWk7ICM4OEY0Civoo7UgPiBww6lpOyAjODhGNQor6KO2ID4gZsSTaTsgIzg4RjYKK+ijtyA+IHl1xIFuOyAjODhGNwor6KO4ID4gbMWtbzsgIzg4RjgKK+ijuSA+IGfFrW87ICM4OEY5Civoo7ogPiB5xINuOyAjODhGQQor6KO7ID4gZMWtOyAjODhGQgor6KO8ID4geMOtOyAjODhGQwor6KO9ID4gemjDrDsgIzg4RkQKK+ijviA+IGrFqzsgIzg4RkUKK+ijvyA+IHHErTsgIzg4RkYKK+ikgCA+IGrDrDsgIzg5MDAKK+ikgSA+IHpow607ICM4OTAxCivopIIgPiBndcOgOyAjODkwMgor6KSDID4ga8OobjsgIzg5MDMKK+ikhSA+IHTDrDsgIzg5MDUKK+ikhiA+IHTDrTsgIzg5MDYKK+ikhyA+IGbDuTsgIzg5MDcKK+ikiCA+IGNow7NuZzsgIzg5MDgKK+ikiSA+IHhpxJM7ICM4OTA5CivopIogPiBiacSDbjsgIzg5MEEKK+ikiyA+IGRpw6k7ICM4OTBCCivopIwgPiBrxatuOyAjODkwQwor6KSNID4gZHXEgW47ICM4OTBECivopI4gPiB4w6x1OyAjODkwRQor6KSPID4geMOsdTsgIzg5MEYKK+ikkCA+IGjDqTsgIzg5MTAKK+ikkSA+IHl1w6BuOyAjODkxMQor6KSSID4gYsSBbzsgIzg5MTIKK+ikkyA+IGLEg287ICM4OTEzCivopJQgPiBmw7k7ICM4OTE0CivopJUgPiB5w7o7ICM4OTE1CivopJYgPiB0dcOgbjsgIzg5MTYKK+iklyA+IHnEg247ICM4OTE3CivopJggPiBoxatpOyAjODkxOAor6KSZID4gYsOoaTsgIzg5MTkKK+ikmiA+IGNoxa07ICM4OTFBCivopJsgPiBsx5o7ICM4OTFCCivopJ4gPiB5xa1uOyAjODkxRQor6KSfID4gZMOhOyAjODkxRgor6KSgID4gZ8WNdTsgIzg5MjAKK+ikoSA+IGTEgTsgIzg5MjEKK+ikoiA+IGh1w6FpOyAjODkyMgor6KSjID4gcsOzbmc7ICM4OTIzCivopKQgPiB5dcOgbjsgIzg5MjQKK+ikpSA+IHLDuTsgIzg5MjUKK+ikpiA+IG7DoGk7ICM4OTI2CivopKcgPiBqxK1vbmc7ICM4OTI3CivopKggPiBzxa1vOyAjODkyOAor6KSpID4gYsSBbjsgIzg5MjkKK+ikqiA+IHTDuW47ICM4OTJBCivopKsgPiBjaMStOyAjODkyQgor6KSsID4gc8SDbmc7ICM4OTJDCivopK0gPiBuacSDbzsgIzg5MkQKK+ikriA+IHnEq25nOyAjODkyRQor6KSvID4gamnDqDsgIzg5MkYKK+iksCA+IHFpxIFuOyAjODkzMAor6KSxID4gaHXDoWk7ICM4OTMxCivopLIgPiBrw7k7ICM4OTMyCivopLMgPiBsacOhbjsgIzg5MzMKK+iktCA+IGLEg287ICM4OTM0CivopLUgPiBsw607ICM4OTM1CivopLYgPiB6aMOpOyAjODkzNgor6KS3ID4gc2jEqzsgIzg5MzcKK+ikuCA+IGzHmjsgIzg5MzgKK+ikuSA+IHnDrDsgIzg5MzkKK+ikuiA+IGRpw6k7ICM4OTNBCivopLsgPiB4acOoOyAjODkzQgor6KS8ID4geGnEgW47ICM4OTNDCivopL0gPiB3w6hpOyAjODkzRAor6KS+ID4gYmnEg287ICM4OTNFCivopL8gPiBjw6FvOyAjODkzRgor6KWAID4gasSrOyAjODk0MAor6KWBID4gamnEg25nOyAjODk0MQor6KWCID4gc8STbjsgIzg5NDIKK+ilgyA+IGLEgW87ICM4OTQzCivopYQgPiB4acSBbmc7ICM4OTQ0CivopYYgPiBww7o7ICM4OTQ2CivopYcgPiBqacSDbjsgIzg5NDcKK+iliCA+IHpodcOgbjsgIzg5NDgKK+iliSA+IGppw6BuOyAjODk0OQor6KWKID4gesO5aTsgIzg5NEEKK+iliyA+IGrDrTsgIzg5NEIKK+iljCA+IGTEgW47ICM4OTRDCivopY0gPiB6w6E7ICM4OTRECivopY4gPiBmw6FuOyAjODk0RQor6KWPID4gYsOzOyAjODk0Rgor6KWQID4geGnDoG5nOyAjODk1MAor6KWRID4geMOtbjsgIzg5NTEKK+ilkiA+IGJpw6k7ICM4OTUyCivopZMgPiByw6FvOyAjODk1Mwor6KWUID4gbcSDbjsgIzg5NTQKK+illSA+IGzDoW47ICM4OTU1CivopZYgPiDEg287ICM4OTU2CivopZcgPiBkw7pvOyAjODk1Nwor6KWYID4gZ8O5aTsgIzg5NTgKK+ilmSA+IGPDoG87ICM4OTU5CivopZogPiBzw7lpOyAjODk1QQor6KWbID4gbsOzbmc7ICM4OTVCCivopZwgPiBjaMSBbjsgIzg5NUMKK+ilnSA+IGxpw6BuOyAjODk1RAor6KWeID4gYsOsOyAjODk1RQor6KWfID4gasSrbjsgIzg5NUYKK+iloCA+IGTEgW5nOyAjODk2MAor6KWhID4gc2jDujsgIzg5NjEKK+iloiA+IHTEg247ICM4OTYyCivopaMgPiBiw6w7ICM4OTYzCivopaQgPiBsw6FuOyAjODk2NAor6KWlID4gcMO6OyAjODk2NQor6KWmID4gcsO6OyAjODk2Ngor6KWnID4gemjErTsgIzg5NjcKK+ilqSA+IHNoxa07ICM4OTY5CivopaogPiB3w6A7ICM4OTZBCivopasgPiBzaMOsOyAjODk2Qgor6KWsID4gYsSDaTsgIzg5NkMKK+ilrSA+IHhpw6k7ICM4OTZECivopa4gPiBiw7M7ICM4OTZFCivopa8gPiBjaMOobjsgIzg5NkYKK+ilsCA+IGzDoGk7ICM4OTcwCivopbEgPiBsw7NuZzsgIzg5NzEKK+ilsiA+IHjDrTsgIzg5NzIKK+ilsyA+IHhpxIFuOyAjODk3Mwor6KW0ID4gbMOhbjsgIzg5NzQKK+iltSA+IHpow6k7ICM4OTc1CivopbYgPiBkw6BpOyAjODk3Ngor6KW4ID4gesOgbjsgIzg5NzgKK+iluSA+IHNoxKs7ICM4OTc5CivopbogPiBqacSDbjsgIzg5N0EKK+iluyA+IHDDoG47ICM4OTdCCivopbwgPiB5w6w7ICM4OTdDCivopb4gPiB5w6A7ICM4OTdFCivopb8gPiB4xKs7ICM4OTdGCivopoAgPiB4xKs7ICM4OTgwCivopoEgPiB5w6BvOyAjODk4MQor6KaCID4gZsSVbmc7ICM4OTgyCivopoMgPiB0w6FuOyAjODk4Mwor6KaFID4gYmnDoG87ICM4OTg1CivopoYgPiBmw7k7ICM4OTg2CivopocgPiBiw6A7ICM4OTg3CivopoggPiBow6k7ICM4OTg4CivopokgPiBqxKs7ICM4OTg5CivopoogPiBqxKs7ICM4OThBCivoposgPiBqacOgbjsgIzg5OEIKK+imjCA+IGd1xIFuOyAjODk4Qwor6KaNID4gYmnDoG47ICM4OThECivopo4gPiB5w6BuOyAjODk4RQor6KaPID4gZ8WraTsgIzg5OEYKK+imkCA+IGp1w6k7ICM4OTkwCivoppEgPiBwacSDbjsgIzg5OTEKK+imkiA+IG3DoW87ICM4OTkyCivoppMgPiBtw6w7ICM4OTkzCivoppQgPiBtw6w7ICM4OTk0CivoppUgPiBtacOoOyAjODk5NQor6KaWID4gc2jDrDsgIzg5OTYKK+imlyA+IHPEqzsgIzg5OTcKK+immCA+IHpoxIFuOyAjODk5OAor6KaZID4gbMO6bzsgIzg5OTkKK+immiA+IGp1w6k7ICM4OTlBCivoppsgPiBtw6w7ICM4OTlCCivoppwgPiB0acOgbzsgIzg5OUMKK+imnSA+IGxpw6FuOyAjODk5RAor6KaeID4gecOgbzsgIzg5OUUKK+imnyA+IHpow6w7ICM4OTlGCivopqAgPiBqxatuOyAjODlBMAor6KahID4geMOtOyAjODlBMQor6KaiID4gc2jEg247ICM4OUEyCivopqMgPiB3xJNpOyAjODlBMwor6KakID4geMOsOyAjODlBNAor6KalID4gdGnEg247ICM4OUE1CivopqYgPiB5w7o7ICM4OUE2CivopqcgPiBsxINuOyAjODlBNwor6KaoID4gw6g7ICM4OUE4CivopqkgPiBkxa07ICM4OUE5CivopqogPiBxxKtuOyAjODlBQQor6KarID4gcMSDbmc7ICM4OUFCCivopqwgPiBqw6w7ICM4OUFDCivopq0gPiBtw61uZzsgIzg5QUQKK+imriA+IHnDrW5nOyAjODlBRQor6KavID4gZ8OydTsgIzg5QUYKK+imsCA+IHHDuTsgIzg5QjAKK+imsSA+IHpow6BuOyAjODlCMQor6KayID4gasStbjsgIzg5QjIKK+imsyA+IGd1xIFuOyAjODlCMwor6Ka0ID4gZMSTbmc7ICM4OUI0CivoprUgPiBqacOgbjsgIzg5QjUKK+imtiA+IGzDum87ICM4OUI2CivoprcgPiBxw7k7ICM4OUI3CivoprggPiBqacOgbjsgIzg5QjgKK+imuSA+IHfDqWk7ICM4OUI5CivoprogPiBqdcOpOyAjODlCQQor6Ka7ID4gccO5OyAjODlCQgor6Ka8ID4gbMO6bzsgIzg5QkMKK+imvSA+IGzEg247ICM4OUJECivopr4gPiBzaMSVbjsgIzg5QkUKK+imvyA+IGTDrTsgIzg5QkYKK+ingCA+IGd1xIFuOyAjODlDMAor6KeBID4gamnDoG47ICM4OUMxCivop4IgPiBndcSBbjsgIzg5QzIKK+ingyA+IHnDoG47ICM4OUMzCivop4QgPiBnxatpOyAjODlDNAor6KeFID4gbcOsOyAjODlDNQor6KeGID4gc2jDrDsgIzg5QzYKK+inhyA+IHpoxIFuOyAjODlDNwor6KeIID4gbMSDbjsgIzg5QzgKK+iniSA+IGp1w6k7ICM4OUM5Civop4ogPiBqw6w7ICM4OUNBCivop4sgPiB4w607ICM4OUNCCivop4wgPiBkw607ICM4OUNDCivop40gPiB0acSDbjsgIzg5Q0QKK+injiA+IHnDujsgIzg5Q0UKK+injyA+IGfDsnU7ICM4OUNGCivop5AgPiBqxK1uOyAjODlEMAor6KeRID4gccO5OyAjODlEMQor6KeSID4gamnEg287ICM4OUQyCivop5MgPiBqxKt1OyAjODlEMwor6KeUID4gasSrbjsgIzg5RDQKK+inlSA+IGPFqzsgIzg5RDUKK+inliA+IGp1w6k7ICM4OUQ2Civop5cgPiB6aMOsOyAjODlENwor6KeYID4gY2jDoG87ICM4OUQ4Civop5kgPiBqw607ICM4OUQ5Civop5ogPiBnxas7ICM4OURBCivop5sgPiBkw6BuOyAjODlEQgor6KecID4gesWtaTsgIzg5REMKK+innSA+IGTErTsgIzg5REQKK+inniA+IHNoxIFuZzsgIzg5REUKK+innyA+IGh1w6A7ICM4OURGCivop6AgPiBxdcOhbjsgIzg5RTAKK+inoSA+IGfDqTsgIzg5RTEKK+inoiA+IGNow6w7ICM4OUUyCivop6MgPiBqacSVOyAjODlFMwor6KekID4gZ8WtaTsgIzg5RTQKK+inpSA+IGfFjW5nOyAjODlFNQor6KemID4gaMOzbmc7ICM4OUU2Civop6cgPiBqacSVOyAjODlFNwor6KeoID4gaMO5bjsgIzg5RTgKK+inqSA+IHHDrXU7ICM4OUU5Civop6ogPiB4xKtuZzsgIzg5RUEKK+inqyA+IHPDuTsgIzg5RUIKK+inrCA+IG7DrTsgIzg5RUMKK+inrSA+IGrEqzsgIzg5RUQKK+inriA+IGzDuTsgIzg5RUUKK+inryA+IHpow6w7ICM4OUVGCivop7AgPiB6aMSBOyAjODlGMAor6KexID4gYsOsOyAjODlGMQor6KeyID4geMSrbmc7ICM4OUYyCivop7MgPiBow7o7ICM4OUYzCivop7QgPiBzaMSBbmc7ICM4OUY0Civop7UgPiBnxY1uZzsgIzg5RjUKK+intiA+IHpow6w7ICM4OUY2Civop7cgPiB4dcOpOyAjODlGNwor6Ke4ID4gY2jDuTsgIzg5RjgKK+inuSA+IHjEqzsgIzg5RjkKK+inuiA+IHnDrTsgIzg5RkEKK+inuyA+IGzDuTsgIzg5RkIKK+invCA+IGp1w6k7ICM4OUZDCivop70gPiB4xKs7ICM4OUZECivop74gPiB5w6BuOyAjODlGRQor6Ke/ID4geMSrOyAjODlGRgor6KiAID4gecOhbjsgIzhBMDAKK+iogSA+IHnDoW4nICd6w6wnICdww6FuZzsgIzhBMDEKK+iogiA+IGTDrG5nOyAjOEEwMgor6KiDID4gZsO5OyAjOEEwMwor6KiEID4gccOtdTsgIzhBMDQKK+iohSA+IHHDrXU7ICM4QTA1CivoqIYgPiBqacOgbzsgIzhBMDYKK+iohyA+IGjFjW5nOyAjOEEwNwor6KiIID4gasOsOyAjOEEwOAor6KiJID4gZsOgbjsgIzhBMDkKK+ioiiA+IHjDuW47ICM4QTBBCivoqIsgPiBkacOgbzsgIzhBMEIKK+iojCA+IGjDs25nOyAjOEEwQwor6KiNID4gY2jDoDsgIzhBMEQKK+iojiA+IHTEg287ICM4QTBFCivoqI8gPiB4xas7ICM4QTBGCivoqJAgPiBqacOpOyAjOEExMAor6KiRID4gecOtOyAjOEExMQor6KiSID4gcsOobjsgIzhBMTIKK+iokyA+IHjDuW47ICM4QTEzCivoqJQgPiB5w61uOyAjOEExNAor6KiVID4gc2jDoG47ICM4QTE1CivoqJYgPiBxw6w7ICM4QTE2CivoqJcgPiB0xatvOyAjOEExNwor6KiYID4gasOsOyAjOEExOAor6KiZID4geMO5bjsgIzhBMTkKK+iomiA+IHnDrW47ICM4QTFBCivoqJsgPiDDqTsgIzhBMUIKK+ionCA+IGbEk247ICM4QTFDCivoqJ0gPiB5w6A7ICM4QTFECivoqJ4gPiB5xIFvOyAjOEExRQor6KifID4gc8Oybmc7ICM4QTFGCivoqKAgPiBzaMSVbjsgIzhBMjAKK+iooSA+IHnDrW47ICM4QTIxCivoqKIgPiB4xKtuOyAjOEEyMgor6KijID4ganXDqTsgIzhBMjMKK+iopCA+IHhpw6FvOyAjOEEyNAor6KilID4gbsOoOyAjOEEyNQor6KimID4gY2jDqW47ICM4QTI2CivoqKcgPiB5w7N1OyAjOEEyNwor6KioID4gemjErTsgIzhBMjgKK+ioqSA+IHjEq29uZzsgIzhBMjkKK+ioqiA+IGbEg25nOyAjOEEyQQor6KirID4geMOsbjsgIzhBMkIKK+iorCA+IGNoxIFvOyAjOEEyQwor6KitID4gc2jDqDsgIzhBMkQKK+ioriA+IHhpxIFuOyAjOEEyRQor6KivID4gc2jEgzsgIzhBMkYKK+iosCA+IHTDum47ICM4QTMwCivoqLEgPiB4xa07ICM4QTMxCivoqLIgPiB5w6w7ICM4QTMyCivoqLMgPiB5w6w7ICM4QTMzCivoqLQgPiBzw7k7ICM4QTM0CivoqLUgPiBjaMSrOyAjOEEzNQor6Ki2ID4gaMSTOyAjOEEzNgor6Ki3ID4gc2jEk247ICM4QTM3CivoqLggPiBow6k7ICM4QTM4CivoqLkgPiB4w7k7ICM4QTM5CivoqLogPiB6aMSVbjsgIzhBM0EKK+iouyA+IHpow7k7ICM4QTNCCivoqLwgPiB6aMOobmc7ICM4QTNDCivoqL0gPiBnw7J1OyAjOEEzRAor6Ki+ID4gesStOyAjOEEzRQor6Ki/ID4gesStOyAjOEEzRgor6KmAID4gemjEgW47ICM4QTQwCivoqYEgPiBnxa07ICM4QTQxCivoqYIgPiBmw7k7ICM4QTQyCivoqYMgPiBxdcSDbjsgIzhBNDMKK+iphCA+IGRpw6k7ICM4QTQ0CivoqYUgPiBsw61uZzsgIzhBNDUKK+iphiA+IGTErTsgIzhBNDYKK+iphyA+IHnDoG5nOyAjOEE0Nwor6KmIID4gbMOsOyAjOEE0OAor6KmJID4gbsOhbzsgIzhBNDkKK+ipiiA+IHDDoG47ICM4QTRBCivoqYsgPiB6aMOydTsgIzhBNEIKK+ipjCA+IGfDoG47ICM4QTRDCivoqY0gPiB5w6w7ICM4QTRECivoqY4gPiBqw7k7ICM4QTRFCivoqY8gPiDDoG87ICM4QTRGCivoqZAgPiB6aMOgOyAjOEE1MAor6KmRID4gdMO6bzsgIzhBNTEKK+ipkiA+IHnDrTsgIzhBNTIKK+ipkyA+IHHFrTsgIzhBNTMKK+iplCA+IHpow6BvOyAjOEE1NAor6KmVID4gcMOtbmc7ICM4QTU1CivoqZYgPiBiw6w7ICM4QTU2CivoqZcgPiB4w6xvbmc7ICM4QTU3CivoqZggPiBxw7k7ICM4QTU4CivoqZkgPiBiw6E7ICM4QTU5CivoqZogPiBkw6E7ICM4QTVBCivoqZsgPiB6xa07ICM4QTVCCivoqZwgPiB0xIFvOyAjOEE1Qwor6KmdID4gemjFrTsgIzhBNUQKK+ipniA+IGPDrTsgIzhBNUUKK+ipnyA+IHpow6k7ICM4QTVGCivoqaAgPiB5xY9uZzsgIzhBNjAKK+ipoSA+IHjFrTsgIzhBNjEKK+ipoiA+IHjDum47ICM4QTYyCivoqaMgPiB5w6w7ICM4QTYzCivoqaQgPiBodcSDbmc7ICM4QTY0CivoqaUgPiBow6k7ICM4QTY1CivoqaYgPiBzaMOsOyAjOEE2Ngor6KmnID4gY2jDoTsgIzhBNjcKK+ipqCA+IGppxIFvOyAjOEE2OAor6KmpID4gc2jEqzsgIzhBNjkKK+ipqiA+IGjElW47ICM4QTZBCivoqasgPiBjaMOgOyAjOEE2Qgor6KmsID4gZ8OydTsgIzhBNkMKK+iprSA+IGfFrWk7ICM4QTZECivoqa4gPiBxdcOhbjsgIzhBNkUKK+ipryA+IGjDuWk7ICM4QTZGCivoqbAgPiBqacOpOyAjOEE3MAor6KmxID4gaHXDoDsgIzhBNzEKK+ipsiA+IGfEgWk7ICM4QTcyCivoqbMgPiB4acOhbmc7ICM4QTczCivoqbQgPiB3xJNpOyAjOEE3NAor6Km1ID4gc2jEk247ICM4QTc1CivoqbYgPiBjaMOzdTsgIzhBNzYKK+iptyA+IHTDs25nOyAjOEE3Nwor6Km4ID4gbcOtOyAjOEE3OAor6Km5ID4gemjEgW47ICM4QTc5CivoqbogPiBtw6xuZzsgIzhBN0EKK+ipuyA+IMOoOyAjOEE3Qgor6Km8ID4gaMWraTsgIzhBN0MKK+ipvSA+IHnDoW47ICM4QTdECivoqb4gPiB4xKtvbmc7ICM4QTdFCivoqb8gPiBndcOgOyAjOEE3Rgor6KqAID4gw6hyOyAjOEE4MAor6KqBID4gYsSVbmc7ICM4QTgxCivoqoIgPiB0acSDbzsgIzhBODIKK+iqgyA+IGNoxK07ICM4QTgzCivoqoQgPiBsxJVpOyAjOEE4NAor6KqFID4gemjFqzsgIzhBODUKK+iqhiA+IGt1xIFuZzsgIzhBODYKK+iqhyA+IGt1xIE7ICM4QTg3CivoqoggPiB3w7o7ICM4QTg4CivoqokgPiB5w7k7ICM4QTg5CivoqoogPiB0w6luZzsgIzhBOEEKK+iqiyA+IGrDrDsgIzhBOEIKK+iqjCA+IHpow6w7ICM4QThDCivoqo0gPiByw6huOyAjOEE4RAor6KqOID4gc8O5OyAjOEE4RQor6KqPID4gbMSDbmc7ICM4QThGCivoqpAgPiDDqTsgIzhBOTAKK+iqkSA+IGt1w6FuZzsgIzhBOTEKK+iqkiA+IMOoOyAjOEE5Mgor6KqTID4gc2jDrDsgIzhBOTMKK+iqlCA+IHTErW5nOyAjOEE5NAor6KqVID4gZMOgbjsgIzhBOTUKK+iqliA+IGLDszsgIzhBOTYKK+iqlyA+IGNow6FuOyAjOEE5Nwor6KqYID4gecOydTsgIzhBOTgKK+iqmSA+IGjDqW5nOyAjOEE5OQor6KqaID4gcWnDoG87ICM4QTlBCivoqpsgPiBxxKtuOyAjOEE5Qgor6KqcID4gc2h1w6A7ICM4QTlDCivoqp0gPiDEgW47ICM4QTlECivoqp4gPiB5xa07ICM4QTlFCivoqp8gPiB4acOgbzsgIzhBOUYKK+iqoCA+IGNow6luZzsgIzhBQTAKK+iqoSA+IGppw6g7ICM4QUExCivoqqIgPiB4acOgbjsgIzhBQTIKK+iqoyA+IHfDujsgIzhBQTMKK+iqpCA+IHfDuTsgIzhBQTQKK+iqpSA+IGfDoG87ICM4QUE1CivoqqYgPiBzw7JuZzsgIzhBQTYKK+iqpyA+IHDFrTsgIzhBQTcKK+iqqCA+IGjDuWk7ICM4QUE4CivoqqkgPiBqw6xuZzsgIzhBQTkKK+iqqiA+IHNoxatvOyAjOEFBQQor6KqrID4gemjDqG47ICM4QUFCCivoqqwgPiBzaMWrbzsgIzhBQUMKK+iqrSA+IGTDujsgIzhBQUQKK+iqryA+IGNow6BuZzsgIzhBQUYKK+iqsCA+IHNow7ppOyAjOEFCMAor6KqxID4gamnDqTsgIzhBQjEKK+iqsiA+IGvDqDsgIzhBQjIKK+iqsyA+IHHFqzsgIzhBQjMKK+iqtCA+IGPDs25nOyAjOEFCNAor6Kq1ID4geGnDoW87ICM4QUI1CivoqrYgPiBzw7lpOyAjOEFCNgor6Kq3ID4gd8SDbmc7ICM4QUI3CivoqrggPiB4dcOhbjsgIzhBQjgKK+iquSA+IGbElWk7ICM4QUI5CivoqrogPiBjaMSrOyAjOEFCQQor6Kq7ID4gdMOgOyAjOEFCQgor6Kq8ID4gecOtOyAjOEFCQwor6Kq9ID4gbsOhOyAjOEFCRAor6Kq+ID4gecOtbjsgIzhBQkUKK+iqvyA+IGRpw6BvOyAjOEFCRgor6KuAID4gcMStOyAjOEFDMAor6KuBID4gY2jDuW87ICM4QUMxCivoq4IgPiBjaMSDbjsgIzhBQzIKK+irgyA+IGNoxJNuOyAjOEFDMwor6KuEID4gemjFq247ICM4QUM0Civoq4UgPiBqxKs7ICM4QUM1Civoq4YgPiBxxKs7ICM4QUM2Civoq4cgPiB0w6FuOyAjOEFDNwor6KuIID4gemjDuWk7ICM4QUM4Civoq4kgPiB3xJVpOyAjOEFDOQor6KuKID4gasO6OyAjOEFDQQor6KuLID4gccStbmc7ICM4QUNCCivoq4wgPiBqacOgbjsgIzhBQ0MKK+irjSA+IHpoxJNuZzsgIzhBQ0QKK+irjiA+IHrDqTsgIzhBQ0UKK+irjyA+IHrFjXU7ICM4QUNGCivoq5AgPiBxacSBbjsgIzhBRDAKK+irkSA+IHpow7pvOyAjOEFEMQor6KuSID4gbGnDoG5nOyAjOEFEMgor6KuTID4gamnDoG47ICM4QUQzCivoq5QgPiB6aMO5OyAjOEFENAor6KuVID4gaMOhbzsgIzhBRDUKK+irliA+IGzDuW47ICM4QUQ2Civoq5cgPiBzaMSVbjsgIzhBRDcKK+irmCA+IGJpxINvOyAjOEFEOAor6KuZID4gaHXDoGk7ICM4QUQ5Civoq5ogPiBwacOhbjsgIzhBREEKK+irmyA+IHnDujsgIzhBREIKK+irnCA+IGRpw6k7ICM4QURDCivoq50gPiB4xa07ICM4QURECivoq54gPiBwacOhbjsgIzhBREUKK+irnyA+IHNow6w7ICM4QURGCivoq6AgPiB4dcSBbjsgIzhBRTAKK+iroSA+IHNow6w7ICM4QUUxCivoq6IgPiBow7luOyAjOEFFMgor6KujID4gaHXDoDsgIzhBRTMKK+irpCA+IMOoOyAjOEFFNAor6KulID4gemjDsm5nOyAjOEFFNQor6KumID4gZMOsOyAjOEFFNgor6KunID4geGnDqTsgIzhBRTcKK+irqCA+IGbDujsgIzhBRTgKK+irqSA+IHDFrTsgIzhBRTkKK+irqiA+IHTDrW5nOyAjOEFFQQor6KurID4gamnDoG47ICM4QUVCCivoq6wgPiBxxK07ICM4QUVDCivoq60gPiB5w7k7ICM4QUVECivoq64gPiB6xKs7ICM4QUVFCivoq68gPiBjaHXDoW47ICM4QUVGCivoq7AgPiB4xK07ICM4QUYwCivoq7EgPiBow7lpOyAjOEFGMQor6KuyID4gecSrbjsgIzhBRjIKK+irsyA+IMSBbjsgIzhBRjMKK+irtCA+IHhpw6FuOyAjOEFGNAor6Ku1ID4gbsOhbjsgIzhBRjUKK+irtiA+IGNow6luOyAjOEFGNgor6Ku3ID4gZsSTbmc7ICM4QUY3Civoq7ggPiB6aMWrOyAjOEFGOAor6Ku5ID4gecOhbmc7ICM4QUY5Civoq7ogPiB5w6BuOyAjOEFGQQor6Ku7ID4gaMSTbmc7ICM4QUZCCivoq7wgPiB4dcSBbjsgIzhBRkMKK+irvSA+IGfDqTsgIzhBRkQKK+irviA+IG7DuW87ICM4QUZFCivoq78gPiBxw6w7ICM4QUZGCivorIAgPiBtw7N1OyAjOEIwMAor6KyBID4gecOoOyAjOEIwMQor6KyCID4gd8OoaTsgIzhCMDIKK+ishCA+IHTDqW5nOyAjOEIwNAor6KyFID4gesWNdTsgIzhCMDUKK+ishiA+IHNow6BuOyAjOEIwNgor6KyHID4gamnEg247ICM4QjA3CivorIggPiBiw7M7ICM4QjA4CivorIkgPiBrw7kxOyAjOEIwOQor6KyKID4gaHXEg25nOyAjOEIwQQor6KyLID4gaMO5bzsgIzhCMEIKK+isjCA+IGfEkzsgIzhCMEMKK+isjSA+IHnDrW5nOyAjOEIwRAor6KyOID4gbcOtOyAjOEIwRQor6KyPID4geGnEg287ICM4QjBGCivorJAgPiBtw6w7ICM4QjEwCivorJEgPiB4w6w7ICM4QjExCivorJIgPiBxacSBbmc7ICM4QjEyCivorJMgPiBjaMSTbjsgIzhCMTMKK+islCA+IG7HnGU7ICM4QjE0CivorJUgPiB0w607ICM4QjE1CivorJYgPiBzw7k7ICM4QjE2CivorJcgPiBiw6BuZzsgIzhCMTcKK+ismCA+IGNow607ICM4QjE4CivorJkgPiBxacSBbjsgIzhCMTkKK+ismiA+IHNow6w7ICM4QjFBCivorJsgPiBqacSDbmc7ICM4QjFCCivorJwgPiB5dcOgbjsgIzhCMUMKK+isnSA+IHhpw6g7ICM4QjFECivorJ4gPiB4dcOoOyAjOEIxRQor6KyfID4gdMSBbzsgIzhCMUYKK+isoCA+IHnDoW87ICM4QjIwCivorKEgPiB5w6FvOyAjOEIyMQor6KyjID4gecO6OyAjOEIyMwor6KykID4gYmnEgW87ICM4QjI0CivorKUgPiBjw7JuZzsgIzhCMjUKK+ispiA+IHHDrG5nOyAjOEIyNgor6KynID4gbMOtOyAjOEIyNwor6KyoID4gbcOzOyAjOEIyOAor6KypID4gbcOyOyAjOEIyOQor6KyqID4gc2jEgW5nOyAjOEIyQQor6KyrID4gemjDqTsgIzhCMkIKK+isrCA+IG3DrHU7ICM4QjJDCivorK0gPiBqacSDbjsgIzhCMkQKK+isriA+IHrDqTsgIzhCMkUKK+isryA+IGppxJM7ICM4QjJGCivorLAgPiBsacOhbjsgIzhCMzAKK+issSA+IGzDs3U7ICM4QjMxCivorLIgPiBjxIFuOyAjOEIzMgor6KyzID4gxY11OyAjOEIzMwor6Ky0ID4gZ3XDoG47ICM4QjM0CivorLUgPiB4w607ICM4QjM1CivorLYgPiB6aMO6bzsgIzhCMzYKK+istyA+IMOhbzsgIzhCMzcKK+isuCA+IMOhbzsgIzhCMzgKK+isuSA+IGrErW47ICM4QjM5CivorLogPiB6aMOpOyAjOEIzQQor6Ky7ID4gecOtOyAjOEIzQgor6Ky8ID4gaMO5OyAjOEIzQwor6Ky9ID4gamnDoG5nOyAjOEIzRAor6Ky+ID4gbcOhbjsgIzhCM0UKK+isvyA+IGNow6FvOyAjOEIzRgor6K2AID4gaMOgbjsgIzhCNDAKK+itgSA+IGh1w6E7ICM4QjQxCivorYIgPiBjaMSDbjsgIzhCNDIKK+itgyA+IHjFqzsgIzhCNDMKK+ithCA+IHrEk25nOyAjOEI0NAor6K2FID4gc8OoOyAjOEI0NQor6K2GID4geMSrOyAjOEI0Ngor6K2HID4gc2jEkzsgIzhCNDcKK+itiCA+IGTDuWk7ICM4QjQ4CivorYkgPiB6aMOobmc7ICM4QjQ5CivorYogPiBuw6FvOyAjOEI0QQor6K2LID4gbMOhbjsgIzhCNEIKK+itjCA+IMOpOyAjOEI0Qwor6K2NID4gecOsbmc7ICM4QjRECivorY4gPiBqdcOpOyAjOEI0RQor6K2PID4gasSrOyAjOEI0Rgor6K2QID4gesWtbjsgIzhCNTAKK+itkSA+IGppxINvOyAjOEI1MQor6K2SID4gYsOyOyAjOEI1Mgor6K2TID4gaMO5aTsgIzhCNTMKK+itlCA+IHpodcOgbjsgIzhCNTQKK+itlSA+IG3DujsgIzhCNTUKK+itliA+IHrDqG47ICM4QjU2CivorZcgPiB6aMOhOyAjOEI1Nwor6K2YID4gc2jDrDsgIzhCNTgKK+itmSA+IHFpw6FvOyAjOEI1OQor6K2aID4gdMOhbjsgIzhCNUEKK+itmyA+IHrDqG47ICM4QjVCCivorZwgPiBwxa07ICM4QjVDCivorZ0gPiBzaMOpbmc7ICM4QjVECivorZ4gPiB4dcSBbjsgIzhCNUUKK+itnyA+IHrDoG87ICM4QjVGCivoraAgPiB0xIFuOyAjOEI2MAor6K2hID4gZMSDbmc7ICM4QjYxCivoraIgPiBzw7lpOyAjOEI2Mgor6K2jID4gcWnEgW47ICM4QjYzCivoraQgPiBqxKs7ICM4QjY0CivoraUgPiBqacOgbzsgIzhCNjUKK+itpiA+IGrErW5nOyAjOEI2Ngor6K2nID4gbGnDoW47ICM4QjY3CivoraggPiBuw7N1OyAjOEI2OAor6K2pID4gecSrOyAjOEI2OQor6K2qID4gw6BpOyAjOEI2QQor6K2rID4gemjEgW47ICM4QjZCCivorawgPiBww6w7ICM4QjZDCivora0gPiBoxa1pOyAjOEI2RAor6K2uID4gaHXDoDsgIzhCNkUKK+itryA+IHnDrDsgIzhCNkYKK+itsCA+IHnDrDsgIzhCNzAKK+itsSA+IHNow6BuOyAjOEI3MQor6K2yID4gcsOgbmc7ICM4QjcyCivorbMgPiBuw7J1OyAjOEI3Mwor6K20ID4gcWnEg247ICM4Qjc0CivorbUgPiB6aMO5aTsgIzhCNzUKK+ittiA+IHTDoDsgIzhCNzYKK+ittyA+IGjDuTsgIzhCNzcKK+ituCA+IHpoxY11OyAjOEI3OAor6K25ID4gaMOhbzsgIzhCNzkKK+ituiA+IHnDqDsgIzhCN0EKK+ituyA+IHnEq25nOyAjOEI3Qgor6K28ID4gamnDoG47ICM4QjdDCivorb0gPiB5w7k7ICM4QjdECivorb4gPiBqacSDbjsgIzhCN0UKK+itvyA+IGjDuWk7ICM4QjdGCivoroAgPiBkw7o7ICM4QjgwCivoroEgPiB6aMOpOyAjOEI4MQor6K6CID4geHXDoG47ICM4QjgyCivoroMgPiB6w6BuOyAjOEI4Mwor6K6EID4gbMSVaTsgIzhCODQKK+iuhSA+IHNoxJVuOyAjOEI4NQor6K6GID4gd8OoaTsgIzhCODYKK+iuhyA+IGNoxINuOyAjOEI4Nwor6K6IID4gbMOsOyAjOEI4OAor6K6JID4gecOtOyAjOEI4OQor6K6KID4gYmnDoG47ICM4QjhBCivorosgPiB6aMOpOyAjOEI4Qgor6K6MID4gecOgbjsgIzhCOEMKK+iujSA+IMOoOyAjOEI4RAor6K6OID4gY2jDs3U7ICM4QjhFCivoro8gPiB3w6hpOyAjOEI4Rgor6K6QID4gY2jDs3U7ICM4QjkwCivorpEgPiB5w6BvOyAjOEI5MQor6K6SID4gY2jDoW47ICM4QjkyCivorpMgPiByw6BuZzsgIzhCOTMKK+iulCA+IHnErW47ICM4Qjk0CivorpUgPiBsw6FuOyAjOEI5NQor6K6WID4gY2jDqG47ICM4Qjk2CivorpcgPiBow7lvOyAjOEI5Nwor6K6YID4gemjDqTsgIzhCOTgKK+iumSA+IGh1xIFuOyAjOEI5OQor6K6aID4gesOgbjsgIzhCOUEKK+iumyA+IHnDrDsgIzhCOUIKK+iunCA+IGTEg25nOyAjOEI5Qwor6K6dID4gemjEgW47ICM4QjlECivorp4gPiB5w6BuOyAjOEI5RQor6K6fID4gZMO6OyAjOEI5Rgor6K6gID4gecOhbjsgIzhCQTAKK+iuoSA+IGrDrDsgIzhCQTEKK+iuoiA+IGTDrG5nOyAjOEJBMgor6K6jID4gZsO5OyAjOEJBMwor6K6kID4gcsOobjsgIzhCQTQKK+iupSA+IGrEqzsgIzhCQTUKK+iupiA+IGppw6k7ICM4QkE2CivorqcgPiBow7NuZzsgIzhCQTcKK+iuqCA+IHTEg287ICM4QkE4CivorqkgPiByw6BuZzsgIzhCQTkKK+iuqiA+IHNow6BuOyAjOEJBQQor6K6rID4gccOsOyAjOEJBQgor6K6sID4gdMWrbzsgIzhCQUMKK+iurSA+IHjDuW47ICM4QkFECivorq4gPiB5w6w7ICM4QkFFCivorq8gPiB4w7luOyAjOEJBRgor6K6wID4gasOsOyAjOEJCMAor6K6xID4gcsOobjsgIzhCQjEKK+iusiA+IGppxINuZzsgIzhCQjIKK+iusyA+IGjDuWk7ICM4QkIzCivorrQgPiDFjXU7ICM4QkI0CivorrUgPiBqw7k7ICM4QkI1CivorrYgPiB5w6A7ICM4QkI2CivorrcgPiBuw6g7ICM4QkI3CivorrggPiB4xa07ICM4QkI4CivorrkgPiDDqTsgIzhCQjkKK+iuuiA+IGzDuW47ICM4QkJBCivorrsgPiB4xKtvbmc7ICM4QkJCCivorrwgPiBzw7JuZzsgIzhCQkMKK+iuvSA+IGbEk25nOyAjOEJCRAor6K6+ID4gc2jDqDsgIzhCQkUKK+iuvyA+IGbEg25nOyAjOEJCRgor6K+AID4ganXDqTsgIzhCQzAKK+ivgSA+IHpow6huZzsgIzhCQzEKK+ivgiA+IGfFrTsgIzhCQzIKK+ivgyA+IGjEkzsgIzhCQzMKK+ivhCA+IHDDrW5nOyAjOEJDNAor6K+FID4gesWtOyAjOEJDNQor6K+GID4gc2jDrDsgIzhCQzYKK+ivhyA+IHjDrG9uZzsgIzhCQzcKK+iviCA+IHpow6A7ICM4QkM4Civor4kgPiBzw7k7ICM4QkM5Civor4ogPiB6aMSVbjsgIzhCQ0EKK+iviyA+IGTErTsgIzhCQ0IKK+ivjCA+IHrFjXU7ICM4QkNDCivor40gPiBjw607ICM4QkNECivor44gPiBxw7k7ICM4QkNFCivor48gPiB6aMOgbzsgIzhCQ0YKK+ivkCA+IGLDrDsgIzhCRDAKK+ivkSA+IHnDrDsgIzhCRDEKK+ivkiA+IHnDrTsgIzhCRDIKK+ivkyA+IGt1xIFuZzsgIzhCRDMKK+ivlCA+IGzElWk7ICM4QkQ0Civor5UgPiBzaMOsOyAjOEJENQor6K+WID4gZ3XDoDsgIzhCRDYKK+ivlyA+IHNoxKs7ICM4QkQ3Civor5ggPiBqacOpOyAjOEJEOAor6K+ZID4gaMWraTsgIzhCRDkKK+ivmiA+IGNow6luZzsgIzhCREEKK+ivmyA+IHpoxas7ICM4QkRCCivor5wgPiBzaMSTbjsgIzhCREMKK+ivnSA+IGh1w6A7ICM4QkRECivor54gPiBkw6BuOyAjOEJERQor6K+fID4gZ8OydTsgIzhCREYKK+ivoCA+IHF1w6FuOyAjOEJFMAor6K+hID4gZ8WtaTsgIzhCRTEKK+ivoiA+IHjDum47ICM4QkUyCivor6MgPiB5w6w7ICM4QkUzCivor6QgPiB6aMSTbmc7ICM4QkU0Civor6UgPiBnxIFpOyAjOEJFNQor6K+mID4geGnDoW5nOyAjOEJFNgor6K+nID4gY2jDoDsgIzhCRTcKK+ivqCA+IGjDuW47ICM4QkU4Civor6kgPiB4xa07ICM4QkU5Civor6ogPiB6aMWNdTsgIzhCRUEKK+ivqyA+IGppw6g7ICM4QkVCCivor6wgPiB3w7o7ICM4QkVDCivor60gPiB5xa07ICM4QkVECivor64gPiBxacOgbzsgIzhCRUUKK+ivryA+IHfDuTsgIzhCRUYKK+ivsCA+IGfDoG87ICM4QkYwCivor7EgPiB5w7J1OyAjOEJGMQor6K+yID4gaMO5aTsgIzhCRjIKK+ivsyA+IGt1w6FuZzsgIzhCRjMKK+ivtCA+IHNoxatvOyAjOEJGNAor6K+1ID4gc8Oybmc7ICM4QkY1Civor7YgPiDEgWk7ICM4QkY2Civor7cgPiBxxK1uZzsgIzhCRjcKK+ivuCA+IHpoxas7ICM4QkY4Civor7kgPiB6xY11OyAjOEJGOQor6K+6ID4gbsO5bzsgIzhCRkEKK+ivuyA+IGTDujsgIzhCRkIKK+ivvCA+IHpow7pvOyAjOEJGQwor6K+9ID4gZsSVaTsgIzhCRkQKK+ivviA+IGvDqDsgIzhCRkUKK+ivvyA+IHfElWk7ICM4QkZGCivosIAgPiB5w7o7ICM4QzAwCivosIEgPiBzaMO6aTsgIzhDMDEKK+iwgiA+IHNoxJVuOyAjOEMwMgor6LCDID4gZGnDoG87ICM4QzAzCivosIQgPiBjaMSDbjsgIzhDMDQKK+iwhSA+IGxpw6BuZzsgIzhDMDUKK+iwhiA+IHpoxatuOyAjOEMwNgor6LCHID4gc8O5aTsgIzhDMDcKK+iwiCA+IHTDoW47ICM4QzA4CivosIkgPiBzaMSVbjsgIzhDMDkKK+iwiiA+IHnDrTsgIzhDMEEKK+iwiyA+IG3Ds3U7ICM4QzBCCivosIwgPiBjaMOpbjsgIzhDMEMKK+iwjSA+IGRpw6k7ICM4QzBECivosI4gPiBodcSDbmc7ICM4QzBFCivosI8gPiBqacOgbjsgIzhDMEYKK+iwkCA+IHhpw6k7ICM4QzEwCivosJEgPiBux5xlOyAjOEMxMQor6LCSID4gecOoOyAjOEMxMgor6LCTID4gd8OoaTsgIzhDMTMKK+iwlCA+IMOoOyAjOEMxNAor6LCVID4gecO5OyAjOEMxNQor6LCWID4geHXEgW47ICM4QzE2CivosJcgPiBjaMOhbjsgIzhDMTcKK+iwmCA+IHrEqzsgIzhDMTgKK+iwmSA+IMSBbjsgIzhDMTkKK+iwmiA+IHnDoG47ICM4QzFBCivosJsgPiBkw6w7ICM4QzFCCivosJwgPiBtw607ICM4QzFDCivosJ0gPiBwacOhbjsgIzhDMUQKK+iwniA+IHjFrTsgIzhDMUUKK+iwnyA+IG3DszsgIzhDMUYKK+iwoCA+IGTEg25nOyAjOEMyMAor6LChID4gc8O5OyAjOEMyMQor6LCiID4geGnDqDsgIzhDMjIKK+iwoyA+IHnDoW87ICM4QzIzCivosKQgPiBiw6BuZzsgIzhDMjQKK+iwpSA+IHNow6w7ICM4QzI1CivosKYgPiBxacSBbjsgIzhDMjYKK+iwpyA+IG3DrDsgIzhDMjcKK+iwqCA+IGrErW47ICM4QzI4CivosKkgPiBtw6FuOyAjOEMyOQor6LCqID4gemjDqTsgIzhDMkEKK+iwqyA+IGppxINuOyAjOEMyQgor6LCsID4gbcOsdTsgIzhDMkMKK+iwrSA+IHTDoW47ICM4QzJECivosK4gPiB6w6huOyAjOEMyRQor6LCvID4gcWnDoW87ICM4QzJGCivosLAgPiBsw6FuOyAjOEMzMAor6LCxID4gcMWtOyAjOEMzMQor6LCyID4ganXDqTsgIzhDMzIKK+iwsyA+IHnDoG47ICM4QzMzCivosLQgPiBxacSDbjsgIzhDMzQKK+iwtSA+IHpoxIFuOyAjOEMzNQor6LC2ID4gY2jDqG47ICM4QzM2CivosLcgPiBnxa07ICM4QzM3CivosLggPiBxacSBbjsgIzhDMzgKK+iwuSA+IGjDs25nOyAjOEMzOQor6LC6ID4geGnEgTsgIzhDM0EKK+iwuyA+IGp1w6k7ICM4QzNCCivosLwgPiBow7NuZzsgIzhDM0MKK+iwvSA+IGjEgW47ICM4QzNECivosL4gPiBoxY1uZzsgIzhDM0UKK+iwvyA+IHjEqzsgIzhDM0YKK+ixgCA+IHjEqzsgIzhDNDAKK+ixgSA+IGjDuW87ICM4QzQxCivosYIgPiBsacOhbzsgIzhDNDIKK+ixgyA+IGjEg247ICM4QzQzCivosYQgPiBkw7o7ICM4QzQ0CivosYUgPiBsw7NuZzsgIzhDNDUKK+ixhiA+IGTDsnU7ICM4QzQ2CivosYcgPiBqacSBbmc7ICM4QzQ3CivosYggPiBxxK07ICM4QzQ4CivosYkgPiBzaMOsOyAjOEM0OQor6LGKID4gbMStOyAjOEM0QQor6LGLID4gZMSTbmc7ICM4QzRCCivosYwgPiB3xIFuOyAjOEM0Qwor6LGNID4gYsSrOyAjOEM0RAor6LGOID4gc2jDuTsgIzhDNEUKK+ixjyA+IHhpw6BuOyAjOEM0Rgor6LGQID4gZsSTbmc7ICM4QzUwCivosZEgPiB6aMOsOyAjOEM1MQor6LGSID4gemjDrDsgIzhDNTIKK+ixkyA+IHnDoG47ICM4QzUzCivosZQgPiB5w6BuOyAjOEM1NAor6LGVID4gc2jErTsgIzhDNTUKK+ixliA+IGNow7k7ICM4QzU2CivosZcgPiBoxatpOyAjOEM1Nwor6LGYID4gdMO6bjsgIzhDNTgKK+ixmSA+IHnDrDsgIzhDNTkKK+ixmiA+IHTDum47ICM4QzVBCivosZsgPiB5w6w7ICM4QzVCCivosZwgPiBqacSBbjsgIzhDNUMKK+ixnSA+IGLEgTsgIzhDNUQKK+ixniA+IGjDsnU7ICM4QzVFCivosZ8gPiDDqDsgIzhDNUYKK+ixoCA+IGPDujsgIzhDNjAKK+ixoSA+IHhpw6BuZzsgIzhDNjEKK+ixoiA+IGh1w6BuOyAjOEM2Mgor6LGjID4gamnEgW47ICM4QzYzCivosaQgPiBrxJVuOyAjOEM2NAor6LGlID4gZ8SBaTsgIzhDNjUKK+ixpiA+IHHDujsgIzhDNjYKK+ixpyA+IGbFqzsgIzhDNjcKK+ixqCA+IHjEqzsgIzhDNjgKK+ixqSA+IGLEq247ICM4QzY5CivosaogPiBow6FvOyAjOEM2QQor6LGrID4gecO5OyAjOEM2Qgor6LGsID4gemjFqzsgIzhDNkMKK+ixrSA+IGppxIE7ICM4QzZECivosa8gPiB4xKs7ICM4QzZGCivosbAgPiBiw7M7ICM4QzcwCivosbEgPiB3xJNuOyAjOEM3MQor6LGyID4gaHXDoW47ICM4QzcyCivosbMgPiBixKtuOyAjOEM3Mwor6LG0ID4gZMOtOyAjOEM3NAor6LG1ID4gesWNbmc7ICM4Qzc1CivosbYgPiBmw6luOyAjOEM3Ngor6LG3ID4gecOsOyAjOEM3Nwor6LG4ID4gemjDrDsgIzhDNzgKK+ixuSA+IGLDoG87ICM4Qzc5CivosbogPiBjaMOhaTsgIzhDN0EKK+ixuyA+IGjDoG47ICM4QzdCCivosbwgPiBww607ICM4QzdDCivosb0gPiBuw6A7ICM4QzdECivosb4gPiBwxKs7ICM4QzdFCivosb8gPiBnxY91OyAjOEM3Rgor6LKAID4gbsOgOyAjOEM4MAor6LKBID4gecOydTsgIzhDODEKK+iygiA+IGRpxIFvOyAjOEM4Mgor6LKDID4gbcOyOyAjOEM4Mwor6LKEID4gc8OsOyAjOEM4NAor6LKFID4geMSrdTsgIzhDODUKK+iyhiA+IGh1w6FuOyAjOEM4Ngor6LKHID4ga8WrbjsgIzhDODcKK+iyiCA+IGjDqTsgIzhDODgKK+iyiSA+IGjDqTsgIzhDODkKK+iyiiA+IG3DsjsgIzhDOEEKK+iyiyA+IGjDoG47ICM4QzhCCivosowgPiBtw6BvOyAjOEM4Qwor6LKNID4gbMOtOyAjOEM4RAor6LKOID4gbsOtOyAjOEM4RQor6LKPID4gYsStOyAjOEM4Rgor6LKQID4gecWtOyAjOEM5MAor6LKRID4gamnEgTsgIzhDOTEKK+iykiA+IHR1xIFuOyAjOEM5Mgor6LKTID4gbcSBbzsgIzhDOTMKK+iylCA+IHDDrTsgIzhDOTQKK+iylSA+IHjEqzsgIzhDOTUKK+iyliA+IMOoOyAjOEM5Ngor6LKXID4gasO5OyAjOEM5Nwor6LKYID4gbcOyOyAjOEM5OAor6LKZID4gY2jFqzsgIzhDOTkKK+iymiA+IHTDoW47ICM4QzlBCivospsgPiBodcSBbjsgIzhDOUIKK+iynCA+IGp1w6k7ICM4QzlDCivosp0gPiBiw6hpOyAjOEM5RAor6LKeID4gemjEk247ICM4QzlFCivosp8gPiB5dcOhbjsgIzhDOUYKK+iyoCA+IGbDuTsgIzhDQTAKK+iyoSA+IGPDoWk7ICM4Q0ExCivosqIgPiBnw7JuZzsgIzhDQTIKK+iyoyA+IHTDqDsgIzhDQTMKK+iypCA+IHnDrTsgIzhDQTQKK+iypSA+IGjDoW5nOyAjOENBNQor6LKmID4gd8OgbjsgIzhDQTYKK+iypyA+IHDDrW47ICM4Q0E3CivosqggPiBow7lvOyAjOENBOAor6LKpID4gZsOgbjsgIzhDQTkKK+iyqiA+IHTEgW47ICM4Q0FBCivosqsgPiBndcOgbjsgIzhDQUIKK+iyrCA+IHrDqTsgIzhDQUMKK+iyrSA+IHpow607ICM4Q0FECivosq4gPiDDqHI7ICM4Q0FFCivosq8gPiB6aMWtOyAjOENBRgor6LKwID4gc2jDrDsgIzhDQjAKK+iysSA+IGLDrDsgIzhDQjEKK+iysiA+IHrEqzsgIzhDQjIKK+iysyA+IMOocjsgIzhDQjMKK+iytCA+IGfDuWk7ICM4Q0I0CivosrUgPiBwacSDbjsgIzhDQjUKK+iytiA+IGJpxINuOyAjOENCNgor6LK3ID4gbcSDaTsgIzhDQjcKK+iyuCA+IGTDoGk7ICM4Q0I4CivosrkgPiBzaMOobmc7ICM4Q0I5CivosrogPiBrdcOgbmc7ICM4Q0JBCivosrsgPiBmw6hpOyAjOENCQgor6LK8ID4gdGnEkzsgIzhDQkMKK+iyvSA+IHnDrTsgIzhDQkQKK+iyviA+IGNow607ICM4Q0JFCivosr8gPiBtw6BvOyAjOENCRgor6LOAID4gaMOoOyAjOENDMAor6LOBID4gYsOsOyAjOENDMQor6LOCID4gbMO5OyAjOENDMgor6LODID4gcsOobjsgIzhDQzMKK+izhCA+IGjDuWk7ICM4Q0M0Civos4UgPiBnxIFpOyAjOENDNQor6LOGID4gcGnDoW47ICM4Q0M2Civos4cgPiB6xKs7ICM4Q0M3Civos4ggPiBqacSDOyAjOENDOAor6LOJID4geMO5OyAjOENDOQor6LOKID4gesOpaTsgIzhDQ0EKK+iziyA+IGppxINvOyAjOENDQgor6LOMID4gZ8OgaTsgIzhDQ0MKK+izjSA+IHrEgW5nOyAjOENDRAor6LOOID4gamnDoG47ICM4Q0NFCivos48gPiB5w6xuZzsgIzhDQ0YKK+izkCA+IHjDuW47ICM4Q0QwCivos5EgPiB6aMOobjsgIzhDRDEKK+izkiA+IHNoxJM7ICM4Q0QyCivos5MgPiBixKtuOyAjOENEMwor6LOUID4gYsSrbjsgIzhDRDQKK+izlSA+IHHDrXU7ICM4Q0Q1Civos5YgPiBzaMSTOyAjOENENgor6LOXID4gY2h1w6BuOyAjOENENwor6LOYID4gesSBbmc7ICM4Q0Q4Civos5kgPiB6aMWNdTsgIzhDRDkKK+izmiA+IGzDoGk7ICM4Q0RBCivos5sgPiB6w6BuOyAjOENEQgor6LOcID4gc8OsOyAjOENEQwor6LOdID4gY2jEk247ICM4Q0RECivos54gPiBzaMSDbmc7ICM4Q0RFCivos58gPiB0acSDbjsgIzhDREYKK+izoCA+IHDDqWk7ICM4Q0UwCivos6EgPiBnxJNuZzsgIzhDRTEKK+izoiA+IHhpw6FuOyAjOENFMgor6LOjID4gbcOgaTsgIzhDRTMKK+izpCA+IGppw6BuOyAjOENFNAor6LOlID4gc8O5aTsgIzhDRTUKK+izpiA+IGbDuTsgIzhDRTYKK+izpyA+IHTDoG47ICM4Q0U3Civos6ggPiBjw7NuZzsgIzhDRTgKK+izqSA+IGPDs25nOyAjOENFOQor6LOqID4gemjDrTsgIzhDRUEKK+izqyA+IGrEqzsgIzhDRUIKK+izrCA+IHpow6BuZzsgIzhDRUMKK+izrSA+IGTFrTsgIzhDRUQKK+izriA+IGrDrG47ICM4Q0VFCivos68gPiB4xKtvbmc7ICM4Q0VGCivos7AgPiBzaMWtbjsgIzhDRjAKK+izsSA+IHnFrW47ICM4Q0YxCivos7IgPiBixINvOyAjOENGMgor6LOzID4gesSBaTsgIzhDRjMKK+iztCA+IGzDoGk7ICM4Q0Y0Civos7UgPiBmw6huZzsgIzhDRjUKK+iztiA+IGPDoG5nOyAjOENGNgor6LO3ID4gasSrOyAjOENGNwor6LO4ID4gc2jDqG5nOyAjOENGOAor6LO5ID4gw6BpOyAjOENGOQor6LO6ID4gemh1w6BuOyAjOENGQQor6LO7ID4gZsO5OyAjOENGQgor6LO8ID4gZ8OydTsgIzhDRkMKK+izvSA+IHPDoGk7ICM4Q0ZECivos74gPiB6w6k7ICM4Q0ZFCivos78gPiBsacOhbzsgIzhDRkYKK+i0gCA+IHfDqGk7ICM4RDAwCivotIEgPiBiw6BpOyAjOEQwMQor6LSCID4gY2jElW47ICM4RDAyCivotIMgPiB6aHXDoG47ICM4RDAzCivotIQgPiB6aMOsOyAjOEQwNAor6LSFID4gemjDuWk7ICM4RDA1CivotIYgPiBiacSBbzsgIzhEMDYKK+i0hyA+IHnFq247ICM4RDA3CivotIggPiB6w6huZzsgIzhEMDgKK+i0iSA+IHTEg247ICM4RDA5CivotIogPiB6w6BuOyAjOEQwQQor6LSLID4gecOgbjsgIzhEMEIKK+i0jSA+IHNow6BuOyAjOEQwRAor6LSOID4gd8OgbjsgIzhEMEUKK+i0jyA+IHnDrW5nOyAjOEQwRgor6LSQID4gasOsbjsgIzhEMTAKK+i0kSA+IGfEg247ICM4RDExCivotJIgPiB4acOhbjsgIzhEMTIKK+i0kyA+IHrEgW5nOyAjOEQxMwor6LSUID4gYsOsOyAjOEQxNAor6LSVID4gZMO6OyAjOEQxNQor6LSWID4gc2jDujsgIzhEMTYKK+i0lyA+IHnDoG47ICM4RDE3CivotJkgPiB4dcOgbjsgIzhEMTkKK+i0miA+IGzDsm5nOyAjOEQxQQor6LSbID4gZ8OgbjsgIzhEMUIKK+i0nCA+IHrEgW5nOyAjOEQxQwor6LSdID4gYsOoaTsgIzhEMUQKK+i0niA+IHpoxJNuOyAjOEQxRQor6LSfID4gZsO5OyAjOEQxRgor6LSgID4geXXDoW47ICM4RDIwCivotKEgPiBnw7JuZzsgIzhEMjEKK+i0oiA+IGPDoWk7ICM4RDIyCivotKMgPiB6w6k7ICM4RDIzCivotKQgPiB4acOhbjsgIzhEMjQKK+i0pSA+IGLDoGk7ICM4RDI1CivotKYgPiB6aMOgbmc7ICM4RDI2CivotKcgPiBow7lvOyAjOEQyNwor6LSoID4gemjDrTsgIzhEMjgKK+i0qSA+IGbDoG47ICM4RDI5CivotKogPiB0xIFuOyAjOEQyQQor6LSrID4gcMOtbjsgIzhEMkIKK+i0rCA+IGJpxINuOyAjOEQyQwor6LStID4gZ8OydTsgIzhEMkQKK+i0riA+IHpoxa07ICM4RDJFCivotK8gPiBndcOgbjsgIzhEMkYKK+i0sCA+IMOocjsgIzhEMzAKK+i0sSA+IGppw6BuOyAjOEQzMQor6LSyID4gYsOsOyAjOEQzMgor6LSzID4gc2jDrDsgIzhEMzMKK+i0tCA+IHRpxJM7ICM4RDM0CivotLUgPiBnw7lpOyAjOEQzNQor6LS2ID4ga3XDoG5nOyAjOEQzNgor6LS3ID4gZMOgaTsgIzhEMzcKK+i0uCA+IG3DoG87ICM4RDM4CivotLkgPiBmw6hpOyAjOEQzOQor6LS6ID4gaMOoOyAjOEQzQQor6LS7ID4gecOtOyAjOEQzQgor6LS8ID4gesOpaTsgIzhEM0MKK+i0vSA+IHpow6w7ICM4RDNECivotL4gPiBqacSDOyAjOEQzRQor6LS/ID4gaMO5aTsgIzhEM0YKK+i1gCA+IHrEqzsgIzhENDAKK+i1gSA+IHLDqG47ICM4RDQxCivotYIgPiBsw7k7ICM4RDQyCivotYMgPiB6xIFuZzsgIzhENDMKK+i1hCA+IHrEqzsgIzhENDQKK+i1hSA+IGfEgWk7ICM4RDQ1CivotYYgPiBqw6xuOyAjOEQ0Ngor6LWHID4gccOtdTsgIzhENDcKK+i1iCA+IHpow6huOyAjOEQ0OAor6LWJID4gbMOgaTsgIzhENDkKK+i1iiA+IHNoxJM7ICM4RDRBCivotYsgPiBmw7k7ICM4RDRCCivotYwgPiBkxa07ICM4RDRDCivotY0gPiBqxKs7ICM4RDRECivotY4gPiBzaMO6OyAjOEQ0RQor6LWPID4gc2jEg25nOyAjOEQ0Rgor6LWQID4gc8OsOyAjOEQ1MAor6LWRID4gYsOsOyAjOEQ1MQor6LWSID4gemjFjXU7ICM4RDUyCivotZMgPiBnxJNuZzsgIzhENTMKK+i1lCA+IHDDqWk7ICM4RDU0CivotZUgPiB0w6BuOyAjOEQ1NQor6LWWID4gbMOgaTsgIzhENTYKK+i1lyA+IGbDqG5nOyAjOEQ1Nwor6LWYID4gemjDuWk7ICM4RDU4CivotZkgPiBmw7k7ICM4RDU5CivotZogPiB6aHXDoG47ICM4RDVBCivotZsgPiBzw6BpOyAjOEQ1Qgor6LWcID4gesOpOyAjOEQ1Qwor6LWdID4gecOgbjsgIzhENUQKK+i1niA+IHrDoG47ICM4RDVFCivotZ8gPiB5xatuOyAjOEQ1Rgor6LWgID4gesOobmc7ICM4RDYwCivotaEgPiBzaMOgbjsgIzhENjEKK+i1oiA+IHnDrW5nOyAjOEQ2Mgor6LWjID4gZ8OgbjsgIzhENjMKK+i1pCA+IGNow6w7ICM4RDY0CivotaUgPiB4w6w7ICM4RDY1CivotaYgPiBzaMOoOyAjOEQ2Ngor6LWnID4gbsSDbjsgIzhENjcKK+i1qCA+IHjDrW9uZzsgIzhENjgKK+i1qSA+IHjDrDsgIzhENjkKK+i1qiA+IGNoxJNuZzsgIzhENkEKK+i1qyA+IGjDqDsgIzhENkIKK+i1rCA+IGNoxJNuZzsgIzhENkMKK+i1rSA+IHpoxJU7ICM4RDZECivota4gPiB4acOhOyAjOEQ2RQor6LWvID4gdMOhbmc7ICM4RDZGCivotbAgPiB6xY91OyAjOEQ3MAor6LWxID4gesWPdTsgIzhENzEKK+i1siA+IGzDrDsgIzhENzIKK+i1syA+IGrErXU7ICM4RDczCivotbQgPiBmw7k7ICM4RDc0CivotbUgPiB6aMOgbzsgIzhENzUKK+i1tiA+IGfEg247ICM4RDc2CivotbcgPiBxxK07ICM4RDc3CivotbggPiBzaMOgbjsgIzhENzgKK+i1uSA+IHHDrW9uZzsgIzhENzkKK+i1uiA+IHHDrW47ICM4RDdBCivotbsgPiB4acSDbjsgIzhEN0IKK+i1vCA+IGPEqzsgIzhEN0MKK+i1vSA+IGp1w6k7ICM4RDdECivotb4gPiBxxK1uOyAjOEQ3RQor6LW/ID4gY2jDrTsgIzhEN0YKK+i2gCA+IGPEqzsgIzhEODAKK+i2gSA+IGNow6huOyAjOEQ4MQor6LaCID4gY2jDqG47ICM4RDgyCivotoMgPiBkacOpOyAjOEQ4Mwor6LaEID4gasWrOyAjOEQ4NAor6LaFID4gY2jEgW87ICM4RDg1CivotoYgPiBkxKs7ICM4RDg2CivotocgPiBzw6g7ICM4RDg3CivotoggPiB6aMSBbjsgIzhEODgKK+i2iSA+IHpow7o7ICM4RDg5CivotoogPiB5dcOoOyAjOEQ4QQor6LaLID4gccWrOyAjOEQ4Qgor6LaMID4gamnDqTsgIzhEOEMKK+i2jSA+IGNow607ICM4RDhECivoto4gPiBjaMO6OyAjOEQ4RQor6LaPID4gZ3XEgTsgIzhEOEYKK+i2kCA+IHh1w6g7ICM4RDkwCivotpEgPiBjxKs7ICM4RDkxCivotpIgPiB0acOhbzsgIzhEOTIKK+i2kyA+IGTFrW87ICM4RDkzCivotpQgPiBsacOoOyAjOEQ5NAor6LaVID4gZ8SDbjsgIzhEOTUKK+i2liA+IHPFq287ICM4RDk2CivotpcgPiBjw7k7ICM4RDk3CivotpggPiB4w607ICM4RDk4CivotpkgPiB6aMOgbzsgIzhEOTkKK+i2miA+IHPDuTsgIzhEOUEKK+i2myA+IHnErW47ICM4RDlCCivotpwgPiBqw7o7ICM4RDlDCivotp0gPiBqacOgbjsgIzhEOUQKK+i2niA+IHF1w6g7ICM4RDlFCivotp8gPiB0w6BuZzsgIzhEOUYKK+i2oCA+IGNow7lvOyAjOERBMAor6LahID4gY8WtaTsgIzhEQTEKK+i2oiA+IGzDuTsgIzhEQTIKK+i2oyA+IHHDuTsgIzhEQTMKK+i2pCA+IGTDoG5nOyAjOERBNAor6LalID4gccSrdTsgIzhEQTUKK+i2piA+IHrEqzsgIzhEQTYKK+i2pyA+IHTDrTsgIzhEQTcKK+i2qCA+IHHFqzsgIzhEQTgKK+i2qSA+IGNow6w7ICM4REE5CivotqogPiBodcOhbmc7ICM4REFBCivotqsgPiBxacOhbzsgIzhEQUIKK+i2rCA+IHFpw6FvOyAjOERBQwor6LatID4gecOgbzsgIzhEQUQKK+i2riA+IHrDoG87ICM4REFFCivotq8gPiB0w6w7ICM4REFGCivotrEgPiB6xINuOyAjOERCMQor6LayID4gesSDbjsgIzhEQjIKK+i2syA+IHrDujsgIzhEQjMKK+i2tCA+IHDEgTsgIzhEQjQKK+i2tSA+IGLDoG87ICM4REI1CivotrYgPiBrw7k7ICM4REI2CivotrcgPiBrxJM7ICM4REI3CivotrggPiBkxa1uOyAjOERCOAor6La5ID4ganXDqTsgIzhEQjkKK+i2uiA+IGbFqzsgIzhEQkEKK+i2uyA+IGNoxJVuOyAjOERCQgor6La8ID4gamnEg247ICM4REJDCivotr0gPiBmw6BuZzsgIzhEQkQKK+i2viA+IHpoxK07ICM4REJFCivotr8gPiBzw6A7ICM4REJGCivot4AgPiB5dcOoOyAjOERDMAor6LeBID4gcMOhOyAjOERDMQor6LeCID4gccOtOyAjOERDMgor6LeDID4geXXDqDsgIzhEQzMKK+i3hCA+IHFpxIFuZzsgIzhEQzQKK+i3hSA+IHTDuW87ICM4REM1Civot4YgPiB0w6FpOyAjOERDNgor6LeHID4gecOsOyAjOERDNwor6LeIID4gbmnEg247ICM4REM4Civot4kgPiBsw61uZzsgIzhEQzkKK+i3iiA+IG3DqGk7ICM4RENBCivot4sgPiBiw6E7ICM4RENCCivot4wgPiBkacSTOyAjOERDQwor6LeNID4ga8WrOyAjOERDRAor6LeOID4gdMO6bzsgIzhEQ0UKK+i3jyA+IGppxIE7ICM4RENGCivot5AgPiBjxK07ICM4REQwCivot5EgPiBwxINvOyAjOEREMQor6LeSID4gcWnEgzsgIzhERDIKK+i3kyA+IHpow7k7ICM4REQzCivot5QgPiBqxas7ICM4REQ0Civot5UgPiBkacOpOyAjOERENQor6LeWID4gemjEqzsgIzhERDYKK+i3lyA+IGbFqzsgIzhERDcKK+i3mCA+IHDDoW47ICM4REQ4Civot5kgPiBqxa07ICM4REQ5Civot5ogPiBzaMSBbjsgIzhEREEKK+i3myA+IGLFjzsgIzhEREIKK+i3nCA+IG7DrTsgIzhEREMKK+i3nSA+IGrDuTsgIzhEREQKK+i3niA+IGzDrDsgIzhEREUKK+i3nyA+IGfEk247ICM4RERGCivot6AgPiB5w607ICM4REUwCivot6EgPiBqxKs7ICM4REUxCivot6IgPiBkw6BpOyAjOERFMgor6LejID4geGnEg247ICM4REUzCivot6QgPiBqacSBbzsgIzhERTQKK+i3pSA+IGTDuW87ICM4REU1Civot6YgPiB6aMWrOyAjOERFNgor6LenID4gemh1xIFuOyAjOERFNwor6LeoID4ga3XDoDsgIzhERTgKK+i3qSA+IHpodcSDaTsgIzhERTkKK+i3qiA+IGfDuWk7ICM4REVBCivot6sgPiBxw61vbmc7ICM4REVCCivot6wgPiBrxa1pOyAjOERFQwor6LetID4geGnDoW5nOyAjOERFRAor6LeuID4gY2jDrDsgIzhERUUKK+i3ryA+IGzDuTsgIzhERUYKK+i3sCA+IGLDqG5nOyAjOERGMAor6LexID4gemjDrDsgIzhERjEKK+i3siA+IGppw6E7ICM4REYyCivot7MgPiB0acOgbzsgIzhERjMKK+i3tCA+IGPEg2k7ICM4REY0Civot7UgPiBqacOgbjsgIzhERjUKK+i3tiA+IHTDoDsgIzhERjYKK+i3tyA+IHFpxIFvOyAjOERGNwor6Le4ID4gYsOsOyAjOERGOAor6Le5ID4geGnEgW47ICM4REY5Civot7ogPiBkw7lvOyAjOERGQQor6Le7ID4gasSrOyAjOERGQgor6Le8ID4gasO6OyAjOERGQwor6Le9ID4gasOsOyAjOERGRAor6Le+ID4gc2jDujsgIzhERkUKK+i3vyA+IHTDujsgIzhERkYKK+i4gCA+IGNow7k7ICM4RTAwCivouIEgPiBqw6xuZzsgIzhFMDEKK+i4giA+IG5pw6g7ICM4RTAyCivouIMgPiB4acSBbzsgIzhFMDMKK+i4hCA+IGLDszsgIzhFMDQKK+i4hSA+IGNow6w7ICM4RTA1CivouIYgPiBxxatuOyAjOEUwNgor6LiHID4gbcWPdTsgIzhFMDcKK+i4iCA+IHNoxas7ICM4RTA4CivouIkgPiBsw6FuZzsgIzhFMDkKK+i4iiA+IHnFj25nOyAjOEUwQQor6LiLID4gamnEg287ICM4RTBCCivouIwgPiBjaMOzdTsgIzhFMEMKK+i4jSA+IHFpxIFvOyAjOEUwRAor6LiPID4gdMOgOyAjOEUwRgor6LiQID4gamnDoG47ICM4RTEwCivouJEgPiBxw607ICM4RTExCivouJIgPiB3xY07ICM4RTEyCivouJMgPiB3xJVpOyAjOEUxMwor6LiUID4gemjDum87ICM4RTE0CivouJUgPiBqacOpOyAjOEUxNQor6LiWID4gasOtOyAjOEUxNgor6LiXID4gbmnEkzsgIzhFMTcKK+i4mCA+IGrDujsgIzhFMTgKK+i4mSA+IGrFqzsgIzhFMTkKK+i4miA+IGzDum47ICM4RTFBCivouJsgPiBsw7k7ICM4RTFCCivouJwgPiBsw6huZzsgIzhFMUMKK+i4nSA+IGh1w6FpOyAjOEUxRAor6LieID4gasO5OyAjOEUxRQor6LifID4gY2jDrTsgIzhFMUYKK+i4oCA+IHfEg247ICM4RTIwCivouKEgPiBxdcOhbjsgIzhFMjEKK+i4oiA+IHTEqzsgIzhFMjIKK+i4oyA+IGLDszsgIzhFMjMKK+i4pCA+IHrDujsgIzhFMjQKK+i4pSA+IHFpw6g7ICM4RTI1CivouKYgPiBqxK07ICM4RTI2CivouKcgPiBjw7k7ICM4RTI3CivouKggPiB6xY1uZzsgIzhFMjgKK+i4qSA+IGPEg2k7ICM4RTI5CivouKogPiB6xY1uZzsgIzhFMkEKK+i4qyA+IHDDqG5nOyAjOEUyQgor6LisID4gemjDrDsgIzhFMkMKK+i4rSA+IHpoxJNuZzsgIzhFMkQKK+i4riA+IGRpxINuOyAjOEUyRQor6LivID4gemjDrTsgIzhFMkYKK+i4sCA+IHnDujsgIzhFMzAKK+i4sSA+IGTDuW87ICM4RTMxCivouLIgPiBkw7luOyAjOEUzMgor6LizID4gY2jFrW47ICM4RTMzCivouLQgPiB5xY9uZzsgIzhFMzQKK+i4tSA+IHpoxY9uZzsgIzhFMzUKK+i4tiA+IGTDrDsgIzhFMzYKK+i4tyA+IHpoxJU7ICM4RTM3CivouLggPiBjaMSVbjsgIzhFMzgKK+i4uSA+IGNodcOgaTsgIzhFMzkKK+i4uiA+IGppw6BuOyAjOEUzQQor6Li7ID4gZ3XEgTsgIzhFM0IKK+i4vCA+IHTDoW5nOyAjOEUzQwor6Li9ID4gasWtOyAjOEUzRAor6Li+ID4gZsO6OyAjOEUzRQor6Li/ID4gesO6OyAjOEUzRgor6LmAID4gZGnDqTsgIzhFNDAKK+i5gSA+IHBpw6FuOyAjOEU0MQor6LmCID4gcsOzdTsgIzhFNDIKK+i5gyA+IG7DuW87ICM4RTQzCivouYQgPiB0w607ICM4RTQ0CivouYUgPiBjaMSDOyAjOEU0NQor6LmGID4gdMWtaTsgIzhFNDYKK+i5hyA+IGppxINuOyAjOEU0Nwor6LmIID4gZMOgbzsgIzhFNDgKK+i5iSA+IGPFq287ICM4RTQ5CivouYogPiB4xKs7ICM4RTRBCivouYsgPiB0w6A7ICM4RTRCCivouYwgPiBxacSBbmc7ICM4RTRDCivouY0gPiB6aMSDbjsgIzhFNEQKK+i5jiA+IGRpxIFuOyAjOEU0RQor6LmPID4gdMOtOyAjOEU0Rgor6LmQID4gasOtOyAjOEU1MAor6LmRID4gbmnDqDsgIzhFNTEKK+i5kiA+IG3DoW47ICM4RTUyCivouZMgPiBsxKt1OyAjOEU1Mwor6LmUID4gemjDoG47ICM4RTU0CivouZUgPiBiw6w7ICM4RTU1CivouZYgPiBjaMWNbmc7ICM4RTU2CivouZcgPiBsw7k7ICM4RTU3CivouZggPiBsacOhbzsgIzhFNTgKK+i5mSA+IGPDuTsgIzhFNTkKK+i5miA+IHTEgW5nOyAjOEU1QQor6LmbID4gZMOgaTsgIzhFNUIKK+i5nCA+IHPFq287ICM4RTVDCivouZ0gPiB4xK07ICM4RTVECivouZ4gPiBrxa1pOyAjOEU1RQor6LmfID4gasSrOyAjOEU1Rgor6LmgID4gemjDrTsgIzhFNjAKK+i5oSA+IHFpxIFuZzsgIzhFNjEKK+i5oiA+IGTDrTsgIzhFNjIKK+i5oyA+IG3DoW47ICM4RTYzCivouaQgPiB6xY1uZzsgIzhFNjQKK+i5pSA+IGxpw6FuOyAjOEU2NQor6LmmID4gYsOobmc7ICM4RTY2CivouacgPiB6xIFvOyAjOEU2Nwor6LmoID4gbmnEg247ICM4RTY4CivouakgPiBiacOpOyAjOEU2OQor6LmqID4gdMO6aTsgIzhFNkEKK+i5qyA+IGrDujsgIzhFNkIKK+i5rCA+IGTDqG5nOyAjOEU2Qwor6LmtID4gY8Oobmc7ICM4RTZECivoua4gPiB4acSBbjsgIzhFNkUKK+i5ryA+IGbDoW47ICM4RTZGCivoubAgPiBjaMO6OyAjOEU3MAor6LmxID4gemjFjW5nOyAjOEU3MQor6LmyID4gZMWrbjsgIzhFNzIKK+i5syA+IGLFjTsgIzhFNzMKK+i5tCA+IGPDuTsgIzhFNzQKK+i5tSA+IHrDujsgIzhFNzUKK+i5tiA+IGp1w6k7ICM4RTc2CivoubcgPiBqdcOpOyAjOEU3Nwor6Lm4ID4gbMOsbjsgIzhFNzgKK+i5uSA+IHTDoDsgIzhFNzkKK+i5uiA+IHFpxIFvOyAjOEU3QQor6Lm7ID4gcWnEgW87ICM4RTdCCivoubwgPiBww7o7ICM4RTdDCivoub0gPiBsacSBbzsgIzhFN0QKK+i5viA+IGTFq247ICM4RTdFCivoub8gPiBjdcSBbjsgIzhFN0YKK+i6gCA+IGt1w6BuZzsgIzhFODAKK+i6gSA+IHrDoG87ICM4RTgxCivouoIgPiB0w6A7ICM4RTgyCivouoMgPiBiw6w7ICM4RTgzCivouoQgPiBiw6w7ICM4RTg0CivouoUgPiB6aMO6OyAjOEU4NQor6LqGID4gasO5OyAjOEU4Ngor6LqHID4gY2jDujsgIzhFODcKK+i6iCA+IHFpw6BvOyAjOEU4OAor6LqJID4gZMWtbjsgIzhFODkKK+i6iiA+IGNow7N1OyAjOEU4QQor6LqLID4gasSrOyAjOEU4Qgor6LqMID4gd8WtOyAjOEU4Qwor6LqNID4geXXDqDsgIzhFOEQKK+i6jiA+IG5pxINuOyAjOEU4RQor6LqPID4gbMOsbjsgIzhFOEYKK+i6kCA+IGxpw6g7ICM4RTkwCivoupEgPiB6aMOtOyAjOEU5MQor6LqSID4gbMOsOyAjOEU5Mgor6LqTID4gemjDrDsgIzhFOTMKK+i6lCA+IGNow6FuOyAjOEU5NAor6LqVID4gY2jDujsgIzhFOTUKK+i6liA+IGR1w6BuOyAjOEU5Ngor6LqXID4gd8OoaTsgIzhFOTcKK+i6mCA+IGzDs25nOyAjOEU5OAor6LqZID4gbMOsbjsgIzhFOTkKK+i6miA+IHhpxIFuOyAjOEU5QQor6LqbID4gd8OoaTsgIzhFOUIKK+i6nCA+IHp1xIFuOyAjOEU5Qwor6LqdID4gbMOhbjsgIzhFOUQKK+i6niA+IHhpw6g7ICM4RTlFCivoup8gPiByw6FuZzsgIzhFOUYKK+i6oCA+IHhpxJU7ICM4RUEwCivouqEgPiBuacOoOyAjOEVBMQor6LqiID4gdMOgOyAjOEVBMgor6LqjID4gccO6OyAjOEVBMwor6LqkID4gamnDqDsgIzhFQTQKK+i6pSA+IGN1xIFuOyAjOEVBNQor6LqmID4genXEgW47ICM4RUE2CivouqcgPiB4xK07ICM4RUE3CivouqggPiBrw7ppOyAjOEVBOAor6LqpID4ganXDqTsgIzhFQTkKK+i6qiA+IGzDrG47ICM4RUFBCivouqsgPiBzaMSTbjsgIzhFQUIKK+i6rCA+IGfFjW5nOyAjOEVBQwor6LqtID4gZMSBbjsgIzhFQUQKK+i6ryA+IHHFqzsgIzhFQUYKK+i6sCA+IHTErTsgIzhFQjAKK+i6sSA+IGTFrW87ICM4RUIxCivourIgPiBkxa1vOyAjOEVCMgor6LqzID4gZ8WNbmc7ICM4RUIzCivourQgPiBsw6FuZzsgIzhFQjQKK+i6tiA+IGzFrW87ICM4RUI2CivourcgPiDEg2k7ICM4RUI3CivourggPiBqxKs7ICM4RUI4CivourkgPiBqw7o7ICM4RUI5CivourogPiB0xINuZzsgIzhFQkEKK+i6vSA+IHnEg247ICM4RUJECivour8gPiBrxIFuZzsgIzhFQkYKK+i7gCA+IHHFqzsgIzhFQzAKK+i7gSA+IGzDs3U7ICM4RUMxCivou4IgPiBsw6BvOyAjOEVDMgor6LuDID4gdMWtbzsgIzhFQzMKK+i7hCA+IHpow607ICM4RUM0Civou4YgPiB0xK07ICM4RUM2Civou4cgPiBkw6BvOyAjOEVDNwor6LuJID4gecO5OyAjOEVDOQor6LuKID4gY2jEkzsgIzhFQ0EKK+i7iyA+IHnDoDsgIzhFQ0IKK+i7jCA+IGfFrWk7ICM4RUNDCivou40gPiBqxatuOyAjOEVDRAor6LuOID4gd8OoaTsgIzhFQ0UKK+i7jyA+IHl1w6g7ICM4RUNGCivou5AgPiB4w6xuOyAjOEVEMAor6LuRID4gZMOsOyAjOEVEMQor6LuSID4geHXEgW47ICM4RUQyCivou5MgPiBmw6BuOyAjOEVEMwor6LuUID4gcsOobjsgIzhFRDQKK+i7lSA+IHNoxIFuOyAjOEVENQor6LuWID4gcWnDoW5nOyAjOEVENgor6LuXID4gc2jFqzsgIzhFRDcKK+i7mCA+IHTDum47ICM4RUQ4Civou5kgPiBjaMOpbjsgIzhFRDkKK+i7miA+IGTDoGk7ICM4RURBCivou5sgPiDDqDsgIzhFREIKK+i7nCA+IG7DoDsgIzhFREMKK+i7nSA+IHHDrTsgIzhFREQKK+i7niA+IG3DoW87ICM4RURFCivou58gPiBydcSDbjsgIzhFREYKK+i7oCA+IHLDqG47ICM4RUUwCivou6EgPiBmxINuOyAjOEVFMQor6LuiID4gemh1xINuOyAjOEVFMgor6LujID4gaMWNbmc7ICM4RUUzCivou6QgPiBoxas7ICM4RUU0Civou6UgPiBxw7o7ICM4RUU1Civou6YgPiBodcOgbmc7ICM4RUU2Civou6cgPiBkxK07ICM4RUU3Civou6ggPiBsw61uZzsgIzhFRTgKK+i7qSA+IGTDoGk7ICM4RUU5Civou6ogPiDEgW87ICM4RUVBCivou6sgPiB6aMSVbjsgIzhFRUIKK+i7rCA+IGbDoG47ICM4RUVDCivou60gPiBrdcSBbmc7ICM4RUVECivou64gPiDEg25nOyAjOEVFRQor6LuvID4gcMSTbmc7ICM4RUVGCivou7AgPiBiw6hpOyAjOEVGMAor6LuxID4gZ8WrOyAjOEVGMQor6LuyID4ga8WrOyAjOEVGMgor6LuzID4gcMOhbzsgIzhFRjMKK+i7tCA+IHpow7k7ICM4RUY0Civou7UgPiByxY9uZzsgIzhFRjUKK+i7tiA+IMOoOyAjOEVGNgor6Lu3ID4gYsOhOyAjOEVGNwor6Lu4ID4gemjDs3U7ICM4RUY4Civou7kgPiB6aMStOyAjOEVGOQor6Lu6ID4gecOhbzsgIzhFRkEKK+i7uyA+IGvEkzsgIzhFRkIKK+i7vCA+IHnDrDsgIzhFRkMKK+i7vSA+IHHEq25nOyAjOEVGRAor6Lu+ID4gc2jDrDsgIzhFRkUKK+i7vyA+IHDDrW5nOyAjOEVGRgor6LyAID4gw6lyOyAjOEYwMAor6LyBID4gccOtb25nOyAjOEYwMQor6LyCID4gasO6OyAjOEYwMgor6LyDID4gamnDoG87ICM4RjAzCivovIQgPiBndcSBbmc7ICM4RjA0CivovIUgPiBsw7k7ICM4RjA1CivovIYgPiBrxINpOyAjOEYwNgor6LyHID4gcXXDoW47ICM4RjA3CivovIggPiB6aMWNdTsgIzhGMDgKK+i8iSA+IHrDoGk7ICM4RjA5CivovIogPiB6aMOsOyAjOEYwQQor6LyLID4gc2jEkzsgIzhGMEIKK+i8jCA+IGxpw6BuZzsgIzhGMEMKK+i8jSA+IHnDuTsgIzhGMEQKK+i8jiA+IHNoxIFvOyAjOEYwRQor6LyPID4gecOzdTsgIzhGMEYKK+i8kCA+IGh1xINuOyAjOEYxMAor6LyRID4gecWtbjsgIzhGMTEKK+i8kiA+IHpow6k7ICM4RjEyCivovJMgPiB3xINuOyAjOEYxMwor6LyUID4gZsWtOyAjOEYxNAor6LyVID4gccSrbmc7ICM4RjE1CivovJYgPiB6aMWNdTsgIzhGMTYKK+i8lyA+IG7DrTsgIzhGMTcKK+i8mCA+IGzDrW5nOyAjOEYxOAor6LyZID4gemjDqTsgIzhGMTkKK+i8miA+IHpow6BuOyAjOEYxQQor6LybID4gbGnDoG5nOyAjOEYxQgor6LycID4gesSrOyAjOEYxQwor6LydID4gaMWraTsgIzhGMUQKK+i8niA+IHfEg25nOyAjOEYxRQor6LyfID4gY2jDuW87ICM4RjFGCivovKAgPiBnxa1vOyAjOEYyMAor6LyhID4ga8SDbjsgIzhGMjEKK+i8oiA+IHnErTsgIzhGMjIKK+i8oyA+IHDDqW5nOyAjOEYyMwor6LykID4gcWnDoG47ICM4RjI0CivovKUgPiBnxa1uOyAjOEYyNQor6LymID4gbmnEg247ICM4RjI2CivovKcgPiBwacOhbjsgIzhGMjcKK+i8qCA+IGd1xINuOyAjOEYyOAor6LypID4gYsOoaTsgIzhGMjkKK+i8qiA+IGzDum47ICM4RjJBCivovKsgPiBww6FpOyAjOEYyQgor6LysID4gbGnDoW5nOyAjOEYyQwor6LytID4gcnXEg247ICM4RjJECivovK4gPiByw7N1OyAjOEYyRQor6LyvID4gasOtOyAjOEYyRgor6LywID4gecOhbmc7ICM4RjMwCivovLEgPiB4acOhbjsgIzhGMzEKK+i8siA+IGNodcOhbjsgIzhGMzIKK+i8syA+IGPDsnU7ICM4RjMzCivovLQgPiBxxatuOyAjOEYzNAor6Ly1ID4gZ8OpOyAjOEYzNQor6Ly2ID4gecOzdTsgIzhGMzYKK+i8tyA+IGjFjW5nOyAjOEYzNwor6Ly4ID4gc2jFqzsgIzhGMzgKK+i8uSA+IGbDuTsgIzhGMzkKK+i8uiA+IHrEqzsgIzhGM0EKK+i8uyA+IGbDujsgIzhGM0IKK+i8vCA+IHfEk247ICM4RjNDCivovL0gPiBiw6huOyAjOEYzRAor6Ly+ID4gemjEg247ICM4RjNFCivovL8gPiB5w7o7ICM4RjNGCivovYAgPiB3xJNuOyAjOEY0MAor6L2BID4gdMSBbzsgIzhGNDEKK+i9giA+IGfFrTsgIzhGNDIKK+i9gyA+IHpoxJNuOyAjOEY0Mwor6L2EID4geGnDoTsgIzhGNDQKK+i9hSA+IHl1w6FuOyAjOEY0NQor6L2GID4gbMO5OyAjOEY0Ngor6L2HID4gasSrdTsgIzhGNDcKK+i9iCA+IGNow6FvOyAjOEY0OAor6L2JID4gemh1xINuOyAjOEY0OQor6L2KID4gd8OoaTsgIzhGNEEKK+i9iyA+IGjDum47ICM4RjRCCivovY0gPiBjaMOoOyAjOEY0RAor6L2OID4gamnDoG87ICM4RjRFCivovY8gPiB6aMOgbjsgIzhGNEYKK+i9kCA+IHDDujsgIzhGNTAKK+i9kSA+IGzEg287ICM4RjUxCivovZIgPiBmw6luOyAjOEY1Mgor6L2TID4gZsSBbjsgIzhGNTMKK+i9lCA+IGzDrW47ICM4RjU0CivovZUgPiBnw6k7ICM4RjU1CivovZYgPiBzw6g7ICM4RjU2CivovZcgPiBrxINuOyAjOEY1Nwor6L2YID4gaHXDoG47ICM4RjU4CivovZkgPiB5xK07ICM4RjU5CivovZogPiBqw607ICM4RjVBCivovZsgPiBkw7lpOyAjOEY1Qgor6L2cID4gw6lyOyAjOEY1Qwor6L2dID4gecO6OyAjOEY1RAor6L2eID4geGnDoG47ICM4RjVFCivovZ8gPiBoxY1uZzsgIzhGNUYKK+i9oCA+IGzElWk7ICM4RjYwCivovaEgPiBww6hpOyAjOEY2MQor6L2iID4gbMOsOyAjOEY2Mgor6L2jID4gbMOsOyAjOEY2Mwor6L2kID4gbMO6OyAjOEY2NAor6L2lID4gbMOsbjsgIzhGNjUKK+i9piA+IGNoxJM7ICM4RjY2CivovacgPiB5w6A7ICM4RjY3CivovaggPiBnxa1pOyAjOEY2OAor6L2pID4geHXEgW47ICM4RjY5CivovaogPiBkw6w7ICM4RjZBCivovasgPiByw6huOyAjOEY2Qgor6L2sID4gemh1xINuOyAjOEY2Qwor6L2tID4gw6g7ICM4RjZECivova4gPiBsw7puOyAjOEY2RQor6L2vID4gcnXEg247ICM4RjZGCivovbAgPiBoxY1uZzsgIzhGNzAKK+i9sSA+IGvFqzsgIzhGNzEKK+i9siA+IGvEkzsgIzhGNzIKK+i9syA+IGzDujsgIzhGNzMKK+i9tCA+IHpow7N1OyAjOEY3NAor6L21ID4gemjErTsgIzhGNzUKK+i9tiA+IHnDrDsgIzhGNzYKK+i9tyA+IGjFqzsgIzhGNzcKK+i9uCA+IHpoxJVuOyAjOEY3OAor6L25ID4gbMOsOyAjOEY3OQor6L26ID4gecOhbzsgIzhGN0EKK+i9uyA+IHHEq25nOyAjOEY3Qgor6L28ID4gc2jDrDsgIzhGN0MKK+i9vSA+IHrDoGk7ICM4RjdECivovb4gPiB6aMOsOyAjOEY3RQor6L2/ID4gamnDoG87ICM4RjdGCivovoAgPiB6aMWNdTsgIzhGODAKK+i+gSA+IHF1w6FuOyAjOEY4MQor6L6CID4gbMO5OyAjOEY4Mgor6L6DID4gamnDoG87ICM4RjgzCivovoQgPiB6aMOpOyAjOEY4NAor6L6FID4gZsWtOyAjOEY4NQor6L6GID4gbGnDoG5nOyAjOEY4Ngor6L6HID4gbmnEg247ICM4Rjg3CivovoggPiBiw6hpOyAjOEY4OAor6L6JID4gaMWraTsgIzhGODkKK+i+iiA+IGfFrW47ICM4RjhBCivovosgPiB3xINuZzsgIzhGOEIKK+i+jCA+IGxpw6FuZzsgIzhGOEMKK+i+jSA+IGNow7lvOyAjOEY4RAor6L6OID4gesSrOyAjOEY4RQor6L6PID4gY8OydTsgIzhGOEYKK+i+kCA+IGbDujsgIzhGOTAKK+i+kSA+IGrDrTsgIzhGOTEKK+i+kiA+IHfEk247ICM4RjkyCivovpMgPiBzaMWrOyAjOEY5Mwor6L6UID4gcMOoaTsgIzhGOTQKK+i+lSA+IHl1w6FuOyAjOEY5NQor6L6WID4geGnDoTsgIzhGOTYKK+i+lyA+IHpoxINuOyAjOEY5Nwor6L6YID4gbMO5OyAjOEY5OAor6L6ZID4gY2jDqDsgIzhGOTkKK+i+miA+IGzDrW47ICM4RjlBCivovpsgPiB4xKtuOyAjOEY5Qgor6L6cID4gZ8WrOyAjOEY5Qwor6L6dID4gY8OtOyAjOEY5RAor6L6eID4gY8OtOyAjOEY5RQor6L6fID4gcMOsOyAjOEY5Rgor6L6gID4gesO5aTsgIzhGQTAKK+i+oSA+IGJpw6BuOyAjOEZBMQor6L6iID4gbMOgOyAjOEZBMgor6L6jID4gbMOgOyAjOEZBMwor6L6kID4gY8OtOyAjOEZBNAor6L6lID4geHXEkzsgIzhGQTUKK+i+piA+IGLDoG47ICM4RkE2CivovqcgPiBiacOgbjsgIzhGQTcKK+i+qCA+IGJpw6BuOyAjOEZBOAor6L6pID4gYmnDoG47ICM4RkE5CivovqsgPiBiacOgbjsgIzhGQUIKK+i+rCA+IGLEgW47ICM4RkFDCivovq0gPiBjw607ICM4RkFECivovq4gPiBiacOgbjsgIzhGQUUKK+i+ryA+IGJpw6BuOyAjOEZBRgor6L6wID4gY2jDqW47ICM4RkIwCivovrEgPiByw7k7ICM4RkIxCivovrIgPiBuw7NuZzsgIzhGQjIKK+i+syA+IG7Ds25nOyAjOEZCMwor6L60ID4gemjElW47ICM4RkI0CivovrUgPiBjaMO5bzsgIzhGQjUKK+i+tiA+IGNow7lvOyAjOEZCNgor6L64ID4gcsOpbmc7ICM4RkI4CivovrkgPiBiacSBbjsgIzhGQjkKK+i+uiA+IGJpxIFuOyAjOEZCQQor6L69ID4gbGnDoW87ICM4RkJECivovr4gPiBkw6E7ICM4RkJFCivovr8gPiBjaMSBbjsgIzhGQkYKK+i/gCA+IGfEgW47ICM4RkMwCivov4EgPiBxacSBbjsgIzhGQzEKK+i/giA+IHnFqzsgIzhGQzIKK+i/gyA+IHnFqzsgIzhGQzMKK+i/hCA+IHHDrDsgIzhGQzQKK+i/hSA+IHjDuW47ICM4RkM1Civov4YgPiB5xK07ICM4RkM2Civov4cgPiBnw7lvOyAjOEZDNwor6L+IID4gbcOgaTsgIzhGQzgKK+i/iSA+IHHDrTsgIzhGQzkKK+i/iiA+IHrEgTsgIzhGQ0EKK+i/iyA+IHfDoG5nOyAjOEZDQgor6L+MID4gamlhOyAjOEZDQwor6L+NID4gemjFq247ICM4RkNECivov44gPiB5w61uZzsgIzhGQ0UKK+i/jyA+IHTDrDsgIzhGQ0YKK+i/kCA+IHnDuW47ICM4RkQwCivov5EgPiBqw6xuOyAjOEZEMQor6L+SID4gaMOhbmc7ICM4RkQyCivov5MgPiB5w6A7ICM4RkQzCivov5QgPiBmxINuOyAjOEZENAor6L+VID4gd8O5OyAjOEZENQor6L+WID4gZMOhOyAjOEZENgor6L+XID4gw6k7ICM4RkQ3Civov5ggPiBodcOhbjsgIzhGRDgKK+i/mSA+IHpow6g7ICM4RkQ5Civov5sgPiBqw6xuOyAjOEZEQgor6L+cID4geXXEg247ICM4RkRDCivov50gPiB3w6lpOyAjOEZERAor6L+eID4gbGnDoW47ICM4RkRFCivov58gPiBjaMOtOyAjOEZERgor6L+gID4gY2jDqDsgIzhGRTAKK+i/oSA+IG7DrDsgIzhGRTEKK+i/oiA+IHRpw6FvOyAjOEZFMgor6L+jID4gemjDrDsgIzhGRTMKK+i/pCA+IHnErTsgIzhGRTQKK+i/pSA+IGrErW9uZzsgIzhGRTUKK+i/piA+IGppxIE7ICM4RkU2Civov6cgPiBjaMOpbjsgIzhGRTcKK+i/qCA+IGTDoGk7ICM4RkU4Civov6kgPiDElXI7ICM4RkU5Civov6ogPiBkw607ICM4RkVBCivov6sgPiBww7I7ICM4RkVCCivov6wgPiB3xINuZzsgIzhGRUMKK+i/rSA+IGRpw6k7ICM4RkVECivov64gPiB6w6k7ICM4RkVFCivov68gPiB0w6FvOyAjOEZFRgor6L+wID4gc2jDuTsgIzhGRjAKK+i/sSA+IHTDum87ICM4RkYxCivov7MgPiBqw6xuZzsgIzhGRjMKK+i/tCA+IGjDumk7ICM4RkY0Civov7UgPiB0w7NuZzsgIzhGRjUKK+i/tiA+IHnDsnU7ICM4RkY2Civov7cgPiBtw607ICM4RkY3Civov7ggPiBiw6huZzsgIzhGRjgKK+i/uSA+IGrEqzsgIzhGRjkKK+i/uiA+IG7Eg2k7ICM4RkZBCivov7sgPiB5w607ICM4RkZCCivov7wgPiBqacOpOyAjOEZGQwor6L+9ID4gemjFq2k7ICM4RkZECivov74gPiBsacOoOyAjOEZGRQor6L+/ID4geMO5bjsgIzhGRkYKK+mAgCA+IHTDuWk7ICM5MDAwCivpgIEgPiBzw7JuZzsgIzkwMDEKK+mAgiA+IGd1xIE7ICM5MDAyCivpgIMgPiB0w6FvOyAjOTAwMwor6YCEID4gcMOhbmc7ICM5MDA0CivpgIUgPiBow7J1OyAjOTAwNQor6YCGID4gbsOsOyAjOTAwNgor6YCHID4gZMO5bjsgIzkwMDcKK+mAiCA+IGrErW9uZzsgIzkwMDgKK+mAiSA+IHh1xINuOyAjOTAwOQor6YCKID4geMO5bjsgIzkwMEEKK+mAiyA+IGLFqzsgIzkwMEIKK+mAjCA+IHnDs3U7ICM5MDBDCivpgI0gPiB4acSBbzsgIzkwMEQKK+mAjiA+IHHDrXU7ICM5MDBFCivpgI8gPiB0w7J1OyAjOTAwRgor6YCQID4gemjDujsgIzkwMTAKK+mAkSA+IHHDrXU7ICM5MDExCivpgJIgPiBkw6w7ICM5MDEyCivpgJMgPiBkw6w7ICM5MDEzCivpgJQgPiB0w7o7ICM5MDE0CivpgJUgPiBqw6xuZzsgIzkwMTUKK+mAliA+IHTDrDsgIzkwMTYKK+mAlyA+IGTDsnU7ICM5MDE3CivpgJggPiB5xK07ICM5MDE4CivpgJkgPiB6aMOoOyAjOTAxOQor6YCaID4gdMWNbmc7ICM5MDFBCivpgJsgPiBndcOgbmc7ICM5MDFCCivpgJwgPiB3w7k7ICM5MDFDCivpgJ0gPiBzaMOsOyAjOTAxRAor6YCeID4gY2jElW5nOyAjOTAxRQor6YCfID4gc8O5OyAjOTAxRgor6YCgID4gesOgbzsgIzkwMjAKK+mAoSA+IHHFq247ICM5MDIxCivpgKIgPiBmw6luZzsgIzkwMjIKK+mAoyA+IGxpw6FuOyAjOTAyMwor6YCkID4gc8O5bzsgIzkwMjQKK+mApSA+IGjDumk7ICM5MDI1CivpgKYgPiBsxK07ICM5MDI2CivpgKggPiBsw6FpOyAjOTAyOAor6YCpID4gYsOobjsgIzkwMjkKK+mAqiA+IGPDuW87ICM5MDJBCivpgKsgPiBqdcOpOyAjOTAyQgor6YCsID4gYsOobmc7ICM5MDJDCivpgK0gPiBodcOgbjsgIzkwMkQKK+mAriA+IGTDoGk7ICM5MDJFCivpgK8gPiBsw7k7ICM5MDJGCivpgLAgPiB5w7N1OyAjOTAzMAor6YCxID4gemjFjXU7ICM5MDMxCivpgLIgPiBqw6xuOyAjOTAzMgor6YCzID4gecO5OyAjOTAzMwor6YC0ID4gY2jDuW87ICM5MDM0CivpgLUgPiBrw7ppOyAjOTAzNQor6YC2ID4gd8STaTsgIzkwMzYKK+mAtyA+IHTDrDsgIzkwMzcKK+mAuCA+IHnDrDsgIzkwMzgKK+mAuSA+IGTDoTsgIzkwMzkKK+mAuiA+IHl1xINuOyAjOTAzQQor6YC7ID4gbMO6bzsgIzkwM0IKK+mAvCA+IGLEqzsgIzkwM0MKK+mAvSA+IG7DuW87ICM5MDNECivpgL4gPiB5w7o7ICM5MDNFCivpgL8gPiBkw6BuZzsgIzkwM0YKK+mBgCA+IHPDumk7ICM5MDQwCivpgYEgPiBkw7luOyAjOTA0MQor6YGCID4gc8O5aTsgIzkwNDIKK+mBgyA+IHnEg247ICM5MDQzCivpgYQgPiBjaHXDoW47ICM5MDQ0CivpgYUgPiBjaMOtOyAjOTA0NQor6YGGID4gdMOtOyAjOTA0Ngor6YGHID4gecO5OyAjOTA0Nwor6YGIID4gc2jDrTsgIzkwNDgKK+mBiSA+IHpoxJNuOyAjOTA0OQor6YGKID4gecOzdTsgIzkwNEEKK+mBiyA+IHnDuW47ICM5MDRCCivpgYwgPiDDqDsgIzkwNEMKK+mBjSA+IGJpw6BuOyAjOTA0RAor6YGOID4gZ8O5bzsgIzkwNEUKK+mBjyA+IMOoOyAjOTA0Rgor6YGQID4geGnDoTsgIzkwNTAKK+mBkSA+IGh1w6FuZzsgIzkwNTEKK+mBkiA+IHHDrXU7ICM5MDUyCivpgZMgPiBkw6BvOyAjOTA1Mwor6YGUID4gZMOhOyAjOTA1NAor6YGVID4gd8OpaTsgIzkwNTUKK+mBlyA+IHnDrTsgIzkwNTcKK+mBmCA+IGfDsnU7ICM5MDU4CivpgZkgPiB5w6FvOyAjOTA1OQor6YGaID4gY2jDuTsgIzkwNUEKK+mBmyA+IGzDrXU7ICM5MDVCCivpgZwgPiB4w7luOyAjOTA1Qwor6YGdID4gdMOgOyAjOTA1RAor6YGeID4gZMOsOyAjOTA1RQor6YGfID4gY2jDrTsgIzkwNUYKK+mBoCA+IHl1xINuOyAjOTA2MAor6YGhID4gc8O5OyAjOTA2MQor6YGiID4gdMOgOyAjOTA2Mgor6YGjID4gcWnEg247ICM5MDYzCivpgaUgPiB5w6FvOyAjOTA2NQor6YGmID4gZ3XDoG47ICM5MDY2CivpgacgPiB6aMSBbmc7ICM5MDY3CivpgaggPiDDoW87ICM5MDY4CivpgakgPiBzaMOsOyAjOTA2OQor6YGqID4gY8OoOyAjOTA2QQor6YGrID4gY2jDrDsgIzkwNkIKK+mBrCA+IHPDuTsgIzkwNkMKK+mBrSA+IHrEgW87ICM5MDZECivpga4gPiB6aMSTOyAjOTA2RQor6YGvID4gZMO5bjsgIzkwNkYKK+mBsCA+IGTDrDsgIzkwNzAKK+mBsSA+IGzDs3U7ICM5MDcxCivpgbIgPiBjaMOtOyAjOTA3Mgor6YGzID4gY8WrbzsgIzkwNzMKK+mBtCA+IGzDrW47ICM5MDc0CivpgbUgPiB6xatuOyAjOTA3NQor6YG2ID4gcsOgbzsgIzkwNzYKK+mBtyA+IHFpxIFuOyAjOTA3Nwor6YG4ID4geHXEg247ICM5MDc4CivpgbkgPiB5w7k7ICM5MDc5CivpgbogPiB5w607ICM5MDdBCivpgbsgPiB3w7k7ICM5MDdCCivpgbwgPiBsacOhbzsgIzkwN0MKK+mBvSA+IGrDuTsgIzkwN0QKK+mBviA+IHNow6w7ICM5MDdFCivpgb8gPiBiw6w7ICM5MDdGCivpgoAgPiB5xIFvOyAjOTA4MAor6YKBID4gbcOgaTsgIzkwODEKK+mCgiA+IHhpw6g7ICM5MDgyCivpgoMgPiBzw7lpOyAjOTA4Mwor6YKEID4gaHXDoW47ICM5MDg0CivpgoUgPiB6aMSBbjsgIzkwODUKK+mChiA+IHTDqW5nOyAjOTA4Ngor6YKHID4gxJVyOyAjOTA4Nwor6YKIID4gbWnEg287ICM5MDg4CivpgokgPiBiacSBbjsgIzkwODkKK+mCiiA+IGJpxIFuOyAjOTA4QQor6YKLID4gbMOhOyAjOTA4Qgor6YKMID4gbMOtOyAjOTA4Qwor6YKNID4geXXDoW47ICM5MDhECivpgo4gPiB5w6FvOyAjOTA4RQor6YKPID4gbMO6bzsgIzkwOEYKK+mCkCA+IGzErTsgIzkwOTAKK+mCkSA+IHnDrDsgIzkwOTEKK+mCkiA+IHTDrW5nOyAjOTA5Mgor6YKTID4gZMOobmc7ICM5MDkzCivpgpQgPiBxxK07ICM5MDk0CivpgpUgPiB5xY1uZzsgIzkwOTUKK+mCliA+IHNoxIFuOyAjOTA5Ngor6YKXID4gaMOhbjsgIzkwOTcKK+mCmCA+IHnDujsgIzkwOTgKK+mCmSA+IG3DoW5nOyAjOTA5OQor6YKaID4gcsO6OyAjOTA5QQor6YKbID4gccOtb25nOyAjOTA5Qgor6YKdID4ga3XDoG5nOyAjOTA5RAor6YKeID4gZsWrOyAjOTA5RQor6YKfID4ga8Ogbmc7ICM5MDlGCivpgqAgPiBixKtuOyAjOTBBMAor6YKhID4gZsSBbmc7ICM5MEExCivpgqIgPiB4w61uZzsgIzkwQTIKK+mCoyA+IG7DoDsgIzkwQTMKK+mCpCA+IHhpbjsgIzkwQTQKK+mCpSA+IHNoxJVuOyAjOTBBNQor6YKmID4gYsSBbmc7ICM5MEE2CivpgqcgPiB5dcOhbjsgIzkwQTcKK+mCqCA+IGPFq247ICM5MEE4CivpgqkgPiBoxa1vOyAjOTBBOQor6YKqID4geGnDqTsgIzkwQUEKK+mCqyA+IGLEgW5nOyAjOTBBQgor6YKsID4gd8WrOyAjOTBBQwor6YKtID4gasO5OyAjOTBBRAor6YKuID4gecOzdTsgIzkwQUUKK+mCryA+IGjDoW47ICM5MEFGCivpgrAgPiB0w6FpOyAjOTBCMAor6YKxID4gccSrdTsgIzkwQjEKK+mCsiA+IGLDrDsgIzkwQjIKK+mCsyA+IHDDqWk7ICM5MEIzCivpgrQgPiBixK1uZzsgIzkwQjQKK+mCtSA+IHNow6BvOyAjOTBCNQor6YK2ID4gYsOoaTsgIzkwQjYKK+mCtyA+IHfEgzsgIzkwQjcKK+mCuCA+IGTErTsgIzkwQjgKK+mCuSA+IHrFjXU7ICM5MEI5CivpgrogPiB5w6g7ICM5MEJBCivpgrsgPiBsw61uOyAjOTBCQgor6YK8ID4ga3XEgW5nOyAjOTBCQwor6YK9ID4gZ8WraTsgIzkwQkQKK+mCviA+IHpoxas7ICM5MEJFCivpgr8gPiBzaMSrOyAjOTBCRgor6YOAID4ga8WrOyAjOTBDMAor6YOBID4gecO5OyAjOTBDMQor6YOCID4gZ8SBaTsgIzkwQzIKK+mDgyA+IGfDqTsgIzkwQzMKK+mDhCA+IHjDrDsgIzkwQzQKK+mDhSA+IHpow6w7ICM5MEM1Civpg4YgPiBqw607ICM5MEM2Civpg4cgPiB4w7puOyAjOTBDNwor6YOIID4gaMOydTsgIzkwQzgKK+mDiSA+IHjDrW5nOyAjOTBDOQor6YOKID4gamnEgW87ICM5MENBCivpg4sgPiB4w607ICM5MENCCivpg4wgPiBnxatpOyAjOTBDQwor6YONID4gbsO6bzsgIzkwQ0QKK+mDjiA+IGzDoW5nOyAjOTBDRQor6YOPID4gamnDoTsgIzkwQ0YKK+mDkCA+IGt1w6BpOyAjOTBEMAor6YORID4gemjDqG5nOyAjOTBEMQor6YOTID4gecO5bjsgIzkwRDMKK+mDlCA+IHnDoW47ICM5MEQ0Civpg5UgPiBjaMOpbmc7ICM5MEQ1Civpg5YgPiBkxY11OyAjOTBENgor6YOXID4gY2jEqzsgIzkwRDcKK+mDmCA+IGzHmjsgIzkwRDgKK+mDmSA+IGbFrTsgIzkwRDkKK+mDmiA+IHfDujsgIzkwREEKK+mDmyA+IGbDujsgIzkwREIKK+mDnCA+IGfDoG87ICM5MERDCivpg50gPiBoxINvOyAjOTBERAor6YOeID4gbMOhbmc7ICM5MERFCivpg58gPiBqacOhOyAjOTBERgor6YOgID4gZ8SVbmc7ICM5MEUwCivpg6EgPiBqw7luOyAjOTBFMQor6YOiID4gecStbmc7ICM5MEUyCivpg6MgPiBiw7M7ICM5MEUzCivpg6QgPiB4w6w7ICM5MEU0Civpg6UgPiBiw6hpOyAjOTBFNQor6YOmID4gbMOsOyAjOTBFNgor6YOnID4gecO6bjsgIzkwRTcKK+mDqCA+IGLDuTsgIzkwRTgKK+mDqSA+IHhpw6FvOyAjOTBFOQor6YOqID4gccSrOyAjOTBFQQor6YOrID4gcMOtOyAjOTBFQgor6YOsID4gccSrbmc7ICM5MEVDCivpg60gPiBnxatvOyAjOTBFRAor6YOuID4gemhvdTsgIzkwRUUKK+mDryA+IHTDoW47ICM5MEVGCivpg7AgPiB6xY11OyAjOTBGMAor6YOxID4gcMOtbmc7ICM5MEYxCivpg7IgPiBsw6FpOyAjOTBGMgor6YOzID4gbsOtOyAjOTBGMwor6YO0ID4gY2jEk247ICM5MEY0Civpg7UgPiB5w7N1OyAjOTBGNQor6YO2ID4gYsO5OyAjOTBGNgor6YO3ID4geGnEgW5nOyAjOTBGNwor6YO4ID4gZMSBbjsgIzkwRjgKK+mDuSA+IGrDujsgIzkwRjkKK+mDuiA+IHnFjW5nOyAjOTBGQQor6YO7ID4gcWnEgW87ICM5MEZCCivpg7wgPiB5xKs7ICM5MEZDCivpg70gPiBkxas7ICM5MEZECivpg74gPiB5xINuOyAjOTBGRQor6YO/ID4gbcOpaTsgIzkwRkYKK+mEgCA+IHLDuW87ICM5MTAwCivphIEgPiBiw6hpOyAjOTEwMQor6YSCID4gw6g7ICM5MTAyCivphIMgPiB5w7o7ICM5MTAzCivphIQgPiBqdcOgbjsgIzkxMDQKK+mEhSA+IHnFrTsgIzkxMDUKK+mEhiA+IHnDuW47ICM5MTA2CivphIcgPiBow7J1OyAjOTEwNwor6YSIID4ga8O6aTsgIzkxMDgKK+mEiSA+IHhpxIFuZzsgIzkxMDkKK+mEiiA+IHhpxIFuZzsgIzkxMEEKK+mEiyA+IHPFjXU7ICM5MTBCCivphIwgPiB0w6FuZzsgIzkxMEMKK+mEjSA+IG3DrW5nOyAjOTEwRAor6YSOID4geMOsOyAjOTEwRQor6YSPID4gcsO5OyAjOTEwRgor6YSQID4gY2jDuTsgIzkxMTAKK+mEkSA+IHrEqzsgIzkxMTEKK+mEkiA+IHrFjXU7ICM5MTEyCivphJMgPiBqw7o7ICM5MTEzCivphJQgPiB3xas7ICM5MTE0CivphJUgPiB4acSBbmc7ICM5MTE1CivphJYgPiB5w7puOyAjOTExNgor6YSXID4gaMOgbzsgIzkxMTcKK+mEmCA+IHnFjW5nOyAjOTExOAor6YSZID4gYsStOyAjOTExOQor6YSaID4gbcOyOyAjOTExQQor6YSbID4gY2jDoW87ICM5MTFCCivphJwgPiBmxas7ICM5MTFDCivphJ0gPiBsacSDbzsgIzkxMUQKK+mEniA+IHnDrW47ICM5MTFFCivphJ8gPiB6aHXEgW47ICM5MTFGCivphKAgPiBow7k7ICM5MTIwCivphKEgPiBxacSBbzsgIzkxMjEKK+mEoiA+IHnEgW47ICM5MTIyCivphKMgPiB6aMSBbmc7ICM5MTIzCivphKQgPiBmw6BuOyAjOTEyNAor6YSlID4gcWnEgW87ICM5MTI1CivphKYgPiB4xa07ICM5MTI2CivphKcgPiBkw6huZzsgIzkxMjcKK+mEqCA+IGLDrDsgIzkxMjgKK+mEqSA+IHjDrW47ICM5MTI5CivphKogPiBiw6w7ICM5MTJBCivphKsgPiBjw6luZzsgIzkxMkIKK+mErCA+IHfDqWk7ICM5MTJDCivphK0gPiB6aMOobmc7ICM5MTJECivphK4gPiBtw6BvOyAjOTEyRQor6YSvID4gc2jDoG47ICM5MTJGCivphLAgPiBsw61uOyAjOTEzMAor6YSxID4gcMOzOyAjOTEzMQor6YSyID4gZMSBbjsgIzkxMzIKK+mEsyA+IG3DqW5nOyAjOTEzMwor6YS0ID4gecOoOyAjOTEzNAor6YS1ID4gY8SBbzsgIzkxMzUKK+mEtiA+IGt1w6BpOyAjOTEzNgor6YS3ID4gZsSTbmc7ICM5MTM3CivphLggPiBtw6luZzsgIzkxMzgKK+mEuSA+IHrFjXU7ICM5MTM5CivphLogPiBrdcOgbmc7ICM5MTNBCivphLsgPiBsacOhbjsgIzkxM0IKK+mEvCA+IHrDoG47ICM5MTNDCivphL0gPiBjaMOhbjsgIzkxM0QKK+mEviA+IHnFjXU7ICM5MTNFCivphL8gPiBxw607ICM5MTNGCivphYAgPiB5xIFuOyAjOTE0MAor6YWBID4gY2jDoW47ICM5MTQxCivphYIgPiB6w6BuOyAjOTE0Mgor6YWDID4gbMOtbmc7ICM5MTQzCivphYQgPiBodcSBbjsgIzkxNDQKK+mFhSA+IHjEqzsgIzkxNDUKK+mFhiA+IGbEk25nOyAjOTE0Ngor6YWHID4gesOgbjsgIzkxNDcKK+mFiCA+IGzDrDsgIzkxNDgKK+mFiSA+IHnFj3U7ICM5MTQ5CivphYogPiBkxK1uZzsgIzkxNEEKK+mFiyA+IHHDrXU7ICM5MTRCCivphYwgPiB6aMO6bzsgIzkxNEMKK+mFjSA+IHDDqGk7ICM5MTRECivphY4gPiB6aMOydTsgIzkxNEUKK+mFjyA+IHnDrTsgIzkxNEYKK+mFkCA+IGjEg25nOyAjOTE1MAor6YWRID4gecWtOyAjOTE1MQor6YWSID4gasStdTsgIzkxNTIKK+mFkyA+IHnEg247ICM5MTUzCivphZQgPiB6w7lpOyAjOTE1NAor6YWVID4gbcOhbzsgIzkxNTUKK+mFliA+IGTEgW47ICM5MTU2CivphZcgPiB4w7k7ICM5MTU3CivphZggPiB0w7N1OyAjOTE1OAor6YWZID4gemjEk247ICM5MTU5CivphZogPiBmxJNuOyAjOTE1QQor6YWdID4gecO5bjsgIzkxNUQKK+mFniA+IHTDoGk7ICM5MTVFCivphZ8gPiB0acSBbjsgIzkxNUYKK+mFoCA+IHFpxIM7ICM5MTYwCivphaEgPiB0w7pvOyAjOTE2MQor6YWiID4gesO5bzsgIzkxNjIKK+mFoyA+IGjEgW47ICM5MTYzCivphaQgPiBnxas7ICM5MTY0CivphaUgPiBzxas7ICM5MTY1CivphaYgPiBww7I7ICM5MTY2CivphacgPiBjaMOzdTsgIzkxNjcKK+mFqCA+IHrDoGk7ICM5MTY4CivphakgPiBtw61uZzsgIzkxNjkKK+mFqiA+IGzDuW87ICM5MTZBCivphasgPiBjaMO5bzsgIzkxNkIKK+mFrCA+IGNow7N1OyAjOTE2Qwor6YWtID4gecOydTsgIzkxNkQKK+mFriA+IHTDs25nOyAjOTE2RQor6YWvID4gemjErTsgIzkxNkYKK+mFsCA+IHhpxIFuOyAjOTE3MAor6YWxID4gamnDoG5nOyAjOTE3MQor6YWyID4gY2jDqW5nOyAjOTE3Mgor6YWzID4gecOsbjsgIzkxNzMKK+mFtCA+IHTDujsgIzkxNzQKK+mFtSA+IHhpw6BvOyAjOTE3NQor6YW2ID4gbcOpaTsgIzkxNzYKK+mFtyA+IGvDuTsgIzkxNzcKK+mFuCA+IHN1xIFuOyAjOTE3OAor6YW5ID4gbMOoaTsgIzkxNzkKK+mFuiA+IHDDujsgIzkxN0EKK+mFuyA+IHrDuWk7ICM5MTdCCivphbwgPiBoxINpOyAjOTE3Qwor6YW9ID4gecOgbjsgIzkxN0QKK+mFviA+IHjErTsgIzkxN0UKK+mFvyA+IG5pw6BuZzsgIzkxN0YKK+mGgCA+IHfDqWk7ICM5MTgwCivphoEgPiBsw7k7ICM5MTgxCivphoIgPiBsxINuOyAjOTE4Mgor6YaDID4gecSBbjsgIzkxODMKK+mGhCA+IHTDoW87ICM5MTg0CivphoUgPiBwxJNpOyAjOTE4NQor6YaGID4gemjEg247ICM5MTg2CivphocgPiBjaMO6bjsgIzkxODcKK+mGiCA+IHTDoW47ICM5MTg4CivphokgPiB6w7lpOyAjOTE4OQor6YaKID4gY2jDuW87ICM5MThBCivphosgPiBjw7k7ICM5MThCCivphowgPiBrxatuOyAjOTE4Qwor6YaNID4gdMOtOyAjOTE4RAor6YaOID4gbWnDoW47ICM5MThFCivpho8gPiBkxas7ICM5MThGCivphpAgPiBow7o7ICM5MTkwCivphpEgPiB4xa07ICM5MTkxCivphpIgPiB4xK1uZzsgIzkxOTIKK+mGkyA+IHTEg247ICM5MTkzCivphpQgPiBqxKt1OyAjOTE5NAor6YaVID4gY2jDum47ICM5MTk1CivphpYgPiB5w7luOyAjOTE5Ngor6YaXID4gcMOyOyAjOTE5Nwor6YaYID4ga8OoOyAjOTE5OAor6YaZID4gc8WNdTsgIzkxOTkKK+mGmiA+IG3DrTsgIzkxOUEKK+mGmyA+IHF1w6FuOyAjOTE5Qgor6YacID4gY2jFj3U7ICM5MTlDCivphp0gPiBjw7pvOyAjOTE5RAor6YaeID4gecO5bjsgIzkxOUUKK+mGnyA+IHnDsm5nOyAjOTE5Rgor6YagID4gw6BuZzsgIzkxQTAKK+mGoSA+IHpow6A7ICM5MUExCivphqIgPiBoxINpOyAjOTFBMgor6YajID4gdMOhbmc7ICM5MUEzCivphqQgPiBqacOgbmc7ICM5MUE0CivphqUgPiBwacSDbzsgIzkxQTUKK+mGpiA+IHNoxINuOyAjOTFBNgor6YanID4gecO5OyAjOTFBNwor6YaoID4gbMOtOyAjOTFBOAor6YapID4gesOhbzsgIzkxQTkKK+mGqiA+IGzDoW87ICM5MUFBCivphqsgPiB5xKs7ICM5MUFCCivphqwgPiBqacOgbmc7ICM5MUFDCivphq0gPiBwxas7ICM5MUFECivphq4gPiBqacOgbzsgIzkxQUUKK+mGryA+IHjEqzsgIzkxQUYKK+mGsCA+IHTDoW47ICM5MUIwCivphrEgPiBww7I7ICM5MUIxCivphrIgPiBuw7NuZzsgIzkxQjIKK+mGsyA+IHnDrDsgIzkxQjMKK+mGtCA+IGzErTsgIzkxQjQKK+mGtSA+IGrDuTsgIzkxQjUKK+mGtiA+IGppw6BvOyAjOTFCNgor6Ya3ID4gecOsOyAjOTFCNwor6Ya4ID4gbmnDoG5nOyAjOTFCOAor6Ya5ID4gcsO6OyAjOTFCOQor6Ya6ID4geMWrbjsgIzkxQkEKK+mGuyA+IGNow7N1OyAjOTFCQgor6Ya8ID4gecOgbjsgIzkxQkMKK+mGvSA+IGzDrW5nOyAjOTFCRAor6Ya+ID4gbcOtOyAjOTFCRQor6Ya/ID4gbcOtOyAjOTFCRgor6YeAID4gbmnDoG5nOyAjOTFDMAor6YeBID4geMOsbjsgIzkxQzEKK+mHgiA+IGppw6BvOyAjOTFDMgor6YeDID4geMStOyAjOTFDMwor6YeEID4gbcOtOyAjOTFDNAor6YeFID4gecOgbjsgIzkxQzUKK+mHhiA+IGJpw6BuOyAjOTFDNgor6YeHID4gY8SDaTsgIzkxQzcKK+mHiCA+IHNow6w7ICM5MUM4Civph4kgPiB5w7J1OyAjOTFDOQor6YeKID4gc2jDrDsgIzkxQ0EKK+mHiyA+IHNow6w7ICM5MUNCCivph4wgPiBsxK07ICM5MUNDCivph40gPiB6aMOybmc7ICM5MUNECivph44gPiB5xJU7ICM5MUNFCivph48gPiBsacOgbmc7ICM5MUNGCivph5AgPiBsw607ICM5MUQwCivph5EgPiBqxKtuOyAjOTFEMQor6YeSID4gasSrbicgJ3rDrCcgJ3DDoW5nOyAjOTFEMgor6YeTID4gccOtdTsgIzkxRDMKK+mHlCA+IHnErTsgIzkxRDQKK+mHlSA+IGRpxINvOyAjOTFENQor6YeWID4gZMSBbzsgIzkxRDYKK+mHlyA+IHpoxIFvOyAjOTFENwor6YeYID4gZMSrbmc7ICM5MUQ4Civph5kgPiBww7I7ICM5MUQ5Civph5ogPiBxw611OyAjOTFEQQor6YebID4gaMOpOyAjOTFEQgor6YecID4gZsWtOyAjOTFEQwor6YedID4gemjEk247ICM5MURECivph54gPiB6aMOtOyAjOTFERQor6YefID4gYsSBOyAjOTFERgor6YegID4gbHXDoG47ICM5MUUwCivph6EgPiBmxa07ICM5MUUxCivph6IgPiBuw6FpOyAjOTFFMgor6YejID4gZGnDoG87ICM5MUUzCivph6QgPiBzaMOgbjsgIzkxRTQKK+mHpSA+IHFpxINvOyAjOTFFNQor6YemID4ga8OydTsgIzkxRTYKK+mHpyA+IGNodcOgbjsgIzkxRTcKK+mHqCA+IHrErTsgIzkxRTgKK+mHqSA+IGbDoW47ICM5MUU5Civph6ogPiB5w7o7ICM5MUVBCivph6sgPiBodcOhOyAjOTFFQgor6YesID4gaMOgbjsgIzkxRUMKK+mHrSA+IGfFjW5nOyAjOTFFRAor6YeuID4gccOtOyAjOTFFRQor6YevID4gbcOhbmc7ICM5MUVGCivph7AgPiByw6w7ICM5MUYwCivph7EgPiBkw6w7ICM5MUYxCivph7IgPiBzw6w7ICM5MUYyCivph7MgPiB4w6w7ICM5MUYzCivph7QgPiB5w6w7ICM5MUY0Civph7UgPiBjaMSBaTsgIzkxRjUKK+mHtiA+IHNoxKs7ICM5MUY2Civph7cgPiB0xa07ICM5MUY3Civph7ggPiB4w6w7ICM5MUY4Civph7kgPiBux5o7ICM5MUY5Civph7ogPiBxacSBbjsgIzkxRkEKK+mHvCA+IGppw6BuOyAjOTFGQwor6Ye9ID4gcMSrOyAjOTFGRAor6Ye+ID4gecOpOyAjOTFGRQor6Ye/ID4gecOtbjsgIzkxRkYKK+mIgCA+IGLEgzsgIzkyMDAKK+mIgSA+IGbEgW5nOyAjOTIwMQor6YiCID4gY2jDqW47ICM5MjAyCivpiIMgPiB4w61uZzsgIzkyMDMKK+mIhCA+IHTFj3U7ICM5MjA0CivpiIUgPiB5dcOoOyAjOTIwNQor6YiGID4gecOhbjsgIzkyMDYKK+mIhyA+IGbFqzsgIzkyMDcKK+mIiCA+IHDEqzsgIzkyMDgKK+mIiSA+IG7DoDsgIzkyMDkKK+mIiiA+IHjEq247ICM5MjBBCivpiIsgPiDDqTsgIzkyMEIKK+mIjCA+IGp1w6k7ICM5MjBDCivpiI0gPiBkw7luOyAjOTIwRAor6YiOID4gZ8WNdTsgIzkyMEUKK+mIjyA+IHnErW47ICM5MjBGCivpiJAgPiBxacOhbjsgIzkyMTAKK+mIkSA+IGLEg247ICM5MjExCivpiJIgPiBqw607ICM5MjEyCivpiJMgPiByw6luOyAjOTIxMwor6YiUID4gY2jEgW87ICM5MjE0CivpiJUgPiBuxK11OyAjOTIxNQor6YiWID4gZsSTbjsgIzkyMTYKK+mIlyA+IHnFrW47ICM5MjE3CivpiJggPiBqxK07ICM5MjE4CivpiJkgPiBxw61uOyAjOTIxOQor6YiaID4gcMOtOyAjOTIxQQor6YibID4gZ8WrbzsgIzkyMUIKK+mInCA+IGjDs25nOyAjOTIxQwor6YidID4gecOtbjsgIzkyMUQKK+mIniA+IGrFq247ICM5MjFFCivpiJ8gPiBzaMSrOyAjOTIxRgor6YigID4gecOsOyAjOTIyMAor6YihID4gemjFjW5nOyAjOTIyMQor6YiiID4gbmnEkzsgIzkyMjIKK+mIoyA+IGfDoGk7ICM5MjIzCivpiKQgPiByw6w7ICM5MjI0CivpiKUgPiBow7pvOyAjOTIyNQor6YimID4gdMOgaTsgIzkyMjYKK+mIpyA+IGvDoG5nOyAjOTIyNwor6YisID4gZMO6bzsgIzkyMkMKK+mIrSA+IHrEqzsgIzkyMkQKK+mIriA+IG7ErTsgIzkyMkUKK+mIryA+IHTDujsgIzkyMkYKK+mIsCA+IHNow6w7ICM5MjMwCivpiLEgPiBtw61uOyAjOTIzMQor6YiyID4gZ8WrOyAjOTIzMgor6YizID4gxJM7ICM5MjMzCivpiLQgPiBsw61uZzsgIzkyMzQKK+mItSA+IGLDrG5nOyAjOTIzNQor6Yi2ID4gecOtOyAjOTIzNgor6Yi3ID4gZ8WrOyAjOTIzNwor6Yi4ID4gYsOhOyAjOTIzOAor6Yi5ID4gcMSrOyAjOTIzOQor6Yi6ID4gecO5OyAjOTIzQQor6Yi7ID4gc8OsOyAjOTIzQgor6Yi8ID4gesO6bzsgIzkyM0MKK+mIvSA+IGLDuTsgIzkyM0QKK+mIviA+IHnDs3U7ICM5MjNFCivpiL8gPiBkacOgbjsgIzkyM0YKK+mJgCA+IGppxIM7ICM5MjQwCivpiYEgPiB6aMSTbjsgIzkyNDEKK+mJgiA+IHNoxK07ICM5MjQyCivpiYMgPiBzaMOsOyAjOTI0Mwor6YmEID4gdGnElTsgIzkyNDQKK+mJhSA+IGrDuTsgIzkyNDUKK+mJhiA+IHpoxIFuOyAjOTI0Ngor6YmHID4gc2jEqzsgIzkyNDcKK+mJiCA+IHNow6k7ICM5MjQ4CivpiYkgPiB4dcOgbjsgIzkyNDkKK+mJiiA+IHpoxIFvOyAjOTI0QQor6YmLID4gYsOgbzsgIzkyNEIKK+mJjCA+IGjDqTsgIzkyNEMKK+mJjSA+IGLDrDsgIzkyNEQKK+mJjiA+IHNoxJNuZzsgIzkyNEUKK+mJjyA+IGNow7o7ICM5MjRGCivpiZAgPiBzaMOtOyAjOTI1MAor6YmRID4gYsOzOyAjOTI1MQor6YmSID4gemjDuTsgIzkyNTIKK+mJkyA+IGNow6w7ICM5MjUzCivpiZQgPiB6xIE7ICM5MjU0CivpiZUgPiBwxY07ICM5MjU1CivpiZYgPiB0w7NuZzsgIzkyNTYKK+mJlyA+IHFpw6FuOyAjOTI1Nwor6YmYID4gZsO6OyAjOTI1OAor6YmZID4gemjEg2k7ICM5MjU5CivpiZogPiBsxK11OyAjOTI1QQor6YmbID4gcWnEgW47ICM5MjVCCivpiZwgPiBmw7o7ICM5MjVDCivpiZ0gPiBsw6w7ICM5MjVECivpiZ4gPiB5dcOoOyAjOTI1RQor6YmfID4gcMSrOyAjOTI1Rgor6YmgID4gecSBbmc7ICM5MjYwCivpiaEgPiBiw6BuOyAjOTI2MQor6YmiID4gYsWNOyAjOTI2Mgor6YmjID4gamnDqTsgIzkyNjMKK+mJpCA+IGfFjXU7ICM5MjY0CivpiaUgPiBzaMO5OyAjOTI2NQor6YmmID4gemjEk25nOyAjOTI2Ngor6YmnID4gbcWtOyAjOTI2Nwor6YmoID4gbsStOyAjOTI2OAor6YmpID4gbmnEkzsgIzkyNjkKK+mJqiA+IGTDrDsgIzkyNkEKK+mJqyA+IGppxIE7ICM5MjZCCivpiawgPiBtw7k7ICM5MjZDCivpia0gPiBkw6BuOyAjOTI2RAor6YmuID4gc2jEk247ICM5MjZFCivpia8gPiB5xK07ICM5MjZGCivpibAgPiBzxKs7ICM5MjcwCivpibEgPiBrdcOgbmc7ICM5MjcxCivpibIgPiBrxIM7ICM5MjcyCivpibMgPiBixJVpOyAjOTI3Mwor6Ym0ID4gamnDoG47ICM5Mjc0CivpibUgPiB0w7NuZzsgIzkyNzUKK+mJtiA+IHjDrW5nOyAjOTI3Ngor6Ym3ID4gaMOzbmc7ICM5Mjc3CivpibggPiBqacSDbzsgIzkyNzgKK+mJuSA+IGNoxK07ICM5Mjc5CivpibogPiDDqHI7ICM5MjdBCivpibsgPiBnw6g7ICM5MjdCCivpibwgPiBixK1uZzsgIzkyN0MKK+mJvSA+IHNow6w7ICM5MjdECivpib4gPiBtw7N1OyAjOTI3RQor6Ym/ID4gamnDoTsgIzkyN0YKK+mKgCA+IHnDrW47ICM5MjgwCivpioEgPiBqxatuOyAjOTI4MQor6YqCID4gemjFjXU7ICM5MjgyCivpioMgPiBjaMOybmc7ICM5MjgzCivpioQgPiBzaMOgbmc7ICM5Mjg0CivpioUgPiB0w7NuZzsgIzkyODUKK+mKhiA+IG3DsjsgIzkyODYKK+mKhyA+IGzDqGk7ICM5Mjg3CivpioggPiBqxKs7ICM5Mjg4CivpiokgPiB5w7k7ICM5Mjg5CivpioogPiB4w7k7ICM5MjhBCivpiosgPiByw6luOyAjOTI4Qgor6YqMID4gesO5bjsgIzkyOEMKK+mKjSA+IHpow6w7ICM5MjhECivpio4gPiBxxKtvbmc7ICM5MjhFCivpio8gPiBzaMOgbjsgIzkyOEYKK+mKkCA+IGNow6w7ICM5MjkwCivpipEgPiB4acSDbjsgIzkyOTEKK+mKkiA+IHjDrW5nOyAjOTI5Mgor6YqTID4gcXXDoW47ICM5MjkzCivpipQgPiBwxKs7ICM5Mjk0CivpipUgPiB0acSVOyAjOTI5NQor6YqWID4gemjFqzsgIzkyOTYKK+mKlyA+IGjDs3U7ICM5Mjk3CivpipggPiBtw61uZzsgIzkyOTgKK+mKmSA+IGt1xIM7ICM5Mjk5CivpipogPiB5w6FvOyAjOTI5QQor6YqbID4geGnEgW47ICM5MjlCCivpipwgPiB4acOhbjsgIzkyOUMKK+mKnSA+IHjEq3U7ICM5MjlECivpip4gPiBqxatuOyAjOTI5RQor6YqfID4gY2jEgTsgIzkyOUYKK+mKoCA+IGzEg287ICM5MkEwCivpiqEgPiBqw607ICM5MkExCivpiqIgPiBwxK07ICM5MkEyCivpiqMgPiByxa07ICM5MkEzCivpiqQgPiBtxK07ICM5MkE0CivpiqUgPiB5xK07ICM5MkE1CivpiqYgPiB5xKtuOyAjOTJBNgor6YqnID4gZ3XEgW5nOyAjOTJBNwor6YqoID4gxIFuOyAjOTJBOAor6YqpID4gZGnFjXU7ICM5MkE5CivpiqogPiB5xY91OyAjOTJBQQor6YqrID4gc8OoOyAjOTJBQgor6YqsID4ga8OgbzsgIzkyQUMKK+mKrSA+IHFpw6FuOyAjOTJBRAor6YquID4gbHXDoW47ICM5MkFFCivpirAgPiDEgWk7ICM5MkIwCivpirEgPiBkacOgbzsgIzkyQjEKK+mKsiA+IGjDoG47ICM5MkIyCivpirMgPiByw7lpOyAjOTJCMwor6Yq0ID4gc2jDrDsgIzkyQjQKK+mKtSA+IGvEk25nOyAjOTJCNQor6Yq2ID4gccOtdTsgIzkyQjYKK+mKtyA+IHhpxIFvOyAjOTJCNwor6Yq4ID4gemjDqTsgIzkyQjgKK+mKuSA+IHjDrHU7ICM5MkI5CivpirogPiB6w6BuZzsgIzkyQkEKK+mKuyA+IHTDrDsgIzkyQkIKK+mKvCA+IGPDuW87ICM5MkJDCivpir0gPiBndcSBOyAjOTJCRAor6Yq+ID4gZ8WPbmc7ICM5MkJFCivpir8gPiB6aMWNbmc7ICM5MkJGCivpi4AgPiBkw7J1OyAjOTJDMAor6YuBID4gbMeaOyAjOTJDMQor6YuCID4gbcOpaTsgIzkyQzIKK+mLgyA+IGzDoW5nOyAjOTJDMwor6YuEID4gd8SDbjsgIzkyQzQKK+mLhSA+IHjEq247ICM5MkM1Civpi4YgPiB5w7puOyAjOTJDNgor6YuHID4gYsOoaTsgIzkyQzcKK+mLiCA+IHfDuTsgIzkyQzgKK+mLiSA+IHPDuTsgIzkyQzkKK+mLiiA+IHnDuTsgIzkyQ0EKK+mLiyA+IGNow6FuOyAjOTJDQgor6YuMID4gdMStbmc7ICM5MkNDCivpi40gPiBiw7M7ICM5MkNECivpi44gPiBow6BuOyAjOTJDRQor6YuPID4gamnDoTsgIzkyQ0YKK+mLkCA+IGjDs25nOyAjOTJEMAor6YuRID4gY3XEgW47ICM5MkQxCivpi5IgPiBmxJNuZzsgIzkyRDIKK+mLkyA+IGNoxIFuOyAjOTJEMwor6YuUID4gd8SDbjsgIzkyRDQKK+mLlSA+IHpow6w7ICM5MkQ1Civpi5YgPiBzxKs7ICM5MkQ2Civpi5cgPiB4dcSBbjsgIzkyRDcKK+mLmCA+IHfDujsgIzkyRDgKK+mLmSA+IHfDujsgIzkyRDkKK+mLmiA+IHRpw6FvOyAjOTJEQQor6YubID4gZ8WPbmc7ICM5MkRCCivpi5wgPiB6aMO6bzsgIzkyREMKK+mLnSA+IGzHnGU7ICM5MkRECivpi54gPiB4w61uZzsgIzkyREUKK+mLnyA+IHFpxIFuOyAjOTJERgor6YugID4gc2jDqG47ICM5MkUwCivpi6EgPiBow6FuOyAjOTJFMQor6YuiID4gbMecZTsgIzkyRTIKK+mLoyA+IHhpw6k7ICM5MkUzCivpi6QgPiBjaMO6OyAjOTJFNAor6YulID4gemjDqG5nOyAjOTJFNQor6YumID4gasO6OyAjOTJFNgor6YunID4geGnDoG47ICM5MkU3Civpi6ggPiB0acSVOyAjOTJFOAor6YupID4gbcOhbmc7ICM5MkU5Civpi6ogPiBwxas7ICM5MkVBCivpi6sgPiBsw607ICM5MkVCCivpi6wgPiBww6BuOyAjOTJFQwor6YutID4gcsO5aTsgIzkyRUQKK+mLriA+IGNow6luZzsgIzkyRUUKK+mLryA+IGfDoG87ICM5MkVGCivpi7AgPiBsxK07ICM5MkYwCivpi7EgPiB0w6g7ICM5MkYxCivpi7MgPiB6aMO5OyAjOTJGMwor6Yu1ID4gdMWrOyAjOTJGNQor6Yu2ID4gbMStdTsgIzkyRjYKK+mLtyA+IHrDuWk7ICM5MkY3Civpi7ggPiBqw7k7ICM5MkY4Civpi7kgPiBjaMSDbmc7ICM5MkY5Civpi7ogPiB5dcSBbjsgIzkyRkEKK+mLuyA+IGppw6BuOyAjOTJGQgor6Yu8ID4gZ8SBbmc7ICM5MkZDCivpi70gPiBkacOgbzsgIzkyRkQKK+mLviA+IHTDoW87ICM5MkZFCivpi78gPiBjaMOhbmc7ICM5MkZGCivpjIAgPiBsw7puOyAjOTMwMAor6YyBID4ga3XEgzsgIzkzMDEKK+mMgiA+IGzDrW5nOyAjOTMwMgor6YyDID4gYsSTaTsgIzkzMDMKK+mMhCA+IGzDuTsgIzkzMDQKK+mMhSA+IGzDrTsgIzkzMDUKK+mMhiA+IHFpxIFuZzsgIzkzMDYKK+mMhyA+IHDDs3U7ICM5MzA3CivpjIggPiBqdcOgbjsgIzkzMDgKK+mMiSA+IG3DrW47ICM5MzA5CivpjIogPiB6w7lpOyAjOTMwQQor6YyLID4gcMOpbmc7ICM5MzBCCivpjIwgPiDDoG47ICM5MzBDCivpjI0gPiBww607ICM5MzBECivpjI4gPiB4acOgbjsgIzkzMEUKK+mMjyA+IHnDoDsgIzkzMEYKK+mMkCA+IHpoxatpOyAjOTMxMAor6YyRID4gbMOoaTsgIzkzMTEKK+mMkiA+IMSBOyAjOTMxMgor6YyTID4ga8WNbmc7ICM5MzEzCivpjJQgPiB0w6A7ICM5MzE0CivpjJUgPiBrxatuOyAjOTMxNQor6YyWID4gZMWtOyAjOTMxNgor6YyXID4gd8OoaTsgIzkzMTcKK+mMmCA+IGNow7ppOyAjOTMxOAor6YyZID4gesSrOyAjOTMxOQor6YyaID4gemjEk25nOyAjOTMxQQor6YybID4gYsSTbjsgIzkzMUIKK+mMnCA+IG5pxJM7ICM5MzFDCivpjJ0gPiBjw7NuZzsgIzkzMUQKK+mMniA+IHHDum47ICM5MzFFCivpjJ8gPiB0w6FuOyAjOTMxRgor6YygID4gZMOsbmc7ICM5MzIwCivpjKEgPiBxw607ICM5MzIxCivpjKIgPiBxacOhbjsgIzkzMjIKK+mMoyA+IHpow7pvOyAjOTMyMwor6YykID4gccOtOyAjOTMyNAor6YylID4gecO5OyAjOTMyNQor6YymID4gasStbjsgIzkzMjYKK+mMpyA+IGd1xINuOyAjOTMyNwor6YyoID4gbcOhbzsgIzkzMjgKK+mMqSA+IGNoxIFuZzsgIzkzMjkKK+mMqiA+IHRpxINuOyAjOTMyQQor6YyrID4geMOtOyAjOTMyQgor6YysID4gbGnDoG47ICM5MzJDCivpjK0gPiB0w6FvOyAjOTMyRAor6YyuID4gZ8O5OyAjOTMyRQor6YyvID4gY8O5bzsgIzkzMkYKK+mMsCA+IHNow7k7ICM5MzMwCivpjLEgPiB6aMSTbjsgIzkzMzEKK+mMsiA+IGzDuTsgIzkzMzIKK+mMsyA+IG3ElW5nOyAjOTMzMwor6Yy0ID4gbMO5OyAjOTMzNAor6Yy1ID4gaHXEgTsgIzkzMzUKK+mMtiA+IGJpxINvOyAjOTMzNgor6Yy3ID4gZ8OhOyAjOTMzNwor6Yy4ID4gbMOhaTsgIzkzMzgKK+mMuSA+IGvElW47ICM5MzM5CivpjLwgPiBuw6BpOyAjOTMzQwor6Yy9ID4gd8SDbjsgIzkzM0QKK+mMviA+IHrDoG47ICM5MzNFCivpjYAgPiBkw6k7ICM5MzQwCivpjYEgPiB4acSBbjsgIzkzNDEKK+mNgyA+IGjFq287ICM5MzQzCivpjYQgPiBsacOgbmc7ICM5MzQ0CivpjYYgPiBtw6luOyAjOTM0Ngor6Y2HID4ga8SDaTsgIzkzNDcKK+mNiCA+IHnEq25nOyAjOTM0OAor6Y2JID4gZMSrOyAjOTM0OQor6Y2KID4gbGnDoG47ICM5MzRBCivpjYsgPiBnxatvOyAjOTM0Qgor6Y2MID4geGnEg247ICM5MzRDCivpjY0gPiBkw7k7ICM5MzRECivpjY4gPiB0w7o7ICM5MzRFCivpjY8gPiB3w6lpOyAjOTM0Rgor6Y2QID4gY8WNbmc7ICM5MzUwCivpjZEgPiBmw7k7ICM5MzUxCivpjZIgPiByw7N1OyAjOTM1Mgor6Y2TID4gasOtOyAjOTM1Mwor6Y2UID4gw6g7ICM5MzU0CivpjZUgPiByw7N1OyAjOTM1NQor6Y2WID4gY2jElW47ICM5MzU2CivpjZcgPiB0w607ICM5MzU3CivpjZggPiB6aMOhOyAjOTM1OAor6Y2ZID4gaMOybmc7ICM5MzU5CivpjZogPiB5w6FuZzsgIzkzNUEKK+mNmyA+IGR1w6BuOyAjOTM1Qgor6Y2cID4geGnEgTsgIzkzNUMKK+mNnSA+IHnDujsgIzkzNUQKK+mNniA+IGvEk25nOyAjOTM1RQor6Y2fID4geMSrbmc7ICM5MzVGCivpjaAgPiBodcOhbmc7ICM5MzYwCivpjaEgPiB3xJVpOyAjOTM2MQor6Y2iID4gZsO5OyAjOTM2Mgor6Y2jID4gemjEgW87ICM5MzYzCivpjaQgPiBjaMOhOyAjOTM2NAor6Y2lID4gcWnDqDsgIzkzNjUKK+mNpiA+IHNow6k7ICM5MzY2CivpjacgPiBoxY1uZzsgIzkzNjcKK+mNqCA+IGvDumk7ICM5MzY4CivpjakgPiB0acSDbjsgIzkzNjkKK+mNqiA+IG3Ds3U7ICM5MzZBCivpjasgPiBxacSBbzsgIzkzNkIKK+mNrCA+IHFpxIFvOyAjOTM2Qwor6Y2tID4gaMOzdTsgIzkzNkQKK+mNriA+IHTFjXU7ICM5MzZFCivpja8gPiBjxY1uZzsgIzkzNkYKK+mNsCA+IGh1w6FuOyAjOTM3MAor6Y2xID4gecOoOyAjOTM3MQor6Y2yID4gbcOtbjsgIzkzNzIKK+mNsyA+IGppw6BuOyAjOTM3Mwor6Y20ID4gZHXEgW47ICM5Mzc0CivpjbUgPiBqacOgbjsgIzkzNzUKK+mNtiA+IHPFjW5nOyAjOTM3Ngor6Y23ID4ga8WraTsgIzkzNzcKK+mNuCA+IGjDujsgIzkzNzgKK+mNuSA+IHh1xIFuOyAjOTM3OQor6Y26ID4gZMWtbzsgIzkzN0EKK+mNuyA+IGppw6k7ICM5MzdCCivpjbwgPiB6aMSTbjsgIzkzN0MKK+mNvSA+IGJpxIFuOyAjOTM3RAor6Y2+ID4gemjFjW5nOyAjOTM3RQor6Y2/ID4gesSrOyAjOTM3Rgor6Y6AID4geMSrdTsgIzkzODAKK+mOgSA+IHnDqTsgIzkzODEKK+mOgiA+IG3ElWk7ICM5MzgyCivpjoMgPiBww6BpOyAjOTM4Mwor6Y6EID4gxIFpOyAjOTM4NAor6Y6FID4gamnDqDsgIzkzODUKK+mOhyA+IG3DqWk7ICM5Mzg3CivpjoggPiBjaMWrbzsgIzkzODgKK+mOiSA+IHTDoDsgIzkzODkKK+mOiiA+IGLDoG5nOyAjOTM4QQor6Y6LID4geGnDoTsgIzkzOEIKK+mOjCA+IGxpw6FuOyAjOTM4Qwor6Y6NID4gc8WtbzsgIzkzOEQKK+mOjiA+IHjDrDsgIzkzOEUKK+mOjyA+IGzDrXU7ICM5MzhGCivpjpAgPiB6w7o7ICM5MzkwCivpjpEgPiB5w6g7ICM5MzkxCivpjpIgPiBuw7J1OyAjOTM5Mgor6Y6TID4gd8STbmc7ICM5MzkzCivpjpQgPiByw7NuZzsgIzkzOTQKK+mOlSA+IHTDoW5nOyAjOTM5NQor6Y6WID4gc8WtbzsgIzkzOTYKK+mOlyA+IHFpxIFuZzsgIzkzOTcKK+mOmCA+IGfDqTsgIzkzOTgKK+mOmSA+IHNow7lvOyAjOTM5OQor6Y6aID4gY2jDumk7ICM5MzlBCivpjpsgPiBiw7M7ICM5MzlCCivpjpwgPiBww6FuOyAjOTM5Qwor6Y6dID4gc8OgOyAjOTM5RAor6Y6eID4gYsOsOyAjOTM5RQor6Y6fID4gc8SDbmc7ICM5MzlGCivpjqAgPiBnxIFuZzsgIzkzQTAKK+mOoSA+IHrEqzsgIzkzQTEKK+mOoiA+IHfDuTsgIzkzQTIKK+mOoyA+IHnDrG5nOyAjOTNBMwor6Y6kID4gaHXEg25nOyAjOTNBNAor6Y6lID4gdGnDoW87ICM5M0E1CivpjqYgPiBsw611OyAjOTNBNgor6Y6nID4ga8SDaTsgIzkzQTcKK+mOqCA+IHPFrW47ICM5M0E4CivpjqkgPiBzaMSBOyAjOTNBOQor6Y6qID4gc8WNdTsgIzkzQUEKK+mOqyA+IHfDoG47ICM5M0FCCivpjqwgPiBow6BvOyAjOTNBQwor6Y6tID4gemjDqG47ICM5M0FECivpjq4gPiB6aMOobjsgIzkzQUUKK+mOryA+IGzFrW87ICM5M0FGCivpjrAgPiB5w6w7ICM5M0IwCivpjrEgPiB5dcOhbjsgIzkzQjEKK+mOsiA+IHTEg25nOyAjOTNCMgor6Y6zID4gbmnDqDsgIzkzQjMKK+mOtCA+IHjDrTsgIzkzQjQKK+mOtSA+IGppxIE7ICM5M0I1CivpjrYgPiBnxJM7ICM5M0I2CivpjrcgPiBtxIM7ICM5M0I3CivpjrggPiBqdcSBbjsgIzkzQjgKK+mOuyA+IHPFrW87ICM5M0JCCivpjr8gPiBuw6E7ICM5M0JGCivpj4AgPiBsxa07ICM5M0MwCivpj4EgPiBzxa1vOyAjOTNDMQor6Y+CID4gxY11OyAjOTNDMgor6Y+DID4gesO6OyAjOTNDMwor6Y+EID4gdHXDoW47ICM5M0M0Civpj4UgPiB4xKt1OyAjOTNDNQor6Y+GID4gZ3XDoG47ICM5M0M2Civpj4cgPiB4dcOgbjsgIzkzQzcKK+mPiCA+IGxpw6BuOyAjOTNDOAor6Y+JID4gc2jDsnU7ICM5M0M5Civpj4ogPiDDoW87ICM5M0NBCivpj4sgPiBtxINuOyAjOTNDQgor6Y+MID4gbcOyOyAjOTNDQwor6Y+NID4gbMO6bzsgIzkzQ0QKK+mPjiA+IGLDrDsgIzkzQ0UKK+mPjyA+IHfDqGk7ICM5M0NGCivpj5AgPiBsw611OyAjOTNEMAor6Y+RID4gZMOtOyAjOTNEMQor6Y+SID4gcWnEgW87ICM5M0QyCivpj5MgPiBjxY1uZzsgIzkzRDMKK+mPlCA+IHnDrTsgIzkzRDQKK+mPlSA+IGzDuTsgIzkzRDUKK+mPliA+IMOhbzsgIzkzRDYKK+mPlyA+IGvEk25nOyAjOTNENwor6Y+YID4gcWnEgW5nOyAjOTNEOAor6Y+ZID4gY8WraTsgIzkzRDkKK+mPmiA+IHHDrDsgIzkzREEKK+mPmyA+IGNow6FuZzsgIzkzREIKK+mPnCA+IHTEgW5nOyAjOTNEQwor6Y+dID4gbcOgbjsgIzkzREQKK+mPniA+IHnFjW5nOyAjOTNERQor6Y+fID4gY2jEg247ICM5M0RGCivpj6AgPiBmxJNuZzsgIzkzRTAKK+mPoSA+IGrDrG5nOyAjOTNFMQor6Y+iID4gYmnEgW87ICM5M0UyCivpj6MgPiBzaMO5OyAjOTNFMwor6Y+kID4gbMOydTsgIzkzRTQKK+mPpSA+IHjDrHU7ICM5M0U1Civpj6YgPiBjxY1uZzsgIzkzRTYKK+mPpyA+IGzDs25nOyAjOTNFNwor6Y+oID4gesOgbjsgIzkzRTgKK+mPqSA+IGppw6BuOyAjOTNFOQor6Y+qID4gY8OhbzsgIzkzRUEKK+mPqyA+IGzDrTsgIzkzRUIKK+mPrCA+IHhpw6A7ICM5M0VDCivpj60gPiB4xKs7ICM5M0VECivpj64gPiBrxIFuZzsgIzkzRUUKK+mPsCA+IGLDqG5nOyAjOTNGMAor6Y+zID4gemjEk25nOyAjOTNGMwor6Y+0ID4gbMO5OyAjOTNGNAor6Y+1ID4gaHXDoTsgIzkzRjUKK+mPtiA+IGrDrTsgIzkzRjYKK+mPtyA+IHDDujsgIzkzRjcKK+mPuCA+IGjDuWk7ICM5M0Y4Civpj7kgPiBxacSBbmc7ICM5M0Y5Civpj7ogPiBwxY07ICM5M0ZBCivpj7sgPiBsw61uOyAjOTNGQgor6Y+8ID4gc8WtbzsgIzkzRkMKK+mPvSA+IHjDrHU7ICM5M0ZECivpj74gPiBzxINuOyAjOTNGRQor6Y+/ID4gY2jEk25nOyAjOTNGRgor6ZCAID4ga8O5aTsgIzk0MDAKK+mQgSA+IHPEqzsgIzk0MDEKK+mQgiA+IGzDrHU7ICM5NDAyCivpkIMgPiBuw6FvOyAjOTQwMwor6ZCEID4gaMOpbmc7ICM5NDA0CivpkIUgPiBwacSVOyAjOTQwNQor6ZCGID4gc8O5aTsgIzk0MDYKK+mQhyA+IGbDoW47ICM5NDA3CivpkIggPiBxacOhbzsgIzk0MDgKK+mQiSA+IHF1xIFuOyAjOTQwOQor6ZCKID4gecOhbmc7ICM5NDBBCivpkIsgPiB0w6BuZzsgIzk0MEIKK+mQjCA+IHhpw6BuZzsgIzk0MEMKK+mQjSA+IGp1w6k7ICM5NDBECivpkI4gPiBqacSBbzsgIzk0MEUKK+mQjyA+IHrFq247ICM5NDBGCivpkJAgPiBsacOhbzsgIzk0MTAKK+mQkSA+IGppw6k7ICM5NDExCivpkJIgPiBsw6FvOyAjOTQxMgor6ZCTID4gZMO5aTsgIzk0MTMKK+mQlCA+IHTDoW47ICM5NDE0CivpkJUgPiB6xIFuOyAjOTQxNQor6ZCWID4gasSrOyAjOTQxNgor6ZCXID4gamnEg247ICM5NDE3CivpkJggPiB6aMWNbmc7ICM5NDE4CivpkJkgPiBkxJNuZzsgIzk0MTkKK+mQmiA+IHnDoDsgIzk0MUEKK+mQmyA+IHnDrG5nOyAjOTQxQgor6ZCcID4gZMO5aTsgIzk0MUMKK+mQnSA+IGp1w6k7ICM5NDFECivpkJ4gPiBuw7J1OyAjOTQxRQor6ZCfID4gdMOsOyAjOTQxRgor6ZCgID4gcMWtOyAjOTQyMAor6ZChID4gdGnElTsgIzk0MjEKK+mQpCA+IGTErW5nOyAjOTQyNAor6ZClID4gc2jDoG47ICM5NDI1CivpkKYgPiBrxIFpOyAjOTQyNgor6ZCnID4gamnEg247ICM5NDI3CivpkKggPiBmw6hpOyAjOTQyOAor6ZCpID4gc8O5aTsgIzk0MjkKK+mQqiA+IGzFrTsgIzk0MkEKK+mQqyA+IGp1xIFuOyAjOTQyQgor6ZCsID4gaMO5aTsgIzk0MkMKK+mQrSA+IHnDuTsgIzk0MkQKK+mQriA+IGxpw6FuOyAjOTQyRQor6ZCvID4gemjDum87ICM5NDJGCivpkLAgPiBxacSBbzsgIzk0MzAKK+mQsSA+IHFpxIFuOyAjOTQzMQor6ZCyID4gemjDum87ICM5NDMyCivpkLMgPiBsw6lpOyAjOTQzMwor6ZC0ID4gYsOsOyAjOTQzNAor6ZC1ID4gdGnElTsgIzk0MzUKK+mQtiA+IGh1w6FuOyAjOTQzNgor6ZC3ID4gecOoOyAjOTQzNwor6ZC4ID4gZMO6bzsgIzk0MzgKK+mQuSA+IGfFrW87ICM5NDM5CivpkLogPiBkxIFuZzsgIzk0M0EKK+mQuyA+IGrDuTsgIzk0M0IKK+mQvCA+IGbDqW47ICM5NDNDCivpkL0gPiBkw6E7ICM5NDNECivpkL4gPiBiw6hpOyAjOTQzRQor6ZC/ID4gecOsOyAjOTQzRgor6ZGAID4gw6BpOyAjOTQ0MAor6ZGBID4gesWNbmc7ICM5NDQxCivpkYIgPiB4w7luOyAjOTQ0Mgor6ZGDID4gZGnDoG87ICM5NDQzCivpkYQgPiB6aMO5OyAjOTQ0NAor6ZGFID4gaMOpbmc7ICM5NDQ1CivpkYYgPiB6aMO5aTsgIzk0NDYKK+mRhyA+IGrEqzsgIzk0NDcKK+mRiCA+IG5pxJM7ICM5NDQ4CivpkYkgPiB0w6A7ICM5NDQ5CivpkYogPiBow7lvOyAjOTQ0QQor6ZGLID4gccOsbmc7ICM5NDRCCivpkYwgPiBixKtuOyAjOTQ0Qwor6ZGNID4gecSrbmc7ICM5NDRECivpkY4gPiBrw7lpOyAjOTQ0RQor6ZGPID4gbsOtbmc7ICM5NDRGCivpkZAgPiB4xas7ICM5NDUwCivpkZEgPiBqacOgbjsgIzk0NTEKK+mRkiA+IGppw6BuOyAjOTQ1Mgor6ZGUID4gY2jEgzsgIzk0NTQKK+mRlSA+IHpow6w7ICM5NDU1CivpkZYgPiBtacOoOyAjOTQ1Ngor6ZGXID4gbMOtOyAjOTQ1Nwor6ZGYID4gbMOpaTsgIzk0NTgKK+mRmSA+IGrEqzsgIzk0NTkKK+mRmiA+IHp1w6BuOyAjOTQ1QQor6ZGbID4ga3XDoG5nOyAjOTQ1Qgor6ZGcID4gc2jDoG5nOyAjOTQ1Qwor6ZGdID4gcMOpbmc7ICM5NDVECivpkZ4gPiBsw6A7ICM5NDVFCivpkZ8gPiBkw7o7ICM5NDVGCivpkaAgPiBzaMO5bzsgIzk0NjAKK+mRoSA+IGNow7lvOyAjOTQ2MQor6ZGiID4gbMecOyAjOTQ2Mgor6ZGjID4gYmnEgW87ICM5NDYzCivpkaQgPiBiw6BvOyAjOTQ2NAor6ZGlID4gbMWtOyAjOTQ2NQor6ZGoID4gbMOzbmc7ICM5NDY4CivpkakgPiDDqDsgIzk0NjkKK+mRqiA+IGzDujsgIzk0NkEKK+mRqyA+IHjEq247ICM5NDZCCivpkawgPiBqacOgbjsgIzk0NkMKK+mRrSA+IGzDoG47ICM5NDZECivpka4gPiBiw7M7ICM5NDZFCivpka8gPiBqacSBbjsgIzk0NkYKK+mRsCA+IHnDoG87ICM5NDcwCivpkbEgPiBjaMOhbjsgIzk0NzEKK+mRsiA+IHhpxIFuZzsgIzk0NzIKK+mRsyA+IGppw6BuOyAjOTQ3Mwor6ZG0ID4geMSrOyAjOTQ3NAor6ZG1ID4gZ3XDoG47ICM5NDc1CivpkbYgPiBjw6FuZzsgIzk0NzYKK+mRtyA+IG5pw6g7ICM5NDc3CivpkbggPiBsxJVpOyAjOTQ3OAor6ZG5ID4gY3XDoG47ICM5NDc5CivpkbogPiBxw7o7ICM5NDdBCivpkbsgPiBww6BuOyAjOTQ3Qgor6ZG8ID4gbMO6bzsgIzk0N0MKK+mRvSA+IHp1w6BuOyAjOTQ3RAor6ZG+ID4gbHXDoW47ICM5NDdFCivpkb8gPiB6w6FvOyAjOTQ3Rgor6ZKAID4gbmnDqDsgIzk0ODAKK+mSgSA+IGp1w6k7ICM5NDgxCivpkoIgPiB0xINuZzsgIzk0ODIKK+mSgyA+IHNoxa07ICM5NDgzCivpkoQgPiBsw6FuOyAjOTQ4NAor6ZKFID4gasSrbjsgIzk0ODUKK+mShiA+IHHDrXU7ICM5NDg2CivpkocgPiB5xK07ICM5NDg3CivpkoggPiB6aMSTbjsgIzk0ODgKK+mSiSA+IGTEq25nOyAjOTQ4OQor6ZKKID4gemjEgW87ICM5NDhBCivpkosgPiBww7I7ICM5NDhCCivpkowgPiBkacSDbzsgIzk0OEMKK+mSjSA+IHTFrTsgIzk0OEQKK+mSjiA+IHFpxIFuOyAjOTQ4RQor6ZKPID4gY2h1w6BuOyAjOTQ4Rgor6ZKQID4gc2jDoG47ICM5NDkwCivpkpEgPiBqw607ICM5NDkxCivpkpIgPiBmw6FuOyAjOTQ5Mgor6ZKTID4gZGnDoG87ICM5NDkzCivpkpQgPiBtw6luOyAjOTQ5NAor6ZKVID4gbseaOyAjOTQ5NQor6ZKWID4geMOtOyAjOTQ5Ngor6ZKXID4gY2jEgWk7ICM5NDk3CivpkpggPiB4w61uZzsgIzk0OTgKK+mSmSA+IGfDoGk7ICM5NDk5CivpkpogPiBiw7k7ICM5NDlBCivpkpsgPiB0w6BpOyAjOTQ5Qgor6ZKcID4gasO5OyAjOTQ5Qwor6ZKdID4gZMO5bjsgIzk0OUQKK+mSniA+IGNoxIFvOyAjOTQ5RQor6ZKfID4gemjFjW5nOyAjOTQ5Rgor6ZKgID4gbsOgOyAjOTRBMAor6ZKhID4gYsOoaTsgIzk0QTEKK+mSoiA+IGfEgW5nOyAjOTRBMgor6ZKjID4gYsSDbjsgIzk0QTMKK+mSpCA+IHFpw6FuOyAjOTRBNAor6ZKlID4gecOgbzsgIzk0QTUKK+mSpiA+IHHEq247ICM5NEE2CivpkqcgPiBqxatuOyAjOTRBNwor6ZKoID4gd8O5OyAjOTRBOAor6ZKpID4gZ8WNdTsgIzk0QTkKK+mSqiA+IGvDoG5nOyAjOTRBQQor6ZKrID4gZsSBbmc7ICM5NEFCCivpkqwgPiBow7pvOyAjOTRBQwor6ZKtID4gdMWPdTsgIzk0QUQKK+mSriA+IG7ErXU7ICM5NEFFCivpkq8gPiBixIM7ICM5NEFGCivpkrAgPiB5w7k7ICM5NEIwCivpkrEgPiBxacOhbjsgIzk0QjEKK+mSsiA+IHpoxJNuZzsgIzk0QjIKK+mSsyA+IHFpw6FuOyAjOTRCMwor6ZK0ID4gZ8WrOyAjOTRCNAor6ZK1ID4gYsWNOyAjOTRCNQor6ZK2ID4gxJM7ICM5NEI2CivpkrcgPiBwxY07ICM5NEI3CivpkrggPiBiw7k7ICM5NEI4CivpkrkgPiBiw6E7ICM5NEI5CivpkrogPiB5dcOoOyAjOTRCQQor6ZK7ID4genXDoG47ICM5NEJCCivpkrwgPiBtw7k7ICM5NEJDCivpkr0gPiBkw6BuOyAjOTRCRAor6ZK+ID4gamnEgzsgIzk0QkUKK+mSvyA+IGRpw6BuOyAjOTRCRgor6ZOAID4gecOzdTsgIzk0QzAKK+mTgSA+IHRpxJU7ICM5NEMxCivpk4IgPiBiw7M7ICM5NEMyCivpk4MgPiBsw61uZzsgIzk0QzMKK+mThCA+IHNow7lvOyAjOTRDNAor6ZOFID4gcWnEgW47ICM5NEM1Civpk4YgPiBsxK11OyAjOTRDNgor6ZOHID4gYsOgbzsgIzk0QzcKK+mTiCA+IHNow6w7ICM5NEM4Civpk4kgPiB4dcOgbjsgIzk0QzkKK+mTiiA+IHNow6k7ICM5NENBCivpk4sgPiBiw6w7ICM5NENCCivpk4wgPiBuxK07ICM5NENDCivpk40gPiBwxKs7ICM5NENECivpk44gPiBkw7pvOyAjOTRDRQor6ZOPID4geMOtbmc7ICM5NENGCivpk5AgPiBrw6BvOyAjOTREMAor6ZORID4gbMSDbzsgIzk0RDEKK+mTkiA+IMOocjsgIzk0RDIKK+mTkyA+IG3DoW5nOyAjOTREMwor6ZOUID4gecOgOyAjOTRENAor6ZOVID4gecWPdTsgIzk0RDUKK+mTliA+IGNow6luZzsgIzk0RDYKK+mTlyA+IGppw6E7ICM5NEQ3Civpk5ggPiB5w6k7ICM5NEQ4Civpk5kgPiBuw6FvOyAjOTREOQor6ZOaID4gemjDrDsgIzk0REEKK+mTmyA+IGTEgW5nOyAjOTREQgor6ZOcID4gdMOzbmc7ICM5NERDCivpk50gPiBsx5o7ICM5NERECivpk54gPiBkacOgbzsgIzk0REUKK+mTnyA+IHnEq247ICM5NERGCivpk6AgPiBrxINpOyAjOTRFMAor6ZOhID4gemjDoTsgIzk0RTEKK+mToiA+IHpoxas7ICM5NEUyCivpk6MgPiB4acSDbjsgIzk0RTMKK+mTpCA+IHTErW5nOyAjOTRFNAor6ZOlID4gZMSrdTsgIzk0RTUKK+mTpiA+IHhpxIFuOyAjOTRFNgor6ZOnID4gaHXDoTsgIzk0RTcKK+mTqCA+IHF1w6FuOyAjOTRFOAor6ZOpID4gc2jEgTsgIzk0RTkKK+mTqiA+IGppw6E7ICM5NEVBCivpk6sgPiB5w6FvOyAjOTRFQgor6ZOsID4gZ8OoOyAjOTRFQwor6ZOtID4gbcOtbmc7ICM5NEVECivpk64gPiB6aMSTbmc7ICM5NEVFCivpk68gPiBzw6g7ICM5NEVGCivpk7AgPiBqacSDbzsgIzk0RjAKK+mTsSA+IHnErTsgIzk0RjEKK+mTsiA+IGNoxINuOyAjOTRGMgor6ZOzID4gY2jDsm5nOyAjOTRGMwor6ZO0ID4gdMOgbmc7ICM5NEY0Civpk7UgPiDEgW47ICM5NEY1Civpk7YgPiB5w61uOyAjOTRGNgor6ZO3ID4gcsWtOyAjOTRGNwor6ZO4ID4gemjDuTsgIzk0RjgKK+mTuSA+IGzDoW87ICM5NEY5Civpk7ogPiBwxas7ICM5NEZBCivpk7sgPiB3w7o7ICM5NEZCCivpk7wgPiBsw6FpOyAjOTRGQwor6ZO9ID4gdMOoOyAjOTRGRAor6ZO+ID4gbGnDoG47ICM5NEZFCivpk78gPiBrxJNuZzsgIzk0RkYKK+mUgCA+IHhpxIFvOyAjOTUwMAor6ZSBID4gc8WtbzsgIzk1MDEKK+mUgiA+IGzErTsgIzk1MDIKK+mUgyA+IHpow6huZzsgIzk1MDMKK+mUhCA+IGNow7o7ICM5NTA0CivplIUgPiBnxatvOyAjOTUwNQor6ZSGID4gZ8OgbzsgIzk1MDYKK+mUhyA+IHRpxJU7ICM5NTA3CivplIggPiB4w6x1OyAjOTUwOAor6ZSJID4gY8O5bzsgIzk1MDkKK+mUiiA+IGzHnGU7ICM5NTBBCivplIsgPiBmxJNuZzsgIzk1MEIKK+mUjCA+IHjEq247ICM5NTBDCivplI0gPiBsxK11OyAjOTUwRAor6ZSOID4ga8SBaTsgIzk1MEUKK+mUjyA+IGppxINuOyAjOTUwRgor6ZSQID4gcsO5aTsgIzk1MTAKK+mUkSA+IHTDrDsgIzk1MTEKK+mUkiA+IGzDoW5nOyAjOTUxMgor6ZSTID4gcWnEgW47ICM5NTEzCivplJQgPiBqw7o7ICM5NTE0CivplJUgPiDEgTsgIzk1MTUKK+mUliA+IHFpxIFuZzsgIzk1MTYKK+mUlyA+IGTFrW87ICM5NTE3CivplJggPiB0acSDbjsgIzk1MTgKK+mUmSA+IGPDuW87ICM5NTE5CivplJogPiBtw6FvOyAjOTUxQQor6ZSbID4gYsSTbjsgIzk1MUIKK+mUnCA+IHHDrTsgIzk1MUMKK+mUnSA+IGTDqTsgIzk1MUQKK+mUniA+IGt1xIM7ICM5NTFFCivplJ8gPiBrxatuOyAjOTUxRgor6ZSgID4gY2jEgW5nOyAjOTUyMAor6ZShID4geMOtOyAjOTUyMQor6ZSiID4gZ8O5OyAjOTUyMgor6ZSjID4gbMO6bzsgIzk1MjMKK+mUpCA+IGNow7ppOyAjOTUyNAor6ZSlID4gemjFq2k7ICM5NTI1CivplKYgPiBqxK1uOyAjOTUyNgor6ZSnID4gemjDrDsgIzk1MjcKK+mUqCA+IHhpxIFuOyAjOTUyOAor6ZSpID4ganXDoG47ICM5NTI5CivplKogPiBoxatvOyAjOTUyQQor6ZSrID4gcMOzdTsgIzk1MkIKK+mUrCA+IHTDoW47ICM5NTJDCivplK0gPiBkw6xuZzsgIzk1MkQKK+mUriA+IGppw6BuOyAjOTUyRQor6ZSvID4gasO5OyAjOTUyRgor6ZSwID4gbcSVbmc7ICM5NTMwCivplLEgPiB6xKs7ICM5NTMxCivplLIgPiBxacOoOyAjOTUzMgor6ZSzID4gecSrbmc7ICM5NTMzCivplLQgPiBrxINpOyAjOTUzNAor6ZS1ID4gcWnEgW5nOyAjOTUzNQor6ZS2ID4gc8WNbmc7ICM5NTM2CivplLcgPiDDqDsgIzk1MzcKK+mUuCA+IGNow6E7ICM5NTM4CivplLkgPiBxacSBbzsgIzk1MzkKK+mUuiA+IHpoxY1uZzsgIzk1M0EKK+mUuyA+IGR1w6BuOyAjOTUzQgor6ZS8ID4gc8WNdTsgIzk1M0MKK+mUvSA+IGh1w6FuZzsgIzk1M0QKK+mUviA+IGh1w6FuOyAjOTUzRQor6ZS/ID4gxIFpOyAjOTUzRgor6ZWAID4gZMO5OyAjOTU0MAor6ZWBID4gbcSVaTsgIzk1NDEKK+mVgiA+IGzDsnU7ICM5NTQyCivplYMgPiB6xKs7ICM5NTQzCivplYQgPiBmw6hpOyAjOTU0NAor6ZWFID4gbcOpaTsgIzk1NDUKK+mVhiA+IG3DsjsgIzk1NDYKK+mVhyA+IHpow6huOyAjOTU0Nwor6ZWIID4gYsOzOyAjOTU0OAor6ZWJID4gZ8OpOyAjOTU0OQor6ZWKID4gbmnDqDsgIzk1NEEKK+mViyA+IHTEg25nOyAjOTU0Qgor6ZWMID4ganXEgW47ICM5NTRDCivplY0gPiBuacOoOyAjOTU0RAor6ZWOID4gbsOhOyAjOTU0RQor6ZWPID4gbMOtdTsgIzk1NEYKK+mVkCA+IGjDoG87ICM5NTUwCivplZEgPiBiw6BuZzsgIzk1NTEKK+mVkiA+IHnDrDsgIzk1NTIKK+mVkyA+IGppxIE7ICM5NTUzCivplZQgPiBixKtuOyAjOTU1NAor6ZWVID4gcsOzbmc7ICM5NTU1CivplZYgPiBiacSBbzsgIzk1NTYKK+mVlyA+IHTEgW5nOyAjOTU1Nwor6ZWYID4gbcOgbjsgIzk1NTgKK+mVmSA+IGzDum87ICM5NTU5CivplZogPiBiw6huZzsgIzk1NUEKK+mVmyA+IHnFjW5nOyAjOTU1Qgor6ZWcID4gasOsbmc7ICM5NTVDCivplZ0gPiBkw607ICM5NTVECivplZ4gPiB6w7o7ICM5NTVFCivplZ8gPiB4dcOgbjsgIzk1NUYKK+mVoCA+IGzDrXU7ICM5NTYwCivplaEgPiB0w6FuOyAjOTU2MQor6ZWiID4ganXDqTsgIzk1NjIKK+mVoyA+IGxpw6FvOyAjOTU2Mwor6ZWkID4gcMO6OyAjOTU2NAor6ZWlID4gbMWtOyAjOTU2NQor6ZWmID4gZMO5aTsgIzk1NjYKK+mVpyA+IGzDoG47ICM5NTY3CivplaggPiBwxa07ICM5NTY4CivplakgPiBjdcOgbjsgIzk1NjkKK+mVqiA+IHFpxIFuZzsgIzk1NkEKK+mVqyA+IGTEk25nOyAjOTU2Qgor6ZWsID4gaMO5bzsgIzk1NkMKK+mVrSA+IGzDqWk7ICM5NTZECivpla4gPiBodcOhbjsgIzk1NkUKK+mVryA+IHpow7pvOyAjOTU2Rgor6ZWwID4gbGnDoW47ICM5NTcwCivplbEgPiB5w6w7ICM5NTcxCivplbIgPiBjaMSDOyAjOTU3Mgor6ZWzID4gYmnEgW87ICM5NTczCivplbQgPiBsw6A7ICM5NTc0CivplbUgPiBjaMOhbjsgIzk1NzUKK+mVtiA+IHhpxIFuZzsgIzk1NzYKK+mVtyA+IGNow6FuZzsgIzk1NzcKK+mVuCA+IGNow6FuZzsgIzk1NzgKK+mVuSA+IGrErXU7ICM5NTc5CivplbogPiDEg287ICM5NTdBCivplbsgPiBkacOpOyAjOTU3Qgor6ZW8ID4gccWrOyAjOTU3Qwor6ZW9ID4gbGnEg287ICM5NTdECivplb4gPiBtw607ICM5NTdFCivplb8gPiBjaMOhbmc7ICM5NTdGCivploAgPiBtw6luOyAjOTU4MAor6ZaBID4gbcOgOyAjOTU4MQor6ZaCID4gc2h1xIFuOyAjOTU4Mgor6ZaDID4gc2jEg247ICM5NTgzCivploQgPiBow7lvOyAjOTU4NAor6ZaFID4gbcOpbjsgIzk1ODUKK+mWhiA+IHnDoG47ICM5NTg2CivplocgPiBiw6w7ICM5NTg3CivploggPiBow6BuOyAjOTU4OAor6ZaJID4gYsOsOyAjOTU4OQor6ZaLID4ga8SBaTsgIzk1OEIKK+mWjCA+IGvDoG5nOyAjOTU4Qwor6ZaNID4gYsSTbmc7ICM5NThECivplo4gPiBow7NuZzsgIzk1OEUKK+mWjyA+IHLDuW47ICM5NThGCivplpAgPiBzw6BuOyAjOTU5MAor6ZaRID4geGnDoW47ICM5NTkxCivplpIgPiB4acOhbjsgIzk1OTIKK+mWkyA+IGppxIFuOyAjOTU5Mwor6ZaUID4gbcStbjsgIzk1OTQKK+mWlSA+IHhpxIE7ICM5NTk1CivplpcgPiBkw7J1OyAjOTU5Nwor6ZaYID4gemjDoTsgIzk1OTgKK+mWmSA+IG7DoG87ICM5NTk5CivplpogPiBqaWFuOyAjOTU5QQor6ZabID4gcMSTbmc7ICM5NTlCCivplpwgPiB4acSDOyAjOTU5Qwor6ZadID4gbMOtbmc7ICM5NTlECivplp4gPiBiacOgbjsgIzk1OUUKK+mWnyA+IGLDrDsgIzk1OUYKK+mWoCA+IHLDuW47ICM5NUEwCivplqEgPiBow6k7ICM5NUExCivplqIgPiBndcSBbjsgIzk1QTIKK+mWoyA+IGfDqTsgIzk1QTMKK+mWpCA+IGfDqTsgIzk1QTQKK+mWpSA+IGbDoTsgIzk1QTUKK+mWpiA+IGNow7k7ICM5NUE2CivplqcgPiBow7JuZzsgIzk1QTcKK+mWqCA+IGfFq2k7ICM5NUE4CivplqkgPiBtxK1uOyAjOTVBOQor6ZarID4ga8WtbjsgIzk1QUIKK+mWrCA+IGzEg25nOyAjOTVBQwor6ZatID4gbMeYOyAjOTVBRAor6ZauID4gdMOtbmc7ICM5NUFFCivplq8gPiBzaMOgOyAjOTVBRgor6ZawID4gasO6OyAjOTVCMAor6ZaxID4geXXDqDsgIzk1QjEKK+mWsiA+IHl1w6g7ICM5NUIyCivplrMgPiBjaMSDbjsgIzk1QjMKK+mWtCA+IHHDuTsgIzk1QjQKK+mWtSA+IGzDrG47ICM5NUI1CivplrYgPiBjaMSBbmc7ICM5NUI2CivplrcgPiBzaMOgaTsgIzk1QjcKK+mWuCA+IGvFrW47ICM5NUI4CivplrkgPiB5xIFuOyAjOTVCOQor6Za6ID4gbcOtbjsgIzk1QkEKK+mWuyA+IHnDoW47ICM5NUJCCivplrwgPiDDqDsgIzk1QkMKK+mWvSA+IGjFq247ICM5NUJECivplr4gPiB5w7k7ICM5NUJFCivplr8gPiB3w6luOyAjOTVCRgor6ZeAID4geGnDoG5nOyAjOTVDMAor6ZeBID4gYmFvOyAjOTVDMQor6ZeCID4geGnDoG5nOyAjOTVDMgor6ZeDID4gccO5OyAjOTVDMwor6ZeEID4gecSDbzsgIzk1QzQKK+mXhSA+IHfDqW47ICM5NUM1Civpl4YgPiBixINuOyAjOTVDNgor6ZeHID4gw6BuOyAjOTVDNwor6ZeIID4gd8OpaTsgIzk1QzgKK+mXiSA+IHnEq247ICM5NUM5Civpl4ogPiBrw7lvOyAjOTVDQQor6ZeLID4gcXXDqDsgIzk1Q0IKK+mXjCA+IGzDoW47ICM5NUNDCivpl40gPiBkxas7ICM5NUNECivpl5AgPiB0acOhbjsgIzk1RDAKK+mXkSA+IG5pw6g7ICM5NUQxCivpl5IgPiB0w6A7ICM5NUQyCivpl5MgPiBrxINpOyAjOTVEMwor6ZeUID4gaMOpOyAjOTVENAor6ZeVID4gcXXDqDsgIzk1RDUKK+mXliA+IGNodcSDbmc7ICM5NUQ2Civpl5cgPiBndcSBbjsgIzk1RDcKK+mXmCA+IGTDsnU7ICM5NUQ4Civpl5kgPiBxxK07ICM5NUQ5Civpl5ogPiBrxatpOyAjOTVEQQor6ZebID4gdMOhbmc7ICM5NURCCivpl5wgPiBndcSBbjsgIzk1REMKK+mXnSA+IHBpw6FvOyAjOTVERAor6ZeeID4ga8OgbjsgIzk1REUKK+mXnyA+IHjDrDsgIzk1REYKK+mXoCA+IGjDuWk7ICM5NUUwCivpl6EgPiBjaMSDbjsgIzk1RTEKK+mXoiA+IHDDrDsgIzk1RTIKK+mXoyA+IGTDoG5nOyAjOTVFMwor6ZekID4gaHXDoW47ICM5NUU0Civpl6UgPiB0w6A7ICM5NUU1Civpl6YgPiB3w6luOyAjOTVFNgor6ZeoID4gbcOpbjsgIzk1RTgKK+mXqSA+IHNodcSBbjsgIzk1RTkKK+mXqiA+IHNoxINuOyAjOTVFQQor6ZerID4gecOgbjsgIzk1RUIKK+mXrCA+IGjDoG47ICM5NUVDCivpl60gPiBiw6w7ICM5NUVECivpl64gPiB3w6huOyAjOTVFRQor6ZevID4gY2h1xINuZzsgIzk1RUYKK+mXsCA+IHLDuW47ICM5NUYwCivpl7EgPiB3w6lpOyAjOTVGMQor6ZeyID4geGnDoW47ICM5NUYyCivpl7MgPiBow7NuZzsgIzk1RjMKK+mXtCA+IGppxIFuOyAjOTVGNAor6Ze1ID4gbcStbjsgIzk1RjUKK+mXtiA+IGvDoG5nOyAjOTVGNgor6Ze3ID4gbcOobjsgIzk1RjcKK+mXuCA+IHpow6E7ICM5NUY4Civpl7kgPiBuw6BvOyAjOTVGOQor6Ze6ID4gZ8WraTsgIzk1RkEKK+mXuyA+IHfDqW47ICM5NUZCCivpl7wgPiB0w6A7ICM5NUZDCivpl70gPiBtxK1uOyAjOTVGRAor6Ze+ID4gbMeYOyAjOTVGRQor6Ze/ID4ga8SDaTsgIzk1RkYKK+mYgCA+IGbDoTsgIzk2MDAKK+mYgSA+IGfDqTsgIzk2MDEKK+mYgiA+IGjDqTsgIzk2MDIKK+mYgyA+IGvFrW47ICM5NjAzCivpmIQgPiBqxKt1OyAjOTYwNAor6ZiFID4geXXDqDsgIzk2MDUKK+mYhiA+IGzEg25nOyAjOTYwNgor6ZiHID4gZMWrOyAjOTYwNwor6ZiIID4gecO5OyAjOTYwOAor6ZiJID4gecSBbjsgIzk2MDkKK+mYiiA+IGNoxIFuZzsgIzk2MEEKK+mYiyA+IHjDrDsgIzk2MEIKK+mYjCA+IHfDqW47ICM5NjBDCivpmI0gPiBoxatuOyAjOTYwRAor6ZiOID4gecOhbjsgIzk2MEUKK+mYjyA+IMOoOyAjOTYwRgor6ZiQID4gY2jEg247ICM5NjEwCivpmJEgPiBsw6FuOyAjOTYxMQor6ZiSID4gccO5OyAjOTYxMgor6ZiTID4gaMO5aTsgIzk2MTMKK+mYlCA+IGvDuW87ICM5NjE0CivpmJUgPiBxdcOoOyAjOTYxNQor6ZiWID4gZ8OpOyAjOTYxNgor6ZiXID4gdGnDoW47ICM5NjE3CivpmJggPiB0w6A7ICM5NjE4CivpmJkgPiBxdcOoOyAjOTYxOQor6ZiaID4ga8OgbjsgIzk2MUEKK+mYmyA+IGh1w6FuOyAjOTYxQgor6ZicID4gZsO5OyAjOTYxQwor6ZidID4gZsO5OyAjOTYxRAor6ZieID4gbMOoOyAjOTYxRQor6ZifID4gZMO5aTsgIzk2MUYKK+mYoCA+IHjDrG47ICM5NjIwCivpmKEgPiBxacSBbjsgIzk2MjEKK+mYoiA+IHfDuTsgIzk2MjIKK+mYoyA+IHnDrDsgIzk2MjMKK+mYpCA+IHTDum87ICM5NjI0CivpmKUgPiB5xKtuOyAjOTYyNQor6ZimID4gecOhbmc7ICM5NjI2CivpmKcgPiBkxY91OyAjOTYyNwor6ZioID4gw6g7ICM5NjI4CivpmKkgPiBzaMSTbmc7ICM5NjI5CivpmKogPiBixINuOyAjOTYyQQor6ZirID4gcMOpaTsgIzk2MkIKK+mYrCA+IGvEk25nOyAjOTYyQwor6ZitID4gecWtbjsgIzk2MkQKK+mYriA+IHJ1xINuOyAjOTYyRQor6ZivID4gemjErTsgIzk2MkYKK+mYsCA+IHDDrTsgIzk2MzAKK+mYsSA+IGrErW5nOyAjOTYzMQor6ZiyID4gZsOhbmc7ICM5NjMyCivpmLMgPiB5w6FuZzsgIzk2MzMKK+mYtCA+IHnEq247ICM5NjM0CivpmLUgPiB6aMOobjsgIzk2MzUKK+mYtiA+IGppxJM7ICM5NjM2CivpmLcgPiBjaMSTbmc7ICM5NjM3CivpmLggPiDDqDsgIzk2MzgKK+mYuSA+IHHFqzsgIzk2MzkKK+mYuiA+IGTErTsgIzk2M0EKK+mYuyA+IHrFrTsgIzk2M0IKK+mYvCA+IHrDuW87ICM5NjNDCivpmL0gPiBkacOgbjsgIzk2M0QKK+mYviA+IGzErW5nOyAjOTYzRQor6Zi/ID4gxIE7ICM5NjNGCivpmYAgPiB0w7pvOyAjOTY0MAor6ZmBID4gdMO6bzsgIzk2NDEKK+mZgiA+IHDFjTsgIzk2NDIKK+mZgyA+IGLErW5nOyAjOTY0Mwor6ZmEID4gZsO5OyAjOTY0NAor6ZmFID4gasOsOyAjOTY0NQor6ZmGID4gbMO5OyAjOTY0Ngor6ZmHID4gbMWPbmc7ICM5NjQ3CivpmYggPiBjaMOpbjsgIzk2NDgKK+mZiSA+IHjDrW5nOyAjOTY0OQor6ZmKID4gZMO5bzsgIzk2NEEKK+mZiyA+IGzDsnU7ICM5NjRCCivpmYwgPiBtw7I7ICM5NjRDCivpmY0gPiBqacOgbmc7ICM5NjRECivpmY4gPiBzaMWrOyAjOTY0RQor6ZmPID4gZMO5bzsgIzk2NEYKK+mZkCA+IHhpw6BuOyAjOTY1MAor6ZmRID4gw6lyOyAjOTY1MQor6ZmSID4gZ8WtaTsgIzk2NTIKK+mZkyA+IHnFqzsgIzk2NTMKK+mZlCA+IGfEgWk7ICM5NjU0CivpmZUgPiBzaMSDbjsgIzk2NTUKK+mZliA+IHjDuW47ICM5NjU2CivpmZcgPiBxacOgbzsgIzk2NTcKK+mZmCA+IHjDrW5nOyAjOTY1OAor6ZmZID4gY2jDum47ICM5NjU5CivpmZogPiBmw7k7ICM5NjVBCivpmZsgPiBiw6w7ICM5NjVCCivpmZwgPiB4acOhOyAjOTY1Qwor6ZmdID4gc2jEg247ICM5NjVECivpmZ4gPiBzaMSTbmc7ICM5NjVFCivpmZ8gPiB6aMOsOyAjOTY1Rgor6ZmgID4gcMWrOyAjOTY2MAor6ZmhID4gZMWPdTsgIzk2NjEKK+mZoiA+IHl1w6BuOyAjOTY2Mgor6ZmjID4gemjDqG47ICM5NjYzCivpmaQgPiBjaMO6OyAjOTY2NAor6ZmlID4geGnDoG47ICM5NjY1CivpmacgPiBuacOoOyAjOTY2Nwor6ZmoID4gecWtbjsgIzk2NjgKK+mZqSA+IHhpxINuOyAjOTY2OQor6ZmqID4gcMOpaTsgIzk2NkEKK+mZqyA+IHDDqWk7ICM5NjZCCivpmawgPiB6xY11OyAjOTY2Qwor6ZmtID4gecSrOyAjOTY2RAor6ZmuID4gZMWtaTsgIzk2NkUKK+mZryA+IGzDum47ICM5NjZGCivpmbAgPiB5xKtuOyAjOTY3MAor6ZmxID4gasWrOyAjOTY3MQor6ZmyID4gY2jDumk7ICM5NjcyCivpmbMgPiBjaMOpbjsgIzk2NzMKK+mZtCA+IHDDrTsgIzk2NzQKK+mZtSA+IGzDrW5nOyAjOTY3NQor6Zm2ID4gdMOhbzsgIzk2NzYKK+mZtyA+IHhpw6BuOyAjOTY3Nwor6Zm4ID4gbMO5OyAjOTY3OAor6Zm5ID4gc2hlbmc7ICM5Njc5CivpmbogPiB4acSDbjsgIzk2N0EKK+mZuyA+IHnEq247ICM5NjdCCivpmbwgPiB6aMWtOyAjOTY3Qwor6Zm9ID4gecOhbmc7ICM5NjdECivpmb4gPiByw6luZzsgIzk2N0UKK+mZvyA+IHNoxINuOyAjOTY3Rgor6ZqAID4gY2jDs25nOyAjOTY4MAor6ZqBID4gecOgbjsgIzk2ODEKK+magiA+IHnEq247ICM5NjgyCivpmoMgPiB5w7o7ICM5NjgzCivpmoQgPiB0w607ICM5Njg0CivpmoUgPiB5w7o7ICM5Njg1CivpmoYgPiBsw7NuZzsgIzk2ODYKK+mahyA+IHfEk2k7ICM5Njg3CivpmoggPiB3xJNpOyAjOTY4OAor6ZqJID4gbmnDqDsgIzk2ODkKK+maiiA+IGTDuWk7ICM5NjhBCivpmosgPiBzw7ppOyAjOTY4Qgor6ZqMID4gxINuOyAjOTY4Qwor6ZqNID4gaHXDoW5nOyAjOTY4RAor6ZqOID4gamnEkzsgIzk2OEUKK+majyA+IHPDumk7ICM5NjhGCivpmpAgPiB5xK1uOyAjOTY5MAor6ZqRID4gZ8SBaTsgIzk2OTEKK+makiA+IHnEg247ICM5NjkyCivpmpMgPiBoxatpOyAjOTY5Mwor6ZqUID4gZ8OpOyAjOTY5NAor6ZqVID4gecWtbjsgIzk2OTUKK+maliA+IHfDuTsgIzk2OTYKK+malyA+IHfElWk7ICM5Njk3CivpmpggPiDDoGk7ICM5Njk4CivpmpkgPiB4w6w7ICM5Njk5CivpmpogPiB0w6FuZzsgIzk2OUEKK+mamyA+IGrDrDsgIzk2OUIKK+manCA+IHpow6BuZzsgIzk2OUMKK+manSA+IGTEg287ICM5NjlECivpmp4gPiDDoW87ICM5NjlFCivpmp8gPiB4w6w7ICM5NjlGCivpmqAgPiB5xK1uOyAjOTZBMAor6ZqiID4gcsOgbzsgIzk2QTIKK+maoyA+IGzDrW47ICM5NkEzCivpmqQgPiB0w7ppOyAjOTZBNAor6ZqlID4gZMOobmc7ICM5NkE1CivpmqYgPiBwxK07ICM5NkE2CivpmqcgPiBzw7lpOyAjOTZBNwor6ZqoID4gc8O6aTsgIzk2QTgKK+maqSA+IHnDuTsgIzk2QTkKK+maqiA+IHhpxINuOyAjOTZBQQor6ZqrID4gZsSTbjsgIzk2QUIKK+marCA+IG7ErTsgIzk2QUMKK+marSA+IMOpcjsgIzk2QUQKK+mariA+IGrEqzsgIzk2QUUKK+maryA+IGTEg287ICM5NkFGCivpmrAgPiB4w607ICM5NkIwCivpmrEgPiB5xK1uOyAjOTZCMQor6ZqyID4gw6k7ICM5NkIyCivpmrMgPiBoxatpOyAjOTZCMwor6Zq0ID4gbMWPbmc7ICM5NkI0CivpmrUgPiB4xKs7ICM5NkI1CivpmrYgPiBsw6w7ICM5NkI2CivpmrcgPiBsw6w7ICM5NkI3CivpmrggPiBsw6w7ICM5NkI4CivpmrkgPiB6aMWraTsgIzk2QjkKK+mauiA+IGjDqDsgIzk2QkEKK+mauyA+IHpoxKs7ICM5NkJCCivpmrwgPiB6aMWtbjsgIzk2QkMKK+mavSA+IGrDuW47ICM5NkJECivpmr4gPiBuw6FuOyAjOTZCRQor6Zq/ID4gecOsOyAjOTZCRgor6ZuAID4gcXXDqDsgIzk2QzAKK+mbgSA+IHnDoG47ICM5NkMxCivpm4IgPiBxacOhbjsgIzk2QzIKK+mbgyA+IHnEgzsgIzk2QzMKK+mbhCA+IHjDrW9uZzsgIzk2QzQKK+mbhSA+IHnEgzsgIzk2QzUKK+mbhiA+IGrDrTsgIzk2QzYKK+mbhyA+IGfDuTsgIzk2QzcKK+mbiCA+IGh1w6FuOyAjOTZDOAor6ZuJID4gemjDrDsgIzk2QzkKK+mbiiA+IGfDsnU7ICM5NkNBCivpm4sgPiBqw7luOyAjOTZDQgor6ZuMID4gY8OtOyAjOTZDQwor6ZuNID4gecWNbmc7ICM5NkNECivpm44gPiBqxas7ICM5NkNFCivpm48gPiBjaMO6OyAjOTZDRgor6ZuQID4gaMWrOyAjOTZEMAor6ZuRID4gesOhOyAjOTZEMQor6ZuSID4gbMO5bzsgIzk2RDIKK+mbkyA+IHnDujsgIzk2RDMKK+mblCA+IGNow7N1OyAjOTZENAor6ZuVID4gZGnEgW87ICM5NkQ1Civpm5YgPiBzxatpOyAjOTZENgor6ZuXID4gaMOgbjsgIzk2RDcKK+mbmCA+IGjDuW87ICM5NkQ4Civpm5kgPiBzaHXEgW5nOyAjOTZEOQor6ZuaID4gZ3XDoG47ICM5NkRBCivpm5sgPiBjaMO6OyAjOTZEQgor6ZucID4gesOhOyAjOTZEQwor6ZudID4gecWNbmc7ICM5NkRECivpm54gPiBqxKs7ICM5NkRFCivpm58gPiB4xKs7ICM5NkRGCivpm6AgPiBjaMOzdTsgIzk2RTAKK+mboSA+IGzDrHU7ICM5NkUxCivpm6IgPiBsw607ICM5NkUyCivpm6MgPiBuw6FuOyAjOTZFMwor6ZukID4geHXDqTsgIzk2RTQKK+mbpSA+IHrDoTsgIzk2RTUKK+mbpiA+IGrDrTsgIzk2RTYKK+mbpyA+IGrDrTsgIzk2RTcKK+mbqCA+IHnFrTsgIzk2RTgKK+mbqSA+IHnDujsgIzk2RTkKK+mbqiA+IHh1xJU7ICM5NkVBCivpm6sgPiBuxIM7ICM5NkVCCivpm6wgPiBmxY91OyAjOTZFQwor6ZutID4gc8OoOyAjOTZFRAor6ZuuID4gbcO5OyAjOTZFRQor6ZuvID4gd8OpbjsgIzk2RUYKK+mbsCA+IGbEk247ICM5NkYwCivpm7EgPiBww6FuZzsgIzk2RjEKK+mbsiA+IHnDum47ICM5NkYyCivpm7MgPiBsw6w7ICM5NkYzCivpm7QgPiBsw6w7ICM5NkY0Civpm7UgPiDEg25nOyAjOTZGNQor6Zu2ID4gbMOtbmc7ICM5NkY2Civpm7cgPiBsw6lpOyAjOTZGNwor6Zu4ID4gw6FuOyAjOTZGOAor6Zu5ID4gYsOhbzsgIzk2RjkKK+mbuiA+IG3DqW5nOyAjOTZGQQor6Zu7ID4gZGnDoG47ICM5NkZCCivpm7wgPiBkw6BuZzsgIzk2RkMKK+mbvSA+IHjDrW5nOyAjOTZGRAor6Zu+ID4gd8O5OyAjOTZGRQor6Zu/ID4gemjDoG87ICM5NkZGCivpnIAgPiB4xas7ICM5NzAwCivpnIEgPiBqw6w7ICM5NzAxCivpnIIgPiBtw7k7ICM5NzAyCivpnIMgPiBjaMOpbjsgIzk3MDMKK+mchCA+IHhpxIFvOyAjOTcwNAor6ZyFID4gemjDoTsgIzk3MDUKK+mchiA+IHTDrW5nOyAjOTcwNgor6ZyHID4gemjDqG47ICM5NzA3CivpnIggPiBww6hpOyAjOTcwOAor6ZyJID4gbcOpaTsgIzk3MDkKK+mciiA+IGzDrW5nOyAjOTcwQQor6ZyLID4gccSrOyAjOTcwQgor6ZyMID4gY2jFjXU7ICM5NzBDCivpnI0gPiBow7lvOyAjOTcwRAor6ZyOID4gc2jDoDsgIzk3MEUKK+mcjyA+IGbEk2k7ICM5NzBGCivpnJAgPiB3xJNuZzsgIzk3MTAKK+mckSA+IHpoxIFuOyAjOTcxMQor6ZySID4gecSrbjsgIzk3MTIKK+mckyA+IG7DrTsgIzk3MTMKK+mclCA+IGNow7J1OyAjOTcxNAor6ZyVID4gdMO6bjsgIzk3MTUKK+mcliA+IGzDrW47ICM5NzE2CivpnJggPiBkw7JuZzsgIzk3MTgKK+mcmSA+IHnEq25nOyAjOTcxOQor6ZyaID4gd8O5OyAjOTcxQQor6ZybID4gbMOtbmc7ICM5NzFCCivpnJwgPiBzaHXEgW5nOyAjOTcxQwor6ZydID4gbMOtbmc7ICM5NzFECivpnJ4gPiB4acOhOyAjOTcxRQor6ZyfID4gaMOzbmc7ICM5NzFGCivpnKAgPiB5xKtuOyAjOTcyMAor6ZyhID4gbcOyOyAjOTcyMQor6ZyiID4gbcOgaTsgIzk3MjIKK+mcoyA+IHnFrW47ICM5NzIzCivpnKQgPiBsw6x1OyAjOTcyNAor6ZylID4gbcOobmc7ICM5NzI1CivpnKYgPiBixKtuOyAjOTcyNgor6ZynID4gd8O5OyAjOTcyNwor6ZyoID4gd8OoaTsgIzk3MjgKK+mcqSA+IGjDuW87ICM5NzI5CivpnKogPiB5w61uOyAjOTcyQQor6ZyrID4geMOtOyAjOTcyQgor6ZysID4gecOsOyAjOTcyQwor6ZytID4gxINpOyAjOTcyRAor6ZyuID4gZMOgbjsgIzk3MkUKK+mcryA+IGTDqG5nOyAjOTcyRgor6ZywID4geGnDoG47ICM5NzMwCivpnLEgPiB5w7k7ICM5NzMxCivpnLIgPiBsw7k7ICM5NzMyCivpnLMgPiBsw7NuZzsgIzk3MzMKK+mctCA+IGTDoGk7ICM5NzM0CivpnLUgPiBqw607ICM5NzM1CivpnLYgPiBww6FuZzsgIzk3MzYKK+mctyA+IHnDoW5nOyAjOTczNwor6Zy4ID4gYsOgOyAjOTczOAor6Zy5ID4gcMSrOyAjOTczOQor6Zy6ID4gd8OpaTsgIzk3M0EKK+mcvCA+IHjErTsgIzk3M0MKK+mcvSA+IGrDrDsgIzk3M0QKK+mcviA+IG3DoWk7ICM5NzNFCivpnL8gPiBtw6huZzsgIzk3M0YKK+mdgCA+IG3DqW5nOyAjOTc0MAor6Z2BID4gbMOpaTsgIzk3NDEKK+mdgiA+IGzDrDsgIzk3NDIKK+mdgyA+IGjDuW87ICM5NzQzCivpnYQgPiDEg2k7ICM5NzQ0CivpnYUgPiBmw6hpOyAjOTc0NQor6Z2GID4gZMOgaTsgIzk3NDYKK+mdhyA+IGzDs25nOyAjOTc0Nwor6Z2IID4gbMOtbmc7ICM5NzQ4CivpnYkgPiDDoGk7ICM5NzQ5CivpnYogPiBmxJNuZzsgIzk3NEEKK+mdiyA+IGzDrDsgIzk3NEIKK+mdjCA+IGLEg287ICM5NzRDCivpnY4gPiBow6g7ICM5NzRFCivpnY8gPiBow6g7ICM5NzRGCivpnZAgPiBiw6xuZzsgIzk3NTAKK+mdkSA+IHHEq25nOyAjOTc1MQor6Z2SID4gccSrbmc7ICM5NzUyCivpnZMgPiBqw6xuZzsgIzk3NTMKK+mdlCA+IHRpxIFuOyAjOTc1NAor6Z2VID4gemjEk247ICM5NzU1CivpnZYgPiBqw6xuZzsgIzk3NTYKK+mdlyA+IGNow6huZzsgIzk3NTcKK+mdmCA+IHHDrG5nOyAjOTc1OAor6Z2ZID4gasOsbmc7ICM5NzU5CivpnZogPiBqw6xuZzsgIzk3NUEKK+mdmyA+IGRpw6BuOyAjOTc1Qgor6Z2cID4gasOsbmc7ICM5NzVDCivpnZ0gPiB0acSBbjsgIzk3NUQKK+mdniA+IGbEk2k7ICM5NzVFCivpnZ8gPiBmxJNpOyAjOTc1Rgor6Z2gID4ga8OgbzsgIzk3NjAKK+mdoSA+IG3ErTsgIzk3NjEKK+mdoiA+IG1pw6BuOyAjOTc2Mgor6Z2jID4gbWnDoG47ICM5NzYzCivpnaQgPiBww6BvOyAjOTc2NAor6Z2lID4gecOoOyAjOTc2NQor6Z2mID4gdGnEg247ICM5NzY2CivpnacgPiBow7lpOyAjOTc2Nwor6Z2oID4gecOoOyAjOTc2OAor6Z2pID4gZ8OpOyAjOTc2OQor6Z2qID4gZMSrbmc7ICM5NzZBCivpnasgPiBjaMSBOyAjOTc2Qgor6Z2sID4gamnEgW47ICM5NzZDCivpna0gPiByw6huOyAjOTc2RAor6Z2uID4gZMOtOyAjOTc2RQor6Z2vID4gZMO5OyAjOTc2Rgor6Z2wID4gd8O5OyAjOTc3MAor6Z2xID4gcsOobjsgIzk3NzEKK+mdsiA+IHHDrW47ICM5NzcyCivpnbMgPiBqw6xuOyAjOTc3Mwor6Z20ID4geHXEkzsgIzk3NzQKK+mdtSA+IG7ErXU7ICM5Nzc1CivpnbYgPiBixIM7ICM5Nzc2CivpnbcgPiB5xK1uOyAjOTc3Nwor6Z24ID4gc8SDOyAjOTc3OAor6Z25ID4gbsOgOyAjOTc3OQor6Z26ID4gbcOyOyAjOTc3QQor6Z27ID4gesWtOyAjOTc3Qgor6Z28ID4gZMOhOyAjOTc3Qwor6Z29ID4gYsOgbjsgIzk3N0QKK+mdviA+IHnDrDsgIzk3N0UKK+mdvyA+IHnDoG87ICM5NzdGCivpnoAgPiB0w6FvOyAjOTc4MAor6Z6BID4gdMO6bzsgIzk3ODEKK+megiA+IGppw6E7ICM5NzgyCivpnoMgPiBow7NuZzsgIzk3ODMKK+mehCA+IHDDoW87ICM5Nzg0CivpnoUgPiB5xINuZzsgIzk3ODUKK+mehyA+IHnEq247ICM5Nzg3CivpnoggPiBqacOhOyAjOTc4OAor6Z6JID4gdMOhbzsgIzk3ODkKK+meiiA+IGrDrTsgIzk3OEEKK+meiyA+IHhpw6k7ICM5NzhCCivpnowgPiDEgW47ICM5NzhDCivpno0gPiDEgW47ICM5NzhECivpno4gPiBow6luOyAjOTc4RQor6Z6PID4gZ8WPbmc7ICM5NzhGCivpnpEgPiBkw6E7ICM5NzkxCivpnpIgPiBxacSBbzsgIzk3OTIKK+mekyA+IHTEq25nOyAjOTc5Mwor6Z6UID4gd8SDbjsgIzk3OTQKK+melSA+IHnDrG5nOyAjOTc5NQor6Z6WID4gc8WraTsgIzk3OTYKK+melyA+IHRpw6FvOyAjOTc5Nwor6Z6YID4gcWnDoG87ICM5Nzk4CivpnpkgPiB4dcOgbjsgIzk3OTkKK+memiA+IGvDsm5nOyAjOTc5QQor6Z6bID4gYsSVbmc7ICM5NzlCCivpnpwgPiB0w6A7ICM5NzlDCivpnp0gPiB6aMSDbmc7ICM5NzlECivpnp4gPiBixK1uZzsgIzk3OUUKK+menyA+IGvDuW87ICM5NzlGCivpnqAgPiBqw7o7ICM5N0EwCivpnqEgPiBsYTsgIzk3QTEKK+meoiA+IHhpw6g7ICM5N0EyCivpnqMgPiByw7N1OyAjOTdBMwor6Z6kID4gYsSBbmc7ICM5N0E0CivpnqUgPiB5w6w7ICM5N0E1CivpnqYgPiBxxKt1OyAjOTdBNgor6Z6nID4gccSrdTsgIzk3QTcKK+meqCA+IGjDqTsgIzk3QTgKK+meqSA+IHhpw6BvOyAjOTdBOQor6Z6qID4gbcO5OyAjOTdBQQor6Z6rID4gasO6OyAjOTdBQgor6Z6sID4gamnEgW47ICM5N0FDCivpnq0gPiBiacSBbjsgIzk3QUQKK+meriA+IGTEqzsgIzk3QUUKK+meryA+IGppxIFuOyAjOTdBRgor6Z6xID4gdMSBbzsgIzk3QjEKK+mesiA+IGfFjXU7ICM5N0IyCivpnrMgPiB0w6A7ICM5N0IzCivpnrQgPiBiw6hpOyAjOTdCNAor6Z61ID4geGnDqTsgIzk3QjUKK+metiA+IHDDoW47ICM5N0I2CivpnrcgPiBnw6k7ICM5N0I3CivpnrggPiBiw6w7ICM5N0I4CivpnrkgPiBrw7lvOyAjOTdCOQor6Z66ID4gdGFuZzsgIzk3QkEKK+meuyA+IGzDs3U7ICM5N0JCCivpnrwgPiBnw7lpOyAjOTdCQwor6Z69ID4gcWnDoW87ICM5N0JECivpnr4gPiB4dcSTOyAjOTdCRQor6Z6/ID4gasSrOyAjOTdCRgor6Z+AID4gamnEgW47ICM5N0MwCivpn4EgPiBqacSBbmc7ICM5N0MxCivpn4IgPiBjaMOgbjsgIzk3QzIKK+mfgyA+IGTDoTsgIzk3QzMKK+mfhCA+IGjDuW87ICM5N0M0Civpn4UgPiB4acSDbjsgIzk3QzUKK+mfhiA+IHFpxIFuOyAjOTdDNgor6Z+HID4gZMO6OyAjOTdDNwor6Z+IID4gd8OgOyAjOTdDOAor6Z+JID4gamnEgW47ICM5N0M5Civpn4ogPiBsw6FuOyAjOTdDQQor6Z+LID4gd8OpaTsgIzk3Q0IKK+mfjCA+IHLDqG47ICM5N0NDCivpn40gPiBmw7o7ICM5N0NECivpn44gPiBtw6hpOyAjOTdDRQor6Z+PID4ganXDoG47ICM5N0NGCivpn5AgPiBnw6k7ICM5N0QwCivpn5EgPiB3xJVpOyAjOTdEMQor6Z+SID4gcWnDoG87ICM5N0QyCivpn5MgPiBow6FuOyAjOTdEMwor6Z+UID4gY2jDoG5nOyAjOTdENAor6Z+WID4gcsOzdTsgIzk3RDYKK+mflyA+IHjDuW47ICM5N0Q3Civpn5ggPiBzaMOoOyAjOTdEOAor6Z+ZID4gd8SVaTsgIzk3RDkKK+mfmiA+IGfDqTsgIzk3REEKK+mfmyA+IGLDqGk7ICM5N0RCCivpn5wgPiB0xIFvOyAjOTdEQwor6Z+dID4gZ8WNdTsgIzk3REQKK+mfniA+IHnDuW47ICM5N0RFCivpn6AgPiBiw6w7ICM5N0UwCivpn6EgPiB3xJVpOyAjOTdFMQor6Z+iID4gaMO5aTsgIzk3RTIKK+mfoyA+IGTDujsgIzk3RTMKK+mfpCA+IHfDoDsgIzk3RTQKK+mfpSA+IGTDujsgIzk3RTUKK+mfpiA+IHfDqWk7ICM5N0U2Civpn6cgPiByw6huOyAjOTdFNwor6Z+oID4gZsO6OyAjOTdFOAor6Z+pID4gaMOhbjsgIzk3RTkKK+mfqiA+IHfElWk7ICM5N0VBCivpn6sgPiB5w7luOyAjOTdFQgor6Z+sID4gdMSBbzsgIzk3RUMKK+mfrSA+IGrErXU7ICM5N0VECivpn64gPiBqxK11OyAjOTdFRQor6Z+vID4geGnEgW47ICM5N0VGCivpn7AgPiB4acOoOyAjOTdGMAor6Z+xID4geGnEgW47ICM5N0YxCivpn7IgPiBqxKs7ICM5N0YyCivpn7MgPiB5xKtuOyAjOTdGMwor6Z+0ID4gesOhOyAjOTdGNAor6Z+1ID4gecO5bjsgIzk3RjUKK+mftiA+IHNow6FvOyAjOTdGNgor6Z+3ID4gbMOoOyAjOTdGNwor6Z+4ID4gcMOpbmc7ICM5N0Y4Civpn7kgPiBow6luZzsgIzk3RjkKK+mfuiA+IHnEq25nOyAjOTdGQQor6Z+7ID4gecO5bjsgIzk3RkIKK+mfvCA+IHDDqW5nOyAjOTdGQwor6Z+9ID4gecSrbjsgIzk3RkQKK+mfviA+IHnEq247ICM5N0ZFCivpn78gPiB4acSDbmc7ICM5N0ZGCivpoIAgPiBow7k7ICM5ODAwCivpoIEgPiB5w6g7ICM5ODAxCivpoIIgPiBkxK1uZzsgIzk4MDIKK+mggyA+IHHErW5nOyAjOTgwMwor6aCEID4gcMOgbjsgIzk4MDQKK+mghSA+IHhpw6BuZzsgIzk4MDUKK+mghiA+IHNow7luOyAjOTgwNgor6aCHID4gaMSBbjsgIzk4MDcKK+mgiCA+IHjFqzsgIzk4MDgKK+mgiSA+IHnDrTsgIzk4MDkKK+mgiiA+IHjDuTsgIzk4MEEKK+mgiyA+IGfDuTsgIzk4MEIKK+mgjCA+IHPDsm5nOyAjOTgwQwor6aCNID4ga8WtaTsgIzk4MEQKK+mgjiA+IHHDrTsgIzk4MEUKK+mgjyA+IGjDoW5nOyAjOTgwRgor6aCQID4gecO5OyAjOTgxMAor6aCRID4gd8OhbjsgIzk4MTEKK+mgkiA+IGLEgW47ICM5ODEyCivpoJMgPiBkw7luOyAjOTgxMwor6aCUID4gZMOtOyAjOTgxNAor6aCVID4gZMSBbjsgIzk4MTUKK+mgliA+IHDDoG47ICM5ODE2CivpoJcgPiBwxY87ICM5ODE3CivpoJggPiBsxK1uZzsgIzk4MTgKK+mgmSA+IGPDqDsgIzk4MTkKK+mgmiA+IGrErW5nOyAjOTgxQQor6aCbID4gbMSVaTsgIzk4MUIKK+mgnCA+IGjDqTsgIzk4MUMKK+mgnSA+IHFpxIFvOyAjOTgxRAor6aCeID4gw6g7ICM5ODFFCivpoJ8gPiDDqTsgIzk4MUYKK+mgoCA+IHfElWk7ICM5ODIwCivpoKEgPiBqacOpOyAjOTgyMQor6aCiID4gZ3XEgTsgIzk4MjIKK+mgoyA+IHNoxJVuOyAjOTgyMwor6aCkID4gecOtOyAjOTgyNAor6aClID4gc2jElW47ICM5ODI1CivpoKYgPiBow6FpOyAjOTgyNgor6aCnID4gZMWraTsgIzk4MjcKK+mgqCA+IHBpxIFuOyAjOTgyOAor6aCpID4gcMSrbmc7ICM5ODI5CivpoKogPiBsw6hpOyAjOTgyQQor6aCrID4gZsWtOyAjOTgyQgor6aCsID4gamnDoTsgIzk4MkMKK+mgrSA+IHTDs3U7ICM5ODJECivpoK4gPiBow7lpOyAjOTgyRQor6aCvID4ga8O6aTsgIzk4MkYKK+mgsCA+IGppw6E7ICM5ODMwCivpoLEgPiBsw6g7ICM5ODMxCivpoLIgPiB0aWFuOyAjOTgzMgor6aCzID4gY2jEk25nOyAjOTgzMwor6aC0ID4gecStbmc7ICM5ODM0CivpoLUgPiBqxatuOyAjOTgzNQor6aC2ID4gaMO6OyAjOTgzNgor6aC3ID4gaMOgbjsgIzk4MzcKK+mguCA+IGrErW5nOyAjOTgzOAor6aC5ID4gdMO6aTsgIzk4MzkKK+mguiA+IHTDumk7ICM5ODNBCivpoLsgPiBww61uOyAjOTgzQgor6aC8ID4gbMOgaTsgIzk4M0MKK+mgvSA+IHTDumk7ICM5ODNECivpoL4gPiB6xKs7ICM5ODNFCivpoL8gPiB6xKs7ICM5ODNGCivpoYAgPiBjaMO6aTsgIzk4NDAKK+mhgSA+IGTDrG5nOyAjOTg0MQor6aGCID4gbMOgaTsgIzk4NDIKK+mhgyA+IHnDoW47ICM5ODQzCivpoYQgPiBow6BuOyAjOTg0NAor6aGFID4gamnEgW47ICM5ODQ1CivpoYYgPiBrxJM7ICM5ODQ2CivpoYcgPiBjw7lpOyAjOTg0Nwor6aGIID4gasStb25nOyAjOTg0OAor6aGJID4gccSrbjsgIzk4NDkKK+mhiiA+IHnDrTsgIzk4NEEKK+mhiyA+IHPEgWk7ICM5ODRCCivpoYwgPiB0w607ICM5ODRDCivpoY0gPiDDqTsgIzk4NEQKK+mhjiA+IMOoOyAjOTg0RQor6aGPID4gecOhbjsgIzk4NEYKK+mhkCA+IGjDum47ICM5ODUwCivpoZEgPiBrxINuOyAjOTg1MQor6aGSID4gecOzbmc7ICM5ODUyCivpoZMgPiB6aHXEgW47ICM5ODUzCivpoZQgPiB5w6FuOyAjOTg1NAor6aGVID4geGnEg247ICM5ODU1CivpoZYgPiB4w6xuOyAjOTg1Ngor6aGXID4gecStOyAjOTg1Nwor6aGYID4geXXDoG47ICM5ODU4CivpoZkgPiBzxINuZzsgIzk4NTkKK+mhmiA+IGRpxIFuOyAjOTg1QQor6aGbID4gZGnEgW47ICM5ODVCCivpoZwgPiBqacSDbmc7ICM5ODVDCivpoZ0gPiBrxas7ICM5ODVECivpoZ4gPiBsw6hpOyAjOTg1RQor6aGfID4gbGnDoW87ICM5ODVGCivpoaAgPiBwacOgbzsgIzk4NjAKK+mhoSA+IHnDrDsgIzk4NjEKK+mhoiA+IG3DoW47ICM5ODYyCivpoaMgPiBxxKs7ICM5ODYzCivpoaQgPiByw6BvOyAjOTg2NAor6aGlID4gaMOgbzsgIzk4NjUKK+mhpiA+IHFpw6FvOyAjOTg2Ngor6aGnID4gZ8O5OyAjOTg2Nwor6aGoID4geMO5bjsgIzk4NjgKK+mhqSA+IHFpxIFuOyAjOTg2OQor6aGqID4gaMWraTsgIzk4NkEKK+mhqyA+IHpow6BuOyAjOTg2Qgor6aGsID4gcsO6OyAjOTg2Qwor6aGtID4gaMWNbmc7ICM5ODZECivpoa4gPiBixKtuOyAjOTg2RQor6aGvID4geGnEg247ICM5ODZGCivpobAgPiBww61uOyAjOTg3MAor6aGxID4gbMO6OyAjOTg3MQor6aGyID4gbMSDbjsgIzk4NzIKK+mhsyA+IG5pw6g7ICM5ODczCivpobQgPiBxdcOhbjsgIzk4NzQKK+mhtSA+IHnDqDsgIzk4NzUKK+mhtiA+IGTErW5nOyAjOTg3Ngor6aG3ID4gccStbmc7ICM5ODc3CivpobggPiBoxIFuOyAjOTg3OAor6aG5ID4geGnDoG5nOyAjOTg3OQor6aG6ID4gc2jDuW47ICM5ODdBCivpobsgPiB4xas7ICM5ODdCCivpobwgPiB4w7k7ICM5ODdDCivpob0gPiB3w6FuOyAjOTg3RAor6aG+ID4gZ8O5OyAjOTg3RQor6aG/ID4gZMO5bjsgIzk4N0YKK+migCA+IHHDrTsgIzk4ODAKK+migSA+IGLEgW47ICM5ODgxCivpooIgPiBzw7JuZzsgIzk4ODIKK+migyA+IGjDoW5nOyAjOTg4Mwor6aKEID4gecO5OyAjOTg4NAor6aKFID4gbMO6OyAjOTg4NQor6aKGID4gbMStbmc7ICM5ODg2CivpoocgPiBwxY87ICM5ODg3CivpooggPiBqxK1uZzsgIzk4ODgKK+miiSA+IGppw6k7ICM5ODg5CivpooogPiBqacOhOyAjOTg4QQor6aKLID4gdGlhbjsgIzk4OEIKK+mijCA+IGjDoG47ICM5ODhDCivpoo0gPiB5xK1uZzsgIzk4OEQKK+mijiA+IGrErW9uZzsgIzk4OEUKK+mijyA+IGjDoWk7ICM5ODhGCivpopAgPiB5w607ICM5ODkwCivpopEgPiBww61uOyAjOTg5MQor6aKSID4gaMO5aTsgIzk4OTIKK+mikyA+IHTDumk7ICM5ODkzCivpopQgPiBow6BuOyAjOTg5NAor6aKVID4gecStbmc7ICM5ODk1CivpopYgPiB5xK1uZzsgIzk4OTYKK+milyA+IGvEkzsgIzk4OTcKK+mimCA+IHTDrTsgIzk4OTgKK+mimSA+IHnDs25nOyAjOTg5OQor6aKaID4gw6g7ICM5ODlBCivpopsgPiB6aHXEgW47ICM5ODlCCivpopwgPiB5w6FuOyAjOTg5Qwor6aKdID4gw6k7ICM5ODlECivpop4gPiBuacOoOyAjOTg5RQor6aKfID4gbcOhbjsgIzk4OUYKK+mioCA+IGRpxIFuOyAjOThBMAor6aKhID4gc8SDbmc7ICM5OEExCivpoqIgPiBow6BvOyAjOThBMgor6aKjID4gbMOoaTsgIzk4QTMKK+mipCA+IHpow6BuOyAjOThBNAor6aKlID4gcsO6OyAjOThBNQor6aKmID4gcMOtbjsgIzk4QTYKK+mipyA+IHF1w6FuOyAjOThBNwor6aKoID4gZsSTbmc7ICM5OEE4CivpoqkgPiBiacSBbzsgIzk4QTkKK+miqyA+IGbDujsgIzk4QUIKK+mirCA+IHhpxIE7ICM5OEFDCivpoq0gPiB6aMSDbjsgIzk4QUQKK+miriA+IGJpxIFvOyAjOThBRQor6aKvID4gc8OgOyAjOThBRgor6aKwID4gYsOhOyAjOThCMAor6aKxID4gdMOhaTsgIzk4QjEKK+misiA+IGxpw6g7ICM5OEIyCivporMgPiBndcSBOyAjOThCMwor6aK0ID4geHXDoG47ICM5OEI0CivporUgPiBzaMOgbzsgIzk4QjUKK+mitiA+IGrDuTsgIzk4QjYKK+mityA+IGLEqzsgIzk4QjcKK+miuCA+IHPEqzsgIzk4QjgKK+miuSA+IHfElWk7ICM5OEI5CivporogPiB5w6FuZzsgIzk4QkEKK+miuyA+IHnDoW87ICM5OEJCCivporwgPiBzxY11OyAjOThCQwor6aK9ID4ga8SDaTsgIzk4QkQKK+miviA+IHPEgW87ICM5OEJFCivpor8gPiBmw6FuOyAjOThCRgor6aOAID4gbMOtdTsgIzk4QzAKK+mjgSA+IHjDrTsgIzk4QzEKK+mjgiA+IGxpw6FvOyAjOThDMgor6aODID4gcGnEgW87ICM5OEMzCivpo4QgPiBwacSBbzsgIzk4QzQKK+mjhSA+IGzDrXU7ICM5OEM1Civpo4YgPiBiacSBbzsgIzk4QzYKK+mjhyA+IGJpxIFvOyAjOThDNwor6aOIID4gYmnEg287ICM5OEM4Civpo4kgPiBsacOhbzsgIzk4QzkKK+mjiyA+IHPDqDsgIzk4Q0IKK+mjjCA+IGbEk25nOyAjOThDQwor6aONID4gYmnEgW87ICM5OENECivpo44gPiBmxJNuZzsgIzk4Q0UKK+mjjyA+IHnDoW5nOyAjOThDRgor6aOQID4gemjEg247ICM5OEQwCivpo5EgPiBiacSBbzsgIzk4RDEKK+mjkiA+IHPDoDsgIzk4RDIKK+mjkyA+IGrDuTsgIzk4RDMKK+mjlCA+IHPEqzsgIzk4RDQKK+mjlSA+IHPFjXU7ICM5OEQ1Civpo5YgPiB5w6FvOyAjOThENgor6aOXID4gbMOtdTsgIzk4RDcKK+mjmCA+IHBpxIFvOyAjOThEOAor6aOZID4gYmnEgW87ICM5OEQ5Civpo5ogPiBiacSBbzsgIzk4REEKK+mjmyA+IGbEk2k7ICM5OERCCivpo5wgPiBmxIFuOyAjOThEQwor6aOdID4gZsSTaTsgIzk4REQKK+mjniA+IGbEk2k7ICM5OERFCivpo58gPiBzaMOtOyAjOThERgor6aOgID4gc2jDrTsgIzk4RTAKK+mjoSA+IGPEgW47ICM5OEUxCivpo6IgPiBqxKs7ICM5OEUyCivpo6MgPiBkw6xuZzsgIzk4RTMKK+mjpCA+IHPDrDsgIzk4RTQKK+mjpSA+IHTFq287ICM5OEU1Civpo6YgPiB6aMSBbjsgIzk4RTYKK+mjpyA+IHPFq247ICM5OEU3Civpo6ggPiB4acSDbmc7ICM5OEU4Civpo6kgPiB0w7puOyAjOThFOQor6aOqID4gcsOobjsgIzk4RUEKK+mjqyA+IHnDuTsgIzk4RUIKK+mjrCA+IGp1w6BuOyAjOThFQwor6aOtID4gY2jDrDsgIzk4RUQKK+mjriA+IHnErW47ICM5OEVFCivpo68gPiBmw6BuOyAjOThFRgor6aOwID4gZsOgbjsgIzk4RjAKK+mjsSA+IHPFq247ICM5OEYxCivpo7IgPiB5xK1uOyAjOThGMgor6aOzID4gemjDuTsgIzk4RjMKK+mjtCA+IHnDrTsgIzk4RjQKK+mjtSA+IHpoxINpOyAjOThGNQor6aO2ID4gYsOsOyAjOThGNgor6aO3ID4gamnElTsgIzk4RjcKK+mjuCA+IHTEgW87ICM5OEY4Civpo7kgPiBsxK11OyAjOThGOQor6aO6ID4gY8OtOyAjOThGQQor6aO7ID4gdGnDqDsgIzk4RkIKK+mjvCA+IHPDrDsgIzk4RkMKK+mjvSA+IGLEg287ICM5OEZECivpo74gPiBzaMOsOyAjOThGRQor6aO/ID4gZMO5bzsgIzk4RkYKK+mkgCA+IGjDoGk7ICM5OTAwCivppIEgPiByw6huOyAjOTkwMQor6aSCID4gdGnEg247ICM5OTAyCivppIMgPiBqacSDbzsgIzk5MDMKK+mkhCA+IGppw6E7ICM5OTA0CivppIUgPiBixK1uZzsgIzk5MDUKK+mkhiA+IHnDoW87ICM5OTA2CivppIcgPiB0w7NuZzsgIzk5MDcKK+mkiCA+IGPDrTsgIzk5MDgKK+mkiSA+IHhpxINuZzsgIzk5MDkKK+mkiiA+IHnEg25nOyAjOTkwQQor6aSLID4gecSDbmc7ICM5OTBCCivppIwgPiDElXI7ICM5OTBDCivppI0gPiB5w6BuOyAjOTkwRAor6aSOID4gbGU7ICM5OTBFCivppI8gPiB5xKs7ICM5OTBGCivppJAgPiBjxIFuOyAjOTkxMAor6aSRID4gYsOzOyAjOTkxMQor6aSSID4gbsSVaTsgIzk5MTIKK+mkkyA+IMOoOyAjOTkxMwor6aSUID4gYsWrOyAjOTkxNAor6aSVID4gasO5bjsgIzk5MTUKK+mkliA+IGTDsnU7ICM5OTE2CivppJcgPiBzw7k7ICM5OTE3CivppJggPiB5w7o7ICM5OTE4CivppJkgPiBzaMOsOyAjOTkxOQor6aSaID4gecOhbzsgIzk5MUEKK+mkmyA+IGjDum47ICM5OTFCCivppJwgPiBnxa1vOyAjOTkxQwor6aSdID4gc2jDrDsgIzk5MUQKK+mkniA+IGppw6BuOyAjOTkxRQor6aSfID4gemjDuWk7ICM5OTFGCivppKAgPiBixK1uZzsgIzk5MjAKK+mkoSA+IHhpw6BuOyAjOTkyMQor6aSiID4gYsO5OyAjOTkyMgor6aSjID4gecOoOyAjOTkyMwor6aSkID4gdMOhbjsgIzk5MjQKK+mkpSA+IGbElWk7ICM5OTI1CivppKYgPiB6aMSBbmc7ICM5OTI2CivppKcgPiB3w6hpOyAjOTkyNwor6aSoID4gZ3XEg247ICM5OTI4CivppKkgPiDDqDsgIzk5MjkKK+mkqiA+IG51xINuOyAjOTkyQQor6aSrID4gaMO6bjsgIzk5MkIKK+mkrCA+IGjDujsgIzk5MkMKK+mkrSA+IGh1w6FuZzsgIzk5MkQKK+mkriA+IHRpw6g7ICM5OTJFCivppK8gPiBow7lpOyAjOTkyRgor6aSwID4gamnEgW47ICM5OTMwCivppLEgPiBow7N1OyAjOTkzMQor6aSyID4gaMOpOyAjOTkzMgor6aSzID4geMOtbmc7ICM5OTMzCivppLQgPiBmxJNuOyAjOTkzNAor6aS1ID4gd8OoaTsgIzk5MzUKK+mktiA+IGfFrTsgIzk5MzYKK+mktyA+IGNoxIE7ICM5OTM3CivppLggPiBzw7JuZzsgIzk5MzgKK+mkuSA+IHTDoW5nOyAjOTkzOQor6aS6ID4gYsOzOyAjOTkzQQor6aS7ID4gZ8SBbzsgIzk5M0IKK+mkvCA+IHjDrDsgIzk5M0MKK+mkvSA+IGvDuWk7ICM5OTNECivppL4gPiBsw6x1OyAjOTkzRQor6aS/ID4gc8WNdTsgIzk5M0YKK+mlgCA+IHTDoW87ICM5OTQwCivppYEgPiB5w6g7ICM5OTQxCivppYIgPiB5w7puOyAjOTk0Mgor6aWDID4gbcOzOyAjOTk0Mwor6aWEID4gdMOhbmc7ICM5OTQ0CivppYUgPiBtw6FuOyAjOTk0NQor6aWGID4gYsOsOyAjOTk0Ngor6aWHID4gecO5OyAjOTk0Nwor6aWIID4geMSrdTsgIzk5NDgKK+mliSA+IGrErW47ICM5OTQ5CivppYogPiBzxINuOyAjOTk0QQor6aWLID4ga8O5aTsgIzk5NEIKK+mljCA+IHpodcOgbjsgIzk5NEMKK+mljSA+IHNow6BuOyAjOTk0RAor6aWOID4gY2jDrDsgIzk5NEUKK+mljyA+IGTDoG47ICM5OTRGCivppZAgPiB5w6w7ICM5OTUwCivppZEgPiBqxKs7ICM5OTUxCivppZIgPiByw6FvOyAjOTk1Mgor6aWTID4gY2jEk25nOyAjOTk1Mwor6aWUID4gecWNbmc7ICM5OTU0CivppZUgPiB0xIFvOyAjOTk1NQor6aWWID4gaMO5aTsgIzk5NTYKK+mllyA+IHhpxINuZzsgIzk5NTcKK+mlmCA+IHpoxIFuOyAjOTk1OAor6aWZID4gZsSTbjsgIzk5NTkKK+mlmiA+IGjDoGk7ICM5OTVBCivppZsgPiBtw6luZzsgIzk5NUIKK+mlnCA+IHnDoG47ICM5OTVDCivppZ0gPiBtw7M7ICM5OTVECivppZ4gPiBjaMOhbjsgIzk5NUUKK+mlnyA+IHhpxINuZzsgIzk5NUYKK+mloCA+IGzDum87ICM5OTYwCivppaEgPiB6dcOgbjsgIzk5NjEKK+mloiA+IG7Eg25nOyAjOTk2Mgor6aWjID4gc2jDrTsgIzk5NjMKK+mlpCA+IGTDrG5nOyAjOTk2NAor6aWlID4gasSrOyAjOTk2NQor6aWmID4gdMWrbzsgIzk5NjYKK+mlpyA+IHjDrW5nOyAjOTk2Nwor6aWoID4gdMO6bjsgIzk5NjgKK+mlqSA+IHjDrDsgIzk5NjkKK+mlqiA+IHLDqG47ICM5OTZBCivppasgPiB5w7k7ICM5OTZCCivppawgPiBjaMOsOyAjOTk2Qwor6aWtID4gZsOgbjsgIzk5NkQKK+mlriA+IHnErW47ICM5OTZFCivppa8gPiBqacOgbjsgIzk5NkYKK+mlsCA+IHNow6w7ICM5OTcwCivppbEgPiBixINvOyAjOTk3MQor6aWyID4gc8OsOyAjOTk3Mgor6aWzID4gZMO5bzsgIzk5NzMKK+mltCA+IHnDrTsgIzk5NzQKK+mltSA+IMSVcjsgIzk5NzUKK+mltiA+IHLDoW87ICM5OTc2CivppbcgPiB4acSDbmc7ICM5OTc3CivppbggPiBqacOhOyAjOTk3OAor6aW5ID4gbGU7ICM5OTc5CivppbogPiBqacSDbzsgIzk5N0EKK+mluyA+IHnEqzsgIzk5N0IKK+mlvCA+IGLErW5nOyAjOTk3Qwor6aW9ID4gYsOzOyAjOTk3RAor6aW+ID4gZMOydTsgIzk5N0UKK+mlvyA+IMOoOyAjOTk3Rgor6aaAID4gecO6OyAjOTk4MAor6aaBID4gbsSVaTsgIzk5ODEKK+mmgiA+IGrDuW47ICM5OTgyCivppoMgPiBnxa1vOyAjOTk4Mwor6aaEID4gaMO6bjsgIzk5ODQKK+mmhSA+IHhpw6BuOyAjOTk4NQor6aaGID4gZ3XEg247ICM5OTg2CivppocgPiBjaMSBOyAjOTk4Nwor6aaIID4ga8O5aTsgIzk5ODgKK+mmiSA+IGfFrTsgIzk5ODkKK+mmiiA+IHPFjXU7ICM5OThBCivpposgPiBjaMOhbjsgIzk5OEIKK+mmjCA+IHnDqDsgIzk5OEMKK+mmjSA+IG3DszsgIzk5OEQKK+mmjiA+IGLDszsgIzk5OEUKK+mmjyA+IGzDrHU7ICM5OThGCivpppAgPiB4xKt1OyAjOTk5MAor6aaRID4gasStbjsgIzk5OTEKK+mmkiA+IG3DoW47ICM5OTkyCivpppMgPiBzxINuOyAjOTk5Mwor6aaUID4gemh1w6BuOyAjOTk5NAor6aaVID4gbsSDbmc7ICM5OTk1CivpppYgPiBzaMWPdTsgIzk5OTYKK+mmlyA+IGvDumk7ICM5OTk3CivpppggPiBnw7pvOyAjOTk5OAor6aaZID4geGnEgW5nOyAjOTk5OQor6aaaID4gZsOpbjsgIzk5OUEKK+mmmyA+IGLDoTsgIzk5OUIKK+mmnCA+IG7ErTsgIzk5OUMKK+mmnSA+IGLDrDsgIzk5OUQKK+mmniA+IGLDszsgIzk5OUUKK+mmnyA+IHTDujsgIzk5OUYKK+mmoCA+IGjEgW47ICM5OUEwCivppqEgPiBmxJNpOyAjOTlBMQor6aaiID4gamnEgW47ICM5OUEyCivppqMgPiDEgW47ICM5OUEzCivppqQgPiDEg2k7ICM5OUE0CivppqUgPiBmw7k7ICM5OUE1CivppqYgPiB4acSBbjsgIzk5QTYKK+mmpyA+IHfEk247ICM5OUE3CivppqggPiB4xKtuOyAjOTlBOAor6aapID4gZsOpbjsgIzk5QTkKK+mmqiA+IGLEq247ICM5OUFBCivppqsgPiB4xKtuZzsgIzk5QUIKK+mmrCA+IG3EgzsgIzk5QUMKK+mmrSA+IHnDuTsgIzk5QUQKK+mmriA+IGbDqW5nOyAjOTlBRQor6aavID4gaMOgbjsgIzk5QUYKK+mmsCA+IGTDrDsgIzk5QjAKK+mmsSA+IHTDum87ICM5OUIxCivpprIgPiB0xatvOyAjOTlCMgor6aazID4gY2jDrTsgIzk5QjMKK+mmtCA+IHjDum47ICM5OUI0CivpprUgPiB6aMO5OyAjOTlCNQor6aa2ID4gemjEqzsgIzk5QjYKK+mmtyA+IHDDqGk7ICM5OUI3CivpprggPiB4w6xuOyAjOTlCOAor6aa5ID4gcsOsOyAjOTlCOQor6aa6ID4gc8OgOyAjOTlCQQor6aa7ID4gecStbjsgIzk5QkIKK+mmvCA+IHfDqW47ICM5OUJDCivppr0gPiB6aMOtOyAjOTlCRAor6aa+ID4gZMOgbjsgIzk5QkUKK+mmvyA+IGzHmDsgIzk5QkYKK+mngCA+IHnDs3U7ICM5OUMwCivpp4EgPiBiw7M7ICM5OUMxCivpp4IgPiBixINvOyAjOTlDMgor6aeDID4ga3XDoGk7ICM5OUMzCivpp4QgPiB0w7pvOyAjOTlDNAor6aeFID4gecOsOyAjOTlDNQor6aeGID4gccWrOyAjOTlDNgor6aeIID4gccWrOyAjOTlDOAor6aeJID4gasSrb25nOyAjOTlDOQor6aeKID4gYsWPOyAjOTlDQQor6aeLID4gemjEgW87ICM5OUNCCivpp4wgPiB5dcSBbjsgIzk5Q0MKK+mnjSA+IHDEk25nOyAjOTlDRAor6aeOID4gemjDsnU7ICM5OUNFCivpp48gPiBqw7k7ICM5OUNGCivpp5AgPiB6aMO5OyAjOTlEMAor6aeRID4gbsO6OyAjOTlEMQor6aeSID4gasWrOyAjOTlEMgor6aeTID4gcMOtOyAjOTlEMwor6aeUID4gesSDbmc7ICM5OUQ0Civpp5UgPiBqacOgOyAjOTlENQor6aeWID4gbMOtbmc7ICM5OUQ2Civpp5cgPiB6aMSTbjsgIzk5RDcKK+mnmCA+IHTDoWk7ICM5OUQ4Civpp5kgPiBmw7k7ICM5OUQ5Civpp5ogPiB5xINuZzsgIzk5REEKK+mnmyA+IHNoxK07ICM5OURCCivpp5wgPiBiw6w7ICM5OURDCivpp50gPiB0w7pvOyAjOTlERAor6aeeID4gdMO6bzsgIzk5REUKK+mnnyA+IHPDrDsgIzk5REYKK+mnoCA+IGzDrXU7ICM5OUUwCivpp6EgPiBtw6A7ICM5OUUxCivpp6IgPiBwacOhbjsgIzk5RTIKK+mnoyA+IHTDoW87ICM5OUUzCivpp6QgPiB6aMOsOyAjOTlFNAor6aelID4gcsOzbmc7ICM5OUU1Civpp6YgPiB0w6luZzsgIzk5RTYKK+mnpyA+IGTDsm5nOyAjOTlFNwor6aeoID4geMO6bjsgIzk5RTgKK+mnqSA+IHF1w6FuOyAjOTlFOQor6aeqID4gc2jEk247ICM5OUVBCivpp6sgPiBqxKtvbmc7ICM5OUVCCivpp6wgPiDElXI7ICM5OUVDCivpp60gPiBow6BpOyAjOTlFRAor6aeuID4gYsOzOyAjOTlFRQor6aevID4gemh1OyAjOTlFRgor6aewID4gecSrbjsgIzk5RjAKK+mnsSA+IGzDuW87ICM5OUYxCivpp7MgPiBkw6BuOyAjOTlGMwor6ae0ID4geGnDqDsgIzk5RjQKK+mntSA+IGzDrXU7ICM5OUY1Civpp7YgPiBqw7o7ICM5OUY2Civpp7cgPiBzxY9uZzsgIzk5RjcKK+mnuCA+IHHEq247ICM5OUY4Civpp7kgPiBtw6FuZzsgIzk5RjkKK+mnuiA+IGxpw6FuZzsgIzk5RkEKK+mnuyA+IGjDoG47ICM5OUZCCivpp7wgPiB0w7o7ICM5OUZDCivpp70gPiB4dcOgbjsgIzk5RkQKK+mnviA+IHTDuWk7ICM5OUZFCivpp78gPiBqw7luOyAjOTlGRgor6aiAID4gw6k7ICM5QTAwCivpqIEgPiBjaMSVbmc7ICM5QTAxCivpqIIgPiB4xKtuOyAjOUEwMgor6aiDID4gw6FpOyAjOUEwMwor6aiEID4gbMO5OyAjOUEwNAor6aiFID4gemjFq2k7ICM5QTA1CivpqIYgPiB6aMWNdTsgIzlBMDYKK+mohyA+IHNoxJU7ICM5QTA3CivpqIggPiBwacOhbjsgIzlBMDgKK+moiSA+IGvFq247ICM5QTA5CivpqIogPiB0w6FvOyAjOUEwQQor6aiLID4gbMOhaTsgIzlBMEIKK+mojCA+IHrFjW5nOyAjOUEwQwor6aiNID4ga8OoOyAjOUEwRAor6aiOID4gccOtOyAjOUEwRQor6aiPID4gccOtOyAjOUEwRgor6aiQID4gecOgbjsgIzlBMTAKK+mokSA+IGbEk2k7ICM5QTExCivpqJIgPiBzxIFvOyAjOUExMgor6aiTID4gecSDbjsgIzlBMTMKK+molCA+IGppw6k7ICM5QTE0CivpqJUgPiB5xINvOyAjOUExNQor6aiWID4gd8O5OyAjOUExNgor6aiXID4gcGnDoG47ICM5QTE3CivpqJggPiBjxY1uZzsgIzlBMTgKK+momSA+IHBpw6BuOyAjOUExOQor6aiaID4gcWnDoW47ICM5QTFBCivpqJsgPiBmxJNpOyAjOUExQgor6aicID4gaHXDoW5nOyAjOUExQwor6aidID4gamnEgW47ICM5QTFECivpqJ4gPiBow7lvOyAjOUExRQor6aifID4gecO5OyAjOUExRgor6aigID4gdMOtOyAjOUEyMAor6aihID4gcXXDoW47ICM5QTIxCivpqKIgPiB4acOhOyAjOUEyMgor6aijID4gesWNbmc7ICM5QTIzCivpqKQgPiBrw7ppOyAjOUEyNAor6ailID4gcsOzdTsgIzlBMjUKK+mopiA+IHPEqzsgIzlBMjYKK+mopyA+IGd1xIE7ICM5QTI3CivpqKggPiB0w7pvOyAjOUEyOAor6aipID4ga8O5aTsgIzlBMjkKK+moqiA+IHPFjXU7ICM5QTJBCivpqKsgPiBxacSBbjsgIzlBMkIKK+morCA+IGNow6luZzsgIzlBMkMKK+morSA+IHpow6w7ICM5QTJECivpqK4gPiBsw611OyAjOUEyRQor6aivID4gcMOhbmc7ICM5QTJGCivpqLAgPiB0w6luZzsgIzlBMzAKK+mosSA+IHjEqzsgIzlBMzEKK+mosiA+IGPEg287ICM5QTMyCivpqLMgPiBkw7o7ICM5QTMzCivpqLQgPiB5w6BuOyAjOUEzNAor6ai1ID4geXXDoW47ICM5QTM1CivpqLYgPiB6xY11OyAjOUEzNgor6ai3ID4gc8SBbzsgIzlBMzcKK+mouCA+IHNow6BuOyAjOUEzOAor6ai5ID4gbMOtOyAjOUEzOQor6ai6ID4gemjDrDsgIzlBM0EKK+mouyA+IHNodcSDbmc7ICM5QTNCCivpqLwgPiBsw7k7ICM5QTNDCivpqL0gPiB4w607ICM5QTNECivpqL4gPiBsw7pvOyAjOUEzRQor6ai/ID4gemjEgW5nOyAjOUEzRgor6amAID4gbcOyOyAjOUE0MAor6amBID4gw6FvOyAjOUE0MQor6amCID4gY8SBbjsgIzlBNDIKK+mpgyA+IHBpw6BvOyAjOUE0Mwor6amEID4gY8WNbmc7ICM5QTQ0CivpqYUgPiBxxas7ICM5QTQ1CivpqYYgPiBiw6w7ICM5QTQ2CivpqYcgPiB6aMOsOyAjOUE0Nwor6amIID4gecO5OyAjOUE0OAor6amJID4geMWrOyAjOUE0OQor6amKID4gaHXDoTsgIzlBNEEKK+mpiyA+IGLFjTsgIzlBNEIKK+mpjCA+IHPDuTsgIzlBNEMKK+mpjSA+IHhpxIFvOyAjOUE0RAor6amOID4gbMOtbjsgIzlBNEUKK+mpjyA+IGNoxINuOyAjOUE0Rgor6amQID4gZMWrbjsgIzlBNTAKK+mpkSA+IGzDrXU7ICM5QTUxCivpqZIgPiB0w7pvOyAjOUE1Mgor6amTID4gesSTbmc7ICM5QTUzCivpqZQgPiB0w6FuOyAjOUE1NAor6amVID4gamnEgW87ICM5QTU1CivpqZYgPiB0acSVOyAjOUE1Ngor6amXID4gecOgbjsgIzlBNTcKK+mpmCA+IGzDum87ICM5QTU4CivpqZkgPiB6aMSBbjsgIzlBNTkKK+mpmiA+IGrEq25nOyAjOUE1QQor6ambID4gecOsOyAjOUE1Qgor6amcID4gecOoOyAjOUE1Qwor6amdID4gdMWrbzsgIzlBNUQKK+mpniA+IGLEq247ICM5QTVFCivpqZ8gPiB6w7J1OyAjOUE1Rgor6amgID4gecOgbjsgIzlBNjAKK+mpoSA+IHDDqW5nOyAjOUE2MQor6amiID4gbMeYOyAjOUE2Mgor6amjID4gdMOpbmc7ICM5QTYzCivpqaQgPiB4acSBbmc7ICM5QTY0CivpqaUgPiBqw6w7ICM5QTY1CivpqaYgPiBzaHXEgW5nOyAjOUE2Ngor6amnID4gasO6OyAjOUE2Nwor6amoID4geMSrOyAjOUE2OAor6ampID4gaHXEgW47ICM5QTY5CivpqaogPiBsw607ICM5QTZBCivpqasgPiBiacSBbzsgIzlBNkIKK+mprCA+IG3EgzsgIzlBNkMKK+mprSA+IHnDuTsgIzlBNkQKK+mpriA+IHTDum87ICM5QTZFCivpqa8gPiB4w7puOyAjOUE2Rgor6amwID4gY2jDrTsgIzlBNzAKK+mpsSA+IHHFqzsgIzlBNzEKK+mpsiA+IHLDrDsgIzlBNzIKK+mpsyA+IGLDszsgIzlBNzMKK+mptCA+IGzHmDsgIzlBNzQKK+mptSA+IHrEg25nOyAjOUE3NQor6am2ID4gc2jErTsgIzlBNzYKK+mptyA+IHPDrDsgIzlBNzcKK+mpuCA+IGbDuTsgIzlBNzgKK+mpuSA+IGrFqzsgIzlBNzkKK+mpuiA+IHrFjXU7ICM5QTdBCivpqbsgPiB6aMO5OyAjOUE3Qgor6am8ID4gdMO6bzsgIzlBN0MKK+mpvSA+IG7DujsgIzlBN0QKK+mpviA+IGppw6A7ICM5QTdFCivpqb8gPiB5w6w7ICM5QTdGCivpqoAgPiB0w6FpOyAjOUE4MAor6aqBID4geGnEgW87ICM5QTgxCivpqoIgPiBtw6A7ICM5QTgyCivpqoMgPiB5xKtuOyAjOUE4Mwor6aqEID4gamnEgW87ICM5QTg0CivpqoUgPiBodcOhOyAjOUE4NQor6aqGID4gbMO5bzsgIzlBODYKK+mqhyA+IGjDoGk7ICM5QTg3CivpqoggPiBwacOhbjsgIzlBODgKK+mqiSA+IGJpxIFvOyAjOUE4OQor6aqKID4gbMOtOyAjOUE4QQor6aqLID4gY2jElW5nOyAjOUE4Qgor6aqMID4gecOgbjsgIzlBOEMKK+mqjSA+IHjEq247ICM5QThECivpqo4gPiBxxKtuOyAjOUE4RQor6aqPID4gasO5bjsgIzlBOEYKK+mqkCA+IHHDrTsgIzlBOTAKK+mqkSA+IHHDrTsgIzlBOTEKK+mqkiA+IGvDqDsgIzlBOTIKK+mqkyA+IHpoxatpOyAjOUE5Mwor6aqUID4gesWNbmc7ICM5QTk0CivpqpUgPiBzw7k7ICM5QTk1CivpqpYgPiBjxIFuOyAjOUE5Ngor6aqXID4gcGnDoG47ICM5QTk3CivpqpggPiB6aMOsOyAjOUE5OAor6aqZID4ga8O6aTsgIzlBOTkKK+mqmiA+IHPEgW87ICM5QTlBCivpqpsgPiB3w7k7ICM5QTlCCivpqpwgPiDDoW87ICM5QTlDCivpqp0gPiBsw611OyAjOUE5RAor6aqeID4gcWnEgW47ICM5QTlFCivpqp8gPiBzaMOgbjsgIzlBOUYKK+mqoCA+IHBpw6BvOyAjOUFBMAor6aqhID4gbMO6bzsgIzlBQTEKK+mqoiA+IGPFjW5nOyAjOUFBMgor6aqjID4gY2jEg247ICM5QUEzCivpqqQgPiB6w7J1OyAjOUFBNAor6aqlID4gasOsOyAjOUFBNQor6aqmID4gc2h1xIFuZzsgIzlBQTYKK+mqpyA+IHhpxIFuZzsgIzlBQTcKK+mqqCA+IGfFrTsgIzlBQTgKK+mqqSA+IHfElWk7ICM5QUE5CivpqqogPiB3xJVpOyAjOUFBQQor6aqrID4gd8SVaTsgIzlBQUIKK+mqrCA+IHnDujsgIzlBQUMKK+mqrSA+IGfDoG47ICM5QUFECivpqq4gPiB5w6w7ICM5QUFFCivpqq8gPiDEgW5nOyAjOUFBRgor6aqwID4gdMOzdTsgIzlBQjAKK+mqsSA+IHhpw6g7ICM5QUIxCivpqrIgPiBixIFvOyAjOUFCMgor6aqzID4gYsOsOyAjOUFCMwor6aq0ID4gY2jEqzsgIzlBQjQKK+mqtSA+IHTErTsgIzlBQjUKK+mqtiA+IGTErTsgIzlBQjYKK+mqtyA+IGvFqzsgIzlBQjcKK+mquCA+IGjDoWk7ICM5QUI4CivpqrkgPiBxacSBbzsgIzlBQjkKK+mquiA+IGfDsnU7ICM5QUJBCivpqrsgPiBrdcOgOyAjOUFCQgor6aq8ID4gZ8OpOyAjOUFCQwor6aq9ID4gdMWtaTsgIzlBQkQKK+mqviA+IGfElW5nOyAjOUFCRQor6aq/ID4gcGnDoW47ICM5QUJGCivpq4AgPiBiw6w7ICM5QUMwCivpq4EgPiBrxJM7ICM5QUMxCivpq4IgPiBrw6A7ICM5QUMyCivpq4MgPiB5w7o7ICM5QUMzCivpq4QgPiBzxa1pOyAjOUFDNAor6auFID4gbMOzdTsgIzlBQzUKK+mrhiA+IGLDszsgIzlBQzYKK+mrhyA+IHhpxIFvOyAjOUFDNwor6auIID4gcMOhbmc7ICM5QUM4Civpq4kgPiBixY07ICM5QUM5Civpq4ogPiBjxKs7ICM5QUNBCivpq4sgPiBrdcSBbjsgIzlBQ0IKK+mrjCA+IGLDrG47ICM5QUNDCivpq40gPiBtw7M7ICM5QUNECivpq44gPiBsacOhbzsgIzlBQ0UKK+mrjyA+IGzDs3U7ICM5QUNGCivpq5AgPiBuw6FvOyAjOUFEMAor6auRID4gZMO6OyAjOUFEMQor6auSID4gesSBbmc7ICM5QUQyCivpq5MgPiBzxa1pOyAjOUFEMwor6auUID4gdMStOyAjOUFENAor6auVID4gYsOsbjsgIzlBRDUKK+mrliA+IGt1xIFuOyAjOUFENgor6auXID4gbMO6OyAjOUFENwor6auYID4gZ8SBbzsgIzlBRDgKK+mrmSA+IGfEgW87ICM5QUQ5Civpq5ogPiBxacOgbzsgIzlBREEKK+mrmyA+IGvEgW87ICM5QURCCivpq5wgPiBxacSBbzsgIzlBREMKK+mrnSA+IGzDoG87ICM5QURECivpq54gPiB6w6BvOyAjOUFERQor6aufID4gYmnEgW87ICM5QURGCivpq6AgPiBrxatuOyAjOUFFMAor6auhID4ga8WrbjsgIzlBRTEKK+mroiA+IHTDrDsgIzlBRTIKK+mroyA+IGbEg25nOyAjOUFFMwor6aukID4geMSrdTsgIzlBRTQKK+mrpSA+IHLDoW47ICM5QUU1Civpq6YgPiBtw6FvOyAjOUFFNgor6aunID4gZMOgbjsgIzlBRTcKK+mrqCA+IGvFq247ICM5QUU4Civpq6kgPiBiw6xuOyAjOUFFOQor6auqID4gZsOgOyAjOUFFQQor6aurID4gdGnDoW87ICM5QUVCCivpq6wgPiBwZW5nOyAjOUFFQwor6autID4gesSrOyAjOUFFRAor6auuID4gZsSDOyAjOUFFRQor6auvID4gcsOhbjsgIzlBRUYKK+mrsCA+IHTDrDsgIzlBRjAKK+mrsSA+IHDDoG87ICM5QUYxCivpq7IgPiBwxKs7ICM5QUYyCivpq7MgPiBtw6FvOyAjOUFGMwor6au0ID4gZsO6OyAjOUFGNAor6au1ID4gw6lyOyAjOUFGNQor6au2ID4gcsOzbmc7ICM5QUY2Civpq7cgPiBxxas7ICM5QUY3Civpq7ggPiBnb25nOyAjOUFGOAor6au5ID4geMSrdTsgIzlBRjkKK+mruiA+IGd1w6A7ICM5QUZBCivpq7sgPiBqw6w7ICM5QUZCCivpq7wgPiBww6luZzsgIzlBRkMKK+mrvSA+IHpodcSBOyAjOUFGRAor6au+ID4gc2jEgW87ICM5QUZFCivpq78gPiBzaMSBOyAjOUFGRgor6ayAID4gdMOsOyAjOUIwMAor6ayBID4gbMOsOyAjOUIwMQor6ayCID4gYsOsbjsgIzlCMDIKK+msgyA+IHrFjW5nOyAjOUIwMwor6ayEID4gdMOsOyAjOUIwNAor6ayFID4gcMOpbmc7ICM5QjA1CivprIYgPiBzxY1uZzsgIzlCMDYKK+mshyA+IHpoxJNuZzsgIzlCMDcKK+msiCA+IHF1w6FuOyAjOUIwOAor6ayJID4gesWNbmc7ICM5QjA5CivprIogPiBzaMO5bjsgIzlCMEEKK+msiyA+IGppxIFuOyAjOUIwQgor6ayMID4gZMWtbzsgIzlCMEMKK+msjSA+IGjDujsgIzlCMEQKK+msjiA+IGzDoDsgIzlCMEUKK+msjyA+IGrEq3U7ICM5QjBGCivprJAgPiBxw607ICM5QjEwCivprJEgPiBsacOhbjsgIzlCMTEKK+mskiA+IHpoxJVuOyAjOUIxMgor6ayTID4gYsOsbjsgIzlCMTMKK+mslCA+IHDDqW5nOyAjOUIxNAor6ayVID4gbcOyOyAjOUIxNQor6ayWID4gc8SBbjsgIzlCMTYKK+mslyA+IG3DoG47ICM5QjE3CivprJggPiBtw6FuOyAjOUIxOAor6ayZID4gc8STbmc7ICM5QjE5CivprJogPiB4xas7ICM5QjFBCivprJsgPiBsacOoOyAjOUIxQgor6aycID4gcWnEgW47ICM5QjFDCivprJ0gPiBxacSBbjsgIzlCMUQKK+msniA+IG7Ds25nOyAjOUIxRQor6ayfID4gaHXDoW47ICM5QjFGCivprKAgPiBrdcOgaTsgIzlCMjAKK+msoSA+IG7DrW5nOyAjOUIyMQor6ayiID4gYsOsbjsgIzlCMjIKK+msoyA+IGxpw6g7ICM5QjIzCivprKQgPiByw6FuZzsgIzlCMjQKK+mspSA+IGTDsnU7ICM5QjI1CivprKYgPiBkw7J1OyAjOUIyNgor6aynID4gbsOgbzsgIzlCMjcKK+msqCA+IGjFjW5nOyAjOUIyOAor6aypID4geMOsOyAjOUIyOQor6ayqID4gZMOydTsgIzlCMkEKK+msqyA+IGjEg247ICM5QjJCCivprKwgPiBkw7J1OyAjOUIyQwor6aytID4gZMOydTsgIzlCMkQKK+msriA+IGrEq3U7ICM5QjJFCivprK8gPiBjaMOgbmc7ICM5QjJGCivprLAgPiB5w7k7ICM5QjMwCivprLEgPiB5w7k7ICM5QjMxCivprLIgPiBsw6w7ICM5QjMyCivprLMgPiBqdcOgbjsgIzlCMzMKK+mstCA+IGbFrTsgIzlCMzQKK+mstSA+IHFpw6FuOyAjOUIzNQor6ay2ID4gZ8WraTsgIzlCMzYKK+mstyA+IHrFjW5nOyAjOUIzNwor6ay4ID4gbMOsdTsgIzlCMzgKK+msuSA+IGfFq2k7ICM5QjM5CivprLogPiBzaMSBbmc7ICM5QjNBCivprLsgPiB5w7k7ICM5QjNCCivprLwgPiBnxa1pOyAjOUIzQwor6ay9ID4gbcOoaTsgIzlCM0QKK+msviA+IGrDrDsgIzlCM0UKK+msvyA+IHHDrTsgIzlCM0YKK+mtgCA+IGppw6g7ICM5QjQwCivprYEgPiBrw7ppOyAjOUI0MQor6a2CID4gaMO6bjsgIzlCNDIKK+mtgyA+IGLDoTsgIzlCNDMKK+mthCA+IHDDsjsgIzlCNDQKK+mthSA+IG3DqGk7ICM5QjQ1CivprYYgPiB4w7k7ICM5QjQ2CivprYcgPiB5xINuOyAjOUI0Nwor6a2IID4geGnEgW87ICM5QjQ4CivprYkgPiBsacSDbmc7ICM5QjQ5CivprYogPiB5w7k7ICM5QjRBCivprYsgPiB0w7ppOyAjOUI0Qgor6a2MID4gccSrOyAjOUI0Qwor6a2NID4gd8SDbmc7ICM5QjRECivprY4gPiBsacSDbmc7ICM5QjRFCivprY8gPiB3w6hpOyAjOUI0Rgor6a2QID4gamnEgW47ICM5QjUwCivprZEgPiBjaMSrOyAjOUI1MQor6a2SID4gcGnEgW87ICM5QjUyCivprZMgPiBiw6w7ICM5QjUzCivprZQgPiBtw7M7ICM5QjU0CivprZUgPiBqxK07ICM5QjU1CivprZYgPiB4xas7ICM5QjU2CivprZcgPiBjaMWPdTsgIzlCNTcKK+mtmCA+IHnEg247ICM5QjU4CivprZkgPiB6aMSDbjsgIzlCNTkKK+mtmiA+IHnDujsgIzlCNUEKK+mtmyA+IGTEgW87ICM5QjVCCivprZwgPiByw6luOyAjOUI1Qwor6a2dID4gasOsOyAjOUI1RAor6a2fID4gZ8WNbmc7ICM5QjVGCivpraAgPiB0w7pvOyAjOUI2MAor6a2hID4gZGnDoG87ICM5QjYxCivpraIgPiBqxK07ICM5QjYyCivpraMgPiB4w7k7ICM5QjYzCivpraQgPiDDqTsgIzlCNjQKK+mtpSA+IMOoOyAjOUI2NQor6a2mID4gc2jEgTsgIzlCNjYKK+mtpyA+IGjDoW5nOyAjOUI2Nwor6a2oID4gdMO6bjsgIzlCNjgKK+mtqSA+IG3DsjsgIzlCNjkKK+mtqiA+IGppw6g7ICM5QjZBCivprasgPiBzaMSVbjsgIzlCNkIKK+mtrCA+IGbEg247ICM5QjZDCivpra0gPiB5dcOhbjsgIzlCNkQKK+mtriA+IGLDrTsgIzlCNkUKK+mtryA+IGzFrTsgIzlCNkYKK+mtsCA+IHfDqW47ICM5QjcwCivprbEgPiBow7o7ICM5QjcxCivprbIgPiBsw7o7ICM5QjcyCivprbMgPiB6w6E7ICM5QjczCivprbQgPiBmw6FuZzsgIzlCNzQKK+mttSA+IGbDqW47ICM5Qjc1CivprbYgPiBuw6A7ICM5Qjc2CivprbcgPiB5w7N1OyAjOUI3Nwor6a26ID4gaMOpOyAjOUI3QQor6a27ID4geGnDoTsgIzlCN0IKK+mtvCA+IHHFqzsgIzlCN0MKK+mtvSA+IGjEgW47ICM5QjdECivprb4gPiBww607ICM5QjdFCivprb8gPiBsw61uZzsgIzlCN0YKK+mugCA+IHTDum87ICM5QjgwCivproEgPiBixY07ICM5QjgxCivproIgPiBxw611OyAjOUI4Mgor6a6DID4gcMOtbmc7ICM5QjgzCivproQgPiBmw7o7ICM5Qjg0CivproUgPiBiw6w7ICM5Qjg1CivproYgPiBqw6w7ICM5Qjg2CivprocgPiB3w6hpOyAjOUI4Nwor6a6IID4gasWrOyAjOUI4OAor6a6JID4gZGnEgW87ICM5Qjg5CivproogPiBiw7M7ICM5QjhBCivprosgPiB5w7N1OyAjOUI4Qgor6a6MID4gZ8WtbjsgIzlCOEMKK+mujSA+IHDEqzsgIzlCOEQKK+mujiA+IG5pw6FuOyAjOUI4RQor6a6PID4geMSrbmc7ICM5QjhGCivprpAgPiB0w6FpOyAjOUI5MAor6a6RID4gYsOgbzsgIzlCOTEKK+mukiA+IGbDuTsgIzlCOTIKK+mukyA+IHpoxIM7ICM5QjkzCivprpQgPiBqw7k7ICM5Qjk0CivprpUgPiBnxas7ICM5Qjk1CivprpkgPiB0w6A7ICM5Qjk5CivprpogPiBqacOpOyAjOUI5QQor6a6bID4gc2jDuTsgIzlCOUIKK+munCA+IGjDsnU7ICM5QjlDCivprp0gPiB4acSDbmc7ICM5QjlECivprp4gPiDDqXI7ICM5QjlFCivprp8gPiDDoG47ICM5QjlGCivprqAgPiB3w6lpOyAjOUJBMAor6a6hID4gdGnEgW87ICM5QkExCivprqIgPiB6aMWrOyAjOUJBMgor6a6jID4gecOsbjsgIzlCQTMKK+mupCA+IGxpw6g7ICM5QkE0CivprqUgPiBsw7lvOyAjOUJBNQor6a6mID4gdMOzbmc7ICM5QkE2CivprqcgPiB5w607ICM5QkE3CivprqggPiBxw607ICM5QkE4CivprqkgPiBiw6xuZzsgIzlCQTkKK+muqiA+IHfElWk7ICM5QkFBCivprqsgPiBqacSDbzsgIzlCQUIKK+murCA+IGLDuTsgIzlCQUMKK+murSA+IGfFq2k7ICM5QkFECivprq4gPiB4acSBbjsgIzlCQUUKK+muryA+IGfDqTsgIzlCQUYKK+musCA+IGjDumk7ICM5QkIwCivprrMgPiBrxINvOyAjOUJCMwor6a61ID4gZMO6bzsgIzlCQjUKK+mutiA+IGrFq247ICM5QkI2CivprrcgPiB0w607ICM5QkI3CivprrggPiBtxINuOyAjOUJCOAor6a65ID4geGnEgW87ICM5QkI5CivprrogPiB6xIM7ICM5QkJBCivprrsgPiBzaMSBOyAjOUJCQgor6a68ID4gccSrbjsgIzlCQkMKK+muvSA+IHnDujsgIzlCQkQKK+muviA+IG7ElWk7ICM5QkJFCivprr8gPiB6aMOpOyAjOUJCRgor6a+AID4gZ8WtbjsgIzlCQzAKK+mvgSA+IGfElW5nOyAjOUJDMQor6a+CID4gc3U7ICM5QkMyCivpr4MgPiB3w7o7ICM5QkMzCivpr4QgPiBxw611OyAjOUJDNAor6a+FID4gdMOtbmc7ICM5QkM1Civpr4YgPiBmxa07ICM5QkM2Civpr4cgPiB3xINuOyAjOUJDNwor6a+IID4gecOzdTsgIzlCQzgKK+mviSA+IGzErTsgIzlCQzkKK+mviiA+IHNoxIE7ICM5QkNBCivpr4sgPiBzaMSBOyAjOUJDQgor6a+MID4gZ8OgbzsgIzlCQ0MKK+mvjSA+IG3DqW5nOyAjOUJDRAor6a+SID4gecWPbmc7ICM5QkQyCivpr5MgPiBuw607ICM5QkQzCivpr5QgPiB6xKs7ICM5QkQ0Civpr5UgPiBxw607ICM5QkQ1Civpr5YgPiBxxKtuZzsgIzlCRDYKK+mvlyA+IHhpxINuZzsgIzlCRDcKK+mvmCA+IG7ElWk7ICM5QkQ4Civpr5kgPiBjaMO6bjsgIzlCRDkKK+mvmiA+IGrDrDsgIzlCREEKK+mvmyA+IGRpxIFvOyAjOUJEQgor6a+cID4gcWnDqDsgIzlCREMKK+mvnSA+IGfDuTsgIzlCREQKK+mvniA+IHpoxY91OyAjOUJERQor6a+fID4gZMWNbmc7ICM5QkRGCivpr6AgPiBsw6FpOyAjOUJFMAor6a+hID4gZsSTaTsgIzlCRTEKK+mvoiA+IG7DrTsgIzlCRTIKK+mvoyA+IHnDrDsgIzlCRTMKK+mvpCA+IGvFq247ICM5QkU0Civpr6UgPiBsw7k7ICM5QkU1Civpr6YgPiBqw6x1OyAjOUJFNgor6a+nID4gY2jEgW5nOyAjOUJFNwor6a+oID4gasSrbmc7ICM5QkU4Civpr6kgPiBsw7puOyAjOUJFOQor6a+qID4gbMOtbmc7ICM5QkVBCivpr6sgPiB6xY11OyAjOUJFQgor6a+sID4gbMOtOyAjOUJFQwor6a+tID4gbcSVbmc7ICM5QkVECivpr64gPiB6xY1uZzsgIzlCRUUKK+mvryA+IHpow6w7ICM5QkVGCivpr7AgPiBuacOhbjsgIzlCRjAKK+mvtCA+IHNoxKs7ICM5QkY0Civpr7UgPiBzaMSTbjsgIzlCRjUKK+mvtiA+IGjFrW47ICM5QkY2Civpr7cgPiBzaMOsOyAjOUJGNwor6a+4ID4gaMOzdTsgIzlCRjgKK+mvuSA+IHjEq25nOyAjOUJGOQor6a+6ID4gemjFqzsgIzlCRkEKK+mvuyA+IGzDoDsgIzlCRkIKK+mvvCA+IHrFjW5nOyAjOUJGQwor6a+9ID4gasOsOyAjOUJGRAor6a++ID4gYmnEgW47ICM5QkZFCivpr78gPiBiacSBbjsgIzlCRkYKK+mwgCA+IGh1w6BuOyAjOUMwMAor6bCBID4gcXXDoW47ICM5QzAxCivpsIIgPiB6w6k7ICM5QzAyCivpsIMgPiB3xJNpOyAjOUMwMwor6bCEID4gd8STaTsgIzlDMDQKK+mwhSA+IHnDujsgIzlDMDUKK+mwhiA+IHHFq247ICM5QzA2CivpsIcgPiByw7N1OyAjOUMwNwor6bCIID4gZGnDqTsgIzlDMDgKK+mwiSA+IGh1w6FuZzsgIzlDMDkKK+mwiiA+IGxpw6BuOyAjOUMwQQor6bCLID4gecSDbjsgIzlDMEIKK+mwjCA+IHHDrXU7ICM5QzBDCivpsI0gPiBxxKt1OyAjOUMwRAor6bCOID4gamnDoG47ICM5QzBFCivpsI8gPiBiw6w7ICM5QzBGCivpsJAgPiDDqDsgIzlDMTAKK+mwkSA+IHnDoW5nOyAjOUMxMQor6bCSID4gZsO5OyAjOUMxMgor6bCTID4gc8SBaTsgIzlDMTMKK+mwlCA+IGppxINuOyAjOUMxNAor6bCVID4geGnDoTsgIzlDMTUKK+mwliA+IHTFrW87ICM5QzE2CivpsJcgPiBow7o7ICM5QzE3CivpsJkgPiByw7lvOyAjOUMxOQor6bCbID4gd8STbjsgIzlDMUIKK+mwnCA+IGppxIFuOyAjOUMxQwor6bCdID4gaMOgbzsgIzlDMUQKK+mwniA+IHfFqzsgIzlDMUUKK+mwnyA+IGbDoW5nOyAjOUMxRgor6bCgID4gc8SBbzsgIzlDMjAKK+mwoSA+IGzDrXU7ICM5QzIxCivpsKIgPiBtxIM7ICM5QzIyCivpsKMgPiBzaMOtOyAjOUMyMwor6bCkID4gc2jEqzsgIzlDMjQKK+mwpSA+IHnDrW47ICM5QzI1CivpsKYgPiB6zIQ7ICM5QzI2CivpsKcgPiB0w6luZzsgIzlDMjcKK+mwqCA+IHTDoDsgIzlDMjgKK+mwqSA+IHnDoW87ICM5QzI5CivpsKogPiBnw6k7ICM5QzJBCivpsKsgPiByw7NuZzsgIzlDMkIKK+mwrCA+IHFpw6FuOyAjOUMyQwor6bCtID4gccOtOyAjOUMyRAor6bCuID4gd8STbjsgIzlDMkUKK+mwryA+IHLDuW87ICM5QzJGCivpsLEgPiBsacOhbjsgIzlDMzEKK+mwsiA+IMOhbzsgIzlDMzIKK+mwsyA+IGzDqDsgIzlDMzMKK+mwtCA+IGjFq2k7ICM5QzM0CivpsLUgPiBtxK1uOyAjOUMzNQor6bC2ID4gasOsOyAjOUMzNgor6bC3ID4gdGnDoW87ICM5QzM3CivpsLggPiBxxas7ICM5QzM4CivpsLkgPiBqacSBbjsgIzlDMzkKK+mwuiA+IHPEgW87ICM5QzNBCivpsLsgPiBtw6FuOyAjOUMzQgor6bC8ID4geMOtOyAjOUMzQwor6bC9ID4gccOtdTsgIzlDM0QKK+mwviA+IGJpw6BvOyAjOUMzRQor6bC/ID4gasSrOyAjOUMzRgor6bGAID4gasOsOyAjOUM0MAor6bGBID4gemjDujsgIzlDNDEKK+mxgiA+IGppxIFuZzsgIzlDNDIKK+mxgyA+IHHEq3U7ICM5QzQzCivpsYQgPiB6aHXEgW47ICM5QzQ0CivpsYUgPiB5w7NuZzsgIzlDNDUKK+mxhiA+IHpoxIFuZzsgIzlDNDYKK+mxhyA+IGvEgW5nOyAjOUM0Nwor6bGIID4geHXElTsgIzlDNDgKK+mxiSA+IGJpxJM7ICM5QzQ5CivpsYogPiBqdcOpOyAjOUM0QQor6bGLID4gccWrOyAjOUM0Qgor6bGMID4geGnDoG5nOyAjOUM0Qwor6bGNID4gYsWNOyAjOUM0RAor6bGOID4gamnEgW87ICM5QzRFCivpsY8gPiB4w7puOyAjOUM0Rgor6bGQID4gc8O5OyAjOUM1MAor6bGRID4gaHXDoW5nOyAjOUM1MQor6bGSID4gesO5bjsgIzlDNTIKK+mxkyA+IHNow6BuOyAjOUM1Mwor6bGUID4gc2jDoG47ICM5QzU0CivpsZUgPiBmxIFuOyAjOUM1NQor6bGWID4ganXDqTsgIzlDNTYKK+mxlyA+IGzDrW47ICM5QzU3CivpsZggPiB4w7puOyAjOUM1OAor6bGZID4gbWnDoW87ICM5QzU5CivpsZogPiB4xK07ICM5QzVBCivpsZ0gPiBmw6huOyAjOUM1RAor6bGeID4gZ3XEgW47ICM5QzVFCivpsZ8gPiBow7J1OyAjOUM1Rgor6bGgID4ga3XDoGk7ICM5QzYwCivpsaEgPiB6w6lpOyAjOUM2MQor6bGiID4gc8SBbzsgIzlDNjIKK+mxoyA+IHpoxIFuOyAjOUM2Mwor6bGkID4gZ8SDbjsgIzlDNjQKK+mxpSA+IGfDuWk7ICM5QzY1CivpsaYgPiBzaMOpbmc7ICM5QzY2CivpsacgPiBsxK07ICM5QzY3CivpsaggPiBjaMOhbmc7ICM5QzY4CivpsawgPiByw7o7ICM5QzZDCivpsa0gPiBqw6w7ICM5QzZECivpsa4gPiB4w7k7ICM5QzZFCivpsa8gPiBow7lvOyAjOUM2Rgor6bGxID4gbMOsOyAjOUM3MQor6bGyID4gbGnDqDsgIzlDNzIKK+mxsyA+IGzDrDsgIzlDNzMKK+mxtCA+IG1pw6g7ICM5Qzc0CivpsbUgPiB6aMSTbjsgIzlDNzUKK+mxtiA+IHhpxINuZzsgIzlDNzYKK+mxtyA+IMOoOyAjOUM3Nwor6bG4ID4gbMO6OyAjOUM3OAor6bG5ID4gZ3XDoG47ICM5Qzc5CivpsbogPiBsw607ICM5QzdBCivpsbsgPiB4acSBbjsgIzlDN0IKK+mxvCA+IHnDujsgIzlDN0MKK+mxvSA+IGTEgW87ICM5QzdECivpsb4gPiBqxK07ICM5QzdFCivpsb8gPiB5w7N1OyAjOUM3Rgor6bKAID4gdMO6bjsgIzlDODAKK+mygSA+IGzFrTsgIzlDODEKK+mygiA+IGbDoW5nOyAjOUM4Mgor6bKDID4gYsSBOyAjOUM4Mwor6bKEID4gaMOpOyAjOUM4NAor6bKFID4gYsWNOyAjOUM4NQor6bKGID4gcMOtbmc7ICM5Qzg2CivpsocgPiBuacOhbjsgIzlDODcKK+myiCA+IGzDujsgIzlDODgKK+myiSA+IHnDs3U7ICM5Qzg5CivpsoogPiB6aMSDOyAjOUM4QQor6bKLID4gZsO5OyAjOUM4Qgor6bKMID4gYsOzOyAjOUM4Qwor6bKNID4gYsOgbzsgIzlDOEQKK+myjiA+IGjDsnU7ICM5QzhFCivpso8gPiBwxKs7ICM5QzhGCivpspAgPiB0w6FpOyAjOUM5MAor6bKRID4gZ8WraTsgIzlDOTEKK+mykiA+IGppw6k7ICM5QzkyCivpspMgPiBrxINvOyAjOUM5Mwor6bKUID4gd8SVaTsgIzlDOTQKK+mylSA+IMOpcjsgIzlDOTUKK+myliA+IHTDs25nOyAjOUM5Ngor6bKXID4gesOpOyAjOUM5Nwor6bKYID4gaMOydTsgIzlDOTgKK+mymSA+IGt1w6BpOyAjOUM5OQor6bKaID4gasOsOyAjOUM5QQor6bKbID4gamnEg287ICM5QzlCCivpspwgPiB4acSBbjsgIzlDOUMKK+mynSA+IHrEgzsgIzlDOUQKK+myniA+IHhpxINuZzsgIzlDOUUKK+mynyA+IHjDum47ICM5QzlGCivpsqAgPiBnxJVuZzsgIzlDQTAKK+myoSA+IGzDrTsgIzlDQTEKK+myoiA+IGxpw6FuOyAjOUNBMgor6bKjID4gamnEgW47ICM5Q0EzCivpsqQgPiBsxK07ICM5Q0E0CivpsqUgPiBzaMOtOyAjOUNBNQor6bKmID4gdGnDoW87ICM5Q0E2CivpsqcgPiBnxa1uOyAjOUNBNwor6bKoID4gc2jEgTsgIzlDQTgKK+myqSA+IHfEg247ICM5Q0E5CivpsqogPiBqxatuOyAjOUNBQQor6bKrID4gasOsOyAjOUNBQgor6bKsID4gecWPbmc7ICM5Q0FDCivpsq0gPiBxxKtuZzsgIzlDQUQKK+myriA+IGzDrW5nOyAjOUNBRQor6bKvID4gccOtOyAjOUNBRgor6bKwID4gesWNdTsgIzlDQjAKK+mysSA+IGbEk2k7ICM5Q0IxCivpsrIgPiBrxatuOyAjOUNCMgor6bKzID4gY2jEgW5nOyAjOUNCMwor6bK0ID4gZ8O5OyAjOUNCNAor6bK1ID4gbsOtOyAjOUNCNQor6bK2ID4gbmnDoW47ICM5Q0I2CivpsrcgPiBkacSBbzsgIzlDQjcKK+myuCA+IGrEq25nOyAjOUNCOAor6bK5ID4gc2jEk247ICM5Q0I5CivpsrogPiBzaMSrOyAjOUNCQQor6bK7ID4gesSrOyAjOUNCQgor6bK8ID4gZsOobjsgIzlDQkMKK+myvSA+IGRpw6k7ICM5Q0JECivpsr4gPiBiw6w7ICM5Q0JFCivpsr8gPiBjaMOhbmc7ICM5Q0JGCivps4AgPiBzaMOsOyAjOUNDMAor6bOBID4gd8STbjsgIzlDQzEKK+mzgiA+IHfEk2k7ICM5Q0MyCivps4MgPiBzxIFpOyAjOUNDMwor6bOEID4gw6g7ICM5Q0M0Civps4UgPiBxxKt1OyAjOUNDNQor6bOGID4gZsO5OyAjOUNDNgor6bOHID4gaHXDoW5nOyAjOUNDNwor6bOIID4gcXXDoW47ICM5Q0M4Civps4kgPiBqacSBbmc7ICM5Q0M5Civps4ogPiBiacSBbjsgIzlDQ0EKK+mziyA+IHPEgW87ICM5Q0NCCivps4wgPiDDoW87ICM5Q0NDCivps40gPiBxw607ICM5Q0NECivps44gPiB0w6A7ICM5Q0NFCivps48gPiB5w61uOyAjOUNDRgor6bOQID4gecOhbzsgIzlDRDAKK+mzkSA+IGbDoW5nOyAjOUNEMQor6bOSID4gamnEgW47ICM5Q0QyCivps5MgPiBsw6g7ICM5Q0QzCivps5QgPiBiacOgbzsgIzlDRDQKK+mzlSA+IHh1xJU7ICM5Q0Q1Civps5YgPiBiacSTOyAjOUNENgor6bOXID4gbcOhbjsgIzlDRDcKK+mzmCA+IG3ErW47ICM5Q0Q4Civps5kgPiB5w7NuZzsgIzlDRDkKK+mzmiA+IHfDqGk7ICM5Q0RBCivps5sgPiB4w607ICM5Q0RCCivps5wgPiBqdcOpOyAjOUNEQwor6bOdID4gc2jDoG47ICM5Q0RECivps54gPiBsw61uOyAjOUNERQor6bOfID4gesO5bjsgIzlDREYKK+mzoCA+IGjDuW87ICM5Q0UwCivps6EgPiBnxINuOyAjOUNFMQor6bOiID4gbMStOyAjOUNFMgor6bOjID4gemjEgW47ICM5Q0UzCivps6QgPiBndcSDbjsgIzlDRTQKK+mzpSA+IG5pxINvOyAjOUNFNQor6bOmID4gecStOyAjOUNFNgor6bOnID4gZsO6OyAjOUNFNwor6bOoID4gbMOsOyAjOUNFOAor6bOpID4gasSrdTsgIzlDRTkKK+mzqiA+IGLFrTsgIzlDRUEKK+mzqyA+IHnDoG47ICM5Q0VCCivps6wgPiBmw7o7ICM5Q0VDCivps60gPiBkacSBbzsgIzlDRUQKK+mzriA+IGrEqzsgIzlDRUUKK+mzryA+IGbDqG5nOyAjOUNFRgor6bOxID4gZ8SBbjsgIzlDRjEKK+mzsiA+IHNoxKs7ICM5Q0YyCivps7MgPiBmw6huZzsgIzlDRjMKK+mztCA+IG3DrW5nOyAjOUNGNAor6bO1ID4gYsSDbzsgIzlDRjUKK+mztiA+IHl1xIFuOyAjOUNGNgor6bO3ID4gemjEqzsgIzlDRjcKK+mzuCA+IGjDuTsgIzlDRjgKK+mzuSA+IHHDrW47ICM5Q0Y5Civps7ogPiBmxas7ICM5Q0ZBCivps7sgPiBmxJNuOyAjOUNGQgor6bO8ID4gd8OpbjsgIzlDRkMKK+mzvSA+IGppxIFuOyAjOUNGRAor6bO+ID4gc2jEqzsgIzlDRkUKK+mzvyA+IHnDuTsgIzlDRkYKK+m0gCA+IGbFj3U7ICM5RDAwCivptIEgPiB5acSBbzsgIzlEMDEKK+m0giA+IGp1w6g7ICM5RDAyCivptIMgPiBqdcOpOyAjOUQwMwor6bSEID4gcMSrOyAjOUQwNAor6bSFID4gaHXEgW47ICM5RDA1CivptIYgPiB6aMOobjsgIzlEMDYKK+m0hyA+IGLEg287ICM5RDA3CivptIggPiB5w6BuOyAjOUQwOAor6bSJID4gecSBOyAjOUQwOQor6bSKID4gemjDqG5nOyAjOUQwQQor6bSLID4gZsSBbmc7ICM5RDBCCivptIwgPiBmw6huZzsgIzlEMEMKK+m0jSA+IHfDqW47ICM5RDBECivptI4gPiDFjXU7ICM5RDBFCivptI8gPiB0w6g7ICM5RDBGCivptJAgPiBqacSBOyAjOUQxMAor6bSRID4gbsO6OyAjOUQxMQor6bSSID4gbMOtbmc7ICM5RDEyCivptJMgPiBtacOoOyAjOUQxMwor6bSUID4gZsO6OyAjOUQxNAor6bSVID4gdMO6bzsgIzlEMTUKK+m0liA+IHfDqW47ICM5RDE2CivptJcgPiBsw6w7ICM5RDE3CivptJggPiBiacOgbjsgIzlEMTgKK+m0mSA+IHpow6w7ICM5RDE5CivptJogPiBnxJM7ICM5RDFBCivptJsgPiB5dcSBbjsgIzlEMUIKK+m0nCA+IHrEqzsgIzlEMUMKK+m0nSA+IHHDujsgIzlEMUQKK+m0niA+IHhpxIFvOyAjOUQxRQor6bSfID4gemjEqzsgIzlEMUYKK+m0oCA+IGTDoG47ICM5RDIwCivptKEgPiBqxas7ICM5RDIxCivptKIgPiB5w7J1OyAjOUQyMgor6bSjID4gZ8WrOyAjOUQyMwor6bSkID4gemjFjW5nOyAjOUQyNAor6bSlID4gecO5OyAjOUQyNQor6bSmID4gecSBbmc7ICM5RDI2CivptKcgPiByw7JuZzsgIzlEMjcKK+m0qCA+IHnEgTsgIzlEMjgKK+m0qSA+IHRpxJU7ICM5RDI5CivptKogPiB5w7k7ICM5RDJBCivptKwgPiB5xKtuZzsgIzlEMkMKK+m0rSA+IHpoxatpOyAjOUQyRAor6bSuID4gd8WrOyAjOUQyRQor6bSvID4gw6lyOyAjOUQyRgor6bSwID4gZ3XEgTsgIzlEMzAKK+m0sSA+IMOgaTsgIzlEMzEKK+m0siA+IHpoxKs7ICM5RDMyCivptLMgPiB5w6BuOyAjOUQzMwor6bS0ID4gaMOpbmc7ICM5RDM0CivptLUgPiBqacSBbzsgIzlEMzUKK+m0tiA+IGrDrTsgIzlEMzYKK+m0tyA+IGxpw6g7ICM5RDM3CivptLggPiB6aMWrOyAjOUQzOAor6bS5ID4gcsOpbjsgIzlEMzkKK+m0uiA+IHnDrTsgIzlEM0EKK+m0uyA+IGjDs25nOyAjOUQzQgor6bS8ID4gbMO5bzsgIzlEM0MKK+m0vSA+IHLDujsgIzlEM0QKK+m0viA+IG3Ds3U7ICM5RDNFCivptL8gPiBnxJM7ICM5RDNGCivptYAgPiByw6huOyAjOUQ0MAor6bWBID4gamnEgW87ICM5RDQxCivptYIgPiB4xKt1OyAjOUQ0Mgor6bWDID4gemjFjXU7ICM5RDQzCivptYQgPiB6aMSrOyAjOUQ0NAor6bWFID4gbMO5bzsgIzlENDUKK+m1iSA+IGx1w6FuOyAjOUQ0OQor6bWKID4gamnDoTsgIzlENEEKK+m1iyA+IGrDrDsgIzlENEIKK+m1jCA+IHnDujsgIzlENEMKK+m1jSA+IGh1xIFuOyAjOUQ0RAor6bWOID4gdMWtbzsgIzlENEUKK+m1jyA+IGLFqzsgIzlENEYKK+m1kCA+IHfDujsgIzlENTAKK+m1kSA+IGp1xIFuOyAjOUQ1MQor6bWSID4gecO5OyAjOUQ1Mgor6bWTID4gYsOzOyAjOUQ1Mwor6bWUID4geMO5bjsgIzlENTQKK+m1lSA+IHjDuW47ICM5RDU1CivptZYgPiBiw6w7ICM5RDU2CivptZcgPiB4xKs7ICM5RDU3CivptZggPiBqw7luOyAjOUQ1OAor6bWZID4gasO6OyAjOUQ1OQor6bWaID4gdMO6OyAjOUQ1QQor6bWbID4gasSrbmc7ICM5RDVCCivptZwgPiB0w607ICM5RDVDCivptZ0gPiDDqTsgIzlENUQKK+m1niA+IMOpOyAjOUQ1RQor6bWfID4ga3XDoW5nOyAjOUQ1Rgor6bWgID4gaMO6OyAjOUQ2MAor6bWhID4gd8WtOyAjOUQ2MQor6bWiID4gc2jEk247ICM5RDYyCivptaMgPiBsw6BpOyAjOUQ2Mwor6bWmID4gbMO5OyAjOUQ2Ngor6bWnID4gcMOtbmc7ICM5RDY3CivptaggPiBzaMWrOyAjOUQ2OAor6bWpID4gZsO6OyAjOUQ2OQor6bWqID4gxIFuOyAjOUQ2QQor6bWrID4gemjDoG87ICM5RDZCCivptawgPiBww6luZzsgIzlENkMKK+m1rSA+IHHDrW47ICM5RDZECivpta4gPiBxacSBbjsgIzlENkUKK+m1ryA+IGLEk2k7ICM5RDZGCivptbAgPiBkacSBbzsgIzlENzAKK+m1sSA+IGzDuTsgIzlENzEKK+m1siA+IHF1w6g7ICM5RDcyCivptbMgPiBqacSBbjsgIzlENzMKK+m1tCA+IGrDujsgIzlENzQKK+m1tSA+IHTDuTsgIzlENzUKK+m1tiA+IHnEgTsgIzlENzYKK+m1tyA+IHl1xIFuOyAjOUQ3Nwor6bW4ID4gccOtOyAjOUQ3OAor6bW5ID4gbMOtOyAjOUQ3OQor6bW6ID4gecOoOyAjOUQ3QQor6bW7ID4gemjFq2k7ICM5RDdCCivptbwgPiBrxY1uZzsgIzlEN0MKK+m1vSA+IHpow7lpOyAjOUQ3RAor6bW+ID4ga8WrbjsgIzlEN0UKK+m1vyA+IHNoxJNuZzsgIzlEN0YKK+m2gCA+IHHDrTsgIzlEODAKK+m2gSA+IGrEq25nOyAjOUQ4MQor6baCID4gecOsOyAjOUQ4Mgor6baDID4gecOsOyAjOUQ4Mwor6baEID4gasSrbmc7ICM5RDg0CivptoUgPiB6xKs7ICM5RDg1CivptoYgPiBsw6FpOyAjOUQ4Ngor6baHID4gZMWNbmc7ICM5RDg3CivptoggPiBxxKs7ICM5RDg4CivptokgPiBjaMO6bjsgIzlEODkKK+m2iiA+IGfEk25nOyAjOUQ4QQor6baLID4gasWrOyAjOUQ4Qgor6baMID4gccWrOyAjOUQ4Qwor6baPID4gasSrOyAjOUQ4Rgor6baQID4gc2jDuTsgIzlEOTAKK+m2kiA+IGNow6w7ICM5RDkyCivptpMgPiBtacOhbzsgIzlEOTMKK+m2lCA+IHLDs3U7ICM5RDk0CivptpUgPiDEgW47ICM5RDk1CivptpYgPiBxxKt1OyAjOUQ5Ngor6baXID4gdMOtOyAjOUQ5Nwor6baYID4gaMO6OyAjOUQ5OAor6baZID4gdMOtOyAjOUQ5OQor6baaID4gw6g7ICM5RDlBCivptpsgPiBqacSTOyAjOUQ5Qgor6bacID4gbcOhbzsgIzlEOUMKK+m2nSA+IGbDujsgIzlEOUQKK+m2niA+IGNoxatuOyAjOUQ5RQor6bafID4gdMO6OyAjOUQ5Rgor6bagID4gecSDbjsgIzlEQTAKK+m2oSA+IGjDqTsgIzlEQTEKK+m2oiA+IHl1w6FuOyAjOURBMgor6bajID4gcGnEgW47ICM5REEzCivptqQgPiB5w7luOyAjOURBNAor6balID4gbcOpaTsgIzlEQTUKK+m2piA+IGjDujsgIzlEQTYKK+m2pyA+IHnEq25nOyAjOURBNwor6baoID4gZMO5bjsgIzlEQTgKK+m2qSA+IG3DuTsgIzlEQTkKK+m2qiA+IGrDujsgIzlEQUEKK+m2rCA+IGPEgW5nOyAjOURBQwor6batID4gZsSDbmc7ICM5REFECivptq4gPiBnw7k7ICM5REFFCivptq8gPiB5xKtuZzsgIzlEQUYKK+m2sCA+IHl1w6FuOyAjOURCMAor6baxID4geHXEgW47ICM5REIxCivptrIgPiB3xJNuZzsgIzlEQjIKK+m2syA+IHNoxKs7ICM5REIzCivptrQgPiBow6g7ICM5REI0CivptrUgPiBjaMO6OyAjOURCNQor6ba2ID4gdMOhbmc7ICM5REI2CivptrcgPiB4acOgOyAjOURCNwor6ba4ID4gcsO5bzsgIzlEQjgKK+m2uSA+IGzDrXU7ICM5REI5CivptrogPiBqw607ICM5REJBCivptrsgPiBnw7o7ICM5REJCCivptrwgPiBqacSBbjsgIzlEQkMKK+m2vSA+IHpoxa1uOyAjOURCRAor6ba+ID4gaMOgbjsgIzlEQkUKK+m2vyA+IHrEqzsgIzlEQkYKK+m3gCA+IHrEqzsgIzlEQzAKK+m3gSA+IG7DrDsgIzlEQzEKK+m3giA+IHnDoG87ICM5REMyCivpt4MgPiB5w6BuOyAjOURDMwor6beEID4gasSrOyAjOURDNAor6beFID4gbMOsOyAjOURDNQor6beGID4gdGnDoW47ICM5REM2Civpt4cgPiBrw7J1OyAjOURDNwor6beIID4gdMSrOyAjOURDOAor6beJID4gdMSrOyAjOURDOQor6beKID4gbsOsOyAjOURDQQor6beLID4gdMO6OyAjOURDQgor6beMID4gbcSDOyAjOURDQwor6beNID4gamnEgW87ICM5RENECivpt44gPiBnxIFvOyAjOURDRQor6bePID4gdGnDoW47ICM5RENGCivpt5AgPiBjaMOpbjsgIzlERDAKK+m3kSA+IGzDrDsgIzlERDEKK+m3kiA+IHpodcSBbjsgIzlERDIKK+m3kyA+IHpow6g7ICM5REQzCivpt5QgPiDDoW87ICM5REQ0Civpt5UgPiB5xINvOyAjOURENQor6beWID4gecSrOyAjOURENgor6beXID4gxY11OyAjOURENwor6beYID4gY2jDrDsgIzlERDgKK+m3mSA+IHpow6w7ICM5REQ5Civpt5ogPiBsacOhbzsgIzlEREEKK+m3myA+IHLDs25nOyAjOUREQgor6becID4gbMOzdTsgIzlEREMKK+m3nSA+IGLDrDsgIzlEREQKK+m3niA+IHNodcSBbmc7ICM5RERFCivpt58gPiB6aMO6bzsgIzlEREYKK+m3oCA+IHnDujsgIzlERTAKK+m3oSA+IHfDujsgIzlERTEKK+m3oiA+IGp1w6k7ICM5REUyCivpt6MgPiB5w61uOyAjOURFMwor6bekID4gcXXDoW47ICM5REU0Civpt6UgPiBzxKs7ICM5REU1Civpt6YgPiBqacSBbzsgIzlERTYKK+m3pyA+IHnDrDsgIzlERTcKK+m3qCA+IGh1xIE7ICM5REU4Civpt6kgPiBiw6w7ICM5REU5Civpt6ogPiB5xKtuZzsgIzlERUEKK+m3qyA+IHPDuTsgIzlERUIKK+m3rCA+IGh1w6FuZzsgIzlERUMKK+m3rSA+IGbDoW47ICM5REVECivpt64gPiBqacSBbzsgIzlERUUKK+m3ryA+IGxpw6FvOyAjOURFRgor6bewID4gecOgbjsgIzlERjAKK+m3sSA+IGvEgW87ICM5REYxCivpt7IgPiBqw6x1OyAjOURGMgor6bezID4geGnDoW47ICM5REYzCivpt7QgPiB4acOhbjsgIzlERjQKK+m3tSA+IHTDujsgIzlERjUKK+m3tiA+IG3Eg2k7ICM5REY2Civpt7cgPiB6xatuOyAjOURGNwor6be4ID4gecO5OyAjOURGOAor6be5ID4gecSrbmc7ICM5REY5Civpt7ogPiBsw7k7ICM5REZBCivpt7sgPiB0dcOhbjsgIzlERkIKK+m3vCA+IHhpw6FuOyAjOURGQwor6be9ID4geHXDqTsgIzlERkQKK+m3viA+IHnDrDsgIzlERkUKK+m3vyA+IHDDrDsgIzlERkYKK+m4gCA+IHNow7o7ICM5RTAwCivpuIEgPiBsw7pvOyAjOUUwMQor6biCID4gccSrOyAjOUUwMgor6biDID4gecOtOyAjOUUwMwor6biEID4gasOtOyAjOUUwNAor6biFID4gemjDqTsgIzlFMDUKK+m4hiA+IHnDujsgIzlFMDYKK+m4hyA+IHpoxIFuOyAjOUUwNwor6biIID4gecOoOyAjOUUwOAor6biJID4gecOhbmc7ICM5RTA5CivpuIogPiBww6w7ICM5RTBBCivpuIsgPiBuw61uZzsgIzlFMEIKK+m4jCA+IGjDuW87ICM5RTBDCivpuI0gPiBtw607ICM5RTBECivpuI4gPiB5xKtuZzsgIzlFMEUKK+m4jyA+IG3DqW5nOyAjOUUwRgor6biQID4gZMOtOyAjOUUxMAor6biRID4geXXDqDsgIzlFMTEKK+m4kiA+IHnDujsgIzlFMTIKK+m4kyA+IGzElWk7ICM5RTEzCivpuJQgPiBiw6BvOyAjOUUxNAor6biVID4gbMO6OyAjOUUxNQor6biWID4gaMOoOyAjOUUxNgor6biXID4gbMOzbmc7ICM5RTE3CivpuJggPiBzaHXEgW5nOyAjOUUxOAor6biZID4geXXDqDsgIzlFMTkKK+m4miA+IHnEq25nOyAjOUUxQQor6bibID4gZ3XDoG47ICM5RTFCCivpuJwgPiBxw7o7ICM5RTFDCivpuJ0gPiBsw607ICM5RTFECivpuJ4gPiBsdcOhbjsgIzlFMUUKK+m4nyA+IG5pxINvOyAjOUUxRgor6bigID4gasSrdTsgIzlFMjAKK+m4oSA+IGrEqzsgIzlFMjEKK+m4oiA+IHl1xIFuOyAjOUUyMgor6bijID4gbcOtbmc7ICM5RTIzCivpuKQgPiBzaMSrOyAjOUUyNAor6bilID4gxY11OyAjOUUyNQor6bimID4gecSBOyAjOUUyNgor6binID4gY8SBbmc7ICM5RTI3CivpuKggPiBixINvOyAjOUUyOAor6bipID4gemjDqG47ICM5RTI5CivpuKogPiBnxas7ICM5RTJBCivpuKsgPiBkxY1uZzsgIzlFMkIKK+m4rCA+IGzDujsgIzlFMkMKK+m4rSA+IHnEgTsgIzlFMkQKK+m4riA+IHhpxIFvOyAjOUUyRQor6bivID4gecSBbmc7ICM5RTJGCivpuLAgPiBsw61uZzsgIzlFMzAKK+m4sSA+IHpoxKs7ICM5RTMxCivpuLIgPiBxw7o7ICM5RTMyCivpuLMgPiB5dcSBbjsgIzlFMzMKK+m4tCA+IHh1w6k7ICM5RTM0CivpuLUgPiB0w7pvOyAjOUUzNQor6bi2ID4gc8SrOyAjOUUzNgor6bi3ID4gemjDrDsgIzlFMzcKK+m4uCA+IMOpcjsgIzlFMzgKK+m4uSA+IGd1xIE7ICM5RTM5CivpuLogPiB4xKt1OyAjOUUzQQor6bi7ID4gaMOpbmc7ICM5RTNCCivpuLwgPiB6aMWNdTsgIzlFM0MKK+m4vSA+IGfEkzsgIzlFM0QKK+m4viA+IGx1w6FuOyAjOUUzRQor6bi/ID4gaMOzbmc7ICM5RTNGCivpuYAgPiB3w7o7ICM5RTQwCivpuYEgPiBiw7M7ICM5RTQxCivpuYIgPiBsw607ICM5RTQyCivpuYMgPiBqdcSBbjsgIzlFNDMKK+m5hCA+IGjDujsgIzlFNDQKK+m5hSA+IMOpOyAjOUU0NQor6bmGID4gecO5OyAjOUU0Ngor6bmHID4geGnDoW47ICM5RTQ3CivpuYggPiB0w607ICM5RTQ4CivpuYkgPiB3xa07ICM5RTQ5CivpuYogPiBxdcOoOyAjOUU0QQor6bmLID4gbWnDoW87ICM5RTRCCivpuYwgPiDEgW47ICM5RTRDCivpuY0gPiBrxatuOyAjOUU0RAor6bmOID4gYsSTaTsgIzlFNEUKK+m5jyA+IHDDqW5nOyAjOUU0Rgor6bmQID4gcWnEgW47ICM5RTUwCivpuZEgPiBjaMO6bjsgIzlFNTEKK+m5kiA+IGfEk25nOyAjOUU1Mgor6bmTID4geXXEgW47ICM5RTUzCivpuZQgPiBzw7k7ICM5RTU0CivpuZUgPiBow7o7ICM5RTU1CivpuZYgPiBow6k7ICM5RTU2CivpuZcgPiDDqDsgIzlFNTcKK+m5mCA+IGfDujsgIzlFNTgKK+m5mSA+IHHEq3U7ICM5RTU5CivpuZogPiB6xKs7ICM5RTVBCivpuZsgPiBtw6lpOyAjOUU1Qgor6bmcID4gbcO5OyAjOUU1Qwor6bmdID4gbsOsOyAjOUU1RAor6bmeID4gecOgbzsgIzlFNUUKK+m5nyA+IHfEk25nOyAjOUU1Rgor6bmgID4gbMOtdTsgIzlFNjAKK+m5oSA+IGrDrTsgIzlFNjEKK+m5oiA+IG7DrDsgIzlFNjIKK+m5oyA+IGppxIFuOyAjOUU2Mwor6bmkID4gaMOoOyAjOUU2NAor6bmlID4gecSrOyAjOUU2NQor6bmmID4gecSrbmc7ICM5RTY2CivpuacgPiB6aMOoOyAjOUU2Nwor6bmoID4gbGnDoW87ICM5RTY4CivpuakgPiBsacOhbzsgIzlFNjkKK+m5qiA+IGppxIFvOyAjOUU2QQor6bmrID4gasOsdTsgIzlFNkIKK+m5rCA+IHnDuTsgIzlFNkMKK+m5rSA+IGzDuTsgIzlFNkQKK+m5riA+IHh1w6FuOyAjOUU2RQor6bmvID4gemjEgW47ICM5RTZGCivpubAgPiB5xKtuZzsgIzlFNzAKK+m5sSA+IGjDuW87ICM5RTcxCivpubIgPiBtw6luZzsgIzlFNzIKK+m5syA+IGd1w6BuOyAjOUU3Mwor6bm0ID4gc2h1xIFuZzsgIzlFNzQKK+m5tSA+IGzFrTsgIzlFNzUKK+m5tiA+IGrEq247ICM5RTc2CivpubcgPiBsw61uZzsgIzlFNzcKK+m5uCA+IGppxINuOyAjOUU3OAor6bm5ID4geGnDoW47ICM5RTc5CivpubogPiBjw7pvOyAjOUU3QQor6bm7ID4gamnEg247ICM5RTdCCivpubwgPiBqacSDbjsgIzlFN0MKK+m5vSA+IHnDoW47ICM5RTdECivpub4gPiBjw7pvOyAjOUU3RQor6bm/ID4gbMO5OyAjOUU3Rgor6bqAID4gecWNdTsgIzlFODAKK+m6gSA+IGPFqzsgIzlFODEKK+m6giA+IGrErTsgIzlFODIKK+m6gyA+IGJpxIFvOyAjOUU4Mwor6bqEID4gY8WrOyAjOUU4NAor6bqFID4gYmnEgW87ICM5RTg1CivpuoYgPiB6aMO5OyAjOUU4Ngor6bqHID4gasWrbjsgIzlFODcKK+m6iCA+IHpoxa07ICM5RTg4CivpuokgPiBqacSBbjsgIzlFODkKK+m6iiA+IG3DrTsgIzlFOEEKK+m6iyA+IG3DrTsgIzlFOEIKK+m6jCA+IHfDujsgIzlFOEMKK+m6jSA+IGzDrXU7ICM5RThECivpuo4gPiBjaMOpbjsgIzlFOEUKK+m6jyA+IGrFq247ICM5RThGCivpupAgPiBsw61uOyAjOUU5MAor6bqRID4gbsOtOyAjOUU5MQor6bqSID4gccOtOyAjOUU5Mgor6bqTID4gbMO5OyAjOUU5Mwor6bqUID4gasOsdTsgIzlFOTQKK+m6lSA+IGrFq247ICM5RTk1CivpupYgPiBqxKtuZzsgIzlFOTYKK+m6lyA+IGzDrDsgIzlFOTcKK+m6mCA+IHhpxIFuZzsgIzlFOTgKK+m6mSA+IHnDoW47ICM5RTk5CivpupogPiBqacSBOyAjOUU5QQor6bqbID4gbcOtOyAjOUU5Qgor6bqcID4gbMOsOyAjOUU5Qwor6bqdID4gc2jDqDsgIzlFOUQKK+m6niA+IHpoxIFuZzsgIzlFOUUKK+m6nyA+IGzDrW47ICM5RTlGCivpuqAgPiBqxKtuZzsgIzlFQTAKK+m6oSA+IGrEqzsgIzlFQTEKK+m6oiA+IGzDrW5nOyAjOUVBMgor6bqjID4gecOhbjsgIzlFQTMKK+m6pCA+IGPFqzsgIzlFQTQKK+m6pSA+IG3DoGk7ICM5RUE1CivpuqYgPiBtw6BpOyAjOUVBNgor6bqnID4gZ8STOyAjOUVBNwor6bqoID4gY2jEg287ICM5RUE4CivpuqkgPiBmxas7ICM5RUE5CivpuqogPiBtacSDbjsgIzlFQUEKK+m6qyA+IG1pxINuOyAjOUVBQgor6bqsID4gZsWrOyAjOUVBQwor6bqtID4gcMOgbzsgIzlFQUQKK+m6riA+IHHDuTsgIzlFQUUKK+m6ryA+IHHDujsgIzlFQUYKK+m6sCA+IG3Ds3U7ICM5RUIwCivpurEgPiBmxas7ICM5RUIxCivpurIgPiB4acOgbjsgIzlFQjIKK+m6syA+IGzDoWk7ICM5RUIzCivpurQgPiBxw7o7ICM5RUI0CivpurUgPiBtacOgbjsgIzlFQjUKK+m6tyA+IGbEk25nOyAjOUVCNwor6bq4ID4gZsWrOyAjOUVCOAor6bq5ID4gccO6OyAjOUVCOQor6bq6ID4gbWnDoG47ICM5RUJBCivpursgPiBtw6E7ICM5RUJCCivpurwgPiBtbzsgIzlFQkMKK+m6vSA+IG1vOyAjOUVCRAor6bq+ID4gaMWraTsgIzlFQkUKK+m7gCA+IHrFjXU7ICM5RUMwCivpu4EgPiBuxJNuOyAjOUVDMQor6buCID4gZsOpbjsgIzlFQzIKK+m7gyA+IGh1w6FuZzsgIzlFQzMKK+m7hCA+IGh1w6FuZzsgIzlFQzQKK+m7hSA+IGrEq247ICM5RUM1Civpu4YgPiBndcSBbmc7ICM5RUM2Civpu4cgPiB0acSBbjsgIzlFQzcKK+m7iCA+IHTFj3U7ICM5RUM4Civpu4kgPiBow6luZzsgIzlFQzkKK+m7iiA+IHjEqzsgIzlFQ0EKK+m7iyA+IGt1xINuZzsgIzlFQ0IKK+m7jCA+IGjDqW5nOyAjOUVDQwor6buNID4gc2jFrTsgIzlFQ0QKK+m7jiA+IGzDrTsgIzlFQ0UKK+m7jyA+IG5pw6FuOyAjOUVDRgor6buQID4gY2jEqzsgIzlFRDAKK+m7kSA+IGjEk2k7ICM5RUQxCivpu5IgPiBoxJNpOyAjOUVEMgor6buTID4gecOsOyAjOUVEMwor6buUID4gcWnDoW47ICM5RUQ0Civpu5UgPiBkxIFuOyAjOUVENQor6buWID4geMOsOyAjOUVENgor6buXID4gdHXEg247ICM5RUQ3Civpu5ggPiBtw7I7ICM5RUQ4Civpu5kgPiBtw7I7ICM5RUQ5Civpu5ogPiBxacOhbjsgIzlFREEKK+m7myA+IGTDoGk7ICM5RURCCivpu5wgPiBjaMO5OyAjOUVEQwor6budID4gecWPdTsgIzlFREQKK+m7niA+IGRpxINuOyAjOUVERQor6bufID4gecSrOyAjOUVERgor6bugID4geGnDoTsgIzlFRTAKK+m7oSA+IHnEg247ICM5RUUxCivpu6IgPiBxxas7ICM5RUUyCivpu6MgPiBtxJVpOyAjOUVFMwor6bukID4gecSDbjsgIzlFRTQKK+m7pSA+IGrEq25nOyAjOUVFNQor6bumID4gecO5OyAjOUVFNgor6bunID4gbMOtOyAjOUVFNwor6buoID4gZMSDbmc7ICM5RUU4Civpu6kgPiBkw7o7ICM5RUU5Civpu6ogPiBjxINuOyAjOUVFQQor6burID4gecSrbjsgIzlFRUIKK+m7rCA+IMOgbjsgIzlFRUMKK+m7rSA+IHnEgW47ICM5RUVECivpu64gPiB0xINuOyAjOUVFRQor6buvID4gw6BuOyAjOUVFRgor6buwID4gemjElW47ICM5RUYwCivpu7EgPiBkw6BpOyAjOUVGMQor6buyID4gY8SDbjsgIzlFRjIKK+m7syA+IHnEqzsgIzlFRjMKK+m7tCA+IG3DqWk7ICM5RUY0Civpu7UgPiBkxINuOyAjOUVGNQor6bu2ID4gecSDbjsgIzlFRjYKK+m7tyA+IGTDujsgIzlFRjcKK+m7uCA+IGzDujsgIzlFRjgKK+m7uSA+IHpoxK07ICM5RUY5Civpu7ogPiBmxJVuOyAjOUVGQQor6bu7ID4gZsO5OyAjOUVGQgor6bu8ID4gZsWtOyAjOUVGQwor6bu9ID4gbcStbjsgIzlFRkQKK+m7viA+IG3ErW47ICM5RUZFCivpu78gPiB5dcOhbjsgIzlFRkYKK+m8gCA+IGPDuTsgIzlGMDAKK+m8gSA+IHHDuTsgIzlGMDEKK+m8giA+IGNow6FvOyAjOUYwMgor6byDID4gd8SBOyAjOUYwMwor6byEID4gemjFqzsgIzlGMDQKK+m8hSA+IHpoxKs7ICM5RjA1CivpvIYgPiBtw6FuZzsgIzlGMDYKK+m8hyA+IMOhbzsgIzlGMDcKK+m8iCA+IGJpxJM7ICM5RjA4CivpvIkgPiB0w7pvOyAjOUYwOQor6byKID4gYsOsOyAjOUYwQQor6byLID4geXXDoW47ICM5RjBCCivpvIwgPiBjaMOhbzsgIzlGMEMKK+m8jSA+IHTDum87ICM5RjBECivpvI4gPiBkxK1uZzsgIzlGMEUKK+m8jyA+IG3DrDsgIzlGMEYKK+m8kCA+IG7DoGk7ICM5RjEwCivpvJEgPiBkxK1uZzsgIzlGMTEKK+m8kiA+IHrEqzsgIzlGMTIKK+m8kyA+IGfFrTsgIzlGMTMKK+m8lCA+IGfFrTsgIzlGMTQKK+m8lSA+IGTFjW5nOyAjOUYxNQor6byWID4gZsOpbjsgIzlGMTYKK+m8lyA+IHTDoW87ICM5RjE3CivpvJggPiB5dcSBbjsgIzlGMTgKK+m8mSA+IHDDrTsgIzlGMTkKK+m8miA+IGNoxIFuZzsgIzlGMUEKK+m8myA+IGfEgW87ICM5RjFCCivpvJwgPiBxw6w7ICM5RjFDCivpvJ0gPiB5dcSBbjsgIzlGMUQKK+m8niA+IHTEgW5nOyAjOUYxRQor6byfID4gdMSTbmc7ICM5RjFGCivpvKAgPiBzaMWtOyAjOUYyMAor6byhID4gc2jFrTsgIzlGMjEKK+m8oiA+IGbDqW47ICM5RjIyCivpvKMgPiBmw6hpOyAjOUYyMwor6bykID4gd8OpbjsgIzlGMjQKK+m8pSA+IGLDoTsgIzlGMjUKK+m8piA+IGRpxIFvOyAjOUYyNgor6bynID4gdMO6bzsgIzlGMjcKK+m8qCA+IHTDs25nOyAjOUYyOAor6bypID4gccO6OyAjOUYyOQor6byqID4gc2jEk25nOyAjOUYyQQor6byrID4gc2jDrTsgIzlGMkIKK+m8rCA+IHnDsnU7ICM5RjJDCivpvK0gPiBzaMOtOyAjOUYyRAor6byuID4gdMOtbmc7ICM5RjJFCivpvK8gPiB3w7o7ICM5RjJGCivpvLAgPiBuacOgbjsgIzlGMzAKK+m8sSA+IGrEq25nOyAjOUYzMQor6byyID4gaMO6bjsgIzlGMzIKK+m8syA+IGrDujsgIzlGMzMKK+m8tCA+IHnEg247ICM5RjM0CivpvLUgPiB0w7o7ICM5RjM1CivpvLYgPiB0w607ICM5RjM2CivpvLcgPiB4xKs7ICM5RjM3CivpvLggPiB4acSDbjsgIzlGMzgKK+m8uSA+IHnEg247ICM5RjM5CivpvLogPiBsw6lpOyAjOUYzQQor6by7ID4gYsOtOyAjOUYzQgor6by8ID4gecSDbzsgIzlGM0MKK+m8vSA+IHHDrXU7ICM5RjNECivpvL4gPiBoxIFuOyAjOUYzRQor6by/ID4gd8WrOyAjOUYzRgor6b2AID4gd8O5OyAjOUY0MAor6b2BID4gaMOzdTsgIzlGNDEKK+m9giA+IHjDrDsgIzlGNDIKK+m9gyA+IGfDqTsgIzlGNDMKK+m9hCA+IHpoxIE7ICM5RjQ0CivpvYUgPiB4w6x1OyAjOUY0NQor6b2GID4gd8Oobmc7ICM5RjQ2CivpvYcgPiB6aMSBOyAjOUY0Nwor6b2IID4gbsOzbmc7ICM5RjQ4CivpvYkgPiBuw6BuZzsgIzlGNDkKK+m9iiA+IHHDrTsgIzlGNEEKK+m9iyA+IHpoxIFpOyAjOUY0Qgor6b2MID4gasOsOyAjOUY0Qwor6b2NID4gesSrOyAjOUY0RAor6b2OID4gasSrOyAjOUY0RQor6b2PID4gasSrOyAjOUY0Rgor6b2QID4gccOtOyAjOUY1MAor6b2RID4gasSrOyAjOUY1MQor6b2SID4gY2jErTsgIzlGNTIKK+m9kyA+IGNow6huOyAjOUY1Mwor6b2UID4gY2jDqG47ICM5RjU0CivpvZUgPiBow6k7ICM5RjU1CivpvZYgPiB5w6E7ICM5RjU2CivpvZcgPiBrxJVuOyAjOUY1Nwor6b2YID4geGnDqDsgIzlGNTgKK+m9mSA+IHDDoW87ICM5RjU5CivpvZogPiBjw7lvOyAjOUY1QQor6b2bID4gc2jDrDsgIzlGNUIKK+m9nCA+IHrEqzsgIzlGNUMKK+m9nSA+IGNoxKs7ICM5RjVECivpvZ4gPiBuacOgbjsgIzlGNUUKK+m9nyA+IGrFrTsgIzlGNUYKK+m9oCA+IHRpw6FvOyAjOUY2MAor6b2hID4gbMOtbmc7ICM5RjYxCivpvaIgPiBsw61uZzsgIzlGNjIKK+m9oyA+IGNoxas7ICM5RjYzCivpvaQgPiBxdcOhbjsgIzlGNjQKK+m9pSA+IHhpw6g7ICM5RjY1CivpvaYgPiBrxJVuOyAjOUY2Ngor6b2nID4gbmnDqDsgIzlGNjcKK+m9qCA+IGrDrHU7ICM5RjY4CivpvakgPiB5xINvOyAjOUY2OQor6b2qID4gY2jDuW87ICM5RjZBCivpvasgPiBrxa1uOyAjOUY2Qgor6b2sID4gecWtOyAjOUY2Qwor6b2tID4gY2jFrTsgIzlGNkQKK+m9riA+IHnErTsgIzlGNkUKK+m9ryA+IG7DrTsgIzlGNkYKK+m9sCA+IGPDuW87ICM5RjcwCivpvbEgPiB6xY11OyAjOUY3MQor6b2yID4gccWtOyAjOUY3Mgor6b2zID4gbsSVbjsgIzlGNzMKK+m9tCA+IHhpxINuOyAjOUY3NAor6b21ID4gw7N1OyAjOUY3NQor6b22ID4gw6g7ICM5Rjc2CivpvbcgPiB3w7I7ICM5Rjc3CivpvbggPiB5w6w7ICM5Rjc4CivpvbkgPiBjaMWrbzsgIzlGNzkKK+m9uiA+IHrFjXU7ICM5RjdBCivpvbsgPiBkacSBbjsgIzlGN0IKK+m9vCA+IGNoxa07ICM5RjdDCivpvb0gPiBqw6xuOyAjOUY3RAor6b2+ID4gecOgOyAjOUY3RQor6b2/ID4gY2jErTsgIzlGN0YKK+m+gCA+IGNow6huOyAjOUY4MAor6b6BID4gaMOpOyAjOUY4MQor6b6CID4ga8SVbjsgIzlGODIKK+m+gyA+IGrFrTsgIzlGODMKK+m+hCA+IGzDrW5nOyAjOUY4NAor6b6FID4gcMOhbzsgIzlGODUKK+m+hiA+IHRpw6FvOyAjOUY4Ngor6b6HID4gesSrOyAjOUY4Nwor6b6IID4ga8SVbjsgIzlGODgKK+m+iSA+IHnFrTsgIzlGODkKK+m+iiA+IGNow7lvOyAjOUY4QQor6b6LID4gccWtOyAjOUY4Qgor6b6MID4gd8OyOyAjOUY4Qwor6b6NID4gbMOzbmc7ICM5RjhECivpvo4gPiBww6FuZzsgIzlGOEUKK+m+jyA+IGfFjW5nOyAjOUY4Rgor6b6QID4gcMOhbmc7ICM5RjkwCivpvpEgPiB5xINuOyAjOUY5MQor6b6SID4gbMOzbmc7ICM5RjkyCivpvpMgPiBsw7NuZzsgIzlGOTMKK+m+lCA+IGfFjW5nOyAjOUY5NAor6b6VID4ga8SBbjsgIzlGOTUKK+m+liA+IHTDoDsgIzlGOTYKK+m+lyA+IGzDrW5nOyAjOUY5Nwor6b6YID4gdMOgOyAjOUY5OAor6b6ZID4gbMOzbmc7ICM5Rjk5CivpvpogPiBnxY1uZzsgIzlGOUEKK+m+myA+IGvEgW47ICM5RjlCCivpvpwgPiBnxatpOyAjOUY5Qwor6b6dID4gccSrdTsgIzlGOUQKK+m+niA+IGJpxJM7ICM5RjlFCivpvp8gPiBnxatpOyAjOUY5Rgor6b6gID4geXXDqDsgIzlGQTAKK+m+oSA+IGNow7lpOyAjOUZBMQor6b6iID4gaMOpOyAjOUZBMgor6b6jID4ganXDqTsgIzlGQTMKK+m+pCA+IHhpw6k7ICM5RkE0CivpvqUgPiB5w7k7ICM5RkE1CivvpI4gPiBsw6A7ICNGOTBFCivvqIwgPiB3w7k7ICNGQTBDCivvqI0gPiBow7lvOyAjRkEwRAor76iQID4gemjFj25nOyAjRkExMAor76iSID4gccOtbmc7ICNGQTEyCivvqJUgPiB4xKs7ICNGQTE1CivvqJYgPiB6aMWrOyAjRkExNgor76iXID4gecOsOyAjRkExNwor76iYID4gbMStOyAjRkExOAor76iZID4gc2jDqW47ICNGQTE5CivvqJogPiB4acOhbmc7ICNGQTFBCivvqJsgPiBmw7o7ICNGQTFCCivvqJwgPiBqw6xuZzsgI0ZBMUMKK++onSA+IGrEq25nOyAjRkExRAor76ieID4gecWtOyAjRkExRQor76iiID4gemjFqzsgI0ZBMjIKK++opSA+IHnDrDsgI0ZBMjUKK++opiA+IGTFqzsgI0ZBMjYKK++oqiA+IGbDoG47ICNGQTJBCivvqKsgPiBzw6w7ICNGQTJCCivvqKwgPiBndcSDbjsgI0ZBMkMKK++orSA+IGjDqDsgI0ZBMkQKKworIyBlb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC9yZXNvdXJjZXMvVHJhbnNsaXRlcmF0b3JfS2FuamlfRW5nbGlzaC50eHQgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvcmVzb3VyY2VzL1RyYW5zbGl0ZXJhdG9yX0thbmppX0VuZ2xpc2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlMzUzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvcmVzb3VyY2VzL1RyYW5zbGl0ZXJhdG9yX0thbmppX0VuZ2xpc2gudHh0CkBAIC0wLDAgKzEsNjM2NiBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERhdGU6IFR1ZSBKYW4gMjMgMTI6NDI6MDIgMjAwMQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgS2FuamktRW5nbGlzaAorCivkuIE+J1ttYWxlIGFkdWx0XSc7CivkuIM+J1tzZXZlbl0nOwor5LiHPidbdGVuIHRob3VzYW5kXSc7CivkuIg+J1t1bml0IG9mIGxlbmd0aCBlcXVhbCAzLjMgbWV0ZXJzXSc7CivkuIk+J1t0aHJlZV0nOwor5LiKPidbdG9wXSc7CivkuIs+J1t1bmRlcl0nOwor5LiNPidbbm9dJzsKK+S4jj4nW2FuZF0nOwor5LiQPidbYmVnZ2FyXSc7CivkuJE+J1tjbG93bl0nOwor5LiUPidbbW9yZW92ZXJdJzsKK+S4lT4nW2dyZWF0XSc7CivkuJY+J1tnZW5lcmF0aW9uXSc7CivkuJc+J1t0aGlydHldJzsKK+S4mD4nW2hpbGxdJzsKK+S4mT4nW3RoaXJkIG9mIGhlYXZlbmx5IHN0ZW1zXSc7CivkuJ4+J1thc3Npc3RdJzsKK+S4oT4nW3R3b10nOwor5LimPidbZXF1YWwgdG9dJzsKK+S4qj4nW251bWVyYXJ5IGFkanVuY3RdJzsKK+S4rT4nW2NlbnRyYWxdJzsKK+S4sT4nW2NoaWxkJydzIGhhaXJzdHlsZSBib3VuZCBpbiB0d28gdHVmdHNdJzsKK+S4sj4nW3N0cmluZ10nOwor5Li2PidbZG90XSc7CivkuLg+J1tzbWFsbCByb3VuZCBvYmplY3RdJzsKK+S4uT4nW2Npbm5hYmFyIChuYXRpdmUgSGdTKV0nOwor5Li7PidbbWFzdGVyXSc7CivkuLw+J1tib3dsIG9mIGZvb2RdJzsKK+S4vz4nW2xpbmVdJzsKK+S5gj4nW2dvdmVybl0nOwor5LmDPidbdGhlbl0nOwor5LmFPidbbG9uZyB0aW1lIChhZ28pXSc7CivkuYs+J1snJ3MgKG1hcmtzIHByZWNlZGluZyBwaHJhc2UgYXMgbW9kaWZpZXIgb2YgZm9sbG93aW5nIHBocmFzZSldJzsKK+S5jT4nW3N1ZGRlbmx5XSc7CivkuY4+J1tpbnRlcnJvZ2F0aXZlIG9yIGV4Y2xhbWF0b3J5IGZpbmFsIHBhcnRpY2xlXSc7CivkuY8+J1tsYWNrXSc7CivkuZU+J1t0aWdlcl0nOwor5LmWPidbcmViZWxdJzsKK+S5lz4nW3JpZGVdJzsKK+S5mD4nW3JpZGVdJzsKK+S5mT4nW3NlY29uZCBoZWF2ZW4nJ3Mgc3RlbV0nOwor5LmdPidbbmluZV0nOwor5LmePidbYmVnXSc7CivkuZ8+J1thbHNvXSc7CivkuaI+J1tsaWRdJzsKK+S5sT4nW2NvbmZ1c2lvbl0nOwor5LmzPidbYnJlYXN0XSc7Civkub4+J1tkcnldJzsKK+S6gD4nW3R1cnRsZSBvciB0b3J0b2lzZV0nOwor5LqCPidbY29uZnVzaW9uXSc7CivkuoU+J1tob29rXSc7CivkuoY+J1t0byBmaW5pc2hdJzsKK+S6iD4nW0ldJzsKK+S6iT4nW2Rpc3B1dGVdJzsKK+S6ij4nW2FmZmFpcl0nOwor5LqLPidbYWZmYWlyXSc7Civkuow+J1t0d29dJzsKK+S6jj4nW2luXSc7CivkupE+J1tzYXldJzsKK+S6kj4nW211dHVhbGx5XSc7CivkupQ+J1tmaXZlXSc7CivkupU+J1t3ZWxsXSc7Civkupg+J1tleHRlbmQgYWNyb3NzXSc7Civkupk+J1tleHRlbmQgYWNyb3NzXSc7Civkups+J1tsaXR0bGVdJzsKK+S6nD4nW2FzaWFdJzsKK+S6nj4nW2FzaWFdJzsKK+S6nz4nW3VyZ2VudGx5XSc7CivkuqA+J1toZWFkXSc7CivkuqE+J1tkZWF0aF0nOwor5LqiPidbaGlnaF0nOwor5LqkPidbbWl4XSc7CivkuqU+J1tsYXN0IG9mIDEyIGVhcnRoIGJyYW5jaGVzXSc7CivkuqY+J1thbHNvXSc7Civkuqg+J1tzbW9vdGhseV0nOwor5LqrPidbZW5qb3ldJzsKK+S6rD4nW2NhcGl0YWwgY2l0eV0nOwor5LqtPidbcGF2aWxpb25dJzsKK+S6rj4nW2JyaWdodF0nOwor5LqwPidbY2FwaXRhbCBjaXR5XSc7CivkurM+J1tuYW1lIG9mIGRpc3RyaWN0IGluIEFuaHVpXSc7CivkurY+J1tzaW5jZXJlXSc7Civkuro+J1ttYW5dJzsKK+S7gD4nW2ZpbGUgb2YgdGVuIHNvbGRpZXJzXSc7Civku4E+J1todW1hbmVuZXNzXSc7Civku4I+J1tzdXJwbHVzIG9yIGV4Y2Vzc10nOwor5LuEPidbc2xhbnRpbmddJzsKK+S7hj4nW2ZhbGwgZm9yd2FyZF0nOwor5LuHPidbZW5lbXldJzsKK+S7ij4nW25vd10nOwor5LuLPidbZm9yZXJ1bm5lcl0nOwor5LuNPidbeWV0XSc7Civku44+J1tmcm9tXSc7Civku48+J1tidWRkaGFdJzsKK+S7lD4nW3NtYWxsIHRoaW5nXSc7Civku5U+J1tvZmZpY2lhbF0nOwor5LuWPidbb3RoZXJdJzsKK+S7lz4nW3JlbHkgdXBvbl0nOwor5LuYPidbZ2l2ZV0nOwor5LuZPidbVGFvaXN0IHN1cGVyLWJlaW5nXSc7Civku50+J1t0b2dldGhlcl0nOwor5LuePidbYW5jaWVudCB1bml0IG9mIG1lYXN1cmUgKDggZmVldCldJzsKK+S7nz4nW29uZSB0aG91c2FuZF0nOwor5LujPidbcmVwbGFjZV0nOwor5LukPidbY29tbWFuZF0nOwor5LulPidbYnkgbWVhbnMgb2ZdJzsKK+S7rT4nW2FuY2llbnQgdW5pdCBvZiBtZWFzdXJlICg4IGZlZXQpXSc7Civku64+J1tmYWxzZWhvb2RdJzsKK+S7sD4nW3JhaXNlIHRoZSBoZWFkIHRvIGxvb2tdJzsKK+S7sj4nW21pZGRsZSBicm90aGVyXSc7Civku7Y+J1tudW1lcmFyeSBhZGp1bmN0IGZvciBhcnRpY2xlXSc7Civku7c+J1twcmljZV0nOwor5Lu7PidbdHJ1c3QgdG9dJzsKK+S8gT4nW3BsYW4gYSBwcm9qZWN0XSc7CivkvIk+J1tjb21wYXJlXSc7CivkvIo+J1t0aGlyZCBwZXJzb24gcHJvbm91bl0nOwor5LyNPidbZml2ZV0nOwor5LyOPidbdGFsZW50XSc7CivkvI8+J1tjcm91Y2hdJzsKK+S8kD4nW2N1dCBkb3duXSc7CivkvJE+J1tyZXN0XSc7CivkvJo+J1thc3NlbWJsZV0nOwor5LycPidbZGVwdXR5XSc7CivkvJ0+J1tzdW1tb25dJzsKK+S8rz4nW29sZGVyIGJyb3RoZXJdJzsKK+S8sD4nW21lcmNoYW50XSc7CivkvLQ+J1tjb21wYW5pb25dJzsKK+S8tj4nW2xvbmVseV0nOwor5Ly4PidbZXh0ZW5kXSc7CivkvLo+J1tzZXJ2ZV0nOwor5Ly8PidbcmVzZW1ibGVdJzsKK+S8vT4nW3RyYW5zY3JpcHRpb24gb2Ygc2Fuc2tyaXQgZ2hhIGluIGJ1ZGRoaXN0IHRleHRzICgnw6ttw6LDpicgXCJzYW1naGFcIildJzsKK+S9gz4nW3RlbmFudCBmYXJtZXJdJzsKK+S9hj4nW29ubHldJzsKK+S9hz4nW3dhaXRdJzsKK+S9jT4nW3Rocm9uZV0nOwor5L2OPidbbG93XSc7CivkvY8+J1tyZXNpZGVdJzsKK+S9kD4nW2Fzc2lzdF0nOwor5L2RPidbaGVscF0nOwor5L2TPidbYm9keV0nOwor5L2VPidbd2hhdF0nOwor5L2XPidbb3RoZXJdJzsKK+S9mT4nW0ldJzsKK+S9mj4nW2luZHVsZ2UgaW4gcGxlYXN1cmVzXSc7CivkvZs+J1tidWRkaGEgKGNvbnRyYWN0aW9uIG9mIE1DICdiaGnDqnRkaGEnKV0nOwor5L2cPidbbWFrZV0nOwor5L2dPidbcmlja2V0c10nOwor5L2ePidbZmxhdHRlcnldJzsKK+S9qT4nW2JlbHQgb3JuYW1lbnRdJzsKK+S9rz4nW3ByZXRlbmRdJzsKK+S9sD4nW2h1bmRyZWRdJzsKK+S9sz4nW2dvb2RdJzsKK+S9tT4nW2NvbWJpbmVdJzsKK+S9tj4nW3N0cm9uZ10nOwor5L27PidbZnJpdm9sb3VzXSc7Civkvbw+J1tiZWF1dGlmdWxdJzsKK+S9vz4nW2NhdXNlXSc7CivkvoM+J1t1cHJpZ2h0IGFuZCBzdHJvbmddJzsKK+S+hj4nW2NvbWVdJzsKK+S+iD4nW2x1eHVyaW91c10nOwor5L6LPidbcHJlY2VkZW50XSc7Civkvo0+J1tzZXJ2ZV0nOwor5L6PPidbc21hbGxdJzsKK+S+kT4nW2hlbHBdJzsKK+S+lj4nW2xvZ2ljYWwgcmVhc29uc10nOwor5L6YPidbZGlzYXBwb2ludGVkXSc7Civkvps+J1tzdXBwbHldJzsKK+S+nT4nW3JlbHkgb25dJzsKK+S+oD4nW2NoaXZhbHJvdXMgcGVyc29uXSc7CivkvqE+J1twcmljZV0nOwor5L6rPidbZmxhdHRlcnldJzsKK+S+rT4nW2NvbXBsZXRlXSc7Civkvq4+J1tpbnN1bHRdJzsKK+S+rz4nW21hcnF1aXNdJzsKK+S+tT4nW2ludmFkZV0nOwor5L62PidbY29tcGFuaW9uXSc7Civkvr8+J1tjb252ZW5pZW5jZV0nOwor5L+CPidbYmluZF0nOwor5L+DPidbdXJnZV0nOwor5L+EPidbc3VkZGVuKGx5KV0nOwor5L+KPidbdGFsZW50ZWRdJzsKK+S/jj4nW2Nob3BwaW5nIGJvYXJkIG9yIGJsb2NrXSc7Civkv5A+J1tzbW9vdGhdJzsKK+S/kT4nW3dvb2RlbiBmaWd1cmUgYnVyaWVkIHdpdGggZGVhZF0nOwor5L+UPidbbGlrZV0nOwor5L+XPidbc29jaWFsIGN1c3RvbXNdJzsKK+S/mD4nW3ByaXNvbmVyIG9mIHdhcl0nOwor5L+aPidbcnVzdGljXSc7Civkv5s+J1ttYWtlIGVmZm9ydF0nOwor5L+dPidbcHJvdGVjdF0nOwor5L+fPidbd2FpdCBmb3JdJzsKK+S/oT4nW3RydXN0XSc7Civkv6M+J1tiaWddJzsKKyMi5L+jPidbYmlnXSciLAor5L+lPidbcmlja3NoYXddJzsKK+S/rj4nW3N0dWR5XSc7Civkv68+J1tib3cgZG93bl0nOwor5L+zPidbYWN0b3JdJzsKK+S/tT4nW2RpdmlkZV0nOwor5L+2Pidbc3RhcnRdJzsKK+S/uD4nW3dhZ2VzXSc7Civkv7o+J1twZXJzb25hbCBwcm9ub3VuXSc7Civkv74+J1tzbyB0aGF0XSc7CivlgIU+J1tkZXB1dHldJzsKK+WAhj4nW2NsZXZlcl0nOwor5YCJPidbZ3JhbmFyeV0nOwor5YCLPidbbnVtZXJhcnkgYWRqdW5jdF0nOwor5YCNPidbdGltZXNdJzsKK+WAjz4nW2hhc3RpbHldJzsKK+WAkT4nW2FkanVuY3QgcHJvbm91biBpbmRpY2F0ZSBwbHVyYWxdJzsKK+WAkj4nW2ZhbGwgb3Zlcl0nOwor5YCUPidbc3R1YmJvcm5dJzsKK+WAlj4nW2x1Y2t5XSc7CivlgJk+J1t3YWl0XSc7CivlgJo+J1tyZWx5IG9uXSc7CivlgJ8+J1tib3Jyb3ddJzsKK+WAoT4nW2d1aWRlXSc7CivlgKM+J1tpbWl0YXRlXSc7CivlgKQ+J1twcmljZV0nOwor5YClPidbYm9vcmlzaF0nOwor5YCmPidbYmUgdGlyZWQgb2ZdJzsKK+WAqD4nW2Fycm9nYW50XSc7CivlgKk+J1tiZWF1dGlmdWxdJzsKK+WAqj4nW2ZlZWJsZV0nOwor5YCrPidbbm9ybWFsIGh1bWFuIHJlbGF0aW9uc2hpcHNdJzsKK+WArD4nW25vdGljZWFibGVdJzsKK+WArT4nW2R3YXJmXSc7CivlgLY+J1thbGxdJzsKK+WAuT4nW3RlbXBlcmF0ZV0nOwor5YGDPidbY2Vhc2VdJzsKK+WBhz4nW2ZhbHNlaG9vZF0nOwor5YGIPidbYnJhdmVdJzsKK+WBiT4nW2dyZWF0XSc7CivlgY8+J1tpbmNsaW5lZCBvbmUgc2lkZV0nOwor5YGQPidbZmFsc2VdJzsKK+WBlT4nW3RvZ2V0aGVyXSc7CivlgZY+J1tyaXAgdXBdJzsKK+WBmj4nW3dvcmtdJzsKK+WBnD4nW3N0b3BdJzsKK+WBpT4nW3N0cm9uZ10nOwor5YGsPidbdXJnZW50XSc7CivlgbI+J1t0YWxlbnRlZF0nOwor5YG0Pidbc2lkZV0nOwor5YG1Pidbc3B5XSc7CivlgbY+J1thY2NpZGVudGFsbHldJzsKK+WBuD4nW3RvIHN0ZWFsXSc7Civlgb0+J1tmYWxzZV0nOwor5YKAPidbZ3JlYXRdJzsKK+WChT4nW3R1dG9yXSc7Civlgo0+J1tieSBzaWRlIG9mXSc7CivlgpE+J1toZXJvXSc7Civlgpg+J1t1bWJyZWxsYV0nOwor5YKZPidbcHJlcGFyZV0nOwor5YKaPidbaW1pdGF0ZV0nOwor5YKsPidbcHJlc3NdJzsKK+WCrT4nW2hpcmVdJzsKK+WCsj4nW3Byb3VkXSc7CivlgrM+J1tzdW1tb25dJzsKK+WCtD4nW2h1bXBiYWNrXSc7CivlgrU+J1tkZWJ0XSc7Civlgrc+J1t3b3VuZF0nOwor5YK+PidbdXBzZXRdJzsKK+WDgj4nW2h1bXBiYWNrXSc7Civlg4U+J1tvbmx5XSc7Civlg4k+J1thbGxdJzsKK+WDij4nW1Rhb2lzdCBzdXBlci1iZWluZ10nOwor5YONPidbbGFib3JdJzsKK+WDjz4nW3BpY3R1cmVdJzsKK+WDkT4nW3Nvam91cm5dJzsKK+WDlT4nW3NsYXZlXSc7Civlg5Y+J1tqb3ldJzsKK+WDmj4nW2NvbXBhbmlvbl0nOwor5YOePidbZmFsc2VdJzsKK+WDoz4nW2Fzc3VtZV0nOwor5YOlPidbYmUgbHVja3ldJzsKK+WDpz4nW2J1ZGRoaXN0IHByaWVzdF0nOwor5YOtPidbYXNzdW1lXSc7Civlg64+J1twYWdlXSc7Civlg7U+J1tzdGlmZiBhbmQgbW90aW9ubGVzc10nOwor5YO5PidbcHJpY2VdJzsKK+WDuz4nW291dC1vZi10aGUtd2F5XSc7CivlhIA+J1tjZXJlbW9ueV0nOwor5YSBPidbb3V0c3RhbmRpbmddJzsKK+WEgj4nW0ldJzsKK+WEhD4nW2h1bmRyZWQgbWlsbGlvbl0nOwor5YSJPidbdGVtcGVyYXRlXSc7CivlhJI+J1tjb25mdWNpYW4gc2Nob2xhcl0nOwor5YSUPidbY29tcGFuaW9uXSc7CivlhJU+J1thIGNvbXBhbnldJzsKKyMi5YSVPidbYSBjb21wYW55XSciLAor5YSYPidbdXRtb3N0XSc7CisjIuWEmD4nW3V0bW9zdF0nIiwKK+WEnz4nW3JlcGF5XSc7CivlhKE+J1twdXBwZXRdJzsKK+WEqj4nW3N1cGVyaW9yXSc7CivlhLI+J1tzYXZlIG1vbmV5XSc7CivlhLc+J1tzcG91c2VdJzsKK+WEuj4nW3JpY2hdJzsKK+WEuz4nW2lmXSc7CivlhLw+J1tncmF2ZV0nOwor5YS/Pidbc29uXSc7CivlhYA+J1t0byBjdXQgb2ZmIHRoZSBmZWV0XSc7CivlhYE+J1t0byBncmFudF0nOwor5YWDPidbZmlyc3RdJzsKK+WFhD4nW2VsZGVyIGJyb3RoZXJdJzsKK+WFhT4nW2ZpbGxdJzsKK+WFhj4nW29tZW5dJzsKK+WFhz4nW2F0cm9jaW91c10nOwor5YWIPidbZmlyc3RdJzsKK+WFiT4nW2xpZ2h0XSc7CivlhYs+J1tncmFtXSc7CivlhYw+J1tjYXNoXSc7CivlhY0+J1tzcGFyZV0nOwor5YWOPidbcmFiYml0XSc7CivlhZA+J1tzb25dJzsKK+WFkj4nW3Nvbl0nOwor5YWUPidbcmFiYml0XSc7CivlhZo+J1twb2xpdGljYWwgcGFydHldJzsKK+WFnD4nW3BvdWNoXSc7CivlhaI+J1tmZWFyZnVsXSc7CivlhaU+J1tlbnRlcl0nOwor5YWoPidbbWFpbnRhaW5dJzsKK+WFqT4nW3R3b10nOwor5YWqPidbc3VybmFtZV0nOwor5YWrPidbZWlnaHRdJzsKK+WFrD4nW2ZhaXJdJzsKK+WFrT4nW251bWJlciBzaXhdJzsKK+WFrj4nW2V4Y2xhbWF0b3J5IHBhcnRpY2xlXSc7CivlhbE+J1t0b2dldGhlciB3aXRoXSc7CivlhbU+J1tzb2xkaWVyXSc7CivlhbY+J1toaXNdJzsKK+WFtz4nW3Rvb2xdJzsKK+WFuD4nW2xhd10nOwor5YW8PidbdW5pdGVdJzsKK+WGgD4nW2hvcGUgZm9yXSc7CivlhoI+J1t3aWRlXSc7CivlhoU+J1tpbnNpZGVdJzsKK+WGhj4nW3llbl0nOwor5YaJPidbdGVuZGVyXSc7Civlhoo+J1tib29rXSc7Civlhow+J1tib29rXSc7Civlho0+J1thZ2Fpbl0nOwor5YaPPidbW25vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XV0nOwor5YaQPidbcmlza10nOwor5YaRPidbaGVsbWV0XSc7CivlhpI+J1tyaXNrXSc7CivlhpM+J1thIHNlY2x1ZGVkIHBsYWNlXSc7CivlhpU+J1tjcm93bl0nOwor5YaWPidbY292ZXJdJzsKK+WGlz4nW2V4Y2Vzc2l2ZV0nOwor5YaZPidbd3JpdGVdJzsKK+WGoD4nW2NhcF0nOwor5YaiPidbYnVyaWFsIG1vdW5kXSc7CivlhqQ+J1tncmlldmFuY2VdJzsKK+WGpT4nW2RhcmtdJzsKK+WGpj4nW2JhbmRpdHNdJzsKK+WGqD4nW2FidW5kYW50XSc7Civlhqk+J1t3cml0ZV0nOwor5YaqPidbY292ZXItY2xvdGhdJzsKK+WGqz4nW2ljZV0nOwor5YasPidbd2ludGVyXSc7CivlhrA+J1tpY2VdJzsKK+WGsT4nW2ZyZWV6aW5nXSc7CivlhrI+J1tzb2FyXSc7CivlhrM+J1tkZWNpZGVdJzsKK+WGtD4nW2ZyZWV6aW5nXSc7CivlhrU+J1tjb25kaXRpb25dJzsKK+WGtj4nW3NtZWx0XSc7Civlhrc+J1tjb2xkXSc7Civlhr0+J1tjb2xkIGFuZCByYXddJzsKK+WHhD4nW2JpdHRlciBjb2xkXSc7Civlh4U+J1tkcmllZCB1cF0nOwor5YeGPidbYXBwcm92ZV0nOwor5YeJPidbY29vbF0nOwor5YeLPidbYmUgd2l0aGVyZWRdJzsKK+WHjD4nW3B1cmVdJzsKK+WHjT4nW2ZyZWV6ZV0nOwor5YeWPidbcnVsZV0nOwor5YebPidbdG8gc2hpdmVyIHdpdGggY29sZCBvciBmZWFyXSc7Civlh5w+J1tzaGl2ZXIgd2l0aCBjb2xkIG9yIGZlYXJdJzsKK+WHnT4nW2NvYWd1bGF0ZV0nOwor5YegPidbc21hbGwgdGFibGVdJzsKK+WHoT4nW2FsbF0nOwor5YemPidbcGxhY2VdJzsKK+WHpz4nW2tpdGVdJzsKK+WHqT4nW3dpbnRyeSB3aW5kXSc7Civlh6o+J1tjYWxtXSc7Civlh60+J1tsZWFuIG9uXSc7Civlh7A+J1tmZW1hbGUgcGhvZW5peF0nOwor5YexPidbdHJpdW1waGFudF0nOwor5Ye1PidbcmVjZXB0YWNsZV0nOwor5Ye2PidbY3VscHJpdF0nOwor5Ye4PidbcHJvdHJ1ZGVdJzsKK+WHuT4nW2NvbmNhdmVdJzsKK+WHuj4nW2dvIG91dF0nOwor5Ye9PidbY29ycmVzcG9uZGVuY2VdJzsKK+WHvj4nW2NvcnJlc3BvbmRlbmNlXSc7CivliIA+J1trbmlmZV0nOwor5YiDPidbZWRnZWQgdG9vbF0nOwor5YiEPidbZWRnZWQgdG9vbF0nOwor5YiGPidbZGl2aWRlXSc7CivliIc+J1tjdXRdJzsKK+WIiD4nW2N1dCBvZmZdJzsKK+WIij4nW3B1YmxpY2F0aW9uXSc7CivliIs+J1twdWJsaWNhdGlvbl0nOwor5YiOPidbYmVoZWFkXSc7CivliJE+J1twdW5pc2htZW50XSc7CivliJQ+J1tzY29vcCBvdXRdJzsKK+WIlz4nW2xpbmVdJzsKK+WInT4nW2JlZ2lubmluZ10nOwor5YikPidbanVkZ2VdJzsKK+WIpT4nW3NlcGFyYXRlXSc7CivliKc+J1tkaXNhc3Rlcl0nOwor5YipPidbZ2FpbnNdJzsKK+WIqj4nW3RvIGN1dF0nOwor5YiuPidbc2hhdmVdJzsKK+WIsD4nW2dvIHRvXSc7CivliLM+J1tjdXQgb3V0XSc7CivliLY+J1tzeXN0ZW1dJzsKK+WItz4nW2JydXNoXSc7CivliLg+J1tjZXJ0aWZpY2F0ZV0nOwor5Yi5PidbdGVtcGxlXSc7CivliLo+J1tzdGFiXSc7CivliLs+J1tjYXJ2ZV0nOwor5YmDPidbc2hhdmVdJzsKK+WJhD4nW2N1dCB0aHJvYXRdJzsKK+WJhz4nW3J1bGVdJzsKK+WJij4nW3NjcmFwZSBvZmZdJzsKK+WJiz4nW3N1YmR1ZV0nOwor5YmMPidbc2xhc2hdJzsKK+WJjT4nW2luIGZyb250XSc7CivliY8+J1tlc3RhYmxpc2hdJzsKK+WJlD4nW3BpY2sgb3V0XSc7CivliZY+J1tzcGxpdCBpbiB0d29dJzsKK+WJmz4nW2hhcmRdJzsKK+WJnj4nW2NhcnZpbmcgb3IgZW5ncmF2aW5nIGtuaWZlXSc7CivliaM+J1tzd29yZF0nOwor5YmkPidbbWVkaWNpbmFsIHByZXBhcmF0aW9uXSc7CivliaU+J1twZWVsXSc7Civliak+J1tsZWZ0b3ZlcnNdJzsKK+WJqj4nW3NjaXNzb3JzXSc7Civlia8+J1thc3Npc3RdJzsKK+WJsD4nW2xlZnRvdmVyc10nOwor5YmxPidbc3dvcmRdJzsKK+WJsj4nW2N1dF0nOwor5YmzPidbYnJpZWYgbm90ZV0nOwor5Ym0Pidbc2hhcnBlbl0nOwor5Ym1PidbZXN0YWJsaXNoXSc7Civlib0+J1tyb2JdJzsKK+WJvz4nW2Rlc3Ryb3ldJzsKK+WKgz4nW2RpdmlkZV0nOwor5YqHPidbdGhlYXRyaWNhbCBwbGF5c10nOwor5YqIPidbY3V0IGFwYXJ0XSc7Civliok+J1tzdXJuYW1lXSc7Civlio0+J1tzd29yZF0nOwor5YqRPidbbWVkaWNpbmFsIHByZXBhcmF0aW9uXSc7CivlipI+J1tzd29yZF0nOwor5YqUPidbc3dvcmRdJzsKK+WKmz4nW3Bvd2VyXSc7Civlip8+J1thY2hpZXZlbWVudF0nOwor5YqgPidbYWRkIHRvXSc7CivliqM+J1tiYWRdJzsKK+WKqT4nW2hlbHBdJzsKK+WKqj4nW2V4ZXJ0XSc7Civliqs+J1t0YWtlIGJ5IGZvcmNlXSc7Civliqw+J1tiZSBkaWxpZ2VudF0nOwor5YqtPidbZW5jb3VyYWdlXSc7CivlirE+J1tzdHJpdmVdJzsKK+WKtD4nW2xhYm9yXSc7CivlirU+J1tjZXJ0aWZpY2F0ZV0nOwor5Yq5PidbZWZmaWNhY2lvdXNdJzsKK+WKvD4nW2JlIGRpc2NyZWV0XSc7Civlir4+J1tleGFtaW5lIGludG9dJzsKK+WLgT4nW3N0cm9uZ10nOwor5YuDPidbc3VkZGVubHldJzsKK+WLhT4nW2ltcGVyaWFsIGRlZ3JlZV0nOwor5YuHPidbYnJhdmVdJzsKK+WLiT4nW2VuZGVhdm9yXSc7Civli40+J1tzdHJvbmddJzsKK+WLkj4nW3N0cmFuZ2xlXSc7Civli5U+J1ttb3ZlXSc7Civli5c+J1tlbmpvaW5dJzsKK+WLmD4nW2ludmVzdGlnYXRlXSc7Civli5k+J1thZmZhaXJzXSc7Civli50+J1t2aWN0b3J5XSc7Civli54+J1tsYWJvcl0nOwor5YufPidbbGV2eV0nOwor5YugPidbam9pbiBmb3JjZXNdJzsKK+WLoj4nW3Bvd2VyXSc7Civli6M+J1thY2hpZXZlbWVudHNdJzsKK+WLpD4nW2luZHVzdHJpb3VzXSc7Civli6Y+J1tkZXN0cm95XSc7Civli6c+J1tyZWNvbW1lbmRdJzsKK+WLsj4nW21lcml0b3Jpb3VzIGRlZWRdJzsKK+WLsz4nW21lcml0b3Jpb3VzIGRlZWRdJzsKK+WLtT4nW3N0cml2ZV0nOwor5Yu4PidbcmVjb21tZW5kXSc7Civli7k+J1t3cmFwXSc7Civli7o+J1tzcG9vbl0nOwor5Yu+PidbaG9va10nOwor5Yu/PidbbXVzdCBub3RdJzsKK+WMgT4nW0phcGFuZXNlIHVuaXQgb2Ygd2VpZ2h0ICgxLzEwMDAgb2YgYSBrYW4pXSc7CivljII+J1tmcmFncmFuY2VdJzsKK+WMhT4nW3dyYXBdJzsKK+WMhj4nW2hhc3RpbHldJzsKK+WMiD4nW2JyZWFzdF0nOwor5YyNPidbY3Jhd2xdJzsKK+WMjz4nW2dvdXJkXSc7CivljJA+J1tmYWxsIHByb3N0cmF0ZV0nOwor5YyVPidbc3Bvb25dJzsKK+WMlj4nW2NoYW5nZV0nOwor5YyXPidbbm9ydGhdJzsKK+WMmT4nW3Nwb29uXSc7CivljJo+J1tib3hdJzsKK+WMnT4nW2Z1bGwgY2lyY2xlXSc7CivljKA+J1tjcmFmdHNtYW5dJzsKK+WMoT4nW2NvcnJlY3RdJzsKK+WMoz4nW3NtYWxsIGJveF0nOwor5YyqPidbYmFuZGl0c10nOwor5YyvPidbY29uY291cnNlXSc7CivljLE+J1t0byBsYWNrXSc7CivljLM+J1tsYWRpZXMgdG9pbGV0IGNhc2Ugd2l0aCBtaXJyb3JdJzsKK+WMuD4nW2JveF0nOwor5Yy5PidbYm9sdCBvZiBjbG90aF0nOwor5Yy6PidbYXJlYV0nOwor5Yy7PidbY3VyZV0nOwor5Yy/PidbaGlkZV0nOwor5Y2APidbYXJlYV0nOwor5Y2BPidbdGVuXSc7CivljYM+J1t0aG91c2FuZF0nOwor5Y2FPidbdGhpcnR5XSc7CivljYY+J1tzb2xkaWVyXSc7CivljYc+J1thcmlzZV0nOwor5Y2IPidbbm9vbl0nOwor5Y2JPidbZ2VuZXJhbCB0ZXJtIGZvciBwbGFudHNdJzsKK+WNij4nW2hhbGZdJzsKK+WNjT4nW3N3YXN0aWthIC0gZm91cnRoIG9mIGF1c3BpY2lvdXNdJzsKK+WNkT4nW2h1bWJsZV0nOwor5Y2SPidbc29sZGllcl0nOwor5Y2TPidbcHJvZm91bmRdJzsKK+WNlD4nW2JlIHVuaXRlZF0nOwor5Y2XPidbc291dGhdJzsKKyMi5Y2XPidbc291dGhdJyIsCivljZo+J1tnYW1ibGVdJzsKK+WNnD4nW2ZvcnR1bmUgdGVsbGluZ10nOwor5Y2ePidbYmUgaW1wYXRpZW50XSc7CivljaA+J1tkaXZpbmVdJzsKK+WNpj4nW2ZvcnR1bmUgdGVsbGluZ10nOwor5Y2pPidbc2VhbF0nOwor5Y2uPidbbWVhc3VyaW5nIGN1cF0nOwor5Y2vPidbNHRoIG9mIEVhcnRoIEJyYW5jaGVzXSc7CivljbA+J1twcmludF0nOwor5Y2xPidbZGFuZ2Vyb3VzXSc7CivljbM+J1twcm9tcHRseV0nOwor5Y20Pidbc3RpbGxdJzsKK+WNtT4nW2VnZ10nOwor5Y23Pidbc2Nyb2xsXSc7Civljbg+J1tsYXkgZG93bl0nOwor5Y27Pidbc3RpbGxdJzsKK+WNvz4nW25vYmxlXSc7CivljoI+J1tmYWN0b3J5XSc7CivljoQ+J1thZHZlcnNpdHldJzsKK+WOlj4nW2J1bGt5XSc7Civljpg+J1t0aG91c2FuZHRoIHBhcnQgb2YgdGFlbF0nOwor5Y6aPidbdGhpY2tdJzsKK+WOnz4nW3NvdXJjZV0nOwor5Y6gPidbbWluZ2xlIHdpdGhdJzsKK+WOpT4nW3BlcnNvbmFsIHByb25vdW4gLSBoZV0nOwor5Y6mPidbYmlnIGJ1aWxkaW5nXSc7Civljqg+J1traXRjaGVuXSc7Civljqk+J1tzdGFibGVdJzsKK+WOrT4nW2Rpc2xpa2VdJzsKK+WOrj4nW3NlcnZhbnRdJzsKK+WOsD4nW2ZhY3RvcnldJzsKK+WOsz4nW3N0cmljdF0nOwor5Y62PidbcHJpdmF0ZV0nOwor5Y67PidbZ28gYXdheV0nOwor5Y+CPidbdGFrZSBwYXJ0IGluXSc7Civlj4M+J1t0YWtlIHBhcnQgaW5dJzsKK+WPiD4nW2FuZF0nOwor5Y+JPidbY3JvdGNoXSc7Civlj4o+J1tleHRlbmRdJzsKK+WPiz4nW2ZyaWVuZF0nOwor5Y+MPidbc2V0IG9mIHR3b10nOwor5Y+NPidbcmV2ZXJzZV0nOwor5Y+OPidbZ2F0aGVyIHRvZ2V0aGVyXSc7Civlj5Q+J1tmYXRoZXInJ3MgeW91bmdlciBicm90aGVyXSc7Civlj5Y+J1t0YWtlXSc7Civlj5c+J1tyZWNlaXZlXSc7Civlj5k+J1tleHByZXNzXSc7Civlj5s+J1tyZWJlbF0nOwor5Y+fPidbb2xkIG1hbl0nOwor5Y+hPidbYXN0dXRlXSc7Civlj6I+J1tidXNoXSc7Civlj6M+J1ttb3V0aF0nOwor5Y+kPidbb2xkXSc7Civlj6U+J1tzZW50ZW5jZV0nOwor5Y+oPidbdGFsa2F0aXZlXSc7Civlj6k+J1trbm9ja10nOwor5Y+qPidbb25seV0nOwor5Y+rPidbY3J5XSc7Civlj6w+J1tpbXBlcmlhbCBkZWNyZWVdJzsKK+WPrT4nW3RydW1wZXRdJzsKK+WPrj4nW2V4aG9ydCBvciBlbmpvaW4gcmVwZWF0ZWRseV0nOwor5Y+vPidbbWF5XSc7Civlj7A+J1twbGF0Zm9ybV0nOwor5Y+xPidbc2NvbGRdJzsKK+WPsj4nW2hpc3RvcnldJzsKK+WPsz4nW3JpZ2h0XSc7Civlj7Y+J1t0byBoYXJtb25pemVdJzsKK+WPtz4nW21hcmtdJzsKK+WPuD4nW3Rha2UgY2hhcmdlIG9mXSc7CisjIuWPuT4nW3NpZ2hdJyIsCivlkIE+J1tpbnRlcmplY3Rpb24gXCJBbGFzIVwiXSc7CivlkIM+J1tlYXRdJzsKK+WQhD4nW2VhY2hdJzsKK+WQiD4nW2NvbWJpbmVdJzsKK+WQiT4nW2x1Y2t5XSc7CivlkIo+J1tjb25kb2xlXSc7CivlkIs+J1tpbmNoXSc7CivlkIw+J1tzYW1lXSc7CivlkI0+J1tuYW1lXSc7CivlkI4+J1txdWVlbl0nOwor5ZCPPidbZ292ZXJubWVudCBvZmZpY2lhbF0nOwor5ZCQPidbdm9taXRdJzsKK+WQkT4nW3Rvd2FyZF0nOwor5ZCbPidbc292ZXJlaWduXSc7CivlkJ0+J1tzdGluZ3ldJzsKK+WQnz4nW3NpbmddJzsKK+WQoD4nW2JhcmtdJzsKK+WQpj4nW25vdF0nOwor5ZCpPidbb3JkZXJdJzsKK+WQqz4nW2hvbGQgaW4gbW91dGhdJzsKK+WQrD4nW2hlYXJdJzsKK+WQrT4nW3Rocm9hdF0nOwor5ZCuPidbc3VjayB3aXRoIG1vdXRoXSc7CivlkLY+J1tyYWlzZSB2b2ljZV0nOwor5ZC4PidbaW5oYWxlXSc7CivlkLk+J1tibG93XSc7CivlkLs+J1traXNzXSc7CivlkLw+J1tyb2FyXSc7CivlkL0+J1tcIk9NXCJdJzsKK+WQvj4nW2ldJzsKK+WRgD4nW3BhcnRpY2xlIHVzZWQgZXhwcmVzcyBzdXJwcmlzZV0nOwor5ZGCPidbc3VybmFtZV0nOwor5ZGGPidbZHVsbF0nOwor5ZGIPidbc3VibWl0XSc7CivlkYk+J1tvbmUgb2Ygd2FycmluZyBzdGF0ZXNdJzsKK+WRij4nW3RlbGxdJzsKK+WRjj4nW2Zvb3RdJzsKK+WRkT4nW3N3YWxsb3ddJzsKKyMi5ZGcPidbc291bmQgb2YgY3J5aW5nXSciLAor5ZGoPidbemhvdSBkeW5hc3R5XSc7Civlkao+J1tjdXJzZV0nOworIyLlkbA+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+WRsT4nW3dhaWxdJzsKK+WRsz4nW3Rhc3RlXSc7CivlkbU+J1tzY29sZF0nOwor5ZG2PidbdGFsa2F0aXZlXSc7Civlkbc+J1tzdWNrXSc7Civlkbs+J1tncm9hbl0nOwor5ZG8PidbYnJlYXRoZSBzaWdoXSc7Civlkb0+J1tsaWZlXSc7CivlkoA+J1tzdWNrXSc7CivlkoQ+J1tub2lzZSBvZiByYWdlXSc7CivlkoY+J1tyb2FyXSc7Civlkos+J1t3aHk/IGhvdz8gd2hhdD9dJzsKK+WSjD4nW2hhcm1vbnldJzsKK+WSjj4nW2ZhdWx0XSc7Civlko8+J1tzaW5nIHNvbmcgb3IgcG9lbV0nOwor5ZKQPidbaW5zdHJ1Y3RdJzsKK+WSkj4nW2N1cnNlXSc7CivlkqI+J1tzb3VuZF0nOwor5ZKkPidbc2NvbGRdJzsKK+WSpT4nW3NvdW5kIG9mIGNhdF0nOwor5ZKoPidbaW5xdWlyZV0nOwor5ZKrPidbZm9vdCBtZWFzdXJlIG9mIFpob3UgZHluYXN0eV0nOwor5ZKsPidbYml0ZV0nOwor5ZKvPidbZmluYWwgcGFydGljbGVdJzsKK+WSsj4nW3NtaWxlXSc7CivlkrM+J1tjb3VnaF0nOwor5ZK4PidbdG9nZXRoZXJdJzsKK+WSvD4nW2NoYXRdJzsKK+WSvT4nW3Rocm9hdF0nOwor5ZK+PidbYSBub2lzZV0nOwor5ZOAPidbc2FkXSc7Civlk4E+J1thcnRpY2xlXSc7Civlk4I+J1tzbWlsZV0nOwor5ZOEPidbY29heF0nOwor5ZOHPidbdm9taXRdJzsKK+WTiD4nW3NvdW5kIG9mIGxhdWdodGVyXSc7Civlk4k+J1tmaW5hbCBleGNsYW1hdG9yeSBwYXJ0aWNsZV0nOworIyLlk5c+J1tydXNoaW5nIHNvdW5kXSciLAor5ZOhPidbbWVtYmVyXSc7Civlk6I+J1tzeWxsYWJsZV0nOwor5ZOlPidbZWxkZXIgYnJvdGhlcl0nOwor5ZOmPidbb2g/IHJlYWxseT8gaXMgdGhhdCBzbz9dJzsKK+WTqD4nW3doaXN0bGVdJzsKK+WTqT4nW21pbGVdJzsKK+WTrT4nW3dlZXBdJzsKK+WTrj4nW2NvdWdoXSc7Civlk7I+J1t3aXNlXSc7Civlk7o+J1tjaGV3IGZvb2RdJzsKK+WTvT4nW2Nob2tlXSc7CivllIQ+J1tmaW5hbCBwYXJ0aWNsZSBvZiBhc3NlcnRpb24gcGF0aGFrYV0nOwor5ZSGPidbbWFrZSBtaXNjaGllZl0nOwor5ZSHPidbbGlwc10nOwor5ZSPPidbd2VlcCBvciBzb2JdJzsKK+WUkD4nW3RhbmcgZHluYXN0eV0nOwor5ZSUPidbaG9sZCBpbiBtb3V0aF0nOwor5ZSWPidbZHVtYl0nOwor5ZSuPidbc2VsbF0nOwor5ZSvPidbb25seV0nOwor5ZSxPidbc2luZ10nOwor5ZSzPidbY3J5IG9mIGJpcmRdJzsKK+WUuD4nW3JlY2l0ZV0nOwor5ZS5PidbdG8gc21pbGUgYXRdJzsKK+WUvj4nW3NwaXRdJzsKK+WVgD4nW2duYXddJzsKK+WVhD4nW3RvIHBlY2tdJzsKKyMi5ZWEPidbdG8gcGVja10nIiwKK+WVhj4nW2NvbW1lcmNlXSc7CivllYw+J1thbmltYWwgZGlzZWFzZV0nOwor5ZWPPidbYXNrIChhYm91dCldJzsKK+WVkz4nW29wZW5dJzsKK+WVlj4nW2VhdF0nOwor5ZWXPidbZWF0XSc7CivllZw+J1tzaXBdJzsKKyMi5ZWcPidbc2lwXSciLAor5ZWjPidbaG9sZCBpbiBtb3V0aF0nOwor5ZW7Pidbb25seV0nOwor5ZW8Pidbd2VlcF0nOwor5ZW+Pidbd2FpbGluZyBvZiBjaGlsZF0nOwor5ZaAPidbdm9taXRdJzsKK+WWgz4nW2tlZXAgdGFsa2luZ10nOwor5ZaEPidbZ29vZF0nOwor5ZaHPidbaG9ybl0nOwor5ZaJPidbdGhyb2F0XSc7Civlloo+J1tzaG91dF0nOwor5ZaLPidbbmFnXSc7Civllpg+J1twYW50XSc7Civllpk+J1tiZWFrXSc7Civllpo+J1tjYWxsXSc7Civllpw+J1tsaWtlXSc7Civllp0+J1tkcmlua10nOwor5ZaePidbY2hpcnBpbmcgb2YgaW5zZWN0c10nOwor5ZafPidbaGVhdmUgc2lnaF0nOwor5ZanPidbbGl2ZWx5XSc7Civllqg+J1t3YWlsXSc7Civllqk+J1ttZXRhcGhvcl0nOwor5ZaqPidbbW91cm5pbmddJzsKK+WWqz4nW2VhdF0nOwor5ZasPidbdGFsbF0nOwor5ZauPidbc2luZ2xlXSc7CivllrA+J1t0byBlYXRdJzsKK+WWtj4nW2VuY2FtcG1lbnRdJzsKK+WXhD4nW2hvYXJzZSBvZiB2b2ljZV0nOwor5ZeFPidbc21lbGxdJzsKK+WXhz4nW21pc2VybHldJzsKK+WXlD4nW2JlIGFuZ3J5IGF0XSc7Civll5o+J1tzb3VuZCBvZiBjcnlpbmddJzsKK+WXnD4nW2JlIGZvbmQgb2ZdJzsKK+WXnz4nW3NpZ2hdJzsKK+WXoz4nW3RvIGNvbm5lY3RdJzsKK+WXpD4nW2xhdWdoIGF0XSc7Civll7c+J1tsb3VkIGNsYW1vcl0nOwor5Ze5PidbY2hhdHRlcl0nOwor5Ze9PidbY291Z2hdJzsKK+WXvj4nW3RvIHNldCBhIGRvZyBvbl0nOwor5ZiGPidbc2lnaF0nOwor5ZiJPidbZXhjZWxsZW50XSc7CivlmJQ+J1t2b21pdF0nOwor5ZiWPidbaW50ZXJqZWN0aW9uIG9mIGFwcHJvdmFsIG9yIGFkbWldJzsKK+WYlz4nW3Rhc3RlXSc7CivlmJg+J1tleGhhbGVdJzsKK+WYmz4nW2ZpbmFsIGV4Y2xhbWF0b3J5IHBhcnRpY2xlXSc7CivlmKk+J1tydXNoaW5nIHNvdW5kXSc7CivlmK8+J1tyb2FyXSc7CivlmLE+J1tvcmRlcl0nOwor5ZiyPidbcmlkaWN1bGVdJzsKK+WYtD4nW21vdXRoXSc7CivlmLY+J1tuZWlnaGluZyBvZiBhIGhvcnNlXSc7CivlmLg+J1t1bmNsZWFyXSc7CivlmYI+J1ttZWV0XSc7CivlmYw+J1tzY29sZF0nOwor5ZmOPidbY2hva2VdJzsKK+WZkD4nW3JlY2VwdGFjbGVdJzsKK+WZmz4nW2JpdGVdJzsKK+WZpD4nW2Nsb3NlXSc7Civlmag+J1tyZWNlcHRhY2xlXSc7Civlmao+J1tiZSBub2lzeV0nOwor5ZmrPidbYmVsY2hdJzsKK+WZrD4nW2JpdGVdJzsKK+WZtD4nW3NwdXJ0XSc7Civlmbg+J1ttZXRyaWMgdG9uXSc7Civlmbo+J1tzdG9yeV0nOwor5ZqAPidbZW5qb2luXSc7CivlmoY+J1tnaXZlIGZvcnRoIHNvdW5kXSc7Civlmoc+J1tzY2FyZV0nOwor5ZqKPidbdG8gcGFudF0nOwor5ZqPPidbc25lZXplXSc7CivlmpQ+J1tzbmVlemVdJzsKKyMi5ZqcPidbYmUgc2lsZW50XSciLAor5ZqiPidbYmFnXSc7CivlmqU+J1tzd2FsbG93XSc7Civlmq4+J1tndWlkZV0nOwor5Zq0Pidbc3RyaWN0XSc7CivlmrY+J1tzZWVrIGZyaWVuZHNdJzsKK+WavD4nW3ByYXR0bGVdJzsKK+WbgD4nW3NpbmddJzsKK+WbgT4nW21vdmUgbGlwIHdoZW4gc3BlYWtpbmddJzsKK+Wbgj4nW2JlIG5vaXN5XSc7CisjIuWbgj4nW2JlIG5vaXN5XSciLAor5ZuIPidbdGFsayBpbiBvbmUnJ3Mgc2xlZXBdJzsKKyMi5ZuNPidbZG91YmxlIGhhcHBpbmVzc10nIiwKK+WbkT4nW29yZGVyXSc7Civlm5M+J1tnbmF3XSc7Civlm5c+J1tlcmVjdF0nOwor5ZuYPidbcmV0dXJuXSc7Civlm5o+J1twcmlzb25lcl0nOwor5ZubPidbZm91cl0nOwor5ZuePidbcmV0dXJuXSc7Civlm6A+J1tjYXVzZV0nOwor5ZujPidbc3BoZXJlXSc7Civlm64+J1tpbnZlaWdsZV0nOwor5ZuwPidbc3Vycm91bmRdJzsKK+Wbsj4nW3N1cnJvdW5kXSc7Civlm7M+J1tkaWFncmFtXSc7Civlm7k+J1twcmlzb25dJzsKK+Wbuj4nW2JlY29tZSBzb2xpZF0nOwor5Zu9PidbbmF0aW9uXSc7Civlm78+J1twZW4gdXBdJzsKK+WcgD4nW25hdGlvbl0nOwor5ZyDPidbZ2FyZGVuXSc7CivlnIQ+J1twcmlzb25dJzsKK+WciD4nW3RvIGNpcmNsZV0nOwor5ZyJPidbc3RhYmxlXSc7CivlnIs+J1tuYXRpb25dJzsKK+WcjT4nW3N1cnJvdW5kXSc7CivlnI8+J1t0byBjaXJjbGVdJzsKK+Wckj4nW2dhcmRlbl0nOwor5ZyTPidbY2lyY2xlXSc7CivlnJY+J1tkaWFncmFtXSc7CivlnJg+J1tzcGhlcmVdJzsKK+WcnD4nW2NpcmNsZV0nOwor5ZyfPidbc29pbF0nOwor5ZymPidbKGtva3VqaSkgd2F0ZXIgZ2F0ZV0nOworIyLlnKY+J1soa29rdWppKSB3YXRlciBnYXRlXSciLAor5ZyoPidbYmUgYXRdJzsKK+WcrT4nW2phZGUgcG9pbnRlZCBhdCB0b3BdJzsKK+WcsD4nW2VhcnRoXSc7CisjIuWcsz4nW2Z1cnJvdyBpbiBmaWVsZF0nIiwKKyMi5ZyzPidbZnVycm93IGluIGZpZWxkXSciLAor5Zy7PidbYm9yZGVyXSc7CivlnYA+J1tzaXRlXSc7CivlnYI+J1toaWxsc2lkZV0nOwor5Z2HPidbZXF1YWxdJzsKK+Wdij4nW25laWdoYm9yaG9vZF0nOwor5Z2OPidbcGl0XSc7CivlnY8+J1tyb3R0ZW5dJzsKK+WdkD4nW3NpdF0nOwor5Z2RPidbcGl0XSc7CivlnaE+J1tzbG9wZV0nOwor5Z2kPidbZWFydGhdJzsKK+Wdpj4nW2ZsYXRdJzsKK+WdqT4nW2VhcnRoZW53YXJlXSc7Civlnao+J1tsZXZlbCBncm91bmRdJzsKK+Wdvz4nW21vdW5kXSc7CivlnoI+J1tsZXQgZG93bl0nOworIyLlnoY+J1tibGFjayBjbG9kcyBvZiBlYXJ0aF0nIiwKKyMi5Z6JPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivlnos+J1twYXR0ZXJuXSc7CivlnpM+J1tib3JkZXJdJzsKK+WeoD4nW2JvdW5kYXJ5XSc7CivlnqI+J1tkaXJ0XSc7CivlnqM+J1tsb3cgd2FsbF0nOwor5Z6kPidbYW50LWhpbGxdJzsKKyMi5Z6pPidbaG9seV0nIiwKKyMi5Z6uPidbYmUgZGVmZWF0ZWRdJyIsCisjIuWesj4nW2hpZ2ggYW5kIGRyeSBwbGFjZV0nIiwKK+WfgD4nW2xldCBkb3duXSc7Civln4M+J1tmaW5lIGR1c3RdJzsKK+Wfhj4nW3N0b255XSc7Civln4s+J1tidXJ5XSc7Civln44+J1tjYXN0bGVdJzsKK+Wfkj4nW2VuY2xvc3VyZV0nOwor5Z+TPidbZW5jbG9zdXJlXSc7Civln5Q+J1twbGFpbl0nOworIyLln5Q+J1twbGFpbl0nIiwKK+WfnD4nW29wZW4gY291bnRyeV0nOwor5Z+fPidbZGlzdHJpY3RdJzsKK+WfoD4nW3BvcnQgY2l0eV0nOworIyLln6M+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+WftD4nW3NvaWwgd2l0aCBsYXJnZSBjbGF5IGNvbnRlbnRdJzsKK+Wftz4nW2hvbGQgaW4gaGFuZF0nOwor5Z+5PidbYmFuayB1cCB3aXRoIGRpcnRdJzsKK+Wfuj4nW2ZvdW5kYXRpb25dJzsKK+WfvD4nW2hlYWRsYW5kXSc7CivloIA+J1tjYXZlXSc7CivloII+J1toYWxsXSc7CivloIU+J1toYXJkXSc7CivloIY+J1toZWFwXSc7CivloIo+J1t3aGl0ZSBlYXJ0aF0nOwor5aCLPidbYnVyeV0nOwor5aCVPidbZmFsbF0nOwor5aCZPidbYnVyeV0nOwor5aCdPidbY3J1Y2libGVdJzsKK+WgoT4nW2ZvcnRdJzsKK+WgpD4nW2Rpa2VdJzsKK+Wgqj4nW2FkZXF1YXRlbHkgY2FwYWJsZSBvZl0nOwor5aCvPidbYSBsZWdlbmRhcnkgYW5jaWVudCBlbXBlcm9yLXNhZ2VdJzsKK+WgsD4nW2RhbV0nOwor5aCxPidbcmVwb3J0XSc7CivloLQ+J1tvcGVuIHNwYWNlXSc7CivloLU+J1t3YWxsXSc7CivloLo+J1twZXJzb24nJ3MgbmFtZV0nOwor5aC9PidbbW91bmRdJzsKK+WhgD4nW3dhbGxdJzsKK+WhgT4nW3JhbXBhcnRdJzsKK+Whij4nW3BpZWNlXSc7CivloYs+J1tncmF2ZV0nOwor5aGRPidbbW9kZWwgaW4gY2xheV0nOwor5aGSPidbcm9vc3RdJzsKK+WhlD4nW3Rvd2VyXSc7CivloZc+J1tzbWVhcl0nOwor5aGYPidbcG9uZF0nOwor5aGZPidbdHJ1bHldJzsKK+Whmj4nW2NlbWV0ZXJ5XSc7CivloZ4+J1tzdG9wIHVwXSc7CivloaI+J1tlbnRyZW5jaG1lbnRdJzsKK+WhqT4nW3NhbHRdJzsKK+Whqz4nW2ZpbGwgaW5dJzsKKyMi5aGtPidbW25vdCBmb3VuZCBpbiBhbnkgZGljdGlvbmFyeV1dJyIsCivlobI+J1tvcGVuIHNwYWNlXSc7CivlobU+J1tkdXN0XSc7Civlobk+J1ttb2F0XSc7Civlob4+J1t2aWxsYWdlIHNjaG9vbF0nOwor5aKDPidbYm91bmRlcnldJzsKK+WihT4nW3ZpbGxhXSc7CivlopM+J1tncmF2ZV0nOwor5aKXPidbaW5jcmVhc2VdJzsKK+WinD4nW2ZhbGwgZG93bl0nOwor5aKfPidbaGlnaCBtb3VuZF0nOwor5aKoPidbaW5rXSc7Civloqs+J1tjdXBdJzsKK+Wirj4nW2ZhbGxdJzsKK+Wisz4nW2dyYXZlXSc7CisjIuWisz4nW2dyYXZlXSciLAorIyLlorM+J1tncmF2ZV0nIiwKK+Wiuj4nWzQgd2FsbHNdJzsKK+Wiuz4nW3dhbGxdJzsKK+Wivj4nW2N1bHRpdmF0ZV0nOwor5aOBPidbcGFydGl0aW9uIHdhbGxdJzsKK+WjhT4nW3RvIG9ic3RydWN0XSc7Civlo4c+J1thbHRhcl0nOwor5aOKPidbYmFkXSc7Civlo4w+J1tzb2lsXSc7Civlo5E+J1tiZWQgb2YgdG9ycmVudF0nOwor5aOTPidbcHJlc3NdJzsKK+WjlT4nW3RyZW5jaF0nOworIyLlo5Y+J1tvcGVuIHNwYWNlIGFsb25nIHdhdGVyXSciLAor5aOYPidbcmFtcGFydF0nOwor5aOZPidbdG9tYl0nOwor5aOcPidbZWFydGhlbiBqYXIgb3IganVnXSc7Civlo54+J1tiYWRdJzsKK+Wjnz4nW2dyYXZlXSc7Civlo6Q+J1tzb2lsXSc7CisjIuWjpT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5aOrPidbc2Nob2xhcl0nOwor5aOsPidbbmludGggb2YgdGVuIGNlbGVzdGlhbCBzdGVtc10nOwor5aOuPidbYmlnXSc7Civlo68+J1tiaWddJzsKK+WjsD4nW3NvdW5kXSc7Civlo7E+J1tudW1iZXIgb25lXSc7Civlo7I+J1tzZWxsXSc7Civlo7c+J1tqYXJdJzsKK+WjuT4nW251bWJlciBvbmVdJzsKK+Wjuj4nW2phcl0nOwor5aO7Pidbc29uLWluLWxhd10nOwor5aO8PidbcGFsYWNlIGNvcnJpZG9yIG9yIHBhc3NhZ2V3YXldJzsKK+WjvT4nW29sZCBhZ2VdJzsKK+Wkgj4nW2dvXSc7CivlpIk+J1tjaGFuZ2VdJzsKK+Wkij4nW1JhZGljYWwgTm8uIDM1XSc7CivlpI8+J1tzdW1tZXJdJzsKK+WkkD4nW2xvbmddJzsKK+WklT4nW2V2ZW5pbmddJzsKK+Wklj4nW291dF0nOwor5aSYPidbNHRoIG9mIEVhcnRoIEJyYW5jaGVzXSc7CivlpJk+J1tlYXJseSBpbiBtb3JuaW5nXSc7CivlpJo+J1ttdWNoXSc7CivlpJs+J1ttdWNoXSc7CivlpJw+J1tuaWdodF0nOwor5aSiPidbZHJlYW1dJzsKK+WkpT4nW2NvbXBhbmlvbl0nOwor5aSnPidbYmlnXSc7CivlpKk+J1tza3ldJzsKK+Wkqj4nW3ZlcnldJzsKK+Wkqz4nW21hbl0nOwor5aSsPidbcGFydGVkXSc7CivlpK0+J1t5b3VuZ10nOwor5aSuPidbY2VudGVyXSc7CivlpLE+J1tsb3NlXSc7CivlpLI+J1thZHZhbmNlIHF1aWNrbHldJzsKK+Wktz4nW2FuY2llbnQgYmFyYmFyaWFuIHRyaWJlc10nOwor5aS4PidbZXh0cmF2YWdhbnRdJzsKK+Wkvj4nW2JlIHdlZGdlZCBvciBpbnNlcnRlZCBiZXR3ZWVuXSc7CivlpYQ+J1tlcmUgbG9uZ10nOwor5aWHPidbc3RyYW5nZV0nOwor5aWIPidbYnV0XSc7CivlpYk+J1tvZmZlcl0nOwor5aWOPidbc3RyaWRlIG9mIG1hbl0nOwor5aWPPidbbWVtb3JpYWxpemUgZW1wZXJvcl0nOwor5aWQPidbYmUgbnVtZXJvdXNdJzsKK+WlkT4nW2RlZWRdJzsKK+WllD4nW3J1biBmYXN0XSc7CivlpZU+J1tpbiBzZXF1ZW5jZV0nOwor5aWXPidbY2FzZV0nOwor5aWYPidbbGFyZ2VdJzsKK+Wlmj4nW3doZXJlPyB3aGF0PyBob3c/IHdoeT9dJzsKK+WloD4nW3BheSByZXNwZWN0XSc7CivlpaI+J1tleHRyYXZhZ2FudF0nOwor5aWlPidbbXlzdGVyaW91c10nOwor5aWnPidbbXlzdGVyaW91c10nOwor5aWoPidbcHJpemVdJzsKK+WlqT4nW2xhZHknJ3MgdmFuaXR5IGNhc2VdJzsKK+Wlqj4nW3Rha2UgYnkgZm9yY2VdJzsKK+WlrD4nW3ByaXplXSc7Civlpa4+J1tzdHJpdmVdJzsKK+Wlsz4nW3dvbWFuXSc7CivlpbQ+J1tzbGF2ZV0nOwor5aW4PidbY3JhZnR5XSc7Civlpb0+J1tnb29kXSc7CivlpoE+J1thY3QgYXMgZ28tYmV0d2Vlbl0nOwor5aaCPidbaWZdJzsKK+Wmgz4nW3dpZmVdJzsKK+WmhD4nW2Fic3VyZF0nOwor5aaKPidbY29uY2VpdmVdJzsKK+WmjT4nW2JlYXV0aWZ1bF0nOwor5aaTPidbcHJvc3RpdHV0ZV0nOwor5aaWPidbc3RyYW5nZV0nOwor5aaZPidbbXlzdGVyaW91c10nOworIyLlppk+J1tteXN0ZXJpb3VzXSciLAor5aadPidbYWRvcm4gb25lc2VsZl0nOwor5aajPidbb25lJydzIGRlY2Vhc2VkIG1vdGhlcl0nOwor5aalPidbc2F0aXNmYWN0b3J5XSc7Civlpqg+J1tpbnRlcmZlcmUgd2l0aF0nOwor5aasPidbamVhbG91c10nOwor5aayPidbY29uY3ViaW5lIG9mIGxhc3QgcnVsZXIgb2Ygc2hhbmddJzsKK+WmuT4nW3lvdW5nZXIgc2lzdGVyXSc7Civlprs+J1t3aWZlXSc7Civlpr4+J1tjb25jdWJpbmVdJzsKK+Wnhj4nW2NoaWxkJydzIGdvdmVybmVzc10nOwor5aeJPidbZWxkZXIgc2lzdGVyXSc7Civlp4s+J1tiZWdpbl0nOwor5aeQPidbZWxkZXIgc2lzdGVyXSc7Civlp5E+J1tmYXRoZXInJ3Mgc2lzdGVyXSc7Civlp5M+J1tvbmUnJ3MgZmFtaWx5IG5hbWVdJzsKK+WnlD4nW2FwcG9pbnRdJzsKK+WnmT4nW2NvbmNlaXZlXSc7Civlp5o+J1toYW5kc29tZV0nOwor5aecPidbc3VybmFtZV0nOwor5aelPidbbWF0ZXJuYWwgZ3JhbmRtb3RoZXJdJzsKK+Wnpj4nW2FkdWx0ZXJ5XSc7Civlp6g+J1ttb3RoZXIvd2lmZScncyBzaXN0ZXJdJzsKK+Wnqj4nW25pZWNlXSc7Civlp6s+J1tiZWF1dHldJzsKKyMi5aexPidbYmVhdXRpZnVsXSciLAor5ae7PidbcmVsYXRpdmVzIGJ5IG1hcnJpYWdlXSc7Civlp78+J1tvbmUnJ3MgbWFubmVyXSc7CivlqIE+J1twb21wXSc7CivlqIM+J1tiYWJ5XSc7CivlqIk+J1tiZWF1dGlmdWxdJzsKK+WokT4nW2RhbmNlXSc7CivlqJg+J1ttb3RoZXJdJzsKKyMi5aiaPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivlqJw+J1tlbGVnYW50XSc7CivlqJ8+J1tiZWF1dGlmdWxdJzsKK+WooD4nW3ByZWduYW50XSc7CivlqKU+J1tiZSBiZWF1dGlmdWxdJzsKK+WoqT4nW2dpdmUgYmlydGggY2hpbGRdJzsKK+Worz4nW3BsZWFzdXJlXSc7CivlqLU+J1tzdGFyXSc7CivlqLY+J1ttYXJyeV0nOwor5ai8PidbcHJvc3RpdHV0ZV0nOwor5amAPidbYmUgYmVhdXRpZnVsXSc7CivlqYE+J1tzdXJuYW1lXSc7CivlqYY+J1tvbGQgd29tYW5dJzsKK+WpiT4nW2FtaWFibGVdJzsKK+Wpmj4nW2dldCBtYXJyaWVkXSc7CivlqaI+J1tzZXJ2YW50IGdpcmxdJzsKK+Wppj4nW21hcnJpZWQgd29tZW5dJzsKK+Wpqj4nW2NvdmV0XSc7Civlqaw+J1tvYnNjZW5lXSc7Civlqb8+J1tzb24taW4tbGF3XSc7CivlqpI+J1tnby1iZXR3ZWVuXSc7Civlqpo+J1tjaGFybWluZ10nOwor5aqbPidbYmVhdXR5XSc7Civlqrw+J1tvbGQgd29tYW5dJzsKK+WqvT4nW21vdGhlcl0nOwor5aq+PidbbWFycnldJzsKK+WrgT4nW21hcnJ5XSc7Civlq4I+J1tzaXN0ZXItaW4tbGF3XSc7Civlq4k+J1tqZWFsb3VzeV0nOwor5auLPidbc2xlbmRlciBhbmQgZGVsaWNhdGVdJzsKK+WrjD4nW2hhdGVdJzsKK+WrkD4nW2Zyb2xpY10nOwor5auWPidbcGF0cm9uaXplIHByb3N0aXR1dGVzXSc7Civlq5c+J1tvbGQgd29tYW5dJzsKK+WroT4nW2xlZ2FsIHdpZmVdJzsKK+Wroz4nW2NoYXJtaW5nXSc7Civlq6Y+J1tuYW1lIG9mIGEgbW9vbiBnb2RkZXNzXSc7Civlq6k+J1tzb2Z0XSc7Civlq7o+J1tyZWZpbmVkXSc7Civlq7s+J1tlbGVnYW50XSc7CivlrIk+J1tlbmpveV0nOwor5ayLPidbYmVhdXRpZnVsXSc7CivlrIw+J1tzZWR1Y3RpdmUgYW5kIGxvdmVhYmxlXSc7CivlrJY+J1tmYXZvcml0ZV0nOwor5ayiPidbdHJvdWJsZWRdJzsKK+Wsqj4nW2NvdXJ0IGxhZHldJzsKK+WsrD4nW21pc3RyZXNzXSc7CivlrLA+J1tiYWJ5XSc7CivlrLI+J1tmcm9saWNdJzsKKyMi5ay0PidbdG8gd2luXSciLAor5ay+PidbbGF6eV0nOwor5a2APidbd2lkb3ddJzsKK+Wtgz4nW3Ryb3VibGVkXSc7CivlrYU+J1tzbGVuZGVyXSc7CivlrZA+J1tvZmZzcHJpbmddJzsKK+WtkT4nW3JlbWFpbmluZ10nOwor5a2UPidbb3BlbmluZ10nOwor5a2VPidbYmUgcHJlZ25hbnRdJzsKK+Wtlz4nW2xldHRlcl0nOwor5a2YPidbZXhpc3RdJzsKK+Wtmj4nW2Jyb29kIG92ZXIgZWdnc10nOwor5a2bPidbY29tZXRdJzsKK+WtnD4nW2JlIGFzIGRpbGlnZW50IGFzIHBvc3NpYmxlXSc7CivlrZ0+J1tmaWxpYWwgcGlldHldJzsKK+Wtnz4nW2ZpcnN0IGluIHNlcmllc10nOwor5a2jPidbcXVhcnRlciBvZiB5ZWFyXSc7CivlraQ+J1tvcnBoYW5dJzsKK+WtpT4nW29uZScncyBjaGlsZHJlbl0nOwor5a2mPidbbGVhcm5pbmddJzsKK+WtqT4nW2JhYnldJzsKK+Wtqz4nW2dyYW5kY2hpbGRdJzsKK+WtsD4nW3dobz8gd2hpY2g/IHdoYXQ/IHdoaWNoIG9uZT9dJzsKK+WtsT4nW3dlYWtdJzsKK+Wtsz4nW2JyZWVkIGluIGxhcmdlIG51bWJlcnNdJzsKK+WttT4nW3NpdCBvbiBlZ2dzXSc7Civlrbg+J1tsZWFybmluZ10nOwor5a26PidbY2hpbGRdJzsKK+WugD4nW3Jvb2ZdJzsKK+Wugz4nW2l0XSc7CivlroU+J1tyZXNpZGVuY2VdJzsKK+Wuhz4nW2hvdXNlXSc7Civlrog+J1tkZWZlbmRdJzsKK+WuiT4nW3BlYWNlZnVsXSc7Civlros+J1tTb25nIGR5bmFzdHldJzsKK+WujD4nW2NvbXBsZXRlXSc7Civlro0+J1tmbGVzaF0nOwor5a6PPidbd2lkZV0nOwor5a6VPidbc3RvbmUgcXVhcnJ5XSc7Civlrpc+J1tsaW5lYWdlXSc7Civlrpg+J1tvZmZpY2lhbF0nOwor5a6ZPidbdGltZSBhcyBjb25jZXB0XSc7Civlrpo+J1tkZWNpZGVdJzsKK+Wumz4nW3NlZW1dJzsKK+WunD4nW3N1aXRhYmxlXSc7Civlrp0+J1t0cmVhc3VyZV0nOwor5a6fPidbcmVhbF0nOwor5a6iPidbZ3Vlc3RdJzsKK+Wuoz4nW2RlY2xhcmVdJzsKK+WupD4nW3Jvb21dJzsKK+WupT4nW2ZvcmdpdmVdJzsKK+Wupj4nW29mZmljaWFsZG9tXSc7Civlrq4+J1twYWxhY2VdJzsKK+WusD4nW3RvIHNsYXVnaHRlcl0nOwor5a6zPidbaW5qdXJlXSc7CivlrrQ+J1tlbnRlcnRhaW5dJzsKK+WutT4nW25pZ2h0XSc7CivlrrY+J1tob3VzZV0nOwor5a64PidbaW1wZXJpYWxdJzsKK+WuuT4nW2xvb2tzXSc7Civlrr8+J1tzdG9wXSc7Civlr4I+J1tzdGlsbF0nOwor5a+DPidbZ3JpZXZhbmNlXSc7Civlr4Q+J1tzZW5kXSc7Civlr4U+J1tyZXNwZWN0XSc7Civlr4Y+J1tkZW5zZV0nOwor5a+HPidbYmFuZGl0c10nOworIyLlr4k+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+WvjD4nW2FidW5kYW50XSc7Civlr5A+J1tzbGVlcF0nOwor5a+SPidbY29sZF0nOwor5a+TPidbcmVzaWRlbmNlXSc7Civlr5Q+J1tyZWFsXSc7Civlr5s+J1ticm9hZF0nOwor5a+dPidbc2xlZXBdJzsKK+Wvnj4nW3NpbGVudF0nOwor5a+fPidbZXhhbWluZV0nOwor5a+hPidbd2lkb3dlZF0nOwor5a+iPidbc2xlZXBdJzsKK+WvpD4nW2Zld10nOwor5a+lPidbZmV3XSc7Civlr6Y+J1tyZWFsXSc7Civlr6c+J1tyZXBvc2VdJzsKK+WvqD4nW3N0b2NrYWRlXSc7Civlr6k+J1tleGFtaW5lXSc7Civlr6s+J1t3cml0ZV0nOwor5a+uPidbc2hhbnR5XSc7Civlr7A+J1tncmVhdCBkb21haW5dJzsKK+Wvsz4nW3RyZWFzdXJlXSc7Civlr7U+J1tmYXZvcml0ZV0nOwor5a+2PidbdHJlYXN1cmVdJzsKK+WvuD4nW2luY2hdJzsKK+Wvuj4nW2NvdXJ0XSc7Civlr74+J1tjb3JyZWN0XSc7Civlr78+J1tvbGQgYWdlXSc7CivlsIE+J1tsZXR0ZXJdJzsKK+Wwgj4nW21vbm9wb2xpemVdJzsKK+WwhD4nW3Nob290XSc7CivlsIU+J1tzdWJkdWVdJzsKK+Wwhj4nW3dpbGxdJzsKK+Wwhz4nW3dpbGxdJzsKK+WwiD4nW21vbm9wb2xpemVdJzsKK+WwiT4nW29mZmljZXJdJzsKK+Wwij4nW3Jlc3BlY3RdJzsKK+Wwiz4nW3NlZWtdJzsKK+WwjT4nW2NvcnJlY3RdJzsKK+Wwjj4nW2RpcmVjdF0nOwor5bCPPidbc21hbGxdJzsKK+WwkT4nW2Zld10nOwor5bCTPidbeW91XSc7CivlsJY+J1tzaGFycF0nOwor5bCaPidbc3RpbGxdJzsKK+WwoD4nW3ZlcnkgZmV3XSc7CivlsKI+J1t3ZWFrXSc7CivlsKQ+J1tlc3BlY2lhbGx5XSc7CivlsKg+J1tzaGFnZ3kgaGFpcmVkIGRvZ10nOwor5bCtPidbYSBsZWdlbmRhcnkgYW5jaWVudCBlbXBlcm9yLXNhZ2VdJzsKK+WwsT4nW2p1c3RdJzsKK+WwuD4nW2NvcnBzZV0nOwor5bC5PidbZ292ZXJuXSc7CivlsLo+J1tjaGluZXNlIG1lYXN1cmUgYXBwcm94LiBcImZvb3RcIl0nOwor5bC7PidbZW5kIG9mIHNwaW5lXSc7CivlsLw+J1tidWRkaGlzdCBudW5dJzsKK+WwvT4nW2V4aGF1c3RdJzsKK+Wwvj4nW3RhaWxdJzsKK+Wwvz4nW3VyaW5lXSc7CivlsYA+J1tidXJlYXVdJzsKK+WxgT4nW2JyZWFrIHdpbmRdJzsKK+WxhT4nW2xpdmVdJzsKK+Wxhj4nW251bWVyYXJ5IGFkanVuY3QgZm9yIHRpbWVdJzsKK+WxiD4nW2JlbmRdJzsKK+Wxij4nW251bWVyYXJ5IGFkanVuY3QgZm9yIHRpbWVdJzsKK+Wxiz4nW2hvdXNlXSc7CivlsY0+J1tjb3Jwc2VdJzsKK+Wxjj4nW2V4Y3JlbWVudF0nOwor5bGPPidbZm9sZGluZyBzY3JlZW5dJzsKK+WxkD4nW3dvb2RlbiBzaG9lc10nOwor5bGRPidbYml0c10nOwor5bGTPidbZ2lnYW50aWMgc3RyZW5ndGhdJzsKK+WxlT4nW29wZW5dJzsKK+Wxnj4nW2NsYXNzXSc7CivlsaA+J1tidXRjaGVyXSc7CivlsaE+J1tmcmVxdWVudGx5XSc7CivlsaQ+J1tzdG9yZXldJzsKK+WxpT4nW2Zvb3R3ZWFyXSc7Civlsaw+J1tjbGFzc10nOwor5bGuPidbc3Byb3V0XSc7Civlsa8+J1t2aWxsYWdlXSc7CivlsbE+J1ttb3VudGFpbl0nOwor5bG2PidbbG9mdHldJzsKK+WxuT4nW3RvIHJpc2UgaGlnaF0nOwor5bKMPidbcGVyaWxvdXNdJzsKK+WykD4nW2hpZ2hdJzsKK+WykT4nW3N0ZWVwXSc7CivlspQ+J1tkaXZlcmdlXSc7CivlsqE+J1tyaWRnZSBvciBjcmVzdCBvZiBoaWxsXSc7Civlsqg+J1t1bmV2ZW5dJzsKK+WyqT4nW2NsaWZmXSc7Civlsqs+J1ttb3VudGFpbiBwZWFrXSc7Civlsqw+J1tjYXBlXSc7CivlsrE+J1tkYWlzaGFuIG9uZSBvZiBmaXZlIHNhY3JlZCBtb3VudF0nOwor5bKzPidbbW91bnRhaW4gcGVha10nOworIyLlsrY+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+Wytz4nW21pbiBtb3VudGFpbl0nOwor5bK4PidbYmFua10nOworIyLlsro+J1ttb3VudGFpbiByaWRnZV0nIiwKKyMi5bK6PidbbW91bnRhaW4gcmlkZ2VdJyIsCivlsr4+J1ttb3VudGFpbiBwYXNzIChrb3JlYW4pXSc7CisjIuWzhD4nW3JhbmdlIG9mIHBlYWtzXSciLAor5bOHPidbY2F2ZV0nOwor5bOZPidbc3RhbmQgZXJlY3RdJzsKK+WzoD4nW21vdW50YWluIHBhc3NdJzsKK+WzoT4nW2dvcmdlXSc7Civls6g+J1tsb2Z0eV0nOwor5bOpPidbbG9mdHldJzsKK+Wzqj4nW3ZhbGxleV0nOwor5bOtPidbc3RlZXBdJzsKK+Wzrz4nW3BlYWtdJzsKK+WzsD4nW3BlYWtdJzsKK+Wztj4nW2lzbGFuZF0nOworIyLls7o+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+Wzuz4nW2hpZ2hdJzsKK+WzvT4nW2dvcmdlXSc7CivltIc+J1tlc3RlZW1dJzsKK+W0iz4nW2Zsb3dlcnldJzsKK+W0jj4nW3JvdWdoXSc7CivltJE+J1tLdW5sdW4gbW91bnRhaW5zIGluIEppYW5nIFN1IHByb3ZpbmNlLl0nOwor5bSUPidbaGlnaF0nOwor5bSVPidbY2xpZmZdJzsKK+W0lj4nW2NsaWZmXSc7CivltJc+J1twb3N0XSc7CivltJg+J1trdW5sdW4gbW91bnRhaW5zIGluIGppYW5nc3VdJzsKK+W0mT4nW2t1bmx1biBtb3VudGFpbnMgaW4gamlhbmdzdV0nOwor5bSaPidbaGlsbHldJzsKK+W0mz4nW3Rvd2VyaW5nXSc7CivltJ8+J1tjbGlmZnNdJzsKK+W0oj4nW2hpZ2hdJzsKK+W0qT4nW3J1cHR1cmVdJzsKK+W1iz4nW29tZWkgbW91bnRhaW4gaW4gc2ljaHVhbl0nOwor5bWMPidbaW5sYXldJzsKK+W1jj4nW21vdW50YWluIHJlY2Vzc10nOwor5bWQPidbbW91bnRhaW4gbWlzdF0nOwor5bWSPidbY2xpZmZdJzsKK+W1nD4nW3JvdWdoXSc7Civltak+J1toaWdoXSc7Civltaw+J1toaWdoXSc7Civlta8+J1toaWdoXSc7CivltbM+J1toaWdoXSc7CivltbY+J1tsb3cgcGFydCBvZiBhIG1vdW50YWluXSc7CivltoI+J1tjbGlmZl0nOwor5baEPidbaGlnaF0nOwor5baHPidbc3RlZXBdJzsKK+W2iz4nW2lzbGFuZF0nOwor5baMPidbaXNsYW5kXSc7CisjIuW2kD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5badPidbcGF0aCBsZWFkaW5nIHVwIGEgbW91bnRhaW5dJzsKK+W2oj4nW2hpZ2ggb3IgdGFsbF0nOworIyLltqw+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+W2rj4nW2hpZ2hdJzsKK+W2tz4nW3JhbmdlIG9mIG1vdW50YWlucyBpbiBodW5hbiBwcm92XSc7Civltro+J1ttb3VudGFpbiByaWRnZV0nOwor5ba8PidbaXNsYW5kXSc7Civltr0+J1ttb3VudGFpbiBwZWFrXSc7Civlt4k+J1tzdGVlcF0nOwor5beMPidbY2xpZmZdJzsKK+W3jT4nW2hpZ2hdJzsKK+W3kj4nW21vdW50YWluIHJhbmdlXSc7Civlt5M+J1tzdW1taXQgb2YgbW91bnRhaW5dJzsKK+W3lj4nW2NsaWZmXSc7Civlt5s+J1tyaXZlcl0nOwor5bedPidbc3RyZWFtXSc7Civlt54+J1thZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbl0nOwor5behPidbcGF0cm9sXSc7Civlt6M+J1tuZXN0XSc7Civlt6U+J1tsYWJvcl0nOwor5bemPidbbGVmdF0nOwor5benPidbc2tpbGxmdWxdJzsKK+W3qD4nW2xhcmdlXSc7Civlt6s+J1t3aXphcmRdJzsKK+W3rj4nW2RpZmZlcl0nOwor5bexPidbc2VsZl0nOwor5beyPidbYWxyZWFkeV0nOwor5bezPidbc2l4dGggb2YgdHdlbHZlIGJyYW5jaGVzXSc7Civlt7Q+J1tncmVhdGx5IGRlc2lyZV0nOwor5be1PidbbWVhc3VyaW5nIGN1cF0nOwor5be3PidbYWxsZXldJzsKK+W3uz4nW3Njcm9sbF0nOwor5be9PidbNXRoIG9mIHRoZSA4IHRyaWdyYW1zXSc7Civlt74+J1trZXJjaGllZl0nOwor5biCPidbbWFya2V0XSc7CivluIM+J1tjb3R0b24gY2xvdGhdJzsKK+W4hj4nW3NhaWxdJzsKK+W4iz4nW3BhcGVyXSc7CivluIw+J1tyYXJlXSc7CivluJE+J1thIHRyZWFzdXJ5XSc7CivluJY+J1tpbnZpdGF0aW9uIGNhcmRdJzsKK+W4mT4nW2Jvb2sgY292ZXJdJzsKK+W4mj4nW2Jyb29tXSc7CivluJs+J1tzaWxrc10nOwor5bidPidbc3VwcmVtZSBydWxlcl0nOwor5bilPidbY29tbWFuZGVyXSc7CivluKs+J1t0ZWFjaGVyXSc7CivluK0+J1tzZWF0XSc7CivluK8+J1tiZWx0XSc7CivluLA+J1tyZXR1cm5dJzsKK+W4sz4nW3RlbnRdJzsKK+W4tj4nW2JlbHRdJzsKK+W4tz4nW3RlbnRdJzsKK+W4uD4nW2NvbW1vbl0nOwor5bi9PidbaGF0XSc7CivluYA+J1twaWN0dXJlXSc7CivluYM+J1tjdXJ0YWluIHRoYXQgZm9ybXMgd2FsbF0nOwor5bmEPidbdGVudF0nOwor5bmFPidbcGllY2VdJzsKK+W5hz4nW2hlbHBdJzsKK+W5jD4nW2N1cnRhaW5dJzsKK+W5jj4nW2NvdmVyLWNsb3RoXSc7CivluZQ+J1tjdXJ0YWluXSc7CivluZU+J1tjdXJ0YWluXSc7CivluZc+J1t3b21lbicncyBoZWFkZ2Vhcl0nOwor5bmfPidbZmxhZ10nOwor5bmhPidbcGVubmFudF0nOwor5bmiPidbY2FycmlhZ2UgY3VydGFpbl0nOwor5bmjPidbY3VycmVuY3ldJzsKK+W5pD4nW2V2aWxdJzsKK+W5sj4nW29wcG9zZV0nOwor5bmzPidbZmxhdF0nOwor5bm0PidbeWVhcl0nOwor5bm1PidbZXZlbiBsZXZlbC4gdG8gcmFpc2UgaW4gYm90aCBoYW5kc10nOwor5bm2PidbY29tYmluZV0nOwor5bm4PidbbHVjayhpbHkpXSc7Civlubk+J1t0cnVuayBvZiB0cmVlIG9yIG9mIGh1bWFuIGJvZHldJzsKK+W5uj4nW29uZV0nOwor5bm7PidbaWxsdXNpb25dJzsKK+W5vD4nW2luZmFudF0nOwor5bm9PidbcXVpZXRdJzsKK+W5vj4nW2hvdyBtYW55PyBob3cgbXVjaD8gKGEpZmV3XSc7Civlub8+J1t3aWRlXSc7CivluoE+J1toYWxsXSc7CivluoM+J1ticm9hZF0nOwor5bqEPidbdmlsbGFnZV0nOwor5bqHPidbY292ZXJdJzsKK+W6ij4nW2JlZF0nOwor5bqPPidbc2VyaWVzXSc7CivlupU+J1tib3R0b21dJzsKK+W6lj4nW2tpdGNoZW5dJzsKK+W6lz4nW3Nob3BdJzsKK+W6mj4nW3NldmVudGggb2YgdGVuIGN5Y2xpY2FsIHN0ZW1zXSc7Civlupw+J1twcmVmZWN0dXJlXSc7CivluqA+J1t2aWxsYWdlIHNjaG9vbF0nOwor5bqmPidbZGVncmVlXSc7Civluqc+J1tzZWF0XSc7Civluqs+J1thcm1vcnldJzsKK+W6rT4nW2NvdXJ0eWFyZF0nOwor5bq1PidbYnVkZGhpc3QgbW9uYXN0ZXJ5IG9yIG51bm5lcnldJzsKK+W6tj4nW251bWVyb3VzXSc7Civlurc+J1twZWFjZWZ1bF0nOwor5bq4PidbdXN1YWxdJzsKK+W7gT4nW3RvaWxldF0nOwor5buCPidbc2lkZS1yb29tXSc7Civlu4M+J1thYnJvZ2F0ZV0nOwor5buIPidbYmlnIGJ1aWxkaW5nXSc7Civlu4k+J1t1cHJpZ2h0XSc7Civlu4o+J1tjb3JyaWRvcl0nOwor5buPPidbc3RhYmxlXSc7Civlu5A+J1tzdGFibGVdJzsKK+W7kz4nW2Jyb2FkXSc7Civlu5Y+J1tzdXJuYW1lXSc7Civlu5o+J1traXRjaGVuXSc7Civlu5s+J1tzdG9yZV0nOwor5budPidbc2VydmFudF0nOwor5bufPidbdGVtcGxlXSc7Civlu6A+J1tmYWN0b3J5XSc7Civlu6E+J1tjb3JyaWRvcl0nOwor5buiPidbYWJyb2dhdGVdJzsKK+W7oz4nW2Jyb2FkXSc7Civlu6g+J1tnb3Zlcm5tZW50IG9mZmljZV0nOwor5bupPidbZ3JhbmFyeV0nOwor5busPidbaHV0XSc7Civlu7A+J1toYWxsXSc7Civlu7E+J1toYXJtb25pb3VzXSc7Civlu7M+J1toYWxsXSc7Civlu7Q+J1tnb10nOwor5bu2PidbZGVsYXldJzsKK+W7tz4nW2NvdXJ0XSc7Civlu7g+J1tlbmxpZ2h0ZW5dJzsKK+W7uj4nW2J1aWxkXSc7Civlu7s+J1tjaXJjbGUgYXJvdW5kXSc7Civlu7w+J1t0aGVuXSc7Civlu74+J1t0d28gaGFuZHNdJzsKK+W7vz4nW3R3ZW50eV0nOwor5byBPidbY29uaWNhbCBjYXAgd29ybiB1bmRlciB6aG91IGR5bmFdJzsKK+W8gz4nW3JlamVjdF0nOwor5byEPidbZG9dJzsKK+W8iT4nW2xhcmdlXSc7CivlvIo+J1tldmlsXSc7CivlvIs+J1tjYXRjaF0nOwor5byMPidbbnVtYmVyIG9uZV0nOwor5byNPidbbnVtYmVyIHR3b10nOwor5byPPidbc3R5bGVdJzsKK+W8kD4nW251bWJlciB0d29dJzsKK+W8kT4nW3RvIGtpbGwgb25lJydzIHN1cGVyaW9yXSc7CivlvJM+J1tib3ddJzsKK+W8lD4nW2NvbmRvbGVdJzsKK+W8lT4nW3B1bGxdJzsKK+W8lj4nW3Bob25ldGljIGZvciBcInRlXCIgKEphcGFuZXNlKV0nOwor5byXPidbbm90XSc7CivlvJg+J1tlbmxhcmdlXSc7CivlvJs+J1tsb29zZW5dJzsKK+W8nz4nW3lvdW5nIGJyb3RoZXJdJzsKK+W8pT4nW2V4dGVuc2l2ZV0nOwor5bymPidbc3RyaW5nXSc7CivlvKc+J1t3b29kZW4gYm93XSc7CivlvKk+J1tjcm9zcy1ib3ddJzsKK+W8rT4nW3N0b3BdJzsKK+W8rz4nW2JlbmRdJzsKK+W8sT4nW3dlYWtdJzsKK+W8tT4nW3N0cmV0Y2hdJzsKK+W8tz4nW3N0cm9uZ10nOwor5by4PidbYm93IHN0cmV0Y2hlZCBmdWxsXSc7CivlvLw+J1thaWRdJzsKKyMi5by8PidbYWlkXSciLAorIyLlvYE+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+W9iD4nW3BlbGxldF0nOwor5b2KPidbc3R1YmJvcm5dJzsKK+W9jD4nW2V4dGVuc2l2ZV0nOwor5b2OPidbYmVuZF0nOwor5b2RPidbc25vdXRdJzsKK+W9kz4nW2JlYXJdJzsKK+W9lj4nW2EgaG9nXSc7CivlvZc+J1ticm9vbXN0aWNrXSc7CivlvZk+J1tjb2xsZWN0XSc7CivlvZw+J1t5aV0nOwor5b2dPidbeWldJzsKK+W9oT4nW2hhaXJdJzsKK+W9oj4nW2Zvcm1dJzsKK+W9pj4nW2VsZWdhbnRdJzsKK+W9qT4nW2h1ZV0nOwor5b2qPidbdGlnZXJdJzsKK+W9qz4nW2NhcnZlXSc7Civlvaw+J1tjdWx0aXZhdGVkXSc7Civlva0+J1tuYW1lIG9mIGFuY2llbnQgY291bnRyeV0nOwor5b2wPidbY2xlYXJdJzsKK+W9sT4nW3NoYWRvd10nOwor5b2zPidbc3RlcCB3aXRoIGxlZnQgZm9vdF0nOwor5b23PidbbGlrZV0nOwor5b25Pidbc2VydmljZV0nOwor5b28PidbdGhhdF0nOwor5b2/PidbcmVzZW1ibGluZ10nOwor5b6APidbZ29dJzsKK+W+gT4nW2ludmFkZV0nOwor5b6CPidbZ29dJzsKK+W+gz4nW2dvXSc7CivlvoQ+J1tuYXJyb3cgcGF0aF0nOwor5b6FPidbdHJlYXRdJzsKK+W+hz4nW2NvbXBseSB3aXRoXSc7Civlvog+J1t2ZXJ5XSc7Civlvoo+J1tsaW5nZXJdJzsKK+W+iz4nW3N0YXR1dGVdJzsKK+W+jD4nW2JlaGluZF0nOwor5b6QPidbc2xvd2x5XSc7CivlvpE+J1tuYXJyb3cgcGF0aF0nOwor5b6SPidbZGlzY2lwbGVdJzsKK+W+kz4nW2Zyb21dJzsKK+W+lz4nW29idGFpbl0nOwor5b6YPidbd2FsayBiYWNrIGFuZCBmb3J0aF0nOwor5b6ZPidbbW92ZSBvbmUnJ3MgYWJvZGVdJzsKK+W+nj4nW2Zyb21dJzsKK+W+oD4nW2luZHVjZV0nOwor5b6hPidbZHJpdmVdJzsKK+W+qD4nW2RvdWJ0ZnVsXSc7Civlvqk+J1tyZXR1cm5dJzsKK+W+qj4nW29iZXldJzsKK+W+rT4nW2NvbnNjcmlwdCBsYWJvcl0nOwor5b6uPidbc21hbGxdJzsKK+W+sz4nW3ZpcnR1ZV0nOwor5b60Pidbc3VtbW9uXSc7Civlvrk+J1twZW5ldHJhdGVdJzsKK+W+vD4nW2Zyb250aWVyXSc7Civlvr0+J1thIGJhZGdlXSc7Civlv4M+J1toZWFydF0nOwor5b+FPidbc3VyZWx5XSc7Civlv4w+J1tqZWFsb3VzXSc7Civlv40+J1tlbmR1cmVdJzsKK+W/lj4nW2d1ZXNzXSc7Civlv5c+J1twdXJwb3NlXSc7Civlv5g+J1tmb3JnZXRdJzsKK+W/mT4nW2J1c3ldJzsKK+W/nD4nW3Nob3VsZF0nOwor5b+dPidbZGlzZ3JhY2VdJzsKK+W/oD4nW2xveWFsdHldJzsKK+W/pD4nW2luc3Vib3JkaW5hdGVdJzsKK+W/qz4nW3JhcGlkXSc7Civlv7A+J1tzdWZmZXJdJzsKK+W/sT4nW3RydXRoXSc7Civlv7U+J1t0aGluayBvZl0nOwor5b+4PidbYmx1c2hdJzsKK+W/uz4nW2RlbGlnaHRmdWxdJzsKK+W/vT4nW3N1ZGRlbmx5XSc7Civlv78+J1tnZXQgYW5ncnldJzsKK+aAjj4nW3doYXQ/IHdoeT8gaG93P10nOwor5oCPPidbZGlzY29udGVudGVkXSc7CisjIuaAkD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5oCSPidbYW5nZXJdJzsKK+aAlT4nW2ZlYXJdJzsKK+aAlj4nW3RlcnJvcl0nOwor5oCZPidbcmVseSBvbl0nOwor5oCbPidbZ3JpZXZlZF0nOwor5oCcPidbcGl0eV0nOwor5oCdPidbdGhpbmtdJzsKK+aAoD4nW2lkbGVdJzsKK+aAoT4nW2hhcm1vbnldJzsKK+aApT4nW3F1aWNrXSc7CivmgKY+J1tlYWdlcl0nOwor5oCnPidbbmF0dXJlXSc7CivmgKg+J1toYXRyZWRdJzsKK+aAqT4nW3NoeV0nOwor5oCqPidbc3RyYW5nZV0nOwor5oCrPidbc29ycnldJzsKK+aArz4nW2xhY2tpbmcgaW4gY291cmFnZV0nOwor5oCxPidbaGFzdGlseV0nOwor5oC6PidbdG8gZW5kdXJlXSc7CivmgYE+J1t0aGF0XSc7CivmgYI+J1tjYXJlZnVsXSc7CivmgYM+J1tyZWx5IG9uXSc7CivmgYY+J1tjb25zdGFudF0nOwor5oGKPidbYmUgdW5pdGVkXSc7CivmgYs+J1tsb3ZlXSc7CivmgY0+J1tzZWVtaW5nbHldJzsKK+aBkD4nW2ZlYXJdJzsKK+aBkj4nW2NvbnN0YW50XSc7CivmgZU+J1tmb3JnaXZlXSc7CivmgZk+J1tpbGxuZXNzXSc7CivmgZo+J1thbmdlcl0nOwor5oGfPidbc2NhcmVkXSc7CivmgaA+J1tzdHJhbmdlXSc7CivmgaI+J1tyZXN0b3JlXSc7CivmgaM+J1tpbmR1bGdlIG9uZXNlbGZdJzsKK+aBpD4nW3Nob3cgcGl0eV0nOwor5oGlPidbc2hhbWVdJzsKK+aBqD4nW2hhdHJlZF0nOwor5oGpPidba2luZG5lc3NdJzsKK+aBqj4nW3Jlc3BlY3RmdWxdJzsKK+aBqz4nW2luIHBhaW5dJzsKK+aBrD4nW3F1aWV0XSc7Civmga0+J1tyZXNwZWN0ZnVsXSc7Civmga8+J1tyZXN0XSc7CivmgbA+J1tqdXN0XSc7CivmgbU+J1tmYXZvcl0nOworIyLmgbY+J1tldmlsXSciLAor5oKBPidbaXJyaXRhYmxlXSc7CivmgoM+J1tzaW5jZXJlXSc7CivmgoQ+J1tzaWxlbnRdJzsKK+aCiT4nW2tub3ddJzsKK+aCiz4nW3N0aW5neV0nOwor5oKMPidbYnJvdGhlcmx5XSc7Civmgo0+J1tjb3VyYWdlb3VzXSc7CivmgpI+J1tzb3Jyb3dmdWxdJzsKK+aClD4nW3JlcGVudF0nOwor5oKWPidbYmUgY29udHJhZGljdG9yeSB0b10nOworIyLmgpY+J1tiZSBjb250cmFkaWN0b3J5IHRvXSciLAor5oKaPidbYmUgYWZyYWlkXSc7Civmgps+J1tyZXBlbnRdJzsKK+aCnz4nW2FwcHJlaGVuZF0nOwor5oKgPidbbG9uZ10nOwor5oKjPidbc3VmZmVyXSc7CivmgqY+J1twbGVhc2VkXSc7Civmgqc+J1tzbW9vdGhdJzsKK+aCqT4nW2FuZ2VyZWRdJzsKK+aCqj4nW2V2aWxdJzsKK+aCsj4nW3NvcnJvd10nOwor5oKzPidbZXRoaWNzXSc7CivmgrQ+J1tzdWZmZXJdJzsKK+aCtT4nW2Rpc2FwcG9pbnRlZF0nOwor5oK2PidbZ2xvb215XSc7Civmgrg+J1tmZWFyZnVsXSc7Civmgrw+J1tncmlldmVdJzsKK+aCvT4nW3NvcnJvd2Z1bF0nOwor5oOFPidbZmVlbGluZ10nOwor5oOGPidbZGlzdHJlc3NlZF0nOwor5oOHPidbYmUga2luZF0nOwor5oORPidbY29uZnVzZV0nOwor5oOTPidbY2FyZWZ1bF0nOwor5oOYPidbZGlzY29uY2VydGVkXSc7Civmg5o+J1thYnNlbnQtbWluZGVkXSc7Civmg5w+J1twaXR5XSc7Civmg58+J1tidXRdJzsKK+aDoD4nW2Zhdm9yXSc7Civmg6E+J1tldmlsXSc7Civmg6M+J1tvdmVyYWxsIFtxdWVzdGlvbmFibGUgdmFyaWFudF1dJzsKK+aDpz4nW2ZlYXJdJzsKK+aDqD4nW3NhZF0nOwor5oOwPidbaW5kb2xlbnRdJzsKK+aDsT4nW2FuZ2VyZWRdJzsKK+aDsz4nW3RoaW5rXSc7Civmg7Q+J1thZnJhaWRdJzsKK+aDtj4nW2ZlYXJmdWxdJzsKK+aDtz4nW3dyaWdnbGVdJzsKK+aDuT4nW2lycml0YXRlXSc7Civmg7o+J1tpbnRlbGxpZ2VudF0nOwor5oO7PidbZmVlbCBhbmd1aXNoXSc7CivmhIA+J1tjaGFuZ2Ugb25lJydzIGNvdW50ZW5hbmNlXSc7CivmhIE+J1thbnhpZXR5XSc7CivmhIM+J1tyZWxheF0nOwor5oSGPidbZmF1bHRdJzsKK+aEiD4nW21vcmUgYW5kIG1vcmVdJzsKK+aEiT4nW3BsZWFzYW50XSc7CivmhI0+J1twaXR5XSc7CivmhI4+J1tvYnN0aW5hdGVdJzsKK+aEjz4nW3Rob3VnaHRdJzsKK+aElT4nW3N0YXJ0bGVkXSc7CivmhJo+J1tzdHVwaWRdJzsKK+aEmz4nW2xvdmVdJzsKK+aEnz4nW2ZlZWxdJzsKK+aEoT4nW2Fic2VudC1taW5kZWRdJzsKK+aEpz4nW2FzaGFtZWRdJzsKK+aEqD4nW3NpbmNlcml0eV0nOwor5oSsPidbYWNjdXNlXSc7CivmhLQ+J1tzYWRdJzsKK+aEvD4nW2FjdCB3aXRoIGNhcmVdJzsKK+aEvT4nW2dhbWJsZV0nOwor5oS+PidbYW5nZXJdJzsKK+aEvz4nW3NpbmNlcmVdJzsKK+aFgj4nW3VyZ2VdJzsKK+aFhD4nW3NoaXZlcl0nOwor5oWHPidbY2FyZWZ1bF0nOwor5oWIPidba2luZF0nOwor5oWKPidbdG8gcmVzZW50XSc7CivmhYs+J1ttYW5uZXJdJzsKK+aFjD4nW25lcnZvdXNdJzsKK+aFjT4nW2FuZ3J5XSc7CivmhY4+J1thY3Qgd2l0aCBjYXJlXSc7CisjIuaFkz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5oWVPidbbG9uZyBmb3JdJzsKK+aFmD4nW3NhZF0nOwor5oWZPidbYXNoYW1lZF0nOwor5oWaPidbYXNoYW1lZF0nOwor5oWdPidbZG8gZXZpbCBpbiBzZWNyZXRdJzsKK+aFnz4nW3NhZG5lc3NdJzsKK+aFoj4nW3Nsb3cobHkpXSc7CivmhaM+J1toYWJpdF0nOwor5oWlPidbc2luY2VyZV0nOwor5oWnPidbYnJpZ2h0XSc7Civmhag+J1tzaWdoXSc7Civmhas+J1t0byBhbGFybV0nOwor5oWuPidbYmUgY29uY2VybmVkXSc7CisjIuaFrz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5oWwPidbY29tZm9ydF0nOwor5oWxPidbc2FkXSc7CivmhbM+J1ttaXNlcmx5XSc7CivmhbQ+J1tmZWFyXSc7CivmhbU+J1tpbmRvbGVudF0nOwor5oW2PidbY29uZ3JhdHVsYXRlXSc7Civmhbc+J1thcmRlbnRdJzsKK+aFvj4nW2x1c3RdJzsKK+aGgj4nW3NhZF0nOwor5oaHPidbcmVzdF0nOwor5oaKPidbdGlyZWRdJzsKK+aGjj4nW2hhdGVdJzsKK+aGkD4nW3BpdHldJzsKK+aGkT4nW2xlYW4gb25dJzsKK+aGlD4nW2JlIHdvcm4tb3V0XSc7CivmhpY+J1tjYXV0aW91c10nOwor5oaZPidbbGlrZV0nOwor5oaaPidbZHJlYWRdJzsKK+aGpD4nW3Jlc2VudF0nOwor5oanPidbaXJyZXNvbHV0ZV0nOwor5oapPidbcmVzdF0nOwor5oarPidbcGl0eV0nOwor5oasPidbcm91c2VdJzsKK+aGrj4nW3JlZ3JldGZ1bF0nOwor5oayPidbY29uc3RpdHV0aW9uXSc7CivmhrY+J1tyZW1lbWJlcl0nOwor5oa6PidbcGVhY2VdJzsKK+aGvj4nW3JlZ3JldF0nOwor5oeDPidbY291cnRlb3VzXSc7Civmh4Y+J1thbnhpb3VzXSc7Civmh4c+J1tzaW5jZXJlXSc7Civmh4g+J1tpZGxlXSc7Civmh4k+J1tzaG91bGRdJzsKK+aHij4nW3ZleGVkXSc7Civmh4s+J1tzcGxlbmRpZF0nOwor5oeMPidbZW5qb3ldJzsKK+aHjT4nW2JlIGFmcmFpZCBvZl0nOwor5oeQPidbYm9zb21dJzsKK+aHoz4nW2JlIHNpY2sgYXQgaGVhcnRdJzsKK+aHpj4nW3dlYWtdJzsKK+aHsj4nW3B1bmlzaF0nOwor5oe0PidbcmVncmV0XSc7Civmh7Y+J1tsYXp5XSc7Civmh7c+J1tib3NvbV0nOwor5oe4PidbaGFuZ10nOwor5oe6PidbcmVncmV0XSc7Civmh7w+J1tmZWFyXSc7Civmh70+J1toYXBweV0nOwor5oe+PidbYWZyYWlkXSc7Civmh78+J1t2aXJ0dW91c10nOwor5oiAPidbbG92ZV0nOwor5oiIPidbaGFsYmVyZF0nOwor5oiJPidbYSBiYXR0bGUtYXhlXSc7CivmiIo+J1tmaWZ0aCBvZiB0ZW4gY2VsZXN0aWFsIHN0ZW1zXSc7CivmiIw+J1tlbGV2ZW50aCBvZiB0ZXJyZXN0cmlhbCBicmFuY2hlc10nOwor5oiNPidbZGVmZW5kIGJvcmRlcnNdJzsKK+aIjj4nW2FybXNdJzsKK+aIkD4nW2NvbXBsZXRlZF0nOwor5oiRPidbb3VyXSc7CivmiJI+J1t3YXJuXSc7CivmiJQ+J1tzbWFsbF0nOwor5oiWPidbb3JdJzsKK+aImj4nW3JlbGF0aXZlXSc7CivmiJs+J1tsYW5jZV0nOwor5oidPidbcGlyYXRlXSc7CivmiJ4+J1tsYW5jZV0nOwor5oifPidbaGFsYmVyZCB3aXRoIGNyZXNjZW50IGJsYWRlXSc7CivmiKE+J1tzdWJqdWdhdGVdJzsKK+aIpj4nW3dhcl0nOwor5oiqPidbY3V0IG9mZl0nOwor5oiuPidba2lsbF0nOwor5oivPidbdGhlYXRyaWNhbCBwbGF5XSc7CivmiLA+J1t3YXJdJzsKK+aIsj4nW3RoZWF0cmljYWwgcGxheV0nOwor5oizPidbcHJpY2tdJzsKK+aItD4nW3dlYXIgb24gdG9wXSc7CivmiLg+J1tkb29yXSc7CivmiLs+J1twZXJ2ZXJzZV0nOwor5oi/PidbaG91c2VdJzsKK+aJgD4nW3BsYWNlXSc7CivmiYE+J1tmbGF0XSc7CivmiYc+J1tmYW5dJzsKK+aJiD4nW2VzY29ydF0nOwor5omJPidbZG9vciBwYW5lbF0nOwor5omLPidbaGFuZF0nOwor5omNPidbdGFsZW50XSc7CivmiY4+J1twdWxsIHVwXSc7CivmiZM+J1tzdHJpa2VdJzsKK+aJlT4nW3NoYWtlIG9mZl0nOwor5omYPidbaG9sZCB1cCB3aXRoIHBhbG1dJzsKK+aJmz4nW2NhcnJ5IG9uIHNob3VsZGVyc10nOwor5omePidbd2FyZCBvZmZdJzsKK+aJoD4nW3BpY2sgdXAgd2l0aCBmb3JrIG9yIHBpbmNlcnNdJzsKK+aJoz4nW2tub2NrXSc7Civmiag+J1twaWNrIHVwIHdpdGggZm9yayBvciBwaW5jZXJzXSc7Civmia4+J1tkcmVzcyB1cF0nOwor5omxPidbY29sbGVjdF0nOwor5om2Pidbc3VwcG9ydF0nOwor5om5PidbY29tbWVudF0nOwor5om8PidbZ3Jhc3BdJzsKK+aJvj4nW3NlYXJjaF0nOwor5om/PidbaW5oZXJpdF0nOwor5oqAPidbc2tpbGxdJzsKKyMi5oqCPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmioM+J1t0byBjbGFwIGhhbmRzXSc7CivmioQ+J1tjb3B5XSc7Civmiok+J1tjaG9vc2VdJzsKK+aKij4nW2hvbGRdJzsKK+aKkT4nW3ByZXNzIGRvd25dJzsKK+aKkj4nW2V4cHJlc3NdJzsKK+aKkz4nW3NjcmF0Y2hdJzsKK+aKlD4nW3Rha2Ugb3IgaG9sZCB1cCBpbiBib3RoIGhhbmRzXSc7CivmipU+J1t0aHJvd10nOwor5oqWPidbdHJlbWJsZV0nOwor5oqXPidbcmVzaXN0XSc7Civmipg+J1ticmVhayBvZmZdJzsKK+aKmz4nW3Rocm93IChhd2F5KV0nOwor5oqcPidbdXByb290XSc7Civmip4+J1tzZWxlY3RdJzsKK+aKqz4nW3dlYXJdJzsKK+aKrD4nW2xpZnRdJzsKK+aKsT4nW2VtYnJhY2VdJzsKK+aKtT4nW3Jlc2lzdF0nOwor5oq5Pidbc21lYXJdJzsKK+aKuz4nW3B1bGxdJzsKK+aKvD4nW21vcnRnYWdlXSc7Civmir0+J1tkcmF3IG91dF0nOwor5ouCPidbc2hha2Ugb2ZmXSc7Civmi4U+J1tjYXJyeV0nOwor5ouGPidbYnJlYWsgdXBdJzsKK+aLhz4nW3RodW1iXSc7Civmi4g+J1twaWNrIHVwIHdpdGggZmluZ2Vyc10nOwor5ouJPidbcHVsbF0nOwor5ouKPidbc2xhcF0nOwor5ouMPidbbWl4XSc7Civmi40+J1tjbGFwXSc7Civmi48+J1t0YWtlXSc7Civmi5A+J1traWRuYXBdJzsKK+aLkT4nW3RvIGNsYW1wXSc7Civmi5I+J1t3YXJkIG9mZiB3aXRoIGhhbmRdJzsKK+aLkz4nW2V4cGFuZF0nOwor5ouUPidbdXByb290XSc7Civmi5c+J1tvYnN0aW5hdGVdJzsKK+aLmD4nW3Jlc3RyYWluXSc7Civmi5k+J1tzdHVwaWRdJzsKK+aLmz4nW2JlY2tvbl0nOwor5oucPidbZG8gb2JlaXNhbmNlXSc7Civmi50+J1tkbyBvYmVpc2FuY2VdJzsKK+aLoD4nW29jY3VweV0nOwor5ouhPidbZXhwYW5kXSc7Civmi6w+J1tpbmNsdWRlXSc7Civmi60+J1t3aXBlIGF3YXkgc3RhaW5zIHdpdGggY2xvdGhdJzsKK+aLrj4nW2xhYm9yaW5nIGhhcmRdJzsKK+aLrz4nW2hlbHBdJzsKK+aLsT4nW2ZvbGQgaGFuZHMgb24gYnJlYXN0XSc7Civmi7M+J1tmaXN0XSc7CisjIuaLtD4nW2JpbmQgd2l0aCByb3BlXSciLAor5ou2PidbcHJlc3NdJzsKK+aLtz4nW3RvcnR1cmUgYW5kIGludGVycm9nYXRlXSc7Civmi74+J1twaWNrIHVwXSc7Civmi78+J1t0YWtlXSc7CivmjIE+J1tzdXN0YWluXSc7CivmjII+J1toYW5nXSc7CivmjIc+J1tmaW5nZXJdJzsKK+aMiD4nW2Fzc2lzdF0nOwor5oyJPidbcHV0IGhhbmQgb25dJzsKK+aMjD4nW2ZpZ2h0XSc7CivmjJE+J1tsb2FkIGNhcnJpZWQgb24gc2hvdWxkZXJzXSc7CivmjJk+J1tyYWlzZV0nOwor5oyfPidbY2xhc3AgdW5kZXIgYXJtXSc7CisjIuaMpT4nW2RpcmVjdF0nIiwKK+aMqD4nW25lYXJdJzsKK+aMqz4nW3B1c2ggZG93bl0nOwor5oyvPidbcmFpc2VdJzsKK+aMuj4nW3N0YW5kIHVwcmlnaHRdJzsKK+aMvT4nW3B1bGxdJzsKK+aMvj4nW2NsYXNwIHVuZGVyIGFybV0nOwor5oy/PidbaW5zZXJ0XSc7CivmjYk+J1tncmFzcF0nOwor5o2MPidbYnJlYWsgb3Blbl0nOwor5o2NPidbd2FyZCBvZmZdJzsKK+aNjz4nW3BpY2sgd2l0aCBmaW5nZXJzXSc7CivmjZA+J1tjb250cmlidXRlXSc7CivmjZU+J1thcnJlc3RdJzsKK+aNlz4nW21ha2UgcHJvZ3Jlc3NdJzsKK+aNnD4nW3NlYXJjaF0nOwor5o2nPidbaG9sZCB1cCBpbiB0d28gaGFuZHNdJzsKK+aNqD4nW2Rpc2NhcmRdJzsKK+aNqT4nW3R3aXN0IHdpdGggaGFuZHNdJzsKK+aNqz4nW3N0b2tlXSc7Civmja4+J1tvY2N1cHldJzsKK+aNsj4nW2N1cmxdJzsKK+aNtj4nW3N0cmlrZSB3aXRoIHN0aWNrXSc7Civmjbc+J1t3aW5dJzsKK+aNuj4nW3ByZXNzIGRvd24gaGVhdmlseSB3aXRoIGZyaW5nZXJzXSc7Civmjbs+J1t0d2lzdCB3aXRoIGZpbmdlcnNdJzsKK+aOgD4nW2xpZnRdJzsKK+aOgz4nW3N3ZWVwXSc7Civmjog+J1tnaXZlIHRvXSc7Civmjok+J1t0dXJuXSc7Civmjow+J1twYWxtIG9mIGhhbmRdJzsKK+aOjj4nW2RyYWcgYXNpZGVdJzsKK+aOjz4nW3Rha2Ugb3V0XSc7CivmjpI+J1tyb3ddJzsKK+aOlj4nW3N0aWNrIGluXSc7Civmjpg+J1tkaWddJzsKK+aOmz4nW2hhbmddJzsKKyMi5o6fPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmjqA+J1tyb2JdJzsKK+aOoT4nW2dhdGhlcl0nOwor5o6iPidbZmluZF0nOwor5o6jPidbZHJhZ10nOwor5o6lPidbcmVjZWl2ZV0nOwor5o6nPidbYWNjdXNlXSc7Civmjqg+J1twdXNoXSc7Civmjqk+J1tjb3Zlcl0nOwor5o6qPidbcGxhY2VdJzsKK+aOqz4nW2JlIG9uIG5pZ2h0IHdhdGNoXSc7Civmjqw+J1tncmFzcCB3aXRoIGJvdGggaGFuZHNdJzsKKyMi5o6xPidbcGlja3BvY2tldF0nIiwKK+aOtD4nW2JveCBvbmUnJ3MgZWFyc10nOworIyLmjrQ+J1tib3ggb25lJydzIGVhcnNdJyIsCivmjrs+J1tzY3JhdGNoIGxpZ2h0bHldJzsKK+aOvj4nW2EgZ2VuZXJhbCBkZXNpZ25hdGlvbiBvZiBvZmZpY2lhbHNdJzsKK+aPgD4nW2Nob29zZV0nOwor5o+DPidbc2hlYXJdJzsKK+aPhD4nW2xpZnRdJzsKK+aPhj4nW3ByaW1lIG1pbmlzdGVyXSc7Civmj4k+J1tydWJdJzsKK+aPjz4nW2NvcHldJzsKK+aPkD4nW2hvbGQgaW4gaGFuZF0nOwor5o+SPidbaW5zZXJ0XSc7Civmj5Y+J1tzYWx1dGVdJzsKK+aPmj4nW3NjYXR0ZXJdJzsKK+aPmz4nW2NoYW5nZV0nOwor5o+hPidbZ3Jhc3BdJzsKK+aPoz4nW3B1dCB0aGluZ3MgdW5kZXIgY2xvdGhlc10nOwor5o+pPidbcnViIGFuZCB3aXBlXSc7Civmj64+J1tkaXJlY3RdJzsKK+aPtD4nW2FpZF0nOwor5o+2PidbbWFrZSBmdW4gb2ZdJzsKK+aPuj4nW3dhZ10nOwor5pCGPidbcHVsbF0nOwor5pCNPidbZGltaW5pc2hdJzsKK+aQjz4nW3NlaXplXSc7CivmkJM+J1t0cmFtcGxlXSc7CivmkJY+J1t3YWddJzsKK+aQlz4nW2h1bGxdJzsKK+aQnD4nW3NlYXJjaF0nOwor5pCmPidbZ3Jhc3BdJzsKK+aQqD4nW3J1Yl0nOwor5pCsPidbdHJhbnNmZXJdJzsKK+aQrT4nW2pvaW4gdG9nZXRoZXJdJzsKK+aQtD4nW2V4dHJhY3RdJzsKK+aQtj4nW3BsdW5kZXJdJzsKK+aQuj4nW2xlYWQgYnkgaGFuZF0nOwor5pC+PidbcHJlc3NdJzsKK+aRgj4nW3Rha2UgaW5dJzsKK+aRjj4nW3RvIHN0cmFuZ2xlXSc7CivmkZg+J1twbHVja10nOwor5pGnPidbZGVzdHJveV0nOwor5pGpPidbcnViXSc7Civmka8+J1tzaW5jZXJlXSc7CivmkbY+J1tyb2xsIGFyb3VuZCB3aXRoIGhhbmRdJzsKK+aRuD4nW2dlbnRseSB0b3VjaCB3aXRoIGhhbmRdJzsKK+aRuj4nW2ZvbGRdJzsKK+aSgz4nW3N0cmlrZV0nOwor5pKIPidbc2Nvb3Agb3V0IG9mIHdhdGVyXSc7CivmkpI+J1tyZWxlYXNlXSc7CivmkpM+J1tzY3JhdGNoXSc7CivmkpU+J1tyaXBdJzsKK+aSmj4nW3R3aXJsIGluIGZpbmdlcnNdJzsKK+aSnj4nW2tub2NrIGFnYWluc3RdJzsKK+aSpD4nW29taXRdJzsKK+aSpT4nW21vdmVdJzsKK+aSqT4nW2xpZnQgdXBdJzsKK+aSqz4nW3BhdF0nOwor5pKtPidbc293XSc7Civmkq4+J1tsaXR0bGUgYml0XSc7CivmkrA+J1tjb21wb3NlXSc7CivmkrI+J1twb3VuZF0nOwor5pK5PidbZGlzdHVyYl0nOwor5pK7PidbZmxvZ10nOwor5pK8PidbbW92ZV0nOwor5pOBPidbZW1icmFjZV0nOwor5pOCPidbcnViXSc7Civmk4U+J1ttb25vcG9saXplXSc7Civmk4c+J1tzZWxlY3RdJzsKK+aTjT4nW2NvbmR1Y3RdJzsKK+aTkj4nW2NhdGNoXSc7Civmk5Q+J1tjYXJyeV0nOwor5pOYPidbdGh1bWJdJzsKK+aTmj4nW29jY3VweV0nOwor5pOgPidbY3Jvd2RdJzsKK+aToT4nW2NhcnJ5XSc7Civmk6I+J1twdWxsIHVwXSc7Civmk6M+J1todWxsXSc7Civmk6Y+J1t3aXBlXSc7Civmk6c+J1tyYWlzZV0nOwor5pOsPidbZHJhZnRdJzsKK+aTrz4nW2V4Y2x1ZGVdJzsKK+aTsT4nW3BsYWNlXSc7Civmk7I+J1t0aHJvd10nOwor5pO0PidbZXhwYW5kXSc7CisjIuaTtj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5pO6PidbcHV0XSc7Civmk70+J1t0aWNrbGVdJzsKK+aTvj4nW2Rpc3R1cmJdJzsKK+aUgD4nW2NsaW1iXSc7CivmlIU+J1tzYXZlXSc7CivmlJg+J1tzZWl6ZV0nOwor5pScPidbbGVhZCBieSBoYW5kXSc7CivmlJ0+J1t0YWtlIGluXSc7CivmlKM+J1t0YW5nbGVkXSc7CivmlKQ+J1tzcHJlYWQgb3V0XSc7CivmlKo+J1tkaXN0dXJiXSc7CivmlKs+J1tzbmF0Y2ggYXdheV0nOwor5pSsPidbZ3Jhc3BdJzsKK+aUrz4nW2Rpc3BlcnNlXSc7CivmlLQ+J1tyYXBdJzsKK+aUtT4nW3JhcF0nOwor5pS2PidbZ2F0aGVyIHRvZ2V0aGVyXSc7CivmlLc+J1tleGFtaW5lXSc7CivmlLg+J1tkaXN0YW50XSc7CivmlLk+J1tjaGFuZ2VdJzsKK+aUuz4nW2F0dGFja10nOwor5pS+PidbcHV0XSc7CivmlL8+J1tnb3Zlcm5tZW50XSc7CivmlYU+J1thbmNpZW50XSc7CivmlYg+J1tyZXN1bHRdJzsKK+aVjT4nW2V4cHJlc3NdJzsKK+aVjz4nW2Zhc3RdJzsKK+aVkT4nW3NhdmVdJzsKK+aVlT4nW2FuIGltcGVyaWFsIG9yZGVyIG9yIGRlY3JlZV0nOwor5pWWPidbcmFtYmxlXSc7CivmlZc+J1tiZSBkZWZlYXRlZF0nOwor5pWYPidbZXhwcmVzc10nOwor5pWZPidbdGVhY2hdJzsKK+aVnT4nW2JyZWFrXSc7CivmlZ4+J1tyb29teV0nOwor5pWiPidbZGFyZV0nOwor5pWjPidbc2NhdHRlcl0nOwor5pWmPidbZXN0ZWVtXSc7Civmlaw+J1tyZXNwZWN0XSc7CivmlbA+J1tudW1iZXJdJzsKK+aVsj4nW3N0cmlrZV0nOwor5pW0Pidbb3JkZXJseV0nOwor5pW1PidbZW5lbXldJzsKK+aVtz4nW3NwcmVhZF0nOwor5pW4PidbbnVtYmVyXSc7CivmloI+J1tkcmF3IGJhY2tdJzsKK+aWgz4nW2tpbGxdJzsKK+aWhz4nW2xpdGVyYXR1cmVdJzsKK+aWiD4nW2xlYXJuaW5nXSc7Civmlok+J1tldmVuXSc7Civmlow+J1tyZWZpbmVkXSc7Civmlo4+J1t2ZWdldGFyaWFuIGRpZXRdJzsKK+aWkD4nW2dyYWNlZnVsXSc7CivmlpE+J1ttb3R0bGVkXSc7Civmlpc+J1tjaGluZXNlIHBlY2tdJzsKK+aWmT4nW2NvbnNpZGVyXSc7Civmlps+J1tkcnkgbWVhc3VyZSAxMCBvciA1IHRpbWVzIG9mIGRvdV0nOwor5pacPidbc2xhbnRpbmddJzsKK+aWnz4nW3BvdXIgd2luZSBvciB0ZWEgaW50byBjdXBdJzsKK+aWoT4nW3Jldm9sdmVdJzsKK+aWpD4nW2NhdHR5XSc7CivmlqU+J1tzY29sZF0nOwor5panPidbYXhlXSc7Civmlqs+J1tjdXRdJzsKK+aWrD4nW2N1dF0nOwor5patPidbc2V2ZXJdJzsKK+aWrz4nW3RoaXNdJzsKK+aWsD4nW25ld10nOwor5pa3Pidbc2V2ZXJdJzsKK+aWuT4nW3NxdWFyZV0nOwor5pa8PidbaW5dJzsKK+aWvT4nW2dyYW50XSc7Civml4E+J1tzaWRlXSc7Civml4M+J1tzaWxrIGJhbm5lciB3aXRoIGJlbnQgcG9sZV0nOwor5peEPidbYSBraW5kIG9mIGFuY2llbnQgZmxhZ10nOwor5peFPidbdHJpcF0nOwor5peGPidbZmxhZyBvcm5hbWVudF0nOwor5peLPidbcmV2b2x2ZV0nOwor5peMPidbYmFubmVyIG9yIGZsYWcgYWRvcm5lZCB3aXRoIGZlYXRdJzsKK+aXjz4nW2ZhbWlseSBjbGFuXSc7Civml5I+J1tmcmluZ2VzIG9mIHBlYXJscyBvbiBjcm93bnNdJzsKK+aXlz4nW2Jhbm5lcl0nOwor5peZPidbYSBwZW5uYW50XSc7Civml5s+J1thIHBlbm5hbnRdJzsKK+aXoD4nW25lZ2F0aXZlXSc7Civml6E+J1tjaG9rZSBvbiBzb21ldGhpbmcgZWF0ZW5dJzsKK+aXoj4nW2FscmVhZHldJzsKK+aXpT4nW3N1bl0nOwor5pemPidbZGF3bl0nOwor5penPidbb2xkXSc7Civml6g+J1twdXJwb3NlXSc7Civml6k+J1tlYXJseV0nOwor5pesPidbdGVuLWRheSBwZXJpb2RdJzsKK+aXrT4nW3Jpc2luZyBzdW5dJzsKK+aXsT4nW2Ryb3VnaHRdJzsKK+aXuj4nW3Byb3NwZXJdJzsKK+aXuz4nW2hlYXZlbl0nOwor5piCPidbcmlzZV0nOwor5piDPidbYWZ0ZXJub29uXSc7CivmmIY+J1tlbGRlciBicm90aGVyXSc7CivmmIc+J1tyaXNlXSc7CivmmIo+J1tzdW1tZXIgdGltZV0nOwor5piMPidbbGlnaHQgb2Ygc3VuXSc7CivmmI4+J1ticmlnaHRdJzsKK+aYjz4nW2R1c2tdJzsKK+aYkz4nW2NoYW5nZV0nOwor5piUPidbZm9ybWVybHldJzsKK+aYnD4nW3RvIG9wZW4gb3V0XSc7CivmmJ8+J1tzdGFyXSc7CivmmKA+J1twcm9qZWN0XSc7CivmmKU+J1tzcHJpbmddJzsKK+aYpz4nW29ic2N1cmVdJzsKK+aYqD4nW3llc3RlcmRheV0nOwor5pitPidbYnJpZ2h0XSc7CivmmK8+J1tpbmRlZWRdJzsKK+aYtD4nW29uZSBvZiB0aGUgMjggY29uc3RlbGxhdGlvbnNdJzsKK+aYtT4nW2ludGltYXRlXSc7CivmmLY+J1thIGxvbmcgZGF5LiBicmlnaHQuIGV4dGVuZGVkLiBjbGVhcl0nOwor5pi8PidbZGF5dGltZV0nOwor5pi/PidbZXh0ZW5zaXZlXSc7CivmmYE+J1ttb3JuaW5nXSc7CivmmYI+J1t0aW1lXSc7CivmmYM+J1ticmlnaHRdJzsKK+aZhD4nW2JyaWdodF0nOwor5pmJPidbYWR2YW5jZV0nOwor5pmLPidbYWR2YW5jZV0nOwor5pmPPidbcGVhY2VmdWxdJzsKK+aZkj4nW2RyeSBpbiBzdW5dJzsKK+aZnT4nW2RheXRpbWVdJzsKK+aZnj4nW2RyeV0nOwor5pmfPidbY2xlYXJdJzsKK+aZoj4nW2xpZ2h0IG9mIHN0YXJzXSc7CivmmaQ+J1toYXZlIGludGVydmlldyB3aXRoXSc7CivmmaY+J1tkYXJrXSc7Civmmac+J1tkYXlicmVha10nOwor5pmoPidbZWFybHkgbW9ybmluZ10nOwor5pmpPidbbmlnaHRdJzsKK+aZrj4nW3VuaXZlcnNhbF0nOwor5pmvPidbc2NlbmVyeV0nOwor5pmwPidbY2xlYXJdJzsKK+aZtD4nW2NsZWFyIHdlYXRoZXJdJzsKK+aZtj4nW2NyeXN0YWxdJzsKK+aZuj4nW3dpc2RvbV0nOwor5pqBPidbZGF3bl0nOworIyLmmoI+J1t0ZW1wb3JhcnldJyIsCivmmoQ+J1t3YXJtXSc7Civmmoc+J1tsZWlzdXJlXSc7Civmmog+J1toYWxvIGluIHNreV0nOwor5pqJPidbc3Vuc2hpbmVdJzsKK+aajj4nW3N1biBiZWdpbm5pbmcgZGVjbGluZV0nOwor5pqRPidbaG90XSc7CivmmpY+J1t3YXJtXSc7Civmmpc+J1tkYXJrXSc7Civmmpg+J1tyaXNpbmcgc3VuXSc7Civmmp0+J1tkYXJrXSc7CivmmqI+J1tzbW9vdGhseV0nOwor5pqmPidbY2FsZW5kYXJdJzsKK+aaqz4nW3RlbXBvcmFyeV0nOwor5pquPidbZXZlbmluZ10nOwor5pq0PidbdmlvbGVudF0nOwor5pq4PidbYnJpZ2h0XSc7Civmmrk+J1tyaXNlXSc7Civmmrw+J1t0YWtlIGZsZWV0aW5nIGdsYW5jZSBhdF0nOwor5pq+PidbbW9ybmluZyBzdW5dJzsKK+abgT4nW2FuZF0nOwor5puEPidbYnJpZ2h0XSc7Civmm4c+J1tiZWNvbWUgY2xvdWR5XSc7Civmm4k+J1tkYXduXSc7Civmm5Y+J1tvYnNjdXJlXSc7Civmm5k+J1ticmlnaHRdJzsKK+abmj4nW3R3aWxpZ2h0IGp1c3QgYmVmb3JlIHN1biByaXNlc10nOwor5pucPidbZ2xvcmlvdXNdJzsKK+abnT4nW3N1bl0nOwor5pugPidbZXh0ZW5zaXZlXSc7Civmm6Y+J1tzdW5saWdodF0nOwor5pupPidbaW4gYW5jaWVudCB0aW1lc10nOwor5puwPidbc2F5XSc7Civmm7I+J1tjcm9va2VkXSc7Civmm7M+J1t0cmFpbF0nOwor5pu0PidbbW9yZV0nOwor5pu1PidbdHJhaWxdJzsKK+abtz4nW3doeT8gd2hhdD8gd2hlcmU/XSc7Civmm7g+J1tib29rXSc7Civmm7k+J1ttaW5pc3RyeSBvZmZpY2lhbHNdJzsKK+abvD4nW2xvbmddJzsKK+abvT4nW2FscmVhZHldJzsKK+abvj4nW2FscmVhZHldJzsKK+abvz4nW2NoYW5nZV0nOwor5pyAPidbbW9zdF0nOwor5pyDPidbYXNzZW1ibGVdJzsKK+aciD4nW21vb25dJzsKK+aciT4nW2hhdmVdJzsKK+aciz4nW2ZyaWVuZF0nOwor5pyNPidbY2xvdGhlc10nOwor5pyPPidbbGlnaHQgb2YgY3Jlc2NlbnQgbW9vbl0nOwor5pyUPidbZmlyc3QgZGF5IG9mIGx1bmFyIG1vbnRoXSc7CivmnJU+J1twcm9ub3VuIFwiaVwiXSc7CivmnJY+J1tjbGVhcl0nOwor5pyXPidbY2xlYXJdJzsKK+acmz4nW2xvb2sgYXQgb3IgZm9yd2FyZF0nOwor5pydPidbZHluYXN0eV0nOwor5pyePidbZnVsbCB5ZWFyXSc7CivmnJ8+J1twZXJpb2Qgb2YgdGltZV0nOwor5pymPidbY29uZGl0aW9uIG9yIGFwcGVhcmFuY2Ugb2YgbW9vbl0nOwor5pynPidbY29uZGl0aW9uIG9yIGFwcGVhcmFuY2Ugb2YgbW9vbl0nOwor5pyoPidbdHJlZV0nOwor5pyqPidbbm90IHlldF0nOwor5pyrPidbZmluYWxdJzsKK+acrD4nW3Jvb3RdJzsKK+acrT4nW2xldHRlcl0nOwor5pyuPidbc2tpbGxdJzsKK+acsT4nW2Npbm5hYmFyXSc7CivmnLQ+J1tzaW1wbGVdJzsKK+actj4nW2NsdXN0ZXIgb2YgZmxvd2Vyc10nOworIyLmnLY+J1tjbHVzdGVyIG9mIGZsb3dlcnNdJyIsCisjIuactj4nW2NsdXN0ZXIgb2YgZmxvd2Vyc10nIiwKK+acuj4nW2Rlc2tdJzsKK+acvT4nW2RlY2F5ZWRdJzsKK+acvz4nW3N0YWJdJzsKKyMi5p2APidba2lsbF0nIiwKK+adhj4nW3BvbGVdJzsKK+adiT4nW3ZhcmlvdXMgc3BlY2llcyBvZiBwaW5lIGFuZCBmaXJdJzsKK+adjj4nW3BsdW1dJzsKK+adjz4nW2Fwcmljb3RdJzsKK+adkD4nW21hdGVyaWFsXSc7CivmnZE+J1t2aWxsYWdlXSc7CivmnZM+J1toYW5kbGUgb2YgY3VwXSc7CivmnZY+J1tjYW5lXSc7CivmnZk+J1thIHRpbnkgd29vZGVuIHBvc3RdJzsKK+adnD4nW3N0b3BdJzsKK+adnj4nW3dpbGxvd10nOwor5p2fPidbYmluZF0nOwor5p2gPidbbGV2ZXJdJzsKK+adoT4nW2NsYXVzZV0nOwor5p2iPidbd29vZHdvcmtlcl0nOworIyLmnaI+J1t3b29kd29ya2VyXSciLAor5p2kPidbdHlwZSBvZiBvYWtdJzsKK+adpT4nW2NvbWVdJzsKK+adqj4nW3RpcCBvZiB0d2lnXSc7Civmna0+J1tjcm9zcyBzdHJlYW1dJzsKK+adrz4nW2N1cF0nOwor5p2wPidbaGVyb10nOwor5p2xPidbZWFzdF0nOwor5p2yPidbYnJpZ2h0IHN1bl0nOwor5p2zPidbb2JzY3VyZV0nOwor5p21PidbcGVzdGxlXSc7Civmnbc+J1tsb3F1YXRdJzsKK+advD4nW3NodXR0bGUgb2YgbG9vbV0nOwor5p2+PidbcGluZSB0cmVlXSc7Civmnb8+J1twbGFua10nOworIyLmnoU+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+aehz4nW2xvcXVhdF0nOwor5p6JPidbdXNlbGVzc10nOwor5p6LPidbc2FuZGFsd29vZF0nOwor5p6MPidbdmFyaWV0eSBvZiBlbG0gd2l0aCBzbWFsbCBzZWVkc10nOwor5p6QPidbc3BsaXQgd29vZF0nOwor5p6VPidbcGlsbG93XSc7Civmnpc+J1tmb3Jlc3RdJzsKK+aemj4nW3N0YWxrIG9mIHNocnViXSc7Civmnpw+J1tmcnVpdF0nOwor5p6dPidbYnJhbmNoZXNdJzsKKyMi5p6fPidbd29vZCBzdHJlYWtzXSciLAorIyLmnp8+J1t3b29kIHN0cmVha3NdJyIsCivmnqI+J1tkb29yIGhpbmdlXSc7CisjIuaepj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5p6pPidbcGluZSB0cmVlXSc7Civmnq8+J1tkcmllZCBvdXRdJzsKK+aesz4nW3RyaWZvbGlhdGUgb3JhbmdlXSc7CivmnrQ+J1tjYW5lXSc7CivmnrY+J1tyYWNrXSc7Civmnrc+J1tjYW5ndWUgc2NhZmZvbGRdJzsKK+aeuD4nW2tpbmQgb2YgYXNwZW4gZm91bmQgaW4gc2ljaHVhbl0nOwor5p65PidbZHJ1bXN0aWNrXSc7Civmn4E+J1tsYXJnZSB0aWUtYmVhbXNdJzsKK+afhD4nW2hhbmRsZV0nOworIyLmn4Y+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKKyMi5p+IPidbY29udGFpbmVyXSciLAor5p+OPidbY2FseXggb2YgZmxvd2VyXSc7Civmn48+J1tjeXByZXNzXSc7Civmn5A+J1tjZXJ0YWluIHRoaW5nIG9yIHBlcnNvbl0nOwor5p+RPidbdGFuZ2VyaW5lXSc7Civmn5M+J1tkeWVdJzsKK+aflD4nW3NvZnRdJzsKK+afmD4nW2EgdGhvcm55IHRyZWVdJzsKK+afmj4nW3B1bWVsb10nOwor5p+dPidbd2F0Y2htYW4nJ3MgcmF0dGxlXSc7Civmn54+J1tvYWtdJzsKK+afoj4nW3Jvb3RdJzsKK+afpD4nW2hhd3Rob3JuXSc7CisjIuafpz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5p+pPidbY29mZmluIHdoaWNoIGNvbnRhaW5zIGNvcnBzZV0nOwor5p+sPidbbGV0dGVyXSc7Civmn64+J1tmbGF0IHBpZWNlcyBvZiB3b29kXSc7Civmn68+J1theGUtaGFuZGxlXSc7Civmn7E+J1twaWxsYXJdJzsKK+afsz4nW3dpbGxvdyB0cmVlXSc7Civmn7Q+J1tmaXJld29vZF0nOwor5p+1PidbZmVuY2VdJzsKK+afuz4nW2ludmVzdGlnYXRlXSc7Civmn74+J1tzdHJhaWdodCBncmFpbl0nOwor5p+/PidbcGVyc2ltbW9uXSc7CivmoII+J1thIGtpbmQgb2YgZXZlcmdyZWVuIHRyZWVdJzsKK+aggz4nW3R5cGUgb2Ygb2FrXSc7CivmoIQ+J1tnbG9yeV0nOwor5qCTPidbd29vZGVuIHBlZ10nOwor5qCWPidbcGVyY2hdJzsKK+aglz4nW2NoZXN0bnV0IHRyZWVdJzsKK+agnj4nW3B1YmxpY2F0aW9uXSc7CivmoKE+J1tzY2hvb2xdJzsKK+agoj4nW2N5cHJlc3NdJzsKK+agqT4nW3NwZWNpZXMgb2Ygb2FrXSc7CivmoKo+J1tudW1lcmFyeSBhZGp1bmN0IGZvciB0cmVlc10nOwor5qCrPidbZmVuY2VdJzsKK+agsj4nW21hbmdyb3ZlXSc7CivmoLQ+J1tzYW5kYWx3b29kXSc7CivmoLg+J1tzZWVkXSc7CivmoLk+J1tyb290XSc7CivmoLw+J1twYXR0ZXJuXSc7CivmoL0+J1tjdWx0aXZhdGVdJzsKK+ahgD4nW2NoaWNrZW4gcm9vc3RdJzsKK+ahgT4nW2Nyb3NzLWJlYW1zIG9mIHJvb2ZdJzsKK+ahgj4nW2Nhc3NpYSBvciBjaW5uYW1vbl0nOwor5qGDPidbcGVhY2hdJzsKK+ahhj4nW2ZyYW1lXSc7CivmoYg+J1t0YWJsZV0nOworIyLmoY0+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+ahjj4nW2ZldHRlcnNdJzsKK+ahkD4nW25hbWUgYXBwbGllZCB2YXJpb3VzIHRyZWVzXSc7CivmoZE+J1ttdWxiZXJyeSB0cmVlXSc7CivmoZM+J1t2YXJpZXR5IG9mIHRyZWVdJzsKK+ahlD4nW2NoaW5lc2UgYmVsbGZsb3dlcl0nOworIyLmoZk+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+ahnD4nW2NoZXJyeV0nOwor5qGdPidbLi4uLi4uLi4uLi4uLi4uLl0nOworIyLmoZ0+J1suLi4uLi4uLi4uLi4uLi4uXSciLAor5qGjPidbc2hlbGZdJzsKK+ahpz4nW2NoaW5lc2UgY3lwcmVzc10nOwor5qG0PidbcmFmdF0nOwor5qG2PidbcGFpbF0nOwor5qG3PidbcmFmdGVyXSc7CisjIuahvj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5qG/PidbcG9sZV0nOwor5qKBPidbYnJpZGdlXSc7CivmooM+J1thIGNsdWJdJzsKK+aihT4nW3BsdW1zXSc7Civmoo0+J1t0cmVlIG5hbWVdJzsKK+aijz4nW2hhbmRjdWZmc10nOwor5qKTPidbY2F0YWxwYSBvdmF0YV0nOwor5qKUPidbZ2FyZGVuaWFdJzsKK+ailz4nW3N0ZW0gb2YgZmxvd2VyXSc7CisjIuaimD4nW2JhbWJvbyB0dWJlXSciLAor5qKdPidbY2xhdXNlXSc7Civmop8+J1tvd2wgdGh1c10nOwor5qKgPidbc21hbGwgYmVhbSBzdXBwb3J0aW5nIHJhZnRlcnMgYXRdJzsKK+aioj4nW3BvaW50ZWQgdGlwIG9mIHNvbWV0aGluZyBsb25nIGxpa2UgYSBicmFuY2hdJzsKK+aipj4nW2RyZWFtXSc7Civmoqc+J1tzdGVyY3VsaWEgcGxhdGFuaWZvbGlhXSc7Civmoqg+J1twZWFyXSc7Civmoq0+J1t3ZWF2ZXInJ3Mgc2h1dHRsZV0nOwor5qKvPidbbGFkZGVyXSc7CivmorA+J1t3ZWFwb25zXSc7CivmorE+J1tkb29yc2lsbF0nOwor5qKzPidbY29tYl0nOwor5qK1PidbYnVkZGhpc3RdJzsKK+aitj4nW29hcl0nOwor5qK5PidbdGhlIGFyZWNhLW51dF0nOworIyLmork+J1t0aGUgYXJlY2EtbnV0XSciLAor5qK8PidbYmxvY2sgb2Ygd29vZF0nOwor5qOEPidbcmVqZWN0XSc7CisjIuajhj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5qOJPidbY290dG9uXSc7Civmo4o+J1tjaGVzc10nOwor5qOLPidbY2hlc3NdJzsKK+ajjT4nW3N0aWNrXSc7Civmo5I+J1tzdGlja10nOworIyLmo5Q+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+ajlT4nW2hlbXAgcGFsbV0nOwor5qOXPidbZGF0ZSB0cmVlXSc7Civmo5g+J1tqdWp1YmUgdHJlZV0nOwor5qOaPidbdGVudF0nOwor5qOfPidbbWFpbiBiZWFtcyBzdXBwb3J0aW5nIGhvdXNlXSc7Civmo6A+J1tjcmFiIGFwcGxlIHRyZWVdJzsKKyMi5qOhPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmo6M+J1trZXJyaWEgamFwb25pY2EgcGxhbnRdJzsKK+ajpz4nW3dhcmVob3VzZV0nOwor5qOuPidbZm9yZXN0XSc7Civmo68+J1tqdWp1YmUgdHJlZV0nOwor5qOyPidbcGVyY2hdJzsKK+ajuT4nW29hcl0nOwor5qO6PidbY29mZmluXSc7CivmpIA+J1tib3dsXSc7CivmpIE+J1tvdXRlci1jb2ZmaW5dJzsKK+akhD4nW3RvIGdyYWZ0XSc7CivmpIU+J1tjaGFpcl0nOwor5qSIPidbY2VkYXJdJzsKK+akiz4nW2ZydWl0XSc7CivmpIw+J1tpbnN0cnVtZW50XSc7CivmpI0+J1twbGFudF0nOwor5qSOPidbaGFtbWVyXSc7CivmpI8+J1t0aGUgZm9ya2luZyBicmFuY2ggb2YgYSB0cmVlXSc7CivmpJI+J1twZXBwZXJdJzsKKyMi5qSTPidbc3RyaWtlXSciLAorIyLmpJo+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+akmz4nW3R5cGUgb2YgYmlyY2hdJzsKK+aknD4nW2NoZWNrXSc7CisjIuakoT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAorIyLmpKI+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKKyMi5qSjPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCisjIuakpT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAorIyLmpKY+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKKyMi5qSoPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmpKo+J1ttYWNoaWx1cyBuYW5tdV0nOwor5qSwPidbcGFsbSB0cmVlXSc7CivmpLQ+J1twb3BsYXJdJzsKK+aktj4nW3BhbG0gdHJlZV0nOwor5qS5PidbYSBjaG9wcGluZyBib2FyZF0nOwor5qS9PidbYmVhbXNdJzsKK+akvz4nW2ZhdGhlcl0nOwor5qWKPidbd2lsbG93XSc7CivmpZM+J1ttYXBsZSB0cmVlXSc7CivmpZQ+J1t3ZWRnZV0nOwor5qWVPidbb3ZhbC1zaGFwZWRdJzsKK+almT4nW25hbWUgb2YgcGxhbnRdJzsKK+almj4nW25hbWUgb2YgZmV1ZGFsIHN0YXRlXSc7CisjIualnD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5qWdPidbbWVsaWEgamFwb25pY2FdJzsKK+alnj4nW3VzZWQgZm9yIGNleWxvbiBpbiBidWRkaGlzdCB0ZXh0XSc7CivmpaA+J1tuYW1lIG9mIHRyZWVdJzsKK+aloT4nW2VsbSB0cmVlXSc7CivmpaI+J1t0aW5kZXJdJzsKK+alqj4nW3NtYWxsIGRpc2hdJzsKK+alqz4nW29hcl0nOwor5qWtPidbcHJvZmVzc2lvbl0nOwor5qWuPidbbXVsYmVycnldJzsKK+alrz4nW3NoaWVsZF0nOwor5qWzPidbcGx1bXNdJzsKKyMi5qW0PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmpbU+J1tleHRyZW1lXSc7Civmpbc+J1ttb2RlbCBzdHlsZSBvZiBjaGluZXNlIHdyaXRpbmddJzsKK+aluD4nW21hbGxvdHVzIGphcG9uaWN1c10nOwor5qW5PidbY29sdW1uXSc7Civmpbw+J1tidWlsZGluZyBvZiB0d28gb3IgbW9yZSBzdG9yaWVzXSc7Civmpb0+J1toYXBweV0nOworIyLmpb0+J1toYXBweV0nIiwKKyMi5qaAPidbW25vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XV0nIiwKK+amgj4nW2dlbmVyYWxseV0nOworIyLmpok+J1t0eXBlIG9mIGVsbV0nIiwKK+amjj4nW3NtYWxsIGV2ZXJncmVlbiBzaHJ1Yl0nOworIyLmppE+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+amlD4nW2JldGVsLW51dCB0cmVlXSc7CivmppU+J1tiYW55YW4gdHJlZV0nOwor5qabPidbaGF6ZWxudXRdJzsKK+amnD4nW3BsYWNhcmRdJzsKKyMi5qagPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmpqc+J1t0eXBlIG9mIHlld10nOwor5qauPidbZ2xvcnldJzsKK+amsT4nW3JhZnRlcl0nOwor5qayPidbcGlsbGFyXSc7CivmprQ+J1twb21lZ3JhbmF0ZV0nOwor5qa7PidbY290XSc7Civmpr4+J1twaWVjZXMgb2Ygd29vZF0nOwor5qa/PidbYWxkZXJdJzsKK+angT4nW3dpdGhlcl0nOwor5qeDPidbdHJheV0nOwor5qeHPidbdGlwIG9mIGEgdHJlZV0nOwor5qeKPidbc3BlYXJdJzsKK+aniz4nW2ZyYW1lXSc7Civmp4w+J1toYW1tZXJdJzsKK+anjT4nW3NwZWFyXSc7Civmp44+J1tyYWZ0XSc7Civmp5A+J1tsb2N1c3QgdHJlZV0nOwor5qeTPidbbGV2ZXJdJzsKK+anmD4nW3NoYXBlXSc7CisjIuanmD4nW3NoYXBlXSciLAorIyLmp5s+J1t0aHJlc2hvbGRdJyIsCisjIuanmz4nW3RocmVzaG9sZF0nIiwKK+anpz4nW3dvb2RlbiB0YWJsZXRdJzsKK+anqD4nW291dGVyLWNvZmZpbl0nOworIyLmp6s+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+anrT4nW21hcGxlXSc7Civmp7I+J1t0eXBlIG9mIG9ha10nOwor5qe5Pidbc3Bhcl0nOwor5qe7PidbemVsa292YSB0cmVlXSc7Civmp70+J1t0cm91Z2hdJzsKK+anvz4nW2hpYmlzY3VzXSc7CivmqII+J1toYXBweV0nOwor5qiFPidbZmlyIHRyZWVdJzsKK+aoij4nW2EgcmFpbGluZ10nOwor5qiLPidbdHJlZSBuYW1lXSc7CisjIuaojD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAorIyLmqJI+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+aokz4nW2J1aWxkaW5nIG9mIHR3byBvciBtb3JlIHN0b3JpZXNdJzsKKyMi5qiTPidbYnVpbGRpbmcgb2YgdHdvIG9yIG1vcmUgc3Rvcmllc10nIiwKK+aolz4nW2tpbmQgb2YgdHJlZSB3aXRoIHVzZWxlc3MgdGltYmVyXSc7CivmqJk+J1ttYXJrXSc7CivmqJs+J1tiZW5kaW5nIGJyYW5jaGVzXSc7CivmqJ4+J1tkb29yIGhpbmdlXSc7CivmqJ8+J1tjYW1waG9yIHRyZWVdJzsKK+aooT4nW21vZGVsXSc7CisjIuaooj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5qijPidbc2hhcGVdJzsKK+aoqT4nW3Bvd2VyXSc7CivmqKo+J1thY3Jvc3NdJzsKKyMi5qiqPidbYWNyb3NzXSciLAorIyLmqKo+J1thY3Jvc3NdJyIsCivmqLU+J1t3b29kY3V0dGVyXSc7CivmqLY+J1tjXSc7CivmqLg+J1tzaW1wbGVdJzsKK+aouT4nW3RyZWVdJzsKK+aouj4nW3R5cGUgb2YgYmlyY2hdJzsKK+aovT4nW2dvYmxldF0nOwor5qmEPidbb2xpdmVdJzsKK+aphz4nW2Egc2xlZGdlIGZvciB0cmFuc3BvcnRhdGlvbl0nOwor5qmIPidbYmVudCBvciB0d2lzdGVkIHBpZWNlIG9mIHdvb2RdJzsKK+apiz4nW2JyaWRnZV0nOwor5qmYPidbb3JhbmdlXSc7CivmqZk+J1tvcmFuZ2VdJzsKK+apnz4nW21hY2hpbmVdJzsKK+apoT4nW2NoZXN0bnV0IG9ha10nOwor5qmiPidbb3ZhbC1zaGFwZWRdJzsKK+appj4nW3RyZWVdJzsKKyMi5qmxPidbY2FiaW5ldF0nIiwKKyMi5qm1Pidbd29vZCBwbGFjZWQgdW5kZXIgcm9vZiB0aWxlc10nIiwKKyMi5qm/PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmqoA+J1tzYW5kYWx3b29kXSc7CivmqoQ+J1tjYWxsIGFybXNdJzsKK+aqjT4nW2lsZXhdJzsKK+aqjj4nW3NtYWxsIHJlZCBhcHBsZV0nOwor5qqQPidbZWF2ZXMgb2YgaG91c2VdJzsKK+aqlz4nW3RyZWVdJzsKK+aqnD4nW2NoaW5lc2UgY3lwcmVzc10nOwor5qqgPidbc3RhbmQgZm9yIGxhbXBdJzsKK+aqoj4nW2NoZWNrXSc7CivmqqM+J1ttYXN0XSc7Civmqqo+J1tjaGVzdG51dC1sZWF2ZWQgb2FrXSc7Civmqqw+J1t0eXBlIG9mIGxvY3VzdCBvcmFjYWNpYV0nOwor5qquPidbYmxvY2sgb2Ygd29vZF0nOwor5qqzPidbYmV0ZWxudXRdJzsKK+aquD4nW2xlbW9uXSc7Civmqrs+J1t0aHJlc2hvbGRdJzsKKyMi5quBPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmq4I+J1tvYXJdJzsKK+argz4nW2N1cGJvYXJkXSc7CisjIuarkT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor5quTPidbb2FyXSc7Civmq5o+J1twYWxtXSc7Civmq5s+J1tjb21iIG91dF0nOwor5quePidbY2l0cnVzXSc7Civmq58+J1tjaGVzdG51dC1sZWF2ZWQgb2FrXSc7Civmq6g+J1tzdXBwb3J0aW5nIGJsb2NrXSc7Civmq6o+J1t0eXBlIG9mIG9ha10nOwor5qu6PidbY2FydmVkIG9yIHBhdHRlcm5lZCB3aW5kb3cgc2lsbHNdJzsKK+aruz4nW2NoZXJyeV0nOwor5qyEPidbcmFpbGluZ10nOwor5qyFPidbemVsa292YV0nOwor5qyKPidbcG93ZXJdJzsKK+askj4nW25hbWUgb2YgdHJlZV0nOwor5qyWPidbb2xpdmVdJzsKK+asnT4nW2x1eHVyaWFudF0nOworIyLmrJ4+J1t0aGUgbGF0dGljZSBvZiBhIHdpbmRvdyBhIHNpbGxdJyIsCivmrKA+J1tvd2VdJzsKK+asoT4nW29yZGVyXSc7CivmrKM+J1toYXBweV0nOwor5qynPidbdHJhbnNsaXQuOiBldXJvcGVdJzsKK+assj4nW2Rlc2lyZV0nOwor5qy3Pidbc29iXSc7CivmrLg+J1tzaWdoc10nOwor5qy5PidbZmllcmNlIGRvZ10nOwor5qy6PidbY2hlYXRdJzsKK+asvT4nW3Jlc3BlY3RdJzsKK+asvj4nW2l0ZW1dJzsKK+atgz4nW3NtZWFyIG9uZScncyBtb3V0aCB3aXRoIGJsb29kIG9mIGEgdmljdGltIHdoZW4gdGFraW5nIGFuIG9hdGhdJzsKK+athz4nW3Jlc3RdJzsKK+atiT4nW2RlZmljaWVudF0nOwor5q2MPidbc29uZ10nOwor5q2OPidbc2lnaF0nOwor5q2QPidbdHJhbnNsaXQuOiBldXJvcGVdJzsKK+atkz4nW2hhcHB5XSc7CivmrZQ+J1tibG93IHRocm91Z2ggbm9zZV0nOwor5q2ZPidbdG8gc3Vja10nOwor5q2bPidbZHJhdyBiYWNrXSc7CivmrZ8+J1tmaW5hbCBwYXJ0aWNsZSB1c2VkIGV4cHJlc3MgcXVlc10nOwor5q2hPidbaGFwcHldJzsKK+atoj4nW3N0b3BdJzsKK+atoz4nW3JpZ2h0XSc7CivmraQ+J1t0aGlzXSc7CivmraY+J1ttaWxpdGFyeV0nOwor5q2pPidbc3RlcF0nOwor5q2qPidbc2xhbnRdJzsKK+atrz4nW3RlZXRoXSc7CivmrbM+J1t5ZWFyXSc7CivmrbQ+J1t0YWtlIHBsYWNlXSc7Civmrbg+J1tyZXR1cm5dJzsKK+atuT4nW2JhZF0nOwor5q27PidbZGllXSc7Civmrb8+J1tkaWVdJzsKK+augD4nW2RpZSB5b3VuZ10nOwor5q6DPidbbWlzZm9ydHVuZV0nOwor5q6EPidbdG8gZW5kXSc7CivmroY+J1tkYW5nZXJvdXNdJzsKK+auiT4nW2RpZSBmb3IgY2F1c2VdJzsKK+auij4nW2RpZmZlcmVudF0nOwor5q6LPidbaW5qdXJlXSc7Civmro0+J1t0byBzdGFydmUgdG8gZGVhdGhdJzsKK+aulT4nW1tub3QgZm91bmQgaW4gZGljdGlvbmFyeV1dJzsKK+aulj4nW2JyZWVkXSc7Civmrpg+J1tpbmp1cmVdJzsKK+aunj4nW2RpZV0nOwor5q6kPidbZGllIHlvdW5nXSc7Civmrqo+J1tkaWVdJzsKK+auqz4nW3V0bW9zdF0nOwor5q6vPidbZW5jb2ZmaW5dJzsKK+ausT4nW2FubmloaWxhdGVdJzsKK+ausj4nW2FubmloaWxhdGVdJzsKK+ausz4nW25hbWUgb2Ygb2xkIHdlYXBvbl0nOwor5q60PidbYmVhdF0nOwor5q61Pidbc2VjdGlvbl0nOwor5q63PidbbWFueV0nOwor5q66Pidba2lsbF0nOwor5q67PidbY2FzaW5nXSc7Civmrrw+J1tjYXNpbmddJzsKK+auvz4nW2hhbGxdJzsKK+avgD4nW2Rlc3Ryb3ldJzsKK+avhT4nW3Jlc29sdXRlXSc7Civmr4Y+J1tiZWF0XSc7Civmr4s+J1tkbyBub3RdJzsKK+avjT4nW21vdGhlcl0nOwor5q+OPidbZXZlcnldJzsKK+avkj4nW3BvaXNvbl0nOwor5q+TPidbZ2l2ZSBiaXJ0aCB0b10nOwor5q+UPidbY29tcGFyZV0nOwor5q+YPidbaGVscF0nOwor5q+bPidbaGFpcl0nOworIyLmr58+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+avqz4nW2ZpbmUgaGFpcl0nOwor5q+sPidbYmFsbF0nOwor5q+vPidbcnVnXSc7Civmr7M+J1tmaW5lIGhhaXIgb3IgZnVyIG9uIGFuaW1hbHNdJzsKK+awiD4nW2ZlbHRdJzsKK+awjz4nW2NsYW5dJzsKK+awkT4nW3Blb3BsZV0nOwor5rCTPidbcGVvcGxlXSc7CivmsJQ+J1tzdGVhbV0nOwor5rCXPidbYWlyXSc7CivmsJs+J1tnYXNdJzsKK+awoz4nW2Fpcl0nOwor5rCkPidbaGFuZ2luZyBmb2ddJzsKK+awtD4nW3dhdGVyXSc7CivmsLc+J1tpY2VdJzsKK+awuD4nW2xvbmddJzsKK+awvj4nW292ZXJmbG93XSc7CivmsYA+J1tzYW5kYmFyXSc7CivmsYE+J1tqdWljZV0nOwor5rGCPidbc2Vla10nOwor5rGOPidbZmxvYXRdJzsKK+axkD4nW25pZ2h0IHRpZGVzXSc7CivmsZU+J1tiYXNrZXQgZm9yIGNhdGNoaW5nIGZpc2hdJzsKK+axlz4nW3BlcnNwaXJhdGlvbl0nOwor5rGaPidbZmlsdGh5XSc7CivmsZ0+J1t5b3VdJzsKK+axnj4nW2VsZW1lbnQgbWVyY3VyeV0nOwor5rGfPidbbGFyZ2Ugcml2ZXJdJzsKK+axoD4nW3Bvb2xdJzsKKyMi5rGiPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmsag+J1tNaShsdW8pIHJpdmVyIGluIGh1bmFuIHByb3ZpbmNlIHdoZXJlIFF1IFl1YW4gZHJvd25lZCBoaW1zZWxmXSc7Civmsao+J1t2YXN0XSc7CivmsbA+J1tleGNlc3NpdmVdJzsKK+axsj4nW2RyYXcgd2F0ZXIgZnJvbSB3ZWxsXSc7CisjIuaxsj4nW2RyYXcgd2F0ZXIgZnJvbSB3ZWxsXSciLAor5rG6PidbZGVjaWRlXSc7Civmsb0+J1tzdGVhbV0nOwor5rG+Pidbcml2ZXIgaW4gc2hhbnhpIHByb3ZpbmNlXSc7CivmsoE+J1tzb2FrIGludG9dJzsKK+aygj4nW3JpdmVyIGluIHNvdXRoZWFzdCBzaGFuZG9uZyBmbG93XSc7CivmsoM+J1t3YXRlcl0nOwor5rKIPidbc2lua10nOwor5rKMPidbY2hhb3RpY10nOwor5rKNPidbZnJlZXppbmddJzsKK+aykD4nW2JhdGhlXSc7CivmspI+J1tub3RdJzsKK+aykz4nW2Nvbm5lY3RlZF0nOwor5rKWPidbcG91cl0nOwor5rKZPidbc2FuZF0nOwor5rKaPidbaXNsZXQgaW4gc3RyZWFtXSc7Civmsps+J1thYnVuZGFudF0nOwor5rKhPidbbm90XSc7CivmsqI+J1ttYXJzaF0nOwor5rKrPidbZnJvdGhdJzsKK+ayrj4nW3N0b3BdJzsKK+aysT4nW3JpdmVyc10nOwor5rKzPidbcml2ZXJdJzsKK+ayuD4nW2JvaWxdJzsKK+ayuT4nW29pbF0nOwor5rK6PidbdHVyYnVsZW50XSc7Civmsrs+J1tnb3Zlcm5dJzsKK+ayvD4nW2xha2VdJzsKK+ayvT4nW2J1eSBhbmQgc2VsbF0nOwor5rK+PidbbW9pc3Rlbl0nOwor5rK/PidbZm9sbG93IGNvdXJzZV0nOwor5rOBPidbY29uZGl0aW9uXSc7Civms4Q+J1tsZWFrXSc7Civms4U+J1tzd2ltXSc7Civms4k+J1tzcHJpbmddJzsKK+azij4nW2FuY2hvciB2ZXNzZWxdJzsKK+azjD4nW3RvIHNlZXAgb3V0XSc7Civms5M+J1tjbGVhcl0nOwor5rOVPidbbGF3XSc7Civms5c+J1ttdWNvdXNdJzsKK+azmT4nW3JvYXJdJzsKK+azmz4nW2RyaWZ0XSc7Civms50+J1tnbyB1cHN0cmVhbV0nOwor5rOhPidbYnViYmxlc10nOwor5rOiPidbd2F2ZXNdJzsKK+azoz4nW2NyeV0nOwor5rOlPidbbXVkXSc7Civms6g+J1tjb25jZW50cmF0ZV0nOwor5rOqPidbdGVhcnNdJzsKK+azrz4nW2Rlc3Ryb3ldJzsKK+azsD4nW2dyZWF0XSc7Civms7E+J1tncmVhdF0nOwor5rOzPidbZGl2ZV0nOwor5rSLPidbb2NlYW5dJzsKK+a0jD4nW2NsZWFyXSc7CivmtJI+J1tzcHJpbmtsZV0nOwor5rSXPidbd2FzaF0nOwor5rSZPidbbmFtZSBvZiBhIHJpdmVyIGluIHNoYW5kb25nXSc7CivmtJs+J1tyaXZlciBpbiBzaGFhbnhpIHByb3ZpbmNlXSc7CivmtJ4+J1tjYXZlXSc7CivmtJ8+J1tzbml2ZWxdJzsKK+a0pT4nW2ZlcnJ5XSc7CivmtKk+J1tsZWFrXSc7CivmtKo+J1t2YXN0XSc7CivmtKs+J1t0byBkaXRjaF0nOwor5rSyPidbY29udGluZW50XSc7CivmtLM+J1tkYW1wXSc7CivmtLU+J1t0cnVlXSc7CivmtLY+J1t0aGUgcnVzaCBvZiB3YXRlcl0nOwor5rS4Pidbc3BhcmtsZV0nOwor5rS7PidbbGl2ZV0nOwor5rS9Pidbc3ByZWFkXSc7CivmtL4+J1tzY2hvb2wgb2YgdGhvdWdodF0nOwor5rWBPidbZmxvd10nOwor5rWEPidbcHVyZV0nOwor5rWFPidbc2hhbGxvd10nOwor5rWZPidbemhlamlhbmcgcHJvdmluY2VdJzsKK+a1mj4nW2RyZWRnZV0nOwor5rWcPidbY3JlZWtdJzsKK+a1oz4nW3RvIHdhc2hdJzsKK+a1pD4nW2JlYXRpbmcgb2Ygb2NlYW5dJzsKK+a1pj4nW2Jhbmsgb2Ygcml2ZXJdJzsKK+a1qT4nW2dyZWF0XSc7Civmtao+J1t3YXZlXSc7Civmtaw+J1tuYXV0aWNhbCBtaWxlXSc7Civmta4+J1tmbG9hdF0nOwor5rW0PidbYmF0aGVdJzsKK+a1tz4nW3NlYV0nOwor5rW4Pidbc29ha10nOwor5rW5Pidbc2F0dXJhdGVdJzsKK+a2hT4nW2JsYWNrZW5dJzsKK+a2iD4nW3ZhbmlzaF0nOwor5raMPidbc3VyZ2UgdXBdJzsKK+a2jj4nW3NhbGl2YV0nOwor5raTPidbYnJvb2tdJzsKK+a2lT4nW3RlYXJdJzsKK+a2mT4nW3RlYXJzXSc7Civmtps+J1tsYXJnZSB3YXZlc10nOwor5racPidbZGl0Y2hdJzsKK+a2rz4nW3Nob3JlXSc7CivmtrI+J1tzYXBdJzsKK+a2tT4nW3NvYWtdJzsKK+a2uD4nW2RyaWVkIHVwXSc7Civmtrw+J1tjb29sXSc7Civmt4A+J1tzaGFsbG93IHdhdGVyXSc7Civmt4U+J1t3YXRlciB1c2VkIHdhc2ggcmljZV0nOwor5reGPidbY29uZnVzZWRdJzsKK+a3hz4nW3JpdmVyIGluIGhlbmFuIHByb3ZpbmNlXSc7Civmt4s+J1tkcmlwXSc7Civmt4w+J1t0cmlja2xlXSc7Civmt5E+J1tnb29kXSc7Civmt5I+J1tiaXR0ZXIgY29sZF0nOworIyLmt5U+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+a3mD4nW3dhc2ggaW4gc2lldmVdJzsKK+a3mT4nW2d1cmdsaW5nIHNvdW5kIG9mIHdhdGVyXSc7Civmt54+J1tuYW1lIG9mIGEgcml2ZXIgaW4gSmlhbmdzdV0nOwor5rehPidbd2Vha10nOwor5rekPidbbXVkXSc7Civmt6Y+J1tyaXZlciBpbiBqaWFuZ3hpIHByb3ZpbmNlOiB3YXRlcl0nOwor5reoPidbcHVyZV0nOwor5reqPidbYmUgbG9zdF0nOwor5rerPidbb2JzY2VuZV0nOwor5resPidbdGVtcGVyXSc7Civmt64+J1tyaXZlciBpbiBhbmh1aSBwcm92aW5jZV0nOwor5rexPidbZGVlcF0nOwor5rezPidbY3lhbm9nZW5dJzsKK+a3tT4nW2d1bGZdJzsKK+a3tz4nW21peF0nOwor5re5PidbZHJvd25dJzsKK+a3uj4nW3NoYWxsb3ddJzsKK+a3uz4nW2FwcGVuZF0nOwor5riFPidbY2xlYXJdJzsKK+a4hz4nW3RoaXJzdHldJzsKK+a4iD4nW2hlbHBdJzsKK+a4iT4nW2ZvcmQgc3RyZWFtXSc7CivmuIo+J1tzdXJnZSB1cF0nOwor5riLPidbYXN0cmluZ2VudF0nOwor5riTPidbbW91bnRhaW4gc3RyZWFtXSc7CivmuJU+J1tzdXJnZSB1cF0nOwor5riZPidbc2NhdHRlcl0nOwor5riaPidbc21hbGwgc2FuZCBiYW5rXSc7CivmuJs+J1tkZWNyZWFzZV0nOwor5ridPidbY2hhbmdlXSc7CivmuJ8+J1sob2Ygd2F0ZXIpIG5vdCBmbG93aW5nXSc7CivmuKA+J1tkaXRjaF0nOwor5rihPidbY3Jvc3NdJzsKK+a4oz4nW3JlZnVzZV0nOwor5rikPidbc3dlbGxpbmddJzsKK+a4pT4nW21vaXN0ZW5dJzsKK+a4pj4nW3N3aXJsXSc7CivmuKk+J1tsdWtld2FybV0nOwor5rirPidbYmVhdGluZyBvZiBvY2Vhbl0nOwor5risPidbbWVhc3VyZV0nOwor5ritPidbbmFtZSBvZiBhIHJpdmVyIGluIHNoYWFueGldJzsKK+a4rj4nW3JpdmVyIGluIHNoYW5kb25nIHByb3ZpbmNlXSc7CivmuK8+J1twb3J0XSc7CivmuLg+J1tzd2ltXSc7CivmuLo+J1tlbmRsZXNzbHkgbG9uZ10nOwor5ri+PidbbXVkZHldJzsKK+a5gz4nW3NvdW5kIG9mIHdhdmVzXSc7CivmuYo+J1twaWVjZSB0b2dldGhlcl0nOwor5rmNPidbcmFwaWQgd2F0ZXIgY3VycmVudF0nOwor5rmOPidbZmx1c2hlZCB3aXRoIGRyaW5rXSc7CivmuZY+J1tsYWtlXSc7CivmuZg+J1todW5hbiBwcm92aW5jZV0nOwor5rmbPidbZGVlcF0nOwor5rmfPidbcml2ZXIgaW4gcWluZ2hhaSBwcm92aW5jZV0nOwor5rmnPidbd2VsbCB1cF0nOwor5rmrPidbYSBzbWFsbCBwb25kXSc7Civmua4+J1tidXJ5XSc7Civmua8+J1tob3Qgd2F0ZXJdJzsKK+a5sj4nW2Zsb3ddJzsKKyMi5rmzPidbW25vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XV0nIiwKK+a5vj4nW2JheV0nOwor5rm/Pidbd2V0XSc7CisjIua5vz4nW3dldF0nIiwKKyMi5rm/Pidbd2V0XSciLAor5rqMPidbcG91cl0nOwor5rqPPidbcG9vbF0nOwor5rqQPidbc3ByaW5nXSc7CivmupY+J1tydWxlXSc7Civmupg+J1thYnJ1cHRseV0nOwor5rqcPidbc2xpZGVdJzsKK+a6nT4nW2RpdGNoXSc7Civmup8+J1tkcml6emxpbmcgcmFpbl0nOwor5rqiPidbb3ZlcmZsb3ddJzsKK+a6pT4nW2JpZ10nOwor5rqqPidbbW91bnRhaW4gc3RyZWFtXSc7Civmuq8+J1tnbyB1cHN0cmVhbV0nOwor5rqyPidbdXJpbmF0ZV0nOwor5rq2PidbbWVsdF0nOwor5rq3PidbcHJpdnldJzsKK+a6uj4nW2Ryb3duXSc7Civmur0+J1ttb2lzdF0nOwor5ruCPidbdG9ycmVudGlhbF0nOwor5ruEPidbYmx1ZV0nOwor5ruFPidbZXh0aW5ndWlzaF0nOwor5ruJPidbZGVlcF0nOwor5ruLPidbZ3Jvd10nOwor5ruMPidbd2FzaF0nOwor5ruRPidbc2xpcF0nOwor5ruTPidbc2VkaW1lbnRdJzsKK+a7lD4nW292ZXJmbG93XSc7Civmu5U+J1s8YXJjaD4gY291bnR5IGluIHNoYW5kb25nIHByb3ZpbmNlXSc7Civmu50+J1tyYWluaW5nXSc7Civmu54+J1tibG9jayB1cF0nOwor5rusPidbc2hhbmdoYWldJzsKK+a7rz4nW2Jsb2NrIHVwXSc7Civmu7I+J1tzb2FrIHRocm91Z2hdJzsKK+a7tD4nW2RyaXBdJzsKK+a7tz4nW3RoaWNrIGdyYXZ5XSc7Civmu7g+J1tyaXZlcmJhbmtdJzsKK+a7vj4nW3R1cm5dJzsKK+a7vz4nW2ZpbGxdJzsKK+a8gT4nW3RvIGZpc2hdJzsKK+a8gj4nW2Zsb2F0XSc7CivmvIY+J1t2YXJuaXNoXSc7CivmvIk+J1tmaWx0ZXJdJzsKK+a8jz4nW2xlYWtdJzsKK+a8kT4nW3dhdGVyXSc7CivmvJM+J1tyaXZlciBpbiBndWFuZ3hpIHByb3ZpbmNlXSc7CivmvJQ+J1twZXJmb3JtXSc7CivmvJU+J1t0cmFuc3BvcnQgYnkgd2F0ZXJdJzsKK+a8oD4nW2Rlc2VydF0nOwor5ryiPidbY2hpbmVzZSBwZW9wbGVdJzsKK+a8oz4nW2Zsb3dpbmcgd2F0ZXJdJzsKK+a8qz4nW292ZXJmbG93IG9mIHdhdGVyXSc7CivmvKw+J1tzb2FrXSc7CivmvLE+J1tnYXJnbGVdJzsKK+a8sj4nW3Jpc2UgaW4gcHJpY2VdJzsKK+a8uD4nW2dyYWR1YWxseV0nOwor5ry+Pidbb3ZlcmZsb3ddJzsKK+a8vz4nW2FueSB0aGljayBmbHVpZF0nOwor5r2BPidbcml2ZXIgaW4gYW5odWldJzsKK+a9hT4nW3BvdXJdJzsKK+a9lD4nW2NsZWFuXSc7CivmvZg+J1tzdXJuYW1lXSc7CivmvZs+J1toaWRlXSc7CivmvZw+J1toaWRlXSc7CivmvZ8+J1tsYW5kIGludW5kYXRlZCB3aXRoIHNhbHQgZnJvbSB0aV0nOwor5r2kPidbc29mdF0nOwor5r2mPidbdG8gZmxvb2RdJzsKK+a9rT4nW2RlZXAgcG9vbF0nOwor5r2uPidbdGlkZV0nOwor5r2vPidbc3RlZXAgYmFuayBieSBzdHJlYW1dJzsKK+a9sD4nW2Zsb29kaW5nIHJpdmVyXSc7CivmvbQ+J1twb25kXSc7Civmvbg+J1t3ZWVwXSc7Civmvbo+J1tzb3VuZCBvZiBmbG93aW5nIHdhdGVyXSc7Civmvbw+J1toaWdoXSc7CivmvoA+J1thc3RyaW5nZW50XSc7CivmvoE+J1thc3RyaW5nZW50XSc7CivmvoI+J1tjbGVhciBhbmQgc3RpbGwgd2F0ZXJdJzsKK+a+hD4nW3B1cmlmeSB3YXRlciBieSBhbGxvd2luZyBzZWRpbWVuXSc7CivmvoY+J1tzcHJheV0nOwor5r6OPidbc3BsYXR0ZXJdJzsKK+a+kT4nW3NsaWRlXSc7Civmvpc+J1ticm9va10nOwor5r6hPidbd2FzaF0nOwor5r6jPidbY2xlYW5zZV0nOwor5r6kPidbbWFyc2hdJzsKKyMi5r6qPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivmvrE+J1tzZWRpbWVudF0nOwor5r6zPidbaW5sZXRdJzsKK+a+uT4nW2NhbG1dJzsKK+a/gD4nW2Fyb3VzZV0nOwor5r+BPidbbXVkZHldJzsKK+a/gj4nW3dhdGVyZmFsbF0nOwor5r+DPidbdGhpY2tdJzsKK+a/hj4nW3JpdmVyIGJhbmtdJzsKK+a/lD4nW21hbnldJzsKK+a/lT4nW3dldF0nOwor5r+YPidbbXVkXSc7Civmv5s+J1tkcml6emxpbmddJzsKK+a/nz4nW2hlbHBdJzsKK+a/oD4nW21vYXRdJzsKK+a/oT4nW2ltbWVyc2VdJzsKK+a/pD4nW2xhcmdlIHdhdmVzXSc7Civmv6s+J1tmbG9vZF0nOwor5r+sPidbZHJlZGdlXSc7Civmv64+J1tjb3VudHkgaW4gSGVuYW4gcHJvdmluY2VdJzsKK+a/rz4nW3dhc2ggb3V0XSc7Civmv7E+J1tiZWFjaF0nOwor5r+zPidbaGlkZV0nOwor5r+2PidbYnJvYWRdJzsKK+a/uj4nW3Nwcmlua2xlXSc7Civmv74+J1tzdHJhaW4gb3V0XSc7CivngIE+J1t3YXZlc10nOwor54CJPidbZHJhaW4gb2ZmXSc7CivngIs+J1tqdWljZV0nOwor54CPPidbY2xlYXJdJzsKK+eAkT4nW3dhdGVyZmFsbF0nOwor54CVPidbYXBwcm9hY2hdJzsKK+eAmD4nW3JpdmVyIGluIGppYW5neGkgcHJvdmluY2VdJzsKK+eAmj4nW3Zhc3RdJzsKK+eAmz4nW3NlYV0nOwor54CdPidbdHJpY2tsZV0nOwor54CePidbcG9vbCBpbiBhIHJpdmVyXSc7CivngJ8+J1tzb3VuZCBvZiBiZWF0aW5nIHdpbmQgYW5kIHJhaW5dJzsKK+eApj4nW3BvbmRdJzsKK+eApz4nW3JhaW5pbmddJzsKK+eArD4nW3N3aWZ0IGN1cnJlbnRdJzsKK+eAsD4nW292ZXJmbG93XSc7CivngLI+J1t3YXZlc10nOwor54C+Pidbb3ZlcmZsb3dpbmddJzsKK+eBjD4nW3BvdXJdJzsKK+eBkT4nW3Nwcmlua2xlXSc7CivngZg+J1tiYW5rXSc7CivngaM+J1tiYXldJzsKK+eBqz4nW2ZpcmVdJzsKK+eBrz4nW2xhbnRlcm5dJzsKK+eBsD4nW2FzaGVzXSc7Civngbg+J1tjYXV0ZXJpemUgd2l0aCBtb3hhXSc7Civngbw+J1tidXJuXSc7Civngb0+J1tjYWxhbWl0eV0nOwor54KJPidbZmlyZXBsYWNlXSc7Civngoo+J1tjb29rXSc7Civngo4+J1tmbGFtZV0nOwor54KSPidbZnJ5XSc7Civngpk+J1tyb2FzdF0nOwor54KsPidbdG9yY2hdJzsKK+eCrT4nW2NoYXJjb2FsXSc7Civngq4+J1tsYXJnZSBndW5dJzsKK+eCrz4nW2JyaWdodF0nOwor54KzPidbYnJpZ2h0XSc7Civngrg+J1tmcnkgaW4gb2lsXSc7Civngrk+J1tkb3RdJzsKK+eCuj4nW2RvXSc7Civng4g+J1tmaWVyeV0nOwor54OLPidbYm9hc3RdJzsKK+eDjz4nW2Nyb3ddJzsKK+eDmT4nW2JyYW5kXSc7Civng50+J1tyaXNlXSc7Civng58+J1tzbW9rZV0nOwor54OxPidbYnJpZ2h0XSc7Civng7k+J1tib2lsXSc7Civng70+J1tzaWduYWwgZmlyZV0nOwor54SJPidbdGhlcmV1cG9uXSc7CivnhJQ+J1tmbGFtZV0nOwor54SZPidbZHJ5IG92ZXIgc2xvdyBmaXJlXSc7CivnhJo+J1tidXJuXSc7CivnhJw+J1tmaXJlXSc7CivnhKE+J1tuZWdhdGl2ZV0nOwor54SmPidbYnVybmVkXSc7CivnhLY+J1t5ZXNdJzsKK+eEvD4nW2J1cm5dJzsKK+eFiT4nW3NtZWx0XSc7CivnhYw+J1ticmlnaHRdJzsKK+eFjj4nW2ZyeSBpbiBmYXQgb3Igb2lsXSc7CivnhZU+J1ticmlnaHRdJzsKK+eFlj4nW3dhcm1dJzsKK+eFmT4nW3Ntb2tlXSc7CivnhaI+J1thbG9uZV0nOwor54WkPidbY29hbF0nOwor54WlPidbc2hpbmluZ10nOwor54WmPidba2luZF0nOwor54WnPidbc2hpbmVdJzsKK+eFqT4nW2JvdGhlcl0nOwor54WsPidbcm9hc3RdJzsKK+eFrj4nW2Nvb2tdJzsKK+eFvT4nW3N0aXIgdXBdJzsKK+eGhD4nW3B1dCBvdXRdJzsKK+eGiD4nW2JyaWdodF0nOwor54aKPidbYmVhcl0nOwor54aPPidbc21va2VdJzsKK+eGlD4nW21lbHRdJzsKKyMi54aVPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnhpk+J1ticmlnaHRdJzsKK+eGnz4nW3dlbGwgY29va2VkXSc7Civnhqg+J1tpcm9uXSc7Civnhqw+J1tjb29rIGRvd25dJzsKK+eGsT4nW2hvdF0nOwor54a5PidbZGltIGxpZ2h0XSc7Civnhr4+J1tidXJuaW5nIGhvdF0nOwor54eDPidbYnVybl0nOwor54eIPidbbGFudGVybl0nOwor54eJPidbaGVhdCB3aXRoIGZpcmVdJzsKK+eHjj4nW2J1cm5dJzsKK+eHkD4nW3Bob3NwaG9ydXNdJzsKK+eHkj4nW2J1cm5dJzsKK+eHlD4nW3RvIHJvYXN0XSc7Civnh5U+J1tzd2FsbG93IChiaXJkKV0nOworIyLnh5c+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+eHnz4nW2VuY2FtcG1lbnRdJzsKK+eHoD4nW3dhcm1dJzsKK+eHpT4nW2RyeV0nOwor54emPidbdml2aWRdJzsKK+eHpz4nW2ZsaW50c3RvbmVdJzsKK+eHrD4nW2J1cm4gZG93bl0nOwor54etPidbY2FuZGxlXSc7Civnh64+J1toYXJtb25pemVdJzsKKyMi54e1PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnh7k+J1tmaXJlXSc7Civnh7s+J1tzbW9rZV0nOwor54e8PidbY2luZGVyc10nOwor54e/Pidbc2hpbmVdJzsKK+eIhj4nW2NyYWNrbGVdJzsKK+eIjT4nW3NoaW5lXSc7CivniJA+J1tmaXJlcGxhY2VdJzsKK+eImz4nW3JvdHRlbl0nOwor54ioPidbb3Zlbl0nOwor54iqPidbY2xhd10nOwor54isPidbY3Jhd2xdJzsKK+eIrT4nW2Rpc3B1dGVdJzsKK+eIsD4nW2xlYWQgb24gdG9dJzsKK+eIsj4nW2RvXSc7CivniLU+J1tmZXVkYWwgdGl0bGUgb3IgcmFua10nOwor54i2PidbZmF0aGVyXSc7CivniLo+J1tmYXRoZXJdJzsKK+eIuz4nW2RpYWdyYW1zIGZvciBkaXZpbmF0aW9uXSc7CivniLw+J1tjaG9wcGluZyBib2FyZCBvciBibG9ja10nOwor54i9PidbaGFwcHldJzsKK+eIvj4nW3lvdV0nOwor54i/PidbaGFsZiBvZiB0cmVlIHRydW5rXSc7CivniYA+J1tiZWRdJzsKK+eJhj4nW3dhbGxdJzsKK+eJhz4nW3NsaWNlXSc7CivniYg+J1twcmludGluZyBibG9ja3NdJzsKK+eJiz4nW21lbW9yYW5kdW1dJzsKK+eJjD4nW3NpZ25ib2FyZF0nOwor54mSPidbZG9jdW1lbnRzXSc7CivniZg+J1t3cml0aW5nIHRhYmxldF0nOwor54mZPidbdG9vdGhdJzsKK+eJmz4nW2Nvd10nOwor54mdPidbZmVtYWxlIG9mIHNwZWNpZXNdJzsKK+eJnz4nW21ha2VdJzsKK+eJoT4nW21hbGUgb2YgYW5pbWFsc10nOwor54miPidbcHJpc29uXSc7Civniac+J1t0ZW5kIGNhdHRsZV0nOwor54mpPidbdGhpbmddJzsKK+eJsj4nW3NhY3JpZmljaWFsIGFuaW1hbF0nOwor54m0PidbZ29yZV0nOwor54m5Pidbc3BlY2lhbF0nOwor54m9PidbZHJhZ10nOwor54m+PidbdG8gb3Bwb3NlXSc7CivnioA+J1tyaGlub2Nlcm9zXSc7CivnioE+J1twbG93XSc7CivnioI+J1twbG93XSc7Civnioc+J1tydW4gZmFzdF0nOwor54qSPidbZW50ZXJ0YWluIHZpY3RvcmlvdXMgc29sZGllcnNdJzsKK+eKlj4nW2JyaW5kbGVkIG94XSc7CivniqA+J1tzYWNyaWZpY2VdJzsKK+eKoj4nW2NhbGZdJzsKK+eKpz4nW3NhY3JpZmljZV0nOwor54qsPidbZG9nXSc7Civniq8+J1tjb21taXQgY3JpbWVdJzsKK+eKsj4nW3dvbGZdJzsKK+eKtj4nW2Zvcm1dJzsKK+eKuT4nW2xpa2VdJzsKK+eLgj4nW2luc2FuZV0nOwor54uDPidbdG8gY292ZXRdJzsKK+eLhD4nW3RyaWJlIGZyb20gbm9ydGhlcm4gY2hpbmFdJzsKK+eLhj4nW3Bla2luZXNlIGRvZ10nOwor54uOPidbYmUgZmFtaWxpYXIgd2l0aF0nOwor54uQPidbc3BlY2llcyBvZiBmb3hdJzsKK+eLkj4nW2JhYm9vbl0nOwor54uXPidbZG9nXSc7Civni5k+J1thcGVdJzsKKyMi54ubPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivni6A+J1t2aWNpb3VzXSc7Civni6E+J1tjdW5uaW5nXSc7Civni6I+J1thbmltYWwgbmFtZV0nOwor54upPidbd2ludGVyIGh1bnRpbmddJzsKK+eLrD4nW2Fsb25lXSc7Civni60+J1tuYXJyb3ddJzsKK+eLtz4nW3Jhc2hdJzsKK+eLuD4nW2ZveF0nOwor54u5PidbbmFycm93XSc7Civni7w+J1t3b2xmXSc7Civni70+J1tsZWdlbmRhcnkgYW5pbWFsIHdpdGggc2hvcnQgZm9yZV0nOwor54yKPidbbGlvbl0nOwor54yWPidbbWFkXSc7CivnjJc+J1tleGNsYW1hdGlvbiBvZiBhZG1pcmF0aW9uXSc7CivnjJs+J1t2aW9sZW50XSc7CivnjJw+J1tndWVzc10nOwor54ydPidbYWJydXB0bHldJzsKK+eMnz4nW2h1bnRdJzsKK+eMpT4nW3Z1bGdhcl0nOwor54ypPidbc3BlY2llcyBvZiBvcmFuZ3V0YW5dJzsKK+eMqj4nW3BpZ10nOwor54yrPidbY2F0XSc7CivnjK4+J1tvZmZlcl0nOworIyLnjK8+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+eMtD4nW21vbmtleV0nOwor54y2PidbbGlrZV0nOwor54y3PidbcGxhbl0nOwor54y+PidbY3JhZnR5XSc7CivnjL8+J1thcGVdJzsKK+eNhD4nW3ByaXNvbl0nOwor542FPidbbGlvbl0nOwor542OPidbcHJpemVdJzsKK+eNjz4nW3RoZSBwYW50aGVyXSc7CivnjZc+J1t1bnJ1bHldJzsKK+eNoz4nW2JlYXN0XSc7Civnjag+J1thbG9uZV0nOwor542qPidbc2x5XSc7CivnjbA+J1tmZXJvY2lvdXMgYXBwZWFyYW5jZV0nOwor542yPidbb2J0YWluXSc7CivnjbU+J1todW50XSc7Civnjbg+J1tiZWFzdF0nOwor5426Pidbb3R0ZXJdJzsKK+eNuz4nW29mZmVyXSc7CivnjoQ+J1tkZWVwXSc7Civnjoc+J1t0byBsZWFkXSc7Civnjok+J1tqYWRlXSc7Civnjos+J1traW5nXSc7CivnjpY+J1tibGFjay1jb2xvcmVkIGphZGVdJzsKK+eOqT4nW3BsYXkgd2l0aF0nOwor546yPidbdGlua2xpbmcgb2YgamFkZV0nOwor546zPidbdG9ydG9pc2Ugc2hlbGxdJzsKK+eOuz4nW2dsYXNzXSc7Civnj4A+J1thbWJlcl0nOwor54+CPidbaW5mZXJpb3Iga2luZCBvZiBqYWRlXSc7Civnj4g+J1tvcm5hbWVudCBhdHRhY2hlZCB3b21hbicncyBoYWlycGldJzsKK+ePij4nW2NvcmFsXSc7Civnj40+J1twcmVjaW91c10nOwor54+OPidbcHJlY2lvdXNdJzsKK+ePnj4nW2tpbmQgb2YgbmVja2xhY2VdJzsKK+ePoD4nW3ByZWNpb3VzIHN0b25lXSc7Civnj6U+J1tlYXIgb3JuYW1lbnRdJzsKK+ePqj4nW2phZGUgdGFibGUgY29uZmVycmVkIHVwb24gZmV1ZGFsXSc7Civnj60+J1tjbGFzc10nOwor54+uPidbamFkZSBvcm5hbWVudF0nOwor54+xPidbbmVja2xhY2UgbWFkZSBvZiBwcmVjaW91cyBzdG9uZXNdJzsKKyMi54+4PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnj74+J1thcHBlYXJdJzsKK+eQgz4nW2JhbGxdJzsKK+eQhT4nW3ZhcmlldHkgb2Ygd2hpdGUgY2FybmVsaWFuXSc7CivnkIY+J1tyZWFzb25dJzsKK+eQiT4nW3NwYXJrbGluZyBzdG9uZV0nOwor55CiPidbcG9saXNoIGphZGVdJzsKK+eQpT4nW2pld2VsIGluIHNoYXBlIG9mIHRpZ2VyXSc7CivnkLI+J1tuZWNrbGFjZV0nOwor55CzPidbYmVhdXRpZnVsIGphZGVdJzsKK+eQtD4nW2NoaW5lc2UgbHV0ZSBvciBndWl0YXJdJzsKK+eQtT4nW2d1aXRhci1saWtlIGluc3RydW1lbnRdJzsKK+eQtj4nW2d1aXRhci1saWtlIGluc3RydW1lbnRdJzsKK+eQuj4nW2VuYW1lbF0nOwor55C/PidbYnJpZ2h0XSc7CivnkYE+J1tmaW5lIHBpZWNlIG9mIGphZGVdJzsKK+eRlT4nW2ZsYXcgaW4gZ2VtXSc7CivnkZk+J1thZ2F0ZV0nOwor55GaPidbY29yYWxdJzsKK+eRmz4nW2x1c3RlciBvZiBnZW1dJzsKK+eRnD4nW2ZsYXdsZXNzIGdlbSBvciBqZXdlbF0nOwor55GePidbZmVsaWNpdG91cyBvbWVuXSc7CivnkZ8+J1tsYXJnZSBzdHJpbmdlZCBtdXNpY2FsIGluc3RydW1lbnRdJzsKK+eRoD4nW3ByZWNpb3VzIHN0b25lXSc7CivnkaM+J1tmcmFnbWVudHNdJzsKK+eRpD4nW3ByZWNpb3VzIGphZGVdJzsKK+eRqT4nW2x1c3RyZSBvZiBnZW1zXSc7Civnkao+J1thZ2F0ZV0nOwor55GvPidba2luZCBvZiB3aGl0ZSBjb3JuZWxpYW5dJzsKK+eRsD4nW2V4dHJhb3JkaW5hcnldJzsKK+eRsz4nW2x1c3RlciBvZiBnZW1dJzsKK+eRtj4nW3ByZWNpb3VzIGphZGVdJzsKK+eRvj4nW2JyaWxsaWFuY2Ugb2YgZ2Vtc10nOwor55KDPidbZ2xhc3NdJzsKK+eSiz4nW2phZGUgcGxheXRoaW5nXSc7Civnkp4+J1t1bnBvbGlzaGVkIGdlbV0nOwor55KiPidbcHJlY2lvdXMgc3RvbmVdJzsKK+eSpz4nW3BpZWNlIG9mIGphZGUgd2l0aCBob2xlIGluIGl0XSc7CivnkrA+J1tqYWRlIHJpbmcgb3IgYnJhY2VsZXRdJzsKK+eSvT4nW2ltcGVyaWFsIHNpZ25ldF0nOwor55OKPidbamFkZV0nOwor55OPPidbZ2VtIGN1dCBsaWtlIGRyYWdvbl0nOwor55OUPidbbmVja2xhY2UgbWFkZSBvZiBwcmVjaW91cyBzdG9uZXNdJzsKK+eTnD4nW21lbG9uXSc7Civnk6A+J1tib3R0bGUgZ291cmRdJzsKK+eToj4nW2xhZGxlIG1hZGUgZnJvbSBkcmllZCBnb3VyZF0nOwor55OjPidbcGV0YWxdJzsKK+eTpj4nW3RpbGVdJzsKK+eTpz4nW2RlY2FncmFtXSc7Civnk6k+J1traWxvd2F0dF0nOwor55OuPidbZWFydGhlbiBqYXJdJzsKK+eTsD4nW1tub3QgZm91bmQgaW4gZGljdGlvbmFyeV1dJzsKK+eTsT4nW21pbGxpZ3JhbV0nOworIyLnk7I+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+eTtj4nW2p1Z10nOwor55O3PidbY3JvY2tlcnldJzsKK+eTuD4nW2hlY3RvZ3JhbV0nOwor55SDPidbYnJpY2sgd2FsbCBvZiBhIHdlbGxdJzsKK+eUhD4nW2V4YW1pbmVdJzsKK+eUhT4nW2NlbnRpZ3JhbV0nOwor55SMPidbYm93bF0nOwor55SNPidbcmFmdGVycyBzdXBwb3J0aW5nIHJvb2YgdGlsZXNdJzsKK+eUjj4nW2JyaWNrXSc7CivnlJE+J1tib2lsZXIgZm9yIHN0ZWFtaW5nIHJpY2VdJzsKK+eUkz4nW2dsYXplZCB0aWxlc10nOwor55SVPidbZWFydGhlbiBqYXJdJzsKK+eUmD4nW3N3ZWV0bmVzc10nOwor55SaPidbZ3JlYXQgZXh0ZW50XSc7CivnlJw+J1tzd2VldF0nOwor55SePidbdGFzdGVdJzsKK+eUnz4nW2xpZmVdJzsKK+eUoz4nW2dpdmUgYmlydGhdJzsKK+eUpT4nW3Npc3RlcicncyBjaGlsZF0nOwor55SmPidbYmUgcmVib3JuXSc7CivnlKg+J1t1c2VdJzsKK+eUqz4nW2JlZ2luXSc7CivnlKw+J1twYXRoXSc7CivnlLA+J1tmaWVsZF0nOwor55SxPidbY2F1c2VdJzsKK+eUsj4nW2FybW9yXSc7CivnlLM+J1t0byBzdGF0ZSB0byBhIHN1cGVyaW9yXSc7CivnlLc+J1ttYWxlXSc7CivnlLg+J1tzdWJ1cmJzIG9mIGNhcGl0YWxdJzsKK+eUuj4nW3JhaXNlZCBwYXRoIGJldHdlZW4gZmllbGRzXSc7CivnlLs+J1twYWludGluZ10nOwor55S8PidbcmFpc2VkIHBhdGggYmV0d2VlbiBmaWVsZHNdJzsKK+eVhD4nW3N0b3BdJzsKK+eVhj4nW2NoaW5lc2UgbGFuZCBtZWFzdXJlXSc7CisjIueViT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor55WKPidbcGxvd10nOwor55WLPidbdGlsbCBsYW5kXSc7CivnlYw+J1tib3VuZGFyeV0nOworIyLnlY0+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+eVjz4nW2ZlYXJdJzsKK+eVkT4nW2RyeSAoYXMgb3Bwb3NlZCB0byByaWNlKSBmaWVsZF0nOwor55WUPidbYm91bmRhcnkgcGF0aCBkaXZpZGluZyBmaWVsZHNdJzsKK+eVmT4nW3N0b3BdJzsKK+eVmj4nW3N0cmF3IGJhc2tldF0nOwor55WbPidbYm9yZGVyXSc7CivnlZw+J1tsaXZlc3RvY2tdJzsKK+eVnT4nW2NoaW5lc2UgbGFuZCBtZWFzdXJlXSc7CivnlaA+J1tnYXJkZW5dJzsKK+eVoj4nW2VuZF0nOwor55WkPidbcGxhY2UgZm9yIHdvcnNoaXBwaW5nIHRoZSBoYXZlbl0nOwor55WlPidbYXBwcm94aW1hdGVseV0nOwor55WmPidbc2VjdGlvbnMgaW4gdmVnZXRhYmxlIGZhcm1dJzsKK+eVpz4nW2FwcHJveGltYXRlbHldJzsKKyMi55WpPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnlao+J1t0YWtlIHR1cm5zXSc7Civnlas+J1tkZWxpbmVhdGVdJzsKKyMi55WtPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnlbA+J1tkaWZmZXJlbnRdJzsKK+eVsz4nW3JlcGVhdF0nOwor55W0PidbZmFybWxhbmRdJzsKK+eVtj4nW2JlYXJdJzsKK+eVtz4nW3JhaXNlZCBwYXRoIGJldHdlZW4gZmllbGRzXSc7Civnlbg+J1tvZGRdJzsKK+eVvz4nW2ltcGVyaWFsIGRvbWFpbl0nOwor55aCPidbcmVwZWF0XSc7CivnloY+J1tib3VuZGFyeV0nOwor55aHPidbZmFybWxhbmRdJzsKK+eWiT4nW3JlcGVhdF0nOwor55aKPidbcmVwZWF0XSc7Civnlos+J1tyb2xsXSc7Civnlo4+J1tuZWdsZWN0XSc7Civnlo8+J1tuZWdsZWN0XSc7CivnlpE+J1tkb3VidF0nOwor55aUPidbY2FyYnVuY2xlXSc7Civnlpo+J1tjaHJvbmljIGRpc2Vhc2VdJzsKK+eWnT4nW2hlcm5pYV0nOwor55ajPidbd2FydF0nOwor55alPidbc2NhYmllc10nOwor55arPidbZXBpZGVtaWNdJzsKK+eWsT4nW2FjbmVdJzsKK+eWsj4nW2ZlZWwgdGlyZWRdJzsKK+eWsz4nW2NoaWxkaG9vZCBkaXNlYXNlc10nOwor55a1PidbZmxhd10nOwor55a4PidbamF1bmRpY2VdJzsKK+eWuT4nW21lYXNsZXNdJzsKK+eWvD4nW2FjaGVzXSc7Civnlr0+J1t1bGNlcl0nOwor55a+PidbaWxsbmVzc10nOwor55eCPidbc2NhYl0nOwor55eDPidbaW5kaWdlc3Rpb25dJzsKK+eXhT4nW2lsbG5lc3NdJzsKK+eXhz4nW2Rpc2Vhc2VdJzsKK+eXij4nW2JlIGhlYWxlZF0nOwor55eNPidbd291bmRdJzsKK+eXkj4nW2l0Y2hdJzsKK+eXlD4nW2hlbW9ycmhvaWRzXSc7Civnl5U+J1tzY2FyXSc7Civnl5g+J1tzbWFsbHBveF0nOwor55eZPidbY29udnVsc2lvbnNdJzsKK+eXmz4nW3BhaW5dJzsKK+eXnj4nW2R5c3BlcHNpYV0nOwor55eiPidbZHlzZW50cnldJzsKK+eXoz4nW3Nwb3RzXSc7Civnl6k+J1t0aGluXSc7Civnl7A+J1twaGxlZ21dJzsKK+eXsj4nW3BvY2stbWFya2VkXSc7Civnl7M+J1twb2NrLW1hcmtlZF0nOwor55e0PidbZm9vbGlzaF0nOwor55e6PidbcGFyYWx5c2lzXSc7Civnl7w+J1tjaHJvbmljIGRpc2Vhc2VdJzsKK+eXvj4nW2Nocm9uaWMgaWxsbmVzc10nOwor55e/PidbcGFyYWx5c2lzXSc7CivnmIE+J1tmZWVsIHRpcmVkXSc7CivnmIk+J1tnZXQgd2VsbF0nOwor55iLPidbY3JhenldJzsKK+eYjT4nW3VsY2Vyc10nOwor55ifPidbZXBpZGVtaWNdJzsKK+eYoD4nW3RoaW5dJzsKK+eYoT4nW3R1bW9yXSc7CivnmKI+J1tzY2FyXSc7CivnmKQ+J1t0dW1vcl0nOwor55inPidbaW50ZXJtaXR0ZW50IGZldmVyXSc7CivnmLA+J1tzY3JvZnVsYV0nOwor55i0PidbbWFsYXJpYSBwZXN0aWxlbnRpYWwgdmFwb3JzXSc7CivnmLs+J1tmaXN0dWxhXSc7CivnmYI+J1tiZSBoZWFsZWRdJzsKK+eZhj4nW2NvbnN1bXB0aW9uXSc7CivnmYc+J1tlcGlsZXBzeV0nOwor55mIPidbYWJyb2dhdGVdJzsKK+eZjD4nW2NhbmNlcl0nOwor55mSPidbZ2V0IHdlbGxdJzsKK+eZlj4nW2NyYXZpbmddJzsKK+eZmD4nW3NvcmVdJzsKK+eZnD4nW2VyeXRoZW1hXSc7CivnmaE+J1tzaWxseV0nOwor55miPidbaXRjaF0nOwor55mnPidbc2Nyb2Z1bG91cyBsdW1wcyBvciBzd2VsbGluZ3NdJzsKK+eZqD4nW3F1aWNrbHldJzsKK+eZqT4nW2xlcHJvc3ldJzsKK+eZqj4nW3NwYXNtc10nOwor55msPidbcmluZ3dvcm1zXSc7CivnmbA+J1tjYXJidW5jbGVdJzsKK+eZsj4nW2NyYXp5XSc7CivnmbY+J1tsZWdzXSc7Civnmbg+J1tsYXN0IG9mIHRlbiBjZWxlc3RpYWwgc3RlbXNdJzsKK+eZuj4nW2lzc3VlXSc7Civnmbs+J1tyaXNlXSc7Civnmbw+J1tpc3N1ZV0nOwor55m9Pidbd2hpdGVdJzsKK+eZvj4nW29uZSBodW5kcmVkXSc7CivnmoA+J1trZXJuZWxdJzsKK+eagz4nW2NvdW50ZW5hbmNlXSc7CivnmoQ+J1twb3NzZXNzaXZlXSc7CivnmoY+J1thbGxdJzsKK+eahz4nW3JveWFsXSc7Civnmog+J1tmb2xsb3ddJzsKK+eaiz4nW3RoZSBoaWdoIGxhbmQgYWxvbmcgYSByaXZlcl0nOwor55qOPidbd2hpdGVdJzsKK+eakD4nW3RoZSBoaWdoIGxhbmQgYWxvbmcgYSByaXZlcl0nOwor55qTPidbYnJpZ2h0XSc7CivnmpY+J1thbmh1aSBwcm92aW5jZV0nOwor55qZPidbd2hpdGVdJzsKK+eamj4nW2JyaWxsaWFudCB3aGl0ZV0nOwor55quPidbc2tpbl0nOwor55qwPidbcGltcGxlc10nOwor55q0PidbY2hhcHBlZF0nOwor55q3PidbZHJ1bV0nOwor55q4PidbY3JhY2tdJzsKK+eauT4nW2NyYWNrXSc7Civnmro+J1t3cmlua2xlc10nOwor55q/Pidbc2hhbGxvdyBjb250YWluZXJdJzsKK+ebgj4nW2Jhc2luXSc7Civnm4M+J1tnbGFzc10nOwor55uGPidbYmFzaW5dJzsKK+ebiD4nW2ZpbGxdJzsKK+ebij4nW3Byb2ZpdF0nOwor55uNPidbd2hhdD8gd2h5IG5vdD8gY29ycmVzcG9uZF0nOwor55uSPidbc21hbGwgYm94IG9yIGNhc2VdJzsKK+eblj4nW2NvdmVyXSc7Civnm5c+J1tyb2JdJzsKK+ebmz4nW2FidW5kYW50XSc7Civnm5w+J1tyb2JdJzsKK+ebnj4nW3NtYWxsIGN1cCBvciBjb250YWluZXJdJzsKK+ebnz4nW3N3ZWFyXSc7Civnm6E+J1tleGhhdXN0XSc7Civnm6M+J1tzdXBlcnZpc2VdJzsKK+ebpD4nW3RyYXldJzsKK+ebpT4nW3dhc2hdJzsKK+ebpz4nW2NvdHRhZ2VdJzsKK+ebqj4nW3RvIHRvc3MgYWJvdXRdJzsKK+ebrj4nW2V5ZV0nOwor55uyPidbYmxpbmRdJzsKK+ebtD4nW3N0cmFpZ2h0XSc7Civnm7g+J1ttdXR1YWxdJzsKK+ebuz4nW2dsYXJlXSc7Civnm74+J1tzaGllbGRdJzsKK+ecgT4nW3Byb3ZpbmNlXSc7CivnnIQ+J1t0byBsb29rIGFza2FuY2VdJzsKK+echz4nW2JsaW5kIGluIG9uZSBleWVdJzsKK+eciD4nW2dsb2F0XSc7CivnnIk+J1tleWVicm93c10nOwor55yLPidbbG9va10nOwor55yMPidbY291bnR5XSc7CivnnJs+J1tkaW1dJzsKKyMi55yePidbcmVhbF0nIiwKK+ecnz4nW3JlYWxdJzsKK+ecoD4nW2Nsb3NlIGV5ZXNdJzsKKyMi55ykPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnnKU+J1tleWUgc29ja2V0c10nOwor55ymPidbY29ybmVyIG9mIHRoZSBleWVzXSc7CivnnKk+J1tjb25mdXNlXSc7CivnnLc+J1t0YWtlIGludGVyZXN0IGluXSc7CivnnLg+J1twdXBpbCBvZiBleWVdJzsKK+ecuj4nW2xvb2sgYXRdJzsKK+ecvD4nW2V5ZV0nOwor552APidbbWFrZSBtb3ZlXSc7CivnnYc+J1tsb29rIGF0XSc7CivnnZo+J1tjb3JuZXIgb2YgZXllXSc7CivnnZs+J1tleWViYWxsXSc7CivnnaE+J1tzbGVlcF0nOwor552jPidbc3VwZXJ2aXNlXSc7CivnnaU+J1tsb29rIGFza2FuY2UgYXRdJzsKK+edpj4nW2ZyaWVuZGx5XSc7Civnnag+J1tsb29rIGFza2FuY2UgYXRdJzsKK+edqz4nW2V5ZWxhc2hlc10nOwor5525PidbbG9vayBhdF0nOwor552+PidbdGVzdGljbGVdJzsKK+edvz4nW3NocmV3ZF0nOwor556LPidbZ2xhcmUgd2l0aCBhbmdlcl0nOwor556OPidbYmxpbmRdJzsKK+eekT4nW2Nsb3NlIGV5ZXNdJzsKK+eenj4nW2RlY2VpdmVdJzsKK+eeoD4nW2xvb2sgYXRdJzsKK+eepT4nW3Rha2UgZmxlZXRpbmcgZ2xhbmNlIGF0XSc7Civnnqw+J1t3aW5rXSc7Civnnq0+J1ticmlnaHRdJzsKK+eesD4nW3dhdGNoXSc7CivnnrM+J1twdXBpbCBvZiBleWVdJzsKK+eetj4nW2RpbV0nOworIyLnnrY+J1tkaW1dJyIsCivnnrs+J1tsb29rXSc7Civnnrw+J1tleWVsaWRdJzsKK+eevT4nW2JsaW5kXSc7Civnnr8+J1tzdXJuYW1lXSc7Civnn4c+J1tzdHVwaWRdJzsKK+efjT4nW2xvb2sgYWJvdXQgaW4gZmlyZ2h0IG9yIGFsYXJtXSc7Civnn5c+J1tzdHJhaWdodF0nOwor55+aPidbd2F0Y2ggY2FyZWZ1bGx5XSc7Civnn5s+J1tzcGVhcl0nOwor55+cPidbcGl0eV0nOwor55+iPidbYXJyb3ddJzsKK+efoz4nW3BhcnRpY2xlIG9mIGNvbXBsZXRlZCBhY3Rpb25dJzsKK+efpT4nW2tub3ddJzsKK+efpz4nW211Y2ggbW9yZV0nOwor55+pPidbY2FycGVudGVyJydzIHNxdWFyZV0nOwor55+tPidbc2hvcnRdJzsKK+efrj4nW3Nob3J0XSc7Civnn68+J1tjb3JyZWN0XSc7Civnn7M+J1tzdG9uZV0nOwor55+8Pidbc3RvbmUgYnJpZGdlXSc7CivnoII+J1tzYW5kXSc7CivnoIw+J1tzdG9uZSBzdGVwc10nOwor56CSPidbYXJzZW5pY10nOwor56CUPidbZ3JpbmRdJzsKK+eglT4nW2JyZWFrXSc7CivnoKA+J1tyb2NreV0nOwor56ClPidbd2hldHN0b25lXSc7CivnoKY+J1tzdG9ja2FkZV0nOwor56CnPidbYW52aWxdJzsKK+egsj4nW2d1bl0nOwor56C0PidbYnJlYWtdJzsKK+eguj4nW3doZXRzdG9uZV0nOwor56C/PidbbWluZV0nOwor56GFPidbc2lsaWNvbl0nOwor56GdPidbc2FsdHBldGVyXSc7Civnoas+J1tzdWxmdXJdJzsKK+ehrD4nW2hhcmRdJzsKK+ehrz4nW2lua3N0b25lXSc7CisjIuehsj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAorIyLnobQ+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+ehvD4nW2JvcmF4XSc7CivnooE+J1tjaGVzc10nOwor56KGPidbYXJyb3ctdGlwXSc7Civnooc+J1thbmNob3JdJzsKK+eijD4nW3JvdWdoXSc7Civnoo0+J1tvYnN0cnVjdF0nOwor56KOPidbYnJlYWtdJzsKK+eikT4nW3N0b25lIHRhYmxldF0nOwor56KTPidbcGVzdGxlXSc7CisjIueilT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor56KXPidbYm93bF0nOwor56KaPidbc3VidXJiXSc7CivnoqM+J1tzdG9uZSB0YWJsZXRdJzsKK+eipz4nW2phZGVdJzsKK+eiqT4nW2dyZWF0XSc7Civnoqo+J1tzdG9uZSBzbGFiIHVzZWQgZm9yIHdhc2hpbmcgY2xvdF0nOwor56KvPidbYWdhdGVdJzsKKyMi56K1PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnoro+J1tzdXJlXSc7Civnorw+J1tudW1iZXJdJzsKK+eivj4nW3JvbGxlcl0nOwor56OBPidbbWFnbmV0aWNdJzsKK+ejhT4nW3BvdW5kXSc7CisjIuejhj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor56OKPidbcGlsZSBvZiByb2NrcyBvciBzdG9uZXNdJzsKK+ejiz4nW3BvbGlzaF0nOwor56OQPidbbGFyZ2Ugcm9ja10nOwor56ORPidbc3RvbmUgbWlsbF0nOwor56OUPidbZG93bndhcmQgc3Ryb2tlIHNsYW50aW5nIHJpZ2hdJzsKK+ejmj4nW3RpbGVdJzsKK+ejpz4nW3NhbmQgYW5kIGdyYXZlbF0nOwor56OoPidbZ3JpbmRdJzsKK+ejrD4nW211c2ljYWwgaW5zdHJ1bWVudF0nOwor56OvPidbamV0dHldJzsKK+ejtD4nW3N0ZXBzIG9uIGxlZGdlXSc7Civno70+J1tiYXJyZW4gbGFuZF0nOwor56SBPidbcmVlZl0nOworIyLnpIc+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+ekjj4nW2ZvdW5kYXRpb24gc3RvbmVdJzsKKyMi56SOPidbZm91bmRhdGlvbiBzdG9uZV0nIiwKKyMi56SSPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnpJk+J1tvYnN0cnVjdF0nOwor56SmPidbbWluZV0nOwor56SqPidbd2hldHN0b25lXSc7CivnpKs+J1tncmF2ZWxdJzsKK+ekrD4nW2FsdW1dJzsKK+ekuj4nW3Nob3ddJzsKK+ekvD4nW3NvY2lhbCBjdXN0b21dJzsKK+ekvj4nW2dvZCBvZiB0aGUgc29pbCBhbmQgYWx0YXJzIHRvIGhpbV0nOwor56WAPidbdG8gc2FjcmlmaWNlXSc7CivnpYE+J1twcmF5XSc7CivnpYc+J1tvbmx5XSc7CivnpYg+J1twcmF5XSc7CivnpYk+J1toYXBwaW5lc3NdJzsKK+elkD4nW2RpdmluZSBpbnRlcnZlbnRpb25dJzsKK+elkz4nW2V4b3JjaXNlXSc7CivnpZU+J1tteXN0ZXJpb3VzXSc7CivnpZY+J1thbmNlc3Rvcl0nOwor56WXPidbcmVzcGVjdF0nOwor56WaPidbdGhyb25lXSc7CivnpZ0+J1twcmF5IGZvciBoYXBwaW5lc3Mgb3IgYmxlc3NpbmdzXSc7CivnpZ4+J1tzcGlyaXRdJzsKK+elnz4nW2V2aWwgc3Bpcml0XSc7CivnpaA+J1thbmNlc3RyYWwgdGVtcGxlXSc7CivnpaI+J1tvbmUnJ3MgZGVjZWFzZWQgZmF0aGVyXSc7CivnpaU+J1tnb29kIGx1Y2tdJzsKK+elqD4nW3NsaXAgb2YgcGFwZXIgb3IgYmFtYm9vXSc7Civnpa0+J1tzYWNyaWZpY2UgdG9dJzsKK+eltz4nW3ByYXldJzsKK+eluj4nW2dvb2QgbHVja10nOwor56W/PidbYmxlc3NpbmddJzsKK+emgD4nW3JlcG9ydCB0b10nOwor56aBPidbcmVzdHJpY3RdJzsKK+emhD4nW2JsZXNzaW5nXSc7CivnpoU+J1ttZWRpdGF0aW9uXSc7Civnpoo+J1tzZW1pLWFubnVhbCBjZXJlbW9ueSBvZiBwdXJpZmljYV0nOwor56aNPidbbWlzZm9ydHVuZV0nOwor56aOPidbbHVja3ldJzsKK+emjz4nW2hhcHBpbmVzc10nOwor56adPidbW25vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XV0nOwor56amPidbZGVmZW5kXSc7Civnpqc+J1toYXBwaW5lc3NdJzsKK+emqj4nW21lZGl0YXRpb25dJzsKK+emrj4nW3NvY2lhbCBjdXN0b21dJzsKK+emsD4nW29uZScncyBkZWNlYXNlZCBmYXRoZXJdJzsKK+emsz4nW3ByYXkgb3Igc2FjcmlmaWNlXSc7Civnprk+J1tsZWdlbmRhcnkgaHNpYSBkeW5hc3R5IGZvdW5kZXJdJzsKK+emuj4nW2Rpc3RyaWN0XSc7Civnpr0+J1tiaXJkc10nOwor56a+PidbZ3JhaW4gc3RpbGwgb24gc3RhbGtdJzsKK+emvz4nW2JhbGRdJzsKK+engD4nW2VhciBvZiBncmFpbl0nOwor56eBPidbcHJpdmF0ZV0nOwor56eJPidbZ3Jhc3BdJzsKK+eniz4nW2F1dHVtbl0nOwor56eRPidbc2VjdGlvbl0nOwor56eSPidbYmVhcmQgb2YgZ3JhaW4gb3IgY29ybl0nOwor56eVPidbZW1wdHkgZ3JhaW4gb3IgcmljZSBodXNrXSc7Civnp5g+J1tzZWNyZXRdJzsKK+ennz4nW3JlbnRdJzsKKyMi56ehPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnp6M+J1tmb2RkZXJdJzsKK+enpD4nW2JhbGFuY2VdJzsKK+enpj4nW2ZldWRhbCBzdGF0ZSBvZiBxaW5dJzsKK+enpz4nW3JpY2Ugc2VlZGxpbmdzXSc7Civnp6k+J1tvcmRlcl0nOwor56esPidbYmxhY2sgbWlsbGV0XSc7Civnp7A+J1tjYWxsXSc7Civnp7s+J1tjaGFuZ2UgcGxhY2VdJzsKK+eogD4nW3JhcmVdJzsKK+eoiD4nW3N0YWxrIG9mIGdyYWluXSc7CivnqIs+J1tqb3VybmV5XSc7CivnqI0+J1tsaXR0bGVdJzsKK+eojj4nW3RheGVzXSc7CivnqJQ+J1tyaXBlIGdyYWluXSc7CivnqJc+J1tkYXJuZWxzXSc7CisjIueomD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor56iZPidbZ3JhaW4gcmVhZHkgZm9yIGdyaW5kaW5nXSc7CivnqJo+J1t5b3VuZ10nOwor56icPidbY29ybmVyXSc7CivnqJ8+J1tyZXBvcnQgdG9dJzsKK+eooD4nW2RlbnNlXSc7CivnqK4+J1tzZWVkXSc7CivnqLE+J1tjYWxsXSc7CivnqLI+J1tyaWNlIGdyb3dpbmcgaW4gZmllbGRdJzsKK+eotz4nW2dvZCBvZiBjZXJlYWxzXSc7CivnqLs+J1tyaWNlIGdyb3dpbmcgaW4gZmllbGRdJzsKK+eovD4nW3NvdyBncmFpbl0nOwor56i9PidbZXhhbWluZV0nOwor56i+PidbZHJhZnRdJzsKK+eovz4nW2RyYWZ0XSc7CivnqYA+J1tjb3JuXSc7CivnqYI+J1tlYXIgb2YgZ3JhaW5dJzsKKyMi56mDPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnqYY+J1ttYWplc3RpY10nOwor56mJPidbeW91bmcgZ3JhaW5dJzsKK+epjT4nW2FjY3VtdWxhdGVdJzsKK+epjj4nW3JpY2UgdGFzc2VsXSc7CisjIuepjj4nW3JpY2UgdGFzc2VsXSciLAor56mQPidbZmFsbF0nOwor56mXPidbZWFyIG9mIGdyYWluXSc7CivnqaE+J1tmYXJtXSc7CivnqaI+J1tkaXJ0eV0nOwor56mjPidbc3RhbGtzIG9mIGdyYWluXSc7Civnqak+J1tzdGFibGVdJzsKK+epqz4nW2hhcnZlc3RdJzsKK+epsD4nW3N0YWxrcyBvZiBncmFpbl0nOwor56m0PidbY2F2ZV0nOwor56m2PidbZXhhbWluZV0nOwor56m5PidbaGlnaCBhbmQgdmFzdF0nOwor56m6PidbZW1wdHldJzsKK+epvT4nW2hvbGVdJzsKK+epvz4nW3BlbmV0cmF0ZV0nOwor56qBPidbc3VkZGVubHldJzsKK+eqgz4nW3NlY3JldGx5XSc7CivnqoQ+J1tuYXJyb3ddJzsKK+eqiD4nW29ic2N1cmVdJzsKK+eqkj4nW3N0b3AgdXBdJzsKK+eqkz4nW3dpbmRvd10nOwor56qVPidbc2xlbmRlcl0nOwor56qWPidbcGl0XSc7Civnqpc+J1t3aW5kb3ddJzsKK+eqmD4nW2VtYnJhc3Nhc3NlZF0nOwor56qfPidbaG9sZV0nOwor56qpPidbbmVzdF0nOwor56qqPidbaG9sbG93XSc7Civnqq4+J1twb29yXSc7Civnqq8+J1traWxuXSc7CivnqrA+J1traWxuXSc7CivnqrY+J1twb29yXSc7Civnqro+J1twZWVwXSc7Civnqr8+J1ttaW5lIHNoYWZ0XSc7Civnq4M+J1tmdXJuYWNlXSc7Civnq4Q+J1tydW4gYXdheV0nOwor56uFPidbaG9sZV0nOwor56uHPidbc3VybmFtZV0nOwor56uIPidbZnVybmFjZV0nOwor56uKPidbc2VjcmV0bHldJzsKK+eriz4nW3N0YW5kXSc7Civnq40+J1tkZWNhbGl0ZXJdJzsKK+erjz4nW2tpbG9saXRlcl0nOwor56uSPidbc3RyYW5nZV0nOwor56uTPidbbWlsbGlsaXRlcl0nOwor56uVPidbZGVjaWxpdGVyXSc7Civnq5k+J1tzdGFuZCB1cF0nOwor56uaPidbc3RhbmQgYW5kIHdhaXQgZm9yIGxvbmcgdGltZV0nOwor56ucPidbZHJhZ29uXSc7Civnq50+J1tjb21iaW5lXSc7Civnq58+J1tmaW5hbGx5XSc7Civnq6A+J1tjb21wb3NpdGlvbl0nOwor56uhPidbaGVjdG9saXRlcl0nOwor56uiPidbd2FpdCBmb3JdJzsKK+eroz4nW3Rlcm1pbmF0ZV0nOwor56ulPidbY2hpbGRdJzsKK+erpj4nW3JldmVyZV0nOwor56uqPidbcGVycGVuZGljdWxhcl0nOwor56utPidbcHV0IGZvcnRoIGdyZWF0IGVmZm9ydF0nOwor56uvPidbZW5kXSc7Civnq7A+J1tjZW50aWxpdGVyXSc7Civnq7Y+J1tjb250ZW5kXSc7Civnq7g+J1tjb250ZW5kXSc7Civnq7k+J1tiYW1ib29dJzsKK+eruj4nW2luZGlhXSc7Civnq78+J1tiYW1ib28gcG9sZV0nOworIyLnrII+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+eshD4nW2hhaXJwaW5dJzsKK+eshj4nW2JhbWJvbyBmZW5jZV0nOwor56yIPidbYmFtYm9vIGJveCB1c2VkIGNhcnJ5IGJvb2tzXSc7CivnrIo+J1tsYWRsZV0nOwor56yLPidbYmFtYm9vIHNob290c10nOwor56yPPidbdGFibGV0IGhlbGQgYnkgc29tZW9uZSBoYXZpbmcgYXVdJzsKK+eskT4nW3NtaWxlXSc7CisjIuesmD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor56yZPidbc21hbGwgZ291cmQtc2hhcGVkIG11c2ljYWwgaW5zdHJ1bWVudF0nOwor56ybPidbYmFtYm9vIGZsdXRlXSc7CivnrJ4+J1tiYW1ib28gcm9kIHVzZWQgZm9yIGJlYXRpbmdzXSc7CivnrKA+J1tiYW1ib28gaGF0XSc7CivnrKU+J1thIGhhbXBlcl0nOwor56ymPidbaS5kLiB0YWddJzsKK+esqD4nW2Zvb2xpc2hdJzsKK+esrD4nW3NlcXVlbmNlXSc7CivnrLM+J1thIHJlZWQgbGVhZiB3aGlzdGxlXSc7CivnrLU+J1thIGJhbWJvbyBmb3JtXSc7CisjIuestj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor56y5Pidbc21hbGwgYmFtYm9vXSc7CivnrYU+J1tiYW1ib28gYnJ1c2hdJzsKK+ethj4nW3dyaXRpbmcgYnJ1c2hdJzsKK+etiD4nW2Fycm93IGVuZF0nOwor562JPidbcmFua10nOwor562LPidbbXVzY2xlc10nOwor562MPidbYmFtYm9vIGZpc2ggdHJhcF0nOwor562NPidbYmFtYm9vIHNob290XSc7CivnrY8+J1tyYWZ0XSc7CivnrZA+J1tiYW1ib28gYmFza2V0IG9yIGNoZXN0XSc7CivnrZE+J1thbmNpZW50IGx1dGVdJzsKK+etkj4nW3RoaWNrIHBpZWNlIG9mIGJhbWJvb10nOwor562UPidbYW5zd2VyXSc7CivnrZY+J1tzY2hlbWVdJzsKK+etnT4nW3N0cmluZ2VkIG11c2ljYWwgaW5zdHJ1bWVudF0nOwor562lPidbcm91bmQtc2hhcGVkIGJhbWJvbyBiYXNrZXQgZm9yXSc7Civnrac+J1tiYW1ib28gd2F0ZXIgcGlwZV0nOwor562sPidbcmVlZCBvZiBhIGxvb21dJzsKK+etrj4nW2RpdmluYXRpb24gd2l0aCBzdGFsa3Mgb2YgcGxhbnRzXSc7CivnrbA+J1tjYWJsZV0nOwor562xPidbZHdhcmYgYmFtYm9vXSc7CivnrbQ+J1t0eXBlIG9mIGdyYXNzIHVzZWQgaW4gZGl2aW5hdGlvbl0nOwor5621PidbYmFtYm9vIG1hdF0nOwor5626PidbYmFtYm9vIGJhc2tldCBvciBjaGVzdF0nOwor566GPidbZmluZS10b290aGVkIGNvbWJdJzsKK+euhz4nW251bWVyYXJ5IGFkanVuY3RdJzsKK+euiz4nW25vdGVdJzsKK+eujT4nW2hvb3BdJzsKK+eujz4nW3N0cmluZ2VkIG11c2ljYWwgaW5zdHJ1bWVudF0nOwor566SPidbYnJvb21dJzsKK+eulD4nW3JlZWQgc2NyZWVuXSc7CivnrpU+J1tzaWV2ZV0nOwor566XPidbY291bnRdJzsKK+eumD4nW2ZpbmUgYmFtYm9vXSc7Civnrpk+J1txdWl2ZXJdJzsKK+eumj4nW2JyaWVmIG5vdGVdJzsKK+eunD4nW2FuY2llbnQgc3RyaW5nIG11c2ljIGluc3RydW1lbnRdJzsKK+eunT4nW3R3ZWV6ZXJzXSc7CisjIueunz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor566hPidbcGlwZV0nOwor566qPidbc21hbGwgYmFtYm9vIGJhc2tldCBmb3IgaG9sZGluZ10nOwor566tPidbYXJyb3ddJzsKK+eusT4nW2Nhc2VdJzsKK+eutD4nW25lZWRsZV0nOwor5664PidbY2hvcHN0aWNrc10nOwor56+APidba25vdF0nOwor56+BPidbYmFtYm9vIGdyb3ZlXSc7Civnr4Q+J1twYXR0ZXJuXSc7Civnr4Y+J1tzZWFsIHNjcmlwdF0nOwor56+HPidbY2hhcHRlcl0nOwor56+JPidbYnVpbGRdJzsKK+eviz4nW3JhdHRvbiBib3hdJzsKK+evjD4nW2FuY2llbnQgbXVzaWMgaW5zdHJ1bWVudF0nOwor56+PPidbaW5sYXldJzsKK+evnT4nW2JhbWJvbyBiYXNrZXRdJzsKK+evoD4nW2R3YXJmIGJhbWJvb10nOwor56+kPidbZGVlcF0nOwor56+lPidbYnVsZ2xlXSc7Civnr6Y+J1tmaW5lLXRvb3RoZWQgY29tYl0nOwor56+pPidbc2lldmVdJzsKK+evrT4nW2NhZ2VdJzsKK+evsz4nW3dpY2tlcl0nOworIyLnr7Y+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+evtz4nW2F3bmluZ10nOwor57CAPidbYmVkIG1hdF0nOwor57CHPidbc3dhcm1dJzsKK+ewjT4nW2JhbWJvbyBiYXNrZXRdJzsKK+ewkT4nW2EgY29pciByYWluY29hdF0nOwor57CSPidbdXN1cnBdJzsKKyMi57CTPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnsJQ+J1thIGNvaXIgcmFpbmNvYXRdJzsKKyMi57CXPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnsJ8+J1tiYW1ib28gbWF0XSc7CivnsKE+J1tzaW1wbGVdJzsKK+ewoz4nW2JhbWJvbyBiYXNrZXQgZm9yIGNhcnJ5aW5nIGVhcnRoXSc7CivnsKc+J1tyZWVkIG9mIHdvb2R3aW5kIGluc3RydW1lbnRdJzsKK+ewqj4nW2hhaXJwaW5dJzsKK+ewqz4nW211c2ljYWwgaW5zdHJ1bWVudCBsaWtlIHBhbi1waXBlc10nOwor57C3PidbZWF2ZXMgb2YgaG91c2VdJzsKK+ewuD4nW3dpbm5vd2VyXSc7CivnsL0+J1tzaWduXSc7CivnsL4+J1thIGJsaW5kXSc7CivnsL8+J1tyZWdpc3Rlcl0nOwor57GAPidbcmVjaXRlXSc7CivnsYM+J1tiYXNrZXRdJzsKK+exjD4nW2NoaXBdJzsKK+exjT4nW3JlY29yZF0nOwor57GPPidbZmxhZ10nOwor57GQPidbY2xpbWJpbmcgcGxhbnRzXSc7CivnsZQ+J1tiYW1ib28gYmFza2V0XSc7CivnsZY+J1t0YWxseV0nOwor57GYPidbY2xpbWJpbmcgcGxhbnRzXSc7CivnsZ8+J1tiYW1ib28gZmx1dGVdJzsKK+exoD4nW2NhZ2VdJzsKK+expD4nW3RhbGx5XSc7CivnsaU+J1trZXldJzsKK+exrD4nW2JhbWJvbyBvciB3b29kZW4gZmVuY2VdJzsKK+exsz4nW2h1bGxlZCBvciBodXNrZWQgdW5jb29rZWQgcmljZV0nOwor57G1PidbZG1dJzsKK+exvj4nW3VuaHVsbGVkIHJpY2VdJzsKK+eygT4nW2ttXSc7CivnsoI+J1tzdXJuYW1lXSc7CivnsoM+J1tlbXB0eSBodXNrcyBvZiBncmFpbl0nOwor57KJPidbcG93ZGVyXSc7Civnsos+J1twdXJlXSc7Civnso0+J1ttbV0nOworIyLnspA+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+eykj4nW2dyYWluXSc7CivnspU+J1tsZWVzXSc7Civnspc+J1tyb3VnaF0nOwor57KYPidbdmlzY291c10nOwor57KbPidbcGF5IHJlc3BlY3RzXSc7Civnsp8+J1t1bmh1c2tlZCBtaWxsZXRdJzsKKyMi57KhPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnsqI+J1tncmFpbiBvZmZlcmVkIGluIHJpdHVhbCBzYWNyaWZpY10nOwor57KkPidbR3Vhbmdkb25nIGFuZCBHdWFuZ3hpIHByb3ZpbmNlc10nOwor57KlPidbcmljZSBncnVlbF0nOwor57KnPidbdG9pbGV0XSc7Civnsqg+J1tobV0nOworIyLnsqs+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKKyMi57KtPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnsq4+J1tmb29kXSc7CivnsrE+J1tiZXR0ZXIgdmFyaWV0aWVzIG9mIG1pbGxldF0nOwor57KyPidbcG9saXNoXSc7CivnsrM+J1tub24tZ2x1dGlub3VzIHJpY2VdJzsKK+eyuT4nW3B1cmVdJzsKK+eyvT4nW2R1bXBsaW5nIG1hZGUgb2YgZ2x1dGlub3VzIHJpY2VdJzsKK+eyvj4nW2Vzc2VuY2VdJzsKKyMi57OAPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCisjIuezgj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor57OFPidbYmxlbmRdJzsKK+ezij4nW3Bhc3RlXSc7Civns44+J1ttbV0nOwor57OSPidbZm9vZCBmb3IgYSBqb3VybmV5XSc7Civns5Y+J1tzdWdhcl0nOworIyLns5g+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+eznD4nW3JpY2UgZ3J1ZWxdJzsKK+eznj4nW21hbnVyZV0nOwor57OfPidbc2VkaW1lbnRdJzsKK+ezoD4nW2NoYWZmXSc7Civns6I+J1tyaWNlIHNuYWNrc10nOwor57OnPidbZm9vZF0nOwor57OvPidbZ2x1dGlub3VzIHJpY2VdJzsKK+ezsj4nW3VucG9saXNoZWQgcmljZV0nOwor57O0PidbcHVyY2hhc2UgZ3JhaW5zXSc7Civns7Y+J1tzZWxsIGdyYWluc10nOwor57O4Pidbc2lsa10nOwor57O6PidbdG8gY29sbGFib3JhdGVdJzsKK+ezuz4nW3N5c3RlbV0nOwor57O+PidbaW52ZXN0aWdhdGVdJzsKK+e0gD4nW3JlY29yZF0nOwor57SCPidbbmFtZSBvZiBhbiBlbXBlcm9yXSc7CivntIQ+J1t0cmVhdHldJzsKK+e0hT4nW3JlZF0nOwor57SGPidbYmVuZF0nOwor57SKPidbY29uZnVzZWRdJzsKK+e0iz4nW2xpbmVdJzsKK+e0jT4nW2FkbWl0XSc7CivntJA+J1trbm90XSc7CivntJQ+J1twdXJlXSc7CivntJU+J1tzcG9pbGVkIHNpbGtdJzsKK+e0lz4nW2dhdXplXSc7CivntJg+J1tzdHJpbmddJzsKK+e0mT4nW3BhcGVyXSc7CivntJo+J1tsZXZlbF0nOwor57SbPidbaW4gZGlzb3JkZXJdJzsKK+e0nD4nW2NvbmZ1c2VkXSc7CivntKA+J1t3aGl0ZSAoc2lsayldJzsKK+e0oT4nW3NwaW5dJzsKK+e0oj4nW2xhcmdlIHJvcGVdJzsKK+e0qz4nW3B1cnBsZV0nOwor57SsPidba2luZCBvZiB0aGluIHNpbGtdJzsKK+e0rj4nW3RpZV0nOwor57SvPidbdGlyZWRdJzsKK+e0sD4nW2ZpbmVdJzsKK+e0sj4nW2JyaWRsZV0nOwor57SzPidbZ2lyZGxlXSc7CivntLU+J1tyYW1pZV0nOwor57S5PidbY29udGludWVdJzsKK+e0uj4nW2RhcmsgYmx1ZSBjb2xvcl0nOwor57S/PidbY2hlYXRdJzsKK+e1gj4nW2VuZF0nOwor57WDPidbc3RyaW5nIG9uIG11c2ljYWwgaW5zdHJ1bWVudF0nOwor57WEPidbY2xhc3NdJzsKK+e1hT4nW3VubGluZWQgZ2FybWVudF0nOwor57WGPidbbG9vcF0nOworIyLntYs+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+e1jD4nW2NsYXNzaWMgd29ya3NdJzsKK+e1jj4nW2Jhc3RlXSc7CivntY8+J1tyb3BlXSc7CivntZA+J1trbm90XSc7CivntZY+J1tmaW5lIHNpbGtzXSc7CivntZs+J1tzaWxrIGJyYWlkXSc7CivntZ4+J1t0d2lzdF0nOwor57WhPidbZW5tZXNoXSc7CivntaI+J1t2YXJpZWdhdGVkXSc7CivntaM+J1t0byBiYXN0ZSBmb3Igc2V3aW5nXSc7CivntaY+J1tnaXZlXSc7Civntag+J1tzaWxrXSc7Civnta4+J1t3YXN0ZSBjb3R0b25dJzsKK+e1sT4nW2dvdmVybl0nOwor57WyPidbc2lsa10nOwor57WzPidbZGVlcCByZWRdJzsKK+e1tT4nW2RyYXddJzsKK+e1tj4nW2N1dF0nOwor57W5Pidba2luZCBvZiB0aGljayBzdGlmZiBzaWxrXSc7CisjIue1vT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor57aJPidbZW1icm9pZGVyXSc7Civnto8+J1tzb290aGVdJzsKK+e2kz4nW2NsYXNzaWMgd29ya3NdJzsKK+e2mT4nW2NvbnRpbnVlXSc7Civntpo+J1tjb250aW51ZV0nOworIyLntps+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+e2nD4nW2FycmFuZ2UgdGhyZWFkcyBmb3Igd2VhdmluZ10nOworIyLntp8+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+e2oj4nW3NpbGsgY2xvdGhdJzsKK+e2oz4nW2FmZmVjdGlvbmF0ZV0nOwor57arPidbbGluZV0nOwor57asPidbc2lsayByaWJib24gYXR0YWNoZWQgYXMgYSBzZWFsXSc7Civntq0+J1ttYWludGFpbl0nOwor57auPidbZW1icm9pZGVyZWQgYmFubmVyXSc7Civntq8+J1ticmFpZF0nOwor57awPidbdG8gc3RyaW5nIHRvZ2V0aGVyXSc7CivntrE+J1toZWF2eSByb3BlXSc7CivntrI+J1tuZXRdJzsKK+e2tD4nW3BhdGNoIHRvZ2V0aGVyXSc7CivntrU+J1t2YXJpY29sb3JlZCBzaWxrXSc7Civntrg+J1tncmVlbiBzaWxrIHRocmVhZCBvciB0YXNzZWxdJzsKK+e2uj4nW2ZpbmUgdGhpbiBzaWxrXSc7Civntrs+J1tyaXBwZWQgc2VhbV0nOwor57a9PidbZ3JhY2VmdWxdJzsKK+e2vj4nW3RoaW4gc2lsa10nOwor57a/PidbY290dG9uIHdhZF0nOwor57eHPidbYmxhY2sgc2lsa10nOwor57eKPidbdGVuc2VdJzsKK+e3iz4nW3NjYXJsZXRdJzsKK+e3jz4nW2NvbGxlY3RdJzsKK+e3kT4nW2dyZWVuXSc7Civnt5I+J1tlbmQgb2YgdGhyZWFkXSc7CisjIue3lT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor57eYPidbc2VhbF0nOwor57eaPidbdGhyZWFkXSc7Civnt5w+J1tjb3R0b24gd2FkXSc7Civnt50+J1t0byBzZXcgaW4gY2xvc2Ugc3RpdGNoZXNdJzsKK+e3nj4nW3NhdGluXSc7Civnt6A+J1t0aWVdJzsKK+e3oT4nW2Zpc2hpbmctbGluZV0nOwor57ekPidbY29yZF0nOwor57eoPidba25pdF0nOwor57epPidbc2xvd10nOwor57esPidbZGlzdGFudF0nOwor57evPidbd29vZl0nOwor57eyPidbaW5kaXN0aW5jdF0nOwor57e0PidbcHJhY3RpY2VdJzsKK+e3uz4nW2RlbGljYXRlXSc7CivnuIE+J1toZW1dJzsKK+e4hD4nW3JvcGVdJzsKKyMi57iEPidbcm9wZV0nIiwKK+e4iT4nW3JlZCBzaWxrXSc7CivnuIo+J1toYW5nXSc7CivnuIs+J1tjbGltZCBkb3duIHJvcGVdJzsKKyMi57iRPidbZmluZSBzaWxrXSciLAor57ibPidbdG8gdGllXSc7CivnuJ4+J1t3aGl0ZSByYXcgc2lsa10nOwor57ifPidbZGVjb3JhdGl2ZV0nOwor57ihPidbbWF0dGVyXSc7CivnuKI+J1tiaW5kXSc7CivnuKM+J1tjb3VudHldJzsKK+e4pj4nW2luZHVsZ2UgaW5dJzsKK+e4qz4nW3Nld10nOwor57iuPidbY29udHJhY3RdJzsKK+e4sT4nW2luZHVsZ2UgaW5dJzsKK+e4sj4nW2NoYWluIG9yIHJvcGUgdXNlZCBiaW5kIGNyaW1pbmFsXSc7CivnuLU+J1twbGFpbiBzaWxrXSc7CivnuLc+J1t0aHJlYWRdJzsKK+e4uT4nW2xpZ2h0IGJsdWUgc2lsa10nOworIyLnuLo+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+e4uz4nW2hhbHRlciBmb3Igb3hdJzsKK+e4vT4nW2NvbGxlY3RdJzsKK+e4vj4nW3NwaW5dJzsKK+e5gT4nW2NvbXBsaWNhdGVkXSc7CivnuYM+J1tiaW5kXSc7CivnuYY+J1t3aW5kIGFyb3VuZF0nOwor57mKPidbZmluZV0nOwor57mLPidbYXR0YWNoXSc7CivnuY0+J1tlbWJyb2lkZXJdJzsKK+e5lD4nW3dlYXZlXSc7CivnuZU+J1tyZXBhaXJdJzsKK+e5lj4nW3VtYnJlbGxhXSc7CivnuZk+J1tpbnRlcnByZXRdJzsKK+e5mj4nW3dpbmQgcm91bmRdJzsKKyMi57mdPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnuZ4+J1tlbnR3aW5lXSc7CivnuaY+J1tzdHJpbmcgb2YgY29wcGVyIGNvaW5zXSc7CisjIue5pz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor57mpPidbcm9wZV0nOwor57mqPidbZHJhd10nOwor57mtPidbY29jb29uXSc7CivnubA+J1t0byByZWVsIHNpbGsgZnJvbSBjb2Nvb25zXSc7Civnubk+J1t1bnJhdmVsIG9yIHVucmVlbCBzaWxrXSc7Civnubs+J1tmaW5lIHNpbGsgZ3VhemVdJzsKK+e5vD4nW2NvbnRpbnVlXSc7Civnub0+J1tmbG91cmlzaGluZ10nOworIyLnub8+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+e6gj4nW2VkaXRdJzsKKyMi57qDPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivnuog+J1twYXR0ZXJuZWQgc2lsa10nOworIyLnuok+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+e6jD4nW2NvbnRpbnVlXSc7Civnuo4+J1tmaW5lXSc7Civnuo8+J1t3cmFwXSc7CisjIue6kD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor57qSPidbd3JhcF0nOwor57qTPidbY2hpbiBzdHJhcF0nOwor57qUPidbdGFsZW50XSc7CivnupY+J1tmaW5lXSc7Civnups+J1thIGJhbm5lcl0nOwor57qcPidbaGF3c2VyXSc7CivnvLY+J1tlYXJ0aGVuIGNyb2NrIG9yIGphcl0nOwor57y4PidbZWFydGhlbiBqdWddJzsKK+e8uj4nW2JlIHNob3J0IG9mXSc7CivnvYU+J1tjcmFja10nOwor572MPidbbG9uZyBuZWNrZWQgamFyIG9yIGJvdHRsZV0nOwor572NPidbbGFyZ2UgZWFydGhlbndhcmUgd2luZSBqYXJdJzsKK+e9jj4nW2FuIGVhcnRoZW53YXJlIGphcl0nOwor572QPidbamFyXSc7CivnvZE+J1tuZXRdJzsKK+e9lD4nW25ldF0nOwor572VPidbcmFyZV0nOwor572YPidbc2NyZWVuIHVzZWQgaW4gYW5jaWVudCB0aW1lc10nOwor572fPidbbmV0XSc7CivnvaA+J1thbmltYWwgdHJhcF0nOworIyLnvac+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+e9qD4nW21lZGljYWwgY29tcHJlc3NdJzsKK+e9qT4nW2Jhc2tldCBmb3IgY2F0Y2hpbmcgZmlzaF0nOwor572qPidbY3JpbWVdJzsKK+e9qz4nW2hpbmRlcl0nOwor572uPidbcGxhY2VdJzsKK+e9sD4nW3BlbmFsdHldJzsKK+e9sj4nW3B1YmxpYyBvZmZpY2VdJzsKK+e9tT4nW2FjY3VzZV0nOwor5723PidbY2Vhc2VdJzsKK+e9uD4nW3BlbmFsdHldJzsKK+e9uT4nW3NvcnJvd10nOworIyLnvoI+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+e+gz4nW2NvdmVyLWNsb3RoXSc7CivnvoU+J1tuZXQgZm9yIGNhdGNoaW5nIGJpcmRzXSc7CivnvoY+J1ticm93biBiZWFyXSc7Civnvoc+J1tpbm5dJzsKK+e+iD4nW2hhbHRlcl0nOwor576KPidbc2hlZXBdJzsKK+e+jD4nW3FpYW5nIG5hdGlvbmFsaXR5XSc7Civnvo4+J1tiZWF1dGlmdWxdJzsKK+e+lD4nW2xhbWJdJzsKK+e+mj4nW3NwZWNpZXMgb2YgYW50ZWxvcGVdJzsKK+e+nT4nW3JhbV0nOwor576ePidbZGlzZ3JhY2VdJzsKK+e+oz4nW2dyb3VwXSc7CivnvqQ+J1tncm91cF0nOwor576oPidbZW52eV0nOwor576pPidbcmlnaHQgY29uZHVjdF0nOwor576uPidbc291cF0nOwor576vPidbd2V0aGVyXSc7CivnvrI+J1thbmNpZW50IGVtcGVyb3JdJzsKK+e+tj4nW3Jhbmsgb2Rvcl0nOwor5764Pidbd2Vha10nOwor5765Pidbc291cF0nOwor5769PidbZmVhdGhlcl0nOwor57+BPidbb2xkIG1hbl0nOwor57+FPidbd2luZ3NdJzsKK+e/hj4nW2NvbG9yIGdyZWVuXSc7Civnv4o+J1tmbHlpbmddJzsKK+e/jD4nW2JyaWdodF0nOwor57+SPidbcHJhY3RpY2VdJzsKK+e/lD4nW3NvYXJdJzsKK+e/lT4nW2FncmVlXSc7Civnv6A+J1tjb2xvciBncmVlbl0nOwor57+hPidba2luZ2Zpc2hlcl0nOwor57+mPidbc2Npc3NvcnNdJzsKK+e/qT4nW2ZseV0nOwor57+rPidbY2FyZWxlc3NdJzsKK+e/sD4nW3dyaXRpbmcgYnJ1c2hdJzsKK+e/sz4nW3NoYWRlXSc7Civnv7k+J1t0dXJuIHVwXSc7Civnv7s+J1tmbGlwIG92ZXJdJzsKK+e/vD4nW3dpbmdzXSc7CivogIA+J1tzaGluZV0nOwor6ICBPidbb2xkXSc7CivogIM+J1tleGFtaW5lXSc7CivogIQ+J1tlbGRlcmx5IHBlcnNvbl0nOwor6ICFPidbdGhhdCB3aGljaF0nOwor6ICGPidbbWFuIG9mIHNpeHR5XSc7CivogIs+J1thZ2VkXSc7CivogIw+J1thbmRdJzsKK+iAkD4nW2VuZHVyZV0nOwor6ICSPidbaGFuZGxlIG9mIHBsb3ddJzsKK+iAlT4nW3Bsb3ddJzsKK+iAlz4nW2NvbnN1bWVdJzsKK+iAmD4nW3dlZWRdJzsKK+iAmT4nW3Jha2VdJzsKK+iAnD4nW3NwYWRlLXNoYXBlZCB0b29sXSc7CivogKE+J1tob2VdJzsKK+iAqD4nW2hvZV0nOwor6ICzPidbZWFyXSc7CivogLY+J1t1c2VkIGluIHRyYW5zbGl0ZXJhdGlvbl0nOwor6IC7Pidbc2hhbWVdJzsKK+iAvT4nW2luZHVsZ2UgaW5dJzsKK+iAvz4nW2JyaWdodF0nOwor6IGGPidbbGlzdGVuXSc7CivogYo+J1tzb21ld2hhdF0nOwor6IGSPidbY2xhbW9yXSc7CivogZY+J1tob2x5XSc7CivogZg+J1tlbmdhZ2VdJzsKK+iBmj4nW2Fzc2VtYmxlXSc7CivogZ4+J1toZWFyXSc7CivogZ8+J1tzb24taW4tbGF3XSc7CivogaE+J1tpbnRlbGxpZ2VudF0nOworIyLogaI+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+iBqD4nW2Nvbm5lY3RdJzsKK+iBrz4nW2Nvbm5lY3RdJzsKK+iBsD4nW2ludGVsbGlnZW50XSc7CivogbI+J1tzb3VuZF0nOwor6IGzPidbdXJnZSBvbl0nOwor6IG0PidbaGVhcl0nOwor6IG2Pidbd2hpc3Blcl0nOwor6IG3PidbZHV0eV0nOwor6IG5PidbZWFyd2F4XSc7Civogb0+J1toZWFyXSc7Civogb4+J1tkZWFmXSc7Civogb8+J1t3cml0aW5nIGJydXNoXSc7CivogoQ+J1tsZWFybl0nOwor6IKFPidbcGF5IHJlc3BlY3RzXSc7CivogoY+J1tpbmR1bGdlXSc7Civogoc+J1tiZWdpbl0nOwor6IKJPidbZmxlc2hdJzsKK+iCiz4nW3JpYnNdJzsKK+iCjD4nW211c2NsZSB0aXNzdWVdJzsKK+iCkz4nW3JlZ2lvbiBiZXR3ZWVuIGhlYXJ0IGFuZCBkaWFwaHJhZ21dJzsKK+iClj4nW2xvb2sgbGlrZV0nOwor6IKYPidbZWxib3ddJzsKK+iCmj4nW2JlbGx5XSc7Civogps+J1thbnVzXSc7Civogp0+J1tsaXZlcl0nOwor6IKhPidbdGhpZ2hzXSc7CivogqI+J1todW1hbiBsaW1ic10nOwor6IKlPidbZmF0XSc7Civogqk+J1tzaG91bGRlcnNdJzsKK+iCqj4nW2FuaW1hbCBmYXRdJzsKK+iCrD4nW3dhcnRdJzsKK+iCrT4nW2ZhdF0nOwor6IKvPidbd2lsbGluZ10nOwor6IKxPidbZm9yZWFybV0nOwor6IKyPidbcHJvZHVjZV0nOwor6IK0PidbY29va2VkIG9yIHByZXBhcmVkIG1lYXRdJzsKK+iCuj4nW2x1bmdzXSc7Civog4M+J1tzdG9tYWNoXSc7Civog4Q+J1toZWxtZXRdJzsKK+iDhj4nW2dhbGwgYmxhZGRlcl0nOwor6IOMPidbYmFja10nOwor6IOOPidbdW5ib3JuIGNoaWxkXSc7Civog5Y+J1tmYXRdJzsKK+iDmT4nW2Zvb2Qgb2ZmZXJlZCBpbiBzYWNyaWZpY2lhbCBzZXJ2XSc7Civog5o+J1tlbWJyeW9dJzsKK+iDmz4nW3RoZSBzaG91bGRlcl0nOwor6IOdPidbY2FsbG91c10nOwor6IOePidbd29tYl0nOwor6IOhPidbcmVja2xlc3NseV0nOwor6IOkPidbaGVpcl0nOwor6IOlPidbYWxsXSc7Civog68+J1twZWx2aXNdJzsKK+iDsT4nW2JsYWRkZXJdJzsKK+iDtD4nW3RoZSBsYXJnZSBpbnRlc3RpbmVdJzsKK+iDuD4nW2JyZWFzdF0nOwor6IO8PidbY2FsbHVzXSc7Civog70+J1tiZSBhYmxlXSc7CivohII+J1tmYXRdJzsKK+iEhT4nW3JpYnNdJzsKK+iEhj4nW2NyaXNwXSc7CivohIc+J1tyaWJzXSc7CivohIg+J1tibG9vZCB2ZXNzZWxzXSc7CivohIk+J1tibG9vZCB2ZXNzZWxzXSc7CivohIo+J1tzcGluZV0nOwor6ISaPidbbGVnXSc7CivohJs+J1tzaGluYm9uZV0nOwor6ISjPidbbGlwc10nOwor6ISpPidbZHJpZWQgbWVhdCAodXNlZCBhcyB0ZWFjaGVycyBwYXltZW50IGluIGFuY2llbnQgdGltZXMpXSc7CivohK8+J1tkcmllZCBtZWF0XSc7CivohLE+J1t0YWtlIG9mZl0nOwor6ISzPidbYnJhaW5dJzsKK+iEuT4nW3N3ZWxsXSc7CivohL4+J1tzcGxlZW5dJzsKK+iFhj4nW3Byb3NwZXJvdXNdJzsKK+iFiz4nW2FybXBpdF0nOwor6IWOPidba2lkbmV5c10nOwor6IWQPidbcm90XSc7CivohZE+J1tib3dlbHNdJzsKK+iFkz4nW2NhbGZdJzsKK+iFlD4nW2NoZXN0IGNhdml0eV0nOwor6IWVPidbd3Jpc3RdJzsKK+iFnz4nW3ZhZ2luYV0nOwor6IWlPidbcmF3IG1lYXRdJzsKK+iFpj4nW2JyYWluXSc7Civohas+J1tzd2VsbF0nOwor6IWuPidbbG93ZXIgcGFydCBvZiBmYWNlXSc7CivohbA+J1t3YWlzdF0nOwor6IWxPidbdGVuZG9uc10nOwor6IW0PidbZmF0XSc7Civohbg+J1tpbnRlc3RpbmVzXSc7Civohbk+J1tzdG9tYWNoXSc7Civohbo+J1tnbGFuZF0nOwor6IW/PidbbGVnc10nOwor6IaAPidbdXBwZXIgYXJtXSc7CivohoI+J1tiYWNrYm9uZV0nOwor6IaDPidbZmF0XSc7Civohog+J1tkaWFwaHJhZ21dJzsKK+iGij4nW3Nob3VsZGVyc10nOwor6IaPPidbZ3JlYXNlXSc7CivohpM+J1tpbnRlc3RpbmVzXSc7CivohpU+J1tob2xsb3ddJzsKK+iGmj4nW3NraW5dJzsKK+iGnD4nW21lbWJyYW5lXSc7Civohp0+J1trbmVlXSc7CivohqA+J1tnbHVlXSc7CivohqM+J1t2YWdpbmFdJzsKKyMi6IakPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivohqg+J1tzd2VsbF0nOwor6IapPidbZ3JlYXN5XSc7CivohrA+J1tjb29rIG1lYXQgZm9yIHNhY3JpZmljZSBvciBvZmZlcl0nOwor6IazPidbbWVhbHNdJzsKK+iGtT4nW3BhbmNyZWFzXSc7CisjIuiGuD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6Ia6PidbYnJlYXN0XSc7Civohr0+J1tnYWxsIGJsYWRkZXJdJzsKK+iGvj4nW21pbmNlZCBtZWF0IG9yIGZpc2hdJzsKK+iGvz4nW3B1c10nOwor6IeAPidbYnV0dG9ja3NdJzsKK+iHgj4nW2FybV0nOwor6IeGPidbY2hlc3RdJzsKK+iHiD4nW3llYXIgZW5kIHNhY3JpZmljZV0nOwor6IeJPidbZmFjZV0nOwor6IeNPidbYWJkb21pbmFsIGFyZWEgb2YgY3JhYl0nOwor6IeRPidbc29mdF0nOwor6IeTPidbaW50ZXJuYWwgb3JnYW5zXSc7Civoh5g+J1t5ZWFyIGVuZCBzYWNyaWZpY2VdJzsKK+iHmT4nW3JvdWdlXSc7Civoh5o+J1thcnJhbmdlIGluIG9yZGVyXSc7Civoh58+J1tpbnRlcm5hbCBvcmdhbnNdJzsKK+iHoD4nW3NtYWxsIGx1bXAgb2YgbWVhdF0nOwor6IejPidbbWluaXN0ZXJdJzsKK+iHpT4nW2xpZSBkb3duXSc7Civoh6c+J1tnb29kXSc7Civoh6g+J1tkcmF3IG5lYXJdJzsKK+iHqj4nW3NlbGZdJzsKK+iHrT4nW3NtZWxsXSc7Civoh7M+J1tyZWFjaF0nOwor6Ie0Pidbc2VuZF0nOwor6Ie6PidbdG93ZXJdJzsKK+iHuz4nW3JlYWNoXSc7Civoh7w+J1ttb3J0YXJdJzsKK+iHvj4nW21vbWVudF0nOwor6IiBPidbY2Fycnkgb24gb25lJydzIHNob3VsZGVyXSc7CivoiII+J1tncmluZCBpbiBtb3J0YXJdJzsKK+iIhT4nW21vdGhlcicncyBicm90aGVyXSc7CivoiIc+J1thbmRdJzsKK+iIiD4nW3Rocml2ZV0nOwor6IiJPidbcmFpc2VdJzsKK+iIij4nW29sZF0nOwor6IiMPidbdG9uZ3VlXSc7CivoiI0+J1tob3VzZV0nOwor6IiOPidbaG91c2VdJzsKK+iIkD4nW2xpY2sgd2l0aCB0b25ndWVdJzsKK+iIkj4nW29wZW4gdXBdJzsKK+iIlj4nW3N0b3JlXSc7CivoiJc+J1tzdG9yZV0nOwor6IiYPidbYSBtYW5zaW9uXSc7CivoiJs+J1tvcHBvc2VdJzsKK+iInD4nW2xlZ2VuZGFyeSBydWxlcl0nOwor6IiePidbZGFuY2VdJzsKK+iInz4nW2JvYXRdJzsKK+iIqT4nW2JvYXRdJzsKK+iIqj4nW3NhaWxdJzsKK+iIqz4nW2ZhbmN5IGJvYXRdJzsKK+iIrD4nW3NvcnRdJzsKK+iIrj4nW2JvdyBvciBwcm93IG9mIGJvYXRdJzsKK+iIsz4nW3N0ZXJuIG9mIHNoaXBdJzsKK+iItT4nW3J1ZGRlcl0nOwor6Ii2PidbbGFyZ2VdJzsKK+iItz4nW3NpZGVzIG9mIGJvYXRdJzsKK+iIuD4nW2xhcmdlIGJvYXRdJzsKK+iIuT4nW3NoaXBdJzsKK+iJgD4nW1tub3QgZm91bmQgaW4gZGljdGlvbmFyeV1dJzsKK+iJhz4nW3NtYWxsIGJvYXRdJzsKK+iJmD4nW2NvdW50ZXIgZm9yIHNoaXBzXSc7CivoiZk+J1tob2xkIG9mIHNoaXBdJzsKK+iJmj4nW3NoaXBdJzsKKyMi6ImdPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivoiZ8+J1thbmNpZW50IHdhcnNoaXBdJzsKK+iJoj4nW2EgbWFzdF0nOwor6ImkPidbdG8gbW9vciBhIGJvYXQgdG8gdGhlIGJhbmtdJzsKK+iJpj4nW3dhcnNoaXBdJzsKK+iJqD4nW2xvbmcgYW5kIG5hcnJvdyB3YXItYm9hdF0nOwor6ImqPidbb2FyXSc7Civoias+J1tib3cgb3IgcHJvdyBvZiBib2F0XSc7Civoia4+J1tzZXZlbnRoIG9mIGVpZ2h0IGRpYWdyYW1zXSc7Civoia8+J1tnb29kXSc7CivoibE+J1tkaWZmaWN1bHRdJzsKK+iJsj4nW2NvbG9yXSc7CivoibY+J1tiZWF1dGlmdWxdJzsKK+iJtz4nW2JlYXV0aWZ1bF0nOwor6Im4PidbZ3Jhc3NdJzsKK+iJvj4nW2FydGVtaXNpYV0nOwor6IqLPidbdGFyb10nOwor6IqNPidbcGVvbnldJzsKK+iKkj4nW21pc2NhbnRodXMgc2luZW5zaXNdJzsKK+iKmT4nW2hpYmlzY3VzXSc7Civoip0+J1twdXJwbGlzaCBtdXNocm9vbSB0aG91Z2h0IHByb21vdF0nOwor6IqfPidbbW93XSc7CivoiqU+J1ttdXN0YXJkIHBsYW50XSc7CivoiqY+J1tydXNoZXNdJzsKK+iKqz4nW2RhcGhuZSBnZW5rd2FdJzsKK+iKrD4nW2ZyYWdyYW5jZV0nOwor6IqtPidbcGxhbnRhaW4gb3IgYmFuYW5hIHBhbG1dJzsKK+iKrz4nW3BpdGggZnJvbSBydXNoIChqdW5jdXMgZWZmdXN1cyldJzsKK+iKsT4nW2Zsb3dlcl0nOwor6IqzPidbZnJhZ3JhbnRdJzsKK+iKuD4nW3J1ZV0nOwor6Iq5PidbY2VsZXJ5XSc7Civoirs+J1ttb3ddJzsKK+iKvT4nW2J1ZF0nOwor6IuFPidbY3V0IG9mZl0nOwor6IuRPidbcGFzdHVyZV0nOwor6IuSPidbbHVzaF0nOwor6IuTPidbZnVuZ3VzXSc7Civoi5Q+J1ttb3NzXSc7Civoi5c+J1tzcHJvdXRzXSc7Civoi5k+J1twaWdzdHldJzsKK+iLmz4nW3NtYWxsXSc7Civoi5w+J1tjbG92ZXJdJzsKK+iLnj4nW3ZhcmlldHkgb2YgcnVzaF0nOwor6IufPidbY2FyZWxlc3NdJzsKK+iLoT4nW2JhcmxleV0nOwor6IujPidba2luZCBvZiBsZXR0dWNlXSc7Civoi6U+J1tpZl0nOwor6IumPidbYml0dGVyXSc7Civoi6c+J1tjaGluYSBncmFzc10nOwor6IurPidbcnVzaCBvciBzdHJhdyBtYXR0aW5nXSc7Civoi7E+J1twZXRhbF0nOworIyLoi7M+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+iLtD4nW3NhY2tjbG90aF0nOwor6Iu5PidbYXJ0ZW1pc2lhXSc7Civoi7o+J1tiZXJyaWVzXSc7Civoi7s+J1traW5kIG9mIGhlcmJdJzsKK+iMgj4nW3RoaWNrXSc7CivojIM+J1tzdXJuYW1lXSc7CivojIQ+J1tlZ2dwbGFudF0nOwor6IyFPidbcmVlZHNdJzsKK+iMhj4nW3NwZWNpZXMgb2YgZ3Jhc3NdJzsKK+iMiT4nW3doaXRlIGphc21pbmVdJzsKK+iMjj4nW3N0ZW1dJzsKK+iMlj4nW2FsbGl1bSB2aWN0b3JpYWxpc10nOwor6IyXPidbdGVhXSc7CisjIuiMlz4nW3RlYV0nIiwKK+iMnD4nW21hZGRlcl0nOworIyLojKM+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+iMqD4nW2NhbHRyb3BdJzsKK+iMqz4nW3Zhc3RdJzsKK+iMrz4nW2NoaW5hIHJvb3RdJzsKK+iMsT4nW2RvZ3dvb2RdJzsKK+iMsj4nW25vd10nOwor6Iy0PidbZmVubmVsXSc7CivojLU+J1tjdXNoaW9uXSc7CivojLY+J1t0ZWFdJzsKK+iMuD4nW3NvZnRdJzsKK+iMuT4nW3Jvb3RzXSc7CivojYA+J1tzdXJuYW1lXSc7CivojYU+J1thbnN3ZXI6IHNtYWxsIGJlYW5dJzsKK+iNiT4nW2dyYXNzXSc7CivojYo+J1t0aG9ybnNdJzsKK+iNjz4nW2JlYW5zXSc7CivojZA+J1tyZXBlYXRdJzsKK+iNkj4nW3dhc3RlbGFuZF0nOwor6I2YPidbdmlsbGFnZV0nOwor6I2zPidbYmVhbnNdJzsKKyMi6I21PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivojbc+J1tsb3R1c10nOwor6I27PidbcmVlZF0nOwor6I28PidbYml0dGVyIHZlZ2V0YWJsZV0nOwor6I6FPidbYXR0ZW5kXSc7CisjIuiOhz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6I6JPidbd2hpdGUgamFzbWluZV0nOwor6I6KPidbdmlsbGFnZV0nOwor6I6OPidba2luZCBvZiBzZWRnZSBncmFzc10nOwor6I6TPidbbW9zc10nOwor6I6WPidbc3RlbV0nOwor6I6aPidbYmFtYm9vIG1hdF0nOwor6I6ePidbc21pbGluZ10nOworIyLojp8+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+iOoD4nW3dlZWRzXSc7CivojqI+J1twb2RzIG9mIGxlZ3VtaW5vdXMgcGxhbnRzXSc7Civojqg+J1toZXJiXSc7Civojqo+J1thcnRlbWlzaWFdJzsKK+iOqz4nW2RvIG5vdF0nOwor6I6xPidbZ29vc2Vmb290XSc7CivojrU+J1tkb2RkZXJdJzsKK+iOvT4nW3RoaWNrZXRdJzsKK+iPgT4nW2Zsb3dlciBvZiBsZWVrIGZhbWlseV0nOwor6I+FPidbY29hcnNlIGdyYXNzXSc7Civoj4o+J1tjaHJ5c2FudGhlbXVtXSc7Civoj4w+J1ttdXNocm9vbV0nOwor6I+OPidbYmVhdXRpZnVsIGphZGVdJzsKK+iPkz4nW2ZydWl0c10nOwor6I+WPidbaXJpc10nOwor6I+YPidbY2VsZXJ5XSc7Civoj5w+J1t2ZWdldGFibGVzXSc7Civoj58+J1tkb2RkZXJdJzsKK+iPoD4nW3NwaW5hY2ggYW5kIHNpbWlsYXIgZ3JlZW5zXSc7Civoj6k+J1toZXJiXSc7Civoj6s+J1tjZWxlcnldJzsKK+iPrz4nW2Zsb3dlcnldJzsKK+iPsD4nW3dpbGQgcmljZV0nOwor6I+xPidbd2F0ZXItY2hlc3RudXRdJzsKK+iPsj4nW2ZyYWdyYW50XSc7Civoj7Q+J1tzbWFsbCBidWRkaGlzdCBtb25hc3RlcnldJzsKKyMi6I+3PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivoj7s+J1thcnRlbWlzaWFdJzsKK+iPvT4nW2JlYW5zIGFuZCBwZWFzXSc7CivokIM+J1tkZW5zZV0nOwor6JCEPidbZ3JhcGVzXSc7CivokIc+J1thdmVycmhvcmEgY2FyYW1ib2xhXSc7CivokIs+J1tsdXh1cmlhbnQgZm9saWFnZV0nOwor6JCMPidbYnVkXSc7CivokI0+J1tkdWNrd2VlZF0nOwor6JCOPidbd2l0aGVyXSc7CisjIuiQkz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6JCgPidbYnVkXSc7CisjIuiQoj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6JCpPidbc2NhbmRlbnQgaG9wXSc7CisjIuiQqj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6JCsPidbdGVuIHRob3VzYW5kXSc7CivokLE+J1tkYXktbGlseV0nOwor6JC1PidbbGV0dHVjZV0nOwor6JC4PidbZG9nd29vZF0nOwor6JC8PidbY2FseXggb2YgZmxvd2VyXSc7CivokL0+J1tmYWxsXSc7CivokYY+J1tyZXNlcnZlXSc7CivokYk+J1tsZWFmXSc7CisjIuiRjj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6JGXPidbbWFuaWZlc3RdJzsKK+iRmz4nW2VkaWJsZSBiZWFuXSc7CivokaE+J1tncmFwZXNdJzsKK+iRoj4nW2NvdmVyXSc7CivokaM+J1tkaXJlY3RdJzsKK+iRpj4nW3JlZWRdJzsKK+iRqT4nW2Zsb3dlcnNdJzsKK+iRqz4nW2JvdHRsZS1nb3VyZF0nOwor6JGsPidbYnVyeV0nOwor6JGtPidbYnVscnVzaF0nOworIyLoka0+J1tidWxydXNoXSciLAor6JGvPidbbGVhZiBvZiBhbmdlbGljYSBwbGFudF0nOwor6JGxPidbc2NhbGxpb25zXSc7CivokbU+J1tzdW5mbG93ZXJdJzsKK+iRtz4nW21lYXQgZGlldF0nOwor6JG5Pidba2luZCBvZiBjaHJ5c2FudGhlbXVtXSc7Civokbo+J1t0aGF0Y2hdJzsKK+iSgj4nW3BlZHVuY2xlIG9yIHN0ZW0gb2YgcGxhbnRzXSc7CisjIuiShD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6JKLPidbc3VybmFtZV0nOwor6JKQPidbY29sbGVjdF0nOwor6JKUPidbdHJhbnNwbGFudF0nOwor6JKZPidbY292ZXJdJzsKK+iSnD4nW2dhcmxpY10nOwor6JKfPidbYmV0ZWwgcGVwcGVyXSc7CivokqE+J1tidXJkb2NrXSc7Civokq0+J1t0byBjdXRncmFzc10nOwor6JKyPidbdHlwZSBvZiBydXNoXSc7Civokrg+J1tzdGVhbV0nOwor6JK5PidbcmVlZF0nOwor6JK7PidbcnVzaGVzXSc7Civokrw+J1tibHVlXSc7Civokr8+J1ttdWd3b3J0XSc7Civok4E+J1thYnVuZGFudF0nOwor6JOEPidbc3RvcmVdJzsKK+iThj4nW3N0cmF3IG1hdF0nOwor6JOJPidbaGliaXNjdXNdJzsKK+iTij4nW2x1eHVyaWFudCB2ZWdldGF0aW9uXSc7Civok4s+J1tjb3Zlcl0nOwor6JONPidbbWlsZm9pbF0nOwor6JOQPidbc3RyYXcgYmVkIG1hdF0nOwor6JORPidbcmFpbiBjb2F0IG1hZGUgb2Ygc3RyYXddJzsKK+iTlj4nW2Nhc3Rvci1vaWwgcGxhbnRdJzsKKyMi6JOZPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivok5o+J1tveGFsaWMgKHVzZWQgaW4gY29tcG91bmRzKV0nOwor6JOsPidbdHlwZSBvZiByYXNwYmVycnldJzsKK+iTrj4nW2xvdHVzXSc7Civok7Q+J1tlZGlibGUgd2F0ZXIgcGxhbnRdJzsKK+iTvD4nW3NtYXJ0d2VlZF0nOwor6JO/PidbY2xvdmVyXSc7CivolIA+J1tzY3JlZW5dJzsKK+iUhj4nW3dhdGVyLWNoZXN0bnV0XSc7CivolJE+J1tkaXNkYWluXSc7CivolJM+J1tjcmVlcGluZyBwbGFudHNdJzsKK+iUlD4nW3JhZGlzaF0nOwor6JSVPidbcGVkdW5jbGUgb3Igc3RlbSBvZiBwbGFudHNdJzsKK+iUlz4nW3N1Z2FyIGNhbmVdJzsKK+iUmD4nW2dpbnNlbl0nOwor6JSaPidbbHV4dXJpYW50XSc7CivolJ8+J1tmcmFtZSBvbiB3aGljaCBzaWxrd29ybXMgc3Bpbl0nOwor6JShPidbc3VybmFtZV0nOwor6JSmPidbcGFyYXNpdGljIHBsYW50c10nOwor6JSsPidbdmVnZXRhYmxlc10nOwor6JStPidbc2hhZGVdJzsKK+iUtT4nW2hpZGVdJzsKK+iUvT4nW2NvdmVyXSc7CisjIuiVgD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6JWBPidbbmV0dGxlXSc7CivolYM+J1tmb3JlaWduIHRoaW5nc10nOwor6JWIPidbbXVzaHJvb21zXSc7CivolYk+J1tiYW5hbmFdJzsKK+iVij4nW3Vub3BlbmVkIGZsb3dlcnNdJzsKK+iViz4nW3Vub3BlbmVkIGZsb3dlcnNdJzsKK+iVjj4nW2J1Y2t3aGVhdF0nOwor6JWVPidbY2FyeW9wdGVyaXMgZGl2YXJpY2F0YV0nOworIyLolZc+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+iVmD4nW2Z1ZWxdJzsKK+iVmj4nW2NhbHl4IG9mIGZsb3dlcl0nOwor6JWjPidbaGliaXNjdXNdJzsKK+iVqD4nW3B0ZXJpcyBhcXVpbGluYV0nOwor6JWpPidbcG9uZF0nOwor6JWqPidbbHV4dXJpb3VzIGdyb3d0aCBvZiB3ZWVkc10nOwor6JWtPidbY29tbW9uIGFydGVtaXNpYV0nOwor6JW3PidbeWFtXSc7Civolb4+J1tidWRzXSc7CivoloA+J1t0aGUgaGlwcHVyaXMgb3IgbWFyZScncyB0YWlsIHBsYW50XSc7CivoloQ+J1t0aGluXSc7Civoloc+J1tvc211bmRhIHJlZ2FsaXNdJzsKK+iWiD4nW2x1eHVyaWFudF0nOwor6JaKPidbY2lyY2l1bV0nOwor6JaQPidbc3BpbmFjaF0nOwor6JaRPidbZ2luZ2VyXSc7CivolpQ+J1tyb3NlXSc7Civolpc+J1tnYXJkZW5dJzsKK+iWmT4nW3dlZWRdJzsKK+iWmz4nW2tpbmQgb2YgbWFyc2ggZ3Jhc3NdJzsKK+iWnD4nW2V2ZXJncmVlbiBzaHJ1YnNdJzsKK+iWpD4nW2FsbGl1bSBiYWtlcmldJzsKK+iWpj4nW29mZmVyXSc7Civolqg+J1tkZWF0aCBvZiBwcmluY2VdJzsKK+iWqT4nW3RyYW5zbGl0ZXJhdGlvbiBvZiBcInNhdFwiIG9mIGJvZGRoaXNhdHR2YSBldGMuXSc7Civolqo+J1tmdWVsXSc7Civolqs+J1thIG1lZGljaW5hbCBoZXJiXSc7Civolqw+J1tkcnVnc10nOwor6JauPidbbWFyc2hdJzsKK+iWrz4nW3lhbV0nOwor6Ja5PidbY3lwZXJ1cyByb3R1bmR1c10nOwor6Ja6Pidbd2F0ZXItY2hlc3RudXRzXSc7Civol4E+J1tzdHJhd10nOwor6JeJPidbbWF0XSc7Civol40+J1tibHVlXSc7Civol48+J1toaWRlXSc7Civol5A+J1tkaXNyZWdhcmRdJzsKK+iXlT4nW2xvdHVzIHJvb3RdJzsKK+iXnD4nW2NoZW5vcG9kaXVtIGFsYnVtXSc7Civol50+J1thcnRdJzsKK+iXpD4nW3JhdHRhbl0nOwor6JelPidbZHJ1Z3NdJzsKK+iXqT4nW2ZlbmNlXSc7Civol6o+J1ttYXJzaF0nOwor6Je3PidbeWFtXSc7Civol7k+J1tsdXNoXSc7Civol7o+J1tydXNoIHVzZWQgaW4gbWFraW5nIG1hdHNdJzsKK+iXuz4nW3NwbGVuZGlkXSc7Civol74+J1tzaGFkZV0nOwor6JiCPidbc3RhbWVuIG9yIHBpc3RpbF0nOwor6JiGPidbcnVzaGVzXSc7CivomIc+J1t0aHltZV0nOwor6JiKPidbY29sbGVjdF0nOwor6JiLPidbYXBwbGVdJzsKK+iYkz4nW3RoeW1lXSc7CivomJY+J1tzdHVtcF0nOwor6JiXPidbc3R1bXBdJzsKK+iYmj4nW21vc3NdJzsKK+iYoj4nW3RhbGwgZ3Jhc3NdJzsKK+iYrT4nW29yY2hpZF0nOwor6JivPidbdG8gdG9zcyBhYm91dF0nOworIyLomK8+J1t0byB0b3NzIGFib3V0XSciLAor6Ji/PidbdHlwZSBvZiBjcmVlcGluZyBwbGFudF0nOwor6JmNPidbdGlnZXJdJzsKK+iZjj4nW3RpZ2VyXSc7CivomZA+J1tjcnVlbF0nOwor6JmUPidbYWN0IHdpdGggcmV2ZXJlbmNlXSc7CivomZU+J1twbGFjZV0nOwor6JmaPidbZmFsc2VdJzsKK+iZnD4nW2NhcHR1cmVdJzsKK+iZnj4nW2NvbmNlcm5lZCBhYm91dF0nOwor6JmfPidbbWFya10nOwor6JmnPidbbG9zZV0nOwor6JmrPidbaW5zZWN0c10nOwor6JmxPidbbG91c2VdJzsKK+iZuT4nW3JhaW5ib3ddJzsKK+iZuz4nW2hvcnNlZmx5XSc7Civomoo+J1ttb3NxdWl0b10nOwor6JqLPidbZ25hdF0nOwor6JqMPidbb3lzdGVyc10nOwor6JqTPidbZWFydGh3b3JtXSc7CivompU+J1tzaWxrd29ybXNdJzsKK+iaoz4nW2NlbnRpcGVkZV0nOwor6JqkPidbZmxlYV0nOwor6JqpPidbd29ybV0nOwor6JqqPidbdGFkcG9sZV0nOwor6JqrPidbYWJhbG9uZV0nOwor6JqvPidbZWFydGh3b3JtXSc7CivomrA+J1ttaWxsaXBlZGVdJzsKK+iatj4nW2tpbmQgb2YgY2xhbV0nOwor6JuEPidbbW9sZSBjcmlja2V0XSc7Civom4Y+J1ttYWdnb3RzXSc7Civom4c+J1tzbmFrZV0nOwor6JuJPidbZHJhZ29uZmx5XSc7Civom4s+J1tlZ2dzXSc7Civom40+J1tnbG93LXdvcm1dJzsKK+ibjj4nW295c3Rlcl0nOwor6JuUPidbdGFwZXdvcm1dJzsKK+ibmT4nW2Zyb2ddJzsKK+ibmz4nW3NwaWRlcl0nOwor6JuePidbc25haWxdJzsKK+ibnz4nW3NjYWx5IGRyYWdvbiB3aXRoIGZvdXIgbGVnc10nOwor6JukPidbY2xhbV0nOwor6JupPidbY3JpY2tldF0nOworIyLom6k+J1tjcmlja2V0XSciLAor6JutPidbbGVlY2hdJzsKK+ibrj4nW2JhcmJhcmlhbnNdJzsKK+ibrz4nW3NocmltcF0nOwor6Ju4PidbbG9uZyBsZWdnZWQgc3BpZGVyXSc7Civom7k+J1tjaHJ5c2FsaXNdJzsKK+ibuz4nW21vbHRdJzsKK+ibvj4nW21vdGhdJzsKK+icgD4nW25hbWUgb2YgYW4gYW5jaWVudCBzdGF0ZV0nOwor6JyCPidbYmVlXSc7CivonIM+J1ttYXJpbmUgbW9uc3RlciB3aGljaCBjYW4gY2hhbmdlIGl0cyBzaGFwZV0nOwor6JyGPidbYSB2YXJpZXR5IG9mIGJpdmFsdmVzXSc7CivonIg+J1tjZW50aXBlZGVdJzsKK+iciT4nW21heWZseV0nOwor6JyKPidbY2xhbV0nOwor6JyNPidbdG9hZF0nOwor6JyRPidbZWdnXSc7CivonJI+J1ttaWxsaXBlZGVdJzsKK+icmD4nW3NwaWRlcl0nOwor6JyaPidbY29ja3JvYWNoXSc7CivonJw+J1tob25leV0nOwor6JylPidbbGl6YXJkXSc7CivonKk+J1tjaWNhZGFdJzsKK+ictD4nW2xpemFyZF0nOwor6Jy3PidbY3JlZXAgbGlrZSB3b3JtXSc7CivonLs+J1tkcmFnb25mbHldJzsKK+icvz4nW2NyZWVwXSc7CivonYk+J1tjaWNhZGFdJzsKK+idiz4nW3dheF0nOwor6J2MPidbdGFkcG9sZV0nOwor6J2OPidbc2NvcnBpb25dJzsKK+idkz4nW3NuYWlsXSc7CivonZU+J1tuaWJibGUgYXdheV0nOwor6J2XPidba2luZCBvZiBsb2N1c3RdJzsKK+idmT4nW2JhdF0nOwor6J2fPidbaGVkZ2Vob2ddJzsKK+idoD4nW2tpbmQgb2YgYmF0XSc7CivonaM+J1ttYXlmbHldJzsKK+idpj4nW3NocmltcF0nOwor6J2oPidbbG91c2VdJzsKKyMi6J2oPidbbG91c2VdJyIsCivona4+J1t2ZW5vbW91cyBzbmFrZV0nOwor6J20PidbYnV0dGVyZmx5XSc7CivonbY+J1tidXR0ZXJmbHldJzsKK+iduD4nW3NuYWlsXSc7Civonb8+J1tmbGllc10nOwor6J6CPidbbWFudGlzXSc7Civono0+J1ttZWx0XSc7Civonp8+J1traW5kIG9mIGNhdGVycGlsbGFyXSc7CivonqI+J1tnbG93LXdvcm1dJzsKK+ieqz4nW3BvaXNvbl0nOwor6J6vPidbbmlwcGVyc10nOwor6J6zPidbbWFudGlzXSc7Civonro+J1tzcGlyYWwgc2hlbGxdJzsKK+ieuz4nW2dyeWxsb3RhbHBhIGFmcmljYW5hXSc7Civonr0+J1trYXR5ZGlkXSc7Civon4A+J1tjcmlja2V0XSc7Civon4Q+J1t0byBoaWJlcm5hdGVdJzsKK+ifhj4nW2Zyb2ddJzsKK+ifhz4nW2Zyb2ddJzsKK+ifiz4nW2NyaWNrZXRdJzsKKyMi6J+LPidbY3JpY2tldF0nIiwKK+ifkj4nW3B5dGhvbl0nOwor6J+gPidbY29pbF0nOwor6J+vPidbd29ybXNdJzsKK+ifsj4nW3dvcm1zXSc7Civon7Y+J1tyYXpvciBjbGFtXSc7Civon7c+J1ttYW50aXNdJzsKK+ifuT4nW2NyYWJdJzsKK+ifuz4nW2FudHNdJzsKK+ifvj4nW3RvYWRdJzsKK+ighT4nW2ZsaWVzXSc7CivooI0+J1tzY29ycGlvbl0nOwor6KCOPidbcHl0aG9uXSc7CivooI8+J1tjcmFiXSc7CivooJE+J1tsaXphcmRdJzsKK+iglT4nW2V1bWVuZXMgcG9saWZvbWlzXSc7CivooJY+J1ttZWFzdXJpbmcgd29ybV0nOwor6KChPidbd29vZC1ib3JpbmcgaW5zZWN0XSc7CivooKI+J1t3cmlnZ2xlXSc7CivooKM+J1tveXN0ZXJdJzsKK+igpz4nW21vdGhdJzsKK+igsT4nW3Bvc2lvbl0nOwor6KC2Pidbc2lsa3dvcm1zXSc7CivooLk+J1ttb3RoXSc7CivooLs+J1tiYXJiYXJpYW5zXSc7CivooYA+J1tibG9vZF0nOwor6KGCPidbdG8gYmUgZGVmZWF0ZWRdJzsKK+ihhD4nW2VwaXN0YXhpc10nOwor6KGGPidbbXVsdGl0dWRlXSc7CivooYw+J1tnb10nOwor6KGNPidbb3ZlcmZsb3ddJzsKK+ihkj4nW2JyYWddJzsKK+ihkz4nW2FydF0nOwor6KGXPidbc3RyZWV0XSc7CivooZk+J1twdWJsaWMgb2ZmaWNlXSc7CivooZs+J1tndWFyZF0nOwor6KGdPidbcnVzaCBhZ2FpbnN0XSc7CivooZ4+J1tndWFyZF0nOwor6KGhPidbbWVhc3VyZV0nOwor6KGiPidbaGlnaHdheV0nOwor6KGjPidbY2xvdGhlc10nOwor6KGoPidbc2hvd10nOwor6KGrPidbc2hpcnRdJzsKK+ihsD4nW2RlY2xpbmVdJzsKK+ihsj4nW21lbmRdJzsKK+ihtT4nW2NoZW1pc2VdJzsKK+ihtz4nW2hlYXJ0XSc7Civoob0+J1tsYXBlbF0nOwor6KG+PidbY292ZXJsZXRdJzsKK+ihvz4nW2NvbGxhciBvciBsYXBlbCBvZiBnYXJtZW50XSc7CivoooE+J1tyb2JlXSc7CivoooI+J1tzbGVldmVzXSc7Civooog+J1tidWRkaGlzdCBjYXNzb2NrXSc7Civooos+J1twb2NrZXRdJzsKK+iijT4nW2xvbmcgZ293bl0nOwor6KKSPidbc3RyaXBdJzsKK+iilj4nW3NsZWV2ZV0nOwor6KKXPidbdW5saW5lZCBnYXJtZW50c10nOworIyLoopk+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+iinj4nW2NlcmVtb25pYWwgZHJlc3Mgd29ybiBieSBlbXBlcm9yXSc7CivooqI+J1tyb2JlXSc7CivooqQ+J1tsb25naXR1ZGVdJzsKK+iiqz4nW3Bhc3NpdmUgaW5kaWNhdG9yIFwiYnlcIl0nOworIyLooq4+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKKyMi6KKwPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivoorE+J1twaWVjZSBvZiBjbG90aCB1c2VkIHdyYXAgYnVuZGxlc10nOwor6KK0PidbcGFudHNdJzsKK+iitT4nW2xhcGVsXSc7Civoorc+J1tsaW5lZCBnYXJtZW50XSc7Civoor8+J1tnb3duXSc7Civoo4E+J1tjdXQgb3V0XSc7Civoo4I+J1tzcGxpdF0nOworIyLoo4I+J1tzcGxpdF0nIiwKKyMi6KOCPidbc3BsaXRdJyIsCivoo4U+J1tkcmVzc10nOwor6KOPPidbaW5zaWRlXSc7Civoo5Q+J1twcm9nZW55XSc7Civoo5U+J1thYnVuZGFudF0nOwor6KOYPidbZnVyIGdhcm1lbnRzXSc7Civoo5k+J1tza2lydF0nOwor6KOcPidbbWVuZF0nOwor6KOdPidbZHJlc3NdJzsKK+ijnz4nW2EgY2Fzc29jayBvciByb2JlIG9mIGEgbW9ua10nOwor6KOhPidbaW5zaWRlXSc7Civoo6g+J1thaWRdJzsKK+ijsj4nW3dhaXN0Y29hdF0nOwor6KOzPidbY2xvdGhlc10nOwor6KO0Pidbc3VybmFtZV0nOwor6KO4PidbYmFyZV0nOwor6KO5Pidbd3JhcF0nOwor6KO8PidbdG8gdGFrZSBvZmYgb25lJydzIHRvcF0nOwor6KO9PidbbWFrZV0nOwor6KO+PidbbGFwZWxdJzsKK+ikgj4nW2phY2tldF0nOworIyLopIM+J1thIHNlYW0gaW4gYSBnYXJtZW50XSciLAor6KSHPidbcmVwZWF0XSc7CivopIo+J1tjcmFtcGVkXSc7CivopIw+J1t0cm91c2Vyc10nOwor6KSQPidbY29hcnNlIHdvb2xlbiBjbG90aF0nOwor6KSSPidbcHJhaXNlXSc7CivopJM+J1tzd2FkZGxpbmcgY2xvdGhdJzsKK+iknT4nW3VubGluZWQgZ2FybWVudF0nOworIyLopJ4+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+ikpT4nW21hdHRyZXNzXSc7CivopKo+J1tzdHJpcF0nOwor6KSrPidbc3RyaXBdJzsKK+iktj4nW3BsZWF0XSc7CivopLg+J1tsYXBlbF0nOwor6KS7PidbZGlydHldJzsKK+ilgT4nW3N3YWRkbGluZyBjbG90aGVzXSc7CivopYM+J1tjb21tZW5kXSc7CivopYQ+J1thaWRdJzsKK+iljD4nW3VubGluZWQgZ2FybWVudF0nOwor6KWNPidbbWl4ZWRdJzsKK+illj4nW291dGVyIGdhcm1lbnRzXSc7CivopZ4+J1tmb2xkXSc7CivopZ8+J1tsYXBlbF0nOwor6KWgPidbY3JvdGNoIG9yIHNlYXQgb2YgcGFudHNdJzsKK+ilpD4nW3JhZ2dlZF0nOwor6KWmPidbc2hvcnQgY29hdF0nOwor6KWqPidbc29ja3NdJzsKK+ilrT4nW3R1Y2sgdXAgaGVtIG9mIGdhcm1lbnQgYW5kIHdyYXBdJzsKK+ilrz4nW3VuZGVyd2Vhcl0nOwor6KWyPidbcmFpZF0nOwor6KW0PidbYSBvbmUgcGllY2UgZ2FybWVudF0nOworIyLopbY+J1tpZ25vcmFudF0nIiwKK+ilvj4nW2NvdmVyXSc7Civopb8+J1t3ZXN0KGVybildJzsKK+imgT4nW25lY2Vzc2FyeV0nOwor6KaDPidbcmVhY2ggdG9dJzsKK+imhj4nW2NvdmVyXSc7Civopoc+J1tydWxlIGJ5IG1pZ2h0IHJhdGhlciB0aGFuIHJpZ2h0XSc7Civopog+J1tpbnZlc3RpZ2F0ZV0nOwor6KaKPidbaGFsdGVyXSc7Civopos+J1tzZWVdJzsKK+imjz4nW3J1bGVzXSc7CivoppM+J1tzZWVrXSc7CivoppY+J1tsb29rIGF0XSc7Civoppc+J1twZWVrXSc7Civoppg+J1twZWVrXSc7Civoppo+J1t3YWtlIHVwIGZyb20gc2xlZXBdJzsKK+imoT4nW3dpemFyZF0nOwor6KamPidbZGVzaXJlIHN0cm9uZ2x5XSc7Civopqc+J1tsb29rIGF0XSc7Civopqk+J1tzZWVdJzsKK+imqj4nW3JlbGF0aXZlc10nOwor6KasPidbY292ZXRdJzsKK+imrz4nW21lZXQgb3Igc2VlIHVuZXhwZWN0ZWRseV0nOwor6KayPidbaGF2ZSBpbXBlcmlhbCBhdWRpZW5jZV0nOwor6KazPidbc2VlXSc7Civopro+J1t3YWtlIHVwIGZyb20gc2xlZXBdJzsKK+imvT4nW2xvb2sgYXRdJzsKK+imvz4nW3NlZV0nOwor6KeAPidbc2VlXSc7Civop5I+J1tob3JuXSc7Civop5o+J1tqdWddJzsKK+innD4nW2JlYWtdJzsKK+innT4nW2dvcmVdJzsKK+inoz4nW2xvb3Nlbl0nOwor6KemPidbYnV0dF0nOwor6KenPidbbG9vc2VuXSc7Civop7Q+J1t3aW5lIHZlc3NlbF0nOwor6Ke4PidbdG91Y2hdJzsKK+iogD4nW3dvcmRzXSc7CivoqII+J1tkcmF3IHVwIGFncmVlbWVudF0nOwor6KiDPidbb2JpdHVhcnldJzsKK+ioiD4nW3BsYW5dJzsKK+ioij4nW2lucXVpcmVdJzsKK+iojD4nW2NvbmZ1c2lvbl0nOwor6KiOPidbYXNrIGZvcl0nOwor6KiQPidbZXhwb3NlIG90aGVyJydzIHNlY3JldHNdJzsKK+iokz4nW3RlYWNoXSc7CivoqJY+J1tmaW5pc2hdJzsKK+iolz4nW2VudHJ1c3RdJzsKK+iomD4nW3JlY29yZF0nOwor6KibPidbc3dpbmRsZV0nOwor6KidPidbZXhwcmVzcyBzdXJwcmlzZV0nOwor6KifPidbYWNjdXNlXSc7CivoqKM+J1t0YWtlIGxlYXZlIG9mXSc7CivoqKU+J1tzbG93IG9mIHNwZWVjaF0nOwor6KiqPidbdmlzaXRdJzsKK+iorT4nW2J1aWxkXSc7CivoqLE+J1thbGxvd10nOwor6KizPidbdHJhbnNsYXRlXSc7CivoqLQ+J1thY2N1c2VdJzsKK+iotj4nW3Njb2xkIGxvdWRseV0nOwor6Ki6PidbZXhhbWluZSBwYXRpZW50XSc7CivoqLs+J1tleHBsYWluXSc7CivoqLw+J1twcm92ZV0nOwor6KmBPidbZXhlZ2VzaXNdJzsKK+iphj4nW3NsYW5kZXJdJzsKK+ipiD4nW3Njb2xkXSc7CivoqZA+J1tjaGVhdF0nOwor6KmRPidbY2hlYXRdJzsKK+ipkj4nW2JlcXVlYXRoXSc7CivoqZQ+J1tkZWNyZWVdJzsKK+iplT4nW2FwcHJhaXNlXSc7CivoqZs+J1tjdXJzZV0nOwor6KmePidbd29yZHNdJzsKK+ipoD4nW3NpbmddJzsKK+ipoj4nW2lucXVpcmUgaW50b10nOwor6KmjPidbcmVhY2hdJzsKK+ippj4nW3Rlc3RdJzsKK+ipqT4nW3BvZXRyeV0nOwor6KmrPidbYmUgc3VycHJpc2VkXSc7Civoqaw+J1thYnVzZV0nOwor6KmtPidbZGVjZWl2ZV0nOwor6KmuPidbZXhwbGFpbl0nOwor6KmwPidbcXVlc3Rpb25dJzsKK+ipsT4nW3NwZWVjaF0nOwor6KmyPidbc2hvdWxkXSc7CivoqbM+J1tkZXRhaWxlZF0nOwor6Km8PidbdGVhc2VdJzsKK+iqgj4nW3RlbXB0XSc7CivoqoQ+J1tldWxvZ2l6ZV0nOwor6KqFPidbZXhlY3V0ZV0nOwor6KqHPidbZXhhZ2dlcmF0ZV0nOwor6KqJPidbZmFtZV0nOwor6KqMPidbd3JpdGUgZG93bl0nOwor6KqNPidbcmVjb2duaXplXSc7CivoqpE+J1tkZWNlaXZlXSc7CivoqpM+J1tzd2Vhcl0nOwor6KqVPidbYmVhciBjaGlsZHJlbl0nOwor6KqYPidbcGVyc3VhZGVdJzsKK+iqmj4nW2NyaXRpY2l6ZV0nOwor6KqePidbbGFuZ3VhZ2VdJzsKK+iqoD4nW3NpbmNlcmVdJzsKK+iqoT4nW3dhcm5dJzsKK+iqoz4nW21ha2UgZmFsc2UgYWNjdXNhdGlvbl0nOwor6KqkPidbZXJyXSc7CivoqqU+J1tpbmZvcm1dJzsKK+iqpj4nW3JlY2l0ZV0nOwor6KqoPidbdGVhY2hdJzsKK+iqrD4nW3NwZWFrXSc7Civoqq0+J1tyZWFkXSc7CivoqrA+J1t3aG8/IHdob20/IHdob3NlPyBhbnlvbmU/XSc7CivoqrI+J1tsZXNzb25dJzsKK+iquT4nW3NsYW5kZXJdJzsKK+iqvD4nW2ZyaWVuZHNoaXBdJzsKK+iqvz4nW3RyYW5zZmVyXSc7Civoq4I+J1tmbGF0dGVyXSc7Civoq4Q+J1twYXRpZW50XSc7Civoq4c+J1t0YWxrXSc7Civoq4s+J1thc2tdJzsKK+irjD4nW3JlbW9uc3RyYXRlXSc7Civoq40+J1t0byBleHBvc3R1bGF0ZV0nOwor6KuPPidbY29uc3VsdF0nOwor6KuSPidbZXhjdXNlXSc7Civoq5Y+J1tkZWJhdGVdJzsKK+irmj4nWyhrb2t1amkpIGNvbW1hbmRdJzsKK+irmz4nW2ZsYXR0ZXJdJzsKK+irnD4nW2ludGVsbGlnZW5jZSByZXBvcnRdJzsKK+irnj4nW2JyYWddJzsKK+iroD4nW25vaXN5XSc7Civoq6E+J1twb3N0aHVtb3VzIG5hbWVdJzsKK+iroj4nW2pva2VzXSc7Civoq6Q+J1tob25lc3Qgc3BlZWNoXSc7Civoq6Y+J1tjYXJlZnVsXSc7Civoq6c+J1toYXJtb25pemVdJzsKK+irqz4nW3JlbW9uc3RyYXRlXSc7Civoq60+J1twcm9jbGFpbV0nOwor6KuuPidbY29uc3VsdF0nOwor6KuxPidbY29uY2VhbF0nOwor6KuzPidbdmVyc2VkIGluXSc7Civoq7c+J1tyZWNpdGVdJzsKK+iruD4nW3NldmVyYWxdJzsKK+iruj4nW3Byb3ZlcmJdJzsKK+irvj4nW3Byb21pc2VdJzsKK+isgD4nW3BsYW5dJzsKK+isgT4nW3Zpc2l0XSc7CivorII+J1tzYXldJzsKK+ishD4nW2NvcHldJzsKK+ishz4nW3N0dXR0ZXJdJzsKK+isjD4nW3NsYW5kZXJdJzsKK+isjj4nW3JpZGRsZV0nOwor6KyQPidbY2FsbV0nOwor6KyUPidbamVlcl0nOwor6KyWPidbcmlzZSB1cF0nOwor6KyXPidbc2xhbmRlcl0nOwor6KyZPidbaHVtYmxlXSc7CivorJo+J1t0byBjb25mZXIgcG9zdGh1bW91cyB0aXRsZXNdJzsKK+ismz4nW2V4cGxhaW5dJzsKK+isnT4nW3RoYW5rXSc7CivorKA+J1tzaW5nXSc7CivorKE+J1tzaW5nXSc7CivorKY+J1t0IHNwZWFrIHNvZnRseV0nOwor6KyoPidbc2NoZW1lXSc7CivorKs+J1tjaGFyZ2VdJzsKK+isrD4nW2Vycm9yXSc7CivorLM+J1tzaW5nXSc7CivorLk+J1twcnVkZW50XSc7CivorL4+J1tkZWNlaXZlXSc7CivorYE+J1tub2lzZV0nOwor6K2JPidbcHJvb2ZdJzsKK+itjD4nW2ZhbHNlXSc7CivorY4+J1tjdW5uaW5nXSc7CivorY8+J1tyaWRpY3VsZV0nOwor6K2WPidbdG8gc2xhbmRlcl0nOwor6K2YPidbcmVjb2duaXplXSc7CivorZo+J1tzdXJuYW1lXSc7CivorZs+J1t0byBzbGFuZGVyXSc7CivorZw+J1tyZWdpc3Rlcl0nOwor6K2fPidbY2xhbW9yXSc7CivoraY+J1tndWFyZF0nOwor6K2rPidbdGFsa2F0aXZlXSc7Civoraw+J1ttZXRhcGhvcl0nOwor6K2vPidbdHJhbnNsYXRlXSc7CivorbA+J1tjb25zdWx0XSc7CisjIuitsT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6K2yPidbYWxsb3ddJzsKK+ittD4nW3JlcHJpbWFuZF0nOwor6K23PidbcHJvdGVjdF0nOwor6K29PidbZmFtZV0nOwor6K6APidbcmVhZF0nOwor6K6DPidbcHJhaXNlXSc7Civoroo+J1tjaGFuZ2VdJzsKK+iujD4nW2ZlYXN0XSc7Civoro4+J1tlbmVteV0nOwor6K6QPidbZW5lbXldJzsKK+iukj4nW3NsYW5kZXJdJzsKK+iukz4nW2FsbG93XSc7CivorpY+J1twcm9waGVjeV0nOwor6K6ZPidbY2hlZXJdJzsKK+iumj4nW3ByYWlzZV0nOwor6LC3PidbdmFsbGV5XSc7CivosLo+J1t0aGUgbW91dGggb2YgYSB2YWxsZXldJzsKK+iwvz4nW3ZhbGxleV0nOwor6LGBPidbb3BlbiB1cF0nOwor6LGGPidbYmVhbnNdJzsKK+ixiD4nW2hvdz8gd2hhdD9dJzsKK+ixij4nW2FidW5kYW50XSc7CivosYw+J1twZWFzXSc7CivosY4+J1t2ZXJ0aWNhbF0nOwor6LGQPidbYWJ1bmRhbnRdJzsKK+ixlT4nW3BpZ3NdJzsKK+ixmj4nW3NtYWxsIHBpZ10nOwor6LGhPidbZWxlcGhhbnRdJzsKK+ixoj4nW2RvbWVzdGljIGFuaW1hbHNdJzsKK+ixqj4nW2JyYXZlXSc7Civosas+J1tyZWxheGVkXSc7Civosaw+J1twaWddJzsKK+ixuD4nW3JhZGljYWwgMTUzXSc7Civosbk+J1tsZW9wYXJkXSc7Civosbo+J1t3b2xmXSc7Civosbw+J1tmb3hdJzsKK+iygj4nW21hcnRlbl0nOwor6LKFPidbYnJhdmVdJzsKK+iyiT4nW2JhZGdlcl0nOwor6LKKPidbbGVvcGFyZF0nOwor6LKMPidbY291bnRlbmFuY2VdJzsKK+iyjT4nW2EgZm94LWxpa2UgYW5pbWFsXSc7Civoso4+J1tsaW9uXSc7CivospQ+J1tmb3hdJzsKK+iymD4nW3RoZSBwYW50aGVyXSc7Civosp0+J1tzZWEgc2hlbGxdJzsKK+iynj4nW3ZpcnR1b3VzXSc7CivosqA+J1tsb2FkXSc7CivosqE+J1t3ZWFsdGhdJzsKK+iyoj4nW29mZmVyIHRyaWJ1dGVdJzsKK+iypz4nW3Bvb3JdJzsKK+iyqD4nW2dvb2RzXSc7Civosqk+J1twZWRkbGVyXSc7Civosqo+J1tncmVlZHldJzsKK+iyqz4nW3N0cmluZyBvZiAxMDAwIGNvaW5zXSc7Civosqw+J1tvbmUnJ3MgcmVzcG9uc2liaWxpdHldJzsKK+iyrT4nW21hdHRlcl0nOwor6LKuPidbbnVtYmVyIHR3b10nOwor6LKvPidbc3RvcmVdJzsKK+iysD4nW2JvcnJvd10nOwor6LKyPidbcHJvcGVydHldJzsKK+iysz4nW251bWJlciB0d29dJzsKK+iytD4nW2V4cGVuc2l2ZV0nOwor6LK2PidbZGVjcmVhc2VdJzsKK+iytz4nW2J1eV0nOwor6LK4PidbbGVuZF0nOwor6LK7PidbZXhwZW5zZXNdJzsKK+iyvD4nW3Bhc3RlIHRvXSc7Civosr0+J1tnaXZlIHRvXSc7Civosr8+J1t0cmFkZV0nOwor6LOAPidbY29uZ3JhdHVsYXRlXSc7Civos4E+J1tmb3JnZSBhaGVhZF0nOwor6LOCPidbYnJpYmVdJzsKK+izgz4nW3JlbnRdJzsKK+izhD4nW2JyaWJlXSc7Civos4c+J1twcm9wZXJ0eV0nOwor6LOIPidbc3VybmFtZV0nOwor6LOKPidbdGhpZWZdJzsKK+izjT4nW2Jvb3R5XSc7Civos44+J1ttZWFuXSc7Civos5E+J1tyZWxpZXZlXSc7Civos5M+J1tndWVzdF0nOwor6LOaPidbZ2l2ZV0nOwor6LObPidbaGVscF0nOwor6LOcPidbZ2l2ZV0nOwor6LOePidbcmV3YXJkXSc7Civos6A+J1tpbmRlbW5pZnldJzsKK+izoj4nW3ZpcnR1b3VzXSc7Civos6M+J1tzZWxsXSc7Civos6Q+J1ttZWFuXSc7Civos6Y+J1t0YXhdJzsKK+izqj4nW21hdHRlcl0nOwor6LOtPidbYmV0XSc7Civos7o+J1ttYWtlIG1vbmV5XSc7Civos7s+J1tnaWZ0IG9mIG1vbmV5IGhlbHAgcGF5IGZ1bmVyYWxdJzsKK+izvD4nW2J1eV0nOwor6LO9PidbY29tcGV0ZV0nOwor6LSEPidbZ2lmdCBzdXBlcmlvcl0nOwor6LSFPidbdW5uZWNlc3NhcnldJzsKK+i0hz4nW2FmZmFibGVdJzsKK+i0iD4nW2dpdmUgcHJlc2VudF0nOwor6LSKPidbaGVscF0nOwor6LSLPidbZmFsc2VdJzsKK+i0jT4nW3N1cHBvcnRdJzsKK+i0jz4nW3dpbl0nOwor6LSQPidbZmFyZXdlbGwgcHJlc2VudF0nOwor6LSTPidbYm9vdHldJzsKK+i0lD4nW3N0cm9uZ10nOwor6LSWPidbYnV5XSc7CivotaQ+J1tyZWRdJzsKK+i1pj4nW2ZvcmdpdmVdJzsKK+i1pz4nW2JsdXNoXSc7Civotas+J1ticmlnaHRdJzsKK+i1rT4nW3JlZGRpc2ggYnJvd25dJzsKK+i1sD4nW3dhbGtdJzsKK+i1sT4nW3dhbGtdJzsKK+i1sz4nW2dyYW5kXSc7CivotbQ+J1tnbyB0b10nOwor6LW3PidbcmlzZV0nOwor6LaBPidbdGFrZSBhZHZhbnRhZ2Ugb2ZdJzsKK+i2hT4nW2p1bXAgb3Zlcl0nOwor6LaKPidbZXhjZWVkXSc7Civotpk+J1tzdXJuYW1lXSc7CivotqM+J1t3aGF0IGF0dHJhY3RzIG9uZScncyBhdHRlbnRpb25dJzsKK+i2qD4nW2hhc3Rlbl0nOwor6LazPidbZm9vdF0nOwor6La6Pidbc2l0IGNyb3NzLWxlZ2dlZF0nOwor6La+PidbdG9lXSc7Civot4I+J1tjcmVlcGluZ10nOwor6LeLPidbZ28gYnkgZm9vdF0nOwor6LeMPidbc3R1bWJsZV0nOwor6LePPidbc2l0IGNyb3NzLWxlZ2dlZF0nOwor6LeWPidbc29sZSAob2YgdGhlIGZvb3QpXSc7Civot5o+J1tzdGFnZ2VyXSc7Civot5s+J1tsYW1lXSc7Civot50+J1tkaXN0YW5jZV0nOwor6LefPidbaGVlbF0nOwor6LehPidbc2VhcmNoXSc7Civot6M+J1tiYXJlIGZvb3RlZF0nOwor6LeoPidbc3RyYWRkbGVdJzsKK+i3qj4nW2tuZWVsXSc7Civot6s+J1tzb3VuZCBvZiBmb290c3RlcHNdJzsKK+i3rz4nW3JvYWRdJzsKK+i3sz4nW2p1bXBdJzsKK+i3tT4nW3RyYW1wbGVdJzsKK+i3vD4nW2JlbnRdJzsKKyMi6Le/PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivouIg+J1tuZWdsZWN0XSc7CivouIk+J1tob3BdJzsKK+i4ij4nW2xlYXBdJzsKK+i4jz4nW3N0ZXAgb25dJzsKK+i4kD4nW3RyYW1wbGVdJzsKK+i4nT4nW2Fua2xlXSc7CivouJ4+J1tjcm91Y2hdJzsKK+i4nz4nW2hlc2l0YXRlXSc7CivouKo+J1tmb290cHJpbnRzXSc7CivouLA+J1tleGNlZWRdJzsKK+i4tD4nW2xlYXBdJzsKK+i4tT4nW2hlZWxdJzsKK+i5gj4nW3RyYW1wbGUgdW5kZXIgZm9vdF0nOwor6LmEPidbaG9vZl0nOwor6LmHPidbbGFtZV0nOwor6LmIPidbc3RhbXAgZmVldF0nOwor6LmJPidbZXJyb3JdJzsKK+i5ij4nW2Zvb3RwYXRoXSc7CivouYw+J1t3YWxrIHJhcGlkbHldJzsKK+i5kD4nW3Rha2Ugc2hvcnQgc3RlcHNdJzsKK+i5lT4nW2NsZWFyIHdheV0nOwor6LmZPidbdXJnZW50XSc7CivouZ8+J1t0cmFjZV0nOwor6LmgPidbc3RlcCBvbl0nOwor6LmjPidbdG8ganVtcCBvdmVyXSc7CivouaQ+J1tmb290cHJpbnRzXSc7CivoubI+J1tzcXVhdF0nOwor6Lm0Pidba2lja10nOwor6Lm2Pidbc3R1bWJsZV0nOwor6Lm8Pidbd2ViYmVkIGZlZXQgb2Ygd2F0ZXJmb3dsXSc7CivouoE+J1t0ZW5zZV0nOwor6LqEPidbY3JpcHBsZV0nOwor6LqFPidbd2FsayBjYXJlZnVsbHldJzsKK+i6hz4nW2hlc2l0YXRlXSc7Civouoo+J1toZXNpdGF0ZV0nOwor6LqLPidbYXNjZW5kXSc7Civouo0+J1tza2lwXSc7CivoupE+J1t3YXZlcl0nOwor6LqTPidbc3R1bWJsZV0nOwor6LqUPidbZm9sbG93IGluXSc7Civoupk+J1t0cmFtcGxlIGRvd25dJzsKK+i6oT4nW3RyZWFkXSc7Civouqo+J1t0cmFtcGxlIGRvd25dJzsKK+i6qz4nW2JvZHldJzsKK+i6rD4nW2JvZHldJzsKK+i6rz4nW2JvZHldJzsKK+i6sD4nW2JvZHldJzsKK+i6sT4nW2hpZGVdJzsKKyMi6Lq6PidbbGllIGRvd25dJyIsCisjIui7hD4nW3RvIGdvdmVybl0nIiwKK+i7hj4nW2JvZHldJzsKKyMi6LuGPidbYm9keV0nIiwKK+i7ij4nW2NhcnRdJzsKK+i7iz4nW2NydXNoIGJ5IHdlaWdodF0nOwor6LuMPidbdHJhY2tdJzsKK+i7jT4nW2FybXldJzsKK+i7kj4nW2NhcnJpYWdlXSc7Civou5s+J1t5b2tlXSc7Civou58+J1tzb2Z0XSc7Civou6I+J1tzaGlmdF0nOwor6LujPidbcnVtYmxlXSc7Civou6s+J1tjcm9zcyBib2FyZCBhdCByZWFyIG9mIGNhcnJpYWdlXSc7Civou7g+J1theGxlXSc7Civou7s+J1theGxlXSc7Civou7w+J1tydXNoIGZvcnRoXSc7Civou70+J1tsaWdodF0nOwor6Lu+PidbaG9yaXpvbnRhbCB3b29kZW4gYmFyIGluIGZyb250IG9mIGEgc2VkYW4gY2hhaXJdJzsKK+i8gz4nW2NvbXBhcmVdJzsKK+i8hT4nW2NoYXJpb3RdJzsKK+i8iT4nW2xvYWRdJzsKK+i8ij4nW2xvdyByZWFyIHBvcnRpb24gb2YgY2FydF0nOwor6LyMPidbbnVtZXJhcnkgYWRqdW5jdCBmb3IgdmVoaWNsZXNdJzsKK+i8kj4nW3NpZGVzIG9mIGNoYXJpb3Qgd2hlcmUgd2VhcG9uc10nOwor6LyTPidbbW91cm5dJzsKK+i8lD4nW2NoZWVrIGJvbmVdJzsKK+i8lT4nW2xpZ2h0XSc7CivovJk+J1tzaWRlcyBvZiBjaGFyaW90IHdlcmUgd2VhcG9uc10nOwor6LybPidbbnVtZXJhcnkgYWRqdW5jdCBmb3IgdmVoaWNsZXNdJzsKK+i8nD4nW3N1cHBseSBjYXJ0XSc7CivovJ0+J1ticmlnaHRuZXNzXSc7CivovJ8+J1tzdG9wXSc7CivovKY+J1toYW5kLWNhcnRdJzsKK+i8qT4nW2dlbmVyYXRpb25dJzsKK+i8qj4nW3doZWVsXSc7CivovK8+J1tnYXRoZXIgdXBdJzsKK+i8sz4nW2h1YnMgb2Ygd2hlZWxdJzsKK+i8uD4nW3RyYW5zcG9ydF0nOwor6Ly5PidbdHdvIHBpZWNlcyBvZiB3b29kIHVuZGVybmVhdGggY2FdJzsKK+i8uz4nW3Nwb2tlcyBvZiB3aGVlbF0nOwor6Ly+PidbdHVybiBvdmVyXSc7CivovL8+J1tjYXJ0XSc7CivovYI+J1todWIgb2Ygd2hlZWxdJzsKK+i9hD4nW2xpbmNocGluIG9mIHdoZWVsXSc7CivovYU+J1theGxlXSc7CivovYY+J1t3aW5kbGFzc10nOwor6L2JPidbc2hpZnRdJzsKK+i9jD4nW3NsZWRdJzsKK+i9jT4nW3dhZ29uIHJ1dHNdJzsKK+i9jj4nW3NlZGFuLWNoYWlyXSc7CivovZc+J1tmYWlsXSc7CivovZw+J1toZWFyc2VdJzsKK+i9nz4nW3J1bWJsZV0nOwor6L2hPidbYnJpZGxlIG9mIGhvcnNlXSc7CivovaI+J1tydW4gb3ZlciBzb21ldGhpbmcgd2l0aCB2ZWhpY2xlXSc7CisjIui9oz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6L2kPidbcHVsbGV5XSc7Civovps+J1tiaXR0ZXJdJzsKK+i+nD4nW2NyaW1lXSc7Civovp4+J1t3b3Jkc10nOwor6L6fPidbbGF3XSc7CivovqM+J1twZXBwZXJ5XSc7Civovqc+J1ttYW5hZ2VdJzsKK+i+qD4nW2Rpc3Rpbmd1aXNoXSc7Civovq0+J1t3b3Jkc10nOwor6L6uPidbYnJhaWRdJzsKK+i+rz4nW2Rpc3B1dGVdJzsKK+i+sD4nW2Vhcmx5IG1vcm5pbmddJzsKK+i+sT4nW2h1bWlsaWF0ZV0nOwor6L6yPidbYWdyaWN1bHR1cmVdJzsKK+i+tz4nW3Ntb290aF0nOwor6L66PidbZWRnZV0nOwor6L67PidbY3Jvc3Nyb2Fkc10nOwor6L68PidbY3Jvd2QgaW50b10nOwor6L6/PidbZm9sbG93XSc7Civov4I+J1tkb2N0cmluYWlyZV0nOwor6L+EPidbZXh0ZW5kXSc7Civov4U+J1txdWlja10nOwor6L+OPidbcmVjZWl2ZV0nOwor6L+RPidbbmVhcl0nOwor6L+UPidbcmV0dXJuXSc7Civov5o+J1t2ZXJ5XSc7Civov6I+J1tmYXJdJzsKK+i/pT4nW2Rpc3RhbnRdJzsKK+i/pj4nW2NoYXJhY3RlciBmb3IgdHJhbnNsaXRlcmF0aW9uXSc7Civov6k+J1tiZSBuZWFyXSc7Civov6o+J1tlbmxpZ2h0ZW5dJzsKK+i/qz4nW2NvZXJjZV0nOwor6L+tPidbcmVwZWF0ZWRseV0nOwor6L+vPidbZXNjYXBlXSc7Civov7A+J1tuYXJyYXRlXSc7Civov7Q+J1tyZXZvbHZlXSc7Civov7c+J1tiZXdpdGNoXSc7Civov7g+J1tndXNoIG91dF0nOwor6L+5PidbdHJhY2VzXSc7Civov7o+J1t0aGVuXSc7Civov70+J1twdXJzdWVdJzsKK+mAgD4nW3N0ZXAgYmFja10nOwor6YCBPidbc2VlIG9mZl0nOwor6YCDPidbZXNjYXBlXSc7CivpgIU+J1ttZWV0IHVuZXhwZWN0ZWRseV0nOwor6YCGPidbZGlzb2JleV0nOwor6YCLPidbZmxlZV0nOwor6YCNPidbcmFtYmxlXSc7CivpgI4+J1tzdHJvbmddJzsKK+mAjz4nW3BlbmV0cmF0ZV0nOwor6YCQPidbY2hhc2VdJzsKK+mAkT4nW2NvbGxlY3RdJzsKK+mAkz4nW2hhbmQgb3Zlcl0nOwor6YCUPidbd2F5XSc7CivpgJU+J1twYXNzIGJ5XSc7CivpgJY+J1tmYXJdJzsKK+mAlz4nW3RlbXB0XSc7CivpgJk+J1t0aGlzXSc7CivpgJo+J1twYXNzIHRocm91Z2hdJzsKK+mAnT4nW3Bhc3MgYXdheV0nOwor6YCePidbaW5kdWxnZSBvbmVzZWxmXSc7CivpgJ8+J1txdWlja10nOwor6YCgPidbY29uc3RydWN0XSc7CivpgKE+J1tyZXRyZWF0XSc7CivpgKI+J1tjb21lIHVwb25dJzsKK+mAoz4nW2pvaW5dJzsKKyMi6YCmPidbbWVhbmRlcmluZ10nIiwKK+mArj4nW3NlaXplXSc7CivpgLE+J1t3ZWVrXSc7CivpgLI+J1thZHZhbmNlXSc7CivpgLU+J1t0aG9yb3VnaGZhcmVdJzsKK+mAtj4nW3dpbmRpbmddJzsKK+mAuD4nW2ZsZWVdJzsKK+mAuT4nW2Fycml2ZSBhdF0nOwor6YC8PidbY29tcGVsXSc7CivpgL4+J1tnbyBvdmVyXSc7CivpgYE+J1toaWRlXSc7CivpgYI+J1tjb21wbHkgd2l0aF0nOwor6YGFPidbbGF0ZV0nOwor6YGHPidbbWVldF0nOwor6YGJPidbc3B5XSc7CivpgYo+J1t3YW5kZXJdJzsKK+mBiz4nW2x1Y2tdJzsKK+mBjT4nW2V2ZXJ5d2hlcmVdJzsKK+mBjj4nW3Bhc3NdJzsKK+mBjz4nW3N0b3BdJzsKK+mBkD4nW2FmYXJdJzsKK+mBkT4nW2xlaXN1cmVdJzsKK+mBkj4nW3N0cm9uZ10nOwor6YGTPidbcGF0aF0nOwor6YGUPidbYXJyaXZlIGF0XSc7CivpgZU+J1tkaXNvYmV5XSc7CisjIumBlT4nW2Rpc29iZXldJyIsCivpgZg+J1t0byBtZWV0XSc7CivpgZk+J1tmYXIgYXdheV0nOwor6YGcPidbaHVtYmxlXSc7CivpgZ4+J1toYW5kIG92ZXJdJzsKK+mBoD4nW2Rpc3RhbnRdJzsKK+mBoT4nW2dvIHVwc3RyZWFtXSc7CivpgaM+J1tzZW5kXSc7CivpgaU+J1tmYXIgYXdheV0nOwor6YGoPidbcmFtYmxlXSc7Civpgak+J1ttYXRjaF0nOwor6YGtPidbY29tZSBhY3Jvc3NdJzsKK+mBrj4nW2NvdmVyXSc7Civpga8+J1tkZWNlaXZlXSc7CivpgbI+J1tsYXRlXSc7CivpgbU+J1tvYmV5XSc7CivpgbY+J1tlbnR3aW5lXSc7Civpgbc+J1ttb3ZlXSc7Civpgbg+J1tjaG9vc2VdJzsKK+mBuj4nW2xvc2VdJzsKK+mBvD4nW2Rpc3RhbnRdJzsKK+mBvT4nW3N1ZGRlbmx5XSc7Civpgb8+J1thdm9pZF0nOwor6YKAPidbaW52aXRlXSc7CivpgoE+J1t0YWtlIGEgYmlnIHN0cmlkZV0nOwor6YKCPidbdW5leHBlY3RlZCBtZWV0aW5nXSc7CivpgoM+J1twcm9mb3VuZF0nOwor6YKEPidbc3RpbGxdJzsKK+mChz4nW2JlIG5lYXJdJzsKK+mCiT4nW2VkZ2VdJzsKK+mCij4nW2VkZ2VdJzsKK+mCjz4nW3BhdHJvbF0nOwor6YKRPidbYXJlYV0nOwor6YKjPidbdGhhdF0nOwor6YKmPidbbmF0aW9uXSc7Civpgqg+J1t2aWxsYWdlXSc7Civpgqo+J1t3cm9uZ10nOwor6YKvPidbY2l0eSBpbiBoZWJlaSBwcm92aW5jZV0nOwor6YKxPidbc3VybmFtZV0nOwor6YK1Pidbc3VybmFtZV0nOwor6YK4Pidbb2ZmaWNpYWwgcmVzaWRlbmNlXSc7Civpg4E+J1tzd2VldCBzbWVsbGluZ10nOwor6YOKPidbc3VidXJic10nOwor6YOOPidbZ2VudGxlbWFuXSc7Civpg5s+J1tvdXRlciB3YWxscyBvZiBjaXR5XSc7Civpg6E+J1thZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbl0nOwor6YOiPidbc3RhdGUgaW4gdG9kYXknJ3MgaHViZWkgcHJvdmluY2VdJzsKK+mDpD4nW2NyYWNrXSc7Civpg6g+J1twYXJ0XSc7Civpg60+J1tvdXRlciBwYXJ0IChvZiBhIGNpdHkpXSc7Civpg7U+J1twb3N0YWxdJzsKK+mDtz4nW2NvdW50cnldJzsKK+mDvT4nW21ldHJvcG9saXNdJzsKK+mEgj4nW2h1YmVpIHByb3ZpbmNlXSc7CivphJI+J1tuYW1lIG9mIGFuIGFuY2llbnQgc3RhdGVdJzsKK+mEmT4nW21lYW5dJzsKK+mErT4nW3N0YXRlIGluIHRvZGF5JydzIGhlbmFuXSc7CivphLA+J1tuZWlnaGJvcl0nOwor6YSyPidbY291bnR5IGluIGhlYmVpIHByb2luY2V2XSc7CivphYk+J1t0ZW50aCBpbiBzZXJpZXMgb2YgdHdlbHZlIGN5Y2xpY10nOwor6YWKPidbZHJ1bmtdJzsKK+mFiz4nW2NoaWVmIG9mIHRyaWJlXSc7CivphYw+J1tzZXJ2ZSB3aW5lXSc7CivphY0+J1ttYXRjaF0nOwor6YWOPidbZG91YmxlLWZlcm1lbnRlZCB3aW5lXSc7CivphZI+J1t3aW5lXSc7CivphZQ+J1tpbnRveGljYXRlZF0nOwor6YWWPidbd2luZSB3aXRoIGJpcmQgcG9pc29uIGFkZGVkXSc7CisjIumFmD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6YWiPidbdG9hc3Qgb25lJydzIGhvc3Qgd2l0aCB3aW5lXSc7CivphaM+J1tlbmpveSBpbnRveGljYW50c10nOwor6YWlPidbYnV0dGVyXSc7Civphak+J1tkcnVua10nOwor6YWqPidbY3JlYW1dJzsKK+mFrD4nW3RvYXN0XSc7CivphbI+J1toYW5nb3Zlcl0nOworIyLphbI+J1toYW5nb3Zlcl0nIiwKK+mFtT4nW3llYXN0XSc7Civphbc+J1tzdHJvbmddJzsKK+mFuD4nW3RhcnRdJzsKKyMi6YaBPidbYSBraW5kIG9mIGdyZWVuLWNvbG9yZWQgd2luZV0nIiwKK+mGhz4nW3JpY2hdJzsKK+mGiT4nW2ludG94aWNhdGVkXSc7Civphos+J1t2aW5lZ2FyXSc7Civpho0+J1tlc3NlbnRpYWwgb2lsIG9mIGJ1dHRlcl0nOwor6YaQPidbcHVyZXN0IGNyZWFtXSc7CivphpI+J1t3YWtlIHVwXSc7Civphpc+J1t0byBicmV3IGZvciB0aGUgc2Vjb25kIHRpbWVdJzsKK+mGnD4nW3VnbHkgbG9va2luZ10nOwor6YaiPidbbWluY2VkIHBpY2tsZWQgbWVhdF0nOwor6YakPidbYW55IGphbS1saWtlIG9yIHBhc3RlLWxpa2UgZm9vZF0nOwor6YaqPidbdW5jbGVhciB3aW5lXSc7Civphqs+J1tjdXJlXSc7Civphq8+J1t2aW5lZ2FyXSc7CivphrQ+J1tzd2VldCB3aW5lXSc7CivphrU+J1tjb250cmlidXRlIGZvciBkcmlua3NdJzsKK+mGuD4nW2JyZXddJzsKK+mGuj4nW2dldCBkcnVua10nOwor6YeAPidbYnJld10nOwor6YeBPidbc21lYXIgd2l0aCBibG9vZCBpbiBzYWNyaWZpY2VdJzsKK+mHhj4nW2Rpc3Rpbmd1aXNoXSc7Civph4c+J1tjb2xsZWN0XSc7Civph4g+J1tpbnRlcnByZXRlXSc7Civph4k+J1tnbGF6ZV0nOwor6YeLPidbaW50ZXJwcmV0ZV0nOwor6YeMPidbdW5pdCBvZiBkaXN0YW5jZV0nOwor6YeNPidbaGVhdnldJzsKK+mHjj4nW29wZW4gY291bnRyeV0nOwor6YePPidbbWVhc3VyZV0nOwor6YeQPidbbWFuYWdlXSc7Civph5E+J1tnb2xkXSc7Civph5Y+J1trbmlmZV0nOwor6YeYPidbbmFpbF0nOworIyLph5s+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+mHnD4nW2NhdWxkcm9uXSc7Civph50+J1tuZWVkbGVdJzsKKyMi6YefPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivph6E+J1tjYXVsZHJvbl0nOwor6YejPidbZmlzaF0nOwor6YemPidbYnV0dG9uXSc7Civph6c+J1ticmFjZWxldF0nOwor6Ye1Pidbb3JuYW1lbnRhbCBoYWlycGluXSc7CisjIumHtj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6Ye8Pidbc3dvcmRdJzsKKyMi6Ye/PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpiI0+J1tibHVudF0nOwor6YiOPidbaG9va10nOwor6YiRPidbcGxhdGVdJzsKK+mIlD4nW3BhcGVyIG1vbmV5XSc7CivpiJU+J1tidXR0b25dJzsKK+mInj4nW3VuaXQgb2YgbWVhc3VyZSBlcXVpdmFsZW50IHRoaXJ0XSc7CivpiKk+J1tmaXJlcGxhY2VdJzsKK+mIrD4nW2JlbGxdJzsKK+mItD4nW2JlbGxdJzsKK+mItz4nW2NvYmFsdF0nOwor6Yi/PidbaGFpcnBpbl0nOwor6YmEPidbaXJvbl0nOwor6YmFPidbc3RlZWxdJzsKK+mJiD4nW3RoYWxsaXVtXSc7CivpiYk+J1tkZXZpY2UgZm9yIGNhcnJ5aW5nIGEgdHJpcG9kXSc7CivpiYs+J1tjYXJwZW50ZXInJ3MgcGxhbmVdJzsKKyMi6YmQPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpiZc+J1twaW5jZXJzXSc7CivpiZo+J1tyaXZldF0nOwor6YmbPidbbGVhZCBwbHVtYnVtXSc7CivpiZ4+J1ticm9hZC1heGVdJzsKK+mJoj4nW2VhcnRoZW53YXJlIGJhc2luXSc7CivpiaQ+J1tob29rXSc7CivpiaY+J1traW5kIG9mIGdvbmcgdXNlZCBpbiBhbmNpZW50IHRpbV0nOwor6YmxPidbbWluZV0nOwor6Ym+Pidbc3BlYXJdJzsKK+mKgD4nW3NpbHZlcl0nOwor6YqDPidbYW5jaWVudCB3ZWFwb25dJzsKK+mKhT4nW2NvcHBlcl0nOwor6YqRPidbbWlsbF0nOwor6YqTPidbd2VpZ2hdJzsKK+mKlT4nW2lyb25dJzsKK+mKlj4nW3VuaXQgb2Ygd2VpZ2h0XSc7Civpipg+J1tpbnNjcmliZV0nOwor6YqaPidbbGFyZ2UgaG9lXSc7Civpips+J1tzaGFycF0nOwor6YqcPidbYml0XSc7Civpiq0+J1ttb25leV0nOwor6Yq3PidbbWVsdF0nOwor6Yq5PidbcnVzdF0nOwor6YuPPidbdG9uZ3NdJzsKK+mLkj4nW3BvaW50IG9mIHNwZWFyXSc7Civpi6Q+J1tob2VdJzsKK+mLqT4nW3BvaW50IG9mIHN3b3JkXSc7Civpi6o+J1tzcHJlYWQgb3V0XSc7Civpi60+J1tzaGFycF0nOwor6YuyPidbcml2ZXRdJzsKK+mLsz4nW21lbHRdJzsKK+mLuD4nW2Egc2F3XSc7CisjIumLuj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6Yu8Pidbc3RlZWxdJzsKK+mMhj4nW3RoZSBjb2xvciBvZiBhIG1pbmVyYWxdJzsKK+mMjz4nW3NvZnQgc3RlZWxdJzsKK+mMkD4nW2dpbWxldF0nOwor6YyYPidbYmFsYW5jZSB3ZWlnaHQgb24gc2NhbGVdJzsKK+mMmT4nWzggb3pdJzsKK+mMmj4nW2NsYW5naW5nIHNvdW5kXSc7CivpjKA+J1tzcGluZGxlXSc7CivpjKI+J1ttb25leV0nOworIyLpjKM+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+mMpj4nW2Jyb2NhZGVdJzsKK+mMqD4nW2FuY2hvcl0nOwor6YyrPidbdGluXSc7CivpjKw+J1tzbWVsdCBtZXRhbHNdJzsKK+mMrj4nW3J1biBtZXRhbCBpbnRvIGNyYWNrc10nOwor6YyvPidbZXJyb3JdJzsKK+mMsj4nW2NvcHldJzsKKyMi6Yy1PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCisjIumMuj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAorIyLpjLs+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKKyMi6Y2EPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpjYs+J1tjb29raW5nLXBvdF0nOwor6Y2NPidbcGxhdGVdJzsKK+mNlD4nW2hpZ2hdJzsKKyMi6Y2WPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpjZs+J1tmb3JnZSBtZXRhbF0nOworIyLpjZw+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+mNoD4nW3dlYXBvbl0nOwor6Y2sPidbc2hvdmVsXSc7Civpja4+J1ticmFzc10nOwor6Y21PidbZG9vciBib2x0XSc7Civpjbw+J1tuZWVkbGVdJzsKK+mNvj4nW2N1cF0nOwor6Y6MPidbc2lja2xlXSc7CivpjpQ+J1tmdXNlXSc7CivpjpY+J1tsb2NrXSc7Civpjpc+J1tyaWZsZV0nOwor6Y6aPidbaGFtbWVyXSc7Civpjqc+J1thcm1vcl0nOwor6Y6sPidbc3RvdmVdJzsKK+mOrT4nW3Rvd25dJzsKK+mOrj4nW3Rvd25dJzsKK+mOsD4nW21lYXN1cmUgb2Ygd2VpZ2h0IGZvciBnb2xkXSc7CisjIumOuT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6Y+DPidbYXJyb3doZWFkXSc7Civpj4g+J1tjaGFpbl0nOwor6Y+QPidbcHVyZSBnb2xkXSc7Civpj5E+J1tkeXNwcm9zaXVtIHRoZSBiYXJiIG9mIGFuIGFycm93XSc7Civpj5Y+J1tmaWdodCBlbmRdJzsKK+mPlz4nW3N0cmlrZV0nOwor6Y+YPidbdGlua2xlXSc7Civpj50+J1t0cm93ZWxdJzsKK+mPoT4nW21pcnJvcl0nOwor6Y+kPidbY2FydmVdJzsKK+mPpT4nW3J1c3RdJzsKK+mPqD4nW2VuZ3JhdmluZyB0b29sXSc7CivpkIM+J1tjeW1iYWxzXSc7CivpkIc+J1t2YW5hZGl1bV0nOwor6ZCQPidbZmV0dGVyc10nOwor6ZCTPidbZmVycnVsZV0nOwor6ZCUPidbZGFnZ2VyXSc7CivpkJg+J1tjbG9ja10nOwor6ZCZPidbbGFtcF0nOwor6ZCaPidbc29mdCBzdGVlbF0nOwor6ZChPidbaXJvbl0nOwor6ZCrPidbZW5ncmF2aW5nIHRvb2xdJzsKK+mQtT4nW2lyb25dJzsKK+mQtj4nW21ldGFsIHJpbmddJzsKK+mQuD4nW2JlbGxdJzsKK+mQuj4nW2ZyeWluZyBwYW5dJzsKKyMi6ZGBPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpkYQ+J1ttZWx0XSc7CivpkZE+J1ttaXJyb3JdJzsKK+mRkj4nW21pcnJvcl0nOwor6ZGTPidbc3BlYXJdJzsKK+mRmj4nW2RyaWxsXSc7CivpkZs+J1ttaW5lXSc7CivpkZ4+J1tzb2xkZXJdJzsKK+mRoD4nW21lbHRdJzsKK+mRoj4nW2ZpbGVdJzsKK+mRqj4nW2ZpcmVwbGFjZV0nOwor6ZGwPidba2V5XSc7CivpkbU+J1tqYXJdJzsKK+mRtz4nW3R3ZWV6ZXJzXSc7Civpkbw+J1tnb25nXSc7Civpkb0+J1tkcmlsbF0nOwor6ZG+PidbYmVsbHMgaHVuZyBvbiBob3JzZV0nOwor6ZG/PidbY2hpc2VsXSc7CivpkoE+J1thIG1hdHRvY2tdJzsKK+mVtz4nW2xvbmddJzsKK+mWgD4nW2dhdGVdJzsKK+mWgj4nW2JvbHRdJzsKK+mWgz4nW2ZsYXNoXSc7Civploc+J1tzaHV0XSc7Civplok+J1tzaHV0XSc7CisjIumWiT4nW3NodXRdJyIsCivplos+J1tvcGVuXSc7Civplo8+J1tpbnRlcmNhbGFyeV0nOwor6ZaRPidbZmVuY2VdJzsKK+mWkz4nW2ludGVydmFsXSc7CivplpQ+J1ttb3Vybl0nOworIyLplpQ+J1ttb3Vybl0nIiwKK+mWmD4nW3NsdWljZV0nOwor6ZaZPidbcXVhcnJlbF0nOwor6ZagPidbaW50ZXJjYWxhcnldJzsKK+mWoj4nW2Zyb250aWVyIHBhc3NdJzsKK+mWoz4nW2NoYW1iZXJdJzsKK+mWpD4nW3NtYWxsIHNpZGUgZG9vcl0nOwor6ZalPidbcG93ZXJmdWwgYW5kIGluZmx1ZW50aWFsIGdyb3VwXSc7Civplqc+J1tib2lzdGVyb3VzXSc7Civplqg+J1tzbWFsbCBlbnRyYW5jZV0nOwor6ZatPidbdmlsbGFnZSBvZiB0d2VudHktZml2ZSBmYW1pbGllc10nOwor6ZayPidbZXhhbWluZV0nOwor6Za5PidbY2FzdHJhdGVdJzsKK+mWuz4nW3ZpbGxhZ2UgZ2F0ZV0nOwor6Za8PidbYmxvY2tdJzsKK+mWvj4nW3RocmVzaG9sZF0nOwor6ZeDPidbYWxvbmVdJzsKK+mXhz4nW2Nsb3NlXSc7Civpl4o+J1ticm9hZF0nOwor6ZeMPidbZG9vciBzY3JlZW5dJzsKK+mXjT4nW3Rvd2VyIG92ZXIgY2l0eSBnYXRlXSc7Civpl5Q+J1tjbG9zZV0nOwor6ZeVPidbd2F0Y2ggdG93ZXJdJzsKK+mXlj4nW3J1c2ggaW5dJzsKK+mXmD4nW3N0cnVnZ2xlXSc7Civpl5w+J1tmcm9udGllciBwYXNzXSc7Civpl6E+J1tleHBsYWluXSc7Civpl6I+J1tvcGVuXSc7Civpl6U+J1tkb29yXSc7CivpmJw+J1ttb3VuZF0nOwor6ZihPidbZm9vdHBhdGhzIGJldHdlZW4gZmllbGRzXSc7CivpmKg+J1tpbiBkaXN0cmVzc10nOwor6ZiqPidbaGlsbHNpZGUgZmFybWxhbmRdJzsKK+mYrj4nW2FuY2llbnQgbXVzaWNhbCBpbnN0cnVtZW50OiBzdXJuYW1lXSc7CivpmK8+J1tmb3VuZGF0aW9uXSc7CivpmLI+J1tkZWZlbmRdJzsKK+mYuz4nW2ltcGVkZV0nOwor6Zi/PidbcHJlZml4IHRvIG5hbWVdJzsKK+mZgD4nW3N0ZWVwIGJhbmtdJzsKK+mZgj4nW2RhbV0nOwor6ZmEPidbYWRoZXJlIHRvXSc7CivpmYs+J1tuYXJyb3ddJzsKK+mZjD4nW2Zvb3QgcGF0aCBiZXR3ZWVuIHJpY2UgZmllbGRzXSc7CivpmY0+J1tkZXNjZW5kXSc7CisjIumZjT4nW2Rlc2NlbmRdJyIsCivpmZA+J1tib3VuZGFyeV0nOwor6ZmbPidbc3RlcHMgbGVhZGluZyB0aHJvbmVdJzsKK+mZnD4nW25hcnJvd10nOwor6ZmdPidbbW91bnRhaW4gcGFzc10nOwor6ZmePidbcHJvbW90ZV0nOwor6ZmfPidbY2xpbWJdJzsKK+mZoj4nW2NvdXJ0eWFyZF0nOwor6ZmjPidbY29sdW1uXSc7CivpmaQ+J1tlbGltaW5hdGVdJzsKK+mZpT4nW3N1Ym1lcmdlXSc7CisjIumZpT4nW3N1Ym1lcmdlXSciLAor6ZmqPidbYWNjb21wYW55XSc7Civpmaw+J1tjb3JuZXJdJzsKK+mZsD4nW1wiZmVtYWxlXCIgcHJpbmNpcGxlXSc7CivpmbI+J1tmcm9udGllcl0nOwor6ZmzPidbZXhoaWJpdF0nOwor6Zm1PidbaGlsbF0nOwor6Zm2PidbcG90dGVyeV0nOwor6Zm3Pidbc3VibWVyZ2VdJzsKK+mZuD4nW2xhbmRdJzsKK+mZuj4nW25hcnJvdyBwYXNzXSc7Civpmb0+J1tcIm1hbGVcIiBwcmluY2lwbGVdJzsKK+mahT4nW2Nvcm5lcl0nOwor6ZqGPidbcHJvc3Blcm91c10nOwor6ZqIPidbY292ZV0nOwor6ZqKPidbdGVhbV0nOwor6ZqLPidbU3VpIGR5bmFzdHldJzsKK+majT4nW2RyeSBkaXRjaF0nOwor6ZqOPidbc3RhaXJzXSc7Civpmo8+J1tmb2xsb3ddJzsKK+malD4nW3NlcGFyYXRlXSc7CivpmpU+J1tmYWxsXSc7Civpmpc+J1toaWdoXSc7Civpmpg+J1tuYXJyb3ddJzsKK+mamT4nW2NyYWNrXSc7Civpmps+J1tib3JkZXJdJzsKK+manD4nW3NlcGFyYXRlXSc7CisjIumanD4nW3NlcGFyYXRlXSciLAor6ZqjPidbbmVpZ2hib3JdJzsKK+mapz4nW3R1bm5lbF0nOwor6ZqoPidbZm9sbG93XSc7Civpmqo+J1tuYXJyb3cgcGFzc10nOwor6ZqwPidbbG93XSc7CivpmrE+J1toaWRlXSc7CivpmrI+J1tzdGFsbGlvbl0nOwor6Zq0PidbbW91bnRhaW4gbG9jYXRlZCBiZXR3ZWVuIHNoYWFueGldJzsKK+matj4nW3N1YnNlcnZpZW50XSc7Civpmrc+J1tiZSBzdWJzZXJ2aWVudCB0b10nOwor6Zq4PidbYmUgc3Vic2VydmllbnQgdG9dJzsKK+mauT4nW2JpcmRdJzsKK+mauz4nW3NpbmdsZV0nOwor6Zq8PidbYXF1aWxpbmUgKG5vc2UpXSc7Civpm4A+J1tzcGFycm93XSc7Civpm4E+J1t3aWxkIGdvb3NlXSc7Civpm4Q+J1ttYWxlIG9mIHNwZWNpZXNdJzsKK+mbhT4nW2VsZWdhbnRdJzsKK+mbhj4nW2Fzc2VtYmxlXSc7Civpm4c+J1tlbXBsb3ldJzsKK+mbiT4nW3BoZWFzYW50XSc7Civpm4s+J1tzdXBlcmlvcl0nOwor6ZuMPidbZmVtYWxlXSc7Civpm40+J1toYXJtb255XSc7Civpm44+J1tvc3ByZXldJzsKK+mbkT4nW21peGVkXSc7Civpm5U+J1tlbmdyYXZlXSc7Civpm5Y+J1thbHRob3VnaF0nOwor6ZuZPidbc2V0IG9mIHR3b10nOwor6ZubPidbY2hpY2tdJzsKK+mbnD4nW21peGVkXSc7Civpm6I+J1tsZWF2ZV0nOwor6ZujPidbZGlmZmljdWx0XSc7Civpm6g+J1tyYWluXSc7Civpm6o+J1tzbm93XSc7CisjIumbqz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6ZuwPidbYXRtb3NwaGVyZV0nOwor6ZuyPidbY2xvdWRzXSc7Civpm7Y+J1t6ZXJvXSc7Civpm7c+J1t0aHVuZGVyXSc7Civpm7k+J1toYWlsXSc7Civpm7s+J1tlbGVjdHJpY2l0eV0nOwor6ZyAPidbbmVlZF0nOwor6ZyEPidbc2t5XSc7CivpnIY+J1thIHN1ZGRlbiBwZWFsIG9mIHRodW5kZXJdJzsKK+mchz4nW3NoYWtlXSc7CivpnIg+J1t0b3JyZW50aWFsIHJhaW5zXSc7CivpnIo+J1tzcGlyaXRdJzsKK+mcjT4nW3F1aWNrbHldJzsKK+mcjj4nW2xpZ2h0IHJhaW5dJzsKK+mcjz4nW2ZhbGxpbmcgb2Ygc25vdyBhbmQgcmFpbl0nOwor6ZyRPidbYmUgbW9pc3RlbmVkXSc7CivpnJM+J1tyYWluYm93XSc7CivpnJY+J1tsb25nIHNwZWxsIG9mIHJhaW5dJzsKK+mcmT4nW3NsZWV0XSc7CivpnJw+J1tmcm9zdF0nOwor6ZyePidbcm9zeSBjbG91ZHNdJzsKK+mcpD4nW2RyaXBdJzsKK+mcpz4nW2ZvZ10nOwor6ZyqPidbbG9uZyBhbmQgaGVhdnkgcmFpbl0nOwor6ZywPidbaGFpbF0nOwor6ZyyPidbZGV3XSc7CivpnLg+J1tydWxlIGJ5IG1pZ2h0IHJhdGhlciB0aGFuIHJpZ2h0XSc7CivpnLk+J1t0aHVuZGVyXSc7CivpnL0+J1tjbGVhciB1cCBhZnRlciByYWluIGNlYXNlIGJlIGFuZ10nOwor6Zy+PidbbWlzdHldJzsKK+mdgj4nW3RodW5kZXJjbGFwXSc7CivpnYQ+J1tjbG91ZHkgc2t5XSc7CivpnYY+J1tjbG91ZHkgc2t5XSc7CivpnYg+J1tzcGlyaXRdJzsKK+mdiT4nW2Nsb3VkeSBza3ldJzsKK+mdkj4nW2JsdWVdJzsKK+mdlj4nW3BhY2lmeV0nOwor6Z2ZPidbcXVpZXRdJzsKK+mdnD4nW3F1aWV0XSc7CivpnZ4+J1tub3RdJzsKK+mdoD4nW2xlYW4gb25dJzsKK+mdoT4nW2RpdmlkZV0nOwor6Z2iPidbZmFjZV0nOworIyLpnaQ+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+mdpj4nW3RpbWlkXSc7Civpnag+J1tkaW1wbGVzXSc7Civpnak+J1tsZWF0aGVyXSc7Civpnas+J1tzdHJvbmcgYW5kIHBsaWFibGVdJzsKK+mdrT4nW3N0cm9uZyBhbmQgcGxpYWJsZV0nOwor6Z2xPidbc3Ryb25nIGFuZCBwbGlhYmxlXSc7CivpnbQ+J1tib290c10nOworIyLpnbk+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+mduj4nW3N0b2NraW5nXSc7Civpnbw+J1t0YXJ0YXJzXSc7CisjIumegT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6Z6EPidbdG8gd29yayBoaWRlc10nOwor6Z6FPidbbGVhdGhlciBzdHJhcCBvdmVyIGhvcnNlJydzIG5lY2tdJzsKKyMi6Z6FPidbbGVhdGhlciBzdHJhcCBvdmVyIGhvcnNlJydzIG5lY2tdJyIsCivpnos+J1tzaG9lc10nOwor6Z6NPidbc2FkZGxlXSc7Civpno8+J1tiaW5kXSc7CisjIumejz4nW2JpbmRdJyIsCivpnpg+J1tzY2FiYmFyZF0nOworIyLpnpw+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+meoD4nW2Jvd10nOwor6Z6jPidbdGFuXSc7CivpnqY+J1tsZWF0aGVyIHN0YXBdJzsKK+meqD4nW3RyaWJlXSc7Civpnqs+J1tpbnRlcnJvZ2F0ZV0nOwor6Z6tPidbd2hpcF0nOworIyLpnrM+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+metD4nW3NhZGRsZSB1cCBob3JzZV0nOwor6Z+DPidbdGF0YXJzXSc7Civpn4Y+J1tzd2luZ10nOwor6Z+IPidbc29ja3NdJzsKK+mfiz4nW3Rhbm5lZCBsZWF0aGVyXSc7Civpn5M+J1tmZW5jZV0nOwor6Z+cPidbc2hlYXRoXSc7Civpn60+J1tzY2FsbGlvbl0nOwor6Z+uPidbc2NhbGxpb25dJzsKK+mfsj4nW2JyZWFrIG9yIHNtYXNoIGludG8gcGllY2VzXSc7Civpn7M+J1tzb3VuZF0nOwor6Z+1Pidbcmh5bWVdJzsKK+mftj4nW211c2ljIG9mIGVtcGVyb3IgU2h1bl0nOwor6Z+7Pidbcmh5bWVdJzsKK+mfvz4nW21ha2Ugc291bmRdJzsKK+mggT4nW3BhZ2VdJzsKK+mggj4nW3RvcF0nOwor6aCDPidbbW9tZW50XSc7CivpoIU+J1tuZWNrXSc7CivpoIY+J1tvYmV5XSc7CivpoIg+J1ttdXN0XSc7CivpoIw+J1tsYXVkXSc7CivpoI8+J1tmbHkgZG93biBvciBkb3dud2FyZF0nOwor6aCQPidbcHJlcGFyZV0nOwor6aCRPidbb2JzdGluYXRlXSc7CivpoJI+J1tjb25mZXJdJzsKK+mgkz4nW3BhdXNlXSc7CivpoJc+J1tsZWFuIG9uZSBzaWRlXSc7CivpoJg+J1tuZWNrXSc7CivpoJo+J1tuZWNrXSc7CivpoKE+J1tmbHkgdXB3YXJkXSc7CivpoKQ+J1tjaGVla3NdJzsKK+mgrD4nW2NoZWVrc10nOwor6aCtPidbaGVhZF0nOwor6aC0PidbcmljZSB0YXNzZWxdJzsKK+mgtz4nW2NoaW5dJzsKK+mguD4nW25lY2tdJzsKK+mguz4nW2ZyZXF1ZW50bHldJzsKK+mgvD4nW3JlbHldJzsKK+mgvT4nW3J1aW5lZF0nOwor6aGGPidbZ3JhaW5dJzsKK+mhiz4nW2xvd2VyIHBhcnQgb2YgZmFjZV0nOwor6aGMPidbZm9yZWhlYWRdJzsKK+mhjT4nW2ZvcmVoZWFkXSc7CivpoY4+J1tqYXddJzsKK+mhjz4nW2ZhY2VdJzsKK+mhlD4nW2ZhY2VdJzsKK+mhlT4nW21hbmlmZXN0XSc7CivpoZg+J1tkZXNpcmVdJzsKK+mhmz4nW3RvcF0nOwor6aGePidbY2xhc3NdJzsKK+mhpz4nW2xvb2sgYmFja10nOwor6aGrPidbc2hpdmVyXSc7Civpoa8+J1ttYW5pZmVzdF0nOwor6aGwPidbZnJvd25dJzsKK+mhsT4nW3NrdWxsXSc7CivpobM+J1t0aGUgdGVtcG9yYWwgYm9uZV0nOwor6aG0PidbY2hlZWsgYm9uZXNdJzsKK+miqD4nW3dpbmRdJzsKKyMi6aKoPidbd2luZF0nIiwKK+mirz4nW3NvdW5kIG9mIHdpbmRdJzsKK+misT4nW3RhaXBob29uXSc7CivporY+J1tjeWNsb25lXSc7Civpo4M+J1t3aGlybHdpbmRdJzsKK+mjhD4nW3doaXJsd2luZF0nOwor6aOGPidbd2hpcmx3aW5kXSc7Civpo5s+J1tmbHldJzsKK+mjnD4nW2ZsaXAgb3Zlcl0nOwor6aOfPidbZWF0XSc7Civpo6I+J1todW5nZXJdJzsKK+mjqT4nW3N0dWZmZWQgZHVtcGxpbmdzXSc7Civpo6s+J1tzdXJmZWl0ZWRdJzsKK+mjrT4nW29yZGVyXSc7Civpo64+J1tkcmlua10nOwor6aOvPidbY29va2VkIHJpY2VdJzsKK+mjsj4nW2RyaW5rXSc7Civpo7Q+J1tzd2VldC1tZWF0c10nOwor6aO8PidbcmFpc2UgYW5pbWFsc10nOwor6aO9PidbZWF0IGhlYXJ0aWx5XSc7Civpo74+J1tkZWNvcmF0ZV0nOwor6aSDPidbc3R1ZmZlZCBkdW1wbGluZ3NdJzsKK+mkhT4nW3JpY2UtY2FrZXNdJzsKK+mkiT4nW3JhdGlvbnMgYW5kIHBheSBmb3Igc29sZGllcnNdJzsKK+mkij4nW3JhaXNlXSc7CivppIw+J1tiYWl0XSc7CivppJA+J1tlYXRdJzsKK+mkkj4nW2h1bmdyeV0nOwor6aSTPidbYmUgaHVuZ3J5XSc7CivppJQ+J1tlYXRdJzsKK+mkmD4nW3N1cnBsdXNdJzsKKyMi6aSdPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivppJ4+J1tmYXJld2VsbCBwYXJ0eV0nOwor6aSgPidbcmljZS1jYWtlc10nOwor6aShPidbcGFzdHJ5IGZpbGxpbmddJzsKK+mkpD4nW2luY2l0ZV0nOwor6aSoPidbcHVibGljIGJ1aWxkaW5nXSc7CivppKw+J1twb3JyaWRnZV0nOwor6aSuPidbYSBsZWdlbmRhcnkgYW5pbWFsXSc7CivppL0+J1ttYWtlIHByZXNlbnQgb2YgZm9vZF0nOwor6aS+PidbZGlzdGlsbF0nOworIyLppYE+J1tjYXJyeSBtZWFsIHRvIHdvcmtlcnMgaW4gZmllbGRdJyIsCivppYU+J1tzdGVhbWVkIGJyZWFkXSc7CivppYk+J1t0aW1lIG9mIGZhbWluZSBvciBjcm9wIGZhaWx1cmVdJzsKK+mliz4nW29mZmVyIGZvb2Qgc3VwZXJpb3JdJzsKK+mljD4nW2ZlZWRdJzsKK+mlkD4nW3Nwb2lsZWRdJzsKK+mlkT4nW3N0YXJ2ZV0nOwor6aWSPidbYm91bnRpZnVsXSc7CivppZU+J1tnbHV0dG9ub3VzXSc7CivppZc+J1tob3N0IGJhbnF1ZXRdJzsKK+mmlj4nW2hlYWRdJzsKK+mmlz4nW2NoZWVrYm9uZV0nOwor6aaYPidbY3V0IG9mZiBsZWZ0IGVhcl0nOwor6aaZPidbZnJhZ3JhbnRdJzsKK+mmpT4nW2ZyYWdyYW5jZV0nOwor6aaoPidbZnJhZ3JhbnRdJzsKK+mmrD4nW2hvcnNlXSc7Civppq0+J1tkcml2ZV0nOwor6aauPidbc3VybmFtZV0nOwor6aazPidbZ28gcXVpY2tseSBvciBzd2lmdGx5XSc7CivpprQ+J1t0YW1lXSc7CisjIummvD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6aeBPidbdmFyaWNvbG9yZWRdJzsKKyMi6aeDPidbZ2FsbG9wXSciLAor6aeFPidbcmVsYXkgc3RhdGlvbl0nOwor6aeGPidbc3B1ciBob3JzZSBvbl0nOwor6aeIPidbc3B1ciBob3JzZSBvbl0nOwor6aeQPidbdG8gYmUgc3RhdGlvbmVkIGF0XSc7Civpp5E+J1t0aXJlZF0nOwor6aeSPidbY29sdF0nOwor6aeVPidbZHJpdmVdJzsKK+mnmD4nW3RpcmVkXSc7Civpp5s+J1tzYWlsXSc7Civpp50+J1tjYW1lbF0nOwor6aefPidbdGVhbSBvZiBmb3VyIGhvcnNlc10nOwor6aeiPidbdGVhbSBvZiBob3JzZXNdJzsKK+mnrT4nW3RlcnJpZnldJzsKK+mnrj4nW2Ega2luZCBvZiBmaWVyY2UgYW5pbWFsXSc7Civpp7E+J1t3aGl0ZSBob3JzZSB3LiBibGFjayBtYW5lXSc7CisjIumnsT4nW3doaXRlIGhvcnNlIHcuIGJsYWNrIG1hbmVdJyIsCivpp7g+J1tnYWxsb3BpbmddJzsKKyMi6ae7PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpp78+J1tleGNlbGxlbnQgaG9yc2VdJzsKK+mogT4nW2dhbGxvcCBob3JzZV0nOwor6aiFPidbcGllYmFsZCBob3JzZV0nOwor6aiOPidbcmlkZSBob3JzZWJhY2tdJzsKK+mojz4nW3BpZWJhbGQgaG9yc2VdJzsKK+mokj4nW2hhcmFzc10nOwor6aiTPidbdGVzdF0nOwor6aiZPidbc3dpbmRsZV0nOwor6aioPidbZGFwcGxlZF0nOwor6airPidbcmFpc2VdJzsKK+mosD4nW2ZseV0nOwor6ai3PidbaGFyYXNzXSc7CivpqL4+J1ttdWxlXSc7CivpqYA+J1tzdWRkZW5seV0nOwor6amCPidbdHdvIG91dHNpZGUgb25lcyBpbiB0aHJlZSBob3JzZV0nOwor6amDPidbY2hhcmdlcl0nOwor6amFPidbc3B1ciBob3JzZSBvbl0nOwor6amNPidbZXhjZWxsZW50IGhvcnNlXSc7CivpqZU+J1tzcGlyaXRlZCBob3JzZV0nOwor6amXPidbdGVzdF0nOwor6amaPidbZnJpZ2h0ZW5dJzsKK+mpmz4nW3JlbGF5IHN0YXRpb25dJzsKK+mpnz4nW3Byb2NlZHVyZV0nOwor6amiPidbZG9ua2V5XSc7CivpqaQ+J1tnYWxsb3AgYWJvdXQgd2l0aCBoZWFkIHVwbGlmdGVkXSc7CivpqaU+J1t0aG9yb3VnaGJyZWQgaG9yc2VdJzsKK+mpqT4nW2hhcHB5XSc7Civpqao+J1twdXJlIGJsYWNrIGhvcnNlXSc7Civpqas+J1tob3JzZXNdJzsKK+mqqD4nW2JvbmVdJzsKK+mqrT4nW3NoaW4gYm9uZV0nOwor6aqwPidbZGllXSc7Civpqrg+J1tza2VsdG9uXSc7Civpqrw+J1tib25lXSc7Civpq4A+J1tidXR0b2Nrc10nOwor6auEPidbYm9uZSBtYXJyb3ddJzsKK+mrjz4nW3NrdWxsXSc7Civpq5E+J1tza3VsbF0nOwor6auTPidbYm9uZSBtYXJyb3ddJzsKK+mrlD4nW2JvZHldJzsKK+mrmD4nW2hpZ2hdJzsKK+mrnj4nW2hpZ2hdJzsKK+mrnz4nW2hhaXJdJzsKK+mroj4nW3dpZ10nOwor6aujPidbc2ltaWxhciB0b10nOwor6aumPidbZmxvd2luZyBoYWlyIG9mIHlvdW5nIGNoaWxkXSc7Civpq6o+J1toYWlyXSc7Civpq6s+J1tjaGlsZHJlbicncyBoYWlyIHN0eWxlXSc7Civpq60+J1ttdXN0YWNoZV0nOwor6auuPidbaGFpcl0nOwor6auvPidbYmVhcmRdJzsKKyMi6auxPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpq7Q+J1tkaXNoZXZlbGVkIGhhaXJdJzsKKyMi6au3PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpq7s+J1toYWlyIHJvbGxlZCB1cCBpbiBhIGJ1bl0nOwor6ayGPidbbGF4XSc7CivprJg+J1tiZWF1dGlmdWwgaGFpcl0nOwor6ayaPidbYmVhcmRdJzsKK+msnz4nW2RyZXNzIGhhaXIgaW4gY29pbGVkIGtub3RdJzsKK+msoj4nW2hhaXIgb24gdGVtcGxlc10nOwor6ayjPidbaG9yc2UnJ3MgbWFuZV0nOwor6aylPidbc3RydWdnbGVdJzsKK+mspz4nW3F1YXJyZWxdJzsKK+msqD4nW2JvaXN0ZXJvdXNdJzsKK+msqT4nW2ZldWRdJzsKK+msqj4nW3N0cnVnZ2xlXSc7CivprK4+J1tsb3RzICh0byBiZSBkcmF3bildJzsKK+msrz4nW3NhY3JpZmljaWFsIHdpbmVdJzsKK+mssT4nW2x1eHVyaWFudF0nOwor6ayyPidbdHlwZSBvZiBjYWxkcm9uXSc7CivprLs+J1tzZWxsXSc7CivprLw+J1tnaG9zdF0nOwor6a2BPidbY2hpZWZdJzsKK+mtgj4nW3NvdWxdJzsKK+mtgz4nW2Ryb3VnaHQgZGVtb25dJzsKK+mthD4nW3ZpZ29yXSc7CivprYU+J1traW5kIG9mIGZvcmVzdCBkZW1vbl0nOwor6a2NPidbZGVtb25zXSc7CivprY4+J1thIGtpbmQgb2YgbW9uc3Rlcl0nOwor6a2PPidba2luZ2RvbSBvZiB3ZWldJzsKK+mtkT4nW2EgbW9udGFpbiBkZW1vbiByZXNlbWJsaW5nIHRpZ2VyXSc7CivprZQ+J1tkZW1vbl0nOwor6a2YPidbbmlnaHRtYXJlXSc7CivprZo+J1tmaXNoXSc7Civpra8+J1tmb29saXNoXSc7CivprbQ+J1ticmVhbV0nOworIyLproE+J1t0aGUgYm9uaXRvXSciLAor6a6OPidbc2hlYXRmaXNoXSc7CivprpE+J1thYmFsb25lXSc7CivprpI+J1tjYXJwXSc7CivprpM+J1ttaW5jZWQgYW5kIHNhbHRlZCBmaXNoXSc7CisjIumukz4nW21pbmNlZCBhbmQgc2FsdGVkIGZpc2hdJyIsCisjIumukz4nW21pbmNlZCBhbmQgc2FsdGVkIGZpc2hdJyIsCivprp8+J1thbmdsZXJmaXNoXSc7CivprqA+J1thIGtpbmQgb2Ygc2hhZCB3aXRoIGEgaGVhZCBsaWtlIGEgc3R1cmdlb25dJzsKKyMi6a6oPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivprqo+J1traW5kIG9mIHN0dXJnZW9uXSc7Civprqs+J1tzaGFya10nOwor6a6tPidbc2FsbW9uXSc7Civprq4+J1tmcmVzaF0nOworIyLprrQ+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKKyMi6a65PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpr4A+J1tnaWFudCBmaXNoXSc7Civpr4Y+J1t0aGUgc2thdGUgb3IgcmF5XSc7Civpr4k+J1tjYXJwXSc7Civpr4o+J1tzaGFya10nOwor6a+PPidbYSBkaWFsZWN0Li4uLi4uLi4gbmFtZSBvZiBmaXNoXSc7CisjIumvkT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAorIyLpr5I+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+mvlD4nW211bGxldF0nOwor6a+WPidbbWFja2VyZWxdJzsKK+mvmz4nW3BhZ3Jvc29tdXMgbWFqb3JdJzsKK+mvoT4nW2hlcnJpbmddJzsKK+mvoj4nW2NyeXB0b2JyYW5jaHVzIGphcG9uaWN1c10nOworIyLpr6M+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+mvpD4nW3NwYXduXSc7Civpr6g+J1t3aGFsZV0nOwor6a+wPidbc2hlYXRdJzsKKyMi6a+xPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCisjIumvsT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAorIyLpr7E+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKKyMi6bCEPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCisjIumwhj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6bCIPidbZmxhdGZpc2hdJzsKK+mwiT4nW3N0dXJnZW9uXSc7CisjIumwij4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6bCMPidbbG9hY2hdJzsKK+mwjT4nW2xvYWNoXSc7CivpsJA+J1thbGxpZ2F0b3JdJzsKK+mwkj4nW2FiYWxvbmVdJzsKK+mwkz4nW2Zpc2ggZ2lsbHNdJzsKKyMi6bCUPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpsJU+J1tzaHJpbXBdJzsKK+mwmz4nW3NhcmRpbmVdJzsKKyMi6bChPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCisjIumwpD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6bClPidbaHVnZSBmaXNoXSc7CivpsK0+J1tmaW5dJzsKK+mwrj4nW3NhcmRpbmVdJzsKKyMi6bCvPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCisjIumwrz4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6bCyPidbaHVnZSBzZWEgdHVydGxlXSc7CivpsLk+J1tza2lwamFja10nOworIyLpsLo+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+mwuz4nW2VlbF0nOwor6bC+Pidbc3dpbW1pbmcgYmxhZGRlciBvZiBmaXNoXSc7CisjIumxhj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6bGHPidbYW5nbGVyZmlzaF0nOwor6bGIPidbY29kZmlzaF0nOwor6bGSPidbYmFyYmVsXSc7CivpsZc+J1tmaXNoIHNjYWxlc10nOworIyLpsZg+J1tzdHVyZ2Vvbl0nIiwKK+mxoD4nW21pbmNlZCBmaXNoXSc7Civpsac+J1tzbmFrZWhlYWRdJzsKKyMi6bG2PidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivpsbg+J1tzZWEgcGVyY2hdJzsKK+mzpT4nW2JpcmRdJzsKK+mzpz4nW3dpbGQgZHVja10nOwor6bOpPidbcGlnZW9uXSc7Civps6s+J1t3aWxkIGdvb3NlXSc7Civps6w+J1t3aWxkIGR1Y2tdJzsKKyMi6bOwPidbLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5dJyIsCivps7M+J1ttYWxlIHBob2VuaXhdJzsKK+mztD4nW2NyeSBvZiBiaXJkIG9yIGFuaW1hbF0nOwor6bO2Pidba2l0ZV0nOwor6bSDPidbc2hyaWtlXSc7CivptIY+J1tiaXJkIHJlc2VtYmxpbmcgc2VjcmV0YXJ5IGZhbGNvbl0nOwor6bSHPidbYnVzdGFyZF0nOwor6bSIPidbd2lsZCBnb29zZV0nOwor6bSJPidbY3Jvd10nOwor6bSOPidbc2VhZ3VsbF0nOwor6bSSPidbc3BlY2llcyBvZiBsYXJrXSc7CivptJU+J1tvc3RyaWNoXSc7CivptJs+J1ttYWxlIG1hbmRhcmluIGR1Y2tdJzsKK+m0nz4nW2tpdGVdJzsKK+m0oz4nW3NwZWNpZXMgb2YgdGFpd2FuIHBpZ2Vvbl0nOwor6bSmPidbZmVtYWxlIG1hbmRhcmluIGR1Y2tdJzsKK+m0qD4nW2R1Y2tdJzsKK+m0qj4nW3N3b29wXSc7CivptKs+J1thIHNuaXBlXSc7CivptKw+J1tvcmlvbGVdJzsKK+m0uz4nW3NwZWNpZXMgb2Ygd2lsZCBzd2FuXSc7CisjIum0vj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6bS/PidbcGlnZW9uXSc7CisjIum1gT4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6bWEPidba2l0ZV0nOworIyLptYQ+J1traXRlXSciLAorIyLptYQ+J1traXRlXSciLAorIyLptZA+J1suLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl0nIiwKK+m1kT4nW2N1Y2tvb10nOwor6bWZPidbYSBzaHJpa2VdJzsKK+m1nD4nW3BlbGljYW5dJzsKK+m1nT4nW2dvb3NlXSc7CivptZ4+J1tnb29zZV0nOwor6bWgPidbdGFyZ2V0XSc7CivptaE+J1tzcGVjaWVzIG9mIHBhcnJvdF0nOworIyLptaE+J1tzcGVjaWVzIG9mIHBhcnJvdF0nIiwKK+m1rD4nW2ZhYnVsb3VzIGJpcmQgb2YgZW5vcm1vdXMgc2l6ZV0nOwor6bWvPidbYmlyZF0nOwor6bWyPidbbWFncGllXSc7CisjIum1uj4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6baHPidbdGhydXNoXSc7Civptok+J1txdWFpbF0nOwor6baPPidbY2hpY2tlbl0nOwor6baaPidbb3NwcmV5XSc7CisjIum2pD4nWy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXSciLAor6bapPidbZHVja10nOwor6barPidbdGhydXNoXSc7Civptq8+J1tvcmlvbGVdJzsKKyMi6baxPidbc29hcl0nIiwKK+m2tD4nW2NyYW5lXSc7Civptrg+J1tbbm90IGZvdW5kIGluIGFueSBkaWN0aW9uYXJ5XV0nOwor6ba6Pidbd2FndGFpbF0nOwor6ba7PidbYSBraW5kIG9mIHBpZ2Vvbl0nOwor6beBPidbZmlzaGhhd2sgYm93IG9yIHByb3ddJzsKK+m3gj4nW3NwYXJyb3cgaGF3a10nOwor6beEPidbY2hpY2tlbl0nOwor6beGPidbYmlyZCBuYW1lXSc7Civpt48+J1tiaXJkIG5hbWVdJzsKK+m3kz4nW3BhcnRyaWRnZV0nOwor6beZPidbaGF3a10nOwor6bemPidbd3Jlbl0nOworIyLpt6s+J1t0dXJxdW9pc2Uga2luZ2Zpc2hlcl0nIiwKK+m3rz4nW3dyZW5dJzsKK+m3sj4nW2NvbmRvcl0nOwor6be4Pidbc25pcGVdJzsKK+m3uT4nW2VhZ2xlXSc7Civpt7o+J1toZXJvbl0nOwor6be9Pidbb3JpZW50YWwgYnVsbGZpbmNoXSc7CivpuJo+J1tzcGVjaWVzIG9mIHBhcnJvdF0nOwor6bibPidbY3JhbmVdJzsKK+m4nj4nW2ZhYnVsb3VzIGJpcmRdJzsKK+m5tT4nW3NhbGluZSBzb2lsXSc7Civpubg+J1thbGthbGluZV0nOwor6bm5Pidbc2FsdHldJzsKK+m5vT4nW3NhbHRdJzsKK+m5vz4nW2RlZXJdJzsKK+m6gT4nW3JvdWdoXSc7Civpuog+J1tzcGVjaWVzIG9mIGRlZXJdJzsKK+m6iz4nW2Vsa10nOwor6bqMPidbc3RhZ10nOwor6bqRPidbZmF3bl0nOwor6bqSPidbbGVnZW5kYXJ5IGF1c3BpY2lvdXMgYW5pbWFsXSc7CivpupM+J1tmb290IG9mIGhpbGxdJzsKK+m6lT4nW211bnRqYWMgZGVlcl0nOwor6bqXPidbYmVhdXRpZnVsXSc7Civpup0+J1ttdXNrIGRlZXJdJzsKK+m6nz4nW2ZlbWFsZSBvZiBjaGluZXNlIHVuaWNvcm5dJzsKK+m6pT4nW3doZWF0XSc7CivpuqY+J1t3aGVhdF0nOwor6bqpPidbYnJhbl0nOwor6bqqPidbZmxvdXJdJzsKKyMi6bqrPidbZmxvdXJdJyIsCivpurg+J1ticmFuXSc7Civpurk+J1t5ZWFzdF0nOwor6bq6PidbZmxvdXJdJzsKK+m6uz4nW2hlbXBdJzsKK+m6vD4nW2ludGVycm9nYXRpdmUgZmluYWwgcGFydGljbGVdJzsKK+m6vj4nW3Blbm5hbnRdJzsKK+m6vz4nW0ldJzsKK+m7hD4nW3llbGxvd10nOwor6buMPidbc2Nob29sXSc7Civpu40+J1tnbHV0aW5vdXMgbWlsbGV0XSc7Civpu44+J1tzdXJuYW1lXSc7Civpu48+J1tzdGljayB0b10nOwor6buQPidbc3RpY2tdJzsKK+m7kj4nW2JsYWNrXSc7Civpu5Q+J1tibGFja10nOwor6buYPidbc2lsZW50XSc7Civpu5k+J1tzaWxlbnRdJzsKK+m7mz4nW2JsYWNrZW4gZXllYnJvd3NdJzsKK+m7nD4nW2Rpc21pc3NdJzsKK+m7nT4nW2JsYWNrXSc7Civpu54+J1tkb3RdJzsKK+m7oD4nW3NseV0nOwor6bulPidbdGF0dG9vaW5nIGZhY2VdJzsKK+m7qD4nW3BvbGl0aWNhbCBwYXJ0eV0nOwor6buvPidbZGFya10nOwor6bu0PidbbW9sZF0nOwor6bu2PidbbW9sZV0nOwor6bu3PidbZGlzaG9ub3JdJzsKK+m7uT4nW2VtYnJvaWRlcnldJzsKK+m7uz4nW3NwZWNpYWwgcGF0dGVybiBvZiBlbWJyb2lkZXJ5XSc7Civpu7w+J1tlbWJyb2lkZXJlZCBvZmZpY2lhbCBvciBzYWNyaWZpY10nOwor6bu9PidbdG8gc3RyaXZlXSc7CivpvIc+J1todWdlIHNlYSB0dXJ0bGVdJzsKK+m8iD4nW2ZyZXNoIHdhdGVyIHR1cnRsZV0nOwor6byOPidbbGFyZ2VdJzsKK+m8kz4nW2RydW1dJzsKK+m8lT4nW3JhdHRsZSBvZiBkcnVtc10nOwor6bygPidbcmF0XSc7CivpvKE+J1tyYXRdJzsKK+m8rD4nW3dlYXNlbF0nOwor6by7Pidbbm9zZV0nOwor6by+Pidbc25vcmUgbG91ZGx5XSc7CivpvYo+J1tldmVuXSc7CivpvYs+J1t2ZWdldGFyaWFuIGRpZXRdJzsKK+m9jj4nW3Rha2UgaW4gYm90aCBoYW5kcyBhbmQgb2ZmZXIgdG9dJzsKK+m9jz4nW2JyZWFrIG9yIHNtYXNoIGludG8gcGllY2VzXSc7CivpvZI+J1t0ZWV0aF0nOwor6b2UPidbbG9zZSBiYWJ5IHRlZXRoIGFuZCBnZXQgYWR1bHQgdGVdJzsKK+m9nz4nW2lycmVndWxhciB0ZWV0aF0nOwor6b2gPidbbG9zZSBiYWJ5IHRlZXRoIGFuZCBnZXQgYWR1bHQgdGVldGhdJzsKK+m9oT4nW2FnZV0nOwor6b2iPidbYWdlXSc7CivpvaM+J1thY3RdJzsKK+m9pj4nW2d1bXNdJzsKK+m9pz4nW2JpdGVdJzsKK+m9qj4nW25hcnJvd10nOwor6b2sPidbdW5ldmVuIHRlZXRoXSc7CivpvbI+J1t0b290aCBkZWNheV0nOwor6b22PidbcGFsYXRlXSc7Civpvbc+J1tuYXJyb3ddJzsKK+m+jT4nW2RyYWdvbl0nOwor6b6VPidbbmljaGVdJzsKK+m+nD4nW3R1cnRsZSBvciB0b3J0b2lzZV0nOwor6b6dPidbYXV0dW1uXSc7CivpvqA+J1tmbHV0ZV0nOworCisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L3Jlc291cmNlcy9UcmFuc2xpdGVyYXRvcl9LYW5qaV9PblJvbWFqaS50eHQgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvcmVzb3VyY2VzL1RyYW5zbGl0ZXJhdG9yX0thbmppX09uUm9tYWppLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDM1OTEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi9kZW1vL3RyYW5zbGl0L3Jlc291cmNlcy9UcmFuc2xpdGVyYXRvcl9LYW5qaV9PblJvbWFqaS50eHQKQEAgLTAsMCArMSw2MjE2IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGF0ZTogVHVlIEphbiAyMyAxMjo0MjowMyAyMDAxCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBLYW5qaS1PblJvbWFqaQorCivkuIE+VGVpOwor5LiDPlNoaWNoaTsKK+S4hz5NYW47CivkuIg+Sm91Owor5LiJPlNhbjsKK+S4ij5Kb3U7CivkuIs+S2E7CivkuI0+RnU7CivkuI4+WW87CivkuJA+S2FpOwor5LiRPkNodXU7CivkuJQ+U2hhOwor5LiVPkhpOwor5LiWPlNlOwor5LiXPlNlaTsKK+S4mD5LeXV1Owor5LiZPkhlaTsKK+S4nj5TaG91Owor5LihPlJ5b3U7CivkuKY+SGVpOwor5LiqPkthOwor5LitPkNodXU7CivkuLE+S2FuOwor5LiyPlNlbjsKK+S4tj5DaHU7CivkuLg+R2FuOwor5Li5PlRhbjsKK+S4uz5TaHU7CivkuLw+U2VpOwor5Li/PkhldHN1Owor5LmCPkdhaTsKK+S5gz5EYWk7CivkuYU+S3l1dTsKK+S5iz5TaGk7CivkuY0+U2FrdTsKK+S5jj5LbzsKK+S5jz5Cb3U7CivkuZU+S287CivkuZY+S2FpOwor5LmXPkpvdTsKK+S5mD5Kb3U7CivkuZk+T3RzdTsKK+S5nT5LeXV1Owor5LmePktvdHN1Owor5LmfPllhOwor5LmiPkdhaTsKK+S5sT5SYW47CivkubM+Tnl1dTsKK+S5vj5LYW47CivkuoA+S2k7CivkuoI+UmFuOwor5LqFPktldHN1Owor5LqGPlJ5b3U7Civkuog+WW87Civkuok+U291Owor5LqKPkppOwor5LqLPkppOwor5LqMPk5pOwor5LqOPlU7CivkupE+VW47CivkupI+R287CivkupQ+R287CivkupU+U2VpOwor5LqYPlNlbjsKK+S6mT5Lb3U7Civkups+U2E7Civkupw+QTsKK+S6nj5BOwor5LqfPkt5b2t1Owor5LqgPlRvdTsKK+S6oT5Cb3U7CivkuqI+S291Owor5LqkPktvdTsKK+S6pT5HYWk7CivkuqY+RWtpOwor5LqoPkt5b3U7Civkuqs+S3lvdTsKK+S6rD5LeW91Owor5LqtPlRlaTsKK+S6rj5SeW91Owor5LqwPktlaTsKK+S6sz5IYWt1Owor5Lq2PlRhbjsKK+S6uj5KaW47Civku4A+U2h1dTsKK+S7gT5KaW47Civku4I+Um9rdTsKK+S7hD5Tb2t1Owor5LuGPkZ1Owor5LuHPkt5dXU7Civku4o+S29uOwor5LuLPkthaTsKK+S7jT5Kb3U7Civku44+SnV1Owor5LuPPkJ1dHN1Owor5LuUPlNoaTsKK+S7lT5TaGk7Civku5Y+VGE7Civku5c+Sm91Owor5LuYPkZ1Owor5LuZPlNlbjsKK+S7nT5Eb3U7Civku54+SmluOwor5LufPlNlbjsKK+S7oz5EYWk7Civku6Q+UmVpOwor5LulPkk7Civku60+SmluOwor5LuuPkthOwor5LuwPkd5b3U7Civku7I+Q2h1dTsKK+S7tj5LZW47Civku7c+S2FpOwor5Lu7Pk5pbjsKK+S8gT5LaTsKK+S8iT5Lb3U7CivkvIo+STsKK+S8jT5HbzsKK+S8jj5LaTsKK+S8jz5GdWt1Owor5LyQPkJhdHN1Owor5LyRPkt5dXU7CivkvJo+S2FpOwor5LycPlNhaTsKK+S8nT5EZW47CivkvK8+SGFrdTsKK+S8sD5LbzsKK+S8tD5IYW47CivkvLY+UmVpOwor5Ly4PlNoaW47CivkvLo+U2hpOwor5Ly8PkppOwor5Ly9Pkt5YTsKK+S9gz5UZW47CivkvYY+VGFuOwor5L2HPkNobzsKK+S9jT5JOwor5L2OPlRlaTsKK+S9jz5KdXU7CivkvZA+U2E7CivkvZE+WXV1Owor5L2TPlRlaTsKK+S9lT5LYTsKK+S9lz5UYTsKK+S9mT5ZbzsKK+S9mj5JdHN1Owor5L2bPkJ1dHN1Owor5L2cPlNha3U7CivkvZ0+S291Owor5L2ePk5laTsKK+S9qT5IYWk7Civkva8+WW91Owor5L2wPkhha3U7CivkvbM+S2E7CivkvbU+SGVpOwor5L22PktpdHN1Owor5L27PkNob3U7Civkvbw+S291Owor5L2/PlNoaTsKK+S+gz5LYW47CivkvoY+UmFpOwor5L6IPlNoaTsKK+S+iz5SZWk7Civkvo0+Smk7Civkvo8+U2h1Owor5L6RPll1dTsKK+S+lj5Sb247Civkvpg+VGE7Civkvps+S3lvdTsKK+S+nT5JOwor5L6gPkt5b3U7CivkvqE+S2E7Civkvqs+TmVpOwor5L6tPkppbjsKK+S+rj5CdTsKK+S+rz5Lb3U7CivkvrU+U2hpbjsKK+S+tj5SeW87Civkvr8+QmVuOwor5L+CPktlaTsKK+S/gz5Tb2t1Owor5L+EPkdhOwor5L+KPlNodW47Civkv44+U2hvOwor5L+QPlJpOwor5L+RPllvdTsKK+S/lD5LZW47Civkv5c+Wm9rdTsKK+S/mD5GdTsKK+S/mj5SaTsKK+S/mz5CZW47Civkv50+SG87Civkv58+U2hpOwor5L+hPlNoaW47Civkv64+U2h1dTsKK+S/rz5GdTsKK+S/sz5IYWk7Civkv7U+SHlvdTsKK+S/tj5TaHVrdTsKK+S/uD5Ib3U7Civkv7o+RW47Civkv74+SGk7CivlgIU+U2FpOwor5YCGPlJ5b3U7CivlgIk+U291Owor5YCLPktvOwor5YCNPkJhaTsKK+WAjz5TaHVrdTsKK+WAkT5Nb247CivlgJI+VG91Owor5YCUPkt1dHN1Owor5YCWPktvdTsKK+WAmT5Lb3U7CivlgJo+STsKK+WAnz5TaGFrdTsKK+WAoT5TaG91Owor5YCjPkhvdTsKK+WApD5DaGk7CivlgKU+S291Owor5YCmPktlbjsKK+WAqD5LeW87CivlgKk+U2VuOwor5YCqPkdlaTsKK+WAqz5SaW47CivlgKw+VGFrdTsKK+WArT5JOwor5YC2Pkt1Owor5YC5PktlbjsKK+WBgz5FbjsKK+WBhz5LYTsKK+WBiD5LZXRzdTsKK+WBiT5JOwor5YGPPkhlbjsKK+WBkD5HYW47CivlgZU+S2FpOwor5YGWPlNoYTsKK+WBmj5TYWt1Owor5YGcPlRlaTsKK+WBpT5LZW47Civlgaw+U291Owor5YGyPlNoaTsKK+WBtD5Tb2t1Owor5YG1PlRlaTsKK+WBtj5HdXU7Civlgbg+Q2h1dTsKK+WBvT5HaTsKK+WCgD5LYWk7CivlgoU+RnU7Civlgo0+Qm91Owor5YKRPktldHN1Owor5YKYPlNhbjsKK+WCmT5CaTsKK+WCmj5Lb3U7Civlgqw+U2FpOwor5YKtPllvdTsKK+WCsj5Hb3U7CivlgrM+RGVuOwor5YK0PlU7CivlgrU+U2FpOwor5YK3PlNob3U7Civlgr4+S2VpOwor5YOCPlJvdTsKK+WDhT5LaW47Civlg4k+U2VuOwor5YOKPlNlbjsKK+WDjT5Eb3U7Civlg48+Wm91Owor5YORPkt5b3U7Civlg5U+Qm9rdTsKK+WDlj5LaTsKK+WDmj5SeW91Owor5YOePkdpOwor5YOjPlNlbjsKK+WDpT5LeW91Owor5YOnPlNvdTsKK+WDrT5TZW47Civlg64+RG91Owor5YO1Pkt5b3U7Civlg7k+S2E7Civlg7s+SGVraTsKK+WEgD5HaTsKK+WEgT5TaHVuOwor5YSCPkRvdTsKK+WEhD5Pa3U7CivlhIk+S2VuOwor5YSSPkp1Owor5YSUPkNodXU7CivlhJU+U2VpOwor5YSWPlJhbjsKK+WEmD5KaW47CivlhJo+Qm91Owor5YSfPlNob3U7CivlhKE+UmFpOwor5YSqPll1dTsKK+WEsj5DaG87CivlhLc+UmVpOwor5YS6PkRhOwor5YS7PlRvdTsKK+WEvD5HZW47CivlhL8+SmluOwor5YWAPktvdHN1Owor5YWBPkluOwor5YWDPkdlbjsKK+WFhD5LZWk7CivlhYU+SnV1Owor5YWGPkNob3U7CivlhYc+S3lvdTsKK+WFiD5TZW47CivlhYk+S291Owor5YWLPktva3U7CivlhYw+RGE7CivlhY0+TWVuOwor5YWOPlRvOwor5YWQPkppOwor5YWSPkppOwor5YWUPlRvOwor5YWaPlRvdTsKK+WFnD5Ub3U7CivlhaI+S3lvdTsKK+WFpT5OeXV1Owor5YWoPlplbjsKK+WFqT5SeW91Owor5YWqPll1Owor5YWrPkhhY2hpOwor5YWsPktvdTsKK+WFrT5Sb2t1Owor5YWuPktlaTsKK+WFsT5LeW91Owor5YW1PkhlaTsKK+WFtj5LaTsKK+WFtz5HdTsKK+WFuD5UZW47Civlhbw+S2VuOwor5YaAPktpOwor5YaCPktlaTsKK+WGhT5EYWk7CivlhoY+RW47Civlhok+TmVuOwor5YaKPlNhdHN1Owor5YaMPlNhdHN1Owor5YaNPlNhaTsKK+WGjz5LZWk7CivlhpA+Qm91Owor5YaRPkNodXU7CivlhpI+Qm91Owor5YaTPktvdTsKK+WGlT5CZW47CivlhpY+QmVraTsKK+WGlz5Kb3U7Civlhpk+U2hhOwor5YagPkthbjsKK+WGoj5DaG91Owor5YakPkVuOwor5YalPk1laTsKK+WGpj5Lb3U7Civlhqg+RnU7Civlhqk+U2hhOwor5YaqPkJla2k7Civlhqs+SHlvdTsKK+WGrD5Ub3U7CivlhrA+SHlvdTsKK+WGsT5HbzsKK+WGsj5DaHV1Owor5YazPktldHN1Owor5Ya0PkdvOwor5Ya1Pkt5b3U7CivlhrY+WWE7Civlhrc+UmVpOwor5Ya9PlJldHN1Owor5YeEPlNlaTsKK+WHhT5LbzsKK+WHhj5KdW47Civlh4k+UnlvdTsKK+WHiz5DaG91Owor5YeMPlJ5b3U7Civlh40+VG91Owor5YeWPkp1bjsKK+WHmz5SaW47Civlh5w+UmluOwor5YedPkd5b3U7Civlh6A+S2k7Civlh6E+Qm9uOwor5YemPlNobzsKK+WHrT5IeW91Owor5YewPktvdTsKK+WHsT5HYWk7Civlh7U+S2FuOwor5Ye2Pkt5b3U7Civlh7g+VG90c3U7Civlh7k+T3U7Civlh7o+U2h1dHN1Owor5Ye9PkthbjsKK+WHvj5LYW47CivliIA+VG91Owor5YiDPkppbjsKK+WIhD5KaW47CivliIY+QnVuOwor5YiHPlNldHN1Owor5YiIPkdhaTsKK+WIij5LYW47CivliIs+U2VuOwor5YiOPkZ1bjsKK+WIkT5LZWk7CivliJQ+S2V0c3U7CivliJc+UmV0c3U7CivliJ0+U2hvOwor5YikPkhhbjsKK+WIpT5CZXRzdTsKK+WIpz5Hb3U7CivliKk+Umk7CivliKo+U2FuOwor5YiuPkthdHN1Owor5YiwPlRvdTsKK+WIsz5LbzsKK+WItj5TZWk7CivliLc+U2F0c3U7CivliLg+S2VuOwor5Yi5PlNhdHN1Owor5Yi6PlNoaTsKK+WIuz5Lb2t1Owor5YmDPlRlaTsKK+WJhD5LZWk7CivliYc+U29rdTsKK+WJij5TYWt1Owor5YmLPktva3U7CivliYw+UmF0c3U7CivliY0+WmVuOwor5YmPPlNvdTsKK+WJlD5UZWtpOwor5YmWPkJvdTsKK+WJmz5Hb3U7CivliZ4+S2k7CivliaM+S2VuOwor5YmkPlphaTsKK+WJpT5IYWt1Owor5YmpPkpvdTsKK+WJqj5TZW47Civlia8+RnVrdTsKK+WJsD5Kb3U7CivlibE+S2VuOwor5YmyPkthdHN1Owor5YmzPlRvdTsKK+WJtD5HYWk7CivlibU+U291Owor5Ym9Pkh5b3U7Civlib8+U2hvdTsKK+WKgz5LYWt1Owor5YqHPkdla2k7Civliog+SGVraTsKK+WKiT5SdTsKK+WKjT5LZW47CivlipE+WmFpOwor5YqSPktlbjsKK+WKlD5LZW47Civlips+Unlva3U7Civlip8+S291Owor5YqgPkthOwor5YqjPlJldHN1Owor5YqpPkpvOwor5YqqPkRvOwor5YqrPkdvdTsKK+WKrD5LdTsKK+WKrT5TaG91Owor5YqxPlJlaTsKK+WKtD5Sb3U7CivlirU+S2VuOwor5Yq5PktvdTsKK+WKvD5LYXRzdTsKK+WKvj5HYWk7Civli4E+S2VpOwor5YuDPkJvdHN1Owor5YuFPkNob2t1Owor5YuHPll1dTsKK+WLiT5CZW47Civli40+S2VpOwor5YuSPlJva3U7Civli5U+RG91Owor5YuXPkJvdTsKK+WLmD5LYW47Civli5k+TXU7Civli50+U2hvdTsKK+WLnj5Sb3U7Civli58+Qm87Civli6A+UmlrdTsKK+WLoj5TZWk7Civli6M+U2VraTsKK+WLpD5LaW47Civli6Y+U291Owor5YunPkthbjsKK+WLsj5LdW47Civli7M+S3VuOwor5Yu1PlJlaTsKK+WLuD5LYW47Civli7k+SG91Owor5Yu6PlNoYWt1Owor5Yu+PktvdTsKK+WLvz5CdXRzdTsKK+WMhT5Ib3U7CivljIY+U291Owor5YyIPkt5b3U7CivljI0+SG87CivljI8+SG91Owor5YyQPkhva3U7CivljJU+SGk7CivljJY+S2E7CivljJc+SG9rdTsKK+WMmT5TaGk7CivljJo+SG91Owor5YydPlNvdTsKK+WMoD5TaG91Owor5YyhPkt5b3U7CivljKM+S291Owor5YyqPkhpOwor5YyvPldhaTsKK+WMsT5LaTsKK+WMsz5SZW47CivljLg+S2VpOwor5Yy5PkhpdHN1Owor5Yy6Pkt1Owor5Yy7Pkk7CivljL8+VG9rdTsKK+WNgD5LdTsKK+WNgT5KdXU7CivljYM+U2VuOwor5Y2FPlNvdTsKK+WNhj5Tb3RzdTsKK+WNhz5TaG91Owor5Y2IPkdvOwor5Y2JPktpOwor5Y2KPkhhbjsKK+WNjT5CYW47CivljZE+SGk7CivljZI+U290c3U7CivljZM+VGFrdTsKK+WNlD5LeW91Owor5Y2XPk5hbjsKK+WNmD5UYW47CivljZo+SGFrdTsKK+WNnD5Cb2t1Owor5Y2ePkhlbjsKK+WNoD5TZW47CivljaY+S2E7Civljak+U2V0c3U7Civlja4+U2hpOwor5Y2vPkJvdTsKK+WNsD5JbjsKK+WNsT5LaTsKK+WNsz5Tb2t1Owor5Y20Pkt5YWt1Owor5Y21PlJhbjsKK+WNtz5LYW47Civljbg+U2hhOwor5Y27Pkt5YWt1Owor5Y2/Pkt5b3U7CivljoI+S2FuOwor5Y6EPllha3U7CivljpY+Qm91Owor5Y6YPlJpbjsKK+WOmj5Lb3U7Civljp8+R2VuOwor5Y6gPlNoaTsKK+WOpT5LZXRzdTsKK+WOpj5LYTsKK+WOqD5adTsKK+WOqT5LeXV1Owor5Y6tPkVuOwor5Y6uPlNoaTsKK+WOsD5TaG91Owor5Y6zPkdlbjsKK+WOtj5TaGk7Civljrs+S3lvOwor5Y+CPlNhbjsKK+WPgz5TYW47Civlj4g+WXV1Owor5Y+JPlNoYTsKK+WPij5LeXV1Owor5Y+LPll1dTsKK+WPjD5Tb3U7Civlj40+SGFuOwor5Y+OPlNodXU7Civlj5Q+U2h1a3U7Civlj5Y+U2h1Owor5Y+XPkp1Owor5Y+ZPkpvOwor5Y+bPkhhbjsKK+WPnz5Tb3U7Civlj6E+RWk7Civlj6I+U291Owor5Y+jPktvdTsKK+WPpD5LbzsKK+WPpT5LdTsKK+WPqD5Ub3U7Civlj6k+S291Owor5Y+qPlNoaTsKK+WPqz5LeW91Owor5Y+sPlNob3U7Civlj60+SGF0c3U7Civlj64+VGVpOwor5Y+vPkthOwor5Y+wPkRhaTsKK+WPsT5TaGl0c3U7Civlj7I+U2hpOwor5Y+zPlU7Civlj7Y+S3lvdTsKK+WPtz5Hb3U7Civlj7g+U2hpOwor5ZCBPkt1Owor5ZCDPktpdHN1Owor5ZCEPktha3U7CivlkIg+R291Owor5ZCJPktpY2hpOwor5ZCKPkNob3U7CivlkIs+U3VuOwor5ZCMPkRvdTsKK+WQjT5NZWk7CivlkI4+S291Owor5ZCPPlJpOwor5ZCQPlRvOwor5ZCRPktvdTsKK+WQmz5LdW47CivlkJ0+UmluOwor5ZCfPkdpbjsKK+WQoD5IYWk7CivlkKY+SGk7CivlkKk+RnVuOwor5ZCrPkdhbjsKK+WQrD5LaW47CivlkK0+S291Owor5ZCuPlNlbjsKK+WQtj5Ub3RzdTsKK+WQuD5LeXV1Owor5ZC5PlN1aTsKK+WQuz5GdW47CivlkLw+S291Owor5ZC9PkluOwor5ZC+PkdvOwor5ZGAPkdhOwor5ZGCPlJ5bzsKK+WRhj5Cb3U7CivlkYg+VGVpOwor5ZGJPkdvOwor5ZGKPktva3U7CivlkY4+U2VraTsKK+WRkT5Eb247CivlkZ8+R2VuOwor5ZGoPlNodXU7Civlkao+SnU7CivlkbA+U2hpOwor5ZGxPktvOwor5ZGzPk1pOwor5ZG1PkthOwor5ZG2PkRvOwor5ZG3PktvdTsKK+WRuz5TaGluOwor5ZG8PktvOwor5ZG9Pk1laTsKK+WSgD5TbzsKK+WShD5Ub3RzdTsKK+WShj5Ib3U7Civlkos+U2FrdTsKK+WSjD5XYTsKK+WSjj5LeXV1Owor5ZKPPkVpOwor5ZKQPkhvOwor5ZKSPlNodTsKK+WSoj5HYWt1Owor5ZKkPlRhOwor5ZKlPktpOwor5ZKoPlNoaTsKK+WSqz5TaGk7Civlkqw+S291Owor5ZKvPktha3U7CivlkrI+U2hvdTsKK+WSsz5HYWk7Civlkrg+S2FuOwor5ZK8PkthOwor5ZK9PkluOwor5ZK+PlJvdTsKK+WTgD5BaTsKK+WTgT5IaW47Civlk4I+U2hpbjsKK+WThD5Lb3U7Civlk4c+QWk7Civlk4g+R291Owor5ZOJPlNhaTsKK+WToT5JbjsKK+WToj5Sb3U7Civlk6U+S2E7Civlk6Y+R2E7Civlk6g+U2hvdTsKK+WTqT5SaTsKK+WTrT5Lb2t1Owor5ZOuPktvdTsKK+WTsj5UZXRzdTsKK+WTuj5IbzsKK+WTvT5Lb3U7CivllIQ+QmFpOwor5ZSGPlNhOwor5ZSHPlNoaW47CivllI8+S2k7CivllJA+VG91Owor5ZSUPkdvOwor5ZSWPkE7CivllK4+U2h1dTsKK+WUrz5ZdWk7CivllLE+U2hvdTsKK+WUsz5SZWk7CivllLg+VGVuOwor5ZS5PllvOwor5ZS+PkRhOwor5ZWAPkdhaTsKK+WVhD5UYWt1Owor5ZWFPlRha3U7CivllYY+U2hvdTsKK+WVjD5Lb3U7CivllY8+TW9uOwor5ZWTPktlaTsKK+WVlj5UYW47CivllZc+VGFuOwor5ZWcPlNldHN1Owor5ZWdPkthOwor5ZWjPkthbjsKK+WVuz5TaGk7Civllbw+VGVpOwor5ZW+PlNodXU7CivlloA+S2FrdTsKK+WWgz5OYW47CivlloQ+WmVuOwor5ZaHPlJhdHN1Owor5ZaJPktvdTsKK+WWij5LYW47Civllos+Q2hvdTsKK+WWmD5aZW47Civllpk+S2FpOwor5ZaaPkthbjsKK+WWnD5LaTsKK+WWnT5LYXRzdTsKK+WWnj5Tb2t1Owor5ZafPktpOwor5ZanPktlbjsKK+WWqD5SeW91Owor5ZapPll1Owor5ZaqPlNvdTsKK+WWqz5LaXRzdTsKK+WWrD5LeW91Owor5ZauPlRhbjsKK+WWtj5FaTsKK+WXhD5TYTsKK+WXhT5LeXV1Owor5ZeHPlNob2t1Owor5ZeUPlNoaW47Civll5o+TzsKK+WXnD5TaGk7Civll58+U2E7Civll6M+U2hpOwor5ZekPlNoaTsKK+WXtz5Hb3U7Civll7k+UmVuOwor5Ze9PlNva3U7Civll74+U291Owor5ZiGPlRhbjsKK+WYiT5LYTsKK+WYlD5PdTsKK+WYlj5TYWt1Owor5ZiXPlNob3U7CivlmJg+S3lvOwor5ZibPk1hOwor5ZipPkthOwor5ZivPlNob3U7CivlmLE+U2hva3U7CivlmLI+VG91Owor5Zi0PlNoaTsKK+WYtj5TZWk7CivlmLg+QnU7CivlmYI+U29uOwor5ZmMPlNvdTsKK+WZjj5JdHN1Owor5ZmQPktpOwor5ZmbPkdvdTsKK+WZpD5LaW47Civlmag+S2k7Civlmao+U291Owor5ZmrPkk7Civlmaw+WmVpOwor5Zm0PkZ1bjsKK+WZuD5Ub247CivlmoA+RGVpOwor5ZqGPktvdTsKK+Wahz5LYWt1Owor5ZqKPkhpOwor5ZqPPlRlaTsKK+WalD5UZWk7CivlmqA+Unl1dTsKK+Waoj5Ob3U7CivlmqU+RW47Civlmq4+S291Owor5Zq0PkdlbjsKK+Watj5PdTsKK+WavD5TaGFrdTsKK+WbgD5UZW47Civlm4E+U2hvdTsKK+Wbgj5Hb3U7Civlm4M+U291Owor5ZuIPkdlaTsKK+Wbjj5TbzsKK+WbkT5TaG9rdTsKK+Wbkz5LZXRzdTsKK+Wblz5JOwor5ZuYPkthaTsKK+Wbmj5TaHV1Owor5ZubPlNoaTsKK+Wbnj5LYWk7Civlm6A+SW47Civlm6M+RGFuOwor5ZuuPkthOwor5ZuwPktvbjsKK+Wbsj5JOwor5ZuzPlRvOwor5Zu5PlJlaTsKK+Wbuj5LbzsKK+WbvT5Lb2t1Owor5Zu/Pll1dTsKK+WcgD5Lb2t1Owor5ZyDPkhvOwor5ZyEPkd5bzsKK+WciD5LZW47CivlnIk+R3lvOwor5ZyLPktva3U7CivlnI0+STsKK+Wcjz5LZW47CivlnJI+RW47CivlnJM+RW47CivlnJY+VG87CivlnJg+RGFuOwor5ZycPkthbjsKK+Wcnz5EbzsKK+Wcpz5BdHN1Owor5ZyoPlphaTsKK+WcrT5LZWk7CivlnLA+Q2hpOwor5Zy7PktpOwor5Z2APlNoaTsKK+Wdgj5IYW47CivlnYc+S2luOwor5Z2KPkJvdTsKK+Wdjj5LYW47CivlnY8+SGFpOwor5Z2QPlphOwor5Z2RPktvdTsKK+WdoT5IYTsKK+WdpD5Lb247CivlnaY+VGFuOwor5Z2pPkthbjsKK+Wdqj5IZWk7Civlnb8+RnU7CivlnoI+U3VpOwor5Z6IPlRhaTsKK+WeiT5Ib3U7Civlnos+S2VpOwor5Z6TPkdhaTsKK+WeoD5HaW47CivlnqI+S291Owor5Z6jPkVuOwor5Z6kPlRldHN1Owor5Z+APlN1aTsKK+Wfgz5BaTsKK+Wfhj5LYWt1Owor5Z+LPk1haTsKK+Wfjj5Kb3U7Civln5I+UmFjaGk7Civln5M+UmFjaGk7Civln5Q+SG87Civln5w+U2hvOwor5Z+fPklraTsKK+WfoD5GdTsKK+Wfoz5TYWk7Civln7Q+U2hva3U7Civln7c+U2hpdHN1Owor5Z+5PkJhaTsKK+Wfuj5LaTsKK+WfvD5LaTsKK+WggD5LdXRzdTsKK+Wggj5Eb3U7CivloIU+S2VuOwor5aCGPlRhaTsKK+Wgij5BOwor5aCLPkhvdTsKK+WglT5EYTsKK+WgmT5JbjsKK+WgnT5LYTsKK+WgoT5Ib3U7CivloKQ+VGVpOwor5aCqPkthbjsKK+Wgrz5HeW91Owor5aCwPkVuOwor5aCxPkhvdTsKK+WgtD5Kb3U7CivloLU+VG87CivloLo+S2FpOwor5aC9PktvdTsKK+WhgT5SdWk7CivloYo+S2FpOwor5aGLPkVpOwor5aGRPlNvOwor5aGSPlNoaTsKK+WhlD5Ub3U7CivloZc+VG87CivloZg+VG91Owor5aGZPktha3U7CivloZo+Q2hvdTsKK+Whnj5Tb2t1Owor5aGiPk87Civloak+RW47Civloas+VGVuOwor5aGyPkpvdTsKK+WhtT5KaW47Civlobk+WmFuOwor5aG+Pkp1a3U7CivlooM+S3lvdTsKK+WihT5TaG87CivlopM+Qm87Civlopc+Wm91Owor5aKcPlRzdWk7Civlop8+S3lvOwor5aKoPkJva3U7Civloqs+U2h1bjsKK+Wirj5EYTsKK+Wisz5GdW47Civlorg+U2hvOwor5aK6Pk91Owor5aK7PlNob3U7Civlor4+S29uOwor5aOBPkhla2k7Civlo4U+WW91Owor5aOHPkRhbjsKK+Wjij5LYWk7Civlo4w+Sm91Owor5aORPkdha3U7Civlo5M+QXRzdTsKK+WjlT5Hb3U7Civlo5g+UnVpOwor5aOZPktvdTsKK+WjnD5UYW47Civlo54+S2FpOwor5aOfPlJ5b3U7Civlo6Q+Sm91Owor5aOlPlRlbjsKK+Wjqz5TaGk7Civlo6w+SmluOwor5aOuPlNvdTsKK+Wjrz5Tb3U7Civlo7A+U2VpOwor5aOxPkljaGk7Civlo7I+QmFpOwor5aO3PktvOwor5aO5PkljaGk7Civlo7o+S287Civlo7s+U2VpOwor5aO8PktvbjsKK+WjvT5KdTsKK+Wkgj5DaGk7CivlpIk+SGVuOwor5aSKPlN1aTsKK+Wkjz5LYTsKK+WkkD5LZWk7CivlpJU+U2VraTsKK+Wklj5HYWk7CivlpJg+Qm91Owor5aSZPlNodWt1Owor5aSaPlRhOwor5aSbPlRhOwor5aScPllhOwor5aSiPk11Owor5aSlPkthOwor5aSnPlRhaTsKK+WkqT5UZW47CivlpKo+VGE7CivlpKs+RnU7CivlpKw+S2V0c3U7CivlpK0+WW91Owor5aSuPk91Owor5aSxPlNoaXRzdTsKK+Wksj5Ub3U7CivlpLc+STsKK+WkuD5LbzsKK+Wkvj5Lb3U7CivlpYQ+RW47CivlpYc+S2k7CivlpYg+TmE7CivlpYk+SG91Owor5aWOPktlaTsKK+Wljz5Tb3U7CivlpZA+S2FuOwor5aWRPlNldHN1Owor5aWUPkhvbjsKK+WllT5Fa2k7CivlpZc+VG91Owor5aWYPkpvdTsKK+Wlmj5LZWk7CivlpaA+VGVuOwor5aWiPlNoYTsKK+WlpT5PdTsKK+Wlpz5PdTsKK+WlqD5TaG91Owor5aWpPlJlbjsKK+Wlqj5EYXRzdTsKK+WlrD5TaG91Owor5aWuPkZ1bjsKK+Wlsz5KbzsKK+WltD5EbzsKK+WluD5LYW47Civlpb0+S291Owor5aaBPlNoYWt1Owor5aaCPkpvOwor5aaDPkhpOwor5aaEPkJvdTsKK+Wmij5OaW47Civlpo0+S2VuOwor5aaTPktpOwor5aaWPllvdTsKK+WmmT5NeW91Owor5aabPlNoaTsKK+WmnT5Tb3U7CivlpqM+SGk7CivlpqU+RGE7Civlpqg+Qm91Owor5aasPlRvOwor5aayPkRhdHN1Owor5aa5Pk1haTsKK+Wmuz5TYWk7Civlpr4+U2hvdTsKK+Wnhj5CbzsKK+WniT5TaGk7Civlp4s+U2hpOwor5aeQPlNvOwor5aeRPktvOwor5aeTPlNlaTsKK+WnlD5JOwor5aeZPk5pbjsKK+Wnmj5Zb3U7Civlp5w+S3lvdTsKK+WnpT5CbzsKK+Wnpj5LYW47Civlp6g+STsKK+Wnqj5UZXRzdTsKK+Wnqz5LaTsKK+Wntj5PdTsKK+Wnuz5JbjsKK+Wnvz5TaGk7CivlqIE+STsKK+Wogz5BOwor5aiJPkhlaTsKK+WokT5TaGE7CivlqJg+Sm91Owor5aiaPk5hbjsKK+WonD5EYTsKK+Wonz5LZW47CivlqKA+U2hpbjsKK+WopT5HYTsKK+WoqT5CZW47CivlqK8+R287CivlqLU+U2h1Owor5ai2PlNodTsKK+WovD5TaG91Owor5amAPkE7CivlqYE+Um91Owor5amGPkJhOwor5amJPkVuOwor5amaPktvbjsKK+Wpoj5IaTsKK+Wppj5GdTsKK+Wpqj5SYW47Civlqaw+SW47Civlqb8+U2VpOwor5aqSPkJhaTsKK+Wqmj5CaTsKK+Wqmz5FbjsKK+WqvD5PdTsKK+WqvT5CbzsKK+Wqvj5Lb3U7Civlq4E+S2E7Civlq4I+U291Owor5auJPlNoaXRzdTsKK+Wriz5Kb3U7Civlq4w+S2VuOwor5auQPkpvdTsKK+Wrlj5IeW91Owor5auXPk91Owor5auhPkNoYWt1Owor5aujPkVuOwor5aumPktvdTsKK+WrqT5Eb247Civlq7o+S2FuOwor5au7PkthbjsKK+WsiT5LaTsKK+Wsiz5TZW47CivlrIw+S3lvdTsKK+Wslj5IZWk7CivlrKI+Sm91Owor5ayqPkhpbjsKK+WsrD5TaHU7CivlrLA+RWk7CivlrLI+Sm91Owor5ay+PlJhbjsKK+WtgD5Tb3U7CivlrYM+Sm91Owor5a2FPlNlbjsKK+WtkD5TaGk7CivlrZE+R2V0c3U7CivlrZQ+S291Owor5a2VPllvdTsKK+Wtlz5KaTsKK+WtmD5Tb247CivlrZo+RnU7CivlrZs+Qm90c3U7CivlrZw+U2hpOwor5a2dPktvdTsKK+Wtnz5Nb3U7CivlraM+S2k7CivlraQ+S287CivlraU+RG87CivlraY+R2FrdTsKK+WtqT5LYWk7Civlras+U29uOwor5a2wPkp1a3U7CivlrbE+U2VuOwor5a2zPlNoaTsKK+WttT5GdTsKK+WtuD5HYWt1Owor5a26Pkp1Owor5a6APkJlbjsKK+Wugz5UYTsKK+WuhT5UYWt1Owor5a6HPlU7Civlrog+U2h1Owor5a6JPkFuOwor5a6LPlNvdTsKK+WujD5LYW47Civlro0+TmlrdTsKK+Wujz5Lb3U7CivlrpU+VG91Owor5a6XPlNodXU7Civlrpg+S2FuOwor5a6ZPkNodXU7Civlrpo+VGVpOwor5a6bPkVuOwor5a6cPkdpOwor5a6dPkhvdTsKK+Wunz5KaXRzdTsKK+Wuoj5LeWFrdTsKK+Wuoz5TZW47CivlrqQ+U2hpdHN1Owor5a6lPll1dTsKK+Wupj5LYW47Civlrq4+S3l1dTsKK+WusD5TYWk7CivlrrM+R2FpOwor5a60PkVuOwor5a61PlNob3U7CivlrrY+S2E7Civlrrg+U2hpbjsKK+WuuT5Zb3U7Civlrr8+U2h1a3U7Civlr4I+SmFrdTsKK+Wvgz5FbjsKK+WvhD5LaTsKK+WvhT5JbjsKK+Wvhj5NaXRzdTsKK+Wvhz5Lb3U7Civlr4k+S2FrdTsKK+WvjD5GdTsKK+WvkD5CaTsKK+Wvkj5LYW47Civlr5M+R3V1Owor5a+UPlNob2t1Owor5a+bPkthbjsKK+WvnT5TaGluOwor5a+ePkJha3U7Civlr58+U2F0c3U7Civlr6E+S2E7Civlr6I+U2hpbjsKK+WvpD5HbzsKK+WvpT5SeW91Owor5a+mPkppdHN1Owor5a+nPk5laTsKK+WvqD5TYWk7Civlr6k+U2hpbjsKK+Wvqz5TaGE7Civlr64+UnlvdTsKK+WvsD5LYW47Civlr7M+SG91Owor5a+1PkNob3U7Civlr7Y+SG91Owor5a+4PlN1bjsKK+Wvuj5KaTsKK+Wvvj5UYWk7Civlr78+SnU7CivlsIE+RnV1Owor5bCCPlNlbjsKK+WwhD5TaGE7CivlsIU+S29rdTsKK+Wwhj5TaG91Owor5bCHPlNob3U7CivlsIg+U2VuOwor5bCJPkk7CivlsIo+U29uOwor5bCLPkppbjsKK+WwjT5UYWk7CivlsI4+RG91Owor5bCPPlNob3U7CivlsJE+U2hvdTsKK+Wwkz5KaTsKK+Wwlj5TZW47CivlsJo+U2hvdTsKK+WwoD5TZW47CivlsKI+T3U7CivlsKQ+WXV1Owor5bCoPkJvdTsKK+WwrT5HeW91Owor5bCxPlNodXU7CivlsLg+U2hpOwor5bC5PkluOwor5bC6PlNoYWt1Owor5bC7PktvdTsKK+WwvD5OaTsKK+WwvT5KaW47CivlsL4+Qmk7CivlsL8+TnlvdTsKK+WxgD5LeW9rdTsKK+WxgT5IaTsKK+WxhT5LeW87CivlsYY+S2FpOwor5bGIPkt1dHN1Owor5bGKPkthaTsKK+Wxiz5Pa3U7CivlsY0+U2hpOwor5bGOPlNoaTsKK+Wxjz5IZWk7CivlsZA+R2VraTsKK+WxkT5TZXRzdTsKK+Wxkz5LaTsKK+WxlT5UZW47CivlsZ4+Wm9rdTsKK+WxoD5UbzsKK+WxoT5SdTsKK+WxpD5Tb3U7CivlsaU+Umk7Civlsaw+Wm9rdTsKK+Wxrj5TYTsKK+Wxrz5Ub247CivlsbE+U2FuOwor5bG5PktpdHN1Owor5bKMPkt5dXU7CivlspA+S2k7CivlspE+U2hpbjsKK+WylD5TYTsKK+WyoT5Lb3U7Civlsqg+U287Civlsqk+R2FuOwor5bKrPlNodXU7Civlsqw+S291Owor5bKxPlRhaTsKK+Wysz5HYWt1Owor5bK2Pkhha3U7Civlsrc+QmluOwor5bK4PkdhbjsKK+Wyuz5KaTsKK+Wyvj5TZW47Civls4c+S291Owor5bOZPkppOwor5bOhPkt5b3U7Civls6g+R2E7Civls6k+R2E7Civls6o+WW9rdTsKK+WzrT5TaG91Owor5bOvPkhvdTsKK+WzsD5Ib3U7Civls7Y+VG91Owor5bO6PktvdTsKK+Wzuz5TaHVuOwor5bO9Pkt5b3U7CivltIc+U3V1Owor5bSLPkthOwor5bSOPktpOwor5bSRPktvbjsKK+W0lD5TYWk7CivltJU+R2FpOwor5bSWPkdhaTsKK+W0lz5Lb3U7CivltJg+Um9uOwor5bSZPlJvbjsKK+W0mj5SeW91Owor5bSbPkt1dHN1Owor5bSfPkdpbjsKK+W0oj5Tb3U7CivltKk+SG91Owor5bWLPkJpOwor5bWMPkthbjsKK+W1jj5HdXU7CivltZA+UmFuOwor5bWSPkdhbjsKK+W1nD5LaTsKK+W1qT5TdXU7Civltaw+S2FpOwor5bWvPlNhOwor5bWzPlNhOwor5baCPlNob3U7CivltoQ+U2FuOwor5baHPkt1Owor5baLPlRvdTsKK+W2jD5Ub3U7CivltpA+Unl1dTsKK+W2nT5Ub3U7CivltqI+R3lvdTsKK+W2rD5HaTsKK+W2rj5LZW47Civltrc+R2k7Civltro+UmVpOwor5ba8PlNobzsKK+W2vT5HYWt1Owor5beJPlNhbjsKK+W3jD5HYW47Civlt40+R2k7Civlt5I+UmFuOwor5beTPlRlbjsKK+W3lj5HYW47Civlt5s+U2VuOwor5bedPlNlbjsKK+W3nj5TaHV1Owor5behPkp1bjsKK+W3oz5Tb3U7Civlt6U+S291Owor5bemPlNhOwor5benPktvdTsKK+W3qD5LeW87Civlt6s+RnU7Civlt64+U2hpOwor5bexPktpOwor5beyPkk7Civlt7M+U2hpOwor5be0PkhhOwor5be1PlNoaTsKK+W3tz5Lb3U7Civlt7s+S2FuOwor5be9PlNvbjsKK+W3vj5LaW47CivluII+U2hpOwor5biDPkZ1Owor5biGPkhhbjsKK+W4iz5TaGk7CivluIw+S2k7CivluJE+RG87CivluJY+Sm91Owor5biZPkNoaXRzdTsKK+W4mj5Tb3U7CivluJs+SGFrdTsKK+W4nT5UZWk7CivluKU+U290c3U7CivluKs+U2hpOwor5bitPlNla2k7CivluK8+VGFpOwor5biwPktpOwor5bizPkNob3U7CivluLY+VGFpOwor5bi3Pkk7CivluLg+Sm91Owor5bi9PkJvdTsKK+W5gD5UZWk7CivluYM+STsKK+W5hD5Ba3U7CivluYU+RnVrdTsKK+W5hz5Ib3U7CivluYw+S291Owor5bmOPkJla2k7CivluZQ+QmFuOwor5bmVPk1ha3U7CivluZc+S2FrdTsKK+W5nz5TaGk7CivluaE+SGFuOwor5bmiPlRvdTsKK+W5oz5IZWk7CivluaQ+SGVpOwor5bmyPkthbjsKK+W5sz5IZWk7CivlubQ+TmVuOwor5bm1PktlbjsKK+W5tj5IZWk7Civlubg+S291Owor5bm5PkthbjsKK+W5uj5Zb3U7Civlubs+R2VuOwor5bm8PllvdTsKK+W5vT5ZdXU7Civlub4+S2k7Civlub8+R2VuOwor5bqBPkNob3U7CivluoM+S291Owor5bqEPlNvdTsKK+W6hz5IaTsKK+W6ij5TaG91Owor5bqPPkpvOwor5bqVPlRlaTsKK+W6lj5Ib3U7Civlupc+VGVuOwor5bqaPktvdTsKK+W6nD5GdTsKK+W6oD5TaG91Owor5bqmPlRha3U7Civluqc+WmE7Civluqs+S287Civluq0+VGVpOwor5bq1PkFuOwor5bq2PlNobzsKK+W6tz5Lb3U7Civlurg+WW91Owor5buBPlNoaTsKK+W7gj5TaG91Owor5buDPkhhaTsKK+W7iD5LYTsKK+W7iT5SZW47Civlu4o+Um91Owor5buQPkt5dXU7Civlu5M+S2FrdTsKK+W7lj5SeW91Owor5buaPlp1Owor5bubPlRlbjsKK+W7nT5TaGk7Civlu58+QnlvdTsKK+W7oD5TaG91Owor5buhPkJ1Owor5buiPkhhaTsKK+W7oz5Lb3U7Civlu6g+S2FpOwor5bupPlJpbjsKK+W7rD5SeW87Civlu7A+Q2hvdTsKK+W7sT5Zb3U7Civlu7M+Q2hvdTsKK+W7tD5JbjsKK+W7tj5FbjsKK+W7tz5UZWk7Civlu7g+VGVraTsKK+W7uj5LZW47Civlu7s+S2FpOwor5bu8PkRhaTsKK+W7vj5LeW91Owor5bu/Pkp1dTsKK+W8gT5CZW47CivlvIM+S2k7CivlvIQ+Um91Owor5byJPkpvdTsKK+W8ij5IZWk7CivlvIs+WW9rdTsKK+W8jD5JdHN1Owor5byNPk5pOwor5byPPlNoaWtpOwor5byQPk5pOwor5byRPlNoaTsKK+W8kz5LeXV1Owor5byUPkNob3U7CivlvJU+SW47CivlvJc+RnV0c3U7CivlvJg+S291Owor5bybPlNoaTsKK+W8nz5UZWk7CivlvKU+TWk7CivlvKY+R2VuOwor5bynPktvOwor5bypPkRvOwor5bytPkJpOwor5byvPldhbjsKK+W8sT5KYWt1Owor5by1PkNob3U7CivlvLc+S3lvdTsKK+W8uD5Ib3U7CivlvLw+SGl0c3U7CivlvL4+RGFuOwor5b2BPlNlaTsKK+W9iD5EYW47CivlvYo+S3lvdTsKK+W9jD5CaTsKK+W9jj5XYW47CivlvZE+S2VpOwor5b2TPlRvdTsKK+W9lj5UYW47CivlvZc+U3VpOwor5b2ZPkk7CivlvZw+STsKK+W9nT5JOwor5b2hPlNhbjsKK+W9oj5LZWk7CivlvaY+R2VuOwor5b2pPlNhaTsKK+W9qj5IeW91Owor5b2rPkNob3U7Civlvaw+SGluOwor5b2tPkhvdTsKK+W9sD5TaG91Owor5b2xPkVpOwor5b2zPlRla2k7Civlvbc+SG91Owor5b25Pllha3U7Civlvbw+SGk7Civlvb8+RnV0c3U7CivlvoA+T3U7CivlvoE+U2VpOwor5b6CPlNvOwor5b6DPk91Owor5b6EPktlaTsKK+W+hT5UYWk7Civlvoc+U2h1bjsKK+W+iD5Lb247Civlvoo+S2FpOwor5b6LPlJpdHN1Owor5b6MPkdvOwor5b6QPkpvOwor5b6RPktlaTsKK+W+kj5UbzsKK+W+kz5KdXU7Civlvpc+VG9rdTsKK+W+mD5IYWk7Civlvpk+U2hpOwor5b6ePkp1dTsKK+W+oD5SYWk7CivlvqE+R3lvOwor5b6oPktvdTsKK+W+qT5GdWt1Owor5b6qPkp1bjsKK+W+rT5Zb3U7Civlvq4+Qmk7CivlvrM+VG9rdTsKK+W+tD5DaG91Owor5b65PlRldHN1Owor5b68Pkt5b3U7Civlvr0+S2k7Civlv4M+U2hpbjsKK+W/hT5IaXRzdTsKK+W/jD5LaTsKK+W/jT5OaW47Civlv5Y+U29uOwor5b+XPlNoaTsKK+W/mD5Cb3U7Civlv5k+Qm91Owor5b+cPk91Owor5b+dPlRlbjsKK+W/oD5DaHV1Owor5b+kPkdvOwor5b+rPkthaTsKK+W/sD5TdWk7Civlv7E+U2hpbjsKK+W/tT5OZW47Civlv7g+SmlrdTsKK+W/uz5LaW47Civlv70+S290c3U7Civlv78+RnVuOwor5oCOPlNoaW47CivmgI8+WW91Owor5oCQPktvdTsKK+aAkj5EbzsKK+aAlT5IYTsKK+aAlj5GdTsKK+aAmT5LbzsKK+aAmz5EYXRzdTsKK+aAnD5SZWk7CivmgJ0+U2hpOwor5oCgPlRhaTsKK+aAoT5JOwor5oClPkt5dXU7CivmgKY+SG91Owor5oCnPlNlaTsKK+aAqD5FbjsKK+aAqT5KaTsKK+aAqj5LYWk7CivmgKs+RnV0c3U7CivmgK8+S3lvdTsKK+aAsT5Tb3U7CivmgYE+SW47CivmgYI+SnVuOwor5oGDPkppOwor5oGGPktvdTsKK+aBij5LeW91Owor5oGLPlJlbjsKK+aBjT5Lb3U7CivmgZA+S3lvdTsKK+aBkj5Lb3U7CivmgZU+Sm87CivmgZk+WW91Owor5oGaPkk7CivmgZ8+S3lvdTsKK+aBoD5LYWk7CivmgaI+S2FpOwor5oGjPlNoaTsKK+aBpD5KdXRzdTsKK+aBpT5DaGk7Civmgag+S29uOwor5oGpPk9uOwor5oGqPktha3U7Civmgas+RG91Owor5oGsPlRlbjsKK+aBrT5LeW91Owor5oGvPlNva3U7CivmgbA+S291Owor5oG1PktlaTsKK+aBtz5LeXV1Owor5oKBPkVuOwor5oKDPktvbjsKK+aChD5TaG91Owor5oKJPlNoaXRzdTsKK+aCiz5SaW47Civmgow+VGVpOwor5oKNPkthbjsKK+aCkj5ZdXU7CivmgpQ+S2FpOwor5oKWPkhhaTsKK+aClz5CYW47Civmgpo+U2hvdTsKK+aCmz5TZW47Civmgp8+R287CivmgqA+WXV1Owor5oKjPkthbjsKK+aCpj5FdHN1Owor5oKnPlJpOwor5oKpPk5vdTsKK+aCqj5Ba3U7CivmgrI+SGk7CivmgrM+VG9rdTsKK+aCtD5TdWk7CivmgrU+Q2hvdTsKK+aCtj5Nb247Civmgrg+S2k7Civmgrw+VG91Owor5oK9PlNlaTsKK+aDhT5Kb3U7Civmg4Y+Q2h1dTsKK+aDhz5Ub247Civmg5E+V2FrdTsKK+aDkz5LZW47Civmg5g+Qm91Owor5oOaPktvdHN1Owor5oOcPlNla2k7Civmg58+STsKK+aDoD5LZWk7Civmg6E+TzsKK+aDoz5Tb3U7Civmg6c+S3U7Civmg6g+U2FuOwor5oOwPkRhOwor5oOxPk5vdTsKK+aDsz5Tb3U7Civmg7Q+WnVpOwor5oO2PktvdTsKK+aDtz5TaHVuOwor5oO5PkphOwor5oO6PlNlaTsKK+aDuz5Tb2t1Owor5oSAPlNob3U7CivmhIE+U2h1dTsKK+aEgz5LZW47CivmhIY+S2VuOwor5oSIPll1Owor5oSJPll1Owor5oSNPkJpbjsKK+aEjj5IeW9rdTsKK+aEjz5JOwor5oSVPkdha3U7CivmhJo+R3U7CivmhJs+QWk7CivmhJ8+S2FuOwor5oShPlNvdTsKK+aEpz5LaTsKK+aEqD5LYWt1Owor5oSsPlNvOwor5oS0PlNvdTsKK+aEvD5TaGluOwor5oS9Pkhha3U7CivmhL4+S2k7CivmhL8+R2VuOwor5oWCPllvdTsKK+aFhD5SaXRzdTsKK+aFhz5JbjsKK+aFiD5KaTsKK+aFij5LZW47CivmhYs+VGFpOwor5oWMPktvdTsKK+aFjT5VbjsKK+aFjj5TaGluOwor5oWTPkh5b3U7CivmhZU+Qm87CivmhZg+U2FuOwor5oWZPlphbjsKK+aFmj5aYW47CivmhZ0+VG9rdTsKK+aFnz5Eb3U7CivmhaI+TWFuOwor5oWjPkthbjsKK+aFpT5ab3U7Civmhac+S2VpOwor5oWoPkdhaTsKK+aFqz5TaG91Owor5oWuPlJ5bzsKK+aFrz5TaG91Owor5oWwPkk7CivmhbE+VGFuOwor5oWzPkthbjsKK+aFtD5TaG91Owor5oW1PllvdTsKK+aFtj5LZWk7Civmhbc+S291Owor5oW+Pllva3U7CivmhoI+WXV1Owor5oaHPktlaTsKK+aGij5IYWk7Civmho4+Wm91Owor5oaQPlJlbjsKK+aGkT5IeW91Owor5oaUPlNob3U7CivmhpY+R2luOwor5oaZPktpOwor5oaaPlRhbjsKK+aGpD5GdW47Civmhqc+RG91Owor5oapPktlaTsKK+aGqz5CaW47Civmhqw+S2VpOwor5oauPkJ1Owor5oayPktlbjsKK+aGtj5Pa3U7Civmhro+VGFuOwor5oa+PkthbjsKK+aHgz5LaW47Civmh4Y+U291Owor5oeHPktvbjsKK+aHiD5LYWk7Civmh4k+WW91Owor5oeKPk91Owor5oeLPkJvdTsKK+aHjD5Fa2k7Civmh40+UmluOwor5oeQPkthaTsKK+aHoz5Nb247Civmh6Y+RGE7Civmh7I+Q2hvdTsKK+aHtD5aYW47Civmh7Y+UmFuOwor5oe3PkthaTsKK+aHuD5LZW47Civmh7o+WmFuOwor5oe8Pkt1Owor5oe9PkthbjsKK+aHvj5TaG91Owor5oe/Pkk7CivmiIA+UmVuOwor5oiIPkthOwor5oiJPkV0c3U7CivmiIo+Qm87CivmiIw+SnV0c3U7CivmiI0+SnU7CivmiI4+SnV1Owor5oiQPlNlaTsKK+aIkT5HYTsKK+aIkj5LYWk7CivmiJQ+U2FuOwor5oiWPldha3U7CivmiJo+U2VraTsKK+aImz5LYXRzdTsKK+aInT5ab2t1Owor5oiePkthdHN1Owor5oifPkdla2k7CivmiKE+S2FuOwor5oimPlNlbjsKK+aIqj5TZXRzdTsKK+aIrj5SaWt1Owor5oivPkdpOwor5oiwPlNlbjsKK+aIsj5HaTsKK+aIsz5UYWt1Owor5oi0PlRhaTsKK+aIuD5LbzsKK+aIuz5SZWk7CivmiL8+Qm91Owor5omAPlNobzsKK+aJgT5IZW47CivmiYc+U2VuOwor5omIPktvOwor5omJPkhpOwor5omLPlNodTsKK+aJjT5TYWk7CivmiY4+U2F0c3U7CivmiZM+RGE7CivmiZU+RnV0c3U7CivmiZg+VGFrdTsKK+aJmz5Lb3U7CivmiZ4+S2FuOwor5omgPlNhOwor5omjPktvdTsKK+aJrj5GdW47CivmibE+U291Owor5om2PkZ1Owor5om5PkhpOwor5om8PkFrdTsKK+aJvj5LYTsKK+aJvz5TaG91Owor5oqAPkdpOwor5oqCPkt5b3U7CivmioM+QmVuOwor5oqEPlNob3U7Civmiok+S2V0c3U7Civmioo+SGE7CivmipE+WW9rdTsKK+aKkj5KbzsKK+aKkz5Tb3U7CivmipQ+SG91Owor5oqVPlRvdTsKK+aKlj5Ub3U7Civmipc+S291Owor5oqYPlNldHN1Owor5oqbPkhvdTsKK+aKnD5CYXRzdTsKK+aKnj5UYWt1Owor5oqrPkhpOwor5oqsPlRhaTsKK+aKsT5Ib3U7CivmirU+VGVpOwor5oq5Pk1hdHN1Owor5oq7PlNoaW47Civmirw+T3U7Civmir0+Q2h1dTsKK+aLgj5GdXRzdTsKK+aLhT5UYW47Civmi4Y+VGFrdTsKK+aLhz5CbzsKK+aLiD5EZW47Civmi4k+UmF0c3U7Civmi4o+RnU7Civmi4w+SGFuOwor5ouNPkhha3U7Civmi48+RGE7Civmi5A+S2FpOwor5ouRPkthbjsKK+aLkj5LeW87Civmi5M+VGFrdTsKK+aLlD5CYXRzdTsKK+aLlz5PdTsKK+aLmD5Lb3U7Civmi5k+U2V0c3U7Civmi5s+U2hvdTsKK+aLnD5IYWk7Civmi50+SGFpOwor5ougPkt5bzsKK+aLoT5LYWt1Owor5ousPkthdHN1Owor5outPlNoaWtpOwor5ouuPktpdHN1Owor5ouvPkpvdTsKK+aLsT5LeW91Owor5ouzPktlbjsKK+aLtT5Tb247Civmi7Y+U2F0c3U7Civmi7c+R291Owor5ou+PlNodXU7Civmi78+RGE7CivmjIE+Smk7CivmjII+S2VpOwor5oyHPlNoaTsKK+aMiD5LZXRzdTsKK+aMiT5BbjsKK+aMjD5LYWt1Owor5oyRPkNob3U7CivmjJk+S3lvOwor5oyfPkt5b3U7CivmjKc+S3U7CivmjKg+QWk7CivmjKs+WmE7CivmjK8+U2hpbjsKK+aMuj5UZWk7CivmjL0+QmFuOwor5oy+Pkt5b3U7CivmjL8+U291Owor5o2JPlNva3U7CivmjYw+SGF0c3U7CivmjY0+S2FuOwor5o2PPkRldHN1Owor5o2QPkVuOwor5o2VPkhvOwor5o2XPkhvOwor5o2cPlNvdTsKK+aNpz5Ib3U7Civmjag+U2hhOwor5o2pPlJldHN1Owor5o2rPk1vbjsKK+aNrj5LeW87CivmjbI+S2VuOwor5o22PlN1aTsKK+aNtz5TaG91Owor5o26Pk5hdHN1Owor5o27Pk5lbjsKK+aOgD5LaW47CivmjoM+U291Owor5o6IPkp1Owor5o6JPlRvdTsKK+aOjD5TaG91Owor5o6OPktpOwor5o6PPlRvdTsKK+aOkj5IYWk7CivmjpY+RWtpOwor5o6YPkt1dHN1Owor5o6bPkthOwor5o6fPlRvdTsKK+aOoD5SeWFrdTsKK+aOoT5TYWk7CivmjqI+VGFuOwor5o6jPlNlaTsKK+aOpT5TZXRzdTsKK+aOpz5Lb3U7Civmjqg+U3VpOwor5o6pPkVuOwor5o6qPlNvOwor5o6rPlNvdTsKK+aOrD5LaWt1Owor5o6yPktlaTsKK+aOtD5LYWt1Owor5o67PlNvdTsKK+aOvj5FbjsKK+aPgD5LYW47Civmj4M+U2VuOwor5o+EPll1Owor5o+GPktpOwor5o+JPkp1dTsKK+aPjz5CeW91Owor5o+QPlRlaTsKK+aPkj5Tb3U7Civmj5Y+WXV1Owor5o+aPllvdTsKK+aPmz5LYW47Civmj6E+QWt1Owor5o+jPlNoaTsKK+aPqT5LYWk7Civmj64+S2k7Civmj7Q+RW47Civmj7Y+WWE7Civmj7o+WW91Owor5pCGPktvdTsKK+aQjT5Tb247CivmkI8+SGFrdTsKK+aQkz5TYTsKK+aQlj5Zb3U7CivmkJc+VG91Owor5pCcPlNvdTsKK+aQpj5KYWt1Owor5pCoPlRvdTsKK+aQrD5IYW47CivmkK0+VG91Owor5pC0PktlbjsKK+aQtj5TaG91Owor5pC6PktlaTsKK+aQvj5TYWt1Owor5pGCPlNldHN1Owor5pGOPkt5dXU7CivmkZg+VGVraTsKK+aRpz5TYWk7Civmkak+TWE7Civmka8+U2hpOwor5pG2PlRhbjsKK+aRuD5NbzsKK+aRuj5TaG91Owor5pKDPkdla2k7Civmkog+Um91Owor5pKSPlNhbjsKK+aSkz5Eb3U7CivmkpU+U2VpOwor5pKaPk5lbjsKK+aSnj5TaHU7CivmkqQ+VGV0c3U7CivmkqU+SGF0c3U7Civmkqk+UnlvdTsKK+aSqz5CdTsKK+aSrT5IYTsKK+aSrj5TYXRzdTsKK+aSsD5TYW47CivmkrI+Qm9rdTsKK+aSuT5LYWt1Owor5pK7PlRhY2hpOwor5pK8PkthbjsKK+aTgT5Zb3U7Civmk4I+UmFpOwor5pOFPlNlbjsKK+aThz5UYWt1Owor5pONPlNvdTsKK+aTkj5LaW47Civmk5Q+VGFuOwor5pOYPkhha3U7Civmk5o+S3lvOwor5pOgPlNlaTsKK+aToT5UYWk7Civmk6I+VGVraTsKK+aToz5Ub3U7Civmk6Y+U2F0c3U7Civmk6c+S3lvOwor5pOsPkdpOwor5pOvPkhpbjsKK+aTsT5LYWt1Owor5pOyPlRla2k7Civmk7Q+S2FrdTsKK+aTtj5TZW47Civmk7o+SGFpOwor5pO9PlJ5YWt1Owor5pO+PkpvdTsKK+aUgD5IYW47CivmlIU+U2FuOwor5pSYPkpvdTsKK+aUnD5LZWk7CivmlJ0+U2V0c3U7CivmlKM+UmVuOwor5pSkPlRhbjsKK+aUqj5LYWt1Owor5pSrPktha3U7CivmlKw+UmFuOwor5pSvPlNoaTsKK+aUtD5Ib2t1Owor5pS1PkJva3U7CivmlLY+U2h1dTsKK+aUtz5Lb3U7CivmlLg+WXV1Owor5pS5PkthaTsKK+aUuz5Lb3U7CivmlL4+SG91Owor5pS/PlNlaTsKK+aVhT5LbzsKK+aViD5Lb3U7CivmlY0+Sm87CivmlY8+QmluOwor5pWRPkt5dXU7CivmlZU+Q2hva3U7CivmlZY+R291Owor5pWXPkhhaTsKK+aVmD5KbzsKK+aVmT5LeW91Owor5pWdPkhlaTsKK+aVnj5TaG91Owor5pWiPkthbjsKK+aVoz5TYW47CivmlaY+VG9uOwor5pWsPktlaTsKK+aVsD5TdXU7CivmlbI+S291Owor5pW0PlNlaTsKK+aVtT5UZWtpOwor5pW3PkZ1Owor5pW4PlN1dTsKK+aWgj5SZW47CivmloM+SGVpOwor5paHPkJ1bjsKK+aWiD5HYWt1Owor5paJPlNlaTsKK+aWjD5IaW47Civmlo4+U2FpOwor5paQPkhpOwor5paRPkhhbjsKK+aWlz5UbzsKK+aWmT5SeW91Owor5pabPktva3U7Civmlpw+U2hhOwor5pafPlNoaW47CivmlqE+QXRzdTsKK+aWpD5LaW47CivmlqU+U2VraTsKK+aWpz5GdTsKK+aWqz5TaGFrdTsKK+aWrD5aYW47Civmlq0+RGFuOwor5pavPlNoaTsKK+aWsD5TaGluOwor5pa3PkRhbjsKK+aWuT5Ib3U7Civmlrw+TzsKK+aWvT5TaGk7Civml4E+SG91Owor5peDPlNlbjsKK+aXhD5Cb3U7Civml4U+UnlvOwor5peGPkhhaTsKK+aXiz5TZW47Civml4w+U2VpOwor5pePPlpva3U7Civml5I+Unl1dTsKK+aXlz5LaTsKK+aXmT5IYW47Civml5s+SGFuOwor5pegPkJ1Owor5pehPktpOwor5peiPktpOwor5pelPk5pY2hpOwor5pemPlRhbjsKK+aXpz5LeXV1Owor5peoPlNoaTsKK+aXqT5Tb3U7Civml6w+SnVuOwor5petPkt5b2t1Owor5pexPkthbjsKK+aXuj5PdTsKK+aXuz5CaW47CivmmII+S291Owor5piDPlNva3U7CivmmIY+S29uOwor5piHPlNob3U7CivmmIo+S291Owor5piMPlNob3U7CivmmI4+TWVpOwor5piPPktvbjsKK+aYkz5Fa2k7CivmmJQ+U2VraTsKK+aYnD5Zb3U7CivmmJ8+U2VpOwor5pigPkVpOwor5pilPlNodW47CivmmKc+TWFpOwor5pioPlNha3U7CivmmK0+U2hvdTsKK+aYrz5aZTsKK+aYtD5Cb3U7CivmmLU+Sml0c3U7CivmmLY+Q2hvdTsKK+aYvD5DaHV1Owor5pi/PktvdTsKK+aZgT5DaG91Owor5pmCPkppOwor5pmDPktvdTsKK+aZhD5Lb3U7CivmmYk+U2hpbjsKK+aZiz5TaGluOwor5pmPPkFuOwor5pmSPlNhaTsKK+aZnT5DaHV1Owor5pmePktpOwor5pmfPlNlaTsKK+aZoj5TZXRzdTsKK+aZpD5HbzsKK+aZpj5LYWk7Civmmac+S291Owor5pmoPlNoaW47Civmmak+QmFuOwor5pmuPkZ1Owor5pmvPktlaTsKK+aZsD5TZWtpOwor5pm0PlNlaTsKK+aZtj5TaG91Owor5pm6PkNoaTsKK+aagT5HeW91Owor5pqDPkhpOwor5pqEPktlbjsKK+aahz5LYTsKK+aaiD5VbjsKK+aaiT5LaTsKK+aajj5FaTsKK+aakT5TaG87CivmmpY+RGFuOwor5pqXPkFuOwor5pqYPllvdTsKK+aanT5NZWk7CivmmqI+Q2hvdTsKK+aapj5SZWtpOwor5pqrPlphbjsKK+aarj5CbzsKK+aatD5Cb3U7Civmmrg+UnlvdTsKK+aauT5TZW47Civmmrw+SGV0c3U7Civmmr4+VG9uOwor5puBPktpOwor5puEPllvdTsKK+abhz5Eb247Civmm4k+R3lvdTsKK+ablj5BaTsKK+abmT5TaG87Civmm5o+Qm91Owor5pucPllvdTsKK+abnT5CYWt1Owor5pugPktvdTsKK+abpj5HaTsKK+abqT5Eb3U7Civmm7A+RXRzdTsKK+absj5LeW9rdTsKK+absz5FaTsKK+abtD5Lb3U7Civmm7U+RWk7Civmm7c+S2F0c3U7Civmm7g+U2hvOwor5pu5PlNvdTsKK+abvD5CYW47Civmm70+Wm87Civmm74+U287Civmm78+VGFpOwor5pyAPlNhaTsKK+acgz5LYWk7CivmnIg+R2V0c3U7CivmnIk+WXV1Owor5pyLPkhvdTsKK+acjT5GdWt1Owor5pyPPkhpOwor5pyUPlNha3U7CivmnJU+Q2hpbjsKK+aclj5Sb3U7CivmnJc+Um91Owor5pybPkJvdTsKK+acnT5DaG91Owor5pyePktpOwor5pyfPktpOwor5pymPkJvdTsKK+acpz5Sb3U7CivmnKg+Qm9rdTsKK+acqj5NaTsKK+acqz5NYXRzdTsKK+acrD5Ib247CivmnK0+U2F0c3U7CivmnK4+SnV0c3U7CivmnLE+U2h1Owor5py0PkJva3U7CivmnLY+RGE7CivmnLc+VG91Owor5py4PlJ5b2t1Owor5py6PktpOwor5py9Pkt5dXU7CivmnL8+U2hpOwor5p2GPkthbjsKK+adiT5TYW47CivmnY4+Umk7CivmnY8+S3lvdTsKK+adkD5aYWk7CivmnZE+U29uOwor5p2TPkh5b3U7CivmnZY+Sm91Owor5p2ZPllva3U7CivmnZw+RG87CivmnZ4+S287CivmnZ8+U29rdTsKK+adoD5Lb3U7CivmnaE+Sm91Owor5p2lPlJhaTsKK+adqj5CeW91Owor5p2tPktvdTsKK+adrz5IYWk7CivmnbA+S2V0c3U7CivmnbE+VG91Owor5p2yPktvdTsKK+adsz5Zb3U7CivmnbU+U2hvOwor5p23PkhhOwor5p28PkNobzsKK+advj5TaG91Owor5p2/PkhhbjsKK+aehT5LZWk7Civmnoc+SGk7Civmnok+T3U7Civmnos+SG91Owor5p6MPkZ1bjsKK+aekD5TZWtpOwor5p6VPkNoaW47Civmnpc+UmluOwor5p6aPk1haTsKK+aenD5LYTsKK+aenT5TaGk7CivmnqI+U3V1Owor5p6mPlJvOwor5p6pPlNob3U7Civmnq8+S287CivmnrM+S2k7CivmnrQ+S2FpOwor5p62PkthOwor5p63PkthOwor5p64Pkt1Owor5p65PkhvdTsKK+afgT5UYTsKK+afhD5IZWk7Civmn4Y+Um91Owor5p+KPlNodXU7Civmn44+RnU7Civmn48+SGFrdTsKK+afkD5Cb3U7Civmn5E+S2FuOwor5p+TPlNlbjsKK+aflD5OeXV1Owor5p+YPlNoYTsKK+afmj5ZdXU7Civmn50+VGFrdTsKK+afnj5TYWt1Owor5p+iPlRlaTsKK+afpD5TYTsKK+afpz5LbzsKK+afqT5LeXV1Owor5p+sPkthbjsKK+afrj5Ub3RzdTsKK+afrz5LYTsKK+afsT5DaHV1Owor5p+zPlJ5dXU7Civmn7Q+U2FpOwor5p+1PlNha3U7Civmn7s+U2E7Civmn74+S3l1dTsKK+afvz5TaGk7CivmoIQ+RWk7CivmoJM+U2VuOwor5qCWPlNlaTsKK+aglz5SaXRzdTsKK+agnj5LYW47CivmoKE+S291Owor5qCiPkhha3U7CivmoKk+S3U7CivmoKo+Q2h1Owor5qCrPlNvbjsKK+agsj5Hb3U7CivmoLQ+U2VuOwor5qC4Pktha3U7CivmoLk+S29uOwor5qC8PktvdTsKK+agvT5TYWk7CivmoYA+S2V0c3U7CivmoYE+S291Owor5qGCPktlaTsKK+ahgz5Ub3U7CivmoYY+S3lvdTsKK+ahiD5BbjsKK+ahjT5LbzsKK+ahjj5TaGl0c3U7CivmoZA+RG91Owor5qGRPlNvdTsKK+ahkz5LYW47CivmoZQ+S2l0c3U7CivmoZk+VTsKK+ahnD5PdTsKK+ahnz5TYW47CivmoaM+VG91Owor5qGnPkthaTsKK+ahtD5GdTsKK+ahtj5Ub3U7Civmobc+S2FrdTsKK+ahvj5LdW47Civmob8+S2FuOwor5qKBPlJ5b3U7CivmooM+VGVpOwor5qKFPkJhaTsKK+aijT5Tb3U7Civmoo8+S29rdTsKK+aikz5TaGk7CivmopQ+U2hpOwor5qKXPktvdTsKK+aimz5EYTsKK+ainT5Kb3U7Civmop8+S3lvdTsKK+aioD5SeW87CivmoqI+U2hvdTsKK+aipj5NdTsKK+aipz5HbzsKK+aiqD5SaTsKK+airT5TYTsKK+airz5UZWk7CivmorA+S2FpOwor5qKxPktvbjsKK+aisz5TbzsKK+aitT5GdXU7CivmorY+Qmk7Civmork+QmluOwor5qK8PlRvdTsKK+ajhD5LaTsKK+ajhj5SaW47Civmo4k+TWVuOwor5qOKPktpOwor5qOLPktpOwor5qONPktvbjsKK+ajkj5Cb3U7Civmo5Q+S29uOwor5qOVPlNodTsKK+ajlz5Tb3U7Civmo5g+S3lva3U7Civmo5o+SG91Owor5qOfPlRvdTsKK+ajoD5Ub3U7Civmo6E+S291Owor5qOjPlRlaTsKK+ajpz5TYW47Civmo64+U2hpbjsKK+ajrz5KaW47Civmo7I+U2VpOwor5qO5PlRvdTsKK+ajuj5LYW47CivmpIA+V2FuOwor5qSBPktha3U7CivmpIQ+U2V0c3U7CivmpIU+STsKK+akiD5LaWt1Owor5qSLPlJ5b3U7CivmpIw+S291Owor5qSNPlNob2t1Owor5qSOPlRzdWk7CivmpI8+QTsKK+akkj5TaG91Owor5qScPktlbjsKK+akoj5LYWk7CivmpKY+S2VuOwor5qSwPllhOwor5qS0PlRhbjsKK+aktj5TaHU7CivmpLk+Q2hpbjsKK+akvT5UZW47CivmpL8+Q2hpbjsKK+alij5Zb3U7CivmpZM+RnV1Owor5qWUPlNldHN1Owor5qWVPkRhOwor5qWZPkJvdTsKK+almj5TbzsKK+alnD5LbzsKK+alnT5SZW47CivmpZ4+Um91Owor5qWgPk5hbjsKK+aloT5ZdTsKK+aloj5TaHV1Owor5qWqPllvdTsKK+alqz5TaHV1Owor5qWtPkd5b3U7Civmpa4+Q2hvOwor5qWvPkp1bjsKK+alsz5CYWk7CivmpbQ+VGVpOwor5qW1Pkdva3U7Civmpbc+S2FpOwor5qW4PlNodXU7Civmpbk+RWk7Civmpbw+Um91Owor5qW9Pkdha3U7CivmpoI+R2FpOwor5qaOPkthOwor5qaRPkZ1Owor5qaUPlJvdTsKK+amlT5Zb3U7Civmpps+U2hpbjsKK+amnD5Cb3U7CivmpqA+QmVpOwor5qanPkhpOwor5qauPkVpOwor5qaxPlN1aTsKK+amsj5PdHN1Owor5qa0PlJ5dXU7Civmprs+VG91Owor5qa+PktvdHN1Owor5qa/PktpOwor5qeBPktvdTsKK+angz5IYW47Civmp4c+VGVuOwor5qeKPlNha3U7Civmp4s+S291Owor5qeMPlRzdWk7Civmp40+U291Owor5qeOPlNhOwor5qeQPkthaTsKK+ankz5Lb3U7Civmp5g+WW91Owor5qeZPlRlbjsKK+annT5Ub3U7Civmp54+Um91Owor5qenPlNhbjsKK+anqD5LYWt1Owor5qerPlRhbjsKK+anrT5TaHVrdTsKK+ansj5Lb2t1Owor5qe5PktvdTsKK+anuz5LaTsKK+anvT5Tb3U7Civmp78+S2luOwor5qiCPkdha3U7CivmqIU+U2hvdTsKK+aoij5IYW47CivmqIs+VG91Owor5qiMPkthbjsKK+aokj5NaXRzdTsKK+aokz5Sb3U7CivmqJQ+U291Owor5qiXPkNobzsKK+aomT5IeW91Owor5qibPkt5dXU7CivmqJ4+U3V1Owor5qifPlNob3U7CivmqKE+TW87CivmqKI+Qm9rdTsKK+aooz5Zb3U7CivmqKk+S2VuOwor5qiqPk91Owor5qi1PlNob3U7CivmqLY+U2FpOwor5qi4PkJva3U7CivmqLk+SnU7CivmqLo+S2E7CivmqL0+U29uOwor5qmEPkthbjsKK+aphz5aZWk7CivmqYg+RG91Owor5qmLPkt5b3U7CivmqZg+S2l0c3U7CivmqZk+VG91Owor5qmfPktpOwor5qmhPlNob3U7CivmqaI+RGE7CivmqaY+VG91Owor5qm4PlNob3U7Civmqb8+S3lvdTsKK+aqgD5UYW47CivmqoQ+R2VraTsKK+aqjT5Zb2t1Owor5qqOPkdvOwor5qqQPkVuOwor5qqXPkhha3U7Civmqpw+S2FpOwor5qqgPktlaTsKK+aqoj5LZW47CivmqqM+U2hvdTsKK+aqqj5SZWtpOwor5qqsPkJvdTsKK+aqrj5Ub3U7CivmqrM+QmluOwor5qq4Pk5laTsKK+aquz5LYW47Civmq4E+TWl0c3U7Civmq4I+VG91Owor5quDPktpOwor5quRPlJhaTsKK+arkz5SbzsKK+armj5SeW87Civmq5s+U2hpdHN1Owor5quePkVuOwor5qufPlJla2k7Civmq6g+Um87Civmq6o+UmVraTsKK+aruj5SZWk7Civmq7s+T3U7CivmrIQ+UmFuOwor5qyFPkt5bzsKK+asij5LZW47CivmrJI+UmFuOwor5qyWPlJhbjsKK+asnT5VdHN1Owor5qygPktldHN1Owor5qyhPkppOwor5qyjPkdvbjsKK+aspz5PdTsKK+assj5Zb2t1Owor5qy3PktpOwor5qy4PkFpOwor5qy5Pkk7CivmrLo+R2k7CivmrL0+S2luOwor5qy+PkthbjsKK+atgz5Tb3U7CivmrYc+S2V0c3U7CivmrYk+S2VuOwor5q2MPkthOwor5q2OPlRhbjsKK+atkD5PdTsKK+atkz5LYW47CivmrZQ+S3lvOwor5q2ZPkt5dXU7CivmrZs+S2FuOwor5q2fPllvOwor5q2hPkthbjsKK+atoj5TaGk7CivmraM+U2VpOwor5q2kPlNoaTsKK+atpj5CdTsKK+atqT5IbzsKK+atqj5XYWk7Civmra8+U2hpOwor5q2zPlNlaTsKK+attD5SZWtpOwor5q24PktpOwor5q25PkdhdHN1Owor5q27PlNoaTsKK+atvz5Cb3RzdTsKK+augD5Zb3U7CivmroM+WW91Owor5q6EPlRlbjsKK+auhj5UYWk7Civmrok+SnVuOwor5q6KPlNodTsKK+auiz5aYW47Civmro0+SHlvdTsKK+aulT5GdXU7CivmrpY+U2hva3U7Civmrpg+WmFuOwor5q6ePkluOwor5q6kPlNob3U7Civmrqo+RWk7Civmrqs+VGFuOwor5q6vPkhpbjsKK+ausT5TZW47CivmrrI+U2VuOwor5q6zPlNodTsKK+autD5PdTsKK+autT5EYW47Civmrrc+SW47Civmrro+U2F0c3U7Civmrrs+S2FrdTsKK+auvD5LYWt1Owor5q6/PlRlbjsKK+avgD5LaTsKK+avhT5LaTsKK+avhj5PdTsKK+aviz5CdTsKK+avjT5CbzsKK+avjj5NYWk7Civmr5I+RG9rdTsKK+avkz5Ja3U7Civmr5Q+SGk7Civmr5g+SGk7Civmr5s+TW91Owor5q+rPktvdTsKK+avrD5LeXV1Owor5q+vPlRhbjsKK+avsz5aZWk7CivmsIg+U2VuOwor5rCPPlNoaTsKK+awkT5NaW47CivmsJM+Qm91Owor5rCUPktpOwor5rCXPktpOwor5rCbPkZ1bjsKK+awoz5LaTsKK+awpD5JbjsKK+awtD5TdWk7CivmsLc+SHlvdTsKK+awuD5FaTsKK+awvj5IYW47CivmsYA+VGVpOwor5rGBPkp1dTsKK+axgj5LeXV1Owor5rGOPkhhbjsKK+axkD5TZWtpOwor5rGVPlNhbjsKK+axlz5LYW47CivmsZo+TzsKK+axnT5KbzsKK+axnj5Lb3U7CivmsZ8+S291Owor5rGgPkNoaTsKK+axqD5CZWtpOwor5rGqPk91Owor5rGwPlRhOwor5rGyPkt5dXU7CivmsbM+SGVuOwor5rG6PktldHN1Owor5rG9PktpOwor5rG+PkZ1bjsKK+aygT5TaGluOwor5rKCPktpOwor5rKDPllva3U7Civmsog+Q2hpbjsKK+ayjD5Ub247Civmso0+R287CivmspA+Qm9rdTsKK+aykj5Cb3RzdTsKK+aykz5Ub3U7CivmspY+Q2h1dTsKK+aymT5TYTsKK+aymj5TaGk7Civmsps+SGFpOwor5rKhPkJvdHN1Owor5rKiPlRha3U7Civmsqs+TWF0c3U7Civmsq4+U2hvOwor5rKxPlRhOwor5rKzPkthOwor5rK4PkZ1dHN1Owor5rK5Pll1Owor5rK6PlRlbjsKK+ayuz5KaTsKK+ayvD5TaG91Owor5rK9PktvOwor5rK+PlRlbjsKK+ayvz5FbjsKK+azgT5LeW91Owor5rOEPkVpOwor5rOFPlNodXU7Civms4k+U2VuOwor5rOKPkhha3U7Civms4w+SGl0c3U7Civms5M+T3U7Civms5U+SG91Owor5rOXPlNoaTsKK+azmT5Ib3U7Civms5s+SGFuOwor5rOdPlNvOwor5rOhPkhvdTsKK+azoj5IYTsKK+azoz5LeXV1Owor5rOlPkRlaTsKK+azqD5DaHV1Owor5rOqPlJ1aTsKK+azrz5CaW47Civms7A+VGFpOwor5rOxPk91Owor5rOzPkVpOwor5rSLPllvdTsKK+a0jD5SZXRzdTsKK+a0kj5TZWk7CivmtJc+U2VuOwor5rSZPlNodTsKK+a0mz5SYWt1Owor5rSePkRvdTsKK+a0nz5JOwor5rSlPlNoaW47CivmtKk+RWk7CivmtKo+S291Owor5rSrPkt5b2t1Owor5rSyPlNodXU7CivmtLM+Sm87CivmtLU+U2h1bjsKK+a0tj5LeW91Owor5rS4PktvdTsKK+a0uz5LYXRzdTsKK+a0vT5Lb3U7CivmtL4+SGE7CivmtYE+Unl1dTsKK+a1hD5Kb3U7CivmtYU+U2VuOwor5rWZPlNldHN1Owor5rWaPlNodW47CivmtZw+SGluOwor5rWjPkthbjsKK+a1pD5Lb3U7CivmtaY+SG87Civmtak+S291Owor5rWqPlJvdTsKK+a1rD5SaTsKK+a1rj5GdTsKK+a1tD5Zb2t1Owor5rW3PkthaTsKK+a1uD5TaGluOwor5rW5PlNob3U7CivmtoU+TmV0c3U7Civmtog+U2hvdTsKK+a2jD5ZdXU7Civmto4+U2VuOwor5raTPktlbjsKK+a2lT5UZWk7Civmtpk+UnVpOwor5rabPlRvdTsKK+a2nD5Ub2t1Owor5ravPkdhaTsKK+a2sj5Fa2k7CivmtrU+S2FuOwor5ra4PktvOwor5ra8PlJ5b3U7Civmt4A+VGVuOwor5reFPlNla2k7Civmt4Y+S291Owor5reHPktpOwor5reLPlJpbjsKK+a3jD5TaG91Owor5reRPlNodWt1Owor5reSPlNlaTsKK+a3lT5SaWt1Owor5reYPlRvdTsKK+a3mT5Tb3U7Civmt54+U2hvdTsKK+a3oT5UYW47Civmt6Q+WW87Civmt6Y+S2FuOwor5reoPkpvdTsKK+a3qj5SaW47Civmt6s+SW47Civmt6w+U2FpOwor5reuPldhaTsKK+a3sT5TaGluOwor5rezPlNodW47Civmt7U+RW47Civmt7c+S29uOwor5re5PkVuOwor5re6PlNlbjsKK+a3uz5UZW47CivmuIU+U2VpOwor5riHPkthdHN1Owor5riIPlNhaTsKK+a4iT5TaG91Owor5riKPkVuOwor5riLPkp1dTsKK+a4kz5LZWk7CivmuJU+RW47CivmuJk+S2FuOwor5riaPlNobzsKK+a4mz5HZW47CivmuJ0+WXU7CivmuJ8+VGVpOwor5rigPkt5bzsKK+a4oT5UbzsKK+a4oz5TYTsKK+a4pD5Cb3RzdTsKK+a4pT5Ba3U7CivmuKY+S2E7CivmuKk+T247CivmuKs+U2V0c3U7CivmuKw+U29rdTsKK+a4rT5JOwor5riuPkthOwor5rivPktvdTsKK+a4uD5ZdXU7CivmuLo+QnlvdTsKK+a4vj5Lb247CivmuYM+SGFpOwor5rmKPlNvdTsKK+a5jT5UYW47CivmuY4+QmVuOwor5rmWPktvOwor5rmYPlNob3U7CivmuZs+VGFuOwor5rmfPktvdTsKK+a5pz5ZdXU7Civmuas+U2hvdTsKK+a5rj5JbjsKK+a5rz5Ub3U7CivmubI+S2FuOwor5rm2PlNlbjsKK+a5vj5XYW47Civmub8+U2hpdHN1Owor5rqAPk1hbjsKK+a6gj5SYXRzdTsKK+a6jD5IYXRzdTsKK+a6jz5Ub3U7CivmupA+R2VuOwor5rqWPkp1bjsKK+a6mD5Lb3U7Civmupw+Unl1dTsKK+a6nT5Lb3U7Civmup8+TWVpOwor5rqiPkl0c3U7CivmuqU+SG87Civmuqo+S2VpOwor5rqvPlNvOwor5rqyPlNvdTsKK+a6tj5Zb3U7Civmurc+S29uOwor5rq6PkRla2k7Civmur0+Sm9rdTsKK+a7gj5Cb3U7Civmu4Q+U291Owor5ruFPk1ldHN1Owor5ruJPktvdTsKK+a7iz5KaTsKK+a7jD5EZWtpOwor5ruRPkthdHN1Owor5ruTPlNhaTsKK+a7lD5Ub3U7Civmu5U+VG91Owor5rudPlNvdTsKK+a7nj5UYWk7Civmu6w+S287Civmu68+VGFpOwor5ruyPlNoaW47Civmu7Q+VGVraTsKK+a7tz5SbzsKK+a7uD5LbzsKK+a7vj5Lb247Civmu78+TWFuOwor5ryBPlJ5b3U7CivmvII+SHlvdTsKK+a8hj5TaGl0c3U7CivmvIk+Um9rdTsKK+a8jz5Sb3U7CivmvJE+R2FpOwor5ryTPlJpOwor5ryUPkVuOwor5ryVPlNvdTsKK+a8oD5CYWt1Owor5ryiPkthbjsKK+a8oz5SYW47CivmvKs+TWFuOwor5rysPlNoaTsKK+a8sT5Tb3U7CivmvLI+Q2hvdTsKK+a8uD5aZW47CivmvL4+WW91Owor5ry/PlNob3U7CivmvYE+RWk7CivmvYU+S2FuOwor5r2UPktldHN1Owor5r2YPkhhbjsKK+a9mz5TZW47CivmvZw+U2VuOwor5r2fPlNla2k7CivmvaQ+SnVuOwor5r2mPlJvdTsKK+a9rT5UYW47Civmva4+Q2hvdTsKK+a9rz5KaW47CivmvbA+S2FpOwor5r20PkNobzsKK+a9uD5TYW47Civmvbo+U2FuOwor5r28PkRvdTsKK+a+gD5KdXU7CivmvoE+SnV1Owor5r6CPkNob3U7CivmvoQ+Q2hvdTsKK+a+hj5HeW91Owor5r6OPkhvdTsKK+a+kT5SeXV1Owor5r6XPkthbjsKK+a+oT5Tb3U7CivmvqM+S2FuOwor5r6kPlRha3U7Civmvqo+UmVpOwor5r6xPlRlbjsKK+a+sz5Ja3U7Civmvrk+VGFuOwor5r+APkdla2k7Civmv4E+RGFrdTsKK+a/gj5SZW47Civmv4M+Tm91Owor5r+GPkZ1bjsKK+a/lD5EZWk7Civmv5U+U2hpdHN1Owor5r+YPk5laTsKK+a/nz5TYWk7Civmv6A+R291Owor5r+hPkp1Owor5r+kPlRvdTsKK+a/qz5SYW47Civmv6w+U2h1bjsKK+a/rj5Ib2t1Owor5r+vPlRha3U7Civmv7E+SGluOwor5r+zPlNlbjsKK+a/tj5LYXRzdTsKK+a/uj5TZW47Civmv74+UnlvOwor54CBPllvdTsKK+eAiT5TaGE7CivngIs+U2hpbjsKK+eAjz5SeXV1Owor54CRPkJha3U7CivngJU+SGluOwor54CYPlJvOwor54CaPkthbjsKK+eAmz5FaTsKK+eAnT5SZWtpOwor54CePkpvdTsKK+eAnz5TaG91Owor54CmPkNobzsKK+eApz5Tb3U7CivngKw+UmFpOwor54CwPkJpOwor54CyPlJlbjsKK+eAvj5SYW47CivngYw+S2FuOwor54GRPlNhaTsKK+eBmD5EYW47CivngaM+V2FuOwor54GrPkthOwor54GvPlRvdTsKK+eBsD5LYWk7Civngbg+S3l1dTsKK+eBvD5TaGFrdTsKK+eBvT5TYWk7Civngok+Um87Civngoo+U3VpOwor54KOPkVuOwor54KSPlNvdTsKK+eCmT5TaGE7Civngqw+S287Civngq0+VGFuOwor54KuPkhvdTsKK+eCrz5LZWk7CivngrM+SGVpOwor54K4PlNha3U7Civngrk+VGVuOwor54K6Pkk7Civng4g+UmV0c3U7Civng4s+S291Owor54OPPlU7Civng5k+UmFrdTsKK+eDnT5Kb3U7Civng58+RW47Civng7E+S2VpOwor54O5PkhvdTsKK+eDvT5Ib3U7CivnhIk+RW47CivnhJQ+RW47CivnhJk+SG91Owor54SaPkZ1bjsKK+eEnD5Lb247CivnhKE+TXU7CivnhKY+U2hvdTsKK+eEtj5aZW47CivnhLw+U2hvdTsKK+eFiT5SZW47CivnhYw+S291Owor54WOPlNlbjsKK+eFlT5LaTsKK+eFlj5EYW47CivnhZk+RW47CivnhaI+S2VpOwor54WkPkJhaTsKK+eFpT5LYW47CivnhaY+S3U7Civnhac+U2hvdTsKK+eFqT5IYW47Civnhaw+WW91Owor54WuPlNoYTsKK+eFvT5TZW47CivnhoQ+U29rdTsKK+eGiD5LaTsKK+eGij5ZdXU7Civnho8+S3VuOwor54aUPllvdTsKK+eGlT5Lb3U7Civnhpk+S2k7Civnhp8+SnVrdTsKK+eGqD5JOwor54asPkdvdTsKK+eGsT5OZXRzdTsKK+eGuT5LaTsKK+eGvj5TaGk7Civnh4M+TmVuOwor54eIPlRvdTsKK+eHiT5Ub247Civnh44+UnlvdTsKK+eHkD5SaW47Civnh5I+U2hvdTsKK+eHlD5IYW47Civnh5U+RW47Civnh5c+UmFuOwor54efPkVpOwor54egPklrdTsKK+eHpT5Tb3U7Civnh6Y+U2FuOwor54enPlN1aTsKK+eHrD5LaTsKK+eHrT5TaG9rdTsKK+eHrj5TaG91Owor54e1PlRhdHN1Owor54e5PlNlbjsKK+eHuz5LdW47Civnh7w+SmluOwor54e/PllvdTsKK+eIhj5CYWt1Owor54iNPlNoYWt1Owor54iQPlJvOwor54ibPlJhbjsKK+eIqD5TYW47CivniKo+U291Owor54isPkhhOwor54itPlNvdTsKK+eIsD5FbjsKK+eIsj5JOwor54i1PlNoYWt1Owor54i2PkZ1Owor54i6PllhOwor54i7PktvdTsKK+eIvD5TaG87CivniL0+U291Owor54i+PkppOwor54i/PlNob3U7CivniYA+U291Owor54mGPlNob3U7CivniYc+SGVuOwor54mIPkhhbjsKK+eJiz5TZW47CivniYw+SGFpOwor54mSPkNob3U7CivniZg+VG9rdTsKK+eJmT5HYTsKK+eJmz5HeXV1Owor54mdPkhpbjsKK+eJnz5Cb3U7CivniaE+Qm87CivniaI+Um91Owor54mnPkJva3U7Civniak+TW90c3U7CivnibI+U2VpOwor54m0PlRlaTsKK+eJuT5Ub2t1Owor54m9PktlbjsKK+eJvj5HbzsKK+eKgD5TZWk7CivnioE+Umk7CivnioI+Umk7Civnioc+SG9uOwor54qSPktvdTsKK+eKlj5SYWt1Owor54qgPkdpOwor54qiPlRva3U7Civniqc+R2k7Civniqw+S2VuOwor54qvPkhhbjsKK+eKsj5TYWk7CivnirY+Sm91Owor54q5Pll1dTsKK+eLgj5LeW91Owor54uDPkp1dTsKK+eLhD5UZWtpOwor54uGPkNodXU7Civni44+S291Owor54uQPktvOwor54uSPkhpOwor54uXPktvdTsKK+eLmT5TaG87Civni5s+SGFrdTsKK+eLoD5HYW47Civni6E+S291Owor54uiPktha3U7Civni6k+U2h1Owor54usPkRva3U7Civni60+S3lvdTsKK+eLtz5LZW47Civni7g+Umk7Civni7k+S3lvdTsKK+eLvD5Sb3U7Civni70+SGFpOwor54yKPkdlaTsKK+eMlj5TaG91Owor54yXPkk7CivnjJs+TW91Owor54ycPlNhaTsKK+eMnT5Tb3RzdTsKK+eMnz5SeW91Owor54ylPldhaTsKK+eMqT5TZWk7CivnjKo+Q2hvOwor54yrPkJ5b3U7CivnjK4+S2VuOwor54yvPlRhbjsKK+eMtD5Lb3U7CivnjLY+WXV1Owor54y3Pll1dTsKK+eMvj5LYXRzdTsKK+eMvz5FbjsKK+eNhD5Hb2t1Owor542FPlNoaTsKK+eNjj5TaG91Owor542PPkJha3U7CivnjZc+S2V0c3U7CivnjaM+SnV1Owor542oPkRva3U7Civnjao+S2FpOwor542wPkRvdTsKK+eNsj5LYWt1Owor5421PlJ5b3U7Civnjbg+SnV1Owor5426PkRhdHN1Owor5427PktlbjsKK+eOhD5HZW47Civnjoc+Uml0c3U7Civnjok+R3lva3U7Civnjos+T3U7CivnjpY+S3l1dTsKK+eOqT5HYW47CivnjrI+UmVpOwor546zPlRhaTsKK+eOuz5IYTsKK+ePgD5IYWt1Owor54+CPkthOwor54+IPkthOwor54+KPlNhbjsKK+ePjT5DaGluOwor54+OPkNoaW47Civnj54+UmFrdTsKK+ePoD5TaHU7Civnj6U+Smk7Civnj6o+S2VpOwor54+tPkhhbjsKK+ePrj5IYWk7Civnj7E+RWk7Civnj7g+R287Civnj74+R2VuOwor55CDPkt5dXU7CivnkIU+Um91Owor55CGPlJpOwor55CJPlJ5dXU7CivnkKI+VGFrdTsKK+eQpT5LbzsKK+eQsj5IYWk7CivnkLM+UmluOwor55C0PktpbjsKK+eQtT5CaTsKK+eQtj5IYTsKK+eQuj5Ib3U7CivnkL8+S29uOwor55GBPkJvdTsKK+eRlT5LYTsKK+eRmT5Eb3U7CivnkZo+S287CivnkZs+RWk7CivnkZw+WXU7CivnkZ4+WnVpOwor55GfPlNoaXRzdTsKK+eRoD5SeXV1Owor55GjPlNhOwor55GkPllvdTsKK+eRqT5FaTsKK+eRqj5CYTsKK+eRrz5Sb3U7CivnkbA+S2FpOwor55GzPlNhOwor55G2PllvdTsKK+eRvj5LaW47CivnkoM+Umk7Civnkos+U2hvdTsKK+eSnj5IYWt1Owor55KiPlJ5dXU7Civnkqc+SGVraTsKK+eSsD5LYW47Civnkr0+Smk7Civnk4o+S2VpOwor55OPPlJvdTsKK+eTlD5FaTsKK+eTnD5LYTsKK+eToD5LbzsKK+eToj5IeW91Owor55OjPkJlbjsKK+eTpj5HYTsKK+eTrj5PdTsKK+eTtj5IZWk7Civnk7c+U2hpOwor55SDPlNodXU7CivnlIQ+S2VuOwor55SMPk91Owor55SNPkJvdTsKK+eUjj5TZW47CivnlJE+U291Owor55STPkhla2k7CivnlJU+T3U7CivnlJg+S2FuOwor55SaPlNoaW47CivnlJw+VGVuOwor55SePlNob3U7CivnlJ8+U2VpOwor55SjPlNhbjsKK+eUpT5TZWk7CivnlKY+U287CivnlKg+WW91Owor55SrPkhvOwor55SsPllvdTsKK+eUsD5EZW47CivnlLE+WXV1Owor55SyPktvdTsKK+eUsz5TaGluOwor55S3PkRhbjsKK+eUuD5UZW47CivnlLo+Q2hvdTsKK+eUuz5HYTsKK+eUvD5DaG91Owor55WEPlJ5dXU7CivnlYY+SG87CivnlYk+RnU7CivnlYo+S291Owor55WLPlRlbjsKK+eVjD5LYWk7CivnlY0+S2FpOwor55WPPkk7CivnlZQ+SGFuOwor55WZPlJ5dXU7CivnlZo+SG9uOwor55WbPlNoaW47CivnlZw+Q2hpa3U7CivnlZ0+SG87CivnlaI+SGl0c3U7CivnlaQ+U2hpOwor55WlPlJ5YWt1Owor55WmPktlaTsKK+eVpz5SeWFrdTsKK+eVqj5CYW47Civnlas+S2FrdTsKK+eVrT5ZbzsKK+eVsD5JOwor55WzPkpvdTsKK+eVtD5DaHV1Owor55W2PlRvdTsKK+eVtz5UZXRzdTsKK+eVuD5LaTsKK+eVvz5LaTsKK+eWgj5Kb3U7CivnloY+S3lvdTsKK+eWhz5DaHV1Owor55aJPkpvdTsKK+eWij5Kb3U7Civnlos+U287Civnlo4+U287Civnlo8+U287CivnlpE+R2k7CivnlpQ+Q2hvdTsKK+eWmj5LeXV1Owor55adPlNhbjsKK+eWoz5ZdXU7CivnlqU+S2FpOwor55arPkVraTsKK+eWsT5Ib3U7CivnlrI+SGk7CivnlrM+S2FuOwor55a1PlNoaTsKK+eWuD5UYW47Civnlrk+U2hpbjsKK+eWvD5Ub3U7Civnlr0+U2hvOwor55a+PlNoaXRzdTsKK+eXgj5LYTsKK+eXgz5LZW47Civnl4U+QnlvdTsKK+eXhz5TaG91Owor55eKPlNlbjsKK+eXjT5JOwor55eSPllvdTsKK+eXlD5KaTsKK+eXlT5Lb247Civnl5g+VG91Owor55eZPktlaTsKK+eXmz5UczsKK+eXnj5IaTsKK+eXoj5SaTsKK+eXoz5TaGk7Civnl6k+U291Owor55ewPlRhbjsKK+eXsj5NYTsKK+eXsz5SaW47Civnl7Q+Q2hpOwor55e6PkhpOwor55e8PktvOwor55e+PkE7Civnl78+STsKK+eYgT5TdWk7CivnmIk+WXU7CivnmIs+RnV1Owor55iNPllvdTsKK+eYnz5PbjsKK+eYoD5TZWtpOwor55ihPlNvdTsKK+eYoj5IYW47CivnmKQ+Unl1dTsKK+eYpz5HeWFrdTsKK+eYsD5SdWk7CivnmLQ+U2hvdTsKK+eYuz5Sb3U7CivnmYI+UnlvdTsKK+eZhj5Sb3U7CivnmYc+S2FuOwor55mIPkhhaTsKK+eZjD5HYW47CivnmZI+WXU7CivnmZY+SGVraTsKK+eZmD5SZWk7CivnmZw+RGVuOwor55mhPkNoaTsKK+eZoj5Zb3U7Civnmac+UmVraTsKK+eZqD5LYWt1Owor55mpPlJhaTsKK+eZqj5TaGFrdTsKK+eZrD5TZW47CivnmbA+WW91Owor55myPlRlbjsKK+eZtj5IYXRzdTsKK+eZuD5LaTsKK+eZuj5Ib3RzdTsKK+eZuz5Ub3U7Civnmbw+SG90c3U7Civnmb0+SGFrdTsKK+eZvj5IeWFrdTsKK+eagD5IeXV1Owor55qDPkJvdTsKK+eahD5UZWtpOwor55qGPkthaTsKK+eahz5Lb3U7Civnmog+S2k7Civnmos+S291Owor55qOPktvdTsKK+eakD5Lb3U7CivnmpM+S291Owor55qWPkthbjsKK+eamT5TZWtpOwor55qaPkdhaTsKK+earj5IaTsKK+easD5Ib3U7CivnmrQ+U2h1bjsKK+eatz5LbzsKK+eauD5LdW47Civnmrk+S3VuOwor55q6PlN1dTsKK+eavz5CYWk7Civnm4I+VTsKK+ebgz5IYWk7Civnm4Y+Qm9uOwor55uIPkVpOwor55uKPkVraTsKK+ebjT5Lb3U7Civnm5I+S291Owor55uWPkdhaTsKK+eblz5Ub3U7Civnm5s+U2VpOwor55ucPlRvdTsKK+ebnj5TYW47Civnm58+TWVpOwor55uhPkppbjsKK+eboz5LYW47Civnm6Q+QmFuOwor55ulPkthbjsKK+ebpz5SbzsKK+ebqj5Ub3U7Civnm64+TW9rdTsKK+ebsj5Nb3U7Civnm7Q+Q2hva3U7Civnm7g+U2hvdTsKK+ebuz5LZWk7Civnm74+SnVuOwor55yBPlNlaTsKK+echD5CZW47CivnnIc+QnlvdTsKK+eciD5UYW47CivnnIk+Qmk7CivnnIs+S2FuOwor55yMPktlbjsKK+ecmz5NYWk7CivnnJ4+U2hpbjsKK+ecnz5TaGluOwor55ygPk1pbjsKK+ecpD5UZWk7CivnnKU+U2VpOwor55ymPlNlaTsKK+ecqT5HZW47CivnnLc+S2VuOwor55y4PkJvdTsKK+ecuj5DaG91Owor55y8PkdhbjsKK+edgD5DaGFrdTsKK+edhz5UZWk7CivnnZo+R2FpOwor552bPlNlaTsKK+edoT5TdWk7CivnnaM+VG9rdTsKK+edpT5IZWk7CivnnaY+Qm9rdTsKK+edqD5HZWk7Civnnas+U2hvdTsKK+eduT5UbzsKK+edvj5Lb3U7Civnnb8+RWk7Civnnos+U2hpbjsKK+eejj5LYXRzdTsKK+eekT5NZWk7Civnnp4+QmFuOwor556gPkRvdTsKK+eepT5CZXRzdTsKK+eerD5TaHVuOwor556tPlJ5b3U7CivnnrA+S2FuOwor556zPkRvdTsKK+eetj5LaTsKK+eeuT5BaTsKK+eeuz5TZW47Civnnrw+S2VuOwor5569PktvOwor556/Pkt1Owor55+HPk1vdTsKK+efjT5LYWt1Owor55+XPkNoaWt1Owor55+aPlNob2t1Owor55+bPk11Owor55+cPktpbjsKK+efoj5TaGk7Civnn6M+STsKK+efpT5DaGk7Civnn6c+U2hpbjsKK+efqT5LdTsKK+efrT5UYW47Civnn64+V2FpOwor55+vPkt5b3U7Civnn7M+U2hha3U7Civnn7w+S291Owor56CCPlNhOwor56CMPlNlaTsKK+egkj5IaTsKK+eglD5LZW47CivnoJU+U2FpOwor56CgPlNobzsKK+egpT5TaGk7CivnoKY+U2FpOwor56CnPkNoaW47CivnoLI+SG91Owor56C0PkhhOwor56C6PlJlaTsKK+egvz5Lb3U7CivnoYU+S2VpOwor56GdPlNob3U7Civnoas+Unl1dTsKK+ehrD5Lb3U7Civnoa8+S2VuOwor56G8PkhvdTsKK+eigT5HbzsKK+eihj5IYTsKK+eihz5UZWk7Civnoow+Um9rdTsKK+eijT5HYWk7Civnoo4+U2FpOwor56KRPkhpOwor56KTPlRhaTsKK+eilT5LaTsKK+eilz5XYW47Civnopo+SGFpOwor56KjPktldHN1Owor56KnPkhla2k7Civnoqk+U2VraTsKK+eiqj5DaGluOwor56KvPkRvdTsKK+eitT5TZWtpOwor56K6Pktha3U7Civnorw+QmE7Civnor4+VGVuOwor56OBPkppOwor56OFPkhvdTsKK+ejhj5LYXRzdTsKK+ejij5SYWk7Civno4s+U2E7Civno5A+SGFuOwor56ORPkdhaTsKK+ejlD5UYWt1Owor56OaPlNlbjsKK+ejpz5TZWtpOwor56OoPk1hOwor56OsPktlaTsKK+ejrz5LaTsKK+ejtD5Ub3U7Civno70+S291Owor56SBPlNob3U7CivnpIc+SWt1Owor56SOPlNvOwor56SRPlRvdTsKK+ekkj5HaTsKK+ekmT5HYWk7CivnpKY+S291Owor56SqPlJlaTsKK+ekqz5SZWtpOwor56SsPkJhbjsKK+ekuj5TaGk7CivnpLw+UmVpOwor56S+PlNoYTsKK+elgD5TaGk7CivnpYE+S2k7CivnpYc+S2k7CivnpYg+S2k7CivnpYk+U2hpOwor56WQPll1dTsKK+elkz5GdXRzdTsKK+ellT5IaTsKK+ellj5TbzsKK+ellz5TaGk7CivnpZo+U287CivnpZ0+U2h1a3U7CivnpZ4+U2hpbjsKK+elnz5TdWk7CivnpaA+U2hpOwor56WiPkRlaTsKK+elpT5TaG91Owor56WoPkh5b3U7Civnpa0+U2FpOwor56W3PlRvdTsKK+eluj5LaTsKK+elvz5Sb2t1Owor56aAPlJpbjsKK+emgT5LaW47CivnpoQ+Um9rdTsKK+emhT5aZW47Civnpoo+S2VpOwor56aNPkthOwor56aOPlRlaTsKK+emjz5GdWt1Owor56adPlNob2t1Owor56amPkd5bzsKK+empz5LaTsKK+emqj5aZW47Civnpq4+UmVpOwor56awPkRlaTsKK+emsz5Kb3U7Civnprk+VTsKK+emuj5HdXU7Civnpr0+S2luOwor56a+PkthOwor56a/PlRva3U7Civnp4A+U2h1dTsKK+engT5TaGk7Civnp4k+SGVpOwor56eLPlNodXU7Civnp5E+S2E7Civnp5I+QnlvdTsKK+enlT5IaTsKK+enmD5IaTsKK+ennz5TbzsKK+enoT5IYXRzdTsKK+enoz5NYXRzdTsKK+enpD5TaG91Owor56emPlNoaW47Civnp6c+T3U7Civnp6k+Q2hpdHN1Owor56esPkt5bzsKK+ensD5TaG91Owor56e7Pkk7CivnqIA+S2k7CivnqIg+S2FuOwor56iLPlRlaTsKK+eojT5Tb3U7CivnqI4+WmVpOwor56iUPkppbjsKK+eolz5IYWk7CivnqJg+S2k7CivnqJk+Q2hva3U7CivnqJo+Q2hpOwor56icPlJ5b3U7CivnqJ8+UmluOwor56igPkNodXU7CivnqK4+U2h1Owor56ixPlNob3U7CivnqLI+VG91Owor56i3PlNob2t1Owor56i7PlRvdTsKK+eovD5LYTsKK+eovT5LZWk7CivnqL4+S291Owor56i/PktvdTsKK+epgD5Lb2t1Owor56mCPlN1aTsKK+epgz5Zb3U7CivnqYY+Qm9rdTsKK+epiT5DaGk7CivnqY0+U2VraTsKK+epjj5FaTsKK+epjz5PbjsKK+epkD5TaHV1Owor56mXPlN1aTsKK+epoT5TaG9rdTsKK+epoj5BaTsKK+epoz5Kb3U7Civnqak+T247Civnqas+S2FrdTsKK+epsD5Kb3U7CivnqbQ+S2V0c3U7CivnqbY+S3l1dTsKK+epuT5LeXV1Owor56m6Pkt1dTsKK+epvT5TZWk7Civnqb8+U2VuOwor56qBPlRvdHN1Owor56qDPlNldHN1Owor56qEPlNha3U7Civnqog+WW91Owor56qSPkNoaXRzdTsKK+eqkz5Tb3U7CivnqpU+Q2hvdTsKK+eqlj5Lb3U7Civnqpc+U291Owor56qYPktpbjsKK+eqnz5LdXRzdTsKK+eqqT5LYTsKK+eqqj5XYTsKK+eqrj5LeXV1Owor56qvPllvdTsKK+eqsD5Zb3U7CivnqrY+S3U7Civnqro+S2k7Civnqr8+Unl1dTsKK+ergz5Tb3U7Civnq4Q+WmFuOwor56uFPkt5b3U7Civnq4c+VG91Owor56uIPlNvdTsKK+erij5TZXRzdTsKK+eriz5SaXRzdTsKK+erkj5LaTsKK+ermT5UYW47Civnq5o+Q2hvOwor56ucPlJ5dXU7Civnq50+SGVpOwor56ufPktlaTsKK+eroD5TaG91Owor56uiPlNoaTsKK+eroz5TaHVuOwor56ulPkRvdTsKK+erpj5TaG91Owor56uqPkp1Owor56utPktldHN1Owor56uvPlRhbjsKK+ertj5LeW91Owor56u4PktlaTsKK+eruT5DaGlrdTsKK+eruj5Ub2t1Owor56u/PkthbjsKK+eshD5LZWk7CivnrIY+SGE7CivnrIg+S3l1dTsKK+esij5Tb3U7CivnrIs+SnVuOwor56yPPktvdHN1Owor56yRPlNob3U7CivnrJg+U2VuOwor56yZPlNvdTsKK+esmz5UZWtpOwor56yePkNoaTsKK+esoD5SeXV1Owor56ylPlNoaTsKK+espj5GdTsKK+esqD5Ib247CivnrKw+RGFpOwor56yzPkthOwor56y1PkhhbjsKK+estj5TaGk7CivnrYU+U2VuOwor562GPkhpdHN1Owor562IPkthdHN1Owor562JPlRvdTsKK+etiz5LaW47CivnrYw+U2VuOwor562NPkp1bjsKK+etjz5CYXRzdTsKK+etkD5LeW91Owor562RPkNoaWt1Owor562SPlRvdTsKK+etlD5Ub3U7CivnrZY+U2FrdTsKK+etnT5Tb3U7CivnraU+S3lvOwor562nPktlbjsKK+etrD5TZWk7Civnra4+U2VpOwor562wPlNha3U7CivnrbE+U2hvdTsKK+ettD5LeW91Owor5621PkVuOwor5626Pkt5b3U7CivnroY+SGVpOwor566HPkthOwor566LPlNlbjsKK+eujT5LbzsKK+eujz5Tb3U7CivnrpI+U291Owor566UPkhha3U7CivnrpU+S2k7Civnrpc+U2FuOwor566YPktpbjsKK+eumT5GdWt1Owor566aPlNhdHN1Owor566cPktvdTsKK+eunT5LYW47Civnrp8+S2luOwor566hPkthbjsKK+euqj5UYW47Civnrq0+U2VuOwor566xPlNob3U7CivnrrQ+U2hpbjsKK+euuD5DaG87Civnr4A+U2V0c3U7Civnr4E+S291Owor56+EPkhhbjsKK+evhj5UZW47Civnr4c+SGVuOwor56+JPkNoaWt1Owor56+LPkt5b3U7Civnr4w+S291Owor56+PPkthbjsKK+evnT5Lb3U7Civnr6A+U2hvdTsKK+evpD5Ub2t1Owor56+lPlJpdHN1Owor56+mPkhlaTsKK+evqT5TaGk7Civnr60+Um91Owor56+zPkhpdHN1Owor56+2PkVuOwor56+3PkhvdTsKK+ewgD5TYWt1Owor57CHPlNvdTsKK+ewjT5Sb3U7CivnsJE+U2E7CivnsJI+U2FuOwor57CTPlNlbjsKK+ewlD5TYTsKK+ewnz5UZW47CivnsKE+S2FuOwor57CjPktpOwor57CnPktvdTsKK+ewqj5TaGluOwor57CrPlNob3U7CivnsLc+RW47CivnsLg+SGE7CivnsL0+U2VuOwor57C+PlJlbjsKK+ewvz5CbzsKK+exgD5DaHV1Owor57GDPlJhbjsKK+exjD5DaHV1Owor57GNPlNla2k7CivnsZA+VG91Owor57GUPlN1Owor57GWPlNlbjsKK+exmD5Ub3U7CivnsZ8+UmFpOwor57GgPlJvdTsKK+expD5TZW47CivnsaU+WWFrdTsKK+exrD5SaTsKK+exsz5CZWk7CivnsoM+SGk7Civnsok+RnVuOwor57KLPlN1aTsKK+eykD5SbzsKK+eykj5SeXV1Owor57KVPkhha3U7Civnspc+U287Civnspg+TmVuOwor57KbPlNodWt1Owor57KfPlpva3U7CivnsqE+VG91Owor57KiPlNoaTsKK+eypD5FdHN1Owor57KlPlNodWt1Owor57KnPlNob3U7Civnsqs+Smk7Civnsq4+UnlvdTsKK+eysT5SeW91Owor57KyPlNhbjsKK+eysz5Lb3U7Civnsrk+U3VpOwor57K9PlNvdTsKK+eyvj5TZWk7Civns4I+U2FuOwor57OFPkp1dTsKK+ezij5LbzsKK+ezkj5IaTsKK+ezlj5Ub3U7Civns5w+Qmk7Civns54+RnVuOwor57OfPlNvdTsKK+ezoD5Lb3U7Civns6I+Qm87Civns6c+UnlvdTsKK+ezrz5EYTsKK+ezsj5SZWk7Civns7Q+VGVraTsKK+eztj5DaG91Owor57O4PlNoaTsKK+ezuj5LeXV1Owor57O7PktlaTsKK+ezvj5LeXV1Owor57SAPktpOwor57SCPkNodXU7CivntIQ+WWFrdTsKK+e0hT5LdTsKK+e0hj5VOwor57SKPkJpbjsKK+e0iz5Nb247CivntI0+VG91Owor57SQPkNodXU7CivntJQ+U2h1bjsKK+e0lT5IaTsKK+e0lz5TYTsKK+e0mD5Lb3U7CivntJk+U2hpOwor57SaPkt5dXU7CivntJs+RnVuOwor57ScPlVuOwor57SgPlNvOwor57ShPkJvdTsKK+e0oj5TYWt1Owor57SrPlNoaTsKK+e0rD5DaHV1Owor57SuPlNhdHN1Owor57SvPlJ1aTsKK+e0sD5TZWk7CivntLI+U2V0c3U7CivntLM+U2hpbjsKK+e0tT5DaG87CivntLk+U2hvdTsKK+e0uj5Lb247CivntL8+VGFpOwor57WCPlNodXU7CivntYM+R2VuOwor57WEPlNvOwor57WFPktlaTsKK+e1hj5CYW47CivntYs+S291Owor57WMPktlaTsKK+e1jj5Lb3U7CivntY8+U2V0c3U7CivntZA+S2V0c3U7CivntZY+S291Owor57WbPkpvdTsKK+e1nj5Lb3U7CivntaE+UmFrdTsKK+e1oj5LZW47CivntaM+SG91Owor57WmPkt5dXU7Civntag+SnV1Owor57WuPkpvOwor57WxPlRvdTsKK+e1sj5TaGk7CivntbM+S291Owor57W1PkthaTsKK+e1tj5aZXRzdTsKK+e1uT5LZW47Civntb0+UnlvOwor57aJPlRvdTsKK+e2jz5TdWk7CivntpM+S2VpOwor57aZPktlaTsKK+e2mj5ab2t1Owor57acPlNvdTsKK+e2nz5SZWk7CivntqI+Q2h1dTsKK+e2oz5LZW47Civntqs+U2VuOwor57asPkp1Owor57atPkk7Civntq4+S2VpOwor57avPlRvdTsKK+e2sD5XYW47CivntrE+S291Owor57ayPk1vdTsKK+e2tD5UZWk7CivntrU+U2FpOwor57a4PlJpbjsKK+e2uj5LaTsKK+e2uz5UYW47Civntr0+U2hha3U7Civntr4+UnlvdTsKK+e2vz5NZW47Civnt4c+U2hpOwor57eKPktpbjsKK+e3iz5IaTsKK+e3jz5Tb3U7Civnt5E+Unlva3U7Civnt5I+U2hvOwor57eYPkthbjsKK+e3mj5TZW47Civnt5w+QmVuOwor57edPlNodXU7Civnt54+VGFuOwor57egPlRlaTsKK+e3oT5CaW47Civnt6Q+U2V0c3U7Civnt6g+SGVuOwor57epPkthbjsKK+e3rD5NZW47Civnt68+STsKK+e3sj5CeW91Owor57e0PlJlbjsKK+e3uz5DaGk7CivnuIE+RW47CivnuIQ+Sm91Owor57iJPlNoaW47CivnuIo+RWk7CivnuIs+VHN1aTsKK+e4kj5TaGk7CivnuJs+QmFrdTsKK+e4nj5Lb3U7CivnuJ8+Sm9rdTsKK+e4oT5TYWk7CivnuKI+VG91Owor57ijPktlbjsKK+e4pj5KdXU7CivnuKs+SG91Owor57iuPlNodWt1Owor57ixPkp1dTsKK+e4sj5SdWk7CivnuLU+QmFuOwor57i3PlJ1Owor57i5Pkh5b3U7CivnuLo+UmVuOwor57i7PkJpOwor57i9PlNvdTsKK+e4vj5TZWtpOwor57mBPkhhbjsKK+e5gz5Ib3U7CivnuYY+S3l1dTsKK+e5ij5TZW47CivnuYs+S2VpOwor57mNPlNodXU7CivnuZQ+U2hva3U7CivnuZU+WmVuOwor57mWPlNhbjsKK+e5mT5IYW47CivnuZo+UnlvdTsKK+e5nT5LYW47CivnuZ4+Sm91Owor57mmPkt5b3U7Civnuac+VW47Civnuak+Sm91Owor57mqPkthaTsKK+e5rT5LZW47CivnubA+U291Owor57m5PkVraTsKK+e5uz5KdTsKK+e5vD5LZWk7Civnub0+SGluOwor57m/PlJhbjsKK+e6gj5TYW47Civnuog+S2V0c3U7Civnuok+U2FuOwor57qMPlpva3U7Civnuo4+U2VuOwor57qPPlRlbjsKK+e6kj5UZW47CivnupM+RWk7CivnupQ+U2FuOwor57qWPlNlbjsKK+e6mz5Ub3U7Civnupw+UmFuOwor57y2PkthbjsKK+e8uD5Lb3U7CivnvLo+S2V0c3U7CivnvYU+S2E7CivnvYw+T3U7CivnvY0+UmFpOwor572OPlRhbjsKK+e9kD5LYW47CivnvZE+Qm91Owor572UPkJvdTsKK+e9lT5LYW47CivnvZg+RnU7CivnvZ8+S287CivnvaA+QmluOwor572nPlNoaW47Civnvag+QW47Civnvak+VG91Owor572qPlphaTsKK+e9qz5LZWk7Civnva4+Q2hpOwor572wPkJhdHN1Owor572yPlNobzsKK+e9tT5CYTsKK+e9tz5IaTsKK+e9uD5CYXRzdTsKK+e9uT5SaTsKK+e+gj5LZW47CivnvoM+QmVraTsKK+e+hT5SYTsKK+e+hj5IaTsKK+e+hz5LaTsKK+e+iD5LaTsKK+e+ij5Zb3U7Civnvow+S3lvdTsKK+e+jj5CaTsKK+e+lD5Lb3U7Civnvpo+UmVpOwor576dPlRlaTsKK+e+nj5TaHV1Owor576jPkd1bjsKK+e+pD5HdW47Civnvqg+U2VuOwor576pPkdpOwor576uPktvdTsKK+e+rz5LYXRzdTsKK+e+sj5HaTsKK+e+tj5TZW47Civnvrg+UnVpOwor5765PktvdTsKK+e+vT5VOwor57+BPk91Owor57+FPlNoaTsKK+e/hj5TdWk7Civnv4o+WW9rdTsKK+e/jD5Zb2t1Owor57+SPlNodXU7Civnv5Q+U2hvdTsKK+e/lT5LeXV1Owor57+gPlN1aTsKK+e/oT5IaTsKK+e/pj5TZW47Civnv6k+SGVuOwor57+rPkdhbjsKK+e/sD5LYW47Civnv7M+RWk7Civnv7k+R3lvdTsKK+e/uz5Ib247Civnv7w+WW9rdTsKK+iAgD5Zb3U7CivogIE+Um91Owor6ICDPktvdTsKK+iAhD5Nb3U7CivogIU+U2hhOwor6ICGPktpOwor6ICLPlRldHN1Owor6ICMPkppOwor6ICQPlRhaTsKK+iAkj5SYWk7CivogJU+S291Owor6ICXPk1vdTsKK+iAmD5VbjsKK+iAmT5IYTsKK+iAnD5TaGk7CivogKE+Sm87CivogKg+RG91Owor6ICzPkppOwor6IC2PllhOwor6IC7PkNoaTsKK+iAvT5UYW47CivogL8+S291Owor6IGGPlJlaTsKK+iBij5SeW91Owor6IGSPkthdHN1Owor6IGWPlNlaTsKK+iBmD5IZWk7CivogZo+U2h1dTsKK+iBnj5CdW47CivogZ8+U2VpOwor6IGhPlNvdTsKK+iBqD5SZW47Civoga8+UmVuOwor6IGwPlNvdTsKK+iBsj5TZWk7CivogbM+U2hvdTsKK+iBtD5DaG91Owor6IG2PkpvdTsKK+iBtz5TaG9rdTsKK+iBuT5EZWk7Civogb0+Q2hvdTsKK+iBvj5Sb3U7Civogb8+SXRzdTsKK+iChD5JOwor6IKFPlNodWt1Owor6IKGPlNoaTsKK+iChz5DaG91Owor6IKJPk5pa3U7Civogos+Um9rdTsKK+iCjD5LaTsKK+iCkz5Lb3U7CivogpY+U2hvdTsKK+iCmD5DaHV1Owor6IKaPlRvOwor6IKbPktvdTsKK+iCnT5LYW47CivogqE+S287CivogqI+U2hpOwor6IKlPkhpOwor6IKpPktlbjsKK+iCqj5Cb3U7Civogqw+WXV1Owor6IKtPkRvdHN1Owor6IKvPktvdTsKK+iCsT5Lb3U7CivogrI+SWt1Owor6IK0PktvdTsKK+iCuj5IYWk7Civog4M+STsKK+iDhD5DaHV1Owor6IOGPlRhbjsKK+iDjD5IYWk7Civog44+VGFpOwor6IOWPkhhbjsKK+iDmT5TbzsKK+iDmj5IYWk7Civog5s+S291Owor6IOdPkNoaTsKK+iDnj5Ib3U7Civog6E+S287Civog6Q+SW47Civog6U+U2hvOwor6IOvPktvOwor6IOxPktvdTsKK+iDtD5Eb3U7Civog7g+S3lvdTsKK+iDvD5IZW47Civog70+Tm91Owor6ISCPlNoaTsKK+iEhT5LeW91Owor6ISGPlplaTsKK+iEhz5LeW91Owor6ISIPk15YWt1Owor6ISJPk15YWt1Owor6ISKPlNla2k7CivohJo+S3lha3U7CivohJs+S2VpOwor6ISjPlNoaW47CivohKk+U2h1dTsKK+iErz5IbzsKK+iEsT5EYXRzdTsKK+iEsz5Ob3U7CivohLk+Q2hvdTsKK+iEvj5IaTsKK+iFhj5UZW47CivohYs+RWtpOwor6IWOPkppbjsKK+iFkD5GdTsKK+iFkT5GdTsKK+iFkz5IaTsKK+iFlD5Lb3U7CivohZU+V2FuOwor6IWfPkNoaXRzdTsKK+iFpT5TZWk7CivohaY+Tm91Owor6IWrPlNob3U7Civoha4+U2FpOwor6IWwPllvdTsKK+iFsT5LZW47CivohbQ+WXU7Civohbg+Q2hvdTsKK+iFuT5GdWt1Owor6IW6PlNlbjsKK+iFvz5UYWk7CivohoA+SG91Owor6IaCPlJ5bzsKK+iGgz5PdHN1Owor6IaIPktha3U7Civohoo+SGFrdTsKK+iGjz5Lb3U7CivohpM+Q2hvdTsKK+iGlT5LYWt1Owor6IaaPkZ1Owor6IacPk1ha3U7Civohp0+U2hpdHN1Owor6IagPktvdTsKK+iGoz5DaGl0c3U7Civohqg+Qm91Owor6IapPkppOwor6IawPkhhbjsKK+iGsz5TZW47CivohrU+U3VpOwor6Ia4Plp1aTsKK+iGuj5Zb3U7Civohr0+VGFuOwor6Ia+PkthaTsKK+iGvz5Eb3U7Civoh4A+RGVuOwor6IeCPkhpOwor6IeGPk9rdTsKK+iHiD5Sb3U7Civoh4k+UmVuOwor6IeNPlNlaTsKK+iHkT5EYXU7Civoh5M+Wm91Owor6IeYPlJvdTsKK+iHmT5FbjsKK+iHmj5SeW87Civoh58+Wm91Owor6IegPlJlbjsKK+iHoz5TaGluOwor6IelPkdhOwor6IenPlpvdTsKK+iHqD5SaW47Civoh6o+U2hpOwor6IetPlNodXU7Civoh7M+U2hpOwor6Ie0PkNoaTsKK+iHuj5UYWk7Civoh7s+U2hpbjsKK+iHvD5LeXV1Owor6Ie+Pll1Owor6IiBPllvOwor6IiCPlNob3U7CivoiIU+S3l1dTsKK+iIhz5ZbzsKK+iIiD5LeW91Owor6IiJPkt5bzsKK+iIij5LeXV1Owor6IiMPlpldHN1Owor6IiNPlNoYTsKK+iIjj5TaGE7CivoiJA+U2hpOwor6IiSPkpvOwor6IiWPkhvOwor6IiXPkhvOwor6IiYPkthbjsKK+iImz5TZW47CivoiJw+U2h1bjsKK+iInj5CdTsKK+iInz5TaHV1Owor6IipPlNlbjsKK+iIqj5Lb3U7CivoiKs+SG91Owor6IisPkhhbjsKK+iIrj5SbzsKK+iIsz5DaGlrdTsKK+iItT5UYTsKK+iItj5IYWt1Owor6Ii3PktlbjsKK+iIuD5LYTsKK+iIuT5TZW47CivoiYA+RnU7CivoiYc+VGVpOwor6ImYPlNvdTsKK+iJmT5Tb3U7CivoiZo+U291Owor6ImfPkRvdTsKK+iJoj5TaG91Owor6ImkPkdpOwor6ImmPkthbjsKK+iJqD5Nb3U7Civoiao+Um87Civoias+Um87Civoia4+S29uOwor6ImvPlJ5b3U7CivoibE+S2FuOwor6ImyPlNob2t1Owor6Im2PkVuOwor6Im3PkVuOwor6Im4PlNvdTsKK+iJvj5HYWk7Civoios+VTsKK+iKjT5TaGFrdTsKK+iKkj5Cb3U7Civoipk+RnU7Civoip0+U2hpOwor6IqfPlNhbjsKK+iKpT5LYWk7CivoiqY+Um87Civoiqs+R2VuOwor6IqsPkZ1bjsKK+iKrT5CYTsKK+iKrz5TaGluOwor6IqxPkthOwor6IqzPkhvdTsKK+iKuD5HZWk7Civoirk+S2luOwor6Iq7PlN1dTsKK+iKvT5HYTsKK+iLhT5HYWk7Civoi5E+RW47Civoi5I+WmVuOwor6IuTPlJlaTsKK+iLlD5UYWk7Civoi5c+QnlvdTsKK+iLmT5SeXV1Owor6IubPkthOwor6IucPkJva3U7Civoi54+SG91Owor6IufPktvdTsKK+iLoT5JOwor6IujPkt5bzsKK+iLpT5KYWt1Owor6IumPkt1Owor6IunPkNobzsKK+iLqz5TZW47Civoi7E+RWk7Civoi7M+VG91Owor6Iu0PlNvOwor6Iu5PkhlaTsKK+iLuj5NYWk7Civoi7s+RnU7CivojII+TW87CivojIM+SGFuOwor6IyEPkthOwor6IyFPkJvdTsKK+iMhj5Cb3U7CivojIk+TWF0c3U7CivojI4+S2VpOwor6IyWPktha3U7CivojJc+TWVpOwor6IyYPlJpOwor6IycPlNlbjsKK+iMoz5HbzsKK+iMqD5TaGk7CivojKs+Qm91Owor6IyvPkZ1a3U7CivojLE+U2h1Owor6IyyPkppOwor6Iy0PkthaTsKK+iMtT5JbjsKK+iMtj5DaGE7CivojLg+Sm91Owor6Iy5PkpvOwor6I2APkp1bjsKK+iNhT5Ub3U7CivojYk+U291Owor6I2KPktlaTsKK+iNjz5KaW47CivojZA+U2VuOwor6I2SPktvdTsKK+iNmD5Tb3U7CivojbM+VG91Owor6I21PkppbjsKK+iNtz5LYTsKK+iNuz5UZWtpOwor6I28PlRvOwor6I6FPlJpOwor6I6HPkNobzsKK+iOiT5DaGk7Civojoo+U291Owor6I6OPlNhOwor6I6TPk1haTsKK+iOlj5LZWk7Civojpo+RW47Civojp4+S2FuOwor6I6fPkthbjsKK+iOoD5ZdXU7CivojqI+S3lvdTsKK+iOqD5Sb3U7Civojqo+R2E7Civojqs+Qm87CivojrE+UmFpOwor6I61PlRvOwor6I69PkJvdTsKK+iPgT5TZWk7Civoj4U+S2FuOwor6I+KPktpa3U7Civoj4w+S2luOwor6I+OPktvbjsKK+iPkz5LYTsKK+iPlj5TaG91Owor6I+YPlN1dTsKK+iPnD5TYWk7Civoj58+VG87Civoj6A+SGE7Civoj6k+SGFpOwor6I+rPktpbjsKK+iPrz5LYTsKK+iPsD5LbzsKK+iPsT5SeW91Owor6I+yPkhpOwor6I+0PkFuOwor6I+3PlNvdTsKK+iPuz5SaW47Civoj70+U2h1a3U7CivokIM+U3VpOwor6JCEPlRvdTsKK+iQhz5DaG91Owor6JCLPlNlaTsKK+iQjD5Ib3U7CivokI0+SGVpOwor6JCOPkk7CivokJM+R2k7CivokKA+SG91Owor6JCpPlNodXU7CivokKo+S3V3YTsKK+iQrD5NYW47CivokLE+S2VuOwor6JC1PldhOwor6JC4Pll1Owor6JC8Pkdha3U7CivokL0+UmFrdTsKK+iRhj5IbzsKK+iRiT5Zb3U7CivokY4+Uml0c3U7CivokZc+Q2hvOwor6JGbPkthdHN1Owor6JGhPkhvOwor6JGiPkdhaTsKK+iRoz5Ub3U7CivokaY+STsKK+iRqT5IYTsKK+iRqz5LbzsKK+iRrD5Tb3U7Civoka0+S2E7Civoka4+VGFuOwor6JGvPllha3U7CivokbE+U291Owor6JG1PktpOwor6JG3Pkd1bjsKK+iRuT5TaGk7Civokbo+U2h1dTsKK+iSgj5UZWk7CivokoQ+S2FuOwor6JKLPlNob3U7CivokpA+U2h1dTsKK+iSlD5TaGk7Civokpk+Qm91Owor6JKcPlNhbjsKK+iSnz5Lb247CivokqE+SG91Owor6JKtPlN1dTsKK+iSsj5IbzsKK+iSuD5Kb3U7Civokrk+S2VuOwor6JK7Pkpha3U7Civokrw+U291Owor6JK/PktvdTsKK+iTgT5TaGluOwor6JOEPkNoaWt1Owor6JOGPlNla2k7Civok4k+WW91Owor6JOKPk91Owor6JOLPkdhaTsKK+iTjT5TaGk7Civok5A+Sm9rdTsKK+iTkT5TYTsKK+iTlj5IaTsKK+iTmj5DaG91Owor6JOsPkhvdTsKK+iTrj5SZW47Civok7Q+U2h1bjsKK+iTvD5SeW91Owor6JO/PlNodWt1Owor6JSAPkhvdTsKK+iUhj5SeW91Owor6JSRPkJldHN1Owor6JSTPkJhbjsKK+iUlD5GdWt1Owor6JSVPlRlaTsKK+iUlz5TaG87CivolJg+U2hpbjsKK+iUmj5VdHN1Owor6JSfPlpva3U7CivolKE+U2FpOwor6JSmPkNob3U7CivolKw+U287CivolK0+SW47CivolLU+Wm91Owor6JS9PkhlaTsKK+iVgD5LeW9rdTsKK+iVgT5KaW47CivolYM+QmFuOwor6JWIPlNoaW47CivolYk+U2hvdTsKK+iVij5adWk7CivolYs+WnVpOwor6JWOPkt5b3U7CivolZU+WXV1Owor6JWXPlJvOwor6JWYPkpvdTsKK+iVmj5HYWt1Owor6JWjPlNodW47Civolag+S2V0c3U7Civolak+VG91Owor6JWqPkJ1Owor6JWtPlNob3U7Civolbc+WW87Civolb4+UmFpOwor6JaAPlVuOwor6JaEPkhha3U7Civoloc+Qmk7Civolog+S2FpOwor6JaKPktlaTsKK+iWkD5Sb3U7CivolpE+S3lvdTsKK+iWlD5TaG9rdTsKK+iWlz5FbjsKK+iWmT5UZWk7Civolps+U2V0c3U7Civolpw+SGVraTsKK+iWpD5LYWk7CivolqY+U2VuOwor6JaoPktvdTsKK+iWqT5TYXRzdTsKK+iWqj5TaGluOwor6JarPkt1bjsKK+iWrD5ZYWt1Owor6JauPlNvdTsKK+iWrz5TaG87Civolrk+VGFpOwor6Ja6PlNlaTsKK+iXgT5Lb3U7Civol4k+U2hhOwor6JeNPlJhbjsKK+iXjz5ab3U7Civol5A+QmFrdTsKK+iXlT5HdXU7Civol5w+UmVpOwor6JedPkdlaTsKK+iXpD5Ub3U7Civol6U+WWFrdTsKK+iXqT5IYW47Civol6o+U291Owor6Je3PlNobzsKK+iXuT5BaTsKK+iXuj5SaW47Civol7s+U291Owor6Je+PlJhaTsKK+iYgj5adWk7CivomIY+Um87CivomIc+U287CivomIo+VW47CivomIs+SGluOwor6JiTPlNvOwor6JiWPkdldHN1Owor6JiXPkhha3U7CivomJo+U2VuOwor6JiiPlJvdTsKK+iYrT5SYW47CivomK8+VG91Owor6Ji/PlJhOwor6JmNPktvOwor6JmOPktvOwor6JmQPkd5YWt1Owor6JmUPktlbjsKK+iZlT5TaG87CivomZo+S3lvOwor6JmcPlJ5bzsKK+iZnj5HdTsKK+iZnz5Hb3U7Civomac+S2k7Civomas+Q2h1dTsKK+iZsT5TaGl0c3U7Civombk+S291Owor6Jm7PkJvdTsKK+iaij5CdW47Civomos+WmVpOwor6JqMPkhvdTsKK+iakz5JbjsKK+ialT5TYW47CivomqM+S291Owor6JqkPlNvdTsKK+iaqT5TaGk7Civomqo+VG91Owor6JqrPkhvdTsKK+iarz5LeXV1Owor6JqwPll1dTsKK+iatj5LYW47Civom4Q+S287Civom4Y+U2hvOwor6JuHPkphOwor6JuJPlJlaTsKK+ibiz5UYW47Civom40+S2VpOwor6JuOPlJlaTsKK+iblD5LYWk7Civom5k+QTsKK+ibmz5TaHU7Civom54+S2F0c3U7Civom58+S291Owor6JukPktvdTsKK+ibqT5LeW91Owor6JusPkt5b3U7Civom60+U2hpdHN1Owor6JuuPkJhbjsKK+ibuD5Tb3U7Civom7k+WW91Owor6Ju7PlplaTsKK+ibvj5HYTsKK+icgD5TaG9rdTsKK+icgj5Ib3U7CivonIM+U2hpbjsKK+ichj5LZW47CivonIg+R287CivonIk+RnU7CivonIo+Umk7CivonI0+U2hvOwor6JyRPlRhbjsKK+ickj5FbjsKK+icmD5DaGk7CivonJo+SGk7CivonJw+TWl0c3U7CivonKU+U2VraTsKK+icqT5DaG91Owor6Jy0PkVraTsKK+ictz5LZW47CivonLs+U2VpOwor6Jy/PkVuOwor6J2JPlNlbjsKK+idiz5Sb3U7CivonYw+S2E7CivonY4+S2F0c3U7CivonZM+WXU7CivonZU+U2hva3U7CivonZc+S291Owor6J2ZPkhlbjsKK+idnz5JOwor6J2gPkZ1a3U7CivonaM+WXV1Owor6J2mPkthOwor6J2oPlNoaXRzdTsKK+idqj5Ub3U7Civona4+RnVrdTsKK+idtD5LbzsKK+idtj5DaG91Owor6J24PkthOwor6J2/PllvdTsKK+iegj5Sb3U7Civono0+WXV1Owor6J6fPk1laTsKK+ieoj5LZWk7Civonqs+U2VraTsKK+ierz5Hb3U7CivonrM+VG91Owor6J66PlJhOwor6J67PlJvdTsKK+ievT5TaHV1Owor6J+APlNodXRzdTsKK+ifhD5DaGl0c3U7Civon4Y+QmE7Civon4c+QmE7Civon4s+U2hpdHN1Owor6J+QPlRvdTsKK+ifkj5Cb3U7Civon6A+SGFuOwor6J+vPkd5b3U7Civon7I+S2k7Civon7Y+VGVpOwor6J+3PlRvdTsKK+ifuT5LYWk7Civon7s+R2k7Civon74+U2VuOwor6KCFPllvdTsKK+igjT5LYXRzdTsKK+igjj5Cb3U7CivooI8+S2FpOwor6KCRPkVpOwor6KCVPkRhOwor6KCWPktha3U7CivooKE+UmVpOwor6KCiPlNodW47CivooKM+UmVpOwor6KCnPlRvOwor6KCxPktvOwor6KC2PlNhbjsKK+iguT5UbzsKK+iguz5CYW47CivooYA+S2V0c3U7CivooYI+SmlrdTsKK+ihhD5KaWt1Owor6KGGPlNodXU7CivooYw+S291Owor6KGNPkVuOwor6KGSPktlbjsKK+ihkz5KdXRzdTsKK+ihlz5HYWk7CivooZk+R3lvOwor6KGbPkVpOwor6KGdPlNob3U7CivooZ4+RWk7CivooaE+S291Owor6KGiPkt1Owor6KGjPkk7Civooag+SHlvdTsKK+ihqz5TYW47CivoobA+U2E7CivoobI+RG91Owor6KG1PkppdHN1Owor6KG3PkNodXU7Civoob0+SmluOwor6KG+PktpbjsKK+ihvz5LaW47CivoooE+RW47CivoooI+QmVpOwor6KKIPkthOwor6KKLPlRhaTsKK+iijT5Ib3U7CivoopI+VGFuOwor6KKWPlNodXU7Civoopc+U2hpbjsKK+iimT5IYTsKK+iinj5Lb247CivooqI+SGFuOwor6KKkPkJvdTsKK+iiqz5IaTsKK+iirj5OZTsKK+iisT5GdWt1Owor6KK0PktvOwor6KK1PkppbjsKK+iitz5Lb3U7Civoor8+S2VpOwor6KOBPlNhaTsKK+ijgj5SZXRzdTsKK+ijhT5Tb3U7Civoo48+Umk7Civoo5Q+RWk7Civoo5U+WXV1Owor6KOYPkt5dXU7Civoo5k+S3VuOwor6KOcPkhvOwor6KOdPlNvdTsKK+ijnz5TYTsKK+ijoT5SaTsKK+ijqD5IaTsKK+ijsj5SeW91Owor6KOzPlNob3U7Civoo7Q+SGFpOwor6KO4PlJhOwor6KO5PkthOwor6KO8PlNla2k7Civoo70+U2VpOwor6KO+Pkt5bzsKK+ikgj5LYWk7CivopIc+RnVrdTsKK+ikij5IZW47CivopIw+S29uOwor6KSQPkthdHN1Owor6KSSPkhvdTsKK+ikkz5IbzsKK+iknT5UYW47CivopJ4+T247CivopKU+Sm9rdTsKK+ikqj5UYWk7CivopKs+Q2hpOwor6KS2PkNob3U7CivopLg+Um91Owor6KS7PlNldHN1Owor6KWBPkt5b3U7CivopYM+SG91Owor6KWEPkpvdTsKK+iljD5UYW47CivopY0+WmF0c3U7CivopZY+T3U7CivopZ4+SGVraTsKK+ilnz5LaW47CivopaA+VG91Owor6KWkPlJhbjsKK+ilpj5KdTsKK+ilqj5CZXRzdTsKK+ilrT5LZXRzdTsKK+ilrz5TaGluOwor6KWyPlNodXU7CivopbQ+UmFuOwor6KW+PkFrYTsKK+ilvz5TZWk7CivopoE+WW91Owor6KaDPlRhbjsKK+imhj5GdWt1Owor6KaHPkhhOwor6KaIPktha3U7Civopoo+S2k7Civopos+S2VuOwor6KaPPktpOwor6KaTPkJla2k7CivoppY+U2hpOwor6KaXPlNoaTsKK+immD5UZW47Civoppo+S2FrdTsKK+imoT5HZWtpOwor6KamPll1Owor6KanPlJhbjsKK+imqT5UbzsKK+imqj5TaGluOwor6KasPktpOwor6KavPktvdTsKK+imsj5LaW47CivoprM+S2FuOwor6Ka6Pktha3U7Civopr0+UmFuOwor6Ka/PlRla2k7Civop4A+S2FuOwor6KeSPktha3U7Civop5o+S287Civop5w+U2hpOwor6KedPlRlaTsKK+inoz5LYWk7Civop6Y+U2hva3U7Civop6c+S2FpOwor6Ke0PlNob3U7Civop7g+U2hva3U7CivoqIA+R2VuOwor6KiCPlRlaTsKK+iogz5GdTsKK+ioiD5LZWk7CivoqIo+SmluOwor6KiMPktvdTsKK+iojj5Ub3U7CivoqJA+S2V0c3U7CivoqJM+S3VuOwor6KiWPktpdHN1Owor6KiXPlRha3U7CivoqJg+S2k7CivoqJs+S2E7CivoqJ0+R2E7CivoqJ8+U2hvdTsKK+iooz5LZXRzdTsKK+iopT5Ub3RzdTsKK+ioqj5Ib3U7CivoqK0+U2V0c3U7CivoqLE+S3lvOwor6KizPllha3U7CivoqLQ+U287CivoqLY+S2E7CivoqLo+U2hpbjsKK+iouz5DaHV1Owor6Ki8PlNob3U7CivoqYE+S287CivoqYY+VGVpOwor6KmIPlJpOwor6KmQPlNhOwor6KmRPlRhOwor6KmSPlRhaTsKK+iplD5TaG91Owor6KmVPkh5b3U7CivoqZs+U287CivoqZ4+U2hpOwor6KmgPkVpOwor6KmiPkp1bjsKK+ipoz5LZWk7CivoqaY+U2hpOwor6KmpPlNoaTsKK+ipqz5UYTsKK+iprD5Lb3U7Civoqa0+S2k7Civoqa4+U2VuOwor6KmwPktpdHN1Owor6KmxPldhOwor6KmyPkdhaTsKK+ipsz5TaG91Owor6Km8PkthaTsKK+iqgj5DaG91Owor6KqEPlJ1aTsKK+iqhT5DaHV1Owor6KqHPktvOwor6KqJPllvOwor6KqMPlNoaTsKK+iqjT5OaW47CivoqpE+S3lvdTsKK+iqkz5TZWk7CivoqpU+VGFuOwor6KqYPll1dTsKK+iqmj5TaG91Owor6KqePkdvOwor6KqgPlNlaTsKK+iqoT5LYWk7CivoqqM+RnU7CivoqqQ+R287CivoqqU+S291Owor6KqmPlNob3U7Civoqqg+S2FpOwor6KqsPlNldHN1Owor6KqtPlRva3U7CivoqrA+U3VpOwor6KqyPkthOwor6Kq5PkhpOwor6Kq8PkdpOwor6Kq/PkNob3U7Civoq4I+VGVuOwor6KuEPkp1bjsKK+irhz5EYW47Civoq4s+U2VpOwor6KuMPkthbjsKK+irjT5Tb3U7Civoq48+U2h1Owor6KuSPlJ5b3U7Civoq5Y+Um9uOwor6KuaPkpvdTsKK+irmz5ZdTsKK+irnD5DaG91Owor6KuePkhlbjsKK+iroD5LZW47Civoq6E+U2hpOwor6KuiPktvbjsKK+irpD5HYWt1Owor6KumPlRlaTsKK+irpz5LYWk7Civoq6s+S2FuOwor6KutPll1Owor6KuuPlNoaTsKK+irsT5LaTsKK+irsz5BbjsKK+irtz5GdXU7Civoq7g+U2hvOwor6Ku6PkdlbjsKK+irvj5EYWt1Owor6KyAPkJvdTsKK+isgT5FdHN1Owor6KyCPkk7CivorIQ+VG91Owor6KyHPktlbjsKK+isjD5LYTsKK+isjj5NZWk7CivorJA+SGl0c3U7CivorJQ+R3lha3U7CivorJY+U2hva3U7CivorJc+Qm91Owor6KyZPktlbjsKK+ismj5TaGk7CivorJs+S291Owor6KydPlNoYTsKK+isoD5Zb3U7CivorKE+WW91Owor6KymPktlaTsKK+isqD5CbzsKK+isqz5UYWt1Owor6KysPkJ5b3U7CivorLM+T3U7CivorLk+S2luOwor6Ky+PkJhbjsKK+itgT5LYTsKK+itiT5TaG91Owor6K2MPkthOwor6K2OPktpdHN1Owor6K2PPktpOwor6K2WPlNoaW47CivorZg+U2hpa2k7CivorZo+VGFuOwor6K2bPlNoaW47CivorZw+RnU7CivorZ8+U291Owor6K2mPktlaTsKK+itqz5TZW47Civoraw+SGk7Civora8+WWFrdTsKK+itsD5HaTsKK+itsT5aZW47CivorbI+Sm91Owor6K20PktlbjsKK+ittz5HbzsKK+itvT5ZbzsKK+iugD5Ub2t1Owor6K6DPlNhbjsKK+iuij5IZW47Civorow+RW47Civoro4+U2h1dTsKK+iukD5TaHV1Owor6K6SPlNhbjsKK+iukz5Kb3U7CivorpY+U2hpbjsKK+iumT5LYW47Civorpo+U2FuOwor6LC3Pktva3U7CivosLo+S2E7CivosL8+S2VpOwor6LGBPkthdHN1Owor6LGGPlRvdTsKK+ixiD5LaTsKK+ixij5Ib3U7CivosYw+RW47CivosY4+SnU7CivosZA+SG91Owor6LGVPlNoaTsKK+ixmj5Ub247CivosaE+U2hvdTsKK+ixoj5LZW47Civosao+R291Owor6LGrPllvOwor6LGsPkNobzsKK+ixuD5DaGk7Civosbk+SG91Owor6LG6PlNhaTsKK+ixvD5IaTsKK+iygj5DaG91Owor6LKFPkt5dXU7Civosok+S2FrdTsKK+iyij5IYWt1Owor6LKMPkJvdTsKK+iyjT5SaTsKK+iyjj5HZWk7CivospQ+SGk7Civospg+QmFrdTsKK+iynT5CYWk7Civosp4+VGVpOwor6LKgPkZ1Owor6LKhPlphaTsKK+iyoj5Lb3U7Civosqc+SGluOwor6LKoPkthOwor6LKpPkhhbjsKK+iyqj5Eb247Civosqs+S2FuOwor6LKsPlNla2k7Civosq0+U2hpdHN1Owor6LKuPk5pOwor6LKvPkNobzsKK+iysD5TZWk7CivosrI+U2hpOwor6LKzPk5pOwor6LK0PktpOwor6LK2PkhlbjsKK+iytz5CYWk7Civosrg+VGFpOwor6LK7PkhpOwor6LK8PlRlbjsKK+iyvT5JOwor6LK/PkJvdTsKK+izgD5HYTsKK+izgT5IaTsKK+izgj5SbzsKK+izgz5DaGluOwor6LOEPldhaTsKK+izhz5TaGk7Civos4g+S287Civos4o+Wm9rdTsKK+izjT5Tb3U7Civos44+U2VuOwor6LORPlNoaW47Civos5M+SGluOwor6LOaPlJhaTsKK+izmz5TYW47Civos5w+U2hpOwor6LOePlNob3U7Civos6A+QmFpOwor6LOiPktlbjsKK+izoz5CYWk7Civos6Q+U2VuOwor6LOmPkZ1Owor6LOqPlNoaXRzdTsKK+izrT5UbzsKK+izuj5UYW47Civos7s+RnU7Civos7w+S291Owor6LO9PlNhaTsKK+i0hD5TaGk7CivotIU+WmVpOwor6LSHPkluOwor6LSIPlpvdTsKK+i0ij5TYW47CivotIs+R2FuOwor6LSNPlNlbjsKK+i0jz5FaTsKK+i0kD5TaGluOwor6LSTPlpvdTsKK+i0lD5IaTsKK+i0lj5TaG9rdTsKK+i1pD5TZWtpOwor6LWmPlNoYTsKK+i1pz5UYW47Civotas+S2FrdTsKK+i1rT5TaGE7CivotbA+U291Owor6LWxPlNvdTsKK+i1sz5LeXV1Owor6LW0PkZ1Owor6LW3PktpOwor6LaBPkNoaW47CivotoU+Q2hvdTsKK+i2ij5FdHN1Owor6LaZPkNob3U7CivotqM+U2h1Owor6LaoPlN1dTsKK+i2sz5Tb2t1Owor6La6PkZ1Owor6La+PlNoaTsKK+i3gj5LaTsKK+i3iz5CYXRzdTsKK+i3jD5UZXRzdTsKK+i3jz5LYTsKK+i3lj5TZWtpOwor6LeaPlNhbjsKK+i3mz5IYTsKK+i3nT5LeW87Civot58+S29uOwor6LehPlNla2k7Civot6M+U2VuOwor6LeoPktvOwor6LeqPktpOwor6LerPkt5b3U7Civot68+Um87Civot7M+Q2hvdTsKK+i3tT5TZW47Civot7w+S3lva3U7Civot78+VG87CivouIg+U2hvOwor6LiJPlJ5b3U7CivouIo+WW91Owor6LiPPlRvdTsKK+i4kD5TZW47CivouJ0+S2E7CivouJ4+S3lvOwor6LifPkNoaTsKK+i4qj5TaG91Owor6LiwPll1Owor6Li0PllvdTsKK+i4tT5TaG91Owor6LmCPkp1dTsKK+i5hD5UZWk7CivouYc+S2VuOwor6LmIPlRvdTsKK+i5iT5TYTsKK+i5ij5LZWk7CivouYw+U2hvdTsKK+i5kD5TZWtpOwor6LmVPkhpdHN1Owor6LmZPlNodWt1Owor6LmfPlNla2k7CivouaA+U2VraTsKK+i5oz5NYW47CivouaQ+U2hvdTsKK+i5sj5Tb247CivoubQ+U2h1dTsKK+i5tj5LZXRzdTsKK+i5vD5Cb2t1Owor6LqBPlNvdTsKK+i6hD5IZWtpOwor6LqFPkNob2t1Owor6LqHPkNobzsKK+i6ij5DaHV1Owor6LqLPlNlaTsKK+i6jT5ZYWt1Owor6LqRPlRla2k7CivoupM+Q2hpOwor6LqUPlRlbjsKK+i6mT5SaW47CivouqE+Sm91Owor6LqqPlJpbjsKK+i6qz5TaGluOwor6LqsPkt5dXU7Civouq8+S3U7CivourA+VGVpOwor6LqxPlRhOwor6LuGPlRlaTsKK+i7ij5TaGE7Civou4s+QXRzdTsKK+i7jD5LaTsKK+i7jT5HdW47Civou5I+S2VuOwor6LubPkFrdTsKK+i7nz5OYW47Civou6I+VGVuOwor6LujPkdvdTsKK+i7qz5TaGluOwor6Lu4Pkppa3U7Civou7s+S2E7Civou7w+SXRzdTsKK+i7vT5LZWk7Civou74+U2hva3U7CivovIM+S2FrdTsKK+i8hT5SbzsKK+i8iT5TYWk7CivovIo+Q2hpOwor6LyMPlJ5b3U7CivovJI+Q2hvdTsKK+i8kz5CYW47CivovJQ+RnU7CivovJU+S2VpOwor6LyZPkNob3U7CivovJs+UnlvdTsKK+i8nD5TaGk7CivovJ0+S2k7CivovJ8+VGV0c3U7CivovKY+UmVuOwor6LypPkhhaTsKK+i8qj5SaW47CivovK8+U2h1dTsKK+i8sz5Tb3U7CivovLg+WXU7CivovLk+RnVrdTsKK+i8uz5GdWt1Owor6Ly+PlRlbjsKK+i8vz5ZbzsKK+i9gj5Lb2t1Owor6L2EPkthdHN1Owor6L2FPkVuOwor6L2GPlJva3U7CivovYk+VGVuOwor6L2NPlRldHN1Owor6L2OPkt5b3U7CivovZc+S2FuOwor6L2cPkppOwor6L2fPkdvdTsKK+i9oT5IaTsKK+i9oj5SZWtpOwor6L2jPlJla2k7CivovaQ+Um87Civovps+U2hpbjsKK+i+nD5LbzsKK+i+nj5KaTsKK+i+nz5IZWtpOwor6L6jPlJhdHN1Owor6L6nPkJlbjsKK+i+qD5CZW47Civovq0+Smk7Civovq4+SGVuOwor6L6vPkJlbjsKK+i+sD5TaGluOwor6L6xPkpva3U7CivovrI+Tm91Owor6L66PkhlbjsKK+i+vz5UZW47Civov4I+VTsKK+i/hD5LaXRzdTsKK+i/hT5KaW47Civov44+R2VpOwor6L+RPktpbjsKK+i/lD5IZW47Civov6I+Q2hvdTsKK+i/pT5LZWk7Civov6Y+S2E7Civov6k+Smk7Civov6o+VGVraTsKK+i/qz5IYWt1Owor6L+tPlRldHN1Owor6L+vPlRvdTsKK+i/sD5KdXRzdTsKK+i/tD5LYWk7Civov7c+TWVpOwor6L+4PkhvdTsKK+i/uT5TZWtpOwor6L+6PkRhaTsKK+i/vT5Uc3VpOwor6YCAPlRhaTsKK+mAgT5Tb3U7CivpgIM+VG91Owor6YCFPktvdTsKK+mAhj5HeWFrdTsKK+mAiz5IbzsKK+mAjT5TaG91Owor6YCOPlNodXU7CivpgI8+VG91Owor6YCQPkNoaWt1Owor6YCRPkt5dXU7CivpgJM+VGVpOwor6YCUPlRvOwor6YCVPktlaTsKK+mAlj5UZWtpOwor6YCXPlRvdTsKK+mAmT5HZW47CivpgJo+VHM7CivpgJ0+U2VpOwor6YCePlRlaTsKK+mAnz5Tb2t1Owor6YCgPlpvdTsKK+mAoT5TaHVuOwor6YCiPkhvdTsKK+mAoz5SZW47CivpgK4+VGFpOwor6YCxPlNodXU7CivpgLI+U2hpbjsKK+mAtT5LaTsKK+mAtj5JOwor6YC4Pkl0c3U7CivpgLk+VGF0c3U7CivpgLw+SGl0c3U7CivpgL4+WXU7CivpgYE+VG9uOwor6YGCPlN1aTsKK+mBhT5DaGk7CivpgYc+R3V1Owor6YGJPlRlaTsKK+mBij5ZdXU7CivpgYs+VW47CivpgY0+SGVuOwor6YGOPkthOwor6YGPPkF0c3U7CivpgZA+S2E7CivpgZE+S291Owor6YGSPlNodXU7CivpgZM+RG91Owor6YGUPlRhdHN1Owor6YGVPkk7CivpgZg+S291Owor6YGZPllvdTsKK+mBnD5Tb247CivpgZ4+VGVpOwor6YGgPkVuOwor6YGhPlNvOwor6YGjPktlbjsKK+mBpT5Zb3U7Civpgag+R291Owor6YGpPlRla2k7Civpga0+U291Owor6YGuPlNoYTsKK+mBrz5Ub247CivpgbI+Q2hpOwor6YG1Pkp1bjsKK+mBtj5Kb3U7Civpgbc+U2VuOwor6YG4PlNlbjsKK+mBuj5JOwor6YG8PlJ5b3U7Civpgb0+S3lvOwor6YG/PkhpOwor6YKAPllvdTsKK+mCgT5CYWk7CivpgoI+S2FpOwor6YKDPlN1aTsKK+mChD5LYW47Civpgoc+Smk7Civpgok+SGVuOwor6YKKPkhlbjsKK+mCjz5SYTsKK+mCkT5ZdXU7CivpgqM+RGE7CivpgqY+SG91Owor6YKoPlNvbjsKK+mCqj5ZYTsKK+mCrz5LYW47CivpgrE+S3l1dTsKK+mCtT5TaG91Owor6YK4PlRlaTsKK+mDgT5Ja3U7Civpg4o+S291Owor6YOOPlJvdTsKK+mDmz5GdTsKK+mDoT5HdW47Civpg6I+RWk7Civpg6Q+R2VraTsKK+mDqD5CdTsKK+mDrT5LYWt1Owor6YO1Pll1dTsKK+mDtz5LeW91Owor6YO9PlRvOwor6YSCPkdha3U7CivphJI+U3V1Owor6YSZPkhpOwor6YStPlRlaTsKK+mEsD5SaW47CivphLI+VGFuOwor6YWJPll1dTsKK+mFij5UZWk7CivphYs+U2h1dTsKK+mFjD5TaGFrdTsKK+mFjT5IYWk7CivphY4+Q2h1dTsKK+mFkj5TaHU7CivphZQ+U3VpOwor6YWWPlRhbjsKK+mFmD5Ub3U7CivphaI+U2FrdTsKK+mFoz5LYW47CivphaU+U287Civphak+TWVpOwor6YWqPlJha3U7Civphaw+U2h1dTsKK+mFsj5UZWk7CivphbM+SW47CivphbU+S291Owor6YW3Pktva3U7Civphbg+U2FuOwor6YaCPlJpbjsKK+mGhz5TaHVuOwor6YaJPlN1aTsKK+mGiz5TYWt1Owor6YaNPlRlaTsKK+mGkD5LbzsKK+mGkj5TZWk7Civphpc+SGF0c3U7Civphpw+U2h1dTsKK+mGoj5LYWk7CivphqQ+U2hvdTsKK+mGqj5Sb3U7Civphqs+STsKK+mGrz5LZWk7CivphrQ+UmVpOwor6Ya1Pkt5bzsKK+mGuD5Kb3U7Civphro+S3VuOwor6YeAPkpvdTsKK+mHgT5LaW47Civph4Y+SGFuOwor6YeHPlNhaTsKK+mHiD5TaGFrdTsKK+mHiT5ZdXU7Civph4s+U2hha3U7Civph4w+Umk7Civph40+Q2hvdTsKK+mHjj5ZYTsKK+mHjz5SeW91Owor6YeQPlJpOwor6YeRPktpbjsKK+mHlj5Ub3U7Civph5g+VGVpOwor6YebPktva3U7Civph5w+RnU7Civph50+U2hpbjsKK+mHnz5IYXRzdTsKK+mHoT5GdTsKK+mHoz5DaG91Owor6YemPktvdTsKK+mHpz5TZW47Civph7U+U2E7Civph7Y+U2hpOwor6Ye8PktlbjsKK+mHvz5LaW47CivpiI0+RG9uOwor6YiOPktvdTsKK+mIkT5IYW47CivpiJQ+U2hvdTsKK+mIlT5DaHV1Owor6YiePktpbjsKK+mIqT5SbzsKK+mIrD5UYWt1Owor6Yi0PlJlaTsKK+mItz5LbzsKK+mIvz5UZW47CivpiYQ+VGV0c3U7CivpiYU+S3lvOwor6YmIPlNoYTsKK+mJiT5LZW47CivpiYs+SG91Owor6YmQPlNla2k7CivpiZc+S2FuOwor6YmaPlJ5dXU7CivpiZs+RW47CivpiZ4+RXRzdTsKK+mJoj5IYWNoaTsKK+mJpD5Lb3U7CivpiaY+U2VpOwor6YmxPktvdTsKK+mJvj5Cb3U7CivpioA+R2luOwor6YqDPkp1dTsKK+mKhT5Eb3U7CivpipE+U2VuOwor6YqTPlNlbjsKK+mKlT5UZXRzdTsKK+mKlj5TaHU7Civpipg+TWVpOwor6YqaPllvdTsKK+mKmz5TZW47Civpipw+S2FuOwor6YqtPlNlbjsKK+mKtz5TaG91Owor6Yq5PlNodXU7Civpi48+S3lvdTsKK+mLkj5Ib3U7Civpi6Q+Sm87Civpi6k+Qm91Owor6YuqPkhvOwor6YutPkVpOwor6YuzPkNodXU7Civpi7g+S3lvOwor6Yu6PkVuOwor6Yu8PktvdTsKK+mMhj5TZWk7CivpjI8+QTsKK+mMkD5TdWk7CivpjJg+VHN1aTsKK+mMmT5TaGk7CivpjJo+U291Owor6YygPkpvdTsKK+mMoj5TZW47CivpjKM+VGVpOwor6YymPktpbjsKK+mMqD5CeW91Owor6YyrPlNla2k7CivpjKw+UmVuOwor6YyuPktvOwor6YyvPlNha3U7CivpjLI+Um9rdTsKK+mMuz5CdTsKK+mNhD5LZWk7CivpjYs+S2E7CivpjY0+VG87CivpjZQ+R2FrdTsKK+mNlj5DaGluOwor6Y2bPlRhbjsKK+mNnD5LYTsKK+mNoD5Lb3U7Civpjaw+U2h1dTsKK+mNrj5DaHV1Owor6Y21PktlbjsKK+mNvD5TaGluOwor6Y2+PlNob3U7Civpjow+UmVuOwor6Y6UPllvdTsKK+mOlj5TYTsKK+mOlz5Tb3U7Civpjpo+VHN1aTsKK+mOpz5HYWk7Civpjqw+S291Owor6Y6tPkNoaW47Civpjq4+Q2hpbjsKK+mOsD5JdHN1Owor6Y+DPlpva3U7Civpj4g+UmVuOwor6Y+QPlJ5dXU7Civpj5E+VGVraTsKK+mPlj5PdTsKK+mPlz5Lb3U7Civpj5g+U2hvdTsKK+mPnT5NYW47Civpj6E+S3lvdTsKK+mPpD5Sb3U7Civpj6U+U2h1dTsKK+mPqD5TYW47CivpkIM+RG91Owor6ZCHPkhhbjsKK+mQkD5SeW91Owor6ZCTPlRhaTsKK+mQlD5TaGluOwor6ZCYPlNob3U7CivpkJk+VG91Owor6ZCaPkE7CivpkKE+VGV0c3U7CivpkKs+U2VuOwor6ZC1PlRldHN1Owor6ZC2PkthbjsKK+mQuD5UYWt1Owor6ZC6PlRvdTsKK+mRgT5CYW47CivpkYQ+Q2h1dTsKK+mRkT5LYW47CivpkZI+S2FuOwor6ZGaPlNhbjsKK+mRmz5Lb3U7CivpkZ4+Um91Owor6ZGgPlNoYWt1Owor6ZGiPlJ5bzsKK+mRqj5SbzsKK+mRsD5ZYWt1Owor6ZG1PkthbjsKK+mRtz5Kb3U7Civpkbw+UmE7Civpkb0+U2FuOwor6ZG+PlJhbjsKK+mRvz5TYWt1Owor6ZKBPktha3U7Civplbc+Q2hvdTsKK+mWgD5Nb247CivploI+U2FuOwor6ZaDPlNlbjsKK+mWhz5IZWk7Civplok+SGVpOwor6ZaLPkthaTsKK+mWjz5KdW47CivplpE+S2FuOwor6ZaTPkthbjsKK+mWlD5CaW47Civplpg+S291Owor6ZaZPlRvdTsKK+mWoj5LYW47CivplqM+S2FrdTsKK+mWpD5Lb3U7CivplqU+QmF0c3U7Civplqc+S291Owor6ZaoPktlaTsKK+mWrT5SbzsKK+mWsj5FdHN1Owor6Za5PkVuOwor6Za7PkVuOwor6Za8PkE7Civplr4+WW9rdTsKK+mXgz5HZWtpOwor6ZeHPkFuOwor6ZeKPkthdHN1Owor6ZeMPlJhbjsKK+mXjT5UbzsKK+mXlD5Lb3U7Civpl5U+S2V0c3U7Civpl5Y+Q2hpbjsKK+mXmD5Ub3U7Civpl5w+S2FuOwor6ZehPlNlbjsKK+mXoj5IZWtpOwor6ZelPlRhdHN1Owor6ZicPkZ1Owor6ZihPlNlbjsKK+mYqD5Ba3U7CivpmKo+SGFuOwor6ZiuPkdlbjsKK+mYrz5TaGk7CivpmLI+Qm91Owor6Zi7PlNvOwor6Zi/PkE7CivpmYA+RGE7CivpmYI+SGE7CivpmYQ+RnU7CivpmYs+Um91Owor6ZmMPkhha3U7CivpmY0+S291Owor6ZmPPlRhOwor6ZmQPkdlbjsKK+mZmz5IZWk7CivpmZw+S291Owor6ZmdPlNlbjsKK+mZnj5TaG91Owor6ZmfPkNob2t1Owor6ZmiPkluOwor6ZmjPkppbjsKK+mZpD5KbzsKK+mZpT5LYW47CivpmaY+VG91Owor6ZmqPkJhaTsKK+mZrD5TdXU7CivpmbA+SW47CivpmbI+U3VpOwor6ZmzPkNoaW47CivpmbU+UnlvdTsKK+mZtj5Ub3U7Civpmbc+S2FuOwor6Zm4PlJpa3U7Civpmbo+S2VuOwor6Zm9PllvdTsKK+mahT5HdXU7CivpmoY+Unl1dTsKK+maiD5XYWk7Civpmoo+VGFpOwor6ZqLPlRhOwor6ZqNPktvdTsKK+majj5LYWk7Civpmo8+WnVpOwor6ZqUPktha3U7CivpmpU+SW47Civpmpc+S2FpOwor6ZqYPkFpOwor6ZqZPkdla2k7Civpmps+U2FpOwor6ZqcPlNob3U7CivpmqA+SW47CivpmqM+UmluOwor6ZqnPlN1aTsKK+maqD5adWk7Civpmqo+S2VuOwor6ZqwPlNoaXRzdTsKK+masT5JbjsKK+masj5TaGl0c3U7CivpmrQ+Um91Owor6Zq2PlRhaTsKK+matz5SZWk7Civpmrg+UmVpOwor6Zq5PlN1aTsKK+mauz5TZWtpOwor6Zq8Pkp1bjsKK+mbgD5KYWt1Owor6ZuBPkdhbjsKK+mbhD5ZdXU7Civpm4U+R2E7Civpm4Y+U2h1dTsKK+mbhz5LbzsKK+mbiT5DaGk7Civpm4s+U2VuOwor6ZuMPlNoaTsKK+mbjT5Zb3U7Civpm44+U2hvOwor6ZuRPlphdHN1Owor6ZuVPkNob3U7Civpm5Y+U3VpOwor6ZuZPlNvdTsKK+mbmz5TdXU7Civpm5w+WmF0c3U7Civpm6I+Umk7Civpm6M+TmFuOwor6ZuoPlU7Civpm6o+U2V0c3U7Civpm6s+RGE7Civpm7A+RnVuOwor6ZuyPlVuOwor6Zu2PlJlaTsKK+mbtz5SYWk7Civpm7k+SGFrdTsKK+mbuz5EZW47CivpnIA+SnU7CivpnIQ+U2hvdTsKK+mchj5UZWk7CivpnIc+U2hpbjsKK+mciD5IYWk7CivpnIo+UmVpOwor6ZyNPktha3U7CivpnI4+U291Owor6ZyPPkhpOwor6ZyRPlRlbjsKK+mckz5HZWk7CivpnJY+UmluOwor6ZyZPkVpOwor6ZycPlNvdTsKK+mcnj5LYTsKK+mcpD5SeXV1Owor6ZynPk11Owor6ZyqPkluOwor6ZywPlNhbjsKK+mcsj5SbzsKK+mcuD5IYWt1Owor6Zy5Pkhla2k7CivpnL0+U2VpOwor6Zy+PkJhaTsKK+mdgj5SZWtpOwor6Z2EPkFpOwor6Z2GPlRhaTsKK+mdiD5SZWk7CivpnYk+QWk7CivpnZI+U2VpOwor6Z2WPlNlaTsKK+mdmT5TZWk7CivpnZw+U2VpOwor6Z2ePkhpOwor6Z2gPktvdTsKK+mdoT5IaTsKK+mdoj5NZW47CivpnaQ+SG91Owor6Z2mPlRlbjsKK+mdqD5Zb3U7Civpnak+S2FrdTsKK+mdqz5TYWk7Civpna0+SmluOwor6Z2xPkppbjsKK+mdtD5LYTsKK+mduT5LZXRzdTsKK+mduj5NYXRzdTsKK+mdvD5UYW47CivpnoE+SGk7CivpnoQ+SG91Owor6Z6FPk91Owor6Z6LPkFpOwor6Z6NPkFuOwor6Z6PPkt5b3U7Civpnpg+U291Owor6Z6cPlRvdTsKK+meoD5LaWt1Owor6Z6jPkp1dTsKK+mepj5TaHV1Owor6Z6oPkthdHN1Owor6Z6rPktpa3U7Civpnq0+SGVuOwor6Z6zPlRvdTsKK+metD5GdWt1Owor6Z+DPkRhdHN1Owor6Z+GPlNlbjsKK+mfiD5CZXRzdTsKK+mfiz5JOwor6Z+TPkthbjsKK+mfnD5Ub3U7Civpn60+S3l1dTsKK+mfrj5LeW91Owor6Z+yPlNlaTsKK+mfsz5PbjsKK+mftT5JbjsKK+mftj5TaG91Owor6Z+7PkluOwor6Z+/Pkt5b3U7CivpoIE+S2V0c3U7CivpoII+Q2hvdTsKK+mggz5LZWk7CivpoIU+S291Owor6aCGPkp1bjsKK+mgiD5TaHU7CivpoIw+U2hvdTsKK+mgjz5Lb3U7CivpoJA+WW87CivpoJE+R2FuOwor6aCSPkhhbjsKK+mgkz5Ub247CivpoJc+SGE7CivpoJg+UnlvdTsKK+mgmj5LZWk7CivpoKE+S2l0c3U7CivpoKQ+STsKK+mgrD5LeW91Owor6aCtPlRvdTsKK+mgtD5FaTsKK+mgtz5LYW47CivpoLg+S2VpOwor6aC7PkhpbjsKK+mgvD5SYWk7CivpoL0+VGFpOwor6aGGPkthOwor6aGLPlNhaTsKK+mhjD5EYWk7CivpoY0+R2FrdTsKK+mhjj5HYWt1Owor6aGPPkdhbjsKK+mhlD5HYW47CivpoZU+S2VuOwor6aGYPkdhbjsKK+mhmz5UZW47CivpoZ4+UnVpOwor6aGnPktvOwor6aGrPlNlbjsKK+mhrz5LZW47CivpobA+SGluOwor6aGxPlJvOwor6aGzPlNob3U7CivpobQ+S2FuOwor6aKoPkZ1dTsKK+mirz5TYXRzdTsKK+misT5UYWk7CivporY+S3U7Civpo4M+SHlvdTsKK+mjhD5IeW91Owor6aOGPkh5b3U7Civpo5s+SGk7Civpo5w+SG9uOwor6aOfPlNob2t1Owor6aOiPktpOwor6aOpPlRvbjsKK+mjqz5ZbzsKK+mjrT5DaG9rdTsKK+mjrj5JbjsKK+mjrz5IYW47Civpo7I+SW47Civpo7Q+STsKK+mjvD5TaGk7Civpo70+SG91Owor6aO+PlNob2t1Owor6aSDPktvdTsKK+mkhT5IZWk7CivppIk+U2hvdTsKK+mkij5Zb3U7CivppIw+Smk7CivppJA+U2FuOwor6aSSPkRhaTsKK+mkkz5HYTsKK+mklD5IbzsKK+mkmD5ZbzsKK+mknT5TaG9rdTsKK+mknj5TZW47CivppKA+SGVpOwor6aShPkthbjsKK+mkpD5UYW47CivppKg+S2FuOwor6aSsPktvOwor6aSuPlRldHN1Owor6aS9PktpOwor6aS+PlJ5dXU7CivppYI+VW47CivppYU+TWFuOwor6aWJPktpbjsKK+mliz5LaTsKK+mljD5TZW47CivppZA+STsKK+mlkT5LaTsKK+mlkj5Kb3U7CivppZU+VG91Owor6aWXPkt5b3U7CivpppY+U2h1Owor6aaXPktpOwor6aaYPktha3U7Civpppk+S291Owor6aalPkZ1a3U7Civppqg+S2VpOwor6aasPkJhOwor6aatPkd5bzsKK+mmrj5IeW91Owor6aazPkNoaTsKK+mmtD5TaHVuOwor6aa8PkJ1bjsKK+mngT5CYWt1Owor6aeEPlRhOwor6aeFPkVraTsKK+mnhj5LdTsKK+mniD5LdTsKK+mnkD5DaHV1Owor6aeRPkRvOwor6aeSPkt1Owor6aeVPkdhOwor6aeYPlRhaTsKK+mnmz5TaGk7Civpp50+VGE7Civpp58+U2hpOwor6aeiPkhlbjsKK+mnrT5LYWk7Civpp64+SGFrdTsKK+mnsT5SYWt1Owor6ae4PlNoaW47Civpp7s+S2FuOwor6ae/PlNodW47CivpqIE+VGVpOwor6aiFPlN1aTsKK+mojj5LaTsKK+mojz5LaTsKK+mokj5Tb3U7CivpqJM+S2VuOwor6aiZPkhlbjsKK+moqD5UYW47CivpqKs+S2VuOwor6aiwPlRvdTsKK+motz5Tb3U7CivpqL4+UmE7CivpqYA+QmFrdTsKK+mpgj5TYW47CivpqYM+SHlvdTsKK+mphT5LdTsKK+mpjT5HeW91Owor6amVPkt5b3U7CivpqZc+S2VuOwor6amaPkt5b3U7CivpqZs+RWtpOwor6amfPlNodXU7CivpqaI+UnlvOwor6amkPkpvdTsKK+mppT5LaTsKK+mpqT5LYW47Civpqao+Umk7Civpqas+SHl1dTsKK+mqqD5Lb3RzdTsKK+mqrT5LYW47CivpqrA+VG91Owor6aq4PkthaTsKK+mqvD5LYWt1Owor6auAPkhpOwor6auEPlp1aTsKK+mrjz5Sb3U7Civpq5E+VG9rdTsKK+mrkz5adWk7Civpq5Q+VGVpOwor6auYPktvdTsKK+mrnj5Tb3U7Civpq58+SHlvdTsKK+mroj5UZWk7Civpq6M+SG91Owor6aumPkJvdTsKK+mrqj5IYXRzdTsKK+mrqz5DaG91Owor6autPlNoaTsKK+mrrj5IYXRzdTsKK+mrrz5aZW47Civpq7E+SG91Owor6au0PkZ1dHN1Owor6au3Pkt5b2t1Owor6au7PktlaTsKK+mshj5TaG91Owor6ayYPkJhbjsKK+msmj5TaHU7CivprJ8+S2FuOwor6ayiPkhpbjsKK+msoz5SeW91Owor6aylPlRvdTsKK+mspz5Ub3U7CivprKg+S291Owor6aypPkdla2k7CivprKo+VG91Owor6ayuPkt5dXU7CivprK8+Q2hvdTsKK+mssT5VdHN1Owor6ayyPlJla2k7CivprLs+U2h1a3U7CivprLw+S2k7CivprYE+S2FpOwor6a2CPktvbjsKK+mtgz5CYXRzdTsKK+mthD5IYWt1Owor6a2FPk1pOwor6a2NPkJvdTsKK+mtjj5SeW91Owor6a2PPkdpOwor6a2RPkNoaTsKK+mtlD5NYTsKK+mtmD5FbjsKK+mtmj5HeW87Civpra8+Um87CivprbQ+SG91Owor6a6DPkh5b3U7Civpro4+TmVuOwor6a6RPkhvdTsKK+mukj5GdTsKK+mukz5TYTsKK+munz5BbjsKK+muoD5HYWk7Civprqg+U2hpOwor6a6qPkk7Civprqs+S291Owor6a6tPktlaTsKK+murj5TZW47Civprrk+U291Owor6a+APktvbjsKK+mvhj5IbzsKK+mviT5SaTsKK+mvij5TYTsKK+mvlD5TaGk7Civpr5Y+U2VpOwor6a+bPkNob3U7Civpr6E+SGk7Civpr6I+R2VpOwor6a+jPkVraTsKK+mvpD5Lb247Civpr6g+R2VpOwor6a+wPk5lbjsKK+mvtT5Tb3U7CivpsIQ+STsKK+mwhj5TaHVuOwor6bCIPkNob3U7CivpsIk+S291Owor6bCKPlJlbjsKK+mwjD5TaHV1Owor6bCNPlNodXU7CivpsJA+R2FrdTsKK+mwkj5GdWt1Owor6bCTPlNhaTsKK+mwlD5LYW47CivpsJU+S2E7CivpsJs+T247CivpsKE+Unl1dTsKK+mwpD5TaGk7CivpsKU+S2FuOwor6bCtPktpOwor6bCuPk9uOwor6bCyPkdvdTsKK+mwuT5LZW47CivpsLo+U291Owor6bC7PkJhbjsKK+mwvj5IeW91Owor6bGGPlNob3U7CivpsYc+S291Owor6bGIPlNldHN1Owor6bGSPlNvbjsKK+mxlz5SaW47CivpsaA+S2FpOwor6bGnPlJlaTsKK+mxtj5TaG91Owor6bG4PlJvOwor6bOlPkNob3U7Civps6c+RnU7Civps6k+S3l1dTsKK+mzqz5HYW47Civps6w+RnU7Civps7M+SG91Owor6bO0Pk1laTsKK+mztj5FbjsKK+m0gz5LZXRzdTsKK+m0hj5DaGluOwor6bSHPkhvdTsKK+m0iD5HYW47CivptIk+QTsKK+m0jj5PdTsKK+m0kj5SZWk7CivptJU+VGE7CivptJs+RW47CivptJ8+U2hpOwor6bSjPktvOwor6bSmPllvdTsKK+m0qD5PdTsKK+m0qj5JdHN1Owor6bSsPk91Owor6bS7PktvdTsKK+m0vj5Cb3U7CivptL8+S291Owor6bWBPktvdTsKK+m1hD5TaGk7CivptZA+QnU7CivptZE+S2VuOwor6bWZPkdla2k7CivptZw+VGVpOwor6bWdPkdhOwor6bWePkdhOwor6bWgPktva3U7CivptaE+QnU7Civptaw+SG91Owor6bWvPkhpOwor6bWyPkpha3U7Civptbo+WWE7Civptoc+VG91Owor6baJPlNodW47Civpto8+S2VpOwor6baaPkdha3U7CivptqQ+S29uOwor6bapPkJva3U7Civptq8+T3U7CivptrI+T3U7CivptrQ+S2FrdTsKK+m2uD5KYWt1Owor6ba6PlNla2k7Civptrs+S290c3U7Civpt4E+R2VraTsKK+m3gj5Zb3U7Civpt4Q+S2VpOwor6beGPlRlbjsKK+m3jz5UZW47Civpt5M+U2hhOwor6beZPlNoaTsKK+m3pj5TaG91Owor6betPkJhbjsKK+m3rz5SeW91Owor6beyPlNodXU7Civpt7g+SXRzdTsKK+m3uT5Zb3U7Civpt7o+Um87Civpt70+S2FrdTsKK+m4mj5PdTsKK+m4mz5LYW47CivpuJ4+UmFuOwor6bm1PlJvOwor6bm4PktlbjsKK+m5uT5LYW47Civpub0+RW47Civpub8+Um9rdTsKK+m6gT5TbzsKK+m6iD5TaHU7Civpuos+Qmk7Civpuow+R3U7CivpupE+R2VpOwor6bqSPktpOwor6bqTPlJva3U7CivpupU+S2luOwor6bqXPlJlaTsKK+m6nT5TaGE7Civpup8+UmluOwor6bqlPkJha3U7CivpuqY+QmFrdTsKK+m6qT5GdTsKK+m6qj5NZW47Civpuq0+SG91Owor6bq4PkZ1Owor6bq5Pktpa3U7Civpuro+TWVuOwor6bq7Pk1hOwor6bq8Pk1hOwor6bq+PktpOwor6bq/PlJvOwor6buEPktvdTsKK+m7jD5Lb3U7Civpu40+U2hvOwor6buOPlJlaTsKK+m7jz5OZW47Civpu5A+Q2hpOwor6buSPktva3U7Civpu5Q+S2VuOwor6buYPk1va3U7Civpu5k+TW9rdTsKK+m7mz5UYWk7Civpu5w+Q2h1dHN1Owor6budPll1dTsKK+m7nj5UZW47Civpu6A+S2F0c3U7Civpu6U+R2VpOwor6buoPlRvdTsKK+m7rz5BbjsKK+m7tD5CYWk7Civpu7Y+RW47Civpu7c+VG9rdTsKK+m7uT5DaGk7Civpu7s+RnV0c3U7Civpu7w+SG87Civpu70+Qm91Owor6byHPkdvdTsKK+m8iD5CZXRzdTsKK+m8jj5UZWk7CivpvJM+S287CivpvJU+VG91Owor6bygPlNvOwor6byhPlNobzsKK+m8rD5ZdXU7CivpvLs+Qmk7CivpvL4+S2FuOwor6b2KPlNlaTsKK+m9iz5TYWk7CivpvY4+U2VpOwor6b2PPlNlaTsKK+m9kj5TaGk7CivpvZQ+U2hpbjsKK+m9nz5TbzsKK+m9oD5DaG91Owor6b2hPlJlaTsKK+m9oj5SZWk7CivpvaM+U2h1dHN1Owor6b2mPkdpbjsKK+m9pz5LZXRzdTsKK+m9qj5Tb2t1Owor6b2sPkd5bzsKK+m9sj5LdTsKK+m9tj5HYWt1Owor6b23PkFrdTsKK+m+jT5SeXV1Owor6b6VPkdhbjsKK+m+nD5LaTsKK+m+nT5TaHV1Owor6b6gPllha3U7CisKKyMgZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvdGhhaV90ZXN0LnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvZGVtby90cmFuc2xpdC90aGFpX3Rlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjZhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L2RlbW8vdHJhbnNsaXQvdGhhaV90ZXN0LnR4dApAQCAtMCwwICsxLDUxIEBACivvu79AVVBQRVJGSUxURVJACitVbmljb2RlIOC4hOC4t+C4reC4reC4sOC5hOC4oz8KK1VuaWNvZGUg4LiB4Liz4Lir4LiZ4LiU4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LmA4LiJ4Lie4Liy4Liw4Liq4Liz4Lir4Lij4Lix4Lia4LiX4Li44LiB4Lit4Lix4LiB4LiC4Lij4LiwCivguYLguJTguKLguYTguKHguYjguKrguJnguYPguIjguKfguYjguLLguYDguJvguYfguJnguYHguJ7guKXguYfguJXguJ/guK3guKPguYzguKHguYPguJQKK+C5hOC4oeC5iOC4guC4tuC5ieC4meC4geC4seC4muC4p+C5iOC4suC4iOC4sOC5gOC4m+C5h+C4meC5guC4m+C4o+C5geC4geC4o+C4oeC5g+C4lAor4LmB4Lil4Liw4LmE4Lih4LmI4Lin4LmI4Liy4LiI4Liw4LmA4Lib4LmH4LiZ4Lig4Liy4Lip4Liy4LmD4LiUCisKK+C5guC4lOC4ouC4nuC4t+C5ieC4meC4kOC4suC4meC5geC4peC5ieC4pywg4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmM4LiI4Liw4LmA4LiB4Li14LmI4Lii4Lin4LiC4LmJ4Lit4LiH4LiB4Lix4Lia4LmA4Lij4Li34LmI4Lit4LiH4LiC4Lit4LiH4LiV4Lix4Lin4LmA4Lil4LiCLiDguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYzguIjguLHguJTguYDguIHguYfguJrguJXguLHguKfguK3guLHguIHguKnguKPguYHguKXguLDguK3guLHguIHguILguKPguLDguK3guLfguYjguJnguYYg4LmC4LiU4Lii4LiB4Liy4Lij4LiB4Liz4Lir4LiZ4LiU4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LmD4Lir4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4LiV4LmI4Lil4Liw4LiV4Lix4LinLiDguIHguYjguK3guJnguKvguJnguYnguLLguJfguLXguYjguYogVW5pY29kZSDguIjguLDguJbguLnguIHguKrguKPguYnguLLguIfguILguLbguYnguJksIOC5hOC4lOC5ieC4oeC4teC4o+C4sOC4muC4miBlbmNvZGluZyDguK3guKLguLnguYjguKvguKXguLLguKLguKPguYnguK3guKLguKPguLDguJrguJrguKrguLPguKvguKPguLHguJrguIHguLLguKPguIHguLPguKvguJnguJTguKvguKHguLLguKLguYDguKXguILguYDguKvguKXguYjguLLguJnguLXguYkuIOC5hOC4oeC5iOC4oeC4tSBlbmNvZGluZyDguYPguJTguJfguLXguYjguKHguLXguIjguLPguJnguKfguJnguJXguLHguKfguK3guLHguIHguILguKPguLDguKHguLLguIHguYDguJ7guLXguKLguIfguJ7guK06IOC4ouC4geC4leC4seC4p+C4reC4ouC5iOC4suC4h+C5gOC4iuC5iOC4mSwg4LmA4LiJ4Lie4Liy4Liw4LmD4LiZ4LiB4Lil4Li44LmI4Lih4Liq4Lir4Lig4Liy4Lie4Lii4Li44LmC4Lij4Lib4LmA4Lie4Li14Lii4LiH4LmB4Lir4LmI4LiH4LmA4LiU4Li14Lii4LinIOC4geC5h+C4leC5ieC4reC4h+C4geC4suC4o+C4q+C4peC4suC4oiBlbmNvZGluZyDguYPguJnguIHguLLguKPguITguKPguK3guJrguITguKXguLjguKHguJfguLjguIHguKDguLLguKnguLLguYPguJnguIHguKXguLjguYjguKEuIOC4q+C4o+C4t+C4reC5geC4oeC5ieC5geC4leC5iOC5g+C4meC4oOC4suC4qeC4suC5gOC4lOC4teC5iOC4ouC4pyDguYDguIrguYjguJkg4Lig4Liy4Lip4Liy4Lit4Lix4LiH4LiB4Lik4LipIOC4geC5h+C5hOC4oeC5iOC4oeC4tSBlbmNvZGluZyDguYPguJTguJfguLXguYjguYDguJ7guLXguKLguIfguJ7guK3guKrguLPguKvguKPguLHguJrguJfguLjguIHguJXguLHguKfguK3guLHguIHguKnguKMsIOC5gOC4hOC4o+C4t+C5iOC4reC4h+C4q+C4oeC4suC4ouC4p+C4o+C4o+C4hOC4leC4reC4mSDguYHguKXguLDguKrguLHguI3guKXguLHguIHguKnguJPguYzguJfguLLguIfguYDguJfguITguJnguLTguITguJfguLXguYjguYPguIrguYnguIHguLHguJnguK3guKLguLnguYjguJfguLHguYjguKfguYTguJsuIAorCivguKPguLDguJrguJogZW5jb2Rpbmcg4LmA4Lir4Lil4LmI4Liy4LiZ4Li14LmJ4Lii4Lix4LiH4LiC4Lix4LiU4LmB4Lii4LmJ4LiH4LiL4Li24LmI4LiH4LiB4Lix4LiZ4LmB4Lil4Liw4LiB4Lix4LiZLiDguJnguLHguYjguJnguIHguYfguITguLfguK0sIOC5g+C4meC4quC4reC4hyBlbmNvZGluZyDguKrguLLguKHguLLguKPguJbguYPguIrguYnguKvguKHguLLguKLguYDguKXguILguYDguJTguLXguKLguKfguIHguLHguJnguKrguLPguKvguKPguLHguJrguJXguLHguKfguK3guLHguIHguILguKPguLDguKrguK3guIfguJXguLHguKfguJfguLXguYjguYHguJXguIHguJXguYjguLLguIfguIHguLHguJks4Lir4Lij4Li34Lit4LmD4LiK4LmJ4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LiV4LmI4Liy4LiH4LiB4Lix4LiZ4Liq4Liz4Lir4Lij4Lix4Lia4Lit4Lix4LiB4LiC4Lij4Liw4LiV4Lix4Lin4LmA4LiU4Li14Lii4Lin4LiB4Lix4LiZLiDguYPguJnguKPguLDguJrguJrguITguK3guKHguJ7guLTguKfguYDguJXguK3guKPguYwgKOC5guC4lOC4ouC5gOC4ieC4nuC4suC4sOC5gOC4i+C4tOC4o+C5jOC4n+C5gOC4p+C4reC4o+C5jCkg4LiV4LmJ4Lit4LiH4Lih4Li14LiB4Liy4Lij4Liq4LiZ4Lix4Lia4Liq4LiZ4Li44LiZ4Lir4Lil4Liy4LiiIGVuY29kaW5nOyDguYHguKXguLDguYDguKHguLfguYjguK3guILguYnguK3guKHguLnguKXguJfguLXguYjguJzguYjguLLguJnguYTguJvguKHguLLguKPguLDguKvguKfguYjguLLguIfguIHguLLguKPguYDguILguYnguLLguKPguKvguLHguKrguKvguKPguLfguK3guYHguJ7guKXguYfguJXguJ/guK3guKPguYzguKHguJfguLXguYjguJXguYjguLLguIfguIHguLHguJksIOC4guC5ieC4reC4oeC4ueC4peC4meC4seC5ieC4meC4iOC4sOC5gOC4quC4teC5iOC4ouC4h+C4leC5iOC4reC4geC4suC4o+C4nOC4tOC4lOC4nuC4peC4suC4lOC5gOC4quC4teC4ouC4q+C4suC4oi4KKworVW5pY29kZSDguIjguLDguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguKrguLTguYjguIfguYDguKvguKXguYjguLLguJnguLHguYnguJnguJfguLHguYnguIfguKvguKHguJQhCitVbmljb2RlIOC4geC4s+C4q+C4meC4lOC4q+C4oeC4suC4ouC5gOC4peC4guC5gOC4ieC4nuC4suC4sOC4quC4s+C4q+C4o+C4seC4muC5geC4leC5iOC4peC4sOC4reC4seC4geC4guC4o+C4sCwg4LmC4LiU4Lii4LmE4Lih4LmI4Liq4LiZ4LmD4LiI4Lin4LmI4Liy4LmA4Lib4LmH4LiZ4LmB4Lie4Lil4LmH4LiV4Lif4Lit4Lij4LmM4Lih4LmD4LiULCDguYTguKHguYjguILguLbguYnguJnguIHguLHguJrguKfguYjguLLguIjguLDguYDguJvguYfguJnguYLguJvguKPguYHguIHguKPguKHguYPguJTguYHguKXguLDguYTguKHguYjguKfguYjguLLguIjguLDguYDguJvguYfguJnguKDguLLguKnguLLguYPguJQuIOC4oeC4suC4leC4o+C4kOC4suC4mSBVbmljb2RlIOC5hOC4lOC5ieC4luC4ueC4geC4meC4s+C5hOC4m+C5g+C4iuC5ieC5guC4lOC4ouC4nOC4ueC5ieC4meC4s+C5g+C4meC4reC4uOC4leC4quC4suC4q+C4geC4o+C4o+C4oSDguYDguIrguYjguJkgQXBwbGUsIEhQLCBJQk0sIEp1c3RTeXN0ZW0sIE1pY3Jvc29mdCwgT3JhY2xlLCBTQVAsIFN1biwgU3liYXNlLCBVbmlzeXMg4LmB4Lil4Liw4Lit4Li34LmI4LiZ4LmGIOC4reC4teC4geC4oeC4suC4gS4gVW5pY29kZSDguYDguJvguYfguJnguKrguLTguYjguIfguJfguLXguYjguIjguLPguYDguJvguYfguJnguKrguLPguKvguKPguLHguJrguKHguLLguJXguKPguJDguLLguJnguYPguKvguKHguYjguYYg4LmA4LiK4LmI4LiZIFhNTCwgSmF2YSwgRUNNQVNjcmlwdCAoSmF2YVNjcmlwdCksIExEQVAsIENPUkJBIDMuMCwgV01MIOC4r+C4peC4ry4sIOC5geC4peC4sOC5gOC4m+C5h+C4meC5geC4meC4p+C4l+C4suC4h+C4reC4ouC5iOC4suC4h+C5gOC4m+C5h+C4meC4l+C4suC4h+C4geC4suC4o+C5g+C4meC4geC4suC4o+C4l+C4syBJU08vSUVDIDEwNjQ2LiBVbmljb2RlIOC5hOC4lOC5ieC4o+C4seC4muC4geC4suC4o+C4quC4meC4seC4muC4quC4meC4uOC4meC5g+C4meC4o+C4sOC4muC4muC4m+C4j+C4tOC4muC4seC4leC4tOC4geC4suC4o+C4iOC4s+C4meC4p+C4meC4oeC4suC4gSwg4Lia4Lij4Liy4Lin4LmA4LiL4Lit4Lij4LmM4LmD4Lir4Lih4LmI4LmGIOC4l+C4geC4leC4seC4pywg4LmB4Lil4Liw4Lic4Lil4Li04LiV4Lig4Lix4LiT4LiR4LmM4Lit4Li34LmI4LiZ4LmGIOC4reC4teC4geC4oeC4suC4gS4g4LiB4Liy4Lij4LmA4LiB4Li04LiU4LiC4Li24LmJ4LiZ4LiC4Lit4LiHIFVuaWNvZGUgU3RhbmRhcmQg4LmB4Lil4Liw4LiX4Li54Lil4Liq4LmM4LiV4LmI4Liy4LiH4LmGIOC4l+C4teC5iOC4oeC4teC5g+C4meC4geC4suC4o+C4quC4meC4seC4muC4quC4meC4uOC4mSBVbmljb2RlLCDguYDguJvguYfguJnguKvguJnguLbguYjguIfguYPguJnguYHguJnguKfguYLguJnguYnguKHguJfguLLguIfguYDguJfguITguYLguJnguYLguKXguKLguLXguIvguK3guJ/guJXguYzguYHguKfguKPguYzguKPguLDguJTguLHguJrguYLguKXguIHguJfguLXguYjguKHguLXguITguKfguLLguKHguKrguLPguITguLHguI3guJfguLXguYjguKrguLjguJQuCisKK+C4geC4suC4o+C4o+C4p+C4oSBVbmljb2RlIOC5gOC4guC5ieC4suC5hOC4m+C5g+C4meC4o+C4sOC4muC4muC5hOC4hOC4peC5gOC4reC5h+C4meC4leC5jC3guYDguIvguLTguKPguYzguJ/guYDguKfguK3guKPguYwg4Lir4Lij4Li34Lit4LmB4Lit4LmH4Lie4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LmB4Lia4LiaIG11bHRpLXRpZXJlZCDguYHguKXguLDguYDguKfguYfguJrguYTguIvguJXguYwg4LiI4Liw4LiX4Liz4LmD4Lir4LmJ4LmA4LiB4Li04LiU4LiB4Liy4Lij4Lib4Lij4Liw4Lir4Lii4Lix4LiU4LiE4LmI4Liy4LmD4LiK4LmJ4LiI4LmI4Liy4Lii4Lih4Liy4LiB4LiB4Lin4LmI4Liy4LiB4Liy4Lij4LmD4LiK4LmJ4LiK4Li44LiU4Lit4Lix4LiB4LiC4Lij4Liw4LmB4Lia4Lia4LmA4LiU4Li04LihLiBVbmljb2RlIOC4l+C4s+C5g+C4q+C5ieC4nOC4peC4tOC4leC4oOC4seC4k+C4keC5jOC4i+C4reC4n+C4leC5jOC5geC4p+C4o+C5jOC4q+C4meC4tuC5iOC4h+C5gOC4lOC4teC4ouC4pyDguKvguKPguLfguK3guYDguKfguYfguJrguYTguIvguJXguYzguYHguKvguYjguIfguYDguJTguLXguKLguKcg4Lij4Lit4LiH4Lij4Lix4Lia4LmE4LiU4LmJ4Lir4Lil4Liy4Lii4LmB4Lie4Lil4LmH4LiV4Lif4Lit4Lij4LmM4LihLCDguKvguKXguLLguKLguKDguLLguKnguLLguYHguKXguLDguKvguKXguLLguKLguJvguKPguLDguYDguJfguKjguYLguJTguKLguYTguKHguYjguJXguYnguK3guIfguJfguLPguIHguLLguKPguKPguLfguYnguK3guJvguKPguLHguJrguKPguLDguJrguJouIFVuaWNvZGUg4Lii4Lix4LiH4LiX4Liz4LmD4Lir4LmJ4LiC4LmJ4Lit4Lih4Li54Lil4Liq4Liy4Lih4Liy4Lij4LiW4LmA4LiE4Lil4Li34LmI4Lit4LiZ4Lii4LmJ4Liy4Lii4LmE4Lib4Lih4Liy4LmD4LiZ4Lir4Lil4Liy4Lii4LmGIOC4o+C4sOC4muC4muC5guC4lOC4ouC5hOC4oeC5iOC5gOC4geC4tOC4lOC4hOC4p+C4suC4oeC4nOC4tOC4lOC4nuC4peC4suC4lOC5gOC4quC4teC4ouC4q+C4suC4oi4KKwor4LmA4LiB4Li14LmI4Lii4Lin4LiB4Lix4LiaIFVuaWNvZGUgQ29uc29ydGl1bQorVW5pY29kZSBDb25zb3J0aXVtIOC5gOC4m+C5h+C4meC4reC4h+C4hOC5jOC4geC4o+C5hOC4oeC5iOC5geC4quC4p+C4h+C4q+C4suC4geC4s+C5hOC4o+C4l+C4teC5iOC4geC5iOC4reC4leC4seC5ieC4h+C4guC4tuC5ieC4meC5gOC4nuC4t+C5iOC4reC4nuC4seC4kuC4meC4siwg4LiC4Lii4Liy4Lii4LmB4Lil4Liw4Liq4LmI4LiH4LmA4Liq4Lij4Li04Lih4LiB4Liy4Lij4LmD4LiK4LmJIFVuaWNvZGUgU3RhbmRhcmQsIOC4i+C4tuC5iOC4h+C4geC4s+C4q+C4meC4lOC4o+C4ueC4m+C5geC4muC4muC4geC4suC4o+C5geC4l+C4meC4hOC5iOC4suC4guC4reC4h+C4guC5ieC4reC4hOC4p+C4suC4oeC5g+C4meC4nOC4peC4tOC4leC4oOC4seC4k+C4keC5jOC4i+C4reC4n+C4leC5jOC5geC4p+C4o+C5jOC5geC4peC4sOC4oeC4suC4leC4o+C4kOC4suC4meC5g+C4q+C4oeC5iOC5hi4g4Liq4Lih4Liy4LiK4Li04LiB4LiC4Lit4LiH4Liq4Lih4Liy4LiE4Lih4LmA4Lib4LmH4LiZ4LiV4Lix4Lin4LmB4LiX4LiZ4LiI4Liy4LiB4Lia4Lij4Li04Lip4Lix4LiX4LmB4Lil4Liw4Lit4LiH4LiE4LmM4LiB4Lij4LmD4LiZ4Lit4Li44LiV4Liq4Liy4Lir4LiB4Lij4Lij4Lih4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmM4LmB4Lil4Liw4LiB4Liy4Lij4Lib4Lij4Liw4Lih4Lin4Lil4Lic4Lil4Liq4Liy4Lij4Liq4LiZ4LmA4LiX4LioLiDguKrguKHguLLguITguKHguYTguJTguYnguKPguLHguJrguIHguLLguKPguKrguJnguLHguJrguKrguJnguLjguJnguJfguLLguIfguIHguLLguKPguYDguIfguLTguJnguJzguYjguLLguJnguJfguLLguIfguITguYjguLLguJjguKPguKPguKHguYDguJnguLXguKLguKHguILguK3guIfguIHguLLguKPguYDguJvguYfguJnguKrguKHguLLguIrguLTguIHguYDguJfguYjguLLguJnguLHguYnguJkuIOC4quC4oeC4suC4iuC4tOC4geC4oOC4suC4nuC4guC4reC4hyBVbmljb2RlIENvbnNvcnRpdW0g4LmA4Lib4Li04LiU4LiB4Lin4LmJ4Liy4LiH4Liq4Liz4Lir4Lij4Lix4Lia4Lit4LiH4LiE4LmM4LiB4Lij4Lir4Lij4Li34Lit4Lia4Li44LiE4LiE4Lil4LmD4LiU4LmGIOC5g+C4meC5guC4peC4geC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4o+C4quC4meC4seC4muC4quC4meC4uOC4mSBVbmljb2RlIFN0YW5kYXJkIOC5geC4peC4sOC4iuC5iOC4p+C4ouC5gOC4q+C4peC4t+C4reC4geC4suC4o+C4guC4ouC4suC4ouC4leC4seC4p+C5geC4peC4sOC4geC4suC4o+C4meC4syBVbmljb2RlIOC5hOC4m+C5g+C4iuC5ieC4h+C4suC4mS4gCisKK+C4quC4s+C4q+C4o+C4seC4muC4guC5ieC4reC4oeC4ueC4peC5gOC4nuC4tOC5iOC4oeC5gOC4leC4tOC4oSwg4LmD4Lir4LmJ4LiU4Li54LiX4Li14LmIIEdsb3NzYXJ5LCBTYW1wbGUgVW5pY29kZS1FbmFibGVkIFByb2R1Y3RzLCBUZWNobmljYWwgSW50cm9kdWN0aW9uIOC5geC4peC4sCBVc2VmdWwgUmVzb3VyY2VzLgorQFRJVExFQ0FTRUAKK+C4geC5iuC4geC5gOC4ruC4hyDguYHguIvguYjguYHguJXguYkKK+C4geC4iuC4geC4oyDguKjguKPguLLguJfguJjguJfguLHguJUKK+C4geC4leC4tOC4geC4siDguK3guLHguIfguITguKrguLjguKDguJMKK+C4geC4meC4gSDguJjguKPguKPguKHguJvguKPguLDguJfguLXguJsKK+C4geC4meC4gSDguKfguIfguKjguYzguJfguK3guIfguKjguKPguLUKK+C4geC4meC4geC4geC4oyDguIrguYnguLLguIfguYDguKLguYfguJnguInguYjguLMKK+C4geC4meC4geC4ieC4seC4leC4o+C5jCDguJbguLLguKfguKPguJnguLHguJnguJfguYwKK+C4geC4meC4geC4meC4p+C4pSDguYLguJvguKnguKLguLDguJnguLHguJnguJfguJnguYwKK+C4geC4meC4geC4nuC4oyDguITguKHguITguLLguKIKK+C4geC4meC4geC4nuC4oyDguJXguLXguKPguYDguKXguLTguKjguJ7guLLguJnguLTguIoKK+C4geC4meC4geC4nuC4oyDguJ7guLHguJnguJfguKMKK+C4geC4meC4geC4nuC4oyDguKjguKPguLXguJrguLHguJPguJHguLTguJUKK+C4geC4meC4geC4nuC4oyDguK3guJXguLTguKfguKPguKPguJPguLLguJ7guLHguJLguJnguYwKK+C4geC4meC4geC4nuC4o+C4o+C4kyDguKjguKPguLXguKfguJnguLLguKDguLTguKPguKHguKLguYwKK+C4geC4meC4geC4o+C4seC4leC4meC5jCDguYDguIHguLXguKLguKPguJXguLTguKLguLTguYjguIfguK3guLHguIfguKjguLjguKXguLUKK+C4geC4meC4geC4o+C4seC4leC4meC5jCDguKrguLjguJjguKPguKPguKHguJ7guLTguJfguLHguIHguKnguYwKK+C4geC4meC4geC4p+C4o+C4o+C4kyDguITguIfguITguLLguJvguKPguLDguYDguKrguKPguLTguJAKK+C4geC4meC4geC4p+C4o+C4o+C4kyDguYHguIvguYjguYDguJXguLXguKLguKcKK+C4geC4meC4geC4p+C4o+C4o+C4kyDguJrguLjguI3guJvguKPguLDguYDguKrguKPguLTguJAKK+C4geC4meC4geC4p+C4o+C4o+C4kyDguKPguLHguIHguJfguKPguLHguJ7guKLguYwKK+C4geC4meC4geC4p+C4o+C4o+C4kyDguKrguLHguIjguIjguJ7guIfguKnguYwKK+C4geC4meC4geC4p+C4o+C4o+C4kyDguK3guLjguYnguKLguKfguIfguKjguYzguYTguJ7guKjguLLguKUKK+C4geC4meC4geC4qOC4seC4geC4lOC4tOC5jCDguKLguLTguYjguIfguKLguIcKK+C4geC4meC4geC5geC4geC5ieC4pyDguIHguKPguKrguKHguLTguJUKK+C4geC4meC4tOC4qeC4kOC4siDguJfguJnguLjguJbguJnguK3guKHguKPguLLguKnguI7guKPguYwKK+C4geC4meC4tOC4qeC4kOC4siDguKvguKfguLHguIfguKfguLTguJrguLnguKXguKLguYzguIHguLTguIgKK+C4geC4oeC4pSDguIHguLLguI3guIjguJnguYLguKPguIjguJnguYwKK+C4geC4oeC4pSDguITguLHguKHguKDguLXguKPguYwKK+C4geC4oeC4pSDguYDguIjguJXguJnguYzguKHguIfguITguKXguKPguLHguJXguJnguYwKK+C4geC4oeC4pSDguIrguLnguJXguKPguLDguIHguLnguKXguJjguKPguKPguKEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvTW9kdWxlVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L01vZHVsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjgxM2JiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L01vZHVsZVRlc3QuamF2YQpAQCAtMCwwICsxLDI0OCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9Nb2R1bGVUZXN0LmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8zMSAwNDo1NToxMCAkCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdDsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0RGF0YU1vZHVsZS5UZXN0RGF0YTsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0RGF0YU1vZHVsZS5EYXRhTWFwOworCisvKioKKyAqIEEgY29udmVuaWVuY2UgZXh0ZW5zaW9uIG9mIFRlc3RGbXdrIGZvciB1c2UgYnkgZGF0YSBtb2R1bGUtZHJpdmVuCisgKiB0ZXN0cy4gIFRlc3RzIGNhbiBpbXBsZW1lbnQgdGhpcyBpZiB0aGV5IG1ha2UgZXh0ZW5zaXZlIHVzZSBvZgorICogaW5mb3JtYXRpb24gaW4gYSBUZXN0RGF0YU1vZHVsZS4gIFRoZSBtb2R1bGUgc2hvdWxkIGJlIG9wZW5hYmxlCisgKiB1c2luZyBUZXN0RGF0YU1vZHVsZS5vcGVuKCkgcGFzc2luZyBpbiB0aGUgY2xhc3MgbmFtZSBvZiB0aGlzIHRlc3QKKyAqICsgIkRhdGEiLiAgRm9yIGV4YW1wbGUsIGEgdGVzdCBuYW1lZCBNeVRlc3Qgd291bGQgaGF2ZSBhIG1vZHVsZQorICogbmFtZWQgTXlUZXN0RGF0YS4gIEVhY2ggdGVzdCBtZXRob2Qgc2hvdWxkIGFsc28gaGF2ZSBhCisgKiBjb3JyZXNwb25kaW5nIHRlc3QgZGF0YSBpbiB0aGUgbW9kdWxlIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGUgdGVzdAorICogbWV0aG9kIG5hbWUuCisgKgorICogU3ViY2xhc3NlcyBjYW4gYWxsb3cgZm9yIHRlc3QgbWV0aG9kcyB0aGF0IGRvbid0IHVzZSBkYXRhIGZyb20gdGhlCisgKiBtb2RldWwgYnkgb3ZlcnJpZGluZyB2YWxpZGF0ZU1ldGhvZCB0byByZXR1cm4gdHJ1ZSBmb3IgdGhlc2UKKyAqIG1ldGhvZHMuICBUZXN0cyBhcmUgYWxzbyBmcmVlIHRvIGluc3RhbnRpYXRlIHRoZWlyIG93biBtb2R1bGVzIGFuZAorICogcnVuIGZyb20gdGhlbSwgdGhvdWdoIGNhcmUgc2hvdWxkIGJlIHRha2VuIG5vdCB0byBpbnRlcmZlcmUgd2l0aAorICogdGhlIG1ldGhvZHMgaW4gdGhpcyBjbGFzcy4KKyAqCisgKiBTZWUgTW9kdWxlVGVzdFNhbXBsZSBmb3IgYW4gZXhhbXBsZS4gICovCitwdWJsaWMgY2xhc3MgTW9kdWxlVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKyAgICBwcml2YXRlIFRlc3REYXRhTW9kdWxlIG07CisgICAgcHJpdmF0ZSBUZXN0RGF0YSB0OworICAgIHByaXZhdGUgU3RyaW5nIG1ldGhvZE5hbWU7CisKKyAgICBwcm90ZWN0ZWQgTW9kdWxlVGVzdCgpIHsKKyAgICAgICAgdGhpcyhudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXNzIHRoZSBuYW1lIG9mIGEgcHVibGljIG5vLWFyZyBtZXRob2QgaW4gdGhpcyBjbGFzcyBpZiAKKyAgICAgKiB5b3Ugd2FudCB1c2UgdGhhdCBtZXRob2QgdG8gcnVuIGFsbCB0aGUgdGVzdHMgb2ZmIHRoZQorICAgICAqIGRhdGEsIG90aGVyd2lzZSBwYXNzIG51bGwgZm9yIHRoZSB0eXBpY2FsIHRlc3QgYmVoYXZpb3IuCisgICAgICovCisgICAgcHJvdGVjdGVkIE1vZHVsZVRlc3QoU3RyaW5nIG1ldGhvZE5hbWUpIHsKKyAgICAgICAgdGhpcy5tZXRob2ROYW1lID0gbWV0aG9kTmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdWJjbGFzc2VzIGFjY2VzcyB0aGlzIGFmdGVyIGNhbGxpbmcgbmV4dFNldHRpbmdzIGFuZCBnZXR0aW5nCisgICAgICogYSB0cnVlIHJlc3VsdC4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgRGF0YU1hcCBzZXR0aW5nczsKKworICAgIC8qKgorICAgICAqIFN1YmNsYXNzZXMgYWNjZXNzIHRoaXMgYWZ0ZXIgY2FsbGluZyBuZXh0Q2FzZSBhbmQgZ2V0dGluZyBhCisgICAgICogdHJ1ZSByZXN1bHQuCisgICAgICovCisgICAgcHJvdGVjdGVkIERhdGFNYXAgdGVzdGNhc2U7CisKKyAgICAvKgorICAgICAqIElmIHdlIHdlcmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgbmFtZSBvZiBhIG1ldGhvZCB0byBydW4gdGhlCisgICAgICogZGF0YSBkcml2ZW4gdGVzdHMsIGRyaXZlIHRlc3RzIG9mZiB0aGUgZGF0YSB1c2luZyB0aGF0IG1ldGhvZC4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgTWFwIGdldEF2YWlsYWJsZVRlc3RzKCkgeworICAgICAgICBpZiAobWV0aG9kTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICBMaXN0IGxpc3QgPSBnZXRNb2R1bGVOYW1lcygpOworCisgICAgICAgICAgICBpZiAobGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKGxpc3Quc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBhZGROYW1lZE1ldGhvZFRvTWFwKGxpc3QsIG1ldGhvZE5hbWUsIG1hcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0QXZhaWxhYmxlVGVzdHMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3RGbXdrIGNhbGxzIHRoaXMgYmVmb3JlIHRyeWluZyB0byBydW4gYSBzdWl0ZSBvZiB0ZXN0cy4KKyAgICAgKiBUaGUgdGVzdCBzdWl0ZSBpZiB2YWxpZCBpZiBhIG1vZHVsZSB3aG9zZSBuYW1lIGlzIHRoZSBuYW1lIG9mCisgICAgICogdGhpcyBjbGFzcyArICJEYXRhIiBjYW4gYmUgb3BlbmVkLiAgU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUKKyAgICAgKiB0aGlzIGlmIHRoZXJlIGFyZSBkaWZmZXJlbnQgb3IgYWRkaXRpb25hbCBkYXRhIHJlcXVpcmVkLiAgCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisgICAgICAgIHJldHVybiBvcGVuTW9kdWxlKGdldENsYXNzKCkuZ2V0TmFtZSgpKyJEYXRhIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdEZtd2sgY2FsbHMgdGhpcyBiZWZvcmUgdHJ5aW5nIHRvIGludm9rZSBhIHRlc3QgbWV0aG9kLgorICAgICAqIFRoZSBtZXRob2QgaXMgdmFsaWQgaWYgdGhlcmUgaXMgdGVzdCBkYXRhIHdpdGggdGhlIG5hbWUgb2YgdGhpcworICAgICAqIG1ldGhvZCBpbiB0aGUgbW9kdWxlLiAgU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyB0byBhbGxvdworICAgICAqIGZvciB0ZXN0cyB0aGF0IGRvIG5vdCByZXF1aXJlIHRlc3QgZGF0YSBmcm9tIHRoZSBtb2R1bGUsIG9yCisgICAgICogaWYgdGhlcmUgYXJlIGRpZmZlcmVudCBvciBhZGRpdGlvbmFsIGRhdGEgcmVxdWlyZWQuCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVNZXRob2QoU3RyaW5nIG1ldGhvZE5hbWUpIHsKKwlyZXR1cm4gb3BlblRlc3REYXRhKG1ldGhvZE5hbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIG9mIFRlc3RGbXdrIG1ldGhvZCB0byBnZXQgdGhlIHRlc3Qgc3VpdGUgZGVzY3JpcHRpb24KKyAgICAgKiBmcm9tIHRoZSBERVNDUklQVElPTiBmaWVsZCBvZiB0aGUgbW9kdWxlIGluZm8uICAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCURhdGFNYXAgaW5mbyA9IG1vZHVsZUluZm8oKTsKKwlpZiAoaW5mbyAhPSBudWxsKSB7CisJICAgIHJldHVybiBpbmZvLmdldFN0cmluZyhUZXN0RGF0YU1vZHVsZS5ERVNDUklQVElPTik7CisJfQorCXJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIG9mIFRlc3RGbXdrIG1ldGhvZCB0byBnZXQgdGhlIHRlc3QgbWV0aG9kIGRlc2NyaXB0aW9uCisgICAgICogZnJvbSB0aGUgREVTQ1JJUFRJT04gZmllbGQgb2YgdGhlIHRlc3QgaW5mby4gIAorICAgICAqLworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TWV0aG9kRGVzY3JpcHRpb24oU3RyaW5nIG1ldGhvZE5hbWUpIHsKKwlpZiAob3BlblRlc3REYXRhKG1ldGhvZE5hbWUpKSB7CisJICAgIERhdGFNYXAgaW5mbyA9IHRlc3RJbmZvKCk7CisJICAgIGlmIChpbmZvICE9IG51bGwpIHsKKwkJcmV0dXJuIGluZm8uZ2V0U3RyaW5nKFRlc3REYXRhTW9kdWxlLkRFU0NSSVBUSU9OKTsKKwkgICAgfQorCX0KKwlyZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPcGVucyB0aGUgbW9kdWxlIHdpdGggdGhlIGdpdmVuIG5hbWUsIGFuZCByZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzLgorICAgICAqIEFsbCBjb250ZW50cyBhcmUgcmVzZXQuCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gb3Blbk1vZHVsZShTdHJpbmcgbmFtZSkgeworCXQgPSBudWxsOworCW0gPSBUZXN0RGF0YU1vZHVsZS5vcGVuKG5hbWUsIHRoaXMpOworCXJldHVybiBtICE9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3BlbiB0aGUgdGVzdCBkYXRhIGluIHRoZSBtb2R1bGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIHJldHVybgorICAgICAqIHRydWUgaWYgc3VjY2Vzcy4gIFRoZSBjdXJyZW50IHRlc3QgaXMgcmVzZXQuCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gb3BlblRlc3REYXRhKFN0cmluZyBuYW1lKSB7CisJdCA9IG0gPT0gbnVsbCA/IG51bGwgOiBtLmNyZWF0ZVRlc3REYXRhKG5hbWUpOworCXJldHVybiB0ICE9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIHVubW9kaWZpYWJsZSBMaXN0IG9mIHRoZSBuYW1lcyBvZiBhbGwgdGhlIHRlc3RzIGluIHRoZSBtb2R1bGUuCisgICAgICovCisgICAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kdWxlTmFtZXMoKSB7CisgICAgICAgIGlmICh2YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICByZXR1cm4gbS5nZXRUZXN0RGF0YU5hbWVzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXRpbGl0eSB0aGF0IGFzc29jaWF0ZXMgYSBwdWJsaWMgbmFtZWQgZnVuY3Rpb24gaW4gdGhpcyBjbGFzcworICAgICAqIHdpdGggYWxsIHRoZSBuYW1lcyBpbiB0aGUgcHJvdmlkZWQgU2V0LiAgVGhlIGZ1bmN0aW9uIHNob3VsZCBiZQorICAgICAqIHB1YmxpYyBhbmQgdGFrZSBubyBwYXJhbWV0ZXJzIChsaWtlIGEgVGVzdFhYWCBtZXRob2QpLiBZb3UgY2FuCisgICAgICogdXNlIHRoaXMgdG8gb3ZlcnJpZGUgZ2V0QXZhaWxhYmxlVGVzdHMgZnJvbSBUZXN0Rm13aywgd2hpY2ggYnkKKyAgICAgKiBkZWZhdWx0IGFzc29jaWF0ZXMgdGhlIG5hbWVzICBUZXN0WFhYIG9yIHRlc3RYWFggd2l0aAorICAgICAqIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgaW4gdGhlIGNsYXNzLiAgTW9kdWxlVGVzdHMgbWF5IHdpc2gKKyAgICAgKiB0byB1c2UgYSBzaW5nbGUgbWV0aG9kIHRvIGRyaXZlIGFsbCB0aGUgdGVzdHMgaW4gdGhlIG1vZHVsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lcyB0aGUgbmFtZXMgdG8gYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lZCBtZXRob2QuCisgICAgICogQHBhcmFtIG1ldGhvZE5hbWUgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBpbiB0aGlzIGNsYXNzIHRvIGFzc29jaWF0ZSB3aXRoIG5hbWVzCisgICAgICogQHBhcmFtIGRlc3QgdGhlIG1hcCB0byBob2xkIHRoZSBuYW1lLT5tZXRob2QgbWFwcGluZyAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBhZGROYW1lZE1ldGhvZFRvTWFwKExpc3QgbmFtZXMsIFN0cmluZyBtZXRob2ROYW1lLCBNYXAgZGVzdCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgTWV0aG9kIG1ldGhvZCA9IGdldENsYXNzKCkuZ2V0TWV0aG9kKG1ldGhvZE5hbWUsIG51bGwpOworICAgICAgICAgICAgSXRlcmF0b3IgaSA9IG5hbWVzLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBkZXN0LnB1dChpLm5leHQoKSwgbWV0aG9kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgaW5mb3JtYXRpb24gb24gdGhpcyBtb2R1bGUuICBSZXR1cm5zIG51bGwgaWYgbm8gbW9kdWxlCisgICAgICogb3BlbiBvciBubyBpbmZvIGZvciB0aGUgbW9kdWxlLgorICAgICAqLworICAgIHByb3RlY3RlZCBEYXRhTWFwIG1vZHVsZUluZm8oKSB7CisJcmV0dXJuIG0gPT0gbnVsbCA/IG51bGwgOiBtLmdldEluZm8oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgaW5mb3JtYXRpb24gb24gdGhpcyB0ZXN0LiAgUmV0dXJucyBudWxsIGlmIG5vIG1vZHVsZQorICAgICAqIG9wZW4gb3Igbm8gdGVzdCBvcGVuIG9yIG5vdCBpbmZvIGZvciB0aGlzIHRlc3QuCisgICAgICovCisgICAgcHJvdGVjdGVkIERhdGFNYXAgdGVzdEluZm8oKSB7CisJcmV0dXJuIHQgPT0gbnVsbCA/IG51bGwgOiB0LmdldEluZm8oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZHZhbmNlIHRlc3QgdG8gdGhlIG5leHQgc2V0dGluZ3MsIGFuZCByZXR1cm4gdHJ1ZSBpZiAKKyAgICAgKiB0aGVyZSBhcmUgbW9yZSBzZXR0aW5ncy4gIFRoZSBwcm90ZWN0ZWQgbWVtYmVyIHZhcmlhYmxlCisgICAgICogJ3NldHRpbmdzJyBob2xkcyB0aGUgbmV3IHNldHRpbmdzIGRhdGEuCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gbmV4dFNldHRpbmdzKCkgeworCXNldHRpbmdzID0gdCA9PSBudWxsID8gbnVsbCA6IHQubmV4dFNldHRpbmdzKCk7CisJcmV0dXJuIHNldHRpbmdzICE9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWR2YW5jZSB0ZXN0IHRvIHRoZSBuZXh0IGNhc2UsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGVyZQorICAgICAqIGlzIGFub3RoZXIgY2FzZS4gIFRoZSBwcm90ZWN0ZWQgbWVtYmVyIHZhcmlhYmxlCisgICAgICogJ3Rlc3RjYXNlJyBob2xkcyB0aGUgbmV3IGNhc2UgZGF0YS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBuZXh0Q2FzZSgpIHsKKwl0ZXN0Y2FzZSA9IHQgPT0gbnVsbCA/IG51bGwgOiB0Lm5leHRDYXNlKCk7CisJcmV0dXJuIHRlc3RjYXNlICE9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0IGFuIGVycm9yLCBhbmQgc3RvcCBpdGVyYXRpb24gb2YgdGhlIGN1cnJlbnQgdGVzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlcnIoU3RyaW5nIG1lc3NhZ2UpIHsKKwlpZiAodCAhPSBudWxsKSB7CisJICAgIHQuc3RvcEl0ZXJhdGlvbigpOworCX0KKwlzdXBlci5lcnIobWVzc2FnZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0IGFuIGVycm9yLCBhbmQgc3RvcCBpdGVyYXRpb24gb2YgdGhlIGN1cnJlbnQgdGVzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlcnJsbihTdHJpbmcgbWVzc2FnZSkgeworCWlmICh0ICE9IG51bGwpIHsKKwkgICAgdC5zdG9wSXRlcmF0aW9uKCk7CisJfQorCXN1cGVyLmVycmxuKG1lc3NhZ2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9SZXNvdXJjZU1vZHVsZS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Jlc291cmNlTW9kdWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5YzNlYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9SZXNvdXJjZU1vZHVsZS5qYXZhCkBAIC0wLDAgKzEsNTkxIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Jlc291cmNlTW9kdWxlLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8zMSAwNDo1NToxMCAkCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBSZXNvdXJjZS1iYXNlZCBtb2R1bGUuCisgKi8KK3B1YmxpYyBjbGFzcyBSZXNvdXJjZU1vZHVsZSBleHRlbmRzIFRlc3REYXRhTW9kdWxlIHsKKyAgICBwcml2YXRlIE5hbWVkQXJyYXkgdGVzdHM7CisgICAgcHJpdmF0ZSBSQkRhdGFNYXAgaW5mbzsKKyAgICBwcml2YXRlIFN0cmluZ1tdIGRlZmF1bHRIZWFkZXJzOworCisgICAgLyoqCisgICAgICogRm9yIGludGVybmFsIHVzZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RTID0gIlRlc3REYXRhIjsKKworICAgIC8qKgorICAgICAqIEZvciBpbnRlcm5hbCB1c2UuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPID0gIkluZm8iOworCisgICAgLyoqCisgICAgICogRm9yIGludGVybmFsIHVzZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVFRJTkdTID0gIlNldHRpbmdzIjsKKworICAgIC8qKgorICAgICAqIEZvciBpbnRlcm5hbCB1c2UuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDQVNFUyA9ICJDYXNlcyI7CisKKyAgICBwdWJsaWMgUmVzb3VyY2VNb2R1bGUoU3RyaW5nIG5hbWUsIFRlc3RMb2cgbG9nLCBSZXNvdXJjZUJ1bmRsZSBiKSB7CisJc3VwZXIobmFtZSwgbG9nKTsKKworCWlmIChiID09IG51bGwpIHsKKwkgICAgbG9nLmVycmxuKCJSZXNvdXJjZU1vZHVsZSBtdXN0IGhhdmUgbm9uLW51bGwgYnVuZGxlIik7CisJICAgIHJldHVybjsKKwl9CisKKwlPYmplY3RbXVtdIGRhdGEgPSAoT2JqZWN0W11bXSliLmdldE9iamVjdChURVNUUyk7CisJaWYgKGRhdGEgPT0gbnVsbCkgeworCSAgICBsb2cuZXJybG4oIlJlc291cmNlTW9kdWxlIGRvZXMgbm90IGNvbnRhaW4gdGVzdHMhIik7CisJICAgIHJldHVybjsKKwl9CisJdGhpcy50ZXN0cyA9IE5hbWVkQXJyYXkuY3JlYXRlKGRhdGEpOworCisJT2JqZWN0W11bXSB0ZW1wID0gKE9iamVjdFtdW10pYi5nZXRPYmplY3QoSU5GTyk7CisJaWYgKHRlbXAgIT0gbnVsbCkgeworCSAgICBOYW1lZEFycmF5IG5hID0gTmFtZWRBcnJheS5jcmVhdGUodGVtcCk7CisJICAgIGlmIChuYS5jb3VudCgpIDwgMCkgeworCQlsb2cuZXJybG4oIkJhZCBkYXRhIGZvciAiICsgSU5GTyk7CisJICAgIH0gZWxzZSB7CisJCXRoaXMuaW5mbyA9IG5ldyBSQkRhdGFNYXAobG9nLCBuYSwgZmFsc2UpOwkKKwkJdGhpcy5kZWZhdWx0SGVhZGVycyA9IGluZm8uZ2V0U3RyaW5nQXJyYXkoSEVBREVSUyk7CQorCSAgICB9CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhZGRpdGlvbmFsIGRhdGEgcmVsYXRlZCB0byB0aGUgbW9kdWxlLgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsbHkgZ290IGluZm8uCisgICAgICovCisgICAgcHVibGljIERhdGFNYXAgZ2V0SW5mbygpIHsKKwlyZXR1cm4gaW5mbzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBUZXN0IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIG5hbWUsIAorICAgICAqIG9yIG51bGwgaWYgbmFtZSBub3QgZm91bmQgaW4gdGhpcyBtb2R1bGUuCisgICAgICovCisgICAgcHVibGljIFRlc3REYXRhIGNyZWF0ZVRlc3REYXRhKFN0cmluZyBuYW1lKSB7CisJaWYgKHRlc3RzICE9IG51bGwpIHsKKwkgICAgT2JqZWN0W10gdGQgPSB0ZXN0cy5nZXRFbnRyeShuYW1lKTsKKwkgICAgaWYgKHRkICE9IG51bGwpIHsKKwkJcmV0dXJuIGNyZWF0ZVRlc3REYXRhKHRkKTsKKwkgICAgfQorCX0KKworCXJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIFRlc3Qgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gaW5kZXgsCisgICAgICogb3IgbnVsbCBpZiBpbmRleCBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoaXMgbW9kdWxlLgorICAgICAqIE5vIGVycm9yIGxvZ2dlZCBpZiBpbmRleCBpcyBvdXQgb2YgYm91bmRzLCB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0CisgICAgICogaXRlcmF0aW9uIGlzIGJlaW5nIHVzZWQgYW5kIHByb2NlZWRzIHVudGlsIGEgbnVsbCByZXR1cm4uCisgICAgICovCisgICAgcHVibGljIFRlc3REYXRhIGNyZWF0ZVRlc3REYXRhKGludCBpbmRleCkgeworCWlmICh0ZXN0cyAhPSBudWxsKSB7CisJICAgIE9iamVjdFtdIHRkID0gdGVzdHMuZ2V0RW50cnkoaW5kZXgpOworCSAgICBpZiAodGQgIT0gbnVsbCkgeworCQlyZXR1cm4gY3JlYXRlVGVzdERhdGEodGQpOworCSAgICB9CisJfQorCXJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiB1bm1vZGlmaWFibGUgbGlzdCBvZiB0aGUgdGVzdCBkYXRhIG5hbWVzLCBpbiBpbmRleCBvcmRlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgTGlzdCBnZXRUZXN0RGF0YU5hbWVzKCkgeworICAgICAgICBpZiAodGVzdHMgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdCh0ZXN0cy5uYW1lcygpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSBUZXN0RGF0YSBjcmVhdGVUZXN0RGF0YShPYmplY3RbXSBkKSB7CisJcmV0dXJuIG5ldyBSQlRlc3REYXRhKHRoaXMsIChTdHJpbmcpZFswXSwgKE9iamVjdFtdW10pZFsxXSwgZGVmYXVsdEhlYWRlcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByb3ZpZGVzIGFjY2VzcyB0byB2YWx1ZXMgZWl0aGVyIGJ5IGluZGV4IG9yIGJ5IGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoIG9uIAorICAgICAqIHRoZSBuYW1lLiAgUG9vciBtYW4ncyBNYXAgd2l0aCBpbmRleC4KKyAgICAgKi8KKyAgICBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgTmFtZWRBcnJheSB7CisJaW50IHR4Y2FjaGU7CisJaW50IGNvdW50OworCisJc3RhdGljIE5hbWVkQXJyYXkgY3JlYXRlKE9iamVjdFtdW10gcGFpcnMpIHsKKwkgICAgcmV0dXJuIG5ldyBOYW1lZEFycmF5T2ZQYWlycyhwYWlycyk7CisJfQorCisJc3RhdGljIE5hbWVkQXJyYXkgY3JlYXRlKFN0cmluZ1tdIG5hbWVzLCBPYmplY3RbXSB2YWx1ZXMpIHsKKwkgICAgcmV0dXJuIG5ldyBOYW1lZEFycmF5VHdvTGlzdHMobmFtZXMsIHZhbHVlcyk7CisJfQorCisJcHJvdGVjdGVkIE5hbWVkQXJyYXkoaW50IGNvdW50KSB7CisJICAgIHRoaXMuY291bnQgPSBjb3VudDsKKwl9CisKKwlwdWJsaWMgZmluYWwgaW50IGNvdW50KCkgeworCSAgICByZXR1cm4gY291bnQ7CisJfQorCisJcHVibGljIGZpbmFsIGJvb2xlYW4gaXNEZWZpbmVkKFN0cmluZyBuYW1lKSB7CisJICAgIGludCBpeCA9IG5hbWVUb0luZGV4KG5hbWUpOworCSAgICBpZiAoaXggIT0gLTEpIHsKKwkJdHhjYWNoZSA9IChpeCA9PSAwID8gY291bnQgOiBpeCkgLSAxOworCQlyZXR1cm4gdHJ1ZTsKKwkgICAgfQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorCisJcHVibGljIGZpbmFsIE9iamVjdFtdIGdldEVudHJ5KFN0cmluZyBuYW1lKSB7CisJICAgIHJldHVybiBnZXRFbnRyeShuYW1lVG9JbmRleChuYW1lKSk7CisJfQorCisJcHVibGljIGZpbmFsIE9iamVjdCBnZXRWYWx1ZShTdHJpbmcgbmFtZSkgeworCSAgICByZXR1cm4gZ2V0VmFsdWUobmFtZVRvSW5kZXgobmFtZSkpOworCX0KKwkKKwlwdWJsaWMgZmluYWwgT2JqZWN0W10gZ2V0RW50cnkoaW50IGluZGV4KSB7CisJICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgY291bnQpIHsKKwkJcmV0dXJuIGVudHJ5QXRJbmRleChpbmRleCk7CisJICAgIH0KKwkgICAgcmV0dXJuIG51bGw7CisJfQorCisJcHVibGljIGZpbmFsIE9iamVjdCBnZXRWYWx1ZShpbnQgaW5kZXgpIHsKKwkgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBjb3VudCkgeworCQlyZXR1cm4gdmFsdWVBdEluZGV4KGluZGV4KTsKKwkgICAgfQorCSAgICByZXR1cm4gbnVsbDsKKwl9CisKKwlwdWJsaWMgU3RyaW5nW10gbmFtZXMoKSB7CisJICAgIGlmIChjb3VudCA+IDApIHsKKwkJU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1tjb3VudF07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQkgICAgcmVzdWx0W2ldID0gbmFtZUF0SW5kZXgoaSk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwkgICAgfQorCSAgICByZXR1cm4gbnVsbDsKKwl9CisKKwlwdWJsaWMgT2JqZWN0W10gdmFsdWVzKCkgeworCSAgICBpZiAoY291bnQgPiAwKSB7CisJCU9iamVjdFtdIHJlc3VsdCA9IG5ldyBPYmplY3RbY291bnRdOworCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJICAgIHJlc3VsdFtpXSA9IHZhbHVlQXRJbmRleChpKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCSAgICB9CisJICAgIHJldHVybiBudWxsOworCX0KKworCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCSAgICBidWYuYXBwZW5kKCJjb3VudDogIiArIGNvdW50ICsgInsiKTsKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCWJ1Zi5hcHBlbmQoIlxuICB7ICIgKyBuYW1lQXRJbmRleChpKSArICIsICIgKyB2YWx1ZUF0SW5kZXgoaSkgKyAiIH0iKTsKKwkgICAgfQorCSAgICBidWYuYXBwZW5kKCJ9Iik7CisJICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKwl9CisKKwlwcm90ZWN0ZWQgaW50IG5hbWVUb0luZGV4KFN0cmluZyBuYW1lKSB7CisJICAgIGlmIChuYW1lICE9IG51bGwgJiYgY291bnQgPiAwKSB7CisJCWludCBpID0gdHhjYWNoZTsKKwkJZG8geworCQkgICAgaWYgKCsraSA9PSBjb3VudCkgeworCQkJaSA9IDA7CisJCSAgICB9CisJCSAgICBpZiAobmFtZS5lcXVhbHNJZ25vcmVDYXNlKG5hbWVBdEluZGV4KGkpKSkgeworCQkJdHhjYWNoZSA9IGk7CisJCQlyZXR1cm4gaTsKKwkJICAgIH0KKwkJfSB3aGlsZSAoaSAhPSB0eGNhY2hlKTsKKwkgICAgfQorCSAgICByZXR1cm4gLTE7CisJfQorCisJcHJvdGVjdGVkIE9iamVjdFtdIGVudHJ5QXRJbmRleChpbnQgaW5kZXgpIHsKKwkgICAgcmV0dXJuIG5ldyBPYmplY3RbXSB7IG5hbWVBdEluZGV4KGluZGV4KSwgdmFsdWVBdEluZGV4KGluZGV4KSB9OworCX0KKworCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgbmFtZUF0SW5kZXgoaW50IGluZGV4KTsKKwlwcm90ZWN0ZWQgYWJzdHJhY3QgT2JqZWN0IHZhbHVlQXRJbmRleChpbnQgaW5kZXgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5hbWVkQXJyYXkgaW1wbGVtZW50ZWQgdXNpbmcgYW4gYXJyYXkgb2YgbmFtZS92YWx1ZQorICAgICAqIHBhaXJzLCByZXByZXNlbnRlZCBieSBhbiBPYmplY3RbXVtdLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBOYW1lZEFycmF5T2ZQYWlycyBleHRlbmRzIE5hbWVkQXJyYXkgeworCXByaXZhdGUgT2JqZWN0W11bXSBkYXRhOworCisJcHVibGljIE5hbWVkQXJyYXlPZlBhaXJzKE9iamVjdFtdW10gZGF0YSkgeworCSAgICBzdXBlcihkYXRhID09IG51bGwgPyAtMSA6IGRhdGEubGVuZ3RoKTsKKwkgICAgdGhpcy5kYXRhID0gZGF0YTsKKwl9CisKKwlwcm90ZWN0ZWQgT2JqZWN0W10gZW50cnlBdEluZGV4KGludCBpbmRleCkgeworCSAgICByZXR1cm4gZGF0YVtpbmRleF07CisJfQorCisJcHJvdGVjdGVkIFN0cmluZyBuYW1lQXRJbmRleChpbnQgaW5kZXgpIHsKKwkgICAgcmV0dXJuIChTdHJpbmcpZGF0YVtpbmRleF1bMF07CisJfQorCisJcHJvdGVjdGVkIE9iamVjdCB2YWx1ZUF0SW5kZXgoaW50IGluZGV4KSB7CisJICAgIHJldHVybiBkYXRhW2luZGV4XVsxXTsKKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogTmFtZWRBcnJheSBpbXBsZW1lbnRlZCB1c2luZyB0d28gYXJyYXlzLCBvbmUgb2YgU3RyaW5nIGFuZCBvbmUgb2YgT2JqZWN0LgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBOYW1lZEFycmF5VHdvTGlzdHMgZXh0ZW5kcyBOYW1lZEFycmF5IHsKKwlTdHJpbmdbXSBuYW1lczsKKwlPYmplY3RbXSB2YWx1ZXM7CisKKwlwdWJsaWMgTmFtZWRBcnJheVR3b0xpc3RzKFN0cmluZ1tdIG5hbWVzLCBPYmplY3RbXSB2YWx1ZXMpIHsKKwkgICAgc3VwZXIgKHZhbHVlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwgJiYgbmFtZXMubGVuZ3RoID09IHZhbHVlcy5sZW5ndGggPworCQkgICBuYW1lcy5sZW5ndGggOgorCQkgICAtMSk7CisJICAgIHRoaXMubmFtZXMgPSBuYW1lczsKKwkgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7CisJfQorCSAgICAKKwlwdWJsaWMgU3RyaW5nW10gbmFtZXMoKSB7CisJICAgIHJldHVybiBuYW1lczsKKwl9CisKKwlwdWJsaWMgT2JqZWN0W10gdmFsdWVzKCkgeworCSAgICByZXR1cm4gdmFsdWVzOworCX0KKworCXByb3RlY3RlZCBTdHJpbmcgbmFtZUF0SW5kZXgoaW50IGluZGV4KSB7CisJICAgIHJldHVybiBuYW1lc1tpbmRleF07CisJfQorCisJcHJvdGVjdGVkIE9iamVjdCB2YWx1ZUF0SW5kZXgoaW50IGluZGV4KSB7CisJICAgIHJldHVybiB2YWx1ZXNbaW5kZXhdOworCX0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgUkJUZXN0RGF0YSBleHRlbmRzIFRlc3REYXRhIHsKKwlSZXNvdXJjZU1vZHVsZSBtOworCVJCRGF0YU1hcCBpbmZvOworCU9iamVjdFtdIHNldHRpbmdzOworICAgIC8qKiAKKyAgICAgKiBjaGFuZ2VkIHRvIGZpdCB0aGUgYyBnZW5yYiBmb3JtYXQuIHRoaXMgaXMgYWN0dWFsbHkgT2JqZWN0W10ge09iamVjdFtdfQorICAgICAqLworCU9iamVjdFtdIGNhc2VzOyAKKwlTdHJpbmdbXSBoZWFkZXJzOworCWludCBzeDsKKwlpbnQgY3g7CisKKwlSQlRlc3REYXRhKFJlc291cmNlTW9kdWxlIG0sIFN0cmluZyBuYW1lLCBPYmplY3RbXVtdIGRhdGEsIFN0cmluZ1tdIGRlZmF1bHRIZWFkZXJzKSB7CisJICAgIHN1cGVyKG5hbWUpOworCSAgICB0aGlzLm0gPSBtOworCisJICAgIE5hbWVkQXJyYXkgbmFtZWREYXRhID0gTmFtZWRBcnJheS5jcmVhdGUoZGF0YSk7CisKKwkgICAgdHJ5IHsKKwkJT2JqZWN0W11bXSB0ZW1wID0gKE9iamVjdFtdW10pbmFtZWREYXRhLmdldFZhbHVlKElORk8pOworCQlpZiAodGVtcCAhPSBudWxsKSB7CisJCSAgICBOYW1lZEFycmF5IG5hID0gTmFtZWRBcnJheS5jcmVhdGUodGVtcCk7CisJCSAgICBpZiAobmEuY291bnQoKSA8IDEpIHsKKwkJCW0ubG9nLmVycmxuKCJCYWQgZGF0YSBmb3IgIiArIElORk8pOworCQkgICAgfSBlbHNlIHsKKwkJCXRoaXMuaW5mbyA9IG5ldyBSQkRhdGFNYXAobS5sb2csIG5hLCBmYWxzZSk7CisJCSAgICB9CisJCX0KKwkgICAgfSAKKwkgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisJCW0ubG9nLmVycmxuKCJUZXN0ICIgKyBuYW1lICsgIiBpbiBtb2R1bGUgIiArIG0uZ2V0TmFtZSgpICsgIiBoYXMgYmFkIHR5cGUgZm9yICIgKyBJTkZPKTsKKwkgICAgfQorCisJICAgIHRyeSB7CisJCXRoaXMuc2V0dGluZ3MgPSAoT2JqZWN0W10pbmFtZWREYXRhLmdldFZhbHVlKFNFVFRJTkdTKTsKKwkgICAgfQorCSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKwkJbS5sb2cuZXJybG4oIlRlc3QgIiArIG5hbWUgKyAiIGluIG1vZHVsZSAiICsgbS5nZXROYW1lKCkgKyAiIGhhcyBiYWQgdHlwZSBmb3IgIiArIFNFVFRJTkdTKTsKKwkgICAgfQorCisJICAgIHRyeSB7CisJCXRoaXMuY2FzZXMgPSAoT2JqZWN0W10pbmFtZWREYXRhLmdldFZhbHVlKENBU0VTKTsKKwkgICAgfQorCSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKwkJbS5sb2cuZXJybG4oIlRlc3QgIiArIG5hbWUgKyAiIGluIG1vZHVsZSAiICsgbS5nZXROYW1lKCkgKyAiIGhhcyBiYWQgdHlwZSBmb3IgIiArIENBU0VTKTsKKwkgICAgfQorCisJICAgIGlmIChpbmZvICE9IG51bGwpIHsKKwkJdGhpcy5oZWFkZXJzID0gaW5mby5nZXRTdHJpbmdBcnJheShIRUFERVJTKTsKKwkgICAgfQorCSAgICBpZiAodGhpcy5oZWFkZXJzID09IG51bGwpIHsKKwkJdGhpcy5oZWFkZXJzID0gZGVmYXVsdEhlYWRlcnM7CisJICAgIH0KKwl9CisKKwkvKioKKwkgKiBHZXQgYWRkaXRpb25hbCBkYXRhIHJlbGF0ZWQgdG8gdGhlIHRlc3QuCisJICovCisJcHVibGljIERhdGFNYXAgZ2V0SW5mbygpIHsKKwkgICAgcmV0dXJuIGluZm87CisJfQorCisJLyoqCisJICogUmV0dXJucyBEYXRhTWFwIHdpdGggbmV4dCBzZXR0aW5ncyBhbmQgcmVzZXRzIGNhc2UgaXRlcmF0aW9uLgorCSAqIElmIG5vIG1vcmUgc2V0dGluZ3MsIHRlcm1pbmF0ZXMgaXRlcmF0aW9uIGFuZCByZXR1cm5zIG51bGwuCisJICovCisJcHVibGljIERhdGFNYXAgbmV4dFNldHRpbmdzKCkgeworCSAgICBpZiAoc2V0dGluZ3MgIT0gbnVsbCAmJiBzeCA8IHNldHRpbmdzLmxlbmd0aCkgeworCQljeCA9IDA7CisJCU5hbWVkQXJyYXkgbmEgPSBOYW1lZEFycmF5LmNyZWF0ZSgoT2JqZWN0W11bXSlzZXR0aW5nc1tzeCsrXSk7CisJCWlmIChuYS5jb3VudCgpIDwgMCkgeworCQkgICAgbS5sb2cuZXJybG4oIkJhZCBzZXR0aW5ncyBkYXRhIGZvciBzZXR0aW5ncyAiICsgKHN4LTEpKTsKKwkJICAgIHJldHVybiBudWxsOworCQl9IGVsc2UgeworCQkgICAgcmV0dXJuIG5ldyBSQkRhdGFNYXAobS5sb2csIG5hLCBmYWxzZSk7CisJCX0KKwkgICAgfQorCSAgICBzdG9wSXRlcmF0aW9uKCk7CisKKwkgICAgcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyBEYXRhTWFwIHdpdGggbmV4dCBjYXNlLiAgSWYgbm8gbmV4dCBjYXNlLCByZXR1cm5zIG51bGwuCisJICovCisJcHVibGljIERhdGFNYXAgbmV4dENhc2UoKSB7CisJICAgIGlmIChjYXNlcyAhPSBudWxsICYmIGN4IDwgY2FzZXMubGVuZ3RoKSB7CisJCU5hbWVkQXJyYXkgbmEgPSBOYW1lZEFycmF5LmNyZWF0ZShoZWFkZXJzLCAoT2JqZWN0W10pY2FzZXNbY3grK10pOworCQlpZiAobmEuY291bnQoKSA8IDApIHsKKwkJICAgIG0ubG9nLmVycmxuKCJCYWQgY2FzZXMgZGF0YSBmb3IgY2FzZSAiICsgKGN4LTEpKTsKKwkJfSBlbHNlIHsKKwkJICAgIHJldHVybiBuZXcgUkJEYXRhTWFwKG0ubG9nLCBuYSwgdHJ1ZSk7CisJCX0KKwkgICAgfQorCSAgICByZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBTdG9wcyBpdGVyYXRpb24uCisJICovCisJcHVibGljIHZvaWQgc3RvcEl0ZXJhdGlvbigpIHsKKwkgICAgc3ggPSBjeCA9IEludGVnZXIuTUFYX1ZBTFVFOworCX0KKyAgICB9CisgICAgCisgICAgc3RhdGljIGZpbmFsIGNsYXNzIFJCRGF0YU1hcCBleHRlbmRzIERhdGFNYXAgeworCVRlc3RMb2cgbG9nOworCU5hbWVkQXJyYXkgbmE7CisJYm9vbGVhbiByZXF1aXJlZDsKKworCVJCRGF0YU1hcChUZXN0TG9nIGxvZywgTmFtZWRBcnJheSBuYSwgYm9vbGVhbiByZXF1aXJlZCkgeworCSAgICB0aGlzLmxvZyA9IGxvZzsKKwkgICAgdGhpcy5uYSA9IG5hOworCSAgICB0aGlzLnJlcXVpcmVkID0gcmVxdWlyZWQ7CisJfQorCisJcHVibGljIGJvb2xlYW4gaXNEZWZpbmVkKFN0cmluZyBrZXkpIHsKKwkgICAgcmV0dXJuIG5hLmlzRGVmaW5lZChrZXkpOworCX0KKworCXB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KFN0cmluZyBrZXkpIHsgCisJICAgIE9iamVjdCByZXN1bHQgPSBuYS5nZXRWYWx1ZShrZXkpOworCSAgICBpZiAocmVxdWlyZWQgJiYgcmVzdWx0ID09IG51bGwpIHsKKwkJcmVwb3J0TnVsbEVycm9yKGtleSk7CisJICAgIH0KKwkgICAgcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7IAorCSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKKwkgICAgdHJ5IHsKKwkJcmVzdWx0ID0gKFN0cmluZylnZXRPYmplY3Qoa2V5KTsKKwkgICAgfQorCSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKwkJcmVwb3J0VHlwZUVycm9yKCJTdHJpbmciLCBrZXkpOworCSAgICB9CisJICAgIHJldHVybiByZXN1bHQ7CisJfQorCisJcHVibGljIGNoYXIgZ2V0Q2hhcihTdHJpbmcga2V5KSB7IAorCSAgICB0cnkgeworCQlTdHJpbmcgcyA9IGdldFN0cmluZyhrZXkpOworCQlpZiAocyAhPSBudWxsKSB7CisJCSAgICByZXR1cm4gcy5jaGFyQXQoMCk7CisJCX0KKwkgICAgfQorCSAgICBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisJCXJlcG9ydFR5cGVFcnJvcigiY2hhciIsIGtleSk7CisJICAgIH0KKwkgICAgcmV0dXJuIDB4ZmZmZjsKKwl9CisKKwlwdWJsaWMgaW50IGdldEludChTdHJpbmcga2V5KSB7IAorCSAgICB0cnkgeworCQlTdHJpbmcgcyA9IGdldFN0cmluZyhrZXkpOworCQlpZiAocyAhPSBudWxsKSB7CisJCSAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChzKTsKKwkJfQorCSAgICB9CisJICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQlyZXBvcnRUeXBlRXJyb3IoImludCIsIGtleSk7CisJICAgIH0KKwkgICAgcmV0dXJuIC0xOworCX0KKworCXB1YmxpYyBieXRlIGdldEJ5dGUoU3RyaW5nIGtleSkgeyAKKwkgICAgdHJ5IHsKKwkJU3RyaW5nIHMgPSBnZXRTdHJpbmcoa2V5KTsKKwkJaWYgKHMgIT0gbnVsbCkgeworCQkgICAgcmV0dXJuIEJ5dGUucGFyc2VCeXRlKHMpOworCQl9CisJICAgIH0KKwkgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCXJlcG9ydFR5cGVFcnJvcigiYnl0ZSIsIGtleSk7CisJICAgIH0KKwkgICAgcmV0dXJuIChieXRlKS0xOworCX0KKworCXB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oU3RyaW5nIGtleSkgeyAKKwkgICAgU3RyaW5nIHMgPSBnZXRTdHJpbmcoa2V5KTsKKwkgICAgaWYgKHMgIT0gbnVsbCkgeworCQlpZiAocy5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpIHsKKwkJICAgIHJldHVybiB0cnVlOworCQl9IGVsc2UgaWYgKCFzLmVxdWFsc0lnbm9yZUNhc2UoImZhbHNlIikpIHsKKwkJICAgIHJlcG9ydFR5cGVFcnJvcigiYm9vbGVhbiIsIGtleSk7CisJCX0KKwkgICAgfQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorCisJcHVibGljIE9iamVjdFtdIGdldE9iamVjdEFycmF5KFN0cmluZyBrZXkpIHsKKwkgICAgdHJ5IHsKKwkJT2JqZWN0W10gcmVzdWx0ID0gKE9iamVjdFtdKW5hLmdldFZhbHVlKGtleSk7CisJCWlmIChyZXN1bHQgPT0gbnVsbCAmJiByZXF1aXJlZCkgeworCQkgICAgcmVwb3J0TnVsbEVycm9yKGtleSk7CisJCX0KKwkgICAgfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKwkJcmVwb3J0VHlwZUVycm9yKCJPYmplY3RbXSIsIGtleSk7CisJICAgIH0KKwkgICAgcmV0dXJuIG51bGw7CisJfQorCisJcHVibGljIFN0cmluZ1tdIGdldFN0cmluZ0FycmF5KFN0cmluZyBrZXkpIHsgCisJICAgIHRyeSB7CisJCVN0cmluZ1tdIHJlc3VsdCA9IChTdHJpbmdbXSluYS5nZXRWYWx1ZShrZXkpOworCQlpZiAocmVzdWx0ID09IG51bGwgJiYgcmVxdWlyZWQpIHsKKwkJICAgIHJlcG9ydE51bGxFcnJvcihrZXkpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJICAgIH0KKwkgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisJCXJlcG9ydFR5cGVFcnJvcigiU3RyaW5nW10iLCBrZXkpOworCSAgICB9CisJICAgIHJldHVybiBudWxsOworCX0KKworCXB1YmxpYyBjaGFyW10gZ2V0Q2hhckFycmF5KFN0cmluZyBrZXkpIHsgCisJICAgIHRyeSB7CisJCVN0cmluZyB0ZW1wID0gKFN0cmluZyluYS5nZXRWYWx1ZShrZXkpOworCQlpZiAodGVtcCA9PSBudWxsKSB7CisJCSAgICBpZiAocmVxdWlyZWQpIHsKKwkJCXJlcG9ydE51bGxFcnJvcihrZXkpOworCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgcmV0dXJuIHRlbXAudG9DaGFyQXJyYXkoKTsKKwkJfQorCSAgICB9CisJICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworCQlyZXBvcnRUeXBlRXJyb3IoImNoYXJbXSIsIGtleSk7CisJICAgIH0KKwkgICAgcmV0dXJuIG51bGw7CisJfQorCisJcHVibGljIGludFtdIGdldEludEFycmF5KFN0cmluZyBrZXkpIHsKKwkgICAgU3RyaW5nW10gZGF0YSA9IGdldFN0cmluZ0FycmF5KGtleSk7CisJICAgIGlmIChkYXRhICE9IG51bGwpIHsKKwkJdHJ5IHsKKwkJICAgIGludFtdIHJlc3VsdCA9IG5ldyBpbnRbZGF0YS5sZW5ndGhdOworCQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7CisJCQlyZXN1bHRbaV0gPSBJbnRlZ2VyLnBhcnNlSW50KGRhdGFbaV0pOworCQkgICAgfQorCQkgICAgcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJICAgIHJlcG9ydFR5cGVFcnJvcigiaW50W10iLCBrZXkpOworCQl9CisJICAgIH0KKwkgICAgcmV0dXJuIG51bGw7CisJfQorCisJcHVibGljIGJ5dGVbXSBnZXRCeXRlQXJyYXkoU3RyaW5nIGtleSkgeyAKKwkgICAgU3RyaW5nW10gZGF0YSA9IGdldFN0cmluZ0FycmF5KGtleSk7CisJICAgIGlmIChkYXRhICE9IG51bGwpIHsKKwkJdHJ5IHsKKwkJICAgIGJ5dGVbXSByZXN1bHQgPSBuZXcgYnl0ZVtkYXRhLmxlbmd0aF07CisJCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgeworCQkJcmVzdWx0W2ldID0gQnl0ZS5wYXJzZUJ5dGUoZGF0YVtpXSk7CisJCSAgICB9CisJCSAgICByZXR1cm4gcmVzdWx0OworCQl9CisJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkgICAgcmVwb3J0VHlwZUVycm9yKCJieXRlW10iLCBrZXkpOworCQl9CisJICAgIH0KKwkgICAgcmV0dXJuIG51bGw7CisJfQorCisJcHVibGljIGJvb2xlYW5bXSBnZXRCb29sZWFuQXJyYXkoU3RyaW5nIGtleSkgeworCSAgICBTdHJpbmdbXSBkYXRhID0gZ2V0U3RyaW5nQXJyYXkoa2V5KTsKKwkgICAgaWYgKGRhdGEgIT0gbnVsbCkgeworCQlib29sZWFuW10gcmVzdWx0ID0gbmV3IGJvb2xlYW5bZGF0YS5sZW5ndGhdOworCQlmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgeworCQkgICAgU3RyaW5nIHMgPSBkYXRhW2ldOworCQkgICAgaWYgKHMuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKSB7CisJCQlyZXN1bHRbaV0gPSB0cnVlOworCQkgICAgfSBlbHNlIGlmIChzLmVxdWFsc0lnbm9yZUNhc2UoImZhbHNlIikpIHsKKwkJCXJlc3VsdFtpXSA9IGZhbHNlOworCQkgICAgfSBlbHNlIHsKKwkJCXJlcG9ydFR5cGVFcnJvcigiYm9vbGVhbltdIiwga2V5KTsKKwkJCXJldHVybiBudWxsOworCQkgICAgfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJICAgIH0KKwkgICAgcmV0dXJuIG51bGw7CisJfQorCisJcHJpdmF0ZSB2b2lkIHJlcG9ydE51bGxFcnJvcihTdHJpbmcga2V5KSB7CisJICAgIGxvZy5lcnJsbigiTWlzc2luZyByZXF1aXJlZCB2YWx1ZSBmb3IgJyIgKyBrZXkgKyAiJyIpOworCX0KKworCXByaXZhdGUgdm9pZCByZXBvcnRUeXBlRXJyb3IoU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcga2V5KSB7CisJICAgIGxvZy5lcnJsbigiQ291bGQgbm90IHJldHVybiB2YWx1ZSBvZiAnIiArIGtleSArICInICgiICsgZ2V0T2JqZWN0KGtleSkgKyAiKSBhcyB0eXBlICciICsgdHlwZU5hbWUgKyAiJyIpOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvVGVzdEFsbC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3RBbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOTMwNTBlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3RBbGwuamF2YQpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3RBbGwuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMS8yNSAyMjoxMTo0NyAkIAorICogJFJldmlzaW9uOiAxLjQzICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdDsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5iaWdkZWMuRGlhZ0JpZ0RlY2ltYWw7CitpbXBvcnQgamF2YS51dGlsLlRpbWVab25lOworCisvKioKKyAqIFRvcCBsZXZlbCB0ZXN0IHVzZWQgdG8gcnVuIGFsbCBvdGhlciB0ZXN0cyBhcyBhIGJhdGNoLgorICovCisgCitwdWJsaWMgY2xhc3MgVGVzdEFsbCBleHRlbmRzIFRlc3RGbXdrIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KFRpbWVab25lLmdldFRpbWVab25lKCJQU1QiKSk7CisgICAgICAgIG5ldyBUZXN0QWxsKCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RCaWdOdW1iZXJGb3JtYXQoKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBydW4obmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5CaWdOdW1iZXJGb3JtYXRUZXN0KCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29tcHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBydW4obmV3IFRlc3RGbXdrW10geworICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmNvbXByZXNzaW9uLkRlY29tcHJlc3Npb25UZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY29tcHJlc3Npb24uRXhoYXVzdGl2ZVRlc3QoKQorICAgICAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RSdWxlQmFzZWROdW1iZXJGb3JtYXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcnVuKG5ldyBUZXN0Rm13a1tdIHsKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuUmJuZlRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuUmJuZlJvdW5kVHJpcFRlc3QoKQorICAgICAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QucmJiaS5TaW1wbGVCSVRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5yYmJpLkJyZWFrSXRlcmF0b3JUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QucmJiaS5SQkJJVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnJiYmkuUkJCSUFQSVRlc3QoKQorICAgICAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RUcmFuc2xpdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBydW4obmV3IFRlc3RGbXdrW10geworICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnRyYW5zbGl0LlRyYW5zbGl0ZXJhdG9yVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnRyYW5zbGl0LlVuaWNvZGVTZXRUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQuVW5pY29kZUZpbHRlckxvZ2ljVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnRyYW5zbGl0LkNvbXBvdW5kVHJhbnNsaXRlcmF0b3JUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQuVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3JUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQuSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3JUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQuSmFtb1Rlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC50cmFuc2xpdC5FcnJvclRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC50cmFuc2xpdC5Sb3VuZFRyaXBUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQuUmVwbGFjZWFibGVUZXN0KCkKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2VhcmNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bigKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5zZWFyY2guU2VhcmNoVGVzdCgpKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENvbGxhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmNvbGxhdG9yLkNvbGxhdGlvbkFQSVRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25DdXJyZW5jeVRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25EYW5pc2hUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uRHVtbXlUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uRW5nbGlzaFRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25GaW5uaXNoVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmNvbGxhdG9yLkNvbGxhdGlvbkZyZW5jaFRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25HZXJtYW5UZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uSXRlcmF0b3JUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uS2FuYVRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25Nb25rZXlUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uUmVncmVzc2lvblRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25TcGFuaXNoVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmNvbGxhdG9yLkNvbGxhdGlvblRoYWlUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uVHVya2lzaFRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5HN0NvbGxhdGlvblRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Mb3R1c0NvbGxhdGlvbktvcmVhblRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25NaXNjVGVzdCgpCisgICAgICAgICAgICAgICAgfSk7CisgICAgfQorCQorICAgIHB1YmxpYyB2b2lkIFRlc3RBcmFiaWNTaGFwaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgY29tLmlibS5pY3UuZGV2LnRlc3Quc2hhcGluZy5BcmFiaWNTaGFwaW5nUmVnVGVzdCgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q2FsZW5kYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcnVuKG5ldyBUZXN0Rm13a1tdIHsKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jYWxlbmRhci5Bc3Ryb1Rlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jYWxlbmRhci5DYWxlbmRhclJlZ3Jlc3Npb24oKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jYWxlbmRhci5Db21wYXRpYmlsaXR5VGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyLkhlYnJld1Rlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jYWxlbmRhci5JQk1DYWxlbmRhclRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5jYWxlbmRhci5Jc2xhbWljVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyLkphcGFuZXNlVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyLkNoaW5lc2VUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuY2FsZW5kYXIuSG9saWRheVRlc3QoKQorICAgICAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RUaW1lWm9uZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBydW4obmV3IFRlc3RGbXdrW10geworICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnRpbWV6b25lLlRpbWVab25lVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnRpbWV6b25lLlRpbWVab25lUmVncmVzc2lvbigpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnRpbWV6b25lLlRpbWVab25lQm91bmRhcnlUZXN0KCkKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q2hhcmFjdGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZy5VQ2hhcmFjdGVyVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmxhbmcuVUNoYXJhY3RlckNhc2VUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZy5VQ2hhcmFjdGVySXRlcmF0b3JUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZy5VQ2hhcmFjdGVyQ2F0ZWdvcnlUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZy5VQ2hhcmFjdGVyRGlyZWN0aW9uVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmxhbmcuVVByb3BlcnR5QWxpYXNlc1Rlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5sYW5nLlVURjE2VGVzdCgpCisgICAgICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RUcmllKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QudXRpbC5UcmllVGVzdCgpCisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFVTY3JpcHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcnVuKCBuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZy5UZXN0VVNjcmlwdCgpLAorICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdE5vcm1hbGl6ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcnVuKCBuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3Qubm9ybWFsaXplci5CYXNpY1Rlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5ub3JtYWxpemVyLkNvbmZvcm1hbmNlVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0Lm5vcm1hbGl6ZXIuRXhoYXVzdGl2ZVRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5ub3JtYWxpemVyLlRlc3RDYW5vbmljYWxJdGVyYXRvcigpLAorICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFVTY3JpcHRSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcnVuKCBuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZy5UZXN0VVNjcmlwdFJ1bigpLAorICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdE51bWJlckZvcm1hdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBydW4obmV3IFRlc3RGbXdrW10geworICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5JbnRsVGVzdE51bWJlckZvcm1hdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5JbnRsVGVzdE51bWJlckZvcm1hdEFQSSgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5OdW1iZXJGb3JtYXRUZXN0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0Lk51bWJlckZvcm1hdFJvdW5kVHJpcFRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuTnVtYmVyUmVncmVzc2lvbigpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5OdW1iZXJGb3JtYXRSZWdyZXNzaW9uVGVzdCgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5JbnRsVGVzdERlY2ltYWxGb3JtYXRBUEkoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuSW50bFRlc3REZWNpbWFsRm9ybWF0QVBJQygpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5JbnRsVGVzdERlY2ltYWxGb3JtYXRTeW1ib2xzKCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0LkludGxUZXN0RGVjaW1hbEZvcm1hdFN5bWJvbHNDKCkKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdERhdGVGb3JtYXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcnVuKG5ldyBUZXN0Rm13a1tdIHsKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuRGF0ZUZvcm1hdE1pc2NUZXN0cygpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5EYXRlRm9ybWF0UmVncmVzc2lvblRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuRGF0ZUZvcm1hdFJvdW5kVHJpcFRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuRGF0ZUZvcm1hdFRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuSW50bFRlc3REYXRlRm9ybWF0KCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0LkludGxUZXN0RGF0ZUZvcm1hdEFQSSgpLAorICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdC5JbnRsVGVzdERhdGVGb3JtYXRBUElDKCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0LkludGxUZXN0RGF0ZUZvcm1hdFN5bWJvbHMoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQuSW50bFRlc3RTaW1wbGVEYXRlRm9ybWF0QVBJKCksCisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0LkRhdGVGb3JtYXRSZWdyZXNzaW9uVGVzdEooKQorICAgICAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RTZXJ2aWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJcnVuKG5ldyBUZXN0Rm13a1tdIHsKKwkgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnV0aWwuSUNVU2VydmljZVRlc3QoKSwKKwkgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0LnV0aWwuSUNVU2VydmljZVRocmVhZFRlc3QoKQorCQl9KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFZlcnNpb25JbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC51dGlsLlZlcnNpb25JbmZvVGVzdCgpCisgICAgICAgIH0pOyAgICAgICAgCisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RJdGVyYXRvcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBydW4obmV3IFRlc3RGbXdrW10geworICAgICAgICAgICAgbmV3IGNvbS5pYm0uaWN1LmRldi50ZXN0Lml0ZXJhdG9yLlRlc3RVQ2hhcmFjdGVySXRlcmF0b3IoKSwKKyAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RVdGlsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdEZtd2tbXSB7CisgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QudXRpbC5JQ1VMaXN0UmVzb3VyY2VCdW5kbGVUZXN0KCksCisJICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC51dGlsLkNvbXBhY3RBcnJheVRlc3QoKSwKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLmljdS5kZXYudGVzdC51dGlsLlN0cmluZ1Rva2VuaXplclRlc3QoKSwKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0TWF0aCgpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIHJ1biggbmV3IFRlc3RGbXdrW117CisgICAgICAgICAgICAgICAgbmV3IERpYWdCaWdEZWNpbWFsKCksCisgICAgICAgICAgICAgIH0pOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0SUNVQmluYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgcnVuKCBuZXcgVGVzdEZtd2tbXXsKKyAgICAgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UuZGV2LnRlc3QudXRpbC5JQ1VCaW5hcnlUZXN0KCksCisgICAgICAgICAgICAgIH0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0RGF0YU1vZHVsZS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3REYXRhTW9kdWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhMWU5OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0RGF0YU1vZHVsZS5qYXZhCkBAIC0wLDAgKzEsMTcyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3REYXRhTW9kdWxlLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8zMSAwNDo1NToxMCAkCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB0ZXN0IGRhdGEgZGVzY3JpYmVkIGluIGEgZmlsZS4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFRlc3REYXRhTW9kdWxlIHsKKyAgICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIG5hbWU7CisgICAgcHJvdGVjdGVkIGZpbmFsIFRlc3RMb2cgbG9nOworCisgICAgLyoqCisgICAgICogTG9va3MgZm9yIGZpbGUgd2l0aCBjb3JyZXNwb25kaW5nIG5hbWUsIGVpdGhlciB4bWwgb3IgcmVzb3VyY2UKKyAgICAgKiBidW5kbGUuICBSZXR1cm5zIG1vZHVsZSBvciBudWxsIGlmIG5vdCBwcmVzZW50LiAgCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFRlc3REYXRhTW9kdWxlIG9wZW4oU3RyaW5nIG5hbWUsIFRlc3RMb2cgbG9nKSB7CisJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKG5hbWUpOworCWlmIChidW5kbGUgIT0gbnVsbCkgeworCSAgICByZXR1cm4gbmV3IFJlc291cmNlTW9kdWxlKG5hbWUsIGxvZywgYnVuZGxlKTsKKwl9CisJcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3ViY2xhc3MgY29uc3RydWN0b3JzIGNhbGwgdGhpcy4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgVGVzdERhdGFNb2R1bGUoU3RyaW5nIG5hbWUsIFRlc3RMb2cgbG9nKSB7CisJdGhpcy5uYW1lID0gbmFtZTsKKwl0aGlzLmxvZyA9IGxvZzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgdGVzdCBtb2R1bGUuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROYW1lKCkgeworCXJldHVybiBuYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbG9nIHVzZWQgYnkgdGhpcyBtb2R1bGUuICBFcnJvcnMgbG9nZ2VkIHRvIHRoaXMKKyAgICAgKiBsb2cgd2lsbCB0ZXJtaW5hdGUgc2V0dGluZ3MgYW5kIGNhc2VzIGl0ZXJhdGlvbiBmb3IgdGhlCisgICAgICogY3VycmVudCB0ZXN0LgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBUZXN0TG9nIGdldExvZygpIHsKKwlyZXR1cm4gbG9nOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhZGRpdGlvbmFsIGRhdGEgcmVsYXRlZCB0byB0aGUgbW9kdWxlLCBlLmcuIERFU0NSSVBUSU9OLAorICAgICAqIGdsb2JhbCBzZXR0aW5ncy4gIE1pZ2h0IGJlIG51bGwuCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IERhdGFNYXAgZ2V0SW5mbygpOworCisgICAgLyoqCisgICAgICogQSBzdGFuZGFyZCBkYXR1bSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgRGF0YU1hcCByZXR1cm5lZCBieSBnZXRJbmZvLgorICAgICAqIERFU0NSSVBUSU9OIHByb3ZpZGVzIGEgb25lLWxpbmUgZGVzY3JpcHRpb24uICBUaGUgY29ycmVzcG9uZGluZyB0eXBlCisgICAgICogaXMgYSBTdHJpbmcuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ1JJUFRJT04gPSAiRGVzY3JpcHRpb24iOworCisgICAgLyoqCisgICAgICogQSBzdGFuZGFyZCBkYXR1bSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgRGF0YU1hcCByZXR1cm5lZCBieQorICAgICAqIGdldEluZm8uICBMT05HX0RFU0NSSVBUSU9OIHByb3ZpZGVzIGFuIGV4dGVuZGVkIGRlc2NyaXB0aW9uLgorICAgICAqIFRoZSBjb3JyZXNwb25kaW5nIHR5cGUgaXMgYSBTdHJpbmcuICAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT05HX0RFU0NSSVBUSU9OID0gIkxvbmdfRGVzY3JpcHRpb24iOworCisgICAgLyoqCisgICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb2x1bW5zIG9mIHRlc3QgZGF0YS4gIFRoaXMgY2FuIGJlIGZvdW5kIGluCisgICAgICogZWl0aGVyIHRoZSBtb2R1bGUgSU5GTyBvciB0aGUgdGVzdCBJTkZPLiAgSWYgdGhlIHRlc3QgSU5GTworICAgICAqIGRvZXMgbm90IGRlZmluZSB0aGUgaGVhZGVycyB0aGVuIHRoZXkgYXJlIHRha2VuIGZyb20gdGhlCisgICAgICogbW9kdWxlLiAgSWYgdGVzdCBjYXNlcyBhcmUgdXNlZCBieSB0aGUgdGVzdCwgdGhlbiB0aGUgaGVhZGVycworICAgICAqIG11c3QgYmUgZGVmaW5lZC4gIE1vc3QgY2xpZW50cyB3aWxsIG5vdCBuZWVkIHRoaXMgaW5mb3JtYXRpb24sCisgICAgICogc2luY2UgaXQgaXMgaGFuZGxlZCBieSB0aGUgZnJhbWV3b3JrLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUlMgPSAiSGVhZGVycyI7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBUZXN0IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGluZGV4LCBvciBudWxsIGlmCisgICAgICogaW5kZXggaXMgb3V0IG9mIHJhbmdlIGZvciB0aGlzIG1vZHVsZS4gIE5vIGVycm9yIGxvZ2dlZCBpZgorICAgICAqIGluZGV4IGlzIG91dCBvZiBib3VuZHMsIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgaXRlcmF0aW9uIGlzCisgICAgICogYmVpbmcgdXNlZC4gIAorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBUZXN0RGF0YSBjcmVhdGVUZXN0RGF0YShpbnQgaW5kZXgpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVGVzdERhdGEgY29ycmVzcG9uZGluZyB0byBuYW1lLCBvciBudWxsIGlmIG5hbWUgbm90CisgICAgICogZm91bmQgaW4gdGhpcyBtb2R1bGUuICBMb2dzIGVycm9yIGlmIG5hbWUgaXMgbm90IGZvdW5kLiAgCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IFRlc3REYXRhIGNyZWF0ZVRlc3REYXRhKFN0cmluZyBuYW1lKTsKKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiB1bm1vZGlmaWFibGUgbGlzdCBvZiB0aGUgdGVzdCBkYXRhIG5hbWVzLCBpbiBpbmRleCBvcmRlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdCBnZXRUZXN0RGF0YU5hbWVzKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXByZXNlbnRzIGEgc2luZ2xlIHRlc3QgaW4gdGhlIG1vZHVsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIFRlc3REYXRhIHsKKwlTdHJpbmcgbmFtZTsKKworCXByb3RlY3RlZCBUZXN0RGF0YShTdHJpbmcgbmFtZSkgeworCSAgICB0aGlzLm5hbWUgPSBuYW1lOworCX0KKworCXB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZSgpIHsKKwkgICAgcmV0dXJuIG5hbWU7CisJfQorCisJLyoqCisJICogR2V0IGFkZGl0aW9uYWwgZGF0YSByZWxhdGVkIHRvIHRoZSB0ZXN0LCBlLmcuIERFU0NSSVBUSU9OLAorCSAqIExPTkdfREVTQ1JJUFRJT04sIEhFQURFUlMsIG9yIG90aGVyIHRlc3Qtc3BlY2lmaWMKKwkgKiBpbmZvcm1hdGlvbi4gIAorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBEYXRhTWFwIGdldEluZm8oKTsKKworCS8qKgorCSAqIFJldHVybnMgbmV3IERhdGFNYXAgZm9yIG5leHQgc2V0dGluZ3MsIGFuZCByZXNldHMgdGVzdCBjYXNlCisJICogaXRlcmF0aW9uLiAgUmV0dXJucyBudWxsIGlmIG5vIG1vcmUgc2V0dGluZ3MuICAKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgRGF0YU1hcCBuZXh0U2V0dGluZ3MoKTsKKworCS8qKgorCSAqIFJldHVybnMgbmV3IERhdGFNYXAgZm9yIG5leHQgY2FzZXMuICAKKwkgKiBSZXR1cm5zIG51bGwgaWYgbm8gbW9yZSBjYXNlcy4KKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgRGF0YU1hcCBuZXh0Q2FzZSgpOworCisJLyoqCisJICogU3RvcHMgaXRlcmF0aW9uIG9mIHRoZSB0ZXN0LiAgVXN1YWxseSBjYWxsZWQgaWYgc29tZQorCSAqIGNvbmRpdGlvbiBkZXRlY3RzIGFuIGVycm9yLgorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHN0b3BJdGVyYXRpb24oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEYXRhTWFwIHByb3ZpZGVzIG5hbWVkIGFjY2VzcyB0byB0eXBlZCBkYXRhLiAgTG9va3VwIGRhdGEgYnkKKyAgICAgKiBrZXkgYW5kIGF0dGVtcHQgdG8gY2FzdCB0byBpbmRpY2F0ZWQgdHlwZS4gIElmIGRhdGEgbm90IGZvdW5kCisgICAgICogb3IgY2FzdCBmYWlscywgbG9nIGVycm9yIGFuZCByZXR1cm4gbnVsbC4gICovCisgICAgcHVibGljIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBEYXRhTWFwIHsKKwlwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiAgICBpc0RlZmluZWQoU3RyaW5nIGtleSk7CisKKwlwdWJsaWMgYWJzdHJhY3QgT2JqZWN0ICAgICBnZXRPYmplY3QoU3RyaW5nIGtleSk7CisJcHVibGljIGFic3RyYWN0IFN0cmluZyAgICAgZ2V0U3RyaW5nKFN0cmluZyBrZXkpOworCXB1YmxpYyBhYnN0cmFjdCBjaGFyICAgICAgIGdldENoYXIoU3RyaW5nIGtleSk7CisJcHVibGljIGFic3RyYWN0IGludCAgICAgICAgZ2V0SW50KFN0cmluZyBrZXkpOworCXB1YmxpYyBhYnN0cmFjdCBieXRlICAgICAgIGdldEJ5dGUoU3RyaW5nIGtleSk7CisJcHVibGljIGFic3RyYWN0IGJvb2xlYW4gICAgZ2V0Qm9vbGVhbihTdHJpbmcga2V5KTsKKworCXB1YmxpYyBhYnN0cmFjdCBPYmplY3RbXSAgIGdldE9iamVjdEFycmF5KFN0cmluZyBrZXkpOworCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSAgIGdldFN0cmluZ0FycmF5KFN0cmluZyBrZXkpOworCXB1YmxpYyBhYnN0cmFjdCBjaGFyW10gICAgIGdldENoYXJBcnJheShTdHJpbmcga2V5KTsKKwlwdWJsaWMgYWJzdHJhY3QgaW50W10gICAgICBnZXRJbnRBcnJheShTdHJpbmcga2V5KTsKKwlwdWJsaWMgYWJzdHJhY3QgYnl0ZVtdICAgICBnZXRCeXRlQXJyYXkoU3RyaW5nIGtleSk7CisJcHVibGljIGFic3RyYWN0IGJvb2xlYW5bXSAgZ2V0Qm9vbGVhbkFycmF5KFN0cmluZyBrZXkpOworICAgIH0KK30KKyAgICAKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0Rm13ay5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3RGbXdrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjcwNWUwOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0Rm13ay5qYXZhCkBAIC0wLDAgKzEsNTAwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvVGVzdEZtd2suamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMS8wNiAxOTowNzowMiAkIAorICogJFJldmlzaW9uOiAxLjMzICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdDsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC4qOworaW1wb3J0IGphdmEudGV4dC4qOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5Vbmljb2RlU2V0OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVVRGMTY7CisKKy8qKgorICogVGVzdEZtd2sgaXMgYSBiYXNlIGNsYXNzIGZvciB0ZXN0cyB0aGF0IGNhbiBiZSBydW4gY29udmVuaWVudGx5IGZyb20KKyAqIHRoZSBjb21tYW5kIGxpbmUgYXMgd2VsbCBhcyB1bmRlciB0aGUgSmF2YSB0ZXN0IGhhcm5lc3MuCisgKiA8cD4KKyAqIFN1Yi1jbGFzc2VzIGltcGxlbWVudCBhIHNldCBvZiBtZXRob2RzIG5hbWVkIFRlc3Q8c29tZXRoaW5nPi4gRWFjaAorICogb2YgdGhlc2UgbWV0aG9kcyBwZXJmb3JtcyBzb21lIHRlc3QuIFRlc3QgbWV0aG9kcyBzaG91bGQgaW5kaWNhdGUKKyAqIGVycm9ycyBieSBjYWxsaW5nIGVpdGhlciBlcnIgb3IgZXJybG4uICBUaGlzIHdpbGwgaW5jcmVtZW50IHRoZQorICogZXJyb3JDb3VudCBmaWVsZCBhbmQgbWF5IG9wdGlvbmFsbHkgcHJpbnQgYSBtZXNzYWdlIHRvIHRoZSBsb2cuCisgKiBEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbWF5IGFsc28gYmUgYWRkZWQgdG8gdGhlIGxvZyB2aWEgdGhlIGxvZworICogYW5kIGxvZ2xuIG1ldGhvZHMuICBUaGVzZSBtZXRob2RzIHdpbGwgYWRkIHRoZWlyIGFyZ3VtZW50cyB0byB0aGUKKyAqIGxvZyBvbmx5IGlmIHRoZSB0ZXN0IGlzIGJlaW5nIHJ1biBpbiB2ZXJib3NlIG1vZGUuCisgKi8KKworcHVibGljIGNsYXNzIFRlc3RGbXdrIGltcGxlbWVudHMgVGVzdExvZyB7CisKKyAgICAvKioKKyAgICAgKiBQdXRzIGEgY29weXJpZ2h0IGluIHRoZSAuY2xhc3MgZmlsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHROb3RpY2UKKyAgICAgICAgPSAiQ29weXJpZ2h0IFx1MDBhOTE5OTctMTk5OCBJQk0gQ29ycC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRXZlcnl0aGluZyBiZWxvdyBoZXJlIGlzIGJvaWxlcnBsYXRlIGNvZGUgdGhhdCBtYWtlcyBpdCBwb3NzaWJsZQorICAgIC8vIHRvIGFkZCBhIG5ldyB0ZXN0IGJ5IHNpbXBseSBhZGRpbmcgYSBmdW5jdGlvbiB0byBhbiBleGlzdGluZyBjbGFzcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBwcm90ZWN0ZWQgVGVzdEZtd2soKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVmYXVsdCBpcyB0byBjcmVhdGUgYSBoYXNobWFwIGNvbnRhaW5pbmcgYWxsIHRoZSB0ZXN0IG1ldGhvZHMuCisgICAgICogRGF0YS1kcml2ZW4gdGVzdHMgY2FuIG92ZXJyaWRlIHRvIHByb3ZpZGUgYSBkaWZmZXJlbnQgbWFwcGluZworICAgICAqIG9mIHRlc3QgbmFtZXMgdG8gdGVzdCBtZXRob2RzLCBhbmQgYSBkaWZmZXJlbnQgbGlzdC4gIElmIHRoaXMKKyAgICAgKiB0ZXN0IHN1aXRlIGlzIGludmFsaWQsIHN1YmNsYXNzZXJzIHNob3VsZCByZXR1cm4gYW4gZW1wdHkKKyAgICAgKiBjb2xsZWN0aW9uLgorICAgICAqLworICAgIHByb3RlY3RlZCBNYXAgZ2V0QXZhaWxhYmxlVGVzdHMoKSB7CisgICAgICAgIE1hcCByZXN1bHQgPSBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7CisgICAgICAgIGlmICh2YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGdldENsYXNzKCkuZ2V0RGVjbGFyZWRNZXRob2RzKCk7CisgICAgICAgICAgICBmb3IoIGludCBpPTA7IGk8bWV0aG9kcy5sZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiggbWV0aG9kc1tpXS5nZXROYW1lKCkuc3RhcnRzV2l0aCgiVGVzdCIpIAorICAgICAgICAgICAgICAgICAgICB8fCBtZXRob2RzW2ldLmdldE5hbWUoKS5zdGFydHNXaXRoKCJ0ZXN0IikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1dChtZXRob2RzW2ldLmdldE5hbWUoKSwgbWV0aG9kc1tpXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHByaXZhdGUgTWFwIGdldFRlc3RzVG9SdW4oU2V0IHRlc3ROYW1lcykgeworICAgICAgICBNYXAgbWV0aG9kc1RvUnVuID0gZ2V0QXZhaWxhYmxlVGVzdHMoKTsKKyAgICAgICAgaWYgKCEodGVzdE5hbWVzID09IG51bGwgIHx8IHRlc3ROYW1lcy5pc0VtcHR5KCkpKSB7CisgICAgICAgICAgICBtZXRob2RzVG9SdW4ua2V5U2V0KCkucmV0YWluQWxsKHRlc3ROYW1lcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1ldGhvZHNUb1J1bjsKKyAgICB9CisKKyAgICBwcml2YXRlIEl0ZXJhdG9yIGdldFRlc3RFbnRyeUl0ZXJhdG9yKE1hcCB0ZXN0c1RvUnVuKSB7CisgICAgICAgIFRyZWVNYXAgc29ydGVkTWV0aG9kcyA9IG5ldyBUcmVlTWFwKFN0cmluZy5DQVNFX0lOU0VOU0lUSVZFX09SREVSKTsKKyAgICAgICAgc29ydGVkTWV0aG9kcy5wdXRBbGwodGVzdHNUb1J1bik7CisgICAgICAgIHJldHVybiBzb3J0ZWRNZXRob2RzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgX3J1bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBfcnVuKGdldFRlc3RzVG9SdW4obnVsbCkpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgX3J1bihNYXAgdGVzdHNUb1J1bikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHdyaXRlVGVzdE5hbWUoZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICBwYXJhbXMuaW5kZW50TGV2ZWwrKzsKKyAgICAgICAgaW50IG9sZENsYXNzQ291bnQgPSBwYXJhbXMuZXJyb3JDb3VudDsKKyAgICAgICAgaW50IG9sZENsYXNzSW52YWxpZENvdW50ID0gcGFyYW1zLmludmFsaWRDb3VudDsKKworICAgICAgICBpZiAodmFsaWRhdGUoKSkgeworICAgICAgICAgICAgSXRlcmF0b3IgaXRlciA9IGdldFRlc3RFbnRyeUl0ZXJhdG9yKHRlc3RzVG9SdW4pOworCisgICAgICAgICAgICAvLyBSdW4gdGhlIGxpc3Qgb2YgdGVzdHMgZ2l2ZW4gaW4gdGhlIHRlc3QgYXJndW1lbnRzCisJICAgIGZpbmFsIE9iamVjdFtdIE5PX0FSR1MgPSBuZXcgT2JqZWN0WzBdOworICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaW50IG9sZENvdW50ID0gcGFyYW1zLmVycm9yQ291bnQ7CisgICAgICAgICAgICAgICAgaW50IG9sZEludmFsaWRDb3VudCA9IHBhcmFtcy5pbnZhbGlkQ291bnQ7CisKKyAgICAgICAgICAgICAgICBNYXAuRW50cnkgZW50cnkgPSAoTWFwLkVudHJ5KWl0ZXIubmV4dCgpOworCQlTdHJpbmcgdGVzdE5hbWUgPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOworICAgICAgICAgICAgICAgIE1ldGhvZCB0ZXN0TWV0aG9kID0gKE1ldGhvZCllbnRyeS5nZXRWYWx1ZSgpOworCisgICAgICAgICAgICAgICAgd3JpdGVUZXN0TmFtZSh0ZXN0TmFtZSk7CisKKwkJaWYgKHZhbGlkYXRlTWV0aG9kKHRlc3ROYW1lKSkgeworCQkgICAgdHJ5IHsKKwkJCXRlc3RNZXRob2QuaW52b2tlKHRoaXMsIE5PX0FSR1MpOworCQkgICAgfSBjYXRjaCggSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlICkgeworCQkJZXJybG4oIkNhbid0IGFjY2VzcyB0ZXN0IG1ldGhvZCAiICsgdGVzdE5hbWUpOworCQkgICAgfSBjYXRjaCggSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlICkgeworCQkJZXJybG4oIlVuY2F1Z2h0IGV4Y2VwdGlvbiBcIiIgKyBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIlwiIHRocm93biBpbiB0ZXN0IG1ldGhvZCAiICsgdGVzdE1ldGhvZC5nZXROYW1lKCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIiBhY2Nlc3NlZCB1bmRlciBuYW1lICIgKyB0ZXN0TmFtZSk7CisJCQllLmdldFRhcmdldEV4Y2VwdGlvbigpLnByaW50U3RhY2tUcmFjZSh0aGlzLnBhcmFtcy5sb2cpOworCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgcGFyYW1zLmludmFsaWRDb3VudCsrOworCQl9CisgICAgICAgICAgICAgICAgd3JpdGVUZXN0UmVzdWx0KHBhcmFtcy5lcnJvckNvdW50IC0gb2xkQ291bnQsIHBhcmFtcy5pbnZhbGlkQ291bnQgLSBvbGRJbnZhbGlkQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyYW1zLmludmFsaWRDb3VudCsrOworICAgICAgICB9CisgICAgICAgIHBhcmFtcy5pbmRlbnRMZXZlbC0tOworICAgIAorICAgICAgICB3cml0ZVRlc3RSZXN1bHQocGFyYW1zLmVycm9yQ291bnQgLSBvbGRDbGFzc0NvdW50LCBwYXJhbXMuaW52YWxpZENvdW50IC0gb2xkQ2xhc3NJbnZhbGlkQ291bnQpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBydW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChwYXJhbXMgPT0gbnVsbCkgcGFyYW1zID0gbmV3IFRlc3RQYXJhbXMoKTsKKworICAgICAgICAvLyBQYXJzZSB0aGUgdGVzdCBhcmd1bWVudHMuICBUaGV5IGNhbiBiZSBlaXRoZXIgdGhlIGZsYWcKKyAgICAgICAgLy8gIi12ZXJib3NlIiBvciBuYW1lcyBvZiB0ZXN0IG1ldGhvZHMuIENyZWF0ZSBhIGxpc3Qgb2YKKyAgICAgICAgLy8gdGVzdHMgdG8gYmUgcnVuLgorCWJvb2xlYW4gdXNhZ2VFcnJvciA9IGZhbHNlOworICAgICAgICBTZXQgdGVzdE5hbWVzID0gbnVsbDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYXJnc1tpXS5lcXVhbHMoIi12ZXJib3NlIikgfHwgYXJnc1tpXS5lcXVhbHMoIi12IikpIHsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmVyYm9zZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhcmdzW2ldLmVxdWFscygiLXByb21wdCIpKSB7CisgICAgICAgICAgICAgICAgcGFyYW1zLnByb21wdCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbaV0uZXF1YWxzKCItbm90aHJvdyIpIHx8IGFyZ3NbaV0uZXF1YWxzKCItbiIpKSB7CisgICAgICAgICAgICAgICAgcGFyYW1zLm5vdGhyb3cgPSB0cnVlOworCSAgICB9IGVsc2UgaWYgKGFyZ3NbaV0uZXF1YWxzKCItZGVzY3JpYmUiKSkgeworCQlwYXJhbXMuZGVzY3JpYmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzW2ldLnN0YXJ0c1dpdGgoIi1lIikpIHsKKyAgICAgICAgICAgICAgICAvLyBzZWUgYWJvdmUKKyAgICAgICAgICAgICAgICBwYXJhbXMuaW5jbHVzaW9uID0gKGFyZ3NbaV0ubGVuZ3RoKCkgPT0gMikgPyA1IDogSW50ZWdlci5wYXJzZUludChhcmdzW2ldLnN1YnN0cmluZygyKSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5pbmNsdXNpb24gPCAwIHx8IHBhcmFtcy5pbmNsdXNpb24gPiAxMCkgeworICAgICAgICAgICAgICAgICAgICB1c2FnZUVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbaV0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCItZmlsdGVyOiIpKSB7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IGFyZ3NbaV0uc3Vic3RyaW5nKDgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAodGVzdE5hbWVzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdE5hbWVzID0gbmV3IFRyZWVTZXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGVzdE5hbWVzLmFkZChhcmdzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE1hcCB0ZXN0c1RvUnVuID0gbnVsbDsKKyAgICAgICAgaWYgKCF1c2FnZUVycm9yKSB7CisgICAgICAgICAgICB0ZXN0c1RvUnVuID0gZ2V0VGVzdHNUb1J1bih0ZXN0TmFtZXMpOworICAgICAgICB9CisgICAgICAgIGlmICh1c2FnZUVycm9yIHx8CisgICAgICAgICAgICAodGVzdE5hbWVzICE9IG51bGwgJiYgdGVzdHNUb1J1bi5zaXplKCkgIT0gdGVzdE5hbWVzLnNpemUoKSkpIHsKKwkgICAgdXNhZ2UoKTsKKwkgICAgcmV0dXJuOworCX0KKworICAgICAgICBfcnVuKHRlc3RzVG9SdW4pOworCisgICAgICAgIGlmIChwYXJhbXMucHJvbXB0KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpdCBSRVRVUk4gdG8gZXhpdC4uLiIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uaW4ucmVhZCgpOworICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJhbXMubm90aHJvdykgeworICAgICAgICAgICAgU3lzdGVtLmV4aXQocGFyYW1zLmVycm9yQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgd2UgY2FuIHJ1biB0aGlzIHRlc3QgKGFsbG93cyB0ZXN0IHRvIGluc3BlY3QganZtLCBlbnZpcm9ubWVudCwgcGFyYW1zIGJlZm9yZSBydW5uaW5nKQorICAgICAqLworICAgIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCXJldHVybiBudWxsOworICAgIH0KKworICAgIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlTWV0aG9kKFN0cmluZyBuYW1lKSB7CisJcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRNZXRob2REZXNjcmlwdGlvbihTdHJpbmcgbmFtZSkgeworCXJldHVybiBudWxsOworICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIHJ1bihUZXN0Rm13ayBjaGlsZFRlc3QpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBydW4obmV3IFRlc3RGbXdrW10geyBjaGlsZFRlc3QgfSk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgcnVuKFRlc3RGbXdrW10gdGVzdHMpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmb3IgKGludCBpPTA7IGk8dGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHRlc3RzW2ldLnBhcmFtcyA9IHRoaXMucGFyYW1zOworICAgICAgICAgICAgcGFyYW1zLmluZGVudExldmVsKys7CisgICAgICAgICAgICB0ZXN0c1tpXS5fcnVuKCk7CisgICAgICAgICAgICBwYXJhbXMuaW5kZW50TGV2ZWwtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3RlY3RlZCBib29sZWFuIGlzVmVyYm9zZSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcmFtcy52ZXJib3NlOworICAgIH0KKworICAgIC8qKgorICAgICAqIDAgPSBmZXdlc3QgdGVzdHMsIDUgaXMgbm9ybWFsIGJ1aWxkLCAxMCBpcyBtb3N0IHRlc3RzCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJbmNsdXNpb24oKSB7CisgICAgICAgIHJldHVybiBwYXJhbXMuaW5jbHVzaW9uOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzUXVpY2soKSB7CisgICAgICAgIHJldHVybiBwYXJhbXMuaW5jbHVzaW9uID09IDA7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRGaWx0ZXIoKSB7CisgICAgICAgIHJldHVybiBwYXJhbXMuZmlsdGVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZHMgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBsb2cgaWYgd2UgYXJlIGluIHZlcmJvc2UgbW9kZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2coIFN0cmluZyBtZXNzYWdlICkgeworICAgICAgICBsb2cobWVzc2FnZSwgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGxvZ2xuKCBTdHJpbmcgbWVzc2FnZSApIHsKKyAgICAgICAgbG9nbG4obWVzc2FnZSwgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZCBhIGdpdmVuIHN0cmluZyB0byB0aGUgbG9nLgorICAgICAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkCisgICAgICogQHBhcmFtIHBhc3MgaWYgdHJ1ZSBhbmQgaWYgaW4gdmVyYm9zZSBtb2RlLCBvciBpZiBmYWxzZSwgdGhlbiBhZGQKKyAgICAgKiB0aGUgdGV4dDsgb3RoZXJ3aXNlIHN1cHByZXNzIGl0CisgICAgICogQHBhcmFtIGluY3JlbWVudENvdW50IGlmIHBhc3MgaWYgZmFsc2UgYW5kIGluY3JlbWVudENvdW50IGlzIHRydWUsCisgICAgICogdGhlbiBpbmNyZW1lbnQgdGhlIGZhaWx1cmUgY291bnQ7IGlmIHBhc3MgaXMgdHJ1ZSwgdGhlbiB0aGlzIHBhcmFtCisgICAgICogaXMgaWdub3JlZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGxvZyggU3RyaW5nIG1lc3NhZ2UsIGJvb2xlYW4gcGFzcywgYm9vbGVhbiBpbmNyZW1lbnRDb3VudCApIHsKKyAgICAgICAgaWYgKCFwYXNzICYmIGluY3JlbWVudENvdW50KSB7CisgICAgICAgICAgICBwYXJhbXMuZXJyb3JDb3VudCsrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXNzIHx8IHBhcmFtcy52ZXJib3NlKSB7CisgICAgICAgICAgICBpZiAoIXBhcmFtcy5zdXBwcmVzc0luZGVudCkgaW5kZW50KHBhcmFtcy5pbmRlbnRMZXZlbCArIDEpOworICAgICAgICAgICAgcGFyYW1zLmxvZy5wcmludCggbWVzc2FnZSApOworICAgICAgICAgICAgcGFyYW1zLmxvZy5mbHVzaCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXNzICYmICFwYXJhbXMubm90aHJvdykgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24obWVzc2FnZSk7CisgICAgICAgIH0KKworICAgICAgICBwYXJhbXMuc3VwcHJlc3NJbmRlbnQgPSB0cnVlOyAvLyBkb24ndCBpbmRlbnQgb24gc3VjY2Vzc2l2ZSBjYWxscyB0byBsb2coKQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGxvZ2xuKCBTdHJpbmcgbWVzc2FnZSwgYm9vbGVhbiBwYXNzLCBib29sZWFuIGluY3JlbWVudENvdW50ICkgeworICAgICAgICBsb2cobWVzc2FnZSArIFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSwgcGFzcywgaW5jcmVtZW50Q291bnQpOworICAgICAgICBwYXJhbXMuc3VwcHJlc3NJbmRlbnQgPSBmYWxzZTsgLy8gdGltZSB0byBpbmRlbnQgYWdhaW4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBvdmVybG9hZHMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2coIFN0cmluZyBtZXNzYWdlLCBib29sZWFuIHBhc3MgKSB7CisgICAgICAgIGxvZyhtZXNzYWdlLCBwYXNzLCB0cnVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBsb2dsbiggU3RyaW5nIG1lc3NhZ2UsIGJvb2xlYW4gcGFzcyApIHsKKyAgICAgICAgbG9nbG4obWVzc2FnZSwgcGFzcywgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0IGFuIGVycm9yCisgICAgICovCisgICAgcHVibGljIHZvaWQgZXJyKCBTdHJpbmcgbWVzc2FnZSApIHsKKyAgICAgICAgbG9nKG1lc3NhZ2UsIGZhbHNlLCB0cnVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBlcnJsbiggU3RyaW5nIG1lc3NhZ2UgKSB7CisgICAgICAgIGxvZ2xuKG1lc3NhZ2UsIGZhbHNlLCB0cnVlKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgaW50IGdldEVycm9yQ291bnQoKSB7CisgICAgICAgIHJldHVybiBwYXJhbXMuZXJyb3JDb3VudDsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVRlc3ROYW1lKFN0cmluZyB0ZXN0TmFtZSkgeworICAgICAgICBpbmRlbnQocGFyYW1zLmluZGVudExldmVsKTsKKyAgICAgICAgcGFyYW1zLmxvZy5wcmludCh0ZXN0TmFtZSk7CisgICAgICAgIHBhcmFtcy5sb2cuZmx1c2goKTsKKyAgICAgICAgcGFyYW1zLm5lZWRMaW5lRmVlZCA9IHRydWU7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVUZXN0UmVzdWx0KGludCBmYWlsQ291bnQsIGludCBpbnZhbGlkQ291bnQpIHsKKyAgICAgICAgaWYgKCFwYXJhbXMubmVlZExpbmVGZWVkKSB7CisgICAgICAgICAgICBpbmRlbnQocGFyYW1zLmluZGVudExldmVsKTsKKyAgICAgICAgICAgIHBhcmFtcy5sb2cucHJpbnQoIn0iKTsKKyAgICAgICAgfQorICAgICAgICBwYXJhbXMubmVlZExpbmVGZWVkID0gZmFsc2U7CisKKyAgICAgICAgaWYgKGZhaWxDb3VudCAhPSAwKSB7CisgICAgICAgICAgICBwYXJhbXMubG9nLnByaW50bG4oIiBGQUlMRUQgKCIgKyBmYWlsQ291bnQgKyAiIGZhaWx1cmVzIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbnZhbGlkQ291bnQgIT0gMCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiICsgaW52YWxpZENvdW50ICsgIiB0ZXN0cyBza2lwcGVkKSIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnZhbGlkQ291bnQgIT0gMCkgeworICAgICAgICAgICAgcGFyYW1zLmxvZy5wcmludGxuKCIgUXVhbGlmaWVkICgiICsgaW52YWxpZENvdW50ICsgIiB0ZXN0cyBza2lwcGVkKSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyYW1zLmxvZy5wcmludGxuKCIgUGFzc2VkIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIHZvaWQgaW5kZW50KGludCBkaXN0YW5jZSkgeworICAgICAgICBpZiAocGFyYW1zLm5lZWRMaW5lRmVlZCkgeworICAgICAgICAgICAgcGFyYW1zLmxvZy5wcmludGxuKCIgeyIpOworICAgICAgICAgICAgcGFyYW1zLm5lZWRMaW5lRmVlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHBhcmFtcy5sb2cucHJpbnQoc3BhY2VzLnN1YnN0cmluZygwLCBkaXN0YW5jZSAqIDIpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcmludCBhIHVzYWdlIG1lc3NhZ2UgZm9yIHRoaXMgdGVzdCBjbGFzcy4KKyAgICAgKi8KKyAgICB2b2lkIHVzYWdlKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogWy12ZXJib3NlXSBbLW5vdGhyb3ddIFstcHJvbXB0XSBbLWRlc2NyaWJlXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1lPG4+XSBbLWZpbHRlcjo8c3RyPl0gW3Rlc3QgbmFtZXNdIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3B0aW9uczoiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgLXZbZXJib3NlXSBTaG93IGFsbCBvdXRwdXQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgLW5bb3Rocm93XSBNZXNzYWdlIG9uIHRlc3QgZmFpbHVyZSByYXRoZXIgdGhhbiBleGNlcHRpb24iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgLXByb21wdCBQcm9tcHQgYmVmb3JlIGV4aXRpbmciKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgLWRlc2NyaWJlID8iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgLWU8bj4gU2V0IGV4aGF1c3RpdmVuZXNzIGZyb20gMC4uMTAuICBEZWZhdWx0IGlzIDAsIGZld2VzdCB0ZXN0cy5cbiAgICAgICBUbyBydW4gYWxsIHRlc3RzLCBzcGVjaWZ5IC1lMTAuICBHaXZpbmcgLWUgd2l0aCBubyA8bj4gaXNcbiAgICAgICB0aGUgc2FtZSBhcyAtZTUuIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIC1maWx0ZXI6PHN0cj4gPyIpOworCisJYm9vbGVhbiB2YWxpZCA9IHBhcmFtcy5kZXNjcmliZSAmJiB2YWxpZGF0ZSgpOworCWlmICh2YWxpZCkgeworCSAgICBTdHJpbmcgdGVzdERlc2NyaXB0aW9uID0gZ2V0RGVzY3JpcHRpb24oKTsKKwkgICAgaWYgKHRlc3REZXNjcmlwdGlvbiAhPSBudWxsKSB7CisJCVN5c3RlbS5vdXQucHJpbnRsbigiLS0gIiArIHRlc3REZXNjcmlwdGlvbik7CisJICAgIH0KKwl9CisKKyAgICAgICAgSXRlcmF0b3IgdGVzdEVudHJpZXMgPSBnZXRUZXN0RW50cnlJdGVyYXRvcihnZXRBdmFpbGFibGVUZXN0cygpKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgbmFtZXM6Iik7CisgICAgICAgIHdoaWxlKHRlc3RFbnRyaWVzLmhhc05leHQoKSApIHsKKyAgICAgICAgICAgIE1hcC5FbnRyeSBlID0gKE1hcC5FbnRyeSl0ZXN0RW50cmllcy5uZXh0KCk7CisJICAgIFN0cmluZyBtZXRob2ROYW1lID0gKFN0cmluZyllLmdldEtleSgpOworCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcdCIgKyBtZXRob2ROYW1lICk7CisJICAgIGlmICh2YWxpZCkgeworCQlTdHJpbmcgbWV0aG9kRGVzY3JpcHRpb24gPSBnZXRNZXRob2REZXNjcmlwdGlvbihtZXRob2ROYW1lKTsKKwkJaWYgKG1ldGhvZERlc2NyaXB0aW9uICE9IG51bGwpIHsKKwkJICAgIFN5c3RlbS5vdXQucHJpbnQoIiAtLSAiICsgbWV0aG9kRGVzY3JpcHRpb24pOworCQl9CisJICAgIH0KKwkgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBoZXgoY2hhciBjaCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmcgZm9vID0gSW50ZWdlci50b1N0cmluZyhjaCwxNikudG9VcHBlckNhc2UoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGZvby5sZW5ndGgoKTsgaSA8IDQ7ICsraSkgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnMCcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQgKyBmb287CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGhleChpbnQgY2gpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nIGZvbyA9IEludGVnZXIudG9TdHJpbmcoY2gsMTYpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIGZvciAoaW50IGkgPSBmb28ubGVuZ3RoKCk7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzAnKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICsgZm9vOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGhleChTdHJpbmcgcykgeworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgIT0gMCkgcmVzdWx0LmFwcGVuZCgnLCcpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChoZXgocy5jaGFyQXQoaSkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaGV4KFN0cmluZ0J1ZmZlciBzKSB7CisgICAgICAgIHJldHVybiBoZXgocy50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBBU0NJSVdyaXRlciBleHRlbmRzIFByaW50V3JpdGVyIHsKKyAgICAgICAgcHJpdmF0ZSBXcml0ZXIgdzsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hhcmFjdGVycyB0aGF0IHdlIHRoaW5rIGFyZSBwcmludGFibGUgYnV0IHRoYXQgZXNjYXBlVW5wcmludGFibGUKKyAgICAgICAgLy8gZG9lc24ndAorICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVbmljb2RlU2V0IFMgPQorICAgICAgICAgICAgbmV3IFVuaWNvZGVTZXQoIltcXHUwMDA5XFx1MDAwQVxcdTAwMERdIik7CisKKyAgICAgICAgcHVibGljIEFTQ0lJV3JpdGVyKFdyaXRlciB3LCBib29sZWFuIGF1dG9GbHVzaCkgeworICAgICAgICAgICAgc3VwZXIodywgYXV0b0ZsdXNoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBBU0NJSVdyaXRlcihPdXRwdXRTdHJlYW0gb3MsIGJvb2xlYW4gYXV0b0ZsdXNoKSB7CisgICAgICAgICAgICBzdXBlcihvcywgYXV0b0ZsdXNoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHdyaXRlKGludCBjKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQobG9jaykgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICAgICAgaWYgKCFTLmNvbnRhaW5zKGMpICYmIFV0aWxpdHkuZXNjYXBlVW5wcmludGFibGUoYnVmZmVyLCBjKSkgeworICAgICAgICAgICAgICAgICAgICBzdXBlci53cml0ZShidWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3VwZXIud3JpdGUoYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZShjaGFyW10gYnVmLCBpbnQgb2ZmLCBpbnQgbGVuKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKGxvY2spIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgIGludCBsaW1pdCA9IG9mZiArIGxlbjsKKyAgICAgICAgICAgICAgICB3aGlsZSAob2ZmIDwgbGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGMgPSBVVEYxNi5jaGFyQXQoYnVmLCAwLCBidWYubGVuZ3RoLCBvZmYpOworICAgICAgICAgICAgICAgICAgICBvZmYgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIVMuY29udGFpbnMoYykgJiYgVXRpbGl0eS5lc2NhcGVVbnByaW50YWJsZShidWZmZXIsIGMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBlci53cml0ZShidWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIud3JpdGUoYyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGUoU3RyaW5nIHMsIGludCBvZmYsIGludCBsZW4pIHsKKyAgICAgICAgICAgIHdyaXRlKHMuc3Vic3RyaW5nKG9mZiwgb2ZmICsgbGVuKS50b0NoYXJBcnJheSgpLCAwLCBsZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdFBhcmFtcyB7CisgICAgICAgIHB1YmxpYyBib29sZWFuICAgcHJvbXB0ID0gZmFsc2U7CisgICAgICAgIHB1YmxpYyBib29sZWFuICAgbm90aHJvdyA9IGZhbHNlOworICAgICAgICBwdWJsaWMgYm9vbGVhbiAgIHZlcmJvc2UgPSBmYWxzZTsKKwlwdWJsaWMgYm9vbGVhbiAgIGRlc2NyaWJlID0gZmFsc2U7CisgICAgICAgIHB1YmxpYyBpbnQgICAgICBpbmNsdXNpb24gPSAwOworICAgICAgICBwdWJsaWMgU3RyaW5nICAgIGZpbHRlciA9IG51bGw7CisKKyAgICAgICAgcHVibGljIFByaW50V3JpdGVyIGxvZyA9IG5ldyBBU0NJSVdyaXRlcihTeXN0ZW0ub3V0LCB0cnVlKTsKKyAgICAgICAgcHVibGljIGludCAgICAgICAgIGluZGVudExldmVsID0gMDsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gICAgIG5lZWRMaW5lRmVlZCA9IGZhbHNlOworICAgICAgICBwdWJsaWMgYm9vbGVhbiAgICAgc3VwcHJlc3NJbmRlbnQgPSBmYWxzZTsKKyAgICAgICAgcHVibGljIGludCAgICAgICAgIGVycm9yQ291bnQgPSAwOworICAgICAgICBwdWJsaWMgaW50ICAgICAgICAgaW52YWxpZENvdW50ID0gMDsKKyAgICB9CisKKyAgICBwcml2YXRlIFRlc3RQYXJhbXMgcGFyYW1zID0gbnVsbDsKKyAgICBwcml2YXRlIE1hcCB0ZXN0TWV0aG9kczsKKyAgICBwcml2YXRlIFNldCB0ZXN0c1RvUnVuOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHNwYWNlcyA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3RMb2cuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0TG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzFhODhlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0TG9nLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0TG9nLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMjowMjoxNiAkCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdDsKKworcHVibGljIGludGVyZmFjZSBUZXN0TG9nIHsKKworICAgIC8qKgorICAgICAqIEFkZHMgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBsb2cgaWYgd2UgYXJlIGluIHZlcmJvc2UgbW9kZS4KKyAgICAgKi8KKyAgICB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSk7CisKKyAgICB2b2lkIGxvZ2xuKFN0cmluZyBtZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFJlcG9ydCBhbiBlcnJvcgorICAgICAqLworICAgIHZvaWQgZXJyKFN0cmluZyBtZXNzYWdlKTsKKworICAgIHZvaWQgZXJybG4oU3RyaW5nIG1lc3NhZ2UpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3RVdGlsLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGRjMGJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L1Rlc3RVdGlsLmphdmEKQEAgLTAsMCArMSw4NSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0VXRpbC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjI6MDI6MTYgJAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworcHVibGljIGNsYXNzIFRlc3RVdGlsIHsKKwkvKioKKwkgKiBTdGFuZGFyZCBwYXRoIHRvIHRoZSB0ZXN0IGRhdGEuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9QQVRIID0gIi9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEiOworCisJLyoqCisJICogUHJvcGVydHkgZm9yIHVzZXItZGVmaW5lZCBkYXRhIHBhdGguCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9QQVRIX1BST1BFUlRZID0gIklDVURhdGFQYXRoIjsKKworCS8qKgorCSAqIEdldCBwYXRoIHRvIHRlc3QgZGF0YS48cD4KKwkgKiAKKwkgKiBwYXRoIGlzIHByb3ZpZGVkIHJlbGF0aXZlIHRvIHRoZSBzcmMgcGF0aCwgaG93ZXZlciB0aGUgdXNlciBjb3VsZCAKKwkgKiBzZXQgYSBzeXN0ZW0gcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkaXJlY3RvcnkgcGF0aC48YnI+CisJICovCisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIEZpbGUgZ2V0RGF0YVBhdGhSb290KCkgeworCQlTdHJpbmcgcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eShEQVRBX1BBVEhfUFJPUEVSVFkpOworCQlpZiAocyA9PSBudWxsKSB7CisJCQkvLyBhc3N1bWUgdXNlci5kaXIgaXMgZGlyZWN0bHkgYWJvdmUgc3JjIGRpcmVjdG9yeQorCQkJcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKTsKKwkJCXMgPSBzICsgREFUQV9QQVRIOworCQl9CisJCQorCQlGaWxlIGYgPSBuZXcgRmlsZShzKTsKKwkJaWYgKCFmLmV4aXN0cygpKSB7CisJCQl0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiY2Fubm90IGZpbmQgSUNVIGRhdGEgcm9vdCAnIiArIGYuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiJywgdHJ5IGRlZmluaW5pbmcgIiArIERBVEFfUEFUSF9QUk9QRVJUWSk7CisJCX0KKworCQlyZXR1cm4gZjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIGRhdGEgZmlsZSBhdCBwYXRoICduYW1lJyByb290ZWQgYXQgdGhlIGRhdGEgcGF0aC4KKwkgKiBGb3IgZXhhbXBsZSwgPHByZT5nZXREYXRhRmlsZSgidW5pY29kZS9Vbmljb2RlRGF0YS50eHQiKTs8L3ByZT4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEZpbGUgZ2V0RGF0YUZpbGUoU3RyaW5nIG5hbWUpIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUoZ2V0RGF0YVBhdGhSb290KCksIG5hbWUpOworCQlpZiAoIWYuZXhpc3RzKCkpIHsKKwkJCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJjYW5ub3QgZmluZCBJQ1UgZGF0YSBmaWxlICciICsgZi5nZXRBYnNvbHV0ZVBhdGgoKSArICInIik7CisJCX0KKworCQlyZXR1cm4gZjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gYSBidWZmZXJlZCByZWFkZXIgb24gdGhlIGRhdGEgZmlsZSBhdCBwYXRoICduYW1lJyByb290ZWQgYXQgdGhlIGRhdGEgcGF0aAorCSAqIHdpdGggaW5pdGlhbCBidWZmZXIgc2l6ZSAnYnVmU2l6ZScuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBCdWZmZXJlZFJlYWRlciBnZXREYXRhUmVhZGVyKFN0cmluZyBuYW1lLCBpbnQgYnVmU2l6ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gZ2V0RGF0YUZpbGUobmFtZSk7CisJCUZpbGVSZWFkZXIgZnIgPSBuZXcgRmlsZVJlYWRlcihmKTsKKwkJQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoZnIsIGJ1ZlNpemUpOworCQlyZXR1cm4gYnI7CisJfQorCisJLyoqCisJICogUmV0dXJuIGEgYnVmZmVyZWQgcmVhZGVyIG9uIHRoZSBkYXRhIGZpbGUgYXQgcGF0aCAnbmFtZScgcm9vdGVkIGF0IHRoZSBkYXRhIHBhdGguCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBCdWZmZXJlZFJlYWRlciBnZXREYXRhUmVhZGVyKFN0cmluZyBuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gZ2V0RGF0YVJlYWRlcihuYW1lLCAxMDI0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9iaWdkZWMvRGlhZ0JpZ0RlY2ltYWwuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9iaWdkZWMvRGlhZ0JpZ0RlY2ltYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mY2U4OTMzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2JpZ2RlYy9EaWFnQmlnRGVjaW1hbC5qYXZhCkBAIC0wLDAgKzEsNTM0MiBAQAorLyogR2VuZXJhdGVkIGZyb20gJ0RpYWdCaWdEZWNpbWFsLm5yeCcgMjcgTWFyIDIwMDAgMjI6Mzg6NDQgW3YxLjE2Ml0gKi8KKy8qIE9wdGlvbnM6IEJpbmFyeSBDb21tZW50cyBDcm9zc3JlZiBGb3JtYXQgSmF2YSBMb2dvIFRyYWNlMSBWZXJib3NlMyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5iaWdkZWM7CitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CitpbXBvcnQgY29tLmlibS5pY3UubWF0aC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERlY2ltYWwgZGlhZ25vc3RpYyB0ZXN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mYyAqLworLyogQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24gMTk5NiwgMjAwMC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERpYWdCaWdEZWNpbWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIEEgY2xhc3MgdGhhdCB0ZXN0cyB0aGUgQmlnRGVjaW1hbCBhbmQgTWF0aENvbnRleHQgY2xhc3Nlcy4gICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBUaGUgdGVzdHMgaGVyZSBhcmUgZGVyaXZlZCBmcm9tIG9yIGNvdmVyIHRoZSBzYW1lIHBhdGhzIGFzOiAgICAgICovCisvKiAgICAgIC0tIEFOU0kgWDMtMjc0IHRlc3RjYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgLS0gSmF2YSBKQ0sgdGVzdGNhc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAtLSBOZXRSZXh4IHRlc3RjYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIC0tIFZNL0NNUyBTLzM3MCBSRVhYIGltcGxlbWVudGF0aW9uIHRlc3RjYXNlcyBbMTk4MStdICAgICAgICAgKi8KKy8qICAgICAgLS0gSUJNIFZpZW5uYSBMYWJvcmF0b3J5IFJleHggY29tcGlsZXIgdGVzdGNhc2VzIFsxOTg4K10gICAgICAqLworLyogICAgICAtLSBOZXcgdGVzdGNhc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgVGhlIGF1dGhvcml0YXRpdmUgc291cmNlcyBmb3IgaG93IHRoZSB1bmRlcmx5aW5nIHRlY2hub2xvZ3kgICAgICAqLworLyogICAoYXJpdGhtZXRpYykgc2hvdWxkIHdvcmsgYXJlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIC0tIGZvciBkaWdpdHM9MCAoZml4ZWQgcG9pbnQpOiBqYXZhLm1hdGguQmlnRGVjaW1hbCAgICAgICAgICAgKi8KKy8qICAgICAgLS0gZm9yIGRpZ2l0cz4wIChmbG9hdGluZyBwb2ludCk6IEFOU0kgWDMuMjc0LTE5OTYgKyBlcnJhdGEgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENoYW5nZSBsaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5Ny4wOS4wNSBJbml0aWFsIGltcGxlbWVudGF0aW9uLCBmcm9tIERpYWdSZXh4IFtOZXRSZXh4IHRlc3RzXSAgICovCisvKiAxOTk4LjA1LjAyIDAuMDcgY2hhbmdlcyAoZS5nLiwgY29tcGFyZVRvKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTguMDYuMDYgUm91bmRpbmcgbW9kZXMgYW5kIGZvcm1hdCBhZGRpdGlvbnMgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5OC4wNi4yNSBSZW5hbWUgZnJvbSBEaWFnRGVjaW1hbDsgbWFrZSBzdGFuZC1hbG9uZSBbYWRkICAgICAgICAgICovCisvKiAgICAgICAgICAgIERpYWdFeGNlcHRpb24gYXMgYSBNaW5vciBjbGFzc10gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTguMDYuMjcgU3RhcnQgYWRkaW5nIHRlc3RjYXNlcyBmb3IgRElHSVRTPTAvRk9STT1QTEFJTiBjYXNlcyAgICAqLworLyogICAgICAgICAgICBSZW9yZ2FuaXplIGZvciBmYXN0ZXIgdHJhY2UgY29tcGlsYXRpb24gICAgICAgICAgICAgICAgICovCisvKiAxOTk4LjA2LjI4IG5ldzogdmFsdWVvZiwgc2NhbGUsIG1vdmVQb2ludFgsIHVuc2NhbGVkVmFsdWUsIGV0Yy4gICAgKi8KKy8qIDE5OTguMDcuMDcgU2NhbGVkIGRpdmlkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5OC4wNy4wOCBzZXRTY2FsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk4LjA3LjE1IG5ldyBzY2FmZm9sZGluZyAoTWlub3IgVGVzdCBjbGFzcykgLS0gc2VlIGRpYWdhYnMgICAgICAgKi8KKy8qIDE5OTguMTIuMTQgYWRkIHRvQmlnRGVjaW1hbCBhbmQgQmlnRGVjaW1hbChqYXZhLm1hdGguQmlnRGVjaW1hbCkgICAqLworLyogMTk5OS4wMi4wNCBudW1iZXIgcHJlcGFyYXRpb24gcm91bmRzIGluc3RlYWQgb2YgZGlnaXRzKzEgdHJ1bmMgICAgICovCisvKiAxOTk5LjAyLjA5IGZvcm1hdCBtZXRob2Qgbm93IG9ubHkgaGFzIHR3byBzaWduYXR1cmVzICAgICAgICAgICAgICAgKi8KKy8qIDE5OTkuMDIuMjcgbm8gbG9uZ2VyIHVzZSBSZXh4IGNsYXNzIG9yIFJleHhJTyBjbGFzcyAgICAgICAgICAgICAgICAqLworLyogMTk5OS4wMy4wNSBhZGQgTWF0aENvbnRleHQgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk5LjAzLjA1IHVwZGF0ZSBmb3IgMC45NiBbbm8gbnVsbCBzZXR0aW5ncywgZXRjLl0gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgZHJvcCBzdW5kcnkgY29uc3RydWN0b3JzOyBubyBibGFua3M7IGNoYXJbXSBnZXRzIGludHMgICAqLworLyogICAgICAgICAgICBkcm9wIHN1bmRyeSBjb252ZXJ0ZXJzLCBhZGQgRXhhY3QgY29udmVydGVycyAgICAgICAgICAgICovCisvKiAxOTk5LjA1LjI3IGFkZGl0aW9uYWwgdGVzdHMgZm9yIHNjYWxlZCBhcml0aG1ldGljICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTkuMDYuMjkgYWRkaXRpb25hbCB0ZXN0cyBmb3IgZXhwb25lbnQgb3ZlcmZsb3dzICAgICAgICAgICAgICAgICAqLworLyogMTk5OS4wNy4wMyBhZGQgJ2NvbnRpbnVlJyBvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk5LjA3LjEwIGFkZGl0aW9uYWwgdGVzdHMgZm9yIHNjYWxlZCBhcml0aG1ldGljICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTkuMDcuMTggcmFuZG9tbHktZ2VuZXJhdGVkIHRlc3RzIGFkZGVkIGZvciBiYXNlIG9wZXJhdG9ycyAgICAgICAqLworLyogMTk5OS4xMC4yOCB3ZWlyZCBpbnRWYWx1ZUV4YWN0IGJhZCBjYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk5LjEyLjIxIG11bHRpcGxpY2F0aW9uIGZhc3QgcGF0aCBmYWlsdXJlIGFuZCBlZGdlIGNhc2VzICAgICAgICAgKi8KKy8qIDIwMDAuMDEuMDEgY29weXJpZ2h0IHVwZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogMjAwMC4wMy4yNiBjb3NtZXRpYyB1cGRhdGVzOyBhZGQgZXh0cmEgZm9ybWF0KCkgdGVzdGNhc2VzICAgICAgICAgICovCisvKiAyMDAwLjAzLjI3IDEuMDAgbW92ZSB0byBjb20uaWJtLmljdS5tYXRoIHBhY2thZ2U7IG9wZW4gc291cmNlIHJlbGVhc2U7ICovCisvKiAgICAgICAgICAgICAgICAgY2hhbmdlIHRvIGphdmFkb2MgY29tbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvLyBub3RlIEJJTkFSWSBmb3IgY29udmVyc2lvbnMgY2hlY2tpbmcKKworCisKKworLyoqCisgKiBUaGUgPGNvZGU+RGlhZ0JpZ0RlY2ltYWw8L2NvZGU+IGNsYXNzIGZvcm1zIGEgc3RhbmRhbG9uZSB0ZXN0IHN1aXRlCisgKiBmb3IgdGhlIDxjb2RlPmNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbDwvY29kZT4gYW5kCisgKiA8Y29kZT5jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0PC9jb2RlPiBjbGFzc2VzIChvciwgYnkgY2hhbmdpbmcgdGhlCisgKiA8Y29kZT5wYWNrYWdlPC9jb2RlPiBzdGF0ZW1lbnQsIG90aGVyIGNsYXNzZXMgb2YgdGhlIHNhbWUgbmFtZXMgYW5kCisgKiBkZWZpbml0aW9uIGluIG90aGVyIHBhY2thZ2VzKS4gIEl0IG1heSBhbHNvIGJlIHVzZWQgYXMgYSBjb25zdHJ1Y3RlZAorICogb2JqZWN0IHRvIGVtYmVkIHRoZSB0ZXN0cyBpbiBhbiBleHRlcm5hbCB0ZXN0IGhhcm5lc3MuCisgKiA8cD4KKyAqIFRoZSB0ZXN0cyBhcmUgY29sbGVjdGVkIGludG8gPGk+Z3JvdXBzPC9pPiwgZWFjaCBjb3JyZXNwb25kaW5nIHRvIGEKKyAqIHRlc3RlZCBtZXRob2Qgb3IgYSBtb3JlIGdlbmVyYWwgZ3JvdXBpbmcuICBCeSBkZWZhdWx0LCB3aGVuIHJ1biBmcm9tCisgKiB0aGUgc3RhdGljIHtAbGluayAjbWFpbihqYXZhLmxhbmcuU3RyaW5nW10pfSBtZXRob2QsIHRoZSBydW4gd2lsbCBlbmQKKyAqIGlmIGFueSB0ZXN0IGZhaWxzIGluIGEgZ3JvdXAuICBUaGUgPGNvZGU+Y29udGludWU8L2NvZGU+IGFyZ3VtZW50IG1heQorICogYmUgc3BlY2lmaWVkIHRvIGZvcmNlIHRoZSB0ZXN0cyB0byBydW4gdG8gY29tcGxldGlvbi4KKyAqIDxwPgorICogVHdvIG1pbm9yIChpbm5lcikgY2xhc3NlcyBhcmUgdXNlZDsge0BsaW5rCisgKiBEaWFnQmlnRGVjaW1hbC5EaWFnRXhjZXB0aW9ufSBpcyB1c2VkIHRvIHNpZ25hbCB0aGUgZmFpbHVyZSBvZiBhIHRlc3QKKyAqIGdyb3VwLCBhbmQge0BsaW5rIERpYWdCaWdEZWNpbWFsLlRlc3R9LCBhIGRlcGVuZGVudCBtaW5vciBjbGFzcywgaXMKKyAqIHVzZWQgdG8gcmVnaXN0ZXIgdGVzdHMgc28gdGhhdCBhIHN1bW1hcnkgb2YgZmFpbHVyZXMgKG9yIHN1Y2Nlc3MpIGNhbiBiZQorICogcHJlc2VudGVkIGFzIGVhY2ggZ3JvdXAgaXMgY29tcGxldGVkLgorICoKKyAqIEBzZWUgICAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbAorICogQHNlZSAgICAgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dAorICogQHZlcnNpb24gMS4wMCAyMDAwLjAzLjI3CisgKiBAYXV0aG9yICBNaWtlIENvd2xpc2hhdworICovCisKK3B1YmxpYyBjbGFzcyBEaWFnQmlnRGVjaW1hbCBleHRlbmRzIFRlc3RGbXdreworIHByaXZhdGUgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgJDA9IkRpYWdCaWdEZWNpbWFsLm5yeCI7CisgCisgLyogcHJvcGVydGllcyBzaGFyZWQgKi8KKyBqYXZhLnV0aWwuVmVjdG9yIFRlc3RzPW5ldyBqYXZhLnV0aWwuVmVjdG9yKDEwMCk7IC8vIHNjYWZmb2xkaW5nCisgCisgLyogcHJvcGVydGllcyBwcml2YXRlICovCisgcHJpdmF0ZSBpbnQgdG90YWxjb3VudD0wOyAvLyBjb3VudHMgdGVzdHMgcnVuCisgCisgLyogcHJvcGVydGllcyBjb25zdGFudCBwcml2YXRlICovCisgCisgLyogQ291bnQgb2YgdGVzdCBncm91cHMgKi8KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgdGVzdGNvdW50PTM4OworIAorIHByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCB6ZXJvPWNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5aRVJPOworIHByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBvbmU9Y29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgdHdvPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMik7CisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHRlbj1jb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuVEVOOworIHByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCB0ZW5sb25nPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoKGxvbmcpMTIzNDU1NDMyMSk7IC8vIDEwLWRpZ2l0ZXIKKyAKKyAvKiBTb21lIGNvbnRleHQgb2JqZWN0cyAtLSBbc29tZSBvZiB0aGVzZSBhcmUgY2hlY2tlZCBsYXRlcl0gKi8KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jZGVmPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuREVGQVVMVDsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jMz1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgzKTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jNj1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCg2KTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jOT1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCg5KTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jNTA9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoNTApOworIHByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgbWNzPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDksY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDKTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jZT1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCg5LGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuRU5HSU5FRVJJTkcpOworIHByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgbWNsZD1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCg5LGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuU0NJRU5USUZJQyx0cnVlKTsgLy8gbG9zdCBkaWdpdHMKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jbGQwPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDLHRydWUpOyAvLyBsb3N0IGRpZ2l0cywgZGlnaXRzPTAKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jZmQ9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOKTsgLy8gZml4ZWQgZGVjaW1hbCBzdHlsZQorIAorIC8qIGJvdW5kYXJ5IHByaW1pdGl2ZSB2YWx1ZXMgKi8KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIGJtaW49LTEyODsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIGJtYXg9MTI3OworIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgYnplcj0wOworIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgYm5lZz0tMTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIGJwb3M9MTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgaW1pbj0tMjE0NzQ4MzY0ODsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgaW1heD0yMTQ3NDgzNjQ3OworIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBpemVyPTA7CisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGluZWc9LTE7CisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGlwb3M9MTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIGxtaW49LTkyMjMzNzIwMzY4NTQ3NzU4MDhMOworIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgbG1heD05MjIzMzcyMDM2ODU0Nzc1ODA3TDsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIGx6ZXI9KGxvbmcpMDsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIGxuZWc9KGxvbmcpLTE7CisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBscG9zPShsb25nKTE7CisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgc21pbj0tMzI3Njg7CisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgc21heD0zMjc2NzsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBzemVyPShzaG9ydCkwOworIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IHNuZWc9KHNob3J0KSgtMSk7CisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgc3Bvcz0oc2hvcnQpMTsKKyAKKyAKKyAvKiBwcm9wZXJ0aWVzIGNvbnN0YW50IHByaXZhdGUgdW51c2VkICovIC8vIHByZXNlbnQgYnV0IG5vdCByZWZlcmVuY2VkCisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBjb3B5cmlnaHQ9IiBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiAxOTk2LCAyMDAwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIjsKKworIAorIC8qKiBDb25zdHJ1Y3RzIGEgPGNvZGU+RGlhZ0JpZ0RlY2ltYWw8L2NvZGU+IHRlc3Qgc3VpdGUuCisgICAqIDxwPgorICAgKiBJbnZva2UgaXRzIHtAbGluayAjZGlhZ3J1bn0gbWV0aG9kIHRvIHJ1biB0aGUgdGVzdHMuCisgICAqLworIAorIHB1YmxpYyBEaWFnQmlnRGVjaW1hbCgpe3N1cGVyKCk7CisgIHJldHVybjsKKyAgfQorCisgLyoqIFJ1biB0aGUgdGVzdHMgaW4gdGhlIHRlc3Qgc3VpdGUuCisgICoKKyAgKiBAcGFyYW0gaXNDb250aW51ZSBUaGUgPGNvZGU+Ym9vbGVhbjwvY29kZT4gd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyCisgICogICAgICAgICAgICAgICAgICAgdG8gc3RvcCBydW5uaW5nIGFmdGVyIGEgZ3JvdXAgZmFpbHMuICBJZiAxICh0cnVlKQorICAqICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIHRlc3RzIHNob3VsZCBiZSBydW4gdG8gY29tcGxldGlvbiBpZgorICAqICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlOyBpZiAwIChmYWxzZSkgdGhlbiB0aGUgcnVuIHdpbGwgZW5kIGlmIGEKKyAgKiAgICAgICAgICAgICAgICAgICBncm91cCBmYWlscy4KKyAgKiBAcmV0dXJuIGFuIDxjb2RlPmludDwvY29kZT4gd2hpY2ggaXMgMCBpZiBhbGwgdGVzdHMgd2VyZQorICAqIHN1Y2Nlc3NmdWwsID4wICh0aGUgY291bnQgb2YgZmFpbHVyZXMpIGlmIHNvbWUgZmFpbHVyZXMgd2VyZQorICAqIGRldGVjdGVkLCBvciA8MCBpZiBhbiB1bmV4cGVjdGVkIEV4Y2VwdGlvbiB3YXMgc2lnbmFsbGVkLgorICAqLworIAorIHB1YmxpYyBpbnQgZGlhZ3J1bihib29sZWFuIGlzQ29udGludWUpeworICBpbnQgZmFpbHM7CisgIGludCBudW09MDsKKyAgRGlhZ0V4Y2VwdGlvbiBkZT1udWxsOworICBqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbiBlPW51bGw7CisgIGphdmEubGFuZy5TdHJpbmcgcmVzdD1udWxsOworICAKKyAgZmFpbHM9MDsgLy8gY291bnQgb2YgZmFpbHVyZXMKKyAgdHJ5e251bT0xO251bTpmb3IoO251bTw9dGVzdGNvdW50O251bSsrKXsgLy8gW3Rlc3Rjb3VudCBpcyBjb25zdGFudCBzZXQgYWJvdmVdCisgICB0cnl7CisgICAgZG90ZXN0KG51bSk7CisgICB9CisgICBjYXRjaCAoRGlhZ0V4Y2VwdGlvbiAkMSl7ZGU9JDE7CisgICAgc2F5KCk7CisgICAgZXJybG4oIioqKiogRmFpbGVkOiIrIiAiK2RlLmdldE1lc3NhZ2UoKSsiICIrIioqKioiKTsKKyAgICBzYXkoKTsKKyAgICBmYWlscz1mYWlscytkZS5mYWlsY291bnQ7CisgICAgaWYgKCghaXNDb250aW51ZSkpIAorICAgICBicmVhayBudW07CisgICB9CisgICB9CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uICQyKXtlPSQyOyAvLyBhbnkgb3RoZXIgZXhjZXB0aW9uIGlzIHRvdGFsIGZhaWx1cmU7IGp1c3Qgc2hvdyB0cmFjZSBhbmQgcXVpdAorICAgc2F5KCk7CisgICBlcnJsbigiKioqKiBGYWlsZWQ6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uICoqKioiKTsKKyAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICByZXR1cm4gLTE7CisgIH0vKm51bSovCisgIAorICBpZiAoZmFpbHM9PTApIAorICAgc2F5KCItLS0gQWxsIE9LIC0tLSIrIiAiK3JpZ2h0KCJbIit0b3RhbGNvdW50KyIgIisidGVzdHNdIiwxNSkpOworICBlbHNlIAorICAgeworICAgIGlmIChpc0NvbnRpbnVlKSAKKyAgICAgeworICAgICAgaWYgKGZhaWxzPjEpIAorICAgICAgIHJlc3Q9InRlc3RzIjsKKyAgICAgIGVsc2UgCisgICAgICAgcmVzdD0idGVzdCI7CisgICAgICBzYXkoIi0tLSBBbGwgcnVuIC0tLSIrIiAiK3JpZ2h0KCJbIit0b3RhbGNvdW50KyIgIisidGVzdHMsIiwxNCkrIiAiKyJmYWlsZWQiKyIgIitmYWlscysiICIrcmVzdCsiXSIpOworICAgICAKKyAgICAgfQorICAgfQorICAKKyAgcmV0dXJuIGZhaWxzOworICB9CisKKyAvKiBSdW4gdGVzdCBieSBudW1iZXIgLS0gbWV0aG9kIGZvciBkZXZlbG9wbWVudC9wcml2YXRlIHN3aXRjaGluZyAqLworIAorIHByaXZhdGUgdm9pZCBkb3Rlc3QoaW50IG51bSl7CisgIHsvKnNlbGVjdCovc3dpdGNoKG51bSl7CisgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgLyogTWF0aENvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIGNhc2UgMToKKyAgIGRpYWdtYXRoY29udGV4dCgpO2JyZWFrOworICAgCisgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgLyogQ29uc3RydWN0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIGNhc2UgMjoKKyAgIGRpYWdjb25zdHJ1Y3RvcnMoKTticmVhazsKKyAgIAorICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgIC8qIE9wZXJhdG9yIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBjYXNlIDM6CisgICBkaWFnYWJzKCk7YnJlYWs7CisgIGNhc2UgNDoKKyAgIGRpYWdhZGQoKTticmVhazsKKyAgY2FzZSA1OgorICAgZGlhZ2NvbXBhcmV0bygpO2JyZWFrOworICBjYXNlIDY6CisgICBkaWFnZGl2aWRlKCk7YnJlYWs7CisgIGNhc2UgNzoKKyAgIGRpYWdkaXZpZGVJbnRlZ2VyKCk7YnJlYWs7CisgIGNhc2UgODoKKyAgIGRpYWdtYXgoKTticmVhazsKKyAgY2FzZSA5OgorICAgZGlhZ21pbigpO2JyZWFrOworICBjYXNlIDEwOgorICAgZGlhZ211bHRpcGx5KCk7YnJlYWs7CisgIGNhc2UgMTE6CisgICBkaWFnbmVnYXRlKCk7YnJlYWs7CisgIGNhc2UgMTI6CisgICBkaWFncGx1cygpO2JyZWFrOworICBjYXNlIDEzOgorICAgZGlhZ3BvdygpO2JyZWFrOworICBjYXNlIDE0OgorICAgZGlhZ3JlbWFpbmRlcigpO2JyZWFrOworICBjYXNlIDE1OgorICAgZGlhZ3N1YnRyYWN0KCk7YnJlYWs7CisgIGNhc2UgMTY6CisgICBkaWFnbWF0aCgpO2JyZWFrOyAvLyBnZW5lcmFsIG1hdGgKKyAgIAorICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgIC8qIE90aGVyIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBjYXNlIDE3OgorICAgZGlhZ2J5dGVWYWx1ZSgpO2JyZWFrOworICBjYXNlIDE4OgorICAgZGlhZ2NvbXBhcmV0b09iaigpO2JyZWFrOworICBjYXNlIDE5OgorICAgZGlhZ2RvdWJsZXZhbHVlKCk7YnJlYWs7CisgIGNhc2UgMjA6CisgICBkaWFnZXF1YWxzKCk7YnJlYWs7CisgIGNhc2UgMjE6CisgICBkaWFnZmxvYXR2YWx1ZSgpO2JyZWFrOworICBjYXNlIDIyOgorICAgZGlhZ2Zvcm1hdCgpO2JyZWFrOworICBjYXNlIDIzOgorICAgZGlhZ2hhc2hjb2RlKCk7YnJlYWs7CisgIGNhc2UgMjQ6CisgICBkaWFnaW50dmFsdWUoKTticmVhazsKKyAgY2FzZSAyNToKKyAgIGRpYWdsb25ndmFsdWUoKTticmVhazsKKyAgY2FzZSAyNjoKKyAgIGRpYWdtb3ZlcG9pbnRsZWZ0KCk7YnJlYWs7CisgIGNhc2UgMjc6CisgICBkaWFnbW92ZXBvaW50cmlnaHQoKTticmVhazsKKyAgY2FzZSAyODoKKyAgIGRpYWdzY2FsZSgpO2JyZWFrOworICBjYXNlIDI5OgorICAgZGlhZ3NldHNjYWxlKCk7YnJlYWs7CisgIGNhc2UgMzA6CisgICBkaWFnc2hvcnR2YWx1ZSgpO2JyZWFrOworICBjYXNlIDMxOgorICAgZGlhZ3NpZ251bSgpO2JyZWFrOworICBjYXNlIDMyOgorICAgZGlhZ3RvYmlnZGVjaW1hbCgpO2JyZWFrOworICBjYXNlIDMzOgorICAgZGlhZ3RvYmlnaW50ZWdlcigpO2JyZWFrOworICBjYXNlIDM0OgorICAgZGlhZ3RvY2hhcmFycmF5KCk7YnJlYWs7CisgIGNhc2UgMzU6CisgICBkaWFndG9zdHJpbmcoKTticmVhazsKKyAgY2FzZSAzNjoKKyAgIGRpYWd1bnNjYWxlZHZhbHVlKCk7YnJlYWs7CisgIGNhc2UgMzc6CisgICBkaWFndmFsdWVvZigpO2JyZWFrOworICAgCisgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgLyogTXV0YXRpb24gdGVzdCBbbXVzdCBiZSB0aGUgbGFzdCB0ZXN0XSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIGNhc2UgMzg6CisgICBkaWFnbXV0YXRpb24oKTticmVhazsKKyAgIC8vIGlmIGFueSBtb3JlLCBpbmNyZWFzZSB0ZXN0Y291bnQgYWJvdmUKKyAgZGVmYXVsdDp7CisgICBzYXkoIioqKiBkb3Rlc3QgY2FzZSBub3QgZm91bmQ6IisiICIrbnVtKyIgIisiKioqIik7CisgIH19CisgIH0KKyAgcmV0dXJuOworICB9CisKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAvKiBEaWFnbm9zdGljIGdyb3VwIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAvKiogVGVzdCBjb25zdHJ1Y3RvcnMgKGFuZCB7QGxpbmsgI3RvU3RyaW5nKCl9IGZvciBlcXVhbGl0aWVzKS4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnY29uc3RydWN0b3JzKCl7CisgIGJvb2xlYW4gZmxhZz1mYWxzZTsKKyAgamF2YS5sYW5nLlN0cmluZyBudW07CisgIGphdmEubWF0aC5CaWdJbnRlZ2VyIGJpcDsKKyAgamF2YS5tYXRoLkJpZ0ludGVnZXIgYml6OworICBqYXZhLm1hdGguQmlnSW50ZWdlciBiaW47CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBiZGE7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBiZGI7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBibWM7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBibWQ7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBibWU7CisgIGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uIGU9bnVsbDsKKyAgY2hhciBjYVtdOworICBkb3VibGUgZHplcjsKKyAgZG91YmxlIGRwb3M7CisgIGRvdWJsZSBkbmVnOworICBkb3VibGUgZHBvczU7CisgIGRvdWJsZSBkbmVnNTsKKyAgZG91YmxlIGRtaW47CisgIGRvdWJsZSBkbWF4OworICBkb3VibGUgZDsKKyAgamF2YS5sYW5nLlN0cmluZyBiYWRzdHJpbmdzW107CisgIGludCBpPTA7CisgIAorICAvLyBjb25zdGFudHMgW3N0YXRpY2FsbHktY2FsbGVkIGNvbnN0cnVjdG9yc10KKyAgKG5ldyBUZXN0KCJjb24wMDEiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5aRVJPLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImNvbjAwMiIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJjb24wMDMiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5URU4udG9TdHJpbmcoKSkuZXF1YWxzKCIxMCIpOworICAobmV3IFRlc3QoImNvbjAwNCIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLlpFUk8uaW50VmFsdWVFeGFjdCgpKT09MDsKKyAgKG5ldyBUZXN0KCJjb24wMDUiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUuaW50VmFsdWVFeGFjdCgpKT09MTsKKyAgKG5ldyBUZXN0KCJjb24wMDYiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5URU4uaW50VmFsdWVFeGFjdCgpKT09MTA7CisgIAorICAvLyBbamF2YS5tYXRoLl0gQmlnRGVjaW1hbAorICAobmV3IFRlc3QoImNiZDAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKCIwIikpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJjYmQwMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCgiMSIpKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgiY2JkMDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpKS50b1N0cmluZygpKS5lcXVhbHMoIjEwIik7CisgIChuZXcgVGVzdCgiY2JkMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAiKSkpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMCIpOworICAobmV3IFRlc3QoImNiZDAwNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKCIxMC4wIikpKS50b1N0cmluZygpKS5lcXVhbHMoIjEwLjAiKTsKKyAgKG5ldyBUZXN0KCJjYmQwMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCgiMTAuMSIpKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMC4xIik7CisgIChuZXcgVGVzdCgiY2JkMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjEiKSkpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEuMSIpOworICAobmV3IFRlc3QoImNiZDAwOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKCItOS4wIikpKS50b1N0cmluZygpKS5lcXVhbHMoIi05LjAiKTsKKyAgKG5ldyBUZXN0KCJjYmQwMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCgiMC45IikpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOSIpOworICAKKyAgbnVtPSIxMjM0NTY3ODkuMTIzNDU2Nzg5IjsKKyAgKG5ldyBUZXN0KCJjYmQwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChudW0pKSkudG9TdHJpbmcoKSkuZXF1YWxzKG51bSk7CisgIG51bT0iMTIzNDU2Nzg5LjAwMDAwMDAwMCI7CisgIChuZXcgVGVzdCgiY2JkMDExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwobnVtKSkpLnRvU3RyaW5nKCkpLmVxdWFscyhudW0pOworICBudW09IjEyMzQ1Njc4OTAwMDAwMDAwMCI7CisgIChuZXcgVGVzdCgiY2JkMDEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwobnVtKSkpLnRvU3RyaW5nKCkpLmVxdWFscyhudW0pOworICBudW09IjAuMDAwMDAxMjM0NTY3ODkiOworICAobmV3IFRlc3QoImNiZDAxMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKG51bSkpKS50b1N0cmluZygpKS5lcXVhbHMobnVtKTsKKyAgbnVtPSIwLjAwMDAwMDEyMzQ1Njc4OSI7CisgIChuZXcgVGVzdCgiY2JkMDE0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwobnVtKSkpLnRvU3RyaW5nKCkpLmVxdWFscyhudW0pOworICAKKyAgdHJ5e2NoZWNrbnVsbDpkb3sKKyAgIG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoKGphdmEubWF0aC5CaWdEZWNpbWFsKW51bGwpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDMpeworICAgZmxhZz10cnVlOworICB9LypjaGVja251bGwqLworICAobmV3IFRlc3QoImNiaTAxNSIpKS5vaz1mbGFnOworICAKKyAgLy8gQmlnSW50ZWdlcgorICBiaXA9bmV3IEJpZ0ludGVnZXIoIjk4NzY1NDMyMTk4NzY1NDMyMTk4NzY1NDMyMSIpOyAvLyBiaWdnaWUgK3ZlCisgIGJpej1uZXcgQmlnSW50ZWdlcigiMCIpOyAvLyBiaWdnaWUgMAorICBiaW49bmV3IEJpZ0ludGVnZXIoIi0xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3OCIpOyAvLyBiaWdnaWUgLXZlCisgIChuZXcgVGVzdCgiY2JpMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChiaXApKS50b1N0cmluZygpKS5lcXVhbHMoYmlwLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoImNiaTAwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYml6KSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiY2JpMDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChiaW4pKS50b1N0cmluZygpKS5lcXVhbHMoYmluLnRvU3RyaW5nKCkpOworICB0cnl7Y2hlY2tudWxsOmRveworICAgbmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgoamF2YS5tYXRoLkJpZ0ludGVnZXIpbnVsbCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiAkNCl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbCovCisgIChuZXcgVGVzdCgiY2JpMDA0IikpLm9rPWZsYWc7CisgIAorICAvLyBCaWdJbnRlZ2VyIHdpdGggc2NhbGUKKyAgYmlwPW5ldyBCaWdJbnRlZ2VyKCIxMjM0NTY3ODkiKTsgLy8gYmlnaXNoCisgIGJkYT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJpcCk7CisgIGJkYj1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJpcCw1KTsKKyAgYm1jPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYmlwLDE1KTsKKyAgKG5ldyBUZXN0KCJjYnMwMDEiKSkub2s9KGJkYS50b1N0cmluZygpKS5lcXVhbHMoIjEyMzQ1Njc4OSIpOworICAobmV3IFRlc3QoImNiczAwMiIpKS5vaz0oYmRiLnRvU3RyaW5nKCkpLmVxdWFscygiMTIzNC41Njc4OSIpOworICAobmV3IFRlc3QoImNiczAwMyIpKS5vaz0oYm1jLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMDAxMjM0NTY3ODkiKTsKKyAgYmlwPW5ldyBCaWdJbnRlZ2VyKCIxMjM0NTY3ODkxMjM0NTY3ODkxMjM0NTY3ODkiKTsgLy8gYmlnZ2llCisgIGJkYT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJpcCk7CisgIGJkYj1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJpcCw3KTsKKyAgYm1jPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYmlwLDEzKTsKKyAgYm1kPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYmlwLDE5KTsKKyAgYm1lPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYmlwLDI5KTsKKyAgKG5ldyBUZXN0KCJjYnMwMTEiKSkub2s9KGJkYS50b1N0cmluZygpKS5lcXVhbHMoIjEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OSIpOworICAobmV3IFRlc3QoImNiczAxMiIpKS5vaz0oYmRiLnRvU3RyaW5nKCkpLmVxdWFscygiMTIzNDU2Nzg5MTIzNDU2Nzg5MTIuMzQ1Njc4OSIpOworICAobmV3IFRlc3QoImNiczAxMyIpKS5vaz0oYm1jLnRvU3RyaW5nKCkpLmVxdWFscygiMTIzNDU2Nzg5MTIzNDUuNjc4OTEyMzQ1Njc4OSIpOworICAobmV3IFRlc3QoImNiczAxNCIpKS5vaz0oYm1kLnRvU3RyaW5nKCkpLmVxdWFscygiMTIzNDU2NzguOTEyMzQ1Njc4OTEyMzQ1Njc4OSIpOworICAobmV3IFRlc3QoImNiczAxNSIpKS5vaz0oYm1lLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1Njc4OSIpOworICB0cnl7Y2hlY2tudWxsOmRveworICAgbmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgoamF2YS5tYXRoLkJpZ0ludGVnZXIpbnVsbCwxKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ1KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tudWxsKi8KKyAgKG5ldyBUZXN0KCJjYnMwMDQiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrc2NhbGU6ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJpcCwtOCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uICQ2KXtlPSQ2OworICAgZmxhZz0oZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiTmVnYXRpdmUgc2NhbGU6IC04Iik7CisgIH0vKmNoZWNrc2NhbGUqLworICAobmV3IFRlc3QoImNiczAwNSIpKS5vaz1mbGFnOworICAKKyAgLy8gY2hhcltdCisgIC8vIFdlIGp1c3QgdGVzdCBpdCdzIHRoZXJlCisgIC8vIEZ1bmN0aW9uYWxpdHkgaXMgdGVzdGVkIGJ5IEJpZ0RlY2ltYWwoU3RyaW5nKS4KKyAgY2E9KCIxMjMuNDUiKS50b0NoYXJBcnJheSgpOworICAobmV3IFRlc3QoImNjYTAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EpKS50b1N0cmluZygpKS5lcXVhbHMoIjEyMy40NSIpOworICB0cnl7Y2hlY2tudWxsOmRveworICAgbmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgoY2hhcltdKW51bGwpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDcpeworICAgZmxhZz10cnVlOworICB9LypjaGVja251bGwqLworICAobmV3IFRlc3QoImNjYTAxMCIpKS5vaz1mbGFnOworICAKKyAgLy8gY2hhcltdLGludCxpbnQKKyAgLy8gV2UganVzdCB0ZXN0IGl0J3MgdGhlcmUsIGFuZCB0aGF0IG9mZnNldHMgd29yay4KKyAgLy8gRnVuY3Rpb25hbGl0eSBpcyB0ZXN0ZWQgYnkgQmlnRGVjaW1hbChTdHJpbmcpLgorICBjYT0oIjEyMy40NSIpLnRvQ2hhckFycmF5KCk7CisgIChuZXcgVGVzdCgiY2NhMTAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChjYSwwLDYpKS50b1N0cmluZygpKS5lcXVhbHMoIjEyMy40NSIpOworICAobmV3IFRlc3QoImNjYTEwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMSw1KSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyMy40NSIpOworICAobmV3IFRlc3QoImNjYTEwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMiw0KSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzLjQ1Iik7CisgIChuZXcgVGVzdCgiY2NhMTA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChjYSwzLDMpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDUiKTsKKyAgKG5ldyBUZXN0KCJjY2ExMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDQsMikpLnRvU3RyaW5nKCkpLmVxdWFscygiNDUiKTsKKyAgKG5ldyBUZXN0KCJjY2ExMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDUsMSkpLnRvU3RyaW5nKCkpLmVxdWFscygiNSIpOworICAKKyAgKG5ldyBUZXN0KCJjY2ExMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDAsMSkpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImNjYTExMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMSwxKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgiY2NhMTEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChjYSwyLDEpKS50b1N0cmluZygpKS5lcXVhbHMoIjMiKTsKKyAgKG5ldyBUZXN0KCJjY2ExMTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDQsMSkpLnRvU3RyaW5nKCkpLmVxdWFscygiNCIpOworICAKKyAgKG5ldyBUZXN0KCJjY2ExMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDAsMikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTIiKTsKKyAgKG5ldyBUZXN0KCJjY2ExMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDEsMikpLnRvU3RyaW5nKCkpLmVxdWFscygiMjMiKTsKKyAgKG5ldyBUZXN0KCJjY2ExMjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDIsMikpLnRvU3RyaW5nKCkpLmVxdWFscygiMyIpOworICAobmV3IFRlc3QoImNjYTEyMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMywyKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQiKTsKKyAgCisgIChuZXcgVGVzdCgiY2NhMTMwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChjYSwwLDMpKS50b1N0cmluZygpKS5lcXVhbHMoIjEyMyIpOworICAobmV3IFRlc3QoImNjYTEzMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMSwzKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyMyIpOworICAobmV3IFRlc3QoImNjYTEzMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMiwzKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzLjQiKTsKKyAgCisgIChuZXcgVGVzdCgiY2NhMTQwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChjYSwwLDQpKS50b1N0cmluZygpKS5lcXVhbHMoIjEyMyIpOworICAobmV3IFRlc3QoImNjYTE0MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMSw0KSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyMy40Iik7CisgIAorICAobmV3IFRlc3QoImNjYTE1MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMCw1KSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMjMuNCIpOworICAKKyAgLy8gYSBjb3VwbGUgb2Ygb2RkaWVzCisgIGNhPSgieDIzLjR4IikudG9DaGFyQXJyYXkoKTsKKyAgKG5ldyBUZXN0KCJjY2ExNjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDEsNCkpLnRvU3RyaW5nKCkpLmVxdWFscygiMjMuNCIpOworICAobmV3IFRlc3QoImNjYTE2MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMSwxKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgiY2NhMTYyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChjYSw0LDEpKS50b1N0cmluZygpKS5lcXVhbHMoIjQiKTsKKyAgCisgIGNhPSgiMDEyMzQ1Njc4OS45ODc2NTQzMjEwIikudG9DaGFyQXJyYXkoKTsKKyAgKG5ldyBUZXN0KCJjY2ExNjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhLDAsMjEpKS50b1N0cmluZygpKS5lcXVhbHMoIjEyMzQ1Njc4OS45ODc2NTQzMjEwIik7CisgIChuZXcgVGVzdCgiY2NhMTY0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChjYSwxLDIwKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMjM0NTY3ODkuOTg3NjU0MzIxMCIpOworICAobmV3IFRlc3QoImNjYTE2NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMiwxOSkpLnRvU3RyaW5nKCkpLmVxdWFscygiMjM0NTY3ODkuOTg3NjU0MzIxMCIpOworICAobmV3IFRlc3QoImNjYTE2NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMiwxOCkpLnRvU3RyaW5nKCkpLmVxdWFscygiMjM0NTY3ODkuOTg3NjU0MzIxIik7CisgIChuZXcgVGVzdCgiY2NhMTY3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChjYSwyLDE3KSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyMzQ1Njc4OS45ODc2NTQzMiIpOworICAobmV3IFRlc3QoImNjYTE2OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoY2EsMiwxNikpLnRvU3RyaW5nKCkpLmVxdWFscygiMjM0NTY3ODkuOTg3NjU0MyIpOworICAKKyAgdHJ5e2NoZWNrbnVsbDpkb3sKKyAgIG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoKGNoYXJbXSludWxsLDAsMSk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiAkOCl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbCovCisgIChuZXcgVGVzdCgiY2NhMjAwIikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2tsZW46ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjMiLnRvQ2hhckFycmF5KCksMCwwKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbiAkOSl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbGVuKi8KKyAgKG5ldyBUZXN0KCJjY2EyMDEiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja2JvdW5kOmRveworICAgbmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzIi50b0NoYXJBcnJheSgpLDIsNCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uICQxMCl7IC8vIGFueXRoaW5nIE9LCisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrYm91bmQqLworICAobmV3IFRlc3QoImNjYTIwMiIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tib3VuZDI6ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjMiLnRvQ2hhckFycmF5KCksLTEsMik7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uICQxMSl7IC8vIGFueXRoaW5nIE9LCisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrYm91bmQyKi8KKyAgKG5ldyBUZXN0KCJjY2EyMDMiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrYm91bmQzOmRveworICAgbmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzIi50b0NoYXJBcnJheSgpLDEsLTIpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbiAkMTIpeyAvLyBhbnl0aGluZyBPSworICAgZmxhZz10cnVlOworICB9LypjaGVja2JvdW5kMyovCisgIChuZXcgVGVzdCgiY2NhMjA0IikpLm9rPWZsYWc7CisgIAorICAvLyBkb3VibGUgW2RlcHJlY2F0ZWRdCisgIC8vIE5vdGUgdGhhdCBtYW55IG9mIHRoZXNlIGRpZmZlciBmcm9tIHRoZSB2YWx1ZU9mKGRvdWJsZSkgcmVzdWx0cy4KKyAgZHplcj0oZG91YmxlKTA7CisgIGRwb3M9KGRvdWJsZSkxOworICBkcG9zPWRwb3MvKChkb3VibGUpMTApOworICBkbmVnPShkb3VibGUpLWRwb3M7CisgIChuZXcgVGVzdCgiY2RvMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChkbmVnKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1Iik7CisgIAorICAobmV3IFRlc3QoImNkbzAwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoZHplcikpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOyAvLyBOQiwgbm90ICcwLjAnCisgIChuZXcgVGVzdCgiY2RvMDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChkcG9zKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUiKTsKKyAgCisgIGRwb3M1PShkb3VibGUpMC41RDsKKyAgZG5lZzU9KGRvdWJsZSktZHBvczU7CisgIChuZXcgVGVzdCgiY2RvMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChkbmVnNSkpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuNSIpOworICAobmV3IFRlc3QoImNkbzAwNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoZHBvczUpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNSIpOworICBkbWluPWphdmEubGFuZy5Eb3VibGUuTUlOX1ZBTFVFOworICBkbWF4PWphdmEubGFuZy5Eb3VibGUuTUFYX1ZBTFVFOworICAobmV3IFRlc3QoImNkbzAwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoZG1pbikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5NDA2NTY0NTg0MTI0NjU0NDE3NjU2ODc5Mjg2ODIyMTM3MjM2NTA1OTgwMjYxNDMyNDc2NDQyNTU4NTY4MjUwMDY3NTUwNzI3MDIwODc1MTg2NTI5OTgzNjM2MTYzNTk5MjM3OTc5NjU2NDY5NTQ0NTcxNzczMDkyNjY1NjcxMDM1NTkzOTc5NjM5ODc3NDc5NjAxMDc4MTg3ODEyNjMwMDcxMzE5MDMxMTQwNDUyNzg0NTgxNzE2Nzg0ODk4MjEwMzY4ODcxODYzNjA1Njk5ODczMDcyMzA1MDAwNjM4NzQwOTE1MzU2NDk4NDM4NzMxMjQ3MzM5NzI3MzE2OTYxNTE0MDAzMTcxNTM4NTM5ODA3NDEyNjIzODU2NTU5MTE3MTAyNjY1ODU1NjY4Njc2ODE4NzAzOTU2MDMxMDYyNDkzMTk0NTI3MTU5MTQ5MjQ1NTMyOTMwNTQ1NjU0NDQwMTEyNzQ4MDEyOTcwOTk5OTU0MTkzMTk4OTQwOTA4MDQxNjU2MzMyNDUyNDc1NzE0Nzg2OTAxNDcyNjc4MDE1OTM1NTIzODYxMTU1MDEzNDgwMzUyNjQ5MzQ3MjAxOTM3OTAyNjgxMDcxMDc0OTE3MDMzMzIyMjY4NDQ3NTMzMzU3MjA4MzI0MzE5MzYwOTIzODI4OTM0NTgzNjgwNjAxMDYwMTE1MDYxNjk4MDk3NTMwNzgzNDIyNzczMTgzMjkyNDc5MDQ5ODI1MjQ3MzA3NzYzNzU5MjcyNDc4NzQ2NTYwODQ3NzgyMDM3MzQ0Njk2OTk1MzM2NDcwMTc5NzI2Nzc3MTc1ODUxMjU2NjA1NTExOTkxMzE1MDQ4OTExMDE0NTEwMzc4NjI3MzgxNjcyNTA5NTU4MzczODk3MzM1OTg5OTM2NjQ4MDk5NDExNjQyMDU3MDI2MzcwOTAyNzkyNDI3Njc1NDQ1NjUyMjkwODc1Mzg2ODI1MDY0MTk3MTgyNjU1MzM0NDcyNjU2MjUiKTsKKyAgCisgIChuZXcgVGVzdCgiY2RvMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChkbWF4KSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxNzk3NjkzMTM0ODYyMzE1NzA4MTQ1Mjc0MjM3MzE3MDQzNTY3OTgwNzA1Njc1MjU4NDQ5OTY1OTg5MTc0NzY4MDMxNTcyNjA3ODAwMjg1Mzg3NjA1ODk1NTg2MzI3NjY4NzgxNzE1NDA0NTg5NTM1MTQzODI0NjQyMzQzMjEzMjY4ODk0NjQxODI3Njg0Njc1NDY3MDM1Mzc1MTY5ODYwNDk5MTA1NzY1NTEyODIwNzYyNDU0OTAwOTAzODkzMjg5NDQwNzU4Njg1MDg0NTUxMzM5NDIzMDQ1ODMyMzY5MDMyMjI5NDgxNjU4MDg1NTkzMzIxMjMzNDgyNzQ3OTc4MjYyMDQxNDQ3MjMxNjg3MzgxNzcxODA5MTkyOTk4ODEyNTA0MDQwMjYxODQxMjQ4NTgzNjgiKTsKKyAgCisgIAorICAvLyBuYXN0aWVzCisgIGQ9KGRvdWJsZSk5OworICBkPWQvKChkb3VibGUpMTApOworICAobmV3IFRlc3QoImNkbzAxMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoZCkpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45MDAwMDAwMDAwMDAwMDAwMjIyMDQ0NjA0OTI1MDMxMzA4MDg0NzI2MzMzNjE4MTY0MDYyNSIpOworICAKKyAgZD1kLygoZG91YmxlKTEwKTsKKyAgKG5ldyBUZXN0KCJjZG8wMTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGQpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDg5OTk5OTk5OTk5OTk5OTk2NjY5MzMwOTI2MTI0NTMwMzc4NzI5MTA0OTk1NzI3NTM5MDYyNSIpOworICAKKyAgZD1kLygoZG91YmxlKTEwKTsKKyAgKG5ldyBUZXN0KCJjZG8wMTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGQpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDA4OTk5OTk5OTk5OTk5OTk5MzE5OTg4Mzk3NDE3MDkxNjE4OTkwNTI1NjAzMjk0MzcyNTU4NTkzNzUiKTsKKyAgCisgIGQ9ZC8oKGRvdWJsZSkxMCk7CisgIChuZXcgVGVzdCgiY2RvMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChkKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDg5OTk5OTk5OTk5OTk5OTk3NTM2NjkyNjY0MTEyOTMzOTI1OTM1MDY3MjM2NDIzNDkyNDMxNjQwNjI1Iik7CisgIAorICBkPWQvKChkb3VibGUpMTApOworICAobmV3IFRlc3QoImNkbzAxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoZCkpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwODk5OTk5OTk5OTk5OTk5OTIxMTU2ODE4MDE2ODU0MTE3NTU4OTc4MDMyMzIwNzM3ODM4NzQ1MTE3MTg3NSIpOworICAKKyAgZD1kLygoZG91YmxlKTEwKTsKKyAgKG5ldyBUZXN0KCJjZG8wMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGQpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDA4OTk5OTk5OTk5OTk5OTk4NTMzOTQxODIyMzY1MTAwOTA0MzM1MTIyMzIyNjYzNjY0ODE3ODEwMDU4NTkzNzUiKTsKKyAgCisgIGQ9ZC8oKGRvdWJsZSkxMCk7CisgIChuZXcgVGVzdCgiY2RvMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChkKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDAwMDg5OTk5OTk5OTk5OTk5OTg1MzM5NDE4MjIzNjUxMDA5MDQzMzUxMjIzMjI2NjM2NjQ4MTc4MTAwNTg1OTM3NSIpOworICAKKyAgZD1kLygoZG91YmxlKTEwKTsKKyAgKG5ldyBUZXN0KCJjZG8wMTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGQpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwMDg5OTk5OTk5OTk5OTk5OTg1MzM5NDE4MjIzNjUxMDA5MDQzMzUxMjIzMjI2NjM2NjQ4MTc4MTAwNTg1OTM3NSIpOworICAKKyAgZD1kLygoZG91YmxlKTEwKTsKKyAgKG5ldyBUZXN0KCJjZG8wMTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGQpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwMDA4OTk5OTk5OTk5OTk5OTk3ODcyMTk3MzMyMzIyNjc4NzY0NDM3OTk1MzY5MDA3Njk0NTM0OTU3NDA4OTA1MDI5Mjk2ODc1Iik7CisgIAorICAKKyAgdHJ5e2NoZWNrcGluOmRveworICAgbmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChqYXZhLmxhbmcuRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbiAkMTMpeworICAgZmxhZz10cnVlOworICB9LypjaGVja3BpbiovCisgIChuZXcgVGVzdCgiY2RvMTAxIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja25pbjpkb3sKKyAgIG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoamF2YS5sYW5nLkRvdWJsZS5ORUdBVElWRV9JTkZJTklUWSk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdW1iZXJGb3JtYXRFeGNlcHRpb24gJDE0KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tuaW4qLworICAobmV3IFRlc3QoImNkbzEwMiIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tuYW46ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGphdmEubGFuZy5Eb3VibGUuTmFOKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbiAkMTUpeworICAgZmxhZz10cnVlOworICB9LypjaGVja25hbiovCisgIChuZXcgVGVzdCgiY2RvMTAzIikpLm9rPWZsYWc7CisgIAorICAvLyBpbnQKKyAgKG5ldyBUZXN0KCJjaW4wMDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGltaW4pKS50b1N0cmluZygpKS5lcXVhbHMoIi0yMTQ3NDgzNjQ4Iik7CisgIChuZXcgVGVzdCgiY2luMDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChpbWF4KSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyMTQ3NDgzNjQ3Iik7CisgIChuZXcgVGVzdCgiY2luMDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChpbmVnKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoImNpbjAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaXplcikpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImNpbjAwNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaXBvcykpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImNpbjAwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMTApKS50b1N0cmluZygpKS5lcXVhbHMoIjEwIik7CisgIChuZXcgVGVzdCgiY2luMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCg5KSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5Iik7CisgIChuZXcgVGVzdCgiY2luMDA4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCg1KSkudG9TdHJpbmcoKSkuZXF1YWxzKCI1Iik7CisgIChuZXcgVGVzdCgiY2luMDA5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgyKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgiY2luMDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgtMikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIiKTsKKyAgKG5ldyBUZXN0KCJjaW4wMTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKC01KSkudG9TdHJpbmcoKSkuZXF1YWxzKCItNSIpOworICAobmV3IFRlc3QoImNpbjAxMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoLTkpKS50b1N0cmluZygpKS5lcXVhbHMoIi05Iik7CisgIChuZXcgVGVzdCgiY2luMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgtMTApKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMCIpOworICAobmV3IFRlc3QoImNpbjAxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoLTExKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMTEiKTsKKyAgKG5ldyBUZXN0KCJjaW4wMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKC05OSkpLnRvU3RyaW5nKCkpLmVxdWFscygiLTk5Iik7CisgIChuZXcgVGVzdCgiY2luMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgtMTAwKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMTAwIik7CisgIChuZXcgVGVzdCgiY2luMDE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgtOTk5KSkudG9TdHJpbmcoKSkuZXF1YWxzKCItOTk5Iik7CisgIChuZXcgVGVzdCgiY2luMDE4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgtMTAwMCkpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgiY2luMDE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgxMSkpLnRvU3RyaW5nKCkpLmVxdWFscygiMTEiKTsKKyAgKG5ldyBUZXN0KCJjaW4wMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDk5KSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5OSIpOworICAobmV3IFRlc3QoImNpbjAyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMTAwKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAiKTsKKyAgKG5ldyBUZXN0KCJjaW4wMjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDk5OSkpLnRvU3RyaW5nKCkpLmVxdWFscygiOTk5Iik7CisgIChuZXcgVGVzdCgiY2luMDIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgxMDAwKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAwIik7CisgIAorICAvLyBsb25nCisgIChuZXcgVGVzdCgiY2xvMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChsbWluKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpOworICAobmV3IFRlc3QoImNsbzAwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG1heCkpLnRvU3RyaW5nKCkpLmVxdWFscygiOTIyMzM3MjAzNjg1NDc3NTgwNyIpOworICAobmV3IFRlc3QoImNsbzAwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG5lZykpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJjbG8wMDQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGx6ZXIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJjbG8wMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGxwb3MpKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgCisgIC8vIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBlbHNld2hlcmVdCisgIC8vIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdAorICAobmV3IFRlc3QoImNzdDAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTIiKTsKKyAgKG5ldyBUZXN0KCJjc3QwMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNzYiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItNzYiKTsKKyAgKG5ldyBUZXN0KCJjc3QwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMi43NiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEyLjc2Iik7CisgIChuZXcgVGVzdCgiY3N0MDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzEyLjc2IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTIuNzYiKTsKKyAgKG5ldyBUZXN0KCJjc3QwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMTIuNzYiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMi43NiIpOworICAobmV3IFRlc3QoImNzdDAwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIiswLjAwMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAzIik7CisgIChuZXcgVGVzdCgiY3N0MDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTcuIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTciKTsKKyAgKG5ldyBUZXN0KCJjc3QwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuNSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNSIpOworICAobmV3IFRlc3QoImNzdDAwOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjA0NCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjQ0Iik7CisgIChuZXcgVGVzdCgiY3N0MDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDA0NCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjQ0Iik7CisgIChuZXcgVGVzdCgiY3N0MDExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDA1IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDA1Iik7CisgIChuZXcgVGVzdCgiY3N0MDEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMDAwMDUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDA1Iik7CisgIChuZXcgVGVzdCgiY3N0MDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDAwMDUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDAwNSIpOworICAobmV3IFRlc3QoImNzdDAxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAwMDAwNSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwNSIpOyAvLyBcTlIKKyAgKG5ldyBUZXN0KCJjc3QwMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDAwMDA1IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMDAwNSIpOyAvLyBcTlIKKyAgKG5ldyBUZXN0KCJjc3QwMTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NTY3OC44NzY1NDMyMTAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMjM0NTY3OC44NzY1NDMyMTAiKTsKKyAgKG5ldyBUZXN0KCJjc3QwMTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyMzQ1Njc4Ljg3NjU0MzIxMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIzNDU2NzguODc2NTQzMjEwIik7CisgIChuZXcgVGVzdCgiY3N0MDE4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzQ1Njc4Ljg3NjU0MzIxMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjM0NTY3OC44NzY1NDMyMTAiKTsKKyAgKG5ldyBUZXN0KCJjc3QwMTkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMzQ1Njc4Ljg3NjU0MzIxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMzQ1Njc4Ljg3NjU0MzIxIik7CisgIChuZXcgVGVzdCgiY3N0MDIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzQ1Njc4Ljg3NjU0MzIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzNDU2NzguODc2NTQzMiIpOworICAobmV3IFRlc3QoImNzdDAyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIiszNDU2NzguODc2NTQzMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjM0NTY3OC44NzY1NDMyIik7CisgIChuZXcgVGVzdCgiY3N0MDIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzAzNDU2NzguODc2NTQzMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjM0NTY3OC44NzY1NDMyIik7CisgIChuZXcgVGVzdCgiY3N0MDIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzAwMzQ1Njc4Ljg3NjU0MzIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzNDU2NzguODc2NTQzMiIpOworICAobmV3IFRlc3QoImNzdDAyNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0zNDU2NzguODc2NTQzMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0zNDU2NzguODc2NTQzMiIpOworICAobmV3IFRlc3QoImNzdDAyNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wMzQ1Njc4Ljg3NjU0MzIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMzQ1Njc4Ljg3NjU0MzIiKTsKKyAgKG5ldyBUZXN0KCJjc3QwMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMDAzNDU2NzguODc2NTQzMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0zNDU2NzguODc2NTQzMiIpOworICAKKyAgLy8gZXhvdGljcyAtLQorICAobmV3IFRlc3QoImNzdDAzNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIlx1MGU1Ny5cdTBlNTAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI3LjAiKTsKKyAgKG5ldyBUZXN0KCJjc3QwMzYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCJcdTBiNjYuXHUwYjY3IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgiY3N0MDM3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiXHUwYjY2XHUwYjY2IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImNzdDAzOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIlx1MGI2YVx1MGI2NiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjQwIik7CisgIAorICAvLyBzdHJpbmdzIHdpdGggRQorICAobmV3IFRlc3QoImNzdDA0MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFKzkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5Iik7CisgIChuZXcgVGVzdCgiY3N0MDQxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMWUrMDkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5Iik7CisgIChuZXcgVGVzdCgiY3N0MDQyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMUUrOTAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5MCIpOworICAobmV3IFRlc3QoImNzdDA0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxRSswMDkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5Iik7CisgIChuZXcgVGVzdCgiY3N0MDQ0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMEUrOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRSs5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMUUrOSIpOworICAobmV3IFRlc3QoImNzdDA0NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFKzA5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMUUrOSIpOworICAobmV3IFRlc3QoImNzdDA0NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFlKzkwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMUUrOTAiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRSswMDkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5Iik7CisgIChuZXcgVGVzdCgiY3N0MDQ5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMEUrOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRTkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5Iik7CisgIChuZXcgVGVzdCgiY3N0MDUxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMWUwOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjFFKzkiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRTkwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMUUrOTAiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRTAwOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjFFKzkiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwRTkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiY3N0MDU1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDBlKzAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiY3N0MDU2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDBFLTEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiY3N0MDU3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNEUrOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjRFKzkiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0NEUrOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjQuNEUrMTAiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNTkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjczZS03IikpLnRvU3RyaW5nKCkpLmVxdWFscygiNy4zRS04Iik7CisgIChuZXcgVGVzdCgiY3N0MDYwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDBFKzkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiY3N0MDYxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDBFLTkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiY3N0MDYyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTBFKzkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjBFKzEwIik7CisgIChuZXcgVGVzdCgiY3N0MDYzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTBFKzA5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wRSsxMCIpOworICAobmV3IFRlc3QoImNzdDA2NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwZSs5MCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMEUrOTEiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNjUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMEUrMDA5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wRSsxMCIpOworICAobmV3IFRlc3QoImNzdDA2NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMGUrOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDBFKzExIik7CisgIChuZXcgVGVzdCgiY3N0MDY3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwZSswOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDBFKzExIik7CisgIChuZXcgVGVzdCgiY3N0MDY4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwRSs5MCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDBFKzkyIik7CisgIChuZXcgVGVzdCgiY3N0MDY5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwZSswMDkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwRSsxMSIpOworICAKKyAgKG5ldyBUZXN0KCJjc3QwNzAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI2NSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1Iik7CisgIChuZXcgVGVzdCgiY3N0MDcxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yNjVFLTIwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTIwIik7CisgIChuZXcgVGVzdCgiY3N0MDcyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yNjVFLTgiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtOCIpOworICAobmV3IFRlc3QoImNzdDA3MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjY1RS00IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTQiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNzQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI2NUUtMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RS0zIik7CisgIChuZXcgVGVzdCgiY3N0MDc1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yNjVFLTIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtMiIpOworICAobmV3IFRlc3QoImNzdDA3NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjY1RS0xIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTEiKTsKKyAgKG5ldyBUZXN0KCJjc3QwNzciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI2NUUtMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1Iik7CisgIChuZXcgVGVzdCgiY3N0MDc4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yNjVFKzEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMSIpOworICAobmV3IFRlc3QoImNzdDA3OSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjY1RSsyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFKzIiKTsKKyAgKG5ldyBUZXN0KCJjc3QwODAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI2NUUrMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RSszIik7CisgIChuZXcgVGVzdCgiY3N0MDgxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yNjVFKzQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrNCIpOworICAobmV3IFRlc3QoImNzdDA4MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjY1RSs4IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFKzgiKTsKKyAgKG5ldyBUZXN0KCJjc3QwODMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI2NUUrMjAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMjAiKTsKKyAgCisgIChuZXcgVGVzdCgiY3N0MDkwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIuNjUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMi42NSIpOworICAobmV3IFRlc3QoImNzdDA5MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyLjY1RS0yMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RS0xOSIpOworICAobmV3IFRlc3QoImNzdDA5MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyLjY1RS04IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTciKTsKKyAgKG5ldyBUZXN0KCJjc3QwOTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMi42NUUtNCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RS0zIik7CisgIChuZXcgVGVzdCgiY3N0MDk0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIuNjVFLTMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtMiIpOworICAobmV3IFRlc3QoImNzdDA5NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyLjY1RS0yIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTEiKTsKKyAgKG5ldyBUZXN0KCJjc3QwOTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMi42NUUtMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1Iik7CisgIChuZXcgVGVzdCgiY3N0MDk3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIuNjVFLTAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMSIpOworICAobmV3IFRlc3QoImNzdDA5OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyLjY1RSsxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFKzIiKTsKKyAgKG5ldyBUZXN0KCJjc3QwOTkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMi42NUUrMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RSszIik7CisgIChuZXcgVGVzdCgiY3N0MTAwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIuNjVFKzMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrNCIpOworICAobmV3IFRlc3QoImNzdDEwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyLjY1RSs0IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFKzUiKTsKKyAgKG5ldyBUZXN0KCJjc3QxMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMi42NUUrOCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RSs5Iik7CisgIChuZXcgVGVzdCgiY3N0MTAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIuNjVFKzIwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFKzIxIik7CisgIAorICAobmV3IFRlc3QoImNzdDExMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNi41IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTI2LjUiKTsKKyAgKG5ldyBUZXN0KCJjc3QxMTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjYuNUUtMjAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtMTgiKTsKKyAgKG5ldyBUZXN0KCJjc3QxMTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjYuNUUtOCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RS02Iik7CisgIChuZXcgVGVzdCgiY3N0MTEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTI2LjVFLTQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtMiIpOworICAobmV3IFRlc3QoImNzdDExNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNi41RS0zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTEiKTsKKyAgKG5ldyBUZXN0KCJjc3QxMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjYuNUUtMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1Iik7CisgIChuZXcgVGVzdCgiY3N0MTE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTI2LjVFLTEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMSIpOworICAobmV3IFRlc3QoImNzdDExNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNi41RS0wIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFKzIiKTsKKyAgKG5ldyBUZXN0KCJjc3QxMTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjYuNUUrMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RSszIik7CisgIChuZXcgVGVzdCgiY3N0MTE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTI2LjVFKzIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrNCIpOworICAobmV3IFRlc3QoImNzdDEyMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNi41RSszIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFKzUiKTsKKyAgKG5ldyBUZXN0KCJjc3QxMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjYuNUUrNCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RSs2Iik7CisgIChuZXcgVGVzdCgiY3N0MTIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTI2LjVFKzgiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMTAiKTsKKyAgKG5ldyBUZXN0KCJjc3QxMjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjYuNUUrMjAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMjIiKTsKKyAgCisgIChuZXcgVGVzdCgiY3N0MTMwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTI2NSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEyNjUiKTsKKyAgKG5ldyBUZXN0KCJjc3QxMzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjY1RS0yMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RS0xNyIpOworICAobmV3IFRlc3QoImNzdDEzMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFLTgiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtNSIpOworICAobmV3IFRlc3QoImNzdDEzMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFLTQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtMSIpOworICAobmV3IFRlc3QoImNzdDEzNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFLTMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NSIpOworICAobmV3IFRlc3QoImNzdDEzNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFLTIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMSIpOworICAobmV3IFRlc3QoImNzdDEzNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFLTEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMiIpOworICAobmV3IFRlc3QoImNzdDEzNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFLTAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMyIpOworICAobmV3IFRlc3QoImNzdDEzOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFKzEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrNCIpOworICAobmV3IFRlc3QoImNzdDEzOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFKzIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrNSIpOworICAobmV3IFRlc3QoImNzdDE0MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFKzMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrNiIpOworICAobmV3IFRlc3QoImNzdDE0MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFKzQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrNyIpOworICAobmV3IFRlc3QoImNzdDE0MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyNjVFKzgiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMTEiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjY1RSsyMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RSsyMyIpOworICAKKyAgKG5ldyBUZXN0KCJjc3QxNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEyNjUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEyNjUiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEyNjVFLTIwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTIxIik7CisgIChuZXcgVGVzdCgiY3N0MTUyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xMjY1RS04IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTkiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEyNjVFLTQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtNSIpOworICAobmV3IFRlc3QoImNzdDE1NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTI2NUUtMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RS00Iik7CisgIChuZXcgVGVzdCgiY3N0MTU1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xMjY1RS0yIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFLTMiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEyNjVFLTEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUtMiIpOworICAobmV3IFRlc3QoImNzdDE1NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTI2NUUtMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RS0xIik7CisgIChuZXcgVGVzdCgiY3N0MTU4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xMjY1RSsxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjUiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNTkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEyNjVFKzIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMSIpOworICAobmV3IFRlc3QoImNzdDE2MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTI2NUUrMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjY1RSsyIik7CisgIChuZXcgVGVzdCgiY3N0MTYxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xMjY1RSs0IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yNjVFKzMiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEyNjVFKzgiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrNyIpOworICAobmV3IFRlc3QoImNzdDE2MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTI2NUUrMjAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjI2NUUrMTkiKTsKKyAgCisgIChuZXcgVGVzdCgiY3N0MTcwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wOWU5OTk5OTk5OTkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5RSs5OTk5OTk5OTciKTsKKyAgKG5ldyBUZXN0KCJjc3QxNzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjllOTk5OTk5OTk5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiOUUrOTk5OTk5OTk4Iik7CisgIChuZXcgVGVzdCgiY3N0MTcyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOWU5OTk5OTk5OTkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5RSs5OTk5OTk5OTkiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5LjllOTk5OTk5OTk5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiOS45RSs5OTk5OTk5OTkiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNzQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5ZTk5OTk5OTk5OSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkuOTlFKzk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoImNzdDE3NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkuOTllLTk5OTk5OTk5OSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkuOTlFLTk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoImNzdDE3NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkuOWUtOTk5OTk5OTk5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiOS45RS05OTk5OTk5OTkiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNzciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5ZS05OTk5OTk5OTkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5RS05OTk5OTk5OTkiKTsKKyAgKG5ldyBUZXN0KCJjc3QxNzkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OWUtOTk5OTk5OTk5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiOS45RS05OTk5OTk5OTgiKTsKKyAgKG5ldyBUZXN0KCJjc3QxODAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTllLTk5OTk5OTk5OSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkuOTlFLTk5OTk5OTk5NyIpOworICAKKyAgLy8gYmFkZGllcyAtLQorICBiYWRzdHJpbmdzPW5ldyBqYXZhLmxhbmcuU3RyaW5nW117IjEuLjIiLCIuIiwiLi4iLCIrKzEiLCItLTEiLCItKzEiLCIrLTEiLCIxMmUiLCIxMmUrKyIsIjEyZjQiLCIgKzEiLCIrIDEiLCIxMiAiLCIgKyAxIiwiIC0gMSAiLCJ4IiwiLTEtIiwiMTItIiwiMysiLCIiLCIxZS0iLCI3ZTEwMDAwMDAwMDAiLCIiLCJlMTAwIiwiXHUwZTVhIiwiXHUwYjY1IiwiOTllOTk5OTk5OTk5IiwiOTk5ZTk5OTk5OTk5OSIsIjAuOWUtOTk5OTk5OTk5IiwiMC4wOWUtOTk5OTk5OTk5IiwiMC4xZTEwMDAwMDAwMDAiLCIxMGUtMTAwMDAwMDAwMCIsIjAuOWU5OTk5OTk5OTk5IiwiOTllLTk5OTk5OTk5OTkiLCIxMTFlOTk5OTk5OTk5OSIsIjExMTFlLTk5OTk5OTk5OTkiKyIgIisiMTExZSoxMjMiLCIxMTFlMTIzLSIsIjExMWUrMTIrIiwiMTExZTEtMy0iLCIxMTFlMSoyMyIsIjExMWUxZSszIiwiMWUxLjAiLCIxZTEyM2UiLCJ0ZW4iLCJPTkUiLCIxZS4xIiwiMWUxLiIsIjFlZSIsImUrMSJ9OyAvLyAyMDAtMjAzCisgIC8vIDIwNC0yMDcKKyAgLy8gMjA4LTIxMQorICAvLyAyMTEtMjE0CisgIC8vIDIxNS0yMTkKKyAgLy8gMjIwLTIyMgorICAvLyAyMjMtMjI0CisgIC8vIDIyNS0yMjYKKyAgLy8gMjI3LTIyOAorICAvLyAyMjktMjMwCisgIC8vIDIzMS0yMzIKKyAgLy8gMjMzLTIzNAorICAvLyAyMzUtMjM3CisgIC8vIDIzOC0yNDAKKyAgLy8gMjQxLTI0NAorICAvLyAyNDUtMjQ4CisgIAorICAvLyB3YXRjaCBvdXQgZm9yIGNvbW1hcyBvbiBjb250aW51YXRpb24gbGluZXMKKyAgCisgIHtpbnQgJDE2PWJhZHN0cmluZ3MubGVuZ3RoO2k9MDtpOmZvcig7JDE2PjA7JDE2LS0saSsrKXsKKyAgIHRyeXsKKyAgICBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJhZHN0cmluZ3NbaV0pOworICAgIHNheSgiPj4+IGNzdCIrKDIwMCtpKSsiOiIrIiAiK2JhZHN0cmluZ3NbaV0rIiAiKyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJhZHN0cmluZ3NbaV0pKS50b1N0cmluZygpKTsKKyAgICBmbGFnPWZhbHNlOworICAgfQorICAgY2F0Y2ggKGphdmEubGFuZy5OdW1iZXJGb3JtYXRFeGNlcHRpb24gJDE3KXsKKyAgICBmbGFnPXRydWU7CisgICB9CisgICAobmV3IFRlc3QoImNzdCIrKDIwMCtpKSkpLm9rPWZsYWc7CisgICB9CisgIH0vKmkqLworICAKKyAgdHJ5e2NoZWNrbnVsbDpkb3sKKyAgIG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoKGphdmEubGFuZy5TdHJpbmcpbnVsbCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiAkMTgpeworICAgZmxhZz10cnVlOworICB9LypjaGVja251bGwqLworICAobmV3IFRlc3QoImNzdDMwMSIpKS5vaz1mbGFnOworICAKKyAgc3VtbWFyeSgiQ29uc3RydWN0b3JzIik7CisgIHJldHVybjsKKyAgfQorCisgLyoqIE11dGF0aW9uIHRlc3RzIChjaGVja3MgdGhhdCBjb250ZW50cyBvZiBjb25zdGFudCBvYmplY3RzIGFyZSB1bmNoYW5nZWQpLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWdtdXRhdGlvbigpeworICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIC8qIEZpbmFsIHRlc3RzIC0tIGNoZWNrIGNvbnN0YW50cyBoYXZlbid0IG11dGF0ZWQgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgLS0gYWxzbyB0aGF0IE1DIG9iamVjdHMgaGF2ZW4ndCBtdXRhdGVkICAgICAgICAgICAgICAqLworICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIChuZXcgVGVzdCgiY3VjMDAxIikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuWkVSTy50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJjdWMwMDIiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgiY3VjMDAzIikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuVEVOLnRvU3RyaW5nKCkpLmVxdWFscygiMTAiKTsKKyAgCisgIChuZXcgVGVzdCgiY3VjMDEwIikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5ST1VORF9DRUlMSU5HPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0NFSUxJTkc7CisgIChuZXcgVGVzdCgiY3VjMDExIikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5ST1VORF9ET1dOPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0RPV047CisgIChuZXcgVGVzdCgiY3VjMDEyIikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5ST1VORF9GTE9PUj09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUjsKKyAgKG5ldyBUZXN0KCJjdWMwMTMiKSkub2s9Y29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLlJPVU5EX0hBTEZfRE9XTj09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV047CisgIChuZXcgVGVzdCgiY3VjMDE0IikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5ST1VORF9IQUxGX0VWRU49PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOOworICAobmV3IFRlc3QoImN1YzAxNSIpKS5vaz1jb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9VUD09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQOworICAobmV3IFRlc3QoImN1YzAxNiIpKS5vaz1jb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuUk9VTkRfVU5ORUNFU1NBUlk9PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVU5ORUNFU1NBUlk7CisgIChuZXcgVGVzdCgiY3VjMDE3IikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5ST1VORF9VUD09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VUDsKKyAgCisgIChuZXcgVGVzdCgiY3VjMDIwIikpLm9rPShjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LkRFRkFVTFQuZ2V0RGlnaXRzKCkpPT05OworICAobmV3IFRlc3QoImN1YzAyMSIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ERUZBVUxULmdldEZvcm0oKSk9PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuU0NJRU5USUZJQzsKKyAgKG5ldyBUZXN0KCJjdWMwMjIiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuREVGQVVMVC5nZXRMb3N0RGlnaXRzKCk/MTowKT09MDsKKyAgKG5ldyBUZXN0KCJjdWMwMjMiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuREVGQVVMVC5nZXRSb3VuZGluZ01vZGUoKSk9PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUDsKKyAgCisgIC8vIG1jOSAgPU1hdGhDb250ZXh0KDkpCisgIC8vIG1jbGQgPU1hdGhDb250ZXh0KDksIFNDSUVOVElGSUMsIDEpCisgIC8vIG1jZmQgPU1hdGhDb250ZXh0KDAsIFBMQUlOKQorICAobmV3IFRlc3QoImN1YzAzMCIpKS5vaz0obWM5LmdldERpZ2l0cygpKT09OTsKKyAgKG5ldyBUZXN0KCJjdWMwMzEiKSkub2s9KG1jOS5nZXRGb3JtKCkpPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUM7CisgIChuZXcgVGVzdCgiY3VjMDMyIikpLm9rPShtYzkuZ2V0TG9zdERpZ2l0cygpPzE6MCk9PTA7CisgIChuZXcgVGVzdCgiY3VjMDMzIikpLm9rPShtYzkuZ2V0Um91bmRpbmdNb2RlKCkpPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVA7CisgIChuZXcgVGVzdCgiY3VjMDM0IikpLm9rPShtY2xkLmdldERpZ2l0cygpKT09OTsKKyAgKG5ldyBUZXN0KCJjdWMwMzUiKSkub2s9KG1jbGQuZ2V0Rm9ybSgpKT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDOworICAobmV3IFRlc3QoImN1YzAzNiIpKS5vaz0obWNsZC5nZXRMb3N0RGlnaXRzKCk/MTowKT09MTsKKyAgKG5ldyBUZXN0KCJjdWMwMzciKSkub2s9KG1jbGQuZ2V0Um91bmRpbmdNb2RlKCkpPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVA7CisgIChuZXcgVGVzdCgiY3VjMDM4IikpLm9rPShtY2ZkLmdldERpZ2l0cygpKT09MDsKKyAgKG5ldyBUZXN0KCJjdWMwMzkiKSkub2s9KG1jZmQuZ2V0Rm9ybSgpKT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTjsKKyAgKG5ldyBUZXN0KCJjdWMwNDAiKSkub2s9KG1jZmQuZ2V0TG9zdERpZ2l0cygpPzE6MCk9PTA7CisgIChuZXcgVGVzdCgiY3VjMDQxIikpLm9rPShtY2ZkLmdldFJvdW5kaW5nTW9kZSgpKT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQOworICAKKyAgc3VtbWFyeSgiTm8gbXV0YXRpb24iKTsKKyAgcmV0dXJuO30KKworIAorIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogT3BlcmF0b3IgdGVzdCBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8vIFRoZSB1c2Ugb2YgY29udGV4dCBpbiB0aGVzZSB0ZXN0cyBhcmUgcHJpbWFyaWx5IHRvIHNob3cgdGhhdCB0aGV5CisgLy8gYXJlIGNvcnJlY3RseSBwYXNzZWQgdG8gdGhlIG1ldGhvZHMsIGV4Y2VwdCB0aGF0IHdlIGNoZWNrIHRoYXQKKyAvLyBlYWNoIG1ldGhvZCBjaGVja3MgZm9yIGxvc3REaWdpdHMuCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBCaWdEZWNpbWFsI2Fic30gbWV0aG9kLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWdhYnMoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiBhZT1udWxsOworICAKKyAgLy8gbW9zdCBvZiB0aGUgZnVuY3Rpb24gb2YgdGhpcyBpcyB0ZXN0ZWQgYnkgYWRkCisgIChuZXcgVGVzdCgiYWJzMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5hYnMoKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJhYnMwMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMiIpKS5hYnMoKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJhYnMwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMC4wMDAiKSkuYWJzKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMCIpOworICAobmV3IFRlc3QoImFiczAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwLjAwMCIpKS5hYnMoKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwIik7CisgIChuZXcgVGVzdCgiYWJzMDA1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMDAwIikpLmFicygpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAiKTsKKyAgKG5ldyBUZXN0KCJhYnMwMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMC4wMDAiKSkuYWJzKG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJhYnMwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMC4wMDAiKSkuYWJzKG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJhYnMwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wMDAiKSkuYWJzKG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJhYnMwMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMjAwMDAwMCIpKS5hYnMoKS50b1N0cmluZygpKS5lcXVhbHMoIjIwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJhYnMwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMjAwMDAwMCIpKS5hYnMobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMjAwMDAwMCIpOworICAobmV3IFRlc3QoImFiczAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yMDAwMDAwIikpLmFicyhtYzYpLnRvU3RyaW5nKCkpLmVxdWFscygiMi4wMDAwMEUrNiIpOworICAobmV3IFRlc3QoImFiczAxMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIwMDAwMDAiKSkuYWJzKG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjAwMDAwRSs2Iik7CisgIChuZXcgVGVzdCgiYWJzMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4yIikpLmFicygpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yIik7CisgIChuZXcgVGVzdCgiYWJzMDE0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMiIpKS5hYnMoKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMiIpOworICAobmV3IFRlc3QoImFiczAxNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDEiKSkuYWJzKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAxIik7CisgIChuZXcgVGVzdCgiYWJzMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMDEiKSkuYWJzKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAxIik7CisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIHRlbmxvbmcuYWJzKG1jbGQpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTkpe2FlPSQxOTsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IisiICIrdGVubG9uZy50b1N0cmluZygpKTsKKyAgfS8qY2hlY2tkaWdpdHMqLworICAobmV3IFRlc3QoImFiczAyMCIpKS5vaz1mbGFnOworICAvLyBjaGVjayBsb3N0ZGlnaXRzIG5vdCByYWlzZWQgaWYgZGlnaXRzPTAgW21vbmFkaWMgbWV0aG9kXQorICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICB0ZW5sb25nLmFicyhtY2xkMCk7CisgICBmbGFnPXRydWU7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDIwKXthZT0kMjA7CisgICBmbGFnPWZhbHNlOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgiYWJzMDIxIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja251bGw6ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuVEVOLmFicygoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQyMSl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbCovCisgIChuZXcgVGVzdCgiYWJzMDIyIikpLm9rPWZsYWc7CisgIAorICBzdW1tYXJ5KCJhYnMiKTsKKyAgcmV0dXJuO30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBCaWdEZWNpbWFsI2FkZH0gbWV0aG9kLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWdhZGQoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgYWxoczsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGFyaHM7CisgIGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uIGFlPW51bGw7CisgIAorICAvLyBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KKyAgKG5ldyBUZXN0KCJhZGQwMDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgzKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCI1Iik7CisgIChuZXcgVGVzdCgiYWRkMDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS43NSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMy4zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiOS4wNSIpOworICAobmV3IFRlc3QoImFkZDAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMiIpOworICAobmV3IFRlc3QoImFkZDAwNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIi04Iik7CisgIChuZXcgVGVzdCgiYWRkMDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTciKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIi00LjUiKTsKKyAgKG5ldyBUZXN0KCJhZGQwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjciKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMCIpOworICAobmV3IFRlc3QoImFkZDAwOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjUiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjUiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjUwIik7CisgIChuZXcgVGVzdCgiYWRkMDA5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yMzQ1Njc4OSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAwMDAwMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuMjM0NTY3ODkiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yMzQ1Njc4OSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAwMDAxMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuMjM0NTY4MDAiKTsKKyAgCisgIAorICAobmV3IFRlc3QoImFkZDAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNDQ0NDQ0NDQ0NCIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41NTU1NTU1NTU1IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwMCIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwMTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NDQ0NDQ0NDAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNTU1NTU1NTU1NSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDAwMDAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC40NDQ0NDQ0NDQ0IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjU1NTU1NTU1NTAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk5OTk5OTk5OSIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NDQ0NDQ0NDQ5OTkiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQ0NDQ0NDQ0NCIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NDQ0NDQ0NDUwMDAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQ0NDQ0NDQ0NSIpOworICAKKyAgCisgIChuZXcgVGVzdCgiYWRkMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwMEUrMTMiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDAwMDAwMDBFKzEzIik7CisgIAorICAobmV3IFRlc3QoImFkZDAxOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwMEUrMTMiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMDAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwMUUrMTMiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMDAwIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDAwMDAwMDdFKzEzIik7CisgIAorICAKKyAgLy8gW05vdyB0aGUgc2FtZSBncm91cCB3aXRoIGZpeGVkIGFyaXRobWV0aWNdCisgIChuZXcgVGVzdCgiYWRkMDMwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgyKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMykpLnRvU3RyaW5nKCkpLmVxdWFscygiNSIpOworICAobmV3IFRlc3QoImFkZDAzMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUuNzUiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkuMDUiKTsKKyAgKG5ldyBUZXN0KCJhZGQwMzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJhZGQwMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItOCIpOworICAobmV3IFRlc3QoImFkZDAzNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi03IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItNC41Iik7CisgIChuZXcgVGVzdCgiYWRkMDM1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC43IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAiKTsKKyAgKG5ldyBUZXN0KCJhZGQwMzYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI1IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI1IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi41MCIpOworICAobmV3IFRlc3QoImFkZDAzNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjM0NTY3ODkiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDAwMDAwMDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjIzNDU2Nzg5Iik7CisgIAorICAobmV3IFRlc3QoImFkZDAzOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjM0NTY3ODkiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDAwMDAwMTEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjIzNDU2ODAwIik7CisgIAorICAKKyAgKG5ldyBUZXN0KCJhZGQwMzkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NDQ0NDQ0NDQiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNTU1NTU1NTU1NSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOTk5OTk5OTk5OSIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNDAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NDQ0NDQ0NDAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNTU1NTU1NTU1NSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOTk5OTk5OTk5NSIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NDQ0NDQ0NDQiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNTU1NTU1NTU1MCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOTk5OTk5OTk5NCIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NDQ0NDQ0NDQ5OTkiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQ0NDQ0NDQ0NDQ5OTkiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDQzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC40NDQ0NDQ0NDQ1MDAwIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC40NDQ0NDQ0NDQ1MDAwIik7CisgIAorICAKKyAgKG5ldyBUZXN0KCJhZGQwNDQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MCIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDBlKzkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAwMDAwMDAwMDA3MCIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMDAwMDAwMDA3MDAiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDQ2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMCIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDBlKzkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAwMDAwMDAwNzAwMCIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwMCIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDBlKzkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAwMDAwMDA3MDAwMCIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwMDAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMDAwMDA3MDAwMDAiKTsKKyAgCisgIAorICAvLyBzeW1tZXRyeToKKyAgKG5ldyBUZXN0KCJhZGQwNDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDAwMDAwRSsxMyIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwMEUrMTMiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDUxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDBlKzkiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDAwMDAwRSsxMyIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMDAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDAwMDAxRSsxMyIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwN0UrMTMiKTsKKyAgCisgIAorICAobmV3IFRlc3QoImFkZDA1NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMDAwMDAwMDAwMDcwIik7CisgIAorICAobmV3IFRlc3QoImFkZDA1NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAwMDAwMDAwMDcwMCIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQwNTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMDAwMDAwMDA3MDAwIik7CisgIAorICAobmV3IFRlc3QoImFkZDA1NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMDAwMDAwMDcwMDAwIik7CisgIAorICAobmV3IFRlc3QoImFkZDA1OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwMDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAwMDAwMDcwMDAwMCIpOworICAKKyAgLy8gc29tZSByb3VuZGluZyBlZmZlY3RzCisgIChuZXcgVGVzdCgiYWRkMDU5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC45OTk4IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk5OTgiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDYwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC45OTk4IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk5OTkiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDYxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC45OTk4IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDYyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC45OTk4IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDEiKTsKKyAgCisgIAorICAvLyBNQworICAobmV3IFRlc3QoImFkZDA3MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwMCIpLG1jZmQpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMDAwMDAwNzAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDcxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDBlKzkiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwMUUrMTMiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDcyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDBlKzkiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAwIiksbWM2KS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDAwMDBFKzEzIik7CisgIAorICAKKyAgLy8gemVybyBwcmVzZXJ2YXRpb24KKyAgKG5ldyBUZXN0KCJhZGQwODAiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAwMSIpLG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDEiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDgxIikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDAxIiksbWM2KS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDAwMDEiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDgyIikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDAwMSIpLG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDAwIik7CisgIAorICAobmV3IFRlc3QoImFkZDA4MyIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDAwMDAxIiksbWM2KS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMDg0IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDAwMDAxIiksbWM2KS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDAwMDAiKTsKKyAgCisgIAorICAvLyBtb3JlIGZpeGVkLCBMSFMgc3dhcHMKKyAgKG5ldyBUZXN0KCJhZGQwOTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTEwIikpLmFkZCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAwMDAwNTYyNjciKTsKKyAgKG5ldyBUZXN0KCJhZGQwOTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTYiKSkuYWRkKHplcm8pLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMDU2MjY3Iik7CisgIChuZXcgVGVzdCgiYWRkMDkyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS01IikpLmFkZCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjU2MjY3Iik7CisgIChuZXcgVGVzdCgiYWRkMDkzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS00IikpLmFkZCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi01LjYyNjciKTsKKyAgKG5ldyBUZXN0KCJhZGQwOTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTMiKSkuYWRkKHplcm8pLnRvU3RyaW5nKCkpLmVxdWFscygiLTU2LjI2NyIpOworICAobmV3IFRlc3QoImFkZDA5NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01NjI2N0UtMiIpKS5hZGQoemVybykudG9TdHJpbmcoKSkuZXF1YWxzKCItNTYyLjY3Iik7CisgIChuZXcgVGVzdCgiYWRkMDk2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS0xIikpLmFkZCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi01NjI2LjciKTsKKyAgKG5ldyBUZXN0KCJhZGQwOTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTAiKSkuYWRkKHplcm8pLnRvU3RyaW5nKCkpLmVxdWFscygiLTU2MjY3Iik7CisgIChuZXcgVGVzdCgiYWRkMDk4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTVFLTEwIikpLmFkZCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAwMDAwMDAwMDUiKTsKKyAgKG5ldyBUZXN0KCJhZGQwOTkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNUUtNSIpKS5hZGQoemVybykudG9TdHJpbmcoKSkuZXF1YWxzKCItMC4wMDAwNSIpOworICAobmV3IFRlc3QoImFkZDEwMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RS0xIikpLmFkZCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjUiKTsKKyAgKG5ldyBUZXN0KCJhZGQxMDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNUUtMTAiKSkuYWRkKHplcm8pLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMDAwMDAwMDAwNSIpOworICAobmV3IFRlc3QoImFkZDEwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RS01IikpLmFkZCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAwMDA1Iik7CisgIChuZXcgVGVzdCgiYWRkMTAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTVFLTEiKSkuYWRkKHplcm8pLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuNSIpOworICAobmV3IFRlc3QoImFkZDEwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RTEwIikpLmFkZCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi01MDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoImFkZDEwNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RTUiKSkuYWRkKHplcm8pLnRvU3RyaW5nKCkpLmVxdWFscygiLTUwMDAwMCIpOworICAobmV3IFRlc3QoImFkZDEwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RTEiKSkuYWRkKHplcm8pLnRvU3RyaW5nKCkpLmVxdWFscygiLTUwIik7CisgIChuZXcgVGVzdCgiYWRkMTA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTVFMCIpKS5hZGQoemVybykudG9TdHJpbmcoKSkuZXF1YWxzKCItNSIpOworICAKKyAgLy8gbW9yZSBmaXhlZCwgUkhTIHN3YXBzCisgIChuZXcgVGVzdCgiYWRkMTA4IikpLm9rPSh6ZXJvLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTEwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMDAwMDA1NjI2NyIpOworICAobmV3IFRlc3QoImFkZDEwOSIpKS5vaz0oemVyby5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS02IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMDU2MjY3Iik7CisgIChuZXcgVGVzdCgiYWRkMTEwIikpLm9rPSh6ZXJvLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC41NjI2NyIpOworICAobmV3IFRlc3QoImFkZDExMSIpKS5vaz0oemVyby5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS00IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTUuNjI2NyIpOworICAobmV3IFRlc3QoImFkZDExMiIpKS5vaz0oemVyby5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS0zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTU2LjI2NyIpOworICAobmV3IFRlc3QoImFkZDExMyIpKS5vaz0oemVyby5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS0yIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTU2Mi42NyIpOworICAobmV3IFRlc3QoImFkZDExNCIpKS5vaz0oemVyby5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS0xIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTU2MjYuNyIpOworICAobmV3IFRlc3QoImFkZDExNSIpKS5vaz0oemVyby5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS0wIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTU2MjY3Iik7CisgIChuZXcgVGVzdCgiYWRkMTE2IikpLm9rPSh6ZXJvLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNUUtMTAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC4wMDAwMDAwMDA1Iik7CisgIChuZXcgVGVzdCgiYWRkMTE3IikpLm9rPSh6ZXJvLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNUUtNSIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAwMDA1Iik7CisgIChuZXcgVGVzdCgiYWRkMTE4IikpLm9rPSh6ZXJvLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNUUtMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjUiKTsKKyAgKG5ldyBUZXN0KCJhZGQxMjkiKSkub2s9KHplcm8uYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RS0xMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAwMDAwMDAwMDUiKTsKKyAgKG5ldyBUZXN0KCJhZGQxMzAiKSkub2s9KHplcm8uYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RS01IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMDAwMDUiKTsKKyAgKG5ldyBUZXN0KCJhZGQxMzEiKSkub2s9KHplcm8uYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RS0xIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuNSIpOworICAobmV3IFRlc3QoImFkZDEzMiIpKS5vaz0oemVyby5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTVFMTAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItNTAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJhZGQxMzMiKSkub2s9KHplcm8uYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01RTUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItNTAwMDAwIik7CisgIChuZXcgVGVzdCgiYWRkMTM0IikpLm9rPSh6ZXJvLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNUUxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTUwIik7CisgIChuZXcgVGVzdCgiYWRkMTM1IikpLm9rPSh6ZXJvLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNUUwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTUiKTsKKyAgCisgIC8vIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCisgIChuZXcgVGVzdCgiYWRkMTQwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMCIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJhZGQxNDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMC4wIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImFkZDE0MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi4zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMy4zIik7CisgIChuZXcgVGVzdCgiYWRkMTQzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMy4iKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi4zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMy4zIik7CisgIChuZXcgVGVzdCgiYWRkMTQ0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMy4wIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjMuMyIpOworICAobmV3IFRlc3QoImFkZDE0NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMDAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi4zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMy4zMCIpOworICAobmV3IFRlc3QoImFkZDE0NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCI2Iik7CisgIChuZXcgVGVzdCgiYWRkMTQ3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCI2Iik7CisgIChuZXcgVGVzdCgiYWRkMTQ4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiYWRkMTQ5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMyIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMDMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIAorICAobmV3IFRlc3QoImFkZDE1MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwLjAiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwIik7CisgIChuZXcgVGVzdCgiYWRkMTUxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMCIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJhZGQxNTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjMuMyIpOworICAobmV3IFRlc3QoImFkZDE1MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjMuMyIpOworICAobmV3IFRlc3QoImFkZDE1NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMCIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzLjMiKTsKKyAgKG5ldyBUZXN0KCJhZGQxNTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzLjAwIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjMuMzAiKTsKKyAgKG5ldyBUZXN0KCJhZGQxNTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLnRvU3RyaW5nKCkpLmVxdWFscygiNiIpOworICAobmV3IFRlc3QoImFkZDE1NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIiszIikpLnRvU3RyaW5nKCkpLmVxdWFscygiNiIpOworICAobmV3IFRlc3QoImFkZDE1OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImFkZDE1OSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoImFkZDE2MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDMiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjAzIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMCIpOworICAobmV3IFRlc3QoImFkZDE2MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjdFKzEyIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpLG1jZmQpLnRvU3RyaW5nKCkpLmVxdWFscygiNjk5OTk5OTk5OTk5OSIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQxNjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3RSsxMiIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4xMSIpLG1jZmQpLnRvU3RyaW5nKCkpLmVxdWFscygiNzAwMDAwMDAwMDAwMS4xMSIpOworICAKKyAgKG5ldyBUZXN0KCJhZGQxNjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjExIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3RSsxMiIpLG1jZmQpLnRvU3RyaW5nKCkpLmVxdWFscygiNzAwMDAwMDAwMDAwMS4xMSIpOworICAKKyAgCisgIC8vIGlucHV0IHByZXBhcmF0aW9uIHRlc3RzCisgIGFsaHM9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5MDAwMDAiKTsKKyAgYXJocz1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTk5OTk5OTk5OTk5Iik7CisgIChuZXcgVGVzdCgiYWRkMTcwIikpLm9rPShhbGhzLmFkZChhcmhzLG1jMykudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjIzRSsxMyIpOworICAobmV3IFRlc3QoImFkZDE3MSIpKS5vaz0oYXJocy5hZGQoYWxocyxtYzMpLnRvU3RyaW5nKCkpLmVxdWFscygiMi4yM0UrMTMiKTsKKyAgKG5ldyBUZXN0KCJhZGQxNzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMkUrMyIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzQ1NiIpLG1jMykudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjU1RSs0Iik7CisgIC8vIG5leHQgd2FzIDEuNTRFKzQgdW5kZXIgb2xkIFt0cnVuY2F0ZSB0byBkaWdpdHMrMV0gcnVsZXMKKyAgKG5ldyBUZXN0KCJhZGQxNzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMkUrMyIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzQ0NiIpLG1jMykudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjU1RSs0Iik7CisgIChuZXcgVGVzdCgiYWRkMTc0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTJFKzMiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjM0NTQiKSxtYzMpLnRvU3RyaW5nKCkpLmVxdWFscygiMS41NUUrNCIpOworICAobmV3IFRlc3QoImFkZDE3NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyRSszIikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzNDQ0IiksbWMzKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNTRFKzQiKTsKKyAgCisgIChuZXcgVGVzdCgiYWRkMTc2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzQ1NiIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTJFKzMiKSxtYzMpLnRvU3RyaW5nKCkpLmVxdWFscygiMS41NUUrNCIpOworICAvLyBuZXh0IHdhcyAxLjU0RSs0IHVuZGVyIG9sZCBbdHJ1bmNhdGUgdG8gZGlnaXRzKzFdIHJ1bGVzCisgIChuZXcgVGVzdCgiYWRkMTc3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzQ0NiIpKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTJFKzMiKSxtYzMpLnRvU3RyaW5nKCkpLmVxdWFscygiMS41NUUrNCIpOworICAobmV3IFRlc3QoImFkZDE3OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjM0NTQiKSkuYWRkKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyRSszIiksbWMzKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNTVFKzQiKTsKKyAgKG5ldyBUZXN0KCJhZGQxNzkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzNDQ0IikpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMkUrMyIpLG1jMykudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjU0RSs0Iik7CisgIAorICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLmFkZCgoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKW51bGwpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDIyKXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tudWxsKi8KKyAgKG5ldyBUZXN0KCJhZGQyMDAiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrbnVsbDI6ZG97CisgICB0ZW4uYWRkKHRlbiwoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQyMyl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbDIqLworICAobmV3IFRlc3QoImFkZDIwMSIpKS5vaz1mbGFnOworICAKKyAgdHJ5e2NoZWNrZGlnaXRzOmRveworICAgdGVubG9uZy5hZGQoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLlpFUk8sbWNsZCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQyNCl7YWU9JDI0OworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlRvbyBtYW55IGRpZ2l0czoiKyIgIit0ZW5sb25nLnRvU3RyaW5nKCkpOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgiYWRkMjAyIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5aRVJPLmFkZCh0ZW5sb25nLG1jbGQpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMjUpe2FlPSQyNTsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IisiICIrdGVubG9uZy50b1N0cmluZygpKTsKKyAgfS8qY2hlY2tkaWdpdHMqLworICAobmV3IFRlc3QoImFkZDIwMyIpKS5vaz1mbGFnOworICAKKyAgLy8gY2hlY2sgbG9zdGRpZ2l0cyBub3QgcmFpc2VkIGlmIGRpZ2l0cz0wIFtkeWFkaWMgbWV0aG9kXQorICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICB0ZW5sb25nLmFkZChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuWkVSTyxtY2xkMCk7CisgICBmbGFnPXRydWU7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDI2KXthZT0kMjY7CisgICBmbGFnPWZhbHNlOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgiYWRkMjA0IikpLm9rPWZsYWc7CisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5aRVJPLmFkZCh0ZW5sb25nLG1jbGQwKTsKKyAgIGZsYWc9dHJ1ZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMjcpe2FlPSQyNzsKKyAgIGZsYWc9ZmFsc2U7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJhZGQyMDUiKSkub2s9ZmxhZzsKKyAgCisgIHN1bW1hcnkoImFkZCIpOworICByZXR1cm47fQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjY29tcGFyZVRvKEJpZ0RlY2ltYWwpfSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ2NvbXBhcmV0bygpeworICBib29sZWFuIGZsYWc9ZmFsc2U7CisgIGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uIGFlPW51bGw7CisgIC8vIHdlIGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdCBmdW5jdGlvbjsgdGhpcyBqdXN0CisgIC8vIHRlc3RzIGV4aXN0ZW5jZSwgZXhjZXB0aW9ucywgYW5kIHBvc3NpYmxlIHJlc3VsdHMKKyAgCisgIChuZXcgVGVzdCgiY3B0MDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5jb21wYXJlVG8obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKSk9PTE7CisgIChuZXcgVGVzdCgiY3B0MDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5jb21wYXJlVG8obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKSk9PTA7CisgIChuZXcgVGVzdCgiY3B0MDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5jb21wYXJlVG8obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS4wMCIpKSk9PTA7CisgIChuZXcgVGVzdCgiY3B0MDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41IikpLmNvbXBhcmVUbyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUiKSkpPT0wOworICAobmV3IFRlc3QoImNwdDAwNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkuY29tcGFyZVRvKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSkpPT0oLTEpOworICAobmV3IFRlc3QoImNwdDAwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkuY29tcGFyZVRvKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSxtY2RlZikpPT0oLTEpOworICAobmV3IFRlc3QoImNwdDAwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkuY29tcGFyZVRvKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSxtYzYpKT09KC0xKTsKKyAgKG5ldyBUZXN0KCJjcHQwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLmNvbXBhcmVUbyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IiksbWNmZCkpPT0oLTEpOworICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLmNvbXBhcmVUbygoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKW51bGwpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDI4KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tudWxsKi8KKyAgKG5ldyBUZXN0KCJjcHQxMDAiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrbnVsbDI6ZG97CisgICB0ZW4uY29tcGFyZVRvKHRlbiwoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQyOSl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbDIqLworICAobmV3IFRlc3QoImNwdDEwMSIpKS5vaz1mbGFnOworICAKKyAgdHJ5e2NoZWNrZGlnaXRzOmRveworICAgdGVubG9uZy5jb21wYXJlVG8oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORSxtY2xkKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDMwKXthZT0kMzA7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3RlbmxvbmcudG9TdHJpbmcoKSk7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJjcHQxMDIiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrZGlnaXRzOmRveworICAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORS5jb21wYXJlVG8odGVubG9uZyxtY2xkKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDMxKXthZT0kMzE7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3RlbmxvbmcudG9TdHJpbmcoKSk7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJjcHQxMDMiKSkub2s9ZmxhZzsKKyAgCisgIHN1bW1hcnkoImNvbXBhcmVUbyIpOworICByZXR1cm47fQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjZGl2aWRlfSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ2RpdmlkZSgpeworICBib29sZWFuIGZsYWc9ZmFsc2U7CisgIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgcm1jZDsKKyAgaW50IHJodTsKKyAgaW50IHJkOworICBpbnQgcnU7CisgIGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uIGU9bnVsbDsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgCisgIChuZXcgVGVzdCgiZGl2MzAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMzMzMzMzMzMzIik7CisgIChuZXcgVGVzdCgiZGl2MzAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNjY2NjY2NjY3Iik7CisgIChuZXcgVGVzdCgiZGl2MzAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMi40Iik7CisgIChuZXcgVGVzdCgiZGl2MzA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIi0yLjQiKTsKKyAgKG5ldyBUZXN0KCJkaXYzMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMi40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIuNCIpOworICAobmV3IFRlc3QoImRpdjMwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yLjQiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMi40Iik7CisgIChuZXcgVGVzdCgiZGl2MzA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40MCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNCIpOworICAobmV3IFRlc3QoImRpdjMwOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNDAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMi40Iik7CisgIChuZXcgVGVzdCgiZGl2MzA5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yIik7CisgIChuZXcgVGVzdCgiZGl2MzEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40MDAiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjIiKTsKKyAgKG5ldyBUZXN0KCJkaXYzMTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJkaXYzMTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMjAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgiZGl2MzEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTg3IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxODciKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgiZGl2MzE0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNSIpOworICAobmV3IFRlc3QoImRpdjMxNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNSIpOworICAobmV3IFRlc3QoImRpdjMxNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMi41Iik7CisgIChuZXcgVGVzdCgiZGl2MzE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4yMDAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIyNSIpOworICAobmV3IFRlc3QoImRpdjMxOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5OTk5OSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoImRpdjMxOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5OTk5OS40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiOTk5OTk5OTk5Iik7CisgIChuZXcgVGVzdCgiZGl2MzIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OTk5LjUiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5Iik7CisgIChuZXcgVGVzdCgiZGl2MzIxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OTk5LjkiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5Iik7CisgIChuZXcgVGVzdCgiZGl2MzIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OTk5Ljk5OSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjFFKzkiKTsKKyAgKG5ldyBUZXN0KCJkaXYzMjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDBFLTUwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAvLyBNQworICAobmV3IFRlc3QoImRpdjMyNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5OTk5OSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoImRpdjMyNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5OTk5OSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5Iik7CisgIChuZXcgVGVzdCgiZGl2MzI3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs3Iik7CisgIChuZXcgVGVzdCgiZGl2MzI4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIiksbWM2KS50b1N0cmluZygpKS5lcXVhbHMoIjk5OTk5OSIpOworICAKKyAgLy8gY2hlY2sgcm91bmRpbmcgZXhwbGljaXRseSBbbm90ZTogZGlnaXRzKzEgdHJ1bmNhdGlvbl0KKyAgcm1jZD1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuU0NJRU5USUZJQyxmYWxzZSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0NFSUxJTkcpOworICAobmV3IFRlc3QoImRpdjMzMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTAiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNSIpOworICAobmV3IFRlc3QoImRpdjMzMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTEiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNiIpOworICAobmV3IFRlc3QoImRpdjMzMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTUiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNiIpOworICBybWNkPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDLGZhbHNlLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfRE9XTik7CisgIChuZXcgVGVzdCgiZGl2MzMzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS41NSIpKS5kaXZpZGUob25lLHJtY2QpLnRvU3RyaW5nKCkpLmVxdWFscygiMS41Iik7CisgIChuZXcgVGVzdCgiZGl2MzM0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS41OSIpKS5kaXZpZGUob25lLHJtY2QpLnRvU3RyaW5nKCkpLmVxdWFscygiMS41Iik7CisgIHJtY2Q9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUMsZmFsc2UsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUik7CisgIChuZXcgVGVzdCgiZGl2MzM1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS41NSIpKS5kaXZpZGUob25lLHJtY2QpLnRvU3RyaW5nKCkpLmVxdWFscygiMS41Iik7CisgIChuZXcgVGVzdCgiZGl2MzM2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS41OSIpKS5kaXZpZGUob25lLHJtY2QpLnRvU3RyaW5nKCkpLmVxdWFscygiMS41Iik7CisgIHJtY2Q9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUMsZmFsc2UsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04pOworICAobmV3IFRlc3QoImRpdjMzNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNDUiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNCIpOworICAobmV3IFRlc3QoImRpdjMzOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTAiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNSIpOworICAobmV3IFRlc3QoImRpdjMzOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTUiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNSIpOworICBybWNkPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDLGZhbHNlLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKTsKKyAgKG5ldyBUZXN0KCJkaXYzNDAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjQ1IikpLmRpdmlkZShvbmUscm1jZCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjQiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjUwIikpLmRpdmlkZShvbmUscm1jZCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjUiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjU1IikpLmRpdmlkZShvbmUscm1jZCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjYiKTsKKyAgcm1jZD1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuU0NJRU5USUZJQyxmYWxzZSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApOworICAobmV3IFRlc3QoImRpdjM0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNDUiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNSIpOworICAobmV3IFRlc3QoImRpdjM0NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTAiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNSIpOworICAobmV3IFRlc3QoImRpdjM0NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTUiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNiIpOworICBybWNkPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDLGZhbHNlLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVVApOworICAobmV3IFRlc3QoImRpdjM0NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTAiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNSIpOworICAobmV3IFRlc3QoImRpdjM0NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTEiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNiIpOworICAobmV3IFRlc3QoImRpdjM0OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNTUiKSkuZGl2aWRlKG9uZSxybWNkKS50b1N0cmluZygpKS5lcXVhbHMoIjEuNiIpOworICAKKyAgLy8gZml4ZWQgcG9pbnQuLi4KKyAgKG5ldyBUZXN0KCJkaXYzNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImRpdjM1MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgiZGl2MzUyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi40Iik7CisgIChuZXcgVGVzdCgiZGl2MzUzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0yLjQiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMi40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIuNCIpOworICAobmV3IFRlc3QoImRpdjM1NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yLjQiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi40Iik7CisgIChuZXcgVGVzdCgiZGl2MzU2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40MCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNDAiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNDAwIik7CisgIChuZXcgVGVzdCgiZGl2MzU4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yIik7CisgIChuZXcgVGVzdCgiZGl2MzU5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40MDAiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjIwMCIpOworICAobmV3IFRlc3QoImRpdjM2MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImRpdjM2MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxODciKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjE4NyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMyIpOworICAobmV3IFRlc3QoImRpdjM2NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjMiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNjUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjMiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjIwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjI1Iik7CisgIChuZXcgVGVzdCgiZGl2MzY3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS4wIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi41Iik7CisgIChuZXcgVGVzdCgiZGl2MzY4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS4wIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjUiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNjkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjAiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi41Iik7CisgIChuZXcgVGVzdCgiZGl2MzcwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS4wIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjIwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjI1LjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTk5OTk5OTkiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5OTk5OTk5OTkiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTk5OTk5OTkuNCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjk5OTk5OTk5OS40Iik7CisgIChuZXcgVGVzdCgiZGl2MzczIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OTk5LjUiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5OTk5OTk5OTkuNSIpOworICAobmV3IFRlc3QoImRpdjM3NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5OTk5OS45IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTk5OTk5OTk5LjkiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNzUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTk5OTk5OTkuOTk5IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTk5OTk5OTk5Ljk5OSIpOworICAobmV3IFRlc3QoImRpdjM3NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAwMEUtNSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYzNzciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDAwMDAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwMDAwIik7CisgIAorICAvLy0gRml4ZWQgcG9pbnQ7IGV4cGxpY2l0IHNjYWxlcyAmIHJvdW5kcyBbb2xkIEJpZ0RlY2ltYWwgZGl2aWRlc10KKyAgcmh1PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUDsKKyAgcmQ9Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9ET1dOOworICAobmV3IFRlc3QoImRpdjAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiZGl2MDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiZGl2MDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLDAscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMDQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksMSxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgiZGl2MDA1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLDIscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksMyxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksNCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwIik7CisgIChuZXcgVGVzdCgiZGl2MDA4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksMCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImRpdjAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSwxLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksMixyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4zMyIpOworICAobmV3IFRlc3QoImRpdjAxMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSwzLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMzMyIpOworICAobmV3IFRlc3QoImRpdjAxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMzMzMiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImRpdjAxNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImRpdjAxNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSwwLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgiZGl2MDE4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLDEscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuNyIpOworICAobmV3IFRlc3QoImRpdjAxOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSwyLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjY3Iik7CisgIChuZXcgVGVzdCgiZGl2MDIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLDMscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuNjY3Iik7CisgIChuZXcgVGVzdCgiZGl2MDIxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLDQscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuNjY2NyIpOworICAKKyAgKG5ldyBUZXN0KCJkaXYwMzAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyMDAwIiksNCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41MDAwIik7CisgIChuZXcgVGVzdCgiZGl2MDMxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMjAwMCIpLDMscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuNTAwIik7CisgIChuZXcgVGVzdCgiZGl2MDMyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMjAwMCIpLDIscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuNTAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyMDAwIiksMSxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41Iik7CisgIChuZXcgVGVzdCgiZGl2MDM0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMjAwMCIpLDAscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgCisgIChuZXcgVGVzdCgiZGl2MDM1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1MDAwIiksNCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMjAwIik7CisgIChuZXcgVGVzdCgiZGl2MDM2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1MDAwIiksMyxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwMzciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUwMDAiKSwyLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAyIik7CisgIChuZXcgVGVzdCgiZGl2MDM4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1MDAwIiksMSxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgiZGl2MDM5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1MDAwIiksMCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAKKyAgKG5ldyBUZXN0KCJkaXYwNDAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OTk5IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljc3Nzc3Nzc3IiksNCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMjI3Iik7CisgIChuZXcgVGVzdCgiZGl2MDQxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OTk5IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljc3Nzc3NzciKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAyMjciKTsKKyAgKG5ldyBUZXN0KCJkaXYwNDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3NzciKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAyMjciKTsKKyAgKG5ldyBUZXN0KCJkaXYwNDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljc3Nzc3Nzc3IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OTk5IiksNCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45Nzc4Iik7CisgIChuZXcgVGVzdCgiZGl2MDQ0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3Nzc3IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OTkiKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk3NzgiKTsKKyAgKG5ldyBUZXN0KCJkaXYwNDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljc3Nzc3NyIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OTkiKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk3NzgiKTsKKyAgKG5ldyBUZXN0KCJkaXYwNDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljc3Nzc3IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5IiksNCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45Nzc4Iik7CisgIChuZXcgVGVzdCgiZGl2MDQ3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTkiKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk3NzgiKTsKKyAgKG5ldyBUZXN0KCJkaXYwNDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljc3NyIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTkiKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk3NzgiKTsKKyAgKG5ldyBUZXN0KCJkaXYwNDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljc3IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5IiksNCxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45NzgwIik7CisgIChuZXcgVGVzdCgiZGl2MDUwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5LjkiKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk3OTgiKTsKKyAgKG5ldyBUZXN0KCJkaXYwNTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5LiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS4iKSw0LHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgiZGl2MDYwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OTk5OSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3Nzc3NyIpLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAyMjcyNzI3Iik7CisgIChuZXcgVGVzdCgiZGl2MDYxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OTk5IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljc3Nzc3NzciKSxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMjI3MjczIik7CisgIChuZXcgVGVzdCgiZGl2MDYyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OTkiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkuNzc3Nzc3Iikscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDIyNzI3Iik7CisgIChuZXcgVGVzdCgiZGl2MDYzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3Nzc3NyIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OTk5OSIpLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk3Nzc3Nzc4Iik7CisgIChuZXcgVGVzdCgiZGl2MDY0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3Nzc3IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OTkiKSxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45Nzc3Nzc4Iik7CisgIChuZXcgVGVzdCgiZGl2MDY1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3NzciKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkuOTk5OTk5Iikscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuOTc3Nzc4Iik7CisgIChuZXcgVGVzdCgiZGl2MDY2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3NyIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OSIpLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk3Nzc4Iik7CisgIChuZXcgVGVzdCgiZGl2MDY3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43Nzc3IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTkiKSxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45Nzc4Iik7CisgIChuZXcgVGVzdCgiZGl2MDY4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43NzciKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkuOTk5Iikscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuOTc4Iik7CisgIChuZXcgVGVzdCgiZGl2MDY5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43NyIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OSIpLHJodSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk4Iik7CisgIChuZXcgVGVzdCgiZGl2MDcwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS43IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5LjkiKSxyaHUpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wIik7CisgIChuZXcgVGVzdCgiZGl2MDcxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS4iKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkuIikscmh1KS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgCisgIHJkPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfRE9XTjsgLy8gdGVzdCB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQKKyAgKG5ldyBUZXN0KCJkaXYwODAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksMCxyZCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiZGl2MDgxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLDEscmQpLnRvU3RyaW5nKCkpLmVxdWFscygiMC42Iik7CisgIChuZXcgVGVzdCgiZGl2MDgyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLDIscmQpLnRvU3RyaW5nKCkpLmVxdWFscygiMC42NiIpOworICAobmV3IFRlc3QoImRpdjA4MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSwzLHJkKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNjY2Iik7CisgIChuZXcgVGVzdCgiZGl2MDg0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLDQscmQpLnRvU3RyaW5nKCkpLmVxdWFscygiMC42NjY2Iik7CisgIAorICBydT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VOTkVDRVNTQVJZOyAvLyBjaGVjayBmb3Igc29tZSAwIHJlc2lkdWVzCisgIChuZXcgVGVzdCgiZGl2MDkwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpLDQscnUpLnRvU3RyaW5nKCkpLmVxdWFscygiMjAwLjAwMDAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwOTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1MCIpLDQscnUpLnRvU3RyaW5nKCkpLmVxdWFscygiMjAuMDAwMCIpOworICAobmV3IFRlc3QoImRpdjA5MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUwMCIpLDQscnUpLnRvU3RyaW5nKCkpLmVxdWFscygiMi4wMDAwIik7CisgIChuZXcgVGVzdCgiZGl2MDkzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNTAwMCIpLDQscnUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yMDAwIik7CisgIChuZXcgVGVzdCgiZGl2MDk0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNTAwMCIpLDMscnUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yMDAiKTsKKyAgKG5ldyBUZXN0KCJkaXYwOTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1MDAwIiksMixydSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjIwIik7CisgIChuZXcgVGVzdCgiZGl2MDk2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNTAwMCIpLDEscnUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yIik7CisgIAorICAvLyBjaGVjayByb3VuZGluZyBleHBsaWNpdGx5CisgIChuZXcgVGVzdCgiZGl2MTAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTUiKSkuZGl2aWRlKG9uZSwyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfQ0VJTElORykudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjA2Iik7CisgIChuZXcgVGVzdCgiZGl2MTAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTUiKSkuZGl2aWRlKG9uZSwxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfQ0VJTElORykudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9DRUlMSU5HKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMDQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9ET1dOKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDUiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9ET1dOKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoImRpdjEwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDU1IikpLmRpdmlkZShvbmUsMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImRpdjEwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDU1IikpLmRpdmlkZShvbmUsMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0ZMT09SKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDUiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIAorICAobmV3IFRlc3QoImRpdjExMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDQ1IikpLmRpdmlkZShvbmUsMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRE9XTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjA0Iik7CisgIChuZXcgVGVzdCgiZGl2MTExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNDUiKSkuZGl2aWRlKG9uZSwxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9ET1dOKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoImRpdjExMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDQ1IikpLmRpdmlkZShvbmUsMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRE9XTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiZGl2MTEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTAiKSkuZGl2aWRlKG9uZSwyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9ET1dOKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDUiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1MCIpKS5kaXZpZGUob25lLDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgiZGl2MTE1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTAiKSkuZGl2aWRlKG9uZSwwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9ET1dOKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wNSIpOworICAobmV3IFRlc3QoImRpdjExNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDU1IikpLmRpdmlkZShvbmUsMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRE9XTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAKKyAgKG5ldyBUZXN0KCJkaXYxMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA0NSIpKS5kaXZpZGUob25lLDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wNCIpOworICAobmV3IFRlc3QoImRpdjEyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDQ1IikpLmRpdmlkZShvbmUsMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA0NSIpKS5kaXZpZGUob25lLDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImRpdjEyMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDUwIikpLmRpdmlkZShvbmUsMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjA1Iik7CisgIChuZXcgVGVzdCgiZGl2MTI0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTAiKSkuZGl2aWRlKG9uZSwxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoImRpdjEyNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDUwIikpLmRpdmlkZShvbmUsMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiZGl2MTI2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xNTAiKSkuZGl2aWRlKG9uZSwyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMTUiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMjciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjE1MCIpKS5kaXZpZGUob25lLDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yIik7CisgIChuZXcgVGVzdCgiZGl2MTI4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xNTAiKSkuZGl2aWRlKG9uZSwwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMjkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wNiIpOworICAobmV3IFRlc3QoImRpdjEzMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDU1IikpLmRpdmlkZShvbmUsMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJkaXYxMzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAKKyAgKG5ldyBUZXN0KCJkaXYxNDAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA0NSIpKS5kaXZpZGUob25lLDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDUiKTsKKyAgKG5ldyBUZXN0KCJkaXYxNDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA0NSIpKS5kaXZpZGUob25lLDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoImRpdjE0MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDQ1IikpLmRpdmlkZShvbmUsMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImRpdjE0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDUwIikpLmRpdmlkZShvbmUsMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wNSIpOworICAobmV3IFRlc3QoImRpdjE0NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDUwIikpLmRpdmlkZShvbmUsMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgiZGl2MTQ1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTAiKSkuZGl2aWRlKG9uZSwwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiZGl2MTQ2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTUiKSkuZGl2aWRlKG9uZSwyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjA2Iik7CisgIChuZXcgVGVzdCgiZGl2MTQ3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTUiKSkuZGl2aWRlKG9uZSwxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJkaXYxNDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1NSIpKS5kaXZpZGUob25lLDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgCisgIChuZXcgVGVzdCgiZGl2MTUwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTUiKSkuZGl2aWRlKG9uZSwyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wNiIpOworICAobmV3IFRlc3QoImRpdjE1MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDU1IikpLmRpdmlkZShvbmUsMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoImRpdjUyLiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDU1IikpLmRpdmlkZShvbmUsMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgCisgIC8vLSBlcnJvciBjb25kaXRpb25zIC0tLQorICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLmRpdmlkZSgoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKW51bGwpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDMyKXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tudWxsKi8KKyAgKG5ldyBUZXN0KCJkaXYyMDEiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrbnVsbDI6ZG97CisgICB0ZW4uZGl2aWRlKHRlbiwoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQzMyl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbDIqLworICAobmV3IFRlc3QoImRpdjIwMiIpKS5vaz1mbGFnOworICAKKyAgdHJ5e2NoZWNrc2NhbGU6ZG97CisgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLC04LDApOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbiAkMzQpe2U9JDM0OworICAgZmxhZz1mbGFnJihlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJOZWdhdGl2ZSBzY2FsZTogLTgiKTsKKyAgfS8qY2hlY2tzY2FsZSovCisgIChuZXcgVGVzdCgiZGl2MjAzIikpLm9rPWZsYWc7CisgIAorICB0cnl7cm91bm46ZG97CisgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNTAwMCIpLDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWSk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQzNSl7YWU9JDM1OworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlJvdW5kaW5nIG5lY2Vzc2FyeSIpOworICB9Lypyb3VubiovCisgIChuZXcgVGVzdCgiZGl2MjA0IikpLm9rPWZsYWc7CisgIHRyeXtyb3Vubjpkb3sKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAxIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpLDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWSk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQzNil7YWU9JDM2OworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlJvdW5kaW5nIG5lY2Vzc2FyeSIpOworICB9Lypyb3VubiovCisgIChuZXcgVGVzdCgiZGl2MjA1IikpLm9rPWZsYWc7CisgIHRyeXtyb3Vubjpkb3sKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAxIikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAiKSwxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVU5ORUNFU1NBUlkpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMzcpe2FlPSQzNzsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJSb3VuZGluZyBuZWNlc3NhcnkiKTsKKyAgfS8qcm91bm4qLworICAobmV3IFRlc3QoImRpdjIwNiIpKS5vaz1mbGFnOworICB0cnl7cm91bm46ZG97CisgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDEiKSkuZGl2aWRlKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwIiksMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VOTkVDRVNTQVJZKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDM4KXthZT0kMzg7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiUm91bmRpbmcgbmVjZXNzYXJ5Iik7CisgIH0vKnJvdW5uKi8KKyAgKG5ldyBUZXN0KCJkaXYyMDciKSkub2s9ZmxhZzsKKyAgdHJ5e3JvdW5uOmRveworICAgKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDAwMSIpKS5kaXZpZGUobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWSk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQzOSl7YWU9JDM5OworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlJvdW5kaW5nIG5lY2Vzc2FyeSIpOworICB9Lypyb3VubiovCisgIChuZXcgVGVzdCgiZGl2MjA4IikpLm9rPWZsYWc7CisgIAorICB0cnl7ZGl2MDpkb3sKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLmRpdmlkZShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkNDApe2FlPSQ0MDsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJEaXZpZGUgYnkgMCIpOworICB9LypkaXYwKi8KKyAgKG5ldyBUZXN0KCJkaXYyMDkiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIHRlbmxvbmcuZGl2aWRlKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUsbWNsZCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ0MSl7YWU9JDQxOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlRvbyBtYW55IGRpZ2l0czoiKyIgIit0ZW5sb25nLnRvU3RyaW5nKCkpOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgiZGl2MjEwIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUuZGl2aWRlKHRlbmxvbmcsbWNsZCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ0Mil7YWU9JDQyOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlRvbyBtYW55IGRpZ2l0czoiKyIgIit0ZW5sb25nLnRvU3RyaW5nKCkpOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgiZGl2MjExIikpLm9rPWZsYWc7CisgIAorICBzdW1tYXJ5KCJkaXZpZGUiKTsKKyAgcmV0dXJuO30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBCaWdEZWNpbWFsI2RpdmlkZUludGVnZXJ9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnZGl2aWRlSW50ZWdlcigpeworICBib29sZWFuIGZsYWc9ZmFsc2U7CisgIGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uIGFlPW51bGw7CisgIAorICAobmV3IFRlc3QoImR2STAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMS4zIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMSIpOworICAobmV3IFRlc3QoImR2STAwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMS4wIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMSIpOworICAobmV3IFRlc3QoImR2STAwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMS4zIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjMzIik7CisgIChuZXcgVGVzdCgiZHZJMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAxLjAiKSkuZGl2aWRlSW50ZWdlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMzMiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQiKSkuZGl2aWRlSW50ZWdlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMiIpOworICAobmV3IFRlc3QoImR2STAwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNDAwIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxOCIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjE4IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImR2STAwOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjExMjAiKSkuZGl2aWRlSW50ZWdlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImR2STAwOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNCIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgiZHZJMDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40MDAiKSkuZGl2aWRlSW50ZWdlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImR2STAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNSIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImR2STAxMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjguMDA1IikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgLy8gTUMKKyAgKG5ldyBUZXN0KCJkdkkwMTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgiZHZJMDE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSxtYzYpLnRvU3RyaW5nKCkpLmVxdWFscygiMiIpOworICAKKyAgLy8gRml4ZWQgLS0KKyAgKG5ldyBUZXN0KCJkdkkwMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDEuMyIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDEiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDEuMCIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDEiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDEuMyIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzMyIpOworICAobmV3IFRlc3QoImR2STAyNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMS4wIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjMzIik7CisgIChuZXcgVGVzdCgiZHZJMDI1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQwMCIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgiZHZJMDI3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTgiKSkuZGl2aWRlSW50ZWdlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxOCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMjgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMTIwIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMjkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQiKSkuZGl2aWRlSW50ZWdlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoImR2STAzMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNDAwIikpLmRpdmlkZUludGVnZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUiKSkuZGl2aWRlSW50ZWdlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJkdkkwMzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI4LjAwNSIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjciKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgiZHZJMDMzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgiZHZJMDM0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgiZHZJMDM1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMCIpKS5kaXZpZGVJbnRlZ2VyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIAorICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLmRpdmlkZUludGVnZXIoKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ0Myl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbCovCisgIChuZXcgVGVzdCgiZHZJMTAxIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja251bGwyOmRveworICAgdGVuLmRpdmlkZUludGVnZXIodGVuLChjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KW51bGwpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDQ0KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tudWxsMiovCisgIChuZXcgVGVzdCgiZHZJMTAyIikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLmRpdmlkZUludGVnZXIodGVubG9uZyxtY2xkKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDQ1KXthZT0kNDU7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3RlbmxvbmcudG9TdHJpbmcoKSk7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJkdkkxMDMiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIHRlbmxvbmcuZGl2aWRlSW50ZWdlcihjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLG1jbGQpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkNDYpe2FlPSQ0NjsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IisiICIrdGVubG9uZy50b1N0cmluZygpKTsKKyAgfS8qY2hlY2tkaWdpdHMqLworICAobmV3IFRlc3QoImR2STEwNCIpKS5vaz1mbGFnOworICAKKyAgc3VtbWFyeSgiZGl2aWRlSW50ZWdlciIpOworICByZXR1cm47fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjbWF4fSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ21heCgpeworICBib29sZWFuIGZsYWc9ZmFsc2U7CisgIGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uIGFlPW51bGw7CisgIAorICAvLyB3ZSBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3QgZnVuY3Rpb247IHRoaXMgYW5kIG1pbiBqdXN0CisgIC8vIHRlc3QgZXhpc3RlbmNlIGFuZCB0ZXN0IHRoZSB0cnV0aCB0YWJsZQorICAobmV3IFRlc3QoIm1heDAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSkubWF4KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI1Iik7CisgIChuZXcgVGVzdCgibWF4MDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5tYXgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjUiKTsKKyAgKG5ldyBUZXN0KCJtYXgwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLm1heChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3IikpLnRvU3RyaW5nKCkpLmVxdWFscygiNyIpOworICAobmV3IFRlc3QoIm1heDAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkubWF4KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjciKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCI3Iik7CisgIChuZXcgVGVzdCgibWF4MDA1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5tYXgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNyIpLG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCI3Iik7CisgIChuZXcgVGVzdCgibWF4MDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMkUrMyIpKS5tYXgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIwMDAiKTsKKyAgKG5ldyBUZXN0KCJtYXgwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyRSszIikpLm1heChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3IiksbWMzKS50b1N0cmluZygpKS5lcXVhbHMoIjJFKzMiKTsKKyAgKG5ldyBUZXN0KCJtYXgwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3IikpLm1heChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyRSszIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMjAwMCIpOworICAobmV3IFRlc3QoIm1heDAwOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjciKSkubWF4KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjJFKzMiKSxtYzMpLnRvU3RyaW5nKCkpLmVxdWFscygiMkUrMyIpOworICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLm1heCgoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKW51bGwpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDQ3KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tudWxsKi8KKyAgKG5ldyBUZXN0KCJtYXgwMTAiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrbnVsbDI6ZG97CisgICB0ZW4ubWF4KHRlbiwoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ0OCl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbDIqLworICAobmV3IFRlc3QoIm1heDAxMSIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICB0ZW5sb25nLm1heChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLG1jbGQpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkNDkpe2FlPSQ0OTsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IisiICIrdGVubG9uZy50b1N0cmluZygpKTsKKyAgfS8qY2hlY2tkaWdpdHMqLworICAobmV3IFRlc3QoIm1heDAxMiIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLm1heCh0ZW5sb25nLG1jbGQpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkNTApe2FlPSQ1MDsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IisiICIrdGVubG9uZy50b1N0cmluZygpKTsKKyAgfS8qY2hlY2tkaWdpdHMqLworICAobmV3IFRlc3QoIm1heDAxMyIpKS5vaz1mbGFnOworICBzdW1tYXJ5KCJtYXgiKTsKKyAgcmV0dXJuO30KKworIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNtaW59IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnbWluKCl7CisgIGJvb2xlYW4gZmxhZz1mYWxzZTsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIG1pbng9bnVsbDsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgLy8gd2UgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0IGZ1bmN0aW9uOyB0aGlzIGFuZCBtYXgganVzdAorICAvLyB0ZXN0IGV4aXN0ZW5jZSBhbmQgdGVzdCB0aGUgdHJ1dGggdGFibGUKKyAgCisgIChuZXcgVGVzdCgibWluMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5taW4obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJtaW4wMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLm1pbihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLnRvU3RyaW5nKCkpLmVxdWFscygiNSIpOworICAobmV3IFRlc3QoIm1pbjAwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkubWluKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjciKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgibWluMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5taW4obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJtaW4wMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLm1pbihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3IiksbWM2KS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJtaW4wMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMkUrMyIpKS5taW4obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNyIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0yMDAwIik7CisgIChuZXcgVGVzdCgibWluMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTJFKzMiKSkubWluKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjciKSxtYzMpLnRvU3RyaW5nKCkpLmVxdWFscygiLTJFKzMiKTsKKyAgKG5ldyBUZXN0KCJtaW4wMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3IikpLm1pbihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMkUrMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0yMDAwIik7CisgIChuZXcgVGVzdCgibWluMDA5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNyIpKS5taW4obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTJFKzMiKSxtYzMpLnRvU3RyaW5nKCkpLmVxdWFscygiLTJFKzMiKTsKKyAgdHJ5e2NoZWNrbnVsbDpkb3sKKyAgIG1pbng9dGVuOworICAgbWlueC5taW4oKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ1MSl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbCovCisgIChuZXcgVGVzdCgibWluMDEwIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja251bGwyOmRveworICAgbWlueD10ZW47CisgICBtaW54Lm1pbih0ZW4sKGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQpbnVsbCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiAkNTIpeworICAgZmxhZz10cnVlOworICB9LypjaGVja251bGwyKi8KKyAgKG5ldyBUZXN0KCJtaW4wMTEiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIHRlbmxvbmcubWluKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUsbWNsZCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ1Myl7YWU9JDUzOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlRvbyBtYW55IGRpZ2l0czoiKyIgIit0ZW5sb25nLnRvU3RyaW5nKCkpOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgibWluMDEyIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDkpKS5taW4odGVubG9uZyxtY2xkKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDU0KXthZT0kNTQ7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3RlbmxvbmcudG9TdHJpbmcoKSk7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJtaW4wMTMiKSkub2s9ZmxhZzsKKyAgc3VtbWFyeSgibWluIik7CisgIHJldHVybjt9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNtdWx0aXBseX0gbWV0aG9kLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWdtdWx0aXBseSgpeworICBib29sZWFuIGZsYWc9ZmFsc2U7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBsOTsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGw3N2U7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBsMTIzNDU7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBlZGdlOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgdGVuZWRnZTsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGh1bmVkZ2U7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBvcG87CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBkMT1udWxsOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDI9bnVsbDsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gb2U9bnVsbDsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgCisgIChuZXcgVGVzdCgibXVsMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiNiIpOworICAobmV3IFRlc3QoIm11bDAwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjUiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxMCIpOworICAobmV3IFRlc3QoIm11bDAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjAiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjIwIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgibXVsMDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yMCIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIi0yLjQwIik7CisgIChuZXcgVGVzdCgibXVsMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEuMjAiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIi0yLjQwIik7CisgIChuZXcgVGVzdCgibXVsMDA4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEuMjAiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4yMCIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjA5IikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcuMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjM2LjEzOSIpOworICAobmV3IFRlc3QoIm11bDAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAuMCIpOworICAobmV3IFRlc3QoIm11bDAxMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNTAiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEwLjAwIik7CisgIChuZXcgVGVzdCgibXVsMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yMzQ1Njc4OSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAwMDAwMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yMzQ1Njc4OSIpOworICAKKyAgKG5ldyBUZXN0KCJtdWwwMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OTk5OSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OTk5OSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMC4wMDAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgibXVsMDE1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi41MCIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAuMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjUwIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQiKSxtYzYpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAuMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OTk5OSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5Ljk5OTk5OTk5OSIpLG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAuMDAwIik7CisgIAorICAKKyAgKG5ldyBUZXN0KCJtdWwwMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI2Iik7CisgIChuZXcgVGVzdCgibXVsMDIxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiNSIpOworICAobmV3IFRlc3QoIm11bDAyMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEwIik7CisgIChuZXcgVGVzdCgibXVsMDIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yMCIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi40MCIpOworICAobmV3IFRlc3QoIm11bDAyNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjAiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMjUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjIwIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIuNDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4yMCIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIuNDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMjciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4yMCIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMCIpOworICAobmV3IFRlc3QoIm11bDAyOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjIwIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi40MCIpOworICAobmV3IFRlc3QoIm11bDAyOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUuMDkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNy4xIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMzYuMTM5Iik7CisgIChuZXcgVGVzdCgibXVsMDMwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi41IikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMC4wIik7CisgIChuZXcgVGVzdCgibXVsMDMxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi41MCIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAuMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwwMzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjIzNDU2Nzg5IikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDAwMDAwMDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjIzNDU2Nzg5MDAwMDAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgibXVsMDMzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNC41Njc4OSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMTAwMC4wMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMjM0NTY3Ljg5MDAwMDAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgibXVsMDM0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEyMzQuNTY3ODkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMC4wMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMjM0NTY3Ljg5MDAwMDAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgibXVsMDM1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OTk5OTkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTk5OTk5OTkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5OS45OTk5OTk5ODAwMDAwMDAwMDEiKTsKKyAgCisgIChuZXcgVGVzdCgibXVsMDM2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS4wMCIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRS0zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDUwMCIpOworICAobmV3IFRlc3QoIm11bDAzNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwLjAwIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMCIpOworICAobmV3IFRlc3QoIm11bDAzOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwLjAwIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjBFLTMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwIik7IC8vIHJocyBpcyAnMCcKKyAgLy8gMTk5OS4xMi4yMTogbmV4dCBvbmUgaXMgYSBlZGdlIGNhc2UgaWYgaW50ZXJtZWRpYXRlIGxvbmdzIGFyZSB1c2VkCisgIChuZXcgVGVzdCgibXVsMDM5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OTk5OTk5IikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk3NjU2MjUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5NzY1NjI0OTk5OTkwMjM0Mzc1Iik7CisgIAorICBsOT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NTY3ODlFKzEwIik7CisgIGw3N2U9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzdFLTIwIik7CisgIChuZXcgVGVzdCgibXVsMDQwIikpLm9rPShsOS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzNDU2NzU3IikpLnRvU3RyaW5nKCkpLmVxdWFscygiNDI2NzYwMTE5NTczMjczMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDA0MSIpKS5vaz0obDkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzQ1Njc1NyIpLG1jMykudG9TdHJpbmcoKSkuZXF1YWxzKCI0LjI2RSsyNCIpOworICAobmV3IFRlc3QoIm11bDA0MiIpKS5vaz0obDkubXVsdGlwbHkobDc3ZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk1MDYxNzI3NTMwMDAwMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXVsMDQzIikpLm9rPShsOS5tdWx0aXBseShsNzdlLG1jMykudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk0NyIpOworICAobmV3IFRlc3QoIm11bDA0NCIpKS5vaz0obDc3ZS5tdWx0aXBseShsOSxtYzMpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45NDciKTsKKyAgCisgIGwxMjM0NT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjMuNDUiKTsKKyAgKG5ldyBUZXN0KCJtdWwwNTAiKSkub2s9KGwxMjM0NS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxZTExIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yMzQ1RSsxMyIpOworICAobmV3IFRlc3QoIm11bDA1MSIpKS5vaz0obDEyMzQ1Lm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFlMTEiKSxtY3MpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4yMzQ1RSsxMyIpOworICAobmV3IFRlc3QoIm11bDA1MiIpKS5vaz0obDEyMzQ1Lm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFlKzkiKSxtY2UpLnRvU3RyaW5nKCkpLmVxdWFscygiMTIzLjQ1RSs5Iik7CisgIChuZXcgVGVzdCgibXVsMDUzIikpLm9rPShsMTIzNDUubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMWUxMCIpLG1jZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjIzNDVFKzEyIik7CisgIChuZXcgVGVzdCgibXVsMDU0IikpLm9rPShsMTIzNDUubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMWUxMSIpLG1jZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMi4zNDVFKzEyIik7CisgIChuZXcgVGVzdCgibXVsMDU1IikpLm9rPShsMTIzNDUubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMWUxMiIpLG1jZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMjMuNDVFKzEyIik7CisgIChuZXcgVGVzdCgibXVsMDU2IikpLm9rPShsMTIzNDUubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMWUxMyIpLG1jZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjIzNDVFKzE1Iik7CisgIAorICAvLyB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKKyAgKG5ldyBUZXN0KCJtdWwwNjAiKSkub2s9KG9uZS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5ZTk5OTk5OTk5OSIpLG1jcykudG9TdHJpbmcoKSkuZXF1YWxzKCI5RSs5OTk5OTk5OTkiKTsKKyAgKG5ldyBUZXN0KCJtdWwwNjEiKSkub2s9KG9uZS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5LjllOTk5OTk5OTk5IiksbWNzKS50b1N0cmluZygpKS5lcXVhbHMoIjkuOUUrOTk5OTk5OTk5Iik7CisgIChuZXcgVGVzdCgibXVsMDYyIikpLm9rPShvbmUubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OWU5OTk5OTk5OTkiKSxtY3MpLnRvU3RyaW5nKCkpLmVxdWFscygiOS45OUUrOTk5OTk5OTk5Iik7CisgIChuZXcgVGVzdCgibXVsMDYzIikpLm9rPSh0ZW4ubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOWU5OTk5OTk5OTkiKSxtY2UpLnRvU3RyaW5nKCkpLmVxdWFscygiOTBFKzk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoIm11bDA2NCIpKS5vaz0odGVuLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkuOWU5OTk5OTk5OTkiKSxtY2UpLnRvU3RyaW5nKCkpLmVxdWFscygiOTkuMEUrOTk5OTk5OTk5Iik7CisgIGVkZ2U9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOS45OTllOTk5OTk5OTk5Iik7CisgIHRlbmVkZ2U9dGVuLm11bHRpcGx5KGVkZ2UsbWNlKTsKKyAgKG5ldyBUZXN0KCJtdWwwNjUiKSkub2s9KHRlbmVkZ2UudG9TdHJpbmcoKSkuZXF1YWxzKCI5OS45OTBFKzk5OTk5OTk5OSIpOworICBodW5lZGdlPXRlbi5tdWx0aXBseSh0ZW5lZGdlLG1jZSk7CisgIChuZXcgVGVzdCgibXVsMDY2IikpLm9rPShodW5lZGdlLnRvU3RyaW5nKCkpLmVxdWFscygiOTk5LjkwMEUrOTk5OTk5OTk5Iik7CisgIG9wbz1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEiKTsgLy8gb25lIHRlbnRoCisgIChuZXcgVGVzdCgibXVsMDY3IikpLm9rPShvcG8ubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOWUtOTk5OTk5OTk4IiksbWNzKS50b1N0cmluZygpKS5lcXVhbHMoIjlFLTk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoIm11bDA2OCIpKS5vaz0ob3BvLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5ZS05OTk5OTk5OTgiKSxtY3MpLnRvU3RyaW5nKCkpLmVxdWFscygiOS45RS05OTk5OTk5OTgiKTsKKyAgKG5ldyBUZXN0KCJtdWwwNjkiKSkub2s9KG9wby5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTllLTk5OTk5OTk5OCIpLG1jcykudG9TdHJpbmcoKSkuZXF1YWxzKCI5Ljk5RS05OTk5OTk5OTciKTsKKyAgCisgIChuZXcgVGVzdCgibXVsMDcwIikpLm9rPShvcG8ubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOWUtOTk5OTk5OTk4IiksbWNlKS50b1N0cmluZygpKS5lcXVhbHMoIjlFLTk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoIm11bDA3MSIpKS5vaz0ob3BvLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5ZS05OTk5OTk5OTgiKSxtY2UpLnRvU3RyaW5nKCkpLmVxdWFscygiOTlFLTk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoIm11bDA3MiIpKS5vaz0ob3BvLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OWUtOTk5OTk5OTk4IiksbWNlKS50b1N0cmluZygpKS5lcXVhbHMoIjk5OUUtOTk5OTk5OTk5Iik7CisgIChuZXcgVGVzdCgibXVsMDczIikpLm9rPShvcG8ubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5ZS05OTk5OTk5OTciKSxtY2UpLnRvU3RyaW5nKCkpLmVxdWFscygiOS45OUUtOTk5OTk5OTk2Iik7CisgIChuZXcgVGVzdCgibXVsMDc0IikpLm9rPShvcG8ubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OWUtOTk5OTk5OTk3IiksbWNlKS50b1N0cmluZygpKS5lcXVhbHMoIjk5Ljk5RS05OTk5OTk5OTYiKTsKKyAgKG5ldyBUZXN0KCJtdWwwNzQiKSkub2s9KG9wby5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTk5OWUtOTk5OTk5OTk3IiksbWNlKS50b1N0cmluZygpKS5lcXVhbHMoIjk5OS45OUUtOTk5OTk5OTk2Iik7CisgIAorICAvLyB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKKyAgKG5ldyBUZXN0KCJtdWwwODAiKSkub2s9KG9wby5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NTY3ODkiKSxtY3MpLnRvU3RyaW5nKCkpLmVxdWFscygiMTIzNDU2NzguOSIpOworICAobmV3IFRlc3QoIm11bDA4MSIpKS5vaz0ob3BvLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1Njc4OTAxMjM0IiksbWNzKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjM0NTY3ODlFKzEyIik7CisgIChuZXcgVGVzdCgibXVsMDgyIikpLm9rPShvcG8ubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5MTIzNDU2Nzg5IiksbWNzKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjM0NTY3ODlFKzE2Iik7CisgIChuZXcgVGVzdCgibXVsMDgzIikpLm9rPShvcG8ubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5IiksbWNmZCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMjM0NTY3OC45Iik7CisgIChuZXcgVGVzdCgibXVsMDg0IikpLm9rPShvcG8ubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5MDEyMzQiKSxtY2ZkKS50b1N0cmluZygpKS5lcXVhbHMoIjEyMzQ1Njc4OTAxMjMuNCIpOworICAobmV3IFRlc3QoIm11bDA4NSIpKS5vaz0ob3BvLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1Njc4OTEyMzQ1Njc4OSIpLG1jZmQpLnRvU3RyaW5nKCkpLmVxdWFscygiMTIzNDU2Nzg5MTIzNDU2NzguOSIpOworICAKKyAgKG5ldyBUZXN0KCJtdWwwOTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NTY3ODkiKSkubXVsdGlwbHkob3BvLG1jcykudG9TdHJpbmcoKSkuZXF1YWxzKCIxMjM0NTY3OC45Iik7CisgIChuZXcgVGVzdCgibXVsMDkxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5MDEyMzQiKSkubXVsdGlwbHkob3BvLG1jcykudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjIzNDU2Nzg5RSsxMiIpOworICAobmV3IFRlc3QoIm11bDA5MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1Njc4OTEyMzQ1Njc4OSIpKS5tdWx0aXBseShvcG8sbWNzKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMjM0NTY3ODlFKzE2Iik7CisgIChuZXcgVGVzdCgibXVsMDkzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5IikpLm11bHRpcGx5KG9wbyxtY2ZkKS50b1N0cmluZygpKS5lcXVhbHMoIjEyMzQ1Njc4LjkiKTsKKyAgKG5ldyBUZXN0KCJtdWwwOTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NTY3ODkwMTIzNCIpKS5tdWx0aXBseShvcG8sbWNmZCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMjM0NTY3ODkwMTIzLjQiKTsKKyAgKG5ldyBUZXN0KCJtdWwwOTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NTY3ODkxMjM0NTY3ODkiKSkubXVsdGlwbHkob3BvLG1jZmQpLnRvU3RyaW5nKCkpLmVxdWFscygiMTIzNDU2Nzg5MTIzNDU2NzguOSIpOworICAKKyAgLy8gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworICAobmV3IFRlc3QoIm11bDEwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxIik7CisgIChuZXcgVGVzdCgibXVsMTAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5MCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMCIpOworICAobmV3IFRlc3QoIm11bDEwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiODEwMCIpOworICAobmV3IFRlc3QoIm11bDEwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwIik7CisgIChuZXcgVGVzdCgibXVsMTA1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5MDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMCIpOworICAobmV3IFRlc3QoIm11bDEwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiODEwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDEwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXVsMTA4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5MDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDEwOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiODEwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDExMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXVsMTExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5MDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDExMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiODEwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDExMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXVsMTE0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5MDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDExNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiODEwMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDExNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXVsMTE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5MDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDExOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiODEwMDAwMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDExOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMDAwMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXVsMTIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5MDAwMDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDEyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMDAwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiODEwMDAwMDAwMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDEyMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXVsMTIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS5tdWx0aXBseShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpOworICAvLyB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcworICAobmV3IFRlc3QoIm11bDEzMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkiKTsKKyAgKG5ldyBUZXN0KCJtdWwxMzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMCIpOworICAobmV3IFRlc3QoIm11bDEzNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxMzUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxMzYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDEzNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxMzgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxMzkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDE0MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDE0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNDQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTAwMDAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDE0NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTAwMDAwMDAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDE0OSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzAwMDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAwMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm11bDE1MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkubXVsdGlwbHkobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtdWwxNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLm11bHRpcGx5KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKKyAgCisgIHRyeXtjaGVja251bGw6ZG97CisgICB0ZW4ubXVsdGlwbHkoKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ1NSl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbCovCisgIChuZXcgVGVzdCgibXVsMjAwIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja251bGwyOmRveworICAgdGVuLm11bHRpcGx5KHRlbiwoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ1Nil7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbDIqLworICAobmV3IFRlc3QoIm11bDIwMSIpKS5vaz1mbGFnOworICAKKyAgdHJ5e2NoZWNrb3Zlcjpkb3sKKyAgIGQxPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjIzNDU2Nzg5MDEyMzQ1RS0wIik7CisgICBkMj1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5RSs5OTk5OTk5OTkiKTsKKyAgIGQxLm11bHRpcGx5KGQyLG1jZGVmKTsgLy8gbWFyZ2luYWwgb3ZlcmZsb3cKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDU3KXtvZT0kNTc7CisgICBmbGFnPShvZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRXhwb25lbnQgT3ZlcmZsb3c6IDEwMDAwMDAwMDAiKTsKKyAgfS8qY2hlY2tvdmVyKi8KKyAgKG5ldyBUZXN0KCJtdWwyMDIiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrb3Zlcjpkb3sKKyAgIGQxPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjExMiIpOworICAgZDI9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOUUrOTk5OTk5OTk5Iik7CisgICBkMS5tdWx0aXBseShkMixtY2UpOyAvLyBtYXJnaW5hbCBvdmVyZmxvdywgZW5naW5lZXJpbmcKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDU4KXtvZT0kNTg7CisgICBmbGFnPShvZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRXhwb25lbnQgT3ZlcmZsb3c6IDEwMDAwMDAwMDIiKTsKKyAgfS8qY2hlY2tvdmVyKi8KKyAgKG5ldyBUZXN0KCJtdWwyMDMiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja292ZXI6ZG97CisgICBkMT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjkiKTsKKyAgIGQyPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFLTk5OTk5OTk5OSIpOworICAgZDEubXVsdGlwbHkoZDIsbWNkZWYpOyAvLyBtYXJnaW5hbCBuZWdhdGl2ZSBvdmVyZmxvdworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkNTkpe29lPSQ1OTsKKyAgIGZsYWc9KG9lLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJFeHBvbmVudCBPdmVyZmxvdzogLTEwMDAwMDAwMDAiKTsKKyAgfS8qY2hlY2tvdmVyKi8KKyAgKG5ldyBUZXN0KCJtdWwyMDQiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrb3Zlcjpkb3sKKyAgIGQxPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuOSIpOworICAgZDI9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMUUtOTk5OTk5OTk5Iik7CisgICBkMS5tdWx0aXBseShkMixtY2UpOyAvLyBtYXJnaW5hbCBuZWdhdGl2ZSBvdmVyZmxvdywgZW5naW5lZXJpbmcKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDYwKXtvZT0kNjA7CisgICBmbGFnPShvZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRXhwb25lbnQgT3ZlcmZsb3c6IC0xMDAwMDAwMDAyIik7CisgIH0vKmNoZWNrb3ZlciovCisgIChuZXcgVGVzdCgibXVsMjA1IikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICB0ZW5sb25nLm11bHRpcGx5KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUsbWNsZCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ2MSl7YWU9JDYxOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlRvbyBtYW55IGRpZ2l0czoiKyIgIit0ZW5sb25nLnRvU3RyaW5nKCkpOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgibXVsMjA2IikpLm9rPWZsYWc7CisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5URU4ubXVsdGlwbHkodGVubG9uZyxtY2xkKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDYyKXthZT0kNjI7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3RlbmxvbmcudG9TdHJpbmcoKSk7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJtdWwyMDciKSkub2s9ZmxhZzsKKyAgCisgIHN1bW1hcnkoIm11bHRpcGx5Iik7CisgIHJldHVybjt9CisKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNuZWdhdGV9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnbmVnYXRlKCl7CisgIGJvb2xlYW4gZmxhZz1mYWxzZTsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgCisgIChuZXcgVGVzdCgibmVnMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5uZWdhdGUoKS50b1N0cmluZygpKS5lcXVhbHMoIi0yIik7CisgIChuZXcgVGVzdCgibmVnMDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTIiKSkubmVnYXRlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgibmVnMDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi4wMCIpKS5uZWdhdGUobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIuMDAiKTsKKyAgKG5ldyBUZXN0KCJuZWcwMDQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMi4wMCIpKS5uZWdhdGUobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMi4wMCIpOworICAobmV3IFRlc3QoIm5lZzAwNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkubmVnYXRlKG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJuZWcwMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpLm5lZ2F0ZShtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgibmVnMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMCIpKS5uZWdhdGUobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoIm5lZzAwOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwIikpLm5lZ2F0ZShtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIAorICAobmV3IFRlc3QoIm5lZzAxMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMDAiKSkubmVnYXRlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMi4wMCIpOworICAobmV3IFRlc3QoIm5lZzAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yLjAwIikpLm5lZ2F0ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiMi4wMCIpOworICAobmV3IFRlc3QoIm5lZzAxMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkubmVnYXRlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgibmVnMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMCIpKS5uZWdhdGUoKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJuZWcwMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMC4wIikpLm5lZ2F0ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgibmVnMDE1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMDAiKSkubmVnYXRlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwIik7CisgIChuZXcgVGVzdCgibmVnMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAiKSkubmVnYXRlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIAorICAobmV3IFRlc3QoIm5lZzAyMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yMDAwMDAwIikpLm5lZ2F0ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiMjAwMDAwMCIpOworICAobmV3IFRlc3QoIm5lZzAyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yMDAwMDAwIikpLm5lZ2F0ZShtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIyMDAwMDAwIik7CisgIChuZXcgVGVzdCgibmVnMDIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTIwMDAwMDAiKSkubmVnYXRlKG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjAwMDAwRSs2Iik7CisgIChuZXcgVGVzdCgibmVnMDIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMjAwMDAwMCIpKS5uZWdhdGUobWM2KS50b1N0cmluZygpKS5lcXVhbHMoIi0yLjAwMDAwRSs2Iik7CisgIAorICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLm5lZ2F0ZSgoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ2Myl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbCovCisgIChuZXcgVGVzdCgibmVnMTAwIikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICB0ZW5sb25nLm5lZ2F0ZShtY2xkKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDY0KXthZT0kNjQ7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3RlbmxvbmcudG9TdHJpbmcoKSk7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJuZWcxMDEiKSkub2s9ZmxhZzsKKyAgc3VtbWFyeSgibmVnYXRlIik7CisgIHJldHVybjt9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNwbHVzfSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ3BsdXMoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jaGUxOworICBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiBhZT1udWxsOworICAKKyAgKG5ldyBUZXN0KCJwbHUwMDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnBsdXMobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMiIpOworICAobmV3IFRlc3QoInBsdTAwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yIikpLnBsdXMobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIiKTsKKyAgKG5ldyBUZXN0KCJwbHUwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjAwIikpLnBsdXMobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMi4wMCIpOworICAobmV3IFRlc3QoInBsdTAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yLjAwIikpLnBsdXMobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIuMDAiKTsKKyAgKG5ldyBUZXN0KCJwbHUwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnBsdXMobWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInBsdTAwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAiKSkucGx1cyhtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgicGx1MDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMCIpKS5wbHVzKG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJwbHUwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMCIpKS5wbHVzKG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgCisgIChuZXcgVGVzdCgicGx1MDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5wbHVzKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIyIik7CisgIChuZXcgVGVzdCgicGx1MDExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTIiKSkucGx1cygpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIiKTsKKyAgKG5ldyBUZXN0KCJwbHUwMTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjAwIikpLnBsdXMoKS50b1N0cmluZygpKS5lcXVhbHMoIjIuMDAiKTsKKyAgKG5ldyBUZXN0KCJwbHUwMTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMi4wMCIpKS5wbHVzKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMi4wMCIpOworICAobmV3IFRlc3QoInBsdTAxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkucGx1cygpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInBsdTAxNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAiKSkucGx1cygpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMCIpOworICAobmV3IFRlc3QoInBsdTAxNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwLjAiKSkucGx1cygpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgicGx1MDE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMDAiKSkucGx1cygpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMCIpOworICAobmV3IFRlc3QoInBsdTAxOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwIikpLnBsdXMoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgCisgIChuZXcgVGVzdCgicGx1MDIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTIwMDAwMDAiKSkucGx1cygpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJwbHUwMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMjAwMDAwMCIpKS5wbHVzKG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIi0yMDAwMDAwIik7CisgIChuZXcgVGVzdCgicGx1MDIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTIwMDAwMDAiKSkucGx1cyhtYzYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIuMDAwMDBFKzYiKTsKKyAgKG5ldyBUZXN0KCJwbHUwMjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyMDAwMDAwIikpLnBsdXMobWM2KS50b1N0cmluZygpKS5lcXVhbHMoIjIuMDAwMDBFKzYiKTsKKyAgCisgIC8vIHRyeSBzb21lIGV4b3RpYyBidXQgc2lsbHkgcm91bmRpbmcgW2Zvcm1hdCBjaGVja3MgbW9yZSB2YXJpZXRpZXNdCisgIC8vIFt0aGlzIG1vc3RseSBlbnN1cmVzIHdlIGNhbiBzZXQgdXAgYW5kIHBhc3MgdGhlIHNldHRpbmddCisgIG1jaGUxPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDLGZhbHNlLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKTsKKyAgKG5ldyBUZXN0KCJwbHUwMzAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjI0IikpLnBsdXMobWNoZTEpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yIik7CisgIChuZXcgVGVzdCgicGx1MDMxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4yNSIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMiIpOworICAobmV3IFRlc3QoInBsdTAzMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMjYiKSkucGx1cyhtY2hlMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMiKTsKKyAgKG5ldyBUZXN0KCJwbHUwMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjE0IikpLnBsdXMobWNoZTEpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgicGx1MDM0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xNSIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMiIpOworICAobmV3IFRlc3QoInBsdTAzNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTYiKSkucGx1cyhtY2hlMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjIiKTsKKyAgCisgIChuZXcgVGVzdCgicGx1MDQwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4yNTEiKSkucGx1cyhtY2hlMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMiKTsKKyAgKG5ldyBUZXN0KCJwbHUwNDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjE1MSIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMiIpOworICAKKyAgKG5ldyBUZXN0KCJwbHUwNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4yNCIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjIiKTsKKyAgKG5ldyBUZXN0KCJwbHUwNTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4yNSIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjIiKTsKKyAgKG5ldyBUZXN0KCJwbHUwNTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4yNiIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjMiKTsKKyAgKG5ldyBUZXN0KCJwbHUwNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4xNCIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjEiKTsKKyAgKG5ldyBUZXN0KCJwbHUwNTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4xNSIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjIiKTsKKyAgKG5ldyBUZXN0KCJwbHUwNTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4xNiIpKS5wbHVzKG1jaGUxKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjIiKTsKKyAgCisgIC8vIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMgaWYgZG9uZSBieSBhZGQgMAorICAobmV3IFRlc3QoInBsdTA2MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01NjI2N0UtMTAiKSkucGx1cygpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMDAwMDA1NjI2NyIpOworICAobmV3IFRlc3QoInBsdTA2MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01NjI2N0UtNSIpKS5wbHVzKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC41NjI2NyIpOworICAobmV3IFRlc3QoInBsdTA2MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01NjI2N0UtMiIpKS5wbHVzKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItNTYyLjY3Iik7CisgIChuZXcgVGVzdCgicGx1MDYzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS0xIikpLnBsdXMoKS50b1N0cmluZygpKS5lcXVhbHMoIi01NjI2LjciKTsKKyAgKG5ldyBUZXN0KCJwbHUwNjUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTAiKSkucGx1cygpLnRvU3RyaW5nKCkpLmVxdWFscygiLTU2MjY3Iik7CisgIAorICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLnBsdXMoKGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQpbnVsbCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiAkNjUpeworICAgZmxhZz10cnVlOworICB9LypjaGVja251bGwqLworICAobmV3IFRlc3QoInBsdTEwMCIpKS5vaz1mbGFnOworICAKKyAgdHJ5e2NoZWNrZGlnaXRzOmRveworICAgdGVubG9uZy5wbHVzKG1jbGQpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkNjYpe2FlPSQ2NjsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IisiICIrdGVubG9uZy50b1N0cmluZygpKTsKKyAgfS8qY2hlY2tkaWdpdHMqLworICAobmV3IFRlc3QoInBsdTEwMSIpKS5vaz1mbGFnOworICBzdW1tYXJ5KCJwbHVzIik7CisgIHJldHVybjt9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNwb3d9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFncG93KCl7CisgIGJvb2xlYW4gZmxhZzsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHg7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCB0ZW1wOworICBpbnQgbj0wOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgdng7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCB2bjsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgZmxhZz10cnVlOworICAobmV3IFRlc3QoInBvdzAwMSIpKS5vaz0iMSIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDAyIikpLm9rPSIwLjMiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzAwMyIpKS5vaz0iMC4zIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMCIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cwMDQiKSkub2s9IjAuMDkiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjAwIiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzAwNSIpKS5vaz0iMC4wOSIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMDAwMDAwMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzAwNiIpKS5vaz0oIjFFLTgiKS5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItOCIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cwMDciKSkub2s9KCIxRS03IikuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTciKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDA4IikpLm9rPSIwLjAwMDAwMSIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTYiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDA5IikpLm9rPSIwLjAwMDAxIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNSIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cwMTAiKSkub2s9IjAuMDAwMSIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTQiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDExIikpLm9rPSIwLjAwMSIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTMiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDEyIikpLm9rPSIwLjAxIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMiIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cwMTMiKSkub2s9IjAuMSIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDE0IikpLm9rPSIxIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzAxNSIpKS5vaz0iMTAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDE2IikpLm9rPSIxMDAwMDAwMDAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjgiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDE3IikpLm9rPSgiMUUrOSIpLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjkiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDE4IikpLm9rPSgiMUUrOTkiKS5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OSIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cwMTkiKSkub2s9KCIxRSs5OTk5OTk5OTkiKS5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTk5OTk5OTkiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDIwIikpLm9rPSgiMUUrOTk5OTk5OTk4IikuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OTk4IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzAyMSIpKS5vaz0oIjFFKzk5OTk5OTk5NyIpLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5OTk5NyIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cwMjIiKSkub2s9KCIxRSszMzMzMzMzMzMiKS5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzMzMzMzMzMzMiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDIzIikpLm9rPSgiMUUtMzMzMzMzMzMzIikuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTMzMzMzMzMzMyIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cwMjQiKSkub2s9KCIxRS05OTk5OTk5OTgiKS5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItOTk5OTk5OTk4IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzAyNSIpKS5vaz0oIjFFLTk5OTk5OTk5OSIpLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi05OTk5OTk5OTkiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDI2IikpLm9rPSIwLjUiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MDI3IikpLm9rPSIwLjI1Ii5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yIiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzAyOCIpKS5vaz0iMC4wNjI1Ii5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi00IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAKKyAgKG5ldyBUZXN0KCJwb3cwNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInBvdzA1MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgicG93MDUyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJwb3cwNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInBvdzA1NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgicG93MDU1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJwb3cwNTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgicG93MDU3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5OTk5OSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjFFKzk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoInBvdzA1OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTk5OTk5OTgiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxRSs5OTk5OTk5OTgiKTsKKyAgKG5ldyBUZXN0KCJwb3cwNTkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OTk3IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMUUrOTk5OTk5OTk3Iik7CisgIChuZXcgVGVzdCgicG93MDYwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMzMzMzMzMzMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjFFKzMzMzMzMzMzMyIpOworICAobmV3IFRlc3QoInBvdzA2MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3NyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjFFKzc3Iik7CisgIChuZXcgVGVzdCgicG93MDYyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMUUrMjIiKTsKKyAgKG5ldyBUZXN0KCJwb3cwNjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTc3IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMUUtNzciKTsKKyAgKG5ldyBUZXN0KCJwb3cwNjQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMUUtMjIiKTsKKyAgKG5ldyBUZXN0KCJwb3cwNjUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNSIpOworICAobmV3IFRlc3QoInBvdzA2NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0yIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yNSIpOworICAobmV3IFRlc3QoInBvdzA2NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi00IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wNjI1Iik7CisgIChuZXcgVGVzdCgicG93MDY4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNi4wIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMzYiKTsKKyAgKG5ldyBUZXN0KCJwb3cwNjkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMyIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjkiKTsvKiBmcm9tIGJvb2sgKi8KKyAgKG5ldyBUZXN0KCJwb3cwNzAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIiksbWNkZWYpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiNjQiKTsvKiBmcm9tIGJvb2sgKi8KKyAgCisgIC8vIDE5OTguMTIuMTQgTmV4dCB0ZXN0IHJlbW92ZWQgYXMgcG93KCkgbm8gbG9uZ2VyIHJvdW5kcyBSSFMgW2FzIHBlciBBTlNJXQorICAvLyBUZXN0KCdwb3cwNzEnKS5vaz1CaWdEZWNpbWFsKCcyJykucG93KEJpZ0RlY2ltYWwoJzIuMDAwMDAwMDAxJyksbWNkZWYpLnRvU3RyaW5nID09ICc0Jy8qIGNoZWNrIGlucHV0IHJvdW5kaW5nICovCisgIAorICAvKiBHZW5lcmFsIHRlc3RzIGZyb20gb3JpZ2luYWwgUmV4eCBkaWFnbm9zdGljcyAqLworICB4PW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNSIpOworICB0ZW1wPWNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkU7CisgIGZsYWc9dHJ1ZTsKKyAge249MTtuOmZvcig7bjw9MTA7bisrKXsKKyAgIHRlbXA9dGVtcC5tdWx0aXBseSh4KS5kaXZpZGUoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORSk7CisgICBmbGFnPWZsYWcmKHgucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscyh0ZW1wLnRvU3RyaW5nKCkpOworICAgfQorICB9LypuKi8KKyAgKG5ldyBUZXN0KCJwb3cwODAiKSkub2s9ZmxhZzsKKyAgCisgIHg9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpOworICB0ZW1wPWNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkU7CisgIGZsYWc9dHJ1ZTsKKyAge249MTtuOmZvcig7bjw9Mjk7bisrKXsKKyAgIHRlbXA9dGVtcC5tdWx0aXBseSh4KS5kaXZpZGUoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORSk7CisgICBmbGFnPWZsYWcmKHgucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscyh0ZW1wLnRvU3RyaW5nKCkpOworICAgZmxhZz1mbGFnJih4LnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKChpbnQpLW4pLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORS5kaXZpZGUodGVtcCxtY2RlZikudG9TdHJpbmcoKSk7CisgICAvKiBOb3RlIHRoYXQgcm91bmRpbmcgZXJyb3JzIGFyZSBwb3NzaWJsZSBmb3IgbGFyZ2VyICJuIiAqLworICAgLyogZHVlIHRvIHRoZSBpbmZvcm1hdGlvbiBjb250ZW50IG9mIHRoZSBleHBvbmVudCAgICAgICAgKi8KKyAgIH0KKyAgfS8qbiovCisgIChuZXcgVGVzdCgicG93MDgxIikpLm9rPWZsYWc7CisgIAorICAvKiBUaGUgVmllbm5hIGNhc2UuICBDaGVja3MgYm90aCBzZXR1cCBhbmQgMS9hY2Mgd29ya2luZyBwcmVjaXNpb24gKi8KKyAgLy8gTW9kaWZpZWQgMTk5OC4xMi4xNCBhcyBSSFMgbm8gbG9uZ2VyIHJvdW5kZWQgYmVmb3JlIHVzZSAobXVzdCBmaXQpCisgIC8vIE1vZGlmaWVkIDE5OTAuMDIuMDQgYXMgTEhTIGlzIG5vdyByb3VuZGVkIChpbnN0ZWFkIG9mIHRydW5jYXRlZCB0byBndWFyZCkKKyAgdng9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5RSsxMCIpOyAvLyBsaHMgLi4gcm91bmRlZCB0byAxLjIzRSsxOAorICB2bj1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4yMzAwMGUrMiIpOyAvLyByaHMgLi4gW3dhczogLTEuMjM0NTVlKzIsIHJvdW5kcyB0byAtMTIzXQorICAobmV3IFRlc3QoInBvdzA5MCIpKS5vaz0odngucG93KHZuLG1jMykudG9TdHJpbmcoKSkuZXF1YWxzKCI4Ljc0RS0yMjI2Iik7CisgIAorICAvLy0gZml4ZWQgcG9pbnQgdmVyc2lvbnMgLS0tCisgIChuZXcgVGVzdCgicG93MTAxIikpLm9rPSIxIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cxMDIiKSkub2s9IjAuMyIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MTAzIikpLm9rPSIwLjMiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAwIikpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzEwNCIpKS5vaz0iMC4wOSIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MTA1IikpLm9rPSIwLjA5Ii5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi4wMCIpKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cxMDYiKSkub2s9IjEwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzEwNyIpKS5vaz0iMTAwMDAwMDAwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI4IikpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInBvdzEwOCIpKS5vaz0iMTAwMDAwMDAwMCIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOSIpKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cxMDkiKSkub2s9IjEwMDAwMDAwMDAwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cxMTAiKSkub2s9IjEiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cxMTEiKSkub2s9IjE2Ii5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQiKSkudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MTEyIikpLm9rPSIyNTYiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOCIpKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJwb3cxMTMiKSkub2s9IjEwMjQiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgicG93MTE0IikpLm9rPSIxLjA1MTAxMDA1MDEiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMSIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS50b1N0cmluZygpKTsKKyAgCisgIChuZXcgVGVzdCgicG93MTIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJwb3cxMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInBvdzEyMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgicG93MTIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJwb3cxNDQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInBvdzEyNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgicG93MTI2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInBvdzEyNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJwb3cxMjgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI2LjAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzNi4wMCIpOworICAobmV3IFRlc3QoInBvdzEyOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjYuMDAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzNi4wMDAwIik7CisgIChuZXcgVGVzdCgicG93MTMwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNi4wMDAiKSkucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzNi4wMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJwb3cxMzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMyIpKS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjkiKTsKKyAgKG5ldyBUZXN0KCJwb3cxMzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLnRvU3RyaW5nKCkpLmVxdWFscygiNjQiKTsKKyAgCisgIC8qIGVycm9ycyAqLworICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLnBvdygoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKW51bGwpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDY3KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tudWxsKi8KKyAgKG5ldyBUZXN0KCJwb3cxNTAiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrbnVsbDI6ZG97CisgICB0ZW4ucG93KHRlbiwoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ2OCl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbDIqLworICAobmV3IFRlc3QoInBvdzE1MSIpKS5vaz1mbGFnOworICAKKyAgZmxhZz10cnVlOworICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICB0ZW5sb25nLnBvdyhjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLG1jbGQpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkNjkpe2FlPSQ2OTsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IisiICIrdGVubG9uZy50b1N0cmluZygpKTsKKyAgfS8qY2hlY2tkaWdpdHMqLworICAobmV3IFRlc3QoInBvdzE1MiIpKS5vaz1mbGFnOworICAKKyAgdHJ5e2NoZWNrZGlnaXRzOmRveworICAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORS5wb3codGVubG9uZyxtY2xkKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDcwKXthZT0kNzA7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3RlbmxvbmcudG9TdHJpbmcoKSk7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJwb3cxNTMiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja3Bvczpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi03MSIpKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDcxKXthZT0kNzE7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiTmVnYXRpdmUgcG93ZXI6IC03MSIpOworICB9LypjaGVja3BvcyovCisgIChuZXcgVGVzdCgicG93MTU0IikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2t3aG9sZTpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQiKSxtYzMpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkNzIpe2FlPSQ3MjsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IDEyMzQiKTsKKyAgfS8qY2hlY2t3aG9sZSovCisgIChuZXcgVGVzdCgicG93MTU1IikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2t3aG9sZTE6ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMi4zNGUrMiIpLG1jMyk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ3Myl7YWU9JDczOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlRvbyBtYW55IGRpZ2l0czogMS4yMzRFKzMiKTsKKyAgfS8qY2hlY2t3aG9sZTEqLworICAobmV3IFRlc3QoInBvdzE1NiIpKS5vaz1mbGFnOworICAKKyAgdHJ5e2NoZWNrd2hvbGUyOmRveworICAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIuNCIpLG1jZGVmKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDc0KXthZT0kNzQ7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRGVjaW1hbCBwYXJ0IG5vbi16ZXJvOiAxMi40Iik7CisgIH0vKmNoZWNrd2hvbGUyKi8KKyAgKG5ldyBUZXN0KCJwb3cxNTciKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja3dob2xlMzpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDEiKSxtY2RlZik7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ3NSl7YWU9JDc1OworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkRlY2ltYWwgcGFydCBub24temVybzogMS4wMSIpOworICB9LypjaGVja3dob2xlMyovCisgIChuZXcgVGVzdCgicG93MTU4IikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2t3aG9sZTQ6ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAwMDAwMDAwMSIpLG1jZGVmKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDc2KXthZT0kNzY7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRGVjaW1hbCBwYXJ0IG5vbi16ZXJvOiAxLjAwMDAwMDAwMSIpOworICB9LypjaGVja3dob2xlNCovCisgIChuZXcgVGVzdCgicG93MTU5IikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2t3aG9sZTU6ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLnBvdyhuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAwMDAwMDAwMSIpLG1jMyk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ3Nyl7YWU9JDc3OworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkRlY2ltYWwgcGFydCBub24temVybzogMS4wMDAwMDAwMDEiKTsKKyAgfS8qY2hlY2t3aG9sZTUqLworICAobmV3IFRlc3QoInBvdzE2MCIpKS5vaz1mbGFnOworICAKKyAgdHJ5e2NoZWNrd2hvbGU2OmRveworICAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORS5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS42N0UtOTg3NjU0MzIxIiksbWMzKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDc4KXthZT0kNzg7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRGVjaW1hbCBwYXJ0IG5vbi16ZXJvOiA1LjY3RS05ODc2NTQzMjEiKTsKKyAgfS8qY2hlY2t3aG9sZTYqLworICAobmV3IFRlc3QoInBvdzE2MSIpKS5vaz1mbGFnOworICAKKyAgc3VtbWFyeSgicG93Iik7CisgIHJldHVybjt9CisKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjcmVtYWluZGVyfSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ3JlbWFpbmRlcigpeworICBib29sZWFuIGZsYWc9ZmFsc2U7CisgIGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uIGFlPW51bGw7CisgIAorICAobmV3IFRlc3QoInJlbTAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgicmVtMDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIzIik7CisgIChuZXcgVGVzdCgicmVtMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTMiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMTMiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMTMiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEzIik7CisgIChuZXcgVGVzdCgicmVtMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjEzIikpLnJlbWFpbmRlcihvbmUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xMyIpOworICAobmV3IFRlc3QoInJlbTAwOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTMzIikpLnJlbWFpbmRlcihvbmUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xMzMiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEwMzMiKSkucmVtYWluZGVyKG9uZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwMzMiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAzMyIpKS5yZW1haW5kZXIob25lKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDMzIik7CisgIChuZXcgVGVzdCgicmVtMDExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMzMiKSkucmVtYWluZGVyKG9uZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMzIik7CisgIChuZXcgVGVzdCgicmVtMDEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMzMiKSkucmVtYWluZGVyKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5URU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4zMyIpOworICAobmV3IFRlc3QoInJlbTAxMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMy4zIikpLnJlbWFpbmRlcihjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMyIpOworICAobmV3IFRlc3QoInJlbTAxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEzMyIpKS5yZW1haW5kZXIoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLlRFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIzIik7CisgIChuZXcgVGVzdCgicmVtMDE1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAzMyIpKS5yZW1haW5kZXIoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLlRFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIzIik7CisgIChuZXcgVGVzdCgicmVtMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAzMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCg1MCksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMzMiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDEuMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgzKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDIuMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgzKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgicmVtMDE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAzLjAiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMyksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wIik7CisgIChuZXcgVGVzdCgicmVtMDIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40MCIpKS5yZW1haW5kZXIob25lKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQwMCIpKS5yZW1haW5kZXIob25lKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDAwIik7CisgIChuZXcgVGVzdCgicmVtMDIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLnJlbWFpbmRlcihvbmUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC40Iik7CisgIChuZXcgVGVzdCgicmVtMDIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNCIpOworICAobmV3IFRlc3QoInJlbTAyNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNDAwIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDAwIik7CisgIChuZXcgVGVzdCgicmVtMDI1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgicmVtMDI2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMTAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMjciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMwMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMTAwIik7CisgIChuZXcgVGVzdCgicmVtMDI4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xMDAwIik7CisgIChuZXcgVGVzdCgicmVtMDI5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMzAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAwIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwIik7CisgIChuZXcgVGVzdCgicmVtMDMxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMTAwIik7CisgIChuZXcgVGVzdCgicmVtMDMyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAwIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwMDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMDAxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41Iik7CisgIAorICAobmV3IFRlc3QoInJlbTA0MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41MDAwMDAxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41Iik7CisgIChuZXcgVGVzdCgicmVtMDQxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUwMDAwMDAxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41Iik7CisgIChuZXcgVGVzdCgicmVtMDQyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUwMDAwMDAwMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNSIpOworICAobmV3IFRlc3QoInJlbTA0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41MDAwMDAwMDAxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInJlbTA0NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41MDAwMDAwMDAwMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNDk5OTk5OSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjFFLTciKTsKKyAgKG5ldyBUZXN0KCJyZW0wNDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNDk5OTk5OTkiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxRS04Iik7CisgIChuZXcgVGVzdCgicmVtMDQ3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ5OTk5OTk5OSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjFFLTkiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNDk5OTk5OTk5OSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNDk5OTk5OTk5OTkiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIAorICAobmV3IFRlc3QoInJlbTA1MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDMiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjciKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAzIik7CisgIChuZXcgVGVzdCgicmVtMDUxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0LjEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0LjAxIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMSIpOworICAobmV3IFRlc3QoInJlbTA1NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQuMDAxIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDEiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0LjAwMDEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDEiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0LjAwMDAxIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMSIpOworICAobmV3IFRlc3QoInJlbTA1NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQuMDAwMDAxIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMDEiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI0LjAwMDAwMDEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxRS03Iik7CisgIAorICAobmV3IFRlc3QoInJlbTA2MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMiIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC43MzQ1IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC40NjU1Iik7CisgIChuZXcgVGVzdCgicmVtMDYxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC44IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMiIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOCIpOworICAobmV3IFRlc3QoInJlbTA2MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuOCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4yIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInJlbTA2MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuOCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yIik7CisgIChuZXcgVGVzdCgicmVtMDY0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC44MDAiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC44MDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNjUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjgwMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS43IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC44MDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQwMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgyKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQwMCIpOworICAKKyAgLy8gTUMgLS0KKyAgKG5ldyBUZXN0KCJyZW0wNzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQwMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgyKSxtYzYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC40MDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0wNzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NTY3ODkwMDAwMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTJlKzEyIiksbWMzKS50b1N0cmluZygpKS5lcXVhbHMoIjNFKzExIik7CisgIAorICAvLyBGaXhlZCAtLQorICAobmV3IFRlc3QoInJlbTEwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgicmVtMTAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIzIik7CisgIChuZXcgVGVzdCgicmVtMTA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTMiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTMiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMTMiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjEzIik7CisgIChuZXcgVGVzdCgicmVtMTA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjEzIikpLnJlbWFpbmRlcihvbmUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xMyIpOworICAobmV3IFRlc3QoInJlbTEwOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTMzIikpLnJlbWFpbmRlcihvbmUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xMzMiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEwMzMiKSkucmVtYWluZGVyKG9uZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwMzMiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAzMyIpKS5yZW1haW5kZXIob25lKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDMzIik7CisgIChuZXcgVGVzdCgicmVtMTExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMzMiKSkucmVtYWluZGVyKG9uZSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMzIik7CisgIChuZXcgVGVzdCgicmVtMTEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMzMiKSkucmVtYWluZGVyKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5URU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4zMyIpOworICAobmV3IFRlc3QoInJlbTExMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMy4zIikpLnJlbWFpbmRlcihjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMyIpOworICAobmV3IFRlc3QoInJlbTExNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEzMyIpKS5yZW1haW5kZXIoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLlRFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIzIik7CisgIChuZXcgVGVzdCgicmVtMTE1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAzMyIpKS5yZW1haW5kZXIoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLlRFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIzIik7CisgIChuZXcgVGVzdCgicmVtMTE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAzMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCg1MCkpLnRvU3RyaW5nKCkpLmVxdWFscygiMzMiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDEuMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgzKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjAiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDIuMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgzKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgicmVtMTE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAzLjAiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMykpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wIik7CisgIChuZXcgVGVzdCgicmVtMTIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40MCIpKS5yZW1haW5kZXIob25lKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQwMCIpKS5yZW1haW5kZXIob25lKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDAwIik7CisgIChuZXcgVGVzdCgicmVtMTIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLnJlbWFpbmRlcihvbmUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC40Iik7CisgIChuZXcgVGVzdCgicmVtMTIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMi40IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNCIpOworICAobmV3IFRlc3QoInJlbTEyNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuNDAwIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDAwIik7CisgIChuZXcgVGVzdCgicmVtMTI1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgicmVtMTI2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMTAiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMjciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMwMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMTAwIik7CisgIChuZXcgVGVzdCgicmVtMTI4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xMDAwIik7CisgIChuZXcgVGVzdCgicmVtMTI5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMzAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAwIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwIik7CisgIChuZXcgVGVzdCgicmVtMTMxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMTAwIik7CisgIChuZXcgVGVzdCgicmVtMTMyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAwIikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwMDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIuMDAxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41Iik7CisgIChuZXcgVGVzdCgicmVtMTM0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUwMDAwMDAwMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNSIpOworICAobmV3IFRlc3QoInJlbTEzNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41MDAwMDAwMDAxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41Iik7CisgIChuZXcgVGVzdCgicmVtMTM2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMyIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDMiKTsKKyAgKG5ldyBUZXN0KCJyZW0xMzciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInJlbTEzOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQuMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoInJlbTEzOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQuMDEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAxIik7CisgIChuZXcgVGVzdCgicmVtMTQwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNC4wMDEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMSIpOworICAobmV3IFRlc3QoInJlbTE0MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQuMDAwMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMSIpOworICAobmV3IFRlc3QoInJlbTE0MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQuMDAwMDEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDAxIik7CisgIChuZXcgVGVzdCgicmVtMTQzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNC4wMDAwMDEiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDAwMSIpOworICAobmV3IFRlc3QoInJlbTE0NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjQuMDAwMDAwMSIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwMSIpOyAvLyAxRS03LCBwbGFpbgorICAobmV3IFRlc3QoInJlbTE0NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMiIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC43MzQ1IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC40NjU1Iik7CisgIChuZXcgVGVzdCgicmVtMTQ2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC44IikpLnJlbWFpbmRlcihuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOCIpOworICAobmV3IFRlc3QoInJlbTE0NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuOCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4yIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInJlbTE0OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuOCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yIik7CisgIChuZXcgVGVzdCgicmVtMTQ5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC44MDAiKSkucmVtYWluZGVyKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC44MDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0xNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjgwMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS43IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC44MDAiKTsKKyAgKG5ldyBUZXN0KCJyZW0xNTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjQwMCIpKS5yZW1haW5kZXIobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgyKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQwMCIpOworICAKKyAgdHJ5e2NoZWNrbnVsbDpkb3sKKyAgIHRlbi5yZW1haW5kZXIoKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCludWxsKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uICQ3OSl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbnVsbCovCisgIChuZXcgVGVzdCgicmVtMjAwIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja251bGwyOmRveworICAgdGVuLnJlbWFpbmRlcih0ZW4sKGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQpbnVsbCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiAkODApeworICAgZmxhZz10cnVlOworICB9LypjaGVja251bGwyKi8KKyAgKG5ldyBUZXN0KCJyZW0yMDEiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUucmVtYWluZGVyKHRlbmxvbmcsbWNsZCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ4MSl7YWU9JDgxOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlRvbyBtYW55IGRpZ2l0czoiKyIgIit0ZW5sb25nLnRvU3RyaW5nKCkpOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgicmVtMjAyIikpLm9rPWZsYWc7CisgIAorICB0cnl7Y2hlY2tkaWdpdHM6ZG97CisgICB0ZW5sb25nLnJlbWFpbmRlcihvbmUsbWNsZCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ4Mil7YWU9JDgyOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlRvbyBtYW55IGRpZ2l0czoiKyIgIit0ZW5sb25nLnRvU3RyaW5nKCkpOworICB9LypjaGVja2RpZ2l0cyovCisgIChuZXcgVGVzdCgicmVtMjAzIikpLm9rPWZsYWc7CisgIAorICBzdW1tYXJ5KCJyZW1haW5kZXIiKTsKKyAgcmV0dXJuO30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNzdWJ0cmFjdH0gbWV0aG9kLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWdzdWJ0cmFjdCgpeworICBib29sZWFuIGZsYWc9ZmFsc2U7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBhbGhzOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgYXJoczsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgCisgIC8vIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorICAobmV3IFRlc3QoInN1YjMwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMyksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJzdWIzMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1Ljc1IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNDUiKTsKKyAgKG5ldyBUZXN0KCJzdWIzMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiOCIpOworICAobmV3IFRlc3QoInN1YjMwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0zIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIiKTsKKyAgKG5ldyBUZXN0KCJzdWIzMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNyIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjUiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCItOS41Iik7CisgIChuZXcgVGVzdCgic3ViMzA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC43IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNCIpOworICAobmV3IFRlc3QoInN1YjMwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMyIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAiKTsKKyAgKG5ldyBUZXN0KCJzdWIzMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI1IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjUiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgic3ViMzA5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yMzQ1Njc4OSIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAwMDAwMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yMzQ1Njc4OSIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIzMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjIzNDU2Nzg5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDAwMDAwODkiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjIzNDU2NzAwIik7CisgIAorICAobmV3IFRlc3QoInN1YjMxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNTU1NTU1NTU1OSIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDAwMDAwMDEiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjU1NTU1NTU1NiIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIzMTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjU1NTU1NTU1NTkiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDAwMDAwMDA1IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41NTU1NTU1NTYiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMzEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC40NDQ0NDQ0NDQ0IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTExMTExMTExMSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMzMzMzMzMzMzIik7CisgIAorICAobmV3IFRlc3QoInN1YjMxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDAwMDAwMDAwMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMDAwMDAxIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45OTk5OTk5OSIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIzMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NDQ0NDQ0NDQ5OTkiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDQ0NDQ0NDQ0Iik7CisgIAorICAobmV3IFRlc3QoInN1YjMxNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNDQ0NDQ0NDQ0NTAwMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMC40NDQ0NDQ0NDUiKTsKKyAgCisgIAorICAobmV3IFRlc3QoInN1YjMxNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEuMDAwMDAwMDBFKzEzIik7CisgIAorICAobmV3IFRlc3QoInN1YjMxOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIi0xLjAwMDAwMDAwRSsxMyIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIzMTkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEuMDAwMDAwMDBFKzEzIik7CisgIAorICAobmV3IFRlc3QoInN1YjMyMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTkuOTk5OTk5OUUrMTIiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMzIxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMDAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiLTkuOTk5OTk5M0UrMTIiKTsKKyAgCisgIC8vIHN5bW1ldHJ5OgorICAobmV3IFRlc3QoInN1YjMyMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwMEUrMTMiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMzIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDBlKzkiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMDAwMDAwMEUrMTMiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMzI0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMDBlKzkiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMCIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDAwMDAwMDBFKzEzIik7CisgIAorICAobmV3IFRlc3QoInN1YjMyNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiOS45OTk5OTk5RSsxMiIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIzMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwMDAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCI5Ljk5OTk5OTNFKzEyIik7CisgIAorICAKKyAgLy8gW3NhbWUgd2l0aCBmaXhlZCBwb2ludCBhcml0aG1ldGljXQorICAobmV3IFRlc3QoInN1YjAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMykpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJzdWIwMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1Ljc1IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNDUiKTsKKyAgKG5ldyBUZXN0KCJzdWIwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOCIpOworICAobmV3IFRlc3QoInN1YjAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIiKTsKKyAgKG5ldyBUZXN0KCJzdWIwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNyIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIyLjUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItOS41Iik7CisgIChuZXcgVGVzdCgic3ViMDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC43IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNCIpOworICAobmV3IFRlc3QoInN1YjAwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMyIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAiKTsKKyAgKG5ldyBUZXN0KCJzdWIwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjI1IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjUiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwIik7CisgIChuZXcgVGVzdCgic3ViMDA5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMiIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMCIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjIzNDU2Nzg5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDAwMDAwMDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjIzNDU2Nzg5Iik7CisgIAorICAobmV3IFRlc3QoInN1YjAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMjM0NTY3ODkiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAwMDA4OSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMjM0NTY3MDAiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMDEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41NTU1NTU1NTU5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAwMDAwMDAwMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNTU1NTU1NTU1OCIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIwMTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjU1NTU1NTU1NTkiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDAwMDAwMDA1IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41NTU1NTU1NTU0Iik7CisgIAorICAobmV3IFRlc3QoInN1YjAxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNDQ0NDQ0NDQ0NCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjExMTExMTExMTEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMzMzMzMzMzMzMiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMDE1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAwMDAwMDAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAwMDAwMDEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk5OTk5OTk5MDAiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC40NDQ0NDQ0NDQ0OTk5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQ0NDQ0NDQ0NDQ5OTkiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMDE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC40NDQ0NDQ0NDQ1MDAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQ0NDQ0NDQ0NDUwMDAiKTsKKyAgCisgIAorICAobmV3IFRlc3QoInN1YjAxOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTk5OTk5OTk5OTk5MzAiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMDE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTk5OTk5OTk5OTkzMDAiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMDIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIi05OTk5OTk5OTkzMDAwIik7CisgIAorICAobmV3IFRlc3QoInN1YjAyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTk5OTk5OTk5MzAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgic3ViMDIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNzAwMDAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTk5OTk5OTkzMDAwMDAiKTsKKyAgCisgIC8vIHN5bW1ldHJ5OgorICAobmV3IFRlc3QoInN1YjAyMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTk5OTk5OTk5OTkzMCIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIwMjQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5OTk5OTk5OTk5MzAwIik7CisgIAorICAobmV3IFRlc3QoInN1YjAyNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5OTk5OTk5OTkzMDAwIik7CisgIAorICAobmV3IFRlc3QoInN1YjAyNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiOTk5OTk5OTkzMDAwMCIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIwMjciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwMDAiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI5OTk5OTk5MzAwMDAwIik7CisgIAorICAvLyBNQworICAobmV3IFRlc3QoInN1YjAzMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwMDAwZSs5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjcwMDAwIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiOS45OTk5OTk5RSsxMiIpOworICAKKyAgKG5ldyBUZXN0KCJzdWIwMzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwMGUrOSIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI3MDAwMCIpLG1jNikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAwMDAwRSsxMyIpOworICAKKyAgCisgIC8vIHNvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0cworICAobmV3IFRlc3QoInN1YjA0MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwLjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgic3ViMDQxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMCIpOworICAobmV3IFRlc3QoInN1YjA0MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJzdWIwNDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMC4wIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgic3ViMDQ0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMC4wIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInN1YjA0NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjciKTsKKyAgKG5ldyBUZXN0KCJzdWIwNDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzLiIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNyIpOworICAobmV3IFRlc3QoInN1YjA0NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjIuNyIpOworICAobmV3IFRlc3QoInN1YjA0OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMDAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjcwIik7CisgIChuZXcgVGVzdCgic3ViMDQ5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIiksbWNkZWYpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInN1YjA1MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzMiKSxtY2RlZikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgic3ViMDUxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMyIpLG1jZGVmKS50b1N0cmluZygpKS5lcXVhbHMoIjYiKTsKKyAgKG5ldyBUZXN0KCJzdWIwNTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi4zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi43Iik7CisgIChuZXcgVGVzdCgic3ViMDUzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMy4iKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjciKTsKKyAgKG5ldyBUZXN0KCJzdWIwNTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzLjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjciKTsKKyAgKG5ldyBUZXN0KCJzdWIwNTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzLjAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi4zIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMi43MCIpOworICAobmV3IFRlc3QoInN1YjA1NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJzdWIwNTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIiszIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInN1YjA1OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCI2Iik7CisgIAorICAvLyB0aGUgYWJvdmUgYWxsIGZyb20gYWRkOyBtYXNzYWdlZCBhbmQgZXh0ZW5kZWQuICBOb3cgc29tZSBuZXcgb25lcy4uLgorICAvLyBbcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgY29tcGFyaXNvbnNdCisgIC8vIE5COiAtMUUtNyBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kKKyAgKG5ldyBUZXN0KCJzdWIwODAiKSkub2s9KCItMUUtNyIpLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODQiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODkiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgic3ViMDgxIikpLm9rPSIwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg1IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg5IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInN1YjA4MiIpKS5vaz0iMCIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4NiIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4OSIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJzdWIwODMiKSkub2s9IjAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODciKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODkiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgic3ViMDg0IikpLm9rPSIwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg4IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg5IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInN1YjA4NSIpKS5vaz0iMCIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4OSIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4OSIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJzdWIwODYiKSkub2s9IjAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3OTAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODkiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgic3ViMDg3IikpLm9rPSIwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2NzkxIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg5IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInN1YjA4OCIpKS5vaz0iMCIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc5MiIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4OSIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJzdWIwODkiKSkub2s9IjAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3OTMiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODkiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgic3ViMDkwIikpLm9rPSIwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzk0IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg5IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInN1YjA5MSIpKS5vaz0oIi0xRS03IikuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4MSIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4NiIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJzdWIwOTIiKSkub2s9KCItMUUtNyIpLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODIiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODYiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgic3ViMDkzIikpLm9rPSgiLTFFLTciKS5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2NzgzIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg2IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInN1YjA5NCIpKS5vaz0oIi0xRS03IikuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4NCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4NiIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJzdWIwOTUiKSkub2s9IjAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODUiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODYiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgic3ViMDk2IikpLm9rPSIwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg2IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg2IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInN1YjA5NyIpKS5vaz0iMCIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4NyIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4NiIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJzdWIwOTgiKSkub2s9IjAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODgiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODYiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgic3ViMDk5IikpLm9rPSIwIi5lcXVhbHMoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg5IikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwLjIzNDU2Nzg2IiksbWNkZWYpLnRvU3RyaW5nKCkpOworICAobmV3IFRlc3QoInN1YjEwMCIpKS5vaz0iMCIuZXF1YWxzKChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc5MCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMC4yMzQ1Njc4NiIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJzdWIxMDEiKSkub2s9IjAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3OTEiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAuMjM0NTY3ODYiKSxtY2RlZikudG9TdHJpbmcoKSk7CisgIChuZXcgVGVzdCgic3ViMTAyIikpLm9rPSIwIi5lcXVhbHMoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjk5OTk5OTk5OSIpLG1jZGVmKS50b1N0cmluZygpKTsKKyAgKG5ldyBUZXN0KCJzdWIxMDMiKSkub2s9IjAiLmVxdWFscygobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC45OTk5OTk5OTkiKSkuc3VidHJhY3QoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLk9ORSxtY2RlZikudG9TdHJpbmcoKSk7CisgIAorICBhbGhzPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1Njc4OTAwMDAwIik7CisgIGFyaHM9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTk5OTk5OTk5OSIpOworICAobmV3IFRlc3QoInN1YjExMCIpKS5vaz0oYWxocy5zdWJ0cmFjdChhcmhzLG1jMykudG9TdHJpbmcoKSkuZXF1YWxzKCIyLjNFKzEyIik7CisgIChuZXcgVGVzdCgic3ViMTExIikpLm9rPShhcmhzLnN1YnRyYWN0KGFsaHMsbWMzKS50b1N0cmluZygpKS5lcXVhbHMoIi0yLjNFKzEyIik7CisgIChuZXcgVGVzdCgic3ViMTEyIikpLm9rPShhbGhzLnN1YnRyYWN0KGFyaHMpLnRvU3RyaW5nKCkpLmVxdWFscygiMjM0NTY3ODkwMDAwMSIpOworICAobmV3IFRlc3QoInN1YjExMyIpKS5vaz0oYXJocy5zdWJ0cmFjdChhbGhzKS50b1N0cmluZygpKS5lcXVhbHMoIi0yMzQ1Njc4OTAwMDAxIik7CisgIAorICAvLyBhZGRpdGlvbmFsIHNjYWxlZCBhcml0aG1ldGljIHRlc3RzIFswLjk3IHByb2JsZW1dCisgIChuZXcgVGVzdCgic3ViMTIwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjEiKTsKKyAgKG5ldyBUZXN0KCJzdWIxMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuOTc5ODMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC45Nzk4MyIpOworICAobmV3IFRlc3QoInN1YjEyMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjkiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC45Iik7CisgIChuZXcgVGVzdCgic3ViMTIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEwMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjEwMiIpOworICAobmV3IFRlc3QoInN1YjEyNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC40Iik7CisgIChuZXcgVGVzdCgic3ViMTI1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMzA3IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMzA3Iik7CisgIChuZXcgVGVzdCgic3ViMTI2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuNDM4MjIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC40MzgyMiIpOworICAobmV3IFRlc3QoInN1YjEyNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjkxMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjkxMSIpOworICAobmV3IFRlc3QoInN1YjEyOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi4wIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi4wMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAyIik7CisgIChuZXcgVGVzdCgic3ViMTI5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjM5MiIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjM5MiIpOworICAobmV3IFRlc3QoInN1YjEzMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjI2IikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMjYiKTsKKyAgKG5ldyBUZXN0KCJzdWIxMzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNTEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC41MSIpOworICAobmV3IFRlc3QoInN1YjEzMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjIyMzQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC4yMjM0Iik7CisgIChuZXcgVGVzdCgic3ViMTMzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjIiKTsKKyAgKG5ldyBUZXN0KCJzdWIxMzQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMDAwOCIpKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAwMDgiKTsKKyAgLy8gMC4gb24gbGVmdAorICAobmV3IFRlc3QoInN1YjE0MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItLjEiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uOTc5ODMiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjk3OTgzIik7CisgIChuZXcgVGVzdCgic3ViMTQyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOSIpOworICAobmV3IFRlc3QoInN1YjE0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4xMDIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwMiIpOworICAobmV3IFRlc3QoInN1YjE0NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItLjQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjQiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS4zMDciKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMwNyIpOworICAobmV3IFRlc3QoInN1YjE0NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItLjQzODIyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC40MzgyMiIpOworICAobmV3IFRlc3QoInN1YjE0NyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItLjkxMSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOTExIik7CisgIChuZXcgVGVzdCgic3ViMTQ4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uMDIiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAyIik7CisgIChuZXcgVGVzdCgic3ViMTQ5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItLjM5MiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMzkyIik7CisgIChuZXcgVGVzdCgic3ViMTUwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uMjYiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjI2Iik7CisgIChuZXcgVGVzdCgic3ViMTUxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjUxIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41MSIpOworICAobmV3IFRlc3QoInN1YjE1MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItLjIyMzQiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjIyMzQiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS4yIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yIik7CisgIChuZXcgVGVzdCgic3ViMTU0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uMDAwOCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwOCIpOworICAvLyBuZWdhdGl2ZXMgb2Ygc2FtZQorICAobmV3IFRlc3QoInN1YjE2MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS4xIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgic3ViMTYxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS45Nzk4MyIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOTc5ODMiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uOSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuOSIpOworICAobmV3IFRlc3QoInN1YjE2MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMTAyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xMDIiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNjQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uNCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNCIpOworICAobmV3IFRlc3QoInN1YjE2NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS4zMDciKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjMwNyIpOworICAobmV3IFRlc3QoInN1YjE2NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS40MzgyMiIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNDM4MjIiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNjciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uOTExIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC45MTEiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNjgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIuMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItLjAyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMiIpOworICAobmV3IFRlc3QoInN1YjE2OSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uMzkyIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4zOTIiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNzAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uMjYiKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjI2Iik7CisgIChuZXcgVGVzdCgic3ViMTcxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zdWJ0cmFjdChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC41MSIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuNTEiKTsKKyAgKG5ldyBUZXN0KCJzdWIxNzIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnN1YnRyYWN0KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0uMjIzNCIpKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMjIzNCIpOworICAobmV3IFRlc3QoInN1YjE3MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS4yIikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4yIik7CisgIChuZXcgVGVzdCgic3ViMTc0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLjAiKSkuc3VidHJhY3QobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS4wMDA4IikpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDA4Iik7CisgIAorICAvLyBtb3JlIGZpeGVkLCBMSFMgc3dhcHMgW3JlYWxseSBzYW1lIGFzIHRlc3RjYXNlcyB1bmRlciBhZGRdCisgIChuZXcgVGVzdCgic3ViMTgwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS0xMCIpKS5zdWJ0cmFjdCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAwMDAwNTYyNjciKTsKKyAgKG5ldyBUZXN0KCJzdWIxODEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTUiKSkuc3VidHJhY3QoemVybykudG9TdHJpbmcoKSkuZXF1YWxzKCItMC41NjI2NyIpOworICAobmV3IFRlc3QoInN1YjE4MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01NjI2N0UtMiIpKS5zdWJ0cmFjdCh6ZXJvKS50b1N0cmluZygpKS5lcXVhbHMoIi01NjIuNjciKTsKKyAgKG5ldyBUZXN0KCJzdWIxODMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNTYyNjdFLTEiKSkuc3VidHJhY3QoemVybykudG9TdHJpbmcoKSkuZXF1YWxzKCItNTYyNi43Iik7CisgIChuZXcgVGVzdCgic3ViMTg1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTU2MjY3RS0wIikpLnN1YnRyYWN0KHplcm8pLnRvU3RyaW5nKCkpLmVxdWFscygiLTU2MjY3Iik7CisgIAorICB0cnl7Y2hlY2tudWxsOmRveworICAgdGVuLnN1YnRyYWN0KChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwpbnVsbCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiAkODMpeworICAgZmxhZz10cnVlOworICB9LypjaGVja251bGwqLworICAobmV3IFRlc3QoInN1YjIwMCIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tudWxsMjpkb3sKKyAgIHRlbi5zdWJ0cmFjdCh0ZW4sKGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQpbnVsbCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdWxsUG9pbnRlckV4Y2VwdGlvbiAkODQpeworICAgZmxhZz10cnVlOworICB9LypjaGVja251bGwyKi8KKyAgKG5ldyBUZXN0KCJzdWIyMDEiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja2RpZ2l0czpkb3sKKyAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC5PTkUuc3VidHJhY3QodGVubG9uZyxtY2xkKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDg1KXthZT0kODU7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3RlbmxvbmcudG9TdHJpbmcoKSk7CisgIH0vKmNoZWNrZGlnaXRzKi8KKyAgKG5ldyBUZXN0KCJzdWIyMDIiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrZGlnaXRzOmRveworICAgdGVubG9uZy5zdWJ0cmFjdChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwuT05FLG1jbGQpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkODYpe2FlPSQ4NjsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJUb28gbWFueSBkaWdpdHM6IisiICIrdGVubG9uZy50b1N0cmluZygpKTsKKyAgfS8qY2hlY2tkaWdpdHMqLworICAobmV3IFRlc3QoInN1YjIwMyIpKS5vaz1mbGFnOworICBzdW1tYXJ5KCJzdWJ0cmFjdCIpOworICByZXR1cm47fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qIE90aGVyIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUgPGNvZGU+QmlnRGVjaW1hbC5ieXRlVmFsdWUoKTwvY29kZT4gbWV0aG9kLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWdieXRlVmFsdWUoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBqYXZhLmxhbmcuU3RyaW5nIHY9bnVsbDsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgamF2YS5sYW5nLlN0cmluZyBiYWRzdHJpbmdzW107CisgIGludCBpPTA7CisgIGphdmEubGFuZy5TdHJpbmcgbm9ybT1udWxsOworICAKKyAgCisgIChuZXcgVGVzdCgiYnl2MDAxIikpLm9rPSgoKChieXRlKS0xMjgpKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEyOCIpKS5ieXRlVmFsdWUoKSk7CisgIChuZXcgVGVzdCgiYnl2MDAyIikpLm9rPSgoMCkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuYnl0ZVZhbHVlKCkpOworICAobmV3IFRlc3QoImJ5djAwMyIpKS5vaz0oKDEpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLmJ5dGVWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJieXYwMDQiKSkub2s9KCg5OSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5IikpLmJ5dGVWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJieXYwMDUiKSkub2s9KCgxMjcpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjciKSkuYnl0ZVZhbHVlKCkpOworICAobmV3IFRlc3QoImJ5djAwNiIpKS5vaz0oKC0xMjgpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjgiKSkuYnl0ZVZhbHVlKCkpOworICAobmV3IFRlc3QoImJ5djAwNyIpKS5vaz0oKC0xMjcpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjkiKSkuYnl0ZVZhbHVlKCkpOworICAobmV3IFRlc3QoImJ5djAwOCIpKS5vaz0oKDEyNykpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xMjkiKSkuYnl0ZVZhbHVlKCkpOworICAobmV3IFRlc3QoImJ5djAwOSIpKS5vaz0oKDEyNikpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xMzAiKSkuYnl0ZVZhbHVlKCkpOworICAobmV3IFRlc3QoImJ5djAxMCIpKS5vaz0oKGJtYXgpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJtYXgpKS5ieXRlVmFsdWUoKSk7CisgIChuZXcgVGVzdCgiYnl2MDExIikpLm9rPSgoYm1pbikpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYm1pbikpLmJ5dGVWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJieXYwMTIiKSkub2s9KChibmVnKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChibmVnKSkuYnl0ZVZhbHVlKCkpOworICAobmV3IFRlc3QoImJ5djAxMyIpKS5vaz0oKGJ6ZXIpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJ6ZXIpKS5ieXRlVmFsdWUoKSk7CisgIChuZXcgVGVzdCgiYnl2MDE0IikpLm9rPSgoYnBvcykpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYnBvcykpLmJ5dGVWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJieXYwMTUiKSkub2s9KChibWluKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChibWF4KzEpKS5ieXRlVmFsdWUoKSk7CisgIChuZXcgVGVzdCgiYnl2MDE2IikpLm9rPSgoYm1heCkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYm1pbi0xKSkuYnl0ZVZhbHVlKCkpOworICAKKyAgKG5ldyBUZXN0KCJieXYwMjEiKSkub2s9KCgoKGJ5dGUpLTEyOCkpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMTI4IikpLmJ5dGVWYWx1ZUV4YWN0KCkpOworICAobmV3IFRlc3QoImJ5djAyMiIpKS5vaz0oKDApKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLmJ5dGVWYWx1ZUV4YWN0KCkpOworICAobmV3IFRlc3QoImJ5djAyMyIpKS5vaz0oKDEpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLmJ5dGVWYWx1ZUV4YWN0KCkpOworICAobmV3IFRlc3QoImJ5djAyNCIpKS5vaz0oKDk5KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTkiKSkuYnl0ZVZhbHVlRXhhY3QoKSk7CisgIChuZXcgVGVzdCgiYnl2MDI1IikpLm9rPSgoMTI3KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTI3IikpLmJ5dGVWYWx1ZUV4YWN0KCkpOworICAobmV3IFRlc3QoImJ5djAyNiIpKS5vaz0oKGJtYXgpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJtYXgpKS5ieXRlVmFsdWVFeGFjdCgpKTsKKyAgKG5ldyBUZXN0KCJieXYwMjciKSkub2s9KChibWluKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChibWluKSkuYnl0ZVZhbHVlRXhhY3QoKSk7CisgIChuZXcgVGVzdCgiYnl2MDI4IikpLm9rPSgoYm5lZykpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYm5lZykpLmJ5dGVWYWx1ZUV4YWN0KCkpOworICAobmV3IFRlc3QoImJ5djAyOSIpKS5vaz0oKGJ6ZXIpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJ6ZXIpKS5ieXRlVmFsdWVFeGFjdCgpKTsKKyAgKG5ldyBUZXN0KCJieXYwMzAiKSkub2s9KChicG9zKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChicG9zKSkuYnl0ZVZhbHVlRXhhY3QoKSk7CisgIHRyeXsKKyAgIHY9Ii0xMjkiOworICAgKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwodikpLmJ5dGVWYWx1ZUV4YWN0KCk7CisgICBmbGFnPWZhbHNlOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkODcpe2FlPSQ4NzsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK3YpOworICB9CisgIChuZXcgVGVzdCgiYnl2MTAwIikpLm9rPWZsYWc7CisgIHRyeXsKKyAgIHY9IjEyOCI7CisgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2KSkuYnl0ZVZhbHVlRXhhY3QoKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ4OCl7YWU9JDg4OworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkNvbnZlcnNpb24gb3ZlcmZsb3c6IisiICIrdik7CisgIH0KKyAgKG5ldyBUZXN0KCJieXYxMDEiKSkub2s9ZmxhZzsKKyAgdHJ5eworICAgdj0iMS41IjsKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS5ieXRlVmFsdWVFeGFjdCgpOworICAgZmxhZz1mYWxzZTsKKyAgfQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDg5KXthZT0kODk7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRGVjaW1hbCBwYXJ0IG5vbi16ZXJvOiIrIiAiK3YpOworICB9CisgIChuZXcgVGVzdCgiYnl2MTAyIikpLm9rPWZsYWc7CisgIAorICBiYWRzdHJpbmdzPW5ldyBqYXZhLmxhbmcuU3RyaW5nW117IjEyMzQiLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJtYXgpKS5hZGQob25lKS50b1N0cmluZygpLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJtaW4pKS5zdWJ0cmFjdChvbmUpLnRvU3RyaW5nKCksIjE3MCIsIjI3MCIsIjM3MCIsIjQ3MCIsIjU3MCIsIjY3MCIsIjc3MCIsIjg3MCIsIjk3MCIsIi0xNzAiLCItMjcwIiwiLTM3MCIsIi00NzAiLCItNTcwIiwiLTY3MCIsIi03NzAiLCItODcwIiwiLTk3MCIsKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYm1pbikpLm11bHRpcGx5KHR3bykudG9TdHJpbmcoKSwobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChibWF4KSkubXVsdGlwbHkodHdvKS50b1N0cmluZygpLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJtaW4pKS5tdWx0aXBseSh0ZW4pLnRvU3RyaW5nKCksKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoYm1heCkpLm11bHRpcGx5KHRlbikudG9TdHJpbmcoKSwiLTEyMzQifTsgLy8gMjIwCisgIC8vIDIyMQorICAvLyAyMjIKKyAgLy8gMjIzCisgIC8vIDIyNAorICAvLyAyMjUKKyAgLy8gMjI2CisgIC8vIDIyNworICAvLyAyMjgKKyAgLy8gMjI5CisgIC8vIDIzMAorICAvLyAyMzEKKyAgLy8gMjMyCisgIC8vIDIzMworICAvLyAyMzQKKyAgLy8gMjM1CisgIC8vIDIzNgorICAvLyAyMzcKKyAgLy8gMjM4CisgIC8vIDIzOQorICAvLyAyNDAKKyAgLy8gMjQxCisgIC8vIDI0MgorICAvLyAyNDMKKyAgLy8gMjQ0CisgIC8vIDI0NQorICB7aW50ICQ5MD1iYWRzdHJpbmdzLmxlbmd0aDtpPTA7aTpmb3IoOyQ5MD4wOyQ5MC0tLGkrKyl7CisgICB0cnl7CisgICAgdj1iYWRzdHJpbmdzW2ldOworICAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS5ieXRlVmFsdWVFeGFjdCgpOworICAgIGZsYWc9ZmFsc2U7CisgICB9CisgICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDkxKXthZT0kOTE7CisgICAgbm9ybT0obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2KSkudG9TdHJpbmcoKTsKKyAgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiQ29udmVyc2lvbiBvdmVyZmxvdzoiKyIgIitub3JtKTsKKyAgIH0KKyAgIChuZXcgVGVzdCgiYnl2IisoMjIwK2kpKSkub2s9ZmxhZzsKKyAgIH0KKyAgfS8qaSovCisgIAorICBzdW1tYXJ5KCJieXRlVmFsdWUrIik7CisgIHJldHVybjt9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCl9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnY29tcGFyZXRvT2JqKCl7CisgIGJvb2xlYW4gZmxhZz1mYWxzZTsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGQ7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBsb25nMTsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGxvbmcyOworICAKKyAgZD1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDE3KTsKKyAgKG5ldyBUZXN0KCJjdG8wMDEiKSkub2s9KGQuY29tcGFyZVRvKChqYXZhLmxhbmcuT2JqZWN0KShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDY2KSkpKT09KC0xKTsKKyAgKG5ldyBUZXN0KCJjdG8wMDIiKSkub2s9KGQuY29tcGFyZVRvKChqYXZhLmxhbmcuT2JqZWN0KSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgxMCkpLmFkZChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDcpKSkpKT09MDsKKyAgKG5ldyBUZXN0KCJjdG8wMDMiKSkub2s9KGQuY29tcGFyZVRvKChqYXZhLmxhbmcuT2JqZWN0KShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDEwKSkpKT09MTsKKyAgbG9uZzE9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5MDMiKTsKKyAgbG9uZzI9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDU2Nzg5MDAiKTsKKyAgKG5ldyBUZXN0KCJjdG8wMDQiKSkub2s9KGxvbmcxLmNvbXBhcmVUbygoamF2YS5sYW5nLk9iamVjdClsb25nMikpPT0xOworICAobmV3IFRlc3QoImN0bzAwNSIpKS5vaz0obG9uZzIuY29tcGFyZVRvKChqYXZhLmxhbmcuT2JqZWN0KWxvbmcxKSk9PSgtMSk7CisgIChuZXcgVGVzdCgiY3RvMDA2IikpLm9rPShsb25nMi5jb21wYXJlVG8oKGphdmEubGFuZy5PYmplY3QpbG9uZzIpKT09MDsKKyAgdHJ5eworICAgZC5jb21wYXJlVG8oKGphdmEubGFuZy5PYmplY3QpbnVsbCk7CisgICBmbGFnPWZhbHNlOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gJDkyKXsKKyAgIGZsYWc9dHJ1ZTsgLy8gc2hvdWxkIGdldCBoZXJlCisgIH0KKyAgKG5ldyBUZXN0KCJjdG8xMDEiKSkub2s9ZmxhZzsKKyAgdHJ5eworICAgZC5jb21wYXJlVG8oKGphdmEubGFuZy5PYmplY3QpImZvbyIpOworICAgZmxhZz1mYWxzZTsKKyAgfQorICBjYXRjaCAoamF2YS5sYW5nLkNsYXNzQ2FzdEV4Y2VwdGlvbiAkOTMpeworICAgZmxhZz10cnVlOyAvLyBzaG91bGQgZ2V0IGhlcmUKKyAgfQorICAobmV3IFRlc3QoImN0bzEwMiIpKS5vaz1mbGFnOworICBzdW1tYXJ5KCJjb21wYXJlVG8oT2JqKSIpOworICByZXR1cm47fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjZG91YmxlVmFsdWV9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnZG91YmxldmFsdWUoKXsKKyAgamF2YS5sYW5nLlN0cmluZyB2YWw7CisgIC8vIDE5OTkuMDMuMDcgSW5maW5pdGllcyBubyBsb25nZXIgZXJyb3JzCisgIHZhbD0iLTEiOworICAobmV3IFRlc3QoImRvdjAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwodmFsKSkuZG91YmxlVmFsdWUoKSk9PSgobmV3IGphdmEubGFuZy5Eb3VibGUodmFsKSkuZG91YmxlVmFsdWUoKSk7CisgIHZhbD0iLTAuMSI7CisgIChuZXcgVGVzdCgiZG92MDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2YWwpKS5kb3VibGVWYWx1ZSgpKT09KChuZXcgamF2YS5sYW5nLkRvdWJsZSh2YWwpKS5kb3VibGVWYWx1ZSgpKTsKKyAgdmFsPSIwIjsKKyAgKG5ldyBUZXN0KCJkb3YwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHZhbCkpLmRvdWJsZVZhbHVlKCkpPT0oKG5ldyBqYXZhLmxhbmcuRG91YmxlKHZhbCkpLmRvdWJsZVZhbHVlKCkpOworICB2YWw9IjAuMSI7CisgIChuZXcgVGVzdCgiZG92MDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2YWwpKS5kb3VibGVWYWx1ZSgpKT09KChuZXcgamF2YS5sYW5nLkRvdWJsZSh2YWwpKS5kb3VibGVWYWx1ZSgpKTsKKyAgdmFsPSIxIjsKKyAgKG5ldyBUZXN0KCJkb3YwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHZhbCkpLmRvdWJsZVZhbHVlKCkpPT0oKG5ldyBqYXZhLmxhbmcuRG91YmxlKHZhbCkpLmRvdWJsZVZhbHVlKCkpOworICB2YWw9IjFlMTAwMCI7CisgIChuZXcgVGVzdCgiZG92MDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2YWwpKS5kb3VibGVWYWx1ZSgpKT09amF2YS5sYW5nLkRvdWJsZS5QT1NJVElWRV9JTkZJTklUWTsKKyAgdmFsPSItMWUxMDAwIjsKKyAgKG5ldyBUZXN0KCJkb3YwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHZhbCkpLmRvdWJsZVZhbHVlKCkpPT1qYXZhLmxhbmcuRG91YmxlLk5FR0FUSVZFX0lORklOSVRZOworICBzdW1tYXJ5KCJkb3VibGVWYWx1ZSIpOworICByZXR1cm47fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjZXF1YWxzfSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ2VxdWFscygpeworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDsKKyAgZD1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDE3KTsKKyAgKG5ldyBUZXN0KCJlcXUwMDEiKSkub2s9KCEoZC5lcXVhbHMoKGphdmEubGFuZy5PYmplY3QpbnVsbCkpKTsKKyAgKG5ldyBUZXN0KCJlcXUwMDIiKSkub2s9KCEoZC5lcXVhbHMoKGphdmEubGFuZy5PYmplY3QpImZvbyIpKSk7CisgIChuZXcgVGVzdCgiZXF1MDAzIikpLm9rPSghKGQuZXF1YWxzKChqYXZhLmxhbmcuT2JqZWN0KShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDY2KSkpKSk7CisgIChuZXcgVGVzdCgiZXF1MDA0IikpLm9rPWQuZXF1YWxzKChqYXZhLmxhbmcuT2JqZWN0KWQpOworICAobmV3IFRlc3QoImVxdTAwNSIpKS5vaz1kLmVxdWFscygoamF2YS5sYW5nLk9iamVjdCkoKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMTApKS5hZGQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCg3KSkpKTsKKyAgc3VtbWFyeSgiZXF1YWxzIik7CisgIHJldHVybjt9CisKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNmbG9hdFZhbHVlfSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ2Zsb2F0dmFsdWUoKXsKKyAgamF2YS5sYW5nLlN0cmluZyB2YWw7CisgIC8vIDE5OTkuMDMuMDcgSW5maW5pdGllcyBubyBsb25nZXIgZXJyb3JzCisgIHZhbD0iLTEiOworICAobmV3IFRlc3QoImZsdjAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwodmFsKSkuZmxvYXRWYWx1ZSgpKT09KChuZXcgamF2YS5sYW5nLkZsb2F0KHZhbCkpLmZsb2F0VmFsdWUoKSk7CisgIHZhbD0iLTAuMSI7CisgIChuZXcgVGVzdCgiZmx2MDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2YWwpKS5mbG9hdFZhbHVlKCkpPT0oKG5ldyBqYXZhLmxhbmcuRmxvYXQodmFsKSkuZmxvYXRWYWx1ZSgpKTsKKyAgdmFsPSIwIjsKKyAgKG5ldyBUZXN0KCJmbHYwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHZhbCkpLmZsb2F0VmFsdWUoKSk9PSgobmV3IGphdmEubGFuZy5GbG9hdCh2YWwpKS5mbG9hdFZhbHVlKCkpOworICB2YWw9IjAuMSI7CisgIChuZXcgVGVzdCgiZmx2MDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2YWwpKS5mbG9hdFZhbHVlKCkpPT0oKG5ldyBqYXZhLmxhbmcuRmxvYXQodmFsKSkuZmxvYXRWYWx1ZSgpKTsKKyAgdmFsPSIxIjsKKyAgKG5ldyBUZXN0KCJmbHYwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHZhbCkpLmZsb2F0VmFsdWUoKSk9PSgobmV3IGphdmEubGFuZy5GbG9hdCh2YWwpKS5mbG9hdFZhbHVlKCkpOworICB2YWw9IjFlMjAwIjsKKyAgKG5ldyBUZXN0KCJmbHYwMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHZhbCkpLmZsb2F0VmFsdWUoKSk9PWphdmEubGFuZy5GbG9hdC5QT1NJVElWRV9JTkZJTklUWTsKKyAgdmFsPSItMWUyMDAiOworICAobmV3IFRlc3QoImZsdjAwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwodmFsKSkuZmxvYXRWYWx1ZSgpKT09amF2YS5sYW5nLkZsb2F0Lk5FR0FUSVZFX0lORklOSVRZOworICB2YWw9IjFlMTAwMCI7CisgIChuZXcgVGVzdCgiZmx2MDA4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2YWwpKS5mbG9hdFZhbHVlKCkpPT1qYXZhLmxhbmcuRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFk7CisgIHZhbD0iLTFlMTAwMCI7CisgIChuZXcgVGVzdCgiZmx2MDA5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2YWwpKS5mbG9hdFZhbHVlKCkpPT1qYXZhLmxhbmcuRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFk7CisgIHN1bW1hcnkoImZsb2F0VmFsdWUiKTsKKyAgcmV0dXJuO30KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBCaWdEZWNpbWFsI2Zvcm1hdH0gbWV0aG9kLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWdmb3JtYXQoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBpbnQgZW5nOworICBpbnQgc2NpOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDA0OworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDA1OworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDA2OworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDE1OworICBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZT1udWxsOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDA1MDsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGQxNTA7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBtMDUwOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbTE1MDsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGQwNTE7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBkMTUxOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDAwMDsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGQ1MDA7CisgIGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uIGFlPW51bGw7CisgIC8vIDE5OTkuMDIuMDkgbm93IG9ubHkgdHdvIHNpZ25hdHVyZXMgZm9yIGZvcm1hdCgpLCBzbyBzb21lIHRlc3RzIGJlbG93CisgIC8vICAgICAgICAgICAgbWF5IG5vdyBiZSByZWR1bmRhbnQKKyAgCisgIChuZXcgVGVzdCgiZm9yMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIuMyIpKS5mb3JtYXQoLTEsLTEpKS5lcXVhbHMoIjEyLjMiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMTIuNzMiKSkuZm9ybWF0KC0xLC0xKSkuZXF1YWxzKCItMTIuNzMiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMCIpKS5mb3JtYXQoLTEsLTEpKS5lcXVhbHMoIjAuMDAwIik7CisgIChuZXcgVGVzdCgiZm9yMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiM0UrMyIpKS5mb3JtYXQoLTEsLTEpKS5lcXVhbHMoIjMwMDAiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzIikpLmZvcm1hdCg0LC0xKSkuZXF1YWxzKCIgICAzIik7CisgIChuZXcgVGVzdCgiZm9yMDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS43MyIpKS5mb3JtYXQoNCwwKSkuZXF1YWxzKCIgICAyIik7CisgIChuZXcgVGVzdCgiZm9yMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS43MyIpKS5mb3JtYXQoNCwxKSkuZXF1YWxzKCIgICAxLjciKTsKKyAgKG5ldyBUZXN0KCJmb3IwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjc1IikpLmZvcm1hdCg0LDEpKS5lcXVhbHMoIiAgIDEuOCIpOworICAobmV3IFRlc3QoImZvcjAwOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNSIpKS5mb3JtYXQoNCwxKSkuZXF1YWxzKCIgICAwLjUiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1IikpLmZvcm1hdCg0LDEpKS5lcXVhbHMoIiAgIDAuMSIpOworICAobmV3IFRlc3QoImZvcjAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDQiKSkuZm9ybWF0KDQsMSkpLmVxdWFscygiICAgMC4wIik7CisgIChuZXcgVGVzdCgiZm9yMDEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5mb3JtYXQoNCwwKSkuZXF1YWxzKCIgICAwIik7CisgIChuZXcgVGVzdCgiZm9yMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5mb3JtYXQoNCwxKSkuZXF1YWxzKCIgICAwLjAiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLmZvcm1hdCg0LDIpKS5lcXVhbHMoIiAgIDAuMDAiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLmZvcm1hdCg0LDMpKS5lcXVhbHMoIiAgIDAuMDAwIik7CisgIChuZXcgVGVzdCgiZm9yMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5mb3JtYXQoNCw0KSkuZXF1YWxzKCIgICAwLjAwMDAiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwNSIpKS5mb3JtYXQoNCwwKSkuZXF1YWxzKCIgICAwIik7CisgIChuZXcgVGVzdCgiZm9yMDE4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuZm9ybWF0KDQsMSkpLmVxdWFscygiICAgMC4wIik7CisgIChuZXcgVGVzdCgiZm9yMDE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuZm9ybWF0KDQsMikpLmVxdWFscygiICAgMC4wMSIpOworICAobmV3IFRlc3QoImZvcjAyMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA0IikpLmZvcm1hdCg0LDIpKS5lcXVhbHMoIiAgIDAuMDAiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwNSIpKS5mb3JtYXQoNCwzKSkuZXF1YWxzKCIgICAwLjAwNSIpOworICAobmV3IFRlc3QoImZvcjAyMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLmZvcm1hdCg0LDQpKS5lcXVhbHMoIiAgIDAuMDA1MCIpOworICAKKyAgKG5ldyBUZXN0KCJmb3IwMjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjczIikpLmZvcm1hdCg0LDIpKS5lcXVhbHMoIiAgIDEuNzMiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMjQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjczIikpLmZvcm1hdCg0LDMpKS5lcXVhbHMoIiAgIDEuNzMwIik7CisgIChuZXcgVGVzdCgiZm9yMDI1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLS43NiIpKS5mb3JtYXQoNCwxKSkuZXF1YWxzKCIgIC0wLjgiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMTIuNzMiKSkuZm9ybWF0KC0xLDQpKS5lcXVhbHMoIi0xMi43MzAwIik7CisgIAorICAobmV3IFRlc3QoImZvcjAyNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMDMiKSkuZm9ybWF0KDQsLTEpKS5lcXVhbHMoIiAgIDMuMDMiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMjgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIzLjAzIikpLmZvcm1hdCg0LDEpKS5lcXVhbHMoIiAgIDMuMCIpOworICAobmV3IFRlc3QoImZvcjAyOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjMuMDMiKSkuZm9ybWF0KDQsLTEsMywtMSwtMSwtMSkpLmVxdWFscygiICAgMy4wMyAgICAgIik7CisgIChuZXcgVGVzdCgiZm9yMDMwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMy4wMyIpKS5mb3JtYXQoLTEsLTEsMywtMSwtMSwtMSkpLmVxdWFscygiMy4wMyAgICAgIik7CisgIChuZXcgVGVzdCgiZm9yMDMxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDUuNzMiKSkuZm9ybWF0KC0xLC0xLC0xLDQsLTEsLTEpKS5lcXVhbHMoIjEuMjM0NTczRSs0Iik7CisgIChuZXcgVGVzdCgiZm9yMDMyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDUuNzMiKSkuZm9ybWF0KC0xLC0xLC0xLDUsLTEsLTEpKS5lcXVhbHMoIjEyMzQ1LjczIik7CisgIChuZXcgVGVzdCgiZm9yMDMzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDUuNzMiKSkuZm9ybWF0KC0xLC0xLC0xLDYsLTEsLTEpKS5lcXVhbHMoIjEyMzQ1LjczIik7CisgIAorICAobmV3IFRlc3QoImZvcjAzNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1LjczIikpLmZvcm1hdCgtMSw4LC0xLDMsLTEsLTEpKS5lcXVhbHMoIjEuMjM0NTczMDBFKzQiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMzUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NS43MyIpKS5mb3JtYXQoLTEsNywtMSwzLC0xLC0xKSkuZXF1YWxzKCIxLjIzNDU3MzBFKzQiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMzYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NS43MyIpKS5mb3JtYXQoLTEsNiwtMSwzLC0xLC0xKSkuZXF1YWxzKCIxLjIzNDU3M0UrNCIpOworICAobmV3IFRlc3QoImZvcjAzNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1LjczIikpLmZvcm1hdCgtMSw1LC0xLDMsLTEsLTEpKS5lcXVhbHMoIjEuMjM0NTdFKzQiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMzgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NS43MyIpKS5mb3JtYXQoLTEsNCwtMSwzLC0xLC0xKSkuZXF1YWxzKCIxLjIzNDZFKzQiKTsKKyAgKG5ldyBUZXN0KCJmb3IwMzkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NS43MyIpKS5mb3JtYXQoLTEsMywtMSwzLC0xLC0xKSkuZXF1YWxzKCIxLjIzNUUrNCIpOworICAobmV3IFRlc3QoImZvcjA0MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1LjczIikpLmZvcm1hdCgtMSwyLC0xLDMsLTEsLTEpKS5lcXVhbHMoIjEuMjNFKzQiKTsKKyAgKG5ldyBUZXN0KCJmb3IwNDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NS43MyIpKS5mb3JtYXQoLTEsMSwtMSwzLC0xLC0xKSkuZXF1YWxzKCIxLjJFKzQiKTsKKyAgKG5ldyBUZXN0KCJmb3IwNDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NS43MyIpKS5mb3JtYXQoLTEsMCwtMSwzLC0xLC0xKSkuZXF1YWxzKCIxRSs0Iik7CisgIAorICAobmV3IFRlc3QoImZvcjA0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5Ljk5IikpLmZvcm1hdCgtMSw2LC0xLDMsLTEsLTEpKS5lcXVhbHMoIjkuOTk5OTk5RSs0Iik7CisgIChuZXcgVGVzdCgiZm9yMDQ0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTkuOTkiKSkuZm9ybWF0KC0xLDUsLTEsMywtMSwtMSkpLmVxdWFscygiMS4wMDAwMEUrNSIpOworICAobmV3IFRlc3QoImZvcjA0NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5OTk5Ljk5IikpLmZvcm1hdCgtMSwyLC0xLDMsLTEsLTEpKS5lcXVhbHMoIjEuMDBFKzUiKTsKKyAgKG5ldyBUZXN0KCJmb3IwNDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OTk5OS45OSIpKS5mb3JtYXQoLTEsMCwtMSwzLC0xLC0xKSkuZXF1YWxzKCIxRSs1Iik7CisgIChuZXcgVGVzdCgiZm9yMDQ3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiOTk5OTkuOTkiKSkuZm9ybWF0KDMsMCwtMSwzLC0xLC0xKSkuZXF1YWxzKCIgIDFFKzUiKTsKKyAgCisgIChuZXcgVGVzdCgiZm9yMDQ4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDUuNzMiKSkuZm9ybWF0KC0xLC0xLDIsMiwtMSwtMSkpLmVxdWFscygiMS4yMzQ1NzNFKzA0Iik7CisgIChuZXcgVGVzdCgiZm9yMDQ5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDUuNzMiKSkuZm9ybWF0KC0xLDMsLTEsMCwtMSwtMSkpLmVxdWFscygiMS4yMzVFKzQiKTsKKyAgKG5ldyBUZXN0KCJmb3IwNTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjIzNDU3MyIpKS5mb3JtYXQoLTEsMywtMSwwLC0xLC0xKSkuZXF1YWxzKCIxLjIzNSIpOworICAobmV3IFRlc3QoImZvcjA1MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMy40NSIpKS5mb3JtYXQoLTEsMywyLDAsLTEsLTEpKS5lcXVhbHMoIjEuMjM1RSswMiIpOworICAKKyAgKG5ldyBUZXN0KCJmb3IwNTIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjQ0NCIpKS5mb3JtYXQoLTEsMCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImZvcjA1MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjQ0NCIpKS5mb3JtYXQoLTEsMCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImZvcjA1NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNCIpKS5mb3JtYXQoLTEsMCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoImZvcjA1NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjQiKSkuZm9ybWF0KC0xLDApKS5lcXVhbHMoIjAiKTsKKyAgCisgIGVuZz1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LkVOR0lORUVSSU5HOworICBzY2k9Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDOworICAobmV3IFRlc3QoImZvcjA2MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQuNSIpKS5mb3JtYXQoLTEsMywyLDAsZW5nLC0xKSkuZXF1YWxzKCIxLjIzNUUrMDMiKTsKKyAgKG5ldyBUZXN0KCJmb3IwNjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NSIpKS5mb3JtYXQoLTEsMywzLDAsZW5nLC0xKSkuZXF1YWxzKCIxMi4zNDVFKzAwMyIpOworICAobmV3IFRlc3QoImZvcjA2MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1IikpLmZvcm1hdCgtMSwzLDMsMCxzY2ksLTEpKS5lcXVhbHMoIjEuMjM1RSswMDQiKTsKKyAgKG5ldyBUZXN0KCJmb3IwNjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0LjUiKSkuZm9ybWF0KDQsMywyLDAsZW5nLC0xKSkuZXF1YWxzKCIgICAxLjIzNUUrMDMiKTsKKyAgKG5ldyBUZXN0KCJmb3IwNjQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NSIpKS5mb3JtYXQoNSwzLDMsMCxlbmcsLTEpKS5lcXVhbHMoIiAgIDEyLjM0NUUrMDAzIik7CisgIChuZXcgVGVzdCgiZm9yMDY1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDUiKSkuZm9ybWF0KDYsMywzLDAsc2NpLC0xKSkuZXF1YWxzKCIgICAgIDEuMjM1RSswMDQiKTsKKyAgCisgIChuZXcgVGVzdCgiZm9yMDY2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4yMzQ1IikpLmZvcm1hdCgtMSwzLDIsMCwtMSwtMSkpLmVxdWFscygiMS4yMzUgICAgIik7CisgIChuZXcgVGVzdCgiZm9yMDY3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDUuNzMiKSkuZm9ybWF0KC0xLC0xLDMsNiwtMSwtMSkpLmVxdWFscygiMTIzNDUuNzMgICAgICIpOworICAobmV3IFRlc3QoImZvcjA2OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1ZSs1IikpLmZvcm1hdCgtMSwwKSkuZXF1YWxzKCIxMjM0NTAwMDAwIik7CisgIChuZXcgVGVzdCgiZm9yMDY5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDVlKzUiKSkuZm9ybWF0KC0xLDEpKS5lcXVhbHMoIjEyMzQ1MDAwMDAuMCIpOworICAobmV3IFRlc3QoImZvcjA3MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1ZSs1IikpLmZvcm1hdCgtMSwyKSkuZXF1YWxzKCIxMjM0NTAwMDAwLjAwIik7CisgIChuZXcgVGVzdCgiZm9yMDcxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDVlKzUiKSkuZm9ybWF0KC0xLDMpKS5lcXVhbHMoIjEyMzQ1MDAwMDAuMDAwIik7CisgIChuZXcgVGVzdCgiZm9yMDcyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTIzNDVlKzUiKSkuZm9ybWF0KC0xLDQpKS5lcXVhbHMoIjEyMzQ1MDAwMDAuMDAwMCIpOworICAKKyAgLy8gc29tZSBmcm9tIEFOU0kgRGFsbGFzIFtOb3YgMTk5OF0KKyAgKG5ldyBUZXN0KCJmb3IwNzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OS45OTkiKSkuZm9ybWF0KC0xLDIsLTEsMiwtMSwtMSkpLmVxdWFscygiMTAwLjAwIik7CisgIChuZXcgVGVzdCgiZm9yMDc0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC45OTk5OSIpKS5mb3JtYXQoLTEsNCwyLDIsLTEsLTEpKS5lcXVhbHMoIjEuMDAwMCAgICAiKTsKKyAgCisgIC8vIHRyeSBzb21lIHJvdW5kaW5nIG1vZGVzIFtkZWZhdWx0IFJPVU5EX0hBTEZfVVAgd2lkZWx5IHRlc3RlZCBhYm92ZV0KKyAgLy8gdGhlIGZpcnN0IGZldyBhbHNvIHRlc3RzIHRoYXQgZGVmYXVsdHMgYXJlIGFjY2VwdGVkIGZvciB0aGUgb3RoZXJzCisgIGQwND1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA0Iik7CisgIGQwNT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1Iik7CisgIGQwNj1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA2Iik7CisgIGQxNT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjE1Iik7CisgIChuZXcgVGVzdCgiZm9yMDgwIikpLm9rPShkMDUuZm9ybWF0KC0xLDEpKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoImZvcjA4MSIpKS5vaz0oZDA1LmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgiZm9yMDgyIikpLm9rPShkMDUuZm9ybWF0KC0xLDEsLTEsLTEsLTEsLTEpKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoImZvcjA4MyIpKS5vaz0oZDA1LmZvcm1hdCgtMSwtMSwtMSwtMSwtMSwtMSkpLmVxdWFscygiMC4wNSIpOworICAobmV3IFRlc3QoImZvcjA4NCIpKS5vaz0oZDA1LmZvcm1hdCgtMSwtMSkpLmVxdWFscygiMC4wNSIpOworICB0cnl7CisgICBkMDUuZm9ybWF0KC0xLC0xLC0xLC0xLC0xLDMwKTsgLy8gYmFkIG1vZGUKKyAgIGZsYWc9ZmFsc2U7IC8vIHNob3VsZG4ndCBnZXQgaGVyZQorICB9CisgIGNhdGNoIChqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICQ5NCl7aWFlPSQ5NDsKKyAgIGZsYWc9KGlhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiQmFkIGFyZ3VtZW50IDYgdG8gZm9ybWF0OiAzMCIpOworICB9CisgIChuZXcgVGVzdCgiZm9yMDg1IikpLm9rPWZsYWc7CisgIAorICAobmV3IFRlc3QoImZvcjA5MCIpKS5vaz0oZDA0LmZvcm1hdCgtMSwxKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJmb3IwOTEiKSkub2s9KGQwNi5mb3JtYXQoLTEsMSkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgiZm9yMDkyIikpLm9rPShkMDQuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04pKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoImZvcjA5MyIpKS5vaz0oZDA1LmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9ET1dOKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJmb3IwOTQiKSkub2s9KGQwNi5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRE9XTikpLmVxdWFscygiMC4xIik7CisgIAorICAobmV3IFRlc3QoImZvcjA5NSIpKS5vaz0oZDA0LmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJmb3IwOTYiKSkub2s9KGQwNS5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTikpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgiZm9yMDk3IikpLm9rPShkMDYuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoImZvcjA5OCIpKS5vaz0oZDE1LmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKSkuZXF1YWxzKCIwLjIiKTsKKyAgZDA1MD1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA1MCIpOworICBkMTUwPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMTUwIik7CisgIChuZXcgVGVzdCgiZm9yMDk5IikpLm9rPShkMDUwLmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMDAiKSkub2s9KGQxNTAuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pKS5lcXVhbHMoIjAuMiIpOworICBtMDUwPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjA1MCIpOworICBtMTUwPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjE1MCIpOworICAobmV3IFRlc3QoImZvcjEwMSIpKS5vaz0obTA1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTikpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgiZm9yMTAyIikpLm9rPShtMTUwLmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKSkuZXF1YWxzKCItMC4yIik7CisgIGQwNTE9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wNTEiKTsKKyAgZDE1MT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjE1MSIpOworICAobmV3IFRlc3QoImZvcjEwMyIpKS5vaz0oZDA1MS5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTikpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgiZm9yMTA0IikpLm9rPShkMTUxLmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKSkuZXF1YWxzKCIwLjIiKTsKKyAgCisgIChuZXcgVGVzdCgiZm9yMTA1IikpLm9rPShtMDUwLmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfQ0VJTElORykpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgiZm9yMTA2IikpLm9rPShtMTUwLmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfQ0VJTElORykpLmVxdWFscygiLTAuMSIpOworICAobmV3IFRlc3QoImZvcjEwNyIpKS5vaz0oZDA1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0NFSUxJTkcpKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoImZvcjEwOCIpKS5vaz0oZDE1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0NFSUxJTkcpKS5lcXVhbHMoIjAuMiIpOworICAKKyAgKG5ldyBUZXN0KCJmb3IxMDkiKSkub2s9KG0wNTAuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUikpLmVxdWFscygiLTAuMSIpOworICAobmV3IFRlc3QoImZvcjExMCIpKS5vaz0obTE1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0ZMT09SKSkuZXF1YWxzKCItMC4yIik7CisgIChuZXcgVGVzdCgiZm9yMTExIikpLm9rPShkMDUwLmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfRkxPT1IpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoImZvcjExMiIpKS5vaz0oZDE1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0ZMT09SKSkuZXF1YWxzKCIwLjEiKTsKKyAgCisgIChuZXcgVGVzdCgiZm9yMTEzIikpLm9rPShtMDUwLmZvcm1hdCgtMSwxLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVVApKS5lcXVhbHMoIi0wLjEiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMTQiKSkub2s9KG0xNTAuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VUCkpLmVxdWFscygiLTAuMiIpOworICAobmV3IFRlc3QoImZvcjExNSIpKS5vaz0oZDA1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VQKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMTYiKSkub2s9KGQxNTAuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VUCkpLmVxdWFscygiMC4yIik7CisgIAorICAobmV3IFRlc3QoImZvcjExNyIpKS5vaz0obTA1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0RPV04pKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoImZvcjExOCIpKS5vaz0obTE1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0RPV04pKS5lcXVhbHMoIi0wLjEiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMTkiKSkub2s9KGQwNTAuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9ET1dOKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMjAiKSkub2s9KGQxNTAuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9ET1dOKSkuZXF1YWxzKCIwLjEiKTsKKyAgCisgIGQwMDA9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDAiKTsKKyAgZDUwMD1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjUwMCIpOworICAobmV3IFRlc3QoImZvcjEyMSIpKS5vaz0oZDAwMC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VOTkVDRVNTQVJZKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMjIiKSkub2s9KGQwMDAuZm9ybWF0KC0xLDIsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWSkpLmVxdWFscygiMC4wMCIpOworICAobmV3IFRlc3QoImZvcjEyMyIpKS5vaz0oZDAwMC5mb3JtYXQoLTEsMywtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VOTkVDRVNTQVJZKSkuZXF1YWxzKCIwLjAwMCIpOworICB0cnl7IC8vIHRoaXMgc2hvdWxkIHRyYXAuLgorICAgZDA1MC5mb3JtYXQoLTEsMSwtMSwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VOTkVDRVNTQVJZKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQ5NSl7YWU9JDk1OworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIlJvdW5kaW5nIG5lY2Vzc2FyeSIpOworICB9CisgIChuZXcgVGVzdCgiZm9yMTI0IikpLm9rPWZsYWc7CisgIChuZXcgVGVzdCgiZm9yMTI1IikpLm9rPShkMDUwLmZvcm1hdCgtMSwyLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVU5ORUNFU1NBUlkpKS5lcXVhbHMoIjAuMDUiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMjYiKSkub2s9KGQwNTAuZm9ybWF0KC0xLDMsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWSkpLmVxdWFscygiMC4wNTAiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMjciKSkub2s9KGQ1MDAuZm9ybWF0KC0xLDEsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWSkpLmVxdWFscygiMC41Iik7CisgIChuZXcgVGVzdCgiZm9yMTI4IikpLm9rPShkNTAwLmZvcm1hdCgtMSwyLC0xLC0xLC0xLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVU5ORUNFU1NBUlkpKS5lcXVhbHMoIjAuNTAiKTsKKyAgKG5ldyBUZXN0KCJmb3IxMjkiKSkub2s9KGQ1MDAuZm9ybWF0KC0xLDMsLTEsLTEsLTEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWSkpLmVxdWFscygiMC41MDAiKTsKKyAgCisgIC8vIGJhZCBuZWdzIC0tCisgIHRyeXsKKyAgIGQwNTAuZm9ybWF0KC0yLC0xLC0xLC0xLC0xLC0xKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gJDk2KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfQorICAobmV3IFRlc3QoImZvcjEzMSIpKS5vaz1mbGFnOworICB0cnl7CisgICBkMDUwLmZvcm1hdCgtMSwtMiwtMSwtMSwtMSwtMSk7CisgICBmbGFnPWZhbHNlOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICQ5Nyl7CisgICBmbGFnPXRydWU7CisgIH0KKyAgKG5ldyBUZXN0KCJmb3IxMzIiKSkub2s9ZmxhZzsKKyAgdHJ5eworICAgZDA1MC5mb3JtYXQoLTEsLTEsLTIsLTEsLTEsLTEpOworICAgZmxhZz1mYWxzZTsKKyAgfQorICBjYXRjaCAoamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAkOTgpeworICAgZmxhZz10cnVlOworICB9CisgIChuZXcgVGVzdCgiZm9yMTMzIikpLm9rPWZsYWc7CisgIHRyeXsKKyAgIGQwNTAuZm9ybWF0KC0xLC0xLC0xLC0yLC0xLC0xKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gJDk5KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfQorICAobmV3IFRlc3QoImZvcjEzNCIpKS5vaz1mbGFnOworICB0cnl7CisgICBkMDUwLmZvcm1hdCgtMSwtMSwtMSwtMSwtMiwtMSk7CisgICBmbGFnPWZhbHNlOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICQxMDApeworICAgZmxhZz10cnVlOworICB9CisgIChuZXcgVGVzdCgiZm9yMTM1IikpLm9rPWZsYWc7CisgIHRyeXsKKyAgIGQwNTAuZm9ybWF0KC0xLC0xLC0xLC0xLC0xLC0yKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gJDEwMSl7CisgICBmbGFnPXRydWU7CisgIH0KKyAgKG5ldyBUZXN0KCJmb3IxMzYiKSkub2s9ZmxhZzsKKyAgCisgIHN1bW1hcnkoImZvcm1hdCIpOworICByZXR1cm47fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjaGFzaENvZGV9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnaGFzaGNvZGUoKXsKKyAgamF2YS5sYW5nLlN0cmluZyBoczsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGQ7CisgIGhzPSIyNzgyNzgxNyI7CisgIGQ9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChocyk7CisgIChuZXcgVGVzdCgiaGFzMDAxIikpLm9rPShkLmhhc2hDb2RlKCkpPT0oaHMuaGFzaENvZGUoKSk7CisgIGhzPSIxLjI2NUUrMjAwIjsKKyAgZD1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGhzKTsKKyAgKG5ldyBUZXN0KCJoYXMwMDIiKSkub2s9KGQuaGFzaENvZGUoKSk9PShocy5oYXNoQ29kZSgpKTsKKyAgaHM9IjEyNi41RSsyMDAiOworICBkPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaHMpOworICAobmV3IFRlc3QoImhhczAwMyIpKS5vaz0oZC5oYXNoQ29kZSgpKSE9KGhzLmhhc2hDb2RlKCkpOworICBzdW1tYXJ5KCJoYXNoQ29kZSIpOworICByZXR1cm47fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjaW50VmFsdWV9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnaW50dmFsdWUoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBqYXZhLmxhbmcuU3RyaW5nIHY9bnVsbDsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgamF2YS5sYW5nLlN0cmluZyBiYWRzdHJpbmdzW107CisgIGludCBpPTA7CisgIGphdmEubGFuZy5TdHJpbmcgbm9ybT1udWxsOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZGltYXg7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBudW09bnVsbDsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGR2PW51bGw7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBkaW1pbjsKKyAgCisgIAorICAvLyBpbnRWYWx1ZSAtLQorICAKKyAgKG5ldyBUZXN0KCJpbnYwMDEiKSkub2s9aW1pbj09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGltaW4pKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYwMDIiKSkub2s9KCg5OSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5IikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjAwMyIpKS5vaz0oKDEpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxIikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjAwNCIpKS5vaz0oKDApKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjAwNSIpKS5vaz0oKC0xKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkuaW50VmFsdWUoKSk7CisgIChuZXcgVGVzdCgiaW52MDA2IikpLm9rPSgoLTk5KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTk5IikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjAwNyIpKS5vaz1pbWF4PT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaW1heCkpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjAwOCIpKS5vaz0oKDUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjAiKSkuaW50VmFsdWUoKSk7CisgIChuZXcgVGVzdCgiaW52MDA5IikpLm9rPSgoNSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUuMyIpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYwMTAiKSkub2s9KCg1KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS41IikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjAxMSIpKS5vaz0oKDUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjciKSkuaW50VmFsdWUoKSk7CisgIChuZXcgVGVzdCgiaW52MDEyIikpLm9rPSgoNSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjUuOSIpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYwMTMiKSkub2s9KCgtNSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01LjAiKSkuaW50VmFsdWUoKSk7CisgIChuZXcgVGVzdCgiaW52MDE0IikpLm9rPSgoLTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNS4zIikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjAxNSIpKS5vaz0oKC01KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTUuNSIpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYwMTYiKSkub2s9KCgtNSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01LjciKSkuaW50VmFsdWUoKSk7CisgIChuZXcgVGVzdCgiaW52MDE3IikpLm9rPSgoLTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNS45IikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjAxOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjg4ODg4ODg4ODg4IikpLmludFZhbHVlKCkpPT0oLTEzMDU0MjQzMjgpOyAvLyB1Z2gKKyAgKG5ldyBUZXN0KCJpbnYwMTkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItODg4ODg4ODg4ODgiKSkuaW50VmFsdWUoKSk9PTEzMDU0MjQzMjg7IC8vIHVnaAorICAobmV3IFRlc3QoImludjAyMCIpKS5vaz0oKGltaW4pKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCgoKGxvbmcpaW1heCkpKzEpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYwMjEiKSkub2s9KChpbWF4KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgoKChsb25nKWltaW4pKS0xKSkuaW50VmFsdWUoKSk7CisgIAorICAvLyBpbnRWYWx1ZUV4YWN0IC0tCisgIAorICAobmV3IFRlc3QoImludjEwMSIpKS5vaz1pbWluPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaW1pbikpLmludFZhbHVlRXhhY3QoKSk7CisgIChuZXcgVGVzdCgiaW52MTAyIikpLm9rPSgoOTkpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OSIpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYxMDMiKSkub2s9KCgxKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYxMDQiKSkub2s9KCgwKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYxMDUiKSkub2s9KCgtMSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjEwNiIpKS5vaz0oKC05OSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi05OSIpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYxMDciKSkub2s9aW1heD09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGltYXgpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYxMDgiKSkub2s9KCg1KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiNS4wIikpLmludFZhbHVlKCkpOworICAobmV3IFRlc3QoImludjEwOSIpKS5vaz0oKC01KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTUuMCIpKS5pbnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJpbnYxMTAiKSkub2s9aW1heD09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGltYXgpKS5pbnRWYWx1ZUV4YWN0KCkpOworICAKKyAgdHJ5eworICAgdj0iLTg4NTg4Njg4ODg4IjsKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS5pbnRWYWx1ZUV4YWN0KCk7CisgICBmbGFnPWZhbHNlOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTAyKXthZT0kMTAyOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkNvbnZlcnNpb24gb3ZlcmZsb3c6IisiICIrdik7CisgIH0KKyAgKG5ldyBUZXN0KCJpbnYyMDAiKSkub2s9ZmxhZzsKKyAgCisgIC8vIHRoaXMgb25lIGNvdWxkIHJhaXNlIGVpdGhlciBvdmVyZmxvdyBvciBiYWQgZGVjaW1hbCBwYXJ0CisgIHRyeXsKKyAgIHY9Ijg4MDg4ODE4ODg4LjAwMDAxIjsKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS5pbnRWYWx1ZUV4YWN0KCk7CisgICBmbGFnPWZhbHNlOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTAzKXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfQorICAobmV3IFRlc3QoImludjIwMSIpKS5vaz1mbGFnOworICAKKyAgLy8gMTk5OS4xMC4yODogdGhlIHRlc3RjYXNlcyBtYXJrZWQgJyonIGZhaWxlZAorICBiYWRzdHJpbmdzPW5ldyBqYXZhLmxhbmcuU3RyaW5nW117IjEyMzQ1Njc4OTAxIiwobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChpbWF4KSkuYWRkKG9uZSkudG9TdHJpbmcoKSwobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChpbWluKSkuc3VidHJhY3Qob25lKS50b1N0cmluZygpLCIzNzMxMzY3MjkzIiwiNDczMTM2NzI5MyIsIjU3MzEzNjcyOTMiLCI2NzMxMzY3MjkzIiwiNzczMTM2NzI5MyIsIjg3MzEzNjcyOTMiLCI5NzMxMzY3MjkzIiwiLTM3MzEzNjcyOTMiLCItNDczMTM2NzI5MyIsIi01NzMxMzY3MjkzIiwiLTY3MzEzNjcyOTMiLCItNzczMTM2NzI5MyIsIi04NzMxMzY3MjkzIiwiLTk3MzEzNjcyOTMiLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGltaW4pKS5tdWx0aXBseSh0d28pLnRvU3RyaW5nKCksKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaW1heCkpLm11bHRpcGx5KHR3bykudG9TdHJpbmcoKSwobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChpbWluKSkubXVsdGlwbHkodGVuKS50b1N0cmluZygpLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGltYXgpKS5tdWx0aXBseSh0ZW4pLnRvU3RyaW5nKCksIjQ3MzEzNjcyOTMiLCI0ODMxMzY3MjkzIiwiNDkzMTM2NzI5MyIsIjUwMzEzNjcyOTMiLCI1MTMxMzY3MjkzIiwiNTIzMTM2NzI5MyIsIjUzMzEzNjcyOTMiLCI1NDMxMzY3MjkzIiwiNTUzMTM2NzI5MyIsIjU2MzEzNjcyOTMiLCI1NzMxMzY3MjkzIiwiNTgzMTM2NzI5MyIsIjU5MzEzNjcyOTMiLCI2MDMxMzY3MjkzIiwiNjEzMTM2NzI5MyIsIjYyMzEzNjcyOTMiLCI2MzMxMzY3MjkzIiwiNjQzMTM2NzI5MyIsIjY1MzEzNjcyOTMiLCI2NjMxMzY3MjkzIiwiNjczMTM2NzI5MyIsIjIyMDAwMDAwMDAiLCIyMzAwMDAwMDAwIiwiMjQwMDAwMDAwMCIsIjI1MDAwMDAwMDAiLCIyNjAwMDAwMDAwIiwiMjcwMDAwMDAwMCIsIjI4MDAwMDAwMDAiLCIyOTAwMDAwMDAwIiwiLTIyMDAwMDAwMDAiLCItMjMwMDAwMDAwMCIsIi0yNDAwMDAwMDAwIiwiLTI1MDAwMDAwMDAiLCItMjYwMDAwMDAwMCIsIi0yNzAwMDAwMDAwIiwiLTI4MDAwMDAwMDAiLCItMjkwMDAwMDAwMCIsIjI1RSs4IiwiLTI1RSs4IiwiLTEyMzQ1Njc4OTAxIn07IC8vIDIyMAorICAvLyAyMjEKKyAgLy8gMjIyCisgIC8vIDIyMworICAvLyAyMjQKKyAgLy8gMjI1ICAqCisgIC8vIDIyNgorICAvLyAyMjcKKyAgLy8gMjI4CisgIC8vIDIyOSAgKgorICAvLyAyMzAKKyAgLy8gMjMxCisgIC8vIDIzMiAgKgorICAvLyAyMzMKKyAgLy8gMjM0CisgIC8vIDIzNQorICAvLyAyMzYgICoKKyAgLy8gMjM3CisgIC8vIDIzOAorICAvLyAyMzkKKyAgLy8gMjQwCisgIC8vIDI0MQorICAvLyAyNDIgICoKKyAgLy8gMjQzICAqCisgIC8vIDI0NCAgKgorICAvLyAyNDUgICoKKyAgLy8gMjQ2ICAqCisgIC8vIDI0NyAgKgorICAvLyAyNDggICoKKyAgLy8gMjQ5ICAqCisgIC8vIDI1MCAgKgorICAvLyAyNTEgICoKKyAgLy8gMjUyICAqCisgIC8vIDI1MyAgKgorICAvLyAyNTQgICoKKyAgLy8gMjU1ICAqCisgIC8vIDI1NiAgKgorICAvLyAyNTcgICoKKyAgLy8gMjU4ICAqCisgIC8vIDI1OQorICAvLyAyNjAKKyAgLy8gMjYxCisgIC8vIDI2MgorICAvLyAyNjMKKyAgLy8gMjY0CisgIC8vIDI2NQorICAvLyAyNjYKKyAgLy8gMjY3CisgIC8vIDI2OAorICAvLyAyNjkKKyAgLy8gMjcwCisgIC8vIDI3MQorICAvLyAyNzIKKyAgLy8gMjczCisgIC8vIDI3NAorICAvLyAyNzUKKyAgLy8gMjc2CisgIC8vIDI3NworICAvLyAyNzgKKyAgLy8gMjc5CisgIC8vIDI4MAorICB7aW50ICQxMDQ9YmFkc3RyaW5ncy5sZW5ndGg7aT0wO2k6Zm9yKDskMTA0PjA7JDEwNC0tLGkrKyl7CisgICB0cnl7CisgICAgdj1iYWRzdHJpbmdzW2ldOworICAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS5pbnRWYWx1ZUV4YWN0KCk7CisgICAgZmxhZz1mYWxzZTsKKyAgIH0KKyAgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTA1KXthZT0kMTA1OworICAgIG5vcm09KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwodikpLnRvU3RyaW5nKCk7CisgICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkNvbnZlcnNpb24gb3ZlcmZsb3c6IisiICIrbm9ybSk7CisgICB9CisgICAobmV3IFRlc3QoImludiIrKDIyMCtpKSkpLm9rPWZsYWc7CisgICB9CisgIH0vKmkqLworICAKKyAgLy8gbm93IHNsaXAgaW4gc29tZSBzaW5nbGUgYml0cy4uLgorICBkaW1heD1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGltYXgpOworICB7aT0wO2k6Zm9yKDtpPD00OTtpKyspeworICAgdHJ5eworICAgIG51bT10d28ucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaSksbWM1MCk7CisgICAgZHY9ZGltYXguYWRkKG51bSxtYzUwKTsKKyAgICBkdi5pbnRWYWx1ZUV4YWN0KCk7CisgICAgZmxhZz1mYWxzZTsKKyAgIH0KKyAgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTA2KXthZT0kMTA2OworICAgIG5vcm09ZHYudG9TdHJpbmcoKTsKKyAgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiQ29udmVyc2lvbiBvdmVyZmxvdzoiKyIgIitub3JtKTsKKyAgIH0KKyAgIChuZXcgVGVzdCgiaW52IisoMzAwK2kpKSkub2s9ZmxhZzsKKyAgIH0KKyAgfS8qaSovCisgIGRpbWluPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaW1pbik7CisgIHtpPTUwO2k6Zm9yKDtpPD05OTtpKyspeworICAgdHJ5eworICAgIG51bT10d28ucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaSksbWM1MCk7CisgICAgZHY9ZGltaW4uc3VidHJhY3QobnVtLG1jNTApOworICAgIGR2LmludFZhbHVlRXhhY3QoKTsKKyAgICBmbGFnPWZhbHNlOworICAgfQorICAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQxMDcpe2FlPSQxMDc7CisgICAgbm9ybT1kdi50b1N0cmluZygpOworICAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK25vcm0pOworICAgfQorICAgKG5ldyBUZXN0KCJpbnYiKygzMDAraSkpKS5vaz1mbGFnOworICAgfQorICB9LyppKi8KKyAgCisgIC8vIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGFsbCByYWlzZSBiYWQtZGVjaW1hbC1wYXJ0IGV4Y2VwdGlvbnMKKyAgYmFkc3RyaW5ncz1uZXcgamF2YS5sYW5nLlN0cmluZ1tdeyIwLjA5IiwiMC45IiwiMC4wMSIsIjAuMSIsIi0wLjAxIiwiLTAuMSIsIjEuMDEiLCItMS4wMSIsIi0xLjEiLCItMTExLjExMSIsIisxMTEuMTExIiwiMS4wOSIsIjEuMDUiLCIxLjA0IiwiMS45OSIsIjEuOSIsIjEuNSIsIjEuNCIsIi0xLjA5IiwiLTEuMDUiLCItMS4wNCIsIi0xLjk5IiwiLTEuOSIsIi0xLjUiLCItMS40IiwiMUUtMTAwMCIsIi0xRS0xMDAwIiwiMTFFLTEiLCIxLjUifTsgLy8gNDAwLTQwMworICAvLyA0MDQtNDA3CisgIC8vIDQwOC00MTEKKyAgLy8gNDEyLTQxNgorICAvLyA0MTctNDIwCisgIC8vIDQyMS00MjQKKyAgLy8gNDI1LTQyOAorICAKKyAge2ludCAkMTA4PWJhZHN0cmluZ3MubGVuZ3RoO2k9MDtpOmZvcig7JDEwOD4wOyQxMDgtLSxpKyspeworICAgdHJ5eworICAgIHY9YmFkc3RyaW5nc1tpXTsKKyAgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2KSkuaW50VmFsdWVFeGFjdCgpOworICAgIGZsYWc9ZmFsc2U7CisgICB9CisgICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDEwOSl7YWU9JDEwOTsKKyAgICBub3JtPShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS50b1N0cmluZygpOworICAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJEZWNpbWFsIHBhcnQgbm9uLXplcm86IisiICIrbm9ybSk7CisgICB9CisgICAobmV3IFRlc3QoImludiIrKDQwMCtpKSkpLm9rPWZsYWc7CisgICB9CisgIH0vKmkqLworICAKKyAgc3VtbWFyeSgiaW50VmFsdWUrIik7CisgIHJldHVybjt9CisKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCNsb25nVmFsdWV9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnbG9uZ3ZhbHVlKCl7CisgIGJvb2xlYW4gZmxhZz1mYWxzZTsKKyAgamF2YS5sYW5nLlN0cmluZyB2PW51bGw7CisgIGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uIGFlPW51bGw7CisgIGphdmEubGFuZy5TdHJpbmcgYmFkc3RyaW5nc1tdOworICBpbnQgaT0wOworICBqYXZhLmxhbmcuU3RyaW5nIG5vcm09bnVsbDsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGRsbWF4OworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbnVtPW51bGw7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBkdj1udWxsOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZGxtaW47CisgIAorICAKKyAgLy8gbG9uZ1ZhbHVlIC0tCisgIAorICAobmV3IFRlc3QoImxvdjAwMSIpKS5vaz1sbWluPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG1pbikpLmxvbmdWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJsb3YwMDIiKSkub2s9KCgobG9uZyk5OSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5IikpLmxvbmdWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJsb3YwMDMiKSkub2s9KCgobG9uZykxKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5sb25nVmFsdWUoKSk7CisgIChuZXcgVGVzdCgibG92MDA0IikpLm9rPSgoKGxvbmcpMCkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAwNSIpKS5vaz0oKChsb25nKS0xKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAwNiIpKS5vaz0oKChsb25nKS05OSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi05OSIpKS5sb25nVmFsdWUoKSk7CisgIChuZXcgVGVzdCgibG92MDA3IikpLm9rPWxtYXg9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChsbWF4KSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAwOCIpKS5vaz0oKChsb25nKTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjAiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAwOSIpKS5vaz0oKChsb25nKTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjMiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAxMCIpKS5vaz0oKChsb25nKTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjUiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAxMSIpKS5vaz0oKChsb25nKTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjciKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAxMiIpKS5vaz0oKChsb25nKTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjkiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAxMyIpKS5vaz0oKChsb25nKS01KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTUuMCIpKS5sb25nVmFsdWUoKSk7CisgIChuZXcgVGVzdCgibG92MDE0IikpLm9rPSgoKGxvbmcpLTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNS4zIikpLmxvbmdWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJsb3YwMTUiKSkub2s9KCgobG9uZyktNSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi01LjUiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjAxNiIpKS5vaz0oKChsb25nKS01KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTUuNyIpKS5sb25nVmFsdWUoKSk7CisgIChuZXcgVGVzdCgibG92MDE3IikpLm9rPSgoKGxvbmcpLTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItNS45IikpLmxvbmdWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJsb3YwMTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI4ODg4ODg4ODg4OTk5OTk5OTk5OTgiKSkubG9uZ1ZhbHVlKCkpPT0zNDQ1MTczMzYxOTQxNTIyNDMwTDsgLy8gdWdoCisgIChuZXcgVGVzdCgibG92MDE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTg4ODg4ODg4ODg5OTk5OTk5OTk5OCIpKS5sb25nVmFsdWUoKSk9PSgtMzQ0NTE3MzM2MTk0MTUyMjQzMEwpOyAvLyB1Z2gKKyAgCisgIC8vIGxvbmdWYWx1ZUV4YWN0IC0tCisgIAorICAobmV3IFRlc3QoImxvdjEwMSIpKS5vaz1sbWluPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG1pbikpLmxvbmdWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJsb3YxMDIiKSkub2s9KCgobG9uZyk5OSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5IikpLmxvbmdWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJsb3YxMDMiKSkub2s9KCgobG9uZykxKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5sb25nVmFsdWUoKSk7CisgIChuZXcgVGVzdCgibG92MTA0IikpLm9rPSgoKGxvbmcpMCkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjEwNSIpKS5vaz0oKChsb25nKS0xKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjEwNiIpKS5vaz0oKChsb25nKS05OSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi05OSIpKS5sb25nVmFsdWUoKSk7CisgIChuZXcgVGVzdCgibG92MTA3IikpLm9rPWxtYXg9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChsbWF4KSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjEwOCIpKS5vaz0oKChsb25nKTUpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI1LjAiKSkubG9uZ1ZhbHVlKCkpOworICAobmV3IFRlc3QoImxvdjEwOSIpKS5vaz0oKChsb25nKS01KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTUuMCIpKS5sb25nVmFsdWUoKSk7CisgIAorICB0cnl7CisgICB2PSItODg4ODg4ODg4ODk5OTk5OTk5OTk4IjsKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS5sb25nVmFsdWVFeGFjdCgpOworICAgZmxhZz1mYWxzZTsKKyAgfQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDExMCl7YWU9JDExMDsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK3YpOworICB9CisgIChuZXcgVGVzdCgibG92MjAwIikpLm9rPWZsYWc7CisgIHRyeXsKKyAgIHY9Ijg4ODg4ODg3NDg3NDg3NDc5NDg4ODg4IjsKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS5sb25nVmFsdWVFeGFjdCgpOworICAgZmxhZz1mYWxzZTsKKyAgfQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDExMSl7YWU9JDExMTsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK3YpOworICB9CisgIChuZXcgVGVzdCgibG92MjAxIikpLm9rPWZsYWc7CisgIHRyeXsKKyAgIHY9IjEuNSI7CisgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2KSkubG9uZ1ZhbHVlRXhhY3QoKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQxMTIpe2FlPSQxMTI7CisgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRGVjaW1hbCBwYXJ0IG5vbi16ZXJvOiIrIiAiK3YpOworICB9CisgIChuZXcgVGVzdCgibG92MjAyIikpLm9rPWZsYWc7CisgIAorICBiYWRzdHJpbmdzPW5ldyBqYXZhLmxhbmcuU3RyaW5nW117IjEyMzQ1Njc4OTAxMTA5ODc2NTQzMjEiLCItMTIzNDU2Nzg5MDExMDk4NzY1NDMyMSIsKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG1heCkpLmFkZChvbmUpLnRvU3RyaW5nKCksKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG1pbikpLnN1YnRyYWN0KG9uZSkudG9TdHJpbmcoKSwobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChsbWluKSkubXVsdGlwbHkodHdvKS50b1N0cmluZygpLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGxtYXgpKS5tdWx0aXBseSh0d28pLnRvU3RyaW5nKCksKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG1pbikpLm11bHRpcGx5KHRlbikudG9TdHJpbmcoKSwobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChsbWF4KSkubXVsdGlwbHkodGVuKS50b1N0cmluZygpLCI5MjIzMzcyMDM2ODU0Nzc1ODE4IiwiOTMyMzM3MjAzNjg1NDc3NTgxOCIsIjk0MjMzNzIwMzY4NTQ3NzU4MTgiLCI5NTIzMzcyMDM2ODU0Nzc1ODE4IiwiOTYyMzM3MjAzNjg1NDc3NTgxOCIsIjk3MjMzNzIwMzY4NTQ3NzU4MTgiLCI5ODIzMzcyMDM2ODU0Nzc1ODE4IiwiOTkyMzM3MjAzNjg1NDc3NTgxOCIsIi05MjIzMzcyMDM2ODU0Nzc1ODE4IiwiLTkzMjMzNzIwMzY4NTQ3NzU4MTgiLCItOTQyMzM3MjAzNjg1NDc3NTgxOCIsIi05NTIzMzcyMDM2ODU0Nzc1ODE4IiwiLTk2MjMzNzIwMzY4NTQ3NzU4MTgiLCItOTcyMzM3MjAzNjg1NDc3NTgxOCIsIi05ODIzMzcyMDM2ODU0Nzc1ODE4IiwiLTk5MjMzNzIwMzY4NTQ3NzU4MTgiLCIxMjM0NTY3ODkwMTIzNDU2Nzg5MCJ9OyAvLyAyMjAKKyAgLy8gMjIxCisgIC8vIDIyMgorICAvLyAyMjMKKyAgLy8gMjI0CisgIC8vIDIyNQorICAvLyAyMjYKKyAgLy8gMjI3CisgIC8vIDIyOAorICAvLyAyMjkKKyAgLy8gMjMwCisgIC8vIDIzMQorICAvLyAyMzIKKyAgLy8gMjMzCisgIC8vIDIzNAorICAvLyAyMzUKKyAgLy8gMjM2CisgIC8vIDIzNworICAvLyAyMzgKKyAgLy8gMjM5CisgIC8vIDI0MAorICAvLyAyNDEKKyAgLy8gMjQyCisgIC8vIDI0MworICAvLyAyNDQKKyAge2ludCAkMTEzPWJhZHN0cmluZ3MubGVuZ3RoO2k9MDtpOmZvcig7JDExMz4wOyQxMTMtLSxpKyspeworICAgdHJ5eworICAgIHY9YmFkc3RyaW5nc1tpXTsKKyAgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2KSkubG9uZ1ZhbHVlRXhhY3QoKTsKKyAgICBmbGFnPWZhbHNlOworICAgfQorICAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQxMTQpe2FlPSQxMTQ7CisgICAgbm9ybT0obmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2KSkudG9TdHJpbmcoKTsKKyAgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiQ29udmVyc2lvbiBvdmVyZmxvdzoiKyIgIitub3JtKTsKKyAgIH0KKyAgIChuZXcgVGVzdCgibG92IisoMjIwK2kpKSkub2s9ZmxhZzsKKyAgIH0KKyAgfS8qaSovCisgIAorICAvLyBub3cgc2xpcCBpbiBzb21lIHNpbmdsZSBiaXRzLi4uCisgIGRsbWF4PW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG1heCk7CisgIHtpPTA7aTpmb3IoO2k8PTk5O2krKyl7CisgICB0cnl7CisgICAgbnVtPXR3by5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChpKSxtYzUwKTsKKyAgICBkdj1kbG1heC5hZGQobnVtLG1jNTApOworICAgIGR2LmxvbmdWYWx1ZUV4YWN0KCk7CisgICAgZmxhZz1mYWxzZTsKKyAgIH0KKyAgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTE1KXthZT0kMTE1OworICAgIG5vcm09ZHYudG9TdHJpbmcoKTsKKyAgICBmbGFnPShhZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiQ29udmVyc2lvbiBvdmVyZmxvdzoiKyIgIitub3JtKTsKKyAgIH0KKyAgIChuZXcgVGVzdCgibG92IisoMzAwK2kpKSkub2s9ZmxhZzsKKyAgIH0KKyAgfS8qaSovCisgIGRsbWluPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwobG1pbik7CisgIHtpPTA7aTpmb3IoO2k8PTk5O2krKyl7CisgICB0cnl7CisgICAgbnVtPXR3by5wb3cobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChpKSxtYzUwKTsKKyAgICBkdj1kbG1pbi5zdWJ0cmFjdChudW0sbWM1MCk7CisgICAgZHYubG9uZ1ZhbHVlRXhhY3QoKTsKKyAgICBmbGFnPWZhbHNlOworICAgfQorICAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQxMTYpe2FlPSQxMTY7CisgICAgbm9ybT1kdi50b1N0cmluZygpOworICAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK25vcm0pOworICAgfQorICAgKG5ldyBUZXN0KCJsb3YiKyg0MDAraSkpKS5vaz1mbGFnOworICAgfQorICB9LyppKi8KKyAgCisgIHN1bW1hcnkoImxvbmdWYWx1ZSsiKTsKKyAgcmV0dXJuO30KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBCaWdEZWNpbWFsI21vdmVQb2ludExlZnR9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnbW92ZXBvaW50bGVmdCgpeworICAobmV3IFRlc3QoIm1wbDAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLm1vdmVQb2ludExlZnQoLTEwKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm1wbDAwMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLm1vdmVQb2ludExlZnQoLTUpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEwMDAwMCIpOworICAobmV3IFRlc3QoIm1wbDAwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLm1vdmVQb2ludExlZnQoLTEpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEwIik7CisgIChuZXcgVGVzdCgibXBsMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkubW92ZVBvaW50TGVmdCgwKS50b1N0cmluZygpKS5lcXVhbHMoIi0xIik7CisgIChuZXcgVGVzdCgibXBsMDA1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkubW92ZVBvaW50TGVmdCgrMSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC4xIik7CisgIChuZXcgVGVzdCgibXBsMDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkubW92ZVBvaW50TGVmdCgrNSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC4wMDAwMSIpOworICAobmV3IFRlc3QoIm1wbDAwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLm1vdmVQb2ludExlZnQoKzEwKS50b1N0cmluZygpKS5lcXVhbHMoIi0wLjAwMDAwMDAwMDEiKTsKKyAgCisgIChuZXcgVGVzdCgibXBsMDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5tb3ZlUG9pbnRMZWZ0KC0xMCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgibXBsMDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5tb3ZlUG9pbnRMZWZ0KC01KS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJtcGwwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLm1vdmVQb2ludExlZnQoLTEpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoIm1wbDAxMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkubW92ZVBvaW50TGVmdCgwKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJtcGwwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLm1vdmVQb2ludExlZnQoKzEpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgibXBsMDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5tb3ZlUG9pbnRMZWZ0KCs1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtcGwwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLm1vdmVQb2ludExlZnQoKzEwKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwMDAwMCIpOworICAKKyAgKG5ldyBUZXN0KCJtcGwwMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5tb3ZlUG9pbnRMZWZ0KC0xMCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAwMDAwMDAwMCIpOworICAobmV3IFRlc3QoIm1wbDAyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxIikpLm1vdmVQb2ludExlZnQoLTUpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMDAwIik7CisgIChuZXcgVGVzdCgibXBsMDIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzEiKSkubW92ZVBvaW50TGVmdCgtMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMCIpOworICAobmV3IFRlc3QoIm1wbDAyMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxIikpLm1vdmVQb2ludExlZnQoMCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgibXBsMDI0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzEiKSkubW92ZVBvaW50TGVmdCgrMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEiKTsKKyAgKG5ldyBUZXN0KCJtcGwwMjUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5tb3ZlUG9pbnRMZWZ0KCs1KS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDEiKTsKKyAgKG5ldyBUZXN0KCJtcGwwMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5tb3ZlUG9pbnRMZWZ0KCsxMCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDAwMDAwMDEiKTsKKyAgCisgIChuZXcgVGVzdCgibXBsMDMwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41RSsxIikpLm1vdmVQb2ludExlZnQoLTEwKS50b1N0cmluZygpKS5lcXVhbHMoIjUwMDAwMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXBsMDMxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41RSsxIikpLm1vdmVQb2ludExlZnQoLTUpLnRvU3RyaW5nKCkpLmVxdWFscygiNTAwMDAwIik7CisgIChuZXcgVGVzdCgibXBsMDMyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41RSsxIikpLm1vdmVQb2ludExlZnQoLTEpLnRvU3RyaW5nKCkpLmVxdWFscygiNTAiKTsKKyAgKG5ldyBUZXN0KCJtcGwwMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjVFKzEiKSkubW92ZVBvaW50TGVmdCgwKS50b1N0cmluZygpKS5lcXVhbHMoIjUiKTsKKyAgKG5ldyBUZXN0KCJtcGwwMzQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjVFKzEiKSkubW92ZVBvaW50TGVmdCgrMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjUiKTsKKyAgKG5ldyBUZXN0KCJtcGwwMzUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjVFKzEiKSkubW92ZVBvaW50TGVmdCgrNSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDA1Iik7CisgIChuZXcgVGVzdCgibXBsMDM2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41RSsxIikpLm1vdmVQb2ludExlZnQoKzEwKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwMDAwNSIpOworICAKKyAgc3VtbWFyeSgibW92ZVBvaW50TGVmdCIpOworICByZXR1cm47fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjbW92ZVBvaW50UmlnaHR9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnbW92ZXBvaW50cmlnaHQoKXsKKyAgKG5ldyBUZXN0KCJtcHIwMDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpKS5tb3ZlUG9pbnRSaWdodCgrMTApLnRvU3RyaW5nKCkpLmVxdWFscygiLTEwMDAwMDAwMDAwIik7CisgIChuZXcgVGVzdCgibXByMDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkubW92ZVBvaW50UmlnaHQoKzUpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEwMDAwMCIpOworICAobmV3IFRlc3QoIm1wcjAwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLm1vdmVQb2ludFJpZ2h0KCsxKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMCIpOworICAobmV3IFRlc3QoIm1wcjAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLm1vdmVQb2ludFJpZ2h0KDApLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJtcHIwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpKS5tb3ZlUG9pbnRSaWdodCgtMSkudG9TdHJpbmcoKSkuZXF1YWxzKCItMC4xIik7CisgIChuZXcgVGVzdCgibXByMDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkubW92ZVBvaW50UmlnaHQoLTUpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMDAwMDEiKTsKKyAgKG5ldyBUZXN0KCJtcHIwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpKS5tb3ZlUG9pbnRSaWdodCgtMTApLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMDAwMDAwMDAwMSIpOworICAKKyAgKG5ldyBUZXN0KCJtcHIwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLm1vdmVQb2ludFJpZ2h0KCsxMCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgibXByMDExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5tb3ZlUG9pbnRSaWdodCgrNSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgibXByMDEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5tb3ZlUG9pbnRSaWdodCgrMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgibXByMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5tb3ZlUG9pbnRSaWdodCgwKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJtcHIwMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLm1vdmVQb2ludFJpZ2h0KC0xKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoIm1wcjAxNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkubW92ZVBvaW50UmlnaHQoLTUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMCIpOworICAobmV3IFRlc3QoIm1wcjAxNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkubW92ZVBvaW50UmlnaHQoLTEwKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwMDAwMCIpOworICAKKyAgKG5ldyBUZXN0KCJtcHIwMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5tb3ZlUG9pbnRSaWdodCgrMTApLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtcHIwMjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5tb3ZlUG9pbnRSaWdodCgrNSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtcHIwMjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5tb3ZlUG9pbnRSaWdodCgrMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMCIpOworICAobmV3IFRlc3QoIm1wcjAyMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxIikpLm1vdmVQb2ludFJpZ2h0KDApLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoIm1wcjAyNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxIikpLm1vdmVQb2ludFJpZ2h0KC0xKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoIm1wcjAyNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxIikpLm1vdmVQb2ludFJpZ2h0KC01KS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDEiKTsKKyAgKG5ldyBUZXN0KCJtcHIwMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5tb3ZlUG9pbnRSaWdodCgtMTApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMDAwMDAxIik7CisgIAorICAobmV3IFRlc3QoIm1wcjAzMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNUUrMSIpKS5tb3ZlUG9pbnRSaWdodCgrMTApLnRvU3RyaW5nKCkpLmVxdWFscygiNTAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJtcHIwMzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjVFKzEiKSkubW92ZVBvaW50UmlnaHQoKzUpLnRvU3RyaW5nKCkpLmVxdWFscygiNTAwMDAwIik7CisgIChuZXcgVGVzdCgibXByMDMyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41RSsxIikpLm1vdmVQb2ludFJpZ2h0KCsxKS50b1N0cmluZygpKS5lcXVhbHMoIjUwIik7CisgIChuZXcgVGVzdCgibXByMDMzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC41RSsxIikpLm1vdmVQb2ludFJpZ2h0KDApLnRvU3RyaW5nKCkpLmVxdWFscygiNSIpOworICAobmV3IFRlc3QoIm1wcjAzNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNUUrMSIpKS5tb3ZlUG9pbnRSaWdodCgtMSkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjUiKTsKKyAgKG5ldyBUZXN0KCJtcHIwMzUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjVFKzEiKSkubW92ZVBvaW50UmlnaHQoLTUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwNSIpOworICAobmV3IFRlc3QoIm1wcjAzNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuNUUrMSIpKS5tb3ZlUG9pbnRSaWdodCgtMTApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMDAwMDA1Iik7CisgIAorICBzdW1tYXJ5KCJtb3ZlUG9pbnRSaWdodCIpOworICByZXR1cm47fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjc2NhbGV9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnc2NhbGUoKXsKKyAgKG5ldyBUZXN0KCJzY2EwMDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpKS5zY2FsZSgpKT09MDsKKyAgKG5ldyBUZXN0KCJzY2EwMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMTAiKSkuc2NhbGUoKSk9PTA7CisgIChuZXcgVGVzdCgic2NhMDAzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzEiKSkuc2NhbGUoKSk9PTA7CisgIChuZXcgVGVzdCgic2NhMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzEwIikpLnNjYWxlKCkpPT0wOworICAobmV3IFRlc3QoInNjYTAwNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFKzEwIikpLnNjYWxlKCkpPT0wOworICAobmV3IFRlc3QoInNjYTAwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFLTEwIikpLnNjYWxlKCkpPT0xMDsKKyAgKG5ldyBUZXN0KCJzY2EwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwRS0xMCIpKS5zY2FsZSgpKT09MDsKKyAgKG5ldyBUZXN0KCJzY2EwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwMCIpKS5zY2FsZSgpKT09MzsKKyAgKG5ldyBUZXN0KCJzY2EwMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpLnNjYWxlKCkpPT0yOworICAobmV3IFRlc3QoInNjYTAxMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMCIpKS5zY2FsZSgpKT09MTsKKyAgKG5ldyBUZXN0KCJzY2EwMTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEiKSkuc2NhbGUoKSk9PTE7CisgIChuZXcgVGVzdCgic2NhMDEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xMiIpKS5zY2FsZSgpKT09MjsKKyAgKG5ldyBUZXN0KCJzY2EwMTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjEyMyIpKS5zY2FsZSgpKT09MzsKKyAgKG5ldyBUZXN0KCJzY2EwMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wIikpLnNjYWxlKCkpPT0xOworICAobmV3IFRlc3QoInNjYTAxNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjEiKSkuc2NhbGUoKSk9PTE7CisgIChuZXcgVGVzdCgic2NhMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMTIiKSkuc2NhbGUoKSk9PTI7CisgIChuZXcgVGVzdCgic2NhMDE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMTIzIikpLnNjYWxlKCkpPT0zOworICBzdW1tYXJ5KCJzY2FsZSIpOworICByZXR1cm47fQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjc2V0U2NhbGV9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFnc2V0c2NhbGUoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbiBlPW51bGw7CisgIAorICAobmV3IFRlc3QoInNzYzAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLnNldFNjYWxlKDApLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpKS5zZXRTY2FsZSgxKS50b1N0cmluZygpKS5lcXVhbHMoIi0xLjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpKS5zZXRTY2FsZSgyKS50b1N0cmluZygpKS5lcXVhbHMoIi0xLjAwIik7CisgIChuZXcgVGVzdCgic3NjMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zZXRTY2FsZSgwKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnNldFNjYWxlKDEpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgic3NjMDA2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zZXRTY2FsZSgyKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMDciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5zZXRTY2FsZSgwKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5zZXRTY2FsZSgxKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMCIpOworICAobmV3IFRlc3QoInNzYzAwOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxIikpLnNldFNjYWxlKDIpLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMCIpOworICAobmV3IFRlc3QoInNzYzAxMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIi0xIik7CisgIChuZXcgVGVzdCgic3NjMDExIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkuc2V0U2NhbGUoMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiLTEuMCIpOworICAobmV3IFRlc3QoInNzYzAxMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIi0xLjAwIik7CisgIChuZXcgVGVzdCgic3NjMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zZXRTY2FsZSgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgic3NjMDE0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zZXRTY2FsZSgxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS5zZXRTY2FsZSgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgic3NjMDE3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzEiKSkuc2V0U2NhbGUoMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wIik7CisgIChuZXcgVGVzdCgic3NjMDE4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzEiKSkuc2V0U2NhbGUoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMCIpOworICAKKyAgKG5ldyBUZXN0KCJzc2MwMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA0IikpLnNldFNjYWxlKDMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDQwIik7CisgIChuZXcgVGVzdCgic3NjMDIxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wNCIpKS5zZXRTY2FsZSgyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjA0Iik7CisgIChuZXcgVGVzdCgic3NjMDIyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wNCIpKS5zZXRTY2FsZSgxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA0IikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMjQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA1IikpLnNldFNjYWxlKDMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDUwIik7CisgIChuZXcgVGVzdCgic3NjMDI1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wNSIpKS5zZXRTY2FsZSgyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjA1Iik7CisgIChuZXcgVGVzdCgic3NjMDI2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wNSIpKS5zZXRTY2FsZSgxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjEiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMjciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA1IikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMjgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA1IikpLnNldFNjYWxlKDMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wNTAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMjkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA1IikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wNSIpOworICAobmV3IFRlc3QoInNzYzAzMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDUiKSkuc2V0U2NhbGUoMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRE9XTikudG9TdHJpbmcoKSkuZXF1YWxzKCIxLjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA1IikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInNzYzAzMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDYiKSkuc2V0U2NhbGUoMyxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wNjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA2IikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMDYiKTsKKyAgKG5ldyBUZXN0KCJzc2MwMzQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA2IikpLnNldFNjYWxlKDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjEuMSIpOworICAobmV3IFRlc3QoInNzYzAzNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDYiKSkuc2V0U2NhbGUoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAKKyAgKG5ldyBUZXN0KCJzc2MwNDAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMTAiKSkuc2V0U2NhbGUoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiLTEwLjAwIik7CisgIChuZXcgVGVzdCgic3NjMDQxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzEiKSkuc2V0U2NhbGUoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMS4wMCIpOworICAobmV3IFRlc3QoInNzYzA0MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxMCIpKS5zZXRTY2FsZSgyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMC4wMCIpOworICAobmV3IFRlc3QoInNzYzA0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFKzEwIikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMDAwMDAwMDAwLjAwIik7CisgIChuZXcgVGVzdCgic3NjMDQ0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMUUtMTAiKSkuc2V0U2NhbGUoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMCIpOworICAobmV3IFRlc3QoInNzYzA0NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFLTIiKSkuc2V0U2NhbGUoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMSIpOworICAobmV3IFRlc3QoInNzYzA0NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjBFLTEwIikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgCisgIC8vIGNoZWNrIHJvdW5kaW5nCisgIChuZXcgVGVzdCgic3NjMDUwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuc2V0U2NhbGUoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0NFSUxJTkcpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMSIpOworICAobmV3IFRlc3QoInNzYzA1MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9DRUlMSU5HKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoInNzYzA1MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9DRUlMSU5HKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJzc2MwNTMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwNSIpKS5zZXRTY2FsZSgyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfRE9XTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwIik7CisgIChuZXcgVGVzdCgic3NjMDU0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuc2V0U2NhbGUoMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgic3NjMDU1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuc2V0U2NhbGUoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0RPV04pLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInNzYzA1NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwIik7CisgIChuZXcgVGVzdCgic3NjMDU3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuc2V0U2NhbGUoMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0ZMT09SKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoInNzYzA1OCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgic3NjMDU5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuc2V0U2NhbGUoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRE9XTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwIik7CisgIChuZXcgVGVzdCgic3NjMDYwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuc2V0U2NhbGUoMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRE9XTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwNjEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwNSIpKS5zZXRTY2FsZSgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9ET1dOKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwNjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwNSIpKS5zZXRTY2FsZSgyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwNjMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwNSIpKS5zZXRTY2FsZSgxLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoInNzYzA2NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInNzYzA2NSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDE1IikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMiIpOworICAobmV3IFRlc3QoInNzYzA2NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDE1IikpLnNldFNjYWxlKDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wIik7CisgIChuZXcgVGVzdCgic3NjMDY3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMTUiKSkuc2V0U2NhbGUoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgic3NjMDY4IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuc2V0U2NhbGUoMixjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMSIpOworICAobmV3IFRlc3QoInNzYzA2OSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDEsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoInNzYzA3MCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJzc2MwNzEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjA5NSIpKS5zZXRTY2FsZSgyLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjEwIik7CisgIChuZXcgVGVzdCgic3NjMDcyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wOTUiKSkuc2V0U2NhbGUoMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMC4xIik7CisgIChuZXcgVGVzdCgic3NjMDczIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wOTUiKSkuc2V0U2NhbGUoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVApLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInNzYzA3NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDIsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAxIik7CisgIChuZXcgVGVzdCgic3NjMDc1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wMDUiKSkuc2V0U2NhbGUoMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VQKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMSIpOworICAobmV3IFRlc3QoInNzYzA3NiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDA1IikpLnNldFNjYWxlKDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VUCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIAorICB0cnl7Y2hlY2tzY2FsZTpkb3sKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDEpKS5zZXRTY2FsZSgtOCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uICQxMTcpe2U9JDExNzsKKyAgIGZsYWc9KGUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIk5lZ2F0aXZlIHNjYWxlOiAtOCIpOworICB9LypjaGVja3NjYWxlKi8KKyAgKG5ldyBUZXN0KCJzc2MxMDAiKSkub2s9ZmxhZzsKKyAgdHJ5e2NoZWNrcnVubjpkb3sKKyAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKDEuMDAwMUQpKS5zZXRTY2FsZSgzKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24gJDExOCl7ZT0kMTE4OworICAgZmxhZz0oZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiUm91bmRpbmcgbmVjZXNzYXJ5Iik7CisgIH0vKmNoZWNrcnVubiovCisgIChuZXcgVGVzdCgic3NjMTAxIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja3J1bm46ZG97CisgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgxRS04RCkpLnNldFNjYWxlKDMpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbiAkMTE5KXtlPSQxMTk7CisgICBmbGFnPShlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJSb3VuZGluZyBuZWNlc3NhcnkiKTsKKyAgfS8qY2hlY2tydW5uKi8KKyAgKG5ldyBUZXN0KCJzc2MxMDIiKSkub2s9ZmxhZzsKKyAgc3VtbWFyeSgic2V0U2NhbGUiKTsKKyAgcmV0dXJuO30KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIDxjb2RlPkJpZ0RlY2ltYWwuc2hvcnRWYWx1ZSgpPC9jb2RlPiBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ3Nob3J0dmFsdWUoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBqYXZhLmxhbmcuU3RyaW5nIHY9bnVsbDsKKyAgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gYWU9bnVsbDsKKyAgamF2YS5sYW5nLlN0cmluZyBiYWRzdHJpbmdzW107CisgIGludCBpPTA7CisgIGphdmEubGFuZy5TdHJpbmcgbm9ybT1udWxsOworICAKKyAgKG5ldyBUZXN0KCJzaHYwMDIiKSkub2s9KCgoc2hvcnQpMCkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkuc2hvcnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJzaHYwMDMiKSkub2s9KCgoc2hvcnQpMSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkuc2hvcnRWYWx1ZSgpKTsKKyAgKG5ldyBUZXN0KCJzaHYwMDQiKSkub2s9KCgoc2hvcnQpOTkpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCI5OSIpKS5zaG9ydFZhbHVlKCkpOworICAobmV3IFRlc3QoInNodjAwNiIpKS5vaz0oKHNtYXgpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNtYXgpKS5zaG9ydFZhbHVlKCkpOworICAobmV3IFRlc3QoInNodjAwNyIpKS5vaz0oKHNtaW4pKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNtaW4pKS5zaG9ydFZhbHVlKCkpOworICAobmV3IFRlc3QoInNodjAwOCIpKS5vaz0oKHNuZWcpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNuZWcpKS5zaG9ydFZhbHVlKCkpOworICAobmV3IFRlc3QoInNodjAwOSIpKS5vaz0oKHN6ZXIpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHN6ZXIpKS5zaG9ydFZhbHVlKCkpOworICAobmV3IFRlc3QoInNodjAxMCIpKS5vaz0oKHNwb3MpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNwb3MpKS5zaG9ydFZhbHVlKCkpOworICAobmV3IFRlc3QoInNodjAxMSIpKS5vaz0oKHNtaW4pKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNtYXgrMSkpLnNob3J0VmFsdWUoKSk7CisgIChuZXcgVGVzdCgic2h2MDEyIikpLm9rPSgoc21heCkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoc21pbi0xKSkuc2hvcnRWYWx1ZSgpKTsKKyAgCisgIChuZXcgVGVzdCgic2h2MDIyIikpLm9rPSgoKHNob3J0KTApKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnNob3J0VmFsdWVFeGFjdCgpKTsKKyAgKG5ldyBUZXN0KCJzaHYwMjMiKSkub2s9KCgoc2hvcnQpMSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkuc2hvcnRWYWx1ZUV4YWN0KCkpOworICAobmV3IFRlc3QoInNodjAyNCIpKS5vaz0oKChzaG9ydCk5OSkpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjk5IikpLnNob3J0VmFsdWVFeGFjdCgpKTsKKyAgKG5ldyBUZXN0KCJzaHYwMjYiKSkub2s9KChzbWF4KSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChzbWF4KSkuc2hvcnRWYWx1ZUV4YWN0KCkpOworICAobmV3IFRlc3QoInNodjAyNyIpKS5vaz0oKHNtaW4pKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNtaW4pKS5zaG9ydFZhbHVlRXhhY3QoKSk7CisgIChuZXcgVGVzdCgic2h2MDI4IikpLm9rPSgoc25lZykpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoc25lZykpLnNob3J0VmFsdWVFeGFjdCgpKTsKKyAgKG5ldyBUZXN0KCJzaHYwMjkiKSkub2s9KChzemVyKSk9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChzemVyKSkuc2hvcnRWYWx1ZUV4YWN0KCkpOworICAobmV3IFRlc3QoInNodjAzMCIpKS5vaz0oKHNwb3MpKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNwb3MpKS5zaG9ydFZhbHVlRXhhY3QoKSk7CisgIHRyeXsKKyAgIHY9Ii04ODg4ODg4ODg4OCI7CisgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2KSkuc2hvcnRWYWx1ZUV4YWN0KCk7CisgICBmbGFnPWZhbHNlOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTIwKXthZT0kMTIwOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkNvbnZlcnNpb24gb3ZlcmZsb3c6IisiICIrdik7CisgIH0KKyAgKG5ldyBUZXN0KCJzaHYxMDAiKSkub2s9ZmxhZzsKKyAgdHJ5eworICAgdj0iODg4ODg4ODg4ODgiOworICAgKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwodikpLnNob3J0VmFsdWVFeGFjdCgpOworICAgZmxhZz1mYWxzZTsKKyAgfQorICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDEyMSl7YWU9JDEyMTsKKyAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK3YpOworICB9CisgIChuZXcgVGVzdCgic2h2MTAxIikpLm9rPWZsYWc7CisgIHRyeXsKKyAgIHY9IjEuNSI7CisgICAobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh2KSkuc2hvcnRWYWx1ZUV4YWN0KCk7CisgICBmbGFnPWZhbHNlOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTIyKXthZT0kMTIyOworICAgZmxhZz0oYWUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkRlY2ltYWwgcGFydCBub24temVybzoiKyIgIit2KTsKKyAgfQorICAobmV3IFRlc3QoInNodjEwMiIpKS5vaz1mbGFnOworICAKKyAgYmFkc3RyaW5ncz1uZXcgamF2YS5sYW5nLlN0cmluZ1tdeyIxMjM0NTYiLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNtYXgpKS5hZGQob25lKS50b1N0cmluZygpLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNtaW4pKS5zdWJ0cmFjdChvbmUpLnRvU3RyaW5nKCksIjcxMTExIiwiODExMTEiLCI5MTExMSIsIi03MTExMSIsIi04MTExMSIsIi05MTExMSIsKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoc21pbikpLm11bHRpcGx5KHR3bykudG9TdHJpbmcoKSwobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChzbWF4KSkubXVsdGlwbHkodHdvKS50b1N0cmluZygpLChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHNtaW4pKS5tdWx0aXBseSh0ZW4pLnRvU3RyaW5nKCksKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoc21heCkpLm11bHRpcGx5KHRlbikudG9TdHJpbmcoKSwiLTEyMzQ1NiJ9OyAvLyAyMjAKKyAgLy8gMjIxCisgIC8vIDIyMgorICAvLyAyMjMKKyAgLy8gMjI0CisgIC8vIDIyNQorICAvLyAyMjYKKyAgLy8gMjI3CisgIC8vIDIyOAorICAvLyAyMjkKKyAgLy8gMjMwCisgIC8vIDIzMQorICAvLyAyMzIKKyAgLy8gMjMzCisgIHtpbnQgJDEyMz1iYWRzdHJpbmdzLmxlbmd0aDtpPTA7aTpmb3IoOyQxMjM+MDskMTIzLS0saSsrKXsKKyAgIHRyeXsKKyAgICB2PWJhZHN0cmluZ3NbaV07CisgICAgKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwodikpLnNob3J0VmFsdWVFeGFjdCgpOworICAgIGZsYWc9ZmFsc2U7CisgICB9CisgICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDEyNCl7YWU9JDEyNDsKKyAgICBub3JtPShuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHYpKS50b1N0cmluZygpOworICAgIGZsYWc9KGFlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK25vcm0pOworICAgfQorICAgKG5ldyBUZXN0KCJzaHYiKygyMjAraSkpKS5vaz1mbGFnOworICAgfQorICB9LyppKi8KKyAgCisgIAorICBzdW1tYXJ5KCJzaG9ydFZhbHVlKyIpOworICByZXR1cm47fQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjc2lnbnVtfSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ3NpZ251bSgpeworICAvLyBuZWNlc3NhcmlseSBjaGVja3Mgc29tZSBvYnNjdXJlIGNvbnN0cnVjdGlvbnMsIHRvbworICAobmV3IFRlc3QoInNpZzAwMSIpKS5vaz0oLTEpPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xIikpLnNpZ251bSgpKTsKKyAgKG5ldyBUZXN0KCJzaWcwMDIiKSkub2s9KC0xKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wMDEwIikpLnNpZ251bSgpKTsKKyAgKG5ldyBUZXN0KCJzaWcwMDMiKSkub2s9KC0xKT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wMDEiKSkuc2lnbnVtKCkpOworICAobmV3IFRlc3QoInNpZzAwNCIpKS5vaz0wPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjAwIikpLnNpZ251bSgpKTsKKyAgKG5ldyBUZXN0KCJzaWcwMDUiKSkub2s9MD09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMCIpKS5zaWdudW0oKSk7CisgIChuZXcgVGVzdCgic2lnMDA2IikpLm9rPTA9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS5zaWdudW0oKSk7CisgIChuZXcgVGVzdCgic2lnMDA3IikpLm9rPTA9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAiKSkuc2lnbnVtKCkpOworICAobmV3IFRlc3QoInNpZzAwOCIpKS5vaz0wPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwLjAiKSkuc2lnbnVtKCkpOworICAobmV3IFRlc3QoInNpZzAwOSIpKS5vaz0xPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwLjAxIikpLnNpZ251bSgpKTsKKyAgKG5ldyBUZXN0KCJzaWcwMTAiKSkub2s9MT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMC4wMSIpKS5zaWdudW0oKSk7CisgIChuZXcgVGVzdCgic2lnMDExIikpLm9rPTE9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMDAuMDEwIikpLnNpZ251bSgpKTsKKyAgKG5ldyBUZXN0KCJzaWcwMTIiKSkub2s9MT09KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwMS4wMSIpKS5zaWdudW0oKSk7CisgIChuZXcgVGVzdCgic2lnMDEzIikpLm9rPTE9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiKzAuMDEiKSkuc2lnbnVtKCkpOworICAobmV3IFRlc3QoInNpZzAxNCIpKS5vaz0xPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIiswLjAwMSIpKS5zaWdudW0oKSk7CisgIChuZXcgVGVzdCgic2lnMDE1IikpLm9rPTE9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMSIpKS5zaWdudW0oKSk7CisgIChuZXcgVGVzdCgic2lnMDE2IikpLm9rPTE9PSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMWUrMTIiKSkuc2lnbnVtKCkpOworICAobmV3IFRlc3QoInNpZzAxNyIpKS5vaz0wPT0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAwZSsxMiIpKS5zaWdudW0oKSk7CisgIHN1bW1hcnkoInNpZ251bSIpOworICByZXR1cm47fQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjdG9CaWdEZWNpbWFsfSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ3RvYmlnZGVjaW1hbCgpeworICAobmV3IFRlc3QoInRiZDAwMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAiKSkudG9CaWdEZWNpbWFsKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidGJkMDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkudG9CaWdEZWNpbWFsKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiZDAwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxIikpLnRvQmlnRGVjaW1hbCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInRiZDAwNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEiKSkudG9CaWdEZWNpbWFsKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgidGJkMDA1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMUUrMiIpKS50b0JpZ0RlY2ltYWwoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMCIpOworICAobmV3IFRlc3QoInRiZDAwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFLTIiKSkudG9CaWdEZWNpbWFsKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAxIik7CisgIChuZXcgVGVzdCgidGJkMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMUUtOCIpKS50b0JpZ0RlY2ltYWwoKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAwMDAwMDEiKTsKKyAgKG5ldyBUZXN0KCJ0YmQwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRS05IikpLnRvQmlnRGVjaW1hbCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wMDAwMDAwMDEiKTsKKyAgKG5ldyBUZXN0KCJ0YmQwMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRTEwIikpLnRvQmlnRGVjaW1hbCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMDAwMDAwMDAiKTsKKyAgKG5ldyBUZXN0KCJ0YmQwMTAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxRTEyIikpLnRvQmlnRGVjaW1hbCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMDAwMDAwMDAwMCIpOworICBzdW1tYXJ5KCJ0b0JpZ0RlY2ltYWwiKTsKKyAgcmV0dXJuO30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBCaWdEZWNpbWFsI3RvQmlnSW50ZWdlcn0gbWV0aG9kLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWd0b2JpZ2ludGVnZXIoKXsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBqYXZhLmxhbmcuU3RyaW5nIGJhZHN0cmluZ3NbXTsKKyAgaW50IGk9MDsKKyAgKG5ldyBUZXN0KCJ0YmkwMDEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMSIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xIik7CisgIChuZXcgVGVzdCgidGJpMDAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMDQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwIik7CisgIChuZXcgVGVzdCgidGJpMDA1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMDAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMUUrMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xIik7CisgIChuZXcgVGVzdCgidGJpMDA3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMEUrMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMUUrMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMEUrMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwIik7CisgIChuZXcgVGVzdCgidGJpMDEwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMUUrMyIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMDAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInRiaTAxMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDEiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidGJpMDEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wIikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInRiaTAxNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMSIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMTYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wMSIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wIikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInRiaTAxOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0wLjEiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidGJpMDE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAxIikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInRiaTAyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMjIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjEiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgidGJpMDIzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEuMDAiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiaTAyNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjAxIikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMjUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4wIikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4xIikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMjciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMTExLjExMSIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMTEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMjgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMTExLjExMSIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjExMSIpOworICAobmV3IFRlc3QoInRiaTAyOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDkiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidGJpMDMwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC45IikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInRiaTAzMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMDkiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgidGJpMDMyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wNSIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMzMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjA0IikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInRiaTAzNCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuOTkiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgidGJpMDM0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS45IikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInRiaTAzNSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuNSIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMzYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjQiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgidGJpMDM3IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEuMDkiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiaTAzOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjA1IikpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJ0YmkwMzkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4wNCIpKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xIik7CisgIChuZXcgVGVzdCgidGJpMDQwIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEuOTkiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiaTA0MSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjkiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiaTA0MiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjUiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiaTA0MyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjQiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiaTA0NCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFLTEwMDAiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidGJpMDQ1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTFFLTEwMDAiKSkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIAorICAvLyBFeGFjdCB2YXJpZXR5IC0tCisgIChuZXcgVGVzdCgidGJpMTAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkudG9CaWdJbnRlZ2VyRXhhY3QoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xIik7CisgIChuZXcgVGVzdCgidGJpMTAyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMCIpKS50b0JpZ0ludGVnZXJFeGFjdCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInRiaTEwMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxIikpLnRvQmlnSW50ZWdlckV4YWN0KCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgidGJpMTA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkudG9CaWdJbnRlZ2VyRXhhY3QoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwIik7CisgIChuZXcgVGVzdCgidGJpMTA1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAwMCIpKS50b0JpZ0ludGVnZXJFeGFjdCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMCIpOworICAobmV3IFRlc3QoInRiaTEwNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xRSswIikpLnRvQmlnSW50ZWdlckV4YWN0KCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiaTEwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjBFKzAiKSkudG9CaWdJbnRlZ2VyRXhhY3QoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkxMDgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMUUrMCIpKS50b0JpZ0ludGVnZXJFeGFjdCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInRiaTEwOSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEwRSswIikpLnRvQmlnSW50ZWdlckV4YWN0KCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMCIpOworICAobmV3IFRlc3QoInRiaTExMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFKzMiKSkudG9CaWdJbnRlZ2VyRXhhY3QoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMDAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkxMTEiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwLjAwIikpLnRvQmlnSW50ZWdlckV4YWN0KCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidGJpMTEyIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4wIikpLnRvQmlnSW50ZWdlckV4YWN0KCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidGJpMTEzIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMDAiKSkudG9CaWdJbnRlZ2VyRXhhY3QoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ0YmkxMTQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wIikpLnRvQmlnSW50ZWdlckV4YWN0KCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidGJpMTE1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMCIpKS50b0JpZ0ludGVnZXJFeGFjdCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInRiaTExNiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMCIpKS50b0JpZ0ludGVnZXJFeGFjdCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInRiaTExNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjAwIikpLnRvQmlnSW50ZWdlckV4YWN0KCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInRiaTExOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjAiKSkudG9CaWdJbnRlZ2VyRXhhY3QoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xIik7CisgIChuZXcgVGVzdCgidGJpMTE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpKS50b0JpZ0ludGVnZXJFeGFjdCgpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAKKyAgLy8gdGhlIGZvbGxvd2luZyBzaG91bGQgYWxsIHJhaXNlIGV4Y2VwdGlvbnMKKyAgCisgIGJhZHN0cmluZ3M9bmV3IGphdmEubGFuZy5TdHJpbmdbXXsiMC4wOSIsIjAuOSIsIjAuMDEiLCIwLjEiLCItMC4wMSIsIi0wLjEiLCIxLjAxIiwiLTEuMDEiLCItMS4xIiwiLTExMS4xMTEiLCIrMTExLjExMSIsIjEuMDkiLCIxLjA1IiwiMS4wNCIsIjEuOTkiLCIxLjkiLCIxLjUiLCIxLjQiLCItMS4wOSIsIi0xLjA1IiwiLTEuMDQiLCItMS45OSIsIi0xLjkiLCItMS41IiwiLTEuNCIsIjFFLTEwMDAiLCItMUUtMTAwMCIsIjExRS0xIiwiMS4xIiwiMTI3NjIzMTU2MTIzNjU2NTYxMzU2MTIzNTEyMzE1NjMxMjMxNTUxMzEyMzU2LjAwMDAwMSIsIjAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIn07IC8vIDMwMC0zMDMKKyAgLy8gMzA0LTMwNworICAvLyAzMDgtMzExCisgIC8vIDMxMi0zMTYKKyAgLy8gMzE3LTMyMAorICAvLyAzMjEtMzI0CisgIC8vIDMyNS0zMjgKKyAgLy8gMzI5CisgIC8vIDMzMAorICAKKyAge2ludCAkMTI1PWJhZHN0cmluZ3MubGVuZ3RoO2k9MDtpOmZvcig7JDEyNT4wOyQxMjUtLSxpKyspeworICAgdHJ5eworICAgIChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGJhZHN0cmluZ3NbaV0pKS50b0JpZ0ludGVnZXJFeGFjdCgpOworICAgIGZsYWc9ZmFsc2U7CisgICB9CisgICBjYXRjaCAoamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24gJDEyNil7CisgICAgZmxhZz10cnVlOworICAgfQorICAgKG5ldyBUZXN0KCJ0YmkiKygzMDAraSkpKS5vaz1mbGFnOworICAgfQorICB9LyppKi8KKyAgCisgIHN1bW1hcnkoInRvQmlnSW50ZWdlcisiKTsKKyAgcmV0dXJuO30KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBCaWdEZWNpbWFsI3RvQ2hhckFycmF5fSBtZXRob2QuICovCisgCisgcHVibGljIHZvaWQgZGlhZ3RvY2hhcmFycmF5KCl7CisgIGphdmEubGFuZy5TdHJpbmcgc3RyOworICBjaGFyIGNhcltdOworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZDsKKyAgY2hhciBjYVtdOworICAvLyB0aGUgZnVuY3Rpb24gb2YgdGhpcyBoYXMgYmVlbiB0ZXN0ZWQgYWJvdmUsIHRoaXMgaXMgc2ltcGx5IGFuCisgIC8vIGV4aXN0ZW5jZSBwcm9vZiBhbmQgdHlwZS1jaGVjaworICBzdHI9Ii0xMjMuNDUiOworICBjYXI9KHN0cikudG9DaGFyQXJyYXkoKTsKKyAgZD1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKHN0cik7CisgIGNhPWQudG9DaGFyQXJyYXkoKTsKKyAgKG5ldyBUZXN0KCJ0Y2EwMDEiKSkub2s9Y2EubGVuZ3RoPT1jYXIubGVuZ3RoOworICAobmV3IFRlc3QoInRjYTAwMiIpKS5vaz0obmV3IGphdmEubGFuZy5TdHJpbmcoY2EpKS5lcXVhbHMoKGphdmEubGFuZy5PYmplY3QpKG5ldyBqYXZhLmxhbmcuU3RyaW5nKGNhcikpKTsKKyAgKG5ldyBUZXN0KCJ0Y2EwMDMiKSkub2s9KGQudG9DaGFyQXJyYXkoKSBpbnN0YW5jZW9mIGNoYXJbXSk7CisgIChuZXcgVGVzdCgidGNhMDA0IikpLm9rPShjYSBpbnN0YW5jZW9mIGNoYXJbXSk7CisgIHN1bW1hcnkoInRvQ2hhckFycmF5Iik7CisgIHJldHVybjt9CisKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qKiBUZXN0IHRoZSB7QGxpbmsgQmlnRGVjaW1hbCN0b1N0cmluZ30gbWV0aG9kLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWd0b3N0cmluZygpeworICBqYXZhLmxhbmcuU3RyaW5nIHN0cjsKKyAgY2hhciBjYXJbXTsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGQ7CisgIGNoYXIgY2FbXTsKKyAgamF2YS5sYW5nLlN0cmluZyBjczsKKyAgLy8gdGhlIGZ1bmN0aW9uIG9mIHRoaXMgaGFzIGJlZW4gdGVzdGVkIGFib3ZlLCB0aGlzIGlzIHNpbXBseSBhbgorICAvLyBleGlzdGVuY2UgcHJvb2YgYW5kIHR5cGUtY2hlY2sKKyAgc3RyPSIxMjMuNDUiOworICBjYXI9KHN0cikudG9DaGFyQXJyYXkoKTsKKyAgZD1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGNhciwwLGNhci5sZW5ndGgpOworICBjYT1kLnRvQ2hhckFycmF5KCk7CisgIGNzPWQudG9TdHJpbmcoKTsKKyAgKG5ldyBUZXN0KCJ0b3MwMDEiKSkub2s9KHN0ci50b0NoYXJBcnJheSgpLmxlbmd0aCk9PWNhLmxlbmd0aDsKKyAgKG5ldyBUZXN0KCJ0b3MwMDIiKSkub2s9KHN0ci5sZW5ndGgoKSk9PShjcy5sZW5ndGgoKSk7CisgIChuZXcgVGVzdCgidG9zMDAzIikpLm9rPXN0ci5lcXVhbHMoKGphdmEubGFuZy5PYmplY3QpKG5ldyBqYXZhLmxhbmcuU3RyaW5nKGNhKSkpOworICAobmV3IFRlc3QoInRvczAwNCIpKS5vaz1zdHIuZXF1YWxzKChqYXZhLmxhbmcuT2JqZWN0KWNzKTsKKyAgKG5ldyBUZXN0KCJ0b3MwMDUiKSkub2s9KGNzIGluc3RhbmNlb2YgamF2YS5sYW5nLlN0cmluZyk7CisgIChuZXcgVGVzdCgidG9zMDA2IikpLm9rPShkLnRvU3RyaW5nKCkgaW5zdGFuY2VvZiBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgc3VtbWFyeSgidG9TdHJpbmciKTsKKyAgcmV0dXJuO30KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBCaWdEZWNpbWFsI3Vuc2NhbGVkVmFsdWV9IG1ldGhvZC4gKi8KKyAKKyBwdWJsaWMgdm9pZCBkaWFndW5zY2FsZWR2YWx1ZSgpeworICAvLyBqdXN0IGxpa2UgdG9CaWdJbnRlZ2VyLCBidXQgc2NhbHkgYml0cyBhcmUgcHJlc2VydmVkIFt3aXRob3V0IGRvdHNdCisgIChuZXcgVGVzdCgidW5zMDAxIikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEiKSkudW5zY2FsZWRWYWx1ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMDIiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIwIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMDMiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMSIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgidW5zMDA0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMTAiKSkudW5zY2FsZWRWYWx1ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMDUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMDAwIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMDAiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMDYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMUUrMCIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInVuczAwNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjBFKzAiKSkudW5zY2FsZWRWYWx1ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInVuczAwOCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIisxRSswIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMDkiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMEUrMCIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMCIpOworICAobmV3IFRlc3QoInVuczAxMCIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjFFKzMiKSkudW5zY2FsZWRWYWx1ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAwMCIpOworICAobmV3IFRlc3QoInVuczAxMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAiKSkudW5zY2FsZWRWYWx1ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInVuczAxMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDEiKSkudW5zY2FsZWRWYWx1ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiMSIpOworICAobmV3IFRlc3QoInVuczAxMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjAuMCIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidW5zMDE0IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMC4xIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMTUiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wMCIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidW5zMDE2IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTAuMDEiKSkudW5zY2FsZWRWYWx1ZSgpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMTciKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4wIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIjAiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMTgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMC4xIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xIik7CisgIChuZXcgVGVzdCgidW5zMDE5IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiMS4wMCIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMDAiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMjAiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxLjAxIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIjEwMSIpOworICAobmV3IFRlc3QoInVuczAyMSIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMCIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMCIpOworICAobmV3IFRlc3QoInVuczAyMiIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEuMSIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMSIpOworICAobmV3IFRlc3QoInVuczAyMyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xLjAwIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMDAiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMjQiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4wMSIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMTAxIik7CisgIChuZXcgVGVzdCgidW5zMDI1IikpLm9rPSgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgiLTEuMCIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMTAiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMjYiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCItMS4xIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMSIpOworICAobmV3IFRlc3QoInVuczAyNyIpKS5vaz0oKG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIi0xMTEuMTExIikpLnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpKS5lcXVhbHMoIi0xMTExMTEiKTsKKyAgKG5ldyBUZXN0KCJ1bnMwMjgiKSkub2s9KChuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIrMTExLjExMSIpKS51bnNjYWxlZFZhbHVlKCkudG9TdHJpbmcoKSkuZXF1YWxzKCIxMTExMTEiKTsKKyAgc3VtbWFyeSgidW5zY2FsZWRWYWx1ZSIpOworICByZXR1cm47fQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCB0aGUge0BsaW5rIEJpZ0RlY2ltYWwjdmFsdWVPZn0gbWV0aG9kIFtsb25nIGFuZCBkb3VibGVdLiAqLworIAorIHB1YmxpYyB2b2lkIGRpYWd2YWx1ZW9mKCl7CisgIGJvb2xlYW4gZmxhZz1mYWxzZTsKKyAgamF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbiBlPW51bGw7CisgIGRvdWJsZSBkemVyOworICBkb3VibGUgZHBvczsKKyAgZG91YmxlIGRuZWc7CisgIGRvdWJsZSBkcG9zNTsKKyAgZG91YmxlIGRuZWc1OworICBkb3VibGUgZG1pbjsKKyAgZG91YmxlIGRtYXg7CisgIGRvdWJsZSBkOworICAKKyAgLy8gdmFsdWVPZihsb25nIFssc2NhbGVdKSAtLQorICAKKyAgKG5ldyBUZXN0KCJ2YWwwMDEiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKChsb25nKSgoYnl0ZSktMikpLnRvU3RyaW5nKCkpLmVxdWFscygiLTIiKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMDIiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKChsb25nKSgoYnl0ZSktMSkpLnRvU3RyaW5nKCkpLmVxdWFscygiLTEiKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMDMiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKChsb25nKSgoYnl0ZSktMCkpLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInZhbDAwNCIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YoKGxvbmcpKChieXRlKSsxKSkudG9TdHJpbmcoKSkuZXF1YWxzKCIxIik7CisgIChuZXcgVGVzdCgidmFsMDA1IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZigobG9uZykoKGJ5dGUpKzIpKS50b1N0cmluZygpKS5lcXVhbHMoIjIiKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMDYiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKChsb25nKSgoYnl0ZSkxMCkpLnRvU3RyaW5nKCkpLmVxdWFscygiMTAiKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMDciKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKChsb25nKSgoYnl0ZSkxMSkpLnRvU3RyaW5nKCkpLmVxdWFscygiMTEiKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMDgiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGxtaW4pLnRvU3RyaW5nKCkpLmVxdWFscygiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMDkiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGxtYXgpLnRvU3RyaW5nKCkpLmVxdWFscygiOTIyMzM3MjAzNjg1NDc3NTgwNyIpOworICAobmV3IFRlc3QoInZhbDAxMCIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobG5lZykudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInZhbDAxMSIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobHplcikudG9TdHJpbmcoKSkuZXF1YWxzKCIwIik7CisgIChuZXcgVGVzdCgidmFsMDEyIikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihscG9zKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMTMiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGxtaW4sMCkudG9TdHJpbmcoKSkuZXF1YWxzKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpOworICAobmV3IFRlc3QoInZhbDAxNCIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobG1heCwwKS50b1N0cmluZygpKS5lcXVhbHMoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMTUiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGxuZWcsMCkudG9TdHJpbmcoKSkuZXF1YWxzKCItMSIpOworICAobmV3IFRlc3QoInZhbDAxNiIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobHBvcywwKS50b1N0cmluZygpKS5lcXVhbHMoIjEiKTsKKyAgCisgIChuZXcgVGVzdCgidmFsMDE3IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihsemVyLDApLnRvU3RyaW5nKCkpLmVxdWFscygiMCIpOworICAobmV3IFRlc3QoInZhbDAxOCIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobHplciwxKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMCIpOworICAobmV3IFRlc3QoInZhbDAxOSIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobHplciwyKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMDAiKTsKKyAgKG5ldyBUZXN0KCJ2YWwwMjAiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGx6ZXIsMykudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMCIpOworICAobmV3IFRlc3QoInZhbDAyMSIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobHplciwxMCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwMDAwMDAwMDAiKTsKKyAgCisgIChuZXcgVGVzdCgidmFsMDIyIikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihsbWluLDcpLnRvU3RyaW5nKCkpLmVxdWFscygiLTkyMjMzNzIwMzY4NS40Nzc1ODA4Iik7CisgIChuZXcgVGVzdCgidmFsMDIzIikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihsbWF4LDExKS50b1N0cmluZygpKS5lcXVhbHMoIjkyMjMzNzIwLjM2ODU0Nzc1ODA3Iik7CisgIAorICAKKyAgdHJ5e2NoZWNrc2NhbGU6ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZigobG9uZykyMywtOCk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdW1iZXJGb3JtYXRFeGNlcHRpb24gJDEyNyl7ZT0kMTI3OworICAgZmxhZz0oZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiTmVnYXRpdmUgc2NhbGU6IC04Iik7CisgIH0vKmNoZWNrc2NhbGUqLworICAobmV3IFRlc3QoInZhbDEwMCIpKS5vaz1mbGFnOworICAKKyAgLy8gdmFsdWVPZihkb3VibGUpIC0tCisgIAorICBkemVyPShkb3VibGUpMDsKKyAgZHBvcz0oZG91YmxlKTE7CisgIGRwb3M9ZHBvcy8oKGRvdWJsZSkxMCk7CisgIGRuZWc9KGRvdWJsZSktZHBvczsKKyAgKG5ldyBUZXN0KCJ2YWwyMDEiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGRuZWcpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuMSIpOworICAobmV3IFRlc3QoInZhbDIwMiIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YoZHplcikudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAiKTsgLy8gY2YuIGNvbnN0cnVjdG9yCisgIChuZXcgVGVzdCgidmFsMjAzIikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihkcG9zKS50b1N0cmluZygpKS5lcXVhbHMoIjAuMSIpOworICBkcG9zNT0oZG91YmxlKTAuNUQ7CisgIGRuZWc1PShkb3VibGUpLWRwb3M1OworICAobmV3IFRlc3QoInZhbDIwNCIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YoZG5lZzUpLnRvU3RyaW5nKCkpLmVxdWFscygiLTAuNSIpOworICAobmV3IFRlc3QoInZhbDIwNSIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YoZHBvczUpLnRvU3RyaW5nKCkpLmVxdWFscygiMC41Iik7CisgIGRtaW49amF2YS5sYW5nLkRvdWJsZS5NSU5fVkFMVUU7CisgIGRtYXg9amF2YS5sYW5nLkRvdWJsZS5NQVhfVkFMVUU7CisgIChuZXcgVGVzdCgidmFsMjA2IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihkbWluKS50b1N0cmluZygpKS5lcXVhbHMoIjQuOUUtMzI0Iik7CisgIChuZXcgVGVzdCgidmFsMjA3IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihkbWF4KS50b1N0cmluZygpKS5lcXVhbHMoIjEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4Iik7CisgIAorICAvLyBuYXN0aWVzCisgIGQ9KGRvdWJsZSk5OworICBkPWQvKChkb3VibGUpMTApOworICAobmV3IFRlc3QoInZhbDIxMCIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YoZCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjkiKTsKKyAgZD1kLygoZG91YmxlKTEwKTsKKyAgKG5ldyBUZXN0KCJ2YWwyMTEiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGQpLnRvU3RyaW5nKCkpLmVxdWFscygiMC4wOSIpOworICBkPWQvKChkb3VibGUpMTApOworICAobmV3IFRlc3QoInZhbDIxMiIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YoZCkudG9TdHJpbmcoKSkuZXF1YWxzKCIwLjAwOTAiKTsKKyAgZD1kLygoZG91YmxlKTEwKTsKKyAgKG5ldyBUZXN0KCJ2YWwyMTMiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGQpLnRvU3RyaW5nKCkpLmVxdWFscygiOS4wRS00Iik7CisgIGQ9ZC8oKGRvdWJsZSkxMCk7CisgIChuZXcgVGVzdCgidmFsMjE0IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihkKS50b1N0cmluZygpKS5lcXVhbHMoIjguOTk5OTk5OTk5OTk5OTk5RS01Iik7CisgIGQ9ZC8oKGRvdWJsZSkxMCk7CisgIChuZXcgVGVzdCgidmFsMjE1IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihkKS50b1N0cmluZygpKS5lcXVhbHMoIjguOTk5OTk5OTk5OTk5OTk5RS02Iik7CisgIGQ9ZC8oKGRvdWJsZSkxMCk7CisgIChuZXcgVGVzdCgidmFsMjE2IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihkKS50b1N0cmluZygpKS5lcXVhbHMoIjguOTk5OTk5OTk5OTk5OTk5RS03Iik7CisgIGQ9ZC8oKGRvdWJsZSkxMCk7CisgIChuZXcgVGVzdCgidmFsMjE3IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihkKS50b1N0cmluZygpKS5lcXVhbHMoIjguOTk5OTk5OTk5OTk5OTk5RS04Iik7CisgIGQ9ZC8oKGRvdWJsZSkxMCk7CisgIChuZXcgVGVzdCgidmFsMjE4IikpLm9rPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihkKS50b1N0cmluZygpKS5lcXVhbHMoIjguOTk5OTk5OTk5OTk5OTk4RS05Iik7CisgIAorICB0cnl7Y2hlY2twaW46ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihqYXZhLmxhbmcuRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbiAkMTI4KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2twaW4qLworICAobmV3IFRlc3QoInZhbDMwMSIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tuaW46ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihqYXZhLmxhbmcuRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbiAkMTI5KXsKKyAgIGZsYWc9dHJ1ZTsKKyAgfS8qY2hlY2tuaW4qLworICAobmV3IFRlc3QoInZhbDMwMiIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tuYW46ZG97CisgICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihqYXZhLmxhbmcuRG91YmxlLk5hTik7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5OdW1iZXJGb3JtYXRFeGNlcHRpb24gJDEzMCl7CisgICBmbGFnPXRydWU7CisgIH0vKmNoZWNrbmFuKi8KKyAgKG5ldyBUZXN0KCJ2YWwzMDMiKSkub2s9ZmxhZzsKKyAgCisgIHN1bW1hcnkoInZhbHVlT2YiKTsKKyAgcmV0dXJuO30KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqIFRlc3QgdGhlIHtAbGluayBNYXRoQ29udGV4dH0gY2xhc3MuICovCisgCisgcHVibGljIHZvaWQgZGlhZ21hdGhjb250ZXh0KCl7CisgIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgbWNjb24xOworICBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jY29uMjsKKyAgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBtY2NvbjM7CisgIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgbWNjb240OworICBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jcm1jOworICBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jcm1kOworICBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jcm1mOworICBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jcm1oZDsKKyAgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBtY3JtaGU7CisgIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgbWNybWh1OworICBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IG1jcm11bjsKKyAgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBtY3JtdTsKKyAgYm9vbGVhbiBmbGFnPWZhbHNlOworICBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGU9bnVsbDsKKyAgLy8gdGhlc2UgdGVzdHMgYXJlIG1vc3RseSBleGlzdGVuY2UgY2hlY2tzCisgIChuZXcgVGVzdCgibWNuMDAxIikpLm9rPShjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LkRFRkFVTFQuZ2V0RGlnaXRzKCkpPT05OworICAobmV3IFRlc3QoIm1jbjAwMiIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ERUZBVUxULmdldEZvcm0oKSk9PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuU0NJRU5USUZJQzsKKyAgKG5ldyBUZXN0KCJtY24wMDMiKSkub2s9KGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuREVGQVVMVC5nZXRGb3JtKCkpIT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LkVOR0lORUVSSU5HOworICAobmV3IFRlc3QoIm1jbjAwNCIpKS5vaz0oY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ERUZBVUxULmdldEZvcm0oKSkhPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU47CisgIChuZXcgVGVzdCgibWNuMDA1IikpLm9rPShjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LkRFRkFVTFQuZ2V0TG9zdERpZ2l0cygpPzE6MCk9PTA7CisgIChuZXcgVGVzdCgibWNuMDA2IikpLm9rPShjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LkRFRkFVTFQuZ2V0Um91bmRpbmdNb2RlKCkpPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVA7CisgIAorICAobmV3IFRlc3QoIm1jbjAxMCIpKS5vaz1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0NFSUxJTkc+PTA7CisgIChuZXcgVGVzdCgibWNuMDExIikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfRE9XTj49MDsKKyAgKG5ldyBUZXN0KCJtY24wMTIiKSkub2s9Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUj49MDsKKyAgKG5ldyBUZXN0KCJtY24wMTMiKSkub2s9Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV04+PTA7CisgIChuZXcgVGVzdCgibWNuMDE0IikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9FVkVOPj0wOworICAobmV3IFRlc3QoIm1jbjAxNSIpKS5vaz1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVA+PTA7CisgIChuZXcgVGVzdCgibWNuMDE2IikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVU5ORUNFU1NBUlk+PTA7CisgIChuZXcgVGVzdCgibWNuMDE3IikpLm9rPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfVVA+PTA7CisgIAorICBtY2NvbjE9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoMTExKTsKKyAgKG5ldyBUZXN0KCJtY24wMjEiKSkub2s9KG1jY29uMS5nZXREaWdpdHMoKSk9PTExMTsKKyAgKG5ldyBUZXN0KCJtY24wMjIiKSkub2s9KG1jY29uMS5nZXRGb3JtKCkpPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUM7CisgIChuZXcgVGVzdCgibWNuMDIzIikpLm9rPShtY2NvbjEuZ2V0TG9zdERpZ2l0cygpPzE6MCk9PTA7CisgIChuZXcgVGVzdCgibWNuMDI0IikpLm9rPShtY2NvbjEuZ2V0Um91bmRpbmdNb2RlKCkpPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVA7CisgIAorICBtY2NvbjI9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoNzgsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5FTkdJTkVFUklORyk7CisgIChuZXcgVGVzdCgibWNuMDMxIikpLm9rPShtY2NvbjIuZ2V0RGlnaXRzKCkpPT03ODsKKyAgKG5ldyBUZXN0KCJtY24wMzIiKSkub2s9KG1jY29uMi5nZXRGb3JtKCkpPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LkVOR0lORUVSSU5HOworICAobmV3IFRlc3QoIm1jbjAzMyIpKS5vaz0obWNjb24yLmdldExvc3REaWdpdHMoKT8xOjApPT0wOworICAobmV3IFRlc3QoIm1jbjAzNCIpKS5vaz0obWNjb24yLmdldFJvdW5kaW5nTW9kZSgpKT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX1VQOworICAKKyAgbWNjb24zPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDUsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTix0cnVlKTsKKyAgKG5ldyBUZXN0KCJtY24wNDEiKSkub2s9KG1jY29uMy5nZXREaWdpdHMoKSk9PTU7CisgIChuZXcgVGVzdCgibWNuMDQyIikpLm9rPShtY2NvbjMuZ2V0Rm9ybSgpKT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTjsKKyAgKG5ldyBUZXN0KCJtY24wNDMiKSkub2s9KG1jY29uMy5nZXRMb3N0RGlnaXRzKCk/MTowKT09MTsKKyAgKG5ldyBUZXN0KCJtY24wNDQiKSkub2s9KG1jY29uMy5nZXRSb3VuZGluZ01vZGUoKSk9PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUDsKKyAgCisgIG1jY29uND1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuU0NJRU5USUZJQyxmYWxzZSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0ZMT09SKTsKKyAgKG5ldyBUZXN0KCJtY24wNTEiKSkub2s9KG1jY29uNC5nZXREaWdpdHMoKSk9PTA7CisgIChuZXcgVGVzdCgibWNuMDUyIikpLm9rPShtY2NvbjQuZ2V0Rm9ybSgpKT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5TQ0lFTlRJRklDOworICAobmV3IFRlc3QoIm1jbjA1MyIpKS5vaz0obWNjb240LmdldExvc3REaWdpdHMoKT8xOjApPT0wOworICAobmV3IFRlc3QoIm1jbjA1NCIpKS5vaz0obWNjb240LmdldFJvdW5kaW5nTW9kZSgpKT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9GTE9PUjsKKyAgCisgIChuZXcgVGVzdCgibWNuMDYxIikpLm9rPShtY2NvbjEudG9TdHJpbmcoKSkuZXF1YWxzKCJkaWdpdHM9MTExIGZvcm09U0NJRU5USUZJQyBsb3N0RGlnaXRzPTAgcm91bmRpbmdNb2RlPVJPVU5EX0hBTEZfVVAiKTsKKyAgCisgIChuZXcgVGVzdCgibWNuMDYyIikpLm9rPShtY2NvbjIudG9TdHJpbmcoKSkuZXF1YWxzKCJkaWdpdHM9NzggZm9ybT1FTkdJTkVFUklORyBsb3N0RGlnaXRzPTAgcm91bmRpbmdNb2RlPVJPVU5EX0hBTEZfVVAiKTsKKyAgCisgIChuZXcgVGVzdCgibWNuMDYzIikpLm9rPShtY2NvbjMudG9TdHJpbmcoKSkuZXF1YWxzKCJkaWdpdHM9NSBmb3JtPVBMQUlOIGxvc3REaWdpdHM9MSByb3VuZGluZ01vZGU9Uk9VTkRfSEFMRl9VUCIpOworICAKKyAgKG5ldyBUZXN0KCJtY24wNjQiKSkub2s9KG1jY29uNC50b1N0cmluZygpKS5lcXVhbHMoImRpZ2l0cz0wIGZvcm09U0NJRU5USUZJQyBsb3N0RGlnaXRzPTAgcm91bmRpbmdNb2RlPVJPVU5EX0ZMT09SIik7CisgIAorICAKKyAgLy8gY29tcGxldGUgdGVzdGluZyByb3VuZGluZyBtb2RlcyByb3VuZCB0cmlwcworICBtY3JtYz1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4sZmFsc2UsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9DRUlMSU5HKTsKKyAgbWNybWQ9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOLGZhbHNlLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfRE9XTik7CisgIG1jcm1mPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTixmYWxzZSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0ZMT09SKTsKKyAgbWNybWhkPW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTixmYWxzZSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRE9XTik7CisgIG1jcm1oZT1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4sZmFsc2UsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0VWRU4pOworICBtY3JtaHU9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOLGZhbHNlLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUCk7CisgIG1jcm11bj1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4sZmFsc2UsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWSk7CisgIG1jcm11PW5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTixmYWxzZSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VQKTsKKyAgCisgIChuZXcgVGVzdCgibWNuMDcxIikpLm9rPShtY3JtYy50b1N0cmluZygpKS5lcXVhbHMoImRpZ2l0cz0wIGZvcm09UExBSU4gbG9zdERpZ2l0cz0wIHJvdW5kaW5nTW9kZT1ST1VORF9DRUlMSU5HIik7CisgIAorICAobmV3IFRlc3QoIm1jbjA3MiIpKS5vaz0obWNybWQudG9TdHJpbmcoKSkuZXF1YWxzKCJkaWdpdHM9MCBmb3JtPVBMQUlOIGxvc3REaWdpdHM9MCByb3VuZGluZ01vZGU9Uk9VTkRfRE9XTiIpOworICAKKyAgKG5ldyBUZXN0KCJtY24wNzMiKSkub2s9KG1jcm1mLnRvU3RyaW5nKCkpLmVxdWFscygiZGlnaXRzPTAgZm9ybT1QTEFJTiBsb3N0RGlnaXRzPTAgcm91bmRpbmdNb2RlPVJPVU5EX0ZMT09SIik7CisgIAorICAobmV3IFRlc3QoIm1jbjA3NCIpKS5vaz0obWNybWhkLnRvU3RyaW5nKCkpLmVxdWFscygiZGlnaXRzPTAgZm9ybT1QTEFJTiBsb3N0RGlnaXRzPTAgcm91bmRpbmdNb2RlPVJPVU5EX0hBTEZfRE9XTiIpOworICAKKyAgKG5ldyBUZXN0KCJtY24wNzUiKSkub2s9KG1jcm1oZS50b1N0cmluZygpKS5lcXVhbHMoImRpZ2l0cz0wIGZvcm09UExBSU4gbG9zdERpZ2l0cz0wIHJvdW5kaW5nTW9kZT1ST1VORF9IQUxGX0VWRU4iKTsKKyAgCisgIChuZXcgVGVzdCgibWNuMDc2IikpLm9rPShtY3JtaHUudG9TdHJpbmcoKSkuZXF1YWxzKCJkaWdpdHM9MCBmb3JtPVBMQUlOIGxvc3REaWdpdHM9MCByb3VuZGluZ01vZGU9Uk9VTkRfSEFMRl9VUCIpOworICAKKyAgKG5ldyBUZXN0KCJtY24wNzciKSkub2s9KG1jcm11bi50b1N0cmluZygpKS5lcXVhbHMoImRpZ2l0cz0wIGZvcm09UExBSU4gbG9zdERpZ2l0cz0wIHJvdW5kaW5nTW9kZT1ST1VORF9VTk5FQ0VTU0FSWSIpOworICAKKyAgKG5ldyBUZXN0KCJtY24wNzgiKSkub2s9KG1jcm11LnRvU3RyaW5nKCkpLmVxdWFscygiZGlnaXRzPTAgZm9ybT1QTEFJTiBsb3N0RGlnaXRzPTAgcm91bmRpbmdNb2RlPVJPVU5EX1VQIik7CisgIAorICAKKyAgLy8gW2dldCBtZXRob2RzIHRlc3RlZCBhbHJlYWR5XQorICAKKyAgLy8gZXJyb3JzLi4uCisgIAorICB0cnl7Y2hlY2tkaWc6ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgtMSk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gJDEzMSl7ZT0kMTMxOworICAgZmxhZz0oZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiRGlnaXRzIHRvbyBzbWFsbDogLTEiKTsKKyAgfS8qY2hlY2tkaWcqLworICAobmV3IFRlc3QoIm1jbjEwMSIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tkaWdiaWc6ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgxMDAwMDAwMDAwKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAkMTMyKXtlPSQxMzI7CisgICBmbGFnPShlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJEaWdpdHMgdG9vIGxhcmdlOiAxMDAwMDAwMDAwIik7CisgIH0vKmNoZWNrZGlnYmlnKi8KKyAgKG5ldyBUZXN0KCJtY24xMDIiKSkub2s9ZmxhZzsKKyAgCisgIHRyeXtjaGVja2Zvcm06ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgwLDUpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICQxMzMpe2U9JDEzMzsKKyAgIGZsYWc9KGUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkJhZCBmb3JtIHZhbHVlOiA1Iik7CisgIH0vKmNoZWNrZm9ybSovCisgIChuZXcgVGVzdCgibWNuMTExIikpLm9rPWZsYWc7CisgIHRyeXtjaGVja2Zvcm1uZWc6ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgwLC0xKTsKKyAgIGZsYWc9ZmFsc2U7CisgIH13aGlsZShmYWxzZSk7fQorICBjYXRjaCAoamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAkMTM0KXtlPSQxMzQ7CisgICBmbGFnPShlLmdldE1lc3NhZ2UoKSkuZXF1YWxzKCJCYWQgZm9ybSB2YWx1ZTogLTEiKTsKKyAgfS8qY2hlY2tmb3JtbmVnKi8KKyAgKG5ldyBUZXN0KCJtY24xMTIiKSkub2s9ZmxhZzsKKyAgCisgIC8vIFtsb3N0RGlnaXRzIGNhbm5vdCBiZSBpbnZhbGlkXQorICAKKyAgdHJ5e2NoZWNrcm91bmQ6ZG97CisgICBuZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4sZmFsc2UsMTIpOworICAgZmxhZz1mYWxzZTsKKyAgfXdoaWxlKGZhbHNlKTt9CisgIGNhdGNoIChqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICQxMzUpe2U9JDEzNTsKKyAgIGZsYWc9KGUuZ2V0TWVzc2FnZSgpKS5lcXVhbHMoIkJhZCByb3VuZGluZ01vZGUgdmFsdWU6IDEyIik7CisgIH0vKmNoZWNrcm91bmQqLworICAobmV3IFRlc3QoIm1jbjEyMSIpKS5vaz1mbGFnOworICB0cnl7Y2hlY2tyb3VuZG5lZzpkb3sKKyAgIG5ldyBjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0KDAsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTixmYWxzZSwtMSk7CisgICBmbGFnPWZhbHNlOworICB9d2hpbGUoZmFsc2UpO30KKyAgY2F0Y2ggKGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gJDEzNil7ZT0kMTM2OworICAgZmxhZz0oZS5nZXRNZXNzYWdlKCkpLmVxdWFscygiQmFkIHJvdW5kaW5nTW9kZSB2YWx1ZTogLTEiKTsKKyAgfS8qY2hlY2tyb3VuZG5lZyovCisgIChuZXcgVGVzdCgibWNuMTIyIikpLm9rPWZsYWc7CisgIAorICBzdW1tYXJ5KCJNYXRoQ29udGV4dCIpOworICByZXR1cm47fQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiogVGVzdCBnZW5lcmFsIGFyaXRobWV0aWMgKGJhc2Ugb3BlcmF0b3JzKS4KKyAgKiA8cD5Vbmxpa2UgdGhlIHNwZWNpZmljIG1ldGhvZCB0ZXN0cywgdGhlc2UgdGVzdHMgd2VyZSByYW5kb21seQorICAqIGdlbmVyYXRlZCBieSBhbiBJQk0gT2JqZWN0IFJleHggcHJvY2VkdXJlLCB0aGVuIG1hbnVhbGx5IGNvcnJlY3RlZAorICAqIGZvciBrbm93biBkaWZmZXJlbmNlcyBmcm9tIEFOU0kgWDMtMjc0LiAgVGhlc2UgZGlmZmVyZW5jZXMgYXJlOgorICAqIDxvbD4KKyAgKiA8bGk+dGhlIHRyaWdnZXIgcG9pbnQgaW4gZXhwb25lbnRpYWwgbm90YXRpb24gaXMgZml4ZWQgaW4gQU5TSQorICAqICAgICBYMy0yNzQgYnV0IHZhcmllcyB3aXRoIERJR0lUUyBpbiBDbGFzc2ljIGFuZCBPYmplY3QgUmV4eAorICAqIDxsaT5zb21lIHRyYWlsaW5nIHplcm9zIHdlcmUgbWlzc2luZyAoZS5nLiwgMS4zICsgMUUtNjAgc2hvdWxkIHNob3cKKyAgKiAgICAgc2V2ZW4gdHJhaWxpbmcgemVyb3MpCisgICogPGxpPnRoZSBwb3dlciBvcGVyYXRvciBpcyBsZXNzIGFjY3VyYXRlIGluIE9iamVjdCBSZXh4CisgICogPGxpPkFOU0kgWDMtMjc0IFtlcnJhdGEgMTk5OV0gcm91bmRzIGlucHV0IG51bWJlcnMgdG8gRElHSVRTIChyYXRoZXIKKyAgKiAgICAgdGhhbiB0cnVuY2F0aW5nIHRvIERJR0lUUysxKS4KKyAgKiA8L29sPgorICAqLworIAorIHB1YmxpYyB2b2lkIGRpYWdtYXRoKCl7CisgIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgZGVmOworICBkZWY9Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ERUZBVUxUOworICBtYXRodGVzdCgxLGRlZiwiLTkzNzUyODQuNDIiLCI1NTE2Ljk5ODMyRSsyNzI3Njk4NCIsIjUuNTE2OTk4MzJFKzI3Mjc2OTg3IiwiLTUuNTE2OTk4MzJFKzI3Mjc2OTg3IiwiLTUuMTcyMzQyODRFKzI3Mjc2OTk0IiwiLTEuNjk5MzQ1MTZFLTI3Mjc2OTgxIiwiMCIsIi05Mzc1Mjg0LjQyIiwiNi43OTA1Nzc1MkUrNDEiKTsKKyAgbWF0aHRlc3QoMixkZWYsIi00MTAuODMyNzEwIiwiOTkuMzU4ODI0M0UtNTAyNzQwODYyIiwiLTQxMC44MzI3MTAiLCItNDEwLjgzMjcxMCIsIi00LjA4MTk4NTUwRS01MDI3NDA4NTgiLCItNC4xMzQ4Mzg2OEUrNTAyNzQwODYyIiwiIiwiIiwiMS4zNjk3Nzc4NkUrMjYiKTsKKyAgbWF0aHRlc3QoMyxkZWYsIjgwMDI1LjIzNDAiLCItOC4wMzA5NzU4MSIsIjgwMDE3LjIwMzAiLCI4MDAzMy4yNjUwIiwiLTY0MjY4MC43MTgiLCItOTk2NC41NzE2NyIsIi05OTY0IiwiNC41OTEwMjkxNiIsIjUuOTQ1NDQ1MTdFLTQwIik7CisgIG1hdGh0ZXN0KDQsZGVmLCI4MTA1MjAyMC4yIiwiLTQ2NDUyNTQ5NSIsIi0zODM0NzM0NzUiLCI1NDU1Nzc1MTUiLCItMy43NjUwNzI5OEUrMTYiLCItMC4xNzQ0ODM0NyIsIjAiLCI4MTA1MjAyMC4yIiwiIik7CisgIG1hdGh0ZXN0KDUsZGVmLCI3MTUuMDY5Mjk0RS0yNjkyMzE1MSIsIjg1LjQ0MDQxMjhFKzc5NjM4ODU1NyIsIjguNTQ0MDQxMjhFKzc5NjM4ODU1OCIsIi04LjU0NDA0MTI4RSs3OTYzODg1NTgiLCI2LjEwOTU4MTU3RSs3Njk0NjU0MTAiLCI4LjM2OTIxNjI4RS04MjMzMTE3MDgiLCIwIiwiNy4xNTA2OTI5NEUtMjY5MjMxNDkiLCI0Ljg4ODAyMjEzRS0yNDIzMDgzMzQiKTsKKyAgbWF0aHRlc3QoNixkZWYsIi0yMTk3MTU3NS4wRSszMTQ1NDQ0MSIsIi03MDk0NDk2MC4zRSsxMTEyMzgyMjEiLCItNy4wOTQ0OTYwM0UrMTExMjM4MjI4IiwiNy4wOTQ0OTYwM0UrMTExMjM4MjI4IiwiMS41NTg3NzI1MkUrMTQyNjkyNjc3IiwiMy4wOTY5ODg4NEUtNzk3ODM3ODEiLCIwIiwiLTIuMTk3MTU3NTBFKzMxNDU0NDQ4IiwiLTQuMDQ1NDk1MDJFLTIyMDE4MTEzOSIpOworICBtYXRodGVzdCg3LGRlZiwiNjgyLjI1MzE2IiwiNTQ0NzAxODUuNiIsIjU0NDcwODY3LjkiLCItNTQ0Njk1MDMuNCIsIjMuNzE2MjQ1NjNFKzEwIiwiMC4wMDAwMTI1MjUyNTg2IiwiMCIsIjY4Mi4yNTMxNiIsIjMuNDg1Nzg2OTlFKzE1NDM2NTU0MSIpOworICBtYXRodGVzdCg4LGRlZiwiLTI1NzU4Njc1Ny4iLCIyMDgyODg4LjcxIiwiLTI1NTUwMzg2OCIsIi0yNTk2Njk2NDYiLCItNS4zNjUyNDU0OEUrMTQiLCItMTIzLjY2ODAzNiIsIi0xMjMiLCItMTM5MTQ0NS42NyIsIi0xLjI2ODc5NTE1RSsxNzUxOTAyMCIpOworICBtYXRodGVzdCg5LGRlZiwiMzE5NTc3NTQwLkUrMjQyNTk5NzYxIiwiNjAuNzEyNDU2MSIsIjMuMTk1Nzc1NDBFKzI0MjU5OTc2OSIsIjMuMTk1Nzc1NDBFKzI0MjU5OTc2OSIsIjEuOTQwMjMzNzRFKzI0MjU5OTc3MSIsIjUuMjYzNzg4NjlFKzI0MjU5OTc2NyIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxMCxkZWYsIi0xMzc2OTk3Ny4wIiwiMjQzNzEuMzM4MSIsIi0xMzc0NTYwNS43IiwiLTEzNzk0MzQ4LjMiLCItMy4zNTU5Mjc2NUUrMTEiLCItNTY1LjAwNzAxNSIsIi01NjUiLCItMTcwLjk3MzUiLCItOC43MzczNDAwMUUrMTczOTgyIik7CisgIG1hdGh0ZXN0KDExLGRlZiwiLTQ3NS40MzQ5NzJFLTcyNTQ2NDMxMSIsIi0zLjIyMjE0MDY2RS04NjU0NzY4MzYiLCItNC43NTQzNDk3MkUtNzI1NDY0MzA5IiwiLTQuNzU0MzQ5NzJFLTcyNTQ2NDMwOSIsIiIsIjEuNDc1NTI1MTlFKzE0MDAxMjUyNyIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxMixkZWYsIjg0Mi4wMTI1MCIsIjE5NzE5OTg5MyIsIjE5NzIwMDczNSIsIi0xOTcxOTkwNTEiLCIxLjY2MDQ0Nzc1RSsxMSIsIjAuMDAwMDA0MjY5ODQyNTgiLCIwIiwiODQyLjAxMjUwIiwiNy4wMDY3NDE2NEUrNTc2ODcyNTAyIik7CisgIG1hdGh0ZXN0KDEzLGRlZiwiNTcyLjE3MzEwM0UrMjgwMTI4NDI4IiwiLTcxNDAuMTk0MjgiLCI1LjcyMTczMTAzRSsyODAxMjg0MzAiLCI1LjcyMTczMTAzRSsyODAxMjg0MzAiLCItNC4wODU0MjcxMkUrMjgwMTI4NDM0IiwiLTguMDEzNDEwODVFKzI4MDEyODQyNiIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxNCxkZWYsIjY3NDIzNS45NTRFKzQ3NjEzNTI5MSIsIjk2ODQuODIyNDUiLCI2Ljc0MjM1OTU0RSs0NzYxMzUyOTYiLCI2Ljc0MjM1OTU0RSs0NzYxMzUyOTYiLCI2LjUyOTg1NTUwRSs0NzYxMzUzMDAiLCI2Ljk2MTc3OTE5RSs0NzYxMzUyOTIiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMTUsZGVmLCItMzYwNTU3LjkyMUUrNDM3MTE2NTE0IiwiOTMwNDI4ODUwIiwiLTMuNjA1NTc5MjFFKzQzNzExNjUxOSIsIi0zLjYwNTU3OTIxRSs0MzcxMTY1MTkiLCItMy4zNTQ3MzQ5MkUrNDM3MTE2NTI4IiwiLTMuODc1MTc5OTNFKzQzNzExNjUxMCIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxNixkZWYsIjk1NzE2NTkxOEUtMzk0NTk1NzA1IiwiMTY3Ni41OTA3M0UtODI5NjE4OTQ0IiwiOS41NzE2NTkxOEUtMzk0NTk1Njk3IiwiOS41NzE2NTkxOEUtMzk0NTk1Njk3IiwiIiwiNS43MDkwMDE2MUUrNDM1MDIzMjQ0IiwiIiwiIiwiOS4xNjE2NjU5NUUtNzg5MTkxMzkzIik7CisgIG1hdGh0ZXN0KDE3LGRlZiwiLTI2MTA4NjQuNDAiLCIzMTI0NTkxMi43IiwiMjg2MzUwNDguMyIsIi0zMzg1Njc3Ny4xIiwiLTguMTU3ODg0MTFFKzEzIiwiLTAuMDgzNTU4NTg5NyIsIjAiLCItMjYxMDg2NC40MCIsIi0zLjEyMDA4OTA1RSsyMDA0OTgyODQiKTsKKyAgbWF0aHRlc3QoMTgsZGVmLCI5NTkuNTQ4NDYxIiwiOTguOTk0NTc3RSs3NzY3NzU0MjYiLCI5Ljg5OTQ1NzcwRSs3NzY3NzU0MjciLCItOS44OTk0NTc3MEUrNzc2Nzc1NDI3IiwiOS40OTkwMDk0MEUrNzc2Nzc1NDMwIiwiOS42OTI5Mzk2NUUtNzc2Nzc1NDI2IiwiMCIsIjk1OS41NDg0NjEiLCI2LjYxNzEyMTg1RSsyOSIpOworICBtYXRodGVzdCgxOSxkZWYsIi00MTA4NS4wMjY4IiwiMzExNTQ3Ny42MSIsIjMwNzQzOTIuNTgiLCItMzE1NjU2Mi42NCIsIi0xLjI3OTk5NDgxRSsxMSIsIi0wLjAxMzE4NzM5MjciLCIwIiwiLTQxMDg1LjAyNjgiLCI0LjczODQ0MTczRSsxNDM3MzgyOSIpOworICBtYXRodGVzdCgyMCxkZWYsIi03MjM0MjAyODUuIiwiMjY4MTY2MC4zNSIsIi03MjA3Mzg2MjUiLCItNzI2MTAxOTQ1IiwiLTEuOTM5OTY3NDlFKzE1IiwiLTI2OS43NjU4MTMiLCItMjY5IiwiLTIwNTM2NTAuODUiLCI0LjE0MzI0MTEzRSsyMzc1Nzg3MyIpOworICBtYXRodGVzdCgyMSxkZWYsIjYzNTQyMDE4LjBFLTgxNzczMjIzMCIsIi04ODM2MjQzLjIyIiwiLTg4MzYyNDMuMjIiLCI4ODM2MjQzLjIyIiwiLTUuNjE0NzI3MjZFLTgxNzczMjIxNiIsIi03LjE5MTA2NzExRS04MTc3MzIyMzAiLCIwIiwiNi4zNTQyMDE4MEUtODE3NzMyMjIzIiwiIik7CisgIG1hdGh0ZXN0KDIyLGRlZiwiLTk2MDUxLjcxMDgiLCItMjkxMjAxLjk1NSIsIi0zODcyNTMuNjY2IiwiMTk1MTUwLjI0NCIsIjIuNzk3MDQ0NjBFKzEwIiwiMC4zMjk4NDU2OTQiLCIwIiwiLTk2MDUxLjcxMDgiLCIzLjUzNjE3MTUzRS0xNDUwOTE2Iik7CisgIG1hdGh0ZXN0KDIzLGRlZiwiMTA4NDkwLjg1MyIsIjkxNjg1OTk2LjUiLCI5MTc5NDQ4Ny40IiwiLTkxNTc3NTA1LjciLCI5Ljk0NzA5MTk3RSsxMiIsIjAuMDAxMTgzMjg3MDYiLCIwIiwiMTA4NDkwLjg1MyIsIjYuOTgxMjQyNjVFKzQ2MTY3NTAzOCIpOworICBtYXRodGVzdCgyNCxkZWYsIi0yNzQ4OS4xNzM1IiwiLTk4MzU4MzUuNEUtNTA2NDExNjQ5IiwiLTI3NDg5LjE3MzUiLCItMjc0ODkuMTczNSIsIjIuNzAzNzg5ODZFLTUwNjQxMTYzOCIsIjIuNzk0Nzk4MDRFKzUwNjQxMTY0NiIsIiIsIiIsIjQuMDU4NjY0NzJFLTQ1Iik7CisgIG1hdGh0ZXN0KDI1LGRlZiwiLTg5MjIwNDA2LjYiLCI5OTMzOTEuMDA4RS02MTEwNDExNzUiLCItODkyMjA0MDYuNiIsIi04OTIyMDQwNi42IiwiLTguODYzMDc0OTZFLTYxMTA0MTE2MiIsIi04Ljk4MTM5ODY1RSs2MTEwNDExNzYiLCIiLCIiLCIzLjE5NjI1OTEzRSs3OSIpOworICBtYXRodGVzdCgyNixkZWYsIjQuNzU1MDIwMjAiLCItMTcwODkxNDQuOSIsIi0xNzA4OTE0MC4yIiwiMTcwODkxNDkuNyIsIi04MTI1OTIyOS4yIiwiLTIuNzgyNDc5ODlFLTciLCIwIiwiNC43NTUwMjAyMCIsIjEuMDYzMDE5MUUtMTE1NzE5NTUiKTsKKyAgbWF0aHRlc3QoMjcsZGVmLCI2ODAyNzkxNi4yIiwiLTc5Njg4My44MzkiLCI2NzIzMTAzMi40IiwiNjg4MjQ4MDAuMCIsIi01LjQyMTAzNDcwRSsxMyIsIi04NS4zNjc0MTg1IiwiLTg1IiwiMjkyNzg5Ljg4NSIsIjguMjk0MTUzNzRFLTYyNDE3NDQiKTsKKyAgbWF0aHRlc3QoMjgsZGVmLCItOC4wMTk2OTQzOUUrNzg4NjA1NDc4IiwiOTIxNTQxNTYuMCIsIi04LjAxOTY5NDM5RSs3ODg2MDU0NzgiLCItOC4wMTk2OTQzOUUrNzg4NjA1NDc4IiwiLTcuMzkwNDgxNjhFKzc4ODYwNTQ4NiIsIi04LjcwMjQ3NzE3RSs3ODg2MDU0NzAiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMjksZGVmLCItODAxMi45ODM0MSIsIjk2MTg4Ljg2NTEiLCI4ODE3NS44ODE3IiwiLTEwNDIwMS44NDkiLCItNzcwNzU5NzgwIiwiLTAuMDgzMzA0Njg4MSIsIjAiLCItODAxMi45ODM0MSIsIi0xLjE2MDEwMTU2RSszNzU1MDIiKTsKKyAgbWF0aHRlc3QoMzAsZGVmLCIyMTc2MTQ3NkUrNTkyMzMwNjc3IiwiLTkuNzA3NDQ1MDYiLCIyLjE3NjE0NzYwRSs1OTIzMzA2ODQiLCIyLjE3NjE0NzYwRSs1OTIzMzA2ODQiLCItMi4xMTI0ODMzM0UrNTkyMzMwNjg1IiwiLTIuMjQxNzMwNTNFKzU5MjMzMDY4MyIsIiIsIiIsIiIpOworICBtYXRodGVzdCgzMSxkZWYsIi05ODQwNzc4LjUxIiwiLTE3OTA3LjIxOSIsIi05ODU4Njg1LjczIiwiLTk4MjI4NzEuMjkiLCIxLjc2MjIwOTc2RSsxMSIsIjU0OS41NDI1MzQiLCI1NDkiLCItOTcxNS4yNzkiLCItNi42Mjk5NzQzN0UtMTI1MjI1Iik7CisgIG1hdGh0ZXN0KDMyLGRlZiwiLTQuMTA5NzYxNCIsIi04MTkuMjI1Nzc2RS0xNDUyMTQ3NTEiLCItNC4xMDk3NjE0MCIsIi00LjEwOTc2MTQwIiwiMy4zNjY4MjI0N0UtMTQ1MjE0NzQ4IiwiNS4wMTY2NDA3NEUrMTQ1MjE0NzQ4IiwiIiwiIiwiMC4wMDAwMTIyODc2MDE4Iik7CisgIG1hdGh0ZXN0KDMzLGRlZiwiLTQ0OC44ODA5ODUiLCItMzk0LjA4NzM3NEUtNDQyNTExNDM1IiwiLTQ0OC44ODA5ODUiLCItNDQ4Ljg4MDk4NSIsIjEuNzY4OTgzMjlFLTQ0MjUxMTQzMCIsIjEuMTM5MDM5MjVFKzQ0MjUxMTQzNSIsIiIsIiIsIjIuNDYzMDYwOTlFLTExIik7CisgIG1hdGh0ZXN0KDM0LGRlZiwiNzc5LjQ0NTMwNEUrODgyNjg4NTQ0IiwiLTc5Nzg2ODUxOSIsIjcuNzk0NDUzMDRFKzg4MjY4ODU0NiIsIjcuNzk0NDUzMDRFKzg4MjY4ODU0NiIsIi02LjIxODk0ODcwRSs4ODI2ODg1NTUiLCItOS43NjkwOTQ2RSs4ODI2ODg1MzciLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMzUsZGVmLCI3OTk5OTU0NzciLCItNi4yMzY3NTIwOEUrMTU2MzA5NDQwIiwiLTYuMjM2NzUyMDhFKzE1NjMwOTQ0MCIsIjYuMjM2NzUyMDhFKzE1NjMwOTQ0MCIsIi00Ljk4OTM3MzQ2RSsxNTYzMDk0NDkiLCItMS4yODI3MTE2OUUtMTU2MzA5NDMyIiwiMCIsIjc5OTk5NTQ3NyIsIjMuODE0ODI2NjdFLTU0Iik7CisgIG1hdGh0ZXN0KDM2LGRlZiwiLTUxOTMyLjgxNzAiLCI1OTE4NDAyNzVFLTI3ODQ4MDI4OSIsIi01MTkzMi44MTcwIiwiLTUxOTMyLjgxNzAiLCItMy4wNzM1OTMyN0UtMjc4NDgwMjc2IiwiLTguNzc0ODAyOEUrMjc4NDgwMjg0IiwiIiwiIiwiMS45NjE3ODQ0M0UrMjgiKTsKKyAgbWF0aHRlc3QoMzcsZGVmLCI3MC4zNTUyMzkyIiwiLTQyMjg2NTYuNzMiLCItNDIyODU4Ni4zOCIsIjQyMjg3MjcuMDkiLCItMjk3NTA4MTU2IiwiLTAuMDAwMDE2NjM3NzI3NyIsIjAiLCI3MC4zNTUyMzkyIiwiOS4xNDc0MjM4MkUtNzgxMTU4NCIpOworICBtYXRodGVzdCgzOCxkZWYsIjE1ODgzNTkuMzQiLCItMTIyMzI3OTkuMiIsIi0xMDY0NDQzOS45IiwiMTM4MjExNTguNSIsIi0xLjk0MzAwODA5RSsxMyIsIi0wLjEyOTg0NDMwNyIsIjAiLCIxNTg4MzU5LjM0IiwiMS41NjkxMDA4NkUtNzU4NTQ5NjAiKTsKKyAgbWF0aHRlc3QoMzksZGVmLCIyODQyLjE2MjA2IiwiLTMuMjMyMzQzNDUiLCIyODM4LjkyOTcyIiwiMjg0NS4zOTQ0MCIsIi05MTg2Ljg0MzkyIiwiLTg3OS4yODgzODgiLCItODc5IiwiMC45MzIxNjc0NSIsIjQuMzU1NjU1MTRFLTExIik7CisgIG1hdGh0ZXN0KDQwLGRlZiwiMjk5NjAuMjMwNSIsIjQ1LjI3MzU3NDdFLTk1MjA1NDc1IiwiMjk5NjAuMjMwNSIsIjI5OTYwLjIzMDUiLCIxLjM1NjQwNjczRS05NTIwNTQ2OSIsIjYuNjE3NTk3NzNFKzk1MjA1NDc3IiwiIiwiIiwiMi40MTM5MzZFKzIyIik7CisgIG1hdGh0ZXN0KDQxLGRlZiwiMjkxNjU2NS43NyIsIjExNTE5MzUuNDNFLTc4NzExODcyNCIsIjI5MTY1NjUuNzciLCIyOTE2NTY1Ljc3IiwiMy4zNTk2OTU0NEUtNzg3MTE4NzEyIiwiMi41MzE4ODMwM0UrNzg3MTE4NzI0IiwiIiwiIiwiMjkxNjU2NS43NyIpOworICBtYXRodGVzdCg0MixkZWYsIi01MjcyMzAxMi45RS05NjcxNDM3ODciLCI3OS40MDg4MjM3IiwiNzkuNDA4ODIzNyIsIi03OS40MDg4MjM3IiwiLTQuMTg2NjcyNDRFLTk2NzE0Mzc3OCIsIi02LjYzOTQ0MDExRS05NjcxNDM3ODIiLCIwIiwiLTUuMjcyMzAxMjlFLTk2NzE0Mzc4MCIsIiIpOworICBtYXRodGVzdCg0MyxkZWYsIi0xNjc0NzM0NjUiLCI3OTM2NDYuNTk3IiwiLTE2NjY3OTgxOSIsIi0xNjgyNjcxMTIiLCItMS4zMjkxNDc0NkUrMTQiLCItMjExLjAxNzY4MiIsIi0yMTEiLCItMTQwMzMuMDMzIiwiLTEuMTkwNTM3ODlFKzY1MjY5MTAiKTsKKyAgbWF0aHRlc3QoNDQsZGVmLCItMzE3NjkwNzEuMCIsIjEzMy40MzYwIiwiLTMxNzY4OTM3LjYiLCItMzE3NjkyMDQuNCIsIi00LjIzOTEzNzc2RSs5IiwiLTIzODA4NC43MDciLCItMjM4MDg0IiwiLTk0LjM3NjAiLCItNS44NDI1MjQzMkUrOTk3Iik7CisgIG1hdGh0ZXN0KDQ1LGRlZiwiNDU5NjAuNjM4MyIsIi05MzM1Mi43NDY4IiwiLTQ3MzkyLjEwODUiLCIxMzkzMTMuMzg1IiwiLTQuMjkwNTUxODNFKzkiLCItMC40OTIzMzMwMDQiLCIwIiwiNDU5NjAuNjM4MyIsIjEuODgzMzUzMjNFLTQzNTI0OCIpOworICBtYXRodGVzdCg0NixkZWYsIjYwNi4xNzU2NDgiLCI1LjI4NTI4NDU4RS05ODE5ODM2MjAiLCI2MDYuMTc1NjQ4IiwiNjA2LjE3NTY0OCIsIjMuMjAzODEwODFFLTk4MTk4MzYxNyIsIjEuMTQ2OTEyMDNFKzk4MTk4MzYyMiIsIiIsIiIsIjguMTg0NTA1MTZFKzEzIik7CisgIG1hdGh0ZXN0KDQ3LGRlZiwiMTcxNTc4LjYxN0UrNjQzMDA2MTEwIiwiLTQwNzc3NC4yOTMiLCIxLjcxNTc4NjE3RSs2NDMwMDYxMTUiLCIxLjcxNTc4NjE3RSs2NDMwMDYxMTUiLCItNi45OTY1MzQ5MkUrNjQzMDA2MTIwIiwiLTQuMjA3Njg1OTdFKzY0MzAwNjEwOSIsIiIsIiIsIiIpOworICBtYXRodGVzdCg0OCxkZWYsIi02ODIyODYzMzIuIiwiLTQ2NC44NzE2OTkiLCItNjgyMjg2Nzk3IiwiLTY4MjI4NTg2NyIsIjMuMTcxNzU2MDZFKzExIiwiMTQ2NzY4Ny4zOSIsIjE0Njc2ODciLCItMTgyLjcwOTc4NyIsIi0xLjYwNTA4NDNFLTQxMDgiKTsKKyAgbWF0aHRlc3QoNDksZGVmLCI0OTIwODguNDI4IiwiNjUzLjcyMTcwIiwiNDkyNzQyLjE1MCIsIjQ5MTQzNC43MDYiLCIzMjE2ODg4ODQiLCI3NTIuNzQ5MTEiLCI3NTIiLCI0ODkuNzA5NjAiLCIzLjk0NjU4NTk2RSszNzIyIik7CisgIG1hdGh0ZXN0KDUwLGRlZiwiNzQzMDM3ODIuNSIsIjExNDEuNjgwNTgiLCI3NDMwNDkyNC4yIiwiNzQzMDI2NDAuOCIsIjguNDgzMTE4NTVFKzEwIiwiNjUwODIuODEyIiwiNjUwODIiLCI5MjYuOTkyNDQiLCI0Ljk0ODQ5ODY5RSs4OTg4Iik7CisgIG1hdGh0ZXN0KDUxLGRlZiwiNzQuNzc5NDA4NEUrMTE5Mzc1MzI5IiwiLTM0Nzk5MzU1LjYiLCI3LjQ3Nzk0MDg0RSsxMTkzNzUzMzAiLCI3LjQ3Nzk0MDg0RSsxMTkzNzUzMzAiLCItMi42MDIyNzUyMkUrMTE5Mzc1MzM4IiwiLTIuMTQ4ODczMzdFKzExOTM3NTMyMyIsIiIsIiIsIiIpOworICBtYXRodGVzdCg1MixkZWYsIi05NDMyLjA4MzY5IiwiMzM3MzUuNTA1OCIsIjI0MzAzLjQyMjEiLCItNDMxNjcuNTg5NSIsIi0zMTgxOTYxMTQiLCItMC4yNzk1ODkyMTgiLCIwIiwiLTk0MzIuMDgzNjkiLCIyLjMwOTU2N0UrMTM0MDg3Iik7CisgIG1hdGh0ZXN0KDUzLGRlZiwiNDI0OTE5OC43OEUtMTEyNDMzMTU1IiwiNDE4NjczMDUxLiIsIjQxODY3MzA1MSIsIi00MTg2NzMwNTEiLCIxLjc3OTAyNTAyRS0xMTI0MzMxNDAiLCIxLjAxNDkyMDU0RS0xMTI0MzMxNTciLCIwIiwiNC4yNDkxOTg3OEUtMTEyNDMzMTQ5IiwiIik7CisgIG1hdGh0ZXN0KDU0LGRlZiwiLTI5NjA5MzMuMDIiLCItMjA3OTMzLjM4IiwiLTMxNjg4NjYuNDAiLCItMjc1Mjk5OS42NCIsIjYuMTU2NzY4MTFFKzExIiwiMTQuMjM5ODE1OCIsIjE0IiwiLTQ5ODY1LjcwIiwiLTIuNzU2ODAzOTdFLTEzNDU2MjQiKTsKKyAgbWF0aHRlc3QoNTUsZGVmLCIyOTMxNy43NTE5RSs5NDU2MDAwMzUiLCIxLjQzNTU1NzUwIiwiMi45MzE3NzUxOUUrOTQ1NjAwMDM5IiwiMi45MzE3NzUxOUUrOTQ1NjAwMDM5IiwiNC4yMDg3MzE4NkUrOTQ1NjAwMDM5IiwiMi4wNDIyNTU0OUUrOTQ1NjAwMDM5IiwiIiwiIiwiMi45MzE3NzUxOUUrOTQ1NjAwMDM5Iik7CisgIG1hdGh0ZXN0KDU2LGRlZiwiLTUxLjE2OTM3NzAiLCItNjM4MDU1LjQxNCIsIi02MzgxMDYuNTgzIiwiNjM4MDA0LjI0NSIsIjMyNjQ4ODk4LjAiLCIwLjAwMDA4MDE5NTgxOTgiLCIwIiwiLTUxLjE2OTM3NzAiLCItMy40ODI2NjA3NUUtMTA5MDQ0MyIpOworICBtYXRodGVzdCg1NyxkZWYsIi03NTYzNDMwNTUuIiwiLTY4LjkyNDgzNDRFKzIxNzEwMDk3NSIsIi02Ljg5MjQ4MzQ0RSsyMTcxMDA5NzYiLCI2Ljg5MjQ4MzQ0RSsyMTcxMDA5NzYiLCI1LjIxMzA4MTk4RSsyMTcxMDA5ODUiLCIxLjA5NzM0NDc1RS0yMTcxMDA5NjgiLCIwIiwiLTc1NjM0MzA1NSIsIi03LjA2MjY1ODk3RS02MyIpOworICBtYXRodGVzdCg1OCxkZWYsIjI1MzguODA0MDZFKzY5NDE4NTE5NyIsIi0zMzg2NDk5LjY1IiwiMi41Mzg4MDQwNkUrNjk0MTg1MjAwIiwiMi41Mzg4MDQwNkUrNjk0MTg1MjAwIiwiLTguNTk3NjU5MDZFKzY5NDE4NTIwNiIsIi03LjQ5NjgzODM5RSs2OTQxODUxOTMiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNTksZGVmLCItNTQzNDQuMDY3MiIsIi04MDg2LjQ1MjM1IiwiLTYyNDMwLjUxOTYiLCItNDYyNTcuNjE0OSIsIjQzOTQ1MDcxMCIsIjYuNzIwMzg0MjciLCI2IiwiLTU4MjUuMzUzMTAiLCIzLjYyOTE2ODYxRS0zODI4OSIpOworICBtYXRodGVzdCg2MCxkZWYsIjMuMzE2MDAwNTQiLCIyMTc0ODE2NDgiLCIyMTc0ODE2NTEiLCItMjE3NDgxNjQ1IiwiNzIxMTY5MjYyIiwiMS41MjQ3MjY2RS04IiwiMCIsIjMuMzE2MDAwNTQiLCIzLjczMTM0OTY5RSsxMTMyMjQxMTkiKTsKKyAgbWF0aHRlc3QoNjEsZGVmLCI2ODE4MzIuNjcxIiwiMzIwMzQxLjE2MUUrNjI5NDY3NTYwIiwiMy4yMDM0MTE2MUUrNjI5NDY3NTY1IiwiLTMuMjAzNDExNjFFKzYyOTQ2NzU2NSIsIjIuMTg0MTkwNjlFKzYyOTQ2NzU3MSIsIjIuMTI4NDU3ODlFLTYyOTQ2NzU2MCIsIjAiLCI2ODE4MzIuNjcxIiwiMy4xNjk4MTEzOUUrMTciKTsKKyAgbWF0aHRlc3QoNjIsZGVmLCI4MzI2ODk0ODEiLCIzNDgwNDAwMjRFLTg4MjEyMjUwMSIsIjgzMjY4OTQ4MSIsIjgzMjY4OTQ4MSIsIjIuODk4MDkyNjdFLTg4MjEyMjQ4NCIsIjIuMzkyNTEwN0UrODgyMTIyNTAxIiwiIiwiIiwiNS43NzM2MzM4MUUrMjYiKTsKKyAgbWF0aHRlc3QoNjMsZGVmLCIxNC41NTEyMzI2RSsyNTc1MDA4MTEiLCI2MC45OTc5NTc3RS02NDczMTQ3MjQiLCIxLjQ1NTEyMzI2RSsyNTc1MDA4MTIiLCIxLjQ1NTEyMzI2RSsyNTc1MDA4MTIiLCI4Ljg3NTk1NDcxRS0zODk4MTM5MTEiLCIyLjM4NTUyNzg0RSs5MDQ4MTU1MzQiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNjQsZGVmLCItOTAxLjI3ODg0NCIsIjQ0OTQ2MTY2Ny4iLCI0NDk0NjA3NjYiLCItNDQ5NDYyNTY4IiwiLTQuMDUwOTAyOTJFKzExIiwiLTAuMDAwMDAyMDA1MjQwNzQiLCIwIiwiLTkwMS4yNzg4NDQiLCIiKTsKKyAgbWF0aHRlc3QoNjUsZGVmLCItNS4zMjYyNzY3NSIsIi03Mzg4NjAyMTZFLTIzODI3MzIyNCIsIi01LjMyNjI3Njc1IiwiLTUuMzI2Mjc2NzUiLCIzLjkzNTM3Mzk5RS0yMzgyNzMyMTUiLCI3LjIwODc3NDU5RSsyMzgyNzMyMTUiLCIiLCIiLCItMC4wMDAwMDgyMjMwNjgzOCIpOworICBtYXRodGVzdCg2NixkZWYsIi01MDUzODM0NjMuIiwiMy4xODc1NjMyOCIsIi01MDUzODM0NjAiLCItNTA1MzgzNDY2IiwiLTEuNjEwOTQxNzdFKzkiLCItMTU4NTQ4NTI3IiwiLTE1ODU0ODUyNyIsIi0wLjIzNjcxMTQ0IiwiLTEuMjkwODEyMjZFKzI2Iik7CisgIG1hdGh0ZXN0KDY3LGRlZiwiNzY5MjQxLjQ0RS03MjA5MjczMjAiLCItMTQ1MzgyNjMxLiIsIi0xNDUzODI2MzEiLCIxNDUzODI2MzEiLCItMS4xMTgzNDM0NEUtNzIwOTI3MzA2IiwiLTUuMjkxMTUwOTFFLTcyMDkyNzMyMyIsIjAiLCI3LjY5MjQxNDRFLTcyMDkyNzMxNSIsIiIpOworICBtYXRodGVzdCg2OCxkZWYsIi02LjQ1MDM4OTEwIiwiNTY3MzYuNDQxMUUrNDQwOTM3MTY3IiwiNS42NzM2NDQxMUUrNDQwOTM3MTcxIiwiLTUuNjczNjQ0MTFFKzQ0MDkzNzE3MSIsIi0zLjY1OTcyMTIxRSs0NDA5MzcxNzIiLCItMS4xMzY5MDQwN0UtNDQwOTM3MTcxIiwiMCIsIi02LjQ1MDM4OTEwIiwiNzIwMzAuMzQyMSIpOworICBtYXRodGVzdCg2OSxkZWYsIjU4LjQ3MjEwNzUiLCItNzEyMTg2ODI5IiwiLTcxMjE4Njc3MSIsIjcxMjE4Njg4NyIsIi00LjE2NDMwNjQ4RSsxMCIsIi04LjIxMDIyMDI4RS04IiwiMCIsIjU4LjQ3MjEwNzUiLCIiKTsKKyAgbWF0aHRlc3QoNzAsZGVmLCI4MjQ0LjA4MzU3IiwiMjQ1LjMwMjgyOEUrNjUyMDA3OTU5IiwiMi40NTMwMjgyOEUrNjUyMDA3OTYxIiwiLTIuNDUzMDI4MjhFKzY1MjAwNzk2MSIsIjIuMDIyMjk3MDFFKzY1MjAwNzk2NSIsIjMuMzYwNzc4MDRFLTY1MjAwNzk1OCIsIjAiLCI4MjQ0LjA4MzU3IiwiNjc5NjQ5MTMuOSIpOworICBtYXRodGVzdCg3MSxkZWYsIjQ1LjUzNjEzOTciLCItNzY1NzkwNjMuOSIsIi03NjU3OTAxOC40IiwiNzY1NzkxMDkuNCIsIi0zLjQ4NzExNDk1RSs5IiwiLTUuOTQ2MjkwOThFLTciLCIwIiwiNDUuNTM2MTM5NyIsIjMuOTgzMzUzNzRFLTEyNjk5NTM2NyIpOworICBtYXRodGVzdCg3MixkZWYsIjU5NDQyMC41NEUrNjg1MjYzMDM5IiwiLTk1MjQyMC4xNzkiLCI1Ljk0NDIwNTQwRSs2ODUyNjMwNDQiLCI1Ljk0NDIwNTQwRSs2ODUyNjMwNDQiLCItNS42NjEzODExN0UrNjg1MjYzMDUwIiwiLTYuMjQxMTU4NjFFKzY4NTI2MzAzOCIsIiIsIiIsIiIpOworICBtYXRodGVzdCg3MyxkZWYsIi04NDEzMTA3MDEuIiwiOTM5ODExMC40IiwiLTgzMTkxMjU5MSIsIi04NTA3MDg4MTEiLCItNy45MDY3MzA4NUUrMTUiLCItODkuNTE5MTMzNyIsIi04OSIsIi00ODc4ODc1LjQiLCIxLjMwMDAxNDY2RSs4Mzg3NzcyMiIpOworICBtYXRodGVzdCg3NCxkZWYsIjkwNDM5MjE0NkUtMTQwMTAwMjc2IiwiMTY4MTE2MDkzLiIsIjE2ODExNjA5MyIsIi0xNjgxMTYwOTMiLCIxLjUyMDQyODc0RS0xNDAxMDAyNTkiLCI1LjM3OTU2OTE0RS0xNDAxMDAyNzYiLCIwIiwiOS4wNDM5MjE0NkUtMTQwMTAwMjY4IiwiIik7CisgIG1hdGh0ZXN0KDc1LGRlZiwiLTkwNzMyNDc5MkUrNjg1NTM5NjcwIiwiLTE1LjY5MDIxNzEiLCItOS4wNzMyNDc5MkUrNjg1NTM5Njc4IiwiLTkuMDczMjQ3OTJFKzY4NTUzOTY3OCIsIjEuNDIzNjEyMzBFKzY4NTUzOTY4MCIsIjUuNzgyNzQyMTFFKzY4NTUzOTY3NyIsIiIsIiIsIiIpOworICBtYXRodGVzdCg3NixkZWYsIjk4NzAxMzYwNi4iLCItMjY4MTguMzU3MkUrNTYwOTA3NDQyIiwiLTIuNjgxODM1NzJFKzU2MDkwNzQ0NiIsIjIuNjgxODM1NzJFKzU2MDkwNzQ0NiIsIi0yLjY0NzAwODM0RSs1NjA5MDc0NTUiLCItMy42ODAzNjU2NUUtNTYwOTA3NDM4IiwiMCIsIjk4NzAxMzYwNiIsIjEuMDM5OTkzNEUtMjciKTsKKyAgbWF0aHRlc3QoNzcsZGVmLCItNzQxMzE3NTY0IiwiNjMwLjI0MTUzMEUtMjEyNzgyOTQ2IiwiLTc0MTMxNzU2NCIsIi03NDEzMTc1NjQiLCItNC42NzIwOTExNkUtMjEyNzgyOTM1IiwiLTEuMTc2MjQzNkUrMjEyNzgyOTUyIiwiIiwiIiwiMS42NTk2ODUyN0UrNTMiKTsKKyAgbWF0aHRlc3QoNzgsZGVmLCI2MTg2NzkwNy4yIiwiLTEzOTIwNDY3MCIsIi03NzMzNjc2MyIsIjIwMTA3MjU3NyIsIi04LjYxMjMwMTYxRSsxNSIsIi0wLjQ0NDQzODQ0NiIsIjAiLCI2MTg2NzkwNy4yIiwiIik7CisgIG1hdGh0ZXN0KDc5LGRlZiwiLTI3My42MjI3NDNFKzUzMTI4MjcxNyIsIi00NTQzLjY4Njg0IiwiLTIuNzM2MjI3NDNFKzUzMTI4MjcxOSIsIi0yLjczNjIyNzQzRSs1MzEyODI3MTkiLCIxLjI0MzI1NjA2RSs1MzEyODI3MjMiLCI2LjAyMjA0MjI5RSs1MzEyODI3MTUiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoODAsZGVmLCItMzgzNTg4OTQ5LiIsIi00Mjg2NDA1ODMuIiwiLTgxMjIyOTUzMiIsIjQ1MDUxNjM0IiwiMS42NDQyMTc5MUUrMTciLCIwLjg5NDg5NjQ4IiwiMCIsIi0zODM1ODg5NDkiLCIiKTsKKyAgbWF0aHRlc3QoODEsZGVmLCItNTYxODIuMjY4NiIsIjMyLjc3NDE2NDkiLCItNTYxNDkuNDk0NCIsIi01NjIxNS4wNDI4IiwiLTE4NDEzMjYuOTQiLCItMTcxNC4yMjQyNiIsIi0xNzE0IiwiLTcuMzQ5OTYxNCIsIi01LjQ1NDc2NDAyRSsxNTYiKTsKKyAgbWF0aHRlc3QoODIsZGVmLCItNjM2NjM4NC4zMCIsIjMzMjAxNC45ODAiLCItNjAzNDM2OS4zMiIsIi02Njk4Mzk5LjI4IiwiLTIuMTEzNzM0OTZFKzEyIiwiLTE5LjE3NDk5MTEiLCItMTkiLCItNTgwOTkuNjgwIiwiLTMuMDUzOTIzOTlFKzIyNTg5OTQiKTsKKyAgbWF0aHRlc3QoODMsZGVmLCItMS4yNzg5NzcwMiIsIi04MjEzNzc2LjAzRS02ODY1MTkxMjMiLCItMS4yNzg5NzcwMiIsIi0xLjI3ODk3NzAyIiwiMS4wNTA1MjMwOEUtNjg2NTE5MTE2IiwiMS41NTcxMTIxMkUrNjg2NTE5MTE2IiwiIiwiIiwiMC4xMzk2NjgzNzEiKTsKKyAgbWF0aHRlc3QoODQsZGVmLCI2NS40MDU5MDM2IiwiNDAxMTYyMTQ1RSs4ODQxNTU1MDYiLCI0LjAxMTYyMTQ1RSs4ODQxNTU1MTQiLCItNC4wMTE2MjE0NUUrODg0MTU1NTE0IiwiMi42MjM4MzcyNkUrODg0MTU1NTE2IiwiMS42MzA0MTA2NkUtODg0MTU1NTEzIiwiMCIsIjY1LjQwNTkwMzYiLCIxODMwMDcwNC4xIik7CisgIG1hdGh0ZXN0KDg1LGRlZiwiLTIwNjMwOTE2LjgiLCIxNTg5ODc0MTEuRS00ODA1MDA2MTIiLCItMjA2MzA5MTYuOCIsIi0yMDYzMDkxNi44IiwiLTMuMjgwMDU2MDVFLTQ4MDUwMDU5NyIsIi0xLjI5NzY0NDY4RSs0ODA1MDA2MTEiLCIiLCIiLCI0LjI1NjM0NzI4RSsxNCIpOworICBtYXRodGVzdCg4NixkZWYsIi00LjcyNzA1ODUzIiwiLTk3NjI2NzQyLjQiLCItOTc2MjY3NDcuMSIsIjk3NjI2NzM3LjciLCI0NjE0ODczMjUiLCI0Ljg0MTk3MDk3RS04IiwiMCIsIi00LjcyNzA1ODUzIiwiMi45MjY1NDQ0OUUtNjU4NTgxMjAiKTsKKyAgbWF0aHRlc3QoODcsZGVmLCI4LjQzNTI4MTY5IiwiLTQ1NzMuNDU3NTIiLCItNDU2NS4wMjIyNCIsIjQ1ODEuODkyODAiLCItMzg1NzguNDAyNSIsIi0wLjAwMTg0NDM5OTI3IiwiMCIsIjguNDM1MjgxNjkiLCI4Ljg0MjQ4Njg4RS00MjM2Iik7CisgIG1hdGh0ZXN0KDg4LGRlZiwiMS45MTA3NTE4OSIsIi03MDQyNDcwODkuIiwiLTcwNDI0NzA4NyIsIjcwNDI0NzA5MSIsIi0xLjM0NTY0MTQ2RSs5IiwiLTIuNzEzMTgzOTRFLTkiLCIwIiwiMS45MTA3NTE4OSIsIjYuODQ1NDc0OTRFLTE5ODAzNzMwOSIpOworICBtYXRodGVzdCg4OSxkZWYsIjMxOTk3MTk4RS01NTE3NDYzMDgiLCIzMjYuODkyNTg0IiwiMzI2Ljg5MjU4NCIsIi0zMjYuODkyNTg0IiwiMS4wNDU5NjQ2N0UtNTUxNzQ2Mjk4IiwiOS43ODgyOTExOUUtNTUxNzQ2MzA0IiwiMCIsIjMuMTk5NzE5OEUtNTUxNzQ2MzAxIiwiIik7CisgIG1hdGh0ZXN0KDkwLGRlZiwiMTI3NTg5LjIxMyIsIjg0MTg0MzA0LiIsIjg0MzExODkzLjIiLCItODQwNTY3MTQuOCIsIjEuMDc0MTAwOTFFKzEzIiwiMC4wMDE1MTU1OTM4NSIsIjAiLCIxMjc1ODkuMjEzIiwiMi44NzkxNzA0MkUrNDI5ODI5Mzk0Iik7CisgIG1hdGh0ZXN0KDkxLGRlZiwiNzE0NDk0MjQ4IiwiLTcwMjUwNjMuNTkiLCI3MDc0NjkxODUiLCI3MjE1MTkzMTIiLCItNS4wMTkzNjc1M0UrMTUiLCItMTAxLjcwNjQ0NiIsIi0xMDEiLCI0OTYyODI1LjQxIiwiMS42NTAxODUxNkUtNjIxOTk5MDgiKTsKKyAgbWF0aHRlc3QoOTIsZGVmLCItNTI5ODc2ODAuMkUrMjc5NTMzNTAzIiwiLTQyMDE0MTE0LjgiLCItNS4yOTg3NjgwMkUrMjc5NTMzNTEwIiwiLTUuMjk4NzY4MDJFKzI3OTUzMzUxMCIsIjIuMjI2MjMwNDhFKzI3OTUzMzUxOCIsIjEuMjYxMTg3NTlFKzI3OTUzMzUwMyIsIiIsIiIsIiIpOworICBtYXRodGVzdCg5MyxkZWYsIi04Nzk1LjA1MTMiLCItMjI1Mjk0LjM5NEUtODg0NDE0MjM4IiwiLTg3OTUuMDUxMzAiLCItODc5NS4wNTEzMCIsIjEuOTgxNDc1NzVFLTg4NDQxNDIyOSIsIjMuOTAzODAzODhFKzg4NDQxNDIzNiIsIiIsIiIsIjEuMjkyNzc1OUUtOCIpOworICBtYXRodGVzdCg5NCxkZWYsIjgzMjgwLjEzOTQiLCIxNjE1NjYzNTQuIiwiMTYxNjQ5NjM0IiwiLTE2MTQ4MzA3NCIsIjEuMzQ1NTI2ODVFKzEzIiwiMC4wMDA1MTU0NTQ3MTgiLCIwIiwiODMyODAuMTM5NCIsIjUuMzA3NzQ4MDlFKzc5NDk5Mzk0MCIpOworICBtYXRodGVzdCg5NSxkZWYsIjExMi44Nzc4OTciLCItOS45NjQ4MTY2NiIsIjEwMi45MTMwODAiLCIxMjIuODQyNzE0IiwiLTExMjQuODA3NTUiLCItMTEuMzI3NjQ0MSIsIi0xMSIsIjMuMjY0OTEzNzQiLCIyLjk3NzkwNTQ1RS0yMSIpOworICBtYXRodGVzdCg5NixkZWYsIi01NzI1NDIuMTIxRSs4NDc0ODczOTciLCI0MzMuODQzNDIwIiwiLTUuNzI1NDIxMjFFKzg0NzQ4NzQwMiIsIi01LjcyNTQyMTIxRSs4NDc0ODc0MDIiLCItMi40ODM5MzYzMkUrODQ3NDg3NDA1IiwiLTEuMzE5Njk3NkUrODQ3NDg3NDAwIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDk3LGRlZiwiNDcwOTY0OS44OSIsIjIwOTQ5MjY2LjQiLCIyNTY1ODkxNi4zIiwiLTE2MjM5NjE2LjUiLCI5Ljg2NjM3MTAyRSsxMyIsIjAuMjI0ODEyMTYzIiwiMCIsIjQ3MDk2NDkuODkiLCI0Ljg1MjkzNjQ0RSsxMzk3OTQyMTMiKTsKKyAgbWF0aHRlc3QoOTgsZGVmLCItOTQ3NS4xOTMyMiIsIi0zMDg4NS4yNDc1RSs1ODQ0ODczNDEiLCItMy4wODg1MjQ3NUUrNTg0NDg3MzQ1IiwiMy4wODg1MjQ3NUUrNTg0NDg3MzQ1IiwiMi45MjY0MzY4OEUrNTg0NDg3MzQ5IiwiMy4wNjc4NzAyNkUtNTg0NDg3MzQyIiwiMCIsIi05NDc1LjE5MzIyIiwiLTEuMTc1NTM1NTdFLTEyIik7CisgIG1hdGh0ZXN0KDk5LGRlZiwiLTIxMzIzMDQ0Ny4iLCI4NjQuODE1ODIyRSsxMjc3ODMwNDYiLCI4LjY0ODE1ODIyRSsxMjc3ODMwNDgiLCItOC42NDgxNTgyMkUrMTI3NzgzMDQ4IiwiLTEuODQ0MDUwNjRFKzEyNzc4MzA1NyIsIi0yLjQ2NTYxNjg2RS0xMjc3ODMwNDEiLCIwIiwiLTIxMzIzMDQ0NyIsIi05LjExMjYxMzYxRSs3NCIpOworICBtYXRodGVzdCgxMDAsZGVmLCItODkuMTE2ODc4NkUrNDAzMzc1ODczIiwiNjQ2NC4wNTc0NCIsIi04LjkxMTY4Nzg2RSs0MDMzNzU4NzQiLCItOC45MTE2ODc4NkUrNDAzMzc1ODc0IiwiLTUuNzYwNTY2MjJFKzQwMzM3NTg3OCIsIi0xLjM3ODY1MjMzRSs0MDMzNzU4NzEiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMTAxLGRlZiwiNjE3NzQuNDk1OCIsIi0xNDAwMC43NzA2IiwiNDc3NzMuNzI1MiIsIjc1Nzc1LjI2NjQiLCItODY0ODkwNTQ1IiwiLTQuNDEyMjIxMTIiLCItNCIsIjU3NzEuNDEzNCIsIjcuNTkwMzA0MDdFLTY3MDc3Iik7CisgIG1hdGh0ZXN0KDEwMixkZWYsIjEuNjA3MzE0MTQiLCI3LjA0MzMwMjkzRS00MjcwMzM0MTkiLCIxLjYwNzMxNDE0IiwiMS42MDczMTQxNCIsIjEuMTMyMDgwMDRFLTQyNzAzMzQxOCIsIjIuMjgyMDQ2MDJFKzQyNzAzMzQxOCIsIiIsIiIsIjI3LjcxNDM5MjEiKTsKKyAgbWF0aHRlc3QoMTAzLGRlZiwiNzk1NTAxMi41MSIsIi0yMzAxMTc2NjIuIiwiLTIyMjE2MjY1MCIsIjIzODA3MjY3NSIsIi0xLjgzMDU4ODg4RSsxNSIsIi0wLjAzNDU2OTMyNjEiLCIwIiwiNzk1NTAxMi41MSIsIiIpOworICBtYXRodGVzdCgxMDQsZGVmLCI0MDg2NjYxLjA4IiwiMS43NzYyMTk5NCIsIjQwODY2NjIuODYiLCI0MDg2NjU5LjMwIiwiNzI1ODgwOC45MCIsIjIzMDA3NjIuOTgiLCIyMzAwNzYyIiwiMS43Mzg0MDU3MiIsIjEuNjcwMDc5ODhFKzEzIik7CisgIG1hdGh0ZXN0KDEwNSxkZWYsIi02MTAuMDc2OTMxIiwiLTIwNy42NTgzMDYiLCItODE3LjczNTIzNyIsIi00MDIuNDE4NjI1IiwiMTI2Njg3LjU0MiIsIjIuOTM3ODg4NDEiLCIyIiwiLTE5NC43NjAzMTkiLCI0LjM2NTE4Mzc3RS01ODAiKTsKKyAgbWF0aHRlc3QoMTA2LGRlZiwiLTk4LjYzNTM2OTciLCItOTkyNTMuMzg5OUUtNzE2MzA5NjUzIiwiLTk4LjYzNTM2OTciLCItOTguNjM1MzY5NyIsIjkuNzg5ODk0ODFFLTcxNjMwOTY0NyIsIjkuOTM3NzMzMDlFKzcxNjMwOTY0OSIsIiIsIiIsIjEuMTQ3MjkwMDdFLTIwIik7CisgIG1hdGh0ZXN0KDEwNyxkZWYsIi05NTk5MjM3MzAiLCI0MDkuMTI1NTQyRS05MDAyOTU1MjgiLCItOTU5OTIzNzMwIiwiLTk1OTkyMzczMCIsIi0zLjkyNzI5MzE2RS05MDAyOTU1MTciLCItMi4zNDYyODE2RSs5MDAyOTU1MzQiLCIiLCIiLCI4LjQ5MDc2Njc3RSszNSIpOworICBtYXRodGVzdCgxMDgsZGVmLCIzNzk5NjUxMzMiLCItOC4xNTg2OTY1NyIsIjM3OTk2NTEyNSIsIjM3OTk2NTE0MSIsIi0zLjEwMDAyMDIzRSs5IiwiLTQ2NTcxNzkzLjYiLCItNDY1NzE3OTMiLCI1LjE5MjE0OTk5IiwiMi4zMDE3MDY5N0UtNjkiKTsKKyAgbWF0aHRlc3QoMTA5LGRlZiwiODMzLjY0Njc5NyIsIjEzODk0OTkuNDZFLTQ0MzQwNzI1MSIsIjgzMy42NDY3OTciLCI4MzMuNjQ2Nzk3IiwiMS4xNTgzNTE3N0UtNDQzNDA3MjQyIiwiNS45OTk2MTk0NEUrNDQzNDA3MjQ3IiwiIiwiIiwiODMzLjY0Njc5NyIpOworICBtYXRodGVzdCgxMTAsZGVmLCIyMzE0OTMzLjRFLTY0NjQ4OTE5NCIsIi03NDAxNTM4LjE3IiwiLTc0MDE1MzguMTciLCI3NDAxNTM4LjE3IiwiLTEuNzEzNDA2NzlFLTY0NjQ4OTE4MSIsIi0zLjEyNzYzODI2RS02NDY0ODkxOTUiLCIwIiwiMi4zMTQ5MzM0RS02NDY0ODkxODgiLCIiKTsKKyAgbWF0aHRlc3QoMTExLGRlZiwiODA4NTI1MzQ3IiwiLTU5NTkuNzQ2NjdFKzU4MjMyMTY4IiwiLTUuOTU5NzQ2NjdFKzU4MjMyMTcxIiwiNS45NTk3NDY2N0UrNTgyMzIxNzEiLCItNC44MTg2MDYyNEUrNTgyMzIxODAiLCItMS4zNTY2NDM4MkUtNTgyMzIxNjMiLCIwIiwiODA4NTI1MzQ3IiwiMy41Nzk2MzAyRS01NCIpOworICBtYXRodGVzdCgxMTIsZGVmLCItMTcyMjA0OTAuNkUrNzI2NDI4NzA0IiwiMTkuOTg1NTY4OCIsIi0xLjcyMjA0OTA2RSs3MjY0Mjg3MTEiLCItMS43MjIwNDkwNkUrNzI2NDI4NzExIiwiLTMuNDQxNjEzMDBFKzcyNjQyODcxMiIsIi04LjYxNjQ2MjU5RSs3MjY0Mjg3MDkiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMTEzLGRlZiwiNTkwMTUuOTcwNSIsIi03MjA3MDQwNS40RSszMjI5NTcyNzkiLCItNy4yMDcwNDA1NEUrMzIyOTU3Mjg2IiwiNy4yMDcwNDA1NEUrMzIyOTU3Mjg2IiwiLTQuMjUzMzA0OTJFKzMyMjk1NzI5MSIsIi04LjE4ODY1NTI3RS0zMjI5NTcyODMiLCIwIiwiNTkwMTUuOTcwNSIsIjQuMDEwNjM0ODhFLTM0Iik7CisgIG1hdGh0ZXN0KDExNCxkZWYsIjE2NDExNDcwRSs1NzgxOTIwMDgiLCI0OTc0NzAuMDA1RS0zNzc0NzM2MjEiLCIxLjY0MTE0NzAwRSs1NzgxOTIwMTUiLCIxLjY0MTE0NzAwRSs1NzgxOTIwMTUiLCI4LjE2NDIxNDA2RSsyMDA3MTgzOTkiLCIzLjI5ODk4Njg0RSs5NTU2NjU2MzAiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMTE1LGRlZiwiLTEwNy4zNTM1NDRFKzYwOTY4OTgwOCIsIi02NTkuNTAxMzZFLTQ1NjcxMTc0MyIsIi0xLjA3MzUzNTQ0RSs2MDk2ODk4MTAiLCItMS4wNzM1MzU0NEUrNjA5Njg5ODEwIiwiNy4wNzk5ODA4M0UrMTUyOTc4MDY5IiwiIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDExNixkZWYsIjc4Ni4xMzQxNjMiLCItNTMuMDI5MjI3NUUtNjY0NDE5NzY4IiwiNzg2LjEzNDE2MyIsIjc4Ni4xMzQxNjMiLCItNC4xNjg4MDg3NEUtNjY0NDE5NzY0IiwiLTEuNDgyNDU0NDlFKzY2NDQxOTc2OSIsIiIsIiIsIjMuMzMwNTU1MzJFLTE1Iik7CisgIG1hdGh0ZXN0KDExNyxkZWYsIjIzLjU0MTQ3MTQiLCI1MDAwNzg2LjkxIiwiNTAwMDgxMC40NSIsIi01MDAwNzYzLjM3IiwiMTE3NzI1ODgyIiwiMC4wMDAwMDQ3MDc1NTM0IiwiMCIsIjIzLjU0MTQ3MTQiLCI0LjQ4OTU2MThFKzY4NjAyNDciKTsKKyAgbWF0aHRlc3QoMTE4LGRlZiwiLTY5Nzc1LjYxMTMiLCI1NjEyOTIxMjAuIiwiNTYxMjIyMzQ0IiwiLTU2MTM2MTg5NiIsIi0zLjkxNjQ1MDA4RSsxMyIsIi0wLjAwMDEyNDMxMjQ3MyIsIjAiLCItNjk3NzUuNjExMyIsIiIpOworICBtYXRodGVzdCgxMTksZGVmLCI5MTkwNDMuODcxIiwiLTcxNjA2NjEzLjciLCItNzA2ODc1NjkuOCIsIjcyNTI1NjU3LjYiLCItNi41ODA5NjE5NEUrMTMiLCItMC4wMTI4MzQ2MjI3IiwiMCIsIjkxOTA0My44NzEiLCIzLjA1ODYyNDI5RS00MjcwMTQzMTciKTsKKyAgbWF0aHRlc3QoMTIwLGRlZiwiLTI3NjY3LjE5MTUiLCItMjkzNDU1LjEwN0UtNzg5MTgxOTI0IiwiLTI3NjY3LjE5MTUiLCItMjc2NjcuMTkxNSIsIjguMTE5MDc4NjRFLTc4OTE4MTkxNSIsIjkuNDI4MDgzMTVFKzc4OTE4MTkyMiIsIiIsIiIsIi00LjcyMTc2OTM4RS0xNCIpOworICBtYXRodGVzdCgxMjEsZGVmLCItOTA4NjAzNjI1LiIsIi05ODIuNDA5MjczRSs0NDk0NDExMzQiLCItOS44MjQwOTI3M0UrNDQ5NDQxMTM2IiwiOS44MjQwOTI3M0UrNDQ5NDQxMTM2IiwiOC45MjYyMDYyN0UrNDQ5NDQxMTQ1IiwiOS4yNDg3MjgxRS00NDk0NDExMjkiLCIwIiwiLTkwODYwMzYyNSIsIjIuNjA3Njg2MzJFLTkwIik7CisgIG1hdGh0ZXN0KDEyMixkZWYsIjg0Ny4xMTMzNTEiLCI1LjcxNTExMjY4IiwiODUyLjgyODQ2NCIsIjg0MS4zOTgyMzgiLCI0ODQxLjM0ODI1IiwiMTQ4LjIyMzM4NiIsIjE0OCIsIjEuMjc2Njc0MzYiLCIzLjY5NTI5NTM4RSsxNyIpOworICBtYXRodGVzdCgxMjMsZGVmLCItOTkyMTQwNDc1IiwiMy44MjkxODIxOCIsIi05OTIxNDA0NzEiLCItOTkyMTQwNDc5IiwiLTMuNzk5MDg2NjNFKzkiLCItMjU5MDk5ODM2IiwiLTI1OTA5OTgzNiIsIi0wLjE0Nzg3NzUyIiwiOS42ODkzMDU5NUUrMzUiKTsKKyAgbWF0aHRlc3QoMTI0LGRlZiwiLTEyNjA2NDM3LjUiLCIyNjgxMjMxNDVFKzM2Mjc5ODg1OCIsIjIuNjgxMjMxNDVFKzM2Mjc5ODg2NiIsIi0yLjY4MTIzMTQ1RSszNjI3OTg4NjYiLCItMy4zODAwNzc2N0UrMzYyNzk4ODczIiwiLTQuNzAxNzM0MTZFLTM2Mjc5ODg2MCIsIjAiLCItMTI2MDY0MzcuNSIsIi0yLjAwMzQ0MzYyRSsyMSIpOworICBtYXRodGVzdCgxMjUsZGVmLCIzNzk5NDcwLjY0IiwiLTI2NC43MDM5OTIiLCIzNzk5MjA1Ljk0IiwiMzc5OTczNS4zNCIsIi0xLjAwNTczNTA1RSs5IiwiLTE0MzUzLjY1ODMiLCItMTQzNTMiLCIxNzQuMjQyODI0IiwiMi4zNjI1NDY2RS0xNzQ0Iik7CisgIG1hdGh0ZXN0KDEyNixkZWYsIi04LjExMDcwMjQ3IiwiLTkzMTI4NDA1Ni5FLTY1NDI4ODk3NCIsIi04LjExMDcwMjQ3IiwiLTguMTEwNzAyNDciLCI3LjU1MzM2Nzg5RS02NTQyODg5NjUiLCI4LjcwOTE2MDY3RSs2NTQyODg5NjUiLCIiLCIiLCItNi41ODM3NTY2MkUtOSIpOworICBtYXRodGVzdCgxMjcsZGVmLCItMjQyNjYwMTc3LiIsIi02LjA5ODMyNzE1RS05NDM3NDI0MTUiLCItMjQyNjYwMTc3IiwiLTI0MjY2MDE3NyIsIjEuNDc5ODIxMTVFLTk0Mzc0MjQwNiIsIjMuOTc5MTI2OTJFKzk0Mzc0MjQyMiIsIiIsIiIsIjQuODk3ODg5MDFFLTUxIik7CisgIG1hdGh0ZXN0KDEyOCxkZWYsIjc2LjE0NjM4MDMiLCItNDUuNjc1ODAwNkUtNjM2OTA3OTk2IiwiNzYuMTQ2MzgwMyIsIjc2LjE0NjM4MDMiLCItMy40NzgwNDY4OEUtNjM2OTA3OTkzIiwiLTEuNjY3MTA1NTRFKzYzNjkwNzk5NiIsIiIsIiIsIjMuOTA2MTkyODdFLTEwIik7CisgIG1hdGh0ZXN0KDEyOSxkZWYsIjc2MTE4NS44NjIiLCItNzA4Nzg0NzAuOUUrMjIxMjE0NzEyIiwiLTcuMDg3ODQ3MDlFKzIyMTIxNDcxOSIsIjcuMDg3ODQ3MDlFKzIyMTIxNDcxOSIsIi01LjM5NTE2OTAwRSsyMjEyMTQ3MjUiLCItMS4wNzM5MzA5OUUtMjIxMjE0NzE0IiwiMCIsIjc2MTE4NS44NjIiLCI2Ljc1NDA2MTQ0RS00MiIpOworICBtYXRodGVzdCgxMzAsZGVmLCI2MjAzNjA2LjU0IiwiLTE5NS45Mjc0OEUtODMzNTEyMDYxIiwiNjIwMzYwNi41NCIsIjYyMDM2MDYuNTQiLCItMS4yMTU0NTcwMEUtODMzNTEyMDUyIiwiLTMuMTY2Mjc2OUUrODMzNTEyMDY1IiwiIiwiIiwiMi41OTg0MzI5MkUtMTQiKTsKKyAgbWF0aHRlc3QoMTMxLGRlZiwiLTE2MzI3NDgzNy4iLCI5NS4wNDQ4NTUwRSs4ODc4NzY1MzMiLCI5LjUwNDQ4NTUwRSs4ODc4NzY1MzQiLCItOS41MDQ0ODU1MEUrODg3ODc2NTM0IiwiLTEuNTUxODQzMzJFKzg4Nzg3NjU0MyIsIi0xLjcxNzg3MTM5RS04ODc4NzY1MjciLCIwIiwiLTE2MzI3NDgzNyIsIjEuMzQ2NDU3MzFFKzgyIik7CisgIG1hdGh0ZXN0KDEzMixkZWYsIjIuMzg2MzgxOTAiLCItODA3OTg2MTc5LiIsIi04MDc5ODYxNzciLCI4MDc5ODYxODEiLCItMS45MjgxNjM1OUUrOSIsIi0yLjk1MzQ5MzQ3RS05IiwiMCIsIjIuMzg2MzgxOTAiLCIxLjE5MDI5MzA1RS0zMDUyMDg2NTYiKTsKKyAgbWF0aHRlc3QoMTMzLGRlZiwiLTEwOTAyMjI5NkUtODExOTgxMTU4IiwiNy4xOTY4NTY4MCIsIjcuMTk2ODU2ODAiLCItNy4xOTY4NTY4MCIsIi03Ljg0NjE3ODUyRS04MTE5ODExNTAiLCItMS41MTQ4NTk4OEUtODExOTgxMTUxIiwiMCIsIi0xLjA5MDIyMjk2RS04MTE5ODExNTAiLCIiKTsKKyAgbWF0aHRlc3QoMTM0LGRlZiwiLTU1OTI1MC43ODBFLTI3MzcxMDQyMSIsIi0zOTM3ODA4MTEuIiwiLTM5Mzc4MDgxMSIsIjM5Mzc4MDgxMSIsIjIuMjAyMjIyMjZFLTI3MzcxMDQwNyIsIjEuNDIwMjA4MzFFLTI3MzcxMDQyNCIsIjAiLCItNS41OTI1MDc4MEUtMjczNzEwNDE2IiwiIik7CisgIG1hdGh0ZXN0KDEzNSxkZWYsIi04ODAyMS45OTY2RSs1NTUzMzQ2NDIiLCI3NTk5Njg2LjY0RSs4MTg4ODQwNTMiLCI3LjU5OTY4NjY0RSs4MTg4ODQwNTkiLCItNy41OTk2ODY2NEUrODE4ODg0MDU5IiwiIiwiLTEuMTU4MjMxOTJFLTI2MzU0OTQxMyIsIjAiLCItOC44MDIxOTk2NkUrNTU1MzM0NjQ2IiwiIik7CisgIG1hdGh0ZXN0KDEzNixkZWYsIjE5NC4zMTc2NDhFLTE5NzQ1MDAwOSIsIi05MzAuOTc5MDY0IiwiLTkzMC45NzkwNjQiLCI5MzAuOTc5MDY0IiwiLTEuODA5MDU2NjJFLTE5NzQ1MDAwNCIsIi0yLjA4NzIzOTcyRS0xOTc0NTAwMTAiLCIwIiwiMS45NDMxNzY0OEUtMTk3NDUwMDA3IiwiIik7CisgIG1hdGh0ZXN0KDEzNyxkZWYsIjk0OTU0NzkuNjUiLCI3NDA1Njk3Ljk2IiwiMTY5MDExNzcuNiIsIjIwODk3ODEuNjkiLCI3LjAzMjA2NTQzRSsxMyIsIjEuMjgyMTg1NjUiLCIxIiwiMjA4OTc4MS42OSIsIjEuMDEzNTQ0NkUrNTE2NzMzODMiKTsKKyAgbWF0aHRlc3QoMTM4LGRlZiwiLTE2NTYuMjg5MjUiLCItMTYzMDUwNTExRS02ODI4ODIzODAiLCItMTY1Ni4yODkyNSIsIi0xNjU2LjI4OTI1IiwiMi43MDA1ODgwOUUtNjgyODgyMzY5IiwiMS4wMTU4MTM1OUUrNjgyODgyMzc1IiwiIiwiIiwiMy42NDUyNTI2NUUtNyIpOworICBtYXRodGVzdCgxMzksZGVmLCI5NTU4MS4zNzg0RSs2NDI2MjE0OSIsIi05OS4yODc5MzY1IiwiOS41NTgxMzc4NEUrNjQyNjIxNTMiLCI5LjU1ODEzNzg0RSs2NDI2MjE1MyIsIi05LjQ5MDA3NzgzRSs2NDI2MjE1NSIsIi05LjYyNjY4NTk2RSs2NDI2MjE1MSIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxNDAsZGVmLCI2NDM3NjEuNDUyIiwiMy43MzQ0NjkzOSIsIjY0Mzc2NS4xODYiLCI2NDM3NTcuNzE4IiwiMjQwNDEwNy40NCIsIjE3MjM4My42NDciLCIxNzIzODMiLCIyLjQxNTE0MzYzIiwiMS43MTc1MTIzNkUrMjMiKTsKKyAgbWF0aHRlc3QoMTQxLGRlZiwiNzk2MC40OTg2NkUtMTI5ODI3NDIzIiwiMzIyMC4yMjg1MCIsIjMyMjAuMjI4NTAiLCItMzIyMC4yMjg1MCIsIjIuNTYzNDYyNDdFLTEyOTgyNzQxNiIsIjIuNDcyMDI5MTNFLTEyOTgyNzQyMyIsIjAiLCI3Ljk2MDQ5ODY2RS0xMjk4Mjc0MjAiLCIiKTsKKyAgbWF0aHRlc3QoMTQyLGRlZiwiLTYzNTYuNjQxMTJFLTcwNzIwMzgxOCIsIjE4MDUwNTQuOTgiLCIxODA1MDU0Ljk4IiwiLTE4MDUwNTQuOTgiLCItMS4xNDc0MDg2N0UtNzA3MjAzODA4IiwiLTMuNTIxNTc3NTZFLTcwNzIwMzgyMSIsIjAiLCItNi4zNTY2NDExMkUtNzA3MjAzODE1IiwiIik7CisgIG1hdGh0ZXN0KDE0MyxkZWYsIjIuMzkwNDA0MiIsIjg0NzYuNTIwMDYiLCI4NDc4LjkxMDQ2IiwiLTg0NzQuMTI5NjYiLCIyMDI2Mi4zMDkyIiwiMC4wMDAyODIwMDMwMTMiLCIwIiwiMi4zOTA0MDQyIiwiMi4wMDI1MTc1MkUrMzIwOCIpOworICBtYXRodGVzdCgxNDQsZGVmLCItNzEzMjk4LjY1OCIsIi05NTcuNzgyNzI5IiwiLTcxNDI1Ni40NDEiLCItNzEyMzQwLjg3NSIsIjY4MzE4NTEzNSIsIjc0NC43Mzk1MjgiLCI3NDQiLCItNzA4LjMwNzYyNCIsIjMuNjgxMjIzMjFFLTU2MDgiKTsKKyAgbWF0aHRlc3QoMTQ1LGRlZiwiNjA3Nzc5MjMzLkUtODIwNDk3MzY1IiwiLTIwLjExODg3NDJFLTg1NzMxODMyMyIsIjYuMDc3NzkyMzNFLTgyMDQ5NzM1NyIsIjYuMDc3NzkyMzNFLTgyMDQ5NzM1NyIsIiIsIi0zLjAyMDk0MDU3RSszNjgyMDk2NSIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxNDYsZGVmLCItMjA1ODg4MjUxIiwiLTkwOC43OTI5MjJFKzI1MDY4MDYxMyIsIi05LjA4NzkyOTIyRSsyNTA2ODA2MTUiLCI5LjA4NzkyOTIyRSsyNTA2ODA2MTUiLCIxLjg3MTA5Nzg1RSsyNTA2ODA2MjQiLCIyLjI2NTUxMzM2RS0yNTA2ODA2MDgiLCIwIiwiLTIwNTg4ODI1MSIsIi0xLjUwNDIzNThFLTc1Iik7CisgIG1hdGh0ZXN0KDE0NyxkZWYsIjUxNTQyMzk5LjEiLCItMjMyMTIuMjQxNCIsIjUxNTE5MTg2LjkiLCI1MTU2NTYxMS4zIiwiLTEuMTk2NDE0NjFFKzEyIiwiLTIyMjAuNDgzNSIsIi0yMjIwIiwiMTEyMjMuMTkyMCIsIjEuNzE2NDEzNDhFLTE3OTAxNSIpOworICBtYXRodGVzdCgxNDgsZGVmLCI0LjQ0Mjg3MjMwIiwiMTU4OTIzMDIzIiwiMTU4OTIzMDI3IiwiLTE1ODkyMzAxOSIsIjcwNjA3NDY5NyIsIjIuNzk1NjEyNzVFLTgiLCIwIiwiNC40NDI4NzIzMCIsIjcuMTI1NzM0MTZFKzEwMjkyODY5MyIpOworICBtYXRodGVzdCgxNDksZGVmLCItNzkxMjM2ODIuNiIsIi0zLjg1NzE3NzAiLCItNzkxMjM2ODYuNSIsIi03OTEyMzY3OC44IiwiMzA1MTk0MDQ5IiwiMjA1MTMzNjUuOCIsIjIwNTEzMzY1IiwiLTIuOTI5Mzk1MCIsIjIuNTUxMzczNDVFLTMyIik7CisgIG1hdGh0ZXN0KDE1MCxkZWYsIi04MC4zMzI0MzQ3RS01Njk3MTUwMzAiLCI4ODMxNDIuMzUxIiwiODgzMTQyLjM1MSIsIi04ODMxNDIuMzUxIiwiLTcuMDk0NDk3NTJFLTU2OTcxNTAyMyIsIi05LjA5NjIwNDU1RS01Njk3MTUwMzUiLCIwIiwiLTguMDMzMjQzNDdFLTU2OTcxNTAyOSIsIiIpOworICBtYXRodGVzdCgxNTEsZGVmLCIxMzYzNy40ODMiLCItNTI3OTguNTYzMSIsIi0zOTE2MS4wODAxIiwiNjY0MzYuMDQ2MSIsIi03MjAwMzk1MDciLCItMC4yNTgyOTI2OTIiLCIwIiwiMTM2MzcuNDgzIiwiMS40NzE2Mzc5MUUtMjE4MzEwIik7CisgIG1hdGh0ZXN0KDE1MixkZWYsIjYuNDI5MzQ4NDNFLTI3NjQ3NjQ1OCIsIjg0MDU3NDQwLjBFLTM4ODAzOTc4MiIsIjYuNDI5MzQ4NDNFLTI3NjQ3NjQ1OCIsIjYuNDI5MzQ4NDNFLTI3NjQ3NjQ1OCIsIjUuNDA0MzQ1NzBFLTY2NDUxNjIzMiIsIjcuNjQ4NzU1OTNFKzExMTU2MzMxNiIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxNTMsZGVmLCItNS42NDEzMzA4NyIsIi0xNzQwMTI5Ny4iLCItMTc0MDEzMDIuNiIsIjE3NDAxMjkxLjQiLCI5ODE2NjQ3My45IiwiMy4yNDE5MDI1M0UtNyIsIjAiLCItNS42NDEzMzA4NyIsIi0xLjI1OTA4OTE2RS0xMzA3NTAxNCIpOworICBtYXRodGVzdCgxNTQsZGVmLCI5NTQ2OS43MDU3RSs4NjU3MzM4MjQiLCIxOTguODI5NzQ5IiwiOS41NDY5NzA1N0UrODY1NzMzODI4IiwiOS41NDY5NzA1N0UrODY1NzMzODI4IiwiMS44OTgyMjE3NkUrODY1NzMzODMxIiwiNC44MDE1ODA1NkUrODY1NzMzODI2IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDE1NSxkZWYsIi00MTY0NjYuMjA5IiwiLTkzMDE1MzQyNyIsIi05MzA1Njk4OTMiLCI5Mjk3MzY5NjEiLCIzLjg3Mzc3NDcyRSsxNCIsIjAuMDAwNDQ3NzM5MjYyIiwiMCIsIi00MTY0NjYuMjA5IiwiIik7CisgIG1hdGh0ZXN0KDE1NixkZWYsIi0xNTQxNzMzLjg1IiwiLTEuOTkyMDg3MDgiLCItMTU0MTczNS44NCIsIi0xNTQxNzMxLjg2IiwiMzA3MTI2OC4wOCIsIjc3MzkyOC45NDQiLCI3NzM5MjgiLCItMS44ODAzNDk3NiIsIjQuMjA3MDg0MDFFLTEzIik7CisgIG1hdGh0ZXN0KDE1NyxkZWYsIi0zOTE1MjY5MS44IiwiLTY0NTEzMTc0OC4iLCItNjg0Mjg0NDQwIiwiNjA1OTc5MDU2IiwiMi41MjU4NjQ0NUUrMTYiLCIwLjA2MDY4OTQ1MTMiLCIwIiwiLTM5MTUyNjkxLjgiLCIiKTsKKyAgbWF0aHRlc3QoMTU4LGRlZiwiMTEzLjkzOTk3OSIsIi01ODI4MjU1MC40IiwiLTU4MjgyNDM2LjUiLCI1ODI4MjY2NC4zIiwiLTYuNjQwNzEyNTdFKzkiLCItMC4wMDAwMDE5NTQ5NTg3IiwiMCIsIjExMy45Mzk5NzkiLCIyLjEwNjU1N0UtMTE5ODY4MzMwIik7CisgIG1hdGh0ZXN0KDE1OSxkZWYsIi0zMjQ5NzEuNzM2IiwiLTk1MTcuMTUxNTQiLCItMzM0NDg4Ljg4OCIsIi0zMTU0NTQuNTg1IiwiMy4wOTI4MDUyNkUrOSIsIjM0LjE0NTkwMzMiLCIzNCIsIi0xMzg4LjU4MzY0IiwiLTUuODI3OTUyNjNFLTUyNDU3Iik7CisgIG1hdGh0ZXN0KDE2MCxkZWYsIi03Ni45NDM2NzQ0IiwiLTk1NDgxMjIuNzVFLTI3MzU5OTcyOCIsIi03Ni45NDM2NzQ0IiwiLTc2Ljk0MzY3NDQiLCI3LjM0NjY3NjQ4RS0yNzM1OTk3MjAiLCI4LjA1ODUxMzMyRSsyNzM1OTk3MjIiLCIiLCIiLCIxLjM3NDg5ODk1RS0xOSIpOworICBtYXRodGVzdCgxNjEsZGVmLCItNDMwMzkzLjI4MiIsIi03MC4yNTUxNTA1IiwiLTQzMDQ2My41MzciLCItNDMwMzIzLjAyNyIsIjMwMjM3MzQ0LjgiLCI2MTI2LjE0NTYxIiwiNjEyNiIsIi0xMC4yMzAwMzcwIiwiNC4yNjAwNjQwOUUtMzk1Iik7CisgIG1hdGh0ZXN0KDE2MixkZWYsIi0zMzA4MDUxLjkwIiwiLTM0OTQzMzc5OS5FKzM5NzgxMzE4OCIsIi0zLjQ5NDMzNzk5RSszOTc4MTMxOTYiLCIzLjQ5NDMzNzk5RSszOTc4MTMxOTYiLCIxLjE1NTk0NTE0RSszOTc4MTMyMDMiLCI5LjQ2Njg5MTYxRS0zOTc4MTMxOTEiLCIwIiwiLTMzMDgwNTEuOTAiLCItMi43NjIzNzc2OEUtMjAiKTsKKyAgbWF0aHRlc3QoMTYzLGRlZiwiMjMuMTU0MzIxMkUtNjU1ODIyNzEyIiwiNTg0OC4yMDg1MyIsIjU4NDguMjA4NTMiLCItNTg0OC4yMDg1MyIsIjEuMzU0MTEyOTlFLTY1NTgyMjcwNyIsIjMuOTU5MjE2MDdFLTY1NTgyMjcxNSIsIjAiLCIyLjMxNTQzMjEyRS02NTU4MjI3MTEiLCIiKTsKKyAgbWF0aHRlc3QoMTY0LGRlZiwiLTE3NC4yNjEzMDhFLTgyOTAyMDc3IiwiLTIwMDA5NjIwNC4iLCItMjAwMDk2MjA0IiwiMjAwMDk2MjA0IiwiMy40ODY5MDI2MkUtODI5MDIwNjciLCI4LjcwODg3NjI2RS04MjkwMjA4NCIsIjAiLCItMS43NDI2MTMwOEUtODI5MDIwNzUiLCIiKTsKKyAgbWF0aHRlc3QoMTY1LGRlZiwiLTUwNjY5MTA1LjIiLCI5MTA1Nzg5LjAxRSs2MDk4ODk3MDAiLCI5LjEwNTc4OTAxRSs2MDk4ODk3MDYiLCItOS4xMDU3ODkwMUUrNjA5ODg5NzA2IiwiLTQuNjEzODIxODFFKzYwOTg4OTcxNCIsIi01LjU2NDQ5MzY2RS02MDk4ODk3MDAiLCIwIiwiLTUwNjY5MTA1LjIiLCItMi4yMDEzNTAwOEUrNjkiKTsKKyAgbWF0aHRlc3QoMTY2LGRlZiwiNDI0NzY4ODU2LiIsIi05NzEuNzE3NTciLCI0MjQ3Njc4ODQiLCI0MjQ3Njk4MjgiLCItNC4xMjc1NTM2MUUrMTEiLCItNDM3MTMyLjAxMiIsIi00MzcxMzIiLCIxMS4xOTA3NiIsIjIuNzI2NTE0NzNFLTgzODciKTsKKyAgbWF0aHRlc3QoMTY3LGRlZiwiNzE4MS4yNzY3IiwiOTk5MTE3LjkxOCIsIjEwMDYyOTkuMTkiLCItOTkxOTM2LjY0MSIsIjcuMTc0OTQyMjNFKzkiLCIwLjAwNzE4NzYxNjc3IiwiMCIsIjcxODEuMjc2NyIsIjMuMDk2NTUxMjRFKzM4NTI4MDAiKTsKKyAgbWF0aHRlc3QoMTY4LGRlZiwiODA5NjQxNy4wN0UtNDMzNjk0NTI4IiwiLTY4LjQ4NjMzNjMiLCItNjguNDg2MzM2MyIsIjY4LjQ4NjMzNjMiLCItNS41NDQ5Mzk0MkUtNDMzNjk0NTIwIiwiLTEuMTgyMTk0NTFFLTQzMzY5NDUyMyIsIjAiLCI4LjA5NjQxNzA3RS00MzM2OTQ1MjIiLCIiKTsKKyAgbWF0aHRlc3QoMTY5LGRlZiwiMTIzNjI4Ny41IiwiLTcxMTkuOTcyOTlFLTE3NjIwMDQ5OCIsIjEyMzYyODcuNTAiLCIxMjM2Mjg3LjUwIiwiLTguODAyMzMzNjFFLTE3NjIwMDQ4OSIsIi0xLjczNjM2NTQ0RSsxNzYyMDA1MDAiLCIiLCIiLCIyLjI2NTQ5Nzg0RS00MyIpOworICBtYXRodGVzdCgxNzAsZGVmLCItNzUyOTk1ODMzRS02NTQ0MDEwNjciLCItMTUuMjczNjkzMEUrODAzOTM5OTgzIiwiLTEuNTI3MzY5MzBFKzgwMzkzOTk4NCIsIjEuNTI3MzY5MzBFKzgwMzkzOTk4NCIsIjEuMTUwMTAyNzJFKzE0OTUzODkyNiIsIiIsIjAiLCItNy41Mjk5NTgzM0UtNjU0NDAxMDU5IiwiIik7CisgIG1hdGh0ZXN0KDE3MSxkZWYsIjcwMjk5Mi40NTkiLCItMzEyLjY4OTQ3NCIsIjcwMjY3OS43NzAiLCI3MDMzMDUuMTQ4IiwiLTIxOTgxODM0MiIsIi0yMjQ4LjIxMjc0IiwiLTIyNDgiLCI2Ni41MjE0NDgiLCI4LjAyNDkzMzIyRS0xODMxIik7CisgIG1hdGh0ZXN0KDE3MixkZWYsIi00NDE0LjM4ODA1IiwiLTE3NjgwLjQ2MzBFLTU4NDM2NDUzNiIsIi00NDE0LjM4ODA1IiwiLTQ0MTQuMzg4MDUiLCI3LjgwNDg0MjQ2RS01ODQzNjQ1MjkiLCIyLjQ5Njc2MDQ0RSs1ODQzNjQ1MzUiLCIiLCIiLCI1LjEzMTY3MzEyRS04Iik7CisgIG1hdGh0ZXN0KDE3MyxkZWYsIjkuNDYzNTA4MDciLCI3ODI2LjY1NDI0IiwiNzgzNi4xMTc3NSIsIi03ODE3LjE5MDczIiwiNzQwNjcuNjA1NiIsIjAuMDAxMjA5MTM4MzkiLCIwIiwiOS40NjM1MDgwNyIsIjMuNjMyNzE0OTVFKzc2MzkiKTsKKyAgbWF0aHRlc3QoMTc0LGRlZiwiMjA3ODE1My43IiwiLTE2OTM0NjA3LjNFKzIzMzU5NDQzOSIsIi0xLjY5MzQ2MDczRSsyMzM1OTQ0NDYiLCIxLjY5MzQ2MDczRSsyMzM1OTQ0NDYiLCItMy41MTkyNzE2OEUrMjMzNTk0NDUyIiwiLTEuMjI3MTYzOEUtMjMzNTk0NDQwIiwiMCIsIjIwNzgxNTMuNyIsIjIuMzE1NDk5MzlFLTEzIik7CisgIG1hdGh0ZXN0KDE3NSxkZWYsIi05MzU5Ljc0NjI5IiwiNy4wNzc2MTc4OEUrMjUyNDU3Njk2IiwiNy4wNzc2MTc4OEUrMjUyNDU3Njk2IiwiLTcuMDc3NjE3ODhFKzI1MjQ1NzY5NiIsIi02LjYyNDQ3MDc3RSsyNTI0NTc3MDAiLCItMS4zMjI0NDMwMUUtMjUyNDU3NjkzIiwiMCIsIi05MzU5Ljc0NjI5IiwiLTYuMjkyODY2NzdFKzI3Iik7CisgIG1hdGh0ZXN0KDE3NixkZWYsIjY2LjIzMTkyODRFKzczMDQ2ODQ3OSIsIjI1LjkzOTE2ODVFKzIyMTE0NzA0NCIsIjYuNjIzMTkyODRFKzczMDQ2ODQ4MCIsIjYuNjIzMTkyODRFKzczMDQ2ODQ4MCIsIjEuNzE4MDAxMTVFKzk1MTYxNTUyNiIsIjIuNTUzMzU1ODhFKzUwOTMyMTQzNSIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxNzcsZGVmLCIzMTc5OTcwODguRS05MDk2ODc0MiIsIi05Nzc0MjYuNDYxIiwiLTk3NzQyNi40NjEiLCI5Nzc0MjYuNDYxIiwiLTMuMTA4MTg3NjhFLTkwOTY4NzI4IiwiLTMuMjUzNDExOUUtOTA5Njg3NDAiLCIwIiwiMy4xNzk5NzA4OEUtOTA5Njg3MzQiLCIiKTsKKyAgbWF0aHRlc3QoMTc4LGRlZiwiMjI3NDczMzg2IiwiLTY3NTkuNjEzOTAiLCIyMjc0NjY2MjYiLCIyMjc0ODAxNDYiLCItMS41Mzc2MzIyNkUrMTIiLCItMzM2NTEuODMxMiIsIi0zMzY1MSIsIjU2MTguNjUxMTAiLCIxLjQwOTkyNjI3RS01NjQ5MyIpOworICBtYXRodGVzdCgxNzksZGVmLCItMzkyMDE5LjQ2MiIsIi0yNDU0NTYuNTAzIiwiLTYzNzQ3NS45NjUiLCItMTQ2NTYyLjk1OSIsIjkuNjIyMzcyNjNFKzEwIiwiMS41OTcxMDM1OSIsIjEiLCItMTQ2NTYyLjk1OSIsIi0zLjA4NjU2NTMzRS0xMzcyOTE3Iik7CisgIG1hdGh0ZXN0KDE4MCxkZWYsIi0zNjE5NTU2LjI4RSs1ODc2NzM1ODMiLCItMy40NTIzNjk3MiIsIi0zLjYxOTU1NjI4RSs1ODc2NzM1ODkiLCItMy42MTk1NTYyOEUrNTg3NjczNTg5IiwiMS4yNDk2MDQ2NUUrNTg3NjczNTkwIiwiMS4wNDg0MjY2MUUrNTg3NjczNTg5IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDE4MSxkZWYsIi0yNDkuNDAwNzA0RS05MjM5MzA4NDgiLCI4MzExMDIuOTE5IiwiODMxMTAyLjkxOSIsIi04MzExMDIuOTE5IiwiLTIuMDcyNzc2NTNFLTkyMzkzMDg0MCIsIi0zLjAwMDg0MDE5RS05MjM5MzA4NTIiLCIwIiwiLTIuNDk0MDA3MDRFLTkyMzkzMDg0NiIsIiIpOworICBtYXRodGVzdCgxODIsZGVmLCI2NTIzNC4yNzM5RSsxNTQ5NDk5MTQiLCItNjk0NTgxODk1IiwiNi41MjM0MjczOUUrMTU0OTQ5OTE4IiwiNi41MjM0MjczOUUrMTU0OTQ5OTE4IiwiLTQuNTMxMDU0NTZFKzE1NDk0OTkyNyIsIi05LjM5MTg3NjUyRSsxNTQ5NDk5MDkiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMTgzLGRlZiwiNDUuMjMxNjIxMyIsIi04ODc3NTA4My40IiwiLTg4Nzc1MDM4LjIiLCI4ODc3NTEyOC42IiwiLTQuMDE1NDQwOTVFKzkiLCItNS4wOTUwODA2OUUtNyIsIjAiLCI0NS4yMzE2MjEzIiwiMS45MjMxNDI1NEUtMTQ2OTYyMDE1Iik7CisgIG1hdGh0ZXN0KDE4NCxkZWYsIjMzMTEwMDM3NS4iLCI0NDIuMzQzMzc4IiwiMzMxMTAwODE3IiwiMzMxMDk5OTMzIiwiMS40NjQ2MDA1OEUrMTEiLCI3NDg1MTQuMzciLCI3NDg1MTQiLCIxNjMuNzU5NzA4IiwiNi42NDAxMTA0M0UrMzc2NSIpOworICBtYXRodGVzdCgxODUsZGVmLCI4MS44MTYyNzY1IiwiNS42MTIzOTUxNUUrNDY3MzcyMTYzIiwiNS42MTIzOTUxNUUrNDY3MzcyMTYzIiwiLTUuNjEyMzk1MTVFKzQ2NzM3MjE2MyIsIjQuNTkxODUyNzNFKzQ2NzM3MjE2NSIsIjEuNDU3Nzc4MjZFLTQ2NzM3MjE2MiIsIjAiLCI4MS44MTYyNzY1IiwiMi45OTk0MjY3N0UrMTEiKTsKKyAgbWF0aHRlc3QoMTg2LGRlZiwiLTU3MzguMTMwNjlFKzc4OTQ2NDA3OCIsIjMzOTY5NzE1LjAiLCItNS43MzgxMzA2OUUrNzg5NDY0MDgxIiwiLTUuNzM4MTMwNjlFKzc4OTQ2NDA4MSIsIi0xLjk0OTIyNjY0RSs3ODk0NjQwODkiLCItMS42ODkxOTAxMkUrNzg5NDY0MDc0IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDE4NyxkZWYsIi03NDEzLjAzOTExIiwiMi43MDYzMDMyMEUtMjU0ODU4MjY0IiwiLTc0MTMuMDM5MTEiLCItNzQxMy4wMzkxMSIsIi0yLjAwNjE5MzE1RS0yNTQ4NTgyNjAiLCItMi43MzkxNzUzOUUrMjU0ODU4MjY3IiwiIiwiIiwiLTQuMDczNjk4NDJFKzExIik7CisgIG1hdGh0ZXN0KDE4OCxkZWYsIi00MTc2OTYuMTgyIiwiMjc0MDAuNjAwMiIsIi0zOTAyOTUuNTgyIiwiLTQ0NTA5Ni43ODIiLCItMS4xNDQ1MTI2MUUrMTAiLCItMTUuMjQ0MDUyMyIsIi0xNSIsIi02Njg3LjE3OTAiLCItMS41ODAyMDMzNEUrMTU0MDE3Iik7CisgIG1hdGh0ZXN0KDE4OSxkZWYsIjY4Ljg1Mzg3MzVFKzY1NTY0NzI4NyIsIjMxOTguMTc5MzNFLTEzMjQ1NDgyNiIsIjYuODg1Mzg3MzVFKzY1NTY0NzI4OCIsIjYuODg1Mzg3MzVFKzY1NTY0NzI4OCIsIjIuMjAyMDcwMzVFKzUyMzE5MjQ2NiIsIjIuMTUyOTA4NDZFKzc4ODEwMjExMSIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxOTAsZGVmLCItNjgxNy4wNDI0NiIsIjQzNDQyMC40MzkiLCI0Mjc2MDMuMzk3IiwiLTQ0MTIzNy40ODEiLCItMi45NjE0NjI1OEUrOSIsIi0wLjAxNTY5MjI2OTIiLCIwIiwiLTY4MTcuMDQyNDYiLCI1Ljk0MTQzNTE4RSsxNjY1MzkwIik7CisgIG1hdGh0ZXN0KDE5MSxkZWYsIjg1NzguMjc1MTEiLCI2NDcwNDIuMzQxRS00OTA5MjQzMzQiLCI4NTc4LjI3NTExIiwiODU3OC4yNzUxMSIsIjUuNTUwNTA3MjFFLTQ5MDkyNDMyNSIsIjEuMzI1NzY3MkUrNDkwOTI0MzMyIiwiIiwiIiwiMy45ODQ3Mzg0NkUrMjMiKTsKKyAgbWF0aHRlc3QoMTkyLGRlZiwiNDEyNC4xMTYxNUUrNzMzMTA5NDI0IiwiNTk3Mzg1ODI4RSszNzU5Mjg3NDUiLCI0LjEyNDExNjE1RSs3MzMxMDk0MjciLCI0LjEyNDExNjE1RSs3MzMxMDk0MjciLCIiLCI2LjkwMzYwNTZFKzM1NzE4MDY3MyIsIiIsIiIsIiIpOworICBtYXRodGVzdCgxOTMsZGVmLCIxMDIuNzE0NDAwIiwiLTkxOTAxNy40NjgiLCItOTE4OTE0Ljc1NCIsIjkxOTEyMC4xODIiLCItOTQzOTYzMjcuOCIsIi0wLjAwMDExMTc2NTQ0OSIsIjAiLCIxMDIuNzE0NDAwIiwiNC4wNDI5NTY4OUUtMTg0ODcyNCIpOworICBtYXRodGVzdCgxOTQsZGVmLCItNDYxNC4zMzAxNUUrOTk2Nzc4NzMzIiwiLTQzMy41NjA4MTJFKzIyODYwNTk5IiwiLTQuNjE0MzMwMTVFKzk5Njc3ODczNiIsIi00LjYxNDMzMDE1RSs5OTY3Nzg3MzYiLCIiLCIxLjA2NDI4NjcyRSs5NzM5MTgxMzUiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMTk1LGRlZiwiNDU3NDU1MTcwLiIsIjM3MDkyMzAuNDhFKzY3NzAxMDg3OSIsIjMuNzA5MjMwNDhFKzY3NzAxMDg4NSIsIi0zLjcwOTIzMDQ4RSs2NzcwMTA4ODUiLCIxLjY5NjgwNjY2RSs2NzcwMTA4OTQiLCIxLjIzMzI4ODYxRS02NzcwMTA4NzciLCIwIiwiNDU3NDU1MTcwIiwiNC4zNzkxOTM3NkUrMzQiKTsKKyAgbWF0aHRlc3QoMTk2LGRlZiwiLTI1MjI0NjguMTUiLCItNDg0ODIwNDMuNSIsIi01MTAwNDUxMS43IiwiNDU5NTk1NzUuNCIsIjEuMjIyOTQ0MTFFKzE0IiwiMC4wNTIwMjg5MTU2IiwiMCIsIi0yNTIyNDY4LjE1IiwiMS40MjM0ODE3OEUtMzEwMzczNTk1Iik7CisgIG1hdGh0ZXN0KDE5NyxkZWYsIi02NTk4MTEzODQiLCI2Mjc3Ny42MTE4IiwiLTY1OTc0ODYwNiIsIi02NTk4NzQxNjIiLCItNC4xNDIxMzgyOUUrMTMiLCItMTA1MTAuMjk3NiIsIi0xMDUxMCIsIi0xODY4My45ODIwIiwiMy40MzkzNTI0RSs1NTM2NjUiKTsKKyAgbWF0aHRlc3QoMTk4LGRlZiwiNDQyNC45NDE3NiIsIi04MjU4NDguMjAiLCItODIxNDIzLjI1OCIsIjgzMDI3My4xNDIiLCItMy42NTQzMzAxOUUrOSIsIi0wLjAwNTM1ODA1NzA0IiwiMCIsIjQ0MjQuOTQxNzYiLCIzLjQyMTUyNzc1RS0zMDEwOTY2Iik7CisgIG1hdGh0ZXN0KDE5OSxkZWYsIjQzLjY0NDE4ODQiLCItNjUwOS44OTY2M0UtNjE0MTY5Mzc3IiwiNDMuNjQ0MTg4NCIsIjQzLjY0NDE4ODQiLCItMi44NDExOTE1NUUtNjE0MTY5MzcyIiwiLTYuNzA0MjgyODZFKzYxNDE2OTM3NCIsIiIsIiIsIjMuMzE1MjQwNTZFLTEyIik7CisgIG1hdGh0ZXN0KDIwMCxkZWYsIjg5Ny4zODgzODFFLTg0Mzg2NDg3NiIsIjg0MTk1LjEzNjkiLCI4NDE5NS4xMzY5IiwiLTg0MTk1LjEzNjkiLCI3LjU1NTU3Mzc2RS04NDM4NjQ4NjkiLCIxLjA2NTg0MzQ4RS04NDM4NjQ4NzgiLCIwIiwiOC45NzM4ODM4MUUtODQzODY0ODc0IiwiIik7CisgIG1hdGh0ZXN0KDIwMSxkZWYsIjc5NjE5OTgyNSIsIjQ5Ni43NjgzNCIsIjc5NjIwMDMyMiIsIjc5NjE5OTMyOCIsIjMuOTU1MjY4NjVFKzExIiwiMTYwMjc1OC43OSIsIjE2MDI3NTgiLCIzOTMuOTE4MjgiLCI2LjQyNjQ3MjY0RSs0NDIzIik7CisgIG1hdGh0ZXN0KDIwMixkZWYsIjU3MzU4MzU4MiIsIjE1OTguNjk1MjEiLCI1NzM1ODUxODEiLCI1NzM1ODE5ODMiLCI5LjE2OTg1MzI1RSsxMSIsIjM1ODc4Mi4zMjMiLCIzNTg3ODIiLCI1MTcuMTY1NzgiLCI5LjkxMTU2MzAyRSsxNDAwNCIpOworICBtYXRodGVzdCgyMDMsZGVmLCItNzgzMTQ0MjcwLiIsIjYzNDcuNzE0OTYiLCItNzgzMTM3OTIyIiwiLTc4MzE1MDYxOCIsIi00Ljk3MTE3NjYwRSsxMiIsIi0xMjMzNzQuMjAyIiwiLTEyMzM3NCIsIi0xMjg0LjUyNDk2IiwiMS4yODExMDgwM0UrNTY0NTgiKTsKKyAgbWF0aHRlc3QoMjA0LGRlZiwiMjY5MDkyMzQuNyIsIjUyNDExLjUwODEiLCIyNjk2MTY0Ni4yIiwiMjY4NTY4MjMuMiIsIjEuNDEwMzUzNTdFKzEyIiwiNTEzLjQyMjI1NSIsIjUxMyIsIjIyMTMxLjA0NDciLCI5Ljc1ODM2NTI4RSszODk0MTUiKTsKKyAgbWF0aHRlc3QoMjA1LGRlZiwiOC4yMTkxNTI4MiIsIjI0ODU5Ljc4NDFFLTg0MzI4Mjk1OSIsIjguMjE5MTUyODIiLCI4LjIxOTE1MjgyIiwiMi4wNDMyNjM2NUUtODQzMjgyOTU0IiwiMy4zMDYyMDQ0M0UrODQzMjgyOTU1IiwiIiwiIiwiNjcuNTU0NDczMSIpOworICBtYXRodGVzdCgyMDYsZGVmLCItNjg4LjM4NzcxMCIsIjgyNzgzLjUyMDdFLTgzMTg3MDg1OCIsIi02ODguMzg3NzEwIiwiLTY4OC4zODc3MTAiLCItNS42OTg3MTU4MkUtODMxODcwODUxIiwiLTguMzE1NTE2MjNFKzgzMTg3MDg1NSIsIiIsIiIsIjUuMDQyNzIwMTJFKzIyIik7CisgIG1hdGh0ZXN0KDIwNyxkZWYsIi05NzkyMjMyLiIsIi0xNzQ5LjAxMTY2IiwiLTk3OTM5ODEuMDEiLCItOTc5MDQ4Mi45OSIsIjEuNzEyNjcyNzlFKzEwIiwiNTU5OC43MjMxMSIsIjU1OTgiLCItMTI2NC43MjczMiIsIi04Ljg2OTg1Njc0RS0xMjIyOCIpOworICBtYXRodGVzdCgyMDgsZGVmLCItMTMwLjc2NTYwMCIsIjguNjc0Mzc0MjciLCItMTIyLjA5MTIyNiIsIi0xMzkuNDM5OTc0IiwiLTExMzQuMzA5NzYiLCItMTUuMDc0OTMxNyIsIi0xNSIsIi0wLjY0OTk4NTk1IiwiLTEuMTE3OTk5NDdFKzE5Iik7CisgIG1hdGh0ZXN0KDIwOSxkZWYsIjkxNy4yNTkxMDIiLCItMzY4NjQwLjQyNiIsIi0zNjc3MjMuMTY3IiwiMzY5NTU3LjY4NSIsIi0zMzgxMzg3ODYiLCItMC4wMDI0ODgyMjE2OSIsIjAiLCI5MTcuMjU5MTAyIiwiOC42NzEwNDI1NUUtMTA5MjA5NCIpOworICBtYXRodGVzdCgyMTAsZGVmLCItNC45NzI1NjMxIiwiLTI5NDU2MzcxNy4iLCItMjk0NTYzNzIyIiwiMjk0NTYzNzEyIiwiMS40NjQ3MzY2N0UrOSIsIjEuNjg4MTExMkUtOCIsIjAiLCItNC45NzI1NjMxIiwiLTYuMjc5NjI1ODRFLTIwNTE4NzI4NCIpOworICBtYXRodGVzdCgyMTEsZGVmLCItNjA5NjI4ODcuMkUtNTE0MjQ5NjYxIiwiLTI0MzAyMS40MDciLCItMjQzMDIxLjQwNyIsIjI0MzAyMS40MDciLCIxLjQ4MTUyODY2RS01MTQyNDk2NDgiLCIyLjUwODUzOThFLTUxNDI0OTY1OSIsIjAiLCItNi4wOTYyODg3MkUtNTE0MjQ5NjU0IiwiIik7CisgIG1hdGh0ZXN0KDIxMixkZWYsIi01NTM4OTIxOS44IiwiLTM3NzIyMDBFKzk4MTg2NjM5MyIsIi0zLjc3MjIwMDAwRSs5ODE4NjYzOTkiLCIzLjc3MjIwMDAwRSs5ODE4NjYzOTkiLCIyLjA4OTM5MjE1RSs5ODE4NjY0MDciLCIxLjQ2ODM1MzIxRS05ODE4NjYzOTIiLCIwIiwiLTU1Mzg5MjE5LjgiLCIxLjA2MjQyNjc4RS0zMSIpOworICBtYXRodGVzdCgyMTMsZGVmLCI2ODEuNjY2MDEwIiwiNjI2ODg2NzAwIiwiNjI2ODg3MzgyIiwiLTYyNjg4NjAxOCIsIjQuMjczMjczNTZFKzExIiwiMC4wMDAwMDEwODczODMxMSIsIjAiLCI2ODEuNjY2MDEwIiwiIik7CisgIG1hdGh0ZXN0KDIxNCxkZWYsIjYuNDI2NTIxMzgiLCI1MzQ2NTg5NC41IiwiNTM0NjU5MDAuOSIsIi01MzQ2NTg4OC4xIiwiMzQzNTk5NzE0IiwiMS4yMDE5ODUyRS03IiwiMCIsIjYuNDI2NTIxMzgiLCI0LjYxMTU1NTMyRSs0MzE5OTE1NyIpOworICBtYXRodGVzdCgyMTUsZGVmLCI1NjE1NDY2NTYiLCI2NTE0MDguNDc2IiwiNTYyMTk4MDY0IiwiNTYwODk1MjQ4IiwiMy42NTc5NjI1MUUrMTQiLCI4NjIuMDQ5OTY4IiwiODYyIiwiMzI1NDkuNjg4IiwiOC42MDUyMzc3RSs1Njk5NDE5Iik7CisgIG1hdGh0ZXN0KDIxNixkZWYsIjc4NDU3NzguMzZFLTc5OTUxMTM5IiwiOS40NTg1OTA0NyIsIjkuNDU4NTkwNDciLCItOS40NTg1OTA0NyIsIjcuNDIxMDAwNDRFLTc5OTUxMTMyIiwiOC4yOTQ4NzA1NkUtNzk5NTExMzQiLCIwIiwiNy44NDU3NzgzNkUtNzk5NTExMzMiLCIxLjEyNjQ4MjE2RS03MTk1NjAxODkiKTsKKyAgbWF0aHRlc3QoMjE3LGRlZiwiNTQ0ODYuMjExMiIsIjEwLjc1NjUwNzgiLCI1NDQ5Ni45Njc3IiwiNTQ0NzUuNDU0NyIsIjU4NjA4MS4zNTYiLCI1MDY1LjQxODI4IiwiNTA2NSIsIjQuNDk5MTkzMCIsIjEuMjU2NDcxNjhFKzUyIik7CisgIG1hdGh0ZXN0KDIxOCxkZWYsIjE2NTc2NDgyLjUiLCItMjIxNzcyMC44MyIsIjE0MzU4NzYxLjciLCIxODc5NDIwMy4zIiwiLTMuNjc2MjAxMDVFKzEzIiwiLTcuNDc0NTU3NzkiLCItNyIsIjEwNTI0MzYuNjkiLCIxLjM4MjU5Mzc0RS0xNjAxMDgyMCIpOworICBtYXRodGVzdCgyMTksZGVmLCI2MS4yNzkzNzg3RS0zOTIwNzAxMTEiLCI2LjIyNTc1NjUxIiwiNi4yMjU3NTY1MSIsIi02LjIyNTc1NjUxIiwiMy44MTUxMDQ5MUUtMzkyMDcwMTA5IiwiOS44NDI4ODA3MkUtMzkyMDcwMTExIiwiMCIsIjYuMTI3OTM3ODdFLTM5MjA3MDExMCIsIiIpOworICBtYXRodGVzdCgyMjAsZGVmLCI1MTE1MTM2LjM5IiwiLTY1MzY3NDM3Mi4iLCItNjQ4NTU5MjM2IiwiNjU4Nzg5NTA4IiwiLTMuMzQzNjMzNTdFKzE1IiwiLTAuMDA3ODI1MjA1NjUiLCIwIiwiNTExNTEzNi4zOSIsIiIpOworICBtYXRodGVzdCgyMjEsZGVmLCItNy44NDIzODM2NkUtNDE2NDc3MzM5IiwiLTM3NDMyNzU4LjlFKzk3MzY5MzkzIiwiLTMuNzQzMjc1ODlFKzk3MzY5NDAwIiwiMy43NDMyNzU4OUUrOTczNjk0MDAiLCIyLjkzNTYyMDU3RS0zMTkxMDc5MzgiLCIyLjA5NTA1ODk1RS01MTM4NDY3MzkiLCIwIiwiLTcuODQyMzgzNjZFLTQxNjQ3NzMzOSIsIiIpOworICBtYXRodGVzdCgyMjIsZGVmLCItMzg3NzgxLjNFKzI4NDEwODM4MCIsIi0yMTgwODUuNTkyIiwiLTMuODc3ODEzMDBFKzI4NDEwODM4NSIsIi0zLjg3NzgxMzAwRSsyODQxMDgzODUiLCI4LjQ1Njk1MTQ0RSsyODQxMDgzOTAiLCIxLjc3ODExNTE3RSsyODQxMDgzODAiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMjIzLGRlZiwiLTUzNTMuMTc3MzYiLCIzLjM5MzMyMzQ2RSs1NDY2ODUzNTkiLCIzLjM5MzMyMzQ2RSs1NDY2ODUzNTkiLCItMy4zOTMzMjM0NkUrNTQ2Njg1MzU5IiwiLTEuODE2NTA2MjNFKzU0NjY4NTM2MyIsIi0xLjU3NzU2MTc3RS01NDY2ODUzNTYiLCIwIiwiLTUzNTMuMTc3MzYiLCItMS41MzQwMzM2OUUrMTEiKTsKKyAgbWF0aHRlc3QoMjI0LGRlZiwiLTIwODM3LjI5MDBFLTE2ODY1Mjc3MiIsIi04MjM2Ljc4MzA1RS03MTI4MTkxNzMiLCItMi4wODM3MjkwMEUtMTY4NjUyNzY4IiwiLTIuMDgzNzI5MDBFLTE2ODY1Mjc2OCIsIjEuNzE2MzIyMzdFLTg4MTQ3MTkzNyIsIjIuNTI5Nzg0OTdFKzU0NDE2NjQwMSIsIiIsIiIsIiIpOworICBtYXRodGVzdCgyMjUsZGVmLCItOTg1NzMuODcyMkUrODI5MDIyMzY2IiwiMzA5MDExLjAwNyIsIi05Ljg1NzM4NzIyRSs4MjkwMjIzNzAiLCItOS44NTczODcyMkUrODI5MDIyMzcwIiwiLTMuMDQ2MDQxMTVFKzgyOTAyMjM3NiIsIi0zLjE4OTk3OTMyRSs4MjkwMjIzNjUiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMjI2LGRlZiwiNDk3MzA3NTAuNyIsIi01MzE1LjEwNjM2RS0yOTk1ODY5OTEiLCI0OTczMDc1MC43IiwiNDk3MzA3NTAuNyIsIi0yLjY0MzI0MjI5RS0yOTk1ODY5ODAiLCItOS4zNTY0OTIxMUUrMjk5NTg2OTk0IiwiIiwiIiwiMy4yODc1NjkzNkUtMzkiKTsKKyAgbWF0aHRlc3QoMjI3LGRlZiwiMTUzOTUyMy40MCIsIi05NjIzODguNTgxIiwiNTc3MTM0LjgyIiwiMjUwMTkxMS45OCIsIi0xLjQ4MTYxOTc0RSsxMiIsIi0xLjU5OTY5MDAxIiwiLTEiLCI1NzcxMzQuODE5IiwiMy4xMDE0NDgzNEUtNTk1NDY3MyIpOworICBtYXRodGVzdCgyMjgsZGVmLCI4MTU5Ni4yMTIxIiwiLTM3NjAwLjk2NTMiLCI0Mzk5NS4yNDY4IiwiMTE5MTk3LjE3NyIsIi0zLjA2ODA5NjM0RSs5IiwiLTIuMTcwMDU2MzEiLCItMiIsIjYzOTQuMjgxNSIsIjEuOTc4NzgyOTlFLTE4NDY4NCIpOworICBtYXRodGVzdCgyMjksZGVmLCI1OTAxNDYxOTkiLCItMTQyNTQwNC42MSIsIjU4ODcyMDc5NCIsIjU5MTU3MTYwNCIsIi04LjQxMTk3MTEzRSsxNCIsIi00MTQuMDIwMTI4IiwiLTQxNCIsIjI4NjkwLjQ2IiwiMi4wNDY1MDk5NEUtMTI1MDIxNzAiKTsKKyAgbWF0aHRlc3QoMjMwLGRlZiwiMTk2LjA1NTQzIiwiNTA1LjkzNjMwNSIsIjcwMS45OTE3MzUiLCItMzA5Ljg4MDg3NSIsIjk5MTkxLjU1OTgiLCIwLjM4NzUxMDEwNCIsIjAiLCIxOTYuMDU1NDMiLCI4Ljc4NDM3Mzk3RSsxMTU5Iik7CisgIG1hdGh0ZXN0KDIzMSxkZWYsIjc3LjgwNTg0NDkiLCItNjQyLjI3NTI3NCIsIi01NjQuNDY5NDI5IiwiNzIwLjA4MTExOSIsIi00OTk3Mi43NzA0IiwiLTAuMTIxMTQwOTYzIiwiMCIsIjc3LjgwNTg0NDkiLCI5LjMzNTgyNjI2RS0xMjE1Iik7CisgIG1hdGh0ZXN0KDIzMixkZWYsIjE0NjguNjA2ODQiLCIxMDA2OC4xMzgiLCIxMTUzNi43NDQ4IiwiLTg1OTkuNTMxMiIsIjE0Nzg2MTM2LjMiLCIwLjE0NTg2Njc3NyIsIjAiLCIxNDY4LjYwNjg0IiwiMi41NDEyMjQ4NEUrMzE4ODQiKTsKKyAgbWF0aHRlc3QoMjMzLGRlZiwiNC45ODc3NDc2N0UtMzg3OTY4NjMyIiwiNC40MTczMTQzOUUtNTc4ODEyMzc2IiwiNC45ODc3NDc2N0UtMzg3OTY4NjMyIiwiNC45ODc3NDc2N0UtMzg3OTY4NjMyIiwiMi4yMDMyNDQ5NkUtOTY2NzgxMDA3IiwiMS4xMjkxMzU3N0UrMTkwODQzNzQ0IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDIzNCxkZWYsIjk4MS4wOTEwNTkiLCItOTIyMzguOTkzMCIsIi05MTI1Ny45MDIwIiwiOTMyMjAuMDg0MSIsIi05MDQ5NDg1MS4zIiwiLTAuMDEwNjM2NDAyNSIsIjAiLCI5ODEuMDkxMDU5IiwiNS4yOTk0MzM0MkUtMjc1OTUzIik7CisgIG1hdGh0ZXN0KDIzNSxkZWYsIi0zNjA2LjI0OTkyIiwiODI5MDIyNC43MCIsIjgyODY2MTguNDUiLCItODI5MzgzMC45NSIsIi0yLjk4OTY2MjIyRSsxMCIsIi0wLjAwMDQzNTAwMDI2MiIsIjAiLCItMzYwNi4yNDk5MiIsIi0xLjIzNzQ3MTA3RSsyOTQ4ODc5MyIpOworICBtYXRodGVzdCgyMzYsZGVmLCItODk3ODU3MS4zNSIsIjkyMjQzLjQ3OTYiLCItODg4NjMyNy44NyIsIi05MDcwODE0LjgzIiwiLTguMjgyMTQ2NjNFKzExIiwiLTk3LjMzNTU2NjYiLCItOTciLCItMzA5NTMuODI4OCIsIi00Ljk1NzYyODEzRSs2NDEzODQiKTsKKyAgbWF0aHRlc3QoMjM3LGRlZiwiLTYxOTY4LjE5OTJFKzgxMDA2MDQ3OCIsIjQ3NDI5NDY3MS5FKzE3OTI2MzQxNCIsIi02LjE5NjgxOTkyRSs4MTAwNjA0ODIiLCItNi4xOTY4MTk5MkUrODEwMDYwNDgyIiwiLTIuOTM5MTE4NjdFKzk4OTMyMzkwNSIsIi0xLjMwNjUzMzc0RSs2MzA3OTcwNjAiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMjM4LGRlZiwiNjEyOTg0MzEuNkUtNzU0NDI5MDQxIiwiLTI1ODQ4NjIuNzkiLCItMjU4NDg2Mi43OSIsIjI1ODQ4NjIuNzkiLCItMS41ODQ0ODAzNUUtNzU0NDI5MDI3IiwiLTIuMzcxNDM4NTFFLTc1NDQyOTA0MCIsIjAiLCI2LjEyOTg0MzE2RS03NTQ0MjkwMzQiLCIiKTsKKyAgbWF0aHRlc3QoMjM5LGRlZiwiNjIxMDM5LjA2NCIsIi01MzUxNTM5LjYyIiwiLTQ3MzA1MDAuNTYiLCI1OTcyNTc4LjY4IiwiLTMuMzIzNTE1MTZFKzEyIiwiLTAuMTE2MDQ4NjcyIiwiMCIsIjYyMTAzOS4wNjQiLCIyLjQxMTYzMzEyRS0zMTAwMjEwOCIpOworICBtYXRodGVzdCgyNDAsZGVmLCItMTkuNjAwNzYwNSIsIi01NzkwNTY5Ni4iLCItNTc5MDU3MTUuNiIsIjU3OTA1Njc2LjQiLCIxLjEzNDk5NTY4RSs5IiwiMy4zODQ5NDUxNUUtNyIsIjAiLCItMTkuNjAwNzYwNSIsIjEuMDU2NjM2NDZFLTc0ODI5OTYzIik7CisgIG1hdGh0ZXN0KDI0MSxkZWYsIjM2MjYuMTMxMDlFKzY4NzAzMDM0NiIsIjE4OS44OTYwMDQiLCIzLjYyNjEzMTA5RSs2ODcwMzAzNDkiLCIzLjYyNjEzMTA5RSs2ODcwMzAzNDkiLCI2Ljg4NTg3ODA0RSs2ODcwMzAzNTEiLCIxLjkwOTUzNTIzRSs2ODcwMzAzNDciLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMjQyLGRlZiwiLTI0OTMzNC4wMjYiLCItNy41NDczNTgzNEUtMTQxMzcxODgiLCItMjQ5MzM0LjAyNiIsIi0yNDkzMzQuMDI2IiwiMS44ODE4MTMyNEUtMTQxMzcxODIiLCIzLjMwMzU5MzMyRSsxNDEzNzE5MiIsIiIsIiIsIjYuNjk0OTU0MDhFLTQ0Iik7CisgIG1hdGh0ZXN0KDI0MyxkZWYsIjQxNzYxMzkyOC4iLCItOTI1MjEzLjIxNiIsIjQxNjY4ODcxNSIsIjQxODUzOTE0MSIsIi0zLjg2MzgxOTI1RSsxNCIsIi00NTEuMzcwNDc0IiwiLTQ1MSIsIjM0Mjc2Ny41ODQiLCI4LjM4NDMwMDg1RS03OTc2MDU0Iik7CisgIG1hdGh0ZXN0KDI0NCxkZWYsIjIzLjgzMjAzMDkiLCItNTAwNzQ5OTYuMSIsIi01MDA3NDk3Mi4zIiwiNTAwNzUwMTkuOSIsIi0xLjE5MzM4ODg1RSs5IiwiLTQuNzU5MjY3NjVFLTciLCIwIiwiMjMuODMyMDMwOSIsIjUuODE0NjYzODdFLTY4OTYxMzM1Iik7CisgIG1hdGh0ZXN0KDI0NSxkZWYsIjQ5Nzg5Njc3LjciLCItMTMxODI3ODEyRSsxNTY0MTI1MzQiLCItMS4zMTgyNzgxMkUrMTU2NDEyNTQyIiwiMS4zMTgyNzgxMkUrMTU2NDEyNTQyIiwiLTYuNTYzNjY0MjdFKzE1NjQxMjU0OSIsIi0zLjc3Njg3MjA0RS0xNTY0MTI1MzUiLCIwIiwiNDk3ODk2NzcuNyIsIjIuMDA4NDQ4NDNFLTgiKTsKKyAgbWF0aHRlc3QoMjQ2LGRlZiwiLTg5MDcxNjMuNjFFLTc0MTg2NzI0NiIsIjc3MzY1MS4yODhFLTQ3MjAzMzI4MiIsIjcuNzM2NTEyODhFLTQ3MjAzMzI3NyIsIi03LjczNjUxMjg4RS00NzIwMzMyNzciLCIiLCItMS4xNTEzMTUwNEUtMjY5ODMzOTYzIiwiMCIsIi04LjkwNzE2MzYxRS03NDE4NjcyNDAiLCIiKTsKKyAgbWF0aHRlc3QoMjQ3LGRlZiwiNTE0MDIxNzExLkUrNDYzNTM2NjQ2IiwiNjE3NDQxNjU5LiIsIjUuMTQwMjE3MTFFKzQ2MzUzNjY1NCIsIjUuMTQwMjE3MTFFKzQ2MzUzNjY1NCIsIjMuMTczNzg0MThFKzQ2MzUzNjY2MyIsIjguMzI1MDI0NzhFKzQ2MzUzNjY0NSIsIiIsIiIsIiIpOworICBtYXRodGVzdCgyNDgsZGVmLCI5OTgxNzU3NTAiLCIyLjM5Mjg1NDc4IiwiOTk4MTc1NzUyIiwiOTk4MTc1NzQ4IiwiMi4zODg0ODk2MUUrOSIsIjQxNzE0ODQ4NyIsIjQxNzE0ODQ4NiIsIjEuMzA1MTM2OTIiLCI5Ljk2MzU0ODI4RSsxNyIpOworICBtYXRodGVzdCgyNDksZGVmLCI4NzM1NzU0MjYuIiwiNjQ3ODUzLjE1MkUrNDk3NDUwNzgxIiwiNi40Nzg1MzE1MkUrNDk3NDUwNzg2IiwiLTYuNDc4NTMxNTJFKzQ5NzQ1MDc4NiIsIjUuNjU5NDg1OTNFKzQ5NzQ1MDc5NSIsIjEuMzQ4NDE1OEUtNDk3NDUwNzc4IiwiMCIsIjg3MzU3NTQyNiIsIjQuNDQ0MjkwNjRFKzUzIik7CisgIG1hdGh0ZXN0KDI1MCxkZWYsIjQzNTI2MjYuOCIsIi0xMzAzMzgwNDguRS03NDQ1NjA5MTEiLCI0MzUyNjI2LjgwIiwiNDM1MjYyNi44MCIsIi01LjY3MzEyODgxRS03NDQ1NjA4OTciLCItMy4zMzk0OTA1NUUrNzQ0NTYwOTA5IiwiIiwiIiwiMi4yOTc0NjMyMkUtNyIpOworICBtYXRodGVzdCgyNTEsZGVmLCI0MzcuMjg2OTYwIiwiNy4zNzU2MDgzNSIsIjQ0NC42NjI1NjgiLCI0MjkuOTExMzUyIiwiMzIyNS4yNTczNSIsIjU5LjI4ODI1NjUiLCI1OSIsIjIuMTI2MDY3MzUiLCIzLjA1NzQ5NDUyRSsxOCIpOworICBtYXRodGVzdCgyNTIsZGVmLCI4NDk4MjgwLjQ1RSsyMjA1MTE1MjIiLCI1ODg2MTc2MTIiLCI4LjQ5ODI4MDQ1RSsyMjA1MTE1MjgiLCI4LjQ5ODI4MDQ1RSsyMjA1MTE1MjgiLCI1LjAwMjIzNzU0RSsyMjA1MTE1MzciLCIxLjQ0Mzc2OTMxRSsyMjA1MTE1MjAiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMjUzLGRlZiwiLTUzMjAzODcuNzciLCItNzY3MzIzNy40NiIsIi0xMjk5MzYyNS4yIiwiMjM1Mjg0OS42OSIsIjQuMDgyNDU5ODdFKzEzIiwiMC42OTMzNjkzNjMiLCIwIiwiLTUzMjAzODcuNzciLCItMS4zMDExMzc0NUUtNTE2MDk3NTciKTsKKyAgbWF0aHRlc3QoMjU0LGRlZiwiNTg3NjU1Mzc1IiwiLTQuOTc0ODM2NiIsIjU4NzY1NTM3MCIsIjU4NzY1NTM4MCIsIi0yLjkyMzQ4OTQ3RSs5IiwiLTExODEyNTU2MyIsIi0xMTgxMjU1NjMiLCIwLjc5MTk5NDIiLCIxLjQyNjg3NjY3RS00NCIpOworICBtYXRodGVzdCgyNTUsZGVmLCIxMjY2MDk4LjQ0IiwiLTI2NjEuNjQ5MDRFLTY0MjYwMTE0MiIsIjEyNjYwOTguNDQiLCIxMjY2MDk4LjQ0IiwiLTMuMzY5OTA5NzBFLTY0MjYwMTEzMyIsIi00Ljc1NjgxOTYzRSs2NDI2MDExNDQiLCIiLCIiLCI0LjkyNzE3MDM2RS0xOSIpOworICBtYXRodGVzdCgyNTYsZGVmLCIzLjkyNzM3NDYzRSs0ODI4NzM0ODMiLCItNjg1LjUyMjc0NyIsIjMuOTI3Mzc0NjNFKzQ4Mjg3MzQ4MyIsIjMuOTI3Mzc0NjNFKzQ4Mjg3MzQ4MyIsIi0yLjY5MjMwNDY0RSs0ODI4NzM0ODYiLCItNS43MjkwMjE2MUUrNDgyODczNDgwIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDI1NyxkZWYsIjIyODI2NDk0LjEiLCI5ODYxODk0NzQuIiwiMS4wMDkwMTU5N0UrOSIsIi05NjMzNjI5ODAiLCIyLjI1MTEyNDgyRSsxNiIsIjAuMDIzMTQ2MTU0NyIsIjAiLCIyMjgyNjQ5NC4xIiwiIik7CisgIG1hdGh0ZXN0KDI1OCxkZWYsIi02NDczNDIuMzgwIiwiLTQ5ODgxNjM4NiIsIi00OTk0NjM3MjgiLCI0OTgxNjkwNDQiLCIzLjIyOTA0OTg2RSsxNCIsIjAuMDAxMjk3NzU2ODUiLCIwIiwiLTY0NzM0Mi4zODAiLCIiKTsKKyAgbWF0aHRlc3QoMjU5LGRlZiwiMzkzMDkyMzczLiIsIi0yNS43MjI2ODIyIiwiMzkzMDkyMzQ3IiwiMzkzMDkyMzk5IiwiLTEuMDExMTM5MDJFKzEwIiwiLTE1MjgxOTM1LjYiLCItMTUyODE5MzUiLCIxNS41OTM5NDMwIiwiMy40OTI1MjgzOUUtMjI0Iik7CisgIG1hdGh0ZXN0KDI2MCxkZWYsIjIuOTYyNTM0OTIiLCIyMC43NDQ0ODg4IiwiMjMuNzA3MDIzNyIsIi0xNy43ODE5NTM5IiwiNjEuNDU2MjcyNSIsIjAuMTQyODEwNjk4IiwiMCIsIjIuOTYyNTM0OTIiLCI4LjAzNDAyMjQ2RSs5Iik7CisgIG1hdGh0ZXN0KDI2MSxkZWYsIjUzNTUzLjM3NTBFKzM4Njk1NTQyMyIsIi03MzI0NzA4NzYiLCI1LjM1NTMzNzUwRSszODY5NTU0MjciLCI1LjM1NTMzNzUwRSszODY5NTU0MjciLCItMy45MjI2Mjg3NUUrMzg2OTU1NDM2IiwiLTcuMzExMzMxNjVFKzM4Njk1NTQxOCIsIiIsIiIsIiIpOworICBtYXRodGVzdCgyNjIsZGVmLCItNjk2NDUxLjQwNkUtMjg2NTM1OTE3IiwiLTczMDg2MDkwLjgiLCItNzMwODYwOTAuOCIsIjczMDg2MDkwLjgiLCI1LjA5MDA5MTA3RS0yODY1MzU5MDQiLCI5LjUyOTE5MjE5RS0yODY1MzU5MjAiLCIwIiwiLTYuOTY0NTE0MDZFLTI4NjUzNTkxMiIsIiIpOworICBtYXRodGVzdCgyNjMsZGVmLCIxNTUxLjI5OTU3IiwiLTU4MDM1ODYyMi5FKzExNzAxNzI2NSIsIi01LjgwMzU4NjIyRSsxMTcwMTcyNzMiLCI1LjgwMzU4NjIyRSsxMTcwMTcyNzMiLCItOS4wMDMxMDA4MUUrMTE3MDE3Mjc2IiwiLTIuNjczMDAxNjhFLTExNzAxNzI3MSIsIjAiLCIxNTUxLjI5OTU3IiwiNy4xNzUwNjcxMUUtMjAiKTsKKyAgbWF0aHRlc3QoMjY0LGRlZiwiLTIwNTEyMzAwNi5FLTIxMzc1Mjc5OSIsIi03ODYzODQ2OC42IiwiLTc4NjM4NDY4LjYiLCI3ODYzODQ2OC42IiwiMS42MTMwNTU5MUUtMjEzNzUyNzgzIiwiMi42MDg0MzA4M0UtMjEzNzUyNzk5IiwiMCIsIi0yLjA1MTIzMDA2RS0yMTM3NTI3OTEiLCIiKTsKKyAgbWF0aHRlc3QoMjY1LGRlZiwiNzc2MzIuODA3MyIsIi0zMzc4NTQyLjg4RSs2Nzc0NDEzMTkiLCItMy4zNzg1NDI4OEUrNjc3NDQxMzI1IiwiMy4zNzg1NDI4OEUrNjc3NDQxMzI1IiwiLTIuNjIyODU3NjhFKzY3NzQ0MTMzMCIsIi0yLjI5NzgxOTIxRS02Nzc0NDEzMjEiLCIwIiwiNzc2MzIuODA3MyIsIjIuMTM3MjkzMzFFLTE1Iik7CisgIG1hdGh0ZXN0KDI2NixkZWYsIjMwNjg5OTkuMzciLCIyLjIxMDA2MjEyIiwiMzA2OTAwMS41OCIsIjMwNjg5OTcuMTYiLCI2NzgyNjc5LjI1IiwiMTM4ODY0OC40NiIsIjEzODg2NDgiLCIxLjAyNzE4NjI0IiwiOS40MTg3NTcxM0UrMTIiKTsKKyAgbWF0aHRlc3QoMjY3LGRlZiwiNjI1NTI0Mjc0LiIsIjU1LjI0Njg2MjQiLCI2MjU1MjQzMjkiLCI2MjU1MjQyMTkiLCIzLjQ1NTgyNTM1RSsxMCIsIjExMzIyMzQ5LjMiLCIxMTMyMjM0OSIsIjE2Ljc1MjIyMjQiLCI2LjIxNDgyOTQzRSs0ODMiKTsKKyAgbWF0aHRlc3QoMjY4LGRlZiwiNjEyNjkxMzQuOSIsIi04NDU3NjEzMDMuIiwiLTc4NDQ5MjE2OCIsIjkwNzAzMDQzOCIsIi01LjE4MTkwNjM0RSsxNiIsIi0wLjA3MjQ0MjU4NDgiLCIwIiwiNjEyNjkxMzQuOSIsIiIpOworICBtYXRodGVzdCgyNjksZGVmLCItMjg0MC4xMjA5OSIsIi0yODU2Ljc2NzMxRS04Mjc0MzY1MCIsIi0yODQwLjEyMDk5IiwiLTI4NDAuMTIwOTkiLCI4LjExMzU2NDgwRS04Mjc0MzY0NCIsIjkuOTQxNzMwMjJFKzgyNzQzNjQ5IiwiIiwiIiwiLTQuMzY1MDUyNTRFLTExIik7CisgIG1hdGh0ZXN0KDI3MCxkZWYsIjguOTUzODc4MSIsIi03LjU2NjAzMzkxIiwiMS4zODc4NDQxOSIsIjE2LjUxOTkxMjAiLCItNjcuNzQ1MzQ1MyIsIi0xLjE4MzQzMDg3IiwiLTEiLCIxLjM4Nzg0NDE5IiwiMi40MjA1MzA2MUUtOCIpOworICBtYXRodGVzdCgyNzEsZGVmLCItNTYyMzM1NDcuMiIsIjUwOTc1MjUzMCIsIjQ1MzUxODk4MyIsIi01NjU5ODYwNzciLCItMi44NjY1MTkzMEUrMTYiLCItMC4xMTAzMTUzODYiLCIwIiwiLTU2MjMzNTQ3LjIiLCIiKTsKKyAgbWF0aHRlc3QoMjcyLGRlZiwiLTMxNjcuNDc4NTNFLTg1NDg1OTQ5NyIsIi0xMTA4NTIxMTUiLCItMTEwODUyMTE1IiwiMTEwODUyMTE1IiwiMy41MTEyMTY5NEUtODU0ODU5NDg2IiwiMi44NTczOTExNkUtODU0ODU5NTAyIiwiMCIsIi0zLjE2NzQ3ODUzRS04NTQ4NTk0OTQiLCIiKTsKKyAgbWF0aHRlc3QoMjczLGRlZiwiLTU2NTIuNTIwOTIiLCItNjMyMjQzMjQ0LiIsIi02MzIyNDg4OTciLCI2MzIyMzc1OTIiLCIzLjU3Mzc2ODE2RSsxMiIsIjAuMDAwMDA4OTQwNDIxMjMiLCIwIiwiLTU2NTIuNTIwOTIiLCIiKTsKKyAgbWF0aHRlc3QoMjc0LGRlZiwiLTk0Ni4wMDk5MjgiLCI4MjAwOTAuNjZFLTU4OTI3ODAxNSIsIi05NDYuMDA5OTI4IiwiLTk0Ni4wMDk5MjgiLCItNy43NTgxMzkwNkUtNTg5Mjc4MDA3IiwiLTEuMTUzNTQzMTFFKzU4OTI3ODAxMiIsIiIsIiIsIjYuNDE0NTQwNTNFKzIzIik7CisgIG1hdGh0ZXN0KDI3NSxkZWYsIi0zNjcuNzU3NzU4IiwiLTk1OS42MjYwMTYiLCItMTMyNy4zODM3NyIsIjU5MS44NjgyNTgiLCIzNTI5MDkuOTEyIiwiMC4zODMyMzAyOTIiLCIwIiwiLTM2Ny43NTc3NTgiLCIxLjE0OTgyMTk5RS0yNDYzIik7CisgIG1hdGh0ZXN0KDI3NixkZWYsIjgwOTkyNjcyMS5FLTc0NDYxMTU1NCIsIi02Ny42NTYwNTQ5IiwiLTY3LjY1NjA1NDkiLCI2Ny42NTYwNTQ5IiwiLTUuNDc5NjQ0NjdFLTc0NDYxMTU0NCIsIi0xLjE5NzEyMzc4RS03NDQ2MTE1NDciLCIwIiwiOC4wOTkyNjcyMUUtNzQ0NjExNTQ2IiwiIik7CisgIG1hdGh0ZXN0KDI3NyxkZWYsIi0xNzI1LjA4NTU1IiwiNzU1ODYuMzAzMSIsIjczODYxLjIxNzYiLCItNzczMTEuMzg4NyIsIi0xMzAzOTI4MzkiLCItMC4wMjI4MjI3MjY5IiwiMCIsIi0xNzI1LjA4NTU1IiwiMy43MDU0MDU4N0UrMjQ0NjU3Iik7CisgIG1hdGh0ZXN0KDI3OCxkZWYsIjI2NTkuODQxOTFFKzI5MzE0NDkyIiwiLTc0MzcyLjQ1NTFFKzUxODE5NjY4MCIsIi03LjQzNzI0NTUxRSs1MTgxOTY2ODQiLCI3LjQzNzI0NTUxRSs1MTgxOTY2ODQiLCItMS45NzgxODk3M0UrNTQ3NTExMTgwIiwiLTMuNTc2MzgwNEUtNDg4ODgyMTkwIiwiMCIsIjIuNjU5ODQxOTFFKzI5MzE0NDk1IiwiMS4wNjE3MTgxMUUtMjA1MjAxNDY4Iik7CisgIG1hdGh0ZXN0KDI3OSxkZWYsIi05MS4xNDMxMTEzIiwiMTIxNDc1MDcuMCIsIjEyMTQ3NDE1LjkiLCItMTIxNDc1OTguMSIsIi0xLjEwNzE2MTU4RSs5IiwiLTAuMDAwMDA3NTAzMDMwMTUiLCIwIiwiLTkxLjE0MzExMTMiLCItMS41MjQxNzAwNkUrMjM4MDU3NTkiKTsKKyAgbWF0aHRlc3QoMjgwLGRlZiwiLTExMzY3NzguOTFFKzY5Nzc4Mzg3OCIsIi04MDE1NTI1NjkuIiwiLTEuMTM2Nzc4OTFFKzY5Nzc4Mzg4NCIsIi0xLjEzNjc3ODkxRSs2OTc3ODM4ODQiLCI5LjExMTg4MDU2RSs2OTc3ODM4OTIiLCIxLjQxODIyMTI4RSs2OTc3ODM4NzUiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMjgxLGRlZiwiNzMxMjM3NzMuMEUrNDMzMzM0MTQ5IiwiNjMuMzU0ODkzMCIsIjcuMzEyMzc3MzBFKzQzMzMzNDE1NiIsIjcuMzEyMzc3MzBFKzQzMzMzNDE1NiIsIjQuNjMyNzQ4ODFFKzQzMzMzNDE1OCIsIjEuMTU0MTkyOThFKzQzMzMzNDE1NSIsIiIsIiIsIiIpOworICBtYXRodGVzdCgyODIsZGVmLCItOTc2NTQ4NC44IiwiNzk3OS45MDgwMkUtMjM0MDI5NzE1IiwiLTk3NjU0ODQuODAiLCItOTc2NTQ4NC44MCIsIi03Ljc5Mjc2NzA1RS0yMzQwMjk3MDUiLCItMS4yMjM3NTkwN0UrMjM0MDI5NzE4IiwiIiwiIiwiOC4yNzA4NTYxNEUrNTUiKTsKKyAgbWF0aHRlc3QoMjgzLGRlZiwiLTY5NTAxMDI4OCIsIi04LjI2NTgyODIwIiwiLTY5NTAxMDI5NiIsIi02OTUwMTAyODAiLCI1Ljc0NDgzNTY0RSs5IiwiODQwODIzNTMuNCIsIjg0MDgyMzUzIiwiLTMuNDUwMjQ1NDAiLCIxLjgzNjgzNDk1RS03MSIpOworICBtYXRodGVzdCgyODQsZGVmLCIyMzk3NTY0My4zRS0xNTU5NTUyNjQiLCItNTA1NTQ3LjY5MkUrMTM3MjU4OTQ4IiwiLTUuMDU1NDc2OTJFKzEzNzI1ODk1MyIsIjUuMDU1NDc2OTJFKzEzNzI1ODk1MyIsIi0xLjIxMjA4MzExRS0xODY5NjMwMyIsIi00Ljc0MjUwODdFLTI5MzIxNDIxMSIsIjAiLCIyLjM5NzU2NDMzRS0xNTU5NTUyNTciLCIxLjI2MjI1OTUyRSs3Nzk3NzYyODMiKTsKKyAgbWF0aHRlc3QoMjg1LGRlZiwiMjg2Mi45NTkyMSIsIi0zMjYwMTI0OC42RS02MDU4NjEzMzMiLCIyODYyLjk1OTIxIiwiMjg2Mi45NTkyMSIsIi05LjMzMzYwNDQ5RS02MDU4NjEzMjMiLCItOC43ODE3NDcxMkUrNjA1ODYxMzI4IiwiIiwiIiwiNC4yNjE0MjE3NUUtMTEiKTsKKyAgbWF0aHRlc3QoMjg2LGRlZiwiLTEzLjEzMzUxOEUrMjQ2MDkwNTE2IiwiLTguNzEyNjk5MjVFLTk0NTA5MjEwOCIsIi0xLjMxMzM1MTgwRSsyNDYwOTA1MTciLCItMS4zMTMzNTE4MEUrMjQ2MDkwNTE3IiwiMS4xNDQyODM5MkUtNjk5MDAxNTkwIiwiIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDI4NyxkZWYsIi0zNDY3MS4yMjMyIiwiODE3NzEwLjc2MiIsIjc4MzAzOS41MzkiLCItODUyMzgxLjk4NSIsIi0yLjgzNTEwMzIzRSsxMCIsIi0wLjA0MjQwMDM1MDgiLCIwIiwiLTM0NjcxLjIyMzIiLCItNS4zMDc4ODgyOEUrMzcxMjM4MiIpOworICBtYXRodGVzdCgyODgsZGVmLCItMjI0NjQ3NjkiLCI2Mi40MzY2MDYwIiwiLTIyNDY0NzA2LjYiLCItMjI0NjQ4MzEuNCIsIi0xLjQwMjYyMzkzRSs5IiwiLTM1OTgwMS4yNTIiLCItMzU5ODAxIiwiLTE1LjcyNDU5NDAiLCI2LjIxMDQyNTM2RSs0NTUiKTsKKyAgbWF0aHRlc3QoMjg5LGRlZiwiLTk0NTguNjA4ODdFLTU2MzA1MTk2MyIsIjU2NzYwNTYuMDEiLCI1Njc2MDU2LjAxIiwiLTU2NzYwNTYuMDEiLCItNS4zNjg3NTkzN0UtNTYzMDUxOTUzIiwiLTEuNjY2NDA1MTNFLTU2MzA1MTk2NiIsIjAiLCItOS40NTg2MDg4N0UtNTYzMDUxOTYwIiwiIik7CisgIG1hdGh0ZXN0KDI5MCxkZWYsIi01OTEuOTI0MTIzRS05NTMzMTg3NCIsIi0xMzQuNTk2MTg4IiwiLTEzNC41OTYxODgiLCIxMzQuNTk2MTg4IiwiNy45NjcwNzMwNUUtOTUzMzE4NzAiLCI0LjM5Nzc3Nzc3RS05NTMzMTg3NCIsIjAiLCItNS45MTkyNDEyM0UtOTUzMzE4NzIiLCIiKTsKKyAgbWF0aHRlc3QoMjkxLGRlZiwiLTE4MjU2NjA4NS5FKzY4ODcwNjQ2IiwiLTk2MDM0NTk5My4iLCItMS44MjU2NjA4NUUrNjg4NzA2NTQiLCItMS44MjU2NjA4NUUrNjg4NzA2NTQiLCIxLjc1MzI2NjA4RSs2ODg3MDY2MyIsIjEuOTAxMDQ0OUUrNjg4NzA2NDUiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMjkyLGRlZiwiODIzMi41NDg5MyIsIi05OTgyMjAwNEUrODkxOTc5ODQ1IiwiLTkuOTgyMjAwNDBFKzg5MTk3OTg1MiIsIjkuOTgyMjAwNDBFKzg5MTk3OTg1MiIsIi04LjIxNzg5NTMyRSs4OTE5Nzk4NTYiLCItOC4yNDcyMjg2N0UtODkxOTc5ODUwIiwiMCIsIjgyMzIuNTQ4OTMiLCI2Ljk5Mjg5MTU2RS00MCIpOworICBtYXRodGVzdCgyOTMsZGVmLCItNDMzNi45NDMxNyIsIi04MTkzNzMuNjAxRSs1NjMyMzM0MzAiLCItOC4xOTM3MzYwMUUrNTYzMjMzNDM1IiwiOC4xOTM3MzYwMUUrNTYzMjMzNDM1IiwiMy41NTM1NzY3NEUrNTYzMjMzNDM5IiwiNS4yOTI5OTg0MUUtNTYzMjMzNDMzIiwiMCIsIi00MzM2Ljk0MzE3IiwiNy45ODk2OTQwNUUtMzAiKTsKKyAgbWF0aHRlc3QoMjk0LGRlZiwiLTIuMDkwNDQzNjJFLTg3NjUyNzkwOCIsIi02NTE1NDYzLjMzIiwiLTY1MTU0NjMuMzMiLCI2NTE1NDYzLjMzIiwiMS4zNjIwMjA4N0UtODc2NTI3OTAxIiwiMy4yMDg0MzQzM0UtODc2NTI3OTE1IiwiMCIsIi0yLjA5MDQ0MzYyRS04NzY1Mjc5MDgiLCIiKTsKKyAgbWF0aHRlc3QoMjk1LGRlZiwiLTE5NDM0My4zNDQiLCIxLjk1OTI5OTc3IiwiLTE5NDM0MS4zODUiLCItMTk0MzQ1LjMwMyIsIi0zODA3NzYuODY5IiwiLTk5MTkwLjIwNDEiLCItOTkxOTAiLCItMC4zOTk4MTM3MCIsIjMuNzc2OTMzNTRFKzEwIik7CisgIG1hdGh0ZXN0KDI5NixkZWYsIi0zMjYwMDIuOTI3IiwiNDIxNS45OTAzMCIsIi0zMjE3ODYuOTM3IiwiLTMzMDIxOC45MTciLCItMS4zNzQ0MjUxOEUrOSIsIi03Ny4zMjUzNTAzIiwiLTc3IiwiLTEzNzEuNjczOTAiLCI1LjUxODc1ODIxRSsyMzI0MyIpOworICBtYXRodGVzdCgyOTcsZGVmLCItMTIwMzcuODU5MEUrODc2NDI5MDQ0IiwiMzE0LjgxODI3IiwiLTEuMjAzNzg1OTBFKzg3NjQyOTA0OCIsIi0xLjIwMzc4NTkwRSs4NzY0MjkwNDgiLCItMy43ODk3Mzc5NEUrODc2NDI5MDUwIiwiLTMuODIzNzQ4NTRFKzg3NjQyOTA0NSIsIiIsIiIsIiIpOworICBtYXRodGVzdCgyOTgsZGVmLCIyMTAzNjA0NS40RS0xNjI4MDQ4MDkiLCItOTEuNzE0OTIxOSIsIi05MS43MTQ5MjE5IiwiOTEuNzE0OTIxOSIsIi0xLjkyOTMxOTI2RS0xNjI4MDQ4MDAiLCItMi4yOTM2MzM5RS0xNjI4MDQ4MDQiLCIwIiwiMi4xMDM2MDQ1NEUtMTYyODA0ODAyIiwiIik7CisgIG1hdGh0ZXN0KDI5OSxkZWYsIi05NDcwMTkuNTM0IiwiOTkxNi4yOTI4MCIsIi05MzcxMDMuMjQxIiwiLTk1NjkzNS44MjciLCItOS4zOTA5MjI5OUUrOSIsIi05NS41MDEzNjg2IiwiLTk1IiwiLTQ5NzEuNzE4MDAiLCIzLjc2MDI5MDIyRSs1OTI2MSIpOworICBtYXRodGVzdCgzMDAsZGVmLCItNTk4NS44NDEzNiIsIi0xMi40MDkwMTg0RS0xMjM2NDIwNCIsIi01OTg1Ljg0MTM2IiwiLTU5ODUuODQxMzYiLCI3LjQyNzg0MTU2RS0xMjM2NDIwMCIsIjQuODIzNzgzMTNFKzEyMzY0MjA2IiwiIiwiIiwiLTAuMDAwMTY3MDYwODkzIik7CisgIG1hdGh0ZXN0KDMwMSxkZWYsIi04NTM0NDM3OS40IiwiLTY3ODMuMDg2NjlFKzIxODg0MDIxNSIsIi02Ljc4MzA4NjY5RSsyMTg4NDAyMTgiLCI2Ljc4MzA4NjY5RSsyMTg4NDAyMTgiLCI1Ljc4ODk4MzI0RSsyMTg4NDAyMjYiLCIxLjI1ODE5Mzg1RS0yMTg4NDAyMTEiLCIwIiwiLTg1MzQ0Mzc5LjQiLCItMy4wMzIzMjM0N0UtNTYiKTsKKyAgbWF0aHRlc3QoMzAyLGRlZiwiLTk0LjE5NDcwNzBFLTkzODI1NzEwMyIsIjE1MDAzLjI0MCIsIjE1MDAzLjI0MDAiLCItMTUwMDMuMjQwMCIsIi0xLjQxMzIyNTgwRS05MzgyNTcwOTciLCItNi4yNzgyOTEwMkUtOTM4MjU3MTA2IiwiMCIsIi05LjQxOTQ3MDcwRS05MzgyNTcxMDIiLCIiKTsKKyAgbWF0aHRlc3QoMzAzLGRlZiwiLTQ4NDYyMzMuNiIsIi04Mjg5NzY5Ljc2IiwiLTEzMTM2MDAzLjQiLCIzNDQzNTM2LjE2IiwiNC4wMTc0MTYwN0UrMTMiLCIwLjU4NDYwNDEyNSIsIjAiLCItNDg0NjIzMy42IiwiNC4yNTA3NzUyNEUtNTU0MjA0NjUiKTsKKyAgbWF0aHRlc3QoMzA0LGRlZiwiNjcuOTE0NzE5OCIsIi0xMDgzNzM2NDUuRSsyOTE3MTU0MTUiLCItMS4wODM3MzY0NUUrMjkxNzE1NDIzIiwiMS4wODM3MzY0NUUrMjkxNzE1NDIzIiwiLTcuMzYwMTY1NzNFKzI5MTcxNTQyNCIsIi02LjI2NjcxOTE2RS0yOTE3MTU0MjIiLCIwIiwiNjcuOTE0NzE5OCIsIjAuMDE0NzI0MzQ4NSIpOworICBtYXRodGVzdCgzMDUsZGVmLCIxOTU4Ljc3OTk0IiwiNS41NzI4NTEzN0UrNjkwMTM3ODI2IiwiNS41NzI4NTEzN0UrNjkwMTM3ODI2IiwiLTUuNTcyODUxMzdFKzY5MDEzNzgyNiIsIjEuMDkxNTk4OTVFKzY5MDEzNzgzMCIsIjMuNTE0ODYxMjZFLTY5MDEzNzgyNCIsIjAiLCIxOTU4Ljc3OTk0IiwiNS42NDgyNDk2OEUrMTkiKTsKKyAgbWF0aHRlc3QoMzA2LGRlZiwiMjI3ODAzMTQuMyIsIjg4MDUyNzkuODMiLCIzMTU4NTU5NC4xIiwiMTM5NzUwMzQuNSIsIjIuMDA1ODcwNDJFKzE0IiwiMi41ODcxMTk4NiIsIjIiLCI1MTY5NzU0LjY0IiwiMi4zOTEzMjE2OUUrNjQ3ODUzNzMiKTsKKyAgbWF0aHRlc3QoMzA3LGRlZiwiNTk2NzQ1LjE4NCIsIjE5NzYwMjQyMy4iLCIxOTgxOTkxNjgiLCItMTk3MDA1Njc4IiwiMS4xNzkxODI5NEUrMTQiLCIwLjAwMzAxOTkyODQ4IiwiMCIsIjU5Njc0NS4xODQiLCIiKTsKKyAgbWF0aHRlc3QoMzA4LGRlZiwiMTcxLjM0MDQ5NyIsIi00ODAzNDkuOTI0IiwiLTQ4MDE3OC41ODQiLCI0ODA1MjEuMjY0IiwiLTgyMzAzMzk0LjciLCItMC4wMDAzNTY2OTkzMzIiLCIwIiwiMTcxLjM0MDQ5NyIsIjIuMTc5MTQxMDJFLTEwNzMwMzUiKTsKKyAgbWF0aHRlc3QoMzA5LGRlZiwiODI0LjY1NTU1IiwiLTM3OTI4Ny41MzAiLCItMzc4NDYyLjg3NSIsIjM4MDExMi4xODYiLCItMzEyNzgxNTY3IiwiLTAuMDAyMTc0MjIyNjgiLCIwIiwiODI0LjY1NTU1IiwiNi4zNTgyOTI1NkUtMTEwNjEwOCIpOworICBtYXRodGVzdCgzMTAsZGVmLCIxOS4zMTY0MDMxIiwiLTkyMDc2NDQuMjRFKzk4ODExNTA2OSIsIi05LjIwNzY0NDI0RSs5ODgxMTUwNzUiLCI5LjIwNzY0NDI0RSs5ODgxMTUwNzUiLCItMS43Nzg1ODU2OEUrOTg4MTE1MDc3IiwiLTIuMDk3ODY1OTJFLTk4ODExNTA3NSIsIjAiLCIxOS4zMTY0MDMxIiwiMi42NzA5MzcxMUUtMTIiKTsKKyAgbWF0aHRlc3QoMzExLGRlZiwiLTMxMjMuNzc2NDZFKzE3NzgxNDI2NSIsIjk3MzI4NDQzNS5FKzM4MzI1NjExMiIsIjkuNzMyODQ0MzVFKzM4MzI1NjEyMCIsIi05LjczMjg0NDM1RSszODMyNTYxMjAiLCItMy4wNDAzMjMwMUUrNTYxMDcwMzg5IiwiLTMuMjA5NTIwNjJFLTIwNTQ0MTg1MyIsIjAiLCItMy4xMjM3NzY0NkUrMTc3ODE0MjY4IiwiIik7CisgIG1hdGh0ZXN0KDMxMixkZWYsIi04NTAuMTIzOTE1RSs2NjI5NTUzMDkiLCI2Nzc0ODQ5LjgxRS04NDY1NzY4NjUiLCItOC41MDEyMzkxNUUrNjYyOTU1MzExIiwiLTguNTAxMjM5MTVFKzY2Mjk1NTMxMSIsIi01Ljc1OTQ2MTg0RS0xODM2MjE1NDciLCIiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMzEzLGRlZiwiLTIzMzQ5Ljc3MjQiLCIyOTIxLjM1MzU1IiwiLTIwNDI4LjQxODkiLCItMjYyNzEuMTI2MCIsIi02ODIxMjk0MC41IiwiLTcuOTkyNzkyMzgiLCItNyIsIi0yOTAwLjI5NzU1IiwiLTUuNjcwNTU0NkUrMTI3NTkiKTsKKyAgbWF0aHRlc3QoMzE0LGRlZiwiMTg4ODY2NTMuMyIsIjU2ODcwNzQ3Ni4iLCI1ODc1OTQxMjkiLCItNTQ5ODIwODIzIiwiMS4wNzQwOTgwOUUrMTYiLCIwLjAzMzIwOTc4NTUiLCIwIiwiMTg4ODY2NTMuMyIsIiIpOworICBtYXRodGVzdCgzMTUsZGVmLCItOTA1NTI4MTguMCIsIi01NDIuMDM1NjNFLTk4NjYwNjg3OCIsIi05MDU1MjgxOC4wIiwiLTkwNTUyODE4LjAiLCI0LjkwODI4NTM4RS05ODY2MDY4NjgiLCIxLjY3MDYwNjM4RSs5ODY2MDY4ODMiLCIiLCIiLCItMS42NDI0NDI0MUUtNDAiKTsKKyAgbWF0aHRlc3QoMzE2LGRlZiwiNDE1MDExMjYuMUUrNzkxODM4NzY1IiwiLTY5LjY2NTE2NzVFKzIwNDI2ODM0OCIsIjQuMTUwMTEyNjFFKzc5MTgzODc3MiIsIjQuMTUwMTEyNjFFKzc5MTgzODc3MiIsIi0yLjg5MTE4MjkwRSs5OTYxMDcxMjIiLCItNS45NTcyMjc2M0UrNTg3NTcwNDIyIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDMxNyxkZWYsIjc2NzgzMTkzLjNFLTI3MTQ4ODE1NCIsIjM3NjUuMDE4MjlFLTUyMDM0NjAwMyIsIjcuNjc4MzE5MzNFLTI3MTQ4ODE0NyIsIjcuNjc4MzE5MzNFLTI3MTQ4ODE0NyIsIjIuODkwOTAxMjdFLTc5MTgzNDE0NiIsIjIuMDM5Mzg0MzRFKzI0ODg1Nzg1MyIsIiIsIiIsIiIpOworICBtYXRodGVzdCgzMTgsZGVmLCI0MTkyLjk5MjgiLCI5ODc4MjIwMDdFLTE0NjU2MDk4OSIsIjQxOTIuOTkyODAiLCI0MTkyLjk5MjgwIiwiNC4xNDE5MzA1NkUtMTQ2NTYwOTc3IiwiNC4yNDQ2ODQ1NEUrMTQ2NTYwOTgzIiwiIiwiIiwiMS42Nzk3MzY1M0UrMzYiKTsKKyAgbWF0aHRlc3QoMzE5LGRlZiwiLTg5MTg0NS42MjkiLCI0ODI3Nzk1NS4iLCI0NzM4NjEwOS40IiwiLTQ5MTY5ODAwLjYiLCItNC4zMDU2NDgzMUUrMTMiLCItMC4wMTg0NzMxNDQzIiwiMCIsIi04OTE4NDUuNjI5IiwiLTYuMzI5NjQxNDdFKzI4NzI2NzgxNyIpOworICBtYXRodGVzdCgzMjAsZGVmLCIzMzQuOTAxMTc2IiwiLTc2MDkyOTYuNTVFKzQ0NzM0MDIyOCIsIi03LjYwOTI5NjU1RSs0NDczNDAyMzQiLCI3LjYwOTI5NjU1RSs0NDczNDAyMzQiLCItMi41NDgzNjIzNkUrNDQ3MzQwMjM3IiwiLTQuNDAxMjEwNzNFLTQ0NzM0MDIzMyIsIjAiLCIzMzQuOTAxMTc2IiwiNi4zMTkyNjU3NUUtMjEiKTsKKyAgbWF0aHRlc3QoMzIxLGRlZiwiNC40OTg2ODYzNiIsIi0zNDE4ODA4OTZFLTQ0NzI1MTg3MyIsIjQuNDk4Njg2MzYiLCI0LjQ5ODY4NjM2IiwiLTEuNTM4MDE0OTJFLTQ0NzI1MTg2NCIsIi0xLjMxNTg2MzYzRSs0NDcyNTE4NjUiLCIiLCIiLCIwLjAxMDk4MzU1MyIpOworICBtYXRodGVzdCgzMjIsZGVmLCI4MDc2MTUuNTgiLCItMzE0Mjg2NDgwIiwiLTMxMzQ3ODg2NSIsIjMxNTA5NDA5NiIsIi0yLjUzODIyNjU4RSsxNCIsIi0wLjAwMjU2OTY3OTY4IiwiMCIsIjgwNzYxNS41OCIsIiIpOworICBtYXRodGVzdCgzMjMsZGVmLCItMzcuNzQ1Nzk1NCIsIjUzMjc3LjgxMjlFLTg1OTIyNTUzOCIsIi0zNy43NDU3OTU0IiwiLTM3Ljc0NTc5NTQiLCItMi4wMTEwMTM0M0UtODU5MjI1NTMyIiwiLTcuMDg0NzExODhFKzg1OTIyNTUzNCIsIiIsIiIsIi03NjYyMDEzNC4xIik7CisgIG1hdGh0ZXN0KDMyNCxkZWYsIi0yODY3MTA4MS4iLCI5OC44ODE5NjIzIiwiLTI4NjcwOTgyLjEiLCItMjg2NzExNzkuOSIsIi0yLjgzNTA1Mjc1RSs5IiwiLTI4OTk1Mi41ODkiLCItMjg5OTUyIiwiLTU4LjI2NzE5MDQiLCItMS45MzYyNTU2NkUrNzM4Iik7CisgIG1hdGh0ZXN0KDMyNSxkZWYsIi04OTc1Mi4yMTA2RS00Njk0OTY4OTYiLCI5OS45ODc5OTYxIiwiOTkuOTg3OTk2MSIsIi05OS45ODc5OTYxIiwiLTguOTc0MTQzNjhFLTQ2OTQ5Njg5MCIsIi04Ljk3NjI5ODU3RS00Njk0OTY4OTQiLCIwIiwiLTguOTc1MjIxMDZFLTQ2OTQ5Njg5MiIsIiIpOworICBtYXRodGVzdCgzMjYsZGVmLCItNDk3OTgzNTY3RS0xMzUzODA1MiIsIjM5LjQ1Nzg3NDIiLCIzOS40NTc4NzQyIiwiLTM5LjQ1Nzg3NDIiLCItMS45NjQ5MzcyOUUtMTM1MzgwNDIiLCItMS4yNjIwNjM4NUUtMTM1MzgwNDUiLCIwIiwiLTQuOTc5ODM1NjdFLTEzNTM4MDQ0IiwiLTEuNTUzNzY1NDNFLTUyNzk4MzY4OSIpOworICBtYXRodGVzdCgzMjcsZGVmLCI4NDU3MzkyMjFFLTY1NDIwMjU2NSIsIi0zMzMxMy4xNTUxIiwiLTMzMzEzLjE1NTEiLCIzMzMxMy4xNTUxIiwiLTIuODE3NDI0MThFLTY1NDIwMjU1MiIsIi0yLjUzODc1NDQ5RS02NTQyMDI1NjEiLCIwIiwiOC40NTczOTIyMUUtNjU0MjAyNTU3IiwiIik7CisgIG1hdGh0ZXN0KDMyOCxkZWYsIjc0Mi4zMzIwNjdFKzUzNzgyNzg0MyIsIi00NTMyLjcwMDIzRS04NTUzODc0MTQiLCI3LjQyMzMyMDY3RSs1Mzc4Mjc4NDUiLCI3LjQyMzMyMDY3RSs1Mzc4Mjc4NDUiLCItMy4zNjQ3Njg3M0UtMzE3NTU5NTY1IiwiIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDMyOSxkZWYsIi04OTMuNDg2NTQiLCI2NzAzODk5NjAiLCI2NzAzODkwNjciLCItNjcwMzkwODUzIiwiLTUuOTg5ODQ0MDZFKzExIiwiLTAuMDAwMDAxMzMyNzg2MjgiLCIwIiwiLTg5My40ODY1NCIsIiIpOworICBtYXRodGVzdCgzMzAsZGVmLCIxLjM3Njk3MTYyIiwiLTkxNS43Mzc0NzRFLTM1MTU3ODcyNCIsIjEuMzc2OTcxNjIiLCIxLjM3Njk3MTYyIiwiLTEuMjYwOTQ0NTFFLTM1MTU3ODcyMSIsIi0xLjUwMzY3NTA4RSszNTE1Nzg3MjEiLCIiLCIiLCIwLjA1NjE5MjA3ODQiKTsKKyAgbWF0aHRlc3QoMzMxLGRlZiwiLTY1LjI4Mzk4MDhFKzU1MDI4ODQwMyIsIi0xMjEzODkuMzA2IiwiLTYuNTI4Mzk4MDhFKzU1MDI4ODQwNCIsIi02LjUyODM5ODA4RSs1NTAyODg0MDQiLCI3LjkyNDc3NzEyRSs1NTAyODg0MDkiLCI1LjM3ODA2Njg5RSs1NTAyODgzOTkiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMzMyLGRlZiwiLTMwMzQ2NjAzLkUrMzQ2MDY3MzkwIiwiNzkyNjYxLjU0NCIsIi0zLjAzNDY2MDMwRSszNDYwNjczOTciLCItMy4wMzQ2NjAzMEUrMzQ2MDY3Mzk3IiwiLTIuNDA1NDU4NTJFKzM0NjA2NzQwMyIsIi0zLjgyODQ0Mzk2RSszNDYwNjczOTEiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMzMzLGRlZiwiLTYxMTcwLjcwNjUiLCItNDUzNzMxMTMxLiIsIi00NTM3OTIzMDIiLCI0NTM2Njk5NjAiLCIyLjc3NTUwNTM4RSsxMyIsIjAuMDAwMTM0ODE3MDgxIiwiMCIsIi02MTE3MC43MDY1IiwiIik7CisgIG1hdGh0ZXN0KDMzNCxkZWYsIjY1NjkuNTExMzMiLCIxMy44NzA2MzUxRSszOTk0MzQ5MTQiLCIxLjM4NzA2MzUxRSszOTk0MzQ5MTUiLCItMS4zODcwNjM1MUUrMzk5NDM0OTE1IiwiOS4xMTIzMjk0NEUrMzk5NDM0OTE4IiwiNC43MzYyNzI5MUUtMzk5NDM0OTEyIiwiMCIsIjY1NjkuNTExMzMiLCI2NTY5LjUxMTMzIik7CisgIG1hdGh0ZXN0KDMzNSxkZWYsIjMwMDcwMzkyNS4iLCItMzE1NjczNi44IiwiMjk3NTQ3MTg4IiwiMzAzODYwNjYyIiwiLTkuNDkyNDMxNDZFKzE0IiwiLTk1LjI1NzgzODciLCItOTUiLCI4MTM5MjkuMCIsIjQuMTg2MDkxMTRFLTI2NzYzMjU2Iik7CisgIG1hdGh0ZXN0KDMzNixkZWYsIjE5MjEzODIxNkUrMzUzMDExNTkyIiwiLTQ3My4wODA2MzMiLCIxLjkyMTM4MjE2RSszNTMwMTE2MDAiLCIxLjkyMTM4MjE2RSszNTMwMTE2MDAiLCItOS4wODk2ODY4OEUrMzUzMDExNjAyIiwiLTQuMDYxNDI2MzdFKzM1MzAxMTU5NyIsIiIsIiIsIiIpOworICBtYXRodGVzdCgzMzcsZGVmLCI4NjA3LjY0Nzk0IiwiLTM0NzQwLjMzNjciLCItMjYxMzIuNjg4OCIsIjQzMzQ3Ljk4NDYiLCItMjk5MDMyNTg4IiwiLTAuMjQ3NzcwOTk5IiwiMCIsIjg2MDcuNjQ3OTQiLCIxLjI5NjA0NTE5RS0xMzY2OTgiKTsKKyAgbWF0aHRlc3QoMzM4LGRlZiwiLTY3OTEzLjgyNDEiLCItOTM4MTUuNDIyOSIsIi0xNjE3MjkuMjQ3IiwiMjU5MDEuNTk4OCIsIjYuMzcxMzY0MTNFKzkiLCIwLjcyMzkwODk0OCIsIjAiLCItNjc5MTMuODI0MSIsIi02Ljk2MzU1MjAzRS00NTMzMTEiKTsKKyAgbWF0aHRlc3QoMzM5LGRlZiwiMzQuNTU1OTQ1NSIsIi05OTg3OTkzOTguIiwiLTk5ODc5OTM2NCIsIjk5ODc5OTQzMyIsIi0zLjQ1MTQ0NTc2RSsxMCIsIi0zLjQ1OTc0ODMzRS04IiwiMCIsIjM0LjU1NTk0NTUiLCIiKTsKKyAgbWF0aHRlc3QoMzQwLGRlZiwiMzg3OTk1LjMyOCIsIjk5MDE5OTU0My5FLTEyNDYyMzYwNyIsIjM4Nzk5NS4zMjgiLCIzODc5OTUuMzI4IiwiMy44NDE5Mjc5NkUtMTI0NjIzNTkzIiwiMy45MTgzNTQ5NUUrMTI0NjIzNjAzIiwiIiwiIiwiNy43MzE1MjEzOEUrNTUiKTsKKyAgbWF0aHRlc3QoMzQxLGRlZiwiLTQ3MS4wOTE2NkUtODM1MjE5MTkiLCItNDQxMjIyMzY4IiwiLTQ0MTIyMjM2OCIsIjQ0MTIyMjM2OCIsIjIuMDc4NTYxNzhFLTgzNTIxOTA4IiwiMS4wNjc2OTY2OUUtODM1MjE5MjUiLCIwIiwiLTQuNzEwOTE2NkUtODM1MjE5MTciLCIiKTsKKyAgbWF0aHRlc3QoMzQyLGRlZiwiLTk3ODM0LjM4NTgiLCI3MDc3OTc4OS44RSs1MDIxNjYwNjUiLCI3LjA3Nzk3ODk4RSs1MDIxNjYwNzIiLCItNy4wNzc5Nzg5OEUrNTAyMTY2MDcyIiwiLTYuOTI0Njk3MjZFKzUwMjE2NjA3NyIsIi0xLjM4MjIzNjE3RS01MDIxNjYwNjgiLCIwIiwiLTk3ODM0LjM4NTgiLCItOC41NzkwNzg4NkUrMzQiKTsKKyAgbWF0aHRlc3QoMzQzLGRlZiwiNzczMjMzMS4wNiIsIi05NTI3MTkuNDgyRSsxMTUzMjU1MDUiLCItOS41MjcxOTQ4MkUrMTE1MzI1NTEwIiwiOS41MjcxOTQ4MkUrMTE1MzI1NTEwIiwiLTcuMzY2NzQyNDRFKzExNTMyNTUxNyIsIi04LjExNjA2MjcxRS0xMTUzMjU1MDUiLCIwIiwiNzczMjMzMS4wNiIsIjEuMzA4ODY3MjRFLTY5Iik7CisgIG1hdGh0ZXN0KDM0NCxkZWYsIjIzLjI3NDU1NDciLCIyLjIzMTk0MjQ1RS0yMjEwNjI1OTIiLCIyMy4yNzQ1NTQ3IiwiMjMuMjc0NTU0NyIsIjUuMTk0NzQ2NjZFLTIyMTA2MjU5MSIsIjEuMDQyNzkzNjhFKzIyMTA2MjU5MyIsIiIsIiIsIjU0MS43MDQ4OTYiKTsKKyAgbWF0aHRlc3QoMzQ1LGRlZiwiNjcxLjA4MzM2M0UtMjE4MzI0MjA1IiwiLTc4NzE1MDAzMSIsIi03ODcxNTAwMzEiLCI3ODcxNTAwMzEiLCItNS4yODI0MzI5MEUtMjE4MzI0MTk0IiwiLTguNTI1NDgyMjdFLTIxODMyNDIxMiIsIjAiLCI2LjcxMDgzMzYzRS0yMTgzMjQyMDMiLCIiKTsKKyAgbWF0aHRlc3QoMzQ2LGRlZiwiMzY1MTY3LjgwIiwiLTgwMjYzLjY1MTYiLCIyODQ5MDQuMTQ4IiwiNDQ1NDMxLjQ1MiIsIi0yLjkzMDk3MDExRSsxMCIsIi00LjU0OTYwMzYyIiwiLTQiLCI0NDExMy4xOTM2IiwiMS4yNzA1MjIyN0UtNDQ2NDY4Iik7CisgIG1hdGh0ZXN0KDM0NyxkZWYsIi0xLjQzMjk3NjA0RS02NTEyOTc4MCIsIjU2LjU5ODczM0UtMTM1NTgxOTQyIiwiLTEuNDMyOTc2MDRFLTY1MTI5NzgwIiwiLTEuNDMyOTc2MDRFLTY1MTI5NzgwIiwiLTguMTEwNDYyODNFLTIwMDcxMTcyMSIsIi0yLjUzMTgxNjQ2RSs3MDQ1MjE2MCIsIiIsIiIsIjguNjU4MzE4ODFFLTM5MDc3ODY4MCIpOworICBtYXRodGVzdCgzNDgsZGVmLCI0MTY5OTg4NTkuIiwiMjYwLjIyMDMyM0UtMzQ5Mjg1NTkzIiwiNDE2OTk4ODU5IiwiNDE2OTk4ODU5IiwiMS4wODUxMTU3OEUtMzQ5Mjg1NTgyIiwiMS42MDI0ODM4M0UrMzQ5Mjg1NTk5IiwiIiwiIiwiNy4yNTExMTE3OEUrMjUiKTsKKyAgbWF0aHRlc3QoMzQ5LGRlZiwiNzI2Ny4xNzYxMUUrODYyNjMwNjA3IiwiNDAyMS41Njg2MSIsIjcuMjY3MTc2MTFFKzg2MjYzMDYxMCIsIjcuMjY3MTc2MTFFKzg2MjYzMDYxMCIsIjIuOTIyNTQ0NzNFKzg2MjYzMDYxNCIsIjEuODA3MDUwMTRFKzg2MjYzMDYwNyIsIiIsIiIsIiIpOworICBtYXRodGVzdCgzNTAsZGVmLCIxMi4yMTQyNDM0RSs1OTM5MDg3NDAiLCI1LjI3MjM2NTcxRS0zOTYwNTA3NDgiLCIxLjIyMTQyNDM0RSs1OTM5MDg3NDEiLCIxLjIyMTQyNDM0RSs1OTM5MDg3NDEiLCI2LjQzOTc5NTgxRSsxOTc4NTc5OTMiLCIyLjMxNjY1MzNFKzk4OTk1OTQ4OCIsIiIsIiIsIiIpOworICBtYXRodGVzdCgzNTEsZGVmLCItMjguNTkxOTMyIiwiLTEuNzkxNTMyMzhFLTgxNzA2NDU3NiIsIi0yOC41OTE5MzIwIiwiLTI4LjU5MTkzMjAiLCI1LjEyMjMzNzIwRS04MTcwNjQ1NzUiLCIxLjU5NTk0ODM4RSs4MTcwNjQ1NzciLCIiLCIiLCIwLjAwMTIyMzI0MzcyIik7CisgIG1hdGh0ZXN0KDM1MixkZWYsIjU5MC44NDk2NjYiLCI3NTM0MjQuMzA2RSsyNzcyMzI3NDQiLCI3LjUzNDI0MzA2RSsyNzcyMzI3NDkiLCItNy41MzQyNDMwNkUrMjc3MjMyNzQ5IiwiNC40NTE2MDUwMEUrMjc3MjMyNzUyIiwiNy44NDIxOTAxNEUtMjc3MjMyNzQ4IiwiMCIsIjU5MC44NDk2NjYiLCIxLjQ4NTMwNjA3RSsyMiIpOworICBtYXRodGVzdCgzNTMsZGVmLCIxLjcyNzA2MjgiLCItMTMyNTAyNi42NyIsIi0xMzI1MDI0Ljk0IiwiMTMyNTAyOC40MCIsIi0yMjg4NDA0LjI3IiwiLTAuMDAwMDAxMzAzNDE3MzkiLCIwIiwiMS43MjcwNjI4IiwiMi4wOTI2MDAzNkUtMzE0NDQwIik7CisgIG1hdGh0ZXN0KDM1NCxkZWYsIjMzNDAyMTE4LiIsIi01NTM0LjgzNzQ1IiwiMzMzOTY1ODMuMiIsIjMzNDA3NjUyLjgiLCItMS44NDg3NTI5NEUrMTEiLCItNjAzNC44ODY5IiwiLTYwMzQiLCI0OTA4LjgyNjcwIiwiOC4xNDQ3MzkxM0UtNDE2NDUiKTsKKyAgbWF0aHRlc3QoMzU1LGRlZiwiLTQzOTg0Mi41MDYiLCItNzc1MTEwLjgwNyIsIi0xMjE0OTUzLjMxIiwiMzM1MjY4LjMwMSIsIjMuNDA5MjY2ODBFKzExIiwiMC41Njc0NTc1ODQiLCIwIiwiLTQzOTg0Mi41MDYiLCItMS44NDY3ODQ3MkUtNDM3NDE4MiIpOworICBtYXRodGVzdCgzNTYsZGVmLCItMjQ4NjY0Ljc3OSIsIi00NDA4OTAuNDRFKzY2NjQzMzk0NCIsIi00LjQwODkwNDQwRSs2NjY0MzM5NDkiLCI0LjQwODkwNDQwRSs2NjY0MzM5NDkiLCIxLjA5NjMzOTI0RSs2NjY0MzM5NTUiLCI1LjY0MDA1ODMxRS02NjY0MzM5NDUiLCIwIiwiLTI0ODY2NC43NzkiLCIyLjYxNTQyODc3RS0yMiIpOworICBtYXRodGVzdCgzNTcsZGVmLCItMTQxNjEuOTE0MiIsIjgzMDYuNDk0OTMiLCItNTg1NS40MTkzIiwiLTIyNDY4LjQwOTEiLCItMTE3NjM1ODY5IiwiLTEuNzA0OTIwNTkiLCItMSIsIi01ODU1LjQxOTI3IiwiMS42NTU3MzM3MkUrMzQ0NzkiKTsKKyAgbWF0aHRlc3QoMzU4LGRlZiwiLTY0MTcyMjcuMTMiLCIxNjY3OS44ODQyIiwiLTY0MDA1NDcuMjUiLCItNjQzMzkwNy4wMSIsIi0xLjA3MDM4NjA1RSsxMSIsIi0zODQuNzI4NTE4IiwiLTM4NCIsIi0xMjE1MS41OTcyIiwiMy41ODc2Nzk3OEUrMTEzNTQ2Iik7CisgIG1hdGh0ZXN0KDM1OSxkZWYsIjUxNDgyNTAyNC4iLCItMjUuMDQ0NjM0NUUtMTAzODA5NDU3IiwiNTE0ODI1MDI0IiwiNTE0ODI1MDI0IiwiLTEuMjg5MzYwNDZFLTEwMzgwOTQ0NyIsIi0yLjA1NTYzMDAyRSsxMDM4MDk0NjQiLCIiLCIiLCI3LjMyODYwMDYyRS0yNyIpOworICBtYXRodGVzdCgzNjAsZGVmLCI1MjU5NDgxOTYiLCIyMTk0NTAzOTAiLCI3NDUzOTg1ODYiLCIzMDY0OTc4MDYiLCIxLjE1NDE5NTM3RSsxNyIsIjIuMzk2NjYxMDIiLCIyIiwiODcwNDc0MTYiLCIiKTsKKyAgbWF0aHRlc3QoMzYxLGRlZiwiLTYzODUwOS4xODEiLCI0NTU4MDE4OS4wRSsyNjkyMTI1NTkiLCI0LjU1ODAxODkwRSsyNjkyMTI1NjYiLCItNC41NTgwMTg5MEUrMjY5MjEyNTY2IiwiLTIuOTEwMzM2OTFFKzI2OTIxMjU3MiIsIi0xLjQwMDg0ODAzRS0yNjkyMTI1NjEiLCIwIiwiLTYzODUwOS4xODEiLCItMS4wNjEyOTQwNUUrMjkiKTsKKyAgbWF0aHRlc3QoMzYyLGRlZiwiMzMwNTkwNDIyIiwiNzQuMzU5OTI4RSs1MzUzNzc5NjUiLCI3LjQzNTk5MjgwRSs1MzUzNzc5NjYiLCItNy40MzU5OTI4MEUrNTM1Mzc3OTY2IiwiMi40NTgyNjgwMEUrNTM1Mzc3OTc1IiwiNC40NDU4MTQxOEUtNTM1Mzc3OTU5IiwiMCIsIjMzMDU5MDQyMiIsIjQuMzE1NTA3NDJFKzU5Iik7CisgIG1hdGh0ZXN0KDM2MyxkZWYsIi0zLjQ4NTkzODcxRS05NDA1Nzk5MDQiLCItMjAyNjUuOTY0MEUtMzIyOTg4OTg3IiwiLTIuMDI2NTk2NDBFLTMyMjk4ODk4MyIsIjIuMDI2NTk2NDBFLTMyMjk4ODk4MyIsIiIsIjEuNzIwMDk1MTlFLTYxNzU5MDkyMSIsIjAiLCItMy40ODU5Mzg3MUUtOTQwNTc5OTA0IiwiIik7CisgIG1hdGh0ZXN0KDM2NCxkZWYsIi0zMjgxMDM0ODAuIiwiLTcyMS45NDkzNzFFLTkyMzkzODY2NSIsIi0zMjgxMDM0ODAiLCItMzI4MTAzNDgwIiwiMi4zNjg3NDEwMUUtOTIzOTM4NjU0IiwiNC41NDQ2ODgyMkUrOTIzOTM4NjcwIiwiIiwiIiwiLTIuNDQzMDAzOEUtNjAiKTsKKyAgbWF0aHRlc3QoMzY1LGRlZiwiLTE4NTcuMDE0NDgiLCIxOTA4MTU3OC4xIiwiMTkwNzk3MjEuMSIsIi0xOTA4MzQzNS4xIiwiLTMuNTQzNDc2NjhFKzEwIiwiLTAuMDAwMDk3MzE5NzUzNyIsIjAiLCItMTg1Ny4wMTQ0OCIsIjguNDQzOTcwODdFKzYyMzc0MTUzIik7CisgIG1hdGh0ZXN0KDM2NixkZWYsIjM0Ny4yODcyMEUrMTQ1OTMwNzcxIiwiLTYyODIxLjk5MDZFLTY3NjU2NDEwNiIsIjMuNDcyODcyMDBFKzE0NTkzMDc3MyIsIjMuNDcyODcyMDBFKzE0NTkzMDc3MyIsIi0yLjE4MTcyNzMyRS01MzA2MzMzMjgiLCItNS41MjgxMTUxOEUrODIyNDk0ODc0IiwiIiwiIiwiNS42OTk5MDEzNUUtODc1NTg0NjQyIik7CisgIG1hdGh0ZXN0KDM2NyxkZWYsIi02NDMuMjExMzk5RSs0NDE4MDcwMDMiLCItNTA3MzM0MTkuMiIsIi02LjQzMjExMzk5RSs0NDE4MDcwMDUiLCItNi40MzIxMTM5OUUrNDQxODA3MDA1IiwiMy4yNjMyMzEzNUUrNDQxODA3MDEzIiwiMS4yNjc4MjU4NEUrNDQxODA2OTk4IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDM2OCxkZWYsIi01Mzk5MTY2MS40RS04NDMzMzk1NTQiLCIyMDcxOC43MzQ2IiwiMjA3MTguNzM0NiIsIi0yMDcxOC43MzQ2IiwiLTEuMTE4NjM4OTBFLTg0MzMzOTU0MiIsIi0yLjYwNTkzNDMxRS04NDMzMzk1NTEiLCIwIiwiLTUuMzk5MTY2MTRFLTg0MzMzOTU0NyIsIiIpOworICBtYXRodGVzdCgzNjksZGVmLCItOTAwMTgxNDI0IiwiLTEwNTc2Mzk4Mi4iLCItMS4wMDU5NDU0MUUrOSIsIi03OTQ0MTc0NDIiLCI5LjUyMDY3NzE5RSsxNiIsIjguNTExMjI4NTYiLCI4IiwiLTU0MDY5NTY4IiwiMS4zMjYyNzA2MUUtOTQ3MDQ1NjAyIik7CisgIG1hdGh0ZXN0KDM3MCxkZWYsIjk0MjE4Ljc0NjJFKzU2MzIzMzk1MSIsIjE5MjYyLjYzODJFKzc2NTI2Mzg5MCIsIjEuOTI2MjYzODJFKzc2NTI2Mzg5NCIsIi0xLjkyNjI2MzgyRSs3NjUyNjM4OTQiLCIiLCI0Ljg5MTI2OTA2RS0yMDIwMjk5MzkiLCIwIiwiOS40MjE4NzQ2MkUrNTYzMjMzOTU1IiwiIik7CisgIG1hdGh0ZXN0KDM3MSxkZWYsIjI4NTQ5LjI3MUUrOTIxMzMxODI4IiwiLTIxNTA1OTAuNDAiLCIyLjg1NDkyNzEwRSs5MjEzMzE4MzIiLCIyLjg1NDkyNzEwRSs5MjEzMzE4MzIiLCItNi4xMzk3Nzg4MUUrOTIxMzMxODM4IiwiLTEuMzI3NTA4NTNFKzkyMTMzMTgyNiIsIiIsIiIsIiIpOworICBtYXRodGVzdCgzNzIsZGVmLCI4MTAuNzA4MEUrNzc5NjI1NzYzIiwiNTk1Ny45NDA0NCIsIjguMTA3MDgwMDBFKzc3OTYyNTc2NSIsIjguMTA3MDgwMDBFKzc3OTYyNTc2NSIsIjQuODMwMTQ5OThFKzc3OTYyNTc2OSIsIjEuMzYwNzE4NTRFKzc3OTYyNTc2MiIsIiIsIiIsIiIpOworICBtYXRodGVzdCgzNzMsZGVmLCItMjMuNzM1NzU0OUUrNzcxMTY5MDgiLCIzNTEuMTAwNjQ5RSs4NjQzNDgwMjIiLCIzLjUxMTAwNjQ5RSs4NjQzNDgwMjQiLCItMy41MTEwMDY0OUUrODY0MzQ4MDI0IiwiLTguMzMzNjM4OTVFKzk0MTQ2NDkzMyIsIi02Ljc2MDM4NDhFLTc4NzIzMTExNiIsIjAiLCItMi4zNzM1NzU0OUUrNzcxMTY5MDkiLCIzLjE3NDAzODUzRSszMDg0Njc2MzciKTsKKyAgbWF0aHRlc3QoMzc0LGRlZiwiNDAyMTYxMDIuMkUrMjkyNzI0NTQ0IiwiNjYxLjAyNTk2MiIsIjQuMDIxNjEwMjJFKzI5MjcyNDU1MSIsIjQuMDIxNjEwMjJFKzI5MjcyNDU1MSIsIjIuNjU4Mzg4NzZFKzI5MjcyNDU1NCIsIjYuMDgzODkxNDhFKzI5MjcyNDU0OCIsIiIsIiIsIiIpOworICBtYXRodGVzdCgzNzUsZGVmLCIyMjc4NTAyNC4zRSs3ODM3MTkxNjgiLCIzOTkuNTA1OTg5RSsxMzc0Nzg2NjYiLCIyLjI3ODUwMjQzRSs3ODM3MTkxNzUiLCIyLjI3ODUwMjQzRSs3ODM3MTkxNzUiLCI5LjEwMjc1MzY3RSs5MjExOTc4NDMiLCI1LjcwMzI5OTgxRSs2NDYyNDA1MDYiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMzc2LGRlZiwiNTE1LjU5MTgxOUUrODIxMzcxMzY0IiwiLTY5MjEzNzkxNC5FLTE0OTQ5ODY5MCIsIjUuMTU1OTE4MTlFKzgyMTM3MTM2NiIsIjUuMTU1OTE4MTlFKzgyMTM3MTM2NiIsIi0zLjU2ODYwNjQ2RSs2NzE4NzI2ODUiLCItNy40NDkyNjQyMUUrOTcwODcwMDQ3IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDM3NyxkZWYsIi01MzY4ODMwNzJFKzQ3NzkxMTI1MSIsIjYyNDk5Ni4zMDEiLCItNS4zNjg4MzA3MkUrNDc3OTExMjU5IiwiLTUuMzY4ODMwNzJFKzQ3NzkxMTI1OSIsIi0zLjM1NTQ5OTM0RSs0Nzc5MTEyNjUiLCItOC41OTAxNzk5OUUrNDc3OTExMjUzIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDM3OCxkZWYsIi0zOTk0OTIuOTE0RS0zMzQzNjkxOTIiLCI1MjAyMTE5Ljg3RSs0NDI0NDIyNTgiLCI1LjIwMjExOTg3RSs0NDI0NDIyNjQiLCItNS4yMDIxMTk4N0UrNDQyNDQyMjY0IiwiLTIuMDc4MjEwMDNFKzEwODA3MzA3OCIsIi03LjY3OTQyNTM5RS03NzY4MTE0NTIiLCIwIiwiLTMuOTk0OTI5MTRFLTMzNDM2OTE4NyIsIiIpOworICBtYXRodGVzdCgzNzksZGVmLCI3NjIuMDcxMTg0IiwiOTg1MTYzMS4zNyIsIjk4NTIzOTMuNDQiLCItOTg1MDg2OS4zMCIsIjcuNTA3NjQ0MzhFKzkiLCIwLjAwMDA3NzM1NDgyMTMiLCIwIiwiNzYyLjA3MTE4NCIsIjQuMDIxOTg0MzZFKzI4MzkyMzU2Iik7CisgIG1hdGh0ZXN0KDM4MCxkZWYsIjU2MjYuMTI0NzEiLCI3Mjk4OTgxOC4zIiwiNzI5OTU0NDQuNCIsIi03Mjk4NDE5Mi4yIiwiNC4xMDY0OTgyMEUrMTEiLCIwLjAwMDA3NzA4MDk1MjQiLCIwIiwiNTYyNi4xMjQ3MSIsIjEuNzk4MTQ3NTdFKzI3MzcyNzA5OCIpOworICBtYXRodGVzdCgzODEsZGVmLCItNDcyMDcyNjAuMSIsIi0yMDczLjMxNTIiLCItNDcyMDkzMzMuNCIsIi00NzIwNTE4Ni44IiwiOS43ODc1NTI5OUUrMTAiLCIyMjc2OC45NzQxIiwiMjI3NjgiLCItMjAxOS42MjY0IiwiLTYuMDIyMzgzMTlFLTE1OTA5Iik7CisgIG1hdGh0ZXN0KDM4MixkZWYsIjIwNy43NDA4NjAiLCItNTEuMDM5MDA5MCIsIjE1Ni43MDE4NTEiLCIyNTguNzc5ODY5IiwiLTEwNjAyLjg4NzYiLCItNC4wNzAyMzY5NCIsIi00IiwiMy41ODQ4MjQwIiwiNi40MDI5NzUxNUUtMTE5Iik7CisgIG1hdGh0ZXN0KDM4MyxkZWYsIi01NzIuODEyNDY0RS03NDU5MzQwMjEiLCItMTgyODA1ODcyLkUrNjA0NTA4NjgxIiwiLTEuODI4MDU4NzJFKzYwNDUwODY4OSIsIjEuODI4MDU4NzJFKzYwNDUwODY4OSIsIjEuMDQ3MTM0ODJFLTE0MTQyNTMyOSIsIiIsIjAiLCItNS43MjgxMjQ2NEUtNzQ1OTM0MDE5IiwiIik7CisgIG1hdGh0ZXN0KDM4NCxkZWYsIi02NDE4NTA0RSszNTMxNDA3IiwiODQ1OTQxNi4xIiwiLTYuNDE4NTA0MDBFKzM1MzE0MTMiLCItNi40MTg1MDQwMEUrMzUzMTQxMyIsIi01LjQyOTY3OTYxRSszNTMxNDIwIiwiLTcuNTg3NDA3ODRFKzM1MzE0MDYiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoMzg1LGRlZiwiMjgwNjg5LjUzMSIsIi0xMjgyMTI1NDMiLCItMTI3OTMxODU0IiwiMTI4NDkzMjMzIiwiLTMuNTk4NzkxODZFKzEzIiwiLTAuMDAyMTg5MjUxNzMiLCIwIiwiMjgwNjg5LjUzMSIsIjEuNDIxNzM4MDlFLTY5ODUzMDkzOCIpOworICBtYXRodGVzdCgzODYsZGVmLCIxNS44MDM1NTFFLTc4MzQyMjc5MyIsIjIzOTEwODAzOEUtNDg5MTg2MzA4IiwiMi4zOTEwODAzOEUtNDg5MTg2MzAwIiwiLTIuMzkxMDgwMzhFLTQ4OTE4NjMwMCIsIiIsIjYuNjA5Mzc2NzJFLTI5NDIzNjQ5MyIsIjAiLCIxLjU4MDM1NTFFLTc4MzQyMjc5MiIsIiIpOworICBtYXRodGVzdCgzODcsZGVmLCIyNi41MTU5MjIiLCItOTQxODI0Mi45NkUtMTA1NDgxNjI4IiwiMjYuNTE1OTIyMCIsIjI2LjUxNTkyMjAiLCItMi40OTczMzM5NkUtMTA1NDgxNjIwIiwiLTIuODE1Mzc4ODVFKzEwNTQ4MTYyMiIsIiIsIiIsIjEuNTQzMjYxMDhFLTEzIik7CisgIG1hdGh0ZXN0KDM4OCxkZWYsIi04OC4xMDk0NTU3IiwiLTU0MDI5OTM0LjEiLCItNTQwMzAwMjIuMiIsIjU0MDI5ODQ2LjAiLCI0Ljc2MDU0ODA5RSs5IiwiMC4wMDAwMDE2MzA3NTI2IiwiMCIsIi04OC4xMDk0NTU3IiwiNS4wNTI4OTgyNkUtMTA1MDg5NDM5Iik7CisgIG1hdGh0ZXN0KDM4OSxkZWYsIjY3NzAuNjg2MDJFLTQ5ODQyMDM5NyIsIi02LjExMjQ4OTA4RS03Mjk2MTY5MDgiLCI2Ljc3MDY4NjAyRS00OTg0MjAzOTQiLCI2Ljc3MDY4NjAyRS00OTg0MjAzOTQiLCIiLCItMS4xMDc2ODA2N0UrMjMxMTk2NTE0IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDM5MCxkZWYsIi04OTI5NzM4MTguRS03ODE5MDQ0NDEiLCI1NTUyMDEyOTkuIiwiNTU1MjAxMjk5IiwiLTU1NTIwMTI5OSIsIi00Ljk1NzgwMjI0RS03ODE5MDQ0MjQiLCItMS42MDgzNzg0N0UtNzgxOTA0NDQxIiwiMCIsIi04LjkyOTczODE4RS03ODE5MDQ0MzMiLCIiKTsKKyAgbWF0aHRlc3QoMzkxLGRlZiwiNjcwMTc1ODAyRSsxMzU0MzA2ODAiLCIyNzM1NTE5NS40IiwiNi43MDE3NTgwMkUrMTM1NDMwNjg4IiwiNi43MDE3NTgwMkUrMTM1NDMwNjg4IiwiMS44MzMyNzkwMEUrMTM1NDMwNjk2IiwiMi40NDk5MDMxOEUrMTM1NDMwNjgxIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDM5MixkZWYsIi00NDA5NTAuMjYiLCIyMDUuNDc3NDY5RS02NzczNDU1NjEiLCItNDQwOTUwLjI2MCIsIi00NDA5NTAuMjYwIiwiLTkuMDYwNTM0MzRFLTY3NzM0NTU1NCIsIi0yLjE0NTk3ODY0RSs2NzczNDU1NjQiLCIiLCIiLCIxLjk0NDM3MTMyRSsxMSIpOworICBtYXRodGVzdCgzOTMsZGVmLCItOC4yMzM1Nzc5IiwiNTczNjY1MDEwRSs3NDI3MjIwNzUiLCI1LjczNjY1MDEwRSs3NDI3MjIwODMiLCItNS43MzY2NTAxMEUrNzQyNzIyMDgzIiwiLTQuNzIzMzE1NTVFKzc0MjcyMjA4NCIsIi0xLjQzNTI1ODg2RS03NDI3MjIwODMiLCIwIiwiLTguMjMzNTc3OSIsIjMxMTU1Mi43NTMiKTsKKyAgbWF0aHRlc3QoMzk0LGRlZiwiNDUyOTQzLjg2MyIsIjcwMjIuMjM2MjkiLCI0NTk5NjYuMDk5IiwiNDQ1OTIxLjYyNyIsIjMuMTgwNjc4ODNFKzkiLCI2NC41MDEzNzAzIiwiNjQiLCIzNTIwLjc0MDQ0IiwiNS41NDE1ODk3NkUrMzk3MTYiKTsKKyAgbWF0aHRlc3QoMzk1LGRlZiwiNjI4NzQuMTA3OSIsIi01MjcxOTY1NC4xIiwiLTUyNjU2NzgwLjAiLCI1Mjc4MjUyOC4yIiwiLTMuMzE0NzAxMjJFKzEyIiwiLTAuMDAxMTkyNjEyMyIsIjAiLCI2Mjg3NC4xMDc5IiwiMS4xODgxOTkzNkUtMjUyOTczNzc1Iik7CisgIG1hdGh0ZXN0KDM5NixkZWYsIi03NDI4LjQxNzQxRSs2MDk3NzIwMzciLCItNDYwMjQ4MTkuMyIsIi03LjQyODQxNzQxRSs2MDk3NzIwNDAiLCItNy40Mjg0MTc0MUUrNjA5NzcyMDQwIiwiMy40MTg5MTU2OUUrNjA5NzcyMDQ4IiwiMS42MTQwMDI1MUUrNjA5NzcyMDMzIiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDM5NyxkZWYsIjIuMjc5NTkyOTciLCI0MTkzNy4wMTkiLCI0MTkzOS4yOTg2IiwiLTQxOTM0LjczOTQiLCI5NTU5OS4zMzM3IiwiMC4wMDAwNTQzNTc1MzQ4IiwiMCIsIjIuMjc5NTkyOTciLCIyLjg5NzEyNDIzRSsxNTAwNyIpOworICBtYXRodGVzdCgzOTgsZGVmLCI1MDg2OTI0MDhFLTY3MTk2Nzc4MiIsIjg0OTE5ODkuMjAiLCI4NDkxOTg5LjIwIiwiLTg0OTE5ODkuMjAiLCI0LjMxOTgxMDQzRS02NzE5Njc3NjciLCI1Ljk5MDI2MjA3RS02NzE5Njc3ODEiLCIwIiwiNS4wODY5MjQwOEUtNjcxOTY3Nzc0IiwiIik7CisgIG1hdGh0ZXN0KDM5OSxkZWYsIjk0MC41MzM3MDVFLTM3OTMxMDQyMSIsIi00LjAxMTc2OTYxRSs0NjQ2MjAwMzciLCItNC4wMTE3Njk2MUUrNDY0NjIwMDM3IiwiNC4wMTE3Njk2MUUrNDY0NjIwMDM3IiwiLTMuNzczMjA0NTNFKzg1MzA5NjE5IiwiLTIuMzQ0NDM1OTlFLTg0MzkzMDQ1NiIsIjAiLCI5LjQwNTMzNzA1RS0zNzkzMTA0MTkiLCIiKTsKKyAgbWF0aHRlc3QoNDAwLGRlZiwiOTcuMDY0OTY1MiIsIi05Mi40NDg1NjQ5RS0xNTE5ODkwOTgiLCI5Ny4wNjQ5NjUyIiwiOTcuMDY0OTY1MiIsIi04Ljk3MzUxNjczRS0xNTE5ODkwOTUiLCItMS4wNDk5MzQ4RSsxNTE5ODkwOTgiLCIiLCIiLCIxLjMwNzQ4NzI4RS0xOCIpOworICBtYXRodGVzdCg0MDEsZGVmLCIyOTc1NDQuNTM2RSszNjAyNzk0NzMiLCI4LjgwMjc1MDA3IiwiMi45NzU0NDUzNkUrMzYwMjc5NDc4IiwiMi45NzU0NDUzNkUrMzYwMjc5NDc4IiwiMi42MTkyMTAxOUUrMzYwMjc5NDc5IiwiMy4zODAxMzE1OUUrMzYwMjc5NDc3IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDQwMixkZWYsIi0yODg2MTAyOC4iLCI4MjgxOC44MjBFKzEzODM2ODc1OCIsIjguMjgxODgyMDBFKzEzODM2ODc2MiIsIi04LjI4MTg4MjAwRSsxMzgzNjg3NjIiLCItMi4zOTAyMzYyOEUrMTM4MzY4NzcwIiwiLTMuNDg0ODM5MzJFLTEzODM2ODc1NiIsIjAiLCItMjg4NjEwMjgiLCI0LjgxMzg3MDEzRSs1OSIpOworICBtYXRodGVzdCg0MDMsZGVmLCIzNi4yNDk2MjM4RSs2ODgyODAzOSIsIjQ5MjQzLjAwIiwiMy42MjQ5NjIzOEUrNjg4MjgwNDAiLCIzLjYyNDk2MjM4RSs2ODgyODA0MCIsIjEuNzg1MDQwMjJFKzY4ODI4MDQ1IiwiNy4zNjEzNzU5OUUrNjg4MjgwMzUiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNDA0LGRlZiwiMjIuNDQ3ODI4RS00NzYwMTQ2ODMiLCItNTYwNjcuNTUyMCIsIi01NjA2Ny41NTIwIiwiNTYwNjcuNTUyMCIsIi0xLjI1ODU5NDc2RS00NzYwMTQ2NzciLCItNC4wMDM3MTEwOUUtNDc2MDE0Njg3IiwiMCIsIjIuMjQ0NzgyOEUtNDc2MDE0NjgyIiwiIik7CisgIG1hdGh0ZXN0KDQwNSxkZWYsIjI4MjY4OC43OTFFKzc1MDExOTUyIiwiNS45OTc4OTA1MSIsIjIuODI2ODg3OTFFKzc1MDExOTU3IiwiMi44MjY4ODc5MUUrNzUwMTE5NTciLCIxLjY5NTUzNjQyRSs3NTAxMTk1OCIsIjQuNzEzMTM2OUUrNzUwMTE5NTYiLCIiLCIiLCI1LjEwMzMwNTA3RSs0NTAwNzE3NDQiKTsKKyAgbWF0aHRlc3QoNDA2LGRlZiwiLTk4MS44NjAzMTBFLTczNzM4NzAwMiIsIi05OTQwNDYyODkiLCItOTk0MDQ2Mjg5IiwiOTk0MDQ2Mjg5IiwiOS43NjAxNDU5N0UtNzM3Mzg2OTkxIiwiOS44Nzc0MTAzNUUtNzM3Mzg3MDA5IiwiMCIsIi05LjgxODYwMzEwRS03MzczODcwMDAiLCIiKTsKKyAgbWF0aHRlc3QoNDA3LGRlZiwiLTcwMi45MTIxMCIsIi02NDQ0OTAzLjU1IiwiLTY0NDU2MDYuNDYiLCI2NDQ0MjAwLjY0IiwiNC41MzAyMDA2OUUrOSIsIjAuMDAwMTA5MDY0Nzk3IiwiMCIsIi03MDIuOTEyMTAiLCIxLjcwODY2NzAzRS0xODM0ODAwNCIpOworICBtYXRodGVzdCg0MDgsZGVmLCI5NzI0NTY3MjBFLTE3NTM2ODIzIiwiMTYzNzEuMjU5MCIsIjE2MzcxLjI1OTAiLCItMTYzNzEuMjU5MCIsIjEuNTkyMDM0MDhFLTE3NTM2ODEwIiwiNS45NDAwMjQwNEUtMTc1MzY4MTkiLCIwIiwiOS43MjQ1NjcyMEUtMTc1MzY4MTUiLCIiKTsKKyAgbWF0aHRlc3QoNDA5LGRlZiwiNzE0NzEuMjA0NSIsIi03NDMwMzI3OC40IiwiLTc0MjMxODA3LjIiLCI3NDM3NDc0OS42IiwiLTUuMzEwNTQ0ODFFKzEyIiwiLTAuMDAwOTYxODg0OTQiLCIwIiwiNzE0NzEuMjA0NSIsIjIuMTQ1MzUzNzRFLTM2MDY3Nzg1MyIpOworICBtYXRodGVzdCg0MTAsZGVmLCI2NDMuMTAzOTUxRSs0Mzk3MDg0NDEiLCI3ODgyNTE5MjUuIiwiNi40MzEwMzk1MUUrNDM5NzA4NDQzIiwiNi40MzEwMzk1MUUrNDM5NzA4NDQzIiwiNS4wNjkyNzkyN0UrNDM5NzA4NDUyIiwiOC4xNTg2MDkzM0UrNDM5NzA4NDM0IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDQxMSxkZWYsIjQuMzA4Mzg2NjMiLCItNy40MzExMDgyNyIsIi0zLjEyMjcyMTY0IiwiMTEuNzM5NDk0OSIsIi0zMi4wMTYwODc1IiwiLTAuNTc5Nzc3MTMxIiwiMCIsIjQuMzA4Mzg2NjMiLCIwLjAwMDAzNjI5MDg2NDUiKTsKKyAgbWF0aHRlc3QoNDEyLGRlZiwiODIzLjY3ODAyNSIsIi01MTMuNTgxODQwRS0zMjQ0NTMxNDEiLCI4MjMuNjc4MDI1IiwiODIzLjY3ODAyNSIsIi00LjIzMDI2MDc2RS0zMjQ0NTMxMzYiLCItMS42MDM3OTExOEUrMzI0NDUzMTQxIiwiIiwiIiwiMi42Mzc2MjIyOEUtMTUiKTsKKyAgbWF0aHRlc3QoNDEzLGRlZiwiNDQ2MS44MTE2MiIsIjMuMjIwODE2ODAiLCI0NDY1LjAzMjQ0IiwiNDQ1OC41OTA4MCIsIjE0MzcwLjY3NzgiLCIxMzg1LjMwNDM4IiwiMTM4NSIsIjAuOTgwMzUyMDAiLCI4Ljg4MjQ2ODhFKzEwIik7CisgIG1hdGh0ZXN0KDQxNCxkZWYsIi00NDU4NTI3LjEwIiwiLTk5MDcyNjA1IiwiLTEwMzUzMTEzMiIsIjk0NjE0MDc3LjkiLCI0LjQxNzE3ODk0RSsxNCIsIjAuMDQ1MDAyNjIzMSIsIjAiLCItNDQ1ODUyNy4xMCIsIi02LjIzOTI4MDk5RS02NTg3NTI3MTUiKTsKKyAgbWF0aHRlc3QoNDE1LGRlZiwiLTU3Nzk2NDYxOCIsIjQ4NzQyNDM2OC4iLCItOTA1NDAyNTAiLCItMS4wNjUzODg5OUUrOSIsIi0yLjgxNzE0MDM5RSsxNyIsIi0xLjE4NTc1MjQxIiwiLTEiLCItOTA1NDAyNTAiLCIiKTsKKyAgbWF0aHRlc3QoNDE2LGRlZiwiLTg2Ny4wMzYxODQiLCItNTcuMTc2ODYwOCIsIi05MjQuMjEzMDQ1IiwiLTgwOS44NTkzMjMiLCI0OTU3NC40MDcyIiwiMTUuMTY0MTA5NiIsIjE1IiwiLTkuMzgzMjcyMCIsIi0zLjQwMzEyODM3RS0xNjgiKTsKKyAgbWF0aHRlc3QoNDE3LGRlZiwiNzcxODcxOTIxRS0zMzA1MDQ3NzAiLCI1LjM0Mjg1MjM2IiwiNS4zNDI4NTIzNiIsIi01LjM0Mjg1MjM2IiwiNC4xMjM5OTc3MUUtMzMwNTA0NzYxIiwiMS40NDQ2ODEzNkUtMzMwNTA0NzYyIiwiMCIsIjcuNzE4NzE5MjFFLTMzMDUwNDc2MiIsIiIpOworICBtYXRodGVzdCg0MTgsZGVmLCItMzM4NjgzLjA2MkUtNzI4Nzc3NTE4IiwiMTY2NDQxOTMxIiwiMTY2NDQxOTMxIiwiLTE2NjQ0MTkzMSIsIi01LjYzNzEwNjI4RS03Mjg3Nzc1MDUiLCItMi4wMzQ4NDIxOEUtNzI4Nzc3NTIxIiwiMCIsIi0zLjM4NjgzMDYyRS03Mjg3Nzc1MTMiLCIiKTsKKyAgbWF0aHRlc3QoNDE5LGRlZiwiLTUxMjU2ODc0MyIsIi00MTYzNzY4ODcuRS05NjU5NDUyOTUiLCItNTEyNTY4NzQzIiwiLTUxMjU2ODc0MyIsIjIuMTM0MjE3NzhFLTk2NTk0NTI3OCIsIjEuMjMxMDIxMTJFKzk2NTk0NTI5NSIsIiIsIiIsIjEuNDQ4NzQzNThFLTM1Iik7CisgIG1hdGh0ZXN0KDQyMCxkZWYsIjc0NDcxODEuOTkiLCI1MzE4NDM4LjUyIiwiMTI3NjU2MjAuNSIsIjIxMjg3NDMuNDciLCIzLjk2MDczNzk2RSsxMyIsIjEuNDAwMjU3MjMiLCIxIiwiMjEyODc0My40NyIsIjEuMjE2MzQ3ODJFKzM2NTQ4MjcwIik7CisgIG1hdGh0ZXN0KDQyMSxkZWYsIjU0Nzg5LjgyMDciLCI5MzE2NTQzNS4yIiwiOTMyMjAyMjUuMCIsIi05MzExMDY0NS40IiwiNS4xMDQ1MTc0OUUrMTIiLCIwLjAwMDU4ODA5MTcxNiIsIjAiLCI1NDc4OS44MjA3IiwiMy44MDc2OTgyNUUrNDQxNDgzMDM1Iik7CisgIG1hdGh0ZXN0KDQyMixkZWYsIjQxNDg4LjU5NjAiLCIxNDYuNzk3MDk0IiwiNDE2MzUuMzkzMSIsIjQxMzQxLjc5ODkiLCI2MDkwNDA1LjMzIiwiMjgyLjYyNTQ1OSIsIjI4MiIsIjkxLjgxNTQ5MiIsIjYuODQ3MzgxNTNFKzY3OCIpOworICBtYXRodGVzdCg0MjMsZGVmLCI3ODU3NDEuNjYzRSs1Njc1NDUyOSIsIi00NjEuNTMxNzMyIiwiNy44NTc0MTY2M0UrNTY3NTQ1MzQiLCI3Ljg1NzQxNjYzRSs1Njc1NDUzNCIsIi0zLjYyNjQ0NzExRSs1Njc1NDUzNyIsIi0xLjcwMjQ2NTA5RSs1Njc1NDUzMiIsIiIsIiIsIiIpOworICBtYXRodGVzdCg0MjQsZGVmLCItNC45NTQzNjc4NiIsIi0zMTMyLjQyMzMiLCItMzEzNy4zNzc2NyIsIjMxMjcuNDY4OTMiLCIxNTUxOS4xNzczIiwiMC4wMDE1ODE2NDA2IiwiMCIsIi00Ljk1NDM2Nzg2IiwiMS45ODA2MjQyMkUtMjE3NyIpOworICBtYXRodGVzdCg0MjUsZGVmLCI3NzMyMS44NDc4RSs0MDQ2MjY4NzQiLCI4Mi40Nzk3Njg4IiwiNy43MzIxODQ3OEUrNDA0NjI2ODc4IiwiNy43MzIxODQ3OEUrNDA0NjI2ODc4IiwiNi4zNzc0ODgxM0UrNDA0NjI2ODgwIiwiOS4zNzQ2NDQxRSs0MDQ2MjY4NzYiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNDI2LGRlZiwiLTcuOTkzMDc3MjUiLCItMjkxNTMuNzI3MyIsIi0yOTE2MS43MjA0IiwiMjkxNDUuNzM0MiIsIjIzMzAyNy45OTQiLCIwLjAwMDI3NDE2OTk5NCIsIjAiLCItNy45OTMwNzcyNSIsIjEuODg2ODgwMjhFLTI2MzE4Iik7CisgIG1hdGh0ZXN0KDQyNyxkZWYsIi02MS42MzM3NDAxRSs0NzQ5OTk1MTciLCI1MjU0Ljg3MDkyIiwiLTYuMTYzMzc0MDFFKzQ3NDk5OTUxOCIsIi02LjE2MzM3NDAxRSs0NzQ5OTk1MTgiLCItMy4yMzg3NzM0OUUrNDc0OTk5NTIyIiwiLTEuMTcyODg3OEUrNDc0OTk5NTE1IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDQyOCxkZWYsIi0xNi40MDQzMDg4IiwiMzUuMDA2NDgxMiIsIjE4LjYwMjE3MjQiLCItNTEuNDEwNzkwMCIsIi01NzQuMjU3MTI4IiwiLTAuNDY4NjA3NzYyIiwiMCIsIi0xNi40MDQzMDg4IiwiLTMuMzM4MzE4NDNFKzQyIik7CisgIG1hdGh0ZXN0KDQyOSxkZWYsIi04LjQxMTU2NTIwIiwiLTU2NTA4OTU4LjkiLCItNTY1MDg5NjcuMyIsIjU2NTA4OTUwLjUiLCI0NzUzMjg3OTIiLCIxLjQ4ODUzNjU3RS03IiwiMCIsIi04LjQxMTU2NTIwIiwiLTguODYzNjU0NThFLTUyMjYzODI3Iik7CisgIG1hdGh0ZXN0KDQzMCxkZWYsIi0zNjAxNjUuNzlFKzUwMzU1OTgzNSIsIi0xOTY2ODguNTE1IiwiLTMuNjAxNjU3OTBFKzUwMzU1OTg0MCIsIi0zLjYwMTY1NzkwRSs1MDM1NTk4NDAiLCI3LjA4NDA0NzQ0RSs1MDM1NTk4NDUiLCIxLjgzMTE0ODA1RSs1MDM1NTk4MzUiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNDMxLGRlZiwiLTY1MzIzNjQ4MC5FKzU2NTY0ODQ5NSIsIi05MzAuNDQ1Mjc0IiwiLTYuNTMyMzY0ODBFKzU2NTY0ODUwMyIsIi02LjUzMjM2NDgwRSs1NjU2NDg1MDMiLCI2LjA3ODAwNzk2RSs1NjU2NDg1MDYiLCI3LjAyMDY4Njc0RSs1NjU2NDg1MDAiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNDMyLGRlZiwiLTMuNzMzNDI5MDMiLCI4NTUuMDI5Mjg5IiwiODUxLjI5NTg2MCIsIi04NTguNzYyNzE4IiwiLTMxOTIuMTkxMTciLCItMC4wMDQzNjY0MzQwOCIsIjAiLCItMy43MzM0MjkwMyIsIi0xLjQxOTg4OTYxRSs0ODkiKTsKKyAgbWF0aHRlc3QoNDMzLGRlZiwiLTUuMTQ4OTA1MzJFKzU2MjA0ODAxMSIsIjEwODQ3MTI3LjhFLTM5MDkxODkxMCIsIi01LjE0ODkwNTMyRSs1NjIwNDgwMTEiLCItNS4xNDg5MDUzMkUrNTYyMDQ4MDExIiwiLTUuNTg1MDgzNDBFKzE3MTEyOTEwOCIsIi00Ljc0Njc5MTQyRSs5NTI5NjY5MTQiLCIiLCIiLCItNS4xNDg5MDUzMkUrNTYyMDQ4MDExIik7CisgIG1hdGh0ZXN0KDQzNCxkZWYsIjY1MzMxMTkwNyIsIi04MTAuMDM2OTY1RSs3NDQ1Mzc4MjMiLCItOC4xMDAzNjk2NUUrNzQ0NTM3ODI1IiwiOC4xMDAzNjk2NUUrNzQ0NTM3ODI1IiwiLTUuMjkyMDY3OTRFKzc0NDUzNzgzNCIsIi04LjA2NTIxMTA0RS03NDQ1Mzc4MTgiLCIwIiwiNjUzMzExOTA3IiwiMy4wMTMyNTE3MUUtNzEiKTsKKyAgbWF0aHRlc3QoNDM1LGRlZiwiLTEuMzE1NTc5MDciLCI5OC45MTM5MzAwRS01NzkyODE4MDIiLCItMS4zMTU1NzkwNyIsIi0xLjMxNTU3OTA3IiwiLTEuMzAxMjkwOTZFLTU3OTI4MTgwMCIsIi0xLjMzMDAyNDA2RSs1NzkyODE4MDAiLCIiLCIiLCIxNS41Mjk5MzIiKTsKKyAgbWF0aHRlc3QoNDM2LGRlZiwiLTg3NTE5MjM4OSIsIi03MjA3MTU2NS42IiwiLTk0NzI2Mzk1NSIsIi04MDMxMjA4MjMiLCI2LjMwNzY0ODU3RSsxNiIsIjEyLjE0MzM3OTciLCIxMiIsIi0xMDMzMzYwMS44IiwiMS4yNTU2NDQwOEUtNjQ0NDcxNDA1Iik7CisgIG1hdGh0ZXN0KDQzNyxkZWYsIi03MjgzODA3OC44IiwiLTM5MS4zOTg0MjMiLCItNzI4Mzg0NzAuMiIsIi03MjgzNzY4Ny40IiwiMi44NTA4NzA5MkUrMTAiLCIxODYwOTcuMDE3IiwiMTg2MDk3IiwiLTYuNDc0OTY5IiwiLTYuNTc0MDU3RS0zMDc1Iik7CisgIG1hdGh0ZXN0KDQzOCxkZWYsIjI5MTg2NTYwLjkiLCItNzkuNzQxOTk4OCIsIjI5MTg2NDgxLjIiLCIyOTE4NjY0MC42IiwiLTIuMzI3Mzk0NzBFKzkiLCItMzY2MDEyLjQwNyIsIi0zNjYwMTIiLCIzMi40MzUyMTQ0IiwiNi4xMDA1MDg2OUUtNTk4Iik7CisgIG1hdGh0ZXN0KDQzOSxkZWYsIi0zMjk4MDE2NjBFLTczMDI0OTQ2NSIsIi02NDg5LjkyNTYiLCItNjQ4OS45MjU2MCIsIjY0ODkuOTI1NjAiLCIyLjE0MDM4ODI0RS03MzAyNDk0NTMiLCI1LjA4MTc0NzkzRS03MzAyNDk0NjEiLCIwIiwiLTMuMjk4MDE2NjBFLTczMDI0OTQ1NyIsIiIpOworICBtYXRodGVzdCg0NDAsZGVmLCI5MS44NDI5MTE3RSsxMDMxNjQ4ODMiLCI3MTMxNDU1LjE2IiwiOS4xODQyOTExN0UrMTAzMTY0ODg0IiwiOS4xODQyOTExN0UrMTAzMTY0ODg0IiwiNi41NDk3MzYwN0UrMTAzMTY0ODkxIiwiMS4yODc4NTY1NEUrMTAzMTY0ODc4IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDQ0MSxkZWYsIjM5NDM4NjYuMzhFKzE1MDg1NTExMyIsIi0zMTkyNzAwNy4zIiwiMy45NDM4NjYzOEUrMTUwODU1MTE5IiwiMy45NDM4NjYzOEUrMTUwODU1MTE5IiwiLTEuMjU5MTU4NTFFKzE1MDg1NTEyNyIsIi0xLjIzNTI3NTk0RSsxNTA4NTUxMTIiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNDQyLGRlZiwiLTcwMDIuMDQ2OEUtNzk1OTYyMTU2IiwiLTU5Mzc4OTEuMDUiLCItNTkzNzg5MS4wNSIsIjU5Mzc4OTEuMDUiLCI0LjE1NzczOTEwRS03OTU5NjIxNDYiLCIxLjE3OTIxNDQzRS03OTU5NjIxNTkiLCIwIiwiLTcuMDAyMDQ2OEUtNzk1OTYyMTUzIiwiIik7CisgIG1hdGh0ZXN0KDQ0MyxkZWYsIjY5NjUwNDYwNS4iLCI1NDUwNi40NjE3IiwiNjk2NTU5MTExIiwiNjk2NDUwMDk5IiwiMy43OTY0MDAxNkUrMTMiLCIxMjc3OC4zODYiLCIxMjc3OCIsIjIxMDM3LjM5NzQiLCIyLjYwMDg1MzJFKzQ4MTk5MiIpOworICBtYXRodGVzdCg0NDQsZGVmLCItNTExNS43NjQ2NyIsIjY5MC45NjA5NzlFKzgxNTEyNjcwMSIsIjYuOTA5NjA5NzlFKzgxNTEyNjcwMyIsIi02LjkwOTYwOTc5RSs4MTUxMjY3MDMiLCItMy41MzQ3OTM3NkUrODE1MTI2NzA3IiwiLTcuNDAzODQwMkUtODE1MTI2NzAxIiwiMCIsIi01MTE1Ljc2NDY3IiwiLTkuMTcwMDk2NTVFKzI1Iik7CisgIG1hdGh0ZXN0KDQ0NSxkZWYsIi0yNjEuMjc5MzkyIiwiLTYxMy4wNzkzNTciLCItODc0LjM1ODc0OSIsIjM1MS43OTk5NjUiLCIxNjAxODUuMDAyIiwiMC40MjYxNzU0ODQiLCIwIiwiLTI2MS4yNzkzOTIiLCItMi4wNjMxODg0MUUtMTQ4MiIpOworICBtYXRodGVzdCg0NDYsZGVmLCItNTkxNDA3NzYzIiwiLTgwMTQ1ODIyLjgiLCItNjcxNTUzNTg2IiwiLTUxMTI2MTk0MCIsIjQuNzM5ODg2MThFKzE2IiwiNy4zNzkxNDY0NCIsIjciLCItMzAzODcwMDMuNCIsIi0yLjc5MzM0NTIyRS03MDMwMzAxMDUiKTsKKyAgbWF0aHRlc3QoNDQ3LGRlZiwiNjE1NjMwNDA3IiwiLTY5LjQ2NjE4NjkiLCI2MTU2MzAzMzgiLCI2MTU2MzA0NzYiLCItNC4yNzY1NDk2OUUrMTAiLCItODg2MjMwMy4xNSIsIi04ODYyMzAzIiwiMTAuNDM3NTY5MyIsIjMuNDQyODMxMDJFLTYwNyIpOworICBtYXRodGVzdCg0NDgsZGVmLCIxMDc4NzU3LjUwIiwiMjc0MDI1NjkuMEUtNzEzNzQyMDgyIiwiMTA3ODc1Ny41MCIsIjEwNzg3NTcuNTAiLCIyLjk1NjA3MjY4RS03MTM3NDIwNjkiLCIzLjkzNjcwMjA3RSs3MTM3NDIwODAiLCIiLCIiLCIxLjI1NTM2OTI0RSsxOCIpOworICBtYXRodGVzdCg0NDksZGVmLCItNDg2NS42MDM1OEUtNDAxMTE2NTE1IiwiNjY5NTIuNTMxNSIsIjY2OTUyLjUzMTUiLCItNjY5NTIuNTMxNSIsIi0zLjI1NzY0NDc3RS00MDExMTY1MDciLCItNy4yNjcyNDM2M0UtNDAxMTE2NTE3IiwiMCIsIi00Ljg2NTYwMzU4RS00MDExMTY1MTIiLCIiKTsKKyAgbWF0aHRlc3QoNDUwLGRlZiwiLTg3ODA1LjM5MjFFLTkzNDg5NjY5MCIsIi0xODc1LjE0NzQ1IiwiLTE4NzUuMTQ3NDUiLCIxODc1LjE0NzQ1IiwiMS42NDY0ODA1N0UtOTM0ODk2NjgyIiwiNC42ODI1ODYwMUUtOTM0ODk2Njg5IiwiMCIsIi04Ljc4MDUzOTIxRS05MzQ4OTY2ODYiLCIiKTsKKyAgbWF0aHRlc3QoNDUxLGRlZiwiLTIzMjU0MDYwOS5FKzYwMjcwMjUyMCIsIjY4LjA4MzQyMjMiLCItMi4zMjU0MDYwOUUrNjAyNzAyNTI4IiwiLTIuMzI1NDA2MDlFKzYwMjcwMjUyOCIsIi0xLjU4MzIxNjA1RSs2MDI3MDI1MzAiLCItMy40MTU1MjQ2OEUrNjAyNzAyNTI2IiwiIiwiIiwiIik7CisgIG1hdGh0ZXN0KDQ1MixkZWYsIi0zMjA2MTA4MDMuIiwiLTg2Mzg3MTIzNS4iLCItMS4xODQ0ODIwNEUrOSIsIjU0MzI2MDQzMiIsIjIuNzY5NjY0NTBFKzE3IiwiMC4zNzExMzI2MyIsIjAiLCItMzIwNjEwODAzIiwiIik7CisgIG1hdGh0ZXN0KDQ1MyxkZWYsIi0zMDM5NTYzNjRFKzI3ODEzOTk3OSIsIjIyOTUzNy45MjBFKzQ3OTYwMzcyNSIsIjIuMjk1Mzc5MjBFKzQ3OTYwMzczMCIsIi0yLjI5NTM3OTIwRSs0Nzk2MDM3MzAiLCItNi45NzY5NTExNkUrNzU3NzQzNzE3IiwiLTEuMzI0MjA5OEUtMjAxNDYzNzQzIiwiMCIsIi0zLjAzOTU2MzY0RSsyNzgxMzk5ODciLCI5LjIzODk0NzEyRSs1NTYyNzk5NzQiKTsKKyAgbWF0aHRlc3QoNDU0LGRlZiwiLTQzOS43NDczNDgiLCI3NC45NDk0NDU3RS0zNTMxMTc1ODIiLCItNDM5Ljc0NzM0OCIsIi00MzkuNzQ3MzQ4IiwiLTMuMjk1ODgyMDBFLTM1MzExNzU3OCIsIi01Ljg2NzI1Mjg0RSszNTMxMTc1ODIiLCIiLCIiLCItMy4xNzk5NjY5M0UrMTgiKTsKKyAgbWF0aHRlc3QoNDU1LGRlZiwiLTg5NzAyMjMxLjkiLCIxLjI4OTkzOTkzIiwiLTg5NzAyMjMwLjYiLCItODk3MDIyMzMuMiIsIi0xMTU3MTA0OTEiLCItNjk1Mzk4NTIuMSIsIi02OTUzOTg1MiIsIi0wLjA3ODkwOTY0IiwiLTg5NzAyMjMxLjkiKTsKKyAgbWF0aHRlc3QoNDU2LGRlZiwiLTU4NTY5MzkuMTQiLCItNjc0MzM3NS4zNCIsIi0xMjYwMDMxNC41IiwiODg2NDM2LjIwIiwiMy45NDk1NTM5MEUrMTMiLCIwLjg2ODU0NzEwNyIsIjAiLCItNTg1NjkzOS4xNCIsIi0zLjI5MjEzMjQ4RS00NTYzNjk0MiIpOworICBtYXRodGVzdCg0NTcsZGVmLCI3MzMzMTcuNjY5RSsxMDAzODEzNDkiLCItMTM4MzIuNjc5MkUrMTc0MDU1NjA3IiwiLTEuMzgzMjY3OTJFKzE3NDA1NTYxMSIsIjEuMzgzMjY3OTJFKzE3NDA1NTYxMSIsIi0xLjAxNDM3NDgxRSsyNzQ0MzY5NjYiLCItNS4zMDEzNDIyN0UtNzM2NzQyNTciLCIwIiwiNy4zMzMxNzY2OUUrMTAwMzgxMzU0IiwiMS4zNjM2NjU0OUUtMTAwMzgxMzU1Iik7CisgIG1hdGh0ZXN0KDQ1OCxkZWYsIjg3LjQ3OTg3ODdFLTgwMTI0NzA0IiwiMTA4NDk3LjMyIiwiMTA4NDk3LjMyMCIsIi0xMDg0OTcuMzIwIiwiOS40OTEzMzIzOUUtODAxMjQ2OTgiLCI4LjA2Mjg2MDc5RS04MDEyNDcwOCIsIjAiLCI4Ljc0Nzk4Nzg3RS04MDEyNDcwMyIsIiIpOworICBtYXRodGVzdCg0NTksZGVmLCItNjk0NTYyMDUyIiwiMzEwNjgxLjMxOUUrNTQ5NDQ1MjY0IiwiMy4xMDY4MTMxOUUrNTQ5NDQ1MjY5IiwiLTMuMTA2ODEzMTlFKzU0OTQ0NTI2OSIsIi0yLjE1Nzg3NDU0RSs1NDk0NDUyNzgiLCItMi4yMzU2MDkzMkUtNTQ5NDQ1MjYxIiwiMCIsIi02OTQ1NjIwNTIiLCItMy4zNTA2ODE1NUUrMjYiKTsKKyAgbWF0aHRlc3QoNDYwLGRlZiwiLTk3NDQxMzUuODUiLCIxNzk3MDE2LjA0IiwiLTc5NDcxMTkuODEiLCItMTE1NDExNTEuOSIsIi0xLjc1MTAzNjg0RSsxMyIsIi01LjQyMjM5NzgyIiwiLTUiLCItNzU5MDU1LjY1IiwiMy44Mzg0ODAwNkUrMTI1NTg4ODMiKTsKKyAgbWF0aHRlc3QoNDYxLGRlZiwiMzYyNS44NzMwOCIsIi01MC4yMjA4NTM2RSs2NTg2Mjc0ODciLCItNS4wMjIwODUzNkUrNjU4NjI3NDg4IiwiNS4wMjIwODUzNkUrNjU4NjI3NDg4IiwiLTEuODIwOTQ0NDFFKzY1ODYyNzQ5MiIsIi03LjIxOTg1NTU0RS02NTg2Mjc0ODYiLCIwIiwiMzYyNS44NzMwOCIsIjEuNTk1NjQ3N0UtMTgiKTsKKyAgbWF0aHRlc3QoNDYyLGRlZiwiMzY1MzQ3LjUyIiwiLTM2NTU0MTQuNDciLCItMzI5MDA2Ni45NSIsIjQwMjA3NjEuOTkiLCItMS4zMzU0OTY2MUUrMTIiLCItMC4wOTk5NDY5NDgiLCIwIiwiMzY1MzQ3LjUyIiwiMS4wMjY2MzI1N0UtMjAzMzM5OTQiKTsKKyAgbWF0aHRlc3QoNDYzLGRlZiwiLTE5NzA2MzMzLjZFLTgxNjkyMzA1MCIsIi0zODM4NTgwMzIuIiwiLTM4Mzg1ODAzMiIsIjM4Mzg1ODAzMiIsIjcuNTY0NDM0NDNFLTgxNjkyMzAzNSIsIjUuMTMzNzU1N0UtODE2OTIzMDUyIiwiMCIsIi0xLjk3MDYzMzM2RS04MTY5MjMwNDMiLCIiKTsKKyAgbWF0aHRlc3QoNDY0LGRlZiwiLTg2MzQ2LjI2MTYiLCItOTguODA2Mzc4NSIsIi04NjQ0NS4wNjgwIiwiLTg2MjQ3LjQ1NTIiLCI4NTMxNTYxLjQxIiwiODczLjg5MzU5OCIsIjg3MyIsIi04OC4yOTMxNjk1IiwiLTIuMDUwNjQwODZFLTQ4OSIpOworICBtYXRodGVzdCg0NjUsZGVmLCItNDQ1NTg4LjE2MEUtNDk2NTkyMjE1IiwiMzI4LjgyMjk3NiIsIjMyOC44MjI5NzYiLCItMzI4LjgyMjk3NiIsIi0xLjQ2NTE5NjI1RS00OTY1OTIyMDciLCItMS4zNTUxMDA0NEUtNDk2NTkyMjEyIiwiMCIsIi00LjQ1NTg4MTYwRS00OTY1OTIyMTAiLCIiKTsKKyAgbWF0aHRlc3QoNDY2LGRlZiwiLTk3MDkyMTMuNzEiLCItMzQuNjY5MDEzNyIsIi05NzA5MjQ4LjM4IiwiLTk3MDkxNzkuMDQiLCIzMzY2MDg4NjMiLCIyODAwNTQuNTEyIiwiMjgwMDU0IiwiLTE3Ljc0NzI2MDIiLCItMi44MDkwMzk3NEUtMjQ1Iik7CisgIG1hdGh0ZXN0KDQ2NyxkZWYsIjc0MjM5NTUzNi4iLCItNDM1MzMuNjg4OSIsIjc0MjM1MjAwMiIsIjc0MjQzOTA3MCIsIi0zLjIzMTkyMTYzRSsxMyIsIi0xNzA1My4zNTY5IiwiLTE3MDUzIiwiMTU1MzkuMTg4MyIsIjUuNzYyMjczNEUtMzg2MTc1Iik7CisgIG1hdGh0ZXN0KDQ2OCxkZWYsIi04Nzg4NDkxOTMuIiwiLTU4NDI5ODIuNDdFLTk3MjUzNzM0MiIsIi04Nzg4NDkxOTMiLCItODc4ODQ5MTkzIiwiNS4xMzUxMDA0M0UtOTcyNTM3MzI3IiwiMS41MDQxMTA2MUUrOTcyNTM3MzQ0IiwiIiwiIiwiMi4xNzAyNzA0MkUtNTQiKTsKKyAgbWF0aHRlc3QoNDY5LGRlZiwiLTc4MDE0MTQyLjEiLCItNjI0NjU4LjUyMiIsIi03ODYzODgwMC42IiwiLTc3Mzg5NDgzLjYiLCI0Ljg3MzIxOTg3RSsxMyIsIjEyNC44OTA4NjMiLCIxMjQiLCItNTU2NDg1LjM3MiIsIi03Ljg2MDYzODY1RS00OTI5OTE4Iik7CisgIG1hdGh0ZXN0KDQ3MCxkZWYsIjg1NzAzOS4zNzEiLCI0NTQuMzc5NjcyIiwiODU3NDkzLjc1MSIsIjg1NjU4NC45OTEiLCIzODk0MjEyNjgiLCIxODg2LjE3NDU0IiwiMTg4NiIsIjc5LjMwOTYwOCIsIjMuODIyNTMxMDFFKzI2OTMiKTsKKyAgbWF0aHRlc3QoNDcxLGRlZiwiMTY2NTM0MDEwLiIsIi0xNzMuMDEyMjM2IiwiMTY2NTMzODM3IiwiMTY2NTM0MTgzIiwiLTIuODgxMjQyMTRFKzEwIiwiLTk2MjU1Ni4yNTUiLCItOTYyNTU2IiwiNDQuMTY0Nzg0IiwiNC43ODYyMDY2NEUtMTQyMyIpOworICBtYXRodGVzdCg0NzIsZGVmLCItODEwLjg3OTA2MyIsIjQzNzc2LjYxMCIsIjQyOTY1LjczMDkiLCItNDQ1ODcuNDg5MSIsIi0zNTQ5NzUzNi41IiwiLTAuMDE4NTIzMTEyMyIsIjAiLCItODEwLjg3OTA2MyIsIi0yLjM0NzU4NjkxRSsxMjczNDUiKTsKKyAgbWF0aHRlc3QoNDczLGRlZiwiLTMyNy4xMjc5MzUiLCI5MzQ1ODk0NCIsIjkzNDU4NjE2LjkiLCItOTM0NTkyNzEuMSIsIi0zLjA1NzMwMzE0RSsxMCIsIi0wLjAwMDAwMzUwMDIzMTQ1IiwiMCIsIi0zMjcuMTI3OTM1IiwiMi4yOTMyMzAyMUUrMjM1MDIyODU0Iik7CisgIG1hdGh0ZXN0KDQ3NCxkZWYsIjUzOTI5NTIxOC4iLCItOTU4Nzk0MS4xMEUtMzA5NjQzMDk4IiwiNTM5Mjk1MjE4IiwiNTM5Mjk1MjE4IiwiLTUuMTcwNzMwNzlFLTMwOTY0MzA4MyIsIi01LjYyNDcyMzk0RSszMDk2NDMwOTkiLCIiLCIiLCI0LjgwNTQ1MjY5RS04OCIpOworICBtYXRodGVzdCg0NzUsZGVmLCItMzg2MjcwMi42NSIsIjg3OTYxNi43MzMiLCItMjk4MzA4NS45MiIsIi00NzQyMzE5LjM4IiwiLTMuMzk3Njk3ODlFKzEyIiwiLTQuMzkxMzQ3NCIsIi00IiwiLTM0NDIzNS43MTgiLCItMy41MDY1MDE2N0UrNTc5Mzk0MSIpOworICBtYXRodGVzdCg0NzYsZGVmLCItOC4yNTI5MDUwMCIsIjk5Mi4wOTE1ODRFKzI1NjA3MDI1NyIsIjkuOTIwOTE1ODRFKzI1NjA3MDI1OSIsIi05LjkyMDkxNTg0RSsyNTYwNzAyNTkiLCItOC4xODc2Mzc1OUUrMjU2MDcwMjYwIiwiLTguMzE4NjkyNjhFLTI1NjA3MDI2MCIsIjAiLCItOC4yNTI5MDUwMCIsIjEuNDY1Nzc4ODhFKzkiKTsKKyAgbWF0aHRlc3QoNDc3LGRlZiwiNTQ2ODc1MjA1LiIsIjQ0Ny41Mjg1N0UrNTU3MzU3MTAxIiwiNC40NzUyODU3MEUrNTU3MzU3MTAzIiwiLTQuNDc1Mjg1NzBFKzU1NzM1NzEwMyIsIjIuNDQ3NDIyNzhFKzU1NzM1NzExMiIsIjEuMjIxOTg5NDhFLTU1NzM1NzA5NSIsIjAiLCI1NDY4NzUyMDUiLCI4Ljk0NDQzNTQyRSszNCIpOworICBtYXRodGVzdCg0NzgsZGVmLCIxNzc2MjM0MzciLCItNzc3OTExNi4xNCIsIjE2OTg0NDMyMSIsIjE4NTQwMjU1MyIsIi0xLjM4MTc1MzM1RSsxNSIsIi0yMi44MzMzNyIsIi0yMiIsIjY0ODI4ODEuOTIiLCIyLjkwMDg1MzA5RS02NDE3MzgyMCIpOworICBtYXRodGVzdCg0NzksZGVmLCIzNzcyMDQ3MzUuIiwiMTM3NjguMTQwMSIsIjM3NzIxODUwMyIsIjM3NzE5MDk2NyIsIjUuMTkzNDA3NjRFKzEyIiwiMjczOTYuOTI3NCIsIjI3Mzk2IiwiMTI3NjguODIwNCIsIjIuMDYwNjUyOTdFKzExODA4MiIpOworICBtYXRodGVzdCg0ODAsZGVmLCItMjQzNS40OTIzOSIsIi0xMTczMi4wNjQwRS0yMzMzMTUwNCIsIi0yNDM1LjQ5MjM5IiwiLTI0MzUuNDkyMzkiLCIyLjg1NzMzNTI2RS0yMzMzMTQ5NyIsIjIuMDc1OTI4MzJFKzIzMzMxNTAzIiwiIiwiIiwiLTAuMDAwNDEwNTk0NTkiKTsKKyAgbWF0aHRlc3QoNDgxLGRlZiwiLTYxMjg0NjUuMTRFLTEzNzEyMzI5NCIsIi01NzQyMjY0LjI3IiwiLTU3NDIyNjQuMjciLCI1NzQyMjY0LjI3IiwiMy41MTkxMjY2NEUtMTM3MTIzMjgxIiwiMS4wNjcyNTU4NUUtMTM3MTIzMjk0IiwiMCIsIi02LjEyODQ2NTE0RS0xMzcxMjMyODgiLCIiKTsKKyAgbWF0aHRlc3QoNDgyLGRlZiwiLTI4OTgwNjUuNDQiLCItNS4xMTYzODEwNSIsIi0yODk4MDcwLjU2IiwiLTI4OTgwNjAuMzIiLCIxNDgyNzYwNy4xIiwiNTY2NDI4Ljc3MyIsIjU2NjQyOCIsIi0zLjk1NDYxMDYwIiwiLTQuODkxNjkxNTFFLTMzIik7CisgIG1hdGh0ZXN0KDQ4MyxkZWYsIjE4NTEzOTUuMzFFKzU5NDM4MzE2MCIsIi01NTAzMDEuNDc1IiwiMS44NTEzOTUzMUUrNTk0MzgzMTY2IiwiMS44NTEzOTUzMUUrNTk0MzgzMTY2IiwiLTEuMDE4ODI1NTdFKzU5NDM4MzE3MiIsIi0zLjM2NDMyOTE4RSs1OTQzODMxNjAiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNDg0LGRlZiwiNTM2NDEyNTg5LkUrMzc5NTgzOTc3IiwiODk5LjYwMTE2MSIsIjUuMzY0MTI1ODlFKzM3OTU4Mzk4NSIsIjUuMzY0MTI1ODlFKzM3OTU4Mzk4NSIsIjQuODI1NTczODhFKzM3OTU4Mzk4OCIsIjUuOTYyNzgyMzFFKzM3OTU4Mzk4MiIsIiIsIiIsIiIpOworICBtYXRodGVzdCg0ODUsZGVmLCIxODUuODUyOTciLCI4Njc0MTk0ODAuIiwiODY3NDE5NjY2IiwiLTg2NzQxOTI5NCIsIjEuNjEyMTI0ODdFKzExIiwiMi4xNDI1OTYyMkUtNyIsIjAiLCIxODUuODUyOTciLCIiKTsKKyAgbWF0aHRlc3QoNDg2LGRlZiwiLTUuMjY2MzEwNTMiLCItMzgxNTk0MS4zNUUrMTgzMjkxNzYzIiwiLTMuODE1OTQxMzVFKzE4MzI5MTc2OSIsIjMuODE1OTQxMzVFKzE4MzI5MTc2OSIsIjIuMDA5NTkzMjFFKzE4MzI5MTc3MCIsIjEuMzgwMDgxNjJFLTE4MzI5MTc2OSIsIjAiLCItNS4yNjYzMTA1MyIsIjAuMDAxMzAwMDkyMTgiKTsKKyAgbWF0aHRlc3QoNDg3LGRlZiwiLTguMTE1ODcwMjFFLTI0NTk0MjgwNiIsIjQ1NTMuMDY3NTNFKzk0MzQxMjA0OCIsIjQuNTUzMDY3NTNFKzk0MzQxMjA1MSIsIi00LjU1MzA2NzUzRSs5NDM0MTIwNTEiLCItMy42OTUyMTA1MUUrNjk3NDY5MjQ2IiwiIiwiMCIsIi04LjExNTg3MDIxRS0yNDU5NDI4MDYiLCIiKTsKKyAgbWF0aHRlc3QoNDg4LGRlZiwiLTQwNTc2NS4zNTIiLCI4NTQ5NjMyMzEiLCI4NTQ1NTc0NjYiLCItODU1MzY4OTk2IiwiLTMuNDY5MTQ0NTZFKzE0IiwiLTAuMDAwNDc0NTk5NzY5IiwiMCIsIi00MDU3NjUuMzUyIiwiIik7CisgIG1hdGh0ZXN0KDQ4OSxkZWYsIi0xNTkuNjA5NzU3IiwiLTQzMzU2Ljc1NjciLCItNDM1MTYuMzY2NSIsIjQzMTk3LjE0NzAiLCI2OTIwMTYxLjQwIiwiMC4wMDM2ODEzMTIxOSIsIjAiLCItMTU5LjYwOTc1NyIsIi04Ljk1Mzk3ODQ5RS05NTUxOSIpOworICBtYXRodGVzdCg0OTAsZGVmLCItNTY0MjQwLjI0MUUtNTAxMzE2NjcyIiwiLTU1Ny43ODE5NzciLCItNTU3Ljc4MTk3NyIsIjU1Ny43ODE5NzciLCIzLjE0NzIzMDM3RS01MDEzMTY2NjQiLCIxLjAxMTU3ODQ3RS01MDEzMTY2NjkiLCIwIiwiLTUuNjQyNDAyNDFFLTUwMTMxNjY2NyIsIiIpOworICBtYXRodGVzdCg0OTEsZGVmLCIzMTg4NDcuMjcwIiwiNTgyMTA3ODc4LkUrMzk5NjMzNDEyIiwiNS44MjEwNzg3OEUrMzk5NjMzNDIwIiwiLTUuODIxMDc4NzhFKzM5OTYzMzQyMCIsIjEuODU2MDM1MDhFKzM5OTYzMzQyNiIsIjUuNDc3NDYwMTRFLTM5OTYzMzQxNiIsIjAiLCIzMTg4NDcuMjcwIiwiMS4wNTA3NDIzRSszMyIpOworICBtYXRodGVzdCg0OTIsZGVmLCItNDQyNi41OTY2MyIsIjk1LjEwOTY3NjUiLCItNDMzMS40ODY5NSIsIi00NTIxLjcwNjMxIiwiLTQyMTAxMi4xNzMiLCItNDYuNTQyMDIxNyIsIi00NiIsIi01MS41NTE1MTEwIiwiLTIuMzgwMzczNzlFKzM0NiIpOworICBtYXRodGVzdCg0OTMsZGVmLCI2MDM3LjI4MzEwIiwiNTc4MjY0LjEwNSIsIjU4NDMwMS4zODgiLCItNTcyMjI2LjgyMiIsIjMuNDkxMTQ0MTFFKzkiLCIwLjAxMDQ0MDM1NiIsIjAiLCI2MDM3LjI4MzEwIiwiMy41NzI3OTQ4M0UrMjE4NjMyNCIpOworICBtYXRodGVzdCg0OTQsZGVmLCItNjYuOTU1NjY5MiIsIi01My44NTE5NDA0IiwiLTEyMC44MDc2MTAiLCItMTMuMTAzNzI4OCIsIjM2MDUuNjkyNzEiLCIxLjI0MzMyODgxIiwiMSIsIi0xMy4xMDM3Mjg4IiwiMi41NTU1NDA4NkUtOTkiKTsKKyAgbWF0aHRlc3QoNDk1LGRlZiwiLTkyNDg2LjAyMjIiLCItNTk5MzUuODU0NCIsIi0xNTI0MjEuODc3IiwiLTMyNTUwLjE2NzgiLCI1LjU0MzIyODc2RSs5IiwiMS41NDMwODM0IiwiMSIsIi0zMjU1MC4xNjc4IiwiMS44MzE1MjY1NkUtMjk3NjQ3Iik7CisgIG1hdGh0ZXN0KDQ5NixkZWYsIjg1MjEzNjIxOS5FKzkxNzc4NzM1MSIsIjkyNDYyMjEuOTEiLCI4LjUyMTM2MjE5RSs5MTc3ODczNTkiLCI4LjUyMTM2MjE5RSs5MTc3ODczNTkiLCI3Ljg3OTA0MDU4RSs5MTc3ODczNjYiLCI5LjIxNjA0NzY3RSs5MTc3ODczNTIiLCIiLCIiLCIiKTsKKyAgbWF0aHRlc3QoNDk3LGRlZiwiLTIxMjAwOTYuMTZFLTI2OTI1MzcxOCIsIjk0MzcuMDA1MTQiLCI5NDM3LjAwNTE0IiwiLTk0MzcuMDA1MTQiLCItMi4wMDA3MzU4NEUtMjY5MjUzNzA4IiwiLTIuMjQ2NTc3MzFFLTI2OTI1MzcxNiIsIjAiLCItMi4xMjAwOTYxNkUtMjY5MjUzNzEyIiwiIik7CisgIG1hdGh0ZXN0KDQ5OCxkZWYsIi01MjQ2NTMuMTY5RS04NjU3ODQyMjYiLCIyMjgwNTQuNjk4IiwiMjI4MDU0LjY5OCIsIi0yMjgwNTQuNjk4IiwiLTEuMTk2NDk2MjBFLTg2NTc4NDIxNSIsIi0yLjMwMDU1ODQ4RS04NjU3ODQyMjYiLCIwIiwiLTUuMjQ2NTMxNjlFLTg2NTc4NDIyMSIsIiIpOworICBtYXRodGVzdCg0OTksZGVmLCItMjg4MTkzMTMzIiwiLTMxMjI2ODczNy4iLCItNjAwNDYxODcwIiwiMjQwNzU2MDQiLCI4Ljk5OTM3MDU3RSsxNiIsIjAuOTIyOTAxMDExIiwiMCIsIi0yODgxOTMxMzMiLCIiKTsKKyAgbWF0aHRlc3QoNTAwLGRlZiwiLTM3MzQ4NDc1OUUtMTEzNTg5OTY0IiwiODQ0MTAxOTU4RS04NTI1MzgyNDAiLCItMy43MzQ4NDc1OUUtMTEzNTg5OTU2IiwiLTMuNzM0ODQ3NTlFLTExMzU4OTk1NiIsIi0zLjE1MjU5MjE2RS05NjYxMjgxODciLCItNC40MjQ2NDAzNkUrNzM4OTQ4Mjc1IiwiIiwiIiwiMy43ODYwMjE0N0UtOTA4NzE5NjQ0Iik7CisgIAorICBzdW1tYXJ5KCJBcml0aG1ldGljIik7CisgIHJldHVybjt9CisKKyAvKiBtYXRodGVzdCAtLSBnZW5lcmFsIGFyaXRobWV0aWMgdGVzdCByb3V0aW5lCisgICAgQXJnMSAgaXMgdGVzdCBudW1iZXIKKyAgICBBcmcyICBpcyBNYXRoQ29udGV4dAorICAgIEFyZzMgIGlzIGxlZnQgaGFuZCBzaWRlIChMSFMpCisgICAgQXJnNCAgaXMgcmlnaHQgaGFuZCBzaWRlIChSSFMpCisgICAgQXJnNSAgaXMgdGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgYWRkCisgICAgQXJnNiAgaXMgdGhlIGV4cGVjdGVkIHJlc3VsdCBmb3Igc3VidHJhY3QKKyAgICBBcmc3ICBpcyB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciBtdWx0aXBseQorICAgIEFyZzggIGlzIHRoZSBleHBlY3RlZCByZXN1bHQgZm9yIGRpdmlkZQorICAgIEFyZzkgIGlzIHRoZSBleHBlY3RlZCByZXN1bHQgZm9yIGludGVnZXJEaXZpZGUKKyAgICBBcmcxMCBpcyB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciByZW1haW5kZXIKKyAgICBBcmcxMSBpcyB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciBwb3dlcgorIAorICBGb3IgcG93ZXIgUkhTLCAwIGlzIGFkZGVkIHRvIHRoZSBudW1iZXIsIGFueSBleHBvbmVudCBpcyByZW1vdmVkIGFuZAorICB0aGUgbnVtYmVyIGlzIHRoZW4gcm91bmRlZCB0byBhbiBpbnRlZ2VyLCB1c2luZyBmb3JtYXQocmhzKzAsLDApCisgCisgIElmIGFuIGVycm9yIHNob3VsZCByZXN1bHQgZm9yIGFuIG9wZXJhdGlvbiwgdGhlICdleHBlY3RlZCByZXN1bHQnIGlzCisgIGFuIGVtcHR5IHN0cmluZy4KKyAgKi8KKyAKKyBwcml2YXRlIHZvaWQgbWF0aHRlc3QoaW50IHRlc3QsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBtYyxqYXZhLmxhbmcuU3RyaW5nIHNsaHMsamF2YS5sYW5nLlN0cmluZyBzcmhzLGphdmEubGFuZy5TdHJpbmcgYWRkLGphdmEubGFuZy5TdHJpbmcgc3ViLGphdmEubGFuZy5TdHJpbmcgbXVsLGphdmEubGFuZy5TdHJpbmcgZGl2LGphdmEubGFuZy5TdHJpbmcgaWR2LGphdmEubGFuZy5TdHJpbmcgcmVtLGphdmEubGFuZy5TdHJpbmcgcG93KXsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGxoczsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJoczsKKyAgamF2YS5sYW5nLlN0cmluZyByZXM9bnVsbDsKKyAgamF2YS5sYW5nLlN0cmluZyBzbj1udWxsOworICBpbnQgZT0wOworICAKKyAgCisgIAorICBsaHM9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChzbGhzKTsKKyAgcmhzPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoc3Jocyk7CisgIAorICB0cnl7CisgICByZXM9bGhzLmFkZChyaHMsbWMpLnRvU3RyaW5nKCk7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQxMzcpeworICAgcmVzPSIiOworICB9CisgIG1hdGh0ZXN0Y2hlY2sodGVzdCxsaHMscmhzLCJhZGQiLHJlcyxhZGQpOworICAKKyAgdHJ5eworICAgcmVzPWxocy5zdWJ0cmFjdChyaHMsbWMpLnRvU3RyaW5nKCk7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQxMzgpeworICAgcmVzPSIiOworICB9CisgIG1hdGh0ZXN0Y2hlY2sodGVzdCxsaHMscmhzLCJzdWIiLHJlcyxzdWIpOworICAKKyAgdHJ5eworICAgcmVzPWxocy5tdWx0aXBseShyaHMsbWMpLnRvU3RyaW5nKCk7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQxMzkpeworICAgcmVzPSIiOworICB9CisgIG1hdGh0ZXN0Y2hlY2sodGVzdCxsaHMscmhzLCJtdWwiLHJlcyxtdWwpOworICAKKyAgdHJ5eworICAgcmVzPWxocy5kaXZpZGUocmhzLG1jKS50b1N0cmluZygpOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTQwKXsKKyAgIHJlcz0iIjsKKyAgfQorICBtYXRodGVzdGNoZWNrKHRlc3QsbGhzLHJocywiZGl2IixyZXMsZGl2KTsKKyAgCisgIHRyeXsKKyAgIHJlcz1saHMuZGl2aWRlSW50ZWdlcihyaHMsbWMpLnRvU3RyaW5nKCk7CisgIH0KKyAgY2F0Y2ggKGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uICQxNDEpeworICAgcmVzPSIiOworICB9CisgIG1hdGh0ZXN0Y2hlY2sodGVzdCxsaHMscmhzLCJpZHYiLHJlcyxpZHYpOworICAKKyAgdHJ5eworICAgcmVzPWxocy5yZW1haW5kZXIocmhzLG1jKS50b1N0cmluZygpOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTQyKXsKKyAgIHJlcz0iIjsKKyAgfQorICBtYXRodGVzdGNoZWNrKHRlc3QsbGhzLHJocywicmVtIixyZXMscmVtKTsKKyAgCisgIHRyeXsKKyAgIC8vIHByZXBhcmUgYW4gaW50ZWdlciBmcm9tIHRoZSByaHMKKyAgIC8vIGluIFJleHg6CisgICAvLyAgIG49cmhzKzAKKyAgIC8vICAgZT1wb3MoJ0UnLCBuKQorICAgLy8gICBpZiBlPjAgdGhlbiBuPWxlZnQobixlLTEpCisgICAvLyAgIG49Zm9ybWF0KG4sLDApCisgICAKKyAgIHNuPXJocy5wbHVzKG1jKS50b1N0cmluZygpOworICAgZT1zbi5pbmRleE9mKCJFIiwwKTsKKyAgIGlmIChlPjApIAorICAgIHNuPXNuLnN1YnN0cmluZygwLGUpOworICAgc249KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoc24pKS5mb3JtYXQoLTEsMCk7CisgICAKKyAgIHJlcz1saHMucG93KG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoc24pLG1jKS50b1N0cmluZygpOworICB9CisgIGNhdGNoIChqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiAkMTQzKXsKKyAgIHJlcz0iIjsKKyAgfQorICBtYXRodGVzdGNoZWNrKHRlc3QsbGhzLHJocywicG93IixyZXMscG93KTsKKyAgcmV0dXJuOworICB9CisKKyAvKiBtYXRodGVzdGNoZWNrIC0tIGNoZWNrIGZvciBnZW5lcmFsIG1hdGh0ZXN0IGVycm9yCisgICAgQXJnMSAgaXMgdGVzdCBudW1iZXIKKyAgICBBcmcyICBpcyBsZWZ0IGhhbmQgc2lkZSAoTEhTKQorICAgIEFyZzMgIGlzIHJpZ2h0IGhhbmQgc2lkZSAoUkhTKQorICAgIEFyZzQgIGlzIHRoZSBvcGVyYXRpb24KKyAgICBBcmc1ICBpcyB0aGUgYWN0dWFsIHJlc3VsdAorICAgIEFyZzYgIGlzIHRoZSBleHBlY3RlZCByZXN1bHQKKyAgICBTaG93IGVycm9yIG1lc3NhZ2UgaWYgYSBwcm9ibGVtLCBvdGhlcndpc2UgcmV0dXJuIHF1aWV0bHkKKyAgICAqLworIAorIHByaXZhdGUgdm9pZCBtYXRodGVzdGNoZWNrKGludCB0ZXN0LGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBsaHMsY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJocyxqYXZhLmxhbmcuU3RyaW5nIG9wLGphdmEubGFuZy5TdHJpbmcgZ290LGphdmEubGFuZy5TdHJpbmcgd2FudCl7CisgIGJvb2xlYW4gZmxhZzsKKyAgamF2YS5sYW5nLlN0cmluZyB0ZXN0bnVtOworICAKKyAgZmxhZz13YW50LmVxdWFscygoamF2YS5sYW5nLk9iamVjdClnb3QpOworICAKKyAgaWYgKCghZmxhZykpIAorICAgc2F5KCI+Iit0ZXN0KyI+IisiICIrbGhzLnRvU3RyaW5nKCkrIiAiK29wKyIgIityaHMudG9TdHJpbmcoKSsiICIrIj0iKyIgIit3YW50KyIgIisiW2dvdCIrIiAiK2dvdCsiXSIpOworICAKKyAgdGVzdG51bT0iZ2VuIityaWdodCgobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCh0ZXN0KzEwMDApKS50b1N0cmluZygpLDMpOworICAKKyAgKG5ldyBUZXN0KHRlc3RudW0pKS5vaz1mbGFnOworICByZXR1cm47CisgIH0KKworIAorIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qIFN1cHBvcnQgcm91dGluZXMgYW5kIG1pbm9yIGNsYXNzZXMgZm9sbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIAorIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogTWV0aG9kIGNhbGxlZCB0byBzdW1tYXJpc2UgcGVuZGluZyB0ZXN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qIEFyZzEgaXMgc2VjdGlvbiBuYW1lICovCisgCisgcHJpdmF0ZSB2b2lkIHN1bW1hcnkoamF2YS5sYW5nLlN0cmluZyBzZWN0aW9uKXsKKyAgaW50IGJhZDsKKyAgaW50IGNvdW50OworICBpbnQgaT0wOworICBUZXN0IGl0ZW09bnVsbDsKKyAgYmFkPTA7CisgIGNvdW50PVRlc3RzLnNpemUoKTsKKyAge2ludCAkMTQ0PWNvdW50O2k9MDtpOmZvcig7JDE0ND4wOyQxNDQtLSxpKyspeworICAgaXRlbT0oVGVzdCkoVGVzdHMuZWxlbWVudEF0KGkpKTsKKyAgIGlmICgoIWl0ZW0ub2spKSAKKyAgICB7CisgICAgIGJhZCsrOworICAgICBlcnJsbigiRmFpbGVkOiIrIiAiK2l0ZW0ubmFtZSk7CisgICAgfQorICAgfQorICB9LyppKi8KKyAgdG90YWxjb3VudD10b3RhbGNvdW50K2NvdW50OworICBUZXN0cz1uZXcgamF2YS51dGlsLlZlY3RvcigxMDApOyAvLyByZWluaXRpYWxpemUKKyAgaWYgKGJhZD09MCkgCisgICBzYXkoIk9LIisiICIrbGVmdChzZWN0aW9uLDE0KSsiICIrcmlnaHQoIlsiK2NvdW50KyIgIisidGVzdHNdIiwxMikpOworICBlbHNlIAorICAgdGhyb3cgbmV3IERpYWdFeGNlcHRpb24oc2VjdGlvbisiICIrIltmYWlsZWQiKyIgIitiYWQrIiAiKyJvZiIrIiAiK2NvdW50KyIgIisidGVzdHNdIixiYWQpOworICByZXR1cm47fQorCisgCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAvKiByaWdodCAtIFV0aWxpdHkgdG8gZG8gYSAncmlnaHQnIG9uIGEgSmF2YSBTdHJpbmcgICAgICAgICAgICAgICAgICAqLworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogQXJnMSBpcyBzdHJpbmcgdG8gcmlnaHQtanVzdGlmeSAqLworIC8qIEFyZzIgaXMgZGVzaXJlZCBsZW5ndGggKi8KKyAKKyBwcml2YXRlIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIHJpZ2h0KGphdmEubGFuZy5TdHJpbmcgcyxpbnQgbGVuKXsKKyAgaW50IHNsZW47CisgIHNsZW49cy5sZW5ndGgoKTsKKyAgaWYgKHNsZW49PWxlbikgCisgICByZXR1cm4gczsgLy8gbGVuZ3RoIGp1c3QgcmlnaHQKKyAgaWYgKHNsZW4+bGVuKSAKKyAgIHJldHVybiBzLnN1YnN0cmluZyhzbGVuLWxlbik7IC8vIHRydW5jYXRlIG9uIGxlZnQKKyAgLy8gdG9vIHNob3J0CisgIHJldHVybiAobmV3IGphdmEubGFuZy5TdHJpbmcobmV3IGNoYXJbbGVuLXNsZW5dKSkucmVwbGFjZSgnXDAwMCcsJyAnKS5jb25jYXQocyk7CisgIH0KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogbGVmdCAtIFV0aWxpdHkgdG8gZG8gYSAnbGVmdCcgb24gYSBKYXZhIFN0cmluZyAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qIEFyZzEgaXMgc3RyaW5nIHRvIGxlZnQtanVzdGlmeSAqLworIC8qIEFyZzIgaXMgZGVzaXJlZCBsZW5ndGggKi8KKyAKKyBwcml2YXRlIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGxlZnQoamF2YS5sYW5nLlN0cmluZyBzLGludCBsZW4peworICBpbnQgc2xlbjsKKyAgc2xlbj1zLmxlbmd0aCgpOworICBpZiAoc2xlbj09bGVuKSAKKyAgIHJldHVybiBzOyAvLyBsZW5ndGgganVzdCByaWdodAorICBpZiAoc2xlbj5sZW4pIAorICAgcmV0dXJuIHMuc3Vic3RyaW5nKDAsbGVuKTsgLy8gdHJ1bmNhdGUgb24gcmlnaHQKKyAgLy8gdG9vIHNob3J0CisgIHJldHVybiBzLmNvbmNhdCgobmV3IGphdmEubGFuZy5TdHJpbmcobmV3IGNoYXJbbGVuLXNsZW5dKSkucmVwbGFjZSgnXDAwMCcsJyAnKSk7CisgIH0KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogc2F5IC0gVXRpbGl0eSB0byBkbyBhIGRpc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qIEFyZzEgaXMgc3RyaW5nIHRvIGRpc3BsYXksIG9taXR0ZWQgaWYgbm9uZSAqLworIC8qICAgICAgICAgW251bGwgb3Igb21pdHRlZCBnaXZlcyBibGFuayBsaW5lXSAqLworIC8vIHRoaXMgdmVyc2lvbiBkb2Vzbid0IGhlZWQgY29udGludWF0aW9uIGZpbmFsIGNoYXJhY3RlcgorIAorIHByaXZhdGUgdm9pZCBzYXkoKXsKKyAgc2F5KChqYXZhLmxhbmcuU3RyaW5nKW51bGwpO3JldHVybjsKKyAgfQorIHByaXZhdGUgdm9pZCBzYXkoamF2YS5sYW5nLlN0cmluZyBzKXsKKyAgaWYgKHM9PW51bGwpIAorICAgcz0iICAiOworICBsb2dsbihzKTsKKyAgcmV0dXJuO30KKworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogU2NhZmZvbGRpbmcgZm9yIHN0YW5kLWFsb25lIHJ1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qKiBFbnRyeSBwb2ludCBmb3Igc3RhbmQtYWxvbmUgcnVuLiAgSXQgY29uc3RydWN0cyBhCisgICogIDxjb2RlPkRpYWdCaWdEZWNpbWFsPC9jb2RlPiBvYmplY3QgYW5kIHRoZW4gaW52b2tlcyBpdHMKKyAgKiAge0BsaW5rICNkaWFncnVuKGJvb2xlYW4pfSBtZXRob2QgdG8gcnVuIHRoZSB0ZXN0CisgICogIHN1aXRlLgorICAqCisgICogQHBhcmFtIGFyZ3MgVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBzdHJpbmcgYXJyYXkuCisgICogICBpZiB0aGUgZmlyc3Qgd29yZCBpcyAnPGNvZGU+Y29udGludWU8L2NvZGU+JyB0aGVuIHRyeSBhbmQgcnVuCisgICogICBhbGwgdGVzdHMsIG90aGVyd2lzZSBzdG9wIGFmdGVyIHRoZSBmaXJzdCBmYWlsaW5nIHRlc3QgZ3JvdXAuCisgICovCisgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICBuZXcgRGlhZ0JpZ0RlY2ltYWwoKS5ydW4oYXJncyk7CisgfQorIHB1YmxpYyB2b2lkIFRlc3RCaWdEZWNpbWFsKCl7CisJICBib29sZWFuICRjb250aW51ZTsKKwkgIGludCBmYWlsczsKKwkgICRjb250aW51ZT1mYWxzZTsKKwkgIGZhaWxzPWRpYWdydW4oJGNvbnRpbnVlKTsgLy8gYW5kIHJ1biB0aGUgdGVzdHMKKwkgIGlmKGZhaWxzIT0wKSB7CisgICAgICAgICBlcnJsbigiRGlhZ25vc3RpYyBUZXN0cyBmb3IgbWF0aCBmYWlsZWQuIE51bWJlciBvZiBlcnJvcnM6ICIgK2ZhaWxzKTsKKwkgIH0KKyAgfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRlc3QgLS0gcmVwcmVzZW50cyBhIHRlc3QgYW5kIGl0cyBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDE5OTgsIDIwMDAuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgKi8KKy8qIEF1dGhvcjogTWlrZSBDb3dsaXNoYXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAxOTk4LjA3LjE1IEluaXRpYWwgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDIwMDAuMDMuMjcgQ2hhbmdlIHRvIGphdmFkb2MgY29tbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKioKKyAqIFRoZSA8Y29kZT5UZXN0PC9jb2RlPiBjbGFzcyBpcyB1c2VkIHRvIHJlY29yZCBhIHNwZWNpZmljIHRlc3QuCisgKiBXaGVuIGNvbnN0cnVjdGVkLCBpdCBub3RlcyB0aGUgbmFtZSBvZiB0aGUgdGVzdCBhbmQgYWRkcyB0aGUgdGVzdAorICogdG8gdGhlIGxpc3Qgb2YgdGVzdHMgaGVsZCBieSB0aGUgcGFyZW50LgorICoKKyAqIEl0cyA8Y29kZT5vazwvZmxhZz4gaXMgYXNzaWduZWQgZGlyZWN0bHkgdG8gcmVjb3JkIHdoZXRoZXIgdGhlCisgKiB0ZXN0IHN1Y2NlZWRlZCAoMSkgb3IgZmFpbGVkICgwKS4KKyAqCisgKiBAc2VlICAgICBjb20uaWJtLmljdS5tYXRoLkRpYWdCaWdEZWNpbWFsCisgKiBAdmVyc2lvbiAxLjAwIDIwMDAuMDMuMjcKKyAqIEBhdXRob3IgIE1pa2UgQ293bGlzaGF3CisgKi8KKyAKKyBwdWJsaWMgY2xhc3MgVGVzdHsKKyAgcHJpdmF0ZSBmaW5hbCB0cmFuc2llbnQgamF2YS5sYW5nLlN0cmluZyAkMD0iRGlhZ0JpZ0RlY2ltYWwubnJ4IjsKKyAgLyogcHJvcGVydGllcyBzaGFyZWQgdHJhbnNpZW50ICovCisgLyoqIFRoZSBuYW1lIG9mIHRoZSB0ZXN0LiAqLworICB0cmFuc2llbnQgamF2YS5sYW5nLlN0cmluZyBuYW1lOworIC8qKiBTdWNjZXNzIGZsYWc7IHdpbGwgYmUgc2V0IHRvIDEgKHRydWUpIGlmIHRoZSB0ZXN0IHN1Y2NlZWRlZCwgb3IgMAorICAqIChmYWxzZSkgaWYgdGhlIHRlc3QgZmFpbGVkLgorICAqLworICB0cmFuc2llbnQgYm9vbGVhbiBvazsKKworIAorIC8qKgorICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+VGVzdDwvY29kZT4gd2l0aCBhIHNwZWNpZmllZCBuYW1lLgorICAqCisgICogQHBhcmFtIHRlc3RuYW1lIFRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IG5hbWluZyB0aGUgdGVzdC4KKyAgKi8KKyAgCisgIHB1YmxpYyBUZXN0KGphdmEubGFuZy5TdHJpbmcgdGVzdG5hbWUpe3N1cGVyKCk7CisgICBuYW1lPXRlc3RuYW1lOyAvLyBzYXZlIHRoZSBuYW1lCisgICBEaWFnQmlnRGVjaW1hbC50aGlzLlRlc3RzLmFkZEVsZW1lbnQoKGphdmEubGFuZy5PYmplY3QpdGhpcyk7IC8vIGFuZCBhZGQgdG8gcGFyZW50J3MgbGlzdAorICAgcmV0dXJuO30KKyAgfQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogRGlhZ0V4Y2VwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAxOTk2LCAyMDAwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICovCisgLyogQXV0aG9yOiBNaWtlIENvd2xpc2hhdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogMTk5Ni4wNS4yNyBJbml0aWFsIHZlcnNpb24gaW4gTmV0UmV4eCAoYXMgRGlhZ1gpICAgICAgICAgICAgICAgICAgICovCisgLyogMTk5OC4wNi4yNSBDb3BpZWQgZnJvbSBOZXRSZXh4IHRlc3Qgc3VpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogMTk5OS4wNy4wMyBBZGQgZmFpbCBjb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogMjAwMC4wMy4yNyBDaGFuZ2UgdG8gamF2YWRvYyBjb21tZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgCisgLyoqCisgICogVGhlIDxjb2RlPkRpYWdFeGNlcHRpb248L2NvZGU+IGNsYXNzIGlzIHVzZWQgdG8gc2lnbmFsIHRoZSBmYWlsdXJlCisgICogb2YgYSB0ZXN0IGdyb3VwLiAgSXQgcmVjb3JkcyB0aGUgbnVtYmVyIG9mIGZhaWx1cmVzIGluIHRoZSBncm91cC4KKyAgKgorICAqIEBzZWUgICAgIGNvbS5pYm0uaWN1Lm1hdGguRGlhZ0JpZ0RlY2ltYWwKKyAgKiBAdmVyc2lvbiAxLjAwIDIwMDAuMDMuMjcKKyAgKiBAYXV0aG9yICBNaWtlIENvd2xpc2hhdworICAqLworIAorIHB1YmxpYyBzdGF0aWMgY2xhc3MgRGlhZ0V4Y2VwdGlvbiBleHRlbmRzIGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9ueworICBwcml2YXRlIGZpbmFsIHRyYW5zaWVudCBqYXZhLmxhbmcuU3RyaW5nICQwPSJEaWFnQmlnRGVjaW1hbC5ucngiOworIAorICAvKiBwcm9wZXJ0aWVzIHNoYXJlZCB0cmFuc2llbnQgKi8KKyAvKiogdGhlIGNvdW50IG9mIGZhaWxlZCB0ZXN0cyBpbiB0aGUgZ3JvdXAgd2hpY2ggc2lnbmFsbGVkIHRoaXMKKyAgICogZXhjZXB0aW9uLgorICAgKi8KKyAgdHJhbnNpZW50IGludCBmYWlsY291bnQ9MDsKKyAvLyBudW1iZXIgb2YgdGVzdHMgd2hpY2ggZmFpbGVkCisgCisgLyoqCisgICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5EaWFnRXhjZXB0aW9uPC9jb2RlPiB3aXRoIGEgbWVzc2FnZSBhbmQKKyAgKiBmYWlsdXJlIGNvdW50LiAgVGhpcyBpcyB0aHJvd24gd2hlbiBhIGdyb3VwIG9mIHRlc3RzIGZhaWxzLgorICAqCisgICogQHBhcmFtIG1lc3NhZ2UgVGhlIDxjb2RlPlN0cmluZzwvY29kZT4gbWVzc2FnZSBkZXNjcmliaW5nIHRoZSBncm91cC4KKyAgKiBAcGFyYW0gZmFpbHMgICBUaGUgPGNvZGU+aW50PC9jb2RlPiBudW1iZXIgb2YgZmFpbGVkIHRlc3RzIGluIHRoZSAgZ3JvdXAuCisgICovCisgIAorICBwdWJsaWMgRGlhZ0V4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UsaW50IGZhaWxzKXsKKyAgIHN1cGVyKG1lc3NhZ2UpOworICAgZmFpbGNvdW50PWZhaWxzOworICAgcmV0dXJuO30KKyB9fQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0FzdHJvVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0FzdHJvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0ODllYTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQXN0cm9UZXN0LmphdmEKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9Bc3Ryb1Rlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMC8yNCAxOTozMTo0NiAkIAorICogJFJldmlzaW9uOiAxLjggJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyOworCisvLyBBc3Ryb1Rlc3QKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkNhbGVuZGFyQXN0cm9ub21lci4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKKworLy8gVE9ETzogdHJ5IGZpbmRpbmcgbmV4dCBuZXcgbW9vbiBhZnRlciAgMDcvMjgvMTk4NCAxNjowMCBHTVQKKworcHVibGljIGNsYXNzIEFzdHJvVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEFzdHJvVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgZG91YmxlIFBJID0gTWF0aC5QSTsKKyAgICAKKyAgICBzdGF0aWMgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIobmV3IFNpbXBsZVRpbWVab25lKDAsICJVVEMiKSk7CisgICAgc3RhdGljIENhbGVuZGFyQXN0cm9ub21lciBhc3RybyA9IG5ldyBDYWxlbmRhckFzdHJvbm9tZXIoKTsKKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0U29sYXJMb25naXR1ZGUoKSB7CisgICAgICAgIGZpbmFsIGRvdWJsZSB0ZXN0c1tdW10gPSB7CisgICAgICAgICAgICB7IDE5ODAsIDcsIDI3LCAwMCwgMDAsIDEyNC4xMTQzNDcgfSwKKyAgICAgICAgICAgIHsgMTk4OCwgNywgMjcsIDAwLCAwMCwgMTI0LjE4NzczMiB9LAorICAgICAgICB9OworICAgICAgICBsb2dsbigiIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGdjLmNsZWFyKCk7CisgICAgICAgICAgICBnYy5zZXQoKGludCl0ZXN0c1tpXVswXSwgKGludCl0ZXN0c1tpXVsxXS0xLCAoaW50KXRlc3RzW2ldWzJdLCAoaW50KXRlc3RzW2ldWzNdLCAoaW50KSB0ZXN0c1tpXVs0XSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFzdHJvLnNldERhdGUoZ2MuZ2V0VGltZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG91YmxlIGxvbmdpdHVkZSA9IGFzdHJvLmdldFN1bkxvbmdpdHVkZSgpOworICAgICAgICAgICAgbG9uZ2l0dWRlID0gMDsKKyAgICAgICAgICAgIEVxdWF0b3JpYWwgcmVzdWx0ID0gYXN0cm8uZ2V0U3VuUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEx1bmFyUG9zaXRpb24oKSB7CisgICAgICAgIGZpbmFsIGRvdWJsZSB0ZXN0c1tdW10gPSB7CisgICAgICAgICAgICB7IDE5NzksIDIsIDI2LCAxNiwgMDAsICAwLCAwIH0sCisgICAgICAgIH07CisgICAgICAgIGxvZ2xuKCIiKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGdjLmNsZWFyKCk7CisgICAgICAgICAgICBnYy5zZXQoKGludCl0ZXN0c1tpXVswXSwgKGludCl0ZXN0c1tpXVsxXS0xLCAoaW50KXRlc3RzW2ldWzJdLCAoaW50KXRlc3RzW2ldWzNdLCAoaW50KSB0ZXN0c1tpXVs0XSk7CisgICAgICAgICAgICBhc3Ryby5zZXREYXRlKGdjLmdldFRpbWUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVxdWF0b3JpYWwgcmVzdWx0ID0gYXN0cm8uZ2V0TW9vblBvc2l0aW9uKCk7CisgICAgICAgICAgICByZXN1bHQgPSBudWxsOworICAgICAgICB9CisKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENvb3JkaW5hdGVzKCkgeworICAgICAgICBFcXVhdG9yaWFsIHJlc3VsdCA9IGFzdHJvLmVjbGlwdGljVG9FcXVhdG9yaWFsKDEzOS42ODYxMTEgKiBQSS8gMTgwLjAsIDQuODc1Mjc4KiBQSSAvIDE4MC4wKTsKKyAgICAgICAgbG9nbG4oInJlc3VsdCBpcyAiICsgcmVzdWx0ICsgIjsgICIgKyByZXN1bHQudG9IbXNTdHJpbmcoKSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RDb3ZlcmFnZSgpIHsKKwlHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoMTk1OCwgQ2FsZW5kYXIuQVVHVVNULCAxNSk7CisJRGF0ZSB0aGVuID0gY2FsLmdldFRpbWUoKTsKKwlDYWxlbmRhckFzdHJvbm9tZXIgbXlhc3RybyA9IG5ldyBDYWxlbmRhckFzdHJvbm9tZXIodGhlbik7CisKKwkvL0xhdGl0dWRlOiAgMzQgZGVncmVlcyAwNScgTm9ydGggIAorCS8vTG9uZ2l0dWRlOiAgMTE4IGRlZ3JlZXMgMjInIFdlc3QgIAorCWRvdWJsZSBsYUxhdCA9IDM0ICsgNWQvNjAsIGxhTG9uZyA9IDM2MCAtICgxMTggKyAyMmQvNjApOworCUNhbGVuZGFyQXN0cm9ub21lciBteWFzdHJvMiA9IG5ldyBDYWxlbmRhckFzdHJvbm9tZXIobGFMb25nLCBsYUxhdCk7CisKKwlkb3VibGUgZWNsTGF0ID0gbGFMYXQgKiBNYXRoLlBJIC8gMzYwOworCWRvdWJsZSBlY2xMb25nID0gbGFMb25nICogTWF0aC5QSSAvIDM2MDsKKwlFY2xpcHRpYyBlY2wgPSBuZXcgRWNsaXB0aWMoZWNsTGF0LCBlY2xMb25nKTsKKwlsb2dsbigiZWNsaXB0aWM6ICIgKyBlY2wpOworCisJQ2FsZW5kYXJBc3Ryb25vbWVyIG15YXN0cm8zID0gbmV3IENhbGVuZGFyQXN0cm9ub21lcigpOworCW15YXN0cm8zLnNldEp1bGlhbkRheSgoNDcxMyArIDIwMDApICogMzY1LjI1KTsKKworCUNhbGVuZGFyQXN0cm9ub21lcltdIGFzdHJvbm9tZXJzID0geworCSAgICBteWFzdHJvLCBteWFzdHJvMiwgbXlhc3RybzMsIG15YXN0cm8yIC8vIGNoZWNrIGNhY2hlCisJfTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgYXN0cm9ub21lcnMubGVuZ3RoOyArK2kpIHsKKwkgICAgQ2FsZW5kYXJBc3Ryb25vbWVyIGFzdHJvID0gYXN0cm9ub21lcnNbaV07CisKKwkgICAgbG9nbG4oImFzdHJvOiAiICsgYXN0cm8pOworCSAgICBsb2dsbigiICAgdGltZTogIiArIGFzdHJvLmdldFRpbWUoKSk7CisJICAgIGxvZ2xuKCIgICBkYXRlOiAiICsgYXN0cm8uZ2V0RGF0ZSgpKTsKKwkgICAgbG9nbG4oIiAgIGNlbnQ6ICIgKyBhc3Ryby5nZXRKdWxpYW5DZW50dXJ5KCkpOworCSAgICBsb2dsbigiICAgZ3cgc2lkZXJlYWw6ICIgKyBhc3Ryby5nZXRHcmVlbndpY2hTaWRlcmVhbCgpKTsKKwkgICAgbG9nbG4oIiAgIGxvYyBzaWRlcmVhbDogIiArIGFzdHJvLmdldExvY2FsU2lkZXJlYWwoKSk7CisJICAgIGxvZ2xuKCIgICBlcXUgZWNsOiAiICsgYXN0cm8uZWNsaXB0aWNUb0VxdWF0b3JpYWwoZWNsKSk7CisJICAgIGxvZ2xuKCIgICBlcXUgbG9uZzogIiArIGFzdHJvLmVjbGlwdGljVG9FcXVhdG9yaWFsKGVjbExvbmcpKTsKKwkgICAgbG9nbG4oIiAgIGhvcml6OiAiICsgYXN0cm8uZWNsaXB0aWNUb0hvcml6b24oZWNsTG9uZykpOworCSAgICBsb2dsbigiICAgc3VucmlzZTogIiArIG5ldyBEYXRlKGFzdHJvLmdldFN1blJpc2VTZXQodHJ1ZSkpKTsKKwkgICAgbG9nbG4oIiAgIHN1bnNldDogIiArIG5ldyBEYXRlKGFzdHJvLmdldFN1blJpc2VTZXQoZmFsc2UpKSk7CisJICAgIGxvZ2xuKCIgICBtb29uIHBoYXNlOiAiICsgYXN0cm8uZ2V0TW9vblBoYXNlKCkpOworCSAgICBsb2dsbigiICAgbW9vbnJpc2U6ICIgKyBuZXcgRGF0ZShhc3Ryby5nZXRNb29uUmlzZVNldCh0cnVlKSkpOworCSAgICBsb2dsbigiICAgbW9vbnNldDogIiArIG5ldyBEYXRlKGFzdHJvLmdldE1vb25SaXNlU2V0KGZhbHNlKSkpOworCSAgICBsb2dsbigiICAgcHJldiBzdW1tZXIgc29sc3RpY2U6ICIgKyBuZXcgRGF0ZShhc3Ryby5nZXRTdW5UaW1lKGFzdHJvLlNVTU1FUl9TT0xTVElDRSwgZmFsc2UpKSk7CisJICAgIGxvZ2xuKCIgICBuZXh0IHN1bW1lciBzb2xzdGljZTogIiArIG5ldyBEYXRlKGFzdHJvLmdldFN1blRpbWUoYXN0cm8uU1VNTUVSX1NPTFNUSUNFLCB0cnVlKSkpOworCSAgICBsb2dsbigiICAgcHJldiBmdWxsIG1vb246ICIgKyBuZXcgRGF0ZShhc3Ryby5nZXRNb29uVGltZShhc3Ryby5GVUxMX01PT04sIGZhbHNlKSkpOworCSAgICBsb2dsbigiICAgbmV4dCBmdWxsIG1vb246ICIgKyBuZXcgRGF0ZShhc3Ryby5nZXRNb29uVGltZShhc3Ryby5GVUxMX01PT04sIHRydWUpKSk7CisJfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RTdW5yaXNlVGltZXMoKSB7CisgICAgICAgIC8vICAgICAgICBsb2dsbigiU3VucmlzZS9TdW5zZXQgdGltZXMgZm9yIFNhbiBKb3NlLCBDYWxpZm9ybmlhLCBVU0EiKTsKKyAgICAgICAgLy8gICAgICAgIENhbGVuZGFyQXN0cm9ub21lciBhc3RybyA9IG5ldyBDYWxlbmRhckFzdHJvbm9tZXIoLTEyMS41NSwgMzcuMjApOworICAgICAgICAvLyAgICAgICAgVGltZVpvbmUgdHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiQW1lcmljYS9Mb3NfQW5nZWxlcyIpOworCisgICAgICAgIGxvZ2xuKCJTdW5yaXNlL1N1bnNldCB0aW1lcyBmb3IgVG9yb250bywgQ2FuYWRhIik7CisgICAgICAgIENhbGVuZGFyQXN0cm9ub21lciBhc3RybyA9IG5ldyBDYWxlbmRhckFzdHJvbm9tZXIoLTc5LjM4LCA0My42NSk7CisgICAgICAgIFRpbWVab25lIHR6ID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIkFtZXJpY2EvRGV0cm9pdCIpOworCisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcih0eiwgTG9jYWxlLlVTKTsKKyAgICAgICAgY2FsLnNldChjYWwuWUVBUiwgMjAwMSk7CisgICAgICAgIGNhbC5zZXQoY2FsLk1PTlRILCBjYWwuQVBSSUwpOworICAgICAgICBjYWwuc2V0KGNhbC5EQVlfT0ZfTU9OVEgsIDEpOworCisgICAgICAgIERhdGVGb3JtYXQgZGYgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZShjYWwsIERhdGVGb3JtYXQuTUVESVVNLCBMb2NhbGUuVVMpOworICAgICAgICBEYXRlRm9ybWF0IGRheSA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5NRURJVU0sIExvY2FsZS5VUyk7CisJCQorCQkKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgMzA7IGkrKykgeworICAgICAgICAgICAgYXN0cm8uc2V0RGF0ZShjYWwuZ2V0VGltZSgpKTsKKwkJCQorICAgICAgICAgICAgRGF0ZSBzdW5yaXNlID0gbmV3IERhdGUoYXN0cm8uZ2V0U3VuUmlzZVNldCh0cnVlKSk7CisgICAgICAgICAgICBEYXRlIHN1bnNldCA9IG5ldyBEYXRlKGFzdHJvLmdldFN1blJpc2VTZXQoZmFsc2UpKTsKKworICAgICAgICAgICAgbG9nbG4oIkRhdGU6ICIgKyBkYXkuZm9ybWF0KGNhbC5nZXRUaW1lKCkpICsKKyAgICAgICAgICAgICAgICAgICIsIFN1bnJpc2U6ICIgKyBkZi5mb3JtYXQoc3VucmlzZSkgKworICAgICAgICAgICAgICAgICAgIiwgU3Vuc2V0OiAiICsgZGYuZm9ybWF0KHN1bnNldCkpOworCQkJCisgICAgICAgICAgICBjYWwuYWRkKENhbGVuZGFyLkRBVEUsIDEpOworICAgICAgICB9CQkKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ2FsZW5kYXJSZWdyZXNzaW9uLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ2FsZW5kYXJSZWdyZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWM3ZDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9DYWxlbmRhclJlZ3Jlc3Npb24uamF2YQpAQCAtMCwwICsxLDE4ODcgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ2FsZW5kYXJSZWdyZXNzaW9uLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMS8yMCAxOTo0ODoxMCAkCisgKiAkUmV2aXNpb246IDEuMTQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKKworLyoqCisgKiBAdGVzdCAxLjMyIDk5LzExLzE0CisgKiBAYnVnIDQwMzE1MDIgNDAzNTMwMSA0MDQwOTk2IDQwNTE3NjUgNDA1OTY1NCA0MDYxNDc2IDQwNzA1MDIgNDA3MTE5NyA0MDcxMzg1CisgKiA0MDczOTI5IDQwODMxNjcgNDA4NjcyNCA0MDkyMzYyIDQwOTU0MDcgNDA5NjIzMSA0MDk2NTM5IDQxMDAzMTEgNDEwMzI3MQorICogNDEwNjEzNiA0MTA4NzY0IDQxMTQ1NzggNDExODM4NCA0MTI1ODgxIDQxMjU4OTIgNDEzNjM5OSA0MTQxNjY1IDQxNDI5MzMKKyAqIDQxNDUxNTggNDE0NTk4MyA0MTQ3MjY5IDQxNDk2NzcgNDE2MjU4NyA0MTY1MzQzIDQxNjYxMDkgNDE2NzA2MCA0MTczNTE2CisgKiA0MTc0MzYxIDQxNzc0ODQgNDE5NzY5OSA0MjA5MDcxIDQyODg3OTIKKyAqLworcHVibGljIGNsYXNzIENhbGVuZGFyUmVncmVzc2lvbiBleHRlbmRzIGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgQ2FsZW5kYXJSZWdyZXNzaW9uKCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBGSUVMRF9OQU1FID0geworICAgICAgICAiRVJBIiwgIllFQVIiLCAiTU9OVEgiLCAiV0VFS19PRl9ZRUFSIiwgIldFRUtfT0ZfTU9OVEgiLAorICAgICAgICAiREFZX09GX01PTlRIIiwgIkRBWV9PRl9ZRUFSIiwgIkRBWV9PRl9XRUVLIiwKKyAgICAgICAgIkRBWV9PRl9XRUVLX0lOX01PTlRIIiwgIkFNX1BNIiwgIkhPVVIiLCAiSE9VUl9PRl9EQVkiLAorICAgICAgICAiTUlOVVRFIiwgIlNFQ09ORCIsICJNSUxMSVNFQ09ORCIsICJaT05FX09GRlNFVCIsCisgICAgICAgICJEU1RfT0ZGU0VUIiwgIllFQVJfV09ZIiwgIkRPV19MT0NBTCIsICJFWFRFTkRFRF9ZRUFSIiwKKyAgICAgICAgIkpVTElBTl9EQVkiLCAiTUlMTElTRUNPTkRTX0lOX0RBWSIsCisgICAgfTsKKworICAgIC8qCisgICAgICBTeW5vcHNpczogamF2YS5zcWwuVGltZXN0YW1wIGNvbnN0cnVjdG9yIHdvcmtzIHdyb25nIG9uIFdpbmRvd3MgOTUKKworICAgICAgPT09PSBIZXJlIGlzIHRoZSB0ZXN0ID09PT0gCisgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3NbXSkgeyAKKyAgICAgICAgamF2YS5zcWwuVGltZXN0YW1wIHQ9IG5ldyBqYXZhLnNxbC5UaW1lc3RhbXAoMCwxNSw1LDUsOCwxMywxMjM0NTY3MDApOyAKKyAgICAgICAgbG9nbG4oImV4cGVjdGVkPTE5MDEtMDQtMDUgMDU6MDg6MTMuMTIzNDU2NyIpOyAKKyAgICAgICAgbG9nbG4oIiByZXN1bHQ9Iit0KTsgCisgICAgICB9IAorICAgICAgCisgICAgICA9PT09IEhlcmUgaXMgdGhlIG91dHB1dCBvZiB0aGUgdGVzdCBvbiBTb2xhcmlzIG9yIE5UID09PT0gCisgICAgICBleHBlY3RlZD0xOTAxLTA0LTA1IDA1OjA4OjEzLjEyMzQ1NjcgCisgICAgICByZXN1bHQ9MTkwMS0wNC0wNSAwNTowODoxMy4xMjM0NTY3IAorICAgICAgCisgICAgICA9PT09IEhlcmUgaXMgdGhlIG91dHB1dCBvZiB0aGUgdGVzdCBvbiBXaW5kb3dzOTUgPT09PSAKKyAgICAgIGV4cGVjdGVkPTE5MDEtMDQtMDUgMDU6MDg6MTMuMTIzNDU2NyAKKyAgICAgIHJlc3VsdD0xOTAxLTA0LTA1IDA2OjA4OjEzLjEyMzQ1NjcgCisgICAgICAqLworCisgICAgcHVibGljIHZvaWQgVGVzdDQwMzE1MDIoKSB7CisgICAgICAgIC8vIFRoaXMgYnVnIGFjdHVhbGx5IG9jY3VycyBvbiBXaW5kb3dzIE5UIGFzIHdlbGwsIGFuZCBkb2Vzbid0CisgICAgICAgIC8vIHJlcXVpcmUgdGhlIGhvc3Qgem9uZSB0byBiZSBzZXQ7IGl0IGNhbiBiZSBzZXQgaW4gSmF2YS4KKyAgICAgICAgU3RyaW5nW10gaWRzID0gVGltZVpvbmUuZ2V0QXZhaWxhYmxlSURzKCk7CisgICAgICAgIGJvb2xlYW4gYmFkID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxpZHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFRpbWVab25lIHpvbmUgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZShpZHNbaV0pOworICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKHpvbmUpOworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KDE5MDAsIDE1LCA1LCA1LCA4LCAxMyk7CisgICAgICAgICAgICBpZiAoY2FsLmdldChDYWxlbmRhci5IT1VSKSAhPSA1KSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIkZhaWw6ICIgKyB6b25lLmdldElEKCkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgIHpvbmUudXNlRGF5bGlnaHRUaW1lKCkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuRFNUX09GRlNFVCkgLyAoNjAqNjAqMTAwMCkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgIHpvbmUuZ2V0UmF3T2Zmc2V0KCkgLyAoNjAqNjAqMTAwMCkgKworICAgICAgICAgICAgICAgICAgICAgICI6IEhPVVIgPSAiICsgY2FsLmdldChDYWxlbmRhci5IT1VSKSk7CisgICAgICAgICAgICAgICAgYmFkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZmFsc2UpIHsgLy8gQ2hhbmdlIHRvIHRydWUgdG8gZGVidWcKKyAgICAgICAgICAgICAgICBsb2dsbigiT0s6ICIgKyB6b25lLmdldElEKCkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgIHpvbmUudXNlRGF5bGlnaHRUaW1lKCkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuRFNUX09GRlNFVCkgLyAoNjAqNjAqMTAwMCkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgIHpvbmUuZ2V0UmF3T2Zmc2V0KCkgLyAoNjAqNjAqMTAwMCkgKworICAgICAgICAgICAgICAgICAgICAgICI6IEhPVVIgPSAiICsgY2FsLmdldChDYWxlbmRhci5IT1VSKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhZCkgZXJybG4oIlRpbWVab25lIHByb2JsZW1zIHdpdGggR0MiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDAzNTMwMSgpIHsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgYyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcig5OCwgOCwgNyk7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGQgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoOTgsIDgsIDcpOworICAgICAgICBpZiAoYy5hZnRlcihkKSB8fAorICAgICAgICAgICAgYy5hZnRlcihjKSB8fAorICAgICAgICAgICAgYy5iZWZvcmUoZCkgfHwKKyAgICAgICAgICAgIGMuYmVmb3JlKGMpIHx8CisgICAgICAgICAgICAhYy5lcXVhbHMoYykgfHwKKyAgICAgICAgICAgICFjLmVxdWFscyhkKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQwNDA5OTYoKSB7CisgICAgICAgIFN0cmluZ1tdIGlkcyA9IFRpbWVab25lLmdldEF2YWlsYWJsZUlEcygtOCAqIDYwICogNjAgKiAxMDAwKTsKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgcGR0ID0gbmV3IFNpbXBsZVRpbWVab25lKC04ICogNjAgKiA2MCAqIDEwMDAsIGlkc1swXSk7CisgICAgICAgIHBkdC5zZXRTdGFydFJ1bGUoQ2FsZW5kYXIuQVBSSUwsIDEsIENhbGVuZGFyLlNVTkRBWSwgMiAqIDYwICogNjAgKiAxMDAwKTsKKyAgICAgICAgcGR0LnNldEVuZFJ1bGUoQ2FsZW5kYXIuT0NUT0JFUiwgLTEsIENhbGVuZGFyLlNVTkRBWSwgMiAqIDYwICogNjAgKiAxMDAwKTsKKyAgICAgICAgQ2FsZW5kYXIgY2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIocGR0KTsKKworICAgICAgICBjYWxlbmRhci5zZXQoQ2FsZW5kYXIuTU9OVEgsMyk7CisgICAgICAgIGNhbGVuZGFyLnNldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsMTgpOworICAgICAgICBjYWxlbmRhci5zZXQoQ2FsZW5kYXIuU0VDT05ELCAzMCk7CisKKyAgICAgICAgbG9nbG4oIk1PTlRIOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSk7CisgICAgICAgIGxvZ2xuKCJEQVlfT0ZfTU9OVEg6ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgbG9nbG4oIk1JTlVURTogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5NSU5VVEUpKTsKKyAgICAgICAgbG9nbG4oIlNFQ09ORDogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5TRUNPTkQpKTsKKworICAgICAgICBjYWxlbmRhci5hZGQoQ2FsZW5kYXIuU0VDT05ELDYpOworICAgICAgICAvL1RoaXMgd2lsbCBwcmludCBvdXQgdG9kYXlzIGRhdGUgZm9yIE1PTlRIIGFuZCBEQVlfT0ZfTU9OVEgKKyAgICAgICAgLy9pbnN0ZWFkIG9mIHRoZSBkYXRlIGl0IHdhcyBzZXQgdG8uCisgICAgICAgIC8vVGhpcyBoYXBwZW5zIHdoZW4gYWRkaW5nIE1JTExJU0VDT05EIG9yIE1JTlVURSBhbHNvCisgICAgICAgIGxvZ2xuKCJNT05USDogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5NT05USCkpOworICAgICAgICBsb2dsbigiREFZX09GX01PTlRIOiAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgIGxvZ2xuKCJNSU5VVEU6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKSk7CisgICAgICAgIGxvZ2xuKCJTRUNPTkQ6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuU0VDT05EKSk7CisgICAgICAgIGlmIChjYWxlbmRhci5nZXQoQ2FsZW5kYXIuTU9OVEgpICE9IDMgfHwKKyAgICAgICAgICAgIGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpICE9IDE4IHx8CisgICAgICAgICAgICBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuU0VDT05EKSAhPSAzNikKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBDYWxlbmRhci5hZGQgbWlzYmVoYXZlcyIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDUxNzY1KCkgeworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwuc2V0TGVuaWVudChmYWxzZSk7CisgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIDApOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2FsLmdldFRpbWUoKTsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBEQVlfT0ZfV0VFSyAwIHNob3VsZCBiZSBkaXNhbGxvd2VkIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogVXNlciBlcnJvciAtIG5vIGJ1ZyBoZXJlCisgICAgcHVibGljIHZvaWQgVGVzdDQwNTk1MjQoKSB7CisgICAgICAgIC8vIENyZWF0ZSBjYWxlbmRhciBmb3IgQXByaWwgMTAsIDE5OTcKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsZW5kYXIgID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIC8vIHByaW50IG91dCBhIGJ1bmNoIG9mIGludGVyZXN0aW5nIHRoaW5ncworICAgICAgICBsb2dsbigiRVJBOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLkVSQSkpOworICAgICAgICBsb2dsbigiWUVBUjogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5ZRUFSKSk7CisgICAgICAgIGxvZ2xuKCJNT05USDogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5NT05USCkpOworICAgICAgICBsb2dsbigiV0VFS19PRl9ZRUFSOiAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhci5nZXQoY2FsZW5kYXIuV0VFS19PRl9ZRUFSKSk7CisgICAgICAgIGxvZ2xuKCJXRUVLX09GX01PTlRIOiAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhci5nZXQoY2FsZW5kYXIuV0VFS19PRl9NT05USCkpOworICAgICAgICBsb2dsbigiREFURTogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5EQVRFKSk7CisgICAgICAgIGxvZ2xuKCJEQVlfT0ZfTU9OVEg6ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyLmdldChjYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgbG9nbG4oIkRBWV9PRl9ZRUFSOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLkRBWV9PRl9ZRUFSKSk7CisgICAgICAgIGxvZ2xuKCJEQVlfT0ZfV0VFSzogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5EQVlfT0ZfV0VFSykpOworICAgICAgICBsb2dsbigiREFZX09GX1dFRUtfSU5fTU9OVEg6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLkRBWV9PRl9XRUVLX0lOX01PTlRIKSk7CisgICAgICAgIGxvZ2xuKCJBTV9QTTogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5BTV9QTSkpOworICAgICAgICBsb2dsbigiSE9VUjogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5IT1VSKSk7CisgICAgICAgIGxvZ2xuKCJIT1VSX09GX0RBWTogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5IT1VSX09GX0RBWSkpOworICAgICAgICBsb2dsbigiTUlOVVRFOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLk1JTlVURSkpOworICAgICAgICBsb2dsbigiU0VDT05EOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLlNFQ09ORCkpOworICAgICAgICBsb2dsbigiTUlMTElTRUNPTkQ6ICIgKyBjYWxlbmRhci5nZXQoY2FsZW5kYXIuTUlMTElTRUNPTkQpKTsKKyAgICAgICAgbG9nbG4oIlpPTkVfT0ZGU0VUOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjYWxlbmRhci5nZXQoY2FsZW5kYXIuWk9ORV9PRkZTRVQpLyg2MCo2MCoxMDAwKSkpOworICAgICAgICBsb2dsbigiRFNUX09GRlNFVDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLkRTVF9PRkZTRVQpLyg2MCo2MCoxMDAwKSkpOworICAgICAgICBjYWxlbmRhciAgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoMTk5NywzLDEwKTsgCisgICAgICAgIGNhbGVuZGFyLmdldFRpbWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgbG9nbG4oIkFwcmlsIDEwLCAxOTk3Iik7CisgICAgICAgIGxvZ2xuKCJFUkE6ICIgKyBjYWxlbmRhci5nZXQoY2FsZW5kYXIuRVJBKSk7CisgICAgICAgIGxvZ2xuKCJZRUFSOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLllFQVIpKTsKKyAgICAgICAgbG9nbG4oIk1PTlRIOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLk1PTlRIKSk7CisgICAgICAgIGxvZ2xuKCJXRUVLX09GX1lFQVI6ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyLmdldChjYWxlbmRhci5XRUVLX09GX1lFQVIpKTsKKyAgICAgICAgbG9nbG4oIldFRUtfT0ZfTU9OVEg6ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyLmdldChjYWxlbmRhci5XRUVLX09GX01PTlRIKSk7CisgICAgICAgIGxvZ2xuKCJEQVRFOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLkRBVEUpKTsKKyAgICAgICAgbG9nbG4oIkRBWV9PRl9NT05USDogIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLkRBWV9PRl9NT05USCkpOworICAgICAgICBsb2dsbigiREFZX09GX1lFQVI6ICIgKyBjYWxlbmRhci5nZXQoY2FsZW5kYXIuREFZX09GX1lFQVIpKTsKKyAgICAgICAgbG9nbG4oIkRBWV9PRl9XRUVLOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLkRBWV9PRl9XRUVLKSk7CisgICAgICAgIGxvZ2xuKCJEQVlfT0ZfV0VFS19JTl9NT05USDogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5EQVlfT0ZfV0VFS19JTl9NT05USCkpOworICAgICAgICBsb2dsbigiQU1fUE06ICIgKyBjYWxlbmRhci5nZXQoY2FsZW5kYXIuQU1fUE0pKTsKKyAgICAgICAgbG9nbG4oIkhPVVI6ICIgKyBjYWxlbmRhci5nZXQoY2FsZW5kYXIuSE9VUikpOworICAgICAgICBsb2dsbigiSE9VUl9PRl9EQVk6ICIgKyBjYWxlbmRhci5nZXQoY2FsZW5kYXIuSE9VUl9PRl9EQVkpKTsKKyAgICAgICAgbG9nbG4oIk1JTlVURTogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5NSU5VVEUpKTsKKyAgICAgICAgbG9nbG4oIlNFQ09ORDogIiArIGNhbGVuZGFyLmdldChjYWxlbmRhci5TRUNPTkQpKTsKKyAgICAgICAgbG9nbG4oIk1JTExJU0VDT05EOiAiICsgY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLk1JTExJU0VDT05EKSk7CisgICAgICAgIGxvZ2xuKCJaT05FX09GRlNFVDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoY2FsZW5kYXIuZ2V0KGNhbGVuZGFyLlpPTkVfT0ZGU0VUKS8oNjAqNjAqMTAwMCkpKTsgLy8gaW4gaG91cnMKKyAgICAgICAgbG9nbG4oIkRTVF9PRkZTRVQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGNhbGVuZGFyLmdldChjYWxlbmRhci5EU1RfT0ZGU0VUKS8oNjAqNjAqMTAwMCkpKTsgLy8gaW4gaG91cnMKKyAgICB9CisgICAgKi8KKworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDU5NjU0KCkgeworCS8vIHdvcmsgYXJvdW5kIGJ1ZyBmb3IgamRrMS40IG9uIHNvbGFyaXMgMi42LCB3aGljaCB1c2VzIGZ1bmt5IHRpbWV6b25lIG5hbWVzCisJLy8gamRrMS40LjEgd2lsbCBkcm9wIHN1cHBvcnQgZm9yIDIuNiBzbyB3ZSBzaG91bGQgYmUgb2sgd2hlbiBpdCBjb21lcyBvdXQKKwlqYXZhLnV0aWwuVGltZVpvbmUgamF2YXpvbmUgPSBqYXZhLnV0aWwuVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpOworCVRpbWVab25lIGljdXpvbmUgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIik7CisKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoaWN1em9uZSk7CisgICAgICAgIAorICAgICAgICBnYy5zZXQoMTk5NywgMywgMSwgMTUsIDE2LCAxNyk7IC8vIEFwcmlsIDEsIDE5OTcKKworICAgICAgICBnYy5zZXQoQ2FsZW5kYXIuSE9VUiwgMCk7CisgICAgICAgIGdjLnNldChDYWxlbmRhci5BTV9QTSwgQ2FsZW5kYXIuQU0pOworICAgICAgICBnYy5zZXQoQ2FsZW5kYXIuTUlOVVRFLCAwKTsKKyAgICAgICAgZ2Muc2V0KENhbGVuZGFyLlNFQ09ORCwgMCk7CisgICAgICAgIGdjLnNldChDYWxlbmRhci5NSUxMSVNFQ09ORCwgMCk7CisKKyAgICAgICAgRGF0ZSBjZCA9IGdjLmdldFRpbWUoKTsKKyAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZShqYXZhem9uZSk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDE5OTcsIDMsIDEsIDAsIDAsIDApOworICAgICAgICBEYXRlIGV4cCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGlmICghY2QuZXF1YWxzKGV4cCkpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogQ2FsZW5kYXIuc2V0IGJyb2tlbi4gR290ICIgKyBjZCArICIgV2FudCAiICsgZXhwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA2MTQ3NigpIHsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmbXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiZGRNTU15eSIsIExvY2FsZS5VSyk7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IEdyZWdvcmlhbkNhbGVuZGFyLmdldEluc3RhbmNlKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsZS5VSyk7CisgICAgICAgIGZtdC5zZXRDYWxlbmRhcihjYWwpOworICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEYXRlIGRhdGUgPSBmbXQucGFyc2UoIjI5TUFZOTciKTsKKyAgICAgICAgICAgICAgICBjYWwuc2V0VGltZShkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgfQorICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZLCAxMyk7CisgICAgICAgIGxvZ2xuKCJIb3VyOiAiK2NhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpKTsKKyAgICAgICAgY2FsLmFkZChDYWxlbmRhci5IT1VSX09GX0RBWSwgNik7CisgICAgICAgIGxvZ2xuKCJIb3VyOiAiK2NhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpKTsKKyAgICAgICAgaWYgKGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpICE9IDE5KQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IFdhbnQgMTkgR290ICIgKyBjYWwuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQwNzA1MDIoKSB7CisgICAgICAgIGphdmEudXRpbC5DYWxlbmRhciB0ZW1wY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIHRlbXBjYWwuY2xlYXIoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5OCwgMCwgMzApOworICAgICAgICBEYXRlIGQgPSBnZXRBc3NvY2lhdGVkRGF0ZSh0ZW1wY2FsLmdldFRpbWUoKSk7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBjYWwuc2V0VGltZShkKTsKKyAgICAgICAgaWYgKGNhbC5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspID09IENhbGVuZGFyLlNBVFVSREFZIHx8CisgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKSA9PSBDYWxlbmRhci5TVU5EQVkpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogV2FudCB3ZWVrZGF5IEdvdCAiICsgZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBhc3NvY2lhdGVkIGRhdGUgc3RhcnRpbmcgZnJvbSBhIHNwZWNpZmllZCBkYXRlCisgICAgICogTk9URTogdGhlIHVubmVjZXNzYXJ5ICJnZXRUaW1lKCkncyIgYmVsb3cgYXJlIGEgd29yay1hcm91bmQgZm9yIGEKKyAgICAgKiBidWcgaW4gamRrIDEuMS4zIChhbmQgcHJvYmFibHkgZWFybGllciB2ZXJzaW9ucyBhbHNvKQorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIHN0YXJ0IGZyb20KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIERhdGUgZ2V0QXNzb2NpYXRlZERhdGUoRGF0ZSBkKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBjYWwuc2V0VGltZShkKTsKKyAgICAgICAgLy9jYWwuYWRkKGZpZWxkLCBhbW91bnQpOyAvLzwtLSBQUk9CTEVNIFNFRU4gV0lUSCBmaWVsZCA9IERBVEUsTU9OVEggCisgICAgICAgIC8vIGNhbC5nZXRUaW1lKCk7ICAvLyA8LS0tIFJFTU9WRSBUSElTIFRPIFNFRSBCVUcKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGludCB3ZCA9IGNhbC5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOworICAgICAgICAgICAgaWYgKHdkID09IENhbGVuZGFyLlNBVFVSREFZIHx8IHdkID09IENhbGVuZGFyLlNVTkRBWSkgeworICAgICAgICAgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgMSk7CisgICAgICAgICAgICAgICAgLy8gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2FsLmdldFRpbWUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA3MTE5NygpIHsKKyAgICAgICAgZG93VGVzdChmYWxzZSk7CisgICAgICAgIGRvd1Rlc3QodHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBkb3dUZXN0KGJvb2xlYW4gbGVuaWVudCkgeworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgY2FsLnNldCgxOTk3LCBDYWxlbmRhci5BVUdVU1QsIDEyKTsgLy8gV2VkbmVzZGF5CisgICAgICAgIC8vIGNhbC5nZXRUaW1lKCk7IC8vIEZvcmNlIHVwZGF0ZQorICAgICAgICBjYWwuc2V0TGVuaWVudChsZW5pZW50KTsKKyAgICAgICAgY2FsLnNldCgxOTk2LCBDYWxlbmRhci5ERUNFTUJFUiwgMSk7IC8vIFNldCB0aGUgZGF0ZSB0byBiZSBEZWNlbWJlciAxLCAxOTk2CisgICAgICAgIGludCBkb3cgPSBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgaW50IG1pbiA9IGNhbC5nZXRNaW5pbXVtKENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgaW50IG1heCA9IGNhbC5nZXRNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgbG9nbG4oY2FsLmdldFRpbWUoKS50b1N0cmluZygpKTsKKyAgICAgICAgaWYgKG1pbiAhPSBDYWxlbmRhci5TVU5EQVkgfHwgbWF4ICE9IENhbGVuZGFyLlNBVFVSREFZKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IE1pbi9tYXggYmFkIik7CisgICAgICAgIGlmIChkb3cgPCBtaW4gfHwgZG93ID4gbWF4KSAKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBEYXkgb2Ygd2VlayAiICsgZG93ICsgIiBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgaWYgKGRvdyAhPSBDYWxlbmRhci5TVU5EQVkpIAorICAgICAgICAgICAgZXJybG4oIkZBSUw6IERheSBvZiB3ZWVrIHNob3VsZCBiZSBTVU5EQVkgR290ICIgKyBkb3cpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDcxMzg1KCkgeworCS8vIHdvcmsgYXJvdW5kIGJ1ZyBmb3IgamRrMS40IG9uIHNvbGFyaXMgMi42LCB3aGljaCB1c2VzIGZ1bmt5IHRpbWV6b25lIG5hbWVzCisJLy8gamRrMS40LjEgd2lsbCBkcm9wIHN1cHBvcnQgZm9yIDIuNiBzbyB3ZSBzaG91bGQgYmUgb2sgd2hlbiBpdCBjb21lcyBvdXQKKwlqYXZhLnV0aWwuVGltZVpvbmUgamF2YXpvbmUgPSBqYXZhLnV0aWwuVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpOworCVRpbWVab25lIGljdXpvbmUgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIik7CisKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoaWN1em9uZSk7CisgICAgICAgIGphdmEudXRpbC5DYWxlbmRhciB0ZW1wY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKGphdmF6b25lKTsKKyAgICAgICAgdGVtcGNhbC5jbGVhcigpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk4LCBDYWxlbmRhci5KVU5FLCAyNCk7CisgICAgICAgIGNhbC5zZXRUaW1lKHRlbXBjYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgY2FsLnNldChDYWxlbmRhci5NT05USCwgQ2FsZW5kYXIuTk9WRU1CRVIpOyAvLyBjaGFuZ2UgYSBmaWVsZAorICAgICAgICBsb2dsbihjYWwuZ2V0VGltZSgpLnRvU3RyaW5nKCkpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk4LCBDYWxlbmRhci5OT1ZFTUJFUiwgMjQpOworICAgICAgICBpZiAoIWNhbC5nZXRUaW1lKCkuZXF1YWxzKHRlbXBjYWwuZ2V0VGltZSgpKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQwNzM5MjkoKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGZvbzEgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoMTk5NywgOCwgMjcpOworICAgICAgICBmb28xLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsICsxKTsKKyAgICAgICAgaW50IHRlc3R5ZWFyID0gZm9vMS5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgIGludCB0ZXN0bW9udGggPSBmb28xLmdldChDYWxlbmRhci5NT05USCk7CisgICAgICAgIGludCB0ZXN0ZGF5ID0gZm9vMS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKyAgICAgICAgaWYgKHRlc3R5ZWFyICE9IDE5OTcgfHwKKyAgICAgICAgICAgIHRlc3Rtb250aCAhPSA4IHx8CisgICAgICAgICAgICB0ZXN0ZGF5ICE9IDI4KQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IENhbGVuZGFyIG5vdCBpbml0aWFsaXplZCIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDgzMTY3KCkgeworICAgICAgICBUaW1lWm9uZSBzYXZlWm9uZSA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQoVGltZVpvbmUuZ2V0VGltZVpvbmUoIlVUQyIpKTsKKyAgICAgICAgICAgIERhdGUgZmlyc3REYXRlID0gbmV3IERhdGUoKTsKKyAgICAgICAgICAgIENhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICAgICAgY2FsLnNldFRpbWUoZmlyc3REYXRlKTsKKyAgICAgICAgICAgIGxvbmcgZmlyc3RNaWxsaXNJbkRheSA9IGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpICogMzYwMDAwMEwgKworICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuTUlOVVRFKSAqIDYwMDAwTCArCisgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5TRUNPTkQpICogMTAwMEwgKworICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2dsbigiQ3VycmVudCB0aW1lOiAiICsgZmlyc3REYXRlLnRvU3RyaW5nKCkpOworCisgICAgICAgICAgICBmb3IgKGludCB2YWxpZGl0eT0wOyB2YWxpZGl0eTwzMDsgdmFsaWRpdHkrKykgeworICAgICAgICAgICAgICAgIERhdGUgbGFzdERhdGUgPSBuZXcgRGF0ZShmaXJzdERhdGUuZ2V0VGltZSgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpdmFsaWRpdHkqMTAwMCoyNCo2MCo2MCk7CisgICAgICAgICAgICAgICAgY2FsLnNldFRpbWUobGFzdERhdGUpOworICAgICAgICAgICAgICAgIGxvbmcgbWlsbGlzSW5EYXkgPSBjYWwuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSAqIDM2MDAwMDBMICsKKyAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5NSU5VVEUpICogNjAwMDBMICsKKyAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5TRUNPTkQpICogMTAwMEwgKworICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLk1JTExJU0VDT05EKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RNaWxsaXNJbkRheSAhPSBtaWxsaXNJbkRheSkgCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJEYXkgaGFzIHNoaWZ0ZWQgIiArIGxhc3REYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQoc2F2ZVpvbmUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQwODY3MjQoKSB7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZGF0ZTsKKyAgICAgICAgVGltZVpvbmUgc2F2ZVpvbmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIExvY2FsZSBzYXZlTG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KExvY2FsZS5VSyk7IAorICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpOworICAgICAgICAgICAgZGF0ZT1uZXcgU2ltcGxlRGF0ZUZvcm1hdCgiZGQgTU1NIHl5eSAoenp6eikgJ2lzIGluIHdlZWsnIHd3Iik7IAorICAgICAgICAgICAgQ2FsZW5kYXIgY2FsPUNhbGVuZGFyLmdldEluc3RhbmNlKCk7IAorICAgICAgICAgICAgY2FsLnNldCgxOTk3LENhbGVuZGFyLlNFUFRFTUJFUiwzMCk7IAorICAgICAgICAgICAgRGF0ZSBub3c9Y2FsLmdldFRpbWUoKTsgCisgICAgICAgICAgICBsb2dsbihkYXRlLmZvcm1hdChub3cpKTsgCisgICAgICAgICAgICBjYWwuc2V0KDE5OTcsQ2FsZW5kYXIuSkFOVUFSWSwxKTsgCisgICAgICAgICAgICBub3c9Y2FsLmdldFRpbWUoKTsgCisgICAgICAgICAgICBsb2dsbihkYXRlLmZvcm1hdChub3cpKTsgCisgICAgICAgICAgICBjYWwuc2V0KDE5OTcsQ2FsZW5kYXIuSkFOVUFSWSw4KTsgCisgICAgICAgICAgICBub3c9Y2FsLmdldFRpbWUoKTsgCisgICAgICAgICAgICBsb2dsbihkYXRlLmZvcm1hdChub3cpKTsgCisgICAgICAgICAgICBjYWwuc2V0KDE5OTYsQ2FsZW5kYXIuREVDRU1CRVIsMzEpOyAKKyAgICAgICAgICAgIG5vdz1jYWwuZ2V0VGltZSgpOyAKKyAgICAgICAgICAgIGxvZ2xuKGRhdGUuZm9ybWF0KG5vdykpOyAKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KHNhdmVMb2NhbGUpOworICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChzYXZlWm9uZSk7CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4oIioqKiBUSEUgUkVTVUxUUyBPRiBUSElTIFRFU1QgTVVTVCBCRSBWRVJJRklFRCBNQU5VQUxMWSAqKioiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA5MjM2MigpIHsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsMSA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxOTk3LCAxMCwgMTEsIDEwLCAyMCwgNDApOyAKKyAgICAgICAgLypjYWwxLnNldCggQ2FsZW5kYXIuWUVBUiwgMTk5NyApOyAKKyAgICAgICAgY2FsMS5zZXQoIENhbGVuZGFyLk1PTlRILCAxMCApOyAKKyAgICAgICAgY2FsMS5zZXQoIENhbGVuZGFyLkRBVEUsIDExICk7IAorICAgICAgICBjYWwxLnNldCggQ2FsZW5kYXIuSE9VUiwgMTAgKTsgCisgICAgICAgIGNhbDEuc2V0KCBDYWxlbmRhci5NSU5VVEUsIDIwICk7IAorICAgICAgICBjYWwxLnNldCggQ2FsZW5kYXIuU0VDT05ELCA0MCApOyAqLworCisgICAgICAgIGxvZ2xuKCAiIENhbDEgPSAiICsgY2FsMS5nZXRUaW1lKCkuZ2V0VGltZSgpICk7IAorICAgICAgICBsb2dsbiggIiBDYWwxIHRpbWUgaW4gbXMgPSAiICsgY2FsMS5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpICk7IAorICAgICAgICBmb3IoIGludCBrID0gMDsgayA8IDEwMCA7IGsrKyApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOyAKKyAgICAgICAgfQorCisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbDIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoMTk5NywgMTAsIDExLCAxMCwgMjAsIDQwKTsgCisgICAgICAgIC8qY2FsMi5zZXQoIENhbGVuZGFyLllFQVIsIDE5OTcgKTsgCisgICAgICAgIGNhbDIuc2V0KCBDYWxlbmRhci5NT05USCwgMTAgKTsgCisgICAgICAgIGNhbDIuc2V0KCBDYWxlbmRhci5EQVRFLCAxMSApOyAKKyAgICAgICAgY2FsMi5zZXQoIENhbGVuZGFyLkhPVVIsIDEwICk7IAorICAgICAgICBjYWwyLnNldCggQ2FsZW5kYXIuTUlOVVRFLCAyMCApOyAKKyAgICAgICAgY2FsMi5zZXQoIENhbGVuZGFyLlNFQ09ORCwgNDAgKTsgKi8KKworICAgICAgICBsb2dsbiggIiBDYWwyID0gIiArIGNhbDIuZ2V0VGltZSgpLmdldFRpbWUoKSApOyAKKyAgICAgICAgbG9nbG4oICIgQ2FsMiB0aW1lIGluIG1zID0gIiArIGNhbDIuZ2V0KENhbGVuZGFyLk1JTExJU0VDT05EKSApOyAKKyAgICAgICAgaWYoICFjYWwxLmVxdWFscyggY2FsMiApICkgCisgICAgICAgICAgICBlcnJsbigiRmFpbDogTWlsbGlzZWNvbmRzIHJhbmRvbWl6ZWQiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA5NTQwNygpIHsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgYSA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxOTk3LENhbGVuZGFyLk5PVkVNQkVSLCAxMyk7CisgICAgICAgIGludCBkb3cgPSBhLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSyk7CisgICAgICAgIGlmIChkb3cgIT0gQ2FsZW5kYXIuVEhVUlNEQVkpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogV2FudCBUSFVSU0RBWSBHb3QgIiArIGRvdyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTYyMzEoKSB7CisgICAgICAgIFRpbWVab25lIEdNVCA9IFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKTsKKyAgICAgICAgVGltZVpvbmUgUFNUID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpOworICAgICAgICBpbnQgc2VjID0gMCwgbWluID0gMCwgaHIgPSAwLCBkYXkgPSAxLCBtb250aCA9IDEwLCB5ZWFyID0gMTk5NzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgQ2FsZW5kYXIgY2FsMSA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihQU1QpOworICAgICAgICBjYWwxLnNldFRpbWUobmV3IERhdGUoODgwNjk4NjM5MDAwTCkpOworICAgICAgICBpbnQgcDsKKyAgICAgICAgbG9nbG4oIlBTVCAxIGlzOiAiICsgKHA9Y2FsMS5nZXQoY2FsMS5IT1VSX09GX0RBWSkpKTsKKyAgICAgICAgY2FsMS5zZXRUaW1lWm9uZShHTVQpOworICAgICAgICAvLyBJc3N1ZSAxOiBDaGFuZ2luZyB0aGUgdGltZXpvbmUgZG9lc24ndCBjaGFuZ2UgdGhlCisgICAgICAgIC8vICAgICAgICAgIHJlcHJlc2VudGVkIHRpbWUuCisgICAgICAgIGludCBoMSxoMjsKKyAgICAgICAgbG9nbG4oIkdNVCAxIGlzOiAiICsgKGgxPWNhbDEuZ2V0KGNhbDEuSE9VUl9PRl9EQVkpKSk7CisgICAgICAgIGNhbDEuc2V0VGltZShuZXcgRGF0ZSg4ODA2OTg2MzkwMDBMKSk7CisgICAgICAgIGxvZ2xuKCJHTVQgMiBpczogIiArIChoMj1jYWwxLmdldChjYWwxLkhPVVJfT0ZfREFZKSkpOworICAgICAgICAvLyBOb3RlOiBUaGlzIHRlc3QgaGFkIGEgYnVnIGluIGl0LiAgSXQgd2FudGVkIGgxIT1oMiwgd2hlbgorICAgICAgICAvLyB3aGF0IHdhcyBtZWFudCB3YXMgaDEhPXAuICBGaXhlZCB0aGlzIGNvbmN1cnJlbnQgd2l0aCBmaXgKKyAgICAgICAgLy8gdG8gNDE3NzQ4NC4KKyAgICAgICAgaWYgKHAgPT0gaDEgfHwgaDEgIT0gaDIpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogSG91ciBzYW1lIGluIGRpZmZlcmVudCB6b25lcyIpOworCisgICAgICAgIENhbGVuZGFyIGNhbDIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoR01UKTsKKyAgICAgICAgQ2FsZW5kYXIgY2FsMyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihQU1QpOworICAgICAgICBjYWwyLnNldChDYWxlbmRhci5NSUxMSVNFQ09ORCwgMCk7CisgICAgICAgIGNhbDMuc2V0KENhbGVuZGFyLk1JTExJU0VDT05ELCAwKTsKKworICAgICAgICBjYWwyLnNldChjYWwxLmdldChjYWwxLllFQVIpLAorICAgICAgICAgICAgICAgICBjYWwxLmdldChjYWwxLk1PTlRIKSwKKyAgICAgICAgICAgICAgICAgY2FsMS5nZXQoY2FsMS5EQVlfT0ZfTU9OVEgpLAorICAgICAgICAgICAgICAgICBjYWwxLmdldChjYWwxLkhPVVJfT0ZfREFZKSwKKyAgICAgICAgICAgICAgICAgY2FsMS5nZXQoY2FsMS5NSU5VVEUpLAorICAgICAgICAgICAgICAgICBjYWwxLmdldChjYWwxLlNFQ09ORCkpOworCisgICAgICAgIGxvbmcgdDEsdDIsdDMsdDQ7CisgICAgICAgIGxvZ2xuKCJSR01UIDEgaXM6ICIgKyAodDE9Y2FsMi5nZXRUaW1lKCkuZ2V0VGltZSgpKSk7CisgICAgICAgIGNhbDMuc2V0KHllYXIsIG1vbnRoLCBkYXksIGhyLCBtaW4sIHNlYyk7CisgICAgICAgIGxvZ2xuKCJSUFNUIDEgaXM6ICIgKyAodDI9Y2FsMy5nZXRUaW1lKCkuZ2V0VGltZSgpKSk7CisgICAgICAgIGNhbDMuc2V0VGltZVpvbmUoR01UKTsKKyAgICAgICAgbG9nbG4oIlJHTVQgMiBpczogIiArICh0Mz1jYWwzLmdldFRpbWUoKS5nZXRUaW1lKCkpKTsKKyAgICAgICAgY2FsMy5zZXQoY2FsMS5nZXQoY2FsMS5ZRUFSKSwKKyAgICAgICAgICAgICAgICAgY2FsMS5nZXQoY2FsMS5NT05USCksCisgICAgICAgICAgICAgICAgIGNhbDEuZ2V0KGNhbDEuREFZX09GX01PTlRIKSwKKyAgICAgICAgICAgICAgICAgY2FsMS5nZXQoY2FsMS5IT1VSX09GX0RBWSksCisgICAgICAgICAgICAgICAgIGNhbDEuZ2V0KGNhbDEuTUlOVVRFKSwKKyAgICAgICAgICAgICAgICAgY2FsMS5nZXQoY2FsMS5TRUNPTkQpKTsKKyAgICAgICAgLy8gSXNzdWUgMjogQ2FsZW5kYXIgY29udGludWVzIHRvIHVzZSB0aGUgdGltZXpvbmUgaW4gaXRzCisgICAgICAgIC8vICAgICAgICAgIGNvbnN0cnVjdG9yIGZvciBzZXQoKSBjb252ZXJzaW9ucywgcmVnYXJkbGVzcworICAgICAgICAvLyAgICAgICAgICBvZiBjYWxscyB0byBzZXRUaW1lWm9uZSgpCisgICAgICAgIGxvZ2xuKCJSR01UIDMgaXM6ICIgKyAodDQ9Y2FsMy5nZXRUaW1lKCkuZ2V0VGltZSgpKSk7CisgICAgICAgIGlmICh0MSA9PSB0MiB8fAorICAgICAgICAgICAgdDEgIT0gdDQgfHwKKyAgICAgICAgICAgIHQyICE9IHQzKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IENhbGVuZGFyIHpvbmUgYmVoYXZpb3IgZmF1bHR5Iik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTY1MzkoKSB7CisgICAgICAgIGludFtdIHkgPSB7MzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzF9OworCisgICAgICAgIGZvciAoaW50IHg9MDt4PDEyO3grKykgeworICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBuZXcgCisgICAgICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIoMTk5Nyx4LHlbeF0pOworICAgICAgICAgICAgaW50IG0xLG0yOworICAgICAgICAgICAgbG9nKChtMT1nYy5nZXQoQ2FsZW5kYXIuTU9OVEgpKzEpKyIvIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2MuZ2V0KENhbGVuZGFyLkRBVEUpKyIvIitnYy5nZXQoQ2FsZW5kYXIuWUVBUikrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKyAxbW8gPSAiKTsKKworICAgICAgICAgICAgZ2MuYWRkKENhbGVuZGFyLk1PTlRILCAxKTsKKyAgICAgICAgICAgIGxvZ2xuKChtMj1nYy5nZXQoQ2FsZW5kYXIuTU9OVEgpKzEpKyIvIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYy5nZXQoQ2FsZW5kYXIuREFURSkrIi8iK2djLmdldChDYWxlbmRhci5ZRUFSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBpbnQgbSA9IChtMSAlIDEyKSArIDE7CisgICAgICAgICAgICBpZiAobTIgIT0gbSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogV2FudCAiICsgbSArICIgR290ICIgKyBtMik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQxMDAzMTEoKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IChHcmVnb3JpYW5DYWxlbmRhcilDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwuc2V0KENhbGVuZGFyLllFQVIsIDE5OTcpOworICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSLCAxKTsKKyAgICAgICAgRGF0ZSBkID0gY2FsLmdldFRpbWUoKTsgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIEphbiAxCisgICAgICAgIGxvZ2xuKGQudG9TdHJpbmcoKSk7CisgICAgICAgIGlmIChjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSAhPSAxKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IERBWV9PRl9ZRUFSIG5vdCBzZXQiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwMzI3MSgpIHsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgpOyAKKyAgICAgICAgaW50IG51bVllYXJzPTQwLCBzdGFydFllYXI9MTk5NywgbnVtRGF5cz0xNTsgCisgICAgICAgIFN0cmluZyBvdXRwdXQsIHRlc3REZXNjOyAKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgdGVzdENhbCA9IChHcmVnb3JpYW5DYWxlbmRhcilDYWxlbmRhci5nZXRJbnN0YW5jZSgpOyAKKyAgICAgICAgdGVzdENhbC5jbGVhcigpOworICAgICAgICBzZGYuc2V0Q2FsZW5kYXIodGVzdENhbCk7IAorICAgICAgICBzZGYuYXBwbHlQYXR0ZXJuKCJkIE1NTSB5eXl5Iik7IAorICAgICAgICBib29sZWFuIGZhaWwgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgZmlyc3REYXk9MTsgZmlyc3REYXk8PTI7IGZpcnN0RGF5KyspIHsgCisgICAgICAgICAgICBmb3IgKGludCBtaW5EYXlzPTE7IG1pbkRheXM8PTc7IG1pbkRheXMrKykgeyAKKyAgICAgICAgICAgICAgICB0ZXN0Q2FsLnNldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsobWluRGF5cyk7IAorICAgICAgICAgICAgICAgIHRlc3RDYWwuc2V0Rmlyc3REYXlPZldlZWsoZmlyc3REYXkpOyAKKyAgICAgICAgICAgICAgICB0ZXN0RGVzYyA9ICgiVGVzdCIgKyBTdHJpbmcudmFsdWVPZihmaXJzdERheSkgKyBTdHJpbmcudmFsdWVPZihtaW5EYXlzKSk7IAorICAgICAgICAgICAgICAgIGxvZ2xuKHRlc3REZXNjICsgIiA9PiAxc3QgZGF5IG9mIHdlZWs9IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKGZpcnN0RGF5KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIG1pbmltdW0gZGF5cyBpbiBmaXJzdCB3ZWVrPSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihtaW5EYXlzKSk7IAorICAgICAgICAgICAgICAgIGZvciAoaW50IGo9c3RhcnRZZWFyOyBqPD1zdGFydFllYXIrbnVtWWVhcnM7IGorKykgeyAKKyAgICAgICAgICAgICAgICAgICAgdGVzdENhbC5zZXQoaiwxMSwyNSk7IAorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTxudW1EYXlzOyBpKyspIHsgCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q2FsLmFkZChDYWxlbmRhci5EQVRFLDEpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjYWxXT1k7IAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjdFdPWSA9IHRlc3RDYWwuZ2V0KENhbGVuZGFyLldFRUtfT0ZfWUVBUik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0V09ZIDwgMSB8fCBhY3RXT1kgPiA1MykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGUgZCA9IHRlc3RDYWwuZ2V0VGltZSgpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxXT1kgPSBTdHJpbmcudmFsdWVPZihhY3RXT1kpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSB0ZXN0RGVzYyArICIgLSAiICsgc2RmLmZvcm1hdChkKSArICJcdCI7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArICJcdCIgKyBjYWxXT1k7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKG91dHB1dCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9IAorICAgICAgICB9IAorCisgICAgICAgIGludFtdIERBVEEgPSB7CisgICAgICAgICAgICAzLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgICAgICAgICAgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLAorICAgICAgICAgICAgICAgIDIsICAyLCAgMiwgIDIsICAyLCAgMiwgIDIsCisgICAgICAgICAgICA0LCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwKKyAgICAgICAgICAgICAgIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLAorICAgICAgICAgICAgICAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsCisgICAgICAgIH07CisgICAgICAgIHRlc3RDYWwuc2V0Rmlyc3REYXlPZldlZWsoQ2FsZW5kYXIuU1VOREFZKTsKKyAgICAgICAgZm9yIChpbnQgaj0wOyBqPERBVEEubGVuZ3RoOyBqKz0yMikgeworICAgICAgICAgICAgbG9nbG4oIk1pbmltYWwgZGF5cyBpbiBmaXJzdCB3ZWVrID0gIiArIERBVEFbal0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIFdlZWsgc3RhcnRzIG9uIFN1bmRheSIpOworICAgICAgICAgICAgdGVzdENhbC5zZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKERBVEFbal0pOworICAgICAgICAgICAgdGVzdENhbC5zZXQoMTk5NywgQ2FsZW5kYXIuREVDRU1CRVIsIDIxKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTwyMTsgKytpKSB7CisgICAgICAgICAgICAgICAgaW50IHdveSA9IHRlc3RDYWwuZ2V0KENhbGVuZGFyLldFRUtfT0ZfWUVBUik7CisgICAgICAgICAgICAgICAgbG9nKHRlc3RDYWwuZ2V0VGltZSgpICsgIiAiICsgd295KTsKKyAgICAgICAgICAgICAgICBpZiAod295ICE9IERBVEFbaiArIDEgKyBpXSkgeworICAgICAgICAgICAgICAgICAgICBsb2coIiBFUlJPUiIpOworICAgICAgICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy9sb2dsbigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE5vdyBjb21wdXRlIHRoZSB0aW1lIGZyb20gdGhlIGZpZWxkcywgYW5kIG1ha2Ugc3VyZSB3ZQorICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgc2FtZSBhbnN3ZXIgYmFjay4gIFRoaXMgaXMgYSByb3VuZC10cmlwIHRlc3QuCisgICAgICAgICAgICAgICAgRGF0ZSBzYXZlID0gdGVzdENhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICAgICAgdGVzdENhbC5jbGVhcigpOworICAgICAgICAgICAgICAgIHRlc3RDYWwuc2V0KENhbGVuZGFyLllFQVIsIERBVEFbaisxK2ldIDwgMjUgPyAxOTk4IDogMTk5Nyk7CisgICAgICAgICAgICAgICAgdGVzdENhbC5zZXQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSLCBEQVRBW2orMStpXSk7CisgICAgICAgICAgICAgICAgdGVzdENhbC5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIChpJTcpICsgQ2FsZW5kYXIuU1VOREFZKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRlc3RDYWwuZ2V0VGltZSgpLmVxdWFscyhzYXZlKSkgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiICBQYXJzZSBmYWlsZWQ6ICIgKyB0ZXN0Q2FsLmdldFRpbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhaWw9IHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVzdENhbC5zZXRUaW1lKHNhdmUpOworICAgICAgICAgICAgICAgIHRlc3RDYWwuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBEYXRlIGRbXSA9IG5ldyBEYXRlWzhdOworICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLkRFQ0VNQkVSLCAyOCk7CisgICAgICAgIGRbMF0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5OCwgQ2FsZW5kYXIuSkFOVUFSWSwgMTApOworICAgICAgICBkWzFdID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTgsIENhbGVuZGFyLkRFQ0VNQkVSLCAzMSk7CisgICAgICAgIGRbMl0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5OSwgQ2FsZW5kYXIuSkFOVUFSWSwgMSk7CisgICAgICAgIGRbM10gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgLy8gVGVzdCBmaWVsZCBkaXNhbWJpZ3VhdGlvbiB3aXRoIGEgZmV3IHNwZWNpYWwgaGFyZC1jb2RlZCBjYXNlcy4KKyAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgZmFpbCBpZiB0aGUgYWJvdmUgY2FzZXMgYXJlbid0IGZhaWxpbmcuCisgICAgICAgIE9iamVjdFtdIERJU0FNID0geworICAgICAgICAgICAgbmV3IEludGVnZXIoMTk5OCksIG5ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcihDYWxlbmRhci5TVU5EQVkpLAorICAgICAgICAgICAgICAgIGRbMF0sCisgICAgICAgICAgICBuZXcgSW50ZWdlcigxOTk4KSwgbmV3IEludGVnZXIoMiksIG5ldyBJbnRlZ2VyKENhbGVuZGFyLlNBVFVSREFZKSwKKyAgICAgICAgICAgICAgICBkWzFdLAorICAgICAgICAgICAgbmV3IEludGVnZXIoMTk5OCksIG5ldyBJbnRlZ2VyKDUzKSwgbmV3IEludGVnZXIoQ2FsZW5kYXIuVEhVUlNEQVkpLAorICAgICAgICAgICAgICAgIGRbMl0sCisgICAgICAgICAgICBuZXcgSW50ZWdlcigxOTk4KSwgbmV3IEludGVnZXIoNTMpLCBuZXcgSW50ZWdlcihDYWxlbmRhci5GUklEQVkpLAorICAgICAgICAgICAgICAgIGRbM10sCisgICAgICAgIH07CisgICAgICAgIHRlc3RDYWwuc2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygzKTsKKyAgICAgICAgdGVzdENhbC5zZXRGaXJzdERheU9mV2VlayhDYWxlbmRhci5TVU5EQVkpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8RElTQU0ubGVuZ3RoOyBpKz00KSB7CisgICAgICAgICAgICBpbnQgeSA9ICgoSW50ZWdlcilESVNBTVtpXSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgIGludCB3b3kgPSAoKEludGVnZXIpRElTQU1baSsxXSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgIGludCBkb3cgPSAoKEludGVnZXIpRElTQU1baSsyXSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgIERhdGUgZXhwID0gKERhdGUpRElTQU1baSszXTsKKyAgICAgICAgICAgIHRlc3RDYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIHRlc3RDYWwuc2V0KENhbGVuZGFyLllFQVIsIHkpOworICAgICAgICAgICAgdGVzdENhbC5zZXQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSLCB3b3kpOworICAgICAgICAgICAgdGVzdENhbC5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIGRvdyk7CisgICAgICAgICAgICBsb2coeSArICItVyIgKyB3b3kgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLURPVyIgKyBkb3cgKyAiIGV4cGVjdDoiICsgZXhwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBnb3Q6IiArIHRlc3RDYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgICAgIGlmICghdGVzdENhbC5nZXRUaW1lKCkuZXF1YWxzKGV4cCkpIHsKKyAgICAgICAgICAgICAgICBsb2coIiAgRkFJTCIpOworICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9sb2dsbigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IHRyeSBhZGRpbmcgYW5kIHJvbGxpbmcKKyAgICAgICAgT2JqZWN0IEFERCA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgT2JqZWN0IFJPTEwgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTgsIENhbGVuZGFyLkRFQ0VNQkVSLCAyNSk7CisgICAgICAgIGRbMF0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5OSwgQ2FsZW5kYXIuSkFOVUFSWSwgMSk7CisgICAgICAgIGRbMV0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5NywgQ2FsZW5kYXIuREVDRU1CRVIsIDI4KTsKKyAgICAgICAgZFsyXSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk4LCBDYWxlbmRhci5KQU5VQVJZLCA0KTsKKyAgICAgICAgZFszXSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk4LCBDYWxlbmRhci5ERUNFTUJFUiwgMjcpOworICAgICAgICBkWzRdID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLkRFQ0VNQkVSLCAyOCk7CisgICAgICAgIGRbNV0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5OSwgQ2FsZW5kYXIuSkFOVUFSWSwgMik7CisgICAgICAgIGRbNl0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5OCwgQ2FsZW5kYXIuSkFOVUFSWSwgMyk7CisgICAgICAgIGRbN10gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFtdIEFERFJPTEwgPSB7CisgICAgICAgICAgICBBREQsIG5ldyBJbnRlZ2VyKDEpLCBkWzBdLCBkWzFdLAorICAgICAgICAgICAgQURELCBuZXcgSW50ZWdlcigxKSwgZFsyXSwgZFszXSwKKyAgICAgICAgICAgIFJPTEwsIG5ldyBJbnRlZ2VyKDEpLCBkWzRdLCBkWzVdLAorICAgICAgICAgICAgUk9MTCwgbmV3IEludGVnZXIoMSksIGRbNl0sIGRbN10sCisgICAgICAgIH07CisgICAgICAgIHRlc3RDYWwuc2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygzKTsKKyAgICAgICAgdGVzdENhbC5zZXRGaXJzdERheU9mV2VlayhDYWxlbmRhci5TVU5EQVkpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8QUREUk9MTC5sZW5ndGg7IGkrPTQpIHsKKyAgICAgICAgICAgIGludCBhbW91bnQgPSAoKEludGVnZXIpQUREUk9MTFtpKzFdKS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgRGF0ZSBiZWZvcmUgPSAoRGF0ZSlBRERST0xMW2krMl07CisgICAgICAgICAgICBEYXRlIGFmdGVyID0gKERhdGUpQUREUk9MTFtpKzNdOworCisgICAgICAgICAgICB0ZXN0Q2FsLnNldFRpbWUoYmVmb3JlKTsKKyAgICAgICAgICAgIGlmIChBRERST0xMW2ldID09IEFERCkgdGVzdENhbC5hZGQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSLCBhbW91bnQpOworICAgICAgICAgICAgZWxzZSB0ZXN0Q2FsLnJvbGwoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSLCBhbW91bnQpOworICAgICAgICAgICAgbG9nKChBRERST0xMW2ldPT1BREQ/ImFkZChXT1ksIjoicm9sbChXT1ksIikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQgKyAiKSAiICsgYmVmb3JlICsgIiA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENhbC5nZXRUaW1lKCkpOworICAgICAgICAgICAgaWYgKCFhZnRlci5lcXVhbHModGVzdENhbC5nZXRUaW1lKCkpKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIiAgZXhwOiIgKyBhZnRlciArICIgIEZBSUwiKTsKKyAgICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgbG9nbG4oIiBvayIpOworCisgICAgICAgICAgICB0ZXN0Q2FsLnNldFRpbWUoYWZ0ZXIpOworICAgICAgICAgICAgaWYgKEFERFJPTExbaV0gPT0gQUREKSB0ZXN0Q2FsLmFkZChDYWxlbmRhci5XRUVLX09GX1lFQVIsIC1hbW91bnQpOworICAgICAgICAgICAgZWxzZSB0ZXN0Q2FsLnJvbGwoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSLCAtYW1vdW50KTsKKyAgICAgICAgICAgIGxvZygoQUREUk9MTFtpXT09QUREPyJhZGQoV09ZLCI6InJvbGwoV09ZLCIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC1hbW91bnQpICsgIikgIiArIGFmdGVyICsgIiA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENhbC5nZXRUaW1lKCkpOworICAgICAgICAgICAgaWYgKCFiZWZvcmUuZXF1YWxzKHRlc3RDYWwuZ2V0VGltZSgpKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCIgIGV4cDoiICsgYmVmb3JlICsgIiAgRkFJTCIpOworICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBsb2dsbigiIG9rIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFpbCkgZXJybG4oIkZhaWw6IFdlZWsgb2YgeWVhciBtaXNiZWhhdmluZyIpOworICAgIH0gCisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwNjEzNigpIHsKKyAgICAgICAgTG9jYWxlIHNhdmVMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICBTdHJpbmdbXSBuYW1lcyA9IHsgIkNhbGVuZGFyIiwgIkRhdGVGb3JtYXQiLCAiTnVtYmVyRm9ybWF0IiB9OworICAgICAgICB0cnkgeworICAgICAgICAgICAgTG9jYWxlW10gbG9jYWxlcyA9IHsgTG9jYWxlLkNISU5FU0UsIExvY2FsZS5DSElOQSB9OworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGxvY2FsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChsb2NhbGVzW2ldKTsKKyAgICAgICAgICAgICAgICBpbnRbXSBuID0geworICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5nZXRBdmFpbGFibGVMb2NhbGVzKCkubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBEYXRlRm9ybWF0LmdldEF2YWlsYWJsZUxvY2FsZXMoKS5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIE51bWJlckZvcm1hdC5nZXRBdmFpbGFibGVMb2NhbGVzKCkubGVuZ3RoCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8bi5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgICAgICBpZiAobltqXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBuYW1lc1tqXSArICIgaGFzIG5vIGxvY2FsZXMgZm9yICIgKyBsb2NhbGVzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChzYXZlTG9jYWxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTA4NzY0KCkgeworICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLk1BUkNILCAxNSwgMTIsIDAwLCAwMCk7CisgICAgICAgIERhdGUgZDAwID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLk1BUkNILCAxNSwgMTIsIDAwLCA1Nik7CisgICAgICAgIERhdGUgZDAxID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLk1BUkNILCAxNSwgMTIsIDM0LCAwMCk7CisgICAgICAgIERhdGUgZDEwID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLk1BUkNILCAxNSwgMTIsIDM0LCA1Nik7CisgICAgICAgIERhdGUgZDExID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLkpBTlVBUlksIDE1LCAxMiwgMzQsIDU2KTsKKyAgICAgICAgRGF0ZSBkTSAgPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5jbGVhcigpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTcwLCBDYWxlbmRhci5KQU5VQVJZLCAxKTsKKyAgICAgICAgRGF0ZSBlcG9jaCA9IHRlbXBjYWwuZ2V0VGltZSgpOworCisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7IAorICAgICAgICBjYWwuc2V0VGltZShkMTEpOworCisgICAgICAgIGNhbC5jbGVhciggQ2FsZW5kYXIuTUlOVVRFICk7IAorICAgICAgICBsb2dsbihjYWwuZ2V0VGltZSgpLnRvU3RyaW5nKCkpOyAKKyAgICAgICAgaWYgKCFjYWwuZ2V0VGltZSgpLmVxdWFscyhkMDEpKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGQxMSArICIgY2xlYXIoTUlOVVRFKSA9PiBleHBlY3QgIiArCisgICAgICAgICAgICAgICAgICBkMDEgKyAiLCBnb3QgIiArIGNhbC5nZXRUaW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgY2FsLnNldCggQ2FsZW5kYXIuU0VDT05ELCAwICk7IAorICAgICAgICBsb2dsbihjYWwuZ2V0VGltZSgpLnRvU3RyaW5nKCkpOyAKKyAgICAgICAgaWYgKCFjYWwuZ2V0VGltZSgpLmVxdWFscyhkMDApKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IHNldChTRUNPTkQsIDApIGJyb2tlbiIpOworCisgICAgICAgIGNhbC5zZXRUaW1lKGQxMSk7CisgICAgICAgIGNhbC5zZXQoIENhbGVuZGFyLlNFQ09ORCwgMCApOyAKKyAgICAgICAgbG9nbG4oY2FsLmdldFRpbWUoKS50b1N0cmluZygpKTsgCisgICAgICAgIGlmICghY2FsLmdldFRpbWUoKS5lcXVhbHMoZDEwKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBzZXQoU0VDT05ELCAwKSBicm9rZW4gIzIiKTsKKworICAgICAgICBjYWwuY2xlYXIoIENhbGVuZGFyLk1JTlVURSApOyAKKyAgICAgICAgbG9nbG4oY2FsLmdldFRpbWUoKS50b1N0cmluZygpKTsgCisgICAgICAgIGlmICghY2FsLmdldFRpbWUoKS5lcXVhbHMoZDAwKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBjbGVhcihNSU5VVEUpIGJyb2tlbiAjMiIpOworCisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBsb2dsbihjYWwuZ2V0VGltZSgpLnRvU3RyaW5nKCkpOworICAgICAgICBpZiAoIWNhbC5nZXRUaW1lKCkuZXF1YWxzKGVwb2NoKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBhZnRlciBjbGVhcigpIGV4cGVjdCAiICsgZXBvY2ggKyAiLCBnb3QgIiArIGNhbC5nZXRUaW1lKCkpOworCisgICAgICAgIGNhbC5zZXRUaW1lKGQxMSk7CisgICAgICAgIGNhbC5jbGVhciggQ2FsZW5kYXIuTU9OVEggKTsgCisgICAgICAgIGxvZ2xuKGNhbC5nZXRUaW1lKCkudG9TdHJpbmcoKSk7IAorICAgICAgICBpZiAoIWNhbC5nZXRUaW1lKCkuZXF1YWxzKGRNKSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBkMTEgKyAiIGNsZWFyKE1PTlRIKSA9PiBleHBlY3QgIiArCisgICAgICAgICAgICAgICAgICBkTSArICIsIGdvdCAiICsgY2FsLmdldFRpbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDExNDU3OCgpIHsKKyAgICAgICAgaW50IE9ORV9IT1VSID0gNjAqNjAqMTAwMDsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgY2FsLnNldFRpbWVab25lKFRpbWVab25lLmdldFRpbWVab25lKCJQU1QiKSk7CisgICAgICAgIAorICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTgsIENhbGVuZGFyLkFQUklMLCA1LCAxLCAwKTsKKyAgICAgICAgbG9uZyBvbnNldCA9IHRlbXBjYWwuZ2V0VGltZSgpLmdldFRpbWUoKSArIE9ORV9IT1VSOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk4LCBDYWxlbmRhci5PQ1RPQkVSLCAyNSwgMCwgMCk7CisgICAgICAgIGxvbmcgY2Vhc2UgPSB0ZW1wY2FsLmdldFRpbWUoKS5nZXRUaW1lKCkgKyAyKk9ORV9IT1VSOworCisgICAgICAgIGJvb2xlYW4gZmFpbCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZmluYWwgaW50IEFERCA9IDE7CisgICAgICAgIGZpbmFsIGludCBST0xMID0gMjsKKworICAgICAgICBsb25nW10gREFUQSA9IHsKKyAgICAgICAgICAgIC8vIFN0YXJ0ICAgICAgICAgICAgQWN0aW9uICAgQW10ICAgIEV4cGVjdGVkX2NoYW5nZQorICAgICAgICAgICAgb25zZXQgLSBPTkVfSE9VUiwgICBBREQsICAgICAgMSwgICAgIE9ORV9IT1VSLAorICAgICAgICAgICAgb25zZXQsICAgICAgICAgICAgICBBREQsICAgICAtMSwgICAgLU9ORV9IT1VSLAorICAgICAgICAgICAgb25zZXQgLSBPTkVfSE9VUiwgICBST0xMLCAgICAgMSwgICAgIE9ORV9IT1VSLAorICAgICAgICAgICAgb25zZXQsICAgICAgICAgICAgICBST0xMLCAgICAtMSwgICAgLU9ORV9IT1VSLAorICAgICAgICAgICAgY2Vhc2UgLSBPTkVfSE9VUiwgICBBREQsICAgICAgMSwgICAgIE9ORV9IT1VSLAorICAgICAgICAgICAgY2Vhc2UsICAgICAgICAgICAgICBBREQsICAgICAtMSwgICAgLU9ORV9IT1VSLAorICAgICAgICAgICAgY2Vhc2UgLSBPTkVfSE9VUiwgICBST0xMLCAgICAgMSwgICAgIE9ORV9IT1VSLAorICAgICAgICAgICAgY2Vhc2UsICAgICAgICAgICAgICBST0xMLCAgICAtMSwgICAgLU9ORV9IT1VSLAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9NCkgeworICAgICAgICAgICAgRGF0ZSBkYXRlID0gbmV3IERhdGUoREFUQVtpXSk7CisgICAgICAgICAgICBpbnQgYW10ID0gKGludCkgREFUQVtpKzJdOworICAgICAgICAgICAgbG9uZyBleHBlY3RlZENoYW5nZSA9IERBVEFbaSszXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9nKGRhdGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBjYWwuc2V0VGltZShkYXRlKTsKKworICAgICAgICAgICAgc3dpdGNoICgoaW50KSBEQVRBW2krMV0pIHsKKyAgICAgICAgICAgIGNhc2UgQUREOgorICAgICAgICAgICAgICAgIGxvZygiIGFkZCAoSE9VUiwiICsgKGFtdDwwPyIiOiIrIikrYW10ICsgIik9ICIpOworICAgICAgICAgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuSE9VUiwgYW10KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUk9MTDoKKyAgICAgICAgICAgICAgICBsb2coIiByb2xsKEhPVVIsIiArIChhbXQ8MD8iIjoiKyIpK2FtdCArICIpPSAiKTsKKyAgICAgICAgICAgICAgICBjYWwucm9sbChDYWxlbmRhci5IT1VSLCBhbXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coY2FsLmdldFRpbWUoKS50b1N0cmluZygpKTsKKworICAgICAgICAgICAgbG9uZyBjaGFuZ2UgPSBjYWwuZ2V0VGltZSgpLmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZSgpOworICAgICAgICAgICAgaWYgKGNoYW5nZSAhPSBleHBlY3RlZENoYW5nZSkgeworICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOworICAgICAgICAgICAgICAgIGxvZ2xuKCIgRkFJTCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBsb2dsbigiIE9LIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFpbCkgZXJybG4oIkZhaWw6IHJvbGwvYWRkIG1pc2JlaGF2ZXMgYXJvdW5kIERTVCBvbnNldC9jZWFzZSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1ha2Ugc3VyZSBtYXhpbXVtIGZvciBIT1VSIGZpZWxkIGlzIDExLCBub3QgMTIuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMTgzODQoKSB7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGlmIChjYWwuZ2V0TWF4aW11bShDYWxlbmRhci5IT1VSKSAhPSAxMSB8fAorICAgICAgICAgICAgY2FsLmdldExlYXN0TWF4aW11bShDYWxlbmRhci5IT1VSKSAhPSAxMSB8fAorICAgICAgICAgICAgY2FsLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuSE9VUikgIT0gMTEpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogbWF4aW11bSBvZiBIT1VSIGZpZWxkIHNob3VsZCBiZSAxMSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlzTGVhcFllYXIgZm9yIEJDIHllYXJzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTI1ODgxKCkgeworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSAoR3JlZ29yaWFuQ2FsZW5kYXIpIENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIk1NTU0gZCwgeXl5eSBHIik7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBmb3IgKGludCB5PS0yMDsgeTw9MTA7ICsreSkgeworICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5FUkEsIHkgPCAxID8gR3JlZ29yaWFuQ2FsZW5kYXIuQkMgOiBHcmVnb3JpYW5DYWxlbmRhci5BRCk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLllFQVIsIHkgPCAxID8gMSAtIHkgOiB5KTsKKyAgICAgICAgICAgIGxvZ2xuKHkgKyAiID0gIiArIGZtdC5mb3JtYXQoY2FsLmdldFRpbWUoKSkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5pc0xlYXBZZWFyKHkpKTsKKyAgICAgICAgICAgIGlmIChjYWwuaXNMZWFwWWVhcih5KSAhPSAoKHkrNDApJTQgPT0gMCkpCisgICAgICAgICAgICAgICAgZXJybG4oIkxlYXAgeWVhcnMgYnJva2VuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJIGFtIGRpc2FibGluZyB0aGlzIHRlc3QgLS0gaXQgaXMgY3VycmVudGx5IGZhaWxpbmcgYmVjYXVzZSBvZiBhIGJ1ZworICAgIC8vIGluIFN1bidzIGxhdGVzdCBjaGFuZ2UgdG8gU1RaLmdldE9mZnNldCgpLiAgSSBoYXZlIGZpbGVkIGEgU3VuIGJ1ZworICAgIC8vIGFnYWluc3QgdGhpcyBwcm9ibGVtLgorCisgICAgLy8gUmUtZW5hYmxlZCBhZnRlciAncG9ydGluZycgVFogYW5kIFNUWiBmcm9tIGphdmEudXRpbCB0byBjb20uaWJtLmljdS51dGlsLgorICAgIC8qKgorICAgICAqIFByb3ZlIHRoYXQgR3JlZ29yaWFuQ2FsZW5kYXIgaXMgcHJvbGVwdGljIChpdCB1c2VkIHRvIGN1dCBvZmYKKyAgICAgKiBhdCA0NSBCQywgYW5kIG5vdCBoYXZlIGxlYXAgeWVhcnMgYmVmb3JlIHRoZW4pLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTI1ODkyKCkgeworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSAoR3JlZ29yaWFuQ2FsZW5kYXIpIENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIk1NTU0gZCwgeXl5eSBHIik7CisgICAgICAgIGZtdCA9IG51bGw7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkVSQSwgR3JlZ29yaWFuQ2FsZW5kYXIuQkMpOworICAgICAgICBjYWwuc2V0KENhbGVuZGFyLllFQVIsIDgxKTsgLy8gODEgQkMgaXMgYSBsZWFwIHllYXIgKHByb2xlcHRpY2FsbHkpCisgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkZFQlJVQVJZKTsKKyAgICAgICAgY2FsLnNldChDYWxlbmRhci5EQVRFLCAyOCk7CisgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgMSk7CisgICAgICAgIGlmIChjYWwuZ2V0KENhbGVuZGFyLkRBVEUpICE9IDI5IHx8CisgICAgICAgICAgICAhY2FsLmlzTGVhcFllYXIoLTgwKSkgLy8gLTgwID09IDgxIEJDCisgICAgICAgICAgICBlcnJsbigiQ2FsZW5kYXIgbm90IHByb2xlcHRpYyIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGVuZGFyIGFuZCBHcmVnb3JpYW5DYWxlbmRhciBoYXNoQ29kZSgpIG1ldGhvZHMgbmVlZCBpbXByb3ZlbWVudC4KKyAgICAgKiBDYWxlbmRhciBuZWVkcyBhIGdvb2QgaW1wbGVtZW50YXRpb24gdGhhdCBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSwKKyAgICAgKiBhbmQgR3JlZ29yaWFuQ2FsZW5kYXIgc2hvdWxkIHVzZSB0aGF0IGltcGxlbWVudGF0aW9uLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTM2Mzk5KCkgeworICAgICAgICAvKiBOb3RlOiBUaGlzIHRlc3QgaXMgYWN0dWFsbHkgbW9yZSBzdHJpY3QgdGhhbiBpdCBoYXMgdG8gYmUuCisgICAgICAgICAqIFRlY2huaWNhbGx5LCB0aGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IHVuZXF1YWwgb2JqZWN0cyBoYXZlCisgICAgICAgICAqIHVuZXF1YWwgaGFzaGVzLiAgV2Ugb25seSByZXF1aXJlIGVxdWFsIG9iamVjdHMgdG8gaGF2ZSBlcXVhbCBoYXNoZXMuCisgICAgICAgICAqIEl0IGlzIGRlc2lyYWJsZSBmb3IgdW5lcXVhbCBvYmplY3RzIHRvIGhhdmUgZGlzdHJpYnV0ZWQgaGFzaGVzLCBidXQKKyAgICAgICAgICogdGhlcmUgaXMgbm8gaGFyZCByZXF1aXJlbWVudCBoZXJlLgorICAgICAgICAgKgorICAgICAgICAgKiBJbiB0aGlzIHRlc3Qgd2UgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBjZXJ0YWluIGF0dHJpYnV0ZXMgb2YgY2FsZW5kYXIKKyAgICAgICAgICogb2JqZWN0cyBnZXR0aW5nIHJlcHJlc2VudGVkIGluIHRoZSBoYXNoLCB3aGljaCBuZWVkIG5vdCBhbHdheXMgYmUgdGhlCisgICAgICAgICAqIGNhc2UgKGFsdGhvdWdoIGl0IGRvZXMgd29yayBjdXJyZW50bHkgd2l0aCB0aGUgZ2l2ZW4gdGVzdCkuICovCisgICAgICAgIENhbGVuZGFyIGEgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBDYWxlbmRhciBiID0gKENhbGVuZGFyKWEuY2xvbmUoKTsKKyAgICAgICAgaWYgKGEuaGFzaENvZGUoKSAhPSBiLmhhc2hDb2RlKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJDYWxlbmRhciBoYXNoIGNvZGUgdW5lcXVhbCBmb3IgY2xvbmVkIG9iamVjdHMiKTsKKyAgICAgICAgfQorCisgICAgICAgIGIuc2V0TWluaW1hbERheXNJbkZpcnN0V2Vlayg3IC0gYS5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCkpOworICAgICAgICBpZiAoYS5oYXNoQ29kZSgpID09IGIuaGFzaENvZGUoKSkgeworICAgICAgICAgICAgZXJybG4oIkNhbGVuZGFyIGhhc2ggY29kZSBpZ25vcmVzIG1pbmltYWwgZGF5cyBpbiBmaXJzdCB3ZWVrIik7CisgICAgICAgIH0KKyAgICAgICAgYi5zZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKGEuZ2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpKTsKKworICAgICAgICBiLnNldEZpcnN0RGF5T2ZXZWVrKChhLmdldEZpcnN0RGF5T2ZXZWVrKCkgJSA3KSArIDEpOyAvLyBOZXh0IGRheQorICAgICAgICBpZiAoYS5oYXNoQ29kZSgpID09IGIuaGFzaENvZGUoKSkgeworICAgICAgICAgICAgZXJybG4oIkNhbGVuZGFyIGhhc2ggY29kZSBpZ25vcmVzIGZpcnN0IGRheSBvZiB3ZWVrIik7CisgICAgICAgIH0KKyAgICAgICAgYi5zZXRGaXJzdERheU9mV2VlayhhLmdldEZpcnN0RGF5T2ZXZWVrKCkpOworCisgICAgICAgIGIuc2V0TGVuaWVudCghYS5pc0xlbmllbnQoKSk7CisgICAgICAgIGlmIChhLmhhc2hDb2RlKCkgPT0gYi5oYXNoQ29kZSgpKSB7CisgICAgICAgICAgICBlcnJsbigiQ2FsZW5kYXIgaGFzaCBjb2RlIGlnbm9yZXMgbGVuaWVudCBzZXR0aW5nIik7CisgICAgICAgIH0KKyAgICAgICAgYi5zZXRMZW5pZW50KGEuaXNMZW5pZW50KCkpOworICAgICAgICAKKyAgICAgICAgLy8gQXNzdW1lIGdldFRpbWVab25lKCkgcmV0dXJucyBhIHJlZmVyZW5jZSwgbm90IGEgY2xvbmUKKyAgICAgICAgLy8gb2YgYSByZWZlcmVuY2UgLS0gdGhpcyBpcyB0cnVlIGFzIG9mIHRoaXMgd3JpdGluZworICAgICAgICBiLmdldFRpbWVab25lKCkuc2V0UmF3T2Zmc2V0KGEuZ2V0VGltZVpvbmUoKS5nZXRSYXdPZmZzZXQoKSArIDYwKjYwKjEwMDApOworICAgICAgICBpZiAoYS5oYXNoQ29kZSgpID09IGIuaGFzaENvZGUoKSkgeworICAgICAgICAgICAgZXJybG4oIkNhbGVuZGFyIGhhc2ggY29kZSBpZ25vcmVzIHpvbmUiKTsKKyAgICAgICAgfQorICAgICAgICBiLmdldFRpbWVab25lKCkuc2V0UmF3T2Zmc2V0KGEuZ2V0VGltZVpvbmUoKS5nZXRSYXdPZmZzZXQoKSk7CisKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgYyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBkID0gKEdyZWdvcmlhbkNhbGVuZGFyKWMuY2xvbmUoKTsKKyAgICAgICAgaWYgKGMuaGFzaENvZGUoKSAhPSBkLmhhc2hDb2RlKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJHcmVnb3JpYW5DYWxlbmRhciBoYXNoIGNvZGUgdW5lcXVhbCBmb3IgY2xvbmVzIG9iamVjdHMiKTsKKyAgICAgICAgfQorICAgICAgICBEYXRlIGN1dG92ZXIgPSBjLmdldEdyZWdvcmlhbkNoYW5nZSgpOworICAgICAgICBkLnNldEdyZWdvcmlhbkNoYW5nZShuZXcgRGF0ZShjdXRvdmVyLmdldFRpbWUoKSArIDI0KjYwKjYwKjEwMDApKTsKKyAgICAgICAgaWYgKGMuaGFzaENvZGUoKSA9PSBkLmhhc2hDb2RlKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJHcmVnb3JpYW5DYWxlbmRhciBoYXNoIGNvZGUgaWdub3JlcyBjdXRvdmVyIik7CisgICAgICAgIH0gICAgICAgIAorICAgIH0KKworICAgIC8qKgorICAgICAqIEdyZWdvcmlhbkNhbGVuZGFyLmVxdWFscygpIGlnbm9yZXMgY3V0b3ZlciBkYXRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNDE2NjUoKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwyID0gKEdyZWdvcmlhbkNhbGVuZGFyKWNhbC5jbG9uZSgpOworICAgICAgICBEYXRlIGN1dCA9IGNhbC5nZXRHcmVnb3JpYW5DaGFuZ2UoKTsKKyAgICAgICAgRGF0ZSBjdXQyID0gbmV3IERhdGUoY3V0LmdldFRpbWUoKSArIDEwMCoyNCo2MCo2MCoxMDAwTCk7IC8vIDEwMCBkYXlzIGxhdGVyCisgICAgICAgIGlmICghY2FsLmVxdWFscyhjYWwyKSkgeworICAgICAgICAgICAgZXJybG4oIkNsb25lZCBHcmVnb3JpYW5DYWxlbmRhcnMgbm90IGVxdWFsIik7CisgICAgICAgIH0KKyAgICAgICAgY2FsMi5zZXRHcmVnb3JpYW5DaGFuZ2UoY3V0Mik7CisgICAgICAgIGlmIChjYWwuZXF1YWxzKGNhbDIpKSB7CisgICAgICAgICAgICBlcnJsbigiR3JlZ29yaWFuQ2FsZW5kYXIuZXF1YWxzKCkgaWdub3JlcyBjdXRvdmVyIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQnVnIHN0YXRlcyB0aGF0IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpcyB0aHJvd24gYnkgR3JlZ29yaWFuQ2FsZW5kYXIucm9sbCgpCisgICAgICogd2hlbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gc2hvdWxkIGJlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTQyOTMzKCkgeworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2FsZW5kYXIucm9sbCgtMSwgdHJ1ZSk7CisgICAgICAgICAgICBlcnJsbigiVGVzdCBmYWlsZWQsIG5vIGV4Y2VwdGlvbiB0cm93biIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gT0s6IERvIG5vdGhpbmcKKyAgICAgICAgICAgIC8vIGxvZ2xuKCJUZXN0IHBhc3NlZCIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiVGVzdCBmYWlsZWQuIFVuZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHRocm93bjogIiArIGUpOworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfSAKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHcmVnb3JpYW5DYWxlbmRhciBoYW5kbGluZyBvZiBEYXRlcyBMb25nLk1JTl9WQUxVRSBhbmQgTG9uZy5NQVhfVkFMVUUgaXMKKyAgICAgKiBjb25mdXNpbmc7IHVubGVzcyB0aGUgdGltZSB6b25lIGhhcyBhIHJhdyBvZmZzZXQgb2YgemVybywgb25lIG9yIHRoZQorICAgICAqIG90aGVyIG9mIHRoZXNlIHdpbGwgd3JhcC4gIFdlJ3ZlIG1vZGlmaWVkIHRoZSB0ZXN0IGdpdmVuIGluIHRoZSBidWcKKyAgICAgKiByZXBvcnQgdG8gdGhlcmVmb3JlIG9ubHkgY2hlY2sgdGhlIGJlaGF2aW9yIG9mIGEgY2FsZW5kYXIgd2l0aCBhIHplcm8gcmF3CisgICAgICogb2Zmc2V0IHpvbmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNDUxNTgoKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbGVuZGFyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisKKyAgICAgICAgY2FsZW5kYXIuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKTsKKworICAgICAgICBjYWxlbmRhci5zZXRUaW1lKG5ldyBEYXRlKExvbmcuTUlOX1ZBTFVFKSk7CisgICAgICAgIGludCB5ZWFyMSA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5ZRUFSKTsKKyAgICAgICAgaW50IGVyYTEgPSBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuRVJBKTsKKyAgICAgICAgCisgICAgICAgIGNhbGVuZGFyLnNldFRpbWUobmV3IERhdGUoTG9uZy5NQVhfVkFMVUUpKTsKKyAgICAgICAgaW50IHllYXIyID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICBpbnQgZXJhMiA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpOworICAgICAgICAKKyAgICAgICAgaWYgKHllYXIxID09IHllYXIyICYmIGVyYTEgPT0gZXJhMikgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6IExvbmcuTUlOX1ZBTFVFIG9yIExvbmcuTUFYX1ZBTFVFIHdyYXBwaW5nIGFyb3VuZCIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTWF4aW11bSB2YWx1ZSBmb3IgWUVBUiBmaWVsZCB3cm9uZy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE0NTk4MygpIHsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgY2FsZW5kYXIuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKTsKKyAgICAgICAgRGF0ZVtdIERBVEVTID0geyBuZXcgRGF0ZShMb25nLk1BWF9WQUxVRSksIG5ldyBEYXRlKExvbmcuTUlOX1ZBTFVFKSB9OworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFURVMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGNhbGVuZGFyLnNldFRpbWUoREFURVNbaV0pOworICAgICAgICAgICAgaW50IHllYXIgPSBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgICAgICBpbnQgbWF4WWVhciA9IGNhbGVuZGFyLmdldE1heGltdW0oQ2FsZW5kYXIuWUVBUik7CisgICAgICAgICAgICBpZiAoeWVhciA+IG1heFllYXIpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbGVkIGZvciAiK0RBVEVTW2ldLmdldFRpbWUoKSsiIG1zOiB5ZWFyPSIgKworICAgICAgICAgICAgICAgICAgICAgIHllYXIgKyAiLCBtYXhZZWFyPSIgKyBtYXhZZWFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgaXMgYSBidWcgaW4gdGhlIHZhbGlkYXRpb24gY29kZSBvZiBHcmVnb3JpYW5DYWxlbmRhci4gIEFzIHJlcG9ydGVkLAorICAgICAqIHRoZSBidWcgc2VlbXMgd29yc2UgdGhhbiBpdCByZWFsbHkgaXMsIGR1ZSB0byBhIGJ1ZyBpbiB0aGUgd2F5IHRoZSBidWcKKyAgICAgKiByZXBvcnQgdGVzdCB3YXMgd3JpdHRlbi4gIEluIHJlYWxpdHkgdGhlIGJ1ZyBpcyByZXN0cmljdGVkIHRvIHRoZSBEQVlfT0ZfWUVBUgorICAgICAqIGZpZWxkLiAtIGxpdSA2LzI5Lzk4CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNDcyNjkoKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbGVuZGFyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIGNhbGVuZGFyLnNldExlbmllbnQoZmFsc2UpOworICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTYsIENhbGVuZGFyLkpBTlVBUlksIDMpOyAvLyBBcmJpdHJhcnkgZGF0ZQorICAgICAgICBEYXRlIGRhdGUgPSB0ZW1wY2FsLmdldFRpbWUoKTsgCisgICAgICAgIGZvciAoaW50IGZpZWxkID0gMDsgZmllbGQgPCBjYWxlbmRhci5nZXRGaWVsZENvdW50KCk7IGZpZWxkKyspIHsKKyAgICAgICAgICAgIGNhbGVuZGFyLnNldFRpbWUoZGF0ZSk7CisgICAgICAgICAgICAvLyBOb3RlOiBJbiB0aGUgYnVnIHJlcG9ydCwgZ2V0QWN0dWFsTWF4aW11bSgpIHdhcyBjYWxsZWQgaW5zdGVhZAorICAgICAgICAgICAgLy8gb2YgZ2V0TWF4aW11bSgpIC0tIHRoaXMgd2FzIGFuIGVycm9yLiAgVGhlIHZhbGlkYXRpb24gY29kZSBkb2Vzbid0CisgICAgICAgICAgICAvLyB1c2UgZ2V0QWN0dWFsTWF4aW11bSgpLCBzaW5jZSB0aGF0J3MgdG9vIGNvc3RseS4KKyAgICAgICAgICAgIGludCBtYXggPSBjYWxlbmRhci5nZXRNYXhpbXVtKGZpZWxkKTsKKyAgICAgICAgICAgIGludCB2YWx1ZSA9IG1heCsxOworICAgICAgICAgICAgY2FsZW5kYXIuc2V0KGZpZWxkLCB2YWx1ZSk7IAorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjYWxlbmRhci5nZXRUaW1lKCk7IC8vIEZvcmNlIHRpbWUgY29tcHV0YXRpb24KKyAgICAgICAgICAgICAgICAvLyBXZSBleHBlY3QgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93bi4gSWYgd2UgZmFsbCB0aHJvdWdoCisgICAgICAgICAgICAgICAgLy8gdG8gdGhlIG5leHQgbGluZSwgdGhlbiB3ZSBoYXZlIGEgYnVnLgorICAgICAgICAgICAgICAgIGVycmxuKCJUZXN0IGZhaWxlZCB3aXRoIGZpZWxkICIgKyBGSUVMRF9OQU1FW2ZpZWxkXSArCisgICAgICAgICAgICAgICAgICAgICAgIiwgZGF0ZSBiZWZvcmU6ICIgKyBkYXRlICsKKyAgICAgICAgICAgICAgICAgICAgICAiLCBkYXRlIGFmdGVyOiAiICsgY2FsZW5kYXIuZ2V0VGltZSgpICsKKyAgICAgICAgICAgICAgICAgICAgICAiLCB2YWx1ZTogIiArIHZhbHVlICsgIiAobWF4ID0gIiArIG1heCArIikiKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgICAgICAgICB9IAorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0ZWQgYnVnIGlzIHRoYXQgYSBHcmVnb3JpYW5DYWxlbmRhciB3aXRoIGEgY3V0b3ZlciBvZiBEYXRlKExvbmcuTUFYX1ZBTFVFKQorICAgICAqIGRvZXNuJ3QgYmVoYXZlIGFzIGEgcHVyZSBKdWxpYW4gY2FsZW5kYXIuCisgICAgICogQ0FOTk9UIFJFUFJPRFVDRSBUSElTIEJVRworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTQ5Njc3KCkgeworICAgICAgICBUaW1lWm9uZVtdIHpvbmVzID0geyBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJQU1QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkVBVCIpIH07CisgICAgICAgIGZvciAoaW50IGk9MDsgaTx6b25lcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoem9uZXNbaV0pOworCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgZXh0cmVtZSB2YWx1ZXMgZG9uJ3Qgd3JhcCBhcm91bmQKKyAgICAgICAgICAgIGNhbGVuZGFyLnNldFRpbWUobmV3IERhdGUoTG9uZy5NSU5fVkFMVUUpKTsKKyAgICAgICAgICAgIGlmIChjYWxlbmRhci5nZXQoQ2FsZW5kYXIuRVJBKSAhPSBHcmVnb3JpYW5DYWxlbmRhci5CQykgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBMb25nLk1JTl9WQUxVRSBtcyBoYXMgYW4gQUQgeWVhciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FsZW5kYXIuc2V0VGltZShuZXcgRGF0ZShMb25nLk1BWF9WQUxVRSkpOworICAgICAgICAgICAgaWYgKGNhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpICE9IEdyZWdvcmlhbkNhbGVuZGFyLkFEKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWw6IExvbmcuTUFYX1ZBTFVFIG1zIGhhcyBhIEJDIHllYXIiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FsZW5kYXIuc2V0R3JlZ29yaWFuQ2hhbmdlKG5ldyBEYXRlKExvbmcuTUFYX1ZBTFVFKSk7CisgICAgICAgICAgICAvLyB0byBvYnRhaW4gYSBwdXJlIEp1bGlhbiBjYWxlbmRhcgorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sZWFuIGlzMTAwTGVhcCA9IGNhbGVuZGFyLmlzTGVhcFllYXIoMTAwKTsKKyAgICAgICAgICAgIGlmICghaXMxMDBMZWFwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oInRlc3QgZmFpbGVkIHdpdGggem9uZSAiICsgem9uZXNbaV0uZ2V0SUQoKSk7CisgICAgICAgICAgICAgICAgZXJybG4oIiBjdXRvdmVyIGRhdGUgaXMgQ2FsZW5kYXIuTUFYX0RBVEUiKTsKKyAgICAgICAgICAgICAgICBlcnJsbigiIGlzTGVhcFllYXIoMTAwKSByZXR1cm5zOiAiICsgaXMxMDBMZWFwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGVuZGFyIGFuZCBEYXRlIEhPVVIgYnJva2VuLiAgSWYgSE9VUiBpcyBvdXQtb2YtcmFuZ2UsIENhbGVuZGFyCisgICAgICogYW5kIERhdGUgY2xhc3NlcyB3aWxsIG1pc2JlaGF2ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE2MjU4NygpIHsKKyAgICAgICAgVGltZVpvbmUgdHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQodHopOworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIodHopOworICAgICAgICBEYXRlIGQ7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpPTA7IGk8NTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaT4wKSBsb2dsbigiLS0tIik7CisKKyAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgY2FsLnNldCgxOTk4LCBDYWxlbmRhci5BUFJJTCwgNSwgaSwgMCk7CisgICAgICAgICAgICBkID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgICAgIFN0cmluZyBzMCA9IGQudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGxvZ2xuKCIwICIgKyBpICsgIjogIiArIHMwKTsKKworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KDE5OTgsIENhbGVuZGFyLkFQUklMLCA0LCBpKzI0LCAwKTsKKyAgICAgICAgICAgIGQgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICAgICAgU3RyaW5nIHNQbHVzID0gZC50b1N0cmluZygpOworICAgICAgICAgICAgbG9nbG4oIisgIiArIGkgKyAiOiAiICsgc1BsdXMpOworCisgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIGNhbC5zZXQoMTk5OCwgQ2FsZW5kYXIuQVBSSUwsIDYsIGktMjQsIDApOworICAgICAgICAgICAgZCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICBTdHJpbmcgc01pbnVzID0gZC50b1N0cmluZygpOworICAgICAgICAgICAgbG9nbG4oIi0gIiArIGkgKyAiOiAiICsgc01pbnVzKTsKKworICAgICAgICAgICAgaWYgKCFzMC5lcXVhbHMoc1BsdXMpIHx8ICFzMC5lcXVhbHMoc01pbnVzKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBBbGwgdGhyZWUgbGluZXMgbXVzdCBtYXRjaCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkaW5nIDEyIG1vbnRocyBiZWhhdmVzIGRpZmZlcmVudGx5IGZyb20gYWRkaW5nIDEgeWVhcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTY1MzQzKCkgeworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxOTk2LCBDYWxlbmRhci5GRUJSVUFSWSwgMjkpOworICAgICAgICBEYXRlIHN0YXJ0ID0gY2FsZW5kYXIuZ2V0VGltZSgpOworICAgICAgICBsb2dsbigiaW5pdCBkYXRlOiAiICsgc3RhcnQpOworICAgICAgICBjYWxlbmRhci5hZGQoQ2FsZW5kYXIuTU9OVEgsIDEyKTsgCisgICAgICAgIERhdGUgZGF0ZTEgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisgICAgICAgIGxvZ2xuKCJhZnRlciBhZGRpbmcgMTIgbW9udGhzOiAiICsgZGF0ZTEpOworICAgICAgICBjYWxlbmRhci5zZXRUaW1lKHN0YXJ0KTsKKyAgICAgICAgY2FsZW5kYXIuYWRkKENhbGVuZGFyLllFQVIsIDEpOworICAgICAgICBEYXRlIGRhdGUyID0gY2FsZW5kYXIuZ2V0VGltZSgpOworICAgICAgICBsb2dsbigiYWZ0ZXIgYWRkaW5nIG9uZSB5ZWFyIDogIiArIGRhdGUyKTsKKyAgICAgICAgaWYgKGRhdGUxLmVxdWFscyhkYXRlMikpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJUZXN0IHBhc3NlZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIlRlc3QgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHcmVnb3JpYW5DYWxlbmRhci5nZXRBY3R1YWxNYXhpbXVtKCkgZG9lcyBub3QgYWNjb3VudCBmb3IgZmlyc3QgZGF5IG9mIHdlZWsuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNjYxMDkoKSB7CisgICAgICAgIC8qIFRlc3QgbW9udGg6CisgICAgICAgICAqCisgICAgICAgICAqICAgICAgTWFyY2ggMTk5OAorICAgICAgICAgKiBTdSBNbyBUdSBXZSBUaCBGciBTYQorICAgICAgICAgKiAgMSAgMiAgMyAgNCAgNSAgNiAgNworICAgICAgICAgKiAgOCAgOSAxMCAxMSAxMiAxMyAxNAorICAgICAgICAgKiAxNSAxNiAxNyAxOCAxOSAyMCAyMQorICAgICAgICAgKiAyMiAyMyAyNCAyNSAyNiAyNyAyOAorICAgICAgICAgKiAyOSAzMCAzMQorICAgICAgICAgKi8KKyAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgICAgICBpbnQgZmllbGQgPSBDYWxlbmRhci5XRUVLX09GX01PTlRIOworCisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbGVuZGFyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKExvY2FsZS5VUyk7CisgICAgICAgIGNhbGVuZGFyLnNldCgxOTk4LCBDYWxlbmRhci5NQVJDSCwgMSk7CisgICAgICAgIGNhbGVuZGFyLnNldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoMSk7CisgICAgICAgIGxvZ2xuKCJEYXRlOiAgIiArIGNhbGVuZGFyLmdldFRpbWUoKSk7CisKKyAgICAgICAgaW50IGZpcnN0SW5Nb250aCA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOworCisgICAgICAgIGZvciAoaW50IGZpcnN0SW5XZWVrID0gQ2FsZW5kYXIuU1VOREFZOyBmaXJzdEluV2VlayA8PSBDYWxlbmRhci5TQVRVUkRBWTsgZmlyc3RJbldlZWsrKykgeworICAgICAgICAgICAgY2FsZW5kYXIuc2V0Rmlyc3REYXlPZldlZWsoZmlyc3RJbldlZWspOworICAgICAgICAgICAgaW50IHJldHVybmVkID0gY2FsZW5kYXIuZ2V0QWN0dWFsTWF4aW11bShmaWVsZCk7CisgICAgICAgICAgICBpbnQgZXhwZWN0ZWQgPSAoMzEgKyAoKGZpcnN0SW5Nb250aCAtIGZpcnN0SW5XZWVrICsgNyklIDcpICsgNikgLyA3OworCisgICAgICAgICAgICBsb2dsbigiRmlyc3QgZGF5IG9mIHdlZWsgPSAiICsgZmlyc3RJbldlZWsgKworICAgICAgICAgICAgICAgICAgIiAgZ2V0QWN0dWFsTWF4aW11bShXRUVLX09GX01PTlRIKSA9ICIgKyByZXR1cm5lZCArCisgICAgICAgICAgICAgICAgICAiICBleHBlY3RlZCA9ICIgKyBleHBlY3RlZCArCisgICAgICAgICAgICAgICAgICAoKHJldHVybmVkID09IGV4cGVjdGVkKSA/ICIgIG9rIiA6ICIgIEZBSUwiKSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5lZCAhPSBleHBlY3RlZCkgeworICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghcGFzc2VkKSB7CisgICAgICAgICAgICBlcnJsbigiVGVzdCBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGVuZGFyLmdldEFjdHVhbE1heGltdW0oWUVBUikgd29ya3Mgd3JvbmcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNjcwNjAoKSB7CisgICAgICAgIGludCBmaWVsZCA9IENhbGVuZGFyLllFQVI7CisgICAgICAgIERhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkVFRSBNTU0gZGQgSEg6bW06c3Mgenp6IHl5eXkgRyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlLlVTKTsKKworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWxlbmRhcnNbXSA9IHsKKyAgICAgICAgICAgIG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxMDAsIENhbGVuZGFyLk5PVkVNQkVSLCAxKSwKKyAgICAgICAgICAgIG5ldyBHcmVnb3JpYW5DYWxlbmRhcigtOTkgLyoxMDBCQyovLCBDYWxlbmRhci5KQU5VQVJZLCAxKSwKKyAgICAgICAgICAgIG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxOTk2LCBDYWxlbmRhci5GRUJSVUFSWSwgMjkpLAorICAgICAgICB9OworCisgICAgICAgIFN0cmluZ1tdIGlkID0geyAiSHlicmlkIiwgIkdyZWdvcmlhbiIsICJKdWxpYW4iIH07CisKKyAgICAgICAgZm9yIChpbnQgaz0wOyBrPDM7ICsraykgeworICAgICAgICAgICAgbG9nbG4oIi0tLSAiICsgaWRba10gKyAiIC0tLSIpOworCisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8Y2FsZW5kYXJzLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsZW5kYXIgPSBjYWxlbmRhcnNbal07CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBjYWxlbmRhci5zZXRHcmVnb3JpYW5DaGFuZ2UobmV3IERhdGUoTG9uZy5NSU5fVkFMVUUpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGsgPT0gMikgeworICAgICAgICAgICAgICAgICAgICBjYWxlbmRhci5zZXRHcmVnb3JpYW5DaGFuZ2UobmV3IERhdGUoTG9uZy5NQVhfVkFMVUUpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3JtYXQuc2V0Q2FsZW5kYXIoKENhbGVuZGFyKWNhbGVuZGFyLmNsb25lKCkpOworCisgICAgICAgICAgICAgICAgRGF0ZSBkYXRlQmVmb3JlID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCisgICAgICAgICAgICAgICAgaW50IG1heFllYXIgPSBjYWxlbmRhci5nZXRBY3R1YWxNYXhpbXVtKGZpZWxkKTsKKyAgICAgICAgICAgICAgICBsb2dsbigibWF4WWVhcjogIiArIG1heFllYXIgKyAiIGZvciAiICsgZm9ybWF0LmZvcm1hdChjYWxlbmRhci5nZXRUaW1lKCkpKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiZGF0ZSBiZWZvcmU6ICIgKyBmb3JtYXQuZm9ybWF0KGRhdGVCZWZvcmUpKTsKKworICAgICAgICAgICAgICAgIGludCB5ZWFyc1tdID0gezIwMDAsIG1heFllYXItMSwgbWF4WWVhciwgbWF4WWVhcisxfTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeWVhcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB2YWxpZCA9IHllYXJzW2ldIDw9IG1heFllYXI7CisgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyLnNldChmaWVsZCwgeWVhcnNbaV0pOworICAgICAgICAgICAgICAgICAgICBEYXRlIGRhdGVBZnRlciA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IG5ld1llYXIgPSBjYWxlbmRhci5nZXQoZmllbGQpOworICAgICAgICAgICAgICAgICAgICBjYWxlbmRhci5zZXRUaW1lKGRhdGVCZWZvcmUpOyAvLyByZXN0b3JlIGNhbGVuZGFyIGZvciBuZXh0IHVzZQorCisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCIgWWVhciAiICsgeWVhcnNbaV0gKyAodmFsaWQ/ICIgb2sgIiA6ICIgYmFkIikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiID0+ICIgKyBmb3JtYXQuZm9ybWF0KGRhdGVBZnRlcikpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWQgJiYgbmV3WWVhciAhPSB5ZWFyc1tpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIiAgRkFJTDogIiArIG5ld1llYXIgKyAiIHNob3VsZCBiZSB2YWxpZDsgZGF0ZSwgbW9udGggYW5kIHRpbWUgc2hvdWxkbid0IGNoYW5nZSIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZCAmJiBuZXdZZWFyID09IHllYXJzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBubyBsb25nZXIgcmVxdWlyZSBzdHJpY3QgeWVhciBtYXhpbWEuICBUaGF0IGlzLCB0aGUgY2FsZW5kYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsZ29yaXRobSBtYXkgd29yayBmb3IgdmFsdWVzID4gdGhlIHN0YXRlZCBtYXhpbXVtLgorICAgICAgICAgICAgICAgICAgICAgICAgLy9lcnJsbigiICBGQUlMOiAiICsgbmV3WWVhciArICIgc2hvdWxkIGJlIGludmFsaWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCIgIE5vdGU6ICIgKyBuZXdZZWFyICsgIiA+IG1heGltdW0sIGJ1dCBzdGlsbCB2YWxpZCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsZW5kYXIucm9sbCBicm9rZW4KKyAgICAgKiBUaGlzIGJ1ZyByZWxpZXMgb24gdGhlIFRpbWVab25lIGJ1ZyA0MTczNjA0IHRvIGFsc28gYmUgZml4ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNzM1MTYoKSB7CisgICAgICAgIGludCBmaWVsZHNMaXN0W11bXSA9IHsKKyAgICAgICAgICAgIHsgMTk5NywgQ2FsZW5kYXIuRkVCUlVBUlksICAxLCAxMCwgNDUsIDE1LCA5MDAgfSwKKyAgICAgICAgICAgIHsgMTk5OSwgQ2FsZW5kYXIuREVDRU1CRVIsIDIyLCAyMywgNTksIDU5LCA5OTkgfQorICAgICAgICB9OworICAgICAgICBpbnQgbGltaXQgPSA0MDsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisKKyAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUoMCkpOworICAgICAgICBjYWwucm9sbChDYWxlbmRhci5IT1VSLCAgMHg3RjAwMDAwMCk7CisgICAgICAgIGNhbC5yb2xsKENhbGVuZGFyLkhPVVIsIC0weDdGMDAwMDAwKTsKKyAgICAgICAgaWYgKGNhbC5nZXRUaW1lKCkuZ2V0VGltZSgpICE9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJIb3VyIHJvbGxpbmcgYnJva2VuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBvcD0wOyBvcDwyOyArK29wKSB7CisgICAgICAgICAgICBsb2dsbigiVGVzdGluZyBHcmVnb3JpYW5DYWxlbmRhciAiICsKKyAgICAgICAgICAgICAgICAgIChvcD09MCA/ICJhZGQiIDogInJvbGwiKSk7CisgICAgICAgICAgICBmb3IgKGludCBmaWVsZD0wOyBmaWVsZCA8IGNhbC5nZXRGaWVsZENvdW50KCk7ICsrZmllbGQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGQgIT0gQ2FsZW5kYXIuWk9ORV9PRkZTRVQgJiYKKyAgICAgICAgICAgICAgICAgICAgZmllbGQgIT0gQ2FsZW5kYXIuRFNUX09GRlNFVCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8ZmllbGRzTGlzdC5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpZWxkc1tdID0gZmllbGRzTGlzdFtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsLnNldChmaWVsZHNbMF0sIGZpZWxkc1sxXSwgZmllbGRzWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHNbM10sIGZpZWxkc1s0XSwgZmllbGRzWzVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQsIGZpZWxkc1s2XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIqbGltaXQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5hZGQoZmllbGQsIGkgPCBsaW1pdCA/IDEgOiAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLnJvbGwoZmllbGQsIGkgPCBsaW1pdCA/IDEgOiAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbC5nZXQoQ2FsZW5kYXIuWUVBUikgIT0gZmllbGRzWzBdIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5NT05USCkgIT0gZmllbGRzWzFdIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5EQVRFKSAhPSBmaWVsZHNbMl0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSAhPSBmaWVsZHNbM10gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLk1JTlVURSkgIT0gZmllbGRzWzRdIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5TRUNPTkQpICE9IGZpZWxkc1s1XSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpICE9IGZpZWxkc1s2XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGaWVsZCAiICsgZmllbGQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKCIgKyBGSUVMRF9OQU1FW2ZpZWxkXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikgRkFJTCwgZXhwZWN0ZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzWzBdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIgKyAoZmllbGRzWzFdICsgMSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiArIGZpZWxkc1syXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsgZmllbGRzWzNdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiIgKyBmaWVsZHNbNF0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6IiArIGZpZWxkc1s1XSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iICsgZmllbGRzWzZdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBnb3QgIiArIGNhbC5nZXQoQ2FsZW5kYXIuWUVBUikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiArIChjYWwuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDEpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIgKyBjYWwuZ2V0KENhbGVuZGFyLkRBVEUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBjYWwuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjoiICsgY2FsLmdldChDYWxlbmRhci5NSU5VVEUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiIgKyBjYWwuZ2V0KENhbGVuZGFyLlNFQ09ORCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiArIGNhbC5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuc2V0KGZpZWxkc1swXSwgZmllbGRzWzFdLCBmaWVsZHNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHNbM10sIGZpZWxkc1s0XSwgZmllbGRzWzVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLk1JTExJU0VDT05ELCBmaWVsZHNbNl0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJTdGFydCBkYXRlOiAiICsgY2FsLmdldChDYWxlbmRhci5ZRUFSKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iICsgKGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiArIGNhbC5nZXQoQ2FsZW5kYXIuREFURSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArIGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiIgKyBjYWwuZ2V0KENhbGVuZGFyLk1JTlVURSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6IiArIGNhbC5nZXQoQ2FsZW5kYXIuU0VDT05EKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iICsgY2FsLmdldChDYWxlbmRhci5NSUxMSVNFQ09ORCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHJldiA9IGNhbC5nZXRUaW1lKCkuZ2V0VGltZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMipsaW1pdDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuYWRkKGZpZWxkLCBpIDwgbGltaXQgPyAxIDogLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLnJvbGwoZmllbGQsIGkgPCBsaW1pdCA/IDEgOiAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0ID0gY2FsLmdldFRpbWUoKS5nZXRUaW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVsdGEgPSB0IC0gcHJldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKChvcCA9PSAwID8gImFkZCgiIDogInJvbGwoIikgKyBGSUVMRF9OQU1FW2ZpZWxkXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpIDwgbGltaXQgPyAiLCArMSkgPT4gIiA6ICIsIC0xKSA9PiAiKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuWUVBUikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIgKyAoY2FsLmdldChDYWxlbmRhci5NT05USCkgKyAxKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiArIGNhbC5nZXQoQ2FsZW5kYXIuREFURSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBjYWwuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6IiArIGNhbC5nZXQoQ2FsZW5kYXIuTUlOVVRFKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6IiArIGNhbC5nZXQoQ2FsZW5kYXIuU0VDT05EKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiArIGNhbC5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZWx0YT0iICsgZGVsdGEgKyAiIG1zIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQxNzQzNjEoKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbGVuZGFyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKDE5OTYsIDEsIDI5KTsKKworICAgICAgICBjYWxlbmRhci5hZGQoQ2FsZW5kYXIuTU9OVEgsIDEwKTsgCisgICAgICAgIERhdGUgZGF0ZTEgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisgICAgICAgIGRhdGUxID0gbnVsbDsKKyAgICAgICAgaW50IGQxID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisKKyAgICAgICAgY2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoMTk5NiwgMSwgMjkpOworICAgICAgICBjYWxlbmRhci5hZGQoQ2FsZW5kYXIuTU9OVEgsIDExKTsgCisgICAgICAgIERhdGUgZGF0ZTIgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisgICAgICAgIGRhdGUyID0gbnVsbDsKKyAgICAgICAgaW50IGQyID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisKKyAgICAgICAgaWYgKGQxICE9IGQyKSB7CisgICAgICAgICAgICBlcnJsbigiYWRkaW5nIG1vbnRocyB0byBGZWIgMjkgYnJva2VuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxlbmRhciBkb2VzIG5vdCB1cGRhdGUgZmllbGQgdmFsdWVzIHdoZW4gc2V0VGltZVpvbmUgaXMgY2FsbGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTc3NDg0KCkgeworICAgICAgICBUaW1lWm9uZSBQU1QgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisgICAgICAgIFRpbWVab25lIEVTVCA9IFRpbWVab25lLmdldFRpbWVab25lKCJFU1QiKTsKKworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShQU1QsIExvY2FsZS5VUyk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDE5OTksIDMsIDIxLCAxNSwgNSwgMCk7IC8vIEFyYml0cmFyeQorICAgICAgICBpbnQgaDEgPSBjYWwuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKTsKKyAgICAgICAgY2FsLnNldFRpbWVab25lKEVTVCk7CisgICAgICAgIGludCBoMiA9IGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOworICAgICAgICBpZiAoaDEgPT0gaDIpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBGaWVsZHMgbm90IHVwZGF0ZWQgYWZ0ZXIgc2V0VGltZVpvbmUiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGdldFRpbWUoKSBtdXN0IE5PVCBjaGFuZ2Ugd2hlbiB0aW1lIHpvbmUgaXMgY2hhbmdlZC4KKyAgICAgICAgLy8gZ2V0VGltZSgpIHJldHVybnMgem9uZS1pbmRlcGVuZGVudCB0aW1lIGluIG1zLgorICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldFRpbWVab25lKFBTVCk7CisgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIDEwKTsKKyAgICAgICAgRGF0ZSBwc3QxMCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGNhbC5zZXRUaW1lWm9uZShFU1QpOworICAgICAgICBEYXRlIGVzdDEwID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgaWYgKCFwc3QxMC5lcXVhbHMoZXN0MTApKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogc2V0VGltZVpvbmUgY2hhbmdlZCB0aW1lIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXZWVrIG9mIHllYXIgaXMgd3JvbmcgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHllYXIuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxOTc2OTkoKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBjYWwuc2V0Rmlyc3REYXlPZldlZWsoQ2FsZW5kYXIuTU9OREFZKTsKKyAgICAgICAgY2FsLnNldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoNCk7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkUgZGQgTU1NIHl5eXkgICdET1k9J0QgJ1dPWT0ndyIpOworICAgICAgICBmbXQuc2V0Q2FsZW5kYXIoY2FsKTsKKworICAgICAgICBpbnRbXSBEQVRBID0geworICAgICAgICAgICAgMjAwMCwgIENhbGVuZGFyLkpBTlVBUlksICAgMSwgICA1MiwKKyAgICAgICAgICAgIDIwMDEsICBDYWxlbmRhci5ERUNFTUJFUiwgIDMxLCAgMSwKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7ICkgeworICAgICAgICAgICAgY2FsLnNldChEQVRBW2krK10sIERBVEFbaSsrXSwgREFUQVtpKytdKTsKKyAgICAgICAgICAgIGludCBleHBXT1kgPSBEQVRBW2krK107CisgICAgICAgICAgICBpbnQgYWN0V09ZID0gY2FsLmdldChDYWxlbmRhci5XRUVLX09GX1lFQVIpOworICAgICAgICAgICAgaWYgKGV4cFdPWSA9PSBhY3RXT1kpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBmbXQuZm9ybWF0KGNhbC5nZXRUaW1lKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBmbXQuZm9ybWF0KGNhbC5nZXRUaW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgKyAiLCBleHBlY3RlZCBXT1k9IiArIGV4cFdPWSk7CisgICAgICAgICAgICAgICAgY2FsLmFkZChDYWxlbmRhci5EQVRFLCAtOCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPDE0OyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsLmFkZChDYWxlbmRhci5EQVRFLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nbG4oZm10LmZvcm1hdChjYWwuZ2V0VGltZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsZW5kYXIgREFZX09GX1dFRUtfSU5fTU9OVEggZmllbGRzLT50aW1lIGJyb2tlbi4gIFRoZSBwcm9ibGVtCisgICAgICogaXMgaW4gdGhlIGZpZWxkIGRpc2FtYmlndWF0aW9uIGNvZGUgaW4gR3JlZ29yaWFuQ2FsZW5kYXIuICBUaGlzCisgICAgICogY29kZSBpcyBzdXBwb3NlZCB0byBjaG9vc2UgdGhlIG1vc3QgcmVjZW50IHNldCBvZiBmaWVsZHMKKyAgICAgKiBhbW9uZyB0aGUgZm9sbG93aW5nOgorICAgICAqCisgICAgICogICBNT05USCArIERBWV9PRl9NT05USAorICAgICAqICAgTU9OVEggKyBXRUVLX09GX01PTlRIICsgREFZX09GX1dFRUsKKyAgICAgKiAgIE1PTlRIICsgREFZX09GX1dFRUtfSU5fTU9OVEggKyBEQVlfT0ZfV0VFSworICAgICAqICAgREFZX09GX1lFQVIKKyAgICAgKiAgIFdFRUtfT0ZfWUVBUiArIERBWV9PRl9XRUVLCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQyMDkwNzEoKSB7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisKKyAgICAgICAgLy8gR2VuZXJhbCBmaWVsZCBzZXR0aW5nIHRlc3QKKyAgICAgICAgaW50IFkgPSAxOTk1OworICAgICAgICAKKyAgICAgICAgRGF0ZSBkW10gPSBuZXcgRGF0ZVsxM107CisgICAgICAgIGphdmEudXRpbC5DYWxlbmRhciB0ZW1wY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIHRlbXBjYWwuY2xlYXIoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoWSwgQ2FsZW5kYXIuSkFOVUFSWSwgMSk7CisgICAgICAgIGRbMF0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoWSwgQ2FsZW5kYXIuTUFSQ0gsIDEpOworICAgICAgICBkWzFdID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KFksIENhbGVuZGFyLkpBTlVBUlksIDQpOworICAgICAgICBkWzJdID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KFksIENhbGVuZGFyLkpBTlVBUlksIDE4KTsKKyAgICAgICAgZFszXSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldChZLCBDYWxlbmRhci5KQU5VQVJZLCAxOCk7CisgICAgICAgIGRbNF0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoWS0xLCBDYWxlbmRhci5ERUNFTUJFUiwgMjIpOworICAgICAgICBkWzVdID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KFksIENhbGVuZGFyLkpBTlVBUlksIDI2KTsKKyAgICAgICAgZFs2XSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldChZLCBDYWxlbmRhci5KQU5VQVJZLCAyNik7CisgICAgICAgIGRbN10gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoWSwgQ2FsZW5kYXIuTUFSQ0gsIDEpOworICAgICAgICBkWzhdID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KFksIENhbGVuZGFyLk9DVE9CRVIsIDYpOworICAgICAgICBkWzldID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KFksIENhbGVuZGFyLk9DVE9CRVIsIDEzKTsKKyAgICAgICAgZFsxMF0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoWSwgQ2FsZW5kYXIuQVVHVVNULCAxMCk7CisgICAgICAgIGRbMTFdID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KFksIENhbGVuZGFyLkRFQ0VNQkVSLCA3KTsKKyAgICAgICAgZFsxMl0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKworICAgICAgICBPYmplY3RbXSBGSUVMRF9EQVRBID0geworICAgICAgICAgICAgLy8gQWRkIG5ldyB0ZXN0IGNhc2VzIGFzIG5lZWRlZC4KKworICAgICAgICAgICAgLy8gMAorICAgICAgICAgICAgbmV3IGludFtdIHt9LCBkWzBdLAorICAgICAgICAgICAgLy8gMQorICAgICAgICAgICAgbmV3IGludFtdIHsgQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLk1BUkNIIH0sIGRbMV0sCisgICAgICAgICAgICAvLyAyCisgICAgICAgICAgICBuZXcgaW50W10geyBDYWxlbmRhci5EQVlfT0ZfV0VFSywgQ2FsZW5kYXIuV0VETkVTREFZIH0sIGRbMl0sCisgICAgICAgICAgICAvLyAzCisgICAgICAgICAgICBuZXcgaW50W10geyBDYWxlbmRhci5EQVlfT0ZfV0VFSywgQ2FsZW5kYXIuVEhVUlNEQVksCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDE4LCB9LCBkWzNdLAorICAgICAgICAgICAgLy8gNAorICAgICAgICAgICAgbmV3IGludFtdIHsgQ2FsZW5kYXIuREFZX09GX01PTlRILCAxOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLkRBWV9PRl9XRUVLLCBDYWxlbmRhci5USFVSU0RBWSwgfSwgZFs0XSwKKyAgICAgICAgICAgIC8vIDUgIChXT00gLTEgaXMgaW4gcHJldmlvdXMgbW9udGgpCisgICAgICAgICAgICBuZXcgaW50W10geyBDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuV0VFS19PRl9NT05USCwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFSywgQ2FsZW5kYXIuVEhVUlNEQVksIH0sIGRbNV0sCisgICAgICAgICAgICAvLyA2CisgICAgICAgICAgICBuZXcgaW50W10geyBDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuV0VFS19PRl9NT05USCwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLkRBWV9PRl9XRUVLLCBDYWxlbmRhci5USFVSU0RBWSwgfSwgZFs2XSwKKyAgICAgICAgICAgIC8vIDcgIChESU0gLTEgaXMgaW4gc2FtZSBtb250aCkKKyAgICAgICAgICAgIG5ldyBpbnRbXSB7IENhbGVuZGFyLkRBWV9PRl9NT05USCwgMTgsCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFS19JTl9NT05USCwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFSywgQ2FsZW5kYXIuVEhVUlNEQVksIH0sIGRbN10sCisgICAgICAgICAgICAvLyA4CisgICAgICAgICAgICBuZXcgaW50W10geyBDYWxlbmRhci5XRUVLX09GX1lFQVIsIDksCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFSywgQ2FsZW5kYXIuV0VETkVTREFZLCB9LCBkWzhdLAorICAgICAgICAgICAgLy8gOQorICAgICAgICAgICAgbmV3IGludFtdIHsgQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLk9DVE9CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFS19JTl9NT05USCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLkRBWV9PRl9XRUVLLCBDYWxlbmRhci5GUklEQVksIH0sIGRbOV0sCisgICAgICAgICAgICAvLyAxMAorICAgICAgICAgICAgbmV3IGludFtdIHsgQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLk9DVE9CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5XRUVLX09GX01PTlRILCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuREFZX09GX1dFRUssIENhbGVuZGFyLkZSSURBWSwgfSwgZFsxMF0sCisgICAgICAgICAgICAvLyAxMQorICAgICAgICAgICAgbmV3IGludFtdIHsgQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLk9DVE9CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuREFZX09GX1lFQVIsIDIyMiwgfSwgZFsxMV0sCisgICAgICAgICAgICAvLyAxMgorICAgICAgICAgICAgbmV3IGludFtdIHsgQ2FsZW5kYXIuREFZX09GX1dFRUssIENhbGVuZGFyLlRIVVJTREFZLAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkRFQ0VNQkVSLCB9LCBkWzEyXSwKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8RklFTERfREFUQS5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgIGludFtdIGZpZWxkcyA9IChpbnRbXSkgRklFTERfREFUQVtpXTsKKyAgICAgICAgICAgIERhdGUgZXhwID0gKERhdGUpIEZJRUxEX0RBVEFbaSsxXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLllFQVIsIFkpOworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGZpZWxkcy5sZW5ndGg7IGorPTIpIHsKKyAgICAgICAgICAgICAgICBjYWwuc2V0KGZpZWxkc1tqXSwgZmllbGRzW2orMV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBEYXRlIGFjdCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICBpZiAoIWFjdC5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBUZXN0ICIgKyAoaS8yKSArICIgZ290ICIgKyBhY3QgKworICAgICAgICAgICAgICAgICAgICAgICIsIHdhbnQgIiArIGV4cCArCisgICAgICAgICAgICAgICAgICAgICAgIiAoc2VlIHRlc3QvamF2YS91dGlsL0NhbGVuZGFyL0NhbGVuZGFyUmVncmVzc2lvbi5qYXZhIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCBDYWxlbmRhci5KQU5VQVJZLCA1KTsKKyAgICAgICAgZFswXSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCBDYWxlbmRhci5KQU5VQVJZLCAyNik7CisgICAgICAgIGRbMV0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5NywgQ2FsZW5kYXIuRkVCUlVBUlksIDIzKTsKKyAgICAgICAgZFsyXSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCBDYWxlbmRhci5KQU5VQVJZLCAyNik7CisgICAgICAgIGRbM10gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5NywgQ2FsZW5kYXIuSkFOVUFSWSwgNSk7CisgICAgICAgIGRbNF0gPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5NiwgQ2FsZW5kYXIuREVDRU1CRVIsIDgpOworICAgICAgICBkWzVdID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIC8vIFRlc3Qgc3BlY2lmaWMgZmFpbHVyZSByZXBvcnRlZCBpbiBidWcKKyAgICAgICAgT2JqZWN0W10gREFUQSA9IHsgCisgICAgICAgICAgICBuZXcgSW50ZWdlcigxKSwgZFswXSwgbmV3IEludGVnZXIoNCksIGRbMV0sCisgICAgICAgICAgICBuZXcgSW50ZWdlcig4KSwgZFsyXSwgbmV3IEludGVnZXIoLTEpLCBkWzNdLAorICAgICAgICAgICAgbmV3IEludGVnZXIoLTQpLCBkWzRdLCBuZXcgSW50ZWdlcigtOCksIGRbNV0sCisgICAgICAgIH07CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MikgeworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLX0lOX01PTlRILAorICAgICAgICAgICAgICAgICAgICAoKE51bWJlcikgREFUQVtpXSkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLLCBDYWxlbmRhci5TVU5EQVkpOworICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5NT05USCwgQ2FsZW5kYXIuSkFOVUFSWSk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLllFQVIsIDE5OTcpOworICAgICAgICAgICAgRGF0ZSBhY3R1YWwgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICAgICAgaWYgKCFhY3R1YWwuZXF1YWxzKERBVEFbaSsxXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogU3VuZGF5ICIgKyBEQVRBW2ldICsKKyAgICAgICAgICAgICAgICAgICAgICAiIG9mIEphbiAxOTk3IC0+ICIgKyBhY3R1YWwgKworICAgICAgICAgICAgICAgICAgICAgICIsIHdhbnQgIiArIERBVEFbaSsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXRUVLX09GX1lFQVIgY29tcHV0ZWQgaW5jb3JyZWN0bHkuICBBIGZhaWx1cmUgb2YgdGhpcyB0ZXN0IGNhbiBpbmRpY2F0ZQorICAgICAqIGEgcHJvYmxlbSBpbiBzZXZlcmFsIGRpZmZlcmVudCBwbGFjZXMgaW4gdGhlIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0Mjg4NzkyKCkgdGhyb3dzIEV4Y2VwdGlvbiAKKyAgICB7CisJVGltZVpvbmUgc2F2ZWRUWiA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKKwlUaW1lWm9uZS5zZXREZWZhdWx0KFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSk7CisJR3JlZ29yaWFuQ2FsZW5kYXIgY2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIAorCWZvciAoaW50IGkgPSAxOTAwOyBpIDwgMjEwMDsgaSsrKSB7CisJICAgIGZvciAoaW50IGoxID0gMTsgajEgPD0gNzsgajErKykgeworCQkvLyBMb29wIGZvciBNaW5pbWFsRGF5c0luRmlyc3RXZWVrOiAxLi43CisJCWZvciAoaW50IGogPSBDYWxlbmRhci5TVU5EQVk7IGogPD0gQ2FsZW5kYXIuU0FUVVJEQVk7IGorKykgeworCQkgICAgLy8gTG9vcCBmb3IgRmlyc3REYXlPZldlZWs6IFNVTkRBWS4uU0FUVVJEQVkKKwkJICAgIGNhbC5jbGVhcigpOworCQkgICAgY2FsLnNldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoajEpOworCQkgICAgY2FsLnNldEZpcnN0RGF5T2ZXZWVrKGopOworICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGNhbGVuZGFyIHRvIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGxhc3Qgd2VlaworICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgeWVhci4gIFRoaXMgbWF5IG92ZXJsYXAgc29tZSBvZiB0aGUgc3RhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgeWVhcjsgdGhhdCBpcywgdGhlIGxhc3Qgd2VlayBvZiAxOTk5IG1heQorICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIHNvbWUgb2YgSmFudWFyeSAyMDAwLiAgVXNlIHRoZSBhZGQoKSBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgLy8gdG8gYWR2YW5jZSB0aHJvdWdoIHRoZSB3ZWVrLiAgRm9yIGVhY2ggZGF5LCBjYWxsCisgICAgICAgICAgICAgICAgICAgIC8vIGdldChXRUVLX09GX1lFQVIpLiAgVGhlIHJlc3VsdCBzaG91bGQgYmUgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSB3aG9sZSB3ZWVrLiAgTm90ZSB0aGF0IGEgYnVnIGluCisgICAgICAgICAgICAgICAgICAgIC8vIGdldEFjdHVhbE1heGltdW0oKSB3aWxsIGJyZWFrIHRoaXMgdGVzdC4KKwkJICAgIGNhbC5zZXQoQ2FsZW5kYXIuWUVBUiwgaSk7CisJCSAgICBpbnQgbWF4V2VlayA9IGNhbC5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLldFRUtfT0ZfWUVBUik7CisJCSAgICBjYWwuc2V0KENhbGVuZGFyLldFRUtfT0ZfWUVBUiwgbWF4V2Vlayk7CisJCSAgICBjYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLLCBqKTsKKwkJICAgIGZvciAoaW50IGsgPSAxOyBrIDwgNzsgaysrKSB7CisJCQljYWwuYWRkKENhbGVuZGFyLkRBVEUsIDEpOworCQkJaW50IFdPWSA9IGNhbC5nZXQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSKTsKKwkJCWlmIChXT1kgIT0gbWF4V2VlaykgeworCQkJICAgIGVycmxuKGNhbC5nZXRUaW1lKCkgKyAiLGdvdD0iICsgV09ZCisJCQkJICArICIsZXhwZWN0ZWQ9IiArIG1heFdlZWsgCisJCQkJICArICIsbWluPSIgKyBqMSArICIsZmlyc3Q9IiArIGopOworCQkJfQorCQkgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBOb3cgYWR2YW5jZSB0aGUgY2FsZW5kYXIgb25lIG1vcmUgZGF5LiAgVGhpcyBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gcHV0IGl0IGF0IHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAxIG9mIHRoZSBuZXh0IHllYXIuCisJCSAgICBjYWwuYWRkKENhbGVuZGFyLkRBVEUsIDEpOworCQkgICAgaW50IFdPWSA9IGNhbC5nZXQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSKTsKKwkJICAgIGlmIChXT1kgIT0gMSkgeworCQkJZXJybG4oY2FsLmdldFRpbWUoKSArICIsZ290PSIgKyBXT1kgCisJCQkgICAgICArICIsZXhwZWN0ZWQ9MSxtaW49IiArIGoxICsgIixmaXJzdCIgKyBqKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCVRpbWVab25lLnNldERlZmF1bHQoc2F2ZWRUWik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBmaWVsZERpZmZlcmVuY2UoKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SjQzOCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpbnQgREFUQVtdID0geworICAgICAgICAgICAgMjAwMCwgQ2FsZW5kYXIuSkFOVUFSWSwgMjAsICAgMjAxMCwgQ2FsZW5kYXIuSlVORSwgMTUsCisgICAgICAgICAgICAyMDEwLCBDYWxlbmRhci5KVU5FLCAxNSwgICAgICAyMDAwLCBDYWxlbmRhci5KQU5VQVJZLCAyMCwKKyAgICAgICAgICAgIDE5NjQsIENhbGVuZGFyLlNFUFRFTUJFUiwgNywgIDE5OTksIENhbGVuZGFyLkpVTkUsIDQsCisgICAgICAgICAgICAxOTk5LCBDYWxlbmRhci5KVU5FLCA0LCAgICAgICAxOTY0LCBDYWxlbmRhci5TRVBURU1CRVIsIDcsCisgICAgICAgIH07CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9NikgeworICAgICAgICAgICAgaW50IHkxID0gREFUQVtpXTsKKyAgICAgICAgICAgIGludCBtMSA9IERBVEFbaSsxXTsKKyAgICAgICAgICAgIGludCBkMSA9IERBVEFbaSsyXTsKKyAgICAgICAgICAgIGludCB5MiA9IERBVEFbaSszXTsKKyAgICAgICAgICAgIGludCBtMiA9IERBVEFbaSs0XTsKKyAgICAgICAgICAgIGludCBkMiA9IERBVEFbaSs1XTsKKworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KHkxLCBtMSwgZDEpOworICAgICAgICAgICAgRGF0ZSBkYXRlMSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICBjYWwuc2V0KHkyLCBtMiwgZDIpOworICAgICAgICAgICAgRGF0ZSBkYXRlMiA9IGNhbC5nZXRUaW1lKCk7CisKKyAgICAgICAgICAgIGNhbC5zZXRUaW1lKGRhdGUxKTsKKyAgICAgICAgICAgIGludCBkeSA9IGNhbC5maWVsZERpZmZlcmVuY2UoZGF0ZTIsIENhbGVuZGFyLllFQVIpOworICAgICAgICAgICAgaW50IGRtID0gY2FsLmZpZWxkRGlmZmVyZW5jZShkYXRlMiwgQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICAgICAgaW50IGRkID0gY2FsLmZpZWxkRGlmZmVyZW5jZShkYXRlMiwgQ2FsZW5kYXIuREFURSk7CisKKyAgICAgICAgICAgIGxvZ2xuKCIiICsgZGF0ZTIgKyAiIC0gIiArIGRhdGUxICsgIiA9ICIgKworICAgICAgICAgICAgICAgICAgZHkgKyAieSAiICsgZG0gKyAibSAiICsgZGQgKyAiZCIpOworCisgICAgICAgICAgICBjYWwuc2V0VGltZShkYXRlMSk7CisgICAgICAgICAgICBjYWwuYWRkKENhbGVuZGFyLllFQVIsIGR5KTsKKyAgICAgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuTU9OVEgsIGRtKTsKKyAgICAgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgZGQpOworICAgICAgICAgICAgRGF0ZSBkYXRlMjIgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICAgICAgaWYgKCFkYXRlMi5lcXVhbHMoZGF0ZTIyKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgZGF0ZTEgKyAiICsgIiArCisgICAgICAgICAgICAgICAgICAgICAgZHkgKyAieSAiICsgZG0gKyAibSAiICsgZGQgKyAiZCA9ICIgKworICAgICAgICAgICAgICAgICAgICAgIGRhdGUyMiArICIsIGV4cCAiICsgZGF0ZTIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBkYXRlMSArICIgKyAiICsKKyAgICAgICAgICAgICAgICAgICAgICBkeSArICJ5ICIgKyBkbSArICJtICIgKyBkZCArICJkID0gIiArCisgICAgICAgICAgICAgICAgICAgICAgZGF0ZTIyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCBiZWhhdmlvciBvZiBEU1RfT0ZGU0VUIGZpZWxkLiAgSUNVNEogSml0dGVyYnVnIDkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEo5KCkgeworICAgICAgICBpbnQgSE9VUlMgPSA2MCo2MCoxMDAwOworICAgICAgICBDYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlLlVTKTsKKworICAgICAgICBmaW5hbCBpbnQgRU5EX0ZJRUxEUyA9IDB4MTIzNDsKKworICAgICAgICBpbnRbXSBEQVRBID0geworICAgICAgICAgICAgLy8gV2l0aCBubyBleHBsaWNpdCBaT05FL0RTVCBleHBlY3QgMTI6MDAgYW0KKyAgICAgICAgICAgIENhbGVuZGFyLk1PTlRILCBDYWxlbmRhci5KVU5FLAorICAgICAgICAgICAgRU5EX0ZJRUxEUywKKyAgICAgICAgICAgIDAsIDAsIC8vIGV4cGVjdGVkIGhvdXIsIG1pbgorCisgICAgICAgICAgICAvLyBOb3JtYWwgWk9ORS9EU1QgZm9yIEp1bmUgMSBQYWNpZmljIGlzIDg6MDAvMTowMAorICAgICAgICAgICAgQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkpVTkUsCisgICAgICAgICAgICBDYWxlbmRhci5aT05FX09GRlNFVCwgLTgqSE9VUlMsCisgICAgICAgICAgICBDYWxlbmRhci5EU1RfT0ZGU0VULCBIT1VSUywKKyAgICAgICAgICAgIEVORF9GSUVMRFMsCisgICAgICAgICAgICAwLCAwLCAvLyBleHBlY3RlZCBob3VyLCBtaW4KKworICAgICAgICAgICAgLy8gV2l0aCBaT05FL0RTVCBvZiA4OjAwLzA6MzAgZXhwZWN0IHRpbWUgb2YgMTI6MzAgYW0KKyAgICAgICAgICAgIENhbGVuZGFyLk1PTlRILCBDYWxlbmRhci5KVU5FLAorICAgICAgICAgICAgQ2FsZW5kYXIuWk9ORV9PRkZTRVQsIC04KkhPVVJTLAorICAgICAgICAgICAgQ2FsZW5kYXIuRFNUX09GRlNFVCwgSE9VUlMvMiwKKyAgICAgICAgICAgIEVORF9GSUVMRFMsCisgICAgICAgICAgICAwLCAzMCwgLy8gZXhwZWN0ZWQgaG91ciwgbWluCisKKyAgICAgICAgICAgIC8vIFdpdGggWk9ORS9EU1Qgb2YgODowMC9VTlNFVCBleHBlY3QgdGltZSBvZiAxOjAwIGFtCisgICAgICAgICAgICBDYWxlbmRhci5NT05USCwgQ2FsZW5kYXIuSlVORSwKKyAgICAgICAgICAgIENhbGVuZGFyLlpPTkVfT0ZGU0VULCAtOCpIT1VSUywKKyAgICAgICAgICAgIEVORF9GSUVMRFMsCisgICAgICAgICAgICAxLCAwLCAvLyBleHBlY3RlZCBob3VyLCBtaW4KKworICAgICAgICAgICAgLy8gV2l0aCBaT05FL0RTVCBvZiBVTlNFVC8wOjMwIGV4cGVjdCA0OjMwIHBtIChkYXkgYmVmb3JlKQorICAgICAgICAgICAgQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkpVTkUsCisgICAgICAgICAgICBDYWxlbmRhci5EU1RfT0ZGU0VULCBIT1VSUy8yLAorICAgICAgICAgICAgRU5EX0ZJRUxEUywKKyAgICAgICAgICAgIDE2LCAzMCwgLy8gZXhwZWN0ZWQgaG91ciwgbWluCisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyApIHsKKyAgICAgICAgICAgIGludCBzdGFydCA9IGk7CisgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKworICAgICAgICAgICAgLy8gU2V0IGZpZWxkcworICAgICAgICAgICAgd2hpbGUgKERBVEFbaV0gIT0gRU5EX0ZJRUxEUykgeworICAgICAgICAgICAgICAgIGNhbC5zZXQoREFUQVtpKytdLCBEQVRBW2krK10pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpOyAvLyBza2lwIG92ZXIgRU5EX0ZJRUxEUworCisgICAgICAgICAgICAvLyBHZXQgaG91ci9taW51dGUKKyAgICAgICAgICAgIGludCBoID0gY2FsLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSk7CisgICAgICAgICAgICBpbnQgbSA9IGNhbC5nZXQoQ2FsZW5kYXIuTUlOVVRFKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sKKyAgICAgICAgICAgIGlmIChoICE9IERBVEFbaV0gfHwgbSAhPSBEQVRBW2krMV0pIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogZXhwZWN0ZWQgIiArIERBVEFbaV0gKyAiOiIgKyBEQVRBW2krMV0gKworICAgICAgICAgICAgICAgICAgICAgICIsIGdvdCAiICsgaCArICI6IiArIG0gKyAiIGFmdGVyOiIpOworICAgICAgICAgICAgICAgIHdoaWxlIChEQVRBW3N0YXJ0XSAhPSBFTkRfRklFTERTKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJzZXQoIiArIEZJRUxEX05BTUVbREFUQVtzdGFydCsrXV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiICsgREFUQVtzdGFydCsrXSArICIpOyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaSArPSAyOyAvLyBza2lwIG92ZXIgZXhwZWN0ZWQgaG91ciwgbWluCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEYXRlRm9ybWF0IGNsYXNzIG1pc3Rha2VzIGRhdGUgc3R5bGUgYW5kIHRpbWUgc3R5bGUgYXMgZm9sbG93czoKKyAgICAgKiAtIERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSB0YWtlcyBkYXRlIHN0eWxlIGFzIHRpbWUKKyAgICAgKiBzdHlsZSwgYW5kIHRpbWUgc3R5bGUgYXMgZGF0ZSBzdHlsZQorICAgICAqIC0gSWYgYSBDYWxlbmRhciBpcyBwYXNzZWQgdG8KKyAgICAgKiBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSwgaXQgcmV0dXJucyB0aW1lIGluc3RhbmNlCisgICAgICogLSBJZiBhIENhbGVuZGFyCisgICAgICogaXMgcGFzc2VkIHRvIERhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlLCBpdCByZXR1cm5zIGRhdGUgaW5zdGFuY2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0RGF0ZUZvcm1hdEZhY3RvcnlKMjYoKSB7CisgICAgICAgIFRpbWVab25lIHpvbmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBMb2NhbGUgbG9jID0gTG9jYWxlLlVTOworICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChUaW1lWm9uZS5nZXRUaW1lWm9uZSgiQW1lcmljYS9Mb3NfQW5nZWxlcyIpKTsKKyAgICAgICAgICAgIGphdmEudXRpbC5DYWxlbmRhciB0ZW1wY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgICAgICB0ZW1wY2FsLnNldCgyMDAxICsgMTkwMCwgQ2FsZW5kYXIuQVBSSUwsIDUsIDE3LCA0MywgNTMpOworICAgICAgICAgICAgRGF0ZSBkYXRlID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2MpOworICAgICAgICAgICAgT2JqZWN0W10gREFUQSA9IHsKKyAgICAgICAgICAgICAgICBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LlNIT1JULCBsb2MpLAorICAgICAgICAgICAgICAgICJEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LlNIT1JULCBsb2MpIiwKKyAgICAgICAgICAgICAgICAiNC81LzAxIiwKKworICAgICAgICAgICAgICAgIERhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKERhdGVGb3JtYXQuU0hPUlQsIGxvYyksCisgICAgICAgICAgICAgICAgIkRhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKERhdGVGb3JtYXQuU0hPUlQsIGxvYykiLAorICAgICAgICAgICAgICAgICI1OjQzIFBNIiwKKworICAgICAgICAgICAgICAgIERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIERhdGVGb3JtYXQuU0hPUlQsIGxvYyksCisgICAgICAgICAgICAgICAgIkRhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIERhdGVGb3JtYXQuU0hPUlQsIGxvYykiLAorICAgICAgICAgICAgICAgICJGcmlkYXksIEFwcmlsIDUsIDM5MDEgNTo0MyBQTSIsCisKKyAgICAgICAgICAgICAgICBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShjYWwsIERhdGVGb3JtYXQuU0hPUlQsIGxvYyksCisgICAgICAgICAgICAgICAgIkRhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5TSE9SVCwgbG9jKSIsCisgICAgICAgICAgICAgICAgIjQvNS8wMSIsCisKKyAgICAgICAgICAgICAgICBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZShjYWwsIERhdGVGb3JtYXQuU0hPUlQsIGxvYyksCisgICAgICAgICAgICAgICAgIkRhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5TSE9SVCwgbG9jKSIsCisgICAgICAgICAgICAgICAgIjU6NDMgUE0iLAorCisgICAgICAgICAgICAgICAgRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5GVUxMLCBEYXRlRm9ybWF0LlNIT1JULCBsb2MpLAorICAgICAgICAgICAgICAgICJEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoY2FsLCBEYXRlRm9ybWF0LkZVTEwsIERhdGVGb3JtYXQuU0hPUlQsIGxvYykiLAorICAgICAgICAgICAgICAgICJGcmlkYXksIEFwcmlsIDUsIDM5MDEgNTo0MyBQTSIsCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWwuZ2V0RGF0ZVRpbWVGb3JtYXQoRGF0ZUZvcm1hdC5TSE9SVCwgRGF0ZUZvcm1hdC5GVUxMLCBsb2MpLAorICAgICAgICAgICAgICAgICJjYWwuZ2V0RGF0ZVRpbWVGb3JtYXQoRGF0ZUZvcm1hdC5TSE9SVCwgRGF0ZUZvcm1hdC5GVUxMLCBsb2MpIiwKKyAgICAgICAgICAgICAgICAiNC81LzAxIDU6NDM6NTMgUE0gUFNUIiwKKworICAgICAgICAgICAgICAgIGNhbC5nZXREYXRlVGltZUZvcm1hdChEYXRlRm9ybWF0LkZVTEwsIERhdGVGb3JtYXQuU0hPUlQsIGxvYyksCisgICAgICAgICAgICAgICAgImNhbC5nZXREYXRlVGltZUZvcm1hdChEYXRlRm9ybWF0LkZVTEwsIERhdGVGb3JtYXQuU0hPUlQsIGxvYykiLAorICAgICAgICAgICAgICAgICJGcmlkYXksIEFwcmlsIDUsIDM5MDEgNTo0MyBQTSIsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0zKSB7CisgICAgICAgICAgICAgICAgRGF0ZUZvcm1hdCBkZiA9IChEYXRlRm9ybWF0KSBEQVRBW2ldOworICAgICAgICAgICAgICAgIFN0cmluZyBkZXNjID0gKFN0cmluZykgREFUQVtpKzFdOworICAgICAgICAgICAgICAgIFN0cmluZyBleHAgPSAoU3RyaW5nKSBEQVRBW2krMl07CisgICAgICAgICAgICAgICAgU3RyaW5nIGdvdCA9IGRmLmZvcm1hdChkYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoZ290LmVxdWFscyhleHApKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogIiArIGRlc2MgKyAiID0+ICIgKyBnb3QpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgZGVzYyArICIgPT4gIiArIGdvdCArICIsIGV4cGVjdGVkICIgKyBleHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQoem9uZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0UmVnaXN0cmF0aW9uKCkgeworICAgICAgICAvKgorICAgICAgICBTZXQgbmFtZXMgPSBDYWxlbmRhci5nZXRDYWxlbmRhckZhY3RvcnlOYW1lcygpOworCisgICAgICAgIFRpbWVab25lIHR6ID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOworICAgICAgICBMb2NhbGUgbG9jID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IG5hbWVzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgbG9nbG4oIlRlc3RpbmcgZmFjdG9yeTogIiArIG5hbWUpOworCisgICAgICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSh0eiwgbG9jLCBuYW1lKTsKKyAgICAgICAgICAgIGxvZ2xuKCJDYWxlbmRhciBjbGFzczogIiArIGNhbC5nZXRDbGFzcygpKTsKKworICAgICAgICAgICAgRGF0ZUZvcm1hdCBmbXQgPSBjYWwuZ2V0RGF0ZVRpbWVGb3JtYXQoRGF0ZUZvcm1hdC5MT05HLCBEYXRlRm9ybWF0LkxPTkcsIGxvYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvZ2xuKCJEYXRlOiAiICsgZm10LmZvcm1hdChjYWwuZ2V0VGltZSgpKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyByZWdpc3RlciBuZXcgZGVmYXVsdCBmb3Igb3VyIGxvY2FsZQorICAgICAgICBsb2dsbigiXG5UZXN0aW5nIHJlZ2lzdHJhdGlvbiIpOworICAgICAgICBsb2MgPSBuZXcgTG9jYWxlKCJlbiIsICJVUyIpOworICAgICAgICBPYmplY3Qga2V5ID0gQ2FsZW5kYXIucmVnaXN0ZXIoSmFwYW5lc2VDYWxlbmRhci5mYWN0b3J5KCksIGxvYywgdHJ1ZSk7CisKKyAgICAgICAgbG9jID0gbmV3IExvY2FsZSgiZW4iLCAiVVMiLCAiVEVTVCIpOworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2MpOworICAgICAgICBsb2dsbigiQ2FsZW5kYXIgY2xhc3M6ICIgKyBjYWwuZ2V0Q2xhc3MoKSk7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gY2FsLmdldERhdGVUaW1lRm9ybWF0KERhdGVGb3JtYXQuTE9ORywgRGF0ZUZvcm1hdC5MT05HLCBsb2MpOworICAgICAgICBsb2dsbigiRGF0ZTogIiArIGZtdC5mb3JtYXQoY2FsLmdldFRpbWUoKSkpOworCisgICAgICAgIC8vIGZvcmNlIHRvIHVzZSBvdGhlciBkZWZhdWx0IGFueXdheQorICAgICAgICBsb2dsbigiXG5PdmVycmlkZSByZWdpc3RyYXRpb24iKTsKKyAgICAgICAgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UodHosIGxvYywgIkdyZWdvcmlhbiIpOworICAgICAgICBmbXQgPSBjYWwuZ2V0RGF0ZVRpbWVGb3JtYXQoRGF0ZUZvcm1hdC5MT05HLCBEYXRlRm9ybWF0LkxPTkcsIGxvYyk7CisgICAgICAgIGxvZ2xuKCJEYXRlOiAiICsgZm10LmZvcm1hdChjYWwuZ2V0VGltZSgpKSk7CisKKyAgICAgICAgLy8gdW5yZWdpc3RlciBkZWZhdWx0CisgICAgICAgIGxvZ2xuKCJcblVucmVnaXN0cmF0aW9uIik7CisgICAgICAgIGxvZ2xuKCJVbnJlZ2lzdGVyIHJldHVybmVkOiAiICsgQ2FsZW5kYXIudW5yZWdpc3RlcihrZXkpKTsKKyAgICAgICAgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UodHosIGxvYywgIkdyZWdvcmlhbiIpOworICAgICAgICBmbXQgPSBjYWwuZ2V0RGF0ZVRpbWVGb3JtYXQoRGF0ZUZvcm1hdC5MT05HLCBEYXRlRm9ybWF0LkxPTkcsIGxvYyk7CisgICAgICAgIGxvZ2xuKCJEYXRlOiAiICsgZm10LmZvcm1hdChjYWwuZ2V0VGltZSgpKSk7CisgICAgICAgICovCisgICAgfQorfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0NhbGVuZGFyVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0NhbGVuZGFyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY5ODE2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ2FsZW5kYXJUZXN0LmphdmEKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9DYWxlbmRhclRlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTowNSAkIAorICogJFJldmlzaW9uOiAxLjEyICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworCisvKioKKyAqIEEgYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB0aGF0IHRlc3QgaW5kaXZpZHVhbCBDYWxlbmRhciBzdWJjbGFzc2VzLgorICogRGVmaW5lcyB2YXJpb3VzIHVzZWZ1bCB1dGlsaXR5IG1ldGhvZHMgYW5kIGNvbnN0YW50cworICovCitwdWJsaWMgY2xhc3MgQ2FsZW5kYXJUZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworICAgIAorICAgIC8vIENvbnN0YW50cyBmb3IgdXNlIGJ5IHN1YmNsYXNzZXMsIHNvbGVseSB0byBzYXZlIHR5cGluZworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNVTiA9IENhbGVuZGFyLlNVTkRBWTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNT04gPSBDYWxlbmRhci5NT05EQVk7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVFVFID0gQ2FsZW5kYXIuVFVFU0RBWTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXRUQgPSBDYWxlbmRhci5XRURORVNEQVk7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVEhVID0gQ2FsZW5kYXIuVEhVUlNEQVk7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRlJJID0gQ2FsZW5kYXIuRlJJREFZOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNBVCA9IENhbGVuZGFyLlNBVFVSREFZOworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRVJBICAgICA9IENhbGVuZGFyLkVSQTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBZRUFSICAgID0gQ2FsZW5kYXIuWUVBUjsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNT05USCAgID0gQ2FsZW5kYXIuTU9OVEg7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgREFURSAgICA9IENhbGVuZGFyLkRBVEU7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSE9VUiAgICA9IENhbGVuZGFyLkhPVVI7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTUlOVVRFICA9IENhbGVuZGFyLk1JTlVURTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBTRUNPTkQgID0gQ2FsZW5kYXIuU0VDT05EOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERPWSAgICAgPSBDYWxlbmRhci5EQVlfT0ZfWUVBUjsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXT1kgICAgID0gQ2FsZW5kYXIuV0VFS19PRl9ZRUFSOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdPTSAgICAgPSBDYWxlbmRhci5XRUVLX09GX01PTlRIOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERPVyAgICAgPSBDYWxlbmRhci5EQVlfT0ZfV0VFSzsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBET1dNICAgID0gQ2FsZW5kYXIuREFZX09GX1dFRUtfSU5fTU9OVEg7CisgICAgCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTaW1wbGVUaW1lWm9uZSBVVEMgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgIkdNVCIpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gRklFTERfTkFNRSA9IHsKKyAgICAgICAgIkVSQSIsICJZRUFSIiwgIk1PTlRIIiwgIldFRUtfT0ZfWUVBUiIsICJXRUVLX09GX01PTlRIIiwKKyAgICAgICAgIkRBWV9PRl9NT05USCIsICJEQVlfT0ZfWUVBUiIsICJEQVlfT0ZfV0VFSyIsCisgICAgICAgICJEQVlfT0ZfV0VFS19JTl9NT05USCIsICJBTV9QTSIsICJIT1VSIiwgIkhPVVJfT0ZfREFZIiwKKyAgICAgICAgIk1JTlVURSIsICJTRUNPTkQiLCAiTUlMTElTRUNPTkQiLCAiWk9ORV9PRkZTRVQiLAorICAgICAgICAiRFNUX09GRlNFVCIsICJZRUFSX1dPWSIsICJET1dfTE9DQUwiLCAiRVhURU5ERURfWUVBUiIsCisgICAgICAgICJKVUxJQU5fREFZIiwgIk1JTExJU0VDT05EU19JTl9EQVkiLAorICAgICAgICAiSVNfTEVBUF9NT05USCIgLy8gKENoaW5lc2VDYWxlbmRhciBvbmx5KQorICAgIH07CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBmaWVsZE5hbWUoaW50IGYpIHsKKyAgICAgICAgcmV0dXJuIChmPj0wICYmIGY8RklFTERfTkFNRS5sZW5ndGgpID8KKyAgICAgICAgICAgIEZJRUxEX05BTUVbZl0gOiAoIjxGaWVsZCAiICsgZiArICI+Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogSXRlcmF0ZXMgdGhyb3VnaCBhIGxpc3Qgb2YgY2FsZW5kYXIgPGNvZGU+VGVzdENhc2U8L2NvZGU+IG9iamVjdHMgYW5kCisgICAgICogbWFrZXMgc3VyZSB0aGF0IHRoZSB0aW1lLXRvLWZpZWxkcyBhbmQgZmllbGRzLXRvLXRpbWUgY2FsY3VsYXRpb25zIHdvcmsKKyAgICAgKiBjb3JyZW5jdGx5IGZvciB0aGUgdmFsdWVzIGluIGVhY2ggdGVzdCBjYXNlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRvVGVzdENhc2VzKFRlc3RDYXNlW10gY2FzZXMsIENhbGVuZGFyIGNhbCkKKyAgICB7CisgICAgICAgIGNhbC5zZXRUaW1lWm9uZShVVEMpOworICAgICAgICAKKyAgICAgICAgLy8gR2V0IGEgZm9ybWF0IHRvIHVzZSBmb3IgcHJpbnRpbmcgZGF0ZXMgaW4gdGhlIGNhbGVuZGFyIHN5c3RlbSB3ZSdyZSB0ZXN0aW5nCisgICAgICAgIERhdGVGb3JtYXQgZm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5TSE9SVCwgLTEsIExvY2FsZS5nZXREZWZhdWx0KCkpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBwYXR0ZXJuID0gKGNhbCBpbnN0YW5jZW9mIENoaW5lc2VDYWxlbmRhcikgPworICAgICAgICAgICAgIkUgTU1sL2RkL3kgRyBISDptbTpzcy5TIHoiIDoKKyAgICAgICAgICAgICJFLCBNTS9kZC95eXl5IEcgSEg6bW06c3MuUyB6IjsKKyAgICAKKyAgICAgICAgKChTaW1wbGVEYXRlRm9ybWF0KWZvcm1hdCkuYXBwbHlQYXR0ZXJuKHBhdHRlcm4pOworCisgICAgICAgIC8vIFRoaXMgZm9ybWF0IGlzIHVzZWQgZm9yIHByaW50aW5nIEdyZWdvcmlhbiBkYXRlcy4KKyAgICAgICAgRGF0ZUZvcm1hdCBncmVnRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocGF0dGVybik7CisgICAgICAgIGdyZWdGb3JtYXQuc2V0VGltZVpvbmUoVVRDKTsKKworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBwdXJlR3JlZyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihVVEMpOworICAgICAgICBwdXJlR3JlZy5zZXRHcmVnb3JpYW5DaGFuZ2UobmV3IERhdGUoTG9uZy5NSU5fVkFMVUUpKTsKKyAgICAgICAgRGF0ZUZvcm1hdCBwdXJlR3JlZ0ZtdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFIE0vZC95eXl5IEciKTsKKyAgICAgICAgcHVyZUdyZWdGbXQuc2V0Q2FsZW5kYXIocHVyZUdyZWcpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGl0ZXJhdGUgdGhyb3VnaCB0aGUgdGVzdCBjYXNlcyBhbmQgc2VlIHdoYXQgaGFwcGVucworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhc2VzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBUZXN0Q2FzZSB0ZXN0ID0gY2FzZXNbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBGaXJzdCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBtaWxsaXMgLT4gZmllbGRzIGNhbGN1bGF0aW9uIHdvcmtzCisgICAgICAgICAgICAvLyB0ZXN0LmFwcGx5VGltZSB3aWxsIGNhbGwgc2V0VGltZSgpIG9uIHRoZSBjYWxlbmRhciBvYmplY3QsIGFuZAorICAgICAgICAgICAgLy8gdGVzdC5maWVsZHNFcXVhbCB3aWxsIHJldHJpZXZlIGFsbCBvZiB0aGUgZmllbGQgdmFsdWVzIGFuZCBtYWtlIHN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgdGhleSdyZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBpbiB0aGUgdGVzdGNhc2UKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB0ZXN0LmFwcGx5VGltZShjYWwpOworICAgICAgICAgICAgaWYgKCF0ZXN0LmZpZWxkc0VxdWFsKGNhbCwgdGhpcykpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogKG1pbGxpcz0+ZmllbGRzKSAiICsKKyAgICAgICAgICAgICAgICAgICAgICBncmVnRm9ybWF0LmZvcm1hdCh0ZXN0LmdldFRpbWUoKSkgKyAiID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5mb3JtYXQoY2FsLmdldFRpbWUoKSkgKworICAgICAgICAgICAgICAgICAgICAgICIsIGV4cGVjdGVkICIgKyB0ZXN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIElmIHRoYXQgd2FzIE9LLCBjaGVjayB0aGUgZmllbGRzIC0+IG1pbGxpcyBjYWxjdWxhdGlvbgorICAgICAgICAgICAgLy8gdGVzdC5hcHBseUZpZWxkcyB3aWxsIHNldCBhbGwgb2YgdGhlIGNhbGVuZGFyJ3MgZmllbGRzIHRvIAorICAgICAgICAgICAgLy8gbWF0Y2ggdGhvc2UgaW4gdGhlIHRlc3QgY2FzZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIHRlc3QuYXBwbHlGaWVsZHMoY2FsKTsKKyAgICAgICAgICAgIGlmICghdGVzdC5lcXVhbHMoY2FsKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiAoZmllbGRzPT5taWxsaXMpICIgKyB0ZXN0ICsgIiA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICBwdXJlR3JlZ0ZtdC5mb3JtYXQoY2FsLmdldFRpbWUoKSkgKworICAgICAgICAgICAgICAgICAgICAgICIsIGV4cGVjdGVkICIgKyBwdXJlR3JlZ0ZtdC5mb3JtYXQodGVzdC5nZXRUaW1lKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIGJvb2xlYW4gUk9MTCA9IHRydWU7CisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBib29sZWFuIEFERCA9IGZhbHNlOworICAgIAorICAgIC8qKgorICAgICAqIFByb2Nlc3MgdGVzdCBjYXNlcyBmb3IgPGNvZGU+YWRkPC9jb2RlPiBhbmQgPGNvZGU+cm9sbDwvY29kZT4gbWV0aG9kcy4KKyAgICAgKiBFYWNoIHRlc3QgY2FzZSBpcyBhbiBhcnJheSBvZiBpbnRlZ2VycywgYXMgZm9sbG93czoKKyAgICAgKiA8dWw+CisgICAgICogIDxsaT4wOiBpbnB1dCB5ZWFyCisgICAgICogIDxsaT4xOiAgICAgICBtb250aCAgKHplcm8tYmFzZWQpCisgICAgICogIDxsaT4yOiAgICAgICBkYXkKKyAgICAgKiAgPGxpPjM6IGZpZWxkIHRvIHJvbGwgb3IgYWRkIHRvCisgICAgICogIDxsaT40OiBhbW91bnQgdG8gcm9sbCBvciBhZGQKKyAgICAgKiAgPGxpPjU6IHJlc3VsdCB5ZWFyCisgICAgICogIDxsaT42OiAgICAgICAgbW9udGggKHplcm8tYmFzZWQpCisgICAgICogIDxsaT43OiAgICAgICAgZGF5CisgICAgICogPC91bD4KKyAgICAgKiBGb3IgZXhhbXBsZToKKyAgICAgKiA8cHJlPgorICAgICAqICAgLy8gICAgICAgaW5wdXQgICAgICAgICAgICAgICAgYWRkIGJ5ICAgICAgICAgIG91dHB1dAorICAgICAqICAgLy8gIHllYXIgIG1vbnRoICAgICBkYXkgICAgIGZpZWxkIGFtb3VudCAgICB5ZWFyICBtb250aCAgICAgZGF5CisgICAgICogICB7ICAgNTc1OSwgSEVTSFZBTiwgICAyLCAgICAgTU9OVEgsICAgMSwgICAgIDU3NTksIEtJU0xFViwgICAgMiB9LAorICAgICAqIDwvcHJlPgorICAgICAqCisgICAgICogQHBhcmFtIHJvbGwgIDxjb2RlPnRydWU8L2NvZGU+IG9yIDxjb2RlPlJPTEw8L2NvZGU+IHRvIHRlc3QgdGhlIDxjb2RlPnJvbGw8L2NvZGU+IG1ldGhvZDsKKyAgICAgKiAgICAgICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG9yIDxjb2RlPkFERDwvY29kZT4gdG8gdGVzdCB0aGUgPGNvZGU+YWRkPC9jb2RlIG1ldGhvZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRvUm9sbEFkZChib29sZWFuIHJvbGwsIENhbGVuZGFyIGNhbCwgaW50W11bXSB0ZXN0cykKKyAgICB7CisgICAgICAgIFN0cmluZyBuYW1lID0gcm9sbCA/ICJyb2xsaW5nIiA6ICJhZGRpbmciOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaW50W10gdGVzdCA9IHRlc3RzW2ldOworCisgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIGlmIChjYWwgaW5zdGFuY2VvZiBDaGluZXNlQ2FsZW5kYXIpIHsKKyAgICAgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkVYVEVOREVEX1lFQVIsIHRlc3RbMF0pOworICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIHRlc3RbMV0pOworICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCB0ZXN0WzJdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2FsLnNldCh0ZXN0WzBdLCB0ZXN0WzFdLCB0ZXN0WzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyb2xsKSB7CisgICAgICAgICAgICAgICAgY2FsLnJvbGwodGVzdFszXSwgdGVzdFs0XSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNhbC5hZGQodGVzdFszXSwgdGVzdFs0XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgeSA9IGNhbC5nZXQoY2FsIGluc3RhbmNlb2YgQ2hpbmVzZUNhbGVuZGFyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5FWFRFTkRFRF9ZRUFSIDogWUVBUik7CisgICAgICAgICAgICBpZiAoeSAhPSB0ZXN0WzVdIHx8IGNhbC5nZXQoTU9OVEgpICE9IHRlc3RbNl0KKyAgICAgICAgICAgICAgICAgICAgfHwgY2FsLmdldChEQVRFKSAhPSB0ZXN0WzddKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiAiICsgbmFtZSArICIgIisgeW1kVG9TdHJpbmcodGVzdFswXSwgdGVzdFsxXSwgdGVzdFsyXSkKKyAgICAgICAgICAgICAgICAgICAgKyAiICIgKyBGSUVMRF9OQU1FW3Rlc3RbM11dICsgIiBieSAiICsgdGVzdFs0XQorICAgICAgICAgICAgICAgICAgICArICI6IGV4cGVjdGVkICIgKyB5bWRUb1N0cmluZyh0ZXN0WzVdLCB0ZXN0WzZdLCB0ZXN0WzddKQorICAgICAgICAgICAgICAgICAgICArICIsIGdvdCAiICsgeW1kVG9TdHJpbmcoY2FsKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVmVyYm9zZSgpKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9LOiAiICsgbmFtZSArICIgIisgeW1kVG9TdHJpbmcodGVzdFswXSwgdGVzdFsxXSwgdGVzdFsyXSkKKyAgICAgICAgICAgICAgICAgICAgKyAiICIgKyBGSUVMRF9OQU1FW3Rlc3RbM11dICsgIiBieSAiICsgdGVzdFs0XQorICAgICAgICAgICAgICAgICAgICArICI6IGdvdCAiICsgeW1kVG9TdHJpbmcoY2FsKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBmdW5jdGlvbnMgZ2V0WHh4TWluaW11bSgpIGFuZCBnZXRYeHhNYXhpbXVtKCkgYnkgbWFyY2hpbmcgYQorICAgICAqIHRlc3QgY2FsZW5kYXIgJ2NhbCcgdGhyb3VnaCAnbnVtYmVyT2ZEYXlzJyBzZXF1ZW50aWFsIGRheXMgc3RhcnRpbmcKKyAgICAgKiB3aXRoICdzdGFydERhdGUnLiAgRm9yIGVhY2ggZGF0ZSwgcmVhZCBhIGZpZWxkIHZhbHVlIGFsb25nIHdpdGggaXRzCisgICAgICogcmVwb3J0ZWQgYWN0dWFsIG1pbmltdW0gYW5kIGFjdHVhbCBtYXhpbXVtLiAgVGhlc2UgdmFsdWVzIGFyZQorICAgICAqIGNoZWNrZWQgYWdhaW5zdCBvbmUgYW5vdGhlciBhcyB3ZWxsIGFzIGFnYWluc3QgZ2V0TWluaW11bSgpLAorICAgICAqIGdldEdyZWF0ZXN0TWluaW11bSgpLCBnZXRMZWFzdE1heGltdW0oKSwgYW5kIGdldE1heGltdW0oKS4gIFdlCisgICAgICogZXhwZWN0IHRvIHNlZToKKyAgICAgKgorICAgICAqIDEuIG1pbmltdW0gPD0gYWN0dWFsTWluaW11bSA8PSBncmVhdGVzdE1pbmltdW0gPD0KKyAgICAgKiAgICBsZWFzdE1heGltdW0gPD0gYWN0dWFsTWF4aW11bSA8PSBtYXhpbXVtCisgICAgICoKKyAgICAgKiAyLiBhY3R1YWxNaW5pbXVtIDw9IHZhbHVlIDw9IGFjdHVhbE1heGltdW0KKyAgICAgKgorICAgICAqIE5vdGU6IEluIGFkZGl0aW9uIHRvIG91dHJpZ2h0IGZhaWx1cmVzLCB0aGlzIHRlc3QgcmVwb3J0cyBzb21lCisgICAgICogcmVzdWx0cyBhcyB3YXJuaW5ncy4gIFRoZXNlIGFyZSBub3QgZ2VuZXJhbGx5IG9mIGNvbmNlcm4sIGJ1dCB0aGV5CisgICAgICogc2hvdWxkIGJlIGV2YWx1YXRlZCBieSBhIGh1bWFuLiAgVG8gc2VlIHRoZXNlLCBydW4gdGhpcyB0ZXN0IGluCisgICAgICogdmVyYm9zZSBtb2RlLgorICAgICAqIEBwYXJhbSBjYWwgdGhlIGNhbGVuZGFyIHRvIGJlIHRlc3RlZAorICAgICAqIEBwYXJhbSBmaWVsZHNUb1Rlc3QgYW4gYXJyYXkgb2YgZmllbGQgdmFsdWVzIHRvIGJlIHRlc3RlZCwgZS5nLiwgbmV3CisgICAgICogaW50W10geyBDYWxlbmRhci5NT05USCwgQ2FsZW5kYXIuREFZX09GX01PTlRIIH0uICBJdCBvbmx5IG1ha2VzCisgICAgICogc2Vuc2UgdG8gdGVzdCB0aGUgZGF5IGZpZWxkczsgdGhlIHRpbWUgZmllbGRzIGFyZSBub3QgdGVzdGVkIGJ5IHRoaXMKKyAgICAgKiBtZXRob2QuICBJZiBudWxsLCB0aGVuIHRlc3QgYWxsIHN0YW5kYXJkIGZpZWxkcy4KKyAgICAgKiBAcGFyYW0gc3RhcnREYXRlIHRoZSBmaXJzdCBkYXRlIHRvIHRlc3QKKyAgICAgKiBAcGFyYW0gdGVzdER1cmF0aW9uIGlmIHBvc2l0aXZlLCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gYmUgdGVzdGVkLgorICAgICAqIElmIG5lZ2F0aXZlLCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gcnVuIHRoZSB0ZXN0LgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGRvTGltaXRzVGVzdChDYWxlbmRhciBjYWwsIGludFtdIGZpZWxkc1RvVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZSBzdGFydERhdGUsIGludCB0ZXN0RHVyYXRpb24pIHsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ3JlZyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBncmVnLnNldFRpbWUoc3RhcnREYXRlKTsKKyAgICAgICAgbG9nbG4oIlN0YXJ0OiAiICsgc3RhcnREYXRlKTsKKworICAgICAgICBpZiAoZmllbGRzVG9UZXN0ID09IG51bGwpIHsKKyAgICAgICAgICAgIGZpZWxkc1RvVGVzdCA9IG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuRVJBLCBDYWxlbmRhci5ZRUFSLCBDYWxlbmRhci5NT05USCwKKyAgICAgICAgICAgICAgICBDYWxlbmRhci5XRUVLX09GX1lFQVIsIENhbGVuZGFyLldFRUtfT0ZfTU9OVEgsCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuREFZX09GX01PTlRILCBDYWxlbmRhci5EQVlfT0ZfWUVBUiwKKyAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFS19JTl9NT05USCwgQ2FsZW5kYXIuWUVBUl9XT1ksCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuRVhURU5ERURfWUVBUgorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEtlZXAgYSByZWNvcmQgb2YgbWluaW1hIGFuZCBtYXhpbWEgdGhhdCB3ZSBhY3R1YWxseSBzZWUuCisgICAgICAgIC8vIFRoZXNlIGFyZSBrZXB0IGluIGFuIGFycmF5IG9mIGFycmF5cyBvZiBoYXNoZXMuCisgICAgICAgIEhhc2h0YWJsZVtdW10gbGltaXRzID0gbmV3IEhhc2h0YWJsZVtmaWVsZHNUb1Rlc3QubGVuZ3RoXVsyXTsKKyAgICAgICAgT2JqZWN0IG51YiA9IG5ldyBPYmplY3QoKTsgLy8gTWVhbmluZ2xlc3MgcGxhY2Vob2xkZXIKKworICAgICAgICAvLyBUaGlzIHRlc3QgY2FuIHJ1biBmb3IgYSBsb25nIHRpbWU7IHNob3cgcHJvZ3Jlc3MuCisgICAgICAgIGxvbmcgbWlsbGlzID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIGxvbmcgbWFyayA9IG1pbGxpcyArIDUwMDA7IC8vIDUgc2VjCisgICAgICAgIG1pbGxpcyAtPSB0ZXN0RHVyYXRpb24gKiAxMDAwOyAvLyBzdG9wIHRpbWUgaWYgdGVzdER1cmF0aW9uPDAKKworICAgICAgICBmb3IgKGludCBpPTA7CisgICAgICAgICAgICAgdGVzdER1cmF0aW9uPjAgPyBpPHRlc3REdXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk8bWlsbGlzOworICAgICAgICAgICAgICsraSkgeworICAgICAgICAgICAgaWYgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpID49IG1hcmspIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiKCIgKyBpICsgIiBkYXlzKSIpOworICAgICAgICAgICAgICAgIG1hcmsgKz0gNTAwMDsgLy8gNSBzZWMKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbC5zZXRUaW1lSW5NaWxsaXMoZ3JlZy5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8ZmllbGRzVG9UZXN0Lmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgaW50IGYgPSBmaWVsZHNUb1Rlc3Rbal07CisgICAgICAgICAgICAgICAgaW50IHYgPSBjYWwuZ2V0KGYpOworICAgICAgICAgICAgICAgIGludCBtaW5BY3R1YWwgPSBjYWwuZ2V0QWN0dWFsTWluaW11bShmKTsKKyAgICAgICAgICAgICAgICBpbnQgbWF4QWN0dWFsID0gY2FsLmdldEFjdHVhbE1heGltdW0oZik7CisgICAgICAgICAgICAgICAgaW50IG1pbkxvdyA9IGNhbC5nZXRNaW5pbXVtKGYpOworICAgICAgICAgICAgICAgIGludCBtaW5IaWdoID0gY2FsLmdldEdyZWF0ZXN0TWluaW11bShmKTsKKyAgICAgICAgICAgICAgICBpbnQgbWF4TG93ID0gY2FsLmdldExlYXN0TWF4aW11bShmKTsKKyAgICAgICAgICAgICAgICBpbnQgbWF4SGlnaCA9IGNhbC5nZXRNYXhpbXVtKGYpOworCisgICAgICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGhhc2ggZm9yIHRoaXMgZmllbGQgYW5kIGtlZXAgdHJhY2sgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gbWluaW1hIGFuZCBtYXhpbWEuCisgICAgICAgICAgICAgICAgSGFzaHRhYmxlW10gaCA9IGxpbWl0c1tqXTsKKyAgICAgICAgICAgICAgICBpZiAoaFswXSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGhbMF0gPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIGhbMV0gPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhbMF0ucHV0KG5ldyBJbnRlZ2VyKG1pbkFjdHVhbCksIG51Yik7CisgICAgICAgICAgICAgICAgaFsxXS5wdXQobmV3IEludGVnZXIobWF4QWN0dWFsKSwgbnViKTsKKworICAgICAgICAgICAgICAgIGlmIChtaW5BY3R1YWwgPCBtaW5Mb3cgfHwgbWluQWN0dWFsID4gbWluSGlnaCkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIHltZFRvU3RyaW5nKGNhbCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiIFJhbmdlIGZvciBtaW4gb2YgIiArIEZJRUxEX05BTUVbZl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAiPSIgKyBtaW5Mb3cgKyAiLi4iICsgbWluSGlnaCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIsIGFjdHVhbF9taW49IiArIG1pbkFjdHVhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtYXhBY3R1YWwgPCBtYXhMb3cgfHwgbWF4QWN0dWFsID4gbWF4SGlnaCkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIHltZFRvU3RyaW5nKGNhbCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiIFJhbmdlIGZvciBtYXggb2YgIiArIEZJRUxEX05BTUVbZl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAiPSIgKyBtYXhMb3cgKyAiLi4iICsgbWF4SGlnaCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIsIGFjdHVhbF9tYXg9IiArIG1heEFjdHVhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2IDwgbWluQWN0dWFsIHx8IHYgPiBtYXhBY3R1YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyB5bWRUb1N0cmluZyhjYWwpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsgRklFTERfTkFNRVtmXSArICI9IiArIHYgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBhY3R1YWwgcmFuZ2U9IiArIG1pbkFjdHVhbCArICIuLiIgKyBtYXhBY3R1YWwgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBhbGxvd2VkPSgiICsgbWluTG93ICsgIi4uIiArIG1pbkhpZ2ggKyAiKS4uKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhMb3cgKyAiLi4iICsgbWF4SGlnaCArICIpIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZ3JlZy5hZGQoQ2FsZW5kYXIuREFZX09GX1lFQVIsIDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sgYWN0dWFsIG1heGltYSBhbmQgbWluaW1hIHNlZW4gYWdhaW5zdCByYW5nZXMgcmV0dXJuZWQKKyAgICAgICAgLy8gYnkgQVBJLgorICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBqPTA7IGo8ZmllbGRzVG9UZXN0Lmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpbnQgZiA9IGZpZWxkc1RvVGVzdFtqXTsKKyAgICAgICAgICAgIGJ1Zi5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICBidWYuYXBwZW5kKEZJRUxEX05BTUVbZl0pOworICAgICAgICAgICAgSGFzaHRhYmxlW10gaCA9IGxpbWl0c1tqXTsKKyAgICAgICAgICAgIGJvb2xlYW4gZnVsbFJhbmdlU2VlbiA9IHRydWU7CisgICAgICAgICAgICBmb3IgKGludCBrPTA7IGs8MjsgKytrKSB7CisgICAgICAgICAgICAgICAgaW50IHJhbmdlTG93ID0gKGs9PTApID8KKyAgICAgICAgICAgICAgICAgICAgY2FsLmdldE1pbmltdW0oZikgOiBjYWwuZ2V0TGVhc3RNYXhpbXVtKGYpOworICAgICAgICAgICAgICAgIGludCByYW5nZUhpZ2ggPSAoaz09MCkgPworICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0R3JlYXRlc3RNaW5pbXVtKGYpIDogY2FsLmdldE1heGltdW0oZik7CisgICAgICAgICAgICAgICAgLy8gSWYgZWl0aGVyIHRoZSB0b3Agb2YgdGhlIHJhbmdlIG9yIHRoZSBib3R0b20gd2FzIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gc2VlbiwgdGhlbiB0aGVyZSBtYXkgYmUgYSBwcm9ibGVtLgorICAgICAgICAgICAgICAgIGlmIChoW2tdLmdldChuZXcgSW50ZWdlcihyYW5nZUxvdykpID09IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAgaFtrXS5nZXQobmV3IEludGVnZXIocmFuZ2VIaWdoKSkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBmdWxsUmFuZ2VTZWVuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoaz09MCA/ICIgbWluaW1hIHNlZW49KCIgOiAiOyBtYXhpbWEgc2Vlbj0oIik7CisgICAgICAgICAgICAgICAgZm9yIChFbnVtZXJhdGlvbiBlPWhba10ua2V5cygpOyBlLmhhc01vcmVFbGVtZW50cygpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHYgPSAoKEludGVnZXIpIGUubmV4dEVsZW1lbnQoKSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiICIgKyB2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiKSByYW5nZT0iICsgcmFuZ2VMb3cgKyAiLi4iICsgcmFuZ2VIaWdoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmdWxsUmFuZ2VTZWVuKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9LOiAiICsgYnVmLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBvciBtYXkgbm90IGJlIGFuIGVycm9yIC0tIGlmIHRoZSByYW5nZSBvZiBkYXRlcworICAgICAgICAgICAgICAgIC8vIHdlIHNjYW4gb3ZlciBkb2Vzbid0IGhhcHBlbiB0byBjb250YWluIGEgbWluaW11bSBvcgorICAgICAgICAgICAgICAgIC8vIG1heGltdW0sIGl0IGRvZXNuJ3QgbWVhbiBzb21lIG90aGVyIHJhbmdlIHdvbid0LgorICAgICAgICAgICAgICAgIGxvZ2xuKCJXYXJuaW5nOiAiICsgYnVmLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbG9nbG4oIkVuZDogIiArIGdyZWcuZ2V0VGltZSgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHllYXIsbW9udGgsZGF5IHZhbHVlcyB0byB0aGUgZm9ybSAieWVhci9tb250aC9kYXkiLgorICAgICAqIE9uIGlucHV0IHRoZSBtb250aCB2YWx1ZSBpcyB6ZXJvLWJhc2VkLCBidXQgaW4gdGhlIHJlc3VsdCBzdHJpbmcgaXQgaXMgb25lLWJhc2VkLgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgU3RyaW5nIHltZFRvU3RyaW5nKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpIHsKKyAgICAgICAgcmV0dXJuICIiICsgeWVhciArICIvIiArIChtb250aCsxKSArICIvIiArIGRheTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHllYXIsbW9udGgsZGF5IHZhbHVlcyB0byB0aGUgZm9ybSAieWVhci9tb250aC9kYXkiLgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgU3RyaW5nIHltZFRvU3RyaW5nKENhbGVuZGFyIGNhbCkgeworICAgICAgICBpZiAoY2FsIGluc3RhbmNlb2YgQ2hpbmVzZUNhbGVuZGFyKSB7CisgICAgICAgICAgICByZXR1cm4gIiIgKyBjYWwuZ2V0KENhbGVuZGFyLkVYVEVOREVEX1lFQVIpICsgIi8iICsKKyAgICAgICAgICAgICAgICAoY2FsLmdldChDYWxlbmRhci5NT05USCkrMSkgKworICAgICAgICAgICAgICAgIChjYWwuZ2V0KENoaW5lc2VDYWxlbmRhci5JU19MRUFQX01PTlRIKT09MT8iKGxlYXApIjoiIikgKyAiLyIgKworICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuREFURSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHltZFRvU3RyaW5nKGNhbC5nZXQoQ2FsZW5kYXIuRVhURU5ERURfWUVBUiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KE1PTlRIKSwgY2FsLmdldChEQVRFKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0NoaW5lc2VUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ2hpbmVzZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYjc0MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0NoaW5lc2VUZXN0LmphdmEKQEAgLTAsMCArMSw1MjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9DaGluZXNlVGVzdC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MDUgJAorICogJFJldmlzaW9uOiAxLjkgJAorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogVGVzdCBvZiBDaGluZXNlQ2FsZW5kYXIuCisgKgorICogTGVhcCBtb250aHMgaW4gdGhpcyBjZW50dXJ5OgorICogV2VkIE1heSAyMyAyMDAxID0gNDYzOC0wNCotMDEsIFllYXIgMTgsIEN5Y2xlIDc4CisgKiBTdW4gTWFyIDIxIDIwMDQgPSA0NjQxLTAyKi0wMSwgWWVhciAyMSwgQ3ljbGUgNzgKKyAqIFRodSBBdWcgMjQgMjAwNiA9IDQ2NDMtMDcqLTAxLCBZZWFyIDIzLCBDeWNsZSA3OAorICogVHVlIEp1biAyMyAyMDA5ID0gNDY0Ni0wNSotMDEsIFllYXIgMjYsIEN5Y2xlIDc4CisgKiBNb24gTWF5IDIxIDIwMTIgPSA0NjQ5LTA0Ki0wMSwgWWVhciAyOSwgQ3ljbGUgNzgKKyAqIEZyaSBPY3QgMjQgMjAxNCA9IDQ2NTEtMDkqLTAxLCBZZWFyIDMxLCBDeWNsZSA3OAorICogU3VuIEp1bCAyMyAyMDE3ID0gNDY1NC0wNiotMDEsIFllYXIgMzQsIEN5Y2xlIDc4CisgKiBTYXQgTWF5IDIzIDIwMjAgPSA0NjU3LTA0Ki0wMSwgWWVhciAzNywgQ3ljbGUgNzgKKyAqIFdlZCBNYXIgMjIgMjAyMyA9IDQ2NjAtMDIqLTAxLCBZZWFyIDQwLCBDeWNsZSA3OAorICogRnJpIEp1bCAyNSAyMDI1ID0gNDY2Mi0wNiotMDEsIFllYXIgNDIsIEN5Y2xlIDc4CisgKiBGcmkgSnVuIDIzIDIwMjggPSA0NjY1LTA1Ki0wMSwgWWVhciA0NSwgQ3ljbGUgNzgKKyAqIFR1ZSBBcHIgMjIgMjAzMSA9IDQ2NjgtMDMqLTAxLCBZZWFyIDQ4LCBDeWNsZSA3OAorICogVGh1IERlYyAyMiAyMDMzID0gNDY3MC0xMSotMDEsIFllYXIgNTAsIEN5Y2xlIDc4CisgKiBXZWQgSnVsIDIzIDIwMzYgPSA0NjczLTA2Ki0wMSwgWWVhciA1MywgQ3ljbGUgNzgKKyAqIFdlZCBKdW4gMjIgMjAzOSA9IDQ2NzYtMDUqLTAxLCBZZWFyIDU2LCBDeWNsZSA3OAorICogU2F0IE1hciAyMiAyMDQyID0gNDY3OS0wMiotMDEsIFllYXIgNTksIEN5Y2xlIDc4CisgKiBUdWUgQXVnIDIzIDIwNDQgPSA0NjgxLTA3Ki0wMSwgWWVhciAwMSwgQ3ljbGUgNzkKKyAqIFN1biBKdW4gMjMgMjA0NyA9IDQ2ODQtMDUqLTAxLCBZZWFyIDA0LCBDeWNsZSA3OQorICogVGh1IEFwciAyMSAyMDUwID0gNDY4Ny0wMyotMDEsIFllYXIgMDcsIEN5Y2xlIDc5CisgKiBNb24gU2VwIDIzIDIwNTIgPSA0Njg5LTA4Ki0wMSwgWWVhciAwOSwgQ3ljbGUgNzkKKyAqIFNhdCBKdWwgMjQgMjA1NSA9IDQ2OTItMDYqLTAxLCBZZWFyIDEyLCBDeWNsZSA3OQorICogV2VkIE1heSAyMiAyMDU4ID0gNDY5NS0wNCotMDEsIFllYXIgMTUsIEN5Y2xlIDc5CisgKiBXZWQgQXByIDIwIDIwNjEgPSA0Njk4LTAzKi0wMSwgWWVhciAxOCwgQ3ljbGUgNzkKKyAqIEZyaSBBdWcgMjQgMjA2MyA9IDQ3MDAtMDcqLTAxLCBZZWFyIDIwLCBDeWNsZSA3OQorICogV2VkIEp1biAyMyAyMDY2ID0gNDcwMy0wNSotMDEsIFllYXIgMjMsIEN5Y2xlIDc5CisgKiBUdWUgTWF5IDIxIDIwNjkgPSA0NzA2LTA0Ki0wMSwgWWVhciAyNiwgQ3ljbGUgNzkKKyAqIFRodSBTZXAgMjQgMjA3MSA9IDQ3MDgtMDgqLTAxLCBZZWFyIDI4LCBDeWNsZSA3OQorICogVHVlIEp1bCAyNCAyMDc0ID0gNDcxMS0wNiotMDEsIFllYXIgMzEsIEN5Y2xlIDc5CisgKiBTYXQgTWF5IDIyIDIwNzcgPSA0NzE0LTA0Ki0wMSwgWWVhciAzNCwgQ3ljbGUgNzkKKyAqIFNhdCBBcHIgMjAgMjA4MCA9IDQ3MTctMDMqLTAxLCBZZWFyIDM3LCBDeWNsZSA3OQorICogTW9uIEF1ZyAyNCAyMDgyID0gNDcxOS0wNyotMDEsIFllYXIgMzksIEN5Y2xlIDc5CisgKiBGcmkgSnVuIDIyIDIwODUgPSA0NzIyLTA1Ki0wMSwgWWVhciA0MiwgQ3ljbGUgNzkKKyAqIEZyaSBNYXkgMjEgMjA4OCA9IDQ3MjUtMDQqLTAxLCBZZWFyIDQ1LCBDeWNsZSA3OQorICogU3VuIFNlcCAyNCAyMDkwID0gNDcyNy0wOCotMDEsIFllYXIgNDcsIEN5Y2xlIDc5CisgKiBUaHUgSnVsIDIzIDIwOTMgPSA0NzMwLTA2Ki0wMSwgWWVhciA1MCwgQ3ljbGUgNzkKKyAqIFR1ZSBNYXkgMjIgMjA5NiA9IDQ3MzMtMDQqLTAxLCBZZWFyIDUzLCBDeWNsZSA3OQorICogU3VuIE1hciAyMiAyMDk5ID0gNDczNi0wMiotMDEsIFllYXIgNTYsIEN5Y2xlIDc5CisgKi8KK3B1YmxpYyBjbGFzcyBDaGluZXNlVGVzdCBleHRlbmRzIENhbGVuZGFyVGVzdCB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IENoaW5lc2VUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgYmFzaWMgbWFwcGluZyB0byBhbmQgZnJvbSBHcmVnb3JpYW4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdE1hcHBpbmcoKSB7CisKKyAgICAgICAgZmluYWwgaW50W10gREFUQSA9IHsKKyAgICAgICAgICAgIC8vIChOb3RlOiBtb250aHMgYXJlIDEtYmFzZWQpCisgICAgICAgICAgICAvLyBHcmVnb3JpYW4gICAgQ2hpbmVzZQorICAgICAgICAgICAgMTk2NCwgIDksICA0LCAgIDQ2MDEsICA3LDAsIDI4LAorICAgICAgICAgICAgMTk2NCwgIDksICA1LCAgIDQ2MDEsICA3LDAsIDI5LAorICAgICAgICAgICAgMTk2NCwgIDksICA2LCAgIDQ2MDEsICA4LDAsICAxLAorICAgICAgICAgICAgMTk2NCwgIDksICA3LCAgIDQ2MDEsICA4LDAsICAyLAorICAgICAgICAgICAgMTk2MSwgMTIsIDI1LCAgIDQ1OTgsIDExLDAsIDE4LAorICAgICAgICAgICAgMTk5OSwgIDYsICA0LCAgIDQ2MzYsICA0LDAsIDIxLAorICAgICAgICAgICAgCisgICAgICAgICAgICAxOTkwLCAgNSwgMjMsICAgNDYyNywgIDQsMCwgMjksCisgICAgICAgICAgICAxOTkwLCAgNSwgMjQsICAgNDYyNywgIDUsMCwgIDEsCisgICAgICAgICAgICAxOTkwLCAgNiwgMjIsICAgNDYyNywgIDUsMCwgMzAsCisgICAgICAgICAgICAxOTkwLCAgNiwgMjMsICAgNDYyNywgIDUsMSwgIDEsCisgICAgICAgICAgICAxOTkwLCAgNywgMjAsICAgNDYyNywgIDUsMSwgMjgsCisgICAgICAgICAgICAxOTkwLCAgNywgMjEsICAgNDYyNywgIDUsMSwgMjksCisgICAgICAgICAgICAxOTkwLCAgNywgMjIsICAgNDYyNywgIDYsMCwgIDEsCisgICAgICAgIH07CisKKyAgICAgICAgQ2hpbmVzZUNhbGVuZGFyIGNhbCA9IG5ldyBDaGluZXNlQ2FsZW5kYXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgICAgICBsb2dsbigiR3JlZ29yaWFuIC0+IENoaW5lc2UiKTsKKyAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIHRlbXBjYWwgPSBqYXZhLnV0aWwuQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgdGVtcGNhbC5jbGVhcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7ICkgeworICAgICAgICAgICAgdGVtcGNhbC5zZXQoREFUQVtpKytdLCBEQVRBW2krK10tMSwgREFUQVtpKytdKTsKKyAgICAgICAgICAgIERhdGUgZGF0ZSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICAgICAgY2FsLnNldFRpbWUoZGF0ZSk7CisgICAgICAgICAgICBpbnQgeSA9IGNhbC5nZXQoQ2FsZW5kYXIuRVhURU5ERURfWUVBUik7CisgICAgICAgICAgICBpbnQgbSA9IGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpKzE7IC8vIDAtYmFzZWQgLT4gMS1iYXNlZAorICAgICAgICAgICAgaW50IEwgPSBjYWwuZ2V0KENoaW5lc2VDYWxlbmRhci5JU19MRUFQX01PTlRIKTsKKyAgICAgICAgICAgIGludCBkID0gY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOworICAgICAgICAgICAgaW50IHlFID0gREFUQVtpKytdOyAvLyBFeHBlY3RlZCB5LCBtLCBpc0xlYXBNb250aCwgZAorICAgICAgICAgICAgaW50IG1FID0gREFUQVtpKytdOyAvLyAxLWJhc2VkCisgICAgICAgICAgICBpbnQgTEUgPSBEQVRBW2krK107CisgICAgICAgICAgICBpbnQgZEUgPSBEQVRBW2krK107CisgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgYnVmLmFwcGVuZChkYXRlICsgIiAtPiAiKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoeSArICIvIiArIG0gKyAoTD09MT8iKGxlYXApIjoiIikgKyAiLyIgKyBkKTsKKyAgICAgICAgICAgIGlmICh5ID09IHlFICYmIG0gPT0gbUUgJiYgTCA9PSBMRSAmJiBkID09IGRFKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9LOiAiICsgYnVmLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGJ1Zi50b1N0cmluZygpICsgIiwgZXhwZWN0ZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgeUUgKyAiLyIgKyBtRSArIChMRT09MT8iKGxlYXApIjoiIikgKyAiLyIgKyBkRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsb2dsbigiQ2hpbmVzZSAtPiBHcmVnb3JpYW4iKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyApIHsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KERBVEFbaSsrXSwgREFUQVtpKytdLTEsIERBVEFbaSsrXSk7CisgICAgICAgICAgICBEYXRlIGRleHAgPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgICAgIGludCBjeWVhciA9IERBVEFbaSsrXTsKKyAgICAgICAgICAgIGludCBjbW9udGggPSBEQVRBW2krK107CisgICAgICAgICAgICBpbnQgY2lzbGVhcG1vbnRoID0gREFUQVtpKytdOworICAgICAgICAgICAgaW50IGNkYXlvZm1vbnRoID0gREFUQVtpKytdOworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkVYVEVOREVEX1lFQVIsIGN5ZWFyKTsKKyAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIGNtb250aC0xKTsKKyAgICAgICAgICAgIGNhbC5zZXQoQ2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEgsIGNpc2xlYXBtb250aCk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCwgY2RheW9mbW9udGgpOworICAgICAgICAgICAgRGF0ZSBkYXRlID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgICAgIGJ1Zi5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICBidWYuYXBwZW5kKGN5ZWFyICsgIi8iICsgY21vbnRoICsKKyAgICAgICAgICAgICAgICAgICAgICAgKGNpc2xlYXBtb250aD09MT8iKGxlYXApIjoiIikgKyAiLyIgKyBjZGF5b2Ztb250aCk7CisgICAgICAgICAgICBidWYuYXBwZW5kKCIgLT4gIiArIGRhdGUpOworICAgICAgICAgICAgaWYgKGRhdGUuZXF1YWxzKGRleHApKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9LOiAiICsgYnVmLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGJ1Zi50b1N0cmluZygpICsgIiwgZXhwZWN0ZWQgIiArIGRleHApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTWFrZSBzdXJlIG5vIEdyZWdvcmlhbiBkYXRlcyBtYXAgdG8gQ2hpbmVzZSAxLWJhc2VkIGRheSBvZgorICAgICAqIG1vbnRoIHplcm8uICBUaGlzIHdhcyBhIHByb2JsZW0gd2l0aCBzb21lIG9mIHRoZSBhc3Ryb25vbWljYWwKKyAgICAgKiBuZXcgbW9vbiBkZXRlcm1pbmF0aW9ucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0WmVyb0RPTSgpIHsKKyAgICAgICAgQ2hpbmVzZUNhbGVuZGFyIGNhbCA9IG5ldyBDaGluZXNlQ2FsZW5kYXIoKTsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ3JlZyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxOTg5LCBDYWxlbmRhci5TRVBURU1CRVIsIDEpOworICAgICAgICBsb2dsbigiU3RhcnQ6ICIgKyBncmVnLmdldFRpbWUoKSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTwxMDAwOyArK2kpIHsKKyAgICAgICAgICAgIGNhbC5zZXRUaW1lSW5NaWxsaXMoZ3JlZy5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICBpZiAoY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpID09IDApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGdyZWcuZ2V0VGltZSgpICsgIiAtPiAiICsKKyAgICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLkVYVEVOREVEX1lFQVIpICsgIi8iICsKKyAgICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLk1PTlRIKSArCisgICAgICAgICAgICAgICAgICAgICAgKGNhbC5nZXQoQ2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEgpPT0xPyIobGVhcCkiOiIiKSArCisgICAgICAgICAgICAgICAgICAgICAgIi8iICsgY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyZWcuYWRkKENhbGVuZGFyLkRBWV9PRl9ZRUFSLCAxKTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbigiRW5kOiAiICsgZ3JlZy5nZXRUaW1lKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgbWluaW11bSBhbmQgbWF4aW11bSBmdW5jdGlvbnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdExpbWl0cygpIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiBkYXlzIGFuZCB0aGUgc3RhcnQgZGF0ZSBjYW4gYmUgYWRqdXN0ZWQKKyAgICAgICAgLy8gYXJiaXRyYXJpbHkgdG8gZWl0aGVyIHNwZWVkIHVwIHRoZSB0ZXN0IG9yIG1ha2UgaXQgbW9yZQorICAgICAgICAvLyB0aG9yb3VnaCwgYnV0IHRyeSB0byB0ZXN0IGF0IGxlYXN0IGEgZnVsbCB5ZWFyLCBwcmVmZXJhYmx5IGEKKyAgICAgICAgLy8gZnVsbCBub24tbGVhcCBhbmQgYSBmdWxsIGxlYXAgeWVhci4KKworICAgICAgICAvLyBGaW5hbCBwYXJhbWV0ZXIgaXMgZWl0aGVyIG51bWJlciBvZiBkYXlzLCBpZiA+IDAsIG9yIHRlc3QKKyAgICAgICAgLy8gZHVyYXRpb24gaW4gc2Vjb25kcywgaWYgPCAwLgorICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5ODksIENhbGVuZGFyLk5PVkVNQkVSLCAxKTsKKyAgICAgICAgZG9MaW1pdHNUZXN0KG5ldyBDaGluZXNlQ2FsZW5kYXIoKSwgbnVsbCwgdGVtcGNhbC5nZXRUaW1lKCksIC0xMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUnVuIHRocm91Z2ggc2V2ZXJhbCBzdGFuZGFyZCB0ZXN0cyBmcm9tIERlcnNob3dpdHogJiBSZWluZ29sZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SnVsaWFuRGF5TWFwcGluZygpIHsKKworICAgICAgICBmaW5hbCBUZXN0Q2FzZVtdIHRlc3RzID0geworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEZyb20gRGVyc2hvd2l0eiAmIFJlaW5nb2xkLCAiQ2FsZW5kcmljYWwgQ2FsY3VsYXRpb25zIi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGUgbW9udGhzIGluIHRoaXMgdGFibGUgYXJlIDEtYmFzZWQgcmF0aGVyIHRoYW4gMC1iYXNlZC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAqIEZhaWxpbmcgZmllbGRzLT5taWxsaXMKKyAgICAgICAgICAgIC8vICoqIE1pbGxpcy0+ZmllbGRzIGdpdmVzIDAtYmFzZWQgbW9udGggLTEKKyAgICAgICAgICAgIC8vIFRoZXNlIGZhaWx1cmVzIHdlcmUgZml4ZWQgYnkgY2hhbmdpbmcgdGhlIHN0YXJ0IHNlYXJjaCBkYXRlCisgICAgICAgICAgICAvLyBmb3IgdGhlIHdpbnRlciBzb2xzdGljZSBmcm9tIERlYyAxNSB0byBEZWMgMS4KKyAgICAgICAgICAgIC8vIAorICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICBKdWxpYW4gRGF5ICAgRXJhICBZZWFyIE1vbnRoICBMZWFwICAgRE9NIFdrRGF5CisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDE1MDcyMzEuNSwgICAzNSwgICAxMSwgICAgNiwgZmFsc2UsICAgMTIsICBTVU4pLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgxNjYwMDM3LjUsICAgNDIsICAgIDksICAgMTAsIGZhbHNlLCAgIDI3LCAgV0VEKSwKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMTc0Njg5My41LCAgIDQ2LCAgICA3LCAgICA4LCBmYWxzZSwgICAgNCwgIFdFRCksCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDE3NzA2NDEuNSwgICA0NywgICAxMiwgICAgOCwgZmFsc2UsICAgIDksICBTVU4pLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgxODkyNzMxLjUsICAgNTIsICAgNDYsICAgMTEsIGZhbHNlLCAgIDIwLCAgV0VEKSwKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMTkzMTU3OS41LCAgIDU0LCAgIDMzLCAgICA0LCBmYWxzZSwgICAgNSwgIE1PTiksCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDE5NzQ4NTEuNSwgICA1NiwgICAzMSwgICAxMCwgZmFsc2UsICAgMTUsICBTQVQpLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyMDkxMTY0LjUsICAgNjEsICAgNTAsICAgIDMsIGZhbHNlLCAgICA3LCAgU1VOKSwKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjEyMTUwOS41LCAgIDYzLCAgIDEzLCAgICA0LCBmYWxzZSwgICAyNCwgIFNVTiksCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDIxNTU3NzkuNSwgICA2NCwgICA0NywgICAgMiwgZmFsc2UsICAgIDksICBGUkkpLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyMTc0MDI5LjUsICAgNjUsICAgMzcsICAgIDIsIGZhbHNlLCAgICA5LCAgU0FUKSwKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjE5MTU4NC41LCAgIDY2LCAgIDI1LCAgICAyLCBmYWxzZSwgICAyMywgIEZSSSksCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDIxOTUyNjEuNSwgICA2NiwgICAzNSwgICAgMywgZmFsc2UsICAgIDksICBTVU4pLCAvLyoKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjIyOTI3NC41LCAgIDY4LCAgICA4LCAgICA1LCBmYWxzZSwgICAgMiwgIFNVTiksIC8vKgorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyMjQ1NTgwLjUsICAgNjgsICAgNTMsICAgIDEsIGZhbHNlLCAgICA4LCAgV0VEKSwgLy8qKgorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyMjY2MTAwLjUsICAgNjksICAgNDksICAgIDMsIGZhbHNlLCAgICA0LCAgU0FUKSwgCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDIyODg1NDIuNSwgICA3MCwgICA1MCwgICAgOCwgZmFsc2UsICAgIDIsICBTQVQpLCAvLyoKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjI5MDkwMS41LCAgIDcwLCAgIDU3LCAgICAxLCBmYWxzZSwgICAyOSwgIFNBVCksIC8vKgorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyMzIzMTQwLjUsICAgNzIsICAgMjUsICAgIDQsICB0cnVlLCAgIDIwLCAgV0VEKSwgLy8qCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDIzMzQ4NDguNSwgICA3MiwgICA1NywgICAgNiwgZmFsc2UsICAgIDUsICBTVU4pLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyMzQ4MDIwLjUsICAgNzMsICAgMzMsICAgIDYsIGZhbHNlLCAgICA2LCAgRlJJKSwKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjM2Njk3OC41LCAgIDc0LCAgIDI1LCAgICA1LCBmYWxzZSwgICAgNSwgIFNVTiksCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDIzODU2NDguNSwgICA3NSwgICAxNiwgICAgNiwgZmFsc2UsICAgMTIsICBNT04pLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyMzkyODI1LjUsICAgNzUsICAgMzYsICAgIDIsIGZhbHNlLCAgIDEzLCAgV0VEKSwKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjQxNjIyMy41LCAgIDc2LCAgIDQwLCAgICAzLCBmYWxzZSwgICAyMiwgIFNVTiksCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDI0MjU4NDguNSwgICA3NywgICAgNiwgICAgNywgZmFsc2UsICAgMjEsICBTVU4pLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyNDMwMjY2LjUsICAgNzcsICAgMTgsICAgIDgsIGZhbHNlLCAgICA5LCAgTU9OKSwKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjQzMDgzMy41LCAgIDc3LCAgIDIwLCAgICAzLCBmYWxzZSwgICAxNSwgIE1PTiksCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDI0MzEwMDQuNSwgICA3NywgICAyMCwgICAgOSwgZmFsc2UsICAgIDksICBUSFUpLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyNDQ4Njk4LjUsICAgNzgsICAgIDksICAgIDIsIGZhbHNlLCAgIDE0LCAgVFVFKSwKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjQ1MDEzOC41LCAgIDc4LCAgIDEzLCAgICAxLCBmYWxzZSwgICAgNywgIFNVTiksCisgICAgICAgICAgICBuZXcgQ2hpbmVzZVRlc3RDYXNlKDI0NjU3MzcuNSwgICA3OCwgICA1NSwgICAxMCwgZmFsc2UsICAgMTQsICBXRUQpLAorICAgICAgICAgICAgbmV3IENoaW5lc2VUZXN0Q2FzZSgyNDg2MDc2LjUsICAgNzksICAgNTEsICAgIDYsIGZhbHNlLCAgICA3LCAgU1VOKSwKKworICAgICAgICAgICAgLy8gQWRkaXRpb25hbCB0ZXN0cyBub3QgZnJvbSBEJlIKKyAgICAgICAgICAgIG5ldyBDaGluZXNlVGVzdENhc2UoMjQ2NzQ5Ni41LCAgIDc4LCAgIDYwLCAgICA4LCBmYWxzZSwgICAgMiwgIEZSSSksIC8vIHllYXIgNjAKKyAgICAgICAgfTsKKworICAgICAgICBDaGluZXNlQ2FsZW5kYXIgY2FsID0gbmV3IENoaW5lc2VDYWxlbmRhcigpOworICAgICAgICBjYWwuc2V0TGVuaWVudCh0cnVlKTsKKyAgICAgICAgZG9UZXN0Q2FzZXModGVzdHMsIGNhbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBmb3JtYXR0aW5nLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RGb3JtYXQoKSB7CisgICAgICAgIENoaW5lc2VDYWxlbmRhciBjYWwgPSBuZXcgQ2hpbmVzZUNhbGVuZGFyKCk7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKGNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVGb3JtYXQuREVGQVVMVCwgRGF0ZUZvcm1hdC5ERUZBVUxUKTsKKworICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBEYXRlW10gREFUQSA9IG5ldyBEYXRlWzJdOworICAgICAgICB0ZW1wY2FsLnNldCgyMDAxLCBDYWxlbmRhci5NQVksIDIyKTsKKyAgICAgICAgREFUQVswXSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldCgyMDAxLCBDYWxlbmRhci5NQVksIDIzKTsKKyAgICAgICAgREFUQVsxXSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICAvLyBXZWQgTWF5IDIzIDIwMDEgPSBNb250aCA0KGxlYXApLCBEYXkgMSwgWWVhciAxOCwgQ3ljbGUgNzgKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgcyA9IGZtdC5mb3JtYXQoREFUQVtpXSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIERhdGUgZSA9IGZtdC5wYXJzZShzKTsKKyAgICAgICAgICAgICAgICBpZiAoZS5lcXVhbHMoREFUQVtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nbG4oIk9rOiAiICsgREFUQVtpXSArICIgLT4gIiArIHMgKyAiIC0+ICIgKyBlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIERBVEFbaV0gKyAiIC0+ICIgKyBzICsgIiAtPiAiICsgZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIHMgKyAiIC0+IHBhcnNlIGZhaWx1cmUgYXQgIiArIGUuZ2V0RXJyb3JPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgZXJybG4oZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE1ha2Ugc3VyZSBJU19MRUFQX01PTlRIIHBhcnRpY2lwYXRlcyBpbiBmaWVsZCByZXNvbHV0aW9uLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RSZXNvbHV0aW9uKCkgeworICAgICAgICBDaGluZXNlQ2FsZW5kYXIgY2FsID0gbmV3IENoaW5lc2VDYWxlbmRhcigpOworICAgICAgICBEYXRlRm9ybWF0IGZtdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5ERUZBVUxUKTsKKworICAgICAgICAvLyBNYXkgMjIgMjAwMSA9IHk0NjM4IG00IGQzMCBkb3kxMTkKKyAgICAgICAgLy8gTWF5IDIzIDIwMDEgPSB5NDYzOCBtNCogZDEgZG95MTIwCisKKyAgICAgICAgZmluYWwgaW50IFRIRV9ZRUFSID0gNDYzODsKKyAgICAgICAgZmluYWwgaW50IEVORCA9IC0xOworCisgICAgICAgIGludFtdIERBVEEgPSB7CisgICAgICAgICAgICAvLyBGb3JtYXQ6CisgICAgICAgICAgICAvLyAoZmllbGQsIHZhbHVlKSssIEVORCwgZXhwLm1vbnRoLCBleHAuaXNMZWFwTW9udGgsIGV4cC5ET00KKyAgICAgICAgICAgIC8vIE5vdGU6IGV4cC5tb250aCBpcyBPTkUtQkFTRUQKKworICAgICAgICAgICAgLy8gSWYgd2Ugc2V0IERBWV9PRl9ZRUFSIG9ubHksIHRoYXQgc2hvdWxkIGJlIHVzZWQKKyAgICAgICAgICAgIENhbGVuZGFyLkRBWV9PRl9ZRUFSLCAxLAorICAgICAgICAgICAgRU5ELAorICAgICAgICAgICAgMSwwLDEsIC8vIEV4cGVjdCAxLTEKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2Ugc2V0IE1PTlRIIG9ubHksIHRoYXQgc2hvdWxkIGJlIHVzZWQKKyAgICAgICAgICAgIENoaW5lc2VDYWxlbmRhci5JU19MRUFQX01PTlRILCAxLAorICAgICAgICAgICAgQ2FsZW5kYXIuREFZX09GX01PTlRILCAxLAorICAgICAgICAgICAgQ2FsZW5kYXIuTU9OVEgsIDMsCisgICAgICAgICAgICBFTkQsCisgICAgICAgICAgICA0LDEsMSwgLy8gRXhwZWN0IDQqLTEKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2Ugc2V0IHRoZSBET1kgbGFzdCwgdGhhdCBzaG91bGQgdGFrZSBwcmVjZWRlbmNlCisgICAgICAgICAgICBDYWxlbmRhci5NT05USCwgMSwgLy8gU2hvdWxkIGlnbm9yZQorICAgICAgICAgICAgQ2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEgsIDEsIC8vIFNob3VsZCBpZ25vcmUKKyAgICAgICAgICAgIENhbGVuZGFyLkRBWV9PRl9NT05USCwgMSwgLy8gU2hvdWxkIGlnbm9yZQorICAgICAgICAgICAgQ2FsZW5kYXIuREFZX09GX1lFQVIsIDEyMSwKKyAgICAgICAgICAgIEVORCwKKyAgICAgICAgICAgIDQsMSwyLCAvLyBFeHBlY3QgNCotMgorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJJ3ZlIGRpc2FibGVkIHRoaXMgdGVzdCBiZWNhdXNlIGl0IGRvZXNuJ3Qgd29yayB0aGlzIHdheSwKKyAgICAgICAgICAgIC8vIG5vdCBldmVuIHdpdGggYSBHcmVnb3JpYW5DYWxlbmRhciEgIE1PTlRIIGFsb25lIGlzbid0IGVub3VnaAorICAgICAgICAgICAgLy8gdG8gc3VwZXJzZWRlIERBWV9PRl9ZRUFSLiAgU29tZSBvdGhlciBtb250aC1yZWxhdGVkIGZpZWxkIGlzCisgICAgICAgICAgICAvLyBhbHNvIHJlcXVpcmVkLiAtIExpdSAxMS8yOC8wMAorICAgICAgICAgICAgLy8hIC8vIElmIHdlIHNldCBNT05USCBsYXN0LCB0aGF0IHNob3VsZCB0YWtlIHByZWNlZGVuY2UKKyAgICAgICAgICAgIC8vISBDaGluZXNlQ2FsZW5kYXIuSVNfTEVBUF9NT05USCwgMSwKKyAgICAgICAgICAgIC8vISBDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDEsCisgICAgICAgICAgICAvLyEgQ2FsZW5kYXIuREFZX09GX1lFQVIsIDUsIC8vIFNob3VsZCBpZ25vcmUKKyAgICAgICAgICAgIC8vISBDYWxlbmRhci5NT05USCwgMywKKyAgICAgICAgICAgIC8vISBFTkQsCisgICAgICAgICAgICAvLyEgNCwxLDEsIC8vIEV4cGVjdCA0Ki0xCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlIHNldCBJU19MRUFQX01PTlRIIGxhc3QsIHRoYXQgc2hvdWxkIHRha2UgcHJlY2VkZW5jZQorICAgICAgICAgICAgQ2FsZW5kYXIuTU9OVEgsIDMsCisgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDEsCisgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfWUVBUiwgNSwgLy8gU2hvdWxkIGlnbm9yZQorICAgICAgICAgICAgQ2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEgsIDEsCisgICAgICAgICAgICBFTkQsCisgICAgICAgICAgICA0LDEsMSwgLy8gRXhwZWN0IDQqLTEKKyAgICAgICAgfTsKKworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7ICkgeworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkVYVEVOREVEX1lFQVIsIFRIRV9ZRUFSKTsKKyAgICAgICAgICAgIGJ1Zi5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICBidWYuYXBwZW5kKCJFWFRFTkRFRF9ZRUFSPSIgKyBUSEVfWUVBUik7CisgICAgICAgICAgICB3aGlsZSAoREFUQVtpXSAhPSBFTkQpIHsKKyAgICAgICAgICAgICAgICBjYWwuc2V0KERBVEFbaSsrXSwgREFUQVtpKytdKTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCIgIiArIGZpZWxkTmFtZShEQVRBW2ktMl0pICsgIj0iICsgREFUQVtpLTFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsraTsgLy8gU2tpcCBvdmVyIEVORCBtYXJrCisgICAgICAgICAgICBpbnQgZXhwTW9udGggPSBEQVRBW2krK10tMTsKKyAgICAgICAgICAgIGludCBleHBJc0xlYXBNb250aCA9IERBVEFbaSsrXTsKKyAgICAgICAgICAgIGludCBleHBET00gPSBEQVRBW2krK107CisgICAgICAgICAgICBpbnQgbW9udGggPSBjYWwuZ2V0KENhbGVuZGFyLk1PTlRIKTsKKyAgICAgICAgICAgIGludCBpc0xlYXBNb250aCA9IGNhbC5nZXQoQ2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEgpOworICAgICAgICAgICAgaW50IGRvbSA9IGNhbC5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKyAgICAgICAgICAgIGlmIChleHBNb250aCA9PSBtb250aCAmJiBleHBJc0xlYXBNb250aCA9PSBpc0xlYXBNb250aCAmJgorICAgICAgICAgICAgICAgIGRvbSA9PSBleHBET00pIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT0s6ICIgKyBidWYgKyAiID0+ICIgKyBmbXQuZm9ybWF0KGNhbC5nZXRUaW1lKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHMgPSBmbXQuZm9ybWF0KGNhbC5nZXRUaW1lKCkpOworICAgICAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuRVhURU5ERURfWUVBUiwgVEhFX1lFQVIpOworICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIGV4cE1vbnRoKTsKKyAgICAgICAgICAgICAgICBjYWwuc2V0KENoaW5lc2VDYWxlbmRhci5JU19MRUFQX01PTlRILCBleHBJc0xlYXBNb250aCk7CisgICAgICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIGV4cERPTSk7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBidWYgKyAiID0+ICIgKyBzICsKKyAgICAgICAgICAgICAgICAgICAgICAiPSIgKyAobW9udGgrMSkgKyAiLCIgKyBpc0xlYXBNb250aCArICIsIiArIGRvbSArCisgICAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQgIiArIGZtdC5mb3JtYXQoY2FsLmdldFRpbWUoKSkgKworICAgICAgICAgICAgICAgICAgICAgICI9IiArIChleHBNb250aCsxKSArICIsIiArIGV4cElzTGVhcE1vbnRoICsgIiwiICsgZXhwRE9NKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGJlaGF2aW9yIG9mIGZpZWxkcyB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdE91dE9mUmFuZ2UoKSB7CisgICAgICAgIGludFtdIERBVEEgPSBuZXcgaW50W10geworICAgICAgICAgICAgLy8gSW5wdXQgICAgICAgT3V0cHV0CisgICAgICAgICAgICA0NjM4LCAxMywgIDEsICAgNDYzOSwgIDEsICAxLAorICAgICAgICAgICAgNDYzOCwgMTgsICAxLCAgIDQ2MzksICA2LCAgMSwKKyAgICAgICAgICAgIDQ2MzksICAwLCAgMSwgICA0NjM4LCAxMiwgIDEsCisgICAgICAgICAgICA0NjM5LCAtNiwgIDEsICAgNDYzOCwgIDYsICAxLAorICAgICAgICAgICAgNDYzOCwgIDEsIDMyLCAgIDQ2MzgsICAyLCAgMiwgLy8gMS00NjM4IGhhcyAzMCBkYXlzCisgICAgICAgICAgICA0NjM4LCAgMiwgLTEsICAgNDYzOCwgIDEsIDI5LAorICAgICAgICB9OworICAgICAgICBDaGluZXNlQ2FsZW5kYXIgY2FsID0gbmV3IENoaW5lc2VDYWxlbmRhcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7ICkgeworICAgICAgICAgICAgaW50IHkxID0gREFUQVtpKytdOworICAgICAgICAgICAgaW50IG0xID0gREFUQVtpKytdLTE7CisgICAgICAgICAgICBpbnQgZDEgPSBEQVRBW2krK107CisgICAgICAgICAgICBpbnQgeTIgPSBEQVRBW2krK107CisgICAgICAgICAgICBpbnQgbTIgPSBEQVRBW2krK10tMTsKKyAgICAgICAgICAgIGludCBkMiA9IERBVEFbaSsrXTsKKyAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5FWFRFTkRFRF9ZRUFSLCB5MSk7CisgICAgICAgICAgICBjYWwuc2V0KE1PTlRILCBtMSk7CisgICAgICAgICAgICBjYWwuc2V0KERBVEUsIGQxKTsKKyAgICAgICAgICAgIGludCB5ID0gY2FsLmdldChDYWxlbmRhci5FWFRFTkRFRF9ZRUFSKTsKKyAgICAgICAgICAgIGludCBtID0gY2FsLmdldChNT05USCk7CisgICAgICAgICAgICBpbnQgZCA9IGNhbC5nZXQoREFURSk7CisgICAgICAgICAgICBpZiAoeSE9eTIgfHwgbSE9bTIgfHwgZCE9ZDIpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIHkxICsgIi8iICsgKG0xKzEpICsgIi8iICsgZDEgKyAiIHJlc29sdmVzIHRvICIgKworICAgICAgICAgICAgICAgICAgICAgIHkgKyAiLyIgKyAobSsxKSArICIvIiArIGQgKyAiLCBleHBlY3RlZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICB5MiArICIvIiArIChtMisxKSArICIvIiArIGQyKTsKKyAgICAgICAgICAgIH0gZWxzZSAgaWYgKGlzVmVyYm9zZSgpKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9LOiAiICsgeTEgKyAiLyIgKyAobTErMSkgKyAiLyIgKyBkMSArICIgcmVzb2x2ZXMgdG8gIiArCisgICAgICAgICAgICAgICAgICAgICAgeSArICIvIiArIChtKzEpICsgIi8iICsgZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBiZWhhdmlvciBvZiBDaGluZXNlQ2FsZW5kYXIuYWRkKCkuICBUaGUgb25seSByZWFsCisgICAgICogbmFzdGluZXNzIHdpdGggcm9sbCBpcyB0aGUgTU9OVEggZmllbGQgYXJvdW5kIGxlYXAgbW9udGhzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RBZGQoKSB7CisgICAgICAgIGludFtdW10gdGVzdHMgPSBuZXcgaW50W11bXSB7CisgICAgICAgICAgICAvLyBNT05USFMgQVJFIDEtQkFTRUQgSEVSRQorICAgICAgICAgICAgLy8gaW5wdXQgICAgICAgICAgICAgICBhZGQgICAgICAgICAgIG91dHB1dAorICAgICAgICAgICAgLy8geWVhciAgbW9uICAgIGRheSAgICBmaWVsZCBhbW91bnQgIHllYXIgIG1vbiAgICBkYXkKKyAgICAgICAgICAgIHsgIDQ2NDIsICAgMywwLCAgMTUsICAgTU9OVEgsICAgMywgICA0NjQyLCAgIDYsMCwgIDE1IH0sIC8vIG5vcm1hbAorICAgICAgICAgICAgeyAgNDYzOSwgIDEyLDAsICAxNSwgICBNT05USCwgICAxLCAgIDQ2NDAsICAgMSwwLCAgMTUgfSwgLy8gYWNyb3NzIHllYXIKKyAgICAgICAgICAgIHsgIDQ2NDAsICAgMSwwLCAgMTUsICAgTU9OVEgsICAtMSwgICA0NjM5LCAgMTIsMCwgIDE1IH0sIC8vIGFjcm9zcyB5ZWFyCisgICAgICAgICAgICB7ICA0NjM4LCAgIDMsMCwgIDE1LCAgIE1PTlRILCAgIDMsICAgNDYzOCwgICA1LDAsICAxNSB9LCAvLyA0PWxlYXAKKyAgICAgICAgICAgIHsgIDQ2MzgsICAgMywwLCAgMTUsICAgTU9OVEgsICAgMiwgICA0NjM4LCAgIDQsMSwgIDE1IH0sIC8vIDQ9bGVhcAorICAgICAgICAgICAgeyAgNDYzOCwgICA0LDAsICAxNSwgICBNT05USCwgICAxLCAgIDQ2MzgsICAgNCwxLCAgMTUgfSwgLy8gND1sZWFwCisgICAgICAgICAgICB7ICA0NjM4LCAgIDQsMSwgIDE1LCAgIE1PTlRILCAgIDEsICAgNDYzOCwgICA1LDAsICAxNSB9LCAvLyA0PWxlYXAKKyAgICAgICAgICAgIHsgIDQ2MzgsICAgNCwwLCAgMzAsICAgTU9OVEgsICAgMSwgICA0NjM4LCAgIDQsMSwgIDI5IH0sIC8vIGRvbSBzaG91bGQgcGluCisgICAgICAgICAgICB7ICA0NjM4LCAgIDQsMCwgIDMwLCAgIE1PTlRILCAgIDIsICAgNDYzOCwgICA1LDAsICAzMCB9LCAvLyBubyBkb20gcGluCisgICAgICAgICAgICB7ICA0NjM4LCAgIDQsMCwgIDMwLCAgIE1PTlRILCAgIDMsICAgNDYzOCwgICA2LDAsICAyOSB9LCAvLyBkb20gc2hvdWxkIHBpbgorICAgICAgICB9OworICAgICAgIAorICAgICAgICBDaGluZXNlQ2FsZW5kYXIgY2FsID0gbmV3IENoaW5lc2VDYWxlbmRhcigpOworICAgICAgICBkb1JvbGxBZGQoQURELCBjYWwsIHRlc3RzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBiZWhhdmlvciBvZiBDaGluZXNlQ2FsZW5kYXIucm9sbCgpLiAgVGhlIG9ubHkgcmVhbAorICAgICAqIG5hc3RpbmVzcyB3aXRoIHJvbGwgaXMgdGhlIE1PTlRIIGZpZWxkIGFyb3VuZCBsZWFwIG1vbnRocy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Um9sbCgpIHsKKyAgICAgICAgaW50W11bXSB0ZXN0cyA9IG5ldyBpbnRbXVtdIHsKKyAgICAgICAgICAgIC8vIE1PTlRIUyBBUkUgMS1CQVNFRCBIRVJFCisgICAgICAgICAgICAvLyBpbnB1dCAgICAgICAgICAgICAgIGFkZCAgICAgICAgICAgb3V0cHV0CisgICAgICAgICAgICAvLyB5ZWFyICBtb24gICAgZGF5ICAgIGZpZWxkIGFtb3VudCAgeWVhciAgbW9uICAgIGRheQorICAgICAgICAgICAgeyAgNDY0MiwgICAzLDAsICAxNSwgICBNT05USCwgICAzLCAgIDQ2NDIsICAgNiwwLCAgMTUgfSwgLy8gbm9ybWFsCisgICAgICAgICAgICB7ICA0NjQyLCAgIDMsMCwgIDE1LCAgIE1PTlRILCAgMTEsICAgNDY0MiwgICAyLDAsICAxNSB9LCAvLyBub3JtYWwKKyAgICAgICAgICAgIHsgIDQ2MzksICAxMiwwLCAgMTUsICAgTU9OVEgsICAgMSwgICA0NjM5LCAgIDEsMCwgIDE1IH0sIC8vIGFjcm9zcyB5ZWFyCisgICAgICAgICAgICB7ICA0NjQwLCAgIDEsMCwgIDE1LCAgIE1PTlRILCAgLTEsICAgNDY0MCwgIDEyLDAsICAxNSB9LCAvLyBhY3Jvc3MgeWVhcgorICAgICAgICAgICAgeyAgNDYzOCwgICAzLDAsICAxNSwgICBNT05USCwgICAzLCAgIDQ2MzgsICAgNSwwLCAgMTUgfSwgLy8gND1sZWFwCisgICAgICAgICAgICB7ICA0NjM4LCAgIDMsMCwgIDE1LCAgIE1PTlRILCAgMTYsICAgNDYzOCwgICA1LDAsICAxNSB9LCAvLyA0PWxlYXAKKyAgICAgICAgICAgIHsgIDQ2MzgsICAgMywwLCAgMTUsICAgTU9OVEgsICAgMiwgICA0NjM4LCAgIDQsMSwgIDE1IH0sIC8vIDQ9bGVhcAorICAgICAgICAgICAgeyAgNDYzOCwgICAzLDAsICAxNSwgICBNT05USCwgIDI4LCAgIDQ2MzgsICAgNCwxLCAgMTUgfSwgLy8gND1sZWFwCisgICAgICAgICAgICB7ICA0NjM4LCAgIDQsMCwgIDE1LCAgIE1PTlRILCAgIDEsICAgNDYzOCwgICA0LDEsICAxNSB9LCAvLyA0PWxlYXAKKyAgICAgICAgICAgIHsgIDQ2MzgsICAgNCwwLCAgMTUsICAgTU9OVEgsIC0xMiwgICA0NjM4LCAgIDQsMSwgIDE1IH0sIC8vIDQ9bGVhcAorICAgICAgICAgICAgeyAgNDYzOCwgICA0LDEsICAxNSwgICBNT05USCwgICAxLCAgIDQ2MzgsICAgNSwwLCAgMTUgfSwgLy8gND1sZWFwCisgICAgICAgICAgICB7ICA0NjM4LCAgIDQsMSwgIDE1LCAgIE1PTlRILCAtMjUsICAgNDYzOCwgICA1LDAsICAxNSB9LCAvLyA0PWxlYXAKKyAgICAgICAgICAgIHsgIDQ2MzgsICAgNCwwLCAgMzAsICAgTU9OVEgsICAgMSwgICA0NjM4LCAgIDQsMSwgIDI5IH0sIC8vIGRvbSBzaG91bGQgcGluCisgICAgICAgICAgICB7ICA0NjM4LCAgIDQsMCwgIDMwLCAgIE1PTlRILCAgMTQsICAgNDYzOCwgICA0LDEsICAyOSB9LCAvLyBkb20gc2hvdWxkIHBpbgorICAgICAgICAgICAgeyAgNDYzOCwgICA0LDAsICAzMCwgICBNT05USCwgIDE1LCAgIDQ2MzgsICAgNSwwLCAgMzAgfSwgLy8gbm8gZG9tIHBpbgorICAgICAgICAgICAgeyAgNDYzOCwgICA0LDAsICAzMCwgICBNT05USCwgLTEwLCAgIDQ2MzgsICAgNiwwLCAgMjkgfSwgLy8gZG9tIHNob3VsZCBwaW4KKyAgICAgICAgfTsKKyAgICAgICAKKyAgICAgICAgQ2hpbmVzZUNhbGVuZGFyIGNhbCA9IG5ldyBDaGluZXNlQ2FsZW5kYXIoKTsKKyAgICAgICAgZG9Sb2xsQWRkKFJPTEwsIGNhbCwgdGVzdHMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRvUm9sbEFkZChib29sZWFuIHJvbGwsIENoaW5lc2VDYWxlbmRhciBjYWwsIGludFtdW10gdGVzdHMpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSByb2xsID8gInJvbGxpbmciIDogImFkZGluZyI7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpbnRbXSB0ZXN0ID0gdGVzdHNbaV07CisKKyAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuRVhURU5ERURfWUVBUiwgdGVzdFswXSk7CisgICAgICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5NT05USCwgdGVzdFsxXS0xKTsKKyAgICAgICAgICAgICAgICBjYWwuc2V0KENoaW5lc2VDYWxlbmRhci5JU19MRUFQX01PTlRILCB0ZXN0WzJdKTsKKyAgICAgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCwgdGVzdFszXSk7CisgICAgICAgICAgICBpZiAocm9sbCkgeworICAgICAgICAgICAgICAgIGNhbC5yb2xsKHRlc3RbNF0sIHRlc3RbNV0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjYWwuYWRkKHRlc3RbNF0sIHRlc3RbNV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNhbC5nZXQoQ2FsZW5kYXIuRVhURU5ERURfWUVBUikgIT0gdGVzdFs2XSB8fAorICAgICAgICAgICAgICAgIGNhbC5nZXQoTU9OVEgpICE9ICh0ZXN0WzddLTEpIHx8CisgICAgICAgICAgICAgICAgY2FsLmdldChDaGluZXNlQ2FsZW5kYXIuSVNfTEVBUF9NT05USCkgIT0gdGVzdFs4XSB8fAorICAgICAgICAgICAgICAgIGNhbC5nZXQoREFURSkgIT0gdGVzdFs5XSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiAiICsgbmFtZSArICIgIiArCisgICAgICAgICAgICAgICAgICAgICAgeW1kVG9TdHJpbmcodGVzdFswXSwgdGVzdFsxXS0xLCB0ZXN0WzJdLCB0ZXN0WzNdKQorICAgICAgICAgICAgICAgICAgICAgICsgIiAiICsgZmllbGROYW1lKHRlc3RbNF0pICsgIiBieSAiICsgdGVzdFs1XQorICAgICAgICAgICAgICAgICAgICAgICsgIjogZXhwZWN0ZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgeW1kVG9TdHJpbmcodGVzdFs2XSwgdGVzdFs3XS0xLCB0ZXN0WzhdLCB0ZXN0WzldKQorICAgICAgICAgICAgICAgICAgICAgICsgIiwgZ290ICIgKyB5bWRUb1N0cmluZyhjYWwpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNWZXJib3NlKCkpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT0s6ICIgKyBuYW1lICsgIiAiICsKKyAgICAgICAgICAgICAgICAgICAgICB5bWRUb1N0cmluZyh0ZXN0WzBdLCB0ZXN0WzFdLTEsIHRlc3RbMl0sIHRlc3RbM10pCisgICAgICAgICAgICAgICAgICAgICsgIiAiICsgZmllbGROYW1lKHRlc3RbNF0pICsgIiBieSAiICsgdGVzdFs1XQorICAgICAgICAgICAgICAgICAgICArICI6IGdvdCAiICsgeW1kVG9TdHJpbmcoY2FsKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHllYXIsbW9udGgsZGF5IHZhbHVlcyB0byB0aGUgZm9ybSAieWVhci9tb250aC9kYXkiLgorICAgICAqIE9uIGlucHV0IHRoZSBtb250aCB2YWx1ZSBpcyB6ZXJvLWJhc2VkLCBidXQgaW4gdGhlIHJlc3VsdCBzdHJpbmcgaXQgaXMgb25lLWJhc2VkLgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgU3RyaW5nIHltZFRvU3RyaW5nKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBpc0xlYXBNb250aCwgaW50IGRheSkgeworICAgICAgICByZXR1cm4gIiIgKyB5ZWFyICsgIi8iICsgKG1vbnRoKzEpICsKKyAgICAgICAgICAgICgoaXNMZWFwTW9udGghPTApPyIobGVhcCkiOiIiKSArCisgICAgICAgICAgICAiLyIgKyBkYXk7CisgICAgfQorCisvLyAgICBwdWJsaWMgdm9pZCBUZXN0RmluZExlYXBNb250aHMoKSB7CisvLyAgICAgICAgQ2hpbmVzZUNhbGVuZGFyIGNhbCA9IG5ldyBDaGluZXNlQ2FsZW5kYXIoKTsKKy8vICAgICAgICBjYWwuc2V0VGltZShuZXcgRGF0ZSgyMDAwLTE5MDAsIENhbGVuZGFyLkpBTlVBUlksIDEpKTsKKy8vICAgICAgICBsb25nIGVuZCA9IG5ldyBEYXRlKDIxMDAtMTkwMCwgQ2FsZW5kYXIuSkFOVUFSWSwgMSkuZ2V0VGltZSgpOworLy8gICAgICAgIENoaW5lc2VEYXRlRm9ybWF0IGZtdCA9IChDaGluZXNlRGF0ZUZvcm1hdCkgRGF0ZUZvcm1hdC5nZXRJbnN0YW5jZShjYWwpOworLy8gICAgICAgIGZtdC5hcHBseVBhdHRlcm4oInUtTU1sLWRkLCAnWWVhcicgeSwgJ0N5Y2xlJyBHIik7CisvLyAgICAgICAgd2hpbGUgKGNhbC5nZXRUaW1lSW5NaWxsaXMoKSA8IGVuZCkgeworLy8gICAgICAgICAgICBpZiAoY2FsLmdldChDaGluZXNlQ2FsZW5kYXIuSVNfTEVBUF9NT05USCkgIT0gMCkgeworLy8gICAgICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDEpOworLy8gICAgICAgICAgICAgICAgbG9nbG4oY2FsLmdldFRpbWUoKSArICIgPSAiICsgZm10LmZvcm1hdChjYWwuZ2V0VGltZSgpKSk7CisvLyAgICAgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCwgMjkpOworLy8gICAgICAgICAgICB9CisvLyAgICAgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFZX09GX1lFQVIsIDI1KTsKKy8vICAgICAgICB9CisvLyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ2hpbmVzZVRlc3RDYXNlLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ2hpbmVzZVRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDVkNWI3OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9DaGluZXNlVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0NoaW5lc2VUZXN0Q2FzZS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjE6NTM6MzggJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitwdWJsaWMgY2xhc3MgQ2hpbmVzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgeworCisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZSBhbiBvYmplY3QgdXNpbmcgYSBKdWxpYW4gZGF5IG51bWJlciBhbmQKKyAgICAgKiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgZm9yIHRoZSBjYWxlbmRhciBiZWluZyB0ZXN0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXJhIHRoZSBFUkEgZmllbGQgb2YgdGVzdGVkIGNhbGVuZGFyIG9uIHRoZSBnaXZlbiBKdWxpYW4KKyAgICAgKiBkYXkKKyAgICAgKiBAcGFyYW0geWVhciB0aGUgWUVBUiBmaWVsZCBvZiB0ZXN0ZWQgY2FsZW5kYXIgb24gdGhlIGdpdmVuCisgICAgICogSnVsaWFuIGRheQorICAgICAqIEBwYXJhbSBtb250aCB0aGUgTU9OVEggKDEtYmFzZWQpIGZpZWxkIG9mIHRlc3RlZCBjYWxlbmRhciBvbgorICAgICAqIHRoZSBnaXZlbiBKdWxpYW4gZGF5CisgICAgICogQHBhcmFtIGlzTGVhcE1vbnRoIGlmIHRydWUsIHRyZWF0IG1vbnRoIGFzIGEgbGVhcCBtb250aAorICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoIHRoZSBEQVlfT0ZfTU9OVEggZmllbGQgb2YgdGVzdGVkIGNhbGVuZGFyIG9uIHRoZQorICAgICAqIGdpdmVuIEp1bGlhbiBkYXkKKyAgICAgKiBAcGFyYW0gZGF5T2ZXZWVrIHRoZSBEQVlfT0ZfV0VFSyBmaWVsZCBvZiB0ZXN0ZWQgY2FsZW5kYXIgb24gZ2l2ZW4KKyAgICAgKiBKdWxpYW4gZGF5CisgICAgICovCisgICAgcHVibGljIENoaW5lc2VUZXN0Q2FzZShkb3VibGUganVsaWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVyYSwgaW50IHllYXIsIGludCBtb250aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNMZWFwTW9udGgsIGludCBkYXlPZk1vbnRoLCBpbnQgZGF5T2ZXZWVrKSB7CisKKyAgICAgICAgc2V0VGltZShuZXcgRGF0ZShKVUxJQU5fRVBPQ0ggKyAobG9uZykoT05FX0RBWSAqIGp1bGlhbikpKTsKKyAgICAgICAgCisgICAgICAgIHNldChDYWxlbmRhci5FUkEsIGVyYSk7CisgICAgICAgIHNldChDYWxlbmRhci5ZRUFSLCB5ZWFyKTsKKyAgICAgICAgc2V0KENhbGVuZGFyLk1PTlRILCBtb250aCAtIDEpOworICAgICAgICBzZXQoQ2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEgsIGlzTGVhcE1vbnRoPzE6MCk7CisgICAgICAgIHNldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIGRheU9mTW9udGgpOworICAgICAgICBzZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIGRheU9mV2Vlayk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGVzdCBjYXNlJ3MgdGltZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gZG93VG9TdHJpbmcoZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKSkgKworICAgICAgICAgICAgZ2V0KENhbGVuZGFyLllFQVIpICsgIm9mIiArIGdldChDYWxlbmRhci5FUkEpICsKKyAgICAgICAgICAgICIvIiArIChnZXQoQ2FsZW5kYXIuTU9OVEgpKzEpICsKKyAgICAgICAgICAgIChnZXQoQ2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEgpPT0xPyIobGVhcCkiOiIiKSArICIvIiArCisgICAgICAgICAgICBnZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ29tcGF0aWJpbGl0eVRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9Db21wYXRpYmlsaXR5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkYjVhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ29tcGF0aWJpbGl0eVRlc3QuamF2YQpAQCAtMCwwICsxLDEwNTMgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvQ29tcGF0aWJpbGl0eVRlc3QuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIxOjUzOjM4ICQKKyAqICRSZXZpc2lvbjogMS44ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudGV4dC4qOworaW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGNsYXNzIENvbXBhdGliaWxpdHlUZXN0IGV4dGVuZHMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2sgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3ZbXSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBDb21wYXRpYmlsaXR5VGVzdCgpLnJ1bihhcmd2KTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nW10gRklFTERfTkFNRSA9IHsKKyAgICAgICAgIkVSQSIsICJZRUFSIiwgIk1PTlRIIiwgIldFRUtfT0ZfWUVBUiIsICJXRUVLX09GX01PTlRIIiwKKyAgICAgICAgIkRBWV9PRl9NT05USCIsICJEQVlfT0ZfWUVBUiIsICJEQVlfT0ZfV0VFSyIsCisgICAgICAgICJEQVlfT0ZfV0VFS19JTl9NT05USCIsICJBTV9QTSIsICJIT1VSIiwgIkhPVVJfT0ZfREFZIiwKKyAgICAgICAgIk1JTlVURSIsICJTRUNPTkQiLCAiTUlMTElTRUNPTkQiLCAiWk9ORV9PRkZTRVQiLAorICAgICAgICAiRFNUX09GRlNFVCIsICJZRUFSX1dPWSIsICJET1dfTE9DQUwiLCAiRVhURU5ERURfWUVBUiIsCisgICAgICAgICJKVUxJQU5fREFZIiwgIk1JTExJU0VDT05EU19JTl9EQVkiLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBiZWhhdmlvciBvZiB0aGUgR3JlZ29yaWFuQ2FsZW5kYXIgYXJvdW5kIHRoZSBjaGFuZ2VvdmVyLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RHcmVnb3JpYW5DaGFuZ2VvdmVyKCkgeworICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE1ODIsIENhbGVuZGFyLk9DVE9CRVIsIDE1KTsKKyAgICAgICAgRGF0ZSBjbyA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICBmaW5hbCBpbnQgT05FX0RBWSA9IDI0KjYwKjYwKjEwMDA7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICAvKgorICAgICAgICAgIENoYW5nZW92ZXIgLTcgZGF5czogMTU4Mi85LzI4IGRvdz02CisgICAgICAgICAgQ2hhbmdlb3ZlciAtNiBkYXlzOiAxNTgyLzkvMjkgZG93PTcKKyAgICAgICAgICBDaGFuZ2VvdmVyIC01IGRheXM6IDE1ODIvOS8zMCBkb3c9MQorICAgICAgICAgIENoYW5nZW92ZXIgLTQgZGF5czogMTU4Mi8xMC8xIGRvdz0yCisgICAgICAgICAgQ2hhbmdlb3ZlciAtMyBkYXlzOiAxNTgyLzEwLzIgZG93PTMKKyAgICAgICAgICBDaGFuZ2VvdmVyIC0yIGRheXM6IDE1ODIvMTAvMyBkb3c9NAorICAgICAgICAgIENoYW5nZW92ZXIgLTEgZGF5czogMTU4Mi8xMC80IGRvdz01CisgICAgICAgICAgQ2hhbmdlb3ZlciArMCBkYXlzOiAxNTgyLzEwLzE1IGRvdz02CisgICAgICAgICAgQ2hhbmdlb3ZlciArMSBkYXlzOiAxNTgyLzEwLzE2IGRvdz03CisgICAgICAgICAgQ2hhbmdlb3ZlciArMiBkYXlzOiAxNTgyLzEwLzE3IGRvdz0xCisgICAgICAgICAgQ2hhbmdlb3ZlciArMyBkYXlzOiAxNTgyLzEwLzE4IGRvdz0yCisgICAgICAgICAgQ2hhbmdlb3ZlciArNCBkYXlzOiAxNTgyLzEwLzE5IGRvdz0zCisgICAgICAgICAgQ2hhbmdlb3ZlciArNSBkYXlzOiAxNTgyLzEwLzIwIGRvdz00CisgICAgICAgICAgQ2hhbmdlb3ZlciArNiBkYXlzOiAxNTgyLzEwLzIxIGRvdz01CisgICAgICAgICAgQ2hhbmdlb3ZlciArNyBkYXlzOiAxNTgyLzEwLzIyIGRvdz02CisgICAgICAgICAgKi8KKyAgICAgICAgaW50IE1PTltdID0geyAgOSwgIDksICA5LDEwLDEwLDEwLDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAgfTsKKyAgICAgICAgaW50IERPTVtdID0geyAyOCwgMjksIDMwLCAxLCAyLCAzLCA0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIgfTsKKyAgICAgICAgaW50IERPV1tdID0geyAgNiwgIDcsICAxLCAyLCAzLCA0LCA1LCAgNiwgIDcsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYgfTsKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiA8LUNoYW5nZW92ZXIgRnJpIE9jdCAxNSAxNTgyCisgICAgICAgIGludCBqPTA7CisgICAgICAgIGZvciAoaW50IGk9LTc7IGk8PTc7ICsraSwgKytqKSB7CisgICAgICAgICAgICBEYXRlIGQgPSBuZXcgRGF0ZShjby5nZXRUaW1lKCkgKyBpKk9ORV9EQVkpOworICAgICAgICAgICAgY2FsLnNldFRpbWUoZCk7CisgICAgICAgICAgICBpbnQgeSA9IGNhbC5nZXQoQ2FsZW5kYXIuWUVBUiksIG1vbiA9IGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpKzEtQ2FsZW5kYXIuSkFOVUFSWSwKKyAgICAgICAgICAgICAgICBkb20gPSBjYWwuZ2V0KENhbGVuZGFyLkRBVEUpLCBkb3cgPSBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgICAgIGxvZ2xuKCJDaGFuZ2VvdmVyICIgKyAoaT49MD8iKyI6IiIpICsKKyAgICAgICAgICAgICAgICAgIGkgKyAiIGRheXM6ICIgKyB5ICsgIi8iICsgbW9uICsgIi8iICsgZG9tICsgIiBkb3c9IiArIGRvdyk7CisgICAgICAgICAgICBpZiAoeSAhPSAxNTgyIHx8IG1vbiAhPSBNT05bal0gfHwgZG9tICE9IERPTVtqXSB8fCBkb3cgIT0gRE9XW2pdKQorICAgICAgICAgICAgICAgIGVycmxuKCIgRmFpbDogQWJvdmUgbGluZSBpcyB3cm9uZyIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgbWFwcGluZyBiZXR3ZWVuIG1pbGxpcyBhbmQgZmllbGRzLiAgRm9yIHRoZSBwdXJwb3NlcworICAgICAqIG9mIHRoaXMgdGVzdCwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aW1lem9uZXMgYW5kIHdlZWsgZGF0YQorICAgICAqIChmaXJzdCBkYXkgb2Ygd2VlaywgbWluaW1hbCBkYXlzIGluIGZpcnN0IHdlZWspLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RNYXBwaW5nKCkgeworICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgIERhdGUgUFVSRV9HUkVHT1JJQU4gPSBuZXcgRGF0ZShMb25nLk1JTl9WQUxVRSk7CisgICAgICAgICAgICBEYXRlIFBVUkVfSlVMSUFOID0gbmV3IERhdGUoTG9uZy5NQVhfVkFMVUUpOworICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsID0KKyAgICAgICAgICAgICAgICBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUuZ2V0VGltZVpvbmUoIlVUQyIpKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBFUE9DSF9KVUxJQU4gPSAyNDQwNTg4OworICAgICAgICAgICAgZmluYWwgbG9uZyBPTkVfREFZID0gMjQqNjAqNjAqMTAwMEw7CisgICAgICAgICAgICBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQgZm10ID0KKyAgICAgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0KCJFRUUgTU1NIGRkIHl5eXkgRyIpOworICAgICAgICAgICAgICAgIC8qSEg6bW06c3MuU1NTIHoqLworCisgICAgICAgICAgICBmb3IgKGludCB0eXBlPTA7IHR5cGU8MjsgKyt0eXBlKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHR5cGU9PTAgPyAiR3JlZ29yaWFuIiA6ICJKdWxpYW4iKTsKKyAgICAgICAgICAgICAgICBjYWwuc2V0R3JlZ29yaWFuQ2hhbmdlKHR5cGU9PTAgPyBQVVJFX0dSRUdPUklBTiA6IFBVUkVfSlVMSUFOKTsKKyAgICAgICAgICAgICAgICBmbXQuc2V0Q2FsZW5kYXIoY2FsKTsKKyAgICAgICAgICAgICAgICBpbnRbXSBKID0geworICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGLAorICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkYwLAorICAgICAgICAgICAgICAgICAgICAweDdGMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAweDc4MDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAweDYwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAweDUwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAweDMwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwLAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPEoubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gbGltID0gbmV3IFN0cmluZ1syXTsKKyAgICAgICAgICAgICAgICAgICAgbG9uZ1tdIG1zID0gbmV3IGxvbmdbMl07CisgICAgICAgICAgICAgICAgICAgIGludCBqZCA9IEpbaV07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpZ249MDsgc2lnbjwyOyArK3NpZ24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBqdWxpYW4gPSBqZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWduPT0wKSBqdWxpYW4gPSAtanVsaWFuOworICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtaWxsaXMgPSAoKGxvbmcpanVsaWFuIC0gRVBPQ0hfSlVMSUFOKSAqIE9ORV9EQVk7CisgICAgICAgICAgICAgICAgICAgICAgICBtc1tzaWduXSA9IG1pbGxpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5zZXRUaW1lKG5ldyBEYXRlKG1pbGxpcykpOworICAgICAgICAgICAgICAgICAgICAgICAgbGltW3NpZ25dID0gZm10LmZvcm1hdChjYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpEICsvLSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9uZy50b1N0cmluZyhqZCwgMTYpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6ICIgKyBtc1swXSArICIuLiIgKyBtc1sxXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiAiICsgbGltWzBdICsgIi4uIiArIGxpbVsxXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgVGltZVpvbmUgc2F2ZVpvbmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KFRpbWVab25lLmdldFRpbWVab25lKCJVVEMiKSk7CisgICAgICAgICAgICAvL05FV0NBTAorICAgICAgICAgICAgRGF0ZSBQVVJFX0dSRUdPUklBTiA9IG5ldyBEYXRlKExvbmcuTUlOX1ZBTFVFKTsKKyAgICAgICAgICAgIERhdGUgUFVSRV9KVUxJQU4gPSBuZXcgRGF0ZShMb25nLk1BWF9WQUxVRSk7CisgICAgICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBFUE9DSF9KVUxJQU4gPSAyNDQwNTg4OworICAgICAgICAgICAgZmluYWwgbG9uZyBPTkVfREFZID0gMjQqNjAqNjAqMTAwMEw7CisgICAgICAgICAgICBpbnRbXSBEQVRBID0geworICAgICAgICAgICAgICAgIC8vIEp1bGlhbiMgICBZZWFyICBNb250aCAgICAgICAgICAgICAgIERPTSAgIEpVTElBTjpZZWFyLCBNb250aCwgICAgICAgRE9NCisgICAgICAgICAgICAgICAgMjQ0MDU4OCwgICAgIDE5NzAsIENhbGVuZGFyLkpBTlVBUlksICAgMSwgICAgMTk2OSwgQ2FsZW5kYXIuREVDRU1CRVIsICAxOSwgCisgICAgICAgICAgICAgICAgMjQxNTA4MCwgICAgIDE5MDAsIENhbGVuZGFyLk1BUkNILCAgICAgMSwgICAgMTkwMCwgQ2FsZW5kYXIuRkVCUlVBUlksICAxNywKKyAgICAgICAgICAgICAgICAyNDUxNjA0LCAgICAgMjAwMCwgQ2FsZW5kYXIuRkVCUlVBUlksICAyOSwgICAyMDAwLCBDYWxlbmRhci5GRUJSVUFSWSwgIDE2LAorICAgICAgICAgICAgICAgIDI0NTIyNjksICAgICAyMDAxLCBDYWxlbmRhci5ERUNFTUJFUiwgIDI1LCAgIDIwMDEsIENhbGVuZGFyLkRFQ0VNQkVSLCAgMTIsCisgICAgICAgICAgICAgICAgMjQxNjUyNiwgICAgIDE5MDQsIENhbGVuZGFyLkZFQlJVQVJZLCAgMTUsICAgMTkwNCwgQ2FsZW5kYXIuRkVCUlVBUlksICAyLAorICAgICAgICAgICAgICAgIDI0MTY2NTYsICAgICAxOTA0LCBDYWxlbmRhci5KVU5FLCAgICAgIDI0LCAgIDE5MDQsIENhbGVuZGFyLkpVTkUsICAgICAgMTEsCisgICAgICAgICAgICAgICAgMTcyMTQyNiwgICAgICAgIDEsIENhbGVuZGFyLkpBTlVBUlksICAgMSwgICAgICAgMSwgQ2FsZW5kYXIuSkFOVUFSWSwgICAzLAorICAgICAgICAgICAgICAgIDIwMDAwMDAsICAgICAgNzYzLCBDYWxlbmRhci5TRVBURU1CRVIsIDE4LCAgICA3NjMsIENhbGVuZGFyLlNFUFRFTUJFUiwgMTQsCisgICAgICAgICAgICAgICAgNDAwMDAwMCwgICAgIDYyMzksIENhbGVuZGFyLkpVTFksICAgICAgMTIsICAgNjIzOSwgQ2FsZW5kYXIuTUFZLCAgICAgICAyOCwKKyAgICAgICAgICAgICAgICA4MDAwMDAwLCAgICAxNzE5MSwgQ2FsZW5kYXIuRkVCUlVBUlksICAyNiwgIDE3MTkwLCBDYWxlbmRhci5PQ1RPQkVSLCAgIDIyLAorICAgICAgICAgICAgICAgIDEwMDAwMDAwLCAgIDIyNjY2LCBDYWxlbmRhci5ERUNFTUJFUiwgIDIwLCAgMjI2NjYsIENhbGVuZGFyLkpVTFksICAgICAgNSwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7IGkrPTcpIHsKKyAgICAgICAgICAgICAgICBpbnQganVsaWFuID0gREFUQVtpXTsKKyAgICAgICAgICAgICAgICBpbnQgeWVhciA9IERBVEFbaSsxXTsKKyAgICAgICAgICAgICAgICBpbnQgbW9udGggPSBEQVRBW2krMl07CisgICAgICAgICAgICAgICAgaW50IGRvbSA9IERBVEFbaSszXTsKKyAgICAgICAgICAgICAgICBpbnQgeWVhcjIsIG1vbnRoMiwgZG9tMjsKKyAgICAgICAgICAgICAgICBsb25nIG1pbGxpcyA9IChqdWxpYW4gLSBFUE9DSF9KVUxJQU4pICogT05FX0RBWTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgczsKKworICAgICAgICAgICAgICAgIC8vIFRlc3QgR3JlZ29yaWFuIGNvbXB1dGF0aW9uCisgICAgICAgICAgICAgICAgY2FsLnNldEdyZWdvcmlhbkNoYW5nZShQVVJFX0dSRUdPUklBTik7CisgICAgICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgY2FsLnNldCh5ZWFyLCBtb250aCwgZG9tKTsKKyAgICAgICAgICAgICAgICBsb25nIGNhbE1pbGxpcyA9IGNhbC5nZXRUaW1lKCkuZ2V0VGltZSgpOworICAgICAgICAgICAgICAgIGxvbmcgZGVsdGEgPSBjYWxNaWxsaXMgLSBtaWxsaXM7CisgICAgICAgICAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUobWlsbGlzKSk7CisgICAgICAgICAgICAgICAgeWVhcjIgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICAgICAgICAgIG1vbnRoMiA9IGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICAgICAgICAgIGRvbTIgPSBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgICAgICAgICAgcyA9ICJHICIgKyB5ZWFyICsgIi0iICsgKG1vbnRoKzEtQ2FsZW5kYXIuSkFOVUFSWSkgKyAiLSIgKyBkb20gKworICAgICAgICAgICAgICAgICAgICAiID0+ICIgKyBjYWxNaWxsaXMgKworICAgICAgICAgICAgICAgICAgICAiICgiICsgKChmbG9hdClkZWx0YS9PTkVfREFZKSArICIgZGF5IGRlbHRhKSA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgeWVhcjIgKyAiLSIgKyAobW9udGgyKzEtQ2FsZW5kYXIuSkFOVUFSWSkgKyAiLSIgKyBkb20yOworICAgICAgICAgICAgICAgIGlmIChkZWx0YSAhPSAwIHx8IHllYXIgIT0geWVhcjIgfHwgbW9udGggIT0gbW9udGgyIHx8CisgICAgICAgICAgICAgICAgICAgIGRvbSAhPSBkb20yKSBlcnJsbihzICsgIiBGQUlMIik7CisgICAgICAgICAgICAgICAgZWxzZSBsb2dsbihzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUZXN0IEp1bGlhbiBjb21wdXRhdGlvbgorICAgICAgICAgICAgICAgIHllYXIgPSBEQVRBW2krNF07CisgICAgICAgICAgICAgICAgbW9udGggPSBEQVRBW2krNV07CisgICAgICAgICAgICAgICAgZG9tID0gREFUQVtpKzZdOworICAgICAgICAgICAgICAgIGNhbC5zZXRHcmVnb3JpYW5DaGFuZ2UoUFVSRV9KVUxJQU4pOworICAgICAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgICAgIGNhbC5zZXQoeWVhciwgbW9udGgsIGRvbSk7CisgICAgICAgICAgICAgICAgY2FsTWlsbGlzID0gY2FsLmdldFRpbWUoKS5nZXRUaW1lKCk7CisgICAgICAgICAgICAgICAgZGVsdGEgPSBjYWxNaWxsaXMgLSBtaWxsaXM7CisgICAgICAgICAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUobWlsbGlzKSk7CisgICAgICAgICAgICAgICAgeWVhcjIgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICAgICAgICAgIG1vbnRoMiA9IGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICAgICAgICAgIGRvbTIgPSBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgICAgICAgICAgcyA9ICJKICIgKyB5ZWFyICsgIi0iICsgKG1vbnRoKzEtQ2FsZW5kYXIuSkFOVUFSWSkgKyAiLSIgKyBkb20gKworICAgICAgICAgICAgICAgICAgICAiID0+ICIgKyBjYWxNaWxsaXMgKworICAgICAgICAgICAgICAgICAgICAiICgiICsgKChmbG9hdClkZWx0YS9PTkVfREFZKSArICIgZGF5IGRlbHRhKSA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgeWVhcjIgKyAiLSIgKyAobW9udGgyKzEtQ2FsZW5kYXIuSkFOVUFSWSkgKyAiLSIgKyBkb20yOworICAgICAgICAgICAgICAgIGlmIChkZWx0YSAhPSAwIHx8IHllYXIgIT0geWVhcjIgfHwgbW9udGggIT0gbW9udGgyIHx8CisgICAgICAgICAgICAgICAgICAgIGRvbSAhPSBkb20yKSBlcnJsbihzICsgIiBGQUlMIik7CisgICAgICAgICAgICAgICAgZWxzZSBsb2dsbihzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIHRlbXBjYWwgPSBqYXZhLnV0aWwuQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIHRlbXBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KDE1ODIsIENhbGVuZGFyLk9DVE9CRVIsIDE1KTsKKyAgICAgICAgICAgIGNhbC5zZXRHcmVnb3JpYW5DaGFuZ2UodGVtcGNhbC5nZXRUaW1lKCkpOworICAgICAgICAgICAgYXV4TWFwcGluZyhjYWwsIDE1ODIsIENhbGVuZGFyLk9DVE9CRVIsIDQpOworICAgICAgICAgICAgYXV4TWFwcGluZyhjYWwsIDE1ODIsIENhbGVuZGFyLk9DVE9CRVIsIDE1KTsKKyAgICAgICAgICAgIGF1eE1hcHBpbmcoY2FsLCAxNTgyLCBDYWxlbmRhci5PQ1RPQkVSLCAxNik7CisgICAgICAgICAgICBmb3IgKGludCB5PTgwMDsgeTwzMDAwOyB5Kz0xKyhpbnQpMTAwKk1hdGgucmFuZG9tKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBtPUNhbGVuZGFyLkpBTlVBUlk7IG08PUNhbGVuZGFyLkRFQ0VNQkVSOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgYXV4TWFwcGluZyhjYWwsIHksIG0sIDE1KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KHNhdmVab25lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcml2YXRlIHZvaWQgYXV4TWFwcGluZyhDYWxlbmRhciBjYWwsIGludCB5LCBpbnQgbSwgaW50IGQpIHsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoeSwgbSwgZCk7CisgICAgICAgIGxvbmcgbWlsbGlzID0gY2FsLmdldFRpbWUoKS5nZXRUaW1lKCk7CisgICAgICAgIGNhbC5zZXRUaW1lKG5ldyBEYXRlKG1pbGxpcykpOworICAgICAgICBpbnQgeWVhcjIgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICBpbnQgbW9udGgyID0gY2FsLmdldChDYWxlbmRhci5NT05USCk7CisgICAgICAgIGludCBkb20yID0gY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOworICAgICAgICBpZiAoeSAhPSB5ZWFyMiB8fCBtICE9IG1vbnRoMiB8fCBkb20yICE9IGQpCisgICAgICAgICAgICBlcnJsbigiUm91bmQtdHJpcCBmYWlsdXJlOiAiICsgeSArICItIiArIChtKzEpICsgIi0iK2QrIiA9Pm1zPT4gIiArCisgICAgICAgICAgICAgICAgICB5ZWFyMiArICItIiArIChtb250aDIrMSkgKyAiLSIgKyBkb20yKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0R2VuZXJpY0FQSSgpIHsKKyAgICAgICAgLy8gbm90IHVzZWQgU3RyaW5nIHN0cjsKKworICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTAsIENhbGVuZGFyLkFQUklMLCAxNSk7CisgICAgICAgIERhdGUgd2hlbiA9IHRlbXBjYWwuZ2V0VGltZSgpOworCisgICAgICAgIFN0cmluZyB0emlkID0gIlRlc3Rab25lIjsKKyAgICAgICAgaW50IHR6b2Zmc2V0ID0gMTIzNDAwOworCisgICAgICAgIFNpbXBsZVRpbWVab25lIHpvbmUgPSBuZXcgU2ltcGxlVGltZVpvbmUodHpvZmZzZXQsIHR6aWQpOworICAgICAgICBDYWxlbmRhciBjYWwgPSAoQ2FsZW5kYXIpQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKFNpbXBsZVRpbWVab25lKXpvbmUuY2xvbmUoKSk7CisKKyAgICAgICAgaWYgKCF6b25lLmVxdWFscyhjYWwuZ2V0VGltZVpvbmUoKSkpIGVycmxuKCJGQUlMOiBDYWxlbmRhci5nZXRUaW1lWm9uZSBmYWlsZWQiKTsKKworICAgICAgICBDYWxlbmRhciBjYWwyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoY2FsLmdldFRpbWVab25lKCkpOworCisgICAgICAgIGNhbC5zZXRUaW1lKHdoZW4pOworICAgICAgICBjYWwyLnNldFRpbWUod2hlbik7CisKKyAgICAgICAgaWYgKCEoY2FsLmVxdWFscyhjYWwyKSkpIGVycmxuKCJGQUlMOiBDYWxlbmRhci5vcGVyYXRvcj09IGZhaWxlZCIpOworICAgICAgICAvLyBpZiAoKCpjYWwgIT0gKmNhbDIpKSAgZXJybG4oIkZBSUw6IENhbGVuZGFyLm9wZXJhdG9yIT0gZmFpbGVkIik7CisgICAgICAgIGlmICghY2FsLmVxdWFscyhjYWwyKSB8fAorICAgICAgICAgICAgY2FsLmJlZm9yZShjYWwyKSB8fAorICAgICAgICAgICAgY2FsLmFmdGVyKGNhbDIpKSBlcnJsbigiRkFJTDogZXF1YWxzL2JlZm9yZS9hZnRlciBmYWlsZWQiKTsKKworICAgICAgICBjYWwyLnNldFRpbWUobmV3IERhdGUod2hlbi5nZXRUaW1lKCkgKyAxMDAwKSk7CisgICAgICAgIGlmIChjYWwuZXF1YWxzKGNhbDIpIHx8CisgICAgICAgICAgICBjYWwyLmJlZm9yZShjYWwpIHx8CisgICAgICAgICAgICBjYWwuYWZ0ZXIoY2FsMikpIGVycmxuKCJGQUlMOiBlcXVhbHMvYmVmb3JlL2FmdGVyIGZhaWxlZCIpOworCisgICAgICAgIGNhbC5yb2xsKENhbGVuZGFyLlNFQ09ORCwgdHJ1ZSk7CisgICAgICAgIGlmICghY2FsLmVxdWFscyhjYWwyKSB8fAorICAgICAgICAgICAgY2FsLmJlZm9yZShjYWwyKSB8fAorICAgICAgICAgICAgY2FsLmFmdGVyKGNhbDIpKSBlcnJsbigiRkFJTDogZXF1YWxzL2JlZm9yZS9hZnRlciBmYWlsZWQiKTsKKworICAgICAgICAvLyBSb2xsIGJhY2sgdG8gSmFudWFyeQorICAgICAgICBjYWwucm9sbChDYWxlbmRhci5NT05USCwgKGludCkoMSArIENhbGVuZGFyLkRFQ0VNQkVSIC0gY2FsLmdldChDYWxlbmRhci5NT05USCkpKTsKKyAgICAgICAgaWYgKGNhbC5lcXVhbHMoY2FsMikgfHwKKyAgICAgICAgICAgIGNhbDIuYmVmb3JlKGNhbCkgfHwKKyAgICAgICAgICAgIGNhbC5hZnRlcihjYWwyKSkgZXJybG4oIkZBSUw6IGVxdWFscy9iZWZvcmUvYWZ0ZXIgZmFpbGVkIik7CisKKyAgICAgICAgLy8gQysrIG9ubHkKKyAgICAgICAgLyogVGltZVpvbmUgeiA9IGNhbC5vcnBoYW5UaW1lWm9uZSgpOworICAgICAgICAgICBpZiAoei5nZXRJRChzdHIpICE9IHR6aWQgfHwKKyAgICAgICAgICAgei5nZXRSYXdPZmZzZXQoKSAhPSB0em9mZnNldCkKKyAgICAgICAgICAgZXJybG4oIkZBSUw6IG9ycGhhblRpbWVab25lIGZhaWxlZCIpOworICAgICAgICAgICAqLworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTwyOyArK2kpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gbGVuaWVudCA9ICggaSA+IDAgKTsKKyAgICAgICAgICAgIGNhbC5zZXRMZW5pZW50KGxlbmllbnQpOworICAgICAgICAgICAgaWYgKGxlbmllbnQgIT0gY2FsLmlzTGVuaWVudCgpKSBlcnJsbigiRkFJTDogc2V0TGVuaWVudC9pc0xlbmllbnQgZmFpbGVkIik7CisgICAgICAgICAgICAvLyBMYXRlcjogQ2hlY2sgZm9yIGxlbmllbnQgYmVoYXZpb3IKKyAgICAgICAgfQorCisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGk9Q2FsZW5kYXIuU1VOREFZOyBpPD1DYWxlbmRhci5TQVRVUkRBWTsgKytpKSB7CisgICAgICAgICAgICBjYWwuc2V0Rmlyc3REYXlPZldlZWsoaSk7CisgICAgICAgICAgICBpZiAoY2FsLmdldEZpcnN0RGF5T2ZXZWVrKCkgIT0gaSkgZXJybG4oIkZBSUw6IHNldC9nZXRGaXJzdERheU9mV2VlayBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaT0wOyBpPD03OyArK2kpIHsKKyAgICAgICAgICAgIGNhbC5zZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKGkpOworICAgICAgICAgICAgaWYgKGNhbC5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCkgIT0gaSkgZXJybG4oIkZBSUw6IHNldC9nZXRGaXJzdERheU9mV2VlayBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaT0wOyBpPGNhbC5nZXRGaWVsZENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGNhbC5nZXRNaW5pbXVtKGkpICE9IGNhbC5nZXRHcmVhdGVzdE1pbmltdW0oaSkpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdldE1pbmltdW0gZG9lc24ndCBtYXRjaCBnZXRHcmVhdGVzdE1pbmltdW0gZm9yIGZpZWxkICIgKyBpKTsKKyAgICAgICAgICAgIGlmIChjYWwuZ2V0TGVhc3RNYXhpbXVtKGkpID4gY2FsLmdldE1heGltdW0oaSkpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdldExlYXN0TWF4aW11bSBsYXJnZXIgdGhhbiBnZXRNYXhpbXVtIGZvciBmaWVsZCAiICsgaSk7CisgICAgICAgICAgICBpZiAoY2FsLmdldE1pbmltdW0oaSkgPj0gY2FsLmdldE1heGltdW0oaSkpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdldE1pbmltdW0gbm90IGxlc3MgdGhhbiBnZXRNYXhpbXVtIGZvciBmaWVsZCAiICsgaSk7CisgICAgICAgIH0KKworICAgICAgICBjYWwuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMTk4NCwgNSwgMjQpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5ODQsIDUsIDI0KTsKKyAgICAgICAgaWYgKGNhbC5nZXRUaW1lKCkuZ2V0VGltZSgpICE9IHRlbXBjYWwuZ2V0VGltZSgpLmdldFRpbWUoKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IENhbGVuZGFyLnNldCgzIGFyZ3MpIGZhaWxlZCIpOworICAgICAgICAgICAgbG9nbG4oIiBHb3Q6ICIgKyBjYWwuZ2V0VGltZSgpICsgIiAgRXhwZWN0ZWQ6ICIgKyB0ZW1wY2FsLmdldFRpbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgxOTg1LCAzLCAyLCAxMSwgNDkpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5ODUsIDMsIDIsIDExLCA0OSk7CisgICAgICAgIGlmIChjYWwuZ2V0VGltZSgpLmdldFRpbWUoKSAhPSB0ZW1wY2FsLmdldFRpbWUoKS5nZXRUaW1lKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBDYWxlbmRhci5zZXQoNSBhcmdzKSBmYWlsZWQiKTsKKyAgICAgICAgICAgIGxvZ2xuKCIgR290OiAiICsgY2FsLmdldFRpbWUoKSArICIgIEV4cGVjdGVkOiAiICsgdGVtcGNhbC5nZXRUaW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMTk5NSwgOSwgMTIsIDEsIDM5LCA1NSk7CisgICAgICAgIHRlbXBjYWwuY2xlYXIoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5NSwgOSwgMTIsIDEsIDM5LCA1NSk7CisgICAgICAgIGlmIChjYWwuZ2V0VGltZSgpLmdldFRpbWUoKSAhPSB0ZW1wY2FsLmdldFRpbWUoKS5nZXRUaW1lKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBDYWxlbmRhci5zZXQoNiBhcmdzKSBmYWlsZWQiKTsKKyAgICAgICAgICAgIGxvZ2xuKCIgR290OiAiICsgY2FsLmdldFRpbWUoKSArICIgIEV4cGVjdGVkOiAiICsgdGVtcGNhbC5nZXRUaW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgY2FsLmdldFRpbWUoKTsKKyAgICAgICAgLy8gVGhpcyB0ZXN0IGlzIHN0cmFuZ2UgLS0gd2h5IGRvIHdlIGV4cGVjdCBjZXJ0YWluIGZpZWxkcyB0byBiZSBzZXQsIGFuZAorICAgICAgICAvLyBvdGhlcnMgbm90IHRvIGJlPyAgUmV2aXNpdCB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHRoaXMuICAtIEFsYW4gTkVXQ0FMCisgICAgICAgIGZvciAoaT0wOyBpPGNhbC5nZXRGaWVsZENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgc3dpdGNoKGkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXIuWUVBUjogY2FzZSBDYWxlbmRhci5NT05USDogY2FzZSBDYWxlbmRhci5EQVRFOgorICAgICAgICAgICAgY2FzZSBDYWxlbmRhci5IT1VSX09GX0RBWTogY2FzZSBDYWxlbmRhci5NSU5VVEU6IGNhc2UgQ2FsZW5kYXIuU0VDT05EOgorICAgICAgICAgICAgY2FzZSBDYWxlbmRhci5FWFRFTkRFRF9ZRUFSOgorICAgICAgICAgICAgICAgIGlmICghY2FsLmlzU2V0KGkpKSBlcnJsbigiRkFJTDogIiArIEZJRUxEX05BTUVbaV0gKyAiIGlzIG5vdCBzZXQiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGNhbC5pc1NldChpKSkgZXJybG4oIkZBSUw6ICIgKyBGSUVMRF9OQU1FW2ldICsgIiBpcyBzZXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbC5jbGVhcihpKTsKKyAgICAgICAgICAgIGlmIChjYWwuaXNTZXQoaSkpIGVycmxuKCJGQUlMOiBDYWxlbmRhci5jbGVhci9pc1NldCBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRlbGV0ZSBjYWw7CisgICAgICAgIC8vIGRlbGV0ZSBjYWwyOworCisgICAgICAgIExvY2FsZVtdIGxvYyA9IENhbGVuZGFyLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgbG9uZyBjb3VudCA9IGxvYy5sZW5ndGg7CisgICAgICAgIGlmIChjb3VudCA8IDEgfHwgbG9jID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBnZXRBdmFpbGFibGVMb2NhbGVzIGZhaWxlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yIChpPTA7IGk8Y291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKGxvY1tpXSk7CisgICAgICAgICAgICAgICAgLy8gZGVsZXRlIGNhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKFRpbWVab25lLmdldERlZmF1bHQoKSwgTG9jYWxlLkVOR0xJU0gpOworICAgICAgICAvLyBkZWxldGUgY2FsOworCisgICAgICAgIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKHpvbmUsIExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgLy8gZGVsZXRlIGNhbDsKKworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBnYyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcih6b25lKTsKKyAgICAgICAgLy8gZGVsZXRlIGdjOworCisgICAgICAgIGdjID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgLy8gZGVsZXRlIGdjOworCisgICAgICAgIGdjID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgLy8gZGVsZXRlIGdjOworCisgICAgICAgIGdjID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKHpvbmUsIExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgLy8gZGVsZXRlIGdjOworCisgICAgICAgIGdjID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKHpvbmUpOworICAgICAgICAvLyBkZWxldGUgZ2M7CisKKyAgICAgICAgZ2MgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoMTk5OCwgMTAsIDE0LCAyMSwgNDMpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTgsIDEwLCAxNCwgMjEsIDQzKTsKKyAgICAgICAgaWYgKGdjLmdldFRpbWUoKS5nZXRUaW1lKCkgIT0gdGVtcGNhbC5nZXRUaW1lKCkuZ2V0VGltZSgpKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IG5ldyBHcmVnb3JpYW5DYWxlbmRhcih5bWRobSkgZmFpbGVkIik7CisgICAgICAgIC8vIGRlbGV0ZSBnYzsKKworICAgICAgICBnYyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxOTk4LCAxMCwgMTQsIDIxLCA0MywgNTUpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTgsIDEwLCAxNCwgMjEsIDQzLCA1NSk7CisgICAgICAgIGlmIChnYy5nZXRUaW1lKCkuZ2V0VGltZSgpICE9IHRlbXBjYWwuZ2V0VGltZSgpLmdldFRpbWUoKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoeW1kaG1zKSBmYWlsZWQiKTsKKworICAgICAgICAvLyBDKysgb25seToKKyAgICAgICAgLy8gR3JlZ29yaWFuQ2FsZW5kYXIgZ2MyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgLy8gZ2MyID0gZ2M7CisgICAgICAgIC8vIGlmIChnYzIgIT0gZ2MgfHwgIShnYzIgPT0gZ2MpKSBlcnJsbigiRkFJTDogR3JlZ29yaWFuQ2FsZW5kYXIgYXNzaWdubWVudC9vcGVyYXRvcj09L29wZXJhdG9yIT0gZmFpbGVkIik7CisgICAgICAgIC8vIGRlbGV0ZSBnYzsKKyAgICAgICAgLy8gZGVsZXRlIHo7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IFJvZ2VyIFdlYnN0ZXIncyBidWcKKyAgICBwdWJsaWMgdm9pZCBUZXN0Um9nKCkgeworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBnYyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworCisgICAgICAgIGludCB5ZWFyID0gMTk5NywgbW9udGggPSBDYWxlbmRhci5BUFJJTCwgZGF0ZSA9IDE7CisgICAgICAgIGdjLnNldCh5ZWFyLCBtb250aCwgZGF0ZSk7IC8vIEFwcmlsIDEsIDE5OTcKKworICAgICAgICBnYy5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIDIzKTsKKyAgICAgICAgZ2Muc2V0KENhbGVuZGFyLk1JTlVURSwgMCk7CisgICAgICAgIGdjLnNldChDYWxlbmRhci5TRUNPTkQsIDApOworICAgICAgICBnYy5zZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQsIDApOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrLCBnYy5hZGQoQ2FsZW5kYXIuREFURSwgMSkpIHsKKyAgICAgICAgICAgIGlmIChnYy5nZXQoQ2FsZW5kYXIuWUVBUikgIT0geWVhciB8fAorICAgICAgICAgICAgICAgIGdjLmdldChDYWxlbmRhci5NT05USCkgIT0gbW9udGggfHwKKyAgICAgICAgICAgICAgICBnYy5nZXQoQ2FsZW5kYXIuREFURSkgIT0gKGRhdGUgKyBpKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogRGF0ZSAiICsgZ2MuZ2V0VGltZSgpICsgIiB3cm9uZyIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVmVyaWZ5IERBWV9PRl9XRUVLCisgICAgcHVibGljIHZvaWQgVGVzdERPVzk0MygpIHsKKyAgICAgICAgZG93VGVzdChmYWxzZSk7CisgICAgICAgIGRvd1Rlc3QodHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBkb3dUZXN0KGJvb2xlYW4gbGVuaWVudCkgeworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgY2FsLnNldCgxOTk3LCBDYWxlbmRhci5BVUdVU1QsIDEyKTsgLy8gV2VkbmVzZGF5CisgICAgICAgIGNhbC5nZXRUaW1lKCk7IC8vIEZvcmNlIHVwZGF0ZQorICAgICAgICBjYWwuc2V0TGVuaWVudChsZW5pZW50KTsKKyAgICAgICAgY2FsLnNldCgxOTk2LCBDYWxlbmRhci5ERUNFTUJFUiwgMSk7IC8vIFNldCB0aGUgZGF0ZSB0byBiZSBEZWNlbWJlciAxLCAxOTk2CisgICAgICAgIGludCBkb3cgPSBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgaW50IG1pbiA9IGNhbC5nZXRNaW5pbXVtKENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgaW50IG1heCA9IGNhbC5nZXRNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgaWYgKGRvdyA8IG1pbiB8fCBkb3cgPiBtYXgpIGVycmxuKCJGQUlMOiBEYXkgb2Ygd2VlayAiICsgZG93ICsgIiBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgaWYgKGRvdyAhPSBDYWxlbmRhci5TVU5EQVkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMMjogRGF5IG9mIHdlZWsgc2hvdWxkIGJlIFNVTkRBWTsgaXMgIiArIGRvdyArICI6ICIgKyBjYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWluICE9IENhbGVuZGFyLlNVTkRBWSB8fCBtYXggIT0gQ2FsZW5kYXIuU0FUVVJEQVkpIGVycmxuKCJGQUlMOiBNaW4vbWF4IGJhZCIpOworICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjbG9uZSBtZXRob2QgcHJvZHVjZXMgZGlzdGluY3Qgb2JqZWN0cyB3aXRoIG5vCisgICAgLy8gdW5pbnRlbnRpb25hbGx5IHNoYXJlZCBmaWVsZHMuCisgICAgcHVibGljIHZvaWQgVGVzdENsb25lc1VuaXF1ZTkwOCgpIHsKKyAgICAgICAgQ2FsZW5kYXIgYyA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIENhbGVuZGFyIGQgPSAoQ2FsZW5kYXIpYy5jbG9uZSgpOworICAgICAgICBjLnNldChDYWxlbmRhci5NSUxMSVNFQ09ORCwgMTIzKTsKKyAgICAgICAgZC5zZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQsIDQ1Nik7CisgICAgICAgIGlmIChjLmdldChDYWxlbmRhci5NSUxMSVNFQ09ORCkgIT0gMTIzIHx8CisgICAgICAgICAgICBkLmdldChDYWxlbmRhci5NSUxMSVNFQ09ORCkgIT0gNDU2KSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogQ2xvbmVzIHNoYXJlIGZpZWxkcyIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVmVyaWZ5IGVmZmVjdCBvZiBHcmVnb3JpYW4gY3V0b2ZmIHZhbHVlCisgICAgcHVibGljIHZvaWQgVGVzdEdyZWdvcmlhbkNoYW5nZTc2OCgpIHsKKyAgICAgICAgYm9vbGVhbiBiOworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIGxvZ2xuKCJXaXRoIGN1dG9mZiAiICsgYy5nZXRHcmVnb3JpYW5DaGFuZ2UoKSk7CisgICAgICAgIGxvZ2xuKCIgaXNMZWFwWWVhcigxODAwKSA9ICIgKyAoYj1jLmlzTGVhcFllYXIoMTgwMCkpKTsKKyAgICAgICAgbG9nbG4oIiAoc2hvdWxkIGJlIEZBTFNFKSIpOworICAgICAgICBpZiAoYiAhPSBmYWxzZSkgZXJybG4oIkZBSUwiKTsKKyAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIHRlbXBjYWwgPSBqYXZhLnV0aWwuQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgdGVtcGNhbC5jbGVhcigpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTAwLCAwLCAxKTsKKyAgICAgICAgYy5zZXRHcmVnb3JpYW5DaGFuZ2UodGVtcGNhbC5nZXRUaW1lKCkpOyAvLyBKYW4gMSAxOTAwCisgICAgICAgIGxvZ2xuKCJXaXRoIGN1dG9mZiAiICsgYy5nZXRHcmVnb3JpYW5DaGFuZ2UoKSk7CisgICAgICAgIGxvZ2xuKCIgaXNMZWFwWWVhcigxODAwKSA9ICIgKyAoYj1jLmlzTGVhcFllYXIoMTgwMCkpKTsKKyAgICAgICAgbG9nbG4oIiAoc2hvdWxkIGJlIFRSVUUpIik7CisgICAgICAgIGlmIChiICE9IHRydWUpIGVycmxuKCJGQUlMIik7CisgICAgfQorCisgICAgLy8gVGVzdCB0aGUgY29ycmVjdCBiZWhhdmlvciBvZiB0aGUgZGlzYW1iaWd1YXRpb24gYWxnb3JpdGhtLgorICAgIHB1YmxpYyB2b2lkIFRlc3REaXNhbWJpZ3VhdGlvbjc2NSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgYy5zZXRMZW5pZW50KGZhbHNlKTsKKworICAgICAgICBjLmNsZWFyKCk7CisgICAgICAgIGMuc2V0KENhbGVuZGFyLllFQVIsIDE5OTcpOworICAgICAgICBjLnNldChDYWxlbmRhci5NT05USCwgQ2FsZW5kYXIuSlVORSk7CisgICAgICAgIGMuc2V0KENhbGVuZGFyLkRBVEUsIDMpOworCisgICAgICAgIHZlcmlmeTc2NSgiMTk5NyB0aGlyZCBkYXkgb2YgSnVuZSA9ICIsIGMsIDE5OTcsIENhbGVuZGFyLkpVTkUsIDMpOworCisgICAgICAgIGMuY2xlYXIoKTsKKyAgICAgICAgYy5zZXQoQ2FsZW5kYXIuWUVBUiwgMTk5Nyk7CisgICAgICAgIGMuc2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLLCBDYWxlbmRhci5UVUVTREFZKTsKKyAgICAgICAgYy5zZXQoQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkpVTkUpOworICAgICAgICBjLnNldChDYWxlbmRhci5EQVlfT0ZfV0VFS19JTl9NT05USCwgMSk7CisgICAgICAgIHZlcmlmeTc2NSgiMTk5NyBmaXJzdCBUdWVzZGF5IGluIEp1bmUgPSAiLCBjLCAxOTk3LCBDYWxlbmRhci5KVU5FLCAzKTsKKworICAgICAgICBjLmNsZWFyKCk7CisgICAgICAgIGMuc2V0KENhbGVuZGFyLllFQVIsIDE5OTcpOworICAgICAgICBjLnNldChDYWxlbmRhci5EQVlfT0ZfV0VFSywgQ2FsZW5kYXIuVFVFU0RBWSk7CisgICAgICAgIGMuc2V0KENhbGVuZGFyLk1PTlRILCBDYWxlbmRhci5KVU5FKTsKKyAgICAgICAgYy5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUtfSU5fTU9OVEgsIC0xKTsKKyAgICAgICAgdmVyaWZ5NzY1KCIxOTk3IGxhc3QgVHVlc2RheSBpbiBKdW5lID0gIiwgYywgMTk5NywgQ2FsZW5kYXIuSlVORSwgMjQpOworCisgICAgICAgIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMuY2xlYXIoKTsKKyAgICAgICAgICAgIGMuc2V0KENhbGVuZGFyLllFQVIsIDE5OTcpOworICAgICAgICAgICAgYy5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIENhbGVuZGFyLlRVRVNEQVkpOworICAgICAgICAgICAgYy5zZXQoQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkpVTkUpOworICAgICAgICAgICAgYy5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUtfSU5fTU9OVEgsIDApOworICAgICAgICAgICAgYy5nZXRUaW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgZSA9IGV4OworICAgICAgICB9CisgICAgICAgIHZlcmlmeTc2NSgiMTk5NyB6ZXJvLXRoIFR1ZXNkYXkgaW4gSnVuZSA9ICIsIGUsIGMpOworCisgICAgICAgIGMuY2xlYXIoKTsKKyAgICAgICAgYy5zZXQoQ2FsZW5kYXIuWUVBUiwgMTk5Nyk7CisgICAgICAgIGMuc2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLLCBDYWxlbmRhci5UVUVTREFZKTsKKyAgICAgICAgYy5zZXQoQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkpVTkUpOworICAgICAgICBjLnNldChDYWxlbmRhci5XRUVLX09GX01PTlRILCAxKTsKKyAgICAgICAgdmVyaWZ5NzY1KCIxOTk3IFR1ZXNkYXkgaW4gd2VlayAxIG9mIEp1bmUgPSAiLCBjLCAxOTk3LCBDYWxlbmRhci5KVU5FLCAzKTsKKworICAgICAgICBjLmNsZWFyKCk7CisgICAgICAgIGMuc2V0KENhbGVuZGFyLllFQVIsIDE5OTcpOworICAgICAgICBjLnNldChDYWxlbmRhci5EQVlfT0ZfV0VFSywgQ2FsZW5kYXIuVFVFU0RBWSk7CisgICAgICAgIGMuc2V0KENhbGVuZGFyLk1PTlRILCBDYWxlbmRhci5KVU5FKTsKKyAgICAgICAgYy5zZXQoQ2FsZW5kYXIuV0VFS19PRl9NT05USCwgNSk7CisgICAgICAgIHZlcmlmeTc2NSgiMTk5NyBUdWVzZGF5IGluIHdlZWsgNSBvZiBKdW5lID0gIiwgYywgMTk5NywgQ2FsZW5kYXIuSlVMWSwgMSk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMuY2xlYXIoKTsKKyAgICAgICAgICAgIGMuc2V0KENhbGVuZGFyLllFQVIsIDE5OTcpOworICAgICAgICAgICAgYy5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIENhbGVuZGFyLlRVRVNEQVkpOworICAgICAgICAgICAgYy5zZXQoQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkpVTkUpOworICAgICAgICAgICAgYy5zZXQoQ2FsZW5kYXIuV0VFS19PRl9NT05USCwgMCk7CisgICAgICAgICAgICB2ZXJpZnk3NjUoIjE5OTcgVHVlc2RheSBpbiB3ZWVrIDAgb2YgSnVuZSA9ICIsIGMsIDE5OTcsIENhbGVuZGFyLk1BWSwgMjcpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeGNlcHRpb24gc2VlbjoiKTsKKyAgICAgICAgICAgIC8vIGV4LnByaW50U3RhY2tUcmFjZShsb2cpOworICAgICAgICB9CisKKyAgICAgICAgYy5jbGVhcigpOworICAgICAgICBjLnNldChDYWxlbmRhci5ZRUFSLCAxOTk3KTsKKyAgICAgICAgYy5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIENhbGVuZGFyLlRVRVNEQVkpOworICAgICAgICBjLnNldChDYWxlbmRhci5XRUVLX09GX1lFQVIsIDEpOworICAgICAgICB2ZXJpZnk3NjUoIjE5OTcgVHVlc2RheSBpbiB3ZWVrIDEgb2YgeWVhciA9ICIsIGMsIDE5OTYsIENhbGVuZGFyLkRFQ0VNQkVSLCAzMSk7CisKKyAgICAgICAgYy5jbGVhcigpOworICAgICAgICBjLnNldChDYWxlbmRhci5ZRUFSLCAxOTk3KTsKKyAgICAgICAgYy5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIENhbGVuZGFyLlRVRVNEQVkpOworICAgICAgICBjLnNldChDYWxlbmRhci5XRUVLX09GX1lFQVIsIDEwKTsKKyAgICAgICAgdmVyaWZ5NzY1KCIxOTk3IFR1ZXNkYXkgaW4gd2VlayAxMCBvZiB5ZWFyID0gIiwgYywgMTk5NywgQ2FsZW5kYXIuTUFSQ0gsIDQpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjLmNsZWFyKCk7CisgICAgICAgICAgICBjLnNldChDYWxlbmRhci5ZRUFSLCAxOTk3KTsKKyAgICAgICAgICAgIGMuc2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLLCBDYWxlbmRhci5UVUVTREFZKTsKKyAgICAgICAgICAgIGMuc2V0KENhbGVuZGFyLldFRUtfT0ZfWUVBUiwgMCk7CisgICAgICAgICAgICB2ZXJpZnk3NjUoIjE5OTcgVHVlc2RheSBpbiB3ZWVrIDAgb2YgeWVhciA9ICIsIGMsIDE5OTYsIENhbGVuZGFyLkRFQ0VNQkVSLCAyNCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJGYWlsOiBXRUVLX09GX1lFQVIgMCBzaG91bGQgYmUgaWxsZWdhbCIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgdmVyaWZ5NzY1KFN0cmluZyBtc2csIENhbGVuZGFyIGMsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpIHsKKyAgICAgICAgaW50IGN5ID0gYy5nZXQoQ2FsZW5kYXIuWUVBUik7IC8vIE5FV0NBTAorICAgICAgICBpbnQgY20gPSBjLmdldChDYWxlbmRhci5NT05USCk7CisgICAgICAgIGludCBjZCA9IGMuZ2V0KENhbGVuZGFyLkRBVEUpOworICAgICAgICBpZiAoY3kgPT0geWVhciAmJgorICAgICAgICAgICAgY20gPT0gbW9udGggJiYKKyAgICAgICAgICAgIGNkID09IGRheSkgeworICAgICAgICAgICAgbG9nbG4oIlBBU1M6ICIgKyBtc2cgKyBjLmdldFRpbWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIG1zZyArIGN5ICsgIi8iICsgKGNtKzEpICsgIi8iICsgY2QgKworICAgICAgICAgICAgICAgICAgIj0iICsgYy5nZXRUaW1lKCkgKworICAgICAgICAgICAgICAgICAgIjsgZXhwZWN0ZWQgIiArCisgICAgICAgICAgICAgICAgICB5ZWFyICsgIi8iICsgKG1vbnRoKzEpICsgIi8iICsgZGF5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBDYWxsZWQgd2hlbiBlIGV4cGVjdGVkIHRvIGJlIG5vbi1udWxsCisgICAgdm9pZCB2ZXJpZnk3NjUoU3RyaW5nIG1zZywgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUsIENhbGVuZGFyIGMpIHsKKyAgICAgICAgaWYgKGUgPT0gbnVsbCkgZXJybG4oIkZBSUw6IE5vIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBmb3IgIiArIG1zZyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0VGltZSgpKTsKKyAgICAgICAgZWxzZSBsb2dsbigiUEFTUzogIiArIG1zZyArICJJbGxlZ2FsQXJndW1lbnQgYXMgZXhwZWN0ZWQiKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IHRoZSBiZWhhdmlvciBvZiBHTVQgdnMuIGxvY2FsIHRpbWUKKyAgICBwdWJsaWMgdm9pZCBUZXN0R01UdnNMb2NhbDQwNjQ2NTQoKSB7CisgICAgICAgIC8vIFNhbXBsZSBvdXRwdXQgMToKKyAgICAgICAgLy8gJSAvdXNyL2xvY2FsL2phdmEvamRrMS4xLjMvc29sYXJpcy9iaW4vamF2YSB0ZXN0IDE5OTcgMSAxIDEyIDAgMAorICAgICAgICAvLyBkYXRlID0gV2VkIEphbiAwMSAwNDowMDowMCBQU1QgMTk5NworICAgICAgICAvLyBvZmZzZXQgZm9yIFdlZCBKYW4gMDEgMDQ6MDA6MDAgUFNUIDE5OTc9IC04aHIKKyAgICAgICAgYXV4NDA2NDY1NCgxOTk3LCAxLCAxLCAxMiwgMCwgMCk7CisKKyAgICAgICAgLy8gU2FtcGxlIG91dHB1dCAyOgorICAgICAgICAvLyAlIC91c3IvbG9jYWwvamF2YS9qZGsxLjEuMy9zb2xhcmlzL2Jpbi9qYXZhIHRlc3QgMTk5NyA0IDE2IDE4IDMwIDAKKyAgICAgICAgLy8gZGF0ZSA9IFdlZCBBcHIgMTYgMTA6MzA6MDAgUERUIDE5OTcKKyAgICAgICAgLy8gb2Zmc2V0IGZvciBXZWQgQXByIDE2IDEwOjMwOjAwIFBEVCAxOTk3PSAtN2hyCisKKyAgICAgICAgLy8gTm90ZSB0aGF0IGluIHNhbXBsZSBvdXRwdXQgMiBhY2NvcmRpbmcgdG8gdGhlIG9mZnNldCwgdGhlIGdtdCB0aW1lCisgICAgICAgIC8vIG9mIHRoZSByZXN1bHQgd291bGQgYmUgMTk5NyA0IDE2IDE3IDMwIDAgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlCisgICAgICAgIC8vIGlucHV0IG9mIDE5OTcgNCAxNiAxOCAzMCAwLgorICAgICAgICBhdXg0MDY0NjU0KDE5OTcsIDQsIDE2LCAxOCwgMzAsIDApOworICAgIH0KKyAgICB2b2lkIGF1eDQwNjQ2NTQoaW50IHlyLCBpbnQgbW8sIGludCBkdCwgaW50IGhyLCBpbnQgbW4sIGludCBzYykgeworICAgICAgICBEYXRlIGRhdGU7CisgICAgICAgIENhbGVuZGFyIGdtdGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGdtdGNhbC5zZXRUaW1lWm9uZShUaW1lWm9uZS5nZXRUaW1lWm9uZSgiQWZyaWNhL0Nhc2FibGFuY2EiKSk7CisgICAgICAgIGdtdGNhbC5zZXQoeXIsIG1vLTEsIGR0LCBociwgbW4sIHNjKTsKKyAgICAgICAgZ210Y2FsLnNldChDYWxlbmRhci5NSUxMSVNFQ09ORCwgMCk7CisKKyAgICAgICAgZGF0ZSA9IGdtdGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGxvZ2xuKCJkYXRlID0gIitkYXRlKTsKKworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCWNhbC5zZXRUaW1lWm9uZShUaW1lWm9uZS5nZXRUaW1lWm9uZSgiQW1lcmljYS9Mb3NfQW5nZWxzIikpOworICAgICAgICBjYWwuc2V0VGltZShkYXRlKTsKKworICAgICAgICBpbnQgb2Zmc2V0ID0gY2FsLmdldFRpbWVab25lKCkuZ2V0T2Zmc2V0KGNhbC5nZXQoQ2FsZW5kYXIuRVJBKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLllFQVIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuREFURSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5NSUxMSVNFQ09ORCkpOworCisgICAgICAgIGxvZ2xuKCJvZmZzZXQgZm9yICIrZGF0ZSsiPSAiKyhvZmZzZXQvMTAwMC82MC82MC4wKSArICJociIpOworCisgICAgICAgIGludCB1dGMgPSAoKGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpICogNjAgKworICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLk1JTlVURSkpICogNjAgKworICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuU0VDT05EKSkgKiAxMDAwICsKKyAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpIC0gb2Zmc2V0OworCisgICAgICAgIGludCBleHBlY3RlZCA9ICgoaHIgKiA2MCArIG1uKSAqIDYwICsgc2MpICogMTAwMDsKKworICAgICAgICBpZiAodXRjICE9IGV4cGVjdGVkKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IERpc2NyZXBhbmN5IG9mICIgKworICAgICAgICAgICAgICAgICAgKHV0YyAtIGV4cGVjdGVkKSArICIgbWlsbGlzID0gIiArCisgICAgICAgICAgICAgICAgICAoKHV0Yy1leHBlY3RlZCkvMTAwMC82MC82MC4wKSArICIgaHIiKTsKKyAgICB9CisKKyAgICAvLyBWZXJpZnkgdGhhdCBhZGQgYW5kIHNldCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIGluIHdoaWNoCisgICAgLy8gdGhleSBhcmUgY2FsbGVkLgorICAgIHB1YmxpYyB2b2lkIFRlc3RBZGRTZXRPcmRlcjYyMSgpIHsKKyAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIHRlbXBjYWwgPSBqYXZhLnV0aWwuQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgdGVtcGNhbC5jbGVhcigpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCA0LCAxNCwgMTMsIDIzLCA0NSk7CisgICAgICAgIERhdGUgZCA9IHRlbXBjYWwuZ2V0VGltZSgpOworCisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlICgpOworICAgICAgICBjYWwuc2V0VGltZSAoZCk7CisgICAgICAgIGNhbC5hZGQgKENhbGVuZGFyLkRBVEUsIC01KTsKKyAgICAgICAgY2FsLnNldCAoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIDApOworICAgICAgICBjYWwuc2V0IChDYWxlbmRhci5NSU5VVEUsIDApOworICAgICAgICBjYWwuc2V0IChDYWxlbmRhci5TRUNPTkQsIDApOworICAgICAgICAvLyBtYSBmZWIgMDMgMDA6MDA6MDAgR01UKzAwOjAwIDE5OTcKKyAgICAgICAgU3RyaW5nIHMgPSBjYWwuZ2V0VGltZSAoKS50b1N0cmluZyAoKTsKKworICAgICAgICBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSAoKTsKKyAgICAgICAgY2FsLnNldFRpbWUgKGQpOworICAgICAgICBjYWwuc2V0IChDYWxlbmRhci5IT1VSX09GX0RBWSwgMCk7CisgICAgICAgIGNhbC5zZXQgKENhbGVuZGFyLk1JTlVURSwgMCk7CisgICAgICAgIGNhbC5zZXQgKENhbGVuZGFyLlNFQ09ORCwgMCk7CisgICAgICAgIGNhbC5hZGQgKENhbGVuZGFyLkRBVEUsIC01KTsKKyAgICAgICAgLy8gbWEgZmViIDAzIDEzOjExOjA2IEdNVCswMDowMCAxOTk3CisgICAgICAgIFN0cmluZyBzMiA9IGNhbC5nZXRUaW1lICgpLnRvU3RyaW5nICgpOworCisgICAgICAgIGlmIChzLmVxdWFscyhzMikpCisgICAgICAgICAgICBsb2dsbigiUGFzczogIiArIHMgKyAiID09ICIgKyBzMik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgcyArICIgIT0gIiArIHMyKTsKKyAgICB9CisKKyAgICAvLyBWZXJpZnkgdGhhdCBhZGQgd29ya3MuCisgICAgcHVibGljIHZvaWQgVGVzdEFkZDUyMCgpIHsKKyAgICAgICAgaW50IHkgPSAxOTk3LCBtID0gQ2FsZW5kYXIuRkVCUlVBUlksIGQgPSAxOworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciB0ZW1wID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCB5LCBtLCBkICk7CisgICAgICAgIGNoZWNrNTIwKHRlbXAsIHksIG0sIGQpOworCisgICAgICAgIHRlbXAuYWRkKCB0ZW1wLllFQVIsIDEgKTsKKyAgICAgICAgeSsrOworICAgICAgICBjaGVjazUyMCh0ZW1wLCB5LCBtLCBkKTsKKworICAgICAgICB0ZW1wLmFkZCggdGVtcC5NT05USCwgMSApOworICAgICAgICBtKys7CisgICAgICAgIGNoZWNrNTIwKHRlbXAsIHksIG0sIGQpOworCisgICAgICAgIHRlbXAuYWRkKCB0ZW1wLkRBVEUsIDEgKTsKKyAgICAgICAgZCsrOworICAgICAgICBjaGVjazUyMCh0ZW1wLCB5LCBtLCBkKTsKKworICAgICAgICB0ZW1wLmFkZCggdGVtcC5EQVRFLCAyICk7CisgICAgICAgIGQgKz0gMjsKKyAgICAgICAgY2hlY2s1MjAodGVtcCwgeSwgbSwgZCk7CisKKyAgICAgICAgdGVtcC5hZGQoIHRlbXAuREFURSwgMjggKTsKKyAgICAgICAgZCA9IDE7ICsrbTsKKyAgICAgICAgY2hlY2s1MjAodGVtcCwgeSwgbSwgZCk7CisgICAgfQorICAgIHZvaWQgY2hlY2s1MjAoQ2FsZW5kYXIgYywgaW50IHksIGludCBtLCBpbnQgZCkgeworICAgICAgICBpZiAoYy5nZXQoQ2FsZW5kYXIuWUVBUikgIT0geSB8fAorICAgICAgICAgICAgYy5nZXQoQ2FsZW5kYXIuTU9OVEgpICE9IG0gfHwKKyAgICAgICAgICAgIGMuZ2V0KENhbGVuZGFyLkRBVEUpICE9IGQpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMVVJFOiBFeHBlY3RlZCBZRUFSL01PTlRIL0RBVEUgb2YgIiArCisgICAgICAgICAgICAgICAgICB5ICsgIi8iICsgKG0rMSkgKyAiLyIgKyBkICsKKyAgICAgICAgICAgICAgICAgICI7IGdvdCAiICsKKyAgICAgICAgICAgICAgICAgIGMuZ2V0KENhbGVuZGFyLllFQVIpICsgIi8iICsKKyAgICAgICAgICAgICAgICAgIChjLmdldChDYWxlbmRhci5NT05USCkrMSkgKyAiLyIgKworICAgICAgICAgICAgICAgICAgYy5nZXQoQ2FsZW5kYXIuREFURSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgbG9nbG4oIkNvbmZpcm1lZDogIiArCisgICAgICAgICAgICAgICAgICAgeSArICIvIiArIChtKzEpICsgIi8iICsgZCk7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IHRoYXQgc2V0dGluZyBmaWVsZHMgd29ya3MuICBUaGlzIHRlc3QgZmFpbHMgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgorICAgIHB1YmxpYyB2b2lkIFRlc3RGaWVsZFNldDQ3ODEoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBnID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBnMiA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBVVEMgdmFsdWUgaXMgc2V0LCB2YXJpb3VzIGZpZWxkcyBhcmUgbm90LgorICAgICAgICAgICAgLy8gTm93IHNldCB0byBub29uLgorICAgICAgICAgICAgZzIuc2V0KENhbGVuZGFyLkhPVVIsIDEyKTsKKyAgICAgICAgICAgIGcyLnNldChDYWxlbmRhci5NSU5VVEUsIDApOworICAgICAgICAgICAgZzIuc2V0KENhbGVuZGFyLlNFQ09ORCwgMCk7CisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBvYmplY3QgdGhpbmtzIFVUQyBpcyBOT1Qgc2V0LCBidXQgZmllbGRzIGFyZSBzZXQuCisgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGxpbmUgd2lsbCByZXN1bHQgaW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGJlY2F1c2UKKyAgICAgICAgICAgIC8vIGl0IHRoaW5rcyB0aGUgWUVBUiBpcyBzZXQgYW5kIGl0IGlzIE5PVC4KKyAgICAgICAgICAgIGlmIChnMi5lcXVhbHMoZykpCisgICAgICAgICAgICAgICAgbG9nbG4oIlNhbWUiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2dsbigiRGlmZmVyZW50Iik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiVW5leHBlY3RlZCBleGNlcHRpb24gc2VlbjogIiArIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGVzdCBzZXJpYWxpemF0aW9uIG9mIGEgQ2FsZW5kYXIgb2JqZWN0CisgICAgcHVibGljIHZvaWQgVGVzdFNlcmlhbGl6ZTMzNygpIHsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKworICAgICAgICBib29sZWFuIG9rID0gZmFsc2U7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZiA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKEZJTEVOQU1FKTsKKyAgICAgICAgICAgIE9iamVjdE91dHB1dCBzID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShmKTsKKyAgICAgICAgICAgIHMud3JpdGVPYmplY3QoUFJFRklYKTsKKyAgICAgICAgICAgIHMud3JpdGVPYmplY3QoY2FsKTsKKyAgICAgICAgICAgIHMud3JpdGVPYmplY3QoUE9TVEZJWCk7CisgICAgICAgICAgICBmLmNsb3NlKCk7CisKKyAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oRklMRU5BTUUpOworICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gdCA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShpbik7CisgICAgICAgICAgICBTdHJpbmcgcHJlID0gKFN0cmluZyl0LnJlYWRPYmplY3QoKTsKKyAgICAgICAgICAgIENhbGVuZGFyIGMgPSAoQ2FsZW5kYXIpdC5yZWFkT2JqZWN0KCk7CisgICAgICAgICAgICBTdHJpbmcgcG9zdCA9IChTdHJpbmcpdC5yZWFkT2JqZWN0KCk7CisgICAgICAgICAgICBpbi5jbG9zZSgpOworCisgICAgICAgICAgICBvayA9IHByZS5lcXVhbHMoUFJFRklYKSAmJgorICAgICAgICAgICAgICAgIHBvc3QuZXF1YWxzKFBPU1RGSVgpICYmCisgICAgICAgICAgICAgICAgY2FsLmVxdWFscyhjKTsKKworICAgICAgICAgICAgRmlsZSBmbCA9IG5ldyBGaWxlKEZJTEVOQU1FKTsKKyAgICAgICAgICAgIGZsLmRlbGV0ZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhjZXB0aW9uIHJlY2VpdmVkOiIpOworICAgICAgICAgICAgLy8gZS5wcmludFN0YWNrVHJhY2UobG9nKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhjZXB0aW9uIHJlY2VpdmVkOiIpOworICAgICAgICAgICAgLy8gZS5wcmludFN0YWNrVHJhY2UobG9nKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghb2spIGVycmxuKCJTZXJpYWxpemF0aW9uIG9mIENhbGVuZGFyIG9iamVjdCBmYWlsZWQuIik7CisgICAgfQorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYID0gImFiYyI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBQT1NURklYID0gImRlZiI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFTkFNRSA9ICJ0bXAzMzcuYmluIjsKKworICAgIC8vIFRyeSB0byB6ZXJvIG91dCB0aGUgc2Vjb25kcyBmaWVsZAorICAgIHB1YmxpYyB2b2lkIFRlc3RTZWNvbmRzWmVybzEyMSgpIHsKKyAgICAgICAgQ2FsZW5kYXIgICAgICAgIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICAvLyBJbml0aWFsaXplIHdpdGggY3VycmVudCBkYXRlL3RpbWUKKyAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUoKSk7CisgICAgICAgIC8vIFJvdW5kIGRvd24gdG8gbWludXRlCisgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuU0VDT05ELCAwKTsKKyAgICAgICAgRGF0ZSAgICBkID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgU3RyaW5nIHMgPSBkLnRvU3RyaW5nKCk7CisgICAgICAgIGlmIChzLmluZGV4T2YoIjowMCAiKSA8IDApIGVycmxuKCJFeHBlY3RlZCB0byBzZWUgOjAwIGluICIgKyBzKTsKKyAgICB9CisKKyAgICAvLyBUcnkgdmFyaW91cyBzZXF1ZW5jZXMgb2YgYWRkLCBzZXQsIGFuZCBnZXQgbWV0aG9kIGNhbGxzLgorICAgIHB1YmxpYyB2b2lkIFRlc3RBZGRTZXRHZXQwNjEwKCkgeworICAgICAgICAvLworICAgICAgICAvLyBFcnJvciBjYXNlIDE6CisgICAgICAgIC8vIC0gVXBvbiBpbml0aWFsaXphdGlvbiBjYWxlbmRhciBmaWVsZHMsIG1pbGxpcyA9IFN5c3RlbS5jdXJyZW50VGltZQorICAgICAgICAvLyAtIEFmdGVyIHNldCBpcyBjYWxsZWQgZmllbGRzIGFyZSBpbml0aWFsaXplZCwgdGltZSBpcyBub3QKKyAgICAgICAgLy8gLSBBZGRpdGlvbiB1c2VzIG1pbGxpcyB3aGljaCBhcmUgc3RpbGwgKm5vdyoKKyAgICAgICAgLy8KKyAgICAgICAgeworICAgICAgICAgICAgQ2FsZW5kYXIgY2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoICkgOworICAgICAgICAgICAgY2FsZW5kYXIuc2V0KCAxOTkzLCBDYWxlbmRhci5KQU5VQVJZLCA0ICkgOworICAgICAgICAgICAgbG9nbG4oICIxQSkgIiArIHZhbHVlKCBjYWxlbmRhciApICkgOworICAgICAgICAgICAgY2FsZW5kYXIuYWRkKCBDYWxlbmRhci5EQVRFLCAxICkgOworICAgICAgICAgICAgU3RyaW5nIHYgPSB2YWx1ZShjYWxlbmRhcik7CisgICAgICAgICAgICBsb2dsbiggIjFCKSAiICsgdiApOworICAgICAgICAgICAgbG9nbG4oICItLSkgMTk5My8wLzUiICkgOworICAgICAgICAgICAgaWYgKCF2LmVxdWFscyhFWFBFQ1RFRF8wNjEwKSkgZXJybG4oIkV4cGVjdGVkICIgKyBFWFBFQ1RFRF8wNjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7IHNhdyAiICsgdik7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBFcnJvciBjYXNlIDI6CisgICAgICAgIC8vIC0gVXBvbiBpbml0aWFsaXphdGlvbiBjYWxlbmRhciBmaWVsZHMgc2V0LCBtaWxsaXMgPSAwCisgICAgICAgIC8vIC0gQWRkaXRpb24gdXNlcyBtaWxsaXMgd2hpY2ggYXJlIHN0aWxsIDE5NzAsIDAsIDEKKyAgICAgICAgLy8KKworICAgICAgICB7CisgICAgICAgICAgICBDYWxlbmRhciBjYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhciggMTk5MywgQ2FsZW5kYXIuSkFOVUFSWSwgNCApIDsKKyAgICAgICAgICAgIGxvZ2xuKCAiMkEpICIgKyB2YWx1ZSggY2FsZW5kYXIgKSApIDsKKyAgICAgICAgICAgIGNhbGVuZGFyLmFkZCggQ2FsZW5kYXIuREFURSwgMSApIDsKKyAgICAgICAgICAgIFN0cmluZyB2ID0gdmFsdWUoY2FsZW5kYXIpOworICAgICAgICAgICAgbG9nbG4oICIyQikgIiArIHYgKTsKKyAgICAgICAgICAgIGxvZ2xuKCAiLS0pIDE5OTMvMC81IiApIDsKKyAgICAgICAgICAgIGlmICghdi5lcXVhbHMoRVhQRUNURURfMDYxMCkpIGVycmxuKCJFeHBlY3RlZCAiICsgRVhQRUNURURfMDYxMCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOyBzYXcgIiArIHYpOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXJyb3IgY2FzZSAzOgorICAgICAgICAvLyAtIFVwb24gaW5pdGlhbGl6YXRpb24gY2FsZW5kYXIgZmllbGRzLCBtaWxsaXMgPSAwCisgICAgICAgIC8vIC0gZ2V0VGltZSggKSBpcyBjYWxsZWQgd2hpY2ggZm9yY2VzIHRoZSBtaWxsaXMgdG8gYmUgc2V0CisgICAgICAgIC8vIC0gQWRkaXRpb24gdXNlcyBtaWxsaXMgd2hpY2ggYXJlIGNvcnJlY3QKKyAgICAgICAgLy8KKworICAgICAgICB7CisgICAgICAgICAgICBDYWxlbmRhciBjYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhciggMTk5MywgQ2FsZW5kYXIuSkFOVUFSWSwgNCApIDsKKyAgICAgICAgICAgIGxvZ2xuKCAiM0EpICIgKyB2YWx1ZSggY2FsZW5kYXIgKSApIDsKKyAgICAgICAgICAgIGNhbGVuZGFyLmdldFRpbWUoICkgOworICAgICAgICAgICAgY2FsZW5kYXIuYWRkKCBDYWxlbmRhci5EQVRFLCAxICkgOworICAgICAgICAgICAgU3RyaW5nIHYgPSB2YWx1ZShjYWxlbmRhcik7CisgICAgICAgICAgICBsb2dsbiggIjNCKSAiICsgdiApIDsKKyAgICAgICAgICAgIGxvZ2xuKCAiLS0pIDE5OTMvMC81IiApIDsKKyAgICAgICAgICAgIGlmICghdi5lcXVhbHMoRVhQRUNURURfMDYxMCkpIGVycmxuKCJFeHBlY3RlZCAiICsgRVhQRUNURURfMDYxMCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOyBzYXcgIiArIHYpOworICAgICAgICB9CisgICAgfQorICAgIHN0YXRpYyBTdHJpbmcgdmFsdWUoIENhbGVuZGFyIGNhbGVuZGFyICkgeworICAgICAgICByZXR1cm4oIGNhbGVuZGFyLmdldCggQ2FsZW5kYXIuWUVBUiApICArICIvIiArCisgICAgICAgICAgICAgICAgY2FsZW5kYXIuZ2V0KCBDYWxlbmRhci5NT05USCApICsgIi8iICsKKyAgICAgICAgICAgICAgICBjYWxlbmRhci5nZXQoIENhbGVuZGFyLkRBVEUgKSApIDsKKyAgICB9CisgICAgc3RhdGljIFN0cmluZyBFWFBFQ1RFRF8wNjEwID0gIjE5OTMvMC81IjsKKworICAgIC8vIFRlc3QgdGhhdCBjZXJ0YWluIGZpZWxkcyBvbiBhIGNlcnRhaW4gZGF0ZSBhcmUgYXMgZXhwZWN0ZWQuCisgICAgcHVibGljIHZvaWQgVGVzdEZpZWxkczA2MCgpIHsKKyAgICAgICAgaW50IHllYXIgPSAxOTk3OworICAgICAgICBpbnQgbW9udGggPSBqYXZhLnV0aWwuQ2FsZW5kYXIuT0NUT0JFUjsgIC8vb2N0b2JlcgorICAgICAgICBpbnQgZERhdGUgPSAyMjsgICAvL0RBWU9GV0VFSyBzaG91bGQgcmV0dXJuIDMgZm9yIFdlZG5lc2RheQorICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWxlbmRhciA9IG51bGw7CisKKyAgICAgICAgY2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoIHllYXIsIG1vbnRoLCBkRGF0ZSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxFWFBFQ1RFRF9GSUVMRFMubGVuZ3RoOyApIHsKKyAgICAgICAgICAgIGludCBmaWVsZCA9IEVYUEVDVEVEX0ZJRUxEU1tpKytdOworICAgICAgICAgICAgaW50IGV4cGVjdGVkID0gRVhQRUNURURfRklFTERTW2krK107CisgICAgICAgICAgICBpZiAoY2FsZW5kYXIuZ2V0KGZpZWxkKSAhPSBleHBlY3RlZCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFeHBlY3RlZCBmaWVsZCAiICsgZmllbGQgKyAiIHRvIGhhdmUgdmFsdWUgIiArIGV4cGVjdGVkICsKKyAgICAgICAgICAgICAgICAgICAgICAiOyByZWNlaXZlZCAiICsgY2FsZW5kYXIuZ2V0KGZpZWxkKSArICIgaW5zdGVhZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHN0YXRpYyBpbnQgRVhQRUNURURfRklFTERTW10gPSB7CisgICAgICAgIENhbGVuZGFyLllFQVIsIDE5OTcsCisgICAgICAgIENhbGVuZGFyLk1PTlRILCBDYWxlbmRhci5PQ1RPQkVSLAorICAgICAgICBDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDIyLAorICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFSywgQ2FsZW5kYXIuV0VETkVTREFZLAorICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFS19JTl9NT05USCwgNCwKKyAgICAgICAgQ2FsZW5kYXIuREFZX09GX1lFQVIsIDI5NQorICAgIH07CisKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgZmllbGRzIGFyZSBhcyBleHBlY3RlZCAobW9zdGx5IHplcm8pIGF0IHRoZSBlcG9jaCBzdGFydC4KKyAgICAvLyBOb3RlIHRoYXQgd2UgYWRqdXN0IGZvciB0aGUgZGVmYXVsdCB0aW1lem9uZSB0byBnZXQgbW9zdCB0aGluZ3MgdG8gemVyby4KKyAgICBwdWJsaWMgdm9pZCBUZXN0RXBvY2hTdGFydEZpZWxkcygpIHsKKyAgICAgICAgVGltZVpvbmUgeiA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAgICAgQ2FsZW5kYXIgYyA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIERhdGUgZCA9IG5ldyBEYXRlKC16LmdldFJhd09mZnNldCgpKTsKKyAgICAgICAgaWYgKHouaW5EYXlsaWdodFRpbWUoZCkpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJXYXJuaW5nOiBTa2lwcGluZyB0ZXN0IGJlY2F1c2UgIiArIGQgKworICAgICAgICAgICAgICAgICAgIiBpcyBpbiBEU1QuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjLnNldFRpbWUoZCk7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8Q2FsZW5kYXIuWk9ORV9PRkZTRVQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjLmdldChpKSAhPSBFUE9DSF9GSUVMRFNbaV0pCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFeHBlY3RlZCBmaWVsZCAiICsgaSArICIgdG8gaGF2ZSB2YWx1ZSAiICsgRVBPQ0hfRklFTERTW2ldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjsgc2F3ICIgKyBjLmdldChpKSArICIgaW5zdGVhZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMuZ2V0KENhbGVuZGFyLlpPTkVfT0ZGU0VUKSAhPSB6LmdldFJhd09mZnNldCgpKQorICAgICAgICAgICAgICAgIGVycmxuKCJFeHBlY3RlZCBmaWVsZCBaT05FX09GRlNFVCB0byBoYXZlIHZhbHVlICIgKyB6LmdldFJhd09mZnNldCgpICsKKyAgICAgICAgICAgICAgICAgICAgICAiOyBzYXcgIiArIGMuZ2V0KENhbGVuZGFyLlpPTkVfT0ZGU0VUKSArICIgaW5zdGVhZCIpOworICAgICAgICAgICAgaWYgKGMuZ2V0KENhbGVuZGFyLkRTVF9PRkZTRVQpICE9IDApCisgICAgICAgICAgICAgICAgZXJybG4oIkV4cGVjdGVkIGZpZWxkIERTVF9PRkZTRVQgdG8gaGF2ZSB2YWx1ZSAwIiArCisgICAgICAgICAgICAgICAgICAgICAgIjsgc2F3ICIgKyBjLmdldChDYWxlbmRhci5EU1RfT0ZGU0VUKSArICIgaW5zdGVhZCIpOworICAgICAgICB9CisgICAgfQorICAgIC8vIFRoZXNlIGFyZSB0aGUgZmllbGRzIGF0IHRoZSBlcG9jaCBzdGFydAorICAgIHN0YXRpYyBpbnQgRVBPQ0hfRklFTERTW10gPSB7IDEsIDE5NzAsIDAsIDEsIDEsIDEsIDEsIDUsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIC0yODgwMDAwMCwgMCB9OworCisgICAgLy8gVmVyaWZ5IHRoYXQgYXMgeW91IGFkZCBkYXlzIHRvIHRoZSBjYWxlbmRhciAoZS5nLiwgMjQgZGF5IHBlcmlvZHMpLAorICAgIC8vIHRoZSBkYXkgb2YgdGhlIHdlZWsgc2hpZnRzIGluIHRoZSBleHBlY3RlZCBwYXR0ZXJuLgorICAgIHB1YmxpYyB2b2lkIFRlc3RET1dQcm9ncmVzc2lvbigpIHsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0KKyAgICAgICAgICAgIG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxOTcyLCBDYWxlbmRhci5PQ1RPQkVSLCAyNik7CisgICAgICAgIG1hcmNoQnlEZWx0YShjYWwsIDI0KTsgLy8gTGFzdCBwYXJhbWV0ZXIgbXVzdCBiZSAhPSAwIG1vZHVsbyA3CisgICAgfQorCisgICAgLy8gU3VwcGx5IGEgZGVsdGEgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgNy4KKyAgICB2b2lkIG1hcmNoQnlEZWx0YShDYWxlbmRhciBjYWwsIGludCBkZWx0YSkgeworICAgICAgICBDYWxlbmRhciBjdXIgPSAoQ2FsZW5kYXIpY2FsLmNsb25lKCk7CisgICAgICAgIGludCBpbml0aWFsRE9XID0gY3VyLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSyk7CisgICAgICAgIGludCBET1csIG5ld0RPVyA9IGluaXRpYWxET1c7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIERPVyA9IG5ld0RPVzsKKyAgICAgICAgICAgIGxvZ2xuKCJET1cgPSAiICsgRE9XICsgIiAgIiArIGN1ci5nZXRUaW1lKCkpOworCisgICAgICAgICAgICBjdXIuYWRkKENhbGVuZGFyLkRBWV9PRl9XRUVLLCBkZWx0YSk7CisgICAgICAgICAgICBuZXdET1cgPSBjdXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKyAgICAgICAgICAgIGludCBleHBlY3RlZERPVyA9IDEgKyAoRE9XICsgZGVsdGEgLSAxKSAlIDc7CisgICAgICAgICAgICBpZiAobmV3RE9XICE9IGV4cGVjdGVkRE9XKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkRheSBvZiB3ZWVrIHNob3VsZCBiZSAiICsgZXhwZWN0ZWRET1cgKworICAgICAgICAgICAgICAgICAgICAgICIgaW5zdGVhZCBvZiAiICsgbmV3RE9XICsgIiBvbiAiICsgY3VyLmdldFRpbWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChuZXdET1cgIT0gaW5pdGlhbERPVyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEFjdHVhbE1pbk1heCgpIHsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKDE5NjcsIENhbGVuZGFyLk1BUkNILCAxMCk7CisgICAgICAgIGNhbC5zZXRGaXJzdERheU9mV2VlayhDYWxlbmRhci5TVU5EQVkpOworICAgICAgICBjYWwuc2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygzKTsKKworICAgICAgICBpZiAoY2FsLmdldEFjdHVhbE1pbmltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKSAhPSAxKQorICAgICAgICAgICAgZXJybG4oIkFjdHVhbCBtaW5pbXVtIGRhdGUgZm9yIDMvMTAvMTk2NyBzaG91bGQgaGF2ZSBiZWVuIDE7IGdvdCAiICsKKyAgICAgICAgICAgICAgICAgIGNhbC5nZXRBY3R1YWxNaW5pbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCkpOworICAgICAgICBpZiAoY2FsLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKSAhPSAzMSkKKyAgICAgICAgICAgIGVycmxuKCJBY3R1YWwgbWF4aW11bSBkYXRlIGZvciAzLzEwLzE5Njcgc2hvdWxkIGhhdmUgYmVlbiAzMTsgZ290ICIgKworICAgICAgICAgICAgICAgICAgY2FsLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisKKyAgICAgICAgY2FsLnNldChDYWxlbmRhci5NT05USCwgQ2FsZW5kYXIuRkVCUlVBUlkpOworICAgICAgICBpZiAoY2FsLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKSAhPSAyOCkKKyAgICAgICAgICAgIGVycmxuKCJBY3R1YWwgbWF4aW11bSBkYXRlIGZvciAyLzEwLzE5Njcgc2hvdWxkIGhhdmUgYmVlbiAyODsgZ290ICIgKworICAgICAgICAgICAgICAgICAgY2FsLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgIGlmIChjYWwuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5EQVlfT0ZfWUVBUikgIT0gMzY1KQorICAgICAgICAgICAgZXJybG4oIk51bWJlciBvZiBkYXlzIGluIDE5Njcgc2hvdWxkIGhhdmUgYmVlbiAzNjU7IGdvdCAiICsKKyAgICAgICAgICAgICAgICAgIGNhbC5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9ZRUFSKSk7CisKKyAgICAgICAgY2FsLnNldChDYWxlbmRhci5ZRUFSLCAxOTY4KTsKKyAgICAgICAgaWYgKGNhbC5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCkgIT0gMjkpCisgICAgICAgICAgICBlcnJsbigiQWN0dWFsIG1heGltdW0gZGF0ZSBmb3IgMi8xMC8xOTY4IHNob3VsZCBoYXZlIGJlZW4gMjk7IGdvdCAiICsKKyAgICAgICAgICAgICAgICAgIGNhbC5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCkpOworICAgICAgICBpZiAoY2FsLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX1lFQVIpICE9IDM2NikKKyAgICAgICAgICAgIGVycmxuKCJOdW1iZXIgb2YgZGF5cyBpbiAxOTY4IHNob3VsZCBoYXZlIGJlZW4gMzY2OyBnb3QgIiArCisgICAgICAgICAgICAgICAgICBjYWwuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5EQVlfT0ZfWUVBUikpOworICAgICAgICAvLyBVc2luZyB3ZWVrIHNldHRpbmdzIG9mIFNVTkRBWS8zIChzZWUgYWJvdmUpCisgICAgICAgIGlmIChjYWwuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5XRUVLX09GX1lFQVIpICE9IDUyKQorICAgICAgICAgICAgZXJybG4oIk51bWJlciBvZiB3ZWVrcyBpbiAxOTY4IHNob3VsZCBoYXZlIGJlZW4gNTI7IGdvdCAiICsKKyAgICAgICAgICAgICAgICAgIGNhbC5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLldFRUtfT0ZfWUVBUikpOworCisgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuWUVBUiwgMTk3Nik7CisgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuREFZX09GX1dFRUssIGNhbC5nZXRGaXJzdERheU9mV2VlaygpKTsgLy8gQWRkZWQgLSBMaXUgMTEvNi8wMAorICAgICAgICAvLyBVc2luZyB3ZWVrIHNldHRpbmdzIG9mIFNVTkRBWS8zIChzZWUgYWJvdmUpCisgICAgICAgIGlmIChjYWwuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5XRUVLX09GX1lFQVIpICE9IDUzKQorICAgICAgICAgICAgZXJybG4oIk51bWJlciBvZiB3ZWVrcyBpbiAxOTc2IHNob3VsZCBoYXZlIGJlZW4gNTM7IGdvdCAiICsKKyAgICAgICAgICAgICAgICAgIGNhbC5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLldFRUtfT0ZfWUVBUikpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RSb2xsKCkgeworICAgICAgICBDYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoMTk5NywgQ2FsZW5kYXIuSkFOVUFSWSwgMzEpOworCisgICAgICAgIGludFtdIGRheVZhbHVlcyA9IHsgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEgfTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXlWYWx1ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIENhbGVuZGFyIGNhbDIgPSAoQ2FsZW5kYXIpY2FsLmNsb25lKCk7CisgICAgICAgICAgICBjYWwyLnJvbGwoQ2FsZW5kYXIuTU9OVEgsIGkpOworICAgICAgICAgICAgaWYgKGNhbDIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkgIT0gZGF5VmFsdWVzW2ldKQorICAgICAgICAgICAgICAgIGVycmxuKCJSb2xsaW5nIHRoZSBtb250aCBpbiAxLzMxLzE5OTcgdXAgYnkgIiArIGkgKyAiIHNob3VsZCBoYXZlIHlpZWxkZWQgIgorICAgICAgICAgICAgICAgICAgICAgICsgKChpICsgMSkgJSAxMikgKyAiLyIgKyBkYXlWYWx1ZXNbaV0gKyAiLzE5OTcsIGJ1dCBhY3R1YWxseSB5aWVsZGVkICIKKyAgICAgICAgICAgICAgICAgICAgICArICgoaSArIDEpICUgMTIpICsgIi8iICsgY2FsMi5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSArICIvMTk5Ny4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhbC5zZXQoMTk5NiwgQ2FsZW5kYXIuRkVCUlVBUlksIDI5KTsKKworICAgICAgICAvL2ludFtdIG1vbnRoVmFsdWVzID0geyAxLCAyLCAyLCAyLCAxLCAyLCAyLCAyLCAxLCAyIH07CisgICAgICAgIC8vaW50W10gZGF5VmFsdWVzMiA9IHsgMjksIDEsIDEsIDEsIDI5LCAxLCAxLCAxLCAyOSwgMSB9OworCisgICAgICAgIC8vIEkndmUgcmV2aXNlZCB0aGUgZXhwZWN0ZWQgdmFsdWVzIHRvIG1ha2UgbW9yZSBzZW5zZSAtLSByb2xsaW5nCisgICAgICAgIC8vIHRoZSB5ZWFyIHNob3VsZCBwaW4gdGhlIERBWV9PRl9NT05USC4gLSBMaXUgMTEvNi8wMAorICAgICAgICBpbnRbXSBtb250aFZhbHVlcyA9IHsgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9OworICAgICAgICBpbnRbXSBkYXlWYWx1ZXMyID0geyAyOSwgMjgsIDI4LCAyOCwgMjksIDI4LCAyOCwgMjgsIDI5LCAyOCB9OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF5VmFsdWVzMi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgQ2FsZW5kYXIgY2FsMiA9IChDYWxlbmRhciljYWwuY2xvbmUoKTsKKyAgICAgICAgICAgIGNhbDIucm9sbChDYWxlbmRhci5ZRUFSLCBpKTsKKyAgICAgICAgICAgIGlmIChjYWwyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpICE9IGRheVZhbHVlczJbaV0gfHwgY2FsMi5nZXQoQ2FsZW5kYXIuTU9OVEgpCisgICAgICAgICAgICAgICAgIT0gbW9udGhWYWx1ZXNbaV0pCisgICAgICAgICAgICAgICAgZXJybG4oIlJvbGwgMi8yOS8xOTk2IGJ5ICIgKyBpICsgIiB5ZWFyOiBleHBlY3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgKyAobW9udGhWYWx1ZXNbaV0gKyAxKSArICIvIiArIGRheVZhbHVlczJbaV0gKyAiLyIKKyAgICAgICAgICAgICAgICAgICAgICArICgxOTk2ICsgaSkgKyAiLCBnb3QgIgorICAgICAgICAgICAgICAgICAgICAgICsgKGNhbDIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDEpICsgIi8iICsKKyAgICAgICAgICAgICAgICAgICAgICBjYWwyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpICsgIi8iICsgY2FsMi5nZXQoQ2FsZW5kYXIuWUVBUikpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCByb2xsaW5nIGhvdXIgb2YgZGF5CisgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIDApOworICAgICAgICBjYWwucm9sbChDYWxlbmRhci5IT1VSX09GX0RBWSwgLTIpOworICAgICAgICBpbnQgZiA9IGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOworICAgICAgICBpZiAoZiAhPSAyMikgZXJybG4oIlJvbGxpbmcgSE9VUl9PRl9EQVk9MCBkZWx0YT0tMiBnYXZlICIgKyBmICsgIiBXYW50ZWQgMjIiKTsKKyAgICAgICAgY2FsLnJvbGwoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIDUpOworICAgICAgICBmID0gY2FsLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSk7CisgICAgICAgIGlmIChmICE9IDMpIGVycmxuKCJSb2xsaW5nIEhPVVJfT0ZfREFZPTIyIGRlbHRhPTUgZ2F2ZSAiICsgZiArICIgV2FudGVkIDMiKTsKKyAgICAgICAgY2FsLnJvbGwoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIDIxKTsKKyAgICAgICAgZiA9IGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOworICAgICAgICBpZiAoZiAhPSAwKSBlcnJsbigiUm9sbGluZyBIT1VSX09GX0RBWT0zIGRlbHRhPTIxIGdhdmUgIiArIGYgKyAiIFdhbnRlZCAwIik7CisKKyAgICAgICAgLy8gVGVzdCByb2xsaW5nIGhvdXIKKyAgICAgICAgY2FsLnNldChDYWxlbmRhci5IT1VSX09GX0RBWSwgMCk7CisgICAgICAgIGNhbC5yb2xsKENhbGVuZGFyLkhPVVIsIC0yKTsKKyAgICAgICAgZiA9IGNhbC5nZXQoQ2FsZW5kYXIuSE9VUik7CisgICAgICAgIGlmIChmICE9IDEwKSBlcnJsbigiUm9sbGluZyBIT1VSPTAgZGVsdGE9LTIgZ2F2ZSAiICsgZiArICIgV2FudGVkIDEwIik7CisgICAgICAgIGNhbC5yb2xsKENhbGVuZGFyLkhPVVIsIDUpOworICAgICAgICBmID0gY2FsLmdldChDYWxlbmRhci5IT1VSKTsKKyAgICAgICAgaWYgKGYgIT0gMykgZXJybG4oIlJvbGxpbmcgSE9VUj0xMCBkZWx0YT01IGdhdmUgIiArIGYgKyAiIFdhbnRlZCAzIik7CisgICAgICAgIGNhbC5yb2xsKENhbGVuZGFyLkhPVVIsIDkpOworICAgICAgICBmID0gY2FsLmdldChDYWxlbmRhci5IT1VSKTsKKyAgICAgICAgaWYgKGYgIT0gMCkgZXJybG4oIlJvbGxpbmcgSE9VUj0zIGRlbHRhPTkgZ2F2ZSAiICsgZiArICIgV2FudGVkIDAiKTsKKyAgICB9Cit9CisKKy8vZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvSGVicmV3VGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0hlYnJld1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjAyNTJhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0hlYnJld1Rlc3QuamF2YQpAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0hlYnJld1Rlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wNyAwMzoxMDoxOCAkIAorICogJFJldmlzaW9uOiAxLjUgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY2FsZW5kYXI7CisKKy8vaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CisvL2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5Mb2NhbGVVdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuSGVicmV3Q2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5UaW1lWm9uZTsKKworLyoqCisgKiBUZXN0cyBmb3IgdGhlIDxjb2RlPkhlYnJld0NhbGVuZGFyPC9jb2RlPiBjbGFzcy4KKyAqLworcHVibGljIGNsYXNzIEhlYnJld1Rlc3QgZXh0ZW5kcyBDYWxlbmRhclRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgSGVicmV3VGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICAvLyBDb25zdGFudHMgdG8gc2F2ZSB0eXBpbmcuCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElTSFJJICA9IEhlYnJld0NhbGVuZGFyLlRJU0hSSTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIRVNIVkFOID0gSGVicmV3Q2FsZW5kYXIuSEVTSFZBTjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSVNMRVYgID0gSGVicmV3Q2FsZW5kYXIuS0lTTEVWOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFVkVUICAgPSBIZWJyZXdDYWxlbmRhci5URVZFVDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSEVWQVQgID0gSGVicmV3Q2FsZW5kYXIuU0hFVkFUOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFEQVJfMSAgPSBIZWJyZXdDYWxlbmRhci5BREFSXzE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQURBUiAgICA9IEhlYnJld0NhbGVuZGFyLkFEQVI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTklTQU4gICA9IEhlYnJld0NhbGVuZGFyLk5JU0FOOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElZQVIgICAgPSBIZWJyZXdDYWxlbmRhci5JWUFSOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJVkFOICAgPSBIZWJyZXdDYWxlbmRhci5TSVZBTjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUQU1VWiAgID0gSGVicmV3Q2FsZW5kYXIuVEFNVVo7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVYgICAgICA9IEhlYnJld0NhbGVuZGFyLkFWOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVMVUwgICAgPSBIZWJyZXdDYWxlbmRhci5FTFVMOworCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgYmVoYXZpb3Igb2YgSGVicmV3Q2FsZW5kYXIucm9sbAorICAgICAqIFRoZSBvbmx5IHJlYWwgbmFzdGluZXNzIHdpdGggcm9sbCBpcyB0aGUgTU9OVEggZmllbGQsIHNpbmNlIGEgeWVhciBjYW4KKyAgICAgKiBoYXZlIGEgdmFyaWFibGUgbnVtYmVyIG9mIG1vbnRocy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Um9sbCgpIHsKKyAgICAgICAgaW50W11bXSB0ZXN0cyA9IG5ldyBpbnRbXVtdIHsKKyAgICAgICAgICAgIC8vICAgICAgIGlucHV0ICAgICAgICAgICAgICAgIHJvbGwgYnkgICAgICAgICAgb3V0cHV0CisgICAgICAgICAgICAvLyAgeWVhciAgbW9udGggICAgIGRheSAgICAgZmllbGQgYW1vdW50ICAgIHllYXIgIG1vbnRoICAgICBkYXkKKyAgICAKKyAgICAgICAgICAgIHsgICA1NzU5LCBIRVNIVkFOLCAgIDIsICAgICBNT05USCwgICAxLCAgICAgNTc1OSwgS0lTTEVWLCAgICAyIH0sICAgLy8gbm9uLWxlYXAgeWVhcnMKKyAgICAgICAgICAgIHsgICA1NzU5LCBTSEVWQVQsICAgIDIsICAgICBNT05USCwgICAxLCAgICAgNTc1OSwgQURBUiwgICAgICAyIH0sCisgICAgICAgICAgICB7ICAgNTc1OSwgU0hFVkFULCAgICAyLCAgICAgTU9OVEgsICAgMiwgICAgIDU3NTksIE5JU0FOLCAgICAgMiB9LAorICAgICAgICAgICAgeyAgIDU3NTksIFNIRVZBVCwgICAgMiwgICAgIE1PTlRILCAgMTIsICAgICA1NzU5LCBTSEVWQVQsICAgIDIgfSwKKyAgICAgICAgICAgIHsgICA1NzU5LCBBViwgICAgICAgIDEsICAgICBNT05USCwgIDEyLCAgICAgNTc1OSwgQVYsICAgICAgICAxIH0sIC8vIEFsYW4KKworICAgICAgICAgICAgeyAgIDU3NTcsIEhFU0hWQU4sICAgMiwgICAgIE1PTlRILCAgIDEsICAgICA1NzU3LCBLSVNMRVYsICAgIDIgfSwgICAvLyBsZWFwIHllYXJzCisgICAgICAgICAgICB7ICAgNTc1NywgU0hFVkFULCAgICAyLCAgICAgTU9OVEgsICAgMSwgICAgIDU3NTcsIEFEQVJfMSwgICAgMiB9LAorICAgICAgICAgICAgeyAgIDU3NTcsIFNIRVZBVCwgICAgMiwgICAgIE1PTlRILCAgIDIsICAgICA1NzU3LCBBREFSLCAgICAgIDIgfSwKKyAgICAgICAgICAgIHsgICA1NzU3LCBTSEVWQVQsICAgIDIsICAgICBNT05USCwgICAzLCAgICAgNTc1NywgTklTQU4sICAgICAyIH0sCisgICAgICAgICAgICB7ICAgNTc1NywgU0hFVkFULCAgICAyLCAgICAgTU9OVEgsICAxMiwgICAgIDU3NTcsIFRFVkVULCAgICAgMiB9LAorICAgICAgICAgICAgeyAgIDU3NTcsIFNIRVZBVCwgICAgMiwgICAgIE1PTlRILCAgMTMsICAgICA1NzU3LCBTSEVWQVQsICAgIDIgfSwKKyAgICAgICAgICAgIHsgICA1NzU3LCBBViwgICAgICAgIDEsICAgICBNT05USCwgIDEyLCAgICAgNTc1NywgVEFNVVosICAgICAxIH0sIC8vIEFsYW4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgeyAgIDU3NTcsIEtJU0xFViwgICAgMSwgICAgIERBVEUsICAgMzAsICAgICA1NzU3LCBLSVNMRVYsICAgIDIgfSwgICAvLyAyOS1kYXkgbW9udGgKKyAgICAgICAgICAgIHsgICA1NzU4LCBLSVNMRVYsICAgIDEsICAgICBEQVRFLCAgIDMxLCAgICAgNTc1OCwgS0lTTEVWLCAgICAyIH0sICAgLy8gMzAtZGF5IG1vbnRoCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRyeSBzb21lIG90aGVyIGZpZWxkcyB0b28KKyAgICAgICAgICAgIHsgICA1NzU3LCBUSVNIUkksICAgIDEsICAgICBZRUFSLCAgICAxLCAgICAgNTc1OCwgVElTSFJJLCAgICAxIH0sCisgICAKKworICAgICAgICAgICAgLy8gVHJ5IHNvbWUgcm9sbHMgdGhhdCByZXF1aXJlIG90aGVyIGZpZWxkcyB0byBiZSBhZGp1c3RlZAorICAgICAgICAgICAgeyAgIDU3NTcsIFRJU0hSSSwgICAzMCwgICAgIE1PTlRILCAgIDEsICAgICA1NzU3LCBIRVNIVkFOLCAgMjkgfSwKKyAgICAgICAgICAgIHsgICA1NzU4LCBLSVNMRVYsICAgMzAsICAgICBZRUFSLCAgIC0xLCAgICAgNTc1NywgS0lTTEVWLCAgIDI5IH0sCisgICAgICAgIH07CisgICAgICAgCisgICAgICAgIEhlYnJld0NhbGVuZGFyIGNhbCA9IG5ldyBIZWJyZXdDYWxlbmRhcihVVEMsIExvY2FsZS5nZXREZWZhdWx0KCkpOworCisgICAgICAgIGRvUm9sbEFkZChST0xMLCBjYWwsIHRlc3RzKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgYmVoYXZpb3Igb2YgSGVicmV3Q2FsZW5kYXIucm9sbAorICAgICAqIFRoZSBvbmx5IHJlYWwgbmFzdGluZXNzIHdpdGggcm9sbCBpcyB0aGUgTU9OVEggZmllbGQsIHNpbmNlIGEgeWVhciBjYW4KKyAgICAgKiBoYXZlIGEgdmFyaWFibGUgbnVtYmVyIG9mIG1vbnRocy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0QWRkKCkgeworICAgICAgICBpbnRbXVtdIHRlc3RzID0gbmV3IGludFtdW10geworICAgICAgICAgICAgLy8gICAgICAgaW5wdXQgICAgICAgICAgICAgICAgYWRkIGJ5ICAgICAgICAgIG91dHB1dAorICAgICAgICAgICAgLy8gIHllYXIgIG1vbnRoICAgICBkYXkgICAgIGZpZWxkIGFtb3VudCAgICB5ZWFyICBtb250aCAgICAgZGF5CisgICAgICAgICAgICB7ICAgNTc1OSwgSEVTSFZBTiwgICAyLCAgICAgTU9OVEgsICAgMSwgICAgIDU3NTksIEtJU0xFViwgICAgMiB9LCAgIC8vIG5vbi1sZWFwIHllYXJzCisgICAgICAgICAgICB7ICAgNTc1OSwgU0hFVkFULCAgICAyLCAgICAgTU9OVEgsICAgMSwgICAgIDU3NTksIEFEQVIsICAgICAgMiB9LAorICAgICAgICAgICAgeyAgIDU3NTksIFNIRVZBVCwgICAgMiwgICAgIE1PTlRILCAgIDIsICAgICA1NzU5LCBOSVNBTiwgICAgIDIgfSwKKyAgICAgICAgICAgIHsgICA1NzU5LCBTSEVWQVQsICAgIDIsICAgICBNT05USCwgIDEyLCAgICAgNTc2MCwgU0hFVkFULCAgICAyIH0sCisKKyAgICAgICAgICAgIHsgICA1NzU3LCBIRVNIVkFOLCAgIDIsICAgICBNT05USCwgICAxLCAgICAgNTc1NywgS0lTTEVWLCAgICAyIH0sICAgLy8gbGVhcCB5ZWFycworICAgICAgICAgICAgeyAgIDU3NTcsIFNIRVZBVCwgICAgMiwgICAgIE1PTlRILCAgIDEsICAgICA1NzU3LCBBREFSXzEsICAgIDIgfSwKKyAgICAgICAgICAgIHsgICA1NzU3LCBTSEVWQVQsICAgIDIsICAgICBNT05USCwgICAyLCAgICAgNTc1NywgQURBUiwgICAgICAyIH0sCisgICAgICAgICAgICB7ICAgNTc1NywgU0hFVkFULCAgICAyLCAgICAgTU9OVEgsICAgMywgICAgIDU3NTcsIE5JU0FOLCAgICAgMiB9LAorICAgICAgICAgICAgeyAgIDU3NTcsIFNIRVZBVCwgICAgMiwgICAgIE1PTlRILCAgMTIsICAgICA1NzU4LCBURVZFVCwgICAgIDIgfSwKKyAgICAgICAgICAgIHsgICA1NzU3LCBTSEVWQVQsICAgIDIsICAgICBNT05USCwgIDEzLCAgICAgNTc1OCwgU0hFVkFULCAgICAyIH0sCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHsgICA1NzU3LCBLSVNMRVYsICAgIDEsICAgICBEQVRFLCAgIDMwLCAgICAgNTc1NywgVEVWRVQsICAgICAyIH0sICAgLy8gMjktZGF5IG1vbnRoCisgICAgICAgICAgICB7ICAgNTc1OCwgS0lTTEVWLCAgICAxLCAgICAgREFURSwgICAzMSwgICAgIDU3NTgsIFRFVkVULCAgICAgMiB9LCAgIC8vIDMwLWRheSBtb250aAorICAgICAgICB9OworICAgICAgIAorICAgICAgICBIZWJyZXdDYWxlbmRhciBjYWwgPSBuZXcgSGVicmV3Q2FsZW5kYXIoVVRDLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKworICAgICAgICBkb1JvbGxBZGQoQURELCBjYWwsIHRlc3RzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBIGh1Z2UgbGlzdCBvZiB0ZXN0IGNhc2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGNvbXB1dGVUaW1lIGFuZCBjb21wdXRlRmllbGRzCisgICAgICogd29yayBwcm9wZXJseSBmb3IgYSB3aWRlIHJhbmdlIG9mIGRhdGEuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENhc2VzKCkgeworICAgICAgICBkb1Rlc3RDYXNlcyh0ZXN0Q2FzZXMsIG5ldyBIZWJyZXdDYWxlbmRhcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgVGVzdENhc2VbXSB0ZXN0Q2FzZXMgPSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE1vc3Qgb2YgdGhlc2UgdGVzdCBjYXNlcyB3ZXJlIHRha2VuIGZyb20gdGhlIGJhY2sgb2YKKyAgICAgICAgLy8gIkNhbGVuZHJpY2FsIENhbGN1bGF0aW9ucyIsIHdpdGggc29tZSBleHRyYXMgYWRkZWQgdG8gaGVscAorICAgICAgICAvLyBkZWJ1ZyBhIGZldyBvZiB0aGUgcHJvYmxlbXMgdGhhdCBjcm9wcGVkIHVwIGluIGRldmVsb3BtZW50LgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgbW9udGhzIGluIHRoaXMgdGFibGUgYXJlIDEtYmFzZWQgcmF0aGVyIHRoYW4gMC1iYXNlZCwKKyAgICAgICAgLy8gYmVjYXVzZSBpdCdzIGVhc2llciB0byBlZGl0IHRoYXQgd2F5LgorICAgICAgICAvLworICAgICAgICAvLyAgICAgICAgIEp1bGlhbiBEYXkgIEVyYSAgWWVhciAgTW9udGggRGF5ICBXa0RheSBIb3VyIE1pbiBTZWMKKyAgICAgICAgbmV3IFRlc3RDYXNlKDE1MDcyMzEuNSwgIDAsICAzMTc0LCAgIDEyLCAgMTAsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDE2NjAwMzcuNSwgIDAsICAzNTkzLCAgICAzLCAgMjUsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDE3NDY4OTMuNSwgIDAsICAzODMxLCAgICAxLCAgIDMsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDE3NzA2NDEuNSwgIDAsICAzODk2LCAgICAxLCAgIDksICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDE4OTI3MzEuNSwgIDAsICA0MjMwLCAgICA0LCAgMTgsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDE5MzE1NzkuNSwgIDAsICA0MzM2LCAgIDEwLCAgIDQsICBNT04sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDE5NzQ4NTEuNSwgIDAsICA0NDU1LCAgICAyLCAgMTMsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIwOTExNjQuNSwgIDAsICA0NzczLCAgICA5LCAgIDYsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIxMjE1MDkuNSwgIDAsICA0ODU2LCAgICA5LCAgMjMsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIxNTU3NzkuNSwgIDAsICA0OTUwLCAgICA4LCAgIDcsICBGUkksICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIxNzQwMjkuNSwgIDAsICA1MDAwLCAgICA3LCAgIDgsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIxOTE1ODQuNSwgIDAsICA1MDQ4LCAgICA4LCAgMjEsICBGUkksICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIxOTUyNjEuNSwgIDAsICA1MDU4LCAgICA5LCAgIDcsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIyMjkyNzQuNSwgIDAsICA1MTUxLCAgIDExLCAgIDEsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIyNDU1ODAuNSwgIDAsICA1MTk2LCAgICA1LCAgIDcsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIyNjYxMDAuNSwgIDAsICA1MjUyLCAgICA4LCAgIDMsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIyODg1NDIuNSwgIDAsICA1MzE0LCAgICAxLCAgIDEsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIyOTA5MDEuNSwgIDAsICA1MzIwLCAgICA2LCAgMjcsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMjMxNDAuNSwgIDAsICA1NDA4LCAgIDEwLCAgMjAsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ1NTEuNSwgIDAsICA1NDQwLCAgICAxLCAgIDEsICBUSFUsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ1ODEuNSwgIDAsICA1NDQwLCAgICAyLCAgIDEsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ2MTAuNSwgIDAsICA1NDQwLCAgICAzLCAgIDEsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ2MzkuNSwgIDAsICA1NDQwLCAgICA0LCAgIDEsICBNT04sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ2NjguNSwgIDAsICA1NDQwLCAgICA1LCAgIDEsICBUVUUsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ2OTguNSwgIDAsICA1NDQwLCAgICA2LCAgIDEsICBUSFUsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ3MjguNSwgIDAsICA1NDQwLCAgICA3LCAgIDEsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ3NTcuNSwgIDAsICA1NDQwLCAgICA4LCAgIDEsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ3ODcuNSwgIDAsICA1NDQwLCAgICA5LCAgIDEsICBUVUUsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ4MTYuNSwgIDAsICA1NDQwLCAgIDEwLCAgIDEsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ4NDYuNSwgIDAsICA1NDQwLCAgIDExLCAgIDEsICBGUkksICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ4NDguNSwgIDAsICA1NDQwLCAgIDExLCAgIDMsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ5MzQuNSwgIDAsICA1NDQxLCAgICAxLCAgIDEsICBUVUUsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzNDgwMjAuNSwgIDAsICA1NDc2LCAgIDEyLCAgIDUsICBGUkksICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzNjY5NzguNSwgIDAsICA1NTI4LCAgIDExLCAgIDQsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzODU2NDguNSwgIDAsICA1NTc5LCAgIDEyLCAgMTEsICBNT04sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDIzOTI4MjUuNSwgIDAsICA1NTk5LCAgICA4LCAgMTIsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0MTYyMjMuNSwgIDAsICA1NjYzLCAgICA4LCAgMjIsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0MjU4NDguNSwgIDAsICA1Njg5LCAgIDEyLCAgMTksICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0MzAyNjYuNSwgIDAsICA1NzAyLCAgICAxLCAgIDgsICBNT04sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0MzA4MzMuNSwgIDAsICA1NzAzLCAgICA4LCAgMTQsICBNT04sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0MzEwMDQuNSwgIDAsICA1NzA0LCAgICAxLCAgIDgsICBUSFUsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0NDg2OTguNSwgIDAsICA1NzUyLCAgICA3LCAgMTIsICBUVUUsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0NTAxMzguNSwgIDAsICA1NzU2LCAgICA3LCAgIDUsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0NjU3MzcuNSwgIDAsICA1Nzk5LCAgICAyLCAgMTIsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgbmV3IFRlc3RDYXNlKDI0ODYwNzYuNSwgIDAsICA1ODU0LCAgIDEyLCAgIDUsICBTVU4sICAgMCwgIDAsICAwKSwKKworICAgICAgICAvLyBBZGRpdGlvbmFsIHRlc3QgY2FzZXMgZm9yIGJ1Z3MgZm91bmQgZHVyaW5nIGRldmVsb3BtZW50CisgICAgICAgIC8vICAgICAgICAgICBHLllZL01NL0REICBFcmEgIFllYXIgIE1vbnRoIERheSAgV2tEYXkgSG91ciBNaW4gU2VjCisgICAgICAgIG5ldyBUZXN0Q2FzZSgxMDEzLCA5LCA4LCAwLCAgNDc3NCwgICAgMSwgICAxLCAgVFVFLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgxMjM5LCA5LCAxLCAwLCAgNTAwMCwgICAgMSwgICAxLCAgVEhVLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgxMjQwLCA5LDE4LCAwLCAgNTAwMSwgICAgMSwgICAxLCAgVFVFLCAgIDAsICAwLCAgMCksCisKKyAgICAgICAgLy8gVGVzdCBjYXNlcyB0YWtlbiBmcm9tIGEgdGFibGUgb2YgMTQgInllYXIgdHlwZXMiIGluIHRoZSBIZWxwIGZpbGUKKyAgICAgICAgLy8gb2YgdGhlIGFwcGxpY2F0aW9uICJIZWJyZXcgQ2FsZW5kYXIiCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDU2MTg3LjUsICAwLCAgNTc3MywgICAgMSwgICAxLCAgTU9OLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDU5MTExLjUsICAwLCAgNTc4MSwgICAgMSwgICAxLCAgU0FULCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDUzNjQ3LjUsICAwLCAgNTc2NiwgICAgMSwgICAxLCAgVFVFLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDYyMDM1LjUsICAwLCAgNTc4OSwgICAgMSwgICAxLCAgVEhVLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDU4NzU2LjUsICAwLCAgNTc4MCwgICAgMSwgICAxLCAgTU9OLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDYwNTg2LjUsICAwLCAgNTc4NSwgICAgMSwgICAxLCAgVEhVLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDYzODY0LjUsICAwLCAgNTc5NCwgICAgMSwgICAxLCAgU0FULCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDYzNDgxLjUsICAwLCAgNTc5MywgICAgMSwgICAxLCAgTU9OLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDcwNDIxLjUsICAwLCAgNTgxMiwgICAgMSwgICAxLCAgVEhVLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDYwMjAzLjUsICAwLCAgNTc4NCwgICAgMSwgICAxLCAgU0FULCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDU5NDY0LjUsICAwLCAgNTc4MiwgICAgMSwgICAxLCAgVFVFLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDY3MTQyLjUsICAwLCAgNTgwMywgICAgMSwgICAxLCAgTU9OLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDU1NDQ4LjUsICAwLCAgNTc3MSwgICAgMSwgICAxLCAgVEhVLCAgIDAsICAwLCAgMCksCisgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDg3MjIzLjUsICAwLCAgNTg1OCwgICAgMSwgICAxLCAgU0FULCAgIDAsICAwLCAgMCksCisgICAgfTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBQcm9ibGVtIHJlcG9ydGVkIGJ5IEFybWFuZCBCZW5kYW5hbiBpbiB3aGljaCBzZXR0aW5nIG9mIHRoZSBNT05USAorICAgICAqIGZpZWxkIGluIGEgSGVicmV3IGNhbGVuZGFyIGNhdXNlcyB0aGUgdGltZSBmaWVsZHMgdG8gZ28gbmVnYXRpdmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFRpbWVGaWVsZHMoKSB7CisgICAgICAgIEhlYnJld0NhbGVuZGFyIGNhbGVuZGFyID0gbmV3IEhlYnJld0NhbGVuZGFyKDU3NjEsIDAsIDExLCAxMiwgMjgsIDE1KTsKKwkJY2FsZW5kYXIuc2V0KENhbGVuZGFyLllFQVIsIDU3MTcpOworCQljYWxlbmRhci5zZXQoQ2FsZW5kYXIuTU9OVEgsIDIpOworCQljYWxlbmRhci5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAyMyk7CisgICAgICAgIGlmIChjYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpICE9IDEyKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbDogSGVicmV3Q2FsZW5kYXIgSE9VUl9PRl9EQVkgPSAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IG9mIHRoZSBiZWhhdmlvciBvZiB0aGUgbW9udGggZmllbGQuICBUaGlzIHJlcXVpcmVzIHNwZWNpYWwKKyAgICAgKiBoYW5kbGluZyBpbiB0aGUgSGVicmV3IGNhbGVuZGFyIGJlY2F1c2Ugb2YgdGhlIHBhdHRlcm4gb2YgbGVhcAorICAgICAqIHllYXJzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RNb250aE1vdmVtZW50KCkgeworICAgICAgICBIZWJyZXdDYWxlbmRhciBjYWwgPSBuZXcgSGVicmV3Q2FsZW5kYXIoKTsKKyAgICAgICAgLy8gTGVhcCB5ZWFycyBhcmU6CisgICAgICAgIC8vIDMgNiA4IDExIDE0IDE3IDE5IChhbmQgc28gb24gLSAxOS15ZWFyIGN5Y2xlKQorICAgICAgICAvLyBXZSBjYW4ndCB0ZXN0IGNvbXBsZXRlKCkgb24gc29tZSBsaW5lcyBiZWxvdyBiZWNhdXNlIG9mIEFEQVJfMSAtLSBpZgorICAgICAgICAvLyB0aGUgY2FsZW5kYXIgaXMgc2V0IHRvIEFEQVJfMSBvbiBhIG5vbi1sZWFwIHllYXIsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorICAgICAgICBpbnRbXSBEQVRBID0geworICAgICAgICAgICAgLy8gYyAgICAgLSB0ZXN0IGNvbXBsZXRlKCkgb3Igbm90CisgICAgICAgICAgICAvLyBtL3kgICAtIGJlZm9yZSBhbmQgYWZ0ZXIgbW9udGgveWVhcgorICAgICAgICAgICAgLy8gZGVsdGEgLSBhbW91bnQgdG8gYWRkIHRvIG1vbnRoIGZpZWxkCisgICAgICAgICAgICAvL2MgbTEgIHkxIGRlbHRhICBtMiAgeTIKKyAgICAgICAgICAgIDEsICAxMCwgIDIsICArMjQsICA5LCAgNCwgLy8gKHllYXIgMiwgbW9udGggMTApICsgMjQgbW9udGhzIC0+ICh5IDQsIG0gOSkKKyAgICAgICAgICAgIDEsICAxMCwgIDIsICArNjAsICA4LCAgNywgLy8gKHkgMiwgbSAxMCkgKyA2MCBtb250aHMgLT4gKHkgNywgbSA4KQorICAgICAgICAgICAgMSwgICAxLCAgMiwgICsxMiwgIDEsICAzLCAvLyAoeSAyLCBtIDEpICsgMTIgbW9udGhzIC0+ICh5IDMsIG0gMSkKKyAgICAgICAgICAgIDEsICAgMywgMTgsICAtMjQsICA0LCAxNiwgLy8gKHkgMTgsIG0gMykgLSAyNCBtb250aHMgLT4gKHkgMTYsIG0gNCkKKyAgICAgICAgICAgIDEsICAgMSwgIDYsICAtMjQsICAxLCAgNCwKKyAgICAgICAgICAgIDEsICAgNCwgIDMsICAgKzIsICA2LCAgMywgLy8gTGVhcCB5ZWFyIC0gbm8gc2tpcCA0LDUsNiw3LDgKKyAgICAgICAgICAgIDEsICAgOCwgIDMsICAgLTIsICA2LCAgMywgLy8gTGVhcCB5ZWFyIC0gbm8gc2tpcAorICAgICAgICAgICAgMCwgICA0LCAgMiwgICArMiwgIDcsICAyLCAvLyBTa2lwIG92ZXIgbGVhcCBtb250aCA0LDUsKDYpLDcsOAorICAgICAgICAgICAgMCwgICA4LCAgMiwgICAtMiwgIDUsICAyLCAvLyBTa2lwIG92ZXIgbGVhcCBtb250aCBnb2luZyBiYWNrd2FyZAorICAgICAgICB9OworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7ICkgeworICAgICAgICAgICAgYm9vbGVhbiB0ZXN0Q29tcGxldGUgPSBEQVRBW2krK10gIT0gMDsKKyAgICAgICAgICAgIGludCBtID0gREFUQVtpKytdLCB5ID0gREFUQVtpKytdOworICAgICAgICAgICAgaW50IG1vbnRoRGVsdGEgPSBEQVRBW2krK107CisgICAgICAgICAgICBpbnQgbTIgPSBEQVRBW2krK10sIHkyID0gREFUQVtpKytdOworICAgICAgICAgICAgaW50IG1hY3QsIHlhY3Q7CisKKyAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5ZRUFSLCB5KTsKKyAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIG0tMSk7CisgICAgICAgICAgICBjYWwuYWRkKENhbGVuZGFyLk1PTlRILCBtb250aERlbHRhKTsKKyAgICAgICAgICAgIHlhY3QgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOyBtYWN0ID0gY2FsLmdldChDYWxlbmRhci5NT05USCkgKyAxOworICAgICAgICAgICAgaWYgKHkyICE9IHlhY3QgfHwgbTIgIT0gbWFjdCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiAiICsgbSArICIvIiArIHkgKworICAgICAgICAgICAgICAgICAgICAgICIgLT4gYWRkKE1PTlRILCAiICsgbW9udGhEZWx0YSArICIpIC0+ICIgKworICAgICAgICAgICAgICAgICAgICAgIG1hY3QgKyAiLyIgKyB5YWN0ICsgIiwgZXhwZWN0ZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgbTIgKyAiLyIgKyB5Mik7CisgICAgICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5ZRUFSLCB5KTsKKyAgICAgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLk1PTlRILCBtLTEpOworICAgICAgICAgICAgICAgIGxvZ2xuKCJTdGFydDogIiArIG0gKyAiLyIgKyB5KTsKKyAgICAgICAgICAgICAgICBpbnQgZGVsdGEgPSBtb250aERlbHRhID4gMCA/IDEgOiAtMTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjPTA7IGMhPW1vbnRoRGVsdGE7IGMrPWRlbHRhKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuTU9OVEgsIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nbG4oIisgIiArIGRlbHRhICsgIiBNT05USCAtPiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMSkgKyAiLyIgKyBjYWwuZ2V0KENhbGVuZGFyLllFQVIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh0ZXN0Q29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLllFQVIsIHkpOworICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIG0gKyBtb250aERlbHRhIC0gMSk7CisgICAgICAgICAgICAgICAgeWFjdCA9IGNhbC5nZXQoQ2FsZW5kYXIuWUVBUik7IG1hY3QgPSBjYWwuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7CisgICAgICAgICAgICAgICAgaWYgKHkyICE9IHlhY3QgfHwgbTIgIT0gbWFjdCkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIChtK21vbnRoRGVsdGEpICsgIi8iICsgeSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gY29tcGxldGUoKSAtPiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjdCArICIvIiArIHlhY3QgKyAiLCBleHBlY3RlZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbTIgKyAiLyIgKyB5Mik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBoYW5kbGluZyBvZiBBREFSXzEuCisgICAgICovCisgICAgLyoKKyAgICBwdWJsaWMgdm9pZCBUZXN0QWRhcjEoKSB7CisgICAgICAgIEhlYnJld0NhbGVuZGFyIGNhbCA9IG5ldyBIZWJyZXdDYWxlbmRhcigpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldChDYWxlbmRhci5ZRUFSLCAxOTAzKTsgLy8gbGVhcAorICAgICAgICBjYWwuc2V0KENhbGVuZGFyLk1PTlRILCBIZWJyZXdDYWxlbmRhci5BREFSXzEpOworICAgICAgICBsb2dsbigiMTkwMyhsZWFwKS9BREFSXzEgPT4gIiArCisgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuWUVBUikgKyAiLyIgKyAoY2FsLmdldChDYWxlbmRhci5NT05USCkrMSkpOworCisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KENhbGVuZGFyLllFQVIsIDE5MDQpOyAvLyBub24tbGVhcAorICAgICAgICBjYWwuc2V0KENhbGVuZGFyLk1PTlRILCBIZWJyZXdDYWxlbmRhci5BREFSXzEpOworICAgICAgICBsb2dsbigiMTkwNChub24tbGVhcCkvQURBUl8xID0+ICIgKworICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLllFQVIpICsgIi8iICsgKGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpKzEpKTsKKyAgICB9CisgICAgKi8KKworICAgIC8qKgorICAgICAqIFdpdGggbm8gZmllbGRzIHNldCwgdGhlIGNhbGVuZGFyIHNob3VsZCB1c2UgZGVmYXVsdCB2YWx1ZXMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdERlZmF1bHRGaWVsZFZhbHVlcygpIHsKKyAgICAgICAgSGVicmV3Q2FsZW5kYXIgY2FsID0gbmV3IEhlYnJld0NhbGVuZGFyKCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBsb2dsbigiY2FsLmNsZWFyKCkgLT4gIiArIGNhbC5nZXRUaW1lKCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q292ZXJhZ2UoKSB7CisJeworCSAgICAvLyBuZXcgSGVicmV3Q2FsZW5kYXIoVGltZVpvbmUpCisJICAgIEhlYnJld0NhbGVuZGFyIGNhbCA9IG5ldyBIZWJyZXdDYWxlbmRhcihUaW1lWm9uZS5nZXREZWZhdWx0KCkpOworCX0KKworCXsKKwkgICAgLy8gbmV3IEhlYnJld0NhbGVuZGFyKExvY2FsZSkKKwkgICAgSGVicmV3Q2FsZW5kYXIgY2FsID0gbmV3IEhlYnJld0NhbGVuZGFyKExvY2FsZS5nZXREZWZhdWx0KCkpOworCX0KKworCXsKKwkgICAgLy8gbmV3IEhlYnJld0NhbGVuZGFyKERhdGUpCisJICAgIEhlYnJld0NhbGVuZGFyIGNhbCA9IG5ldyBIZWJyZXdDYWxlbmRhcihuZXcgRGF0ZSgpKTsKKwl9CisKKwl7CisJICAgIC8vIGRhdGEKKwkgICAgSGVicmV3Q2FsZW5kYXIgY2FsID0gbmV3IEhlYnJld0NhbGVuZGFyKDI4MDAsIEhlYnJld0NhbGVuZGFyLlNIRVZBVCwgMSk7CisJICAgIERhdGUgdGltZSA9IGNhbC5nZXRUaW1lKCk7CisKKwkgICAgU3RyaW5nW10gY2FsZW5kYXJMb2NhbGVzID0geworCQkiaXdfSUwiCisJICAgIH07CisKKwkgICAgU3RyaW5nW10gZm9ybWF0TG9jYWxlcyA9IHsKKwkJImVuIiwgImZpIiwgImZyIiwgImh1IiwgIml3IiwgIm5sIgorCSAgICB9OworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGVuZGFyTG9jYWxlcy5sZW5ndGg7ICsraSkgeworCQlTdHJpbmcgY2FsTG9jTmFtZSA9IGNhbGVuZGFyTG9jYWxlc1tpXTsKKwkJTG9jYWxlIGNhbExvY2FsZSA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUoY2FsTG9jTmFtZSk7CisJCWNhbCA9IG5ldyBIZWJyZXdDYWxlbmRhcihjYWxMb2NhbGUpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgZm9ybWF0TG9jYWxlcy5sZW5ndGg7ICsraikgeworCQkgICAgU3RyaW5nIGxvY05hbWUgPSBmb3JtYXRMb2NhbGVzW2pdOworCQkgICAgTG9jYWxlIGZvcm1hdExvY2FsZSA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUobG9jTmFtZSk7CisJCSAgICBEYXRlRm9ybWF0IGZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShjYWwsIERhdGVGb3JtYXQuRlVMTCwgRGF0ZUZvcm1hdC5GVUxMLCBmb3JtYXRMb2NhbGUpOworCQkgICAgbG9nbG4oY2FsTG9jTmFtZSArICIvIiArIGxvY05hbWUgKyAiIC0tPiAiICsgZm9ybWF0LmZvcm1hdCh0aW1lKSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0hvbGlkYXlUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvSG9saWRheVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjZhZTRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0hvbGlkYXlUZXN0LmphdmEKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0hvbGlkYXlUZXN0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDgvMDcgMTc6MDQ6NDIgJCAKKyAqICRSZXZpc2lvbjogMS4xICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jYWxlbmRhcjsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuTG9jYWxlVXRpbGl0eTsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuSG9saWRheTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlRpbWVab25lOworCisvKioKKyAqIFRlc3RzIGZvciB0aGUgPGNvZGU+SG9saWRheTwvY29kZT4gY2xhc3MuCisgKi8KK3B1YmxpYyBjbGFzcyBIb2xpZGF5VGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEhvbGlkYXlUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBDYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoMSwgMCwgMSk7CisgICAgc3RhdGljIGZpbmFsIERhdGUgbG9uZ1RpbWVBZ28gPSBjYWwuZ2V0VGltZSgpOworICAgIHN0YXRpYyBmaW5hbCBEYXRlIG5vdyA9IG5ldyBEYXRlKCk7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgYXdoaWxlID0gMzYwMEwgKiAyNCAqIDI4OyAvLyAyOCBkYXlzCisKKyAgICBwdWJsaWMgdm9pZCBUZXN0QVBJKCkgeworCXsKKwkgICAgLy8gZ2V0SG9saWRheXMKKwkgICAgSG9saWRheVtdIGhvbGlkYXlzID0gSG9saWRheS5nZXRIb2xpZGF5cygpOworCSAgICBleGVyY2lzZUhvbGlkYXlzKGhvbGlkYXlzLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKwl9CisKKwl7CisJICAgIC8vIGdldEhvbGlkYXlzKExvY2FsZSkKKwkgICAgU3RyaW5nW10gbG9jYWxlTmFtZXMgPSB7CisJCSJlbl9VUyIsICJkYSIsICJkYV9ESyIsICJkZSIsICJkZV9BVCIsICJkZV9ERSIsICJlbCIsICJlbF9HUiIsCisJCSJlbiIsICJlbl9DQSIsICJlbl9HQiIsICJlcyIsICJlc19NWCIsICJmciIsICJmcl9DQSIsICJmcl9GUiIsCisJCSJpdCIsICJpdF9JVCIsICJpdyIsICJpd19JTCIsICJqYSIsICJqYV9KUCIsCisJICAgIH07CisKKwkgICAgZm9yIChpbnQgaT0wOyBpIDwgbG9jYWxlTmFtZXMubGVuZ3RoOyArK2kpIHsKKwkJTG9jYWxlIGxvY2FsZSA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUobG9jYWxlTmFtZXNbaV0pOworCQlIb2xpZGF5W10gaG9saWRheXMgPSBIb2xpZGF5LmdldEhvbGlkYXlzKGxvY2FsZSk7CisJCWV4ZXJjaXNlSG9saWRheXMoaG9saWRheXMsIGxvY2FsZSk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgdm9pZCBleGVyY2lzZUhvbGlkYXlzKEhvbGlkYXlbXSBob2xpZGF5cywgTG9jYWxlIGxvY2FsZSkgeworCWZvciAoaW50IGkgPSAwOyBpIDwgaG9saWRheXMubGVuZ3RoOyArK2kpIHsKKwkgICAgZXhlcmNpc2VIb2xpZGF5KGhvbGlkYXlzW2ldLCBsb2NhbGUpOworCX0KKyAgICB9CisKKyAgICB2b2lkIGV4ZXJjaXNlSG9saWRheShIb2xpZGF5IGgsIExvY2FsZSBsb2NhbGUpIHsKKwlsb2dsbigiaG9saWRheTogIiArIGguZ2V0RGlzcGxheU5hbWUoKSk7CisJbG9nbG4oImhvbGlkYXkgaW4gIiArIGxvY2FsZSArICI6ICIgKyBoLmdldERpc3BsYXlOYW1lKGxvY2FsZSkpOworCisJRGF0ZSBmaXJzdCA9IGguZmlyc3RBZnRlcihsb25nVGltZUFnbyk7CisJbG9nbG4oImZpcnN0QWZ0ZXI6ICIgKyBsb25nVGltZUFnbyArICIgaXMgIiArIGZpcnN0KTsKKwlpZiAoZmlyc3QgPT0gbnVsbCkgeworCSAgICBmaXJzdCA9IGxvbmdUaW1lQWdvOworCX0KKwlmaXJzdC5zZXRUaW1lKGZpcnN0LmdldFRpbWUoKSArIGF3aGlsZSk7CisKKwlEYXRlIHNlY29uZCA9IGguZmlyc3RCZXR3ZWVuKGZpcnN0LCBub3cpOworCWxvZ2xuKCJmaXJzdEJldHdlZW46ICIgKyBmaXJzdCArICIgYW5kICIgKyBub3cgKyAiIGlzICIgKyBzZWNvbmQpOworCWlmIChzZWNvbmQgPT0gbnVsbCkgeworCSAgICBzZWNvbmQgPSBub3c7CisJfQorCisJbG9nbG4oImlzIG9uICIgKyBmaXJzdCArICI6ICIgKyBoLmlzT24oZmlyc3QpKTsKKwlsb2dsbigiaXMgb24gIiArIG5vdyArICI6ICIgKyBoLmlzT24obm93KSk7CisJbG9nbG4oImlzIGJldHdlZW4gIiArIGZpcnN0ICsgIiBhbmQgIiArIG5vdyArICI6ICIgKyBoLmlzQmV0d2VlbihmaXJzdCwgbm93KSk7CisJbG9nbG4oImlzIGJldHdlZW4gIiArIGZpcnN0ICsgIiBhbmQgIiArIHNlY29uZCArICI6ICIgKyBoLmlzQmV0d2VlbihmaXJzdCwgc2Vjb25kKSk7CisKKwlsb2dsbigicnVsZTogIiArIGguZ2V0UnVsZSgpLnRvU3RyaW5nKCkpOworCisJaC5zZXRSdWxlKGguZ2V0UnVsZSgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvSUJNQ2FsZW5kYXJUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvSUJNQ2FsZW5kYXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWZlYWNmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9JQk1DYWxlbmRhclRlc3QuamF2YQpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0lCTUNhbGVuZGFyVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA4LzA3IDAzOjEwOjE4ICQgCisgKiAkUmV2aXNpb246IDEuMTEgJAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jYWxlbmRhcjsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkxvY2FsZVV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkJ1ZGRoaXN0Q2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuSmFwYW5lc2VDYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlRpbWVab25lOworCisvKioKKyAqIEB0ZXN0CisgKiBAc3VtbWFyeSBUZXN0cyBvZiBuZXcgZnVuY3Rpb25hbGl0eSBpbiBJQk1DYWxlbmRhcgorICovCitwdWJsaWMgY2xhc3MgSUJNQ2FsZW5kYXJUZXN0IGV4dGVuZHMgQ2FsZW5kYXJUZXN0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgSUJNQ2FsZW5kYXJUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3Qgd2Vla2VuZCBzdXBwb3J0IGluIElCTUNhbGVuZGFyLgorICAgICAqCisgICAgICogTk9URTogVGhpcyB0ZXN0IHdpbGwgaGF2ZSB0byBiZSB1cGRhdGVkIHdoZW4gdGhlIGlzV2Vla2VuZCgpIGV0Yy4KKyAgICAgKiAgICAgICBBUEkgaXMgZmluYWxpemVkIGxhdGVyLgorICAgICAqCisgICAgICogICAgICAgSW4gcGFydGljdWxhciwgdGhlIHRlc3Qgd2lsbCBoYXZlIHRvIGJlIHJld3JpdHRlbiB0byBpbnN0YW50aWF0ZQorICAgICAqICAgICAgIGEgQ2FsZW5kYXIgaW4gdGhlIGdpdmVuIGxvY2FsZSAodXNpbmcgZ2V0SW5zdGFuY2UoKSkgYW5kIGNhbGwKKyAgICAgKiAgICAgICB0aGF0IENhbGVuZGFyJ3MgaXNXZWVrZW5kKCkgZXRjLiBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RXZWVrZW5kKCkgeworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZtdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFRUUgTU1NIGRkIHl5eXkgRyBISDptbTpzcy5TU1MiKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5PVEUKKyAgICAgICAgLy8gVGhpcyB0ZXN0IHRlc3RzIGZvciBzcGVjaWZpYyBsb2NhbGUgZGF0YS4gIFRoaXMgaXMgcHJvYmFibHkgb2theQorICAgICAgICAvLyBhcyBmYXIgYXMgVVMgZGF0YSBpcyBjb25jZXJuZWQsIGJ1dCBpZiB0aGUgQXJhYmljL0JhaHJhaW4gZGF0YQorICAgICAgICAvLyBjaGFuZ2VzLCB0aGlzIHRlc3Qgd2lsbCBoYXZlIHRvIGJlIHVwZGF0ZWQuCisKKyAgICAgICAgLy8gVGVzdCBzcGVjaWZpYyBkYXlzCisgICAgICAgIE9iamVjdFtdIERBVEExID0geworICAgICAgICAgICAgTG9jYWxlLlVTLCBuZXcgaW50W10geyAvLyBTYXR1cmRheTpTdW5kYXkKKyAgICAgICAgICAgICAgICAyMDAwLCBDYWxlbmRhci5NQVJDSCwgMTcsIDIzLCAgMCwgMCwgLy8gRnJpIDIzOjAwCisgICAgICAgICAgICAgICAgMjAwMCwgQ2FsZW5kYXIuTUFSQ0gsIDE4LCAgMCwgLTEsIDAsIC8vIEZyaSAyMzo1OTo1OS45OTkKKyAgICAgICAgICAgICAgICAyMDAwLCBDYWxlbmRhci5NQVJDSCwgMTgsICAwLCAgMCwgMSwgLy8gU2F0IDAwOjAwCisgICAgICAgICAgICAgICAgMjAwMCwgQ2FsZW5kYXIuTUFSQ0gsIDE4LCAxNSwgIDAsIDEsIC8vIFNhdCAxNTowMAorICAgICAgICAgICAgICAgIDIwMDAsIENhbGVuZGFyLk1BUkNILCAxOSwgMjMsICAwLCAxLCAvLyBTdW4gMjM6MDAKKyAgICAgICAgICAgICAgICAyMDAwLCBDYWxlbmRhci5NQVJDSCwgMjAsICAwLCAtMSwgMSwgLy8gU3VuIDIzOjU5OjU5Ljk5OQorICAgICAgICAgICAgICAgIDIwMDAsIENhbGVuZGFyLk1BUkNILCAyMCwgIDAsICAwLCAwLCAvLyBNb24gMDA6MDAKKyAgICAgICAgICAgICAgICAyMDAwLCBDYWxlbmRhci5NQVJDSCwgMjAsICA4LCAgMCwgMCwgLy8gTW9uIDA4OjAwCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgbmV3IExvY2FsZSgiYXIiLCAiQkgiKSwgbmV3IGludFtdIHsgLy8gVGh1cnNkYXk6RnJpZGF5CisgICAgICAgICAgICAgICAgMjAwMCwgQ2FsZW5kYXIuTUFSQ0gsIDE1LCAyMywgIDAsIDAsIC8vIFdlZCAyMzowMAorICAgICAgICAgICAgICAgIDIwMDAsIENhbGVuZGFyLk1BUkNILCAxNiwgIDAsIC0xLCAwLCAvLyBXZWQgMjM6NTk6NTkuOTk5CisgICAgICAgICAgICAgICAgMjAwMCwgQ2FsZW5kYXIuTUFSQ0gsIDE2LCAgMCwgIDAsIDEsIC8vIFRodSAwMDowMAorICAgICAgICAgICAgICAgIDIwMDAsIENhbGVuZGFyLk1BUkNILCAxNiwgMTUsICAwLCAxLCAvLyBUaHUgMTU6MDAKKyAgICAgICAgICAgICAgICAyMDAwLCBDYWxlbmRhci5NQVJDSCwgMTcsIDIzLCAgMCwgMSwgLy8gRnJpIDIzOjAwCisgICAgICAgICAgICAgICAgMjAwMCwgQ2FsZW5kYXIuTUFSQ0gsIDE4LCAgMCwgLTEsIDEsIC8vIEZyaSAyMzo1OTo1OS45OTkKKyAgICAgICAgICAgICAgICAyMDAwLCBDYWxlbmRhci5NQVJDSCwgMTgsICAwLCAgMCwgMCwgLy8gU2F0IDAwOjAwCisgICAgICAgICAgICAgICAgMjAwMCwgQ2FsZW5kYXIuTUFSQ0gsIDE4LCAgOCwgIDAsIDAsIC8vIFNhdCAwODowMAorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKworICAgICAgICAvLyBUZXN0IGRheXMgb2YgdGhlIHdlZWsKKyAgICAgICAgT2JqZWN0W10gREFUQTIgPSB7CisgICAgICAgICAgICBMb2NhbGUuVVMsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuTU9OREFZLCAgIENhbGVuZGFyLldFRUtEQVksCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuRlJJREFZLCAgIENhbGVuZGFyLldFRUtEQVksCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuU0FUVVJEQVksIENhbGVuZGFyLldFRUtFTkQsCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuU1VOREFZLCAgIENhbGVuZGFyLldFRUtFTkQsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgbmV3IExvY2FsZSgiYXIiLCAiQkgiKSwgbmV3IGludFtdIHsgLy8gVGh1cnNkYXk6RnJpZGF5CisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuV0VETkVTREFZLENhbGVuZGFyLldFRUtEQVksCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuU0FUVVJEQVksIENhbGVuZGFyLldFRUtEQVksCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuVEhVUlNEQVksIENhbGVuZGFyLldFRUtFTkQsCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuRlJJREFZLCAgIENhbGVuZGFyLldFRUtFTkQsCisgICAgICAgICAgICB9LAorICAgICAgICB9OworCisgICAgICAgIC8vIFdlIG9ubHkgdGVzdCB0aGUgZ2V0RGF5T2ZXZWVrVHlwZSgpIGFuZCBpc1dlZWtlbmQoKSBBUElzLgorICAgICAgICAvLyBUaGUgZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSBBUEkgaXMgdGVzdGVkIGluZGlyZWN0bHkgdmlhIHRoZQorICAgICAgICAvLyBpc1dlZWtlbmQoKSBBUEksIHdoaWNoIGNhbGxzIGl0LgorCisgICAgICAgIGZvciAoaW50IGkxPTA7IGkxPERBVEExLmxlbmd0aDsgaTErPTIpIHsKKyAgICAgICAgICAgIExvY2FsZSBsb2MgPSAoTG9jYWxlKURBVEExW2kxXTsKKyAgICAgICAgICAgIGludFtdIGRhdGEgPSAoaW50W10pIERBVEExW2kxKzFdOworICAgICAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UobG9jKTsKKyAgICAgICAgICAgIGxvZ2xuKCJMb2NhbGU6ICIgKyBsb2MpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGRhdGEubGVuZ3RoOyBpKz02KSB7CisgICAgICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgY2FsLnNldChkYXRhW2ldLCBkYXRhW2krMV0sIGRhdGFbaSsyXSwgZGF0YVtpKzNdLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVtpKzRdICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUoY2FsLmdldFRpbWUoKS5nZXRUaW1lKCkgKyBkYXRhW2krNF0pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbGVhbiBpc1dlZWtlbmQgPSBjYWwuaXNXZWVrZW5kKCk7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBvayA9IGlzV2Vla2VuZCA9PSAoZGF0YVtpKzVdICE9IDApOworICAgICAgICAgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICAgIiArIGZtdC5mb3JtYXQoY2FsLmdldFRpbWUoKSkgKyAiIGlzV2Vla2VuZD0iICsgaXNXZWVrZW5kKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIGZtdC5mb3JtYXQoY2FsLmdldFRpbWUoKSkgKyAiIGlzV2Vla2VuZD0iICsgaXNXZWVrZW5kICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQ9IiArICghaXNXZWVrZW5kKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaTI9MDsgaTI8REFUQTIubGVuZ3RoOyBpMis9MikgeworICAgICAgICAgICAgTG9jYWxlIGxvYyA9IChMb2NhbGUpREFUQTJbaTJdOworICAgICAgICAgICAgaW50W10gZGF0YSA9IChpbnRbXSkgREFUQTJbaTIrMV07CisgICAgICAgICAgICBsb2dsbigiTG9jYWxlOiAiICsgbG9jKTsKKyAgICAgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKGxvYyk7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8ZGF0YS5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgICAgICBpbnQgdHlwZSA9IGNhbC5nZXREYXlPZldlZWtUeXBlKGRhdGFbaV0pOworICAgICAgICAgICAgICAgIGludCBleHAgID0gZGF0YVtpKzFdOworICAgICAgICAgICAgICAgIGlmICh0eXBlID09IGV4cCkgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICAgRE9XICIgKyBkYXRhW2ldICsgIiB0eXBlPSIgKyB0eXBlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogRE9XICIgKyBkYXRhW2ldICsgIiB0eXBlPSIgKyB0eXBlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQ9IiArIGV4cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUnVuIGEgdGVzdCBvZiBhIHF1YXNpLUdyZWdvcmlhbiBjYWxlbmRhci4gIFRoaXMgaXMgYSBjYWxlbmRhcgorICAgICAqIHRoYXQgYmVoYXZlcyBsaWtlIGEgR3JlZ29yaWFuIGJ1dCBoYXMgZGlmZmVyZW50IHllYXIvZXJhIG1hcHBpbmdzLgorICAgICAqIFRoZSBpbnRbXSBkYXRhIGFycmF5IHNob3VsZCBoYXZlIHRoZSBmb3JtYXQ6CisgICAgICogCisgICAgICogeyBlcmEsIHllYXIsIGdyZWdvcmlhblllYXIsIG1vbnRoLCBkYXlPZk1vbnRoLCAuLi4gfQorICAgICAqLworICAgIHZvaWQgcXVhc2lHcmVnb3JpYW5UZXN0KENhbGVuZGFyIGNhbCwgaW50W10gZGF0YSkgeworICAgICAgICBmb3IgKGludCBpPTA7IGk8ZGF0YS5sZW5ndGg7ICkgeworICAgICAgICAgICAgaW50IGVyYSA9IGRhdGFbaSsrXTsKKyAgICAgICAgICAgIGludCB5ZWFyID0gZGF0YVtpKytdOworICAgICAgICAgICAgaW50IGdyZWdvcmlhblllYXIgPSBkYXRhW2krK107CisgICAgICAgICAgICBpbnQgbW9udGggPSBkYXRhW2krK107CisgICAgICAgICAgICBpbnQgZGF5T2ZNb250aCA9IGRhdGFbaSsrXTsKKworICAgICAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIHRlbXBjYWwgPSBqYXZhLnV0aWwuQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIHRlbXBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KGdyZWdvcmlhblllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKKyAgICAgICAgICAgIERhdGUgRCA9IHRlbXBjYWwuZ2V0VGltZSgpOworCisgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuRVJBLCBlcmEpOworICAgICAgICAgICAgY2FsLnNldCh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCk7CisgICAgICAgICAgICBEYXRlIGQgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICAgICAgaWYgKGQuZXF1YWxzKEQpKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9LOiAiICsgZXJhICsgIjoiICsgeWVhciArICIvIiArIChtb250aCsxKSArICIvIiArIGRheU9mTW9udGggKworICAgICAgICAgICAgICAgICAgICAgICIgPT4gIiArIGQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGVyYSArICI6IiArIHllYXIgKyAiLyIgKyAobW9udGgrMSkgKyAiLyIgKyBkYXlPZk1vbnRoICsKKyAgICAgICAgICAgICAgICAgICAgICAiID0+ICIgKyBkICsgIiwgZXhwZWN0ZWQgIiArIEQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIGNhbC5zZXRUaW1lKEQpOworICAgICAgICAgICAgaW50IGUgPSBjYWwuZ2V0KENhbGVuZGFyLkVSQSk7CisgICAgICAgICAgICBpbnQgeSA9IGNhbC5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgICAgICBpZiAoeSA9PSB5ZWFyICYmIGUgPT0gZXJhKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9LOiAiICsgRCArICIgPT4gIiArIGNhbC5nZXQoQ2FsZW5kYXIuRVJBKSArICI6IiArCisgICAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5ZRUFSKSArICIvIiArCisgICAgICAgICAgICAgICAgICAgICAgKGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpKzEpICsgIi8iICsgY2FsLmdldChDYWxlbmRhci5EQVRFKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJGYWlsOiAiICsgRCArICIgPT4gIiArIGNhbC5nZXQoQ2FsZW5kYXIuRVJBKSArICI6IiArCisgICAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5ZRUFSKSArICIvIiArCisgICAgICAgICAgICAgICAgICAgICAgKGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpKzEpICsgIi8iICsgY2FsLmdldChDYWxlbmRhci5EQVRFKSArCisgICAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQgIiArIGVyYSArICI6IiArIHllYXIgKyAiLyIgKyAobW9udGgrMSkgKyAiLyIgKworICAgICAgICAgICAgICAgICAgICAgIGRheU9mTW9udGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVmVyaWZ5IHRoYXQgQnVkZGhpc3RDYWxlbmRhciBzaGlmdHMgeWVhcnMgdG8gQnVkZGhpc3QgRXJhIGJ1dCBvdGhlcndpc2UKKyAgICAgKiBiZWhhdmVzIGxpa2UgR3JlZ29yaWFuQ2FsZW5kYXIuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZGRoaXN0KCkgeworICAgICAgICBxdWFzaUdyZWdvcmlhblRlc3QobmV3IEJ1ZGRoaXN0Q2FsZW5kYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQkUgMjU0MiA9PSAxOTk5IENFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMjU0MiwgMTk5OSwgQ2FsZW5kYXIuSlVORSwgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZGRoaXN0Q292ZXJhZ2UoKSB7CisJeworCSAgICAvLyBuZXcgQnVkZGhpc3RDYWxlbmRhcihUaW1lWm9uZSkKKwkgICAgQnVkZGhpc3RDYWxlbmRhciBjYWwgPSBuZXcgQnVkZGhpc3RDYWxlbmRhcihUaW1lWm9uZS5nZXREZWZhdWx0KCkpOworCX0KKwkKKwl7CisJICAgIC8vIG5ldyBCdWRkaGlzdENhbGVuZGFyKExvY2FsZSkKKwkgICAgQnVkZGhpc3RDYWxlbmRhciBjYWwgPSBuZXcgQnVkZGhpc3RDYWxlbmRhcihMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKwl9CisKKwl7CisJICAgIC8vIG5ldyBCdWRkaGlzdENhbGVuZGFyKFRpbWVab25lLCBMb2NhbGUpCisJICAgIEJ1ZGRoaXN0Q2FsZW5kYXIgY2FsID0gbmV3IEJ1ZGRoaXN0Q2FsZW5kYXIoVGltZVpvbmUuZ2V0RGVmYXVsdCgpLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKwl9CisKKwl7CisJICAgIC8vIG5ldyBCdWRkaGlzdENhbGVuZGFyKERhdGUpCisJICAgIEJ1ZGRoaXN0Q2FsZW5kYXIgY2FsID0gbmV3IEJ1ZGRoaXN0Q2FsZW5kYXIobmV3IERhdGUoKSk7CisJfQorCisJeworCSAgICAvLyBuZXcgQnVkZGhpc3RDYWxlbmRhcihpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF0ZSkKKwkgICAgQnVkZGhpc3RDYWxlbmRhciBjYWwgPSBuZXcgQnVkZGhpc3RDYWxlbmRhcigyNTQzLCBDYWxlbmRhci5NQVksIDIyKTsKKwl9CisKKwl7CisJICAgIC8vIG5ldyBCdWRkaGlzdENhbGVuZGFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXRlLCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50IHNlY29uZCkKKwkgICAgQnVkZGhpc3RDYWxlbmRhciBjYWwgPSBuZXcgQnVkZGhpc3RDYWxlbmRhcigyNTQzLCBDYWxlbmRhci5NQVksIDIyLCAxLCAxLCAxKTsKKwl9CisKKwl7CisJICAgIC8vIGRhdGEKKwkgICAgQnVkZGhpc3RDYWxlbmRhciBjYWwgPSBuZXcgQnVkZGhpc3RDYWxlbmRhcigyNTQzLCBDYWxlbmRhci5NQVksIDIyKTsKKwkgICAgRGF0ZSB0aW1lID0gY2FsLmdldFRpbWUoKTsKKworCSAgICBTdHJpbmdbXSBjYWxlbmRhckxvY2FsZXMgPSB7CisJCSJ0aF9USCIKKwkgICAgfTsKKworCSAgICBTdHJpbmdbXSBmb3JtYXRMb2NhbGVzID0geworCQkiZW4iLCAiYXIiLCAiaHUiLCAidGgiCisJICAgIH07CisKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWxlbmRhckxvY2FsZXMubGVuZ3RoOyArK2kpIHsKKwkJU3RyaW5nIGNhbExvY05hbWUgPSBjYWxlbmRhckxvY2FsZXNbaV07CisJCUxvY2FsZSBjYWxMb2NhbGUgPSBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKGNhbExvY05hbWUpOworCQljYWwgPSBuZXcgQnVkZGhpc3RDYWxlbmRhcihjYWxMb2NhbGUpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgZm9ybWF0TG9jYWxlcy5sZW5ndGg7ICsraikgeworCQkgICAgU3RyaW5nIGxvY05hbWUgPSBmb3JtYXRMb2NhbGVzW2pdOworCQkgICAgTG9jYWxlIGZvcm1hdExvY2FsZSA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUobG9jTmFtZSk7CisJCSAgICBEYXRlRm9ybWF0IGZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShjYWwsIERhdGVGb3JtYXQuRlVMTCwgRGF0ZUZvcm1hdC5GVUxMLCBmb3JtYXRMb2NhbGUpOworCQkgICAgbG9nbG4oY2FsTG9jTmFtZSArICIvIiArIGxvY05hbWUgKyAiIC0tPiAiICsgZm9ybWF0LmZvcm1hdCh0aW1lKSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWZXJpZnkgdGhhdCBKYXBhbmVzZUNhbGVuZGFyIHNoaWZ0cyB5ZWFycyB0byBCdWRkaGlzdCBFcmEgYnV0IG90aGVyd2lzZQorICAgICAqIGJlaGF2ZXMgbGlrZSBHcmVnb3JpYW5DYWxlbmRhci4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SmFwYW5lc2UoKSB7CisgICAgICAgIGludFtdIGRhdGEgPSB7CisgICAgICAgICAgICBKYXBhbmVzZUNhbGVuZGFyLk1FSUpJLCAxLCAxODY4LCBDYWxlbmRhci5TRVBURU1CRVIsIDgsCisgICAgICAgICAgICBKYXBhbmVzZUNhbGVuZGFyLk1FSUpJLCAxLCAxODY4LCBDYWxlbmRhci5TRVBURU1CRVIsIDksCisgICAgICAgICAgICBKYXBhbmVzZUNhbGVuZGFyLk1FSUpJLCAyLCAxODY5LCBDYWxlbmRhci5KVU5FLCA0LAorICAgICAgICAgICAgSmFwYW5lc2VDYWxlbmRhci5NRUlKSSwgNDUsIDE5MTIsIENhbGVuZGFyLkpVTFksIDI5LAorICAgICAgICAgICAgSmFwYW5lc2VDYWxlbmRhci5UQUlTSE8sIDEsIDE5MTIsIENhbGVuZGFyLkpVTFksIDMwLAorICAgICAgICAgICAgSmFwYW5lc2VDYWxlbmRhci5UQUlTSE8sIDEsIDE5MTIsIENhbGVuZGFyLkFVR1VTVCwgMSwKKyAgICAgICAgfTsKKyAgICAgICAgcXVhc2lHcmVnb3JpYW5UZXN0KG5ldyBKYXBhbmVzZUNhbGVuZGFyKCksIGRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgbGltaXRzIG9mIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEdyZWdvcmlhbkxpbWl0cygpIHsKKyAgICAgICAgLy8gRmluYWwgcGFyYW1ldGVyIGlzIGVpdGhlciBudW1iZXIgb2YgZGF5cywgaWYgPiAwLCBvciB0ZXN0CisgICAgICAgIC8vIGR1cmF0aW9uIGluIHNlY29uZHMsIGlmIDwgMC4KKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgY2FsLnNldCgyMDA0LCBDYWxlbmRhci5KQU5VQVJZLCAxKTsKKyAgICAgICAgZG9MaW1pdHNUZXN0KG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpLCBudWxsLCBjYWwuZ2V0VGltZSgpLCAtMTApOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IGJlaGF2aW9yIG9mIGZpZWxkRGlmZmVyZW5jZSBhcm91bmQgbGVhcCB5ZWFycy4gIEFsc28gdGVzdCBhIGxhcmdlCisgICAgICogZmllbGQgZGlmZmVyZW5jZSB0byBjaGVjayBiaW5hcnkgc2VhcmNoLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RMZWFwRmllbGREaWZmZXJlbmNlKCkgeworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwuc2V0KDIwMDQsIENhbGVuZGFyLkZFQlJVQVJZLCAyOSk7CisgICAgICAgIERhdGUgZGF0ZTIwMDQgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBjYWwuc2V0KDIwMDAsIENhbGVuZGFyLkZFQlJVQVJZLCAyOSk7CisgICAgICAgIERhdGUgZGF0ZTIwMDAgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBpbnQgeSA9IGNhbC5maWVsZERpZmZlcmVuY2UoZGF0ZTIwMDQsIENhbGVuZGFyLllFQVIpOworICAgICAgICBpbnQgZCA9IGNhbC5maWVsZERpZmZlcmVuY2UoZGF0ZTIwMDQsIENhbGVuZGFyLkRBWV9PRl9ZRUFSKTsKKyAgICAgICAgaWYgKGQgPT0gMCkgeworICAgICAgICAgICAgbG9nbG4oIk9rOiAyMDA0L0ZlYi8yOSAtIDIwMDAvRmViLzI5ID0gIiArIHkgKyAiIHllYXJzLCAiICsgZCArICIgZGF5cyIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IDIwMDQvRmViLzI5IC0gMjAwMC9GZWIvMjkgPSAiICsgeSArICIgeWVhcnMsICIgKyBkICsgIiBkYXlzIik7CisgICAgICAgIH0KKyAgICAgICAgY2FsLnNldFRpbWUoZGF0ZTIwMDQpOworICAgICAgICB5ID0gY2FsLmZpZWxkRGlmZmVyZW5jZShkYXRlMjAwMCwgQ2FsZW5kYXIuWUVBUik7CisgICAgICAgIGQgPSBjYWwuZmllbGREaWZmZXJlbmNlKGRhdGUyMDAwLCBDYWxlbmRhci5EQVlfT0ZfWUVBUik7CisgICAgICAgIGlmIChkID09IDApIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPazogMjAwMC9GZWIvMjkgLSAyMDA0L0ZlYi8yOSA9ICIgKyB5ICsgIiB5ZWFycywgIiArIGQgKyAiIGRheXMiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAyMDAwL0ZlYi8yOSAtIDIwMDQvRmViLzI5ID0gIiArIHkgKyAiIHllYXJzLCAiICsgZCArICIgZGF5cyIpOworICAgICAgICB9CisgICAgICAgIC8vIFRlc3QgbGFyZ2UgZGlmZmVyZW5jZQorICAgICAgICBjYWwuc2V0KDIwMDEsIENhbGVuZGFyLkFQUklMLCA1KTsgLy8gMjQ1MjAwNQorICAgICAgICBEYXRlIGF5bCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGNhbC5zZXQoMTk2NCwgQ2FsZW5kYXIuU0VQVEVNQkVSLCA3KTsgLy8gMjQzODY0NgorICAgICAgICBEYXRlIGFzbCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGQgPSBjYWwuZmllbGREaWZmZXJlbmNlKGF5bCwgQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKyAgICAgICAgY2FsLnNldFRpbWUoYXlsKTsKKyAgICAgICAgaW50IGQyID0gY2FsLmZpZWxkRGlmZmVyZW5jZShhc2wsIENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgIGlmIChkID09IC1kMiAmJiBkID09IDEzMzU5KSB7CisgICAgICAgICAgICBsb2dsbigiT2s6IGxhcmdlIGZpZWxkIGRpZmZlcmVuY2Ugc3ltbWV0cmljYWwgIiArIGQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nbG4oIkZBSUw6IGxhcmdlIGZpZWxkIGRpZmZlcmVuY2UgaW5jb3JyZWN0ICIgKyBkICsgIiwgIiArIGQyICsKKyAgICAgICAgICAgICAgICAgICIsIGV4cGVjdCArLy0gMTMzNTkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgbXNfTVkgIk1hbGF5IChNYWxheXNpYSkiIGxvY2FsZS4gIEJ1ZyAxNTQzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RNYWxheXNpYW5JbnN0YW5jZSgpIHsKKyAgICAgICAgTG9jYWxlIGxvYyA9IG5ldyBMb2NhbGUoIm1zIiwgIk1ZIik7ICAvLyBNYWxheSAoTWFsYXlzaWEpCisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKGxvYyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0lzbGFtaWNUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvSXNsYW1pY1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mN2ZkMzFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0lzbGFtaWNUZXN0LmphdmEKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9Jc2xhbWljVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA4LzA3IDAzOjEwOjE4ICQgCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY2FsZW5kYXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5Mb2NhbGVVdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuSXNsYW1pY0NhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmU7CisKKy8qKgorICogVGVzdHMgZm9yIHRoZSA8Y29kZT5Jc2xhbWljQ2FsZW5kYXI8L2NvZGU+IGNsYXNzLgorICovCitwdWJsaWMgY2xhc3MgSXNsYW1pY1Rlc3QgZXh0ZW5kcyBDYWxlbmRhclRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgSXNsYW1pY1Rlc3QoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgLyoqIENvbnN0YW50cyB0byBzYXZlIHR5cGluZy4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNVUhBUlJBTSA9IElzbGFtaWNDYWxlbmRhci5NVUhBUlJBTTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQUZBUiA9ICBJc2xhbWljQ2FsZW5kYXIuU0FGQVI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkFCSV8xID0gIElzbGFtaWNDYWxlbmRhci5SQUJJXzE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkFCSV8yID0gIElzbGFtaWNDYWxlbmRhci5SQUJJXzI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSlVNQURBXzEgPSAgSXNsYW1pY0NhbGVuZGFyLkpVTUFEQV8xOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEpVTUFEQV8yID0gIElzbGFtaWNDYWxlbmRhci5KVU1BREFfMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSQUpBQiA9ICBJc2xhbWljQ2FsZW5kYXIuUkFKQUI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0hBQkFOID0gIElzbGFtaWNDYWxlbmRhci5TSEFCQU47CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkFNQURBTiA9ICBJc2xhbWljQ2FsZW5kYXIuUkFNQURBTjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSEFXV0FMID0gIElzbGFtaWNDYWxlbmRhci5TSEFXV0FMOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFJREFIID0gIElzbGFtaWNDYWxlbmRhci5ESFVfQUxfUUlEQUg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSElKSkFIID0gIElzbGFtaWNDYWxlbmRhci5ESFVfQUxfSElKSkFIOworCisgICAgcHVibGljIHZvaWQgVGVzdFJvbGwoKSB7CisgICAgICAgIGludFtdW10gdGVzdHMgPSBuZXcgaW50W11bXSB7CisgICAgICAgICAgICAvLyAgICAgICBpbnB1dCAgICAgICAgICAgICAgICByb2xsIGJ5ICAgICAgICAgIG91dHB1dAorICAgICAgICAgICAgLy8gIHllYXIgIG1vbnRoICAgICBkYXkgICAgIGZpZWxkIGFtb3VudCAgICB5ZWFyICBtb250aCAgICAgZGF5CisgICAgCisgICAgICAgICAgICB7ICAgMDAwMSwgUUlEQUgsICAgICAyLCAgICAgTU9OVEgsICAgMSwgICAgIDAwMDEsIEhJSkpBSCwgICAgMiB9LCAgIC8vIG5vbi1sZWFwIHllYXJzCisgICAgICAgICAgICB7ICAgMDAwMSwgUUlEQUgsICAgICAyLCAgICAgTU9OVEgsICAgMiwgICAgIDAwMDEsIE1VSEFSUkFNLCAgMiB9LAorICAgICAgICAgICAgeyAgIDAwMDEsIFFJREFILCAgICAgMiwgICAgIE1PTlRILCAgLTEsICAgICAwMDAxLCBTSEFXV0FMLCAgIDIgfSwKKyAgICAgICAgICAgIHsgICAwMDAxLCBNVUhBUlJBTSwgIDIsICAgICBNT05USCwgIDEyLCAgICAgMDAwMSwgTVVIQVJSQU0sICAyIH0sCisgICAgICAgICAgICB7ICAgMDAwMSwgTVVIQVJSQU0sICAyLCAgICAgTU9OVEgsICAxMywgICAgIDAwMDEsIFNBRkFSLCAgICAgMiB9LAorCisgICAgICAgICAgICB7ICAgMDAwMSwgSElKSkFILCAgICAxLCAgICAgREFURSwgICAzMCwgICAgIDAwMDEsIEhJSkpBSCwgICAgMiB9LCAgIC8vIDI5LWRheSBtb250aAorICAgICAgICAgICAgeyAgIDAwMDIsIEhJSkpBSCwgICAgMSwgICAgIERBVEUsICAgMzEsICAgICAwMDAyLCBISUpKQUgsICAgIDIgfSwgICAvLyAzMC1kYXkgbW9udGgKKworICAgICAgICAgICAgLy8gVHJ5IHNvbWUgcm9sbHMgdGhhdCByZXF1aXJlIG90aGVyIGZpZWxkcyB0byBiZSBhZGp1c3RlZAorICAgICAgICAgICAgeyAgIDAwMDEsIE1VSEFSUkFNLCAzMCwgICAgIE1PTlRILCAgIDEsICAgICAwMDAxLCBTQUZBUiwgICAgMjkgfSwKKyAgICAgICAgICAgIHsgICAwMDAyLCBISUpKQUgsICAgMzAsICAgICBZRUFSLCAgIC0xLCAgICAgMDAwMSwgSElKSkFILCAgIDI5IH0sCisgICAgICAgIH07CisgICAgICAgCisgICAgICAgIElzbGFtaWNDYWxlbmRhciBjYWwgPSBuZXdDaXZpbCgpOworCisgICAgICAgIGRvUm9sbEFkZChST0xMLCBjYWwsIHRlc3RzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBIGh1Z2UgbGlzdCBvZiB0ZXN0IGNhc2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGNvbXB1dGVUaW1lIGFuZCBjb21wdXRlRmllbGRzCisgICAgICogd29yayBwcm9wZXJseSBmb3IgYSB3aWRlIHJhbmdlIG9mIGRhdGEgaW4gdGhlIGNpdmlsIGNhbGVuZGFyLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDaXZpbENhc2VzKCkKKyAgICB7CisgICAgICAgIGZpbmFsIFRlc3RDYXNlW10gdGVzdHMgPSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTW9zdCBvZiB0aGVzZSB0ZXN0IGNhc2VzIHdlcmUgdGFrZW4gZnJvbSB0aGUgYmFjayBvZgorICAgICAgICAgICAgLy8gIkNhbGVuZHJpY2FsIENhbGN1bGF0aW9ucyIsIHdpdGggc29tZSBleHRyYXMgYWRkZWQgdG8gaGVscAorICAgICAgICAgICAgLy8gZGVidWcgYSBmZXcgb2YgdGhlIHByb2JsZW1zIHRoYXQgY3JvcHBlZCB1cCBpbiBkZXZlbG9wbWVudC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGUgbW9udGhzIGluIHRoaXMgdGFibGUgYXJlIDEtYmFzZWQgcmF0aGVyIHRoYW4gMC1iYXNlZCwKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQncyBlYXNpZXIgdG8gZWRpdCB0aGF0IHdheS4KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBJc2xhbWljCisgICAgICAgICAgICAvLyAgICAgICAgICBKdWxpYW4gRGF5ICBFcmEgIFllYXIgIE1vbnRoIERheSAgV2tEYXkgSG91ciBNaW4gU2VjCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMTUwNzIzMS41LCAgMCwgLTEyNDUsICAgMTIsICAgOSwgIFNVTiwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDE2NjAwMzcuNSwgIDAsICAtODEzLCAgICAyLCAgMjMsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgxNzQ2ODkzLjUsICAwLCAgLTU2OCwgICAgNCwgICAxLCAgV0VELCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMTc3MDY0MS41LCAgMCwgIC01MDEsICAgIDQsICAgNiwgIFNVTiwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDE4OTI3MzEuNSwgIDAsICAtMTU3LCAgIDEwLCAgMTcsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgxOTMxNTc5LjUsICAwLCAgIC00NywgICAgNiwgICAzLCAgTU9OLCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMTk3NDg1MS41LCAgMCwgICAgNzUsICAgIDcsICAxMywgIFNBVCwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDIwOTExNjQuNSwgIDAsICAgNDAzLCAgIDEwLCAgIDUsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyMTIxNTA5LjUsICAwLCAgIDQ4OSwgICAgNSwgIDIyLCAgU1VOLCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMjE1NTc3OS41LCAgMCwgICA1ODYsICAgIDIsICAgNywgIEZSSSwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDIxNzQwMjkuNSwgIDAsICAgNjM3LCAgICA4LCAgIDcsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyMTkxNTg0LjUsICAwLCAgIDY4NywgICAgMiwgIDIwLCAgRlJJLCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMjE5NTI2MS41LCAgMCwgICA2OTcsICAgIDcsICAgNywgIFNVTiwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDIyMjkyNzQuNSwgIDAsICAgNzkzLCAgICA3LCAgIDEsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyMjQ1NTgwLjUsICAwLCAgIDgzOSwgICAgNywgICA2LCAgV0VELCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMjI2NjEwMC41LCAgMCwgICA4OTcsICAgIDYsICAgMSwgIFNBVCwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDIyODg1NDIuNSwgIDAsICAgOTYwLCAgICA5LCAgMzAsICBTQVQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyMjkwOTAxLjUsICAwLCAgIDk2NywgICAgNSwgIDI3LCAgU0FULCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMjMyMzE0MC41LCAgMCwgIDEwNTgsICAgIDUsICAxOCwgIFdFRCwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDIzMzQ4NDguNSwgIDAsICAxMDkxLCAgICA2LCAgIDIsICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyMzQ4MDIwLjUsICAwLCAgMTEyOCwgICAgOCwgICA0LCAgRlJJLCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMjM2Njk3OC41LCAgMCwgIDExODIsICAgIDIsICAgMywgIFNVTiwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDIzODU2NDguNSwgIDAsICAxMjM0LCAgIDEwLCAgMTAsICBNT04sICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyMzkyODI1LjUsICAwLCAgMTI1NSwgICAgMSwgIDExLCAgV0VELCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMjQxNjIyMy41LCAgMCwgIDEzMjEsICAgIDEsICAyMSwgIFNVTiwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDI0MjU4NDguNSwgIDAsICAxMzQ4LCAgICAzLCAgMTksICBTVU4sICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDMwMjY2LjUsICAwLCAgMTM2MCwgICAgOSwgICA4LCAgTU9OLCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMjQzMDgzMy41LCAgMCwgIDEzNjIsICAgIDQsICAxMywgIE1PTiwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDI0MzEwMDQuNSwgIDAsICAxMzYyLCAgIDEwLCAgIDcsICBUSFUsICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDQ4Njk4LjUsICAwLCAgMTQxMiwgICAgOSwgIDEzLCAgVFVFLCAgIDAsICAwLCAgMCksCisgICAgICAgICAgICBuZXcgVGVzdENhc2UoMjQ1MDEzOC41LCAgMCwgIDE0MTYsICAgMTAsICAgNSwgIFNVTiwgICAwLCAgMCwgIDApLAorICAgICAgICAgICAgbmV3IFRlc3RDYXNlKDI0NjU3MzcuNSwgIDAsICAxNDYwLCAgIDEwLCAgMTIsICBXRUQsICAgMCwgIDAsICAwKSwKKyAgICAgICAgICAgIG5ldyBUZXN0Q2FzZSgyNDg2MDc2LjUsICAwLCAgMTUxOCwgICAgMywgICA1LCAgU1VOLCAgIDAsICAwLCAgMCksCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBJc2xhbWljQ2FsZW5kYXIgY2l2aWxDYWxlbmRhciA9IG5ld0NpdmlsKCk7CisgICAgICAgIGNpdmlsQ2FsZW5kYXIuc2V0TGVuaWVudCh0cnVlKTsKKyAgICAgICAgZG9UZXN0Q2FzZXModGVzdHMsIGNpdmlsQ2FsZW5kYXIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RCYXNpYygpIHsKKyAgICAgICAgSXNsYW1pY0NhbGVuZGFyIGNhbCA9IG5ld0NpdmlsKCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDEwMDAsIDAsIDMwKTsKKyAgICAgICAgbG9nbG4oIjEwMDAvMC8zMCAtPiAiICsKKyAgICAgICAgICAgICAgY2FsLmdldChZRUFSKSArICIvIiArCisgICAgICAgICAgICAgIGNhbC5nZXQoTU9OVEgpICsgIi8iICsgCisgICAgICAgICAgICAgIGNhbC5nZXQoREFURSkpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgxLCAwLCAzMCk7CisgICAgICAgIGxvZ2xuKCIxLzAvMzAgLT4gIiArCisgICAgICAgICAgICAgIGNhbC5nZXQoWUVBUikgKyAiLyIgKworICAgICAgICAgICAgICBjYWwuZ2V0KE1PTlRIKSArICIvIiArIAorICAgICAgICAgICAgICBjYWwuZ2V0KERBVEUpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q292ZXJhZ2UoKSB7CisJeworCSAgICAvLyBuZXcgSXNsYW1pY0NhbGVuZGFyKFRpbWVab25lKQorCSAgICBJc2xhbWljQ2FsZW5kYXIgY2FsID0gbmV3IElzbGFtaWNDYWxlbmRhcihUaW1lWm9uZS5nZXREZWZhdWx0KCkpOworCX0KKwkKKwl7CisJICAgIC8vIG5ldyBJc2xhbWljQ2FsZW5kYXIoTG9jYWxlKQorCSAgICBJc2xhbWljQ2FsZW5kYXIgY2FsID0gbmV3IElzbGFtaWNDYWxlbmRhcihMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKwl9CisKKwl7CisJICAgIC8vIG5ldyBJc2xhbWljQ2FsZW5kYXIoRGF0ZSkKKwkgICAgSXNsYW1pY0NhbGVuZGFyIGNhbCA9IG5ldyBJc2xhbWljQ2FsZW5kYXIobmV3IERhdGUoKSk7CisJfQorCisJeworCSAgICAvLyBuZXcgSXNsYW1pY0NhbGVuZGFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXRlKQorCSAgICBJc2xhbWljQ2FsZW5kYXIgY2FsID0gbmV3IElzbGFtaWNDYWxlbmRhcig4MDAsIElzbGFtaWNDYWxlbmRhci5SQU1BREFOLCAxKTsKKwl9CisKKwl7CisJICAgIC8vIG5ldyBJc2xhbWljQ2FsZW5kYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRhdGUsIGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kKQorCSAgICBJc2xhbWljQ2FsZW5kYXIgY2FsID0gbmV3IElzbGFtaWNDYWxlbmRhcig4MDAsIElzbGFtaWNDYWxlbmRhci5SQU1BREFOLCAxLCAxLCAxLCAxKTsKKwl9CisKKwl7CisJICAgIC8vIHNldENpdmlsL2lzQ2l2aWwKKwkgICAgLy8gb3BlcmF0aW9ucyBvbiBub24tY2l2aWwgY2FsZW5kYXIKKwkgICAgSXNsYW1pY0NhbGVuZGFyIGNhbCA9IG5ldyBJc2xhbWljQ2FsZW5kYXIoODAwLCBJc2xhbWljQ2FsZW5kYXIuUkFNQURBTiwgMSwgMSwgMSwgMSk7CisJICAgIGNhbC5zZXRDaXZpbChmYWxzZSk7CisJICAgIGlmIChjYWwuaXNDaXZpbCgpKSB7CisJCWVycmxuKCJpc2xhbWljIGNhbGVuZGFyIGlzIGNpdmlsIik7CisJICAgIH0KKworCSAgICBEYXRlIG5vdyA9IG5ldyBEYXRlKCk7CisJICAgIGNhbC5zZXRUaW1lKG5vdyk7CisKKwkgICAgRGF0ZSB0aGVuID0gY2FsLmdldFRpbWUoKTsKKwkgICAgaWYgKCFub3cuZXF1YWxzKHRoZW4pKSB7CisJCWVycmxuKCJnZXQvc2V0IHRpbWUgZmFpbGVkIHdpdGggbm9uLWNpdmlsIGlzbGFtaWMgY2FsZW5kYXIiKTsKKwkgICAgfQorCisJICAgIGxvZ2xuKHRoZW4udG9TdHJpbmcoKSk7CisKKwkgICAgY2FsLmFkZChjYWwuTU9OVEgsIDEpOworCSAgICBjYWwuYWRkKGNhbC5EQVlfT0ZfTU9OVEgsIDEpOworCSAgICBjYWwuYWRkKGNhbC5ZRUFSLCAxKTsKKworCSAgICBsb2dsbihjYWwuZ2V0VGltZSgpLnRvU3RyaW5nKCkpOworCX0KKwkKKwl7CisJICAgIC8vIGRhdGEKKwkgICAgSXNsYW1pY0NhbGVuZGFyIGNhbCA9IG5ldyBJc2xhbWljQ2FsZW5kYXIoODAwLCBJc2xhbWljQ2FsZW5kYXIuUkFNQURBTiwgMSk7CisJICAgIERhdGUgdGltZSA9IGNhbC5nZXRUaW1lKCk7CisKKwkgICAgU3RyaW5nW10gY2FsZW5kYXJMb2NhbGVzID0geworCQkiYXJfQUUiLCAiYXJfQkgiLCAiYXJfRFoiLCAiYXJfRUciLCAiYXJfSk8iLCAiYXJfS1ciLCAiYXJfT00iLCAKKwkJImFyX1FBIiwgImFyX1NBIiwgImFyX1NZIiwgImFyX1lFIiwgIm1zX01ZIgorCSAgICB9OworCisJICAgIFN0cmluZ1tdIGZvcm1hdExvY2FsZXMgPSB7CisJCSJlbiIsICJhciIsICJmaSIsICJmciIsICJodSIsICJpdyIsICJubCIKKwkgICAgfTsKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWxlbmRhckxvY2FsZXMubGVuZ3RoOyArK2kpIHsKKwkJU3RyaW5nIGNhbExvY05hbWUgPSBjYWxlbmRhckxvY2FsZXNbaV07CisJCUxvY2FsZSBjYWxMb2NhbGUgPSBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKGNhbExvY05hbWUpOworCQljYWwgPSBuZXcgSXNsYW1pY0NhbGVuZGFyKGNhbExvY2FsZSk7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBmb3JtYXRMb2NhbGVzLmxlbmd0aDsgKytqKSB7CisJCSAgICBTdHJpbmcgbG9jTmFtZSA9IGZvcm1hdExvY2FsZXNbal07CisJCSAgICBMb2NhbGUgZm9ybWF0TG9jYWxlID0gTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShsb2NOYW1lKTsKKwkJICAgIERhdGVGb3JtYXQgZm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5GVUxMLCBEYXRlRm9ybWF0LkZVTEwsIGZvcm1hdExvY2FsZSk7CisJCSAgICBsb2dsbihjYWxMb2NOYW1lICsgIi8iICsgbG9jTmFtZSArICIgLS0+ICIgKyBmb3JtYXQuZm9ybWF0KHRpbWUpKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIElzbGFtaWNDYWxlbmRhciBuZXdDaXZpbCgpIHsKKyAgICAgICAgSXNsYW1pY0NhbGVuZGFyIGNpdmlsQ2FsZW5kYXIgPSBuZXcgSXNsYW1pY0NhbGVuZGFyKCk7CisgICAgICAgIGNpdmlsQ2FsZW5kYXIuc2V0Q2l2aWwodHJ1ZSk7CisgICAgICAgIHJldHVybiBjaXZpbENhbGVuZGFyOworICAgIH0KKyAgICAKK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvSmFwYW5lc2VUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvSmFwYW5lc2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyOTQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9KYXBhbmVzZVRlc3QuamF2YQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL0phcGFuZXNlVGVzdC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMDggMjM6MDY6MDkgJAorICogJFJldmlzaW9uOiAxLjEgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuTG9jYWxlVXRpbGl0eTsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkphcGFuZXNlQ2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5UaW1lWm9uZTsKKworLyoqCisgKiBUZXN0cyBmb3IgdGhlIDxjb2RlPklzbGFtaWNDYWxlbmRhcjwvY29kZT4gY2xhc3MuCisgKi8KK3B1YmxpYyBjbGFzcyBKYXBhbmVzZVRlc3QgZXh0ZW5kcyBDYWxlbmRhclRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgSmFwYW5lc2VUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDb3ZlcmFnZSgpIHsKKwl7CisJICAgIC8vIG5ldyBKYXBhbmVzZUNhbGVuZGFyKFRpbWVab25lKQorCSAgICBKYXBhbmVzZUNhbGVuZGFyIGNhbCA9IG5ldyBKYXBhbmVzZUNhbGVuZGFyKFRpbWVab25lLmdldERlZmF1bHQoKSk7CisJfQorCQorCXsKKwkgICAgLy8gbmV3IEphcGFuZXNlQ2FsZW5kYXIoTG9jYWxlKQorCSAgICBKYXBhbmVzZUNhbGVuZGFyIGNhbCA9IG5ldyBKYXBhbmVzZUNhbGVuZGFyKExvY2FsZS5nZXREZWZhdWx0KCkpOworCX0KKworCXsKKwkgICAgLy8gbmV3IEphcGFuZXNlQ2FsZW5kYXIoVGltZVpvbmUsIExvY2FsZSkKKwkgICAgSmFwYW5lc2VDYWxlbmRhciBjYWwgPSBuZXcgSmFwYW5lc2VDYWxlbmRhcihUaW1lWm9uZS5nZXREZWZhdWx0KCksIExvY2FsZS5nZXREZWZhdWx0KCkpOworCX0KKworCXsKKwkgICAgLy8gbmV3IEphcGFuZXNlQ2FsZW5kYXIoRGF0ZSkKKwkgICAgSmFwYW5lc2VDYWxlbmRhciBjYWwgPSBuZXcgSmFwYW5lc2VDYWxlbmRhcihuZXcgRGF0ZSgpKTsKKwl9CisKKwl7CisJICAgIC8vIG5ldyBKYXBhbmVzZUNhbGVuZGFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXRlKQorCSAgICBKYXBhbmVzZUNhbGVuZGFyIGNhbCA9IG5ldyBKYXBhbmVzZUNhbGVuZGFyKDE4NjgsIENhbGVuZGFyLkpBTlVBUlksIDEpOworCX0KKworCXsKKwkgICAgLy8gbmV3IEphcGFuZXNlQ2FsZW5kYXIoaW50IGVyYSwgaW50IHllYXIsIGludCBtb250aCwgaW50IGRhdGUpCisJICAgIEphcGFuZXNlQ2FsZW5kYXIgY2FsID0gbmV3IEphcGFuZXNlQ2FsZW5kYXIoSmFwYW5lc2VDYWxlbmRhci5NRUlKSSwgNDMsIENhbGVuZGFyLkpBTlVBUlksIDEpOworCX0KKworCXsKKwkgICAgLy8gbmV3IEphcGFuZXNlQ2FsZW5kYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRhdGUsIGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kKQorCSAgICBKYXBhbmVzZUNhbGVuZGFyIGNhbCA9IG5ldyBKYXBhbmVzZUNhbGVuZGFyKDE4NjgsIENhbGVuZGFyLkpBTlVBUlksIDEsIDEsIDEsIDEpOworCX0KKworCXsKKwkgICAgLy8gbGltaXRzCisJICAgIEphcGFuZXNlQ2FsZW5kYXIgY2FsID0gbmV3IEphcGFuZXNlQ2FsZW5kYXIoKTsKKwkgICAgRGF0ZUZvcm1hdCBmbXQgPSBjYWwuZ2V0RGF0ZVRpbWVGb3JtYXQoRGF0ZUZvcm1hdC5GVUxMLCBEYXRlRm9ybWF0LkZVTEwsIExvY2FsZS5FTkdMSVNIKTsKKworCSAgICBjYWwuc2V0KGNhbC5FUkEsIGNhbC5NRUlKSSk7CisJICAgIGxvZ2xuKCJkYXRlOiAiICsgY2FsLmdldFRpbWUoKSk7CisJICAgIGxvZ2xuKCJtaW4gZXJhOiAiICsgY2FsLmdldE1pbmltdW0oY2FsLkVSQSkpOworCSAgICBsb2dsbigibWluIHllYXI6ICIgKyBjYWwuZ2V0TWluaW11bShjYWwuWUVBUikpOworCSAgICBjYWwuc2V0KGNhbC5ZRUFSLCBjYWwuZ2V0QWN0dWFsTWF4aW11bShjYWwuWUVBUikpOworCSAgICBsb2dsbigiZGF0ZTogIiArIGZtdC5mb3JtYXQoY2FsLmdldFRpbWUoKSkpOworCSAgICBjYWwuYWRkKGNhbC5ZRUFSLCAxKTsKKwkgICAgbG9nbG4oImRhdGU6ICIgKyBmbXQuZm9ybWF0KGNhbC5nZXRUaW1lKCkpKTsKKwl9CisJCisJeworCSAgICAvLyBkYXRhCisJICAgIEphcGFuZXNlQ2FsZW5kYXIgY2FsID0gbmV3IEphcGFuZXNlQ2FsZW5kYXIoMTg2OCwgQ2FsZW5kYXIuSkFOVUFSWSwgMSk7CisJICAgIERhdGUgdGltZSA9IGNhbC5nZXRUaW1lKCk7CisKKwkgICAgU3RyaW5nW10gY2FsZW5kYXJMb2NhbGVzID0geworCQkiZW4iLCAiamFfSlAiCisJICAgIH07CisKKwkgICAgU3RyaW5nW10gZm9ybWF0TG9jYWxlcyA9IHsKKwkJImVuIiwgImphIgorCSAgICB9OworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGVuZGFyTG9jYWxlcy5sZW5ndGg7ICsraSkgeworCQlTdHJpbmcgY2FsTG9jTmFtZSA9IGNhbGVuZGFyTG9jYWxlc1tpXTsKKwkJTG9jYWxlIGNhbExvY2FsZSA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUoY2FsTG9jTmFtZSk7CisJCWNhbCA9IG5ldyBKYXBhbmVzZUNhbGVuZGFyKGNhbExvY2FsZSk7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBmb3JtYXRMb2NhbGVzLmxlbmd0aDsgKytqKSB7CisJCSAgICBTdHJpbmcgbG9jTmFtZSA9IGZvcm1hdExvY2FsZXNbal07CisJCSAgICBMb2NhbGUgZm9ybWF0TG9jYWxlID0gTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShsb2NOYW1lKTsKKwkJICAgIERhdGVGb3JtYXQgZm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKGNhbCwgRGF0ZUZvcm1hdC5GVUxMLCBEYXRlRm9ybWF0LkZVTEwsIGZvcm1hdExvY2FsZSk7CisJCSAgICBsb2dsbihjYWxMb2NOYW1lICsgIi8iICsgbG9jTmFtZSArICIgLS0+ICIgKyBmb3JtYXQuZm9ybWF0KHRpbWUpKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL1Rlc3RDYXNlLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYmY1YzZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NhbGVuZGFyL1Rlc3RDYXNlLmphdmEKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9UZXN0Q2FzZS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjA3ICQgCisgKiAkUmV2aXNpb246IDEuNyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY2FsZW5kYXI7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogQSBwc2V1ZG8gPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IHRoYXQgaXMgdXNlZnVsIGZvciB0ZXN0aW5nCisgKiBuZXcgY2FsZW5kYXJzLiAgQSA8Y29kZT5UZXN0Q2FzZTwvY29kZT4gb2JqZWN0IGlzIHVzZWQgdG8gaG9sZCB0aGUKKyAqIGZpZWxkIGFuZCBtaWxsaXNlY29uZCB2YWx1ZXMgdGhhdCB0aGUgY2FsZW5kYXIgc2hvdWxkIGhhdmUgYXQgb25lCisgKiBwYXJ0aWN1bGFyIGluc3RhbnQgaW4gdGltZS4gIFRoZSBhcHBseUZpZWxkcyBhbmQgYXBwbHlUaW1lCisgKiBtZXRob2RzIGFyZSB1c2VkIHRvIGFwcGx5IHRoZXNlIHNldHRpbmdzIHRvIHRoZSBjYWxlbmRhciBvYmplY3QgYmVpbmcKKyAqIHRlc3RlZCwgYW5kIHRoZSBlcXVhbHMgYW5kIGZpZWxkc0VxdWFsIG1ldGhvZHMgYXJlIHVzZWQgdG8gZW5zdXJlCisgKiB0aGF0IHRoZSBjYWxlbmRhciBoYXMgZW5kZWQgdXAgaW4gdGhlIHJpZ2h0IHN0YXRlLgorICovCitwdWJsaWMgY2xhc3MgVGVzdENhc2UgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQc2V1ZG8tQ2FsZW5kYXIgZmllbGRzIGFuZCBtZXRob2RzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHByb3RlY3RlZCBpbnRbXSBmaWVsZHMgPSBuZXcgaW50WzMyXTsKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbltdIGlzU2V0ID0gbmV3IGJvb2xlYW5bMzJdOworICAgIHByb3RlY3RlZCBsb25nIHRpbWU7CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXQoaW50IGZpZWxkLCBpbnQgdmFsdWUpIHsKKyAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHZhbHVlOworICAgICAgICBpc1NldFtmaWVsZF0gPSB0cnVlOworICAgIH0KKworICAgIHByb3RlY3RlZCBpbnQgZ2V0KGludCBmaWVsZCkgeworICAgICAgICByZXR1cm4gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NldChpbnQgZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIGlzU2V0W2ZpZWxkXTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRUaW1lKERhdGUgZCkgeworICAgICAgICB0aW1lID0gZC5nZXRUaW1lKCk7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0VGltZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRpbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRlc3QgY2FzZSdzIHRpbWUuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIGRvd1RvU3RyaW5nKGdldChDYWxlbmRhci5EQVlfT0ZfV0VFSykpICsKKyAgICAgICAgICAgIGdldChDYWxlbmRhci5ZRUFSKSArICIvIiArIChnZXQoQ2FsZW5kYXIuTU9OVEgpKzEpICsgIi8iICsKKyAgICAgICAgICAgIGdldChDYWxlbmRhci5EQVRFKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBET1dfTkFNRVMgPSB7CisgICAgICAgICJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiCisgICAgfTsKKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGRvd1RvU3RyaW5nKGludCBkb3cpIHsKKyAgICAgICAgLS1kb3c7CisgICAgICAgIHJldHVybiAoZG93IDwgMCB8fCBkb3cgPiA2KSA/CisgICAgICAgICAgICAoIjxET1cgIiArIGRvdyArICI+IikgOiBET1dfTkFNRVNbZG93XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIGEgVGVzdENhc2Ugb2JqZWN0IHVzaW5nIGEganVsaWFuIGRheSBudW1iZXIgYW5kCisgICAgICogdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIGZvciB0aGUgY2FsZW5kYXIgYmVpbmcgdGVzdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIGVyYSAgICAgICBUaGUgRVJBIGZpZWxkIG9mIHRlc3RlZCBjYWxlbmRhciBvbiB0aGUgZ2l2ZW4ganVsaWFuIGRheQorICAgICAqIEBwYXJhbSB5ZWFyICAgICAgVGhlIFlFQVIgZmllbGQgb2YgdGVzdGVkIGNhbGVuZGFyIG9uIHRoZSBnaXZlbiBqdWxpYW4gZGF5CisgICAgICogQHBhcmFtIG1vbnRoICAgICBUaGUgTU9OVEggKDEtYmFzZWQpIGZpZWxkIG9mIHRlc3RlZCBjYWxlbmRhciBvbiB0aGUgZ2l2ZW4ganVsaWFuIGRheQorICAgICAqIEBwYXJhbSBkYXkgICAgICAgVGhlIERBWV9PRl9NT05USCBmaWVsZCBvZiB0ZXN0ZWQgY2FsZW5kYXIgb24gdGhlIGdpdmVuIGp1bGlhbiBkYXkKKyAgICAgKiBAcGFyYW0gZGF5T2ZXZWVrIFRoZSBEQVlfT0ZfV0VFSyBmaWVsZCBvZiB0ZXN0ZWQgY2FsZW5kYXIgb24gdGhlIGdpdmVuIGp1bGlhbiBkYXkKKyAgICAgKiBAcGFyYW0gaG91ciAgICAgIFRoZSBIT1VSIGZpZWxkIG9mIHRlc3RlZCBjYWxlbmRhciBvbiB0aGUgZ2l2ZW4ganVsaWFuIGRheQorICAgICAqIEBwYXJhbSBtaW4gICAgICAgVGhlIE1JTlVURSBmaWVsZCBvZiB0ZXN0ZWQgY2FsZW5kYXIgb24gdGhlIGdpdmVuIGp1bGlhbiBkYXkKKyAgICAgKiBAcGFyYW0gc2VjICAgICAgIFRoZSBTRUNPTkQgZmllbGQgb2YgdGVzdGVkIGNhbGVuZGFyIG9uIHRoZSBnaXZlbiBqdWxpYW4gZGF5CisgICAgICovCisgICAgcHVibGljIFRlc3RDYXNlKGRvdWJsZSBqdWxpYW4sCisgICAgICAgICAgICAgICAgICAgIGludCBlcmEsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksCisgICAgICAgICAgICAgICAgICAgIGludCBkYXlPZldlZWssCisgICAgICAgICAgICAgICAgICAgIGludCBob3VyLCBpbnQgbWluLCBpbnQgc2VjKQorICAgIHsKKyAgICAgICAgc2V0VGltZShuZXcgRGF0ZShKVUxJQU5fRVBPQ0ggKyAobG9uZykoT05FX0RBWSAqIGp1bGlhbikpKTsKKyAgICAgICAgCisgICAgICAgIHNldChDYWxlbmRhci5FUkEsIGVyYSk7CisgICAgICAgIHNldChDYWxlbmRhci5ZRUFSLCB5ZWFyKTsKKyAgICAgICAgc2V0KENhbGVuZGFyLk1PTlRILCBtb250aCAtIDEpOworICAgICAgICBzZXQoQ2FsZW5kYXIuREFURSwgZGF5KTsKKyAgICAgICAgc2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLLCBkYXlPZldlZWspOworICAgICAgICBzZXQoQ2FsZW5kYXIuSE9VUiwgaG91cik7CisgICAgICAgIHNldChDYWxlbmRhci5NSU5VVEUsIG1pbik7CisgICAgICAgIHNldChDYWxlbmRhci5TRUNPTkQsIHNlYyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZSBhIFRlc3RDYXNlIG9iamVjdCB1c2luZyBhIEdyZWdvcmlhbiB5ZWFyL21vbnRoL2RheSBhbmQKKyAgICAgKiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgZm9yIHRoZSBjYWxlbmRhciBiZWluZyB0ZXN0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZ3JlZ1llYXIgIFRoZSBHcmVnb3JpYW4geWVhciBvZiB0aGUgZGF0ZSB0byBiZSB0ZXN0ZWQKKyAgICAgKiBAcGFyYW0gZ3JlZ01vbnRoIFRoZSBHcmVnb3JpYW4gbW9udGggb2YgdGhlIGRhdGUgdG8gYmUgdGVzdGVkCisgICAgICogQHBhcmFtIGdyZWdEYXkgICBUaGUgR3JlZ29yaWFuIGRheSBvZiB0aGUgbW9udGggb2YgdGhlIGRhdGUgdG8gYmUgdGVzdGVkCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXJhICAgICAgIFRoZSBFUkEgZmllbGQgb2YgdGVzdGVkIGNhbGVuZGFyIG9uIHRoZSBnaXZlbiBncmVnb3JpYW4gZGF0ZQorICAgICAqIEBwYXJhbSB5ZWFyICAgICAgVGhlIFlFQVIgZmllbGQgb2YgdGVzdGVkIGNhbGVuZGFyIG9uIHRoZSBnaXZlbiBncmVnb3JpYW4gZGF0ZQorICAgICAqIEBwYXJhbSBtb250aCAgICAgVGhlIE1PTlRIICgwLWJhc2VkKSBmaWVsZCBvZiB0ZXN0ZWQgY2FsZW5kYXIgb24gdGhlIGdpdmVuIGdyZWdvcmlhbiBkYXRlCisgICAgICogQHBhcmFtIGRheSAgICAgICBUaGUgREFZX09GX01PTlRIIGZpZWxkIG9mIHRlc3RlZCBjYWxlbmRhciBvbiB0aGUgZ2l2ZW4gZ3JlZ29yaWFuIGRhdGUKKyAgICAgKiBAcGFyYW0gZGF5T2ZXZWVrIFRoZSBEQVlfT0ZfV0VFSyBmaWVsZCBvZiB0ZXN0ZWQgY2FsZW5kYXIgb24gdGhlIGdpdmVuIGdyZWdvcmlhbiBkYXRlCisgICAgICogQHBhcmFtIGhvdXIgICAgICBUaGUgSE9VUiBmaWVsZCBvZiB0ZXN0ZWQgY2FsZW5kYXIgb24gdGhlIGdpdmVuIGdyZWdvcmlhbiBkYXRlCisgICAgICogQHBhcmFtIG1pbiAgICAgICBUaGUgTUlOVVRFIGZpZWxkIG9mIHRlc3RlZCBjYWxlbmRhciBvbiB0aGUgZ2l2ZW4gZ3JlZ29yaWFuIGRhdGUKKyAgICAgKiBAcGFyYW0gc2VjICAgICAgIFRoZSBTRUNPTkQgZmllbGQgb2YgdGVzdGVkIGNhbGVuZGFyIG9uIHRoZSBnaXZlbiBncmVnb3JpYW4gZGF0ZQorICAgICAqLworICAgIHB1YmxpYyBUZXN0Q2FzZShpbnQgZ3JlZ1llYXIsIGludCBncmVnTW9udGgsIGludCBncmVnRGF5LAorICAgICAgICAgICAgICAgICAgICBpbnQgZXJhLCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LAorICAgICAgICAgICAgICAgICAgICBpbnQgZGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgICBpbnQgaG91ciwgaW50IG1pbiwgaW50IHNlYykKKyAgICB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGdyZWcgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVVRDLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgZ3JlZy5jbGVhcigpOworICAgICAgICBncmVnLnNldChncmVnWWVhciwgZ3JlZ01vbnRoLTEsIGdyZWdEYXkpOworICAgICAgICBzZXRUaW1lKGdyZWcuZ2V0VGltZSgpKTsKKyAgICAgICAgCisgICAgICAgIHNldChDYWxlbmRhci5FUkEsIGVyYSk7CisgICAgICAgIHNldChDYWxlbmRhci5ZRUFSLCB5ZWFyKTsKKyAgICAgICAgc2V0KENhbGVuZGFyLk1PTlRILCBtb250aCAtIDEpOworICAgICAgICBzZXQoQ2FsZW5kYXIuREFURSwgZGF5KTsKKyAgICAgICAgc2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLLCBkYXlPZldlZWspOworICAgICAgICBzZXQoQ2FsZW5kYXIuSE9VUiwgaG91cik7CisgICAgICAgIHNldChDYWxlbmRhci5NSU5VVEUsIG1pbik7CisgICAgICAgIHNldChDYWxlbmRhci5TRUNPTkQsIHNlYyk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEZvciBzdWJjbGFzc2VzLgorICAgICAqLworICAgIHByb3RlY3RlZCBUZXN0Q2FzZSgpIHt9CisKKyAgICAvKioKKyAgICAgKiBBcHBseSB0aGlzIHRlc3QgY2FzZSdzIGZpZWxkIHZhbHVlcyB0byBhbm90aGVyIGNhbGVuZGFyCisgICAgICogYnkgY2FsbGluZyBpdHMgc2V0IG1ldGhvZCBmb3IgZWFjaCBmaWVsZC4gIFRoaXMgaXMgdXNlZnVsIGluIGNvbWJpbmF0aW9uCisgICAgICogd2l0aCB0aGUgZXF1YWwgbWV0aG9kLgorICAgICAqCisgICAgICogQHNlZSAjZXF1YWwKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhcHBseUZpZWxkcyhDYWxlbmRhciBjKSB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGMuZ2V0RmllbGRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpc1NldChpKSkgeworICAgICAgICAgICAgICAgIGMuc2V0KGksIGdldChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQXBwbHkgdGhpcyB0ZXN0IGNhc2UncyB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBhbm90aGVyIGNhbGVuZGFyCisgICAgICogYnkgY2FsbGluZyBpdHMgc2V0VGltZSBtZXRob2QuICBUaGlzIGlzIHVzZWZ1bCBpbiBjb21iaW5hdGlvbgorICAgICAqIHdpdGggZmllbGRzRXF1YWwKKyAgICAgKgorICAgICAqIEBzZWUgI2ZpZWxkc0VxdWFsCisgICAgICovCisgICAgcHVibGljIHZvaWQgYXBwbHlUaW1lKENhbGVuZGFyIGMpIHsKKyAgICAgICAgYy5zZXRUaW1lKG5ldyBEYXRlKHRpbWUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZmllbGRzIG9mIHRoaXMgY2FsZW5kYXIKKyAgICAgKiBhcmUgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgb3RoZXIgY2FsZW5kYXIuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwKKyAgICAgKiBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgb3RoZXIgY2FsZW5kYXIncyBjb21wdXRlRmllbGRzIG1ldGhvZAorICAgICAqIHdvcmtzIHByb3Blcmx5LiAgRm9yIGV4YW1wbGU6CisgICAgICogPHByZT4KKyAgICAgKiAgICBDYWxlbmRhciB0ZXN0Q2FsZW5kYXIgPSAuLi4KKyAgICAgKiAgICBUZXN0Q2FzZSBjYXNlID0gLi4uCisgICAgICogICAgY2FzZS5hcHBseVRpbWUodGVzdENhbGVuZGFyKTsKKyAgICAgKiAgICBpZiAoIWNhc2UuZmllbGRzRXF1YWwodGVzdENhbGVuZGFyKSkgeworICAgICAqICAgICAgICAvLyBFcnJvciEKKyAgICAgKiAgICB9CisgICAgICogPC9wcmU+CisgICAgICogCisgICAgICogQHNlZSAjYXBwbHlUaW1lCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZmllbGRzRXF1YWwoQ2FsZW5kYXIgYywgVGVzdExvZyBsb2cpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYy5nZXRGaWVsZENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGlzU2V0KGkpICYmIGdldChpKSAhPSBjLmdldChpKSkgeworICAgICAgICAgICAgICAgIGxvZy5lcnJsbigiRmFpbDogIiArIENhbGVuZGFyVGVzdC5maWVsZE5hbWUoaSkgKyAiID0gIiArIGMuZ2V0KGkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQgIiArIGdldChpKSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGMuZ2V0RmllbGRDb3VudCgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KGopKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0KGopID09IGMuZ2V0KGopKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmVycmxuKCIgT0s6ICIgKyBDYWxlbmRhclRlc3QuZmllbGROYW1lKGopICsgIiA9ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldChqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJsbigiIEZhaWw6ICIgKyBDYWxlbmRhclRlc3QuZmllbGROYW1lKGopICsgIiA9ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldChqKSArICIsIGV4cGVjdGVkICIgKyBnZXQoaikpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIERldGVybWluZSB3aGV0aGVyIHRpbWUgaW4gbWlsbGlzZWNvbmRzIG9mIHRoaXMgY2FsZW5kYXIKKyAgICAgKiBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBvdGhlciBjYWxlbmRhci4gIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bAorICAgICAqIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBvdGhlciBjYWxlbmRhcidzIGNvbXB1dGVUaW1lIG1ldGhvZAorICAgICAqIHdvcmtzIHByb3Blcmx5LiAgRm9yIGV4YW1wbGU6CisgICAgICogPHByZT4KKyAgICAgKiAgICBDYWxlbmRhciB0ZXN0Q2FsZW5kYXIgPSAuLi4KKyAgICAgKiAgICBUZXN0Q2FzZSBjYXNlID0gLi4uCisgICAgICogICAgY2FzZS5hcHBseUZpZWxkcyh0ZXN0Q2FsZW5kYXIpOworICAgICAqICAgIGlmICghY2FzZS5lcXVhbHModGVzdENhbGVuZGFyKSkgeworICAgICAqICAgICAgICAvLyBFcnJvciEKKyAgICAgKiAgICB9CisgICAgICogPC9wcmU+CisgICAgICogCisgICAgICogQHNlZSAjYXBwbHlGaWVsZHMKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworICAgICAgICByZXR1cm4gdGltZSA9PSAoKENhbGVuZGFyKW9iaikuZ2V0VGltZSgpLmdldFRpbWUoKTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgIE9ORV9TRUNPTkQgPSAxMDAwOworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50ICBPTkVfTUlOVVRFID0gNjAqT05FX1NFQ09ORDsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCAgT05FX0hPVVIgICA9IDYwKk9ORV9NSU5VVEU7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIE9ORV9EQVkgICAgPSAyNCpPTkVfSE9VUjsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgSlVMSUFOX0VQT0NIID0gLTIxMDg2Njc2MDAwMDAwMEw7ICAgLy8gMS8xLzQ3MTMgQkMgMTI6MDAKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU2ltcGxlVGltZVpvbmUgVVRDID0gbmV3IFNpbXBsZVRpbWVab25lKDAsICJHTVQiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jYWxlbmRhci9wYWNrYWdlLmh0bWwgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlZDA2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY2FsZW5kYXIvcGFja2FnZS5odG1sLHYgJAorICAkUmV2aXNpb246IDEuMSAkCisgICREYXRlOiAyMDAwLzAzLzE1IDIxOjM1OjQ5ICQKKy0tPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiPgorVGVzdHMgZm9yIHRoZSBjYWxlbmRhciBjbGFzc2VzLgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25BUElUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uQVBJVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjdmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uQVBJVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQ5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IAorICogJERhdGU6IAorICogJFJldmlzaW9uOiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjIuMSA6IGNvbGxhdGUvQ29sbGF0aW9uQVBJVGVzdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvYXBpY29sbC5jcHAKKyAqKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnRleHQuU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CisKK3B1YmxpYyBjbGFzcyBDb2xsYXRpb25BUElUZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgQ29sbGF0aW9uQVBJVGVzdCgpLnJ1bihhcmdzKTsKKyAgICAgICAgLy9uZXcgQ29sbGF0aW9uQVBJVGVzdCgpLlRlc3RHZXRUYWlsb3JlZFNldCgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGlzIHRlc3RzIHRoZSBjb2xsYXRpb24ga2V5IHJlbGF0ZWQgQVBJcy4KKyAgICAgKiAtIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IKKyAgICAgKiAtIENvbGxhdG9yLmdldENvbGxhdGlvbktleQorICAgICAqIC0gPT0gYW5kICE9IG9wZXJhdG9ycworICAgICAqIC0gY29tcGFyaXNvbiBiZXR3ZWVuIGNvbGxhdGlvbiBrZXlzCisgICAgICogLSBjcmVhdGluZyBjb2xsYXRpb24ga2V5IHdpdGggYSBieXRlIGFycmF5IGFuZCB2aWNlIHZlcnNhCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENvbGxhdGlvbktleSgpIHsKKyAgICAgICAgbG9nbG4oInRlc3RpbmcgQ29sbGF0aW9uS2V5IGJlZ2lucy4uLiIpOworICAgICAgICBDb2xsYXRvciBjb2wgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIGNvbC5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgCisgICAgICAgIENvbGxhdGlvbktleSBzb3J0azEsIHNvcnRrMjsKKyAgICAgICAgU3RyaW5nIHRlc3QxID0gIkFiY2RhIjsKKyAgICAgICAgU3RyaW5nIHRlc3QyID0gImFiY2RhIjsKKyAgICAKKyAgICAgICAgbG9nbG4oIlRlc3Rpbmcgd2VpcmQgYXJndW1lbnRzIik7CisgICAgICAgIHNvcnRrMSA9IGNvbC5nZXRDb2xsYXRpb25LZXkoIiIpOworICAgICAgICAvLyBrZXkgZ2V0cyByZXNldCBoZXJlCisgICAgICAgIGJ5dGVbXSBieXRlcyA9IHNvcnRrMS50b0J5dGVBcnJheSgpOworICAgICAgICBkb0Fzc2VydChieXRlcy5sZW5ndGggPT0gMyAmJiBieXRlc1swXSA9PSAxICYmIGJ5dGVzWzFdID09IDEgJiYgYnl0ZXNbMl0gPT0gMCwgCisgICAgICAgICAgICAgICAgICJFbXB0eSBzdHJpbmcgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBjb2xsYXRpb24ga2V5Iik7CisgICAgICAgIC8vIGJvZ3VzIGtleSByZXR1cm5lZCBoZXJlCisgICAgICAgIHNvcnRrMSA9IGNvbC5nZXRDb2xsYXRpb25LZXkobnVsbCk7CisgICAgICAgIGRvQXNzZXJ0KHNvcnRrMSA9PSBudWxsLCAiRXJyb3IgY29kZSBzaG91bGQgcmV0dXJuIGJvZ3VzIGNvbGxhdGlvbiBrZXkiKTsKKworICAgICAgICBsb2dsbigiVXNlIHRlcnRpYXJ5IGNvbXBhcmlzb24gbGV2ZWwgdGVzdGluZyAuLi4uIik7CisgICAgICAgIHNvcnRrMSA9IGNvbC5nZXRDb2xsYXRpb25LZXkodGVzdDEpOworICAgICAgICBzb3J0azIgPSBjb2wuZ2V0Q29sbGF0aW9uS2V5KHRlc3QyKTsKKyAgICAgICAgZG9Bc3NlcnQoKHNvcnRrMS5jb21wYXJlVG8oc29ydGsyKSkgPiAwLCAiUmVzdWx0IHNob3VsZCBiZSBcIkFiY2RhXCIgPj4+IFwiYWJjZGFcIiIpOworICAgIAorICAgICAgICBDb2xsYXRpb25LZXkgc29ydGtOZXc7CisgICAgICAgIHNvcnRrTmV3ID0gc29ydGsxOworICAgICAgICBkb0Fzc2VydCghKHNvcnRrMS5lcXVhbHMoc29ydGsyKSksICJUaGUgc29ydCBrZXlzIHNob3VsZCBiZSBkaWZmZXJlbnQiKTsKKyAgICAgICAgZG9Bc3NlcnQoKHNvcnRrMS5oYXNoQ29kZSgpICE9IHNvcnRrMi5oYXNoQ29kZSgpKSwgInNvcnQga2V5IGhhc2hDb2RlKCkgZmFpbGVkIik7CisgICAgICAgIGRvQXNzZXJ0KChzb3J0azEuZXF1YWxzKHNvcnRrTmV3KSksICJUaGUgc29ydCBrZXlzIGFzc2lnbm1lbnQgZmFpbGVkIik7CisgICAgICAgIGRvQXNzZXJ0KChzb3J0azEuaGFzaENvZGUoKSA9PSBzb3J0a05ldy5oYXNoQ29kZSgpKSwgInNvcnQga2V5IGhhc2hDb2RlKCkgZmFpbGVkIik7CisKKyAgICAgICAgY29sLnNldFN0cmVuZ3RoKENvbGxhdG9yLlNFQ09OREFSWSk7CisgICAgICAgIGRvQXNzZXJ0KGNvbC5nZXRDb2xsYXRpb25LZXkodGVzdDEpLmNvbXBhcmVUbyhjb2wuZ2V0Q29sbGF0aW9uS2V5KHRlc3QyKSkgPT0gMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXN1bHQgc2hvdWxkIGJlIFwiQWJjZGFcIiA9PSBcImFiY2RhXCIiKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkb0Fzc2VydChib29sZWFuIGNvbmRpdGlvbnMsIFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIGlmICghY29uZGl0aW9ucykgeworICAgICAgICAgICAgZXJybG4oIkVycm9yOiAiICsgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGhpcyB0ZXN0cyB0aGUgY29tcGFyaXNvbiBjb252ZW5pZW5jZSBtZXRob2RzIG9mIGEgY29sbGF0b3Igb2JqZWN0LgorICAgICAqIC0gZ3JlYXRlciB0aGFuCisgICAgICogLSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKyAgICAgKiAtIGVxdWFsIHRvCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENvbXBhcmUoKSB7CisgICAgICAgIGxvZ2xuKCJUaGUgY29tcGFyZSB0ZXN0cyBiZWdpbiA6ICIpOworICAgICAgICBDb2xsYXRvciBjb2wgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkVOR0xJU0gpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkRlZmF1bHQgY29sbGF0aW9uIGNyZWF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3QxID0gIkFiY2RhIjsKKyAgICAgICAgU3RyaW5nIHRlc3QyID0gImFiY2RhIjsKKyAgICAgICAgbG9nbG4oIlVzZSB0ZXJ0aWFyeSBjb21wYXJpc29uIGxldmVsIHRlc3RpbmcgLi4uLiIpOworICAgICAgICAKKyAgICAgICAgT2JqZWN0IG9iajEgPSB0ZXN0MTsKKyAgICAgICAgT2JqZWN0IG9iajIgPSB0ZXN0MjsKKyAgICAgICAgZG9Bc3NlcnQoKGNvbC5jb21wYXJlKG9iajEsIG9iajIpID4gMCksICJSZXN1bHQgc2hvdWxkIGJlIFwiQWJjZGFcIiAhPSBcImFiY2RhXCIiKTsKKyAgICAgICAgZG9Bc3NlcnQoKCFjb2wuZXF1YWxzKHRlc3QxLCB0ZXN0MikgKSwgIlJlc3VsdCBzaG91bGQgYmUgXCJBYmNkYVwiICE9IFwiYWJjZGFcIiIpOworICAgICAgICBkb0Fzc2VydCgoY29sLmNvbXBhcmUodGVzdDEsIHRlc3QyKSA+IDAgKSwgIlJlc3VsdCBzaG91bGQgYmUgXCJBYmNkYVwiID4+PiBcImFiY2RhXCIiKTsKKyAgICAKKyAgICAgICAgY29sLnNldFN0cmVuZ3RoKENvbGxhdG9yLlNFQ09OREFSWSk7CisgICAgICAgIGxvZ2xuKCJVc2Ugc2Vjb25kYXJ5IGNvbXBhcmlzb24gbGV2ZWwgdGVzdGluZyAuLi4uIik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBkb0Fzc2VydCgoY29sLmNvbXBhcmUob2JqMSwgb2JqMikgPT0gMCksICJSZXN1bHQgc2hvdWxkIGJlIFwiQWJjZGFcIiA9PSBcImFiY2RhXCIiKTsKKyAgICAgICAgZG9Bc3NlcnQoKGNvbC5lcXVhbHModGVzdDEsIHRlc3QyKSApLCAiUmVzdWx0IHNob3VsZCBiZSBcIkFiY2RhXCIgPT0gXCJhYmNkYVwiIik7CisgICAgICAgIGRvQXNzZXJ0KChjb2wuY29tcGFyZSh0ZXN0MSwgdGVzdDIpID09IDApLCAiUmVzdWx0IHNob3VsZCBiZSBcIkFiY2RhXCIgPT0gXCJhYmNkYVwiIik7CisgICAgCisgICAgICAgIGNvbC5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgbG9nbG4oIlVzZSBwcmltYXJ5IGNvbXBhcmlzb24gbGV2ZWwgdGVzdGluZyAuLi4uIik7CisgICAgICAgIAorICAgICAgICBkb0Fzc2VydCgoY29sLmNvbXBhcmUob2JqMSwgb2JqMikgPT0gMCApLCAiUmVzdWx0IHNob3VsZCBiZSBcIkFiY2RhXCIgPT0gXCJhYmNkYVwiIik7CisgICAgICAgIGRvQXNzZXJ0KChjb2wuZXF1YWxzKHRlc3QxLCB0ZXN0MikgKSwgIlJlc3VsdCBzaG91bGQgYmUgXCJBYmNkYVwiID09IFwiYWJjZGFcIiIpOworICAgICAgICBkb0Fzc2VydCgoY29sLmNvbXBhcmUodGVzdDEsIHRlc3QyKSA9PSAwICksICJSZXN1bHQgc2hvdWxkIGJlIFwiQWJjZGFcIiA9PSBcImFiY2RhXCIiKTsKKyAgICAgICAgbG9nbG4oIlRoZSBjb21wYXJlIHRlc3RzIGVuZC4iKTsKKyAgICAgICAgCisgICAgICAgIEludGVnZXIgZGllID0gbmV3IEludGVnZXIoMSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2wuY29tcGFyZShkaWUsIHRlc3QxKTsKKyAgICAgICAgICAgIGVycmxuKCJOb24tU3RyaW5ncyBzaG91bGQgZmFpbCBjb2wuY29tcGFyZShPYmplY3QsIE9iamVjdCkiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIFRlc3RzIGRlY29tcG9zaXRpb24gc2V0dGluZworICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdERlY29tcG9zaXRpb24oKSB7CisgICAgICAgIENvbGxhdG9yIGVuX1VTID0gbnVsbCwgZWxfR1IgPSBudWxsLCB2aV9WTiA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBlbl9VUyA9IENvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoImVuIiwgIlVTIikpOworICAgICAgICAgICAgZWxfR1IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJlbCIsICJHUiIpKTsKKyAgICAgICAgICAgIHZpX1ZOID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgidmkiLCAiVk4iKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGNvbGxhdGlvbiBjcmVhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gdGhlcmUgaXMgbm8gcmVhc29uIHRvIGhhdmUgY2Fub25pY2FsIGRlY29tcG9zaXRpb24gaW4gZW5fVVMgT1IgZGVmYXVsdCBsb2NhbGUgKi8KKyAgICAgICAgaWYgKHZpX1ZOLmdldERlY29tcG9zaXRpb24oKSAhPSBDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTikKKyAgICAgICAgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiB2aV9WTiBjb2xsYXRpb24gZGlkIG5vdCBoYXZlIGNhbm5vbmljYWwgZGVjb21wb3NpdGlvbiBmb3Igbm9ybWFsaXphdGlvbiFcbiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVsX0dSLmdldERlY29tcG9zaXRpb24oKSAhPSBDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTikKKyAgICAgICAgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBlbF9HUiBjb2xsYXRpb24gZGlkIG5vdCBoYXZlIGNhbm5vbmljYWwgZGVjb21wb3NpdGlvbiBmb3Igbm9ybWFsaXphdGlvbiFcbiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVuX1VTLmdldERlY29tcG9zaXRpb24oKSAhPSBDb2xsYXRvci5OT19ERUNPTVBPU0lUSU9OKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGVuX1VTIGNvbGxhdGlvbiBoYWQgY2Fubm9uaWNhbCBkZWNvbXBvc2l0aW9uIGZvciBub3JtYWxpemF0aW9uIVxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGhpcyB0ZXN0cyB0aGUgZHVwbGljYXRpb24gb2YgYSBjb2xsYXRvciBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdER1cGxpY2F0ZSgpIHsKKyAgICAgICAgLy9DbG9uZSBkb2VzIG5vdCBiZSBpbXBsZW1lbnRlZCAKKyAgICAgICAgQ29sbGF0b3IgY29sMSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2wxID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkVOR0xJU0gpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWx1cmUgY3JlYXRpbmcgZW5nbGlzaCBjb2xsYXRvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDb2xsYXRvciBjb2wyID0gKENvbGxhdG9yKWNvbDEuY2xvbmUoKTsKKyAgICAgICAgLy8gZG9Bc3NlcnQoY29sMS5lcXVhbHMoY29sMiksICJDbG9uZWQgb2JqZWN0IGlzIG5vdCBlcXVhbCB0byB0aGUgb3JnaW5hbCIpOworICAgICAgICBTdHJpbmcgcnVsZXNldCA9ICI8IGEsIEEgPCBiLCBCIDwgYywgQyA8IGQsIEQsIGUsIEUiOworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2wzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbDMgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXNldCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbHVyZSBjcmVhdGluZyBSdWxlQmFzZWRDb2xsYXRvciB3aXRoIHJ1bGU6IiArIHJ1bGVzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRvQXNzZXJ0KCFjb2wxLmVxdWFscyhjb2wzKSwgIkNsb25lZCBvYmplY3QgaXMgZXF1YWwgdG8gc29tZSBkdW1teSIpOworICAgICAgICBjb2wzID0gKFJ1bGVCYXNlZENvbGxhdG9yKWNvbDE7CisgICAgICAgIGRvQXNzZXJ0KGNvbDEuZXF1YWxzKGNvbDMpLCAiQ29waWVkIG9iamVjdCBpcyBub3QgZXF1YWwgdG8gdGhlIG9yZ2luYWwiKTsKKyAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRoaXMgdGVzdHMgdGhlIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciByZWxhdGVkIEFQSXMuCisgICAgICogLSBjcmVhdGlvbiBvZiBhIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBvYmplY3QKKyAgICAgKiAtID09IGFuZCAhPSBvcGVyYXRvcnMKKyAgICAgKiAtIGl0ZXJhdGluZyBmb3J3YXJkCisgICAgICogLSByZXNldGluZyB0aGUgaXRlcmF0b3IgaW5kZXgKKyAgICAgKiAtIHJlcXVlc3RpbmcgdGhlIG9yZGVyIHByb3BlcnRpZXMocHJpbWFyeSwgc2Vjb25kYXJ5IG9yIHRlcnRpYXJ5KQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RFbGVtSXRlcigpIHsKKyAgICAgICAgLy8gbG9nbG4oInRlc3Rpbmcgc29ydGtleSBiZWdpbnMuLi4iKTsKKyAgICAgICAgQ29sbGF0b3IgY29sID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJEZWZhdWx0IGNvbGxhdGlvbiBjcmVhdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXN0U3RyaW5nMSA9ICJYRklMRSBXaGF0IHN1YnNldCBvZiBhbGwgcG9zc2libGUgdGVzdCBjYXNlcyBoYXMgdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkgb2YgZGV0ZWN0aW5nIHRoZSBtb3N0IGVycm9ycz8iOworICAgICAgICBTdHJpbmcgdGVzdFN0cmluZzIgPSAiWGZfaWxlIFdoYXQgc3Vic2V0IG9mIGFsbCBwb3NzaWJsZSB0ZXN0IGNhc2VzIGhhcyB0aGUgbG93ZXN0IHByb2JhYmlsaXR5IG9mIGRldGVjdGluZyB0aGUgbGVhc3QgZXJyb3JzPyI7CisgICAgICAgIC8vIGxvZ2xuKCJDb25zdHJ1Y3RvcnMgYW5kIGNvbXBhcmlzb24gdGVzdGluZy4uLi4iKTsKKyAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXJhdG9yMSA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpY29sKS5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IodGVzdFN0cmluZzEpOworICAgICAgICAKKyAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcml0ZXI9bmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRlc3RTdHJpbmcxKTsKKyAgICAgICAgLy8gY29weSBjdG9yCisgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyYXRvcjIgPSAoKFJ1bGVCYXNlZENvbGxhdG9yKWNvbCkuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKGNoYXJpdGVyKTsKKyAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXJhdG9yMyA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpY29sKS5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IodGVzdFN0cmluZzIpOworICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgb2Zmc2V0ID0gaXRlcmF0b3IxLmdldE9mZnNldCgpOworICAgICAgICBpZiAob2Zmc2V0ICE9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBpbiBnZXRPZmZzZXQgZm9yIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpdGVyYXRvcjEuc2V0T2Zmc2V0KDYpOworICAgICAgICBpdGVyYXRvcjEuc2V0T2Zmc2V0KDApOworICAgICAgICBpbnQgb3JkZXIxLCBvcmRlcjIsIG9yZGVyMzsKKyAgICAgICAgCisgICAgICAgIG9yZGVyMSA9IGl0ZXJhdG9yMS5uZXh0KCk7CisgICAgICAgIGRvQXNzZXJ0KCEoaXRlcmF0b3IxLmVxdWFscyhpdGVyYXRvcjIpKSwgIlRoZSBmaXJzdCBpdGVyYXRvciBhZHZhbmNlIGZhaWxlZCIpOworICAgICAgICBvcmRlcjIgPSBpdGVyYXRvcjIubmV4dCgpOworICAgICAgICAKKyAgICAgICAgZG9Bc3NlcnQoKGl0ZXJhdG9yMS5lcXVhbHMoaXRlcmF0b3IyKSksICJUaGUgc2Vjb25kIGl0ZXJhdG9yIGFkdmFuY2UgZmFpbGVkIik7IAorICAgICAgICBkb0Fzc2VydCgob3JkZXIxID09IG9yZGVyMiksICJUaGUgb3JkZXIgcmVzdWx0IHNob3VsZCBiZSB0aGUgc2FtZSIpOworICAgICAgICBvcmRlcjMgPSBpdGVyYXRvcjMubmV4dCgpOworICAgICAgICAKKyAgICAgICAgZG9Bc3NlcnQoKENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5wcmltYXJ5T3JkZXIob3JkZXIxKSA9PSAKKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5wcmltYXJ5T3JkZXIob3JkZXIzKSksICJUaGUgcHJpbWFyeSBvcmRlcnMgc2hvdWxkIGJlIHRoZSBzYW1lIik7CisgICAgICAgIGRvQXNzZXJ0KChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Iuc2Vjb25kYXJ5T3JkZXIob3JkZXIxKSA9PSAKKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5zZWNvbmRhcnlPcmRlcihvcmRlcjMpKSwgIlRoZSBzZWNvbmRhcnkgb3JkZXJzIHNob3VsZCBiZSB0aGUgc2FtZSIpOworICAgICAgICBkb0Fzc2VydCgoQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnRlcnRpYXJ5T3JkZXIob3JkZXIxKSA9PSAKKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci50ZXJ0aWFyeU9yZGVyKG9yZGVyMykpLCAiVGhlIHRlcnRpYXJ5IG9yZGVycyBzaG91bGQgYmUgdGhlIHNhbWUiKTsKKyAgICAKKyAgICAgICAgb3JkZXIxID0gaXRlcmF0b3IxLm5leHQoKTsgCisgICAgICAgIG9yZGVyMyA9IGl0ZXJhdG9yMy5uZXh0KCk7CisgICAgICAgIAorICAgICAgICBkb0Fzc2VydCgoQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvcmRlcjEpID09IAorICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvcmRlcjMpKSwgIlRoZSBwcmltYXJ5IG9yZGVycyBzaG91bGQgYmUgaWRlbnRpY2FsIik7CisgICAgICAgIGRvQXNzZXJ0KChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IudGVydGlhcnlPcmRlcihvcmRlcjEpICE9IAorICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnRlcnRpYXJ5T3JkZXIob3JkZXIzKSksICJUaGUgdGVydGlhcnkgb3JkZXJzIHNob3VsZCBiZSBkaWZmZXJlbnQiKTsKKyAgICAKKyAgICAgICAgb3JkZXIxID0gaXRlcmF0b3IxLm5leHQoKTsgCisgICAgICAgIG9yZGVyMyA9IGl0ZXJhdG9yMy5uZXh0KCk7CisgICAgICAgIC8vIGludmFsaWQgdGVzdCB3cm9uZyBpbiBVQ0EKKyAgICAgICAgLy8gZG9Bc3NlcnQoKENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5zZWNvbmRhcnlPcmRlcihvcmRlcjEpICE9IAorICAgICAgICAvLyAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Iuc2Vjb25kYXJ5T3JkZXIob3JkZXIzKSksICJUaGUgc2Vjb25kYXJ5IG9yZGVycyBzaG91bGQgbm90IGJlIHRoZSBzYW1lIik7CisgICAgICAgICAgICAKKyAgICAgICAgZG9Bc3NlcnQoKG9yZGVyMSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSwgIlVuZXhwZWN0ZWQgZW5kIG9mIGl0ZXJhdG9yIHJlYWNoZWQiKTsKKyAgICAKKyAgICAgICAgaXRlcmF0b3IxLnJlc2V0KCk7IAorICAgICAgICBpdGVyYXRvcjIucmVzZXQoKTsgCisgICAgICAgIGl0ZXJhdG9yMy5yZXNldCgpOworICAgICAgICBvcmRlcjEgPSBpdGVyYXRvcjEubmV4dCgpOworICAgICAgICAKKyAgICAgICAgZG9Bc3NlcnQoIShpdGVyYXRvcjEuZXF1YWxzKGl0ZXJhdG9yMikpLCAiVGhlIGZpcnN0IGl0ZXJhdG9yIGFkdmFuY2UgZmFpbGVkIik7CisgICAgICAgIAorICAgICAgICBvcmRlcjIgPSBpdGVyYXRvcjIubmV4dCgpOworICAgICAgICAKKyAgICAgICAgZG9Bc3NlcnQoKGl0ZXJhdG9yMS5lcXVhbHMoaXRlcmF0b3IyKSksICJUaGUgc2Vjb25kIGl0ZXJhdG9yIGFkdmFuY2UgZmFpbGVkIik7CisgICAgICAgIGRvQXNzZXJ0KChvcmRlcjEgPT0gb3JkZXIyKSwgIlRoZSBvcmRlciByZXN1bHQgc2hvdWxkIGJlIHRoZSBzYW1lIik7CisgICAgCisgICAgICAgIG9yZGVyMyA9IGl0ZXJhdG9yMy5uZXh0KCk7CisgICAgICAgIAorICAgICAgICBkb0Fzc2VydCgoQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvcmRlcjEpID09IAorICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvcmRlcjMpKSwgIlRoZSBwcmltYXJ5IG9yZGVycyBzaG91bGQgYmUgdGhlIHNhbWUiKTsKKyAgICAgICAgZG9Bc3NlcnQoKENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5zZWNvbmRhcnlPcmRlcihvcmRlcjEpID09IAorICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnNlY29uZGFyeU9yZGVyKG9yZGVyMykpLCAiVGhlIHNlY29uZGFyeSBvcmRlcnMgc2hvdWxkIGJlIHRoZSBzYW1lIik7CisgICAgICAgIGRvQXNzZXJ0KChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IudGVydGlhcnlPcmRlcihvcmRlcjEpID09IAorICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnRlcnRpYXJ5T3JkZXIob3JkZXIzKSksICJUaGUgdGVydGlhcnkgb3JkZXJzIHNob3VsZCBiZSB0aGUgc2FtZSIpOworICAgIAorICAgICAgICBvcmRlcjEgPSBpdGVyYXRvcjEubmV4dCgpOyAKKyAgICAgICAgb3JkZXIyID0gaXRlcmF0b3IyLm5leHQoKTsgCisgICAgICAgIG9yZGVyMyA9IGl0ZXJhdG9yMy5uZXh0KCk7CisgICAgICAgIAorICAgICAgICBkb0Fzc2VydCgoQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvcmRlcjEpID09IAorICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvcmRlcjMpKSwgIlRoZSBwcmltYXJ5IG9yZGVycyBzaG91bGQgYmUgaWRlbnRpY2FsIik7CisgICAgICAgIGRvQXNzZXJ0KChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IudGVydGlhcnlPcmRlcihvcmRlcjEpICE9IAorICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnRlcnRpYXJ5T3JkZXIob3JkZXIzKSksICJUaGUgdGVydGlhcnkgb3JkZXJzIHNob3VsZCBiZSBkaWZmZXJlbnQiKTsKKyAgICAKKyAgICAgICAgb3JkZXIxID0gaXRlcmF0b3IxLm5leHQoKTsgCisgICAgICAgIG9yZGVyMyA9IGl0ZXJhdG9yMy5uZXh0KCk7CisgICAgICAgIAorICAgICAgICAvLyBvYnNvbGV0ZSBpbnZhbGlkIHRlc3QsIHJlbW92ZWQKKyAgICAgICAgLy8gZG9Bc3NlcnQoKENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5zZWNvbmRhcnlPcmRlcihvcmRlcjEpICE9IAorICAgICAgICAvLyAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Iuc2Vjb25kYXJ5T3JkZXIob3JkZXIzKSksICJUaGUgc2Vjb25kYXJ5IG9yZGVycyBzaG91bGQgbm90IGJlIHRoZSBzYW1lIik7CisgICAgICAgIGRvQXNzZXJ0KChvcmRlcjEgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiksICJVbmV4cGVjdGVkIGVuZCBvZiBpdGVyYXRvciByZWFjaGVkIik7CisgICAgICAgIGRvQXNzZXJ0KCEoaXRlcmF0b3IyLmVxdWFscyhpdGVyYXRvcjMpKSwgIlRoZSBpdGVyYXRvcnMgc2hvdWxkIGJlIGRpZmZlcmVudCIpOworICAgICAgICBsb2dsbigidGVzdGluZyBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgZW5kcy4uLiIpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGlzIHRlc3RzIHRoZSBoYXNoQ29kZSBtZXRob2Qgb2YgYSBjb2xsYXRvciBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEhhc2hDb2RlKCkgeworICAgICAgICBsb2dsbigiaGFzaENvZGUgdGVzdHMgYmVnaW4uIik7CisgICAgICAgIENvbGxhdG9yIGNvbDEgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sMSA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJEZWZhdWx0IGNvbGxhdGlvbiBjcmVhdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgQ29sbGF0b3IgY29sMiA9IG51bGw7CisgICAgICAgIExvY2FsZSBkayA9IG5ldyBMb2NhbGUoImRhIiwgIkRLIiwgIiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sMiA9IENvbGxhdG9yLmdldEluc3RhbmNlKGRrKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJEYW5pc2ggY29sbGF0aW9uIGNyZWF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBDb2xsYXRvciBjb2wzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbDMgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRU5HTElTSCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiMm5kIGRlZmF1bHQgY29sbGF0aW9uIGNyZWF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBsb2dsbigiQ29sbGF0b3IuaGFzaENvZGUoKSB0ZXN0aW5nIC4uLiIpOworICAgICAgICAKKyAgICAgICAgZG9Bc3NlcnQoY29sMS5oYXNoQ29kZSgpICE9IGNvbDIuaGFzaENvZGUoKSwgIkhhc2ggdGVzdDEgcmVzdWx0IGluY29ycmVjdCIgKTsgICAgICAgICAgICAgICAgIAorICAgICAgICBkb0Fzc2VydCghKGNvbDEuaGFzaENvZGUoKSA9PSBjb2wyLmhhc2hDb2RlKCkpLCAiSGFzaCB0ZXN0MiByZXN1bHQgaW5jb3JyZWN0IiApOyAgICAgICAgICAgICAgCisgICAgICAgIGRvQXNzZXJ0KGNvbDEuaGFzaENvZGUoKSA9PSBjb2wzLmhhc2hDb2RlKCksICJIYXNoIHJlc3VsdCBub3QgZXF1YWwiICk7ICAgICAgICAgICAgICAgCisgICAgCisgICAgICAgIGxvZ2xuKCJoYXNoQ29kZSB0ZXN0cyBlbmQuIik7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgdGVzdDEgPSAiQWJjZGEiOworICAgICAgICBTdHJpbmcgdGVzdDIgPSAiYWJjZGEiOworICAgICAgICAKKyAgICAgICAgQ29sbGF0aW9uS2V5IHNvcnRrMSwgc29ydGsyLCBzb3J0azM7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBzb3J0azEgPSBjb2wzLmdldENvbGxhdGlvbktleSh0ZXN0MSk7CisgICAgICAgIHNvcnRrMiA9IGNvbDMuZ2V0Q29sbGF0aW9uS2V5KHRlc3QyKTsgCisgICAgICAgIHNvcnRrMyA9IGNvbDMuZ2V0Q29sbGF0aW9uS2V5KHRlc3QyKTsgCisgICAgICAgIAorICAgICAgICBkb0Fzc2VydChzb3J0azEuaGFzaENvZGUoKSAhPSBzb3J0azIuaGFzaENvZGUoKSwgIkhhc2ggdGVzdDEgcmVzdWx0IGluY29ycmVjdCIpOyAgICAgICAgICAgICAgIAorICAgICAgICBkb0Fzc2VydChzb3J0azIuaGFzaENvZGUoKSA9PSBzb3J0azMuaGFzaENvZGUoKSwgIkhhc2ggcmVzdWx0IG5vdCBlcXVhbCIgKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGhpcyB0ZXN0cyB0aGUgcHJvcGVydGllcyBvZiBhIGNvbGxhdG9yIG9iamVjdC4KKyAgICAgKiAtIGNvbnN0cnVjdG9yCisgICAgICogLSBmYWN0b3J5IG1ldGhvZCBnZXRJbnN0YW5jZQorICAgICAqIC0gY29tcGFyZSBhbmQgZ2V0Q29sbGF0aW9uS2V5CisgICAgICogLSBnZXQvc2V0IGRlY29tcG9zaXRpb24gbW9kZSBhbmQgY29tcGFyaXNvbiBsZXZlbAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQcm9wZXJ0eSgpIHsKKyAgICAgICAgQ29sbGF0b3IgY29sID0gbnVsbDsKKyAgICAgICAgLyogCisgICAgICAgICAgQWxsIHRoZSBjb2xsYXRpb25zIGhhdmUgdGhlIHNhbWUgdmVyc2lvbiBpbiBhbiBJQ1UKKyAgICAgICAgICB2ZXJzaW9uLgorICAgICAgICAgIElDVSAyLjAgY3VyclZlcnNpb25BcnJheSA9IHsweDE4LCAweEMwLCAweDAyLCAweDAyfTsKKyAgICAgICAgICBJQ1UgMi4xIGN1cnJWZXJzaW9uQXJyYXkgPSB7MHgxOSwgMHgwMCwgMHgwMywgMHgwM307CisgICAgICAgICovICAgIAorICAgICAgICBsb2dsbigiVGhlIHByb3BlcnR5IHRlc3RzIGJlZ2luIDogIik7CisgICAgICAgIGxvZ2xuKCJUZXN0IGN0b3JzIDogIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2wgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRU5HTElTSCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRGVmYXVsdCBDb2xsYXRvciBjcmVhdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgZG9Bc3NlcnQoKGNvbC5jb21wYXJlKCJhYiIsICJhYmMiKSA8IDApLCAiYWIgPCBhYmMgY29tcGFyaXNvbiBmYWlsZWQiKTsKKyAgICAgICAgZG9Bc3NlcnQoKGNvbC5jb21wYXJlKCJhYiIsICJBQiIpIDwgMCksICJhYiA8IEFCIGNvbXBhcmlzb24gZmFpbGVkIik7CisgICAgICAgIGRvQXNzZXJ0KChjb2wuY29tcGFyZSgiYmxhY2tiaXJkIiwgImJsYWNrLWJpcmQiKSA+IDApLCAiYmxhY2stYmlyZCA+IGJsYWNrYmlyZCBjb21wYXJpc29uIGZhaWxlZCIpOworICAgICAgICBkb0Fzc2VydCgoY29sLmNvbXBhcmUoImJsYWNrIGJpcmQiLCAiYmxhY2stYmlyZCIpIDwgMCksICJibGFjayBiaXJkID4gYmxhY2stYmlyZCBjb21wYXJpc29uIGZhaWxlZCIpOworICAgICAgICBkb0Fzc2VydCgoY29sLmNvbXBhcmUoIkhlbGxvIiwgImhlbGxvIikgPiAwKSwgIkhlbGxvID4gaGVsbG8gY29tcGFyaXNvbiBmYWlsZWQiKTsKKyAgICAKKyAgICAgICAgbG9nbG4oIlRlc3QgY3RvcnMgZW5kcy4iKTsKKyAgICAgICAgCisgICAgICAgIGxvZ2xuKCJ0ZXN0aW5nIENvbGxhdG9yLmdldFN0cmVuZ3RoKCkgbWV0aG9kIC4uLiIpOworICAgICAgICBkb0Fzc2VydCgoY29sLmdldFN0cmVuZ3RoKCkgPT0gQ29sbGF0b3IuVEVSVElBUlkpLCAiY29sbGF0aW9uIG9iamVjdCBoYXMgdGhlIHdyb25nIHN0cmVuZ3RoIik7CisgICAgICAgIGRvQXNzZXJ0KChjb2wuZ2V0U3RyZW5ndGgoKSAhPSBDb2xsYXRvci5QUklNQVJZKSwgImNvbGxhdGlvbiBvYmplY3QncyBzdHJlbmd0aCBpcyBwcmltYXJ5IGRpZmZlcmVuY2UiKTsKKyAgICAgICAgICAgIAorICAgICAgICBsb2dsbigidGVzdGluZyBDb2xsYXRvci5zZXRTdHJlbmd0aCgpIG1ldGhvZCAuLi4iKTsKKyAgICAgICAgY29sLnNldFN0cmVuZ3RoKENvbGxhdG9yLlNFQ09OREFSWSk7CisgICAgICAgIGRvQXNzZXJ0KChjb2wuZ2V0U3RyZW5ndGgoKSAhPSBDb2xsYXRvci5URVJUSUFSWSksICJjb2xsYXRpb24gb2JqZWN0J3Mgc3RyZW5ndGggaXMgc2Vjb25kYXJ5IGRpZmZlcmVuY2UiKTsKKyAgICAgICAgZG9Bc3NlcnQoKGNvbC5nZXRTdHJlbmd0aCgpICE9IENvbGxhdG9yLlBSSU1BUlkpLCAiY29sbGF0aW9uIG9iamVjdCdzIHN0cmVuZ3RoIGlzIHByaW1hcnkgZGlmZmVyZW5jZSIpOworICAgICAgICBkb0Fzc2VydCgoY29sLmdldFN0cmVuZ3RoKCkgPT0gQ29sbGF0b3IuU0VDT05EQVJZKSwgImNvbGxhdGlvbiBvYmplY3QgaGFzIHRoZSB3cm9uZyBzdHJlbmd0aCIpOworICAgIAorICAgICAgICBsb2dsbigidGVzdGluZyBDb2xsYXRvci5zZXREZWNvbXBvc2l0aW9uKCkgbWV0aG9kIC4uLiIpOworICAgICAgICBjb2wuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5OT19ERUNPTVBPU0lUSU9OKTsKKyAgICAgICAgZG9Bc3NlcnQoKGNvbC5nZXREZWNvbXBvc2l0aW9uKCkgIT0gQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pLCAiRGVjb21wb3NpdGlvbiBtb2RlICE9IENvbGxhdG9yLkNBTk9OSUNBTF9ERUNPTVBPU0lUSU9OIik7CisgICAgICAgIGRvQXNzZXJ0KChjb2wuZ2V0RGVjb21wb3NpdGlvbigpID09IENvbGxhdG9yLk5PX0RFQ09NUE9TSVRJT04pLCAiRGVjb21wb3NpdGlvbiBtb2RlID0gQ29sbGF0b3IuTk9fREVDT01QT1NJVElPTiIpOworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIHJjb2wgPSAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgiZGEiLCAiREsiKSk7CisgICAgICAgIGRvQXNzZXJ0KHJjb2wuZ2V0UnVsZXMoKS5sZW5ndGgoKSAhPSAwLCAiZGFfREsgcnVsZXMgZG9lcyBub3QgaGF2ZSBsZW5ndGggMCIpOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5GUkVOQ0gpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkNyZWF0aW5nIEZyZW5jaCBjb2xsYXRpb24gZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIGNvbC5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgbG9nbG4oInRlc3RpbmcgQ29sbGF0b3IuZ2V0U3RyZW5ndGgoKSBtZXRob2QgYWdhaW4gLi4uIik7CisgICAgICAgIGRvQXNzZXJ0KChjb2wuZ2V0U3RyZW5ndGgoKSAhPSBDb2xsYXRvci5URVJUSUFSWSksICJjb2xsYXRpb24gb2JqZWN0IGhhcyB0aGUgd3Jvbmcgc3RyZW5ndGgiKTsKKyAgICAgICAgZG9Bc3NlcnQoKGNvbC5nZXRTdHJlbmd0aCgpID09IENvbGxhdG9yLlBSSU1BUlkpLCAiY29sbGF0aW9uIG9iamVjdCdzIHN0cmVuZ3RoIGlzIG5vdCBwcmltYXJ5IGRpZmZlcmVuY2UiKTsKKyAgICAgICAgICAgIAorICAgICAgICBsb2dsbigidGVzdGluZyBGcmVuY2ggQ29sbGF0b3Iuc2V0U3RyZW5ndGgoKSBtZXRob2QgLi4uIik7CisgICAgICAgIGNvbC5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIGRvQXNzZXJ0KChjb2wuZ2V0U3RyZW5ndGgoKSA9PSBDb2xsYXRvci5URVJUSUFSWSksICJjb2xsYXRpb24gb2JqZWN0J3Mgc3RyZW5ndGggaXMgbm90IHRlcnRpYXJ5IGRpZmZlcmVuY2UiKTsKKyAgICAgICAgZG9Bc3NlcnQoKGNvbC5nZXRTdHJlbmd0aCgpICE9IENvbGxhdG9yLlBSSU1BUlkpLCAiY29sbGF0aW9uIG9iamVjdCdzIHN0cmVuZ3RoIGlzIHByaW1hcnkgZGlmZmVyZW5jZSIpOworICAgICAgICBkb0Fzc2VydCgoY29sLmdldFN0cmVuZ3RoKCkgIT0gQ29sbGF0b3IuU0VDT05EQVJZKSwgImNvbGxhdGlvbiBvYmplY3QncyBzdHJlbmd0aCBpcyBzZWNvbmRhcnkgZGlmZmVyZW5jZSIpOworICAgIAorICAgICAgICBsb2dsbigiQ3JlYXRlIGp1bmsgY29sbGF0aW9uOiAiKTsKKyAgICAgICAgTG9jYWxlIGFiY2QgPSBuZXcgTG9jYWxlKCJhYiIsICJDRCIsICIiKTsKKyAgICAgICAgCisgICAgICAgIENvbGxhdG9yIGp1bmsgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAganVuayA9IENvbGxhdG9yLmdldEluc3RhbmNlKGFiY2QpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkp1bmsgY29sbGF0aW9uIGNyZWF0aW9uIGZhaWxlZCwgc2hvdWxkIGF0IGxlYXN0IHJldHVybiBkZWZhdWx0LiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2wgPSBDb2xsYXRvci5nZXRJbnN0YW5jZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkNyZWF0aW5nIGRlZmF1bHQgY29sbGF0b3IgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIFN0cmluZyBjb2xydWxlcyA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpY29sKS5nZXRSdWxlcygpOworICAgICAgICBTdHJpbmcganVua3J1bGVzID0gKChSdWxlQmFzZWRDb2xsYXRvcilqdW5rKS5nZXRSdWxlcygpOworICAgICAgICBkb0Fzc2VydChjb2xydWxlcyA9PSBqdW5rcnVsZXMgfHwgY29scnVsZXMuZXF1YWxzKGp1bmtydWxlcyksIAorICAgICAgICAgICAgICAgICAgICJUaGUgZGVmYXVsdCBjb2xsYXRpb24gc2hvdWxkIGJlIHJldHVybmVkLiIpOworICAgICAgICBDb2xsYXRvciBmckNvbCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmckNvbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5GUkFOQ0UpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkNyZWF0aW5nIEZyZW5jaCBjb2xsYXRvciBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgZG9Bc3NlcnQoIShmckNvbC5lcXVhbHMoanVuaykpLCAiVGhlIGp1bmsgaXMgdGhlIHNhbWUgYXMgdGhlIEZyZW5jaCBjb2xsYXRvci4iKTsKKyAgICAgICAgbG9nbG4oIkNvbGxhdG9yIHByb3BlcnR5IHRlc3QgZW5kZWQuIik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogVGhpcyB0ZXN0cyB0aGUgUnVsZUJhc2VkQ29sbGF0b3IKKyAgICAqIC0gY29uc3RydWN0b3IvZGVzdHJ1Y3RvcgorICAgICogLSBnZXRSdWxlcworICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFJ1bGVCYXNlZENvbGwoKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGNvbDEgPSBudWxsLCBjb2wyID0gbnVsbCwgY29sMyA9IG51bGwsIGNvbDQgPSBudWxsOworICAgIAorICAgICAgICBTdHJpbmcgcnVsZXNldDEgPSAiJjkgPCBhLCBBIDwgYiwgQiA8IGMsIEM7IGNoLCBjSCwgQ2gsIENIIDwgZCwgRCwgZSwgRSI7IAorICAgICAgICBTdHJpbmcgcnVsZXNldDIgPSAiJjkgPCBhLCBBIDwgYiwgQiA8IGMsIEMgPCBkLCBELCBlLCBFIjsKKyAgICAgICAgU3RyaW5nIHJ1bGVzZXQzID0gIiYiOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbDEgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXNldDEpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIlJ1bGVCYXNlZCBDb2xsYXRvciBjcmVhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sMiA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlc2V0Mik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiUnVsZUJhc2VkIENvbGxhdG9yIGNyZWF0aW9uIGZhaWxlZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBlbXB0eSBydWxlcyBmYWlsCisgICAgICAgICAgICBjb2wzID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHJ1bGVzZXQzKTsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsdXJlOiBFbXB0eSBydWxlcyBmb3IgdGhlIGNvbGxhdG9yIHNob3VsZCBmYWlsIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvY2FsZSBsb2NhbGUgPSBuZXcgTG9jYWxlKCJhYSIsICJBQSIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sMyA9IChSdWxlQmFzZWRDb2xsYXRvcilDb2xsYXRvci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhbGxiYWNrIENvbGxhdG9yIGNyZWF0aW9uIGZhaWxlZC46ICVzXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sMyA9IChSdWxlQmFzZWRDb2xsYXRvcilDb2xsYXRvci5nZXRJbnN0YW5jZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkRlZmF1bHQgQ29sbGF0b3IgY3JlYXRpb24gZmFpbGVkLjogJXNcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIFN0cmluZyBydWxlMSA9IGNvbDEuZ2V0UnVsZXMoKTsgCisgICAgICAgIFN0cmluZyBydWxlMiA9IGNvbDIuZ2V0UnVsZXMoKTsKKyAgICAgICAgU3RyaW5nIHJ1bGUzID0gY29sMy5nZXRSdWxlcygpOworICAgIAorICAgICAgICBkb0Fzc2VydCghcnVsZTEuZXF1YWxzKHJ1bGUyKSwgIkRlZmF1bHQgY29sbGF0b3IgZ2V0UnVsZXMgZmFpbGVkIik7CisgICAgICAgIGRvQXNzZXJ0KCFydWxlMi5lcXVhbHMocnVsZTMpLCAiRGVmYXVsdCBjb2xsYXRvciBnZXRSdWxlcyBmYWlsZWQiKTsKKyAgICAgICAgZG9Bc3NlcnQoIXJ1bGUxLmVxdWFscyhydWxlMyksICJEZWZhdWx0IGNvbGxhdG9yIGdldFJ1bGVzIGZhaWxlZCIpOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbDQgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZTIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIlJ1bGVCYXNlZCBDb2xsYXRvciBjcmVhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBTdHJpbmcgcnVsZTQgPSBjb2w0LmdldFJ1bGVzKCk7CisgICAgICAgIGRvQXNzZXJ0KHJ1bGUyLmVxdWFscyhydWxlNCksICJEZWZhdWx0IGNvbGxhdG9yIGdldFJ1bGVzIGZhaWxlZCIpOworICAgICAgICAvLyB0ZXN0cyB0aGF0IG1vZGlmaWVyICEgaXMgYWx3YXlzIGlnbm9yZWQKKyAgICAgICAgU3RyaW5nIGV4Y2xhbWF0aW9ucnVsZXMgPSAiISZhPGIiOworICAgICAgICAvLyBqYXZhIGRvZXMgbm90IGFsbG93ICEgdG8gYmUgdGhlIHN0YXJ0IG9mIHRoZSBydWxlCisgICAgICAgIFN0cmluZyB0aGFpc3RyID0gIlx1MGU0MFx1MGUwMVx1MGUyZCI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2w1ID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKGV4Y2xhbWF0aW9ucnVsZXMpOworICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgZW5jb2wgPSAoUnVsZUJhc2VkQ29sbGF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkVOR0xJU0gpOworICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGNvbDVpdGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvbDUuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHRoYWlzdHIpOworICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGVuY29saXRlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBlbmNvbC5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhaXN0cik7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIC8vIHRlc3Rpbmcgd2l0aCBlbiBzaW5jZSB0aGFpIGhhcyBpdHMgb3duIHRhaWxvcmluZworICAgICAgICAgICAgICAgIGludCBjZSA9IGNvbDVpdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgY2UyID0gZW5jb2xpdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2UyICE9IGNlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCIhIG1vZGlmaWVyIHRlc3QgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJSdWxlQmFzZWQgQ29sbGF0b3IgY3JlYXRpb24gZmFpbGVkIGZvciAhIG1vZGlmaWVyLlxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBUaGlzIHRlc3RzIHRoZSBSdWxlQmFzZWRDb2xsYXRvcgorICAgICogLSBnZXRSdWxlcworICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFJ1bGVzKCkgeworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbCA9IChSdWxlQmFzZWRDb2xsYXRvcilDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRU5HTElTSCk7IAorICAgICAgICAgICAgLy8gbG9nbG4oIlBBU1M6IFJ1bGVCYXNlZCBDb2xsYXRvciBjcmVhdGlvbiBwYXNzZWRcbiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVuZ2xpc2ggQ29sbGF0b3IgY3JlYXRpb24gZmFpbGVkLlxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgU3RyaW5nIHJ1bGVzID0gY29sbC5nZXRSdWxlcygpOworICAgICAgICBpZiAocnVsZXMgIT0gbnVsbCAmJiBydWxlcy5sZW5ndGgoKSAhPSAwKSB7CisgICAgICAgICAgICBlcnJsbigiRW5nbGlzaCB0YWlsb3JlZCBydWxlcyBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2FmZUNsb25lKCkgeworICAgICAgICBTdHJpbmcgdGVzdDEgPSAiYWJDZGEiOworICAgICAgICBTdHJpbmcgdGVzdDIgPSAiYWJjZGEiOworICAgICAgICAKKyAgICAgICAgLy8gb25lIGRlZmF1bHQgY29sbGF0b3IgJiB0d28gY29tcGxleCBvbmVzIAorICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBzb21lQ29sbGF0b3JzW10gPSB7CisgICAgICAgICAgICAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkVOR0xJU0gpLAorICAgICAgICAgICAgKFJ1bGVCYXNlZENvbGxhdG9yKUNvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5LT1JFQSksCisgICAgICAgICAgICAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkpBUEFOKQorICAgICAgICB9OworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBzb21lQ2xvbmVkQ29sbGF0b3JzW10gPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3JbM107CisgICAgICAgIAorICAgICAgICAvLyBjaGFuZ2Ugb3JpZyAmIGNsb25lICYgbWFrZSBzdXJlIHRoZXkgYXJlIGluZGVwZW5kZW50IAorICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc29tZUNvbGxhdG9ycy5sZW5ndGg7IGluZGV4ICsrKQorICAgICAgICB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHNvbWVDbG9uZWRDb2xsYXRvcnNbaW5kZXhdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKFJ1bGVCYXNlZENvbGxhdG9yKXNvbWVDb2xsYXRvcnNbaW5kZXhdLmNsb25lKCk7CisgICAgICAgICAgICB9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGNsb25pbmcgY29sbGF0b3IiKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIHNvbWVDbG9uZWRDb2xsYXRvcnNbaW5kZXhdLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIHNvbWVDb2xsYXRvcnNbaW5kZXhdLnNldFN0cmVuZ3RoKENvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICAgICAgc29tZUNsb25lZENvbGxhdG9yc1tpbmRleF0uc2V0Q2FzZUxldmVsKGZhbHNlKTsKKyAgICAgICAgICAgIHNvbWVDb2xsYXRvcnNbaW5kZXhdLnNldENhc2VMZXZlbChmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvQXNzZXJ0KHNvbWVDbG9uZWRDb2xsYXRvcnNbaW5kZXhdLmNvbXBhcmUodGVzdDEsIHRlc3QyKSA+IDAsIAorICAgICAgICAgICAgICAgICAgICAgIlJlc3VsdCBzaG91bGQgYmUgXCJhYkNkYVwiID4+PiBcImFiY2RhXCIgIik7CisgICAgICAgICAgICBkb0Fzc2VydChzb21lQ29sbGF0b3JzW2luZGV4XS5jb21wYXJlKHRlc3QxLCB0ZXN0MikgPT0gMCwgCisgICAgICAgICAgICAgICAgICAgICAiUmVzdWx0IHNob3VsZCBiZSBcImFiQ2RhXCIgPT0gXCJhYmNkYVwiICIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEdldFRhaWxvcmVkU2V0KCkgCisgICAgeworICAgICAgICBsb2dsbigidGVzdGluZyBnZXRUYWlsb3JlZFNldC4uLiIpOworICAgICAgICBTdHJpbmcgcnVsZXNbXSA9IHsKKyAgICAgICAgICAgICImYSA8IFx1MjEyYiIsICAgICAgICAgICAgIAorICAgICAgICAgICAgIiYgUyA8IFx1MDE2MSA8PDwgXHUwMTYwIiwKKyAgICAgICAgfTsKKyAgICAgICAgU3RyaW5nIGRhdGFbXVtdID0geworICAgICAgICAgICAgeyAiXHUyMTJiIiwgIkFcdTAzMGEiLCAiXHUwMGM1IiB9LCAgICAgICAgCisgICAgICAgICAgICB7ICJcdTAxNjEiLCAic1x1MDMwQyIsICJcdTAxNjAiLCAiU1x1MDMwQyIgfSAgICAgICAgICAgIAorICAgICAgICB9OworICAgIAorICAgICAgICBpbnQgaSA9IDAsIGogPSAwOworICAgICAgICAKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sbDsKKyAgICAgICAgVW5pY29kZVNldCBzZXQ7CisgICAgICAgIAorICAgICAgICBmb3IoaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsb2dsbigiSW5zdGFudGlhdGluZyBhIGNvbGxhdG9yIGZyb20gIitydWxlc1tpXSk7CisgICAgICAgICAgICAgICAgY29sbCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlc1tpXSk7CisgICAgICAgICAgICAgICAgc2V0ID0gY29sbC5nZXRUYWlsb3JlZFNldCgpOworICAgICAgICAgICAgICAgIGxvZ2xuKCJHb3Qgc2V0OiAiK3NldC50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICAgICAgICAgIGlmKHNldC5zaXplKCkgIT0gZGF0YVtpXS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIlRhaWxvcmVkIHNldCBzaXplIGRpZmZlcmVudCAoIitzZXQuc2l6ZSgpKyIpIHRoYW4gZXhwZWN0ZWQgKCIrZGF0YVtpXS5sZW5ndGgrIikiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgZGF0YVtpXS5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiQ2hlY2tpbmcgdG8gc2VlIHdoZXRoZXIgIitkYXRhW2ldW2pdKyIgaXMgaW4gc2V0Iik7CisgICAgICAgICAgICAgICAgICAgIGlmKCFzZXQuY29udGFpbnMoZGF0YVtpXVtqXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJUYWlsb3JlZCBzZXQgZG9lc24ndCBjb250YWluICIrZGF0YVtpXVtqXSsiLi4uIEl0IHNob3VsZCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ291bGRuJ3Qgb3BlbiBjb2xsYXRvciB3aXRoIHJ1bGVzICIrIHJ1bGVzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25DdXJyZW5jeVRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25DdXJyZW5jeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzY3ZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkN1cnJlbmN5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IAorICogJERhdGU6IAorICogJFJldmlzaW9uOiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjIuMSA6IENvbGxhdGUvQ29sbGF0aW9uQ3VycmVuY3lUZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9jdXJyY29sbC5jcHAKKyAqKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisgCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKyAKK3B1YmxpYyBjbGFzcyBDb2xsYXRpb25DdXJyZW5jeVRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBDb2xsYXRpb25DdXJyZW5jeVRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RDdXJyZW5jeSgpIHsKKyAgICAgICAgLy8gQWxsIHRoZSBjdXJyZW5jeSBzeW1ib2xzLCBpbiBjb2xsYXRpb24gb3JkZXIKKyAgICAgICAgY2hhcltdW10gY3VycmVuY3kgPSB7CisgICAgICAgICAgICB7IDB4MDBBNCB9LCAvKjAwQTQ7IEw7IFsxNCAzNiwgMDMsIDAzXSAgICAjIFswODJCLjAwMjAuMDAwMl0gIyBDVVJSRU5DWSBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgwMEEyIH0sIC8qMDBBMjsgTDsgWzE0IDM4LCAwMywgMDNdICAgICMgWzA4MkMuMDAyMC4wMDAyXSAjIENFTlQgU0lHTiovCisgICAgICAgICAgICB7IDB4RkZFMCB9LCAvKkZGRTA7IEw7IFsxNCAzOCwgMDMsIDA1XSAgICAjIFswODJDLjAwMjAuMDAwM10gIyBGVUxMV0lEVEggQ0VOVCBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgwMDI0IH0sIC8qMDAyNDsgTDsgWzE0IDNBLCAwMywgMDNdICAgICMgWzA4MkQuMDAyMC4wMDAyXSAjIERPTExBUiBTSUdOKi8KKyAgICAgICAgICAgIHsgMHhGRjA0IH0sIC8qRkYwNDsgTDsgWzE0IDNBLCAwMywgMDVdICAgICMgWzA4MkQuMDAyMC4wMDAzXSAjIEZVTExXSURUSCBET0xMQVIgU0lHTiovCisgICAgICAgICAgICB7IDB4RkU2OSB9LCAvKkZFNjk7IEw7IFsxNCAzQSwgMDMsIDFEXSAgICAjIFswODJELjAwMjAuMDAwRl0gIyBTTUFMTCBET0xMQVIgU0lHTiovCisgICAgICAgICAgICB7IDB4MDBBMyB9LCAvKjAwQTM7IEw7IFsxNCAzQywgMDMsIDAzXSAgICAjIFswODJFLjAwMjAuMDAwMl0gIyBQT1VORCBTSUdOKi8KKyAgICAgICAgICAgIHsgMHhGRkUxIH0sIC8qRkZFMTsgTDsgWzE0IDNDLCAwMywgMDVdICAgICMgWzA4MkUuMDAyMC4wMDAzXSAjIEZVTExXSURUSCBQT1VORCBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgwMEE1IH0sIC8qMDBBNTsgTDsgWzE0IDNFLCAwMywgMDNdICAgICMgWzA4MkYuMDAyMC4wMDAyXSAjIFlFTiBTSUdOKi8KKyAgICAgICAgICAgIHsgMHhGRkU1IH0sIC8qRkZFNTsgTDsgWzE0IDNFLCAwMywgMDVdICAgICMgWzA4MkYuMDAyMC4wMDAzXSAjIEZVTExXSURUSCBZRU4gU0lHTiovCisgICAgICAgICAgICB7IDB4MDlGMiB9LCAvKjA5RjI7IEw7IFsxNCA0MCwgMDMsIDAzXSAgICAjIFswODMwLjAwMjAuMDAwMl0gIyBCRU5HQUxJIFJVUEVFIE1BUksqLworICAgICAgICAgICAgeyAweDA5RjMgfSwgLyowOUYzOyBMOyBbMTQgNDIsIDAzLCAwM10gICAgIyBbMDgzMS4wMDIwLjAwMDJdICMgQkVOR0FMSSBSVVBFRSBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgwRTNGIH0sIC8qMEUzRjsgTDsgWzE0IDQ0LCAwMywgMDNdICAgICMgWzA4MzIuMDAyMC4wMDAyXSAjIFRIQUkgQ1VSUkVOQ1kgU1lNQk9MIEJBSFQqLworICAgICAgICAgICAgeyAweDE3REIgfSwgLyoxN0RCOyBMOyBbMTQgNDYsIDAzLCAwM10gICAgIyBbMDgzMy4wMDIwLjAwMDJdICMgS0hNRVIgQ1VSUkVOQ1kgU1lNQk9MIFJJRUwqLworICAgICAgICAgICAgeyAweDIwQTAgfSwgLyoyMEEwOyBMOyBbMTQgNDgsIDAzLCAwM10gICAgIyBbMDgzNC4wMDIwLjAwMDJdICMgRVVSTy1DVVJSRU5DWSBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgyMEExIH0sIC8qMjBBMTsgTDsgWzE0IDRBLCAwMywgMDNdICAgICMgWzA4MzUuMDAyMC4wMDAyXSAjIENPTE9OIFNJR04qLworICAgICAgICAgICAgeyAweDIwQTIgfSwgLyoyMEEyOyBMOyBbMTQgNEMsIDAzLCAwM10gICAgIyBbMDgzNi4wMDIwLjAwMDJdICMgQ1JVWkVJUk8gU0lHTiovCisgICAgICAgICAgICB7IDB4MjBBMyB9LCAvKjIwQTM7IEw7IFsxNCA0RSwgMDMsIDAzXSAgICAjIFswODM3LjAwMjAuMDAwMl0gIyBGUkVOQ0ggRlJBTkMgU0lHTiovCisgICAgICAgICAgICB7IDB4MjBBNCB9LCAvKjIwQTQ7IEw7IFsxNCA1MCwgMDMsIDAzXSAgICAjIFswODM4LjAwMjAuMDAwMl0gIyBMSVJBIFNJR04qLworICAgICAgICAgICAgeyAweDIwQTUgfSwgLyoyMEE1OyBMOyBbMTQgNTIsIDAzLCAwM10gICAgIyBbMDgzOS4wMDIwLjAwMDJdICMgTUlMTCBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgyMEE2IH0sIC8qMjBBNjsgTDsgWzE0IDU0LCAwMywgMDNdICAgICMgWzA4M0EuMDAyMC4wMDAyXSAjIE5BSVJBIFNJR04qLworICAgICAgICAgICAgeyAweDIwQTcgfSwgLyoyMEE3OyBMOyBbMTQgNTYsIDAzLCAwM10gICAgIyBbMDgzQi4wMDIwLjAwMDJdICMgUEVTRVRBIFNJR04qLworICAgICAgICAgICAgeyAweDIwQTkgfSwgLyoyMEE5OyBMOyBbMTQgNTgsIDAzLCAwM10gICAgIyBbMDgzQy4wMDIwLjAwMDJdICMgV09OIFNJR04qLworICAgICAgICAgICAgeyAweEZGRTYgfSwgLypGRkU2OyBMOyBbMTQgNTgsIDAzLCAwNV0gICAgIyBbMDgzQy4wMDIwLjAwMDNdICMgRlVMTFdJRFRIIFdPTiBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgyMEFBIH0sIC8qMjBBQTsgTDsgWzE0IDVBLCAwMywgMDNdICAgICMgWzA4M0QuMDAyMC4wMDAyXSAjIE5FVyBTSEVRRUwgU0lHTiovCisgICAgICAgICAgICB7IDB4MjBBQiB9LCAvKjIwQUI7IEw7IFsxNCA1QywgMDMsIDAzXSAgICAjIFswODNFLjAwMjAuMDAwMl0gIyBET05HIFNJR04qLworICAgICAgICAgICAgeyAweDIwQUMgfSwgLyoyMEFDOyBMOyBbMTQgNUUsIDAzLCAwM10gICAgIyBbMDgzRi4wMDIwLjAwMDJdICMgRVVSTyBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgyMEFEIH0sIC8qMjBBRDsgTDsgWzE0IDYwLCAwMywgMDNdICAgICMgWzA4NDAuMDAyMC4wMDAyXSAjIEtJUCBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgyMEFFIH0sIC8qMjBBRTsgTDsgWzE0IDYyLCAwMywgMDNdICAgICMgWzA4NDEuMDAyMC4wMDAyXSAjIFRVR1JJSyBTSUdOKi8KKyAgICAgICAgICAgIHsgMHgyMEFGIH0gLyoyMEFGOyBMOyBbMTQgNjQsIDAzLCAwM10gICAgIyBbMDg0Mi4wMDIwLjAwMDJdICMgRFJBQ0hNQSBTSUdOKi8KKyAgICAgICAgfTsKKyAgICAKKyAgICAgICAgaW50IGksIGo7CisgICAgICAgIGludCBleHBlY3RlZFJlc3VsdCA9IDA7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkVOR0xJU0gpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcGFyZSBlYWNoIGN1cnJlbmN5IHN5bWJvbCBhZ2FpbnN0IGFsbCB0aGUKKyAgICAgICAgLy8gY3VycmVuY3kgc3ltYm9scywgaW5jbHVkaW5nIGl0c2VsZgorICAgICAgICBTdHJpbmcgc291cmNlOworICAgICAgICBTdHJpbmcgdGFyZ2V0OworICAgICAgICAKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnJlbmN5Lmxlbmd0aDsgaSArPSAxKSB7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY3VycmVuY3kubGVuZ3RoOyBqICs9IDEpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBuZXcgU3RyaW5nKGN1cnJlbmN5W2ldKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgU3RyaW5nKGN1cnJlbmN5W2pdKTsKKworICAgICAgICAgICAgICAgIGlmIChpIDwgaikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCA9IC0xOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGkgPT0gaikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQgPSAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gYy5jb21wYXJlKHNvdXJjZSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBDb2xsYXRpb25LZXkgc291cmNlS2V5ID0gbnVsbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNvdXJjZUtleSA9IGMuZ2V0Q29sbGF0aW9uS2V5KHNvdXJjZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlS2V5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkNvdWxkbid0IGdldCBjb2xsYXRpb25LZXkgZm9yIHNvdXJjZSIpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb2xsYXRpb25LZXkgdGFyZ2V0S2V5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0YXJnZXRLZXkgPSBjLmdldENvbGxhdGlvbktleSh0YXJnZXQpOworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRLZXkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiQ291bGRuJ3QgZ2V0IGNvbGxhdGlvbktleSBmb3Igc291cmNlIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludCBrZXlSZXN1bHQgPSBzb3VyY2VLZXkuY29tcGFyZVRvKHRhcmdldEtleSk7CisKKyAgICAgICAgICAgICAgICByZXBvcnRDUmVzdWx0KCBzb3VyY2UsIHRhcmdldCwgc291cmNlS2V5LCB0YXJnZXRLZXksIGNvbXBhcmVSZXN1bHQsIGtleVJlc3VsdCwgY29tcGFyZVJlc3VsdCwgZXhwZWN0ZWRSZXN1bHQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApIHsKKyAgICAgICAgaWYgKGV4cGVjdGVkUmVzdWx0IDwgLTEgfHwgZXhwZWN0ZWRSZXN1bHQgPiAxKSB7CisgICAgICAgICAgICBlcnJsbigiKioqKiogaW52YWxpZCBjYWxsIHRvIHJlcG9ydENSZXN1bHQgKioqKiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBvazEgPSAoY29tcGFyZVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2syID0gKGtleVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2szID0gKGluY1Jlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG9rMSAmJiBvazIgJiYgb2szICYmICFpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgcmV0dXJuOyAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc0V4cGVjdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgU3RyaW5nIHNSZXN1bHQgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGNvbXBhcmVSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgc0V4cGVjdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoZXhwZWN0ZWRSZXN1bHQsIHNFeHBlY3QpOworICAgICAgICAgICAgaWYgKG9rMSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworCisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChpbmNSZXN1bHQsIHNSZXN1bHQpOworCisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIGFwcGVuZENvbXBhcmVSZXN1bHQoaW50IHJlc3VsdCwgU3RyaW5nIHRhcmdldCl7CisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiTEVTUyI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiRVFVQUwiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkdSRUFURVIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGh1aCA9ICI/IjsKKyAgICAgICAgICAgIHRhcmdldCArPSBodWggKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHByZXR0aWZ5KENvbGxhdGlvbktleSBzb3VyY2VLZXkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGJ5dGVbXSBieXRlcz0gc291cmNlS2V5LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIFN0cmluZyB0YXJnZXQgPSAiWyI7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGFyZ2V0ICs9IEludGVnZXIudG9IZXhTdHJpbmcoYnl0ZXNbaV0pOworICAgICAgICAgICAgdGFyZ2V0ICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gIl0iOworICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uRGFuaXNoVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkRhbmlzaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDlmNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkRhbmlzaFRlc3QuamF2YQpAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAKKyAqICREYXRlOiAKKyAqICRSZXZpc2lvbjogCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYyLjEgOiBDb2xsYXRlL0NvbGxhdGlvbkRhbmlzaFRlc3QKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L2RhY29sbC5jcHAKKyAqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjsKKyAKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworIAorcHVibGljIGNsYXNzIENvbGxhdGlvbkRhbmlzaFRlc3QgZXh0ZW5kcyBUZXN0Rm13a3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IENvbGxhdGlvbkRhbmlzaFRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RTb3VyY2VDYXNlcyA9IHsKKyAgICAgICAgezB4MDA0QyAvKiAnTCcgKi8sIDB4MDA3NSAvKiAndScgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDZDIC8qICdsJyAqLywgMHgwMDc1IC8qICd1JyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDZCIC8qICdrJyAqL30sCisgICAgICAgIHsweDAwNEMgLyogJ0wnICovLCAweDAwRkMsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2QiAvKiAnaycgKi99LAorICAgICAgICB7MHgwMDRDIC8qICdMJyAqLywgMHgwMEU0LCAweDAwNzYgLyogJ3YnICovLCAweDAwNjkgLyogJ2knICovfSwKKyAgICAgICAgezB4MDA0QyAvKiAnTCcgKi8sIDB4MDBGNiwgMHgwMDc3IC8qICd3JyAqLywgMHgwMDc3IC8qICd3JyAqL30sCisgICAgICAgIHsweDAwNEMgLyogJ0wnICovLCAweDAwNzYgLyogJ3YnICovLCAweDAwNjkgLyogJ2knICovfSwKKyAgICAgICAgezB4MDA0QyAvKiAnTCcgKi8sIDB4MDBFNCwgMHgwMDc2IC8qICd2JyAqLywgMHgwMDY5IC8qICdpJyAqL30sCisgICAgICAgIHsweDAwNEMgLyogJ0wnICovLCAweDAwRkMsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2QiAvKiAnaycgKi99CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RUYXJnZXRDYXNlcyA9IHsKKyAgICAgICAgezB4MDA2QyAvKiAnbCcgKi8sIDB4MDA3NSAvKiAndScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2QiAvKiAnaycgKi99LAorICAgICAgICB7MHgwMDRDIC8qICdMJyAqLywgMHgwMEZDLCAweDAwNjIgLyogJ2InICovLCAweDAwNjUgLyogJ2UnICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNkIgLyogJ2snICovfSwKKyAgICAgICAgezB4MDA2QyAvKiAnbCcgKi8sIDB4MDA3OSAvKiAneScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2QiAvKiAnaycgKi99LAorICAgICAgICB7MHgwMDRDIC8qICdMJyAqLywgMHgwMEY2LCAweDAwNzcgLyogJ3cnICovLCAweDAwNjUgLyogJ2UnICovfSwKKyAgICAgICAgezB4MDA2RCAvKiAnbScgKi8sIDB4MDA2MSAvKiAnYScgKi8sIDB4MDA3MyAvKiAncycgKi8sIDB4MDA3NCAvKiAndCcgKi99LAorICAgICAgICB7MHgwMDRDIC8qICdMJyAqLywgMHgwMDc3IC8qICd3JyAqLywgMHgwMDY5IC8qICdpJyAqL30sCisgICAgICAgIHsweDAwNEMgLyogJ0wnICovLCAweDAwRjYsIDB4MDA3NyAvKiAndycgKi8sIDB4MDA2OSAvKiAnaScgKi99LAorICAgICAgICB7MHgwMDRDIC8qICdMJyAqLywgMHgwMDc5IC8qICd5JyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDY1IC8qICdlJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDZCIC8qICdrJyAqL30KKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gcmVzdWx0cyA9IHsKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAxLAorICAgICAgICAtMSwKKyAgICAgICAgLTEsCisgICAgICAgIC8qIHRlc3QgcHJpbWFyeSA+IDUqLworICAgICAgICAwLAorICAgICAgICAtMSwKKyAgICAgICAgMAorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0QnVncyA9IHsKKyAgICAgICAgezB4MDA0MSAvKiAnQScgKi8sIDB4MDAyRiAvKiAnLycgKi8sIDB4MDA1MyAvKiAnUycgKi99LAorICAgICAgICB7MHgwMDQxIC8qICdBJyAqLywgMHgwMDRFIC8qICdOJyAqLywgMHgwMDQ0IC8qICdEJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQ1IC8qICdFJyAqL30sCisgICAgICAgIHsweDAwNDEgLyogJ0EnICovLCAweDAwNEUgLyogJ04nICovLCAweDAwNDQgLyogJ0QnICovLCAweDAwNTIgLyogJ1InICovLCAweDAwQzl9LAorICAgICAgICB7MHgwMDQxIC8qICdBJyAqLywgMHgwMDRFIC8qICdOJyAqLywgMHgwMDQ0IC8qICdEJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDQxIC8qICdBJyAqLywgMHgwMDUzIC8qICdTJyAqL30sCisgICAgICAgIHsweDAwNDEgLyogJ0EnICovLCAweDAwNTMgLyogJ1MnICovfSwKKyAgICAgICAgezB4MDA0MyAvKiAnQycgKi8sIDB4MDA0MSAvKiAnQScgKi99LAorICAgICAgICB7MHgwMEM3LCAweDAwNDEgLyogJ0EnICovfSwKKyAgICAgICAgezB4MDA0MyAvKiAnQycgKi8sIDB4MDA0MiAvKiAnQicgKi99LAorICAgICAgICB7MHgwMEM3LCAweDAwNDMgLyogJ0MnICovLDB4MDAwMCAvKiAnXDAnICovfSwKKyAgICAgICAgezB4MDA0NCAvKiAnRCcgKi8sIDB4MDAyRSAvKiAnLicgKi8sIDB4MDA1MyAvKiAnUycgKi8sIDB4MDAyRSAvKiAnLicgKi8sIDB4MDA0MiAvKiAnQicgKi8sIDB4MDAyRSAvKiAnLicgKi99LAorICAgICAgICB7MHgwMDQ0IC8qICdEJyAqLywgMHgwMDQxIC8qICdBJyAqL30sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNDQgLyogJ0QnICovLCAweDAwNDIgLyogJ0InICovfSwKKyAgICAgICAgezB4MDA0NCAvKiAnRCcgKi8sIDB4MDA1MyAvKiAnUycgKi8sIDB4MDA0MiAvKiAnQicgKi99LAorICAgICAgICB7MHgwMDQ0IC8qICdEJyAqLywgMHgwMDUzIC8qICdTJyAqLywgMHgwMDQzIC8qICdDJyAqL30sCisgICAgICAgIHsweDAwRDAsIC8qMHgwMTEwLCovIDB4MDA0MSAvKiAnQScgKi99LAorICAgICAgICB7MHgwMEQwLCAvKjB4MDExMCwqLyAweDAwNDMgLyogJ0MnICovfSwKKyAgICAgICAgezB4MDA0NSAvKiAnRScgKi8sIDB4MDA0QiAvKiAnSycgKi8sIDB4MDA1MyAvKiAnUycgKi8sIDB4MDA1NCAvKiAnVCcgKi8sIDB4MDA1MiAvKiAnUicgKi8sIDB4MDA0MSAvKiAnQScgKi8sIDB4MDA1RiAvKiAnXycgKi8sIDB4MDA0MSAvKiAnQScgKi8sIDB4MDA1MiAvKiAnUicgKi8sIDB4MDA0MiAvKiAnQicgKi8sIDB4MDA0NSAvKiAnRScgKi8sIDB4MDA0QSAvKiAnSicgKi8sIDB4MDA0NCAvKiAnRCcgKi8sIDB4MDA0NSAvKiAnRScgKi99LAorICAgICAgICB7MHgwMDQ1IC8qICdFJyAqLywgMHgwMDRCIC8qICdLJyAqLywgMHgwMDUzIC8qICdTJyAqLywgMHgwMDU0IC8qICdUJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQxIC8qICdBJyAqLywgMHgwMDQyIC8qICdCJyAqLywgMHgwMDU1IC8qICdVJyAqLywgMHgwMDQ0IC8qICdEJyAqLywgMH0sCisgICAgICAgIHsweDAwNDggLyogJ0gnICovLCAweDAwRDgsIDB4MDA1MyAvKiAnUycgKi8sIDB4MDA1NCAvKiAnVCcgKi99LCAgCisgICAgICAgIHsweDAwNDggLyogJ0gnICovLCAweDAwNDEgLyogJ0EnICovLCAweDAwNDEgLyogJ0EnICovLCAweDAwNDcgLyogJ0cnICovfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB7MHgwMDQ4IC8qICdIJyAqLywgMHgwMEM1LCAweDAwNEUgLyogJ04nICovLCAweDAwNDQgLyogJ0QnICovLCAweDAwNDIgLyogJ0InICovLCAweDAwNEYgLyogJ08nICovLCAweDAwNDcgLyogJ0cnICovfSwKKyAgICAgICAgezB4MDA0OCAvKiAnSCcgKi8sIDB4MDA0MSAvKiAnQScgKi8sIDB4MDA0MSAvKiAnQScgKi8sIDB4MDA0RSAvKiAnTicgKi8sIDB4MDA0NCAvKiAnRCcgKi8sIDB4MDA1NiAvKiAnVicgKi8sIDB4MDBDNiwgMHgwMDUyIC8qICdSJyAqLywgMHgwMDRCIC8qICdLJyAqLywgMHgwMDUzIC8qICdTJyAqLywgMHgwMDQyIC8qICdCJyAqLywgMHgwMDQxIC8qICdBJyAqLywgMHgwMDRFIC8qICdOJyAqLywgMHgwMDRCIC8qICdLJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDRFIC8qICdOJyAqL30sCisgICAgICAgIHsweDAwNkIgLyogJ2snICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNkMgLyogJ2wnICovfSwKKyAgICAgICAgezB4MDA0QiAvKiAnSycgKi8sIDB4MDA2MSAvKiAnYScgKi8sIDB4MDA3MiAvKiAncicgKi8sIDB4MDA2QyAvKiAnbCcgKi99LAorICAgICAgICB7MHgwMDRFIC8qICdOJyAqLywgMHgwMDQ5IC8qICdJJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDRDIC8qICdMJyAqLywgMHgwMDUzIC8qICdTJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDRBIC8qICdKJyAqLywgMHgwMEQ4LCAweDAwNTIgLyogJ1InICovLCAweDAwNDcgLyogJ0cnICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNEUgLyogJ04nICovfSwKKyAgICAgICAgezB4MDA0RSAvKiAnTicgKi8sIDB4MDA0OSAvKiAnSScgKi8sIDB4MDA0NSAvKiAnRScgKi8sIDB4MDA0QyAvKiAnTCcgKi8sIDB4MDA1MyAvKiAnUycgKi8sIDB4MDAyRCAvKiAnLScgKi8sIDB4MDA0QSAvKiAnSicgKi8sIDB4MDBEOCwgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQ3IC8qICdHJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDRFIC8qICdOJyAqL30sCisgICAgICAgIHsweDAwNEUgLyogJ04nICovLCAweDAwNDkgLyogJ0knICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNEMgLyogJ0wnICovLCAweDAwNTMgLyogJ1MnICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNEUgLyogJ04nICovfSwKKyAgICAgICAgezB4MDA1MiAvKiAnUicgKi8sIDB4MDBDOSwgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDJDIC8qICcsJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDQxIC8qICdBJyAqL30sCisgICAgICAgIHsweDAwNTIgLyogJ1InICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwMkMgLyogJywnICovLCAweDAwMjAgLyogJyAnICovLCAweDAwNDIgLyogJ0InICovfSwKKyAgICAgICAgezB4MDA1MiAvKiAnUicgKi8sIDB4MDBDOSwgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDJDIC8qICcsJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDRDIC8qICdMJyAqL30sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB7MHgwMDUyIC8qICdSJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDJDIC8qICcsJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDU2IC8qICdWJyAqL30sCisgICAgICAgIHsweDAwNTMgLyogJ1MnICovLCAweDAwNDMgLyogJ0MnICovLCAweDAwNDggLyogJ0gnICovLCAweDAwNTkgLyogJ1knICovLCAweDAwNTQgLyogJ1QnICovLCAweDAwNTQgLyogJ1QnICovLCAweDAwMkMgLyogJywnICovLCAweDAwMjAgLyogJyAnICovLCAweDAwNDIgLyogJ0InICovfSwKKyAgICAgICAgezB4MDA1MyAvKiAnUycgKi8sIDB4MDA0MyAvKiAnQycgKi8sIDB4MDA0OCAvKiAnSCcgKi8sIDB4MDA1OSAvKiAnWScgKi8sIDB4MDA1NCAvKiAnVCcgKi8sIDB4MDA1NCAvKiAnVCcgKi8sIDB4MDAyQyAvKiAnLCcgKi8sIDB4MDAyMCAvKiAnICcgKi8sIDB4MDA0OCAvKiAnSCcgKi99LAorICAgICAgICB7MHgwMDUzIC8qICdTJyAqLywgMHgwMDQzIC8qICdDJyAqLywgMHgwMDQ4IC8qICdIJyAqLywgMHgwMERDLCAweDAwNTQgLyogJ1QnICovLCAweDAwNTQgLyogJ1QnICovLCAweDAwMkMgLyogJywnICovLCAweDAwMjAgLyogJyAnICovLCAweDAwNDggLyogJ0gnICovfSwKKyAgICAgICAgezB4MDA1MyAvKiAnUycgKi8sIDB4MDA0MyAvKiAnQycgKi8sIDB4MDA0OCAvKiAnSCcgKi8sIDB4MDA1OSAvKiAnWScgKi8sIDB4MDA1NCAvKiAnVCcgKi8sIDB4MDA1NCAvKiAnVCcgKi8sIDB4MDAyQyAvKiAnLCcgKi8sIDB4MDAyMCAvKiAnICcgKi8sIDB4MDA0QyAvKiAnTCcgKi99LAorICAgICAgICB7MHgwMDUzIC8qICdTJyAqLywgMHgwMDQzIC8qICdDJyAqLywgMHgwMDQ4IC8qICdIJyAqLywgMHgwMERDLCAweDAwNTQgLyogJ1QnICovLCAweDAwNTQgLyogJ1QnICovLCAweDAwMkMgLyogJywnICovLCAweDAwMjAgLyogJyAnICovLCAweDAwNEQgLyogJ00nICovfSwKKyAgICAgICAgezB4MDA1MyAvKiAnUycgKi8sIDB4MDA1MyAvKiAnUycgKi99LAorICAgICAgICB7MHgwMERGfSwKKyAgICAgICAgezB4MDA1MyAvKiAnUycgKi8sIDB4MDA1MyAvKiAnUycgKi8sIDB4MDA0MSAvKiAnQScgKi99LAorICAgICAgICB7MHgwMDUzIC8qICdTJyAqLywgMHgwMDU0IC8qICdUJyAqLywgMHgwMDRGIC8qICdPJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDU2IC8qICdWJyAqLywgMHgwMDQ5IC8qICdJJyAqLywgMHgwMDRDIC8qICdMJyAqLywgMHgwMDQ0IC8qICdEJyAqLywgMHgwMDREIC8qICdNJyAqLywgMHgwMDRGIC8qICdPJyAqLywgMHgwMDUzIC8qICdTJyAqLywgMHgwMDQ1IC8qICdFJyAqL30sICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNTMgLyogJ1MnICovLCAweDAwNTQgLyogJ1QnICovLCAweDAwNEYgLyogJ08nICovLCAweDAwNTIgLyogJ1InICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNEIgLyogJ0snICovLCAweDAwQzYsIDB4MDA1MiAvKiAnUicgKi8sIDB9LAorICAgICAgICB7MHgwMDUzIC8qICdTJyAqLywgMHgwMDU0IC8qICdUJyAqLywgMHgwMDRGIC8qICdPJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDREIC8qICdNJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDUwIC8qICdQJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDU0IC8qICdUJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDUzIC8qICdTJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDRFIC8qICdOJyAqL30sCisgICAgICAgIHsweDAwNTMgLyogJ1MnICovLCAweDAwNTQgLyogJ1QnICovLCAweDAwNEYgLyogJ08nICovLCAweDAwNTIgLyogJ1InICovLCAweDAwNEQgLyogJ00nICovLCAweDAwNEMgLyogJ0wnICovLCAweDAwNTkgLyogJ1knICovfSwKKyAgICAgICAgezB4MDA1NCAvKiAnVCcgKi8sIDB4MDA0OCAvKiAnSCcgKi8sIDB4MDA0RiAvKiAnTycgKi8sIDB4MDA1MiAvKiAnUicgKi8sIDB4MDA1NiAvKiAnVicgKi8sIDB4MDA0MSAvKiAnQScgKi8sIDB4MDA0QyAvKiAnTCcgKi8sIDB4MDA0NCAvKiAnRCcgKi99LAorICAgICAgICB7MHgwMDU0IC8qICdUJyAqLywgMHgwMDQ4IC8qICdIJyAqLywgMHgwMDRGIC8qICdPJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDU2IC8qICdWJyAqLywgMHgwMDQxIC8qICdBJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQ0IC8qICdEJyAqLywgMHgwMDU1IC8qICdVJyAqLywgMHgwMDUyIC8qICdSJyAqL30sCisgICAgICAgIHsweDAwNTQgLyogJ1QnICovLCAweDAwNDggLyogJ0gnICovLCAweDAwNTkgLyogJ1knICovLCAweDAwNDcgLyogJ0cnICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNTMgLyogJ1MnICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNEUgLyogJ04nICovfSwKKyAgICAgICAgezB4MDBGRSwgMHgwMDRGIC8qICdPJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDU2IC8qICdWJyAqLywgMHgwMDQxIC8qICdBJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMEQwLCAvKjB4MDExMCwqLyAweDAwNTUgLyogJ1UnICovLCAweDAwNTIgLyogJ1InICovfSwKKyAgICAgICAgezB4MDA1NiAvKiAnVicgKi8sIDB4MDA0NSAvKiAnRScgKi8sIDB4MDA1MyAvKiAnUycgKi8sIDB4MDA1NCAvKiAnVCcgKi8sIDB4MDA0NSAvKiAnRScgKi8sIDB4MDA1MiAvKiAnUicgKi8sIDB4MDA0NyAvKiAnRycgKi8sIDB4MDBDNSwgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQ0IC8qICdEJyAqLywgMHgwMDJDIC8qICcsJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDQxIC8qICdBJyAqL30sCisgICAgICAgIHsweDAwNTYgLyogJ1YnICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNTMgLyogJ1MnICovLCAweDAwNTQgLyogJ1QnICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNTIgLyogJ1InICovLCAweDAwNDcgLyogJ0cnICovLCAweDAwNDEgLyogJ0EnICovLCAweDAwNDEgLyogJ0EnICovLCAweDAwNTIgLyogJ1InICovLCAweDAwNDQgLyogJ0QnICovLCAweDAwMkMgLyogJywnICovLCAweDAwMjAgLyogJyAnICovLCAweDAwNDEgLyogJ0EnICovfSwKKyAgICAgICAgezB4MDA1NiAvKiAnVicgKi8sIDB4MDA0NSAvKiAnRScgKi8sIDB4MDA1MyAvKiAnUycgKi8sIDB4MDA1NCAvKiAnVCcgKi8sIDB4MDA0NSAvKiAnRScgKi8sIDB4MDA1MiAvKiAnUicgKi8sIDB4MDA0NyAvKiAnRycgKi8sIDB4MDBDNSwgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQ0IC8qICdEJyAqLywgMHgwMDJDIC8qICcsJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDQyIC8qICdCJyAqL30sICAgICAgICAgICAgICAgICAKKyAgICAgICAgezB4MDBDNiwgMHgwMDQyIC8qICdCJyAqLywgMHgwMDRDIC8qICdMJyAqLywgMHgwMDQ1IC8qICdFJyAqL30sCisgICAgICAgIHsweDAwQzQsIDB4MDA0MiAvKiAnQicgKi8sIDB4MDA0QyAvKiAnTCcgKi8sIDB4MDA0NSAvKiAnRScgKi99LAorICAgICAgICB7MHgwMEQ4LCAweDAwNDIgLyogJ0InICovLCAweDAwNDUgLyogJ0UnICovLCAweDAwNTIgLyogJ1InICovLCAweDAwNDcgLyogJ0cnICovfSwKKyAgICAgICAgezB4MDBENiwgMHgwMDQyIC8qICdCJyAqLywgMHgwMDQ1IC8qICdFJyAqLywgMHgwMDUyIC8qICdSJyAqLywgMHgwMDQ3IC8qICdHJyAqL30KKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdW10gdGVzdE5UTGlzdCA9IHsKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA2RSAvKiAnbicgKi8sIDB4MDA2NCAvKiAnZCcgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA3MiAvKiAncicgKi8sIDB4MDA2NSAvKiAnZScgKi99LAorICAgICAgICB7MHgwMDYzIC8qICdjJyAqLywgMHgwMDY4IC8qICdoJyAqLywgMHgwMDYxIC8qICdhJyAqLywgMHgwMDcxIC8qICdxJyAqLywgMHgwMDc1IC8qICd1JyAqLywgMHgwMDY1IC8qICdlJyAqL30sCisgICAgICAgIHsweDAwNjMgLyogJ2MnICovLCAweDAwNjggLyogJ2gnICovLCAweDAwNjUgLyogJ2UnICovLCAweDAwNkQgLyogJ20nICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNkUgLyogJ24nICovfSwKKyAgICAgICAgezB4MDA2MyAvKiAnYycgKi8sIDB4MDA2RiAvKiAnbycgKi8sIDB4MDA3NCAvKiAndCcgKi8sIDB4MDA2NSAvKiAnZScgKi99LAorICAgICAgICB7MHgwMDYzIC8qICdjJyAqLywgMHgwMDZGIC8qICdvJyAqLywgMHgwMDc0IC8qICd0JyAqLywgMHgwMGU5fSwKKyAgICAgICAgezB4MDA2MyAvKiAnYycgKi8sIDB4MDBmNCwgMHgwMDc0IC8qICd0JyAqLywgMHgwMDY1IC8qICdlJyAqL30sCisgICAgICAgIHsweDAwNjMgLyogJ2MnICovLCAweDAwZjQsIDB4MDA3NCAvKiAndCcgKi8sIDB4MDBlOX0sCisgICAgICAgIHsweDAxMGQsIDB4MDA3NSAvKiAndScgKi8sIDB4MDEwZCwgMHgwMTEzLCAweDAwNzQgLyogJ3QnICovfSwKKyAgICAgICAgezB4MDA0MyAvKiAnQycgKi8sIDB4MDA3QSAvKiAneicgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2OCAvKiAnaCcgKi99LAorICAgICAgICB7MHgwMDY4IC8qICdoJyAqLywgMHgwMDY5IC8qICdpJyAqLywgMHgwMTYxLCAweDAwNjEgLyogJ2EnICovfSwKKyAgICAgICAgezB4MDA2OSAvKiAnaScgKi8sIDB4MDA3MiAvKiAncicgKi8sIDB4MDA2NCAvKiAnZCcgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA3MyAvKiAncycgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2OCAvKiAnaCcgKi99LAorICAgICAgICB7MHgwMDZDIC8qICdsJyAqLywgMHgwMDY5IC8qICdpJyAqLywgMHgwMDY1IC8qICdlJyAqL30sCisgICAgICAgIHsweDAwNkMgLyogJ2wnICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNjUgLyogJ2UnICovfSwKKyAgICAgICAgezB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2MSAvKiAnYScgKi8sIDB4MDA2RCAvKiAnbScgKi8sIDB4MDA2MSAvKiAnYScgKi99LAorICAgICAgICB7MHgwMDZDIC8qICdsJyAqLywgMHgwMGY1LCAweDAwNzUgLyogJ3UnICovLCAweDAwNjcgLyogJ2cnICovfSwKKyAgICAgICAgezB4MDA2QyAvKiAnbCcgKi8sIDB4MDBmMiwgMHgwMDdBIC8qICd6JyAqLywgMHgwMDYxIC8qICdhJyAqL30sCisgICAgICAgIHsweDAwNkMgLyogJ2wnICovLCAweDAwNzUgLyogJ3UnICovLCAweDAxMGR9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNkMgLyogJ2wnICovLCAweDAwNzUgLyogJ3UnICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNkIgLyogJ2snICovfSwKKyAgICAgICAgezB4MDA0QyAvKiAnTCcgKi8sIDB4MDBmYywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDY1IC8qICdlJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDZCIC8qICdrJyAqL30sCisgICAgICAgIHsweDAwNkMgLyogJ2wnICovLCAweDAwNzkgLyogJ3knICovLCAweDAwNjUgLyogJ2UnICovfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNkMgLyogJ2wnICovLCAweDAwZTQsIDB4MDA3NiAvKiAndicgKi8sIDB4MDA2OSAvKiAnaScgKi99LAorICAgICAgICB7MHgwMDRDIC8qICdMJyAqLywgMHgwMGY2LCAweDAwNzcgLyogJ3cnICovLCAweDAwNjUgLyogJ2UnICovLCAweDAwNkUgLyogJ24nICovfSwKKyAgICAgICAgezB4MDA2RCAvKiAnbScgKi8sIDB4MDBlMCwgMHgwMTYxLCAweDAwNzQgLyogJ3QnICovLCAweDAwNjEgLyogJ2EnICovfSwKKyAgICAgICAgezB4MDA2RCAvKiAnbScgKi8sIDB4MDBlZSwgMHgwMDcyIC8qICdyJyAqL30sCisgICAgICAgIHsweDAwNkQgLyogJ20nICovLCAweDAwNzkgLyogJ3knICovLCAweDAwNkUgLyogJ24nICovLCAweDAwNjQgLyogJ2QnICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNjcgLyogJ2cnICovfSwKKyAgICAgICAgezB4MDA0RCAvKiAnTScgKi8sIDB4MDBlNCwgMHgwMDZFIC8qICduJyAqLywgMHgwMDZFIC8qICduJyAqLywgMHgwMDY1IC8qICdlJyAqLywgMHgwMDcyIC8qICdyJyAqL30sCisgICAgICAgIHsweDAwNkQgLyogJ20nICovLCAweDAwZjYsIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2OCAvKiAnaCcgKi8sIDB4MDA3NCAvKiAndCcgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA2RSAvKiAnbicgKi99LAorICAgICAgICB7MHgwMDcwIC8qICdwJyAqLywgMHgwMDY5IC8qICdpJyAqLywgMHgwMGYxLCAweDAwNjEgLyogJ2EnICovfSwKKyAgICAgICAgezB4MDA3MCAvKiAncCcgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA2RSAvKiAnbicgKi8sIDB4MDA3NCAvKiAndCcgKi99LAorICAgICAgICB7MHgwMDcwIC8qICdwJyAqLywgMHgwMDc5IC8qICd5JyAqLywgMHgwMDZDIC8qICdsJyAqLywgMHgwMDZGIC8qICdvJyAqLywgMHgwMDZFIC8qICduJyAqL30sCisgICAgICAgIHsweDAxNjEsIDB4MDBlMCwgMHgwMDcyIC8qICdyJyAqLywgMHgwMDYxIC8qICdhJyAqLywgMHgwMDZFIC8qICduJyAqL30sCisgICAgICAgIHsweDAwNzMgLyogJ3MnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNzYgLyogJ3YnICovLCAweDAwNkYgLyogJ28nICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNzIgLyogJ3InICovfSwKKyAgICAgICAgezB4MDE2MCwgMHgwMDY1IC8qICdlJyAqLywgMHgwMDcyIC8qICdyJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMTZiLCAweDAwNzIgLyogJ3InICovLCAweDAwNjEgLyogJ2EnICovfSwKKyAgICAgICAgezB4MDA1MyAvKiAnUycgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA3NCAvKiAndCcgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2MSAvKiAnYScgKi99LAorICAgICAgICB7MHgwMTViLCAweDAwNkMgLyogJ2wnICovLCAweDAwNzUgLyogJ3UnICovLCAweDAwNjIgLyogJ2InICovfSwKKyAgICAgICAgezB4MDA3MyAvKiAncycgKi8sIDB4MDA3NSAvKiAndScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA3NCAvKiAndCcgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2NSAvKiAnZScgKi99LAorICAgICAgICB7MHgwMDczIC8qICdzJyAqLywgMHgwMDc5IC8qICd5JyAqLywgMHgwMDZEIC8qICdtJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDZGIC8qICdvJyAqLywgMHgwMDZDIC8qICdsJyAqL30sCisgICAgICAgIHsweDAwNzMgLyogJ3MnICovLCAweDAwZTQsIDB4MDA2RCAvKiAnbScgKi8sIDB4MDA3NCAvKiAndCcgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2OCAvKiAnaCcgKi99LAorICAgICAgICB7MHgwMDc3IC8qICd3JyAqLywgMHgwMDYxIC8qICdhJyAqLywgMHgwMDY2IC8qICdmJyAqLywgMHgwMDY2IC8qICdmJyAqLywgMHgwMDZDIC8qICdsJyAqLywgMHgwMDY1IC8qICdlJyAqL30sCisgICAgICAgIHsweDAwNzYgLyogJ3YnICovLCAweDAwNjUgLyogJ2UnICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNkIgLyogJ2snICovLCAweDAwNjUgLyogJ2UnICovLCAweDAwNjggLyogJ2gnICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNzQgLyogJ3QnICovfSwKKyAgICAgICAgezB4MDA3NyAvKiAndycgKi8sIDB4MDA2RiAvKiAnbycgKi8sIDB4MDA2RiAvKiAnbycgKi8sIDB4MDA2NCAvKiAnZCcgKi99LAorICAgICAgICB7MHgwMDc2IC8qICd2JyAqLywgMHgwMDZGIC8qICdvJyAqLywgMHgwMDc4IC8qICd4JyAqL30sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNzYgLyogJ3YnICovLCAweDAwZTQsIDB4MDA2NyAvKiAnZycgKi8sIDB4MDA2MSAvKiAnYScgKi99LAorICAgICAgICB7MHgwMDc5IC8qICd5JyAqLywgMHgwMDY1IC8qICdlJyAqLywgMHgwMDZFIC8qICduJyAqL30sCisgICAgICAgIHsweDAwNzkgLyogJ3knICovLCAweDAwNzUgLyogJ3UnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNkUgLyogJ24nICovfSwKKyAgICAgICAgezB4MDA3OSAvKiAneScgKi8sIDB4MDA3NSAvKiAndScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2MSAvKiAnYScgKi99LAorICAgICAgICB7MHgwMTdlLCAweDAwNjEgLyogJ2EnICovLCAweDAwNkMgLyogJ2wnICovfSwKKyAgICAgICAgezB4MDE3ZSwgMHgwMDY1IC8qICdlJyAqLywgMHgwMDZFIC8qICduJyAqLywgMHgwMDYxIC8qICdhJyAqL30sCisgICAgICAgIHsweDAxN2QsIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA2RSAvKiAnbicgKi8sIDB4MDExMywgMHgwMDc2IC8qICd2JyAqLywgMHgwMDYxIC8qICdhJyAqL30sCisgICAgICAgIHsweDAwN0EgLyogJ3onICovLCAweDAwNkYgLyogJ28nICovLCAweDAwNkYgLyogJ28nICovLCAwfSwKKyAgICAgICAgezB4MDA1QSAvKiAnWicgKi8sIDB4MDA3NiAvKiAndicgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA2NCAvKiAnZCcgKi8sIDB4MDA3MiAvKiAncicgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA2QSAvKiAnaicgKi8sIDB4MDA2MSAvKiAnYScgKi99LAorICAgICAgICB7MHgwMDVBIC8qICdaJyAqLywgMHgwMGZjLCAweDAwNzIgLyogJ3InICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNjggLyogJ2gnICovfSwKKyAgICAgICAgezB4MDA3QSAvKiAneicgKi8sIDB4MDA3OSAvKiAneScgKi8sIDB4MDA3MyAvKiAncycgKi8sIDB4MDA2QiAvKiAnaycgKi8sIDB9LCAgICAgICAgICAgICAKKyAgICAgICAgezB4MDBlNCwgMHgwMDZFIC8qICduJyAqLywgMHgwMDY0IC8qICdkJyAqLywgMHgwMDY1IC8qICdlJyAqLywgMHgwMDcyIC8qICdyJyAqLywgMHgwMDY1IC8qICdlJyAqL30gICAgICAgICAgICAgICAgICAKKyAgICB9OworICAgIAorICAgIHByaXZhdGUgQ29sbGF0b3IgbXlDb2xsYXRpb24gPSBudWxsOworICAgIAorICAgIHB1YmxpYyBDb2xsYXRpb25EYW5pc2hUZXN0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbXlDb2xsYXRpb24gPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJkYSIsICJESyIpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgREFOSVNIIGxvY2FsZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RUZXJ0aWFyeSgpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBteUNvbGxhdGlvbi5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIAorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNSA7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgIGxvZ2xuKCJUZXN0IGludGVybmV0IGRhdGEgbGlzdCA6ICIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNTM7IGkrKykgeworICAgICAgICAgICAgZm9yIChqID0gaSsxOyBqIDwgNTQ7IGorKykgeworICAgICAgICAgICAgICAgIGRvVGVzdCh0ZXN0QnVnc1tpXSwgdGVzdEJ1Z3Nbal0sIC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2dsbigiVGVzdCBOVCBkYXRhIGxpc3QgOiAiKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDUyOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaiA9IGkrMTsgaiA8IDUzOyBqKyspIHsKKyAgICAgICAgICAgIAlkb1Rlc3QodGVzdE5UTGlzdFtpXSwgdGVzdE5UTGlzdFtqXSwgLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFByaW1hcnkoKSB7CisgICAgICAgIGludCBpOworICAgICAgICBteUNvbGxhdGlvbi5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgZm9yIChpID0gNTsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIAorICAgIAorICAgIC8vIG1haW4gdGVzdCByb3V0aW5lLCBUZXN0cyBydWxlcyBzcGVjaWZpYyB0byBkYW5pc2ggY29sbGF0aW9uCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdChjaGFyW10gc291cmNlLCBjaGFyW10gdGFyZ2V0LCBpbnQgcmVzdWx0KSB7CisgICAgICAgIFN0cmluZyBzID0gbmV3IFN0cmluZyhzb3VyY2UpOworICAgICAgICBTdHJpbmcgdCA9IG5ldyBTdHJpbmcodGFyZ2V0KTsKKyAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQgPSBteUNvbGxhdGlvbi5jb21wYXJlKHMsIHQpOworICAgICAgICBDb2xsYXRpb25LZXkgc29ydEtleTEsIHNvcnRLZXkyOworICAgICAgICBzb3J0S2V5MSA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleShzKTsKKyAgICAgICAgc29ydEtleTIgPSBteUNvbGxhdGlvbi5nZXRDb2xsYXRpb25LZXkodCk7CisgICAgICAgIGludCBrZXlSZXN1bHQgPSBzb3J0S2V5MS5jb21wYXJlVG8oc29ydEtleTIpOworICAgICAgICByZXBvcnRDUmVzdWx0KHMsIHQsIHNvcnRLZXkxLCBzb3J0S2V5MiwgY29tcGFyZVJlc3VsdCwga2V5UmVzdWx0LCBjb21wYXJlUmVzdWx0LCByZXN1bHQpOyAgIAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApeworICAgICAgICBpZiAoZXhwZWN0ZWRSZXN1bHQgPCAtMSB8fCBleHBlY3RlZFJlc3VsdCA+IDEpIHsKKyAgICAgICAgICAgIGVycmxuKCIqKioqKiBpbnZhbGlkIGNhbGwgdG8gcmVwb3J0Q1Jlc3VsdCAqKioqIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIG9rMSA9IChjb21wYXJlUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazIgPSAoa2V5UmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazMgPSAoaW5jUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKworICAgICAgICBpZiAob2sxICYmIG9rMiAmJiBvazMgJiYgIWlzVmVyYm9zZSgpKSB7CisgICAgICAgICAgICByZXR1cm47ICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIG1zZzEgPSBvazE/ICJPazogY29tcGFyZShcIiIgOiAiRkFJTDogY29tcGFyZShcIiI7CisgICAgICAgICAgICBTdHJpbmcgbXNnMiA9ICJcIiwgXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzMgPSAiXCIpIHJldHVybmVkICI7CisgICAgICAgICAgICBTdHJpbmcgbXNnNCA9ICI7IGV4cGVjdGVkICI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyBzRXhwZWN0ID0gbmV3IFN0cmluZygiIik7CisgICAgICAgICAgICBTdHJpbmcgc1Jlc3VsdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoY29tcGFyZVJlc3VsdCwgc1Jlc3VsdCk7CisgICAgICAgICAgICBzRXhwZWN0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChleHBlY3RlZFJlc3VsdCwgc0V4cGVjdCk7CisgICAgICAgICAgICBpZiAob2sxKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1zZzEgPSBvazIgPyAiT2s6IGtleShcIiIgOiAiRkFJTDoga2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzIgPSAiXCIpLmNvbXBhcmVUbyhrZXkoXCIiOworICAgICAgICAgICAgbXNnMyA9ICJcIikpIHJldHVybmVkICI7CisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChrZXlSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgaWYgKG9rMikgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgICAgIG1zZzEgPSAiICAiOworICAgICAgICAgICAgICAgIG1zZzIgPSAiIHZzLiAiOworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBwcmV0dGlmeShzb3VyY2VLZXkpICsgbXNnMiArIHByZXR0aWZ5KHRhcmdldEtleSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2szID8gIk9rOiBpbmNDb21wYXJlKFwiIiA6ICJGQUlMOiBpbmNDb21wYXJlKFwiIjsKKyAgICAgICAgICAgIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpIHJldHVybmVkICI7CisKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGluY1Jlc3VsdCwgc1Jlc3VsdCk7CisKKyAgICAgICAgICAgIGlmIChvazMpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgYXBwZW5kQ29tcGFyZVJlc3VsdChpbnQgcmVzdWx0LCBTdHJpbmcgdGFyZ2V0KXsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgICAgICAgdGFyZ2V0ICs9ICJMRVNTIjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMCkgeworICAgICAgICAgICAgdGFyZ2V0ICs9ICJFUVVBTCI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiR1JFQVRFUiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgaHVoID0gIj8iOworICAgICAgICAgICAgdGFyZ2V0ICs9IGh1aCArIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICBTdHJpbmcgcHJldHRpZnkoQ29sbGF0aW9uS2V5IHNvdXJjZUtleSkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgYnl0ZVtdIGJ5dGVzPSBzb3VyY2VLZXkudG9CeXRlQXJyYXkoKTsKKyAgICAgICAgU3RyaW5nIHRhcmdldCA9ICJbIjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gSW50ZWdlci50b0hleFN0cmluZyhieXRlc1tpXSk7CisgICAgICAgICAgICB0YXJnZXQgKz0gIiAiOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSAiXSI7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorfQorICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25EdW1teVRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25EdW1teVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg0OGJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkR1bW15VGVzdC5qYXZhCkBAIC0wLDAgKzEsNTIwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IAorICogJERhdGU6IAorICogJFJldmlzaW9uOiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjIuMSA6IENvbGxhdGUvQ29sbGF0aW9uRHVtbXlUZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9hbGxjb2xsLmNwcAorICogICAgICAgICAgICAgICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvY2ludGx0c3QvY2FsbGNvbGwuYworICoqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjsKKyAKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworIAorcHVibGljIGNsYXNzIENvbGxhdGlvbkR1bW15VGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IENvbGxhdGlvbkR1bW15VGVzdCgpLnJ1bihhcmdzKTsKKyAgICAgICAgLy8gbmV3IENvbGxhdGlvbkR1bW15VGVzdCgpLlRlc3RWYXJpYWJsZVRvcCgpOworICAgIH0KKyAgICAKKyAgICAvL3Rlc3RTb3VyY2VDYXNlc1tdW10gYW5kIHRlc3RUYXJnZXRDYXNlc1tdW10sIHRlc3RDYXNlc1tdW10gYXJlIHBvcnRlZCBmcm9tIHRoZSBmaWxlIGNhbGxjb2xsLmMgaW4gaWN1NGMKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0U291cmNlQ2FzZXMgPSB7CisgICAgICAgIHsweDYxLCAweDYyLCAweDI3LCAweDYzfSwKKyAgICAgICAgezB4NjMsIDB4NmYsIDB4MmQsIDB4NmYsIDB4NzB9LAorICAgICAgICB7MHg2MSwgMHg2Mn0sCisgICAgICAgIHsweDYxLCAweDZkLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDYxLCAweDY0fSwKKyAgICAgICAgezB4NjEsIDB4NmMsIDB4NmN9LAorICAgICAgICB7MHg2NiwgMHg2ZiwgMHg3NSwgMHg3Mn0sCisgICAgICAgIHsweDY2LCAweDY5LCAweDc2LCAweDY1fSwKKyAgICAgICAgezB4MzF9LAorICAgICAgICB7MHgzMX0sCisgICAgICAgIHsweDMxfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAxMCAKKyAgICAgICAgezB4MzJ9LAorICAgICAgICB7MHgzMn0sCisgICAgICAgIHsweDQ4LCAweDY1LCAweDZjLCAweDZjLCAweDZmfSwKKyAgICAgICAgezB4NjEsIDB4M2MsIDB4NjJ9LAorICAgICAgICB7MHg2MSwgMHgzYywgMHg2Mn0sCisgICAgICAgIHsweDYxLCAweDYzLCAweDYzfSwKKyAgICAgICAgezB4NjEsIDB4NjMsIDB4NDgsIDB4NjN9LCAgLy8gIHNpbXBsZSB0ZXN0IAorICAgICAgICB7MHg3MCwgMHgwMEVBLCAweDYzLCAweDY4LCAweDY1fSwKKyAgICAgICAgezB4NjEsIDB4NjIsIDB4NjN9LAorICAgICAgICB7MHg2MSwgMHg2MiwgMHg2M30sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAyMCAKKyAgICAgICAgezB4NjEsIDB4NjIsIDB4NjN9LAorICAgICAgICB7MHg2MSwgMHg2MiwgMHg2M30sCisgICAgICAgIHsweDYxLCAweDYyLCAweDYzfSwKKyAgICAgICAgezB4NjEsIDB4MDBFNiwgMHg2M30sCisgICAgICAgIHsweDYxLCAweDYzLCAweDQ4LCAweDYzfSwgIC8vICBwcmltYXJ5IHRlc3QgCisgICAgICAgIHsweDYyLCAweDZjLCAweDYxLCAweDYzLCAweDZifSwKKyAgICAgICAgezB4NjYsIDB4NmYsIDB4NzUsIDB4NzJ9LAorICAgICAgICB7MHg2NiwgMHg2OSwgMHg3NiwgMHg2NX0sCisgICAgICAgIHsweDMxfSwKKyAgICAgICAgezB4NjEsIDB4NjIsIDB4NjN9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgMzAgCisgICAgICAgIHsweDYxLCAweDYyLCAweDYzfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDYxLCAweDYyLCAweDYzLCAweDQ4fSwKKyAgICAgICAgezB4NjEsIDB4NjIsIDB4NjN9LAorICAgICAgICB7MHg2MSwgMHg2MywgMHg0OCwgMHg2M30sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDM0IAorICAgICAgICB7MHg2MSwgMHg2MywgMHg2NSwgMHgzMH0sCisgICAgICAgIHsweDMxLCAweDMwfSwKKyAgICAgICAgezB4NzAsIDB4MDBFQSwweDMwfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDM3ICAgICAKKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdW10gdGVzdFRhcmdldENhc2VzID0geworICAgICAgICB7MHg2MSwgMHg2MiwgMHg2MywgMHgyN30sCisgICAgICAgIHsweDQzLCAweDRmLCAweDRmLCAweDUwfSwKKyAgICAgICAgezB4NjEsIDB4NjIsIDB4NjN9LAorICAgICAgICB7MHgyNn0sCisgICAgICAgIHsweDI2fSwKKyAgICAgICAgezB4MzR9LAorICAgICAgICB7MHgzNX0sCisgICAgICAgIHsweDZmLCAweDZlLCAweDY1fSwKKyAgICAgICAgezB4NmUsIDB4NmUsIDB4NjV9LAorICAgICAgICB7MHg3MCwgMHg2ZSwgMHg2NX0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAxMCAKKyAgICAgICAgezB4NzQsIDB4NzcsIDB4NmZ9LAorICAgICAgICB7MHg3NSwgMHg3NywgMHg2Zn0sCisgICAgICAgIHsweDY4LCAweDY1LCAweDZjLCAweDZjLCAweDRmfSwKKyAgICAgICAgezB4NjEsIDB4M2MsIDB4M2QsIDB4NjJ9LAorICAgICAgICB7MHg2MSwgMHg2MiwgMHg2M30sCisgICAgICAgIHsweDYxLCAweDQzLCAweDQ4LCAweDYzfSwKKyAgICAgICAgezB4NjEsIDB4NDMsIDB4NDgsIDB4NjN9LCAgLy8gIHNpbXBsZSB0ZXN0IAorICAgICAgICB7MHg3MCwgMHgwMEU5LCAweDYzLCAweDY4LCAweDAwRTl9LAorICAgICAgICB7MHg2MSwgMHg2MiwgMHg2M30sCisgICAgICAgIHsweDYxLCAweDQyLCAweDQzfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDIwIAorICAgICAgICB7MHg2MSwgMHg2MiwgMHg2MywgMHg2OH0sCisgICAgICAgIHsweDYxLCAweDYyLCAweDY0fSwKKyAgICAgICAgezB4MDBFNCwgMHg2MiwgMHg2M30sCisgICAgICAgIHsweDYxLCAweDAwQzYsIDB4NjN9LAorICAgICAgICB7MHg2MSwgMHg0MywgMHg0OCwgMHg2M30sICAvLyAgcHJpbWFyeSB0ZXN0IAorICAgICAgICB7MHg2MiwgMHg2YywgMHg2MSwgMHg2MywgMHg2YiwgMHgyZCwgMHg2MiwgMHg2OSwgMHg3MiwgMHg2NH0sCisgICAgICAgIHsweDM0fSwKKyAgICAgICAgezB4MzV9LAorICAgICAgICB7MHg2ZiwgMHg2ZSwgMHg2NX0sCisgICAgICAgIHsweDYxLCAweDYyLCAweDYzfSwKKyAgICAgICAgezB4NjEsIDB4NDIsIDB4NjN9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgMzAgCisgICAgICAgIHsweDYxLCAweDYyLCAweDYzLCAweDY4fSwKKyAgICAgICAgezB4NjEsIDB4NjIsIDB4NjR9LAorICAgICAgICB7MHg2MSwgMHg0MywgMHg0OCwgMHg2M30sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgMzQgCisgICAgICAgIHsweDYxLCAweDYzLCAweDY1LCAweDMwfSwKKyAgICAgICAgezB4MzEsIDB4MzB9LAorICAgICAgICB7MHg3MCwgMHgwMEVCLDB4MzB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzcgCisgICAgfTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0Q2FzZXMgPSB7CisgICAgICAgIHsweDYxfSwKKyAgICAgICAgezB4NDF9LAorICAgICAgICB7MHgwMGU0fSwKKyAgICAgICAgezB4MDBjNH0sCisgICAgICAgIHsweDYxLCAweDY1fSwKKyAgICAgICAgezB4NjEsIDB4NDV9LAorICAgICAgICB7MHg0MSwgMHg2NX0sCisgICAgICAgIHsweDQxLCAweDQ1fSwKKyAgICAgICAgezB4MDBlNn0sCisgICAgICAgIHsweDAwYzZ9LAorICAgICAgICB7MHg2Mn0sCisgICAgICAgIHsweDYzfSwKKyAgICAgICAgezB4N2F9CisgICAgfTsKKyAgICAKKyAgICBpbnRbXSByZXN1bHRzID0geworICAgICAgICAtMSwKKyAgICAgICAgLTEsIC8vQ29sbGF0b3I6OkdSRUFURVIsCisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgMSwKKyAgICAgICAgMSwKKyAgICAgICAgLTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAxMCAKKyAgICAgICAgMSwKKyAgICAgICAgLTEsCisgICAgICAgIDEsCisgICAgICAgIDEsCisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgLTEsCisgICAgLy8gIHRlc3QgcHJpbWFyeSA+IDE3IAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAyMCAKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAtMSwKKyAgICAvLyAgdGVzdCBzZWNvbmRhcnkgPiAyNiAKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgMzAgCisgICAgICAgIDAsCisgICAgICAgIC0xLAorICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgMzQgCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIC0xIAorICAgIH07CisgICAgCisgICAgZmluYWwgaW50IE1BWF9UT0tFTl9MRU4gPSAxNjsKKyAgICAKKyAgICBwdWJsaWMgUnVsZUJhc2VkQ29sbGF0b3IgbXlDb2xsYXRpb247CisgICAgCisgICAgcHVibGljIENvbGxhdGlvbkR1bW15VGVzdCgpIHsKKyAgICAgICAgU3RyaW5nIHJ1bGVzZXQgPSAiJiBDIDwgY2gsIGNILCBDaCwgQ0ggJiBGaXZlLCA1ICYgRm91ciwgNCAmIG9uZSwgMSAmIEFtcGVyc2FuZDsgJyYnICYgVHdvLCAyICI7CisgICAgICAgIC8vIFN0cmluZyBydWxlc2V0ID0gIiYgRm91ciwgNCI7CisgICAgICAgIG15Q29sbGF0aW9uID0gbnVsbDsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgbXlDb2xsYXRpb24gPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXNldCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgZXJybG4oIkZhaWwgdG8gY3JlYXRlIFJ1bGVCYXNlZENvbGxhdG9yIHdpdGggcnVsZXM6IiArIHJ1bGVzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIHBlcmZvcm0gdGVzdCB3aXRoIHN0cmVuZ3RoIHRlcnRpYXJ5CisgICAgcHVibGljIHZvaWQgVGVzdFRlcnRpYXJ5KCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDE3IDsgaSsrKSB7CisgICAgICAgICAgICBkb1Rlc3QobXlDb2xsYXRpb24sIHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHBlcmZvcm0gdGVzdCB3aXRoIHN0cmVuZ3RoIFBSSU1BUlkKKyAgICBwdWJsaWMgdm9pZCBUZXN0UHJpbWFyeSgpIHsKKyAgICAgICAvLyBwcm9ibGVtIGluIHN0cmNvbGxpbmMgZm9yIHVuZmluc2hlZCBjb250cmFjdGlvbnMgCisgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuUFJJTUFSWSk7CisgICAgICAgIGZvciAoaW50IGkgPSAxNzsgaSA8IDI2IDsgaSsrKSB7CisgICAgICAgICAgICBkb1Rlc3QobXlDb2xsYXRpb24sIHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vcGVyZm9ybSB0ZXN0IHdpdGggc3RyZW5ndGggU0VDT05EQVJZCisgICAgcHVibGljIHZvaWQgVGVzdFNlY29uZGFyeSgpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlNFQ09OREFSWSk7CisgICAgICAgIGZvciAoaSA9IDI2OyBpIDwgMzQ7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KG15Q29sbGF0aW9uLCB0ZXN0U291cmNlQ2FzZXNbaV0sIHRlc3RUYXJnZXRDYXNlc1tpXSwgcmVzdWx0c1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBwZXJmb3JtIGV4dHJhIHRlc3RzCisgICAgcHVibGljIHZvaWQgVGVzdEV4dHJhKCkgeworICAgICAgICBpbnQgaSwgajsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGVzdENhc2VzLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgICAgICAgZm9yIChqID0gaSArIDE7IGogPCB0ZXN0Q2FzZXMubGVuZ3RoOyBqICs9IDEpIHsKKyAgICAgICAgICAgICAgICBkb1Rlc3QobXlDb2xsYXRpb24sIHRlc3RDYXNlc1tpXSwgdGVzdENhc2VzW2pdLCAtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0SWRlbnRpY2FsKCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuSURFTlRJQ0FMKTsKKyAgICAgICAgZm9yIChpPSAzNDsgaTwzNzsgaSsrKSB7CisgICAgICAgICAgICBkb1Rlc3QobXlDb2xsYXRpb24sIHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RKQjU4MSgpIHsKKyAgICAgICAgU3RyaW5nIHNvdXJjZSA9ICJUSElTSVNBVEVTVC4iOworICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gIlRoaXNpc2F0ZXN0LiI7CisgICAgICAgIENvbGxhdG9yIGNvbGwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogRmFpbGVkIHRvIGNyZWF0ZSB0aGUgY29sbGF0b3IgZm9yIDogZW5fVVNcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IHJlc3VsdCA9IGNvbGwuY29tcGFyZShzb3VyY2UsIHRhcmdldCk7CisgICAgICAgIC8vIHJlc3VsdCBpcyAxLCBzZWNvbmRhcnkgZGlmZmVyZW5jZXMgb25seSBmb3IgaWdub3JhYmxlIHNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAxKSB7CisgICAgICAgICAgICBlcnJsbigiQ29tcGFyaW5nIHR3byBzdHJpbmdzIHdpdGggb25seSBzZWNvbmRhcnkgZGlmZmVyZW5jZXMgaW4gQyBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVG8gY29tcGFyZSB0aGVtIHdpdGgganVzdCBwcmltYXJ5IGRpZmZlcmVuY2VzIAorICAgICAgICBjb2xsLnNldFN0cmVuZ3RoKENvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICByZXN1bHQgPSBjb2xsLmNvbXBhcmUoc291cmNlLCB0YXJnZXQpOworICAgICAgICAvLyByZXN1bHQgaXMgMCAKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAwKSB7CisgICAgICAgICAgICBlcnJsbigiQ29tcGFyaW5nIHR3byBzdHJpbmdzIHdpdGggbm8gZGlmZmVyZW5jZXMgaW4gQyBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSAKKyAgICAgICAgICAKKyAgICAgICAgLy8gTm93LCBkbyB0aGUgc2FtZSBjb21wYXJpc29uIHdpdGgga2V5cyAKKyAgICAgICAgQ29sbGF0aW9uS2V5IHNvdXJjZUtleU91dCwgdGFyZ2V0S2V5T3V0OworICAgICAgICBzb3VyY2VLZXlPdXQgPSBjb2xsLmdldENvbGxhdGlvbktleShzb3VyY2UpOworICAgICAgICB0YXJnZXRLZXlPdXQgPSBjb2xsLmdldENvbGxhdGlvbktleSh0YXJnZXQpOworICAgICAgICByZXN1bHQgPSBzb3VyY2VLZXlPdXQuY29tcGFyZVRvKHRhcmdldEtleU91dCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oIkNvbXBhcmluZyB0d28gc3RyaW5ncyB3aXRoIHNvcnQga2V5cyBpbiBDIGZhaWxlZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vVGVzdFN1cnJvZ2F0ZXMoKSBpcyBwb3J0ZWQgZnJvbSBjaW50bHRzdC9jYWxsY29sbC5jCisgICAgCisgICAgLyoqCisgICAgKiBUZXN0cyBzdXJyb2dhdGUgc3VwcG9ydC4KKyAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RTdXJyb2dhdGVzKCkgCisgICAgeworICAgIAlTdHJpbmcgcnVsZXMgPSAiJno8J1x1ZDgwMFx1ZGMwMCc8J1x1ZDgwMFx1ZGMwYVx1MDMwOCc8QSI7CisgICAgICAgIFN0cmluZyBzb3VyY2VbXSA9IHsieiIsCisgICAgICAgIAkgICAgICAgICAgICAgICAiXHVEODAwXHVEQzAwIiwKKyAgICAgICAgCSAgICAgICAgICAgICAgICJcdWQ4MDBcdWRjMGFcdTAzMDgiLAorICAgICAgICAJICAgICAgICAgICAgICAgIlx1ZDgwMFx1ZGMwMiIgICAgCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBTdHJpbmcgdGFyZ2V0W10gPSB7Ilx1RDgwMFx1REMwMCIsCisgICAgICAgIAkgICAgICAgICAgICAgICAiXHVkODAwXHVkYzBhXHUwMzA4IiwKKyAgICAgICAgCSAgICAgICAgICAgICAgICJBIiwKKyAgICAgICAgCSAgICAgICAgICAgICAgICJcdWQ4MDBcdWRjMDMiICAgIAorICAgICAgICB9OworICAgIAorICAgICAgICAvLyB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSBzdXBwbGVtZW50YXJ5IHNvcnQga2V5IG9yZGVyIGluIHRoZSBlbmdsaXNoIAorICAgICAgICAvLyBjb2xsYXRvcgorICAgICAgICBDb2xsYXRvciBlbkNvbGxhdGlvbjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGVuQ29sbGF0aW9uID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkVOR0xJU0gpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBGYWlsZWQgdG8gY3JlYXRlIHRoZSBjb2xsYXRvciBmb3IgRU5HTElTSCIpOworICAgICAgICAgICAgcmV0dXJuOyAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAvLyBsb2dsbigic3RhcnQgb2YgZW5nbGlzaCBjb2xsYXRpb24gc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIHRlc3RcbiIpOworICAgICAgICB3aGlsZSAoY291bnQgPCAyKSB7CisgICAgICAgICAgICBkb1Rlc3QoZW5Db2xsYXRpb24sIHNvdXJjZVtjb3VudF0sIHRhcmdldFtjb3VudF0sIC0xKTsKKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisgICAgICAgIGRvVGVzdChlbkNvbGxhdGlvbiwgc291cmNlW2NvdW50XSwgdGFyZ2V0W2NvdW50XSwgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gbG9nbG4oInN0YXJ0IG9mIHRhaWxvcmVkIGNvbGxhdGlvbiBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgdGVzdFxuIik7CisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgQ29sbGF0b3IgbmV3Q29sbGF0aW9uOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbmV3Q29sbGF0aW9uID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHJ1bGVzKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogRmFpbGVkIHRvIGNyZWF0ZSB0aGUgY29sbGF0b3IgZm9yIHJ1bGVzIik7CisgICAgICAgICAgICByZXR1cm47ICAgICAgIAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyB0ZXN0cyBnZXR0aW5nIGNvbGxhdGlvbiBlbGVtZW50cyBmb3Igc3Vycm9nYXRlcyBmb3IgdGFpbG9yZWQgcnVsZXMgCisgICAgICAgIHdoaWxlIChjb3VudCA8IDQpIHsKKyAgICAgICAgICAgIGRvVGVzdChuZXdDb2xsYXRpb24sIHNvdXJjZVtjb3VudF0sIHRhcmdldFtjb3VudF0sIC0xKTsKKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIHRlc3RzIHRoYXQgXHVEODAxXHVEQzAxIHN0aWxsIGhhcyB0aGUgc2FtZSB2YWx1ZSwgbm90IGNoYW5nZWQgCisgICAgICAgIENvbGxhdGlvbktleSBlbktleSA9IGVuQ29sbGF0aW9uLmdldENvbGxhdGlvbktleShzb3VyY2VbM10pOworICAgICAgICBDb2xsYXRpb25LZXkgbmV3S2V5ID0gbmV3Q29sbGF0aW9uLmdldENvbGxhdGlvbktleShzb3VyY2VbM10pOworICAgICAgICBpbnQga2V5UmVzdWx0ID0gZW5LZXkuY29tcGFyZVRvKG5ld0tleSk7CisgICAgICAgIGlmKGtleVJlc3VsdCAhPSAwKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkIDogbm9uLXRhaWxvcmVkIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZVxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy9UZXN0VmFyaWFibGVUb3AoKSBpcyBwb3J0ZWQgZnJvbSBjaW50bHRzdC9jYWxsY29sbC5jCisgICAgLyoqCisgICAgKiBUZXN0cyB0aGUgW3ZhcmlhYmxlIHRvcF0gdGFnIGluIHJ1bGUgc3ludGF4LiBTaW5jZSB0aGUgZGVmYXVsdCBbYWx0ZXJuYXRlXQorICAgICogdGFnIGhhcyB0aGUgdmFsdWUgc2hpZnRlZCwgYW55IGNvZGVwb2ludHMgYmVmb3JlIFt2YXJpYWJsZSB0b3BdIHNob3VsZCBnaXZlCisgICAgKiBhIHByaW1hcnkgY2Ugb2YgMC4KKyAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RWYXJpYWJsZVRvcCgpIHsKKyAgICAgICAgU3RyaW5nIHJ1bGUgPSAiJnogPSBbdmFyaWFibGUgdG9wXSI7CisgICAgICAgIENvbGxhdG9yICBteUNvbGw7CisgICAgICAgIENvbGxhdG9yICBlbkNvbGw7CisgICAgICAgIGNoYXJbXSBzb3VyY2UgPSBuZXcgY2hhclsxXTsKKyAgICAgICAgY2hhciBjaDsKKyAgICAgICAgaW50IGV4cGVjdGVkW10gPSB7MH07CisgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBlbkNvbGwgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRU5HTElTSCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IEZhaWxlZCB0byBjcmVhdGUgdGhlIGNvbGxhdG9yIGZvciBFTkdMSVNIIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIG15Q29sbCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgICAgICBlcnJsbigiRmFpbCB0byBjcmVhdGUgUnVsZUJhc2VkQ29sbGF0b3Igd2l0aCBydWxlczoiICsgcnVsZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gIAorICAgICAgICBlbkNvbGwuc2V0U3RyZW5ndGgoQ29sbGF0b3IuUFJJTUFSWSk7CisgICAgICAgIG15Q29sbC5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgCisgICAgICAgICgoUnVsZUJhc2VkQ29sbGF0b3IpZW5Db2xsKS5zZXRBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQodHJ1ZSk7CisgICAgICAgICgoUnVsZUJhc2VkQ29sbGF0b3IpbXlDb2xsKS5zZXRBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQodHJ1ZSk7CisgICAgICAgIAorICAgICAgICBpZigoKFJ1bGVCYXNlZENvbGxhdG9yKWVuQ29sbCkuaXNBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQoKSAhPSB0cnVlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IEFMVEVSTkFURV9IQU5ETElORyB2YWx1ZSBjYW4gbm90IGJlIHNldCB0byBTSElGVEVEXG4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gc3BhY2UgaXMgc3VwcG9zZWQgdG8gYmUgYSB2YXJpYWJsZSAKKyAgICAgICAgQ29sbGF0aW9uS2V5IGtleSA9IGVuQ29sbC5nZXRDb2xsYXRpb25LZXkoIiAiKTsgICAKKyAgICAgICAgYnl0ZVtdIHJlc3VsdCA9IGtleS50b0J5dGVBcnJheSgpOyAKKyAgICAgICAgCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmKHJlc3VsdFtpXSE9IGV4cGVjdGVkW2ldKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBTSElGVEVEIGFsdGVybmF0ZSBkb2VzIG5vdCByZXR1cm4gMCBmb3IgcHJpbWFyeSBvZiBzcGFjZVxuIik7ICAKKyAgICAgICAgICAgICAgICBicmVhazsgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjaCA9ICdhJzsKKyAgICAgICAgd2hpbGUgKGNoIDwgJ3onKSB7CisgICAgICAgICAgICBzb3VyY2VbMF0gPSBjaDsKKyAgICAgICAgICAgIGtleSA9IG15Q29sbC5nZXRDb2xsYXRpb25LZXkobmV3IFN0cmluZyhzb3VyY2UpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGtleS50b0J5dGVBcnJheSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYocmVzdWx0W2ldIT0gZXhwZWN0ZWRbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBTSElGVEVEIGFsdGVybmF0ZSBkb2VzIG5vdCByZXR1cm4gMCBmb3IgcHJpbWFyeSBvZiBzcGFjZVxuIik7ICAKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0SkIxNDAxKCkgeworICAgICAgICBDb2xsYXRvciAgICAgbXlDb2xsYXRvciA9IG51bGw7CisgICAgICAgIGNoYXJbXSBORkRfVW5zYWZlU3RhcnRDaGFycyA9IHsKKyAgICAgICAgICAgIDB4MGY3MywgICAgICAgICAgLy8gVGliZXRhbiBWb3dlbCBTaWduIElJIAorICAgICAgICAgICAgMHgwZjc1LCAgICAgICAgICAvLyBUaWJldGFuIFZvd2VsIFNpZ24gVVUgCisgICAgICAgICAgICAweDBmODEsICAgICAgICAgIC8vIFRpYmV0YW4gVm93ZWwgU2lnbiBSZXZlcnNlZCBJSSAKKyAgICAgICAgICAgIDAKKyAgICAgICAgfTsKKyAgICAgICAgaW50IGk7CisgICAgCisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIG15Q29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRU5HTElTSCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogRmFpbGVkIHRvIGNyZWF0ZSB0aGUgY29sbGF0b3IgZm9yIEVOR0xJU0giKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBteUNvbGxhdG9yLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pOworICAgICAgICBmb3IgKGk9MDsgOyBpKyspIHsKKyAgICAgICAgICAgIC8vIEdldCB0aGUgbmV4dCBmdW5ueSBjaGFyYWN0ZXIgdG8gYmUgdGVzdGVkLCBhbmQgc2V0IHVwIHRoZQorICAgICAgICAgICAgLy8gdGhyZWUgdGVzdCBzdHJpbmdzIFgsIFksIFosIGNvbnNpc3Rpbmcgb2YgYW4gQS1ncmF2ZSArIHRlc3QgY2hhciwKKyAgICAgICAgICAgIC8vIGluIG9yaWdpbmFsIGZvcm0sIE5GRCwgYW5kIHRoZW4gTkZDIGZvcm0uCisgICAgICAgICAgICBjaGFyIGMgPSBORkRfVW5zYWZlU3RhcnRDaGFyc1tpXTsKKyAgICAgICAgICAgIGlmIChjPT0wKSB7YnJlYWs7fQorICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgeCA9ICJcdTAwQzAiICsgYzsgICAgICAgLy8gXHUwMEMwIGlzIEEgR3JhdmUKKyAgICAgICAgICAgIFN0cmluZyB5OworICAgICAgICAgICAgU3RyaW5nIHo7CisgICAgCisgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgeSA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKHgsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB6ID0gTm9ybWFsaXplci5kZWNvbXBvc2UoeSwgdHJ1ZSk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogRmFpbGVkIHRvIG5vcm1hbGl6ZSB0ZXN0IG9mIGNoYXJhY3RlciIgKyBjKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgCisgICAgICAgICAgICAvLyBDb2xsYXRpb24gdGVzdC4gIEFsbCB0aHJlZSBzdHJpbmdzIHNob3VsZCBiZSBlcXVhbC4KKyAgICAgICAgICAgIC8vIGRvVGVzdCBkb2VzIGJvdGggc3RyY29sbCBhbmQgc29ydCBrZXlzLCB3aXRoIHBhcmFtcyBpbiBib3RoIG9yZGVycy4KKyAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdG9yLCB4LCB5LCAwKTsKKyAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdG9yLCB4LCB6LCAwKTsKKyAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdG9yLCB5LCB6LCAwKTsgCisgICAgCisgICAgICAgICAgICAvLyBSdW4gY29sbGF0aW9uIGVsZW1lbnQgaXRlcmF0b3JzIG92ZXIgdGhlIHRocmVlIHN0cmluZ3MuICBSZXN1bHRzIHNob3VsZCBiZSBzYW1lIGZvciBlYWNoLgorICAgICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBjZWlYLCBjZWlZLCBjZWlaOworICAgICAgICAgICAgICAgIGludCBjZVgsIGNlWSwgY2VaOworICAgICAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGNlaVggPSAoKFJ1bGVCYXNlZENvbGxhdG9yKW15Q29sbGF0b3IpLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih4KTsKKyAgICAgICAgICAgICAgICAgICAgY2VpWSA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpbXlDb2xsYXRvcikuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHkpOworICAgICAgICAgICAgICAgICAgICBjZWlaID0gKChSdWxlQmFzZWRDb2xsYXRvcilteUNvbGxhdG9yKS5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioeik7CisgICAgICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICBmb3IgKGo9MDs7IGorKykgeworICAgICAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgICAgICAgICBjZVggPSBjZWlYLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlWSA9IGNlaVkubmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2VaID0gY2VpWi5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRVJST1I6IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5uZXh0IGZhaWxlZCBmb3IgaXRlcmF0aW9uICIgKyBqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNlWCAhPSBjZVkgfHwgY2VZICE9IGNlWikgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiB1Y29sX25leHQgZmFpbGVkIGZvciBpdGVyYXRpb24gIiArIGopOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNlWCA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBtYWluIHRlc3QgbWV0aG9kIGNhbGxlZCB3aXRoIGRpZmZlcmVudCBzdHJlbmd0aHMsCisgICAgLy8gdGVzdHMgY29tcGFyaXNvbiBvZiBjdXN0dW0gY29sbGF0aW9uIHdpdGggZGlmZmVyZW50IHN0cmVuZ3RocworICAgIAorICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQ29sbGF0b3IgY29sbGF0aW9uLCBjaGFyW10gc291cmNlLCBjaGFyW10gdGFyZ2V0LCBpbnQgcmVzdWx0KSB7CisgICAgICAgIFN0cmluZyBzID0gbmV3IFN0cmluZyhzb3VyY2UpOworICAgICAgICBTdHJpbmcgdCA9IG5ldyBTdHJpbmcodGFyZ2V0KTsKKyAgICAgICAgZG9UZXN0VmFyaWFudChjb2xsYXRpb24sIHMsIHQsIHJlc3VsdCk7CisgICAgICAgIGlmKHJlc3VsdCA9PSAtMSkgeworICAgICAgICAgICAgZG9UZXN0VmFyaWFudChjb2xsYXRpb24sIHQsIHMsIDEpOworICAgICAgICB9IGVsc2UgaWYocmVzdWx0ID09IDEpIHsKKyAgICAgICAgICAgIGRvVGVzdFZhcmlhbnQoY29sbGF0aW9uLCB0LCBzLCAtMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb1Rlc3RWYXJpYW50KGNvbGxhdGlvbiwgdCwgcywgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gbWFpbiB0ZXN0IG1ldGhvZCBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgc3RyZW5ndGhzLAorICAgIC8vIHRlc3RzIGNvbXBhcmlzb24gb2YgY3VzdHVtIGNvbGxhdGlvbiB3aXRoIGRpZmZlcmVudCBzdHJlbmd0aHMKKyAgICAKKyAgICBwcml2YXRlIHZvaWQgZG9UZXN0KENvbGxhdG9yIGNvbGxhdGlvbixTdHJpbmcgcywgU3RyaW5nIHQsIGludCByZXN1bHQpIHsKKyAgICAgICAgZG9UZXN0VmFyaWFudChjb2xsYXRpb24sIHMsIHQsIHJlc3VsdCk7CisgICAgICAgIGlmKHJlc3VsdCA9PSAtMSkgeworICAgICAgICAgICAgZG9UZXN0VmFyaWFudChjb2xsYXRpb24sIHQsIHMsIDEpOworICAgICAgICB9IGVsc2UgaWYocmVzdWx0ID09IDEpIHsKKyAgICAgICAgICAgIGRvVGVzdFZhcmlhbnQoY29sbGF0aW9uLCB0LCBzLCAtMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb1Rlc3RWYXJpYW50KGNvbGxhdGlvbiwgdCwgcywgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdFZhcmlhbnQoQ29sbGF0b3IgY29sbGF0aW9uLCBTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0LCBpbnQgcmVzdWx0KSB7CisgICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gY29sbGF0aW9uLmNvbXBhcmUoc291cmNlLCB0YXJnZXQpOworICAgICAgICBDb2xsYXRpb25LZXkgc3Jja2V5ICwgdGd0a2V5OworICAgICAgICBzcmNrZXkgPSBjb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHNvdXJjZSk7CisgICAgICAgIHRndGtleSA9IGNvbGxhdGlvbi5nZXRDb2xsYXRpb25LZXkodGFyZ2V0KTsKKyAgICAgICAgaW50IGtleVJlc3VsdCA9IHNyY2tleS5jb21wYXJlVG8odGd0a2V5KTsKKyAgICAgICAgaWYgKGNvbXBhcmVSZXN1bHQgIT0gcmVzdWx0KSB7CisgICAgICAgICAgICBlcnJsbigiU3RyaW5nIGNvbXBhcmlzb24gZmFpbGVkIGluIHZhcmlhbnQgdGVzdFxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleVJlc3VsdCAhPSByZXN1bHQpIHsKKyAgICAgICAgICAgIGVycmxuKCJDb2xsYXRpb24ga2V5IGNvbXBhcmlzb24gZmFpbGVkIGluIHZhcmlhbnQgdGVzdFxuIik7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkVuZ2xpc2hUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uRW5nbGlzaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMThiNTRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkVuZ2xpc2hUZXN0LmphdmEKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogCisgKiAkRGF0ZTogCisgKiAkUmV2aXNpb246IAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2Mi4xIDogQ29sbGF0ZS9Db2xsYXRpb25FbmdsaXNoVGVzdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvZW5jb2xsLmNwcAorICoqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjsKKyAKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworIAorcHVibGljIGNsYXNzIENvbGxhdGlvbkVuZ2xpc2hUZXN0IGV4dGVuZHMgVGVzdEZtd2t7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgbmV3IENvbGxhdGlvbkVuZ2xpc2hUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0U291cmNlQ2FzZXMgPSB7CisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovfSwKKyAgICAgICAgezB4MDA2MiAvKiAnYicgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2QiAvKiAnaycgKi8sIDB4MDAyRCAvKiAnLScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA3MiAvKiAncicgKi8sIDB4MDA2NCAvKiAnZCcgKi99LAorICAgICAgICB7MHgwMDYyIC8qICdiJyAqLywgMHgwMDZDIC8qICdsJyAqLywgMHgwMDYxIC8qICdhJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDZCIC8qICdrJyAqLywgMHgwMDIwIC8qICcgJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDY5IC8qICdpJyAqLywgMHgwMDcyIC8qICdyJyAqLywgMHgwMDY0IC8qICdkJyAqL30sCisgICAgICAgIHsweDAwNjIgLyogJ2InICovLCAweDAwNkMgLyogJ2wnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNkIgLyogJ2snICovLCAweDAwMkQgLyogJy0nICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNjQgLyogJ2QnICovfSwKKyAgICAgICAgezB4MDA0OCAvKiAnSCcgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2RiAvKiAnbycgKi99LAorICAgICAgICB7MHgwMDQxIC8qICdBJyAqLywgMHgwMDQyIC8qICdCJyAqLywgMHgwMDQzIC8qICdDJyAqL30sIAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjIgLyogJ2InICovLCAweDAwNkMgLyogJ2wnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNkIgLyogJ2snICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNjQgLyogJ2QnICovfSwKKyAgICAgICAgezB4MDA2MiAvKiAnYicgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2QiAvKiAnaycgKi8sIDB4MDAyRCAvKiAnLScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA3MiAvKiAncicgKi8sIDB4MDA2NCAvKiAnZCcgKi99LAorICAgICAgICB7MHgwMDYyIC8qICdiJyAqLywgMHgwMDZDIC8qICdsJyAqLywgMHgwMDYxIC8qICdhJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDZCIC8qICdrJyAqLywgMHgwMDJEIC8qICctJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDY5IC8qICdpJyAqLywgMHgwMDcyIC8qICdyJyAqLywgMHgwMDY0IC8qICdkJyAqL30sCisgICAgICAgIHsweDAwNzAgLyogJ3AnICovLCAweDAwRUEsIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2OCAvKiAnaCcgKi8sIDB4MDA2NSAvKiAnZScgKi99LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNzAgLyogJ3AnICovLCAweDAwRTksIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2OCAvKiAnaCcgKi8sIDB4MDBFOX0sCisgICAgICAgIHsweDAwQzQsIDB4MDA0MiAvKiAnQicgKi8sIDB4MDMwOCwgMHgwMDQzIC8qICdDJyAqLywgMHgwMzA4fSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDMwOCwgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNzAgLyogJ3AnICovLCAweDAwRTksIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2OCAvKiAnaCcgKi8sIDB4MDA2NSAvKiAnZScgKi8sIDB4MDA3MiAvKiAncicgKi99LAorICAgICAgICB7MHgwMDcyIC8qICdyJyAqLywgMHgwMDZGIC8qICdvJyAqLywgMHgwMDZDIC8qICdsJyAqLywgMHgwMDY1IC8qICdlJyAqLywgMHgwMDczIC8qICdzJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwKKyAgICAgICAgezB4MDA0MSAvKiAnQScgKi99LAorICAgICAgICB7MHgwMDQxIC8qICdBJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNzQgLyogJ3QnICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNkYgLyogJ28nICovLCAweDAwNkQgLyogJ20nICovLCAweDAwNzAgLyogJ3AnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNjUgLyogJ2UnICovLCAweDAwNzAgLyogJ3AnICovLCAweDAwNkMgLyogJ2wnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNkUgLyogJ24nICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MiAvKiAnYicgKi99LCAKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDAyMyAvKiAnIycgKi8sIDB4MDA2MiAvKiAnYicgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDIzIC8qICcjJyAqLywgMHgwMDYyIC8qICdiJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwKKyAgICAgICAgezB4MDA0MSAvKiAnQScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2NCAvKiAnZCcgKi8sIDB4MDA2MSAvKiAnYScgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY0IC8qICdkJyAqLywgMHgwMDYxIC8qICdhJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNjQgLyogJ2QnICovLCAweDAwNjEgLyogJ2EnICovfSwKKyAgICAgICAgezB4MDBFNiwgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY0IC8qICdkJyAqLywgMHgwMDYxIC8qICdhJyAqL30sCisgICAgICAgIHsweDAwRTQsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2NCAvKiAnZCcgKi8sIDB4MDA2MSAvKiAnYScgKi99LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDQ4IC8qICdIJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAzMDgsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDc0IC8qICd0JyAqLywgMHgwMDY4IC8qICdoJyAqLywgMHgwMDY5IC8qICdpJyAqLywgMHgwMzAyLCAweDAwNzMgLyogJ3MnICovfSwKKyAgICAgICAgezB4MDA3MCAvKiAncCcgKi8sIDB4MDBFQSwgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY4IC8qICdoJyAqLywgMHgwMDY1IC8qICdlJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwRTYsIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDBFNiwgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi99LCAgICAgICAgICAgICAgIAorICAgICAgICB7MHgwMDcwIC8qICdwJyAqLywgMHgwMEU5LCAweDAwNjMgLyogJ2MnICovLCAweDAwNjggLyogJ2gnICovLCAweDAwRTl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0OQorICAgIH07CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdW10gdGVzdFRhcmdldENhc2VzID0geworICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjIgLyogJ2InICovLCAweDAwNkMgLyogJ2wnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNkIgLyogJ2snICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNjQgLyogJ2QnICovfSwKKyAgICAgICAgezB4MDA2MiAvKiAnYicgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2QiAvKiAnaycgKi8sIDB4MDAyRCAvKiAnLScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA3MiAvKiAncicgKi8sIDB4MDA2NCAvKiAnZCcgKi99LAorICAgICAgICB7MHgwMDYyIC8qICdiJyAqLywgMHgwMDZDIC8qICdsJyAqLywgMHgwMDYxIC8qICdhJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDZCIC8qICdrJyAqL30sCisgICAgICAgIHsweDAwNjggLyogJ2gnICovLCAweDAwNjUgLyogJ2UnICovLCAweDAwNkMgLyogJ2wnICovLCAweDAwNkMgLyogJ2wnICovLCAweDAwNkYgLyogJ28nICovfSwKKyAgICAgICAgezB4MDA0MSAvKiAnQScgKi8sIDB4MDA0MiAvKiAnQicgKi8sIDB4MDA0MyAvKiAnQycgKi99LAorICAgICAgICB7MHgwMDQxIC8qICdBJyAqLywgMHgwMDQyIC8qICdCJyAqLywgMHgwMDQzIC8qICdDJyAqL30sCisgICAgICAgIHsweDAwNjIgLyogJ2InICovLCAweDAwNkMgLyogJ2wnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNkIgLyogJ2snICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNjQgLyogJ2QnICovLCAweDAwNzMgLyogJ3MnICovfSwKKyAgICAgICAgezB4MDA2MiAvKiAnYicgKi8sIDB4MDA2QyAvKiAnbCcgKi8sIDB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2QiAvKiAnaycgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2OSAvKiAnaScgKi8sIDB4MDA3MiAvKiAncicgKi8sIDB4MDA2NCAvKiAnZCcgKi8sIDB4MDA3MyAvKiAncycgKi99LAorICAgICAgICB7MHgwMDYyIC8qICdiJyAqLywgMHgwMDZDIC8qICdsJyAqLywgMHgwMDYxIC8qICdhJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDZCIC8qICdrJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDY5IC8qICdpJyAqLywgMHgwMDcyIC8qICdyJyAqLywgMHgwMDY0IC8qICdkJyAqL30sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgezB4MDA3MCAvKiAncCcgKi8sIDB4MDBFOSwgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY4IC8qICdoJyAqLywgMHgwMEU5fSwKKyAgICAgICAgezB4MDA3MCAvKiAncCcgKi8sIDB4MDBFOSwgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY4IC8qICdoJyAqLywgMHgwMDY1IC8qICdlJyAqLywgMHgwMDcyIC8qICdyJyAqL30sCisgICAgICAgIHsweDAwQzQsIDB4MDA0MiAvKiAnQicgKi8sIDB4MDMwOCwgMHgwMDQzIC8qICdDJyAqLywgMHgwMzA4fSwKKyAgICAgICAgezB4MDA0MSAvKiAnQScgKi8sIDB4MDMwOCwgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNzAgLyogJ3AnICovLCAweDAwRTksIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2OCAvKiAnaCcgKi8sIDB4MDA2NSAvKiAnZScgKi99LAorICAgICAgICB7MHgwMDcyIC8qICdyJyAqLywgMHgwMDZGIC8qICdvJyAqLywgMHgwMzAyLCAweDAwNkMgLyogJ2wnICovLCAweDAwNjUgLyogJ2UnICovfSwKKyAgICAgICAgezB4MDA0MSAvKiAnQScgKi8sIDB4MDBFMSwgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY0IC8qICdkJyAqL30sCisgICAgICAgIHsweDAwNDEgLyogJ0EnICovLCAweDAwRTEsIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2NCAvKiAnZCcgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsweDAwNTQgLyogJ1QnICovLCAweDAwNDMgLyogJ0MnICovLCAweDAwNkYgLyogJ28nICovLCAweDAwNkQgLyogJ20nICovLCAweDAwNzAgLyogJ3AnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNzIgLyogJ3InICovLCAweDAwNjUgLyogJ2UnICovLCAweDAwNTAgLyogJ1AnICovLCAweDAwNkMgLyogJ2wnICovLCAweDAwNjEgLyogJ2EnICovLCAweDAwNjkgLyogJ2knICovLCAweDAwNkUgLyogJ24nICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA0MiAvKiAnQicgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDIzIC8qICcjJyAqLywgMHgwMDQyIC8qICdCJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwMjYgLyogJyYnICovLCAweDAwNjIgLyogJ2InICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDAyMyAvKiAnIycgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY0IC8qICdkJyAqLywgMHgwMDYxIC8qICdhJyAqL30sCisgICAgICAgIHsweDAwQzQsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2NCAvKiAnZCcgKi8sIDB4MDA2MSAvKiAnYScgKi99LAorICAgICAgICB7MHgwMEU0LCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovLCAweDAwNjQgLyogJ2QnICovLCAweDAwNjEgLyogJ2EnICovfSwKKyAgICAgICAgezB4MDBDNCwgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY0IC8qICdkJyAqLywgMHgwMDYxIC8qICdhJyAqL30sCisgICAgICAgIHsweDAwQzQsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi8sIDB4MDA2NCAvKiAnZCcgKi8sIDB4MDA2MSAvKiAnYScgKi99LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDIzIC8qICcjJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDAzRCAvKiAnPScgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDYyIC8qICdiJyAqLywgMHgwMDY0IC8qICdkJyAqL30sCisgICAgICAgIHsweDAwRTQsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDQzIC8qICdDJyAqLywgMHgwMDQ4IC8qICdIJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwRTQsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDc0IC8qICd0JyAqLywgMHgwMDY4IC8qICdoJyAqLywgMHgwMEVFLCAweDAwNzMgLyogJ3MnICovfSwKKyAgICAgICAgezB4MDA3MCAvKiAncCcgKi8sIDB4MDBFOSwgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY4IC8qICdoJyAqLywgMHgwMEU5fSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA0MiAvKiAnQicgKi8sIDB4MDA0MyAvKiAnQycgKi99LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2NCAvKiAnZCcgKi99LAorICAgICAgICB7MHgwMEU0LCAweDAwNjIgLyogJ2InICovLCAweDAwNjMgLyogJ2MnICovfSwKKyAgICAgICAgezB4MDA2MSAvKiAnYScgKi8sIDB4MDBDNiwgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNDIgLyogJ0InICovLCAweDAwNjQgLyogJ2QnICovfSwKKyAgICAgICAgezB4MDBFNCwgMHgwMDYyIC8qICdiJyAqLywgMHgwMDYzIC8qICdjJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwQzYsIDB4MDA2MyAvKiAnYycgKi99LAorICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDQyIC8qICdCJyAqLywgMHgwMDY0IC8qICdkJyAqL30sCisgICAgICAgIHsweDAwRTQsIDB4MDA2MiAvKiAnYicgKi8sIDB4MDA2MyAvKiAnYycgKi99LCAgICAgICAgICAKKyAgICAgICAgezB4MDA3MCAvKiAncCcgKi8sIDB4MDBFQSwgMHgwMDYzIC8qICdjJyAqLywgMHgwMDY4IC8qICdoJyAqLywgMHgwMDY1IC8qICdlJyAqL30KKyAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0OQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gcmVzdWx0cyA9IHsKKyAgICAvLy0xOkxFU1M7IDA6RVFVQUw7IDE6R1JFQVRFUgorICAgICAgICAtMSwgCisgICAgICAgIC0xLCAvKkNvbGxhdG9yOjpHUkVBVEVSLCovCisgICAgICAgIC0xLAorICAgICAgICAxLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgICAgICAtMSwKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAtMSwgLypDb2xsYXRvcjo6R1JFQVRFUiwqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMCAqLworICAgICAgICAxLAorICAgICAgICAtMSwKKyAgICAgICAgMCwKKyAgICAgICAgLTEsCisgICAgICAgIDEsCisgICAgICAgIDEsCisgICAgICAgIDEsCisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgLTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIwICovCisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgLTEsCisgICAgICAgIDEsCisgICAgICAgIDEsCisgICAgICAgIDEsCisgICAgICAgIC8qIFRlc3QgVGVydGlhcnkgID4gMjYgKi8KKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAxLAorICAgICAgICAtMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzAgKi8KKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgLyogdGVzdCBpZGVudGljYWwgPiAzNiAqLworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAvKiB0ZXN0IHByaW1hcnkgPiAzOCAqLworICAgICAgICAwLAorICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQwICovCisgICAgICAgIC0xLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAvKiB0ZXN0IHNlY29uZGFyeSA+IDQzICovCisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgMCwKKyAgICAgICAgLTEsCisgICAgICAgIC0xLCAKKyAgICAgICAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0OQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyIFtdW10gdGVzdEJ1Z3MgPSB7CisgICAgICAgIHsweDYxfSwKKyAgICAgICAgezB4NDF9LAorICAgICAgICB7MHg2NX0sCisgICAgICAgIHsweDQ1fSwKKyAgICAgICAgezB4MDBlOX0sCisgICAgICAgIHsweDAwZTh9LAorICAgICAgICB7MHgwMGVhfSwKKyAgICAgICAgezB4MDBlYn0sCisgICAgICAgIHsweDY1LCAweDYxfSwKKyAgICAgICAgezB4Nzh9CisgICAgfTsKKworICAgIC8vIDB4MDMwMCBpcyBncmF2ZSwgMHgwMzAxIGlzIGFjdXRlCisgICAgLy8gdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluIHRoaXMgYXJyYXkgbXVzdCBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgb3JkZXIgaW4gQ29sbGF0aW9uRnJlbmNoVGVzdAorICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RBY3V0ZSA9IHsKKyAgICAgICAgezB4NjUsIDB4NjV9LAorICAgICAgICB7MHg2NSwgMHg2NSwgMHgwMzAxfSwKKyAgICAgICAgezB4NjUsIDB4NjUsIDB4MDMwMSwgMHgwMzAwfSwKKyAgICAgICAgezB4NjUsIDB4NjUsIDB4MDMwMH0sCisgICAgICAgIHsweDY1LCAweDY1LCAweDAzMDAsIDB4MDMwMX0sCisgICAgICAgIHsweDY1LCAweDAzMDEsIDB4NjV9LAorICAgICAgICB7MHg2NSwgMHgwMzAxLCAweDY1LCAweDAzMDF9LAorICAgICAgICB7MHg2NSwgMHgwMzAxLCAweDY1LCAweDAzMDEsIDB4MDMwMH0sCisgICAgICAgIHsweDY1LCAweDAzMDEsIDB4NjUsIDB4MDMwMH0sCisgICAgICAgIHsweDY1LCAweDAzMDEsIDB4NjUsIDB4MDMwMCwgMHgwMzAxfSwKKyAgICAgICAgezB4NjUsIDB4MDMwMSwgMHgwMzAwLCAweDY1fSwKKyAgICAgICAgezB4NjUsIDB4MDMwMSwgMHgwMzAwLCAweDY1LCAweDAzMDF9LAorICAgICAgICB7MHg2NSwgMHgwMzAxLCAweDAzMDAsIDB4NjUsIDB4MDMwMSwgMHgwMzAwfSwKKyAgICAgICAgezB4NjUsIDB4MDMwMSwgMHgwMzAwLCAweDY1LCAweDAzMDB9LAorICAgICAgICB7MHg2NSwgMHgwMzAxLCAweDAzMDAsIDB4NjUsIDB4MDMwMCwgMHgwMzAxfSwKKyAgICAgICAgezB4NjUsIDB4MDMwMCwgMHg2NX0sCisgICAgICAgIHsweDY1LCAweDAzMDAsIDB4NjUsIDB4MDMwMX0sCisgICAgICAgIHsweDY1LCAweDAzMDAsIDB4NjUsIDB4MDMwMSwgMHgwMzAwfSwKKyAgICAgICAgezB4NjUsIDB4MDMwMCwgMHg2NSwgMHgwMzAwfSwKKyAgICAgICAgezB4NjUsIDB4MDMwMCwgMHg2NSwgMHgwMzAwLCAweDAzMDF9LAorICAgICAgICB7MHg2NSwgMHgwMzAwLCAweDAzMDEsIDB4NjV9LAorICAgICAgICB7MHg2NSwgMHgwMzAwLCAweDAzMDEsIDB4NjUsIDB4MDMwMX0sCisgICAgICAgIHsweDY1LCAweDAzMDAsIDB4MDMwMSwgMHg2NSwgMHgwMzAxLCAweDAzMDB9LAorICAgICAgICB7MHg2NSwgMHgwMzAwLCAweDAzMDEsIDB4NjUsIDB4MDMwMH0sCisgICAgICAgIHsweDY1LCAweDAzMDAsIDB4MDMwMSwgMHg2NSwgMHgwMzAwLCAweDAzMDF9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RNb3JlID0geworICAgICAgICB7MHgwMDYxIC8qICdhJyAqLywgMHgwMDY1IC8qICdlJyAqL30sCisgICAgICAgIHsweDAwNjEgLyogJ2EnICovLCAweDAwNjYgLyogJ2YnICovfSwKKyAgICAgICAgeyAweDAwRTZ9LAorICAgICAgICB7IDB4MDBDNn0sCisgICAgICAgIHsweDAwNkYgLyogJ28nICovLCAweDAwNjUgLyogJ2UnICovfSwKKyAgICAgICAgeyAweDAxNTN9LAorICAgICAgICB7IDB4MDE1Mn0sCisgICAgICAgIHsweDAwNkYgLyogJ28nICovLCAweDAwNjYgLyogJ2YnICovfSwKKyAgICB9OworICAgIAorICAgIHByaXZhdGUgQ29sbGF0b3IgbXlDb2xsYXRpb24gPSBudWxsOworICAgIAorICAgIHB1YmxpYyBDb2xsYXRpb25FbmdsaXNoVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG15Q29sbGF0aW9uID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkVOR0xJU0gpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGluIGNyZWF0aW9uIG9mIGNvbGxhdG9yIG9mIEVOR0xJU0ggbG9jYWxlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisgICAgfQorICAgIAorICAgIAorICAgIC8vcGVyZm9ybXMgdGVzdCB3aXRoIHN0cmVuZ3RoIFBSSU1BUlkKKyAgICBwdWJsaWMgdm9pZCBUZXN0UHJpbWFyeSgpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICBmb3IgKGkgPSAzODsgaSA8IDQzIDsgaSsrKSB7CisgICAgICAgICAgICBkb1Rlc3QodGVzdFNvdXJjZUNhc2VzWzM5XSwgdGVzdFRhcmdldENhc2VzWzM5XSwgcmVzdWx0c1szOV0pOworICAgICAgICB9ICAKKyAgICB9CisgICAgCisgICAgLy9wZXJmb3JtIHRlc3Qgd2l0aCBzdHJlbmd0aCBTRUNPTkRBUlkKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2Vjb25kYXJ5KCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuU0VDT05EQVJZKTsKKyAgICAgICAgZm9yIChpID0gNDM7IGkgPCA0OSA7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vdGVzdCBhY3V0ZSBhbmQgZ3JhdmUgb3JkZXJpbmcgKGNvbXBhcmUgdG8gZnJlbmNoIGNvbGxhdGlvbikKKyAgICAgICAgaW50IGo7CisgICAgICAgIGludCBleHBlY3RlZDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlc3RBY3V0ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRlc3RBY3V0ZS5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJpID0gIiArIGkgKyAiOyBqID0gIiArIGopOworICAgICAgICAgICAgICAgIGlmIChpIDwgIGopCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gLTE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSBqKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSAvLyAoaSA+ICBqKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDE7CisgICAgICAgICAgICAgICAgZG9UZXN0KHRlc3RBY3V0ZVtpXSwgdGVzdEFjdXRlW2pdLCBleHBlY3RlZCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vcGVyZm9ybSB0ZXN0IHdpdGggc3RyZW5ndGggVEVSVElBUlkKKyAgICBwdWJsaWMgdm9pZCBUZXN0VGVydGlhcnkoKSB7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICAvL2ZvciAoaSA9IDA7IGkgPCAzOCA7IGkrKykgIC8vYXR0ZW50aW9uOiB0aGVyZSBpcyBzb21ldGhpbmcgd3Jvbmcgd2l0aCAzNiwgMzcuCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOCA7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfSAKKworICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGogPSBpKzE7IGogPCAxMDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvVGVzdCh0ZXN0QnVnc1tpXSwgdGVzdEJ1Z3Nbal0sIC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vdGVzdCBtb3JlIGludGVyZXN0aW5nIGNhc2VzCisgICAgICAgIGludCBleHBlY3RlZDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlc3RNb3JlLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGVzdE1vcmUubGVuZ3RoOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGkgPCAgaikKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAtMTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IGopCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIC8vIChpID4gIGopCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gMTsKKyAgICAgICAgICAgICAgICBkb1Rlc3QodGVzdE1vcmVbaV0sIHRlc3RNb3JlW2pdLCBleHBlY3RlZCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgLy8gbWFpbiB0ZXN0IHJvdXRpbmUsIHRlc3RzIHJ1bGVzIGRlZmluZWQgYnkgdGhlICJlbiIgbG9jYWxlCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdChjaGFyW10gc291cmNlLCBjaGFyW10gdGFyZ2V0LCBpbnQgcmVzdWx0KXsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBzID0gbmV3IFN0cmluZyhzb3VyY2UpOworICAgICAgICBTdHJpbmcgdCA9IG5ldyBTdHJpbmcodGFyZ2V0KTsKKyAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQgPSBteUNvbGxhdGlvbi5jb21wYXJlKHMsIHQpOworICAgICAgICBDb2xsYXRpb25LZXkgc29ydEtleTEsIHNvcnRLZXkyOworICAgICAgICBzb3J0S2V5MSA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleShzKTsKKyAgICAgICAgc29ydEtleTIgPSBteUNvbGxhdGlvbi5nZXRDb2xsYXRpb25LZXkodCk7CisgICAgICAgIGludCBrZXlSZXN1bHQgPSBzb3J0S2V5MS5jb21wYXJlVG8oc29ydEtleTIpOworICAgICAgICByZXBvcnRDUmVzdWx0KHMsIHQsIHNvcnRLZXkxLCBzb3J0S2V5MiwgY29tcGFyZVJlc3VsdCwga2V5UmVzdWx0LCBjb21wYXJlUmVzdWx0LCByZXN1bHQpOworICAgICAgICAKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHJlcG9ydENSZXN1bHQoIFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQsIENvbGxhdGlvbktleSBzb3VyY2VLZXksIENvbGxhdGlvbktleSB0YXJnZXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21wYXJlUmVzdWx0LCBpbnQga2V5UmVzdWx0LCBpbnQgaW5jUmVzdWx0LCBpbnQgZXhwZWN0ZWRSZXN1bHQgKXsKKyAgICAgICAgaWYgKGV4cGVjdGVkUmVzdWx0IDwgLTEgfHwgZXhwZWN0ZWRSZXN1bHQgPiAxKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiKioqKiogaW52YWxpZCBjYWxsIHRvIHJlcG9ydENSZXN1bHQgKioqKiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBvazEgPSAoY29tcGFyZVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2syID0gKGtleVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2szID0gKGluY1Jlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG9rMSAmJiBvazIgJiYgb2szICYmICFpc1ZlcmJvc2UoKSl7CisgICAgICAgICAgICByZXR1cm47ICAgIAorICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc0V4cGVjdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgU3RyaW5nIHNSZXN1bHQgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGNvbXBhcmVSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgc0V4cGVjdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoZXhwZWN0ZWRSZXN1bHQsIHNFeHBlY3QpOworICAgICAgICAgICAgaWYgKG9rMSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworCisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChpbmNSZXN1bHQsIHNSZXN1bHQpOworCisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIGFwcGVuZENvbXBhcmVSZXN1bHQoaW50IHJlc3VsdCwgU3RyaW5nIHRhcmdldCl7CisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpICAgLy9MRVNTCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiTEVTUyI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IDApICAgLy9FUVVBTAorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkVRVUFMIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gMSkgICAvL0dSRUFURVIKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0ICs9ICJHUkVBVEVSIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBodWggPSAiPyI7CisKKyAgICAgICAgICAgIHRhcmdldCArPSBodWggKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHByZXR0aWZ5KENvbGxhdGlvbktleSBzb3VyY2VLZXkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGJ5dGVbXSBieXRlcz0gc291cmNlS2V5LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIFN0cmluZyB0YXJnZXQgPSAiWyI7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGFyZ2V0ICs9IEludGVnZXIudG9IZXhTdHJpbmcoYnl0ZXNbaV0pOworICAgICAgICAgICAgdGFyZ2V0ICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gIl0iOworICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKyB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkZpbm5pc2hUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uRmlubmlzaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmZjZWRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkZpbm5pc2hUZXN0LmphdmEKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogCisgKiAkRGF0ZTogCisgKiAkUmV2aXNpb246IAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2Mi4xIDogQ29sbGF0ZS9Db2xsYXRpb25GaW5uaXNoVGVzdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvZmljb2xsLmNwcAorICoqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjsKKyAKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworIAorcHVibGljIGNsYXNzIENvbGxhdGlvbkZpbm5pc2hUZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgQ29sbGF0aW9uRmlubmlzaFRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RTb3VyY2VDYXNlcyA9IHsKKyAgICAgICAgezB4NzcsIDB4NjEsIDB4NzR9LAorICAgICAgICB7MHg3NiwgMHg2MSwgMHg3NH0sCisgICAgICAgIHsweDYxLCAweDAwRkMsIDB4NjIsIDB4NjUsIDB4NjMsIDB4NmJ9LAorICAgICAgICB7MHg0YywgMHgwMEU1LCAweDc2LCAweDY5fSwKKyAgICAgICAgezB4NzcsIDB4NjEsIDB4NzR9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RUYXJnZXRDYXNlcyA9IHsKKyAgICAgICAgezB4NzYsIDB4NjEsIDB4NzR9LAorICAgICAgICB7MHg3NywgMHg2MSwgMHg3OX0sCisgICAgICAgIHsweDYxLCAweDc4LCAweDYyLCAweDY1LCAweDYzLCAweDZifSwKKyAgICAgICAgezB4NGMsIDB4MDBFNCwgMHg3NywgMHg2NX0sCisgICAgICAgIHsweDc2LCAweDYxLCAweDc0fQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSByZXN1bHRzID0geworICAgICAgICAxLAorICAgICAgICAtMSwKKyAgICAgICAgMSwKKyAgICAgICAgLTEsCisgICAgICAgIC8vIHRlc3QgcHJpbWFyeSA+IDQKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcHJpdmF0ZSBDb2xsYXRvciBteUNvbGxhdGlvbiA9IG51bGw7CisgICAgCisgICAgcHVibGljIENvbGxhdGlvbkZpbm5pc2hUZXN0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbXlDb2xsYXRpb24gPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJmaSIsICJGSSIpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgRklOTklTSCBsb2NhbGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBwZXJmb3JtIHRlc3RzIHdpdGggc3RyZW5ndGggUFJJTUFSWQorICAgIHB1YmxpYyB2b2lkIFRlc3RQcmltYXJ5KCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICBmb3IoaSA9IDQ7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgICAgIGRvVGVzdCh0ZXN0U291cmNlQ2FzZXNbaV0sIHRlc3RUYXJnZXRDYXNlc1tpXSwgcmVzdWx0c1tpXSk7ICAgIAorICAgICAgICB9ICAgICAgICAgCisgICAgfQorICAgIAorICAgIC8vIHBlcmZvcm0gdGVzdCB3aXRoIHN0cmVuZ3RoIFRFUlRJQVJZCisgICAgcHVibGljIHZvaWQgVGVzdFRlcnRpYXJ5KCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSsrICkgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfSAgICAKKyAgICB9CisgICAgCisgICAgLy8gbWFpbiB0ZXN0IHJvdXRpbmUsIHRlc3RzIHJ1bGVzIHNwZWNpZmljIHRvIHRoZSBmaW5pc2ggbG9jYWxlCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdChjaGFyW10gc291cmNlLCBjaGFyW10gdGFyZ2V0LCBpbnQgcmVzdWx0KSB7CisgICAgICAgIFN0cmluZyBzID0gbmV3IFN0cmluZyhzb3VyY2UpOworICAgICAgICBTdHJpbmcgdCA9IG5ldyBTdHJpbmcodGFyZ2V0KTsKKyAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQgPSBteUNvbGxhdGlvbi5jb21wYXJlKHMsIHQpOworICAgICAgICBDb2xsYXRpb25LZXkgc29ydEtleTEsIHNvcnRLZXkyOworICAgICAgICBzb3J0S2V5MSA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleShzKTsKKyAgICAgICAgc29ydEtleTIgPSBteUNvbGxhdGlvbi5nZXRDb2xsYXRpb25LZXkodCk7CisgICAgICAgIGludCBrZXlSZXN1bHQgPSBzb3J0S2V5MS5jb21wYXJlVG8oc29ydEtleTIpOworICAgICAgICByZXBvcnRDUmVzdWx0KHMsIHQsIHNvcnRLZXkxLCBzb3J0S2V5MiwgY29tcGFyZVJlc3VsdCwga2V5UmVzdWx0LCBjb21wYXJlUmVzdWx0LCByZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApIHsKKyAgICAgICAgaWYgKGV4cGVjdGVkUmVzdWx0IDwgLTEgfHwgZXhwZWN0ZWRSZXN1bHQgPiAxKSB7CisgICAgICAgICAgICBlcnJsbigiKioqKiogaW52YWxpZCBjYWxsIHRvIHJlcG9ydENSZXN1bHQgKioqKiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBvazEgPSAoY29tcGFyZVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2syID0gKGtleVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2szID0gKGluY1Jlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG9rMSAmJiBvazIgJiYgb2szICYmICFpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgcmV0dXJuOyAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc0V4cGVjdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgU3RyaW5nIHNSZXN1bHQgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGNvbXBhcmVSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgc0V4cGVjdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoZXhwZWN0ZWRSZXN1bHQsIHNFeHBlY3QpOworICAgICAgICAgICAgaWYgKG9rMSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworCisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChpbmNSZXN1bHQsIHNSZXN1bHQpOworCisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgYXBwZW5kQ29tcGFyZVJlc3VsdChpbnQgcmVzdWx0LCBTdHJpbmcgdGFyZ2V0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiTEVTUyI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiRVFVQUwiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkdSRUFURVIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGh1aCA9ICI/IjsKKyAgICAgICAgICAgIHRhcmdldCArPSBodWggKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHByZXR0aWZ5KENvbGxhdGlvbktleSBzb3VyY2VLZXkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGJ5dGVbXSBieXRlcz0gc291cmNlS2V5LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIFN0cmluZyB0YXJnZXQgPSAiWyI7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGFyZ2V0ICs9IEludGVnZXIudG9IZXhTdHJpbmcoYnl0ZXNbaV0pOworICAgICAgICAgICAgdGFyZ2V0ICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gIl0iOworICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KK30KKyAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uRnJlbmNoVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkZyZW5jaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzk2NTVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkZyZW5jaFRlc3QuamF2YQpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAKKyAqICREYXRlOiAKKyAqICRSZXZpc2lvbjogCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYyLjEgOiBDb2xsYXRlL0NvbGxhdGlvbkZyZW5jaFRlc3QKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L2ZyY29sbC5jcHAKKyAqKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisgCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKyAKK3B1YmxpYyBjbGFzcyBDb2xsYXRpb25GcmVuY2hUZXN0IGV4dGVuZHMgVGVzdEZtd2t7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBDb2xsYXRpb25GcmVuY2hUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0U291cmNlQ2FzZXMgPSB7CisgICAgICAgIHsweDAwNjEvKidhJyovLCAweDAwNjIvKidiJyovLCAweDAwNjMvKidjJyovfSwKKyAgICAgICAgezB4MDA0My8qJ0MnKi8sIDB4MDA0Zi8qJ08nKi8sIDB4MDA1NC8qJ1QnKi8sIDB4MDA0NS8qJ0UnKi99LAorICAgICAgICB7MHgwMDYzLyonYycqLywgMHgwMDZmLyonbycqLywgMHgwMDJkLyonLScqLywgMHgwMDZmLyonbycqLywgMHgwMDcwLyoncCcqL30sCisgICAgICAgIHsweDAwNzAvKidwJyovLCAweDAwRUEsIDB4MDA2My8qJ2MnKi8sIDB4MDA2OC8qJ2gnKi8sIDB4MDA2NS8qJ2UnKi99LAorICAgICAgICB7MHgwMDcwLyoncCcqLywgMHgwMEVBLCAweDAwNjMvKidjJyovLCAweDAwNjgvKidoJyovLCAweDAwNjUvKidlJyovLCAweDAwNzIvKidyJyovfSwKKyAgICAgICAgezB4MDA3MC8qJ3AnKi8sIDB4MDBFOSwgMHgwMDYzLyonYycqLywgMHgwMDY4LyonaCcqLywgMHgwMDY1LyonZScqLywgMHgwMDcyLyoncicqL30sCisgICAgICAgIHsweDAwNzAvKidwJyovLCAweDAwRTksIDB4MDA2My8qJ2MnKi8sIDB4MDA2OC8qJ2gnKi8sIDB4MDA2NS8qJ2UnKi8sIDB4MDA3Mi8qJ3InKi99LAorICAgICAgICB7MHgwMDQ4LyonSCcqLywgMHgwMDY1LyonZScqLywgMHgwMDZjLyonbCcqLywgMHgwMDZjLyonbCcqLywgMHgwMDZmLyonbycqL30sCisgICAgICAgIHsweDAxZjF9LAorICAgICAgICB7MHhmYjAwfSwKKyAgICAgICAgezB4MDFmYX0sCisgICAgICAgIHsweDAxMDF9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RUYXJnZXRDYXNlcyA9IHsKKyAgICAgICAgezB4MDA0MS8qJ0EnKi8sIDB4MDA0Mi8qJ0InKi8sIDB4MDA0My8qJ0MnKi99LAorICAgICAgICB7MHgwMDYzLyonYycqLywgMHgwMGY0LCAweDAwNzQvKid0JyovLCAweDAwNjUvKidlJyovfSwKKyAgICAgICAgezB4MDA0My8qJ0MnKi8sIDB4MDA0Zi8qJ08nKi8sIDB4MDA0Zi8qJ08nKi8sIDB4MDA1MC8qJ1AnKi99LAorICAgICAgICB7MHgwMDcwLyoncCcqLywgMHgwMEU5LCAweDAwNjMvKidjJyovLCAweDAwNjgvKidoJyovLCAweDAwRTl9LAorICAgICAgICB7MHgwMDcwLyoncCcqLywgIDB4MDBFOSwgMHgwMDYzLyonYycqLywgMHgwMDY4LyonaCcqLywgMHgwMEU5fSwKKyAgICAgICAgezB4MDA3MC8qJ3AnKi8sIDB4MDBFQSwgMHgwMDYzLyonYycqLywgMHgwMDY4LyonaCcqLywgMHgwMDY1LyonZScqL30sCisgICAgICAgIHsweDAwNzAvKidwJyovLCAweDAwRUEsIDB4MDA2My8qJ2MnKi8sIDB4MDA2OC8qJ2gnKi8sIDB4MDA2NS8qJ2UnKi8sIDB4MDA3Mi8qJ3InKi99LAorICAgICAgICB7MHgwMDY4LyonaCcqLywgMHgwMDY1LyonZScqLywgMHgwMDZjLyonbCcqLywgMHgwMDZjLyonbCcqLywgMHgwMDRmLyonTycqL30sCisgICAgICAgIHsweDAxZWV9LAorICAgICAgICB7MHgyNWNhfSwKKyAgICAgICAgezB4MDBlMH0sCisgICAgICAgIHsweDAxZGZ9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGludFtdIHJlc3VsdHMgPSB7CisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgLTEsIC8qQ29sbGF0b3I6OkdSRUFURVIsKi8KKyAgICAgICAgLTEsCisgICAgICAgIDEsCisgICAgICAgIDEsCisgICAgICAgIC0xLAorICAgICAgICAxLAorICAgICAgIC0xLCAvKkNvbGxhdG9yOjpHUkVBVEVSLCovCisgICAgICAgIDEsCisgICAgICAgIC0xLAorICAgICAgICAtMQorICAgIH07CisKKyAgICAvLyAweDAzMDAgaXMgZ3JhdmUsIDB4MDMwMSBpcyBhY3V0ZQorICAgIC8vIHRoZSBvcmRlciBvZiBlbGVtZW50cyBpbiB0aGlzIGFycmF5IG11c3QgYmUgZGlmZmVyZW50IHRoYW4gdGhlIG9yZGVyIGluIENvbGxhdGlvbkVuZ2xpc2hUZXN0CisgICAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdW10gdGVzdEFjdXRlID0geworICAgIC8qMDAqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMDY1LyonZScqL30sCisgICAgLyowMSovICAgIHsweDAwNjUvKidlJyovLCAweDAzMDEsIDB4MDA2NS8qJ2UnKi99LAorICAgIC8qMDIqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMzAwLCAweDAzMDEsIDB4MDA2NS8qJ2UnKi99LAorICAgIC8qMDMqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMzAwLCAweDAwNjUvKidlJyovfSwKKyAgICAvKjA0Ki8gICAgezB4MDA2NS8qJ2UnKi8sIDB4MDMwMSwgMHgwMzAwLCAweDAwNjUvKidlJyovfSwKKyAgICAvKjA1Ki8gICAgezB4MDA2NS8qJ2UnKi8sIDB4MDA2NS8qJ2UnKi8sIDB4MDMwMX0sIAorICAgIC8qMDYqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMzAxLCAweDAwNjUvKidlJyovLCAweDAzMDF9LAorICAgIC8qMDcqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMzAwLCAweDAzMDEsIDB4MDA2NS8qJ2UnKi8sIDB4MDMwMX0sCisgICAgLyowOCovICAgIHsweDAwNjUvKidlJyovLCAweDAzMDAsIDB4MDA2NS8qJ2UnKi8sIDB4MDMwMX0sCisgICAgLyowOSovICAgIHsweDAwNjUvKidlJyovLCAweDAzMDEsIDB4MDMwMCwgMHgwMDY1LyonZScqLywgMHgwMzAxfSwKKyAgICAvKjBhKi8gICAgezB4MDA2NS8qJ2UnKi8sIDB4MDA2NS8qJ2UnKi8sIDB4MDMwMCwgMHgwMzAxfSwKKyAgICAvKjBiKi8gICAgezB4MDA2NS8qJ2UnKi8sIDB4MDMwMSwgMHgwMDY1LyonZScqLywgMHgwMzAwLCAweDAzMDF9LAorICAgIC8qMGMqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMzAwLCAweDAzMDEsIDB4MDA2NS8qJ2UnKi8sIDB4MDMwMCwgMHgwMzAxfSwKKyAgICAvKjBkKi8gICAgezB4MDA2NS8qJ2UnKi8sIDB4MDMwMCwgMHgwMDY1LyonZScqLywgMHgwMzAwLCAweDAzMDF9LAorICAgIC8qMGUqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMzAxLCAweDAzMDAsIDB4MDA2NS8qJ2UnKi8sIDB4MDMwMCwgMHgwMzAxfSwKKyAgICAvKjBmKi8gICAgezB4MDA2NS8qJ2UnKi8sIDB4MDA2NS8qJ2UnKi8sIDB4MDMwMH0sCisgICAgLyoxMCovICAgIHsweDAwNjUvKidlJyovLCAweDAzMDEsIDB4MDA2NS8qJ2UnKi8sIDB4MDMwMH0sCisgICAgLyoxMSovICAgIHsweDAwNjUvKidlJyovLCAweDAzMDAsIDB4MDMwMSwgMHgwMDY1LyonZScqLywgMHgwMzAwfSwKKyAgICAvKjEyKi8gICAgezB4MDA2NS8qJ2UnKi8sIDB4MDMwMCwgMHgwMDY1LyonZScqLywgMHgwMzAwfSwKKyAgICAvKjEzKi8gICAgezB4MDA2NS8qJ2UnKi8sIDB4MDMwMSwgMHgwMzAwLCAweDAwNjUvKidlJyovLCAweDAzMDB9LAorICAgIC8qMTQqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMDY1LyonZScqLywgMHgwMzAxLCAweDAzMDB9LAorICAgIC8qMTUqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMzAxLCAweDAwNjUvKidlJyovLCAweDAzMDEsIDB4MDMwMH0sCisgICAgLyoxNiovICAgIHsweDAwNjUvKidlJyovLCAweDAzMDAsIDB4MDMwMSwgMHgwMDY1LyonZScqLywgMHgwMzAxLCAweDAzMDB9LAorICAgIC8qMTcqLyAgICB7MHgwMDY1LyonZScqLywgMHgwMzAwLCAweDAwNjUvKidlJyovLCAweDAzMDEsIDB4MDMwMH0sCisgICAgLyoxOCovICAgIHsweDAwNjUvKidlJyovLCAweDAzMDEsIDB4MDMwMCwgMHgwMDY1LyonZScqLywgMHgwMzAxLCAweDAzMDB9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RCdWdzID0geworICAgICAgICB7MHgwMDYxLyonYScqL30sCisgICAgICAgIHsweDAwNDEvKidBJyovfSwKKyAgICAgICAgezB4MDA2NS8qJ2UnKi99LAorICAgICAgICB7MHgwMDQ1LyonRScqL30sCisgICAgICAgIHsweDAwZTl9LAorICAgICAgICB7MHgwMGU4fSwKKyAgICAgICAgezB4MDBlYX0sCisgICAgICAgIHsweDAwZWJ9LAorICAgICAgICB7MHgwMDY1LyonZScqLywgMHgwMDYxLyonYScqL30sCisgICAgICAgIHsweDAwNzgvKid4JyovfQorICAgIH07CisgICAgCisgICAgCisgICAgcHJpdmF0ZSBDb2xsYXRvciBteUNvbGxhdGlvbiA9IG51bGw7CisgICAgCisgICAgcHVibGljIENvbGxhdGlvbkZyZW5jaFRlc3QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBteUNvbGxhdGlvbiA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5GUkVOQ0gpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBpbiBjcmVhdGlvbiBvZiBjb2xsYXRvciBvZiBGUkVOQ0ggbG9jYWxlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgIAorICAgICAKKyAgICAvLyBwZXJmb3JtIHRlc3RzIHdpdGggc3RyZW5ndGggVEVSVElBUlkKKyAgICBwdWJsaWMgdm9pZCBUZXN0VGVydGlhcnkoKSB7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICAKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyIDsgaSsrKSB7CisgICAgICAgICAgICBkb1Rlc3QodGVzdFNvdXJjZUNhc2VzW2ldLCB0ZXN0VGFyZ2V0Q2FzZXNbaV0sIHJlc3VsdHNbaV0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIHBlcmZvcm0gdGVzdHMgd2l0aCBzdHJlbmd0aCBTRUNPTkRBUlkKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2Vjb25kYXJ5KCkgeworICAgICAgICAvL3Rlc3QgYWN1dGUgYW5kIGdyYXZlIG9yZGVyaW5nCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGludCBleHBlY3RlZDsKKworICAgICAgICBteUNvbGxhdGlvbi5zZXRTdHJlbmd0aChDb2xsYXRvci5TRUNPTkRBUlkpOworICAgICAgICAKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlc3RBY3V0ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRlc3RBY3V0ZS5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChpIDwgIGopIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAtMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gaikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkb1Rlc3QodGVzdEFjdXRlW2ldLCB0ZXN0QWN1dGVbal0sIGV4cGVjdGVkICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBwZXJmb3JtIGV4dHJhIHRlc3RzCisgICAgcHVibGljIHZvaWQgVGVzdEV4dHJhKCkgeworICAgICAgICBpbnQgaSwgajsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgOSA7IGkrKykgeworICAgICAgICAgICAgZm9yIChqID0gaSArIDE7IGogPCAxMDsgaiArPSAxKSB7CisgICAgICAgICAgICAgICAgZG9UZXN0KHRlc3RCdWdzW2ldLCB0ZXN0QnVnc1tqXSwgLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICAKKyAgICAvLyBtYWluIHRlc3Qgcm91dGluZSwgdGVzdCBydWxlcyBzcGVjaWZpYyB0byB0aGUgZnJlbmNoIGxvY2FsZQorICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoY2hhcltdIHNvdXJjZSwgY2hhcltdIHRhcmdldCwgaW50IHJlc3VsdCkgeworICAgICAgICBTdHJpbmcgcyA9IG5ldyBTdHJpbmcoc291cmNlKTsKKyAgICAgICAgU3RyaW5nIHQgPSBuZXcgU3RyaW5nKHRhcmdldCk7CisgICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gbXlDb2xsYXRpb24uY29tcGFyZShzLCB0KTsKKyAgICAgICAgQ29sbGF0aW9uS2V5IHNvcnRLZXkxLCBzb3J0S2V5MjsKKyAgICAgICAgc29ydEtleTEgPSBteUNvbGxhdGlvbi5nZXRDb2xsYXRpb25LZXkocyk7CisgICAgICAgIHNvcnRLZXkyID0gbXlDb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHQpOworICAgICAgICBpbnQga2V5UmVzdWx0ID0gc29ydEtleTEuY29tcGFyZVRvKHNvcnRLZXkyKTsKKyAgICAgICAgcmVwb3J0Q1Jlc3VsdChzLCB0LCBzb3J0S2V5MSwgc29ydEtleTIsIGNvbXBhcmVSZXN1bHQsIGtleVJlc3VsdCwgY29tcGFyZVJlc3VsdCwgcmVzdWx0KTsgIAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApIHsKKyAgICAgICAgaWYgKGV4cGVjdGVkUmVzdWx0IDwgLTEgfHwgZXhwZWN0ZWRSZXN1bHQgPiAxKSB7CisgICAgICAgICAgICBlcnJsbigiKioqKiogaW52YWxpZCBjYWxsIHRvIHJlcG9ydENSZXN1bHQgKioqKiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBvazEgPSAoY29tcGFyZVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2syID0gKGtleVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2szID0gKGluY1Jlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG9rMSAmJiBvazIgJiYgb2szICYmICFpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgcmV0dXJuOyAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc0V4cGVjdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgU3RyaW5nIHNSZXN1bHQgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGNvbXBhcmVSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgc0V4cGVjdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoZXhwZWN0ZWRSZXN1bHQsIHNFeHBlY3QpOworICAgICAgICAgICAgaWYgKG9rMSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworCisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChpbmNSZXN1bHQsIHNSZXN1bHQpOworCisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgYXBwZW5kQ29tcGFyZVJlc3VsdChpbnQgcmVzdWx0LCBTdHJpbmcgdGFyZ2V0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiTEVTUyI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiRVFVQUwiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkdSRUFURVIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGh1aCA9ICI/IjsKKyAgICAgICAgICAgIHRhcmdldCArPSBodWggKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHByZXR0aWZ5KENvbGxhdGlvbktleSBzb3VyY2VLZXkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGJ5dGVbXSBieXRlcz0gc291cmNlS2V5LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIFN0cmluZyB0YXJnZXQgPSAiWyI7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGFyZ2V0ICs9IEludGVnZXIudG9IZXhTdHJpbmcoYnl0ZXNbaV0pOworICAgICAgICAgICAgdGFyZ2V0ICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gIl0iOworICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KK30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkdlcm1hblRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25HZXJtYW5UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyMmIyOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25HZXJtYW5UZXN0LmphdmEKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogCisgKiAkRGF0ZTogCisgKiAkUmV2aXNpb246IAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2Mi4xIDogQ29sbGF0ZS9Db2xsYXRpb25HZXJtYW5UZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9kZWNvbGwuY3BwCisgKiovCisgCisgcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjsKKyAKKyBpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKKyBpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworIGltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworIAorIHB1YmxpYyBjbGFzcyBDb2xsYXRpb25HZXJtYW5UZXN0IGV4dGVuZHMgVGVzdEZtd2t7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgbmV3IENvbGxhdGlvbkdlcm1hblRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RTb3VyY2VDYXNlcyA9IHsKKyAgICAgICAgezB4NDcsIDB4NzIsIDB4MDBGNiwgMHgwMERGLCAweDY1fSwKKyAgICAgICAgezB4NjEsIDB4NjIsIDB4NjN9LAorICAgICAgICB7MHg1NCwgMHgwMEY2LCAweDZlLCAweDY1fSwKKyAgICAgICAgezB4NTQsIDB4MDBGNiwgMHg2ZSwgMHg2NX0sCisgICAgICAgIHsweDU0LCAweDAwRjYsIDB4NmUsIDB4NjV9LAorICAgICAgICB7MHg2MSwgMHgwMzA4LCAweDYyLCAweDYzfSwKKyAgICAgICAgezB4MDBFNCwgMHg2MiwgMHg2M30sCisgICAgICAgIHsweDAwRTQsIDB4NjIsIDB4NjN9LAorICAgICAgICB7MHg1MywgMHg3NCwgMHg3MiwgMHg2MSwgMHgwMERGLCAweDY1fSwKKyAgICAgICAgezB4NjUsIDB4NjYsIDB4Njd9LAorICAgICAgICB7MHgwMEU0LCAweDYyLCAweDYzfSwKKyAgICAgICAgezB4NTMsIDB4NzQsIDB4NzIsIDB4NjEsIDB4MDBERiwgMHg2NX0KKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdW10gdGVzdFRhcmdldENhc2VzID0geworICAgICAgICB7MHg0NywgMHg3MiwgMHg2ZiwgMHg3MywgMHg3MywgMHg2OSwgMHg3MywgMHg3NH0sCisgICAgICAgIHsweDYxLCAweDAzMDgsIDB4NjIsIDB4NjN9LAorICAgICAgICB7MHg1NCwgMHg2ZiwgMHg2ZX0sCisgICAgICAgIHsweDU0LCAweDZmLCAweDY0fSwKKyAgICAgICAgezB4NTQsIDB4NmYsIDB4NjYsIDB4NzV9LAorICAgICAgICB7MHg0MSwgMHgwMzA4LCAweDYyLCAweDYzfSwKKyAgICAgICAgezB4NjEsIDB4MDMwOCwgMHg2MiwgMHg2M30sCisgICAgICAgIHsweDYxLCAweDY1LCAweDYyLCAweDYzfSwKKyAgICAgICAgezB4NTMsIDB4NzQsIDB4NzIsIDB4NjEsIDB4NzMsIDB4NzMsIDB4NjV9LAorICAgICAgICB7MHg2NSwgMHg2NiwgMHg2N30sCisgICAgICAgIHsweDYxLCAweDY1LCAweDYyLCAweDYzfSwKKyAgICAgICAgezB4NTMsIDB4NzQsIDB4NzIsIDB4NjEsIDB4NzMsIDB4NzMsIDB4NjV9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGludCByZXN1bHRzW11bXSA9CisgICAgeworICAgICAgICAvLyAgUHJpbWFyeSAgVGVydGlhcnkKKyAgICAgICAgeyAtMSwgICAgICAgIC0xIH0sCisgICAgICAgIHsgMCwgICAgICAgICAtMSB9LAorICAgICAgICB7IDEsICAgICAgICAgIDEgfSwKKyAgICAgICAgeyAxLCAgICAgICAgICAxIH0sCisgICAgICAgIHsgMSwgICAgICAgICAgMSB9LAorICAgICAgICB7IDAsICAgICAgICAgLTEgfSwKKyAgICAgICAgeyAwLCAgICAgICAgICAwIH0sCisgICAgICAgIHsgLTEsICAgICAgICAtMSB9LAorICAgICAgICB7IDAsICAgICAgICAgIDEgfSwKKyAgICAgICAgeyAwLCAgICAgICAgICAwIH0sCisgICAgICAgIHsgLTEsICAgICAgICAtMSB9LAorICAgICAgICB7IDAsICAgICAgICAgIDEgfQorICAgIH07CisgICAgCisgICAgcHJpdmF0ZSBDb2xsYXRvciBteUNvbGxhdGlvbiA9IG51bGw7CisgICAgCisgICAgcHVibGljIENvbGxhdGlvbkdlcm1hblRlc3QoKSB7CisgICAgICAgIG15Q29sbGF0aW9uID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkdFUk1BTik7CisgICAgICAgIGlmKG15Q29sbGF0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgR0VSTUFOIGxvY2FsZSIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIHBlcmZvcm0gdGVzdCB3aXRoIHN0cmVuZ3RoIFRFUlRJQVJZCisgICAgcHVibGljIHZvaWQgVGVzdFRlcnRpYXJ5KCl7CisgICAgICAgIGlmKG15Q29sbGF0aW9uID09IG51bGwgKSB7CisgICAgICAgICAgICBlcnJsbigiZGVjb2xsOiBjYW5ub3Qgc3RhcnQgdGVzdCwgY29sbGF0b3IgaXMgbnVsbFxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMiA7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldWzFdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBwZXJmb3JtIHRlc3Qgd2l0aCBzdHJlbmd0aCBTRUNPTkRBUlkKKyAgICAvL1RoaXMgbWV0aG9kIGluIGljdTRjIGhhcyBubyBpbXBsZW1lbnRhdGlvbi4KKyAgICBwdWJsaWMgdm9pZCBUZXN0U2Vjb25kYXJ5KCl7CisgICAgfQorICAgIAorICAgICAvLyBwZXJmb3JtIHRlc3Qgd2l0aCBzdHJlbmd0aCBQUklNQVJZCisgICAgcHVibGljIHZvaWQgVGVzdFByaW1hcnkoKXsKKyAgICAgICAgaWYobXlDb2xsYXRpb24gPT0gbnVsbCApIHsKKyAgICAgICAgICAgIGVycmxuKCJkZWNvbGw6IGNhbm5vdCBzdGFydCB0ZXN0LCBjb2xsYXRvciBpcyBudWxsXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpbnQgaTsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuUFJJTUFSWSk7CisgICAgICAgIG15Q29sbGF0aW9uLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTIgOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvVGVzdCh0ZXN0U291cmNlQ2FzZXNbaV0sIHRlc3RUYXJnZXRDYXNlc1tpXSwgcmVzdWx0c1tpXVswXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy9tYWluIHRlc3Qgcm91dGluZSwgdGVzdHMgcnVsZXMgc3BlY2lmaWMgdG8gZ2VybWEgbG9jYWxlCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdChjaGFyW10gc291cmNlLCBjaGFyW10gdGFyZ2V0LCBpbnQgcmVzdWx0KXsKKyAgICAgICAgU3RyaW5nIHMgPSBuZXcgU3RyaW5nKHNvdXJjZSk7CisgICAgICAgIFN0cmluZyB0ID0gbmV3IFN0cmluZyh0YXJnZXQpOworICAgICAgICBpbnQgY29tcGFyZVJlc3VsdCA9IG15Q29sbGF0aW9uLmNvbXBhcmUocywgdCk7CisgICAgICAgIENvbGxhdGlvbktleSBzb3J0S2V5MSwgc29ydEtleTI7CisgICAgICAgIHNvcnRLZXkxID0gbXlDb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHMpOworICAgICAgICBzb3J0S2V5MiA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleSh0KTsKKyAgICAgICAgaW50IGtleVJlc3VsdCA9IHNvcnRLZXkxLmNvbXBhcmVUbyhzb3J0S2V5Mik7CisgICAgICAgIHJlcG9ydENSZXN1bHQocywgdCwgc29ydEtleTEsIHNvcnRLZXkyLCBjb21wYXJlUmVzdWx0LCBrZXlSZXN1bHQsIGNvbXBhcmVSZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApeworICAgICAgICBpZiAoZXhwZWN0ZWRSZXN1bHQgPCAtMSB8fCBleHBlY3RlZFJlc3VsdCA+IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycmxuKCIqKioqKiBpbnZhbGlkIGNhbGwgdG8gcmVwb3J0Q1Jlc3VsdCAqKioqIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIG9rMSA9IChjb21wYXJlUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazIgPSAoa2V5UmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazMgPSAoaW5jUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKworICAgICAgICBpZiAob2sxICYmIG9rMiAmJiBvazMgJiYgIWlzVmVyYm9zZSgpKXsKKyAgICAgICAgICAgIHJldHVybjsgICAgCisgICAgICAgIH1lbHNleworICAgICAgICAgICAgU3RyaW5nIG1zZzEgPSBvazE/ICJPazogY29tcGFyZShcIiIgOiAiRkFJTDogY29tcGFyZShcIiI7CisgICAgICAgICAgICBTdHJpbmcgbXNnMiA9ICJcIiwgXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzMgPSAiXCIpIHJldHVybmVkICI7CisgICAgICAgICAgICBTdHJpbmcgbXNnNCA9ICI7IGV4cGVjdGVkICI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyBzRXhwZWN0ID0gbmV3IFN0cmluZygiIik7CisgICAgICAgICAgICBTdHJpbmcgc1Jlc3VsdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoY29tcGFyZVJlc3VsdCwgc1Jlc3VsdCk7CisgICAgICAgICAgICBzRXhwZWN0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChleHBlY3RlZFJlc3VsdCwgc0V4cGVjdCk7CisgICAgICAgICAgICBpZiAob2sxKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1zZzEgPSBvazIgPyAiT2s6IGtleShcIiIgOiAiRkFJTDoga2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzIgPSAiXCIpLmNvbXBhcmVUbyhrZXkoXCIiOworICAgICAgICAgICAgbXNnMyA9ICJcIikpIHJldHVybmVkICI7CisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChrZXlSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgaWYgKG9rMikgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgICAgIG1zZzEgPSAiICAiOworICAgICAgICAgICAgICAgIG1zZzIgPSAiIHZzLiAiOworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBwcmV0dGlmeShzb3VyY2VLZXkpICsgbXNnMiArIHByZXR0aWZ5KHRhcmdldEtleSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2szID8gIk9rOiBpbmNDb21wYXJlKFwiIiA6ICJGQUlMOiBpbmNDb21wYXJlKFwiIjsKKyAgICAgICAgICAgIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpIHJldHVybmVkICI7CisKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGluY1Jlc3VsdCwgc1Jlc3VsdCk7CisKKyAgICAgICAgICAgIGlmIChvazMpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgYXBwZW5kQ29tcGFyZVJlc3VsdChpbnQgcmVzdWx0LCBTdHJpbmcgdGFyZ2V0KXsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgICAvL0xFU1MKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0ICs9ICJMRVNTIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gMCkgICAvL0VRVUFMCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiRVFVQUwiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSAxKSAgIC8vR1JFQVRFUgorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkdSRUFURVIiOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGh1aCA9ICI/IjsKKworICAgICAgICAgICAgdGFyZ2V0ICs9IGh1aCArIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICBTdHJpbmcgcHJldHRpZnkoQ29sbGF0aW9uS2V5IHNvdXJjZUtleSkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgYnl0ZVtdIGJ5dGVzPSBzb3VyY2VLZXkudG9CeXRlQXJyYXkoKTsKKyAgICAgICAgU3RyaW5nIHRhcmdldCA9ICJbIjsKKyAgICAKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gSW50ZWdlci50b0hleFN0cmluZyhieXRlc1tpXSk7CisgICAgICAgICAgICB0YXJnZXQgKz0gIiAiOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSAiXSI7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25JdGVyYXRvclRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25JdGVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGIzZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkl0ZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjE4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IAorICogJERhdGU6IAorICogJFJldmlzaW9uOiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjIuMSA6IGNvbGxhdGUvQ29sbGF0aW9uSXRlcmF0b3JUZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9pdGVyY29sbC5jcHAKKyAqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjsKKworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKKworcHVibGljIGNsYXNzIENvbGxhdGlvbkl0ZXJhdG9yVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKyAgICAKKyAgICBTdHJpbmcgdGVzdDEgPSAiV2hhdCBzdWJzZXQgb2YgYWxsIHBvc3NpYmxlIHRlc3QgY2FzZXM/IjsKKyAgICBTdHJpbmcgdGVzdDIgPSAiaGFzIHRoZSBoaWdoZXN0IHByb2JhYmlsaXR5IG9mIGRldGVjdGluZyI7CisgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IENvbGxhdGlvbkl0ZXJhdG9yVGVzdCgpLnJ1bihhcmdzKTsKKyAgICAgICAgLy8gbmV3IENvbGxhdGlvbkl0ZXJhdG9yVGVzdCgpLlRlc3ROb3JtYWxpemVkVW5pY29kZUNoYXIoKTsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBAYnVnIDQxNTcyOTkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Q2xlYXJCdWZmZXJzKC8qIGNoYXIqIHBhciAqLykgeworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IoIiZhIDwgYiA8IGMgJiBhYiA9IGQiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJDb3VsZG4ndCBjcmVhdGUgYSBSdWxlQmFzZWRDb2xsYXRvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBTdHJpbmcgc291cmNlID0gImFiY2QiOworICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaSA9IGMuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHNvdXJjZSk7CisgICAgICAgIGludCBlMCA9IDA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBlMCA9IGkubmV4dCgpOyAgICAvLyBzYXZlIHRoZSBmaXJzdCBjb2xsYXRpb24gZWxlbWVudAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oImNhbGwgdG8gaS5uZXh0KCkgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGkuc2V0T2Zmc2V0KDMpOyAgICAgICAgLy8gZ28gdG8gdGhlIGV4cGFuZGluZyBjaGFyYWN0ZXIKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJjYWxsIHRvIGkuc2V0T2Zmc2V0KDMpIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGkubmV4dCgpOyAgICAgICAgICAgICAgICAvLyBidXQgb25seSB1c2UgdXAgaGFsZiBvZiBpdAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oImNhbGwgdG8gaS5uZXh0KCkgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGkuc2V0T2Zmc2V0KDApOyAgICAgICAgLy8gZ28gYmFjayB0byB0aGUgYmVnaW5uaW5nCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiY2FsbCB0byBpLnNldE9mZnNldCgwKSBmYWlsZWQuICIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZSA9IDA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBlID0gaS5uZXh0KCk7ICAgIC8vIGFuZCBnZXQgdGhpcyBvbmUgYWdhaW4KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGVlKSB7CisgICAgICAgICAgICBlcnJsbigiY2FsbCB0byBpLm5leHQoKSBmYWlsZWQuICIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZSAhPSBlMCkgeworICAgICAgICAgICAgZXJybG4oImdvdCAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGUpICsgIiwgZXhwZWN0ZWQgMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlMCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKiBAYnVnIDQxMDg3NjIKKyAgICAgKiBUZXN0IGZvciBnZXRNYXhFeHBhbnNpb24oKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RNYXhFeHBhbnNpb24oLyogY2hhciogcGFyICovKSB7CisgICAgICAgIFN0cmluZyBydWxlID0gIiZhIDwgYWIgPCBjL2FiYSA8IGQgPCB6IDwgY2giOworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbGwgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbCB0byBjcmVhdGUgUnVsZUJhc2VkQ29sbGF0b3IiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjaGFyIGNoID0gMDsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZy52YWx1ZU9mKGNoKTsKKyAgICAKKyAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXIgICA9IGNvbGwuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHN0cik7CisgICAgCisgICAgICAgIHdoaWxlIChjaCA8IDB4RkZGRikgeworICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKKyAgICAgICAgICAgIGNoICsrOworICAgICAgICAgICAgc3RyID0gU3RyaW5nLnZhbHVlT2YoY2gpOworICAgICAgICAgICAgaXRlci5zZXRUZXh0KHN0cik7CisgICAgICAgICAgICBpbnQgb3JkZXIgPSBpdGVyLnByZXZpb3VzKCk7CisgICAgCisgICAgICAgICAgICAvLyB0aGFpIG1hbmFnZW1lbnQgCisgICAgICAgICAgICBpZiAob3JkZXIgPT0gMCkgeworICAgICAgICAgICAgICAgIG9yZGVyID0gaXRlci5wcmV2aW91cygpOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgd2hpbGUgKGl0ZXIucHJldmlvdXMoKSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgY291bnQgKys7IAorICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgaWYgKGl0ZXIuZ2V0TWF4RXhwYW5zaW9uKG9yZGVyKSA8IGNvdW50KSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWx1cmUgYXQgY29kZXBvaW50ICIgKyBjaCArICIsIG1heGltdW0gZXhwYW5zaW9uIGNvdW50IDwgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IGZvciBnZXRPZmZzZXQoKSBhbmQgc2V0T2Zmc2V0KCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0T2Zmc2V0KC8qIGNoYXIqIHBhciAqLykgeworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBlbl91czsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGVuX3VzID0gKFJ1bGVCYXNlZENvbGxhdG9yKUNvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7ICAgIAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBpbiBjcmVhdGlvbiBvZiBjb2xsYXRvciBvZiBFTkdMSVNIIGxvY2FsZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXIgPSBlbl91cy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IodGVzdDEpOworICAgIAorICAgICAgICAvLyBSdW4gYWxsIHRoZSB3YXkgdGhyb3VnaCB0aGUgaXRlcmF0b3IsIHRoZW4gZ2V0IHRoZSBvZmZzZXQKKyAgICAgICAgaW50W10gb3JkZXJzID0gZ2V0T3JkZXJzKGl0ZXIpOworICAgICAgICBsb2dsbigib3JkZXJzLmxlbmd0aCA9ICIgKyBvcmRlcnMubGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGludCBvZmZzZXQgPSBpdGVyLmdldE9mZnNldCgpOworICAgIAorICAgICAgICBpZiAob2Zmc2V0ICE9IHRlc3QxLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgbXNnMSA9ICJvZmZzZXQgYXQgZW5kICE9IGxlbmd0aDogIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2cyID0gIiB2cyAiOworICAgICAgICAgICAgZXJybG4obXNnMSArIG9mZnNldCArIG1zZzIgKyB0ZXN0MS5sZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gTm93IHNldCB0aGUgb2Zmc2V0IGJhY2sgdG8gdGhlIGJlZ2lubmluZyBhbmQgc2VlIGlmIGl0IHdvcmtzCisgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBwcmlzdGluZSA9IGVuX3VzLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0ZXN0MSk7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgaXRlci5zZXRPZmZzZXQoMCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJzZXRPZmZzZXQgZmFpbGVkLiIpOworICAgICAgICB9CisgICAgICAgIGFzc2VydEVxdWFsKGl0ZXIsIHByaXN0aW5lKTsKKyAgICAKKyAgICAgICAgLy8gc2V0dGluZyBvZmZzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbnRyYWN0aW9uCisgICAgICAgIFN0cmluZyBjb250cmFjdGlvbiA9ICJjaGFuZ2UiOworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciB0YWlsb3JlZCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0YWlsb3JlZCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcigiJiBhIDwgY2giKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogaW4gY3JlYXRpb24gb2YgU3BhbmlzaCBjb2xsYXRvciIpOworICAgICAgICB9CisgICAgICAgIGl0ZXIgPSB0YWlsb3JlZC5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoY29udHJhY3Rpb24pOworICAgICAgICBpbnQgb3JkZXJbXSA9IGdldE9yZGVycyhpdGVyKTsKKyAgICAgICAgaXRlci5zZXRPZmZzZXQoMSk7IC8vIHNldHMgb2Zmc2V0IGluIHRoZSBtaWRkbGUgb2YgY2gKKyAgICAgICAgaW50IG9yZGVyMltdID0gZ2V0T3JkZXJzKGl0ZXIpOworICAgICAgICBpZiAoIUFycmF5cy5lcXVhbHMob3JkZXIsIG9yZGVyMikpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogc2V0dGluZyBvZmZzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbnRyYWN0aW9uIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBzdGFydCBvZiB0aGUgY29udHJhY3Rpb24iKTsKKyAgICAgICAgfQorICAgICAgICBjb250cmFjdGlvbiA9ICJwZWFjaGUiOworICAgICAgICBpdGVyID0gdGFpbG9yZWQuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKGNvbnRyYWN0aW9uKTsKKyAgICAgICAgaXRlci5zZXRPZmZzZXQoMyk7CisgICAgICAgIG9yZGVyID0gZ2V0T3JkZXJzKGl0ZXIpOworICAgICAgICBpdGVyLnNldE9mZnNldCg0KTsgLy8gc2V0cyBvZmZzZXQgaW4gdGhlIG1pZGRsZSBvZiBjaAorICAgICAgICBvcmRlcjIgPSBnZXRPcmRlcnMoaXRlcik7CisgICAgICAgIGlmICghQXJyYXlzLmVxdWFscyhvcmRlciwgb3JkZXIyKSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBzZXR0aW5nIG9mZnNldCBpbiB0aGUgbWlkZGxlIG9mIGEgY29udHJhY3Rpb24gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb250cmFjdGlvbiIpOworICAgICAgICB9CisgICAgICAgIC8vIHNldHRpbmcgb2Zmc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpcgorICAgICAgICBTdHJpbmcgc3Vycm9nYXRlID0gIlx1ZDgwMFx1ZGMwMHN0ciI7CisgICAgICAgIGl0ZXIgPSB0YWlsb3JlZC5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioc3Vycm9nYXRlKTsKKyAgICAgICAgb3JkZXIgPSBnZXRPcmRlcnMoaXRlcik7CisgICAgICAgIGl0ZXIuc2V0T2Zmc2V0KDEpOyAvLyBzZXRzIG9mZnNldCBpbiB0aGUgbWlkZGxlIG9mIHN1cnJvZ2F0ZQorICAgICAgICBvcmRlcjIgPSBnZXRPcmRlcnMoaXRlcik7CisgICAgICAgIGlmICghQXJyYXlzLmVxdWFscyhvcmRlciwgb3JkZXIyKSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBzZXR0aW5nIG9mZnNldCBpbiB0aGUgbWlkZGxlIG9mIGEgc3Vycm9nYXRlIHBhaXIgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdXJyb2dhdGUgcGFpciIpOworICAgICAgICB9CisgICAgICAgIHN1cnJvZ2F0ZSA9ICJzaW1wbGVcdWQ4MDBcdWRjMDBzdHIiOworICAgICAgICBpdGVyID0gdGFpbG9yZWQuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHN1cnJvZ2F0ZSk7CisgICAgICAgIGl0ZXIuc2V0T2Zmc2V0KDYpOworICAgICAgICBvcmRlciA9IGdldE9yZGVycyhpdGVyKTsKKyAgICAgICAgaXRlci5zZXRPZmZzZXQoNyk7IC8vIHNldHMgb2Zmc2V0IGluIHRoZSBtaWRkbGUgb2Ygc3Vycm9nYXRlCisgICAgICAgIG9yZGVyMiA9IGdldE9yZGVycyhpdGVyKTsKKyAgICAgICAgaWYgKCFBcnJheXMuZXF1YWxzKG9yZGVyLCBvcmRlcjIpKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3I6IHNldHRpbmcgb2Zmc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpciBzaG91bGQgYmUgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgc3RhcnQgb2YgdGhlIHN1cnJvZ2F0ZSBwYWlyIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogdHJ5IGl0ZXJhdGluZyBoYWxmd2F5IHRocm91Z2ggYSBtZXNzeSBzdHJpbmcuCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiBhbiBpbnRlZ2VyIGFycmF5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBjb2xsYXRpb24gb3JkZXJzCisgICAgICogcmV0dXJuZWQgYnkgY2FsbHMgdG8gbmV4dCBvbiB0aGUgc3BlY2lmaWVkIGl0ZXJhdG9yCisgICAgICovCisgICAgaW50W10gZ2V0T3JkZXJzKENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyKSB7CisgICAgICAgIGludCBtYXhTaXplID0gMTAwOworICAgICAgICBpbnQgc2l6ZSA9IDA7CisgICAgICAgIGludFtdIG9yZGVycyA9IG5ldyBpbnRbbWF4U2l6ZV07CisgICAgCisgICAgICAgIGludCBvcmRlcjsKKyAgICAgICAgd2hpbGUgKChvcmRlciA9IGl0ZXIubmV4dCgpKSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA9PSBtYXhTaXplKSB7CisgICAgICAgICAgICAgICAgbWF4U2l6ZSAqPSAyOworICAgICAgICAgICAgICAgIGludFtdIHRlbXAgPSBuZXcgaW50W21heFNpemVdOworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkob3JkZXJzLCAwLCB0ZW1wLCAgMCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgb3JkZXJzID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9yZGVyc1tzaXplKytdID0gb3JkZXI7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKG1heFNpemUgPiBzaXplKSB7CisgICAgICAgICAgICBpbnRbXSB0ZW1wID0gbmV3IGludFtzaXplXTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkob3JkZXJzLCAwLCB0ZW1wLCAgMCwgc2l6ZSk7CisgICAgICAgICAgICBvcmRlcnMgPSB0ZW1wOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvcmRlcnM7CisgICAgfQorCisgICAgdm9pZCBhc3NlcnRFcXVhbChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaTEsIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpMikgeworICAgICAgICBpbnQgYzEsIGMyLCBjb3VudCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGMxID0gaTEubmV4dCgpOworICAgICAgICAgICAgYzIgPSBpMi5uZXh0KCk7CisgICAgICAgICAgICBpZiAoYzEgIT0gYzIpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiICAgICIgKyBjb3VudCArICI6IHN0cmVuZ3RoKDB4IiArIAorICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKGMxKSArICIpICE9IHN0cmVuZ3RoKDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoYzIpICsgIikiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgIH0gd2hpbGUgKGMxICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpOworICAgICAgICBiYWNrQW5kRm9ydGgoaTEpOworICAgICAgICBiYWNrQW5kRm9ydGgoaTIpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IGZvciBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IucHJldmlvdXMoKQorICAgICAqCisgICAgICogQGJ1ZyA0MTA4NzU4IC0gTWFrZSBzdXJlIGl0IHdvcmtzIHdpdGggY29udHJhY3RpbmcgY2hhcmFjdGVycworICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQcmV2aW91cygvKiBjaGFyKiBwYXIgKi8pIHsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgZW5fdXMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKTsKKyAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXIgPSBlbl91cy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IodGVzdDEpOworICAgIAorICAgICAgICAvLyBBIGJhc2ljIHRlc3QgdG8gc2VlIGlmIGl0J3Mgd29ya2luZyBhdCBhbGwKKyAgICAgICAgYmFja0FuZEZvcnRoKGl0ZXIpOworICAgIAorICAgICAgICAvLyBUZXN0IHdpdGggYSBjb250cmFjdGluZyBjaGFyYWN0ZXIgc2VxdWVuY2UKKyAgICAgICAgU3RyaW5nIHNvdXJjZTsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgYzEgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYzEgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IoIiZhLEEgPCBiLEIgPCBjLEMsIGQsRCA8IHosWiA8IGNoLGNILENoLENIIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiQ291bGRuJ3QgY3JlYXRlIGEgUnVsZUJhc2VkQ29sbGF0b3Igd2l0aCBhIGNvbnRyYWN0aW5nIHNlcXVlbmNlLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIHNvdXJjZSA9ICJhYmNoZGNiYSI7CisgICAgICAgIGl0ZXIgPSBjMS5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioc291cmNlKTsKKyAgICAgICAgYmFja0FuZEZvcnRoKGl0ZXIpOworICAgIAorICAgICAgICAvLyBUZXN0IHdpdGggYW4gZXhwYW5kaW5nIGNoYXJhY3RlciBzZXF1ZW5jZQorICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjMiA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjMiA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcigiJmEgPCBiIDwgYy9hYmQgPCBkIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlICkgeworICAgICAgICAgICAgZXJybG4oIkNvdWxkbid0IGNyZWF0ZSBhIFJ1bGVCYXNlZENvbGxhdG9yIHdpdGggYW4gZXhwYW5kaW5nIHNlcXVlbmNlLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIHNvdXJjZSA9ICJhYmNkIjsKKyAgICAgICAgaXRlciA9IGMyLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihzb3VyY2UpOworICAgICAgICBiYWNrQW5kRm9ydGgoaXRlcik7CisgICAgCisgICAgICAgIC8vIE5vdyB0cnkgYm90aAorICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjMyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjMyA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcigiJmEgPCBiIDwgYy9hYmEgPCBkIDwgeiA8IGNoIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiQ291bGRuJ3QgY3JlYXRlIGEgUnVsZUJhc2VkQ29sbGF0b3Igd2l0aCBib3RoIGFuIGV4cGFuZGluZyBhbmQgYSBjb250cmFjdGluZyBzZXF1ZW5jZS4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc291cmNlID0gImFiY2RiY2hkYyI7CisgICAgICAgIGl0ZXIgPSBjMy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioc291cmNlKTsKKyAgICAgICAgYmFja0FuZEZvcnRoKGl0ZXIpOworICAgIAorICAgICAgICBzb3VyY2U9ICJcdTBlNDFcdTBlMDJcdTBlNDFcdTBlMDJcdTBlMjdhYmMiOworICAgICAgICBDb2xsYXRvciBjNCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjNCA9IENvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoInRoIiwgIlRIIiwgIiIpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJDb3VsZG4ndCBjcmVhdGUgYSBjb2xsYXRvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyID0gKChSdWxlQmFzZWRDb2xsYXRvciljNCkuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHNvdXJjZSk7CisgICAgICAgIGJhY2tBbmRGb3J0aChpdGVyKTsKKyAgICAgICAKKyAgICAgICAgc291cmNlPSAiXHUwMDYxXHUzMENGXHUzMDk5XHUzMEZDIjsKKyAgICAgICAgQ29sbGF0b3IgYzUgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYzUgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJqYSIsICJKUCIsICIiKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiQ291bGRuJ3QgY3JlYXRlIEphcGFuZXNlIGNvbGxhdG9yXG4iKTsKKyAgICAgICAgfQorICAgICAgICBpdGVyID0gKChSdWxlQmFzZWRDb2xsYXRvciljNSkuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHNvdXJjZSk7CisgICAgICAgIAorICAgICAgICBiYWNrQW5kRm9ydGgoaXRlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgYmFja0FuZEZvcnRoKENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyKSB7CisgICAgICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBpdGVyYXRvciBmb3J3YXJkcyBhbmQgc3RpY2sgaXQgaW50byBhbiBhcnJheQorICAgICAgICBpdGVyLnJlc2V0KCk7CisgICAgICAgIGludFtdIG9yZGVycyA9IGdldE9yZGVycyhpdGVyKTsKKyAgICAKKyAgICAgICAgLy8gTm93IGdvIHRocm91Z2ggaXQgYmFja3dhcmRzIGFuZCBtYWtlIHN1cmUgd2UgZ2V0IHRoZSBzYW1lIHZhbHVlcworICAgICAgICBpbnQgaW5kZXggPSBvcmRlcnMubGVuZ3RoOworICAgICAgICBpbnQgbzsKKyAgICAKKyAgICAgICAgLy8gcmVzZXQgdGhlIGl0ZXJhdG9yCisgICAgICAgIGl0ZXIucmVzZXQoKTsKKyAgICAKKyAgICAgICAgd2hpbGUgKChvID0gaXRlci5wcmV2aW91cygpKSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICBpZiAobyAhPSBvcmRlcnNbLS1pbmRleF0pIHsKKyAgICAgICAgICAgICAgICBpZiAobyA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICsrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA+IDAgJiYgb3JkZXJzW2luZGV4XSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCAtLTsKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG8gIT0gb3JkZXJzW2luZGV4XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIk1pc21hdGNoIGF0IGluZGV4ICIgKyBpbmRleCArICI6IDB4IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcob3JkZXJzW2luZGV4XSkgKyAiIHZzIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcobykpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgd2hpbGUgKGluZGV4ICE9IDAgJiYgb3JkZXJzW2luZGV4IC0gMV0gPT0gMCkgeworICAgICAgICAgIGluZGV4IC0tOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChpbmRleCAhPSAwKSB7CisgICAgICAgICAgICBTdHJpbmcgbXNnID0gIkRpZG4ndCBnZXQgYmFjayB0byBiZWdpbm5pbmcgLSBpbmRleCBpcyAiOworICAgICAgICAgICAgZXJybG4obXNnICsgaW5kZXgpOworICAgIAorICAgICAgICAgICAgaXRlci5yZXNldCgpOworICAgICAgICAgICAgZXJyKCJuZXh0OiAiKTsKKyAgICAgICAgICAgIHdoaWxlICgobyA9IGl0ZXIubmV4dCgpKSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGhleFN0cmluZyA9ICIweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKG8pICsgIiAiOworICAgICAgICAgICAgICAgIGVycihoZXhTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJybG4oIiIpOworICAgICAgICAgICAgZXJyKCJwcmV2OiAiKTsKKyAgICAgICAgICAgIHdoaWxlICgobyA9IGl0ZXIucHJldmlvdXMoKSkgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgICAgIFN0cmluZyBoZXhTdHJpbmcgPSAiMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhvKSArICIgIjsKKyAgICAgICAgICAgICAgICAgZXJyKGhleFN0cmluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnJsbigiIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdCBmb3Igc2V0VGV4dCgpCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFNldFRleHQoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGVuX3VzID0gKFJ1bGVCYXNlZENvbGxhdG9yKUNvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyMSA9IGVuX3VzLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0ZXN0MSk7CisgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyMiA9IGVuX3VzLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0ZXN0Mik7CisgICAgCisgICAgICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBzZWNvbmQgaXRlcmF0b3IganVzdCB0byBleGVyY2lzZSBpdAorICAgICAgICBpbnQgYyA9IGl0ZXIyLm5leHQoKTsKKyAgICAgICAgaW50IGkgPSAwOworICAgIAorICAgICAgICB3aGlsZSAoICsraSA8IDEwICYmIGMgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjID0gaXRlcjIubmV4dCgpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiaXRlcjIubmV4dCgpIHJldHVybmVkIGFuIGVycm9yLiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIC8vIE5vdyBzZXQgaXQgdG8gcG9pbnQgdG8gdGhlIHNhbWUgc3RyaW5nIGFzIHRoZSBmaXJzdCBpdGVyYXRvcgorICAgICAgICB0cnkgeworICAgICAgICAgICAgaXRlcjIuc2V0VGV4dCh0ZXN0MSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiY2FsbCB0byBpdGVyMi0+c2V0VGV4dCh0ZXN0MSkgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGFzc2VydEVxdWFsKGl0ZXIxLCBpdGVyMik7CisgICAgICAgIAorICAgICAgICBpdGVyMS5yZXNldCgpOworICAgICAgICAvL25vdyB1c2UgdGhlIG92ZXJsb2FkZWQgc2V0VGV4dChDaHJhY3Rlckl0ZXJhdG9yJiwgVUVycm9yQ29kZSkgZnVuY3Rpb24gdG8gc2V0IHRoZSB0ZXh0CisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJpdGVyID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRlc3QxKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaXRlcjIuc2V0VGV4dChjaGFyaXRlcik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlICkgeworICAgICAgICAgICAgZXJybG4oImNhbGwgdG8gaXRlcjItPnNldFRleHQoY2hhcml0ZXIodGVzdDEpKSBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0RXF1YWwoaXRlcjEsIGl0ZXIyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IGZvciBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgcHJldmlvdXMgYW5kIG5leHQgZm9yIHRoZSB3aG9sZSBzZXQgb2YKKyAgICAgKiB1bmljb2RlIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFVuaWNvZGVDaGFyKCkgeworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBlbl91cyA9IChSdWxlQmFzZWRDb2xsYXRvcilDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXRlcjsKKyAgICAgICAgY2hhciBjb2RlcG9pbnQ7CisgICAgICAgIFN0cmluZ0J1ZmZlciBzb3VyY2UgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoY29kZXBvaW50ID0gMHhlNDA7IGNvZGVwb2ludCA8IDB4ZTQyOyBjb2RlcG9pbnQgKyspIHsKKyAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzRGVmaW5lZChjb2RlcG9pbnQpKSB7CisgICAgICAgICAgICAgICAgc291cmNlLmFwcGVuZChjb2RlcG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGl0ZXIgPSBlbl91cy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioc291cmNlLnRvU3RyaW5nKCkpOworICAgICAgICAvLyBBIGJhc2ljIHRlc3QgdG8gc2VlIGlmIGl0J3Mgd29ya2luZyBhdCBhbGwgCisgICAgICAgIGJhY2tBbmRGb3J0aChpdGVyKTsKKyAgICAgICAgZm9yIChjb2RlcG9pbnQgPSAxOyBjb2RlcG9pbnQgPCAweEZGRkU7KSB7CisgICAgICAgICAgICBzb3VyY2UuZGVsZXRlKDAsIHNvdXJjZS5sZW5ndGgoKSk7CisgICAgICAgICAgICB3aGlsZSAoY29kZXBvaW50ICUgMHhGRiAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNEZWZpbmVkKGNvZGVwb2ludCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLmFwcGVuZChjb2RlcG9pbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2RlcG9pbnQgKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzRGVmaW5lZChjb2RlcG9pbnQpKSB7CisgICAgICAgICAgICAgICAgc291cmNlLmFwcGVuZChjb2RlcG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY29kZXBvaW50ICE9IDB4RkZGRikgeworICAgICAgICAgICAgICAgIGNvZGVwb2ludCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGl0ZXIgPSBlbl91cy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioc291cmNlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgLy8gQSBiYXNpYyB0ZXN0IHRvIHNlZSBpZiBpdCdzIHdvcmtpbmcgYXQgYWxsIAorICAgICAgICAgICAgYmFja0FuZEZvcnRoKGl0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgZm9yIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBwcmV2aW91cyBhbmQgbmV4dCBmb3IgdGhlIHdob2xlIHNldCBvZgorICAgICAqIHVuaWNvZGUgY2hhcmFjdGVycyB3aXRoIG5vcm1hbGl6YXRpb24gb24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdE5vcm1hbGl6ZWRVbmljb2RlQ2hhcigpCisgICAgeworICAgICAgICAvLyB0aGFpIHNob3VsZCBoYXZlIG5vcm1hbGl6YXRpb24gb24KKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgdGhfdGggPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhfdGggPSAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExvY2FsZSgidGgiLCAiVEgiKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3IgY3JlYXRpbmcgVGhhaSBjb2xsYXRvciIpOworICAgICAgICB9CisgICAgICAgIFN0cmluZ0J1ZmZlciBzb3VyY2UgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoY2hhciBjb2RlcG9pbnQgPSAweGY3MTsgY29kZXBvaW50IDwgMHhmNzY7IGNvZGVwb2ludCArKykgeworICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNEZWZpbmVkKGNvZGVwb2ludCkpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYXBwZW5kKGNvZGVwb2ludCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIHRlbXAgCisgICAgICAgICAgICAgICAgICAgICAgICA9IHRoX3RoLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihzb3VyY2UudG9TdHJpbmcoKSk7CisgICAgICAgIC8vIEEgYmFzaWMgdGVzdCB0byBzZWUgaWYgaXQncyB3b3JraW5nIGF0IGFsbCAKKyAgICAgICAgYmFja0FuZEZvcnRoKHRlbXApOworICAgICAgICBmb3IgKGNoYXIgY29kZXBvaW50ID0gMHgxOyBjb2RlcG9pbnQgPCAweGZmZmU7KSB7CisgICAgICAgICAgICBzb3VyY2UuZGVsZXRlKDAsIHNvdXJjZS5sZW5ndGgoKSk7CisgICAgICAgICAgICB3aGlsZSAoY29kZXBvaW50ICUgMHhGRiAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNEZWZpbmVkKGNvZGVwb2ludCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLmFwcGVuZChjb2RlcG9pbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2RlcG9pbnQgKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzRGVmaW5lZChjb2RlcG9pbnQpKSB7CisgICAgICAgICAgICAgICAgc291cmNlLmFwcGVuZChjb2RlcG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY29kZXBvaW50ICE9IDB4RkZGRikgeworICAgICAgICAgICAgICAgIGNvZGVwb2ludCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgPSB0aF90aC5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioc291cmNlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgLy8gQSBiYXNpYyB0ZXN0IHRvIHNlZSBpZiBpdCdzIHdvcmtpbmcgYXQgYWxsIAorICAgICAgICAgICAgYmFja0FuZEZvcnRoKGl0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogVGVzdGluZyB0aGUgZGlzY29udGlndW91cyBjb250cmFjdGlvbnMKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3REaXNjb250aWd1b3VzKCkgCisgICAgeworICAgICAgICBTdHJpbmcgcnVsZXN0ciA9IiZ6IDwgQUIgPCBYXHUwMzAwIDwgQUJDIDwgWFx1MDMwMFx1MDMxNSI7CisgICAgICAgIFN0cmluZyBzcmNbXSA9IHsiQURCIiwgIkFEQkMiLCAiQVx1MDMxNUIiLCAiQVx1MDMxNUJDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhc2UgY2hhcmFjdGVyIGJsb2NrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICJYRFx1MDMwMCIsICJYRFx1MDMwMFx1MDMxNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBub24gYmxvY2tpbmcgY29tYmluaW5nIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgIlhcdTAzMTlcdTAzMDAiLCAiWFx1MDMxOVx1MDMwMFx1MDMxNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBibG9ja2luZyBjb21iaW5pbmcgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAiWFx1MDMxNFx1MDMwMCIsICJYXHUwMzE0XHUwMzAwXHUwMzE1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyYWN0aW9uIHByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgIkFCREMiLCAiQUJcdTAzMTVDIiwiWFx1MDMwMERcdTAzMTUiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICJYXHUwMzAwXHUwMzE5XHUwMzE1IiwgIlhcdTAzMDBcdTAzMUFcdTAzMTUiLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBub3Qgd2l0aCBhIGNvbnRyYWN0aW9uIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgIlhcdTAzMTlcdTAzMDBEIiwgIlhcdTAzMTlcdTAzMDBcdTAzMTVEIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAiWFx1MDMwMERcdTAzMTVEIiwgIlhcdTAzMDBcdTAzMTlcdTAzMTVEIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAiWFx1MDMwMFx1MDMxQVx1MDMxNUQiCisgICAgICAgIH07CisgICAgICAgIFN0cmluZyB0Z3RbXSA9IHsvLyBub24gYmxvY2tpbmcgY29tYmluaW5nIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgIkEgRCBCIiwgIkEgRCBCQyIsICJBIFx1MDMxNSBCIiwgIkEgXHUwMzE1IEJDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhc2UgY2hhcmFjdGVyIGJsb2NrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICJYIEQgXHUwMzAwIiwgIlggRCBcdTAzMDBcdTAzMTUiLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9uIGJsb2NraW5nIGNvbWJpbmluZyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICJYXHUwMzAwIFx1MDMxOSIsICJYXHUwMzAwXHUwMzE1IFx1MDMxOSIsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBibG9ja2luZyBjb21iaW5pbmcgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAiWCBcdTAzMTQgXHUwMzAwIiwgIlggXHUwMzE0IFx1MDMwMFx1MDMxNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cmFjdGlvbiBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICJBQiBEQyIsICJBQiBcdTAzMTUgQyIsIlhcdTAzMDAgRCBcdTAzMTUiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICJYXHUwMzAwXHUwMzE1IFx1MDMxOSIsICJYXHUwMzAwIFx1MDMxQSBcdTAzMTUiLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBub3Qgd2l0aCBhIGNvbnRyYWN0aW9uIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgIlhcdTAzMDAgXHUwMzE5RCIsICJYXHUwMzAwXHUwMzE1IFx1MDMxOUQiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICJYXHUwMzAwIERcdTAzMTVEIiwgIlhcdTAzMDBcdTAzMTUgXHUwMzE5RCIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIlhcdTAzMDAgXHUwMzFBXHUwMzE1RCIKKyAgICAgICAgfTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGNvbGwgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXN0cik7CisgICAgICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXRlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvbGwuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKCIiKTsKKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciByZXN1bHRpdGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY29sbC5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoIiIpOyAgICAKKyAgICAgICAgICAgIHdoaWxlIChjb3VudCA8IHNyYy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpdGVyLnNldFRleHQoc3JjW2NvdW50XSk7CisgICAgICAgICAgICAgICAgaW50IHMgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgdGd0W2NvdW50XS5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZSA9IHRndFtjb3VudF0uaW5kZXhPZignICcsIHMpOworICAgICAgICAgICAgICAgICAgICBpZiAoZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0Z3RbY291bnRdLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHRzdHIgPSB0Z3RbY291bnRdLnN1YnN0cmluZyhzLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0aXRlci5zZXRUZXh0KHJlc3VsdHN0cik7CisgICAgICAgICAgICAgICAgICAgIGludCBjZSA9IHJlc3VsdGl0ZXIubmV4dCgpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlICE9IGl0ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkRpc2NvbnRpZ3VvcyBjb250cmFjdGlvbiB0ZXN0IG1pc21hdGNoIGF0IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjZSA9IHJlc3VsdGl0ZXIubmV4dCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHMgPSBlICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXRlci5yZXNldCgpOworICAgICAgICAgICAgICAgIGJhY2tBbmRGb3J0aChpdGVyKTsKKyAgICAgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBydW5uaW5nIGRpc2NvbnRpZ3VvdXMgdGVzdHMgIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIFRlc3QgdGhlIGluY3JlbWVudGFsIG5vcm1hbGl6YXRpb24KKyAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3ROb3JtYWxpemF0aW9uKCkKKyAgICB7CisgICAgICAgIFN0cmluZyBydWxlcyA9ICImYSA8IFx1MDMwMFx1MDMxNSA8IEFcdTAzMDBcdTAzMTUgPCBcdTAzMTZcdTAzMTVCIDwgXHUwMzE2XHUwMzAwXHUwMzE1IjsKKyAgICAgICAgU3RyaW5nIHRlc3RkYXRhW10gPSB7Ilx1MUVEOSIsICJvXHUwMzIzXHUwMzAyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMzAwXHUwMzE1IiwgIlx1MDMxNVx1MDMwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFcdTAzMDBcdTAzMTVCIiwgIkFcdTAzMTVcdTAzMDBCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVx1MDMxNlx1MDMxNUIiLCAiQVx1MDMxNVx1MDMxNkIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTAzMTZcdTAzMDBcdTAzMTUiLCAiXHUwMzE1XHUwMzAwXHUwMzE2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVx1MDMxNlx1MDMwMFx1MDMxNUIiLCAiQVx1MDMxNVx1MDMwMFx1MDMxNkIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTAzMTZcdTAzMTVcdTAzMDAiLCAiQVx1MDMxNlx1MDMxNVx1MDMwMEIifTsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sbCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2xsID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHJ1bGVzKTsKKyAgICAgICAgICAgIGNvbGwuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGluIGNyZWF0aW9uIG9mIGNvbGxhdG9yIHVzaW5nIHJ1bGVzICIgKyBydWxlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyID0gY29sbC5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoInRlc3RpbmciKTsKKyAgICAgICAgZm9yIChpbnQgY291bnQgPSAwOyBjb3VudCA8IHRlc3RkYXRhLmxlbmd0aDsgY291bnQgKyspIHsKKyAgICAgICAgICAgIGl0ZXIuc2V0VGV4dCh0ZXN0ZGF0YVtjb3VudF0pOworICAgICAgICAgICAgYmFja0FuZEZvcnRoKGl0ZXIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25LYW5hVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbkthbmFUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmZDFiNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25LYW5hVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IAorICogJERhdGU6IAorICogJFJldmlzaW9uOiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjIuMSA6IENvbGxhdGUvQ29sbGF0aW9uS2FuYVRlc3QKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L2phY29sbC5jcHAKKyAqKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisgCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKyAKK3B1YmxpYyBjbGFzcyBDb2xsYXRpb25LYW5hVGVzdCBleHRlbmRzIFRlc3RGbXdreworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIG5ldyBDb2xsYXRpb25LYW5hVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0U291cmNlQ2FzZXMgPSB7CisgICAgICAgIHsweGZmOUV9LAorICAgICAgICB7MHgzMDQyfSwKKyAgICAgICAgezB4MzBBMn0sCisgICAgICAgIHsweDMwNDIsIDB4MzA0Mn0sCisgICAgICAgIHsweDMwQTIsIDB4MzBGQ30sCisgICAgICAgIHsweDMwQTIsIDB4MzBGQywgMHgzMEM4fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNiAqLworICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0VGFyZ2V0Q2FzZXMgPSB7CisgICAgICAgIHsweEZGOUZ9LAorICAgICAgICB7MHgzMEEyfSwKKyAgICAgICAgezB4MzA0MiwgMHgzMDQyfSwKKyAgICAgICAgezB4MzBBMiwgMHgzMEZDfSwKKyAgICAgICAgezB4MzBBMiwgMHgzMEZDLCAweDMwQzh9LAorICAgICAgICB7MHgzMDQyLCAweDMwNDIsIDB4MzA2OH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNiAqLworICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSByZXN1bHRzID0geworICAgICAgICAtMSwKKyAgICAgICAgMCwgICAvL0NvbGxhdG9yOjpMRVNTLCAvKiBLYXRha2FuYXMgYW5kIEhpcmFnYW5hcyBhcmUgZXF1YWwgb24gdGVydGlhcnkgbGV2ZWwoSUNVIDIuMCkqLworICAgICAgICAtMSwKKyAgICAgICAgMSwgLy8gQ29sbGF0b3I6OkxFU1MsIC8qIFByb2xvbmdlZCBzb3VuZCBtYXJrIHNvcnRzIEJFRk9SRSBlcXVpdmFsZW50IHZvd2VsIChJQ1UgMi4wKSovCisgICAgICAgIC0xLAorICAgICAgICAtMSwgICAgLy9Db2xsYXRvcjo6R1JFQVRFUiAvKiBQcm9sb25nZWQgc291bmQgbWFyayBzb3J0cyBCRUZPUkUgZXF1aXZhbGVudCB2b3dlbCAoSUNVIDIuMCkqLy8qICA2ICovCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RCYXNlQ2FzZXMgPSB7CisgICAgICAgIHsweDMwQUJ9LAorICAgICAgICB7MHgzMEFCLCAweDMwQUR9LAorICAgICAgICB7MHgzMEFEfSwKKyAgICAgICAgezB4MzBBRCwgMHgzMEFEfQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0UGxhaW5EYWt1dGVuSGFuZGFrdXRlbkNhc2VzID0geworICAgICAgICB7MHgzMENGLCAweDMwQUJ9LAorICAgICAgICB7MHgzMEQwLCAweDMwQUJ9LAorICAgICAgICB7MHgzMENGLCAweDMwQUR9LAorICAgICAgICB7MHgzMEQwLCAweDMwQUR9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RTbWFsbExhcmdlQ2FzZXMgPSB7CisgICAgICAgIHsweDMwQzMsIDB4MzBDRn0sCisgICAgICAgIHsweDMwQzQsIDB4MzBDRn0sCisgICAgICAgIHsweDMwQzMsIDB4MzBEMH0sCisgICAgICAgIHsweDMwQzQsIDB4MzBEMH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdW10gdGVzdEthdGFrYW5hSGlyYWdhbmFDYXNlcyA9IHsKKyAgICAgICAgezB4MzA0MiwgMHgzMEMzfSwKKyAgICAgICAgezB4MzBBMiwgMHgzMEMzfSwKKyAgICAgICAgezB4MzA0MiwgMHgzMEM0fSwKKyAgICAgICAgezB4MzBBMiwgMHgzMEM0fQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0Q2hvb29uS2lnb29DYXNlcyA9IHsKKyAgICAgICAgLyowKi8gezB4MzBBQiwgMHgzMEZDLCAweDMwNDJ9LAorICAgICAgICAvKjEqLyB7MHgzMEFCLCAweDMwRkMsIDB4MzBBMn0sCisgICAgICAgIC8qMiovIHsweDMwQUIsIDB4MzBBNCwgMHgzMDQyfSwKKyAgICAgICAgLyozKi8gezB4MzBBQiwgMHgzMEE0LCAweDMwQTJ9LAorICAgICAgICAvKjYqLyB7MHgzMEFELCAweDMwRkMsIDB4MzA0Mn0sIC8qIFByb2xvbmdlZCBzb3VuZCBtYXJrIHNvcnRzIEJFRk9SRSBlcXVpdmFsZW50IHZvd2VsIChJQ1UgMi4wKSovCisgICAgICAgIC8qNyovIHsweDMwQUQsIDB4MzBGQywgMHgzMEEyfSwgLyogUHJvbG9uZ2VkIHNvdW5kIG1hcmsgc29ydHMgQkVGT1JFIGVxdWl2YWxlbnQgdm93ZWwgKElDVSAyLjApKi8KKyAgICAgICAgLyo0Ki8gezB4MzBBRCwgMHgzMEE0LCAweDMwNDJ9LAorICAgICAgICAvKjUqLyB7MHgzMEFELCAweDMwQTQsIDB4MzBBMn0KKyAgICB9OworICAgICAgICAKKyAgICBwcml2YXRlIENvbGxhdG9yIG15Q29sbGF0aW9uID0gbnVsbDsKKyAgICAKKyAgICBwdWJsaWMgQ29sbGF0aW9uS2FuYVRlc3QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBteUNvbGxhdGlvbiA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5KQVBBTkVTRSk7ICAgIAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBpbiBjcmVhdGlvbiBvZiBjb2xsYXRvciBvZiBKQVBBTkVTRSBsb2NhbGUiKTsKKyAgICAgICAgICAgIHJldHVybjsgICAKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBwZXJmb3JtcyB0ZXN0IHdpdGggc3RyZW5ndGggVEVSSUFSWQorICAgIHB1YmxpYyB2b2lkIFRlc3RUZXJ0aWFyeSgpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBteUNvbGxhdGlvbi5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIAorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisgICAgICAgICAgICBkb1Rlc3QodGVzdFNvdXJjZUNhc2VzW2ldLCB0ZXN0VGFyZ2V0Q2FzZXNbaV0sIHJlc3VsdHNbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyogVGVzdGluZyBiYXNlIGxldHRlcnMgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0QmFzZSgpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyA7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RCYXNlQ2FzZXNbaV0sIHRlc3RCYXNlQ2FzZXNbaSArIDFdLCAtMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBUZXN0aW5nIHBsYWluLCBEYWt1LXRlbiwgSGFuZGFrdS10ZW4gbGV0dGVycyAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQbGFpbkRha3V0ZW5IYW5kYWt1dGVuKCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuU0VDT05EQVJZKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgOyBpKyspIHsKKyAgICAgICAgICAgIGRvVGVzdCh0ZXN0UGxhaW5EYWt1dGVuSGFuZGFrdXRlbkNhc2VzW2ldLCB0ZXN0UGxhaW5EYWt1dGVuSGFuZGFrdXRlbkNhc2VzW2kgKyAxXSwgLTEpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogCisgICAgKiBUZXN0IFNtYWxsLCBMYXJnZSBsZXR0ZXJzCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0U21hbGxMYXJnZSgpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyA7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTbWFsbExhcmdlQ2FzZXNbaV0sIHRlc3RTbWFsbExhcmdlQ2FzZXNbaSArIDFdLCAtMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICogVGVzdCBLYXRha2FuYSwgSGlyYWdhbmEgbGV0dGVycworICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEthdGFrYW5hSGlyYWdhbmEoKSB7CisgICAgICAgIGludCBpOworICAgICAgICBteUNvbGxhdGlvbi5zZXRTdHJlbmd0aChDb2xsYXRvci5RVUFURVJOQVJZKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgOyBpKyspIHsKKyAgICAgICAgICAgIGRvVGVzdCh0ZXN0S2F0YWthbmFIaXJhZ2FuYUNhc2VzW2ldLCB0ZXN0S2F0YWthbmFIaXJhZ2FuYUNhc2VzW2kgKyAxXSwgLTEpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAqIFRlc3QgQ2hvby1vbiBraWdvbworICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENob29vbktpZ29vKCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuUVVBVEVSTkFSWSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3IDsgaSsrKSB7CisgICAgICAgICAgICBkb1Rlc3QodGVzdENob29vbktpZ29vQ2FzZXNbaV0sIHRlc3RDaG9vb25LaWdvb0Nhc2VzW2kgKyAxXSwgLTEpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gbWFpbiB0ZXN0IHJvdXRpbmUsIHRlc3RzIHJ1bGVzIHNwZWNpZmljIHRvICJLYW5hIiBsb2NhbGUKKyAgICBwcml2YXRlIHZvaWQgZG9UZXN0KGNoYXJbXSBzb3VyY2UsIGNoYXJbXSB0YXJnZXQsIGludCByZXN1bHQpeworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHMgPSBuZXcgU3RyaW5nKHNvdXJjZSk7CisgICAgICAgIFN0cmluZyB0ID0gbmV3IFN0cmluZyh0YXJnZXQpOworICAgICAgICBpbnQgY29tcGFyZVJlc3VsdCA9IG15Q29sbGF0aW9uLmNvbXBhcmUocywgdCk7CisgICAgICAgIENvbGxhdGlvbktleSBzb3J0S2V5MSwgc29ydEtleTI7CisgICAgICAgIHNvcnRLZXkxID0gbXlDb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHMpOworICAgICAgICBzb3J0S2V5MiA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleSh0KTsKKyAgICAgICAgaW50IGtleVJlc3VsdCA9IHNvcnRLZXkxLmNvbXBhcmVUbyhzb3J0S2V5Mik7CisgICAgICAgIHJlcG9ydENSZXN1bHQocywgdCwgc29ydEtleTEsIHNvcnRLZXkyLCBjb21wYXJlUmVzdWx0LCBrZXlSZXN1bHQsIGNvbXBhcmVSZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApeworICAgICAgICBpZiAoZXhwZWN0ZWRSZXN1bHQgPCAtMSB8fCBleHBlY3RlZFJlc3VsdCA+IDEpIHsKKyAgICAgICAgICAgIGVycmxuKCIqKioqKiBpbnZhbGlkIGNhbGwgdG8gcmVwb3J0Q1Jlc3VsdCAqKioqIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIG9rMSA9IChjb21wYXJlUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazIgPSAoa2V5UmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazMgPSAoaW5jUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKworICAgICAgICBpZiAob2sxICYmIG9rMiAmJiBvazMgJiYgIWlzVmVyYm9zZSgpKXsKKyAgICAgICAgICAgIHJldHVybjsgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgbXNnMSA9IG9rMT8gIk9rOiBjb21wYXJlKFwiIiA6ICJGQUlMOiBjb21wYXJlKFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBTdHJpbmcgbXNnMyA9ICJcIikgcmV0dXJuZWQgIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2c0ID0gIjsgZXhwZWN0ZWQgIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHNFeHBlY3QgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIFN0cmluZyBzUmVzdWx0ID0gbmV3IFN0cmluZygiIik7CisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChjb21wYXJlUmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIHNFeHBlY3QgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGV4cGVjdGVkUmVzdWx0LCBzRXhwZWN0KTsKKyAgICAgICAgICAgIGlmIChvazEpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMiA/ICJPazoga2V5KFwiIiA6ICJGQUlMOiBrZXkoXCIiOworICAgICAgICAgICAgbXNnMiA9ICJcIikuY29tcGFyZVRvKGtleShcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSkgcmV0dXJuZWQgIjsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGtleVJlc3VsdCwgc1Jlc3VsdCk7CisgICAgICAgICAgICBpZiAob2syKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICAgICAgbXNnMSA9ICIgICI7CisgICAgICAgICAgICAgICAgbXNnMiA9ICIgdnMuICI7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHByZXR0aWZ5KHNvdXJjZUtleSkgKyBtc2cyICsgcHJldHRpZnkodGFyZ2V0S2V5KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1zZzEgPSBvazMgPyAiT2s6IGluY0NvbXBhcmUoXCIiIDogIkZBSUw6IGluY0NvbXBhcmUoXCIiOworICAgICAgICAgICAgbXNnMiA9ICJcIiwgXCIiOworICAgICAgICAgICAgbXNnMyA9ICJcIikgcmV0dXJuZWQgIjsKKworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoaW5jUmVzdWx0LCBzUmVzdWx0KTsKKworICAgICAgICAgICAgaWYgKG9rMykgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyBhcHBlbmRDb21wYXJlUmVzdWx0KGludCByZXN1bHQsIFN0cmluZyB0YXJnZXQpeworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkxFU1MiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAwKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkVRVUFMIjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMSkgeworICAgICAgICAgICAgdGFyZ2V0ICs9ICJHUkVBVEVSIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBodWggPSAiPyI7CisgICAgICAgICAgICB0YXJnZXQgKz0gaHVoICsgcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorICAgIAorICAgIFN0cmluZyBwcmV0dGlmeShDb2xsYXRpb25LZXkgc291cmNlS2V5KSB7CisgICAgICAgIGludCBpOworICAgICAgICBieXRlW10gYnl0ZXM9IHNvdXJjZUtleS50b0J5dGVBcnJheSgpOworICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gIlsiOworICAgIAorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRhcmdldCArPSBJbnRlZ2VyLnRvSGV4U3RyaW5nKGJ5dGVzW2ldKTsKKyAgICAgICAgICAgIHRhcmdldCArPSAiICI7CisgICAgICAgIH0KKyAgICAgICAgdGFyZ2V0ICs9ICJdIjsKKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbk1pc2NUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uTWlzY1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzEwZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvbk1pc2NUZXN0LmphdmEKQEAgLTAsMCArMSwxNjUyIEBACisgLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAKKyAqICREYXRlOiAKKyAqICRSZXZpc2lvbjogCisgKgorICoqKngqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2Mi4xIDogY2ludGx0ZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9jaW50bHRlc3QvY21zY2NvbGwuYworICoqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZURhdGE7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworcHVibGljIGNsYXNzIENvbGxhdGlvbk1pc2NUZXN0IGV4dGVuZHMgVGVzdEZtd2t7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IENvbGxhdGlvbk1pc2NUZXN0KCkucnVuKGFyZ3MpOworICAgICAgICAvLyBuZXcgQ29sbGF0aW9uTWlzY1Rlc3QoKS5UZXN0TG9jYWxlUnVsZUJhc2VkQ29sbGF0b3JzKCk7IAorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0UnVsZU9wdGlvbnMoKSB7CisgICAgICAgLy8gdmFsdWVzIGhlcmUgYXJlIGhhcmRjb2RlZCBhbmQgYXJlIGNvcnJlY3QgZm9yIHRoZSBjdXJyZW50IFVDQSB3aGVuIAorICAgICAgIC8vIHRoZSBVQ0EgY2hhbmdlcywgb25lIG1pZ2h0IGJlIGZvcmNlZCB0byBjaGFuZ2UgdGhlc2UgdmFsdWVzLiAKKyAgICAgICAvLyAoXFx1MDJkMCwgXFxVMDAwMTBGRkZDIGV0Yy4uLikgCisgICAgICAgIFN0cmluZ1tdIHJ1bGVzID0geworICAgICAgICAgICAgLy8gY2Fubm90IHRlc3QgdGhpcyBhbnltb3JlLCBhcyBbbGFzdCBwcmltYXJ5IGlnbm9yYWJsZV0gZG9lc24ndCAKKyAgICAgICAgICAgIC8vIGhhdmUgYSAgY29kZSBwb2ludCBhc3NvY2lhdGVkIHRvIGl0IGFueW1vcmUgIAorICAgICAgICAgICAgLy8gIiZbYmVmb3JlIDNdW2xhc3QgcHJpbWFyeSBpZ25vcmFibGVdPDw8ayIsCisgICAgICAgICAgICAvLyAtIGFsbCBiZWZvcmVzIGhlcmUgYW1vdW50IHRvIHplcm8gICAgICAgCisgICAgICAgICAgICAiJltiZWZvcmUgMV1bZmlyc3QgdGVydGlhcnkgaWdub3JhYmxlXTw8PGEiLAorICAgICAgICAgICAgIiZbYmVmb3JlIDFdW2xhc3QgdGVydGlhcnkgaWdub3JhYmxlXTw8PGEiLCAgCisgICAgICAgICAgICAiJltiZWZvcmUgMV1bZmlyc3Qgc2Vjb25kYXJ5IGlnbm9yYWJsZV08PDxhIiwKKyAgICAgICAgICAgICImW2JlZm9yZSAxXVtsYXN0IHNlY29uZGFyeSBpZ25vcmFibGVdPDw8YSIsIAorICAgICAgICAgICAgLy8gJ25vcm1hbCcgYmVmb3JlcyAgCisgICAgICAgICAgICAiJltiZWZvcmUgMV1bZmlyc3QgcHJpbWFyeSBpZ25vcmFibGVdPDw8Yzw8PGIgJltmaXJzdCBwcmltYXJ5IGlnbm9yYWJsZV08YSIsCisgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIGEgY29kZSBwb2ludCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IHByaW1hcnkgCisgICAgICAgICAgICAvLyBpZ25vcmFibGUgCisgICAgICAgICAgICAiJltiZWZvcmUgMl1bbGFzdCBwcmltYXJ5IGlnbm9yYWJsZV08PDxjPDw8YiAmW2xhc3QgcHJpbWFyeSBpZ25vcmFibGVdPGEiLAorICAgICAgICAgICAgIiZbYmVmb3JlIDFdW2ZpcnN0IHZhcmlhYmxlXTw8PGM8PDxiICZbZmlyc3QgdmFyaWFibGVdPGEiLAorICAgICAgICAgICAgIiZbbGFzdCB2YXJpYWJsZV08YSAmW2JlZm9yZSAxXVtsYXN0IHZhcmlhYmxlXTw8PGM8PDxiICIsCisgICAgICAgICAgICAiJltmaXJzdCByZWd1bGFyXTxhICZbYmVmb3JlIDFdW2ZpcnN0IHJlZ3VsYXJdPGIiLCAKKyAgICAgICAgICAgICImW2JlZm9yZSAxXVtsYXN0IHJlZ3VsYXJdPGIgJltsYXN0IHJlZ3VsYXJdPGEiLAorICAgICAgICAgICAgIiZbYmVmb3JlIDFdW2ZpcnN0IGltcGxpY2l0XTxiICZbZmlyc3QgaW1wbGljaXRdPGEiLAorICAgICAgICAgICAgIiZbYmVmb3JlIDFdW2xhc3QgaW1wbGljaXRdPGIgJltsYXN0IGltcGxpY2l0XTxhIiwgCisgICAgICAgICAgICAiJltsYXN0IHZhcmlhYmxlXTx6JltsYXN0IHByaW1hcnkgaWdub3JhYmxlXTx4JltsYXN0IHNlY29uZGFyeSBpZ25vcmFibGVdPDx5JltsYXN0IHRlcnRpYXJ5IGlnbm9yYWJsZV08PDx3Jlt0b3BdPHUiLAorICAgICAgICAgIH07CisgICAgICAgIFN0cmluZ1tdW10gZGF0YSA9IHsKKyAgICAgICAgICAgICAgICAvLyB7ImsiLCAiXHUyMGUzIn0sCisgICAgICAgICAgICAgICAgeyJcXHUwMDAwIiwgImEifSwgLy8geW91IGNhbm5vdCBnbyBiZWZvcmUgZmlyc3QgdGVydGlhcnkgaWdub3JhYmxlIAorICAgICAgICAgICAgICAgIHsiXFx1MDAwMCIsICJhIn0sIC8vIHlvdSBjYW5ub3QgZ28gYmVmb3JlIGxhc3QgdGVydGlhcnkgaWdub3JhYmxlIAorICAgICAgICAgICAgICAgIHsiXFx1MDAwMCIsICJhIn0sIC8vIHlvdSBjYW5ub3QgZ28gYmVmb3JlIGZpcnN0IHNlY29uZGFyeSBpZ25vcmFibGUKKyAgICAgICAgICAgICAgICB7IlxcdTAwMDAiLCAiYSJ9LCAvLyB5b3UgY2Fubm90IGdvIGJlZm9yZSBmaXJzdCBzZWNvbmRhcnkgaWdub3JhYmxlCisgICAgICAgICAgICAgICAgeyJjIiwgImIiLCAiXFx1MDMzMiIsICJhIn0sCisgICAgICAgICAgICAgICAgeyJcXHUwMzMyIiwgIlxcdTIwZTMiLCAiYyIsICJiIiwgImEifSwKKyAgICAgICAgICAgICAgICB7ImMiLCAiYiIsICJcXHUwMDA5IiwgImEiLCAiXFx1MDAwYSJ9LAorICAgICAgICAgICAgICAgIHsiYyIsICJiIiwgIlxcdUQ4MDBcXHVERjIzIiwgImEiLCAiXFx1MDJkMCJ9LAorICAgICAgICAgICAgICAgIHsiYiIsICJcXHUwMmQwIiwgImEiLCAiXFx1MDJkMSJ9LAorICAgICAgICAgICAgICAgIHsiYiIsICJcXHVkODAxXFx1ZGMyNSIsICJhIiwgIlxcdTRlMDAifSwKKyAgICAgICAgICAgICAgICB7ImIiLCAiXFx1NGUwMCIsICJhIiwgIlxcdTRlMDEifSwKKyAgICAgICAgICAgICAgICB7ImIiLCAiXFxVMDAxMEZGRkMiLCAiYSJ9LAorICAgICAgICAgICAgICAgIHsiXHVmZmZiIiwgICJ3IiwgInkiLCAiXHUyMGUzIiwgIngiLCAiXHUxMzdjIiwgInoiLCAidSJ9LAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGk8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBnZW5lcmljUnVsZXNTdGFydGVyKHJ1bGVzW2ldLCBkYXRhW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGdlbmVyaWNSdWxlc1N0YXJ0ZXIoU3RyaW5nIHJ1bGVzLCBTdHJpbmdbXSBzKSB7CisgICAgICAgIGdlbmVyaWNSdWxlc1Rlc3RXaXRoUmVzdWx0KHJ1bGVzLCBzLCAtMSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZ2VuZXJpY1J1bGVzVGVzdFdpdGhSZXN1bHQoU3RyaW5nIHJ1bGVzLCBTdHJpbmdbXSBzLCBpbnQgcmVzdWx0KSB7CisgICAgICAgIAorICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbGwgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXMpOworICAgICAgICAgICAgLy8gbG9nbG4oIlJ1bGVzIHN0YXJ0ZXIgZm9yICIgKyBydWxlcyk7CisgICAgICAgICAgICBnZW5lcmljT3JkZXJpbmdUZXN0V2l0aFJlc3VsdChjb2xsLCBzLCByZXN1bHQpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIlVuYWJsZSB0byBvcGVuIGNvbGxhdG9yIHdpdGggcnVsZXMgIiArIHJ1bGVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGdlbmVyaWNPcmRlcmluZ1Rlc3RXaXRoUmVzdWx0KENvbGxhdG9yIGNvbGwsIFN0cmluZ1tdIHMsIGludCByZXN1bHQpIHsKKyAgICAgICAgU3RyaW5nIHQxID0gIiI7CisgICAgICAgIFN0cmluZyB0MiA9ICIiOworICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXRlciA9IG51bGw7CisgICAgICAgIAorICAgICAgICBpbnQgaSA9IDAsIGogPSAwOworICAgICAgICAvLyBsb2dsbigidGVzdGluZyBzZXF1ZW5jZToiKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgLy8gbG9nbG4oc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaXRlciA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpIGNvbGwpLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0MSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiQ3JlYXRpb24gb2YgaXRlcmF0b3IgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgcy5sZW5ndGggLSAxOyBpKyspIHsKKyAgICAgICAgICAgIGZvcihqID0gaSsxOyBqIDwgcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIHQxID0gVXRpbGl0eS51bmVzY2FwZShzW2ldKTsKKyAgICAgICAgICAgICAgICB0MiA9IFV0aWxpdHkudW5lc2NhcGUoc1tqXSk7CisgICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKGkgKyAiICIgKyBqKTsKKyAgICAgICAgICAgICAgICBkb1Rlc3QoY29sbCwgdDEsIHQyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIC8qIHN5bndlZSA6IGFkZGVkIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yIHRlc3QgKi8KKyAgICAgICAgICAgICAgICBpdGVyLnNldFRleHQodDEpOworICAgICAgICAgICAgICAgIGJhY2tBbmRGb3J0aChpdGVyKTsKKyAgICAgICAgICAgICAgICBpdGVyLnNldFRleHQodDIpOworICAgICAgICAgICAgICAgIGJhY2tBbmRGb3J0aChpdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZG9UZXN0KENvbGxhdG9yIG15Q29sbGF0aW9uLCBTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0LCBpbnQgcmVzdWx0KSB7CisgICAgICAgIGRvVGVzdFZhcmlhbnQobXlDb2xsYXRpb24sIHNvdXJjZSwgdGFyZ2V0LCByZXN1bHQpOworICAgICAgICBpZihyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBkb1Rlc3RWYXJpYW50KG15Q29sbGF0aW9uLCB0YXJnZXQsIHNvdXJjZSwgMSk7CisgICAgICAgIH0gZWxzZSBpZihyZXN1bHQgPiAwKSB7CisgICAgICAgICAgICBkb1Rlc3RWYXJpYW50KG15Q29sbGF0aW9uLCB0YXJnZXQsIHNvdXJjZSwgLTEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG9UZXN0VmFyaWFudChteUNvbGxhdGlvbiwgdGFyZ2V0LCBzb3VyY2UsIDApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZG9UZXN0VmFyaWFudChDb2xsYXRvciBteUNvbGxhdGlvbiwgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgaW50IHJlc3VsdCkgeworICAgICAgICBpbnQgaW5jUmVzdWx0ID0gcmVzdWx0OworICAgICAgICBpbnQgY29tcGFyZVJlc3VsdCAgPSBteUNvbGxhdGlvbi5jb21wYXJlKHNvdXJjZSwgdGFyZ2V0KTsKKyAgICAgICAgQ29sbGF0aW9uS2V5IHNvcnRLZXkxID0gbXlDb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHNvdXJjZSk7CisgICAgICAgIENvbGxhdGlvbktleSBzb3J0S2V5MiA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleSh0YXJnZXQpOworICAgICAgICAKKyAgICAgICAgaW50IHRlbXA9IHNvcnRLZXkxLmNvbXBhcmVUbyhzb3J0S2V5Mik7CisgICAgICAgIGludCBrZXlSZXN1bHQ7CisgICAgICAgIGlmKHRlbXAgPCAwKSB7CisgICAgICAgICAgICBrZXlSZXN1bHQ9LTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZih0ZW1wID4gMCkgeworICAgICAgICAgICAga2V5UmVzdWx0PSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAga2V5UmVzdWx0ID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXBvcnRDUmVzdWx0KCBzb3VyY2UsIHRhcmdldCwgc29ydEtleTEsIHNvcnRLZXkyLCBjb21wYXJlUmVzdWx0LCBrZXlSZXN1bHQsIGluY1Jlc3VsdCwgcmVzdWx0ICk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVwb3J0Q1Jlc3VsdChTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0LCBDb2xsYXRpb25LZXkgc291cmNlS2V5LCBDb2xsYXRpb25LZXkgdGFyZ2V0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApIHsKKyAgICAgICAgaWYgKGV4cGVjdGVkUmVzdWx0IDwgLTEgfHwgZXhwZWN0ZWRSZXN1bHQgPiAxKSB7CisgICAgICAgICAgICBlcnJsbigiKioqKiogaW52YWxpZCBjYWxsIHRvIHJlcG9ydENSZXN1bHQgKioqKiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gb2sxID0gKGNvbXBhcmVSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgICAgICBib29sZWFuIG9rMiA9IChrZXlSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgICAgICBib29sZWFuIG9rMyA9IChpbmNSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgICAgICBpZiAob2sxICYmIG9rMiAmJiBvazMgLyogc3lud2VlIHRvIHVuZG8gJiYgIWlzVmVyYm9zZSgpKi8pIHsKKyAgICAgICAgICAgIHJldHVybjsgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgbXNnMSA9IG9rMT8gIk9rOiBjb21wYXJlKFwiIiA6ICJGQUlMOiBjb21wYXJlKFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBTdHJpbmcgbXNnMyA9ICJcIikgcmV0dXJuZWQgIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2c0ID0gIjsgZXhwZWN0ZWQgIjsKKyAgICAgICAgICAgIFN0cmluZyBzRXhwZWN0ID0gbmV3IFN0cmluZygiIik7CisgICAgICAgICAgICBTdHJpbmcgc1Jlc3VsdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoY29tcGFyZVJlc3VsdCwgc1Jlc3VsdCk7CisgICAgICAgICAgICBzRXhwZWN0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChleHBlY3RlZFJlc3VsdCwgc0V4cGVjdCk7CisgICAgICAgICAgICBpZiAob2sxKSB7CisgICAgICAgICAgICAgICAgLy8gbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICAvLyBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1zZzEgPSBvazMgPyAiT2s6IGluY0NvbXBhcmUoXCIiIDogIkZBSUw6IGluY0NvbXBhcmUoXCIiOworICAgICAgICAgICAgbXNnMiA9ICJcIiwgXCIiOworICAgICAgICAgICAgbXNnMyA9ICJcIikgcmV0dXJuZWQgIjsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGluY1Jlc3VsdCwgc1Jlc3VsdCk7CisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgLy8gbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIFN0cmluZyBhcHBlbmRDb21wYXJlUmVzdWx0KGludCByZXN1bHQsIFN0cmluZyB0YXJnZXQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgeyAgLy9MRVNTCisgICAgICAgICAgICB0YXJnZXQgKz0gIkxFU1MiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAwKSB7ICAvL0VRVUFMCisgICAgICAgICAgICB0YXJnZXQgKz0gIkVRVUFMIjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMSkgeyAgLy9HUkVBVEVSCisgICAgICAgICAgICB0YXJnZXQgKz0gIkdSRUFURVIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGh1aCA9ICI/IjsKKyAgICAgICAgICAgIHRhcmdldCArPSBodWggKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHByZXR0aWZ5KENvbGxhdGlvbktleSBzb3VyY2VLZXkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGJ5dGVbXSBieXRlcz0gc291cmNlS2V5LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIFN0cmluZyB0YXJnZXQgPSAiWyI7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGFyZ2V0ICs9IEludGVnZXIudG9IZXhTdHJpbmcoYnl0ZXNbaV0pOworICAgICAgICAgICAgdGFyZ2V0ICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gIl0iOworICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYW4gaW50ZWdlciBhcnJheSBjb250YWluaW5nIGFsbCBvZiB0aGUgY29sbGF0aW9uIG9yZGVycworICAgICAqIHJldHVybmVkIGJ5IGNhbGxzIHRvIG5leHQgb24gdGhlIHNwZWNpZmllZCBpdGVyYXRvcgorICAgICAqLworICAgIGludFtdIGdldE9yZGVycyhDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXRlcikgeworICAgICAgICBpbnQgbWF4U2l6ZSA9IDEwMDsKKyAgICAgICAgaW50IHNpemUgPSAwOworICAgICAgICBpbnRbXSBvcmRlcnMgPSBuZXcgaW50W21heFNpemVdOworICAgIAorICAgICAgICBpbnQgb3JkZXI7CisgICAgICAgIHdoaWxlICgob3JkZXIgPSBpdGVyLm5leHQoKSkgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgaWYgKHNpemUgPT0gbWF4U2l6ZSkgeworICAgICAgICAgICAgICAgIG1heFNpemUgKj0gMjsKKyAgICAgICAgICAgICAgICBpbnRbXSB0ZW1wID0gbmV3IGludFttYXhTaXplXTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG9yZGVycywgMCwgdGVtcCwgIDAsIHNpemUpOworICAgICAgICAgICAgICAgIG9yZGVycyA9IHRlbXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcmRlcnNbc2l6ZSsrXSA9IG9yZGVyOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChtYXhTaXplID4gc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50W10gdGVtcCA9IG5ldyBpbnRbc2l6ZV07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG9yZGVycywgMCwgdGVtcCwgIDAsIHNpemUpOworICAgICAgICAgICAgb3JkZXJzID0gdGVtcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3JkZXJzOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJhY2tBbmRGb3J0aChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXRlcikgeworICAgICAgICAvLyBSdW4gdGhyb3VnaCB0aGUgaXRlcmF0b3IgZm9yd2FyZHMgYW5kIHN0aWNrIGl0IGludG8gYW4gYXJyYXkKKyAgICAgICAgaW50W10gb3JkZXJzID0gZ2V0T3JkZXJzKGl0ZXIpOworICAgIAorICAgICAgICAvLyBOb3cgZ28gdGhyb3VnaCBpdCBiYWNrd2FyZHMgYW5kIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHNhbWUgdmFsdWVzCisgICAgICAgIGludCBpbmRleCA9IG9yZGVycy5sZW5ndGg7CisgICAgICAgIGludCBvOworICAgIAorICAgICAgICAvLyByZXNldCB0aGUgaXRlcmF0b3IKKyAgICAgICAgaXRlci5yZXNldCgpOworICAgIAorICAgICAgICB3aGlsZSAoKG8gPSBpdGVyLnByZXZpb3VzKCkpICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgIGlmIChvICE9IG9yZGVyc1stLWluZGV4XSkgeworICAgICAgICAgICAgICAgIGlmIChvID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4ID4gMCAmJiBvcmRlcnNbLS1pbmRleF0gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB9IGlmIChvICE9IG9yZGVyc1tpbmRleF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJNaXNtYXRjaCBhdCBpbmRleCAiICsgaW5kZXggKyAiOiAweCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKG9yZGVyc1tpbmRleF0pICsgIiB2cyAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKG8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIHdoaWxlIChpbmRleCAhPSAwICYmIG9yZGVyc1tpbmRleCAtIDFdID09IDApIHsKKyAgICAgICAgICBpbmRleCAtLTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoaW5kZXggIT0gMCkgeworICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJEaWRuJ3QgZ2V0IGJhY2sgdG8gYmVnaW5uaW5nIC0gaW5kZXggaXMgIjsKKyAgICAgICAgICAgIGVycmxuKG1zZyArIGluZGV4KTsKKyAgICAKKyAgICAgICAgICAgIGl0ZXIucmVzZXQoKTsKKyAgICAgICAgICAgIGVycigibmV4dDogIik7CisgICAgICAgICAgICB3aGlsZSAoKG8gPSBpdGVyLm5leHQoKSkgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgICAgIFN0cmluZyBoZXhTdHJpbmcgPSAiMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhvKSArICIgIjsKKyAgICAgICAgICAgICAgICBlcnIoaGV4U3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVycmxuKCIiKTsKKyAgICAgICAgICAgIGVycigicHJldjogIik7CisgICAgICAgICAgICB3aGlsZSAoKG8gPSBpdGVyLnByZXZpb3VzKCkpICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaGV4U3RyaW5nID0gIjB4IiArIEludGVnZXIudG9IZXhTdHJpbmcobykgKyAiICI7CisgICAgICAgICAgICAgICAgIGVycihoZXhTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJybG4oIiIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RCZWZvcmVQcmVmaXhGYWlsdXJlKCkgeworICAgICAgICBTdHJpbmdbXSBydWxlcyA9IHsKKyAgICAgICAgICAgICImZyA8PDwgYSZbYmVmb3JlIDNdXHVmZjQxIDw8PCB4IiwKKyAgICAgICAgICAgICImXHUzMEE3PVx1MzBBNz1cdTMwNDc9XHVmZjZhJlx1MzBBOD1cdTMwQTg9XHUzMDQ4PVx1ZmY3NCZbYmVmb3JlIDNdXHUzMGE3PDw8XHUzMGE5IiwKKyAgICAgICAgICAgICImW2JlZm9yZSAzXVx1MzBhNzw8PFx1MzBhOSZcdTMwQTc9XHUzMEE3PVx1MzA0Nz1cdWZmNmEmXHUzMEE4PVx1MzBBOD1cdTMwNDg9XHVmZjc0IiwKKyAgICAgICAgfTsKKyAgICAgICAgU3RyaW5nW11bXSBkYXRhID0geworICAgICAgICAgICAgeyJ4IiwgIlx1ZmY0MSJ9LAorICAgICAgICAgICAgeyJcdTMwYTkiLCAiXHUzMGE3In0sCisgICAgICAgICAgICB7Ilx1MzBhOSIsICJcdTMwYTcifSwKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGk8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBnZW5lcmljUnVsZXNTdGFydGVyKHJ1bGVzW2ldLCBkYXRhW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29udHJhY3Rpb25DbG9zdXJlKCkgeworICAgICAgICBTdHJpbmdbXSBydWxlcyA9IHsKKyAgICAgICAgICAgICImYj1cdTAwZTRcdTAwZTQiLAorICAgICAgICAgICAgIiZiPVx1MDBDNSIsCisgICAgICAgIH07CisgICAgICAgIFN0cmluZ1tdW10gZGF0YSA9IHsKKyAgICAgICAgICAgIHsgImIiLCAiXHUwMGU0XHUwMGU0IiwgImFcdTAzMDhhXHUwMzA4IiwgIlx1MDBlNGFcdTAzMDgiLCAiYVx1MDMwOFx1MDBlNCIgfSwKKyAgICAgICAgICAgIHsgImIiLCAiXHUwMEM1IiwgIkFcdTAzMEEiLCAiXHUyMTJCIiB9LAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgZm9yKGludCBpID0gMDsgaTwgcnVsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGdlbmVyaWNSdWxlc1Rlc3RXaXRoUmVzdWx0KHJ1bGVzW2ldLCBkYXRhW2ldLCAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0UHJlZml4Q29tcG9zZSgpIHsKKyAgICAgICAgU3RyaW5nIHJ1bGUxID0gIiZcdTMwYTc8PDxcdTMwYWJ8XHUzMGZjPVx1MzBhY3xcdTMwZmMiOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9IHJ1bGUxOworICAgICAgICB0cnkgeworICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sbCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihzdHJpbmcpOworICAgICAgICAgICAgbG9nbG4oInJ1bGU6IiArIGNvbGwuZ2V0UnVsZXMoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igb3BlbiBSdWxlQmFzZWRDb2xsYXRvciBydWxlID0gIiArIHN0cmluZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFN0ckNvbGxJZGVudGljYWxQcmVmaXgoKSB7CisgICAgICAgIFN0cmluZyBydWxlID0gIiZcdWQ5YjBcdWRjNzA9XHVkOWIwXHVkYzcxIjsKKyAgICAgICAgU3RyaW5nIHRlc3RbXSA9IHsKKyAgICAgICAgICAgICJhYlx1ZDliMFx1ZGM3MCIsCisgICAgICAgICAgICAiYWJcdWQ5YjBcdWRjNzEiCisgICAgICAgIH07CisgICAgICAgIGdlbmVyaWNSdWxlc1Rlc3RXaXRoUmVzdWx0KHJ1bGUsIHRlc3QsIDApOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0UHJlZml4KCkgeworICAgICAgICBTdHJpbmdbXSBydWxlcyA9IHsKKyAgICAgICAgICAgICImeiA8PDwgenxhIiwgCisgICAgICAgICAgICAiW3N0cmVuZ3RoIEldJmE9XHVkOTAwXHVkYzI1Jno8PDxcdWQ5MDBcdWRjMjV8YSIsIAorICAgICAgICB9OworICAgICAgICBTdHJpbmdbXVtdIGRhdGEgPSB7CisgICAgICAgICAgICB7Inp6IiwgInphIn0sCisgICAgICAgICAgICB7ImFhIiwgImF6IiwgIlx1ZDkwMFx1ZGMyNXoiLCAiXHVkOTAwXHVkYzI1YSIsICJ6eiJ9LAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgZm9yKGludCBpID0gMDsgaTxydWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZ2VuZXJpY1J1bGVzU3RhcnRlcihydWxlc1tpXSwgZGF0YVtpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdE5ld0phcGFuZXNlKCkgeworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRlc3QxW10gPSB7CisgICAgICAgICAgICAiXHUzMGI3XHUzMGUzXHUzMGZjXHUzMGVjIiwKKyAgICAgICAgICAgICJcdTMwYjdcdTMwZTNcdTMwYTQiLAorICAgICAgICAgICAgIlx1MzBiN1x1MzBlNFx1MzBhMyIsCisgICAgICAgICAgICAiXHUzMGI3XHUzMGUzXHUzMGVjIiwKKyAgICAgICAgICAgICJcdTMwNjFcdTMwODdcdTMwNTMiLAorICAgICAgICAgICAgIlx1MzA2MVx1MzA4OFx1MzA1MyIsCisgICAgICAgICAgICAiXHUzMGMxXHUzMGU3XHUzMGIzXHUzMGVjXHUzMGZjXHUzMGM4IiwKKyAgICAgICAgICAgICJcdTMwNjZcdTMwZmNcdTMwNWYiLAorICAgICAgICAgICAgIlx1MzBjNlx1MzBmY1x1MzBiZiIsIAorICAgICAgICAgICAgIlx1MzBjNlx1MzBhN1x1MzBiZiIsCisgICAgICAgICAgICAiXHUzMDY2XHUzMDQ4XHUzMDVmIiwKKyAgICAgICAgICAgICJcdTMwNjdcdTMwZmNcdTMwNWYiLCAKKyAgICAgICAgICAgICJcdTMwYzdcdTMwZmNcdTMwYmYiLAorICAgICAgICAgICAgIlx1MzBjN1x1MzBhN1x1MzBiZiIsCisgICAgICAgICAgICAiXHUzMDY3XHUzMDQ4XHUzMDVmIiwKKyAgICAgICAgICAgICJcdTMwNjZcdTMwZmNcdTMwNWZcdTMwZmMiLAorICAgICAgICAgICAgIlx1MzBjNlx1MzBmY1x1MzBiZlx1MzBhMSIsCisgICAgICAgICAgICAiXHUzMGM2XHUzMGE3XHUzMGJmXHUzMGZjIiwKKyAgICAgICAgICAgICJcdTMwNjZcdTMwNDdcdTMwNWZcdTMwNDEiLAorICAgICAgICAgICAgIlx1MzA2Nlx1MzA0OFx1MzA1Zlx1MzBmYyIsCisgICAgICAgICAgICAiXHUzMDY3XHUzMGZjXHUzMDVmXHUzMGZjIiwKKyAgICAgICAgICAgICJcdTMwYzdcdTMwZmNcdTMwYmZcdTMwYTEiLAorICAgICAgICAgICAgIlx1MzA2N1x1MzBhN1x1MzA1Zlx1MzBhMSIsCisgICAgICAgICAgICAiXHUzMGM3XHUzMDQ3XHUzMGJmXHUzMDQxIiwKKyAgICAgICAgICAgICJcdTMwYzdcdTMwYThcdTMwYmZcdTMwYTIiLAorICAgICAgICAgICAgIlx1MzA3Mlx1MzA4NiIsCisgICAgICAgICAgICAiXHUzMDczXHUzMDg1XHUzMDQyIiwKKyAgICAgICAgICAgICJcdTMwNzRcdTMwODVcdTMwNDIiLAorICAgICAgICAgICAgIlx1MzA3M1x1MzA4NVx1MzA0Mlx1MzBmYyIsCisgICAgICAgICAgICAiXHUzMGQzXHUzMGU1XHUzMGEyXHUzMGZjIiwKKyAgICAgICAgICAgICJcdTMwNzRcdTMwODVcdTMwNDJcdTMwZmMiLAorICAgICAgICAgICAgIlx1MzBkNFx1MzBlNVx1MzBhMlx1MzBmYyIsCisgICAgICAgICAgICAiXHUzMGQyXHUzMGU1XHUzMGE2IiwKKyAgICAgICAgICAgICJcdTMwZDJcdTMwZTZcdTMwYTYiLAorICAgICAgICAgICAgIlx1MzBkNFx1MzBlNVx1MzBhNlx1MzBhMiIsCisgICAgICAgICAgICAiXHUzMDczXHUzMDg1XHUzMGZjXHUzMDQyXHUzMGZjIiwgCisgICAgICAgICAgICAiXHUzMGQzXHUzMGU1XHUzMGZjXHUzMGEyXHUzMGZjIiwKKyAgICAgICAgICAgICJcdTMwZDNcdTMwZTVcdTMwYTZcdTMwYTJcdTMwZmMiLAorICAgICAgICAgICAgIlx1MzA3Mlx1MzA4NVx1MzA5MyIsCisgICAgICAgICAgICAiXHUzMDc0XHUzMDg1XHUzMDkzIiwKKyAgICAgICAgICAgICJcdTMwNzVcdTMwZmNcdTMwOGEiLAorICAgICAgICAgICAgIlx1MzBkNVx1MzBmY1x1MzBlYSIsCisgICAgICAgICAgICAiXHUzMDc1XHUzMDQ1XHUzMDhhIiwKKyAgICAgICAgICAgICJcdTMwNzVcdTMwYTVcdTMwOGEiLAorICAgICAgICAgICAgIlx1MzA3NVx1MzBhNVx1MzBlYSIsCisgICAgICAgICAgICAiXHUzMGQ1XHUzMGE2XHUzMGVhIiwKKyAgICAgICAgICAgICJcdTMwNzZcdTMwZmNcdTMwOGEiLAorICAgICAgICAgICAgIlx1MzBkNlx1MzBmY1x1MzBlYSIsCisgICAgICAgICAgICAiXHUzMDc2XHUzMDQ1XHUzMDhhIiwKKyAgICAgICAgICAgICJcdTMwZDZcdTMwYTVcdTMwOGEiLAorICAgICAgICAgICAgIlx1MzA3N1x1MzA0Nlx1MzA4YSIsCisgICAgICAgICAgICAiXHUzMGQ3XHUzMGE2XHUzMGVhIiwKKyAgICAgICAgICAgICJcdTMwNzVcdTMwZmNcdTMwOGFcdTMwZmMiLAorICAgICAgICAgICAgIlx1MzBkNVx1MzBhNVx1MzBlYVx1MzBmYyIsCisgICAgICAgICAgICAiXHUzMDc1XHUzMGE1XHUzMDhhXHUzMGEzIiwKKyAgICAgICAgICAgICJcdTMwZDVcdTMwNDVcdTMwOGFcdTMwNDMiLAorICAgICAgICAgICAgIlx1MzBkNVx1MzBhNlx1MzBlYVx1MzBmYyIsCisgICAgICAgICAgICAiXHUzMDc1XHUzMDQ2XHUzMDhhXHUzMDQzIiwKKyAgICAgICAgICAgICJcdTMwZDZcdTMwYTZcdTMwZWFcdTMwYTQiLAorICAgICAgICAgICAgIlx1MzA3N1x1MzBmY1x1MzA4YVx1MzBmYyIsCisgICAgICAgICAgICAiXHUzMDc3XHUzMGE1XHUzMDhhXHUzMGE0IiwKKyAgICAgICAgICAgICJcdTMwNzdcdTMwNDZcdTMwOGFcdTMwZmMiLAorICAgICAgICAgICAgIlx1MzBkN1x1MzBhNlx1MzBlYVx1MzBhNCIsCisgICAgICAgICAgICAiXHUzMGQ1XHUzMGZkIiwKKyAgICAgICAgICAgICJcdTMwNzVcdTMwOWUiLAorICAgICAgICAgICAgIlx1MzA3Nlx1MzA5ZCIsCisgICAgICAgICAgICAiXHUzMDc2XHUzMDc1IiwKKyAgICAgICAgICAgICJcdTMwNzZcdTMwZDUiLAorICAgICAgICAgICAgIlx1MzBkNlx1MzA3NSIsCisgICAgICAgICAgICAiXHUzMGQ2XHUzMGQ1IiwKKyAgICAgICAgICAgICJcdTMwNzZcdTMwOWUiLAorICAgICAgICAgICAgIlx1MzA3Nlx1MzA3NyIsCisgICAgICAgICAgICAiXHUzMGQ2XHUzMDc3IiwKKyAgICAgICAgICAgICJcdTMwNzdcdTMwOWQiLAorICAgICAgICAgICAgIlx1MzBkN1x1MzBmZCIsCisgICAgICAgICAgICAiXHUzMDc3XHUzMDc1IiwKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXN0MltdID0geworICAgICAgICAgICAgIlx1MzA2Zlx1MzA5ZCIsIC8vIEhcdTMwOWQgCisgICAgICAgICAgICAiXHUzMGNmXHUzMGZkIiwgLy8gS1x1MzBmZCAKKyAgICAgICAgICAgICJcdTMwNmZcdTMwNmYiLCAvLyBISCAKKyAgICAgICAgICAgICJcdTMwNmZcdTMwY2YiLCAvLyBISyAKKyAgICAgICAgICAgICJcdTMwY2ZcdTMwY2YiLCAvLyBLSyAKKyAgICAgICAgICAgICJcdTMwNmZcdTMwOWUiLCAvLyBIXHUzMDllIAorICAgICAgICAgICAgIlx1MzBjZlx1MzBmZSIsIC8vIEtcdTMwZmUgCisgICAgICAgICAgICAiXHUzMDZmXHUzMDcwIiwgLy8gSEhcdTMwOWIgCisgICAgICAgICAgICAiXHUzMGNmXHUzMGQwIiwgLy8gS0tcdTMwOWIgCisgICAgICAgICAgICAiXHUzMDZmXHUzMDcxIiwgLy8gSEhcdTMwOWMgCisgICAgICAgICAgICAiXHUzMGNmXHUzMDcxIiwgLy8gS0hcdTMwOWMgCisgICAgICAgICAgICAiXHUzMGNmXHUzMGQxIiwgLy8gS0tcdTMwOWMgCisgICAgICAgICAgICAiXHUzMDcwXHUzMDlkIiwgLy8gSFx1MzA5Ylx1MzA5ZCAKKyAgICAgICAgICAgICJcdTMwZDBcdTMwZmQiLCAvLyBLXHUzMDliXHUzMGZkIAorICAgICAgICAgICAgIlx1MzA3MFx1MzA2ZiIsIC8vIEhcdTMwOWJIIAorICAgICAgICAgICAgIlx1MzBkMFx1MzBjZiIsIC8vIEtcdTMwOWJLIAorICAgICAgICAgICAgIlx1MzA3MFx1MzA5ZSIsIC8vIEhcdTMwOWJcdTMwOWUgCisgICAgICAgICAgICAiXHUzMGQwXHUzMGZlIiwgLy8gS1x1MzA5Ylx1MzBmZSAKKyAgICAgICAgICAgICJcdTMwNzBcdTMwNzAiLCAvLyBIXHUzMDliSFx1MzA5YiAKKyAgICAgICAgICAgICJcdTMwZDBcdTMwNzAiLCAvLyBLXHUzMDliSFx1MzA5YiAKKyAgICAgICAgICAgICJcdTMwZDBcdTMwZDAiLCAvLyBLXHUzMDliS1x1MzA5YiAKKyAgICAgICAgICAgICJcdTMwNzBcdTMwNzEiLCAvLyBIXHUzMDliSFx1MzA5YyAKKyAgICAgICAgICAgICJcdTMwZDBcdTMwZDEiLCAvLyBLXHUzMDliS1x1MzA5YyAKKyAgICAgICAgICAgICJcdTMwNzFcdTMwOWQiLCAvLyBIXHUzMDljXHUzMDlkIAorICAgICAgICAgICAgIlx1MzBkMVx1MzBmZCIsIC8vIEtcdTMwOWNcdTMwZmQgCisgICAgICAgICAgICAiXHUzMDcxXHUzMDZmIiwgLy8gSFx1MzA5Y0ggCisgICAgICAgICAgICAiXHUzMGQxXHUzMGNmIiwgLy8gS1x1MzA5Y0sgCisgICAgICAgICAgICAiXHUzMDcxXHUzMDcwIiwgLy8gSFx1MzA5Y0hcdTMwOWIgCisgICAgICAgICAgICAiXHUzMDcxXHUzMGQwIiwgLy8gSFx1MzA5Y0tcdTMwOWIgCisgICAgICAgICAgICAiXHUzMGQxXHUzMGQwIiwgLy8gS1x1MzA5Y0tcdTMwOWIKKyAgICAgICAgICAgICJcdTMwNzFcdTMwNzEiLCAvLyBIXHUzMDljSFx1MzA5YworICAgICAgICAgICAgIlx1MzBkMVx1MzBkMSIsIC8vIEtcdTMwOWNLXHUzMDljCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBTdHJpbmdbXSBhdHQgPSB7ICJzdHJlbmd0aCIsIH07CisgICAgICAgIE9iamVjdFtdIHZhbCA9IHsgbmV3IEludGVnZXIoQ29sbGF0b3IuUVVBVEVSTkFSWSksIH07CisgICAgICAgIAorICAgICAgICBTdHJpbmdbXSBhdHRTaGlmdGVkID0geyAic3RyZW5ndGgiLCAiQWx0ZXJuYXRlSGFuZGxpbmcifTsKKyAgICAgICAgT2JqZWN0IHZhbFNoaWZ0ZWRbXSA9IHsgbmV3IEludGVnZXIoQ29sbGF0b3IuUVVBVEVSTkFSWSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQm9vbGVhbih0cnVlKSB9OworICAgICAgIAorICAgICAgICBnZW5lcmljTG9jYWxlU3RhcnRlcldpdGhPcHRpb25zKExvY2FsZS5KQVBBTkVTRSwgdGVzdDEsIGF0dCwgdmFsKTsKKyAgICAgICAgZ2VuZXJpY0xvY2FsZVN0YXJ0ZXJXaXRoT3B0aW9ucyhMb2NhbGUuSkFQQU5FU0UsIHRlc3QyLCBhdHQsIHZhbCk7CisgICAgICAgIAorICAgICAgICBnZW5lcmljTG9jYWxlU3RhcnRlcldpdGhPcHRpb25zKExvY2FsZS5KQVBBTkVTRSwgdGVzdDEsIGF0dFNoaWZ0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsU2hpZnRlZCk7CisgICAgICAgIGdlbmVyaWNMb2NhbGVTdGFydGVyV2l0aE9wdGlvbnMoTG9jYWxlLkpBUEFORVNFLCB0ZXN0MiwgYXR0U2hpZnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxTaGlmdGVkKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBnZW5lcmljTG9jYWxlU3RhcnRlcihMb2NhbGUgbG9jYWxlLCBTdHJpbmcgc1tdKSB7CisgICAgICAgIENvbGxhdG9yIGNvbGwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKGxvY2FsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJVbmFibGUgdG8gb3BlbiBjb2xsYXRvciBmb3IgbG9jYWxlICIgKyBsb2NhbGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIGxvZ2xuKCJMb2NhbGUgc3RhcnRlciBmb3IgIiArIGxvY2FsZSk7CisgICAgICAgIGdlbmVyaWNPcmRlcmluZ1Rlc3QoY29sbCwgcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZ2VuZXJpY0xvY2FsZVN0YXJ0ZXJXaXRoT3B0aW9ucyhMb2NhbGUgbG9jYWxlLCBTdHJpbmdbXSBzLCBTdHJpbmdbXSBhdHRycywgT2JqZWN0W10gdmFsdWVzKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGNvbGwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbCA9IChSdWxlQmFzZWRDb2xsYXRvcilDb2xsYXRvci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIlVuYWJsZSB0byBvcGVuIGNvbGxhdG9yIGZvciBsb2NhbGUgIiArIGxvY2FsZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbG9nbG4oIkxvY2FsZSBzdGFydGVyIGZvciAiICtsb2NhbGUpOworICAgICAgICAKKyAgICAgICAgLy8gbG9nbG4oIlNldHRpbmcgYXR0cmlidXRlcyIpOworICAgICAgICAKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYXR0cnNbaV0uZXF1YWxzKCJzdHJlbmd0aCIpKSB7CisgICAgICAgICAgICAgICAgY29sbC5zZXRTdHJlbmd0aCgoKEludGVnZXIpdmFsdWVzW2ldKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cnNbaV0uZXF1YWxzKCJkZWNvbXAiKSkgeworICAgICAgICAgICAgICAgIGNvbGwuc2V0RGVjb21wb3NpdGlvbigoKEludGVnZXIpdmFsdWVzW2ldKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cnNbaV0uZXF1YWxzKCJBbHRlcm5hdGVIYW5kbGluZyIpKSB7CisgICAgICAgICAgICAgICAgY29sbC5zZXRBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQoKChCb29sZWFuKXZhbHVlc1tpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5ib29sZWFuVmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGdlbmVyaWNPcmRlcmluZ1Rlc3QoY29sbCwgcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZ2VuZXJpY09yZGVyaW5nVGVzdChDb2xsYXRvciBjb2xsLCBTdHJpbmdbXSBzKSB7CisgICAgICAgIGdlbmVyaWNPcmRlcmluZ1Rlc3RXaXRoUmVzdWx0KGNvbGwsIHMsIC0xKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdE5vbkNoYXJzKCkgeworICAgICAgICBTdHJpbmcgdGVzdFtdID0geworICAgICAgICAgICAgIlx1MDAwMCIsCisgICAgICAgICAgICAiXHVGRkZFIiwgIlx1RkZGRiIsCisgICAgICAgICAgICAiXFxVMDAwMUZGRkUiLCAiXFxVMDAwMUZGRkYiLAorICAgICAgICAgICAgIlxcVTAwMDJGRkZFIiwgIlxcVTAwMDJGRkZGIiwKKyAgICAgICAgICAgICJcXFUwMDAzRkZGRSIsICJcXFUwMDAzRkZGRiIsCisgICAgICAgICAgICAiXFxVMDAwNEZGRkUiLCAiXFxVMDAwNEZGRkYiLAorICAgICAgICAgICAgIlxcVTAwMDVGRkZFIiwgIlxcVTAwMDVGRkZGIiwKKyAgICAgICAgICAgICJcXFUwMDA2RkZGRSIsICJcXFUwMDA2RkZGRiIsCisgICAgICAgICAgICAiXFxVMDAwN0ZGRkUiLCAiXFxVMDAwN0ZGRkYiLAorICAgICAgICAgICAgIlxcVTAwMDhGRkZFIiwgIlxcVTAwMDhGRkZGIiwKKyAgICAgICAgICAgICJcXFUwMDA5RkZGRSIsICJcXFUwMDA5RkZGRiIsCisgICAgICAgICAgICAiXFxVMDAwQUZGRkUiLCAiXFxVMDAwQUZGRkYiLAorICAgICAgICAgICAgIlxcVTAwMEJGRkZFIiwgIlxcVTAwMEJGRkZGIiwKKyAgICAgICAgICAgICJcXFUwMDBDRkZGRSIsICJcXFUwMDBDRkZGRiIsCisgICAgICAgICAgICAiXFxVMDAwREZGRkUiLCAiXFxVMDAwREZGRkYiLAorICAgICAgICAgICAgIlxcVTAwMEVGRkZFIiwgIlxcVTAwMEVGRkZGIiwKKyAgICAgICAgICAgICJcXFUwMDBGRkZGRSIsICJcXFUwMDBGRkZGRiIsCisgICAgICAgICAgICAiXFxVMDAxMEZGRkUiLCAiXFxVMDAxMEZGRkYiCisgICAgICAgIH07CisgICAgICAgIENvbGxhdG9yIGNvbGwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoImVuIiwgIlVTIikpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIlVuYWJsZSB0byBvcGVuIGNvbGxhdG9yIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gbG9nbG4oIlRlc3Qgbm9uIGNoYXJhY3RlcnMiKTsKKyAgICAgICAgCisgICAgICAgIGdlbmVyaWNPcmRlcmluZ1Rlc3RXaXRoUmVzdWx0KGNvbGwsIHRlc3QsIDApOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0RXh0cmVtZUNvbXByZXNzaW9uKCkgeworICAgICAgICBTdHJpbmdbXSB0ZXN0ID0gbmV3IFN0cmluZ1s0XTsKKyAgICAgICAgCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGk8NDsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdGVtcCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjA0NzsgaisrKSB7CisgICAgICAgICAgICAgICAgdGVtcC5hcHBlbmQoJ2EnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlbXAuYXBwZW5kKChjaGFyKSgnYScgKyBpKSk7CisgICAgICAgICAgICB0ZXN0W2ldID0gdGVtcC50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBnZW5lcmljTG9jYWxlU3RhcnRlcihuZXcgTG9jYWxlKCJlbiIsICJVUyIpLCB0ZXN0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFRlc3RzIHN1cnJvZ2F0ZSBzdXBwb3J0LgorICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFN1cnJvZ2F0ZXMoKSB7CisgICAgICAgIFN0cmluZyB0ZXN0W10gPSB7InoiLCJcdWQ5MDBcdWRjMjUiLCAiXHVkODA1XHVkYzUwIiwgIlx1ZDgwMFx1ZGMwMHkiLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZDgwMFx1ZGMwMHIiLCAiXHVkODAwXHVkYzAwZiIsICJcdWQ4MDBcdWRjMDAiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXHVkODAwXHVkYzAwYyIsICJcdWQ4MDBcdWRjMDBiIiwgIlx1ZDgwMFx1ZGMwMGZhIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZDgwMFx1ZGMwMGZiIiwgIlx1ZDgwMFx1ZGMwMGEiLCAiYyIsICJiIn07CisKKyAgICAgICAgU3RyaW5nIHJ1bGUgPSAiJnogPCBcdWQ5MDBcdWRjMjUgPCBcdWQ4MDVcdWRjNTAgPCBcdWQ4MDBcdWRjMDB5ICIKKyAgICAgICAgICAgICAgICAgICAgICArICI8IFx1ZDgwMFx1ZGMwMHIgPCBcdWQ4MDBcdWRjMDBmIDw8IFx1ZDgwMFx1ZGMwMCAiCisgICAgICAgICAgICAgICAgICAgICAgKyAiPCBcdWQ4MDBcdWRjMDBmYSA8PCBcdWQ4MDBcdWRjMDBmYiA8IFx1ZDgwMFx1ZGMwMGEgIiAKKyAgICAgICAgICAgICAgICAgICAgICArICI8IGMgPCBiIjsKKyAgICAgICAgZ2VuZXJpY1J1bGVzU3RhcnRlcihydWxlLCB0ZXN0KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEJvY3N1Q292ZXJhZ2UoKSB7CisgICAgICAgIFN0cmluZyB0ZXN0ID0gIlx1MDA0MVx1MDQ0MVx1NDQ0MVxcVTAwMDQ0NDQxXHU0NDQxXHUwNDQxXHUwMDQxIjsKKyAgICAgICAgQ29sbGF0b3IgY29sbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKCk7CisgICAgICAgIGNvbGwuc2V0U3RyZW5ndGgoQ29sbGF0b3IuSURFTlRJQ0FMKTsKKyAgICAgICAgQ29sbGF0aW9uS2V5IGtleSA9IGNvbGwuZ2V0Q29sbGF0aW9uS2V5KHRlc3QpOworICAgICAgICBsb2dsbigic291cmNlOiIgKyBrZXkuZ2V0U291cmNlU3RyaW5nKCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q3lyaWxsaWNUYWlsb3JpbmcoKSB7CisgICAgICAgIFN0cmluZyB0ZXN0W10gPSB7CisgICAgICAgICAgICAiXHUwNDEwYiIsCisgICAgICAgICAgICAiXHUwNDEwXHUwMzA2YSIsCisgICAgICAgICAgICAiXHUwNGQwQSIKKyAgICAgICAgfTsKKyAgICAgICAgZ2VuZXJpY0xvY2FsZVN0YXJ0ZXIobmV3IExvY2FsZSgiZW4iLCAiIiksIHRlc3QpOworICAgICAgICBnZW5lcmljUnVsZXNTdGFydGVyKCImXHUwNDEwID0gXHUwNDEwIiwgdGVzdCk7CisgICAgICAgIGdlbmVyaWNSdWxlc1N0YXJ0ZXIoIiZaIDwgXHUwNDEwIiwgdGVzdCk7CisgICAgICAgIGdlbmVyaWNSdWxlc1N0YXJ0ZXIoIiZcdTA0MTAgPSBcdTA0MTAgPCBcdTA0ZDAiLCB0ZXN0KTsKKyAgICAgICAgZ2VuZXJpY1J1bGVzU3RhcnRlcigiJlogPCBcdTA0MTAgPCBcdTA0ZDAiLCB0ZXN0KTsKKyAgICAgICAgZ2VuZXJpY1J1bGVzU3RhcnRlcigiJlx1MDQxMCA9IFx1MDQxMCA8IFx1MDQxMFx1MDMwMSIsIHRlc3QpOworICAgICAgICBnZW5lcmljUnVsZXNTdGFydGVyKCImWiA8IFx1MDQxMCA8IFx1MDQxMFx1MDMwMSIsIHRlc3QpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RTdXBwcmVzc0NvbnRyYWN0aW9ucygpIHsKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0Tm9Db250MltdID0geworICAgICAgICAgICAgIlx1MDQxMFx1MDMwMmEiLAorICAgICAgICAgICAgIlx1MDQxMFx1MDMwNmIiLAorICAgICAgICAgICAgIlx1MDQxMGMiICAgICAgICAgICAgCisgICAgICAgIH07CisgICAgICAgIFN0cmluZyB0ZXN0Tm9Db250W10gPSB7CisgICAgICAgICAgICAiYVx1MDQxMCIsICAgICAgICAgICAgCisgICAgICAgICAgICAiQVx1MDQxMFx1MDMwNiIsCisgICAgICAgICAgICAiXHVGRjIxXHUwNDEwXHUwMzAyIgorICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgIGdlbmVyaWNSdWxlc1N0YXJ0ZXIoIltzdXBwcmVzc0NvbnRyYWN0aW9ucyBbXHUwNDAwLVx1MDQ3Zl1dIiwgdGVzdE5vQ29udCk7CisgICAgICAgIGdlbmVyaWNSdWxlc1N0YXJ0ZXIoIltzdXBwcmVzc0NvbnRyYWN0aW9ucyBbXHUwNDAwLVx1MDQ3Zl1dIiwgdGVzdE5vQ29udDIpOworICAgIH0KKyAgICAgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENhc2UoKSB7CisgICAgICAgIFN0cmluZyBnUnVsZXMgPSAiXHUwMDI2XHUwMDMwXHUwMDNDXHUwMDMxXHUwMDJDXHUyNDYwXHUwMDNDXHUwMDYxXHUwMDJDXHUwMDQxIjsKKyAgICAgICAgU3RyaW5nW10gdGVzdENhc2UgPSB7CisgICAgICAgICAgICAiMWEiLCAiMUEiLCAiXHUyNDYwYSIsICJcdTI0NjBBIgorICAgICAgICB9OworICAgICAgICBpbnRbXVtdIGNhc2VUZXN0UmVzdWx0cyA9IHsKKyAgICAgICAgICAgICAgICB7IC0xLCAtMSwgLTEsIDAsIC0xLCAtMSwgMCwgMCwgLTEgfSwKKyAgICAgICAgICAgICAgICB7IDEsIC0xLCAtMSwgMCwgLTEsIC0xLCAwLCAwLCAxIH0sCisgICAgICAgICAgICAgICAgeyAtMSwgLTEsIC0xLCAwLCAxLCAtMSwgMCwgMCwgLTEgfSwKKyAgICAgICAgICAgICAgICB7IDEsIC0xLCAxLCAwLCAtMSwgLTEsIDAsIDAsIDEgfQorICAgIAorICAgICAgICB9OworICAgICAgICBib29sZWFuW11bXSBjYXNlVGVzdEF0dHJpYnV0ZXMgPSB7CisgICAgICAgICAgICB7IGZhbHNlLCBmYWxzZX0sCisgICAgICAgICAgICB7IHRydWUsIGZhbHNlfSwKKyAgICAgICAgICAgIHsgZmFsc2UsIHRydWV9LAorICAgICAgICAgICAgeyB0cnVlLCB0cnVlfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaW50IGksaixrOworICAgICAgICBDb2xsYXRvciAgbXlDb2xsYXRpb247CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBteUNvbGxhdGlvbiA9IENvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoImVuIiwgIlVTIikpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBpbiBjcmVhdGlvbiBvZiBydWxlIGJhc2VkIGNvbGxhdG9yICIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIGxvZ2xuKCJUZXN0aW5nIGRpZmZlcmVudCBjYXNlIHNldHRpbmdzIik7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAKKyAgICAgICAgZm9yKGsgPSAwOyBrPDQ7IGsrKykgeworICAgICAgICAgICAgaWYgKGNhc2VUZXN0QXR0cmlidXRlc1trXVswXSA9PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgLy8gdXBwZXIgY2FzZSBmaXJzdAorICAgICAgICAgICAgICAgICgoUnVsZUJhc2VkQ29sbGF0b3IpbXlDb2xsYXRpb24pLnNldFVwcGVyQ2FzZUZpcnN0KHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gdXBwZXIgY2FzZSBmaXJzdAorICAgICAgICAgICAgICAgICgoUnVsZUJhc2VkQ29sbGF0b3IpbXlDb2xsYXRpb24pLnNldExvd2VyQ2FzZUZpcnN0KHRydWUpOyAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICgoUnVsZUJhc2VkQ29sbGF0b3IpbXlDb2xsYXRpb24pLnNldENhc2VMZXZlbChjYXNlVGVzdEF0dHJpYnV0ZXNba11bMV0pOworICAgICAgICAgIAorICAgICAgICAgIC8vIGxvZ2xuKCJDYXNlIGZpcnN0ID0gIiArIGNhc2VUZXN0QXR0cmlidXRlc1trXVswXSArICIsIENhc2UgbGV2ZWwgPSAiICsgY2FzZVRlc3RBdHRyaWJ1dGVzW2tdWzFdKTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyA7IGkrKykgeworICAgICAgICAgICAgZm9yKGogPSBpKzE7IGo8NDsgaisrKSB7CisgICAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdGlvbiwgdGVzdENhc2VbaV0sIHRlc3RDYXNlW2pdLCBjYXNlVGVzdFJlc3VsdHNba11bMyppK2otMV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgbXlDb2xsYXRpb24gPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IoZ1J1bGVzKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgcnVsZSBiYXNlZCBjb2xsYXRvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIGxvZ2xuKCJUZXN0aW5nIGRpZmZlcmVudCBjYXNlIHNldHRpbmdzIHdpdGggY3VzdG9tIHJ1bGVzIik7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAKKyAgICAgICAgZm9yKGsgPSAwOyBrPDQ7IGsrKykgeworICAgICAgICAJaWYgKGNhc2VUZXN0QXR0cmlidXRlc1trXVswXSA9PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgKChSdWxlQmFzZWRDb2xsYXRvcilteUNvbGxhdGlvbikuc2V0VXBwZXJDYXNlRmlyc3QodHJ1ZSk7CisgICAgICAgIAl9CisgICAgICAgIAllbHNlIHsKKyAgICAgICAgCQkoKFJ1bGVCYXNlZENvbGxhdG9yKW15Q29sbGF0aW9uKS5zZXRVcHBlckNhc2VGaXJzdChmYWxzZSk7CisgICAgICAgIAl9CisgICAgICAgICAgKChSdWxlQmFzZWRDb2xsYXRvcilteUNvbGxhdGlvbikuc2V0Q2FzZUxldmVsKGNhc2VUZXN0QXR0cmlidXRlc1trXVsxXSk7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgOyBpKyspIHsKKyAgICAgICAgICAgIGZvcihqID0gaSsxOyBqPDQ7IGorKykgeworICAgICAgICAgICAgICBkb1Rlc3QobXlDb2xsYXRpb24sIHRlc3RDYXNlW2ldLCB0ZXN0Q2FzZVtqXSwgY2FzZVRlc3RSZXN1bHRzW2tdWzMqaStqLTFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdbXSBsb3dlckZpcnN0ID0geworICAgICAgICAgICAgICAgICJoIiwKKyAgICAgICAgICAgICAgICAiSCIsCisgICAgICAgICAgICAgICAgImNoIiwKKyAgICAgICAgICAgICAgICAiQ2giLAorICAgICAgICAgICAgICAgICJDSCIsCisgICAgICAgICAgICAgICAgImNoYSIsCisgICAgICAgICAgICAgICAgImNoQSIsCisgICAgICAgICAgICAgICAgIkNoYSIsCisgICAgICAgICAgICAgICAgIkNoQSIsCisgICAgICAgICAgICAgICAgIkNIYSIsCisgICAgICAgICAgICAgICAgIkNIQSIsCisgICAgICAgICAgICAgICAgImkiLAorICAgICAgICAgICAgICAgICJJIgorICAgICAgICAgICAgfTsKKyAgICAKKyAgICAgICAgICAgIFN0cmluZ1tdIHVwcGVyRmlyc3QgPSB7CisgICAgICAgICAgICAgICAgIkgiLAorICAgICAgICAgICAgICAgICJoIiwKKyAgICAgICAgICAgICAgICAiQ0giLAorICAgICAgICAgICAgICAgICJDaCIsCisgICAgICAgICAgICAgICAgImNoIiwKKyAgICAgICAgICAgICAgICAiQ0hBIiwKKyAgICAgICAgICAgICAgICAiQ0hhIiwKKyAgICAgICAgICAgICAgICAiQ2hBIiwKKyAgICAgICAgICAgICAgICAiQ2hhIiwKKyAgICAgICAgICAgICAgICAiY2hBIiwKKyAgICAgICAgICAgICAgICAiY2hhIiwKKyAgICAgICAgICAgICAgICAiSSIsCisgICAgICAgICAgICAgICAgImkiCisgICAgICAgICAgICB9OworICAgICAgICAgICAgLy8gbG9nbG4oIm1peGVkIGNhc2UgdGVzdCIpOworICAgICAgICAgICAgLy8gbG9nbG4oImxvd2VyIGZpcnN0LCBjYXNlIGxldmVsIG9mZiIpOworICAgICAgICAgICAgLyogc3luIHdlZSBnZW5lcmljUnVsZXNTdGFydGVyKCJbY2FzZWZpcnN0IGxvd2VyXSZIPGNoPDw8Q2g8PDxDSCIsIGxvd2VyRmlyc3QpOyAqLworICAgICAgICAgICAgLy8gbG9nbG4oInVwcGVyIGZpcnN0LCBjYXNlIGxldmVsIG9mZiIpOworICAgICAgICAgICAgLyogc3luIHdlZSBnZW5lcmljUnVsZXNTdGFydGVyKCJbY2FzZWZpcnN0IHVwcGVyXSZIPGNoPDw8Q2g8PDxDSCIsIHVwcGVyRmlyc3QpOyAqLworICAgICAgICAgICAgLy8gbG9nbG4oImxvd2VyIGZpcnN0LCBjYXNlIGxldmVsIG9uIik7CisgICAgICAgICAgICBnZW5lcmljUnVsZXNTdGFydGVyKCJbY2FzZWZpcnN0IGxvd2VyXVtjYXNlbGV2ZWwgb25dJkg8Y2g8PDxDaDw8PENIIiwgbG93ZXJGaXJzdCk7CisgICAgICAgICAgICAvLyBsb2dsbigidXBwZXIgZmlyc3QsIGNhc2UgbGV2ZWwgb24iKTsKKyAgICAgICAgICAgIGdlbmVyaWNSdWxlc1N0YXJ0ZXIoIltjYXNlZmlyc3QgdXBwZXJdW2Nhc2VsZXZlbCBvbl0mSDxjaDw8PENoPDw8Q0giLCB1cHBlckZpcnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RJbmNvbXBsZXRlQ250KCkgeworICAgICAgICBTdHJpbmdbXSBjbnQxID0geworICAgICAgICAgICAgIkFBIiwKKyAgICAgICAgICAgICJBQyIsCisgICAgICAgICAgICAiQVoiLAorICAgICAgICAgICAgIkFRIiwKKyAgICAgICAgICAgICJBQiIsCisgICAgICAgICAgICAiQUJaIiwKKyAgICAgICAgICAgICJBQlEiLAorICAgICAgICAgICAgIloiLAorICAgICAgICAgICAgIkFCQyIsCisgICAgICAgICAgICAiUSIsCisgICAgICAgICAgICAiQiIKKyAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICBTdHJpbmdbXSBjbnQyID0geworICAgICAgICAgICAgIkRBIiwKKyAgICAgICAgICAgICJEQUQiLAorICAgICAgICAgICAgIkRBWiIsCisgICAgICAgICAgICAiTUFSIiwKKyAgICAgICAgICAgICJaIiwKKyAgICAgICAgICAgICJEQVZJUyIsCisgICAgICAgICAgICAiTUFSSyIsCisgICAgICAgICAgICAiREFWIiwKKyAgICAgICAgICAgICJEQVZJIgorICAgICAgICB9OworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsID0gIG51bGw7CisgICAgICAgIFN0cmluZyB0ZW1wID0gIiAmIFogPCBBQkMgPCBRIDwgQiI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2xsID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHRlbXApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oImZhaWwgdG8gY3JlYXRlIFJ1bGVCYXNlZENvbGxhdG9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBzaXplID0gY250MS5sZW5ndGg7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplLTE7IGkrKykgeworICAgICAgICAgICAgZm9yKGludCBqID0gaSsxOyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICAgICAgU3RyaW5nIHQxID0gY250MVtpXTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdDIgPSBjbnQxW2pdOworICAgICAgICAgICAgICAgIGRvVGVzdChjb2xsLCB0MSwgdDIsIC0xKTsKKyAgICAgICAgICAgICAgICAvLyBzeW53ZWUgOiBhZGRlZCBjb2xsYXRpb24gZWxlbWVudCBpdGVyYXRvciB0ZXN0IAorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBjb2xsLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0Mik7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkNyZWF0aW9uIG9mIGl0ZXJhdG9yIGZhaWxlZCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmFja0FuZEZvcnRoKGl0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZW1wID0gIiAmIFogPCBEQVZJUyA8IE1BUksgPERBViI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2xsID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHRlbXApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oImZhaWwgdG8gY3JlYXRlIFJ1bGVCYXNlZENvbGxhdG9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemUgPSBjbnQyLmxlbmd0aDsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHNpemUtMTsgaSsrKSB7CisgICAgICAgICAgICBmb3IoaW50IGogPSBpKzE7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXRlcjsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdDEgPSBjbnQyW2ldOworICAgICAgICAgICAgICAgIFN0cmluZyB0MiA9IGNudDJbal07CisgICAgICAgICAgICAgICAgZG9UZXN0KGNvbGwsIHQxLCB0MiwgLTEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHN5bndlZSA6IGFkZGVkIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yIHRlc3QKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpdGVyID0gY29sbC5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IodDIpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJDcmVhdGlvbiBvZiBpdGVyYXRvciBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJhY2tBbmRGb3J0aChpdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEJsYWNrQmlyZCgpIHsKKyAgICAgICAgU3RyaW5nW10gc2hpZnRlZCA9IHsKKyAgICAgICAgICAgICJibGFjayBiaXJkIiwKKyAgICAgICAgICAgICJibGFjay1iaXJkIiwKKyAgICAgICAgICAgICJibGFja2JpcmQiLAorICAgICAgICAgICAgImJsYWNrIEJpcmQiLAorICAgICAgICAgICAgImJsYWNrLUJpcmQiLAorICAgICAgICAgICAgImJsYWNrQmlyZCIsCisgICAgICAgICAgICAiYmxhY2sgYmlyZHMiLAorICAgICAgICAgICAgImJsYWNrLWJpcmRzIiwKKyAgICAgICAgICAgICJibGFja2JpcmRzIgorICAgICAgICB9OworICAgICAgICBpbnRbXSBzaGlmdGVkVGVydCA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwCisgICAgICAgIH07CisgICAgICAgIFN0cmluZ1tdIG5vbmlnbm9yYWJsZSA9IHsKKyAgICAgICAgICAgICJibGFjayBiaXJkIiwKKyAgICAgICAgICAgICJibGFjayBCaXJkIiwKKyAgICAgICAgICAgICJibGFjayBiaXJkcyIsCisgICAgICAgICAgICAiYmxhY2stYmlyZCIsCisgICAgICAgICAgICAiYmxhY2stQmlyZCIsCisgICAgICAgICAgICAiYmxhY2stYmlyZHMiLAorICAgICAgICAgICAgImJsYWNrYmlyZCIsCisgICAgICAgICAgICAiYmxhY2tCaXJkIiwKKyAgICAgICAgICAgICJibGFja2JpcmRzIgorICAgICAgICB9OworICAgICAgICBpbnQgaSA9IDAsIGogPSAwOworICAgICAgICBpbnQgc2l6ZSA9IDA7CisgICAgICAgIENvbGxhdG9yIGNvbGwgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJlbiIsICJVUyIpKTsKKyAgICAgICAgLy91Y29sX3NldEF0dHJpYnV0ZShjb2xsLCBVQ09MX05PUk1BTElaQVRJT05fTU9ERSwgVUNPTF9PRkYsICZzdGF0dXMpOworICAgICAgICAvL3Vjb2xfc2V0QXR0cmlidXRlKGNvbGwsIFVDT0xfQUxURVJOQVRFX0hBTkRMSU5HLCBVQ09MX05PTl9JR05PUkFCTEUsICZzdGF0dXMpOworICAgICAgICAoKFJ1bGVCYXNlZENvbGxhdG9yKWNvbGwpLnNldEFsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZChmYWxzZSk7CisgICAgICAgIHNpemUgPSBub25pZ25vcmFibGUubGVuZ3RoOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBzaXplLTE7IGkrKykgeworICAgICAgICAgICAgZm9yKGogPSBpKzE7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdDEgPSBub25pZ25vcmFibGVbaV07CisgICAgICAgICAgICAgICAgU3RyaW5nIHQyID0gbm9uaWdub3JhYmxlW2pdOworICAgICAgICAgICAgICAgIGRvVGVzdChjb2xsLCB0MSwgdDIsIC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAoKFJ1bGVCYXNlZENvbGxhdG9yKWNvbGwpLnNldEFsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZCh0cnVlKTsKKyAgICAgICAgY29sbC5zZXRTdHJlbmd0aChDb2xsYXRvci5RVUFURVJOQVJZKTsKKyAgICAgICAgc2l6ZSA9IHNoaWZ0ZWQubGVuZ3RoOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBzaXplLTE7IGkrKykgeworICAgICAgICAgICAgZm9yKGogPSBpKzE7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdDEgPSBzaGlmdGVkW2ldOworICAgICAgICAgICAgICAgIFN0cmluZyB0MiA9IHNoaWZ0ZWRbal07CisgICAgICAgICAgICAgICAgZG9UZXN0KGNvbGwsIHQxLCB0MiwgLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNvbGwuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBzaXplID0gc2hpZnRlZC5sZW5ndGg7CisgICAgICAgIGZvcihpID0gMTsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIHQxID0gc2hpZnRlZFtpLTFdOworICAgICAgICAgICAgU3RyaW5nIHQyID0gc2hpZnRlZFtpXTsKKyAgICAgICAgICAgIGRvVGVzdChjb2xsLCB0MSwgdDIsIHNoaWZ0ZWRUZXJ0W2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0RnVua3lBKCkgeworICAgICAgICBTdHJpbmdbXSB0ZXN0U291cmNlQ2FzZXMgPSB7CisgICAgICAgICAgICAiXHUwMDQxXHUwMzAwXHUwMzAxIiwKKyAgICAgICAgICAgICJcdTAwNDFcdTAzMDBcdTAzMTYiLAorICAgICAgICAgICAgIlx1MDA0MVx1MDMwMCIsCisgICAgICAgICAgICAiXHUwMEMwXHUwMzAxIiwKKyAgICAgICAgICAgIC8vIHRoaXMgd291bGQgd29yayB3aXRoIGZvcmNlZCBub3JtYWxpemF0aW9uIAorICAgICAgICAgICAgIlx1MDBDMFx1MDMxNiIsCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBTdHJpbmdbXSB0ZXN0VGFyZ2V0Q2FzZXMgPSB7CisgICAgICAgICAgICAiXHUwMDQxXHUwMzAxXHUwMzAwIiwKKyAgICAgICAgICAgICJcdTAwNDFcdTAzMTZcdTAzMDAiLAorICAgICAgICAgICAgIlx1MDBDMCIsCisgICAgICAgICAgICAiXHUwMDQxXHUwMzAxXHUwMzAwIiwKKyAgICAgICAgICAgIC8vIHRoaXMgd291bGQgd29yayB3aXRoIGZvcmNlZCBub3JtYWxpemF0aW9uIAorICAgICAgICAgICAgIlx1MDA0MVx1MDMxNlx1MDMwMCIsCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpbnRbXSByZXN1bHRzID0geworICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIDAKKyAgICAgICAgfTsKKworICAgICAgICBDb2xsYXRvciAgbXlDb2xsYXRpb247CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBteUNvbGxhdGlvbiA9IENvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoImVuIiwgIlVTIikpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBpbiBjcmVhdGlvbiBvZiBydWxlIGJhc2VkIGNvbGxhdG9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gbG9nbG4oIlRlc3Rpbmcgc29tZSBBIGxldHRlcnMsIGZvciBzb21lIHJlYXNvbiIpOworICAgICAgICBteUNvbGxhdGlvbi5zZXREZWNvbXBvc2l0aW9uKENvbGxhdG9yLkNBTk9OSUNBTF9ERUNPTVBPU0lUSU9OKTsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQgOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdGlvbiwgdGVzdFNvdXJjZUNhc2VzW2ldLCB0ZXN0VGFyZ2V0Q2FzZXNbaV0sIHJlc3VsdHNbaV0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RDaE1vdmUoKSB7CisgICAgICAgIFN0cmluZ1tdIGNoVGVzdCA9IHsKKyAgICAgICAgICAgICJjIiwKKyAgICAgICAgICAgICJDIiwKKyAgICAgICAgICAgICJjYSIsICJjYiIsICJjeCIsICJjeSIsICJDWiIsCisgICAgICAgICAgICAiY1x1MDMwQyIsICJDXHUwMzBDIiwKKyAgICAgICAgICAgICJoIiwKKyAgICAgICAgICAgICJIIiwKKyAgICAgICAgICAgICJoYSIsICJIYSIsICJoYXJseSIsICJoYiIsICJIQiIsICJoeCIsICJIWCIsICJoeSIsICJIWSIsCisgICAgICAgICAgICAiY2giLCAiY0giLCAiQ2giLCAiQ0giLAorICAgICAgICAgICAgImNoYSIsICJjaGFybHkiLCAiY2hlIiwgImNoaCIsICJjaGNoIiwgImNociIsCisgICAgICAgICAgICAiaSIsICJJIiwgImlhcmx5IiwKKyAgICAgICAgICAgICJyIiwgIlIiLAorICAgICAgICAgICAgInJcdTAzMEMiLCAiUlx1MDMwQyIsCisgICAgICAgICAgICAicyIsCisgICAgICAgICAgICAiUyIsCisgICAgICAgICAgICAic1x1MDMwQyIsICJTXHUwMzBDIiwKKyAgICAgICAgICAgICJ6IiwgIloiLAorICAgICAgICAgICAgInpcdTAzMEMiLCAiWlx1MDMwQyIKKyAgICAgICAgfTsKKyAgICAgICAgQ29sbGF0b3IgY29sbCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2xsID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgiY3MiLCAiIikpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkNhbm5vdCBjcmVhdGUgQ29sbGF0b3IiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpbnQgc2l6ZSA9IGNoVGVzdC5sZW5ndGg7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplLTE7IGkrKykgeworICAgICAgICAgICAgZm9yKGludCBqID0gaSsxOyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHQxID0gY2hUZXN0W2ldOworICAgICAgICAgICAgICAgIFN0cmluZyB0MiA9IGNoVGVzdFtqXTsKKyAgICAgICAgICAgICAgICBkb1Rlc3QoY29sbCwgdDEsIHQyLCAtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEltcGxpY2l0VGFpbG9yaW5nKCkgeworICAgICAgICBTdHJpbmdbXSBpbXBUZXN0ID0geworICAgICAgICAgICAgIlx1NGUwMCIsCisgICAgICAgICAgICAiYSIsCisgICAgICAgICAgICAiQSIsCisgICAgICAgICAgICAiYiIsCisgICAgICAgICAgICAiQiIsCisgICAgICAgICAgICAiXHU0ZTAxIgorICAgICAgICB9OworICAgICAgICBTdHJpbmcgcnVsZSA9ICImXHU0ZTAwIDwgYSA8PDwgQSA8IGIgPDw8IEIiOworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbGwgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiQ2FuJ3QgY3JlYXRlIGNvbGxhdG9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBzaXplID0gaW1wVGVzdC5sZW5ndGg7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplLTE7IGkrKykgeworICAgICAgICAgICAgZm9yKGludCBqID0gaSsxOyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHQxID0gaW1wVGVzdFtpXTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdDIgPSBpbXBUZXN0W2pdOworICAgICAgICAgICAgICAgIGRvVGVzdChjb2xsLCB0MSwgdDIsIC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RGQ0RQcm9ibGVtKCkgeworICAgICAgICBTdHJpbmcgczEgPSAiXHUwNDMwXHUwMzA2XHUwMzI1IjsKKyAgICAgICAgU3RyaW5nIHMyID0gIlx1MDREMVx1MDMyNSI7CisgICAgICAgIENvbGxhdG9yIGNvbGwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiQ2FuJ3QgY3JlYXRlIGNvbGxhdG9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbGwuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5OT19ERUNPTVBPU0lUSU9OKTsKKyAgICAgICAgZG9UZXN0KGNvbGwsIHMxLCBzMiwgMCk7CisgICAgICAgIGNvbGwuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7CisgICAgICAgIGRvVGVzdChjb2xsLCBzMSwgczIsIDApOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0RW1wdHlSdWxlKCkgeworICAgICAgICBTdHJpbmcgcnVsZXogPSAiIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGNvbGwgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXopOworICAgICAgICAgICAgbG9nbG4oInJ1bGU6IiArIGNvbGwuZ2V0UnVsZXMoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RKNzg0KCkgeworICAgICAgICBTdHJpbmdbXSBkYXRhID0geworICAgICAgICAgICAgIkEiLCAiXHUwMTAxIiwgIlx1MDBlMSIsICJcdTAxY2UiLCAiXHUwMGUwIiwKKyAgICAgICAgICAgICJFIiwgIlx1MDExMyIsICJcdTAwZTkiLCAiXHUwMTFiIiwgIlx1MDBlOCIsCisgICAgICAgICAgICAiSSIsICJcdTAxMmIiLCAiXHUwMGVkIiwgIlx1MDFkMCIsICJcdTAwZWMiLAorICAgICAgICAgICAgIk8iLCAiXHUwMTRkIiwgIlx1MDBmMyIsICJcdTAxZDIiLCAiXHUwMGYyIiwKKyAgICAgICAgICAgICJVIiwgIlx1MDE2YiIsICJcdTAwZmEiLCAiXHUwMWQ0IiwgIlx1MDBmOSIsCisgICAgICAgICAgICAiXHUwMGZjIiwgIlx1MDFkNiIsICJcdTAxZDgiLCAiXHUwMWRhIiwgIlx1MDFkYyIKKyAgICAgICAgfTsKKyAgICAgICAgZ2VuZXJpY0xvY2FsZVN0YXJ0ZXIobmV3IExvY2FsZSgiemgiLCAiIiksIGRhdGEpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RKODE1KCkgeworICAgICAgICBTdHJpbmcgZGF0YVtdID0geworICAgICAgICAgICAgImFhIiwKKyAgICAgICAgICAgICJBYSIsCisgICAgICAgICAgICAiYWIiLAorICAgICAgICAgICAgIkFiIiwKKyAgICAgICAgICAgICJhZCIsCisgICAgICAgICAgICAiQWQiLAorICAgICAgICAgICAgImFlIiwKKyAgICAgICAgICAgICJBZSIsCisgICAgICAgICAgICAiXHUwMGU2IiwKKyAgICAgICAgICAgICJcdTAwYzYiLAorICAgICAgICAgICAgImFmIiwKKyAgICAgICAgICAgICJBZiIsCisgICAgICAgICAgICAiYiIsCisgICAgICAgICAgICAiQiIKKyAgICAgICAgfTsKKyAgICAgICAgZ2VuZXJpY0xvY2FsZVN0YXJ0ZXIobmV3IExvY2FsZSgiZnIiLCAiIiksIGRhdGEpOworICAgICAgICBnZW5lcmljUnVsZXNTdGFydGVyKCJbYmFja3dhcmRzIDJdJkE8PFx1MDBlNi9lPDw8XHUwMGM2L0UiLCBkYXRhKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEo4MzEoKSB7CisgICAgICAgIFN0cmluZ1tdIGRhdGEgPSB7CisgICAgICAgICAgICAiSSIsCisgICAgICAgICAgICAiaSIsCisgICAgICAgICAgICAiWSIsCisgICAgICAgICAgICAieSIKKyAgICAgICAgfTsKKyAgICAgICAgZ2VuZXJpY0xvY2FsZVN0YXJ0ZXIobmV3IExvY2FsZSgibHYiLCAiIiksIGRhdGEpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0QmVmb3JlKCkgeworICAgICAgICBTdHJpbmcgZGF0YVtdID0geworICAgICAgICAgICAgIlx1MDEwMSIsICJcdTAwZTEiLCAiXHUwMWNlIiwgIlx1MDBlMCIsICJBIiwKKyAgICAgICAgICAgICJcdTAxMTMiLCAiXHUwMGU5IiwgIlx1MDExYiIsICJcdTAwZTgiLCAiRSIsCisgICAgICAgICAgICAiXHUwMTJiIiwgIlx1MDBlZCIsICJcdTAxZDAiLCAiXHUwMGVjIiwgIkkiLAorICAgICAgICAgICAgIlx1MDE0ZCIsICJcdTAwZjMiLCAiXHUwMWQyIiwgIlx1MDBmMiIsICJPIiwKKyAgICAgICAgICAgICJcdTAxNmIiLCAiXHUwMGZhIiwgIlx1MDFkNCIsICJcdTAwZjkiLCAiVSIsCisgICAgICAgICAgICAiXHUwMWQ2IiwgIlx1MDFkOCIsICJcdTAxZGEiLCAiXHUwMWRjIiwgIlx1MDBmYyIKKyAgICAgICAgfTsKKyAgICAgICAgZ2VuZXJpY1J1bGVzU3RhcnRlcigKKyAgICAgICAgIiZbYmVmb3JlIDFdYTxcdTAxMDE8XHUwMGUxPFx1MDFjZTxcdTAwZTAiCisgICAgICAgICsgIiZbYmVmb3JlIDFdZTxcdTAxMTM8XHUwMGU5PFx1MDExYjxcdTAwZTgiCisgICAgICAgICsgIiZbYmVmb3JlIDFdaTxcdTAxMmI8XHUwMGVkPFx1MDFkMDxcdTAwZWMiCisgICAgICAgICsgIiZbYmVmb3JlIDFdbzxcdTAxNGQ8XHUwMGYzPFx1MDFkMjxcdTAwZjIiCisgICAgICAgICsgIiZbYmVmb3JlIDFddTxcdTAxNmI8XHUwMGZhPFx1MDFkNDxcdTAwZjkiCisgICAgICAgICsgIiZ1PFx1MDFkNjxcdTAxZDg8XHUwMWRhPFx1MDFkYzxcdTAwZmMiLCBkYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0UmVkdW5kYW50UnVsZXMoKSB7CisgICAgICAgIFN0cmluZ1tdIHJ1bGVzID0geworICAgICAgICAgICAgIiYgYSA8PDwgYiA8PDwgYyA8PCBkIDw8PCBlJiBbYmVmb3JlIDFdIGUgPDw8IHgiLAorICAgICAgICAgICAgIiYgYSA8IGIgPDw8IGMgPDwgZCA8PDwgZSYgW2JlZm9yZSAxXSBlIDw8PCB4IiwKKyAgICAgICAgICAgICImIGEgPCBiIDwgYyA8IGQmIFtiZWZvcmUgMV0gYyA8IG0iLAorICAgICAgICAgICAgIiYgYSA8IGIgPDw8IGMgPDwgZCA8PDwgZSYgW2JlZm9yZSAzXSBlIDw8PCB4IiwKKyAgICAgICAgICAgICImIGEgPCBiIDw8PCBjIDw8IGQgPDw8IGUmIFtiZWZvcmUgMl0gZSA8PDwgeCIsCisgICAgICAgICAgICAiJiBhIDwgYiA8PDwgYyA8PCBkIDw8PCBlIDw8PCBmIDwgZyYgW2JlZm9yZSAxXSBnIDwgeCIsCisgICAgICAgICAgICAiJiBhIDw8PCBiIDw8IGMgPCBkJiBhIDwgbSIsCisgICAgICAgICAgICAiJmE8Yjw8Ylx1MDMwMSAmejxiIiwKKyAgICAgICAgICAgICImejxtPDw8cTw8PG0iLAorICAgICAgICAgICAgIiZ6PDw8bTxxPDw8bSIsCisgICAgICAgICAgICAiJiBhIDwgYiA8IGMgPCBkJiByIDwgYyIsCisgICAgICAgICAgICAiJiBhIDwgYiA8IGMgPCBkJiByIDwgYyIsCisgICAgICAgICAgICAiJiBhIDwgYiA8IGMgPCBkJiBjIDwgbSIsCisgICAgICAgICAgICAiJiBhIDwgYiA8IGMgPCBkJiBhIDwgbSIKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZ1tdIGV4cGVjdGVkUnVsZXMgPSB7CisgICAgICAgICAgICAiJlx1MjA4OTw8PHgiLAorICAgICAgICAgICAgIiYgYSA8PDwgeCA8IGIgPDw8IGMgPDwgZCA8PDwgZSIsCisgICAgICAgICAgICAiJiBhIDwgYiA8IG0gPCBjIDwgZCIsCisgICAgICAgICAgICAiJiBhIDwgYiA8PDwgYyA8PCBkIDw8PCB4IDw8PCBlIiwKKyAgICAgICAgICAgICImIGEgPCBiIDw8PCBjIDw8PCB4IDw8IGQgPDw8IGUiLAorICAgICAgICAgICAgIiYgYSA8IGIgPDw8IGMgPDwgZCA8PDwgZSA8PDwgZiA8IHggPCBnIiwKKyAgICAgICAgICAgICImIGEgPDw8IGIgPDwgYyA8IG0gPCBkIiwKKyAgICAgICAgICAgICImYTxiXHUwMzAxICZ6PGIiLAorICAgICAgICAgICAgIiZ6PHE8PDxtIiwKKyAgICAgICAgICAgICImejxxPDw8bSIsCisgICAgICAgICAgICAiJiBhIDwgYiA8IGQmIHIgPCBjIiwKKyAgICAgICAgICAgICImIGEgPCBiIDwgZCYgciA8IGMiLAorICAgICAgICAgICAgIiYgYSA8IGIgPCBjIDwgbSA8IGQiLAorICAgICAgICAgICAgIiYgYSA8IG0gPCBiIDwgYyA8IGQiCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBTdHJpbmdbXVtdIHRlc3RkYXRhID0geworICAgICAgICAgICAgeyJcdTIwODkiLCAieCJ9LAorICAgICAgICAgICAgeyJhIiwgIngiLCAiYiIsICJjIiwgImQiLCAiZSJ9LAorICAgICAgICAgICAgeyJhIiwgImIiLCAibSIsICJjIiwgImQifSwKKyAgICAgICAgICAgIHsiYSIsICJiIiwgImMiLCAiZCIsICJ4IiwgImUifSwKKyAgICAgICAgICAgIHsiYSIsICJiIiwgImMiLCAieCIsICJkIiwgImUifSwKKyAgICAgICAgICAgIHsiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAieCIsICJnIn0sCisgICAgICAgICAgICB7ImEiLCAiYiIsICJjIiwgIm0iLCAiZCJ9LAorICAgICAgICAgICAgeyJhIiwgImJcdTAzMDEiLCAieiIsICJiIn0sCisgICAgICAgICAgICB7InoiLCAicSIsICJtIn0sCisgICAgICAgICAgICB7InoiLCAicSIsICJtIn0sCisgICAgICAgICAgICB7ImEiLCAiYiIsICJkIn0sCisgICAgICAgICAgICB7InIiLCAiYyJ9LAorICAgICAgICAgICAgeyJhIiwgImIiLCAiYyIsICJtIiwgImQifSwKKyAgICAgICAgICAgIHsiYSIsICJtIiwgImIiLCAiYyIsICJkIn0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBybHogPSAiIjsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaTxydWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbG9nbG4oInRlc3RpbmcgcnVsZSAiICsgcnVsZXNbaV0gKyAiLCBleHBlY3RlZCB0byBiZSIgKyBleHBlY3RlZFJ1bGVzW2ldKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmx6ID0gcnVsZXNbaV07CisgICAgICAgICAgICAgICAgQ29sbGF0b3IgY3JlZHVuZGFudCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihybHopOworICAgICAgICAgICAgICAgIHJseiA9IGV4cGVjdGVkUnVsZXNbaV07CisgICAgICAgICAgICAgICAgQ29sbGF0b3IgY3Jlc3VsdGluZyA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihybHopOworICAgICAgICAgICAgICAgIGxvZ2xuKCIgY3JlZHVuZGFudCBSdWxlOiIgKyAoKFJ1bGVCYXNlZENvbGxhdG9yKWNyZWR1bmRhbnQpLmdldFJ1bGVzKCkpOworICAgICAgICAgICAgICAgIGxvZ2xuKCIgY3Jlc3VsdGluZyBSdWxlOiIgKyAoKFJ1bGVCYXNlZENvbGxhdG9yKWNyZXN1bHRpbmcpLmdldFJ1bGVzKCkpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ2Fubm90IGNyZWF0ZSBSdWxlQmFzZWRDb2xsYXRvciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy90ZXN0QWdhaW5zdFVDQShjcmVzdWx0aW5nLCBjcmVkdW5kYW50LCAiZXhwZWN0ZWQiLCBUUlVFLCAmc3RhdHVzKTsKKyAgICAgICAgICAgIC8vIGxvZ2xuKCJ0ZXN0aW5nIHVzaW5nIGRhdGFcbiIpOworICAgICAgICAgICAgZ2VuZXJpY1J1bGVzU3RhcnRlcihydWxlc1tpXSwgdGVzdGRhdGFbaV0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RFeHBhbnNpb25TeW50YXgoKSB7CisgICAgICAgIFN0cmluZ1tdIHJ1bGVzID0geworICAgICAgICAgICAgIiZBRSA8PDwgYSA8PCBiIDw8PCBjICZkIDw8PCBmIiwKKyAgICAgICAgICAgICImQUUgPDw8IGEgPDw8IGIgPDwgYyA8PCBkIDwgZSA8IGYgPDw8IGciLAorICAgICAgICAgICAgIiZBRSA8PDwgQiA8PDwgQyAvIEQgPDw8IEYiCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBTdHJpbmdbXSBleHBlY3RlZFJ1bGVzID0geworICAgICAgICAgICAgIiZBIDw8PCBhIC8gRSA8PCBiIC8gRSA8PDwgYyAvRSAgJmQgPDw8IGYiLAorICAgICAgICAgICAgIiZBIDw8PCBhIC8gRSA8PDwgYiAvIEUgPDwgYyAvIEUgPDwgZCAvIEUgPCBlIDwgZiA8PDwgZyIsCisgICAgICAgICAgICAiJkEgPDw8IEIgLyBFIDw8PCBDIC8gRUQgPDw8IEYgLyBFIgorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgU3RyaW5nW11bXSB0ZXN0ZGF0YSA9IHsKKyAgICAgICAgICAgIHsiQUUiLCAiYSIsICJiIiwgImMifSwKKyAgICAgICAgICAgIHsiQUUiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyJ9LAorICAgICAgICAgICAgeyJBRSIsICJCIiwgIkMifSAvLyAvIEVEIDw8PCBGIC8gRSJ9LAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgZm9yKGludCBpID0gMDsgaTxydWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgLy8gbG9nbG4oInRlc3RpbmcgcnVsZSAiICsgcnVsZXNbaV0gKyAiLCBleHBlY3RlZCB0byBiZSAiICsgZXhwZWN0ZWRSdWxlc1tpXSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN0cmluZyBybHogPSBydWxlc1tpXTsKKyAgICAgICAgICAgICAgICBDb2xsYXRvciBjcmVkdW5kYW50ID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHJseik7CisgICAgICAgICAgICAgICAgcmx6ID0gZXhwZWN0ZWRSdWxlc1tpXTsKKyAgICAgICAgICAgICAgICBDb2xsYXRvciBjcmVzdWx0aW5nID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHJseik7CisgICAgICAgICAgICAgICAgbG9nbG4oIiBjcmVkdW5kYW50IFJ1bGU6IiArICgoUnVsZUJhc2VkQ29sbGF0b3IpY3JlZHVuZGFudCkuZ2V0UnVsZXMoKSk7CisgICAgICAgICAgICAgICAgbG9nbG4oIiBjcmVzdWx0aW5nIFJ1bGU6IiArICgoUnVsZUJhc2VkQ29sbGF0b3IpY3Jlc3VsdGluZykuZ2V0UnVsZXMoKSk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gdGVzdEFnYWluc3RVQ0Egc3RpbGwgZG9lc24ndCBoYW5kbGUgZXhwYW5zaW9ucyBjb3JyZWN0bHksIHNvIHRoaXMgaXMgbm90IHJ1biAKKyAgICAgICAgICAgIC8vIGFzIGEgaGFyZCBlcnJvciB0ZXN0LCBidXQgb25seSBpbiBpbmZvcm1hdGlvbiBtb2RlIAorICAgICAgICAgICAgLy90ZXN0QWdhaW5zdFVDQShjcmVzdWx0aW5nLCBjcmVkdW5kYW50LCAiZXhwZWN0ZWQiLCBGQUxTRSwgJnN0YXR1cyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGxvZ2xuKCJ0ZXN0aW5nIHVzaW5nIGRhdGEiKTsKKyAgICAgICAgICAgIGdlbmVyaWNSdWxlc1N0YXJ0ZXIocnVsZXNbaV0sIHRlc3RkYXRhW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RIYW5ndWxUYWlsb3JpbmcoKSB7CisgICAgICAgIFN0cmluZ1tdIGtvcmVhbkRhdGEgPSB7CisgICAgICAgICAgICAiXHVhYzAwIiwgIlx1NGYzZCIsICJcdTRmNzMiLCAiXHU1MDQ3IiwgIlx1NTBmOSIsICJcdTUyYTAiLCAiXHU1M2VmIiwgIlx1NTQ3NSIsCisgICAgICAgICAgICAiXHU1NGU1IiwgIlx1NTYwOSIsICJcdTVhYzEiLCAiXHU1YmI2IiwgIlx1NjY4NyIsICJcdTY3YjYiLCAiXHU2N2I3IiwgIlx1NjdlZiIsCisgICAgICAgICAgICAiXHU2YjRjIiwgIlx1NzNjMiIsICJcdTc1YzIiLCAiXHU3YTNjIiwgIlx1ODJkYiIsICJcdTgzMDQiLCAiXHU4ODU3IiwgIlx1ODg4OCIsCisgICAgICAgICAgICAiXHU4YTM2IiwgIlx1OGNjOCIsICJcdThkY2YiLCAiXHU4ZWZiIiwgIlx1OGZlNiIsICJcdTk5ZDUiLAorICAgICAgICAgICAgIlx1NEVFRSIsICJcdTUwQTIiLCAiXHU1NDk2IiwgIlx1NTRGRiIsICJcdTU3NzciLCAiXHU1QjhBIiwgIlx1NjU5RCIsICJcdTY5OEUiLAorICAgICAgICAgICAgIlx1NkE5RiIsICJcdTczQzgiLCAiXHU3QjMzIiwgIlx1ODAxRSIsICJcdTgyMzgiLCAiXHU4NDZEIiwgIlx1OEIwQyIKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBydWxlcyA9CisgICAgICAgICAgICAiJlx1YWMwMCA8PDwgXHU0ZjNkIDw8PCBcdTRmNzMgPDw8IFx1NTA0NyA8PDwgXHU1MGY5IDw8PCBcdTUyYTAgPDw8IFx1NTNlZiA8PDwgXHU1NDc1ICIKKyAgICAgICAgICAgICsgIjw8PCBcdTU0ZTUgPDw8IFx1NTYwOSA8PDwgXHU1YWMxIDw8PCBcdTViYjYgPDw8IFx1NjY4NyA8PDwgXHU2N2I2IDw8PCBcdTY3YjcgPDw8IFx1NjdlZiAiCisgICAgICAgICAgICArICI8PDwgXHU2YjRjIDw8PCBcdTczYzIgPDw8IFx1NzVjMiA8PDwgXHU3YTNjIDw8PCBcdTgyZGIgPDw8IFx1ODMwNCA8PDwgXHU4ODU3IDw8PCBcdTg4ODggIgorICAgICAgICAgICAgKyAiPDw8IFx1OGEzNiA8PDwgXHU4Y2M4IDw8PCBcdThkY2YgPDw8IFx1OGVmYiA8PDwgXHU4ZmU2IDw8PCBcdTk5ZDUgIgorICAgICAgICAgICAgKyAiPDw8IFx1NEVFRSA8PDwgXHU1MEEyIDw8PCBcdTU0OTYgPDw8IFx1NTRGRiA8PDwgXHU1Nzc3IDw8PCBcdTVCOEEgPDw8IFx1NjU5RCA8PDwgXHU2OThFICIKKyAgICAgICAgICAgICsgIjw8PCBcdTZBOUYgPDw8IFx1NzNDOCA8PDwgXHU3QjMzIDw8PCBcdTgwMUUgPDw8IFx1ODIzOCA8PDwgXHU4NDZEIDw8PCBcdThCMEMiOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHJseiA9IHJ1bGVzOworICAgICAgICAKKyAgICAgICAgQ29sbGF0b3IgY29sbCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2xsID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHJseik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiVW5hYmxlIHRvIG9wZW4gY29sbGF0b3Igd2l0aCBydWxlcyIgKyBydWxlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gbG9nbG4oIlVzaW5nIHN0YXJ0IG9mIGtvcmVhbiBydWxlc1xuIik7CisgICAgICAgIGdlbmVyaWNPcmRlcmluZ1Rlc3QoY29sbCwga29yZWFuRGF0YSk7CisgICAgICAgIC8vIGxvZ2xuKCJTZXR0aW5nIGphbW9TcGVjaWFsIHRvIFRSVUUgYW5kIHRlc3Rpbmcgb25jZSBtb3JlXG4iKTsKKyAgICAgICAgCisgICAgICAgIC8vIGNhbid0IHNldCBqYW1vIGluIGljdTRqIAorICAgICAgICAvLyAoKFVDQVRhYmxlSGVhZGVyICopY29sbC0+aW1hZ2UpLT5qYW1vU3BlY2lhbCA9IFRSVUU7IC8vIGRvbid0IHRyeSB0aGlzIGF0IGhvbWUKKyAgICAgICAgLy8gZ2VuZXJpY09yZGVyaW5nVGVzdChjb2xsLCBrb3JlYW5EYXRhKTsKKyAgICAgICAgCisgICAgICAgIC8vIG5vIHN1Y2ggbG9jYWxlIGluIGljdTRqCisgICAgICAgIC8vIGxvZ2xuKCJVc2luZyBrb19fTE9UVVMgbG9jYWxlXG4iKTsKKyAgICAgICAgLy8gZ2VuZXJpY0xvY2FsZVN0YXJ0ZXIobmV3IExvY2FsZSgia29fX0xPVFVTIiwgIiIpLCBrb3JlYW5EYXRhKTsKKyAgICB9CisKKyAgICAvKiAKKyAgICAgKiBydWxlcyByZXR1cm5lZCBieSBVQ0EgaXMgIiIgYW5kIHdpbGwgYmUgcmVqZWN0ZWQgYnkgdGhlIAorICAgICAqIFJ1bGVCYXNlZENvbGxhdG9yIGNvbnN0cnVjdG9yCisgICAgIHB1YmxpYyB2b2lkIFRlc3RVQ0FSdWxlcygpIHsKKyAgICAgICAgQ29sbGF0b3IgY29sbCA9ICBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiVW5hYmxlIHRvIGNyZWF0ZSBhIGNvbGxhdG9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4oIlRlc3RVQ0FSdWxlc1xuIik7CisgICAgICAgIFN0cmluZyBydWxlcyA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpY29sbCkuZ2V0UnVsZXMoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbGxhdG9yIFVDQWZyb21SdWxlcyA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlcyk7CisgICAgICAgICAgICBsb2dsbigicnVsZToiICsgKChSdWxlQmFzZWRDb2xsYXRvcilVQ0Fmcm9tUnVsZXMpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJVbmFibGUgdG8gY3JlYXRlIGEgY29sbGF0b3IgZnJvbSBVQ0FSdWxlcyFcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgICovCisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEluY3JlbWVudGFsTm9ybWFsaXplKCkgeworICAgICAgICBDb2xsYXRvciAgICAgICAgY29sbCA9IG51bGw7OworICAgICAgICAvLyBsb2dsbigiVGVzdCAxIC4uLi4iKTsKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGVzdCAxLiAgUnVuIHZlcnkgbG9uZyB1bm5vcm1hbGl6ZWQgc3RyaW5ncywgdG8gZm9yY2Ugb3ZlcmZsb3cgb2YqLworICAgICAgICAgICAgLyogICAgICAgICAgbW9zdCBidWZmZXJzIGFsb25nIHRoZSB3YXkuKi8KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb2xsID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgiZW4iLCAiVVMiKSk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJDYW5ub3QgZ2V0IGRlZmF1bHQgaW5zdGFuY2UhIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhciBiYXNlQSAgICAgPTB4NDE7CisgICAgICAgICAgICBjaGFyIGNjTWl4W10gICA9IHsweDMxNiwgMHgzMjEsIDB4MzAwfTsKKyAgICAgICAgICAgIGludCAgICAgICAgICBzTGVuOworICAgICAgICAgICAgaW50ICAgICAgICAgIGk7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc3RyQSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzdHJCID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb2xsLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNMZW4gPSAxMDAwOyBzTGVuPDEwMDE7IHNMZW4rKykgeworICAgICAgICAgICAgICAgIHN0ckEuZGVsZXRlKDAsIHN0ckEubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIHN0ckEuYXBwZW5kKGJhc2VBKTsKKyAgICAgICAgICAgICAgICBzdHJCLmRlbGV0ZSgwLCBzdHJCLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBzdHJCLmFwcGVuZChiYXNlQSk7CisgICAgICAgICAgICAgICAgZm9yIChpPTE7IGk8IHNMZW47IGkrKykgeworICAgICAgICAgICAgICAgICAgICBzdHJBLmFwcGVuZChjY01peFtpICUgM10pOworICAgICAgICAgICAgICAgICAgICBzdHJCLmluc2VydCgxLCBjY01peFtpICUgM10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xsLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsgICAvLyBEbyB0ZXN0IHdpdGggZGVmYXVsdCBzdHJlbmd0aCwgd2hpY2ggcnVucworICAgICAgICAgICAgICAgIGRvVGVzdChjb2xsLCBzdHJBLnRvU3RyaW5nKCksIHN0ckIudG9TdHJpbmcoKSwgMCk7ICAgIC8vICAgb3B0aW1pemVkIGZ1bmN0aW9ucyBpbiB0aGUgaW1wbAorICAgICAgICAgICAgICAgIGNvbGwuc2V0U3RyZW5ndGgoQ29sbGF0b3IuSURFTlRJQ0FMKTsgICAvLyBEbyBhZ2FpbiB3aXRoIHRoZSBzbG93LCBnZW5lcmFsIGltcGwuCisgICAgICAgICAgICAgICAgZG9UZXN0KGNvbGwsIHN0ckEudG9TdHJpbmcoKSwgc3RyQi50b1N0cmluZygpLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiAgVGVzdCAyOiAgTm9uLW5vcm1hbCBzZXF1ZW5jZSBpbiBhIHN0cmluZyB0aGF0IGV4dGVuZHMgdG8gdGhlIGxhc3QgY2hhcmFjdGVyKi8KKyAgICAgICAgLyogICAgICAgICBvZiB0aGUgc3RyaW5nLiAgQ2hlY2tzIGEgY291cGxlIG9mIGVkZ2UgY2FzZXMuKi8KKyAgICAgICAgLy8gbG9nbG4oIlRlc3QgMiAuLi4uIik7ICAgIAorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgc3RyQSA9ICJBQVx1MDMwMFx1MDMxNiI7CisgICAgICAgICAgICBTdHJpbmcgc3RyQiA9ICJBXHUwMGMwXHUwMzE2IjsKKyAgICAgICAgICAgIGNvbGwuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICAgICAgZG9UZXN0KGNvbGwsIHN0ckEsIHN0ckIsIDApOworICAgICAgICB9CisgICAgICAgIC8qICBUZXN0IDM6ICBOb24tbm9ybWFsIHNlcXVlbmNlIGlzIHRlcm1pbmF0ZWQgYnkgYSBzdXJyb2dhdGUgcGFpci4qLworICAgICAgICAvLyBsb2dsbigiVGVzdCAzIC4uLi4iKTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIHN0ckEgPSAiQUFcdTAzMDBcdTAzMTZcdUQ4MDBcdURDMDEiOworICAgICAgICAgICAgU3RyaW5nIHN0ckIgPSAiQVx1MDBjMFx1MDMxNlx1RDgwMFx1REMwMCI7CisgICAgICAgICAgICBjb2xsLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIGRvVGVzdChjb2xsLCBzdHJBLCBzdHJCLCAxKTsKKyAgICAgICAgfQorICAgICAgICAvKiAgVGVzdCA0OiAgSW1iZWRkZWQgbnVsbHMgZG8gbm90IHRlcm1pbmF0ZSBhIHN0cmluZyB3aGVuIGxlbmd0aCBpcyBzcGVjaWZpZWQuKi8KKyAgICAgICAgLy8gbG9nbG4oIlRlc3QgNCAuLi4uIik7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdCBhIHZhbGlkIHRlc3Qgc2luY2Ugc3RyaW5nIGFyZSBudWxsLXRlcm1pbmF0ZWQgaW4gamF2YXsKKyAgICAgICAgICAgIGNoYXIgc3RyQVtdID0gezB4NDEsIDB4MDAsIDB4NDJ9OworICAgICAgICAgICAgY2hhciBzdHJCW10gPSB7MHg0MSwgMHgwMCwgMHgwMH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBjb2xsLmNvbXBhcmUobmV3IFN0cmluZyhzdHJBKSwgbmV3IFN0cmluZyhzdHJCKSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDEpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1IgMSBpbiB0ZXN0IDRcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSBjb2xsLmNvbXBhcmUobmV3IFN0cmluZyhzdHJBLCAwLCAxKSwgbmV3IFN0cmluZyhzdHJCLCAwLCAxKSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1IgMSBpbiB0ZXN0IDRcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBDb2xsYXRpb25LZXkgc29ydEtleUEgPSBjb2xsLmdldENvbGxhdGlvbktleShuZXcgU3RyaW5nKHN0ckEpKTsKKyAgICAgICAgICAgIENvbGxhdGlvbktleSBzb3J0S2V5QiA9IGNvbGwuZ2V0Q29sbGF0aW9uS2V5KG5ldyBTdHJpbmcoc3RyQikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgciA9IHNvcnRLZXlBLmNvbXBhcmVUbyhzb3J0S2V5Qik7CisgICAgICAgICAgICBpZiAociA8PSAwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIDQgaW4gdGVzdCA0XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGNvbGwuc2V0U3RyZW5ndGgoQ29sbGF0b3IuSURFTlRJQ0FMKTsKKyAgICAgICAgICAgIHNvcnRLZXlBID0gY29sbC5nZXRDb2xsYXRpb25LZXkobmV3IFN0cmluZyhzdHJBKSk7CisgICAgICAgICAgICBzb3J0S2V5QiA9IGNvbGwuZ2V0Q29sbGF0aW9uS2V5KG5ldyBTdHJpbmcoc3RyQikpOworICAgIAorICAgICAgICAgICAgciA9IHNvcnRLZXlBLmNvbXBhcmVUbyhzb3J0S2V5Qik7CisgICAgICAgICAgICBpZiAociA8PSAwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIDcgaW4gdGVzdCA0XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29sbC5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICAgICAgLyogIFRlc3QgNTogIE51bGwgY2hhcmFjdGVycyBpbiBub24tbm9ybWFsIHNvdXJjZSBzdHJpbmdzLiovCisgICAgICAgIC8vIGxvZ2xuKCJUZXN0IDUgLi4uLiIpOworICAgICAgICAvKgorICAgICAgICAgKiBub3QgYSB2YWxpZCB0ZXN0IHNpbmNlIHN0cmluZyBhcmUgbnVsbC10ZXJtaW5hdGVkIGluIGphdmF7CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgc3RyQVtdID0gezB4NDEsIDB4NDEsIDB4MzAwLCAweDMxNiwgMHgwMCwgMHg0Mix9OworICAgICAgICAgICAgY2hhciBzdHJCW10gPSB7MHg0MSwgMHg0MSwgMHgzMDAsIDB4MzE2LCAweDAwLCAweDAwLH07CisgICAgICAgICAgIAorICAgIAorICAgICAgICAgICAgaW50IHJlc3VsdCA9IGNvbGwuY29tcGFyZShuZXcgU3RyaW5nKHN0ckEsIDAsIDYpLCBuZXcgU3RyaW5nKHN0ckIsIDAsIDYpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SIDEgaW4gdGVzdCA1XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbGwuY29tcGFyZShuZXcgU3RyaW5nKHN0ckEsIDAsIDQpLCBuZXcgU3RyaW5nKHN0ckIsIDAsIDQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiAyIGluIHRlc3QgNVxuIik7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBDb2xsYXRpb25LZXkgc29ydEtleUEgPSBjb2xsLmdldENvbGxhdGlvbktleShuZXcgU3RyaW5nKHN0ckEpKTsKKyAgICAgICAgICAgIENvbGxhdGlvbktleSBzb3J0S2V5QiA9IGNvbGwuZ2V0Q29sbGF0aW9uS2V5KG5ldyBTdHJpbmcoc3RyQikpOworICAgICAgICAgICAgaW50IHIgPSBzb3J0S2V5QS5jb21wYXJlVG8oc29ydEtleUIpOworICAgICAgICAgICAgaWYgKHIgPD0gMCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciA0IGluIHRlc3QgNVxuIik7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBjb2xsLnNldFN0cmVuZ3RoKENvbGxhdG9yLklERU5USUNBTCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNvcnRLZXlBID0gY29sbC5nZXRDb2xsYXRpb25LZXkobmV3IFN0cmluZyhzdHJBKSk7CisgICAgICAgICAgICBzb3J0S2V5QiA9IGNvbGwuZ2V0Q29sbGF0aW9uS2V5KG5ldyBTdHJpbmcoc3RyQikpOworICAgICAgICAgICAgciA9IHNvcnRLZXlBLmNvbXBhcmVUbyhzb3J0S2V5Qik7CisgICAgICAgICAgICBpZiAociA8PSAwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIDcgaW4gdGVzdCA1XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29sbC5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICAgICAgLyogIFRlc3QgNjogIE51bGwgY2hhcmFjdGVyIGFzIGJhc2Ugb2YgYSBub24tbm9ybWFsIGNvbWJpbmluZyBzZXF1ZW5jZS4qLworICAgICAgICAvLyBsb2dsbigiVGVzdCA2IC4uLi4iKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90IGEgdmFsaWQgdGVzdCBzaW5jZSBzdHJpbmcgYXJlIG51bGwtdGVybWluYXRlZCBpbiBqYXZheworICAgICAgICB7CisgICAgICAgICAgICBjaGFyIHN0ckFbXSA9IHsweDQxLCAweDAsIDB4MzAwLCAweDMxNiwgMHg0MSwgMHgzMDIsfTsKKyAgICAgICAgICAgIGNoYXIgc3RyQltdID0gezB4NDEsIDB4MCwgMHgzMDIsIDB4MzE2LCAweDQxLCAweDMwMCx9OworICAgIAorICAgICAgICAgICAgaW50IHJlc3VsdCA9IGNvbGwuY29tcGFyZShuZXcgU3RyaW5nKHN0ckEsIDAsIDUpLCBuZXcgU3RyaW5nKHN0ckIsIDAsIDUpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgMSBpbiB0ZXN0IDZcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gY29sbC5jb21wYXJlKG5ldyBTdHJpbmcoc3RyQSwgMCwgMSksIG5ldyBTdHJpbmcoc3RyQiwgMCwgMSkpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSAwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIDIgaW4gdGVzdCA2XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAqLworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29udHJhY3Rpb24oKSB7CisgICAgICAgIFN0cmluZ1tdIHRlc3RydWxlcyA9IHsKKyAgICAgICAgICAgICImQSA9IEFCIC8gQiIsCisgICAgICAgICAgICAiJkEgPSBBXFx1MDMwNi9cXHUwMzA2IiwKKyAgICAgICAgICAgICImYyA9IGNoIC8gaCIsCisgICAgICAgIH07CisgICAgICAgIFN0cmluZ1tdIHRlc3RkYXRhID0geworICAgICAgICAgICAgIkFCIiwgIkFCIiwgIkFcdTAzMDYiLCAiY2giCisgICAgICAgIH07CisgICAgICAgIFN0cmluZ1tdIHRlc3RkYXRhMiA9IHsKKyAgICAgICAgICAgICJcdTAwNjNcdTAwNjciLAorICAgICAgICAgICAgIlx1MDA2M1x1MDA2OCIsCisgICAgICAgICAgICAiXHUwMDYzXHUwMDZDIiwKKyAgICAgICAgfTsKKyAgICAgICAgU3RyaW5nW10gdGVzdHJ1bGVzMyA9IHsKKyAgICAgICAgICAgICImeiA8IHh5eiAmeHl6dyA8PCBCIiwKKyAgICAgICAgICAgICImeiA8IHh5eiAmeHl6IDw8IEIgLyB3IiwKKyAgICAgICAgICAgICImeiA8IGNoICZhY2htIDw8IEIiLAorICAgICAgICAgICAgIiZ6IDwgY2ggJmEgPDwgQiAvIGNobSIsCisgICAgICAgICAgICAiJlx1ZDgwMFx1ZGMwMHcgPDwgQiIsCisgICAgICAgICAgICAiJlx1ZDgwMFx1ZGMwMCA8PCBCIC8gdyIsCisgICAgICAgICAgICAiJmFcdWQ4MDBcdWRjMDBtIDw8IEIiLAorICAgICAgICAgICAgIiZhIDw8IEIgLyBcdWQ4MDBcdWRjMDBtIiwKKyAgICAgICAgfTsKKyAgICAKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgIGNvbGwgPSBudWxsOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RydWxlcy5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyMSA9IG51bGw7CisgICAgICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgICAgICAvLyBsb2dsbigiUnVsZSAiICsgdGVzdHJ1bGVzW2ldICsgIiBmb3IgdGVzdGluZ1xuIik7CisgICAgICAgICAgICBTdHJpbmcgcnVsZSA9IHRlc3RydWxlc1tpXTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29sbCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkNvbGxhdG9yIGNyZWF0aW9uIGZhaWxlZCAiICsgdGVzdHJ1bGVzW2ldKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGl0ZXIxID0gY29sbC5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IodGVzdGRhdGFbaV0pOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ29sbGF0aW9uIGl0ZXJhdG9yIGNyZWF0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGogPCAyKSB7CisgICAgICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXIyOworICAgICAgICAgICAgICAgIGludCBjZTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpdGVyMiA9IGNvbGwuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKFN0cmluZy52YWx1ZU9mKHRlc3RkYXRhW2ldLmNoYXJBdChqKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkNvbGxhdGlvbiBpdGVyYXRvciBjcmVhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNlID0gaXRlcjIubmV4dCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChjZSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyMS5uZXh0KCkgIT0gY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJDb2xsYXRpb24gZWxlbWVudHMgaW4gY29udHJhY3Rpb24gc3BsaXQgZG9lcyBub3QgbWF0Y2hcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNlID0gaXRlcjIubmV4dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGl0ZXIxLm5leHQoKSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkNvbGxhdGlvbiBlbGVtZW50cyBub3QgZXhoYXVzdGVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHJ1bGUgPSAiJiBhIDwgYiA8IGMgPCBjaCA8IGQgJiBjID0gY2ggLyBoIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbGwgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiY2Fubm90IGNyZWF0ZSBydWxlYmFzZWQgY29sbGF0b3IiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNvbGwuY29tcGFyZSh0ZXN0ZGF0YTJbMF0sIHRlc3RkYXRhMlsxXSkgIT0gLTEpIHsKKyAgICAgICAgICAgIGVycmxuKCJFeHBlY3RlZCAiICsgdGVzdGRhdGEyWzBdICsgIiA8ICIgKyB0ZXN0ZGF0YTJbMV0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xsLmNvbXBhcmUodGVzdGRhdGEyWzFdLCB0ZXN0ZGF0YTJbMl0pICE9IC0xKSB7CisgICAgICAgICAgICBlcnJsbigiRXhwZWN0ZWQgIiArIHRlc3RkYXRhMlsxXSArICIgPCAiICsgdGVzdGRhdGEyWzJdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RydWxlczMubGVuZ3RoOyBpICs9IDIpIHsKKyAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yICAgICAgICAgIGNvbGwxLCBjb2xsMjsKKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpdGVyMSwgaXRlcjI7CisgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgY2ggPSAweDAwNDI7CisgICAgICAgICAgICBpbnQgICAgICAgICAgICBjZTsKKyAgICAgICAgICAgIHJ1bGUgPSB0ZXN0cnVsZXMzW2ldOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb2xsMSA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWw6IGNhbm5vdCBjcmVhdGUgcnVsZWJhc2VkIGNvbGxhdG9yLCBydWxlOiIgKyBydWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydWxlID0gdGVzdHJ1bGVzM1tpICsgMV07CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbGwyID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHJ1bGUpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ29sbGF0b3IgY3JlYXRpb24gZmFpbGVkICIgKyB0ZXN0cnVsZXNbaV0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaXRlcjEgPSBjb2xsMS5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoU3RyaW5nLnZhbHVlT2YoY2gpKTsKKyAgICAgICAgICAgICAgICBpdGVyMiA9IGNvbGwyLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihTdHJpbmcudmFsdWVPZihjaCkpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ29sbGF0aW9uIGl0ZXJhdG9yIGNyZWF0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2UgPSBpdGVyMS5uZXh0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChjZSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgaWYgKGNlICE9IGl0ZXIyLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiQ0VzIGRvZXMgbm90IG1hdGNoXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjZSA9IGl0ZXIxLm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpdGVyMi5uZXh0KCkgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgICAgIGVycmxuKCJDRXMgbm90IGV4aGF1c3RlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RFeHBhbnNpb24oKSB7CisgICAgICAgIFN0cmluZ1tdIHRlc3RydWxlcyA9IHsKKyAgICAgICAgICAgICImSiA8PCBLIC8gQiAmIEsgPDwgTSIsCisgICAgICAgICAgICAiJkogPDwgSyAvIEIgPDwgTSIKKyAgICAgICAgfTsKKyAgICAgICAgU3RyaW5nW10gdGVzdGRhdGEgPSB7CisgICAgICAgICAgICAiSkEiLCAiTUEiLCAiS0EiLCAiS0MiLCAiSkMiLCAiTUMiLAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgQ29sbGF0b3IgIGNvbGw7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdHJ1bGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAvLyBsb2dsbigiUnVsZSAiICsgdGVzdHJ1bGVzW2ldICsgIiBmb3IgdGVzdGluZ1xuIik7CisgICAgICAgICAgICBTdHJpbmcgcnVsZSA9IHRlc3RydWxlc1tpXTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29sbCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkNvbGxhdG9yIGNyZWF0aW9uIGZhaWxlZCAiICsgdGVzdHJ1bGVzW2ldKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNTsgaiArKykgeworICAgICAgICAgICAgICAgIGRvVGVzdChjb2xsLCB0ZXN0ZGF0YVtqXSwgdGVzdGRhdGFbaiArIDFdLCAtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENvbnRyYWN0aW9uRW5kQ29tcGFyZSgpCisgICAgeworICAgICAgICBTdHJpbmcgcnVsZXMgPSAiJmI9Y2giOworICAgICAgICBTdHJpbmcgc3JjID0gImJlYyI7CisgICAgICAgIFN0cmluZyB0Z3QgPSAiYmVjaCI7CisgICAgICAgIENvbGxhdG9yIGNvbGwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiQ29sbGF0b3IgY3JlYXRpb24gZmFpbGVkICIgKyBydWxlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZG9UZXN0KGNvbGwsIHNyYywgdGd0LCAxKTsKKyAgICB9CisgICAgCisgICAgIHB1YmxpYyB2b2lkIFRlc3RMb2NhbGVSdWxlQmFzZWRDb2xsYXRvcnMoKSB7CisgICAgICAgIGlmIChnZXRJbmNsdXNpb24oKSA8IDUpIHsKKyAgICAgICAgICAgIC8vIG5vdCBzZXJpb3VzIGVub3VnaCB0byBydW4gdGhpcworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIExvY2FsZSBsb2NhbGVbXSA9IElDVUxvY2FsZURhdGEuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICBTdHJpbmcgcHJldnJ1bGUgPSBudWxsOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2FsZS5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIExvY2FsZSBsID0gbG9jYWxlW2ldOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2wxID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJ1bGVCYXNlZENvbGxhdG9yKUNvbGxhdG9yLmdldEluc3RhbmNlKGwpOworICAgICAgICAgICAgICAgIFN0cmluZyBydWxlID0gY29sMS5nZXRSdWxlcygpOworICAgICAgICAgICAgICAgIGlmIChydWxlICE9IG51bGwgJiYgcnVsZS5sZW5ndGgoKSA+IDAgCisgICAgICAgICAgICAgICAgICAgICYmICFydWxlLmVxdWFscyhwcmV2cnVsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sMiA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2wxLmVxdWFscyhjb2wyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGNyZWF0aW5nIFJ1bGVCYXNlZENvbGxhdG9yIGZyb20gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxlIHJ1bGVzIGZvciAiICsgbC50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmV2cnVsZSA9IHJ1bGU7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciByZXRyaWV2aW5nIHJlc291cmNlIGJ1bmRsZSBmb3IgdGVzdGluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RPcHRpbWl6ZSgpIHsKKyAgICAgIC8qIHRoaXMgaXMgbm90IHJlYWxseSBhIHRlc3QgLSBqdXN0IHRyeWluZyBvdXQgCisgICAgICAgKiB3aGV0aGVyIGNvcHlpbmcgb2YgVUNBIGNvbnRlbnRzIHdpbGwgZmFpbCAKKyAgICAgICAqIENhbm5vdCByZWFsbHkgdGVzdCwgc2luY2UgdGhlIGZ1bmN0aW9uYWxpdHkgCisgICAgICAgKiByZW1haW5zIHRoZSBzYW1lLgorICAgICAgICovCisgICAgICAgU3RyaW5nIHJ1bGVzW10gPSB7CisgICAgICAgICJbb3B0aW1pemUgW1xcdUFDMDAtXFx1RDdGRl1dIgorICAgICAgIH07CisgICAgICAgU3RyaW5nIGRhdGFbXVtdID0geworICAgICAgICAgeyAiYSIsICJiIn0KKyAgICAgICB9OworICAgICAgIGludCBpID0gMDsKKyAgICAKKyAgICAgIGZvcihpID0gMDsgaTxydWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICBnZW5lcmljUnVsZXNTdGFydGVyKHJ1bGVzW2ldLCBkYXRhW2ldKTsKKyAgICAgIH0KKyAgICB9ICAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25Nb25rZXlUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uTW9ua2V5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YTE5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uTW9ua2V5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IAorICogJERhdGU6IAorICogJFJldmlzaW9uOiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjIuMSA6IGNvbGxhdGUvQ29sbGF0aW9uTW9ua2V5VGVzdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvbW5reXRzdC5jcHAKKyAqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworLyoqCisgKiBDb2xsYXRpb25Nb25rZXlUZXN0IGlzIGEgdGhpcmQgbGV2ZWwgdGVzdCBjbGFzcy4gIFRoaXMgdGVzdHMgdGhlIHJhbmRvbSAKKyAqIHN1YnN0cmluZ3Mgb2YgdGhlIGRlZmF1bHQgdGVzdCBzdHJpbmdzIHRvIHZlcmlmeSBpZiB0aGUgY29tcGFyZSBhbmQgCisgKiBzb3J0IGtleSBhbGdvcml0aG0gd29ya3MgY29ycmVjdGx5LiAgRm9yIGV4YW1wbGUsIGFueSBzdHJpbmcgaXMgYWx3YXlzCisgKiBsZXNzIHRoYW4gdGhlIHN0cmluZyBpdHNlbGYgYXBwZW5kZWQgd2l0aCBhbnkgY2hhcmFjdGVyLgorICovCisKK3B1YmxpYyBjbGFzcyBDb2xsYXRpb25Nb25rZXlUZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworICAgIAorICAgIHByaXZhdGUgU3RyaW5nIHNvdXJjZSA9ICItYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXojJl4kQCI7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBDb2xsYXRpb25Nb25rZXlUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29sbGF0aW9uS2V5KCkgeworICAgICAgICBpZihzb3VyY2UubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgZXJybG4oIkNvbGxhdGlvbk1vbmtleVRlc3QuVGVzdENvbGxhdGlvbktleSgpOiBzb3VyY2UgaXMgZW1wdHkgLSBJQ1VfREFUQSBub3Qgc2V0IG9yIGRhdGEgbWlzc2luZz8iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDb2xsYXRvciBteUNvbGxhdG9yOworICAgICAgICB0cnkgeworICAgICAgICAgICAgIG15Q29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJlbiIsICJVUyIpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgRU5HTElTSCBsb2NhbGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKCk7CisgICAgICAgIGludCBzID0gcmFuZC5uZXh0SW50KDB4N2ZmZikgJSBzb3VyY2UubGVuZ3RoKCk7CisgICAgICAgIGludCB0ID0gcmFuZC5uZXh0SW50KDB4N2ZmZikgJSBzb3VyY2UubGVuZ3RoKCk7CisgICAgICAgIGludCBzbGVuID0gTWF0aC5hYnMocmFuZC5uZXh0SW50KDB4N2ZmZikgJSBzb3VyY2UubGVuZ3RoKCkgLSBzb3VyY2UubGVuZ3RoKCkpICUgc291cmNlLmxlbmd0aCgpOworICAgICAgICBpbnQgdGxlbiA9IE1hdGguYWJzKHJhbmQubmV4dEludCgweDdmZmYpICUgc291cmNlLmxlbmd0aCgpIC0gc291cmNlLmxlbmd0aCgpKSAlIHNvdXJjZS5sZW5ndGgoKTsKKyAgICAgICAgU3RyaW5nIHN1YnMgPSBzb3VyY2Uuc3Vic3RyaW5nKE1hdGgubWluKHMsIHNsZW4pLCBNYXRoLm1pbihzICsgc2xlbiwgc291cmNlLmxlbmd0aCgpKSk7CisgICAgICAgIFN0cmluZyBzdWJ0ID0gc291cmNlLnN1YnN0cmluZyhNYXRoLm1pbih0LCB0bGVuKSwgTWF0aC5taW4odCArIHRsZW4sIHNvdXJjZS5sZW5ndGgoKSkpOworICAgIAorICAgICAgICBDb2xsYXRpb25LZXkgY29sbGF0aW9uS2V5MSwgY29sbGF0aW9uS2V5MjsKKyAgICAKKyAgICAgICAgbXlDb2xsYXRvci5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIGNvbGxhdGlvbktleTEgPSBteUNvbGxhdG9yLmdldENvbGxhdGlvbktleShzdWJzKTsKKyAgICAgICAgY29sbGF0aW9uS2V5MiA9IG15Q29sbGF0b3IuZ2V0Q29sbGF0aW9uS2V5KHN1YnQpOworICAgICAgICBpbnQgcmVzdWx0ID0gY29sbGF0aW9uS2V5MS5jb21wYXJlVG8oY29sbGF0aW9uS2V5Mik7ICAvLyBUZXJ0aWFyeQorICAgICAgICBpbnQgcmV2UmVzdWx0ID0gY29sbGF0aW9uS2V5Mi5jb21wYXJlVG8oY29sbGF0aW9uS2V5MSk7ICAvLyBUZXJ0aWFyeQorICAgICAgICByZXBvcnQoIHN1YnMsIHN1YnQsIHJlc3VsdCwgcmV2UmVzdWx0KTsKKyAgICAKKyAgICAgICAgbXlDb2xsYXRvci5zZXRTdHJlbmd0aChDb2xsYXRvci5TRUNPTkRBUlkpOworICAgICAgICBjb2xsYXRpb25LZXkxID0gbXlDb2xsYXRvci5nZXRDb2xsYXRpb25LZXkoc3Vicyk7CisgICAgICAgIGNvbGxhdGlvbktleTIgPSBteUNvbGxhdG9yLmdldENvbGxhdGlvbktleShzdWJ0KTsKKyAgICAgICAgcmVzdWx0ID0gY29sbGF0aW9uS2V5MS5jb21wYXJlVG8oY29sbGF0aW9uS2V5Mik7ICAvLyBTZWNvbmRhcnkKKyAgICAgICAgcmV2UmVzdWx0ID0gY29sbGF0aW9uS2V5Mi5jb21wYXJlVG8oY29sbGF0aW9uS2V5MSk7ICAgLy8gU2Vjb25kYXJ5CisgICAgICAgIHJlcG9ydCggc3Vicywgc3VidCwgcmVzdWx0LCByZXZSZXN1bHQpOworICAgIAorICAgICAgICBteUNvbGxhdG9yLnNldFN0cmVuZ3RoKENvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICBjb2xsYXRpb25LZXkxID0gbXlDb2xsYXRvci5nZXRDb2xsYXRpb25LZXkoc3Vicyk7CisgICAgICAgIGNvbGxhdGlvbktleTIgPSBteUNvbGxhdG9yLmdldENvbGxhdGlvbktleShzdWJ0KTsKKyAgICAgICAgcmVzdWx0ID0gY29sbGF0aW9uS2V5MS5jb21wYXJlVG8oY29sbGF0aW9uS2V5Mik7ICAvLyBQcmltYXJ5CisgICAgICAgIHJldlJlc3VsdCA9IGNvbGxhdGlvbktleTIuY29tcGFyZVRvKGNvbGxhdGlvbktleTEpOyAgIC8vIFByaW1hcnkKKyAgICAgICAgcmVwb3J0KHN1YnMsIHN1YnQsIHJlc3VsdCwgcmV2UmVzdWx0KTsKKyAgICAKKyAgICAgICAgU3RyaW5nIG1zZyA9ICIiOworICAgICAgICBTdHJpbmcgYWRkT25lID0gc3VicyArIFN0cmluZy52YWx1ZU9mKDB4RTAwMCk7CisgICAgCisgICAgICAgIGNvbGxhdGlvbktleTEgPSBteUNvbGxhdG9yLmdldENvbGxhdGlvbktleShzdWJzKTsKKyAgICAgICAgY29sbGF0aW9uS2V5MiA9IG15Q29sbGF0b3IuZ2V0Q29sbGF0aW9uS2V5KGFkZE9uZSk7CisgICAgICAgIHJlc3VsdCA9IGNvbGxhdGlvbktleTEuY29tcGFyZVRvKGNvbGxhdGlvbktleTIpOworICAgICAgICBpZiAocmVzdWx0ICE9IC0xKSB7CisgICAgICAgICAgICBtc2cgKz0gIkNvbGxhdGlvbktleSgiOworICAgICAgICAgICAgbXNnICs9IHN1YnM7CisgICAgICAgICAgICBtc2cgKz0gIikgLkxULiBDb2xsYXRpb25LZXkoIjsKKyAgICAgICAgICAgIG1zZyArPSBhZGRPbmU7CisgICAgICAgICAgICBtc2cgKz0gIikgRmFpbGVkLiI7CisgICAgICAgICAgICBlcnJsbihtc2cpOworICAgICAgICB9CisgICAgCisgICAgICAgIG1zZyA9ICIiOworICAgICAgICByZXN1bHQgPSBjb2xsYXRpb25LZXkyLmNvbXBhcmVUbyhjb2xsYXRpb25LZXkxKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAxKSB7CisgICAgICAgICAgICBtc2cgKz0gIkNvbGxhdGlvbktleSgiOworICAgICAgICAgICAgbXNnICs9IGFkZE9uZTsKKyAgICAgICAgICAgIG1zZyArPSAiKSAuR1QuIENvbGxhdGlvbktleSgiOworICAgICAgICAgICAgbXNnICs9IHN1YnM7CisgICAgICAgICAgICBtc2cgKz0gIikgRmFpbGVkLiI7CisgICAgICAgICAgICBlcnJsbihtc2cpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIHBlcmZvcm0gbW9ua2V5IHRlc3RzIHVzaW5nIENvbGxhdG9yLmNvbXBhcmUKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29tcGFyZSgpIHsKKyAgICAgICAgaWYoc291cmNlLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJDb2xsYXRpb25Nb25rZXlUZXN0LlRlc3RDb21wYXJlKCk6IHNvdXJjZSBpcyBlbXB0eSAtIElDVV9EQVRBIG5vdCBzZXQgb3IgZGF0YSBtaXNzaW5nPyIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDb2xsYXRvciBteUNvbGxhdG9yOworICAgICAgICB0cnkgeworICAgICAgICAgICAgIG15Q29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJlbiIsICJVUyIpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgRU5HTElTSCBsb2NhbGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyogU2VlZCB0aGUgcmFuZG9tLW51bWJlciBnZW5lcmF0b3Igd2l0aCBjdXJyZW50IHRpbWUgc28gdGhhdAorICAgICAgICAgKiB0aGUgbnVtYmVycyB3aWxsIGJlIGRpZmZlcmVudCBldmVyeSB0aW1lIHdlIHJ1bi4KKyAgICAgICAgICovCisgICAgICAgIAorICAgICAgICBSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKKyAgICAgICAgaW50IHMgPSByYW5kLm5leHRJbnQoMHg3ZmZmKSAlIHNvdXJjZS5sZW5ndGgoKTsKKyAgICAgICAgaW50IHQgPSByYW5kLm5leHRJbnQoMHg3ZmZmKSAlIHNvdXJjZS5sZW5ndGgoKTsKKyAgICAgICAgaW50IHNsZW4gPSBNYXRoLmFicyhyYW5kLm5leHRJbnQoMHg3ZmZmKSAlIHNvdXJjZS5sZW5ndGgoKSAtIHNvdXJjZS5sZW5ndGgoKSkgJSBzb3VyY2UubGVuZ3RoKCk7CisgICAgICAgIGludCB0bGVuID0gTWF0aC5hYnMocmFuZC5uZXh0SW50KDB4N2ZmZikgJSBzb3VyY2UubGVuZ3RoKCkgLSBzb3VyY2UubGVuZ3RoKCkpICUgc291cmNlLmxlbmd0aCgpOworICAgICAgICBTdHJpbmcgc3VicyA9IHNvdXJjZS5zdWJzdHJpbmcoTWF0aC5taW4ocywgc2xlbiksIE1hdGgubWluKHMgKyBzbGVuLCBzb3VyY2UubGVuZ3RoKCkpKTsKKyAgICAgICAgU3RyaW5nIHN1YnQgPSBzb3VyY2Uuc3Vic3RyaW5nKE1hdGgubWluKHQsIHRsZW4pLCBNYXRoLm1pbih0ICsgdGxlbiwgc291cmNlLmxlbmd0aCgpKSk7CisgICAgCisgICAgICAgIG15Q29sbGF0b3Iuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBpbnQgcmVzdWx0ID0gbXlDb2xsYXRvci5jb21wYXJlKHN1YnMsIHN1YnQpOyAgLy8gVGVydGlhcnkKKyAgICAgICAgaW50IHJldlJlc3VsdCA9IG15Q29sbGF0b3IuY29tcGFyZShzdWJ0LCBzdWJzKTsgIC8vIFRlcnRpYXJ5CisgICAgICAgIHJlcG9ydChzdWJzLCBzdWJ0LCByZXN1bHQsIHJldlJlc3VsdCk7CisgICAgCisgICAgICAgIG15Q29sbGF0b3Iuc2V0U3RyZW5ndGgoQ29sbGF0b3IuU0VDT05EQVJZKTsKKyAgICAgICAgcmVzdWx0ID0gbXlDb2xsYXRvci5jb21wYXJlKHN1YnMsIHN1YnQpOyAgLy8gU2Vjb25kYXJ5CisgICAgICAgIHJldlJlc3VsdCA9IG15Q29sbGF0b3IuY29tcGFyZShzdWJ0LCBzdWJzKTsgIC8vIFNlY29uZGFyeQorICAgICAgICByZXBvcnQoc3Vicywgc3VidCwgcmVzdWx0LCByZXZSZXN1bHQpOworICAgIAorICAgICAgICBteUNvbGxhdG9yLnNldFN0cmVuZ3RoKENvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICByZXN1bHQgPSBteUNvbGxhdG9yLmNvbXBhcmUoc3Vicywgc3VidCk7ICAvLyBQcmltYXJ5CisgICAgICAgIHJldlJlc3VsdCA9IG15Q29sbGF0b3IuY29tcGFyZShzdWJ0LCBzdWJzKTsgIC8vIFByaW1hcnkKKyAgICAgICAgcmVwb3J0KHN1YnMsIHN1YnQsIHJlc3VsdCwgcmV2UmVzdWx0KTsKKyAgICAKKyAgICAgICAgU3RyaW5nIG1zZyA9ICIiOworICAgICAgICBTdHJpbmcgYWRkT25lID0gc3VicyArIFN0cmluZy52YWx1ZU9mKDB4RTAwMCk7CisgICAgCisgICAgICAgIHJlc3VsdCA9IG15Q29sbGF0b3IuY29tcGFyZShzdWJzLCBhZGRPbmUpOworICAgICAgICBpZiAocmVzdWx0ICE9IC0xKSB7CisgICAgICAgICAgICBtc2cgKz0gIlRlc3QgOiAiOworICAgICAgICAgICAgbXNnICs9IHN1YnM7CisgICAgICAgICAgICBtc2cgKz0gIiAuTFQuICI7CisgICAgICAgICAgICBtc2cgKz0gYWRkT25lOworICAgICAgICAgICAgbXNnICs9ICIgRmFpbGVkLiI7CisgICAgICAgICAgICBlcnJsbihtc2cpOworICAgICAgICB9CisgICAgCisgICAgICAgIG1zZyA9ICIiOworICAgICAgICByZXN1bHQgPSBteUNvbGxhdG9yLmNvbXBhcmUoYWRkT25lLCBzdWJzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAxKSB7CisgICAgICAgICAgICBtc2cgKz0gIlRlc3QgOiAiOworICAgICAgICAgICAgbXNnICs9IGFkZE9uZTsKKyAgICAgICAgICAgIG1zZyArPSAiIC5HVC4gIjsKKyAgICAgICAgICAgIG1zZyArPSBzdWJzOworICAgICAgICAgICAgbXNnICs9ICIgRmFpbGVkLiI7CisgICAgICAgICAgICBlcnJsbihtc2cpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcmVwb3J0KFN0cmluZyBzLCBTdHJpbmcgdCwgaW50IHJlc3VsdCwgaW50IHJldlJlc3VsdCkgeworICAgICAgICBpZiAocmV2UmVzdWx0ICE9IC1yZXN1bHQpIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKKyAgICAgICAgICAgIG1zZyArPSBzOyAKKyAgICAgICAgICAgIG1zZyArPSAiIGFuZCAiOworICAgICAgICAgICAgbXNnICs9IHQ7CisgICAgICAgICAgICBtc2cgKz0gIiByb3VuZCB0cmlwIGNvbXBhcmlzb24gZmFpbGVkIjsKKyAgICAgICAgICAgIG1zZyArPSAiIChyZXN1bHQgIiArIHJlc3VsdCArICIsIHJldmVyc2UgUmVzdWx0ICIgKyByZXZSZXN1bHQgKyAiKSI7IAorICAgICAgICAgICAgZXJybG4obXNnKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0UnVsZXMoKSB7CisgICAgICAgIFN0cmluZyB0ZXN0U291cmNlQ2FzZXNbXSA9IHsKKyAgICAgICAgICAgICJcdTAwNjFcdTAwNjJcdTAwN2EiLCAKKyAgICAgICAgICAgICJcdTAwNjFcdTAwNjJcdTAwN2EiLCAKKyAgICAgICAgfTsKKyAgICAKKyAgICAgICAgU3RyaW5nIHRlc3RUYXJnZXRDYXNlc1tdID0geworICAgICAgICAgICAgIlx1MDA2MVx1MDA2Mlx1MDBlNCIsCisgICAgICAgICAgICAiXHUwMDYxXHUwMDYyXHUwMDYxXHUwMzA4IiwKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGludCBpPTA7CisgICAgICAgIGxvZ2xuKCJEZW1vIFRlc3QgMSA6IENyZWF0ZSBhIG5ldyB0YWJsZSBjb2xsYXRpb24gd2l0aCBydWxlcyBcIiYgeiA8IDB4MDBlNFwiIik7CisgICAgICAgIENvbGxhdG9yIGNvbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoImVuIiwgIlVTIikpOworICAgICAgICBTdHJpbmcgYmFzZVJ1bGVzID0gKChSdWxlQmFzZWRDb2xsYXRvciljb2wpLmdldFJ1bGVzKCk7CisgICAgICAgIFN0cmluZyBuZXdSdWxlcyA9ICIgJiB6IDwgIjsKKyAgICAgICAgbmV3UnVsZXMgPSBiYXNlUnVsZXMgKyBuZXdSdWxlcyArIFN0cmluZy52YWx1ZU9mKDB4MDBlNCk7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIG15Q29sbGF0aW9uID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG15Q29sbGF0aW9uID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKG5ld1J1bGVzKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCAiRGVtbyBUZXN0IDEgVGFibGUgQ29sbGF0aW9uIG9iamVjdCBjcmVhdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvcihpPTA7IGk8MjsgaSsrKXsKKyAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdGlvbiwgdGVzdFNvdXJjZUNhc2VzW2ldLCB0ZXN0VGFyZ2V0Q2FzZXNbaV0sIC0xKTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbigiRGVtbyBUZXN0IDIgOiBDcmVhdGUgYSBuZXcgdGFibGUgY29sbGF0aW9uIHdpdGggcnVsZXMgXCImIHogPCBhIDB4MDMwOFwiIik7CisgICAgICAgIG5ld1J1bGVzID0gIiI7CisgICAgICAgIG5ld1J1bGVzID0gYmFzZVJ1bGVzICsgIiAmIHogPCBhIiArIFN0cmluZy52YWx1ZU9mKDB4MDMwOCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBteUNvbGxhdGlvbiA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihuZXdSdWxlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbiggIkRlbW8gVGVzdCAxIFRhYmxlIENvbGxhdGlvbiBvYmplY3QgY3JlYXRpb24gZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvcihpPTA7IGk8MjsgaSsrKXsKKyAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdGlvbiwgdGVzdFNvdXJjZUNhc2VzW2ldLCB0ZXN0VGFyZ2V0Q2FzZXNbaV0sIC0xKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGRvVGVzdChSdWxlQmFzZWRDb2xsYXRvciBteUNvbGxhdGlvbiwgU3RyaW5nIG15c291cmNlLCBTdHJpbmcgdGFyZ2V0LCBpbnQgcmVzdWx0KSB7CisgICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gbXlDb2xsYXRpb24uY29tcGFyZShzb3VyY2UsIHRhcmdldCk7CisgICAgICAgIENvbGxhdGlvbktleSBzb3J0S2V5MSwgc29ydEtleTI7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc29ydEtleTEgPSBteUNvbGxhdGlvbi5nZXRDb2xsYXRpb25LZXkoc291cmNlKTsKKyAgICAgICAgICAgIHNvcnRLZXkyID0gbXlDb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHRhcmdldCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiU29ydEtleSBnZW5lcmF0aW9uIEZhaWxlZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGludCBrZXlSZXN1bHQgPSBzb3J0S2V5MS5jb21wYXJlVG8oc29ydEtleTIpOworICAgICAgICByZXBvcnRDUmVzdWx0KCBteXNvdXJjZSwgdGFyZ2V0LCBzb3J0S2V5MSwgc29ydEtleTIsIGNvbXBhcmVSZXN1bHQsIGtleVJlc3VsdCwgY29tcGFyZVJlc3VsdCwgcmVzdWx0ICk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHJlcG9ydENSZXN1bHQoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21wYXJlUmVzdWx0LCBpbnQga2V5UmVzdWx0LCBpbnQgaW5jUmVzdWx0LCBpbnQgZXhwZWN0ZWRSZXN1bHQgKSB7CisgICAgICAgIGlmIChleHBlY3RlZFJlc3VsdCA8IC0xIHx8IGV4cGVjdGVkUmVzdWx0ID4gMSkgeworICAgICAgICAgICAgZXJybG4oIioqKioqIGludmFsaWQgY2FsbCB0byByZXBvcnRDUmVzdWx0ICoqKioiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBib29sZWFuIG9rMSA9IChjb21wYXJlUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazIgPSAoa2V5UmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazMgPSAoaW5jUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgaWYgKG9rMSAmJiBvazIgJiYgb2szICYmICFpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgcmV0dXJuOyAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgU3RyaW5nIHNFeHBlY3QgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIFN0cmluZyBzUmVzdWx0ID0gbmV3IFN0cmluZygiIik7CisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChjb21wYXJlUmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIHNFeHBlY3QgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGV4cGVjdGVkUmVzdWx0LCBzRXhwZWN0KTsKKyAgICAgICAgICAgIGlmIChvazEpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1zZzEgPSBvazIgPyAiT2s6IGtleShcIiIgOiAiRkFJTDoga2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzIgPSAiXCIpLmNvbXBhcmVUbyhrZXkoXCIiOworICAgICAgICAgICAgbXNnMyA9ICJcIikpIHJldHVybmVkICI7CisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChrZXlSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgaWYgKG9rMikgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgICAgIG1zZzEgPSAiICAiOworICAgICAgICAgICAgICAgIG1zZzIgPSAiIHZzLiAiOworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBwcmV0dGlmeShzb3VyY2VLZXkpICsgbXNnMiArIHByZXR0aWZ5KHRhcmdldEtleSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoaW5jUmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazMpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgU3RyaW5nIGFwcGVuZENvbXBhcmVSZXN1bHQoaW50IHJlc3VsdCwgU3RyaW5nIHRhcmdldCkgeworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7ICAvL0xFU1MKKyAgICAgICAgICAgIHRhcmdldCArPSAiTEVTUyI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsgIC8vRVFVQUwKKyAgICAgICAgICAgIHRhcmdldCArPSAiRVFVQUwiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7ICAvL0dSRUFURVIKKyAgICAgICAgICAgIHRhcmdldCArPSAiR1JFQVRFUiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgaHVoID0gIj8iOworICAgICAgICAgICAgdGFyZ2V0ICs9IGh1aCArIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICBTdHJpbmcgcHJldHRpZnkoQ29sbGF0aW9uS2V5IHNvdXJjZUtleSkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgYnl0ZVtdIGJ5dGVzPSBzb3VyY2VLZXkudG9CeXRlQXJyYXkoKTsKKyAgICAgICAgU3RyaW5nIHRhcmdldCA9ICJbIjsKKyAgICAKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gSW50ZWdlci50b0hleFN0cmluZyhieXRlc1tpXSk7CisgICAgICAgICAgICB0YXJnZXQgKz0gIiAiOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSAiXSI7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25SZWdyZXNzaW9uVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvblJlZ3Jlc3Npb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0OTgzMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25SZWdyZXNzaW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsODk2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IAorICogJERhdGU6IAorICogJFJldmlzaW9uOiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjIuMSA6IGNvbGxhdGUvQ29sbGF0aW9uUmVncmVzc2lvblRlc3QKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L3JlZ2NvbGwuY3BwCisgKiovCisgCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNvbGxhdG9yOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworcHVibGljIGNsYXNzIENvbGxhdGlvblJlZ3Jlc3Npb25UZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIG5ldyBDb2xsYXRpb25SZWdyZXNzaW9uVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgLy8gQGJ1ZyA0MDQ4NDQ2CisgICAgLy8KKyAgICAvLyBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IucmVzZXQoKSBkb2Vzbid0IHdvcmsKKyAgICAvLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDQ4NDQ2KCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgdGVzdDEgPSAiWEZJTEUgV2hhdCBzdWJzZXQgb2YgYWxsIHBvc3NpYmxlIHRlc3QgY2FzZXMgaGFzIHRoZSBoaWdoZXN0IHByb2JhYmlsaXR5IG9mIGRldGVjdGluZyB0aGUgbW9zdCBlcnJvcnM/IjsKKyAgICAgICAgLy9maW5hbCBTdHJpbmcgdGVzdDIgPSAiWGZfaWxlIFdoYXQgc3Vic2V0IG9mIGFsbCBwb3NzaWJsZSB0ZXN0IGNhc2VzIGhhcyB0aGUgbG93ZXN0IHByb2JhYmlsaXR5IG9mIGRldGVjdGluZyB0aGUgbGVhc3QgZXJyb3JzPyI7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGVuX3VzID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaTEgPSBlbl91cy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IodGVzdDEpOworICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaTIgPSBlbl91cy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IodGVzdDEpOworICAgICAgICAKKyAgICAgICAgaWYgKGkxID09IG51bGwgfHwgaTIgPT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIkNvdWxkIG5vdCBjcmVhdGUgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yJ3MiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICB3aGlsZSAoaTEubmV4dCgpICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaTEucmVzZXQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWwoaTEsIGkyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NlcnRFcXVhbChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaTEsIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpMikgeworICAgICAgICBpbnQgYzEsIGMyLCBjb3VudCA9IDA7CisgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGMxID0gaTEubmV4dCgpOworICAgICAgICAgICAgYzIgPSBpMi5uZXh0KCk7CisgICAgCisgICAgICAgICAgICBpZiAoYzEgIT0gYzIpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbXNnID0gIiI7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1zZzEgPSAiICAgICI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbXNnICs9IG1zZzEgKyBjb3VudDsKKyAgICAgICAgICAgICAgICBtc2cgKz0gIjogc3RyZW5ndGgoMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhjMSk7CisgICAgICAgICAgICAgICAgbXNnICs9ICIpICE9IHN0cmVuZ3RoKDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoYzIpOworICAgICAgICAgICAgICAgIG1zZyArPSAiKSI7CisgICAgICAgICAgICAgICAgZXJybG4obXNnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgIH0gd2hpbGUgKGMxICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpOworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwNTE4NjYKKyAgICAvLworICAgIC8vIENvbGxhdG9yIC0+IHJ1bGVzIC0+IENvbGxhdG9yIHJvdW5kLXRyaXAgYnJva2VuIGZvciBleHBhbmRpbmcgY2hhcmFjdGVycworICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNTE4NjYoKSB7CisgICAgICAgU3RyaW5nIHJ1bGVzID0gIjwgbyAmIG9lICxvXHUzMDgwJiBvZSAsXHUxNTMwICxPJiBPRSAsT1x1MzA4MCYgT0UgLFx1MTUyMDwgcCAsUCI7CisKKyAgICAgICAgLy8gQnVpbGQgYSBjb2xsYXRvciBjb250YWluaW5nIGV4cGFuZGluZyBjaGFyYWN0ZXJzCisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMxID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjMSA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbCB0byBjcmVhdGUgUnVsZUJhc2VkQ29sbGF0b3Igd2l0aCBydWxlczoiICsgcnVsZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIEJ1aWxkIGFub3RoZXIgdXNpbmcgdGhlIHJ1bGVzIGZyb20gIHRoZSBmaXJzdAorICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjMiA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjMiA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihjMS5nZXRSdWxlcygpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsIHRvIGNyZWF0ZSBSdWxlQmFzZWRDb2xsYXRvciB3aXRoIHJ1bGVzOiIgKyBydWxlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXkncmUgdGhlIHNhbWUKKyAgICAgICAgaWYgKCEoYzEuZ2V0UnVsZXMoKS5lcXVhbHMoYzIuZ2V0UnVsZXMoKSkpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiUnVsZXMgYXJlIG5vdCBlcXVhbCIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEBidWcgNDA1MzYzNgorICAgIC8vCisgICAgLy8gQ29sbGF0b3IgdGhpbmtzICJibGFjay1iaXJkIiA9PSAiYmxhY2siCisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA1MzYzNigpIHsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgZW5fdXMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpIENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGlmIChlbl91cy5lcXVhbHMoImJsYWNrX2JpcmQiLCAiYmxhY2siKSkgeworICAgICAgICAgICAgZXJybG4oImJsYWNrLWJpcmQgPT0gYmxhY2siKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwNTQyMzgKKyAgICAvLworICAgIC8vIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBpZiB0aGUgYXNzb2NpYXRlZAorICAgIC8vIENvbGxhdG9yIG9iamVjdCdzIG1vZGUgaXMgY2hhbmdlZAorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNTQyMzgoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIGZpbmFsIGNoYXJbXSBjaGFyczMgPSB7MHg2MSwgMHgwMEZDLCAweDYyLCAweDY1LCAweDYzLCAweDZiLCAweDIwLCAweDQ3LCAweDcyLCAweDAwRjYsIDB4MDBERiwgMHg2NSwgMHgyMCwgMHg0YywgMHgwMEZDLCAweDYyLCAweDYzLCAweDZiLCAwfTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHRlc3QzID0gbmV3IFN0cmluZyhjaGFyczMpOworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgIAorICAgICAgICAvLyBOT1RFOiBUaGUgSmF2YSBjb2RlIHVzZXMgZW5fdXMgdG8gY3JlYXRlIHRoZSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3JzCisgICAgICAgIC8vIGJ1dCBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHdyb25nLCBzbyBJJ3ZlIGNoYW5nZWQgdGhpcyB0byB1c2UgYy4KKyAgICAgICAgYy5zZXREZWNvbXBvc2l0aW9uKENvbGxhdG9yLk5PX0RFQ09NUE9TSVRJT04pOworICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaTEgPSBjLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0ZXN0Myk7CisgICAgICAgIGxvZ2xuKCJPZmZzZXQ6IiArIGkxLmdldE9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAgLy8gQGJ1ZyA0MDU0NzM0CisgICAgLy8KKyAgICAvLyBDb2xsYXRvcjo6SURFTlRJQ0FMIGRvY3VtZW50ZWQgYnV0IG5vdCBpbXBsZW1lbnRlZAorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNTQ3MzQoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIAorICAgICAgICAgICAgLy9IZXJlJ3MgdGhlIG9yaWdpbmFsIEphdmE6CisgICAgCisgICAgICAgICAgICBTdHJpbmdbXSBkZWNvbXAgPSB7CisgICAgICAgICAgICAgICAgIlx1MDAwMSIsICAgIjwiLCAgICAiXHUwMDAyIiwKKyAgICAgICAgICAgICAgICAiXHUwMDAxIiwgICAiPSIsICAgICJcdTAwMDEiLAorICAgICAgICAgICAgICAgICJBXHUwMDAxIiwgICI+IiwgICAgIn5cdTAwMDIiLCAgICAgIC8vIEVuc3VyZSBBIGFuZCB+IGFyZSBub3QgY29tcGFyZWQgYml0d2lzZQorICAgICAgICAgICAgICAgICJcdTAwQzAiLCAgICI9IiwgICAgIkFcdTAzMDAiLCAgICAgIC8vIERlY29tcCBzaG91bGQgbWFrZSB0aGVzZSBlcXVhbAorICAgICAgICAgICAgfTsKKyAgICAKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgYyA9IChSdWxlQmFzZWRDb2xsYXRvcikgQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKTsKKyAgICAgICAgYy5zZXRTdHJlbmd0aChDb2xsYXRvci5JREVOVElDQUwpOworICAgICAgICBjLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pOworICAgICAgICBjb21wYXJlQXJyYXkoYywgZGVjb21wKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wYXJlQXJyYXkoQ29sbGF0b3IgYywgU3RyaW5nW10gdGVzdHMpIHsKKyAgICAgICAgCisgICAgICAgIGludCBleHBlY3RlZFJlc3VsdCA9IDA7CisgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpICs9IDMpIHsKKyAgICAgICAgICAgIFN0cmluZyBzb3VyY2UgPSB0ZXN0c1tpXTsKKyAgICAgICAgICAgIFN0cmluZyBjb21wYXJpc29uID0gdGVzdHNbaSArIDFdOworICAgICAgICAgICAgU3RyaW5nIHRhcmdldCA9IHRlc3RzW2kgKyAyXTsKKyAgICAKKyAgICAgICAgICAgIGlmIChjb21wYXJpc29uLmVxdWFscygiPCIpKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvbi5lcXVhbHMoIj4iKSkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0ID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvbi5lcXVhbHMoIj0iKSkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkJvZ3VzIGNvbXBhcmlzb24gc3RyaW5nIFwiIiArIGNvbXBhcmlzb24gKyAiXCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQgPSAwOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2dsbigiaSA9ICIgKyBpKTsKKyAgICAgICAgICAgIGxvZ2xuKHNvdXJjZSk7CisgICAgICAgICAgICBsb2dsbih0YXJnZXQpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb21wYXJlUmVzdWx0ID0gYy5jb21wYXJlKHNvdXJjZSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIENvbGxhdGlvbktleSBzb3VyY2VLZXkgPSBudWxsLCB0YXJnZXRLZXkgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzb3VyY2VLZXkgPSBjLmdldENvbGxhdGlvbktleShzb3VyY2UpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ291bGRuJ3QgZ2V0IGNvbGxhdGlvbktleSBmb3Igc291cmNlIik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRhcmdldEtleSA9IGMuZ2V0Q29sbGF0aW9uS2V5KHRhcmdldCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJDb3VsZG4ndCBnZXQgY29sbGF0aW9uS2V5IGZvciB0YXJnZXQiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGludCBrZXlSZXN1bHQgPSBzb3VyY2VLZXkuY29tcGFyZVRvKHRhcmdldEtleSk7CisgICAgICAgICAgICByZXBvcnRDUmVzdWx0KCBzb3VyY2UsIHRhcmdldCwgc291cmNlS2V5LCB0YXJnZXRLZXksIGNvbXBhcmVSZXN1bHQsIGtleVJlc3VsdCwgY29tcGFyZVJlc3VsdCwgZXhwZWN0ZWRSZXN1bHQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHJlcG9ydENSZXN1bHQoIFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQsIENvbGxhdGlvbktleSBzb3VyY2VLZXksIENvbGxhdGlvbktleSB0YXJnZXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21wYXJlUmVzdWx0LCBpbnQga2V5UmVzdWx0LCBpbnQgaW5jUmVzdWx0LCBpbnQgZXhwZWN0ZWRSZXN1bHQgKXsKKyAgICAgICAgaWYgKGV4cGVjdGVkUmVzdWx0IDwgLTEgfHwgZXhwZWN0ZWRSZXN1bHQgPiAxKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiKioqKiogaW52YWxpZCBjYWxsIHRvIHJlcG9ydENSZXN1bHQgKioqKiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBvazEgPSAoY29tcGFyZVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2syID0gKGtleVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2szID0gKGluY1Jlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG9rMSAmJiBvazIgJiYgb2szICYmICFpc1ZlcmJvc2UoKSl7CisgICAgICAgICAgICByZXR1cm47ICAgIAorICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc0V4cGVjdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgU3RyaW5nIHNSZXN1bHQgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGNvbXBhcmVSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgc0V4cGVjdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoZXhwZWN0ZWRSZXN1bHQsIHNFeHBlY3QpOworICAgICAgICAgICAgaWYgKG9rMSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworCisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChpbmNSZXN1bHQsIHNSZXN1bHQpOworCisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIFN0cmluZyBhcHBlbmRDb21wYXJlUmVzdWx0KGludCByZXN1bHQsIFN0cmluZyB0YXJnZXQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgeyAgLy9MRVNTCisgICAgICAgICAgICB0YXJnZXQgKz0gIkxFU1MiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAwKSB7ICAvL0VRVUFMCisgICAgICAgICAgICB0YXJnZXQgKz0gIkVRVUFMIjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMSkgeyAgLy9HUkVBVEVSCisgICAgICAgICAgICB0YXJnZXQgKz0gIkdSRUFURVIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGh1aCA9ICI/IjsKKyAgICAgICAgICAgIHRhcmdldCArPSBodWggKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHByZXR0aWZ5KENvbGxhdGlvbktleSBzb3VyY2VLZXkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGJ5dGVbXSBieXRlcz0gc291cmNlS2V5LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIFN0cmluZyB0YXJnZXQgPSAiWyI7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGFyZ2V0ICs9IEludGVnZXIudG9IZXhTdHJpbmcoYnl0ZXNbaV0pOworICAgICAgICAgICAgdGFyZ2V0ICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gIl0iOworICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwNTQ3MzYKKyAgICAvLworICAgIC8vIEZ1bGwgRGVjb21wb3NpdGlvbiBtb2RlIG5vdCBpbXBsZW1lbnRlZAorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNTQ3MzYoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpIENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgCisgICAgICAgIGMuc2V0U3RyZW5ndGgoQ29sbGF0b3IuU0VDT05EQVJZKTsKKyAgICAgICAgYy5zZXREZWNvbXBvc2l0aW9uKENvbGxhdG9yLk5PX0RFQ09NUE9TSVRJT04pOworICAgIAorICAgICAgICBmaW5hbCBTdHJpbmdbXSB0ZXN0cyA9IHsgIlx1RkI0RiIsICJcdTAwM2QiLCAiXHUwNUQwXHUwNURDIiB9OyAgLy8gQWxlZi1MYW1lZCB2cy4gQWxlZiwgTGFtZWQKKyAgICAgICAgY29tcGFyZUFycmF5KGMsIHRlc3RzKTsKKyAgICB9CisgICAgCisgICAgLy8gQGJ1ZyA0MDU4NjEzCisgICAgLy8KKyAgICAvLyBDb2xsYXRvcjo6Y3JlYXRlSW5zdGFuY2UoKSBjYXVzZXMgYW4gQXJyYXlJbmRleE91dG9mQm91bmRzRXhjZXB0aW9uIGZvciBLb3JlYW4gIAorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNTg2MTMoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIC8vIENyZWF0aW5nIGEgZGVmYXVsdCBjb2xsYXRvciBkb2Vzbid0IHdvcmsgd2hlbiBLb3JlYW4gaXMgdGhlIGRlZmF1bHQKKyAgICAgICAgLy8gbG9jYWxlCisgICAgICAgIAorICAgICAgICBMb2NhbGUgb2xkRGVmYXVsdCA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KG5ldyBMb2NhbGUoImtvIiwgIiIpKTsKKyAgICAKKyAgICAgICAgQ29sbGF0b3IgYyA9IG51bGw7CisgICAgICAgIAorICAgICAgICBjID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgiZW4iLCAiVVMiKSk7CisgICAgCisgICAgICAgIGlmIChjID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJDb3VsZCBub3QgY3JlYXRlIGEgS29yZWFuIGNvbGxhdG9yIik7CisgICAgICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChvbGREZWZhdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gU2luY2UgdGhlIGZpeCB0byB0aGlzIGJ1ZyB3YXMgdG8gdHVybiBvZmYgZGVjb21wb3NpdGlvbiBmb3IgS29yZWFuIGNvbGxhdG9ycywKKyAgICAgICAgLy8gZW5zdXJlIHRoYXQncyB3aGF0IHdlIGdvdAorICAgICAgICBpZiAoYy5nZXREZWNvbXBvc2l0aW9uKCkgIT0gQ29sbGF0b3IuTk9fREVDT01QT1NJVElPTikgeworICAgICAgICAgIGVycmxuKCJEZWNvbXBvc2l0aW9uIGlzIG5vdCBzZXQgdG8gTk9fREVDT01QT1NJVElPTiBmb3IgS29yZWFuIGNvbGxhdG9yIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgTG9jYWxlLnNldERlZmF1bHQob2xkRGVmYXVsdCk7CisgICAgfQorICAgIAorICAgIC8vIEBidWcgNDA1OTgyMAorICAgIC8vCisgICAgLy8gUnVsZUJhc2VkQ29sbGF0b3IuZ2V0UnVsZXMgZG9lcyBub3QgcmV0dXJuIHRoZSBleGFjdCBwYXR0ZXJuIGFzIGlucHV0CisgICAgLy8gZm9yIGV4cGFuZGluZyBjaGFyYWN0ZXIgc2VxdWVuY2VzCisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA1OTgyMCgvKiBjaGFyKiBwYXIgKi8pIHsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgYyA9IG51bGw7CisgICAgICAgIFN0cmluZyBydWxlcyA9ICI8IGEgPCBiICwgYy9hIDwgZCA8IHoiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbHVyZSBidWlsZGluZyBhIGNvbGxhdG9yLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmICggYy5nZXRSdWxlcygpLmluZGV4T2YoImMvYSIpID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigicmV0dXJuZWQgcnVsZXMgZG8gbm90IGNvbnRhaW4gJ2MvYSciKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwNjAxNTQKKyAgICAvLworICAgIC8vIE1lcmdlQ29sbGF0aW9uOjpmaXhFbnRyeSBicm9rZW4gZm9yICImIEggPCBcdTAxMzEsIFx1MDEzMCwgaSwgSSIKKyAgICAvLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDYwMTU0KC8qIGNoYXIqIHBhciAqLykgeworICAgICAgICBTdHJpbmcgcnVsZXMgPSI8IGcsIEcgPCBoLCBIIDwgaSwgSSA8IGosIEogJiBIIDwgXHUwMTMxLCBcdTAxMzAsIGksIEkiOworICAgIAorICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXMpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICAgICAgICBlcnJsbigiZmFpbHVyZSBidWlsZGluZyBjb2xsYXRvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBjLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuTk9fREVDT01QT1NJVElPTik7CisgICAgCisgICAgICAgIFN0cmluZ1tdIHRlcnRpYXJ5ID0geworICAgICAgICAgICAgIkEiLCAgICAgICAgIjwiLCAgICAiQiIsCisgICAgICAgICAgICAiSCIsICAgICAgICAiPCIsICAgICJcdTAxMzEiLAorICAgICAgICAgICAgIkgiLCAgICAgICAgIjwiLCAgICAiSSIsCisgICAgICAgICAgICAiXHUwMTMxIiwgICAiPCIsICAgICJcdTAxMzAiLAorICAgICAgICAgICAgIlx1MDEzMCIsICAgIjwiLCAgICAiaSIsCisgICAgICAgICAgICAiXHUwMTMwIiwgICAiPiIsICAgICJIIiwKKyAgICAgICAgfTsKKyAgICAKKyAgICAgICAgYy5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIGNvbXBhcmVBcnJheShjLCB0ZXJ0aWFyeSk7CisgICAgCisgICAgICAgIFN0cmluZ1tdIHNlY29uZGFyeSA9IHsKKyAgICAgICAgICAgICJIIiwgICAgICAgICI8IiwgICAgIkkiLAorICAgICAgICAgICAgIlx1MDEzMSIsICAgIj0iLCAgICAiXHUwMTMwIiwKKyAgICAgICAgfTsKKyAgICAKKyAgICAgICAgYy5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgY29tcGFyZUFycmF5KGMsIHNlY29uZGFyeSk7CisgICAgfTsKKyAgICAKKyAgICAvLyBAYnVnIDQwNjI0MTgKKyAgICAvLworICAgIC8vIFNlY29uZGFyeS9UZXJ0aWFyeSBjb21wYXJpc29uIGluY29ycmVjdCBpbiBGcmVuY2ggU2Vjb25kYXJ5CisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA2MjQxOCgvKiBjaGFyKiBwYXIgKi8pIHsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgYyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRlJBTkNFKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQgdG8gY3JlYXRlIGNvbGxhdG9yIGZvciBMb2NhbGU6OkZSQU5DRSgpIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYy5zZXRTdHJlbmd0aChDb2xsYXRvci5TRUNPTkRBUlkpOworICAgIAorICAgICAgICBTdHJpbmdbXSB0ZXN0cyA9IHsKKyAgICAgICAgICAgICAgICAicFx1MDBlYWNoZSIsICAgICI8IiwgICAgInBcdTAwZTljaFx1MDBlOSIsICAgIC8vIENvbXBhcmluZyBhY2NlbnRzIGZyb20gZW5kLCBwXHUwMGU5Y2hcdTAwZTkgaXMgZ3JlYXRlcgorICAgICAgICB9OworICAgIAorICAgICAgICBjb21wYXJlQXJyYXkoYywgdGVzdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwNjU1NDAKKyAgICAvLworICAgIC8vIENvbGxhdG9yOjpjb21wYXJlKCkgbWV0aG9kIGJyb2tlbiBpZiBlaXRoZXIgc3RyaW5nIGNvbnRhaW5zIHNwYWNlcworICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNjU1NDAoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGVuX3VzID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICBpZiAoZW5fdXMuY29tcGFyZSgiYWJjZCBlIiwgImFiY2QgZiIpID09IDApIHsKKyAgICAgICAgICAgIGVycmxuKCInYWJjZCBlJyA9PSAnYWJjZCBmJyIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEBidWcgNDA2NjE4OQorICAgIC8vCisgICAgLy8gVW5pY29kZSBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgcmVjdXJzaXZlbHkgZGVjb21wb3NlZCB0byBnZXQgdGhlCisgICAgLy8gY29ycmVjdCByZXN1bHQuIEZvciBleGFtcGxlLAorICAgIC8vIHUxRUIxIC0+IFx1MDEwMyArIFx1MDMwMCAtPiBhICsgXHUwMzA2ICsgXHUwMzAwLgorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNjYxODkoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIGZpbmFsICBTdHJpbmcgdGVzdDEgPSAiXHUxRUIxIjsKKyAgICAgICAgZmluYWwgIFN0cmluZyB0ZXN0MiA9ICJcdTAwNjFcdTAzMDZcdTAzMDAiOworICAgIAorICAgICAgICAvLyBOT1RFOiBUaGUgamF2YSBjb2RlIHVzZWQgZW5fdXMgdG8gY3JlYXRlIHRoZQorICAgICAgICAvLyBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Incy4gSSdtIHByZXR0eSBzdXJlIHRoYXQKKyAgICAgICAgLy8gd2FzIHdyb25nLCBzbyBJJ3ZlIGNoYW5nZSB0aGUgY29kZSB0byB1c2UgYzEgYW5kIGMyCisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMxID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICBjMS5zZXREZWNvbXBvc2l0aW9uKENvbGxhdG9yLkNBTk9OSUNBTF9ERUNPTVBPU0lUSU9OKTsKKyAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGkxID0gYzEuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHRlc3QxKTsKKyAgICAKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgYzIgPSAoUnVsZUJhc2VkQ29sbGF0b3IpIENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGMyLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuTk9fREVDT01QT1NJVElPTik7CisgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpMiA9IGMyLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0ZXN0Mik7CisgICAgCisgICAgICAgIGFzc2VydEVxdWFsKGkxLCBpMik7CisgICAgfQorICAgIAorICAgIC8vIEBidWcgNDA2NjY5NgorICAgIC8vCisgICAgLy8gRnJlbmNoIHNlY29uZGFyeSBjb2xsYXRpb24gY2hlY2tpbmcgYXQgdGhlIGVuZCBvZiBjb21wYXJlIGl0ZXJhdGlvbiBmYWlscworICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNjY2OTYoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IChSdWxlQmFzZWRDb2xsYXRvcilDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRlJBTkNFKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWx1cmUgY3JlYXRpbmcgY29sbGF0b3IgZm9yIExvY2FsZTo6Z2V0RnJhbmNlKCkiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjLnNldFN0cmVuZ3RoKENvbGxhdG9yLlNFQ09OREFSWSk7CisgICAgCisgICAgICAgIFN0cmluZ1tdIHRlc3RzID0geworICAgICAgICAgICAgIlx1MDBlMCIsICAgIj4iLCAgICAgIlx1MDFmYSIsICAgICAgIC8vIGEtZ3JhdmUgPCAgQS1yaW5nLWFjdXRlCisgICAgICAgIH07ICAgIAorICAgICAgICBjb21wYXJlQXJyYXkoYywgdGVzdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwNzY2NzYKKyAgICAvLworICAgIC8vIEJhZCBjYW5vbmljYWxpemF0aW9uIG9mIHNhbWUtY2xhc3MgY29tYmluaW5nIGNoYXJhY3RlcnMKKyAgICAvLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDc2Njc2KC8qIGNoYXIqIHBhciAqLykgeworICAgICAgICAvLyBUaGVzZSBjb21iaW5pbmcgY2hhcmFjdGVycyBhcmUgYWxsIGluIHRoZSBzYW1lIGNsYXNzLCBzbyB0aGV5IHNob3VsZCBub3QKKyAgICAgICAgLy8gYmUgcmVvcmRlcmVkLCBhbmQgdGhleSBzaG91bGQgY29tcGFyZSBhcyB1bmVxdWFsLgorICAgICAgICBmaW5hbCBTdHJpbmcgczEgPSAiXHUwMDQxXHUwMzAxXHUwMzAyXHUwMzAwIjsKKyAgICAgICAgZmluYWwgU3RyaW5nIHMyID0gIlx1MDA0MVx1MDMwMlx1MDMwMFx1MDMwMSI7CisgICAgCisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpIENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGMuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgIAorICAgICAgICBpZiAoYy5jb21wYXJlKHMxLHMyKSA9PSAwKSB7CisgICAgICAgICAgICBlcnJsbigiU2FtZS1jbGFzcyBjb21iaW5pbmcgY2hhcnMgd2VyZSByZW9yZGVyZWQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEBidWcgNDA3ODU4OAorICAgIC8vCisgICAgLy8gUnVsZUJhc2VkQ29sbGF0b3IgYnJlYWtzIG9uICI8IGEgPCBiYiIgcnVsZQorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwNzg1ODgoLyogY2hhciAqcGFyICovKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIHJiYyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByYmMgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IoIjwgYSA8IGJiIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHRvIGNyZWF0ZSBSdWxlQmFzZWRDb2xsYXRvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpbnQgcmVzdWx0ID0gcmJjLmNvbXBhcmUoImEiLCJiYiIpOworICAgIAorICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJDb21wYXJlKGEsYmIpIHJldHVybmVkICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZCAtMSIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEBidWcgNDA3OTIzMQorICAgIC8vCisgICAgLy8gUnVsZUJhc2VkQ29sbGF0b3I6Om9wZXJhdG9yPT0oTlVMTCkgdGhyb3dzIE51bGxQb2ludGVyRXhjZXB0aW9uCisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA3OTIzMSgvKiBjaGFyKiBwYXIgKi8pIHsgICAgCisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGVuX3VzID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGVuX3VzLmVxdWFscyhudWxsKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlbl91cy5lcXVhbHMobnVsbCkgcmV0dXJuZWQgdHJ1ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oImVuX3VzLmVxdWFscyhudWxsKSB0aHJldyAiICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwODE4NjYKKyAgICAvLworICAgIC8vIENvbWJpbmluZyBjaGFyYWN0ZXJzIGluIGRpZmZlcmVudCBjbGFzc2VzIG5vdCByZW9yZGVyZWQgcHJvcGVybHkuCisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA4MTg2NigvKiBjaGFyKiBwYXIgKi8pIHsKKyAgICAgICAgLy8gVGhlc2UgY29tYmluaW5nIGNoYXJhY3RlcnMgYXJlIGFsbCBpbiBkaWZmZXJlbnQgY2xhc3NlcywKKyAgICAgICAgLy8gc28gdGhleSBzaG91bGQgYmUgcmVvcmRlcmVkIGFuZCB0aGUgc3RyaW5ncyBzaG91bGQgY29tcGFyZSBhcyBlcXVhbC4KKyAgICAgICAgU3RyaW5nIHMxID0gIlx1MDA0MVx1MDMwMFx1MDMxNlx1MDMyN1x1MDMxNSI7CisgICAgICAgIFN0cmluZyBzMiA9ICJcdTAwNDFcdTAzMjdcdTAzMTZcdTAzMTVcdTAzMDAiOworICAgIAorICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICBjLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyB0aGF0IHRoZSBkZWZhdWx0IGNvbGxhdG9ycyBhcmUgc2V0IHRvIE5PX0RFQ09NUE9TSVRJT04KKyAgICAgICAgLy8gKGFzIGEgcmVzdWx0IG9mIGZpeGluZyBidWcgNDExNDA3NyksIHdlIG11c3Qgc2V0IGl0IGV4cGxpY2l0bHkKKyAgICAgICAgLy8gd2hlbiB3ZSdyZSB0ZXN0aW5nIHJlb3JkZXJpbmcgYmVoYXZpb3IuICAtLSBsd2VybmVyLCA1LzUvOTgKKyAgICAgICAgYy5zZXREZWNvbXBvc2l0aW9uKENvbGxhdG9yLkNBTk9OSUNBTF9ERUNPTVBPU0lUSU9OKTsKKyAgICAgICAgaWYgKGMuY29tcGFyZShzMSxzMikgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oIkNvbWJpbmluZyBjaGFycyB3ZXJlIG5vdCByZW9yZGVyZWQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwODcyNDEKKyAgICAvLworICAgIC8vIHN0cmluZyBjb21wYXJpc29uIGVycm9ycyBpbiBTY2FuZGluYXZpYW4gY29sbGF0b3JzCisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA4NzI0MSgvKiBjaGFyKiBwYXIgKi8pIHsKKyAgICAgICAgTG9jYWxlIGRhX0RLID0gbmV3IExvY2FsZSgiZGEiLCAiREsiKTsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgYyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShkYV9ESyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHRvIGNyZWF0ZSBjb2xsYXRvciBmb3IgZGFfREsgbG9jYWxlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYy5zZXRTdHJlbmd0aChDb2xsYXRvci5TRUNPTkRBUlkpOworICAgICAgICBTdHJpbmcgdGVzdHNbXSA9IHsKKyAgICAgICAgICAgICJcdTAwN2EiLCAgICAgICAiXHUwMDNjIiwgIlx1MDBFNiIsICAgICAgICAgICAgLy8geiAgICAgICAgPCBhZQorICAgICAgICAgICAgIlx1MDA2MVx1MDMwOCIsICJcdTAwM2MiLCAiXHUwMDYxXHUwMzBBIiwgICAgICAvLyBhLXVubGF1dCA8IGEtcmluZworICAgICAgICAgICAgIlx1MDA1OSIsICAgICAgICJcdTAwM2MiLCAiXHUwMDc1XHUwMzA4IiwgICAgICAvLyBZICAgICAgICA8IHUtdW1sYXV0CisgICAgICAgIH07CisgICAgICAgIGNvbXBhcmVBcnJheShjLCB0ZXN0cyk7CisgICAgfQorICAgIAorICAgIC8vIEBidWcgNDA4NzI0MworICAgIC8vCisgICAgLy8gQ29sbGF0aW9uS2V5IHRha2VzIGlnbm9yYWJsZSBzdHJpbmdzIGludG8gYWNjb3VudCB3aGVuIGl0IHNob3VsZG4ndAorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQwODcyNDMoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpIENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGMuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBTdHJpbmcgdGVzdHNbXSA9IHsKKyAgICAgICAgICAgICJcdTAwMzFcdTAwMzJcdTAwMzMiLCAiXHUwMDNkIiwgIlx1MDAzMVx1MDAzMlx1MDAzM1x1MDAwMSIgICAgLy8gMSAyIDMgID0gIDEgMiAzIGN0cmwtQQorICAgICAgICB9OworICAgICAgICBjb21wYXJlQXJyYXkoYywgdGVzdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwOTIyNjAKKyAgICAvLworICAgIC8vIE11L21pY3JvIGNvbmZsaWN0CisgICAgLy8gTWljcm8gc3ltYm9sIGFuZCBncmVlayBsb3dlcmNhc2UgbGV0dGVyIE11IHNob3VsZCBzb3J0IGlkZW50aWNhbGx5CisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA5MjI2MCgvKiBjaGFyKiBwYXIgKi8pIHsKKyAgICAgICAgTG9jYWxlIGVsID0gbmV3IExvY2FsZSgiZWwiLCAiIik7CisgICAgICAgIENvbGxhdG9yIGMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IENvbGxhdG9yLmdldEluc3RhbmNlKGVsKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQgdG8gY3JlYXRlIGNvbGxhdG9yIGZvciBlbCBsb2NhbGUuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlc2Ugbm93IGhhdmUgdGVydGlhcnkgZGlmZmVyZW5jZXMgaW4gVUNBCisgICAgICAgIGMuc2V0U3RyZW5ndGgoQ29sbGF0b3IuU0VDT05EQVJZKTsKKyAgICAgICAgU3RyaW5nIHRlc3RzW10gPSB7CisgICAgICAgICAgICAiXHUwMEI1IiwgIlx1MDAzZCIsICJcdTAzQkMiLAorICAgICAgICB9OworICAgICAgICBjb21wYXJlQXJyYXkoYywgdGVzdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQwOTUzMTYKKyAgICAvLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDk1MzE2KC8qIGNoYXIqIHBhciAqLykgeworICAgICAgICBMb2NhbGUgZWxfR1IgPSBuZXcgTG9jYWxlKCJlbCIsICJHUiIpOworICAgICAgICBDb2xsYXRvciBjID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShlbF9HUik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHRvIGNyZWF0ZSBjb2xsYXRvciBmb3IgZWxfR1IgbG9jYWxlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlc2Ugbm93IGhhdmUgdGVydGlhcnkgZGlmZmVyZW5jZXMgaW4gVUNBCisgICAgICAgIC8vYy0+c2V0U3RyZW5ndGgoQ29sbGF0b3I6OlRFUlRJQVJZKTsKKyAgICAgICAgLy9jLT5zZXRBdHRyaWJ1dGUoVUNPTF9TVFJFTkdUSCwgVUNPTF9TRUNPTkRBUlksIHN0YXR1cyk7CisgICAgICAgIGMuc2V0U3RyZW5ndGgoQ29sbGF0b3IuU0VDT05EQVJZKTsKKyAgICAgICAgU3RyaW5nIHRlc3RzW10gPSB7CisgICAgICAgICAgICAiXHUwM0Q0IiwgIlx1MDAzZCIsICJcdTAzQUIiLAorICAgICAgICB9OworICAgICAgICBjb21wYXJlQXJyYXkoYywgdGVzdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQxMDE5NDAKKyAgICAvLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTAxOTQwKC8qIGNoYXIqIHBhciAqLykgeworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIHJ1bGVzID0gIjwgYSA8IGIiOworICAgICAgICBTdHJpbmcgbm90aGluZyA9ICIiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHRvIGNyZWF0ZSBSdWxlQmFzZWRDb2xsYXRvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBpID0gYy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Iobm90aGluZyk7CisgICAgICAgIGkucmVzZXQoKTsKKyAgICAgICAgaWYgKGkubmV4dCgpICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgIGVycmxuKCJuZXh0IGRpZCBub3QgcmV0dXJuIE5VTExPUkRFUiIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEBidWcgNDEwMzQzNgorICAgIC8vCisgICAgLy8gQ29sbGF0b3I6OmNvbXBhcmUgbm90IGhhbmRsaW5nIHNwYWNlcyBwcm9wZXJseQorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQxMDM0MzYoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpIENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGMuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBTdHJpbmdbXSB0ZXN0cyA9IHsKKyAgICAgICAgICAgICJcdTAwNjZcdTAwNjlcdTAwNmNcdTAwNjUiLCAiXHUwMDNjIiwgIlx1MDA2Nlx1MDA2OVx1MDA2Y1x1MDA2NVx1MDAyMFx1MDA2MVx1MDA2M1x1MDA2M1x1MDA2NVx1MDA3M1x1MDA3MyIsCisgICAgICAgICAgICAiXHUwMDY2XHUwMDY5XHUwMDZjXHUwMDY1IiwgIlx1MDAzYyIsICJcdTAwNjZcdTAwNjlcdTAwNmNcdTAwNjVcdTAwNjFcdTAwNjNcdTAwNjNcdTAwNjVcdTAwNzNcdTAwNzMiLAorICAgICAgICB9OworICAgICAgICBjb21wYXJlQXJyYXkoYywgdGVzdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQxMTQwNzYKKyAgICAvLworICAgIC8vIENvbGxhdGlvbiBub3QgVW5pY29kZSBjb25mb3JtYW50IHdpdGggSGFuZ3VsIHN5bGxhYmxlcworICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQxMTQwNzYoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpIENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGMuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgIAorICAgICAgICAvLworICAgICAgICAvLyBXaXRoIENhbm9uaWNhbCBkZWNvbXBvc2l0aW9uLCBIYW5ndWwgc3lsbGFibGVzIHNob3VsZCBnZXQgZGVjb21wb3NlZAorICAgICAgICAvLyBpbnRvIEphbW8sIGJ1dCBKYW1vIGNoYXJhY3RlcnMgc2hvdWxkIG5vdCBiZSBkZWNvbXBvc2VkIGludG8KKyAgICAgICAgLy8gY29uam9pbmluZyBKYW1vCisgICAgICAgIC8vCisgICAgICAgIFN0cmluZyB0ZXN0MVtdID0geworICAgICAgICAgICAgIlx1ZDRkYiIsICJcdTAwM2QiLCAiXHUxMTExXHUxMTcxXHUxMWI2IgorICAgICAgICB9OworICAgIAorICAgICAgICBjLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pOworICAgICAgICBjb21wYXJlQXJyYXkoYywgdGVzdDEpOworICAgIAorICAgICAgICAvLyBGcm9tIFVUUiAjMTU6CisgICAgICAgIC8vICpJbiBlYXJsaWVyIHZlcnNpb25zIG9mIFVuaWNvZGUsIGphbW8gY2hhcmFjdGVycyBsaWtlIGtzZgorICAgICAgICAvLyAgaGFkIGNvbXBhdGliaWxpdHkgbWFwcGluZ3MgdG8ga2YgKyBzZi4gVGhlc2UgbWFwcGluZ3Mgd2VyZSAKKyAgICAgICAgLy8gIHJlbW92ZWQgaW4gVW5pY29kZSAyLjEuOSB0byBlbnN1cmUgdGhhdCBIYW5ndWwgc3lsbGFibGVzIGFyZSBtYWludGFpbmVkLikKKyAgICAgICAgLy8gVGhhdCBpcywgdGhlIGZvbGxvd2luZyB0ZXN0IGlzIG9ic29sZXRlIGFzIG9mIDIuMS45CisgICAgCisgICAgLy9vYnNvbGV0ZS0gICAgLy8gV2l0aCBGdWxsIGRlY29tcG9zaXRpb24sIGl0IHNob3VsZCBnbyBhbGwgdGhlIHdheSBkb3duIHRvCisgICAgLy9vYnNvbGV0ZS0gICAgLy8gY29uam9pbmluZyBKYW1vIGNoYXJhY3RlcnMuCisgICAgLy9vYnNvbGV0ZS0gICAgLy8KKyAgICAvL29ic29sZXRlLSAgICBzdGF0aWMgY29uc3QgVUNoYXIgdGVzdDJbXVtDb2xsYXRpb25SZWdyZXNzaW9uVGVzdDo6TUFYX1RPS0VOX0xFTl0gPQorICAgIC8vb2Jzb2xldGUtICAgIHsKKyAgICAvL29ic29sZXRlLSAgICAgICAgezB4ZDRkYiwgMH0sIHsweDNkLCAwfSwgezB4MTExMSwgMHgxMTZlLCAweDExNzUsIDB4MTFhZiwgMHgxMWMyLCAwfQorICAgIC8vb2Jzb2xldGUtICAgIH07CisgICAgLy9vYnNvbGV0ZS0KKyAgICAvL29ic29sZXRlLSAgICBjLT5zZXREZWNvbXBvc2l0aW9uKE5vcm1hbGl6ZXI6OkRFQ09NUF9DT01QQVQpOworICAgIC8vb2Jzb2xldGUtICAgIGNvbXBhcmVBcnJheSgqYywgdGVzdDIsIEFSUkFZX0xFTkdUSCh0ZXN0MikpOworICAgIH0KKworICAgIC8vIEBidWcgNDExNDA3NworICAgIC8vCisgICAgLy8gQ29sbGF0aW9uIHdpdGggZGVjb21wb3NpdGlvbiBvZmYgZG9lc24ndCB3b3JrIGZvciBFdXJvcGUgCisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDExNDA3NygvKiBjaGFyKiBwYXIgKi8pIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZ2V0IHRoZSBzYW1lIHJlc3VsdHMgd2l0aCBkZWNvbXBvc2l0aW9uIG9mZgorICAgICAgICAvLyBhcyB3ZSBkbyB3aXRoIGl0IG9uLi4uLgorICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjID0gKFJ1bGVCYXNlZENvbGxhdG9yKSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICBjLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgU3RyaW5nIHRlc3QxW10gPSB7CisgICAgICAgICAgICAiXHUwMEMwIiwgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAzZCIsICJcdTAwNDFcdTAzMDAiLCAgICAgICAgICAgIC8vIFNob3VsZCBiZSBlcXVpdmFsZW50CisgICAgICAgICAgICAiXHUwMDcwXHUwMGVhXHUwMDYzXHUwMDY4XHUwMDY1IiwgIlx1MDAzZSIsICJcdTAwNzBcdTAwZTlcdTAwNjNcdTAwNjhcdTAwZTkiLAorICAgICAgICAgICAgIlx1MDIwNCIsICAgICAgICAgICAgICAgICAgICAgICAgICJcdTAwM2QiLCAiXHUwMDQ1XHUwMzBGIiwKKyAgICAgICAgICAgICJcdTAxZmEiLCAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDNkIiwgIlx1MDA0MVx1MDMwYVx1MDMwMSIsICAgIC8vIGEtcmluZy1hY3V0ZSAtPiBhLXJpbmcsIGFjdXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtPiBhLCByaW5nLCBhY3V0ZQorICAgICAgICAgICAgIlx1MDA0MVx1MDMwMFx1MDMxNiIsICAgICAgICAgICAgICJcdTAwM2MiLCAiXHUwMDQxXHUwMzE2XHUwMzAwIiAgICAgICAgLy8gTm8gcmVvcmRlcmluZyAtLT4gdW5lcXVhbAorICAgICAgICB9OworICAgIAorICAgICAgICBjLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuTk9fREVDT01QT1NJVElPTik7CisgICAgICAgIGNvbXBhcmVBcnJheShjLCB0ZXN0MSk7CisgICAgCisgICAgICAgIFN0cmluZyB0ZXN0MltdID0geworICAgICAgICAgICAgIlx1MDA0MVx1MDMwMFx1MDMxNiIsICJcdTAwM2QiLCAiXHUwMDQxXHUwMzE2XHUwMzAwIiAgICAgIC8vIFJlb3JkZXJpbmcgLS0+IGVxdWFsCisgICAgICAgIH07CisgICAgCisgICAgICAgIGMuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7CisgICAgICAgIGNvbXBhcmVBcnJheShjLCB0ZXN0Mik7CisgICAgfQorICAgIAorICAgIC8vIEBidWcgNDEyNDYzMgorICAgIC8vCisgICAgLy8gQ29sbGF0b3I6OmdldENvbGxhdGlvbktleSB3YXMgaGFuZ2luZyBvbiBjZXJ0YWluIGNoYXJhY3RlciBzZXF1ZW5jZXMKKyAgICAvLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTI0NjMyKC8qIGNoYXIqIHBhciAqLykgeworICAgICAgICBDb2xsYXRvciBjb2xsID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbGwgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuSkFQQU4pOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWxlZCB0byBjcmVhdGUgY29sbGF0b3IgZm9yIExvY2FsZTo6SkFQQU4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdGVzdCA9ICJcdTAwNDFcdTAzMDhcdTAwNjJcdTAwNjMiOworICAgICAgICBDb2xsYXRpb25LZXkga2V5OworICAgICAgICB0cnkgeworICAgICAgICAgICAga2V5ID0gY29sbC5nZXRDb2xsYXRpb25LZXkodGVzdCk7CisgICAgICAgICAgICBsb2dsbihrZXkuZ2V0U291cmNlU3RyaW5nKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkNvbGxhdGlvbktleSBjcmVhdGlvbiBmYWlsZWQuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQGJ1ZyA0MTMyNzM2CisgICAgLy8KKyAgICAvLyBzb3J0IG9yZGVyIG9mIGZyZW5jaCB3b3JkcyB3aXRoIG11bHRpcGxlIGFjY2VudHMgaGFzIGVycm9ycworICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQxMzI3MzYoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIENvbGxhdG9yIGMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5GUkFOQ0UpOworICAgICAgICAgICAgYy5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHRvIGNyZWF0ZSBhIGNvbGxhdG9yIGZvciBMb2NhbGU6OmdldEZyYW5jZSgpIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgU3RyaW5nIHRlc3QxW10gPSB7CisgICAgICAgICAgICAiXHUwMDY1XHUwMzAwXHUwMDY1XHUwMzAxIiwgIlx1MDAzYyIsICJcdTAwNjVcdTAzMDFcdTAwNjVcdTAzMDAiLAorICAgICAgICAgICAgIlx1MDA2NVx1MDMwMFx1MDMwMSIsICAgICAgICJcdTAwM2MiLCAiXHUwMDY1XHUwMzAxXHUwMzAwIiwKKyAgICAgICAgfTsKKyAgICAgICAgY29tcGFyZUFycmF5KGMsIHRlc3QxKTsKKyAgICB9CisgICAgCisgICAgLy8gQGJ1ZyA0MTMzNTA5CisgICAgLy8KKyAgICAvLyBUaGUgc29ydGluZyB1c2luZyBqYXZhLnRleHQuQ29sbGF0aW9uS2V5IGlzIG5vdCBpbiB0aGUgZXhhY3Qgb3JkZXIKKyAgICAvLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTMzNTA5KC8qIGNoYXIqIHBhciAqLykgeworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBlbl91cyA9IChSdWxlQmFzZWRDb2xsYXRvcikgQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKTsKKyAgICAgICAgU3RyaW5nIHRlc3QxW10gPSB7CisgICAgICAgICAgICAiXHUwMDQ1XHUwMDc4XHUwMDYzXHUwMDY1XHUwMDcwXHUwMDc0XHUwMDY5XHUwMDZmXHUwMDZlIiwgIlx1MDAzYyIsICJcdTAwNDVcdTAwNzhcdTAwNjNcdTAwNjVcdTAwNzBcdTAwNzRcdTAwNjlcdTAwNmZcdTAwNmVcdTAwNDlcdTAwNmVcdTAwNDlcdTAwNmVcdTAwNjlcdTAwNzRcdTAwNjlcdTAwNjFcdTAwNmNcdTAwNjlcdTAwN2FcdTAwNjVcdTAwNzJcdTAwNDVcdTAwNzJcdTAwNzJcdTAwNmZcdTAwNzIiLAorICAgICAgICAgICAgIlx1MDA0N1x1MDA3Mlx1MDA2MVx1MDA3MFx1MDA2OFx1MDA2OVx1MDA2M1x1MDA3MyIsICAgICAgICJcdTAwM2MiLCAiXHUwMDQ3XHUwMDcyXHUwMDYxXHUwMDcwXHUwMDY4XHUwMDY5XHUwMDYzXHUwMDczXHUwMDQ1XHUwMDZlXHUwMDc2XHUwMDY5XHUwMDcyXHUwMDZmXHUwMDZlXHUwMDZkXHUwMDY1XHUwMDZlXHUwMDc0IiwKKyAgICAgICAgICAgICJcdTAwNTNcdTAwNzRcdTAwNzJcdTAwNjlcdTAwNmVcdTAwNjciLCAgICAgICAgICAgICAgICAgICAiXHUwMDNjIiwgIlx1MDA1M1x1MDA3NFx1MDA3Mlx1MDA2OVx1MDA2ZVx1MDA2N1x1MDA0Mlx1MDA3NVx1MDA2Nlx1MDA2Nlx1MDA2NVx1MDA3MiIsCisgICAgICAgIH07CisgICAgCisgICAgICAgIGNvbXBhcmVBcnJheShlbl91cywgdGVzdDEpOworICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQxMzk1NzIKKyAgICAvLworICAgIC8vIGdldENvbGxhdGlvbktleSB0aHJvd3MgZXhjZXB0aW9uIGZvciBzcGFuaXNoIHRleHQgCisgICAgLy8gQ2Fubm90IHJlcHJvZHVjZSB0aGlzIGJ1ZyBvbiAxLjIsIGhvd2V2ZXIgaXQgRE9FUyBmYWlsIG9uIDEuMS42CisgICAgLy8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEzOTU3MigvKiBjaGFyKiBwYXIgKi8pIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29kZSBwYXN0ZWQgc3RyYWlnaHQgZnJvbSB0aGUgYnVnIHJlcG9ydAorICAgICAgICAvLyAoYW5kIHRoZW4gdHJhbnNsYXRlZCB0byBDKysgOy0pCisgICAgICAgIC8vCisgICAgICAgIC8vIGNyZWF0ZSBzcGFuaXNoIGxvY2FsZSBhbmQgY29sbGF0b3IKKyAgICAgICAgTG9jYWxlIGwgPSBuZXcgTG9jYWxlKCJlcyIsICJlcyIpOworICAgICAgICBDb2xsYXRvciBjb2wgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UobCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHRvIGNyZWF0ZSBhIGNvbGxhdG9yIGZvciBlc19lcyBsb2NhbGUuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQ29sbGF0aW9uS2V5IGtleSA9IG51bGw7CisgICAgICAgIC8vIHRoaXMgc3BhbmlzaCBwaHJhc2Uga2lsbHMgaXQhCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBrZXkgPSBjb2wuZ2V0Q29sbGF0aW9uS2V5KCJOb21icmUgRGUgT2JqZXRvIik7CisgICAgICAgICAgICBsb2dsbigic291cmNlOiIgKyBrZXkuZ2V0U291cmNlU3RyaW5nKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIGNyZWF0aW5nIENvbGxhdGlvbktleSBmb3IgXCJOb21icmUgRGUgT2piZXRvXCIiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBAYnVnIDQxNDE2NDAKKyAgICAvLworICAgIC8vIFN1cHBvcnQgZm9yIFN3ZWRpc2ggZ29uZSBpbiAxLjEuNiAoQ2FuJ3QgY3JlYXRlIFN3ZWRpc2ggY29sbGF0b3IpIAorICAgIC8vCisgICAgcHVibGljIHZvaWQgVGVzdDQxNDE2NDAoLyogY2hhciogcGFyICovKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFJhdGhlciB0aGFuIGp1c3QgY3JlYXRpbmcgYSBTd2VkaXNoIGNvbGxhdG9yLCB3ZSBtaWdodCBhcyB3ZWxsCisgICAgICAgIC8vIHRyeSB0byBpbnN0YW50aWF0ZSBvbmUgZm9yIGV2ZXJ5IGxvY2FsZSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbQorICAgICAgICAvLyBpbiBvcmRlciB0byBwcmV2ZW50IHRoaXMgc29ydCBvZiBidWcgZnJvbSBjcm9wcGluZyB1cCBpbiB0aGUgZnV0dXJlCisgICAgICAgIC8vCisgICAgICAgIExvY2FsZSBsb2NhbGVzW10gPSBMb2NhbGUuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSArPSAxKQorICAgICAgICB7CisgICAgICAgICAgICBDb2xsYXRvciBjID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYyA9IENvbGxhdG9yLmdldEluc3RhbmNlKGxvY2FsZXNbaV0pOworICAgICAgICAgICAgICAgIGxvZ2xuKCJzb3VyY2U6ICIgKyBjLmdldFN0cmVuZ3RoKCkpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbXNnID0gIiI7CisgICAgICAgICAgICAgICAgbXNnICs9ICJDb3VsZCBub3QgY3JlYXRlIGNvbGxhdG9yIGZvciBsb2NhbGUgIjsKKyAgICAgICAgICAgICAgICBtc2cgKz0gbG9jYWxlc1tpXS5nZXREaXNwbGF5TmFtZSgpOworICAgICAgICAgICAgICAgIGVycmxuKG1zZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogUnVsZUJhc2VkQ29sbGF0b3Igbm90IHN1YmNsYXNzYWJsZQorICAgICAqIEBidWcgNDE0NjE2MAorICAgIC8vCisgICAgLy8gUnVsZUJhc2VkQ29sbGF0b3IgZG9lc24ndCB1c2UgY3JlYXRlQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGludGVybmFsbHkKKyAgICAvLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTQ2MTYwKCkgeworICAgICAgICAvLworICAgICAgICAvLyBVc2UgYSBjdXN0b20gY29sbGF0b3IgY2xhc3Mgd2hvc2UgY3JlYXRlQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yCisgICAgICAgIC8vIG1ldGhvZHMgaW5jcmVtZW50IGEgY291bnQuLi4uCisgICAgICAgIC8vICAgICAKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgZW5fdXMgPSAoUnVsZUJhc2VkQ29sbGF0b3IpIENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIE15NDE0NjE2MENvbGxhdG9yLmNvdW50ID0gMDsKKyAgICAgICAgTXk0MTQ2MTYwQ29sbGF0b3IgbWMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbWMgPSBuZXcgTXk0MTQ2MTYwQ29sbGF0b3IoZW5fdXMpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWxlZCB0byBjcmVhdGUgYSBNeTQxNDYxNjBDb2xsYXRvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBDb2xsYXRpb25LZXkga2V5ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGtleSA9IG1jLmdldENvbGxhdGlvbktleSgiMSIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWx1cmUgdG8gZ2V0IGEgQ29sbGF0aW9uS2V5IGZyb20gYSBNeTQxNDYxNjBDb2xsYXRvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoTXk0MTQ2MTYwQ29sbGF0b3IuY291bnQgPCAxKSB7CisgICAgICAgICAgICBlcnJsbigiTXk0MTQ2MTYwQ29sbGF0b3IuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIG5vdCBjYWxsZWQgZm9yIGdldENvbGxhdGlvbktleSIpOworICAgICAgICB9CisgICAgCisgICAgICAgIE15NDE0NjE2MENvbGxhdG9yLmNvdW50ID0gMDsKKyAgICAgICAgbWMuY29tcGFyZSgiMSIsICIyIik7CisgICAgCisgICAgICAgIGlmIChNeTQxNDYxNjBDb2xsYXRvci5jb3VudCA8IDEpIHsKKyAgICAgICAgICAgIGVycmxuKCJNeTQxNDYxNjBDb2xsYXRvci5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Igbm90IGNhbGxlZCBmb3IgY29tcGFyZSIpOworICAgICAgICB9CisgICAgfSovCit9CisKKy8qIFJ1bGVCYXNlZENvbGxhdG9yIG5vdCBzdWJjbGFzc2FibGUKKyAqIGNsYXNzIE15NDE0NjE2MENvbGxhdG9yIGV4dGVuZHMgUnVsZUJhc2VkQ29sbGF0b3IgeworICAgIHN0YXRpYyBpbnQgY291bnQgPSAwOworCisgICAgcHVibGljIE15NDE0NjE2MENvbGxhdG9yKFJ1bGVCYXNlZENvbGxhdG9yIHJiYykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyKHJiYy5nZXRSdWxlcygpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihTdHJpbmcgdGV4dCkgeworICAgICAgICBjb3VudCArPSAxOworICAgICAgICByZXR1cm4gc3VwZXIuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHRleHQpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3IgdGV4dCkgeworICAgICAgICBjb3VudCArPSAxOworICAgICAgICByZXR1cm4gc3VwZXIuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHRleHQpOworICAgIH0KK30KKyovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvblNwYW5pc2hUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uU3BhbmlzaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTkyNGQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvblNwYW5pc2hUZXN0LmphdmEKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogCisgKiAkRGF0ZTogCisgKiAkUmV2aXNpb246IAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2Mi4xIDogQ29sbGF0ZS9Db2xsYXRpb25TcGFuaXNoVGVzdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvZXNjb2xsLmNwcAorICoqLworIAorIHBhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisgCisgaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CisgaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKKyBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKyAKKyBwdWJsaWMgY2xhc3MgQ29sbGF0aW9uU3BhbmlzaFRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBDb2xsYXRpb25TcGFuaXNoVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgY2hhcltdW10gdGVzdFNvdXJjZUNhc2VzID0geworICAgICAgICB7MHg2MSwgMHg2YywgMHg2OSwgMHg2MSwgMHg3M30sCisgICAgICAgIHsweDQ1LCAweDZjLCAweDZjLCAweDY5LCAweDZmLCAweDc0fSwKKyAgICAgICAgezB4NDgsIDB4NjUsIDB4NmMsIDB4NmMsIDB4NmZ9LAorICAgICAgICB7MHg2MSwgMHg2MywgMHg0OCwgMHg2M30sCisgICAgICAgIHsweDYxLCAweDYzLCAweDYzfSwKKyAgICAgICAgezB4NjEsIDB4NmMsIDB4NjksIDB4NjEsIDB4NzN9LAorICAgICAgICB7MHg2MSwgMHg2MywgMHg0OCwgMHg2M30sCisgICAgICAgIHsweDYxLCAweDYzLCAweDYzfSwKKyAgICAgICAgezB4NDgsIDB4NjUsIDB4NmMsIDB4NmMsIDB4NmZ9LAorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0VGFyZ2V0Q2FzZXMgPSB7CisgICAgICAgIHsweDYxLCAweDZjLCAweDZjLCAweDY5LCAweDYxLCAweDczfSwKKyAgICAgICAgezB4NDUsIDB4NmQsIDB4NjksIDB4NmYsIDB4NzR9LAorICAgICAgICB7MHg2OCwgMHg2NSwgMHg2YywgMHg2YywgMHg0Zn0sCisgICAgICAgIHsweDYxLCAweDQzLCAweDQ4LCAweDYzfSwKKyAgICAgICAgezB4NjEsIDB4NDMsIDB4NDgsIDB4NjN9LAorICAgICAgICB7MHg2MSwgMHg2YywgMHg2YywgMHg2OSwgMHg2MSwgMHg3M30sCisgICAgICAgIHsweDYxLCAweDQzLCAweDQ4LCAweDYzfSwKKyAgICAgICAgezB4NjEsIDB4NDMsIDB4NDgsIDB4NjN9LAorICAgICAgICB7MHg2OCwgMHg2NSwgMHg2YywgMHg2YywgMHg0Zn0sCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGludFtdIHJlc3VsdHMgPSB7CisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgMSwKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAvLyB0ZXN0IHByaW1hcnkgPiA1CisgICAgICAgIC0xLAorICAgICAgICAwLAorICAgICAgICAtMSwKKyAgICAgICAgMAorICAgIH07CisgICAgCisgICAgLy9zdGF0aWMgcHVibGljIENvbGxhdG9yIG15Q29sbGF0aW9uID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgiZXMiLCAiRVMiKSk7CisgICAgCisgICAgcHJpdmF0ZSBDb2xsYXRvciBteUNvbGxhdGlvbiA9IG51bGw7CisgICAgCisgICAgcHVibGljIENvbGxhdGlvblNwYW5pc2hUZXN0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbXlDb2xsYXRpb24gPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJlcyIsICJFUyIpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgU1BBTklTSCBsb2NhbGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0VGVydGlhcnkoKXsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBteUNvbGxhdGlvbi5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA1IDsgaSsrKSB7CisgICAgICAgICAgICBkb1Rlc3QodGVzdFNvdXJjZUNhc2VzW2ldLCB0ZXN0VGFyZ2V0Q2FzZXNbaV0sIHJlc3VsdHNbaV0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RQcmltYXJ5KCl7CisgICAgICAgIGludCBpOworICAgICAgICBteUNvbGxhdGlvbi5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgZm9yIChpID0gNTsgaSA8IDk7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBhbWluIHRlc3Qgcm91dGluZSwgdGVzdHMgcnVsZXMgc3BlY2lmaWMgdG8gdGhlIHNwYW5pc2ggbG9jYWxlCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdChjaGFyW10gc291cmNlLCBjaGFyW10gdGFyZ2V0LCBpbnQgcmVzdWx0KSB7CisgICAgICAgIFN0cmluZyBzID0gbmV3IFN0cmluZyhzb3VyY2UpOworICAgICAgICBTdHJpbmcgdCA9IG5ldyBTdHJpbmcodGFyZ2V0KTsKKyAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQgPSBteUNvbGxhdGlvbi5jb21wYXJlKHMsIHQpOworICAgICAgICBDb2xsYXRpb25LZXkgc29ydEtleTEsIHNvcnRLZXkyOworICAgICAgICBzb3J0S2V5MSA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleShzKTsKKyAgICAgICAgc29ydEtleTIgPSBteUNvbGxhdGlvbi5nZXRDb2xsYXRpb25LZXkodCk7CisgICAgICAgIGludCBrZXlSZXN1bHQgPSBzb3J0S2V5MS5jb21wYXJlVG8oc29ydEtleTIpOworICAgICAgICByZXBvcnRDUmVzdWx0KHMsIHQsIHNvcnRLZXkxLCBzb3J0S2V5MiwgY29tcGFyZVJlc3VsdCwga2V5UmVzdWx0LCBjb21wYXJlUmVzdWx0LCByZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApIHsKKyAgICAgICAgaWYgKGV4cGVjdGVkUmVzdWx0IDwgLTEgfHwgZXhwZWN0ZWRSZXN1bHQgPiAxKSB7CisgICAgICAgICAgICBlcnJsbigiKioqKiogaW52YWxpZCBjYWxsIHRvIHJlcG9ydENSZXN1bHQgKioqKiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBvazEgPSAoY29tcGFyZVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2syID0gKGtleVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2szID0gKGluY1Jlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG9rMSAmJiBvazIgJiYgb2szICYmICFpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgcmV0dXJuOyAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc0V4cGVjdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgU3RyaW5nIHNSZXN1bHQgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGNvbXBhcmVSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgc0V4cGVjdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoZXhwZWN0ZWRSZXN1bHQsIHNFeHBlY3QpOworICAgICAgICAgICAgaWYgKG9rMSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworCisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChpbmNSZXN1bHQsIHNSZXN1bHQpOworCisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIGFwcGVuZENvbXBhcmVSZXN1bHQoaW50IHJlc3VsdCwgU3RyaW5nIHRhcmdldCl7CisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiTEVTUyI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiRVFVQUwiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkdSRUFURVIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGh1aCA9ICI/IjsKKyAgICAgICAgICAgIHRhcmdldCArPSBodWggKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHByZXR0aWZ5KENvbGxhdGlvbktleSBzb3VyY2VLZXkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGJ5dGVbXSBieXRlcz0gc291cmNlS2V5LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIFN0cmluZyB0YXJnZXQgPSAiWyI7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGFyZ2V0ICs9IEludGVnZXIudG9IZXhTdHJpbmcoYnl0ZXNbaV0pOworICAgICAgICAgICAgdGFyZ2V0ICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gIl0iOworICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25UZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTU2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzIwIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvblRlc3QuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzEwLzA4IDIxOjUyOjIzICQKKyAqICRSZXZpc2lvbjogMS43ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNvbGxhdG9yOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuTW9kdWxlVGVzdDsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlJ1bGVCYXNlZENvbGxhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQ29sbGF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5Db2xsYXRpb25LZXk7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuTG9jYWxlVXRpbGl0eTsKKworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworcHVibGljIGNsYXNzIENvbGxhdGlvblRlc3QgZXh0ZW5kcyBNb2R1bGVUZXN0IAoreworICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiAKKyAgICB7CisgICAgICAgIG5ldyBDb2xsYXRpb25UZXN0KCkucnVuKGFyZ3MpOworICAgICAgICAvKiBDb2xsYXRpb25UZXN0IHRlc3QgPSBuZXcgQ29sbGF0aW9uVGVzdCgpOworICAgICAgICBpZiAodGVzdC52YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICB0ZXN0LlRlc3RDSWdub3JhYmxlQ29udHJhY3Rpb24oKTsKKyAgICAgICAgfSovCisgICAgfQorCisgICAgcHVibGljIENvbGxhdGlvblRlc3QoKSB7CisgICAgICAgIHN1cGVyKCJwcm9jZXNzTW9kdWxlcyIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NNb2R1bGVzKCkgeworICAgICAgICB3aGlsZSAobmV4dFNldHRpbmdzKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NUZXN0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyBtX3NlcXVlbmNlXzsKKyAgICBwcml2YXRlIGludCBtX3NlcXVlbmNlSW5kZXhfOworICAgIHByaXZhdGUgU3RyaW5nIG1fc291cmNlXzsKKyAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtX3RhcmdldF8gPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgcHJpdmF0ZSBpbnQgbV9uZXh0UmVsYXRpb25fOworICAgIHByaXZhdGUgaW50IG1fcmVsYXRpb25fOworICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NUZXN0KCkgeworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2wgPSBudWxsOworICAgICAgICAvLyBvayBpIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlIHNpbmNlIGl0IHNlZW1zIGxpa2Ugd2UgY2FuIGhhdmUKKyAgICAgICAgLy8gbXVsdGlwbGUgbG9jYWxlcyBmb3IgZWFjaCB0ZXN0IAorICAgICAgICBTdHJpbmcgbG9jYWxlID0gc2V0dGluZ3MuZ2V0U3RyaW5nKCJUZXN0TG9jYWxlIik7CisgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gdGhpcyBpcyBhIGNhc2Ugd2hlcmUgd2UgaGF2ZSBsb2NhbGUgCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIExvY2FsZSBsID0gTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShsb2NhbGUpOworICAgICAgICAgICAgICAgIGNvbCA9IChSdWxlQmFzZWRDb2xsYXRvcilDb2xsYXRvci5nZXRJbnN0YW5jZShsKTsgICAgICAgICAgCisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBjcmVhdGluZyBjb2xsYXRvciBmb3IgbG9jYWxlICIgKyBsb2NhbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nbG4oIlRlc3RpbmcgY29sbGF0b3IgZm9yIGxvY2FsZSAlc1xuIiArIGxvY2FsZSk7CisgICAgICAgICAgICBwcm9jZXNzQ29sbGF0b3JUZXN0cyhjb2wpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBydWxlcyA9IHNldHRpbmdzLmdldFN0cmluZygiUnVsZXMiKTsKKyAgICAgICAgLy8gb2sgaSBoYXZlIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBpdCBzZWVtcyBsaWtlIHdlIGNhbiBoYXZlCisgICAgICAgIC8vIG11bHRpcGxlIHJ1bGVzIGZvciBlYWNoIHRlc3QgCisgICAgICAgIGlmIChydWxlcyAhPSBudWxsKSB7CisgICAgICAgICAgICAvLyBoZXJlIHdlIGRlYWwgd2l0aCBydWxlcworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb2wgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXMpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgY3JlYXRpbmcgY29sbGF0b3IgZm9yIHJ1bGVzICIgKyBydWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9jZXNzQ29sbGF0b3JUZXN0cyhjb2wpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzQ29sbGF0b3JUZXN0cyhSdWxlQmFzZWRDb2xsYXRvciBjb2wpIAorICAgIHsKKyAgICAgICAgCisgICAgICAgIC8vIG9rIGkgaGF2ZSB0byBiZSBjYXJlZnVsIGhlcmUgc2luY2UgaXQgc2VlbXMgbGlrZSB3ZSBjYW4gaGF2ZQorICAgICAgICAvLyBtdWx0aXBsZSBydWxlcyBmb3IgZWFjaCB0ZXN0IAorICAgICAgICBTdHJpbmcgYXJndW1lbnRzID0gc2V0dGluZ3MuZ2V0U3RyaW5nKCJBcmd1bWVudHMiKTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CisgICAgICAgICAgICBwcm9jZXNzQXJndW1lbnRzKGNvbCwgYXJndW1lbnRzKTsKKyAgICAgICAgfQorICAgICAgICBwcm9jZXNzUmVhZHlDb2xsYXRvcihjb2wpOyAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKiogCisgICAgICogUmVhZHMgdGhlIG9wdGlvbnMgc3RyaW5nIGFuZCBzZXRzIGFwcHJvcHJpYXRlIGF0dHJpYnV0ZXMgaW4gY29sbGF0b3IgCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NBcmd1bWVudHMoUnVsZUJhc2VkQ29sbGF0b3IgY29sLCBTdHJpbmcgYXJndW1lbnQpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8IGFyZ3VtZW50Lmxlbmd0aCgpKSB7IAorICAgICAgICAgICAgaWYgKCFVQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShhcmd1bWVudC5jaGFyQXQoaSkpKSB7IAorICAgICAgICAgICAgICAgIC8vIGVhdCB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICsrOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChpIDwgYXJndW1lbnQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIC8vIHNraXAgb3BlbmluZyAnWycKKyAgICAgICAgICAgIGlmIChhcmd1bWVudC5jaGFyQXQoaSkgPT0gJ1snKSB7CisgICAgICAgICAgICAgICAgaSArKzsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgaW4gY29sbGF0aW9uIGFyZ3VtZW50cywgbWlzc2luZyBbIik7IC8vIG5vIG9wZW5pbmcgJ1snCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgdmFsdWUgPSBhcmd1bWVudC5pbmRleE9mKCcgJywgaSk7CisgICAgICAgICAgICBTdHJpbmcgb3B0aW9uID0gYXJndW1lbnQuc3Vic3RyaW5nKGksIHZhbHVlKTsKKyAgICAgICAgICAgIGkgPSBhcmd1bWVudC5pbmRleE9mKCddJywgdmFsdWUpOworICAgICAgICAgICAgU3RyaW5nIG9wdGlvbnZhbHVlID0gYXJndW1lbnQuc3Vic3RyaW5nKHZhbHVlICsgMSwgaSk7CisgICAgICAgICAgICBpICsrOworICAgICAgICAgICAgLy8gc29tZSBvcHRpb25zIGFyZSBub3QgYWRkZWQgYmVjYXVzZSB0aGV5IGhhdmUgbm8gcHVibGljIGFwaXMgeWV0CisgICAgICAgICAgICAvLyBUT0RPIGFkZCB0aGUgcmVzdCBvZiB0aGUgb3B0aW9ucworICAgICAgICAgICAgaWYgKG9wdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJhbHRlcm5hdGUiKSkgeworICAgICAgICAgICAgICAgIGlmIChvcHRpb252YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJub24taWdub3JhYmxlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29sLnNldEFsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb2wuc2V0QWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkKHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbi5lcXVhbHMoInN0cmVuZ3RoIikpIHsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9udmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgiMSIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbC5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9udmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgiMiIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbC5zZXRTdHJlbmd0aChDb2xsYXRvci5TRUNPTkRBUlkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvcHRpb252YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCIzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29sLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9udmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgiNCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbC5zZXRTdHJlbmd0aChDb2xsYXRvci5RVUFURVJOQVJZKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc1JlYWR5Q29sbGF0b3IoUnVsZUJhc2VkQ29sbGF0b3IgY29sKSB7CisgICAgICAgd2hpbGUgKG5leHRDYXNlKCkpIHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgdmVyeSBzYWQsIGl0IGlzIGFsaXR0bGUgYXdrd2FyZCB0byB3cml0ZSB0aGUgYyByYiAKKyAgICAgICAgICAgIC8vIHRvIGhhdmUgYW4gb2JqZWN0IGFycmF5IG9mIGFuIG9iamVjdCBhcnJheSBvZiBhIDEgZWxlbWVudCAKKyAgICAgICAgICAgIC8vIHN0cmluZyBhcnJheS4gc28gbm93IHdlIGhhdmUgYW4gb2JqZWN0IGFycmF5IG9mIGEgMSBlbGVtZW50IAorICAgICAgICAgICAgLy8gb2JqZWN0IGFycmF5IG9mIHN0cmluZyBhcnJheXMuCisgICAgICAgICAgICBTdHJpbmcgc2VxdWVuY2VbXSA9IHRlc3RjYXNlLmdldFN0cmluZ0FycmF5KCJzZXF1ZW5jZSIpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXF1ZW5jZS5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBwcm9jZXNzU2VxdWVuY2UoY29sLCBzZXF1ZW5jZVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc1NlcXVlbmNlKFJ1bGVCYXNlZENvbGxhdG9yIGNvbCwgU3RyaW5nIHNlcXVlbmNlKSB7CisgICAgICAgIC8vIFRPRE86IGhhdmUgYSBzbWFydGVyIHRlc3RlciB0aGF0IHJlbWVtYmVycyB0aGUgc2VxdWVuY2UgYW5kIGVuc3VyZXMgCisgICAgICAgIC8vIHRoYXQgdGhlIGNvbXBsZXRlIHNlcXVlbmNlIGlzIGluIG9yZGVyLiBUaGF0IGlzIHdoeSBJIGhhdmUgbWFkZSBhIAorICAgICAgICAvLyBjb25zdHJhaW50IGluIHRoZSBzZXF1ZW5jZSBmb3JtYXQuICAgICAKKyAgICAgICAgbV9zZXF1ZW5jZV8gPSBzZXF1ZW5jZTsKKyAgICAgICAgbV9zZXF1ZW5jZUluZGV4XyA9IDA7CisgICAgICAgIG1fbmV4dFJlbGF0aW9uXyA9IC0xOworICAgICAgICBtX3RhcmdldF8uZGVsZXRlKDAsIG1fdGFyZ2V0Xy5sZW5ndGgoKSk7CisgICAgICAgIFZlY3RvciB2ZWN0b3IgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIGludCBsYXN0c21hbGxlcnRoYW5pbmRleCA9IDA7CisgICAgICAgIHdoaWxlIChnZXROZXh0SW5TZXF1ZW5jZSgpKSB7ICAgIAorICAgICAgICAgICAgU3RyaW5nIHRhcmdldCA9IG1fdGFyZ2V0Xy50b1N0cmluZygpOworICAgICAgICAgICAgZG9UZXN0KGNvbCwgbV9zb3VyY2VfLCB0YXJnZXQsIG1fcmVsYXRpb25fKTsKKyAgICAgICAgICAgIGludCB2c2l6ZSA9IHZlY3Rvci5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gdnNpemUgLSAxOyBpID49IDA7IGkgLS0pIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlID0gKFN0cmluZyl2ZWN0b3IuZWxlbWVudEF0KGkpOyAKKyAgICAgICAgICAgICAgICBpZiAoaSA+IGxhc3RzbWFsbGVydGhhbmluZGV4KSB7ICAKKyAgICAgICAgICAgICAgICAgICAgZG9UZXN0KGNvbCwgc291cmNlLCB0YXJnZXQsIG1fcmVsYXRpb25fKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRvVGVzdChjb2wsIHNvdXJjZSwgdGFyZ2V0LCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmVjdG9yLmFkZEVsZW1lbnQodGFyZ2V0KTsKKyAgICAgICAgICAgIGlmIChtX3JlbGF0aW9uXyA8IDApIHsKKyAgICAgICAgICAgICAgICBsYXN0c21hbGxlcnRoYW5pbmRleCA9IHZzaXplIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKiogCisgICAgICogUGFyc2VzIHRoZSBzZXF1ZW5jZSB0byBiZSB0ZXN0ZWQgCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGdldE5leHRJblNlcXVlbmNlKCkgeworICAgICAgICBpZiAobV9zZXF1ZW5jZUluZGV4XyA+PSBtX3NlcXVlbmNlXy5sZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sZWFuIHF1b3RlZCA9IGZhbHNlOworICAgICAgICBib29sZWFuIHF1b3RlZHNpbmdsZSA9IGZhbHNlOworICAgICAgICBib29sZWFuIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgaW50IGkgPSBtX3NlcXVlbmNlSW5kZXhfOworICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgbV9zb3VyY2VfID0gbV90YXJnZXRfLnRvU3RyaW5nKCk7CisgICAgICAgIG1fcmVsYXRpb25fID0gbV9uZXh0UmVsYXRpb25fOworICAgICAgICBtX3RhcmdldF8uZGVsZXRlKDAsIG1fdGFyZ2V0Xy5sZW5ndGgoKSk7CisgICAgICAgIHdoaWxlIChpIDwgbV9zZXF1ZW5jZV8ubGVuZ3RoKCkgJiYgIWRvbmUpIHsKKyAgICAgICAgICAgIGludCBjaCA9IFVURjE2LmNoYXJBdChtX3NlcXVlbmNlXywgaSk7CisgICAgICAgICAgICBpZiAoVUNoYXJhY3Rlci5pc1N1cHBsZW1lbnRhcnkoY2gpKSB7CisgICAgICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaSArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcXVvdGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAzQyA6IC8vIDwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbmV4dFJlbGF0aW9uXyA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwM0QgOiAvLyA9IAorICAgICAgICAgICAgICAgICAgICAgICAgbV9uZXh0UmVsYXRpb25fID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMDNFIDogLy8gPgorICAgICAgICAgICAgICAgICAgICAgICAgbV9uZXh0UmVsYXRpb25fID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMDI3IDogLy8gJyB2ZXJ5IGJhc2ljIHF1b3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZWRzaW5nbGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDA1YyA6IC8vIFwgc2luZ2xlIHF1b3RlCisgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVkc2luZ2xlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaW5zZXJ0KG1fdGFyZ2V0Xywgb2Zmc2V0LCBjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVUNoYXJhY3Rlci5pc1N1cHBsZW1lbnRhcnkoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAweDAwMjcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaW5zZXJ0KG1fdGFyZ2V0Xywgb2Zmc2V0LCBjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzU3VwcGxlbWVudGFyeShjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZWRzaW5nbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHF1b3RlZCA9PSB0cnVlKSB7CisgICAgICAgICAgICAgIGVycmxuKCJRdW90ZSBpbiBzZXF1ZW5jZSBub3QgY2xvc2VkISIpOworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgCisgICAgICAgICAgbV9zZXF1ZW5jZUluZGV4XyA9IGk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBkb1Rlc3RWYXJpYW50KFJ1bGVCYXNlZENvbGxhdG9yIG15Q29sbGF0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0LCBpbnQgcmVzdWx0KQorICAgIHsKKyAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQgID0gbXlDb2xsYXRpb24uY29tcGFyZShzb3VyY2UsIHRhcmdldCk7CisgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ICE9IHJlc3VsdCkgeworICAgICAgICAgICAgZXJybG4oIkNvbXBhcmluZyBcIiIgKyBVdGlsaXR5LmhleChzb3VyY2UpICsgIlwiIHdpdGggXCIiIAorICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleCh0YXJnZXQpICsgIlwiIGV4cGVjdGVkICIgKyByZXN1bHQgCisgICAgICAgICAgICAgICAgICArICIgYnV0IGdvdCAiICsgY29tcGFyZVJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgQ29sbGF0aW9uS2V5IHNzayA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleShzb3VyY2UpOworICAgICAgICBDb2xsYXRpb25LZXkgdHNrID0gbXlDb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHRhcmdldCk7CisgICAgICAgIGNvbXBhcmVSZXN1bHQgPSBzc2suY29tcGFyZVRvKHRzayk7CisgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ICE9IHJlc3VsdCkgeworICAgICAgICAgICAgZXJybG4oIkNvbXBhcmluZyBzb3J0a2V5cyBvZiBcIiIgKyBVdGlsaXR5LmhleChzb3VyY2UpICsgIlwiIHdpdGggXCIiIAorICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleCh0YXJnZXQpICsgIlwiIGV4cGVjdGVkICIgKyByZXN1bHQgCisgICAgICAgICAgICAgICAgICArICIgYnV0IGdvdCAiICsgY29tcGFyZVJlc3VsdCk7CisgICAgICAgIH0gCisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoUnVsZUJhc2VkQ29sbGF0b3IgbXlDb2xsYXRpb24sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQsIGludCByZXN1bHQpCisgICAgeworICAgICAgICBkb1Rlc3RWYXJpYW50KG15Q29sbGF0aW9uLCBzb3VyY2UsIHRhcmdldCwgcmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7CisgICAgICAgICAgICBkb1Rlc3RWYXJpYW50KG15Q29sbGF0aW9uLCB0YXJnZXQsIHNvdXJjZSwgcmVzdWx0KTsgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBkb1Rlc3RWYXJpYW50KG15Q29sbGF0aW9uLCB0YXJnZXQsIHNvdXJjZSwgMSk7IAorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9UZXN0VmFyaWFudChteUNvbGxhdGlvbiwgdGFyZ2V0LCBzb3VyY2UsIC0xKTsgCisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uVGVzdERhdGEuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25UZXN0RGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZjc4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uVGVzdERhdGEuamF2YQpAQCAtMCwwICsxLDQ3OSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9BdHRpYy9Db2xsYXRpb25UZXN0RGF0YS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDkvMDQgMDE6Mzc6MjYgJAorICogJFJldmlzaW9uOiAxLjUgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIENvbGxhdGlvblRlc3REYXRhIGV4dGVuZHMgSUNVTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHB1YmxpYyBDb2xsYXRpb25UZXN0RGF0YSgpIHsKKyAgICAgICAgICBzdXBlci5jb250ZW50cyA9IGRhdGE7CisgICAgfQorICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGRhdGEgPSBuZXcgT2JqZWN0W11bXSB7IAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIkluZm8iLAorICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGxvY2FsZSBiYXNlZCBjb2xsYXRpb24gdGVzdCBmb3IgRGFuaXNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlYWRlcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UiLAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvbmdEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgc2VwYXJhdGUgdGVzdHMgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRhaW5pbmcgdGVzdCBkYXRhIGZvciB2YXJpb3VzIGxvY2FsZXMuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVhY2ggZW50cnkgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzOiBUZXN0IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2FsZSAtIHRoZSBsb2NhbGUgdGhhdCB3ZSBzaG91bGQgaW5zdGFuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpYXRlIGNvbGxhdG9yIHdpdGguQXJndW1lbnRTdHJlbmd0aCAtIHN0IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbmd0aCBvZiBjb2xsYXRvclRlc3REYXRhIC0gc2V0IG9mIHRlc3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhc2VzLCB3aGljaCBhcmUgc2VxdWVuY2VzIG9mIHN0cmluZ3MgdGhhIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInQgd2lsbCBiZSBwYXJzZWRTZXF1ZW5jZXMgbXVzdCBub3QgY2hhbmdlIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgc2lnbiBvZiByZWxhdGlvbiwgaS5lLiB3ZSBjYW4gb25seSBoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF2ZSA8IGFuZCA9IG9yPiBhbmQgPSBpbiBzaW5nbGUgc2VxdWVuY2UuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBDYW5ub3QgbWl4IDwgYW5kID4gaW4gdGhlIHNhbWUgc2VxdWVuY2UuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBXaGl0ZXNwYWNlIGlzaXMgaWdub3JlZCB1bmxlc3MgcXVvdGVkLiIsCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiVGVzdERhdGEiLAorICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdENJZ25vcmFibGVDb250cmFjdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXNlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuaml2YT1uXHVEODM0XHVERDY1amkiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YT1uXHVEODM0XHVERDc5aml2YT0iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuXHUwMDAwXHUwMDAwXHUwMDAwamkiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YT1uXHUwMDAwaml2YT1uXHVEODAwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaml2YT1uXHVGRkZFaml2YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGp1YmF2PWxcdTAwMDBqdWJhdj1sIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVEODM0XHVERDc5anViYXY9bFx1MDAwMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAwMFx1MDAwMGp1YmF2PWxcdUQ4MDAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqdWJhdj1sXHVGRkZFanViYXY9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJManViYXY9TFx1MDAwMGp1YmF2PUwiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdUQ4MzRcdURENzlqdWJhdj1MXHUwMDAwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDAwXHUwMDAwanViYXY9TFx1RDgwMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImp1YmF2PUxcdUZGRkVqdWJhdiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGVja3Mgd2hldGhlciBjb21wbGV0ZWx5IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWdub3JhYmxlIGNvZGUgcG9pbnRzIGFyIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlIHNraXBwZWQgaW4gY29udHJhY3Rpb25zIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNldHRpbmdzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RMb2NhbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUnVsZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiYgTCA8IGxqLCBMaiA8PDwgTEomICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk4gPCBuaiwgTmogPDw8IE5KICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdENJZ25vcmFibGVQcmVmaXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FzZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMEExXHUzMEZDPSBcdTMwQTFcdURCNDAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdURDMzBcdTMwRkM9IFx1MzBBMVx1RDgwMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MzBGQz0gXHUzMEExXHVGRkZFXHUzMEZDIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPSBcdTMwQTFcdUQ4MzRcdURENzlcdTMwRkMiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9IFx1MzBBMVx1MDAwMFx1MDAwMFx1MDAwMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MzBGQz0gXHUzMEExXHUwMDAwXHUzMEZDIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPSBcdTMwQTFcdTMwRkM9IFx1MzBBMSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAwMFx1MDU5QVx1MzBGQz0gXHUzMEExIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMEZDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGVja3Mgd2hldGhlciBjb21wbGV0ZWx5IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWdub3JhYmxlIGNvZGUgcG9pbnRzIGFyIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlIHNraXBwZWQgaW4gcHJlZml4IHByb2NlIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzc2luZy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2V0dGluZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExvY2FsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiamEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3ROU2hpZnRlZElnbm9yYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXNlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhJyAnYjxBJyAnYjxhJyAnXHUwMzAxIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYjxBJyAnXHUwMzAxYjxhJyAnXHUwMzAwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYjxBJyAnXHUwMzAwYjxhX2I8QV9iIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGFfXHUwMzAxYjxBX1x1MDMwMWI8IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYV9cdTAzMDBiPEFfXHUwMzAwYjxhIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMzAxYjxBXHUwMzAxYjxhXHUwMzAwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYjxBXHUwMzAwYjwiLAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZXcgVUNBIHN0YXRlcyB0aGF0IHByaW1hIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyeSBpZ25vcmFibGVzIHNob3VsZCBiZSBjIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbXBsZXRlbHkgaWdub3JhYmxlIHdoZW4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dpbmcgYSBzaGlmdGVkIGNvZGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb2ludC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2V0dGluZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbYWx0ZXJuYXRlIG5vbi1pZ25vcmEiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJibGVdW3N0cmVuZ3RoIDNdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RMb2NhbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvb3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RTYWZlU3Vycm9nYXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXNlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhPHhcdUQ4MDBcdURDMDBiIiwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSXQgdHVybmVkIG91dCB0aGF0IHN1cnJvZyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXRlcyB3ZXJlIG5vdCBza2lwcGVkIHBybyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVybHkgd2hlbiBpdGVyYXRpbmcgYmFjayIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FyZHMgaWYgdGhleSB3ZXJlIGluIHRoZSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG1pZGRsZSBvZiBhIGNvbnRyYWN0aW9uLiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFRoaXMgdGVzdCBhc3N1cmVzIHRoYXQgdCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlzIGlzIGZpeGVkLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSdWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJmEgPCB4XHVEODAwXHVEQzAwYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdGVzdCBkb2VzIG5vdCBwYXNzIGluIEphdmEgeWV0CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RTaGlmdGVkSWdub3JhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEnICdiPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImEnICdcdTAzMDBiPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImEnICdcdTAzMDFiPCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImFfYj0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJhX1x1MDMwMGI9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiYV9cdTAzMDFiPCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkEnICdiPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkEnICdcdTAzMDBiPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkEnICdcdTAzMDFiPCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkFfYj0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJBX1x1MDMwMGI9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiQV9cdTAzMDFiPCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImFcdTAzMDFiPCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkFcdTAzMDFiPCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImFcdTAzMDBiPCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkFcdTAzMDBiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ldyBVQ0Egc3RhdGVzIHRoYXQgcHJpbWEiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ5IGlnbm9yYWJsZXMgc2hvdWxkIGJlIGMiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9tcGxldGVseSBpZ25vcmFibGUgd2hlbiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd2luZyBhIHNoaWZ0ZWQgY29kZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvaW50LiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlthbHRlcm5hdGUgc2hpZnRlZF1bcyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyZW5ndGggNF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExvY2FsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAiZGFfVGVzdFByaW1hcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0UHJpbWFyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXNlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMdmk9THdpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMXHUwMEU0dmk8TFx1MDBGNndpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMXHUwMEZDYmVjaz1MeWJlY2siLAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIHRlc3QgZ29lcyB0aHJvdWdoIHByIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbWFyeSBzdHJlbmd0aCBjYXNlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltzdHJlbmd0aCAxXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0TG9jYWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAiZGFfVGVzdFRlcnRpYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFRlcnRpYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkx1YzxsdWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsdWNrPExcdTAwRkNiZWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMXHUwMEZDYmVjaz5seWJlY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxcdTAwRTR2aTxMXHUwMEY2d2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxcdTAwRjZ3dzxtYXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBL1M8QU5EUkU8QU5EUlx1MDBDOTwiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBTkRSRUFTPEFTPENBPFx1MDBDN0EiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8Q0I8XHUwMEM3QzxELlMuQi48REEiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8REI8RFNCPERTQzxcdTAwRDBBPFx1MDBEMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkM8RUtTVFJBX0FSQkVKREU8RUtTVCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJBQlVEMDxIXHUwMEQ4U1Q8SEFBRyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxIXHUwMEM1TkRCT0c8SEFBTkRWXHUwMEM2IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUktTQkFOS0VOPGthcmw8S2FybDwnIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTklFTFMgSlx1MDBEOFJHRU4nPE5JIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRUxTLUpcdTAwRDhSR0VOPE5JRUxTIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU48J1JcdTAwQzlFLCBBJzwnUkVFIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBCJzwnUlx1MDBDOUUsIEwnPCdSIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRUUsIFYnPCdTQ0hZVFQsIEInPCdTIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ0hZVFQsIEgnPCdTQ0hcdTAwRENUIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVCwgSCc8J1NDSFlUVCwgTCc8J1NDIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFx1MDBEQ1RULCBNJzxTUzxcdTAwREYiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8U1NBPCdTVE9SRSBWSUxETU9TRSciICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8U1RPUkVLXHUwMEM2UjA8J1NUT1IiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNIFBFVEVSU0VOJzxTVE9STUxZPFQiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIT1JWQUxEPFRIT1JWQVJEVVI8VEgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZR0VTRU48XHUwMEZFT1JWQVJcdTAwRDAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVUjwnVkVTVEVSR1x1MDBDNVJELCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBJzwnVkVTVEVSR0FBUkQsIEEnPCciICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWRVNURVJHXHUwMEM1UkQsIEInPFx1MDBDNiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMRTxcdTAwQzRCTEU8XHUwMEQ4QiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVSRzxcdTAwRDZCRVJHIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRlcmU8Y2hhcXVlPGNoZW1pbjwiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3RlPGNvdFx1MDBFOTxjXHUwMEY0IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGU8Y1x1MDBGNHRcdTAwRTk8XHUwMTBEIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidVx1MDEwRFx1MDExM3Q8Q3plY2g8IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlcdTAxNjFhPGlyZGlzY2g8bGllIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpcmU8bGxhbWE8bFx1MDBGNXVnIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxcdTAwRjJ6YTxsdVx1MDEwRDxsIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidWNrPExcdTAwRkNiZWNrPGx5ZTxsIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMEU0dmk8TFx1MDBGNndlbjxtIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMEUwXHUwMTYxdGE8bVx1MDBFRSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInI8bXluZGlnPE1cdTAwRTRubmVyPCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1cdTAwRjZjaHRlbjxwaVx1MDBGMSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImE8cGludDxweWxvbjxcdTAxNjFcdTAwRTAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYW48c2F2b2lyPFx1MDE2MGVyYlx1MDE2QiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhPFNpZXRsYTxcdTAxNUJsdWI8cyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVidGxlPHN5bWJvbDxzXHUwMEU0bSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRsaWNoPHdhZmZsZTx2ZXJrZWhydCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx3b29kPHZveDx2XHUwMEU0Z2E8eSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuPHl1YW48eXVjY2E8XHUwMTdFYSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImw8XHUwMTdFZW5hPFx1MDE3RGVuXHUwMTEzIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmE8em9vMDxadmllZHJpamE8Wlx1MDBGQyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJpY2g8enlzazA8XHUwMEU0bmRlciIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImUiLAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIHRlc3QgZ29lcyB0aHJvdWdoIHRlIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydGlhcnkgc3RyZW5ndGggY2FzZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2V0dGluZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbc3RyZW5ndGggM10iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExvY2FsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvblRoYWlUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uVGhhaVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQ4Yjg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0NvbGxhdGlvblRoYWlUZXN0LmphdmEKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogCisgKiAkRGF0ZTogCisgKiAkUmV2aXNpb246IAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2Mi4xIDogY29sbGF0ZS9Db2xsYXRpb25SZWdyZXNzaW9uVGVzdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvcmVnY29sbC5jcHAKKyAqKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGNsYXNzIENvbGxhdGlvblRoYWlUZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworICAgIAorICAgIGZpbmFsIGludCBNQVhfRkFJTFVSRVNfVE9fU0hPVyA9IDg7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBDb2xsYXRpb25UaGFpVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogT2RkIGNvcm5lciBjb25kaXRpb25zIHRha2VuIGZyb20gIkhvdyB0byBTb3J0IFRoYWkgV2l0aG91dCBSZXdyaXRpbmcgU29ydCIsCisgICAgICogYnkgRG91ZyBDb29wZXIsIGh0dHA6Ly9zZWFzcmMudGgubmV0L3BhcGVyL3RoYWlzb3J0LnppcAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDb3JuZXJDYXNlcygpIHsKKyAgICAgICAgU3RyaW5nIFRFU1RTW10gPSB7CisgICAgICAgICAgICAvLyBTaG9ydGVyIHdvcmRzIHByZWNlZGUgbG9uZ2VyCisgICAgICAgICAgICAiXHUwZTAxIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwiLCAgICAiXHUwZTAxXHUwZTAxIiwKKyAgICAKKyAgICAgICAgICAgIC8vIFRvbmUgbWFya3MgYXJlIGNvbnNpZGVyZWQgYWZ0ZXIgbGV0dGVycyAoaS5lLiBhcmUgcHJpbWFyeSBpZ25vcmFibGUpCisgICAgICAgICAgICAiXHUwZTAxXHUwZTMyIiwgICAgICAgICAgICAgICAgICAgICAgICAiPCIsICAgICJcdTBlMDFcdTBlNDlcdTBlMzIiLAorICAgIAorICAgICAgICAgICAgLy8gZGl0dG8gZm9yIG90aGVyIG92ZXItbWFya3MKKyAgICAgICAgICAgICJcdTBlMDFcdTBlMzIiLCAgICAgICAgICAgICAgICAgICAgICAgICI8IiwgICAgIlx1MGUwMVx1MGUzMlx1MGU0YyIsCisgICAgCisgICAgICAgICAgICAvLyBjb21tb25seSB1c2VkIG1hcmstaW4tY29udGV4dCBvcmRlci4KKyAgICAgICAgICAgIC8vIEluIGVmZmVjdCwgbWFya3MgYXJlIHNvcnRlZCBhZnRlciBlYWNoIHN5bGxhYmxlLgorICAgICAgICAgICAgIlx1MGUwMVx1MGUzMlx1MGUwMVx1MGU0OVx1MGUzMiIsICAgIjwiLCAgICAiXHUwZTAxXHUwZTQ4XHUwZTMyXHUwZTAxXHUwZTQ5XHUwZTMyIiwKKyAgICAKKyAgICAgICAgICAgIC8vIEh5cGhlbnMgYW5kIG90aGVyIHB1bmN0dWF0aW9uIGZvbGxvdyB3aGl0ZXNwYWNlIGJ1dCBjb21lIGJlZm9yZSBsZXR0ZXJzCisgICAgICAgICAgICAiXHUwZTAxXHUwZTMyIiwgICAgICAgICAgICAgICAgICAgICAgICAiPCIsICAgICJcdTBlMDFcdTBlMzItIiwKKyAgICAgICAgICAgICJcdTBlMDFcdTBlMzItIiwgICAgICAgICAgICAgICAgICAgICAgICI8IiwgICAgIlx1MGUwMVx1MGUzMlx1MGUwMVx1MGUzMiIsCisgICAgCisgICAgICAgICAgICAvLyBEb3VibGVyIGZvbGxvd3MgYW4gaW5kZW50aWNhbCB3b3JkIHdpdGhvdXQgdGhlIGRvdWJsZXIKKyAgICAgICAgICAgICJcdTBlMDFcdTBlMzIiLCAgICAgICAgICAgICAgICAgICAgICAgICI8IiwgICAgIlx1MGUwMVx1MGUzMlx1MGU0NiIsCisgICAgICAgICAgICAiXHUwZTAxXHUwZTMyXHUwZTQ2IiwgICAgICAgICAgICAgICAgICI8IiwgICAgIlx1MGUwMVx1MGUzMlx1MGUwMVx1MGUzMiIsCisgICAgCisgICAgICAgICAgICAvLyBcdTBlNDUgYWZ0ZXIgZWl0aGVyIFx1MGUyNCBvciBcdTBlMjYgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZQorICAgICAgICAgICAgLy8gY29tYmluaW5nIGNoYXJhY3Rlciwgc2ltaWxhciB0byAiYyA8IGNoIiBpbiB0cmFkaXRpb25hbCBzcGFuaXNoLgorICAgICAgICAgICAgLy8gVE9ETzogYmVlZiB1cCB0aGlzIGNhc2UKKyAgICAgICAgICAgICJcdTBlMjRcdTBlMjlcdTBlMzUiLCAgICAgICAgICAgICAgICAgIjwiLCAgICAiXHUwZTI0XHUwZTQ1XHUwZTI5XHUwZTM1IiwKKyAgICAgICAgICAgICJcdTBlMjZcdTBlMjlcdTBlMzUiLCAgICAgICAgICAgICAgICAgIjwiLCAgICAiXHUwZTI2XHUwZTQ1XHUwZTI5XHUwZTM1IiwKKyAgICAKKyAgICAgICAgICAgIC8vIFZvd2VscyByZW9yZGVyLCBzaG91bGQgY29tcGFyZSBcdTBlMmQgYW5kIFx1MGUzNAorICAgICAgICAgICAgIlx1MGU0MFx1MGUwMVx1MGUyZCIsICAgICAgICAgICAgICAgICAiPCIsICAgICJcdTBlNDBcdTBlMDFcdTBlMzQiLAorICAgIAorICAgICAgICAgICAgLy8gVG9uZXMgYXJlIGNvbXBhcmVkIGFmdGVyIHRoZSByZXN0IG9mIHRoZSB3b3JkIChlLmcuIHByaW1hcnkgaWdub3JhYmxlKQorICAgICAgICAgICAgIlx1MGUwMVx1MGUzMlx1MGUwMVx1MGU0OFx1MGUzMiIsICAgIjwiLCAgICAiXHUwZTAxXHUwZTQ5XHUwZTMyXHUwZTAxXHUwZTMyIiwKKyAgICAKKyAgICAgICAgICAgIC8vIFBlcmlvZHMgYXJlIGlnbm9yZWQgZW50aXJlbHkKKyAgICAgICAgICAgICJcdTBlMDEuXHUwZTAxLiIsICAgICAgICAgICAgICAgICAgICAgICI8IiwgICAgIlx1MGUwMVx1MGUzMiIsCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBDb2xsYXRvciBjb2xsID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbGwgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJ0aCIsICJUSCIsICIiKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3I6IGNvdWxkIG5vdCBjb25zdHJ1Y3QgVGhhaSBjb2xsYXRvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvbXBhcmVBcnJheShjb2xsLCBURVNUUyk7IAorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBhcmVBcnJheShDb2xsYXRvciBjLCBTdHJpbmdbXSB0ZXN0cykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICAgICAgICBpbnQgZXhwZWN0ID0gMDsKKyAgICAgICAgICAgIGlmICh0ZXN0c1tpKzFdLmVxdWFscygiPCIpKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ID0gLTE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRlc3RzW2krMV0uZXF1YWxzKCI+IikpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QgPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0c1tpKzFdLmVxdWFscygiPSIpKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXhwZWN0ID0gSW50ZWdlci5kZWNvZGUodGVzdHNbaSsxXSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3I6IHVua25vd24gb3BlcmF0b3IgIiArIHRlc3RzW2krMV0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBzMSA9IHRlc3RzW2ldOworICAgICAgICAgICAgU3RyaW5nIHMyID0gdGVzdHNbaSsyXTsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBjLmNvbXBhcmUoczEsIHMyKTsKKyAgICAgICAgICAgIGlmIChzaWduKHJlc3VsdCkgIT0gc2lnbihleHBlY3QpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIiIgKyBpLzMgKyAiOiBjb21wYXJlKCIgKyBzMQorICAgICAgICAgICAgICAgICAgICAgICsgIiAsICIgKyBzMiAgKyAiKSBnb3QgIiArIHJlc3VsdCArICI7IGV4cGVjdGVkICIgKyBleHBlY3QpOworICAgIAorICAgICAgICAgICAgICAgIENvbGxhdGlvbktleSBrMSwgazI7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgazEgPSBjLmdldENvbGxhdGlvbktleShzMSk7CisgICAgICAgICAgICAgICAgICAgIGsyID0gYy5nZXRDb2xsYXRpb25LZXkoczIpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBnZXRDb2xsYXRpb25LZXkgcmV0dXJuZWQgIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXJybG4oIiAga2V5MTogIiArIHByZXR0aWZ5KGsxKSk7CisgICAgICAgICAgICAgICAgZXJybG4oIiAga2V5MjogIiArIHByZXR0aWZ5KGsyKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIENvbGxhdG9yLmNvbXBhcmUgd29ya2VkIE9LOyBub3cgdHJ5IHRoZSBjb2xsYXRpb24ga2V5cworICAgICAgICAgICAgICAgIENvbGxhdGlvbktleSBrMSwgazI7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgazEgPSBjLmdldENvbGxhdGlvbktleShzMSk7CisgICAgICAgICAgICAgICAgICAgIGsyID0gYy5nZXRDb2xsYXRpb25LZXkoczIpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogZ2V0Q29sbGF0aW9uS2V5IHJldHVybmVkICIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGsxLmNvbXBhcmVUbyhrMik7CisgICAgICAgICAgICAgICAgaWYgKHNpZ24ocmVzdWx0KSAhPSBzaWduKGV4cGVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIiIgKyBpLzMgKyAiOiBrZXkoIiArIHMxCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgIikuY29tcGFyZVRvKGtleSgiICsgczIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiKSkgZ290ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZCAiICsgZXhwZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCIgICIgKyBwcmV0dGlmeShrMSkgKyAiIHZzLiAiICsgcHJldHRpZnkoazIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaW50IHNpZ24oaW50IGkgKSB7CisgICAgICAgIGlmIChpIDwgMCkgcmV0dXJuIC0xOworICAgICAgICBpZiAoaSA+IDApIHJldHVybiAxOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmVhZCB0aGUgZXh0ZXJuYWwgZGljdGlvbmFyeSBmaWxlLCB3aGljaCBpcyBhbHJlYWR5IGluIHByb3BlcgorICAgICAqIHNvcnRlZCBvcmRlciwgYW5kIGNvbmZpcm0gdGhhdCB0aGUgY29sbGF0b3IgY29tcGFyZXMgZWFjaCBsaW5lIGFzCisgICAgICogcHJlY2VkaW5nIHRoZSBmb2xsb3dpbmcgbGluZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0RGljdGlvbmFyeSgpIHsKKyAgICAgICAgQ29sbGF0b3IgY29sbCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2xsID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgidGgiLCAiVEgiLCAiIikpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBjb3VsZCBub3QgY29uc3RydWN0IFRoYWkgY29sbGF0b3IiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAKKyAgICAgICAgLy8gUmVhZCBpbiBhIGRpY3Rpb25hcnkgb2YgVGhhaSB3b3JkcworICAgICAgICAgICAgICAgRGF0YUlucHV0U3RyZWFtIGluID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gInRoMTgwNTcudHh0IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKFRlc3RVdGlsLmdldERhdGFGaWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lKSkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbi5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7fQorICAgICAgICAgICAgZXJybG4oIkVycm9yOiBjb3VsZCBub3Qgb3BlbiB0ZXN0IGZpbGU6ICIgKyBmaWxlTmFtZSk7CisgICAgICAgICAgICByZXR1cm47ICAgICAgICAKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLworICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCB3b3JkIGluIHRoZSBkaWN0aW9uYXJ5IGFuZCBjb21wYXJlIGl0IHRvIHRoZSBwcmV2aW91cworICAgICAgICAvLyB3b3JkLiAgVGhleSBzaG91bGQgYmUgaW4gc29ydGVkIG9yZGVyLgorICAgICAgICAvLworICAgICAgICBTdHJpbmcgbGFzdFdvcmQgPSAiIjsKKyAgICAgICAgaW50IGxpbmUgPSAwOworICAgICAgICBpbnQgZmFpbGVkID0gMDsKKyAgICAgICAgaW50IHdvcmRDb3VudCA9IDA7CisgICAgICAgIFN0cmluZyB3b3JkID0gcmVhZExpbmUoaW4pOworICAgICAgICB3aGlsZSAod29yZCAhPSBudWxsKSB7CisgICAgICAgICAgICBsaW5lKys7CisgICAgCisgICAgICAgICAgICAvLyBTa2lwIGNvbW1lbnRzIGFuZCBibGFuayBsaW5lcworICAgICAgICAgICAgaWYgKHdvcmQubGVuZ3RoKCkgPT0gMCB8fCB3b3JkLmNoYXJBdCgwKSA9PSAweDIzKSB7CisgICAgICAgICAgICAgICAgd29yZCA9IHJlYWRMaW5lKGluKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8vIFNob3cgdGhlIGZpcnN0IDggd29yZHMgYmVpbmcgY29tcGFyZWQsIHNvIHdlIGNhbiBzZWUgd2hhdCdzIGhhcHBlbmluZworICAgICAgICAgICAgKyt3b3JkQ291bnQ7CisgICAgICAgICAgICBpZiAod29yZENvdW50IDw9IDgpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiV29yZCAiICsgd29yZENvdW50ICsgIjogIiArIHdvcmQpOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgaWYgKGxhc3RXb3JkLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbGwuY29tcGFyZShsYXN0V29yZCwgd29yZCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nbG4oImxpbmUiICsgbGluZSArICI6IiArIHdvcmQpOworICAgICAgICAgICAgICAgICAgICBsb2dsbigibGFzdFdvcmQgPSAiICsgbGFzdFdvcmQpOworICAgICAgICAgICAgICAgICAgICBsb2dsbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChNQVhfRkFJTFVSRVNfVE9fU0hPVyA8IDAgfHwgZmFpbGVkIDw9IE1BWF9GQUlMVVJFU19UT19TSE9XKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbXNnID0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjb21wYXJlKCIgKyBsYXN0V29yZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCAiICsgd29yZCArICIpIHJldHVybmVkICIgKyByZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgZXhwZWN0ZWQgLTFcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBDb2xsYXRpb25LZXkgazEsIGsyOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSA9IGNvbGwuZ2V0Q29sbGF0aW9uS2V5KGxhc3RXb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMiA9IGNvbGwuZ2V0Q29sbGF0aW9uS2V5KHdvcmQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogZ2V0Q29sbGF0aW9uS2V5IHJldHVybmVkICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAia2V5MTogIiArIHByZXR0aWZ5KGsxKSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImtleTI6ICIgKyBwcmV0dGlmeShrMik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbihtc2cpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdFdvcmQgPSB3b3JkOworICAgICAgICAgICAgd29yZCA9IHJlYWRMaW5lKGluKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoZmFpbGVkICE9IDApIHsKKyAgICAgICAgICAgIGlmIChmYWlsZWQgPiBNQVhfRkFJTFVSRVNfVE9fU0hPVykgeworICAgICAgICAgICAgICAgIGVycmxuKCJUb28gbWFueSBmYWlsdXJlczsgb25seSB0aGUgZmlyc3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgTUFYX0ZBSUxVUkVTX1RPX1NIT1cgKyAiIGZhaWx1cmVzIHdlcmUgc2hvd24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVycmxuKCJTdW1tYXJ5OiAiICsgZmFpbGVkICsgIiBvZiAiICsgKGxpbmUgLSAxKSArCisgICAgICAgICAgICAgICAgICAiIGNvbXBhcmlzb25zIGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGxvZ2xuKCJXb3JkcyBjaGVja2VkOiAiICsgd29yZENvdW50KTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHJlYWRMaW5lKERhdGFJbnB1dFN0cmVhbSBpbikgeworICAgICAgICBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVsxMjhdOworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGJ5dGUgYyA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgMTI4KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGMgPSBpbi5yZWFkQnl0ZSgpOworICAgICAgICAgICAgfSBjYXRjaCAoRU9GRXhjZXB0aW9uIGVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkNhbm5vdCByZWFkIGxpbmUgZnJvbSB0aGUgZmlsZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPT0gMHhEIHx8IGMgPT0gMHhBKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgYyA9IGluLnJlYWRCeXRlKCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRU9GRXhjZXB0aW9uIGVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkNhbm5vdCByZWFkIGxpbmUgZnJvbSB0aGUgZmlsZSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBieXRlc1tpKytdID0gYzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGluZSA9IG5ldyBTdHJpbmcoYnl0ZXMsIDAsIGksICJVVEYtOCIpOworICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHByZXR0aWZ5KENvbGxhdGlvbktleSBzb3VyY2VLZXkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGJ5dGVbXSBieXRlcz0gc291cmNlS2V5LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIFN0cmluZyB0YXJnZXQgPSAiWyI7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGFyZ2V0ICs9IEludGVnZXIudG9IZXhTdHJpbmcoYnl0ZXNbaV0pOworICAgICAgICAgICAgdGFyZ2V0ICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gIl0iOworICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uVHVya2lzaFRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Db2xsYXRpb25UdXJraXNoVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZWE3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvQ29sbGF0aW9uVHVya2lzaFRlc3QuamF2YQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAKKyAqICREYXRlOiAKKyAqICRSZXZpc2lvbjogCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYyLjEgOiBDb2xsYXRlL0NvbGxhdGlvblR1cmtpc2hUZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC90cmNvbGwuY3BwCisgKiovCisgCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNvbGxhdG9yOworIAoraW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisgCitwdWJsaWMgY2xhc3MgQ29sbGF0aW9uVHVya2lzaFRlc3QgZXh0ZW5kcyBUZXN0Rm13a3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBuZXcgQ29sbGF0aW9uVHVya2lzaFRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RTb3VyY2VDYXNlcyA9IHsKKyAgICAgICAgezB4NzMsIDB4MDMyN30sCisgICAgICAgIHsweDc2LCAweDAwRTQsIDB4NzR9LAorICAgICAgICB7MHg2ZiwgMHg2YywgMHg2NH0sCisgICAgICAgIHsweDAwRkMsIDB4NmYsIDB4NjksIDB4NjR9LAorICAgICAgICB7MHg2OCwgMHgwMTFFLCAweDYxLCAweDZjLCAweDc0fSwKKyAgICAgICAgezB4NzMsIDB4NzQsIDB4NzIsIDB4NjUsIDB4NzMsIDB4MDE1RX0sCisgICAgICAgIHsweDc2LCAweDZmLCAweDAxMzEsIDB4NjR9LAorICAgICAgICB7MHg2OSwgMHg2NCwgMHg2NSwgMHg2MX0sCisgICAgICAgIHsweDAwRkMsIDB4NmYsIDB4NjksIDB4NjR9LAorICAgICAgICB7MHg3NiwgMHg2ZiwgMHgwMTMxLCAweDY0fSwKKyAgICAgICAgezB4NjksIDB4NjQsIDB4NjUsIDB4NjF9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXVtdIHRlc3RUYXJnZXRDYXNlcyA9IHsKKyAgICAgICAgezB4NzUsIDB4MDMwOH0sCisgICAgICAgIHsweDc2LCAweDYyLCAweDc0fSwKKyAgICAgICAgezB4MDBENiwgMHg2MSwgMHg3OX0sCisgICAgICAgIHsweDc2LCAweDZmLCAweDY5LCAweDY0fSwKKyAgICAgICAgezB4NjgsIDB4NjEsIDB4NmMsIDB4NzR9LAorICAgICAgICB7MHgwMTVFLCAweDc0LCAweDcyLCAweDY1LCAweDAxNUUsIDB4NzN9LAorICAgICAgICB7MHg3NiwgMHg2ZiwgMHg2OSwgMHg2NH0sCisgICAgICAgIHsweDQ5LCAweDY0LCAweDY1LCAweDYxfSwKKyAgICAgICAgezB4NzYsIDB4NmYsIDB4NjksIDB4NjR9LAorICAgICAgICB7MHg3NiwgMHg2ZiwgMHg2OSwgMHg2NH0sCisgICAgICAgIHsweDQ5LCAweDY0LCAweDY1LCAweDYxfQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSByZXN1bHRzID0geworICAgICAgICAtMSwKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAtMSwKKyAgICAgICAgMSwKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAxLAorICAgIC8vIHRlc3QgcHJpYW1yeSA+IDgKKyAgICAgICAgLTEsCisgICAgICAgIC0xLAorICAgICAgICAxCisgICAgfTsKKyAgICAKKyAgICBwcml2YXRlIENvbGxhdG9yIG15Q29sbGF0aW9uID0gbnVsbDsKKyAgICAKKyAgICBwdWJsaWMgQ29sbGF0aW9uVHVya2lzaFRlc3QoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBteUNvbGxhdGlvbiA9IENvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoInRyIiwgIiIpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgVFVSS0lTSCBsb2NhbGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0VGVydGlhcnkoKSB7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgbXlDb2xsYXRpb24uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgOCA7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0UHJpbWFyeSgpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIG15Q29sbGF0aW9uLnNldFN0cmVuZ3RoKENvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICBmb3IgKGkgPSA4OyBpIDwgMTE7IGkrKykgeworICAgICAgICAgICAgZG9UZXN0KHRlc3RTb3VyY2VDYXNlc1tpXSwgdGVzdFRhcmdldENhc2VzW2ldLCByZXN1bHRzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBtYWluIHRlc3Qgcm91dGluZSwgdGVzdHMgcnVsZXMgc3BlY2lmaWMgdG8gdHVya2lzaCBsb2NhbGUKKyAgICBwcml2YXRlIHZvaWQgZG9UZXN0KGNoYXJbXSBzb3VyY2UsIGNoYXJbXSB0YXJnZXQsIGludCByZXN1bHQpIHsKKyAgICAgICAgU3RyaW5nIHMgPSBuZXcgU3RyaW5nKHNvdXJjZSk7CisgICAgICAgIFN0cmluZyB0ID0gbmV3IFN0cmluZyh0YXJnZXQpOworICAgICAgICBpbnQgY29tcGFyZVJlc3VsdCA9IG15Q29sbGF0aW9uLmNvbXBhcmUocywgdCk7CisgICAgICAgIENvbGxhdGlvbktleSBzb3J0S2V5MSwgc29ydEtleTI7CisgICAgICAgIHNvcnRLZXkxID0gbXlDb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHMpOworICAgICAgICBzb3J0S2V5MiA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleSh0KTsKKyAgICAgICAgaW50IGtleVJlc3VsdCA9IHNvcnRLZXkxLmNvbXBhcmVUbyhzb3J0S2V5Mik7CisgICAgICAgIHJlcG9ydENSZXN1bHQocywgdCwgc29ydEtleTEsIHNvcnRLZXkyLCBjb21wYXJlUmVzdWx0LCBrZXlSZXN1bHQsIGNvbXBhcmVSZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApIHsKKyAgICAgICAgaWYgKGV4cGVjdGVkUmVzdWx0IDwgLTEgfHwgZXhwZWN0ZWRSZXN1bHQgPiAxKSB7CisgICAgICAgICAgICBlcnJsbigiKioqKiogaW52YWxpZCBjYWxsIHRvIHJlcG9ydENSZXN1bHQgKioqKiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBvazEgPSAoY29tcGFyZVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2syID0gKGtleVJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGJvb2xlYW4gb2szID0gKGluY1Jlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG9rMSAmJiBvazIgJiYgb2szICYmICFpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgcmV0dXJuOyAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc0V4cGVjdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgU3RyaW5nIHNSZXN1bHQgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGNvbXBhcmVSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgc0V4cGVjdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoZXhwZWN0ZWRSZXN1bHQsIHNFeHBlY3QpOworICAgICAgICAgICAgaWYgKG9rMSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworCisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChpbmNSZXN1bHQsIHNSZXN1bHQpOworCisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIGFwcGVuZENvbXBhcmVSZXN1bHQoaW50IHJlc3VsdCwgU3RyaW5nIHRhcmdldCkgeworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkxFU1MiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAwKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkVRVUFMIjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMSkgeworICAgICAgICAgICAgdGFyZ2V0ICs9ICJHUkVBVEVSIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBodWggPSAiPyI7CisgICAgICAgICAgICB0YXJnZXQgKz0gaHVoICsgcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorICAgIAorICAgIFN0cmluZyBwcmV0dGlmeShDb2xsYXRpb25LZXkgc291cmNlS2V5KSB7CisgICAgICAgIGludCBpOworICAgICAgICBieXRlW10gYnl0ZXM9IHNvdXJjZUtleS50b0J5dGVBcnJheSgpOworICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gIlsiOworICAgIAorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRhcmdldCArPSBJbnRlZ2VyLnRvSGV4U3RyaW5nKGJ5dGVzW2ldKTsKKyAgICAgICAgICAgIHRhcmdldCArPSAiICI7CisgICAgICAgIH0KKyAgICAgICAgdGFyZ2V0ICs9ICJdIjsKKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0c3Q29sbGF0aW9uVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0c3Q29sbGF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNTJiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29sbGF0b3IvRzdDb2xsYXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogCisgKiAkRGF0ZTogCisgKiAkUmV2aXNpb246IAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2Mi4xIDogQ29sbGF0ZS9HN0NvbGxhdGlvblRlc3QKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L2c3Y29sbC5jcHAKKyAqKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisgCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKyAKK3B1YmxpYyBjbGFzcyBHN0NvbGxhdGlvblRlc3QgZXh0ZW5kcyBUZXN0Rm13a3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBuZXcgRzdDb2xsYXRpb25UZXN0KCkucnVuKGFyZ3MpOworICAgICAgICAvLyBuZXcgRzdDb2xsYXRpb25UZXN0KCkuVGVzdERlbW8zKCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIHRlc3RDYXNlcyA9IHsKKyAgICAgICAgImJsYWNrYmlyZHMiLCAiUGF0IiwgInBcdTAwRTljaFx1MDBFOSIsICJwXHUwMEVBY2hlIiwgInBcdTAwRTljaGVyIiwgICAgICAgICAgICAKKyAgICAgICAgInBcdTAwRUFjaGVyIiwgIlRvZCIsICJUXHUwMEY2bmUiLCAiVG9mdSIsICJibGFja2JpcmQiLCAiVG9uIiwgCisgICAgICAgICJQQVQiLCAiYmxhY2stYmlyZCIsICJibGFjay1iaXJkcyIsICJwYXQiLCAvLyAxNAorICAgICAgICAvLyBBZGRpdGlvbmFsIHRlc3RzCisgICAgICAgICJjemFyIiwgImNodXJvIiwgImNhdCIsICJkYXJuIiwgIj8iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTkgKi8KKyAgICAgICAgInF1aWNrIiwgIiMiLCAiJiIsICJhLXJkdmFyayIsICJhYXJkdmFyayIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMyAqLworICAgICAgICAiYWJib3QiLCAiY28tcCIsICJjb3AiLCAiY29vcCIsICJ6ZWJyYSIKKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50W11bXSByZXN1bHRzID0geworICAgICAgICB7IDEyLCAxMywgOSwgMCwgMTQsIDEsIDExLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAvKiBlbl9VUyAqLworICAgICAgICB7IDEyLCAxMywgOSwgMCwgMTQsIDEsIDExLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAvKiBlbl9HQiAqLworICAgICAgICB7IDEyLCAxMywgOSwgMCwgMTQsIDEsIDExLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAvKiBlbl9DQSAqLworICAgICAgICB7IDEyLCAxMywgOSwgMCwgMTQsIDEsIDExLCAzLCAyLCA0LCA1LCA2LCA4LCAxMCwgNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAvKiBmcl9GUiAqLworICAgICAgICB7IDEyLCAxMywgOSwgMCwgMTQsIDEsIDExLCAzLCAyLCA0LCA1LCA2LCA4LCAxMCwgNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAvKiBmcl9DQSAqLworICAgICAgICB7IDEyLCAxMywgOSwgMCwgMTQsIDEsIDExLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAvKiBkZV9ERSAqLworICAgICAgICB7IDEyLCAxMywgOSwgMCwgMTQsIDEsIDExLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAvKiBpdF9JVCAqLworICAgICAgICB7IDEyLCAxMywgOSwgMCwgMTQsIDEsIDExLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAvKiBqYV9KUCAqLworICAgICAgICAvKiBuZXcgdGFibGUgY29sbGF0aW9uIHdpdGggcnVsZXMgIiYgWiA8IHAsIFAiICBsb29wIHRvIEZJWEVEVEVTVFNFVCAqLworICAgICAgICB7IDEyLCAxMywgOSwgMCwgNiwgOCwgMTAsIDcsIDE0LCAxLCAxMSwgMiwgMywgNCwgNSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSB9LCAKKyAgICAgICAgLyogbmV3IHRhYmxlIGNvbGxhdGlvbiB3aXRoIHJ1bGVzICImIEMgPCBjaCAsIGNILCBDaCwgQ0ggIiBsb29wIHRvIFRPVEFMVEVTVFNFVCAqLworICAgICAgICB7IDE5LCAyMiwgMjEsIDIzLCAyNCwgMjUsIDEyLCAxMywgOSwgMCwgMTcsIDI2LCAyOCwgMjcsIDE1LCAxNiwgMTgsIDE0LCAxLCAxMSwgMiwgMywgNCwgNSwgMjAsIDYsIDgsIDEwLCA3LCAyOSB9LAorICAgICAgICAvKiBuZXcgdGFibGUgY29sbGF0aW9uIHdpdGggcnVsZXMgIiYgUXVlc3Rpb24tbWFyayA7ID8gJiBIYXNoLW1hcmsgOyAjICYgQW1wZXJzYW5kIDsgJyYnICAiIGxvb3AgdG8gVE9UQUxURVNUU0VUICovCisgICAgICAgIHsgMjMsIDI0LCAyNSwgMjIsIDEyLCAxMywgOSwgMCwgMTcsIDE2LCAyNiwgMjgsIDI3LCAxNSwgMTgsIDIxLCAxNCwgMSwgMTEsIDIsIDMsIDQsIDUsIDE5LCAyMCwgNiwgOCwgMTAsIDcsIDI5IH0sCisgICAgICAgIC8qIGFuYWxvZ291cyB0byBKYXBhbmVzZSBydWxlcyAiICYgYWEgOyBhLSAmIGVlIDsgZS0gJiBpaSA7IGktICYgb28gOyBvLSAmIHV1IDsgdS0gIiAqLyAgLyogbG9vcCB0byBUT1RBTFRFU1RTRVQgKi8KKyAgICAgICAgeyAxOSwgMjIsIDIxLCAyNCwgMjMsIDI1LCAxMiwgMTMsIDksIDAsIDE3LCAxNiwgMjgsIDI2LCAyNywgMTUsIDE4LCAxNCwgMSwgMTEsIDIsIDMsIDQsIDUsIDIwLCA2LCA4LCAxMCwgNywgMjkgfQorICAgIH07CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9UT0tFTl9MRU4gPSAxNjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVExPQ0FMRVMgPSAxMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklYRURURVNUU0VUID0gMTU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRPVEFMVEVTVFNFVCA9IDMwOworICAgIAorICAgIC8vIHBlcmZvcm0gdGVzdCB3aXRoIGFkZGVkIHJ1bGVzICIgJiBaIDwgcCwgUCIKKyAgICBwdWJsaWMgdm9pZCBUZXN0RGVtbzEoKSB7CisgICAgICAgIGxvZ2xuKCJEZW1vIFRlc3QgMSA6IENyZWF0ZSBhIG5ldyB0YWJsZSBjb2xsYXRpb24gd2l0aCBydWxlcyBcIiYgWiA8IHAsIFBcIiIpOworICAgICAgICAKKyAgICAgICAgQ29sbGF0b3IgY29sOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkVOR0xJU0gpOyAgICAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgRU5HTElTSCBsb2NhbGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIGJhc2VSdWxlcyA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpY29sKS5nZXRSdWxlcygpOworICAgICAgICBTdHJpbmcgbmV3UnVsZXMgPSAiICYgWiA8IHAsIFAiOworICAgICAgICBuZXdSdWxlcyA9IGJhc2VSdWxlcyArIG5ld1J1bGVzOyAKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgbXlDb2xsYXRpb24gPSBudWxsOyAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG15Q29sbGF0aW9uID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKG5ld1J1bGVzKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWwgdG8gY3JlYXRlIFJ1bGVCYXNlZENvbGxhdG9yIHdpdGggcnVsZXM6IiArIG5ld1J1bGVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG15Q29sbGF0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJEZW1vIFRlc3QgMiBUYWJsZSBDb2xsYXRpb24gb2JqZWN0IGNyZWF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IGosIG47CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBGSVhFRFRFU1RTRVQ7IGorKykgeworICAgICAgICAgICAgZm9yIChuID0gaisxOyBuIDwgRklYRURURVNUU0VUOyBuKyspIHsKKyAgICAgICAgICAgICAgICBkb1Rlc3QobXlDb2xsYXRpb24sIHRlc3RDYXNlc1tyZXN1bHRzWzhdW2pdXSwgdGVzdENhc2VzW3Jlc3VsdHNbOF1bbl1dLCAtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisKKyAgICAvLyBwZXJvcm0gdGVzdCB3aXRoIGFkZGVkIHJ1bGVzICImIEMgPCBjaCAsIGNILCBDaCwgQ0giCisgICAgcHVibGljIHZvaWQgVGVzdERlbW8yKCkgeworICAgICAgICBsb2dsbigiRGVtbyBUZXN0IDIgOiBDcmVhdGUgYSBuZXcgdGFibGUgY29sbGF0aW9uIHdpdGggcnVsZXMgXCImIEMgPCBjaCAsIGNILCBDaCwgQ0hcIiIpOworICAgICAgICBDb2xsYXRvciBjb2w7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2wgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRU5HTElTSCk7ICAgIAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBpbiBjcmVhdGlvbiBvZiBjb2xsYXRvciBvZiBFTkdMSVNIIGxvY2FsZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIGJhc2VSdWxlcyA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpY29sKS5nZXRSdWxlcygpOworICAgICAgICBTdHJpbmcgbmV3UnVsZXMgPSAiJiBDIDwgY2ggLCBjSCwgQ2gsIENIIjsKKyAgICAgICAgbmV3UnVsZXMgPSBiYXNlUnVsZXMgKyBuZXdSdWxlczsgCisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIG15Q29sbGF0aW9uID0gbnVsbDsgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBteUNvbGxhdGlvbiA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihuZXdSdWxlcyk7CisgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgICAgICBlcnJsbigiRmFpbCB0byBjcmVhdGUgUnVsZUJhc2VkQ29sbGF0b3Igd2l0aCBydWxlczoiICsgbmV3UnVsZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9ICAKKworICAgICAgICBpbnQgaiwgbjsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IFRPVEFMVEVTVFNFVDsgaisrKSB7CisgICAgICAgICAgICBmb3IgKG4gPSBqKzE7IG4gPCBUT1RBTFRFU1RTRVQ7IG4rKykgeworICAgICAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdGlvbiwgdGVzdENhc2VzW3Jlc3VsdHNbOV1bal1dLCB0ZXN0Q2FzZXNbcmVzdWx0c1s5XVtuXV0sIC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKworICAgIC8vIHBlcmZvcm0gdGVzdCB3aXRoIGFkZGVkIHJ1bGVzIAorICAgIC8vICImIFF1ZXN0aW9uJy0nbWFyayA7ICc/JyAmIEhhc2gnLSdtYXJrIDsgJyMnICYgQW1wZXJzYW5kIDsgJyYnIgorICAgIHB1YmxpYyB2b2lkIFRlc3REZW1vMygpIHsKKyAgICAgICAgLy8gbG9nbG4oIkRlbW8gVGVzdCAzIDogQ3JlYXRlIGEgbmV3IHRhYmxlIGNvbGxhdGlvbiB3aXRoIHJ1bGVzIFwiJiBRdWVzdGlvbictJ21hcmsgOyAnPycgJiBIYXNoJy0nbWFyayA7ICcjJyAmIEFtcGVyc2FuZCA7ICcmJ1wiIik7CisgICAgICAgIENvbGxhdG9yIGNvbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5FTkdMSVNIKTsgICAgCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGluIGNyZWF0aW9uIG9mIGNvbGxhdG9yIG9mIEVOR0xJU0ggbG9jYWxlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBiYXNlUnVsZXMgPSAoKFJ1bGVCYXNlZENvbGxhdG9yKWNvbCkuZ2V0UnVsZXMoKTsKKyAgICAgICAgU3RyaW5nIG5ld1J1bGVzID0gIiYgUXVlc3Rpb24nLSdtYXJrIDsgJz8nICYgSGFzaCctJ21hcmsgOyAnIycgJiBBbXBlcnNhbmQgOyAnJiciOworICAgICAgICBuZXdSdWxlcyA9IGJhc2VSdWxlcyArIG5ld1J1bGVzOworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBteUNvbGxhdGlvbiA9IG51bGw7IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbXlDb2xsYXRpb24gPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IobmV3UnVsZXMpOworICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgZXJybG4oIkZhaWwgdG8gY3JlYXRlIFJ1bGVCYXNlZENvbGxhdG9yIHdpdGggcnVsZXM6IiArIG5ld1J1bGVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSAgCisKKyAgICAgICAgaW50IGosIG47CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBUT1RBTFRFU1RTRVQ7IGorKykgeworICAgICAgICAgICAgZm9yIChuID0gaisxOyBuIDwgVE9UQUxURVNUU0VUOyBuKyspIHsKKyAgICAgICAgICAgICAgICBkb1Rlc3QobXlDb2xsYXRpb24sIHRlc3RDYXNlc1tyZXN1bHRzWzEwXVtqXV0sIHRlc3RDYXNlc1tyZXN1bHRzWzEwXVtuXV0sIC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKworICAgIC8vIHBlcmZvcm0gdGVzdCB3aXRoIGFkZGVkIHJ1bGVzIAorICAgIC8vICIgJiBhYSA7IGEnLScgJiBlZSA7IGUnLScgJiBpaSA7IGknLScgJiBvbyA7IG8nLScgJiB1dSA7IHUnLScgIgorICAgIHB1YmxpYyB2b2lkIFRlc3REZW1vNCgpIHsKKyAgICAgICAgbG9nbG4oIkRlbW8gVGVzdCA0IDogQ3JlYXRlIGEgbmV3IHRhYmxlIGNvbGxhdGlvbiB3aXRoIHJ1bGVzIFwiICYgYWEgOyBhJy0nICYgZWUgOyBlJy0nICYgaWkgOyBpJy0nICYgb28gOyBvJy0nICYgdXUgOyB1Jy0nIFwiIik7CisgICAgICAgIENvbGxhdG9yIGNvbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbCA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5FTkdMSVNIKTsgICAgCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGluIGNyZWF0aW9uIG9mIGNvbGxhdG9yIG9mIEVOR0xJU0ggbG9jYWxlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGJhc2VSdWxlcyA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpY29sKS5nZXRSdWxlcygpOworICAgICAgICBTdHJpbmcgbmV3UnVsZXMgPSAiICYgYWEgOyBhJy0nICYgZWUgOyBlJy0nICYgaWkgOyBpJy0nICYgb28gOyBvJy0nICYgdXUgOyB1Jy0nICI7CisgICAgICAgIG5ld1J1bGVzID0gYmFzZVJ1bGVzICsgbmV3UnVsZXM7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIG15Q29sbGF0aW9uID0gbnVsbDsgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBteUNvbGxhdGlvbiA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihuZXdSdWxlcyk7CisgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgICAgICBlcnJsbigiRmFpbCB0byBjcmVhdGUgUnVsZUJhc2VkQ29sbGF0b3Igd2l0aCBydWxlczoiICsgbmV3UnVsZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9ICAKKworICAgICAgICBpbnQgaiwgbjsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IFRPVEFMVEVTVFNFVDsgaisrKSB7CisgICAgICAgICAgICBmb3IgKG4gPSBqKzE7IG4gPCBUT1RBTFRFU1RTRVQ7IG4rKykgeworICAgICAgICAgICAgICAgIGRvVGVzdChteUNvbGxhdGlvbiwgdGVzdENhc2VzW3Jlc3VsdHNbMTFdW2pdXSwgdGVzdENhc2VzW3Jlc3VsdHNbMTFdW25dXSwgLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIAorICAgIAorICAgIC8vIG1haW4gdGVzdCByb3V0aW5lLCB0ZXN0cyBjb21wYXJpc29ucyBmb3IgYSBzZXQgb2Ygc3RyaW5ncyBhZ2FpbnN0IHNldHMgb2YgZXhwZWN0ZWQgcmVzdWx0cworICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoQ29sbGF0b3IgbXlDb2xsYXRpb24sIFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCl7CisgICAgICAgIAorICAgICAgICBpbnQgY29tcGFyZVJlc3VsdCA9IG15Q29sbGF0aW9uLmNvbXBhcmUoc291cmNlLCB0YXJnZXQpOworICAgICAgICBDb2xsYXRpb25LZXkgc29ydEtleTEsIHNvcnRLZXkyOworICAgICAgICBzb3J0S2V5MSA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleShzb3VyY2UpOworICAgICAgICBzb3J0S2V5MiA9IG15Q29sbGF0aW9uLmdldENvbGxhdGlvbktleSh0YXJnZXQpOworICAgICAgICBpbnQga2V5UmVzdWx0ID0gc29ydEtleTEuY29tcGFyZVRvKHNvcnRLZXkyKTsKKyAgICAgICAgcmVwb3J0Q1Jlc3VsdChzb3VyY2UsIHRhcmdldCwgc29ydEtleTEsIHNvcnRLZXkyLCBjb21wYXJlUmVzdWx0LCAKKyAgICAgICAgICAgICAgICAgICAgICBrZXlSZXN1bHQsIGNvbXBhcmVSZXN1bHQsIHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCByZXBvcnRDUmVzdWx0KCBTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0LCBDb2xsYXRpb25LZXkgc291cmNlS2V5LCBDb2xsYXRpb25LZXkgdGFyZ2V0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tcGFyZVJlc3VsdCwgaW50IGtleVJlc3VsdCwgaW50IGluY1Jlc3VsdCwgaW50IGV4cGVjdGVkUmVzdWx0ICl7CisgICAgICAgIGlmIChleHBlY3RlZFJlc3VsdCA8IC0xIHx8IGV4cGVjdGVkUmVzdWx0ID4gMSkgeworICAgICAgICAgICAgZXJybG4oIioqKioqIGludmFsaWQgY2FsbCB0byByZXBvcnRDUmVzdWx0ICoqKioiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gb2sxID0gKGNvbXBhcmVSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgICAgICBib29sZWFuIG9rMiA9IChrZXlSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworICAgICAgICBib29sZWFuIG9rMyA9IChpbmNSZXN1bHQgPT0gZXhwZWN0ZWRSZXN1bHQpOworCisgICAgICAgIGlmIChvazEgJiYgb2syICYmIG9rMyAmJiAhaXNWZXJib3NlKCkpeworICAgICAgICAgICAgcmV0dXJuOyAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cxID0gb2sxPyAiT2s6IGNvbXBhcmUoXCIiIDogIkZBSUw6IGNvbXBhcmUoXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIFN0cmluZyBtc2czID0gIlwiKSByZXR1cm5lZCAiOworICAgICAgICAgICAgU3RyaW5nIG1zZzQgPSAiOyBleHBlY3RlZCAiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc0V4cGVjdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgU3RyaW5nIHNSZXN1bHQgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGNvbXBhcmVSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgc0V4cGVjdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoZXhwZWN0ZWRSZXN1bHQsIHNFeHBlY3QpOworICAgICAgICAgICAgaWYgKG9rMSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2syID8gIk9rOiBrZXkoXCIiIDogIkZBSUw6IGtleShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiKS5jb21wYXJlVG8oa2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpKSByZXR1cm5lZCAiOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoa2V5UmVzdWx0LCBzUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChvazIpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgICAgICBtc2cxID0gIiAgIjsKKyAgICAgICAgICAgICAgICBtc2cyID0gIiB2cy4gIjsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgcHJldHRpZnkoc291cmNlS2V5KSArIG1zZzIgKyBwcmV0dGlmeSh0YXJnZXRLZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXNnMSA9IG9rMyA/ICJPazogaW5jQ29tcGFyZShcIiIgOiAiRkFJTDogaW5jQ29tcGFyZShcIiI7CisgICAgICAgICAgICBtc2cyID0gIlwiLCBcIiI7CisgICAgICAgICAgICBtc2czID0gIlwiKSByZXR1cm5lZCAiOworCisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChpbmNSZXN1bHQsIHNSZXN1bHQpOworCisgICAgICAgICAgICBpZiAob2szKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIGFwcGVuZENvbXBhcmVSZXN1bHQoaW50IHJlc3VsdCwgU3RyaW5nIHRhcmdldCl7CisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiTEVTUyI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiRVFVQUwiOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gIkdSRUFURVIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGh1aCA9ICI/IjsKKyAgICAgICAgICAgIHRhcmdldCArPSBodWggKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICBTdHJpbmcgcHJldHRpZnkoQ29sbGF0aW9uS2V5IHNvdXJjZUtleSkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgYnl0ZVtdIGJ5dGVzPSBzb3VyY2VLZXkudG9CeXRlQXJyYXkoKTsKKyAgICAgICAgU3RyaW5nIHRhcmdldCA9ICJbIjsKKyAgICAKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gSW50ZWdlci50b0hleFN0cmluZyhieXRlc1tpXSk7CisgICAgICAgICAgICB0YXJnZXQgKz0gIiAiOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSAiXSI7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Mb3R1c0NvbGxhdGlvbktvcmVhblRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb2xsYXRvci9Mb3R1c0NvbGxhdGlvbktvcmVhblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2U5YmIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbGxhdG9yL0xvdHVzQ29sbGF0aW9uS29yZWFuVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IAorICogJERhdGU6IAorICogJFJldmlzaW9uOiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjIuMSA6IENvbGxhdGUvTG90dXNDb2xsYXRpb25Lb3JlYW5UZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9sY3Vrb2NvbC5jcHAKKyAqKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3I7CisgCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKyAKK3B1YmxpYyBjbGFzcyBMb3R1c0NvbGxhdGlvbktvcmVhblRlc3QgZXh0ZW5kcyBUZXN0Rm13a3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBuZXcgTG90dXNDb2xsYXRpb25Lb3JlYW5UZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0U291cmNlQ2FzZXMgPSB7CisgICAgICAgIHsweGFjMDB9CisgICAgfTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW11bXSB0ZXN0VGFyZ2V0Q2FzZXMgPSB7CisgICAgICAgIHsweGFjMDF9CisgICAgfTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSByZXN1bHRzID0geworICAgICAgICAtMQorICAgIH07CisgICAgCisgICAgcHJpdmF0ZSBDb2xsYXRvciBteUNvbGxhdGlvbjsKKyAgICAKKyAgICBwdWJsaWMgTG90dXNDb2xsYXRpb25Lb3JlYW5UZXN0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbXlDb2xsYXRpb24gPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuS09SRUFOKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW4gY3JlYXRpb24gb2YgY29sbGF0b3Igb2YgS09SRUFOIGxvY2FsZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG15Q29sbGF0aW9uLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pOworICAgIH0KKyAgICAKKyAgICAvLyBwZXJmb3JtcyB0ZXN0IHdpdGggc3RyZW5ndGggVEVSSUFSWQorICAgIHB1YmxpYyB2b2lkIFRlc3RUZXJ0aWFyeSgpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBteUNvbGxhdGlvbi5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxOyBpKyspIHsKKyAgICAgICAgICAgIGRvVGVzdCh0ZXN0U291cmNlQ2FzZXNbaV0sIHRlc3RUYXJnZXRDYXNlc1tpXSwgcmVzdWx0c1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAvLyBtYWluIHRlc3Qgcm91dGluZSwgdGVzdHMgcnVsZXMgc3BlY2lmaWMgdG8gIktvcmVhbiIgbG9jYWxlCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdCggY2hhcltdIHNvdXJjZSwgY2hhcltdIHRhcmdldCwgaW50IHJlc3VsdCkgeworICAgICAgICBTdHJpbmcgcyA9IG5ldyBTdHJpbmcoc291cmNlKTsKKyAgICAgICAgU3RyaW5nIHQgPSBuZXcgU3RyaW5nKHRhcmdldCk7CisgICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gbXlDb2xsYXRpb24uY29tcGFyZShzLCB0KTsKKyAgICAgICAgQ29sbGF0aW9uS2V5IHNvcnRLZXkxLCBzb3J0S2V5MjsKKyAgICAgICAgc29ydEtleTEgPSBteUNvbGxhdGlvbi5nZXRDb2xsYXRpb25LZXkocyk7CisgICAgICAgIHNvcnRLZXkyID0gbXlDb2xsYXRpb24uZ2V0Q29sbGF0aW9uS2V5KHQpOworICAgICAgICBpbnQga2V5UmVzdWx0ID0gc29ydEtleTEuY29tcGFyZVRvKHNvcnRLZXkyKTsKKyAgICAgICAgcmVwb3J0Q1Jlc3VsdCggcywgdCwgc29ydEtleTEsIHNvcnRLZXkyLCBjb21wYXJlUmVzdWx0LCBrZXlSZXN1bHQsIGNvbXBhcmVSZXN1bHQsIHJlc3VsdCApOyAKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0Q1Jlc3VsdCggU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgQ29sbGF0aW9uS2V5IHNvdXJjZUtleSwgQ29sbGF0aW9uS2V5IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQsIGludCBrZXlSZXN1bHQsIGludCBpbmNSZXN1bHQsIGludCBleHBlY3RlZFJlc3VsdCApeworICAgICAgICBpZiAoZXhwZWN0ZWRSZXN1bHQgPCAtMSB8fCBleHBlY3RlZFJlc3VsdCA+IDEpIHsKKyAgICAgICAgICAgIGVycmxuKCIqKioqKiBpbnZhbGlkIGNhbGwgdG8gcmVwb3J0Q1Jlc3VsdCAqKioqIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIG9rMSA9IChjb21wYXJlUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazIgPSAoa2V5UmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgYm9vbGVhbiBvazMgPSAoaW5jUmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsKKworICAgICAgICBpZiAob2sxICYmIG9rMiAmJiBvazMgJiYgIWlzVmVyYm9zZSgpKSB7CisgICAgICAgICAgICByZXR1cm47ICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIG1zZzEgPSBvazE/ICJPazogY29tcGFyZShcIiIgOiAiRkFJTDogY29tcGFyZShcIiI7CisgICAgICAgICAgICBTdHJpbmcgbXNnMiA9ICJcIiwgXCIiOworICAgICAgICAgICAgU3RyaW5nIG1zZzMgPSAiXCIpIHJldHVybmVkICI7CisgICAgICAgICAgICBTdHJpbmcgbXNnNCA9ICI7IGV4cGVjdGVkICI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyBzRXhwZWN0ID0gbmV3IFN0cmluZygiIik7CisgICAgICAgICAgICBTdHJpbmcgc1Jlc3VsdCA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICAgICAgc1Jlc3VsdCA9IGFwcGVuZENvbXBhcmVSZXN1bHQoY29tcGFyZVJlc3VsdCwgc1Jlc3VsdCk7CisgICAgICAgICAgICBzRXhwZWN0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChleHBlY3RlZFJlc3VsdCwgc0V4cGVjdCk7CisgICAgICAgICAgICBpZiAob2sxKSB7CisgICAgICAgICAgICAgICAgbG9nbG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQgKyBtc2c0ICsgc0V4cGVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1zZzEgPSBvazIgPyAiT2s6IGtleShcIiIgOiAiRkFJTDoga2V5KFwiIjsKKyAgICAgICAgICAgIG1zZzIgPSAiXCIpLmNvbXBhcmVUbyhrZXkoXCIiOworICAgICAgICAgICAgbXNnMyA9ICJcIikpIHJldHVybmVkICI7CisgICAgICAgICAgICBzUmVzdWx0ID0gYXBwZW5kQ29tcGFyZVJlc3VsdChrZXlSZXN1bHQsIHNSZXN1bHQpOworICAgICAgICAgICAgaWYgKG9rMikgeworICAgICAgICAgICAgICAgIGxvZ2xuKG1zZzEgKyBzb3VyY2UgKyBtc2cyICsgdGFyZ2V0ICsgbXNnMyArIHNSZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0ICsgbXNnNCArIHNFeHBlY3QpOworICAgICAgICAgICAgICAgIG1zZzEgPSAiICAiOworICAgICAgICAgICAgICAgIG1zZzIgPSAiIHZzLiAiOworICAgICAgICAgICAgICAgIGVycmxuKG1zZzEgKyBwcmV0dGlmeShzb3VyY2VLZXkpICsgbXNnMiArIHByZXR0aWZ5KHRhcmdldEtleSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtc2cxID0gb2szID8gIk9rOiBpbmNDb21wYXJlKFwiIiA6ICJGQUlMOiBpbmNDb21wYXJlKFwiIjsKKyAgICAgICAgICAgIG1zZzIgPSAiXCIsIFwiIjsKKyAgICAgICAgICAgIG1zZzMgPSAiXCIpIHJldHVybmVkICI7CisKKyAgICAgICAgICAgIHNSZXN1bHQgPSBhcHBlbmRDb21wYXJlUmVzdWx0KGluY1Jlc3VsdCwgc1Jlc3VsdCk7CisKKyAgICAgICAgICAgIGlmIChvazMpIHsKKyAgICAgICAgICAgICAgICBsb2dsbihtc2cxICsgc291cmNlICsgbXNnMiArIHRhcmdldCArIG1zZzMgKyBzUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4obXNnMSArIHNvdXJjZSArIG1zZzIgKyB0YXJnZXQgKyBtc2czICsgc1Jlc3VsdCArIG1zZzQgKyBzRXhwZWN0KTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgYXBwZW5kQ29tcGFyZVJlc3VsdChpbnQgcmVzdWx0LCBTdHJpbmcgdGFyZ2V0KXsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgICAgICAgdGFyZ2V0ICs9ICJMRVNTIjsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMCkgeworICAgICAgICAgICAgdGFyZ2V0ICs9ICJFUVVBTCI7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKyAgICAgICAgICAgIHRhcmdldCArPSAiR1JFQVRFUiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgaHVoID0gIj8iOworICAgICAgICAgICAgdGFyZ2V0ICs9IGh1aCArIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICBTdHJpbmcgcHJldHRpZnkoQ29sbGF0aW9uS2V5IHNvdXJjZUtleSkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgYnl0ZVtdIGJ5dGVzPSBzb3VyY2VLZXkudG9CeXRlQXJyYXkoKTsKKyAgICAgICAgU3RyaW5nIHRhcmdldCA9ICJbIjsKKyAgICAKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0YXJnZXQgKz0gSW50ZWdlci50b0hleFN0cmluZyhieXRlc1tpXSk7CisgICAgICAgICAgICB0YXJnZXQgKz0gIiAiOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSAiXSI7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb21wcmVzc2lvbi9EZWNvbXByZXNzaW9uVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbXByZXNzaW9uL0RlY29tcHJlc3Npb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjVkMTRiMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb21wcmVzc2lvbi9EZWNvbXByZXNzaW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29tcHJlc3Npb24vRGVjb21wcmVzc2lvblRlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTowNyAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmNvbXByZXNzaW9uOworCitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5Vbmljb2RlQ29tcHJlc3NvcjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlVuaWNvZGVEZWNvbXByZXNzb3I7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CisKK3B1YmxpYyBjbGFzcyBEZWNvbXByZXNzaW9uVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJbmV3IERlY29tcHJlc3Npb25UZXN0KCkucnVuKGFyZ3MpOworCX0KKworICAgIC8qKiBQcmludCBvdXQgYSBzZWdtZW50IG9mIGEgY2hhcmFjdGVyIGFycmF5LCBpZiBpbiB2ZXJib3NlIG1vZGUgKi8KKyAgICBwcml2YXRlIHZvaWQgbG9nKGNoYXIgW10gY2hhcnMsIGludCBzdGFydCwgaW50IGNvdW50KSB7CisgICAgICAgIGxvZygifCIpOworICAgICAgICBmb3IoaW50IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7ICsraSkgeworICAgICAgICAgICAgbG9nKFN0cmluZy52YWx1ZU9mKGNoYXJzW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgbG9nKCJ8Iik7CisgICAgfQorCisgICAgLyoqIFByaW50IG91dCBhIHNlZ21lbnQgb2YgYSBjaGFyYWN0ZXIgYXJyYXksIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSAqLworICAgIHByaXZhdGUgdm9pZCBsb2dsbihjaGFyIFtdIGNoYXJzLCBpbnQgc3RhcnQsIGludCBjb3VudCkKKyAgICB7CisgICAgICAgIGxvZyhjaGFycywgc3RhcnQsIGNvdW50KTsKKyAgICAgICAgbG9nbG4oIiIpOworICAgIH0KKworICAgIC8qKiBEZWNvbXByZXNzIHRoZSB0d28gc2VnbWVudHMgKi8KKyAgICBwcml2YXRlIFN0cmluZyBkZWNvbXByZXNzVGVzdChieXRlIFtdIHNlZ21lbnQxLCBieXRlIFtdIHNlZ21lbnQyKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBVbmljb2RlRGVjb21wcmVzc29yIG15RGVjb21wcmVzc29yID0gbmV3IFVuaWNvZGVEZWNvbXByZXNzb3IoKTsKKworICAgICAgICBpbnQgW10gYnl0ZXNSZWFkID0gbmV3IGludFsxXTsKKyAgICAgICAgY2hhciBbXSBjaGFyQnVmZmVyID0gbmV3IGNoYXIgWzIqKHNlZ21lbnQxLmxlbmd0aCArIHNlZ21lbnQyLmxlbmd0aCldOworICAgICAgICBpbnQgY291bnQxID0gMCwgY291bnQyID0gMDsKKworICAgICAgICBjb3VudDEgPSBteURlY29tcHJlc3Nvci5kZWNvbXByZXNzKHNlZ21lbnQxLCAwLCBzZWdtZW50MS5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNSZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJCdWZmZXIsIDAsIGNoYXJCdWZmZXIubGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGxvZ2xuKCJTZWdtZW50IDEgKCIgKyBzZWdtZW50MS5sZW5ndGggKyAiIGJ5dGVzKSAiICsKKyAgICAgICAgICAgICAgICAiZGVjb21wcmVzc2VkIGludG8gIiArIGNvdW50MSAgKyAiIGNoYXJzIik7CisgICAgICAgIGxvZ2xuKCJCeXRlcyBjb25zdW1lZDogIiArIGJ5dGVzUmVhZFswXSk7CisKKyAgICAgICAgbG9nbG4oIkdvdCBjaGFyczogIik7CisgICAgICAgIGxvZ2xuKGNoYXJCdWZmZXIsIDAsIGNvdW50MSk7CisgICAgICAgIHMuYXBwZW5kKGNoYXJCdWZmZXIsIDAsIGNvdW50MSk7CisKKyAgICAgICAgY291bnQyID0gbXlEZWNvbXByZXNzb3IuZGVjb21wcmVzcyhzZWdtZW50MiwgMCwgc2VnbWVudDIubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQnVmZmVyLCBjb3VudDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJCdWZmZXIubGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGxvZ2xuKCJTZWdtZW50IDIgKCIgKyBzZWdtZW50Mi5sZW5ndGggKyAiIGJ5dGVzKSAiICsKKyAgICAgICAgICAgICAgICAiZGVjb21wcmVzc2VkIGludG8gIiArIGNvdW50MiAgKyAiIGNoYXJzIik7CisgICAgICAgIGxvZ2xuKCJCeXRlcyBjb25zdW1lZDogIiArIGJ5dGVzUmVhZFswXSk7CisKKyAgICAgICAgbG9nbG4oIkdvdCBjaGFyczogIik7CisgICAgICAgIGxvZ2xuKGNoYXJCdWZmZXIsIGNvdW50MSwgY291bnQyKTsKKyAgICAgICAgCisgICAgICAgIHMuYXBwZW5kKGNoYXJCdWZmZXIsIGNvdW50MSwgY291bnQyKTsKKworICAgICAgICBsb2dsbigiUmVzdWx0OiAiKTsKKyAgICAgICAgbG9nbG4oY2hhckJ1ZmZlciwgMCwgY291bnQxICsgY291bnQyKTsKKyAgICAgICAgbG9nbG4oIj09PT09PT09PT09PT09PT09PT09Iik7CisKKyAgICAgICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKKyAgICB9CisKKworICAgIHB1YmxpYyB2b2lkIHRlc3REZWNvbXByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICAgICAgLy8gY29tcHJlc3NlZCBzZWdtZW50IGJyZWFraW5nIG9uIGEgZGVmaW5lIHdpbmRvdyBzZXF1ZW5jZQorICAgICAgICAvKiAgICAgICAgICAgICAgICAgICBCICAgICBvICAgICBvICAgICB0ICAgICBoICAgICBTRDEgICovCisgICAgICAgIGJ5dGUgW10gc2VnbWVudDEgPSB7IDB4NDIsIDB4NmYsIDB4NmYsIDB4NzQsIDB4NjgsIDB4MTkgfTsKKworICAgICAgICAvLyBjb250aW51YXRpb24KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgSURYICAgLCAgICAgICAgICAgUyAgICAgLiAgICAgICAgICAqLworICAgICAgICBieXRlIFtdIHNlZ21lbnQyID0geyAweDAxLCAweDJjLCAweDIwLCAweDUzLCAweDJlIH07CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzVGVzdChzZWdtZW50MSwgc2VnbWVudDIpOworICAgICAgICBpZighIHJlc3VsdC5lcXVhbHMoIkJvb3RoLCBTLiIpKSB7CisgICAgICAgIAllcnJsbigiRGVjb21wcmVzc2lvbiB0ZXN0IGZhaWxlZCIpOworICAgICAgICAJcmV0dXJuOworCQl9CisKKyAgICAgICAgLy8gY29tcHJlc3NlZCBzZWdtZW50IGJyZWFraW5nIG9uIGEgcXVvdGUgdW5pY29kZSBzZXF1ZW5jZQorICAgICAgICAvKiAgICAgICAgICAgICAgICAgICBCICAgICBvICAgICBvICAgICB0ICAgICBTUVUgICAgICAgICovCisgICAgICAgIGJ5dGUgW10gc2VnbWVudDMgPSB7IDB4NDIsIDB4NmYsIDB4NmYsIDB4NzQsIDB4MGUsIDB4MDAgfTsKKworICAgICAgICAvLyBjb250aW51YXRpb24KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgaCAgICAgLCAgICAgICAgICAgUyAgICAgLiAgICAgICAgICAqLworICAgICAgICBieXRlIFtdIHNlZ21lbnQ0ID0geyAweDY4LCAweDJjLCAweDIwLCAweDUzLCAweDJlIH07CisKKyAgICAgICAgcmVzdWx0ID0gZGVjb21wcmVzc1Rlc3Qoc2VnbWVudDMsIHNlZ21lbnQ0KTsKKyAgICAgICAgaWYoISByZXN1bHQuZXF1YWxzKCJCb290aCwgUy4iKSkgeworICAgICAgICAJZXJybG4oIkRlY29tcHJlc3Npb24gdGVzdCBmYWlsZWQiKTsKKyAgICAgICAgCXJldHVybjsKKwkJfQorCisKKyAgICAgICAgLy8gY29tcHJlc3NlZCBzZWdtZW50IGJyZWFraW5nIG9uIGEgcXVvdGUgdW5pY29kZSBzZXF1ZW5jZQorICAgICAgICAvKiAgICAgICAgICAgICAgICAgICBTQ1UgICBVUVUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgYnl0ZSBbXSBzZWdtZW50NSA9IHsgMHgwZiwgKGJ5dGUpMHhmMCwgMHgwMCB9OworCisgICAgICAgIC8vIGNvbnRpbnVhdGlvbgorICAgICAgICAvKiAgICAgICAgICAgICAgICAgICBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgYnl0ZSBbXSBzZWdtZW50NiA9IHsgMHg0MiB9OworCisgICAgICAgIHJlc3VsdCA9IGRlY29tcHJlc3NUZXN0KHNlZ21lbnQ1LCBzZWdtZW50Nik7CisgICAgICAgIGlmKCEgcmVzdWx0LmVxdWFscygiQiIpKSB7CisgICAgICAgIAllcnJsbigiRGVjb21wcmVzc2lvbiB0ZXN0IGZhaWxlZCIpOworICAgICAgICAJcmV0dXJuOworCQl9CisgICAgfQorCit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbXByZXNzaW9uL0V4aGF1c3RpdmVUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvY29tcHJlc3Npb24vRXhoYXVzdGl2ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjlhODAwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbXByZXNzaW9uL0V4aGF1c3RpdmVUZXN0LmphdmEKQEAgLTAsMCArMSw1MjkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb21wcmVzc2lvbi9FeGhhdXN0aXZlVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjA3ICQgCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuY29tcHJlc3Npb247CisKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlVuaWNvZGVDb21wcmVzc29yOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVW5pY29kZURlY29tcHJlc3NvcjsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworCitwdWJsaWMgY2xhc3MgRXhoYXVzdGl2ZVRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCW5ldyBFeGhhdXN0aXZlVGVzdCgpLnJ1bihhcmdzKTsKKwl9CisKKyAgICAvKiogVGVzdCBzaW1wbGUgY29tcHJlc3MvZGVjb21wcmVzcyBBUEksIHJldHVybmluZyAjIG9mIGVycm9ycyAqLworCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGZUZXN0Q2FzZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHNpbXBsZVRlc3QoZlRlc3RDYXNlc1tpXSk7CisgICAgICAgIH0KKwl9CisgICAgcHJpdmF0ZSB2b2lkIHNpbXBsZVRlc3QoU3RyaW5nIHMpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBieXRlIFtdIGNvbXByZXNzZWQgPSBVbmljb2RlQ29tcHJlc3Nvci5jb21wcmVzcyhzKTsKKyAgICAgICAgU3RyaW5nIHJlcyA9IFVuaWNvZGVEZWNvbXByZXNzb3IuZGVjb21wcmVzcyhjb21wcmVzc2VkKTsKKyAgICAgICAgaWYgKGxvZ0RpZmZzKHMudG9DaGFyQXJyYXkoKSwgcy5sZW5ndGgoKSwgCisgICAgICAgICAgICAgICAgcmVzLnRvQ2hhckFycmF5KCksIHJlcy5sZW5ndGgoKSkgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGxvZ2xuKHMubGVuZ3RoKCkgKyAiIGNoYXJzID09PT4gIiAKKyAgICAgICAgICAgICAgICAgICAgKyBjb21wcmVzc2VkLmxlbmd0aCArICIgYnl0ZXMgPT09PiAiIAorICAgICAgICAgICAgICAgICAgICArIHJlcy5sZW5ndGgoKSArICIgY2hhcnMiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ2xuKCJDb21wcmVzc2VkOiIpOworICAgICAgICAgICAgcHJpbnRCeXRlcyhjb21wcmVzc2VkLCBjb21wcmVzc2VkLmxlbmd0aCk7CisgICAgICAgICAgICBlcnJsbigidGVzdFNpbXBsZSBkaWQgbm90IGNvbXByZXNzIGNvcnJlY3RseSIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIFRlc3QgaXRlcmF0aXZlIGNvbXByZXNzL2RlY29tcHJlc3MgQVBJLCByZXR1cm5pbmcgIyBvZiBlcnJvcnMgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SXRlcmF0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBmVGVzdENhc2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBteVRlc3QoZlRlc3RDYXNlc1tpXS50b0NoYXJBcnJheSgpLCBmVGVzdENhc2VzW2ldLmxlbmd0aCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcml2YXRlIHZvaWQgbXlUZXN0KGNoYXJbXSBjaGFycywgaW50IGxlbikgeworICAgICAgICBVbmljb2RlQ29tcHJlc3NvciBteUNvbXByZXNzb3IgPSBuZXcgVW5pY29kZUNvbXByZXNzb3IoKTsKKyAgICAgICAgVW5pY29kZURlY29tcHJlc3NvciBteURlY29tcHJlc3NvciA9IG5ldyBVbmljb2RlRGVjb21wcmVzc29yKCk7CisgICAgICAgIAorICAgICAgICAvLyB2YXJpYWJsZXMgZm9yIG15IGNvbXByZXNzb3IKKyAgICAgICAgaW50IG15Qnl0ZUNvdW50ID0gMDsKKyAgICAgICAgaW50IG15Q2hhckNvdW50ID0gMDsKKyAgICAgICAgaW50IG15Q29tcHJlc3NlZFNpemUgPSBNYXRoLm1heCg1MTIsIDMqbGVuKTsKKyAgICAgICAgYnl0ZVtdIG15Q29tcHJlc3NlZCA9IG5ldyBieXRlW215Q29tcHJlc3NlZFNpemVdOworICAgICAgICBpbnQgbXlEZWNvbXByZXNzZWRTaXplID0gTWF0aC5tYXgoMiwgMiAqIGxlbik7CisgICAgICAgIGNoYXJbXSBteURlY29tcHJlc3NlZCA9IG5ldyBjaGFyW215RGVjb21wcmVzc2VkU2l6ZV07CisgICAgICAgIGludFtdIHVuaWNoYXJzUmVhZCA9IG5ldyBpbnRbMV07CisgICAgICAgIGludFtdIGJ5dGVzUmVhZCA9IG5ldyBpbnRbMV07CisgICAgICAgIAorICAgICAgICBteUJ5dGVDb3VudCA9IG15Q29tcHJlc3Nvci5jb21wcmVzcyhjaGFycywgMCwgbGVuLCB1bmljaGFyc1JlYWQsCisgICAgICAgICAgICAgICAgbXlDb21wcmVzc2VkLCAwLCBteUNvbXByZXNzZWRTaXplKTsKKworICAgICAgICBteUNoYXJDb3VudCA9IG15RGVjb21wcmVzc29yLmRlY29tcHJlc3MobXlDb21wcmVzc2VkLCAwLCBteUJ5dGVDb3VudCwKKyAgICAgICAgICAgICAgICBieXRlc1JlYWQsIG15RGVjb21wcmVzc2VkLCAwLCBteURlY29tcHJlc3NlZFNpemUpOworCisgICAgICAgIGlmIChsb2dEaWZmcyhjaGFycywgbGVuLCBteURlY29tcHJlc3NlZCwgbXlDaGFyQ291bnQpID09IGZhbHNlKSB7CisgICAgICAgICAgICBsb2dsbihsZW4gKyAiIGNoYXJzID09PT4gIiAKKyAgICAgICAgICAgICAgICAgICAgKyBteUJ5dGVDb3VudCArICIgYnl0ZXMgPT09PiAiIAorICAgICAgICAgICAgICAgICAgICArIG15Q2hhckNvdW50ICsgIiBjaGFycyIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nbG4oIkNvbXByZXNzZWQ6Iik7CisgICAgICAgICAgICBwcmludEJ5dGVzKG15Q29tcHJlc3NlZCwgbXlCeXRlQ291bnQpOworICAgICAgICAgICAgZXJybG4oIkl0ZXJhdGl2ZSB0ZXN0IGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIFRlc3QgaXRlcmF0aXZlIGNvbXByZXNzL2RlY29tcHJlc3MgQVBJICovCisgICAgcHVibGljIHZvaWQgdGVzdE11bHRpcGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZlRlc3RDYXNlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbXlNdWx0aXBhc3NUZXN0KGZUZXN0Q2FzZXNbaV0udG9DaGFyQXJyYXkoKSwgZlRlc3RDYXNlc1tpXS5sZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkIG15TXVsdGlwYXNzVGVzdChjaGFyIFtdIGNoYXJzLCBpbnQgbGVuKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVW5pY29kZUNvbXByZXNzb3IgbXlDb21wcmVzc29yID0gbmV3IFVuaWNvZGVDb21wcmVzc29yKCk7CisgICAgICAgIFVuaWNvZGVEZWNvbXByZXNzb3IgbXlEZWNvbXByZXNzb3IgPSBuZXcgVW5pY29kZURlY29tcHJlc3NvcigpOworICAgICAgICAKKyAgICAgICAgLy8gdmFyaWFibGVzIGZvciBteSBjb21wcmVzc29yCisgICAgICAgIAorICAgICAgICAvLyBmb3IgbG9vcGluZworICAgICAgICBpbnQgYnl0ZUJ1ZmZlclNpemUgPSA0Oy8vTWF0aC5tYXgoNCwgbGVuIC8gNCk7CisgICAgICAgIGJ5dGVbXSBieXRlQnVmZmVyID0gbmV3IGJ5dGUgW2J5dGVCdWZmZXJTaXplXTsKKyAgICAgICAgLy8gcmVhbCB0YXJnZXQKKyAgICAgICAgaW50IGNvbXByZXNzZWRTaXplID0gTWF0aC5tYXgoNTEyLCAzICogbGVuKTsKKyAgICAgICAgYnl0ZVtdIGNvbXByZXNzZWQgPSBuZXcgYnl0ZVtjb21wcmVzc2VkU2l6ZV07CisKKyAgICAgICAgLy8gZm9yIGxvb3BpbmcKKyAgICAgICAgaW50IHVuaWNoYXJCdWZmZXJTaXplID0gMjsvL2J5dGVCdWZmZXJTaXplOworICAgICAgICBjaGFyW10gdW5pY2hhckJ1ZmZlciA9IG5ldyBjaGFyW3VuaWNoYXJCdWZmZXJTaXplXTsKKyAgICAgICAgLy8gcmVhbCB0YXJnZXQKKyAgICAgICAgaW50IGRlY29tcHJlc3NlZFNpemUgPSBNYXRoLm1heCgyLCAyICogbGVuKTsKKyAgICAgICAgY2hhcltdIGRlY29tcHJlc3NlZCA9IG5ldyBjaGFyW2RlY29tcHJlc3NlZFNpemVdOworCisgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSAwOworICAgICAgICBpbnQgdW5pY2hhcnNXcml0dGVuID0gMDsKKworICAgICAgICBpbnRbXSB1bmljaGFyc1JlYWQgPSBuZXcgaW50WzFdOworICAgICAgICBpbnRbXSBieXRlc1JlYWQgPSBuZXcgaW50WzFdOworICAgICAgICAKKyAgICAgICAgaW50IHRvdGFsQ2hhcnNDb21wcmVzc2VkID0gMDsKKyAgICAgICAgaW50IHRvdGFsQnl0ZXNXcml0dGVuID0gMDsKKworICAgICAgICBpbnQgdG90YWxCeXRlc0RlY29tcHJlc3NlZCAgPSAwOworICAgICAgICBpbnQgdG90YWxDaGFyc1dyaXR0ZW4gPSAwOworCisgICAgICAgIC8vIG5vdCB1c2VkIGJvb2xlYW4gZXJyID0gZmFsc2U7CisKKworICAgICAgICAvLyBwZXJmb3JtIHRoZSBjb21wcmVzc2lvbiBpbiBhIGxvb3AKKyAgICAgICAgZG8geworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBkbyB0aGUgY29tcHJlc3Npb24KKyAgICAgICAgICAgIGJ5dGVzV3JpdHRlbiA9IG15Q29tcHJlc3Nvci5jb21wcmVzcyhjaGFycywgdG90YWxDaGFyc0NvbXByZXNzZWQsIAorICAgICAgICAgICAgICAgICAgIGxlbiwgdW5pY2hhcnNSZWFkLCBieXRlQnVmZmVyLCAwLCBieXRlQnVmZmVyU2l6ZSk7CisKKyAgICAgICAgICAgIC8vIGNvcHkgdGhlIGN1cnJlbnQgc2V0IG9mIGJ5dGVzIGludG8gdGhlIHRhcmdldCBidWZmZXIKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnl0ZUJ1ZmZlciwgMCwgY29tcHJlc3NlZCwgCisgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlc1dyaXR0ZW4sIGJ5dGVzV3JpdHRlbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgbm8uIG9mIGNoYXJhY3RlcnMgY29tcHJlc3NlZAorICAgICAgICAgICAgdG90YWxDaGFyc0NvbXByZXNzZWQgKz0gdW5pY2hhcnNSZWFkWzBdOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIG5vLiBvZiBieXRlcyB3cml0dGVuCisgICAgICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBieXRlc1dyaXR0ZW47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qU3lzdGVtLm91dC5sb2dsbigiQ29tcHJlc3Npb24gcGFzcyBjb21wbGV0ZS4gIENvbXByZXNzZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdW5pY2hhcnNSZWFkWzBdICsgIiBjaGFycyBpbnRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJ5dGVzV3JpdHRlbiArICIgYnl0ZXMuIik7Ki8KKyAgICAgICAgfSB3aGlsZSh0b3RhbENoYXJzQ29tcHJlc3NlZCA8IGxlbik7CisKKyAgICAgICAgaWYgKHRvdGFsQ2hhcnNDb21wcmVzc2VkICE9IGxlbikgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBOdW1iZXIgb2YgY2hhcmFjdGVycyBjb21wcmVzc2VkKCIKKyAgICAgICAgICAgICAgICAgICAgKyB0b3RhbENoYXJzQ29tcHJlc3NlZCArICIpICE9IGxlbigiICsgbGVuICsgIikiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ2xuKCJNUDogIiArIGxlbiArICIgY2hhcnMgPT09PiAiICsgdG90YWxCeXRlc1dyaXR0ZW4gKyAiIGJ5dGVzLiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBwZXJmb3JtIHRoZSBkZWNvbXByZXNzaW9uIGluIGEgbG9vcAorICAgICAgICBkbyB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGRvIHRoZSBkZWNvbXByZXNzaW9uCisgICAgICAgICAgICB1bmljaGFyc1dyaXR0ZW4gPSBteURlY29tcHJlc3Nvci5kZWNvbXByZXNzKGNvbXByZXNzZWQsIAorICAgICAgICAgICAgICAgICAgICB0b3RhbEJ5dGVzRGVjb21wcmVzc2VkLCB0b3RhbEJ5dGVzV3JpdHRlbiwgCisgICAgICAgICAgICAgICAgICAgIGJ5dGVzUmVhZCwgdW5pY2hhckJ1ZmZlciwgMCwgdW5pY2hhckJ1ZmZlclNpemUpOworCisgICAgICAgICAgICAvLyBjb3B5IHRoZSBjdXJyZW50IHNldCBvZiBjaGFycyBpbnRvIHRoZSB0YXJnZXQgYnVmZmVyCisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHVuaWNoYXJCdWZmZXIsIDAsIGRlY29tcHJlc3NlZCwgCisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnNXcml0dGVuLCB1bmljaGFyc1dyaXR0ZW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIG5vLiBvZiBieXRlcyBkZWNvbXByZXNzZWQKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNEZWNvbXByZXNzZWQgKz0gYnl0ZXNSZWFkWzBdOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIG5vLiBvZiBjaGFycyB3cml0dGVuCisgICAgICAgICAgICB0b3RhbENoYXJzV3JpdHRlbiArPSB1bmljaGFyc1dyaXR0ZW47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qU3lzdGVtLm91dC5sb2dsbigiRGVjb21wcmVzc2lvbiBwYXNzIGNvbXBsZXRlLiAgRGVjb21wcmVzc2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJ5dGVzUmVhZFswXSArICIgYnl0ZXMgaW50byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB1bmljaGFyc1dyaXR0ZW4gKyAiIGNoYXJzLiIpOyovCisgICAgICAgIH0gd2hpbGUgKHRvdGFsQnl0ZXNEZWNvbXByZXNzZWQgPCB0b3RhbEJ5dGVzV3JpdHRlbik7CisKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWNvbXByZXNzZWQgIT0gdG90YWxCeXRlc1dyaXR0ZW4pIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogTnVtYmVyIG9mIGJ5dGVzIGRlY29tcHJlc3NlZCgiIAorICAgICAgICAgICAgICAgICAgICArIHRvdGFsQnl0ZXNEZWNvbXByZXNzZWQgCisgICAgICAgICAgICAgICAgICAgICsgIikgIT0gdG90YWxCeXRlc1dyaXR0ZW4oIiAKKyAgICAgICAgICAgICAgICAgICAgKyB0b3RhbEJ5dGVzV3JpdHRlbiArICIpIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiTVA6ICIgKyB0b3RhbEJ5dGVzV3JpdHRlbgorICAgICAgICAgICAgICAgICAgICArICIgYnl0ZXMgPT09PiAiICsgdG90YWxDaGFyc1dyaXR0ZW4gKyAiIGNoYXJzLiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobG9nRGlmZnMoY2hhcnMsIGxlbiwgZGVjb21wcmVzc2VkLCB0b3RhbENoYXJzV3JpdHRlbikpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogYnVmZmVyIGNvbnRlbnRzIGluY29ycmVjdCIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIFByaW50IGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIGNoYXJhY3RlciBidWZmZXJzICovCisgICAgcHJpdmF0ZSBib29sZWFuIGxvZ0RpZmZzKGNoYXJbXSBzMSwgaW50IHMxbGVuLCBjaGFyW10gczIsIGludCBzMmxlbikgeworICAgICAgICBib29sZWFuIHJlc3VsdCAgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmKHMxbGVuICE9IHMybGVuKSB7CisgICAgICAgICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgICAgIGxvZ2xuKCJMZW5ndGggZG9lc24ndCBtYXRjaDogZXhwZWN0ZWQgIiArIHMxbGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBnb3QgIiArIHMybGVuKTsKKyAgICAgICAgICAgIGxvZ2xuKCJFeHBlY3RlZDoiKTsKKyAgICAgICAgICAgIHByaW50Q2hhcnMoczEsIHMxbGVuKTsKKyAgICAgICAgICAgIGxvZ2xuKCJHb3Q6Iik7CisgICAgICAgICAgICBwcmludENoYXJzKHMyLCBzMmxlbik7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgbGVuID0gTWF0aC5taW4oczFsZW4sIHMybGVuKTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICBpZihzMVtpXSAhPSBzMltpXSkgeworICAgICAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9nbG4oIkZpcnN0IGRpZmZlcmVuY2UgYXQgY2hhciAiICsgaSk7CisgICAgICAgICAgICAgICAgbG9nbG4oIkV4cC4gY2hhcjogIiArIEludGVnZXIudG9IZXhTdHJpbmcoczFbaV0pKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiR290IGNoYXIgOiAiICsgSW50ZWdlci50b0hleFN0cmluZyhzMltpXSkpOworICAgICAgICAgICAgICAgIGxvZ2xuKCJFeHBlY3RlZDoiKTsKKyAgICAgICAgICAgICAgICBwcmludENoYXJzKHMxLCBzMWxlbik7CisgICAgICAgICAgICAgICAgbG9nbG4oIkdvdDoiKTsKKyAgICAgICAgICAgICAgICBwcmludENoYXJzKHMyLCBzMmxlbik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIGdlbmVyYXRlIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMsIHdpdGggc2ltdWxhdGVkIHJ1bnMgb2YgY2hhcmFjdGVycworICAgIHByaXZhdGUgc3RhdGljIGNoYXJbXSByYW5kb21DaGFycyhpbnQgbGVuLCBSYW5kb20gcmFuZG9tKSB7CisgICAgICAgIGNoYXJbXSByZXN1bHQgPSBuZXcgY2hhciBbbGVuXTsKKyAgICAgICAgaW50IHJ1bkxlbiA9IDA7CisgICAgICAgIGludCB1c2VkID0gMDsKKyAgICAgICAgCisgICAgICAgIHdoaWxlKHVzZWQgPCBsZW4pIHsKKyAgICAgICAgICAgIHJ1bkxlbiA9IChpbnQpICgzMCAqIHJhbmRvbS5uZXh0RG91YmxlKCkpOworICAgICAgICAgICAgaWYodXNlZCArIHJ1bkxlbiA+PSBsZW4pIHsKKyAgICAgICAgICAgICAgICBydW5MZW4gPSBsZW4gLSB1c2VkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmFuZG9tUnVuKHJlc3VsdCwgdXNlZCwgcnVuTGVuLCByYW5kb20pOworICAgICAgICAgICAgdXNlZCArPSBydW5MZW47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBnZW5lcmF0ZSBhIHJ1biBvZiBjaGFyYWN0ZXJzIGluIGEgIndpbmRvdyIKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHJhbmRvbVJ1bihjaGFyW10gdGFyZ2V0LCBpbnQgcG9zLCBpbnQgbGVuLCBSYW5kb20gcmFuZG9tKSB7CisgICAgICAgIGludCBvZmZzZXQgPSAoaW50KSAoMHhGRkZGICogcmFuZG9tLm5leHREb3VibGUoKSk7CisKKyAgICAgICAgLy8gZG9uJ3Qgb3ZlcmZsb3cgMTYgYml0cworICAgICAgICBpZihvZmZzZXQgPiAweEZGODApIHsKKyAgICAgICAgICAgIG9mZnNldCA9IDB4RkY4MDsKKyAgICAgICAgfQorCisgICAgICAgIGZvcihpbnQgaSA9IHBvczsgaSA8IHBvcyArIGxlbjsgaSsrKSB7CisgICAgICAgICAgICB0YXJnZXRbaV0gPSAoY2hhcikob2Zmc2V0ICsgKDB4N0YgKiByYW5kb20ubmV4dERvdWJsZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgW10gZlRlc3RDYXNlcyA9IHsKKyAgICAgICAgIkhlbGxvIFx1OTI5MiBcdTkxOTIgV29ybGQhIiwKKyAgICAgICAgIkhlbGxcdTA0MjlvIFx1OTI5MiBcdTkxOTIgV1x1MDA4NHJsZCEiLAorICAgICAgICAiSGVsbFx1MDQyOW8gXHU5MjkyIFx1OTI5MldcdTAwODRybGQhIiwKKworICAgICAgICAiXHUwNjQ4XHUwNmM4IiwgLy8gY2F0Y2ggbWlzc2luZyByZXNldAorICAgICAgICAiXHUwNjQ4XHUwNmM4IiwKKworICAgICAgICAiXHU0NDQ0XHVFMDAxIiwgLy8gbG93ZXN0IHF1b3RhYmxlCisgICAgICAgICJcdTQ0NDRcdWYyRkYiLCAvLyBoaWdoZXN0IHF1b3RhYmxlCisgICAgICAgICJcdTQ0NDRcdWYxODhcdTQ0NDQiLAorICAgICAgICAiXHU0NDQ0XHVmMTg4XHVmMjg4IiwKKyAgICAgICAgIlx1NDQ0NFx1ZjE4OGFiY1wwNDI5XHVmMjg4IiwKKyAgICAgICAgIlx1OTI5Mlx1MjIyMiIsCisgICAgICAgICJIZWxsXHUwNDI5XHUwNDIzMG8gXHU5MjkyIFx1OTI5MldcdTAwODRcdTAxOTJybGQhIiwKKyAgICAgICAgIkhlbGxcdTA0MjlvIFx1OTI5MiBcdTkyOTJXXHUwMDg0cmxkISIsCisgICAgICAgICJIZWxsbyBXb3JsZCExMjM0NTYiLAorICAgICAgICAiSGVsbG8gV1x1MDA4MVx1MDExZlx1MDA4MiEiLCAvLyBMYXRpbiAxIHJ1bgorCisgICAgICAgICJhYmNcdTAzMDFcdTAzMDIiLCAgLy8gdXNlcyBTUW4gZm9yIHUzMDEgdTMwMgorICAgICAgICAiYWJjXHU0NDExZCIsICAgICAgLy8gdXNlcyBTUVUKKyAgICAgICAgImFiY1x1NDQxMVx1NDQxMmQiLC8vIHVzZXMgU0NVCisgICAgICAgICJhYmNcdTA0MDFcdTA0MDJcdTA0N2ZcdTAwYTVcdTA0MDUiLCAvLyB1c2VzIFNRbiBmb3IgdWE1CisgICAgICAgICJcdTkxOTFcdTkxOTFcdTMwNDFcdTkxOTFcdTMwNDFcdTMwNDFcdTMwMDAiLCAvLyBTSklTIGxpa2UgZGF0YQorICAgICAgICAiXHU5MjkyXHUyMjIyIiwKKyAgICAgICAgIlx1OTE5MVx1OTE5MVx1MzA0MVx1OTE5MVx1MzA0MVx1MzA0MVx1MzAwMCIsCisgICAgICAgICJcdTk5OTlcdTMwNTFcdTMwMGNcdTk5OTlcdTk5OTlcdTMwNjBcdTk5OTlcdTMwNjVcdTMwNjVcdTMwNjVcdTMwMGMiLAorICAgICAgICAiXHUzMDAwXHUyNjZhXHUzMGVhXHUzMGYzXHUzMGI0XHU1M2VmXHU2MTFiXHUzMDQ0XHUzMDg0XHU1M2VmXHU2MTFiXHUzMDQ0XHUzMDg0XHUzMGVhXHUzMGYzXHUzMGI0XHUzMDAyIiwKKworICAgICAgICAiIiwgLy8gZW1wdHkgaW5wdXQKKyAgICAgICAgIlx1MDAwMCIsIC8vIHNtYWxsZXN0IEJNUCBjaGFyYWN0ZXIKKyAgICAgICAgIlx1RkZGRiIsIC8vIGxhcmdlc3QgQk1QIGNoYXJhY3RlcgorCisgICAgICAgICJcdWQ4MDBcdWRjMDAiLCAvLyBzbWFsbGVzdCBzdXJyb2dhdGUKKyAgICAgICAgIlx1ZDhmZlx1ZGNmZiIsIC8vIGxhcmdlc3Qgc3Vycm9nYXRlIHBhaXIKKyAgICAgICAgCisgICAgICAgIC8vIHJlZ3Jlc3Npb24gdGVzdHMKKyAgICAgICAgIlx1NjQ0MVx1YjQxM1x1YTczM1x1ZjhmZVx1ZWVkYlx1NTg3Zlx1MTk1Zlx1NDg5OVx1ZjIzZFx1NDlmZFx1MGFhY1x1NTc5Mlx1ZmMyMlx1ZmMzY1x1ZmM0Nlx1MDBhYSIsCisgICAgICAgICJcdTMwZjlcdTgzMjFcdTA1ZTVcdTE4MWNcdWQ3MmJcdTIwMTlcdTk5YzlcdTJmMmZcdWMxMGNcdTgyZTFcdTJjNGRcdTFlYmNcdTYwMTNcdTY2ZGNcdWJiZGVcdTk0YTVcdTQ3MjZcdTc0YWZcdTMwODNcdTU1YjlcdTAwMGMiLAorICAgICAgICAiXHUwMDQxXHUwMGRmXHUwNDAxXHUwMTVmIiwKKyAgICAgICAgIlx1OTA2Nlx1MjEyM2FiYyIsCisgICAgICAgICJcdWQyNjZcdTQzZDdcXFx1ZTM4Nlx1YzljMFx1NGE2Ylx1OTIyMlx1OTAxZlx1NzQxMFx1YTYzZlx1NTM5Ylx1OTU5Nlx1NDgyZVx1OWQ0N1x1Y2ZlNFx1N2I3MVx1YzI4MFx1ZjI2YVx1OTgyZlx1ODYyYVx1NGVkZFx1ZjUxM1x1ZmRhNlx1ODY5ZFx1MmVlMFx1YTIxNlx1M2ZmNlx1M2M3MFx1ODljMFx1OTU3Nlx1ZDVlY1x1YmZkYVx1NmNjYVx1NWJiM1x1YmNlYVx1NTU0Y1x1OTE0ZVx1ZmE0YVx1ZWRlM1x1Mjk5MFx1ZDJmNVx1MjcyOVx1NTE0MVx1MGYyNlx1Y2NkOFx1NTQxM1x1ZDE5Nlx1YmJlMlx1NTFiOVx1OWI0OFx1MGRjOFx1MjE5NVx1MjFhMlx1MjFlOVx1MDBlNFx1OWQ5Mlx1MGJjMFx1MDZjNSIsCisgICAgICAgICJcdWY5NWJcdTI0NThcdTI0NjhcdTBlMjBcdWY1MWJcdWUzNmVcdWJmYzFcdTAwODBcdTAyZGRcdWYxYjVcdTBjZjNcdTYwNTlcdTc0ODkiCisKKyAgICB9OworCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIENvbXByZXNzaW9uIG1vZGVzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTSU5HTEVCWVRFTU9ERSAgICAgICAgICAgICAgICAgPSAwOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBVTklDT0RFTU9ERSAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKKyAgICAKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gU2luZ2xlLWJ5dGUgbW9kZSB0YWdzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTREVGSU5FWCAgICAgICAgICAgICAgICAgICA9IDB4MEI7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNSRVNFUlZFRCAgICAgICAgICAgICAgICAgID0gMHgwQzsgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIHJlc2VydmVkIHZhbHVlCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNRVU9URVUgICAgICAgICAgICAgICAgICAgID0gMHgwRTsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU1NXSVRDSFUgICAgICAgICAgICAgICAgICAgPSAweDBGOworCisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTUVVPVEUwICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAxOworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU1FVT1RFMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDM7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTUVVPVEUzICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0OworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU1FVT1RFNCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTUgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDY7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTUVVPVEU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNzsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTcgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDg7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNTV0lUQ0gwICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTA7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTU1dJVENIMSAgICAgICAgICAgICAgICAgICAgICAgPSAweDExOworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU1NXSVRDSDIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMjsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNTV0lUQ0gzICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTM7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTU1dJVENINCAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0OworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU1NXSVRDSDUgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNTV0lUQ0g2ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTY7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTU1dJVENINyAgICAgICAgICAgICAgICAgICAgICAgPSAweDE3OworCisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTREVGSU5FMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDE4OworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTEgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNERUZJTkUyICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUE7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTREVGSU5FMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDFCOworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTQgICAgICAgICAgICAgICAgICAgICAgID0gMHgxQzsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFNERUZJTkU1ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUQ7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBTREVGSU5FNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFOworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTcgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjsKKworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vIFVuaWNvZGUgbW9kZSB0YWdzCisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFVTV0lUQ0gwICAgICAgICAgICAgICAgICAgICAgICA9IDB4RTA7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBVU1dJVENIMSAgICAgICAgICAgICAgICAgICAgICAgPSAweEUxOworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgVVNXSVRDSDIgICAgICAgICAgICAgICAgICAgICAgID0gMHhFMjsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFVTV0lUQ0gzICAgICAgICAgICAgICAgICAgICAgICA9IDB4RTM7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBVU1dJVENINCAgICAgICAgICAgICAgICAgICAgICAgPSAweEU0OworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgVVNXSVRDSDUgICAgICAgICAgICAgICAgICAgICAgID0gMHhFNTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFVTV0lUQ0g2ICAgICAgICAgICAgICAgICAgICAgICA9IDB4RTY7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBVU1dJVENINyAgICAgICAgICAgICAgICAgICAgICAgPSAweEU3OworCisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBVREVGSU5FMCAgICAgICAgICAgICAgICAgICAgICAgPSAweEU4OworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTEgICAgICAgICAgICAgICAgICAgICAgID0gMHhFOTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkUyICAgICAgICAgICAgICAgICAgICAgICA9IDB4RUE7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBVREVGSU5FMyAgICAgICAgICAgICAgICAgICAgICAgPSAweEVCOworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTQgICAgICAgICAgICAgICAgICAgICAgID0gMHhFQzsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkU1ICAgICAgICAgICAgICAgICAgICAgICA9IDB4RUQ7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBVREVGSU5FNiAgICAgICAgICAgICAgICAgICAgICAgPSAweEVFOworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTcgICAgICAgICAgICAgICAgICAgICAgID0gMHhFRjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgVVFVT1RFVSAgICAgICAgICAgICAgICAgICAgICAgID0gMHhGMDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkVYICAgICAgICAgICAgICAgICAgICAgICA9IDB4RjE7CisgICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBVUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAgPSAweEYyOyAgICAgICAgIC8vIHRoaXMgaXMgYSByZXNlcnZlZCB2YWx1ZQorCisgICAgLyogUHJpbnQgb3V0IGFuIGFycmF5IG9mIGNoYXJhY3RlcnMsIHdpdGggbm9uLXByaW50YWJsZXMgKGZvciBtZSkgCisgICAgICAgZGlzcGxheWVkIGFzIGhleCB2YWx1ZXMgKi8KKyAgICBwcml2YXRlIHZvaWQgcHJpbnRDaGFycyhjaGFyW10gY2hhcnMsIGludCBsZW4pIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBpbnQgYyA9IChpbnQpY2hhcnNbaV07CisgICAgICAgICAgICBpZihjIDwgMHgwMDIwIHx8IGMgPj0gMHg3ZikgeworICAgICAgICAgICAgICAgIGxvZygiWzB4Iik7CisgICAgICAgICAgICAgICAgbG9nKEludGVnZXIudG9IZXhTdHJpbmcoYykpOworICAgICAgICAgICAgICAgIGxvZygiXSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2coU3RyaW5nLnZhbHVlT2YoKGNoYXIpYykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxvZ2xuKCIiKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcHJpbnRCeXRlcyhieXRlW10gYnl0ZUJ1ZmZlciwgaW50IGxlbikgeworICAgICAgICBpbnQgY3VyQnl0ZUluZGV4ID0gMDsKKyAgICAgICAgaW50IGJ5dGVCdWZmZXJMaW1pdCA9IGxlbjsKKyAgICAgICAgaW50IG1vZGUgPSBTSU5HTEVCWVRFTU9ERTsKKyAgICAgICAgaW50IGFCeXRlID0gMHgwMDsKKyAgICAgICAgCisgICAgICAgIGlmKGxlbiA+IGJ5dGVCdWZmZXIubGVuZ3RoKSB7CisgICAgICAgICAgICBsb2dsbigiV2FybmluZzogcHJpbnRCeXRlcyBjYWxsZWQgd2l0aCBsZW5ndGggdG9vIGxhcmdlLiBUcnVuY2F0aW5nIik7CisgICAgICAgICAgICBieXRlQnVmZmVyTGltaXQgPSBieXRlQnVmZmVyLmxlbmd0aDs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHdoaWxlKGN1ckJ5dGVJbmRleCA8IGJ5dGVCdWZmZXJMaW1pdCkgeworICAgICAgICAgICAgc3dpdGNoKG1vZGUpIHsgIAorICAgICAgICAgICAgY2FzZSBTSU5HTEVCWVRFTU9ERToKKyAgICAgICAgICAgICAgICB3aGlsZShjdXJCeXRlSW5kZXggPCBieXRlQnVmZmVyTGltaXQgCisgICAgICAgICAgICAgICAgICAgICAgJiYgbW9kZSA9PSBTSU5HTEVCWVRFTU9ERSkgIHsKKyAgICAgICAgICAgICAgICAgICAgYUJ5dGUgPSAoKGludClieXRlQnVmZmVyW2N1ckJ5dGVJbmRleCsrXSkgJiAweEZGOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goYUJ5dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhJbnRlZ2VyLnRvSGV4U3RyaW5nKCgoaW50KSBhQnl0ZSkgJiAweEZGKSArICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHF1b3RlIHVuaWNvZGUKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTUVVPVEVVOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJTUVVPVEVVICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckJ5dGVJbmRleCA8IGJ5dGVCdWZmZXJMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhJbnRlZ2VyLnRvSGV4U3RyaW5nKCgoaW50KSBieXRlQnVmZmVyW2N1ckJ5dGVJbmRleCsrXSkgJiAweEZGKSArICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQnl0ZUluZGV4IDwgYnl0ZUJ1ZmZlckxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKEludGVnZXIudG9IZXhTdHJpbmcoKChpbnQpIGJ5dGVCdWZmZXJbY3VyQnl0ZUluZGV4KytdKSAmIDB4RkYpICsgIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzd2l0Y2ggdG8gVW5pY29kZSBtb2RlCisgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NXSVRDSFU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlNTV0lUQ0hVICIpOworICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFVOSUNPREVNT0RFOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBhbGwgcXVvdGUgdGFncworICAgICAgICAgICAgICAgICAgICBjYXNlIFNRVU9URTA6IGNhc2UgU1FVT1RFMTogY2FzZSBTUVVPVEUyOiBjYXNlIFNRVU9URTM6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU1FVT1RFNDogY2FzZSBTUVVPVEU1OiBjYXNlIFNRVU9URTY6IGNhc2UgU1FVT1RFNzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiU1FVT1RFIiArIChhQnl0ZSAtIFNRVU9URTApICsgIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGN1ckJ5dGVJbmRleCA8IGJ5dGVCdWZmZXJMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhJbnRlZ2VyLnRvSGV4U3RyaW5nKCgoaW50KSBieXRlQnVmZmVyW2N1ckJ5dGVJbmRleCsrXSkgJiAweEZGKSArICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGFsbCBzd2l0Y2ggdGFncworICAgICAgICAgICAgICAgICAgICBjYXNlIFNTV0lUQ0gwOiBjYXNlIFNTV0lUQ0gxOiBjYXNlIFNTV0lUQ0gyOiBjYXNlIFNTV0lUQ0gzOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFNTV0lUQ0g0OiBjYXNlIFNTV0lUQ0g1OiBjYXNlIFNTV0lUQ0g2OiBjYXNlIFNTV0lUQ0g3OgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJTU1dJVENIIiArIChhQnl0ZSAtIFNTV0lUQ0gwKSArICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBhbGwgZGVmaW5lIHRhZ3MKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTREVGSU5FMDogY2FzZSBTREVGSU5FMTogY2FzZSBTREVGSU5FMjogY2FzZSBTREVGSU5FMzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTREVGSU5FNDogY2FzZSBTREVGSU5FNTogY2FzZSBTREVGSU5FNjogY2FzZSBTREVGSU5FNzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiU0RFRklORSIgKyAoYUJ5dGUgLSBTREVGSU5FMCkgKyAiICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckJ5dGVJbmRleCA8IGJ5dGVCdWZmZXJMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhJbnRlZ2VyLnRvSGV4U3RyaW5nKCgoaW50KSBieXRlQnVmZmVyW2N1ckJ5dGVJbmRleCsrXSkgJiAweEZGKSArICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGRlZmluZSBleHRlbmRlZCB0YWcKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTREVGSU5FWDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiU0RFRklORVggIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQnl0ZUluZGV4IDwgYnl0ZUJ1ZmZlckxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKEludGVnZXIudG9IZXhTdHJpbmcoKChpbnQpIGJ5dGVCdWZmZXJbY3VyQnl0ZUluZGV4KytdKSAmIDB4RkYpICsgIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJCeXRlSW5kZXggPCBieXRlQnVmZmVyTGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coSW50ZWdlci50b0hleFN0cmluZygoKGludCkgYnl0ZUJ1ZmZlcltjdXJCeXRlSW5kZXgrK10pICYgMHhGRikgKyAiICIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgc3dpdGNoCisgICAgICAgICAgICAgICAgfSAvLyBlbmQgd2hpbGUKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVU5JQ09ERU1PREU6CisgICAgICAgICAgICAgICAgd2hpbGUoY3VyQnl0ZUluZGV4IDwgYnl0ZUJ1ZmZlckxpbWl0ICYmIG1vZGUgPT0gVU5JQ09ERU1PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgYUJ5dGUgPSAoKGludClieXRlQnVmZmVyW2N1ckJ5dGVJbmRleCsrXSkgJiAweEZGOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goYUJ5dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBhbGwgZGVmaW5lIHRhZ3MKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVREVGSU5FMDogY2FzZSBVREVGSU5FMTogY2FzZSBVREVGSU5FMjogY2FzZSBVREVGSU5FMzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVREVGSU5FNDogY2FzZSBVREVGSU5FNTogY2FzZSBVREVGSU5FNjogY2FzZSBVREVGSU5FNzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiVURFRklORSIgKyAoYUJ5dGUgLSBVREVGSU5FMCkgKyAiICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckJ5dGVJbmRleCA8IGJ5dGVCdWZmZXJMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhJbnRlZ2VyLnRvSGV4U3RyaW5nKCgoaW50KSBieXRlQnVmZmVyW2N1ckJ5dGVJbmRleCsrXSkgJiAweEZGKSArICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gU0lOR0xFQllURU1PREU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGRlZmluZSBleHRlbmRlZCB0YWcKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVREVGSU5FWDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiVURFRklORVggIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQnl0ZUluZGV4IDwgYnl0ZUJ1ZmZlckxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKEludGVnZXIudG9IZXhTdHJpbmcoKChpbnQpIGJ5dGVCdWZmZXJbY3VyQnl0ZUluZGV4KytdKSAmIDB4RkYpICsgIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJCeXRlSW5kZXggPCBieXRlQnVmZmVyTGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coSW50ZWdlci50b0hleFN0cmluZygoKGludCkgYnl0ZUJ1ZmZlcltjdXJCeXRlSW5kZXgrK10pICYgMHhGRikgKyAiICIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBhbGwgc3dpdGNoIHRhZ3MKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVU1dJVENIMDogY2FzZSBVU1dJVENIMTogY2FzZSBVU1dJVENIMjogY2FzZSBVU1dJVENIMzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVU1dJVENINDogY2FzZSBVU1dJVENINTogY2FzZSBVU1dJVENINjogY2FzZSBVU1dJVENINzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiVVNXSVRDSCIgKyAoYUJ5dGUgLSBVU1dJVENIMCkgKyAiICIpOworICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFNJTkdMRUJZVEVNT0RFOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHF1b3RlIHVuaWNvZGUKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVUVVPVEVVOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJVUVVPVEVVICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckJ5dGVJbmRleCA8IGJ5dGVCdWZmZXJMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhJbnRlZ2VyLnRvSGV4U3RyaW5nKCgoaW50KSBieXRlQnVmZmVyW2N1ckJ5dGVJbmRleCsrXSkgJiAweEZGKSArICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQnl0ZUluZGV4IDwgYnl0ZUJ1ZmZlckxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKEludGVnZXIudG9IZXhTdHJpbmcoKChpbnQpIGJ5dGVCdWZmZXJbY3VyQnl0ZUluZGV4KytdKSAmIDB4RkYpICsgIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2coSW50ZWdlci50b0hleFN0cmluZygoKGludCkgYUJ5dGUpICYgMHhGRikgKyAiICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckJ5dGVJbmRleCA8IGJ5dGVCdWZmZXJMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhJbnRlZ2VyLnRvSGV4U3RyaW5nKCgoaW50KSBieXRlQnVmZmVyW2N1ckJ5dGVJbmRleCsrXSkgJiAweEZGKSArICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKKyAgICAgICAgICAgICAgICB9IC8vIGVuZCB3aGlsZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSAvLyBlbmQgc3dpdGNoKCBtb2RlICkKKyAgICAgICAgfSAvLyBlbmQgd2hpbGUKKyAgICAgICAgCisgICAgICAgIGxvZ2xuKCIiKTsKKyAgICB9ICAgIAorfQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2NvbXByZXNzaW9uL3BhY2thZ2UuaHRtbCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb21wcmVzc2lvbi9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzE4YjNjYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb21wcmVzc2lvbi9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9jb21wcmVzc2lvbi9wYWNrYWdlLmh0bWwsdiAkCisgICRSZXZpc2lvbjogMS4xICQKKyAgJERhdGU6IDIwMDAvMDMvMTUgMjE6MzU6NDkgJAorLS0+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSI+CitUZXN0cyBmb3IgdGhlIGNvbXByZXNzaW9uIGNsYXNzZXMuCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9CaWdOdW1iZXJGb3JtYXRUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0JpZ051bWJlckZvcm1hdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xODczOWNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9CaWdOdW1iZXJGb3JtYXRUZXN0LmphdmEKQEAgLTAsMCArMSw0MjcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvQmlnTnVtYmVyRm9ybWF0VGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzI1IDIyOjQzOjU5ICQgCisgKiAkUmV2aXNpb246IDEuMTQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIEB0ZXN0CisgKiBHZW5lcmFsIHRlc3Qgb2YgQmlnIE51bWJlckZvcm1hdAorICovCitwdWJsaWMgY2xhc3MgQmlnTnVtYmVyRm9ybWF0VGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKworICAgIHN0YXRpYyBmaW5hbCBpbnQgSUxMRUdBTCA9IC0xOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBCaWdOdW1iZXJGb3JtYXRUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAJCisgICAgcHVibGljIHZvaWQgVGVzdEV4cG9uZW50KCkgeworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBVUyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICBEZWNpbWFsRm9ybWF0IGZtdDEgPSBuZXcgRGVjaW1hbEZvcm1hdCgiMC4jIyNFMCIsIFVTKTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQyID0gbmV3IERlY2ltYWxGb3JtYXQoIjAuIyMjRSswIiwgVVMpOworICAgICAgICBOdW1iZXIgbiA9IG5ldyBMb25nKDEyMzQpOworICAgICAgICBleHBlY3QoZm10MSwgbiwgIjEuMjM0RTMiKTsKKyAgICAgICAgZXhwZWN0KGZtdDIsIG4sICIxLjIzNEUrMyIpOworICAgICAgICBleHBlY3QoZm10MSwgIjEuMjM0RTMiLCBuKTsKKyAgICAgICAgZXhwZWN0KGZtdDEsICIxLjIzNEUrMyIsIG4pOyAvLyBFaXRoZXIgZm9ybWF0IHNob3VsZCBwYXJzZSAiRSszIgorICAgICAgICBleHBlY3QoZm10MiwgIjEuMjM0RSszIiwgbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgZnVuY3Rpb25pbmcgb2YgdGhlIHNlY29uZGFyeSBncm91cGluZyB2YWx1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0U2Vjb25kYXJ5R3JvdXBpbmcoKSB7CisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIFVTID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5VUyk7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjLCMjLCMjIyIsIFVTKTsKKyAgICAgICAgZXhwZWN0KGYsIG5ldyBMb25nKDEyMzQ1Njc4OSksICIxMiwzNCw1Niw3ODkiKTsKKyAgICAgICAgZXhwZWN0UGF0KGYsICIjLCMjLCMjIyIpOworICAgICAgICBmLmFwcGx5UGF0dGVybigiIywjIyMiKTsKKyAgICAgICAgZi5zZXRTZWNvbmRhcnlHcm91cGluZ1NpemUoNCk7CisgICAgICAgIGV4cGVjdChmLCBuZXcgTG9uZygxMjM0NTY3ODkpLCAiMTIsMzQ1Niw3ODkiKTsKKyAgICAgICAgZXhwZWN0UGF0KGYsICIjLCMjIyMsIyMjIik7CisKKyAgICAgICAgLy8gT24gU3VuIEpESyAxLjItMS4zLCB0aGUgaGlfSU4gbG9jYWxlIHVzZXMgJzAnIGZvciBhIHplcm8gZGlnaXQsCisgICAgICAgIC8vIGJ1dCBvbiBJQk0gSkRLIDEuMi0xLjMsIHRoZSBsb2NhbGUgdXNlcyBVKzA5NjYuCisgICAgICAgIGYgPSAoRGVjaW1hbEZvcm1hdCkgTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKG5ldyBMb2NhbGUoImhpIiwgIklOIikpOworICAgICAgICBTdHJpbmcgc3RyID0gdHJhbnNtdXRlKCIxLDg3LDY1LDQzLDIxMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5nZXREZWNpbWFsRm9ybWF0U3ltYm9scygpLmdldFplcm9EaWdpdCgpKTsKKyAgICAgICAgZXhwZWN0KGYsIG5ldyBMb25nKDE4NzY1NDMyMTApLCBzdHIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBleHBlY3RQYWQoRGVjaW1hbEZvcm1hdCBmbXQsIFN0cmluZyBwYXQsIGludCBwb3MpIHsKKyAgICAgICAgZXhwZWN0UGFkKGZtdCwgcGF0LCBwb3MsIDAsIChjaGFyKTApOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBleHBlY3RQYWQoRGVjaW1hbEZvcm1hdCBmbXQsIFN0cmluZyBwYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLCBpbnQgd2lkdGgsIGNoYXIgcGFkKSB7CisgICAgICAgIGludCBhcG9zID0gMCwgYXdpZHRoID0gMDsKKyAgICAgICAgY2hhciBhcGFkID0gMDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZtdC5hcHBseVBhdHRlcm4ocGF0KTsKKyAgICAgICAgICAgIGFwb3MgPSBmbXQuZ2V0UGFkUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGF3aWR0aCA9IGZtdC5nZXRGb3JtYXRXaWR0aCgpOworICAgICAgICAgICAgYXBhZCA9IGZtdC5nZXRQYWRDaGFyYWN0ZXIoKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGFwb3MgPSAtMTsKKyAgICAgICAgICAgIGF3aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgYXBhZCA9IHBhZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXBvcyA9PSBwb3MgJiYgYXdpZHRoID09IHdpZHRoICYmIGFwYWQgPT0gcGFkKSB7CisgICAgICAgICAgICBsb2dsbigiT2sgICBcIiIgKyBwYXQgKyAiXCIgcG9zPSIgKyBhcG9zICsKKyAgICAgICAgICAgICAgICAgICgocG9zID09IC0xKSA/ICIiIDogIiB3aWR0aD0iICsgYXdpZHRoICsgIiBwYWQ9IiArIGFwYWQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ2xuKCJGQUlMIFwiIiArIHBhdCArICJcIiBwb3M9IiArIGFwb3MgKworICAgICAgICAgICAgICAgICAgIiB3aWR0aD0iICsgYXdpZHRoICsgIiBwYWQ9IiArIGFwYWQgKworICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQgIiArIHBvcyArICIgIiArIHdpZHRoICsgIiAiICsgcGFkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQYXR0ZXJucygpIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgVVMgPSBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLlVTKTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIyIsIFVTKTsKKworICAgICAgICBleHBlY3RQYWQoZm10LCAiKl4jIiwgRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1BSRUZJWCwgMSwgJ14nKTsKKyAgICAgICAgZXhwZWN0UGFkKGZtdCwgIiQqXiMiLCBEZWNpbWFsRm9ybWF0LlBBRF9BRlRFUl9QUkVGSVgsIDIsICdeJyk7CisgICAgICAgIGV4cGVjdFBhZChmbXQsICIjKl4iLCBEZWNpbWFsRm9ybWF0LlBBRF9CRUZPUkVfU1VGRklYLCAxLCAnXicpOworICAgICAgICBleHBlY3RQYWQoZm10LCAiIyQqXiIsIERlY2ltYWxGb3JtYXQuUEFEX0FGVEVSX1NVRkZJWCwgMiwgJ14nKTsKKyAgICAgICAgZXhwZWN0UGFkKGZtdCwgIiQqXiQjIiwgSUxMRUdBTCk7CisgICAgICAgIGV4cGVjdFBhZChmbXQsICIjJCpeJCIsIElMTEVHQUwpOworICAgICAgICBleHBlY3RQYWQoZm10LCAiJ3ByZScjLCMjMCp4J3Bvc3QnIiwgRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1NVRkZJWCwKKyAgICAgICAgICAgICAgICAgIDEyLCAneCcpOworICAgICAgICBleHBlY3RQYWQoZm10LCAiJycjMCp4IiwgRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1NVRkZJWCwKKyAgICAgICAgICAgICAgICAgIDMsICd4Jyk7CisgICAgICAgIGV4cGVjdFBhZChmbXQsICInSScnbGwnKmEjIyMuIyMiLCBEZWNpbWFsRm9ybWF0LlBBRF9BRlRFUl9QUkVGSVgsCisgICAgICAgICAgICAgICAgICAxMCwgJ2EnKTsKKworICAgICAgICBmbXQuYXBwbHlQYXR0ZXJuKCJBQSMsIyMwLjAwWloiKTsKKyAgICAgICAgZm10LnNldFBhZENoYXJhY3RlcignXicpOworCisgICAgICAgIGZtdC5zZXRGb3JtYXRXaWR0aCgxMCk7CisKKyAgICAgICAgZm10LnNldFBhZFBvc2l0aW9uKERlY2ltYWxGb3JtYXQuUEFEX0JFRk9SRV9QUkVGSVgpOworICAgICAgICBleHBlY3RQYXQoZm10LCAiKl5BQSMsIyMwLjAwWloiKTsKKworICAgICAgICBmbXQuc2V0UGFkUG9zaXRpb24oRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1NVRkZJWCk7CisgICAgICAgIGV4cGVjdFBhdChmbXQsICJBQSMsIyMwLjAwKl5aWiIpOworCisgICAgICAgIGZtdC5zZXRQYWRQb3NpdGlvbihEZWNpbWFsRm9ybWF0LlBBRF9BRlRFUl9TVUZGSVgpOworICAgICAgICBleHBlY3RQYXQoZm10LCAiQUEjLCMjMC4wMFpaKl4iKTsKKworICAgICAgICAvLyAgICAgICAgICAgIDEyICAzNDU2Nzg5MDEyCisgICAgICAgIFN0cmluZyBleHAgPSAiQUEqXiMsIyMwLjAwWloiOworICAgICAgICBmbXQuc2V0Rm9ybWF0V2lkdGgoMTIpOworICAgICAgICBmbXQuc2V0UGFkUG9zaXRpb24oRGVjaW1hbEZvcm1hdC5QQURfQUZURVJfUFJFRklYKTsKKyAgICAgICAgZXhwZWN0UGF0KGZtdCwgZXhwKTsKKworICAgICAgICBmbXQuc2V0Rm9ybWF0V2lkdGgoMTMpOworICAgICAgICAvLyAgICAgICAgICAgICAgMTIgIDM0NTY3ODkwMTIzCisgICAgICAgIGV4cGVjdFBhdChmbXQsICJBQSpeIyMsIyMwLjAwWloiKTsKKworICAgICAgICBmbXQuc2V0Rm9ybWF0V2lkdGgoMTQpOworICAgICAgICAvLyAgICAgICAgICAgICAgMTIgIDM0NTY3ODkwMTIzNAorICAgICAgICBleHBlY3RQYXQoZm10LCAiQUEqXiMjIywjIzAuMDBaWiIpOworCisgICAgICAgIGZtdC5zZXRGb3JtYXRXaWR0aCgxNSk7CisgICAgICAgIC8vICAgICAgICAgICAgICAxMiAgMzQ1Njc4OTAxMjM0NQorICAgICAgICBleHBlY3RQYXQoZm10LCAiQUEqXiMjIyMsIyMwLjAwWloiKTsgLy8gVGhpcyBpcyB0aGUgaW50ZXJlc3RpbmcgY2FzZQorCisgICAgICAgIGZtdC5zZXRGb3JtYXRXaWR0aCgxNik7CisgICAgICAgIC8vICAgICAgICAgICAgICAxMiAgMzQ1Njc4OTAxMjM0NTYKKyAgICAgICAgZXhwZWN0UGF0KGZtdCwgIkFBKl4jLCMjIywjIzAuMDBaWiIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBleHBlY3RQYXQoRGVjaW1hbEZvcm1hdCBmbXQsIFN0cmluZyBleHApIHsKKyAgICAgICAgU3RyaW5nIHBhdCA9IGZtdC50b1BhdHRlcm4oKTsKKyAgICAgICAgaWYgKHBhdC5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgbG9nbG4oIk9rICAgXCIiICsgcGF0ICsgJyInKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMIFwiIiArIHBhdCArICJcIiwgZXhwZWN0ZWQgXCIiICsgZXhwICsgJyInKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGhhbmRsaW5nIG9mIHRoZSBBbHBoYVdvcmtzIEJpZ0RlY2ltYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0QWxwaGFCaWdEZWNpbWFsKCkgeworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBVUyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICAvKkZvciBJQ1UgY29tcGF0aWJpbGl0eSBbUmljaGFyZC9HQ0xdKi8KKyAgICAgICAgZXhwZWN0KE51bWJlckZvcm1hdC5nZXRTY2llbnRpZmljSW5zdGFuY2UoTG9jYWxlLlVTKSwKKyAgICAgICAgICAgICAgIG5ldyBOdW1iZXJbXSB7IG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1LjY3ODkwMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICIxLjIzNDU2Nzg5MDFFNCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4jIyMjRTAiLCBVUyksCisgICAgICAgICAgICAgICBuZXcgTnVtYmVyW10geyBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NS40OTk5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NC41MDAxIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICIxMi4zNDVFMyIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4jIyMjRTAiLCBVUyksCisgICAgICAgICAgICAgICBuZXcgTnVtYmVyW10geyBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0NS41MDAwIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCIxMjM0Ni41MDAwIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICIxMi4zNDZFMyIpOworICAgIH0KKworICAgIC8qKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RTY2llbnRpZmljKCkgeworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBVUyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICAvKkZvciBJQ1UgY29tcGF0aWJpbGl0eSBbUmljaGFyZC9HQ0xdKi8KKyAgICAgICAgZXhwZWN0KE51bWJlckZvcm1hdC5nZXRTY2llbnRpZmljSW5zdGFuY2UoTG9jYWxlLlVTKSwKKyAgICAgICAgICAgICAgIG5ldyBOdW1iZXJbXSB7IG5ldyBEb3VibGUoMTIzNDUuNjc4OTAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCgiMTIzNDUuNjc4OTAxIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICIxLjIzNDU2Nzg5MDFFNCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4jIyNFMCIsIFVTKSwKKyAgICAgICAgICAgICAgIG5ldyBEb3VibGUoMTIzNDUpLAorICAgICAgICAgICAgICAgIjEyLjM0RTMiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIzAuIyMjRTAiLCBVUyksCisgICAgICAgICAgICAgICBuZXcgRG91YmxlKDEyMzQ1LjAwMDAxKSwKKyAgICAgICAgICAgICAgICIxMi4zNUUzIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiIyMwLiMjIyNFMCIsIFVTKSwKKyAgICAgICAgICAgICAgIG5ldyBOdW1iZXJbXSB7IG5ldyBJbnRlZ2VyKDEyMzQ1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb25nKDEyMzQ1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCgiMTIzNDUuNDk5OSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKCIxMjM0NC41MDAxIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICIxMi4zNDVFMyIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4jIyMjRTAiLCBVUyksCisgICAgICAgICAgICAgICBuZXcgTnVtYmVyW10geyBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoIjEyMzQ1LjUwMDAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCgiMTIzNDYuNTAwMCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAiMTIuMzQ2RTMiKTsKKyAgICAgICAgLypGb3IgSUNVIGNvbXBhdGliaWxpdHkgW1JpY2hhcmQvR0NMXSovCisgICAgICAgIGV4cGVjdChOdW1iZXJGb3JtYXQuZ2V0U2NpZW50aWZpY0luc3RhbmNlKExvY2FsZS5GUkFOQ0UpLAorICAgICAgICAgICAgICAgbmV3IERvdWJsZSgxMjM0NS42Nzg5MDEpLAorICAgICAgICAgICAgICAgIjEsMjM0NTY3ODkwMUU0Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiIyMwLiMjIyNFMCIsIFVTKSwKKyAgICAgICAgICAgICAgIG5ldyBEb3VibGUoNzg5LjEyMzQ1ZS05KSwKKyAgICAgICAgICAgICAgICI3ODkuMTJFLTkiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIzAuIyMjI0UwIiwgVVMpLAorICAgICAgICAgICAgICAgbmV3IERvdWJsZSg3ODAuZS05KSwKKyAgICAgICAgICAgICAgICI3ODBFLTkiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIuIyMjRTAiLCBVUyksCisgICAgICAgICAgICAgICBuZXcgRG91YmxlKDQ1Njc4KSwKKyAgICAgICAgICAgICAgICIuNDU3RTUiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIuIyMjRTAiLCBVUyksCisgICAgICAgICAgICAgICBuZXcgTG9uZygwKSwKKyAgICAgICAgICAgICAgICIuMEUwIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdFtdIHsgbmV3IERlY2ltYWxGb3JtYXQoIiNFMCIsIFVTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVjaW1hbEZvcm1hdCgiIyNFMCIsIFVTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVjaW1hbEZvcm1hdCgiIyMjI0UwIiwgVVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWNpbWFsRm9ybWF0KCIwRTAiLCBVUyksICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWNpbWFsRm9ybWF0KCIwMEUwIiwgVVMpLCAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWNpbWFsRm9ybWF0KCIwMDBFMCIsIFVTKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICBuZXcgTG9uZyg0NTY3ODAwMCksCisgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAiNC41Njc4RTciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQ1LjY3OEU2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0NTY3LjhFNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNUU3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0NkU2IiwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQ1N0U1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICApOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjI0UwIiwgVVMpLAorICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsgbmV3IERvdWJsZSgwLjAwMDAxMjMpLCAiMTIuM0UtNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlKDAuMDAwMTIzKSwgIjEyM0UtNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoIjAuMDAxMjMiKSwgIjEuMjNFLTMiLCAvLyBDYWZlIFZNIG1lc3NlcyB1cCBEb3VibGUoMC4wMDEyMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEb3VibGUoMC4wMTIzKSwgIjEyLjNFLTMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERvdWJsZSgwLjEyMyksICIxMjNFLTMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERvdWJsZSgxLjIzKSwgIjEuMjNFMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlKDEyLjMpLCAiMTIuM0UwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEb3VibGUoMTIzKSwgIjEyM0UwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEb3VibGUoMTIzMCksICIxLjIzRTMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIwLiNFKzAwIiwgVVMpLAorICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsgbmV3IERvdWJsZSgwLjAwMDEyKSwgIjEuMkUtMDQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExvbmcoMTIwMDApLCAgICAgIjEuMkUrMDQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0UGFkKCkgeworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBVUyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIipeIyMuIyMiLCBVUyksCisgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBuZXcgTG9uZygwKSwgICAgICAiXl5eXjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERvdWJsZSgtMS4zKSwgIl4tMS4zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICApOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4wIyMjI0UwKl8gZy1tL3NeMiIsIFVTKSwKKyAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IG5ldyBMb25nKDApLCAgICAgICAiMC4wRTBfX19fX18gZy1tL3NeMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlKDEuMC8zKSwgIjMzMy4zMzNFLTNfIGctbS9zXjIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiIyMwLjAjIyMjKl8gZy1tL3NeMiIsIFVTKSwKKyAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IG5ldyBMb25nKDApLCAgICAgICAiMC4wX19fX19fIGctbS9zXjIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERvdWJsZSgxLjAvMyksICIwLjMzMzMzX18gZy1tL3NeMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIqeCMsIyMjLCMjIywjIzAuMDA7KngoIywjIyMsIyMjLCMjMC4wMCkiLCBVUyksCisgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geworICAgICAgICAgICAgICAgICAgIG5ldyBMb25nKC0xMDApLCAgICAgICAgInh4eHh4eHh4KDEwMC4wMCkiLAorICAgICAgICAgICAgICAgICAgIG5ldyBMb25nKC0xMDAwKSwgICAgICAgInh4eHh4eCgxLDAwMC4wMCkiLAorICAgICAgICAgICAgICAgICAgIG5ldyBMb25nKC0xMDAwMDAwKSwgICAgInh4KDEsMDAwLDAwMC4wMCkiLAorICAgICAgICAgICAgICAgICAgIG5ldyBMb25nKC0xMDAwMDAwMDAwKSwgIigxLDAwMCwwMDAsMDAwLjAwKSIsCisgICAgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGV4cGVjdChOdW1iZXJGb3JtYXQgZm10LCBPYmplY3RbXSBkYXRhKSB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxkYXRhLmxlbmd0aDsgaSs9MikgeworICAgICAgICAgICAgZXhwZWN0KGZtdCwgKE51bWJlcikgZGF0YVtpXSwgKFN0cmluZykgZGF0YVtpKzFdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0KE9iamVjdCBmbXRvLCBPYmplY3QgbnVtbywgT2JqZWN0IGV4cG8pIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IGZtdCA9IG51bGwsIGZtdHNbXSA9IG51bGw7CisgICAgICAgIE51bWJlciBudW0gPSBudWxsLCBudW1zW10gPSBudWxsOworICAgICAgICBTdHJpbmcgZXhwID0gbnVsbCwgZXhwc1tdID0gbnVsbDsKKyAgICAgICAgaWYgKGZtdG8gaW5zdGFuY2VvZiBOdW1iZXJGb3JtYXRbXSkgeworICAgICAgICAgICAgZm10cyA9IChOdW1iZXJGb3JtYXRbXSkgZm10bzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZtdCA9IChOdW1iZXJGb3JtYXQpIGZtdG87CisgICAgICAgIH0KKyAgICAgICAgaWYgKG51bW8gaW5zdGFuY2VvZiBOdW1iZXJbXSkgeworICAgICAgICAgICAgbnVtcyA9IChOdW1iZXJbXSkgbnVtbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG51bSA9IChOdW1iZXIpIG51bW87CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cG8gaW5zdGFuY2VvZiBTdHJpbmdbXSkgeworICAgICAgICAgICAgZXhwcyA9IChTdHJpbmdbXSkgZXhwbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4cCA9IChTdHJpbmcpIGV4cG87CisgICAgICAgIH0KKyAgICAgICAgaW50IG4gPSAxOworICAgICAgICBpZiAoZm10cyAhPSBudWxsKSB7CisgICAgICAgICAgICBuID0gTWF0aC5tYXgobiwgZm10cy5sZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGlmIChudW1zICE9IG51bGwpIHsKKyAgICAgICAgICAgIG4gPSBNYXRoLm1heChuLCBudW1zLmxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cHMgIT0gbnVsbCkgeworICAgICAgICAgICAgbiA9IE1hdGgubWF4KG4sIGV4cHMubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpPTA7IGk8bjsgKytpKSB7CisgICAgICAgICAgICBleHBlY3QoZm10cyA9PSBudWxsID8gZm10IDogZm10c1tpXSwKKyAgICAgICAgICAgICAgICAgICBudW1zID09IG51bGwgPyBudW0gOiBudW1zW2ldLAorICAgICAgICAgICAgICAgICAgIGV4cHMgPT0gbnVsbCA/IGV4cCA6IGV4cHNbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNob3dOdW1iZXIoTnVtYmVyIG4pIHsKKyAgICAgICAgU3RyaW5nIGNscyA9IG4uZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwKKyAgICAgICAgICAgICAgfHwgbiBpbnN0YW5jZW9mIGphdmEubWF0aC5CaWdEZWNpbWFsKSkgeworICAgICAgICAgICAgaW50IGkgPSBjbHMubGFzdEluZGV4T2YoJy4nKTsKKyAgICAgICAgICAgIGNscyA9IGNscy5zdWJzdHJpbmcoaSsxKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbi50b1N0cmluZygpICsgIiAoIiArIGNscyArICcpJzsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0KE51bWJlckZvcm1hdCBmbXQsIE51bWJlciBuLCBTdHJpbmcgZXhwKSB7CisgICAgICAgIFN0cmluZyBzYXcgPSBmbXQuZm9ybWF0KG4pOworICAgICAgICBTdHJpbmcgcGF0ID0gKChEZWNpbWFsRm9ybWF0KSBmbXQpLnRvUGF0dGVybigpOworICAgICAgICBpZiAoc2F3LmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBsb2dsbigiT2sgICAiICsgc2hvd051bWJlcihuKSArICIgeCAiICsKKyAgICAgICAgICAgICAgICAgIHBhdCArICIgPSAiICsKKyAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlKHNhdykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUwgIiArIHNob3dOdW1iZXIobikgKyAiIHggIiArCisgICAgICAgICAgICAgICAgICBwYXQgKyAiID0gXCIiICsKKyAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlKHNhdykgKyAiLCBleHBlY3RlZCAiICsgVXRpbGl0eS5lc2NhcGUoZXhwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0KE51bWJlckZvcm1hdCBmbXQsIFN0cmluZyBzdHIsIE51bWJlciBleHApIHsKKyAgICAgICAgTnVtYmVyIHNhdyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzYXcgPSBmbXQucGFyc2Uoc3RyKTsKKyAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgc2F3ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcGF0ID0gKChEZWNpbWFsRm9ybWF0KSBmbXQpLnRvUGF0dGVybigpOworICAgICAgICBpZiAoc2F3LmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBsb2dsbigiT2sgICBcIiIgKyBzdHIgKyAiXCIgeCAiICsKKyAgICAgICAgICAgICAgICAgIHBhdCArICIgPSAiICsKKyAgICAgICAgICAgICAgICAgIHNob3dOdW1iZXIoc2F3KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCBcIiIgKyBzdHIgKyAiXCIgeCAiICsKKyAgICAgICAgICAgICAgICAgIHBhdCArICIgPSAiICsKKyAgICAgICAgICAgICAgICAgIHNob3dOdW1iZXIoc2F3KSArICIsIGV4cGVjdGVkICIgKyBzaG93TnVtYmVyKGV4cCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBzdHJpbmcgY29tcG9zZWQgb2YgWzAtOV0gYW5kIG90aGVyIGNoYXJzLCBjb252ZXJ0IHRoZQorICAgICAqIFswLTldIGNoYXJzIHRvIGJlIG9mZnNldHMgMC4uOSBmcm9tICd6ZXJvJy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJhbnNtdXRlKFN0cmluZyBzdHIsIGNoYXIgemVybykgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8c3RyLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHN0ci5jaGFyQXQoaSk7CisgICAgICAgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBjID0gKGNoYXIpIChjIC0gJzAnICsgemVybyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWYuYXBwZW5kKGMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE2MTEwMCgpIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IGYgPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgZi5zZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoMSk7CisgICAgICAgIGYuc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKDEpOworICAgICAgICBkb3VibGUgYSA9IC0wLjA5OworICAgICAgICBTdHJpbmcgcyA9IGYuZm9ybWF0KGEpOworICAgICAgICBsb2dsbihhICsgIiB4ICIgKworICAgICAgICAgICAgICAoKERlY2ltYWxGb3JtYXQpIGYpLnRvUGF0dGVybigpICsgIiA9ICIgKworICAgICAgICAgICAgICBzKTsKKyAgICAgICAgaWYgKCFzLmVxdWFscygiLTAuMSIpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCIpOworICAgICAgICB9CisgICAgfSAgICAgICAgCisKKyAgICBwdWJsaWMgdm9pZCBUZXN0QmlnRGVjaW1hbEoyOCgpIHsKKyAgICAgICAgU3RyaW5nW10gREFUQSA9IHsKKyAgICAgICAgICAgICIxIiwgIjFFMCIsCisgICAgICAgICAgICAiLTEiLCAiLTFFMCIsCisgICAgICAgICAgICAiMCIsICIwRTAiLAorICAgICAgICAgICAgIjEyZTM0IiwgIjEuMkUzNSIsCisgICAgICAgICAgICAiLTEyLjNlLTQ1IiwgIi0xLjIzRS00NCIsCisgICAgICAgICAgICAiMC43M2UtNyIsICI3LjNFLTgiLAorICAgICAgICB9OworICAgICAgICBOdW1iZXJGb3JtYXQgZm10ID0gTnVtYmVyRm9ybWF0LmdldFNjaWVudGlmaWNJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICBsb2dsbigiUGF0dGVybjogIiArICgoRGVjaW1hbEZvcm1hdClmbXQpLnRvUGF0dGVybigpKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0yKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5wdXQgPSBEQVRBW2ldOworICAgICAgICAgICAgU3RyaW5nIGV4cCA9IERBVEFbaSsxXTsKKyAgICAgICAgICAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBiZCA9IG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoaW5wdXQpOworICAgICAgICAgICAgU3RyaW5nIG91dHB1dCA9IGZtdC5mb3JtYXQoYmQpOworICAgICAgICAgICAgaWYgKG91dHB1dC5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJpbnB1dD0iICsgaW5wdXQgKyAiIG51bT0iICsgYmQgKyAiIG91dHB1dD0iICsgb3V0cHV0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGlucHV0PSIgKyBpbnB1dCArICIgbnVtPSIgKyBiZCArICIgb3V0cHV0PSIgKyBvdXRwdXQgKworICAgICAgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQ9IiArIGV4cCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRNaXNjVGVzdHMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvRGF0ZUZvcm1hdE1pc2NUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3ODc4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRNaXNjVGVzdHMuamF2YQpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRNaXNjVGVzdHMuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTowOCAkIAorICogJFJldmlzaW9uOiAxLjUgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2MS44LjEgOiBmb3JtYXQgOiBEYXRlRm9ybWF0TWlzY1Rlc3RzCisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9taXNjZHRmbS5jcHAKKyAqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworLyoqIAorICogUGVyZm9ybXMgbWlzY2VsbGFuZW91cyB0ZXN0cyBmb3IgRGF0ZUZvcm1hdCwgU2ltcGxlRGF0ZUZvcm1hdCwgRGF0ZUZvcm1hdFN5bWJvbHMKKyAqKi8KK3B1YmxpYyBjbGFzcyBEYXRlRm9ybWF0TWlzY1Rlc3RzIGV4dGVuZHMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2sgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgbmV3IERhdGVGb3JtYXRNaXNjVGVzdHMoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIC8qCisgICAgICogQGJ1ZyA0MDk3NDUwCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTc0NTAoKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERhdGUgcGFyc2UgcmVxdWlyaW5nIDQgZGlnaXQgeWVhci4KKyAgICAgICAgLy8KKyAgICAgICAgU3RyaW5nIGRzdHJpbmdbXSA9IHsKKyAgICAgICAgICAgICI5NyIsICIxOTk3IiwgIjk3IiwgIjE5OTciLCAiMDEiLCAiMjAwMSIsICIwMSIsICIyMDAxIiwKKyAgICAgICAgICAgICAiMSIsICIxIiwgIjExIiwgIjExIiwgIjExMSIsICIxMTEifTsgCisgICAgCisgICAgICAgIFN0cmluZyBkZm9ybWF0W10gPSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAieXkiLCAieXkiLCAieXl5eSIsICJ5eXl5IiwgInl5IiwgInl5IiwgInl5eXkiLCAieXl5eSIsIAorICAgICAgICAgICAgICAgICJ5eSIsICJ5eXl5IiwgInl5IiwgInl5eXkiLCAieXkiLCAieXl5eSJ9OyAgICAgICAgIAorICAgIAorICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdHRlcjsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCByZXN1bHRGb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSIpOworICAgICAgICBsb2dsbigiRm9ybWF0XHRTb3VyY2VcdFJlc3VsdCIpOworICAgICAgICBsb2dsbigiLS0tLS0tLVx0LS0tLS0tLVx0LS0tLS0tLSIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRzdHJpbmcubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICBsb2coZGZvcm1hdFtpXSArICJcdCIgKyBkc3RyaW5nW2ldICsgIlx0Iik7CisgICAgICAgICAgICBmb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChkZm9ybWF0W2ldKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHN0ciA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7CisgICAgICAgICAgICAgICAgbG9nbG4ocmVzdWx0Rm9ybWF0dGVyLmZvcm1hdChmb3JtYXR0ZXIucGFyc2UoZHN0cmluZ1tpXSksIHN0ciwgcG9zKS50b1N0cmluZygpKTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImV4Y2VwdGlvbiAtLT4gIiArIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2dsbigiIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogQEJ1ZyA0MDk5OTc1CisgICAgICogU2ltcGxlRGF0ZUZvcm1hdCBjb25zdHJ1Y3RvciBTaW1wbGVEYXRlRm9ybWF0KFN0cmluZywgRGF0ZUZvcm1hdFN5bWJvbHMpCisgICAgICogc2hvdWxkIGNsb25lIHRoZSBEYXRlRm9ybWF0U3ltYm9scyBwYXJhbWV0ZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA5OTk3NW5ldygpIHsKKyAgICAgICAgRGF0ZSBkID0gbmV3IERhdGUoKTsKKyAgICAgICAgLy90ZXN0IFNpbXBsZURhdGVGb3JtYXQgQ29uc3RydWN0b3IKKyAgICAgICAgeworICAgICAgICAgICAgRGF0ZUZvcm1hdFN5bWJvbHMgc3ltYm9scyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFIGhoOm1tIiwgc3ltYm9scyk7CisgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGRmQ2xvbmUgPSAoU2ltcGxlRGF0ZUZvcm1hdCkgZGYuY2xvbmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9nbG4oZGYudG9Mb2NhbGl6ZWRQYXR0ZXJuKCkpOworICAgICAgICAgICAgU3RyaW5nIHMwID0gZGYuZm9ybWF0KGQpOworICAgICAgICAgICAgU3RyaW5nIHNfZGZDbG9uZSA9IGRmQ2xvbmUuZm9ybWF0KGQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzeW1ib2xzLnNldExvY2FsUGF0dGVybkNoYXJzKCJhYmNkZWZnaGlqa2xtb25wcXIiKTsgLy8gY2hhbmdlIHZhbHVlIG9mIGZpZWxkCisgICAgICAgICAgICBsb2dsbihkZi50b0xvY2FsaXplZFBhdHRlcm4oKSk7CisgICAgICAgICAgICBTdHJpbmcgczEgPSBkZi5mb3JtYXQoZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghczEuZXF1YWxzKHMwKSB8fCAhczEuZXF1YWxzKHNfZGZDbG9uZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ29uc3RydWN0b3I6IHRoZSBmb3JtYXRzIGFyZSBub3QgZXF1YWwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZGYuZXF1YWxzKGRmQ2xvbmUpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlRoZSBDbG9uZSBPYmplY3QgZG9lcyBub3QgZXF1YWwgd2l0aCB0aGUgb3JpZ25hbCBzb3VyY2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvL3Rlc3QgU2ltcGxlRGF0ZUZvcm1hdC5zZXREYXRlRm9ybWF0U3ltYm9scygpCisgICAgICAgIHsKKyAgICAgICAgICAgIERhdGVGb3JtYXRTeW1ib2xzIHN5bWJvbHMgPSBuZXcgRGF0ZUZvcm1hdFN5bWJvbHMoTG9jYWxlLlVTKTsKKyAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRSBoaDptbSIpOworICAgICAgICAgICAgZGYuc2V0RGF0ZUZvcm1hdFN5bWJvbHMoc3ltYm9scyk7CisgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGRmQ2xvbmUgPSAoU2ltcGxlRGF0ZUZvcm1hdCkgZGYuY2xvbmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9nbG4oZGYudG9Mb2NhbGl6ZWRQYXR0ZXJuKCkpOworICAgICAgICAgICAgU3RyaW5nIHMwID0gZGYuZm9ybWF0KGQpOworICAgICAgICAgICAgU3RyaW5nIHNfZGZDbG9uZSA9IGRmQ2xvbmUuZm9ybWF0KGQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzeW1ib2xzLnNldExvY2FsUGF0dGVybkNoYXJzKCJhYmNkZWZnaGlqa2xtb25wcXIiKTsgLy8gY2hhbmdlIHZhbHVlIG9mIGZpZWxkCisgICAgICAgICAgICBsb2dsbihkZi50b0xvY2FsaXplZFBhdHRlcm4oKSk7CisgICAgICAgICAgICBTdHJpbmcgczEgPSBkZi5mb3JtYXQoZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghczEuZXF1YWxzKHMwKSB8fCAhczEuZXF1YWxzKHNfZGZDbG9uZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigic2V0RGF0ZUZvcm1hdFN5bWJvbHM6IHRoZSBmb3JtYXRzIGFyZSBub3QgZXF1YWwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZGYuZXF1YWxzKGRmQ2xvbmUpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlRoZSBDbG9uZSBPYmplY3QgZG9lcyBub3QgZXF1YWwgd2l0aCB0aGUgb3JpZ25hbCBzb3VyY2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIEBidWcgNDExNzMzNQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTE3MzM1KCkgeworICAgICAgICAvL2NoYXIgYmNDW10gPSB7MHg3RDAwLCAweDUxNDMsIDB4NTI0RH07CisgICAgICAgIFN0cmluZyBiYyA9ICJcdTdEMDBcdTUxNDNcdTUyNEQiOworICAgICAgICBTdHJpbmcgYWQgPSAiXHU4OTdmXHU2NmE2IjsKKyAgICAgICAgLy9jaGFyIGFkQ1tdID0gezB4ODk3RiwgMHg2NkE2fTsKKyAgICAgICAgU3RyaW5nIGpzdExvbmcgPSAiXHU2NWU1XHU2NzJjXHU2YTE5XHU2ZTk2XHU2NjQyIjsKKyAgICAgICAgLy9jaGFyIGpzdExvbmdDW10gPSB7MHg2NWU1LCAweDY3MmMsIDB4NmExOSwgMHg2ZTk2LCAweDY2NDJ9OyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisgICAgICAgIFN0cmluZyBqc3RTaG9ydCA9ICJKU1QiOworICAgIAorICAgICAgICBEYXRlRm9ybWF0U3ltYm9scyBzeW1ib2xzID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKExvY2FsZS5KQVBBTik7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIGVyYXMgPSBzeW1ib2xzLmdldEVyYXMoKTsKKyAgICAgICAgLy9pbnQgZXJhQ291bnQgPSBlcmFzLmxlbmd0aDsgLy9UaGUgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZAorICAgICAgICBsb2dsbigiQkMgPSAiICsgZXJhc1swXSk7CisgICAgICAgIGlmICghZXJhc1swXS5lcXVhbHMoYmMpKSB7CisgICAgICAgICAgICBlcnJsbigiKioqIFNob3VsZCBoYXZlIGJlZW4gIiArIGJjKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBsb2dsbigiQUQgPSAiICsgZXJhc1sxXSk7CisgICAgICAgIGlmICghZXJhc1sxXS5lcXVhbHMoYWQpKSB7CisgICAgICAgICAgICBlcnJsbigiKioqIFNob3VsZCBoYXZlIGJlZW4gIiArIGFkKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBmaW5hbCBTdHJpbmcgem9uZXNbXVtdID0gc3ltYm9scy5nZXRab25lU3RyaW5ncygpOworICAgICAgICAvL2ludCByb3dDb3VudCA9IHpvbmVzLmxlbmd0aCwgY29sQ291bnQgPSB6b25lc1swXS5sZW5ndGg7IC8vVGhlIHZhcmlhYmxlIGlzIG5ldmVyIHVzZWQKKyAgICAgICAgbG9nbG4oIkxvbmcgem9uZSBuYW1lID0gIiArIHpvbmVzWzBdWzFdKTsKKyAgICAgICAgaWYgKCF6b25lc1swXVsxXS5lcXVhbHMoanN0TG9uZykpIHsKKyAgICAgICAgICAgIGVycmxuKCIqKiogU2hvdWxkIGhhdmUgYmVlbiAiICsganN0TG9uZyk7CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4oIlNob3J0IHpvbmUgbmFtZSA9ICIgKyB6b25lc1swXVsyXSk7CisgICAgICAgIGlmICghem9uZXNbMF1bMl0uZXF1YWxzKGpzdFNob3J0KSkgeworICAgICAgICAgICAgZXJybG4oIioqKiBTaG91bGQgaGF2ZSBiZWVuICIgKyBqc3RTaG9ydCk7CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4oIkxvbmcgem9uZSBuYW1lID0gIiArIHpvbmVzWzBdWzNdKTsKKyAgICAgICAgaWYgKHpvbmVzWzBdWzNdICE9IGpzdExvbmcpIHsKKyAgICAgICAgICAgIGVycmxuKCIqKiogU2hvdWxkIGhhdmUgYmVlbiAiICsganN0TG9uZyk7CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4oIlNIT1JUIHpvbmUgbmFtZSA9ICIgKyB6b25lc1swXVs0XSk7CisgICAgICAgIGlmICh6b25lc1swXVs0XSAhPSBqc3RTaG9ydCkgeworICAgICAgICAgICAgZXJybG4oIioqKiBTaG91bGQgaGF2ZSBiZWVuICIgKyBqc3RTaG9ydCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRSZWdyZXNzaW9uVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9EYXRlRm9ybWF0UmVncmVzc2lvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yY2Y4MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9EYXRlRm9ybWF0UmVncmVzc2lvblRlc3QuamF2YQpAQCAtMCwwICsxLDg4NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRSZWdyZXNzaW9uVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAzLzEwIDE5OjQwOjEzICQgCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYxLjguMSA6IGZvcm1hdCA6IERhdGVGb3JtYXRSZWdyZXNzaW9uVGVzdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvZHRmbXJndHMuY3BwCisgKiovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworaW1wb3J0IGphdmEudGV4dC5Gb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5QYXJzZVBvc2l0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKiogCisgKiBQZXJmb3JtcyByZWdyZXNzaW9uIHRlc3QgZm9yIERhdGVGb3JtYXQKKyAqKi8KK3B1YmxpYyBjbGFzcyBEYXRlRm9ybWF0UmVncmVzc2lvblRlc3QgZXh0ZW5kcyBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13ayB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBuZXcgRGF0ZUZvcm1hdFJlZ3Jlc3Npb25UZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAYnVnIDQwMjkxOTUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDAyOTE5NSgpIHsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgRGF0ZSB0b2RheSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGxvZ2xuKCJ0b2RheTogIiArIHRvZGF5KTsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSAoU2ltcGxlRGF0ZUZvcm1hdCkgRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsKKyAgICAgICAgU3RyaW5nIHBhdCA9IHNkZi50b1BhdHRlcm4oKTsKKyAgICAgICAgbG9nbG4oInBhdHRlcm46ICIgKyBwYXQpOworICAgICAgICBTdHJpbmdCdWZmZXIgZm10ZCA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBmbXRkID0gc2RmLmZvcm1hdCh0b2RheSwgZm10ZCwgcG9zKTsKKyAgICAgICAgbG9nbG4oInRvZGF5OiAiICsgZm10ZCk7CisgICAgCisgICAgICAgIHNkZi5hcHBseVBhdHRlcm4oIkcgeXl5eSBEREQiKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHRvZGF5UyA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICB0b2RheVMgPSBzZGYuZm9ybWF0KHRvZGF5LCB0b2RheVMsIHBvcyk7CisgICAgICAgIGxvZ2xuKCJ0b2RheTogIiArIHRvZGF5Uyk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0b2RheSA9IHNkZi5wYXJzZSh0b2RheVMudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBsb2dsbigidG9kYXkgZGF0ZTogIiArIHRvZGF5KTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciByZXBhcnNpbmcgZGF0ZTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHJ0ID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgICAgICBydCA9IHNkZi5mb3JtYXQoc2RmLnBhcnNlKHRvZGF5Uy50b1N0cmluZygpKSwgcnQsIHBvcyk7CisgICAgICAgICAgICBsb2dsbigicm91bmQgdHJpcDogIiArIHJ0KTsKKyAgICAgICAgICAgIGlmICghcnQudG9TdHJpbmcoKS5lcXVhbHModG9kYXlTLnRvU3RyaW5nKCkpKQorICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBXYW50ICIgKyB0b2RheVMgKyAiIEdvdCAiICsgcnQpOworICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGUpOworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAYnVnIDQwNTI0MDgKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA1MjQwOCgpIHsKKyAgICAKKyAgICAgICAgRGF0ZUZvcm1hdCBmbXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5TSE9SVCwgRGF0ZUZvcm1hdC5TSE9SVCwgTG9jYWxlLlVTKTsgCisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDk3ICsgMTkwMCwgQ2FsZW5kYXIuTUFZLCAzLCA4LCA1NSk7CisgICAgICAgIERhdGUgZHQgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBTdHJpbmcgc3RyID0gZm10LmZvcm1hdChkdCk7CisgICAgICAgIGxvZ2xuKHN0cik7CisgICAgICAgIAorICAgICAgICBpZiAoIXN0ci5lcXVhbHMoIjUvMy85NyA4OjU1IEFNIikpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogVGVzdCBicm9rZW47IFdhbnQgNS8zLzk3IDg6NTUgQU0gR290ICIgKyBzdHIpOworICAgIAorICAgICAgICBTdHJpbmcgZXhwZWN0ZWRbXSA9IHsKKyAgICAgICAgICAgICIiLCAvLyJFUkFfRklFTEQiLAorICAgICAgICAgICAgIjk3IiwgLy8iWUVBUl9GSUVMRCIsCisgICAgICAgICAgICAiNSIsIC8vIk1PTlRIX0ZJRUxEIiwKKyAgICAgICAgICAgICIzIiwgLy8iREFURV9GSUVMRCIsCisgICAgICAgICAgICAiIiwgLy8iSE9VUl9PRl9EQVkxX0ZJRUxEIiwKKyAgICAgICAgICAgICIiLCAvLyJIT1VSX09GX0RBWTBfRklFTEQiLAorICAgICAgICAgICAgIjU1IiwgLy8iTUlOVVRFX0ZJRUxEIiwKKyAgICAgICAgICAgICIiLCAvLyJTRUNPTkRfRklFTEQiLAorICAgICAgICAgICAgIiIsIC8vIk1JTExJU0VDT05EX0ZJRUxEIiwKKyAgICAgICAgICAgICIiLCAvLyJEQVlfT0ZfV0VFS19GSUVMRCIsCisgICAgICAgICAgICAiIiwgLy8iREFZX09GX1lFQVJfRklFTEQiLAorICAgICAgICAgICAgIiIsIC8vIkRBWV9PRl9XRUVLX0lOX01PTlRIX0ZJRUxEIiwKKyAgICAgICAgICAgICIiLCAvLyJXRUVLX09GX1lFQVJfRklFTEQiLAorICAgICAgICAgICAgIiIsIC8vIldFRUtfT0ZfTU9OVEhfRklFTEQiLAorICAgICAgICAgICAgIkFNIiwgLy8iQU1fUE1fRklFTEQiLAorICAgICAgICAgICAgIjgiLCAvLyJIT1VSMV9GSUVMRCIsCisgICAgICAgICAgICAiIiwgLy8iSE9VUjBfRklFTEQiLAorICAgICAgICAgICAgIiIgLy8iVElNRVpPTkVfRklFTEQiCisgICAgICAgICAgICB9OyAgICAgICAgCisgICAgICAgIFN0cmluZyBmaWVsZE5hbWVzW10gPSB7CisgICAgICAgICAgICAgICAgIkVSQV9GSUVMRCIsIAorICAgICAgICAgICAgICAgICJZRUFSX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIk1PTlRIX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIkRBVEVfRklFTEQiLCAKKyAgICAgICAgICAgICAgICAiSE9VUl9PRl9EQVkxX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIkhPVVJfT0ZfREFZMF9GSUVMRCIsIAorICAgICAgICAgICAgICAgICJNSU5VVEVfRklFTEQiLCAKKyAgICAgICAgICAgICAgICAiU0VDT05EX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIk1JTExJU0VDT05EX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIkRBWV9PRl9XRUVLX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIkRBWV9PRl9ZRUFSX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIkRBWV9PRl9XRUVLX0lOX01PTlRIX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIldFRUtfT0ZfWUVBUl9GSUVMRCIsIAorICAgICAgICAgICAgICAgICJXRUVLX09GX01PTlRIX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIkFNX1BNX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIkhPVVIxX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIkhPVVIwX0ZJRUxEIiwgCisgICAgICAgICAgICAgICAgIlRJTUVaT05FX0ZJRUxEIn07IAorICAgIAorICAgICAgICBib29sZWFuIHBhc3MgPSB0cnVlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSAxNzsgKytpKSB7CisgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcyA9IG5ldyBGaWVsZFBvc2l0aW9uKGkpOworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICAgICAgZm10LmZvcm1hdChkdCwgYnVmLCBwb3MpOworICAgICAgICAgICAgLy9jaGFyW10gZHN0ID0gbmV3IGNoYXJbcG9zLmdldEVuZEluZGV4KCkgLSBwb3MuZ2V0QmVnaW5JbmRleCgpXTsKKyAgICAgICAgICAgIFN0cmluZyBkc3QgPSBidWYuc3Vic3RyaW5nKHBvcy5nZXRCZWdpbkluZGV4KCksIHBvcy5nZXRFbmRJbmRleCgpKTsKKyAgICAgICAgICAgIHN0ciA9IGRzdDsKKyAgICAgICAgICAgIGxvZyhpICsgIjogIiArIGZpZWxkTmFtZXNbaV0gKyAiLCBcIiIgKyBzdHIgKyAiXCIsICIKKyAgICAgICAgICAgICAgICAgICAgKyBwb3MuZ2V0QmVnaW5JbmRleCgpICsgIiwgIiArIHBvcy5nZXRFbmRJbmRleCgpKTsgCisgICAgICAgICAgICBTdHJpbmcgZXhwID0gZXhwZWN0ZWRbaV07CisgICAgICAgICAgICBpZiAoKGV4cC5sZW5ndGgoKSA9PSAwICYmIHN0ci5sZW5ndGgoKSA9PSAwKSB8fCBzdHIuZXF1YWxzKGV4cCkpCisgICAgICAgICAgICAgICAgbG9nbG4oIiBvayIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIiBleHBlY3RlZCAiICsgZXhwKTsKKyAgICAgICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFwYXNzKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IEZpZWxkUG9zaXRpb24gbm90IHNldCByaWdodCBieSBEYXRlRm9ybWF0Iik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEBidWcgNDA1NjU5MQorICAgICAqIFZlcmlmeSB0aGUgZnVuY3Rpb24gb2YgdGhlIFtzfGddZXQyRGlnaXRZZWFyU3RhcnQoKSBBUEkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNTY1OTEoKSB7CisgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZtdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eU1NZGQiLCBMb2NhbGUuVVMpOworICAgICAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgY2FsLnNldCgxODA5LCBDYWxlbmRhci5ERUNFTUJFUiwgMjUpOworICAgICAgICAgICAgRGF0ZSBzdGFydCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICBmbXQuc2V0MkRpZ2l0WWVhclN0YXJ0KHN0YXJ0KTsKKyAgICAgICAgICAgIGlmICgoZm10LmdldDJEaWdpdFllYXJTdGFydCgpICE9IHN0YXJ0KSkKKyAgICAgICAgICAgICAgICBlcnJsbigiZ2V0MkRpZ2l0WWVhclN0YXJ0IGJyb2tlbiIpOworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KDE4MDksIENhbGVuZGFyLkRFQ0VNQkVSLCAyNSk7CisgICAgICAgICAgICBEYXRlIGQxID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgY2FsLnNldCgxOTA5LCBDYWxlbmRhci5ERUNFTUJFUiwgMjQpOworICAgICAgICAgICAgRGF0ZSBkMiA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgICAgIGNhbC5zZXQoMTgwOSwgQ2FsZW5kYXIuREVDRU1CRVIsIDI2KTsKKyAgICAgICAgICAgIERhdGUgZDMgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KDE4NjEsIENhbGVuZGFyLkRFQ0VNQkVSLCAyNSk7CisgICAgICAgICAgICBEYXRlIGQ0ID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRGF0ZSBkYXRlc1tdID0ge2QxLCBkMiwgZDMsIGQ0fTsKKyAgICAKKyAgICAgICAgICAgIFN0cmluZyBzdHJpbmdzW10gPSB7IjA5MTIyNSIsICIwOTEyMjQiLCAiMDkxMjI2IiwgIjYxMTIyNSJ9OyAgICAgICAgICAgIAorICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcyA9IHN0cmluZ3NbaV07CisgICAgICAgICAgICAgICAgRGF0ZSBleHAgPSBkYXRlc1tpXTsKKyAgICAgICAgICAgICAgICBEYXRlIGdvdCA9IGZtdC5wYXJzZShzKTsKKyAgICAgICAgICAgICAgICBsb2dsbihzICsgIiAuICIgKyBnb3QgKyAiOyBleHAgIiArIGV4cCk7CisgICAgICAgICAgICAgICAgaWYgKGdvdC5nZXRUaW1lKCkgIT0gZXhwLmdldFRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oInNldDJEaWdpdFllYXJTdGFydCBicm9rZW4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBlKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQGJ1ZyA0MDU5OTE3CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNTk5MTcoKSB7ICAgICAgICAKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmbXQ7CisgICAgICAgIFN0cmluZyBteURhdGU7CisgICAgICAgIGZtdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5L01NL2RkIik7CisgICAgICAgIG15RGF0ZSA9ICIxOTk3LzAxLzAxIjsKKyAgICAgICAgYXV4OTE3KCBmbXQsIG15RGF0ZSApOyAgICAgICAgCisgICAgICAgIGZtdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5TU1kZCIpOworICAgICAgICBteURhdGUgPSAiMTk5NzAxMDEiOworICAgICAgICBhdXg5MTcoIGZtdCwgbXlEYXRlICk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIGF1eDkxNyhTaW1wbGVEYXRlRm9ybWF0IGZtdCwgU3RyaW5nIHN0cikgeworICAgIAorICAgICAgICBTdHJpbmcgcGF0ID0gZm10LnRvUGF0dGVybigpOworICAgICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09Iik7CisgICAgICAgIGxvZ2xuKCJ0ZXN0SXQ6IHBhdHRlcm49IiArIHBhdCArICIgc3RyaW5nPSIgKyBzdHIpOworICAgICAgICBQYXJzZVBvc2l0aW9uIHBvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICBPYmplY3QgbyA9IGZtdC5wYXJzZU9iamVjdChzdHIsIHBvcyk7CisgICAgICAgIC8vbG9nbG4oIFVuaWNvZGVTdHJpbmcoIlBhcnNlZCBvYmplY3Q6ICIpICsgbyApOworICAgIAorICAgICAgICBTdHJpbmdCdWZmZXIgZm9ybWF0dGVkID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zcyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBmb3JtYXR0ZWQgPSBmbXQuZm9ybWF0KG8sIGZvcm1hdHRlZCwgcG9zcyk7CisgICAgCisgICAgICAgIGxvZ2xuKCJGb3JtYXR0ZWQgc3RyaW5nOiAiICsgZm9ybWF0dGVkKTsKKyAgICAgICAgaWYgKCFmb3JtYXR0ZWQudG9TdHJpbmcoKS5lcXVhbHMoc3RyKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBXYW50ICIgKyBzdHIgKyAiIEdvdCAiICsgZm9ybWF0dGVkKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQGJ1ZyA0MDYwMjEyCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNjAyMTIoKSB7CisgICAgICAgIFN0cmluZyBkYXRlU3RyaW5nID0gIjE5OTUtMDQwLjA1OjAxOjI5IjsKKyAgICAgICAgbG9nbG4oImRhdGVTdHJpbmc9ICIgKyBkYXRlU3RyaW5nKTsKKyAgICAgICAgbG9nbG4oIlVzaW5nIHl5eXktRERELmhoOm1tOnNzIik7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0dGVyID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktRERELmhoOm1tOnNzIik7CisgICAgICAgIFBhcnNlUG9zaXRpb24gcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIERhdGUgbXlEYXRlID0gZm9ybWF0dGVyLnBhcnNlKGRhdGVTdHJpbmcsIHBvcyk7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgRGF0ZUZvcm1hdC5MT05HKTsgCisgICAgICAgIFN0cmluZyBteVN0cmluZyA9IGZtdC5mb3JtYXQobXlEYXRlKTsKKyAgICAgICAgbG9nbG4obXlTdHJpbmcpOworICAgICAgICBDYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgY2FsLnNldFRpbWUobXlEYXRlKTsKKyAgICAgICAgaWYgKChjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSAhPSA0MCkpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogR290ICIgKyBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSArICIgV2FudCA0MCIpOworICAgIAorICAgICAgICBsb2dsbigiVXNpbmcgeXl5eS1kZGQuaGg6bW06c3MiKTsKKyAgICAgICAgZm9ybWF0dGVyID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktZGRkLmhoOm1tOnNzIik7CisgICAgICAgIHBvcy5zZXRJbmRleCgwKTsKKyAgICAgICAgbXlEYXRlID0gZm9ybWF0dGVyLnBhcnNlKGRhdGVTdHJpbmcsIHBvcyk7CisgICAgICAgIG15U3RyaW5nID0gZm10LmZvcm1hdChteURhdGUpOworICAgICAgICBsb2dsbihteVN0cmluZyk7CisgICAgICAgIGNhbC5zZXRUaW1lKG15RGF0ZSk7CisgICAgICAgIGlmICgoY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikgIT0gNDApKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IEdvdCAiICsgY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikgKyAiIFdhbnQgNDAiKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQGJ1ZyA0MDYxMjg3CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNjEyODcoKSB7CisgICAgCisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiZGQvTU0veXl5eSIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbG9nbG4oZGYucGFyc2UoIjM1LzAxLzE5NzEiKS50b1N0cmluZygpKTsKKyAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBlKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZGYuc2V0TGVuaWVudChmYWxzZSk7CisgICAgICAgIGJvb2xlYW4gb2sgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxvZ2xuKGRmLnBhcnNlKCIzNS8wMS8xOTcxIikudG9TdHJpbmcoKSk7CisgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IExlbmllbnQgbm90IHdvcmtpbmciKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQGJ1ZyA0MDY1MjQwCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNjUyNDAoKSB7CisgICAgICAgIERhdGUgY3VyRGF0ZTsKKyAgICAgICAgRGF0ZUZvcm1hdCBzaG9ydGRhdGUsIGZ1bGxkYXRlOworICAgICAgICBTdHJpbmcgc3RyU2hvcnREYXRlLCBzdHJGdWxsRGF0ZTsKKyAgICAgICAgTG9jYWxlIHNhdmVMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICBUaW1lWm9uZSBzYXZlWm9uZSA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIExvY2FsZSBjdXJMb2NhbGUgPSBuZXcgTG9jYWxlKCJkZSIsICJERSIpOworICAgICAgICAgICAgTG9jYWxlLnNldERlZmF1bHQoY3VyTG9jYWxlKTsKKyAgICAgICAgICAgIC8vIHtzZmJ9IGFkb3B0RGVmYXVsdCBpbnN0ZWFkIG9mIHNldERlZmF1bHQKKyAgICAgICAgICAgIC8vVGltZVpvbmUuc2V0RGVmYXVsdChUaW1lWm9uZS5jcmVhdGVUaW1lWm9uZSgiRVNUIikpOworICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChUaW1lWm9uZS5nZXRUaW1lWm9uZSgiRVNUIikpOworICAgICAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICAgICAgY2FsLnNldCg5OCArIDE5MDAsIDAsIDEpOworICAgICAgICAgICAgY3VyRGF0ZSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICBzaG9ydGRhdGUgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LlNIT1JUKTsKKyAgICAgICAgICAgIGZ1bGxkYXRlID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuTE9ORywgRGF0ZUZvcm1hdC5MT05HKTsKKyAgICAgICAgICAgIHN0clNob3J0RGF0ZSA9ICJUaGUgY3VycmVudCBkYXRlIChzaG9ydCBmb3JtKSBpcyAiOworICAgICAgICAgICAgU3RyaW5nIHRlbXA7CisgICAgICAgICAgICB0ZW1wID0gc2hvcnRkYXRlLmZvcm1hdChjdXJEYXRlKTsKKyAgICAgICAgICAgIHN0clNob3J0RGF0ZSArPSB0ZW1wOworICAgICAgICAgICAgc3RyRnVsbERhdGUgPSAiVGhlIGN1cnJlbnQgZGF0ZSAobG9uZyBmb3JtKSBpcyAiOworICAgICAgICAgICAgU3RyaW5nIHRlbXAyID0gZnVsbGRhdGUuZm9ybWF0KGN1ckRhdGUpOworICAgICAgICAgICAgc3RyRnVsbERhdGUgKz0gdGVtcDI7CisgICAgCisgICAgICAgICAgICBsb2dsbihzdHJTaG9ydERhdGUpOworICAgICAgICAgICAgbG9nbG4oc3RyRnVsbERhdGUpOworICAgIAorICAgICAgICAgICAgLy8ge3NmYn0gV2hhdCB0byBkbyB3aXRoIHJlc291cmNlIGJ1bmRsZSBzdHVmZj8/Pz8/CisgICAgCisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQ7IGlmIG5vdCwgd2UgY2FuJ3QgdGVzdAorICAgICAgICAgICAgLy9SZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisgICAgICAgICAgICAvLyAgICBJQ1VMb2NhbGVEYXRhLmdldEJ1bmRsZSgiRGF0ZUZvcm1hdFpvbmVEYXRhIiwgY3VyTG9jYWxlKTsgCisgICAgCisgICAgICAgICAgICAvLyB7c2ZifSBBUEkgY2hhbmdlIHRvIFJlc291cmNlQnVuZGxlIC0tIGFkZCBnZXRMb2NhbGUoKQorICAgICAgICAgICAgLyppZiAoYnVuZGxlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCkuZXF1YWxzKCJkZSIpKSB7CisgICAgICAgICAgICAgICAgLy8gVVBEQVRFIFRISVMgQVMgWk9ORSBOQU1FIFJFU09VUkNFIEZPUiA8RVNUPiBpbiBkZV9ERSBpcyB1cGRhdGVkCisgICAgICAgICAgICAgICAgaWYgKCFzdHJGdWxsRGF0ZS5lbmRzV2l0aCgiR01ULTA1OjAwIikpCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBXYW50IEdNVC0wNTowMCIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiKioqIFRFU1QgQ09VTEQgTk9UIEJFIENPTVBMRVRFRCBCRUNBVVNFIERhdGVGb3JtYXRab25lRGF0YSAqKioiKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiKioqIEZPUiBMT0NBTEUgZGUgT1IgZGVfREUgSVMgTUlTU0lORyAqKioiKTsKKyAgICAgICAgICAgIH0qLworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nbG4oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgTG9jYWxlLnNldERlZmF1bHQoc2F2ZUxvY2FsZSk7CisgICAgICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KHNhdmVab25lKTsKKyAgICAgICAgfQorICAgIAorICAgIH0KKyAgICAKKyAgICAvKgorICAgICAgRGF0ZUZvcm1hdC5lcXVhbHMgaXMgdG9vIG5hcnJvd2x5IGRlZmluZWQuICBBcyBhIHJlc3VsdCwgTWVzc2FnZUZvcm1hdAorICAgICAgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkuICBEYXRlRm9ybWF0LmVxdWFscyBuZWVkcyB0byBiZSB3cml0dGVuIHNvCisgICAgICB0aGF0IHRoZSBDYWxlbmRhciBzdWItb2JqZWN0IGlzIG5vdCBjb21wYXJlZCB1c2luZyBDYWxlbmRhci5lcXVhbHMsCisgICAgICBidXQgcmF0aGVyIGNvbXBhcmVkIGZvciBlcXVpdmFsZW5jeS4gIFRoaXMgbWF5IG5lY2Vzc2l0YXRlIGFkZGluZyBhCisgICAgICAocGFja2FnZSBwcml2YXRlKSBtZXRob2QgdG8gQ2FsZW5kYXIgdG8gdGVzdCBmb3IgZXF1aXZhbGVuY3kuCisgICAgICAKKyAgICAgIEN1cnJlbnRseSB0aGlzIGJ1ZyBicmVha3MgTWVzc2FnZUZvcm1hdC50b1BhdHRlcm4KKyAgICAgICovCisgICAgLyoqCisgICAgICogQGJ1ZyA0MDcxNDQxCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNzE0NDEoKSB7CisgICAgICAgIERhdGVGb3JtYXQgZm10QSA9IERhdGVGb3JtYXQuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgRGF0ZUZvcm1hdCBmbXRCID0gRGF0ZUZvcm1hdC5nZXRJbnN0YW5jZSgpOworICAgIAorICAgICAgICAvLyB7c2ZifSBJcyBpdCBPSyB0byBjYXN0IGF3YXkgY29uc3QgaGVyZT8KKyAgICAgICAgQ2FsZW5kYXIgY2FsQSA9IGZtdEEuZ2V0Q2FsZW5kYXIoKTsKKyAgICAgICAgQ2FsZW5kYXIgY2FsQiA9IGZtdEIuZ2V0Q2FsZW5kYXIoKTsKKyAgICAgICAgY2FsQS5jbGVhcigpOworICAgICAgICBjYWxBLnNldCgxOTAwLCAwICwwKTsKKyAgICAgICAgY2FsQi5jbGVhcigpOworICAgICAgICBjYWxCLnNldCgxOTAwLCAwLCAwKTsKKyAgICAgICAgaWYgKCFjYWxBLmVxdWFscyhjYWxCKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBDYW4ndCBjb21wbGV0ZSB0ZXN0OyBDYWxlbmRhciBpbnN0YW5jZXMgdW5lcXVhbCIpOworICAgICAgICBpZiAoIWZtdEEuZXF1YWxzKGZtdEIpKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IERhdGVGb3JtYXQgdW5lcXVhbCB3aGVuIENhbGVuZGFycyBlcXVhbCIpOworICAgICAgICBjYWxCLmNsZWFyKCk7CisgICAgICAgIGNhbEIuc2V0KDE5NjEsIENhbGVuZGFyLkRFQ0VNQkVSLCAyNSk7CisgICAgICAgIGlmIChjYWxBLmVxdWFscyhjYWxCKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBDYW4ndCBjb21wbGV0ZSB0ZXN0OyBDYWxlbmRhciBpbnN0YW5jZXMgZXF1YWwiKTsKKyAgICAgICAgaWYgKCFmbXRBLmVxdWFscyhmbXRCKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBEYXRlRm9ybWF0IHVuZXF1YWwgd2hlbiBDYWxlbmRhcnMgZXF1aXZhbGVudCIpOworICAgICAgICBsb2dsbigiRGF0ZUZvcm1hdC5lcXVhbHMgb2siKTsKKyAgICB9CisgICAgICAgIAorICAgIC8qIFRoZSBqYXZhLnRleHQuRGF0ZUZvcm1hdC5wYXJzZShTdHJpbmcpIG1ldGhvZCBleHBlY3RzIGZvciB0aGUKKyAgICAgIFVTIGxvY2FsZSBhIHN0cmluZyBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIG1tL2RkL3l5IGFuZCBwYXJzZXMgaXQKKyAgICAgIGNvcnJlY3RseS4KKyAgICAKKyAgICAgIFdoZW4gZ2l2ZW4gYSBzdHJpbmcgbW0vZGQveXl5eSBpdCBvbmx5IHBhcnNlcyB1cCB0byB0aGUgZmlyc3QKKyAgICAgIHR3byB5J3MsIHR5cGljYWxseSByZXN1bHRpbmcgaW4gYSBkYXRlIGluIHRoZSB5ZWFyIDE5MTkuCisgICAgICAKKyAgICAgIFBsZWFzZSBleHRlbmQgdGhlIHBhcnNpbmcgbWV0aG9kKHMpIHRvIGhhbmRsZSBzdHJpbmdzIHdpdGgKKyAgICAgIGZvdXItZGlnaXQgeWVhciB2YWx1ZXMgKHByb2JhYmx5IGFsc28gYXBwbGljYWJsZSB0byB2YXJpb3VzCisgICAgICBvdGhlciBsb2NhbGVzLiAgKi8KKyAgICAvKioKKyAgICAgKiBAYnVnIDQwNzMwMDMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA3MzAwMygpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIERhdGVGb3JtYXQgZm10ID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoRGF0ZUZvcm1hdC5TSE9SVCwgTG9jYWxlLlVTKTsKKyAgICAgICAgICAgIFN0cmluZyB0ZXN0c1tdID0geyIxMi8yNS82MSIsICIxMi8yNS8xOTYxIiwgIjQvMy8yMDEwIiwgIjQvMy8xMCJ9OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICBEYXRlIGQgPSBmbXQucGFyc2UodGVzdHNbaV0pOworICAgICAgICAgICAgICAgIERhdGUgZGQgPSBmbXQucGFyc2UodGVzdHNbaSArIDFdKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgczsKKyAgICAgICAgICAgICAgICBzID0gZm10LmZvcm1hdChkKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3M7CisgICAgICAgICAgICAgICAgc3MgPSBmbXQuZm9ybWF0KGRkKTsKKyAgICAgICAgICAgICAgICBpZiAoZC5nZXRUaW1lKCkgIT0gZGQuZ2V0VGltZSgpKQorICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGQgKyAiICE9ICIgKyBkZCk7CisgICAgICAgICAgICAgICAgaWYgKCFzLmVxdWFscyhzcykpCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiAiICsgcyArICIgIT0gIiArIHNzKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBzICsgIiAiICsgZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiAiICsgZSk7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9ICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAYnVnIDQwODkxMDYKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA4OTEwNigpIHsKKyAgICAgICAgVGltZVpvbmUgZGVmID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGltZVpvbmUgeiA9IG5ldyBTaW1wbGVUaW1lWm9uZSgoaW50KSAoMS4yNSAqIDM2MDAwMDApLCAiRkFLRVpPTkUiKTsKKyAgICAgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQoeik7CisgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgpOworICAgICAgICAgICAgaWYgKCFmLmdldFRpbWVab25lKCkuZXF1YWxzKHopKQorICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBTaW1wbGVUaW1lWm9uZSBzaG91bGQgdXNlIFRpbWVab25lLmdldERlZmF1bHQoKSIpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChkZWYpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEBidWcgNDEwMDMwMgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTAwMzAyKCkgeworICAgICAgICAKKyAgICAgICAgTG9jYWxlIGxvY2FsZXNbXSA9IHsKKyAgICAgICAgICAgIExvY2FsZS5DQU5BREEsIExvY2FsZS5DQU5BREFfRlJFTkNILCBMb2NhbGUuQ0hJTkEsIAorICAgICAgICAgICAgTG9jYWxlLkNISU5FU0UsIExvY2FsZS5FTkdMSVNILCBMb2NhbGUuRlJBTkNFLCBMb2NhbGUuRlJFTkNILCAKKyAgICAgICAgICAgIExvY2FsZS5HRVJNQU4sIExvY2FsZS5HRVJNQU5ZLCBMb2NhbGUuSVRBTElBTiwgTG9jYWxlLklUQUxZLCAKKyAgICAgICAgICAgIExvY2FsZS5KQVBBTiwgTG9jYWxlLkpBUEFORVNFLCBMb2NhbGUuS09SRUEsIExvY2FsZS5LT1JFQU4sIAorICAgICAgICAgICAgTG9jYWxlLlBSQywgTG9jYWxlLlNJTVBMSUZJRURfQ0hJTkVTRSwgTG9jYWxlLlRBSVdBTiwgCisgICAgICAgICAgICBMb2NhbGUuVFJBRElUSU9OQUxfQ0hJTkVTRSwgTG9jYWxlLlVLLCBMb2NhbGUuVVN9OyAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJvb2xlYW4gcGFzcyA9IHRydWU7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIxOyBpKyspIHsKKyAgICAgICAgICAgICAgICBGb3JtYXQgZm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgRGF0ZUZvcm1hdC5GVUxMLCBsb2NhbGVzW2ldKTsgCisgICAgICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzOworICAgICAgICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICAgICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKGJhb3MpOworICAgICAgICAgICAgICAgIG9vcy53cml0ZU9iamVjdChmb3JtYXQpOworICAgICAgICAgICAgICAgIG9vcy5mbHVzaCgpOworICAgICAgICAgICAgICAgIGJhb3MuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBieXRlcyA9IGJhb3MudG9CeXRlQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0obmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVzKSk7CisgICAgICAgICAgICAgICAgT2JqZWN0IG8gPSBvaXMucmVhZE9iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICghZm9ybWF0LmVxdWFscyhvKSkgeworICAgICAgICAgICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJEYXRlRm9ybWF0IGluc3RhbmNlIGZvciBsb2NhbGUgIiArIGxvY2FsZXNbaV0gKyAiIGlzIGluY29ycmVjdGx5IHNlcmlhbGl6ZWQvZGVzZXJpYWxpemVkLiIpOyAKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiRGF0ZUZvcm1hdCBpbnN0YW5jZSBmb3IgbG9jYWxlICIgKyBsb2NhbGVzW2ldICsgIiBpcyBPS0FZLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcGFzcykKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogRGF0ZUZvcm1hdCBzZXJpYWxpemF0aW9uL2VxdWFsaXR5IGJ1ZyIpOworICAgICAgICB9IGNhdGNoIChPcHRpb25hbERhdGFFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBlKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBlKTsKKyAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGUpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBlKTsKKyAgICAgICAgfQorICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAYnVnIDQxMDE0ODMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwMTQ4MygpIHsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieiIsIExvY2FsZS5VUyk7CisgICAgICAgIEZpZWxkUG9zaXRpb24gZnAgPSBuZXcgRmllbGRQb3NpdGlvbihEYXRlRm9ybWF0LlRJTUVaT05FX0ZJRUxEKTsKKyAgICAgICAgRGF0ZSBkID0gbmV3IERhdGUoOTIzNDU2Nzg5MEwpOworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIHNkZi5mb3JtYXQoZCwgYnVmLCBmcCk7CisgICAgICAgIGxvZ2xuKHNkZi5mb3JtYXQoZCwgYnVmLCBmcCkudG9TdHJpbmcoKSk7CisgICAgICAgIGxvZ2xuKCJiZWdpbkluZGV4ID0gIiArIGZwLmdldEJlZ2luSW5kZXgoKSk7CisgICAgICAgIGxvZ2xuKCJlbmRJbmRleCA9ICIgKyBmcC5nZXRFbmRJbmRleCgpKTsKKyAgICAgICAgaWYgKGZwLmdldEJlZ2luSW5kZXgoKSA9PSBmcC5nZXRFbmRJbmRleCgpKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IEVtcHR5IGZpZWxkIik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEBidWcgNDEwMzM0MAorICAgICAqIEBidWcgNDEzODIwMworICAgICAqIFRoaXMgYnVnIHJlYWxseSBvbmx5IHdvcmtzIGluIExvY2FsZS5VUywgc2luY2UgdGhhdCdzIHdoYXQgdGhlIGxvY2FsZQorICAgICAqIHVzZWQgZm9yIERhdGUudG9TdHJpbmcoKSBpcy4gIEJ1ZyA0MTM4MjAzIHJlcG9ydHMgdGhhdCBpdCBmYWlscyBvbiBLb3JlYW4KKyAgICAgKiBOVDsgaXQgd291bGQgYWN0dWFsbHkgaGF2ZSBmYWlsZWQgb24gYW55IG5vbi1VUyBsb2NhbGUuICBOb3cgaXQgc2hvdWxkCisgICAgICogd29yayBvbiBhbGwgbG9jYWxlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwMzM0MCgpIHsKKyAgICAKKyAgICAgICAgLy8gY2hvb3NlIGEgZGF0ZSB0aGF0IGlzIHRoZSBGSVJTVCBvZiBzb21lIG1vbnRoIAorICAgICAgICAvLyBhbmQgc29tZSBhcmJpdHJhcnkgdGltZQorICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgxOTk3LCAzLCAxLCAxLCAxLCAxKTsKKyAgICAgICAgRGF0ZSBkID0gY2FsLmdldFRpbWUoKTsgCisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiTU1NTSIsIExvY2FsZS5VUyk7CisgICAgICAgIFN0cmluZyBzID0gZC50b1N0cmluZygpOworICAgICAgICBTdHJpbmdCdWZmZXIgczIgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgczIgPSBkZi5mb3JtYXQoZCwgczIsIHBvcyk7CisgICAgICAgIGxvZ2xuKCJEYXRlPSIgKyBzKTsgCisgICAgICAgIGxvZ2xuKCJERj0iICsgczIpOworICAgICAgICBTdHJpbmcgc3Vic3RyID0gczIuc3Vic3RyaW5nKDAsMik7CisgICAgICAgIGlmIChzLmluZGV4T2Yoc3Vic3RyKSA9PSAtMSkKKyAgICAgICAgICBlcnJsbigiTW9udGhzIHNob3VsZCBtYXRjaCIpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAYnVnIDQxMDMzNDEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwMzM0MSgpIHsKKyAgICAgICAgVGltZVpvbmUgc2F2ZVpvbmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyB7c2ZifSBjaGFuZ2VkIGZyb20gYWRvcHREZWZhdWx0IHRvIHNldERlZmF1bHQKKyAgICAgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkNTVCIpKTsKKyAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2ltcGxlID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIk1NL2RkL3l5eXkgSEg6bW0iKTsKKyAgICAgICAgICAgIFRpbWVab25lIHRlbXAgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgICAgICBpZiAoIXNpbXBsZS5nZXRUaW1lWm9uZSgpLmVxdWFscyh0ZW1wKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogU2ltcGxlRGF0ZUZvcm1hdCBub3QgdXNpbmcgZGVmYXVsdCB6b25lIik7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KHNhdmVab25lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAYnVnIDQxMDQxMzYKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwNDEzNigpIHsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgpOworICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICIndGltZScgaGg6bW0iOworICAgICAgICBzZGYuYXBwbHlQYXR0ZXJuKHBhdHRlcm4pOworICAgICAgICBsb2dsbigicGF0dGVybjogXCIiICsgcGF0dGVybiArICJcIiIpOworICAgICAgICBTdHJpbmcgc3RyaW5nc1tdID0geyJ0aW1lIDEwOjMwIiwgInRpbWUgMTA6eCIsICJ0aW1lIDEweCJ9OworICAgICAgICBQYXJzZVBvc2l0aW9uIHBwb3NbXSA9IHtuZXcgUGFyc2VQb3NpdGlvbigxMCksIG5ldyBQYXJzZVBvc2l0aW9uKDApLCBuZXcgUGFyc2VQb3NpdGlvbigwKX07CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDE5NzAsIENhbGVuZGFyLkpBTlVBUlksIDEsIDEwLCAzMCk7CisgICAgICAgIERhdGUgZGF0ZXNbXSA9IHtjYWwuZ2V0VGltZSgpLCBuZXcgRGF0ZSgtMSksIG5ldyBEYXRlKC0xKX07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IHN0cmluZ3NbaV07CisgICAgICAgICAgICBQYXJzZVBvc2l0aW9uIGZpbmlzaCA9IHBwb3NbaV07CisgICAgICAgICAgICBEYXRlIGV4cCA9IGRhdGVzW2ldOworICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwb3MgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgICAgIERhdGUgZCA9IHNkZi5wYXJzZSh0ZXh0LCBwb3MpOworICAgICAgICAgICAgbG9nbG4oIiB0ZXh0OiBcIiIgKyB0ZXh0ICsgIlwiIik7CisgICAgICAgICAgICBsb2dsbigiIGluZGV4OiAlZCIgKyBwb3MuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBsb2dsbigiIHJlc3VsdDogIiArIGQpOworICAgICAgICAgICAgaWYgKHBvcy5nZXRJbmRleCgpICE9IGZpbmlzaC5nZXRJbmRleCgpKQorICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBFeHBlY3RlZCBwb3MgIiArIGZpbmlzaC5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIGlmICghKChkID09IG51bGwgJiYgZXhwLmVxdWFscyhuZXcgRGF0ZSgtMSkpKSB8fCAoZC5lcXVhbHMoZXhwKSkpKQorICAgICAgICAgICAgICAgIGVycmxuKCAiRmFpbDogRXhwZWN0ZWQgcmVzdWx0ICIgKyBleHApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEBidWcgNDEwNDUyMgorICAgICAqIENBTk5PVCBSRVBST0RVQ0UKKyAgICAgKiBBY2NvcmRpbmcgdG8gdGhlIGJ1ZyByZXBvcnQsIHRoaXMgdGVzdCBzaG91bGQgdGhyb3cgYQorICAgICAqIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZHVyaW5nIHRoZSBzZWNvbmQgcGFyc2UuICBIb3dldmVyLAorICAgICAqIHRoaXMgaXMgbm90IHNlZW4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMDQ1MjIoKSB7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoKTsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAiJ3RpbWUnIGhoOm1tIjsKKyAgICAgICAgc2RmLmFwcGx5UGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAgbG9nbG4oInBhdHRlcm46IFwiIiArIHBhdHRlcm4gKyAiXCIiKTsKKyAgICAgICAgLy8gd29ya3MgY29ycmVjdGx5CisgICAgICAgIFBhcnNlUG9zaXRpb24gcHAgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSAidGltZSAiOworICAgICAgICBEYXRlIGR0ID0gc2RmLnBhcnNlKHRleHQsIHBwKTsKKyAgICAgICAgbG9nbG4oIiB0ZXh0OiBcIiIgKyB0ZXh0ICsgIlwiIiArICIgZGF0ZTogIiArIGR0KTsKKyAgICAgICAgLy8gd29ya3Mgd3JvbmcKKyAgICAgICAgcHAuc2V0SW5kZXgoMCk7CisgICAgICAgIHRleHQgPSAidGltZSI7CisgICAgICAgIGR0ID0gc2RmLnBhcnNlKHRleHQsIHBwKTsKKyAgICAgICAgbG9nbG4oIiB0ZXh0OiBcIiIgKyB0ZXh0ICsgIlwiIiArICIgZGF0ZTogIiArIGR0KTsgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEBidWcgNDEwNjgwNworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTA2ODA3KCkgeworICAgICAgICBEYXRlIGR0OworICAgICAgICBEYXRlRm9ybWF0IGRmID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKCk7CisgICAgCisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2Rmc1tdID0geworICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5TU1kZEhIbW1zcyIpLCAKKyAgICAgICAgICAgICAgICBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eU1NZGRISG1tc3MnWiciKSwgCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXlNTWRkSEhtbXNzJyciKSwgCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXlNTWRkSEhtbXNzJ2EnJ2EnIiksIAorICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5TU1kZEhIbW1zcyAlIil9OyAKKyAgICAgICAgU3RyaW5nIHN0cmluZ3NbXSA9IHsKKyAgICAgICAgICAgICAgICAiMTk5ODAyMTExNDAwMDAiLCAKKyAgICAgICAgICAgICAgICAiMTk5ODAyMTExNDAwMDAiLCAKKyAgICAgICAgICAgICAgICAiMTk5ODAyMTExNDAwMDAiLCAKKyAgICAgICAgICAgICAgICAiMTk5ODAyMTExNDAwMDBhIiwgCisgICAgICAgICAgICAgICAgIjE5OTgwMjExMTQwMDAwICJ9OyAKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgVGltZVpvbmUgdGltZVpvbmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIFRpbWVab25lIGdtdCA9IChUaW1lWm9uZSkgdGltZVpvbmUuY2xvbmUoKTsKKyAgICAgICAgZ210LnNldFJhd09mZnNldCgwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0ID0gc2Rmc1tpXTsKKyAgICAgICAgICAgIFN0cmluZyBkYXRlU3RyaW5nID0gc3RyaW5nc1tpXTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZm9ybWF0LnNldFRpbWVab25lKGdtdCk7CisgICAgICAgICAgICAgICAgZHQgPSBmb3JtYXQucGFyc2UoZGF0ZVN0cmluZyk7CisgICAgICAgICAgICAgICAgLy8ge3NmYn0gc29tZSBvZiB0aGVzZSBwYXJzZXMgd2lsbCBmYWlsIHB1cnBvc2VseQorICAgIAorICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBmbXRkID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgICAgICAgICBmbXRkID0gZGYuZm9ybWF0KGR0LCBmbXRkLCBwb3MpOworICAgICAgICAgICAgICAgIGxvZ2xuKGZtdGQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgLy9sb2dsbihkZi5mb3JtYXQoZHQpKTsgCisgICAgICAgICAgICAgICAgZ2Muc2V0VGltZShkdCk7CisgICAgICAgICAgICAgICAgbG9nbG4oIiIgKyBnYy5nZXQoQ2FsZW5kYXIuWk9ORV9PRkZTRVQpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICAgICAgICAgIHMgPSBmb3JtYXQuZm9ybWF0KGR0LCBzLCBwb3MpOworICAgICAgICAgICAgICAgIGxvZ2xuKHMudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk5vIHdheSBKb3NlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgIFN5bm9wc2lzOiBDaGluZXNlIHRpbWUgem9uZSBDVFQgaXMgbm90IHJlY29nb25pemVkIGNvcnJlY3RseS4KKyAgICAgIERlc2NyaXB0aW9uOiBQbGF0Zm9ybSBDaGluZXNlIFdpbmRvd3MgOTUgLSAqKiBUaW1lIHpvbmUgc2V0IHRvIENTVCAqKiAKKyAgICAgICovCisgICAgLyoqCisgICAgICogQGJ1ZyA0MTA4NDA3CisgICAgICovCisgICAgCisgICAgLy8ge3NmYn0gd2hhdCB0byBkbyB3aXRoIHRoaXMgb25lID8/IAorICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTA4NDA3KCkgeworICAgICAgICAvKgorICAgICAgICBsb25nIGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsgCisgICAgICAgIGxvZ2xuKCJ1c2VyLnRpbWV6b25lID0gIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci50aW1lem9uZSIsICI/IikpOworICAgICAgICBsb2dsbigiVGltZSBab25lIDoiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpLmdldFRpbWVab25lKCkuZ2V0SUQoKSk7IAorICAgICAgICBsb2dsbigiRGVmYXVsdCBmb3JtYXQgOiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKCkuZm9ybWF0KG5ldyBEYXRlKGwpKSk7IAorICAgICAgICBsb2dsbigiRnVsbCBmb3JtYXQgOiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCkuZm9ybWF0KG5ldyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGUobCkpKTsgCisgICAgICAgIGxvZ2xuKCIqKiogU2V0IGhvc3QgVFogdG8gQ1NUICoqKiIpOworICAgICAgICBsb2dsbigiKioqIFRIRSBSRVNVTFRTIE9GIFRISVMgVEVTVCBNVVNUIEJFIFZFUklGSUVEIE1BTlVBTExZICoqKiIpOworICAgICAgICAqLworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAYnVnIDQxMzQyMDMKKyAgICAgKiBTaW1wbGVEYXRlRm9ybWF0IHdvbid0IHBhcnNlICJHTVQiCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMzQyMDMoKSB7CisgICAgICAgIFN0cmluZyBkYXRlRm9ybWF0ID0gIk1NL2RkL3l5IEhIOm1tOnNzIHp6eiI7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm10ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoZGF0ZUZvcm1hdCk7CisgICAgCisgICAgICAgIFBhcnNlUG9zaXRpb24gcDAgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgRGF0ZSBkID0gZm10LnBhcnNlKCIwMS8yMi85MiAwNDo1MjowMCBHTVQiLCBwMCk7CisgICAgICAgIGxvZ2xuKGQudG9TdHJpbmcoKSk7CisgICAgICAgIGlmKHAwLmVxdWFscyhuZXcgUGFyc2VQb3NpdGlvbigwKSkpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogZmFpbGVkIHRvIHBhcnNlICdHTVQnIik7CisgICAgICAgIC8vIEluIHRoZSBmYWlsdXJlIGNhc2UgYW4gZXhjZXB0aW9uIGlzIHRocm93biBieSBwYXJzZSgpOworICAgICAgICAvLyBpZiBubyBleGNlcHRpb24gaXMgdGhyb3duLCB0aGUgdGVzdCBwYXNzZXMuCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEBidWcgNDE1MTYzMQorICAgICAqIFNpbXBsZURhdGVGb3JtYXQgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIDIgc2luZ2xlIHF1b3RlcyBpbiBmb3JtYXQoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTUxNjMxKCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9IAorICAgICAgICAgICAgIidUT19EQVRFKCcnJ2RkJy0nTU0nLSd5eXl5IEhIOm1tOnNzJycnICwgJydERC1NTS1ZWVlZIEhIOk1JOlNTJycpJyI7IAorICAgICAgICBsb2dsbigicGF0dGVybj0iICsgcGF0dGVybik7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocGF0dGVybiwgTG9jYWxlLlVTKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgxOTk4LCBDYWxlbmRhci5KVU5FLCAzMCwgMTMsIDMwLCAwKTsKKyAgICAgICAgRGF0ZSBkID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgcmVzdWx0ID0gZm9ybWF0LmZvcm1hdChkLCByZXN1bHQsIHBvcyk7IAorICAgICAgICBpZiAoIXJlc3VsdC50b1N0cmluZygpLmVxdWFscygiVE9fREFURSgnMzAtMDYtMTk5OCAxMzozMDowMCcgLCAnREQtTU0tWVlZWSBISDpNSTpTUycpIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiByZXN1bHQ9IiArIHJlc3VsdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiUGFzczogcmVzdWx0PSIgKyByZXN1bHQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEBidWcgNDE1MTcwNgorICAgICAqICd6JyBhdCBlbmQgb2YgZGF0ZSBmb3JtYXQgdGhyb3dzIGluZGV4IGV4Y2VwdGlvbiBpbiBTaW1wbGVEYXRlRm9ybWF0CisgICAgICogQ0FOTk9UIFJFUFJPRFVDRSBUSElTIEJVRyBPTiAxLjJGQ1MKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE1MTcwNigpIHsKKyAgICAgICAgU3RyaW5nIGRhdGVTdHJpbmcgPSAiVGh1cnNkYXksIDMxLURlYy05OCAyMzowMDowMCBHTVQiOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZtdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFRUVFLCBkZC1NTU0teXkgSEg6bW06c3MgeiIsIExvY2FsZS5VUyk7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKFRpbWVab25lLmdldFRpbWVab25lKCJVVEMiKSwgTG9jYWxlLlVTKTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMTk5OCwgQ2FsZW5kYXIuREVDRU1CRVIsIDMxLCAyMywgMCwgMCk7CisgICAgICAgIERhdGUgZCA9IG5ldyBEYXRlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkID0gZm10LnBhcnNlKGRhdGVTdHJpbmcpOworICAgICAgICAgICAgLy8ge3NmYn0gd2hhdCBhYm91dCBuZXh0IHR3byBsaW5lcz8KKyAgICAgICAgICAgIGlmIChkLmdldFRpbWUoKSAhPSBjYWwuZ2V0VGltZSgpLmdldFRpbWUoKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiSW5jb3JyZWN0IHZhbHVlOiAiICsgZCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGUpOworICAgICAgICB9CisgICAgICAgIFN0cmluZ0J1ZmZlciB0ZW1wID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7CisgICAgICAgIGxvZ2xuKGRhdGVTdHJpbmcgKyAiIC4gIiArIGZtdC5mb3JtYXQoZCwgdGVtcCwgcG9zKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEBidWcgNDE2MjA3MQorICAgICAqIENhbm5vdCByZXByb2R1Y2UgdGhpcyBidWcgdW5kZXIgMS4yIEZDUyAtLSBpdCBtYXkgYmUgYSBjb252b2x1dGVkIGR1cGxpY2F0ZQorICAgICAqIG9mIHNvbWUgb3RoZXIgYnVnIHRoYXQgaGFzIGJlZW4gZml4ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNjIwNzEoKSB7CisgICAgICAgIFN0cmluZyBkYXRlU3RyaW5nID0gIlRodSwgMzAtSnVsLTE5OTkgMTE6NTE6MTQgR01UIjsKKyAgICAgICAgU3RyaW5nIGZvcm1hdCA9ICJFRUUnLCAnZGQtTU1NLXl5eXkgSEg6bW06c3MgeiI7IC8vIFJGQyA4MjIvMTEyMworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGRmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoZm9ybWF0LCBMb2NhbGUuVVMpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGF0ZSB4ID0gZGYucGFyc2UoZGF0ZVN0cmluZyk7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdGVtcCA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgICAgIGxvZ2xuKGRhdGVTdHJpbmcgKyAiIC0+ICIgKyBkZi5mb3JtYXQoeCwgdGVtcCwgcG9zKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiUGFyc2UgZm9ybWF0IFwiIiArIGZvcm1hdCArICJcIiBmYWlsZWQuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRGF0ZUZvcm1hdCBzaG91bGRuJ3QgcGFyc2UgeWVhciAiLTEiIGFzIGEgdHdvLWRpZ2l0IHllYXIgKGUuZy4sICItMSIgLiAxOTk5KS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE4MjA2NigpIHsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmbXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiTU0vZGQveXkiLCBMb2NhbGUuVVMpOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGRpc3BGbXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiTU1NIGRkIHl5eXkgSEg6bW06c3MgR0ciLCBMb2NhbGUuVVMpOworICAgICAgICAvKiBXZSBleHBlY3QgMi1kaWdpdCB5ZWFyIGZvcm1hdHMgdG8gcHV0IDItZGlnaXQgeWVhcnMgaW4gdGhlIHJpZ2h0CisgICAgICAgICAqIHdpbmRvdy4gIE91dCBvZiByYW5nZSB5ZWFycywgdGhhdCBpcywgYW55dGhpbmcgbGVzcyB0aGFuICIwMCIgb3IKKyAgICAgICAgICogZ3JlYXRlciB0aGFuICI5OSIsIGFyZSB0cmVhdGVkIGFzIGxpdGVyYWwgeWVhcnMuICBTbyAiMS8yLzM0NTYiCisgICAgICAgICAqIGJlY29tZXMgMzQ1NiBBRC4gIExpa2V3aXNlLCAiMS8yLy0zIiBiZWNvbWVzIC0zIEFEID09IDIgQkMuCisgICAgICAgICAqLworICAgICAgICBmaW5hbCBTdHJpbmcgU1RSSU5HU1tdID0gCisgICAgICAgICAgICB7IjAyLzI5LzAwIiwgIjAxLzIzLzAxIiwgIjA0LzA1Ly0xIiwgIjAxLzIzLy05IiwgIjExLzEyLzEzMTQiLCAiMTAvMzEvMSIsICIwOS8xMi8rMSIsICIwOS8xMi8wMDEiLH07IAorICAgICAgICBpbnQgU1RSSU5HU19DT1VOVCA9IFNUUklOR1MubGVuZ3RoOworICAgICAgICAgICAgICAgIAorICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBEYXRlIEZBSUxfREFURSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDIwMDAsIENhbGVuZGFyLkZFQlJVQVJZLCAyOSk7CisgICAgICAgIERhdGUgZDAgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgyMDAxLCBDYWxlbmRhci5KQU5VQVJZLCAyMyk7CisgICAgICAgIERhdGUgZDEgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgtMSwgQ2FsZW5kYXIuQVBSSUwsIDUpOworICAgICAgICBEYXRlIGQyID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoLTksIENhbGVuZGFyLkpBTlVBUlksIDIzKTsKKyAgICAgICAgRGF0ZSBkMyA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDEzMTQsIENhbGVuZGFyLk5PVkVNQkVSLCAxMik7CisgICAgICAgIERhdGUgZDQgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgxLCBDYWxlbmRhci5PQ1RPQkVSLCAzMSk7CisgICAgICAgIERhdGUgZDUgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsgICAgICAgIAorICAgICAgICBjYWwuc2V0KDEsIENhbGVuZGFyLlNFUFRFTUJFUiwgMTIpOworICAgICAgICBEYXRlIGQ3ID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgRGF0ZSBEQVRFU1tdID0ge2QwLCBkMSwgZDIsIGQzLCBkNCwgZDUsIEZBSUxfREFURSwgZDd9OworICAgIAorICAgICAgICBTdHJpbmcgb3V0ID0gIiI7CisgICAgICAgIGJvb2xlYW4gcGFzcyA9IHRydWU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1RSSU5HU19DT1VOVDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gU1RSSU5HU1tpXTsKKyAgICAgICAgICAgIERhdGUgZXhwZWN0ZWQgPSBEQVRFU1tpXTsgICAgICAgICAgICAKKyAgICAgICAgICAgIERhdGUgYWN0dWFsID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYWN0dWFsID0gZm10LnBhcnNlKHN0cik7CisgICAgICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgYWN0dWFsID0gRkFJTF9EQVRFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGFjdFN0ciA9ICIiOworICAgICAgICAgICAgaWYgKChhY3R1YWwuZ2V0VGltZSgpKSA9PSBGQUlMX0RBVEUuZ2V0VGltZSgpKSB7CisgICAgICAgICAgICAgICAgYWN0U3RyICs9ICJudWxsIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gWXVjazogU2VlIGoyNQorICAgICAgICAgICAgICAgIGFjdFN0ciA9ICgoRGF0ZUZvcm1hdCkgZGlzcEZtdCkuZm9ybWF0KGFjdHVhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWQuZ2V0VGltZSgpID09IChhY3R1YWwuZ2V0VGltZSgpKSkgeworICAgICAgICAgICAgICAgIG91dCArPSBzdHIgKyAiID0+ICIgKyBhY3RTdHIgKyAiXG4iOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXhwU3RyID0gIiI7CisgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmdldFRpbWUoKSA9PSBGQUlMX0RBVEUuZ2V0VGltZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cFN0ciArPSAibnVsbCI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gWXVjazogU2VlIGoyNQorICAgICAgICAgICAgICAgICAgICBleHBTdHIgPSAoKERhdGVGb3JtYXQpIGRpc3BGbXQpLmZvcm1hdChleHBlY3RlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dCArPSAiRkFJTDogIiArIHN0ciArICIgPT4gIiArIGFjdFN0ciArICIsIGV4cGVjdGVkICIgKyBleHBTdHIgKyAiXG4iOworICAgICAgICAgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFzcykgeworICAgICAgICAgICAgbG9nKG91dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnIob3V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBqMzIge0pESyBCdWcgNDIxMDIwOSA0MjA5MjcyfQorICAgICAqIERhdGVGb3JtYXQgY2Fubm90IHBhcnNlIEZlYiAyOSAyMDAwIHdoZW4gc2V0TGVuaWVudChmYWxzZSkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDIxMDIwOSgpIHsKKyAgICAKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAiTU1NIGQsIHl5eXkiOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHNmbXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChwYXR0ZXJuLCBMb2NhbGUuVVMpOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHNkaXNwID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIk1NTSBkZCB5eXl5IEdHIiwgTG9jYWxlLlVTKTsKKyAgICAgICAgRGF0ZUZvcm1hdCBmbXQgPSAoRGF0ZUZvcm1hdCkgc2ZtdDsgLy8gWXVjazogU2VlIGoyNQorICAgICAgICBEYXRlRm9ybWF0IGRpc3AgPSAoRGF0ZUZvcm1hdCkgc2Rpc3A7IC8vIFl1Y2s6IFNlZSBqMjUKKyAgICAKKyAgICAgICAgQ2FsZW5kYXIgY2FseCA9IChDYWxlbmRhcikgZm10LmdldENhbGVuZGFyKCk7IC8vIGNhc3QgYXdheSBjb25zdCEKKyAgICAgICAgY2FseC5zZXRMZW5pZW50KGZhbHNlKTsKKyAgICAgICAgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWxlbmRhci5jbGVhcigpOworICAgICAgICBjYWxlbmRhci5zZXQoMjAwMCwgQ2FsZW5kYXIuRkVCUlVBUlksIDI5KTsKKyAgICAgICAgRGF0ZSBkID0gY2FsZW5kYXIuZ2V0VGltZSgpOworICAgICAgICBTdHJpbmcgcyA9IGZtdC5mb3JtYXQoZCk7CisgICAgICAgIGxvZ2xuKGRpc3AuZm9ybWF0KGQpICsgIiBmPiAiICsgcGF0dGVybiArICIgPT4gXCIiICsgcyArICJcIiIpOworICAgICAgICBQYXJzZVBvc2l0aW9uIHBvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICBkID0gZm10LnBhcnNlKHMsIHBvcyk7CisgICAgICAgIGxvZ2xuKCJcIiIgKyBzICsgIlwiIHA+ICIgKyBwYXR0ZXJuICsgIiA9PiAiICsgZGlzcC5mb3JtYXQoZCkpOworICAgICAgICBsb2dsbigiUGFyc2UgcG9zID0gIiArIHBvcy5nZXRJbmRleCgpICsgIiwgZXJyb3IgcG9zID0gIiArIHBvcy5nZXRFcnJvckluZGV4KCkpOworICAgICAgICBpZiAocG9zLmdldEVycm9ySW5kZXgoKSAhPSAtMSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IEVycm9yIGluZGV4IHNob3VsZCBiZSAtMSIpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIGJ1ZyBpcyBpbiBHcmVnb3JpYW5DYWxlbmRhci4gIElmIHRoZSBmb2xsb3dpbmcgbGluZXMKKyAgICAgICAgLy8gc3VjY2VlZCwgdGhlIGJ1ZyBpcyBmaXhlZC4gIElmIHRoZSBidWcgaXNuJ3QgZml4ZWQsIHRoZXkgd2lsbCB0aHJvdworICAgICAgICAvLyBhbiBleGNlcHRpb24uCisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldExlbmllbnQoZmFsc2UpOworICAgICAgICBjYWwuc2V0KDIwMDAsIENhbGVuZGFyLkZFQlJVQVJZLCAyOSk7IC8vIFRoaXMgc2hvdWxkIHdvcmshCisgICAgICAgIGxvZ2xuKCJBdHRlbXB0IHRvIHNldCBDYWxlbmRhciB0byBGZWIgMjkgMjAwMDogIiArIGRpc3AuZm9ybWF0KGNhbC5nZXRUaW1lKCkpKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdDcxNCgpIHsKKyAgICAgICAgLy9UaW1lWm9uZSBPZmZzZXQKKyAgICAgICAgVGltZVpvbmUgZGVmYXVsdFRaID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOworICAgICAgICBUaW1lWm9uZSBQU1QgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisgICAgICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gZGVmYXVsdFRaLmdldFJhd09mZnNldCgpOworICAgICAgICBpbnQgUFNUT2Zmc2V0ID0gUFNULmdldFJhd09mZnNldCgpOworICAgICAgICBEYXRlIGQgPSBuZXcgRGF0ZSg5NzgxMDM1NDMwMDBsIC0gKGRlZmF1bHRPZmZzZXQgLSBQU1RPZmZzZXQpKTsKKyAgICAgICAgZCA9IG5ldyBEYXRlKGQuZ2V0VGltZSgpIC0gKGRlZmF1bHRUWi5pbkRheWxpZ2h0VGltZShkKSA/IDM2MDAwMDAgOiAwKSk7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKC0xLCBEYXRlRm9ybWF0Lk1FRElVTSwgTG9jYWxlLlVTKTsKKyAgICAgICAgU3RyaW5nIHRlc3RzID0gIjc6MjU6NDMgQU0iOworICAgICAgICBTdHJpbmcgcyA9IGZtdC5mb3JtYXQoZCk7CisgICAgICAgIGlmICghcy5lcXVhbHModGVzdHMpKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIHMgKyAiICE9ICIgKyB0ZXN0cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiT0s6ICIgKyBzICsgIiA9PSAiICsgdGVzdHMpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9EYXRlRm9ybWF0UmVncmVzc2lvblRlc3RKLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRSZWdyZXNzaW9uVGVzdEouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZTY1YmYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9EYXRlRm9ybWF0UmVncmVzc2lvblRlc3RKLmphdmEKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9EYXRlRm9ybWF0UmVncmVzc2lvblRlc3RKLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MDggJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogTmV3IGFkZGVkLCAyMDAxLTEwLTE3IFtKaW5nL0dDTF0KKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworCitwdWJsaWMgY2xhc3MgRGF0ZUZvcm1hdFJlZ3Jlc3Npb25UZXN0SiBleHRlbmRzIGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrIHsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUVfU1RSSU5HID0gIjIwMDAvMTEvMTcgMDg6MDE6MDAiOworICAgIHN0YXRpYyBmaW5hbCBsb25nIFVUQ19MT05HID0gOTc0NDc2ODYwMDAwTDsKKyAgICBzdGF0aWMgU2ltcGxlRGF0ZUZvcm1hdCBzZGZfID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXkvTU0vZGQgSEg6bW06c3MiKTsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IERhdGVGb3JtYXRSZWdyZXNzaW9uVGVzdEooKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIC8vUmV0dXJuIHZhbHVlIG9mIGdldEFtUG1TdHJpbmdzCisgICAgcHVibGljIHZvaWQgVGVzdDQxMDM5MjYoKSB7CisgICAgICAgIFN0cmluZyBhY3RfQW1wbXNbXTsKKyAgICAgICAgU3RyaW5nIGV4cF9BbXBtc1tdPXsiQU0iLCJQTSJ9OworICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChMb2NhbGUuVVMpOworICAgICAgICAKKyAgICAgICAgRGF0ZUZvcm1hdFN5bWJvbHMgZGZzID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKCk7CisgICAgICAgIGFjdF9BbXBtcyA9IGRmcy5nZXRBbVBtU3RyaW5ncygpOworICAgICAgICBpZihhY3RfQW1wbXMubGVuZ3RoICE9IGV4cF9BbXBtcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVycmxuKCJUaGUgcmVzdWx0IGlzIG5vdCBleHBlY3RlZCEiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvcihpbnQgaSA9MDsgaTxhY3RfQW1wbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZighYWN0X0FtcG1zW2ldLmVxdWFscyhleHBfQW1wbXNbaV0pKQorICAgICAgICAgICAgICAgICAgICBlcnJsbigiVGhlIHJlc3VsdCBpcyBub3QgZXhwZWN0ZWQhIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy9NaXNzaW5nIGRpZ2l0IGluIG1pbGxpc2Vjb25lIGZvcm1hdCBpbiBTaW1wbGVEYXRlRm9ybWF0IAorICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTQ4MTY4KCkgeworICAgICAgICAgICAgRGF0ZSBkID0gbmV3IERhdGUoMTAwMjcwNTIxMjkwNmwpOyAKKyAgICAgICAgICAgIFN0cmluZ1tdIElTT1BhdHRlcm4gPSB7CisgICAgICAgICAgICAgICAgIicneXl5eS1NTS1kZC1oaC5tbS5zcy5TJyciLCAiJyd5eXl5LU1NLWRkLWhoLm1tLnNzLlNTJyciLCAKKyAgICAgICAgICAgICAgICAiJyd5eXl5LU1NLWRkLWhoLm1tLnNzLlNTUycnIiwgIicneXl5eS1NTS1kZC1oaC5tbS5zcy5TU1NTJyciLCAKKyAgICAgICAgICAgICAgICAiJyd5eXl5LU1NLWRkLWhoLm1tLnNzLlNTU1NTJyciLCAiJyd5eXl5LU1NLWRkLWhoLm1tLnNzLlNTU1NTUycnIiwgCisgICAgICAgICAgICAgICAgIicneXl5eS1NTS1kZC1oaC5tbS5zcy5TU1NTU1NTJyciLCAiJyd5eXl5LU1NLWRkLWhoLm1tLnNzLlNTUzAwMCcnIn07CisgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGFTaW1wbGVERiA9IChTaW1wbGVEYXRlRm9ybWF0KURhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSgpOworICAgIAorICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaTxJU09QYXR0ZXJuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYVNpbXBsZURGLmFwcGx5UGF0dGVybiggSVNPUGF0dGVybltpXSApOworICAgICAgICAgICAgICAgIGxvZ2xuKCAiUGF0dGVybiA9ICIgKyBhU2ltcGxlREYudG9QYXR0ZXJuKCkpOworICAgICAgICAgICAgICAgIGxvZ2xuKCAiRm9ybWF0ID0gIiArIGFTaW1wbGVERi5mb3JtYXQoZCkpOworICAgICAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvL0RhdGVGb3JtYXQgZ2V0RGF0ZVRpbWVJbnN0YW5jZShpbnQsIGludCksIGludmFsaWQgc3R5bGVzIG5vIGV4Y2VwdGlvbgorICAgIHB1YmxpYyB2b2lkIFRlc3Q0MjEzMDg2KCkgeworICAgICAgICBEYXRlIHNvbWVEYXRlID0gbmV3IERhdGUoKTsKKyAgICAgICAgU3RyaW5nIGQ7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBEYXRlRm9ybWF0IGRmMiA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSgyLCAtMik7CisgICAgICAgICAgICBkID0gZGYyLmZvcm1hdChzb21lRGF0ZSk7CisgICAgICAgICAgICBlcnJsbigid2Ugc2hvdWxkIGNhdGNoIGFuIGV4Y2VwdGlvbiBoZXJlIik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgbG9nbG4oImRhdGVTdHlsZSA9IDIiICsgIlx0IHRpbWVTdHlsZSA9IC0yIik7CisgICAgICAgICAgICBsb2dsbigiRXhjZXB0aW9uIGNhdWdodCEiKTsKKyAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIERhdGVGb3JtYXQgZGYzID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKDQsIDIpOworICAgICAgICAgICAgZCA9IGRmMy5mb3JtYXQoc29tZURhdGUpOworICAgICAgICAgICAgZXJybG4oIndlIHNob3VsZCBjYXRjaCBhbiBleGNlcHRpb24gaGVyZSIpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgIGxvZ2xuKCJkYXRlU3R5bGUgPSA0IiArICJcdCB0aW1lU3R5bGUgPSAyIik7CisgICAgICAgICAgICBsb2dsbigiRXhjZXB0aW9uIGNhdWdodCEiKTsKKyAgICAgICAgICAgIGxvZ2xuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICB9CisgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBEYXRlRm9ybWF0IGRmNCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSgtMTIsIC0xMik7CisgICAgICAgICAgICBkID0gZGY0LmZvcm1hdChzb21lRGF0ZSk7CisgICAgICAgICAgICBlcnJsbigid2Ugc2hvdWxkIGNhdGNoIGFuIGV4Y2VwdGlvbiBoZXJlIik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgbG9nbG4oImRhdGVTdHlsZSA9IC0xMiIgKyAiXHQgdGltZVN0eWxlID0gLTEyIik7CisgICAgICAgICAgICBsb2dsbigiRXhjZXB0aW9uIGNhdWdodCEiKTsKKyAgICAgICAgICAgIGxvZ2xuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICB9CisgICAgCisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIERhdGVGb3JtYXQgZGY1ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKDIsIDEyMyk7CisgICAgICAgICAgICBkID0gZGY1LmZvcm1hdChzb21lRGF0ZSk7ICAgIAorICAgICAgICAgICAgZXJybG4oIndlIHNob3VsZCBjYXRjaCBhbiBleGNlcHRpb24gaGVyZSIpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgIGxvZ2xuKCJkYXRlU3R5bGUgPSAyIiArICJcdCB0aW1lU3R5bGUgPSAxMjMiKTsKKyAgICAgICAgICAgIGxvZ2xuKCJFeGNlcHRpb24gY2F1Z2h0ISIpOworICAgICAgICAgICAgbG9nbG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy9EYXRlRm9ybWF0LmZvcm1hdCB3b3JrcyB3cm9uZ2x5PworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MjUwMzU5KCkgeworICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChMb2NhbGUuVVMpOworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgxMDEgKyAxOTAwLCA5LCA5LCAxNywgNTMpOworICAgICAgICBEYXRlIGQgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBEYXRlRm9ybWF0IHRmID0gRGF0ZUZvcm1hdC5nZXRUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5TSE9SVCk7CisgICAgICAgIFN0cmluZyBhY3RfcmVzdWx0ID0gdGYuZm9ybWF0KGQpOworICAgICAgICBTdHJpbmcgZXhwX3Jlc3VsdCA9ICI1OjUzIFBNIjsKKyAgICAgICAgCisgICAgICAgIGlmKCFhY3RfcmVzdWx0LmVxdWFscyhleHBfcmVzdWx0KSl7CisgICAgICAgICAgICBlcnJsbigiVGhlIHJlc3VsdCBpcyBub3QgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvL3BhdHRlcm4gInMuUywgcGFyc2UgJzFtcyciCisgICAgcHVibGljIHZvaWQgVGVzdDQyNTM0OTAoKSB7CisgICAgICAgIERhdGUgZCA9IG5ldyBEYXRlKDEwMDI3MDUyMTIyMzFsKTsKKyAgICAKKyAgICAgICAgU3RyaW5nW10gSVNPUGF0dGVybiA9IHsKKyAgICAgICAgICAgICAgICAiJyd5eXl5LU1NLWRkLWhoLm1tLnNzLlMnJyIsIAorICAgICAgICAgICAgICAgICInJ3l5eXktTU0tZGQtaGgubW0uc3MuU1MnJyIsIAorICAgICAgICAgICAgICAgICInJ3l5eXktTU0tZGQtaGgubW0uc3MuU1NTJyciLCAKKyAgICAgICAgICAgICAgICAiJyd5eXl5LU1NLWRkLWhoLm1tLnNzLlNTU1MnJyIsIAorICAgICAgICAgICAgICAgICInJ3l5eXktTU0tZGQtaGgubW0uc3MuU1NTU1MnJyIsIAorICAgICAgICAgICAgICAgICInJ3l5eXktTU0tZGQtaGgubW0uc3MuU1NTU1NTJyciLCAKKyAgICAgICAgICAgICAgICAiJyd5eXl5LU1NLWRkLWhoLm1tLnNzLlNTU1NTU1MnJyJ9OyAKKyAgICAKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBhU2ltcGxlREYgPSAoU2ltcGxlRGF0ZUZvcm1hdCkgRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSVNPUGF0dGVybi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgYVNpbXBsZURGLmFwcGx5UGF0dGVybihJU09QYXR0ZXJuW2ldKTsKKyAgICAgICAgICAgIGxvZ2xuKCJQYXR0ZXJuID0gIiArIGFTaW1wbGVERi50b1BhdHRlcm4oKSk7CisgICAgICAgICAgICBsb2dsbigiRm9ybWF0ID0gIiArIGFTaW1wbGVERi5mb3JtYXQoZCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vYWJvdXQgcmVncmVzc2lvbiB0ZXN0CisgICAgcHVibGljIHZvaWQgVGVzdDQyNjY0MzIoKSB7CisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KExvY2FsZS5KQVBBTik7CisgICAgICAgIExvY2FsZSBsb2MgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICBTdHJpbmcgZGF0ZUZvcm1hdCA9ICJNTS9kZC95eSBISDptbTpzcyB6enoiOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZtdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KGRhdGVGb3JtYXQpOworICAgIAorICAgICAgICBQYXJzZVBvc2l0aW9uIHAwID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIGxvZ2xuKCJVbmRlciAgIiArIGxvYyArIiAgbG9jYWxlIik7CisgICAgICAgIERhdGUgZCA9IGZtdC5wYXJzZSgiMDEvMjIvOTIgMDQ6NTI6MDAgR01UIiwgcDApOworICAgICAgICBsb2dsbihkLnRvU3RyaW5nKCkpOworICAgIH0KKyAgICAKKyAgICAvL1NpbXBsZURhdGVGb3JtYXQgaW5jb25zaXN0ZW50IGZvciBudW1iZXIgb2YgZGlnaXRzIGZvciB5ZWFycworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MzU4NzMwKCkgeworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHNkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCk7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDIwMDEsMTEsMTApOworICAgICAgICBEYXRlIHRvZGF5ID0gY2FsLmdldFRpbWUoKTsKKyAgICAKKyAgICAgICAgc2RmLmFwcGx5UGF0dGVybigiTU0gZCB5Iik7CisgICAgICAgIGxvZ2xuKHNkZi5mb3JtYXQodG9kYXkpKTsKKyAgICAgICAgc2RmLmFwcGx5UGF0dGVybigiTU0gZCB5eSIpOworICAgICAgICBsb2dsbihzZGYuZm9ybWF0KHRvZGF5KSk7CisgICAgCisgICAgICAgIHNkZi5hcHBseVBhdHRlcm4oIk1NIGQgeXl5Iik7CisgICAgICAgIGxvZ2xuKHNkZi5mb3JtYXQodG9kYXkpKTsKKyAgICAKKyAgICAgICAgc2RmLmFwcGx5UGF0dGVybigiTU0gZCB5eXl5Iik7CisgICAgICAgIGxvZ2xuKHNkZi5mb3JtYXQodG9kYXkpKTsKKyAgICAKKyAgICAgICAgc2RmLmFwcGx5UGF0dGVybigiTU0gZCB5eXl5eSIpOworICAgICAgICBsb2dsbihzZGYuZm9ybWF0KHRvZGF5KSk7CisgICAgfQorICAgIAorICAgIC8vUGFyc2UgaW52YWxpZCBzdHJpbmcKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDM3NTM5OSgpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhdHRlcm4gPSBuZXcgU3RyaW5nKCJ5eXl5Lk1NLmRkIEcgJ2F0JyBoaDptbTpzcyB6Iik7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocGF0dGVybiwgTG9jYWxlLkpBUEFOKTsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgRGF0ZSBjdXJyZW50VGltZSA9IHNkZi5wYXJzZSgidmdnZiAyMCAgMDEuMCA5LjI5IGFwLiBKLi1DLiBhdCAwNToyNjozMyBHTVQrMDg6MDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUGFyc2VQb3NpdGlvbigwKSk7CisgICAgICAgICAgICBpZihjdXJyZW50VGltZSA9PW51bGwpCisgICAgICAgICAgICAgICAgbG9nbG4oInBhcnNlIHJpZ2h0Iik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgZXJybG4oIkVycm9yIik7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDQwNzA0MigpIHsKKyAgICAgICAgRGF0ZVBhcnNlVGhyZWFkIGQxID0gbmV3IERhdGVQYXJzZVRocmVhZCgpOworICAgICAgICBEYXRlRm9ybWF0VGhyZWFkIGQyID0gbmV3IERhdGVGb3JtYXRUaHJlYWQoKTsKKyAgICAgICAgZDEuc3RhcnQoKTsKKyAgICAgICAgZDIuc3RhcnQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxvZ2xuKCJ0ZXN0Iik7CisgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0qLworICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3Q0NDY4NjYzKCkgeworICAgICAgICBEYXRlIGQgPW5ldyBEYXRlKC05MzcxNjY3MTExNTc2N2wpOworICAgICAgICBTdHJpbmcgb3JpZ2luX2QgPSBkLnRvU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyBzdHI7CisgICAgICAgIGZpbmFsIFN0cmluZyBwYXR0ZXJuID0gbmV3IFN0cmluZygiRUVFRSwgTU1NTSBkLCB5eXl5Iik7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocGF0dGVybik7CisKKyAgICAgICAgaWYgKHNkZi5nZXRUaW1lWm9uZSgpLnVzZURheWxpZ2h0VGltZSgpKSB7CisgICAgICAgICAgICBsb2dsbigib3JpZ2luYWwgZGF0ZTogIiArIG9yaWdpbl9kLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgc3RyID0gc2RmLmZvcm1hdChkKTsKKyAgICAgICAgICAgIGxvZ2xuKCIgYWZ0ZXIgZm9ybWF0LS0tLS0+IiArIHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGQgPSBzZGYucGFyc2Uoc3RyLCBuZXcgUGFyc2VQb3NpdGlvbigwKSk7CisgICAgICAgICAgICBsb2dsbigiIGFmdGVyIHBhcnNlLS0tLS0+IiArIGQudG9TdHJpbmcoKSk7CisgICAgCisgICAgICAgICAgICBzdHIgPSBzZGYuZm9ybWF0KGQpOworICAgICAgICAgICAgbG9nbG4oIiBhZnRlciBmb3JtYXQtLS0tLT4iICsgc3RyKTsKKyAgICAKKyAgICAgICAgICAgIGQgPSBzZGYucGFyc2Uoc3RyLCBuZXcgUGFyc2VQb3NpdGlvbigwKSk7CisgICAgICAgICAgICBsb2dsbigiIGFmdGVyIHBhcnNlLS0tLS0+IiArIGQudG9TdHJpbmcoKSk7CisgICAgCisgICAgICAgICAgICBzdHIgPSBzZGYuZm9ybWF0KGQpOworICAgICAgICAgICAgbG9nbG4oIiBhZnRlciBmb3JtYXQtLS0tLT4iICsgc3RyKTsgICAgICAgIAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vQ2xhc3MgdXNlZCBieSBUZXN0NDQwNzA0MgorICAgIGNsYXNzIERhdGVQYXJzZVRocmVhZCBleHRlbmRzIFRocmVhZCB7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gKFNpbXBsZURhdGVGb3JtYXQpIHNkZl8uY2xvbmUoKTsKKyAgICAgICAgICAgIFRpbWVab25lIGRlZmF1bHRUWiA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAgICAgICAgIFRpbWVab25lIFBTVCA9IFRpbWVab25lLmdldFRpbWVab25lKCJQU1QiKTsKKyAgICAgICAgICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gZGVmYXVsdFRaLmdldFJhd09mZnNldCgpOworICAgICAgICAgICAgaW50IFBTVE9mZnNldCA9IFBTVC5nZXRSYXdPZmZzZXQoKTsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSBkZWZhdWx0T2Zmc2V0IC0gUFNUT2Zmc2V0OworICAgICAgICAgICAgbG9uZyBtcyA9IFVUQ19MT05HIC0gb2Zmc2V0OworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCAxMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBEYXRlIGRhdGUgPSBzZGYucGFyc2UoVElNRV9TVFJJTkcpOworICAgICAgICAgICAgICAgICAgICBsb25nIHQgPSBkYXRlLmdldFRpbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICBpZiAodCAhPSBtcykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCJQYXJzZSBFcnJvcjogIiArIGkgKyAiICgiICsgc2RmLmZvcm1hdChkYXRlKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIpICIgKyB0ICsgIiAhPSAiICsgbXMsIDApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigicGFyc2UgZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy9DbGFzcyB1c2VkIGJ5IFRlc3Q0NDA3MDQyCisgICAgY2xhc3MgRGF0ZUZvcm1hdFRocmVhZCBleHRlbmRzIFRocmVhZCB7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsgICAgICAgICAgICAKKyAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gKFNpbXBsZURhdGVGb3JtYXQpIHNkZl8uY2xvbmUoKTsKKyAgICAgICAgICAgIFRpbWVab25lIHR6ID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpOworICAgICAgICAgICAgc2RmLnNldFRpbWVab25lKHR6KTsKKyAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgMTAwMDApIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgU3RyaW5nIHMgPSBzZGYuZm9ybWF0KG5ldyBEYXRlKFVUQ19MT05HKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzLmVxdWFscyhUSU1FX1NUUklORykpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZvcm1hdCBFcnJvcjogIiArIGkgKyAiICIgKyBzICsgIiAhPSAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBUSU1FX1NUUklORyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvRGF0ZUZvcm1hdFJvdW5kVHJpcFRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvRGF0ZUZvcm1hdFJvdW5kVHJpcFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmRlNDI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9EYXRlRm9ybWF0Um91bmRUcmlwVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjczIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvRGF0ZUZvcm1hdFJvdW5kVHJpcFRlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTowOCAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2MS44LjEgOiBmb3JtYXQgOiBEYXRlRm9ybWF0Um91bmRUcmlwVGVzdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvZHRmbXRydHRzLmNwcAorICoqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CisKKy8qKiAKKyAqIFBlcmZvcm1zIHJvdW5kLXRyaXAgdGVzdHMgZm9yIERhdGVGb3JtYXQKKyAqKi8KK3B1YmxpYyBjbGFzcyBEYXRlRm9ybWF0Um91bmRUcmlwVGVzdCBleHRlbmRzIGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBJTkZJTklURSA9IGZhbHNlOworICAgIHB1YmxpYyBib29sZWFuIHF1aWNrID0gdHJ1ZTsKKyAgICBwcml2YXRlIFNpbXBsZURhdGVGb3JtYXQgZGF0ZUZvcm1hdDsKKyAgICBwcml2YXRlIENhbGVuZGFyIGdldEZpZWxkQ2FsOworICAgIHByaXZhdGUgaW50IFNQQVJTRU5FU1MgPSAxODsKKyAgICBwcml2YXRlIGludCBUUklBTFMgPSA0OworICAgIHByaXZhdGUgaW50IERFUFRIID0gNTsKKyAgICBwcml2YXRlIFJhbmRvbSByYW4gPSBuZXcgUmFuZG9tKCk7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IERhdGVGb3JtYXRSb3VuZFRyaXBUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0RGF0ZUZvcm1hdFJvdW5kVHJpcCgpIHsKKyAgICAgICAgZGF0ZUZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFRUUgTU1NIGRkIEhIOm1tOnNzLlNTUyB6enogeXl5eSBHIik7CisgICAgICAgIGdldEZpZWxkQ2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAKKyAgICAgICAgZmluYWwgTG9jYWxlW10gYXZhaWwgPSBEYXRlRm9ybWF0LmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgaW50IGxvY0NvdW50ID0gYXZhaWwubGVuZ3RoOworICAgICAgICBsb2dsbigiRGF0ZUZvcm1hdCBhdmFpbGFibGUgbG9jYWxlczogIiArIGxvY0NvdW50KTsKKyAgICAgICAgaWYgKHF1aWNrKSB7CisgICAgICAgICAgICBpZiAobG9jQ291bnQgPiA1KQorICAgICAgICAgICAgICAgIGxvY0NvdW50ID0gNTsKKyAgICAgICAgICAgIGxvZ2xuKCJRdWljayBtb2RlOiBvbmx5IHRlc3RpbmcgZmlyc3QgNSBMb2NhbGVzIik7CisgICAgICAgIH0KKyAgICAgICAgVGltZVpvbmUgdHogPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIGxvZ2xuKCJEZWZhdWx0IFRpbWVab25lOiAgICAgICAgICAgICAiICsgdHouZ2V0SUQoKSk7CisgICAgCisgICAgICAgIGlmIChJTkZJTklURSkgeworICAgICAgICAgICAgLy8gU3BlY2lhbCBpbmZpbml0ZSBsb29wIHRlc3QgbW9kZSBmb3IgZmluZGluZyBoYXJkIHRvIHJlcHJvZHVjZSBlcnJvcnMKKyAgICAgICAgICAgIExvY2FsZSBsb2MgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICAgICAgbG9nbG4oIkVOVEVSSU5HIElORklOSVRFIFRFU1QgTE9PUCBGT1IgTG9jYWxlOiAiICsgbG9jLmdldERpc3BsYXlOYW1lKCkpOworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIF90ZXN0KGxvYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAKKyAgICAgICAgICAgIF90ZXN0KExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgX3Rlc3QoYXZhaWxbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBTdHJpbmcgc3R5bGVOYW1lKGludCBzKSB7CisgICAgICAgIHN3aXRjaCAocykgeworICAgICAgICAgICAgY2FzZSBEYXRlRm9ybWF0LlNIT1JUIDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlNIT1JUIjsKKyAgICAgICAgICAgIGNhc2UgRGF0ZUZvcm1hdC5NRURJVU0gOgorICAgICAgICAgICAgICAgIHJldHVybiAiTUVESVVNIjsKKyAgICAgICAgICAgIGNhc2UgRGF0ZUZvcm1hdC5MT05HIDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkxPTkciOworICAgICAgICAgICAgY2FzZSBEYXRlRm9ybWF0LkZVTEwgOgorICAgICAgICAgICAgICAgIHJldHVybiAiRlVMTCI7CisgICAgICAgICAgICBkZWZhdWx0IDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlVua25vd24iOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIF90ZXN0KExvY2FsZSBsb2MpIHsKKyAgICAgICAgaWYgKCFJTkZJTklURSkgeworICAgICAgICAgICAgbG9nbG4oIkxvY2FsZTogIiArIGxvYy5nZXREaXNwbGF5TmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUb3RhbCBwb3NzaWJpbGl0aWVzID0gMjQKKyAgICAgICAgLy8gIDQgZGF0ZQorICAgICAgICAvLyAgNCB0aW1lCisgICAgICAgIC8vICAxNiBkYXRlLXRpbWUKKyAgICAgICAgYm9vbGVhbltdIFRFU1RfVEFCTEUgPSBuZXcgYm9vbGVhblsyNF07CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI0OyArK2kpCisgICAgICAgICAgICBURVNUX1RBQkxFW2ldID0gdHJ1ZTsKKyAgICAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBzb21lIHNwYXJzZW5lc3MsIGltcGxlbWVudCBpdCBoZXJlLiAgU3BhcnNlbmVzcyBkZWNyZWFzZXMKKyAgICAgICAgLy8gdGVzdCB0aW1lIGJ5IGVsaW1pbmF0aW5nIHNvbWUgdGVzdHMsIHVwIHRvIDIzLgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU1BBUlNFTkVTUzsgaSsrKSB7CisgICAgICAgICAgICBpbnQgcmFuZG9tID0gKGludCkgKHJhbi5uZXh0RG91YmxlKCkgKiAyNCk7CisgICAgICAgICAgICBpZiAocmFuZG9tID49IDAgJiYgcmFuZG9tIDwgMjQgJiYgVEVTVF9UQUJMRVtpXSkgeworICAgICAgICAgICAgICAgIFRFU1RfVEFCTEVbcmFuZG9tXSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgIAorICAgICAgICAKKyAgICAgICAgaW50IGl0YWJsZSA9IDA7CisgICAgICAgIGludCBzdHlsZSA9IDA7CisgICAgICAgIGZvciAoc3R5bGUgPSBEYXRlRm9ybWF0LkZVTEw7IHN0eWxlIDw9IERhdGVGb3JtYXQuU0hPUlQ7ICsrc3R5bGUpIHsKKyAgICAgICAgICAgIGlmIChURVNUX1RBQkxFW2l0YWJsZSsrXSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHN0eWxlICIgKyBzdHlsZU5hbWUoc3R5bGUpKTsgCisgICAgICAgICAgICAgICAgRGF0ZUZvcm1hdCBkZiA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKHN0eWxlLCBsb2MpOyAKKyAgICAgICAgICAgICAgICBfdGVzdChkZiwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGZvciAoc3R5bGUgPSBEYXRlRm9ybWF0LkZVTEw7IHN0eWxlIDw9IERhdGVGb3JtYXQuU0hPUlQ7ICsrc3R5bGUpIHsKKyAgICAgICAgICAgIGlmIChURVNUX1RBQkxFW2l0YWJsZSsrXSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHN0eWxlICIgKyBzdHlsZU5hbWUoc3R5bGUpKTsKKyAgICAgICAgICAgICAgICBEYXRlRm9ybWF0ICBkZiA9IERhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKHN0eWxlLCBsb2MpOyAKKyAgICAgICAgICAgICAgICBfdGVzdChkZiwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgZm9yIChpbnQgZHN0eWxlID0gRGF0ZUZvcm1hdC5GVUxMOyBkc3R5bGUgPD0gRGF0ZUZvcm1hdC5TSE9SVDsgKytkc3R5bGUpIHsKKyAgICAgICAgICAgIGZvciAoaW50IHRzdHlsZSA9IERhdGVGb3JtYXQuRlVMTDsgdHN0eWxlIDw9IERhdGVGb3JtYXQuU0hPUlQ7ICsrdHN0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKFRFU1RfVEFCTEVbaXRhYmxlKytdKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJUZXN0aW5nIGRzdHlsZSAiICsgc3R5bGVOYW1lKGRzdHlsZSkgKyAiLCB0c3R5bGUgIiArIHN0eWxlTmFtZSh0c3R5bGUpKTsgCisgICAgICAgICAgICAgICAgICAgIERhdGVGb3JtYXQgZGYgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoZHN0eWxlLCB0c3R5bGUsIGxvYyk7IAorICAgICAgICAgICAgICAgICAgICBfdGVzdChkZiwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBfdGVzdChEYXRlRm9ybWF0IGZtdCwgYm9vbGVhbiB0aW1lT25seSkgeworICAgIAorICAgICAgICBpZiAoIShmbXQgaW5zdGFuY2VvZiBTaW1wbGVEYXRlRm9ybWF0KSkgeworICAgICAgICAgICAgZXJybG4oIkRhdGVGb3JtYXQgd2Fzbid0IGEgU2ltcGxlRGF0ZUZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIFN0cmluZyBwYXQgPSAoKFNpbXBsZURhdGVGb3JtYXQpIGZtdCkudG9QYXR0ZXJuKCk7CisgICAgICAgIGxvZ2xuKHBhdCk7CisgICAgCisgICAgICAgIC8vIE5PVEUgVE8gTUFJTlRBSU5FUgorICAgICAgICAvLyBUaGlzIGluZGV4T2YgY2hlY2sgaW50byB0aGUgcGF0dGVybiBuZWVkcyB0byBiZSByZWZpbmVkIHRvIGlnbm9yZQorICAgICAgICAvLyBxdW90ZWQgY2hhcmFjdGVycy4gIEN1cnJlbnRseSwgdGhpcyBpc24ndCBhIHByb2JsZW0gd2l0aCB0aGUgbG9jYWxlCisgICAgICAgIC8vIHBhdHRlcm5zIHdlIGhhdmUsIGJ1dCBpdCBtYXkgYmUgYSBwcm9ibGVtIGxhdGVyLgorICAgIAorICAgICAgICBib29sZWFuIGhhc0VyYSA9IChwYXQuaW5kZXhPZigiRyIpICE9IC0xKTsKKyAgICAgICAgYm9vbGVhbiBoYXNab25lID0gKHBhdC5pbmRleE9mKCJ6IikgIT0gLTEpOworICAgIAorICAgICAgICAvLyBCZWNhdXNlIHBhdHRlcm5zIGNvbnRhaW4gaW5jb21wbGV0ZSBkYXRhIHJlcHJlc2VudGluZyB0aGUgRGF0ZSwKKyAgICAgICAgLy8gd2UgbXVzdCBiZSBjYXJlZnVsIG9mIGhvdyB3ZSBkbyB0aGUgcm91bmR0cmlwLiAgV2Ugc3RhcnQgd2l0aAorICAgICAgICAvLyBhIHJhbmRvbWx5IGdlbmVyYXRlZCBEYXRlIGJlY2F1c2UgdGhleSdyZSBlYXNpZXIgdG8gZ2VuZXJhdGUuCisgICAgICAgIC8vIEZyb20gdGhpcyB3ZSBnZXQgYSBzdHJpbmcuICBUaGUgc3RyaW5nIGlzIG91ciByZWFsIHN0YXJ0aW5nIHBvaW50LAorICAgICAgICAvLyBiZWNhdXNlIHRoaXMgc3RyaW5nIHNob3VsZCBwYXJzZSB0aGUgc2FtZSB3YXkgYWxsIHRoZSB0aW1lLiAgTm90ZQorICAgICAgICAvLyB0aGF0IGl0IHdpbGwgbm90IG5lY2Vzc2FyaWx5IHBhcnNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGRhdGUgYmVjYXVzZQorICAgICAgICAvLyBvZiBpbmNvbXBsZXRlbmVzcyBpbiBwYXR0ZXJucy4gIEZvciBleGFtcGxlLCBhIHRpbWUtb25seSBwYXR0ZXJuIHdvbid0CisgICAgICAgIC8vIHBhcnNlIGJhY2sgdG8gdGhlIHNhbWUgZGF0ZS4KKyAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVFJJQUxTOyArK2kpIHsKKyAgICAgICAgICAgICAgICBEYXRlW10gZCA9IG5ldyBEYXRlW0RFUFRIXTsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1tERVBUSF07CisgICAgCisgICAgICAgICAgICAgICAgZFswXSA9IGdlbmVyYXRlRGF0ZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFdlIGdvIHRocm91Z2ggdGhpcyBsb29wIHVudGlsIHdlIGFjaGlldmUgYSBtYXRjaCBvciB1bnRpbAorICAgICAgICAgICAgICAgIC8vIHRoZSBtYXhpbXVtIGxvb3AgY291bnQgaXMgcmVhY2hlZC4gIFdlIHJlY29yZCB0aGUgcG9pbnRzIGF0CisgICAgICAgICAgICAgICAgLy8gd2hpY2ggdGhlIGRhdGUgYW5kIHRoZSBzdHJpbmcgc3RhcnRzIHRvIG1hdGNoLiAgT25jZSBtYXRjaGluZworICAgICAgICAgICAgICAgIC8vIHN0YXJ0cywgaXQgc2hvdWxkIGNvbnRpbnVlLgorICAgICAgICAgICAgICAgIGludCBsb29wOworICAgICAgICAgICAgICAgIGludCBkbWF0Y2ggPSAwOyAvLyBkW2RtYXRjaF0uZ2V0VGltZSgpID09IGRbZG1hdGNoLTFdLmdldFRpbWUoKQorICAgICAgICAgICAgICAgIGludCBzbWF0Y2ggPSAwOyAvLyBzW3NtYXRjaF0uZXF1YWxzKHNbc21hdGNoLTFdKQorICAgICAgICAgICAgICAgIGZvciAobG9vcCA9IDA7IGxvb3AgPCBERVBUSDsgKytsb29wKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsb29wID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZFtsb29wXSA9IGZtdC5wYXJzZShzW2xvb3AgLSAxXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAgICAgc1tsb29wXSA9IGZtdC5mb3JtYXQoZFtsb29wXSk7CisgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChsb29wID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNtYXRjaCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBtYXRjaCA9IHNbbG9vcF0uZXF1YWxzKHNbbG9vcCAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hdGNoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hdGNoID0gbG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBTdHJpbmcgbWlzbWF0Y2ggYWZ0ZXIgbWF0Y2giKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbWF0Y2ggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHtzZmJ9IHdhdGNoIG91dCBoZXJlLCB0aGlzIG1pZ2h0IG5vdCB3b3JrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBtYXRjaCA9IGRbbG9vcF0uZ2V0VGltZSgpID09IGRbbG9vcCAtIDFdLmdldFRpbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG1hdGNoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hdGNoID0gbG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBEYXRlIG1pc21hdGNoIGFmdGVyIG1hdGNoIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hdGNoICE9IDAgJiYgZG1hdGNoICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBsb29wID09IERFUFRIIGlmIHdlJ3ZlIGZhaWxlZCwgb3RoZXJ3aXNlIGxvb3AgaXMgdGhlCisgICAgICAgICAgICAgICAgLy8gbWF4KHNtYXRjaCwgZG1hdGNoKSwgdGhhdCBpcywgdGhlIGluZGV4IGF0IHdoaWNoIHdlIGhhdmUgc3RyaW5nIGFuZAorICAgICAgICAgICAgICAgIC8vIGRhdGUgbWF0Y2hpbmcuCisgICAgCisgICAgICAgICAgICAgICAgLy8gRGF0ZSB1c3VhbGx5IG1hdGNoZXMgaW4gMi4gIEV4Y2VwdGlvbnMgaGFuZGxlZCBiZWxvdy4KKyAgICAgICAgICAgICAgICBpbnQgbWF4RG1hdGNoID0gMjsKKyAgICAgICAgICAgICAgICBpbnQgbWF4U21hdGNoID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZG1hdGNoID4gbWF4RG1hdGNoIHx8IHNtYXRjaCA+IG1heFNtYXRjaCkgeworICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBEYXRlIGlzIEJDCisgICAgICAgICAgICAgICAgICAgIGlmICghdGltZU9ubHkgJiYgIWhhc0VyYSAmJiBnZXRGaWVsZChkWzBdLCBDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhEbWF0Y2ggPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgbWF4U21hdGNoID0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzWm9uZSAmJiAoZm10LmdldFRpbWVab25lKCkuaW5EYXlsaWdodFRpbWUoZFswXSkgfHwgZm10LmdldFRpbWVab25lKCkuaW5EYXlsaWdodFRpbWUoZFsxXSkgKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF4U21hdGNoID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1lT25seSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heERtYXRjaCA9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkbWF0Y2ggPiBtYXhEbWF0Y2ggfHwgc21hdGNoID4gbWF4U21hdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkVFRUUsIE1NTU0gZCwgeXl5eSBISDptbTpzcywgeiBHIiwgTG9jYWxlLlVTKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBsb2dsbigiRGF0ZSA9ICIgKyBzZGYuZm9ybWF0KGRbMF0pICsgIjsgbXMgPSAiICsgZFswXS5nZXRUaW1lKCkpOworICAgICAgICAgICAgICAgICAgICBsb2dsbigiRG1hdGNoOiAiICsgZG1hdGNoICsgIiBtYXhEOiAiICsgbWF4RG1hdGNoICsgIiBTbWF0Y2g6IiArIHNtYXRjaCArICIgbWF4UzoiICsgbWF4U21hdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIlBhdHRlcm46ICIgKyBwYXQgKyAiIGZhaWxlZCB0byBtYXRjaCIgKyAiOyBtcyA9ICIgKyBkWzBdLmdldFRpbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGxvb3AgJiYgaiA8IERFUFRIOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB0ZW1wID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICAgICAgICAgICAgICAgICAgbG9nbG4oKGogPiAwID8gIiBQPiAiIDogIiAgICAiKSArIGRhdGVGb3JtYXQuZm9ybWF0KGRbal0sIHRlbXAsIHBvcykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIEY+ICIgKyBzW2pdICsgKGogPiAwICYmIGRbal0uZ2V0VGltZSgpID09IGRbaiAtIDFdLmdldFRpbWUoKSA/ICIgZD09IiA6ICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGogPiAwICYmIHNbal0uZXF1YWxzKHNbaiAtIDFdKSA/ICIgcz09IiA6ICIiKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFeGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICBsb2dsbihlLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBpbnQgZ2V0RmllbGQoRGF0ZSBkLCBpbnQgZikgeworICAgICAgICBnZXRGaWVsZENhbC5zZXRUaW1lKGQpOworICAgICAgICBpbnQgcmV0ID0gZ2V0RmllbGRDYWwuZ2V0KGYpOyAgICAKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgCisgICAgcHVibGljIERhdGUgZ2VuZXJhdGVEYXRlKCkgeworICAgICAgICBkb3VibGUgYSA9IHJhbi5uZXh0RG91YmxlKCk7CisgICAgICAgIC8vIE5vdyAnYScgcmFuZ2VzIGZyb20gMC4uMTsgc2NhbGUgaXQgdG8gcmFuZ2UgZnJvbSAwIHRvIDgwMDAgeWVhcnMKKyAgICAgICAgYSAqPSA4MDAwOworICAgICAgICAvLyBSYW5nZSBmcm9tICg0MDAwLTE5NzApIEJDIHRvICg4MDAwLTE5NzApIEFECisgICAgICAgIGEgLT0gNDAwMDsKKyAgICAgICAgLy8gTm93IHNjYWxlIHVwIHRvIG1zCisgICAgICAgIGEgKj0gMzY1LjI1ICogMjQgKiA2MCAqIDYwICogMTAwMDsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKChsb25nKWEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzA0NmM5OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvRGF0ZUZvcm1hdFRlc3QuamF2YQpAQCAtMCwwICsxLDg4MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0RhdGVGb3JtYXRUZXN0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDgvMjIgMjE6NTU6NTEgJCAKKyAqICRSZXZpc2lvbjogMS45ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjEuOC4xIDogZm9ybWF0IDogRGF0ZUZvcm1hdFRlc3QKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L2R0Zm10dHN0LmNwcAorICoqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworCitwdWJsaWMgY2xhc3MgRGF0ZUZvcm1hdFRlc3QgZXh0ZW5kcyBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13ayB7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBEYXRlRm9ybWF0VGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVzdCB3cml0dGVuIGJ5IFdhbGx5IFdlZGVsIGFuZCBlbWFpbGVkIHRvIG1lLgorICAgIHB1YmxpYyB2b2lkIFRlc3RXYWxseVdlZGVsKCkgeworICAgICAgICAvKgorICAgICAgICAgKiBJbnN0YW50aWF0ZSBhIFRpbWVab25lIHNvIHdlIGNhbiBnZXQgdGhlIGlkcy4KKyAgICAgICAgICovCisgICAgICAgIC8vVGltZVpvbmUgdHogPSBuZXcgU2ltcGxlVGltZVpvbmUoNywgIiIpOyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisgICAgICAgIC8qCisgICAgICAgICAqIENvbXB1dGF0aW9uYWwgdmFyaWFibGVzLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IG9mZnNldCwgaG91cnMsIG1pbnV0ZXM7CisgICAgICAgIC8qCisgICAgICAgICAqIEluc3RhbnRpYXRlIGEgU2ltcGxlRGF0ZUZvcm1hdCBzZXQgdXAgdG8gcHJvZHVjZSBhIGZ1bGwgdGltZQorICAgICAgICAgem9uZSBuYW1lLgorICAgICAgICAgKi8KKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgienp6eiIpOworICAgICAgICAvKgorICAgICAgICAgKiBBIFN0cmluZyBhcnJheSBmb3IgdGhlIHRpbWUgem9uZSBpZHMuCisgICAgICAgICAqLworICAgIAorICAgICAgICBmaW5hbCBTdHJpbmdbXSBpZHMgPSBUaW1lWm9uZS5nZXRBdmFpbGFibGVJRHMoKTsKKyAgICAgICAgaW50IGlkc19sZW5ndGggPSBpZHMubGVuZ3RoOyAvL3doZW4gZml4ZWQgdGhlIGJ1ZyBzaG91bGQgY29tbWVudCBpdCBvdXQKKyAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogSG93IG1hbnkgaWRzIGRvIHdlIGhhdmU/CisgICAgICAgICAqLworICAgICAgICBsb2dsbigiVGltZSBab25lIElEcyBzaXplOiIgKyBpZHNfbGVuZ3RoKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ29sdW1uIGhlYWRpbmdzIChzb3J0IG9mKQorICAgICAgICAgKi8KKyAgICAgICAgbG9nbG4oIk9yZGluYWwgSUQgb2Zmc2V0KGg6bSkgbmFtZSIpOworICAgICAgICAvKgorICAgICAgICAgKiBMb29wIHRocm91Z2ggdGhlIHR6cy4KKyAgICAgICAgICovCisgICAgICAgIERhdGUgdG9kYXkgPSBuZXcgRGF0ZSgpOworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkc19sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbG9nbG4oaSArICIgIiArIGlkc1tpXSk7CisgICAgICAgICAgICBUaW1lWm9uZSB0dHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZShpZHNbaV0pOworICAgICAgICAgICAgLy8gb2Zmc2V0ID0gdHR6LmdldFJhd09mZnNldCgpOworICAgICAgICAgICAgY2FsLnNldFRpbWVab25lKHR0eik7CisgICAgICAgICAgICBjYWwuc2V0VGltZSh0b2RheSk7CisgICAgICAgICAgICBvZmZzZXQgPSBjYWwuZ2V0KENhbGVuZGFyLlpPTkVfT0ZGU0VUKSArIGNhbC5nZXQoQ2FsZW5kYXIuRFNUX09GRlNFVCk7CisgICAgICAgICAgICAvLyBsb2dsbihpICsgIiAiICsgaWRzW2ldICsgIiBvZmZzZXQgIiArIG9mZnNldCk7CisgICAgICAgICAgICBTdHJpbmcgc2lnbiA9ICIrIjsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgc2lnbiA9ICItIjsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaG91cnMgPSBvZmZzZXQgLyAzNjAwMDAwOworICAgICAgICAgICAgbWludXRlcyA9IChvZmZzZXQgJSAzNjAwMDAwKSAvIDYwMDAwOworICAgICAgICAgICAgU3RyaW5nIGRzdE9mZnNldCA9IHNpZ24gKyAoaG91cnMgPCAxMCA/ICIwIiA6ICIiKSArIGhvdXJzCisgICAgICAgICAgICAgICAgICAgICsgIjoiICsgKG1pbnV0ZXMgPCAxMCA/ICIwIiA6ICIiKSArIG1pbnV0ZXM7IAorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEluc3RhbnRpYXRlIGEgZGF0ZSBzbyB3ZSBjYW4gZGlzcGxheSB0aGUgdGltZSB6b25lIG5hbWUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNkZi5zZXRUaW1lWm9uZSh0dHopOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEZvcm1hdCB0aGUgb3V0cHV0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgZm10T2Zmc2V0ID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGZtdE9mZnNldCA9IHNkZi5mb3JtYXQodG9kYXksIGZtdE9mZnNldCwgcG9zKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbG9nbG4oIkV4Y2VwdGlvbjoiICsgZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBVbmljb2RlU3RyaW5nIGZtdE9mZnNldCA9IHR6Uy50b1N0cmluZygpOworICAgICAgICAgICAgU3RyaW5nIGZtdERzdE9mZnNldCA9IG51bGw7CisgICAgICAgICAgICBpZiAoZm10T2Zmc2V0LnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgiR01UIikpIHsKKyAgICAgICAgICAgICAgICAvL2ZtdERzdE9mZnNldCA9IGZtdE9mZnNldC5zdWJzdHJpbmcoMyk7CisgICAgICAgICAgICAgICAgZm10RHN0T2Zmc2V0ID0gZm10T2Zmc2V0LnN1YnN0cmluZygzLCBmbXRPZmZzZXQubGVuZ3RoKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFNob3cgb3VyIHJlc3VsdC4KKyAgICAgICAgICAgICAqLworICAgIAorICAgICAgICAgICAgYm9vbGVhbiBvayA9IGZtdERzdE9mZnNldCA9PSBudWxsIHx8IGZtdERzdE9mZnNldC5lcXVhbHMoZHN0T2Zmc2V0KTsKKyAgICAgICAgICAgIC8vZml4IHRoZSBqZGsgcmVzb3VyY2VzIGRpZmZlcmVuY2VzIGJldHdlZW4gamRrIDEuMi8xLjMuMCBhbmQgamRrIDEuMy4xCisgICAgICAgICAgICBTdHJpbmcgamF2YVZlcnNpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpOworICAgICAgICAgICAgb2sgPSBvayB8fCAoKGphdmFWZXJzaW9uLnN0YXJ0c1dpdGgoIjEuMiIpIHx8IGphdmFWZXJzaW9uLnN0YXJ0c1dpdGgoIjEuMy4wIikpICYmIChmbXREc3RPZmZzZXQgIT0gbnVsbCkgJiYgZm10RHN0T2Zmc2V0LmVxdWFscygiIikpOworICAgICAgICAgICAgaWYgKG9rKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oaSArICIgIiArIGlkc1tpXSArICIgIiArIGRzdE9mZnNldCArICIgIgorICAgICAgICAgICAgICAgICAgICAgICsgZm10T2Zmc2V0ICsgKGZtdERzdE9mZnNldCAhPSBudWxsID8gIiBvayIgOiAiID8iKSk7IAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbihpICsgIiAiICsgaWRzW2ldICsgIiAiICsgZHN0T2Zmc2V0ICsgIiAiICsgZm10T2Zmc2V0ICsgIiAqKiogRkFJTCAqKioiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEVxdWFscygpIHsKKyAgICAgICAgRGF0ZUZvcm1hdCBmbXRBID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuTUVESVVNLCBEYXRlRm9ybWF0LkZVTEwpOyAKKyAgICAgICAgRGF0ZUZvcm1hdCBmbXRCID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuTUVESVVNLCBEYXRlRm9ybWF0LkZVTEwpOyAKKyAgICAgICAgaWYgKCFmbXRBLmVxdWFscyhmbXRCKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMIik7ICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBwYXJzaW5nIG9mIDItZGlnaXQgeWVhcnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFR3b0RpZ2l0WWVhckRTVFBhcnNlKCkgeworICAgIAorICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZ1bGxGbXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIE1NTSBkZCBISDptbTpzcy5TU1Mgenp6IHl5eXkgRyIpOyAKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmbXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiZGQtTU1NLXl5IGg6bW06c3MgJ28nJ2Nsb2NrJyBhIHoiLCBMb2NhbGUuRU5HTElTSCk7IAorICAgICAgICBTdHJpbmcgcyA9ICIwMy1BcHItMDQgMjoyMDo0NyBvJ2Nsb2NrIEFNIFBTVCI7CisgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIFNpbXBsZURhdGVGb3JtYXQocGF0dGVybiwgbG9jYWxlKSBDb25zdHJ1Y3QgYSBTaW1wbGVEYXRlRGF0ZUZvcm1hdCB1c2luZworICAgICAgICAgKiB0aGUgZ2l2ZW5pbmcgcGF0dGVybiwgdGhlIGxvY2FsZSBhbmQgdXNpbmcgdGhlIFRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAgICAgICogU28gaXQgbmVlZCB0byBhZGQgdGhlIHRpbWV6b25lIG9mZnNldCBvbiBob3VyIGZpZWxkLiAKKyAgICAgICAgICogcHMuIHRoZSBNZXRob2QgQ2FsZW5kYXIuZ2V0VGltZSgpIHVzZWQgYnkgU2ltcGxlRGF0ZUZvcm1hdC5wYXJzZSgpIGFsd2F5cyAKKyAgICAgICAgICogcmV0dXJuIERhdGUgdmF1bGUgd2l0aCBUaW1lWm9uZS5nZXREZWZhdWx0KCkgW1JpY2hhcmQvR0NMXQorICAgICAgICAgKi8KKyAgICAgICAgCisgICAgICAgIFRpbWVab25lIGRlZmF1bHRUWiA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAgICAgVGltZVpvbmUgUFNUID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpOworICAgICAgICBpbnQgZGVmYXVsdE9mZnNldCA9IGRlZmF1bHRUWi5nZXRSYXdPZmZzZXQoKTsKKyAgICAgICAgaW50IFBTVE9mZnNldCA9IFBTVC5nZXRSYXdPZmZzZXQoKTsKKyAgICAgICAgaW50IGhvdXIgPSAyICsgKGRlZmF1bHRPZmZzZXQgLSBQU1RPZmZzZXQpIC8gKDYwKjYwKjEwMDApOworICAgICAgICBob3VyID0gKGhvdXIgPCAwKSA/IGhvdXIgKyAyNCA6IGhvdXI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBEYXRlIGQgPSBmbXQucGFyc2Uocyk7CisgICAgICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICAgICAgY2FsLnNldFRpbWUoZCk7CisgICAgICAgICAgICAvL0RTVE9mZnNldAorICAgICAgICAgICAgaG91ciArPSBkZWZhdWx0VFouaW5EYXlsaWdodFRpbWUoZCkgPyAxIDogMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9nbG4ocyArICIgUD4gIiArICgoRGF0ZUZvcm1hdCkgZnVsbEZtdCkuZm9ybWF0KGQpKTsKKyAgICAgICAgICAgIGludCBociA9IGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOworICAgICAgICAgICAgaWYgKGhyICE9IGhvdXIpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IFNob3VsZCBwYXJzZSB0byBob3VyICIgKyBob3VyKTsKKyAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIlBhcnNlIEVycm9yOiIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVmVyaWZ5IHRoYXQgcmV0dXJuZWQgZmllbGQgcG9zaXRpb24gaW5kaWNlcyBhcmUgY29ycmVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0RmllbGRQb3NpdGlvbigpIHsKKyAgICAgICAgRGF0ZUZvcm1hdFtdIGRhdGVGb3JtYXRzID0gbmV3IERhdGVGb3JtYXRbNF07CisgICAgICAgIGludCBkYXRlRm9ybWF0c19sZW5ndGggPSBkYXRlRm9ybWF0cy5sZW5ndGg7CisgICAgICAgIFN0cmluZyBmaWVsZE5hbWVzW10gPSB7CisgICAgICAgICAgICAgICAgIkVSQSIsICJZRUFSIiwgIk1PTlRIIiwgIldFRUtfT0ZfWUVBUiIsICJXRUVLX09GX01PTlRIIiwgIkRBWV9PRl9NT05USCIsICAgIkRBWV9PRl9ZRUFSIiwKKyAgICAgICAgICAgICAgICAiREFZX09GX1dFRUsiLCAgICJEQVlfT0ZfV0VFS19JTl9NT05USCIsICJBTV9QTSIsICJIT1VSIiwiSE9VUl9PRl9EQVkiLCJNSU5VVEUiLAorICAgICAgICAgICAgICAgICJTRUNPTkQiLCAiTUlMTElTRUNPTkQiLCAiWk9ORV9PRkZTRVQiIH07CisgICAgICAgIC8qIHtzZmJ9IFRoaXMgdGVzdCB3YXMgY29kZWQgaW5jb3JyZWN0bHkuCisgICAgICAgIC8gRmllbGRQb3NpdGlvbiB1c2VzIHRoZSBmaWVsZHMgaW4gdGhlIGNsYXNzIHlvdSBhcmUgZm9ybWF0dGluZyB3aXRoCisgICAgICAgIC8gU28sIGZvciBleGFtcGxlLCB0byBnZXQgdGhlIERBVEUgZmllbGQgZnJvbSBhIERhdGVGb3JtYXQgdXNlCisgICAgICAgIC8gRGF0ZUZvcm1hdC5EQVRFX0ZJRUxELCBfX25vdF9fIENhbGVuZGFyLkRBVEUKKyAgICAgICAgLyBUaGUgb3JkZXJpbmcgb2YgdGhlIGV4cGVjdGVkIHZhbHVlcyB1c2VkIHByZXZpb3VzbHkgd2FzIHdyb25nLgorICAgICAgICAvIGluc3RlYWQgb2YgcmUtb3JkZXJpbmcgdGhpcyBtZXNzIG9mIHN0cmluZ3MsIGp1c3QgdHJhbnNmb3JtIHRoZSBpbmRleCB2YWx1ZXMgKi8KKyAgICAKKyAgICAgICAgLyogZmllbGQgdmFsdWVzLCBpbiBDYWxlbmRhciBvcmRlciAqLworICAgICAgICBmaW5hbCBTdHJpbmdbXSBleHBlY3RlZCA9CisgICAgICAgICAgICB7ICIiLCAiMTk5NyIsICJBdWd1c3QiLCAiIiwgIiIsICIxMyIsICIiLCAiV2VkbmVzZGF5IiwgIiIsICJQTSIsICIyIiwgIiIsICIzNCIsICIxMiIsICIiLCAiUERUIiwKKyAgICAgICAgICAgIC8qIEZvbGxvd2luZyB0d28gYWRkZWQgYnkgd2VpdiBmb3IgdHdvIG5ldyBmaWVsZHMgKi8iIiwgIjE5OTciLCAiIyIsIAorICAgICAgICAgICAgLyogIyBpcyBhIG1hcmtlciBmb3IgImFvXHhmYnQiID09ICJhb3VedCIgKi8KKyAgICAgICAgICAgICIiLCAiIiwgIjEzIiwgIiIsICJtZXJjcmVkaSIsICIiLCAiIiwgIiIsICIxNCIsICIzNCIsICIiLCAiIiwgIlBEVCIsCisgICAgICAgICAgICAvKiBGb2xsb3dpbmcgdHdvIGFkZGVkIGJ5IHdlaXYgZm9yIHR3byBuZXcgZmllbGRzICovCisgICAgICAgICAgICAiQUQiLCAiMTk5NyIsICI4IiwgIjMzIiwgIjMiLCAiMTMiLCAiMjI1IiwgIldlZCIsICIyIiwgIlBNIiwgIjIiLCAiMTQiLCAiMzQiLCAiMTIiLCAiNTEzIiwgIlBEVCIsCisgICAgICAgICAgICAvKiBGb2xsb3dpbmcgdHdvIGFkZGVkIGJ5IHdlaXYgZm9yIHR3byBuZXcgZmllbGRzICovCisgICAgICAgICAgICAiQUQiLCAgIjE5OTciLCAgIkF1Z3VzdCIsICAiMDAzMyIsICIwMDAzIiwgIjAwMTMiLCAiMDIyNSIsICJXZWRuZXNkYXkiLCAiMDAwMiIsCisgICAgICAgICAgICAgIlBNIiwgIjAwMDIiLCAgIjAwMTQiLCAiMDAzNCIsICIwMDEyIiwgICAiMDUxMyIsICJQYWNpZmljIERheWxpZ2h0IFRpbWUiLAorICAgICAgICAgICAgLyogRm9sbG93aW5nIHR3byBhZGRlZCBieSB3ZWl2IGZvciB0d28gbmV3IGZpZWxkcyAqLyAiMTk5NyIsICIwMDA0IiwgIiIgfTsKKyAgICAKKyAgICAgICAgRGF0ZSBzb21lRGF0ZSA9IG5ldyBEYXRlKChsb25nKSA4NzE1MDgwNTI1MTMuMCk7CisgICAgICAgIGludCBqLCBleHA7CisgICAgCisgICAgICAgIGRhdGVGb3JtYXRzWzBdID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgRGF0ZUZvcm1hdC5GVUxMLCBMb2NhbGUuVVMpOworICAgICAgICBkYXRlRm9ybWF0c1sxXSA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIERhdGVGb3JtYXQuRlVMTCwgTG9jYWxlLkZSQU5DRSk7CisgICAgICAgIGRhdGVGb3JtYXRzWzJdID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkcsIHksIE0sIGQsIGssIEgsIG0sIHMsIFMsIEUsIEQsIEYsIHcsIFcsIGEsIGgsIEssIHosIHksIEUiLCBMb2NhbGUuVVMpOworICAgICAgICBkYXRlRm9ybWF0c1szXSA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJHR0dHLCB5eXl5LCBNTU1NLCBkZGRkLCBra2trLCBISEhILCBtbW1tLCBzc3NzLCBTU1NTLCBFRUVFLCBERERELCBGRkZGLCB3d3d3LCBXV1dXLCBhYWFhLCBoaGhoLCBLS0tLLCB6enp6LCB5eXl5LCBFRUVFIiwgTG9jYWxlLlVTKTsKKyAgICAgICAgLy9maXggdGhlIGpkayByZXNvdXJjZXMgZGlmZmVyZW5jZXMgYmV0d2VlbiBqZGsgMS4yIGFuZCBqZGsgMS4zCisgICAgICAgIFN0cmluZyBqYXZhVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIik7CisgICAgICAgIAorICAgICAgICBmb3IgKGogPSAwLCBleHAgPSAwOyBqIDwgZGF0ZUZvcm1hdHNfbGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHI7CisgICAgICAgICAgICBEYXRlRm9ybWF0IGRmID0gZGF0ZUZvcm1hdHNbal07CisgICAgICAgICAgICBUaW1lWm9uZSB0eiA9IFRpbWVab25lLmdldFRpbWVab25lKCJQU1QiKTsKKyAgICAgICAgICAgICgoU2ltcGxlVGltZVpvbmUpdHopLnNldERTVFNhdmluZ3MoMzYwMDAwMCk7CisgICAgICAgICAgICBkZi5zZXRUaW1lWm9uZSh0eik7CisgICAgICAgICAgICBsb2dsbigiIFBhdHRlcm4gPSAiICsgKChTaW1wbGVEYXRlRm9ybWF0KSBkZikudG9QYXR0ZXJuKCkpOworICAgICAgICAgICAgc3RyID0gIiI7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCIgIFJlc3VsdCA9ICIgKyBkZi5mb3JtYXQoc29tZURhdGUpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZE5hbWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpZWxkID0gZ2V0RmllbGRUZXh0KGRmLCBpLCBzb21lRGF0ZSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGV4cFN0ciA9ICIiOworICAgICAgICAgICAgICAgIGlmICghZXhwZWN0ZWRbZXhwXS5zdWJzdHJpbmcoMCkuZXF1YWxzKCIjIikpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwU3RyID0gZXhwZWN0ZWRbZXhwXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW5ub3QgaGF2ZSBsYXRpbi0xIGNoYXJhY3RlcnMgaW4gc291cmNlIGNvZGUsIHRoZXJlZm9yZSB3ZSBmaXggdXAgdGhlIHN0cmluZyBmb3IgImFvdV50IiAKKyAgICAgICAgICAgICAgICAgICAgZXhwU3RyID0gZXhwU3RyICsgIlx1MDA2MSIgKyAiXHUwMDZmIiArICJcdTAwZmIiICsgIlx1MDA3NCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgvKmphdmFWZXJzaW9uLnN0YXJ0c1dpdGgoIjEuMiIpICYmKi8gKGV4cD09MzEpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cFN0ciA9ICJHTVQtMDc6MDAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLmVxdWFscyhleHBTdHIpKQorICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogZmllbGQgIyIgKyBpICsgIiAiICsgZmllbGROYW1lc1tpXSArICIgPSBcIiIgKyBmaWVsZCArICJcIiwgZXhwZWN0ZWQgXCIiICsgZXhwU3RyICsgIlwiIik7CisgICAgICAgICAgICAgICAgKytleHA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbgorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RmllbGRUZXh0KERhdGVGb3JtYXQgZGYsIGludCBmaWVsZCwgRGF0ZSBkYXRlKSB7CisgICAgICAgIGZpbmFsIGludFtdIGZnQ2FsZW5kYXJUb0RhdGVGb3JtYXRGaWVsZCA9eworICAgICAgICAgICAgRGF0ZUZvcm1hdC5FUkFfRklFTEQsIAorICAgICAgICAgICAgRGF0ZUZvcm1hdC5ZRUFSX0ZJRUxELCAKKyAgICAgICAgICAgIERhdGVGb3JtYXQuTU9OVEhfRklFTEQsCisgICAgICAgICAgICBEYXRlRm9ybWF0LldFRUtfT0ZfWUVBUl9GSUVMRCwgCisgICAgICAgICAgICBEYXRlRm9ybWF0LldFRUtfT0ZfTU9OVEhfRklFTEQsCisgICAgICAgICAgICBEYXRlRm9ybWF0LkRBVEVfRklFTEQsIAorICAgICAgICAgICAgRGF0ZUZvcm1hdC5EQVlfT0ZfWUVBUl9GSUVMRCwgCisgICAgICAgICAgICBEYXRlRm9ybWF0LkRBWV9PRl9XRUVLX0ZJRUxELCAgICAgCisgICAgICAgICAgICBEYXRlRm9ybWF0LkRBWV9PRl9XRUVLX0lOX01PTlRIX0ZJRUxELCAKKyAgICAgICAgICAgIERhdGVGb3JtYXQuQU1fUE1fRklFTEQsCisgICAgICAgICAgICBEYXRlRm9ybWF0LkhPVVIxX0ZJRUxELCAKKyAgICAgICAgICAgIERhdGVGb3JtYXQuSE9VUl9PRl9EQVkwX0ZJRUxELCAKKyAgICAgICAgICAgIERhdGVGb3JtYXQuTUlOVVRFX0ZJRUxELCAKKyAgICAgICAgICAgIERhdGVGb3JtYXQuU0VDT05EX0ZJRUxELCAKKyAgICAgICAgICAgIERhdGVGb3JtYXQuTUlMTElTRUNPTkRfRklFTEQsCisgICAgICAgICAgICBEYXRlRm9ybWF0LlRJTUVaT05FX0ZJRUxECisgICAgICAgICAgICB9OworICAgICAgICBTdHJpbmdCdWZmZXIgZm9ybWF0UmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIC8vIHtzZmJ9IGFkZGVkIHRvIGNvbnZlcnQgQ2FsZW5kYXIgRmllbGRzIHRvIERhdGVGb3JtYXQgZmllbGRzCisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oZmdDYWxlbmRhclRvRGF0ZUZvcm1hdEZpZWxkW2ZpZWxkXSk7CisgICAgICAgIGZvcm1hdFJlc3VsdCA9IGRmLmZvcm1hdChkYXRlLCBmb3JtYXRSZXN1bHQsIHBvcyk7ICAgIAorICAgICAgICByZXR1cm4gZm9ybWF0UmVzdWx0LnN1YnN0cmluZyhwb3MuZ2V0QmVnaW5JbmRleCgpLCBwb3MuZ2V0RW5kSW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFZlcmlmeSB0aGF0IHN0cmluZ3Mgd2hpY2ggY29udGFpbiBpbmNvbXBsZXRlIHNwZWNpZmljYXRpb25zIGFyZSBwYXJzZWQKKyAgICAgKiBjb3JyZWN0bHkuICBJbiBzb21lIGluc3RhbmNlcywgdGhpcyBtZWFucyBub3QgYmVpbmcgcGFyc2VkIGF0IGFsbCwgYW5kCisgICAgICogcmV0dXJuaW5nIGFuIGFwcHJvcHJpYXRlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQYXJ0aWFsUGFyc2U5OTQoKSB7CisgICAgCisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCk7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDE5OTcsIDEgLSAxLCAxNywgMTAsIDExLCA0Mik7CisgICAgICAgIERhdGUgZGF0ZSA9IG51bGw7CisgICAgICAgIHRyeVBhdDk5NChmLCAieXkvTU0vZGQgSEg6bW06c3MiLCAiOTcvMDEvMTcgMTA6MTE6NDIiLCBjYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgdHJ5UGF0OTk0KGYsICJ5eS9NTS9kZCBISDptbTpzcyIsICI5Ny8wMS8xNyAxMDoiLCBkYXRlKTsKKyAgICAgICAgdHJ5UGF0OTk0KGYsICJ5eS9NTS9kZCBISDptbTpzcyIsICI5Ny8wMS8xNyAxMCIsIGRhdGUpOworICAgICAgICB0cnlQYXQ5OTQoZiwgInl5L01NL2RkIEhIOm1tOnNzIiwgIjk3LzAxLzE3ICIsIGRhdGUpOworICAgICAgICB0cnlQYXQ5OTQoZiwgInl5L01NL2RkIEhIOm1tOnNzIiwgIjk3LzAxLzE3IiwgZGF0ZSk7CisgICAgfQorICAgIAorICAgIC8vIGludGVybmFsIHRlc3Qgc3Vicm91dGluZSwgdXNlZCBieSBUZXN0UGFydGlhbFBhcnNlOTk0CisgICAgcHVibGljIHZvaWQgdHJ5UGF0OTk0KFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0LCBTdHJpbmcgcGF0LCBTdHJpbmcgc3RyLCBEYXRlIGV4cGVjdGVkKSB7CisgICAgICAgIERhdGUgTnVsbCA9IG51bGw7CisgICAgICAgIGxvZ2xuKCJQYXR0ZXJuIFwiIiArIHBhdCArICJcIiAgIFN0cmluZyBcIiIgKyBzdHIgKyAiXCIiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZvcm1hdC5hcHBseVBhdHRlcm4ocGF0KTsKKyAgICAgICAgICAgIERhdGUgZGF0ZSA9IGZvcm1hdC5wYXJzZShzdHIpOyAgICAKKyAgICAgICAgICAgIFN0cmluZyBmID0gKChEYXRlRm9ybWF0KSBmb3JtYXQpLmZvcm1hdChkYXRlKTsKKyAgICAgICAgICAgIGxvZ2xuKCIgcGFyc2UoIiArIHN0ciArICIpIC0+ICIgKyBkYXRlKTsKKyAgICAgICAgICAgIGxvZ2xuKCIgZm9ybWF0IC0+ICIgKyBmKTsKKyAgICAgICAgICAgIGlmIChleHBlY3RlZC5lcXVhbHMoTnVsbCkgfHwgIWRhdGUuZXF1YWxzKGV4cGVjdGVkKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgbnVsbCIpOyAvLyIgKyBleHBlY3RlZCk7CisgICAgICAgICAgICBpZiAoIWYuZXF1YWxzKHN0cikpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBzdHIpOworICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dsbigiUGFyc2VFeGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICBpZiAoIShleHBlY3RlZCA9PU51bGwpKQorICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCAiICsgZXhwZWN0ZWQpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIioqKiBFeGNlcHRpb246Iik7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgcGF0dGVybnMgaW4gd2hpY2ggZGlnaXRzIGZvciBkaWZmZXJlbnQgZmllbGRzIHJ1biB0b2dldGhlcgorICAgICAqIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgc2VwYXJhdG9ycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0UnVuVG9nZXRoZXJQYXR0ZXJuOTg1KCkgeworICAgICAgICBTdHJpbmcgZm9ybWF0ID0gInl5eXlNTWRkSEhtbXNzU1NTIjsKKyAgICAgICAgU3RyaW5nIG5vdywgdGhlbjsKKyAgICAgICAgLy9VQm9vbCBmbGFnOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdHRlciA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KGZvcm1hdCk7CisgICAgICAgIERhdGUgZGF0ZTEgPSBuZXcgRGF0ZSgpOworICAgICAgICBub3cgPSAoKERhdGVGb3JtYXQpIGZvcm1hdHRlcikuZm9ybWF0KGRhdGUxKTsKKyAgICAgICAgbG9nbG4obm93KTsKKyAgICAgICAgUGFyc2VQb3NpdGlvbiBwb3MgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgRGF0ZSBkYXRlMiA9IGZvcm1hdHRlci5wYXJzZShub3csIHBvcyk7CisgICAgICAgIGlmIChkYXRlMiA9PSBudWxsKQorICAgICAgICAgICAgdGhlbiA9ICJQYXJzZSBzdG9wcGVkIGF0ICIgKyBwb3MuZ2V0SW5kZXgoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhlbiA9ICgoRGF0ZUZvcm1hdCkgZm9ybWF0dGVyKS5mb3JtYXQoZGF0ZTIpOworICAgICAgICBsb2dsbih0aGVuKTsKKyAgICAgICAgaWYgKCFkYXRlMi5lcXVhbHMoZGF0ZTEpKQorICAgICAgICAgICAgZXJybG4oIkZBSUwiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWZXJpZnkgdGhlIGJlaGF2aW9yIG9mIHBhdHRlcm5zIGluIHdoaWNoIGRpZ2l0cyBmb3IgZGlmZmVyZW50IGZpZWxkcyBydW4gdG9nZXRoZXIKKyAgICAgKiB3aXRob3V0IGludGVydmVuaW5nIHNlcGFyYXRvcnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFJ1blRvZ2V0aGVyUGF0dGVybjkxNygpIHsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmbXQ7CisgICAgICAgIFN0cmluZyBteURhdGU7CisgICAgICAgIGZtdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5L01NL2RkIik7CisgICAgICAgIG15RGF0ZSA9ICIxOTk3LzAyLzAzIjsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMTk5NywgMiAtIDEsIDMpOworICAgICAgICBfdGVzdEl0OTE3KGZtdCwgbXlEYXRlLCBjYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgZm10ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXlNTWRkIik7CisgICAgICAgIG15RGF0ZSA9ICIxOTk3MDMwNCI7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDE5OTcsIDMgLSAxLCA0KTsKKyAgICAgICAgX3Rlc3RJdDkxNyhmbXQsIG15RGF0ZSwgY2FsLmdldFRpbWUoKSk7CisgICAgCisgICAgfQorICAgIAorICAgIC8vIGludGVybmFsIHRlc3Qgc3Vicm91dGluZSwgdXNlZCBieSBUZXN0UnVuVG9nZXRoZXJQYXR0ZXJuOTE3CisgICAgcHVibGljIHZvaWQgX3Rlc3RJdDkxNyhTaW1wbGVEYXRlRm9ybWF0IGZtdCwgU3RyaW5nIHN0ciwgRGF0ZSBleHBlY3RlZCkgeworICAgICAgICBsb2dsbigicGF0dGVybj0iICsgZm10LnRvUGF0dGVybigpICsgIiAgIHN0cmluZz0iICsgc3RyKTsKKyAgICAgICAgRGF0ZSBvID0gbmV3IERhdGUoKTsKKyAgICAgICAgbyA9IChEYXRlKSAoKERhdGVGb3JtYXQpIGZtdCkucGFyc2VPYmplY3Qoc3RyLCBuZXcgUGFyc2VQb3NpdGlvbigwKSk7CisgICAgICAgIGxvZ2xuKCJQYXJzZWQgb2JqZWN0OiAiICsgbyk7CisgICAgICAgIGlmICghby5lcXVhbHMoZXhwZWN0ZWQpKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBleHBlY3RlZCk7CisgICAgICAgIFN0cmluZyBmb3JtYXR0ZWQgPSAoKERhdGVGb3JtYXQpIGZtdCkuZm9ybWF0KG8pOworICAgICAgICBsb2dsbiggIkZvcm1hdHRlZCBzdHJpbmc6ICIgKyBmb3JtYXR0ZWQpOworICAgICAgICBpZiAoIWZvcm1hdHRlZC5lcXVhbHMoc3RyKSkKKyAgICAgICAgICAgIGVycmxuKCAiRkFJTDogRXhwZWN0ZWQgIiArIHN0cik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFZlcmlmeSB0aGUgaGFuZGxpbmcgb2YgQ3plY2ggSnVuZSBhbmQgSnVseSwgd2hpY2ggaGF2ZSB0aGUgdW5pcXVlIGF0dHJpYnV0ZSB0aGF0CisgICAgICogb25lIGlzIGEgcHJvcGVyIHByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIG90aGVyLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDemVjaE1vbnRoczQ1OSgpIHsKKyAgICAgICAgRGF0ZUZvcm1hdCBmbXQgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIG5ldyBMb2NhbGUoImNzIiwgIiIsICIiKSk7IAorICAgICAgICBsb2dsbigiUGF0dGVybiAiICsgKChTaW1wbGVEYXRlRm9ybWF0KSBmbXQpLnRvUGF0dGVybigpKTsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMTk5NywgQ2FsZW5kYXIuSlVORSwgMTUpOworICAgICAgICBEYXRlIGp1bmUgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgxOTk3LCBDYWxlbmRhci5KVUxZLCAxNSk7CisgICAgICAgIERhdGUganVseSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIFN0cmluZyBqdW5lU3RyID0gZm10LmZvcm1hdChqdW5lKTsKKyAgICAgICAgU3RyaW5nIGp1bHlTdHIgPSBmbXQuZm9ybWF0KGp1bHkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbG9nbG4oImZvcm1hdChKdW5lIDE1IDE5OTcpID0gIiArIGp1bmVTdHIpOworICAgICAgICAgICAgRGF0ZSBkID0gZm10LnBhcnNlKGp1bmVTdHIpOworICAgICAgICAgICAgU3RyaW5nIHMgPSBmbXQuZm9ybWF0KGQpOworICAgICAgICAgICAgaW50IG1vbnRoLCB5ciwgZGF5LCBociwgbWluLCBzZWM7CisgICAgICAgICAgICBjYWwuc2V0VGltZShkKTsKKyAgICAgICAgICAgIHlyID0gY2FsLmdldChDYWxlbmRhci5ZRUFSKSAtIDE5MDA7CisgICAgICAgICAgICBtb250aCA9IGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICAgICAgZGF5ID0gY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSyk7CisgICAgICAgICAgICBociA9IGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOworICAgICAgICAgICAgbWluID0gY2FsLmdldChDYWxlbmRhci5NSU5VVEUpOworICAgICAgICAgICAgc2VjID0gY2FsLmdldChDYWxlbmRhci5TRUNPTkQpOworICAgICAgICAgICAgbG9nbG4oIiAgLiBwYXJzZSAuICIgKyBzICsgIiAobW9udGggPSAiICsgbW9udGggKyAiKSIpOworICAgICAgICAgICAgaWYgKG1vbnRoICE9IENhbGVuZGFyLkpVTkUpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IE1vbnRoIHNob3VsZCBiZSBKdW5lIik7CisgICAgICAgICAgICBsb2dsbigiZm9ybWF0KEp1bHkgMTUgMTk5NykgPSAiICsganVseVN0cik7CisgICAgICAgICAgICBkID0gZm10LnBhcnNlKGp1bHlTdHIpOworICAgICAgICAgICAgcyA9IGZtdC5mb3JtYXQoZCk7CisgICAgICAgICAgICBjYWwuc2V0VGltZShkKTsKKyAgICAgICAgICAgIHlyID0gY2FsLmdldChDYWxlbmRhci5ZRUFSKSAtIDE5MDA7CisgICAgICAgICAgICBtb250aCA9IGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICAgICAgZGF5ID0gY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSyk7CisgICAgICAgICAgICBociA9IGNhbC5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOworICAgICAgICAgICAgbWluID0gY2FsLmdldChDYWxlbmRhci5NSU5VVEUpOworICAgICAgICAgICAgc2VjID0gY2FsLmdldChDYWxlbmRhci5TRUNPTkQpOworICAgICAgICAgICAgbG9nbG4oIiAgLiBwYXJzZSAuICIgKyBzICsgIiAobW9udGggPSAiICsgbW9udGggKyAiKSIpOworICAgICAgICAgICAgaWYgKG1vbnRoICE9IENhbGVuZGFyLkpVTFkpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IE1vbnRoIHNob3VsZCBiZSBKdWx5Iik7CisgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBoYW5kbGluZyBvZiAnRCcgaW4gcGF0dGVybnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdExldHRlckRQYXR0ZXJuMjEyKCkgeworICAgICAgICBTdHJpbmcgZGF0ZVN0cmluZyA9ICIxOTk1LTA0MC4wNTowMToyOSI7CisgICAgICAgIFN0cmluZyBiaWdEID0gInl5eXktRERELmhoOm1tOnNzIjsKKyAgICAgICAgU3RyaW5nIGxpdHRsZUQgPSAieXl5eS1kZGQuaGg6bW06c3MiOworICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCgxOTk1LCAwLCAxLCA1LCAxLCAyOSk7CisgICAgICAgIERhdGUgZXhwTGl0dGxlRCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIERhdGUgZXhwQmlnRCA9IG5ldyBEYXRlKChsb25nKSAoZXhwTGl0dGxlRC5nZXRUaW1lKCkgKyAzOSAqIDI0ICogMzYwMDAwMC4wKSk7CisgICAgICAgIGV4cExpdHRsZUQgPSBleHBCaWdEOyAvLyBFeHBlY3QgdGhlIHNhbWUsIHdpdGggZGVmYXVsdCBsZW5pZW50IHBhcnNpbmcKKyAgICAgICAgbG9nbG4oImRhdGVTdHJpbmc9ICIgKyBkYXRlU3RyaW5nKTsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChiaWdEKTsKKyAgICAgICAgUGFyc2VQb3NpdGlvbiBwb3MgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgRGF0ZSBteURhdGUgPSBmb3JtYXR0ZXIucGFyc2UoZGF0ZVN0cmluZywgcG9zKTsKKyAgICAgICAgbG9nbG4oIlVzaW5nICIgKyBiaWdEICsgIiAuICIgKyBteURhdGUpOworICAgICAgICBpZiAoIW15RGF0ZS5lcXVhbHMoZXhwQmlnRCkpCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgIiArIGV4cEJpZ0QpOworICAgICAgICBmb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChsaXR0bGVEKTsKKyAgICAgICAgcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIG15RGF0ZSA9IGZvcm1hdHRlci5wYXJzZShkYXRlU3RyaW5nLCBwb3MpOworICAgICAgICBsb2dsbigiVXNpbmcgIiArIGxpdHRsZUQgKyAiIC4gIiArIG15RGF0ZSk7CisgICAgICAgIGlmICghbXlEYXRlLmVxdWFscyhleHBMaXR0bGVEKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCAiICsgZXhwTGl0dGxlRCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGRheSBvZiB5ZWFyIHBhdHRlcm4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdERheU9mWWVhclBhdHRlcm4xOTUoKSB7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIERhdGUgdG9kYXkgPSBjYWwuZ2V0VGltZSgpOworICAgICAgICBpbnQgeWVhcixtb250aCxkYXk7IAorICAgICAgICB5ZWFyID0gY2FsLmdldChDYWxlbmRhci5ZRUFSKTsKKyAgICAgICAgbW9udGggPSBjYWwuZ2V0KENhbGVuZGFyLk1PTlRIKTsKKyAgICAgICAgZGF5ID0gY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOworICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAgICAgY2FsLnNldCh5ZWFyLCBtb250aCwgZGF5KTsKKyAgICAgICAgRGF0ZSBleHBlY3RlZCA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIGxvZ2xuKCJUZXN0IERhdGU6ICIgKyB0b2RheSk7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gKFNpbXBsZURhdGVGb3JtYXQpRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsKKyAgICAgICAgdHJ5UGF0dGVybihzZGYsIHRvZGF5LCBudWxsLCBleHBlY3RlZCk7CisgICAgICAgIHRyeVBhdHRlcm4oc2RmLCB0b2RheSwgIkcgeXl5eSBEREQiLCBleHBlY3RlZCk7CisgICAgfQorICAgIAorICAgIC8vIGludGVybCB0ZXN0IHN1YnJvdXRpbmUsIHVzZWQgYnkgVGVzdERheU9mWWVhclBhdHRlcm4xOTUKKyAgICBwdWJsaWMgdm9pZCB0cnlQYXR0ZXJuKFNpbXBsZURhdGVGb3JtYXQgc2RmLCBEYXRlIGQsIFN0cmluZyBwYXR0ZXJuLCBEYXRlIGV4cGVjdGVkKSB7CisgICAgICAgIGlmIChwYXR0ZXJuICE9IG51bGwpCisgICAgICAgICAgICBzZGYuYXBwbHlQYXR0ZXJuKHBhdHRlcm4pOworICAgICAgICBsb2dsbigicGF0dGVybjogIiArIHNkZi50b1BhdHRlcm4oKSk7CisgICAgICAgIFN0cmluZyBmb3JtYXRSZXN1bHQgPSAoKERhdGVGb3JtYXQpIHNkZikuZm9ybWF0KGQpOworICAgICAgICBsb2dsbigiIGZvcm1hdCAtPiAiICsgZm9ybWF0UmVzdWx0KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIERhdGUgZDIgPSBzZGYucGFyc2UoZm9ybWF0UmVzdWx0KTsKKyAgICAgICAgICAgIGxvZ2xuKCIgcGFyc2UoIiArIGZvcm1hdFJlc3VsdCArICIpIC0+ICIgKyBkMik7CisgICAgICAgICAgICBpZiAoIWQyLmVxdWFscyhleHBlY3RlZCkpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBleHBlY3RlZCk7CisgICAgICAgICAgICBTdHJpbmcgZm9ybWF0MiA9ICgoRGF0ZUZvcm1hdCkgc2RmKS5mb3JtYXQoZDIpOworICAgICAgICAgICAgbG9nbG4oIiBmb3JtYXQgLT4gIiArIGZvcm1hdDIpOworICAgICAgICAgICAgaWYgKCFmb3JtYXRSZXN1bHQuZXF1YWxzKGZvcm1hdDIpKQorICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBSb3VuZCB0cmlwIGRyaWZ0Iik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgaGFuZGxpbmcgb2Ygc2luZ2xlIHF1b3RlcyBpbiBwYXR0ZXJucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0UXVvdGVQYXR0ZXJuMTYxKCkgeworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdHRlciA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJNTS9kZC95eXl5ICdhdCcgaGg6bW06c3MgYSB6enoiLCBMb2NhbGUuVVMpOyAKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMTk5NywgQ2FsZW5kYXIuQVVHVVNULCAxMywgMTAsIDQyLCAyOCk7CisgICAgICAgIERhdGUgY3VycmVudFRpbWVfMSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIFN0cmluZyBkYXRlU3RyaW5nID0gKChEYXRlRm9ybWF0KSBmb3JtYXR0ZXIpLmZvcm1hdChjdXJyZW50VGltZV8xKTsKKyAgICAgICAgU3RyaW5nIGV4cCA9ICIwOC8xMy8xOTk3IGF0IDEwOjQyOjI4IEFNICI7CisgICAgICAgIGxvZ2xuKCJmb3JtYXQoIiArIGN1cnJlbnRUaW1lXzEgKyAiKSA9ICIgKyBkYXRlU3RyaW5nKTsKKyAgICAgICAgaWYgKCFkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBleHAubGVuZ3RoKCkpLmVxdWFscyhleHApKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBleHApOworICAgIAorICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogVmVyaWZ5IHRoZSBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gaGFuZGxpbmcgaW52YWxpZCBpbnB1dCBzdHJpbmdzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RCYWRJbnB1dDEzNSgpIHsKKyAgICAgICAgaW50IGxvb2tzW10gPSB7RGF0ZUZvcm1hdC5TSE9SVCwgRGF0ZUZvcm1hdC5NRURJVU0sIERhdGVGb3JtYXQuTE9ORywgRGF0ZUZvcm1hdC5GVUxMfTsgCisgICAgICAgIGludCBsb29rc19sZW5ndGggPSBsb29rcy5sZW5ndGg7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHN0cmluZ3MgPSB7Ik1hciAxNSIsICJNYXIgMTUgMTk5NyIsICJhc2RmIiwgIjMvMS85NyAxOjIzOiIsICIzLzEvMDAgMToyMzo0NSBBTSJ9OyAKKyAgICAgICAgaW50IHN0cmluZ3NfbGVuZ3RoID0gc3RyaW5ncy5sZW5ndGg7CisgICAgICAgIERhdGVGb3JtYXQgZnVsbCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LkxPTkcsIERhdGVGb3JtYXQuTE9ORywgTG9jYWxlLlVTKTsgCisgICAgICAgIFN0cmluZyBleHBlY3RlZCA9ICJNYXJjaCAxLCAyMDAwIDE6MjM6NDUgQU0gIjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmdzX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dCA9IHN0cmluZ3NbaV07CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxvb2tzX2xlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgaW50IGRhdGVMb29rID0gbG9va3Nbal07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBsb29rc19sZW5ndGg7ICsraykgeworICAgICAgICAgICAgICAgICAgICBpbnQgdGltZUxvb2sgPSBsb29rc1trXTsKKyAgICAgICAgICAgICAgICAgICAgRGF0ZUZvcm1hdCBkZiA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShkYXRlTG9vaywgdGltZUxvb2ssIExvY2FsZS5VUyk7IAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gdGV4dCArICIsICIgKyBkYXRlTG9vayArICIvIiArIHRpbWVMb29rICsgIjogIjsgCisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBEYXRlIHdoZW4gPSBkZi5wYXJzZSh0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aGVuID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbihwcmVmaXggKyAiU0hPVUxEIE5PVCBIQVBQRU46IHBhcnNlIHJldHVybmVkIG51bGwuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aGVuICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZm9ybWF0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZ1bGwuZm9ybWF0KHdoZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKHByZWZpeCArICJPSzogIiArIGZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtYXQuc3Vic3RyaW5nKDAsIGV4cGVjdGVkLmxlbmd0aCgpKS5lcXVhbHMoZXhwZWN0ZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgIiArIGV4cGVjdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnRleHQuUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nbG4oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFZlcmlmeSB0aGUgY29ycmVjdCBiZWhhdmlvciB3aGVuIHBhcnNpbmcgYW4gYXJyYXkgb2YgaW5wdXRzIGFnYWluc3QgYW4KKyAgICAgKiBhcnJheSBvZiBwYXR0ZXJucywgd2l0aCBrbm93biByZXN1bHRzLiAgVGhlIHJlc3VsdHMgYXJlIGVuY29kZWQgYWZ0ZXIKKyAgICAgKiB0aGUgaW5wdXQgc3RyaW5ncyBpbiBlYWNoIHJvdy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0QmFkSW5wdXQxMzVhKCkgeworICAgIAorICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGRhdGVQYXJzZSA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCIiLCBMb2NhbGUuVVMpOworICAgICAgICBmaW5hbCBTdHJpbmcgc3M7CisgICAgICAgIERhdGUgZGF0ZTsKKyAgICAgICAgU3RyaW5nW10gcGFyc2VGb3JtYXRzID17Ik1NTU0gZCwgeXl5eSIsICJNTU1NIGQgeXl5eSIsICJNL2QveXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZCBNTU1NLCB5eXl5IiwgImQgTU1NTSB5eXl5IiwgICJkIE1NTU0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTU1NTSBkIiwgInl5eXkiLCAiaDptbSBhIE1NTU0gZCwgeXl5eSIgfTsKKyAgICAgICAgU3RyaW5nW10gaW5wdXRTdHJpbmdzID0geworICAgICAgICAgICAgImJvZ3VzIHN0cmluZyIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgIkFwcmlsIDEsIDE5OTciLCAiQXByaWwgMSwgMTk5NyIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICJBcHJpbCAxIiwgbnVsbCwgbnVsbCwKKyAgICAgICAgICAgICAgICAiSmFuIDEsIDE5NzAiLCAiSmFudWFyeSAxLCAxOTcwIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIkphbnVhcnkgMSIsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgIkphbiAxIDIwMzciLCBudWxsLCAiSmFudWFyeSAxIDIwMzciLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiSmFudWFyeSAxIiwgbnVsbCwgbnVsbCwKKyAgICAgICAgICAgICAgICAiMS8xLzcwIiwgbnVsbCwgbnVsbCwgIjEvMS83MCIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIwMDAxIiwgbnVsbCwKKyAgICAgICAgICAgICAgICAiNSBNYXkgMTk5NyIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICI1IE1heSAxOTk3IiwgIjUgTWF5IiwgbnVsbCwgIjAwMDUiLCBudWxsLAorICAgICAgICAgICAgICAgICIxNiBNYXkiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiMTYgTWF5IiwgbnVsbCwgIjAwMTYiLCBudWxsLAorICAgICAgICAgICAgICAgICJBcHJpbCAzMCIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICJBcHJpbCAzMCIsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgIjE5OTgiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiMTk5OCIsIG51bGwsCisgICAgICAgICAgICAgICAgIjEiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiMDAwMSIsIG51bGwsCisgICAgICAgICAgICAgICAgIjM6MDAgcG0gSmFuIDEsIDE5OTciLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiMDAwMyIsICIzOjAwIFBNIEphbnVhcnkgMSwgMTk5NyIsCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgZmluYWwgaW50IFBGX0xFTkdUSCA9IHBhcnNlRm9ybWF0cy5sZW5ndGg7CisgICAgICAgIGZpbmFsIGludCBJTlBVVF9MRU5HVEggPSBpbnB1dFN0cmluZ3MubGVuZ3RoOworICAgIAorICAgICAgICBkYXRlUGFyc2UuYXBwbHlQYXR0ZXJuKCJkIE1NTU0sIHl5eXkiKTsKKyAgICAgICAgZGF0ZVBhcnNlLnNldFRpbWVab25lKFRpbWVab25lLmdldERlZmF1bHQoKSk7CisgICAgICAgIHNzID0gIm5vdCBwYXJzZWFibGUiOworICAgICAgICAvLyAgICBTdHJpbmcgdGhlUGF0OworICAgICAgICBsb2dsbigiVHJ5aW5nIHRvIHBhcnNlIFwiIiArIHNzICsgIlwiIHdpdGggIiArIGRhdGVQYXJzZS50b1BhdHRlcm4oKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkYXRlID0gZGF0ZVBhcnNlLnBhcnNlKHNzKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBsb2dsbigiRkFJTDoiICsgZXgpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU5QVVRfTEVOR1RIOyBpICs9IChQRl9MRU5HVEggKyAxKSkgeworICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwYXJzZVBvc2l0aW9uID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgICAgICBTdHJpbmcgcyA9IGlucHV0U3RyaW5nc1tpXTsKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBQRl9MRU5HVEg7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZXhwZWN0ZWQgPSBpbnB1dFN0cmluZ3NbaSArIDEgKyBpbmRleF07CisgICAgICAgICAgICAgICAgZGF0ZVBhcnNlLmFwcGx5UGF0dGVybihwYXJzZUZvcm1hdHNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICBkYXRlUGFyc2Uuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEluZGV4KDApOworICAgICAgICAgICAgICAgICAgICBkYXRlID0gZGF0ZVBhcnNlLnBhcnNlKHMsIHBhcnNlUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzMSwgczI7CisgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHMuc3Vic3RyaW5nKDAsIHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzMiA9IHMuc3Vic3RyaW5nKHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKSwgcy5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBudWxsIHJlc3VsdCBmbXQ9XCIiICsgcGFyc2VGb3JtYXRzW2luZGV4XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiXCIgcG9zPSIgKyBwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiAiICsgczEgKyAifCIgKyBzMik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSAoKERhdGVGb3JtYXQpIGRhdGVQYXJzZSkuZm9ybWF0KGRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJQYXJzZWQgXCIiICsgcyArICJcIiB1c2luZyBcIiIgKyBkYXRlUGFyc2UudG9QYXR0ZXJuKCkgKyAiXCIgdG86ICIgKyByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgcGFyc2UgZmFpbHVyZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKGV4cGVjdGVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCAiICsgZXhwZWN0ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBleHBlY3RlZCArICIgZnJvbSBcIiIgKyBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJcIiB3aXRoIFwiIiArIGRhdGVQYXJzZS50b1BhdHRlcm4oKSsgIlwiIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJGQUlMOiIgKyBleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgdGhlIHBhcnNpbmcgb2YgdHdvLWRpZ2l0IHllYXJzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RUd29EaWdpdFllYXIoKSB7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoRGF0ZUZvcm1hdC5TSE9SVCwgTG9jYWxlLlVTKTsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMTE3ICsgMTkwMCwgQ2FsZW5kYXIuSlVORSwgNSk7CisgICAgICAgIHBhcnNlMkRpZ2l0WWVhcihmbXQsICI2LzUvMTciLCBjYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMzQgKyAxOTAwLCBDYWxlbmRhci5KVU5FLCA0KTsKKyAgICAgICAgcGFyc2UyRGlnaXRZZWFyKGZtdCwgIjYvNC8zNCIsIGNhbC5nZXRUaW1lKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBpbnRlcm5hbCB0ZXN0IHN1YnJvdXRpbmUsIHVzZWQgYnkgVGVzdFR3b0RpZ2l0WWVhcgorICAgIHB1YmxpYyB2b2lkIHBhcnNlMkRpZ2l0WWVhcihEYXRlRm9ybWF0IGZtdCwgU3RyaW5nIHN0ciwgRGF0ZSBleHBlY3RlZCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGF0ZSBkID0gZm10LnBhcnNlKHN0cik7CisgICAgICAgICAgICBsb2dsbigiUGFyc2luZyBcIiIrIHN0cisgIlwiIHdpdGggIisgKChTaW1wbGVEYXRlRm9ybWF0KSBmbXQpLnRvUGF0dGVybigpCisgICAgICAgICAgICAgICAgICAgICsgIiAgPT4gIisgZCk7IAorICAgICAgICAgICAgaWYgKCFkLmVxdWFscyhleHBlY3RlZCkpCisgICAgICAgICAgICAgICAgZXJybG4oICJGQUlMOiBFeHBlY3RlZCAiICsgZXhwZWN0ZWQpOworICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgZm9ybWF0dGluZyBvZiB0aW1lIHpvbmVzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3REYXRlRm9ybWF0Wm9uZTA2MSgpIHsKKyAgICAgICAgRGF0ZSBkYXRlOworICAgICAgICBEYXRlRm9ybWF0IGZvcm1hdHRlcjsKKyAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKDg1OTI0ODAwMDAwMGwpOworICAgICAgICBsb2dsbigiRGF0ZSAxOTk3LzMvMjUgMDA6MDAgR01UOiAiICsgZGF0ZSk7CisgICAgICAgIGZvcm1hdHRlciA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJkZC1NTU0teXl5eXkgSEg6bW0iLCBMb2NhbGUuVUspOworICAgICAgICBmb3JtYXR0ZXIuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKTsKKyAgICAgICAgU3RyaW5nIHRlbXAgPSBmb3JtYXR0ZXIuZm9ybWF0KGRhdGUpOworICAgICAgICBsb2dsbigiRm9ybWF0dGVkIGluIEdNVCB0bzogIiArIHRlbXApOworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGF0ZSB0ZW1wRGF0ZSA9IGZvcm1hdHRlci5wYXJzZSh0ZW1wKTsKKyAgICAgICAgICAgIGxvZ2xuKCJQYXJzZWQgdG86ICIgKyB0ZW1wRGF0ZSk7CisgICAgICAgICAgICBpZiAoIXRlbXBEYXRlLmVxdWFscyhkYXRlKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgIiArIGRhdGUpOworICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQpOworICAgICAgICB9CisgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGZvcm1hdHRpbmcgb2YgdGltZSB6b25lcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0RGF0ZUZvcm1hdFpvbmUxNDYoKSB7CisgICAgICAgIFRpbWVab25lIHNhdmVEZWZhdWx0ID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOworICAgIAorICAgICAgICAvL3RyeSB7CisgICAgICAgIFRpbWVab25lIHRoZWRlZmF1bHQgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIik7CisgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQodGhlZGVmYXVsdCk7CisgICAgICAgIC8vIGphdmEudXRpbC5Mb2NhbGUuc2V0RGVmYXVsdChuZXcgamF2YS51dGlsLkxvY2FsZSgiYXIiLCAiIiwgIiIpKTsKKyAgICAKKyAgICAgICAgLy8gY2hlY2sgdG8gYmUgc3VyZS4uLiBpdHMgR01UIGFsbCByaWdodAorICAgICAgICBUaW1lWm9uZSB0ZXN0ZGVmYXVsdCA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAgICAgU3RyaW5nIHRlc3R0aW1lem9uZSA9IHRlc3RkZWZhdWx0LmdldElEKCk7CisgICAgICAgIGlmICh0ZXN0dGltZXpvbmUuZXF1YWxzKCJHTVQiKSkKKyAgICAgICAgICAgIGxvZ2xuKCJUZXN0IHRpbWV6b25lID0gIiArIHRlc3R0aW1lem9uZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVycmxuKCJUZXN0IHRpbWV6b25lIHNob3VsZCBiZSBHTVQsIG5vdCAiICsgdGVzdHRpbWV6b25lKTsKKyAgICAKKyAgICAgICAgLy8gbm93IHRyeSB0byB1c2UgdGhlIGRlZmF1bHQgR01UIHRpbWUgem9uZQorICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBncmVlbndpY2hjYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigxOTk3LCAzLCA0LCAyMywgMCk7CisgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKipncmVlbndpY2hjYWxlbmRhci5zZXRUaW1lWm9uZShUaW1lWm9uZS5nZXREZWZhdWx0KCkpOworICAgICAgICAvL2dyZWVud2ljaGNhbGVuZGFyLnNldCgxOTk3LCAzLCA0LCAyMywgMCk7CisgICAgICAgIC8vIHRyeSBhbnl0aGluZyB0byBzZXQgaG91ciB0byAyMzowMCAhISEKKyAgICAgICAgZ3JlZW53aWNoY2FsZW5kYXIuc2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZLCAyMyk7CisgICAgICAgIC8vIGdldCB0aW1lCisgICAgICAgIERhdGUgZ3JlZW53aWNoZGF0ZSA9IGdyZWVud2ljaGNhbGVuZGFyLmdldFRpbWUoKTsKKyAgICAgICAgLy8gZm9ybWF0IGV2ZXJ5IHdheQorICAgICAgICBTdHJpbmcgREFUQVtdID0geworICAgICAgICAgICAgICAgICJzaW1wbGUgZm9ybWF0OiAgIiwgIjA0LzA0Lzk3IDIzOjAwIEdNVCIsIAorICAgICAgICAgICAgICAgICJNTS9kZC95eSBISDptbSB6IiwgImZ1bGwgZm9ybWF0OiAgICAiLCAKKyAgICAgICAgICAgICAgICAiRnJpZGF5LCBBcHJpbCA0LCAxOTk3IDExOjAwOjAwIG8nY2xvY2sgUE0gR01UIiwgCisgICAgICAgICAgICAgICAgIkVFRUUsIE1NTU0gZCwgeXl5eSBoOm1tOnNzICdvJydjbG9jaycgYSB6IiwgCisgICAgICAgICAgICAgICAgImxvbmcgZm9ybWF0OiAgICAiLCAiQXByaWwgNCwgMTk5NyAxMTowMDowMCBQTSBHTVQiLCAKKyAgICAgICAgICAgICAgICAiTU1NTSBkLCB5eXl5IGg6bW06c3MgYSB6IiwgImRlZmF1bHQgZm9ybWF0OiAiLCAKKyAgICAgICAgICAgICAgICAiMDQtQXByLTk3IDExOjAwOjAwIFBNIiwgImRkLU1NTS15eSBoOm1tOnNzIGEiLCAKKyAgICAgICAgICAgICAgICAic2hvcnQgZm9ybWF0OiAgICIsICI0LzQvOTcgMTE6MDAgUE0iLCAKKyAgICAgICAgICAgICAgICAiTS9kL3l5IGg6bW0gYSJ9OyAKKyAgICAgICAgaW50IERBVEFfbGVuZ3RoID0gREFUQS5sZW5ndGg7CisgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgREFUQV9sZW5ndGg7IGkgKz0gMykgeworICAgICAgICAgICAgRGF0ZUZvcm1hdCBmbXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChEQVRBW2kgKyAyXSwgTG9jYWxlLkVOR0xJU0gpOworICAgICAgICAgICAgZm10LnNldENhbGVuZGFyKGdyZWVud2ljaGNhbGVuZGFyKTsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBmbXQuZm9ybWF0KGdyZWVud2ljaGRhdGUpOworICAgICAgICAgICAgbG9nbG4oREFUQVtpXSArIHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5lcXVhbHMoREFUQVtpICsgMV0pKQorICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCAiICsgREFUQVtpICsgMV0gKyAiLCBnb3QgIiArIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgLy99CisgICAgICAgIC8vZmluYWxseSB7CisgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQoc2F2ZURlZmF1bHQpOworICAgICAgICAvL30KKyAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgZm9ybWF0dGluZyBvZiBkYXRlcyBpbiBkaWZmZXJlbnQgbG9jYWxlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0TG9jYWxlRGF0ZUZvcm1hdCgpIHsKKyAgICAKKyAgICAgICAgRGF0ZSB0ZXN0RGF0ZSA9IG5ldyBEYXRlKDg3NDMwNjgwMDAwMGwpOyAvL01vbiBTZXAgMTUgMDA6MDA6MDAgUERUIDE5OTcKKyAgICAgICAgRGF0ZUZvcm1hdCBkZkZyZW5jaCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIERhdGVGb3JtYXQuRlVMTCwgTG9jYWxlLkZSRU5DSCk7CisgICAgICAgIERhdGVGb3JtYXQgZGZVUyA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIERhdGVGb3JtYXQuRlVMTCwgTG9jYWxlLlVTKTsKKyAgICAgICAgLy9TZXQgVGltZVpvbmUgPSBQRFQKKyAgICAgICAgVGltZVpvbmUgdHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisgICAgICAgICgoU2ltcGxlVGltZVpvbmUpdHopLnNldERTVFNhdmluZ3MoMzYwMDAwMCk7CisgICAgICAgIGRmRnJlbmNoLnNldFRpbWVab25lKHR6KTsKKyAgICAgICAgZGZVUy5zZXRUaW1lWm9uZSh0eik7CisgICAgICAgIFN0cmluZyBleHBlY3RlZEZSRU5DSF9KREsxMiA9ICJsdW5kaSAxNSBzZXB0ZW1icmUgMTk5NyAwMCBoIDAwIEdNVC0wNzowMCI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZEZSRU5DSCA9ICJsdW5kaSAxNSBzZXB0ZW1icmUgMTk5NyAwMCBoIDAwIFBEVCI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZFVTID0gIk1vbmRheSwgU2VwdGVtYmVyIDE1LCAxOTk3IDEyOjAwOjAwIEFNIFBEVCI7CisgICAgICAgIGxvZ2xuKCJEYXRlIHNldCB0byA6ICIgKyB0ZXN0RGF0ZSk7CisgICAgICAgIFN0cmluZyBvdXQgPSBkZkZyZW5jaC5mb3JtYXQodGVzdERhdGUpOworICAgICAgICBsb2dsbigiRGF0ZSBGb3JtYXRlZCB3aXRoIEZyZW5jaCBMb2NhbGUgIiArIG91dCk7CisgICAgICAgIC8vZml4IHRoZSBqZGsgcmVzb3VyY2VzIGRpZmZlcmVuY2VzIGJldHdlZW4gamRrIDEuMiBhbmQgamRrIDEuMworCQkvKiBvdXIgb3duIGRhdGEgb25seSBoYXMgR01ULXh4eHggaW5mb3JtYXRpb24gaGVyZQorICAgICAgICBTdHJpbmcgamF2YVZlcnNpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpOworICAgICAgICBpZiAoamF2YVZlcnNpb24uc3RhcnRzV2l0aCgiMS4yIikpIHsKKyAgICAgICAgICAgIGlmICghb3V0LmVxdWFscyhleHBlY3RlZEZSRU5DSF9KREsxMikpCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBleHBlY3RlZEZSRU5DSF9KREsxMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW91dC5lcXVhbHMoZXhwZWN0ZWRGUkVOQ0gpKQorICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCAiICsgZXhwZWN0ZWRGUkVOQ0gpOworICAgICAgICB9CisJCSovCisJCWlmICghb3V0LmVxdWFscyhleHBlY3RlZEZSRU5DSF9KREsxMikpCisJCQllcnJsbigiRkFJTDogRXhwZWN0ZWQgIiArIGV4cGVjdGVkRlJFTkNIX0pESzEyKTsKKyAgICAgICAgb3V0ID0gZGZVUy5mb3JtYXQodGVzdERhdGUpOworICAgICAgICBsb2dsbigiRGF0ZSBGb3JtYXRlZCB3aXRoIFVTIExvY2FsZSAiICsgb3V0KTsKKyAgICAgICAgaWYgKCFvdXQuZXF1YWxzKGV4cGVjdGVkVVMpKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBleHBlY3RlZFVTKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IERhdGVGb3JtYXQoQ2FsZW5kYXIpIEFQSQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3REYXRlRm9ybWF0Q2FsZW5kYXIoKSB7CisgICAgICAgIERhdGVGb3JtYXQgZGF0ZT1udWxsLCB0aW1lPW51bGwsIGZ1bGw9bnVsbDsKKyAgICAgICAgQ2FsZW5kYXIgY2FsPW51bGw7CisgICAgICAgIFBhcnNlUG9zaXRpb24gcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIFN0cmluZyBzdHI7CisgICAgICAgIERhdGUgd2hlbjsKKworICAgICAgICAvKiBDcmVhdGUgYSBmb3JtYXR0ZXIgZm9yIGRhdGUgZmllbGRzLiAqLworICAgICAgICBkYXRlID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoRGF0ZUZvcm1hdC5TSE9SVCwgTG9jYWxlLlVTKTsKKyAgICAgICAgaWYgKGRhdGUgPT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdldERhdGVJbnN0YW5jZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENyZWF0ZSBhIGZvcm1hdHRlciBmb3IgdGltZSBmaWVsZHMuICovCisgICAgICAgIHRpbWUgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LlNIT1JULCBMb2NhbGUuVVMpOworICAgICAgICBpZiAodGltZSA9PSBudWxsKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogZ2V0VGltZUluc3RhbmNlIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLyogQ3JlYXRlIGEgZnVsbCBmb3JtYXQgZm9yIG91dHB1dCAqLworICAgICAgICBmdWxsID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgRGF0ZUZvcm1hdC5GVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsZS5VUyk7CisgICAgICAgIGlmIChmdWxsID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBnZXRJbnN0YW5jZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENyZWF0ZSBhIGNhbGVuZGFyICovCisgICAgICAgIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGlmIChjYWwgPT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IENhbGVuZGFyLmdldEluc3RhbmNlIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLyogUGFyc2UgdGhlIGRhdGUgKi8KKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIHN0ciA9ICI0LzUvMjAwMSI7CisgICAgICAgIHBvcy5zZXRJbmRleCgwKTsKKyAgICAgICAgZGF0ZS5wYXJzZShzdHIsIGNhbCwgcG9zKTsKKyAgICAgICAgaWYgKHBvcy5nZXRJbmRleCgpICE9IHN0ci5sZW5ndGgoKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IERhdGVGb3JtYXQucGFyc2UoNC81LzIwMDEpIGZhaWxlZCBhdCAiICsKKyAgICAgICAgICAgICAgICAgIHBvcy5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFBhcnNlIHRoZSB0aW1lICovCisgICAgICAgIHN0ciA9ICI1OjQ1IFBNIjsKKyAgICAgICAgcG9zLnNldEluZGV4KDApOworICAgICAgICB0aW1lLnBhcnNlKHN0ciwgY2FsLCBwb3MpOworICAgICAgICBpZiAocG9zLmdldEluZGV4KCkgIT0gc3RyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogRGF0ZUZvcm1hdC5wYXJzZSgxNzo0NSkgZmFpbGVkIGF0ICIgKworICAgICAgICAgICAgICAgICAgcG9zLmdldEluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIC8qIENoZWNrIHJlc3VsdCAqLworICAgICAgICB3aGVuID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgc3RyID0gZnVsbC5mb3JtYXQod2hlbik7CisgICAgICAgIC8vIFRodXJzZGF5LCBBcHJpbCA1LCAyMDAxIDU6NDU6MDAgUE0gUERUIDk4NjUxNzkwMDAwMAorICAgICAgICBpZiAod2hlbi5nZXRUaW1lKCkgPT0gOTg2NTE3OTAwMDAwLjApIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPazogUGFyc2VkIHJlc3VsdDogIiArIHN0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogUGFyc2VkIHJlc3VsdDogIiArIHN0ciArICIsIGV4cCA0LzUvMjAwMSA1OjQ1IFBNIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IERhdGVGb3JtYXQncyBwYXJzaW5nIG9mIHNwYWNlIGNoYXJhY3RlcnMuICBTZWUgaml0dGVyYnVnIDE5MTYuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFNwYWNlUGFyc2luZygpIHsKKworICAgICAgICBTdHJpbmcgUEFSU0VfRkFJTFVSRSA9ICJwYXJzZSBmYWlsdXJlIjsKKyAgICAgICAgU3RyaW5nIERBVEFbXSA9IHsKKyAgICAgICAgICAgIC8vIHBhdHRlcm4sIGlucHV0LCBleHBleHRlZCBvdXRwdXQgKGluIHF1b3RlcykKKyAgICAgICAgICAgICJNTU1NIGQgeXkiLCAiIDA0IDA1IDA2IiwgUEFSU0VfRkFJTFVSRSwgLy8gTU1NTSB3YW50cyBBcHIvQXByaWwKKyAgICAgICAgICAgICJNTU1NIGQgeXkiLCAiMDQgMDUgMDYiLCBQQVJTRV9GQUlMVVJFLAorICAgICAgICAgICAgIk1NIGQgeXkiLCAiIDA0IDA1IDA2IiwgIlwiMjAwNiAwNCAwNVwiIiwKKyAgICAgICAgICAgICJNTSBkIHl5IiwgIjA0IDA1IDA2IiwgIlwiMjAwNiAwNCAwNVwiIiwKKyAgICAgICAgICAgICJNTU1NIGQgeXkiLCAiIEFwciAwNSAwNiIsICJcIjIwMDYgMDQgMDVcIiIsCisgICAgICAgICAgICAiTU1NTSBkIHl5IiwgIkFwciAwNSAwNiIsICJcIjIwMDYgMDQgMDVcIiIsCisgICAgICAgIH07CisKKyAgICAgICAgTG9jYWxlIGVuID0gbmV3IExvY2FsZSgiZW4iLCAiIiwgIiIpOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHNkZk9iaiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCIiLCBlbik7CisKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0zKSB7CisgICAgICAgICAgICBzZGZPYmouYXBwbHlQYXR0ZXJuKERBVEFbaV0pOworICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwcCA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICAgICAgRGF0ZSB1ZERhdGUgPSBzZGZPYmoucGFyc2UoREFUQVtpKzFdLCBwcCk7CisgICAgICAgICAgICBTdHJpbmcgb3V0cHV0OworICAgICAgICAgICAgaWYgKHBwLmdldEVycm9ySW5kZXgoKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0dGVyID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXkgTU0gZGQiLCBlbik7CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gIlwiIiArIGZvcm1hdHRlci5mb3JtYXQodWREYXRlKSArICJcIiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG91dHB1dCA9IFBBUlNFX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgZXhwID0gREFUQVtpKzJdOworICAgICAgICAgICAgaWYgKG91dHB1dC5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogUGFyc2Ugb2YgXCIiICsgREFUQVtpKzFdICsgIlwiIHdpdGggXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICBEQVRBW2ldICsgIlwiID0+ICIgKyBvdXRwdXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogUGFyc2Ugb2YgXCIiICsgREFUQVtpKzFdICsgIlwiIHdpdGggXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICBEQVRBW2ldICsgIlwiID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArICIsIGV4cGVjdGVkICIgKyBleHApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERhdGVGb3JtYXQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWM2MDAwNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0LmphdmEKQEAgLTAsMCArMSwyNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDgvMDEgMjA6Mjc6MjEgJCAKKyAqICRSZXZpc2lvbjogMS41ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSkRLIDEuNGIxIDogamF2YS50ZXh0LkZvcm1hdC5JbnRsVGVzdERhdGVGb3JtYXQKKyAqIFNvdXJjZSBGaWxlOiBqYXZhL3RleHQvZm9ybWF0L0ludGxUZXN0RGF0ZUZvcm1hdC5qYXZhCisgKiovCisKKy8qCisgICAgQHRlc3QgMS40IDk4LzAzLzA2CisgICAgQHN1bW1hcnkgdGVzdCBJbnRlcm5hdGlvbmFsIERhdGUgRm9ybWF0CisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0OworCitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworcHVibGljIGNsYXNzIEludGxUZXN0RGF0ZUZvcm1hdCBleHRlbmRzIGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrIHsKKyAgICAvLyBWYWx1ZXMgaW4gbWlsbGlzZWNvbmRzICg9PSBEYXRlKQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgT05FU0VDT05EID0gMTAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE9ORU1JTlVURSA9IDYwICogT05FU0VDT05EOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgT05FSE9VUiA9IDYwICogT05FTUlOVVRFOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgT05FREFZID0gMjQgKiBPTkVIT1VSOworICAgIC8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE9ORVlFQVIgPSAzNjUuMjUgKiBPTkVEQVk7IC8vIEFwcHJveGltYXRlIC8vVGhlIHZhcmlhYmxlIGlzIG5ldmVyIHVzZWQKKworICAgIC8vIEVNb2RlcworICAgIC8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBHRU5FUklDID0gMDsKKyAgICAvL3ByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgVElNRSA9IEdFTkVSSUMgKyAxOyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisgICAgLy9wcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIERBVEUgPSBUSU1FICsgMTsgLy9UaGUgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZAorICAgIC8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBEQVRFX1RJTUUgPSBEQVRFICsgMTsgLy9UaGUgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZAorCisgICAgcHJpdmF0ZSBEYXRlRm9ybWF0IGZGb3JtYXQgPSBEYXRlRm9ybWF0LmdldEluc3RhbmNlKCk7CisgICAgcHJpdmF0ZSBTdHJpbmcgZlRlc3ROYW1lID0gbmV3IFN0cmluZygiZ2V0SW5zdGFuY2UiKTsKKyAgICBwcml2YXRlIGludCBmTGltaXQgPSAzOyAvLyBIb3cgbWFueSBpdGVyYXRpb25zIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIGNvbnZlcmdlbmNlCisgICAgCisgICAgcHVibGljIEludGxUZXN0RGF0ZUZvcm1hdCgpIHsKKyAgICAgICAgLy9Db25zdHJ1Y3R1cmUKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBJbnRsVGVzdERhdGVGb3JtYXQoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdExvY2FsZSgpIHsKKyAgICAgICAgbG9jYWxlVGVzdChMb2NhbGUuZ2V0RGVmYXVsdCgpLCAiRGVmYXVsdCBMb2NhbGUiKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRlc3QgZG9lcyByb3VuZC10cmlwIHRlc3RpbmcgKGZvcm1hdCAtPiBwYXJzZSAtPiBmb3JtYXQgLT4gcGFyc2UgLT4gZXRjLikgb2YgRGF0ZUZvcm1hdC4KKyAgICBwdWJsaWMgdm9pZCBsb2NhbGVUZXN0KGZpbmFsIExvY2FsZSBsb2NhbGUsIGZpbmFsIFN0cmluZyBsb2NhbGVOYW1lKSB7CisgICAgICAgIGludCB0aW1lU3R5bGUsIGRhdGVTdHlsZTsKKworICAgICAgICAvLyBGb3IgcGF0dGVybnMgaW5jbHVkaW5nIG9ubHkgdGltZSBpbmZvcm1hdGlvbiBhbmQgYSB0aW1lem9uZSwgaXQgbWF5IHRha2UKKyAgICAgICAgLy8gdXAgdG8gdGhyZWUgaXRlcmF0aW9ucywgc2luY2UgdGhlIHRpbWV6b25lIG1heSBzaGlmdCBhcyB0aGUgeWVhciBudW1iZXIKKyAgICAgICAgLy8gaXMgZGV0ZXJtaW5lZC4gIEZvciBvdGhlciBwYXR0ZXJucywgMiBpdGVyYXRpb25zIHNob3VsZCBzdWZmaWNlLgorICAgICAgICBmTGltaXQgPSAzOworCisgICAgICAgIGZvcih0aW1lU3R5bGUgPSAwOyB0aW1lU3R5bGUgPCA0OyB0aW1lU3R5bGUrKykgeworICAgICAgICAgICAgZlRlc3ROYW1lID0gbmV3IFN0cmluZygiVGltZSB0ZXN0ICIgKyB0aW1lU3R5bGUgKyAiICgiICsgbG9jYWxlTmFtZSArICIpIik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGZGb3JtYXQgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZSh0aW1lU3R5bGUsIGxvY2FsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaChTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogbG9jYWxlVGVzdCB0aW1lIGdldFRpbWVJbnN0YW5jZSBleGNlcHRpb24iKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVGVzdEZvcm1hdCgpOworICAgICAgICB9CisKKyAgICAgICAgZkxpbWl0ID0gMjsKKworICAgICAgICBmb3IoZGF0ZVN0eWxlID0gMDsgZGF0ZVN0eWxlIDwgNDsgZGF0ZVN0eWxlKyspIHsKKyAgICAgICAgICAgIGZUZXN0TmFtZSA9IG5ldyBTdHJpbmcoIkRhdGUgdGVzdCAiICsgZGF0ZVN0eWxlICsgIiAoIiArIGxvY2FsZU5hbWUgKyAiKSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBmRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoZGF0ZVN0eWxlLCBsb2NhbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGxvY2FsZVRlc3QgZGF0ZSBnZXRUaW1lSW5zdGFuY2UgZXhjZXB0aW9uIik7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRlc3RGb3JtYXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvcihkYXRlU3R5bGUgPSAwOyBkYXRlU3R5bGUgPCA0OyBkYXRlU3R5bGUrKykgeworICAgICAgICAgICAgZm9yKHRpbWVTdHlsZSA9IDA7IHRpbWVTdHlsZSA8IDQ7IHRpbWVTdHlsZSsrKSB7CisgICAgICAgICAgICAgICAgZlRlc3ROYW1lID0gbmV3IFN0cmluZygiRGF0ZVRpbWUgdGVzdCAiICsgZGF0ZVN0eWxlICsgIi8iICsgdGltZVN0eWxlICsgIiAoIiArIGxvY2FsZU5hbWUgKyAiKSIpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGZGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoZGF0ZVN0eWxlLCB0aW1lU3R5bGUsIGxvY2FsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogbG9jYWxlVGVzdCBkYXRlL3RpbWUgZ2V0RGF0ZVRpbWVJbnN0YW5jZSBleGNlcHRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVGVzdEZvcm1hdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEZvcm1hdCgpIHsKKyAgICAgICAgaWYgKGZGb3JtYXQgPT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IERhdGVGb3JtYXQgY3JlYXRpb24gZmFpbGVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gICAgICAgIGxvZ2xuKCJUZXN0Rm9ybWF0OiAiICsgZlRlc3ROYW1lKTsKKyAgICAgICAgRGF0ZSBub3cgPSBuZXcgRGF0ZSgpOworICAgICAgICB0cnlEYXRlKG5ldyBEYXRlKDApKTsKKyAgICAgICAgdHJ5RGF0ZShuZXcgRGF0ZSgobG9uZykgMTI3ODE2MTgwMTc3OC4wKSk7CisgICAgICAgIHRyeURhdGUobm93KTsKKyAgICAgICAgLy8gU2hpZnQgNiBtb250aHMgaW50byB0aGUgZnV0dXJlLCBBVCBUSEUgU0FNRSBUSU1FIE9GIERBWS4KKyAgICAgICAgLy8gVGhpcyB3aWxsIHRlc3QgdGhlIERTVCBoYW5kbGluZy4KKyAgICAgICAgdHJ5RGF0ZShuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgNiozMCpPTkVEQVkpKTsKKworICAgICAgICBEYXRlIGxpbWl0ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSAqIDEwKTsgLy8gQXJiaXRyYXJ5IGxpbWl0CisgICAgICAgIGZvciAoaW50IGk9MDsgaTwyOyArK2kpCisgICAgICAgICAgICAvLyAgICAgICAgICAgIHRyeURhdGUobmV3IERhdGUoZmxvb3IocmFuZERvdWJsZSgpICogbGltaXQpKSk7CisgICAgICAgICAgICB0cnlEYXRlKG5ldyBEYXRlKChsb25nKSAocmFuZERvdWJsZSgpICogbGltaXQuZ2V0VGltZSgpKSkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkZXNjcmliZVRlc3QoKSB7CisgICAgICAgIGlmIChmRm9ybWF0ID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBubyBEYXRlRm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBBc3N1bWUgaXQncyBhIFNpbXBsZURhdGVGb3JtYXQgYW5kIGdldCBzb21lIGluZm8KKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzID0gKFNpbXBsZURhdGVGb3JtYXQpIGZGb3JtYXQ7CisgICAgICAgIGxvZ2xuKGZUZXN0TmFtZSArICIgUGF0dGVybiAiICsgcy50b1BhdHRlcm4oKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRyeURhdGUoRGF0ZSB0aGVEYXRlKSB7CisgICAgICAgIGZpbmFsIGludCBERVBUSCA9IDEwOworICAgICAgICBEYXRlW10gZGF0ZSA9IG5ldyBEYXRlW0RFUFRIXTsKKyAgICAgICAgU3RyaW5nQnVmZmVyW10gc3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcltERVBUSF07CisKKyAgICAgICAgaW50IGRhdGVNYXRjaCA9IDA7CisgICAgICAgIGludCBzdHJpbmdNYXRjaCA9IDA7CisgICAgICAgIGJvb2xlYW4gZHVtcCA9IGZhbHNlOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpPTA7IGk8REVQVEg7ICsraSkgc3RyaW5nW2ldID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGk9MDsgaTxERVBUSDsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSA9PSAwKSBkYXRlW2ldID0gdGhlRGF0ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGVbaV0gPSBmRm9ybWF0LnBhcnNlKHN0cmluZ1tpLTFdLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBkZXNjcmliZVRlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIioqKioqKioqKiogRkFJTDogUGFyc2Ugb2YgIiArIHN0cmluZ1tpLTFdICsgIiBmYWlsZWQuIik7CisgICAgICAgICAgICAgICAgICAgIGR1bXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIHBvc2l0aW9uID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7CisgICAgICAgICAgICBmRm9ybWF0LmZvcm1hdChkYXRlW2ldLCBzdHJpbmdbaV0sIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChkYXRlTWF0Y2ggPT0gMCAmJiBkYXRlW2ldID09IGRhdGVbaS0xXSkgZGF0ZU1hdGNoID0gaTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChkYXRlTWF0Y2ggPiAwICYmIGRhdGVbaV0gIT0gZGF0ZVtpLTFdKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlVGVzdCgpOworICAgICAgICAgICAgICAgICAgICBlcnJsbigiKioqKioqKioqKiBGQUlMOiBEYXRlIG1pc21hdGNoIGFmdGVyIG1hdGNoLiIpOworICAgICAgICAgICAgICAgICAgICBkdW1wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHJpbmdNYXRjaCA9PSAwICYmIHN0cmluZ1tpXSA9PSBzdHJpbmdbaS0xXSkgc3RyaW5nTWF0Y2ggPSBpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZ01hdGNoID4gMCAmJiBzdHJpbmdbaV0gIT0gc3RyaW5nW2ktMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCIqKioqKioqKioqIEZBSUw6IFN0cmluZyBtaXNtYXRjaCBhZnRlciBtYXRjaC4iKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkYXRlTWF0Y2ggPiAwICYmIHN0cmluZ01hdGNoID4gMCkgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPT0gREVQVEgpIC0taTsKKworICAgICAgICBpZiAoc3RyaW5nTWF0Y2ggPiBmTGltaXQgfHwgZGF0ZU1hdGNoID4gZkxpbWl0KSB7CisgICAgICAgICAgICBkZXNjcmliZVRlc3QoKTsKKyAgICAgICAgICAgIGVycmxuKCIqKioqKioqKioqIEZBSUw6IE5vIHN0cmluZyBhbmQvb3IgZGF0ZSBtYXRjaCB3aXRoaW4gIiArIGZMaW1pdCArICIgaXRlcmF0aW9ucy4iKTsKKyAgICAgICAgICAgIGR1bXAgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGR1bXApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGs9MDsgazw9aTsgKytrKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIiIgKyBrICsgIjogIiArIGRhdGVba10gKyAiIEY+ICIgKyBzdHJpbmdba10gKyAiIFA+ICIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIGEgcmFuZG9tIGRvdWJsZSBmcm9tIDAuMDEgdG8gMSwgaW5jbHVzaXZlCisgICAgcHJpdmF0ZSBkb3VibGUgcmFuZERvdWJsZSgpIHsKKyAgICAgICAgLy8gQXNzdW1lIDgtYml0IChvciBsYXJnZXIpIHJhbmQgdmFsdWVzLiAgQWxzbyBhc3N1bWUKKyAgICAgICAgLy8gdGhhdCB0aGUgc3lzdGVtIHJhbmQoKSBmdW5jdGlvbiBpcyB2ZXJ5IHBvb3IsIHdoaWNoIGl0IGFsd2F5cyBpcy4KKyAgICAgICAgLy8gICAgICAgIGRvdWJsZSBkOworICAgICAgICAvLyAgICAgICAgaW50IGk7CisgICAgICAgIC8vICAgICAgICBkbyB7CisgICAgICAgIC8vICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBzaXplb2YoZG91YmxlKTsgKytpKQorICAgICAgICAvLyAgICAgICAgICAgIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgY2hhciBwb2tlID0gKGNoYXIqKSZkOworICAgICAgICAvLyAgICAgICAgICAgICAgICBwb2tlW2ldID0gKHJhbmQoKSAmIDB4RkYpOworICAgICAgICAvLyAgICAgICAgICAgIH0KKyAgICAgICAgLy8gICAgICAgIH0gd2hpbGUgKFRQbGF0Zm9ybVV0aWxpdGllcy5pc05hTihkKSB8fCBUUGxhdGZvcm1VdGlsaXRpZXMuaXNJbmZpbml0ZShkKSk7CisKKyAgICAgICAgLy8gICAgICAgIGlmIChkIDwgMC4wKSBkID0gLWQ7CisgICAgICAgIC8vICAgICAgICBpZiAoZCA+IDAuMCkKKyAgICAgICAgLy8gICAgICAgIHsKKyAgICAgICAgLy8gICAgICAgICAgICBkb3VibGUgZSA9IGZsb29yKGxvZzEwKGQpKTsKKyAgICAgICAgLy8gICAgICAgICAgICBpZiAoZSA8IC0yLjApIGQgKj0gcG93KDEwLjAsIC1lLTIpOworICAgICAgICAvLyAgICAgICAgICAgIGVsc2UgaWYgKGUgPiAtMS4wKSBkIC89IHBvdygxMC4wLCBlKzEpOworICAgICAgICAvLyAgICAgICAgfQorICAgICAgICAvLyAgICAgICAgcmV0dXJuIGQ7CisgICAgICAgIFJhbmRvbSByYW5kID0gbmV3IFJhbmRvbSgpOworICAgICAgICByZXR1cm4gcmFuZC5uZXh0RG91YmxlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEF2YWlsYWJsZUxvY2FsZXMoKSB7CisgICAgICAgIGZpbmFsIExvY2FsZVtdIGxvY2FsZXMgPSBEYXRlRm9ybWF0LmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgbG9uZyBjb3VudCA9IGxvY2FsZXMubGVuZ3RoOworICAgICAgICBsb2dsbigiIiArIGNvdW50ICsgIiBhdmFpbGFibGUgbG9jYWxlcyIpOworICAgICAgICBpZiAobG9jYWxlcyAhPSBudWxsICAmJiAgY291bnQgIT0gMCkgeworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGFsbCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGkhPTApIGFsbC5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICAgICAgYWxsLmFwcGVuZChsb2NhbGVzW2ldLmdldERpc3BsYXlOYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nbG4oYWxsLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgZXJybG4oIioqKioqKioqKiogRkFJTDogWmVybyBhdmFpbGFibGUgbG9jYWxlcyBvciBudWxsIGFycmF5IHBvaW50ZXIiKTsKKyAgICB9CisKKyAgICAvKiBUaGlzIHRlc3QgaXMgdG9vIHNsb3c7IHdlIGRpc2FibGUgaXQgZm9yIG5vdworICAgIHB1YmxpYyB2b2lkIFRlc3RNb25zdGVyKCkgeworICAgICAgICBmaW5hbCBMb2NhbGVbXSBsb2NhbGVzID0gRGF0ZUZvcm1hdC5nZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgIGxvbmcgY291bnQgPSBsb2NhbGVzLmxlbmd0aDsKKyAgICAgICAgaWYgKGxvY2FsZXMgIT0gbnVsbCAgJiYgIGNvdW50ICE9IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBsb2NhbGVzW2ldLmdldERpc3BsYXlOYW1lKCk7CisgICAgICAgICAgICAgICAgbG9nbG4oIlRlc3RpbmcgIiArIG5hbWUgKyAiLi4uIik7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxlVGVzdChsb2NhbGVzW2ldLCBuYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IFRlc3RNb25zdGVyIGxvY2FsZVRlc3QgZXhjZXB0aW9uIiArIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAqLworfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERhdGVGb3JtYXRBUEkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0QVBJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDgyYWJkYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0QVBJLmphdmEKQEAgLTAsMCArMSwyMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERhdGVGb3JtYXRBUEkuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wMSAyMDoyNzoyMSAkIAorICogJFJldmlzaW9uOiAxLjYgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSkRLIDEuNGIxIDogamF2YS50ZXh0LkZvcm1hdC5JbnRsVGVzdERhdGVGb3JtYXRBUEkKKyAqIFNvdXJjZSBGaWxlOiBqYXZhL3RleHQvZm9ybWF0L0ludGxUZXN0RGF0ZUZvcm1hdEFQSS5qYXZhCisgKiovCisKKy8qCisgICAgQHRlc3QgMS40IDk4LzAzLzA2CisgICAgQHN1bW1hcnkgdGVzdCBJbnRlcm5hdGlvbmFsIERhdGUgRm9ybWF0IEFQSQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgSW50bFRlc3REYXRlRm9ybWF0QVBJIGV4dGVuZHMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2sKK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEludGxUZXN0RGF0ZUZvcm1hdEFQSSgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IHRoYXQgdGhlIGVxdWFscyBtZXRob2Qgd29ya3MgY29ycmVjdGx5LgorICAgIHB1YmxpYyB2b2lkIFRlc3RFcXVhbHMoKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIHR3byBvYmplY3RzIGF0IGRpZmZlcmVudCBzeXN0ZW0gdGltZXMKKyAgICAgICAgRGF0ZUZvcm1hdCBhID0gRGF0ZUZvcm1hdC5nZXRJbnN0YW5jZSgpOworICAgICAgICBEYXRlIHN0YXJ0ID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBjaGFuZ2VkIHRvIHJlbW92ZSBjb21waWxlciB3YXJuaW5ncy4KKyAgICAgICAgICAgIGlmICghc3RhcnQuZXF1YWxzKENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBXYWl0IGZvciB0aW1lIHRvIGNoYW5nZQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIERhdGVGb3JtYXQgYiA9IERhdGVGb3JtYXQuZ2V0SW5zdGFuY2UoKTsKKworICAgICAgICBpZiAoIShhLmVxdWFscyhiKSkpCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRGF0ZUZvcm1hdCBvYmplY3RzIGNyZWF0ZWQgYXQgZGlmZmVyZW50IHRpbWVzIGFyZSB1bmVxdWFsLiIpOworCisgICAgICAgIC8vIFdoeSBoYXMgdGhpcyB0ZXN0IGJlZW4gZGlzYWJsZWQ/Pz8gLSBhbGl1CisvLyAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBTaW1wbGVEYXRlRm9ybWF0KQorLy8gICAgICAgIHsKKy8vICAgICAgICAgICAgLy9kb3VibGUgT05FX1lFQVIgPSAzNjUqMjQqNjAqNjAqMTAwMC4wOyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisvLyAgICAgICAgICAgIHRyeSB7CisvLyAgICAgICAgICAgICAgICAoKFNpbXBsZURhdGVGb3JtYXQpYikuc2V0VHdvRGlnaXRTdGFydERhdGUoc3RhcnQuZ2V0VGltZSgpICsgNTAqT05FX1lFQVIpOworLy8gICAgICAgICAgICAgICAgaWYgKGEuZXF1YWxzKGIpKQorLy8gICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBEYXRlRm9ybWF0IG9iamVjdHMgd2l0aCBkaWZmZXJlbnQgdHdvIGRpZ2l0IHN0YXJ0IGRhdGVzIGFyZSBlcXVhbC4iKTsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKy8vICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBzZXRUd29EaWdpdFN0YXJ0RGF0ZSBmYWlsZWQuIik7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyB2YXJpb3VzIGdlbmVyaWMgQVBJIG1ldGhvZHMgaW4gRGF0ZUZvcm1hdCB0byBhY2hpZXZlIDEwMCUgQVBJIGNvdmVyYWdlLgorICAgIHB1YmxpYyB2b2lkIFRlc3RBUEkoKQorICAgIHsKKyAgICAgICAgbG9nbG4oIkRhdGVGb3JtYXQgQVBJIHRlc3QtLS0iKTsgbG9nbG4oIiIpOworICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChMb2NhbGUuRU5HTElTSCk7CisKKworICAgICAgICAvLyA9PT09PT09IFRlc3QgY29uc3RydWN0b3JzCisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgRGF0ZUZvcm1hdCBjb25zdHJ1Y3RvcnMiKTsKKworICAgICAgICBEYXRlRm9ybWF0IGRlZiA9IERhdGVGb3JtYXQuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgRGF0ZUZvcm1hdCBmciA9IERhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgTG9jYWxlLkZSRU5DSCk7CisgICAgICAgIERhdGVGb3JtYXQgaXQgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0Lk1FRElVTSwgTG9jYWxlLklUQUxJQU4pOworICAgICAgICBEYXRlRm9ybWF0IGRlID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuTE9ORywgRGF0ZUZvcm1hdC5MT05HLCBMb2NhbGUuR0VSTUFOKTsKKworICAgICAgICAvLyA9PT09PT09IFRlc3QgZXF1YWxpdHkKKworICAgICAgICBsb2dsbigiVGVzdGluZyBlcXVhbGl0eSBvcGVyYXRvciIpOworCisgICAgICAgIGlmKCBmci5lcXVhbHMoaXQpICkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBlcXVhbHMgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICAvLyA9PT09PT09IFRlc3QgdmFyaW91cyBmb3JtYXQoKSBtZXRob2RzCisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdmFyaW91cyBmb3JtYXQoKSBtZXRob2RzIik7CisKKyAgICAgICAgRGF0ZSBkID0gbmV3IERhdGUoKGxvbmcpODM3MDM5OTI4MDQ2LjApOworCisgICAgICAgIFN0cmluZ0J1ZmZlciByZXMxID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzMiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nIHJlczMgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zMSA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvczIgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKworICAgICAgICByZXMxID0gZnIuZm9ybWF0KGQsIHJlczEsIHBvczEpOworICAgICAgICBsb2dsbigiIiArIGQuZ2V0VGltZSgpICsgIiBmb3JtYXR0ZWQgdG8gIiArIHJlczEpOworCisgICAgICAgIHJlczIgPSBpdC5mb3JtYXQoZCwgcmVzMiwgcG9zMik7CisgICAgICAgIGxvZ2xuKCIiICsgZC5nZXRUaW1lKCkgKyAiIGZvcm1hdHRlZCB0byAiICsgcmVzMik7CisKKyAgICAgICAgcmVzMyA9IGRlLmZvcm1hdChkKTsKKyAgICAgICAgbG9nbG4oIiIgKyBkLmdldFRpbWUoKSArICIgZm9ybWF0dGVkIHRvICIgKyByZXMzKTsKKworICAgICAgICAvLyA9PT09PT09IFRlc3QgcGFyc2UoKQorCisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHBhcnNlKCkiKTsKKworICAgICAgICBTdHJpbmcgdGV4dCA9IG5ldyBTdHJpbmcoIjAyLzAzLzc2IDI6NTAgQU0sIENTVCIpOworICAgICAgICBPYmplY3QgcmVzdWx0MSA9IG5ldyBEYXRlKCk7CisgICAgICAgIERhdGUgcmVzdWx0MiA9IG5ldyBEYXRlKCk7CisgICAgICAgIERhdGUgcmVzdWx0MyA9IG5ldyBEYXRlKCk7CisgICAgICAgIFBhcnNlUG9zaXRpb24gcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIFBhcnNlUG9zaXRpb24gcG9zMDEgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKworICAgICAgICByZXN1bHQxID0gZGVmLnBhcnNlT2JqZWN0KHRleHQsIHBvcyk7CisgICAgICAgIGlmIChyZXN1bHQxID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogcGFyc2VPYmplY3QoKSBmYWlsZWQgZm9yICIgKyB0ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbih0ZXh0ICsgIiBwYXJzZWQgaW50byAiICsgKChEYXRlKXJlc3VsdDEpLmdldFRpbWUoKSk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdDIgPSBkZWYucGFyc2UodGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogcGFyc2UoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbih0ZXh0ICsgIiBwYXJzZWQgaW50byAiICsgcmVzdWx0Mi5nZXRUaW1lKCkpOworCisgICAgICAgIHJlc3VsdDMgPSBkZWYucGFyc2UodGV4dCwgcG9zMDEpOworICAgICAgICBpZiAocmVzdWx0MyA9PSBudWxsKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHBhcnNlKCkgZmFpbGVkIGZvciAiICsgdGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4odGV4dCArICIgcGFyc2VkIGludG8gIiArIHJlc3VsdDMuZ2V0VGltZSgpKTsKKworCisgICAgICAgIC8vID09PT09PT0gVGVzdCBnZXR0ZXJzIGFuZCBzZXR0ZXJzCisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgZ2V0dGVycyBhbmQgc2V0dGVycyIpOworCisgICAgICAgIGZpbmFsIExvY2FsZVtdIGxvY2FsZXMgPSBEYXRlRm9ybWF0LmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgbG9uZyBjb3VudCA9IGxvY2FsZXMubGVuZ3RoOworICAgICAgICBsb2dsbigiR290ICIgKyBjb3VudCArICIgbG9jYWxlcyIgKTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICAgICAgbmFtZSA9IGxvY2FsZXNbaV0uZ2V0RGlzcGxheU5hbWUoKTsKKyAgICAgICAgICAgIGxvZ2xuKG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgZnIuc2V0TGVuaWVudChpdC5pc0xlbmllbnQoKSk7CisgICAgICAgIGlmKGZyLmlzTGVuaWVudCgpICE9IGl0LmlzTGVuaWVudCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldExlbmllbnQoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIENhbGVuZGFyIGNhbCA9IGRlZi5nZXRDYWxlbmRhcigpOworICAgICAgICBDYWxlbmRhciBuZXdDYWwgPSAoQ2FsZW5kYXIpIGNhbC5jbG9uZSgpOworICAgICAgICBkZS5zZXRDYWxlbmRhcihuZXdDYWwpOworICAgICAgICBpdC5zZXRDYWxlbmRhcihuZXdDYWwpOworICAgICAgICBpZiggISBkZS5nZXRDYWxlbmRhcigpLmVxdWFscyhpdC5nZXRDYWxlbmRhcigpKSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXQgQ2FsZW5kYXIoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIE51bWJlckZvcm1hdCBuZiA9IGRlZi5nZXROdW1iZXJGb3JtYXQoKTsKKyAgICAgICAgTnVtYmVyRm9ybWF0IG5ld05mID0gKE51bWJlckZvcm1hdCkgbmYuY2xvbmUoKTsKKyAgICAgICAgZGUuc2V0TnVtYmVyRm9ybWF0KG5ld05mKTsKKyAgICAgICAgaXQuc2V0TnVtYmVyRm9ybWF0KG5ld05mKTsKKyAgICAgICAgaWYoICEgZGUuZ2V0TnVtYmVyRm9ybWF0KCkuZXF1YWxzKGl0LmdldE51bWJlckZvcm1hdCgpKSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXQgTnVtYmVyRm9ybWF0KCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBUaW1lWm9uZSB0eiA9IGRlZi5nZXRUaW1lWm9uZSgpOworICAgICAgICBUaW1lWm9uZSBuZXdUeiA9IChUaW1lWm9uZSkgdHouY2xvbmUoKTsKKyAgICAgICAgZGUuc2V0VGltZVpvbmUobmV3VHopOworICAgICAgICBpdC5zZXRUaW1lWm9uZShuZXdUeik7CisgICAgICAgIGlmKCAhIGRlLmdldFRpbWVab25lKCkuZXF1YWxzKGl0LmdldFRpbWVab25lKCkpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldCBUaW1lWm9uZSgpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IGdldFN0YXRpY0NsYXNzSUQoKQorCisvLyAgICAgICAgbG9nbG4oIlRlc3RpbmcgaW5zdGFuY2VvZigpIik7CisKKy8vICAgICAgICB0cnkgeworLy8gICAgICAgICAgICBEYXRlRm9ybWF0IHRlc3QgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgpOworCisvLyAgICAgICAgICAgIGlmICghICh0ZXN0IGluc3RhbmNlb2YgU2ltcGxlRGF0ZUZvcm1hdCkpIHsKKy8vICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW5zdGFuY2VvZiBmYWlsZWQiKTsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKy8vICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKy8vICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBDb3VsZG4ndCBjcmVhdGUgYSBEYXRlRm9ybWF0Iik7CisvLyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0QVBJQy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERhdGVGb3JtYXRBUElDLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTdhZTk0MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0QVBJQy5qYXZhCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0QVBJQy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjEwICQgCisgKiAkUmV2aXNpb246IDEuMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYxLjguMSA6IGZvcm1hdCA6IEludGxUZXN0RGF0ZUZvcm1hdEFQSQorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvZHRmbWFwdHMuY3BwCisgKiovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0OworCitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CisKKy8qCisgKiBUaGlzIGlzIGFuIEFQSSB0ZXN0LCBub3QgYSB1bml0IHRlc3QuICBJdCBkb2Vzbid0IHRlc3QgdmVyeSBtYW55IGNhc2VzLCBhbmQgZG9lc24ndAorICogdHJ5IHRvIHRlc3QgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eS4gIEl0IGp1c3QgY2FsbHMgZWFjaCBmdW5jdGlvbiBpbiB0aGUgY2xhc3MgYW5kCisgKiB2ZXJpZmllcyB0aGF0IGl0IHdvcmtzIG9uIGEgYmFzaWMgbGV2ZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRsVGVzdERhdGVGb3JtYXRBUElDIGV4dGVuZHMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2sgeworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEludGxUZXN0RGF0ZUZvcm1hdEFQSUMoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgaGlkaW5nIG9mIHBhcnNlKCkgYW5kIGZvcm1hdCgpIEFQSXMgaW4gdGhlIEZvcm1hdCBoaWVyYXJjaHkuCisgICAgICogV2UgdGVzdCB0aGUgZW50aXJlIGhpZXJhcmNoeSwgZXZlbiB0aG91Z2ggdGhpcyB0ZXN0IGlzIGxvY2F0ZWQgaW4KKyAgICAgKiB0aGUgRGF0ZUZvcm1hdCBBUEkgdGVzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0TmFtZUhpZGluZygpIHsKKyAgICAKKyAgICAgICAgLy8gTi5CLjogVGhpcyB0ZXN0IHBhc3NlcyBpZiBpdCBDT01QSUxFUywgc2luY2UgaXQncyBhIHRlc3Qgb2YKKyAgICAgICAgLy8gY29tcGlsZS10aW1lIG5hbWUgaGlkaW5nLgorICAgIAorICAgICAgICBEYXRlIGRhdGVPYmogPSBuZXcgRGF0ZSgwKTsKKyAgICAgICAgTnVtYmVyIG51bU9iaiA9IG5ldyBEb3VibGUoMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1KTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHN0ckJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICBTdHJpbmcgc3RyOworICAgICAgICBGaWVsZFBvc2l0aW9uIGZwb3MgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgUGFyc2VQb3NpdGlvbiBwcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgCisgICAgICAgIC8vIERhdGVGb3JtYXQgY2FsbGluZyBGb3JtYXQgQVBJCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2xuKCJEYXRlRm9ybWF0Iik7CisgICAgICAgICAgICBEYXRlRm9ybWF0IGRhdGVGbXQgPSBEYXRlRm9ybWF0LmdldEluc3RhbmNlKCk7CisgICAgICAgICAgICBpZiAoZGF0ZUZtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3RyID0gZGF0ZUZtdC5mb3JtYXQoZGF0ZU9iaik7CisgICAgICAgICAgICAgICAgc3RyQnVmZmVyID0gZGF0ZUZtdC5mb3JtYXQoZGF0ZU9iaiwgc3RyQnVmZmVyLCBmcG9zKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IENhbid0IGNyZWF0ZSBEYXRlRm9ybWF0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gU2ltcGxlRGF0ZUZvcm1hdCBjYWxsaW5nIEZvcm1hdCAmIERhdGVGb3JtYXQgQVBJCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2xuKCJTaW1wbGVEYXRlRm9ybWF0Iik7CisgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHNkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCk7CisgICAgICAgICAgICAvLyBGb3JtYXQgQVBJCisgICAgICAgICAgICBzdHIgPSBzZGYuZm9ybWF0KGRhdGVPYmopOworICAgICAgICAgICAgc3RyQnVmZmVyID0gc2RmLmZvcm1hdChkYXRlT2JqLCBzdHJCdWZmZXIsIGZwb3MpOworICAgICAgICAgICAgLy8gRGF0ZUZvcm1hdCBBUEkKKyAgICAgICAgICAgIHN0ckJ1ZmZlciA9IHNkZi5mb3JtYXQobmV3IERhdGUoMCksIHN0ckJ1ZmZlciwgZnBvcyk7CisgICAgICAgICAgICBzdHIgPSBzZGYuZm9ybWF0KG5ldyBEYXRlKDApKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgc2RmLnBhcnNlKHN0cik7CisgICAgICAgICAgICAgICAgc2RmLnBhcnNlKHN0ciwgcHBvcyk7CisgICAgICAgICAgICB9IGNhdGNoIChqYXZhLnRleHQuUGFyc2VFeGNlcHRpb24gcGUpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIC8vIE51bWJlckZvcm1hdCBjYWxsaW5nIEZvcm1hdCBBUEkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nbG4oIk51bWJlckZvcm1hdCIpOworICAgICAgICAgICAgTnVtYmVyRm9ybWF0IGZtdCA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworICAgICAgICAgICAgaWYgKGZtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3RyID0gZm10LmZvcm1hdChudW1PYmopOworICAgICAgICAgICAgICAgIHN0ckJ1ZmZlciA9IGZtdC5mb3JtYXQobnVtT2JqLCBzdHJCdWZmZXIsIGZwb3MpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogQ2FuJ3QgY3JlYXRlIE51bWJlckZvcm1hdCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIC8vIERlY2ltYWxGb3JtYXQgY2FsbGluZyBGb3JtYXQgJiBOdW1iZXJGb3JtYXQgQVBJCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2xuKCJEZWNpbWFsRm9ybWF0Iik7CisgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGZtdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7CisgICAgICAgICAgICAvLyBGb3JtYXQgQVBJCisgICAgICAgICAgICBzdHIgPSBmbXQuZm9ybWF0KG51bU9iaik7CisgICAgICAgICAgICBzdHJCdWZmZXIgPSBmbXQuZm9ybWF0KG51bU9iaiwgc3RyQnVmZmVyLCBmcG9zKTsKKyAgICAgICAgICAgIC8vIE51bWJlckZvcm1hdCBBUEkKKyAgICAgICAgICAgIHN0ciA9IGZtdC5mb3JtYXQoMi43MTgyOCk7CisgICAgICAgICAgICBzdHIgPSBmbXQuZm9ybWF0KDEyMzQ1NjcpOworICAgICAgICAgICAgc3RyQnVmZmVyID0gZm10LmZvcm1hdCgxLjQxNDIxLCBzdHJCdWZmZXIsIGZwb3MpOworICAgICAgICAgICAgc3RyQnVmZmVyID0gZm10LmZvcm1hdCg5ODc2NTQzLCBzdHJCdWZmZXIsIGZwb3MpOworICAgICAgICAgICAgTnVtYmVyIG9iaiA9IGZtdC5wYXJzZShzdHIsIHBwb3MpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvYmogPSBmbXQucGFyc2Uoc3RyKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbiBwZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vSUNVNEogaGF2ZSBub3QgdGhlIGNsYXNzZXMgQ2hvaWNlRm9ybWF0IGFuZCBNZXNzYWdlRm9ybWF0CisgICAgICAgIC8qCisgICAgICAgIC8vIENob2ljZUZvcm1hdCBjYWxsaW5nIEZvcm1hdCAmIE51bWJlckZvcm1hdCBBUEkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nbG4oIkNob2ljZUZvcm1hdCIpOworICAgICAgICAgICAgQ2hvaWNlRm9ybWF0IGZtdCA9IG5ldyBDaG9pY2VGb3JtYXQoIjAjZm9vfDEjZm9vc3wyI2Zvb3MiKTsKKyAgICAgICAgICAgIC8vIEZvcm1hdCBBUEkKKyAgICAgICAgICAgIHN0ciA9IGZtdC5mb3JtYXQobnVtT2JqKTsKKyAgICAgICAgICAgIHN0ckJ1ZmZlciA9IGZtdC5mb3JtYXQobnVtT2JqLCBzdHJCdWZmZXIsIGZwb3MpOworICAgICAgICAgICAgLy8gTnVtYmVyRm9ybWF0IEFQSQorICAgICAgICAgICAgc3RyID0gZm10LmZvcm1hdCgyLjcxODI4KTsKKyAgICAgICAgICAgIHN0ciA9IGZtdC5mb3JtYXQoMTIzNDU2Nyk7CisgICAgICAgICAgICBzdHJCdWZmZXIgPSBmbXQuZm9ybWF0KDEuNDE0MjEsIHN0ckJ1ZmZlciwgZnBvcyk7CisgICAgICAgICAgICBzdHJCdWZmZXIgPSBmbXQuZm9ybWF0KDk4NzY1NDMsIHN0ckJ1ZmZlciwgZnBvcyk7CisgICAgICAgICAgICBOdW1iZXIgb2JqID0gZm10LnBhcnNlKHN0ciwgcHBvcyk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG9iaiA9IGZtdC5wYXJzZShzdHIpOworICAgICAgICAgICAgfSBjYXRjaCAoamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uIHBlKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICAKKyAgICAgICAgLy8gTWVzc2FnZUZvcm1hdCBjYWxsaW5nIEZvcm1hdCBBUEkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nbG4oIk1lc3NhZ2VGb3JtYXQiKTsKKyAgICAgICAgICAgIE1lc3NhZ2VGb3JtYXQgZm10ID0gbmV3IE1lc3NhZ2VGb3JtYXQoIiIpOworICAgICAgICAgICAgLy8gRm9ybWF0IEFQSQorICAgICAgICAgICAgLy8gV2UgdXNlIGRhdGVPYmosIHdoaWNoIE1lc3NhZ2VGb3JtYXQgc2hvdWxkIHJlamVjdC4KKyAgICAgICAgICAgIC8vIFdlJ3JlIHRlc3RpbmcgbmFtZSBoaWRpbmcsIG5vdCB0aGUgZm9ybWF0IG1ldGhvZC4KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgc3RyID0gZm10LmZvcm1hdChkYXRlT2JqKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdHJCdWZmZXIgPSBmbXQuZm9ybWF0KGRhdGVPYmosIHN0ckJ1ZmZlciwgZnBvcyk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAqLworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0ludGxUZXN0RGF0ZUZvcm1hdFN5bWJvbHMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REYXRlRm9ybWF0U3ltYm9scy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhMTM4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0ludGxUZXN0RGF0ZUZvcm1hdFN5bWJvbHMuamF2YQpAQCAtMCwwICsxLDE5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0ludGxUZXN0RGF0ZUZvcm1hdFN5bWJvbHMuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wMSAyMDoyNzoyMSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSkRLIDEuNGIxIDogamF2YS50ZXh0LkZvcm1hdC5JbnRsVGVzdERhdGVGb3JtYXRTeW1ib2xzCisgKiBTb3VyY2UgRmlsZTogamF2YS90ZXh0L2Zvcm1hdC9JbnRsVGVzdERhdGVGb3JtYXRTeW1ib2xzLmphdmEKKyAqKi8KKyAKKy8qCisgICAgQHRlc3QgMS40IDk4LzAzLzA2CisgICAgQHN1bW1hcnkgdGVzdCBJbnRlcm5hdGlvbmFsIERhdGUgRm9ybWF0IFN5bWJvbHMKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKK3B1YmxpYyBjbGFzcyBJbnRsVGVzdERhdGVGb3JtYXRTeW1ib2xzIGV4dGVuZHMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2sKK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEludGxUZXN0RGF0ZUZvcm1hdFN5bWJvbHMoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgLy8gVGVzdCBnZXRNb250aHMKKyAgICBwdWJsaWMgdm9pZCBUZXN0R2V0TW9udGhzKCkKKyAgICB7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIG1vbnRoOworICAgICAgICBEYXRlRm9ybWF0U3ltYm9scyBzeW1ib2w7CisKKyAgICAgICAgc3ltYm9sPW5ldyBEYXRlRm9ybWF0U3ltYm9scyhMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKworICAgICAgICBtb250aD1zeW1ib2wuZ2V0TW9udGhzKCk7CisgICAgICAgIGludCBjbnQgPSBtb250aC5sZW5ndGg7CisKKyAgICAgICAgbG9nbG4oInNpemUgPSAiICsgY250KTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8Y250OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2xuKG1vbnRoW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlc3QgdGhlIEFQSSBvZiBEYXRlRm9ybWF0U3ltYm9sczsgcHJpbWFyaWx5IGEgc2ltcGxlIGdldC9zZXQgc2V0LgorICAgIHB1YmxpYyB2b2lkIFRlc3RTeW1ib2xzKCkKKyAgICB7CisgICAgICAgIERhdGVGb3JtYXRTeW1ib2xzIGZyID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKExvY2FsZS5GUkVOQ0gpOworCisgICAgICAgIERhdGVGb3JtYXRTeW1ib2xzIGVuID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKExvY2FsZS5FTkdMSVNIKTsKKworICAgICAgICBpZihlbi5lcXVhbHMoZnIpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IEVuZ2xpc2ggRGF0ZUZvcm1hdFN5bWJvbHMgZXF1YWwgdG8gRnJlbmNoIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBqdXN0IGRvIHNvbWUgVkVSWSBiYXNpYyB0ZXN0cyB0byBtYWtlIHN1cmUgdGhhdCBnZXQvc2V0IHdvcmsKKworICAgICAgICBsb25nIGNvdW50OworICAgICAgICBmaW5hbCBTdHJpbmdbXSBlcmFzID0gZW4uZ2V0RXJhcygpOworICAgICAgICBmci5zZXRFcmFzKGVyYXMpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBlcmFzMSA9IGZyLmdldEVyYXMoKTsKKyAgICAgICAgY291bnQgPSBlcmFzLmxlbmd0aDsKKyAgICAgICAgaWYoIGNvdW50ICE9IGVyYXMxLmxlbmd0aCkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRFcmFzKCkgZmFpbGVkIChkaWZmZXJlbnQgc2l6ZSBhcnJheSkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYoISBlcmFzW2ldLmVxdWFscyhlcmFzMVtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRFcmFzKCkgZmFpbGVkIChkaWZmZXJlbnQgc3RyaW5nIHZhbHVlcykiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCisgICAgICAgIGZpbmFsIFN0cmluZ1tdIG1vbnRocyA9IGVuLmdldE1vbnRocygpOworICAgICAgICBmci5zZXRNb250aHMobW9udGhzKTsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gbW9udGhzMSA9IGZyLmdldE1vbnRocygpOworICAgICAgICBjb3VudCA9IG1vbnRocy5sZW5ndGg7CisgICAgICAgIGlmKCBjb3VudCAhPSBtb250aHMxLmxlbmd0aCkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRNb250aHMoKSBmYWlsZWQgKGRpZmZlcmVudCBzaXplIGFycmF5KSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZighIG1vbnRoc1tpXS5lcXVhbHMobW9udGhzMVtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRNb250aHMoKSBmYWlsZWQgKGRpZmZlcmVudCBzdHJpbmcgdmFsdWVzKSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHNob3J0TW9udGhzID0gZW4uZ2V0U2hvcnRNb250aHMoKTsKKyAgICAgICAgZnIuc2V0U2hvcnRNb250aHMoc2hvcnRNb250aHMpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBzaG9ydE1vbnRoczEgPSBmci5nZXRTaG9ydE1vbnRocygpOworICAgICAgICBjb3VudCA9IHNob3J0TW9udGhzLmxlbmd0aDsKKyAgICAgICAgaWYoIGNvdW50ICE9IHNob3J0TW9udGhzMS5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0U2hvcnRNb250aHMoKSBmYWlsZWQgKGRpZmZlcmVudCBzaXplIGFycmF5KSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZighIHNob3J0TW9udGhzW2ldLmVxdWFscyhzaG9ydE1vbnRoczFbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0U2hvcnRNb250aHMoKSBmYWlsZWQgKGRpZmZlcmVudCBzdHJpbmcgdmFsdWVzKSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHdlZWtkYXlzID0gZW4uZ2V0V2Vla2RheXMoKTsKKyAgICAgICAgZnIuc2V0V2Vla2RheXMod2Vla2RheXMpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSB3ZWVrZGF5czEgPSBmci5nZXRXZWVrZGF5cygpOworICAgICAgICBjb3VudCA9IHdlZWtkYXlzLmxlbmd0aDsKKyAgICAgICAgaWYoIGNvdW50ICE9IHdlZWtkYXlzMS5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0V2Vla2RheXMoKSBmYWlsZWQgKGRpZmZlcmVudCBzaXplIGFycmF5KSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZighIHdlZWtkYXlzW2ldLmVxdWFscyh3ZWVrZGF5czFbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0V2Vla2RheXMoKSBmYWlsZWQgKGRpZmZlcmVudCBzdHJpbmcgdmFsdWVzKSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHNob3J0V2Vla2RheXMgPSBlbi5nZXRTaG9ydFdlZWtkYXlzKCk7CisgICAgICAgIGZyLnNldFNob3J0V2Vla2RheXMoc2hvcnRXZWVrZGF5cyk7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHNob3J0V2Vla2RheXMxID0gZnIuZ2V0U2hvcnRXZWVrZGF5cygpOworICAgICAgICBjb3VudCA9IHNob3J0V2Vla2RheXMubGVuZ3RoOworICAgICAgICBpZiggY291bnQgIT0gc2hvcnRXZWVrZGF5czEubGVuZ3RoKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldFNob3J0V2Vla2RheXMoKSBmYWlsZWQgKGRpZmZlcmVudCBzaXplIGFycmF5KSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZighIHNob3J0V2Vla2RheXNbaV0uZXF1YWxzKHNob3J0V2Vla2RheXMxW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldFNob3J0V2Vla2RheXMoKSBmYWlsZWQgKGRpZmZlcmVudCBzdHJpbmcgdmFsdWVzKSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFN0cmluZ1tdIGFtcG1zID0gZW4uZ2V0QW1QbVN0cmluZ3MoKTsKKyAgICAgICAgZnIuc2V0QW1QbVN0cmluZ3MoYW1wbXMpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBhbXBtczEgPSBmci5nZXRBbVBtU3RyaW5ncygpOworICAgICAgICBjb3VudCA9IGFtcG1zLmxlbmd0aDsKKyAgICAgICAgaWYoIGNvdW50ICE9IGFtcG1zMS5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0QW1QbVN0cmluZ3MoKSBmYWlsZWQgKGRpZmZlcmVudCBzaXplIGFycmF5KSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZighIGFtcG1zW2ldLmVxdWFscyhhbXBtczFbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0QW1QbVN0cmluZ3MoKSBmYWlsZWQgKGRpZmZlcmVudCBzdHJpbmcgdmFsdWVzKSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgcm93Q291bnQgPSAwLCBjb2x1bW5Db3VudCA9IDA7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdW10gc3RyaW5ncyA9IGVuLmdldFpvbmVTdHJpbmdzKCk7CisgICAgICAgIGZyLnNldFpvbmVTdHJpbmdzKHN0cmluZ3MpOworICAgICAgICBmaW5hbCBTdHJpbmdbXVtdIHN0cmluZ3MxID0gZnIuZ2V0Wm9uZVN0cmluZ3MoKTsKKyAgICAgICAgcm93Q291bnQgPSBzdHJpbmdzLmxlbmd0aDsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGNvbHVtbkNvdW50ID0gc3RyaW5nc1tpXS5sZW5ndGg7CisgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgY29sdW1uQ291bnQ7IGorKykgeworICAgICAgICAgICAgICAgIGlmKCBzdHJpbmdzW2ldW2pdICE9IHN0cmluZ3MxW2ldW2pdICkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldFpvbmVTdHJpbmdzKCkgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKy8vICAgICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybiA9IERhdGVGb3JtYXRTeW1ib2xzLmdldFBhdHRlcm5DaGFycygpOworCisgICAgICAgIFN0cmluZyBsb2NhbFBhdHRlcm47IC8vIHBhdDEsIHBhdDI7IC8vVGhlIHZhcmlhYmxlIGlzIG5ldmVyIHVzZWQKKyAgICAgICAgbG9jYWxQYXR0ZXJuID0gZW4uZ2V0TG9jYWxQYXR0ZXJuQ2hhcnMoKTsKKyAgICAgICAgZnIuc2V0TG9jYWxQYXR0ZXJuQ2hhcnMobG9jYWxQYXR0ZXJuKTsKKyAgICAgICAgaWYoISBlbi5nZXRMb2NhbFBhdHRlcm5DaGFycygpLmVxdWFscyhmci5nZXRMb2NhbFBhdHRlcm5DaGFycygpKSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRMb2NhbFBhdHRlcm5DaGFycygpIGZhaWxlZCIpOworICAgICAgICB9CisKKworICAgICAgICAvL0RhdGVGb3JtYXRTeW1ib2xzIGZvbyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scygpOyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisKKyAgICAgICAgZW4gPSAoRGF0ZUZvcm1hdFN5bWJvbHMpIGZyLmNsb25lKCk7CisKKyAgICAgICAgaWYoISBlbi5lcXVhbHMoZnIpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IENsb25lIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERlY2ltYWxGb3JtYXRBUEkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REZWNpbWFsRm9ybWF0QVBJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWZhMjczMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REZWNpbWFsRm9ybWF0QVBJLmphdmEKQEAgLTAsMCArMSwyMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERlY2ltYWxGb3JtYXRBUEkuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wMSAyMDoyNzoyMSAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSkRLIDEuNGIxIDogamF2YS50ZXh0LkZvcm1hdC5JbnRsVGVzdERlY2ltYWxGb3JtYXRBUEkKKyAqIFNvdXJjZSBGaWxlOiBqYXZhL3RleHQvZm9ybWF0L0ludGxUZXN0RGVjaW1hbEZvcm1hdEFQSS5qYXZhCisgKiovCisgCisvKgorICAgIEB0ZXN0IDEuNCA5OC8wMy8wNgorICAgIEBzdW1tYXJ5IHRlc3QgSW50ZXJuYXRpb25hbCBEZWNpbWFsIEZvcm1hdCBBUEkKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudGV4dC5QYXJzZVBvc2l0aW9uOworaW1wb3J0IGphdmEudGV4dC5Gb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247CisKK3B1YmxpYyBjbGFzcyBJbnRsVGVzdERlY2ltYWxGb3JtYXRBUEkgZXh0ZW5kcyBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13aworeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEludGxUZXN0RGVjaW1hbEZvcm1hdEFQSSgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHZhcmlvdXMgZ2VuZXJpYyBBUEkgbWV0aG9kcyBpbiBEZWNpbWFsRm9ybWF0IHRvIGFjaGlldmUgMTAwJSBBUEkgY292ZXJhZ2UuCisgICAgcHVibGljIHZvaWQgVGVzdEFQSSgpCisgICAgeworICAgICAgICBsb2dsbigiRGVjaW1hbEZvcm1hdCBBUEkgdGVzdC0tLSIpOyBsb2dsbigiIik7CisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KExvY2FsZS5FTkdMSVNIKTsKKworICAgICAgICAvLyA9PT09PT09IFRlc3QgY29uc3RydWN0b3JzCisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgRGVjaW1hbEZvcm1hdCBjb25zdHJ1Y3RvcnMiKTsKKworICAgICAgICBEZWNpbWFsRm9ybWF0IGRlZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhdHRlcm4gPSBuZXcgU3RyaW5nKCIjLCMjMC4jIEZGIik7CisgICAgICAgIERlY2ltYWxGb3JtYXQgcGF0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBhdCA9IG5ldyBEZWNpbWFsRm9ybWF0KHBhdHRlcm4pOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBDb3VsZCBub3QgY3JlYXRlIERlY2ltYWxGb3JtYXQgKHBhdHRlcm4pIik7CisgICAgICAgIH0KKworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW1ib2xzID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5GUkVOQ0gpOworCisgICAgICAgIERlY2ltYWxGb3JtYXQgY3VzdDEgPSBuZXcgRGVjaW1hbEZvcm1hdChwYXR0ZXJuLCBzeW1ib2xzKTsKKworICAgICAgICAvLyA9PT09PT09IFRlc3QgY2xvbmUoKSwgYXNzaWdubWVudCwgYW5kIGVxdWFsaXR5CisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgY2xvbmUoKSBhbmQgZXF1YWxpdHkgb3BlcmF0b3JzIik7CisKKyAgICAgICAgRm9ybWF0IGNsb25lID0gKEZvcm1hdCkgZGVmLmNsb25lKCk7CisgICAgICAgIGlmKCAhIGRlZi5lcXVhbHMoY2xvbmUpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IENsb25lKCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICAvLyA9PT09PT09IFRlc3QgdmFyaW91cyBmb3JtYXQoKSBtZXRob2RzCisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdmFyaW91cyBmb3JtYXQoKSBtZXRob2RzIik7CisKKy8vICAgICAgICBmaW5hbCBkb3VibGUgZCA9IC0xMDQ1Ni4wMDM3OyAvLyB0aGlzIGFwcGVhcnMgYXMgLTEwNDU2LjAwMzcwMDAwMDAwMSBvbiBOVAorLy8gICAgICAgIGZpbmFsIGRvdWJsZSBkID0gLTEuMDQ1NjAwMzdlLTQ7IC8vIHRoaXMgYXBwZWFycyBhcyAtMS4wNDU2MDAzNzAwMDAwMDAyRS00IG9uIE5UCisgICAgICAgIGZpbmFsIGRvdWJsZSBkID0gLTEwNDU2LjAwMzcwMDAwMDAwMDAwOyAvLyB0aGlzIHdvcmtzIQorICAgICAgICBmaW5hbCBsb25nIGwgPSAxMDAwMDAwMDA7CisgICAgICAgIGxvZ2xuKCIiICsgZCArICIgaXMgdGhlIGRvdWJsZSB2YWx1ZSIpOworCisgICAgICAgIFN0cmluZ0J1ZmZlciByZXMxID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzMiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlczMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXM0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvczEgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MyID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zMyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvczQgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKworICAgICAgICByZXMxID0gZGVmLmZvcm1hdChkLCByZXMxLCBwb3MxKTsKKyAgICAgICAgbG9nbG4oIiIgKyBkICsgIiBmb3JtYXR0ZWQgdG8gIiArIHJlczEpOworCisgICAgICAgIHJlczIgPSBwYXQuZm9ybWF0KGwsIHJlczIsIHBvczIpOworICAgICAgICBsb2dsbigiIiArIGwgKyAiIGZvcm1hdHRlZCB0byAiICsgcmVzMik7CisKKyAgICAgICAgcmVzMyA9IGN1c3QxLmZvcm1hdChkLCByZXMzLCBwb3MzKTsKKyAgICAgICAgbG9nbG4oIiIgKyBkICsgIiBmb3JtYXR0ZWQgdG8gIiArIHJlczMpOworCisgICAgICAgIHJlczQgPSBjdXN0MS5mb3JtYXQobCwgcmVzNCwgcG9zNCk7CisgICAgICAgIGxvZ2xuKCIiICsgbCArICIgZm9ybWF0dGVkIHRvICIgKyByZXM0KTsKKworICAgICAgICAvLyA9PT09PT09IFRlc3QgcGFyc2UoKQorCisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHBhcnNlKCkiKTsKKworICAgICAgICBTdHJpbmcgdGV4dCA9IG5ldyBTdHJpbmcoIi0xMCw0NTYuMDAzNyIpOworICAgICAgICBQYXJzZVBvc2l0aW9uIHBvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICBTdHJpbmcgcGF0dCA9IG5ldyBTdHJpbmcoIiMsIyMwLiMiKTsKKyAgICAgICAgcGF0LmFwcGx5UGF0dGVybihwYXR0KTsKKyAgICAgICAgZG91YmxlIGQyID0gcGF0LnBhcnNlKHRleHQsIHBvcykuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgaWYoZDIgIT0gZCkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBSb3VuZHRyaXAgZmFpbGVkICh2aWEgcGFyc2UoIiArIGQyICsgIiAhPSAiICsgZCArICIpKSBmb3IgIiArIHRleHQpOworICAgICAgICB9CisgICAgICAgIGxvZ2xuKHRleHQgKyAiIHBhcnNlZCBpbnRvICIgKyAobG9uZykgZDIpOworCisgICAgICAgIC8vID09PT09PT0gVGVzdCBnZXR0ZXJzIGFuZCBzZXR0ZXJzCisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgZ2V0dGVycyBhbmQgc2V0dGVycyIpOworCisgICAgICAgIGZpbmFsIERlY2ltYWxGb3JtYXRTeW1ib2xzIHN5bXMgPSBwYXQuZ2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKTsKKyAgICAgICAgZGVmLnNldERlY2ltYWxGb3JtYXRTeW1ib2xzKHN5bXMpOworICAgICAgICBpZiggISBwYXQuZ2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKS5lcXVhbHMoZGVmLmdldERlY2ltYWxGb3JtYXRTeW1ib2xzKCkpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldCBEZWNpbWFsRm9ybWF0U3ltYm9scygpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHBvc1ByZWZpeDsKKyAgICAgICAgcGF0LnNldFBvc2l0aXZlUHJlZml4KCIrIik7CisgICAgICAgIHBvc1ByZWZpeCA9IHBhdC5nZXRQb3NpdGl2ZVByZWZpeCgpOworICAgICAgICBsb2dsbigiUG9zaXRpdmUgcHJlZml4IChzaG91bGQgYmUgKyk6ICIgKyBwb3NQcmVmaXgpOworICAgICAgICBpZihwb3NQcmVmaXggIT0gIisiKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldFBvc2l0aXZlUHJlZml4KCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgbmVnUHJlZml4OworICAgICAgICBwYXQuc2V0TmVnYXRpdmVQcmVmaXgoIi0iKTsKKyAgICAgICAgbmVnUHJlZml4ID0gcGF0LmdldE5lZ2F0aXZlUHJlZml4KCk7CisgICAgICAgIGxvZ2xuKCJOZWdhdGl2ZSBwcmVmaXggKHNob3VsZCBiZSAtKTogIiArIG5lZ1ByZWZpeCk7CisgICAgICAgIGlmKG5lZ1ByZWZpeCAhPSAiLSIpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0TmVnYXRpdmVQcmVmaXgoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBwb3NTdWZmaXg7CisgICAgICAgIHBhdC5zZXRQb3NpdGl2ZVN1ZmZpeCgiXyIpOworICAgICAgICBwb3NTdWZmaXggPSBwYXQuZ2V0UG9zaXRpdmVTdWZmaXgoKTsKKyAgICAgICAgbG9nbG4oIlBvc2l0aXZlIHN1ZmZpeCAoc2hvdWxkIGJlIF8pOiAiICsgcG9zU3VmZml4KTsKKyAgICAgICAgaWYocG9zU3VmZml4ICE9ICJfIikgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRQb3NpdGl2ZVN1ZmZpeCgpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIG5lZ1N1ZmZpeDsKKyAgICAgICAgcGF0LnNldE5lZ2F0aXZlU3VmZml4KCJ+Iik7CisgICAgICAgIG5lZ1N1ZmZpeCA9IHBhdC5nZXROZWdhdGl2ZVN1ZmZpeCgpOworICAgICAgICBsb2dsbigiTmVnYXRpdmUgc3VmZml4IChzaG91bGQgYmUgfik6ICIgKyBuZWdTdWZmaXgpOworICAgICAgICBpZihuZWdTdWZmaXggIT0gIn4iKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldE5lZ2F0aXZlU3VmZml4KCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBsb25nIG11bHRpcGxpZXIgPSAwOworICAgICAgICBwYXQuc2V0TXVsdGlwbGllcig4KTsKKyAgICAgICAgbXVsdGlwbGllciA9IHBhdC5nZXRNdWx0aXBsaWVyKCk7CisgICAgICAgIGxvZ2xuKCJNdWx0aXBsaWVyIChzaG91bGQgYmUgOCk6ICIgKyBtdWx0aXBsaWVyKTsKKyAgICAgICAgaWYobXVsdGlwbGllciAhPSA4KSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldE11bHRpcGxpZXIoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBncm91cGluZ1NpemUgPSAwOworICAgICAgICBwYXQuc2V0R3JvdXBpbmdTaXplKDIpOworICAgICAgICBncm91cGluZ1NpemUgPSBwYXQuZ2V0R3JvdXBpbmdTaXplKCk7CisgICAgICAgIGxvZ2xuKCJHcm91cGluZyBzaXplIChzaG91bGQgYmUgMik6ICIgKyAobG9uZykgZ3JvdXBpbmdTaXplKTsKKyAgICAgICAgaWYoZ3JvdXBpbmdTaXplICE9IDIpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0R3JvdXBpbmdTaXplKCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBwYXQuc2V0RGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKHRydWUpOworICAgICAgICBib29sZWFuIHRmID0gcGF0LmlzRGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKCk7CisgICAgICAgIGxvZ2xuKCJEZWNpbWFsU2VwYXJhdG9ySXNBbHdheXNTaG93biAoc2hvdWxkIGJlIHRydWUpIGlzICIgKyAgKHRmID8gInRydWUiIDogImZhbHNlIikpOworICAgICAgICBpZih0ZiAhPSB0cnVlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldERlY2ltYWxTZXBhcmF0b3JBbHdheXNTaG93bigpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIGZ1bmt5UGF0OworICAgICAgICBmdW5reVBhdCA9IHBhdC50b1BhdHRlcm4oKTsKKyAgICAgICAgbG9nbG4oIlBhdHRlcm4gaXMgIiArIGZ1bmt5UGF0KTsKKworICAgICAgICBTdHJpbmcgbG9jUGF0OworICAgICAgICBsb2NQYXQgPSBwYXQudG9Mb2NhbGl6ZWRQYXR0ZXJuKCk7CisgICAgICAgIGxvZ2xuKCJMb2NhbGl6ZWQgcGF0dGVybiBpcyAiICsgbG9jUGF0KTsKKworICAgICAgICAvLyA9PT09PT09IFRlc3QgYXBwbHlQYXR0ZXJuKCkKKworICAgICAgICBsb2dsbigiVGVzdGluZyBhcHBseVBhdHRlcm4oKSIpOworCisgICAgICAgIFN0cmluZyBwMSA9IG5ldyBTdHJpbmcoIiMsIyMwLjAjOygjLCMjMC4wIykiKTsKKyAgICAgICAgbG9nbG4oIkFwcGx5aW5nIHBhdHRlcm4gIiArIHAxKTsKKyAgICAgICAgcGF0LmFwcGx5UGF0dGVybihwMSk7CisgICAgICAgIFN0cmluZyBzMjsKKyAgICAgICAgczIgPSBwYXQudG9QYXR0ZXJuKCk7CisgICAgICAgIGxvZ2xuKCJFeHRyYWN0ZWQgcGF0dGVybiBpcyAiICsgczIpOworICAgICAgICBpZiggISBzMi5lcXVhbHMocDEpICkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiB0b1BhdHRlcm4oKSByZXN1bHQgZGlkIG5vdCBtYXRjaCBwYXR0ZXJuIGFwcGxpZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBwMiA9IG5ldyBTdHJpbmcoIiMsIyMwLjAjIEZGOygjLCMjMC4wIyBGRikiKTsKKyAgICAgICAgbG9nbG4oIkFwcGx5aW5nIHBhdHRlcm4gIiArIHAyKTsKKyAgICAgICAgcGF0LmFwcGx5TG9jYWxpemVkUGF0dGVybihwMik7CisgICAgICAgIFN0cmluZyBzMzsKKyAgICAgICAgczMgPSBwYXQudG9Mb2NhbGl6ZWRQYXR0ZXJuKCk7CisgICAgICAgIGxvZ2xuKCJFeHRyYWN0ZWQgcGF0dGVybiBpcyAiICsgczMpOworICAgICAgICBpZiggISBzMy5lcXVhbHMocDIpICkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiB0b0xvY2FsaXplZFBhdHRlcm4oKSByZXN1bHQgZGlkIG5vdCBtYXRjaCBwYXR0ZXJuIGFwcGxpZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vID09PT09PT0gVGVzdCBnZXRTdGF0aWNDbGFzc0lEKCkKKworLy8gICAgICAgIGxvZ2xuKCJUZXN0aW5nIGluc3RhbmNlb2YoKSIpOworCisvLyAgICAgICAgdHJ5IHsKKyAvLyAgICAgICAgICAgTnVtYmVyRm9ybWF0IHRlc3QgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOworCisvLyAgICAgICAgICAgIGlmICghICh0ZXN0IGluc3RhbmNlb2YgRGVjaW1hbEZvcm1hdCkpIHsKKy8vICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW5zdGFuY2VvZiBmYWlsZWQiKTsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKy8vICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKy8vICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBDb3VsZG4ndCBjcmVhdGUgYSBEZWNpbWFsRm9ybWF0Iik7CisvLyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REZWNpbWFsRm9ybWF0QVBJQy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERlY2ltYWxGb3JtYXRBUElDLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjIzYWY3YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REZWNpbWFsRm9ybWF0QVBJQy5qYXZhCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REZWNpbWFsRm9ybWF0QVBJQy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjEwICQgCisgKiAkUmV2aXNpb246IDEuMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYxLjguMSA6IGZvcm1hdCA6IEludGxUZXN0RGVjaW1hbEZvcm1hdEFQSQorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvZGNmbWFwdHMuY3BwCisgKiovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0OworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LkZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworCisvLyBUaGlzIGlzIGFuIEFQSSB0ZXN0LCBub3QgYSB1bml0IHRlc3QuICBJdCBkb2Vzbid0IHRlc3QgdmVyeSBtYW55IGNhc2VzLCBhbmQgZG9lc24ndAorLy8gdHJ5IHRvIHRlc3QgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eS4gIEl0IGp1c3QgY2FsbHMgZWFjaCBmdW5jdGlvbiBpbiB0aGUgY2xhc3MgYW5kCisvLyB2ZXJpZmllcyB0aGF0IGl0IHdvcmtzIG9uIGEgYmFzaWMgbGV2ZWwuCitwdWJsaWMgY2xhc3MgSW50bFRlc3REZWNpbWFsRm9ybWF0QVBJQyBleHRlbmRzIGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrIHsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBJbnRsVGVzdERlY2ltYWxGb3JtYXRBUElDKCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgdmFyaW91cyBnZW5lcmljIEFQSSBtZXRob2RzIGluIERlY2ltYWxGb3JtYXQgdG8gYWNoaWV2ZSAxMDAlIEFQSSBjb3ZlcmFnZS4KKyAgICBwdWJsaWMgdm9pZCBUZXN0QVBJKCkgeworICAgICAgICAKKyAgICAgICAgbG9nbG4oIkRlY2ltYWxGb3JtYXQgQVBJIHRlc3QtLS0iKTsKKyAgICAgICAgbG9nbG4oIiIpOworICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChMb2NhbGUuRU5HTElTSCk7CisgICAgCisgICAgICAgIC8vID09PT09PT0gVGVzdCBjb25zdHJ1Y3RvcnMKKyAgICAKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgRGVjaW1hbEZvcm1hdCBjb25zdHJ1Y3RvcnMiKTsKKyAgICAKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZWYgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOworICAgIAorICAgICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybiA9IG5ldyBTdHJpbmcoIiMsIyMwLiMgRkYiKTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBwYXQgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcGF0ID0gbmV3IERlY2ltYWxGb3JtYXQocGF0dGVybik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgRGVjaW1hbEZvcm1hdCAocGF0dGVybikiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW1ib2xzID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5GUkVOQ0gpOworICAgIAorICAgICAgICBEZWNpbWFsRm9ybWF0IGN1c3QxID0gbmV3IERlY2ltYWxGb3JtYXQocGF0dGVybiwgc3ltYm9scyk7CisgICAgCisgICAgICAgIC8vID09PT09PT0gVGVzdCBjbG9uZSgpLCBhc3NpZ25tZW50LCBhbmQgZXF1YWxpdHkKKyAgICAKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgY2xvbmUoKSBhbmQgZXF1YWxpdHkgb3BlcmF0b3JzIik7CisgICAgCisgICAgICAgIEZvcm1hdCBjbG9uZSA9IChGb3JtYXQpIGRlZi5jbG9uZSgpOworICAgICAgICBpZiAoIWRlZi5lcXVhbHMoY2xvbmUpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IENsb25lKCkgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IHZhcmlvdXMgZm9ybWF0KCkgbWV0aG9kcworICAgIAorICAgICAgICBsb2dsbigiVGVzdGluZyB2YXJpb3VzIGZvcm1hdCgpIG1ldGhvZHMiKTsKKyAgICAKKyAgICAgICAgLy8gICAgICAgIGZpbmFsIGRvdWJsZSBkID0gLTEwNDU2LjAwMzc7IC8vIHRoaXMgYXBwZWFycyBhcyAtMTA0NTYuMDAzNzAwMDAwMDAxIG9uIE5UCisgICAgICAgIC8vICAgICAgICBmaW5hbCBkb3VibGUgZCA9IC0xLjA0NTYwMDM3ZS00OyAvLyB0aGlzIGFwcGVhcnMgYXMgLTEuMDQ1NjAwMzcwMDAwMDAwMkUtNCBvbiBOVAorICAgICAgICBmaW5hbCBkb3VibGUgZCA9IC0xMDQ1Ni4wMDM3MDAwMDAwMDAwMDsgLy8gdGhpcyB3b3JrcyEKKyAgICAgICAgZmluYWwgbG9uZyBsID0gMTAwMDAwMDAwOworICAgICAgICBsb2dsbigiIiArIERvdWJsZS50b1N0cmluZyhkKSArICIgaXMgdGhlIGRvdWJsZSB2YWx1ZSIpOworICAgIAorICAgICAgICBTdHJpbmdCdWZmZXIgcmVzMSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlczIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXMzID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzNCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MxID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zMiA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvczMgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgRmllbGRQb3NpdGlvbiBwb3M0ID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7CisgICAgCisgICAgICAgIHJlczEgPSBkZWYuZm9ybWF0KGQsIHJlczEsIHBvczEpOworICAgICAgICBsb2dsbigiIiArIERvdWJsZS50b1N0cmluZyhkKSArICIgZm9ybWF0dGVkIHRvICIgKyByZXMxKTsKKyAgICAKKyAgICAgICAgcmVzMiA9IHBhdC5mb3JtYXQobCwgcmVzMiwgcG9zMik7CisgICAgICAgIGxvZ2xuKCIiICsgbCArICIgZm9ybWF0dGVkIHRvICIgKyByZXMyKTsKKyAgICAKKyAgICAgICAgcmVzMyA9IGN1c3QxLmZvcm1hdChkLCByZXMzLCBwb3MzKTsKKyAgICAgICAgbG9nbG4oIiIgKyBEb3VibGUudG9TdHJpbmcoZCkgKyAiIGZvcm1hdHRlZCB0byAiICsgcmVzMyk7CisgICAgCisgICAgICAgIHJlczQgPSBjdXN0MS5mb3JtYXQobCwgcmVzNCwgcG9zNCk7CisgICAgICAgIGxvZ2xuKCIiICsgbCArICIgZm9ybWF0dGVkIHRvICIgKyByZXM0KTsKKyAgICAKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IHBhcnNlKCkKKyAgICAKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgcGFyc2UoKSIpOworICAgIAorICAgICAgICBTdHJpbmcgdGV4dCA9IG5ldyBTdHJpbmcoIi0xMCw0NTYuMDAzNyIpOworICAgICAgICBQYXJzZVBvc2l0aW9uIHBvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICBTdHJpbmcgcGF0dCA9IG5ldyBTdHJpbmcoIiMsIyMwLiMiKTsKKyAgICAgICAgcGF0LmFwcGx5UGF0dGVybihwYXR0KTsKKyAgICAgICAgZG91YmxlIGQyID0gcGF0LnBhcnNlKHRleHQsIHBvcykuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgaWYgKGQyICE9IGQpIHsKKyAgICAgICAgICAgIGVycmxuKAorICAgICAgICAgICAgICAgICJFUlJPUjogUm91bmR0cmlwIGZhaWxlZCAodmlhIHBhcnNlKCIgKyBEb3VibGUudG9TdHJpbmcoZDIpICsgIiAhPSAiICsgRG91YmxlLnRvU3RyaW5nKGQpICsgIikpIGZvciAiICsgdGV4dCk7IAorICAgICAgICB9CisgICAgICAgIGxvZ2xuKHRleHQgKyAiIHBhcnNlZCBpbnRvICIgKyAobG9uZykgZDIpOworICAgIAorICAgICAgICAvLyA9PT09PT09IFRlc3QgZ2V0dGVycyBhbmQgc2V0dGVycworICAgIAorICAgICAgICBsb2dsbigiVGVzdGluZyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIik7CisgICAgCisgICAgICAgIGZpbmFsIERlY2ltYWxGb3JtYXRTeW1ib2xzIHN5bXMgPSBwYXQuZ2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKTsKKyAgICAgICAgZGVmLnNldERlY2ltYWxGb3JtYXRTeW1ib2xzKHN5bXMpOworICAgICAgICBpZiAoIXBhdC5nZXREZWNpbWFsRm9ybWF0U3ltYm9scygpLmVxdWFscyhkZWYuZ2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0IERlY2ltYWxGb3JtYXRTeW1ib2xzKCkgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgU3RyaW5nIHBvc1ByZWZpeDsKKyAgICAgICAgcGF0LnNldFBvc2l0aXZlUHJlZml4KCIrIik7CisgICAgICAgIHBvc1ByZWZpeCA9IHBhdC5nZXRQb3NpdGl2ZVByZWZpeCgpOworICAgICAgICBsb2dsbigiUG9zaXRpdmUgcHJlZml4IChzaG91bGQgYmUgKyk6ICIgKyBwb3NQcmVmaXgpOworICAgICAgICBpZiAocG9zUHJlZml4ICE9ICIrIikgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRQb3NpdGl2ZVByZWZpeCgpIGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIFN0cmluZyBuZWdQcmVmaXg7CisgICAgICAgIHBhdC5zZXROZWdhdGl2ZVByZWZpeCgiLSIpOworICAgICAgICBuZWdQcmVmaXggPSBwYXQuZ2V0TmVnYXRpdmVQcmVmaXgoKTsKKyAgICAgICAgbG9nbG4oIk5lZ2F0aXZlIHByZWZpeCAoc2hvdWxkIGJlIC0pOiAiICsgbmVnUHJlZml4KTsKKyAgICAgICAgaWYgKG5lZ1ByZWZpeCAhPSAiLSIpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0TmVnYXRpdmVQcmVmaXgoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBTdHJpbmcgcG9zU3VmZml4OworICAgICAgICBwYXQuc2V0UG9zaXRpdmVTdWZmaXgoIl8iKTsKKyAgICAgICAgcG9zU3VmZml4ID0gcGF0LmdldFBvc2l0aXZlU3VmZml4KCk7CisgICAgICAgIGxvZ2xuKCJQb3NpdGl2ZSBzdWZmaXggKHNob3VsZCBiZSBfKTogIiArIHBvc1N1ZmZpeCk7CisgICAgICAgIGlmIChwb3NTdWZmaXggIT0gIl8iKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldFBvc2l0aXZlU3VmZml4KCkgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgU3RyaW5nIG5lZ1N1ZmZpeDsKKyAgICAgICAgcGF0LnNldE5lZ2F0aXZlU3VmZml4KCJ+Iik7CisgICAgICAgIG5lZ1N1ZmZpeCA9IHBhdC5nZXROZWdhdGl2ZVN1ZmZpeCgpOworICAgICAgICBsb2dsbigiTmVnYXRpdmUgc3VmZml4IChzaG91bGQgYmUgfik6ICIgKyBuZWdTdWZmaXgpOworICAgICAgICBpZiAobmVnU3VmZml4ICE9ICJ+IikgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXROZWdhdGl2ZVN1ZmZpeCgpIGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGxvbmcgbXVsdGlwbGllciA9IDA7CisgICAgICAgIHBhdC5zZXRNdWx0aXBsaWVyKDgpOworICAgICAgICBtdWx0aXBsaWVyID0gcGF0LmdldE11bHRpcGxpZXIoKTsKKyAgICAgICAgbG9nbG4oIk11bHRpcGxpZXIgKHNob3VsZCBiZSA4KTogIiArIG11bHRpcGxpZXIpOworICAgICAgICBpZiAobXVsdGlwbGllciAhPSA4KSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldE11bHRpcGxpZXIoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpbnQgZ3JvdXBpbmdTaXplID0gMDsKKyAgICAgICAgcGF0LnNldEdyb3VwaW5nU2l6ZSgyKTsKKyAgICAgICAgZ3JvdXBpbmdTaXplID0gcGF0LmdldEdyb3VwaW5nU2l6ZSgpOworICAgICAgICBsb2dsbigiR3JvdXBpbmcgc2l6ZSAoc2hvdWxkIGJlIDIpOiAiICsgKGxvbmcpIGdyb3VwaW5nU2l6ZSk7CisgICAgICAgIGlmIChncm91cGluZ1NpemUgIT0gMikgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRHcm91cGluZ1NpemUoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBwYXQuc2V0RGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKHRydWUpOworICAgICAgICBib29sZWFuIHRmID0gcGF0LmlzRGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKCk7CisgICAgICAgIGxvZ2xuKAorICAgICAgICAgICAgIkRlY2ltYWxTZXBhcmF0b3JJc0Fsd2F5c1Nob3duIChzaG91bGQgYmUgdHJ1ZSkgaXMgIiArICh0ZiA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsgCisgICAgICAgIGlmICh0ZiAhPSB0cnVlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldERlY2ltYWxTZXBhcmF0b3JBbHdheXNTaG93bigpIGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIFN0cmluZyBmdW5reVBhdDsKKyAgICAgICAgZnVua3lQYXQgPSBwYXQudG9QYXR0ZXJuKCk7CisgICAgICAgIGxvZ2xuKCJQYXR0ZXJuIGlzICIgKyBmdW5reVBhdCk7CisgICAgCisgICAgICAgIFN0cmluZyBsb2NQYXQ7CisgICAgICAgIGxvY1BhdCA9IHBhdC50b0xvY2FsaXplZFBhdHRlcm4oKTsKKyAgICAgICAgbG9nbG4oIkxvY2FsaXplZCBwYXR0ZXJuIGlzICIgKyBsb2NQYXQpOworICAgIAorICAgICAgICAvLyA9PT09PT09IFRlc3QgYXBwbHlQYXR0ZXJuKCkKKyAgICAKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgYXBwbHlQYXR0ZXJuKCkiKTsKKyAgICAKKyAgICAgICAgU3RyaW5nIHAxID0gbmV3IFN0cmluZygiIywjIzAuMCM7KCMsIyMwLjAjKSIpOworICAgICAgICBsb2dsbigiQXBwbHlpbmcgcGF0dGVybiAiICsgcDEpOworICAgICAgICBwYXQuYXBwbHlQYXR0ZXJuKHAxKTsKKyAgICAgICAgU3RyaW5nIHMyOworICAgICAgICBzMiA9IHBhdC50b1BhdHRlcm4oKTsKKyAgICAgICAgbG9nbG4oIkV4dHJhY3RlZCBwYXR0ZXJuIGlzICIgKyBzMik7CisgICAgICAgIGlmICghczIuZXF1YWxzKHAxKSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiB0b1BhdHRlcm4oKSByZXN1bHQgZGlkIG5vdCBtYXRjaCBwYXR0ZXJuIGFwcGxpZWQiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBTdHJpbmcgcDIgPSBuZXcgU3RyaW5nKCIjLCMjMC4wIyBGRjsoIywjIzAuMCMgRkYpIik7CisgICAgICAgIGxvZ2xuKCJBcHBseWluZyBwYXR0ZXJuICIgKyBwMik7CisgICAgICAgIHBhdC5hcHBseUxvY2FsaXplZFBhdHRlcm4ocDIpOworICAgICAgICBTdHJpbmcgczM7CisgICAgICAgIHMzID0gcGF0LnRvTG9jYWxpemVkUGF0dGVybigpOworICAgICAgICBsb2dsbigiRXh0cmFjdGVkIHBhdHRlcm4gaXMgIiArIHMzKTsKKyAgICAgICAgaWYgKCFzMy5lcXVhbHMocDIpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHRvTG9jYWxpemVkUGF0dGVybigpIHJlc3VsdCBkaWQgbm90IG1hdGNoIHBhdHRlcm4gYXBwbGllZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vID09PT09PT0gVGVzdCBnZXRTdGF0aWNDbGFzc0lEKCkKKyAgICAKKyAgICAgICAgLy8gICAgICAgIGxvZ2xuKCJUZXN0aW5nIGluc3RhbmNlb2YoKSIpOworICAgIAorICAgICAgICAvLyAgICAgICAgdHJ5IHsKKyAgICAgICAgLy8gICAgICAgICAgIE51bWJlckZvcm1hdCB0ZXN0ID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKKyAgICAKKyAgICAgICAgLy8gICAgICAgICAgICBpZiAoISAodGVzdCBpbnN0YW5jZW9mIERlY2ltYWxGb3JtYXQpKSB7CisgICAgICAgIC8vICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogaW5zdGFuY2VvZiBmYWlsZWQiKTsKKyAgICAgICAgLy8gICAgICAgICAgICB9CisgICAgICAgIC8vICAgICAgICB9CisgICAgICAgIC8vICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgLy8gICAgICAgICAgICBlcnJsbigiRVJST1I6IENvdWxkbid0IGNyZWF0ZSBhIERlY2ltYWxGb3JtYXQiKTsKKyAgICAgICAgLy8gICAgICAgIH0KKyAgICAgICAKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Um91bmRpbmcoKSB7CisgICAgICAgIGRvdWJsZSBSb3VuZGluZ251bWJlciA9IDIuNTU7CisgICAgICAgIGRvdWJsZSBSb3VuZGluZ251bWJlcjEgPSAtMi41NTsKKyAgICAgICAgLy8rMi41NSByZXN1bHRzICAgLTIuNTUgcmVzdWx0cworICAgICAgICBkb3VibGUgcmVzdWx0W10gPSB7CisgICAgICAgICAgICAzLCAtMywgICAKKyAgICAgICAgICAgIDIsIC0yLCAKKyAgICAgICAgICAgIDMsIC0yLCAKKyAgICAgICAgICAgIDIsIC0zLCAKKyAgICAgICAgICAgIDMsIC0zLCAKKyAgICAgICAgICAgIDMsIC0zLCAKKyAgICAgICAgICAgIDMsIC0zIAorICAgICAgICB9OworICAgICAgICBEZWNpbWFsRm9ybWF0IHBhdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7CisgICAgICAgIFN0cmluZyBzID0gIiI7CisgICAgICAgIHMgPSBwYXQudG9QYXR0ZXJuKCk7CisgICAgICAgIGxvZ2xuKCJwYXR0ZXJuID0gIiArIHMpOworICAgICAgICBpbnQgbW9kZTsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cjsKKyAgICAgICAgZm9yIChtb2RlID0gMDsgbW9kZSA8IDc7IG1vZGUrKykgeworICAgICAgICAgICAgcGF0LnNldFJvdW5kaW5nTW9kZShtb2RlKTsKKyAgICAgICAgICAgIGlmIChwYXQuZ2V0Um91bmRpbmdNb2RlKCkgIT0gbW9kZSkgeworICAgICAgICAgICAgICAgIGVycmxuKAorICAgICAgICAgICAgICAgICAgICAgIlNldFJvdW5kaW5nTW9kZSBvciBHZXRSb3VuZGluZ01vZGUgZmFpbGVkIGZvciBtb2RlPSIgKyBtb2RlKTsgCisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAvL2ZvciArMi41NSB3aXRoIFJvdW5kaW5nSW5jcmVtZW50PTEuMAorICAgICAgICAgICAgcGF0LnNldFJvdW5kaW5nSW5jcmVtZW50KDEuMCk7CisgICAgICAgICAgICByZXN1bHRTdHIgPSBwYXQuZm9ybWF0KFJvdW5kaW5nbnVtYmVyKTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAicm91bmQoIiArIChkb3VibGUpIFJvdW5kaW5nbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICsgIiwiICsgbW9kZSArICIsRkFMU0UpIHdpdGggUm91bmRpbmdJbmNyZW1lbnQ9MS4wPT0+IjsgCisgICAgICAgICAgICB2ZXJpZnkobWVzc2FnZSwgcmVzdWx0U3RyLCByZXN1bHRbaSsrXSk7CisgICAgICAgICAgICBtZXNzYWdlID0gIiI7CisgICAgICAgICAgICByZXN1bHRTdHIgPSAiIjsKKyAgICAKKyAgICAgICAgICAgIC8vZm9yIC0yLjU1IHdpdGggUm91bmRpbmdJbmNyZW1lbnQ9MS4wCisgICAgICAgICAgICByZXN1bHRTdHIgPSBwYXQuZm9ybWF0KFJvdW5kaW5nbnVtYmVyMSk7CisgICAgICAgICAgICBtZXNzYWdlID0gInJvdW5kKCIgKyAoZG91YmxlKSBSb3VuZGluZ251bWJlcjEKKyAgICAgICAgICAgICAgICAgICAgKyAiLCIgKyBtb2RlICsgIixGQUxTRSkgd2l0aCBSb3VuZGluZ0luY3JlbWVudD0xLjA9PT4iOyAKKyAgICAgICAgICAgIHZlcmlmeShtZXNzYWdlLCByZXN1bHRTdHIsIHJlc3VsdFtpKytdKTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiIjsKKyAgICAgICAgICAgIHJlc3VsdFN0ciA9ICIiOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qSGVscGVyIGZ1bmN0aW9ucyAqLworICAgIHB1YmxpYyB2b2lkIHZlcmlmeShTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIGdvdCwgZG91YmxlIGV4cGVjdGVkKSB7CisgICAgICAgIGxvZ2xuKG1lc3NhZ2UgKyBnb3QgKyAiIEV4cGVjdGVkIDogIiArIChsb25nKWV4cGVjdGVkKTsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkU3RyID0gIiI7CisgICAgICAgIGV4cGVjdGVkU3RyPWV4cGVjdGVkU3RyICsgKGxvbmcpZXhwZWN0ZWQ7CisgICAgICAgIGlmKCFnb3QuZXF1YWxzKGV4cGVjdGVkU3RyKSApIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogUm91bmQoKSBmYWlsZWQ6ICAiICsgbWVzc2FnZSArIGdvdCArICIgIEV4cGVjdGVkIDogIiArIGV4cGVjdGVkU3RyKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0ludGxUZXN0RGVjaW1hbEZvcm1hdFN5bWJvbHMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3REZWNpbWFsRm9ybWF0U3ltYm9scy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3YmYyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0ludGxUZXN0RGVjaW1hbEZvcm1hdFN5bWJvbHMuamF2YQpAQCAtMCwwICsxLDEyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0ludGxUZXN0RGVjaW1hbEZvcm1hdFN5bWJvbHMuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wMSAyMDoyNzoyMSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSkRLIDEuNGIxIDogamF2YS50ZXh0LkZvcm1hdC5JbnRsVGVzdERlY2ltYWxGb3JtYXRTeW1ib2xzCisgKiBTb3VyY2UgRmlsZTogamF2YS90ZXh0L2Zvcm1hdC9JbnRsVGVzdERlY2ltYWxGb3JtYXRTeW1ib2xzLmphdmEKKyAqKi8KKyAKKy8qCisgICAgQHRlc3QgMS40IDk4LzAzLzA2CisgICAgQHN1bW1hcnkgdGVzdCBJbnRlcm5hdGlvbmFsIERlY2ltYWwgRm9ybWF0IFN5bWJvbHMKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247CisKK3B1YmxpYyBjbGFzcyBJbnRsVGVzdERlY2ltYWxGb3JtYXRTeW1ib2xzIGV4dGVuZHMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2sKK3sKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEludGxUZXN0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgLy8gVGVzdCB0aGUgQVBJIG9mIERlY2ltYWxGb3JtYXRTeW1ib2xzOyBwcmltYXJpbHkgYSBzaW1wbGUgZ2V0L3NldCBzZXQuCisgICAgcHVibGljIHZvaWQgVGVzdFN5bWJvbHMoKQorICAgIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgZnIgPSBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLkZSRU5DSCk7CisKKyAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgZW4gPSBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLkVOR0xJU0gpOworCisgICAgICAgIGlmKGVuLmVxdWFscyhmcikpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogRW5nbGlzaCBEZWNpbWFsRm9ybWF0U3ltYm9scyBlcXVhbCB0byBGcmVuY2giKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGp1c3QgZG8gc29tZSBWRVJZIGJhc2ljIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0IGdldC9zZXQgd29yaworCisgICAgICAgIGNoYXIgemVybyA9IGVuLmdldFplcm9EaWdpdCgpOworICAgICAgICBmci5zZXRaZXJvRGlnaXQoemVybyk7CisgICAgICAgIGlmKGZyLmdldFplcm9EaWdpdCgpICE9IGVuLmdldFplcm9EaWdpdCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgWmVyb0RpZ2l0IGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgY2hhciBncm91cCA9IGVuLmdldEdyb3VwaW5nU2VwYXJhdG9yKCk7CisgICAgICAgIGZyLnNldEdyb3VwaW5nU2VwYXJhdG9yKGdyb3VwKTsKKyAgICAgICAgaWYoZnIuZ2V0R3JvdXBpbmdTZXBhcmF0b3IoKSAhPSBlbi5nZXRHcm91cGluZ1NlcGFyYXRvcigpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgR3JvdXBpbmdTZXBhcmF0b3IgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBjaGFyIGRlY2ltYWwgPSBlbi5nZXREZWNpbWFsU2VwYXJhdG9yKCk7CisgICAgICAgIGZyLnNldERlY2ltYWxTZXBhcmF0b3IoZGVjaW1hbCk7CisgICAgICAgIGlmKGZyLmdldERlY2ltYWxTZXBhcmF0b3IoKSAhPSBlbi5nZXREZWNpbWFsU2VwYXJhdG9yKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZ2V0L3NldCBEZWNpbWFsU2VwYXJhdG9yIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgY2hhciBwZXJNaWxsID0gZW4uZ2V0UGVyTWlsbCgpOworICAgICAgICBmci5zZXRQZXJNaWxsKHBlck1pbGwpOworICAgICAgICBpZihmci5nZXRQZXJNaWxsKCkgIT0gZW4uZ2V0UGVyTWlsbCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgUGVyTWlsbCBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgcGVyY2VudCA9IGVuLmdldFBlcmNlbnQoKTsKKyAgICAgICAgZnIuc2V0UGVyY2VudChwZXJjZW50KTsKKyAgICAgICAgaWYoZnIuZ2V0UGVyY2VudCgpICE9IGVuLmdldFBlcmNlbnQoKSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBnZXQvc2V0IFBlcmNlbnQgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBjaGFyIGRpZ2l0ID0gZW4uZ2V0RGlnaXQoKTsKKyAgICAgICAgZnIuc2V0RGlnaXQoZGlnaXQpOworICAgICAgICBpZihmci5nZXRQZXJjZW50KCkgIT0gZW4uZ2V0UGVyY2VudCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgUGVyY2VudCBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgcGF0dGVyblNlcGFyYXRvciA9IGVuLmdldFBhdHRlcm5TZXBhcmF0b3IoKTsKKyAgICAgICAgZnIuc2V0UGF0dGVyblNlcGFyYXRvcihwYXR0ZXJuU2VwYXJhdG9yKTsKKyAgICAgICAgaWYoZnIuZ2V0UGF0dGVyblNlcGFyYXRvcigpICE9IGVuLmdldFBhdHRlcm5TZXBhcmF0b3IoKSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBnZXQvc2V0IFBhdHRlcm5TZXBhcmF0b3IgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgaW5maW5pdHkgPSBlbi5nZXRJbmZpbml0eSgpOworICAgICAgICBmci5zZXRJbmZpbml0eShpbmZpbml0eSk7CisgICAgICAgIFN0cmluZyBpbmZpbml0eTIgPSBmci5nZXRJbmZpbml0eSgpOworICAgICAgICBpZighIGluZmluaXR5LmVxdWFscyhpbmZpbml0eTIpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgSW5maW5pdHkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgbmFuID0gZW4uZ2V0TmFOKCk7CisgICAgICAgIGZyLnNldE5hTihuYW4pOworICAgICAgICBTdHJpbmcgbmFuMiA9IGZyLmdldE5hTigpOworICAgICAgICBpZighIG5hbi5lcXVhbHMobmFuMikpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZ2V0L3NldCBOYU4gZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBjaGFyIG1pbnVzU2lnbiA9IGVuLmdldE1pbnVzU2lnbigpOworICAgICAgICBmci5zZXRNaW51c1NpZ24obWludXNTaWduKTsKKyAgICAgICAgaWYoZnIuZ2V0TWludXNTaWduKCkgIT0gZW4uZ2V0TWludXNTaWduKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZ2V0L3NldCBNaW51c1NpZ24gZmFpbGVkIik7CisgICAgICAgIH0KKworLy8gICAgICAgIGNoYXIgZXhwb25lbnRpYWwgPSBlbi5nZXRFeHBvbmVudGlhbFN5bWJvbCgpOworLy8gICAgICAgIGZyLnNldEV4cG9uZW50aWFsU3ltYm9sKGV4cG9uZW50aWFsKTsKKy8vICAgICAgICBpZihmci5nZXRFeHBvbmVudGlhbFN5bWJvbCgpICE9IGVuLmdldEV4cG9uZW50aWFsU3ltYm9sKCkpIHsKKy8vICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBnZXQvc2V0IEV4cG9uZW50aWFsIGZhaWxlZCIpOworLy8gICAgICAgIH0KKworICAgICAgICAvL0RlY2ltYWxGb3JtYXRTeW1ib2xzIGZvbyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scygpOyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisKKyAgICAgICAgZW4gPSAoRGVjaW1hbEZvcm1hdFN5bWJvbHMpIGZyLmNsb25lKCk7CisKKyAgICAgICAgaWYoISBlbi5lcXVhbHMoZnIpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IENsb25lIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERlY2ltYWxGb3JtYXRTeW1ib2xzQy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERlY2ltYWxGb3JtYXRTeW1ib2xzQy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMzN2Y3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0ludGxUZXN0RGVjaW1hbEZvcm1hdFN5bWJvbHNDLmphdmEKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdERlY2ltYWxGb3JtYXRTeW1ib2xzQy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjExICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYxLjguMSA6IGZvcm1hdCA6IEludGxUZXN0RGVjaW1hbEZvcm1hdFN5bWJvbHMKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L3RzZGNmbXN5LmNwcAorICoqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CisKKy8qKgorICogVGVzdHMgZm9yIERlY2ltYWxGb3JtYXRTeW1ib2xzCisgKiovCitwdWJsaWMgY2xhc3MgSW50bFRlc3REZWNpbWFsRm9ybWF0U3ltYm9sc0MgZXh0ZW5kcyBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13ayB7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBJbnRsVGVzdERlY2ltYWxGb3JtYXRTeW1ib2xzQygpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBBUEkgb2YgRGVjaW1hbEZvcm1hdFN5bWJvbHM7IHByaW1hcmlseSBhIHNpbXBsZSBnZXQvc2V0IHNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0U3ltYm9scygpIHsgICAgCisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIGZyID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5GUkVOQ0gpOyAgICAKKyAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgZW4gPSBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLkVOR0xJU0gpOworICAgIAorICAgICAgICBpZiAoZW4uZXF1YWxzKGZyKSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBFbmdsaXNoIERlY2ltYWxGb3JtYXRTeW1ib2xzIGVxdWFsIHRvIEZyZW5jaCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIGp1c3QgZG8gc29tZSBWRVJZIGJhc2ljIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0IGdldC9zZXQgd29yaworICAgIAorICAgICAgICBjaGFyIHplcm8gPSBlbi5nZXRaZXJvRGlnaXQoKTsKKyAgICAgICAgZnIuc2V0WmVyb0RpZ2l0KHplcm8pOworICAgICAgICBpZiAoZnIuZ2V0WmVyb0RpZ2l0KCkgIT0gZW4uZ2V0WmVyb0RpZ2l0KCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZ2V0L3NldCBaZXJvRGlnaXQgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgY2hhciBncm91cCA9IGVuLmdldEdyb3VwaW5nU2VwYXJhdG9yKCk7CisgICAgICAgIGZyLnNldEdyb3VwaW5nU2VwYXJhdG9yKGdyb3VwKTsKKyAgICAgICAgaWYgKGZyLmdldEdyb3VwaW5nU2VwYXJhdG9yKCkgIT0gZW4uZ2V0R3JvdXBpbmdTZXBhcmF0b3IoKSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBnZXQvc2V0IEdyb3VwaW5nU2VwYXJhdG9yIGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGNoYXIgZGVjaW1hbCA9IGVuLmdldERlY2ltYWxTZXBhcmF0b3IoKTsKKyAgICAgICAgZnIuc2V0RGVjaW1hbFNlcGFyYXRvcihkZWNpbWFsKTsKKyAgICAgICAgaWYgKGZyLmdldERlY2ltYWxTZXBhcmF0b3IoKSAhPSBlbi5nZXREZWNpbWFsU2VwYXJhdG9yKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZ2V0L3NldCBEZWNpbWFsU2VwYXJhdG9yIGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGNoYXIgcGVyTWlsbCA9IGVuLmdldFBlck1pbGwoKTsKKyAgICAgICAgZnIuc2V0UGVyTWlsbChwZXJNaWxsKTsKKyAgICAgICAgaWYgKGZyLmdldFBlck1pbGwoKSAhPSBlbi5nZXRQZXJNaWxsKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZ2V0L3NldCBQZXJNaWxsIGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGNoYXIgcGVyY2VudCA9IGVuLmdldFBlcmNlbnQoKTsKKyAgICAgICAgZnIuc2V0UGVyY2VudChwZXJjZW50KTsKKyAgICAgICAgaWYgKGZyLmdldFBlcmNlbnQoKSAhPSBlbi5nZXRQZXJjZW50KCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZ2V0L3NldCBQZXJjZW50IGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGNoYXIgZGlnaXQgPSBlbi5nZXREaWdpdCgpOworICAgICAgICBmci5zZXREaWdpdChkaWdpdCk7CisgICAgICAgIGlmIChmci5nZXRQZXJjZW50KCkgIT0gZW4uZ2V0UGVyY2VudCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgUGVyY2VudCBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBjaGFyIHBhdHRlcm5TZXBhcmF0b3IgPSBlbi5nZXRQYXR0ZXJuU2VwYXJhdG9yKCk7CisgICAgICAgIGZyLnNldFBhdHRlcm5TZXBhcmF0b3IocGF0dGVyblNlcGFyYXRvcik7CisgICAgICAgIGlmIChmci5nZXRQYXR0ZXJuU2VwYXJhdG9yKCkgIT0gZW4uZ2V0UGF0dGVyblNlcGFyYXRvcigpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgUGF0dGVyblNlcGFyYXRvciBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBTdHJpbmcgaW5maW5pdHkgPSBlbi5nZXRJbmZpbml0eSgpOworICAgICAgICBmci5zZXRJbmZpbml0eShpbmZpbml0eSk7CisgICAgICAgIFN0cmluZyBpbmZpbml0eTIgPSBmci5nZXRJbmZpbml0eSgpOworICAgICAgICBpZiAoIWluZmluaXR5LmVxdWFscyhpbmZpbml0eTIpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgSW5maW5pdHkgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgU3RyaW5nIG5hbiA9IGVuLmdldE5hTigpOworICAgICAgICBmci5zZXROYU4obmFuKTsKKyAgICAgICAgU3RyaW5nIG5hbjIgPSBmci5nZXROYU4oKTsKKyAgICAgICAgaWYgKCFuYW4uZXF1YWxzKG5hbjIpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGdldC9zZXQgTmFOIGZhaWxlZCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGNoYXIgbWludXNTaWduID0gZW4uZ2V0TWludXNTaWduKCk7CisgICAgICAgIGZyLnNldE1pbnVzU2lnbihtaW51c1NpZ24pOworICAgICAgICBpZiAoZnIuZ2V0TWludXNTaWduKCkgIT0gZW4uZ2V0TWludXNTaWduKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZ2V0L3NldCBNaW51c1NpZ24gZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gICAgICAgIGNoYXIgZXhwb25lbnRpYWwgPSBlbi5nZXRFeHBvbmVudGlhbFN5bWJvbCgpOworICAgICAgICAvLyAgICAgICAgZnIuc2V0RXhwb25lbnRpYWxTeW1ib2woZXhwb25lbnRpYWwpOworICAgICAgICAvLyAgICAgICAgaWYoZnIuZ2V0RXhwb25lbnRpYWxTeW1ib2woKSAhPSBlbi5nZXRFeHBvbmVudGlhbFN5bWJvbCgpKSB7CisgICAgICAgIC8vICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBnZXQvc2V0IEV4cG9uZW50aWFsIGZhaWxlZCIpOworICAgICAgICAvLyAgICAgICAgfQorICAgIAorICAgICAgICAvL0RlY2ltYWxGb3JtYXRTeW1ib2xzIGZvbyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scygpOyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisgICAgCisgICAgICAgIGVuID0gKERlY2ltYWxGb3JtYXRTeW1ib2xzKSBmci5jbG9uZSgpOworICAgIAorICAgICAgICBpZiAoIWVuLmVxdWFscyhmcikpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogQ2xvbmUgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIHN5bSA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgIAorICAgICAgICB2ZXJpZnkoMzQuNSwgIjAwLjAwIiwgc3ltLCAiMzQuNTAiKTsKKyAgICAgICAgc3ltLnNldERlY2ltYWxTZXBhcmF0b3IoJ1MnKTsKKyAgICAgICAgdmVyaWZ5KDM0LjUsICIwMC4wMCIsIHN5bSwgIjM0UzUwIik7CisgICAgICAgIHN5bS5zZXRQZXJjZW50KCdQJyk7CisgICAgICAgIHZlcmlmeSgzNC41LCAiMDAgJSIsIHN5bSwgIjM0NTAgUCIpOworICAgICAgICBzeW0uc2V0Q3VycmVuY3lTeW1ib2woIkQiKTsKKyAgICAgICAgdmVyaWZ5KDM0LjUsICJcdTAwYTQjIy4jIyIsIHN5bSwgIkQzNC41Iik7CisgICAgICAgIHN5bS5zZXRHcm91cGluZ1NlcGFyYXRvcignfCcpOworICAgICAgICB2ZXJpZnkoMzQ1Ni41LCAiMCwwMDAuIyMiLCBzeW0sICIzfDQ1NlM1Iik7CisgICAgfQorICAgIAorICAgIC8qKiBoZWxwZXIgZnVuY3Rpb25zKiovCisgICAgcHVibGljIHZvaWQgdmVyaWZ5KGRvdWJsZSB2YWx1ZSwgU3RyaW5nIHBhdHRlcm4sIERlY2ltYWxGb3JtYXRTeW1ib2xzIHN5bSwgU3RyaW5nIGV4cGVjdGVkKSB7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdChwYXR0ZXJuLCBzeW0pOworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oLTEpOworICAgICAgICBidWZmZXIgPSBkZi5mb3JtYXQodmFsdWUsIGJ1ZmZlciwgcG9zKTsKKyAgICAgICAgaWYoIWJ1ZmZlci50b1N0cmluZygpLmVxdWFscyhleHBlY3RlZCkpeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBmb3JtYXQgZmFpbGVkIGFmdGVyIHNldFN5bWJvbHMoKVxuIEV4cGVjdGVkIiArIAorICAgICAgICAgICAgICAgIGV4cGVjdGVkICsgIiwgR290ICIgKyBidWZmZXIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3ROdW1iZXJGb3JtYXQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3ROdW1iZXJGb3JtYXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNTYyMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdE51bWJlckZvcm1hdC5qYXZhCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3ROdW1iZXJGb3JtYXQuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNToxMSAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2MS44LjEgOiBmb3JtYXQgOiBJbnRsVGVzdE51bWJlckZvcm1hdAorICogU291cmNlIEZpbGU6ICRJQ1U0Q1Jvb3Qvc291cmNlL3Rlc3QvaW50bHRlc3QvdHNubWZtdC5jcHAKKyAqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKKworLyoqCisgKiBUaGlzIHRlc3QgZG9lcyByb3VuZC10cmlwIHRlc3RpbmcgKGZvcm1hdCAtPiBwYXJzZSAtPiBmb3JtYXQgLT4gcGFyc2UgLT4gZXRjLikgb2YKKyAqIE51bWJlckZvcm1hdC4KKyAqLworcHVibGljIGNsYXNzIEludGxUZXN0TnVtYmVyRm9ybWF0IGV4dGVuZHMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2sgeworICAgIAorICAgIHB1YmxpYyBOdW1iZXJGb3JtYXQgZk51bWJlckZvcm1hdCA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBJbnRsVGVzdE51bWJlckZvcm1hdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBJbnRlcm5hbCB1c2UKKyAgICAgKiovCisgICAgcHVibGljIHZvaWQgX3Rlc3RMb2NhbGUoamF2YS51dGlsLkxvY2FsZSBsb2NhbGUsIFN0cmluZyBsb2NhbGVOYW1lKSB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgIC8vICAgIGxvY2FsZSA9IGphdmEudXRpbC5Mb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgIC8vICAgIGxvY2FsZU5hbWUgPSBsb2NhbGUuZ2V0RGlzcGxheU5hbWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICBuYW1lID0gIk51bWJlciB0ZXN0IjsKKyAgICAgICAgbG9nbG4obmFtZSArICIgKCAiICsgbG9jYWxlTmFtZSArICIgKSAiKTsKKyAgICAgICAgZk51bWJlckZvcm1hdCA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICBUZXN0Rm9ybWF0KCk7CisgICAgCisgICAgICAgIG5hbWUgPSAiQ3VycmVuY3kgdGVzdCI7CisgICAgICAgIGxvZ2xuKG5hbWUgKyAiICgiICsgbG9jYWxlTmFtZSArICIpIik7CisgICAgICAgIGZOdW1iZXJGb3JtYXQgPSBOdW1iZXJGb3JtYXQuZ2V0Q3VycmVuY3lJbnN0YW5jZShsb2NhbGUpOworICAgICAgICBUZXN0Rm9ybWF0KC8qIHBhciAqLyk7CisgICAgCisgICAgICAgIG5hbWUgPSAiUGVyY2VudCB0ZXN0IjsKKyAgICAgICAgbG9nbG4obmFtZSArICIgKCIgKyBsb2NhbGVOYW1lICsgIikiKTsKKyAgICAgICAgZk51bWJlckZvcm1hdCA9IE51bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UobG9jYWxlKTsKKyAgICAgICAgVGVzdEZvcm1hdCgvKiBwYXIgKi8pOworICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogIGNhbGwgVGVzdEZvcm1hdCBmb3IgY3VycmVuY3ksIHBlcmNlbnQgYW5kIHBsYWluIG51bWJlciBpbnN0YW5jZXMKKyAgICAgKiovCisgICAgcHVibGljIHZvaWQgVGVzdExvY2FsZSgpIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyBsb2NhbGVOYW1lOyAgICAKKyAgICAgICAgamF2YS51dGlsLkxvY2FsZSBsb2NhbGUgPSBqYXZhLnV0aWwuTG9jYWxlLmdldERlZmF1bHQoKTsKKyAgICAgICAgbG9jYWxlTmFtZSA9IGxvY2FsZS5nZXREaXNwbGF5TmFtZSgpOworICAgICAgICAgICAgCisgICAgICAgIG5hbWUgPSAiTnVtYmVyIHRlc3QiOworICAgICAgICBsb2dsbihuYW1lICsgIiAoICIgKyBsb2NhbGVOYW1lICsgIiApICIpOworICAgICAgICBmTnVtYmVyRm9ybWF0ID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKCk7CisgICAgICAgIFRlc3RGb3JtYXQoKTsKKyAgICAKKyAgICAgICAgbmFtZSA9ICJDdXJyZW5jeSB0ZXN0IjsKKyAgICAgICAgbG9nbG4obmFtZSArICIgKCIgKyBsb2NhbGVOYW1lICsgIikiKTsKKyAgICAgICAgZk51bWJlckZvcm1hdCA9IE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKCk7CisgICAgICAgIFRlc3RGb3JtYXQoLyogcGFyICovKTsKKyAgICAKKyAgICAgICAgbmFtZSA9ICJQZXJjZW50IHRlc3QiOworICAgICAgICBsb2dsbihuYW1lICsgIiAoIiArIGxvY2FsZU5hbWUgKyAiKSIpOworICAgICAgICBmTnVtYmVyRm9ybWF0ID0gTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZSgpOworICAgICAgICBUZXN0Rm9ybWF0KC8qIHBhciAqLyk7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiAgY2FsbCB0cnlJdCB3aXRoIG1hbnkgdmFyaWF0aW9ucywgY2FsbGVkIGJ5IHRlc3RMb2NhbGUKKyAgICAgKiovCisgICAgcHVibGljIHZvaWQgVGVzdEZvcm1hdCgpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChmTnVtYmVyRm9ybWF0ID09IG51bGwpeworICAgICAgICAgICAgZXJybG4oIioqKiogRkFJTDogTnVsbCBmb3JtYXQgcmV0dXJuZWQgYnkgY3JlYXRlWHh4SW5zdGFuY2UuIik7CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIERlY2ltYWxGb3JtYXQgcyA9IChEZWNpbWFsRm9ybWF0KWZOdW1iZXJGb3JtYXQ7CisgICAgICAgIGxvZ2xuKCJwYXR0ZXJuIDoiICsgcy50b1BhdHRlcm4oKSk7CisgICAgCisgICAgICAgIHRyeUl0KC0yLjAyMTQ3MzA0ODQwMTMyZS02OCk7CisgICAgICAgIHRyeUl0KDMuODgwNTc4NTk1ODg4MTdlLTY4KTsgCisgICAgICAgIHRyeUl0KC0yLjY0NjUxMTEwNDg1OTQ1ZSs2NSk7CisgICAgICAgIHRyeUl0KDkuMjk1MjY4MTk0ODgzMzhlKzY0KTsKKyAgICAKKyAgICAgICAgdHJ5SXQoLTIuMDIxNDczMDQ4NDAxMzJlLTEwMCk7CisgICAgICAgIHRyeUl0KDMuODgwNTc4NTk1ODg4MTdlLTA5Nik7IAorICAgICAgICB0cnlJdCgtMi42NDY1MTExMDQ4NTk0NWUrMzA2KTsKKyAgICAgICAgdHJ5SXQoOS4yOTUyNjgxOTQ4ODMzOGUrMjUwKTsgCisgICAgCisgICAgICAgIHRyeUl0KC05LjE4MjI4MDU0NDk2NDAyZSs2NCk7CisgICAgICAgIHRyeUl0KC05LjY5NDEzMDM0NDU0MTkxZSs2NCk7CisgICAgCisgICAgICAgIHRyeUl0KC05LjE4MjI4MDU0NDk2NDAyZSsyNTUpOworICAgICAgICB0cnlJdCgtOS42OTQxMzAzNDQ1NDE5MWUrMjczKTsKKyAgICAKKyAgICAKKyAgICAgICAgdHJ5SXQoMS4yMzRlLTIwMCk7CisgICAgICAgIHRyeUl0KC0yLjNlLTE2OCk7CisgICAgCisgICAgICAgIHRyeUl0KERvdWJsZS5OYU4pOworICAgICAgICB0cnlJdChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpOworICAgICAgICB0cnlJdChEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpOworICAgIAorICAgICAgICB0cnlJdCgyNTE4ODc1MzEpOworICAgICAgICB0cnlJdCg1ZS0yMCAvIDkpOworICAgICAgICB0cnlJdCg1ZTIwIC8gOSk7CisgICAgICAgIHRyeUl0KDEuMjM0ZS01MCk7CisgICAgICAgIHRyeUl0KDkuOTk5OTk5OTk5OTk5OTYpOworICAgICAgICB0cnlJdCg5Ljk5OTk5OTk5OTk5OTk5Nik7CisgICAgCisgICAgICAgIHRyeUl0KEludGVnZXIuTUlOX1ZBTFVFKTsKKyAgICAgICAgdHJ5SXQoSW50ZWdlci5NQVhfVkFMVUUpOworICAgICAgICB0cnlJdCgoZG91YmxlKUludGVnZXIuTUlOX1ZBTFVFKTsKKyAgICAgICAgdHJ5SXQoKGRvdWJsZSlJbnRlZ2VyLk1BWF9WQUxVRSk7CisgICAgICAgIHRyeUl0KChkb3VibGUpSW50ZWdlci5NSU5fVkFMVUUgLSAxLjApOworICAgICAgICB0cnlJdCgoZG91YmxlKUludGVnZXIuTUFYX1ZBTFVFICsgMS4wKTsKKyAgICAKKyAgICAgICAgdHJ5SXQoNS4wIC8gOS4wICogMWUtMjApOworICAgICAgICB0cnlJdCg0LjAgLyA5LjAgKiAxZS0yMCk7CisgICAgICAgIHRyeUl0KDUuMCAvIDkuMCAqIDFlKzIwKTsKKyAgICAgICAgdHJ5SXQoNC4wIC8gOS4wICogMWUrMjApOworICAgIAorICAgICAgICB0cnlJdCgyMTQ3NDgzNjQ3Lik7CisgICAgICAgIHRyeUl0KDApOworICAgICAgICB0cnlJdCgwLjApOworICAgICAgICB0cnlJdCgxKTsKKyAgICAgICAgdHJ5SXQoMTApOworICAgICAgICB0cnlJdCgxMDApOworICAgICAgICB0cnlJdCgtMSk7CisgICAgICAgIHRyeUl0KC0xMCk7CisgICAgICAgIHRyeUl0KC0xMDApOworICAgICAgICB0cnlJdCgtMTkxMzg2MDM1Mik7CisgICAgCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTA7IGorKykgeworICAgICAgICAgICAgZG91YmxlIGQgPSBNYXRoLnJhbmRvbSgpKjJlMTAgLSAxZTEwOworICAgICAgICAgICAgdHJ5SXQoZCk7CisgICAgICAgICAgICAKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiAgcGVyZm9ybSB0ZXN0cyB1c2luZyBhTnVtYmVyIGFuZCBmTnVtYmVyRm9ybWF0LCBjYWxsZWQgaW4gbWFueSB2YXJpYXRpb25zCisgICAgICoqLworICAgIHB1YmxpYyB2b2lkIHRyeUl0KGRvdWJsZSBhTnVtYmVyKSB7ICAgIAorICAgICAgICBmaW5hbCBpbnQgREVQVEggPSAxMDsKKyAgICAgICAgZG91YmxlW10gbnVtYmVyID0gbmV3IGRvdWJsZVtERVBUSF07CisgICAgICAgIFN0cmluZ1tdIHN0cmluZyA9IG5ldyBTdHJpbmdbREVQVEhdOworICAgICAgICBpbnQgbnVtYmVyTWF0Y2ggPSAwOworICAgICAgICBpbnQgc3RyaW5nTWF0Y2ggPSAwOworICAgICAgICBib29sZWFuIGR1bXAgPSBmYWxzZTsKKyAgICAgICAgaW50IGk7CisgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBERVBUSDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyW2ldID0gYU51bWJlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyW2kgLSAxXSA9IGZOdW1iZXJGb3JtYXQucGFyc2Uoc3RyaW5nW2kgLSAxXSkuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbiBwZSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiKioqKiBGQUlMOiBQYXJzZSBvZiAiICsgc3RyaW5nW2ktMV0gKyAiIGZhaWxlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIHN0cmluZ1tpXSA9IGZOdW1iZXJGb3JtYXQuZm9ybWF0KG51bWJlcltpXSk7CisgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlck1hdGNoID09IDAgJiYgbnVtYmVyW2ldID09IG51bWJlcltpLTFdKQorICAgICAgICAgICAgICAgICAgICBudW1iZXJNYXRjaCA9IGk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobnVtYmVyTWF0Y2ggPiAwICYmIG51bWJlcltpXSAhPSBudW1iZXJbaS0xXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCIqKioqIEZBSUw6IE51bWVyaWMgbWlzbWF0Y2ggYWZ0ZXIgbWF0Y2guIik7CisgICAgICAgICAgICAgICAgICAgIGR1bXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN0cmluZ01hdGNoID09IDAgJiYgc3RyaW5nW2ldID09IHN0cmluZ1tpLTFdKQorICAgICAgICAgICAgICAgICAgICBzdHJpbmdNYXRjaCA9IGk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nTWF0Y2ggPiAwICYmIHN0cmluZ1tpXSAhPSBzdHJpbmdbaS0xXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCIqKioqIEZBSUw6IFN0cmluZyBtaXNtYXRjaCBhZnRlciBtYXRjaC4iKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChudW1iZXJNYXRjaCA+IDAgJiYgc3RyaW5nTWF0Y2ggPiAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgIAorICAgICAgICAgICAgaWYgKGkgPT0gREVQVEgpCisgICAgICAgICAgICAtLWk7CisgICAgCisgICAgICAgIGlmIChzdHJpbmdNYXRjaCA+IDIgfHwgbnVtYmVyTWF0Y2ggPiAyKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiKioqKiBGQUlMOiBObyBzdHJpbmcgYW5kL29yIG51bWJlciBtYXRjaCB3aXRoaW4gMiBpdGVyYXRpb25zLiIpOworICAgICAgICAgICAgZHVtcCA9IHRydWU7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKGR1bXApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGs9MDsgazw9aTsgKytrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvZ2xuKGsgKyAiOiAiICsgbnVtYmVyW2tdICsgIiBGPiAiICsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdba10gKyAiIFA+ICIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogIHBlcmZvcm0gdGVzdHMgdXNpbmcgYU51bWJlciBhbmQgZk51bWJlckZvcm1hdCwgY2FsbGVkIGluIG1hbnkgdmFyaWF0aW9ucworICAgICAqKi8KKyAgICBwdWJsaWMgdm9pZCB0cnlJdChpbnQgYU51bWJlcikgeworICAgICAgICBsb25nIG51bWJlcjs7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgc3RyaW5nTnVtID0gZk51bWJlckZvcm1hdC5mb3JtYXQoYU51bWJlcik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBudW1iZXIgPSBmTnVtYmVyRm9ybWF0LnBhcnNlKHN0cmluZ051bSkubG9uZ1ZhbHVlKCk7CisgICAgICAgIH0gY2F0Y2ggKGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbiBwZSkgeworICAgICAgICAgICAgZXJybG4oIioqKiogRkFJTDogUGFyc2Ugb2YgIiArIHN0cmluZ051bSArICIgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChudW1iZXIgIT0gYU51bWJlcikgeworICAgICAgICAgICAgZXJybG4oIioqKiogRkFJTDogUGFyc2Ugb2YgIiArIHN0cmluZ051bSArICIgZmFpbGVkLiBHb3Q6IiArIG51bWJlcgorICAgICAgICAgICAgICAgICsgIiBFeHBlY3RlZDoiICsgYU51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqICB0ZXN0IE51bWJlckZvcm1hdDo6Z2V0QXZhaWxhYmxlTG9jYWxlcworICAgICAqKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0QXZhaWxhYmxlTG9jYWxlcygpIHsKKyAgICAgICAgZmluYWwgamF2YS51dGlsLkxvY2FsZVtdIGxvY2FsZXMgPSBOdW1iZXJGb3JtYXQuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICBpbnQgY291bnQgPSBsb2NhbGVzLmxlbmd0aDsKKyAgICAgICAgbG9nbG4oY291bnQgKyAiIGF2YWlsYWJsZSBsb2NhbGVzIik7CisgICAgICAgIGlmIChjb3VudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgYWxsID0gIiI7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaTwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaSE9MCkKKyAgICAgICAgICAgICAgICAgICAgYWxsICs9ICIsICI7CisgICAgICAgICAgICAgICAgYWxsICs9IGxvY2FsZXNbaV0uZ2V0RGlzcGxheU5hbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZ2xuKGFsbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJybG4oIioqKiogRkFJTDogWmVybyBhdmFpbGFibGUgbG9jYWxlcyBvciBudWxsIGFycmF5IHBvaW50ZXIiKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogIGNhbGwgdGVzdExvY2FsZSBmb3IgYWxsIGxvY2FsZXMKKyAgICAgKiovICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RNb25zdGVyKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgU0VQID0gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBmaW5hbCBqYXZhLnV0aWwuTG9jYWxlW10gbG9jYWxlcyA9IE51bWJlckZvcm1hdC5nZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgIGNvdW50ID0gbG9jYWxlcy5sZW5ndGg7CisgICAgICAgIGlmIChjb3VudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCA9IDM7IC8vICBqdXN0IHRlc3QgMyBsb2NhbGVzIAorICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNvdW50OyArK2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBsb2NhbGVzW2ldLmdldERpc3BsYXlOYW1lKCk7CisgICAgICAgICAgICAgICAgbG9nbG4oU0VQKTsKKyAgICAgICAgICAgICAgICBfdGVzdExvY2FsZSgvKiBwYXIsICovbG9jYWxlc1tpXSwgbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgbG9nbG4oU0VQKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdE51bWJlckZvcm1hdEFQSS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdE51bWJlckZvcm1hdEFQSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlYzQzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L0ludGxUZXN0TnVtYmVyRm9ybWF0QVBJLmphdmEKQEAgLTAsMCArMSwyMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdE51bWJlckZvcm1hdEFQSS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA4LzAxIDIwOjI3OjIxICQgCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBKREsgMS40YjEgOiBqYXZhLnRleHQuRm9ybWF0LkludGxUZXN0TnVtYmVyRm9ybWF0QVBJCisgKiBTb3VyY2UgRmlsZTogamF2YS90ZXh0L2Zvcm1hdC9JbnRsVGVzdE51bWJlckZvcm1hdEFQSS5qYXZhCisgKiovCisKKy8qCisgICAgQHRlc3QgMS40IDk4LzAzLzA2CisgICAgQHN1bW1hcnkgdGVzdCBJbnRlcm5hdGlvbmFsIE51bWJlciBGb3JtYXQgQVBJCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0OworCitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBJbnRsVGVzdE51bWJlckZvcm1hdEFQSSBleHRlbmRzIGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrCit7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBJbnRsVGVzdE51bWJlckZvcm1hdEFQSSgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHZhcmlvdXMgZ2VuZXJpYyBBUEkgbWV0aG9kcyBpbiBEZWNpbWFsRm9ybWF0IHRvIGFjaGlldmUgMTAwJSBBUEkgY292ZXJhZ2UuCisgICAgcHVibGljIHZvaWQgVGVzdEFQSSgpCisgICAgeworICAgICAgICBsb2dsbigiTnVtYmVyRm9ybWF0IEFQSSB0ZXN0LS0tIik7IGxvZ2xuKCIiKTsKKyAgICAgICAgTG9jYWxlLnNldERlZmF1bHQoTG9jYWxlLkVOR0xJU0gpOworCisgICAgICAgIC8vID09PT09PT0gVGVzdCBjb25zdHJ1Y3RvcnMKKworICAgICAgICBsb2dsbigiVGVzdGluZyBOdW1iZXJGb3JtYXQgY29uc3RydWN0b3JzIik7CisKKyAgICAgICAgTnVtYmVyRm9ybWF0IGRlZiA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworCisgICAgICAgIE51bWJlckZvcm1hdCBmciA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZShMb2NhbGUuRlJFTkNIKTsKKworICAgICAgICBOdW1iZXJGb3JtYXQgY3VyID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoKTsKKworICAgICAgICBOdW1iZXJGb3JtYXQgY3VyX2ZyID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoTG9jYWxlLkZSRU5DSCk7CisKKyAgICAgICAgTnVtYmVyRm9ybWF0IHBlciA9IE51bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UoKTsKKworICAgICAgICBOdW1iZXJGb3JtYXQgcGVyX2ZyID0gTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZShMb2NhbGUuRlJFTkNIKTsKKyAgICAgICAgCisgICAgICAgIE51bWJlckZvcm1hdCBpbnRlZ2VyID0gTnVtYmVyRm9ybWF0LmdldEludGVnZXJJbnN0YW5jZSgpOworICAgICAgICAKKyAgICAgICAgTnVtYmVyRm9ybWF0IGludF9mciA9IE51bWJlckZvcm1hdC5nZXRJbnRlZ2VySW5zdGFuY2UoTG9jYWxlLkZSRU5DSCk7CisgICAgICAgIAorICAgICAgICAvL0ZpeCAiVGhlIHZhcmlhYmxlIGlzIG5ldmVyIHVzZWQiIGNvbXBpbGF0aW9uIHdhcm5pbmdzCisgICAgICAgIGxvZ2xuKCJDdXJyZW5jeSA6ICIgKyBjdXIuZm9ybWF0KDEyMzQuNSkpOworICAgICAgICBsb2dsbigiUGVyY2VudCA6ICIgKyBwZXIuZm9ybWF0KDEyMzQuNSkpOworICAgICAgICBsb2dsbigiSW50ZWdlciA6ICIgKyBpbnRlZ2VyLmZvcm1hdCgxMjM0LjUpKTsKKyAgICAgICAgbG9nbG4oIkludF9mciA6ICIgKyBpbnRfZnIuZm9ybWF0KDEyMzQuNSkpOworICAgICAgICAKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IGVxdWFsaXR5CisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgZXF1YWxpdHkgb3BlcmF0b3IiKTsKKworICAgICAgICBpZiggcGVyX2ZyLmVxdWFscyhjdXJfZnIpICkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiA9PSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vID09PT09PT0gVGVzdCB2YXJpb3VzIGZvcm1hdCgpIG1ldGhvZHMKKworICAgICAgICBsb2dsbigiVGVzdGluZyB2YXJpb3VzIGZvcm1hdCgpIG1ldGhvZHMiKTsKKworLy8gICAgICAgIGZpbmFsIGRvdWJsZSBkID0gLTEwNDU2LjAwMzc7IC8vIHRoaXMgYXBwZWFycyBhcyAtMTA0NTYuMDAzNzAwMDAwMDAxIG9uIE5UCisvLyAgICAgICAgZmluYWwgZG91YmxlIGQgPSAtMS4wNDU2MDAzN2UtNDsgLy8gdGhpcyBhcHBlYXJzIGFzIC0xLjA0NTYwMDM3MDAwMDAwMDJFLTQgb24gTlQKKyAgICAgICAgZmluYWwgZG91YmxlIGQgPSAtMTA0NTYuMDAzNzAwMDAwMDAwMDA7IC8vIHRoaXMgd29ya3MhCisgICAgICAgIGZpbmFsIGxvbmcgbCA9IDEwMDAwMDAwMDsKKworICAgICAgICBTdHJpbmcgcmVzMSA9IG5ldyBTdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHJlczIgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXMzID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzNCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlczUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXM2ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvczEgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MyID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zMyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvczQgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKworICAgICAgICByZXMxID0gY3VyX2ZyLmZvcm1hdChkKTsKKyAgICAgICAgbG9nbG4oICIiICsgZCArICIgZm9ybWF0dGVkIHRvICIgKyByZXMxKTsKKworICAgICAgICByZXMyID0gY3VyX2ZyLmZvcm1hdChsKTsKKyAgICAgICAgbG9nbG4oIiIgKyBsICsgIiBmb3JtYXR0ZWQgdG8gIiArIHJlczIpOworCisgICAgICAgIHJlczMgPSBjdXJfZnIuZm9ybWF0KGQsIHJlczMsIHBvczEpOworICAgICAgICBsb2dsbiggIiIgKyBkICsgIiBmb3JtYXR0ZWQgdG8gIiArIHJlczMpOworCisgICAgICAgIHJlczQgPSBjdXJfZnIuZm9ybWF0KGwsIHJlczQsIHBvczIpOworICAgICAgICBsb2dsbigiIiArIGwgKyAiIGZvcm1hdHRlZCB0byAiICsgcmVzNCk7CisKKyAgICAgICAgcmVzNSA9IGN1cl9mci5mb3JtYXQoZCwgcmVzNSwgcG9zMyk7CisgICAgICAgIGxvZ2xuKCIiICsgZCArICIgZm9ybWF0dGVkIHRvICIgKyByZXM1KTsKKworICAgICAgICByZXM2ID0gY3VyX2ZyLmZvcm1hdChsLCByZXM2LCBwb3M0KTsKKyAgICAgICAgbG9nbG4oIiIgKyBsICsgIiBmb3JtYXR0ZWQgdG8gIiArIHJlczYpOworCisKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IHBhcnNlKCkKKworICAgICAgICBsb2dsbigiVGVzdGluZyBwYXJzZSgpIik7CisKKy8vICAgICAgICBTdHJpbmcgdGV4dCA9IG5ldyBTdHJpbmcoIi0xMCw0NTYuMDAzNyIpOworICAgICAgICBTdHJpbmcgdGV4dCA9IG5ldyBTdHJpbmcoIi0xMDQ1NiwwMDM3Iik7CisgICAgICAgIFBhcnNlUG9zaXRpb24gcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIFBhcnNlUG9zaXRpb24gcG9zMDEgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgZG91YmxlIGQxID0gKChOdW1iZXIpZnIucGFyc2VPYmplY3QodGV4dCwgcG9zKSkuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgaWYoZDEgIT0gZCkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBSb3VuZHRyaXAgZmFpbGVkICh2aWEgcGFyc2UoKSkgZm9yICIgKyB0ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbih0ZXh0ICsgIiBwYXJzZWQgaW50byAiICsgZDEpOworCisgICAgICAgIGRvdWJsZSBkMiA9IGZyLnBhcnNlKHRleHQsIHBvczAxKS5kb3VibGVWYWx1ZSgpOworICAgICAgICBpZihkMiAhPSBkKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IFJvdW5kdHJpcCBmYWlsZWQgKHZpYSBwYXJzZSgpKSBmb3IgIiArIHRleHQpOworICAgICAgICB9CisgICAgICAgIGxvZ2xuKHRleHQgKyAiIHBhcnNlZCBpbnRvICIgKyBkMik7CisKKyAgICAgICAgZG91YmxlIGQzID0gMDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGQzID0gZnIucGFyc2UodGV4dCkuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBwYXJzZSgpIGZhaWxlZCIpOworICAgICAgICB9CisgICAgICAgIGlmKGQzICE9IGQpIHsKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogUm91bmR0cmlwIGZhaWxlZCAodmlhIHBhcnNlKCkpIGZvciAiICsgdGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4odGV4dCArICIgcGFyc2VkIGludG8gIiArIGQzKTsKKworCisgICAgICAgIC8vID09PT09PT0gVGVzdCBnZXR0ZXJzIGFuZCBzZXR0ZXJzCisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgZ2V0dGVycyBhbmQgc2V0dGVycyIpOworCisgICAgICAgIGZpbmFsIExvY2FsZVtdIGxvY2FsZXMgPSBOdW1iZXJGb3JtYXQuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICBsb25nIGNvdW50ID0gbG9jYWxlcy5sZW5ndGg7CisgICAgICAgIGxvZ2xuKCJHb3QgIiArIGNvdW50ICsgIiBsb2NhbGVzIiApOworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgICAgICBuYW1lID0gbG9jYWxlc1tpXS5nZXREaXNwbGF5TmFtZSgpOworICAgICAgICAgICAgbG9nbG4obmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBmci5zZXRQYXJzZUludGVnZXJPbmx5KCBkZWYuaXNQYXJzZUludGVnZXJPbmx5KCkgKTsKKyAgICAgICAgaWYoZnIuaXNQYXJzZUludGVnZXJPbmx5KCkgIT0gZGVmLmlzUGFyc2VJbnRlZ2VyT25seSgpICkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0UGFyc2VJbnRlZ2VyT25seSgpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgZnIuc2V0R3JvdXBpbmdVc2VkKCBkZWYuaXNHcm91cGluZ1VzZWQoKSApOworICAgICAgICBpZihmci5pc0dyb3VwaW5nVXNlZCgpICE9IGRlZi5pc0dyb3VwaW5nVXNlZCgpICkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogc2V0R3JvdXBpbmdVc2VkKCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBmci5zZXRNYXhpbXVtSW50ZWdlckRpZ2l0cyggZGVmLmdldE1heGltdW1JbnRlZ2VyRGlnaXRzKCkgKTsKKyAgICAgICAgaWYoZnIuZ2V0TWF4aW11bUludGVnZXJEaWdpdHMoKSAhPSBkZWYuZ2V0TWF4aW11bUludGVnZXJEaWdpdHMoKSApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldE1heGltdW1JbnRlZ2VyRGlnaXRzKCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBmci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cyggZGVmLmdldE1pbmltdW1JbnRlZ2VyRGlnaXRzKCkgKTsKKyAgICAgICAgaWYoZnIuZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKSAhPSBkZWYuZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKSApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBmci5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoIGRlZi5nZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSApOworICAgICAgICBpZihmci5nZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSAhPSBkZWYuZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCkgKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZyLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cyggZGVmLmdldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpICk7CisgICAgICAgIGlmKGZyLmdldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpICE9IGRlZi5nZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoKSApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IGdldFN0YXRpY0NsYXNzSUQoKQorCisvLyAgICAgICAgbG9nbG4oIlRlc3RpbmcgaW5zdGFuY2VvZigpIik7CisKKy8vICAgICAgICB0cnkgeworLy8gICAgICAgICAgICBOdW1iZXJGb3JtYXQgdGVzdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7CisKKy8vICAgICAgICAgICAgaWYgKCEgKHRlc3QgaW5zdGFuY2VvZiBEZWNpbWFsRm9ybWF0KSkgeworLy8gICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBpbnN0YW5jZW9mIGZhaWxlZCIpOworLy8gICAgICAgICAgICB9CisvLyAgICAgICAgfQorLy8gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworLy8gICAgICAgICAgICBlcnJsbigiRVJST1I6IENvdWxkbid0IGNyZWF0ZSBhIERlY2ltYWxGb3JtYXQiKTsKKy8vICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdFNpbXBsZURhdGVGb3JtYXRBUEkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3RTaW1wbGVEYXRlRm9ybWF0QVBJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzljMmQxMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvSW50bFRlc3RTaW1wbGVEYXRlRm9ybWF0QVBJLmphdmEKQEAgLTAsMCArMSwxODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9JbnRsVGVzdFNpbXBsZURhdGVGb3JtYXRBUEkuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNToxMSAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSkRLIDEuNGIxIDogamF2YS50ZXh0LkZvcm1hdC5JbnRsVGVzdFNpbXBsZURhdGVGb3JtYXRBUEkKKyAqIFNvdXJjZSBGaWxlOiBqYXZhL3RleHQvZm9ybWF0L0ludGxUZXN0U2ltcGxlRGF0ZUZvcm1hdEFQSS5qYXZhCisgKiovCisgCisvKgorICAgIEB0ZXN0IDEuNCA5OC8wMy8wNgorICAgIEBzdW1tYXJ5IHRlc3QgSW50ZXJuYXRpb25hbCBTaW1wbGUgRGF0ZSBGb3JtYXQgQVBJCisqLworLyoKKyhDKSBDb3B5cmlnaHQgVGFsaWdlbnQsIEluYy4gMTk5NiwgMTk5NyAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyhDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTYsIDE5OTcsIDIwMDEgLSBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgVGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBjb3B5cmlnaHRlZCBhbmQKK293bmVkIGJ5IFRhbGlnZW50LCBJbmMuLCBhIHdob2xseS1vd25lZCBzdWJzaWRpYXJ5IG9mIElCTS4gVGhlc2UgbWF0ZXJpYWxzIGFyZQorcHJvdmlkZWQgdW5kZXIgdGVybXMgb2YgYSBMaWNlbnNlIEFncmVlbWVudCBiZXR3ZWVuIFRhbGlnZW50IGFuZCBTdW4uIFRoaXMKK3RlY2hub2xvZ3kgaXMgcHJvdGVjdGVkIGJ5IG11bHRpcGxlIFVTIGFuZCBJbnRlcm5hdGlvbmFsIHBhdGVudHMuIFRoaXMgbm90aWNlIGFuZAorYXR0cmlidXRpb24gdG8gVGFsaWdlbnQgbWF5IG5vdCBiZSByZW1vdmVkLgorICBUYWxpZ2VudCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRhbGlnZW50LCBJbmMuCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LkZvcm1hdDsKK2ltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBJbnRsVGVzdFNpbXBsZURhdGVGb3JtYXRBUEkgZXh0ZW5kcyBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13aworeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgSW50bFRlc3RTaW1wbGVEYXRlRm9ybWF0QVBJKCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgdmFyaW91cyBnZW5lcmljIEFQSSBtZXRob2RzIGluIERlY2ltYWxGb3JtYXQgdG8gYWNoaWV2ZSAxMDAlIEFQSSBjb3ZlcmFnZS4KKyAgICBwdWJsaWMgdm9pZCBUZXN0QVBJKCkKKyAgICB7CisgICAgICAgIGxvZ2xuKCJTaW1wbGVEYXRlRm9ybWF0IEFQSSB0ZXN0LS0tIik7IGxvZ2xuKCIiKTsKKworICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChMb2NhbGUuRU5HTElTSCk7CisKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IGNvbnN0cnVjdG9ycworCisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIFNpbXBsZURhdGVGb3JtYXQgY29uc3RydWN0b3JzIik7CisKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBkZWYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBwYXR0ZXJuID0gbmV3IFN0cmluZygieXl5eS5NTS5kZCBHICdhdCcgaGg6bW06c3MgeiIpOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHBhdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KHBhdHRlcm4pOworCisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgcGF0X2ZyID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocGF0dGVybiwgTG9jYWxlLkZSRU5DSCk7CisKKyAgICAgICAgRGF0ZUZvcm1hdFN5bWJvbHMgc3ltYm9scyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scyhMb2NhbGUuRlJFTkNIKTsKKworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGN1c3QxID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocGF0dGVybiwgc3ltYm9scyk7CisKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IGNsb25lKCkgYW5kIGVxdWFsaXR5CisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgY2xvbmUoKSwgYXNzaWdubWVudCBhbmQgZXF1YWxpdHkgb3BlcmF0b3JzIik7CisKKyAgICAgICAgRm9ybWF0IGNsb25lID0gKEZvcm1hdCkgZGVmLmNsb25lKCk7CisgICAgICAgIGlmKCAhIGNsb25lLmVxdWFscyhkZWYpICkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBGb3JtYXQgY2xvbmUgb3IgZXF1YWxzIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gPT09PT09PSBUZXN0IHZhcmlvdXMgZm9ybWF0KCkgbWV0aG9kcworCisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHZhcmlvdXMgZm9ybWF0KCkgbWV0aG9kcyIpOworCisgICAgICAgIERhdGUgZCA9IG5ldyBEYXRlKChsb25nKTgzNzAzOTkyODA0Ni4wKTsKKworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzMSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlczIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zMSA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBGaWVsZFBvc2l0aW9uIHBvczIgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKworICAgICAgICByZXMxID0gZGVmLmZvcm1hdChkLCByZXMxLCBwb3MxKTsKKyAgICAgICAgbG9nbG4oICIiICsgZC5nZXRUaW1lKCkgKyAiIGZvcm1hdHRlZCB0byAiICsgcmVzMSk7CisKKyAgICAgICAgcmVzMiA9IGN1c3QxLmZvcm1hdChkLCByZXMyLCBwb3MyKTsKKyAgICAgICAgbG9nbG4oIiIgKyBkLmdldFRpbWUoKSArICIgZm9ybWF0dGVkIHRvICIgKyByZXMyKTsKKworICAgICAgICAvLyA9PT09PT09IFRlc3QgcGFyc2UoKQorCisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHBhcnNlKCkiKTsKKworICAgICAgICBTdHJpbmcgdGV4dCA9IG5ldyBTdHJpbmcoIjAyLzAzLzc2IDI6NTAgQU0sIENTVCIpOworICAgICAgICBEYXRlIHJlc3VsdDEgPSBuZXcgRGF0ZSgpOworICAgICAgICBEYXRlIHJlc3VsdDIgPSBuZXcgRGF0ZSgpOworICAgICAgICBQYXJzZVBvc2l0aW9uIHBvcz0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIHJlc3VsdDEgPSBkZWYucGFyc2UodGV4dCwgcG9zKTsKKyAgICAgICAgbG9nbG4odGV4dCArICIgcGFyc2VkIGludG8gIiArIHJlc3VsdDEpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXN1bHQyID0gZGVmLnBhcnNlKHRleHQpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHBhcnNlKCkgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4odGV4dCArICIgcGFyc2VkIGludG8gIiArIHJlc3VsdDIpOworCisgICAgICAgIC8vID09PT09PT0gVGVzdCBnZXR0ZXJzIGFuZCBzZXR0ZXJzCisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgZ2V0dGVycyBhbmQgc2V0dGVycyIpOworCisgICAgICAgIGZpbmFsIERhdGVGb3JtYXRTeW1ib2xzIHN5bXMgPSBwYXQuZ2V0RGF0ZUZvcm1hdFN5bWJvbHMoKTsKKyAgICAgICAgZGVmLnNldERhdGVGb3JtYXRTeW1ib2xzKHN5bXMpOworICAgICAgICBwYXRfZnIuc2V0RGF0ZUZvcm1hdFN5bWJvbHMoc3ltcyk7CisgICAgICAgIGlmKCAhIHBhdC5nZXREYXRlRm9ybWF0U3ltYm9scygpLmVxdWFscyhkZWYuZ2V0RGF0ZUZvcm1hdFN5bWJvbHMoKSkgKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldCBEYXRlRm9ybWF0U3ltYm9scygpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgRGF0ZUZvcm1hdFN5bWJvbHMgaGFzIG5vdCB0aGUgbWV0aG9kIGdldFR3b0RpZ2l0U3RhcnREYXRlKCk7CisgICAgICAgIC8vRGF0ZSBzdGFydERhdGUgPSBudWxsOyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisgICAgICAgIHRyeSB7CisvLyAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IHBhdC5nZXRUd29EaWdpdFN0YXJ0RGF0ZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBnZXRUd29EaWdpdFN0YXJ0RGF0ZSgpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKy8vICAgICAgICAgICAgcGF0X2ZyLnNldFR3b0RpZ2l0U3RhcnREYXRlKHN0YXJ0RGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHNldFR3b0RpZ2l0U3RhcnREYXRlKCkgZmFpbGVkIik7CisgICAgICAgIH0qLworCisgICAgICAgIC8vID09PT09PT0gVGVzdCBhcHBseVBhdHRlcm4oKQorCisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIGFwcGx5UGF0dGVybigpIik7CisKKyAgICAgICAgU3RyaW5nIHAxID0gbmV3IFN0cmluZygieXl5eS5NTS5kZCBHICdhdCcgaGg6bW06c3MgeiIpOworICAgICAgICBsb2dsbigiQXBwbHlpbmcgcGF0dGVybiAiICsgcDEpOworICAgICAgICBwYXQuYXBwbHlQYXR0ZXJuKHAxKTsKKworICAgICAgICBTdHJpbmcgczIgPSBwYXQudG9QYXR0ZXJuKCk7CisgICAgICAgIGxvZ2xuKCJFeHRyYWN0ZWQgcGF0dGVybiBpcyAiICsgczIpOworICAgICAgICBpZiggISBzMi5lcXVhbHMocDEpICkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiB0b1BhdHRlcm4oKSByZXN1bHQgZGlkIG5vdCBtYXRjaCBwYXR0ZXJuIGFwcGxpZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGxvZ2xuKCJBcHBseWluZyBwYXR0ZXJuICIgKyBwMSk7CisgICAgICAgIHBhdC5hcHBseUxvY2FsaXplZFBhdHRlcm4ocDEpOworICAgICAgICBTdHJpbmcgczMgPSBwYXQudG9Mb2NhbGl6ZWRQYXR0ZXJuKCk7CisgICAgICAgIGxvZ2xuKCJFeHRyYWN0ZWQgcGF0dGVybiBpcyAiICsgczMpOworICAgICAgICBpZiggISBzMy5lcXVhbHMocDEpICkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SOiB0b0xvY2FsaXplZFBhdHRlcm4oKSByZXN1bHQgZGlkIG5vdCBtYXRjaCBwYXR0ZXJuIGFwcGxpZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vID09PT09PT0gVGVzdCBnZXRTdGF0aWNDbGFzc0lEKCkKKworLy8gICAgICAgIGxvZ2xuKCJUZXN0aW5nIGluc3RhbmNlb2YiKTsKKworLy8gICAgICAgIHRyeSB7CisvLyAgICAgICAgICAgIERhdGVGb3JtYXQgdGVzdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCk7CisKKy8vICAgICAgICAgICAgaWYgKCEgKHRlc3QgaW5zdGFuY2VvZiBTaW1wbGVEYXRlRm9ybWF0KSkgeworLy8gICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBpbnN0YW5jZW9mIGZhaWxlZCIpOworLy8gICAgICAgICAgICB9CisvLyAgICAgICAgfQorLy8gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworLy8gICAgICAgICAgICBlcnJsbigiRVJST1I6IENvdWxkbid0IGNyZWF0ZSBhIFNpbXBsZURhdGVGb3JtYXQiKTsKKy8vICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9OdW1iZXJGb3JtYXRSZWdyZXNzaW9uVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9OdW1iZXJGb3JtYXRSZWdyZXNzaW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0YjJkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L051bWJlckZvcm1hdFJlZ3Jlc3Npb25UZXN0LmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9OdW1iZXJGb3JtYXRSZWdyZXNzaW9uVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjExICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYxLjguMSA6IGZvcm1hdCA6IE51bWJlckZvcm1hdFJlZ3Jlc3Npb25UZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9udW1yZ3RzLmNwcAorICoqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uKjsKKworLyoqIAorICogUGVyZm9ybXMgcmVncmVzc2lvbiB0ZXN0IGZvciBNZXNzYWdlRm9ybWF0CisgKiovCitwdWJsaWMgY2xhc3MgTnVtYmVyRm9ybWF0UmVncmVzc2lvblRlc3QgZXh0ZW5kcyBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13ayB7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgbmV3IE51bWJlckZvcm1hdFJlZ3Jlc3Npb25UZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBhbHBoYVdvcmtzIHVwZ3JhZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE2MTEwMCgpIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IG5mID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIG5mLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygxKTsKKyAgICAgICAgbmYuc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKDEpOworICAgICAgICBkb3VibGUgYSA9IC0wLjA5OworICAgICAgICBTdHJpbmcgcyA9IG5mLmZvcm1hdChhKTsKKyAgICAgICAgbG9nbG4oYSArICIgeCAiICsKKyAgICAgICAgICAgICAgKChEZWNpbWFsRm9ybWF0KSBuZikudG9QYXR0ZXJuKCkgKyAiID0gIiArIHMpOworICAgICAgICBpZiAoIXMuZXF1YWxzKCItMC4xIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRGF0ZUZvcm1hdCBzaG91bGQgY2FsbCBzZXRJbnRlZ2VyUGFyc2VPbmx5KFRSVUUpIG9uIGFkb3B0ZWQKKyAgICAgKiBOdW1iZXJGb3JtYXQgb2JqZWN0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SjY5MSgpIHsKKyAgICAgICAgCisgICAgICAgIExvY2FsZSBsb2MgPSBuZXcgTG9jYWxlKCJmciIsICJDSCIpOworICAgIAorICAgICAgICAvLyBzZXQgdXAgdGhlIGlucHV0IGRhdGUgc3RyaW5nICYgZXhwZWN0ZWQgb3V0cHV0CisgICAgICAgIFN0cmluZyB1ZHQgPSAiMTEuMTAuMjAwMCI7CisgICAgICAgIFN0cmluZyBleHAgPSAiMTEuMTAuMDAiOworICAgIAorICAgICAgICAvLyBjcmVhdGUgYSBDYWxlbmRhciBmb3IgdGhpcyBsb2NhbGUKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UobG9jKTsKKyAgICAKKyAgICAgICAgLy8gY3JlYXRlIGEgTnVtYmVyRm9ybWF0IGZvciB0aGlzIGxvY2FsZQorICAgICAgICBOdW1iZXJGb3JtYXQgbmYgPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UobG9jKTsKKyAgICAKKyAgICAgICAgLy8gKioqIEhlcmUncyB0aGUga2V5OiBXZSBkb24ndCB3YW50IHRvIGhhdmUgdG8gZG8gVEhJUzoKKyAgICAgICAgLy9uZi5zZXRQYXJzZUludGVnZXJPbmx5KHRydWUpOworICAgIAorICAgICAgICAvLyBjcmVhdGUgdGhlIERhdGVGb3JtYXQKKyAgICAgICAgRGF0ZUZvcm1hdCBkZiA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKERhdGVGb3JtYXQuU0hPUlQsIGxvYyk7CisgICAgCisgICAgICAgIGRmLnNldENhbGVuZGFyKGNhbCk7CisgICAgICAgIGRmLnNldE51bWJlckZvcm1hdChuZik7CisgICAgCisgICAgICAgIC8vIHNldCBwYXJzaW5nIHRvIGxlbmllbnQgJiBwYXJzZQorICAgICAgICBEYXRlIHVsb2NkYXQgPSBuZXcgRGF0ZSgpOworICAgICAgICBkZi5zZXRMZW5pZW50KHRydWUpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdWxvY2RhdCA9IGRmLnBhcnNlKHVkdCk7CisgICAgICAgIH0gY2F0Y2ggKGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbiBwZSkgeworICAgICAgICAgICAgZXJybG4ocGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBmb3JtYXQgYmFjayB0byBhIHN0cmluZworICAgICAgICBTdHJpbmcgb3V0U3RyaW5nID0gZGYuZm9ybWF0KHVsb2NkYXQpOworICAgIAorICAgICAgICBpZiAoIW91dFN0cmluZy5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyB1ZHQgKyAiID0+ICIgKyBvdXRTdHJpbmcpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgZ2V0SW50ZWdlckluc3RhbmNlKCk7CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQ0MDgwNjYoKSB7CisgICAgICAgIAorICAgICAgICBOdW1iZXJGb3JtYXQgbmYxID0gTnVtYmVyRm9ybWF0LmdldEludGVnZXJJbnN0YW5jZSgpOworICAgICAgICBOdW1iZXJGb3JtYXQgbmYyID0gTnVtYmVyRm9ybWF0LmdldEludGVnZXJJbnN0YW5jZShMb2NhbGUuQ0hJTkEpOworICAgIAorICAgICAgICAvL3Rlc3QgaXNQYXJzZUludGVnZXJPbmx5CisgICAgICAgIGlmICghbmYxLmlzUGFyc2VJbnRlZ2VyT25seSgpIHx8ICFuZjIuaXNQYXJzZUludGVnZXJPbmx5KCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQgOiBJbnRlZ2VyIE51bWJlciBGb3JtYXQgSW5zdGFuY2Ugc2hvdWxkIHNldCBzZXRQYXJzZUludGVnZXJPbmx5KHRydWUpIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy9UZXN0IGZvcm1hdAorICAgICAgICB7CisgICAgICAgICAgICBkb3VibGVbXSBkYXRhID0geworICAgICAgICAgICAgICAgIC0zLjc1LCAtMi41LCAtMS41LCAKKyAgICAgICAgICAgICAgICAtMS4yNSwgMCwgICAgMS4wLCAKKyAgICAgICAgICAgICAgICAxLjI1LCAgMS41LCAgMi41LCAKKyAgICAgICAgICAgICAgICAzLjc1LCAgMTAuMCwgMjU1LjUKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgU3RyaW5nW10gZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAgICAgIi00IiwgIi0yIiwgIi0yIiwKKyAgICAgICAgICAgICAgICAiLTEiLCAiMCIsICAiMSIsCisgICAgICAgICAgICAgICAgIjEiLCAgIjIiLCAgIjIiLAorICAgICAgICAgICAgICAgICI0IiwgICIxMCIsICIyNTYiCisgICAgICAgICAgICAgICAgfTsKKyAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBuZjEuZm9ybWF0KGRhdGFbaV0pOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmVxdWFscyhleHBlY3RlZFtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZhaWxlZCA9PiBTb3VyY2U6ICIgKyBEb3VibGUudG9TdHJpbmcoZGF0YVtpXSkgCisgICAgICAgICAgICAgICAgICAgICAgICArICI7Rm9ybWF0dGVkIDogIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICAgKyAiO2J1dCBleHBlY3R0ZWQ6ICIgKyBleHBlY3RlZFtpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vVGVzdCBwYXJzZSwgUGFyc2luZyBzaG91bGQgc3RvcCBhdCAiLiIKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGRhdGFbXSA9IHsKKyAgICAgICAgICAgICAgICAiLTMuNzUiLCAiLTIuNSIsICItMS41IiwgCisgICAgICAgICAgICAgICAgIi0xLjI1IiwgIjAiLCAgICAiMS4wIiwgCisgICAgICAgICAgICAgICAgIjEuMjUiLCAgIjEuNSIsICAiMi41IiwgCisgICAgICAgICAgICAgICAgIjMuNzUiLCAgIjEwLjAiLCAiMjU1LjUiCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGxvbmdbXSBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgICAgICAtMywgLTIsIC0xLAorICAgICAgICAgICAgICAgIC0xLCAwLCAgMSwKKyAgICAgICAgICAgICAgICAxLCAgMSwgIDIsCisgICAgICAgICAgICAgICAgMywgIDEwLCAyNTUKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOdW1iZXIgbiA9IG51bGw7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IG5mMS5wYXJzZShkYXRhW2ldKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBMb25nKSB8fCAobiBpbnN0YW5jZW9mIEludGVnZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsZWQ6IEludGVnZXIgTnVtYmVyIEZvcm1hdCBzaG91bGQgcGFyc2Ugc3RyaW5nIHRvIExvbmcvSW50ZWdlciIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobi5sb25nVmFsdWUoKSAhPSBleHBlY3RlZFtpXSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbGVkPT4gU291cmNlOiAiICsgZGF0YVtpXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIjtyZXN1bHQgOiAiICsgbi50b1N0cmluZygpCisgICAgICAgICAgICAgICAgICAgICAgICArICI7ZXhwZWN0ZWQgOiIgKyBMb25nLnRvU3RyaW5nKGV4cGVjdGVkW2ldKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vVGVzdCBOZXcgc2VyaWFsaXplZCBEZWNpbWFsRm9ybWF0KDIuMCkgcmVhZCBvbGQgc2VyaWFsaXplZCBmb3JtcyBvZiBEZWNpbWFsRm9ybWF0KDEuMy4xLjEpCisgICAgcHVibGljIHZvaWQgVGVzdFNlcmlhbGl6YXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb257CisgICAgICAgIGJ5dGVbXVtdIGNvbnRlbnRzID0gTnVtYmVyRm9ybWF0U2VyaWFsVGVzdERhdGEuZ2V0Q29udGVudCgpOworICAgICAgICBkb3VibGUgZGF0YSA9IDEyMzQuNTY7CisgICAgICAgIFN0cmluZ1tdIGV4cGVjdGVkID0geworICAgICAgICAgICAgIjEsMjM0LjU2IiwgIiQxLDIzNC41NiIsICIxMjMsNDU2JSIsICIxLjIzNDU2RTMifTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgICAgIE9iamVjdElucHV0U3RyZWFtIG9pcyA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oY29udGVudHNbaV0pKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgTnVtYmVyRm9ybWF0IGZvcm1hdCA9IChOdW1iZXJGb3JtYXQpIG9pcy5yZWFkT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGZvcm1hdC5mb3JtYXQoZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lcXVhbHMoZXhwZWN0ZWRbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJPSzogRGVzZXJpYWxpemVkIGJvZ3VzIE51bWJlckZvcm1hdChuZXcgdmVyc2lvbiByZWFkIG9sZCB2ZXJzaW9uKSIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiB0aGUgdGVzdCBkYXRhIGZvcm1hdHMgYXJlIG5vdCBldXFhbCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9OdW1iZXJGb3JtYXRSb3VuZFRyaXBUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L051bWJlckZvcm1hdFJvdW5kVHJpcFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OWE0ODBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9OdW1iZXJGb3JtYXRSb3VuZFRyaXBUZXN0LmphdmEKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9OdW1iZXJGb3JtYXRSb3VuZFRyaXBUZXN0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MTIgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0aW5nIEZyb206IElDVTRDIHYxLjguMSA6IGZvcm1hdCA6IE51bWJlckZvcm1hdFJvdW5kVHJpcFRlc3QKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L25tZm10cnQuY3BwCisgKiovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0OworCitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworLyoqIAorICogUGVyZm9ybXMgcm91bmQtdHJpcCB0ZXN0cyBmb3IgTnVtYmVyRm9ybWF0CisgKiovCitwdWJsaWMgY2xhc3MgTnVtYmVyRm9ybWF0Um91bmRUcmlwVGVzdCBleHRlbmRzIGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrIHsKKyAgICAKKyAgICBwdWJsaWMgZG91YmxlIE1BWF9FUlJPUiA9IDFlLTE0OworICAgIHB1YmxpYyBkb3VibGUgbWF4X251bWVyaWNfZXJyb3IgPSAwLjA7CisgICAgcHVibGljIGRvdWJsZSBtaW5fbnVtZXJpY19lcnJvciA9IDEuMDsKKyAgICBwdWJsaWMgYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7CisgICAgcHVibGljIGJvb2xlYW4gU1RSSU5HX0NPTVBBUkUgPSBmYWxzZTsKKyAgICBwdWJsaWMgYm9vbGVhbiBFWEFDVF9OVU1FUklDX0NPTVBBUkUgPSBmYWxzZTsKKyAgICBwdWJsaWMgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworICAgIHB1YmxpYyBib29sZWFuIHF1aWNrID0gdHJ1ZTsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IE51bWJlckZvcm1hdFJvdW5kVHJpcFRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3ROdW1iZXJGb3JtYXRSb3VuZFRyaXAoKSB7CisgICAgCisgICAgICAgIE51bWJlckZvcm1hdCBmbXQgPSBudWxsOworICAgIAorICAgICAgICBsb2dsbigiRGVmYXVsdCBMb2NhbGUiKTsKKyAgICAgICAgCisgICAgICAgIGxvZ2xuKCJEZWZhdWx0IE51bWJlciBmb3JtYXQiKTsKKyAgICAgICAgZm10ID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKCk7CisgICAgICAgIF90ZXN0KGZtdCk7CisgICAgCisgICAgICAgIGxvZ2xuKCJDdXJyZW5jeSBGb3JtYXQiKTsKKyAgICAgICAgZm10ID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoKTsKKyAgICAgICAgX3Rlc3QoZm10KTsKKyAgICAKKyAgICAgICAgbG9nbG4oIlBlcmNlbnQgRm9ybWF0Iik7CisgICAgICAgIGZtdCA9IE51bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UoKTsKKyAgICAgICAgX3Rlc3QoZm10KTsKKyAgICAKKyAgICAKKyAgICAgICAgaW50IGxvY0NvdW50ID0gMDsKKyAgICAgICAgZmluYWwgTG9jYWxlW10gbG9jID0gTnVtYmVyRm9ybWF0LmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgaWYocXVpY2spIHsKKyAgICAgICAgICAgIGlmKGxvY0NvdW50ID4gNSkKKyAgICAgICAgICAgICAgICBsb2NDb3VudCA9IDU7CisgICAgICAgICAgICBsb2dsbigiUXVpY2sgbW9kZTogb25seSBfdGVzdGluZyBmaXJzdCA1IExvY2FsZXMiKTsKKyAgICAgICAgfQorICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbG9jQ291bnQ7ICsraSkgeworICAgICAgICAgICAgbG9nbG4obG9jW2ldLmdldERpc3BsYXlOYW1lKCkpOworICAgIAorICAgICAgICAgICAgZm10ID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKGxvY1tpXSk7CisgICAgICAgICAgICBfdGVzdChmbXQpOworICAgICAgICAKKyAgICAgICAgICAgIGZtdCA9IE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKGxvY1tpXSk7CisgICAgICAgICAgICBfdGVzdChmbXQpOworICAgICAgICAKKyAgICAgICAgICAgIGZtdCA9IE51bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UobG9jW2ldKTsKKyAgICAgICAgICAgIF90ZXN0KGZtdCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgbG9nbG4oIk51bWVyaWMgZXJyb3IgIiArIG1pbl9udW1lcmljX2Vycm9yICsgIiB0byAiICsgbWF4X251bWVyaWNfZXJyb3IpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSByYW5kb20gdmFsdWUgZnJvbSAtcmFuZ2UuLityYW5nZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIHJhbmRvbURvdWJsZShkb3VibGUgcmFuZ2UpIHsKKyAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiByYW5nZTsKKyAgICB9IAorICAgIAorICAgIHB1YmxpYyB2b2lkIF90ZXN0KE51bWJlckZvcm1hdCBmbXQpIHsKKyAgICAKKyAgICAgICAgX3Rlc3QoZm10LCBEb3VibGUuTmFOKTsKKyAgICAgICAgX3Rlc3QoZm10LCBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpOworICAgICAgICBfdGVzdChmbXQsIERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSk7CisgICAgCisgICAgICAgIF90ZXN0KGZtdCwgNTAwKTsKKyAgICAgICAgX3Rlc3QoZm10LCAwKTsKKyAgICAgICAgX3Rlc3QoZm10LCAtMCk7CisgICAgICAgIF90ZXN0KGZtdCwgMC4wKTsKKyAgICAgICAgZG91YmxlIG5lZ1plcm8gPSAwLjA7CisgICAgICAgIG5lZ1plcm8gLz0gLTEuMDsKKyAgICAgICAgX3Rlc3QoZm10LCBuZWdaZXJvKTsKKyAgICAgICAgX3Rlc3QoZm10LCA5MjIzMzcyMDM2ODU0Nzc1ODA4LjBkKTsKKyAgICAgICAgX3Rlc3QoZm10LCAtOTIyMzM3MjAzNjg1NDc3NTgwOS4wZCk7CisgICAgICAgIC8vX3Rlc3QoZm10LCA2LjkzNjA2NTg3NjEwMDQ5M0U3NGQpOworICAgICAgICAKKyAgICAvLyAgICBfdGVzdChmbXQsIDYuMjEyMTIyODQ1MjgxOTA5RTQ4ZCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgIAorICAgICAgICAgICAgX3Rlc3QoZm10LCByYW5kb21Eb3VibGUoMSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBfdGVzdChmbXQsIHJhbmRvbURvdWJsZSgxMDAwMCkpOworICAgIAorICAgICAgICAgICAgX3Rlc3QoZm10LCBNYXRoLmZsb29yKChyYW5kb21Eb3VibGUoMTAwMDApKSkpOworICAgIAorICAgICAgICAgICAgX3Rlc3QoZm10LCByYW5kb21Eb3VibGUoMWU1MCkpOworICAgIAorICAgICAgICAgICAgX3Rlc3QoZm10LCByYW5kb21Eb3VibGUoMWUtNTApKTsKKyAgICAKKyAgICAgICAgICAgIF90ZXN0KGZtdCwgcmFuZG9tRG91YmxlKDFlMTAwKSk7CisgICAgCisgICAgICAgICAgICBfdGVzdChmbXQsIHJhbmRvbURvdWJsZSgxZTc1KSk7CisgICAgCisgICAgICAgICAgICBfdGVzdChmbXQsIHJhbmRvbURvdWJsZSgxZTMwOCkgLyAoKERlY2ltYWxGb3JtYXQpIGZtdCkuZ2V0TXVsdGlwbGllcigpKTsKKyAgICAKKyAgICAgICAgICAgIF90ZXN0KGZtdCwgcmFuZG9tRG91YmxlKDFlNzUpIC8gKChEZWNpbWFsRm9ybWF0KSBmbXQpLmdldE11bHRpcGxpZXIoKSk7CisgICAgCisgICAgICAgICAgICBfdGVzdChmbXQsIHJhbmRvbURvdWJsZSgxZTY1KSAvICgoRGVjaW1hbEZvcm1hdCkgZm10KS5nZXRNdWx0aXBsaWVyKCkpOworICAgIAorICAgICAgICAgICAgX3Rlc3QoZm10LCByYW5kb21Eb3VibGUoMWUtMjkyKSk7CisgICAgCisgICAgICAgICAgICBfdGVzdChmbXQsIHJhbmRvbURvdWJsZSgxZS03OCkpOworICAgIAorICAgICAgICAgICAgX3Rlc3QoZm10LCByYW5kb21Eb3VibGUoMWUtMzIzKSk7CisgICAgCisgICAgICAgICAgICBfdGVzdChmbXQsIHJhbmRvbURvdWJsZSgxZS0xMDApKTsKKyAgICAKKyAgICAgICAgICAgIF90ZXN0KGZtdCwgcmFuZG9tRG91YmxlKDFlLTc4KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgX3Rlc3QoTnVtYmVyRm9ybWF0IGZtdCwgZG91YmxlIHZhbHVlKSB7CisgICAgICAgIF90ZXN0KGZtdCwgbmV3IERvdWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBfdGVzdChOdW1iZXJGb3JtYXQgZm10LCBsb25nIHZhbHVlKSB7CisgICAgICAgIF90ZXN0KGZtdCwgbmV3IExvbmcodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgX3Rlc3QoTnVtYmVyRm9ybWF0IGZtdCwgTnVtYmVyIHZhbHVlKSB7CisgICAgICAgIGxvZ2xuKCJ0ZXN0IGRhdGEgPSAiICsgdmFsdWUpOworICAgICAgICBmbXQuc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKDk5OSk7CisgICAgICAgIFN0cmluZyBzLCBzMjsKKyAgICAgICAgaWYgKHZhbHVlLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImphdmEubGFuZy5Eb3VibGUiKSkKKyAgICAgICAgICAgIHMgPSBmbXQuZm9ybWF0KHZhbHVlLmRvdWJsZVZhbHVlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzID0gZm10LmZvcm1hdCh2YWx1ZS5sb25nVmFsdWUoKSk7CisgICAgCisgICAgICAgIE51bWJlciBuID0gbmV3IERvdWJsZSgwKTsKKyAgICAgICAgYm9vbGVhbiBzaG93ID0gdmVyYm9zZTsKKyAgICAgICAgaWYgKERFQlVHKQorICAgICAgICAgICAgbG9nbG4oCisgICAgICAgICAgICAvKnZhbHVlLmdldFN0cmluZyh0ZW1wKSArKi8gIiBGPiAiICsgcyk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBuID0gZm10LnBhcnNlKHMpOworICAgICAgICB9IGNhdGNoIChqYXZhLnRleHQuUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChERUJVRykKKyAgICAgICAgICAgIGxvZ2xuKHMgKyAiIFA+ICIgLyorIG4uZ2V0U3RyaW5nKHRlbXApKi8pOworICAgIAorICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiamF2YS5sYW5nLkRvdWJsZSIpKQorICAgICAgICAgICAgczIgPSBmbXQuZm9ybWF0KG4uZG91YmxlVmFsdWUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHMyID0gZm10LmZvcm1hdChuLmxvbmdWYWx1ZSgpKTsKKyAgICAKKyAgICAgICAgaWYgKERFQlVHKQorICAgICAgICAgICAgbG9nbG4oLypuLmdldFN0cmluZyh0ZW1wKSArKi8gIiBGPiAiICsgczIpOworICAgIAorICAgICAgICBpZiAoU1RSSU5HX0NPTVBBUkUpIHsKKyAgICAgICAgICAgIGlmICghcy5lcXVhbHMoczIpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIioqKiBTVFJJTkcgRVJST1IgXCIiICsgcyArICJcIiAhPSBcIiIgKyBzMiArICJcIiIpOworICAgICAgICAgICAgICAgIHNob3cgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChFWEFDVF9OVU1FUklDX0NPTVBBUkUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBuKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIioqKiBOVU1FUklDIEVSUk9SIik7CisgICAgICAgICAgICAgICAgc2hvdyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDb21wdXRlIHByb3BvcnRpb25hbCBlcnJvcgorICAgICAgICAgICAgZG91YmxlIGVycm9yID0gcHJvcG9ydGlvbmFsRXJyb3IodmFsdWUsIG4pOworICAgIAorICAgICAgICAgICAgaWYgKGVycm9yID4gTUFYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIioqKiBOVU1FUklDIEVSUk9SICIgKyBlcnJvcik7CisgICAgICAgICAgICAgICAgc2hvdyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBpZiAoZXJyb3IgPiBtYXhfbnVtZXJpY19lcnJvcikKKyAgICAgICAgICAgICAgICBtYXhfbnVtZXJpY19lcnJvciA9IGVycm9yOworICAgICAgICAgICAgaWYgKGVycm9yIDwgbWluX251bWVyaWNfZXJyb3IpCisgICAgICAgICAgICAgICAgbWluX251bWVyaWNfZXJyb3IgPSBlcnJvcjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoc2hvdykKKyAgICAgICAgICAgIGxvZ2xuKAorICAgICAgICAgICAgLyp2YWx1ZS5nZXRTdHJpbmcodGVtcCkgKyovIHZhbHVlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBGPiAiICsgcyArICIgUD4gIiArCisgICAgICAgICAgICAvKm4uZ2V0U3RyaW5nKHRlbXApICsqLyBuLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBGPiAiICsgczIpOworICAgIAorICAgIH0KKyAgICAgICAgCisgICAgcHVibGljIGRvdWJsZSBwcm9wb3J0aW9uYWxFcnJvcihOdW1iZXIgYSwgTnVtYmVyIGIpIHsKKyAgICAgICAgZG91YmxlIGFhLGJiOworICAgICAgICAKKyAgICAgICAgaWYoYS5nZXRDbGFzcygpLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZhLmxhbmcuRG91YmxlIikpCisgICAgICAgICAgICBhYSA9IGEuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWEgPSBhLmxvbmdWYWx1ZSgpOworICAgIAorICAgICAgICBpZihhLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImphdmEubGFuZy5Eb3VibGUiKSkKKyAgICAgICAgICAgIGJiID0gYi5kb3VibGVWYWx1ZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYiA9IGIubG9uZ1ZhbHVlKCk7CisgICAgCisgICAgICAgIGRvdWJsZSBlcnJvciA9IGFhIC0gYmI7CisgICAgICAgIGlmKGFhICE9IDAgJiYgYmIgIT0gMCkgCisgICAgICAgICAgICBlcnJvciAvPSBhYTsKKyAgICAgICAgICAgCisgICAgICAgIHJldHVybiBNYXRoLmFicyhlcnJvcik7CisgICAgfSAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvTnVtYmVyRm9ybWF0U2VyaWFsVGVzdERhdGEuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvTnVtYmVyRm9ybWF0U2VyaWFsVGVzdERhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MDM3YzJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9OdW1iZXJGb3JtYXRTZXJpYWxUZXN0RGF0YS5qYXZhCkBAIC0wLDAgKzEsMzExIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvTnVtYmVyRm9ybWF0U2VyaWFsVGVzdERhdGEuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzAyLzE5IDE3OjU5OjAzICQKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworcHVibGljIGNsYXNzIE51bWJlckZvcm1hdFNlcmlhbFRlc3REYXRhIHsKKyAgICAvL2dldCBDb250ZW50CisgICAgcHVibGljIHN0YXRpYyBieXRlW11bXSBnZXRDb250ZW50KCkgeworCSAgICAgICAgcmV0dXJuIGNvbnRlbnQ7CisgICAgfQorCisgICAgLy9OdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKQorICAgIHN0YXRpYyBieXRlW10gZ2VuZXJhbEluc3RhbmNlID0gbmV3IGJ5dGVbXXsgCisgICAgICAgIC04NCwgLTE5LCAwLCA1LCAxMTUsIDExNCwgMCwgMzAsIDk5LCAxMTEsIDEwOSwgNDYsIDEwNSwgOTgsIDEwOSwgNDYsIDEwNSwgOTksIDExNywgNDYsIAorICAgICAgICAxMTYsIDEwMSwgMTIwLCAxMTYsIDQ2LCA2OCwgMTAxLCA5OSwgMTA1LCAxMDksIDk3LCAxMDgsIDcwLCAxMTEsIDExNCwgMTA5LCA5NywgMTE2LCAxMSwgLTEsIAorICAgICAgICAzLCA5OCwgLTQwLCAxMTQsIDQ4LCA1OCwgMiwgMCwgMjIsIDkwLCAwLCAyNywgMTAwLCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgODMsIAorICAgICAgICAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY1LCAxMDgsIDExOSwgOTcsIDEyMSwgMTE1LCA4MywgMTA0LCAxMTEsIDExOSwgMTEwLCA5MCwgCisgICAgICAgIDAsIDIzLCAxMDEsIDEyMCwgMTEyLCAxMTEsIDExMCwgMTAxLCAxMTAsIDExNiwgODMsIDEwNSwgMTAzLCAxMTAsIDY1LCAxMDgsIDExOSwgOTcsIDEyMSwgMTE1LCAKKyAgICAgICAgODMsIDEwNCwgMTExLCAxMTksIDExMCwgNzMsIDAsIDExLCAxMDIsIDExMSwgMTE0LCAxMDksIDk3LCAxMTYsIDg3LCAxMDUsIDEwMCwgMTE2LCAxMDQsIDY2LCAKKyAgICAgICAgMCwgMTIsIDEwMywgMTE0LCAxMTEsIDExNywgMTEyLCAxMDUsIDExMCwgMTAzLCA4MywgMTA1LCAxMjIsIDEwMSwgNjYsIDAsIDEzLCAxMDMsIDExNCwgMTExLCAKKyAgICAgICAgMTE3LCAxMTIsIDEwNSwgMTEwLCAxMDMsIDgzLCAxMDUsIDEyMiwgMTAxLCA1MCwgNjYsIDAsIDE3LCAxMDksIDEwNSwgMTEwLCA2OSwgMTIwLCAxMTIsIDExMSwgCisgICAgICAgIDExMCwgMTAxLCAxMTAsIDExNiwgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA3MywgMCwgMTAsIDEwOSwgMTE3LCAxMDgsIDExNiwgMTA1LCAxMTIsIDEwOCwgCisgICAgICAgIDEwNSwgMTAxLCAxMTQsIDY3LCAwLCAzLCAxMTIsIDk3LCAxMDAsIDczLCAwLCAxMSwgMTEyLCA5NywgMTAwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAKKyAgICAgICAgMTA1LCAxMTEsIDExMCwgNzMsIDAsIDEyLCAxMTQsIDExMSwgMTE3LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgNzcsIDExMSwgMTAwLCAxMDEsIDczLCAwLCAKKyAgICAgICAgMjEsIDExNSwgMTAxLCAxMTQsIDEwNSwgOTcsIDEwOCwgODYsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTExLCAxMTAsIDc5LCAxMTAsIDgzLCAxMTYsIDExNCwgMTAxLCAKKyAgICAgICAgOTcsIDEwOSwgOTAsIDAsIDIyLCAxMTcsIDExNSwgMTAxLCA2OSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwgMTE2LCAxMDUsIDk3LCAxMDgsIDc4LCAKKyAgICAgICAgMTExLCAxMTYsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCAwLCAxNiwgMTEwLCAxMDEsIDEwMywgODAsIDExNCwgMTAxLCAxMDIsIDEwNSwgMTIwLCA4MCwgCisgICAgICAgIDk3LCAxMTYsIDExNiwgMTAxLCAxMTQsIDExMCwgMTE2LCAwLCAxOCwgNzYsIDEwNiwgOTcsIDExOCwgOTcsIDQ3LCAxMDgsIDk3LCAxMTAsIDEwMywgNDcsIAorICAgICAgICA4MywgMTE2LCAxMTQsIDEwNSwgMTEwLCAxMDMsIDU5LCA3NiwgMCwgMTYsIDExMCwgMTAxLCAxMDMsIDgzLCAxMTcsIDEwMiwgMTAyLCAxMDUsIDEyMCwgODAsIAorICAgICAgICA5NywgMTE2LCAxMTYsIDEwMSwgMTE0LCAxMTAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDExMCwgMTAxLCAxMDMsIDk3LCAxMTYsIDEwNSwgCisgICAgICAgIDExOCwgMTAxLCA4MCwgMTE0LCAxMDEsIDEwMiwgMTA1LCAxMjAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDExMCwgMTAxLCAxMDMsIDk3LCAKKyAgICAgICAgMTE2LCAxMDUsIDExOCwgMTAxLCA4MywgMTE3LCAxMDIsIDEwMiwgMTA1LCAxMjAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTYsIDExMiwgMTExLCAKKyAgICAgICAgMTE1LCA4MCwgMTE0LCAxMDEsIDEwMiwgMTA1LCAxMjAsIDgwLCA5NywgMTE2LCAxMTYsIDEwMSwgMTE0LCAxMTAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgCisgICAgICAgIDAsIDE2LCAxMTIsIDExMSwgMTE1LCA4MywgMTE3LCAxMDIsIDEwMiwgMTA1LCAxMjAsIDgwLCA5NywgMTE2LCAxMTYsIDEwMSwgMTE0LCAxMTAsIDExMywgMCwgCisgICAgICAgIDEyNiwgMCwgMSwgNzYsIDAsIDE0LCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTgsIDEwMSwgODAsIDExNCwgMTAxLCAxMDIsIDEwNSwgMTIwLCAKKyAgICAgICAgMTEzLCAwLCAxMjYsIDAsIDEsIDc2LCAwLCAxNCwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTE4LCAxMDEsIDgzLCAxMTcsIDEwMiwgMTAyLCAKKyAgICAgICAgMTA1LCAxMjAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTcsIDExNCwgMTExLCAxMTcsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAKKyAgICAgICAgOTksIDExNCwgMTAxLCAxMDksIDEwMSwgMTEwLCAxMTYsIDExNiwgMCwgMjIsIDc2LCAxMDYsIDk3LCAxMTgsIDk3LCA0NywgMTA5LCA5NywgMTE2LCAxMDQsIAorICAgICAgICA0NywgNjYsIDEwNSwgMTAzLCA2OCwgMTAxLCA5OSwgMTA1LCAxMDksIDk3LCAxMDgsIDU5LCA3NiwgMCwgNywgMTE1LCAxMjEsIDEwOSwgOTgsIDExMSwgCisgICAgICAgIDEwOCwgMTE1LCAxMTYsIDAsIDM5LCA3NiwgOTksIDExMSwgMTA5LCA0NywgMTA1LCA5OCwgMTA5LCA0NywgMTA1LCA5OSwgMTE3LCA0NywgMTE2LCAxMDEsIAorICAgICAgICAxMjAsIDExNiwgNDcsIDY4LCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgNzAsIDExMSwgMTE0LCAxMDksIDk3LCAxMTYsIDgzLCAxMjEsIDEwOSwgOTgsIAorICAgICAgICAxMTEsIDEwOCwgMTE1LCA1OSwgMTIwLCAxMTQsIDAsIDI5LCA5OSwgMTExLCAxMDksIDQ2LCAxMDUsIDk4LCAxMDksIDQ2LCAxMDUsIDk5LCAxMTcsIDQ2LCAKKyAgICAgICAgMTE2LCAxMDEsIDEyMCwgMTE2LCA0NiwgNzgsIDExNywgMTA5LCA5OCwgMTAxLCAxMTQsIDcwLCAxMTEsIDExNCwgMTA5LCA5NywgMTE2LCAtMzMsIC0xMCwgLTc3LCAKKyAgICAgICAgLTY1LCAxOSwgMTI1LCA3LCAtMjQsIDMsIDAsIDExLCA5MCwgMCwgMTIsIDEwMywgMTE0LCAxMTEsIDExNywgMTEyLCAxMDUsIDExMCwgMTAzLCA4NSwgCisgICAgICAgIDExNSwgMTAxLCAxMDAsIDY2LCAwLCAxNywgMTA5LCA5NywgMTIwLCA3MCwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjgsIDEwNSwgMTAzLCAKKyAgICAgICAgMTA1LCAxMTYsIDExNSwgNjYsIDAsIDE2LCAxMDksIDk3LCAxMjAsIDczLCAxMTAsIDExNiwgMTAxLCAxMDMsIDEwMSwgMTE0LCA2OCwgMTA1LCAxMDMsIDEwNSwgCisgICAgICAgIDExNiwgMTE1LCA3MywgMCwgMjEsIDEwOSwgOTcsIDEyMCwgMTA1LCAxMDksIDExNywgMTA5LCA3MCwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgCisgICAgICAgIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgNzMsIDAsIDIwLCAxMDksIDk3LCAxMjAsIDEwNSwgMTA5LCAxMTcsIDEwOSwgNzMsIDExMCwgMTE2LCAxMDEsIAorICAgICAgICAxMDMsIDEwMSwgMTE0LCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDY2LCAwLCAxNywgMTA5LCAxMDUsIDExMCwgNzAsIDExNCwgOTcsIDk5LCAxMTYsIAorICAgICAgICAxMDUsIDExMSwgMTEwLCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDY2LCAwLCAxNiwgMTA5LCAxMDUsIDExMCwgNzMsIDExMCwgMTE2LCAxMDEsIDEwMywgCisgICAgICAgIDEwMSwgMTE0LCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDczLCAwLCAyMSwgMTA5LCAxMDUsIDExMCwgMTA1LCAxMDksIDExNywgMTA5LCA3MCwgMTE0LCAKKyAgICAgICAgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgNzMsIDAsIDIwLCAxMDksIDEwNSwgMTEwLCAxMDUsIDEwOSwgCisgICAgICAgIDExNywgMTA5LCA3MywgMTEwLCAxMTYsIDEwMSwgMTAzLCAxMDEsIDExNCwgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA5MCwgMCwgMTYsIDExMiwgOTcsIAorICAgICAgICAxMTQsIDExNSwgMTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTAzLCAxMDEsIDExNCwgNzksIDExMCwgMTA4LCAxMjEsIDczLCAwLCAyMSwgMTE1LCAxMDEsIDExNCwgCisgICAgICAgIDEwNSwgOTcsIDEwOCwgODYsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTExLCAxMTAsIDc5LCAxMTAsIDgzLCAxMTYsIDExNCwgMTAxLCA5NywgMTA5LCAxMjAsIDExNCwgCisgICAgICAgIDAsIDE2LCAxMDYsIDk3LCAxMTgsIDk3LCA0NiwgMTE2LCAxMDEsIDEyMCwgMTE2LCA0NiwgNzAsIDExMSwgMTE0LCAxMDksIDk3LCAxMTYsIC01LCAtNDAsIAorICAgICAgICAtNjgsIDE4LCAtMjMsIDE1LCAyNCwgNjcsIDIsIDAsIDAsIDEyMCwgMTEyLCAxLCAzLCAxMjcsIDAsIDAsIDAsIDMsIDAsIDAsIAorICAgICAgICAxLCA1MywgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMTIwLCAwLCAwLCAKKyAgICAgICAgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgICAgICA2LCAwLCAwLCAwLCAyLCAwLCAxMTYsIDAsIDEsIDQ1LCAxMTYsIDAsIDAsIDExNiwgMCwgMSwgNDUsIDExNiwgMCwgMCwgCisgICAgICAgIDExNiwgMCwgMCwgMTE2LCAwLCAwLCAxMTYsIDAsIDAsIDExNiwgMCwgMCwgMTEyLCAxMTUsIDExNCwgMCwgMzcsIDk5LCAxMTEsIDEwOSwgCisgICAgICAgIDQ2LCAxMDUsIDk4LCAxMDksIDQ2LCAxMDUsIDk5LCAxMTcsIDQ2LCAxMTYsIDEwMSwgMTIwLCAxMTYsIDQ2LCA2OCwgMTAxLCA5OSwgMTA1LCAxMDksIDk3LCAKKyAgICAgICAgMTA4LCA3MCwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgODMsIDEyMSwgMTA5LCA5OCwgMTExLCAxMDgsIDExNSwgODAsIDI5LCAyMywgLTEwMywgOCwgMTA0LCAKKyAgICAgICAgLTEwOSwgLTEwMCwgMiwgMCwgMTgsIDY3LCAwLCAxNiwgMTAwLCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgODMsIDEwMSwgMTEyLCA5NywgMTE0LCAKKyAgICAgICAgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCA1LCAxMDAsIDEwNSwgMTAzLCAxMDUsIDExNiwgNjcsIDAsIDExLCAxMDEsIDEyMCwgMTEyLCAxMTEsIDExMCwgCisgICAgICAgIDEwMSwgMTEwLCAxMTYsIDEwNSwgOTcsIDEwOCwgNjcsIDAsIDE3LCAxMDMsIDExNCwgMTExLCAxMTcsIDExMiwgMTA1LCAxMTAsIDEwMywgODMsIDEwMSwgMTEyLCAKKyAgICAgICAgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCA5LCAxMDksIDEwNSwgMTEwLCAxMTcsIDExNSwgODMsIDEwNSwgMTAzLCAxMTAsIDY3LCAwLCAKKyAgICAgICAgMTcsIDEwOSwgMTExLCAxMTAsIDEwMSwgMTE2LCA5NywgMTE0LCAxMjEsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCAKKyAgICAgICAgOSwgMTEyLCA5NywgMTAwLCA2OSwgMTE1LCA5OSwgOTcsIDExMiwgMTAxLCA2NywgMCwgMTYsIDExMiwgOTcsIDExNiwgMTE2LCAxMDEsIDExNCwgMTEwLCAKKyAgICAgICAgODMsIDEwMSwgMTEyLCA5NywgMTE0LCA5NywgMTE2LCAxMTEsIDExNCwgNjcsIDAsIDcsIDExMiwgMTAxLCAxMTQsIDc3LCAxMDUsIDEwOCwgMTA4LCA2NywgCisgICAgICAgIDAsIDcsIDExMiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMCwgMTE2LCA2NywgMCwgOCwgMTEyLCAxMDgsIDExNywgMTE1LCA4MywgMTA1LCAxMDMsIDExMCwgCisgICAgICAgIDczLCAwLCAyMSwgMTE1LCAxMDEsIDExNCwgMTA1LCA5NywgMTA4LCA4NiwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIDExMCwgNzksIDExMCwgODMsIDExNiwgCisgICAgICAgIDExNCwgMTAxLCA5NywgMTA5LCA2NywgMCwgOSwgMTIyLCAxMDEsIDExNCwgMTExLCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCA3NiwgMCwgMywgNzgsIAorICAgICAgICA5NywgNzgsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDk5LCAxMTcsIDExNCwgMTE0LCAxMDEsIDExMCwgOTksIDEyMSwgODMsIDEyMSwgCisgICAgICAgIDEwOSwgOTgsIDExMSwgMTA4LCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE3LCAxMDEsIDEyMCwgMTEyLCAxMTEsIDExMCwgMTAxLCAxMTAsIDExNiwgCisgICAgICAgIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgOCwgMTA1LCAxMTAsIDEwMiwgCisgICAgICAgIDEwNSwgMTEwLCAxMDUsIDExNiwgMTIxLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE4LCAxMDUsIDExMCwgMTE2LCAxMDgsIDY3LCAxMTcsIDExNCwgCisgICAgICAgIDExNCwgMTAxLCAxMTAsIDk5LCAxMjEsIDgzLCAxMjEsIDEwOSwgOTgsIDExMSwgMTA4LCAxMTMsIDAsIDEyNiwgMCwgMSwgMTIwLCAxMTIsIDAsIDQ2LCAKKyAgICAgICAgMCwgMzUsIDAsIDAsIDAsIDQ0LCAwLCA0NSwgMCwgNDYsIDAsIDQyLCAwLCA1OSwgMzIsIDQ4LCAwLCAzNywgMCwgNDMsIAorICAgICAgICAwLCAwLCAwLCAyLCAwLCA0OCwgMTE2LCAwLCAzLCAtMTcsIC02NSwgLTY3LCAxMTYsIDAsIDEsIDM2LCAxMTYsIDAsIDEsIDY5LCAKKyAgICAgICAgMTE2LCAwLCAzLCAtMzAsIC0xMjAsIC05OCwgMTE2LCAwLCAzLCA4NSwgODMsIDY4LCAKKyAgICB9OworCisgICAgLy9OdW1iZXJGb3JtYXQuZ2V0Q3VycmVuY3lJbnN0YW5jZShMb2NhbGUuVVMpCisgICAgc3RhdGljIGJ5dGVbXSBjdXJyZW5jeUluc3RhbmNlID0gbmV3IGJ5dGVbXXsgCisgICAgICAgIC04NCwgLTE5LCAwLCA1LCAxMTUsIDExNCwgMCwgMzAsIDk5LCAxMTEsIDEwOSwgNDYsIDEwNSwgOTgsIDEwOSwgNDYsIDEwNSwgOTksIDExNywgNDYsIAorICAgICAgICAxMTYsIDEwMSwgMTIwLCAxMTYsIDQ2LCA2OCwgMTAxLCA5OSwgMTA1LCAxMDksIDk3LCAxMDgsIDcwLCAxMTEsIDExNCwgMTA5LCA5NywgMTE2LCAxMSwgLTEsIAorICAgICAgICAzLCA5OCwgLTQwLCAxMTQsIDQ4LCA1OCwgMiwgMCwgMjIsIDkwLCAwLCAyNywgMTAwLCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgODMsIAorICAgICAgICAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY1LCAxMDgsIDExOSwgOTcsIDEyMSwgMTE1LCA4MywgMTA0LCAxMTEsIDExOSwgMTEwLCA5MCwgCisgICAgICAgIDAsIDIzLCAxMDEsIDEyMCwgMTEyLCAxMTEsIDExMCwgMTAxLCAxMTAsIDExNiwgODMsIDEwNSwgMTAzLCAxMTAsIDY1LCAxMDgsIDExOSwgOTcsIDEyMSwgMTE1LCAKKyAgICAgICAgODMsIDEwNCwgMTExLCAxMTksIDExMCwgNzMsIDAsIDExLCAxMDIsIDExMSwgMTE0LCAxMDksIDk3LCAxMTYsIDg3LCAxMDUsIDEwMCwgMTE2LCAxMDQsIDY2LCAKKyAgICAgICAgMCwgMTIsIDEwMywgMTE0LCAxMTEsIDExNywgMTEyLCAxMDUsIDExMCwgMTAzLCA4MywgMTA1LCAxMjIsIDEwMSwgNjYsIDAsIDEzLCAxMDMsIDExNCwgMTExLCAKKyAgICAgICAgMTE3LCAxMTIsIDEwNSwgMTEwLCAxMDMsIDgzLCAxMDUsIDEyMiwgMTAxLCA1MCwgNjYsIDAsIDE3LCAxMDksIDEwNSwgMTEwLCA2OSwgMTIwLCAxMTIsIDExMSwgCisgICAgICAgIDExMCwgMTAxLCAxMTAsIDExNiwgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA3MywgMCwgMTAsIDEwOSwgMTE3LCAxMDgsIDExNiwgMTA1LCAxMTIsIDEwOCwgCisgICAgICAgIDEwNSwgMTAxLCAxMTQsIDY3LCAwLCAzLCAxMTIsIDk3LCAxMDAsIDczLCAwLCAxMSwgMTEyLCA5NywgMTAwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAKKyAgICAgICAgMTA1LCAxMTEsIDExMCwgNzMsIDAsIDEyLCAxMTQsIDExMSwgMTE3LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgNzcsIDExMSwgMTAwLCAxMDEsIDczLCAwLCAKKyAgICAgICAgMjEsIDExNSwgMTAxLCAxMTQsIDEwNSwgOTcsIDEwOCwgODYsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTExLCAxMTAsIDc5LCAxMTAsIDgzLCAxMTYsIDExNCwgMTAxLCAKKyAgICAgICAgOTcsIDEwOSwgOTAsIDAsIDIyLCAxMTcsIDExNSwgMTAxLCA2OSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwgMTE2LCAxMDUsIDk3LCAxMDgsIDc4LCAKKyAgICAgICAgMTExLCAxMTYsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCAwLCAxNiwgMTEwLCAxMDEsIDEwMywgODAsIDExNCwgMTAxLCAxMDIsIDEwNSwgMTIwLCA4MCwgCisgICAgICAgIDk3LCAxMTYsIDExNiwgMTAxLCAxMTQsIDExMCwgMTE2LCAwLCAxOCwgNzYsIDEwNiwgOTcsIDExOCwgOTcsIDQ3LCAxMDgsIDk3LCAxMTAsIDEwMywgNDcsIAorICAgICAgICA4MywgMTE2LCAxMTQsIDEwNSwgMTEwLCAxMDMsIDU5LCA3NiwgMCwgMTYsIDExMCwgMTAxLCAxMDMsIDgzLCAxMTcsIDEwMiwgMTAyLCAxMDUsIDEyMCwgODAsIAorICAgICAgICA5NywgMTE2LCAxMTYsIDEwMSwgMTE0LCAxMTAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDExMCwgMTAxLCAxMDMsIDk3LCAxMTYsIDEwNSwgCisgICAgICAgIDExOCwgMTAxLCA4MCwgMTE0LCAxMDEsIDEwMiwgMTA1LCAxMjAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDExMCwgMTAxLCAxMDMsIDk3LCAKKyAgICAgICAgMTE2LCAxMDUsIDExOCwgMTAxLCA4MywgMTE3LCAxMDIsIDEwMiwgMTA1LCAxMjAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTYsIDExMiwgMTExLCAKKyAgICAgICAgMTE1LCA4MCwgMTE0LCAxMDEsIDEwMiwgMTA1LCAxMjAsIDgwLCA5NywgMTE2LCAxMTYsIDEwMSwgMTE0LCAxMTAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgCisgICAgICAgIDAsIDE2LCAxMTIsIDExMSwgMTE1LCA4MywgMTE3LCAxMDIsIDEwMiwgMTA1LCAxMjAsIDgwLCA5NywgMTE2LCAxMTYsIDEwMSwgMTE0LCAxMTAsIDExMywgMCwgCisgICAgICAgIDEyNiwgMCwgMSwgNzYsIDAsIDE0LCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTgsIDEwMSwgODAsIDExNCwgMTAxLCAxMDIsIDEwNSwgMTIwLCAKKyAgICAgICAgMTEzLCAwLCAxMjYsIDAsIDEsIDc2LCAwLCAxNCwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTE4LCAxMDEsIDgzLCAxMTcsIDEwMiwgMTAyLCAKKyAgICAgICAgMTA1LCAxMjAsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTcsIDExNCwgMTExLCAxMTcsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAKKyAgICAgICAgOTksIDExNCwgMTAxLCAxMDksIDEwMSwgMTEwLCAxMTYsIDExNiwgMCwgMjIsIDc2LCAxMDYsIDk3LCAxMTgsIDk3LCA0NywgMTA5LCA5NywgMTE2LCAxMDQsIAorICAgICAgICA0NywgNjYsIDEwNSwgMTAzLCA2OCwgMTAxLCA5OSwgMTA1LCAxMDksIDk3LCAxMDgsIDU5LCA3NiwgMCwgNywgMTE1LCAxMjEsIDEwOSwgOTgsIDExMSwgCisgICAgICAgIDEwOCwgMTE1LCAxMTYsIDAsIDM5LCA3NiwgOTksIDExMSwgMTA5LCA0NywgMTA1LCA5OCwgMTA5LCA0NywgMTA1LCA5OSwgMTE3LCA0NywgMTE2LCAxMDEsIAorICAgICAgICAxMjAsIDExNiwgNDcsIDY4LCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgNzAsIDExMSwgMTE0LCAxMDksIDk3LCAxMTYsIDgzLCAxMjEsIDEwOSwgOTgsIAorICAgICAgICAxMTEsIDEwOCwgMTE1LCA1OSwgMTIwLCAxMTQsIDAsIDI5LCA5OSwgMTExLCAxMDksIDQ2LCAxMDUsIDk4LCAxMDksIDQ2LCAxMDUsIDk5LCAxMTcsIDQ2LCAKKyAgICAgICAgMTE2LCAxMDEsIDEyMCwgMTE2LCA0NiwgNzgsIDExNywgMTA5LCA5OCwgMTAxLCAxMTQsIDcwLCAxMTEsIDExNCwgMTA5LCA5NywgMTE2LCAtMzMsIC0xMCwgLTc3LCAKKyAgICAgICAgLTY1LCAxOSwgMTI1LCA3LCAtMjQsIDMsIDAsIDExLCA5MCwgMCwgMTIsIDEwMywgMTE0LCAxMTEsIDExNywgMTEyLCAxMDUsIDExMCwgMTAzLCA4NSwgCisgICAgICAgIDExNSwgMTAxLCAxMDAsIDY2LCAwLCAxNywgMTA5LCA5NywgMTIwLCA3MCwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjgsIDEwNSwgMTAzLCAKKyAgICAgICAgMTA1LCAxMTYsIDExNSwgNjYsIDAsIDE2LCAxMDksIDk3LCAxMjAsIDczLCAxMTAsIDExNiwgMTAxLCAxMDMsIDEwMSwgMTE0LCA2OCwgMTA1LCAxMDMsIDEwNSwgCisgICAgICAgIDExNiwgMTE1LCA3MywgMCwgMjEsIDEwOSwgOTcsIDEyMCwgMTA1LCAxMDksIDExNywgMTA5LCA3MCwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgCisgICAgICAgIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgNzMsIDAsIDIwLCAxMDksIDk3LCAxMjAsIDEwNSwgMTA5LCAxMTcsIDEwOSwgNzMsIDExMCwgMTE2LCAxMDEsIAorICAgICAgICAxMDMsIDEwMSwgMTE0LCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDY2LCAwLCAxNywgMTA5LCAxMDUsIDExMCwgNzAsIDExNCwgOTcsIDk5LCAxMTYsIAorICAgICAgICAxMDUsIDExMSwgMTEwLCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDY2LCAwLCAxNiwgMTA5LCAxMDUsIDExMCwgNzMsIDExMCwgMTE2LCAxMDEsIDEwMywgCisgICAgICAgIDEwMSwgMTE0LCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDczLCAwLCAyMSwgMTA5LCAxMDUsIDExMCwgMTA1LCAxMDksIDExNywgMTA5LCA3MCwgMTE0LCAKKyAgICAgICAgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgNzMsIDAsIDIwLCAxMDksIDEwNSwgMTEwLCAxMDUsIDEwOSwgCisgICAgICAgIDExNywgMTA5LCA3MywgMTEwLCAxMTYsIDEwMSwgMTAzLCAxMDEsIDExNCwgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA5MCwgMCwgMTYsIDExMiwgOTcsIAorICAgICAgICAxMTQsIDExNSwgMTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTAzLCAxMDEsIDExNCwgNzksIDExMCwgMTA4LCAxMjEsIDczLCAwLCAyMSwgMTE1LCAxMDEsIDExNCwgCisgICAgICAgIDEwNSwgOTcsIDEwOCwgODYsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTExLCAxMTAsIDc5LCAxMTAsIDgzLCAxMTYsIDExNCwgMTAxLCA5NywgMTA5LCAxMjAsIDExNCwgCisgICAgICAgIDAsIDE2LCAxMDYsIDk3LCAxMTgsIDk3LCA0NiwgMTE2LCAxMDEsIDEyMCwgMTE2LCA0NiwgNzAsIDExMSwgMTE0LCAxMDksIDk3LCAxMTYsIC01LCAtNDAsIAorICAgICAgICAtNjgsIDE4LCAtMjMsIDE1LCAyNCwgNjcsIDIsIDAsIDAsIDEyMCwgMTEyLCAxLCAyLCAxMjcsIDAsIDAsIDAsIDIsIDAsIDAsIAorICAgICAgICAxLCA1MywgMiwgMSwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMTIwLCAwLCAwLCAKKyAgICAgICAgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgICAgICA2LCAwLCAwLCAwLCAyLCAwLCAxMTYsIDAsIDMsIDQwLCAtNjIsIC05MiwgMTE2LCAwLCAxLCA0MSwgMTE2LCAwLCAyLCA0MCwgCisgICAgICAgIDM2LCAxMTYsIDAsIDEsIDQxLCAxMTYsIDAsIDIsIC02MiwgLTkyLCAxMTYsIDAsIDAsIDExNiwgMCwgMSwgMzYsIDExNiwgMCwgMCwgCisgICAgICAgIDExMiwgMTE1LCAxMTQsIDAsIDM3LCA5OSwgMTExLCAxMDksIDQ2LCAxMDUsIDk4LCAxMDksIDQ2LCAxMDUsIDk5LCAxMTcsIDQ2LCAxMTYsIDEwMSwgMTIwLCAKKyAgICAgICAgMTE2LCA0NiwgNjgsIDEwMSwgOTksIDEwNSwgMTA5LCA5NywgMTA4LCA3MCwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgODMsIDEyMSwgMTA5LCA5OCwgMTExLCAKKyAgICAgICAgMTA4LCAxMTUsIDgwLCAyOSwgMjMsIC0xMDMsIDgsIDEwNCwgLTEwOSwgLTEwMCwgMiwgMCwgMTgsIDY3LCAwLCAxNiwgMTAwLCAxMDEsIDk5LCAxMDUsIAorICAgICAgICAxMDksIDk3LCAxMDgsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCA1LCAxMDAsIDEwNSwgMTAzLCAxMDUsIDExNiwgCisgICAgICAgIDY3LCAwLCAxMSwgMTAxLCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDEwNSwgOTcsIDEwOCwgNjcsIDAsIDE3LCAxMDMsIDExNCwgMTExLCAKKyAgICAgICAgMTE3LCAxMTIsIDEwNSwgMTEwLCAxMDMsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCA5LCAxMDksIDEwNSwgMTEwLCAKKyAgICAgICAgMTE3LCAxMTUsIDgzLCAxMDUsIDEwMywgMTEwLCA2NywgMCwgMTcsIDEwOSwgMTExLCAxMTAsIDEwMSwgMTE2LCA5NywgMTE0LCAxMjEsIDgzLCAxMDEsIDExMiwgCisgICAgICAgIDk3LCAxMTQsIDk3LCAxMTYsIDExMSwgMTE0LCA2NywgMCwgOSwgMTEyLCA5NywgMTAwLCA2OSwgMTE1LCA5OSwgOTcsIDExMiwgMTAxLCA2NywgMCwgCisgICAgICAgIDE2LCAxMTIsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTQsIDExMCwgODMsIDEwMSwgMTEyLCA5NywgMTE0LCA5NywgMTE2LCAxMTEsIDExNCwgNjcsIDAsIDcsIAorICAgICAgICAxMTIsIDEwMSwgMTE0LCA3NywgMTA1LCAxMDgsIDEwOCwgNjcsIDAsIDcsIDExMiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMCwgMTE2LCA2NywgMCwgOCwgCisgICAgICAgIDExMiwgMTA4LCAxMTcsIDExNSwgODMsIDEwNSwgMTAzLCAxMTAsIDczLCAwLCAyMSwgMTE1LCAxMDEsIDExNCwgMTA1LCA5NywgMTA4LCA4NiwgMTAxLCAxMTQsIAorICAgICAgICAxMTUsIDEwNSwgMTExLCAxMTAsIDc5LCAxMTAsIDgzLCAxMTYsIDExNCwgMTAxLCA5NywgMTA5LCA2NywgMCwgOSwgMTIyLCAxMDEsIDExNCwgMTExLCA2OCwgCisgICAgICAgIDEwNSwgMTAzLCAxMDUsIDExNiwgNzYsIDAsIDMsIDc4LCA5NywgNzgsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDk5LCAxMTcsIAorICAgICAgICAxMTQsIDExNCwgMTAxLCAxMTAsIDk5LCAxMjEsIDgzLCAxMjEsIDEwOSwgOTgsIDExMSwgMTA4LCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE3LCAKKyAgICAgICAgMTAxLCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDExMywgMCwgMTI2LCAKKyAgICAgICAgMCwgMSwgNzYsIDAsIDgsIDEwNSwgMTEwLCAxMDIsIDEwNSwgMTEwLCAxMDUsIDExNiwgMTIxLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIAorICAgICAgICAxOCwgMTA1LCAxMTAsIDExNiwgMTA4LCA2NywgMTE3LCAxMTQsIDExNCwgMTAxLCAxMTAsIDk5LCAxMjEsIDgzLCAxMjEsIDEwOSwgOTgsIDExMSwgMTA4LCAxMTMsIAorICAgICAgICAwLCAxMjYsIDAsIDEsIDEyMCwgMTEyLCAwLCA0NiwgMCwgMzUsIDAsIDAsIDAsIDQ0LCAwLCA0NSwgMCwgNDYsIDAsIDQyLCAKKyAgICAgICAgMCwgNTksIDMyLCA0OCwgMCwgMzcsIDAsIDQzLCAwLCAwLCAwLCAyLCAwLCA0OCwgMTE2LCAwLCAzLCAtMTcsIC02NSwgLTY3LCAKKyAgICAgICAgMTE2LCAwLCAxLCAzNiwgMTE2LCAwLCAxLCA2OSwgMTE2LCAwLCAzLCAtMzAsIC0xMjAsIC05OCwgMTE2LCAwLCAzLCA4NSwgODMsIDY4LCAKKyAgICAgICAgCisgICAgfTsKKworICAgIC8vTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZShMb2NhbGUuVVMpCisgICAgc3RhdGljIGJ5dGVbXSBwZXJjZW50SW5zdGFuY2UgPSBuZXcgYnl0ZVtdeyAKKyAgICAgICAgLTg0LCAtMTksIDAsIDUsIDExNSwgMTE0LCAwLCAzMCwgOTksIDExMSwgMTA5LCA0NiwgMTA1LCA5OCwgMTA5LCA0NiwgMTA1LCA5OSwgMTE3LCA0NiwgCisgICAgICAgIDExNiwgMTAxLCAxMjAsIDExNiwgNDYsIDY4LCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgNzAsIDExMSwgMTE0LCAxMDksIDk3LCAxMTYsIDExLCAtMSwgCisgICAgICAgIDMsIDk4LCAtNDAsIDExNCwgNDgsIDU4LCAyLCAwLCAyMiwgOTAsIDAsIDI3LCAxMDAsIDEwMSwgOTksIDEwNSwgMTA5LCA5NywgMTA4LCA4MywgCisgICAgICAgIDEwMSwgMTEyLCA5NywgMTE0LCA5NywgMTE2LCAxMTEsIDExNCwgNjUsIDEwOCwgMTE5LCA5NywgMTIxLCAxMTUsIDgzLCAxMDQsIDExMSwgMTE5LCAxMTAsIDkwLCAKKyAgICAgICAgMCwgMjMsIDEwMSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwgMTE2LCA4MywgMTA1LCAxMDMsIDExMCwgNjUsIDEwOCwgMTE5LCA5NywgMTIxLCAxMTUsIAorICAgICAgICA4MywgMTA0LCAxMTEsIDExOSwgMTEwLCA3MywgMCwgMTEsIDEwMiwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgODcsIDEwNSwgMTAwLCAxMTYsIDEwNCwgNjYsIAorICAgICAgICAwLCAxMiwgMTAzLCAxMTQsIDExMSwgMTE3LCAxMTIsIDEwNSwgMTEwLCAxMDMsIDgzLCAxMDUsIDEyMiwgMTAxLCA2NiwgMCwgMTMsIDEwMywgMTE0LCAxMTEsIAorICAgICAgICAxMTcsIDExMiwgMTA1LCAxMTAsIDEwMywgODMsIDEwNSwgMTIyLCAxMDEsIDUwLCA2NiwgMCwgMTcsIDEwOSwgMTA1LCAxMTAsIDY5LCAxMjAsIDExMiwgMTExLCAKKyAgICAgICAgMTEwLCAxMDEsIDExMCwgMTE2LCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDczLCAwLCAxMCwgMTA5LCAxMTcsIDEwOCwgMTE2LCAxMDUsIDExMiwgMTA4LCAKKyAgICAgICAgMTA1LCAxMDEsIDExNCwgNjcsIDAsIDMsIDExMiwgOTcsIDEwMCwgNzMsIDAsIDExLCAxMTIsIDk3LCAxMDAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIAorICAgICAgICAxMDUsIDExMSwgMTEwLCA3MywgMCwgMTIsIDExNCwgMTExLCAxMTcsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCA3NywgMTExLCAxMDAsIDEwMSwgNzMsIDAsIAorICAgICAgICAyMSwgMTE1LCAxMDEsIDExNCwgMTA1LCA5NywgMTA4LCA4NiwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIDExMCwgNzksIDExMCwgODMsIDExNiwgMTE0LCAxMDEsIAorICAgICAgICA5NywgMTA5LCA5MCwgMCwgMjIsIDExNywgMTE1LCAxMDEsIDY5LCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDEwNSwgOTcsIDEwOCwgNzgsIAorICAgICAgICAxMTEsIDExNiwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDAsIDE2LCAxMTAsIDEwMSwgMTAzLCA4MCwgMTE0LCAxMDEsIDEwMiwgMTA1LCAxMjAsIDgwLCAKKyAgICAgICAgOTcsIDExNiwgMTE2LCAxMDEsIDExNCwgMTEwLCAxMTYsIDAsIDE4LCA3NiwgMTA2LCA5NywgMTE4LCA5NywgNDcsIDEwOCwgOTcsIDExMCwgMTAzLCA0NywgCisgICAgICAgIDgzLCAxMTYsIDExNCwgMTA1LCAxMTAsIDEwMywgNTksIDc2LCAwLCAxNiwgMTEwLCAxMDEsIDEwMywgODMsIDExNywgMTAyLCAxMDIsIDEwNSwgMTIwLCA4MCwgCisgICAgICAgIDk3LCAxMTYsIDExNiwgMTAxLCAxMTQsIDExMCwgMTEzLCAwLCAxMjYsIDAsIDEsIDc2LCAwLCAxNCwgMTEwLCAxMDEsIDEwMywgOTcsIDExNiwgMTA1LCAKKyAgICAgICAgMTE4LCAxMDEsIDgwLCAxMTQsIDEwMSwgMTAyLCAxMDUsIDEyMCwgMTEzLCAwLCAxMjYsIDAsIDEsIDc2LCAwLCAxNCwgMTEwLCAxMDEsIDEwMywgOTcsIAorICAgICAgICAxMTYsIDEwNSwgMTE4LCAxMDEsIDgzLCAxMTcsIDEwMiwgMTAyLCAxMDUsIDEyMCwgMTEzLCAwLCAxMjYsIDAsIDEsIDc2LCAwLCAxNiwgMTEyLCAxMTEsIAorICAgICAgICAxMTUsIDgwLCAxMTQsIDEwMSwgMTAyLCAxMDUsIDEyMCwgODAsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTQsIDExMCwgMTEzLCAwLCAxMjYsIDAsIDEsIDc2LCAKKyAgICAgICAgMCwgMTYsIDExMiwgMTExLCAxMTUsIDgzLCAxMTcsIDEwMiwgMTAyLCAxMDUsIDEyMCwgODAsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTQsIDExMCwgMTEzLCAwLCAKKyAgICAgICAgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExOCwgMTAxLCA4MCwgMTE0LCAxMDEsIDEwMiwgMTA1LCAxMjAsIAorICAgICAgICAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE0LCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTgsIDEwMSwgODMsIDExNywgMTAyLCAxMDIsIAorICAgICAgICAxMDUsIDEyMCwgMTEzLCAwLCAxMjYsIDAsIDEsIDc2LCAwLCAxNywgMTE0LCAxMTEsIDExNywgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIAorICAgICAgICA5OSwgMTE0LCAxMDEsIDEwOSwgMTAxLCAxMTAsIDExNiwgMTE2LCAwLCAyMiwgNzYsIDEwNiwgOTcsIDExOCwgOTcsIDQ3LCAxMDksIDk3LCAxMTYsIDEwNCwgCisgICAgICAgIDQ3LCA2NiwgMTA1LCAxMDMsIDY4LCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgNTksIDc2LCAwLCA3LCAxMTUsIDEyMSwgMTA5LCA5OCwgMTExLCAKKyAgICAgICAgMTA4LCAxMTUsIDExNiwgMCwgMzksIDc2LCA5OSwgMTExLCAxMDksIDQ3LCAxMDUsIDk4LCAxMDksIDQ3LCAxMDUsIDk5LCAxMTcsIDQ3LCAxMTYsIDEwMSwgCisgICAgICAgIDEyMCwgMTE2LCA0NywgNjgsIDEwMSwgOTksIDEwNSwgMTA5LCA5NywgMTA4LCA3MCwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgODMsIDEyMSwgMTA5LCA5OCwgCisgICAgICAgIDExMSwgMTA4LCAxMTUsIDU5LCAxMjAsIDExNCwgMCwgMjksIDk5LCAxMTEsIDEwOSwgNDYsIDEwNSwgOTgsIDEwOSwgNDYsIDEwNSwgOTksIDExNywgNDYsIAorICAgICAgICAxMTYsIDEwMSwgMTIwLCAxMTYsIDQ2LCA3OCwgMTE3LCAxMDksIDk4LCAxMDEsIDExNCwgNzAsIDExMSwgMTE0LCAxMDksIDk3LCAxMTYsIC0zMywgLTEwLCAtNzcsIAorICAgICAgICAtNjUsIDE5LCAxMjUsIDcsIC0yNCwgMywgMCwgMTEsIDkwLCAwLCAxMiwgMTAzLCAxMTQsIDExMSwgMTE3LCAxMTIsIDEwNSwgMTEwLCAxMDMsIDg1LCAKKyAgICAgICAgMTE1LCAxMDEsIDEwMCwgNjYsIDAsIDE3LCAxMDksIDk3LCAxMjAsIDcwLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2OCwgMTA1LCAxMDMsIAorICAgICAgICAxMDUsIDExNiwgMTE1LCA2NiwgMCwgMTYsIDEwOSwgOTcsIDEyMCwgNzMsIDExMCwgMTE2LCAxMDEsIDEwMywgMTAxLCAxMTQsIDY4LCAxMDUsIDEwMywgMTA1LCAKKyAgICAgICAgMTE2LCAxMTUsIDczLCAwLCAyMSwgMTA5LCA5NywgMTIwLCAxMDUsIDEwOSwgMTE3LCAxMDksIDcwLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCAKKyAgICAgICAgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA3MywgMCwgMjAsIDEwOSwgOTcsIDEyMCwgMTA1LCAxMDksIDExNywgMTA5LCA3MywgMTEwLCAxMTYsIDEwMSwgCisgICAgICAgIDEwMywgMTAxLCAxMTQsIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgNjYsIDAsIDE3LCAxMDksIDEwNSwgMTEwLCA3MCwgMTE0LCA5NywgOTksIDExNiwgCisgICAgICAgIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgNjYsIDAsIDE2LCAxMDksIDEwNSwgMTEwLCA3MywgMTEwLCAxMTYsIDEwMSwgMTAzLCAKKyAgICAgICAgMTAxLCAxMTQsIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgNzMsIDAsIDIxLCAxMDksIDEwNSwgMTEwLCAxMDUsIDEwOSwgMTE3LCAxMDksIDcwLCAxMTQsIAorICAgICAgICA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA3MywgMCwgMjAsIDEwOSwgMTA1LCAxMTAsIDEwNSwgMTA5LCAKKyAgICAgICAgMTE3LCAxMDksIDczLCAxMTAsIDExNiwgMTAxLCAxMDMsIDEwMSwgMTE0LCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDkwLCAwLCAxNiwgMTEyLCA5NywgCisgICAgICAgIDExNCwgMTE1LCAxMDEsIDczLCAxMTAsIDExNiwgMTAxLCAxMDMsIDEwMSwgMTE0LCA3OSwgMTEwLCAxMDgsIDEyMSwgNzMsIDAsIDIxLCAxMTUsIDEwMSwgMTE0LCAKKyAgICAgICAgMTA1LCA5NywgMTA4LCA4NiwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIDExMCwgNzksIDExMCwgODMsIDExNiwgMTE0LCAxMDEsIDk3LCAxMDksIDEyMCwgMTE0LCAKKyAgICAgICAgMCwgMTYsIDEwNiwgOTcsIDExOCwgOTcsIDQ2LCAxMTYsIDEwMSwgMTIwLCAxMTYsIDQ2LCA3MCwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgLTUsIC00MCwgCisgICAgICAgIC02OCwgMTgsIC0yMywgMTUsIDI0LCA2NywgMiwgMCwgMCwgMTIwLCAxMTIsIDEsIDAsIDEyNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgICAgIDEsIDUzLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAxMjAsIDAsIDAsIAorICAgICAgICAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAxMDAsIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAgICAgNiwgMCwgMCwgMCwgMiwgMCwgMTE2LCAwLCAxLCA0NSwgMTE2LCAwLCAxLCAzNywgMTE2LCAwLCAxLCA0NSwgMTE2LCAwLCAKKyAgICAgICAgMSwgMzcsIDExNiwgMCwgMCwgMTEzLCAwLCAxMjYsIDAsIDgsIDExNiwgMCwgMCwgMTE2LCAwLCAxLCAzNywgMTEyLCAxMTUsIDExNCwgCisgICAgICAgIDAsIDM3LCA5OSwgMTExLCAxMDksIDQ2LCAxMDUsIDk4LCAxMDksIDQ2LCAxMDUsIDk5LCAxMTcsIDQ2LCAxMTYsIDEwMSwgMTIwLCAxMTYsIDQ2LCA2OCwgCisgICAgICAgIDEwMSwgOTksIDEwNSwgMTA5LCA5NywgMTA4LCA3MCwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgODMsIDEyMSwgMTA5LCA5OCwgMTExLCAxMDgsIDExNSwgODAsIAorICAgICAgICAyOSwgMjMsIC0xMDMsIDgsIDEwNCwgLTEwOSwgLTEwMCwgMiwgMCwgMTgsIDY3LCAwLCAxNiwgMTAwLCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgCisgICAgICAgIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCA1LCAxMDAsIDEwNSwgMTAzLCAxMDUsIDExNiwgNjcsIDAsIDExLCAKKyAgICAgICAgMTAxLCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDEwNSwgOTcsIDEwOCwgNjcsIDAsIDE3LCAxMDMsIDExNCwgMTExLCAxMTcsIDExMiwgMTA1LCAKKyAgICAgICAgMTEwLCAxMDMsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCA5LCAxMDksIDEwNSwgMTEwLCAxMTcsIDExNSwgODMsIAorICAgICAgICAxMDUsIDEwMywgMTEwLCA2NywgMCwgMTcsIDEwOSwgMTExLCAxMTAsIDEwMSwgMTE2LCA5NywgMTE0LCAxMjEsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIAorICAgICAgICAxMTYsIDExMSwgMTE0LCA2NywgMCwgOSwgMTEyLCA5NywgMTAwLCA2OSwgMTE1LCA5OSwgOTcsIDExMiwgMTAxLCA2NywgMCwgMTYsIDExMiwgOTcsIAorICAgICAgICAxMTYsIDExNiwgMTAxLCAxMTQsIDExMCwgODMsIDEwMSwgMTEyLCA5NywgMTE0LCA5NywgMTE2LCAxMTEsIDExNCwgNjcsIDAsIDcsIDExMiwgMTAxLCAxMTQsIAorICAgICAgICA3NywgMTA1LCAxMDgsIDEwOCwgNjcsIDAsIDcsIDExMiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMCwgMTE2LCA2NywgMCwgOCwgMTEyLCAxMDgsIDExNywgCisgICAgICAgIDExNSwgODMsIDEwNSwgMTAzLCAxMTAsIDczLCAwLCAyMSwgMTE1LCAxMDEsIDExNCwgMTA1LCA5NywgMTA4LCA4NiwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIAorICAgICAgICAxMTAsIDc5LCAxMTAsIDgzLCAxMTYsIDExNCwgMTAxLCA5NywgMTA5LCA2NywgMCwgOSwgMTIyLCAxMDEsIDExNCwgMTExLCA2OCwgMTA1LCAxMDMsIDEwNSwgCisgICAgICAgIDExNiwgNzYsIDAsIDMsIDc4LCA5NywgNzgsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDk5LCAxMTcsIDExNCwgMTE0LCAxMDEsIAorICAgICAgICAxMTAsIDk5LCAxMjEsIDgzLCAxMjEsIDEwOSwgOTgsIDExMSwgMTA4LCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE3LCAxMDEsIDEyMCwgMTEyLCAKKyAgICAgICAgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgCisgICAgICAgIDAsIDgsIDEwNSwgMTEwLCAxMDIsIDEwNSwgMTEwLCAxMDUsIDExNiwgMTIxLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE4LCAxMDUsIDExMCwgCisgICAgICAgIDExNiwgMTA4LCA2NywgMTE3LCAxMTQsIDExNCwgMTAxLCAxMTAsIDk5LCAxMjEsIDgzLCAxMjEsIDEwOSwgOTgsIDExMSwgMTA4LCAxMTMsIDAsIDEyNiwgMCwgCisgICAgICAgIDEsIDEyMCwgMTEyLCAwLCA0NiwgMCwgMzUsIDAsIDAsIDAsIDQ0LCAwLCA0NSwgMCwgNDYsIDAsIDQyLCAwLCA1OSwgMzIsIAorICAgICAgICA0OCwgMCwgMzcsIDAsIDQzLCAwLCAwLCAwLCAyLCAwLCA0OCwgMTE2LCAwLCAzLCAtMTcsIC02NSwgLTY3LCAxMTYsIDAsIDEsIAorICAgICAgICAzNiwgMTE2LCAwLCAxLCA2OSwgMTE2LCAwLCAzLCAtMzAsIC0xMjAsIC05OCwgMTE2LCAwLCAzLCA4NSwgODMsIDY4LCAKKyAgICB9OworCisgICAgLy9OdW1iZXJGb3JtYXQuZ2V0U2NpZW50aWZpY0luc3RhbmNlKExvY2FsZS5VUykKKyAgICBzdGF0aWMgYnl0ZVtdIHNjaWVudGlmaWNJbnN0YW5jZSA9IG5ldyBieXRlW117IAorICAgICAgICAtODQsIC0xOSwgMCwgNSwgMTE1LCAxMTQsIDAsIDMwLCA5OSwgMTExLCAxMDksIDQ2LCAxMDUsIDk4LCAxMDksIDQ2LCAxMDUsIDk5LCAxMTcsIDQ2LCAKKyAgICAgICAgMTE2LCAxMDEsIDEyMCwgMTE2LCA0NiwgNjgsIDEwMSwgOTksIDEwNSwgMTA5LCA5NywgMTA4LCA3MCwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgMTEsIC0xLCAKKyAgICAgICAgMywgOTgsIC00MCwgMTE0LCA0OCwgNTgsIDIsIDAsIDIyLCA5MCwgMCwgMjcsIDEwMCwgMTAxLCA5OSwgMTA1LCAxMDksIDk3LCAxMDgsIDgzLCAKKyAgICAgICAgMTAxLCAxMTIsIDk3LCAxMTQsIDk3LCAxMTYsIDExMSwgMTE0LCA2NSwgMTA4LCAxMTksIDk3LCAxMjEsIDExNSwgODMsIDEwNCwgMTExLCAxMTksIDExMCwgOTAsIAorICAgICAgICAwLCAyMywgMTAxLCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMDUsIDEwMywgMTEwLCA2NSwgMTA4LCAxMTksIDk3LCAxMjEsIDExNSwgCisgICAgICAgIDgzLCAxMDQsIDExMSwgMTE5LCAxMTAsIDczLCAwLCAxMSwgMTAyLCAxMTEsIDExNCwgMTA5LCA5NywgMTE2LCA4NywgMTA1LCAxMDAsIDExNiwgMTA0LCA2NiwgCisgICAgICAgIDAsIDEyLCAxMDMsIDExNCwgMTExLCAxMTcsIDExMiwgMTA1LCAxMTAsIDEwMywgODMsIDEwNSwgMTIyLCAxMDEsIDY2LCAwLCAxMywgMTAzLCAxMTQsIDExMSwgCisgICAgICAgIDExNywgMTEyLCAxMDUsIDExMCwgMTAzLCA4MywgMTA1LCAxMjIsIDEwMSwgNTAsIDY2LCAwLCAxNywgMTA5LCAxMDUsIDExMCwgNjksIDEyMCwgMTEyLCAxMTEsIAorICAgICAgICAxMTAsIDEwMSwgMTEwLCAxMTYsIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgNzMsIDAsIDEwLCAxMDksIDExNywgMTA4LCAxMTYsIDEwNSwgMTEyLCAxMDgsIAorICAgICAgICAxMDUsIDEwMSwgMTE0LCA2NywgMCwgMywgMTEyLCA5NywgMTAwLCA3MywgMCwgMTEsIDExMiwgOTcsIDEwMCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgCisgICAgICAgIDEwNSwgMTExLCAxMTAsIDczLCAwLCAxMiwgMTE0LCAxMTEsIDExNywgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDc3LCAxMTEsIDEwMCwgMTAxLCA3MywgMCwgCisgICAgICAgIDIxLCAxMTUsIDEwMSwgMTE0LCAxMDUsIDk3LCAxMDgsIDg2LCAxMDEsIDExNCwgMTE1LCAxMDUsIDExMSwgMTEwLCA3OSwgMTEwLCA4MywgMTE2LCAxMTQsIDEwMSwgCisgICAgICAgIDk3LCAxMDksIDkwLCAwLCAyMiwgMTE3LCAxMTUsIDEwMSwgNjksIDEyMCwgMTEyLCAxMTEsIDExMCwgMTAxLCAxMTAsIDExNiwgMTA1LCA5NywgMTA4LCA3OCwgCisgICAgICAgIDExMSwgMTE2LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgMCwgMTYsIDExMCwgMTAxLCAxMDMsIDgwLCAxMTQsIDEwMSwgMTAyLCAxMDUsIDEyMCwgODAsIAorICAgICAgICA5NywgMTE2LCAxMTYsIDEwMSwgMTE0LCAxMTAsIDExNiwgMCwgMTgsIDc2LCAxMDYsIDk3LCAxMTgsIDk3LCA0NywgMTA4LCA5NywgMTEwLCAxMDMsIDQ3LCAKKyAgICAgICAgODMsIDExNiwgMTE0LCAxMDUsIDExMCwgMTAzLCA1OSwgNzYsIDAsIDE2LCAxMTAsIDEwMSwgMTAzLCA4MywgMTE3LCAxMDIsIDEwMiwgMTA1LCAxMjAsIDgwLCAKKyAgICAgICAgOTcsIDExNiwgMTE2LCAxMDEsIDExNCwgMTEwLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE0LCAxMTAsIDEwMSwgMTAzLCA5NywgMTE2LCAxMDUsIAorICAgICAgICAxMTgsIDEwMSwgODAsIDExNCwgMTAxLCAxMDIsIDEwNSwgMTIwLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE0LCAxMTAsIDEwMSwgMTAzLCA5NywgCisgICAgICAgIDExNiwgMTA1LCAxMTgsIDEwMSwgODMsIDExNywgMTAyLCAxMDIsIDEwNSwgMTIwLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE2LCAxMTIsIDExMSwgCisgICAgICAgIDExNSwgODAsIDExNCwgMTAxLCAxMDIsIDEwNSwgMTIwLCA4MCwgOTcsIDExNiwgMTE2LCAxMDEsIDExNCwgMTEwLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIAorICAgICAgICAwLCAxNiwgMTEyLCAxMTEsIDExNSwgODMsIDExNywgMTAyLCAxMDIsIDEwNSwgMTIwLCA4MCwgOTcsIDExNiwgMTE2LCAxMDEsIDExNCwgMTEwLCAxMTMsIDAsIAorICAgICAgICAxMjYsIDAsIDEsIDc2LCAwLCAxNCwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTE4LCAxMDEsIDgwLCAxMTQsIDEwMSwgMTAyLCAxMDUsIDEyMCwgCisgICAgICAgIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExOCwgMTAxLCA4MywgMTE3LCAxMDIsIDEwMiwgCisgICAgICAgIDEwNSwgMTIwLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE3LCAxMTQsIDExMSwgMTE3LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgCisgICAgICAgIDk5LCAxMTQsIDEwMSwgMTA5LCAxMDEsIDExMCwgMTE2LCAxMTYsIDAsIDIyLCA3NiwgMTA2LCA5NywgMTE4LCA5NywgNDcsIDEwOSwgOTcsIDExNiwgMTA0LCAKKyAgICAgICAgNDcsIDY2LCAxMDUsIDEwMywgNjgsIDEwMSwgOTksIDEwNSwgMTA5LCA5NywgMTA4LCA1OSwgNzYsIDAsIDcsIDExNSwgMTIxLCAxMDksIDk4LCAxMTEsIAorICAgICAgICAxMDgsIDExNSwgMTE2LCAwLCAzOSwgNzYsIDk5LCAxMTEsIDEwOSwgNDcsIDEwNSwgOTgsIDEwOSwgNDcsIDEwNSwgOTksIDExNywgNDcsIDExNiwgMTAxLCAKKyAgICAgICAgMTIwLCAxMTYsIDQ3LCA2OCwgMTAxLCA5OSwgMTA1LCAxMDksIDk3LCAxMDgsIDcwLCAxMTEsIDExNCwgMTA5LCA5NywgMTE2LCA4MywgMTIxLCAxMDksIDk4LCAKKyAgICAgICAgMTExLCAxMDgsIDExNSwgNTksIDEyMCwgMTE0LCAwLCAyOSwgOTksIDExMSwgMTA5LCA0NiwgMTA1LCA5OCwgMTA5LCA0NiwgMTA1LCA5OSwgMTE3LCA0NiwgCisgICAgICAgIDExNiwgMTAxLCAxMjAsIDExNiwgNDYsIDc4LCAxMTcsIDEwOSwgOTgsIDEwMSwgMTE0LCA3MCwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgLTMzLCAtMTAsIC03NywgCisgICAgICAgIC02NSwgMTksIDEyNSwgNywgLTI0LCAzLCAwLCAxMSwgOTAsIDAsIDEyLCAxMDMsIDExNCwgMTExLCAxMTcsIDExMiwgMTA1LCAxMTAsIDEwMywgODUsIAorICAgICAgICAxMTUsIDEwMSwgMTAwLCA2NiwgMCwgMTcsIDEwOSwgOTcsIDEyMCwgNzAsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDEwMywgCisgICAgICAgIDEwNSwgMTE2LCAxMTUsIDY2LCAwLCAxNiwgMTA5LCA5NywgMTIwLCA3MywgMTEwLCAxMTYsIDEwMSwgMTAzLCAxMDEsIDExNCwgNjgsIDEwNSwgMTAzLCAxMDUsIAorICAgICAgICAxMTYsIDExNSwgNzMsIDAsIDIxLCAxMDksIDk3LCAxMjAsIDEwNSwgMTA5LCAxMTcsIDEwOSwgNzAsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIAorICAgICAgICA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDczLCAwLCAyMCwgMTA5LCA5NywgMTIwLCAxMDUsIDEwOSwgMTE3LCAxMDksIDczLCAxMTAsIDExNiwgMTAxLCAKKyAgICAgICAgMTAzLCAxMDEsIDExNCwgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA2NiwgMCwgMTcsIDEwOSwgMTA1LCAxMTAsIDcwLCAxMTQsIDk3LCA5OSwgMTE2LCAKKyAgICAgICAgMTA1LCAxMTEsIDExMCwgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA2NiwgMCwgMTYsIDEwOSwgMTA1LCAxMTAsIDczLCAxMTAsIDExNiwgMTAxLCAxMDMsIAorICAgICAgICAxMDEsIDExNCwgNjgsIDEwNSwgMTAzLCAxMDUsIDExNiwgMTE1LCA3MywgMCwgMjEsIDEwOSwgMTA1LCAxMTAsIDEwNSwgMTA5LCAxMTcsIDEwOSwgNzAsIDExNCwgCisgICAgICAgIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCAxMTUsIDczLCAwLCAyMCwgMTA5LCAxMDUsIDExMCwgMTA1LCAxMDksIAorICAgICAgICAxMTcsIDEwOSwgNzMsIDExMCwgMTE2LCAxMDEsIDEwMywgMTAxLCAxMTQsIDY4LCAxMDUsIDEwMywgMTA1LCAxMTYsIDExNSwgOTAsIDAsIDE2LCAxMTIsIDk3LCAKKyAgICAgICAgMTE0LCAxMTUsIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDEwMywgMTAxLCAxMTQsIDc5LCAxMTAsIDEwOCwgMTIxLCA3MywgMCwgMjEsIDExNSwgMTAxLCAxMTQsIAorICAgICAgICAxMDUsIDk3LCAxMDgsIDg2LCAxMDEsIDExNCwgMTE1LCAxMDUsIDExMSwgMTEwLCA3OSwgMTEwLCA4MywgMTE2LCAxMTQsIDEwMSwgOTcsIDEwOSwgMTIwLCAxMTQsIAorICAgICAgICAwLCAxNiwgMTA2LCA5NywgMTE4LCA5NywgNDYsIDExNiwgMTAxLCAxMjAsIDExNiwgNDYsIDcwLCAxMTEsIDExNCwgMTA5LCA5NywgMTE2LCAtNSwgLTQwLCAKKyAgICAgICAgLTY4LCAxOCwgLTIzLCAxNSwgMjQsIDY3LCAyLCAwLCAwLCAxMjAsIDExMiwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgICAgIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEyMCwgMCwgMCwgCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAgICAgNiwgMCwgMCwgMCwgMiwgMSwgMTE2LCAwLCAxLCA0NSwgMTE2LCAwLCAwLCAxMTYsIDAsIDEsIDQ1LCAxMTYsIDAsIDAsIAorICAgICAgICAxMTYsIDAsIDAsIDExMywgMCwgMTI2LCAwLCA4LCAxMTYsIDAsIDAsIDExNiwgMCwgMCwgMTEyLCAxMTUsIDExNCwgMCwgMzcsIDk5LCAKKyAgICAgICAgMTExLCAxMDksIDQ2LCAxMDUsIDk4LCAxMDksIDQ2LCAxMDUsIDk5LCAxMTcsIDQ2LCAxMTYsIDEwMSwgMTIwLCAxMTYsIDQ2LCA2OCwgMTAxLCA5OSwgMTA1LCAKKyAgICAgICAgMTA5LCA5NywgMTA4LCA3MCwgMTExLCAxMTQsIDEwOSwgOTcsIDExNiwgODMsIDEyMSwgMTA5LCA5OCwgMTExLCAxMDgsIDExNSwgODAsIDI5LCAyMywgLTEwMywgCisgICAgICAgIDgsIDEwNCwgLTEwOSwgLTEwMCwgMiwgMCwgMTgsIDY3LCAwLCAxNiwgMTAwLCAxMDEsIDk5LCAxMDUsIDEwOSwgOTcsIDEwOCwgODMsIDEwMSwgMTEyLCAKKyAgICAgICAgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCA1LCAxMDAsIDEwNSwgMTAzLCAxMDUsIDExNiwgNjcsIDAsIDExLCAxMDEsIDEyMCwgMTEyLCAKKyAgICAgICAgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDEwNSwgOTcsIDEwOCwgNjcsIDAsIDE3LCAxMDMsIDExNCwgMTExLCAxMTcsIDExMiwgMTA1LCAxMTAsIDEwMywgODMsIAorICAgICAgICAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDY3LCAwLCA5LCAxMDksIDEwNSwgMTEwLCAxMTcsIDExNSwgODMsIDEwNSwgMTAzLCAxMTAsIAorICAgICAgICA2NywgMCwgMTcsIDEwOSwgMTExLCAxMTAsIDEwMSwgMTE2LCA5NywgMTE0LCAxMjEsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIAorICAgICAgICA2NywgMCwgOSwgMTEyLCA5NywgMTAwLCA2OSwgMTE1LCA5OSwgOTcsIDExMiwgMTAxLCA2NywgMCwgMTYsIDExMiwgOTcsIDExNiwgMTE2LCAxMDEsIAorICAgICAgICAxMTQsIDExMCwgODMsIDEwMSwgMTEyLCA5NywgMTE0LCA5NywgMTE2LCAxMTEsIDExNCwgNjcsIDAsIDcsIDExMiwgMTAxLCAxMTQsIDc3LCAxMDUsIDEwOCwgCisgICAgICAgIDEwOCwgNjcsIDAsIDcsIDExMiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMCwgMTE2LCA2NywgMCwgOCwgMTEyLCAxMDgsIDExNywgMTE1LCA4MywgMTA1LCAKKyAgICAgICAgMTAzLCAxMTAsIDczLCAwLCAyMSwgMTE1LCAxMDEsIDExNCwgMTA1LCA5NywgMTA4LCA4NiwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIDExMCwgNzksIDExMCwgCisgICAgICAgIDgzLCAxMTYsIDExNCwgMTAxLCA5NywgMTA5LCA2NywgMCwgOSwgMTIyLCAxMDEsIDExNCwgMTExLCA2OCwgMTA1LCAxMDMsIDEwNSwgMTE2LCA3NiwgMCwgCisgICAgICAgIDMsIDc4LCA5NywgNzgsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgMTQsIDk5LCAxMTcsIDExNCwgMTE0LCAxMDEsIDExMCwgOTksIDEyMSwgCisgICAgICAgIDgzLCAxMjEsIDEwOSwgOTgsIDExMSwgMTA4LCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE3LCAxMDEsIDEyMCwgMTEyLCAxMTEsIDExMCwgMTAxLCAKKyAgICAgICAgMTEwLCAxMTYsIDgzLCAxMDEsIDExMiwgOTcsIDExNCwgOTcsIDExNiwgMTExLCAxMTQsIDExMywgMCwgMTI2LCAwLCAxLCA3NiwgMCwgOCwgMTA1LCAKKyAgICAgICAgMTEwLCAxMDIsIDEwNSwgMTEwLCAxMDUsIDExNiwgMTIxLCAxMTMsIDAsIDEyNiwgMCwgMSwgNzYsIDAsIDE4LCAxMDUsIDExMCwgMTE2LCAxMDgsIDY3LCAKKyAgICAgICAgMTE3LCAxMTQsIDExNCwgMTAxLCAxMTAsIDk5LCAxMjEsIDgzLCAxMjEsIDEwOSwgOTgsIDExMSwgMTA4LCAxMTMsIDAsIDEyNiwgMCwgMSwgMTIwLCAxMTIsIAorICAgICAgICAwLCA0NiwgMCwgMzUsIDAsIDAsIDAsIDQ0LCAwLCA0NSwgMCwgNDYsIDAsIDQyLCAwLCA1OSwgMzIsIDQ4LCAwLCAzNywgCisgICAgICAgIDAsIDQzLCAwLCAwLCAwLCAyLCAwLCA0OCwgMTE2LCAwLCAzLCAtMTcsIC02NSwgLTY3LCAxMTYsIDAsIDEsIDM2LCAxMTYsIDAsIAorICAgICAgICAxLCA2OSwgMTE2LCAwLCAzLCAtMzAsIC0xMjAsIC05OCwgMTE2LCAwLCAzLCA4NSwgODMsIDY4LCAKKyAgICB9OworCisgICAgZmluYWwgc3RhdGljIGJ5dGVbXVtdIGNvbnRlbnQgPSB7Z2VuZXJhbEluc3RhbmNlLCBjdXJyZW5jeUluc3RhbmNlLCBwZXJjZW50SW5zdGFuY2UsIHNjaWVudGlmaWNJbnN0YW5jZX07Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L051bWJlckZvcm1hdFRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvTnVtYmVyRm9ybWF0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiOTI5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L051bWJlckZvcm1hdFRlc3QuamF2YQpAQCAtMCwwICsxLDgzMSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L051bWJlckZvcm1hdFRlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMS8yMCAxOTo0ODowOSAkIAorICogJFJldmlzaW9uOiAxLjkgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBJQ1U0QyB2MS44LjEgOiBmb3JtYXQgOiBOdW1iZXJGb3JtYXRUZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9udW1mbXRzdC5jcHAKKyAqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudGV4dC5QYXJzZVBvc2l0aW9uOworaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKKworcHVibGljIGNsYXNzIE51bWJlckZvcm1hdFRlc3QgZXh0ZW5kcyBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13ayB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBFVVJPID0gJ1x1MjBhYyc7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IE51bWJlckZvcm1hdFRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIC8vIFRlc3QgdmFyaW91cyBwYXR0ZXJucworICAgIHB1YmxpYyB2b2lkIFRlc3RQYXR0ZXJucygpIHsKKyAgICAKKyAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgc3ltID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5VUyk7CisgICAgICAgIGZpbmFsIFN0cmluZyBwYXRbXSAgICA9IHsgIiMuIyIsICIjLiIsICIuIyIsICIjIiB9OworICAgICAgICBpbnQgcGF0X2xlbmd0aCA9IHBhdC5sZW5ndGg7CisgICAgICAgIGZpbmFsIFN0cmluZyBuZXdwYXRbXSA9IHsgIiMwLiMiLCAiIzAuIiwgIiMuMCIsICIjIiB9OworICAgICAgICBmaW5hbCBTdHJpbmcgbnVtW10gICAgPSB7ICIwIiwgICAiMC4iLCAiLjAiLCAiMCIgfTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHBhdF9sZW5ndGg7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQgPSBuZXcgRGVjaW1hbEZvcm1hdChwYXRbaV0sIHN5bSk7CisgICAgICAgICAgICBTdHJpbmcgbmV3cCA9IGZtdC50b1BhdHRlcm4oKTsKKyAgICAgICAgICAgIGlmICghbmV3cC5lcXVhbHMobmV3cGF0W2ldKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogUGF0dGVybiAiICsgcGF0W2ldICsgIiBzaG91bGQgdHJhbnNtdXRlIHRvICIgKyBuZXdwYXRbaV0gKworICAgICAgICAgICAgICAgICAgICAgICI7ICIgKyBuZXdwICsgIiBzZWVuIGluc3RlYWQiKTsKKyAgICAKKyAgICAgICAgICAgIFN0cmluZyBzID0gKChOdW1iZXJGb3JtYXQpZm10KS5mb3JtYXQoMCk7CisgICAgICAgICAgICBpZiAoIXMuZXF1YWxzKG51bVtpXSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IFBhdHRlcm4gIiArIHBhdFtpXSArICIgc2hvdWxkIGZvcm1hdCB6ZXJvIGFzICIgKyBudW1baV0gKworICAgICAgICAgICAgICAgICAgICAgICI7ICIgKyBzICsgIiBzZWVuIGluc3RlYWQiKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiTWluIGludGVnZXIgZGlnaXRzID0gIiArIGZtdC5nZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUZXN0IGV4cG9uZW50aWFsIHBhdHRlcm4KKyAgICBwdWJsaWMgdm9pZCBUZXN0RXhwb25lbnRpYWwoKSB7CisgICAgCisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIHN5bSA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICBmaW5hbCBTdHJpbmcgcGF0W10gPSB7ICIwLiMjIyNFMCIsICIwMC4wMDBFMDAiLCAiIyMwLiMjIyMjI0UwMDAiLCAiMC4jIyNFMDtbMC4jIyNFMF0iIH07CisgICAgICAgIGludCBwYXRfbGVuZ3RoID0gcGF0Lmxlbmd0aDsKKyAgICAKKyAgICAgICAgZG91YmxlIHZhbFtdID0geyAwLjAxMjM0LCAxMjM0NTY3ODksIDEuMjNlMzAwLCAtMy4xNDE1OTI2NTNlLTI3MSB9OworICAgICAgICBpbnQgdmFsX2xlbmd0aCA9IHZhbC5sZW5ndGg7CisgICAgICAgIGZpbmFsIFN0cmluZyB2YWxGb3JtYXRbXSA9IHsKKyAgICAgICAgICAgIC8vIDAuIyMjI0UwCisgICAgICAgICAgICAiMS4yMzRFLTIiLCAiMS4yMzQ2RTgiLCAiMS4yM0UzMDAiLCAiLTMuMTQxNkUtMjcxIiwKKyAgICAgICAgICAgIC8vIDAwLjAwMEUwMAorICAgICAgICAgICAgIjEyLjM0MEUtMDMiLCAiMTIuMzQ2RTA3IiwgIjEyLjMwMEUyOTkiLCAiLTMxLjQxNkUtMjcyIiwKKyAgICAgICAgICAgIC8vICMjMC4jIyMjIyNFMDAwCisgICAgICAgICAgICAiMTIuMzRFLTAwMyIsICIxMjMuNDU2OEUwMDYiLCAiMS4yM0UzMDAiLCAiLTMxNC4xNTkzRS0yNzMiLAorICAgICAgICAgICAgLy8gMC4jIyNFMDtbMC4jIyNFMF0KKyAgICAgICAgICAgICIxLjIzNEUtMiIsICIxLjIzNUU4IiwgIjEuMjNFMzAwIiwgIlszLjE0MkUtMjcxXSIgfTsKKyAgICAgICAgLypkb3VibGUgdmFsUGFyc2VbXSA9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgMC4wMTIzNCwgMTIzNDYwMDAwLCAxLjIzRTMwMCwgLTMuMTQxNkUtMjcxLAorICAgICAgICAgICAgICAgIDAuMDEyMzQsIDEyMzQ2MDAwMCwgMS4yM0UzMDAsIC0zLjE0MTZFLTI3MSwKKyAgICAgICAgICAgICAgICAwLjAxMjM0LCAxMjM0NTY4MDAsIDEuMjNFMzAwLCAtMy4xNDE1OTNFLTI3MSwKKyAgICAgICAgICAgICAgICAwLjAxMjM0LCAxMjM1MDAwMDAsIDEuMjNFMzAwLCAtMy4xNDJFLTI3MSwKKyAgICAgICAgICAgIH07Ki8gLy9UaGUgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZAorICAgIAorICAgICAgICBpbnQgbHZhbFtdID0geyAwLCAtMSwgMSwgMTIzNDU2Nzg5IH07CisgICAgICAgIGludCBsdmFsX2xlbmd0aCA9IGx2YWwubGVuZ3RoOworICAgICAgICBmaW5hbCBTdHJpbmcgbHZhbEZvcm1hdFtdID0geworICAgICAgICAgICAgLy8gMC4jIyMjRTAKKyAgICAgICAgICAgICIwRTAiLCAiLTFFMCIsICIxRTAiLCAiMS4yMzQ2RTgiLAorICAgICAgICAgICAgLy8gMDAuMDAwRTAwCisgICAgICAgICAgICAiMDAuMDAwRTAwIiwgIi0xMC4wMDBFLTAxIiwgIjEwLjAwMEUtMDEiLCAiMTIuMzQ2RTA3IiwKKyAgICAgICAgICAgIC8vICMjMC4jIyMjIyNFMDAwCisgICAgICAgICAgICAiMEUwMDAiLCAiLTFFMDAwIiwgIjFFMDAwIiwgIjEyMy40NTY4RTAwNiIsCisgICAgICAgICAgICAvLyAwLiMjI0UwO1swLiMjI0UwXQorICAgICAgICAgICAgIjBFMCIsICJbMUUwXSIsICIxRTAiLCAiMS4yMzVFOCIgfTsKKyAgICAgICAgaW50IGx2YWxQYXJzZVtdID0gCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgMCwgLTEsIDEsIDEyMzQ2MDAwMCwgCisgICAgICAgICAgICAgICAgMCwgLTEsIDEsIDEyMzQ2MDAwMCwgCisgICAgICAgICAgICAgICAgMCwgLTEsIDEsIDEyMzQ1NjgwMCwgCisgICAgICAgICAgICAgICAgMCwgLTEsIDEsIDEyMzUwMDAwMCwgCisgICAgICAgICAgICB9OworICAgICAgICBpbnQgaXZhbCA9IDAsIGlsdmFsID0gMDsKKyAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBwYXRfbGVuZ3RoOyArK3ApIHsKKyAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQocGF0W3BdLCBzeW0pOworICAgICAgICAgICAgbG9nbG4oIlBhdHRlcm4gXCIiICsgcGF0W3BdICsgIlwiIC10b1BhdHRlcm4tPiBcIiIgKyBmbXQudG9QYXR0ZXJuKCkgKyAiXCIiKTsKKyAgICAgICAgICAgIGludCB2OworICAgICAgICAgICAgZm9yICh2ID0gMDsgdiA8IHZhbF9sZW5ndGg7ICsrdikgeworICAgICAgICAgICAgICAgIFN0cmluZyBzOworICAgICAgICAgICAgICAgIHMgPSAoKE51bWJlckZvcm1hdCkgZm10KS5mb3JtYXQodmFsW3ZdKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiICIgKyB2YWxbdl0gKyAiIC1mb3JtYXQtPiAiICsgcyk7CisgICAgICAgICAgICAgICAgaWYgKCFzLmVxdWFscyh2YWxGb3JtYXRbdiArIGl2YWxdKSkKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyB2YWxGb3JtYXRbdiArIGl2YWxdKTsKKyAgICAKKyAgICAgICAgICAgICAgICBQYXJzZVBvc2l0aW9uIHBvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICAgICAgICAgIGRvdWJsZSBhID0gZm10LnBhcnNlKHMsIHBvcykuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zLmdldEluZGV4KCkgPT0gcy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiICAtcGFyc2UtPiAiICsgRG91YmxlLnRvU3RyaW5nKGEpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGVwc2lsb24gY29tcGFyaXNvbiBhcyBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IFBhcnRpYWwgcGFyc2UgKCIgKyBwb3MuZ2V0SW5kZXgoKSArICIgY2hhcnMpIC0+ICIgKyBhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodiA9IDA7IHYgPCBsdmFsX2xlbmd0aDsgKyt2KSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHM7CisgICAgICAgICAgICAgICAgcyA9ICgoTnVtYmVyRm9ybWF0KSBmbXQpLmZvcm1hdChsdmFsW3ZdKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiICIgKyBsdmFsW3ZdICsgIkwgLWZvcm1hdC0+ICIgKyBzKTsKKyAgICAgICAgICAgICAgICBpZiAoIXMuZXF1YWxzKGx2YWxGb3JtYXRbdiArIGlsdmFsXSkpCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogRXhwZWN0ZWQgIiArIGx2YWxGb3JtYXRbdiArIGlsdmFsXSArICIgR290OiAiICsgcyk7CisgICAgCisgICAgICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwb3MgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgICAgICAgICBsb25nIGEgPSAwOworICAgICAgICAgICAgICAgIE51bWJlciBBID0gZm10LnBhcnNlKHMsIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKEEgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBhID0gQS5sb25nVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvcy5nZXRJbmRleCgpID09IHMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCIgIC1wYXJzZS0+ICIgKyBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhICE9IGx2YWxQYXJzZVt2ICsgaWx2YWxdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCAiICsgbHZhbFBhcnNlW3YgKyBpbHZhbF0pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBQYXJ0aWFsIHBhcnNlICgiICsgcG9zLmdldEluZGV4KCkgKyAiIGNoYXJzKSAtPiAiICsgTG9uZy50b1N0cmluZyhhKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZhaWwgdG8gcGFyc2UgdGhlIHN0cmluZzogIiArIHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGl2YWwgKz0gdmFsX2xlbmd0aDsKKyAgICAgICAgICAgIGlsdmFsICs9IGx2YWxfbGVuZ3RoOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGVzdCB0aGUgaGFuZGxpbmcgb2YgcXVvdGVzCisgICAgcHVibGljIHZvaWQgVGVzdFF1b3RlcygpIHsKKyAgICAKKyAgICAgICAgU3RyaW5nQnVmZmVyIHBhdDsKKyAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgc3ltID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5VUyk7CisgICAgICAgIHBhdCA9IG5ldyBTdHJpbmdCdWZmZXIoImEnZm8nJ28nYiMiKTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQgPSBuZXcgRGVjaW1hbEZvcm1hdChwYXQudG9TdHJpbmcoKSwgc3ltKTsKKyAgICAgICAgU3RyaW5nIHMgPSAoKE51bWJlckZvcm1hdClmbXQpLmZvcm1hdCgxMjMpOworICAgICAgICBsb2dsbigiUGF0dGVybiBcIiIgKyBwYXQgKyAiXCIiKTsKKyAgICAgICAgbG9nbG4oIiBGb3JtYXQgMTIzIC4gIiArIHMpOworICAgICAgICBpZiAoIXMuZXF1YWxzKCJhZm8nb2IxMjMiKSkgCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgYWZvJ29iMTIzIik7CisgICAgICAgIAorICAgICAgICBzID0iIjsKKyAgICAgICAgcGF0ID0gbmV3IFN0cmluZ0J1ZmZlcigiYScnYiMiKTsKKyAgICAgICAgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQocGF0LnRvU3RyaW5nKCksIHN5bSk7CisgICAgICAgIHMgPSAoKE51bWJlckZvcm1hdClmbXQpLmZvcm1hdCgxMjMpOworICAgICAgICBsb2dsbigiUGF0dGVybiBcIiIgKyBwYXQgKyAiXCIiKTsKKyAgICAgICAgbG9nbG4oIiBGb3JtYXQgMTIzIC4gIiArIHMpOworICAgICAgICBpZiAoIXMuZXF1YWxzKCJhJ2IxMjMiKSkgCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgYSdiMTIzIik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGhhbmRsaW5nIG9mIHRoZSBjdXJyZW5jeSBzeW1ib2wgaW4gcGF0dGVybnMuCisgICAgICoqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDdXJyZW5jeVNpZ24oKSB7CisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIHN5bSA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICBTdHJpbmdCdWZmZXIgcGF0ID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIGNoYXIgY3VycmVuY3kgPSAweDAwQTQ7CisgICAgICAgIC8vICJceEE0IywjIzAuMDA7LVx4QTQjLCMjMC4wMCIKKyAgICAgICAgcGF0LmFwcGVuZChjdXJyZW5jeSkuYXBwZW5kKCIjLCMjMC4wMDstIikuYXBwZW5kKGN1cnJlbmN5KS5hcHBlbmQoIiMsIyMwLjAwIik7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQocGF0LnRvU3RyaW5nKCksIHN5bSk7CisgICAgICAgIFN0cmluZyBzID0gKChOdW1iZXJGb3JtYXQpIGZtdCkuZm9ybWF0KDEyMzQuNTYpOworICAgICAgICBwYXQgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICAgICAgbG9nbG4oIlBhdHRlcm4gXCIiICsgZm10LnRvUGF0dGVybigpICsgIlwiIik7CisgICAgICAgIGxvZ2xuKCIgRm9ybWF0ICIgKyAxMjM0LjU2ICsgIiAuICIgKyBzKTsKKyAgICAgICAgaWYgKCFzLmVxdWFscygiJDEsMjM0LjU2IikpCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgJDEsMjM0LjU2Iik7CisgICAgICAgIHMgPSAiIjsKKyAgICAgICAgcyA9ICgoTnVtYmVyRm9ybWF0KSBmbXQpLmZvcm1hdCgtMTIzNC41Nik7CisgICAgICAgIGxvZ2xuKCIgRm9ybWF0ICIgKyBEb3VibGUudG9TdHJpbmcoLTEyMzQuNTYpICsgIiAuICIgKyBzKTsKKyAgICAgICAgaWYgKCFzLmVxdWFscygiLSQxLDIzNC41NiIpKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkIC0kMSwyMzQuNTYiKTsKKyAgICAKKyAgICAgICAgcGF0ID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIC8vICJceEE0XHhBNCAjLCMjMC4wMDtceEE0XHhBNCAtIywjIzAuMDAiCisgICAgICAgIHBhdC5hcHBlbmQoY3VycmVuY3kpLmFwcGVuZChjdXJyZW5jeSkuYXBwZW5kKCIgIywjIzAuMDA7IikuYXBwZW5kKGN1cnJlbmN5KS5hcHBlbmQoY3VycmVuY3kpLmFwcGVuZCgiIC0jLCMjMC4wMCIpOyAKKyAgICAgICAgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQocGF0LnRvU3RyaW5nKCksIHN5bSk7CisgICAgICAgIHMgPSAiIjsKKyAgICAgICAgcyA9ICgoTnVtYmVyRm9ybWF0KSBmbXQpLmZvcm1hdCgxMjM0LjU2KTsKKyAgICAgICAgbG9nbG4oIlBhdHRlcm4gXCIiICsgZm10LnRvUGF0dGVybigpICsgIlwiIik7CisgICAgICAgIGxvZ2xuKCIgRm9ybWF0ICIgKyBEb3VibGUudG9TdHJpbmcoMTIzNC41NikgKyAiIC4gIiArIHMpOworICAgIAorICAgICAgICBpZiAoIXMuZXF1YWxzKCJVU0QgMSwyMzQuNTYiKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCBVU0QgMSwyMzQuNTYiKTsKKyAgICAgICAgcyA9ICIiOworICAgICAgICBzID0gKChOdW1iZXJGb3JtYXQpIGZtdCkuZm9ybWF0KC0xMjM0LjU2KTsKKyAgICAgICAgbG9nbG4oIiBGb3JtYXQgIiArIERvdWJsZS50b1N0cmluZygtMTIzNC41NikgKyAiIC4gIiArIHMpOworICAgICAgICBpZiAoIXMuZXF1YWxzKCJVU0QgLTEsMjM0LjU2IikpCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgVVNEIC0xLDIzNC41NiIpOworICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IGxvY2FsaXplZCBjdXJyZW5jeSBwYXR0ZXJucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Q3VycmVuY3koKSB7CisgICAgICAgIE51bWJlckZvcm1hdCBjdXJyZW5jeUZtdCA9IAorICAgICAgICAgICAgTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoTG9jYWxlLkNBTkFEQV9GUkVOQ0gpOworICAgIAorICAgICAgICBTdHJpbmcgczsKKyAgICAgICAgcyA9IGN1cnJlbmN5Rm10LmZvcm1hdCgxLjUwKTsKKyAgICAgICAgbG9nbG4oIlVuIHBhdXZyZSBpY2kgYS4uLi4uLi4uLi4uIiArIHMpOworICAgICAgICAgICAgCisgICAgICAgIGlmICghcy5lcXVhbHMoIjEsNTAgJCIpKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkIDEsNTAgJCwgZ290ICIgKyBzKTsKKyAgICAgICAgcyA9ICIiOworICAgICAgICBjdXJyZW5jeUZtdCA9IE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKExvY2FsZS5HRVJNQU5ZKTsKKyAgICAgICAgcyA9IGN1cnJlbmN5Rm10LmZvcm1hdCgxLjUwKTsKKyAgICAgICAgbG9nbG4oIlVuIHBhdXZyZSBlbiBBbGxlbWFnbmUgYS4uIiArIHMpOworICAgICAgICBpZiAoIXMuZXF1YWxzKCIxLDUwICIgKyBFVVJPKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCAxLDUwIERNLCBnb3QgIiArIHMpOworICAgICAgICBzID0gIiI7CisgICAgICAgIGN1cnJlbmN5Rm10ID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoTG9jYWxlLkZSQU5DRSk7CisgICAgICAgIHMgPSBjdXJyZW5jeUZtdC5mb3JtYXQoMS41MCk7CisgICAgICAgIGxvZ2xuKCJVbiBwYXV2cmUgZW4gRnJhbmNlIGEuLi4uLiIgKyBzKTsKKyAgICAgICAgaWYgKCFzLmVxdWFscygiMSw1MCAiICsgRVVSTykpCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgMSw1MCBGLCBnb3QgIiArIHMpOworICAgIAorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlIEN1cnJlbmN5IHJlZ2lzdHJhdGlvbi1yZWxhdGVkIEFQSS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Q3VycmVuY3lSZWdpc3RyYXRpb24oKSB7CisgICAgICAgIC8qIGRsZgorICAgICAgICAvLyBhdmFpbGFibGUgbG9jYWxlcworICAgICAgICBMb2NhbGVbXSBsb2NhbGVzID0gQ3VycmVuY3kuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICBsb2dsbigiYXZhaWxhYmxlIGxvY2FsZXMiKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsb2dsbigiWyIgKyBpICsgIl0gIiArIGxvY2FsZXNbaV0udG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZGVudGljYWwgaW5zdGFuY2UKKyAgICAgICAgQ3VycmVuY3kgZnIwID0gQ3VycmVuY3kuZ2V0SW5zdGFuY2UoTG9jYWxlLkZSQU5DRSk7CisgICAgICAgIEN1cnJlbmN5IGZyMSA9IEN1cnJlbmN5LmdldEluc3RhbmNlKExvY2FsZS5GUkFOQ0UpOworICAgICAgICBpZiAoZnIwICE9IGZyMSkgeworICAgICAgICAgICAgZXJybG4oIm5vbi1pZGVudGljYWwgY3VycmVuY2llcyBmb3IgbG9jYWxlIik7CisgICAgICAgIH0KKworICAgICAgICBDdXJyZW5jeSB1czAgPSBDdXJyZW5jeS5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworCisgICAgICAgIC8vIHJlcGxhY2UgVVMgd2l0aCBGUgorICAgICAgICBPYmplY3Qga2V5ID0gQ3VycmVuY3kucmVnaXN0ZXIoZnIwLCBMb2NhbGUuVVMpOworCisgICAgICAgIGxvZ2xuKCJGUkVOQ0ggY3VycmVuY3k6ICIgKyBmcjApOworICAgICAgICBsb2dsbigiVVMgY3VycmVuY3k6ICIgKyB1czApOworCisgICAgICAgIC8vIHF1ZXJ5IFVTIGFuZCBnZXQgRlIgYmFjaworICAgICAgICBDdXJyZW5jeSB1czEgPSBDdXJyZW5jeS5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICBsb2dsbigiZ290IGN1cnJlbmN5OiAiICsgdXMxKTsKKyAgICAgICAgaWYgKHVzMSAhPSBmcjApIHsKKyAgICAgICAgICAgIGVycmxuKCJyZWdpc3RyeSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbigibmV3IFVTIGN1cnJlbmN5OiAiICsgdXMxKTsKKworICAgICAgICAvLyB1bnJlZ2lzdGVyIGFuZCBnZXQgVVMgYmFjaworICAgICAgICBpZiAoIUN1cnJlbmN5LnVucmVnaXN0ZXIoa2V5KSkgeworICAgICAgICAgICAgZXJybG4oImZhaWxlZCB0byB1bnJlZ2lzdGVyIGtleTogIiArIGtleSk7CisgICAgICAgIH0KKyAgICAgICAgQ3VycmVuY3kgdXMyID0gQ3VycmVuY3kuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKTsKKyAgICAgICAgaWYgKCF1czIuZXF1YWxzKHVzMCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJhZnRlciB1bnJlZ2lzdGVyIFVTIGRpZG4ndCBnZXQgb3JpZ2luYWwgY3VycmVuY3kgYmFjazogIiArIHVzMiArICIgIT0gIiArIHVzMCk7CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBDdXJyZW5jeSBvYmplY3QgaGFuZGxpbmcsIG5ldyBhcyBvZiBJQ1UgMi4yLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDdXJyZW5jeU9iamVjdCgpIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IGZtdCA9IAorICAgICAgICAgICAgTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoTG9jYWxlLlVTKTsKKyAgICAgICAgCisgICAgICAgIGV4cGVjdEN1cnJlbmN5KGZtdCwgbnVsbCwgMTIzNC41NiwgIiQxLDIzNC41NiIpOworCisgICAgICAgIGV4cGVjdEN1cnJlbmN5KGZtdCwgQ3VycmVuY3kuZ2V0SW5zdGFuY2UoTG9jYWxlLkZSQU5DRSksCisgICAgICAgICAgICAgICAgICAgICAgIDEyMzQuNTYsICJcdTIwQUMxLDIzNC41NiIpOyAvLyBFdXJvCisKKyAgICAgICAgZXhwZWN0Q3VycmVuY3koZm10LCBDdXJyZW5jeS5nZXRJbnN0YW5jZShMb2NhbGUuSkFQQU4pLAorICAgICAgICAgICAgICAgICAgICAgICAxMjM0LjU2LCAiXHVGRkU1MSwyMzUiKTsgLy8gWWVuCisKKyAgICAgICAgZXhwZWN0Q3VycmVuY3koZm10LCBDdXJyZW5jeS5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJmciIsICJDSCIsICIiKSksCisgICAgICAgICAgICAgICAgICAgICAgIDEyMzQuNTYsICJDSEYxLDIzNC41MCIpOyAvLyAwLjI1IHJvdW5kaW5nCisKKyAgICAgICAgZXhwZWN0Q3VycmVuY3koZm10LCBDdXJyZW5jeS5nZXRJbnN0YW5jZShMb2NhbGUuVVMpLAorICAgICAgICAgICAgICAgICAgICAgICAxMjM0LjU2LCAiJDEsMjM0LjU2Iik7CisKKyAgICAgICAgZm10ID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoTG9jYWxlLkZSQU5DRSk7CisgICAgICAgIAorICAgICAgICBleHBlY3RDdXJyZW5jeShmbXQsIG51bGwsIDEyMzQuNTYsICIxIDIzNCw1NiBcdTIwQUMiKTsKKworICAgICAgICBleHBlY3RDdXJyZW5jeShmbXQsIEN1cnJlbmN5LmdldEluc3RhbmNlKExvY2FsZS5KQVBBTiksCisgICAgICAgICAgICAgICAgICAgICAgIDEyMzQuNTYsICIxIDIzNSBcdUZGRTUiKTsgLy8gWWVuCisKKyAgICAgICAgZXhwZWN0Q3VycmVuY3koZm10LCBDdXJyZW5jeS5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJmciIsICJDSCIsICIiKSksCisgICAgICAgICAgICAgICAgICAgICAgIDEyMzQuNTYsICIxIDIzNCw1MCBDSEYiKTsgLy8gMC4yNSByb3VuZGluZworCisgICAgICAgIGV4cGVjdEN1cnJlbmN5KGZtdCwgQ3VycmVuY3kuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgMTIzNC41NiwgIjEgMjM0LDU2IFVTRCIpOworCisgICAgICAgIGV4cGVjdEN1cnJlbmN5KGZtdCwgQ3VycmVuY3kuZ2V0SW5zdGFuY2UoTG9jYWxlLkZSQU5DRSksCisgICAgICAgICAgICAgICAgICAgICAgIDEyMzQuNTYsICIxIDIzNCw1NiBcdTIwQUMiKTsgLy8gRXVybworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0Q3VycmVuY3koTnVtYmVyRm9ybWF0IG5mLCBDdXJyZW5jeSBjdXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsdWUsIFN0cmluZyBzdHJpbmcpIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQgPSAoRGVjaW1hbEZvcm1hdCkgbmY7CisgICAgICAgIGlmIChjdXJyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZtdC5zZXRDdXJyZW5jeShjdXJyKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcyA9IGZtdC5mb3JtYXQodmFsdWUpLnJlcGxhY2UoJ1x1MDBBMCcsICcgJyk7CisKKyAgICAgICAgaWYgKHMuZXF1YWxzKHN0cmluZykpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPazogIiArIHZhbHVlICsgIiB4ICIgKyBjdXJyICsgIiA9PiAiICsgcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIHZhbHVlICsgIiB4ICIgKyBjdXJyICsgIiA9PiAiICsgcyArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgc3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDdXJyZW5jeVBhdHRlcm5zKCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgTG9jYWxlW10gbG9jcyA9IE51bWJlckZvcm1hdC5nZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgIGZvciAoaT0wOyBpPGxvY3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIE51bWJlckZvcm1hdCBuZiA9IE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKGxvY3NbaV0pOworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGN1cnJlbmN5IGZvcm1hdHMgZG8gbm90IGhhdmUgYSB2YXJpYWJsZSBudW1iZXIKKyAgICAgICAgICAgIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cworICAgICAgICAgICAgaW50IG1pbiA9IG5mLmdldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpOworICAgICAgICAgICAgaW50IG1heCA9IG5mLmdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpOworICAgICAgICAgICAgaWYgKG1pbiAhPSBtYXgpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgYSA9IG5mLmZvcm1hdCgxLjApOworICAgICAgICAgICAgICAgIFN0cmluZyBiID0gbmYuZm9ybWF0KDEuMTI1KTsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIGxvY3NbaV0gKworICAgICAgICAgICAgICAgICAgICAgICIgbWluIGZyYWN0aW9uIGRpZ2l0cyAhPSBtYXggZnJhY3Rpb24gZGlnaXRzOyAiKworICAgICAgICAgICAgICAgICAgICAgICJ4IDEuMCA9PiAiICsgYSArCisgICAgICAgICAgICAgICAgICAgICAgIjsgeCAxLjEyNSA9PiAiICsgYik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgRVVSTyBjdXJyZW5jeSBmb3JtYXRzIGhhdmUgZXhhY3RseSAyIGZyYWN0aW9uIGRpZ2l0cworICAgICAgICAgICAgaWYgKG5mIGluc3RhbmNlb2YgRGVjaW1hbEZvcm1hdCkgeworICAgICAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSAoRGVjaW1hbEZvcm1hdCkgbmY7CisgICAgICAgICAgICAgICAgaWYgKCJFVVIiLmVxdWFscyhkZi5nZXRDdXJyZW5jeSgpLmdldEN1cnJlbmN5Q29kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobWluICE9IDIgfHwgbWF4ICE9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhID0gbmYuZm9ybWF0KDEuMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIGxvY3NbaV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBhIEVVUk8gZm9ybWF0IGJ1dCBpdCBkb2VzIG5vdCBoYXZlIDIgZnJhY3Rpb24gZGlnaXRzOyAiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInggMS4wID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEbyBydWRpbWVudGFyeSB0ZXN0aW5nIG9mIHBhcnNpbmcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFBhcnNlKCkgeworICAgICAgICBTdHJpbmcgYXJnID0gIjAuMCI7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZm9ybWF0ID0gbmV3IERlY2ltYWxGb3JtYXQoIjAwIik7CisgICAgICAgIGRvdWJsZSBhTnVtYmVyID0gMGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhTnVtYmVyID0gZm9ybWF0LnBhcnNlKGFyZykuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgfSBjYXRjaCAoamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbigicGFyc2UoIiArIGFyZyArICIpID0gIiArIGFOdW1iZXIpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IHByb3BlciByb3VuZGluZyBieSB0aGUgZm9ybWF0IG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Um91bmRpbmc0ODcoKSB7CisgICAgCisgICAgICAgIE51bWJlckZvcm1hdCBuZiA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworICAgICAgICByb3VuZGluZ1Rlc3QobmYsIDAuMDAxNTk5OTksIDQsICIwLjAwMTYiKTsKKyAgICAgICAgcm91bmRpbmdUZXN0KG5mLCAwLjAwOTk1LCA0LCAiMC4wMSIpOworICAgIAorICAgICAgICByb3VuZGluZ1Rlc3QobmYsIDEyLjM5OTUsIDMsICIxMi40Iik7CisgICAgCisgICAgICAgIHJvdW5kaW5nVGVzdChuZiwgMTIuNDk5OSwgMCwgIjEyIik7CisgICAgICAgIHJvdW5kaW5nVGVzdChuZiwgLSAxOS41LCAwLCAiLTIwIik7CisgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGZ1bmN0aW9uaW5nIG9mIHRoZSBzZWNvbmRhcnkgZ3JvdXBpbmcgdmFsdWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFNlY29uZGFyeUdyb3VwaW5nKCkgeworICAgIAorICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBVUyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICBEZWNpbWFsRm9ybWF0IGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIywjIywjIyMiLCBVUyk7CisgICAgCisgICAgICAgIGV4cGVjdChmLCAxMjM0NTY3ODlMLCAiMTIsMzQsNTYsNzg5Iik7CisgICAgICAgIGV4cGVjdFBhdChmLCAiIywjIywjIyMiKTsKKyAgICAgICAgZi5hcHBseVBhdHRlcm4oIiMsIyMjIik7CisgICAgCisgICAgICAgIGYuc2V0U2Vjb25kYXJ5R3JvdXBpbmdTaXplKDQpOworICAgICAgICBleHBlY3QoZiwgMTIzNDU2Nzg5TCwgIjEyLDM0NTYsNzg5Iik7CisgICAgICAgIGV4cGVjdFBhdChmLCAiIywjIyMjLCMjIyIpOworICAgICAgICBOdW1iZXJGb3JtYXQgZyA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKCJoaSIsICJJTiIpKTsKKyAgICAKKyAgICAgICAgU3RyaW5nIG91dCA9ICIiOworICAgICAgICBsb25nIGwgPSAxODc2NTQzMjEwTDsKKyAgICAgICAgb3V0ID0gZy5mb3JtYXQobCk7CisgICAgCisgICAgICAgIC8vIGV4cGVjdCAiMSw4Nyw2NSw0MywyMTAiLCBidXQgd2l0aCBIaW5kaSBkaWdpdHMKKyAgICAgICAgLy8gICAgICAgICAwMTIzNDU2Nzg5MDEyMworICAgICAgICBib29sZWFuIG9rID0gdHJ1ZTsKKyAgICAgICAgaWYgKG91dC5sZW5ndGgoKSAhPSAxNCkgeworICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGV4cGVjdEdyb3VwID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMSA6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNCA6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNyA6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTAgOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0R3JvdXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIExhdGVyIC0tIGZpeCB0aGlzIHRvIGdldCB0aGUgYWN0dWFsIGdyb3VwaW5nCisgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KKyAgICAgICAgICAgICAgICBib29sZWFuIGlzR3JvdXAgPSAob3V0LmNoYXJBdChpKSA9PSAweDAwMkMpOworICAgICAgICAgICAgICAgIGlmIChpc0dyb3VwICE9IGV4cGVjdEdyb3VwKSB7CisgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCAgRXhwZWN0ZWQgIisgbCArICIgeCBoaV9JTiAuIFwiMSw4Nyw2NSw0MywyMTBcIiAod2l0aCBIaW5kaSBkaWdpdHMpLCBnb3QgXCIiCisgICAgICAgICAgICAgICAgICAgICsgb3V0ICsgIlwiIik7IAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nbG4oIk9rICAgICIgKyBsICsgIiB4IGhpX0lOIC4gXCIiICsgb3V0ICsgIlwiIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgcm91bmRpbmdUZXN0KE51bWJlckZvcm1hdCBuZiwgZG91YmxlIHgsIGludCBtYXhGcmFjdGlvbkRpZ2l0cywgZmluYWwgU3RyaW5nIGV4cGVjdGVkKSB7CisgICAgICAgIG5mLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhtYXhGcmFjdGlvbkRpZ2l0cyk7CisgICAgICAgIFN0cmluZyBvdXQgPSBuZi5mb3JtYXQoeCk7CisgICAgICAgIGxvZ2xuKHggKyAiIGZvcm1hdHMgd2l0aCAiICsgbWF4RnJhY3Rpb25EaWdpdHMgKyAiIGZyYWN0aW9uYWwgZGlnaXRzIHRvICIgKyBvdXQpOyAKKyAgICAgICAgaWYgKCFvdXQuZXF1YWxzKGV4cGVjdGVkKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCAiICsgZXhwZWN0ZWQpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBVcGdyYWRlIHRvIGFscGhhV29ya3MKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBleHBlY3QoTnVtYmVyRm9ybWF0IGZtdCwgU3RyaW5nIHN0ciwgaW50IG4pIHsKKyAgICAgICAgTG9uZyBudW0gPSBuZXcgTG9uZygwKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgbnVtID0gKExvbmcpZm10LnBhcnNlKHN0cik7CisgICAgICAgIH0gY2F0Y2ggKGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dsbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHBhdCA9ICgoRGVjaW1hbEZvcm1hdClmbXQpLnRvUGF0dGVybigpOworICAgICAgICBpZiAobnVtLmxvbmdWYWx1ZSgpID09IG4pIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPayAgIFwiIiArIHN0ciArICJcIiB4ICIgKworICAgICAgICAgICAgICAgICAgcGF0ICsgIiA9ICIgKworICAgICAgICAgICAgICAgICAgbnVtLnRvU3RyaW5nKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUwgXCIiICsgc3RyICsgIlwiIHggIiArCisgICAgICAgICAgICAgICAgICBwYXQgKyAiID0gIiArCisgICAgICAgICAgICAgICAgICBudW0udG9TdHJpbmcoKSArICIsIGV4cGVjdGVkICIgKyBuICsgIkwiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBVcGdyYWRlIHRvIGFscGhhV29ya3MKKyAgICAgKi8gICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGV4cGVjdChOdW1iZXJGb3JtYXQgZm10LCBmaW5hbCBkb3VibGUgbiwgZmluYWwgU3RyaW5nIGV4cCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgc2F3ID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7IAorICAgICAgICBzYXcgPSBmbXQuZm9ybWF0KG4sIHNhdywgcG9zKTsKKyAgICAgICAgU3RyaW5nIHBhdCA9ICgoRGVjaW1hbEZvcm1hdClmbXQpLnRvUGF0dGVybigpOworICAgICAgICBpZiAoc2F3LnRvU3RyaW5nKCkuZXF1YWxzKGV4cCkpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPayAgICIgKyBEb3VibGUudG9TdHJpbmcobikgKyAiIHggIiArCisgICAgICAgICAgICAgICAgICBwYXQgKyAiID0gXCIiICsKKyAgICAgICAgICAgICAgICAgIHNhdyArICJcIiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUwgIiArIERvdWJsZS50b1N0cmluZyhuKSArICIgeCAiICsKKyAgICAgICAgICAgICAgICAgIHBhdCArICIgPSBcIiIgKworICAgICAgICAgICAgICAgICAgc2F3ICsgIlwiLCBleHBlY3RlZCBcIiIgKyBleHAgKyAiXCIiKTsKKyAgICAgICAgfSAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVXBncmFkZSB0byBhbHBoYVdvcmtzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEV4cG9uZW50KCkgeworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBVUyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICBEZWNpbWFsRm9ybWF0IGZtdDEgPSBuZXcgRGVjaW1hbEZvcm1hdCgiMC4jIyNFMCIsIFVTKTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQyID0gbmV3IERlY2ltYWxGb3JtYXQoIjAuIyMjRSswIiwgVVMpOworICAgICAgICBpbnQgbiA9IDEyMzQ7CisgICAgICAgIGV4cGVjdChmbXQxLCBuLCAiMS4yMzRFMyIpOworICAgICAgICBleHBlY3QoZm10MiwgbiwgIjEuMjM0RSszIik7CisgICAgICAgIGV4cGVjdChmbXQxLCAiMS4yMzRFMyIsIG4pOworICAgICAgICBleHBlY3QoZm10MSwgIjEuMjM0RSszIiwgbik7IC8vIEVpdGhlciBmb3JtYXQgc2hvdWxkIHBhcnNlICJFKzMiCisgICAgICAgIGV4cGVjdChmbXQyLCAiMS4yMzRFKzMiLCBuKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVXBncmFkZSB0byBhbHBoYVdvcmtzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFNjaWVudGlmaWMoKSB7CisgICAgCisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIFVTID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5VUyk7CisgICAgCisgICAgICAgIC8vIFRlc3QgcGF0dGVybiByb3VuZC10cmlwCisgICAgICAgIGZpbmFsIFN0cmluZyBQQVRbXSA9IHsgIiNFMCIsICIwLiMjIyNFMCIsICIwMC4wMDBFMDAiLCAiIyMwLiMjIyNFMDAwIiwgIjAuIyMjRTA7WzAuIyMjRTBdIiB9OworICAgICAgICBpbnQgUEFUX2xlbmd0aCA9IFBBVC5sZW5ndGg7CisgICAgICAgIGludCBESUdJVFNbXSA9IHsKKyAgICAgICAgICAgIC8vIG1pbiBpbnQsIG1heCBpbnQsIG1pbiBmcmFjLCBtYXggZnJhYworICAgICAgICAgICAgMCwgMSwgMCwgMCwgLy8gIiNFMCIKKyAgICAgICAgICAgIDEsIDEsIDAsIDQsIC8vICIwLiMjIyNFMCIKKyAgICAgICAgICAgIDIsIDIsIDMsIDMsIC8vICIwMC4wMDBFMDAiCisgICAgICAgICAgICAxLCAzLCAwLCA0LCAvLyAiIyMwLiMjIyNFMDAwIgorICAgICAgICAgICAgMSwgMSwgMCwgMywgLy8gIjAuIyMjRTA7WzAuIyMjRTBdIgorICAgICAgICB9OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFBBVF9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIHBhdCA9IFBBVFtpXTsKKyAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdChwYXQsIFVTKTsKKyAgICAgICAgICAgIFN0cmluZyBwYXQyID0gZGYudG9QYXR0ZXJuKCk7CisgICAgICAgICAgICBpZiAocGF0LmVxdWFscyhwYXQyKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPayAgIFBhdHRlcm4gcnQgXCIiICsgcGF0ICsgIlwiIC4gXCIiICsgcGF0MiArICJcIiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTCBQYXR0ZXJuIHJ0IFwiIiArIHBhdCArICJcIiAuIFwiIiArIHBhdDIgKyAiXCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBkaWdpdCBjb3VudHMgbWF0Y2ggd2hhdCB3ZSBleHBlY3QKKyAgICAgICAgICAgIGlmIChkZi5nZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygpICE9IERJR0lUU1s0ICogaV0KKyAgICAgICAgICAgICAgICB8fCBkZi5nZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpICE9IERJR0lUU1s0ICogaSArIDFdCisgICAgICAgICAgICAgICAgfHwgZGYuZ2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKCkgIT0gRElHSVRTWzQgKiBpICsgMl0KKyAgICAgICAgICAgICAgICB8fCBkZi5nZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSAhPSBESUdJVFNbNCAqIGkgKyAzXSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMIFwiIisgcGF0KyAiXCIgbWluL21heCBpbnQ7IG1pbi9tYXggZnJhYyA9ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgZGYuZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBkZi5nZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpICsgIjsiCisgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmdldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpICsgIi8iCisgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpICsgIiwgZXhwZWN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgRElHSVRTWzQgKiBpXSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBESUdJVFNbNCAqIGkgKyAxXSArICI7IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICsgRElHSVRTWzQgKiBpICsgMl0gKyAiLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgRElHSVRTWzQgKiBpICsgM10pOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiNFMCIsIFVTKSwgMTIzNDUuMCwgIjEuMjM0NUU0Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiMEUwIiwgVVMpLCAxMjM0NS4wLCAiMUU0Iik7CisgICAgCisgICAgICAgIC8vIHBhdHRlcm4gb2YgTnVtYmVyRm9ybWF0LmdldFNjaWVudGlmaWNJbnN0YW5jZShMb2NhbGUuVVMpID0gIjAuIyMjIyMjRTAiIG5vdCAiI0UwIgorICAgICAgICAvLyBzbyByZXN1bHQgPSAxLjIzNDU2OEU0IG5vdCAxLjIzNDU2Nzg5MDFFNAorICAgICAgICAvL3doZW4gdGhlIHBhdHRlcm4gcHJvYmxlbSBpcyBmaW5hbGl6ZWQsIGRlbGV0ZSBjb21tZW50IG1hcmsnLy8nIAorICAgICAgICAvL29mIHRoZSBmb2xsb3dpbmcgY29kZQorICAgICAgICBleHBlY3QoTnVtYmVyRm9ybWF0LmdldFNjaWVudGlmaWNJbnN0YW5jZShMb2NhbGUuVVMpLCAxMjM0NS42Nzg5MDEsICIxLjIzNDU2Nzg5MDFFNCIpOworICAgIAorICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4jIyNFMCIsIFVTKSwgMTIzNDUuMCwgIjEyLjM0RTMiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIzAuIyMjRTAiLCBVUyksIDEyMzQ1LjAwMDAxLCAiMTIuMzVFMyIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4jIyMjRTAiLCBVUyksIDEyMzQ1LCAiMTIuMzQ1RTMiKTsKKyAgICAKKyAgICAgICAgLy8gcGF0dGVybiBvZiBOdW1iZXJGb3JtYXQuZ2V0U2NpZW50aWZpY0luc3RhbmNlKExvY2FsZS5VUykgPSAiMC4jIyMjIyNFMCIgbm90ICIjRTAiCisgICAgICAgIC8vIHNvIHJlc3VsdCA9IDEuMjM0NTY4RTQgbm90IDEuMjM0NTY3ODkwMUU0CisgICAgICAgIGV4cGVjdChOdW1iZXJGb3JtYXQuZ2V0U2NpZW50aWZpY0luc3RhbmNlKExvY2FsZS5GUkFOQ0UpLCAxMjM0NS42Nzg5MDEsICIxLDIzNDU2Nzg5MDFFNCIpOworICAgIAorICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4jIyMjRTAiLCBVUyksIDc4OS4xMjM0NWUtOSwgIjc4OS4xMkUtOSIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4jIyMjRTAiLCBVUyksIDc4MC5lLTksICI3ODBFLTkiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIuIyMjRTAiLCBVUyksIDQ1Njc4LjAsICIuNDU3RTUiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIuIyMjRTAiLCBVUyksIDAsICIuMEUwIik7CisgICAgICAgIC8qCisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdFtdIHsgbmV3IERlY2ltYWxGb3JtYXQoIiNFMCIsIFVTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVjaW1hbEZvcm1hdCgiIyNFMCIsIFVTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVjaW1hbEZvcm1hdCgiIyMjI0UwIiwgVVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWNpbWFsRm9ybWF0KCIwRTAiLCBVUyksICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWNpbWFsRm9ybWF0KCIwMEUwIiwgVVMpLCAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWNpbWFsRm9ybWF0KCIwMDBFMCIsIFVTKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICBuZXcgTG9uZyg0NTY3ODAwMCksCisgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAiNC41Njc4RTciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQ1LjY3OEU2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0NTY3LjhFNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNUU3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0NkU2IiwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQ1N0U1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICApOworICAgICAgICAhCisgICAgICAgICEgVW5yb2xsIHRoaXMgdGVzdCBpbnRvIGluZGl2aWR1YWwgdGVzdHMgYmVsb3cuLi4KKyAgICAgICAgIQorICAgICAgICAqLworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiNFMCIsIFVTKSwgNDU2NzgwMDAsICI0LjU2NzhFNyIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjRTAiLCBVUyksIDQ1Njc4MDAwLCAiNDUuNjc4RTYiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIyMjRTAiLCBVUyksIDQ1Njc4MDAwLCAiNDU2Ny44RTQiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIwRTAiLCBVUyksIDQ1Njc4MDAwLCAiNUU3Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiMDBFMCIsIFVTKSwgNDU2NzgwMDAsICI0NkU2Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiMDAwRTAiLCBVUyksIDQ1Njc4MDAwLCAiNDU3RTUiKTsKKyAgICAgICAgLyoKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIyNFMCIsIFVTLCBzdGF0dXMpLAorICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsgbmV3IERvdWJsZSgwLjAwMDAxMjMpLCAiMTIuM0UtNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlKDAuMDAwMTIzKSwgIjEyM0UtNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlKDAuMDAxMjMpLCAiMS4yM0UtMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlKDAuMDEyMyksICIxMi4zRS0zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEb3VibGUoMC4xMjMpLCAiMTIzRS0zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEb3VibGUoMS4yMyksICIxLjIzRTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERvdWJsZSgxMi4zKSwgIjEyLjNFMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlKDEyMyksICIxMjNFMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlKDEyMzApLCAiMS4yM0UzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICEKKyAgICAgICAgISBVbnJvbGwgdGhpcyB0ZXN0IGludG8gaW5kaXZpZHVhbCB0ZXN0cyBiZWxvdy4uLgorICAgICAgICAhCisgICAgICAgICovCisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiIyMjRTAiLCBVUyksIDAuMDAwMDEyMywgIjEyLjNFLTYiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIyNFMCIsIFVTKSwgMC4wMDAxMjMsICIxMjNFLTYiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIyNFMCIsIFVTKSwgMC4wMDEyMywgIjEuMjNFLTMiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIyNFMCIsIFVTKSwgMC4wMTIzLCAiMTIuM0UtMyIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjI0UwIiwgVVMpLCAwLjEyMywgIjEyM0UtMyIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjI0UwIiwgVVMpLCAxLjIzLCAiMS4yM0UwIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiIyMjRTAiLCBVUyksIDEyLjMsICIxMi4zRTAiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIjIyNFMCIsIFVTKSwgMTIzLjAsICIxMjNFMCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjI0UwIiwgVVMpLCAxMjMwLjAsICIxLjIzRTMiKTsKKyAgICAgICAgLyoKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KCIwLiNFKzAwIiwgVVMsIHN0YXR1cyksCisgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBuZXcgRG91YmxlKDAuMDAwMTIpLCAiMS4yRS0wNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTG9uZygxMjAwMCksICAgICAiMS4yRSswNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAhCisgICAgICAgICEgVW5yb2xsIHRoaXMgdGVzdCBpbnRvIGluZGl2aWR1YWwgdGVzdHMgYmVsb3cuLi4KKyAgICAgICAgIQorICAgICAgICAqLworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIjAuI0UrMDAiLCBVUyksIDAuMDAwMTIsICIxLjJFLTA0Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiMC4jRSswMCIsIFVTKSwgMTIwMDAsICIxLjJFKzA0Iik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFVwZ3JhZGUgdG8gYWxwaGFXb3JrcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQYWQoKSB7CisgICAgCisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIFVTID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5VUyk7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiKl4jIy4jIyIsIFVTKSwgMCwgIl5eXl4wIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdCgiKl4jIy4jIyIsIFVTKSwgLTEuMywgIl4tMS4zIik7CisgICAgICAgIGV4cGVjdCgKKyAgICAgICAgICAgIG5ldyBEZWNpbWFsRm9ybWF0KCIjIzAuMCMjIyNFMCpfIGctbS9zXjIiLCBVUyksIAorICAgICAgICAgICAgMCwgCisgICAgICAgICAgICAiMC4wRTBfX19fX18gZy1tL3NeMiIpOyAKKyAgICAgICAgZXhwZWN0KAorICAgICAgICAgICAgbmV3IERlY2ltYWxGb3JtYXQoIiMjMC4wIyMjI0UwKl8gZy1tL3NeMiIsIFVTKSwgCisgICAgICAgICAgICAxLjAgLyAzLCAKKyAgICAgICAgICAgICIzMzMuMzMzRS0zXyBnLW0vc14yIik7IAorICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoIiMjMC4wIyMjIypfIGctbS9zXjIiLCBVUyksIDAsICIwLjBfX19fX18gZy1tL3NeMiIpOworICAgICAgICBleHBlY3QoCisgICAgICAgICAgICBuZXcgRGVjaW1hbEZvcm1hdCgiIyMwLjAjIyMjKl8gZy1tL3NeMiIsIFVTKSwgCisgICAgICAgICAgICAxLjAgLyAzLCAKKyAgICAgICAgICAgICIwLjMzMzMzX18gZy1tL3NeMiIpOyAKKyAgICAKKyAgICAgICAgLy8gVGVzdCBwYWRkaW5nIGJlZm9yZSBhIHNpZ24KKyAgICAgICAgZmluYWwgU3RyaW5nIGZvcm1hdFN0ciA9ICIqeCMsIyMjLCMjIywjIzAuMCM7KngoIyMjLCMjIywjIzAuMCMpIjsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0ciwgVVMpLCAtMTAsICJ4eHh4eHh4eHh4KDEwLjApIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgLTEwMDAsICJ4eHh4eHh4KDEsMDAwLjApIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgLTEwMDAwMDAsICJ4eHgoMSwwMDAsMDAwLjApIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgLTEwMC4zNywgInh4eHh4eHh4KDEwMC4zNykiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0ciwgVVMpLCAtMTA0NTYuMzcsICJ4eHh4eCgxMCw0NTYuMzcpIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgLTExMjA0NTYuMzcsICJ4eCgxLDEyMCw0NTYuMzcpIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgLTExMjA0NTYwMC4zNywgIigxMTIsMDQ1LDYwMC4zNykiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0ciwgVVMpLCAtMTI1MjA0NTYwMC4zNywgIigxLDI1MiwwNDUsNjAwLjM3KSIpOworICAgIAorICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyLCBVUyksIDEwLCAieHh4eHh4eHh4eHh4MTAuMCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyLCBVUyksIDEwMDAsICJ4eHh4eHh4eHgxLDAwMC4wIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgMTAwMDAwMCwgInh4eHh4MSwwMDAsMDAwLjAiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0ciwgVVMpLCAxMDAuMzcsICJ4eHh4eHh4eHh4MTAwLjM3Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgMTA0NTYuMzcsICJ4eHh4eHh4MTAsNDU2LjM3Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgMTEyMDQ1Ni4zNywgInh4eHgxLDEyMCw0NTYuMzciKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0ciwgVVMpLCAxMTIwNDU2MDAuMzcsICJ4eDExMiwwNDUsNjAwLjM3Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIsIFVTKSwgMTAyNTIwNDU2MDAuMzcsICIxMCwyNTIsMDQ1LDYwMC4zNyIpOworICAgIAorICAgICAgICAvLyBUZXN0IHBhZGRpbmcgYmV0d2VlbiBhIHNpZ24gYW5kIGEgbnVtYmVyCisgICAgICAgIGZpbmFsIFN0cmluZyBmb3JtYXRTdHIyID0gIiMsIyMjLCMjIywjIzAuMCMqeDsoIyMjLCMjIywjIzAuMCMqeCkiOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyMiwgVVMpLCAtMTAsICIoMTAuMHh4eHh4eHh4eHgpIik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIyLCBVUyksIC0xMDAwLCAiKDEsMDAwLjB4eHh4eHh4KSIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyMiwgVVMpLCAtMTAwMDAwMCwgIigxLDAwMCwwMDAuMHh4eCkiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0cjIsIFVTKSwgLTEwMC4zNywgIigxMDAuMzd4eHh4eHh4eCkiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0cjIsIFVTKSwgLTEwNDU2LjM3LCAiKDEwLDQ1Ni4zN3h4eHh4KSIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyMiwgVVMpLCAtMTEyMDQ1Ni4zNywgIigxLDEyMCw0NTYuMzd4eCkiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0cjIsIFVTKSwgLTExMjA0NTYwMC4zNywgIigxMTIsMDQ1LDYwMC4zNykiKTsKKyAgICAgICAgZXhwZWN0KG5ldyBEZWNpbWFsRm9ybWF0KGZvcm1hdFN0cjIsIFVTKSwgLTEyNTIwNDU2MDAuMzcsICIoMSwyNTIsMDQ1LDYwMC4zNykiKTsgCisgICAgCisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIyLCBVUyksIDEwLCAiMTAuMHh4eHh4eHh4eHh4eCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyMiwgVVMpLCAxMDAwLCAiMSwwMDAuMHh4eHh4eHh4eCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyMiwgVVMpLCAxMDAwMDAwLCAiMSwwMDAsMDAwLjB4eHh4eCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyMiwgVVMpLCAxMDAuMzcsICIxMDAuMzd4eHh4eHh4eHh4Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIyLCBVUyksIDEwNDU2LjM3LCAiMTAsNDU2LjM3eHh4eHh4eCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyMiwgVVMpLCAxMTIwNDU2LjM3LCAiMSwxMjAsNDU2LjM3eHh4eCIpOworICAgICAgICBleHBlY3QobmV3IERlY2ltYWxGb3JtYXQoZm9ybWF0U3RyMiwgVVMpLCAxMTIwNDU2MDAuMzcsICIxMTIsMDQ1LDYwMC4zN3h4Iik7CisgICAgICAgIGV4cGVjdChuZXcgRGVjaW1hbEZvcm1hdChmb3JtYXRTdHIyLCBVUyksIDEwMjUyMDQ1NjAwLjM3LCAiMTAsMjUyLDA0NSw2MDAuMzciKTsKKyAgICAKKyAgICAgICAgLy90ZXN0aW5nIHRoZSBzZXRQYWRDaGFyYWN0ZXIoVW5pY29kZVN0cmluZykgYW5kIGdldFBhZENoYXJhY3RlclN0cmluZygpCisgICAgICAgIERlY2ltYWxGb3JtYXQgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQoIiMiLCBVUyk7CisgICAgICAgIGNoYXIgcGFkU3RyaW5nID0gJ1AnOworICAgICAgICBmbXQuc2V0UGFkQ2hhcmFjdGVyKHBhZFN0cmluZyk7CisgICAgICAgIGV4cGVjdFBhZChmbXQsICIqUCMjLiMjIiwgRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1BSRUZJWCwgNSwgcGFkU3RyaW5nKTsKKyAgICAgICAgZm10LnNldFBhZENoYXJhY3RlcignXicpOworICAgICAgICBleHBlY3RQYWQoZm10LCAiKl4jIiwgRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1BSRUZJWCwgMSwgJ14nKTsKKyAgICAgICAgLy9jb21tZW50ZWQgdW50aWxsIGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXRlCisgICAgICAgIC8qICBmbXQuc2V0UGFkQ2hhcmFjdGVyKChVbmljb2RlU3RyaW5nKSJeXl4iKTsKKyAgICAgICAgICBleHBlY3RQYWQoZm10LCAiKl5eXiMiLCBEZWNpbWFsRm9ybWF0LmtQYWRCZWZvcmVQcmVmaXgsIDMsIChVbmljb2RlU3RyaW5nKSJeXl4iKTsKKyAgICAgICAgICBwYWRTdHJpbmcucmVtb3ZlKCk7CisgICAgICAgICAgcGFkU3RyaW5nLmFwcGVuZCgoVUNoYXIpMHgwMDYxKTsKKyAgICAgICAgICBwYWRTdHJpbmcuYXBwZW5kKChVQ2hhcikweDAzMDIpOworICAgICAgICAgIGZtdC5zZXRQYWRDaGFyYWN0ZXIocGFkU3RyaW5nKTsKKyAgICAgICAgICBVQ2hhciBwYXR0ZXJuQ2hhcnNbXT17MHgwMDJhLCAweDAwNjEsIDB4MDMwMiwgMHgwMDYxLCAweDAzMDIsIDB4MDAyMywgMHgwMDAwfTsKKyAgICAgICAgICBVbmljb2RlU3RyaW5nIHBhdHRlcm4ocGF0dGVybkNoYXJzKTsKKyAgICAgICAgICBleHBlY3RQYWQoZm10LCBwYXR0ZXJuICwgRGVjaW1hbEZvcm1hdC5rUGFkQmVmb3JlUHJlZml4LCA0LCBwYWRTdHJpbmcpOworICAgICAgICAgICovCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFVwZ3JhZGUgdG8gYWxwaGFXb3JrcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQYXR0ZXJuczIoKSB7CisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIFVTID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5VUyk7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQoIiMiLCBVUyk7CisgICAgCisgICAgICAgIGNoYXIgaGF0ID0gMHgwMDVFOyAvKl4qLworICAgIAorICAgICAgICBleHBlY3RQYWQoZm10LCAiKl4jIiwgRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1BSRUZJWCwgMSwgaGF0KTsKKyAgICAgICAgZXhwZWN0UGFkKGZtdCwgIiQqXiMiLCBEZWNpbWFsRm9ybWF0LlBBRF9BRlRFUl9QUkVGSVgsIDIsIGhhdCk7CisgICAgICAgIGV4cGVjdFBhZChmbXQsICIjKl4iLCBEZWNpbWFsRm9ybWF0LlBBRF9CRUZPUkVfU1VGRklYLCAxLCBoYXQpOworICAgICAgICBleHBlY3RQYWQoZm10LCAiIyQqXiIsIERlY2ltYWxGb3JtYXQuUEFEX0FGVEVSX1NVRkZJWCwgMiwgaGF0KTsKKyAgICAgICAgZXhwZWN0UGFkKGZtdCwgIiQqXiQjIiwgLTEpOworICAgICAgICBleHBlY3RQYWQoZm10LCAiIyQqXiQiLCAtMSk7CisgICAgICAgIGV4cGVjdFBhZChmbXQsICIncHJlJyMsIyMwKngncG9zdCciLCBEZWNpbWFsRm9ybWF0LlBBRF9CRUZPUkVfU1VGRklYLCAxMiwgKGNoYXIpIDB4MDA3OCAvKngqLyk7IAorICAgICAgICBleHBlY3RQYWQoZm10LCAiJycjMCp4IiwgRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1NVRkZJWCwgMywgKGNoYXIpIDB4MDA3OCAvKngqLyk7IAorICAgICAgICBleHBlY3RQYWQoZm10LCAiJ0knJ2xsJyphIyMjLiMjIiwgRGVjaW1hbEZvcm1hdC5QQURfQUZURVJfUFJFRklYLCAxMCwgKGNoYXIpIDB4MDA2MSAvKmEqLyk7IAorICAgIAorICAgICAgICBmbXQuYXBwbHlQYXR0ZXJuKCJBQSMsIyMwLjAwWloiKTsKKyAgICAgICAgZm10LnNldFBhZENoYXJhY3RlcihoYXQpOworICAgIAorICAgICAgICBmbXQuc2V0Rm9ybWF0V2lkdGgoMTApOworICAgIAorICAgICAgICBmbXQuc2V0UGFkUG9zaXRpb24oRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1BSRUZJWCk7CisgICAgICAgIGV4cGVjdFBhdChmbXQsICIqXkFBIywjIzAuMDBaWiIpOworICAgIAorICAgICAgICBmbXQuc2V0UGFkUG9zaXRpb24oRGVjaW1hbEZvcm1hdC5QQURfQkVGT1JFX1NVRkZJWCk7CisgICAgICAgIGV4cGVjdFBhdChmbXQsICJBQSMsIyMwLjAwKl5aWiIpOworICAgIAorICAgICAgICBmbXQuc2V0UGFkUG9zaXRpb24oRGVjaW1hbEZvcm1hdC5QQURfQUZURVJfU1VGRklYKTsKKyAgICAgICAgZXhwZWN0UGF0KGZtdCwgIkFBIywjIzAuMDBaWipeIik7CisgICAgCisgICAgICAgIC8vICAgICAgICAgICAgMTIgIDM0NTY3ODkwMTIKKyAgICAgICAgU3RyaW5nIGV4cCA9ICJBQSpeIywjIzAuMDBaWiI7CisgICAgICAgIGZtdC5zZXRGb3JtYXRXaWR0aCgxMik7CisgICAgICAgIGZtdC5zZXRQYWRQb3NpdGlvbihEZWNpbWFsRm9ybWF0LlBBRF9BRlRFUl9QUkVGSVgpOworICAgICAgICBleHBlY3RQYXQoZm10LCBleHApOworICAgIAorICAgICAgICBmbXQuc2V0Rm9ybWF0V2lkdGgoMTMpOworICAgICAgICAvLyAgICAgICAgICAgICAgMTIgIDM0NTY3ODkwMTIzCisgICAgICAgIGV4cGVjdFBhdChmbXQsICJBQSpeIyMsIyMwLjAwWloiKTsKKyAgICAKKyAgICAgICAgZm10LnNldEZvcm1hdFdpZHRoKDE0KTsKKyAgICAgICAgLy8gICAgICAgICAgICAgIDEyICAzNDU2Nzg5MDEyMzQKKyAgICAgICAgZXhwZWN0UGF0KGZtdCwgIkFBKl4jIyMsIyMwLjAwWloiKTsKKyAgICAKKyAgICAgICAgZm10LnNldEZvcm1hdFdpZHRoKDE1KTsKKyAgICAgICAgLy8gICAgICAgICAgICAgIDEyICAzNDU2Nzg5MDEyMzQ1CisgICAgICAgIGV4cGVjdFBhdChmbXQsICJBQSpeIyMjIywjIzAuMDBaWiIpOyAvLyBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBjYXNlCisgICAgCisgICAgICAgIGZtdC5zZXRGb3JtYXRXaWR0aCgxNik7CisgICAgICAgIC8vICAgICAgICAgICAgICAxMiAgMzQ1Njc4OTAxMjM0NTYKKyAgICAgICAgZXhwZWN0UGF0KGZtdCwgIkFBKl4jLCMjIywjIzAuMDBaWiIpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBleHBlY3RQYWQoRGVjaW1hbEZvcm1hdCBmbXQsIFN0cmluZyBwYXQsIGludCBwb3MpIHsKKyAgICAgICAgZXhwZWN0UGFkKGZtdCwgcGF0LCBwb3MsIDAsIChjaGFyKTApOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBleHBlY3RQYWQoRGVjaW1hbEZvcm1hdCBmbXQsIGZpbmFsIFN0cmluZyBwYXQsIGludCBwb3MsIGludCB3aWR0aCwgZmluYWwgY2hhciBwYWQpIHsKKyAgICAgICAgaW50IGFwb3MgPSAwLCBhd2lkdGggPSAwOworICAgICAgICBjaGFyIGFwYWRTdHI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmbXQuYXBwbHlQYXR0ZXJuKHBhdCk7CisgICAgICAgICAgICBhcG9zID0gZm10LmdldFBhZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBhd2lkdGggPSBmbXQuZ2V0Rm9ybWF0V2lkdGgoKTsKKyAgICAgICAgICAgIGFwYWRTdHIgPSBmbXQuZ2V0UGFkQ2hhcmFjdGVyKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBhcG9zID0gLTE7CisgICAgICAgICAgICBhd2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIGFwYWRTdHIgPSBwYWQ7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKGFwb3MgPT0gcG9zICYmIGF3aWR0aCA9PSB3aWR0aCAmJiBhcGFkU3RyID09IHBhZCkgeworICAgICAgICAgICAgbG9nbG4oIk9rICAgXCIiICsgcGF0ICsgIlwiIHBvcz0iCisgICAgICAgICAgICAgICAgICAgICsgYXBvcyArICgocG9zID09IC0xKSA/ICIiIDogIiB3aWR0aD0iICsgYXdpZHRoICsgIiBwYWQ9IiArIGFwYWRTdHIpKTsgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCBcIiIgKyBwYXQgKyAiXCIgcG9zPSIgKyBhcG9zICsgIiB3aWR0aD0iCisgICAgICAgICAgICAgICAgICAgICsgYXdpZHRoICsgIiBwYWQ9IiArIGFwYWRTdHIgKyAiLCBleHBlY3RlZCAiCisgICAgICAgICAgICAgICAgICAgICsgcG9zICsgIiAiICsgd2lkdGggKyAiICIgKyBwYWQpOyAKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGV4cGVjdFBhdChEZWNpbWFsRm9ybWF0IGZtdCwgZmluYWwgU3RyaW5nIGV4cCkgeworICAgICAgICBTdHJpbmcgcGF0ID0gZm10LnRvUGF0dGVybigpOworICAgICAgICBpZiAocGF0LmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBsb2dsbigiT2sgICBcIiIgKyBwYXQgKyAiXCIiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMIFwiIiArIHBhdCArICJcIiwgZXhwZWN0ZWQgXCIiICsgZXhwICsgIlwiIik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L051bWJlclJlZ3Jlc3Npb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvTnVtYmVyUmVncmVzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3MTFhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L051bWJlclJlZ3Jlc3Npb24uamF2YQpAQCAtMCwwICsxLDE4MDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9OdW1iZXJSZWdyZXNzaW9uLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDkvMTQgMjE6MzY6MjggJCAKKyAqICRSZXZpc2lvbjogMS4xMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiovCisKKy8qKiAKKyAqIFBvcnQgRnJvbTogICBKREsgMS40YjEgOiBqYXZhLnRleHQuRm9ybWF0Lk51bWJlclJlZ3Jlc3Npb24KKyAqIFNvdXJjZSBGaWxlOiBqYXZhL3RleHQvZm9ybWF0L051bWJlclJlZ3Jlc3Npb24uamF2YQorICoqLworIAorLyoqCisgKiBAdGVzdCAxLjQ5IDAxLzA1LzIxCisgKiBAYnVnIDQwNTIyMjMgNDA1OTg3MCA0MDYxMzAyIDQwNjI0ODYgNDA2NjY0NiA0MDY4NjkzIDQwNzA3OTggNDA3MTAwNSA0MDcxMDE0CisgKiA0MDcxNDkyIDQwNzE4NTkgNDA3NDQ1NCA0MDc0NjIwIDQwNzU3MTMgNDA4MzAxOCA0MDg2NTc1IDQwODcyNDQgNDA4NzI0NQorICogNDA4NzI1MSA0MDg3NTM1IDQwODgxNjEgNDA4ODUwMyA0MDkwNDg5IDQwOTA1MDQgNDA5MjQ4MCA0MDkyNTYxIDQwOTU3MTMKKyAqIDQwOTg3NDEgNDA5OTQwNCA0MTAxNDgxIDQxMDY2NTggNDEwNjY2MiA0MTA2NjY0IDQxMDg3MzggNDExMDkzNiA0MTIyODQwCisgKiA0MTI1ODg1IDQxMzQwMzQgNDEzNDMwMCA0MTQwMDA5IDQxNDE3NTAgNDE0NTQ1NyA0MTQ3Mjk1IDQxNDc3MDYgNDE2MjE5OAorICogNDE2Mjg1MiA0MTY3NDk0IDQxNzA3OTggNDE3NjExNCA0MTc5ODE4IDQxODU3NjEgNDIxMjA3MiA0MjEyMDczIDQyMTY3NDIKKyAqIDQyMTc2NjEgNDI0MzAxMSA0MjQzMTA4IDQzMzAzNzcgNDIzMzg0MAorICogQHN1bW1hcnkgUmVncmVzc2lvbiB0ZXN0cyBmb3IgTnVtYmVyRm9ybWF0IGFuZCBhc3NvY2lhdGVkIGNsYXNzZXMKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5mb3JtYXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZURhdGE7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKK2ltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKK2ltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBOdW1iZXJSZWdyZXNzaW9uIGV4dGVuZHMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2sgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBOdW1iZXJSZWdyZXNzaW9uKCkucnVuKGFyZ3MpOworICAgIH0KKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgRVVSTyA9ICdcdTIwYWMnOworCisgICAgLyoqCisgICAgICogTnVtYmVyRm9ybWF0LmVxdWFscyBjb21wYXJpbmcgd2l0aCBudWxsIHNob3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDc1NzEzKCl7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE15TnVtYmVyRm9ybWF0VGVzdCB0bXAgPSBuZXcgTXlOdW1iZXJGb3JtYXRUZXN0KCk7CisgICAgICAgICAgICBpZiAoIXRtcC5lcXVhbHMobnVsbCkpCisgICAgICAgICAgICAgICAgbG9nbG4oIk51bWJlckZvcm1hdC5lcXVhbHMgcGFzc2VkIik7CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCIobmV3IE15TnVtYmVyRm9ybWF0VGVzdCgpKS5lcXVhbHMobnVsbCkgdGhyb3dzIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXJGb3JtYXQuZXF1YWxzIGNvbXBhcmluZyB0d28gb2JqIGVxdWFsIGV2ZW4gdGhlIHNldEdyb3VwaW5nVXNlZAorICAgICAqIGZsYWcgaXMgZGlmZmVyZW50LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDc0NjIwKCkgeworCisgICAgICAgIE15TnVtYmVyRm9ybWF0VGVzdCBuZjEgPSBuZXcgTXlOdW1iZXJGb3JtYXRUZXN0KCk7CisgICAgICAgIE15TnVtYmVyRm9ybWF0VGVzdCBuZjIgPSBuZXcgTXlOdW1iZXJGb3JtYXRUZXN0KCk7CisKKyAgICAgICAgbmYxLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7CisgICAgICAgIG5mMi5zZXRHcm91cGluZ1VzZWQodHJ1ZSk7CisKKyAgICAgICAgaWYgKG5mMS5lcXVhbHMobmYyKSkgZXJybG4oIlRlc3QgZm9yIGJ1ZyA0MDc0NjIwIGZhaWxlZCIpOworICAgICAgICBlbHNlIGxvZ2xuKCJUZXN0IGZvciBidWcgNDA3NDYyMCBwYXNzZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQuZm9ybWF0KCkgaW5jb3JyZWN0bHkgdXNlcyBtYXhGcmFjdGlvbkRpZ2l0cyBzZXR0aW5nLgorICAgICAqLworCisgICAgcHVibGljIHZvaWQgVGVzdDQwODgxNjEgKCl7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOworICAgICAgICBkb3VibGUgZCA9IDEwMDsKKyAgICAgICAgZGYuc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKDApOworICAgICAgICBkZi5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoMTYpOworICAgICAgICBTdHJpbmdCdWZmZXIgc0J1ZjEgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICAgICAgRmllbGRQb3NpdGlvbiBmcDEgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgbG9nbG4oImQgPSAiICsgZCk7CisgICAgICAgIGxvZ2xuKCJtYXhGcmFjdGlvbkRpZ2l0cyA9ICIgKyBkZi5nZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSk7CisgICAgICAgIGxvZ2xuKCIgZm9ybWF0KGQpID0gJyIgKyBkZi5mb3JtYXQoZCwgc0J1ZjEsIGZwMSkgKyAiJyIpOworICAgICAgICBkZi5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoMTcpOworICAgICAgICBTdHJpbmdCdWZmZXIgc0J1ZjIgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICAgICAgRmllbGRQb3NpdGlvbiBmcDIgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgbG9nbG4oIm1heEZyYWN0aW9uRGlnaXRzID0gIiArIGRmLmdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpKTsKKyAgICAgICAgZGYuZm9ybWF0KGQsIHNCdWYyLCBmcDIpOworICAgICAgICBpZiAoIXNCdWYyLnRvU3RyaW5nKCkuZXF1YWxzKCIxMDAiKSkKKyAgICAgICAgICAgIGVycmxuKCIgZm9ybWF0KGQpID0gJyIgKyBzQnVmMiArICInIik7CisgICAgfQorICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXRTeW1ib2xzIHNob3VsZCBiZSBjbG9uZWQgaW4gdGhlIGN0b3IgRGVjaW1hbEZvcm1hdC4KKyAgICAgKiBEZWNpbWFsRm9ybWF0KFN0cmluZywgRGVjaW1hbEZvcm1hdFN5bWJvbHMpLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDg3MjQ1ICgpeworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW1ib2xzID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKCk7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIywjIzAuMCIsIHN5bWJvbHMpOworICAgICAgICBsb25nIG4gPSAxMjM7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYxID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmMiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgbG9nbG4oImZvcm1hdCgiICsgbiArICIpID0gIiArCisgICAgICAgIGRmLmZvcm1hdChuLCBidWYxLCBuZXcgRmllbGRQb3NpdGlvbigwKSkpOworICAgICAgICBzeW1ib2xzLnNldERlY2ltYWxTZXBhcmF0b3IoJ3AnKTsgLy8gY2hhbmdlIHZhbHVlIG9mIGZpZWxkCisgICAgICAgIGxvZ2xuKCJmb3JtYXQoIiArIG4gKyAiKSA9ICIgKworICAgICAgICBkZi5mb3JtYXQobiwgYnVmMiwgbmV3IEZpZWxkUG9zaXRpb24oMCkpKTsKKyAgICAgICAgaWYgKCFidWYxLnRvU3RyaW5nKCkuZXF1YWxzKGJ1ZjIudG9TdHJpbmcoKSkpCisgICAgICAgICAgICBlcnJsbigiVGVzdCBmb3IgYnVnIDQwODcyNDUgZmFpbGVkIik7CisgICAgfQorICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQuZm9ybWF0KCkgaW5jb3JyZWN0bHkgZm9ybWF0cyAwLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA4NzUzNSAoKQorICAgIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7CisgICAgICAgIGRmLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKDApOworCisgICAgICAgIGRvdWJsZSBuID0gMDsKKyAgICAgICAgU3RyaW5nIGJ1ZmZlciA9IG5ldyBTdHJpbmcoKTsKKyAgICAgICAgYnVmZmVyID0gZGYuZm9ybWF0KG4pOworICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCgpID09IDApCisgICAgICAgICAgICBlcnJsbihuICsgIjogJyIgKyBidWZmZXIgKyAiJyIpOworICAgICAgICBuID0gMC4xOworICAgICAgICBidWZmZXIgPSBkZi5mb3JtYXQobik7CisgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKCkgPT0gMCkKKyAgICAgICAgICAgIGVycmxuKG4gKyAiOiAnIiArIGJ1ZmZlciArICInIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdC5mb3JtYXQgZmFpbHMgd2hlbiBncm91cGluZ1NpemUgaXMgc2V0IHRvIDAuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwODg1MDMgKCl7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOworICAgICAgICBkZi5zZXRHcm91cGluZ1NpemUoMCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciBzQnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgIEZpZWxkUG9zaXRpb24gZnAgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxvZ2xuKGRmLmZvcm1hdCgxMjMsIHNCdWYsIGZwKS50b1N0cmluZygpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGZvbykgeworICAgICAgICAgICAgZXJybG4oIlRlc3QgZm9yIGJ1ZyA0MDg4NTAzIGZhaWxlZC4iKTsKKyAgICAgICAgfQorCisgICAgfQorICAgIC8qKgorICAgICAqIE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlIGlzIHdyb25nLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDY2NjQ2ICgpIHsKKyAgICAgICAgLy9mbG9hdCByZXR1cm5mbG9hdCA9IDAuMGY7IC8vVGhlIHZhcmlhYmxlIGlzIG5ldmVyIHVzZWQKKyAgICAgICAgYXNzaWduRmxvYXRWYWx1ZSgyLjA0Zik7CisgICAgICAgIGFzc2lnbkZsb2F0VmFsdWUoMi4wM2YpOworICAgICAgICBhc3NpZ25GbG9hdFZhbHVlKDIuMDJmKTsKKyAgICAgICAgYXNzaWduRmxvYXRWYWx1ZSgwLjBmKTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmxvYXQgYXNzaWduRmxvYXRWYWx1ZShmbG9hdCByZXR1cm5mbG9hdCkKKyAgICB7CisgICAgICAgIGxvZ2xuKCIgVkFMVUUgIiArIHJldHVybmZsb2F0KTsKKyAgICAgICAgTnVtYmVyRm9ybWF0IG5mY29tbW9uID0gIE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIG5mY29tbW9uLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7CisKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gbmZjb21tb24uZm9ybWF0KHJldHVybmZsb2F0KS5zdWJzdHJpbmcoMSk7CisgICAgICAgIGlmIChGbG9hdC52YWx1ZU9mKHN0cmluZ1ZhbHVlKS5mbG9hdFZhbHVlKCkgIT0gcmV0dXJuZmxvYXQpCisgICAgICAgICAgICBlcnJsbigiIERJU1BMQVlWQUxVRSAiICsgc3RyaW5nVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuZmxvYXQ7CisgICAgfSAvLyBFbmQgT2YgYXNzaWduRmxvYXRWYWx1ZSgpCisKKyAgICAvKioKKyAgICAgKiBEZWNpbWFsRm9ybWF0IHRocm93cyBleGNlcHRpb24gd2hlbiBwYXJzaW5nICIwIgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDU5ODcwKCkgeworICAgICAgICBEZWNpbWFsRm9ybWF0IGZvcm1hdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCIwMCIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbG9nbG4oZm9ybWF0LnBhcnNlKCIwIikudG9TdHJpbmcoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IGVycmxuKCJUZXN0IGZvciBidWcgNDA1OTg3MCBmYWlsZWQgOiAiICsgZSk7IH0KKyAgICB9CisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdFN5bWJvbC5lcXVhbHMgc2hvdWxkIGFsd2F5cyByZXR1cm4gZmFsc2Ugd2hlbgorICAgICAqIGNvbXBhcmluZyB3aXRoIG51bGwuCisgICAgICovCisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA4MzAxOCAoKXsKKyAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgZGZzID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoIWRmcy5lcXVhbHMobnVsbCkpCisgICAgICAgICAgICAgICAgbG9nbG4oIlRlc3QgUGFzc2VkISIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZm9vKSB7CisgICAgICAgICAgICBlcnJsbigiVGVzdCBmb3IgYnVnIDQwODMwMTggZmFpbGVkID0+IE1lc3NhZ2UgOiAiICsgZm9vLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdCBkb2VzIG5vdCByb3VuZCB1cCBjb3JyZWN0bHkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNzE0OTIgKCl7CisgICAgICAgIGRvdWJsZSB4ID0gMC4wMDE1OTk5OTsKKyAgICAgICAgTnVtYmVyRm9ybWF0IG5mID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKCk7CisgICAgICAgIG5mLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyg0KTsKKyAgICAgICAgU3RyaW5nIG91dCA9IG5mLmZvcm1hdCh4KTsKKyAgICAgICAgbG9nbG4oIjAuMDAxNTk5OTkgZm9ybWF0cyB3aXRoIDQgZnJhY3Rpb25hbCBkaWdpdHMgdG8gIiArIG91dCk7CisgICAgICAgIFN0cmluZyBleHBlY3RlZCA9ICIwLjAwMTYiOworICAgICAgICBpZiAoIW91dC5lcXVhbHMoZXhwZWN0ZWQpKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBleHBlY3RlZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBzcGFjZSBhcyBhIGdyb3VwIHNlcGFyYXRvciBmb3IgbG9jYWxpemVkIHBhdHRlcm4gY2F1c2VzCisgICAgICogd3JvbmcgZm9ybWF0LiAgV29ya0Fyb3VuZCA6IHVzZSBub24tYnJlYWtpbmcgc3BhY2UuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwODY1NzUoKSB7CisKKyAgICAgICAgTnVtYmVyRm9ybWF0IG5mID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKExvY2FsZS5GUkFOQ0UpOworICAgICAgICBsb2dsbigibmYgdG9QYXR0ZXJuMTogIiArICgoRGVjaW1hbEZvcm1hdCluZikudG9QYXR0ZXJuKCkpOworICAgICAgICBsb2dsbigibmYgdG9Mb2NQYXR0ZXJuMTogIiArICgoRGVjaW1hbEZvcm1hdCluZikudG9Mb2NhbGl6ZWRQYXR0ZXJuKCkpOworCisgICAgICAgIC8vIE5vIGdyb3VwIHNlcGFyYXRvcgorICAgICAgICBsb2dsbigiLi4uYXBwbHlMb2NhbGl6ZWRQYXR0ZXJuICMjIywwMDsoIyMjLDAwKSAiKTsKKyAgICAgICAgKChEZWNpbWFsRm9ybWF0KW5mKS5hcHBseUxvY2FsaXplZFBhdHRlcm4oIiMjIywwMDsoIyMjLDAwKSIpOworICAgICAgICBsb2dsbigibmYgdG9QYXR0ZXJuMjogIiArICgoRGVjaW1hbEZvcm1hdCluZikudG9QYXR0ZXJuKCkpOworICAgICAgICBsb2dsbigibmYgdG9Mb2NQYXR0ZXJuMjogIiArICgoRGVjaW1hbEZvcm1hdCluZikudG9Mb2NhbGl6ZWRQYXR0ZXJuKCkpOworCisgICAgICAgIGxvZ2xuKCJuZjogIiArIG5mLmZvcm1hdCgxMjM0KSk7IC8vIDEyMzQsMDAKKyAgICAgICAgbG9nbG4oIm5mOiAiICsgbmYuZm9ybWF0KC0xMjM0KSk7IC8vICgxMjM0LDAwKQorCisgICAgICAgIC8vIFNwYWNlIGFzIGdyb3VwIHNlcGFyYXRvcgorCisgICAgICAgIGxvZ2xuKCIuLi5hcHBseUxvY2FsaXplZFBhdHRlcm4gIyAjIyMsMDA7KCMgIyMjLDAwKSAiKTsKKyAgICAgICAgKChEZWNpbWFsRm9ybWF0KW5mKS5hcHBseUxvY2FsaXplZFBhdHRlcm4oIiNcdTAwYTAjIyMsMDA7KCNcdTAwYTAjIyMsMDApIik7CisgICAgICAgIGxvZ2xuKCJuZiB0b1BhdHRlcm4yOiAiICsgKChEZWNpbWFsRm9ybWF0KW5mKS50b1BhdHRlcm4oKSk7CisgICAgICAgIGxvZ2xuKCJuZiB0b0xvY1BhdHRlcm4yOiAiICsgKChEZWNpbWFsRm9ybWF0KW5mKS50b0xvY2FsaXplZFBhdHRlcm4oKSk7CisgICAgICAgIFN0cmluZyBidWZmZXIgPSBuZi5mb3JtYXQoMTIzNCk7CisgICAgICAgIGlmICghYnVmZmVyLmVxdWFscygiMVx1MDBhMDIzNCwwMCIpKQorICAgICAgICAgICAgZXJybG4oIm5mIDogIiArIGJ1ZmZlcik7IC8vIEV4cGVjdCAxIDIzNCwwMAorICAgICAgICBidWZmZXIgPSBuZi5mb3JtYXQoLTEyMzQpOworICAgICAgICBpZiAoIWJ1ZmZlci5lcXVhbHMoIigxXHUwMGEwMjM0LDAwKSIpKQorICAgICAgICAgICAgZXJybG4oIm5mIDogIiArIGJ1ZmZlcik7IC8vIEV4cGVjdCAoMSAyMzQsMDApCisKKyAgICAgICAgLy8gRXJyb25lb3VzbHkgcHJpbnRzOgorICAgICAgICAvLyAxMjM0LDAwICwKKyAgICAgICAgLy8gKDEyMzQsMDAgLCkKKworICAgIH0KKyAgICAvKioKKyAgICAgKiBEZWNpbWFsRm9ybWF0LnBhcnNlIHJldHVybnMgd3JvbmcgdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA2ODY5MygpCisgICAgeworICAgICAgICBsb2dsbigiLS0tLS0gVGVzdCBBcHBsaWNhdGlvbiAtLS0tLSIpOworICAgICAgICBQYXJzZVBvc2l0aW9uIHBvczsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7CisgICAgICAgIE51bWJlciBkID0gZGYucGFyc2UoIjEyMy41NTQ1NiIsIHBvcz1uZXcgUGFyc2VQb3NpdGlvbigwKSk7CisgICAgICAgIGlmICghZC50b1N0cmluZygpLmVxdWFscygiMTIzLjU1NDU2IikpIHsKKyAgICAgICAgICAgIGVycmxuKCJSZXN1bHQgLT4gIiArIGQuZG91YmxlVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBidWdzIDQwNjk3NTQsIDQwNjc4NzgKKyAgICAgKiBudWxsIHBvaW50ZXIgdGhyb3duIHdoZW4gYWNjZXNzaW5nIGEgZGVzZXJpYWxpemVkIERlY2ltYWxGb3JtYXQKKyAgICAgKiBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNjk3NTQoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICAvL3RyeSB7CisgICAgICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKGJhb3MpOworICAgICAgICAgICAgbXlmb3JtYXQgaXQgPSBuZXcgbXlmb3JtYXQoKTsKKyAgICAgICAgICAgIGxvZ2xuKGl0Lk5vdygpKTsKKyAgICAgICAgICAgIG9vcy53cml0ZU9iamVjdChpdCk7CisgICAgICAgICAgICBvb3MuZmx1c2goKTsKKyAgICAgICAgICAgIGJhb3MuY2xvc2UoKTsKKyAgICAgICAgICAgIGxvZ2xuKCJTYXZlIE9LISIpOworICAgICAgICAgICAgYnl0ZSBbXSBieXRlcyA9IGJhb3MudG9CeXRlQXJyYXkoKTsKKyAgICAgICAgICAgIE9iamVjdElucHV0U3RyZWFtIG9pcyA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYnl0ZXMpKTsKKyAgICAgICAgICAgIG15Zm9ybWF0IG8gPSAobXlmb3JtYXQpb2lzLnJlYWRPYmplY3QoKTsKKyAgICAgICAgICAgIG9pcy5jbG9zZSgpOworICAgICAgICAgICAgaXQuTm93KCk7CisgICAgICAgICAgICBsb2dsbigiTG9hZCBPSyEiKTsKKyAgICAgICAgICAgIGlmICghby5fZGF0ZUZvcm1hdC5lcXVhbHMoaXQuX2RhdGVGb3JtYXQpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlIHNhdmVkIGFuZCBsb2FkZWQgb2JqZWN0IGFyZSBub3QgZXF1YWxzISIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nbG4oIkNvbXBhcmUgT0shIik7CisgICAgICAgIC8vfSBjYXRjaCAoRXhjZXB0aW9uIGZvbykgeworICAgICAgICAgICAgLy9lcnJsbigiVGVzdCBmb3IgYnVnIDQwNjk3NTQgb3IgNDA1Nzg3OCBmYWlsZWQgPT4gRXhjZXB0aW9uOiAiICsgZm9vLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIC8vfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQuYXBwbHlQYXR0ZXJuKFN0cmluZykgYWxsb3dzIGlsbGVnYWwgcGF0dGVybnMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA4NzI1MSAoKXsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkZi5hcHBseVBhdHRlcm4oIiMuIy4jIik7CisgICAgICAgICAgICBsb2dsbigidG9QYXR0ZXJuKCkgcmV0dXJucyBcIiIgKyBkZi50b1BhdHRlcm4oKSArICJcIiIpOworICAgICAgICAgICAgZXJybG4oImFwcGx5UGF0dGVybihcIiMuIy4jXCIpIGRvZXNuJ3QgdGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dsbigiQ2F1Z2h0IElsbGVnYWwgQXJndW1lbnQgRXJyb3IgISIpOworICAgICAgICB9CisgICAgICAgIC8vIFNlY29uZCB0ZXN0OyBhZGRlZCA1LzExLzk4IHdoZW4gcmVwb3J0ZWQgdG8gZmFpbCBvbiAxLjJiMworICAgICAgICB0cnkgeworICAgICAgICAgICAgZGYuYXBwbHlQYXR0ZXJuKCIjMC4wIzAjMCIpOworICAgICAgICAgICAgbG9nbG4oInRvUGF0dGVybigpIHJldHVybnMgXCIiICsgZGYudG9QYXR0ZXJuKCkgKyAiXCIiKTsKKyAgICAgICAgICAgIGVycmxuKCJhcHBseVBhdHRlcm4oXCIjMC4wIzAjMFwiKSBkb2Vzbid0IHRocm93IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nbG4oIk9rIC0gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGZvciAjMC4wIzAjMCIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdC5mb3JtYXQoKSBsb3NlcyBwcmVjaXNpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA5MDQ4OSAoKXsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7CisgICAgICAgIGRmLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygxMCk7CisgICAgICAgIGRmLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7CisgICAgICAgIGRvdWJsZSBkID0gMS4wMDAwMDAwMDAwMDAwMDFFNzsKKyAgICAgICAgQmlnRGVjaW1hbCBiZCA9IG5ldyBCaWdEZWNpbWFsKGQpOworICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICAgICAgRmllbGRQb3NpdGlvbiBmcCA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOworICAgICAgICBsb2dsbigiZCA9ICIgKyBkKTsKKyAgICAgICAgbG9nbG4oIkJpZ0RlY2ltYWwudG9TdHJpbmcoKTogICIgKyBiZC50b1N0cmluZygpKTsKKyAgICAgICAgZGYuZm9ybWF0KGQsIHNiLCBmcCk7CisgICAgICAgIGlmICghc2IudG9TdHJpbmcoKS5lcXVhbHMoIjEwMDAwMDAwLjAwMDAwMDAxMDAiKSkgeworICAgICAgICAgICAgZXJybG4oIkRlY2ltYWxGb3JtYXQuZm9ybWF0KCk6ICIgKyBzYi50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQuZm9ybWF0KCkgbG9zZXMgcHJlY2lzaW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTA1MDQgKCkKKyAgICB7CisgICAgICAgIGRvdWJsZSBkID0gMTsKKyAgICAgICAgbG9nbG4oImQgPSAiICsgZCk7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOworICAgICAgICBTdHJpbmdCdWZmZXIgc2I7CisgICAgICAgIEZpZWxkUG9zaXRpb24gZnA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTc7IGkgPD0gMjA7IGkrKykgeworICAgICAgICAgICAgICAgIGRmLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhpKTsKKyAgICAgICAgICAgICAgICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgICAgICAgICAgICAgIGZwID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7CisgICAgICAgICAgICAgICAgbG9nbG4oIiAgZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCkgPSAiICsgaSk7CisgICAgICAgICAgICAgICAgbG9nbG4oIiAgZm9ybWF0ZWQ6ICIgKyBkZi5mb3JtYXQoZCwgc2IsIGZwKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBmb28pIHsKKyAgICAgICAgICAgIGVycmxuKCJCdWcgNDA5MDUwNCByZWdyZXNzaW9uIHRlc3QgZmFpbGVkLiBNZXNzYWdlIDogIiArIGZvby5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQucGFyc2UoU3RyaW5nIHN0ciwgUGFyc2VQb3NpdGlvbiBwcCkgbG9zZXMgcHJlY2lzaW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTU3MTMgKCkKKyAgICB7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOworICAgICAgICBTdHJpbmcgc3RyID0gIjAuMTIzNCI7CisgICAgICAgIERvdWJsZSBkMSA9IG5ldyBEb3VibGUoc3RyKTsKKyAgICAgICAgTnVtYmVyIGQyID0gZGYucGFyc2Uoc3RyLCBuZXcgUGFyc2VQb3NpdGlvbigwKSk7CisgICAgICAgIGxvZ2xuKGQxLnRvU3RyaW5nKCkpOworICAgICAgICBpZiAoZDIuZG91YmxlVmFsdWUoKSAhPSBkMS5kb3VibGVWYWx1ZSgpKQorICAgICAgICAgICAgZXJybG4oIkJ1ZyA0MDk1NzEzIHRlc3QgZmFpbGVkLCBuZXcgZG91YmxlIHZhbHVlIDogIiArIGQyLmRvdWJsZVZhbHVlKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQucGFyc2UoKSBmYWlscyB3aGVuIG11bHRpcGxpZXIgaXMgbm90IHNldCB0byAxCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTI1NjEgKCkKKyAgICB7CisgICAgICAgIExvY2FsZSBzYXZlZExvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KExvY2FsZS5VUyk7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOworICAgICAgICBTdHJpbmcgc3RyID0gTG9uZy50b1N0cmluZyhMb25nLk1JTl9WQUxVRSk7CisgICAgICAgIGxvZ2xuKCJMb25nLk1JTl9WQUxVRSA6ICIgKyBkZi5wYXJzZShzdHIsIG5ldyBQYXJzZVBvc2l0aW9uKDApKS50b1N0cmluZygpKTsKKyAgICAgICAgZGYuc2V0TXVsdGlwbGllcigxMDApOworICAgICAgICBOdW1iZXIgbnVtID0gZGYucGFyc2Uoc3RyLCBuZXcgUGFyc2VQb3NpdGlvbigwKSk7CisgICAgICAgIGlmIChudW0uZG91YmxlVmFsdWUoKSAhPSAtOS4yMjMzNzIwMzY4NTQ3NzZFMTYpIHsKKyAgICAgICAgICAgIGVycmxuKCJCdWcgNDA5MjU2MSB0ZXN0IGZhaWxlZCB3aGVuIG11bHRpcGxpZXIgaXMgc2V0IHRvIG5vdCAxLiIpOworICAgICAgICB9CisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KHNhdmVkTG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNpbWFsRm9ybWF0OiBOZWdhdGl2ZSBmb3JtYXQgaWdub3JlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA5MjQ4MCAoKQorICAgIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZkZvbyA9IG5ldyBEZWNpbWFsRm9ybWF0KCIwMDAiKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZGZGb28uYXBwbHlQYXR0ZXJuKCIwMDAwOy0wMDAiKTsKKyAgICAgICAgICAgIGlmICghZGZGb28udG9QYXR0ZXJuKCkuZXF1YWxzKCIjMDAwMCIpKQorICAgICAgICAgICAgICAgIGVycmxuKCJkZkZvby50b1BhdHRlcm4gOiAiICsgZGZGb28udG9QYXR0ZXJuKCkpOworICAgICAgICAgICAgbG9nbG4oZGZGb28uZm9ybWF0KDQyKSk7CisgICAgICAgICAgICBsb2dsbihkZkZvby5mb3JtYXQoLTQyKSk7CisgICAgICAgICAgICBkZkZvby5hcHBseVBhdHRlcm4oIjAwMDstMDAwIik7CisgICAgICAgICAgICBpZiAoIWRmRm9vLnRvUGF0dGVybigpLmVxdWFscygiIzAwMCIpKQorICAgICAgICAgICAgICAgIGVycmxuKCJkZkZvby50b1BhdHRlcm4gOiAiICsgZGZGb28udG9QYXR0ZXJuKCkpOworICAgICAgICAgICAgbG9nbG4oZGZGb28uZm9ybWF0KDQyKSk7CisgICAgICAgICAgICBsb2dsbihkZkZvby5mb3JtYXQoLTQyKSk7CisKKyAgICAgICAgICAgIGRmRm9vLmFwcGx5UGF0dGVybigiMDAwOy0wMDAwIik7CisgICAgICAgICAgICBpZiAoIWRmRm9vLnRvUGF0dGVybigpLmVxdWFscygiIzAwMCIpKQorICAgICAgICAgICAgICAgIGVycmxuKCJkZkZvby50b1BhdHRlcm4gOiAiICsgZGZGb28udG9QYXR0ZXJuKCkpOworICAgICAgICAgICAgbG9nbG4oZGZGb28uZm9ybWF0KDQyKSk7CisgICAgICAgICAgICBsb2dsbihkZkZvby5mb3JtYXQoLTQyKSk7CisKKyAgICAgICAgICAgIGRmRm9vLmFwcGx5UGF0dGVybigiMDAwMDstMDAwIik7CisgICAgICAgICAgICBpZiAoIWRmRm9vLnRvUGF0dGVybigpLmVxdWFscygiIzAwMDAiKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiZGZGb28udG9QYXR0ZXJuIDogIiArIGRmRm9vLnRvUGF0dGVybigpKTsKKyAgICAgICAgICAgIGxvZ2xuKGRmRm9vLmZvcm1hdCg0MikpOworICAgICAgICAgICAgbG9nbG4oZGZGb28uZm9ybWF0KC00MikpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZm9vKSB7CisgICAgICAgICAgICBlcnJsbigiTWVzc2FnZSAiICsgZm9vLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAgICogTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoKSBwcm9kdWNlcyBmb3JtYXQgdGhhdCB1c2VzCisgICAgICogZGVjaW1hbCBzZXBhcmF0b3IgaW5zdGVhZCBvZiBtb25ldGFyeSBkZWNpbWFsIHNlcGFyYXRvci4KKyAgICAgKgorICAgICAqIFJld3JvdGUgdGhpcyB0ZXN0IG5vdCB0byBkZXBlbmQgb24gdGhlIGFjdHVhbCBwYXR0ZXJuLiAgUGF0dGVybiBzaG91bGQKKyAgICAgKiBuZXZlciBjb250YWluIHRoZSBtb25ldGFyeSBzZXBhcmF0b3IhICBEZWNpbWFsIHNlcGFyYXRvciBpbiBwYXR0ZXJuIGlzCisgICAgICogaW50ZXJwcmV0ZWQgYXMgbW9uZXRhcnkgc2VwYXJhdG9yIGlmIGN1cnJlbmN5IHN5bWJvbCBpcyBzZWVuIQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDg3MjQ0ICgpIHsKKyAgICAgICAgTG9jYWxlIGRlID0gbmV3IExvY2FsZSgicHQiLCAiUFQiKTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IChEZWNpbWFsRm9ybWF0KSBOdW1iZXJGb3JtYXQuZ2V0Q3VycmVuY3lJbnN0YW5jZShkZSk7CisgICAgICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzIHN5bSA9IGRmLmdldERlY2ltYWxGb3JtYXRTeW1ib2xzKCk7CisgICAgICAgIHN5bS5zZXRNb25ldGFyeURlY2ltYWxTZXBhcmF0b3IoJyQnKTsKKwlkZi5zZXREZWNpbWFsRm9ybWF0U3ltYm9scyhzeW0pOworICAgICAgICBjaGFyIGRlY1NlcCA9IHN5bS5nZXREZWNpbWFsU2VwYXJhdG9yKCk7CisgICAgICAgIGNoYXIgbW9uU2VwID0gc3ltLmdldE1vbmV0YXJ5RGVjaW1hbFNlcGFyYXRvcigpOworICAgICAgICAvL2NoYXIgemVybyA9IHN5bS5nZXRaZXJvRGlnaXQoKTsgLy9UaGUgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZAorICAgICAgICBpZiAoZGVjU2VwID09IG1vblNlcCkgeworICAgICAgICAgICAgZXJybG4oIkVSUk9SIGluIHRlc3Q6IHdhbnQgZGVjaW1hbCBzZXAgIT0gbW9uZXRhcnkgc2VwIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZi5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygxKTsKKyAgICAgICAgICAgIGRmLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygyKTsKKyAgICAgICAgICAgIFN0cmluZyBzdHIgPSBkZi5mb3JtYXQoMS4yMyk7CisgICAgICAgICAgICBTdHJpbmcgbW9uU3RyID0gIjEiICsgbW9uU2VwICsgIjIzIjsKKyAgICAgICAgICAgIFN0cmluZyBkZWNTdHIgPSAiMSIgKyBkZWNTZXAgKyAiMjMiOworICAgICAgICAgICAgaWYgKHN0ci5pbmRleE9mKG1vblN0cikgPj0gMCAmJiBzdHIuaW5kZXhPZihkZWNTdHIpIDwgMCkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPSzogMS4yMyAtPiBcIiIgKyBzdHIgKyAiXCIgY29udGFpbnMgXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICBtb25TdHIgKyAiXCIgYW5kIG5vdCBcIiIgKyBkZWNTdHIgKyAnIicpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogMS4yMyAtPiBcIiIgKyBzdHIgKyAiXCIsIHNob3VsZCBjb250YWluIFwiIiArCisgICAgICAgICAgICAgICAgICAgICAgbW9uU3RyICsKKyAgICAgICAgICAgICAgICAgICAgICAiXCIgYW5kIG5vdCBcIiIgKyBkZWNTdHIgKyAnIicpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qKgorICAgICAqIE51bWJlciBmb3JtYXQgZGF0YSByb3VuZGluZyBlcnJvcnMgZm9yIGxvY2FsZSBGUgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDcwNzk4ICgpIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IGZvcm1hdHRlcjsKKyAgICAgICAgU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgICAgIC8qIFVzZXIgZXJyb3IgOgorICAgICAgICBTdHJpbmcgZXhwZWN0ZWREZWZhdWx0ID0gIi01XHUwMGEwNzg5LDk4NyI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZEN1cnJlbmN5ID0gIjVcdTAwYTA3ODksOTggRiI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZFBlcmNlbnQgPSAiLTU3OFx1MDBhMDk5OCUiOworICAgICAgICAqLworICAgICAgICBTdHJpbmcgZXhwZWN0ZWREZWZhdWx0ID0gIi01XHUwMGEwNzg5LDk4OCI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZEN1cnJlbmN5ID0gIjVcdTAwYTA3ODksOTkgIiArIEVVUk87IC8vIGV1cm8KKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkUGVyY2VudCA9ICItNTc4XHUwMGEwOTk5JSI7CisKKyAgICAgICAgZm9ybWF0dGVyID0gTnVtYmVyRm9ybWF0LmdldE51bWJlckluc3RhbmNlKExvY2FsZS5GUkFOQ0UpOworICAgICAgICB0ZW1wU3RyaW5nID0gZm9ybWF0dGVyLmZvcm1hdCAoLTU3ODkuOTg3Nik7CisKKyAgICAgICAgaWYgKHRlbXBTdHJpbmcuZXF1YWxzKGV4cGVjdGVkRGVmYXVsdCkpIHsKKyAgICAgICAgICAgIGxvZ2xuICgiQnVnIDQwNzA3OTggZGVmYXVsdCB0ZXN0IHBhc3NlZC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQ6IiArCisgICAgICAgICAgICAiIEV4cGVjdGVkICIgKyBleHBlY3RlZERlZmF1bHQgKworICAgICAgICAgICAgIiBSZWNlaXZlZCAiICsgdGVtcFN0cmluZyApOworICAgICAgICB9CisKKworICAgICAgICBmb3JtYXR0ZXIgPSBOdW1iZXJGb3JtYXQuZ2V0Q3VycmVuY3lJbnN0YW5jZShMb2NhbGUuRlJBTkNFKTsKKyAgICAgICAgdGVtcFN0cmluZyA9IGZvcm1hdHRlci5mb3JtYXQoIDU3ODkuOTg3NiApOworCisgICAgICAgIGlmICh0ZW1wU3RyaW5nLmVxdWFscyhleHBlY3RlZEN1cnJlbmN5KSApIHsKKyAgICAgICAgICAgIGxvZ2xuICgiQnVnIDQwNzA3OTggY3VycmVuY3kgdGVzdCBhc3NlZC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQ6IiArCisgICAgICAgICAgICAiIEV4cGVjdGVkICIgKyBleHBlY3RlZEN1cnJlbmN5ICsKKyAgICAgICAgICAgICIgUmVjZWl2ZWQgIiArIHRlbXBTdHJpbmcgKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgZm9ybWF0dGVyID0gTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZShMb2NhbGUuRlJBTkNFKTsKKyAgICAgICAgdGVtcFN0cmluZyA9IGZvcm1hdHRlci5mb3JtYXQgKC01Nzg5Ljk4NzYpOworCisgICAgICAgIGlmICh0ZW1wU3RyaW5nLmVxdWFscyhleHBlY3RlZFBlcmNlbnQpICkgeworICAgICAgICAgICAgbG9nbG4gKCJCdWcgNDA3MDc5OCBwZXJjZW50YWdlIHRlc3QgcGFzc2VkLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZhaWxlZDoiICsKKyAgICAgICAgICAgICIgRXhwZWN0ZWQgIiArIGV4cGVjdGVkUGVyY2VudCArCisgICAgICAgICAgICAiIFJlY2VpdmVkICIgKyB0ZW1wU3RyaW5nICk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAgICogRGF0YSByb3VuZGluZyBlcnJvcnMgZm9yIEZyZW5jaCAoQ2FuYWRhKSBsb2NhbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA3MTAwNSAoKSB7CisKKyAgICAgICAgTnVtYmVyRm9ybWF0IGZvcm1hdHRlcjsKKyAgICAgICAgU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgLyogdXNlciBlcnJvciA6CisgICAgICAgIFN0cmluZyBleHBlY3RlZERlZmF1bHQgPSAiLTUgNzg5LDk4NyI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZEN1cnJlbmN5ID0gIjUgNzg5LDk4ICQiOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWRQZXJjZW50ID0gIi01NzggOTk4JSI7CisgICAgKi8KKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkRGVmYXVsdCA9ICItNVx1MDBhMDc4OSw5ODgiOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWRDdXJyZW5jeSA9ICI1XHUwMGEwNzg5LDk5ICQiOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWRQZXJjZW50ID0gIi01NzhcdTAwYTA5OTklIjsKKworICAgICAgICBmb3JtYXR0ZXIgPSBOdW1iZXJGb3JtYXQuZ2V0TnVtYmVySW5zdGFuY2UoTG9jYWxlLkNBTkFEQV9GUkVOQ0gpOworICAgICAgICB0ZW1wU3RyaW5nID0gZm9ybWF0dGVyLmZvcm1hdCAoLTU3ODkuOTg3Nik7CisgICAgICAgIGlmICh0ZW1wU3RyaW5nLmVxdWFscyhleHBlY3RlZERlZmF1bHQpKSB7CisgICAgICAgICAgICBsb2dsbiAoIkJ1ZyA0MDcxMDA1IGRlZmF1bHQgdGVzdCBwYXNzZWQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkOiIgKworICAgICAgICAgICAgIiBFeHBlY3RlZCAiICsgZXhwZWN0ZWREZWZhdWx0ICsKKyAgICAgICAgICAgICIgUmVjZWl2ZWQgIiArIHRlbXBTdHJpbmcgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvcm1hdHRlciA9IE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKExvY2FsZS5DQU5BREFfRlJFTkNIKTsKKyAgICAgICAgdGVtcFN0cmluZyA9IGZvcm1hdHRlci5mb3JtYXQoIDU3ODkuOTg3NiApIDsKKworICAgICAgICBpZiAodGVtcFN0cmluZy5lcXVhbHMoZXhwZWN0ZWRDdXJyZW5jeSkgKSB7CisgICAgICAgICAgICBsb2dsbiAoIkJ1ZyA0MDcxMDA1IGN1cnJlbmN5IHRlc3QgcGFzc2VkLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZhaWxlZDoiICsKKyAgICAgICAgICAgICIgRXhwZWN0ZWQgIiArIGV4cGVjdGVkQ3VycmVuY3kgKworICAgICAgICAgICAgIiBSZWNlaXZlZCAiICsgdGVtcFN0cmluZyApOworICAgICAgICB9CisgICAgICAgIGZvcm1hdHRlciA9IE51bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UoTG9jYWxlLkNBTkFEQV9GUkVOQ0gpOworICAgICAgICB0ZW1wU3RyaW5nID0gZm9ybWF0dGVyLmZvcm1hdCAoLTU3ODkuOTg3Nik7CisKKyAgICAgICAgaWYgKHRlbXBTdHJpbmcuZXF1YWxzKGV4cGVjdGVkUGVyY2VudCkgKSB7CisgICAgICAgICAgICBsb2dsbiAoIkJ1ZyA0MDcxMDA1IHBlcmNlbnRhZ2UgdGVzdCBwYXNzZWQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkOiIgKworICAgICAgICAgICAgIiBFeHBlY3RlZCAiICsgZXhwZWN0ZWRQZXJjZW50ICsKKyAgICAgICAgICAgICIgUmVjZWl2ZWQgIiArIHRlbXBTdHJpbmcgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERhdGEgcm91bmRpbmcgZXJyb3JzIGZvciBHZXJtYW4gKEdlcm1hbnkpIGxvY2FsZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDcxMDE0ICgpIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IGZvcm1hdHRlcjsKKyAgICAgICAgU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgICAgIC8qIHVzZXIgZXJyb3IgOgorICAgICAgICBTdHJpbmcgZXhwZWN0ZWREZWZhdWx0ID0gIi01Ljc4OSw5ODciOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWRDdXJyZW5jeSA9ICI1Ljc4OSw5OCBETSI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZFBlcmNlbnQgPSAiLTU3OC45OTglIjsKKyAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkRGVmYXVsdCA9ICItNS43ODksOTg4IjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkQ3VycmVuY3kgPSAiNS43ODksOTkgIiArIEVVUk87CisgICAgICAgIFN0cmluZyBleHBlY3RlZFBlcmNlbnQgPSAiLTU3OC45OTklIjsKKworICAgICAgICBmb3JtYXR0ZXIgPSBOdW1iZXJGb3JtYXQuZ2V0TnVtYmVySW5zdGFuY2UoTG9jYWxlLkdFUk1BTlkpOworICAgICAgICB0ZW1wU3RyaW5nID0gZm9ybWF0dGVyLmZvcm1hdCAoLTU3ODkuOTg3Nik7CisKKyAgICAgICAgaWYgKHRlbXBTdHJpbmcuZXF1YWxzKGV4cGVjdGVkRGVmYXVsdCkpIHsKKyAgICAgICAgICAgIGxvZ2xuICgiQnVnIDQwNzEwMTQgZGVmYXVsdCB0ZXN0IHBhc3NlZC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQ6IiArCisgICAgICAgICAgICAiIEV4cGVjdGVkICIgKyBleHBlY3RlZERlZmF1bHQgKworICAgICAgICAgICAgIiBSZWNlaXZlZCAiICsgdGVtcFN0cmluZyApOworICAgICAgICB9CisKKyAgICAgICAgZm9ybWF0dGVyID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoTG9jYWxlLkdFUk1BTlkpOworICAgICAgICB0ZW1wU3RyaW5nID0gZm9ybWF0dGVyLmZvcm1hdCggNTc4OS45ODc2ICkgOworCisgICAgICAgIGlmICh0ZW1wU3RyaW5nLmVxdWFscyhleHBlY3RlZEN1cnJlbmN5KSApIHsKKyAgICAgICAgICAgIGxvZ2xuICgiQnVnIDQwNzEwMTQgY3VycmVuY3kgdGVzdCBwYXNzZWQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkOiIgKworICAgICAgICAgICAgIiBFeHBlY3RlZCAiICsgZXhwZWN0ZWRDdXJyZW5jeSArCisgICAgICAgICAgICAiIFJlY2VpdmVkICIgKyB0ZW1wU3RyaW5nICk7CisgICAgICAgIH0KKworICAgICAgICBmb3JtYXR0ZXIgPSBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEluc3RhbmNlKExvY2FsZS5HRVJNQU5ZKTsKKyAgICAgICAgdGVtcFN0cmluZyA9IGZvcm1hdHRlci5mb3JtYXQgKC01Nzg5Ljk4NzYpOworCisgICAgICAgIGlmICh0ZW1wU3RyaW5nLmVxdWFscyhleHBlY3RlZFBlcmNlbnQpICkgeworICAgICAgICAgICAgbG9nbG4gKCJCdWcgNDA3MTAxNCBwZXJjZW50YWdlIHRlc3QgcGFzc2VkLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZhaWxlZDoiICsKKyAgICAgICAgICAgICIgRXhwZWN0ZWQgIiArIGV4cGVjdGVkUGVyY2VudCArCisgICAgICAgICAgICAiIFJlY2VpdmVkICIgKyB0ZW1wU3RyaW5nICk7CisgICAgICAgIH0KKworICAgIH0KKyAgICAvKioKKyAgICAgKiBEYXRhIHJvdW5kaW5nIGVycm9ycyBmb3IgSXRhbGlhbiBsb2NhbGUgbnVtYmVyIGZvcm1hdHMKKwkgKiBOb3RlLSB3aXRoIHRoZSBFdXJvLCB0aGVyZSBpcyBubyBuZWVkIGZvciBjdXJyZW5jeSByb3VuZGluZyBhbnltb3JlCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNzE4NTkgKCkgeworICAgICAgICBOdW1iZXJGb3JtYXQgZm9ybWF0dGVyOworICAgICAgICBTdHJpbmcgdGVtcFN0cmluZzsKKyAgICAgICAgLyogdXNlciBlcnJvciA6CisgICAgICAgIFN0cmluZyBleHBlY3RlZERlZmF1bHQgPSAiLTUuNzg5LDk4NyI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZEN1cnJlbmN5ID0gIi1MLiA1Ljc4OSw5OCI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZFBlcmNlbnQgPSAiLTU3OC45OTglIjsKKyAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkRGVmYXVsdCA9ICItNS43ODksOTg4IjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkQ3VycmVuY3kgPSAiLSIgKyBFVVJPICsgIiA1Ljc4OSw5OSI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZFBlcmNlbnQgPSAiLTU3OC45OTklIjsKKworICAgICAgICBmb3JtYXR0ZXIgPSBOdW1iZXJGb3JtYXQuZ2V0TnVtYmVySW5zdGFuY2UoTG9jYWxlLklUQUxZKTsKKyAgICAgICAgdGVtcFN0cmluZyA9IGZvcm1hdHRlci5mb3JtYXQgKC01Nzg5Ljk4NzYpOworCisgICAgICAgIGlmICh0ZW1wU3RyaW5nLmVxdWFscyhleHBlY3RlZERlZmF1bHQpKSB7CisgICAgICAgICAgICBsb2dsbiAoIkJ1ZyA0MDcxODU5IGRlZmF1bHQgdGVzdCBwYXNzZWQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiYSkgRmFpbGVkOiIgKworICAgICAgICAgICAgIiBFeHBlY3RlZCAiICsgZXhwZWN0ZWREZWZhdWx0ICsKKyAgICAgICAgICAgICIgUmVjZWl2ZWQgIiArIHRlbXBTdHJpbmcgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvcm1hdHRlciA9IE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKExvY2FsZS5JVEFMWSk7CisgICAgICAgIHRlbXBTdHJpbmcgPSBmb3JtYXR0ZXIuZm9ybWF0KCAtNTc4OS45ODc2ICkgOworCisgICAgICAgIGlmICh0ZW1wU3RyaW5nLmVxdWFscyhleHBlY3RlZEN1cnJlbmN5KSApIHsKKyAgICAgICAgICAgIGxvZ2xuICgiQnVnIDQwNzE4NTkgY3VycmVuY3kgdGVzdCBwYXNzZWQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiYikgRmFpbGVkOiIgKworICAgICAgICAgICAgIiBFeHBlY3RlZCAiICsgZXhwZWN0ZWRDdXJyZW5jeSArCisgICAgICAgICAgICAiIFJlY2VpdmVkICIgKyB0ZW1wU3RyaW5nICk7CisgICAgICAgIH0KKworICAgICAgICBmb3JtYXR0ZXIgPSBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEluc3RhbmNlKExvY2FsZS5JVEFMWSk7CisgICAgICAgIHRlbXBTdHJpbmcgPSBmb3JtYXR0ZXIuZm9ybWF0ICgtNTc4OS45ODc2KTsKKworICAgICAgICBpZiAodGVtcFN0cmluZy5lcXVhbHMoZXhwZWN0ZWRQZXJjZW50KSApIHsKKyAgICAgICAgICAgIGxvZ2xuICgiQnVnIDQwNzE4NTkgcGVyY2VudGFnZSB0ZXN0IHBhc3NlZC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJjKSBGYWlsZWQ6IiArCisgICAgICAgICAgICAiIEV4cGVjdGVkICIgKyBleHBlY3RlZFBlcmNlbnQgKworICAgICAgICAgICAgIiBSZWNlaXZlZCAiICsgdGVtcFN0cmluZyApOworICAgICAgICB9CisKKyAgICB9CisgICAgLyogYnVnIDQwNzE4NTkKKyAgICAgKiBUZXN0IHJvdW5kaW5nIGZvciBuZWFyZXN0IGV2ZW4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTM2MTAoKQorICAgIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjMC4jIik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuMzUsICIxMi40Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuNDUsICIxMi40Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuNDUyLCIxMi41Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuNTUsICIxMi42Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuNjUsICIxMi42Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuNjUyLCIxMi43Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuNzUsICIxMi44Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuNzUyLCIxMi44Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuODUsICIxMi44Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuODUyLCIxMi45Iik7CisgICAgICAgIHJvdW5kaW5nVGVzdChkZiwgMTIuOTUsICIxMyIpOworICAgICAgICByb3VuZGluZ1Rlc3QoZGYsIDEyLjk1MiwiMTMiKTsKKworICAgIH0KKyAgICB2b2lkIHJvdW5kaW5nVGVzdChEZWNpbWFsRm9ybWF0IGRmLCBkb3VibGUgeCwgU3RyaW5nIGV4cGVjdGVkKQorICAgIHsKKyAgICAgICAgU3RyaW5nIG91dCA9IGRmLmZvcm1hdCh4KTsKKyAgICAgICAgbG9nbG4oIiIgKyB4ICsgIiBmb3JtYXRzIHdpdGggMSBmcmFjdGlvbmFsIGRpZ2l0cyB0byAiICsgb3V0KTsKKyAgICAgICAgaWYgKCFvdXQuZXF1YWxzKGV4cGVjdGVkKSkgZXJybG4oIkZBSUw6IEV4cGVjdGVkICIgKyBleHBlY3RlZCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFRlc3RzIHRoZSBzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMgbGltaXQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTg3NDEoKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE51bWJlckZvcm1hdCBmbXQgPSBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEluc3RhbmNlKCk7CisgICAgICAgICAgICBmbXQuc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKDIwKTsKKyAgICAgICAgICAgIGxvZ2xuKGZtdC5mb3JtYXQoLjAwMSkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZm9vKSB7CisgICAgICAgICAgICBlcnJsbigiQnVnIDQwOTg0NzEgZmFpbGVkIHdpdGggZXhjZXB0aW9uIHRocm93biA6ICIgKyBmb28uZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBUZXN0cyBpbGxlZ2FsIHBhdHRlcm4gZXhjZXB0aW9uLgorICAgICAqIEZpeCBjb21tZW50IDogSFNoaWggQTMxIFBhcnQxIHdpbGwgbm90IGJlIGZpeGVkIGFuZCBqYXZhZG9jIG5lZWRzIHRvIGJlIHVwZGF0ZWQuCisgICAgICogUGFydDIgaGFzIGJlZW4gZml4ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQwNzQ0NTQoKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQoIiMsIzAwLjAwOy0jLiMiKTsKKyAgICAgICAgICAgIGxvZ2xuKCJmb3JtYXQgMzQ1Ni43ODogIiArIGZtdC5mb3JtYXQoMzQ1Ni43OCkpOyAvL2ZpeCAiVGhlIHZhcmlhYmxlICdmbXQnIGlzIG5ldmVyIHVzZWQiCisgICAgICAgICAgICBsb2dsbigiSW5jb25zaXN0ZW50IG5lZ2F0aXZlIHBhdHRlcm4gaXMgZmluZS4iKTsKKyAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgbmV3Rm10ID0gbmV3IERlY2ltYWxGb3JtYXQoIiMsIzAwLjAwIHAnJ2llY2VzOy0jLCMwMC4wMCBwJydpZWNlcyIpOworICAgICAgICAgICAgU3RyaW5nIHRlbXBTdHJpbmcgPSBuZXdGbXQuZm9ybWF0KDM0NTYuNzgpOworICAgICAgICAgICAgaWYgKCF0ZW1wU3RyaW5nLmVxdWFscygiMyw0NTYuNzggcCdpZWNlcyIpKQorICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsZWQhICAzNDU2Ljc4IHAnaWVjZXMgZXhwZWN0ZWQsIGJ1dCBnb3QgOiAiICsgdGVtcFN0cmluZyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBmb28pIHsKKyAgICAgICAgICAgIGVycmxuKCJBbiBleGNlcHRpb24gd2FzIHRocm93biBmb3IgYW55IGluY29uc2lzdGVudCBuZWdhdGl2ZSBwYXR0ZXJuLiIpOworICAgICAgICB9CisgICAgfQorICAgIC8qKgorICAgICAqIFRlc3RzIGFsbCBkaWZmZXJlbnQgY29tbWVudHMuCisgICAgICogUmVzcG9uc2UgdG8gc29tZSBjb21tZW50cyA6CisgICAgICogWzFdIERlY2ltYWxGb3JtYXQucGFyc2UgQVBJIGRvY3VtZW50YXRpb24gaXMgbW9yZSB0aGFuIGp1c3Qgb25lIGxpbmUuCisgICAgICogVGhpcyBpcyBub3QgYSByZXByb2R1Y2FibGUgZG9jIGVycm9yIGluIDExNiBzb3VyY2UgY29kZS4KKyAgICAgKiBbMl0gU2VlIHVwZGF0ZWQgamF2YWRvYy4KKyAgICAgKiBbM10gRml4ZWQuCisgICAgICogWzRdIE51bWJlckZvcm1hdC5wYXJzZShTdHJpbmcsIFBhcnNlUG9zaXRpb24pIDogSWYgcGFyc2luZyBmYWlscywKKyAgICAgKiBhIG51bGwgb2JqZWN0IHdpbGwgYmUgcmV0dXJuZWQuICBUaGUgdW5jaGFuZ2VkIHBhcnNlIHBvc2l0aW9uIGFsc28KKyAgICAgKiByZWZsZWN0cyBhbiBlcnJvci4KKyAgICAgKiBOdW1iZXJGb3JtYXQucGFyc2UoU3RyaW5nKSA6IElmIHBhcnNpbmcgZmFpbHMsIGFuIFBhcnNlRXhjZXB0aW9uCisgICAgICogd2lsbCBiZSB0aHJvd24uCisgICAgICogU2VlIHVwZGF0ZWQgamF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqIFs1XSBTZWUgdXBkYXRlZCBqYXZhZG9jLgorICAgICAqIFs2XSBTZWUgdXBkYXRlZCBqYXZhZG9jLgorICAgICAqIFs3XSBUaGlzIGlzIGEgY29ycmVjdCBiZWhhdmlvciBpZiB0aGUgRGF0ZUZvcm1hdCBvYmplY3QgaXMgbGluaWVudC4KKyAgICAgKiBPdGhlcndpc2UsIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biB3aGVuIGZvcm1hdHRpbmcKKyAgICAgKiAiSmFudWFyeSAzNSIuICBTZWUgR3JlZ29yaWFuQ2FsZW5kYXIgY2xhc3MgamF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDk5NDA0KCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGZtdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCIwMDAuMCMwIik7CisgICAgICAgICAgICBsb2dsbigiZm9ybWF0IDM0NTYuNzg6ICIgKyBmbXQuZm9ybWF0KDM0NTYuNzgpKTsgLy9maXggIlRoZSB2YXJpYWJsZSAnZm10JyBpcyBuZXZlciB1c2VkIgorICAgICAgICAgICAgZXJybG4oIkJ1ZyA0MDk5NDA0IGZhaWxlZCBhcHBseWluZyBpbGxlZ2FsIHBhdHRlcm4gXCIwMDAuMCMwXCIiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGZvbykgeworICAgICAgICAgICAgbG9nbG4oIkJ1ZyA0MDk5NDA0IHBhdHRlcm4gXCIwMDAuMCMwXCIgcGFzc2VkIik7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQoIjAjMC4wMDAiKTsKKyAgICAgICAgICAgIGxvZ2xuKCJmb3JtYXQgMzQ1Ni43ODogIiArIGZtdC5mb3JtYXQoMzQ1Ni43OCkpOyAvL2ZpeCAiVGhlIHZhcmlhYmxlICdmbXQnIGlzIG5ldmVyIHVzZWQiCisgICAgICAgICAgICBlcnJsbigiQnVnIDQwOTk0MDQgZmFpbGVkIGFwcGx5aW5nIGlsbGVnYWwgcGF0dGVybiBcIjAjMC4wMDBcIiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZm9vKSB7CisgICAgICAgICAgICBsb2dsbigiQnVnIDQwOTk0MDQgcGF0dGVybiBcIjAjMC4wMDBcIiBwYXNzZWQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBEZWNpbWFsRm9ybWF0LmFwcGx5UGF0dGVybiBkb2Vzbid0IHNldCBtaW5pbXVtIGludGVnZXIgZGlnaXRzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMDE0ODEoKQorICAgIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBzZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIywjIzAiKTsKKyAgICAgICAgaWYgKHNkZi5nZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygpICE9IDEpCisgICAgICAgICAgICBlcnJsbigiTWluaW11bSBpbnRlZ2VyIGRpZ2l0cyA6ICIgKyBzZGYuZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKSk7CisgICAgfQorICAgIC8qKgorICAgICAqIFRlc3RzIFBhcnNlUG9zaXRpb24uc2V0RXJyb3JQb3NpdGlvbigpIGFuZCBQYXJzZVBvc2l0aW9uLmdldEVycm9yUG9zaXRpb24oKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA1MjIyMygpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIywjMDAuMDAiKTsKKyAgICAgICAgICAgIE51bWJlciBudW0gPSBmbXQucGFyc2UoImFiYzMiKTsKKyAgICAgICAgICAgIGVycmxuKCJCdWcgNDA1MjIyMyBmYWlsZWQgOiBjYW4ndCBwYXJzZSBzdHJpbmcgXCJhXCIuICBHb3QgIiArIG51bSk7CisgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGZvbykgeworICAgICAgICAgICAgbG9nbG4oIkNhdWdodCBleHBlY3RlZCBQYXJzZUV4Y2VwdGlvbiA6ICIgKyBmb28uZ2V0TWVzc2FnZSgpICsgIiBhdCBpbmRleCA6ICIgKyBmb28uZ2V0RXJyb3JPZmZzZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAgICogQVBJIHRlc3RzIGZvciBBUEkgYWRkaXRpb24gcmVxdWVzdCBBOS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA2MTMwMigpCisgICAgeworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBmbXQgPSBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoKTsKKyAgICAgICAgU3RyaW5nIGN1cnJlbmN5ID0gZm10LmdldEN1cnJlbmN5U3ltYm9sKCk7CisgICAgICAgIFN0cmluZyBpbnRsQ3VycmVuY3kgPSBmbXQuZ2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKCk7CisgICAgICAgIGNoYXIgbW9uRGVjU2VwYXJhdG9yID0gZm10LmdldE1vbmV0YXJ5RGVjaW1hbFNlcGFyYXRvcigpOworICAgICAgICBpZiAoY3VycmVuY3kuZXF1YWxzKCIiKSB8fAorICAgICAgICAgICAgaW50bEN1cnJlbmN5LmVxdWFscygiIikgfHwKKyAgICAgICAgICAgIG1vbkRlY1NlcGFyYXRvciA9PSAwKSB7CisgICAgICAgICAgICBlcnJsbigiZ2V0Q3VycmVuY3lTeW1ib2xzIGZhaWxlZCwgZ290IGVtcHR5IHN0cmluZy4iKTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbigiQmVmb3JlIHNldCA9PT4gQ3VycmVuY3kgOiAiICsgY3VycmVuY3kgKyAiIEludGwgQ3VycmVuY3kgOiAiICsgaW50bEN1cnJlbmN5ICsgIiBNb25ldGFyeSBEZWNpbWFsIFNlcGFyYXRvciA6ICIgKyBtb25EZWNTZXBhcmF0b3IpOworICAgICAgICBmbXQuc2V0Q3VycmVuY3lTeW1ib2woIlhZWiIpOworICAgICAgICBmbXQuc2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKCJBQkMiKTsKKyAgICAgICAgZm10LnNldE1vbmV0YXJ5RGVjaW1hbFNlcGFyYXRvcignKicpOworICAgICAgICBjdXJyZW5jeSA9IGZtdC5nZXRDdXJyZW5jeVN5bWJvbCgpOworICAgICAgICBpbnRsQ3VycmVuY3kgPSBmbXQuZ2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKCk7CisgICAgICAgIG1vbkRlY1NlcGFyYXRvciA9IGZtdC5nZXRNb25ldGFyeURlY2ltYWxTZXBhcmF0b3IoKTsKKyAgICAgICAgaWYgKCFjdXJyZW5jeS5lcXVhbHMoIlhZWiIpIHx8CisgICAgICAgICAgICAhaW50bEN1cnJlbmN5LmVxdWFscygiQUJDIikgfHwKKyAgICAgICAgICAgIG1vbkRlY1NlcGFyYXRvciAhPSAnKicpIHsKKyAgICAgICAgICAgIGVycmxuKCJzZXRDdXJyZW5jeVN5bWJvbHMgZmFpbGVkLiIpOworICAgICAgICB9CisgICAgICAgIGxvZ2xuKCJBZnRlciBzZXQgPT0+IEN1cnJlbmN5IDogIiArIGN1cnJlbmN5ICsgIiBJbnRsIEN1cnJlbmN5IDogIiArIGludGxDdXJyZW5jeSArICIgTW9uZXRhcnkgRGVjaW1hbCBTZXBhcmF0b3IgOiAiICsgbW9uRGVjU2VwYXJhdG9yKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQVBJIHRlc3RzIGZvciBBUEkgYWRkaXRpb24gcmVxdWVzdCBBMjMuIEZpZWxkUG9zaXRpb24uZ2V0QmVnaW5JbmRleCBhbmQKKyAgICAgKiBGaWVsZFBvc2l0aW9uLmdldEVuZEluZGV4LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDYyNDg2KCkKKyAgICB7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZm10ID0gbmV3IERlY2ltYWxGb3JtYXQoIiMsIyMwLjAwIik7CisgICAgICAgIFN0cmluZ0J1ZmZlciBmb3JtYXR0ZWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIEZpZWxkUG9zaXRpb24gZmllbGQgPSBuZXcgRmllbGRQb3NpdGlvbigwKTsKKyAgICAgICAgRG91YmxlIG51bSA9IG5ldyBEb3VibGUoMTIzNC41KTsKKyAgICAgICAgZm10LmZvcm1hdChudW0sIGZvcm1hdHRlZCwgZmllbGQpOworICAgICAgICBpZiAoZmllbGQuZ2V0QmVnaW5JbmRleCgpICE9IDAgJiYgZmllbGQuZ2V0RW5kSW5kZXgoKSAhPSA1KQorICAgICAgICAgICAgZXJybG4oIkZvcm1hdCAxMjM0LjUgZmFpbGVkLiBCZWdpbiBpbmRleDogIiArIGZpZWxkLmdldEJlZ2luSW5kZXgoKSArICIgRW5kIGluZGV4OiAiICsgZmllbGQuZ2V0RW5kSW5kZXgoKSk7CisgICAgICAgIGZpZWxkLnNldEJlZ2luSW5kZXgoNyk7CisgICAgICAgIGZpZWxkLnNldEVuZEluZGV4KDQpOworICAgICAgICBpZiAoZmllbGQuZ2V0QmVnaW5JbmRleCgpICE9IDcgJiYgZmllbGQuZ2V0RW5kSW5kZXgoKSAhPSA0KQorICAgICAgICAgICAgZXJybG4oIlNldCBiZWdpbi9lbmQgZmllbGQgaW5kZXhlcyBmYWlsZWQuIEJlZ2luIGluZGV4OiAiICsgZmllbGQuZ2V0QmVnaW5JbmRleCgpICsgIiBFbmQgaW5kZXg6ICIgKyBmaWVsZC5nZXRFbmRJbmRleCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNpbWFsRm9ybWF0LnBhcnNlIGluY29ycmVjdGx5IHdvcmtzIHdpdGggYSBncm91cCBzZXBhcmF0b3IuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMDg3MzgoKQorICAgIHsKKworICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoIiMsIyMwLiMjIyIsIG5ldworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyhqYXZhLnV0aWwuTG9jYWxlLlVTKSk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gIjEuMjIyLDExMSI7CisgICAgICAgIE51bWJlciBudW0gPSBkZi5wYXJzZSh0ZXh0LG5ldyBQYXJzZVBvc2l0aW9uKDApKTsKKyAgICAgICAgaWYgKCFudW0udG9TdHJpbmcoKS5lcXVhbHMoIjEuMjIyIikpCisgICAgICAgICAgICBlcnJsbigiXCIiICsgdGV4dCArICJcIiAgaXMgcGFyc2VkIGFzICIgKyBudW0pOworICAgICAgICB0ZXh0ID0gIjEuMjIyeDExMSI7CisgICAgICAgIG51bSA9IGRmLnBhcnNlKHRleHQsbmV3IFBhcnNlUG9zaXRpb24oMCkpOworICAgICAgICBpZiAoIW51bS50b1N0cmluZygpLmVxdWFscygiMS4yMjIiKSkKKyAgICAgICAgICAgIGVycmxuKCJcIiIgKyB0ZXh0ICsgIlwiICBpcyBwYXJzZWQgYXMgIiArIG51bSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdC5mb3JtYXQoKSBpbmNvcnJlY3RseSBmb3JtYXRzIG5lZ2F0aXZlIGRvdWJsZXMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMDY2NTgoKQorICAgIHsKKyAgICAgICAgTG9jYWxlIHNhdmVkTG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKyAgICAgICAgTG9jYWxlLnNldERlZmF1bHQoTG9jYWxlLlVTKTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7IC8vIENvcnJlY3RlZDsgc2VlIDQxNDc3MDYKKyAgICAgICAgZG91YmxlIGQxID0gLTAuMDsKKyAgICAgICAgZG91YmxlIGQyID0gLTAuMDAwMTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgbG9nbG4oInBhdHRlcm46IFwiIiArIGRmLnRvUGF0dGVybigpICsgIlwiIik7CisgICAgICAgIGRmLmZvcm1hdChkMSwgYnVmZmVyLCBuZXcgRmllbGRQb3NpdGlvbigwKSk7CisgICAgICAgIGlmICghYnVmZmVyLnRvU3RyaW5nKCkuZXF1YWxzKCItMCIpKSB7IC8vIENvcnJlY3RlZDsgc2VlIDQxNDc3MDYKKyAgICAgICAgICAgIGVycmxuKGQxICsgIiAgICAgIGlzIGZvcm1hdHRlZCBhcyAiICsgYnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIuc2V0TGVuZ3RoKDApOworICAgICAgICBkZi5mb3JtYXQoZDIsIGJ1ZmZlciwgbmV3IEZpZWxkUG9zaXRpb24oMCkpOworICAgICAgICBpZiAoIWJ1ZmZlci50b1N0cmluZygpLmVxdWFscygiLTAiKSkgeyAvLyBDb3JyZWN0ZWQ7IHNlZSA0MTQ3NzA2CisgICAgICAgICAgICBlcnJsbihkMiArICIgICAgICBpcyBmb3JtYXR0ZWQgYXMgIiArIGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgTG9jYWxlLnNldERlZmF1bHQoc2F2ZWRMb2NhbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQucGFyc2UgcmV0dXJucyAwIGlmIHN0cmluZyBwYXJhbWV0ZXIgaXMgaW5jb3JyZWN0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTA2NjYyKCkKKyAgICB7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOworICAgICAgICBTdHJpbmcgdGV4dCA9ICJ4IjsKKyAgICAgICAgUGFyc2VQb3NpdGlvbiBwb3MxID0gbmV3IFBhcnNlUG9zaXRpb24oMCksIHBvczIgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKworICAgICAgICBsb2dsbigicGF0dGVybjogXCIiICsgZGYudG9QYXR0ZXJuKCkgKyAiXCIiKTsKKyAgICAgICAgTnVtYmVyIG51bSA9IGRmLnBhcnNlKHRleHQsIHBvczEpOworICAgICAgICBpZiAobnVtICE9IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJUZXN0IEZhaWxlZDogXCIiICsgdGV4dCArICJcIiBpcyBwYXJzZWQgYXMgIiArIG51bSk7CisgICAgICAgIH0KKyAgICAgICAgZGYgPSBudWxsOworICAgICAgICBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIkIyMjLjAwIik7CisgICAgICAgIG51bSA9IGRmLnBhcnNlKCIkIiwgcG9zMik7CisgICAgICAgIGlmIChudW0gIT0gbnVsbCl7CisgICAgICAgICAgICBlcnJsbigiVGVzdCBGYWlsZWQ6IFwiJFwiIGlzIHBhcnNlZCBhcyAiICsgbnVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE51bWJlckZvcm1hdC5wYXJzZSBkb2Vzbid0IHJldHVybiBudWxsCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMTQ2MzkoKQorICAgIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IGZvcm1hdCA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworICAgICAgICBTdHJpbmcgdGV4dCA9ICJ0aW1lIDEwOngiOworICAgICAgICBQYXJzZVBvc2l0aW9uIHBvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKDgpOworICAgICAgICBOdW1iZXIgcmVzdWx0ID0gZm9ybWF0LnBhcnNlKHRleHQsIHBvcyk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgZXJybG4oIlNob3VsZCByZXR1cm4gbnVsbCBidXQgZ290IDogIiArIHJlc3VsdCk7IC8vIFNob3VsZCBiZSBudWxsOyBpdCBpc24ndAorICAgIH0KKworICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQuZm9ybWF0KGxvbmcgbikgZmFpbHMgaWYgbiAqIG11bHRpcGxpZXIgPiBNQVhfTE9ORy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwNjY2NCgpCisgICAgeworICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKKyAgICAgICAgbG9uZyBuID0gMTIzNDU2Nzg5MDEyMzQ1Nkw7CisgICAgICAgIGludCBtID0gMTIzNDU2Nzg7CisgICAgICAgIEJpZ0ludGVnZXIgYmlnTiA9IEJpZ0ludGVnZXIudmFsdWVPZihuKTsKKyAgICAgICAgYmlnTiA9IGJpZ04ubXVsdGlwbHkoQmlnSW50ZWdlci52YWx1ZU9mKG0pKTsKKyAgICAgICAgZGYuc2V0TXVsdGlwbGllcihtKTsKKyAgICAgICAgZGYuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKKyAgICAgICAgbG9nbG4oImZvcm1hdGVkOiAiICsKKyAgICAgICAgICAgIGRmLmZvcm1hdChuLCBuZXcgU3RyaW5nQnVmZmVyKCksIG5ldyBGaWVsZFBvc2l0aW9uKDApKSk7CisgICAgICAgIGxvZ2xuKCJleHBlY3RlZDogIiArIGJpZ04udG9TdHJpbmcoKSk7CisgICAgfQorICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQuZm9ybWF0IGluY29ycmVjdGx5IGZvcm1hdHMgLTAuMC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwNjY2NygpCisgICAgeworICAgICAgICBMb2NhbGUgc2F2ZWRMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChMb2NhbGUuVVMpOworICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKKyAgICAgICAgZGYuc2V0UG9zaXRpdmVQcmVmaXgoIisiKTsKKyAgICAgICAgZG91YmxlIGQgPSAtMC4wOworICAgICAgICBsb2dsbigicGF0dGVybjogXCIiICsgZGYudG9QYXR0ZXJuKCkgKyAiXCIiKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgZGYuZm9ybWF0KGQsIGJ1ZmZlciwgbmV3IEZpZWxkUG9zaXRpb24oMCkpOworICAgICAgICBpZiAoIWJ1ZmZlci50b1N0cmluZygpLmVxdWFscygiLTAiKSkgeyAvLyBDb3JyZWN0ZWQ7IHNlZSA0MTQ3NzA2CisgICAgICAgICAgICBlcnJsbihkICsgIiAgaXMgZm9ybWF0dGVkIGFzICIgKyBidWZmZXIpOworICAgICAgICB9CisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KHNhdmVkTG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNpbWFsRm9ybWF0LnNldE1heGltdW1JbnRlZ2VyRGlnaXRzKCkgd29ya3MgaW5jb3JyZWN0bHkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMTA5MzYoKQorICAgIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IG5mID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKCk7CisgICAgICAgIG5mLnNldE1heGltdW1JbnRlZ2VyRGlnaXRzKDEyOCk7CisgICAgICAgIGxvZ2xuKCJzZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygxMjgpIik7CisgICAgICAgIGlmIChuZi5nZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpICE9IDEyOCkKKyAgICAgICAgICAgIGVycmxuKCJnZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpIHJldHVybnMgIiArCisgICAgICAgICAgICAgICAgbmYuZ2V0TWF4aW11bUludGVnZXJEaWdpdHMoKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIExvY2FsZSBkYXRhIHNob3VsZCB1c2UgZ2VuZXJpYyBjdXJyZW5jeSBzeW1ib2wKKyAgICAgKgorICAgICAqIDEpIE1ha2Ugc3VyZSB0aGF0IGFsbCBjdXJyZW5jeSBmb3JtYXRzIHVzZSB0aGUgZ2VuZXJpYyBjdXJyZW5jeSBzeW1ib2wuCisgICAgICogMikgTWFrZSBzdXJlIHdlIGdldCB0aGUgc2FtZSByZXN1bHRzIHVzaW5nIHRoZSBnZW5lcmljIHN5bWJvbCBvciBhCisgICAgICogICAgaGFyZC1jb2RlZCBvbmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMjI4NDAoKQorICAgIHsKKyAgICAgICAgTG9jYWxlW10gbG9jYWxlcyA9IE51bWJlckZvcm1hdC5nZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIHJiID0gSUNVTG9jYWxlRGF0YS5nZXRSZXNvdXJjZUJ1bmRsZSgiTG9jYWxlRWxlbWVudHMiLCBsb2NhbGVzW2ldKTsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVuY3kgcGF0dGVybiBmb3IgdGhpcyBsb2NhbGUuICBXZSBoYXZlIHRvIGZpc2ggaXQKKyAgICAgICAgICAgIC8vIG91dCBvZiB0aGUgUmVzb3VyY2VCdW5kbGUgZGlyZWN0bHksIHNpbmNlIERlY2ltYWxGb3JtYXQudG9QYXR0ZXJuCisgICAgICAgICAgICAvLyB3aWxsIHJldHVybiB0aGUgbG9jYWxpemVkIHN5bWJvbCwgbm90IFwwMGE0CisgICAgICAgICAgICAvLworICAgICAgICAgICAgU3RyaW5nW10gbnVtUGF0dGVybnMgPSAoU3RyaW5nW10pcmIuZ2V0T2JqZWN0KCJOdW1iZXJQYXR0ZXJucyIpOworICAgICAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBudW1QYXR0ZXJuc1sxXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHBhdHRlcm4uaW5kZXhPZigiXHUwMEE0IikgPT0gLTEgKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkN1cnJlbmN5IGZvcm1hdCBmb3IgIiArIGxvY2FsZXNbaV0gKworICAgICAgICAgICAgICAgICAgICAgICAgIiBkb2VzIG5vdCBjb250YWluIGdlbmVyaWMgY3VycmVuY3kgc3ltYm9sOiIgKworICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDcmVhdGUgYSBEZWNpbWFsRm9ybWF0IHVzaW5nIHRoZSBwYXR0ZXJuIHdlIGdvdCBhbmQgZm9ybWF0IGEgbnVtYmVyCisgICAgICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW1ib2xzID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKGxvY2FsZXNbaV0pOworICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQxID0gbmV3IERlY2ltYWxGb3JtYXQocGF0dGVybiwgc3ltYm9scyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQxID0gZm10MS5mb3JtYXQoMS4xMTEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm93IHN1YnN0aXR1dGUgaW4gdGhlIGxvY2FsZSdzIGN1cnJlbmN5IHN5bWJvbCBhbmQgY3JlYXRlIGFub3RoZXIKKyAgICAgICAgICAgIC8vIHBhdHRlcm4uICBSZXBsYWNlIHRoZSBkZWNpbWFsIHNlcGFyYXRvciB3aXRoIHRoZSBtb25ldGFyeSBzZXBhcmF0b3IuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy9jaGFyIGRlY1NlcCA9IHN5bWJvbHMuZ2V0RGVjaW1hbFNlcGFyYXRvcigpOyAvL1RoZSB2YXJpYWJsZSBpcyBuZXZlciB1c2VkCisgICAgICAgICAgICBjaGFyIG1vblNlcCA9IHN5bWJvbHMuZ2V0TW9uZXRhcnlEZWNpbWFsU2VwYXJhdG9yKCk7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihwYXR0ZXJuKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYnVmLmxlbmd0aCgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmLmNoYXJBdChqKSA9PSAnXHUwMGE0JykgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY3VyID0gIiciICsgc3ltYm9scy5nZXRDdXJyZW5jeVN5bWJvbCgpICsgIiciOworICAgICAgICAgICAgICAgICAgICBidWYucmVwbGFjZShqLCBqKzEsIGN1cik7IAorICAgICAgICAgICAgICAgICAgICBqICs9IGN1ci5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ltYm9scy5zZXREZWNpbWFsU2VwYXJhdG9yKG1vblNlcCk7CisgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGZtdDIgPSBuZXcgRGVjaW1hbEZvcm1hdChidWYudG9TdHJpbmcoKSwgc3ltYm9scyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQyID0gZm10Mi5mb3JtYXQoMS4xMTEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXJlc3VsdDEuZXF1YWxzKHJlc3VsdDIpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlJlc3VsdHMgZm9yICIgKyBsb2NhbGVzW2ldICsgIiBkaWZmZXI6ICIgKworICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDEgKyAiIHZzICIgKyByZXN1bHQyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAgCisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdC5mb3JtYXQoKSBkZWxpdmVycyB3cm9uZyBzdHJpbmcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMjU4ODUoKQorICAgIHsKKyAgICAgICAgZG91YmxlIHJhdGUgPSAxMi4zNDsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmb3JtYXREZWMgPSBuZXcgRGVjaW1hbEZvcm1hdCAoIjAwMC4wMCIpOworICAgICAgICBsb2dsbigidG9QYXR0ZXJuOiAiICsgZm9ybWF0RGVjLnRvUGF0dGVybigpKTsKKyAgICAgICAgU3RyaW5nIHJhdGVTdHJpbmc9IGZvcm1hdERlYy5mb3JtYXQocmF0ZSk7CisgICAgICAgIGlmICghcmF0ZVN0cmluZy5lcXVhbHMoIjAxMi4zNCIpKQorICAgICAgICAgICAgZXJybG4oInJlc3VsdCA6ICIgKyByYXRlU3RyaW5nICsgIiBleHBlY3RlZCA6IDAxMi4zNCIpOworICAgICAgICByYXRlID0gMC4xMjM0OworICAgICAgICBmb3JtYXREZWMgPSBudWxsOworICAgICAgICBmb3JtYXREZWMgPSBuZXcgRGVjaW1hbEZvcm1hdCAoIiswMDAuMDAlOy0wMDAuMDAlIik7CisgICAgICAgIGxvZ2xuKCJ0b1BhdHRlcm46ICIgKyBmb3JtYXREZWMudG9QYXR0ZXJuKCkpOworICAgICAgICByYXRlU3RyaW5nPSBmb3JtYXREZWMuZm9ybWF0KHJhdGUpOworICAgICAgICBpZiAoIXJhdGVTdHJpbmcuZXF1YWxzKCIrMDEyLjM0JSIpKQorICAgICAgICAgICAgZXJybG4oInJlc3VsdCA6ICIgKyByYXRlU3RyaW5nICsgIiBleHBlY3RlZCA6ICswMTIuMzQlIik7CisgICAgfQorCisgICAgLyoqCisgICAgICoqCisgICAgICogRGVjaW1hbEZvcm1hdCBwcm9kdWNlcyBleHRyYSB6ZXJvcyB3aGVuIGZvcm1hdHRpbmcgbnVtYmVycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEzNDAzNCgpIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBuZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjIywjIyMsIyMjLjAwIik7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgZiA9IG5mLmZvcm1hdCg5LjAyKTsKKyAgICAgICAgaWYgKGYuZXF1YWxzKCI5LjAyIikpIGxvZ2xuKGYgKyAiIG9rIik7IGVsc2UgZXJybG4oIjkuMDIgLT4gIiArIGYgKyAiOyB3YW50IDkuMDIiKTsKKworICAgICAgICBmID0gbmYuZm9ybWF0KDApOworICAgICAgICBpZiAoZi5lcXVhbHMoIi4wMCIpKSBsb2dsbihmICsgIiBvayIpOyBlbHNlIGVycmxuKCIwIC0+ICIgKyBmICsgIjsgd2FudCAuMDAiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDQU5OT1QgUkVQUk9EVUNFIC0gVGhpcyBidWcgY291bGQgbm90IGJlIHJlcHJvZHVjZWQuICBJdCBtYXkgYmUKKyAgICAgKiBhIGR1cGxpY2F0ZSBvZiA0MTM0MDM0LgorICAgICAqCisgICAgICogSkRLIDEuMS42IEJ1ZywgZGlkIE5PVCBvY2N1ciBpbiAxLjEuNQorICAgICAqIFBvc3NpYmx5IHJlbGF0ZWQgdG8gYnVnIDQxMjU4ODUuCisgICAgICogCisgICAgICogVGhpcyBjbGFzcyBkZW1vbnN0cmF0ZXMgYSByZWdyZXNzaW9uIGluIHZlcnNpb24gMS4xLjYKKyAgICAgKiBvZiBEZWNpbWFsRm9ybWF0IGNsYXNzLgorICAgICAqIAorICAgICAqIDEuMS42IFJlc3VsdHMKKyAgICAgKiBWYWx1ZSAxLjIgRm9ybWF0ICMuMDAgUmVzdWx0ICcwMS4yMCcgISEhd3JvbmcKKyAgICAgKiBWYWx1ZSAxLjIgRm9ybWF0IDAuMDAgUmVzdWx0ICcwMDEuMjAnICEhIXdyb25nCisgICAgICogVmFsdWUgMS4yIEZvcm1hdCAwMC4wMCBSZXN1bHQgJzAwMDEuMjAnICEhIXdyb25nCisgICAgICogVmFsdWUgMS4yIEZvcm1hdCAjMC4wIyBSZXN1bHQgJzEuMicKKyAgICAgKiBWYWx1ZSAxLjIgRm9ybWF0ICMwLjAwIFJlc3VsdCAnMDAxLjIwJyAhISF3cm9uZworICAgICAqIAorICAgICAqIDEuMS41IFJlc3VsdHMKKyAgICAgKiBWYWx1ZSAxLjIgRm9ybWF0ICMuMDAgUmVzdWx0ICcxLjIwJworICAgICAqIFZhbHVlIDEuMiBGb3JtYXQgMC4wMCBSZXN1bHQgJzEuMjAnCisgICAgICogVmFsdWUgMS4yIEZvcm1hdCAwMC4wMCBSZXN1bHQgJzAxLjIwJworICAgICAqIFZhbHVlIDEuMiBGb3JtYXQgIzAuMCMgUmVzdWx0ICcxLjInCisgICAgICogVmFsdWUgMS4yIEZvcm1hdCAjMC4wMCBSZXN1bHQgJzEuMjAnCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMzQzMDAoKSB7CisgICAgICAgIFN0cmluZ1tdIERBVEEgPSB7CisgICAgICAgICAvLyBQYXR0ZXJuICAgICAgRXhwZWN0ZWQgc3RyaW5nCisgICAgICAgICAgICAiIy4wMCIsICAgICAgIjEuMjAiLAorICAgICAgICAgICAgIjAuMDAiLCAgICAgICIxLjIwIiwKKyAgICAgICAgICAgICIwMC4wMCIsICAgICAiMDEuMjAiLAorICAgICAgICAgICAgIiMwLjAjIiwgICAgICIxLjIiLAorICAgICAgICAgICAgIiMwLjAwIiwgICAgICIxLjIwIiwKKyAgICAgICAgfTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0yKSB7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbmV3IERlY2ltYWxGb3JtYXQoREFUQVtpXSkuZm9ybWF0KDEuMik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5lcXVhbHMoREFUQVtpKzFdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiAxLjIgeCAiICsgREFUQVtpXSArICIgPSAiICsgcmVzdWx0ICsKKyAgICAgICAgICAgICAgICAgICAgICAiOyB3YW50ICIgKyBEQVRBW2krMV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9rOiAxLjIgeCAiICsgREFUQVtpXSArICIgPSAiICsgcmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEVtcHR5IHBhdHRlcm4gcHJvZHVjZXMgZG91YmxlIG5lZ2F0aXZlIHByZWZpeC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE0MDAwOSgpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDI7ICsraSkgeworICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBmID0gbnVsbDsKKyAgICAgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLkVOR0xJU0gpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBmID0gbmV3IERlY2ltYWxGb3JtYXQoIiMuIyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5FTkdMSVNIKSk7CisgICAgICAgICAgICAgICAgZi5hcHBseVBhdHRlcm4oIiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIHMgPSBmLmZvcm1hdCgxMjMuNDU2KTsKKyAgICAgICAgICAgIGlmICghcy5lcXVhbHMoIjEyMy40NTYiKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogRm9ybWF0IGVtcHR5IHBhdHRlcm4geCAxMjMuNDU2ID0+ICIgKyBzKTsKKyAgICAgICAgICAgIHMgPSBmLmZvcm1hdCgtMTIzLjQ1Nik7CisgICAgICAgICAgICBpZiAoIXMuZXF1YWxzKCItMTIzLjQ1NiIpKQorICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBGb3JtYXQgZW1wdHkgcGF0dGVybiB4IC0xMjMuNDU2ID0+ICIgKyBzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEJpZ0RlY2ltYWwgbnVtYmVycyBnZXQgdGhlaXIgZnJhY3Rpb25zIHRydW5jYXRlZCBieSBOdW1iZXJGb3JtYXQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNDE3NTAoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gIjEyMzQ1LjY3IjsKKyAgICAgICAgICAgIEJpZ0RlY2ltYWwgYmQgPSBuZXcgQmlnRGVjaW1hbChzdHIpOworICAgICAgICAgICAgU3RyaW5nIHNkID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKExvY2FsZS5VUykuZm9ybWF0KGJkKTsKKyAgICAgICAgICAgIGlmICghc2QuZW5kc1dpdGgoIjY3IikpIGVycmxuKCJGYWlsOiAiICsgc3RyICsgIiB4IGZvcm1hdCAtPiAiICsgc2QpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdCB0b1BhdHRlcm4oKSBkb2Vzbid0IHF1b3RlIHNwZWNpYWwgY2hhcmFjdGVycyBvciBoYW5kbGUKKyAgICAgKiBzaW5nbGUgcXVvdGVzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTQ1NDU3KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBuZiA9IChEZWNpbWFsRm9ybWF0KU51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworICAgICAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgc3ltID0gbmYuZ2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKTsKKyAgICAgICAgICAgIHN5bS5zZXREZWNpbWFsU2VwYXJhdG9yKCdcJycpOworICAgICAgICAgICAgbmYuc2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoc3ltKTsKKyAgICAgICAgICAgIGRvdWJsZSBwaSA9IDMuMTQxNTk7CisKKyAgICAgICAgICAgIFN0cmluZ1tdIFBBVFMgPSB7ICIjLjAwICdudW0nJ2JlciciLCAiJycjLjAwJyciIH07CisKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxQQVRTLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgbmYuYXBwbHlQYXR0ZXJuKFBBVFNbaV0pOworICAgICAgICAgICAgICAgIFN0cmluZyBvdXQgPSBuZi5mb3JtYXQocGkpOworICAgICAgICAgICAgICAgIFN0cmluZyBwYXQgPSBuZi50b1BhdHRlcm4oKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgdmFsID0gbmYucGFyc2Uob3V0KS5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbmYuYXBwbHlQYXR0ZXJuKHBhdCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG91dDIgPSBuZi5mb3JtYXQocGkpOworICAgICAgICAgICAgICAgIFN0cmluZyBwYXQyID0gbmYudG9QYXR0ZXJuKCk7CisgICAgICAgICAgICAgICAgZG91YmxlIHZhbDIgPSBuZi5wYXJzZShvdXQyKS5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFwYXQuZXF1YWxzKHBhdDIpKQorICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbCB3aXRoIFwiIiArIFBBVFNbaV0gKyAiXCI6IFBhdHRlcm5zIHNob3VsZCBjb25jdXIsIFwiIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdCArICJcIiB2cy4gXCIiICsgcGF0MiArICJcIiIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbG9nbG4oIk9rIFwiIiArIFBBVFNbaV0gKyAiXCIgdG9QYXR0ZXJuKCkgLT4gXCIiICsgcGF0ICsgJyInKTsKKworICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gdmFsMiAmJiBvdXQuZXF1YWxzKG91dDIpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJPayAiICsgcGkgKyAiIHggXCIiICsgUEFUU1tpXSArICJcIiAtPiBcIiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgKyAiXCIgLT4gIiArIHZhbCArICIgLT4gXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0MiArICJcIiAtPiAiICsgdmFsMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbCAiICsgcGkgKyAiIHggXCIiICsgUEFUU1tpXSArICJcIiAtPiBcIiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgKyAiXCIgLT4gIiArIHZhbCArICIgLT4gXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0MiArICJcIiAtPiAiICsgdmFsMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbDogIiArIGUpOworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERlY2ltYWxGb3JtYXQuYXBwbHlQYXR0ZXJuKCkgc2V0cyBtaW5pbXVtIGludGVnZXIgZGlnaXRzIGluY29ycmVjdGx5LgorICAgICAqIENBTk5PVCBSRVBST0RVQ0UKKyAgICAgKiBUaGlzIGJ1ZyBpcyBhIGR1cGxpY2F0ZSBvZiA0MTM5MzQ0LCB3aGljaCBpcyBhIGR1cGxpY2F0ZSBvZiA0MTM0MzAwCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNDcyOTUoKSB7CisgICAgICAgIERlY2ltYWxGb3JtYXQgc2RmID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAiIywjIyMiOworICAgICAgICBsb2dsbigiQXBwbHlpbmcgcGF0dGVybiBcIiIgKyBwYXR0ZXJuICsgIlwiIik7CisgICAgICAgIHNkZi5hcHBseVBhdHRlcm4ocGF0dGVybik7CisgICAgICAgIGludCBtaW5JbnREaWcgPSBzZGYuZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKTsKKyAgICAgICAgaWYgKG1pbkludERpZyAhPSAwKSB7CisgICAgICAgICAgICBlcnJsbigiVGVzdCBmYWlsZWQiKTsKKyAgICAgICAgICAgIGVycmxuKCIgTWluaW11bSBpbnRlZ2VyIGRpZ2l0cyA6ICIgKyBtaW5JbnREaWcpOworICAgICAgICAgICAgZXJybG4oIiBuZXcgcGF0dGVybjogIiArIHNkZi50b1BhdHRlcm4oKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiVGVzdCBwYXNzZWQiKTsKKyAgICAgICAgICAgIGxvZ2xuKCIgTWluaW11bSBpbnRlZ2VyIGRpZ2l0cyA6ICIgKyBtaW5JbnREaWcpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdCBmb3JtYXRzIC0wLjAgYXMgKzAuMAorICAgICAqIFNlZSBhbHNvIG9sZGVyIHJlbGF0ZWQgYnVnIDQxMDY2NTgsIDQxMDY2NjcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE0NzcwNigpIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjLCMjMC4wIyMiKTsKKyAgICAgICAgZGYuc2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMobmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKExvY2FsZS5FTkdMSVNIKSk7CisgICAgICAgIGRvdWJsZSBkMSA9IC0wLjA7CisgICAgICAgIGRvdWJsZSBkMiA9IC0wLjAwMDE7CisgICAgICAgIFN0cmluZ0J1ZmZlciBmMSA9IGRmLmZvcm1hdChkMSwgbmV3IFN0cmluZ0J1ZmZlcigpLCBuZXcgRmllbGRQb3NpdGlvbigwKSk7CisgICAgICAgIFN0cmluZ0J1ZmZlciBmMiA9IGRmLmZvcm1hdChkMiwgbmV3IFN0cmluZ0J1ZmZlcigpLCBuZXcgRmllbGRQb3NpdGlvbigwKSk7CisgICAgICAgIGlmICghZjEudG9TdHJpbmcoKS5lcXVhbHMoIi0wLjAiKSkgeworICAgICAgICAgICAgZXJybG4oZDEgKyAiIHggXCIiICsgZGYudG9QYXR0ZXJuKCkgKyAiXCIgaXMgZm9ybWF0dGVkIGFzIFwiIiArIGYxICsgJyInKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWYyLnRvU3RyaW5nKCkuZXF1YWxzKCItMC4wIikpIHsKKyAgICAgICAgICAgIGVycmxuKGQyICsgIiB4IFwiIiArIGRmLnRvUGF0dGVybigpICsgIlwiIGlzIGZvcm1hdHRlZCBhcyBcIiIgKyBmMiArICciJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXJGb3JtYXQgY2Fubm90IGZvcm1hdCBEb3VibGUuTUFYX1ZBTFVFCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNjIxOTgoKSB7CisgICAgICAgIGRvdWJsZSBkYmwgPSBEb3VibGUuTUFYX1ZBTFVFOworICAgICAgICBOdW1iZXJGb3JtYXQgZiA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworICAgICAgICBmLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhJbnRlZ2VyLk1BWF9WQUxVRSk7CisgICAgICAgIGYuc2V0TWF4aW11bUludGVnZXJEaWdpdHMoSW50ZWdlci5NQVhfVkFMVUUpOworICAgICAgICBTdHJpbmcgcyA9IGYuZm9ybWF0KGRibCk7CisgICAgICAgIGxvZ2xuKCJUaGUgbnVtYmVyICIgKyBkYmwgKyAiIGZvcm1hdHRlZCB0byAiICsgcyk7CisgICAgICAgIE51bWJlciBuID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG4gPSBmLnBhcnNlKHMpOworICAgICAgICB9IGNhdGNoIChqYXZhLnRleHQuUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkNhdWdodCBhIFBhcnNlRXhjZXB0aW9uOiIpOworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbigiVGhlIHN0cmluZyAiICsgcyArICIgcGFyc2VkIGFzICIgKyBuKTsKKyAgICAgICAgaWYgKG4uZG91YmxlVmFsdWUoKSAhPSBkYmwpIHsKKyAgICAgICAgICAgIGVycmxuKCJSb3VuZCB0cmlwIGZhaWx1cmUiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE51bWJlckZvcm1hdCBkb2VzIG5vdCBwYXJzZSBuZWdhdGl2ZSB6ZXJvLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTYyODUyKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDI7ICsraSkgeworICAgICAgICAgICAgTnVtYmVyRm9ybWF0IGYgPSAoaSA9PSAwKSA/IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgOiBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEluc3RhbmNlKCk7CisgICAgICAgICAgICBkb3VibGUgZCA9IC0wLjA7CisgICAgICAgICAgICBTdHJpbmcgcyA9IGYuZm9ybWF0KGQpOworICAgICAgICAgICAgZG91YmxlIGUgPSBmLnBhcnNlKHMpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBsb2dsbigiIiArCisgICAgICAgICAgICAgICAgICBkICsgIiAtPiAiICsKKyAgICAgICAgICAgICAgICAgICciJyArIHMgKyAnIicgKyAiIC0+ICIgKworICAgICAgICAgICAgICBlKTsKKyAgICAgICAgICAgIGlmIChlICE9IDAuMCB8fCAxLjAvZSA+IDAuMCkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJGYWlsZWQgdG8gcGFyc2UgbmVnYXRpdmUgemVybyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTnVtYmVyRm9ybWF0IHRydW5jYXRlcyBkYXRhCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNjc0OTQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IGZtdCA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIGEgPSBEb3VibGUuTUFYX1ZBTFVFOworICAgICAgICBTdHJpbmcgcyA9IGZtdC5mb3JtYXQoYSk7CisgICAgICAgIGRvdWJsZSBiID0gZm10LnBhcnNlKHMpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgIGJvb2xlYW4gbWF0Y2ggPSBhID09IGI7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgbG9nbG4oIiIgKyBhICsgIiAtPiBcIiIgKyBzICsgIlwiIC0+ICIgKyBiICsgIiBvayIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIiIgKyBhICsgIiAtPiBcIiIgKyBzICsgIlwiIC0+ICIgKyBiICsgIiBGQUlMIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBkb24ndCB0ZXN0IERvdWJsZS5NSU5fVkFMVUUgYmVjYXVzZSB0aGUgbG9jYWxlIGRhdGEgZm9yIHRoZSBVUworICAgICAgICAvLyBjdXJyZW50bHkgZG9lc24ndCBzcGVjaWZ5IGVub3VnaCBkaWdpdHMgdG8gZGlzcGxheSBEb3VibGUuTUlOX1ZBTFVFLgorICAgICAgICAvLyBUaGlzIGlzIGNvcnJlY3QgZm9yIG5vdzsgaG93ZXZlciwgd2UgbGVhdmUgdGhpcyBoZXJlIGFzIGEgcmVtaW5kZXIKKyAgICAgICAgLy8gaW4gY2FzZSB3ZSB3YW50IHRvIGFkZHJlc3MgdGhpcyBsYXRlci4KKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBhID0gRG91YmxlLk1JTl9WQUxVRTsKKyAgICAgICAgICAgIHMgPSBmbXQuZm9ybWF0KGEpOworICAgICAgICAgICAgYiA9IGZtdC5wYXJzZShzKS5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgbWF0Y2ggPSBhID09IGI7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiIiArIGEgKyAiIC0+IFwiIiArIHMgKyAiXCIgLT4gIiArIGIgKyAiIG9rIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKCIiICsgYSArICIgLT4gXCIiICsgcyArICJcIiAtPiAiICsgYiArICIgRkFJTCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdC5wYXJzZSgpIGZhaWxzIHdoZW4gUGFyc2VJbnRlZ2VyT25seSBzZXQgdG8gdHJ1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTcwNzk4KCkgeworICAgICAgICBMb2NhbGUgc2F2ZWRMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICBMb2NhbGUuc2V0RGVmYXVsdChMb2NhbGUuVVMpOworICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKKyAgICAgICAgZGYuc2V0UGFyc2VJbnRlZ2VyT25seSh0cnVlKTsKKyAgICAgICAgTnVtYmVyIG4gPSBkZi5wYXJzZSgiLTAuMCIsIG5ldyBQYXJzZVBvc2l0aW9uKDApKTsKKyAgICAgICAgaWYgKCEobiBpbnN0YW5jZW9mIERvdWJsZSkKKyAgICAgICAgICAgIHx8IG4uaW50VmFsdWUoKSAhPSAwKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogcGFyc2UoXCItMC4wXCIpIHJldHVybnMgIiArCisgICAgICAgICAgICAgICAgICBuICsgIiAoIiArIG4uZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAnKScpOworICAgICAgICB9CisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KHNhdmVkTG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB0b1BhdHRlcm4gb25seSBwdXRzIHRoZSBmaXJzdCBncm91cGluZyBzZXBhcmF0b3IgaW4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNzYxMTQoKSB7CisgICAgICAgIFN0cmluZ1tdIERBVEEgPSB7CisgICAgICAgICAgICAiMDAiLCAiIzAwIiwKKyAgICAgICAgICAgICIwMDAiLCAiIzAwMCIsIC8vIE5vIGdyb3VwaW5nCisgICAgICAgICAgICAiIzAwMCIsICIjMDAwIiwgLy8gTm8gZ3JvdXBpbmcKKyAgICAgICAgICAgICIjLCMjMCIsICIjLCMjMCIsCisgICAgICAgICAgICAiIywwMDAiLCAiIywwMDAiLAorICAgICAgICAgICAgIjAsMDAwIiwgIiMwLDAwMCIsCisgICAgICAgICAgICAiMDAsMDAwIiwgIiMwMCwwMDAiLAorICAgICAgICAgICAgIjAwMCwwMDAiLCAiIywwMDAsMDAwIiwKKyAgICAgICAgICAgICIwLDAwMCwwMDAsMDAwLDAwMC4wMDAwIiwgIiMwLDAwMCwwMDAsMDAwLDAwMC4wMDAwIiwgLy8gUmVwb3J0ZWQKKyAgICAgICAgfTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0yKSB7CisgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoREFUQVtpXSk7CisgICAgICAgICAgICBTdHJpbmcgcyA9IGRmLnRvUGF0dGVybigpOworICAgICAgICAgICAgaWYgKCFzLmVxdWFscyhEQVRBW2krMV0pKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBEQVRBW2ldICsgIiAtPiAiICsgcyArICIsIHdhbnQgIiArIERBVEFbaSsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNpbWFsRm9ybWF0IGlzIGluY29ycmVjdGx5IHJvdW5kaW5nIG51bWJlcnMgbGlrZSAxLjI1MDEgdG8gMS4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNzk4MTgoKSB7CisgICAgICAgIFN0cmluZyBEQVRBW10gPSB7CisgICAgICAgICAgICAvLyBJbnB1dCAgUGF0dGVybiAgRXhwZWN0ZWQgb3V0cHV0CisgICAgICAgICAgICAiMS4yNTExIiwgIiMuIyIsICAgIjEuMyIsCisgICAgICAgICAgICAiMS4yNTAxIiwgIiMuIyIsICAgIjEuMyIsCisgICAgICAgICAgICAiMC45OTk5IiwgIiMiLCAgICAgIjEiLAorICAgICAgICB9OworICAgICAgICBEZWNpbWFsRm9ybWF0IGZtdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjIiwKKyAgICAgICAgICAgICAgICBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLlVTKSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MykgeworICAgICAgICAgICAgZG91YmxlIGluID0gRG91YmxlLnZhbHVlT2YoREFUQVtpXSkuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIFN0cmluZyBwYXQgPSBEQVRBW2krMV07CisgICAgICAgICAgICBTdHJpbmcgZXhwID0gREFUQVtpKzJdOworICAgICAgICAgICAgZm10LmFwcGx5UGF0dGVybihwYXQpOworICAgICAgICAgICAgU3RyaW5nIG91dCA9IGZtdC5mb3JtYXQoaW4pOworICAgICAgICAgICAgaWYgKG91dC5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogIiArIGluICsgIiB4ICIgKyBwYXQgKyAiID0gIiArIG91dCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgaW4gKyAiIHggICIgKyBwYXQgKyAiID0gIiArIG91dCArCisgICAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQgIiArIGV4cCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE4NTc2MSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICBPYmplY3RPdXRwdXRTdHJlYW0gb29zID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShiYW9zKTsKKyAgICAgICAgCisgICAgICAgIE51bWJlckZvcm1hdCBuZiA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworCisJLy8gU2V0IHNwZWNpYWwgdmFsdWVzIHdlIGFyZSBnb2luZyB0byBzZWFyY2ggZm9yIGluIHRoZSBvdXRwdXQgYnl0ZSBzdHJlYW0KKwkvLyBUaGVzZSBhcmUgYWxsIGxlZ2FsIHZhbHVlcy4KKyAgICAgICAgbmYuc2V0TWluaW11bUludGVnZXJEaWdpdHMoMHgxMTEpOyAvLyBLZWVwIHVuZGVyIDMwOQorICAgICAgICBuZi5zZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygweDExMik7IC8vIEtlZXAgdW5kZXIgMzA5CisgICAgICAgIG5mLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygweDExMyk7IC8vIEtlZXAgdW5kZXIgMzQwCisgICAgICAgIG5mLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cygweDExNCk7IC8vIEtlZXAgdW5kZXIgMzQwCisgICAgICAgIAorICAgICAgICBvb3Mud3JpdGVPYmplY3QobmYpOworICAgICAgICBvb3MuZmx1c2goKTsKKyAgICAgICAgYmFvcy5jbG9zZSgpOworICAgICAgICAKKyAgICAgICAgYnl0ZVtdIGJ5dGVzID0gYmFvcy50b0J5dGVBcnJheSgpOworCisJLy8gU2NhbiBmb3IgbG9jYXRpb25zIG9mIG1pbi9tYXggaW50L2ZyYWN0IHZhbHVlcyBpbiB0aGUgYnl0ZSBhcnJheS4KKwkvLyBBdCB0aGUgbW9tZW50IChJQ1U0SiAyLjEpLCB0aGVyZSBpcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiBlYWNoIHRhcmdldCBwYWlyCisgICAgICAgIC8vIGluIHRoZSBieXRlIHN0cmVhbSwgc28gYXNzdW1lIGZpcnN0IG1hdGNoIGlzIGl0LiAgTm90ZSB0aGlzIGlzIG5vdCBlbnRpcmVseQorCS8vIGZhaWxzYWZlLCBhbmQgbmVlZHMgdG8gYmUgY2hlY2tlZCBpZiB3ZSBjaGFuZ2UgdGhlIHBhY2thZ2Ugb3Igc3RydWN0dXJlIG9mCisJLy8gdGhpcyBjbGFzcy4KKwkvLyBDdXJyZW50IHBvc2l0aW9ucyBhcmUgODkwLCA4ODAsIDg4NiwgODc2CisJaW50W10gb2Zmc2V0cyA9IG5ldyBpbnRbNF07CisJZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyArK2kpIHsKKwkgICAgaWYgKGJ5dGVzW2ldID09IDB4MDEpIHsgLy8gaGlnaCBieXRlCisJCWZvciAoaW50IGogPSAwOyBqIDwgb2Zmc2V0cy5sZW5ndGg7ICsraikgeworCQkgICAgaWYgKChvZmZzZXRzW2pdID09IDApICYmIChieXRlc1tpKzFdID09ICgweDExICsgaikpKSB7IC8vIGxvdyBieXRlCisJCQlvZmZzZXRzW2pdID0gaTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisKKyAgICAgICAgeworICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2lzID0gbmV3IE9iamVjdElucHV0U3RyZWFtKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShieXRlcykpOworICAgICAgICAgICAgT2JqZWN0IG8gPSBvaXMucmVhZE9iamVjdCgpOworICAgICAgICAgICAgb2lzLmNsb3NlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbmYuZXF1YWxzKG8pKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWw6IERhdGVGb3JtYXQgc2VyaWFsaXphdGlvbi9lcXVhbGl0eSBidWciKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIkRhdGVGb3JtYXQgc2VyaWFsaXphdGlvbi9lcXVhbGl0eSBpcyBPS0FZLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKwkvLyBDaGFuZ2UgdGhlIHZhbHVlcyBpbiB0aGUgYnl0ZSBzdHJlYW0gc28gdGhhdCBtaW4gPiBtYXguCisJLy8gTnVtYmVyZm9ybWF0IHNob3VsZCBjYXRjaCB0aGlzIGFuZCB0aHJvdyBhbiBleGNlcHRpb24uCisJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgKytpKSB7CisJICAgIGJ5dGVzW29mZnNldHNbaV1dID0gKGJ5dGUpKDQgLSBpKTsKKwl9CisKKyAgICAgICAgeworICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2lzID0gbmV3IE9iamVjdElucHV0U3RyZWFtKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShieXRlcykpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBOdW1iZXJGb3JtYXQgZm9ybWF0ID0gKE51bWJlckZvcm1hdCkgb2lzLnJlYWRPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiZm9ybWF0OiAiICsgZm9ybWF0LmZvcm1hdCgxMjM0LjU2KSk7IC8vZml4ICJUaGUgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZCIKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogRGVzZXJpYWxpemVkIGJvZ3VzIE51bWJlckZvcm1hdCB3aXRoIG1pblhEaWdpdHMgPiBtYXhYRGlnaXRzIik7CisgICAgICAgICAgICB9IGNhdGNoIChJbnZhbGlkT2JqZWN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCS8vIFNldCB2YWx1ZXMgc28gdGhleSBhcmUgdG9vIGhpZ2gsIGJ1dCBtaW4gPD0gbWF4CisJLy8gRm9ybWF0IHNob3VsZCBwYXNzIHRoZSBtaW48PSBtYXggdGVzdCwgYW5kIERlY2ltYWxGb3JtYXQgc2hvdWxkIHJlc2V0IHRvIGN1cnJlbnQgbWF4aW11bQorCS8vIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIHN0cmVhbWVkIG91dCBiZWZvcmUgdGhlIG1heGltdW1zIHdlcmUgaW1wb3NlZCkuCisJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgKytpKSB7CisJICAgIGJ5dGVzW29mZnNldHNbaV1dID0gNDsKKwl9CisKKyAgICAgICAgeworICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2lzID0gbmV3IE9iamVjdElucHV0U3RyZWFtKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShieXRlcykpOworICAgICAgICAgICAgTnVtYmVyRm9ybWF0IGZvcm1hdCA9IChOdW1iZXJGb3JtYXQpIG9pcy5yZWFkT2JqZWN0KCk7CisgICAgICAgICAgICAvL0ZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbgorICAgICAgICAgICAgaWYgKChmb3JtYXQuZ2V0TWF4aW11bUludGVnZXJEaWdpdHMoKSAhPSAzMDkpIAorICAgICAgICAgICAgICAgIHx8IGZvcm1hdC5nZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSAhPSAzNDApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogRGVzZXJpYWxpemVkIGJvZ3VzIE51bWJlckZvcm1hdCB3aXRoIHZhbHVlcyBvdXQgb2YgcmFuZ2UsIiArCisJCQkJCSAgIiBpbnRNaW46ICIgKyBmb3JtYXQuZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKSArCisJCQkJCSAgIiBpbnRNYXg6ICIgKyBmb3JtYXQuZ2V0TWF4aW11bUludGVnZXJEaWdpdHMoKSArCisJCQkJCSAgIiBmcmFjTWluOiAiICsgZm9ybWF0LmdldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpICsKKwkJCQkJICAiIGZyYWNNYXg6ICIgKyBmb3JtYXQuZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6IERpZ2l0IGNvdW50IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBTb21lIERlY2ltYWxGb3JtYXRTeW1ib2xzIGNoYW5nZXMgYXJlIG5vdCBwaWNrZWQgdXAgYnkgRGVjaW1hbEZvcm1hdC4KKyAgICAgKiBUaGlzIGluY2x1ZGVzIHRoZSBtaW51cyBzaWduLCBjdXJyZW5jeSBzeW1ib2wsIGludGVybmF0aW9uYWwgY3VycmVuY3kKKyAgICAgKiBzeW1ib2wsIHBlcmNlbnQsIGFuZCBwZXJtaWxsZS4gIFRoaXMgaXMgZmlsZWQgYXMgYnVncyA0MjEyMDcyIGFuZAorICAgICAqIDQyMTIwNzMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQyMTIwNzIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW0gPSBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLlVTKTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIyIsIHN5bSk7CisKKyAgICAgICAgc3ltLnNldE1pbnVzU2lnbignXicpOworICAgICAgICBmbXQuc2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoc3ltKTsKKyAgICAgICAgaWYgKCFmbXQuZm9ybWF0KC0xKS5lcXVhbHMoIl4xIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAtMSB4IChtaW51cz1eKSAtPiAiICsgZm10LmZvcm1hdCgtMSkgKworICAgICAgICAgICAgICAgICAgIiwgZXhwIF4xIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmbXQuZ2V0TmVnYXRpdmVQcmVmaXgoKS5lcXVhbHMoIl4iKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IChtaW51cz1eKS5nZXROZWdhdGl2ZVByZWZpeCAtPiAiICsKKyAgICAgICAgICAgICAgICAgIGZtdC5nZXROZWdhdGl2ZVByZWZpeCgpICsgIiwgZXhwIF4iKTsKKyAgICAgICAgfQorICAgICAgICBzeW0uc2V0TWludXNTaWduKCctJyk7CisKKyAgICAgICAgZm10LmFwcGx5UGF0dGVybigiIyUiKTsKKyAgICAgICAgc3ltLnNldFBlcmNlbnQoJ14nKTsKKyAgICAgICAgZm10LnNldERlY2ltYWxGb3JtYXRTeW1ib2xzKHN5bSk7CisgICAgICAgIGlmICghZm10LmZvcm1hdCgwLjI1KS5lcXVhbHMoIjI1XiIpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogMC4yNSB4IChwZXJjZW50PV4pIC0+ICIgKyBmbXQuZm9ybWF0KDAuMjUpICsKKyAgICAgICAgICAgICAgICAgICIsIGV4cCAyNV4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZtdC5nZXRQb3NpdGl2ZVN1ZmZpeCgpLmVxdWFscygiXiIpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogKHBlcmNlbnQ9XikuZ2V0UG9zaXRpdmVTdWZmaXggLT4gIiArCisgICAgICAgICAgICAgICAgICBmbXQuZ2V0UG9zaXRpdmVTdWZmaXgoKSArICIsIGV4cCBeIik7CisgICAgICAgIH0KKyAgICAgICAgc3ltLnNldFBlcmNlbnQoJyUnKTsKKyAgICAgICAgCisgICAgICAgIGZtdC5hcHBseVBhdHRlcm4oIiNcdTIwMzAiKTsKKyAgICAgICAgc3ltLnNldFBlck1pbGwoJ14nKTsKKyAgICAgICAgZm10LnNldERlY2ltYWxGb3JtYXRTeW1ib2xzKHN5bSk7CisgICAgICAgIGlmICghZm10LmZvcm1hdCgwLjI1KS5lcXVhbHMoIjI1MF4iKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IDAuMjUgeCAocGVybWlsbD1eKSAtPiAiICsgZm10LmZvcm1hdCgwLjI1KSArCisgICAgICAgICAgICAgICAgICAiLCBleHAgMjUwXiIpOworICAgICAgICB9CisgICAgICAgIGlmICghZm10LmdldFBvc2l0aXZlU3VmZml4KCkuZXF1YWxzKCJeIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAocGVybWlsbD1eKS5nZXRQb3NpdGl2ZVN1ZmZpeCAtPiAiICsKKyAgICAgICAgICAgICAgICAgIGZtdC5nZXRQb3NpdGl2ZVN1ZmZpeCgpICsgIiwgZXhwIF4iKTsKKyAgICAgICAgfQorICAgICAgICBzeW0uc2V0UGVyTWlsbCgnXHUyMDMwJyk7CisKKyAgICAgICAgZm10LmFwcGx5UGF0dGVybigiXHUwMEE0Iy4wMCIpOworICAgICAgICBzeW0uc2V0Q3VycmVuY3lTeW1ib2woInVzZCIpOworICAgICAgICBmbXQuc2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoc3ltKTsKKyAgICAgICAgaWYgKCFmbXQuZm9ybWF0KDEyLjUpLmVxdWFscygidXNkMTIuNTAiKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IDEyLjUgeCAoY3VycmVuY3k9dXNkKSAtPiAiICsgZm10LmZvcm1hdCgxMi41KSArCisgICAgICAgICAgICAgICAgICAiLCBleHAgdXNkMTIuNTAiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZtdC5nZXRQb3NpdGl2ZVByZWZpeCgpLmVxdWFscygidXNkIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAoY3VycmVuY3k9dXNkKS5nZXRQb3NpdGl2ZVByZWZpeCAtPiAiICsKKyAgICAgICAgICAgICAgICAgIGZtdC5nZXRQb3NpdGl2ZVByZWZpeCgpICsgIiwgZXhwIHVzZCIpOworICAgICAgICB9CisgICAgICAgIHN5bS5zZXRDdXJyZW5jeVN5bWJvbCgiJCIpOworCisgICAgICAgIGZtdC5hcHBseVBhdHRlcm4oIlx1MDBBNFx1MDBBNCMuMDAiKTsKKyAgICAgICAgc3ltLnNldEludGVybmF0aW9uYWxDdXJyZW5jeVN5bWJvbCgiRE9MIik7CisgICAgICAgIGZtdC5zZXREZWNpbWFsRm9ybWF0U3ltYm9scyhzeW0pOworICAgICAgICBpZiAoIWZtdC5mb3JtYXQoMTIuNSkuZXF1YWxzKCJET0wxMi41MCIpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogMTIuNSB4IChpbnRsY3VycmVuY3k9RE9MKSAtPiAiICsgZm10LmZvcm1hdCgxMi41KSArCisgICAgICAgICAgICAgICAgICAiLCBleHAgRE9MMTIuNTAiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZtdC5nZXRQb3NpdGl2ZVByZWZpeCgpLmVxdWFscygiRE9MIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAoaW50bGN1cnJlbmN5PURPTCkuZ2V0UG9zaXRpdmVQcmVmaXggLT4gIiArCisgICAgICAgICAgICAgICAgICBmbXQuZ2V0UG9zaXRpdmVQcmVmaXgoKSArICIsIGV4cCBET0wiKTsKKyAgICAgICAgfQorICAgICAgICBzeW0uc2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKCJVU0QiKTsKKworICAgICAgICBpZiAoVmVyc2lvbkluZm8uSUNVX1ZFUlNJT04gPT0gVmVyc2lvbkluZm8uZ2V0SW5zdGFuY2UoMiwyKSkgeworICAgICAgICAgICAgLy8gYnVnIGluIDIuMiB0aGF0IGZhaWxzIHRoaXMgdGVzdAorICAgICAgICAgICAgLy8gdG8gYmUgZml4ZWQgaW4gdGhlIGxhdGVyIHZlcnNpb25zCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuICAgICAgICBUZXN0IHNraXBwZWQgZm9yIHJlbGVhc2UgMi4yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHRoZSBwYXR0ZXJuIGxvZ2ljIGhhcyBjaGFuZ2VkLCBtYWtlIHN1cmUgdGhhdCBwYXR0ZXJucyByb3VuZAorICAgICAgICAvLyB0cmlwIHByb3Blcmx5LiAgVGVzdCBzdHJlYW0gaW4vb3V0IGludGVncml0eSB0b28uCisgICAgICAgIExvY2FsZVtdIGF2YWlsID0gTnVtYmVyRm9ybWF0LmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGF2YWlsLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8MzsgKytqKSB7CisgICAgICAgICAgICAgICAgTnVtYmVyRm9ybWF0IG5mOworICAgICAgICAgICAgICAgIHN3aXRjaCAoaikgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgbmYgPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoYXZhaWxbaV0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIG5mID0gTnVtYmVyRm9ybWF0LmdldEN1cnJlbmN5SW5zdGFuY2UoYXZhaWxbaV0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBuZiA9IE51bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UoYXZhaWxbaV0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IChEZWNpbWFsRm9ybWF0KSBuZjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUZXN0IHRvUGF0dGVybi9hcHBseVBhdHRlcm4gcm91bmQgdHJpcAorICAgICAgICAgICAgICAgIFN0cmluZyBwYXQgPSBkZi50b1BhdHRlcm4oKTsKKyAgICAgICAgICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW1iID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKGF2YWlsW2ldKTsKKyAgICAgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGYyID0gbmV3IERlY2ltYWxGb3JtYXQocGF0LCBzeW1iKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRmLmVxdWFscyhmMikpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBhdmFpbFtpXSArICIgIyIgKyBqICsgIiAtPiBcIiIgKyBwYXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgLT4gXCIiICsgZjIudG9QYXR0ZXJuKCkgKyAnIicpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRlc3QgdG9Mb2NhbGl6ZWRQYXR0ZXJuL2FwcGx5TG9jYWxpemVkUGF0dGVybiByb3VuZCB0cmlwCisgICAgICAgICAgICAgICAgcGF0ID0gZGYudG9Mb2NhbGl6ZWRQYXR0ZXJuKCk7CisgICAgICAgICAgICAgICAgZjIuYXBwbHlMb2NhbGl6ZWRQYXR0ZXJuKHBhdCk7CisgICAgICAgICAgICAgICAgaWYgKCFkZi5lcXVhbHMoZjIpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgYXZhaWxbaV0gKyAiICMiICsgaiArICIgLT4gbG9jYWxpemVkIFwiIiArIHBhdCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiAtPiBcIiIgKyBmMi50b0xvY2FsaXplZFBhdHRlcm4oKSArICciJyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVGVzdCB3cml0ZU9iamVjdC9yZWFkT2JqZWN0IHJvdW5kIHRyaXAKKyAgICAgICAgICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgICAgICAgICBPYmplY3RPdXRwdXRTdHJlYW0gb29zID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShiYW9zKTsKKyAgICAgICAgICAgICAgICBvb3Mud3JpdGVPYmplY3QoZGYpOworICAgICAgICAgICAgICAgIG9vcy5mbHVzaCgpOworICAgICAgICAgICAgICAgIGJhb3MuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBiYW9zLnRvQnl0ZUFycmF5KCk7CisgICAgICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2lzID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdElucHV0U3RyZWFtKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShieXRlcykpOworICAgICAgICAgICAgICAgIGYyID0gKERlY2ltYWxGb3JtYXQpIG9pcy5yZWFkT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFkZi5lcXVhbHMoZjIpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBTdHJlYW0gaW4vb3V0ICIgKyBhdmFpbFtpXSArICIgLT4gXCIiICsgcGF0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIC0+ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAoZjIgIT0gbnVsbCA/ICgiXCIiK2YyLnRvUGF0dGVybigpKyciJykgOiAibnVsbCIpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEBzaW5jZSBJQ1UgMi40CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMsIHdoZW4gcXVvdGVkIGluIGEgc3VmZml4IG9yCisgICAgICAgIC8vIHByZWZpeCwgbG9zZSB0aGVpciBzcGVjaWFsIG1lYW5pbmcuCisgICAgICAgIGNoYXJbXSBTUEVDSUFMUyA9IHsgJzAnLCAnLCcsICcuJywgJ1x1MjAzMCcsICclJywgJyMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7JywgJ0UnLCAnKicsICcrJywgJy0nIH07CisgICAgICAgIHN5bSA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpOworICAgICAgICBmb3IgKGludCBqPTA7IGo8U1BFQ0lBTFMubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGNoYXIgc3BlY2lhbCA9IFNQRUNJQUxTW2pdOworICAgICAgICAgICAgU3RyaW5nIHBhdCA9ICInIiArIHNwZWNpYWwgKyAiJyMwJyIgKyBzcGVjaWFsICsgIiciOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBmbXQgPSBuZXcgRGVjaW1hbEZvcm1hdChwYXQsIHN5bSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBhdDIgPSBmbXQudG9QYXR0ZXJuKCk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXQuZXF1YWxzKHBhdDIpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBQYXR0ZXJuIFwiIiArIHBhdCArICJcIiA9PiB0b1BhdHRlcm4oKSA9PiBcIiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICBwYXQyICsgIlwiIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFN0cmluZyBzID0gZm10LmZvcm1hdCgxMjMpOworICAgICAgICAgICAgICAgIFN0cmluZyBleHAgPSAiIiArIHNwZWNpYWwgKyAiMTIzIiArIHNwZWNpYWw7CisgICAgICAgICAgICAgICAgaWYgKCFzLmVxdWFscyhleHApKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAxMjMgeCBcIiIgKyBwYXQgKyAiXCIgPT4gXCIiICsgcyArICJcIiwgZXhwIFwiIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cCArICJcIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IFBhdHRlcm4gXCIiICsgcGF0ICsgIlwiID0+ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNpbWFsRm9ybWF0LnBhcnNlKCkgZmFpbHMgZm9yIG11bGlwbGllcnMgMl5uLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MjE2NzQyKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQgPSAoRGVjaW1hbEZvcm1hdCkgTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGxvbmdbXSBEQVRBID0geyBMb25nLk1JTl9WQUxVRSwgTG9uZy5NQVhfVkFMVUUsIC0xMDAwMDAwMDBMLCAxMDAwMDAwMDBMfTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHIgPSBMb25nLnRvU3RyaW5nKERBVEFbaV0pOworICAgICAgICAgICAgZm9yIChpbnQgbSA9IDE7IG0gPD0gMTAwOyBtKyspIHsKKyAgICAgICAgICAgICAgICBmbXQuc2V0TXVsdGlwbGllcihtKTsKKyAgICAgICAgICAgICAgICBsb25nIG4gPSAoKE51bWJlcikgZm10LnBhcnNlKHN0cikpLmxvbmdWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChuID4gMCAhPSBEQVRBW2ldID4gMCkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiXCIiICsgc3RyICsgIlwiIHBhcnNlKHggIiArIGZtdC5nZXRNdWx0aXBsaWVyKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiKSA9PiAiICsgbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjaW1hbEZvcm1hdCBmb3JtYXRzIDEuMDAxIHRvICIxLjAwIiBpbnN0ZWFkIG9mICIxIiB3aXRoIDIgZnJhY3Rpb24KKyAgICAgKiBkaWdpdHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQyMTc2NjEoKSB7CisgICAgICAgIE9iamVjdFtdIERBVEEgPSB7CisgICAgICAgICAgICBuZXcgRG91YmxlKDAuMDAxKSwgIjAiLAorICAgICAgICAgICAgbmV3IERvdWJsZSgxLjAwMSksICIxIiwKKyAgICAgICAgICAgIG5ldyBEb3VibGUoMC4wMDYpLCAiMC4wMSIsCisgICAgICAgICAgICBuZXcgRG91YmxlKDEuMDA2KSwgIjEuMDEiLAorICAgICAgICB9OworICAgICAgICBOdW1iZXJGb3JtYXQgZm10ID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgICAgICAgIGZtdC5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoMik7IAorICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgIFN0cmluZyBzID0gZm10LmZvcm1hdCgoKERvdWJsZSkgREFUQVtpXSkuZG91YmxlVmFsdWUoKSk7CisgICAgICAgICAgICBpZiAoIXMuZXF1YWxzKERBVEFbaSsxXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogR290ICIgKyBzICsgIiwgZXhwICIgKyBEQVRBW2krMV0pOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA0MjQzMDExOiBGb3JtYXR0aW5nIC41IHJvdW5kcyB0byAiMSIgaW5zdGVhZCBvZiAiMCIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDI0MzAxMSgpIHsKKyAgICAgICAgZG91YmxlIERBVEFbXSA9IHswLjUsIDEuNSwgMi41LCAzLjUsIDQuNX07CisgICAgICAgIFN0cmluZyBFWFBFQ1RFRFtdID0geyIwLiIsICIyLiIsICIyLiIsICI0LiIsICI0LiJ9OworICAgICAgICAKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBmb3JtYXQgPSBuZXcgRGVjaW1hbEZvcm1hdCgiMC4iKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBEQVRBLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZm9ybWF0LmZvcm1hdChEQVRBW2ldKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuZXF1YWxzKEVYUEVDVEVEW2ldKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPSzogZ290ICIgKyByZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogZ290ICIgKyByZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDQyNDMxMDg6IGZvcm1hdCgwLjApIGdpdmVzICIwLjEiIGlmIHByZWNlZGVkIGJ5IHBhcnNlKCI5OS45OSIpCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQyNDMxMDgoKSB7CisgICAgICAgIERlY2ltYWxGb3JtYXQgZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjLiMiKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGYuZm9ybWF0KDAuMCk7CisgICAgICAgIGlmIChyZXN1bHQuZXF1YWxzKCIwIikpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPSzogZ290ICIgKyByZXN1bHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdvdCAiICsgcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgZG91YmxlIGRSZXN1bHQgPSBmLnBhcnNlKCI5OS45OSIpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBpZiAoZFJlc3VsdCA9PSA5OS45OSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPSzogZ290ICIgKyBkUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdvdCAiICsgZFJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJDYXVnaHQgYSBQYXJzZUV4Y2VwdGlvbjoiKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gZi5mb3JtYXQoMC4wKTsKKyAgICAgICAgaWYgKHJlc3VsdC5lcXVhbHMoIjAiKSkgeworICAgICAgICAgICAgbG9nbG4oIk9LOiBnb3QgIiArIHJlc3VsdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogZ290ICIgKyByZXN1bHQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDQzMzAzNzc6IERlY2ltYWxGb3JtYXQgZW5naW5lZXJpbmcgbm90YXRpb24gZ2l2ZXMgaW5jb3JyZWN0IHJlc3VsdHMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0NDMzMDM3NygpIHsKKyAgICAgICAgLyoKKyAgICAgICAgZG91YmxlW10gaW5wdXQgPSB7NTAwMC4wLCA1MDAuMCwgNTAuMCwgNS4wLCAwLjUsIDAuMDUsIDAuMDA1LCAwLjAwMDUsCisgICAgICAgICAgICAgICA1MDUwLjAsIDUwNS4wLCA1MC41LCA1LjA1LCAwLjUwNSwgMC4wNTA1LCAwLjAwNTA1LCAwLjAwMDUwNX07CisgICAgICAgIFN0cmluZ1tdIHBhdHRlcm4gPSB7IjAwMC4jRTAiLCAiIyMwLiNFMCIsICIjMDAuI0UwIn07CisgICAgICAgIFN0cmluZ1tdW10gZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAvLyBpdCdzIHF1ZXN0aW9uYWJsZSB3aGV0aGVyICIjMDAuI0UwIiBzaG91bGQgcmVzdWx0IGluIHBvc3QtZGVjaW1hbAorICAgICAgICAgICAgLy8gemVyb2VzLCBpLmUuLCB3aGV0aGVyICI1LjBFMyIsICI1LjBFMCIsICI1LjBFLTMiIGFyZSByZWFsbHkgZ29vZAorICAgICAgICAgICAgeyI1MDBFMSIsICI1RTMiLCAiNS4wRTMifSwKKyAgICAgICAgICAgIHsiNTAwRTAiLCAiNTAwRTAiLCAiNTAwRTAifSwKKyAgICAgICAgICAgIHsiNTAwRS0xIiwgIjUwRTAiLCAiNTBFMCJ9LAorICAgICAgICAgICAgeyI1MDBFLTIiLCAiNUUwIiwgIjUuMEUwIn0sCisgICAgICAgICAgICB7IjUwMEUtMyIsICI1MDBFLTMiLCAiNTAwRS0zIn0sCisgICAgICAgICAgICB7IjUwMEUtNCIsICI1MEUtMyIsICI1MEUtMyJ9LAorICAgICAgICAgICAgeyI1MDBFLTUiLCAiNUUtMyIsICI1LjBFLTMifSwKKyAgICAgICAgICAgIHsiNTAwRS02IiwgIjUwMEUtNiIsICI1MDBFLTYifSwKKyAgICAgICAgICAgIHsiNTA1RTEiLCAiNS4wNUUzIiwgIjUuMDVFMyJ9LAorICAgICAgICAgICAgeyI1MDVFMCIsICI1MDVFMCIsICI1MDVFMCJ9LAorICAgICAgICAgICAgeyI1MDVFLTEiLCAiNTAuNUUwIiwgIjUwLjVFMCJ9LAorICAgICAgICAgICAgeyI1MDVFLTIiLCAiNS4wNUUwIiwgIjUuMDVFMCJ9LAorICAgICAgICAgICAgeyI1MDVFLTMiLCAiNTA1RS0zIiwgIjUwNUUtMyJ9LAorICAgICAgICAgICAgeyI1MDVFLTQiLCAiNTAuNUUtMyIsICI1MC41RS0zIn0sCisgICAgICAgICAgICB7IjUwNUUtNSIsICI1LjA1RS0zIiwgIjUuMDVFLTMifSwKKyAgICAgICAgICAgIHsiNTA1RS02IiwgIjUwNUUtNiIsICI1MDVFLTYifQorICAgICAgICB9OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhdHRlcm4ubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGZvcm1hdCA9IG5ldyBEZWNpbWFsRm9ybWF0KHBhdHRlcm5bal0pOworICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBmb3JtYXQuZm9ybWF0KGlucHV0W2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5lcXVhbHMoZXhwZWN0ZWRbaV1bal0pKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBpbnB1dDogIiArIGlucHV0W2ldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBwYXR0ZXJuOiAiICsgcGF0dGVybltqXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFtpXVtqXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZ290OiAiICsgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogNDIzMzg0MDogTnVtYmVyRm9ybWF0IGRvZXMgbm90IHJvdW5kIGNvcnJlY3RseQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRlc3Q0MjMzODQwKCkgeworICAgICAgICBmbG9hdCBmID0gMC4wMDk5ZjsKKworICAgICAgICBOdW1iZXJGb3JtYXQgbmYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiMC4jIyIsIG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpKTsKKwluZi5zZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoMik7CisJCisJU3RyaW5nIHJlc3VsdCA9IG5mLmZvcm1hdChmKTsKKwkKKwlpZiAoIXJlc3VsdC5lcXVhbHMoIjAuMDEiKSkgeworCSAgICBlcnJsbigiRkFJTDogaW5wdXQ6ICIgKyBmICsgIiwgZXhwZWN0ZWQ6IDAuMDEsIGdvdDogIiArIHJlc3VsdCk7CisJfQorICAgIH0KK30KKworY2xhc3MgbXlmb3JtYXQgaW1wbGVtZW50cyBTZXJpYWxpemFibGUKK3sKKyAgICBEYXRlRm9ybWF0IF9kYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsKKworICAgIHB1YmxpYyBTdHJpbmcgTm93KCkKKyAgICB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbGVuZGFyID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIERhdGUgdCA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKyAgICAgICAgU3RyaW5nIG5vd1N0ciA9IF9kYXRlRm9ybWF0LmZvcm1hdCh0KTsKKyAgICAgICAgcmV0dXJuIG5vd1N0cjsKKyAgICB9Cit9CisKK2NsYXNzIE15TnVtYmVyRm9ybWF0VGVzdCBleHRlbmRzIE51bWJlckZvcm1hdCB7CisgICAgcHVibGljIFN0cmluZ0J1ZmZlciBmb3JtYXQoZG91YmxlIG51bWJlciwgU3RyaW5nQnVmZmVyIHRvQXBwZW5kVG8sIEZpZWxkUG9zaXRpb24gcG9zKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICB9CisgICAgcHVibGljIFN0cmluZ0J1ZmZlciBmb3JtYXQobG9uZyBudW1iZXIsU3RyaW5nQnVmZmVyIHRvQXBwZW5kVG8sIEZpZWxkUG9zaXRpb24gcG9zKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICB9CisgICAgcHVibGljIE51bWJlciBwYXJzZShTdHJpbmcgdGV4dCwgUGFyc2VQb3NpdGlvbiBwYXJzZVBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcigwKTsKKyAgICB9CisgICAgcHVibGljIFN0cmluZ0J1ZmZlciBmb3JtYXQoQmlnRGVjaW1hbCBudW1iZXIsIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLCBGaWVsZFBvc2l0aW9uIHBvcykgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgfQorICAgIHB1YmxpYyBTdHJpbmdCdWZmZXIgZm9ybWF0KEJpZ0ludGVnZXIgbnVtYmVyLCBTdHJpbmdCdWZmZXIgdG9BcHBlbmRUbywgRmllbGRQb3NpdGlvbiBwb3MpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIH0KKyAgICBwdWJsaWMgU3RyaW5nQnVmZmVyIGZvcm1hdChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbnVtYmVyLCBTdHJpbmdCdWZmZXIgdG9BcHBlbmRUbywgRmllbGRQb3NpdGlvbiBwb3MpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9SYm5mUm91bmRUcmlwVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9SYm5mUm91bmRUcmlwVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZkZTc0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L1JibmZSb3VuZFRyaXBUZXN0LmphdmEKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvUmJuZlJvdW5kVHJpcFRlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8yMiAwMzo0MzozMiAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuUnVsZUJhc2VkTnVtYmVyRm9ybWF0OworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworCitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnRleHQuTnVtYmVyRm9ybWF0OworCitwdWJsaWMgY2xhc3MgUmJuZlJvdW5kVHJpcFRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisgICAgLyoqCisgICAgICogUHV0cyBhIGNvcHlyaWdodCBpbiB0aGUgLmNsYXNzIGZpbGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0Tm90aWNlCisgICAgICAgID0gIkNvcHlyaWdodCBcdTAwYTkxOTk3LTE5OTggSUJNIENvcnAuICBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFJibmZSb3VuZFRyaXBUZXN0IHRlc3QgPSBuZXcgUmJuZlJvdW5kVHJpcFRlc3QoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGVzdC5ydW4oYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGlyZSB0ZXN0IGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGFuIGV4aGF1c3RpdmUgcm91bmQtdHJpcCB0ZXN0IG9uIHRoZSBFbmdsaXNoIHNwZWxsb3V0IHJ1bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEVuZ2xpc2hTcGVsbG91dFJUKCkgeworICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoTG9jYWxlLlVTLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LlNQRUxMT1VUKTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCAtMTIzNDU2NzgsIDEyMzQ1Njc4KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGFuIGV4aGF1c3RpdmUgcm91bmQtdHJpcCB0ZXN0IG9uIHRoZSBkdXJhdGlvbi1mb3JtYXR0aW5nIHJ1bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdER1cmF0aW9uc1JUKCkgeworICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoTG9jYWxlLlVTLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LkRVUkFUSU9OKTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCAwLCAxMjM0NTY3OCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhbiBleGhhdXN0aXZlIHJvdW5kLXRyaXAgdGVzdCBvbiB0aGUgU3BhbmlzaCBzcGVsbG91dCBydWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RTcGFuaXNoU3BlbGxvdXRSVCgpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KG5ldyBMb2NhbGUoImVzIiwgImVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIiKSwgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LlNQRUxMT1VUKTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCAtMTIzNDU2NzgsIDEyMzQ1Njc4KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGFuIGV4aGF1c3RpdmUgcm91bmQtdHJpcCB0ZXN0IG9uIHRoZSBGcmVuY2ggc3BlbGxvdXQgcnVsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0RnJlbmNoU3BlbGxvdXRSVCgpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KExvY2FsZS5GUkFOQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQuU1BFTExPVVQpOworCisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIC0xMjM0NTY3OCwgMTIzNDU2NzgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBlcmZvcm0gYW4gZXhoYXVzdGl2ZSByb3VuZC10cmlwIHRlc3Qgb24gdGhlIFN3aXNzIEZyZW5jaCBzcGVsbG91dCBydWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RTd2lzc0ZyZW5jaFNwZWxsb3V0UlQoKSB7CisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChuZXcgTG9jYWxlKCJmciIsICJDSCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiIiksIFJ1bGVCYXNlZE51bWJlckZvcm1hdC5TUEVMTE9VVCk7CisKKyAgICAgICAgZG9UZXN0KGZvcm1hdHRlciwgLTEyMzQ1Njc4LCAxMjM0NTY3OCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhbiBleGhhdXN0aXZlIHJvdW5kLXRyaXAgdGVzdCBvbiB0aGUgSXRhbGlhbiBzcGVsbG91dCBydWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RJdGFsaWFuU3BlbGxvdXRSVCgpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KExvY2FsZS5JVEFMSUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LlNQRUxMT1VUKTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCAtOTk5OTk5LCA5OTk5OTkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBlcmZvcm0gYW4gZXhoYXVzdGl2ZSByb3VuZC10cmlwIHRlc3Qgb24gdGhlIEdlcm1hbiBzcGVsbG91dCBydWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RHZXJtYW5TcGVsbG91dFJUKCkgeworICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoTG9jYWxlLkdFUk1BTlksCisgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQuU1BFTExPVVQpOworCisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIDAsIDEyMzQ1Njc4KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGFuIGV4aGF1c3RpdmUgcm91bmQtdHJpcCB0ZXN0IG9uIHRoZSBTd2VkaXNoIHNwZWxsb3V0IHJ1bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFN3ZWRpc2hTcGVsbG91dFJUKCkgeworICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQobmV3IExvY2FsZSgic3YiLCAiU0UiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiIpLCBSdWxlQmFzZWROdW1iZXJGb3JtYXQuU1BFTExPVVQpOworCisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIDAsIDEyMzQ1Njc4KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGFuIGV4aGF1c3RpdmUgcm91bmQtdHJpcCB0ZXN0IG9uIHRoZSBEdXRjaCBzcGVsbG91dCBydWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3REdXRjaFNwZWxsb3V0UlQoKSB7CisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChuZXcgTG9jYWxlKCJubCIsICJOTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiIiksIFJ1bGVCYXNlZE51bWJlckZvcm1hdC5TUEVMTE9VVCk7CisKKyAgICAgICAgZG9UZXN0KGZvcm1hdHRlciwgLTEyMzQ1Njc4LCAxMjM0NTY3OCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhbiBleGhhdXN0aXZlIHJvdW5kLXRyaXAgdGVzdCBvbiB0aGUgSmFwYW5lc2Ugc3BlbGxvdXQgcnVsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SmFwYW5lc2VTcGVsbG91dFJUKCkgeworICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoTG9jYWxlLkpBUEFOLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LlNQRUxMT1VUKTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCAwLCAxMjM0NTY3OCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhbiBleGhhdXN0aXZlIHJvdW5kLXRyaXAgdGVzdCBvbiB0aGUgUnVzc2lhbiBzcGVsbG91dCBydWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RSdXNzaWFuU3BlbGxvdXRSVCgpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KG5ldyBMb2NhbGUoInJ1IiwgIlJVIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIiKSwgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LlNQRUxMT1VUKTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCAwLCAxMjM0NTY3OCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhbiBleGhhdXN0aXZlIHJvdW5kLXRyaXAgdGVzdCBvbiB0aGUgR3JlZWsgc3BlbGxvdXQgcnVsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0R3JlZWtTcGVsbG91dFJUKCkgeworICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQobmV3IExvY2FsZSgiZWwiLCAiR1IiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiIpLCBSdWxlQmFzZWROdW1iZXJGb3JtYXQuU1BFTExPVVQpOworCisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIDAsIDEyMzQ1Njc4KTsKKyAgICB9CisKKyAgICB2b2lkIGRvVGVzdChSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyLCAgbG9uZyBsb3dMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgbG9uZyBoaWdoTGltaXQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxvbmcgY291bnQgPSAwOworICAgICAgICAgICAgbG9uZyBpbmNyZW1lbnQgPSAxOworICAgICAgICAgICAgZm9yIChsb25nIGkgPSBsb3dMaW1pdDsgaSA8PSBoaWdoTGltaXQ7IGkgKz0gaW5jcmVtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvdW50ICUgMTAwMCA9PSAwKQorICAgICAgICAgICAgICAgICAgICBsb2dsbihMb25nLnRvU3RyaW5nKGkpKTsKKworICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhpKSA8IDUwMDApCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTWF0aC5hYnMoaSkgPCA1MDAwMDApCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudCA9IDI3Mzc7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnQgPSAyNjc0Mzc7CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGZvcm1hdHRlci5mb3JtYXQoaSk7CisgICAgICAgICAgICAgICAgbG9uZyBydCA9IGZvcm1hdHRlci5wYXJzZSh0ZXh0KS5sb25nVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmIChydCAhPSBpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJSb3VuZC10cmlwIGZhaWxlZDogIiArIGkgKyAiIC0+ICIgKyB0ZXh0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gIiArIHJ0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobG93TGltaXQgPCAwKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGQgPSAxLjIzNDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoZCA8IDEwMDApIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBmb3JtYXR0ZXIuZm9ybWF0KGQpOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgcnQgPSBmb3JtYXR0ZXIucGFyc2UodGV4dCkuZG91YmxlVmFsdWUoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocnQgIT0gZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIlJvdW5kLXRyaXAgZmFpbGVkOiAiICsgZCArICIgLT4gIiArIHRleHQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gIiArIHJ0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkICo9IDEwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJUZXN0IGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L1JibmZUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L1JibmZUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTg3OTA2MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9mb3JtYXQvUmJuZlRlc3QuamF2YQpAQCAtMCwwICsxLDc3MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9SYm5mVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzAyIDE3OjA5OjU4ICQgCisgKiAkUmV2aXNpb246IDEuMTQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuUnVsZUJhc2VkTnVtYmVyRm9ybWF0OworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworCitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnRleHQuTnVtYmVyRm9ybWF0OworCitwdWJsaWMgY2xhc3MgUmJuZlRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisgICAgLyoqCisgICAgICogUHV0cyBhIGNvcHlyaWdodCBpbiB0aGUgLmNsYXNzIGZpbGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0Tm90aWNlCisgICAgICAgID0gIkNvcHlyaWdodCBcdTAwYTkxOTk3LTE5OTkgSUJNIENvcnAuICBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFJibmZUZXN0IHRlc3QgPSBuZXcgUmJuZlRlc3QoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGVzdC5ydW4oYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGlyZSB0ZXN0IGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIGZyYWNSdWxlcyA9IAorICAgICAgICAiJW1haW46XG4iICsKKyAgICAgICAgLy8gdGhpcyBydWxlIGZvcm1hdHMgdGhlIG51bWJlciBpZiBpdCdzIDEgb3IgbW9yZS4gIEl0IGZvcm1hdHMKKyAgICAgICAgLy8gdGhlIGludGVncmFsIHBhcnQgdXNpbmcgYSBEZWNpbWFsRm9ybWF0ICgiIywjIzAiIHB1dHMKKyAgICAgICAgLy8gdGhvdXNhbmRzIHNlcGFyYXRvcnMgaW4gdGhlIHJpZ2h0IHBsYWNlcykgYW5kIHRoZSBmcmFjdGlvbmFsCisgICAgICAgIC8vIHBhcnQgdXNpbmcgJSVmcmFjLiAgSWYgdGhlcmUgaXMgbm8gZnJhY3Rpb25hbCBwYXJ0LCBpdAorICAgICAgICAvLyBqdXN0IHNob3dzIHRoZSBpbnRlZ3JhbCBwYXJ0LgorICAgICAgICAiICAgIHguMDogPCMsIyMwPFsgPiUlZnJhYz5dO1xuIiArCisgICAgICAgIC8vIHRoaXMgcnVsZSBmb3JtYXRzIHRoZSBudW1iZXIgaWYgaXQncyBiZXR3ZWVuIDAgYW5kIDEuICBJdAorICAgICAgICAvLyBzaG93cyBvbmx5IHRoZSBmcmFjdGlvbmFsIHBhcnQgKDAuNSBzaG93cyB1cCBhcyAiMS8yLCIgbm90CisgICAgICAgIC8vICIwIDEvMiIpCisgICAgICAgICIgICAgMC54OiA+JSVmcmFjPjtcbiIgKworICAgICAgICAvLyB0aGUgZnJhY3Rpb24gcnVsZSBzZXQuICBUaGlzIHdvcmtzIHRoZSBzYW1lIHdheSBhcyB0aGUgb25lIGluIHRoZQorICAgICAgICAvLyBwcmVjZWRpbmcgZXhhbXBsZTogV2UgbXVsdGlwbHkgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgbnVtYmVyCisgICAgICAgIC8vIGJlaW5nIGZvcm1hdHRlZCBieSBlYWNoIHJ1bGUncyBiYXNlIHZhbHVlIGFuZCB1c2UgdGhlIHJ1bGUgdGhhdAorICAgICAgICAvLyBwcm9kdWNlcyB0aGUgcmVzdWx0IGNsb3Nlc3QgdG8gMCAob3IgdGhlIGZpcnN0IHJ1bGUgdGhhdCBwcm9kdWNlcyAwKS4KKyAgICAgICAgLy8gU2luY2Ugd2Ugb25seSBwcm92aWRlIHJ1bGVzIGZvciB0aGUgbnVtYmVycyBmcm9tIDIgdG8gMTAsIHdlIGtub3cKKyAgICAgICAgLy8gd2UnbGwgZ2V0IGEgZnJhY3Rpb24gd2l0aCBhIGRlbm9taW5hdG9yIGJldHdlZW4gMiBhbmQgMTAuCisgICAgICAgIC8vICI8MDwiIGNhdXNlcyB0aGUgbnVtZXJhdG9yIG9mIHRoZSBmcmFjdGlvbiB0byBiZSBmb3JtYXR0ZWQKKyAgICAgICAgLy8gdXNpbmcgbnVtZXJhbHMKKyAgICAgICAgIiUlZnJhYzpcbiIgKworICAgICAgICAiICAgIDI6IDEvMjtcbiIgKworICAgICAgICAiICAgIDM6IDwwPC8zO1xuIiArCisgICAgICAgICIgICAgNDogPDA8LzQ7XG4iICsKKyAgICAgICAgIiAgICA1OiA8MDwvNTtcbiIgKworICAgICAgICAiICAgIDY6IDwwPC82O1xuIiArCisgICAgICAgICIgICAgNzogPDA8Lzc7XG4iICsKKyAgICAgICAgIiAgICA4OiA8MDwvODtcbiIgKworICAgICAgICAiICAgIDk6IDwwPC85O1xuIiArCisgICAgICAgICIgICAxMDogPDA8LzEwO1xuIjsKKworICAgIHN0YXRpYyB7CisgICAgICAgIC8vIG1vbmRvIGhhY2sKKwljaGFyW10gZnJhY1J1bGVzQXJyID0gZnJhY1J1bGVzLnRvQ2hhckFycmF5KCk7CisgICAgICAgIGludCBsZW4gPSBmcmFjUnVsZXNBcnIubGVuZ3RoOworICAgICAgICBpbnQgY2hhbmdlID0gMjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgY2hhciBjaCA9IGZyYWNSdWxlc0FycltpXTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgY2hhbmdlID0gMjsgLy8gY2hhbmdlIG9rCisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc6JykgeworICAgICAgICAgICAgICAgIGNoYW5nZSA9IDE7IC8vIGNoYW5nZSwgYnV0IG9uY2Ugd2UgaGl0IGEgbm9uLXNwYWNlIGNoYXIsIGRvbid0IGNoYW5nZQorICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hhbmdlICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZnJhY1J1bGVzQXJyW2ldID0gKGNoYXIpMHgyMDBlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoYW5nZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisJZnJhY1J1bGVzID0gbmV3IFN0cmluZyhmcmFjUnVsZXNBcnIpOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgZHVyYXRpb25JblNlY29uZHNSdWxlcyA9CisgICAgICAgIC8vIG1haW4gcnVsZSBzZXQgZm9yIGZvcm1hdHRpbmcgd2l0aCB3b3JkcworICAgICAgICAiJXdpdGgtd29yZHM6XG4iCisgICAgICAgIC8vIHRha2UgY2FyZSBvZiBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm1zIG9mICJzZWNvbmQiCisgICAgICAgICsgIiAgICAwIHNlY29uZHM7IDEgc2Vjb25kOyA9MD0gc2Vjb25kcztcbiIKKyAgICAgICAgLy8gdXNlICUlbWluIHRvIGZvcm1hdCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDYwIHNlY29uZHMKKyAgICAgICAgKyAiICAgIDYwLzYwOiA8JSVtaW48WywgPj5dO1xuIgorICAgICAgICAvLyB1c2UgJSVociB0byBmb3JtYXQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAzLDYwMCBzZWNvbmRzCisgICAgICAgIC8vICh0aGUgIj4+PiIgYmVsb3cgY2F1c2VzIHVzIHRvIHNlZSB0aGUgbnVtYmVyIG9mIG1pbnV0ZXMKKyAgICAgICAgLy8gd2hlbiB3aGVuIHRoZXJlIGFyZSB6ZXJvIG1pbnV0ZXMpCisgICAgICAgICsgIiAgICAzNjAwLzYwOiA8JSVocjxbLCA+Pj5dO1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgc2V0IHRha2VzIGNhcmUgb2YgdGhlIHNpbmd1bGFyIGFuZCBwbHVyYWwgZm9ybXMKKyAgICAgICAgLy8gb2YgIm1pbnV0ZSIKKyAgICAgICAgKyAiJSVtaW46XG4iCisgICAgICAgICsgIiAgICAwIG1pbnV0ZXM7IDEgbWludXRlOyA9MD0gbWludXRlcztcbiIKKyAgICAgICAgLy8gdGhpcyBydWxlIHNldCB0YWtlcyBjYXJlIG9mIHRoZSBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm1zCisgICAgICAgIC8vIG9mICJob3VyIgorICAgICAgICArICIlJWhyOlxuIgorICAgICAgICArICIgICAgMCBob3VyczsgMSBob3VyOyA9MD0gaG91cnM7XG4iCisKKyAgICAgICAgLy8gbWFpbiBydWxlIHNldCBmb3IgZm9ybWF0dGluZyBpbiBudW1lcmFscworICAgICAgICArICIlaW4tbnVtZXJhbHM6XG4iCisgICAgICAgIC8vIHZhbHVlcyBiZWxvdyA2MCBzZWNvbmRzIGFyZSBzaG93biB3aXRoICJzZWMuIgorICAgICAgICArICIgICAgPTA9IHNlYy47XG4iCisgICAgICAgIC8vIGhpZ2hlciB2YWx1ZXMgYXJlIHNob3duIHdpdGggY29sb25zOiAlJW1pbi1zZWMgaXMgdXNlZCBmb3IKKyAgICAgICAgLy8gdmFsdWVzIGJlbG93IDMsNjAwIHNlY29uZHMuLi4KKyAgICAgICAgKyAiICAgIDYwOiA9JSVtaW4tc2VjPTtcbiIKKyAgICAgICAgLy8gLi4uYW5kICUlaHItbWluLXNlYyBpcyB1c2VkIGZvciB2YWx1ZXMgb2YgMyw2MDAgc2Vjb25kcworICAgICAgICAvLyBhbmQgYWJvdmUKKyAgICAgICAgKyAiICAgIDM2MDA6ID0lJWhyLW1pbi1zZWM9O1xuIgorICAgICAgICAvLyB0aGlzIHJ1bGUgY2F1c2VzIHZhbHVlcyBvZiBsZXNzIHRoYW4gMTAgbWludXRlcyB0byBzaG93IHdpdGhvdXQKKyAgICAgICAgLy8gYSBsZWFkaW5nIHplcm8KKyAgICAgICAgKyAiJSVtaW4tc2VjOlxuIgorICAgICAgICArICIgICAgMDogOj0wMD07XG4iCisgICAgICAgICsgIiAgICA2MC82MDogPDA8Pj47XG4iCisgICAgICAgIC8vIHRoaXMgcnVsZSBzZXQgaXMgdXNlZCBmb3IgdmFsdWVzIG9mIDMsNjAwIG9yIG1vcmUuICBNaW51dGVzIGFyZSBhbHdheXMKKyAgICAgICAgLy8gc2hvd24sIGFuZCBhbHdheXMgc2hvd24gd2l0aCB0d28gZGlnaXRzCisgICAgICAgICsgIiUlaHItbWluLXNlYzpcbiIKKyAgICAgICAgKyAiICAgIDA6IDo9MDA9O1xuIgorICAgICAgICArICIgICAgNjAvNjA6IDwwMDw+PjtcbiIKKyAgICAgICAgKyAiICAgIDM2MDAvNjA6IDwjLCMjMDw6Pj4+O1xuIgorICAgICAgICAvLyB0aGUgbGVuaWVudC1wYXJzZSBydWxlcyBhbGxvdyBzZXZlcmFsIGRpZmZlcmVudCBjaGFyYWN0ZXJzIHRvIGJlIHVzZWQKKyAgICAgICAgLy8gYXMgZGVsaW1pdGVycyBiZXR3ZWVuIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcworICAgICAgICArICIlJWxlbmllbnQtcGFyc2U6XG4iCisgICAgICAgICsgIiAgICAmIDogPSAuID0gJyAnID0gLTtcbiI7CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q292ZXJhZ2UoKSB7CisgICAgICAgIC8vIGV4dHJhIGNhbGxzIHRvIGJvb3N0IGNvdmVyYWdlIG51bWJlcnMKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZtdDAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KFJ1bGVCYXNlZE51bWJlckZvcm1hdC5TUEVMTE9VVCk7CisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmbXQxID0gKFJ1bGVCYXNlZE51bWJlckZvcm1hdClmbXQwLmNsb25lKCk7CisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmbXQyID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChSdWxlQmFzZWROdW1iZXJGb3JtYXQuU1BFTExPVVQpOworICAgICAgICBpZiAoIWZtdDAuZXF1YWxzKGZtdDApKSB7CisgICAgICAgICAgICBlcnJsbigic2VsZiBlcXVhbGl0eSBmYWlscyIpOworICAgICAgICB9CisgICAgICAgIGlmICghZm10MC5lcXVhbHMoZm10MSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJjbG9uZSBlcXVhbGl0eSBmYWlscyIpOworICAgICAgICB9CisgICAgICAgIGlmICghZm10MC5lcXVhbHMoZm10MikpIHsKKyAgICAgICAgICAgIGVycmxuKCJkdXBsaWNhdGUgZXF1YWxpdHkgZmFpbHMiKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgc3RyID0gZm10MC50b1N0cmluZygpOworICAgICAgICBsb2dsbihzdHIpOworCisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmbXQzID0gIG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoZHVyYXRpb25JblNlY29uZHNSdWxlcyk7CisKKyAgICAgICAgaWYgKGZtdDAuZXF1YWxzKGZtdDMpKSB7CisgICAgICAgICAgICBlcnJsbigibm9uZXF1YWwgZmFpbHMiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZtdDMuZXF1YWxzKGZtdDMpKSB7CisgICAgICAgICAgICBlcnJsbigic2VsZiBlcXVhbCAyIGZhaWxzIik7CisgICAgICAgIH0KKyAgICAgICAgc3RyID0gZm10My50b1N0cmluZygpOworICAgICAgICBsb2dsbihzdHIpOworCisgICAgICAgIFN0cmluZ1tdIG5hbWVzID0gZm10My5nZXRSdWxlU2V0TmFtZXMoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZm10My5zZXREZWZhdWx0UnVsZVNldChudWxsKTsKKyAgICAgICAgICAgIGZtdDMuc2V0RGVmYXVsdFJ1bGVTZXQoIiUlZm9vIik7CisgICAgICAgICAgICBlcnJsbigic2RyZiAlJWZvbyBkaWRuJ3QgZmFpbCIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZtdDMuc2V0RGVmYXVsdFJ1bGVTZXQoIiVib2d1cyIpOworICAgICAgICAgICAgZXJybG4oInNkcmYgJWJvZ3VzIGRpZG4ndCBmYWlsIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RyID0gZm10My5mb3JtYXQoMi4zLCBuYW1lc1swXSk7CisgICAgICAgICAgICBsb2dsbihzdHIpOworICAgICAgICAgICAgc3RyID0gZm10My5mb3JtYXQoMi4zLCAiJSVmb28iKTsKKyAgICAgICAgICAgIGVycmxuKCJmb3JtYXQgZG91YmxlICUlZm9vIGRpZG4ndCBmYWlsIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RyID0gZm10My5mb3JtYXQoMTIzTCwgbmFtZXNbMF0pOworICAgICAgICAgICAgbG9nbG4oc3RyKTsKKyAgICAgICAgICAgIHN0ciA9IGZtdDMuZm9ybWF0KDEyM0wsICIlJWZvbyIpOworICAgICAgICAgICAgZXJybG4oImZvcm1hdCBkb3VibGUgJSVmb28gZGlkbid0IGZhaWwiKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmbXQ0ID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChmcmFjUnVsZXMsIExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZtdDUgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KGZyYWNSdWxlcywgTG9jYWxlLkVOR0xJU0gpOworICAgICAgICBzdHIgPSBmbXQ0LnRvU3RyaW5nKCk7CisgICAgICAgIGxvZ2xuKHN0cik7CisgICAgICAgIGlmICghZm10NC5lcXVhbHMoZm10NSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJkdXBsaWNhdGUgMiBlcXVhbGl0eSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICBzdHIgPSBmbXQ0LmZvcm1hdCgxMjNMKTsKKyAgICAgICAgbG9nbG4oc3RyKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE51bWJlciBudW0gPSBmbXQ0LnBhcnNlKHN0cik7CisgICAgICAgICAgICBsb2dsbihudW0udG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigicGFyc2UgY2F1Z2h0IGV4Y2VwdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgc3RyID0gZm10NC5mb3JtYXQoLjAwMDEyMyk7CisgICAgICAgIGxvZ2xuKHN0cik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBOdW1iZXIgbnVtID0gZm10NC5wYXJzZShzdHIpOworICAgICAgICAgICAgbG9nbG4obnVtLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oInBhcnNlIGNhdWdodCBleGNlcHRpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ciA9IGZtdDQuZm9ybWF0KDQ1Ni4wMDAxMjMpOworICAgICAgICBsb2dsbihzdHIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgTnVtYmVyIG51bSA9IGZtdDQucGFyc2Uoc3RyKTsKKyAgICAgICAgICAgIGxvZ2xuKG51bS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJwYXJzZSBjYXVnaHQgZXhjZXB0aW9uIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0VW5kZWZpbmVkU3BlbGxvdXQoKSB7CisgICAgICAgIExvY2FsZSBncmVlayA9IG5ldyBMb2NhbGUoImVsIiwgIiIsICIiKTsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0W10gZm9ybWF0dGVycyA9IHsKKyAgICAgICAgICAgIG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoZ3JlZWssIFJ1bGVCYXNlZE51bWJlckZvcm1hdC5TUEVMTE9VVCksCisgICAgICAgICAgICBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KGdyZWVrLCBSdWxlQmFzZWROdW1iZXJGb3JtYXQuT1JESU5BTCksCisgICAgICAgICAgICBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KGdyZWVrLCBSdWxlQmFzZWROdW1iZXJGb3JtYXQuRFVSQVRJT04pLAorICAgICAgICB9OworCisgICAgICAgIFN0cmluZ1tdIGRhdGEgPSB7CisgICAgICAgICAgICAiMCIsCisgICAgICAgICAgICAiMSIsCisgICAgICAgICAgICAiMTUiLAorICAgICAgICAgICAgIjIwIiwKKyAgICAgICAgICAgICIyMyIsCisgICAgICAgICAgICAiNzMiLAorICAgICAgICAgICAgIjg4IiwKKyAgICAgICAgICAgICIxMDAiLAorICAgICAgICAgICAgIjEwNiIsCisgICAgICAgICAgICAiMTI3IiwKKyAgICAgICAgICAgICIyMDAiLAorICAgICAgICAgICAgIjU3OSIsCisgICAgICAgICAgICAiMSwwMDAiLAorICAgICAgICAgICAgIjIsMDAwIiwKKyAgICAgICAgICAgICIzLDAwNCIsCisgICAgICAgICAgICAiNCw1NjciLAorICAgICAgICAgICAgIjE1LDk0MyIsCisgICAgICAgICAgICAiMTA1LDAwMCIsCisgICAgICAgICAgICAiMiwzNDUsNjc4IiwKKyAgICAgICAgICAgICItMzYiLAorICAgICAgICAgICAgIi0zNi45MTIxNSIsCisgICAgICAgICAgICAiMjM0LjU2Nzg5IgorICAgICAgICB9OworCisgICAgICAgIE51bWJlckZvcm1hdCBkZWNGb3JtYXQgPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmb3JtYXR0ZXJzLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBjb20uaWJtLmljdS50ZXh0Lk51bWJlckZvcm1hdCBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW2pdOworICAgICAgICAgICAgbG9nbG4oImZvcm1hdHRlclsiICsgaiArICJdIik7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdChkZWNGb3JtYXQucGFyc2UoZGF0YVtpXSkpOworICAgICAgICAgICAgICAgICAgICBsb2dsbigiWyIgKyBpICsgIl0gIiArIGRhdGFbaV0gKyAiID09PiAiICsgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJmb3JtYXR0ZXJbIiArIGogKyAiXSwgZGF0YVsiICsgaSArICJdICIgKyBkYXRhW2ldICsgIiB0aHJldyBleGNlcHRpb24gIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGEgc2ltcGxlIHNwb3QgY2hlY2sgb24gdGhlIEVuZ2xpc2ggc3BlbGxvdXQgcnVsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0RW5nbGlzaFNwZWxsb3V0KCkgeworICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyCisgICAgICAgICAgICA9IG5ldyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoTG9jYWxlLlVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdC5TUEVMTE9VVCk7CisgICAgICAgIFN0cmluZ1tdW10gdGVzdERhdGEgPSB7CisgICAgICAgICAgICB7ICIxIiwgIm9uZSIgfSwKKyAgICAgICAgICAgIHsgIjE1IiwgImZpZnRlZW4iIH0sCisgICAgICAgICAgICB7ICIyMCIsICJ0d2VudHkiIH0sCisgICAgICAgICAgICB7ICIyMyIsICJ0d2VudHktdGhyZWUiIH0sCisgICAgICAgICAgICB7ICI3MyIsICJzZXZlbnR5LXRocmVlIiB9LAorICAgICAgICAgICAgeyAiODgiLCAiZWlnaHR5LWVpZ2h0IiB9LAorICAgICAgICAgICAgeyAiMTAwIiwgIm9uZSBodW5kcmVkIiB9LAorICAgICAgICAgICAgeyAiMTA2IiwgIm9uZSBodW5kcmVkIGFuZCBzaXgiIH0sCisgICAgICAgICAgICB7ICIxMjciLCAib25lIGh1bmRyZWQgYW5kIHR3ZW50eS1zZXZlbiIgfSwKKyAgICAgICAgICAgIHsgIjIwMCIsICJ0d28gaHVuZHJlZCIgfSwKKyAgICAgICAgICAgIHsgIjU3OSIsICJmaXZlIGh1bmRyZWQgYW5kIHNldmVudHktbmluZSIgfSwKKyAgICAgICAgICAgIHsgIjEsMDAwIiwgIm9uZSB0aG91c2FuZCIgfSwKKyAgICAgICAgICAgIHsgIjIsMDAwIiwgInR3byB0aG91c2FuZCIgfSwKKyAgICAgICAgICAgIHsgIjMsMDA0IiwgInRocmVlIHRob3VzYW5kIGFuZCBmb3VyIiB9LAorICAgICAgICAgICAgeyAiNCw1NjciLCAiZm91ciB0aG91c2FuZCBmaXZlIGh1bmRyZWQgYW5kIHNpeHR5LXNldmVuIiB9LAorICAgICAgICAgICAgeyAiMTUsOTQzIiwgImZpZnRlZW4gdGhvdXNhbmQgbmluZSBodW5kcmVkIGFuZCBmb3J0eS10aHJlZSIgfSwKKyAgICAgICAgICAgIHsgIjIsMzQ1LDY3OCIsICJ0d28gbWlsbGlvbiwgdGhyZWUgaHVuZHJlZCBhbmQgZm9ydHktZml2ZSAiCisgICAgICAgICAgICAgICsgInRob3VzYW5kLCBzaXggaHVuZHJlZCBhbmQgc2V2ZW50eS1laWdodCIgfSwKKyAgICAgICAgICAgIHsgIi0zNiIsICJtaW51cyB0aGlydHktc2l4IiB9LAorICAgICAgICAgICAgeyAiMjM0LjU2NyIsICJ0d28gaHVuZHJlZCBhbmQgdGhpcnR5LWZvdXIgcG9pbnQgZml2ZSBzaXggc2V2ZW4iIH0KKyAgICAgICAgfTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCB0ZXN0RGF0YSwgdHJ1ZSk7CisKKyAgICAgICAgZm9ybWF0dGVyLnNldExlbmllbnRQYXJzZU1vZGUodHJ1ZSk7CisgICAgICAgIFN0cmluZ1tdW10gbHBUZXN0RGF0YSA9IHsKKyAgICAgICAgICAgIHsgIkZPdXJodW5kcmVkICAgICB0aGlSVFkgc2l4IiwgIjQzNiIgfSwKKyAgICAgICAgICAgIC8vIHRlc3Qgc3BhY2VzIGJlZm9yZSBmaWZ0eS03IGNhdXNpbmcgbGVuaWVudCBwYXJzZSBtYXRjaCBvZiAiZmlmdHktIiB0byAiIGZpZnR5IgorICAgICAgICAgICAgLy8gbGVhdmluZyAiLTciIGZvciByZW1haW5pbmcgcGFyc2UsIHJlc3VsdGluZyBpbiAyNjQzIGFzIHRoZSBwYXJzZSByZXN1bHQuCisgICAgICAgICAgICB7ICJmaWZ0eS03IiwgIjU3IiB9LAorICAgICAgICAgICAgeyAiIGZpZnR5LTciLCAiNTciIH0sCisgICAgICAgICAgICB7ICIgIGZpZnR5LTciLCAiNTciIH0sCisgICAgICAgICAgICB7ICIyIHRob3VzYW5kIHNpeCBIVU5EUkVEICAgZmlmdHktNyIsICIyLDY1NyIgfSwKKyAgICAgICAgICAgIHsgImZpZnRlZW4gaHVuZHJlZCBhbmQgemVybyIsICIxLDUwMCIgfQorICAgICAgICB9OworICAgICAgICBkb0xlbmllbnRQYXJzZVRlc3QoZm9ybWF0dGVyLCBscFRlc3REYXRhKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGEgc2ltcGxlIHNwb3QgY2hlY2sgb24gdGhlIEVuZ2xpc2ggb3JkaW5hbC1hYmJyZXZpYXRpb24gcnVsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0T3JkaW5hbEFiYnJldmlhdGlvbnMoKSB7CisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIKKyAgICAgICAgICAgID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChMb2NhbGUuVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0Lk9SRElOQUwpOworICAgICAgICBTdHJpbmdbXVtdIHRlc3REYXRhID0geworICAgICAgICAgICAgeyAiMSIsICIxc3QiIH0sCisgICAgICAgICAgICB7ICIyIiwgIjJuZCIgfSwKKyAgICAgICAgICAgIHsgIjMiLCAiM3JkIiB9LAorICAgICAgICAgICAgeyAiNCIsICI0dGgiIH0sCisgICAgICAgICAgICB7ICI3IiwgIjd0aCIgfSwKKyAgICAgICAgICAgIHsgIjEwIiwgIjEwdGgiIH0sCisgICAgICAgICAgICB7ICIxMSIsICIxMXRoIiB9LAorICAgICAgICAgICAgeyAiMTMiLCAiMTN0aCIgfSwKKyAgICAgICAgICAgIHsgIjIwIiwgIjIwdGgiIH0sCisgICAgICAgICAgICB7ICIyMSIsICIyMXN0IiB9LAorICAgICAgICAgICAgeyAiMjIiLCAiMjJuZCIgfSwKKyAgICAgICAgICAgIHsgIjIzIiwgIjIzcmQiIH0sCisgICAgICAgICAgICB7ICIyNCIsICIyNHRoIiB9LAorICAgICAgICAgICAgeyAiMzMiLCAiMzNyZCIgfSwKKyAgICAgICAgICAgIHsgIjEwMiIsICIxMDJuZCIgfSwKKyAgICAgICAgICAgIHsgIjMxMiIsICIzMTJ0aCIgfSwKKyAgICAgICAgICAgIHsgIjEyLDM0NSIsICIxMiwzNDV0aCIgfQorICAgICAgICB9OworCisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIHRlc3REYXRhLCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhIHNpbXBsZSBzcG90IGNoZWNrIG9uIHRoZSBkdXJhdGlvbi1mb3JtYXR0aW5nIHJ1bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdER1cmF0aW9ucygpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KExvY2FsZS5VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQuRFVSQVRJT04pOworICAgICAgICBTdHJpbmdbXVtdIHRlc3REYXRhID0geworICAgICAgICAgICAgeyAiMyw2MDAiLCAiMTowMDowMCIgfSwgICAgICAgICAgICAgLy9tb3ZlIG1lIGFuZCBJIGZhaWwKKyAgICAgICAgICAgIHsgIjAiLCAiMCBzZWMuIiB9LAorICAgICAgICAgICAgeyAiMSIsICIxIHNlYy4iIH0sCisgICAgICAgICAgICB7ICIyNCIsICIyNCBzZWMuIiB9LAorICAgICAgICAgICAgeyAiNjAiLCAiMTowMCIgfSwKKyAgICAgICAgICAgIHsgIjczIiwgIjE6MTMiIH0sCisgICAgICAgICAgICB7ICIxNDUiLCAiMjoyNSIgfSwKKyAgICAgICAgICAgIHsgIjY2NiIsICIxMTowNiIgfSwKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgeyAiMyw2MDAiLCAiMTowMDowMCIgfSwKKyAgICAgICAgICAgIHsgIjMsNzQwIiwgIjE6MDI6MjAiIH0sCisgICAgICAgICAgICB7ICIxMCwyOTMiLCAiMjo1MTozMyIgfQorICAgICAgICB9OworCisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIHRlc3REYXRhLCB0cnVlKTsKKworICAgICAgICBmb3JtYXR0ZXIuc2V0TGVuaWVudFBhcnNlTW9kZSh0cnVlKTsKKyAgICAgICAgU3RyaW5nW11bXSBscFRlc3REYXRhID0geworICAgICAgICAgICAgeyAiMi01MS0zMyIsICIxMCwyOTMiIH0KKyAgICAgICAgfTsKKyAgICAgICAgZG9MZW5pZW50UGFyc2VUZXN0KGZvcm1hdHRlciwgbHBUZXN0RGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhIHNpbXBsZSBzcG90IGNoZWNrIG9uIHRoZSBTcGFuaXNoIHNwZWxsb3V0IHJ1bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFNwYW5pc2hTcGVsbG91dCgpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KG5ldyBMb2NhbGUoImVzIiwgImVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKSwgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LlNQRUxMT1VUKTsKKyAgICAgICAgU3RyaW5nW11bXSB0ZXN0RGF0YSA9IHsKKyAgICAgICAgICAgIHsgIjEiLCAidW5vIiB9LAorICAgICAgICAgICAgeyAiNiIsICJzZWlzIiB9LAorICAgICAgICAgICAgeyAiMTYiLCAiZGllY2lzXHUwMGU5aXMiIH0sCisgICAgICAgICAgICB7ICIyMCIsICJ2ZWludGUiIH0sCisgICAgICAgICAgICB7ICIyNCIsICJ2ZWludGljdWF0cm8iIH0sCisgICAgICAgICAgICB7ICIyNiIsICJ2ZWludGlzXHUwMGU5aXMiIH0sCisgICAgICAgICAgICB7ICI3MyIsICJzZXRlbnRhIHkgdHJlcyIgfSwKKyAgICAgICAgICAgIHsgIjg4IiwgIm9jaGVudGEgeSBvY2hvIiB9LAorICAgICAgICAgICAgeyAiMTAwIiwgImNpZW4iIH0sCisgICAgICAgICAgICB7ICIxMDYiLCAiY2llbnRvIHNlaXMiIH0sCisgICAgICAgICAgICB7ICIxMjciLCAiY2llbnRvIHZlaW50aXNpZXRlIiB9LAorICAgICAgICAgICAgeyAiMjAwIiwgImRvc2NpZW50b3MiIH0sCisgICAgICAgICAgICB7ICI1NzkiLCAicXVpbmllbnRvcyBzZXRlbnRhIHkgbnVldmUiIH0sCisgICAgICAgICAgICB7ICIxLDAwMCIsICJtaWwiIH0sCisgICAgICAgICAgICB7ICIyLDAwMCIsICJkb3MgbWlsIiB9LAorICAgICAgICAgICAgeyAiMywwMDQiLCAidHJlcyBtaWwgY3VhdHJvIiB9LAorICAgICAgICAgICAgeyAiNCw1NjciLCAiY3VhdHJvIG1pbCBxdWluaWVudG9zIHNlc2VudGEgeSBzaWV0ZSIgfSwKKyAgICAgICAgICAgIHsgIjE1LDk0MyIsICJxdWluY2UgbWlsIG5vdmVjaWVudG9zIGN1YXJlbnRhIHkgdHJlcyIgfSwKKyAgICAgICAgICAgIHsgIjIsMzQ1LDY3OCIsICJkb3MgbWlsbFx1MDBmM24gdHJlc2NpZW50b3MgY3VhcmVudGEgeSBjaW5jbyBtaWwgIgorICAgICAgICAgICAgICArICJzZWlzY2llbnRvcyBzZXRlbnRhIHkgb2NobyJ9LAorICAgICAgICAgICAgeyAiLTM2IiwgIm1lbm9zIHRyZWludGEgeSBzZWlzIiB9LAorICAgICAgICAgICAgeyAiMjM0LjU2NyIsICJkb3NjaWVudG9zIHRyZWludGEgeSBjdWF0cm8gcHVudG8gY2luY28gc2VpcyBzaWV0ZSIgfQorICAgICAgICB9OworCisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIHRlc3REYXRhLCB0cnVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGEgc2ltcGxlIHNwb3QgY2hlY2sgb24gdGhlIEZyZW5jaCBzcGVsbG91dCBydWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RGcmVuY2hTcGVsbG91dCgpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KExvY2FsZS5GUkFOQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LlNQRUxMT1VUKTsKKyAgICAgICAgU3RyaW5nW11bXSB0ZXN0RGF0YSA9IHsKKyAgICAgICAgICAgIHsgIjEiLCAidW4iIH0sCisgICAgICAgICAgICB7ICIxNSIsICJxdWluemUiIH0sCisgICAgICAgICAgICB7ICIyMCIsICJ2aW5ndCIgfSwKKyAgICAgICAgICAgIHsgIjIxIiwgInZpbmd0LWV0LXVuIiB9LAorICAgICAgICAgICAgeyAiMjMiLCAidmluZ3QtdHJvaXMiIH0sCisgICAgICAgICAgICB7ICI2MiIsICJzb2l4YW50ZS1kZXV4IiB9LAorICAgICAgICAgICAgeyAiNzAiLCAic29peGFudGUtZGl4IiB9LAorICAgICAgICAgICAgeyAiNzEiLCAic29peGFudGUgZXQgb256ZSIgfSwKKyAgICAgICAgICAgIHsgIjczIiwgInNvaXhhbnRlLXRyZWl6ZSIgfSwKKyAgICAgICAgICAgIHsgIjgwIiwgInF1YXRyZS12aW5ndHMiIH0sCisgICAgICAgICAgICB7ICI4OCIsICJxdWF0cmUtdmluZ3QtaHVpdCIgfSwKKyAgICAgICAgICAgIHsgIjEwMCIsICJjZW50IiB9LAorICAgICAgICAgICAgeyAiMTA2IiwgImNlbnQgc2l4IiB9LAorICAgICAgICAgICAgeyAiMTI3IiwgImNlbnQgdmluZ3Qtc2VwdCIgfSwKKyAgICAgICAgICAgIHsgIjIwMCIsICJkZXV4IGNlbnRzIiB9LAorICAgICAgICAgICAgeyAiNTc5IiwgImNpbnEgY2VudHMgc29peGFudGUtZGl4LW5ldWYiIH0sCisgICAgICAgICAgICB7ICIxLDAwMCIsICJtaWxsZSIgfSwKKyAgICAgICAgICAgIHsgIjEsMTIzIiwgIm9uemUgY2VudHMgdmluZ3QtdHJvaXMiIH0sCisgICAgICAgICAgICB7ICIxLDU5NCIsICJtaWxsZSBjaW5xIGNlbnRzIHF1YXRyZS12aW5ndC1xdWF0b3J6ZSIgfSwKKyAgICAgICAgICAgIHsgIjIsMDAwIiwgImRldXggbWlsbGUiIH0sCisgICAgICAgICAgICB7ICIzLDAwNCIsICJ0cm9pcyBtaWxsZSBxdWF0cmUiIH0sCisgICAgICAgICAgICB7ICI0LDU2NyIsICJxdWF0cmUgbWlsbGUgY2lucSBjZW50cyBzb2l4YW50ZS1zZXB0IiB9LAorICAgICAgICAgICAgeyAiMTUsOTQzIiwgInF1aW56ZSBtaWxsZSBuZXVmIGNlbnRzIHF1YXJhbnRlLXRyb2lzIiB9LAorICAgICAgICAgICAgeyAiMiwzNDUsNjc4IiwgImRldXggbWlsbGlvbiB0cm9pcyBjZW50cyBxdWFyYW50ZS1jaW5xIG1pbGxlICIKKyAgICAgICAgICAgICAgKyAic2l4IGNlbnRzIHNvaXhhbnRlLWRpeC1odWl0IiB9LAorICAgICAgICAgICAgeyAiLTM2IiwgIm1vaW5zIHRyZW50ZS1zaXgiIH0sCisgICAgICAgICAgICB7ICIyMzQuNTY3IiwgImRldXggY2VudHMgdHJlbnRlLXF1YXRyZSB2aXJndWxlIGNpbnEgc2l4IHNlcHQiIH0KKyAgICAgICAgfTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCB0ZXN0RGF0YSwgdHJ1ZSk7CisKKyAgICAgICAgZm9ybWF0dGVyLnNldExlbmllbnRQYXJzZU1vZGUodHJ1ZSk7CisgICAgICAgIFN0cmluZ1tdW10gbHBUZXN0RGF0YSA9IHsKKyAgICAgICAgICAgIHsgInRyZW50ZS11biIsICIzMSIgfSwKKyAgICAgICAgICAgIHsgInVuIGNlbnRzIHF1YXRyZSB2aW5ndCBkaXggaHVpdCIsICIxOTgiIH0KKyAgICAgICAgfTsKKyAgICAgICAgZG9MZW5pZW50UGFyc2VUZXN0KGZvcm1hdHRlciwgbHBUZXN0RGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhIHNpbXBsZSBzcG90IGNoZWNrIG9uIHRoZSBTd2lzcyBGcmVuY2ggc3BlbGxvdXQgcnVsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0U3dpc3NGcmVuY2hTcGVsbG91dCgpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KG5ldyBMb2NhbGUoImZyIiwgIkNIIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKSwgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LlNQRUxMT1VUKTsKKyAgICAgICAgU3RyaW5nW11bXSB0ZXN0RGF0YSA9IHsKKyAgICAgICAgICAgIHsgIjEiLCAidW4iIH0sCisgICAgICAgICAgICB7ICIxNSIsICJxdWluemUiIH0sCisgICAgICAgICAgICB7ICIyMCIsICJ2aW5ndCIgfSwKKyAgICAgICAgICAgIHsgIjIxIiwgInZpbmd0LWV0LXVuIiB9LAorICAgICAgICAgICAgeyAiMjMiLCAidmluZ3QtdHJvaXMiIH0sCisgICAgICAgICAgICB7ICI2MiIsICJzb2l4YW50ZS1kZXV4IiB9LAorICAgICAgICAgICAgeyAiNzAiLCAic2VwdGFudGUiIH0sCisgICAgICAgICAgICB7ICI3MSIsICJzZXB0YW50ZS1ldC11biIgfSwKKyAgICAgICAgICAgIHsgIjczIiwgInNlcHRhbnRlLXRyb2lzIiB9LAorICAgICAgICAgICAgeyAiODAiLCAib2N0YW50ZSIgfSwKKyAgICAgICAgICAgIHsgIjg4IiwgIm9jdGFudGUtaHVpdCIgfSwKKyAgICAgICAgICAgIHsgIjEwMCIsICJjZW50IiB9LAorICAgICAgICAgICAgeyAiMTA2IiwgImNlbnQgc2l4IiB9LAorICAgICAgICAgICAgeyAiMTI3IiwgImNlbnQgdmluZ3Qtc2VwdCIgfSwKKyAgICAgICAgICAgIHsgIjIwMCIsICJkZXV4IGNlbnRzIiB9LAorICAgICAgICAgICAgeyAiNTc5IiwgImNpbnEgY2VudHMgc2VwdGFudGUtbmV1ZiIgfSwKKyAgICAgICAgICAgIHsgIjEsMDAwIiwgIm1pbGxlIiB9LAorICAgICAgICAgICAgeyAiMSwxMjMiLCAib256ZSBjZW50cyB2aW5ndC10cm9pcyIgfSwKKyAgICAgICAgICAgIHsgIjEsNTk0IiwgIm1pbGxlIGNpbnEgY2VudHMgbm9uYW50ZS1xdWF0cmUiIH0sCisgICAgICAgICAgICB7ICIyLDAwMCIsICJkZXV4IG1pbGxlIiB9LAorICAgICAgICAgICAgeyAiMywwMDQiLCAidHJvaXMgbWlsbGUgcXVhdHJlIiB9LAorICAgICAgICAgICAgeyAiNCw1NjciLCAicXVhdHJlIG1pbGxlIGNpbnEgY2VudHMgc29peGFudGUtc2VwdCIgfSwKKyAgICAgICAgICAgIHsgIjE1LDk0MyIsICJxdWluemUgbWlsbGUgbmV1ZiBjZW50cyBxdWFyYW50ZS10cm9pcyIgfSwKKyAgICAgICAgICAgIHsgIjIsMzQ1LDY3OCIsICJkZXV4IG1pbGxpb24gdHJvaXMgY2VudHMgcXVhcmFudGUtY2lucSBtaWxsZSAiCisgICAgICAgICAgICAgICsgInNpeCBjZW50cyBzZXB0YW50ZS1odWl0IiB9LAorICAgICAgICAgICAgeyAiLTM2IiwgIm1vaW5zIHRyZW50ZS1zaXgiIH0sCisgICAgICAgICAgICB7ICIyMzQuNTY3IiwgImRldXggY2VudHMgdHJlbnRlLXF1YXRyZSB2aXJndWxlIGNpbnEgc2l4IHNlcHQiIH0KKyAgICAgICAgfTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCB0ZXN0RGF0YSwgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhIHNpbXBsZSBzcG90IGNoZWNrIG9uIHRoZSBJdGFsaWFuIHNwZWxsb3V0IHJ1bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEl0YWxpYW5TcGVsbG91dCgpIHsKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlcgorICAgICAgICAgICAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KExvY2FsZS5JVEFMSUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdC5TUEVMTE9VVCk7CisgICAgICAgIFN0cmluZ1tdW10gdGVzdERhdGEgPSB7CisgICAgICAgICAgICB7ICIxIiwgInVubyIgfSwKKyAgICAgICAgICAgIHsgIjE1IiwgInF1aW5kaWNpIiB9LAorICAgICAgICAgICAgeyAiMjAiLCAidmVudGkiIH0sCisgICAgICAgICAgICB7ICIyMyIsICJ2ZW50aXRyZSIgfSwKKyAgICAgICAgICAgIHsgIjczIiwgInNldHRhbnRhdHJlIiB9LAorICAgICAgICAgICAgeyAiODgiLCAib3R0YW50b3R0byIgfSwKKyAgICAgICAgICAgIHsgIjEwMCIsICJjZW50byIgfSwKKyAgICAgICAgICAgIHsgIjEwNiIsICJjZW50b3NlaSIgfSwKKyAgICAgICAgICAgIHsgIjEwOCIsICJjZW50b3R0byIgfSwKKyAgICAgICAgICAgIHsgIjEyNyIsICJjZW50b3ZlbnRpc2V0dGUiIH0sCisgICAgICAgICAgICB7ICIxODEiLCAiY2VudG90dGFudHVubyIgfSwKKyAgICAgICAgICAgIHsgIjIwMCIsICJkdWVjZW50byIgfSwKKyAgICAgICAgICAgIHsgIjU3OSIsICJjaW5xdWVjZW50b3NldHRhbnRhbm92ZSIgfSwKKyAgICAgICAgICAgIHsgIjEsMDAwIiwgIm1pbGxlIiB9LAorICAgICAgICAgICAgeyAiMiwwMDAiLCAiZHVlbWlsYSIgfSwKKyAgICAgICAgICAgIHsgIjMsMDA0IiwgInRyZW1pbGFxdWF0dHJvIiB9LAorICAgICAgICAgICAgeyAiNCw1NjciLCAicXVhdHRyb21pbGFjaW5xdWVjZW50b3Nlc3NhbnRhc2V0dGUiIH0sCisgICAgICAgICAgICB7ICIxNSw5NDMiLCAicXVpbmRpY2ltaWxhbm92ZWNlbnRvcXVhcmFudGF0cmUiIH0sCisgICAgICAgICAgICB7ICItMzYiLCAibWVubyB0cmVudGlzZWkiIH0sCisgICAgICAgICAgICB7ICIyMzQuNTY3IiwgImR1ZWNlbnRvdHJlbnRpcXVhdHRybyB2aXJnb2xhIGNpbnF1ZSBzZWkgc2V0dGUiIH0KKyAgICAgICAgfTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCB0ZXN0RGF0YSwgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhIHNpbXBsZSBzcG90IGNoZWNrIG9uIHRoZSBHZXJtYW4gc3BlbGxvdXQgcnVsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0R2VybWFuU3BlbGxvdXQoKSB7CisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIKKyAgICAgICAgICAgID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChMb2NhbGUuR0VSTUFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQuU1BFTExPVVQpOworICAgICAgICBTdHJpbmdbXVtdIHRlc3REYXRhID0geworICAgICAgICAgICAgeyAiMSIsICJlaW5zIiB9LAorICAgICAgICAgICAgeyAiMTUiLCAiZlx1MDBmY25memVobiIgfSwKKyAgICAgICAgICAgIHsgIjIwIiwgInp3YW56aWciIH0sCisgICAgICAgICAgICB7ICIyMyIsICJkcmVpdW5kendhbnppZyIgfSwKKyAgICAgICAgICAgIHsgIjczIiwgImRyZWl1bmRzaWViemlnIiB9LAorICAgICAgICAgICAgeyAiODgiLCAiYWNodHVuZGFjaHR6aWciIH0sCisgICAgICAgICAgICB7ICIxMDAiLCAiaHVuZGVydCIgfSwKKyAgICAgICAgICAgIHsgIjEwNiIsICJodW5kZXJ0c2VjaHMiIH0sCisgICAgICAgICAgICB7ICIxMjciLCAiaHVuZGVydHNpZWJlbnVuZHp3YW56aWciIH0sCisgICAgICAgICAgICB7ICIyMDAiLCAiendlaWh1bmRlcnQiIH0sCisgICAgICAgICAgICB7ICI1NzkiLCAiZlx1MDBmY25maHVuZGVydG5ldW51bmRzaWViemlnIiB9LAorICAgICAgICAgICAgeyAiMSwwMDAiLCAidGF1c2VuZCIgfSwKKyAgICAgICAgICAgIHsgIjIsMDAwIiwgInp3ZWl0YXVzZW5kIiB9LAorICAgICAgICAgICAgeyAiMywwMDQiLCAiZHJlaXRhdXNlbmR2aWVyIiB9LAorICAgICAgICAgICAgeyAiNCw1NjciLCAidmllcnRhdXNlbmRmXHUwMGZjbmZodW5kZXJ0c2llYmVudW5kc2VjaHppZyIgfSwKKyAgICAgICAgICAgIHsgIjE1LDk0MyIsICJmXHUwMGZjbmZ6ZWhudGF1c2VuZG5ldW5odW5kZXJ0ZHJlaXVuZHZpZXJ6aWciIH0sCisgICAgICAgICAgICB7ICIyLDM0NSw2NzgiLCAiendlaSBNaWxsaW9uZW4gZHJlaWh1bmRlcnRmXHUwMGZjbmZ1bmR2aWVyemlndGF1c2VuZCIKKyAgICAgICAgICAgICAgKyAic2VjaHNodW5kZXJ0YWNodHVuZHNpZWJ6aWciIH0KKyAgICAgICAgfTsKKworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCB0ZXN0RGF0YSwgdHJ1ZSk7CisKKyAgICAgICAgZm9ybWF0dGVyLnNldExlbmllbnRQYXJzZU1vZGUodHJ1ZSk7CisgICAgICAgIFN0cmluZ1tdW10gbHBUZXN0RGF0YSA9IHsKKyAgICAgICAgICAgIHsgImVpbiBUYXVzZW5kIHNlY2hzIEh1bmRlcnQgZnVlbmZ1bmRkcmVpc3NpZyIsICIxLDYzNSIgfQorICAgICAgICB9OworICAgICAgICBkb0xlbmllbnRQYXJzZVRlc3QoZm9ybWF0dGVyLCBscFRlc3REYXRhKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGEgc2ltcGxlIHNwb3QgY2hlY2sgb24gdGhlIEdlcm1hbiBzcGVsbG91dCBydWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RUaGFpU3BlbGxvdXQoKSB7CisgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIKKyAgICAgICAgICAgID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChuZXcgTG9jYWxlKCJ0aCIsICJUSCIsICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQuU1BFTExPVVQpOworICAgICAgICBTdHJpbmdbXVtdIHRlc3REYXRhID0geworICAgICAgICAgICAgeyAiMCIsICJcdTBlMjhcdTBlMzlcdTBlMTlcdTBlMjJcdTBlNGMiIH0sCisgICAgICAgICAgICB7ICIxIiwgIlx1MGUyYlx1MGUxOVx1MGUzNlx1MGU0OFx1MGUwNyIgfSwKKyAgICAgICAgICAgIHsgIjEwIiwgIlx1MGUyYVx1MGUzNFx1MGUxYSIgfSwKKyAgICAgICAgICAgIHsgIjExIiwgIlx1MGUyYVx1MGUzNFx1MGUxYVx1MGU0MFx1MGUyZFx1MGU0N1x1MGUxNCIgfSwKKyAgICAgICAgICAgIHsgIjIxIiwgIlx1MGUyMlx1MGUzNVx1MGU0OFx1MGUyYVx1MGUzNFx1MGUxYVx1MGU0MFx1MGUyZFx1MGU0N1x1MGUxNCIgfSwKKyAgICAgICAgICAgIHsgIjEwMSIsICJcdTBlMmJcdTBlMTlcdTBlMzZcdTBlNDhcdTBlMDdcdTBlMjNcdTBlNDlcdTBlMmRcdTBlMjJcdTBlMmJcdTBlMTlcdTBlMzZcdTBlNDhcdTBlMDciIH0sCisgICAgICAgICAgICB7ICIxLjIzNCIsICJcdTBlMmJcdTBlMTlcdTBlMzZcdTBlNDhcdTBlMDdcdTBlMDhcdTBlMzhcdTBlMTRcdTBlMmFcdTBlMmRcdTBlMDdcdTBlMmFcdTBlMzJcdTBlMjFcdTBlMmFcdTBlMzVcdTBlNDgiIH0sCisgICAgICAgICAgICB7ICIyMS40NSIsICJcdTBlMjJcdTBlMzVcdTBlNDhcdTBlMmFcdTBlMzRcdTBlMWFcdTBlNDBcdTBlMmRcdTBlNDdcdTBlMTRcdTBlMDhcdTBlMzhcdTBlMTRcdTBlMmFcdTBlMzVcdTBlNDhcdTBlMmJcdTBlNDlcdTBlMzIiIH0sCisgICAgICAgICAgICB7ICIyMi40NSIsICJcdTBlMjJcdTBlMzVcdTBlNDhcdTBlMmFcdTBlMzRcdTBlMWFcdTBlMmFcdTBlMmRcdTBlMDdcdTBlMDhcdTBlMzhcdTBlMTRcdTBlMmFcdTBlMzVcdTBlNDhcdTBlMmJcdTBlNDlcdTBlMzIiIH0sCisgICAgICAgICAgICB7ICIyMy40NSIsICJcdTBlMjJcdTBlMzVcdTBlNDhcdTBlMmFcdTBlMzRcdTBlMWFcdTBlMmFcdTBlMzJcdTBlMjFcdTBlMDhcdTBlMzhcdTBlMTRcdTBlMmFcdTBlMzVcdTBlNDhcdTBlMmJcdTBlNDlcdTBlMzIiIH0sCisgICAgICAgICAgICB7ICIxMjMuNDUiLCAiXHUwZTJiXHUwZTE5XHUwZTM2XHUwZTQ4XHUwZTA3XHUwZTIzXHUwZTQ5XHUwZTJkXHUwZTIyXHUwZTIyXHUwZTM1XHUwZTQ4XHUwZTJhXHUwZTM0XHUwZTFhXHUwZTJhXHUwZTMyXHUwZTIxXHUwZTA4XHUwZTM4XHUwZTE0XHUwZTJhXHUwZTM1XHUwZTQ4XHUwZTJiXHUwZTQ5XHUwZTMyIiB9LAorICAgICAgICAgICAgeyAiMTIsMzQ1LjY3OCIsICJcdTBFMkJcdTBFMTlcdTBFMzZcdTBFNDhcdTBFMDdcdTBFMkJcdTBFMjFcdTBFMzdcdTBFNDhcdTBFMTlcdTBFMkFcdTBFMkRcdTBFMDdcdTBFMUVcdTBFMzFcdTBFMTlcdTBFMkFcdTBFMzJcdTBFMjFcdTBFMjNcdTBFNDlcdTBFMkRcdTBFMjJcdTBFMkFcdTBFMzVcdTBFNDhcdTBFMkFcdTBFMzRcdTBFMUFcdTBFMkJcdTBFNDlcdTBFMzJcdTBFMDhcdTBFMzhcdTBFMTRcdTBFMkJcdTBFMDFcdTBFNDBcdTBFMDhcdTBFNDdcdTBFMTRcdTBFNDFcdTBFMUJcdTBFMTQiIH0sCisgICAgICAgIH07CisKKyAgICAgICAgZG9UZXN0KGZvcm1hdHRlciwgdGVzdERhdGEsIHRydWUpOworCisgICAgICAgIC8qCisgICAgICAgICAgZm9ybWF0dGVyLnNldExlbmllbnRQYXJzZU1vZGUodHJ1ZSk7CisgICAgICAgICAgU3RyaW5nW11bXSBscFRlc3REYXRhID0geworICAgICAgICAgIHsgImVpbiBUYXVzZW5kIHNlY2hzIEh1bmRlcnQgZnVlbmZ1bmRkcmVpc3NpZyIsICIxLDYzNSIgfQorICAgICAgICAgIH07CisgICAgICAgICAgZG9MZW5pZW50UGFyc2VUZXN0KGZvcm1hdHRlciwgbHBUZXN0RGF0YSk7CisgICAgICAgICovCisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEZyYWN0aW9uYWxSdWxlU2V0KCkgeworCisKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlciA9CisgICAgICAgICAgICBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KGZyYWNSdWxlcywgTG9jYWxlLkVOR0xJU0gpOworCisgICAgICAgIFN0cmluZ1tdW10gdGVzdERhdGEgPSB7CisgICAgICAgICAgICB7ICIwIiwgIjAiIH0sCisgICAgICAgICAgICB7ICIuMSIsICIxLzEwIiB9LAorICAgICAgICAgICAgeyAiLjExIiwgIjEvOSIgfSwKKyAgICAgICAgICAgIHsgIi4xMjUiLCAiMS84IiB9LAorICAgICAgICAgICAgeyAiLjE0MjgiLCAiMS83IiB9LAorICAgICAgICAgICAgeyAiLjE2NjciLCAiMS82IiB9LAorICAgICAgICAgICAgeyAiLjIiLCAiMS81IiB9LAorICAgICAgICAgICAgeyAiLjI1IiwgIjEvNCIgfSwKKyAgICAgICAgICAgIHsgIi4zMzMiLCAiMS8zIiB9LAorICAgICAgICAgICAgeyAiLjUiLCAiMS8yIiB9LAorICAgICAgICAgICAgeyAiMS4xIiwgIjEgMS8xMCIgfSwKKyAgICAgICAgICAgIHsgIjIuMTEiLCAiMiAxLzkiIH0sCisgICAgICAgICAgICB7ICIzLjEyNSIsICIzIDEvOCIgfSwKKyAgICAgICAgICAgIHsgIjQuMTQyOCIsICI0IDEvNyIgfSwKKyAgICAgICAgICAgIHsgIjUuMTY2NyIsICI1IDEvNiIgfSwKKyAgICAgICAgICAgIHsgIjYuMiIsICI2IDEvNSIgfSwKKyAgICAgICAgICAgIHsgIjcuMjUiLCAiNyAxLzQiIH0sCisgICAgICAgICAgICB7ICI4LjMzMyIsICI4IDEvMyIgfSwKKyAgICAgICAgICAgIHsgIjkuNSIsICI5IDEvMiIgfSwKKyAgICAgICAgICAgIHsgIi4yMjIyIiwgIjIvOSIgfSwKKyAgICAgICAgICAgIHsgIi40NDQ0IiwgIjQvOSIgfSwKKyAgICAgICAgICAgIHsgIi41NTU1IiwgIjUvOSIgfSwKKyAgICAgICAgICAgIHsgIjEuMjg1NiIsICIxIDIvNyIgfQorICAgICAgICB9OworICAgICAgICBkb1Rlc3QoZm9ybWF0dGVyLCB0ZXN0RGF0YSwgZmFsc2UpOyAvLyBleGFjdCB2YWx1ZXMgYXJlbid0IHBhcnNhYmxlIGZyb20gZnJhY3Rpb25zCisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFN3ZWRpc2hTcGVsbG91dCgpCisgICAgeworICAgICAgICBMb2NhbGUgbG9jYWxlID0gbmV3IExvY2FsZSgic3YiLCAiIiwgIiIpOworICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyID0gbmV3IFJ1bGVCYXNlZE51bWJlckZvcm1hdChsb2NhbGUsIFJ1bGVCYXNlZE51bWJlckZvcm1hdC5TUEVMTE9VVCk7CisKKyAgICAgICAgU3RyaW5nW11bXSB0ZXN0RGF0YURlZmF1bHQgPSB7CisgICAgICAgICAgICB7ICIxMDEiLCAiZXR0aHVuZHJhXHUwMGFkZW4iIH0sCisgICAgICAgICAgICB7ICIxMjMiLCAiZXR0aHVuZHJhXHUwMGFkdGp1Z290cmUiIH0sCisgICAgICAgICAgICB7ICIxLDAwMSIsICJldHR1c2VuIGVuIiB9LAorICAgICAgICAgICAgeyAiMSwxMDAiLCAiZXR0dXNlbiBldHRodW5kcmEiIH0sCisgICAgICAgICAgICB7ICIxLDEwMSIsICJldHR1c2VuIGV0dGh1bmRyYVx1MDBhZGVuIiB9LAorICAgICAgICAgICAgeyAiMSwyMzQiLCAiZXR0dXNlbiB0dlx1MDBlNWh1bmRyYVx1MDBhZHRyZXR0aW9meXJhIiB9LAorICAgICAgICAgICAgeyAiMTAsMDAxIiwgInRpb1x1MDBhZHR1c2VuIGVuIiB9LAorICAgICAgICAgICAgeyAiMTEsMDAwIiwgImVsdmFcdTAwYWR0dXNlbiIgfSwKKyAgICAgICAgICAgIHsgIjEyLDAwMCIsICJ0b2x2XHUwMGFkdHVzZW4iIH0sCisgICAgICAgICAgICB7ICIyMCwwMDAiLCAidGp1Z29cdTAwYWR0dXNlbiIgfSwKKyAgICAgICAgICAgIHsgIjIxLDAwMCIsICJ0anVnb2VuXHUwMGFkdHVzZW4iIH0sCisgICAgICAgICAgICB7ICIyMSwwMDEiLCAidGp1Z29lblx1MDBhZHR1c2VuIGVuIiB9LAorICAgICAgICAgICAgeyAiMjAwLDAwMCIsICJ0dlx1MDBlNWh1bmRyYVx1MDBhZHR1c2VuIiB9LAorICAgICAgICAgICAgeyAiMjAxLDAwMCIsICJ0dlx1MDBlNWh1bmRyYVx1MDBhZGVuXHUwMGFkdHVzZW4iIH0sCisgICAgICAgICAgICB7ICIyMDAsMjAwIiwgInR2XHUwMGU1aHVuZHJhXHUwMGFkdHVzZW4gdHZcdTAwZTVodW5kcmEiIH0sCisgICAgICAgICAgICB7ICIyLDAwMiwwMDAiLCAidHZcdTAwZTUgbWlsam9uZXIgdHZcdTAwZTVcdTAwYWR0dXNlbiIgfSwKKyAgICAgICAgICAgIHsgIjEyLDM0NSw2NzgiLCAidG9sdiBtaWxqb25lciB0cmVodW5kcmFcdTAwYWRmeXJ0aW9mZW1cdTAwYWR0dXNlbiBzZXhodW5kcmFcdTAwYWRzanV0dGlvXHUwMGU1dHRhIiB9LAorICAgICAgICAgICAgeyAiMTIzLDQ1Ni43ODkiLCAiZXR0aHVuZHJhXHUwMGFkdGp1Z290cmVcdTAwYWR0dXNlbiBmeXJhaHVuZHJhXHUwMGFkZmVtdGlvc2V4IGtvbW1hIHNqdSBcdTAwZTV0dGEgbmlvIiB9LAorICAgICAgICAgICAgeyAiLTEyLDM0NS42NzgiLCAibWludXMgdG9sdlx1MDBhZHR1c2VuIHRyZWh1bmRyYVx1MDBhZGZ5cnRpb2ZlbSBrb21tYSBzZXggc2p1IFx1MDBlNXR0YSIgfQorICAgICAgICB9OworCisgICAgICAgIGxvZ2xuKCJ0ZXN0aW5nIGRlZmF1bHQgcnVsZXMiKTsKKyAgICAgICAgZG9UZXN0KGZvcm1hdHRlciwgdGVzdERhdGFEZWZhdWx0LCB0cnVlKTsKKworICAgICAgICBTdHJpbmdbXVtdIHRlc3REYXRhTmV1dHJ1bSA9IHsKKyAgICAgICAgICAgIHsgIjEwMSIsICJldHRodW5kcmFcdTAwYWRldHQiIH0sCisgICAgICAgICAgICB7ICIxLDAwMSIsICJldHR1c2VuIGV0dCIgfSwKKyAgICAgICAgICAgIHsgIjEsMTAxIiwgImV0dHVzZW4gZXR0aHVuZHJhXHUwMGFkZXR0IiB9LAorICAgICAgICAgICAgeyAiMTAsMDAxIiwgInRpb1x1MDBhZHR1c2VuIGV0dCIgfSwKKyAgICAgICAgICAgIHsgIjIxLDAwMSIsICJ0anVnb2VuXHUwMGFkdHVzZW4gZXR0IiB9CisgICAgICAgIH07CisKKyAgICAgICAgZm9ybWF0dGVyLnNldERlZmF1bHRSdWxlU2V0KCIlbmV1dHJ1bSIpOworICAgICAgICBsb2dsbigidGVzdGluZyBuZXV0cnVtIHJ1bGVzIik7CisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIHRlc3REYXRhTmV1dHJ1bSwgdHJ1ZSk7CisKKyAgICAgICAgU3RyaW5nW11bXSB0ZXN0RGF0YVllYXIgPSB7CisgICAgICAgICAgICB7ICIxMDEiLCAiZXR0aHVuZHJhXHUwMGFkZXR0IiB9LAorICAgICAgICAgICAgeyAiOTAwIiwgIm5pb2h1bmRyYSIgfSwKKyAgICAgICAgICAgIHsgIjEsMDAxIiwgInRpb2h1bmRyYVx1MDBhZGV0dCIgfSwKKyAgICAgICAgICAgIHsgIjEsMTAwIiwgImVsdmFodW5kcmEiIH0sCisgICAgICAgICAgICB7ICIxLDEwMSIsICJlbHZhaHVuZHJhXHUwMGFkZXR0IiB9LAorICAgICAgICAgICAgeyAiMSwyMzQiLCAidG9sdmh1bmRyYVx1MDBhZHRyZXR0aW9meXJhIiB9LAorICAgICAgICAgICAgeyAiMiwwMDEiLCAidGp1Z29odW5kcmFcdTAwYWRldHQiIH0sCisgICAgICAgICAgICB7ICIxMCwwMDEiLCAidGlvXHUwMGFkdHVzZW4gZXR0IiB9CisgICAgICAgIH07CisKKyAgICAgICAgZm9ybWF0dGVyLnNldERlZmF1bHRSdWxlU2V0KCIleWVhciIpOworICAgICAgICBsb2dsbigidGVzdGluZyB5ZWFyIHJ1bGVzIik7CisgICAgICAgIGRvVGVzdChmb3JtYXR0ZXIsIHRlc3REYXRhWWVhciwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBkb1Rlc3QoUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlciwgU3RyaW5nW11bXSB0ZXN0RGF0YSwKKyAgICAgICAgICAgICAgICBib29sZWFuIHRlc3RQYXJzaW5nKSB7CisgICAgICAgIE51bWJlckZvcm1hdCBkZWNGbXQgPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0RGF0YS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyBudW1iZXIgPSB0ZXN0RGF0YVtpXVswXTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRXb3JkcyA9IHRlc3REYXRhW2ldWzFdOworICAgICAgICAgICAgICAgIGxvZ2xuKCJ0ZXN0WyIgKyBpICsgIl0gbnVtYmVyOiAiICsgbnVtYmVyICsgIiB0YXJnZXQ6ICIgKyBleHBlY3RlZFdvcmRzKTsKKyAgICAgICAgICAgICAgICBOdW1iZXIgbnVtID0gZGVjRm10LnBhcnNlKG51bWJlcik7CisgICAgICAgICAgICAgICAgU3RyaW5nIGFjdHVhbFdvcmRzID0gZm9ybWF0dGVyLmZvcm1hdChudW0pOworCisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxXb3Jkcy5lcXVhbHMoZXhwZWN0ZWRXb3JkcykpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIlNwb3QgY2hlY2sgZmFpbGVkOiBmb3IgIiArIG51bWJlciArICIsIGV4cGVjdGVkXG4gICAgIgorICAgICAgICAgICAgICAgICAgICAgICAgICArIGV4cGVjdGVkV29yZHMgKyAiLCBidXQgZ290XG4gICAgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbFdvcmRzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGVzdFBhcnNpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFjdHVhbE51bWJlciA9IGRlY0ZtdC5mb3JtYXQoZm9ybWF0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wYXJzZShhY3R1YWxXb3JkcykpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTnVtYmVyLmVxdWFscyhudW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiU3BvdCBjaGVjayBmYWlsZWQ6IGZvciAiICsgYWN0dWFsV29yZHMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQgIiArIG51bWJlciArICIsIGJ1dCBnb3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoIChUaHJvd2FibGUgZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGVycmxuKCJUZXN0IGZhaWxlZCB3aXRoIGV4Y2VwdGlvbjogIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGRvTGVuaWVudFBhcnNlVGVzdChSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdW10gdGVzdERhdGEpIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IGRlY0ZtdCA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZShMb2NhbGUuVVMpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3REYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHdvcmRzID0gdGVzdERhdGFbaV1bMF07CisgICAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkTnVtYmVyID0gdGVzdERhdGFbaV1bMV07CisgICAgICAgICAgICAgICAgU3RyaW5nIGFjdHVhbE51bWJlciA9IGRlY0ZtdC5mb3JtYXQoZm9ybWF0dGVyLnBhcnNlKHdvcmRzKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE51bWJlci5lcXVhbHMoZXhwZWN0ZWROdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJMZW5pZW50LXBhcnNlIHNwb3QgY2hlY2sgZmFpbGVkOiBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICArIHdvcmRzICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVjdGVkTnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgYnV0IGdvdCAiICsgYWN0dWFsTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICAgICAgICBlcnJsbigiVGVzdCBmYWlsZWQgd2l0aCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9Xcml0ZU51bWJlckZvcm1hdFNlcmlhbFRlc3REYXRhLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvZm9ybWF0L1dyaXRlTnVtYmVyRm9ybWF0U2VyaWFsVGVzdERhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NzA0NTZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9Xcml0ZU51bWJlckZvcm1hdFNlcmlhbFRlc3REYXRhLmphdmEKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9Xcml0ZU51bWJlckZvcm1hdFNlcmlhbFRlc3REYXRhLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wMi8yMiAwMDoyODoxMSAkCisgKiAkUmV2aXNpb246IDEuMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QuZm9ybWF0OworCitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEuaW8uKjsKKworLyoqCisgKiBAdmVyc2lvbiAJMS4wCisgKiBAYXV0aG9yIFJhbSBWaXN3YW5hZGhhCisgKi8KK3B1YmxpYyBjbGFzcyBXcml0ZU51bWJlckZvcm1hdFNlcmlhbFRlc3REYXRhIHsKKwlzdGF0aWMgZmluYWwgU3RyaW5nIGhlYWRlcj0iLypcbiIgKworCQkJCQkJCSAgICIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIisKKwkJCQkJCQkgICAiICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICpcbiIrCisJCQkJCQkJICAgIiAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4iKworCQkJCQkJCSAgICIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIisKKwkJCQkJCQkgICAiICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2Zvcm1hdC9Xcml0ZU51bWJlckZvcm1hdFNlcmlhbFRlc3REYXRhLmphdmEsdiAkXG4iKyAKKwkJCQkJCQkgICAiICogJERhdGU6IDIwMDIvMDIvMjIgMDA6Mjg6MTEgJFxuIisgCisJCQkJCQkJICAgIiAqICRSZXZpc2lvbjogMS4xICRcbiIrCisJCQkJCQkJICAgIiAqXG4iKworCQkJCQkJCSAgICIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIrCisJCQkJCQkJICAgIiAqL1xuXG4iKworCQkJCQkJCSAgICJwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDtcblxuIisKKwkJCQkJCQkJCisJCQkJCQkJICAgInB1YmxpYyBjbGFzcyBOdW1iZXJGb3JtYXRTZXJpYWxUZXN0RGF0YSB7XG4iKworCQkJCQkJCSAgICIgICAgLy9nZXQgQ29udGVudFxuIisKKwkJCQkJCQkgICAiICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdW10gZ2V0Q29udGVudCgpIHtcbiIrCisJCQkJCQkJICAgIgkgICAgICAgIHJldHVybiBjb250ZW50O1xuIisKKwkJCQkJCQkgICAiICAgIH1cbiI7CisJCQkJCQkJICAKKwlzdGF0aWMgZmluYWwgU3RyaW5nIGZvb3RlciA9IlxuICAgIGZpbmFsIHN0YXRpYyBieXRlW11bXSBjb250ZW50ID0ge2dlbmVyYWxJbnN0YW5jZSwgY3VycmVuY3lJbnN0YW5jZSwgcGVyY2VudEluc3RhbmNlLCBzY2llbnRpZmljSW5zdGFuY2V9O1xuIisKKwkJCQkJCQkJIn1cbiI7CQkJCQkJICAgCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisJCU51bWJlckZvcm1hdCBuZiAJPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoTG9jYWxlLlVTKTsKKwkJTnVtYmVyRm9ybWF0IG5mYwk9IE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKExvY2FsZS5VUyk7CisJCU51bWJlckZvcm1hdCBuZnAgCT0gTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZShMb2NhbGUuVVMpOworCQlOdW1iZXJGb3JtYXQgbmZzcCAJPSBOdW1iZXJGb3JtYXQuZ2V0U2NpZW50aWZpY0luc3RhbmNlKExvY2FsZS5VUyk7CisJCQorCQl0cnl7CisJCQlGaWxlT3V0cHV0U3RyZWFtIGZpbGUgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiTnVtYmVyRm9ybWF0U2VyaWFsVGVzdERhdGEuamF2YSIpOworCQkJZmlsZS53cml0ZShoZWFkZXIuZ2V0Qnl0ZXMoKSk7CisJCQl3cml0ZShmaWxlLChPYmplY3QpbmYsImdlbmVyYWxJbnN0YW5jZSIsICIvL051bWJlckZvcm1hdC5nZXRJbnN0YW5jZShMb2NhbGUuVVMpIik7CisJCQl3cml0ZShmaWxlLChPYmplY3QpbmZjLCJjdXJyZW5jeUluc3RhbmNlIiwiLy9OdW1iZXJGb3JtYXQuZ2V0Q3VycmVuY3lJbnN0YW5jZShMb2NhbGUuVVMpIik7CisJCQl3cml0ZShmaWxlLChPYmplY3QpbmZwLCJwZXJjZW50SW5zdGFuY2UiLCIvL051bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UoTG9jYWxlLlVTKSIpOworCQkJd3JpdGUoZmlsZSwoT2JqZWN0KW5mc3AsInNjaWVudGlmaWNJbnN0YW5jZSIsIi8vTnVtYmVyRm9ybWF0LmdldFNjaWVudGlmaWNJbnN0YW5jZShMb2NhbGUuVVMpIik7CisJCQlmaWxlLndyaXRlKGZvb3Rlci5nZXRCeXRlcygpKTsJCQkKKwkJCWZpbGUuY2xvc2UoKTsKKwkJfWNhdGNoKCBFeGNlcHRpb24gZSl7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlKEZpbGVPdXRwdXRTdHJlYW0gZmlsZSxPYmplY3QgbyAsU3RyaW5nIG5hbWUsU3RyaW5nIGNvbW1lbnQpeworCQl0cnl7CisJCSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnRzID0gIG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJCU9iamVjdE91dHB1dFN0cmVhbSBvcyA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oYnRzKTsJCisJCQlvcy53cml0ZU9iamVjdCgoT2JqZWN0KW8pOworCQkJb3MuZmx1c2goKTsKKwkJCW9zLmNsb3NlKCk7CisJCQlieXRlW10gbXlBcnIgPSBidHMudG9CeXRlQXJyYXkoKTsKKwkJCVN0cmluZyB0ZW1wID0gbmV3IFN0cmluZyhteUFycik7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAiK2NvbW1lbnQrICIgOiIpOworCQkJLypTeXN0ZW0ub3V0LnByaW50bG4oIm1pbmltdW1JbnRlZ2VyRGlnaXRzIDogIiAgKyAodGVtcC5pbmRleE9mKCJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpKyJtaW5pbXVtSW50ZWdlckRpZ2l0cyIubGVuZ3RoKCkpKTsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigibWF4aW11bUludGVnZXJEaWdpdHMgOiAiICArICh0ZW1wLmluZGV4T2YoIm1heGltdW1JbnRlZ2VyRGlnaXRzIikrIm1heGltdW1JbnRlZ2VyRGlnaXRzIi5sZW5ndGgoKSkpOworCQkJU3lzdGVtLm91dC5wcmludGxuKCJtaW5pbXVtRnJhY3Rpb25EaWdpdHMgOiAiICsgKHRlbXAuaW5kZXhPZigibWluaW11bUZyYWN0aW9uRGlnaXRzIikrIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIubGVuZ3RoKCkpKTsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigibWF4aW11bUZyYWN0aW9uRGlnaXRzIDogIiArICh0ZW1wLmluZGV4T2YoIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpKyJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiLmxlbmd0aCgpKSk7CisJCQkqLworCQkJLy9maWxlLndyaXRlKG15QXJyKTsKKwkJCWZpbGUud3JpdGUoKCJcbiAgICAiK2NvbW1lbnQpLmdldEJ5dGVzKCkpOworCQkJZmlsZS53cml0ZShuZXcgU3RyaW5nKCJcbiAgICBzdGF0aWMgYnl0ZVtdICIrbmFtZSsiID0gbmV3IGJ5dGVbXXsgXG4iKS5nZXRCeXRlcygiVVRGLTgiKSk7CisJCQlmaWxlLndyaXRlKCAiICAgICAgICAiLmdldEJ5dGVzKCkpOworCQkJZm9yKGludCBpPTA7IGk8bXlBcnIubGVuZ3RoOyBpKyspeworCQkJCWZpbGUud3JpdGUoU3RyaW5nLnZhbHVlT2YoKGludClteUFycltpXSkuZ2V0Qnl0ZXMoKSk7CisJCQkJZmlsZS53cml0ZSggIiwgIi5nZXRCeXRlcygpKTsKKwkJCQlpZigoaSsxKSUyMCA9PSAwKXsKKwkJCQkJZmlsZS53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOworCQkJCQlmaWxlLndyaXRlKCAiICAgICAgICAiLmdldEJ5dGVzKCkpOworCQkJCX0KKwkJCX0KKwkJCWZpbGUud3JpdGUobmV3IFN0cmluZygiXG4gICAgfTtcbiIpLmdldEJ5dGVzKCJVVEYtOCIpKTsKKwkJfWNhdGNoKCBFeGNlcHRpb24gZSl7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9pdGVyYXRvci9UZXN0VUNoYXJhY3Rlckl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvaXRlcmF0b3IvVGVzdFVDaGFyYWN0ZXJJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYjY1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvaXRlcmF0b3IvVGVzdFVDaGFyYWN0ZXJJdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsNTg2IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2l0ZXJhdG9yL1Rlc3RVQ2hhcmFjdGVySXRlcmF0b3IuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzExLzIyIDAwOjIxOjAzICQKKyAqICRSZXZpc2lvbjogMS44ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lml0ZXJhdG9yOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlJlcGxhY2VhYmxlU3RyaW5nOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnRleHQuU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3I7CisKKy8qKgorICogQGF1dGhvciByYW0KKyAqCisgKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgorICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLgorICogVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiB0eXBlIGNvbW1lbnRzIGdvIHRvCisgKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0VUNoYXJhY3Rlckl0ZXJhdG9yIGV4dGVuZHMgVGVzdEZtd2t7CisKKyAgICAvLyBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAqLworICAgIHB1YmxpYyBUZXN0VUNoYXJhY3Rlckl0ZXJhdG9yKCkKKyAgICB7CisgICAgfQorICAKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgICAvKioKKyAgICAqIFRlc3RpbmcgY2xvbmluZworICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uCisgICAgeworICAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKCJ0ZXN0aW5nIik7CisgICAgICAgICBVQ2hhcmFjdGVySXRlcmF0b3IgY2xvbmVkID0gKFVDaGFyYWN0ZXJJdGVyYXRvcilpdGVyYXRvci5jbG9uZSgpOworICAgICAgICAgaW50IGNvbXBsZXRlZCA9IDA7CisgICAgICAgICB3aGlsZSAoY29tcGxldGVkICE9IFVDaGFyYWN0ZXJJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICBjb21wbGV0ZWQgPSBpdGVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoY29tcGxldGVkICE9IGNsb25lZC5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ2xvbmVkIG9wZXJhdGlvbiBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHZvaWQgZ2V0VGV4dChVQ2hhcmFjdGVySXRlcmF0b3IgaXRlcmF0b3IsIFN0cmluZyByZXN1bHQpeworICAgICAgICAvKiB0ZXN0IGdldFRleHQgKi8KKyAgICAgICAgY2hhcltdIGJ1Zj0gbmV3IGNoYXJbMV07CisJCWZvcig7Oyl7CisJCSAgICB0cnl7CisJCSAgICAgICAgaXRlcmF0b3IuZ2V0VGV4dChidWYpOworCQkgICAgICAgIGJyZWFrOworCQkgICAgfWNhdGNoKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSl7CisJCSAgICAgICAgYnVmID0gbmV3IGNoYXJbaXRlcmF0b3IuZ2V0TGVuZ3RoKCldOworCQkgICAgfQorCQl9CisgICAgICAgIGlmKHJlc3VsdC5jb21wYXJlVG8obmV3IFN0cmluZyhidWYsMCxpdGVyYXRvci5nZXRMZW5ndGgoKSkpIT0wKXsKKyAgICAgICAgICAgIGVycmxuKCJnZXRUZXh0IGZhaWxlZCBmb3IgaXRlcmF0b3IiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0aW5nIGl0ZXJhdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RJdGVyYXRpb24oKQorICAgIHsKKyAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yICA9IFVDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVEVSQVRJT05fU1RSSU5HXyk7CisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyYXRvcjIgPSBVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRFUkFUSU9OX1NUUklOR18pOworICAgICAgICBpdGVyYXRvci5zZXRUb1N0YXJ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKGl0ZXJhdG9yLmN1cnJlbnQoKSAhPSBJVEVSQVRJT05fU1RSSU5HXy5jaGFyQXQoMCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJJdGVyYXRvciBmYWlsZWQgcmV0cmlldmluZyBmaXJzdCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgfQorICAgICAgICBpdGVyYXRvci5zZXRUb0xpbWl0KCk7IAorICAgICAgICBpZiAoaXRlcmF0b3IucHJldmlvdXMoKSAhPSBJVEVSQVRJT05fU1RSSU5HXy5jaGFyQXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVEVSQVRJT05fU1RSSU5HXy5sZW5ndGgoKSAtIDEpKSB7CisgICAgICAgICAgICBlcnJsbigiSXRlcmF0b3IgZmFpbGVkIHJldHJpZXZpbmcgbGFzdCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChpdGVyYXRvci5nZXRMZW5ndGgoKSAhPSBJVEVSQVRJT05fU1RSSU5HXy5sZW5ndGgoKSkgeworICAgICAgICAgICAgZXJybG4oIkl0ZXJhdG9yIGZhaWxlZCBkZXRlcm1pbmluZyBiZWdpbiBhbmQgZW5kIGluZGV4Iik7CisgICAgICAgIH0gIAorICAgICAgICBpdGVyYXRvcjIuc2V0SW5kZXgoMCk7CisgICAgICAgIGl0ZXJhdG9yLnNldEluZGV4KDApOworICAgICAgICBpbnQgY2ggPSAwOworICAgICAgICB3aGlsZSAoY2ggIT0gVUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0ZXJhdG9yMi5nZXRJbmRleCgpOworICAgICAgICAgICAgY2ggPSBpdGVyYXRvcjIubmV4dENvZGVQb2ludCgpOworICAgICAgICAgICAgaWYgKGluZGV4ICE9IElURVJBVElPTl9TVVBQTEVNRU5UQVJZX0lOREVYKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoICE9IChpbnQpaXRlcmF0b3IubmV4dCgpICYmIAorICAgICAgICAgICAgICAgICAgICBjaCAhPSBVQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgbWlzbWF0Y2ggaW4gbmV4dCgpIGFuZCBuZXh0Q29kZVBvaW50KCkiKTsgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKFVURjE2LmdldExlYWRTdXJyb2dhdGUoY2gpICE9IGl0ZXJhdG9yLm5leHQoKSB8fAorICAgICAgICAgICAgICAgICAgICBVVEYxNi5nZXRUcmFpbFN1cnJvZ2F0ZShjaCkgIT0gaXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBtaXNtYXRjaCBpbiBuZXh0IGFuZCBuZXh0Q29kZVBvaW50IGZvciAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpdGVyYXRvci5zZXRJbmRleChJVEVSQVRJT05fU1RSSU5HXy5sZW5ndGgoKSk7CisgICAgICAgIGl0ZXJhdG9yMi5zZXRJbmRleChJVEVSQVRJT05fU1RSSU5HXy5sZW5ndGgoKSk7CisgICAgICAgIHdoaWxlIChjaCAhPSBVQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgaW50IGluZGV4ID0gaXRlcmF0b3IyLmdldEluZGV4KCk7CisgICAgICAgICAgICBjaCA9IGl0ZXJhdG9yMi5wcmV2aW91c0NvZGVQb2ludCgpOworICAgICAgICAgICAgaWYgKGluZGV4ICE9IElURVJBVElPTl9TVVBQTEVNRU5UQVJZX0lOREVYKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoICE9IChpbnQpaXRlcmF0b3IucHJldmlvdXMoKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgY2ggIT0gVUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIG1pc21hdGNoIGluIHByZXZpb3VzKCkgYW5kICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAicHJldmlvdXNDb2RlUG9pbnQoKSIpOyAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoVVRGMTYuZ2V0TGVhZFN1cnJvZ2F0ZShjaCkgIT0gaXRlcmF0b3IucHJldmlvdXMoKSB8fCAKKyAgICAgICAgICAgICAgICAgICAgVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoY2gpICE9IGl0ZXJhdG9yLnByZXZpb3VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIG1pc21hdGNoIGluIHByZXZpb3VzIGFuZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInByZXZpb3VzQ29kZVBvaW50IGZvciBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJnKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIFRlc3RVQ2hhcmFjdGVySXRlcmF0b3IgdGVzdCA9IG5ldyBUZXN0VUNoYXJhY3Rlckl0ZXJhdG9yKCk7CisgICAgICAgICAgICB0ZXN0LnJ1bihhcmcpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvL1Rlc3RzIGZvciBuZXcgQVBJIGZvciB1dGYtMTYgc3VwcG9ydCAKKwlwdWJsaWMgdm9pZCBUZXN0SXRlcmF0aW9uVUNoYXIzMigpIHsKKwkgICAgU3RyaW5nIHRleHQ9Ilx1MDA2MVx1MDA2Mlx1ZDg0MVx1ZGMwMlx1MjBhY1x1ZDdmZlx1ZDg0Mlx1ZGMwNlx1ZDgwMVx1ZGMwMFx1MDA2MSI7CisJICAgIGludCBjOworCSAgICBpbnQgaTsKKwkgICAgeworCSAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXIgPSBVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2UodGV4dCk7CisJCisJICAgICAgICBTdHJpbmcgaXRlclRleHQgPSBpdGVyLmdldFRleHQoKTsKKwkgICAgICAgIGlmICghaXRlclRleHQuZXF1YWxzKHRleHQpKQorCSAgICAgICAgICBlcnJsbigiaXRlci5nZXRUZXh0KCkgZmFpbGVkIik7CisJICAgICAgICAKKyAgICAgICAgICAgIGl0ZXIuc2V0SW5kZXgoMSk7CisJICAgICAgICBpZiAoaXRlci5jdXJyZW50Q29kZVBvaW50KCkgIT0gVVRGMTYuY2hhckF0KHRleHQsMSkpCisJICAgICAgICAgICAgZXJybG4oIkl0ZXJhdG9yIGRpZG4ndCBzdGFydCBvdXQgaW4gdGhlIHJpZ2h0IHBsYWNlLiIpOworCQorCSAgICAgICAgaXRlci5zZXRUb1N0YXJ0KCk7CisJICAgICAgICBjPWl0ZXIuY3VycmVudENvZGVQb2ludCgpOworICAgICAgICAgICAgaT0wOworCSAgICAgICAgaT1pdGVyLm1vdmVDb2RlUG9pbnRJbmRleCgxKTsKKwkgICAgICAgIGM9aXRlci5jdXJyZW50Q29kZVBvaW50KCk7CisJICAgICAgICBpZihjICE9IFVURjE2LmNoYXJBdCh0ZXh0LDEpIHx8IGkhPTEpCisJICAgICAgICAgICAgZXJybG4oIm1vdmVDb2RlUG9pbnRJbmRleCgxKSBkaWRuJ3Qgd29yayBjb3JyZWN0bHkgZXhwZWN0ZWQgIisgaGV4KGMpICsiIGdvdCAiK2hleChVVEYxNi5jaGFyQXQodGV4dCwxKSkgKyAiIGk9ICIgKyBpKTsKKwkKKwkgICAgICAgIGk9aXRlci5tb3ZlQ29kZVBvaW50SW5kZXgoMik7CisJICAgICAgICBjPWl0ZXIuY3VycmVudENvZGVQb2ludCgpOworCSAgICAgICAgaWYoYyAhPSBVVEYxNi5jaGFyQXQodGV4dCw0KSB8fCBpIT00KQorCSAgICAgICAgICAgIGVycmxuKCJtb3ZlQ29kZVBvaW50SW5kZXgoMikgZGlkbid0IHdvcmsgY29ycmVjdGx5IGV4cGVjdGVkICIrIGhleChjKSArIiBnb3QgIitoZXgoVVRGMTYuY2hhckF0KHRleHQsNCkpICsgIiBpPSAiICsgaSk7CisgICAgICAgICAgICAgICAgCisJICAgICAgICBpPWl0ZXIubW92ZUNvZGVQb2ludEluZGV4KC0yKTsKKwkgICAgICAgIGM9aXRlci5jdXJyZW50Q29kZVBvaW50KCk7CisJICAgICAgICBpZihjICE9IFVURjE2LmNoYXJBdCh0ZXh0LDEpIHx8IGkhPTEpCisgICAgICAgICAgICAgICAgIGVycmxuKCJtb3ZlQ29kZVBvaW50SW5kZXgoLTIpIGRpZG4ndCB3b3JrIGNvcnJlY3RseSBleHBlY3RlZCAiKyBoZXgoYykgKyIgZ290ICIraGV4KFVURjE2LmNoYXJBdCh0ZXh0LDEpKSArICIgaT0gIiArIGkpOworCisJICAgICAgICBpdGVyLnNldFRvTGltaXQoKTsKKwkgICAgICAgIGk9aXRlci5tb3ZlQ29kZVBvaW50SW5kZXgoLTIpOworCSAgICAgICAgYz1pdGVyLmN1cnJlbnRDb2RlUG9pbnQoKTsKKwkgICAgICAgIGlmKGMgIT0gVVRGMTYuY2hhckF0KHRleHQsKHRleHQubGVuZ3RoKCktMykpIHx8IGkhPSh0ZXh0Lmxlbmd0aCgpLTMpKQorICAgICAgICAgICAgICAgIGVycmxuKCJtb3ZlQ29kZVBvaW50SW5kZXgoLTIpIGRpZG4ndCB3b3JrIGNvcnJlY3RseSBleHBlY3RlZCAiKyBoZXgoYykgKyIgZ290ICIraGV4KFVURjE2LmNoYXJBdCh0ZXh0LCh0ZXh0Lmxlbmd0aCgpLTMpKSApICsgIiBpPSAiICsgaSk7CisJICAgICAgICAKKwkgICAgICAgIGl0ZXIuc2V0VG9TdGFydCgpOworCSAgICAgICAgYyA9IGl0ZXIuY3VycmVudENvZGVQb2ludCgpOworCSAgICAgICAgaSA9IDA7CisJCisJICAgICAgICAvL3Rlc3RpbmcgZmlyc3QzMlBvc3RJbmMsIG5leHRDb2RlUG9pbnRQb3N0SW5jLCBzZXRUb3N0YXJ0CisJICAgICAgICBpID0gMDsKKwkgICAgICAgIGl0ZXIuc2V0VG9TdGFydCgpOworCSAgICAgICAgYyA9aXRlci5uZXh0KCk7CisgICAgICAgICAgICBpZihjICE9IFVURjE2LmNoYXJBdCh0ZXh0LGkpKQorCSAgICAgICAgICAgIGVycmxuKCJmaXJzdDMyUG9zdEluYyBmYWlsZWQuICBFeHBlY3RlZC0+IitoZXgoVVRGMTYuY2hhckF0KHRleHQsaSkpKyIgR290LT4gIitoZXgoYykpOworCSAgICAgICAgaWYoaXRlci5nZXRJbmRleCgpICE9IFVURjE2LmdldENoYXJDb3VudChjKSArIGkpCisJICAgICAgICAgICAgZXJybG4oImdldEluZGV4KCkgYWZ0ZXIgZmlyc3QzMlBvc3RJbmMoKSBmYWlsZWQiKTsKKwkKKwkgICAgICAgIGl0ZXIuc2V0VG9TdGFydCgpOworCSAgICAgICAgaT0wOworCSAgICAgICAgaWYgKGl0ZXIuZ2V0SW5kZXgoKSAhPSAwKQorCSAgICAgICAgICAgIGVycmxuKCJzZXRUb1N0YXJ0IGZhaWxlZCIpOworCSAgICAgICAKKwkgICAgICAgIGxvZ2xuKCJUZXN0aW5nIGZvcndhcmQgaXRlcmF0aW9uLi4uIik7CisJICAgICAgICBkbyB7CisJICAgICAgICAgICAgaWYgKGMgIT0gVUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpCisJICAgICAgICAgICAgICAgIGMgPSBpdGVyLm5leHRDb2RlUG9pbnQoKTsKKwkKKwkgICAgICAgICAgICBpZihjICE9IFVURjE2LmNoYXJBdCh0ZXh0LGkpKQorCSAgICAgICAgICAgICAgICBlcnJsbigiQ2hhcmFjdGVyIG1pc21hdGNoIGF0IHBvc2l0aW9uICIraSsiLCBpdGVyYXRvciBoYXMgIitoZXgoYykrIiwgc3RyaW5nIGhhcyAiK2hleChVVEYxNi5jaGFyQXQodGV4dCxpKSkpOworICAgIAorCSAgICAgICAgICAgIGkrPVVURjE2LmdldENoYXJDb3VudChjKTsKKwkgICAgICAgICAgICBpZihpdGVyLmdldEluZGV4KCkgIT0gaSkKKwkgICAgICAgICAgICAgICAgZXJybG4oImdldEluZGV4KCkgYWZ0ciBuZXh0Q29kZVBvaW50UG9zdEluYygpIGlzbid0IHdvcmtpbmcgcmlnaHQiKTsKKyAgICAgICAgICAgICAgICBjID0gaXRlci5jdXJyZW50Q29kZVBvaW50KCk7ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmKCBjIT1VQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSAmJiBjICE9IFVURjE2LmNoYXJBdCh0ZXh0LGkpKQorICAgICAgICAgICAgICAgICAgICBlcnJsbigiY3VycmVudCgpIGFmdGVyIG5leHRDb2RlUG9pbnRQb3N0SW5jKCkgaXNuJ3Qgd29ya2luZyByaWdodCIpOworCisJICAgICAgICB9IHdoaWxlIChjIT1VQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSk7CisJICAgICAgICBjPWl0ZXIubmV4dENvZGVQb2ludCgpOworCSAgICAgICAgaWYoYyE9IFVDaGFyYWN0ZXJJdGVyYXRvci5ET05FKQorCSAgICAgICAgICAgIGVycmxuKCJuZXh0Q29kZVBvaW50UG9zdEluYygpIGRpZG4ndCByZXR1cm4gRE9ORSBhdCB0aGUgYmVnaW5uaW5nIik7CisJCisJCisJICAgIH0KKwl9ICAKKyAgICAKKyAgICBjbGFzcyBVQ2hhckl0ZXJhdG9yIHsKKyAgICAKKyAgICAgICBwdWJsaWMgVUNoYXJJdGVyYXRvcihpbnRbXSBzcmMsIGludCBsZW4sIGludCBpbmRleCl7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHM9c3JjOworICAgICAgICAgICAgbGVuZ3RoPWxlbjsKKyAgICAgICAgICAgIGk9aW5kZXg7CisgICAgICAgfQorICAgIAorICAgICAgICBwdWJsaWMgaW50IGN1cnJlbnQoKSB7CisgICAgICAgICAgICBpZihpPGxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzW2ldOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgcHVibGljIGludCBuZXh0KCkgeworICAgICAgICAgICAgaWYoaTxsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc1tpKytdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgcHVibGljIGludCBwcmV2aW91cygpIHsKKyAgICAgICAgICAgIGlmKGk+MCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzWy0taV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICBwdWJsaWMgaW50IGdldEluZGV4KCkgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgcHJpdmF0ZSBpbnRbXSBzOworICAgICAgICBwcml2YXRlIGludCBsZW5ndGgsIGk7CisgICAgfTsKKyAgICAvLyBzcmMgYW5kIGV4cGVjdCBzdHJpbmdzCisgICAgcHJpdmF0ZSBmaW5hbCBjaGFyIHNyY1tdPXsKKyAgICAgICAgVVRGMTYuZ2V0TGVhZFN1cnJvZ2F0ZSgweDJmOTk5KSwgVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoMHgyZjk5OSksCisgICAgICAgIFVURjE2LmdldExlYWRTdXJyb2dhdGUoMHgxZDE1ZiksIFVURjE2LmdldFRyYWlsU3Vycm9nYXRlKDB4MWQxNWYpLAorICAgICAgICAweGM0LAorICAgICAgICAweDFlZDAKKyAgICB9OworICAgIHB1YmxpYyB2b2lkIFRlc3RQcmV2aW91c05leHQoKXsKKyAgICAgICAgLy8gaXRlcmF0b3JzCisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyMSA9IFVDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbnN0YW5jZShuZXcgUmVwbGFjZWFibGVTdHJpbmcobmV3IFN0cmluZyhzcmMpKSk7CisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyMiA9IFVDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbnN0YW5jZShzcmMvKmNoYXIgYXJyYXkqLyk7CisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyMyA9IFVDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbnN0YW5jZShuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IobmV3IFN0cmluZyhzcmMpKSk7CisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyNCA9IFVDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbnN0YW5jZShuZXcgU3RyaW5nQnVmZmVyKG5ldyBTdHJpbmcoc3JjKSkpOworICAgICAgICBwcmV2aW91c05leHQoaXRlcjEpOworICAgICAgICBwcmV2aW91c05leHQoaXRlcjIpOworICAgICAgICBwcmV2aW91c05leHQoaXRlcjMpOworICAgICAgICBwcmV2aW91c05leHQoaXRlcjQpOworICAgICAgICBnZXRUZXh0KGl0ZXIxLG5ldyBTdHJpbmcoc3JjKSk7CisgICAgICAgIGdldFRleHQoaXRlcjIsbmV3IFN0cmluZyhzcmMpKTsKKyAgICAgICAgZ2V0VGV4dChpdGVyMyxuZXcgU3RyaW5nKHNyYykpOworICAgICAgICAvKiBnZXRDaGFyYWN0ZXJJdGVyYXRvciAqLworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaXRlcjEgPSBpdGVyMS5nZXRDaGFyYWN0ZXJJdGVyYXRvcigpOworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaXRlcjIgPSBpdGVyMi5nZXRDaGFyYWN0ZXJJdGVyYXRvcigpOworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaXRlcjMgPSBpdGVyMy5nZXRDaGFyYWN0ZXJJdGVyYXRvcigpOworICAgICAgICBpZihjaXRlcjEuZmlyc3QoKSAhPWl0ZXIxLmN1cnJlbnQoKSl7CisgICAgICAgICAgICBlcnJsbigiZ2V0Q2hhcmFjdGVySXRlcmF0b3IgZm9yIGl0ZXIxIGZhaWxlZCIpOworICAgICAgICB9CisgICAgICAgIGlmKGNpdGVyMi5maXJzdCgpICE9aXRlcjIuY3VycmVudCgpKXsKKyAgICAgICAgICAgIGVycmxuKCJnZXRDaGFyYWN0ZXJJdGVyYXRvciBmb3IgaXRlcjIgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAgICAgaWYoY2l0ZXIzLmZpcnN0KCkgIT1pdGVyMy5jdXJyZW50KCkpeworICAgICAgICAgICAgZXJybG4oImdldENoYXJhY3Rlckl0ZXJhdG9yIGZvciBpdGVyMyBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICAvKiBUZXN0IGNsb25lKCkgICYmIG1vdmVJbmRleCgpKi8KKyAgICAgICAgdHJ5eworCSAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIGNsb25lMSA9IChVQ2hhcmFjdGVySXRlcmF0b3IpaXRlcjEuY2xvbmUoKTsKKwkgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBjbG9uZTIgPSAoVUNoYXJhY3Rlckl0ZXJhdG9yKWl0ZXIyLmNsb25lKCk7CisJICAgICAgICBVQ2hhcmFjdGVySXRlcmF0b3IgY2xvbmUzID0gKFVDaGFyYWN0ZXJJdGVyYXRvcilpdGVyMy5jbG9uZSgpOworCSAgICAgICAgaWYoY2xvbmUxLm1vdmVJbmRleCgzKSE9aXRlcjEubW92ZUluZGV4KDMpKXsKKwkgICAgICAgICAgICBlcnJsbigibW92ZUluZGV4IGZvciBpdGVyMSBmYWlsZWQiKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmKGNsb25lMi5tb3ZlSW5kZXgoMykhPWl0ZXIyLm1vdmVJbmRleCgzKSl7CisJICAgICAgICAgICAgZXJybG4oIm1vdmVJbmRleCBmb3IgaXRlcjIgZmFpbGVkIik7CisJICAgICAgICB9CisJICAgICAgICBpZihjbG9uZTMubW92ZUluZGV4KDMpIT1pdGVyMy5tb3ZlSW5kZXgoMykpeworCSAgICAgICAgICAgIGVycmxuKCJtb3ZlSW5kZXggZm9yIGl0ZXIxIGZhaWxlZCIpOworCSAgICAgICAgfQorICAgICAgICB9Y2F0Y2ggKEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgIGVycmxuKCJjb3VsZCBub3QgY2xvbmUgdGhlIGl0ZXJhdG9yIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHZvaWQgcHJldmlvdXNOZXh0KFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyKSB7CisKKyAgICAgICAgaW50IGV4cGVjdFtdPXsKKyAgICAgICAgICAgIDB4MmY5OTksCisgICAgICAgICAgICAweDFkMTVmLAorICAgICAgICAgICAgMHhjNCwKKyAgICAgICAgICAgIDB4MWVkMAorICAgICAgICB9OworICAgIAorICAgICAgICAvLyBleHBlY3RlZCBzcmMgaW5kZXhlcyBjb3JyZXNwb25kaW5nIHRvIGV4cGVjdCBpbmRleGVzCisgICAgICAgIGludCBleHBlY3RJbmRleFtdPXsKKyAgICAgICAgICAgIDAsMCwKKyAgICAgICAgICAgIDEsMSwKKyAgICAgICAgICAgIDIsCisgICAgICAgICAgICAzLAorICAgICAgICAgICAgNCAvL25lZWRlZCAKKyAgICAgICAgfTsKKyAgICAKKyAgICAgICAgLy8gaW5pdGlhbCBpbmRleGVzIGludG8gdGhlIHNyYyBhbmQgZXhwZWN0IHN0cmluZ3MKKyAgICAgICAgCisgICAgICAgIGZpbmFsIGludCBTUkNfTUlERExFPTQ7CisgICAgICAgIGZpbmFsIGludCBFWFBFQ1RfTUlERExFPTI7CisgICAgICAgIAorICAgIAorICAgICAgICAvLyBtb3ZlbWVudCB2ZWN0b3IKKyAgICAgICAgLy8gLSBmb3IgcHJldmlvdXMoKSwgMCBmb3IgY3VycmVudCgpLCArIGZvciBuZXh0KCkKKyAgICAgICAgLy8gbm90IGNvbnN0IHNvIHRoYXQgd2UgY2FuIHRlcm1pbmF0ZSBpdCBiZWxvdyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgU3RyaW5nIG1vdmVzPSIwKzArMC0tMC0wLSsrKzAtLSsrKysrKyswLS0tLS0tLS0iOworICAgIAorICAgICAgICAKKyAgICAgICAgVUNoYXJJdGVyYXRvciBpdGVyMzIgPSBuZXcgVUNoYXJJdGVyYXRvcihleHBlY3QsIGV4cGVjdC5sZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfTUlERExFKTsKKyAgICAKKyAgICAgICAgaW50IGMxLCBjMjsKKyAgICAgICAgY2hhciBtOworICAgIAorICAgICAgICAvLyBpbml0aWFsbHkgc2V0IHRoZSBpbmRleGVzIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgc3RyaW5ncworICAgICAgICBpdGVyLnNldEluZGV4KFNSQ19NSURETEUpOworICAgIAorICAgICAgICAvLyBtb3ZlIGFyb3VuZCBhbmQgY29tcGFyZSB0aGUgaXRlcmF0aW9uIGNvZGUgcG9pbnRzIHdpdGgKKyAgICAgICAgLy8gdGhlIGV4cGVjdGVkIG9uZXMKKyAgICAgICAgaW50IG1vdmVzSW5kZXggPTA7CisgICAgICAgIHdoaWxlKG1vdmVzSW5kZXg8bW92ZXMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG09bW92ZXMuY2hhckF0KG1vdmVzSW5kZXgrKyk7CisgICAgICAgICAgICBpZihtPT0nLScpIHsKKyAgICAgICAgICAgICAgICBjMT1pdGVyLnByZXZpb3VzQ29kZVBvaW50KCk7CisgICAgICAgICAgICAgICAgYzI9aXRlcjMyLnByZXZpb3VzKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYobT09JzAnKSB7CisgICAgICAgICAgICAgICAgYzE9aXRlci5jdXJyZW50Q29kZVBvaW50KCk7CisgICAgICAgICAgICAgICAgYzI9aXRlcjMyLmN1cnJlbnQoKTsKKyAgICAgICAgICAgIH0gZWxzZSAgey8vIG09PScrJyAKKyAgICAgICAgICAgICAgICBjMT1pdGVyLm5leHRDb2RlUG9pbnQoKTsKKyAgICAgICAgICAgICAgICBjMj1pdGVyMzIubmV4dCgpOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgLy8gY29tcGFyZSByZXN1bHRzCisgICAgICAgICAgICBpZihjMSE9YzIpIHsKKyAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSBtb3ZlcyB1bnRpbCB0aGUgY3VycmVudCAobSkgbW92ZSwgYW5kIHRlcm1pbmF0ZQorICAgICAgICAgICAgICAgIFN0cmluZyBoaXN0b3J5ID0gbW92ZXMuc3Vic3RyaW5nKDAsbW92ZXNJbmRleCk7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yOiBtaXNtYXRjaCBpbiBOb3JtYWxpemVyIGl0ZXJhdGlvbiBhdCAiK2hpc3RvcnkrIjogIgorICAgICAgICAgICAgICAgICAgICAgICsiZ290IGMxPSAiICsgaGV4KGMxKSArIiAhPSBleHBlY3RlZCBjMj0gIisgaGV4KGMyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAvLyBjb21wYXJlIGluZGV4ZXMKKyAgICAgICAgICAgIGlmKGV4cGVjdEluZGV4W2l0ZXIuZ2V0SW5kZXgoKV0hPWl0ZXIzMi5nZXRJbmRleCgpKSB7CisgICAgICAgICAgICAgICAgLy8gY29weSB0aGUgbW92ZXMgdW50aWwgdGhlIGN1cnJlbnQgKG0pIG1vdmUsIGFuZCB0ZXJtaW5hdGUKKyAgICAgICAgICAgICAgICBTdHJpbmcgaGlzdG9yeSA9IG1vdmVzLnN1YnN0cmluZygwLG1vdmVzSW5kZXgpOworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvcjogaW5kZXggbWlzbWF0Y2ggaW4gTm9ybWFsaXplciBpdGVyYXRpb24gYXQgIgorICAgICAgICAgICAgICAgICAgICAgICtoaXN0b3J5KyAiIDogIisgIk5vcm1hbGl6ZXIgaW5kZXggIiAraXRlci5nZXRJbmRleCgpCisgICAgICAgICAgICAgICAgICAgICAgKyIgZXhwZWN0ZWQgIisgZXhwZWN0SW5kZXhbaXRlcjMyLmdldEluZGV4KCldKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0VW5pY29kZUNoYXJhY2F0ZXJJdGVyYXRvcigpeworICAgICAgICBpbnQgZXhwZWN0W109eworICAgICAgICAgICAgMHgyZjk5OSwKKyAgICAgICAgICAgIDB4MWQxNWYsCisgICAgICAgICAgICAweGM0LAorICAgICAgICAgICAgMHgxZWQwCisgICAgICAgIH07CisgICAgCisgICAgICAgIC8vIGV4cGVjdGVkIHNyYyBpbmRleGVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwZWN0IGluZGV4ZXMKKyAgICAgICAgaW50IGV4cGVjdEluZGV4W109eworICAgICAgICAgICAgMCwwLAorICAgICAgICAgICAgMSwxLAorICAgICAgICAgICAgMiwKKyAgICAgICAgICAgIDMsCisgICAgICAgICAgICA0IC8vbmVlZGVkIAorICAgICAgICB9OworICAgIAorICAgICAgICAvLyBpbml0aWFsIGluZGV4ZXMgaW50byB0aGUgc3JjIGFuZCBleHBlY3Qgc3RyaW5ncworICAgICAgICAKKyAgICAgICAgZmluYWwgaW50IFNSQ19NSURETEU9NDsKKyAgICAgICAgZmluYWwgaW50IEVYUEVDVF9NSURETEU9MjsKKyAgICAgICAgCisgICAgCisgICAgICAgIC8vIG1vdmVtZW50IHZlY3RvcgorICAgICAgICAvLyAtIGZvciBwcmV2aW91cygpLCAwIGZvciBjdXJyZW50KCksICsgZm9yIG5leHQoKQorICAgICAgICAvLyBub3QgY29uc3Qgc28gdGhhdCB3ZSBjYW4gdGVybWluYXRlIGl0IGJlbG93IGZvciB0aGUgZXJyb3IgbWVzc2FnZQorICAgICAgICBTdHJpbmcgbW92ZXM9IjArMCswLS0wLTAtKysrMC0tKysrKysrKzAtLS0tLS0tLSI7CisgICAgCisgICAgICAgIAorICAgICAgICBVQ2hhckl0ZXJhdG9yIGl0ZXIzMiA9IG5ldyBVQ2hhckl0ZXJhdG9yKGV4cGVjdCwgZXhwZWN0Lmxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9NSURETEUpOworICAgICAgICAKKyAgICAgICAgVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXIgPSBuZXcgVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yKG5ldyBTdHJpbmcoc3JjKSk7IAorICAgICAgICBpbnQgYzEsIGMyOworICAgICAgICBjaGFyIG07CisgICAgICAKKyAgICAgICAgLy8gaW5pdGlhbGx5IHNldCB0aGUgaW5kZXhlcyBpbnRvIHRoZSBtaWRkbGUgb2YgdGhlIHN0cmluZ3MKKyAgICAgICAgaXRlci5zZXRJbmRleChTUkNfTUlERExFKTsKKyAgICAKKyAgICAgICAgLy8gbW92ZSBhcm91bmQgYW5kIGNvbXBhcmUgdGhlIGl0ZXJhdGlvbiBjb2RlIHBvaW50cyB3aXRoCisgICAgICAgIC8vIHRoZSBleHBlY3RlZCBvbmVzCisgICAgICAgIGludCBtb3Zlc0luZGV4ID0wOworICAgICAgICB3aGlsZShtb3Zlc0luZGV4PG1vdmVzLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtPW1vdmVzLmNoYXJBdChtb3Zlc0luZGV4KyspOworICAgICAgICAgICAgaWYobT09Jy0nKSB7CisgICAgICAgICAgICAgICAgYzE9aXRlci5wcmV2aW91c0NvZGVQb2ludCgpOworICAgICAgICAgICAgICAgIGMyPWl0ZXIzMi5wcmV2aW91cygpOworICAgICAgICAgICAgfSBlbHNlIGlmKG09PScwJykgeworICAgICAgICAgICAgICAgIGMxPWl0ZXIuY3VycmVudENvZGVQb2ludCgpOworICAgICAgICAgICAgICAgIGMyPWl0ZXIzMi5jdXJyZW50KCk7CisgICAgICAgICAgICB9IGVsc2UgIHsvLyBtPT0nKycgCisgICAgICAgICAgICAgICAgYzE9aXRlci5uZXh0Q29kZVBvaW50KCk7CisgICAgICAgICAgICAgICAgYzI9aXRlcjMyLm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8vIGNvbXBhcmUgcmVzdWx0cworICAgICAgICAgICAgaWYoYzEhPWMyKSB7CisgICAgICAgICAgICAgICAgLy8gY29weSB0aGUgbW92ZXMgdW50aWwgdGhlIGN1cnJlbnQgKG0pIG1vdmUsIGFuZCB0ZXJtaW5hdGUKKyAgICAgICAgICAgICAgICBTdHJpbmcgaGlzdG9yeSA9IG1vdmVzLnN1YnN0cmluZygwLG1vdmVzSW5kZXgpOworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvcjogbWlzbWF0Y2ggaW4gTm9ybWFsaXplciBpdGVyYXRpb24gYXQgIitoaXN0b3J5KyI6ICIKKyAgICAgICAgICAgICAgICAgICAgICArImdvdCBjMT0gIiArIGhleChjMSkgKyIgIT0gZXhwZWN0ZWQgYzI9ICIrIGhleChjMikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgLy8gY29tcGFyZSBpbmRleGVzCisgICAgICAgICAgICBpZihleHBlY3RJbmRleFtpdGVyLmdldEluZGV4KCldIT1pdGVyMzIuZ2V0SW5kZXgoKSkgeworICAgICAgICAgICAgICAgIC8vIGNvcHkgdGhlIG1vdmVzIHVudGlsIHRoZSBjdXJyZW50IChtKSBtb3ZlLCBhbmQgdGVybWluYXRlCisgICAgICAgICAgICAgICAgU3RyaW5nIGhpc3RvcnkgPSBtb3Zlcy5zdWJzdHJpbmcoMCxtb3Zlc0luZGV4KTsKKyAgICAgICAgICAgICAgICBlcnJsbigiZXJyb3I6IGluZGV4IG1pc21hdGNoIGluIE5vcm1hbGl6ZXIgaXRlcmF0aW9uIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAraGlzdG9yeSsgIiA6ICIrICJOb3JtYWxpemVyIGluZGV4ICIgK2l0ZXIuZ2V0SW5kZXgoKQorICAgICAgICAgICAgICAgICAgICAgICsiIGV4cGVjdGVkICIrIGV4cGVjdEluZGV4W2l0ZXIzMi5nZXRJbmRleCgpXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeworCSAgICAgICAgLy90ZXN0IHByZXZpb3VzIGNvZGUgcG9pbnQKKwkgICAgICAgIGNoYXJbXSBzcmMgPSBuZXcgY2hhcltdeyAnXHVEQzAwJywnXHVEODAwJywnXHVEQzAxJywnXHVEODAyJywnXHVEQzAyJywnXHVEQzAzJ307CisJICAgICAgICBVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IgaXRlcjEgPSBuZXcgVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yKG5ldyBTdHJpbmcoc3JjKSk7CisJICAgICAgICBpdGVyMS5zZXRJbmRleCgxKTsKKwkgICAgICAgIGludCBjaDsKKwkgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5ldmVyIGdvIGludG8gYSBpbmZpbml0ZSBsb29wCisJICAgICAgICAvLyBpZiBpdCBkb2VzIHRoZW4gd2UgaGF2ZSBhIHByb2JsZW0KKwkgICAgICAgIHdoaWxlKChjaD1pdGVyMS5wcmV2aW91c0NvZGVQb2ludCgpKSE9aXRlci5ET05FX0NPREVQT0lOVCl7CisJICAgICAgICAgICAgaWYoY2ghPTB4RGMwMCl7CisJICAgICAgICAgICAgICAgIGVycmxuKCJpdGVyLnByZXZpb3VzQ29kZVBvaW50KCkgZmFpbGVkIik7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaXRlcjEuc2V0SW5kZXgoNSk7CisJICAgICAgICB3aGlsZSgoY2g9aXRlcjEubmV4dENvZGVQb2ludCgpKSAhPWl0ZXIuRE9ORV9DT0RFUE9JTlQpeworCSAgICAgICAgICAgIGlmKGNoIT0gMHhEQzAzKXsKKwkgICAgICAgICAgICAgICAgZXJybG4oIml0ZXIubmV4dENvZGVQb2ludCgpIGZhaWxlZCIpOworCSAgICAgICAgICAgIH0gCisJICAgICAgICB9ICAgICAgCisJICAgIH0KKyAgICB9CisgICAgcHVibGljIHZvaWQgVGVzdFVDaGFyYWN0ZXJJdGVyYXRvcldyYXBwZXIoKXsKKyAgICAgICAgU3RyaW5nIHNvdXJjZSA9ImFzZGZhc2Rmam9pdXlvaXV5MjM0MTIzNTY3OTg4Njc2NSI7CisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdCA9IFVDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbnN0YW5jZShzb3VyY2UpOworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciB3cmFwX2NpID0gaXQuZ2V0Q2hhcmFjdGVySXRlcmF0b3IoKTsKKyAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2kgPSBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3Ioc291cmNlKTsKKyAgICAgICAgd3JhcF9jaS5zZXRJbmRleCgxMCk7CisgICAgICAgIGNpLnNldEluZGV4KDEwKTsKKyAgICAgICAgU3RyaW5nIG1vdmVzPSIwKzArMC0tMC0wLSsrKzAtLSsrKysrKyswLS0tLS0tLS0rKysrMDAwMC0tLS0wLSI7CisgICAgICAgIGludCBjMSwgYzI7CisgICAgICAgIGNoYXIgbTsKKyAgICAgICAgaW50IG1vdmVzSW5kZXggPTA7CisgICAgICAgIAorICAgICAgICB3aGlsZShtb3Zlc0luZGV4PG1vdmVzLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtPW1vdmVzLmNoYXJBdChtb3Zlc0luZGV4KyspOworICAgICAgICAgICAgaWYobT09Jy0nKSB7CisgICAgICAgICAgICAgICAgYzE9d3JhcF9jaS5wcmV2aW91cygpOworICAgICAgICAgICAgICAgIGMyPWNpLnByZXZpb3VzKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYobT09JzAnKSB7CisgICAgICAgICAgICAgICAgYzE9d3JhcF9jaS5jdXJyZW50KCk7CisgICAgICAgICAgICAgICAgYzI9Y2kuY3VycmVudCgpOworICAgICAgICAgICAgfSBlbHNlICB7Ly8gbT09JysnIAorICAgICAgICAgICAgICAgIGMxPXdyYXBfY2kubmV4dCgpOworICAgICAgICAgICAgICAgIGMyPWNpLm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8vIGNvbXBhcmUgcmVzdWx0cworICAgICAgICAgICAgaWYoYzEhPWMyKSB7CisgICAgICAgICAgICAgICAgLy8gY29weSB0aGUgbW92ZXMgdW50aWwgdGhlIGN1cnJlbnQgKG0pIG1vdmUsIGFuZCB0ZXJtaW5hdGUKKyAgICAgICAgICAgICAgICBTdHJpbmcgaGlzdG9yeSA9IG1vdmVzLnN1YnN0cmluZygwLG1vdmVzSW5kZXgpOworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvcjogbWlzbWF0Y2ggaW4gTm9ybWFsaXplciBpdGVyYXRpb24gYXQgIitoaXN0b3J5KyI6ICIKKyAgICAgICAgICAgICAgICAgICAgICArImdvdCBjMT0gIiArIGhleChjMSkgKyIgIT0gZXhwZWN0ZWQgYzI9ICIrIGhleChjMikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgLy8gY29tcGFyZSBpbmRleGVzCisgICAgICAgICAgICBpZih3cmFwX2NpLmdldEluZGV4KCkhPWNpLmdldEluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSBtb3ZlcyB1bnRpbCB0aGUgY3VycmVudCAobSkgbW92ZSwgYW5kIHRlcm1pbmF0ZQorICAgICAgICAgICAgICAgIFN0cmluZyBoaXN0b3J5ID0gbW92ZXMuc3Vic3RyaW5nKDAsbW92ZXNJbmRleCk7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yOiBpbmRleCBtaXNtYXRjaCBpbiBOb3JtYWxpemVyIGl0ZXJhdGlvbiBhdCAiCisgICAgICAgICAgICAgICAgICAgICAgK2hpc3RvcnkrICIgOiAiKyAiTm9ybWFsaXplciBpbmRleCAiICt3cmFwX2NpLmdldEluZGV4KCkKKyAgICAgICAgICAgICAgICAgICAgICArIiBleHBlY3RlZCAiKyBjaS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihjaS5maXJzdCgpIT13cmFwX2NpLmZpcnN0KCkpeworICAgICAgICAgICAgZXJybG4oIkNoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlci5maXJzdCgpIGZhaWxlZC4gZXhwZWN0ZWQ6ICIgKyBjaS5maXJzdCgpICsgIiBnb3Q6ICIgK3dyYXBfY2kuZmlyc3QoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYoY2kubGFzdCgpIT13cmFwX2NpLmxhc3QoKSl7CisgICAgICAgICAgICBlcnJsbigiQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyLmxhc3QoKSBmYWlsZWQgZXhwZWN0ZWQ6ICIgKyBjaS5sYXN0KCkgKyAiIGdvdDogIiArd3JhcF9jaS5sYXN0KCkpOworICAgICAgICB9CisgICAgICAgIGlmKGNpLmdldEJlZ2luSW5kZXgoKSE9d3JhcF9jaS5nZXRCZWdpbkluZGV4KCkpeworICAgICAgICAgICAgZXJybG4oIkNoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlci5nZXRCZWdpbkluZGV4KCkgZmFpbGVkIGV4cGVjdGVkOiAiICsgY2kuZ2V0QmVnaW5JbmRleCgpICsgIiBnb3Q6ICIgK3dyYXBfY2kuZ2V0QmVnaW5JbmRleCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZihjaS5nZXRFbmRJbmRleCgpIT13cmFwX2NpLmdldEVuZEluZGV4KCkpeworICAgICAgICAgICAgZXJybG4oIkNoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlci5nZXRFbmRJbmRleCgpIGZhaWxlZCBleHBlY3RlZDogIiArIGNpLmdldEVuZEluZGV4KCkgKyAiIGdvdDogIiArd3JhcF9jaS5nZXRFbmRJbmRleCgpKTsKKyAgICAgICAgfQorICAgICAgICB0cnl7CisgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjbG9uZVdDSSA9IChDaGFyYWN0ZXJJdGVyYXRvcikgd3JhcF9jaS5jbG9uZSgpOworICAgICAgICAgICAgaWYod3JhcF9jaS5nZXRJbmRleCgpIT1jbG9uZVdDSS5nZXRJbmRleCgpKXsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyLmNsb25lKCkgZmFpbGVkIGV4cGVjdGVkOiAiICt3cmFwX2NpLmdldEluZGV4KCkgKyAiIGdvdDogIiArIGNsb25lV0NJLmdldEluZGV4KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgIGVycmxuKCJDaGFyYWN0ZXJJdGVyYXRvci5jbG9uZSgpIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJVEVSQVRJT05fU1RSSU5HXyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RpbmcgMSAyIDMgXHVkODAwXHVkYzAwIDQ1NiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElURVJBVElPTl9TVVBQTEVNRU5UQVJZX0lOREVYID0gMTQ7CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEppdHRlcmJ1ZzE5NTIoKXsKKyAgICAgICAgLy90ZXN0IHByZXZpb3VzIGNvZGUgcG9pbnQKKyAgICAgICAgY2hhcltdIHNyYyA9IG5ldyBjaGFyW117ICdcdURDMDAnLCdcdUQ4MDAnLCdcdURDMDEnLCdcdUQ4MDInLCdcdURDMDInLCdcdURDMDMnfTsKKyAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXIgPSBVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2Uoc3JjKTsKKyAgICAgICAgaXRlci5zZXRJbmRleCgxKTsKKyAgICAgICAgaW50IGNoOworICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciBnbyBpbnRvIGEgaW5maW5pdGUgbG9vcAorICAgICAgICAvLyBpZiBpdCBkb2VzIHRoZW4gd2UgaGF2ZSBhIHByb2JsZW0KKyAgICAgICAgd2hpbGUoKGNoPWl0ZXIucHJldmlvdXNDb2RlUG9pbnQoKSkhPWl0ZXIuRE9ORSl7CisJICAgICAgICBpZihjaCE9MHhEYzAwKXsKKwkgICAgICAgICAgICBlcnJsbigiaXRlci5wcmV2aW91c0NvZGVQb2ludCgpIGZhaWxlZCIpOworCSAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGl0ZXIuc2V0SW5kZXgoNSk7CisgICAgICAgIHdoaWxlKChjaD1pdGVyLm5leHRDb2RlUG9pbnQoKSkgIT1pdGVyLkRPTkUpeworCSAgICAgICAgaWYoY2ghPSAweERDMDMpeworCSAgICAgICAgICAgIGVycmxuKCJpdGVyLm5leHRDb2RlUG9pbnQoKSBmYWlsZWQiKTsKKwkgICAgICAgIH0gCisgICAgICAgIH0gICAgICAKKyAgICB9CisgICAgICAgIAorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVGVzdFVTY3JpcHQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1Rlc3RVU2NyaXB0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2U4OWM2NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1Rlc3RVU2NyaXB0LmphdmEKQEAgLTAsMCArMSwzMjQgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5sYW5nOworCitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VU2NyaXB0OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVVNjcmlwdFJ1bjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlRyYW5zbGl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVW5pY29kZVNldDsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitwdWJsaWMgY2xhc3MgVGVzdFVTY3JpcHQgZXh0ZW5kcyBUZXN0Rm13a3sKKyAgCisgICAgLyoqCisgICAgKiBDb25zdHJ1Y3RvcgorICAgICovCisgICAgcHVibGljIFRlc3RVU2NyaXB0KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgVGVzdFVTY3JpcHQoKS5ydW4oYXJncyk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIFRlc3RMb2NhbGVHZXRDb2RlKCl7CisgICAgICAgIGZpbmFsIExvY2FsZVtdIHRlc3ROYW1lcz17CisgICAgICAgIC8qIHRlc3QgbG9jYWxlICovCisgICAgICAgIG5ldyBMb2NhbGUoImVuIiwiIiksIG5ldyBMb2NhbGUoImVuIiwiVVMiKSwKKyAgICAgICAgbmV3IExvY2FsZSgic3IiLCIiKSwgbmV3IExvY2FsZSgidGEiLCIiKSAsIAorICAgICAgICBuZXcgTG9jYWxlKCJ0ZSIsIklOIiksCisgICAgICAgIG5ldyBMb2NhbGUoImhpIiwiIiksIAorICAgICAgICBuZXcgTG9jYWxlKCJoZSIsIiIpLCBuZXcgTG9jYWxlKCJhciIsIiIpLAorICAgICAgICBuZXcgTG9jYWxlKCJhYmNkZSIsIiIpLAorICAgICAgICBuZXcgTG9jYWxlKCJhYmNkZSIsImNkZWYiKQorICAgICAgICB9OworICAgICAgICBmaW5hbCBpbnRbXSBleHBlY3RlZCA9eworICAgICAgICAgICAgICAgIC8qIGxvY2FsZXMgc2hvdWxkIHJldHVybiAqLworICAgICAgICAgICAgICAgIFVTY3JpcHQuTEFUSU4sIFVTY3JpcHQuTEFUSU4sIAorICAgICAgICAgICAgICAgIFVTY3JpcHQuQ1lSSUxMSUMsIFVTY3JpcHQuVEFNSUwsIAorICAgICAgICAgICAgICAgIFVTY3JpcHQuVEVMVUdVLFVTY3JpcHQuREVWQU5BR0FSSSwgCisgICAgICAgICAgICAgICAgVVNjcmlwdC5IRUJSRVcsIFVTY3JpcHQuQVJBQklDLAorICAgICAgICAgICAgICAgIFVTY3JpcHQuSU5WQUxJRF9DT0RFLFVTY3JpcHQuSU5WQUxJRF9DT0RFCisgICAgICAgIH07CisgICAgICAgIGludCBpID0wOworICAgICAgICBpbnQgbnVtRXJyb3JzID0wOworCisgICAgICAgIGZvciggOyBpPHRlc3ROYW1lcy5sZW5ndGg7IGkrKyl7CisgICAgICAgICAgICBpbnRbXSBjb2RlID0gVVNjcmlwdC5nZXRDb2RlKHRlc3ROYW1lc1tpXSk7CisgICAgICAgICAgICBpZigoY29kZSE9bnVsbCkgJiYgKGNvZGVbMF0gIT0gZXhwZWN0ZWRbaV0pKXsKKyAgICAgICAgICAgICAgICBsb2dsbigiRXJyb3IgZ2V0dGluZyBzY3JpcHQgY29kZSBHb3Q6ICIgK2NvZGVbMF0gKyAiIEV4cGVjdGVkOiAiICtleHBlY3RlZFtpXSArIiBmb3IgbmFtZSAiK3Rlc3ROYW1lc1tpXSk7CisgICAgICAgICAgICAgICAgbnVtRXJyb3JzKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYobnVtRXJyb3JzID4wICl7CisgICAgICAgICAgICBlcnJsbigiTnVtYmVyIG9mIEVycm9ycyBpbiBVU2NyaXB0LmdldENvZGUoKSA6ICIgKyBudW1FcnJvcnMpOworICAgICAgICB9ICAgICAgICAgICAgCisgICAgfQorICAgIHB1YmxpYyB2b2lkIFRlc3RNdWx0aXBsZUNvZGUoKXsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gdGVzdE5hbWVzID0geyAiamEiICwia29fS1IiLCJ6aCIsInpoX1RXIn07CisgICAgICAgIGZpbmFsIGludFtdW10gZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtVU2NyaXB0LktBVEFLQU5BLFVTY3JpcHQuSElSQUdBTkEsVVNjcmlwdC5IQU59LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7VVNjcmlwdC5IQU5HVUwsIFVTY3JpcHQuSEFOfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1VTY3JpcHQuSEFOfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1VTY3JpcHQuSEFOLFVTY3JpcHQuQk9QT01PRk99CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICBmb3IoaW50IGk9MDsgaTx0ZXN0TmFtZXMubGVuZ3RoO2krKyl7CisgICAgICAgICAgICBpbnRbXSBjb2RlID0gVVNjcmlwdC5nZXRDb2RlKHRlc3ROYW1lc1tpXSk7CisgICAgICAgICAgICBpbnRbXSBleHB0ID0gKGludFtdKSBleHBlY3RlZFtpXTsKKyAgICAgICAgICAgIGZvcihpbnQgaiA9MDsgajwgY29kZS5sZW5ndGg7aisrKXsKKyAgICAgICAgICAgICAgICBpZihjb2RlW2pdIT1leHB0W2pdKXsKKyAgICAgICAgICAgICAgICAgICAgbG9nbG4oIkVycm9yIGdldHRpbmcgc2NyaXB0IGNvZGUgR290OiAiICtjb2RlW2pdICsgIiBFeHBlY3RlZDogIiArZXhwdFtqXSArIiBmb3IgbmFtZSAiK3Rlc3ROYW1lc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHB1YmxpYyB2b2lkIFRlc3RHZXRDb2RlKCl7CisKKyAgICAgICAgZmluYWwgU3RyaW5nW10gdGVzdE5hbWVzPXsKKyAgICAgICAgICAgIC8qIHRlc3QgbG9jYWxlICovICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgImVuIiwgImVuX1VTIiwgInNyIiwgInRhIiwiICBfX18gICAgLS0tdGEiICwgInRlX0lOIiwgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAiaGkiLCAiaGUiLCAiYXIiLAorICAgICAgICAgICAgLyogdGVzdCBhYmJyICovCisgICAgICAgICAgICAiSGFuaSIsICJIYW5nIiwiSGViciIsIkhpcmEiLAorICAgICAgICAgICAgIktuZGEiLCJLYW5hIiwiS2htciIsIkxhbyIsCisgICAgICAgICAgICAiTGF0biIsLyoiTGF0ZiIsIkxhdGciLCovIAorICAgICAgICAgICAgIk1seW0iLCAiTW9uZyIsCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvKiB0ZXN0IG5hbWVzICovCisgICAgICAgICAgICAiQ1lSSUxMSUMiLCJERVNFUkVUIiwiREVWQU5BR0FSSSIsIkVUSElPUElDIiwiR0VPUkdJQU4iLCAKKyAgICAgICAgICAgICJHT1RISUMiLCAgIkdSRUVLIiwgICJHVUpBUkFUSSIsICJDT01NT04iLCAiSU5IRVJJVEVEIiwgCisgICAgICAgICAgICAvKiB0ZXN0IGxvd2VyIGNhc2UgbmFtZXMgKi8KKyAgICAgICAgICAgICJtYWxheWFsYW0iLCAibW9uZ29saWFuIiwgIm15YW5tYXIiLCAib2doYW0iLCAib2xkLWl0YWxpYyIsCisgICAgICAgICAgICAib3JpeWEiLCAgICAgInJ1bmljIiwgICAgICJzaW5oYWxhIiwgInN5cmlhYyIsInRhbWlsIiwgICAgIAorICAgICAgICAgICAgInRlbHVndSIsICAgICJ0aGFhbmEiLCAgICAidGhhaSIsICAgICJ0aWJldGFuIiwgCisgICAgICAgICAgICAvKiB0ZXN0IHRoZSBib3VuZHMqLworICAgICAgICAgICAgInVjYXMiLCAiYXJhYmljIiwiWWkiLCJaeXl5IgorICAgICAgICB9OworICAgICAgICBmaW5hbCBpbnRbXSBleHBlY3RlZCA9eworICAgICAgICAgICAgLyogbG9jYWxlcyBzaG91bGQgcmV0dXJuICovCisgICAgICAgICAgICBVU2NyaXB0LkxBVElOLCBVU2NyaXB0LkxBVElOLCAKKyAgICAgICAgICAgIFVTY3JpcHQuQ1lSSUxMSUMsIFVTY3JpcHQuVEFNSUwsIFVTY3JpcHQuVEFNSUwsIAorICAgICAgICAgICAgVVNjcmlwdC5URUxVR1UsVVNjcmlwdC5ERVZBTkFHQVJJLCAKKyAgICAgICAgICAgIFVTY3JpcHQuSEVCUkVXLCBVU2NyaXB0LkFSQUJJQywKKyAgICAgICAgICAgIC8qIGFiYnIgc2hvdWxkIHJldHVybiAqLworICAgICAgICAgICAgVVNjcmlwdC5IQU4sIFVTY3JpcHQuSEFOR1VMLCBVU2NyaXB0LkhFQlJFVywgVVNjcmlwdC5ISVJBR0FOQSwKKyAgICAgICAgICAgIFVTY3JpcHQuS0FOTkFEQSwgVVNjcmlwdC5LQVRBS0FOQSwgVVNjcmlwdC5LSE1FUiwgVVNjcmlwdC5MQU8sCisgICAgICAgICAgICBVU2NyaXB0LkxBVElOLC8qIFVTY3JpcHQuTEFUSU4sIFVTY3JpcHQuTEFUSU4sKi8gCisgICAgICAgICAgICBVU2NyaXB0Lk1BTEFZQUxBTSwgVVNjcmlwdC5NT05HT0xJQU4sCisgICAgICAgICAgICAvKiBuYW1lcyBzaG91bGQgcmV0dXJuICovCisgICAgICAgICAgICBVU2NyaXB0LkNZUklMTElDLCBVU2NyaXB0LkRFU0VSRVQsIFVTY3JpcHQuREVWQU5BR0FSSSwgVVNjcmlwdC5FVEhJT1BJQywgVVNjcmlwdC5HRU9SR0lBTiwKKyAgICAgICAgICAgIFVTY3JpcHQuR09USElDLCBVU2NyaXB0LkdSRUVLLCBVU2NyaXB0LkdVSkFSQVRJLCBVU2NyaXB0LkNPTU1PTiwgVVNjcmlwdC5JTkhFUklURUQsCisgICAgICAgICAgICAvKiBsb3dlciBjYXNlIG5hbWVzIHNob3VsZCByZXR1cm4gKi8gICAgCisgICAgICAgICAgICBVU2NyaXB0Lk1BTEFZQUxBTSwgVVNjcmlwdC5NT05HT0xJQU4sIFVTY3JpcHQuTVlBTk1BUiwgVVNjcmlwdC5PR0hBTSwgVVNjcmlwdC5PTERfSVRBTElDLAorICAgICAgICAgICAgVVNjcmlwdC5PUklZQSwgVVNjcmlwdC5SVU5JQywgVVNjcmlwdC5TSU5IQUxBLCBVU2NyaXB0LlNZUklBQywgVVNjcmlwdC5UQU1JTCwKKyAgICAgICAgICAgIFVTY3JpcHQuVEVMVUdVLCBVU2NyaXB0LlRIQUFOQSwgVVNjcmlwdC5USEFJLCBVU2NyaXB0LlRJQkVUQU4sCisgICAgICAgICAgICAvKiBib3VuZHMgKi8KKyAgICAgICAgICAgIFVTY3JpcHQuVUNBUywgVVNjcmlwdC5BUkFCSUMsIFVTY3JpcHQuWUksIFVTY3JpcHQuQ09NTU9OCQorICAgICAgICB9OworICAgICAgICBpbnQgaSA9MDsKKyAgICAgICAgaW50IG51bUVycm9ycyA9MDsKKworICAgICAgICBmb3IoIDsgaTx0ZXN0TmFtZXMubGVuZ3RoOyBpKyspeworICAgICAgICAgICAgaW50W10gY29kZSA9IFVTY3JpcHQuZ2V0Q29kZSh0ZXN0TmFtZXNbaV0pOworICAgICAgICAgICAgaWYoKGNvZGUhPW51bGwpICYmIChjb2RlWzBdICE9IGV4cGVjdGVkW2ldKSl7CisgICAgICAgICAgICAgICAgbG9nbG4oIkVycm9yIGdldHRpbmcgc2NyaXB0IGNvZGUgR290OiAiICtjb2RlWzBdICsgIiBFeHBlY3RlZDogIiArZXhwZWN0ZWRbaV0gKyIgZm9yIG5hbWUgIit0ZXN0TmFtZXNbaV0pOworICAgICAgICAgICAgICAgIG51bUVycm9ycysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKG51bUVycm9ycyA+MCApeworICAgICAgICAgICAgZXJybG4oIk51bWJlciBvZiBFcnJvcnMgaW4gVVNjcmlwdC5nZXRDb2RlKCkgOiAiICsgbnVtRXJyb3JzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0R2V0TmFtZSgpeworICAgICAgICAKKyAgICAgICAgZmluYWwgaW50W10gdGVzdENvZGVzPXsKKyAgICAgICAgICAgIC8qIG5hbWVzIHNob3VsZCByZXR1cm4gKi8KKyAgICAgICAgICAgIFVTY3JpcHQuQ1lSSUxMSUMsIFVTY3JpcHQuREVTRVJFVCwgVVNjcmlwdC5ERVZBTkFHQVJJLCBVU2NyaXB0LkVUSElPUElDLCBVU2NyaXB0LkdFT1JHSUFOLAorICAgICAgICAgICAgVVNjcmlwdC5HT1RISUMsIFVTY3JpcHQuR1JFRUssIFVTY3JpcHQuR1VKQVJBVEksCisgICAgICAgIH07CisKKyAgICAgICAgZmluYWwgU3RyaW5nW10gZXhwZWN0ZWROYW1lcz17CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgLyogdGVzdCBuYW1lcyAqLworICAgICAgICAgICAgIkN5cmlsbGljIiwiRGVzZXJldCIsIkRldmFuYWdhcmkiLCJFdGhpb3BpYyIsIkdlb3JnaWFuIiwgCisgICAgICAgICAgICAiR290aGljIiwgICJHcmVlayIsICAiR3VqYXJhdGkiLCAKKyAgICAgICAgfTsKKyAgICAgICAgaW50IGkgPTA7CisKKyAgICAgICAgd2hpbGUoaTwgdGVzdENvZGVzLmxlbmd0aCl7CisgICAgICAgICAgICBTdHJpbmcgc2NyaXB0TmFtZSAgPSBVU2NyaXB0LmdldE5hbWUodGVzdENvZGVzW2ldKTsKKyAgICAgICAgICAgIGludCBudW1FcnJvcnM9MDsKKyAgICAgICAgICAgIGlmKCFleHBlY3RlZE5hbWVzW2ldLmVxdWFscyhzY3JpcHROYW1lKSl7CisgICAgICAgICAgICAgICAgbG9nbG4oIkVycm9yIGdldHRpbmcgYWJicmV2aWF0aW9ucyBHb3Q6ICIgK3NjcmlwdE5hbWUgKyIgRXhwZWN0ZWQ6ICIrZXhwZWN0ZWROYW1lc1tpXSk7CisgICAgICAgICAgICAgICAgbnVtRXJyb3JzKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihudW1FcnJvcnMgPiAwKXsKKyAgICAgICAgICAgICAgICBpZihudW1FcnJvcnMgPjAgKXsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVycm9ycyBVU2NyaXB0LmdldFNob3JOYW1lKCkgOiAiICsgbnVtRXJyb3JzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0R2V0U2hvcnROYW1lKCl7CisgICAgICAgIGZpbmFsIGludFtdIHRlc3RDb2Rlcz17CisgICAgICAgICAgICAvKiBhYmJyIHNob3VsZCByZXR1cm4gKi8KKyAgICAgICAgICAgIFVTY3JpcHQuSEFOLCBVU2NyaXB0LkhBTkdVTCwgVVNjcmlwdC5IRUJSRVcsIFVTY3JpcHQuSElSQUdBTkEsCisgICAgICAgICAgICBVU2NyaXB0LktBTk5BREEsIFVTY3JpcHQuS0FUQUtBTkEsIFVTY3JpcHQuS0hNRVIsIFVTY3JpcHQuTEFPLAorICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwgCisgICAgICAgICAgICBVU2NyaXB0Lk1BTEFZQUxBTSwgVVNjcmlwdC5NT05HT0xJQU4sCisgICAgICAgIH07CisKKyAgICAgICAgZmluYWwgU3RyaW5nW10gZXhwZWN0ZWRBYmJyPXsKKyAgICAgICAgICAgICAgLyogdGVzdCBhYmJyICovCisgICAgICAgICAgICAiSGFuaSIsICJIYW5nIiwiSGViciIsIkhpcmEiLAorICAgICAgICAgICAgIktuZGEiLCJLYW5hIiwiS2htciIsIkxhb28iLAorICAgICAgICAgICAgIkxhdG4iLAorICAgICAgICAgICAgIk1seW0iLCAiTW9uZyIsCisgICAgICAgIH07CisgICAgICAgIGludCBpPTA7CisgICAgICAgIHdoaWxlKGk8dGVzdENvZGVzLmxlbmd0aCl7CisgICAgICAgICAgICBTdHJpbmcgIHNob3J0TmFtZSA9IFVTY3JpcHQuZ2V0U2hvcnROYW1lKHRlc3RDb2Rlc1tpXSk7CisgICAgICAgICAgICBpbnQgbnVtRXJyb3JzPTA7CisgICAgICAgICAgICBpZighZXhwZWN0ZWRBYmJyW2ldLmVxdWFscyhzaG9ydE5hbWUpKXsKKyAgICAgICAgICAgICAgICBsb2dsbigiRXJyb3IgZ2V0dGluZyBhYmJyZXZpYXRpb25zIEdvdDogIiArc2hvcnROYW1lKyAiIEV4cGVjdGVkOiAiICtleHBlY3RlZEFiYnJbaV0pOworICAgICAgICAgICAgICAgIG51bUVycm9ycysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYobnVtRXJyb3JzID4gMCl7CisgICAgICAgICAgICAgICAgaWYobnVtRXJyb3JzID4wICl7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvcnMgVUNoYXIuZ2V0U2NyaXB0QWJicigpIDogIitudW1FcnJvcnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorCisgICAgfQorICAgIHB1YmxpYyB2b2lkIFRlc3RHZXRTY3JpcHQoKXsKKyAgICAgICAgaW50IGNvZGVwb2ludHNbXSA9IHsKKyAgICAgICAgICAgICAgICAweDAwMDBGRjlELCAKKyAgICAgICAgICAgICAgICAweDAwMDBGRkJFLCAKKyAgICAgICAgICAgICAgICAweDAwMDBGRkM3LCAKKyAgICAgICAgICAgICAgICAweDAwMDBGRkNGLCAKKyAgICAgICAgICAgICAgICAweDAwMDBGRkQ3LCAKKyAgICAgICAgICAgICAgICAweDAwMDBGRkRDLCAKKyAgICAgICAgICAgICAgICAweDAwMDEwMzAwLAorICAgICAgICAgICAgICAgIDB4MDAwMTAzMzAsCisgICAgICAgICAgICAgICAgMHgwMDAxMDM0QSwKKyAgICAgICAgICAgICAgICAweDAwMDEwNDAwLAorICAgICAgICAgICAgICAgIDB4MDAwMTA0MjgsCisgICAgICAgICAgICAgICAgMHgwMDAxRDE2NywKKyAgICAgICAgICAgICAgICAweDAwMDFEMTdCLAorICAgICAgICAgICAgICAgIDB4MDAwMUQxODUsCisgICAgICAgICAgICAgICAgMHgwMDAxRDFBQSwKKyAgICAgICAgICAgICAgICAweDAwMDIwMDAwLAorICAgICAgICAgICAgICAgIDB4MDAwMDBEMDIsCisgICAgICAgICAgICAgICAgMHgwMDAwMEQwMCwKKyAgICAgICAgICAgICAgICAweDAwMDAwMDAwLAorICAgICAgICAgICAgICAgIDB4MDAwMUQxNjksIAorICAgICAgICAgICAgICAgIDB4MDAwMUQxODIsIAorICAgICAgICAgICAgICAgIDB4MDAwMUQxOEIsIAorICAgICAgICAgICAgICAgIDB4MDAwMUQxQUQsIAorICAgICAgICB9OworCisgICAgICAgIGludCBleHBlY3RlZFtdID0geworICAgICAgICAgICAgICAgIFVTY3JpcHQuS0FUQUtBTkEgLAorICAgICAgICAgICAgICAgIFVTY3JpcHQuSEFOR1VMICwKKyAgICAgICAgICAgICAgICBVU2NyaXB0LkhBTkdVTCAsCisgICAgICAgICAgICAgICAgVVNjcmlwdC5IQU5HVUwgLAorICAgICAgICAgICAgICAgIFVTY3JpcHQuSEFOR1VMICwKKyAgICAgICAgICAgICAgICBVU2NyaXB0LkhBTkdVTCAsCisgICAgICAgICAgICAgICAgVVNjcmlwdC5PTERfSVRBTElDLCAKKyAgICAgICAgICAgICAgICBVU2NyaXB0LkdPVEhJQyAsCisgICAgICAgICAgICAgICAgVVNjcmlwdC5HT1RISUMgLAorICAgICAgICAgICAgICAgIFVTY3JpcHQuREVTRVJFVCAsCisgICAgICAgICAgICAgICAgVVNjcmlwdC5ERVNFUkVUICwKKyAgICAgICAgICAgICAgICBVU2NyaXB0LklOSEVSSVRFRCwKKyAgICAgICAgICAgICAgICBVU2NyaXB0LklOSEVSSVRFRCwKKyAgICAgICAgICAgICAgICBVU2NyaXB0LklOSEVSSVRFRCwKKyAgICAgICAgICAgICAgICBVU2NyaXB0LklOSEVSSVRFRCwKKyAgICAgICAgICAgICAgICBVU2NyaXB0LkhBTiAsCisgICAgICAgICAgICAgICAgVVNjcmlwdC5NQUxBWUFMQU0sCisgICAgICAgICAgICAgICAgVVNjcmlwdC5DT01NT04sCisgICAgICAgICAgICAgICAgVVNjcmlwdC5DT01NT04sCisgICAgICAgICAgICAgICAgVVNjcmlwdC5JTkhFUklURUQgLAorICAgICAgICAgICAgICAgIFVTY3JpcHQuSU5IRVJJVEVEICwKKyAgICAgICAgICAgICAgICBVU2NyaXB0LklOSEVSSVRFRCAsCisgICAgICAgICAgICAgICAgVVNjcmlwdC5JTkhFUklURUQgLAorICAgICAgICB9OworICAgICAgICBpbnQgaSA9MDsKKyAgICAgICAgaW50IGNvZGUgPSBVU2NyaXB0LklOVkFMSURfQ09ERTsKKyAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworCisgICAgICAgIHdoaWxlKGk8IGNvZGVwb2ludHMubGVuZ3RoKXsKKyAgICAgICAgICAgIGNvZGUgPSBVU2NyaXB0LmdldFNjcmlwdChjb2RlcG9pbnRzW2ldKTsKKworICAgICAgICAgICAgaWYoY29kZSAhPSBleHBlY3RlZFtpXSl7CisgICAgICAgICAgICAgICAgbG9nbG4oIlVTY3JpcHQuZ2V0U2NyaXB0IGZvciBjb2RlcG9pbnQgMHgiKyBoZXgoY29kZXBvaW50c1tpXSkrIiBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgICAgIGlmKCFwYXNzZWQpeworICAgICAgICAgICBlcnJsbigiVVNjcmlwdC5nZXRTY3JpcHQgZmFpbGVkLiIpOworICAgICAgICB9ICAgICAgCisgICAgfQorICAgIHB1YmxpYyB2b2lkIFRlc3RBbGxDb2RlcG9pbnRzKCl7CisgICAgCWludCBjb2RlOworICAgICAgICBTdHJpbmcgb2xkSWQ9IiI7CisgICAgICAgIFN0cmluZyBvbGRBYmJySWQ9IiI7CisgICAgCWZvciggaW50IGkgPTA7IGkgPD0gMHgxMGZmZmY7IGkrKyl7CisgICAgCQljb2RlID1VU2NyaXB0LklOVkFMSURfQ09ERTsKKyAgICAJCWNvZGUgPSBVU2NyaXB0LmdldFNjcmlwdChpKTsKKyAgICAJCWlmKGNvZGU9PVVTY3JpcHQuSU5WQUxJRF9DT0RFKXsKKyAgICAJCQllcnJsbigiVVNjcmlwdC5nZXRTY3JpcHQgZm9yIGNvZGVwb2ludCAweCIrIGhleChpKSsiIGZhaWxlZCIpOworICAgIAkJfQorICAgICAgICAgICAgU3RyaW5nIGlkID1VU2NyaXB0LmdldE5hbWUoY29kZSk7CisgICAgICAgICAgICBTdHJpbmcgYWJiciA9IFVTY3JpcHQuZ2V0U2hvcnROYW1lKGNvZGUpOworICAgICAgICAgICAgU3RyaW5nIG5ld0lkID0iWzoiK2lkKyI6XTtORkQiOworICAgICAgICAgICAgU3RyaW5nIG5ld0FiYnJJZCA9Ils6IithYmJyKyI6XTtORkQiOworICAgICAgICAgICAgaWYoIW9sZElkLmVxdWFscyhuZXdJZCkpeworICAgICAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKG5ld0lkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYodD09bnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZhaWxlZCB0byBjcmVhdGUgdHJhbnNsaXRlcmF0b3IgZm9yICIraGV4KGkpKworICAgICAgICAgICAgICAgICAgICAgICAgICIgc2NyaXB0IGNvZGU6ICIgK2lkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsZWQgdG8gY3JlYXRlIHRyYW5zbGl0ZXJhdG9yIGZvciAiK2hleChpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiIHNjcmlwdCBjb2RlOiAiICtpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBFeGNlcHRpb246ICIrZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9sZElkID0gbmV3SWQ7CisgICAgICAgICAgICBpZighb2xkQWJicklkLmVxdWFscyhuZXdBYmJySWQpKXsKKyAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShuZXdBYmJySWQpOworICAgICAgICAgICAgICAgICAgICBpZih0PT1udWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHRvIGNyZWF0ZSB0cmFuc2xpdGVyYXRvciBmb3IgIitoZXgoaSkrCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBzY3JpcHQgY29kZTogIiArYWJicik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHRvIGNyZWF0ZSB0cmFuc2xpdGVyYXRvciBmb3IgIitoZXgoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIiBzY3JpcHQgY29kZTogIiArYWJicgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBFeGNlcHRpb246ICIrZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9sZEFiYnJJZCA9IG5ld0FiYnJJZDsKKyAgICAJfQorICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0U2NyaXB0TmFtZXMoKXsKKyAgICAgICAgZm9yKGludCBpPTA7IGk8VVNjcmlwdC5DT0RFX0xJTUlUO2krKyl7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IFVTY3JpcHQuZ2V0TmFtZShpKTsKKyAgICAgICAgICAgIGlmKG5hbWUuZXF1YWxzKCIiKSApeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMRUQ6IGdldE5hbWUgZm9yIGNvZGUgOiAiK2kpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAgIAkKKyB9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9UZXN0VVNjcmlwdFJ1bi5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVGVzdFVTY3JpcHRSdW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhjYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVGVzdFVTY3JpcHRSdW4uamF2YQpAQCAtMCwwICsxLDM0MSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5OS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lmxhbmc7CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVTY3JpcHQ7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VU2NyaXB0UnVuOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworCitwdWJsaWMgY2xhc3MgVGVzdFVTY3JpcHRSdW4gZXh0ZW5kcyBUZXN0Rm13aworeworICAgIHB1YmxpYyBUZXN0VVNjcmlwdFJ1bigpCisgICAgeworICAgICAgICAvLyBub3RoaW5nCisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgVGVzdFVTY3JpcHRSdW4oKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgUnVuVGVzdERhdGEKKyAgICB7CisgICAgICAgIFN0cmluZyBydW5UZXh0OworICAgICAgICBpbnQgICAgcnVuU2NyaXB0OworICAgICAgICAKKyAgICAgICAgcHVibGljIFJ1blRlc3REYXRhKFN0cmluZyB0aGVUZXh0LCBpbnQgdGhlU2NyaXB0Q29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgcnVuVGV4dCAgID0gdGhlVGV4dDsKKyAgICAgICAgICAgIHJ1blNjcmlwdCA9IHRoZVNjcmlwdENvZGU7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFJ1blRlc3REYXRhW10gdGVzdERhdGEgPSB7CisgICAgICAgIG5ldyBSdW5UZXN0RGF0YSgiXHUwMDIwXHUwOTQ2XHUwOTM5XHUwOTNGXHUwOTI4XHUwOTREXHUwOTI2XHUwOTQwXHUwMDIwIiwgVVNjcmlwdC5ERVZBTkFHQVJJKSwKKyAgICAgICAgbmV3IFJ1blRlc3REYXRhKCJcdTA2MjdcdTA2NDRcdTA2MzlcdTA2MzFcdTA2MjhcdTA2NEFcdTA2MjlcdTAwMjAiLCBVU2NyaXB0LkFSQUJJQyksCisgICAgICAgIG5ldyBSdW5UZXN0RGF0YSgiXHUwNDIwXHUwNDQzXHUwNDQxXHUwNDQxXHUwNDNBXHUwNDM4XHUwNDM5XHUwMDIwIiwgVVNjcmlwdC5DWVJJTExJQyksCisgICAgICAgIG5ldyBSdW5UZXN0RGF0YSgiRW5nbGlzaCAoIiwgVVNjcmlwdC5MQVRJTiksCisgICAgICAgIG5ldyBSdW5UZXN0RGF0YSgiXHUwRTQ0XHUwRTE3XHUwRTIyIiwgVVNjcmlwdC5USEFJKSwKKyAgICAgICAgbmV3IFJ1blRlc3REYXRhKCIpICIsIFVTY3JpcHQuTEFUSU4pLAorICAgICAgICBuZXcgUnVuVGVzdERhdGEoIlx1NkYyMlx1NUI3NSIsIFVTY3JpcHQuSEFOKSwKKyAgICAgICAgbmV3IFJ1blRlc3REYXRhKCJcdTMwNjhcdTMwNzJcdTMwODlcdTMwNENcdTMwNkFcdTMwNjgiLCBVU2NyaXB0LkhJUkFHQU5BKSwKKyAgICAgICAgbmV3IFJ1blRlc3REYXRhKCJcdTMwQUJcdTMwQkZcdTMwQUJcdTMwQ0EiLCBVU2NyaXB0LktBVEFLQU5BKSwKKyAgICAgICAgbmV3IFJ1blRlc3REYXRhKCJcdUQ4MDFcdURDMDBcdUQ4MDFcdURDMDFcdUQ4MDFcdURDMDJcdUQ4MDFcdURDMDMiLCBVU2NyaXB0LkRFU0VSRVQpCisgICAgfTsKKyAgICAKKyAgICBwcml2YXRlIHZvaWQgQ2hlY2tTY3JpcHRSdW5zKFVTY3JpcHRSdW4gc2NyaXB0UnVuLCBpbnRbXSBydW5TdGFydHMsIFJ1blRlc3REYXRhW10gdGVzdERhdGEpCisgICAgeworICAgICAgICBpbnQgcnVuLCBydW5TdGFydCwgcnVuTGltaXQ7CisgICAgICAgIGludCBydW5TY3JpcHQ7CisKKyAgICAgICAgLyogaXRlcmF0ZSBvdmVyIGFsbCB0aGUgcnVucyAqLworICAgICAgICBydW4gPSAwOworICAgICAgICB3aGlsZSAoc2NyaXB0UnVuLm5leHQoKSkgeworICAgICAgICAgICAgcnVuU3RhcnQgID0gc2NyaXB0UnVuLmdldFNjcmlwdFN0YXJ0KCk7CisgICAgICAgICAgICBydW5MaW1pdCAgPSBzY3JpcHRSdW4uZ2V0U2NyaXB0TGltaXQoKTsKKyAgICAgICAgICAgIHJ1blNjcmlwdCA9IHNjcmlwdFJ1bi5nZXRTY3JpcHRDb2RlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChydW5TdGFydCAhPSBydW5TdGFydHNbcnVuXSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJJbmNvcnJlY3Qgc3RhcnQgb2Zmc2V0IGZvciBydW4gIiArIHJ1biArICI6IGV4cGVjdGVkICIgKyBydW5TdGFydHNbcnVuXSArICIsIGdvdCAiICsgcnVuU3RhcnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocnVuTGltaXQgIT0gcnVuU3RhcnRzW3J1biArIDFdKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkluY29ycmVjdCBsaW1pdCBvZmZzZXQgZm9yIHJ1biAiICsgcnVuICsgIjogZXhwZWN0ZWQgIiArIHJ1blN0YXJ0c1tydW4gKyAxXSArICIsIGdvdCAiICsgcnVuTGltaXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocnVuU2NyaXB0ICE9IHRlc3REYXRhW3J1bl0ucnVuU2NyaXB0KSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkluY29ycmVjdCBzY3JpcHQgZm9yIHJ1biAiICsgcnVuICsgIjogZXhwZWN0ZWQgXCIiICsgVVNjcmlwdC5nZXROYW1lKHRlc3REYXRhW3J1bl0ucnVuU2NyaXB0KSArICJcIiwgZ290IFwiIiArIFVTY3JpcHQuZ2V0TmFtZShydW5TY3JpcHQpICsgIlwiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJ1biArPSAxOworCisgICAgICAgICAgICAvKiBzdG9wIHdoZW4gd2UndmUgc2VlbiBhbGwgdGhlIHJ1bnMgd2UgZXhwZWN0IHRvIHNlZSAqLworICAgICAgICAgICAgaWYgKHJ1biA+PSB0ZXN0RGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIENvbXBsYWluIGlmIHdlIGRpZG4ndCBzZWUgdGhlbiBudW1iZXIgb2YgcnVucyB3ZSBleHBlY3RlZCAqLworICAgICAgICBpZiAocnVuICE9IHRlc3REYXRhLmxlbmd0aCkgeworICAgICAgICAgICAgZXJybG4oIkluY29ycmVjdCBudW1iZXIgb2YgcnVuczogZXhwZWN0ZWQgIiArIHRlc3REYXRhLmxlbmd0aCArICIsIGdvdCAiICsgcnVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDb250c3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIFVTY3JpcHRSdW4gc2NyaXB0UnVuID0gbnVsbDsKKyAgICAgICAgY2hhcltdIG51bGxDaGFycyAgPSBudWxsLCBkdW1teUNoYXJzICA9IHsnZCcsICd1JywgJ20nLCAnbScsICd5J307CisgICAgICAgIFN0cmluZyBudWxsU3RyaW5nID0gbnVsbCwgZHVtbXlTdHJpbmcgPSBuZXcgU3RyaW5nKGR1bW15Q2hhcnMpOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1biA9IG5ldyBVU2NyaXB0UnVuKG51bGxTdHJpbmcsIDAsIDEwMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4obnVsbFN0cmluZywgMCwgMTAwKSBkaWQgbm90IHByb2R1Y2UgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4gPSBuZXcgVVNjcmlwdFJ1bihudWxsU3RyaW5nLCAxMDAsIDApOworICAgICAgICAgICAgZXJybG4oIm5ldyBVU2NyaXB0UnVuKG51bGxTdHJpbmcsIDEwMCwgMCkgZGlkIG5vdCBwcm9kdWNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4obnVsbFN0cmluZywgMCwgLTEwMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4obnVsbFN0cmluZywgMCwgLTEwMCkgZGlkIG5vdCBwcm9kdWNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4obnVsbFN0cmluZywgLTEwMCwgMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4obnVsbFN0cmluZywgLTEwMCwgMCkgZGlkIG5vdCBwcm9kdWNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4obnVsbENoYXJzLCAwLCAxMDApOworICAgICAgICAgICAgZXJybG4oIm5ldyBVU2NyaXB0UnVuKG51bGxDaGFycywgMCwgMTAwKSBkaWQgbm90IHByb2R1Y2UgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4gPSBuZXcgVVNjcmlwdFJ1bihudWxsQ2hhcnMsIDEwMCwgMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4obnVsbENoYXJzLCAxMDAsIDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1biA9IG5ldyBVU2NyaXB0UnVuKG51bGxDaGFycywgMCwgLTEwMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4obnVsbENoYXJzLCAwLCAtMTAwKSBkaWQgbm90IHByb2R1Y2UgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4gPSBuZXcgVVNjcmlwdFJ1bihudWxsQ2hhcnMsIC0xMDAsIDApOworICAgICAgICAgICAgZXJybG4oIm5ldyBVU2NyaXB0UnVuKG51bGxDaGFycywgLTEwMCwgMCkgZGlkIG5vdCBwcm9kdWNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4oZHVtbXlTdHJpbmcsIDAsIDYpOworICAgICAgICAgICAgZXJybG4oIm5ldyBVU2NyaXB0UnVuKGR1bW15U3RyaW5nLCAwLCA2KSBkaWQgbm90IHByb2R1Y2UgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4gPSBuZXcgVVNjcmlwdFJ1bihkdW1teVN0cmluZywgNiwgMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4oZHVtbXksIDYsIDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4oZHVtbXlTdHJpbmcsIDAsIC0xMDApOworICAgICAgICAgICAgZXJybG4oIm5ldyBVU2NyaXB0UnVuKGR1bW15U3RyaW5nLCAwLCAtMTAwKSBkaWQgbm90IHByb2R1Y2UgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4gPSBuZXcgVVNjcmlwdFJ1bihkdW1teVN0cmluZywgLTEwMCwgMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4oZHVtbXksIC0xMDAsIDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1biA9IG5ldyBVU2NyaXB0UnVuKGR1bW15Q2hhcnMsIDAsIDYpOworICAgICAgICAgICAgZXJybG4oIm5ldyBVU2NyaXB0UnVuKGR1bW15Q2hhcnMsIDAsIDYpIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1biA9IG5ldyBVU2NyaXB0UnVuKGR1bW15Q2hhcnMsIDYsIDApOworICAgICAgICAgICAgZXJybG4oIm5ldyBVU2NyaXB0UnVuKGR1bW15Q2hhcnMsIDYsIDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4oZHVtbXlDaGFycywgMCwgLTEwMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4oZHVtbXlDaGFycywgMCwgLTEwMCkgZGlkIG5vdCBwcm9kdWNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4oZHVtbXlDaGFycywgLTEwMCwgMCk7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4oZHVtbXksIC0xMDAsIDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0UmVzZXQoKQorICAgIHsKKyAgICAgICAgVVNjcmlwdFJ1biBzY3JpcHRSdW4gPSBudWxsOworICAgICAgICBjaGFyW10gZHVtbXkgPSB7J2QnLCAndScsICdtJywgJ20nLCAneSd9OworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1biA9IG5ldyBVU2NyaXB0UnVuKCk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgICAgIGVycmxuKCJuZXcgVVNjcmlwdFJ1bigpIHByb2R1Y2VkIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1bi5yZXNldCgwLCAxMDApOworICAgICAgICAgICAgZXJybG4oInNjcmlwdFJ1bi5yZXNldCgwLCAxMDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1bi5yZXNldCgxMDAsIDApOworICAgICAgICAgICAgZXJybG4oInNjcmlwdFJ1bi5yZXNldCgxMDAsIDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1bi5yZXNldCgwLCAtMTAwKTsKKyAgICAgICAgICAgIGVycmxuKCJzY3JpcHRSdW4ucmVzZXQoMCwgLTEwMCkgZGlkIG5vdCBwcm9kdWNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuLnJlc2V0KC0xMDAsIDApOworICAgICAgICAgICAgZXJybG4oInNjcmlwdFJ1bi5yZXNldCgtMTAwLCAwKSBkaWQgbm90IHByb2R1Y2UgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4ucmVzZXQoZHVtbXksIDAsIDYpOworICAgICAgICAgICAgZXJybG4oInNjcmlwdFJ1bi5yZXNldChkdW1teSwgMCwgNikgZGlkIG5vdCBwcm9kdWNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuLnJlc2V0KGR1bW15LCA2LCAwKTsKKyAgICAgICAgICAgIGVycmxuKCJzY3JpcHRSdW4ucmVzZXQoZHVtbXksIDYsIDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuLnJlc2V0KGR1bW15LCAwLCAtMTAwKTsKKyAgICAgICAgICAgIGVycmxuKCJzY3JpcHRSdW4ucmVzZXQoZHVtbXksIDAsIC0xMDApIGRpZCBub3QgcHJvZHVjZSBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1bi5yZXNldChkdW1teSwgLTEwMCwgMCk7CisgICAgICAgICAgICBlcnJsbigic2NyaXB0UnVuLnJlc2V0KGR1bW15LCAtMTAwLCAwKSBkaWQgbm90IHByb2R1Y2UgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4ucmVzZXQoZHVtbXksIDAsIGR1bW15Lmxlbmd0aCk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgICAgIGVycmxuKCJzY3JpcHRSdW4ucmVzZXQoZHVtbXksIDAsIGR1bW15Lmxlbmd0aCkgcHJvZHVjZWQgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1bi5yZXNldCgwLCA2KTsKKyAgICAgICAgICAgIGVycmxuKCJzY3JpcHRSdW4ucmVzZXQoMCwgNikgZGlkIG5vdCBwcm9kdWNlIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuLnJlc2V0KDYsIDApOworICAgICAgICAgICAgZXJybG4oInNjcmlwdFJ1bi5yZXNldCg2LCAwKSBkaWQgbm90IHByb2R1Y2UgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFJ1bnMoKQorICAgIHsKKyAgICAgICAgaW50IHN0cmluZ0xpbWl0ID0gMDsKKyAgICAgICAgaW50W10gcnVuU3RhcnRzID0gbmV3IGludFt0ZXN0RGF0YS5sZW5ndGggKyAxXTsKKyAgICAgICAgU3RyaW5nIHRlc3RTdHJpbmcgPSAiIjsKKyAgICAgICAgVVNjcmlwdFJ1biBzY3JpcHRSdW4gPSBudWxsOworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogRmlsbCBpbiB0aGUgdGVzdCBzdHJpbmcgYW5kIHRoZSBydW5TdGFydHMgYXJyYXkuCisgICAgICAgICAqLworICAgICAgICBmb3IgKGludCBydW4gPSAwOyBydW4gPCB0ZXN0RGF0YS5sZW5ndGg7IHJ1biArPSAxKSB7CisgICAgICAgICAgICBydW5TdGFydHNbcnVuXSA9IHN0cmluZ0xpbWl0OworICAgICAgICAgICAgc3RyaW5nTGltaXQgKz0gdGVzdERhdGFbcnVuXS5ydW5UZXh0Lmxlbmd0aCgpOworICAgICAgICAgICAgdGVzdFN0cmluZyAgKz0gdGVzdERhdGFbcnVuXS5ydW5UZXh0OworICAgICAgICB9CisKKyAgICAgICAgLyogVGhlIGxpbWl0IG9mIHRoZSBsYXN0IHJ1biAqLyAKKyAgICAgICAgcnVuU3RhcnRzW3Rlc3REYXRhLmxlbmd0aF0gPSBzdHJpbmdMaW1pdDsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4gPSBuZXcgVVNjcmlwdFJ1bih0ZXN0U3RyaW5nKTsKKyAgICAgICAgICAgIENoZWNrU2NyaXB0UnVucyhzY3JpcHRSdW4sIHJ1blN0YXJ0cywgdGVzdERhdGEpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgICAgICBlcnJsbigibmV3IFVTY3JpcHRSdW4odGVzdFN0cmluZykgcHJvZHVjZWQgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuLnJlc2V0KCk7CisgICAgICAgICAgICBDaGVja1NjcmlwdFJ1bnMoc2NyaXB0UnVuLCBydW5TdGFydHMsIHRlc3REYXRhKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICAgICAgZXJybG4oInNjcmlwdFJ1bi5yZXNldCgpIG9uIGEgdmFsaWQgVVNjcmlwdFJ1biBwcm9kdWNlZCBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24hIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4gPSBuZXcgVVNjcmlwdFJ1bih0ZXN0U3RyaW5nLnRvQ2hhckFycmF5KCkpOworICAgICAgICAgICAgQ2hlY2tTY3JpcHRSdW5zKHNjcmlwdFJ1biwgcnVuU3RhcnRzLCB0ZXN0RGF0YSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgICAgIGVycmxuKCJuZXcgVVNjcmlwdFJ1bih0ZXN0U3RyaW5nLnRvQ2hhckFycmF5KCkpIHByb2R1Y2VkIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1bi5yZXNldCgpOworICAgICAgICAgICAgQ2hlY2tTY3JpcHRSdW5zKHNjcmlwdFJ1biwgcnVuU3RhcnRzLCB0ZXN0RGF0YSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgICAgIGVycmxuKCJzY3JpcHRSdW4ucmVzZXQoKSBvbiBhIHZhbGlkIFVTY3JpcHRSdW4gcHJvZHVjZWQgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uISIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNjcmlwdFJ1bi5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigic2NyaXB0UnVuLm5leHQoKSBvbiBhbiBlbXB0eSBVU2NyaXB0UnVuIHJldHVybmVkIHRydWUhIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgICAgIGVycmxuKCJuZXcgVVNjcmlwdFJ1bigpIHByb2R1Y2VkIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNjcmlwdFJ1bi5yZXNldCh0ZXN0U3RyaW5nLCAwLCB0ZXN0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIENoZWNrU2NyaXB0UnVucyhzY3JpcHRSdW4sIHJ1blN0YXJ0cywgdGVzdERhdGEpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgICAgICBlcnJsbigic2NyaXB0UnVuLnJlc2V0KHRlc3RTdHJpbmcudG9DaGFyQXJyYXkoKSwgMCwgdGVzdFN0cmluZy5sZW5ndGgpIHByb2R1Y2VkIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY3JpcHRSdW4ucmVzZXQodGVzdFN0cmluZy50b0NoYXJBcnJheSgpLCAwLCB0ZXN0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIENoZWNrU2NyaXB0UnVucyhzY3JpcHRSdW4sIHJ1blN0YXJ0cywgdGVzdERhdGEpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgICAgICBlcnJsbigic2NyaXB0UnVuLnJlc2V0KHRlc3RTdHJpbmcudG9DaGFyQXJyYXkoKSwgMCwgdGVzdFN0cmluZy5sZW5ndGgpIHByb2R1Y2VkIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiEiKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJDYXNlVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVUNoYXJhY3RlckNhc2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3NzJiMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJDYXNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzYzIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVUNoYXJhY3RlckNhc2VUZXN0LmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMC8wMyAyMzo0MjowMiAkIAorKiAkUmV2aXNpb246IDEuNiAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lmxhbmc7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0VXRpbDsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkJyZWFrSXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCisvKioKKyogPHA+VGVzdGluZyBjaGFyYWN0ZXIgY2FzaW5nPC9wPgorKiA8cD5Nb3N0bHkgZm9sbG93aW5nIHRoZSB0ZXN0IGNhc2VzIGluIHN0cmNhc2UuY3BwIGZvciBJQ1U8L3A+CisqIEBhdXRob3IgU3luIFdlZSBRdWVrCisqIEBzaW5jZSBtYXJjaCAxNCAyMDAyCisqLworcHVibGljIGZpbmFsIGNsYXNzIFVDaGFyYWN0ZXJDYXNlVGVzdCBleHRlbmRzIFRlc3RGbXdrCit7IAorCS8vIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBVQ2hhcmFjdGVyQ2FzZVRlc3QoKQorCXsKKwl9CisJICAKKwkvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJnKSAgCisJeworCSAgICB0cnkKKwkgICAgeworCSAgICAgIAlVQ2hhcmFjdGVyQ2FzZVRlc3QgdGVzdCA9IG5ldyBVQ2hhcmFjdGVyQ2FzZVRlc3QoKTsKKwkgICAgICAJdGVzdC5ydW4oYXJnKTsKKwkgICAgfQorCSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCisJICAgIHsKKwkgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkgICAgfQorCX0KKwkgIAorCS8qKgorCSAqIFRlc3RpbmcgdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlIGZ1bmN0aW9uIG9mIFVDaGFyYWN0ZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCBUZXN0Q2hhcmFjdGVyKCkKKwl7CisJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQ0hBUkFDVEVSX0xPV0VSXy5sZW5ndGg7IGkgKyspIHsKKwkgICAgICAJaWYgKFVDaGFyYWN0ZXIuaXNMZXR0ZXIoQ0hBUkFDVEVSX0xPV0VSX1tpXSkgJiYgCisJICAgICAgCSAJIVVDaGFyYWN0ZXIuaXNMb3dlckNhc2UoQ0hBUkFDVEVSX0xPV0VSX1tpXSkpIHsKKwkgICAgICAgIAllcnJsbigiRkFJTCBpc0xvd2VyQ2FzZSB0ZXN0IGZvciBcXHUiICsgCisJICAgICAgICAJICAgICAgaGV4KENIQVJBQ1RFUl9MT1dFUl9baV0pKTsKKwkgICAgICAgIAlicmVhazsKKwkgICAgICAJfQorCSAgICAgIAlpZiAoVUNoYXJhY3Rlci5pc0xldHRlcihDSEFSQUNURVJfVVBQRVJfW2ldKSAmJiAKKwkgICAgICAJICAgICEoVUNoYXJhY3Rlci5pc1VwcGVyQ2FzZShDSEFSQUNURVJfVVBQRVJfW2ldKSB8fAorCSAgICAgIAkgICAgICBVQ2hhcmFjdGVyLmlzVGl0bGVDYXNlKENIQVJBQ1RFUl9VUFBFUl9baV0pKSkgeworCSAgICAgICAgCWVycmxuKCJGQUlMIGlzVXBwZXJDYXNlIHRlc3QgZm9yIFxcdSIgKyAKKwkgICAgICAgIAkgICAgICBoZXgoQ0hBUkFDVEVSX1VQUEVSX1tpXSkpOworCSAgICAgICAgCWJyZWFrOworCSAgICAgIAl9CisJICAgICAgCWlmIChDSEFSQUNURVJfTE9XRVJfW2ldICE9IAorCSAgICAgIAkgICAgVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShDSEFSQUNURVJfVVBQRVJfW2ldKSB8fCAKKwkgICAgICAgICAgCShDSEFSQUNURVJfVVBQRVJfW2ldICE9IAorCSAgICAgICAgICAJVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShDSEFSQUNURVJfTE9XRVJfW2ldKSAmJgorCSAgICAgICAgICAgIENIQVJBQ1RFUl9VUFBFUl9baV0gIT0gCisJICAgICAgICAgICAgVUNoYXJhY3Rlci50b1RpdGxlQ2FzZShDSEFSQUNURVJfTE9XRVJfW2ldKSkpIHsKKwkgICAgICAgIAllcnJsbigiRkFJTCBjYXNlIGNvbnZlcnNpb24gdGVzdCBmb3IgXFx1IiArIAorCSAgICAgICAgCSAgICAgIGhleChDSEFSQUNURVJfVVBQRVJfW2ldKSArIAorCSAgICAgICAgCSAgICAgICIgdG8gXFx1IiArIGhleChDSEFSQUNURVJfTE9XRVJfW2ldKSk7CisJICAgICAgICAJYnJlYWs7CisJICAgICAgCX0KKwkgICAgICAJaWYgKENIQVJBQ1RFUl9MT1dFUl9baV0gIT0gCisJICAgICAgCSAgICBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKENIQVJBQ1RFUl9MT1dFUl9baV0pKSB7CisJICAgICAgICAJZXJybG4oIkZBSUwgbG93ZXIgY2FzZSBjb252ZXJzaW9uIHRlc3QgZm9yIFxcdSIgKyAKKwkgICAgICAgIAkgICAgICBoZXgoQ0hBUkFDVEVSX0xPV0VSX1tpXSkpOworCSAgICAgICAgCWJyZWFrOworCSAgICAgIAl9CisJICAgICAgCWlmIChDSEFSQUNURVJfVVBQRVJfW2ldICE9IAorCSAgICAgIAkgICAgVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShDSEFSQUNURVJfVVBQRVJfW2ldKSAmJiAKKwkgICAgICAgICAgCUNIQVJBQ1RFUl9VUFBFUl9baV0gIT0gCisJICAgICAgICAgIAlVQ2hhcmFjdGVyLnRvVGl0bGVDYXNlKENIQVJBQ1RFUl9VUFBFUl9baV0pKSB7CisJICAgICAgICAJZXJybG4oIkZBSUwgdXBwZXIgY2FzZSBjb252ZXJzaW9uIHRlc3QgZm9yIFxcdSIgKyAKKwkgICAgICAgIAkgICAgICBoZXgoQ0hBUkFDVEVSX1VQUEVSX1tpXSkpOworCSAgICAgICAgCWJyZWFrOworCSAgICAgIAl9CisJICAgICAgCWxvZ2xuKCJPayAgICBcXHUiICsgaGV4KENIQVJBQ1RFUl9VUFBFUl9baV0pICsgIiBhbmQgXFx1IiArIAorCSAgICAgIAkgICAgICBoZXgoQ0hBUkFDVEVSX0xPV0VSX1tpXSkpOworCSAgICB9CisJfQorCSAgCisJcHVibGljIHZvaWQgVGVzdEZvbGRpbmcoKSAKKwl7CisJICAgIC8vIHRlc3Qgc2ltcGxlIGNhc2UgZm9sZGluZworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IEZPTERJTkdfU0lNUExFXy5sZW5ndGg7IGkgKz0gMykgeworICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuZm9sZENhc2UoRk9MRElOR19TSU1QTEVfW2ldLCB0cnVlKSAhPSAKKwkgICAgICAgICAgICBGT0xESU5HX1NJTVBMRV9baSArIDFdKSB7CisJICAgICAgICAgICAgZXJybG4oIkZBSUw6IGZvbGRDYXNlKFxcdSIgKyBoZXgoRk9MRElOR19TSU1QTEVfW2ldKSArIAorCSAgICAgICAgICAgICAgICAgICIsIHRydWUpIHNob3VsZCBiZSBcXHUiICsgaGV4KEZPTERJTkdfU0lNUExFX1tpICsgMV0pKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChVQ2hhcmFjdGVyLmZvbGRDYXNlKEZPTERJTkdfU0lNUExFX1tpXSwgZmFsc2UpICE9IAorCSAgICAgICAgICAgIEZPTERJTkdfU0lNUExFX1tpICsgMl0pIHsKKwkgICAgICAgICAgICBlcnJsbigiRkFJTDogZm9sZENhc2UoXFx1IiArIGhleChGT0xESU5HX1NJTVBMRV9baV0pICsgCisJICAgICAgICAgICAgICAgICAgIiwgZmFsc2UpIHNob3VsZCBiZSBcXHUiICsgaGV4KEZPTERJTkdfU0lNUExFX1tpICsgMl0pKTsKKwkgICAgICAgIH0KKwkgICAgfQorCisJCS8vIFRlc3QgZnVsbCBzdHJpbmcgY2FzZSBmb2xkaW5nIHdpdGggZGVmYXVsdCBvcHRpb24gYW5kIHNlcGFyYXRlIAorCQkvLyBidWZmZXJzICAgCisgICAgICAgIGlmICghRk9MRElOR19ERUZBVUxUX1swXS5lcXVhbHMoVUNoYXJhY3Rlci5mb2xkQ2FzZShGT0xESU5HX01JWEVEX1swXSwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSkpIHsKKwkgICAgICAgIGVycmxuKCJGQUlMOiBmb2xkQ2FzZSgiICsgaGV4KEZPTERJTkdfTUlYRURfWzBdKSArIAorCSAgICAgICAgICAgICAgIiwgdHJ1ZSkgc2hvdWxkIGJlICIgKyBGT0xESU5HX0RFRkFVTFRfWzBdKTsKKwkgICAgfQorCSAgICAKKwkJaWYgKCFGT0xESU5HX0VYQ0xVREVfU1BFQ0lBTF9JX1swXS5lcXVhbHMoICAgICAgCQkgICAgICAgICAgICAgICAgICAgIAorCQkJCQkJCVVDaGFyYWN0ZXIuZm9sZENhc2UoRk9MRElOR19NSVhFRF9bMF0sIGZhbHNlKSkpIHsKKwkgICAgICAJZXJybG4oIkZBSUw6IGZvbGRDYXNlKCIgKyBoZXgoRk9MRElOR19NSVhFRF9bMF0pICsgCisJICAgICAgCSAgICAgICIsIGZhbHNlKSBzaG91bGQgYmUgIiArIEZPTERJTkdfRVhDTFVERV9TUEVDSUFMX0lfWzBdKTsKKwkgICAgfQorCSAgICAKKwkgICAgaWYgKCFGT0xESU5HX0RFRkFVTFRfWzFdLmVxdWFscyhVQ2hhcmFjdGVyLmZvbGRDYXNlKEZPTERJTkdfTUlYRURfWzFdLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpKSkgeworCSAgICAgICBlcnJsbigiRkFJTDogZm9sZENhc2UoIiArIGhleChGT0xESU5HX01JWEVEX1sxXSkgKyAKKwkgICAgICAgICAgICAgIiwgdHJ1ZSkgc2hvdWxkIGJlICIgKyBoZXgoRk9MRElOR19ERUZBVUxUX1sxXSkpOworCSAgICB9CisJCisJCisJICAgIC8vIGFsdGVybmF0ZSBoYW5kbGluZyBmb3IgZG90dGVkIEkvZG90bGVzcyBpIChVKzAxMzAsIFUrMDEzMSkKKwkgICAgaWYgKCFGT0xESU5HX0VYQ0xVREVfU1BFQ0lBTF9JX1sxXS5lcXVhbHMoCisJICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmZvbGRDYXNlKEZPTERJTkdfTUlYRURfWzFdLCBmYWxzZSkpKSB7CisJICAgICAgICBlcnJsbigiRkFJTDogZm9sZENhc2UoIiArIGhleChGT0xESU5HX01JWEVEX1sxXSkgKyAKKwkgICAgICAgICAgICAgICIsIGZhbHNlKSBzaG91bGQgYmUgIiArIGhleChGT0xESU5HX0VYQ0xVREVfU1BFQ0lBTF9JX1sxXSkpOworCSAgICB9CisJfQorCQkKKwkvKioKKwkgKiBUZXN0aW5nIHRoZSBzdHJpbmdzIGNhc2UgbWFwcGluZyBtZXRob2RzCisJICovCisJcHVibGljIHZvaWQgVGVzdFVwcGVyKCkgCisJewkKKwkgICAgLy8gdXBwZXJjYXNlIHdpdGggcm9vdCBsb2NhbGUgYW5kIGluIHRoZSBzYW1lIGJ1ZmZlcgorCSAgICBpZiAoIVVQUEVSX1JPT1RfLmVxdWFscyhVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKFVQUEVSX0JFRk9SRV8pKSkgeworCSAgICAJZXJybG4oIkZhaWwgIiArIFVQUEVSX0JFRk9SRV8gKyAiIGFmdGVyIHVwcGVyY2FzZSBzaG91bGQgYmUgIiArIAorCSAgICAgIAkJICBVUFBFUl9ST09UXyArICIgaW5zdGVhZCBnb3QgIiArIAorCSAgICAgIAkJICBVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKFVQUEVSX0JFRk9SRV8pKTsKKwkgICAgfQorCSAgICAgIAorCSAgICAvLyB1cHBlcmNhc2Ugd2l0aCB0dXJraXNoIGxvY2FsZSBhbmQgc2VwYXJhdGUgYnVmZmVycworCSAgICBpZiAoIVVQUEVSX1RVUktJU0hfLmVxdWFscyhVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKFRVUktJU0hfTE9DQUxFXywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQUEVSX0JFRk9SRV8pKSkgeworICAgICAgCQllcnJsbigiRmFpbCAiICsgVVBQRVJfQkVGT1JFXyArIAorICAgICAgCQkgICAgICAiIGFmdGVyIHR1cmtpc2gtc2Vuc2l0aXZlIHVwcGVyY2FzZSBzaG91bGQgYmUgIiArIAorICAgICAgCQkgICAgICBVUFBFUl9UVVJLSVNIXyArICIgaW5zdGVhZCBvZiAiICsKKyAgICAgIAkJICAgICAgVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShUVVJLSVNIX0xPQ0FMRV8sIFVQUEVSX0JFRk9SRV8pKTsKKwkgIAl9CisJICAJCQorCSAgCS8vIHVwcGVyY2FzZSBhIHNob3J0IHN0cmluZyB3aXRoIHJvb3QgbG9jYWxlCisJICAgIGlmICghVVBQRVJfTUlOSV9VUFBFUl8uZXF1YWxzKFVDaGFyYWN0ZXIudG9VcHBlckNhc2UoVVBQRVJfTUlOSV8pKSkgeworCSAgICAgICAgZXJybG4oImVycm9yIGluIHRvVXBwZXIocm9vdCBsb2NhbGUpPVwiIiArIFVQUEVSX01JTklfICsgCisJICAgICAgICAgICAgICAiXCIgZXhwZWN0ZWQgXCIiICsgVVBQRVJfTUlOSV9VUFBFUl8gKyAiXCIiKTsKKwkgICAgfQorCSAgICAKKwkgICAgaWYgKCFTSEFSRURfVVBQRVJDQVNFX1RPUEtBUF8uZXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKFNIQVJFRF9MT1dFUkNBU0VfVE9QS0FQXykpKSB7CisJICAgICAgICBlcnJsbigidG9VcHBlciBmYWlsZWQ6IGV4cGVjdGVkIFwiIiArCisJICAgICAgICAgICAgICBTSEFSRURfVVBQRVJDQVNFX1RPUEtBUF8gKyAiXCIsIGdvdCBcIiIgKyAKKyAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIudG9VcHBlckNhc2UoU0hBUkVEX0xPV0VSQ0FTRV9UT1BLQVBfKSArICJcIi4iKTsKKwkJfQorCQorCSAgICBpZiAoIVNIQVJFRF9VUFBFUkNBU0VfVFVSS0lTSF8uZXF1YWxzKAorICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShUVVJLSVNIX0xPQ0FMRV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSEFSRURfTE9XRVJDQVNFX1RPUEtBUF8pKSkgeworCSAgICAgICAgZXJybG4oInRvVXBwZXIgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyAKKwkgICAgICAgICAgICAgIFNIQVJFRF9VUFBFUkNBU0VfVFVSS0lTSF8gKyAiXCIsIGdvdCBcIiIgKyAKKwkgICAgICAgICAgICAgIFVDaGFyYWN0ZXIudG9VcHBlckNhc2UoVFVSS0lTSF9MT0NBTEVfLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSEFSRURfTE9XRVJDQVNFX1RPUEtBUF8pICsgIlwiLiIpOworCQl9CisJCisJICAgIGlmICghU0hBUkVEX1VQUEVSQ0FTRV9HRVJNQU5fLmVxdWFscygKKwkgICAgCQlVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKEdFUk1BTl9MT0NBTEVfLCAKKwkgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICBTSEFSRURfTE9XRVJDQVNFX0dFUk1BTl8pKSkgeworCSAgICAgICAgZXJybG4oInRvVXBwZXIgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyBTSEFSRURfVVBQRVJDQVNFX0dFUk1BTl8gCisJICAgICAgICAgICAgICArICJcIiwgZ290IFwiIiArIFVDaGFyYWN0ZXIudG9VcHBlckNhc2UoR0VSTUFOX0xPQ0FMRV8sIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQVJFRF9MT1dFUkNBU0VfR0VSTUFOXykgKyAiXCIuIik7CisgICAgICAgIH0KKwkgICAgCisJICAgIGlmICghU0hBUkVEX1VQUEVSQ0FTRV9HUkVFS18uZXF1YWxzKAorCSAgICAJCVVDaGFyYWN0ZXIudG9VcHBlckNhc2UoU0hBUkVEX0xPV0VSQ0FTRV9HUkVFS18pKSkgeworCSAgICAgICAgZXJybG4oInRvTG93ZXIgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyBTSEFSRURfVVBQRVJDQVNFX0dSRUVLXyArCisJICAgICAgICAgICAgICAiXCIsIGdvdCBcIiIgKyBVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKAorICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQVJFRF9MT1dFUkNBU0VfR1JFRUtfKSArICJcIi4iKTsKKyAgICAJfQorCX0KKwkgIAorCXB1YmxpYyB2b2lkIFRlc3RMb3dlcigpIAorCXsKKwkJaWYgKCFMT1dFUl9ST09UXy5lcXVhbHMoVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShMT1dFUl9CRUZPUkVfKSkpIHsKKwkgICAJCWVycmxuKCJGYWlsICIgKyBMT1dFUl9CRUZPUkVfICsgIiBhZnRlciBsb3dlcmNhc2Ugc2hvdWxkIGJlICIgKyAKKwkgICAJCSAgICAgIExPV0VSX1JPT1RfICsgIiBpbnN0ZWFkIG9mICIgKyAKKwkgICAJCSAgICAgIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoTE9XRVJfQkVGT1JFXykpOworCQl9CisJICAgCisJICAgCS8vIGxvd2VyY2FzZSB3aXRoIHR1cmtpc2ggbG9jYWxlCisJICAgCWlmICghTE9XRVJfVFVSS0lTSF8uZXF1YWxzKFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoVFVSS0lTSF9MT0NBTEVfLCAKKwkgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT1dFUl9CRUZPUkVfKSkpIHsKKwkgICAJCWVycmxuKCJGYWlsICIgKyBMT1dFUl9CRUZPUkVfICsgCisJICAgICAJCSAgIiBhZnRlciB0dXJraXNoLXNlbnNpdGl2ZSBsb3dlcmNhc2Ugc2hvdWxkIGJlICIgKyAKKwkgICAgIAkJICBMT1dFUl9UVVJLSVNIXyArICIgaW5zdGVhZCBvZiAiICsgCisJICAgICAJCSAgVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShUVVJLSVNIX0xPQ0FMRV8sIExPV0VSX0JFRk9SRV8pKTsKKwkgICAgfQorCSAgICBpZiAoIVNIQVJFRF9MT1dFUkNBU0VfSVNUQU5CVUxfLmVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoU0hBUkVEX1VQUEVSQ0FTRV9JU1RBTkJVTF8pKSkgeworCSAgICAgICAgZXJybG4oIjEuIHRvTG93ZXIgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyAKKwkgICAgICAgICAgICAgIFNIQVJFRF9MT1dFUkNBU0VfSVNUQU5CVUxfICsgIlwiLCBnb3QgXCIiICsgCisgICAgICAgICAgICAgIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoU0hBUkVEX1VQUEVSQ0FTRV9JU1RBTkJVTF8pICsgIlwiLiIpOworCSAgICB9CisKKwkJaWYgKCFTSEFSRURfTE9XRVJDQVNFX1RVUktJU0hfLmVxdWFscygKKwkgICAgICAgICAgICBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKFRVUktJU0hfTE9DQUxFXywgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSEFSRURfVVBQRVJDQVNFX0lTVEFOQlVMXykpKSB7CQorCSAgICAJZXJybG4oIjIuIHRvTG93ZXIgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyAKKwkgICAgCSAgICAgIFNIQVJFRF9MT1dFUkNBU0VfVFVSS0lTSF8gKyAiXCIsIGdvdCBcIiIgKyAKKwkgICAgCSAgICAgIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoVFVSS0lTSF9MT0NBTEVfLAorCQkgICAgICAgICAgICAgICAgICAgICAgICBTSEFSRURfVVBQRVJDQVNFX0lTVEFOQlVMXykgKyAiXCIuIik7CisJICAgIH0KKwkgICAgaWYgKCFTSEFSRURfTE9XRVJDQVNFX0dSRUVLXy5lcXVhbHMoCisJICAgIAkJVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShHUkVFS19MT0NBTEVfLCAKKwkgICAgCQkgICAgICAgICAgICAgICAgICAgICAgIFNIQVJFRF9VUFBFUkNBU0VfR1JFRUtfKSkpIHsKKwkgICAgICAgIGVycmxuKCJ0b0xvd2VyIGZhaWxlZDogZXhwZWN0ZWQgXCIiICsgU0hBUkVEX0xPV0VSQ0FTRV9HUkVFS18gKworCSAgICAgICAgICAgICAgIlwiLCBnb3QgXCIiICsgVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShHUkVFS19MT0NBTEVfLCAKKyAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSEFSRURfVVBQRVJDQVNFX0dSRUVLXykgKyAiXCIuIik7CisgICAgCX0KKwl9CisJICAJCisJcHVibGljIHZvaWQgVGVzdFRpdGxlKCkgCisJeworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IFRJVExFX0JSRUFLSVRFUkFUT1JTXy5sZW5ndGg7IGkgKyspIHsKKwkgICAgCVN0cmluZyB0ZXN0ID0gVElUTEVfREFUQV9baSA8PCAxXTsKKwkgICAgCVN0cmluZyBleHBlY3RlZCA9IFRJVExFX0RBVEFfWyhpIDw8IDEpICsgMV07CisJICAgIAlpZiAoIWV4cGVjdGVkLmVxdWFscygKKwkgICAgCSAgICBVQ2hhcmFjdGVyLnRvVGl0bGVDYXNlKHRlc3QsCisJICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICBUSVRMRV9CUkVBS0lURVJBVE9SU19baV0pKSkgeworCSAgICAgICAgICAgIGVycmxuKCJlcnJvcjogdGl0bGVjYXNpbmcgZm9yICIgKyBoZXgodGVzdCkgKyAiIHNob3VsZCBiZSAiICsgCisJICAgICAgICAgICAgICAgICAgaGV4KGV4cGVjdGVkKSArICIgYnV0IGdvdCAiICsKKwkgICAgICAgICAgICAgICAgICBoZXgoVUNoYXJhY3Rlci50b1RpdGxlQ2FzZSh0ZXN0LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSVRMRV9CUkVBS0lURVJBVE9SU19baV0pKSk7CisJICAgICAgICB9CisJICAgIH0KKwl9CisJCisJcHVibGljIHZvaWQgVGVzdFNwZWNpYWwoKQorCXsgICAKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTUEVDSUFMX0xPQ0FMRVNfLmxlbmd0aDsgaSArKykgeworCSAgICAJaW50ICAgIGogICAgICA9IGkgKiAzOworCSAgICAJTG9jYWxlIGxvY2FsZSA9IFNQRUNJQUxfTE9DQUxFU19baV07CisJICAgIAlTdHJpbmcgc3RyICAgID0gU1BFQ0lBTF9EQVRBX1tqXTsKKwkgICAgCWlmIChsb2NhbGUgIT0gbnVsbCkgeworCSAJCQlpZiAoIVNQRUNJQUxfREFUQV9baiArIDFdLmVxdWFscygKKwkgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UobG9jYWxlLCBzdHIpKSkgeworCQkgICAgICAgIAllcnJsbigiZXJyb3IgbG93ZXJjYXNpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzICIgKyAKKwkJICAgICAgICAgICAgICAJaGV4KHN0cikgKyAiIGV4cGVjdGVkICIgKyBoZXgoU1BFQ0lBTF9EQVRBX1tqICsgMV0pIAorCQkgICAgICAgICAgICAgIAkrICIgZm9yIGxvY2FsZSAiICsgbG9jYWxlLnRvU3RyaW5nKCkgKyAiIGJ1dCBnb3QgIiArIAorCQkgICAgICAgICAgICAgIAloZXgoVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShsb2NhbGUsIHN0cikpKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKCFTUEVDSUFMX0RBVEFfW2ogKyAyXS5lcXVhbHMoCisJICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGxvY2FsZSwgc3RyKSkpIHsKKwkJICAgICAgICAJZXJybG4oImVycm9yIHVwcGVyY2FzaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAiICsgCisJCSAgICAgICAgICAgICAgCWhleChzdHIpICsgIiBleHBlY3RlZCAiICsgU1BFQ0lBTF9EQVRBX1tqICsgMl0gCisJCSAgICAgICAgICAgICAgCSsgIiBmb3IgbG9jYWxlICIgKyBsb2NhbGUudG9TdHJpbmcoKSArICIgYnV0IGdvdCAiICsgCisJCSAgICAgICAgICAgICAgCWhleChVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGxvY2FsZSwgc3RyKSkpOworCSAgICAgICAgICAgIH0KKwkJICAgIH0gICAJCisJCSAgICBlbHNlIHsKKwkJICAgIAlpZiAoIVNQRUNJQUxfREFUQV9baiArIDFdLmVxdWFscygKKwkgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2Uoc3RyKSkpIHsKKwkJICAgICAgICAJZXJybG4oImVycm9yIGxvd2VyY2FzaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAiICsgCisJCSAgICAgICAgICAgICAgCWhleChzdHIpICsgIiBleHBlY3RlZCAiICsgU1BFQ0lBTF9EQVRBX1tqICsgMV0gKyAKKwkJICAgICAgICAgICAgICAJIiBidXQgZ290ICIgKyAKKwkJICAgICAgICAgICAgICAJaGV4KFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UobG9jYWxlLCBzdHIpKSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmICghU1BFQ0lBTF9EQVRBX1tqICsgMl0uZXF1YWxzKAorCSAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShsb2NhbGUsIHN0cikpKSB7CisJCSAgICAgICAgCWVycmxuKCJlcnJvciB1cHBlcmNhc2luZyBzcGVjaWFsIGNoYXJhY3RlcnMgIiArIAorCQkgICAgICAgICAgICAgIAloZXgoc3RyKSArICIgZXhwZWN0ZWQgIiArIFNQRUNJQUxfREFUQV9baiArIDJdICsgCisJCSAgICAgICAgICAgICAgCSIgYnV0IGdvdCAiICsgCisJCSAgICAgICAgICAgICAgCWhleChVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGxvY2FsZSwgc3RyKSkpOworCSAgICAgICAgICAgIH0KKwkJICAgIH0KKwkgICAgfQorCSAgICAKKwkgICAgLy8gdHVya2lzaCAmIGF6ZXJiYWlqYW5pIGRvdGxlc3MgaSAmIGRvdHRlZCBJCisJICAgIC8vIHJlbW92ZSBkb3QgYWJvdmUgaWYgdGhlcmUgd2FzIGEgY2FwaXRhbCBJIGJlZm9yZSBhbmQgdGhlcmUgYXJlIG5vIAorCSAgICAvLyBtb3JlIGFjY2VudHMgYWJvdmUKKwkgICAgaWYgKCFTUEVDSUFMX0RPVFRFRF9MT1dFUl9UVVJLSVNIXy5lcXVhbHMoVUNoYXJhY3Rlci50b0xvd2VyQ2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVVJLSVNIX0xPQ0FMRV8sIFNQRUNJQUxfRE9UVEVEXykpKSB7CisJICAgICAgICBlcnJsbigiZXJyb3IgaW4gZG90cy50b0xvd2VyKHRyKT1cIiIgKyBTUEVDSUFMX0RPVFRFRF8gKyAKKwkgICAgICAgICAgICAgICJcIiBleHBlY3RlZCBcIiIgKyBTUEVDSUFMX0RPVFRFRF9MT1dFUl9UVVJLSVNIXyArIAorCSAgICAgICAgICAgICAgIlwiIGJ1dCBnb3QgIiArIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoVFVSS0lTSF9MT0NBTEVfLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BFQ0lBTF9ET1RURURfKSk7CisJICAgIH0KKwkJaWYgKCFTUEVDSUFMX0RPVFRFRF9MT1dFUl9HRVJNQU5fLmVxdWFscyhVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VSTUFOX0xPQ0FMRV8sIFNQRUNJQUxfRE9UVEVEXykpKSB7CisJICAgICAgICBlcnJsbigiZXJyb3IgaW4gZG90cy50b0xvd2VyKGRlKT1cIiIgKyBTUEVDSUFMX0RPVFRFRF8gKyAKKwkgICAgICAgICAgICAgICJcIiBleHBlY3RlZCBcIiIgKyBTUEVDSUFMX0RPVFRFRF9MT1dFUl9HRVJNQU5fICsgCisJICAgICAgICAgICAgICAiXCIgYnV0IGdvdCAiICsgVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShHRVJNQU5fTE9DQUxFXywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQRUNJQUxfRE9UVEVEXykpOworCSAgICB9CisJCisJCS8vIGxpdGh1YW5pYW4gZG90IGFib3ZlIGluIHVwcGVyY2FzaW5nCisJCWlmICghU1BFQ0lBTF9ET1RfQUJPVkVfVVBQRVJfTElUSFVBTklBTl8uZXF1YWxzKAorCQkgICAgIFVDaGFyYWN0ZXIudG9VcHBlckNhc2UoTElUSFVBTklBTl9MT0NBTEVfLCBTUEVDSUFMX0RPVF9BQk9WRV8pKSkgeworCSAgICAgICAgZXJybG4oImVycm9yIGluIGRvdHMudG9VcHBlcihsdCk9XCIiICsgU1BFQ0lBTF9ET1RfQUJPVkVfICsgCisJICAgICAgICAgICAgICAiXCIgZXhwZWN0ZWQgXCIiICsgU1BFQ0lBTF9ET1RfQUJPVkVfVVBQRVJfTElUSFVBTklBTl8gKyAKKwkgICAgICAgICAgICAgICJcIiBidXQgZ290ICIgKyBVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKExJVEhVQU5JQU5fTE9DQUxFXywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQRUNJQUxfRE9UX0FCT1ZFXykpOworCSAgICB9CisJCWlmICghU1BFQ0lBTF9ET1RfQUJPVkVfVVBQRVJfR0VSTUFOXy5lcXVhbHMoVUNoYXJhY3Rlci50b1VwcGVyQ2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVJNQU5fTE9DQUxFXywgU1BFQ0lBTF9ET1RfQUJPVkVfKSkpIHsKKwkgICAgICAgIGVycmxuKCJlcnJvciBpbiBkb3RzLnRvVXBwZXIoZGUpPVwiIiArIFNQRUNJQUxfRE9UX0FCT1ZFXyArIAorCSAgICAgICAgICAgICAgIlwiIGV4cGVjdGVkIFwiIiArIFNQRUNJQUxfRE9UX0FCT1ZFX1VQUEVSX0dFUk1BTl8gKyAKKwkgICAgICAgICAgICAgICJcIiBidXQgZ290ICIgKyBVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKEdFUk1BTl9MT0NBTEVfLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BFQ0lBTF9ET1RfQUJPVkVfKSk7CisJICAgIH0JICAgIAorCSAgICAKKwkJLy8gbGl0aHVhbmlhbiBhZGRzIGRvdCBhYm92ZSB0byBpIGluIGxvd2VyY2FzaW5nIGlmIHRoZXJlIGFyZSBtb3JlIAorCQkvLyBhYm92ZSBhY2NlbnRzCisJCWlmICghU1BFQ0lBTF9ET1RfQUJPVkVfTE9XRVJfTElUSFVBTklBTl8uZXF1YWxzKAorCQkJVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShMSVRIVUFOSUFOX0xPQ0FMRV8sIAorCQkJICAgICAgICAgICAgICAgICAgICAgICBTUEVDSUFMX0RPVF9BQk9WRV9VUFBFUl8pKSkgeworCSAgICAgICAgZXJybG4oImVycm9yIGluIGRvdHMudG9Mb3dlcihsdCk9XCIiICsgU1BFQ0lBTF9ET1RfQUJPVkVfVVBQRVJfICsgCisJICAgICAgICAgICAgICAiXCIgZXhwZWN0ZWQgXCIiICsgU1BFQ0lBTF9ET1RfQUJPVkVfTE9XRVJfTElUSFVBTklBTl8gKyAKKwkgICAgICAgICAgICAgICJcIiBidXQgZ290ICIgKyBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKExJVEhVQU5JQU5fTE9DQUxFXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQRUNJQUxfRE9UX0FCT1ZFX1VQUEVSXykpOworCSAgICB9CisJCWlmICghU1BFQ0lBTF9ET1RfQUJPVkVfTE9XRVJfR0VSTUFOXy5lcXVhbHMoCisJCQlVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKEdFUk1BTl9MT0NBTEVfLCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgU1BFQ0lBTF9ET1RfQUJPVkVfVVBQRVJfKSkpIHsKKwkgICAgICAgIGVycmxuKCJlcnJvciBpbiBkb3RzLnRvTG93ZXIoZGUpPVwiIiArIFNQRUNJQUxfRE9UX0FCT1ZFX1VQUEVSXyArIAorCSAgICAgICAgICAgICAgIlwiIGV4cGVjdGVkIFwiIiArIFNQRUNJQUxfRE9UX0FCT1ZFX0xPV0VSX0dFUk1BTl8gKyAKKwkgICAgICAgICAgICAgICJcIiBidXQgZ290ICIgKyBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKEdFUk1BTl9MT0NBTEVfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BFQ0lBTF9ET1RfQUJPVkVfVVBQRVJfKSk7CisJICAgIH0KKwl9CisJICAKKwkvKioKKwkgKiBUZXN0cyBmb3IgY2FzZSBtYXBwaW5nIGluIHRoZSBmaWxlIFNwZWNpYWxDYXNpbmcudHh0CisJICogVGhpcyBtZXRob2QgcmVhZHMgaW4gU3BlY2lhbENhc2luZy50eHQgZmlsZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gCisJICogQSBkZWZhdWx0IHBhdGggaXMgcHJvdmlkZWQgcmVsYXRpdmUgdG8gdGhlIHNyYyBwYXRoLCBob3dldmVyIHRoZSB1c2VyIAorCSAqIGNvdWxkIHNldCBhIHN5c3RlbSBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBwYXRoLjxicj4KKwkgKiBlLmcuIGphdmEgLURVbmljb2RlRGF0YT0iZGF0YV9kaXJfcGF0aCIgY29tLmlibS5kZXYudGVzdC5sYW5nLlVDaGFyYWN0ZXJUZXN0CisJICovCisJcHVibGljIHZvaWQgVGVzdFNwZWNpYWxDYXNpbmdUeHQoKQorCXsKKwkgICAgdHJ5CisJCXsKKwkJICAJLy8gcmVhZGluZyBpbiB0aGUgU3BlY2lhbENhc2luZyBmaWxlCisJCSAgCUJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gVGVzdFV0aWwuZ2V0RGF0YVJlYWRlcigKKwkJICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZS9TcGVjaWFsQ2FzaW5nLnR4dCIpOworICAgICAgICAgICAgd2hpbGUgKHRydWUpCisJICAgICAgCXsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcyA9IGlucHV0LnJlYWRMaW5lKCk7CisJICAgICAgICAJaWYgKHMgPT0gbnVsbCkgeworCSAgICAgICAgICAgIAlicmVhazsKKwkgICAgICAgIAl9CisgICAgICAgICAgICAgICAgaWYgKHMubGVuZ3RoKCkgPT0gMCB8fCBzLmNoYXJBdCgwKSA9PSAnIycpIHsKKwkgICAgICAgICAgICAJY29udGludWU7CisJICAgICAgICAJfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cmluZyBjaHN0cltdID0gZ2V0VW5pY29kZVN0cmluZ3Mocyk7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHN0cmJ1ZmZlciAgID0gbmV3IFN0cmluZ0J1ZmZlcihjaHN0clswXSk7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGxvd2VyYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcihjaHN0clsxXSk7IAorICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB1cHBlcmJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoY2hzdHJbM10pOyAKKyAgICAgICAgICAgICAgICBMb2NhbGUgbG9jYWxlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gNDsgaSA8IGNoc3RyLmxlbmd0aDsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29uZGl0aW9uID0gY2hzdHJbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChDaGFyYWN0ZXIuaXNMb3dlckNhc2UoY2hzdHJbaV0uY2hhckF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkIGxvY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjaHN0cltpXSwgIiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbmRpdGlvbi5jb21wYXJlVG9JZ25vcmVDYXNlKCJOb3RfQmVmb3JlX0RvdCIpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHVybnMgSSBpbnRvIGRvdGxlc3MgaQorICAgICAgICAgICAgICAgICAgICB9ICAgIAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25kaXRpb24uY29tcGFyZVRvSWdub3JlQ2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3JlX0Fib3ZlIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmJ1ZmZlci5hcHBlbmQoKGNoYXIpMHgzMDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyYnVmZmVyLmFwcGVuZCgoY2hhcikweDMwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJidWZmZXIuYXBwZW5kKChjaGFyKTB4MzAwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25kaXRpb24uY29tcGFyZVRvSWdub3JlQ2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnRlcl9Tb2Z0X0RvdHRlZCIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJidWZmZXIuaW5zZXJ0KDAsICdpJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXJidWZmZXIuaW5zZXJ0KDAsICdpJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxhbmcgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZyA9IGxvY2FsZS5nZXRMYW5ndWFnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFuZy5lcXVhbHMoInRyIikgfHwgbGFuZy5lcXVhbHMoImF6IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJidWZmZXIuaW5zZXJ0KDAsICdcdTAxMzAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyYnVmZmVyLmluc2VydCgwLCAnSScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25kaXRpb24uY29tcGFyZVRvSWdub3JlQ2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaW5hbF9TaWdtYSIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJidWZmZXIuaW5zZXJ0KDAsICdjJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXJidWZmZXIuaW5zZXJ0KDAsICdjJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJidWZmZXIuaW5zZXJ0KDAsICdDJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgIAl9CisgICAgICAgICAgICAgICAgY2hzdHJbMF0gPSBzdHJidWZmZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBjaHN0clsxXSA9IGxvd2VyYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgY2hzdHJbM10gPSB1cHBlcmJ1ZmZlci50b1N0cmluZygpOworICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY2hzdHJbMF0pLmVxdWFscyhjaHN0clsxXSkpIHsKKyAgICAJICAgICAgICAgICAgICAgCWVycmxuKHMpOworICAgIAkgICAgICAgICAgICAgICAJZXJybG4oIkZhaWw6IHRvTG93ZXJDYXNlIGZvciBjaGFyYWN0ZXIgIiArIAorICAgIAkgICAgICAgICAgICAgICAgICAgICAgVXRpbGl0eS5lc2NhcGUoY2hzdHJbMF0pICsgIiwgZXhwZWN0ZWQgIgorICAgIAkgICAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmVzY2FwZShjaHN0clsxXSkgKyAiIGJ1dCByZXN1bHRlZCBpbiAiICsgCisgICAgCSAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGNoc3RyWzBdKSkpOworICAgIAkgICAgICAgICAgICB9CisgICAgCSAgICAgICAgICAgIGlmICghVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShjaHN0clswXSkuZXF1YWxzKGNoc3RyWzNdKSkgeworICAgIAkgICAgICAgICAgICAgICAgZXJybG4ocyk7CisgICAgCSAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogdG9VcHBlckNhc2UgZm9yIGNoYXJhY3RlciAiICsgCisgICAgCSAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShjaHN0clswXSkgKyAiLCBleHBlY3RlZCAiCisgICAgCSAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuZXNjYXBlKGNoc3RyWzNdKSArICIgYnV0IHJlc3VsdGVkIGluICIgKyAKKyAgICAJICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlKFVDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2hzdHJbMF0pKSk7CisgICAgCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShsb2NhbGUsIGNoc3RyWzBdKS5lcXVhbHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hzdHJbMV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbihzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiB0b0xvd2VyQ2FzZSBmb3IgY2hhcmFjdGVyICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlKGNoc3RyWzBdKSArICIsIGV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVXRpbGl0eS5lc2NhcGUoY2hzdHJbMV0pICsgIiBidXQgcmVzdWx0ZWQgaW4gIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGl0eS5lc2NhcGUoVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShsb2NhbGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHN0clswXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIVVDaGFyYWN0ZXIudG9VcHBlckNhc2UobG9jYWxlLCBjaHN0clswXSkuZXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoc3RyWzNdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4ocyk7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogdG9VcHBlckNhc2UgZm9yIGNoYXJhY3RlciAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShjaHN0clswXSkgKyAiLCBleHBlY3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuZXNjYXBlKGNoc3RyWzNdKSArICIgYnV0IHJlc3VsdGVkIGluICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlKFVDaGFyYWN0ZXIudG9VcHBlckNhc2UobG9jYWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hzdHJbMF0pKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisJICAgICAgCX0KKwkgICAgICAJaW5wdXQuY2xvc2UoKTsKKwkgICAgfQorCSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCisJICAgIHsKKwkgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworCSAgICB9CisJfQorCQorICAgIHB1YmxpYyB2b2lkIFRlc3RVcHBlckxvd2VyKCkKKyAgICB7CisgICAgICAgIGludCB1cHBlcltdID0gezB4MDA0MSwgMHgwMDQyLCAweDAwYjIsIDB4MDFjNCwgMHgwMWM2LCAweDAxYzksIDB4MDFjOCwgCisgICAgICAgICAgICAgICAgICAgICAgICAweDAxYzksIDB4MDAwY307CisgICAgICAgIGludCBsb3dlcltdID0gezB4MDA2MSwgMHgwMDYyLCAweDAwYjIsIDB4MDFjNiwgMHgwMWM2LCAweDAxYzksIDB4MDFjOSwgCisgICAgICAgICAgICAgICAgICAgICAgICAweDAxYzksIDB4MDAwY307CisgICAgICAgIFN0cmluZyB1cHBlclRlc3QgPSAiYWJjZGVmZzEyM2hpai4/OmtsbW5vIjsKKyAgICAgICAgU3RyaW5nIGxvd2VyVGVzdCA9ICJBQkNERUZHMTIzSElKLj86S0xNTk8iOworICAgICAgCisgICAgICAgIC8vIENoZWNrcyBMZXR0ZXJMaWtlIFN5bWJvbHMgd2hpY2ggd2VyZSBwcmV2aW91c2x5IGEgc291cmNlIG9mIAorICAgICAgICAvLyBjb25mdXNpb24gW0JlcnRyYW5kIEEuIEQuIDAyLzA0Lzk4XQorICAgICAgICBmb3IgKGludCBpID0gMHgyMTAwOyBpIDwgMHgyMTM4OyBpICsrKSB7CisgICAgICAgICAgICBpZiAoaSAhPSAweDIxMjYgJiYgaSAhPSAweDIxMmEgJiYgaSAhPSAweDIxMmIpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGkpKSB7IC8vIGl0c2VsZgorICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbGVkIGNhc2UgY29udmVyc2lvbiB3aXRoIGl0c2VsZjogXFx1IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KGksIDQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGkgIT0gVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShpKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRmFpbGVkIGNhc2UgY29udmVyc2lvbiB3aXRoIGl0c2VsZjogXFx1IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KGksIDQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1cHBlci5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKHVwcGVyW2ldKSAhPSBsb3dlcltpXSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMRUQgVUNoYXJhY3Rlci50b2xvd2VyKCkgZm9yIFxcdSIgCisgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KHVwcGVyW2ldLCA0KQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIEV4cGVjdGVkIFxcdSIgKyBVdGlsaXR5LmhleChsb3dlcltpXSwgNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBHb3QgXFx1IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICsgVXRpbGl0eS5oZXgoVUNoYXJhY3Rlci50b0xvd2VyQ2FzZSh1cHBlcltpXSksIDQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2dsbigidGVzdGluZyB1cHBlciBsb3dlciIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVwcGVyVGVzdC5sZW5ndGgoKTsgaSArKykgeworICAgICAgICAgICAgbG9nbG4oInRlc3RpbmcgdG8gdXBwZXIgdG8gbG93ZXIiKTsKKyAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzTGV0dGVyKHVwcGVyVGVzdC5jaGFyQXQoaSkpICYmIAorICAgICAgICAgICAgICAgICFVQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKHVwcGVyVGVzdC5jaGFyQXQoaSkpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWxlZCBpc0xvd2VyQ2FzZSB0ZXN0IGF0IFxcdSIgCisgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KHVwcGVyVGVzdC5jaGFyQXQoaSksIDQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKFVDaGFyYWN0ZXIuaXNMZXR0ZXIobG93ZXJUZXN0LmNoYXJBdChpKSkgCisgICAgICAgICAgICAgICAgICAgICAmJiAhVUNoYXJhY3Rlci5pc1VwcGVyQ2FzZShsb3dlclRlc3QuY2hhckF0KGkpKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsZWQgaXNVcHBlckNhc2UgdGVzdCBhdCBcXHUiIAorICAgICAgICAgICAgICAgICAgICAgICsgVXRpbGl0eS5oZXgobG93ZXJUZXN0LmNoYXJBdChpKSwgNCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodXBwZXJUZXN0LmNoYXJBdChpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGxvd2VyVGVzdC5jaGFyQXQoaSkpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWxlZCBjYXNlIGNvbnZlcnNpb24gZnJvbSBcXHUiIAorICAgICAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleChsb3dlclRlc3QuY2hhckF0KGkpLCA0KSArICIgVG8gXFx1IgorICAgICAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleCh1cHBlclRlc3QuY2hhckF0KGkpLCA0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsb3dlclRlc3QuY2hhckF0KGkpIAorICAgICAgICAgICAgICAgICAgICAhPSBVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKHVwcGVyVGVzdC5jaGFyQXQoaSkpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWxlZCBjYXNlIGNvbnZlcnNpb24gOiBcXHUiIAorICAgICAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleCh1cHBlclRlc3QuY2hhckF0KGkpLCA0KSArICIgVG8gXFx1IgorICAgICAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleChsb3dlclRlc3QuY2hhckF0KGkpLCA0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh1cHBlclRlc3QuY2hhckF0KGkpIAorICAgICAgICAgICAgICAgICAgICAhPSBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKHVwcGVyVGVzdC5jaGFyQXQoaSkpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWxlZCBjYXNlIGNvbnZlcnNpb24gd2l0aCBpdHNlbGY6IFxcdSIgCisgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KHVwcGVyVGVzdC5jaGFyQXQoaSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxvd2VyVGVzdC5jaGFyQXQoaSkgCisgICAgICAgICAgICAgICAgICAgICE9IFVDaGFyYWN0ZXIudG9VcHBlckNhc2UobG93ZXJUZXN0LmNoYXJBdChpKSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbGVkIGNhc2UgY29udmVyc2lvbiB3aXRoIGl0c2VsZjogXFx1IgorICAgICAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleChsb3dlclRlc3QuY2hhckF0KGkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4oImRvbmUgdGVzdGluZyB1cHBlciBMb3dlciIpOworICAgIH0KKyAgICAKKwkvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtIHRlc3QgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsZSBUVVJLSVNIX0xPQ0FMRV8gPSBuZXcgTG9jYWxlKCJ0ciIsICJUUiIpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsZSBHRVJNQU5fTE9DQUxFXyA9IG5ldyBMb2NhbGUoImRlIiwgIkRFIik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxlIEdSRUVLX0xPQ0FMRV8gPSBuZXcgTG9jYWxlKCJlbCIsICJHUiIpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsZSBFTkdMSVNIX0xPQ0FMRV8gPSBuZXcgTG9jYWxlKCJlbiIsICJVUyIpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsZSBMSVRIVUFOSUFOX0xPQ0FMRV8gPSBuZXcgTG9jYWxlKCJsdCIsICJMVCIpOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIEJyZWFrSXRlcmF0b3IgQlJFQUtJVEVSQVRPUl9DSEFSQUNURVJfID0gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmVha0l0ZXJhdG9yLmdldENoYXJhY3Rlckluc3RhbmNlKCk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgQnJlYWtJdGVyYXRvciBCUkVBS0lURVJBVE9SX1dPUkRfID0gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZSgpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIEJyZWFrSXRlcmF0b3IgQlJFQUtJVEVSQVRPUl9USVRMRV8gPSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyZWFrSXRlcmF0b3IuZ2V0VGl0bGVJbnN0YW5jZSgpOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSEFSQUNURVJfVVBQRVJfW10gPSAKKwkgICAgICAgICAgICAgICAgICB7MHg0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgCisJICAgIAkgICAgICAgICAgIDB4MDBiMSwgMHgwMGIyLCAweGIzLCAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwMmUsIAorCSAgICAJICAgICAgICAgICAweDAwM2YsIDB4MDAzYSwgMHgwMDRiLCAweDAwNGMsIDB4NGQsIDB4MDA0ZSwgMHgwMDRmLCAKKwkgICAgCSAgICAgICAgICAgMHgwMWM0LCAweDAxYzgsIDB4MDAwYywgMHgwMDAwfTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0hBUkFDVEVSX0xPV0VSX1tdID0gCisJICAgICAgICAgICAgICAgICAgezB4NjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIAorCSAgICAJICAgICAgICAgICAweDAwYjEsIDB4MDBiMiwgMHhiMywgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDJlLCAKKwkgICAgCSAgICAgICAgICAgMHgwMDNmLCAweDAwM2EsIDB4MDA2YiwgMHgwMDZjLCAweDZkLCAweDAwNmUsIDB4MDA2ZiwgCisJICAgIAkgICAgICAgICAgIDB4MDFjNiwgMHgwMWM5LCAweDAwMGMsIDB4MDAwMH07CisJICAgIAkgICAgICAgICAgIAorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGT0xESU5HX1NJTVBMRV9bXSA9IHsKKwkJLy8gaW5wdXQsIGRlZmF1bHQsIGV4Y2x1ZGUgc3BlY2lhbCBpCisJICAgIDB4NjEsICAgMHg2MSwgIDB4NjEsCisJICAgIDB4NDksICAgMHg2OSwgIDB4MTMxLAorCSAgICAweDEzMCwgIDB4NjksICAweDY5LAorICAgICAgICAweDEzMSwgIDB4MTMxLCAweDEzMSwKKyAgICAgICAgMHhkZiwgICAweGRmLCAgMHhkZiwKKyAgICAgICAgMHhmYjAzLCAweGZiMDMsIDB4ZmIwMywKKyAgICAgICAgMHgxMDQwZSwweDEwNDM2LDB4MTA0MzYsCisgICAgICAgIDB4NWZmZmYsMHg1ZmZmZiwweDVmZmZmCisJfTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9MRElOR19NSVhFRF9bXSA9IAorCSAgICAgICAgICAgICAgICAgICAgICB7Ilx1MDA2MVx1MDA0Mlx1MDEzMFx1MDA0OVx1MDEzMVx1MDNkMFx1MDBkZlx1ZmIwM1x1ZDkzZlx1ZGZmZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVx1MDBkZlx1MDBiNVx1ZmIwM1x1RDgwMVx1REMwQ1x1MDEzMFx1MDEzMSJ9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT0xESU5HX0RFRkFVTFRfW10gPSAKKwkgICAgIHsiXHUwMDYxXHUwMDYyXHUwMDY5XHUwMzA3XHUwMDY5XHUwMTMxXHUwM2IyXHUwMDczXHUwMDczXHUwMDY2XHUwMDY2XHUwMDY5XHVkOTNmXHVkZmZmIiwKKwkgICAgICAiYXNzXHUwM2JjZmZpXHVEODAxXHVEQzM0aVx1MDMwN1x1MDEzMSJ9OworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT0xESU5HX0VYQ0xVREVfU1BFQ0lBTF9JX1tdID0gCisJICAgICB7Ilx1MDA2MVx1MDA2Mlx1MDA2OVx1MDEzMVx1MDEzMVx1MDNiMlx1MDA3M1x1MDA3M1x1MDA2Nlx1MDA2Nlx1MDA2OVx1ZDkzZlx1ZGZmZiIsCisJICAgICAgImFzc1x1MDNiY2ZmaVx1RDgwMVx1REMzNGlcdTAxMzEifTsKKwkvKiogCisJICogIklFU1VTIENIUklTVE9TIgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSEFSRURfVVBQRVJDQVNFX0dSRUVLXyA9CisJCSJcdTAzOTlcdTAzOTVcdTAzYTNcdTAzYTVcdTAzYTNcdTAwMjBcdTAzYTdcdTAzYTFcdTAzOTlcdTAzYTNcdTAzYTRcdTAzOWZcdTAzYTMiOworCS8qKgorCSAqICJpZXN1cyBjaHJpc3RvcyIKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0hBUkVEX0xPV0VSQ0FTRV9HUkVFS18gPSAKKwkgICAgIlx1MDNiOVx1MDNiNVx1MDNjM1x1MDNjNVx1MDNjMlx1MDAyMFx1MDNjN1x1MDNjMVx1MDNiOVx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjMiI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVJFRF9MT1dFUkNBU0VfVFVSS0lTSF8gPSAKKwkgICAgIlx1MDA2OVx1MDA3M1x1MDA3NFx1MDA2MVx1MDA2ZVx1MDA2Mlx1MDA3NVx1MDA2Y1x1MDAyY1x1MDAyMFx1MDA2ZVx1MDA2Zlx1MDA3NFx1MDAyMFx1MDA2M1x1MDA2Zlx1MDA2ZVx1MDA3M1x1MDA3NFx1MDA2MVx1MDA2ZVx1MDA3NFx1MDEzMVx1MDA2ZVx1MDA2Zlx1MDA3MFx1MDA2Y1x1MDA2NVx1MDAyMSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVJFRF9VUFBFUkNBU0VfVFVSS0lTSF8gPSAKKwkgICAgIlx1MDA1NFx1MDA0Zlx1MDA1MFx1MDA0Ylx1MDA0MVx1MDA1MFx1MDA0OVx1MDAyMFx1MDA1MFx1MDA0MVx1MDA0Y1x1MDA0MVx1MDA0M1x1MDA0NVx1MDAyY1x1MDAyMFx1MDEzMFx1MDA1M1x1MDA1NFx1MDA0MVx1MDA0ZVx1MDA0Mlx1MDA1NVx1MDA0YyI7ICAgICAgCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVJFRF9VUFBFUkNBU0VfSVNUQU5CVUxfID0gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMTMwU1RBTkJVTCwgTk9UIENPTlNUQU5USU5PUExFISI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVJFRF9MT1dFUkNBU0VfSVNUQU5CVUxfID0gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaVx1MDMwN3N0YW5idWwsIG5vdCBjb25zdGFudGlub3BsZSEiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSEFSRURfTE9XRVJDQVNFX1RPUEtBUF8gPSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b3BrYXBcdTAxMzEgcGFsYWNlLCBpc3RhbmJ1bCI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVJFRF9VUFBFUkNBU0VfVE9QS0FQXyA9ICAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUT1BLQVBJIFBBTEFDRSwgSVNUQU5CVUwiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSEFSRURfTE9XRVJDQVNFX0dFUk1BTl8gPSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTXHUwMEZDXHUwMERGbWF5cnN0cmFcdTAwREZlIjsJCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVJFRF9VUFBFUkNBU0VfR0VSTUFOXyA9IAorICAgIAkJCQkJCQkJCSAgIlNcdTAwRENTU01BWVJTVFJBU1NFIjsKKyAJCisgCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUFBFUl9CRUZPUkVfID0gIAorICAgCSAgICAgIlx1MDA2MVx1MDA0Mlx1MDA2OVx1MDNjMlx1MDBkZlx1MDNjM1x1MDAyZlx1ZmIwM1x1ZmIwM1x1ZmIwM1x1ZDkzZlx1ZGZmZiI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQUEVSX1JPT1RfID0gICAgCisJICAgICAiXHUwMDQxXHUwMDQyXHUwMDQ5XHUwM2EzXHUwMDUzXHUwMDUzXHUwM2EzXHUwMDJmXHUwMDQ2XHUwMDQ2XHUwMDQ5XHUwMDQ2XHUwMDQ2XHUwMDQ5XHUwMDQ2XHUwMDQ2XHUwMDQ5XHVkOTNmXHVkZmZmIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVBQRVJfVFVSS0lTSF8gPSAJCisJICAgICAiXHUwMDQxXHUwMDQyXHUwMTMwXHUwM2EzXHUwMDUzXHUwMDUzXHUwM2EzXHUwMDJmXHUwMDQ2XHUwMDQ2XHUwMDQ5XHUwMDQ2XHUwMDQ2XHUwMDQ5XHUwMDQ2XHUwMDQ2XHUwMDQ5XHVkOTNmXHVkZmZmIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVBQRVJfTUlOSV8gPSAiXHUwMGRmXHUwMDYxIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVBQRVJfTUlOSV9VUFBFUl8gPSAiXHUwMDUzXHUwMDUzXHUwMDQxIjsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9XRVJfQkVGT1JFXyA9IAorICAgICAgICAgICAgICAgICAgICAgICJcdTAwNjFcdTAwNDJcdTAwNDlcdTAzYTNcdTAwZGZcdTAzYTNcdTAwMmZcdWQ5M2ZcdWRmZmYiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT1dFUl9ST09UXyA9ICAgIAorCSAgICAgICAgICAgICAgICAgICJcdTAwNjFcdTAwNjJcdTAwNjlcdTAzYzNcdTAwZGZcdTAzYzJcdTAwMmZcdWQ5M2ZcdWRmZmYiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT1dFUl9UVVJLSVNIXyA9IAorCSAgICAgICAgICAgICAgICAgICJcdTAwNjFcdTAwNjJcdTAxMzFcdTAzYzNcdTAwZGZcdTAzYzJcdTAwMmZcdWQ5M2ZcdWRmZmYiOworCisJLyoqCisJICogZWFjaCBpdGVtIGlzIGFuIGFycmF5IHdpdGggaW5wdXQgc3RyaW5nLCByZXN1bHQgc3RyaW5nLCBsb2NhbGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElUTEVfREFUQV9bXSA9IHsKKwkJIlx1MDA2MVx1MDA0Mlx1MDAyMFx1MDA2OVx1MDNjMlx1MDAyMFx1MDBkZlx1MDNjM1x1MDAyZlx1ZmIwM1x1ZDkzZlx1ZGZmZiIsCisJCSJcdTAwNDFcdTAwNDJcdTAwMjBcdTAwNDlcdTAzYTNcdTAwMjBcdTAwNTNcdTAwNzNcdTAzYTNcdTAwMmZcdTAwNDZcdTAwNjZcdTAwNjlcdWQ5M2ZcdWRmZmYiLAorCQkKKwkJIlx1MDA2MVx1MDA0Mlx1MDAyMFx1MDA2OVx1MDNjMlx1MDAyMFx1MDBkZlx1MDNjM1x1MDAyZlx1ZmIwM1x1ZDkzZlx1ZGZmZiIsCisJCSJcdTAwNDFcdTAwNjJcdTAwMjBcdTAwNDlcdTAzYzJcdTAwMjBcdTAwNTNcdTAwNzNcdTAzYzNcdTAwMmZcdTAwNDZcdTAwNjZcdTAwNjlcdWQ5M2ZcdWRmZmYiLAorCQkKKwkJIiB0SGUgUVVJY0sgYlJvV24iLCAiIFRoZSBRdWljayBCcm93biIsCisJCQorCQkiXHUwMWM0XHUwMWM1XHUwMWM2XHUwMWM3XHUwMWM4XHUwMWM5XHUwMWNhXHUwMWNiXHUwMWNjIiwgCisJCSJcdTAxYzVcdTAxYzVcdTAxYzVcdTAxYzhcdTAxYzhcdTAxYzhcdTAxY2JcdTAxY2JcdTAxY2IiLCAvLyBVQlJLX0NIQVJBQ1RFUgorCQkKKyAgICAJIlx1MDFjOXViYXYgbGp1YmF2IiwgIlx1MDFjOHViYXYgTGp1YmF2IiwgLy8gTGogdnMuIEwragorICAgIAkKKyAgICAJIidvSCBkT24nVCB0SXRMZUNhU2UgQWZUZVIgbEV0VGVSKyciLCAKKyAgICAJIidPaCBEb24ndCBUaXRsZWNhc2UgQWZ0ZXIgTGV0dGVyKyciCisJfTsKKwkgICAgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQnJlYWtJdGVyYXRvciBUSVRMRV9CUkVBS0lURVJBVE9SU19bXSA9CisgICAgeworICAgIAlCUkVBS0lURVJBVE9SX0NIQVJBQ1RFUl8sCisgICAgCUJSRUFLSVRFUkFUT1JfV09SRF8sCisgICAgCUJSRUFLSVRFUkFUT1JfVElUTEVfLAorICAgIAlCUkVBS0lURVJBVE9SX0NIQVJBQ1RFUl8sCisgICAgCW51bGwsCisgICAgCW51bGwKKyAgICB9OworICAgIAorICAgIC8qKgorICAgICAqIDxwPmJhc2ljIHN0cmluZywgbG93ZXIgc3RyaW5nLCB1cHBlciBzdHJpbmcsIHRpdGxlIHN0cmluZzwvcD4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQ0lBTF9EQVRBX1tdID0geworICAgIAlVVEYxNi52YWx1ZU9mKDB4MTA0M0MpICsgVVRGMTYudmFsdWVPZigweDEwNDE0KSwKKwkJVVRGMTYudmFsdWVPZigweDEwNDNDKSArIFVURjE2LnZhbHVlT2YoMHgxMDQzQyksCisJCVVURjE2LnZhbHVlT2YoMHgxMDQxNCkgKyBVVEYxNi52YWx1ZU9mKDB4MTA0MTQpLAorCQkiYWInY0QgXHVGQjAwaVx1MDEzMUlcdTAxMzAgXHUwMUM3XHUwMUM4XHUwMUM5ICIgKyAKKwkgICAgICAgICAgICAgICAgICAgICBVVEYxNi52YWx1ZU9mKDB4MTA0M0MpICsgVVRGMTYudmFsdWVPZigweDEwNDE0KSwKKwkgICAgImFiJ2NkIFx1RkIwMGlcdTAxMzFpaVx1MDMwNyBcdTAxQzlcdTAxQzlcdTAxQzkgIiArIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYudmFsdWVPZigweDEwNDNDKSArIFVURjE2LnZhbHVlT2YoMHgxMDQzQyksCisJICAgICJBQidDRCBGRklJSVx1MDEzMCBcdTAxQzdcdTAxQzdcdTAxQzcgIiArCisJICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi52YWx1ZU9mKDB4MTA0MTQpICsgVVRGMTYudmFsdWVPZigweDEwNDE0KSwKKwkgICAgLy8gc2lnbWFzIGZvbGxvd2VkL3ByZWNlZGVkIGJ5IGNhc2VkIGxldHRlcnMKKwkgICAgImlcdTAzMDdcdTAzYTNcdTAzMDhqIFx1MDMwN1x1MDNhM1x1MDMwOGogaVx1MDBhZFx1MDNhM1x1MDMwOCBcdTAzMDdcdTAzYTNcdTAzMDggIiwKKwkgICAgImlcdTAzMDdcdTAzYzNcdTAzMDhqIFx1MDMwN1x1MDNjM1x1MDMwOGogaVx1MDBhZFx1MDNjMlx1MDMwOCBcdTAzMDdcdTAzYzNcdTAzMDggIiwKKwkgICAgIklcdTAzMDdcdTAzYTNcdTAzMDhKIFx1MDMwN1x1MDNhM1x1MDMwOEogSVx1MDBhZFx1MDNhM1x1MDMwOCBcdTAzMDdcdTAzYTNcdTAzMDggIgorICAgIH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxlIFNQRUNJQUxfTE9DQUxFU19bXSA9IHsKKyAgICAJbnVsbCwKKyAgICAJRU5HTElTSF9MT0NBTEVfLAorICAgIAludWxsLAorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQ0lBTF9ET1RURURfID0gCisgICAgICAgICAgICAiSSBcdTAxMzAgSVx1MDMwNyBJXHUwMzI3XHUwMzA3IElcdTAzMDFcdTAzMDcgSVx1MDMyN1x1MDMwN1x1MDMwMSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUNJQUxfRE9UVEVEX0xPV0VSX1RVUktJU0hfID0KKwkJCSJcdTAxMzEgaSBpXHUwMzA3IGlcdTAzMjdcdTAzMDcgXHUwMTMxXHUwMzAxXHUwMzA3IGlcdTAzMjdcdTAzMDdcdTAzMDEiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEVDSUFMX0RPVFRFRF9MT1dFUl9HRVJNQU5fID0gCisJICAgICAgICAiaSBpXHUwMzA3IGlcdTAzMDcgaVx1MDMyN1x1MDMwNyBpXHUwMzAxXHUwMzA3IGlcdTAzMjdcdTAzMDdcdTAzMDEiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEVDSUFMX0RPVF9BQk9WRV8gPQorCQkJImFcdTAzMDcgXHUwMzA3IGlcdTAzMDcgalx1MDMyN1x1MDMwNyBqXHUwMzAxXHUwMzA3IjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQ0lBTF9ET1RfQUJPVkVfVVBQRVJfTElUSFVBTklBTl8gPSAKKwkgICAgICAgICJBXHUwMzA3IFx1MDMwNyBJIEpcdTAzMjcgSlx1MDMwMVx1MDMwNyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUNJQUxfRE9UX0FCT1ZFX1VQUEVSX0dFUk1BTl8gPSAKKwkgICAgICAgICJBXHUwMzA3IFx1MDMwNyBJXHUwMzA3IEpcdTAzMjdcdTAzMDcgSlx1MDMwMVx1MDMwNyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUNJQUxfRE9UX0FCT1ZFX1VQUEVSXyA9CisJICAgICAgICAiSSBJXHUwMzAxIEogSlx1MDMwMSBcdTAxMmUgXHUwMTJlXHUwMzAxIFx1MDBjY1x1MDBjZFx1MDEyOCI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUNJQUxfRE9UX0FCT1ZFX0xPV0VSX0xJVEhVQU5JQU5fID0KKwkgICAgICAgICJpIGlcdTAzMDdcdTAzMDEgaiBqXHUwMzA3XHUwMzAxIFx1MDEyZiBcdTAxMmZcdTAzMDdcdTAzMDEgaVx1MDMwN1x1MDMwMGlcdTAzMDdcdTAzMDFpXHUwMzA3XHUwMzAzIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQ0lBTF9ET1RfQUJPVkVfTE9XRVJfR0VSTUFOXyA9CisJICAJCSJpIGlcdTAzMDEgaiBqXHUwMzAxIFx1MDEyZiBcdTAxMmZcdTAzMDEgXHUwMGVjXHUwMGVkXHUwMTI5IjsKKwkgICAgICAgICAgICAgICAgICAKKwkvLyBwcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQorCS8qKgorICAJICogQ29udmVydGluZyB0aGUgaGV4IG51bWJlcnMgcmVwcmVzZW50ZWQgYmV0d2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuICc7JyB0byBVbmljb2RlIHN0cmluZ3MKKyAgCSAqIEBwYXJhbSBzdHIgc3RyaW5nIHRvIGJyZWFrIHVwIGludG8gVW5pY29kZSBzdHJpbmdzCisgIAkgKiBAcmV0dXJuIGFycmF5IG9mIFVuaWNvZGUgc3RyaW5ncyBlbmRpbmcgd2l0aCBhIG51bGwKKyAgCSAqLworICAJcHJpdmF0ZSBTdHJpbmdbXSBnZXRVbmljb2RlU3RyaW5ncyhTdHJpbmcgc3RyKQorICAJeworICAgIAlWZWN0b3IgdiA9IG5ldyBWZWN0b3IoMTApOworICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBmb3IgKGludCBjYXNlY291bnQgPSA0OyBjYXNlY291bnQgPiAwOyBjYXNlY291bnQgLS0pIHsKKyAgICAgICAgICAgIGludCBlbmQgPSBzdHIuaW5kZXhPZigiOyAiLCBzdGFydCk7CisgICAgICAgICAgICBTdHJpbmcgY2FzZXN0ciA9IHN0ci5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgaW50IHNwYWNlb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChzcGFjZW9mZnNldCA8IGNhc2VzdHIubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgbmV4dHNwYWNlID0gY2FzZXN0ci5pbmRleE9mKCcgJywgc3BhY2VvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChuZXh0c3BhY2UgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dHNwYWNlID0gY2FzZXN0ci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilJbnRlZ2VyLnBhcnNlSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VzdHIuc3Vic3RyaW5nKHNwYWNlb2Zmc2V0LCBuZXh0c3BhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpKTsKKyAgICAgICAgICAgICAgICBzcGFjZW9mZnNldCA9IG5leHRzcGFjZSArIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGFydCA9IGVuZCArIDI7CisgICAgICAgICAgICB2LmFkZChidWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGNvbW1lbnRzID0gc3RyLmluZGV4T2YoIiAjIiwgc3RhcnQpOworICAgICAgICBpZiAoY29tbWVudHMgIT0gLTEgJiYgY29tbWVudHMgIT0gc3RhcnQpIHsKKyAgICAgICAgICAgIGlmIChzdHIuY2hhckF0KGNvbW1lbnRzIC0gMSkgPT0gJzsnKSB7CisgICAgICAgICAgICAgICAgY29tbWVudHMgLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgY29uZGl0aW9ucyA9IHN0ci5zdWJzdHJpbmcoc3RhcnQsIGNvbW1lbnRzKTsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOworICAgIAkgICAgd2hpbGUgKG9mZnNldCA8IGNvbmRpdGlvbnMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgc3BhY2VvZmZzZXQgPSBjb25kaXRpb25zLmluZGV4T2YoJyAnLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChzcGFjZW9mZnNldCA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBzcGFjZW9mZnNldCA9IGNvbmRpdGlvbnMubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHYuYWRkKGNvbmRpdGlvbnMuc3Vic3RyaW5nKG9mZnNldCwgc3BhY2VvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzcGFjZW9mZnNldCArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwkgICAgaW50IHNpemUgPSB2LnNpemUoKTsKKwkgICAgU3RyaW5nIHJlc3VsdFtdID0gbmV3IFN0cmluZ1tzaXplXTsKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisJICAgICAgICByZXN1bHRbaV0gPSAoU3RyaW5nKXYuZWxlbWVudEF0KGkpOworCSAgICB9CisJICAgIHJldHVybiByZXN1bHQ7CisgIAl9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJDYXRlZ29yeVRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJDYXRlZ29yeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk1ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVUNoYXJhY3RlckNhdGVnb3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAKKyogICAgICAvdXNyL2N2cy9pY3U0ai9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9VQ2hhcmFjdGVyQ2F0ZWdvcnkuamF2YSAkIAorKiAkRGF0ZTogMjAwMi8wNy8wOCAyMzo1MjoxMyAkIAorKiAkUmV2aXNpb246IDEuMiAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5sYW5nOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlckNhdGVnb3J5OworCisvKioKKyogVGVzdGluZyBVQ2hhcmFjdGVyQ2F0ZWdvcnkKKyogQGF1dGhvciBTeW4gV2VlIFF1ZWsKKyogQHNpbmNlIEFwcmlsIDAyIDIwMDIKKyovCitwdWJsaWMgY2xhc3MgVUNoYXJhY3RlckNhdGVnb3J5VGVzdCBleHRlbmRzIFRlc3RGbXdrCit7CisJLy8gY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKioKKyAgICAqIFByaXZhdGUgY29uc3RydWN0b3IgdG8gcHJldmVudCBpbml0aWFsaXNhdGlvbgorICAgICovCisgICAgcHVibGljIFVDaGFyYWN0ZXJDYXRlZ29yeVRlc3QoKQorICAgIHsKKyAgICB9CisgICAgCisgIAkvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJnKSAgCisJeworCSAgICB0cnkKKwkgICAgeworCSAgICAgIAlVQ2hhcmFjdGVyQ2F0ZWdvcnlUZXN0IHRlc3QgPSBuZXcgVUNoYXJhY3RlckNhdGVnb3J5VGVzdCgpOworCSAgICAgIAl0ZXN0LnJ1bihhcmcpOworCSAgICB9CisJICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKwkgICAgeworCSAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOworCSAgICB9CisJfQorCQorCS8qKgorCSogR2V0cyB0aGUgbmFtZSBvZiB0aGUgYXJndW1lbnQgY2F0ZWdvcnkKKwkqIEBwYXJhbSBjYXRlZ29yeSB0byByZXRyaWV2ZSBuYW1lCisJKiBAcmV0dXJuIGNhdGVnb3J5IG5hbWUKKwkqLworCXB1YmxpYyB2b2lkIFRlc3RUb1N0cmluZygpCisJeworCSAgCVN0cmluZyBuYW1lW10gPSB7IlVuYXNzaWduZWQiLAorCSAgCQkgICAgICAgICAgICAgIkxldHRlciwgVXBwZXJjYXNlIiwKKwkgIAkJICAgICAgICAgICAgICJMZXR0ZXIsIExvd2VyY2FzZSIsCisJICAJCSAgICAgICAgICAgICAiTGV0dGVyLCBUaXRsZWNhc2UiLAorCSAgCQkgICAgICAgICAgICAgIkxldHRlciwgTW9kaWZpZXIiLAorCSAgCQkgICAgICAgICAgICAgIkxldHRlciwgT3RoZXIiLAorCSAgCQkgICAgICAgICAgICAgIk1hcmssIE5vbi1TcGFjaW5nIiwKKwkgIAkJICAgICAgICAgICAgICJNYXJrLCBFbmNsb3NpbmciLAorCSAgCQkgICAgICAgICAgICAgIk1hcmssIFNwYWNpbmcgQ29tYmluaW5nIiwKKwkgIAkJICAgICAgICAgICAgICJOdW1iZXIsIERlY2ltYWwgRGlnaXQiLAorCSAgCQkgICAgICAgICAgICAgIk51bWJlciwgTGV0dGVyIiwKKwkgIAkJICAgICAgICAgICAgICJOdW1iZXIsIE90aGVyIiwKKwkgIAkJICAgICAgICAgICAgICJTZXBhcmF0b3IsIFNwYWNlIiwKKwkgIAkJICAgICAgICAgICAgICJTZXBhcmF0b3IsIExpbmUiLAorCSAgCQkgICAgICAgICAgICAgIlNlcGFyYXRvciwgUGFyYWdyYXBoIiwKKwkgIAkJICAgICAgICAgICAgICJPdGhlciwgQ29udHJvbCIsCisJICAJCSAgICAgICAgICAgICAiT3RoZXIsIEZvcm1hdCIsCisJICAJCSAgICAgICAgICAgICAiT3RoZXIsIFByaXZhdGUgVXNlIiwKKwkgIAkJICAgICAgICAgICAgICJPdGhlciwgU3Vycm9nYXRlIiwKKwkgIAkJICAgICAgICAgICAgICJQdW5jdHVhdGlvbiwgRGFzaCIsCisJICAJCSAgICAgICAgICAgICAiUHVuY3R1YXRpb24sIE9wZW4iLAorCSAgCQkgICAgICAgICAgICAgIlB1bmN0dWF0aW9uLCBDbG9zZSIsCisJICAJCSAgICAgICAgICAgICAiUHVuY3R1YXRpb24sIENvbm5lY3RvciIsCisJICAJCSAgICAgICAgICAgICAiUHVuY3R1YXRpb24sIE90aGVyIiwKKwkgIAkJICAgICAgICAgICAgICJTeW1ib2wsIE1hdGgiLAorCSAgCQkgICAgICAgICAgICAgIlN5bWJvbCwgQ3VycmVuY3kiLAorCSAgCQkgICAgICAgICAgICAgIlN5bWJvbCwgTW9kaWZpZXIiLAorCSAgCQkgICAgICAgICAgICAgIlN5bWJvbCwgT3RoZXIiLCAKKwkgIAkJICAgICAgICAgICAgICJQdW5jdHVhdGlvbiwgSW5pdGlhbCBxdW90ZSIsCisJICAJCSAgICAgICAgICAgICAiUHVuY3R1YXRpb24sIEZpbmFsIHF1b3RlIn07CisJCWZvciAoaW50IGkgPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVU5BU1NJR05FRDsgCisJCSAgICAgICAgIGkgPCBVQ2hhcmFjdGVyQ2F0ZWdvcnkuQ0hBUl9DQVRFR09SWV9DT1VOVDsgaSArKykgeworCQkgICAgIGlmICghVUNoYXJhY3RlckNhdGVnb3J5LnRvU3RyaW5nKGkpLmVxdWFscyhuYW1lW2ldKSkgeworCQkgICAgIAllcnJsbigiRXJyb3IgdG9TdHJpbmcgZm9yIGNhdGVnb3J5ICIgKyBpICsgIiBleHBlY3RlZCAiICsKKwkJICAgICAJICAgICAgbmFtZVtpXSk7CisJCSAgICAgfQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVUNoYXJhY3RlckNvbXBhcmUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJDb21wYXJlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDkxNDYxNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJDb21wYXJlLmphdmEKQEAgLTAsMCArMSwzMTUgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VQ2hhcmFjdGVyQ29tcGFyZS5qYXZhLHYgJCAKKyogJERhdGU6IDIwMDIvMDQvMDQgMDA6NTI6MzEgJCAKKyogJFJldmlzaW9uOiAxLjEwICQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZzsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXJDYXRlZ29yeTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKKworLyoqCisqIEEgY2xhc3MgdG8gY29tcGFyZSB0aGUgZGlmZmVyZW5jZSBpbiBtZXRob2RzIGJldHdlZW4gamF2YS5sYW5nLkNoYXJhY3RlciBhbmQKKyogVUNoYXJhY3RlcgorKiBAYXV0aG9yIFN5biBXZWUgUXVlaworKiBAc2luY2Ugb2N0IDA2IDIwMDAKKyogQHNlZSBjb20uaWJtLmljdS50ZXh0LlVDaGFyYWN0ZXIKKyovCisKK3B1YmxpYyBmaW5hbCBjbGFzcyBVQ2hhcmFjdGVyQ29tcGFyZQoreyAKKyAgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIAorICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgbV9oYXNodGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOworICAKKyAgLy8gcHVibGljIG1ldGhvZHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIAorICAvKioKKyAgKiBNYWluIHRlc3RpbmcgbWV0aG9kCisgICovCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdbXSkKKyAgeworICAJU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyBjaGFyYWN0ZXIgY29tcGFyZSIpOworICAgIHRyeQorICAgIHsKKyAgICAgIEZpbGVXcml0ZXIgZjsKKyAgICAgIGlmIChhcmcubGVuZ3RoID09IDApCisgICAgICAgIGYgPSBuZXcgRmlsZVdyaXRlcigiY29tcGFyZS50eHQiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZiA9IG5ldyBGaWxlV3JpdGVyKGFyZ1swXSk7CisgICAgICBQcmludFdyaXRlciBwID0gbmV3IFByaW50V3JpdGVyKGYpOworICAgICAgcC5wcmludCgiY2hhciAgY2hhcmFjdGVyIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworICAgICAgcC5wcmludGxuKCJtZXRob2QgbmFtZSAgICAgICAgICAgICAgIHVjaGFyYWN0ZXIgY2hhcmFjdGVyIik7CisgICAgICBmb3IgKGNoYXIgaSA9IENoYXJhY3Rlci5NSU5fVkFMVUU7IGkgPCBDaGFyYWN0ZXIuTUFYX1ZBTFVFOyBpICsrKQorICAgICAgeworICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiY2hhcmFjdGVyIFxcdSIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGkpKTsKKyAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNEZWZpbmVkKGkpICE9IENoYXJhY3Rlci5pc0RlZmluZWQoaSkpCisgICAgICAgICAgdHJhY2tEaWZmZXJlbmNlKHAsIGksICJpc0RlZmluZWQoKSIsICIiICsgVUNoYXJhY3Rlci5pc0RlZmluZWQoaSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc0RlZmluZWQoaSkpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoVUNoYXJhY3Rlci5kaWdpdChpLCAxMCkgIT0gQ2hhcmFjdGVyLmRpZ2l0KGksIDEwKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAiZGlnaXQoKSIsICIiICsgVUNoYXJhY3Rlci5kaWdpdChpLCAxMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBDaGFyYWN0ZXIuZGlnaXQoaSwgMTApKTsKKyAgICAgICAgICBpZiAoVUNoYXJhY3Rlci5nZXROdW1lcmljVmFsdWUoaSkgIT0gQ2hhcmFjdGVyLmdldE51bWVyaWNWYWx1ZShpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAiZ2V0TnVtZXJpY1ZhbHVlKCkiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIFVDaGFyYWN0ZXIuZ2V0TnVtZXJpY1ZhbHVlKGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiICsgQ2hhcmFjdGVyLmdldE51bWVyaWNWYWx1ZShpKSk7CisgICAgICAgICAgaWYgKCFjb21wYXJlVHlwZShVQ2hhcmFjdGVyLmdldFR5cGUoaSksIENoYXJhY3Rlci5nZXRUeXBlKGkpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAiZ2V0VHlwZSgpIiwgIiIgKyBVQ2hhcmFjdGVyLmdldFR5cGUoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBDaGFyYWN0ZXIuZ2V0VHlwZShpKSk7CisgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNEaWdpdChpKSAhPSBDaGFyYWN0ZXIuaXNEaWdpdChpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAiaXNEaWdpdCgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIFVDaGFyYWN0ZXIuaXNEaWdpdChpKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBDaGFyYWN0ZXIuaXNEaWdpdChpKSk7CisgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNJU09Db250cm9sKGkpICE9IENoYXJhY3Rlci5pc0lTT0NvbnRyb2woaSkpCisgICAgICAgICAgICB0cmFja0RpZmZlcmVuY2UocCwgaSwgImlzSVNPQ29udHJvbCgpIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBVQ2hhcmFjdGVyLmlzSVNPQ29udHJvbChpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc0lTT0NvbnRyb2woaSkpOworICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzTGV0dGVyKGkpICE9IENoYXJhY3Rlci5pc0xldHRlcihpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAiaXNMZXR0ZXIoKSIsICIiICsgVUNoYXJhY3Rlci5pc0xldHRlcihpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc0xldHRlcihpKSk7CisgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KGkpICE9IENoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQoaSkpCisgICAgICAgICAgICB0cmFja0RpZmZlcmVuY2UocCwgaSwgImlzTGV0dGVyT3JEaWdpdCgpIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBVQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQoaSkpOworICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKGkpICE9IENoYXJhY3Rlci5pc0xvd2VyQ2FzZShpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAiaXNMb3dlckNhc2UoKSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiICsgVUNoYXJhY3Rlci5pc0xvd2VyQ2FzZShpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc0xvd2VyQ2FzZShpKSk7CisgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGkpICE9IENoYXJhY3Rlci5pc1doaXRlc3BhY2UoaSkpCisgICAgICAgICAgICB0cmFja0RpZmZlcmVuY2UocCwgaSwgImlzV2hpdGVzcGFjZSgpIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBVQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc1doaXRlc3BhY2UoaSkpOworICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzU3BhY2VDaGFyKGkpICE9IENoYXJhY3Rlci5pc1NwYWNlQ2hhcihpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAiaXNTcGFjZUNoYXIoKSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiICsgVUNoYXJhY3Rlci5pc1NwYWNlQ2hhcihpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc1NwYWNlQ2hhcihpKSk7CisgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNUaXRsZUNhc2UoaSkgIT0gQ2hhcmFjdGVyLmlzVGl0bGVDYXNlKGkpKQorICAgICAgICAgICAgdHJhY2tEaWZmZXJlbmNlKHAsIGksICJpc1RpdGxlQ2hhcigpIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBVQ2hhcmFjdGVyLmlzVGl0bGVDYXNlKGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiICsgQ2hhcmFjdGVyLmlzVGl0bGVDYXNlKGkpKTsKKyAgICAgICAgICBpZiAoVUNoYXJhY3Rlci5pc1VuaWNvZGVJZGVudGlmaWVyUGFydChpKSAhPSAKKyAgICAgICAgICAgICAgQ2hhcmFjdGVyLmlzVW5pY29kZUlkZW50aWZpZXJQYXJ0KGkpKQorICAgICAgICAgICAgdHJhY2tEaWZmZXJlbmNlKHAsIGksICJpc1VuaWNvZGVJZGVudGlmaWVyUGFydCgpIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBVQ2hhcmFjdGVyLmlzVW5pY29kZUlkZW50aWZpZXJQYXJ0KGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiICsgQ2hhcmFjdGVyLmlzVW5pY29kZUlkZW50aWZpZXJQYXJ0KGkpKTsKKyAgICAgICAgICBpZiAoVUNoYXJhY3Rlci5pc1VuaWNvZGVJZGVudGlmaWVyU3RhcnQoaSkgIT0gCisgICAgICAgICAgICAgIENoYXJhY3Rlci5pc1VuaWNvZGVJZGVudGlmaWVyU3RhcnQoaSkpCisgICAgICAgICAgICB0cmFja0RpZmZlcmVuY2UocCwgaSwgImlzVW5pY29kZUlkZW50aWZpZXJTdGFydCgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIFVDaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmllclN0YXJ0KGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiICsgQ2hhcmFjdGVyLmlzVW5pY29kZUlkZW50aWZpZXJTdGFydChpKSk7CisgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNJZGVudGlmaWVySWdub3JhYmxlKGkpICE9IAorICAgICAgICAgICAgICBDaGFyYWN0ZXIuaXNJZGVudGlmaWVySWdub3JhYmxlKGkpKQorICAgICAgICAgICAgdHJhY2tEaWZmZXJlbmNlKHAsIGksICJpc0lkZW50aWZpZXJJZ25vcmFibGUoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgKyBVQ2hhcmFjdGVyLmlzSWRlbnRpZmllcklnbm9yYWJsZShpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc0lkZW50aWZpZXJJZ25vcmFibGUoaSkpOworICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzVXBwZXJDYXNlKGkpICE9IENoYXJhY3Rlci5pc1VwcGVyQ2FzZShpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAiaXNVcHBlckNhc2UoKSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiICsgVUNoYXJhY3Rlci5pc1VwcGVyQ2FzZShpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiArIENoYXJhY3Rlci5pc1VwcGVyQ2FzZShpKSk7CisgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoaSkgIT0gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGkpKQorICAgICAgICAgICAgdHJhY2tEaWZmZXJlbmNlKHAsIGksICJ0b0xvd2VyQ2FzZSgpIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKENoYXJhY3Rlci50b0xvd2VyQ2FzZShpKSkpOworICAgICAgICAgIGlmICghVUNoYXJhY3Rlci50b1N0cmluZyhpKS5lcXVhbHMobmV3IENoYXJhY3RlcihpKS50b1N0cmluZygpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAidG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci50b1N0cmluZyhpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2hhcmFjdGVyKGkpLnRvU3RyaW5nKCkpOworICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLnRvVGl0bGVDYXNlKGkpICE9IENoYXJhY3Rlci50b1RpdGxlQ2FzZShpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAidG9UaXRsZUNhc2UoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhVQ2hhcmFjdGVyLnRvVGl0bGVDYXNlKGkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKENoYXJhY3Rlci50b1RpdGxlQ2FzZShpKSkpOworICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGkpICE9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShpKSkKKyAgICAgICAgICAgIHRyYWNrRGlmZmVyZW5jZShwLCBpLCAidG9VcHBlckNhc2UoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKENoYXJhY3Rlci50b1VwcGVyQ2FzZShpKSkpOworICAgICAgICB9CisgICAgICB9CisgICAgICBzdW1tYXJ5KHApOworICAgICAgcC5jbG9zZSgpOworICAgIH0gCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgIHsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICB9CisgIAorICAvLyBwcml2YXRlIG1ldGhvZHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIAorICAvKioKKyAgKiBDb21wYXJpbmcgdHlwZXMKKyAgKiBAcGFyYW0gdWNoYXJ0eXBlIFVDaGFyYWN0ZXIgdHlwZQorICAqIEBwYXJhbSBqY2hhcnR5cGUgamF2YS5sYW5nLkNoYXJhY3RlciB0eXBlCisgICovCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29tcGFyZVR5cGUoaW50IHVjaGFydHlwZSwgaW50IGpjaGFydHlwZSkKKyAgeworICAgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlVOQVNTSUdORUQgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuVU5BU1NJR05FRCkKKyAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlVQUEVSQ0FTRV9MRVRURVIgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuVVBQRVJDQVNFX0xFVFRFUikKKyAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkxPV0VSQ0FTRV9MRVRURVIgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuTE9XRVJDQVNFX0xFVFRFUikKKyAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlRJVExFQ0FTRV9MRVRURVIgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuVElUTEVDQVNFX0xFVFRFUikKKyAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk1PRElGSUVSX0xFVFRFUiAmJiAKKyAgICAgICAgamNoYXJ0eXBlID09IENoYXJhY3Rlci5NT0RJRklFUl9MRVRURVIpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5PVEhFUl9MRVRURVIgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuT1RIRVJfTEVUVEVSKQorICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHVjaGFydHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTk9OX1NQQUNJTkdfTUFSSyAmJiAKKyAgICAgICAgamNoYXJ0eXBlID09IENoYXJhY3Rlci5OT05fU1BBQ0lOR19NQVJLKQorICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHVjaGFydHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuRU5DTE9TSU5HX01BUksgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuRU5DTE9TSU5HX01BUkspCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5DT01CSU5JTkdfU1BBQ0lOR19NQVJLICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLkNPTUJJTklOR19TUEFDSU5HX01BUkspCisgICAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkRFQ0lNQUxfRElHSVRfTlVNQkVSICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLkRFQ0lNQUxfRElHSVRfTlVNQkVSKQorICAgICAgcmV0dXJuIHRydWU7CisJICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MRVRURVJfTlVNQkVSICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLkxFVFRFUl9OVU1CRVIpCisgICAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk9USEVSX05VTUJFUiAmJiAKKyAgICAgICAgamNoYXJ0eXBlID09IENoYXJhY3Rlci5PVEhFUl9OVU1CRVIpCisgICAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlNQQUNFX1NFUEFSQVRPUiAmJiAKKyAgICAgICAgamNoYXJ0eXBlID09IENoYXJhY3Rlci5TUEFDRV9TRVBBUkFUT1IpCisgICAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkxJTkVfU0VQQVJBVE9SICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLkxJTkVfU0VQQVJBVE9SKQorICAgICAgcmV0dXJuIHRydWU7CisJICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5QQVJBR1JBUEhfU0VQQVJBVE9SICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLlBBUkFHUkFQSF9TRVBBUkFUT1IpCisgICAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkNPTlRST0wgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuQ09OVFJPTCkKKyAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkZPUk1BVCAmJiAKKyAgICAgICAgamNoYXJ0eXBlID09IENoYXJhY3Rlci5GT1JNQVQpCisgICAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlBSSVZBVEVfVVNFICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLlBSSVZBVEVfVVNFKQorICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHVjaGFydHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuU1VSUk9HQVRFICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLlNVUlJPR0FURSkKKyAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkRBU0hfUFVOQ1RVQVRJT04gJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuREFTSF9QVU5DVFVBVElPTikKKyAgICAgIHJldHVybiB0cnVlOworCSAgaWYgKHVjaGFydHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuU1RBUlRfUFVOQ1RVQVRJT04gJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuU1RBUlRfUFVOQ1RVQVRJT04pCisgICAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkVORF9QVU5DVFVBVElPTiAmJiAKKyAgICAgICAgamNoYXJ0eXBlID09IENoYXJhY3Rlci5FTkRfUFVOQ1RVQVRJT04pCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5DT05ORUNUT1JfUFVOQ1RVQVRJT04gJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuQ09OTkVDVE9SX1BVTkNUVUFUSU9OKQorICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHVjaGFydHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuT1RIRVJfUFVOQ1RVQVRJT04gJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuT1RIRVJfUFVOQ1RVQVRJT04pCisgICAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk1BVEhfU1lNQk9MICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLk1BVEhfU1lNQk9MKQorICAgICAgcmV0dXJuIHRydWU7CisJICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5DVVJSRU5DWV9TWU1CT0wgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuQ1VSUkVOQ1lfU1lNQk9MKQorICAgICAgcmV0dXJuIHRydWU7CisJICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5NT0RJRklFUl9TWU1CT0wgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuTU9ESUZJRVJfU1lNQk9MKQorICAgICAgcmV0dXJuIHRydWU7CisJICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5PVEhFUl9TWU1CT0wgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuT1RIRVJfU1lNQk9MKQorICAgICAgcmV0dXJuIHRydWU7CisJICBpZiAodWNoYXJ0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5JTklUSUFMX1BVTkNUVUFUSU9OICYmIAorICAgICAgICBqY2hhcnR5cGUgPT0gQ2hhcmFjdGVyLlNUQVJUX1BVTkNUVUFUSU9OKQorICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHVjaGFydHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuRklOQUxfUFVOQ1RVQVRJT04gJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuRU5EX1BVTkNUVUFUSU9OKQorICAgICAgcmV0dXJuIHRydWU7CisJICAvKmlmICh1Y2hhcnR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkdFTkVSQUxfT1RIRVJfVFlQRVMgJiYgCisgICAgICAgIGpjaGFydHlwZSA9PSBDaGFyYWN0ZXIuR0VORVJBTF9PVEhFUl9UWVBFUykKKyAgICAgIHJldHVybiB0cnVlOyovCisgICAgcmV0dXJuIGZhbHNlOworCX0KKwkKKwkvKioKKwkqIERpZmZlcmVuY2Ugd3JpdGluZyB0byBmaWxlCisJKiBAcGFyYW0gZiBmaWxlIG91dHB1dHN0cmVhbQorCSogQHBhcmFtIGNoIGNvZGUgcG9pbnQKKwkqIEBwYXJhbSBtZXRob2QgZm9yIHRlc3RpbmcKKwkqIEBwYXJhbSB1Y2hhcnZhbCBVQ2hhcmFjdGVyIHZhbHVlIGFmdGVyIHJ1bm5pbmcgbWV0aG9kCisJKiBAcGFyYW0gY2hhcnZhbCBDaGFyYWN0ZXIgdmFsdWUgYWZ0ZXIgcnVubmluZyBtZXRob2QKKwkqIEBleGNlcHRpb24gdGhyb3duIHdoZW4gZXJyb3Igb2NjdXIgaW4gd3JpdGluZyB0byBmaWxlCisJKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHRyYWNrRGlmZmVyZW5jZShQcmludFdyaXRlciBmLCBpbnQgY2gsIFN0cmluZyBtZXRob2QsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVjaGFydmFsLCBTdHJpbmcgY2hhcnZhbCkKKwkgIHRocm93cyBFeGNlcHRpb24KKwl7CisJICBpZiAobV9oYXNodGFibGVfLmNvbnRhaW5zS2V5KG1ldGhvZCkpCisJICB7CisJICAgIEludGVnZXIgdmFsdWUgPSAoSW50ZWdlciltX2hhc2h0YWJsZV8uZ2V0KG1ldGhvZCk7CisJICAgIG1faGFzaHRhYmxlXy5wdXQobWV0aG9kLCBuZXcgSW50ZWdlcih2YWx1ZS5pbnRWYWx1ZSgpICsgMSkpOworCSAgfQorCSAgZWxzZQorCSAgICBtX2hhc2h0YWJsZV8ucHV0KG1ldGhvZCwgbmV3IEludGVnZXIoMSkpOworCSAgCisJICBTdHJpbmcgdGVtcCA9IEludGVnZXIudG9IZXhTdHJpbmcoY2gpOworCSAgU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKHRlbXApOworCSAgZm9yIChpbnQgaSA9IDA7IGkgPCA2IC0gdGVtcC5sZW5ndGgoKTsgaSArKykKKwkgICAgcy5hcHBlbmQoJyAnKTsKKwkgIHRlbXAgPSBVQ2hhcmFjdGVyLmdldEV4dGVuZGVkTmFtZShjaCk7CisJICBpZiAodGVtcCA9PSBudWxsKQorCSAgICB0ZW1wID0gIiAiOworCSAgcy5hcHBlbmQodGVtcCk7CisJICBmb3IgKGludCBpID0gMDsgaSA8IDczIC0gdGVtcC5sZW5ndGgoKTsgaSArKykKKwkgICAgcy5hcHBlbmQoJyAnKTsKKwkgIAorCSAgcy5hcHBlbmQobWV0aG9kKTsKKwkgIGZvciAoaW50IGkgPSAwOyBpIDwgMjcgLSBtZXRob2QubGVuZ3RoKCk7IGkgKyspCisJICAgIHMuYXBwZW5kKCcgJyk7CisJICBzLmFwcGVuZCh1Y2hhcnZhbCk7CisJICBmb3IgKGludCBpID0gMDsgaSA8IDExIC0gdWNoYXJ2YWwubGVuZ3RoKCk7IGkgKyspCisJICAgIHMuYXBwZW5kKCcgJyk7CisJICBzLmFwcGVuZChjaGFydmFsKTsKKwkgIGYucHJpbnRsbihzLnRvU3RyaW5nKCkpOworCX0KKwkKKwkvKioKKwkqIERvZXMgdXAgYSBzdW1tYXJ5IG9mIHRoZSBkaWZmZXJlbmNlcworCSogQHBhcmFtIGYgZmlsZSBvdXRwdXRzdHJlYW0KKwkqLworCXByaXZhdGUgc3RhdGljIHZvaWQgc3VtbWFyeShQcmludFdyaXRlciBmKQorCXsKKwkgIGYucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKwkgIGYucHJpbnRsbigiU3VtbWFyeSBvZiBkaWZmZXJlbmNlcyIpOworCSAgZm9yIChFbnVtZXJhdGlvbiBlID0gbV9oYXNodGFibGVfLmtleXMoKSA7IGUuaGFzTW9yZUVsZW1lbnRzKCkgOykgCisJICB7CisJICAgIFN0cmluZ0J1ZmZlciBtZXRob2QgPSBuZXcgU3RyaW5nQnVmZmVyKChTdHJpbmcpZS5uZXh0RWxlbWVudCgpKTsKKwkgICAgaW50IGNvdW50ID0gKChJbnRlZ2VyKW1faGFzaHRhYmxlXy5nZXQobWV0aG9kLnRvU3RyaW5nKCkpKS5pbnRWYWx1ZSgpOworCSAgICBmb3IgKGludCBpID0gMzAgLSBtZXRob2QubGVuZ3RoKCk7IGkgPiAwOyBpIC0tKQorCSAgICAgIG1ldGhvZC5hcHBlbmQoJyAnKTsKKyAgICAgIGYucHJpbnRsbihtZXRob2QgKyAiICAiICsgY291bnQpOworICAgIH0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJEaXJlY3Rpb25UZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VQ2hhcmFjdGVyRGlyZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NWJmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VQ2hhcmFjdGVyRGlyZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsODQgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VQ2hhcmFjdGVyRGlyZWN0aW9uVGVzdC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjE6NTg6MzggJAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZzsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlckRpcmVjdGlvbjsKKworLyoqCisqIFRlc3RpbmcgVUNoYXJhY3RlckRpcmVjdGlvbgorKiBAYXV0aG9yIFN5biBXZWUgUXVlaworKiBAc2luY2UgSnVseSAyMiAyMDAyCisqLworcHVibGljIGNsYXNzIFVDaGFyYWN0ZXJEaXJlY3Rpb25UZXN0IGV4dGVuZHMgVGVzdEZtd2sKK3sgICAgCisgICAgLy8gY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIFByaXZhdGUgY29uc3RydWN0b3IgdG8gcHJldmVudCBpbml0aWFsaXNhdGlvbgorICAgICovCisgICAgcHVibGljIFVDaGFyYWN0ZXJEaXJlY3Rpb25UZXN0KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmcpICAKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBVQ2hhcmFjdGVyRGlyZWN0aW9uVGVzdCB0ZXN0ID0gbmV3IFVDaGFyYWN0ZXJEaXJlY3Rpb25UZXN0KCk7CisgICAgICAgICAgICB0ZXN0LnJ1bihhcmcpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50IGNhdGVnb3J5CisgICAgKiBAcGFyYW0gY2F0ZWdvcnkgdG8gcmV0cmlldmUgbmFtZQorICAgICogQHJldHVybiBjYXRlZ29yeSBuYW1lCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0VG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIG5hbWVbXSA9IHsiTGVmdC10by1SaWdodCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJpZ2h0LXRvLUxlZnQiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRXVyb3BlYW4gTnVtYmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRXVyb3BlYW4gTnVtYmVyIFNlcGFyYXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkV1cm9wZWFuIE51bWJlciBUZXJtaW5hdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQXJhYmljIE51bWJlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1vbiBOdW1iZXIgU2VwYXJhdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyYWdyYXBoIFNlcGFyYXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZ21lbnQgU2VwYXJhdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiV2hpdGVzcGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIE5ldXRyYWxzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTGVmdC10by1SaWdodCBFbWJlZGRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICJMZWZ0LXRvLVJpZ2h0IE92ZXJyaWRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUmlnaHQtdG8tTGVmdCBBcmFiaWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJSaWdodC10by1MZWZ0IEVtYmVkZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJpZ2h0LXRvLUxlZnQgT3ZlcnJpZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJQb3AgRGlyZWN0aW9uYWwgRm9ybWF0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uLVNwYWNpbmcgTWFyayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJvdW5kYXJ5IE5ldXRyYWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJVbmFzc2lnbmVkIn07CisgICAgICAgIGZvciAoaW50IGkgPSBVQ2hhcmFjdGVyRGlyZWN0aW9uLkxFRlRfVE9fUklHSFQ7IAorICAgICAgICAgICAgICAgICBpIDwgVUNoYXJhY3RlckRpcmVjdGlvbi5DSEFSX0RJUkVDVElPTl9DT1VOVDsgaSArKykgeworICAgICAgICAgICAgIGlmICghVUNoYXJhY3RlckRpcmVjdGlvbi50b1N0cmluZyhpKS5lcXVhbHMobmFtZVtpXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgdG9TdHJpbmcgZm9yIGRpcmVjdGlvbiAiICsgaSArICIgZXhwZWN0ZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgbmFtZVtpXSk7CisgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVUNoYXJhY3Rlckl0ZXJhdG9yVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVUNoYXJhY3Rlckl0ZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjY5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VQ2hhcmFjdGVySXRlcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMzYgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9BdHRpYy9VQ2hhcmFjdGVySXRlcmF0b3JUZXN0LmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8wNi8yMCAwMToxNjowMCAkIAorKiAkUmV2aXNpb246IDEuMiAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lmxhbmc7CisKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVVRGMTY7CisKKy8qKgorKiBUZXN0aW5nIGNsYXNzIGZvciBVQ2hhcmFjdGVySXRlcmF0b3IKKyogQGF1dGhvciBTeW4gV2VlIFF1ZWsKKyogQHNpbmNlIGFwcmlsIDAyIDIwMDIKKyovCitwdWJsaWMgZmluYWwgY2xhc3MgVUNoYXJhY3Rlckl0ZXJhdG9yVGVzdCBleHRlbmRzIFRlc3RGbXdrCit7IAorCS8vIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAorCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisgIAlwdWJsaWMgVUNoYXJhY3Rlckl0ZXJhdG9yVGVzdCgpCisgIAl7CisgIAl9CisgIAorICAJLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgIAkvKioKKyAgCSogVGVzdGluZyBjbG9uaW5nCisgIAkqLworICAJcHVibGljIHZvaWQgVGVzdENsb25lKCkKKyAgCXsKKyAgICAgCSBVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IgaXRlcmF0b3IgPSBuZXcgVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yKCJ0ZXN0aW5nIik7CisgICAgIAkgVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yIGNsb25lZCA9IChVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IpaXRlcmF0b3IuY2xvbmUoKTsKKyAgICAgCSBjaGFyIGNvbXBsZXRlZCA9IDA7CisgICAgIAkgd2hpbGUgKGNvbXBsZXRlZCAhPSBVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAJIAljb21wbGV0ZWQgPSBpdGVyYXRvci5uZXh0KCk7CisgICAgIAkgCWlmIChjb21wbGV0ZWQgIT0gY2xvbmVkLm5leHQoKSkgeworICAgICAJIAkJZXJybG4oIkNsb25lZCBvcGVyYXRpb24gZmFpbGVkIik7CisgICAgIAkgCX0KKyAgICAgCSB9CisgIAl9CisgIAkKKyAgCS8qKgorICAJICogVGVzdGluZyBpdGVyYXRpb24KKyAgCSAqLworICAJcHVibGljIHZvaWQgVGVzdEl0ZXJhdGlvbigpCisgIAl7CisgIAkJVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yICA9IG5ldyBVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IoCisgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVEVSQVRJT05fU1RSSU5HXyk7CisgIAkJVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yMiA9IG5ldyBVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IoCisgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVEVSQVRJT05fU1RSSU5HXyk7CisgIAkJaWYgKGl0ZXJhdG9yLmZpcnN0KCkgIT0gSVRFUkFUSU9OX1NUUklOR18uY2hhckF0KDApKSB7CisgIAkJCWVycmxuKCJJdGVyYXRvciBmYWlsZWQgcmV0cmlldmluZyBmaXJzdCBjaGFyYWN0ZXIiKTsKKyAgCQl9CisgIAkJaWYgKGl0ZXJhdG9yLmxhc3QoKSAhPSBJVEVSQVRJT05fU1RSSU5HXy5jaGFyQXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVEVSQVRJT05fU1RSSU5HXy5sZW5ndGgoKSAtIDEpKSB7CisgIAkJCWVycmxuKCJJdGVyYXRvciBmYWlsZWQgcmV0cmlldmluZyBsYXN0IGNoYXJhY3RlciIpOworICAJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAJCWlmIChpdGVyYXRvci5nZXRCZWdpbkluZGV4KCkgIT0gMCB8fCAKKyAgCQkgICAgaXRlcmF0b3IuZ2V0RW5kSW5kZXgoKSAhPSBJVEVSQVRJT05fU1RSSU5HXy5sZW5ndGgoKSkgeworICAJCSAgICBlcnJsbigiSXRlcmF0b3IgZmFpbGVkIGRldGVybWluaW5nIGJlZ2luIGFuZCBlbmQgaW5kZXgiKTsKKyAgCQl9ICAKKyAgCQlpdGVyYXRvcjIuc2V0SW5kZXgoMCk7CisgIAkJaXRlcmF0b3Iuc2V0SW5kZXgoMCk7CisgIAkJaW50IGNoID0gMDsKKyAgCQl3aGlsZSAoY2ggIT0gVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkVfQ09ERVBPSU5UKSB7CisgIAkJCWludCBpbmRleCA9IGl0ZXJhdG9yMi5nZXRJbmRleCgpOworICAJCQljaCA9IGl0ZXJhdG9yMi5uZXh0Q29kZVBvaW50KCk7CisgIAkJCWlmIChpbmRleCAhPSBJVEVSQVRJT05fU1VQUExFTUVOVEFSWV9JTkRFWCkgeworICAJCQkJaWYgKGNoICE9IChpbnQpaXRlcmF0b3IubmV4dCgpICYmIAorICAJCQkJICAgIGNoICE9IFVuaWNvZGVDaGFyYWN0ZXJJdGVyYXRvci5ET05FX0NPREVQT0lOVCkgeworICAJCQkJCWVycmxuKCJFcnJvciBtaXNtYXRjaCBpbiBuZXh0KCkgYW5kIG5leHRDb2RlUG9pbnQoKSIpOyAKKyAgCQkJCX0KKyAgCQkJfQorICAJCQllbHNlIHsKKyAgCQkJCWlmIChVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKGNoKSAhPSBpdGVyYXRvci5uZXh0KCkgfHwKKyAgCQkJCSAgICBVVEYxNi5nZXRUcmFpbFN1cnJvZ2F0ZShjaCkgIT0gaXRlcmF0b3IubmV4dCgpKSB7CisgIAkJCQkgICAgZXJybG4oIkVycm9yIG1pc21hdGNoIGluIG5leHQgYW5kIG5leHRDb2RlUG9pbnQgZm9yICIgKworICAJCQkJICAgICAgICAgICJzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMiKTsKKyAgCQkJCX0KKyAgCQkJfQorICAJCX0KKyAgCQlpdGVyYXRvci5zZXRJbmRleChJVEVSQVRJT05fU1RSSU5HXy5sZW5ndGgoKSk7CisgIAkJaXRlcmF0b3IyLnNldEluZGV4KElURVJBVElPTl9TVFJJTkdfLmxlbmd0aCgpKTsKKyAgCQl3aGlsZSAoY2ggIT0gVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkVfQ09ERVBPSU5UKSB7CisgIAkJCWludCBpbmRleCA9IGl0ZXJhdG9yMi5nZXRJbmRleCgpOworICAJCQljaCA9IGl0ZXJhdG9yMi5wcmV2aW91c0NvZGVQb2ludCgpOworICAJCQlpZiAoaW5kZXggIT0gSVRFUkFUSU9OX1NVUFBMRU1FTlRBUllfSU5ERVgpIHsKKyAgCQkJCWlmIChjaCAhPSAoaW50KWl0ZXJhdG9yLnByZXZpb3VzKCkgJiYgCisgIAkJCQkgICAgY2ggIT0gVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkVfQ09ERVBPSU5UKSB7CisgIAkJCQkJZXJybG4oIkVycm9yIG1pc21hdGNoIGluIHByZXZpb3VzKCkgYW5kICIgKworICAJCQkJCSAgICAgICJwcmV2aW91c0NvZGVQb2ludCgpIik7IAorICAJCQkJfQorICAJCQl9CisgIAkJCWVsc2UgeworICAJCQkJaWYgKFVURjE2LmdldExlYWRTdXJyb2dhdGUoY2gpICE9IGl0ZXJhdG9yLnByZXZpb3VzKCkgfHwgCisgIAkJCQkgICAgVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoY2gpICE9IGl0ZXJhdG9yLnByZXZpb3VzKCkpIHsKKyAgCQkJCSAgICBlcnJsbigiRXJyb3IgbWlzbWF0Y2ggaW4gcHJldmlvdXMgYW5kICIgKworICAJCQkJICAgICAgICAgICJwcmV2aW91c0NvZGVQb2ludCBmb3Igc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIik7CisgIAkJCQl9CisgIAkJCX0KKyAgCQl9CisgIAl9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJnKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvclRlc3QgdGVzdCA9IG5ldyBVQ2hhcmFjdGVySXRlcmF0b3JUZXN0KCk7CisgICAgICAgICAgICB0ZXN0LnJ1bihhcmcpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVRFUkFUSU9OX1NUUklOR18gPQorCQkJCQkgICAgICAgICAgICAgICAgICAgICJUZXN0aW5nIDEgMiAzIFx1ZDgwMFx1ZGMwMCA0NTYiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJVEVSQVRJT05fU1VQUExFTUVOVEFSWV9JTkRFWCA9IDE0OyAgICAKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVUNoYXJhY3RlclRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjA0NTk4NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxODIzIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L2xhbmcvVUNoYXJhY3RlclRlc3QuamF2YSx2ICQgCisqICREYXRlOiAyMDAyLzExLzEzIDIwOjE5OjQzICQgCisqICRSZXZpc2lvbjogMS40NCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lmxhbmc7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0VXRpbDsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyQ2F0ZWdvcnk7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyRGlyZWN0aW9uOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVVByb3BlcnR5OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVVNjcmlwdDsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlVURjE2OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVW5pY29kZVNldDsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlJhbmdlVmFsdWVJdGVyYXRvcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlZhbHVlSXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5WZXJzaW9uSW5mbzsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJOYW1lOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKy8qKgorKiBUZXN0aW5nIGNsYXNzIGZvciBVQ2hhcmFjdGVyCisqIE1vc3RseSBmb2xsb3dpbmcgdGhlIHRlc3QgY2FzZXMgZm9yIElDVQorKiBAYXV0aG9yIFN5biBXZWUgUXVlaworKiBAc2luY2Ugbm92IDA0IDIwMDAKKyovCitwdWJsaWMgZmluYWwgY2xhc3MgVUNoYXJhY3RlclRlc3QgZXh0ZW5kcyBUZXN0Rm13aworeyAKKyAgCS8vIHByaXZhdGUgdmFyaWFibGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAKKyAgCS8qKgorICAJKiBJQ1U0SiBkYXRhIHZlcnNpb24gbnVtYmVyCisgIAkqLworICAJcHJpdmF0ZSBmaW5hbCBWZXJzaW9uSW5mbyBWRVJTSU9OXyA9IFZlcnNpb25JbmZvLmdldEluc3RhbmNlKCIzLjIuMC4wIik7CisgIAorICAJLy8gY29uc3RydWN0b3IgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIAorICAJLyoqCisgIAkqIENvbnN0cnVjdG9yCisgIAkqLworICAJcHVibGljIFVDaGFyYWN0ZXJUZXN0KCkKKyAgCXsKKyAgCX0KKyAgCisgIAkvLyBwdWJsaWMgbWV0aG9kcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgCisgCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZykKKyAgCXsKKyAgICAJdHJ5CisgICAgCXsKKyAgICAgIAkJVUNoYXJhY3RlclRlc3QgdGVzdCA9IG5ldyBVQ2hhcmFjdGVyVGVzdCgpOworICAgICAgICAgICAgdGVzdC5ydW4oYXJnKTsKKyAgICAJfQorICAgIAljYXRjaCAoRXhjZXB0aW9uIGUpCisgICAgCXsKKyAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOworICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkqIFRlc3RpbmcgdGhlIGxldHRlciBhbmQgbnVtYmVyIGRldGVybWluYXRpb24gaW4gVUNoYXJhY3RlcgorICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RMZXR0ZXJOdW1iZXIoKQorICAJeworICAgIAlmb3IgKGludCBpID0gMHgwMDQxOyBpIDwgMHgwMDVCOyBpICsrKSAKKyAgICAgIAlpZiAoIVVDaGFyYWN0ZXIuaXNMZXR0ZXIoaSkpCisgICAgICAgIAllcnJsbigiRkFJTCBcXHUiICsgaGV4KGkpICsgIiBleHBlY3RlZCB0byBiZSBhIGxldHRlciIpOworICAgICAgICAKKyAgICAJZm9yIChpbnQgaSA9IDB4MDY2MDsgaSA8IDB4MDY2QTsgaSArKykgCisgICAgICAJaWYgKFVDaGFyYWN0ZXIuaXNMZXR0ZXIoaSkpCisgICAgICAgIAllcnJsbigiRkFJTCBcXHUiICsgaGV4KGkpICsgIiBleHBlY3RlZCBub3QgdG8gYmUgYSBsZXR0ZXIiKTsKKyAgICAKKyAgICAJZm9yIChpbnQgaSA9IDB4MDY2MDsgaSA8IDB4MDY2QTsgaSArKykgCisgICAgICAJaWYgKCFVQ2hhcmFjdGVyLmlzRGlnaXQoaSkpCisgICAgICAgIAllcnJsbigiRkFJTCBcXHUiICsgaGV4KGkpICsgIiBleHBlY3RlZCB0byBiZSBhIGRpZ2l0Iik7CisgICAgCisgICAgCWZvciAoaW50IGkgPSAweDAwNDE7IGkgPCAweDAwNUI7IGkgKyspIAorICAgICAgCQlpZiAoIVVDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KGkpKQorICAgICAgICAJCWVycmxuKCJGQUlMIFxcdSIgKyBoZXgoaSkgKyAiIGV4cGVjdGVkIG5vdCB0byBiZSBhIGRpZ2l0Iik7CisgICAgICAgIAorICAgIAlmb3IgKGludCBpID0gMHgwNjYwOyBpIDwgMHgwNjZBOyBpICsrKSAKKyAgICAgIAkJaWYgKCFVQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChpKSkKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGkpICsgCisgICAgICAgICAgICAgIAkJImV4cGVjdGVkIHRvIGJlIGVpdGhlciBhIGxldHRlciBvciBhIGRpZ2l0Iik7CisJfQorCisgIAkvKioKKyAgCSogVGVzdHMgZm9yIHNwYWNlIGRldGVybWluYXRpb24gaW4gVUNoYXJhY3RlcgorICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RTcGFjZXMoKQorICAJeworICAgIAlpbnQgc3BhY2VzW10gPSB7MHgwMDIwLCAweDAwMDBhMCwgMHgwMDIwMDAsIDB4MDAyMDAxLCAweDAwMjAwNX07CisgICAgCWludCBub25zcGFjZXNbXSA9IHsweDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNzR9OworICAgIAlpbnQgd2hpdGVzcGFjZXNbXSA9IHsweDIwMDgsIDB4MDAyMDA5LCAweDAwMjAwYSwgMHgwMDAwMWMsIDB4MDAwMDBjfTsKKyAgICAJaW50IG5vbndoaXRlc3BhY2VzW10gPSB7MHg2MSwgMHgwMDYyLCAweDAwM2MsIDB4MDAyOCwgMHgwMDNmfTsKKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgCWludCBzaXplID0gc3BhY2VzLmxlbmd0aDsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKQorICAgIAl7CisgICAgICAJCWlmICghVUNoYXJhY3Rlci5pc1NwYWNlQ2hhcihzcGFjZXNbaV0pKQorICAgICAgCQl7CisgICAgICAgIAkJZXJybG4oIkZBSUwgXFx1IiArIGhleChzcGFjZXNbaV0pICsgCisgICAgICAgICAgICAgIAkJIiBleHBlY3RlZCB0byBiZSBhIHNwYWNlIGNoYXJhY3RlciIpOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgICAKKyAgICAgIAkJaWYgKFVDaGFyYWN0ZXIuaXNTcGFjZUNoYXIobm9uc3BhY2VzW2ldKSkKKyAgICAgIAkJeworICAgICAgICAJCWVycmxuKCJGQUlMIFxcdSIgKyBoZXgobm9uc3BhY2VzW2ldKSArIAorICAgICAgICAgIAkgICAgIiBleHBlY3RlZCBub3QgdG8gYmUgc3BhY2UgY2hhcmFjdGVyIik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAKKyAgICAgCSAJaWYgKCFVQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZSh3aGl0ZXNwYWNlc1tpXSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KHdoaXRlc3BhY2VzW2ldKSArIAorICAgICAgICAgICAgICAJCQkiIGV4cGVjdGVkIHRvIGJlIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyIik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAgIAkJaWYgKFVDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKG5vbndoaXRlc3BhY2VzW2ldKSkKKyAgICAgIAkJeworICAgICAgIAkgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KG5vbndoaXRlc3BhY2VzW2ldKSArIAorICAgICAgICAgICAgICAJCQkJIiBleHBlY3RlZCBub3QgdG8gYmUgYSBzcGFjZSBjaGFyYWN0ZXIiKTsKKyAgICAgICAgCQlicmVhazsKKyAgICAgIAkJfQorICAgICAgCQlsb2dsbigiT2sgICAgXFx1IiArIGhleChzcGFjZXNbaV0pICsgIiBhbmQgXFx1IiArIAorICAgICAgCQkgICAgICBoZXgobm9uc3BhY2VzW2ldKSArICIgYW5kIFxcdSIgKyBoZXgod2hpdGVzcGFjZXNbaV0pICsgCisgICAgICAJCSAgICAgICIgYW5kIFxcdSIgKyBoZXgobm9ud2hpdGVzcGFjZXNbaV0pKTsKKyAgICAJfQorICAJfQorICAKKyAgCS8qKgorICAJKiBUZXN0cyBmb3IgZGVmaW5lZCBhbmQgdW5kZWZpbmVkIGNoYXJhY3RlcnMKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0RGVmaW5lZCgpCisgIAl7CisgICAgCWludCB1bmRlZmluZWRbXSA9IHsweGZmZjEsIDB4ZmZmNywgMHhmYTZifTsKKyAgICAJaW50IGRlZmluZWRbXSA9IHsweDUyM0UsIDB4MDA0Zjg4LCAweDAwZmZmZH07CisgICAgCisgICAgCWludCBzaXplID0gdW5kZWZpbmVkLmxlbmd0aDsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSAKKyAgICAJeworICAgICAgCQlpZiAoVUNoYXJhY3Rlci5pc0RlZmluZWQodW5kZWZpbmVkW2ldKSkKKyAgICAgIAkJeworICAgICAgICAJCWVycmxuKCJGQUlMIFxcdSIgKyBoZXgodW5kZWZpbmVkW2ldKSArIAorICAgICAgICAgIAkgICAgCQkJIiBleHBlY3RlZCBub3QgdG8gYmUgZGVmaW5lZCIpOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgICAJCWlmICghVUNoYXJhY3Rlci5pc0RlZmluZWQoZGVmaW5lZFtpXSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGRlZmluZWRbaV0pICsgIiBleHBlY3RlZCBkZWZpbmVkIik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAJfQorICAJfQorICAKKyAgCS8qKgorICAJKiBUZXN0cyBmb3IgYmFzZSBjaGFyYWN0ZXJzIGFuZCB0aGVpciBjZWxsd2lkdGgKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0QmFzZSgpCisgIAl7CisgICAgCWludCBiYXNlW10gPSB7MHgwMDYxLCAweDAwMDAzMSwgMHgwMDAzZDJ9OworICAgIAlpbnQgbm9uYmFzZVtdID0gezB4MDAyQiwgMHgwMDAwMjAsIDB4MDAyMDNCfTsgICAgCisgICAgCWludCBzaXplID0gYmFzZS5sZW5ndGg7CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgCisgICAgCXsKKyAgICAgIAkJaWYgKFVDaGFyYWN0ZXIuaXNCYXNlRm9ybShub25iYXNlW2ldKSkKKyAgICAgIAkJeworICAgICAgIAkJIAllcnJsbigiRkFJTCBcXHUiICsgaGV4KG5vbmJhc2VbaV0pICsgCisgICAgICAgICAgICAgIAkJCQkiIGV4cGVjdGVkIG5vdCB0byBiZSBhIGJhc2UgY2hhcmFjdGVyIik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAgIAkJaWYgKCFVQ2hhcmFjdGVyLmlzQmFzZUZvcm0oYmFzZVtpXSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGJhc2VbaV0pICsgCisgICAgICAgIAkJICAgICAgIiBleHBlY3RlZCB0byBiZSBhIGJhc2UgY2hhcmFjdGVyIik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAJfQorICAJfQorICAgIAorICAJLyoqCisgIAkqIFRlc3RzIGZvciBkaWdpdCBjaGFyYWN0ZXJzIAorICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3REaWdpdHMoKQorICAJeworICAgIAlpbnQgZGlnaXRzW10gPSB7MHgwMDMwLCAweDAwMDY2MiwgMHgwMDBGMjMsIDB4MDAwRUQ1LCAweDAwMjE2MH07CisgICAgCisgICAgCS8vc3BlY2lhbCBjaGFyYWN0ZXJzIG5vdCBpbiB0aGUgcHJvcGVydGllcyB0YWJsZQorICAgICAJaW50IGRpZ2l0czJbXSA9IHsweDMwMDcsIDB4MDA0ZTAwLCAweDAwNGU4YywgMHgwMDRlMDksIDB4MDA1NmQ4LCAKKyAgICAgCQkgICAgICAgICAgICAgMHgwMDRlOTQsIDB4MDA1MTZkLCAweDRlMDMsIDB4MDA1MTZiLCAweDAwNGU1ZH07IAorICAgIAlpbnQgbm9uZGlnaXRzW10gPSB7MHgwMDEwLCAweDAwMDA0MSwgMHgwMDAxMjIsIDB4MDA2OEZFfTsKKyAgICAKKyAgICAJaW50IGRpZ2l0dmFsdWVzW10gPSB7MCwgMiwgMywgNSwgMX07CisgICAgCWludCBkaWdpdHZhbHVlczJbXSA9IHswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5fTsgICAgIAorICAgIAorICAgIAlpbnQgc2l6ZSAgPSBkaWdpdHMubGVuZ3RoOworICAgIAlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIAorICAgICAgCQlpZiAoVUNoYXJhY3Rlci5pc0RpZ2l0KGRpZ2l0c1tpXSkgJiYgCisgICAgICAgICAgCQlVQ2hhcmFjdGVyLmRpZ2l0KGRpZ2l0c1tpXSkgIT0gZGlnaXR2YWx1ZXNbaV0pIAorICAgICAgCQl7CisgICAgICAgCQkgCWVycmxuKCJGQUlMIFxcdSIgKyBoZXgoZGlnaXRzW2ldKSArIAorICAgICAgICAgICAgICAJCQkiIGV4cGVjdGVkIGRpZ2l0IHdpdGggdmFsdWUgIiArIGRpZ2l0dmFsdWVzW2ldKTsKKyAgICAgICAgCQlicmVhazsKKyAgICAgIAkJfQorICAgIAorICAgIAlzaXplID0gbm9uZGlnaXRzLmxlbmd0aDsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKQorICAgICAgCQlpZiAoVUNoYXJhY3Rlci5pc0RpZ2l0KG5vbmRpZ2l0c1tpXSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KG5vbmRpZ2l0c1tpXSkgKyAiIGV4cGVjdGVkIG5vbmRpZ2l0Iik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAgIAorICAgIAlzaXplID0gZGlnaXRzMi5sZW5ndGg7CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkgKyspIAorICAgICAgCQlpZiAoVUNoYXJhY3Rlci5pc0RpZ2l0KGRpZ2l0czJbaV0pICYmCisgICAgICAgICAgCQlVQ2hhcmFjdGVyLmRpZ2l0KGRpZ2l0czJbaV0pICE9IGRpZ2l0dmFsdWVzMltpXSkgCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGRpZ2l0czJbaV0pICsgCisgICAgICAgICAgICAgIAkJIiBleHBlY3RlZCBkaWdpdCB3aXRoIHZhbHVlICIgKyBkaWdpdHZhbHVlczJbaV0pOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgIAl9CisgIAorICAJLyoqCisgICAJKiAgVGVzdHMgZm9yIG51bWVyaWMgY2hhcmFjdGVycworICAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0TnVtZXJpYygpCisgIAl7CisJCWZvciAoaW50IGkgPSAnMCc7IGkgPCAnOSc7IGkgKyspIHsKKwkJCWludCBuMSA9IFVDaGFyYWN0ZXIuZ2V0TnVtZXJpY1ZhbHVlKGkpOworCQkJZG91YmxlIG4yID0gVUNoYXJhY3Rlci5nZXRVbmljb2RlTnVtZXJpY1ZhbHVlKGkpOworCQkJaWYgKG4xICE9IG4yIHx8ICBuMSAhPSAoaSAtICcwJykpIHsKKwkJCQllcnJsbigiTnVtZXJpYyB2YWx1ZSBvZiAiICsgKGNoYXIpaSArICIgZXhwZWN0ZWQgdG8gYmUgIiArCisJCQkJICAgICAgKGkgLSAnMCcpKTsKKwkJCX0KKwkJfQorCQlmb3IgKGludCBpID0gJ0EnOyBpIDwgJ0YnOyBpICsrKSB7CisJCQlpbnQgbjEgPSBVQ2hhcmFjdGVyLmdldE51bWVyaWNWYWx1ZShpKTsKKwkJCWRvdWJsZSBuMiA9IFVDaGFyYWN0ZXIuZ2V0VW5pY29kZU51bWVyaWNWYWx1ZShpKTsKKwkJCWlmIChuMiAhPSBVQ2hhcmFjdGVyLk5PX05VTUVSSUNfVkFMVUUgfHwgIG4xICE9IChpIC0gJ0EnICsgMTApKSB7CisJCQkJZXJybG4oIk51bWVyaWMgdmFsdWUgb2YgIiArIChjaGFyKWkgKyAiIGV4cGVjdGVkIHRvIGJlICIgKworCQkJCSAgICAgIChpIC0gJ0EnICsgMTApKTsKKwkJCX0KKwkJfQorCQlmb3IgKGludCBpID0gMHhGRjIxOyBpIDwgMHhGRjI2OyBpICsrKSB7CisJCQkvLyB0ZXN0aW5nIGZ1bGwgd2lkZXRoIGxhdGluIGNoYXJhY3RlcnMgQS1GCisJCQlpbnQgbjEgPSBVQ2hhcmFjdGVyLmdldE51bWVyaWNWYWx1ZShpKTsKKwkJCWRvdWJsZSBuMiA9IFVDaGFyYWN0ZXIuZ2V0VW5pY29kZU51bWVyaWNWYWx1ZShpKTsKKwkJCWlmIChuMiAhPSBVQ2hhcmFjdGVyLk5PX05VTUVSSUNfVkFMVUUgfHwgIG4xICE9IChpIC0gMHhGRjIxICsgMTApKSB7CisJCQkJZXJybG4oIk51bWVyaWMgdmFsdWUgb2YgIiArIChjaGFyKWkgKyAiIGV4cGVjdGVkIHRvIGJlICIgKworCQkJCSAgICAgIChpIC0gMHhGRjIxICsgMTApKTsKKwkJCX0KKwkJfQorCQkvLyB0ZXN0aW5nIGhhbiBudW1iZXJzCisJCWludCBoYW5bXSA9IHsweDk2ZjYsIDAsIDB4NThmOSwgMSwgMHg4Y2IzLCAyLCAweDUzYzMsIDMsIAorCQkJICAgICAgICAgMHg4MDg2LCA0LCAweDRmMGQsIDUsIDB4OTY3OCwgNiwgMHg2N2QyLCA3LCAKKwkJCSAgICAgICAgIDB4NjM0YywgOCwgMHg3Mzk2LCA5LCAweDUzNDEsIDEwLCAweDYyZmUsIDEwLAorCQkJICAgICAgICAgMHg3NjdlLCAxMDAsIDB4NGY3MCwgMTAwLCAweDUzNDMsIDEwMDAsIDB4NGVkZiwgMTAwMCwKKwkJCSAgICAgICAgIDB4ODI0YywgMTAwMDAsIDB4NTEwNCwgMTAwMDAwMDAwfTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBoYW4ubGVuZ3RoOyBpICs9IDIpIHsKKwkJCWlmIChVQ2hhcmFjdGVyLmdldEhhbk51bWVyaWNWYWx1ZShoYW5baV0pICE9IGhhbltpICsgMV0pIHsKKwkJCQllcnJsbigiTnVtZXJpYyB2YWx1ZSBvZiBcXHUiICsgCisJCQkJICAgICAgSW50ZWdlci50b0hleFN0cmluZyhoYW5baV0pICsJIiBleHBlY3RlZCB0byBiZSAiICsgCisJCQkJICAgICAgaGFuW2kgKyAxXSk7CisJCQl9CisJCX0KKyAgCX0KKworICAJLyoqCisgIAkqIFRlc3RzIGZvciB2ZXJzaW9uIAorICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RWZXJzaW9uKCkKKyAgCXsKKyAgICAJaWYgKCFVQ2hhcmFjdGVyLmdldFVuaWNvZGVWZXJzaW9uKCkuZXF1YWxzKFZFUlNJT05fKSkKKyAgICAgIAkJZXJybG4oIkZBSUwgZXhwZWN0ZWQgIiArIFZFUlNJT05fKTsKKyAgCX0KKyAgCisgIAkvKioKKyAgCSogVGVzdHMgZm9yIGNvbnRyb2wgY2hhcmFjdGVycworICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RJU09Db250cm9sKCkKKyAgCXsKKyAgICAJaW50IGNvbnRyb2xbXSA9IHsweDAwMWIsIDB4MDAwMDk3LCAweDAwMDA4Mn07CisgICAgCWludCBub25jb250cm9sW10gPSB7MHg2MSwgMHgwMDAwMzEsIDB4MDAwMGUyfTsKKyAgICAKKyAgICAJaW50IHNpemUgPSBjb250cm9sLmxlbmd0aDsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSAKKyAgICAJeworICAgICAgCQlpZiAoIVVDaGFyYWN0ZXIuaXNJU09Db250cm9sKGNvbnRyb2xbaV0pKQorICAgICAgCQl7CisgICAgICAgIAkJZXJybG4oIkZBSUwgMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhjb250cm9sW2ldKSArIAorICAgICAgICAgCSAgICAgCQkiIGV4cGVjdGVkIHRvIGJlIGEgY29udHJvbCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgCQlicmVhazsKKyAgICAgIAkJfSAgCisgICAgICAJCWlmIChVQ2hhcmFjdGVyLmlzSVNPQ29udHJvbChub25jb250cm9sW2ldKSkKKyAgICAgIAkJeworICAgICAgICAJCWVycmxuKCJGQUlMIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcobm9uY29udHJvbFtpXSkgKyAKKyAgICAgICAgICAgICAgCQkJIiBleHBlY3RlZCB0byBiZSBub3QgYSBjb250cm9sIGNoYXJhY3RlciIpOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgICAKKyAgICAgIAkJbG9nbG4oIk9rICAgIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoY29udHJvbFtpXSkgKyAiIGFuZCAweCIgKworICAgICAgICAgICAgCQlJbnRlZ2VyLnRvSGV4U3RyaW5nKG5vbmNvbnRyb2xbaV0pKTsKKyAgICAJfQorICAJfQorICAJCisgIAkvKioKKyAgCSAqIFRlc3QgU3VwcGxlbWVudGFyeQorICAJICovCisgIAlwdWJsaWMgdm9pZCBUZXN0U3VwcGxlbWVudGFyeSgpCisgIAl7CisgIAkJZm9yIChpbnQgaSA9IDA7IGkgPCAweDEwMDAwOyBpICsrKSB7CisgIAkJCWlmIChVQ2hhcmFjdGVyLmlzU3VwcGxlbWVudGFyeShpKSkgeworICAJCQkJZXJybG4oIkNvZGVwb2ludCBcXHUiICsgSW50ZWdlci50b0hleFN0cmluZyhpKSArIAorICAJCQkJICAgICAgIiBpcyBub3Qgc3VwcGxlbWVudGFyeSIpOworICAJCQl9CisgIAkJfQorICAJCWZvciAoaW50IGkgPSAweDEwMDAwOyBpIDwgMHgxMEZGRkY7IGkgKyspIHsKKyAgCQkJaWYgKCFVQ2hhcmFjdGVyLmlzU3VwcGxlbWVudGFyeShpKSkgeworICAJCQkJZXJybG4oIkNvZGVwb2ludCBcXHUiICsgSW50ZWdlci50b0hleFN0cmluZyhpKSArIAorICAJCQkJICAgICAgIiBpcyBzdXBwbGVtZW50YXJ5Iik7CisgIAkJCX0KKyAgCQl9CisgIAl9CisgIAkKKyAgCS8qKgorICAJICogVGVzdCBtaXJyb3JpbmcKKyAgCSAqLworICAJcHVibGljIHZvaWQgVGVzdE1pcnJvcigpCisgIAl7CisgIAkJaWYgKCEoVUNoYXJhY3Rlci5pc01pcnJvcmVkKDB4MjgpICYmIFVDaGFyYWN0ZXIuaXNNaXJyb3JlZCgweGJiKSAmJiAKKyAgCQkgICAgICBVQ2hhcmFjdGVyLmlzTWlycm9yZWQoMHgyMDQ1KSAmJiBVQ2hhcmFjdGVyLmlzTWlycm9yZWQoMHgyMzJhKQorICAJCSAgICAgICYmICFVQ2hhcmFjdGVyLmlzTWlycm9yZWQoMHgyNykgJiYgCisgIAkJICAgICAgIVVDaGFyYWN0ZXIuaXNNaXJyb3JlZCgweDYxKSAmJiAhVUNoYXJhY3Rlci5pc01pcnJvcmVkKDB4Mjg0KSAKKyAgCQkgICAgICAmJiAhVUNoYXJhY3Rlci5pc01pcnJvcmVkKDB4MzQwMCkpKSB7CisgICAgICAgIAllcnJsbigiaXNNaXJyb3JlZCgpIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5Iik7CisgICAgCX0KKworICAgIAlpZiAoIShVQ2hhcmFjdGVyLmdldE1pcnJvcigweDNjKSA9PSAweDNlICYmIAorICAgIAkgICAgICBVQ2hhcmFjdGVyLmdldE1pcnJvcigweDVkKSA9PSAweDViICYmIAorICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmdldE1pcnJvcigweDIwOGQpID09IDB4MjA4ZSAmJiAKKyAgICAgICAgICAgICAgVUNoYXJhY3Rlci5nZXRNaXJyb3IoMHgzMDE3KSA9PSAweDMwMTYgJiYKKyAgICAgICAgIAkgIFVDaGFyYWN0ZXIuZ2V0TWlycm9yKDB4MmUpID09IDB4MmUgJiYgCisgICAgICAgICAJICBVQ2hhcmFjdGVyLmdldE1pcnJvcigweDZmMykgPT0gMHg2ZjMgJiYgCisgICAgICAgICAJICBVQ2hhcmFjdGVyLmdldE1pcnJvcigweDMwMWMpID09IDB4MzAxYyAmJiAKKyAgICAgICAgIAkgIFVDaGFyYWN0ZXIuZ2V0TWlycm9yKDB4YTRhYikgPT0gMHhhNGFiKSkgeworICAgICAgICAJZXJybG4oImdldE1pcnJvcigpIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5Iik7CisgICAgCX0KKwl9CisgIAorICAJLyoqCisgIAkqIFRlc3RzIGZvciBwcmludGFibGUgY2hhcmFjdGVycworICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RQcmludCgpCisgIAl7CisgICAgCWludCBwcmludGFibGVbXSA9IHsweDAwNDIsIDB4MDAwMDVmLCAweDAwMjAxNH07CisgICAgCWludCBub25wcmludGFibGVbXSA9IHsweDIwMGMsIDB4MDAwMDlmLCAweDAwMDAxYn07CisgICAgCisgICAgCWludCBzaXplID0gcHJpbnRhYmxlLmxlbmd0aDsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKQorICAgIAl7CisgICAgICAJCWlmICghVUNoYXJhY3Rlci5pc1ByaW50YWJsZShwcmludGFibGVbaV0pKQorICAgICAgCQl7CisgICAgICAgCSAJCWVycmxuKCJGQUlMIFxcdSIgKyBoZXgocHJpbnRhYmxlW2ldKSArIAorICAgICAgICAgICAgICAJCSIgZXhwZWN0ZWQgdG8gYmUgYSBwcmludGFibGUgY2hhcmFjdGVyIik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAgIAkJaWYgKFVDaGFyYWN0ZXIuaXNQcmludGFibGUobm9ucHJpbnRhYmxlW2ldKSkKKyAgICAgIAkJeworICAgICAgICAJCWVycmxuKCJGQUlMIFxcdSIgKyBoZXgobm9ucHJpbnRhYmxlW2ldKSArCisgICAgICAgICAgICAgIAkJCSIgZXhwZWN0ZWQgbm90IHRvIGJlIGEgcHJpbnRhYmxlIGNoYXJhY3RlciIpOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgICAJCWxvZ2xuKCJPayAgICBcXHUiICsgaGV4KHByaW50YWJsZVtpXSkgKyAiIGFuZCBcXHUiICsgCisgICAgICAgICAgICAJCWhleChub25wcmludGFibGVbaV0pKTsKKyAgICAJfQorICAgIAorICAgIAkvLyB0ZXN0IGFsbCBJU08gOCBjb250cm9scworICAgIAlmb3IgKGludCBjaCA9IDA7IGNoIDw9IDB4OWY7ICsrIGNoKSB7CisgICAgICAJCWlmIChjaCA9PSAweDIwKSB7CisgICAgICAJCQkvLyBza2lwIEFTQ0lJIGdyYXBoaWMgY2hhcmFjdGVycyBhbmQgY29udGludWUgd2l0aCBERUwKKyAgICAgICAgCQljaCA9IDB4N2Y7CisgICAgICAJCX0KKyAgICAgIAkJaWYgKFVDaGFyYWN0ZXIuaXNQcmludGFibGUoY2gpKSB7CisgICAgICAgIAkJZXJybG4oIkZhaWwgXFx1IiArIGhleChjaCkgKyAKKyAgICAgICAgICAgICAgCQkiIGlzIGEgSVNPIDggY29udHJvbCBjaGFyYWN0ZXIgaGVuY2Ugbm90IHByaW50YWJsZVxuIik7CisgICAgICAJCX0KKyAgICAJfQorCisgICAgCS8qIHRlc3QgYWxsIExhdGluLTEgZ3JhcGhpYyBjaGFyYWN0ZXJzICovCisgICAgCWZvciAoaW50IGNoID0gMHgyMDsgY2ggPD0gMHhmZjsgKysgY2gpIHsKKyAgICAgIAkJaWYgKGNoID09IDB4N2YpIHsKKyAgICAgICAgCQljaCA9IDB4YTA7CisgICAgICAJCX0KKyAgICAgIAkJaWYgKCFVQ2hhcmFjdGVyLmlzUHJpbnRhYmxlKGNoKSkgeworICAgICAgICAJCWVycmxuKCJGYWlsIFxcdSIgKyBoZXgoY2gpICsgCisgICAgICAgIAkJICAgICAgIiBpcyBhIExhdGluLTEgZ3JhcGhpYyBjaGFyYWN0ZXJcbiIpOworICAgICAgICAJfQorICAgIAl9CisgIAl9CisgIAorICAJLyoqIAorICAJKiBUZXN0aW5nIGZvciBpZGVudGlmaWVyIGNoYXJhY3RlcnMKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0SWRlbnRpZmllcigpCisgIAl7CisgICAgCWludCB1bmljb2RlaWRzdGFydFtdID0gezB4MDI1MCwgMHgwMDAwZTIsIDB4MDAwMDYxfTsKKyAgICAJaW50IG5vbnVuaWNvZGVpZHN0YXJ0W10gPSB7MHgyMDAwLCAweDAwMDAwYSwgMHgwMDIwMTl9OworICAgIAlpbnQgdW5pY29kZWlkcGFydFtdID0gezB4MDA1ZiwgMHgwMDAwMzIsIDB4MDAwMDQ1fTsKKyAgICAJaW50IG5vbnVuaWNvZGVpZHBhcnRbXSA9IHsweDIwMzAsIDB4MDAwMGEzLCAweDAwMDAyMH07CisgICAgCWludCBpZGlnbm9yZVtdID0gezB4MDAwNiwgMHgwMDEwLCAweDIwNmJ9OworICAgIAlpbnQgbm9uaWRpZ25vcmVbXSA9IHsweDAwNzUsIDB4MDAwMGEzLCAweDAwMDA2MX07CisgICAgCisgICAgCWludCBzaXplID0gdW5pY29kZWlkc3RhcnQubGVuZ3RoOworICAgIAlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIAorICAgIAl7CisgICAgICAJCWlmICghVUNoYXJhY3Rlci5pc1VuaWNvZGVJZGVudGlmaWVyU3RhcnQodW5pY29kZWlkc3RhcnRbaV0pKQorICAgICAgCQl7CisgICAgICAgIAkJZXJybG4oIkZBSUwgXFx1IiArIGhleCh1bmljb2RlaWRzdGFydFtpXSkgKyAKKyAgICAgICAgICAgICAgCQkiIGV4cGVjdGVkIHRvIGJlIGEgdW5pY29kZSBpZGVudGlmaWVyIHN0YXJ0IGNoYXJhY3RlciIpOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgICAJCWlmIChVQ2hhcmFjdGVyLmlzVW5pY29kZUlkZW50aWZpZXJTdGFydChub251bmljb2RlaWRzdGFydFtpXSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KG5vbnVuaWNvZGVpZHN0YXJ0W2ldKSArIAorICAgICAgICAgICAgICAJCQkiIGV4cGVjdGVkIG5vdCB0byBiZSBhIHVuaWNvZGUgaWRlbnRpZmllciBzdGFydCAiICsgCisgICAgICAgICAgICAgIAkJCSJjaGFyYWN0ZXIiKTsKKyAgICAgICAgCQlicmVhazsKKyAgICAgIAkJfQorICAgICAgCQlpZiAoIVVDaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmllclBhcnQodW5pY29kZWlkcGFydFtpXSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KHVuaWNvZGVpZHBhcnRbaV0pICsgCisgICAgICAgICAgICAgIAkJIiBleHBlY3RlZCB0byBiZSBhIHVuaWNvZGUgaWRlbnRpZmllciBwYXJ0IGNoYXJhY3RlciIpOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgICAJCWlmIChVQ2hhcmFjdGVyLmlzVW5pY29kZUlkZW50aWZpZXJQYXJ0KG5vbnVuaWNvZGVpZHBhcnRbaV0pKQorICAgICAgCQl7CisgICAgICAgIAkJZXJybG4oIkZBSUwgXFx1IiArIGhleChub251bmljb2RlaWRwYXJ0W2ldKSArIAorICAgICAgICAgICAgICAJCQkiIGV4cGVjdGVkIG5vdCB0byBiZSBhIHVuaWNvZGUgaWRlbnRpZmllciBwYXJ0ICIgKworICAgICAgICAgICAgICAJCQkiY2hhcmFjdGVyIik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAgICAgICAgIGlmICghVUNoYXJhY3Rlci5pc0lkZW50aWZpZXJJZ25vcmFibGUoaWRpZ25vcmVbaV0pKQorICAgICAgCQl7CisgICAgICAgIAkJZXJybG4oIkZBSUwgXFx1IiArIGhleChpZGlnbm9yZVtpXSkgKyAKKyAgICAgICAgICAgICAgCQkJIiBleHBlY3RlZCB0byBiZSBhIGlnbm9yYWJsZSB1bmljb2RlIGNoYXJhY3RlciIpOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgICAJCWlmIChVQ2hhcmFjdGVyLmlzSWRlbnRpZmllcklnbm9yYWJsZShub25pZGlnbm9yZVtpXSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KG5vbmlkaWdub3JlW2ldKSArIAorICAgICAgICAgICAgICAJCSIgZXhwZWN0ZWQgbm90IHRvIGJlIGEgaWdub3JhYmxlIHVuaWNvZGUgY2hhcmFjdGVyIik7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAgIAkJbG9nbG4oIk9rICAgIFxcdSIgKyBoZXgodW5pY29kZWlkc3RhcnRbaV0pICsgIiBhbmQgXFx1IiArCisgICAgICAgICAgICAJCWhleChub251bmljb2RlaWRzdGFydFtpXSkgKyAiIGFuZCBcXHUiICsgCisgICAgICAgICAgICAJCWhleCh1bmljb2RlaWRwYXJ0W2ldKSArICIgYW5kIFxcdSIgKyAKKyAgICAgICAgICAgIAkJaGV4KG5vbnVuaWNvZGVpZHBhcnRbaV0pICsgIiBhbmQgXFx1IiArCisgICAgICAgICAgICAJCWhleChpZGlnbm9yZVtpXSkgKyAiIGFuZCBcXHUiICsgaGV4KG5vbmlkaWdub3JlW2ldKSk7CisgICAgCX0KKyAgCX0KKyAgCisgIAkvKioKKyAgCSogVGVzdHMgZm9yIHRoZSBjaGFyYWN0ZXIgdHlwZXMsIGRpcmVjdGlvbi48YnI+CisgIAkqIFRoaXMgbWV0aG9kIHJlYWRzIGluIFVuaWNvZGVEYXRhLnR4dCBmaWxlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBBIAorICAJKiBkZWZhdWx0IHBhdGggaXMgcHJvdmlkZWQgcmVsYXRpdmUgdG8gdGhlIHNyYyBwYXRoLCBob3dldmVyIHRoZSB1c2VyIAorICAJKiBjb3VsZCBzZXQgYSBzeXN0ZW0gcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkaXJlY3RvcnkgcGF0aC48YnI+CisgIAkqIGUuZy4gamF2YSAtRFVuaWNvZGVEYXRhPSJkYXRhX2RpcmVjdG9yeV9wYXRoIiAKKyAgCSogY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZy5VQ2hhcmFjdGVyVGVzdAorICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RVbmljb2RlRGF0YSgpCisgIAl7CisgICAgCS8vIHRoaXMgaXMgdGhlIDIgY2hhciBjYXRlZ29yeSB0eXBlcyB1c2VkIGluIHRoZSBVbmljb2RlRGF0YSBmaWxlCisgICAgCWZpbmFsIFN0cmluZyBUWVBFID0gCisgICAgICAJCSJMdUxsTHRMbUxvTW5NZU1jTmRObE5vWnNabFpwQ2NDZkNvQ3NQZFBzUGVQY1BvU21TY1NrU29QaVBmIjsKKyAgICAKKyAgICAJLy8gZGlyZWN0b3J5IHR5cGVzIHVzZWQgaW4gdGhlIFVuaWNvZGVEYXRhIGZpbGUKKyAgICAJLy8gcGFkZGVkIGJ5IHNwYWNlcyB0byBtYWtlIGVhY2ggdHlwZSBzaXplIDQKKyAgICAJZmluYWwgU3RyaW5nIERJUiA9IAorICAgICAgCQkiTCAgIFIgICBFTiAgRVMgIEVUICBBTiAgQ1MgIEIgICBTICAgV1MgIE9OICBMUkUgTFJPIEFMICBSTEUgUkxPIFBERiBOU00gQk4gICI7CisgICAgICAKKyAgICAJZmluYWwgaW50IExBU1RVTklDT0RFQ0hBUiA9IDB4RkZGRDsKKyAgICAJaW50IGNoID0gMCwKKyAgICAgICAgCWluZGV4ID0gMCwKKyAgICAgICAgCXR5cGUgPSAwLAorICAgICAgICAJZGlyID0gMDsKKwkKKwkJdHJ5CisJCXsKKwkgIAkJQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBUZXN0VXRpbC5nZXREYXRhUmVhZGVyKAorCSAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZS9Vbmljb2RlRGF0YS50eHQiKTsKKwkgICAgCisgICAgICAJCXdoaWxlIChjaCAhPSBMQVNUVU5JQ09ERUNIQVIpCisgICAgICAJCXsKKyAgICAgICAJIAkJU3RyaW5nIHMgPSBpbnB1dC5yZWFkTGluZSgpOworICAgICAgICAJCS8vIGdldGluZyB0aGUgdW5pY29kZSBjaGFyYWN0ZXIsIGl0cyB0eXBlIGFuZCBpdHMgZGlyZWN0aW9uCisgICAgICAgIAkJY2ggPSBJbnRlZ2VyLnBhcnNlSW50KHMuc3Vic3RyaW5nKDAsIDQpLCAxNik7CisgICAgICAgIAkJaW5kZXggPSBzLmluZGV4T2YoJzsnLCA1KTsKKyAgICAgICAgCQlTdHJpbmcgdCA9IHMuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAzKTsKKyAgICAgICAgCQlpbmRleCArPSA0OworICAgICAgICAgICAgICAgIGludCBvbGRpbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGluZGV4ID0gcy5pbmRleE9mKCc7JywgaW5kZXgpOworICAgICAgICAJCWludCBjYyA9IEludGVnZXIucGFyc2VJbnQocy5zdWJzdHJpbmcob2xkaW5kZXgsIGluZGV4KSk7CisgICAgICAgICAgICAgICAgb2xkaW5kZXggPSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgaW5kZXggPSBzLmluZGV4T2YoJzsnLCBvbGRpbmRleCk7CisgICAgICAgIAkJU3RyaW5nIGQgPSBzLnN1YnN0cmluZyhvbGRpbmRleCwgaW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHMuaW5kZXhPZignOycsIGluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIC8vIHNraXBwaW5nIHRvIHRoZSAxMXRoIGZpZWxkCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGlzbyBjb21tZW50CisgICAgICAgICAgICAgICAgb2xkaW5kZXggPSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgaW5kZXggPSBzLmluZGV4T2YoJzsnLCBvbGRpbmRleCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGlzb2NvbW1lbnQgPSBzLnN1YnN0cmluZyhvbGRpbmRleCwgaW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHVwcGVyY2FzZQorICAgICAgICAgICAgICAgIG9sZGluZGV4ID0gaW5kZXggKyAxOworICAgICAgICAgICAgICAgIGluZGV4ID0gcy5pbmRleE9mKCc7Jywgb2xkaW5kZXgpOworICAgICAgICAgICAgICAgIFN0cmluZyB1cHBlciA9IHMuc3Vic3RyaW5nKG9sZGluZGV4LCBpbmRleCk7CisgICAgICAgICAgICAgICAgLy8gbG93ZXJjYXNlCisgICAgICAgICAgICAgICAgb2xkaW5kZXggPSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgaW5kZXggPSBzLmluZGV4T2YoJzsnLCBvbGRpbmRleCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxvd2VyID0gcy5zdWJzdHJpbmcob2xkaW5kZXgsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyB0aXRsZWNhc2UgbGFzdCBlbGVtZW50CisgICAgICAgICAgICAgICAgb2xkaW5kZXggPSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRpdGxlID0gcy5zdWJzdHJpbmcob2xkaW5kZXgpOworICAgICAgICAKKyAgICAgICAgCQkvLyB0ZXN0aW5nIHRoZSBjYXRlZ29yeQorICAgICAgICAJCS8vIHdlIG92ZXJyaWRlIHRoZSBnZW5lcmFsIGNhdGVnb3J5IG9mIHNvbWUgY29udHJvbCAKKyAgICAgICAgCQkvLyBjaGFyYWN0ZXJzCisgICAgICAgIAkJdHlwZSA9IFRZUEUuaW5kZXhPZih0KTsKKyAgICAgICAgCQlpZiAodHlwZSA8IDApCisgICAgICAgICAgICAJCXR5cGUgPSAwOworICAgICAgICAJCWVsc2UgCisgICAgICAgICAgICAJCXR5cGUgPSAodHlwZSA+PiAxKSArIDE7ICAKKyAgICAgICAgCQlpZiAoVUNoYXJhY3Rlci5nZXRUeXBlKGNoKSAhPSB0eXBlKQorICAgICAgICAJCXsKKyAgICAgICAgICAJCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGNoKSArICIgZXhwZWN0ZWQgdHlwZSAiICsgCisgICAgICAgICAgICAgICAgCQkJdHlwZSk7CisgICAgICAgICAgCQkJYnJlYWs7CisgICAgICAgIAkJfQorICAgICAgICAKKyAgICAgICAgCQkvLyB0ZXN0aW5nIGNvbWJpbmluZyBjbGFzcworICAgICAgICAJCWlmIChVQ2hhcmFjdGVyLmdldENvbWJpbmluZ0NsYXNzKGNoKSAhPSBjYykKKyAgICAgICAgCQl7CisgICAgICAgICAgCQkJZXJybG4oIkZBSUwgXFx1IiArIGhleChjaCkgKyAiIGV4cGVjdGVkIGNvbWJpbmluZyAiICsKKyAgICAgICAgICAgICAgICAJCQkiY2xhc3MgIiArIGNjKTsKKyAgICAgICAgICAJCQlicmVhazsKKyAgICAgICAgCQl9CisgICAgICAgIAorICAgICAgICAJCS8vIHRlc3RpbmcgdGhlIGRpcmVjdGlvbgorICAgICAgICAJCWlmIChkLmxlbmd0aCgpID09IDEpCisgICAgICAgICAgCQkJZCA9IGQgKyAiICAgIjsgIAorICAgICAgICAgIAorICAgICAgICAJCWRpciA9IERJUi5pbmRleE9mKGQpID4+IDI7CisgICAgICAgIAkJaWYgKFVDaGFyYWN0ZXIuZ2V0RGlyZWN0aW9uKGNoKSAhPSBkaXIpIAorICAgICAgICAJCXsKKyAgICAgICAgICAJCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGNoKSArIAorICAgICAgICAgICAgICAgIAkJIiBleHBlY3RlZCB3cm9uZyBkaXJlY3Rpb24gIiArIGRpcik7CisgICAgICAgICAgCQkJYnJlYWs7CisgICAgICAgIAkJfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHRlc3RpbmcgaXNvIGNvbW1lbnQKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29tbWVudCA9IFVDaGFyYWN0ZXIuZ2V0SVNPQ29tbWVudChjaCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gIiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghY29tbWVudC5lcXVhbHMoaXNvY29tbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUwgXFx1IiArIGhleChjaCkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQgaXNvIGNvbW1lbnQgIiArIGlzb2NvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCB0ZW1wY2hhciA9IGNoOworICAgICAgICAgICAgICAgIGlmICh1cHBlci5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcGNoYXIgPSBJbnRlZ2VyLnBhcnNlSW50KHVwcGVyLCAxNik7CisgICAgICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoKSAhPSB0ZW1wY2hhcikgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTCBcXHUiICsgVXRpbGl0eS5oZXgoY2gsIDQpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCB1cHBlcmNhc2UgXFx1IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KHRlbXBjaGFyLCA0KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wY2hhciA9IGNoOworICAgICAgICAgICAgICAgIGlmIChsb3dlci5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcGNoYXIgPSBJbnRlZ2VyLnBhcnNlSW50KGxvd2VyLCAxNik7CisgICAgICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGNoKSAhPSB0ZW1wY2hhcikgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTCBcXHUiICsgVXRpbGl0eS5oZXgoY2gsIDQpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCBsb3dlcmNhc2UgXFx1IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KHRlbXBjaGFyLCA0KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wY2hhciA9IGNoOworICAgICAgICAgICAgICAgIGlmICh0aXRsZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcGNoYXIgPSBJbnRlZ2VyLnBhcnNlSW50KHRpdGxlLCAxNik7CisgICAgICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLnRvVGl0bGVDYXNlKGNoKSAhPSB0ZW1wY2hhcikgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTCBcXHUiICsgVXRpbGl0eS5oZXgoY2gsIDQpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCB0aXRsZWNhc2UgXFx1IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KHRlbXBjaGFyLCA0KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgIAkJfQorICAgICAgCQlpbnB1dC5jbG9zZSgpOworICAgIAl9CisgICAgCWNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAJeworICAgICAgCQllLnByaW50U3RhY2tUcmFjZSgpOworICAgIAl9CisgICAgICAgIAorICAgICAgICBpZiAoVUNoYXJhY3Rlci5Vbmljb2RlQmxvY2sub2YoMHgwMDQxKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBVQ2hhcmFjdGVyLlVuaWNvZGVCbG9jay5CQVNJQ19MQVRJTiAKKyAgICAgICAgICAgIHx8IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlWYWx1ZSgweDQxLCBVUHJvcGVydHkuQkxPQ0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBVQ2hhcmFjdGVyLlVuaWNvZGVCbG9jay5CQVNJQ19MQVRJTi5nZXRJRCgpKSB7CisgICAgICAgICAgICBlcnJsbigiVUNoYXJhY3Rlci5Vbmljb2RlQmxvY2sub2YoXFx1MDA0MSkgcHJvcGVydHkgZmFpbGVkISAiIAorICAgICAgICAgICAgICAgICAgICArICJFeHBlY3RlZCA6ICIgCisgICAgICAgICAgICAgICAgICAgICsgVUNoYXJhY3Rlci5Vbmljb2RlQmxvY2suQkFTSUNfTEFUSU4uZ2V0SUQoKSArICIgZ290ICIgCisgICAgICAgICAgICAgICAgICAgICsgVUNoYXJhY3Rlci5Vbmljb2RlQmxvY2sub2YoMHgwMDQxKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHNhbml0eSBjaGVjayBvbiByZXBlYXRlZCBwcm9wZXJ0aWVzIAorICAgICAgICBmb3IgKGNoID0gMHhmZmZlOyBjaCA8PSAweDEwZmZmZjspIHsKKyAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmdldFR5cGUoY2gpICE9IFVDaGFyYWN0ZXJDYXRlZ29yeS5VTkFTU0lHTkVEKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yOiBVQ2hhcmFjdGVyLmdldFR5cGUoXFx1IiArIFV0aWxpdHkuaGV4KGNoLCA0KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVU5BU1NJR05FRCAocmV0dXJucyAiCisgICAgICAgICAgICAgICAgICAgICAgICArIFVDaGFyYWN0ZXJDYXRlZ29yeS50b1N0cmluZyhVQ2hhcmFjdGVyLmdldFR5cGUoY2gpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoY2ggJiAweGZmZmYpID09IDB4ZmZmZSkgeworICAgICAgICAgICAgICAgICsrIGNoOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNoICs9IDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyB0ZXN0IHRoYXQgUFVBIGlzIG5vdCAidW5hc3NpZ25lZCIKKyAgICAgICAgZm9yKGNoID0gMHhlMDAwOyBjaCA8PSAweDEwZmZmZDspIHsKKyAgICAgICAgICAgIHR5cGUgPSBVQ2hhcmFjdGVyLmdldFR5cGUoY2gpOworICAgICAgICAgICAgaWYgKHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlVOQVNTSUdORUQpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiZXJyb3I6IFVDaGFyYWN0ZXIuZ2V0VHlwZShcXHUiIAorICAgICAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleChjaCwgNCkgCisgICAgICAgICAgICAgICAgICAgICAgICArICIpID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VTkFTU0lHTkVEIik7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAodHlwZSAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuUFJJVkFURV9VU0UpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiUFVBIG92ZXJyaWRlOiBVQ2hhcmFjdGVyLmdldFR5cGUoXFx1IiAKKyAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KGNoLCA0KSArICIpPSIgKyB0eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaCA9PSAweGY4ZmYpIHsKKyAgICAgICAgICAgICAgICBjaCA9IDB4ZjAwMDA7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gMHhmZmZmZCkgeworICAgICAgICAgICAgICAgIGNoID0gMHgxMDAwMDA7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgKysgY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgCX0KKyAgCisgIAorICAJLyoqCisgIAkqIFRlc3QgZm9yIHRoZSBjaGFyYWN0ZXIgbmFtZXMKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0TmFtZXMoKQorICAJeworICAgICAgICBpbnQgbGVuZ3RoID0gVUNoYXJhY3Rlck5hbWUuZ2V0SW5zdGFuY2UoKS5nZXRNYXhDaGFyTmFtZUxlbmd0aCgpOyAKKyAgICAgICAgaWYgKGxlbmd0aCA8IDgzKSB7IC8vIFVuaWNvZGUgMy4yIG1heCBjaGFyIG5hbWUgbGVuZ3RoIAorICAgICAgICAgICBlcnJsbigiZ2V0TWF4Q2hhck5hbWVMZW5ndGgoKT0iICsgbGVuZ3RoICsgIiBpcyB0b28gc2hvcnQiKTsgCisgICAgICAgIH0KKyAgICAgICAgLy8gIyMjIFRPRE8gc2FtZSB0ZXN0cyBmb3IgbWF4IElTTyBjb21tZW50IGxlbmd0aCBhcyBmb3IgbWF4IG5hbWUgbGVuZ3RoCisKKyAgICAJaW50IGNbXSA9IHsweDAwNjEsIDB4MDAwMjg0LCAweDAwMzQwMSwgMHgwMDdmZWQsIDB4MDBhYzAwLCAweDAwZDdhMywgCisgICAgCQkgICAgICAgMHgwMGQ4MDAsIDB4MDBkYzAwLCAweGZmMDgsIDB4MDBmZmU1LCAweDAwZmZmZiwgCisgICAgCQkgICAgICAgMHgwMDIzNDU2fTsKKyAgICAJU3RyaW5nIG5hbWVbXSA9IHsiTEFUSU4gU01BTEwgTEVUVEVSIEEiLCAKKyAgICAgICAgICAgICAgICAgICAgICJMQVRJTiBTTUFMTCBMRVRURVIgRE9UTEVTUyBKIFdJVEggU1RST0tFIEFORCBIT09LIiwgCisgICAgICAgICAgICAgICAgICAgICAiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTM0MDEiLCAKKyAgICAgICAgICAgICAgICAgICAgICJDSksgVU5JRklFRCBJREVPR1JBUEgtN0ZFRCIsICJIQU5HVUwgU1lMTEFCTEUgR0EiLCAKKyAgICAgICAgICAgICAgICAgICAgICJIQU5HVUwgU1lMTEFCTEUgSElIIiwgIiIsICIiLAorICAgICAgICAgICAgICAgICAgICAgIkZVTExXSURUSCBMRUZUIFBBUkVOVEhFU0lTIiwKKyAgICAgICAgICAgICAgICAgICAgICJGVUxMV0lEVEggWUVOIFNJR04iLCAiIiwgIkNKSyBVTklGSUVEIElERU9HUkFQSC0yMzQ1NiJ9OworICAgIAlTdHJpbmcgb2xkbmFtZVtdID0geyIiLCAiTEFUSU4gU01BTEwgTEVUVEVSIERPVExFU1MgSiBCQVIgSE9PSyIsICIiLCAKKyAgICAJCSAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiIsICIiLCAiIiwgIiIsICJGVUxMV0lEVEggT1BFTklORyBQQVJFTlRIRVNJUyIsICIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICIiLCAiIn07CisgICAgCVN0cmluZyBleHRlbmRlZG5hbWVbXSA9IHsiTEFUSU4gU01BTEwgTEVUVEVSIEEiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEogV0lUSCBTVFJPS0UgQU5EIEhPT0siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTM0MDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTdGRUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFOR1VMIFNZTExBQkxFIEdBIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTkdVTCBTWUxMQUJMRSBISUgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxlYWQgc3Vycm9nYXRlLUQ4MDA+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx0cmFpbCBzdXJyb2dhdGUtREMwMD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRlVMTFdJRFRIIExFRlQgUEFSRU5USEVTSVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRlVMTFdJRFRIIFlFTiBTSUdOIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxub25jaGFyYWN0ZXItRkZGRj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTIzNDU2In07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIAlpbnQgc2l6ZSA9IGMubGVuZ3RoOworICAgIAlTdHJpbmcgc3RyOworICAgIAlpbnQgdWM7CisgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgCisgICAgCXsKKyAgICAgIAkJLy8gbW9kZXJuIFVuaWNvZGUgY2hhcmFjdGVyIG5hbWUKKyAgICAgIAkJc3RyID0gVUNoYXJhY3Rlci5nZXROYW1lKGNbaV0pOworICAgICAgCQlpZiAoKHN0ciA9PSBudWxsICYmIG5hbWVbaV0ubGVuZ3RoKCkgPiAwKSB8fCAKKyAgICAgICAgICAJCShzdHIgIT0gbnVsbCAmJiAhc3RyLmVxdWFscyhuYW1lW2ldKSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGNbaV0pICsgIiBleHBlY3RlZCBuYW1lICIgKworICAgICAgICAgICAgICAJCQluYW1lW2ldKTsKKyAgICAgICAgCQlicmVhazsKKyAgICAgIAkJfQorICAgICAKKyAgICAgIAkJLy8gMS4wIFVuaWNvZGUgY2hhcmFjdGVyIG5hbWUKKyAgICAgIAkJc3RyID0gVUNoYXJhY3Rlci5nZXROYW1lMV8wKGNbaV0pOworICAgICAgCQlpZiAoKHN0ciA9PSBudWxsICYmIG9sZG5hbWVbaV0ubGVuZ3RoKCkgPiAwKSB8fCAKKyAgICAgICAgICAJCShzdHIgIT0gbnVsbCAmJiAhc3RyLmVxdWFscyhvbGRuYW1lW2ldKSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGNbaV0pICsgIiBleHBlY3RlZCAxLjAgbmFtZSAiICsKKyAgICAgICAgICAgICAgCQkJb2xkbmFtZVtpXSk7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAgIAorICAgICAgCQkvLyBleHRlbmRlZCBjaGFyYWN0ZXIgbmFtZQorICAgICAgCQlzdHIgPSBVQ2hhcmFjdGVyLmdldEV4dGVuZGVkTmFtZShjW2ldKTsKKyAgICAgIAkJaWYgKHN0ciA9PSBudWxsIHx8ICFzdHIuZXF1YWxzKGV4dGVuZGVkbmFtZVtpXSkpCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCBcXHUiICsgaGV4KGNbaV0pICsgIiBleHBlY3RlZCBleHRlbmRlZCBuYW1lICIgKworICAgICAgICAgICAgICAJCQlleHRlbmRlZG5hbWVbaV0pOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgICAKKyAgICAgIAkJLy8gcmV0cmlldmluZyB1bmljb2RlIGNoYXJhY3RlciBmcm9tIG1vZGVybiBuYW1lCisgICAgICAJCXVjID0gVUNoYXJhY3Rlci5nZXRDaGFyRnJvbU5hbWUobmFtZVtpXSk7CisgICAgICAJCWlmICh1YyAhPSBjW2ldICYmIG5hbWVbaV0ubGVuZ3RoKCkgIT0gMCkKKyAgICAgIAkJeworICAgICAgICAJCWVycmxuKCJGQUlMICIgKyBuYW1lW2ldICsgIiBleHBlY3RlZCBjaGFyYWN0ZXIgXFx1IiArIAorICAgICAgICAJCSAgICAgIGhleChjW2ldKSk7CisgICAgICAgIAkJYnJlYWs7CisgICAgICAJCX0KKyAgICAgIAorICAgICAgCQkvL3JldHJpZXZpbmcgdW5pY29kZSBjaGFyYWN0ZXIgZnJvbSAxLjAgbmFtZQorICAgICAgCQl1YyA9IFVDaGFyYWN0ZXIuZ2V0Q2hhckZyb21OYW1lMV8wKG9sZG5hbWVbaV0pOworICAgICAgCQlpZiAodWMgIT0gY1tpXSAmJiBvbGRuYW1lW2ldLmxlbmd0aCgpICE9IDApCisgICAgICAJCXsKKyAgICAgICAgCQllcnJsbigiRkFJTCAiICsgb2xkbmFtZVtpXSArICIgZXhwZWN0ZWQgMS4wIGNoYXJhY3RlciBcXHUiICsgCisgICAgICAgIAkJICAgICAgaGV4KGNbaV0pKTsKKyAgICAgICAgCQlicmVhazsKKyAgICAgIAkJfQorICAgICAgCisgICAgICAJCS8vcmV0cmlldmluZyB1bmljb2RlIGNoYXJhY3RlciBmcm9tIDEuMCBuYW1lCisgICAgICAJCXVjID0gVUNoYXJhY3Rlci5nZXRDaGFyRnJvbUV4dGVuZGVkTmFtZShleHRlbmRlZG5hbWVbaV0pOworICAgICAgCQlpZiAodWMgIT0gY1tpXSAmJiBpICE9IDAgJiYgKGkgPT0gMSB8fCBpID09IDYpKQorICAgICAgCQl7CisgICAgICAgIAkJZXJybG4oIkZBSUwgIiArIGV4dGVuZGVkbmFtZVtpXSArIAorICAgICAgICAJCSAgICAgICIgZXhwZWN0ZWQgZXh0ZW5kZWQgY2hhcmFjdGVyIFxcdSIgKyBoZXgoY1tpXSkpOworICAgICAgICAJCWJyZWFrOworICAgICAgCQl9CisgICAgCX0KKyAgICAKKyAgICAJLy8gdGVzdCBnZXROYW1lIHdvcmtzIHdpdGggbWl4ZWQtY2FzZSBuYW1lcyAobmV3IGluIDIuMCkKKyAgICAJaWYgKDB4NjEgIT0gVUNoYXJhY3Rlci5nZXRDaGFyRnJvbU5hbWUoIkxBVGluIHNtQUxsIGxldFRFUiBBIikpIHsgCisgICAgICAgIAllcnJsbigiRkFJTDogJ0xBVGluIHNtQUxsIGxldFRFUiBBJyBzaG91bGQgcmVzdWx0IGluIGNoYXJhY3RlciAiCisgICAgICAgIAkgICAgICArICJVKzAwNjEiKTsgCisgICAgCX0gCisJICAgIAorICAgICAgICBpZiAoZ2V0SW5jbHVzaW9uKCkgPj0gNSkgeworICAgICAgICAgICAgLy8gZXh0cmEgdGVzdGluZyBkaWZmZXJlbnQgZnJvbSBpY3UKKyAgICAgICAgCWZvciAoaW50IGkgPSBVQ2hhcmFjdGVyLk1JTl9WQUxVRTsgaSA8IFVDaGFyYWN0ZXIuTUFYX1ZBTFVFOyBpICsrKQorICAgICAgICAJeworICAgICAgICAgIAkJc3RyID0gVUNoYXJhY3Rlci5nZXROYW1lKGkpOworICAgICAgICAgIAkJaWYgKHN0ciAhPSBudWxsICYmIFVDaGFyYWN0ZXIuZ2V0Q2hhckZyb21OYW1lKHN0cikgIT0gaSkKKyAgICAgICAgICAJCXsJCisgICAgICAgICAgICAJCWVycmxuKCJGQUlMIFxcdSIgKyBoZXgoaSkgKyAiICIgKyBzdHIgICsgCisgICAgICAgICAgICAgICAgICAJCQkJCQkiIHJldHJpZXZhbCBvZiBuYW1lIGFuZCB2aWNlIHZlcnNhIiApOworICAgICAgICAgICAgCQlicmVhazsKKyAgICAgICAgICAJCX0KKyAgICAgICAgCX0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGVzdCBnZXRDaGFyTmFtZUNoYXJhY3RlcnMKKyAgICAgICAgaWYgKGdldEluY2x1c2lvbigpID49IDEwKSB7CisgICAgICAgICAgICBib29sZWFuIG1hcFtdID0gbmV3IGJvb2xlYW5bMjU2XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVW5pY29kZVNldCBzZXQgPSBuZXcgVW5pY29kZVNldCgxLCAwKTsgLy8gZW1wdHkgc2V0CisgICAgICAgICAgICBVbmljb2RlU2V0IGR1bWIgPSBuZXcgVW5pY29kZVNldCgxLCAwKTsgLy8gZW1wdHkgc2V0CisgICAgCisgICAgICAgICAgICAvLyB1cHJ2X2dldENoYXJOYW1lQ2hhcmFjdGVycygpIHdpbGwgbGlrZWx5IHJldHVybiBtb3JlIGxvd2VyY2FzZQorICAgICAgICAgICAgLy8gbGV0dGVycyB0aGFuIGFjdHVhbCBjaGFyYWN0ZXIgbmFtZXMgY29udGFpbiBiZWNhdXNlCisgICAgICAgICAgICAvLyBpdCBpbmNsdWRlcyBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gbG93ZXJjYXNlZCBuYW1lcyBvZgorICAgICAgICAgICAgLy8gZ2VuZXJhbCBjYXRlZ29yaWVzLCBmb3IgdGhlIGZ1bGwgcG9zc2libGUgc2V0IG9mIGV4dGVuZGVkIG5hbWVzLgorICAgICAgICAgICAgVUNoYXJhY3Rlck5hbWUuZ2V0SW5zdGFuY2UoKS5nZXRDaGFyTmFtZUNoYXJhY3RlcnMoc2V0KTsKKyAgICAKKyAgICAgICAgICAgIC8vIGJ1aWxkIHNldCB0aGUgZHVtYiAoYnV0IHN1cmUtZmlyZSkgd2F5CisgICAgICAgICAgICBBcnJheXMuZmlsbChtYXAsIGZhbHNlKTsKKyAgICAKKyAgICAgICAgICAgIGludCBtYXhMZW5ndGggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgY3AgPSAwOyBjcCA8IDB4MTEwMDAwOyArKyBjcCkgeworICAgICAgICAgICAgICAgIFN0cmluZyBuID0gVUNoYXJhY3Rlci5nZXRFeHRlbmRlZE5hbWUoY3ApOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBuLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGlmIChsZW4gPiBtYXhMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoID0gbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKysgaSkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIGNoID0gbi5jaGFyQXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWFwW2NoICYgMHhmZl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bWIuYWRkKGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcFtjaCAmIDB4ZmZdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGxlbmd0aCA9IFVDaGFyYWN0ZXJOYW1lLmdldEluc3RhbmNlKCkuZ2V0TWF4Q2hhck5hbWVMZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChsZW5ndGggIT0gbWF4TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImdldE1heENoYXJOYW1lTGVuZ3RoKCk9IiArIGxlbmd0aCAKKyAgICAgICAgICAgICAgICAgICAgICArICIgZGlmZmVycyBmcm9tIHRoZSBtYXhpbXVtIGxlbmd0aCAiICsgbWF4TGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgKyAiIG9mIGFsbCBleHRlbmRlZCBuYW1lcyIpOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgLy8gY29tcGFyZSB0aGUgc2V0cy4gIFdoZXJlIGlzIG15IHVzZXRfZXF1YWxzPyEhCisgICAgICAgICAgICBib29sZWFuIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyArKyBpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhpKSAhPSBkdW1iLmNvbnRhaW5zKGkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgweDYxIDw9IGkgJiYgaSA8PSAweDdhIC8vIGEtegorICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2V0LmNvbnRhaW5zKGkpICYmICFkdW1iLmNvbnRhaW5zKGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbG93ZXJjYXNlIGEteiB0aGF0IGFyZSBpbiBzZXQgYnV0IG5vdCBpbiBkdW1iCisgICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgU3RyaW5nIHBhdHRlcm4xID0gc2V0LnRvUGF0dGVybih0cnVlKTsKKyAgICAgICAgICAgIFN0cmluZyBwYXR0ZXJuMiA9IGR1bWIudG9QYXR0ZXJuKHRydWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdldENoYXJOYW1lQ2hhcmFjdGVycygpIHJldHVybmVkICIgKyBwYXR0ZXJuMQorICAgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCAiICsgcGF0dGVybjIgCisgICAgICAgICAgICAgICAgICAgICAgKyAiICh0b28gbWFueSBsb3dlcmNhc2UgYS16IGFyZSBvaykiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9rOiBnZXRDaGFyTmFtZUNoYXJhY3RlcnMoKSByZXR1cm5lZCAiICsgcGF0dGVybjEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgIAl9CisgIAorICAJLyoqCisgICAJKiBUZXN0aW5nIG5hbWUgaXRlcmF0aW9uCisgICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3ROYW1lSXRlcmF0aW9uKCkKKyAgCXsKKyAgCQlWYWx1ZUl0ZXJhdG9yIGl0ZXJhdG9yID0gVUNoYXJhY3Rlci5nZXRFeHRlbmRlZE5hbWVJdGVyYXRvcigpOworICAJCVZhbHVlSXRlcmF0b3IuRWxlbWVudCBlbGVtZW50ID0gbmV3IFZhbHVlSXRlcmF0b3IuRWxlbWVudCgpOworICAgCSAJVmFsdWVJdGVyYXRvci5FbGVtZW50IG9sZCAgICAgPSBuZXcgVmFsdWVJdGVyYXRvci5FbGVtZW50KCk7CisgICAgCS8vIHRlc3Rpbmcgc3VicmFuZ2UKKyAgICAJaXRlcmF0b3Iuc2V0UmFuZ2UoLTEwLCAtNSk7CisgICAgCWlmIChpdGVyYXRvci5uZXh0KGVsZW1lbnQpKSB7CisgICAgCQllcnJsbigiRmFpbCwgZXhwZWN0ZWQgaXRlcmF0b3IgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcmFuZ2UgaXMgc2V0IG91dHNpZGUgdGhlIG1lYW5pbmdmdWwgcmFuZ2UiKTsKKyAgICAJfQorICAgIAlpdGVyYXRvci5zZXRSYW5nZSgweDExMDAwMCwgMHgxMTExMTEpOworICAgIAlpZiAoaXRlcmF0b3IubmV4dChlbGVtZW50KSkgeworICAgIAkJZXJybG4oIkZhaWwsIGV4cGVjdGVkIGl0ZXJhdG9yIHRvIHJldHVybiBmYWxzZSB3aGVuIHJhbmdlIGlzIHNldCBvdXRzaWRlIHRoZSBtZWFuaW5nZnVsIHJhbmdlIik7CisgICAgCX0KKyAgICAJdHJ5IHsKKyAgICAJCWl0ZXJhdG9yLnNldFJhbmdlKDUwLCAxMCk7CisgICAgCQllcnJsbigiRmFpbCwgZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gZW5jb3VudGVyZWQgaW52YWxpZCByYW5nZSIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIAl9CisgICAgCQkKKyAgICAJaXRlcmF0b3Iuc2V0UmFuZ2UoLTEwLCAxMCk7CisgICAgCWlmICghaXRlcmF0b3IubmV4dChlbGVtZW50KSB8fCBlbGVtZW50LmludGVnZXIgIT0gMCkgeworICAgIAkJZXJybG4oIkZhaWwsIGV4cGVjdGVkIGl0ZXJhdG9yIHRvIHJldHVybiAwIHdoZW4gcmFuZ2Ugc3RhcnQgbGltaXQgaXMgc2V0IG91dHNpZGUgdGhlIG1lYW5pbmdmdWwgcmFuZ2UiKTsKKyAgICAJfQorICAgIAkKKyAgICAJaXRlcmF0b3Iuc2V0UmFuZ2UoMHgxMEZGRkUsIDB4MjAwMDAwKTsKKyAgICAJaW50IGxhc3QgPSAwOworICAgIAl3aGlsZSAoaXRlcmF0b3IubmV4dChlbGVtZW50KSkgeworICAgIAkJbGFzdCA9IGVsZW1lbnQuaW50ZWdlcjsKKyAgICAJfQorICAgIAlpZiAobGFzdCAhPSAweDEwRkZGRikgeworICAgIAkJZXJybG4oIkZhaWwsIGV4cGVjdGVkIGl0ZXJhdG9yIHRvIHJldHVybiAweDEwRkZGRiB3aGVuIHJhbmdlIGVuZCBsaW1pdCBpcyBzZXQgb3V0c2lkZSB0aGUgbWVhbmluZ2Z1bCByYW5nZSIpOworICAgIAl9CisgICAgCQorICAgIAlpdGVyYXRvciA9IFVDaGFyYWN0ZXIuZ2V0TmFtZUl0ZXJhdG9yKCk7CQorIAkJaXRlcmF0b3Iuc2V0UmFuZ2UoMHhGLCAweDQ1KTsKKyAJCXdoaWxlIChpdGVyYXRvci5uZXh0KGVsZW1lbnQpKSB7CisgICAgCQlpZiAoZWxlbWVudC5pbnRlZ2VyIDw9IG9sZC5pbnRlZ2VyKSB7CisgICAgICAgICAJCWVycmxuKCJGQUlMIG5leHQgcmV0dXJuZWQgYSBsZXNzIGNvZGVwb2ludCBcXHUiICsgCisgICAgICAgICAJICAgICAgCUludGVnZXIudG9IZXhTdHJpbmcoZWxlbWVudC5pbnRlZ2VyKSArICIgdGhhbiBcXHUiICsgCisgICAgICAgICAJICAgICAgCUludGVnZXIudG9IZXhTdHJpbmcob2xkLmludGVnZXIpKTsKKyAgICAgICAgIAkJYnJlYWs7CisgICAgICAgIAl9CisgICAgICAgIAlpZiAoIVVDaGFyYWN0ZXIuZ2V0TmFtZShlbGVtZW50LmludGVnZXIpLmVxdWFscyhlbGVtZW50LnZhbHVlKSkgCisgICAgICAgIAl7CisgICAgICAgICAJCWVycmxuKCJGQUlMIG5leHQgY29kZXBvaW50IFxcdSIgKyAKKyAgICAgICAgIAkgICAgICAJSW50ZWdlci50b0hleFN0cmluZyhlbGVtZW50LmludGVnZXIpICsgCisgICAgICAgICAJICAgICAgCSIgZG9lcyBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgbmFtZSAiICsgCisgICAgICAgICAJICAgICAgCVVDaGFyYWN0ZXIuZ2V0TmFtZShlbGVtZW50LmludGVnZXIpICsgCisgICAgICAgICAJICAgICAgCSIgaW5zdGVhZCBoYXZlIHRoZSBuYW1lICIgKyAoU3RyaW5nKWVsZW1lbnQudmFsdWUpOworICAgICAgICAgCQlicmVhazsKKyAgICAgICAgCX0KKyAgICAgICAgCW9sZC5pbnRlZ2VyID0gZWxlbWVudC5pbnRlZ2VyOyAKKyAgICAJfQorICAgIAorICAgIAlpdGVyYXRvci5yZXNldCgpOworICAgIAlpdGVyYXRvci5uZXh0KGVsZW1lbnQpOworICAgIAlpZiAoZWxlbWVudC5pbnRlZ2VyICE9IDB4MjApIHsKKyAgICAJCWVycmxuKCJGQUlMIHJlc2V0IGluIGl0ZXJhdG9yIik7CisgICAgCX0KKyAKKyAgICAJaXRlcmF0b3Iuc2V0UmFuZ2UoMCwgMHgxMTAwMDApOworICAgIAlvbGQuaW50ZWdlciA9IDA7IAorICAgIAl3aGlsZSAoaXRlcmF0b3IubmV4dChlbGVtZW50KSkgeworICAgIAkJaWYgKGVsZW1lbnQuaW50ZWdlciAhPSAwICYmIGVsZW1lbnQuaW50ZWdlciA8PSBvbGQuaW50ZWdlcikgeworICAgICAgICAgCQllcnJsbigiRkFJTCBuZXh0IHJldHVybmVkIGEgbGVzcyBjb2RlcG9pbnQgXFx1IiArIAorICAgICAgICAgCSAgICAgIAlJbnRlZ2VyLnRvSGV4U3RyaW5nKGVsZW1lbnQuaW50ZWdlcikgKyAiIHRoYW4gXFx1IiArIAorICAgICAgICAgCSAgICAgIAlJbnRlZ2VyLnRvSGV4U3RyaW5nKG9sZC5pbnRlZ2VyKSk7CisgICAgICAgICAJCWJyZWFrOworICAgICAgICAJfQorICAgICAgICAJaWYgKCFVQ2hhcmFjdGVyLmdldE5hbWUoZWxlbWVudC5pbnRlZ2VyKS5lcXVhbHMoZWxlbWVudC52YWx1ZSkpIAorICAgICAgICAJeworICAgICAgICAgCQllcnJsbigiRkFJTCBuZXh0IGNvZGVwb2ludCBcXHUiICsgCisgICAgICAgICAJICAgICAgCQlJbnRlZ2VyLnRvSGV4U3RyaW5nKGVsZW1lbnQuaW50ZWdlcikgKyAKKyAgICAgICAgIAkgICAgICAJCSIgZG9lcyBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgbmFtZSAiICsgCisgICAgICAgICAJICAgICAgCQlVQ2hhcmFjdGVyLmdldE5hbWUoZWxlbWVudC5pbnRlZ2VyKSArIAorICAgICAgICAgCSAgICAgIAkJIiBpbnN0ZWFkIGhhdmUgdGhlIG5hbWUgIiArIChTdHJpbmcpZWxlbWVudC52YWx1ZSk7CisgICAgICAgICAJCWJyZWFrOworICAgICAgICAJfQorICAgICAgICAJZm9yIChpbnQgaSA9IG9sZC5pbnRlZ2VyICsgMTsgaSA8IGVsZW1lbnQuaW50ZWdlcjsgaSArKykgeworICAgICAgICAJCWlmIChVQ2hhcmFjdGVyLmdldE5hbWUoaSkgIT0gbnVsbCkgeworICAgICAgICAgCQkJZXJybG4oIkZBSUwgYmV0d2VlbiBjb2RlcG9pbnRzIGFyZSBub3QgbnVsbCBcXHUiICsgCisgICAgICAgICAJICAgICAgCQkJSW50ZWdlci50b0hleFN0cmluZyhvbGQuaW50ZWdlcikgKyAiIGFuZCAiICsgCisgICAgICAgICAJICAgICAgCQkJSW50ZWdlci50b0hleFN0cmluZyhlbGVtZW50LmludGVnZXIpICsgIiBoYXMgIiArIAorICAgICAgICAgCSAgICAgIAkJCUludGVnZXIudG9IZXhTdHJpbmcoaSkgKyAiIHdpdGggYSBuYW1lICIgKyAKKyAgICAgICAgIAkgICAgICAJCQlVQ2hhcmFjdGVyLmdldE5hbWUoaSkpOworICAgICAgICAgCQkJYnJlYWs7CisgICAgICAgIAkJfQorICAgICAgICAJfQorICAgICAgICAJb2xkLmludGVnZXIgPSBlbGVtZW50LmludGVnZXI7IAorICAgIAl9CisgICAgCisgICAgCWl0ZXJhdG9yID0gVUNoYXJhY3Rlci5nZXRFeHRlbmRlZE5hbWVJdGVyYXRvcigpOworICAgIAlvbGQuaW50ZWdlciA9IDA7CisgICAgCXdoaWxlIChpdGVyYXRvci5uZXh0KGVsZW1lbnQpKSB7CisgICAgCQlpZiAoZWxlbWVudC5pbnRlZ2VyICE9IDAgJiYgZWxlbWVudC5pbnRlZ2VyICE9IG9sZC5pbnRlZ2VyKSB7CisgICAgICAgICAJCWVycmxuKCJGQUlMIG5leHQgcmV0dXJuZWQgYSBjb2RlcG9pbnQgXFx1IiArIAorICAgICAgICAgCSAgICAgIAkJSW50ZWdlci50b0hleFN0cmluZyhlbGVtZW50LmludGVnZXIpICsgCisgICAgICAgICAJICAgICAgCQkiIGRpZmZlcmVudCBmcm9tIFxcdSIgKyAKKyAgICAgICAgIAkgICAgICAJCUludGVnZXIudG9IZXhTdHJpbmcob2xkLmludGVnZXIpKTsKKyAgICAgICAgIAkJYnJlYWs7CisgICAgICAgIAl9CisgICAgICAgIAlpZiAoIVVDaGFyYWN0ZXIuZ2V0RXh0ZW5kZWROYW1lKGVsZW1lbnQuaW50ZWdlcikuZXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmFsdWUpKSB7CisgICAgICAgICAJCWVycmxuKCJGQUlMIG5leHQgY29kZXBvaW50IFxcdSIgKyAKKyAgICAgICAgIAkgICAgICAJSW50ZWdlci50b0hleFN0cmluZyhlbGVtZW50LmludGVnZXIpICsgCisgICAgICAgICAJICAgICAgCSIgbmFtZSBzaG91bGQgYmUgIgorICAgICAgICAgCSAgICAgIAkrIFVDaGFyYWN0ZXIuZ2V0RXh0ZW5kZWROYW1lKGVsZW1lbnQuaW50ZWdlcikgKyAKKyAgICAgICAgIAkgICAgICAJIiBpbnN0ZWFkIG9mICIgKyAoU3RyaW5nKWVsZW1lbnQudmFsdWUpOworICAgICAgICAgCQlicmVhazsKKyAgICAgICAgCX0KKyAgICAgICAgCW9sZC5pbnRlZ2VyKys7IAorICAgIAl9CisJCWl0ZXJhdG9yID0gVUNoYXJhY3Rlci5nZXROYW1lMV8wSXRlcmF0b3IoKTsKKyAJICAgCW9sZC5pbnRlZ2VyID0gMDsKKyAgICAJd2hpbGUgKGl0ZXJhdG9yLm5leHQoZWxlbWVudCkpIHsKKyAgICAJCWxvZ2xuKEludGVnZXIudG9IZXhTdHJpbmcoZWxlbWVudC5pbnRlZ2VyKSArICIgIiArCisJICAgICAgCQkJCQkJCQkJCQkoU3RyaW5nKWVsZW1lbnQudmFsdWUpOworICAgIAkJaWYgKGVsZW1lbnQuaW50ZWdlciAhPSAwICYmIGVsZW1lbnQuaW50ZWdlciA8PSBvbGQuaW50ZWdlcikgeworICAgICAgICAgCQllcnJsbigiRkFJTCBuZXh0IHJldHVybmVkIGEgbGVzcyBjb2RlcG9pbnQgXFx1IiArIAorICAgICAgICAgCSAgICAgIAlJbnRlZ2VyLnRvSGV4U3RyaW5nKGVsZW1lbnQuaW50ZWdlcikgKyAiIHRoYW4gXFx1IiArIAorICAgICAgICAgCSAgICAgIAlJbnRlZ2VyLnRvSGV4U3RyaW5nKG9sZC5pbnRlZ2VyKSk7CisgICAgICAgICAJCWJyZWFrOworICAgICAgICAJfQorICAgICAgICAJaWYgKCFlbGVtZW50LnZhbHVlLmVxdWFscyhVQ2hhcmFjdGVyLmdldE5hbWUxXzAoCisgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW50ZWdlcikpKSB7CisgICAgICAgICAJCWVycmxuKCJGQUlMIG5leHQgY29kZXBvaW50IFxcdSIgKyAKKyAgICAgICAgIAkgICAgICAJCUludGVnZXIudG9IZXhTdHJpbmcoZWxlbWVudC5pbnRlZ2VyKSArIAorICAgICAgICAgCSAgICAgIAkJIiBuYW1lIGNhbm5vdCBiZSBudWxsIik7CisgICAgICAgICAJCWJyZWFrOworICAgICAgICAJfQorICAgICAgICAJZm9yIChpbnQgaSA9IG9sZC5pbnRlZ2VyICsgMTsgaSA8IGVsZW1lbnQuaW50ZWdlcjsgaSArKykgeworICAgICAgICAJCWlmIChVQ2hhcmFjdGVyLmdldE5hbWUxXzAoaSkgIT0gbnVsbCkgeworICAgICAgICAgCQkJZXJybG4oIkZBSUwgYmV0d2VlbiBjb2RlcG9pbnRzIGFyZSBub3QgbnVsbCBcXHUiICsgCisgICAgICAgICAJICAgICAgCQlJbnRlZ2VyLnRvSGV4U3RyaW5nKG9sZC5pbnRlZ2VyKSArICIgYW5kICIgKyAKKyAgICAgICAgIAkgICAgICAJCUludGVnZXIudG9IZXhTdHJpbmcoZWxlbWVudC5pbnRlZ2VyKSArICIgaGFzICIgKyAKKyAgICAgICAgIAkgICAgICAJCUludGVnZXIudG9IZXhTdHJpbmcoaSkgKyAiIHdpdGggYSBuYW1lICIgKyAKKyAgICAgICAgIAkgICAgICAJCVVDaGFyYWN0ZXIuZ2V0TmFtZTFfMChpKSk7CisgICAgICAgICAJCQlicmVhazsKKyAgICAgICAgCQl9CisgICAgICAgIAl9CisgICAgICAgIAlvbGQuaW50ZWdlciA9IGVsZW1lbnQuaW50ZWdlcjsgCisgICAgCX0KKyAgCX0KKyAgCisgIAkvKioKKyAgCSogVGVzdGluZyB0aGUgZm9yIGlsbGVnYWwgY2hhcmFjdGVycworICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RJc0xlZ2FsKCkgCisgIAl7CisgICAgCWludCBpbGxlZ2FsW10gPSB7MHhGRkZFLCAweDAwRkZGRiwgMHgwMDVGRkZFLCAweDAwNUZGRkYsIDB4MDAxMEZGRkUsCisgICAgCQkgICAgICAgICAgICAgMHgwMDEwRkZGRiwgMHgxMTAwMDAsIDB4MDBGREQwLCAweDAwRkRERiwgMHgwMEZERTAsCisgICAgCQkgICAgICAgICAgICAgMHgwMEZERUYsIDB4RDgwMCwgMHhEQzAwLCAtMX07CisgICAgCWludCBsZWdhbFtdID0gezB4NjEsIDB4MDBGRkZELCAweDAwMTAwMDAsIDB4MDA1RkZGRCwgMHgwMDYwMDAwLCAKKyAgICAJCSAgICAgICAgICAgMHgwMDEwRkZGRCwgMHhGRENGLCAweDAwRkRGMH07CisgICAgCWZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCBpbGxlZ2FsLmxlbmd0aDsgY291bnQgKyspIHsKKyAgICAgICAgCWlmIChVQ2hhcmFjdGVyLmlzTGVnYWwoaWxsZWdhbFtjb3VudF0pKSB7CisgICAgICAgICAgICAJZXJybG4oIkZBSUwgXFx1IiArIGhleChpbGxlZ2FsW2NvdW50XSkgKyAKKyAgICAgICAgICAgICAgICAgICAgCSIgaXMgbm90IGEgbGVnYWwgY2hhcmFjdGVyIik7CisgICAgICAgIAl9CisgICAgCX0KKyAgICAKKyAgICAJZm9yIChpbnQgY291bnQgPSAwOyBjb3VudCA8IGxlZ2FsLmxlbmd0aDsgY291bnQgKyspIHsKKyAgICAgICAgCWlmICghVUNoYXJhY3Rlci5pc0xlZ2FsKGxlZ2FsW2NvdW50XSkpIHsKKyAgICAgICAgICAgIAllcnJsbigiRkFJTCBcXHUiICsgaGV4KGxlZ2FsW2NvdW50XSkgKyAKKyAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaXMgYSBsZWdhbCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgCX0KKyAgICAJfQorICAgIAkKKyAgICAJU3RyaW5nIGlsbGVnYWxTdHIgPSAiVGhpcyBpcyBhbiBpbGxlZ2FsIHN0cmluZyAiOworICAgIAlTdHJpbmcgbGVnYWxTdHIgPSAiVGhpcyBpcyBhIGxlZ2FsIHN0cmluZyAiOworICAgIAkKKyAgICAJZm9yIChpbnQgY291bnQgPSAwOyBjb3VudCA8IGlsbGVnYWwubGVuZ3RoOyBjb3VudCArKykgeworICAgIAkJU3RyaW5nQnVmZmVyIHN0ciA9IG5ldyBTdHJpbmdCdWZmZXIoaWxsZWdhbFN0cik7CisgICAgCQlpZiAoaWxsZWdhbFtjb3VudF0gPCAweDEwMDAwKSB7CisgICAgCQkJc3RyLmFwcGVuZCgoY2hhcilpbGxlZ2FsW2NvdW50XSk7CisgICAgCQl9CisgICAgCQllbHNlIHsKKyAgICAJCQljaGFyIGxlYWQgPSBVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKGlsbGVnYWxbY291bnRdKTsKKyAgICAJCQljaGFyIHRyYWlsID0gVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoaWxsZWdhbFtjb3VudF0pOworICAgIAkJCXN0ci5hcHBlbmQobGVhZCk7CisgICAgCQkJc3RyLmFwcGVuZCh0cmFpbCk7CisgICAgCQl9CisgICAgICAgIAlpZiAoVUNoYXJhY3Rlci5pc0xlZ2FsKHN0ci50b1N0cmluZygpKSkgeworICAgICAgICAgICAgCWVycmxuKCJGQUlMICIgKyBoZXgoc3RyLnRvU3RyaW5nKCkpICsgCisgICAgICAgICAgICAJICAgICAgIiBpcyBub3QgYSBsZWdhbCBzdHJpbmciKTsKKyAgICAgICAgCX0KKyAgICAJfQorICAgIAorICAgIAlmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgbGVnYWwubGVuZ3RoOyBjb3VudCArKykgeworICAgIAkJU3RyaW5nQnVmZmVyIHN0ciA9IG5ldyBTdHJpbmdCdWZmZXIobGVnYWxTdHIpOworICAgIAkJaWYgKGxlZ2FsW2NvdW50XSA8IDB4MTAwMDApIHsKKyAgICAJCQlzdHIuYXBwZW5kKChjaGFyKWxlZ2FsW2NvdW50XSk7CisgICAgCQl9CisgICAgCQllbHNlIHsKKyAgICAJCQljaGFyIGxlYWQgPSBVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKGxlZ2FsW2NvdW50XSk7CisgICAgCQkJY2hhciB0cmFpbCA9IFVURjE2LmdldFRyYWlsU3Vycm9nYXRlKGxlZ2FsW2NvdW50XSk7CisgICAgCQkJc3RyLmFwcGVuZChsZWFkKTsKKyAgICAJCQlzdHIuYXBwZW5kKHRyYWlsKTsKKyAgICAJCX0KKyAgICAgICAgCWlmICghVUNoYXJhY3Rlci5pc0xlZ2FsKHN0ci50b1N0cmluZygpKSkgeworICAgICAgICAgICAgCWVycmxuKCJGQUlMICIgKyBoZXgoc3RyLnRvU3RyaW5nKCkpICsgIiBpcyBhIGxlZ2FsIHN0cmluZyIpOworICAgICAgICAJfQorICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkgKiBUZXN0IGdldENvZGVQb2ludAorICAJICovCisgIAlwdWJsaWMgdm9pZCBUZXN0Q29kZVBvaW50KCkKKyAgCXsKKyAgCQlpbnQgY2ggPSAweDEwMDAwOworICAJCWZvciAoY2hhciBpID0gMHhEODAwOyBpIDwgMHhEQzAwOyBpICsrKSB7CisgIAkJCWZvciAoY2hhciBqID0gMHhEQzAwOyBqIDw9IDB4REZGRjsgaiArKykgeworICAJCQkJaWYgKFVDaGFyYWN0ZXIuZ2V0Q29kZVBvaW50KGksIGopICE9IGNoKSB7CisgIAkJCQkJZXJybG4oIkVycm9yIGdldHRpbmcgY29kZXBvaW50IGZvciBzdXJyb2dhdGUgIiArCisgIAkJCQkJICAgICAgImNoYXJhY3RlcnMgXFx1IgorICAJCQkJCSAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhpKSArICIgXFx1IiArIAorICAJCQkJCSAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoaikpOwkgICAgICAKKyAgCQkJCX0KKyAgCQkJCWNoICsrOworICAJCQl9CisgIAkJfQorICAJCXRyeSAKKyAgCQl7CisgIAkJCVVDaGFyYWN0ZXIuZ2V0Q29kZVBvaW50KChjaGFyKTB4RDdmZiwgKGNoYXIpMHhEQzAwKTsKKyAgCQkJZXJybG4oIkludmFsaWQgc3Vycm9nYXRlIGNoYXJhY3RlcnMgc2hvdWxkIG5vdCBmb3JtIGEgIiArCisgIAkJCSAgICAgICJzdXBwbGVtZW50YXJ5Iik7CisgIAkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAJCX0KKyAgCQlmb3IgKGNoYXIgaSA9IDA7IGkgPCAweEZGRkY7IGkrKykgeworICAJCQlpZiAoaSA9PSAweEZGRkUgfHwgCisgIAkJCSAgICAoaSA+PSAweEQ4MDAgJiYgaSA8PSAweERGRkYpIHx8IAorICAJCQkgICAgKGkgPj0gMHhGREQwICYmIGkgPD0gMHhGREVGKSkgeworICAJCQkgICAgLy8gbm90IGEgY2hhcmFjdGVyCisgIAkJCQl0cnkgeworICAJCQkJCVVDaGFyYWN0ZXIuZ2V0Q29kZVBvaW50KGkpOworICAJCQkJCWVycmxuKCJOb3QgYSBjaGFyYWN0ZXIgaXMgbm90IGEgdmFsaWQgY29kZXBvaW50Iik7CisgIAkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAJCQkJfQorICAJCQl9CisgIAkJCWVsc2UgeworICAJCQkJaWYgKFVDaGFyYWN0ZXIuZ2V0Q29kZVBvaW50KGkpICE9IGkpIHsKKyAgCQkJCQllcnJsbigiQSB2YWxpZCBjb2RlcG9pbnQgc2hvdWxkIHJldHVybiBpdHNlbGYiKTsKKyAgCQkJCX0KKyAgCQkJfQorICAJCX0KKyAgCX0KKyAgCQorICAJLyoqCisgIAkqIFRoaXMgbWV0aG9kIGlzIGFsaXR0bGUgZGlmZmVyZW50IGZyb20gdGhlIHR5cGUgdGVzdCBpbiBpY3U0Yy4KKyAgCSogQnV0IGNvbWJpbmVkIHdpdGggdGVzdFVuaWNvZGVEYXRhLCB0aGV5IGJhc2ljYWxseSBkbyB0aGUgc2FtZSB0aGluZy4KKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0SXRlcmF0aW9uKCkgCisgIAl7CisgICAgICAJaW50IGxpbWl0ICAgICA9IDA7CisgICAgICAJaW50IHByZXZ0eXBlICA9IC0xOworICAgICAgICBpbnQgdGVzdFtdW109e3sweDQxLCBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVVBQRVJDQVNFX0xFVFRFUn0sCisgICAgICAgICAgICAgICAgICAgICAgICB7MHgzMDgsIFVDaGFyYWN0ZXJDYXRlZ29yeS5OT05fU1BBQ0lOR19NQVJLfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsweGZmZmUsIFVDaGFyYWN0ZXJDYXRlZ29yeS5HRU5FUkFMX09USEVSX1RZUEVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsweGUwMDQxLCBVQ2hhcmFjdGVyQ2F0ZWdvcnkuRk9STUFUfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsweGVmZmZmLCBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVU5BU1NJR05FRH19OworCisgICAgICAgIC8vIGRlZmF1bHQgQmlkaSBjbGFzc2VzIGZvciB1bmFzc2lnbmVkIGNvZGUgcG9pbnRzIAorICAgICAgICBpbnQgZGVmYXVsdEJpZGlbXVtdPXt7IDB4MDU5MCwgVUNoYXJhY3RlckRpcmVjdGlvbi5MRUZUX1RPX1JJR0hUIH0sCisgICAgICAgICAgICB7IDB4MDYwMCwgVUNoYXJhY3RlckRpcmVjdGlvbi5SSUdIVF9UT19MRUZUIH0sCisgICAgICAgICAgICB7IDB4MDdDMCwgVUNoYXJhY3RlckRpcmVjdGlvbi5SSUdIVF9UT19MRUZUX0FSQUJJQyB9LAorICAgICAgICAgICAgeyAweEZCMUQsIFVDaGFyYWN0ZXJEaXJlY3Rpb24uTEVGVF9UT19SSUdIVCB9LAorICAgICAgICAgICAgeyAweEZCNTAsIFVDaGFyYWN0ZXJEaXJlY3Rpb24uUklHSFRfVE9fTEVGVCB9LAorICAgICAgICAgICAgeyAweEZFMDAsIFVDaGFyYWN0ZXJEaXJlY3Rpb24uUklHSFRfVE9fTEVGVF9BUkFCSUMgfSwKKyAgICAgICAgICAgIHsgMHhGRTcwLCBVQ2hhcmFjdGVyRGlyZWN0aW9uLkxFRlRfVE9fUklHSFQgfSwKKyAgICAgICAgICAgIHsgMHhGRjAwLCBVQ2hhcmFjdGVyRGlyZWN0aW9uLlJJR0hUX1RPX0xFRlRfQVJBQklDIH0sCisgICAgICAgICAgICB7IDB4MTEwMDAwLCBVQ2hhcmFjdGVyRGlyZWN0aW9uLkxFRlRfVE9fUklHSFQgfX07CisgICAgCisgICAgICAJUmFuZ2VWYWx1ZUl0ZXJhdG9yIGl0ZXJhdG9yID0gVUNoYXJhY3Rlci5nZXRUeXBlSXRlcmF0b3IoKTsKKyAgICAgIAlSYW5nZVZhbHVlSXRlcmF0b3IuRWxlbWVudCByZXN1bHQgPSBuZXcgUmFuZ2VWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQoKTsKKyAgICAgIAl3aGlsZSAoaXRlcmF0b3IubmV4dChyZXN1bHQpKSB7CisgICAgICAgICAgCWlmIChyZXN1bHQuc3RhcnQgIT0gbGltaXQpIHsKKyAgICAgICAgICAgICAgCWVycmxuKCJVQ2hhcmFjdGVySXRlcmF0aW9uIGZhaWxlZDogUmFuZ2VzIG5vdCBjb250aW51b3VzICIgKyAKKyAgICAgICAgICAgICAgICAgICAgCSIweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHJlc3VsdC5zdGFydCkpOworICAgICAgICAgIAl9CisgICAgICAgICAgCisgICAgICAgICAgCWxpbWl0ID0gcmVzdWx0LmxpbWl0OworICAgICAgICAgIAlpZiAocmVzdWx0LnZhbHVlID09IHByZXZ0eXBlKSB7CisgICAgICAgICAgICAgIAllcnJsbigiVHlwZSBvZiB0aGUgbmV4dCBzZXQgb2YgZW51bWVyYXRpb24gc2hvdWxkIGJlIGRpZmZlcmVudCIpOworICAgICAgICAgIAl9CisgICAgICAgICAgCXByZXZ0eXBlID0gcmVzdWx0LnZhbHVlOworICAgICAgICAgIAorCQkgIAlmb3IgKGludCBpID0gcmVzdWx0LnN0YXJ0OyBpIDwgbGltaXQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgCWludCB0ZW1wdHlwZSA9IFVDaGFyYWN0ZXIuZ2V0VHlwZShpKTsKKyAgICAgICAgICAgICAgCWlmICh0ZW1wdHlwZSAhPSByZXN1bHQudmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgIAllcnJsbigiVUNoYXJhY3Rlckl0ZXJhdGlvbiBmYWlsZWQ6IENvZGVwb2ludCBcXHUiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAJSW50ZWdlci50b0hleFN0cmluZyhpKSArICIgc2hvdWxkIGJlIG9mIHR5cGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAJdGVtcHR5cGUgKyAiIG5vdCAiICsgcmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAJfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3QubGVuZ3RoOyArKyBpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydCA8PSB0ZXN0W2ldWzBdICYmIHRlc3RbaV1bMF0gPCByZXN1bHQubGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSAhPSB0ZXN0W2ldWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiZXJyb3I6IGdldFR5cGVzKCkgaGFzIHJhbmdlIFsiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHJlc3VsdC5zdGFydCkgKyAiLCAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHJlc3VsdC5saW1pdCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJdIHdpdGggdHlwZSAiICsgcmVzdWx0LnZhbHVlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluc3RlYWQgb2YgWyIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcodGVzdFtpXVswXSkgKyAiLCAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHRlc3RbaV1bMV0pKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAvLyBMaW5lQnJlYWsudHh0IHNwZWNpZmllczoKKyAgICAgICAgICAgIC8vICAgIyAgLSBBc3NpZ25lZCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBsaXN0ZWQgZXhwbGljaXRseSBhcmUgZ2l2ZW4gdGhlIHZhbHVlCisgICAgICAgICAgICAvLyAgICMgICAgIkFMIi4KKyAgICAgICAgICAgIC8vICAgIyAgLSBVbmFzc2lnbmVkIGNoYXJhY3RlcnMgYXJlIGdpdmVuIHRoZSB2YWx1ZSAiWFgiLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFBVQSBjaGFyYWN0ZXJzIGFyZSBsaXN0ZWQgZXhwbGljaXRseSB3aXRoICJYWCIuCisgICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCBubyBhc3NpZ25lZCBjaGFyYWN0ZXIgaGFzICJYWCIuCisgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlICE9IFVDaGFyYWN0ZXJDYXRlZ29yeS5VTkFTU0lHTkVEIAorICAgICAgICAgICAgICAgICYmIHJlc3VsdC52YWx1ZSAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuUFJJVkFURV9VU0UpIHsKKyAgICAgICAgICAgICAgICBpbnQgYyA9IHJlc3VsdC5zdGFydDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYyA8IHJlc3VsdC5saW1pdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5VmFsdWUoYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUHJvcGVydHkuTElORV9CUkVBSykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJlcnJvciBVUHJvcGVydHkuTElORV9CUkVBSyhhc3NpZ25lZCBcXHUiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleChjLCA0KSArICIpPVhYIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKysgYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFZlcmlmeSBkZWZhdWx0IEJpZGkgY2xhc3Nlcy4KKyAgICAgICAgICAgICAqIFNlZSB0YWJsZSAzLTcgIkJpZGlyZWN0aW9uYWwgQ2hhcmFjdGVyIFR5cGVzIiBpbiBVQVggIzkuCisgICAgICAgICAgICAgKiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHI5LworICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VTkFTU0lHTkVEIAorICAgICAgICAgICAgICAgIHx8IHJlc3VsdC52YWx1ZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuUFJJVkFURV9VU0UpIHsKKyAgICAgICAgICAgICAgICBpbnQgYyA9IHJlc3VsdC5zdGFydDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmF1bHRCaWRpLmxlbmd0aCAmJiBjIDwgcmVzdWx0LmxpbWl0OyAKKyAgICAgICAgICAgICAgICAgICAgICsrIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPCBkZWZhdWx0QmlkaVtpXVswXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMgPCByZXN1bHQubGltaXQgJiYgYyA8IGRlZmF1bHRCaWRpW2ldWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuZ2V0RGlyZWN0aW9uKGMpICE9IGRlZmF1bHRCaWRpW2ldWzFdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5VmFsdWUoYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVByb3BlcnR5LkJJRElfQ0xBU1MpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBkZWZhdWx0QmlkaVtpXVsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiZXJyb3I6IGdldERpcmVjdGlvbih1bmFzc2lnbmVkL1BVQSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhjKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiKSBzaG91bGQgYmUgIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkZWZhdWx0QmlkaVtpXVsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrIGM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAJfQorICAgICAgCisgICAgICAJaXRlcmF0b3IucmVzZXQoKTsKKyAgICAgIAlpZiAoaXRlcmF0b3IubmV4dChyZXN1bHQpID09IGZhbHNlIHx8IHJlc3VsdC5zdGFydCAhPSAwKSB7CisgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0ICIgKyByZXN1bHQuc3RhcnQpOworICAgICAgICAgIAllcnJsbigiVUNoYXJhY3Rlckl0ZXJhdGlvbiByZXNldCgpIGZhaWxlZCIpOworICAgICAgCX0KKyAgCX0KKyAgCisgIAkvKioKKyAgCSAqIFRlc3RpbmcgZ2V0QWdlCisgICAJICovCisgIAlwdWJsaWMgdm9pZCBUZXN0R2V0QWdlKCkgCisgIAl7CisgIAkJaW50IGFnZXNbXSA9IHsweDQxLCAgICAxLCAxLCAwLCAwLAorCQkJCQkgIDB4ZmZmZiwgIDEsIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgyMGFiLCAgMiwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDJmZmZlLCAyLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MjBhYywgIDIsIDEsIDAsIDAsCisgICAgICAgIAkJCSAgMHhmYjFkLCAgMywgMCwgMCwgMCwKKyAgICAgICAgCQkJICAweDNmNCwgICAzLCAxLCAwLCAwLAorICAgICAgICAJCQkgIDB4MTAzMDAsIDMsIDEsIDAsIDAsCisgICAgICAgIAkJCSAgMHgyMjAsICAgMywgMiwgMCwgMCwKKyAgICAgICAgCQkJICAweGZmNjAsICAzLCAyLCAwLCAwfTsKKyAgCQlmb3IgKGludCBpID0gMDsgaSA8IGFnZXMubGVuZ3RoOyBpICs9IDUpIHsKKyAgCQkJVmVyc2lvbkluZm8gYWdlID0gVUNoYXJhY3Rlci5nZXRBZ2UoYWdlc1tpXSk7CisgICAgICAgIAlpZiAoYWdlICE9IFZlcnNpb25JbmZvLmdldEluc3RhbmNlKGFnZXNbaSArIDFdLCBhZ2VzW2kgKyAyXSwKKyAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlc1tpICsgM10sIGFnZXNbaSArIDRdKSkgeworICAgICAgICAgICAgCWVycmxuKCJlcnJvcjogZ2V0QWdlKFxcdSIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGFnZXNbaV0pICsKKyAgICAgICAgICAgIAkgICAgICAiKSA9PSAiICsgYWdlLnRvU3RyaW5nKCkgKyAiIGluc3RlYWQgb2YgIiArIAorCQkJCQkgIGFnZXNbaSArIDFdICsgIi4iICsgYWdlc1tpICsgMl0gKyAiLiIgKyBhZ2VzW2kgKyAzXSArIAorCQkJCQkgICIuIiArIGFnZXNbaSArIDRdKTsKKyAgICAgICAgCX0KKyAgICAgICAgfQorCX0KKyAgCisgIAkvKioKKyAgCSAqIFRlc3QgYmluYXJ5IG5vbiBjb3JlIHByb3BlcnRpZXMKKyAgCSAqLworICAJcHVibGljIHZvaWQgVGVzdEFkZGl0aW9uYWxQcm9wZXJ0aWVzKCkgCisgIAl7CisgICAgCS8vIHRlc3QgZGF0YSBmb3IgaGFzQmluYXJ5UHJvcGVydHkoKQorICAgIAlpbnQgcHJvcHNbXVtdID0geyAvLyBjb2RlIHBvaW50LCBwcm9wZXJ0eQorCSAgICAgICAgeyAweDA2MjcsIFVQcm9wZXJ0eS5BTFBIQUJFVElDIH0sCisJICAgICAgICB7IDB4MTAzNGEsIFVQcm9wZXJ0eS5BTFBIQUJFVElDIH0sCisJICAgICAgICB7IDB4MjAyOCwgVVByb3BlcnR5LkFMUEhBQkVUSUMgfSwKKwkKKwkgICAgICAgIHsgMHgwMDY2LCBVUHJvcGVydHkuQVNDSUlfSEVYX0RJR0lUIH0sCisJICAgICAgICB7IDB4MDA2NywgVVByb3BlcnR5LkFTQ0lJX0hFWF9ESUdJVCB9LAorCQorCSAgICAgICAgeyAweDIwMmMsIFVQcm9wZXJ0eS5CSURJX0NPTlRST0wgfSwKKwkgICAgICAgIHsgMHgyMDJmLCBVUHJvcGVydHkuQklESV9DT05UUk9MIH0sCisJCisJICAgICAgICB7IDB4MDAzYywgVVByb3BlcnR5LkJJRElfTUlSUk9SRUQgfSwKKwkgICAgICAgIHsgMHgwMDNkLCBVUHJvcGVydHkuQklESV9NSVJST1JFRCB9LAorCQorCSAgICAgICAgeyAweDA1OGEsIFVQcm9wZXJ0eS5EQVNIIH0sCisJICAgICAgICB7IDB4MDA3ZSwgVVByb3BlcnR5LkRBU0ggfSwKKwkKKwkgICAgICAgIHsgMHgwYzRkLCBVUHJvcGVydHkuRElBQ1JJVElDIH0sCisJICAgICAgICB7IDB4MzAwMCwgVVByb3BlcnR5LkRJQUNSSVRJQyB9LAorCQorCSAgICAgICAgeyAweDBlNDYsIFVQcm9wZXJ0eS5FWFRFTkRFUiB9LAorCSAgICAgICAgeyAweDAwMjAsIFVQcm9wZXJ0eS5FWFRFTkRFUiB9LAorCQorCSAgICAgICAgeyAweGZiMWQsIFVQcm9wZXJ0eS5GVUxMX0NPTVBPU0lUSU9OX0VYQ0xVU0lPTiB9LAorCSAgICAgICAgeyAweDFkMTVmLCBVUHJvcGVydHkuRlVMTF9DT01QT1NJVElPTl9FWENMVVNJT04gfSwKKwkgICAgICAgIHsgMHhmYjFlLCBVUHJvcGVydHkuRlVMTF9DT01QT1NJVElPTl9FWENMVVNJT04gfSwKKwkKKwkgICAgICAgIHsgMHgwMDQ0LCBVUHJvcGVydHkuSEVYX0RJR0lUIH0sCisJICAgICAgICB7IDB4ZmY0NiwgVVByb3BlcnR5LkhFWF9ESUdJVCB9LAorCSAgICAgICAgeyAweDAwNDcsIFVQcm9wZXJ0eS5IRVhfRElHSVQgfSwKKwkKKwkgICAgICAgIHsgMHgzMGZiLCBVUHJvcGVydHkuSFlQSEVOIH0sCisJICAgICAgICB7IDB4ZmU1OCwgVVByb3BlcnR5LkhZUEhFTiB9LAorCQorCSAgICAgICAgeyAweDIxNzIsIFVQcm9wZXJ0eS5JRF9DT05USU5VRSB9LAorCSAgICAgICAgeyAweDAzMDcsIFVQcm9wZXJ0eS5JRF9DT05USU5VRSB9LAorCSAgICAgICAgeyAweDAwNWMsIFVQcm9wZXJ0eS5JRF9DT05USU5VRSB9LAorCQorCSAgICAgICAgeyAweDIxNzIsIFVQcm9wZXJ0eS5JRF9TVEFSVCB9LAorCSAgICAgICAgeyAweDAwN2EsIFVQcm9wZXJ0eS5JRF9TVEFSVCB9LAorCSAgICAgICAgeyAweDAwMzksIFVQcm9wZXJ0eS5JRF9TVEFSVCB9LAorCQorCSAgICAgICAgeyAweDRkYjUsIFVQcm9wZXJ0eS5JREVPR1JBUEhJQyB9LAorCSAgICAgICAgeyAweDJmOTk5LCBVUHJvcGVydHkuSURFT0dSQVBISUMgfSwKKwkgICAgICAgIHsgMHgyZjk5LCBVUHJvcGVydHkuSURFT0dSQVBISUMgfSwKKwkKKwkgICAgICAgIHsgMHgyMDBjLCBVUHJvcGVydHkuSk9JTl9DT05UUk9MIH0sCisJICAgICAgICB7IDB4MjAyOSwgVVByb3BlcnR5LkpPSU5fQ09OVFJPTCB9LAorCQorCSAgICAgICAgeyAweDFkN2JjLCBVUHJvcGVydHkuTE9XRVJDQVNFIH0sCisJICAgICAgICB7IDB4MDM0NSwgVVByb3BlcnR5LkxPV0VSQ0FTRSB9LAorCSAgICAgICAgeyAweDAwMzAsIFVQcm9wZXJ0eS5MT1dFUkNBU0UgfSwKKwkKKwkgICAgICAgIHsgMHgxZDdhOSwgVVByb3BlcnR5Lk1BVEggfSwKKwkgICAgICAgIHsgMHgyMTM1LCBVUHJvcGVydHkuTUFUSCB9LAorCSAgICAgICAgeyAweDAwNjIsIFVQcm9wZXJ0eS5NQVRIIH0sCisJCisJICAgICAgICB7IDB4ZmRlMSwgVVByb3BlcnR5Lk5PTkNIQVJBQ1RFUl9DT0RFX1BPSU5UIH0sCisJICAgICAgICB7IDB4MTBmZmZmLCBVUHJvcGVydHkuTk9OQ0hBUkFDVEVSX0NPREVfUE9JTlQgfSwKKwkgICAgICAgIHsgMHgxMGZmZmQsIFVQcm9wZXJ0eS5OT05DSEFSQUNURVJfQ09ERV9QT0lOVCB9LAorCQorCSAgICAgICAgeyAweDAwMjIsIFVQcm9wZXJ0eS5RVU9UQVRJT05fTUFSSyB9LAorCSAgICAgICAgeyAweGZmNjIsIFVQcm9wZXJ0eS5RVU9UQVRJT05fTUFSSyB9LAorCSAgICAgICAgeyAweGQ4NDAsIFVQcm9wZXJ0eS5RVU9UQVRJT05fTUFSSyB9LAorCQorCSAgICAgICAgeyAweDA2MWYsIFVQcm9wZXJ0eS5URVJNSU5BTF9QVU5DVFVBVElPTiB9LAorCSAgICAgICAgeyAweGUwMDNmLCBVUHJvcGVydHkuVEVSTUlOQUxfUFVOQ1RVQVRJT04gfSwKKwkKKwkgICAgICAgIHsgMHgxZDQ0YSwgVVByb3BlcnR5LlVQUEVSQ0FTRSB9LAorCSAgICAgICAgeyAweDIxNjIsIFVQcm9wZXJ0eS5VUFBFUkNBU0UgfSwKKwkgICAgICAgIHsgMHgwMzQ1LCBVUHJvcGVydHkuVVBQRVJDQVNFIH0sCisJCisJICAgICAgICB7IDB4MDAyMCwgVVByb3BlcnR5LldISVRFX1NQQUNFIH0sCisJICAgICAgICB7IDB4MjAyZiwgVVByb3BlcnR5LldISVRFX1NQQUNFIH0sCisJICAgICAgICB7IDB4MzAwMSwgVVByb3BlcnR5LldISVRFX1NQQUNFIH0sCisJCisJICAgICAgICB7IDB4MDcxMSwgVVByb3BlcnR5LlhJRF9DT05USU5VRSB9LAorCSAgICAgICAgeyAweDFkMWFhLCBVUHJvcGVydHkuWElEX0NPTlRJTlVFIH0sCisJICAgICAgICB7IDB4MDA3YywgVVByb3BlcnR5LlhJRF9DT05USU5VRSB9LAorCQorCSAgICAgICAgeyAweDE2ZWUsIFVQcm9wZXJ0eS5YSURfU1RBUlQgfSwKKwkgICAgICAgIHsgMHgyMzQ1NiwgVVByb3BlcnR5LlhJRF9TVEFSVCB9LAorCSAgICAgICAgeyAweDFkMWFhLCBVUHJvcGVydHkuWElEX1NUQVJUIH0sCisJCisJICAgICAgICAvLyBWZXJzaW9uIGJyZWFrOgorCSAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBzdGFydGluZyB3aXRoIHRoZQorCSAgICAgICAgLy8gVVByb3BlcnR5LlVuaWNvZGUgdmVyc2lvbiBpbmRpY2F0ZWQgaW4gdGhlIHNlY29uZCBmaWVsZC4KKwkgICAgICAgICAKKwkgICAgICAgIHsgLTEsIDB4MzIsIDAgfSwKKwkKKwkgICAgICAgIHsgMHgxODBjLCBVUHJvcGVydHkuREVGQVVMVF9JR05PUkFCTEVfQ09ERV9QT0lOVCB9LAorCSAgICAgICAgeyAweGZlMDIsIFVQcm9wZXJ0eS5ERUZBVUxUX0lHTk9SQUJMRV9DT0RFX1BPSU5UIH0sCisJICAgICAgICB7IDB4MTgwMSwgVVByb3BlcnR5LkRFRkFVTFRfSUdOT1JBQkxFX0NPREVfUE9JTlQgfSwKKwkKKwkgICAgICAgIHsgMHgwMzQxLCBVUHJvcGVydHkuREVQUkVDQVRFRCB9LAorCSAgICAgICAgeyAweGUwMDQxLCBVUHJvcGVydHkuREVQUkVDQVRFRCB9LAorCQorCSAgICAgICAgeyAweDAwYTAsIFVQcm9wZXJ0eS5HUkFQSEVNRV9CQVNFIH0sCisJICAgICAgICB7IDB4MGE0ZCwgVVByb3BlcnR5LkdSQVBIRU1FX0JBU0UgfSwKKwkgICAgICAgIHsgMHhmZjlmLCBVUHJvcGVydHkuR1JBUEhFTUVfQkFTRSB9LAorCQorCSAgICAgICAgeyAweDAzMDAsIFVQcm9wZXJ0eS5HUkFQSEVNRV9FWFRFTkQgfSwKKwkgICAgICAgIHsgMHhmZjlmLCBVUHJvcGVydHkuR1JBUEhFTUVfRVhURU5EIH0sCisJICAgICAgICB7IDB4MGE0ZCwgVVByb3BlcnR5LkdSQVBIRU1FX0VYVEVORCB9LAorCQorCSAgICAgICAgeyAweDBhNGQsIFVQcm9wZXJ0eS5HUkFQSEVNRV9MSU5LIH0sCisJICAgICAgICB7IDB4ZmY5ZiwgVVByb3BlcnR5LkdSQVBIRU1FX0xJTksgfSwKKwkKKwkgICAgICAgIHsgMHgyZmY3LCBVUHJvcGVydHkuSURTX0JJTkFSWV9PUEVSQVRPUiB9LAorCSAgICAgICAgeyAweDJmZjMsIFVQcm9wZXJ0eS5JRFNfQklOQVJZX09QRVJBVE9SIH0sCisJCisJICAgICAgICB7IDB4MmZmMywgVVByb3BlcnR5LklEU19UUklOQVJZX09QRVJBVE9SIH0sCisJICAgICAgICB7IDB4MmYwMywgVVByb3BlcnR5LklEU19UUklOQVJZX09QRVJBVE9SIH0sCisJCisJICAgICAgICB7IDB4MGVjMSwgVVByb3BlcnR5LkxPR0lDQUxfT1JERVJfRVhDRVBUSU9OIH0sCisJICAgICAgICB7IDB4ZGNiYSwgVVByb3BlcnR5LkxPR0lDQUxfT1JERVJfRVhDRVBUSU9OIH0sCisJCisJICAgICAgICB7IDB4MmU5YiwgVVByb3BlcnR5LlJBRElDQUwgfSwKKwkgICAgICAgIHsgMHg0ZTAwLCBVUHJvcGVydHkuUkFESUNBTCB9LAorCQorCSAgICAgICAgeyAweDAxMmYsIFVQcm9wZXJ0eS5TT0ZUX0RPVFRFRCB9LAorCSAgICAgICAgeyAweDAwNDksIFVQcm9wZXJ0eS5TT0ZUX0RPVFRFRCB9LAorCQorCSAgICAgICAgeyAweGZhMTEsIFVQcm9wZXJ0eS5VTklGSUVEX0lERU9HUkFQSCB9LAorCSAgICAgICAgeyAweGZhMTIsIFVQcm9wZXJ0eS5VTklGSUVEX0lERU9HUkFQSCB9LAorICAgICAgICAgICAgCisgICAgICAgICAgICB7IDB4MDJBRiwgVVByb3BlcnR5LkJMT0NLfSwKKyAgICAgICAgICAgIHsgMHgwQzRFLCBVUHJvcGVydHkuQkxPQ0t9LAorICAgICAgICAgICAgeyAweDE1NUEsIFVQcm9wZXJ0eS5CTE9DS30sCisgICAgICAgICAgICB7IDB4MTcxNywgVVByb3BlcnR5LkJMT0NLfSwKKyAgICAgICAgICAgIHsgMHgxQUZGLCBVUHJvcGVydHkuQkxPQ0t9LAorICAgICAgICAgICAgeyAweDMwNDAsIFVQcm9wZXJ0eS5CTE9DS30sCisgICAgICAgICAgICB7IDB4MUQwRkYsIFVQcm9wZXJ0eS5CTE9DS30sCisgICAgICAgICAgICB7IDB4MTBEMEZGLCBVUHJvcGVydHkuQkxPQ0t9LAorICAgICAgICAgICAgeyAweEVGRkZGLCBVUHJvcGVydHkuQkxPQ0t9LAorICAgIAorICAgICAgICAgICAgLy8gVVByb3BlcnR5LkNBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MgdGVzdGVkIGZvciBhc3NpZ25lZCAKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgaW4gVGVzdFVuaWNvZGVEYXRhKCkKKyAgICAgICAgICAgIHsgMHhkN2Q3LCBVUHJvcGVydHkuQ0FOT05JQ0FMX0NPTUJJTklOR19DTEFTU30sCisgICAgCisgICAgICAgICAgICB7IDB4MDBBMCwgVVByb3BlcnR5LkRFQ09NUE9TSVRJT05fVFlQRX0sCisgICAgICAgICAgICB7IDB4MDBBOCwgVVByb3BlcnR5LkRFQ09NUE9TSVRJT05fVFlQRX0sCisgICAgICAgICAgICB7IDB4MDBiZiwgVVByb3BlcnR5LkRFQ09NUE9TSVRJT05fVFlQRX0sCisgICAgICAgICAgICB7IDB4MDBjMCwgVVByb3BlcnR5LkRFQ09NUE9TSVRJT05fVFlQRX0sCisgICAgICAgICAgICB7IDB4MUU5QiwgVVByb3BlcnR5LkRFQ09NUE9TSVRJT05fVFlQRX0sCisgICAgICAgICAgICB7IDB4QkNERSwgVVByb3BlcnR5LkRFQ09NUE9TSVRJT05fVFlQRX0sCisgICAgICAgICAgICB7IDB4RkI1RCwgVVByb3BlcnR5LkRFQ09NUE9TSVRJT05fVFlQRX0sCisgICAgICAgICAgICB7IDB4MUQ3MzYsIFVQcm9wZXJ0eS5ERUNPTVBPU0lUSU9OX1RZUEV9LAorICAgICAgICAgICAgeyAweGUwMDMzLCBVUHJvcGVydHkuREVDT01QT1NJVElPTl9UWVBFfSwKKyAgICAKKyAgICAgICAgICAgIHsgMHgwMDA5LCBVUHJvcGVydHkuRUFTVF9BU0lBTl9XSURUSH0sCisgICAgICAgICAgICB7IDB4MDAyMCwgVVByb3BlcnR5LkVBU1RfQVNJQU5fV0lEVEh9LAorICAgICAgICAgICAgeyAweDAwQjEsIFVQcm9wZXJ0eS5FQVNUX0FTSUFOX1dJRFRIfSwKKyAgICAgICAgICAgIHsgMHgyMEE5LCBVUHJvcGVydHkuRUFTVF9BU0lBTl9XSURUSH0sCisgICAgICAgICAgICB7IDB4MkZGQiwgVVByb3BlcnR5LkVBU1RfQVNJQU5fV0lEVEh9LAorICAgICAgICAgICAgeyAweDMwMDAsIFVQcm9wZXJ0eS5FQVNUX0FTSUFOX1dJRFRIfSwKKyAgICAgICAgICAgIHsgMHgzNWJiLCBVUHJvcGVydHkuRUFTVF9BU0lBTl9XSURUSH0sCisgICAgICAgICAgICB7IDB4NThiZCwgVVByb3BlcnR5LkVBU1RfQVNJQU5fV0lEVEh9LAorICAgICAgICAgICAgeyAweEQ3QTMsIFVQcm9wZXJ0eS5FQVNUX0FTSUFOX1dJRFRIfSwKKyAgICAgICAgICAgIHsgMHhFRUVFLCBVUHJvcGVydHkuRUFTVF9BU0lBTl9XSURUSH0sCisgICAgICAgICAgICB7IDB4MUQxOTgsIFVQcm9wZXJ0eS5FQVNUX0FTSUFOX1dJRFRIfSwKKyAgICAgICAgICAgIHsgMHgyMDAwMCwgVVByb3BlcnR5LkVBU1RfQVNJQU5fV0lEVEh9LAorICAgICAgICAgICAgeyAweDJGOEM3LCBVUHJvcGVydHkuRUFTVF9BU0lBTl9XSURUSH0sCisgICAgICAgICAgICB7IDB4M2E1YmQsIFVQcm9wZXJ0eS5FQVNUX0FTSUFOX1dJRFRIfSwKKyAgICAgICAgICAgIHsgMHhGRUVFRSwgVVByb3BlcnR5LkVBU1RfQVNJQU5fV0lEVEh9LAorICAgICAgICAgICAgeyAweDEwRUVFRSwgVVByb3BlcnR5LkVBU1RfQVNJQU5fV0lEVEh9LAorICAgIAorICAgICAgICAgICAgLy8gVVByb3BlcnR5LkdFTkVSQUxfQ0FURUdPUlkgdGVzdGVkIGZvciBhc3NpZ25lZCBjaGFyYWN0ZXJzIGluIAorICAgICAgICAgICAgLy8gVGVzdFVuaWNvZGVEYXRhKCkKKyAgICAgICAgICAgIHsgMHhkN2Q3LCBVUHJvcGVydHkuR0VORVJBTF9DQVRFR09SWX0sCisgICAgCisgICAgICAgICAgICB7IDB4MDQ0NCwgVVByb3BlcnR5LkpPSU5JTkdfR1JPVVB9LAorICAgICAgICAgICAgeyAweDA2MzksIFVQcm9wZXJ0eS5KT0lOSU5HX0dST1VQfSwKKyAgICAgICAgICAgIHsgMHgwNzJBLCBVUHJvcGVydHkuSk9JTklOR19HUk9VUH0sCisgICAgICAgICAgICB7IDB4MDY0NywgVVByb3BlcnR5LkpPSU5JTkdfR1JPVVB9LAorICAgICAgICAgICAgeyAweDA2QzEsIFVQcm9wZXJ0eS5KT0lOSU5HX0dST1VQfSwKKyAgICAgICAgICAgIHsgMHgwNkMzLCBVUHJvcGVydHkuSk9JTklOR19HUk9VUH0sCisgICAgCisgICAgICAgICAgICB7IDB4MjAwQywgVVByb3BlcnR5LkpPSU5JTkdfVFlQRX0sCisgICAgICAgICAgICB7IDB4MjAwRCwgVVByb3BlcnR5LkpPSU5JTkdfVFlQRX0sCisgICAgICAgICAgICB7IDB4MDYzOSwgVVByb3BlcnR5LkpPSU5JTkdfVFlQRX0sCisgICAgICAgICAgICB7IDB4MDY0MCwgVVByb3BlcnR5LkpPSU5JTkdfVFlQRX0sCisgICAgICAgICAgICB7IDB4MDZDMywgVVByb3BlcnR5LkpPSU5JTkdfVFlQRX0sCisgICAgICAgICAgICB7IDB4MDMwMCwgVVByb3BlcnR5LkpPSU5JTkdfVFlQRX0sCisgICAgICAgICAgICB7IDB4MDcwRiwgVVByb3BlcnR5LkpPSU5JTkdfVFlQRX0sCisgICAgICAgICAgICB7IDB4ZTAwMzMsIFVQcm9wZXJ0eS5KT0lOSU5HX1RZUEV9LAorICAgIAorICAgICAgICAgICAgLy8gVGVzdFVuaWNvZGVEYXRhKCkgdmVyaWZpZXMgdGhhdCBubyBhc3NpZ25lZCBjaGFyYWN0ZXIgaGFzICJYWCIgCisgICAgICAgICAgICAvLyAodW5rbm93bikKKyAgICAgICAgICAgIHsgMHhlN2U3LCBVUHJvcGVydHkuTElORV9CUkVBS30sCisgICAgICAgICAgICB7IDB4MTBmZmZkLCBVUHJvcGVydHkuTElORV9CUkVBS30sCisgICAgICAgICAgICB7IDB4MDAyOCwgVVByb3BlcnR5LkxJTkVfQlJFQUt9LAorICAgICAgICAgICAgeyAweDIzMkEsIFVQcm9wZXJ0eS5MSU5FX0JSRUFLfSwKKyAgICAgICAgICAgIHsgMHgzNDAxLCBVUHJvcGVydHkuTElORV9CUkVBS30sCisgICAgICAgICAgICB7IDB4NGUwMiwgVVByb3BlcnR5LkxJTkVfQlJFQUt9LAorICAgICAgICAgICAgeyAweGFjMDMsIFVQcm9wZXJ0eS5MSU5FX0JSRUFLfSwKKyAgICAgICAgICAgIHsgMHgyMDAwNCwgVVByb3BlcnR5LkxJTkVfQlJFQUt9LAorICAgICAgICAgICAgeyAweGY5MDUsIFVQcm9wZXJ0eS5MSU5FX0JSRUFLfSwKKyAgICAgICAgICAgIHsgMHhkYjdlLCBVUHJvcGVydHkuTElORV9CUkVBS30sCisgICAgICAgICAgICB7IDB4ZGJmZCwgVVByb3BlcnR5LkxJTkVfQlJFQUt9LAorICAgICAgICAgICAgeyAweGRmZmMsIFVQcm9wZXJ0eS5MSU5FX0JSRUFLfSwKKyAgICAgICAgICAgIHsgMHgyNzYyLCBVUHJvcGVydHkuTElORV9CUkVBS30sCisgICAgICAgICAgICB7IDB4MDAyRiwgVVByb3BlcnR5LkxJTkVfQlJFQUt9LAorICAgICAgICAgICAgeyAweDFENDlDLCBVUHJvcGVydHkuTElORV9CUkVBS30sCisgICAgICAgICAgICB7IDB4MTczMSwgVVByb3BlcnR5LkxJTkVfQlJFQUt9LAorICAgIAorICAgICAgICAgICAgLy8gVUNIQVJfTlVNRVJJQ19UWVBFIHRlc3RlZCBpbiBUZXN0TnVtZXJpY1Byb3BlcnRpZXMoKQorICAgIAorICAgICAgICAgICAgLy8gVUNIQVJfU0NSSVBUIHRlc3RlZCBpbiBUZXN0VVNjcmlwdENvZGVBUEkoKQorICAgIAorICAgICAgICAgICAgLy8gdW5kZWZpbmVkIFVQcm9wZXJ0eSB2YWx1ZXMKKyAgICAgICAgICAgIHsgMHg2MSwgMHg0YTd9LAorICAgICAgICAgICAgeyAweDIzNGJjLCAweDE1ZWR9CisJICAgIH07CisJICAgIAorCSAgICBpbnQgZXhwZWN0ZWRbXSA9IHsgMSwgMSwgMCwgMSwgMCwgCisJICAgIAkgICAgICAgICAgICAgICAxLCAwLCAxLCAwLCAxLCAKKwkgICAgCSAgICAgICAgICAgICAgIDAsIDEsIDAsIDEsIDAsIAorCSAgICAJICAgICAgICAgICAgICAgMSwgMSwgMCwgMSwgMSwgCisJICAgIAkgICAgICAgICAgICAgICAwLCAxLCAwLCAxLCAxLCAKKwkgICAgCSAgICAgICAgICAgICAgIDAsIDEsIDEsIDAsIDEsIAorCSAgICAJICAgICAgICAgICAgICAgMSwgMCwgMSwgMCwgMSwgCisJICAgIAkgICAgICAgICAgICAgICAxLCAwLCAxLCAxLCAwLCAKKwkgICAgCSAgICAgICAgICAgICAgIDEsIDEsIDAsIDEsIDEsIAorCSAgICAJICAgICAgICAgICAgICAgMCwgMSwgMCwgMSwgMSwgCisJICAgIAkgICAgICAgICAgICAgICAwLCAxLCAxLCAwLCAxLCAKKwkgICAgCSAgICAgICAgICAgICAgIDEsIDAsIDEsIDEsIDAsCisJICAgIAkgICAgICAgICAgICAgICAwLCAxLCAxLCAwLCAxLCAKKwkgICAgCSAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDEsIAorCSAgICAJICAgICAgICAgICAgICAgMSwgMCwgMSwgMCwgMSwgCisJICAgIAkgICAgICAgICAgICAgICAwLCAxLCAwLCAxLCAwLCAKKwkgICAgCSAgICAgICAgICAgICAgIDEsIDAsIDEsIDAsIDEsIAorCSAgICAJICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuVW5pY29kZUJsb2NrLklQQV9FWFRFTlNJT05TX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5Vbmljb2RlQmxvY2suVEVMVUdVX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5Vbmljb2RlQmxvY2suVU5JRklFRF9DQU5BRElBTl9BQk9SSUdJTkFMX1NZTExBQklDU19JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuVW5pY29kZUJsb2NrLlRBR0FMT0dfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLlVuaWNvZGVCbG9jay5JTlZBTElEX0NPREVfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLlVuaWNvZGVCbG9jay5ISVJBR0FOQV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuVW5pY29kZUJsb2NrLkJZWkFOVElORV9NVVNJQ0FMX1NZTUJPTFNfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLlVuaWNvZGVCbG9jay5TVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuVW5pY29kZUJsb2NrLklOVkFMSURfQ09ERV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVQcm9wZXJ0eS5DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTIHRlc3RlZCBmb3IgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ25lZCBjaGFyYWN0ZXJzIGluIFRlc3RVbmljb2RlRGF0YSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5EZWNvbXBvc2l0aW9uVHlwZS5OT0JSRUFLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5EZWNvbXBvc2l0aW9uVHlwZS5DT01QQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkRlY29tcG9zaXRpb25UeXBlLk5PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkRlY29tcG9zaXRpb25UeXBlLkNBTk9OSUNBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRGVjb21wb3NpdGlvblR5cGUuQ0FOT05JQ0FMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5EZWNvbXBvc2l0aW9uVHlwZS5DQU5PTklDQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkRlY29tcG9zaXRpb25UeXBlLk1FRElBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRGVjb21wb3NpdGlvblR5cGUuRk9OVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRGVjb21wb3NpdGlvblR5cGUuTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5FYXN0QXNpYW5XaWR0aC5ORVVUUkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5FYXN0QXNpYW5XaWR0aC5OQVJST1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkVhc3RBc2lhbldpZHRoLkFNQklHVU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRWFzdEFzaWFuV2lkdGguSEFMRldJRFRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5FYXN0QXNpYW5XaWR0aC5XSURFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5FYXN0QXNpYW5XaWR0aC5GVUxMV0lEVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkVhc3RBc2lhbldpZHRoLldJREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkVhc3RBc2lhbldpZHRoLldJREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkVhc3RBc2lhbldpZHRoLldJREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkVhc3RBc2lhbldpZHRoLkFNQklHVU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRWFzdEFzaWFuV2lkdGguTkVVVFJBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRWFzdEFzaWFuV2lkdGguV0lERSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRWFzdEFzaWFuV2lkdGguV0lERSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRWFzdEFzaWFuV2lkdGguTkVVVFJBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuRWFzdEFzaWFuV2lkdGguQU1CSUdVT1VTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5FYXN0QXNpYW5XaWR0aC5BTUJJR1VPVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVQcm9wZXJ0eS5HRU5FUkFMX0NBVEVHT1JZIHRlc3RlZCBmb3IgYXNzaWduZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGluIFRlc3RVbmljb2RlRGF0YSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5Kb2luaW5nR3JvdXAuTk9fSk9JTklOR19HUk9VUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuSm9pbmluZ0dyb3VwLkFJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuSm9pbmluZ0dyb3VwLkRBTEFUSF9SSVNILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5Kb2luaW5nR3JvdXAuSEVILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5Kb2luaW5nR3JvdXAuSEVIX0dPQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkpvaW5pbmdHcm91cC5IQU1aQV9PTl9IRUhfR09BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuSm9pbmluZ1R5cGUuTk9OX0pPSU5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkpvaW5pbmdUeXBlLkpPSU5fQ0FVU0lORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuSm9pbmluZ1R5cGUuRFVBTF9KT0lOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5Kb2luaW5nVHlwZS5KT0lOX0NBVVNJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkpvaW5pbmdUeXBlLlJJR0hUX0pPSU5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkpvaW5pbmdUeXBlLlRSQU5TUEFSRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5Kb2luaW5nVHlwZS5UUkFOU1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuSm9pbmluZ1R5cGUuVFJBTlNQQVJFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3RVbmljb2RlRGF0YSgpIHZlcmlmaWVzIHRoYXQgbm8gYXNzaWduZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgaGFzICJYWCIgKHVua25vd24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkxpbmVCcmVhay5VTktOT1dOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5MaW5lQnJlYWsuVU5LTk9XTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuTGluZUJyZWFrLk9QRU5fUFVOQ1RVQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkxpbmVCcmVhay5DTE9TRV9QVU5DVFVBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuTGluZUJyZWFrLklERU9HUkFQSElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5MaW5lQnJlYWsuSURFT0dSQVBISUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkxpbmVCcmVhay5JREVPR1JBUEhJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuTGluZUJyZWFrLklERU9HUkFQSElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5MaW5lQnJlYWsuSURFT0dSQVBISUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkxpbmVCcmVhay5TVVJST0dBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkxpbmVCcmVhay5TVVJST0dBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkxpbmVCcmVhay5TVVJST0dBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkxpbmVCcmVhay5FWENMQU1BVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuTGluZUJyZWFrLkJSRUFLX1NZTUJPTFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLkxpbmVCcmVhay5BTFBIQUJFVElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5MaW5lQnJlYWsuQUxQSEFCRVRJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVUNIQVJfTlVNRVJJQ19UWVBFIHRlc3RlZCBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3ROdW1lcmljUHJvcGVydGllcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVQ0hBUl9TQ1JJUFQgdGVzdGVkIGluIFRlc3RVU2NyaXB0Q29kZUFQSSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgICAgICAgIH07CisKKwkgICAgaWYgKFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNaW5WYWx1ZShVUHJvcGVydHkuREFTSCkgIT0gMCAKKyAgICAgICAgICAgIHx8IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNaW5WYWx1ZShVUHJvcGVydHkuQklESV9DTEFTUykgIT0gMCAKKyAgICAgICAgICAgIHx8IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNaW5WYWx1ZShVUHJvcGVydHkuQkxPQ0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gVUNoYXJhY3Rlci5Vbmljb2RlQmxvY2suSU5WQUxJRF9DT0RFX0lEIAorICAgICAgICAgICAgfHwgVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eU1pblZhbHVlKFVQcm9wZXJ0eS5TQ1JJUFQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gMCAvKiBKQiMyNDEwICovIAorICAgICAgICAgICAgfHwgVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eU1pblZhbHVlKDB4MjM0NSkgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oImVycm9yOiBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWluVmFsdWUoKSB3cm9uZyIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWF4VmFsdWUoVVByb3BlcnR5LkRBU0gpICE9IDEgCisgICAgICAgICAgICB8fCBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWF4VmFsdWUoVVByb3BlcnR5LklEX0NPTlRJTlVFKSAhPSAxIAorICAgICAgICAgICAgfHwgVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKFVQcm9wZXJ0eS5CSU5BUllfTElNSVQtMSkgIT0gMSAKKyAgICAgICAgICAgIHx8IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNYXhWYWx1ZShVUHJvcGVydHkuQklESV9DTEFTUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gVUNoYXJhY3RlckRpcmVjdGlvbi5DSEFSX0RJUkVDVElPTl9DT1VOVCAtIDEgCisgICAgICAgICAgICB8fCBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWF4VmFsdWUoVVByb3BlcnR5LkJMT0NLKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFVDaGFyYWN0ZXIuVW5pY29kZUJsb2NrLkNPVU5UIC0gMSAKKyAgICAgICAgICAgIHx8IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNYXhWYWx1ZShVUHJvcGVydHkuTElORV9CUkVBSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBVQ2hhcmFjdGVyLkxpbmVCcmVhay5DT1VOVCAtIDEgCisgICAgICAgICAgICB8fCBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWF4VmFsdWUoVVByb3BlcnR5LlNDUklQVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBVU2NyaXB0LkNPREVfTElNSVQgLSAxIAorICAgICAgICAgICAgfHwgVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKDB4MjM0NSkgIT0gLTEgLypKQiMyNDEwKi8gKSB7CisgICAgICAgICAgICBlcnJsbigiZXJyb3I6IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNYXhWYWx1ZSgpIHdyb25nIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlcnNpb25JbmZvIHZlcnNpb24gPSBVQ2hhcmFjdGVyLmdldFVuaWNvZGVWZXJzaW9uKCk7CisgICAgICAgICAgICAKKwkgICAgLy8gdGVzdCBoYXNCaW5hcnlQcm9wZXJ0eSgpIAorCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgKysgaSkgeworICAgICAgICAgICAgaWYgKHByb3BzW2ldWzBdIDwgMCkgeworCQkJCWlmICh2ZXJzaW9uLmNvbXBhcmVUbyhWZXJzaW9uSW5mby5nZXRJbnN0YW5jZShwcm9wc1tpXVsxXSA+PiA0LCAKKwkgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wc1tpXVsxXSAmIDB4RiwgCisJICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCkpIDwgMCkgeworCSAgICAJICAgIAlicmVhazsKKwkgICAgCSAgICB9CisJICAgIAkgICAgY29udGludWU7CisJICAgICAgICB9CisgICAgICAgICAgICBib29sZWFuIGV4cGVjdCA9IHRydWU7CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRbaV0gPT0gMCkgeworICAgICAgICAgICAgICAgIGV4cGVjdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByb3BzW2ldWzFdIDwgVVByb3BlcnR5LklOVF9TVEFSVCkgeworICAgICAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmhhc0JpbmFyeVByb3BlcnR5KHByb3BzW2ldWzBdLCBwcm9wc1tpXVsxXSkKKyAgICAJICAgICAgICAgICAgIT0gZXhwZWN0KSB7CisgICAgCSAgICAgICAgICAgIGVycmxuKCJlcnJvcjogVUNoYXJhY3Rlci5oYXNCaW5hcnlQcm9wZXJ0eShcXHUiICsgCisgICAgCSAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcocHJvcHNbaV1bMF0pICsgIiwgIiArIAorICAgIAkgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKHByb3BzW2ldWzFdKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiKSBoYXMgYW4gZXJyb3IgZXhwZWN0ZWQgIiArIGV4cGVjdGVkW2ldKTsKKyAgICAJICAgICAgICB9CisgICAgICAgICAgICB9CisJCisgICAgICAgICAgICBpZiAoVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eVZhbHVlKHByb3BzW2ldWzBdLCBwcm9wc1tpXVsxXSkKKyAgICAgICAgICAgICAgICAhPSBleHBlY3RlZFtpXSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvcjogVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eVZhbHVlKFxcdSIgKworICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuaGV4KHByb3BzW2ldWzBdLCA0KSArIAorICAgICAgICAgICAgICAgICAgICAgICIsICIgKyBwcm9wc1tpXVsxXSArICIgaXMgd3JvbmcsIHNob3VsZCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgKyBleHBlY3RlZFtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIAorCSAgICAgICAgLy8gdGVzdCBzZXBhcmF0ZSBmdW5jdGlvbnMsIHRvbyAKKwkgICAgICAgIHN3aXRjaCAocHJvcHNbaV1bMV0pIHsKKwkgICAgICAgIGNhc2UgVVByb3BlcnR5LkFMUEhBQkVUSUM6CisJICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNVQWxwaGFiZXRpYyhwcm9wc1tpXVswXSkgIT0gZXhwZWN0KSB7CisJICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvcjogVUNoYXJhY3Rlci5pc1VBbHBoYWJldGljKFxcdSIgKyAKKwkgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhwcm9wc1tpXVswXSkgKyAKKwkgICAgICAgICAgICAgICAgICAgICAgIikgaXMgd3JvbmcgZXhwZWN0ZWQgIiArIGV4cGVjdGVkW2ldKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICBjYXNlIFVQcm9wZXJ0eS5MT1dFUkNBU0U6CisJICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNVTG93ZXJjYXNlKHByb3BzW2ldWzBdKSAhPSBleHBlY3QpIHsKKwkgICAgICAgICAgICAgICAgZXJybG4oImVycm9yOiBVQ2hhcmFjdGVyLmlzVUxvd2VyY2FzZShcXHUiICsgCisJICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcocHJvcHNbaV1bMF0pICsgCisJICAgICAgICAgICAgICAgICAgICAgICIpIGlzIHdyb25nIGV4cGVjdGVkICIgKyBleHBlY3RlZFtpXSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgY2FzZSBVUHJvcGVydHkuVVBQRVJDQVNFOgorCSAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzVVVwcGVyY2FzZShwcm9wc1tpXVswXSkgIT0gZXhwZWN0KSB7CisJICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvcjogVUNoYXJhY3Rlci5pc1VVcHBlcmNhc2UoXFx1IiArIAorCSAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKHByb3BzW2ldWzBdKSArIAorCSAgICAgICAgICAgICAgICAgICAgICAiKSBpcyB3cm9uZyBleHBlY3RlZCAiICsgZXhwZWN0ZWRbaV0pOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIGNhc2UgVVByb3BlcnR5LldISVRFX1NQQUNFOgorCSAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzVVdoaXRlU3BhY2UocHJvcHNbaV1bMF0pICE9IGV4cGVjdCkgeworCSAgICAgICAgICAgICAgICBlcnJsbigiZXJyb3I6IFVDaGFyYWN0ZXIuaXNVV2hpdGVTcGFjZShcXHUiICsgCisJICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcocHJvcHNbaV1bMF0pICsgCisJICAgICAgICAgICAgICAgICAgICAgICIpIGlzIHdyb25nIGV4cGVjdGVkICIgKyBleHBlY3RlZFtpXSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIH0KKwkgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0TnVtZXJpY1Byb3BlcnRpZXMoKSAKKyAgICB7CisgICAgICAgIC8vIHNlZSBVbmljb2RlRGF0YS50eHQsIERlcml2ZWROdW1lcmljVmFsdWVzLnR4dAorICAgICAgICBpbnQgdGVzdHZhcltdW10gPSB7CisgICAgICAgICAgICB7IDB4MEYzMywgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5OVU1FUklDIH0sCisgICAgICAgICAgICB7IDB4MEM2NiwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5ERUNJTUFMIH0sCisgICAgICAgICAgICB7IDB4MjE1OSwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5OVU1FUklDIH0sCisgICAgICAgICAgICB7IDB4MDBCRCwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5OVU1FUklDIH0sCisgICAgICAgICAgICB7IDB4MDAzMSwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5ERUNJTUFMIH0sCisgICAgICAgICAgICB7IDB4MTAzMjAsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDBGMkIsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDAwQjIsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuREVDSU1BTCB9LAorICAgICAgICAgICAgeyAweDE4MTMsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuREVDSU1BTCB9LAorICAgICAgICAgICAgeyAweDIxNzMsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDI3OEUsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuRElHSVQgfSwKKyAgICAgICAgICAgIHsgMHgxRDdGMiwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5ERUNJTUFMIH0sCisgICAgICAgICAgICB7IDB4MjQ3QSwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5ESUdJVCB9LAorICAgICAgICAgICAgeyAweDEzNzIsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDIxNkIsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDE2RUUsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDI0OUEsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDMwM0EsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDMyQjIsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDEzNzUsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTlVNRVJJQyB9LAorICAgICAgICAgICAgeyAweDEwMzIzLCBVQ2hhcmFjdGVyLk51bWVyaWNUeXBlLk5VTUVSSUMgfSwKKyAgICAgICAgICAgIHsgMHgwQkYxLCBVQ2hhcmFjdGVyLk51bWVyaWNUeXBlLk5VTUVSSUMgfSwKKyAgICAgICAgICAgIHsgMHgyMTdFLCBVQ2hhcmFjdGVyLk51bWVyaWNUeXBlLk5VTUVSSUMgfSwKKyAgICAgICAgICAgIHsgMHgyMTgwLCBVQ2hhcmFjdGVyLk51bWVyaWNUeXBlLk5VTUVSSUMgfSwKKyAgICAgICAgICAgIHsgMHgyMTgxLCBVQ2hhcmFjdGVyLk51bWVyaWNUeXBlLk5VTUVSSUMgfSwKKyAgICAgICAgICAgIHsgMHgxMzdDLCBVQ2hhcmFjdGVyLk51bWVyaWNUeXBlLk5VTUVSSUMgfSwKKyAgICAgICAgICAgIHsgMHg2MSwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5OT05FIH0sCisgICAgICAgICAgICB7IDB4MzAwMCwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5OT05FIH0sCisgICAgICAgICAgICB7IDB4ZmZmZSwgVUNoYXJhY3Rlci5OdW1lcmljVHlwZS5OT05FIH0sCisgICAgICAgICAgICB7IDB4MTAzMDEsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTk9ORSB9LAorICAgICAgICAgICAgeyAweGUwMDMzLCBVQ2hhcmFjdGVyLk51bWVyaWNUeXBlLk5PTkUgfSwKKyAgICAgICAgICAgIHsgMHgxMGZmZmYsIFVDaGFyYWN0ZXIuTnVtZXJpY1R5cGUuTk9ORSB9CisgICAgICAgIH07CisKKyAgICAgICAgZG91YmxlIGV4cGVjdGVkW10gPSB7LTEvKGRvdWJsZSkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLyhkb3VibGUpNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS8oZG91YmxlKTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMvKGRvdWJsZSkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5OT19OVU1FUklDX1ZBTFVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLk5PX05VTUVSSUNfVkFMVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuTk9fTlVNRVJJQ19WQUxVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5OT19OVU1FUklDX1ZBTFVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLk5PX05VTUVSSUNfVkFMVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuTk9fTlVNRVJJQ19WQUxVRQorICAgICAgICB9OworCisgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdHZhci5sZW5ndGg7ICsrIGkpIHsKKyAgICAgICAgICAgIGludCBjID0gdGVzdHZhcltpXVswXTsKKyAgICAgICAgICAgIGludCB0eXBlID0gVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eVZhbHVlKGMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVByb3BlcnR5Lk5VTUVSSUNfVFlQRSk7CisgICAgICAgICAgICBkb3VibGUgbnYgPSBVQ2hhcmFjdGVyLmdldFVuaWNvZGVOdW1lcmljVmFsdWUoYyk7CisgICAgCisgICAgICAgICAgICBpZiAodHlwZSAhPSB0ZXN0dmFyW2ldWzFdKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlVQcm9wZXJ0eS5OVU1FUklDX1RZUEUoXFx1IiArIFV0aWxpdHkuaGV4KGMsIDQpIAorICAgICAgICAgICAgICAgICAgICAgICArICIpID0gIiArIHR5cGUgKyAiIHNob3VsZCBiZSAiICsgdGVzdHZhcltpXVsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoMC4wMDAwMDEgPD0gTWF0aC5hYnMobnYgLSBleHBlY3RlZFtpXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiVUNoYXJhY3Rlci5nZXROdW1lcmljVmFsdWUoXFx1IiArIFV0aWxpdHkuaGV4KGMsIDQpIAorICAgICAgICAgICAgICAgICAgICAgICAgKyAiKSA9ICIgKyBudiArICIgc2hvdWxkIGJlICIgKyBleHBlY3RlZFtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBwcm9wZXJ0eSB2YWx1ZXMgQVBJLiAgU2VlIEpCIzI0MTAuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFByb3BlcnR5VmFsdWVzKCkgeworICAgICAgICBpbnQgaSwgcCwgbWluLCBtYXg7CisKKyAgICAgICAgLyogTWluIHNob3VsZCBiZSAwIGZvciBldmVyeXRoaW5nLiAqLworICAgICAgICAvKiBVbnRpbCBKQiMyNDc4IGlzIGZpeGVkLCB0aGUgb25lIGV4Y2VwdGlvbiBpcyBVQ0hBUl9CTE9DSy4gKi8KKyAgICAgICAgZm9yIChwPVVQcm9wZXJ0eS5JTlRfU1RBUlQ7IHA8VVByb3BlcnR5LklOVF9MSU1JVDsgKytwKSB7CisgICAgICAgICAgICBtaW4gPSBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWluVmFsdWUocCk7CisgICAgICAgICAgICBpZiAobWluICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocCA9PSBVUHJvcGVydHkuQkxPQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBva2F5Li4uZm9yIG5vdy4gIFNlZSBKQiMyNDg3LgorICAgICAgICAgICAgICAgICAgICAgICBUT0RPIFVwZGF0ZSB0aGlzIGZvciBKQiMyNDg3LiAqLworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICAgICAgICAgICAgICBuYW1lID0gVUNoYXJhY3Rlci5nZXRQcm9wZXJ0eU5hbWUocCwgVVByb3BlcnR5Lk5hbWVDaG9pY2UuTE9ORyk7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWluVmFsdWUoIiArIG5hbWUgKyAiKSA9ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4gKyAiLCBleHAuIDAiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBNYXggc2hvdWxkIGJlIC0xIGZvciBpbnZhbGlkIHByb3BlcnRpZXMuICovCisgICAgICAgIG1heCA9IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNYXhWYWx1ZSgtMSk7CisgICAgICAgIGlmIChtYXggIT0gLTEpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWF4VmFsdWUoLTEpID0gIiArCisgICAgICAgICAgICAgICAgICBtYXggKyAiLCBleHAuIC0xIik7CisgICAgICAgIH0KKworICAgICAgICAvKiBTY3JpcHQgc2hvdWxkIHJldHVybiAwIGZvciBhbiBpbnZhbGlkIGNvZGUgcG9pbnQuIElmIHRoZSBBUEkKKyAgICAgICAgICAgdGhyb3dzIGFuIGV4Y2VwdGlvbiB0aGVuIHRoYXQncyBmaW5lIHRvby4gKi8KKyAgICAgICAgZm9yIChpPTA7IGk8MjsgKytpKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGludCBzY3JpcHQgPSAwOworICAgICAgICAgICAgICAgIFN0cmluZyBkZXNjID0gbnVsbDsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIHNjcmlwdCA9IFVTY3JpcHQuZ2V0U2NyaXB0KC0xKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzYyA9ICJVU2NyaXB0LmdldFNjcmlwdCgtMSkiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIHNjcmlwdCA9IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlWYWx1ZSgtMSwgVVByb3BlcnR5LlNDUklQVCk7CisgICAgICAgICAgICAgICAgICAgIGRlc2MgPSAiVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eVZhbHVlKC0xLCBVUHJvcGVydHkuU0NSSVBUKSI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2NyaXB0ICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBkZXNjICsgIiA9ICIgKyBzY3JpcHQgKyAiLCBleHAuIDAiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VQcm9wZXJ0eUFsaWFzZXNUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VUHJvcGVydHlBbGlhc2VzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTZhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VUHJvcGVydHlBbGlhc2VzVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTExIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKGMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEF1dGhvcjogQWxhbiBMaXUKKyogQ3JlYXRlZDogTm92ZW1iZXIgNSAyMDAyCisqIFNpbmNlOiBJQ1UgMi40CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5sYW5nOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKKworcHVibGljIGNsYXNzIFVQcm9wZXJ0eUFsaWFzZXNUZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworICAKKyAgICBwdWJsaWMgVVByb3BlcnR5QWxpYXNlc1Rlc3QoKSB7fQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgVVByb3BlcnR5QWxpYXNlc1Rlc3QoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgcHJvcGVydHkgbmFtZXMgYW5kIHByb3BlcnR5IHZhbHVlIG5hbWVzIEFQSS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0UHJvcGVydHlOYW1lcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGludCBwLCB2LCBjaG9pY2UsIHJldjsKKyAgICAgICAgCisgICAgICAgIGZvciAocD0wOyA7ICsrcCkgeworICAgICAgICAgICAgYm9vbGVhbiBzYXdQcm9wID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKGNob2ljZT0wOyA7ICsrY2hvaWNlKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBVQ2hhcmFjdGVyLmdldFByb3BlcnR5TmFtZShwLCBjaG9pY2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNhd1Byb3ApIGxvZygicHJvcCAiICsgcCArICI6Iik7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuID0gKG5hbWUgIT0gbnVsbCkgPyAoIlwiIiArIG5hbWUgKyAnIicpIDogIm51bGwiOworICAgICAgICAgICAgICAgICAgICBsb2coIiAiICsgY2hvaWNlICsgIj0iICsgbik7CisgICAgICAgICAgICAgICAgICAgIHNhd1Byb3AgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaG9pY2UgPiAwKSBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvKiB0ZXN0IHJldmVyc2UgbWFwcGluZyAqLworICAgICAgICAgICAgICAgICAgICByZXYgPSBVQ2hhcmFjdGVyLmdldFByb3BlcnR5RW51bShuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldiAhPSBwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiUHJvcGVydHkgcm91bmQtdHJpcCBmYWlsdXJlOiAiICsgcCArICIgLT4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lICsgIiAtPiAiICsgcmV2KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzYXdQcm9wKSB7CisgICAgICAgICAgICAgICAgLyogbG9va3MgbGlrZSBhIHZhbGlkIHByb3BlcnR5OyBjaGVjayB0aGUgdmFsdWVzICovCisgICAgICAgICAgICAgICAgU3RyaW5nIHBuYW1lID0gVUNoYXJhY3Rlci5nZXRQcm9wZXJ0eU5hbWUocCwgVVByb3BlcnR5Lk5hbWVDaG9pY2UuTE9ORyk7CisgICAgICAgICAgICAgICAgaW50IG1heCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHAgPT0gVVByb3BlcnR5LkNBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gMjU1OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocCA9PSBVUHJvcGVydHkuR0VORVJBTF9DQVRFR09SWSkgeworICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGZhciB0b28gc2xvdyB0byBpdGVyYXRlIGFsbCB0aGUgd2F5IHVwIHRvCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWFsIG1heCwgVV9HQ19QX01BU0sgKi8KKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gMHgxMDAwOyAvLyBVX0dDX05MX01BU0s7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwID09IFVQcm9wZXJ0eS5CTE9DSykgeworICAgICAgICAgICAgICAgICAgICAvKiBVQmxvY2tDb2RlcywgdW5saWtlIG90aGVyIHZhbHVlcywgc3RhcnQgYXQgMSAqLworICAgICAgICAgICAgICAgICAgICBtYXggPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2dsbigiIik7CisgICAgICAgICAgICAgICAgZm9yICh2PS0xOyA7ICsrdikgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNhd1ZhbHVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAoY2hvaWNlPTA7IDsgKytjaG9pY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2bmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZuYW1lID0gVUNoYXJhY3Rlci5nZXRQcm9wZXJ0eVZhbHVlTmFtZShwLCB2LCBjaG9pY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuID0gKHZuYW1lICE9IG51bGwpID8gKCJcIiIgKyB2bmFtZSArICciJykgOiAibnVsbCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzYXdWYWx1ZSkgbG9nKCIgIiArIHBuYW1lICsgIiwgdmFsdWUgIiArIHYgKyAiOiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiICIgKyBjaG9pY2UgKyAiPSIgKyBuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXdWYWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hvaWNlPjApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZuYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZXN0IHJldmVyc2UgbWFwcGluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldiA9IFVDaGFyYWN0ZXIuZ2V0UHJvcGVydHlWYWx1ZUVudW0ocCwgdm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXYgIT0gdikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiVmFsdWUgcm91bmQtdHJpcCBmYWlsdXJlICgiICsgcG5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTogIiArIHYgKyAiIC0+ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bmFtZSArICIgLT4gIiArIHJldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzYXdWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nbG4oIiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghc2F3VmFsdWUgJiYgdj49bWF4KSBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXNhd1Byb3ApIHsKKyAgICAgICAgICAgICAgICBpZiAocD49VVByb3BlcnR5LlNUUklOR19MSU1JVCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHA+PVVQcm9wZXJ0eS5ET1VCTEVfTElNSVQpIHsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFVQcm9wZXJ0eS5TVFJJTkdfU1RBUlQgLSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocD49VVByb3BlcnR5LklOVF9MSU1JVCkgeworICAgICAgICAgICAgICAgICAgICBwID0gVVByb3BlcnR5LkRPVUJMRV9TVEFSVCAtIDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwPj1VUHJvcGVydHkuQklOQVJZX0xJTUlUKSB7CisgICAgICAgICAgICAgICAgICAgIHAgPSBVUHJvcGVydHkuSU5UX1NUQVJUIC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VVEYxNlRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VURjE2VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5MjZiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VVEYxNlRlc3QuamF2YQpAQCAtMCwwICsxLDE0NjQgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvbGFuZy9VVEYxNlRlc3QuamF2YSx2ICQgCisqICREYXRlOiAyMDAyLzEwLzI4IDIxOjU5OjIzICQgCisqICRSZXZpc2lvbjogMS4yMCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lmxhbmc7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlJlcGxhY2VhYmxlU3RyaW5nOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKKworLyoqCisqIFRlc3RpbmcgY2xhc3MgZm9yIFVURjE2CisqIEBhdXRob3IgU3luIFdlZSBRdWVrCisqIEBzaW5jZSBmZWIgMDkgMjAwMQorKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBVVEYxNlRlc3QgZXh0ZW5kcyBUZXN0Rm13aworeyAKKyAgCS8vIGNvbnN0cnVjdG9yID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAKKyAgCS8qKgorICAJKiBDb25zdHJ1Y3RvcgorICAJKi8KKyAgCXB1YmxpYyBVVEYxNlRlc3QoKQorICAJeworICAJfQorICAKKyAgCS8vIHB1YmxpYyBtZXRob2RzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAKKyAgCS8qKgorICAJKiBUZXN0aW5nIFVURjE2IGNsYXNzIG1ldGhvZHMgYXBwZW5kCisgIAkqLworICAJcHVibGljIHZvaWQgVGVzdEFwcGVuZCgpCisgIAl7CisgICAgICAJU3RyaW5nQnVmZmVyIHN0cmJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCJ0aGlzIGlzIGEgc3RyaW5nICIpOworICAgICAgCWNoYXIgYXJyYXlbXSA9IG5ldyBjaGFyW1VDaGFyYWN0ZXIuTUFYX1ZBTFVFID4+IDJdOworICAgICAgCWludCBzdHJzaXplID0gc3RyYnVmZi5sZW5ndGgoKTsKKyAgICAgIAlpbnQgYXJyYXlzaXplID0gc3Ryc2l6ZTsKKyAgICAgICAgCisgICAgICAJVXRpbGl0eS5nZXRDaGFycyhzdHJidWZmLCAwLCBzdHJzaXplLCBhcnJheSwgMCk7CisgICAgICAJZm9yIChpbnQgaSA9IDE7IGkgPCBVQ2hhcmFjdGVyLk1BWF9WQUxVRTsgaSArPSAxMDApCisgICAgICAJeworICAgICAgCSAgCVVURjE2LmFwcGVuZChzdHJidWZmLCBpKTsKKyAgICAgICAgIAlhcnJheXNpemUgPSBVVEYxNi5hcHBlbmQoYXJyYXksIGFycmF5c2l6ZSwgaSk7CisgICAgICAgICAgCisgICAgICAgICAgCVN0cmluZyBhcnJheXN0ciA9IG5ldyBTdHJpbmcoYXJyYXksIDAsIGFycmF5c2l6ZSk7CisgICAgICAgICAgCWlmICghYXJyYXlzdHIuZXF1YWxzKHN0cmJ1ZmYudG9TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgCWVycmxuKCJGQUlMIENvbXBhcmluZyBjaGFyIGFycmF5IGFwcGVuZCBhbmQgc3RyaW5nIGFwcGVuZCAiICsKKyAgICAgICAgICAgICAgCSAgICAgICJ3aXRoIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoaSkpOworICAgICAgICAgIAl9CisgICAgICAgICAgCisgICAgICAgICAgCS8vIHRoaXMgaXMgdG8gY2F0ZXIgZm9yIHRoZSBjb21iaW5hdGlvbiBvZiAweERCWFggMHhEQzUwIHdoaWNoIAorICAgICAgICAgIAkvLyBmb3JtcyBhIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyCisgICAgICAgICAgCWlmIChpID09IDB4REM1MSkgeworICAgICAgICAgICAgICAJc3Ryc2l6ZSAtLTsKKyAgICAgICAgICAJfQorICAgICAgICAgICAgCisgICAgICAgICAgCWlmIChVVEYxNi5jb3VudENvZGVQb2ludChzdHJidWZmKSAhPSBzdHJzaXplICsgKGkgLyAxMDApICsgMSkgeworICAgICAgICAgICAgICAJZXJybG4oIkZBSUwgQ291bnRpbmcgY29kZSBwb2ludHMgaW4gc3RyaW5nIGFwcGVuZGVkIHdpdGggIiArIAorICAgICAgICAgICAgICAgICAgICAJIiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGkpKTsKKyAgICAgICAgICAgICAgCWJyZWFrOworICAgICAgICAgIAl9ICAKKyAgICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkqIFRlc3RpbmcgVVRGMTYgY2xhc3MgbWV0aG9kcyBib3VuZHMKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0Qm91bmRzKCkKKyAgCXsKKyAgICAgIAlTdHJpbmdCdWZmZXIgc3RyYnVmZiA9IAorICAgICAgICAgIAkJICAgICAgICAgICAgICAgICAgLy8wICAgMTIzNDUgICAgIDYgICAgIDcgICAgIDggICAgIDkKKyAgICAgICAgICAJCW5ldyBTdHJpbmdCdWZmZXIoIlx1ZGMwMDAxMjNcdWQ4MDBcdWRjMDBcdWQ4MDFcdWRjMDFcdWQ4MDIiKTsKKyAgICAgIAlTdHJpbmcgc3RyID0gc3RyYnVmZi50b1N0cmluZygpOworICAgICAgCWNoYXIgYXJyYXlbXSA9IHN0ci50b0NoYXJBcnJheSgpOworICAgICAgCWludCBib3VuZHR5cGVbXSA9IHtVVEYxNi5TSU5HTEVfQ0hBUl9CT1VOREFSWSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU0lOR0xFX0NIQVJfQk9VTkRBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU0lOR0xFX0NIQVJfQk9VTkRBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU0lOR0xFX0NIQVJfQk9VTkRBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU0lOR0xFX0NIQVJfQk9VTkRBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuTEVBRF9TVVJST0dBVEVfQk9VTkRBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuVFJBSUxfU1VSUk9HQVRFX0JPVU5EQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LkxFQURfU1VSUk9HQVRFX0JPVU5EQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LlRSQUlMX1NVUlJPR0FURV9CT1VOREFSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5TSU5HTEVfQ0hBUl9CT1VOREFSWX07CisgICAgICAJaW50IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKKyAgICAgIAlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSArKykgeworICAgICAgICAJaWYgKFVURjE2LmJvdW5kcyhzdHIsIGkpICE9IGJvdW5kdHlwZVtpXSkgeworICAgICAgICAgICAgICAJZXJybG4oIkZBSUwgY2hlY2tpbmcgYm91bmQgdHlwZSBhdCBpbmRleCAiICsgaSk7CisgICAgICAgICAgCX0KKyAgICAgICAgICAJaWYgKFVURjE2LmJvdW5kcyhzdHJidWZmLCBpKSAhPSBib3VuZHR5cGVbaV0pIHsKKyAgICAgICAgICAgICAgCWVycmxuKCJGQUlMIGNoZWNraW5nIGJvdW5kIHR5cGUgYXQgaW5kZXggIiArIGkpOworICAgICAgICAgIAl9CisgICAgICAgICAgCWlmIChVVEYxNi5ib3VuZHMoYXJyYXksIDAsIGxlbmd0aCwgaSkgIT0gYm91bmR0eXBlW2ldKSB7CisgICAgICAgICAgICAgIAllcnJsbigiRkFJTCBjaGVja2luZyBib3VuZCB0eXBlIGF0IGluZGV4ICIgKyBpKTsKKyAgICAgICAgICAJfQorICAgICAgCX0KKyAgICAgIAkvLyBkb2VzIG5vdCBzdHJhZGRsZSBiZXR3ZWVuIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyCisgICAgICAJaW50IHN0YXJ0ID0gNDsKKyAgICAgIAlpbnQgbGltaXQgPSA5OworICAgICAgCWludCBzdWJib3VuZHR5cGUxW10gPSB7VVRGMTYuU0lOR0xFX0NIQVJfQk9VTkRBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LkxFQURfU1VSUk9HQVRFX0JPVU5EQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5UUkFJTF9TVVJST0dBVEVfQk9VTkRBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LkxFQURfU1VSUk9HQVRFX0JPVU5EQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5UUkFJTF9TVVJST0dBVEVfQk9VTkRBUll9OworICAgICAgCXRyeSB7CisgICAgICAgICAgCVVURjE2LmJvdW5kcyhhcnJheSwgc3RhcnQsIGxpbWl0LCAtMSk7CisgICAgICAgICAgCWVycmxuKCJGQUlMIE91dCBvZiBib3VuZHMgaW5kZXggaW4gYm91bmRzIHNob3VsZCBmYWlsIik7CisgICAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAJLy8gZ2V0dGluZyByaWQgb2Ygd2FybmluZ3MKKyAgICAgICAgICAJU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgICAJfQorICAgICAgCisgICAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBsaW1pdCAtIHN0YXJ0OyBpICsrKSB7CisgICAgICAgICAgCWlmIChVVEYxNi5ib3VuZHMoYXJyYXksIHN0YXJ0LCBsaW1pdCwgaSkgIT0gc3ViYm91bmR0eXBlMVtpXSkgeworICAgICAgICAgICAgICAJZXJybG4oIkZBSUxFRCBTdWJhcnJheSBib3VuZHMgaW4gWyIgKyBzdGFydCArICIsICIgKyBsaW1pdCArIAorICAgICAgICAgICAgICAgICAgICAJIl0gZXhwZWN0ZWQgIiArIHN1YmJvdW5kdHlwZTFbaV0gKyAiIGF0IG9mZnNldCAiICsgaSk7CisgICAgICAgICAgCX0KKyAgICAgIAl9CisgICAgICAKKyAgICAgIAkvLyBzdGFydHMgZnJvbSB0aGUgbWlkIG9mIGEgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIKKyAgICAgIAlpbnQgc3ViYm91bmR0eXBlMltdID0ge1VURjE2LlNJTkdMRV9DSEFSX0JPVU5EQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5MRUFEX1NVUlJPR0FURV9CT1VOREFSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuVFJBSUxfU1VSUk9HQVRFX0JPVU5EQVJZfTsKKyAgICAgIAorICAgICAgCXN0YXJ0ID0gNjsKKyAgICAgIAlsaW1pdCA9IDk7CisgICAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBsaW1pdCAtIHN0YXJ0OyBpICsrKSB7CisgICAgICAgICAgCWlmIChVVEYxNi5ib3VuZHMoYXJyYXksIHN0YXJ0LCBsaW1pdCwgaSkgIT0gc3ViYm91bmR0eXBlMltpXSkgeworICAgICAgICAgICAgICAJZXJybG4oIkZBSUxFRCBTdWJhcnJheSBib3VuZHMgaW4gWyIgKyBzdGFydCArICIsICIgKyBsaW1pdCArIAorICAgICAgICAgICAgICAgICAgICAJIl0gZXhwZWN0ZWQgIiArIHN1YmJvdW5kdHlwZTJbaV0gKyAiIGF0IG9mZnNldCAiICsgaSk7CisgICAgICAgICAgCX0KKyAgICAgIAl9CisgICAgICAKKyAgICAgIAkvLyBlbmRzIGluIHRoZSBtaWQgb2YgYSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcgorICAgICAgCWludCBzdWJib3VuZHR5cGUzW10gPSB7VVRGMTYuTEVBRF9TVVJST0dBVEVfQk9VTkRBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LlRSQUlMX1NVUlJPR0FURV9CT1VOREFSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU0lOR0xFX0NIQVJfQk9VTkRBUll9OworICAgICAgCXN0YXJ0ID0gNTsKKyAgICAgIAlsaW1pdCA9IDg7CisgICAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBsaW1pdCAtIHN0YXJ0OyBpICsrKSB7CisgICAgICAgICAgCWlmIChVVEYxNi5ib3VuZHMoYXJyYXksIHN0YXJ0LCBsaW1pdCwgaSkgIT0gc3ViYm91bmR0eXBlM1tpXSkgeworICAgICAgICAgICAgICAJZXJybG4oIkZBSUxFRCBTdWJhcnJheSBib3VuZHMgaW4gWyIgKyBzdGFydCArICIsICIgKyBsaW1pdCArIAorICAgICAgICAgICAgICAgICAgICAJIl0gZXhwZWN0ZWQgIiArIHN1YmJvdW5kdHlwZTNbaV0gKyAiIGF0IG9mZnNldCAiICsgaSk7CisgICAgICAgICAgCX0KKyAgICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkqIFRlc3RpbmcgVVRGMTYgY2xhc3MgbWV0aG9kcyBjaGFyQXQgYW5kIGNoYXJBdENvZGVQb2ludCAKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0Q2hhckF0KCkKKyAgCXsKKyAgICAgIAlTdHJpbmdCdWZmZXIgc3RyYnVmZiA9IAorICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdCdWZmZXIoIjEyMzQ1XHVkODAwXHVkYzAxNjc4OTBcdWQ4MDBcdWRjMDIiKTsKKyAgICAgIAlpZiAoVVRGMTYuY2hhckF0KHN0cmJ1ZmYsIDApICE9ICcxJyB8fCBVVEYxNi5jaGFyQXQoc3RyYnVmZiwgMikgIT0gJzMnIAorICAgICAgCSAgICB8fCBVVEYxNi5jaGFyQXQoc3RyYnVmZiwgNSkgIT0gMHgxMDAwMSB8fCAKKyAgICAgICAgICAJVVRGMTYuY2hhckF0KHN0cmJ1ZmYsIDYpICE9IDB4MTAwMDEgfHwgCisgICAgICAgICAgCVVURjE2LmNoYXJBdChzdHJidWZmLCAxMikgIT0gMHgxMDAwMiB8fCAKKyAgICAgICAgICAJVVRGMTYuY2hhckF0KHN0cmJ1ZmYsIDEzKSAhPSAweDEwMDAyKSB7CisgICAgICAgICAgCWVycmxuKCJGQUlMIEdldHRpbmcgY2hhcmFjdGVyIGZyb20gc3RyaW5nIGJ1ZmZlciBlcnJvciIgKTsKKyAgICAgIAl9CisgICAgICAJU3RyaW5nIHN0ciA9IHN0cmJ1ZmYudG9TdHJpbmcoKTsKKyAgICAgIAlpZiAoVVRGMTYuY2hhckF0KHN0ciwgMCkgIT0gJzEnIHx8IFVURjE2LmNoYXJBdChzdHIsIDIpICE9ICczJyB8fCAKKyAgICAgICAgICAJVVRGMTYuY2hhckF0KHN0ciwgNSkgIT0gMHgxMDAwMSB8fCBVVEYxNi5jaGFyQXQoc3RyLCA2KSAhPSAweDEwMDAxIAorICAgICAgICAgIAl8fCBVVEYxNi5jaGFyQXQoc3RyLCAxMikgIT0gMHgxMDAwMiB8fCAKKyAgICAgICAgICAJVVRGMTYuY2hhckF0KHN0ciwgMTMpICE9IDB4MTAwMDIpIAorICAgICAgCXsKKyAgICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyBjaGFyYWN0ZXIgZnJvbSBzdHJpbmcgZXJyb3IiICk7CisgICAgICAJfQorICAgICAgCWNoYXIgYXJyYXlbXSA9IHN0ci50b0NoYXJBcnJheSgpOworICAgICAgCWludCBzdGFydCA9IDA7CisgICAgICAJaW50IGxpbWl0ID0gc3RyLmxlbmd0aCgpOworICAgICAgCWlmIChVVEYxNi5jaGFyQXQoYXJyYXksIHN0YXJ0LCBsaW1pdCwgMCkgIT0gJzEnIHx8IAorICAgICAgICAgIAlVVEYxNi5jaGFyQXQoYXJyYXksIHN0YXJ0LCBsaW1pdCwgMikgIT0gJzMnIHx8IAorICAgICAgICAgIAlVVEYxNi5jaGFyQXQoYXJyYXksIHN0YXJ0LCBsaW1pdCwgNSkgIT0gMHgxMDAwMSB8fCAKKyAgICAgICAgICAJVVRGMTYuY2hhckF0KGFycmF5LCBzdGFydCwgbGltaXQsIDYpICE9IDB4MTAwMDEgfHwgCisgICAgICAgICAgCVVURjE2LmNoYXJBdChhcnJheSwgc3RhcnQsIGxpbWl0LCAxMikgIT0gMHgxMDAwMiB8fCAKKyAgICAgICAgICAJVVRGMTYuY2hhckF0KGFycmF5LCBzdGFydCwgbGltaXQsIDEzKSAhPSAweDEwMDAyKSB7CisgICAgICAgICAgCWVycmxuKCJGQUlMIEdldHRpbmcgY2hhcmFjdGVyIGZyb20gYXJyYXkgZXJyb3IiICk7CisgICAgICAJfQorICAgICAgCS8vIGNoZWNrIHRoZSBzdWIgYXJyYXkgaGVyZS4KKyAgICAgIAlzdGFydCA9IDY7CisgICAgICAJbGltaXQgPSAxMzsKKyAgICAgIAl0cnkgeworICAgICAgICAgIAlVVEYxNi5jaGFyQXQoYXJyYXksIHN0YXJ0LCBsaW1pdCwgLTEpOworICAgICAgICAgIAllcnJsbigiRkFJTCBvdXQgb2YgYm91bmRzIGVycm9yIGV4cGVjdGVkIik7CisgICAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAJU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgICAJfQorICAgICAgCXRyeSB7CisgICAgICAgICAgCVVURjE2LmNoYXJBdChhcnJheSwgc3RhcnQsIGxpbWl0LCA4KTsKKyAgICAgICAgICAJZXJybG4oIkZBSUwgb3V0IG9mIGJvdW5kcyBlcnJvciBleHBlY3RlZCIpOworICAgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgCX0KKyAgICAgIAlpZiAoVVRGMTYuY2hhckF0KGFycmF5LCBzdGFydCwgbGltaXQsIDApICE9IDB4ZGMwMSkgeworICAgICAgICAgIAllcnJsbigiRkFJTCBFeHBlY3RlZCByZXN1bHQgaW4gc3ViYXJyYXkgMHhkYzAxIik7CisgICAgICAJfQorICAgICAgCWlmIChVVEYxNi5jaGFyQXQoYXJyYXksIHN0YXJ0LCBsaW1pdCwgNikgIT0gMHhkODAwKSB7CisgICAgICAgICAgCWVycmxuKCJGQUlMIEV4cGVjdGVkIHJlc3VsdCBpbiBzdWJhcnJheSAweGQ4MDAiKTsKKyAgICAgIAl9CisgICAgICAJUmVwbGFjZWFibGVTdHJpbmcgcmVwbGFjZWFibGUgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoc3RyKTsgCisgICAgICAJaWYgKFVURjE2LmNoYXJBdChyZXBsYWNlYWJsZSwgMCkgIT0gJzEnIHx8IAorICAgICAgCSAgICBVVEYxNi5jaGFyQXQocmVwbGFjZWFibGUsIDIpICE9ICczJyB8fCAKKyAgICAgICAgICAJVVRGMTYuY2hhckF0KHJlcGxhY2VhYmxlLCA1KSAhPSAweDEwMDAxIHx8IAorICAgICAgICAgIAlVVEYxNi5jaGFyQXQocmVwbGFjZWFibGUsIDYpICE9IDB4MTAwMDEgfHwgCisgICAgICAgICAgCVVURjE2LmNoYXJBdChyZXBsYWNlYWJsZSwgMTIpICE9IDB4MTAwMDIgfHwgCisgICAgICAgICAgCVVURjE2LmNoYXJBdChyZXBsYWNlYWJsZSwgMTMpICE9IDB4MTAwMDIpIHsKKyAgICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyBjaGFyYWN0ZXIgZnJvbSByZXBsYWNlYWJsZSBlcnJvciIgKTsKKyAgICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkqIFRlc3RpbmcgVVRGMTYgY2xhc3MgbWV0aG9kcyBjb3VudENvZGVQb2ludAorICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RDb3VudENvZGVQb2ludCgpCisgIAl7CisgICAgCVN0cmluZ0J1ZmZlciBzdHJidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgCWNoYXIgICAgICAgICBhcnJheVtdID0gbnVsbDsKKyAgICAJaWYgKFVURjE2LmNvdW50Q29kZVBvaW50KHN0cmJ1ZmYpICE9IDAgfHwKKyAgICAgICAgCVVURjE2LmNvdW50Q29kZVBvaW50KCIiKSAhPSAwIHx8CisgICAgICAgIAlVVEYxNi5jb3VudENvZGVQb2ludChhcnJheSwwICwwKSAhPSAwKSB7CisgICAgICAgIAllcnJsbigiRkFJTCBDb3VudGluZyBjb2RlIHBvaW50cyBmb3IgZW1wdHkgc3RyaW5ncyIpOworICAgIAl9CisgICAgCisgICAgCXN0cmJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCJ0aGlzIGlzIGEgc3RyaW5nICIpOworICAgIAlTdHJpbmcgc3RyID0gc3RyYnVmZi50b1N0cmluZygpOworICAgIAlhcnJheSA9IHN0ci50b0NoYXJBcnJheSgpOworICAgIAlpbnQgc2l6ZSA9IHN0ci5sZW5ndGgoKTsKKyAgICAKKyAgICAJaWYgKFVURjE2LmNvdW50Q29kZVBvaW50KGFycmF5LCAwLCAwKSAhPSAwKSB7CisgICAgICAgIAllcnJsbigiRkFJTCBDb3VudGluZyBjb2RlIHBvaW50cyBmb3IgMCBvZmZzZXQgYXJyYXkiKTsKKyAgICAJfQorICAgIAorICAgIAlpZiAoVVRGMTYuY291bnRDb2RlUG9pbnQoc3RyKSAhPSBzaXplIHx8CisgICAgICAgIAlVVEYxNi5jb3VudENvZGVQb2ludChzdHJidWZmKSAhPSBzaXplIHx8CisgICAgICAgIAlVVEYxNi5jb3VudENvZGVQb2ludChhcnJheSwgMCwgc2l6ZSkgIT0gc2l6ZSkgeworICAgICAgICAJZXJybG4oIkZBSUwgQ291bnRpbmcgY29kZSBwb2ludHMiKTsKKyAgICAJfQkgCisgICAgCisgICAgCVVURjE2LmFwcGVuZChzdHJidWZmLCAweDEwMDAwKTsKKyAgICAJc3RyID0gc3RyYnVmZi50b1N0cmluZygpOworICAgIAlhcnJheSA9IHN0ci50b0NoYXJBcnJheSgpOworICAgIAlpZiAoVVRGMTYuY291bnRDb2RlUG9pbnQoc3RyKSAhPSBzaXplICsgMSB8fAorICAgICAgICAJVVRGMTYuY291bnRDb2RlUG9pbnQoc3RyYnVmZikgIT0gc2l6ZSArIDEgfHwKKyAgICAgICAgCVVURjE2LmNvdW50Q29kZVBvaW50KGFycmF5LCAwLCBzaXplICsgMSkgIT0gc2l6ZSArIDEgfHwKKyAgICAgICAgCVVURjE2LmNvdW50Q29kZVBvaW50KGFycmF5LCAwLCBzaXplICsgMikgIT0gc2l6ZSArIDEpIHsKKyAgICAgICAgCWVycmxuKCJGQUlMIENvdW50aW5nIGNvZGUgcG9pbnRzIik7CisgICAgCX0KKyAgICAJVVRGMTYuYXBwZW5kKHN0cmJ1ZmYsIDB4NjEpOworICAgIAlzdHIgPSBzdHJidWZmLnRvU3RyaW5nKCk7CisgICAgCWFycmF5ID0gc3RyLnRvQ2hhckFycmF5KCk7CisgICAgCWlmIChVVEYxNi5jb3VudENvZGVQb2ludChzdHIpICE9IHNpemUgKyAyIHx8CisgICAgICAgIAlVVEYxNi5jb3VudENvZGVQb2ludChzdHJidWZmKSAhPSBzaXplICsgMiB8fAorICAgICAgICAJVVRGMTYuY291bnRDb2RlUG9pbnQoYXJyYXksIDAsIHNpemUgKyAxKSAhPSBzaXplICsgMSB8fAorICAgICAgICAJVVRGMTYuY291bnRDb2RlUG9pbnQoYXJyYXksIDAsIHNpemUgKyAyKSAhPSBzaXplICsgMSB8fAorICAgICAgICAJVVRGMTYuY291bnRDb2RlUG9pbnQoYXJyYXksIDAsIHNpemUgKyAzKSAhPSBzaXplICsgMikgeworICAgICAgICAJZXJybG4oIkZBSUwgQ291bnRpbmcgY29kZSBwb2ludHMiKTsKKyAgICAJfQorICAJfQorICAKKyAgCS8qKgorICAJKiBUZXN0aW5nIFVURjE2IGNsYXNzIG1ldGhvZHMgZGVsZXRlCisgIAkqLworICAJcHVibGljIHZvaWQgVGVzdERlbGV0ZSgpCisgIAl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMDEyMzQ1Njc4OTAxMjM0NTYKKyAgICAJU3RyaW5nQnVmZmVyIHN0cmJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCJ0aGVzZSBhcmUgc3RyaW5ncyIpOworICAgIAlpbnQgc2l6ZSA9IHN0cmJ1ZmYubGVuZ3RoKCk7CisgICAgCWNoYXIgYXJyYXlbXSA9IHN0cmJ1ZmYudG9TdHJpbmcoKS50b0NoYXJBcnJheSgpOworICAgIAorICAgIAlVVEYxNi5kZWxldGUoc3RyYnVmZiwgMyk7CisgICAgCVVURjE2LmRlbGV0ZShzdHJidWZmLCAzKTsKKyAgICAJVVRGMTYuZGVsZXRlKHN0cmJ1ZmYsIDMpOworICAgIAlVVEYxNi5kZWxldGUoc3RyYnVmZiwgMyk7CisgICAgCVVURjE2LmRlbGV0ZShzdHJidWZmLCAzKTsKKyAgICAJVVRGMTYuZGVsZXRlKHN0cmJ1ZmYsIDMpOworICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuZGVsZXRlKHN0cmJ1ZmYsIHN0cmJ1ZmYubGVuZ3RoKCkpOworICAgICAgICAJZXJybG4oIkZBSUwgZGVsZXRpbmcgb3V0IG9mIGJvdW5kcyBjaGFyYWN0ZXIgc2hvdWxkIGZhaWwiKTsKKyAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgIAl9CisgICAgCVVURjE2LmRlbGV0ZShzdHJidWZmLCBzdHJidWZmLmxlbmd0aCgpIC0gMSk7CisgICAgCWlmICghc3RyYnVmZi50b1N0cmluZygpLmVxdWFscygidGhlIHN0cmluZyIpKSB7CisgICAgICAgIAllcnJsbigiRkFJTCBleHBlY3RlZCByZXN1bHQgYWZ0ZXIgZGVsZXRpbmcgY2hhcmFjdGVycyBpcyAiICsKKyAgICAgICAgICAgICAgCQkiXCJ0aGUgc3RyaW5nXCIiKTsKKyAgICAJfQorICAgIAorICAgIAlzaXplID0gVVRGMTYuZGVsZXRlKGFycmF5LCBzaXplLCAzKTsKKyAgICAJc2l6ZSA9IFVURjE2LmRlbGV0ZShhcnJheSwgc2l6ZSwgMyk7CisgICAgCXNpemUgPSBVVEYxNi5kZWxldGUoYXJyYXksIHNpemUsIDMpOworICAgIAlzaXplID0gVVRGMTYuZGVsZXRlKGFycmF5LCBzaXplLCAzKTsKKyAgICAJc2l6ZSA9IFVURjE2LmRlbGV0ZShhcnJheSwgc2l6ZSwgMyk7CisgICAgCXNpemUgPSBVVEYxNi5kZWxldGUoYXJyYXksIHNpemUsIDMpOworICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuZGVsZXRlKGFycmF5LCBzaXplLCBzaXplKTsKKyAgICAgICAgCWVycmxuKCJGQUlMIGRlbGV0aW5nIG91dCBvZiBib3VuZHMgY2hhcmFjdGVyIHNob3VsZCBmYWlsIik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAJfQorICAgIAlzaXplID0gVVRGMTYuZGVsZXRlKGFycmF5LCBzaXplLCBzaXplIC0gMSk7CisgICAgCVN0cmluZyBzdHIgPSBuZXcgU3RyaW5nKGFycmF5LCAwLCBzaXplKTsKKyAgICAJaWYgKCFzdHIuZXF1YWxzKCJ0aGUgc3RyaW5nIikpIHsKKyAgICAgICAgCWVycmxuKCJGQUlMIGV4cGVjdGVkIHJlc3VsdCBhZnRlciBkZWxldGluZyBjaGFyYWN0ZXJzIGlzICIgKworICAgICAgICAgICAgICAJCSJcInRoZSBzdHJpbmdcIiIpOworICAgIAl9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCS8vMDEyMzQ1Njc4ICAgICA5ICAgICAwMSAgICAgMiAgICAgIDMgICAgIDQKKyAgICAJc3RyYnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoInN0cmluZzogXHVkODAwXHVkYzAwIFx1ZDgwMVx1ZGMwMSBcdWQ4MDFcdWRjMDEiKTsKKyAgICAJc2l6ZSA9IHN0cmJ1ZmYubGVuZ3RoKCk7CisgICAgCWFycmF5ID0gc3RyYnVmZi50b1N0cmluZygpLnRvQ2hhckFycmF5KCk7CisgICAgCisgICAgCVVURjE2LmRlbGV0ZShzdHJidWZmLCA4KTsKKyAgICAJVVRGMTYuZGVsZXRlKHN0cmJ1ZmYsIDgpOworICAgIAlVVEYxNi5kZWxldGUoc3RyYnVmZiwgOSk7CisgICAgCVVURjE2LmRlbGV0ZShzdHJidWZmLCA4KTsKKyAgICAJVVRGMTYuZGVsZXRlKHN0cmJ1ZmYsIDkpOworICAgIAlVVEYxNi5kZWxldGUoc3RyYnVmZiwgNik7CisgICAgCVVURjE2LmRlbGV0ZShzdHJidWZmLCA2KTsKKyAgICAJaWYgKCFzdHJidWZmLnRvU3RyaW5nKCkuZXF1YWxzKCJzdHJpbmciKSkgeworICAgICAgICAJZXJybG4oIkZBSUwgZXhwZWN0ZWQgcmVzdWx0IGFmdGVyIGRlbGV0aW5nIGNoYXJhY3RlcnMgaXMgXCJzdHJpbmdcIiIpOworICAgIAl9CisgICAgCisgICAgCXNpemUgPSBVVEYxNi5kZWxldGUoYXJyYXksIHNpemUsIDgpOworICAgIAlzaXplID0gVVRGMTYuZGVsZXRlKGFycmF5LCBzaXplLCA4KTsKKyAgICAJc2l6ZSA9IFVURjE2LmRlbGV0ZShhcnJheSwgc2l6ZSwgOSk7CisgICAgCXNpemUgPSBVVEYxNi5kZWxldGUoYXJyYXksIHNpemUsIDgpOworICAgIAlzaXplID0gVVRGMTYuZGVsZXRlKGFycmF5LCBzaXplLCA5KTsKKyAgICAJc2l6ZSA9IFVURjE2LmRlbGV0ZShhcnJheSwgc2l6ZSwgNik7CisgICAgCXNpemUgPSBVVEYxNi5kZWxldGUoYXJyYXksIHNpemUsIDYpOworICAgIAlzdHIgPSBuZXcgU3RyaW5nKGFycmF5LCAwLCBzaXplKTsKKyAgICAJaWYgKCFzdHIuZXF1YWxzKCJzdHJpbmciKSkgeworICAgICAgICAJZXJybG4oIkZBSUwgZXhwZWN0ZWQgcmVzdWx0IGFmdGVyIGRlbGV0aW5nIGNoYXJhY3RlcnMgaXMgXCJzdHJpbmdcIiIpOworICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkqIFRlc3RpbmcgZmluZE9mZnNldEZyb21Db2RlUG9pbnQgYW5kIGZpbmRDb2RlUG9pbnRPZmZzZXQKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0ZmluZE9mZnNldCgpCisgIAl7CisgICAgCS8vIGppdHRlcmJ1ZyA0NworICAgIAlTdHJpbmcgc3RyID0gImFcdUQ4MDBcdURDMDBiIjsKKyAgICAJU3RyaW5nQnVmZmVyIHN0cmJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKHN0cik7CisgICAgCWNoYXIgYXJyYXlbXSA9IHN0ci50b0NoYXJBcnJheSgpOworICAgIAlpbnQgbGltaXQgPSBzdHIubGVuZ3RoKCk7CisgICAgCWlmIChVVEYxNi5maW5kQ29kZVBvaW50T2Zmc2V0KHN0ciwgMCkgIT0gMCB8fAorICAgICAgICAJVVRGMTYuZmluZE9mZnNldEZyb21Db2RlUG9pbnQoc3RyLCAwKSAhPSAwIHx8CisgICAgICAgIAlVVEYxNi5maW5kQ29kZVBvaW50T2Zmc2V0KHN0cmJ1ZmYsIDApICE9IDAgfHwKKyAgICAgICAgCVVURjE2LmZpbmRPZmZzZXRGcm9tQ29kZVBvaW50KHN0cmJ1ZmYsIDApICE9IDAgfHwKKyAgICAgICAgCVVURjE2LmZpbmRDb2RlUG9pbnRPZmZzZXQoYXJyYXksIDAsIGxpbWl0LCAwKSAhPSAwIHx8CisgICAgICAgIAlVVEYxNi5maW5kT2Zmc2V0RnJvbUNvZGVQb2ludChhcnJheSwgMCwgbGltaXQsIDApICE9IDApIHsKKyAgICAgICAgCWVycmxuKCJGQUlMIEdldHRpbmcgdGhlIGZpcnN0IGNvZGVwb2ludCBvZmZzZXQgdG8gYSBzdHJpbmcgd2l0aCAiICsKKyAgICAgICAgICAgICAgCQkic3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIik7CisgICAgCX0KKyAgICAJaWYgKFVURjE2LmZpbmRDb2RlUG9pbnRPZmZzZXQoc3RyLCAxKSAhPSAxIHx8CisgICAgICAgIAlVVEYxNi5maW5kT2Zmc2V0RnJvbUNvZGVQb2ludChzdHIsIDEpICE9IDEgfHwKKyAgICAgICAgCVVURjE2LmZpbmRDb2RlUG9pbnRPZmZzZXQoc3RyYnVmZiwgMSkgIT0gMSB8fAorICAgICAgICAJVVRGMTYuZmluZE9mZnNldEZyb21Db2RlUG9pbnQoc3RyYnVmZiwgMSkgIT0gMSB8fAorICAgICAgICAJVVRGMTYuZmluZENvZGVQb2ludE9mZnNldChhcnJheSwgMCwgbGltaXQsIDEpICE9IDEgfHwKKyAgICAgICAgCVVURjE2LmZpbmRPZmZzZXRGcm9tQ29kZVBvaW50KGFycmF5LCAwLCBsaW1pdCwgMSkgIT0gMSkgeworICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyB0aGUgc2Vjb25kIGNvZGVwb2ludCBvZmZzZXQgdG8gYSBzdHJpbmcgd2l0aCAiICsKKyAgICAgICAgICAgICAgCQkic3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIik7CisgICAgCX0KKyAgICAJaWYgKFVURjE2LmZpbmRDb2RlUG9pbnRPZmZzZXQoc3RyLCAyKSAhPSAxIHx8CisgICAgICAgIAlVVEYxNi5maW5kT2Zmc2V0RnJvbUNvZGVQb2ludChzdHIsIDIpICE9IDMgfHwKKyAgICAgICAgCVVURjE2LmZpbmRDb2RlUG9pbnRPZmZzZXQoc3RyYnVmZiwgMikgIT0gMSB8fAorICAgICAgICAJVVRGMTYuZmluZE9mZnNldEZyb21Db2RlUG9pbnQoc3RyYnVmZiwgMikgIT0gMyB8fAorICAgICAgICAJVVRGMTYuZmluZENvZGVQb2ludE9mZnNldChhcnJheSwgMCwgbGltaXQsIDIpICE9IDEgfHwKKyAgICAgICAgCVVURjE2LmZpbmRPZmZzZXRGcm9tQ29kZVBvaW50KGFycmF5LCAwLCBsaW1pdCwgMikgIT0gMykgeworICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyB0aGUgdGhpcmQgY29kZXBvaW50IG9mZnNldCB0byBhIHN0cmluZyB3aXRoICIgKworICAgICAgICAgICAgICAJCSJzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMiKTsKKyAgICAJfQorICAgIAlpZiAoVVRGMTYuZmluZENvZGVQb2ludE9mZnNldChzdHIsIDMpICE9IDIgfHwKKyAgICAgICAgCVVURjE2LmZpbmRPZmZzZXRGcm9tQ29kZVBvaW50KHN0ciwgMykgIT0gNCB8fAorICAgICAgICAJVVRGMTYuZmluZENvZGVQb2ludE9mZnNldChzdHJidWZmLCAzKSAhPSAyIHx8CisgICAgICAgIAlVVEYxNi5maW5kT2Zmc2V0RnJvbUNvZGVQb2ludChzdHJidWZmLCAzKSAhPSA0IHx8CisgICAgICAgIAlVVEYxNi5maW5kQ29kZVBvaW50T2Zmc2V0KGFycmF5LCAwLCBsaW1pdCwgMykgIT0gMiB8fAorICAgICAgICAJVVRGMTYuZmluZE9mZnNldEZyb21Db2RlUG9pbnQoYXJyYXksIDAsIGxpbWl0LCAzKSAhPSA0KSB7CisgICAgICAgIAllcnJsbigiRkFJTCBHZXR0aW5nIHRoZSBsYXN0IGNvZGVwb2ludCBvZmZzZXQgdG8gYSBzdHJpbmcgd2l0aCAiICsKKyAgICAgICAgICAgICAgCQkic3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIik7CisgICAgCX0KKyAgICAJaWYgKFVURjE2LmZpbmRDb2RlUG9pbnRPZmZzZXQoc3RyLCA0KSAhPSAzIHx8IAorICAgICAgICAJVVRGMTYuZmluZENvZGVQb2ludE9mZnNldChzdHJidWZmLCA0KSAhPSAzIHx8CisgICAgICAgIAlVVEYxNi5maW5kQ29kZVBvaW50T2Zmc2V0KGFycmF5LCAwLCBsaW1pdCwgNCkgIT0gMykgeworICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyB0aGUgbGVuZ3RoIG9mZnNldCB0byBhIHN0cmluZyB3aXRoICIgKworICAgICAgICAgICAgICAJCSJzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMiKTsKKyAgICAJfQorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuZmluZENvZGVQb2ludE9mZnNldChzdHIsIDUpOworICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyB0aGUgYSBub24tZXhpc3RlbmNlIGNvZGVwb2ludCB0byBhIHN0cmluZyAiICsKKyAgICAgICAgCSAgICAgICJ3aXRoIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAJLy8gdGhpcyBpcyBhIHN1Y2Nlc3MKKyAgICAgICAgCWxvZ2xuKCJQYXNzZWQgb3V0IG9mIGJvdW5kcyBjb2RlcG9pbnQgb2Zmc2V0Iik7CisgICAgCX0KKyAgICAJdHJ5IHsKKyAgICAgICAgCVVURjE2LmZpbmRPZmZzZXRGcm9tQ29kZVBvaW50KHN0ciwgNCk7CisgICAgICAgIAllcnJsbigiRkFJTCBHZXR0aW5nIHRoZSBhIG5vbi1leGlzdGVuY2UgY29kZXBvaW50IHRvIGEgc3RyaW5nICIgKworICAgICAgICAJICAgICAgIndpdGggc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAkvLyB0aGlzIGlzIGEgc3VjY2VzcworICAgICAgICAJbG9nbG4oIlBhc3NlZCBvdXQgb2YgYm91bmRzIGNvZGVwb2ludCBvZmZzZXQiKTsKKyAgICAJfQorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuZmluZENvZGVQb2ludE9mZnNldChzdHJidWZmLCA1KTsKKyAgICAgICAgCWVycmxuKCJGQUlMIEdldHRpbmcgdGhlIGEgbm9uLWV4aXN0ZW5jZSBjb2RlcG9pbnQgdG8gYSBzdHJpbmcgIiArIAorICAgICAgICAJICAgICAgIndpdGggc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAkvLyB0aGlzIGlzIGEgc3VjY2VzcworICAgICAgICAJbG9nbG4oIlBhc3NlZCBvdXQgb2YgYm91bmRzIGNvZGVwb2ludCBvZmZzZXQiKTsKKyAgICAJfQorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuZmluZE9mZnNldEZyb21Db2RlUG9pbnQoc3RyYnVmZiwgNCk7CisgICAgICAgIAllcnJsbigiRkFJTCBHZXR0aW5nIHRoZSBhIG5vbi1leGlzdGVuY2UgY29kZXBvaW50IHRvIGEgc3RyaW5nICIgKworICAgICAgICAJICAgICAgIndpdGggc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAkvLyB0aGlzIGlzIGEgc3VjY2VzcworICAgICAgICAJbG9nbG4oIlBhc3NlZCBvdXQgb2YgYm91bmRzIGNvZGVwb2ludCBvZmZzZXQiKTsKKyAgICAJfQorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuZmluZENvZGVQb2ludE9mZnNldChhcnJheSwgMCwgbGltaXQsIDUpOworICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyB0aGUgYSBub24tZXhpc3RlbmNlIGNvZGVwb2ludCB0byBhIHN0cmluZyAiICsgCisgICAgICAgIAkgICAgICAid2l0aCBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMiKTsKKyAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCS8vIHRoaXMgaXMgYSBzdWNjZXNzCisgICAgICAgIAlsb2dsbigiUGFzc2VkIG91dCBvZiBib3VuZHMgY29kZXBvaW50IG9mZnNldCIpOworICAgIAl9CisgICAgCXRyeSB7CisgICAgICAgIAlVVEYxNi5maW5kT2Zmc2V0RnJvbUNvZGVQb2ludChhcnJheSwgMCwgbGltaXQsIDQpOworICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyB0aGUgYSBub24tZXhpc3RlbmNlIGNvZGVwb2ludCB0byBhIHN0cmluZyAiICsKKyAgICAgICAgCSAgICAgICJ3aXRoIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAJLy8gdGhpcyBpcyBhIHN1Y2Nlc3MKKyAgICAgICAgCWxvZ2xuKCJQYXNzZWQgb3V0IG9mIGJvdW5kcyBjb2RlcG9pbnQgb2Zmc2V0Iik7CisgICAgCX0KKyAgICAKKyAgICAJaWYgKFVURjE2LmZpbmRDb2RlUG9pbnRPZmZzZXQoYXJyYXksIDEsIDMsIDApICE9IDAgfHwKKyAgICAgICAgCVVURjE2LmZpbmRPZmZzZXRGcm9tQ29kZVBvaW50KGFycmF5LCAxLCAzLCAwKSAhPSAwIHx8CisgICAgICAgIAlVVEYxNi5maW5kQ29kZVBvaW50T2Zmc2V0KGFycmF5LCAxLCAzLCAxKSAhPSAwIHx8CisgICAgICAgIAlVVEYxNi5maW5kQ29kZVBvaW50T2Zmc2V0KGFycmF5LCAxLCAzLCAyKSAhPSAxIHx8CisgICAgICAgIAlVVEYxNi5maW5kT2Zmc2V0RnJvbUNvZGVQb2ludChhcnJheSwgMSwgMywgMSkgIT0gMikgeworICAgICAgICAJZXJybG4oIkZBSUwgR2V0dGluZyB2YWxpZCBjb2RlcG9pbnQgb2Zmc2V0IGluIHN1YiBhcnJheSIpOworICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkqIFRlc3RpbmcgVVRGMTYgY2xhc3MgbWV0aG9kcyBnZXRDaGFyQ291bnQsICpTdXJyb2dhdGUKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0R2V0Q2hhckNvdW50U3Vycm9nYXRlKCkKKyAgCXsKKyAgICAJaWYgKFVURjE2LmdldENoYXJDb3VudCgweDYxKSAhPSAxIHx8CisgICAgICAgIAlVVEYxNi5nZXRDaGFyQ291bnQoMHgxMDAwMCkgIT0gMikgeworICAgICAgICAJZXJybG4oIkZBSUwgZ2V0Q2hhckNvdW50IHJlc3VsdCBmYWlsdXJlIik7CisgICAgCX0KKyAgICAJaWYgKFVURjE2LmdldExlYWRTdXJyb2dhdGUoMHg2MSkgIT0gMCB8fAorICAgICAgICAJVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoMHg2MSkgIT0gMHg2MSB8fAorICAgICAgICAJVVRGMTYuaXNMZWFkU3Vycm9nYXRlKChjaGFyKTB4NjEpIHx8CisgICAgICAgIAlVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKChjaGFyKTB4NjEpIHx8CisgICAgICAgIAlVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKDB4MTAwMDApICE9IDB4ZDgwMCB8fAorICAgICAgICAJVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoMHgxMDAwMCkgIT0gMHhkYzAwIHx8CisgICAgICAgIAlVVEYxNi5pc0xlYWRTdXJyb2dhdGUoKGNoYXIpMHhkODAwKSAhPSB0cnVlIHx8CisgICAgICAgIAlVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKChjaGFyKTB4ZDgwMCkgfHwKKyAgICAgICAgCVVURjE2LmlzTGVhZFN1cnJvZ2F0ZSgoY2hhcikweGRjMDApIHx8CisgICAgICAgIAlVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKChjaGFyKTB4ZGMwMCkgIT0gdHJ1ZSkgeworICAgICAgICAJZXJybG4oIkZBSUwgKlN1cnJvZ2F0ZSByZXN1bHQgZmFpbHVyZSIpOworICAgIAl9CisgICAgCisgICAgCWlmIChVVEYxNi5pc1N1cnJvZ2F0ZSgoY2hhcikweDYxKSB8fCAhVVRGMTYuaXNTdXJyb2dhdGUoKGNoYXIpMHhkODAwKSAKKyAgICAJICAgIHx8ICFVVEYxNi5pc1N1cnJvZ2F0ZSgoY2hhcikweGRjMDApKSB7CisgICAgICAgIAllcnJsbigiRkFJTCBpc1N1cnJvZ2F0ZSByZXN1bHQgZmFpbHVyZSIpOworICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkqIFRlc3RpbmcgVVRGMTYgY2xhc3MgbWV0aG9kIGluc2VydAorICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3RJbnNlcnQoKQorICAJeworICAgIAlTdHJpbmdCdWZmZXIgc3RyYnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoIjAxMjM0NTY3ODkiKTsKKyAgICAJY2hhciBhcnJheVtdID0gbmV3IGNoYXJbMTI4XTsKKyAgICAJVXRpbGl0eS5nZXRDaGFycyhzdHJidWZmLCAwLCBzdHJidWZmLmxlbmd0aCgpLCBhcnJheSwgMCk7CisgICAgCWludCBsZW5ndGggPSAxMDsKKyAgICAJVVRGMTYuaW5zZXJ0KHN0cmJ1ZmYsIDUsICd0Jyk7CisgICAgCVVURjE2Lmluc2VydChzdHJidWZmLCA1LCAncycpOworICAgIAlVVEYxNi5pbnNlcnQoc3RyYnVmZiwgNSwgJ2UnKTsKKyAgICAJVVRGMTYuaW5zZXJ0KHN0cmJ1ZmYsIDUsICd0Jyk7CisgICAgCWlmICghKHN0cmJ1ZmYudG9TdHJpbmcoKS5lcXVhbHMoIjAxMjM0dGVzdDU2Nzg5IikpKSB7CisgICAgICAgIAllcnJsbigiRkFJTCBpbnNlcnRpbmcgXCJ0ZXN0XCIiKTsKKyAgICAJfQorICAgIAlsZW5ndGggPSBVVEYxNi5pbnNlcnQoYXJyYXksIGxlbmd0aCwgNSwgJ3QnKTsKKyAgICAJbGVuZ3RoID0gVVRGMTYuaW5zZXJ0KGFycmF5LCBsZW5ndGgsIDUsICdzJyk7CisgICAgCWxlbmd0aCA9IFVURjE2Lmluc2VydChhcnJheSwgbGVuZ3RoLCA1LCAnZScpOworICAgIAlsZW5ndGggPSBVVEYxNi5pbnNlcnQoYXJyYXksIGxlbmd0aCwgNSwgJ3QnKTsKKyAgICAJU3RyaW5nIHN0ciA9IG5ldyBTdHJpbmcoYXJyYXksIDAsIGxlbmd0aCk7CisgICAgCWlmICghKHN0ci5lcXVhbHMoIjAxMjM0dGVzdDU2Nzg5IikpKSB7CisgICAgICAgIAllcnJsbigiRkFJTCBpbnNlcnRpbmcgXCJ0ZXN0XCIiKTsKKyAgICAJfQorICAgIAlVVEYxNi5pbnNlcnQoc3RyYnVmZiwgMCwgMHgxMDAwMCk7CisgICAgCVVURjE2Lmluc2VydChzdHJidWZmLCAxMSwgMHgxMDAwMCk7CisgICAgCVVURjE2Lmluc2VydChzdHJidWZmLCBzdHJidWZmLmxlbmd0aCgpLCAweDEwMDAwKTsKKyAgICAJaWYgKCEoc3RyYnVmZi50b1N0cmluZygpLmVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgICJcdWQ4MDBcdWRjMDAwMTIzNHRlc3RcdWQ4MDBcdWRjMDA1Njc4OVx1ZDgwMFx1ZGMwMCIpKSkgeworICAgICAgICAJZXJybG4oIkZBSUwgaW5zZXJ0aW5nIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyIpOworICAgIAl9CisgICAgCWxlbmd0aCA9IFVURjE2Lmluc2VydChhcnJheSwgbGVuZ3RoLCAwLCAweDEwMDAwKTsKKyAgICAJbGVuZ3RoID0gVVRGMTYuaW5zZXJ0KGFycmF5LCBsZW5ndGgsIDExLCAweDEwMDAwKTsKKyAgICAJbGVuZ3RoID0gVVRGMTYuaW5zZXJ0KGFycmF5LCBsZW5ndGgsIGxlbmd0aCwgMHgxMDAwMCk7CisgICAgCXN0ciA9IG5ldyBTdHJpbmcoYXJyYXksIDAsIGxlbmd0aCk7CisgICAgCWlmICghKHN0ci5lcXVhbHMoCisgICAgCSAgICAgICAgICAgICAiXHVkODAwXHVkYzAwMDEyMzR0ZXN0XHVkODAwXHVkYzAwNTY3ODlcdWQ4MDBcdWRjMDAiKSkpIHsKKyAgICAgICAgCWVycmxuKCJGQUlMIGluc2VydGluZyBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMiKTsKKyAgICAJfQorICAgIAorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuaW5zZXJ0KHN0cmJ1ZmYsIC0xLCAwKTsKKyAgICAgICAgCWVycmxuKCJGQUlMIGludmFsaWQgaW5zZXJ0aW9uIG9mZnNldCIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAJU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgCX0KKyAgICAJdHJ5IHsKKyAgICAgICAgCVVURjE2Lmluc2VydChzdHJidWZmLCA2NCwgMCk7CisgICAgICAgIAllcnJsbigiRkFJTCBpbnZhbGlkIGluc2VydGlvbiBvZmZzZXQiKTsKKyAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgIAl9CisgICAgCXRyeSB7CisgICAgICAgIAlVVEYxNi5pbnNlcnQoYXJyYXksIGxlbmd0aCwgLTEsIDApOworICAgICAgICAJZXJybG4oIkZBSUwgaW52YWxpZCBpbnNlcnRpb24gb2Zmc2V0Iik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAJfQorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuaW5zZXJ0KGFycmF5LCBsZW5ndGgsIDY0LCAwKTsKKyAgICAgICAgCWVycmxuKCJGQUlMIGludmFsaWQgaW5zZXJ0aW9uIG9mZnNldCIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAJU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgCX0KKyAgICAJdHJ5IHsKKyAgICAJCS8vIGV4Y2VlZGVkIGFycmF5IHNpemUKKyAgICAgICAgCVVURjE2Lmluc2VydChhcnJheSwgYXJyYXkubGVuZ3RoLCA2NCwgMCk7CisgICAgICAgIAllcnJsbigiRkFJTCBpbnZhbGlkIGluc2VydGlvbiBvZmZzZXQiKTsKKyAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgIAl9CisgIAl9CisgIAorICAJLyogCisgIAkqIFRlc3RpbmcgbW92ZUNvZGVQb2ludE9mZnNldCBBUElzCisgIAkqLworICAJcHVibGljIHZvaWQgVGVzdE1vdmVDb2RlUG9pbnRPZmZzZXQoKQorICAJeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJLy8wMTIzNDU2Nzg5MCAgICAgMSAgICAgMiAgICAgMyAgICAgNDU2Nzg5MDEyMzQKKyAgICAgIAlTdHJpbmcgc3RyID0gbmV3IFN0cmluZygiMDEyMzQ1Njc4OVx1ZDgwMFx1ZGMwMFx1ZDgwMVx1ZGMwMTAxMjM0NTY3ODkiKTsKKyAgICAgIAlpbnQgbW92ZTFbXSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTIsIDEyLCAxNCwgMTQsIDE1LCAxNiwgCisgICAgICAJICAgICAgICAgICAgICAgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0fTsKKyAgICAgIAlpbnQgbW92ZTJbXSA9IHsyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTIsIDE0LCAxNCwgMTUsIDE1LCAxNiwgMTcsIAorICAgICAgICAJICAgICAgICAgICAgIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0fTsKKyAgICAgIAlpbnQgbW92ZTNbXSA9IHszLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTIsIDE0LCAxNSwgMTUsIDE2LCAxNiwgMTcsIDE4LAorICAgICAgICAgIAkgICAgICAgICAgIDE5LCAyMCwgMjEsIDIyLCAyMywgMjR9OworICAgICAgCWludCBzaXplID0gc3RyLmxlbmd0aCgpOworICAgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICAgIAlpZiAoVVRGMTYubW92ZUNvZGVQb2ludE9mZnNldChzdHIsIGksIDEpICE9IG1vdmUxW2ldKSB7CisgICAgICAgICAgICAgIAllcnJsbigiRkFJTDogTW92aW5nIG9mZnNldCAiICsgaSArIAorICAgICAgICAgICAgICAgICAgICAJIiBieSAxIGNvZGVwb2ludCBleHBlY3RlZCByZXN1bHQgIiArIG1vdmUxW2ldKTsKKyAgICAgICAgICAJfQorICAgICAgICAgIAl0cnkgeworICAgICAgICAgICAgICAJaWYgKFVURjE2Lm1vdmVDb2RlUG9pbnRPZmZzZXQoc3RyLCBpLCAyKSAhPSBtb3ZlMltpXSkgeworICAgICAgICAgICAgICAgICAgCWVycmxuKCJGQUlMOiBNb3Zpbmcgb2Zmc2V0ICIgKyBpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnkgMiBjb2RlcG9pbnQgZXhwZWN0ZWQgcmVzdWx0ICIgKyBtb3ZlMltpXSk7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgCX0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAJaWYgKGkgPD0gMjIpIHsKKyAgICAgICAgICAgICAgICAgIAl0aHJvdyBlOworICAgICAgICAgICAgICAJfQorICAgICAgICAgIAl9CisgICAgICAgICAgCXRyeQorICAgICAgICAgIAl7CisgICAgICAgICAgICAgIAlpZiAoVVRGMTYubW92ZUNvZGVQb2ludE9mZnNldChzdHIsIGksIDMpICE9IG1vdmUzW2ldKSB7CisgICAgICAgICAgICAgICAgICAJZXJybG4oIkZBSUw6IE1vdmluZyBvZmZzZXQgIiArIGkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBieSAzIGNvZGVwb2ludCBleHBlY3RlZCByZXN1bHQgIiArIG1vdmUzW2ldKTsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAJfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgIAlpZiAoaSA8PSAyMSkgeworICAgICAgICAgICAgICAgICAgCXRocm93IGU7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgCX0KKyAgICAgIAl9CisgICAgIAorICAgICAgCVN0cmluZ0J1ZmZlciBzdHJidWZmID0gbmV3IFN0cmluZ0J1ZmZlcihzdHIpOworICAgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICAgIAlpZiAoVVRGMTYubW92ZUNvZGVQb2ludE9mZnNldChzdHJidWZmLCBpLCAxKSAhPSBtb3ZlMVtpXSkgeworICAgICAgICAgICAgICAJZXJybG4oIkZBSUw6IE1vdmluZyBvZmZzZXQgIiArIGkgKyAKKyAgICAgICAgICAgICAgICAgICAgCSIgYnkgMSBjb2RlcG9pbnQgZXhwZWN0ZWQgcmVzdWx0ICIgKyBtb3ZlMVtpXSk7CisgICAgICAgICAgCX0KKyAgICAgICAgICAJdHJ5IHsKKyAgICAgICAgICAgICAgCWlmIChVVEYxNi5tb3ZlQ29kZVBvaW50T2Zmc2V0KHN0cmJ1ZmYsIGksIDIpICE9IG1vdmUyW2ldKSB7CisgICAgICAgICAgICAgICAgICAJZXJybG4oIkZBSUw6IE1vdmluZyBvZmZzZXQgIiArIGkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBieSAyIGNvZGVwb2ludCBleHBlY3RlZCByZXN1bHQgIiArIG1vdmUyW2ldKTsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAJfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgIAlpZiAoaSA8PSAyMikgeworICAgICAgICAgICAgICAgICAgCXRocm93IGU7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgCX0KKyAgICAgICAgICAJdHJ5CisgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgCWlmIChVVEYxNi5tb3ZlQ29kZVBvaW50T2Zmc2V0KHN0cmJ1ZmYsIGksIDMpICE9IG1vdmUzW2ldKSB7CisgICAgICAgICAgICAgICAgICAJZXJybG4oIkZBSUw6IE1vdmluZyBvZmZzZXQgIiArIGkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBieSAzIGNvZGVwb2ludCBleHBlY3RlZCByZXN1bHQgIiArIG1vdmUzW2ldKTsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAJfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgIAlpZiAoaSA8PSAyMSkgeworICAgICAgICAgICAgICAgICAgCXRocm93IGU7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgCX0gIAorICAgICAgCX0KKyAgICAgIAorICAgICAgCWNoYXIgc3RyYXJyYXlbXSA9IHN0ci50b0NoYXJBcnJheSgpOworICAgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICAgIAlpZiAoVVRGMTYubW92ZUNvZGVQb2ludE9mZnNldChzdHJhcnJheSwgMCwgc2l6ZSwgaSwgMSkgIT0gbW92ZTFbaV0pIAorICAgICAgICAgIAl7CisgICAgICAgICAgICAgIAllcnJsbigiRkFJTDogTW92aW5nIG9mZnNldCAiICsgaSArIAorICAgICAgICAgICAgICAgICAgICAJIiBieSAxIGNvZGVwb2ludCBleHBlY3RlZCByZXN1bHQgIiArIG1vdmUxW2ldKTsKKyAgICAgICAgICAJfQorICAgICAgICAgIAl0cnkgeworICAgICAgICAgICAgICAJaWYgKFVURjE2Lm1vdmVDb2RlUG9pbnRPZmZzZXQoc3RyYXJyYXksIDAsIHNpemUsIGksIDIpICE9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUyW2ldKSB7CisgICAgICAgICAgICAgICAgICAJZXJybG4oIkZBSUw6IE1vdmluZyBvZmZzZXQgIiArIGkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBieSAyIGNvZGVwb2ludCBleHBlY3RlZCByZXN1bHQgIiArIG1vdmUyW2ldKTsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAJfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgIAlpZiAoaSA8PSAyMikgeworICAgICAgICAgICAgICAgICAgCXRocm93IGU7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgCX0KKyAgICAgICAgICAJdHJ5CisgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgCWlmIChVVEYxNi5tb3ZlQ29kZVBvaW50T2Zmc2V0KHN0cmFycmF5LCAgMCwgc2l6ZSwgaSwgMykgIT0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZTNbaV0pIHsKKyAgICAgICAgICAgICAgICAgIAllcnJsbigiRkFJTDogTW92aW5nIG9mZnNldCAiICsgaSArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAiIGJ5IDMgY29kZXBvaW50IGV4cGVjdGVkIHJlc3VsdCAiICsgbW92ZTNbaV0pOworICAgICAgICAgICAgICAJfQorICAgICAgICAgIAl9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgCWlmIChpIDw9IDIxKSB7CisgICAgICAgICAgICAgICAgICAJdGhyb3cgZTsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAJfSAgCisgICAgICAJfQorICAgICAgCisgICAgICAJaWYgKFVURjE2Lm1vdmVDb2RlUG9pbnRPZmZzZXQoc3RyYXJyYXksIDksIDEzLCAwLCAyKSAhPSAzKSB7CisgICAgICAgICAgCWVycmxuKCJGQUlMOiBNb3Zpbmcgb2Zmc2V0IDAgYnkgMiBjb2RlcG9pbnQgaW4gc3ViYXJyYXkgWzksIDEzXSAiICsKKyAgICAgICAgICAgICAgICAJImV4cGVjdGVkIHJlc3VsdCAzIik7CisgICAgICAJfQorICAgICAgCWlmIChVVEYxNi5tb3ZlQ29kZVBvaW50T2Zmc2V0KHN0cmFycmF5LCA5LCAxMywgMSwgMikgIT0gNCkgeworICAgICAgICAgIAllcnJsbigiRkFJTDogTW92aW5nIG9mZnNldCAxIGJ5IDIgY29kZXBvaW50IGluIHN1YmFycmF5IFs5LCAxM10gIiArCisgICAgICAgICAgICAgICAgCSJleHBlY3RlZCByZXN1bHQgNCIpOworICAgICAgCX0KKyAgICAgIAlpZiAoVVRGMTYubW92ZUNvZGVQb2ludE9mZnNldChzdHJhcnJheSwgMTEsIDE0LCAwLCAyKSAhPSAzKSB7CisgICAgICAgICAgCWVycmxuKCJGQUlMOiBNb3Zpbmcgb2Zmc2V0IDAgYnkgMiBjb2RlcG9pbnQgaW4gc3ViYXJyYXkgWzExLCAxNF0gIiAKKyAgICAgICAgICAJICAgICAgKyAiZXhwZWN0ZWQgcmVzdWx0IDMiKTsKKyAgICAgIAl9CisgIAl9CisgIAorICAJLyoqCisgIAkqIFRlc3RpbmcgVVRGMTYgY2xhc3MgbWV0aG9kcyBzZXRDaGFyQXQKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0U2V0Q2hhckF0KCkKKyAgCXsKKyAgICAJU3RyaW5nQnVmZmVyIHN0cmJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCIwMTIzNDUiKTsKKyAgICAJY2hhciBhcnJheVtdID0gbmV3IGNoYXJbMTI4XTsKKyAgICAJVXRpbGl0eS5nZXRDaGFycyhzdHJidWZmLCAwLCBzdHJidWZmLmxlbmd0aCgpLCBhcnJheSwgMCk7CisgICAgCWludCBsZW5ndGggPSA2OworICAgIAlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSArKykgeworICAgICAgICAJVVRGMTYuc2V0Q2hhckF0KHN0cmJ1ZmYsIGksICcwJyk7CisgICAgICAgIAlVVEYxNi5zZXRDaGFyQXQoYXJyYXksIGxlbmd0aCwgaSwgJzAnKTsKKyAgICAJfQorICAgIAlTdHJpbmcgc3RyID0gbmV3IFN0cmluZyhhcnJheSwgMCwgbGVuZ3RoKTsKKyAgICAJaWYgKCEoc3RyYnVmZi50b1N0cmluZygpLmVxdWFscygiMDAwMDAwIikpIHx8CisgICAgICAgIAkhKHN0ci5lcXVhbHMoIjAwMDAwMCIpKSkgeworICAgICAgICAJZXJybG4oIkZBSUw6IHNldENoYXIgdG8gJzAnIGZhaWxlZCIpOworICAgIAl9CisgICAgCVVURjE2LnNldENoYXJBdChzdHJidWZmLCAwLCAweDEwMDAwKTsKKyAgICAJVVRGMTYuc2V0Q2hhckF0KHN0cmJ1ZmYsIDQsIDB4MTAwMDApOworICAgIAlVVEYxNi5zZXRDaGFyQXQoc3RyYnVmZiwgNywgMHgxMDAwMCk7CisgICAgCWlmICghKHN0cmJ1ZmYudG9TdHJpbmcoKS5lcXVhbHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZDgwMFx1ZGMwMDAwXHVkODAwXHVkYzAwMFx1ZDgwMFx1ZGMwMCIpKSkgeworICAgICAgICAJZXJybG4oIkZBSUw6IHNldENoYXIgdG8gMHgxMDAwMCBmYWlsZWQiKTsKKyAgICAJfQorICAgIAlsZW5ndGggPSBVVEYxNi5zZXRDaGFyQXQoYXJyYXksIGxlbmd0aCwgMCwgMHgxMDAwMCk7CisgICAgCWxlbmd0aCA9IFVURjE2LnNldENoYXJBdChhcnJheSwgbGVuZ3RoLCA0LCAweDEwMDAwKTsKKyAgICAJbGVuZ3RoID0gVVRGMTYuc2V0Q2hhckF0KGFycmF5LCBsZW5ndGgsIDcsIDB4MTAwMDApOworICAgIAlzdHIgPSBuZXcgU3RyaW5nKGFycmF5LCAwLCBsZW5ndGgpOworICAgIAlpZiAoIShzdHIuZXF1YWxzKCJcdWQ4MDBcdWRjMDAwMFx1ZDgwMFx1ZGMwMDBcdWQ4MDBcdWRjMDAiKSkpIHsKKyAgICAgICAgCWVycmxuKCJGQUlMOiBzZXRDaGFyIHRvIDB4MTAwMDAgZmFpbGVkIik7CisgICAgCX0KKyAgICAJVVRGMTYuc2V0Q2hhckF0KHN0cmJ1ZmYsIDAsICcwJyk7CisgICAgCVVURjE2LnNldENoYXJBdChzdHJidWZmLCAxLCAnMScpOworICAgIAlVVEYxNi5zZXRDaGFyQXQoc3RyYnVmZiwgMiwgJzInKTsKKyAgICAJVVRGMTYuc2V0Q2hhckF0KHN0cmJ1ZmYsIDQsICczJyk7CisgICAgCVVURjE2LnNldENoYXJBdChzdHJidWZmLCA0LCAnNCcpOworICAgIAlVVEYxNi5zZXRDaGFyQXQoc3RyYnVmZiwgNSwgJzUnKTsKKyAgICAJaWYgKCFzdHJidWZmLnRvU3RyaW5nKCkuZXF1YWxzKCIwMTIzNDUiKSkgeworICAgIAkJZXJybG4oIkZhaWwgY29udmVydGluZyBzdXBwbGVtZW50YXJpZXMgaW4gU3RyaW5nQnVmZmVyIHRvIEJNUCAiICsKKyAgICAJCSAgICAgICJjaGFyYWN0ZXJzIik7CisgICAgCX0KKyAgICAJbGVuZ3RoID0gVVRGMTYuc2V0Q2hhckF0KGFycmF5LCBsZW5ndGgsIDAsICcwJyk7CisgICAgCWxlbmd0aCA9IFVURjE2LnNldENoYXJBdChhcnJheSwgbGVuZ3RoLCAxLCAnMScpOworICAgIAlsZW5ndGggPSBVVEYxNi5zZXRDaGFyQXQoYXJyYXksIGxlbmd0aCwgMiwgJzInKTsKKyAgICAJbGVuZ3RoID0gVVRGMTYuc2V0Q2hhckF0KGFycmF5LCBsZW5ndGgsIDQsICczJyk7CisgICAgCWxlbmd0aCA9IFVURjE2LnNldENoYXJBdChhcnJheSwgbGVuZ3RoLCA0LCAnNCcpOworICAgIAlsZW5ndGggPSBVVEYxNi5zZXRDaGFyQXQoYXJyYXksIGxlbmd0aCwgNSwgJzUnKTsKKyAgICAJc3RyID0gbmV3IFN0cmluZyhhcnJheSwgMCwgbGVuZ3RoKTsKKyAgICAJaWYgKCFzdHIuZXF1YWxzKCIwMTIzNDUiKSkgeworICAgIAkJZXJybG4oIkZhaWwgY29udmVydGluZyBzdXBwbGVtZW50YXJpZXMgaW4gYXJyYXkgdG8gQk1QICIgKworICAgIAkJICAgICAgImNoYXJhY3RlcnMiKTsKKyAgICAJfQorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYuc2V0Q2hhckF0KHN0cmJ1ZmYsIC0xLCAwKTsKKyAgICAgICAgCWVycmxuKCJGQUlMOiBzZXR0aW5nIGNoYXJhY3RlciBhdCBpbnZhbGlkIG9mZnNldCIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAJU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgCX0KKyAgICAJdHJ5IHsKKyAgICAgICAgCVVURjE2LnNldENoYXJBdChhcnJheSwgbGVuZ3RoLCAtMSwgMCk7CisgICAgICAgIAllcnJsbigiRkFJTDogc2V0dGluZyBjaGFyYWN0ZXIgYXQgaW52YWxpZCBvZmZzZXQiKTsKKyAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgIAl9CisgICAgCXRyeSB7CisgICAgICAgIAlVVEYxNi5zZXRDaGFyQXQoc3RyYnVmZiwgbGVuZ3RoLCAwKTsKKyAgICAgICAgCWVycmxuKCJGQUlMOiBzZXR0aW5nIGNoYXJhY3RlciBhdCBpbnZhbGlkIG9mZnNldCIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAJU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgCX0KKyAgICAJdHJ5IHsKKyAgICAgICAgCVVURjE2LnNldENoYXJBdChhcnJheSwgbGVuZ3RoLCBsZW5ndGgsIDApOworICAgICAgICAJZXJybG4oIkZBSUw6IHNldHRpbmcgY2hhcmFjdGVyIGF0IGludmFsaWQgb2Zmc2V0Iik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAJfQorICAJfQorCisgIAkvKioKKyAgCSogVGVzdGluZyBVVEYxNiB2YWx1ZW9mIEFQSXMKKyAgCSovCisgIAlwdWJsaWMgdm9pZCBUZXN0VmFsdWVPZigpCisgIAl7CisgICAgCWlmICghVVRGMTYudmFsdWVPZigweDYxKS5lcXVhbHMoImEiKSB8fCAKKyAgICAgICAgCSFVVEYxNi52YWx1ZU9mKDB4MTAwMDApLmVxdWFscygiXHVkODAwXHVkYzAwIikpIHsKKyAgICAgICAgCWVycmxuKCJGQUlMOiB2YWx1ZW9mKGNoYXIzMikiKTsKKyAgICAJfQorICAgIAlTdHJpbmcgc3RyID0gbmV3IFN0cmluZygiMDEyMzRcdWQ4MDBcdWRjMDA1Njc4OSIpOworICAgIAlTdHJpbmdCdWZmZXIgc3RyYnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoc3RyKTsKKyAgICAJY2hhciBhcnJheVtdID0gc3RyLnRvQ2hhckFycmF5KCk7CisgICAgCWludCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CisgICAgCisgICAgCVN0cmluZyBleHBlY3RlZFtdID0geyIwIiwgIjEiLCAiMiIsICIzIiwgIjQiLCAiXHVkODAwXHVkYzAwIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgCQkiXHVkODAwXHVkYzAwIiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSJ9OworICAgIAlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSArKykgeworICAgICAgICAJaWYgKCFVVEYxNi52YWx1ZU9mKHN0ciwgaSkuZXF1YWxzKGV4cGVjdGVkW2ldKSB8fAorICAgICAgICAgICAgCSFVVEYxNi52YWx1ZU9mKHN0cmJ1ZmYsIGkpLmVxdWFscyhleHBlY3RlZFtpXSkgfHwKKyAgICAgICAgICAgIAkhVVRGMTYudmFsdWVPZihhcnJheSwgMCwgbGVuZ3RoLCBpKS5lcXVhbHMoZXhwZWN0ZWRbaV0pKSB7CisgICAgICAgICAgICAJZXJybG4oIkZBSUw6IHZhbHVlT2YoKSBleHBlY3RlZCAiICsgZXhwZWN0ZWRbaV0pOworICAgICAgICAJfQorICAgIAl9CisgICAgCXRyeSB7CisgICAgICAgIAlVVEYxNi52YWx1ZU9mKHN0ciwgLTEpOworICAgICAgICAJZXJybG4oIkZBSUw6IG91dCBvZiBib3VuZHMgZXJyb3IgZXhwZWN0ZWQiKTsKKyAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgIAl9CisgICAgCXRyeSB7CisgICAgICAgIAlVVEYxNi52YWx1ZU9mKHN0cmJ1ZmYsIC0xKTsKKyAgICAgICAgCWVycmxuKCJGQUlMOiBvdXQgb2YgYm91bmRzIGVycm9yIGV4cGVjdGVkIik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAJfQorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYudmFsdWVPZihhcnJheSwgMCwgbGVuZ3RoLCAtMSk7CisgICAgICAgIAllcnJsbigiRkFJTDogb3V0IG9mIGJvdW5kcyBlcnJvciBleHBlY3RlZCIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAJU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgCX0KKyAgICAJdHJ5IHsKKyAgICAgICAgCVVURjE2LnZhbHVlT2Yoc3RyLCBsZW5ndGgpOworICAgICAgICAJZXJybG4oIkZBSUw6IG91dCBvZiBib3VuZHMgZXJyb3IgZXhwZWN0ZWQiKTsKKyAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgIAl9CisgICAgCXRyeSB7CisgICAgICAgIAlVVEYxNi52YWx1ZU9mKHN0cmJ1ZmYsIGxlbmd0aCk7CisgICAgICAgIAllcnJsbigiRkFJTDogb3V0IG9mIGJvdW5kcyBlcnJvciBleHBlY3RlZCIpOworICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAJU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgCX0KKyAgICAJdHJ5IHsKKyAgICAgICAgCVVURjE2LnZhbHVlT2YoYXJyYXksIDAsIGxlbmd0aCwgbGVuZ3RoKTsKKyAgICAgICAgCWVycmxuKCJGQUlMOiBvdXQgb2YgYm91bmRzIGVycm9yIGV4cGVjdGVkIik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAJfQorICAgIAlpZiAoIVVURjE2LnZhbHVlT2YoYXJyYXksIDYsIGxlbmd0aCwgMCkuZXF1YWxzKCJcdWRjMDAiKSB8fAorICAgICAgICAJIVVURjE2LnZhbHVlT2YoYXJyYXksIDAsIDYsIDUpLmVxdWFscygiXHVkODAwIikpIHsKKyAgICAgICAgCWVycmxuKCJGQUlMOiBlcnJvciBnZXR0aW5nIHBhcnRpYWwgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIiKTsKKyAgICAJfQorICAgIAl0cnkgeworICAgICAgICAJVVRGMTYudmFsdWVPZihhcnJheSwgMywgNSwgLTEpOworICAgICAgICAJZXJybG4oIkZBSUw6IG91dCBvZiBib3VuZHMgZXJyb3IgZXhwZWN0ZWQiKTsKKyAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgIAl9CisgICAgCXRyeSB7CisgICAgICAgIAlVVEYxNi52YWx1ZU9mKGFycmF5LCAzLCA1LCAzKTsKKyAgICAgICAgCWVycmxuKCJGQUlMOiBvdXQgb2YgYm91bmRzIGVycm9yIGV4cGVjdGVkIik7CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAJfQorICAJfQorICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0SW5kZXhPZigpCisgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvLzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQorICAgICAgICBTdHJpbmcgdGVzdDEgICAgID0gInRlc3QgdGVzdCB0dGVzdCB0ZXRlc3QgdGVzdGVzdGVzdHN0dCI7CisgICAgICAgIFN0cmluZyB0ZXN0MiAgICAgPSAidGVzdCI7CisgICAgICAgIGludCAgICB0ZXN0Q2hhcjEgPSAweDc0OworICAgICAgICBpbnQgICAgdGVzdENoYXIyID0gMHgyMDQwMjsKKyAgICAgICAgLy8gaW50ICAgIHRlc3RDaGFyMyA9IDB4ZGMwMjsKKyAgICAgICAgLy8gaW50ICAgIHRlc3RDaGFyNCA9IDB4ZDg0MTsKKyAgICAgICAgU3RyaW5nIHRlc3QzICAgICA9ICJcdWQ4NDFcdWRjMDJcdTAwNzFcdWRjMDJcdWQ4NDFcdTAwNzFcdWQ4NDFcdWRjMDJcdTAwNzFcdTAwNzJcdWQ4NDFcdWRjMDJcdTAwNzFcdWQ4NDFcdWRjMDJcdTAwNzFcdWRjMDJcdWQ4NDFcdTAwNzMiOworICAgICAgICBTdHJpbmcgdGVzdDQgICAgID0gVUNoYXJhY3Rlci50b1N0cmluZyh0ZXN0Q2hhcjIpOworCisgICAgICAgIGlmIChVVEYxNi5pbmRleE9mKHRlc3QxLCB0ZXN0MikgIT0gMCB8fAorICAgICAgICAgICAgVVRGMTYuaW5kZXhPZih0ZXN0MSwgdGVzdDIsIDApICE9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJpbmRleE9mIGZhaWxlZDogZXhwZWN0ZWQgdG8gZmluZCAnIiArIHRlc3QyICsgCisgICAgICAgICAgICAgICAgICAiJyBhdCBwb3NpdGlvbiAwIGluIHRleHQgJyIgKyB0ZXN0MSArICInIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVURjE2LmluZGV4T2YodGVzdDEsIHRlc3RDaGFyMSkgIT0gMCB8fAorICAgICAgICAgICAgVVRGMTYuaW5kZXhPZih0ZXN0MSwgdGVzdENoYXIxLCAwKSAhPSAwKSB7CisgICAgICAgICAgICBlcnJsbigiaW5kZXhPZiBmYWlsZWQ6IGV4cGVjdGVkIHRvIGZpbmQgMHgiICsgCisgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKHRlc3RDaGFyMSkgKyAKKyAgICAgICAgICAgICAgICAgICIgYXQgcG9zaXRpb24gMCBpbiB0ZXh0ICciICsgdGVzdDEgKyAiJyIpOworICAgICAgICB9CisgICAgICAgIGlmIChVVEYxNi5pbmRleE9mKHRlc3QzLCB0ZXN0Q2hhcjIpICE9IDAgfHwKKyAgICAgICAgICAgIFVURjE2LmluZGV4T2YodGVzdDMsIHRlc3RDaGFyMiwgMCkgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oImluZGV4T2YgZmFpbGVkOiBleHBlY3RlZCB0byBmaW5kIDB4IiArIAorICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyh0ZXN0Q2hhcjIpICsgCisgICAgICAgICAgICAgICAgICAiIGF0IHBvc2l0aW9uIDAgaW4gdGV4dCAnIiArIFV0aWxpdHkuaGV4KHRlc3QzKSArICInIik7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRlc3Q1ID0gIlx1ZDg0MVx1ZDg0MVx1ZGMwMiI7CisgICAgICAgIGlmIChVVEYxNi5pbmRleE9mKHRlc3Q1LCB0ZXN0Q2hhcjIpICE9IDEgfHwKKyAgICAgICAgICAgIFVURjE2LmluZGV4T2YodGVzdDUsIHRlc3RDaGFyMiwgMCkgIT0gMSkgeworICAgICAgICAgICAgZXJybG4oImluZGV4T2YgZmFpbGVkOiBleHBlY3RlZCB0byBmaW5kIDB4IiArIAorICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyh0ZXN0Q2hhcjIpICsgCisgICAgICAgICAgICAgICAgICAiIGF0IHBvc2l0aW9uIDAgaW4gdGV4dCAnIiArIFV0aWxpdHkuaGV4KHRlc3QzKSArICInIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVURjE2Lmxhc3RJbmRleE9mKHRlc3QxLCB0ZXN0MikgIT0gMjkgfHwKKyAgICAgICAgICAgIFVURjE2Lmxhc3RJbmRleE9mKHRlc3QxLCB0ZXN0MiwgdGVzdDEubGVuZ3RoKCkpICE9IDI5KSB7CisgICAgICAgICAgICBlcnJsbigibGFzdEluZGV4T2YgZmFpbGVkOiBleHBlY3RlZCB0byBmaW5kICciICsgdGVzdDIgKyAKKyAgICAgICAgICAgICAgICAgICInIGF0IHBvc2l0aW9uIDI5IGluIHRleHQgJyIgKyB0ZXN0MSArICInIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVURjE2Lmxhc3RJbmRleE9mKHRlc3QxLCB0ZXN0Q2hhcjEpICE9IDM1IHx8CisgICAgICAgICAgICBVVEYxNi5sYXN0SW5kZXhPZih0ZXN0MSwgdGVzdENoYXIxLCB0ZXN0MS5sZW5ndGgoKSkgIT0gMzUpIHsKKyAgICAgICAgICAgIGVycmxuKCJsYXN0SW5kZXhPZiBmYWlsZWQ6IGV4cGVjdGVkIHRvIGZpbmQgMHgiICsgCisgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKHRlc3RDaGFyMSkgKyAKKyAgICAgICAgICAgICAgICAgICIgYXQgcG9zaXRpb24gMzUgaW4gdGV4dCAnIiArIHRlc3QxICsgIiciKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoVVRGMTYubGFzdEluZGV4T2YodGVzdDMsIHRlc3RDaGFyMikgIT0gMTMgfHwKKyAgICAgICAgICAgIFVURjE2Lmxhc3RJbmRleE9mKHRlc3QzLCB0ZXN0Q2hhcjIsIHRlc3QzLmxlbmd0aCgpKSAhPSAxMykgeworICAgICAgICAgICAgZXJybG4oImluZGV4T2YgZmFpbGVkOiBleHBlY3RlZCB0byBmaW5kIDB4IiArIAorICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyh0ZXN0Q2hhcjIpICsgCisgICAgICAgICAgICAgICAgICAiIGF0IHBvc2l0aW9uIDEzIGluIHRleHQgJyIgKyBVdGlsaXR5LmhleCh0ZXN0MykgKyAiJyIpOworICAgICAgICB9CisgICAgICAgIGludCBvY2N1cnJlbmNlcyA9IDA7CisgICAgICAgIGZvciAoaW50IHN0YXJ0UG9zID0gMDsgc3RhcnRQb3MgIT0gLTEgJiYgc3RhcnRQb3MgPCB0ZXN0MS5sZW5ndGgoKTspCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zID0gVVRGMTYuaW5kZXhPZih0ZXN0MSwgdGVzdDIsIHN0YXJ0UG9zKTsKKyAgICAgICAgICAgIGlmIChzdGFydFBvcyA+PSAwKSB7CisgICAgICAgICAgICAgICAgKysgb2NjdXJyZW5jZXM7CisgICAgICAgICAgICAgICAgc3RhcnRQb3MgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAob2NjdXJyZW5jZXMgIT0gNikgeworICAgICAgICAgICAgZXJybG4oImluZGV4T2YgZmFpbGVkOiBleHBlY3RlZCB0byBmaW5kIDYgb2NjdXJyZW5jZXMsIGZvdW5kICIgCisgICAgICAgICAgICAgICAgICArIG9jY3VycmVuY2VzKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBvY2N1cnJlbmNlcyA9IDA7CisgICAgICAgIGZvciAoaW50IHN0YXJ0UG9zID0gMTA7IHN0YXJ0UG9zICE9IC0xICYmIHN0YXJ0UG9zIDwgdGVzdDEubGVuZ3RoKCk7KQorICAgICAgICB7CisgICAgICAgICAgICBzdGFydFBvcyA9IFVURjE2LmluZGV4T2YodGVzdDEsIHRlc3QyLCBzdGFydFBvcyk7CisgICAgICAgICAgICBpZiAoc3RhcnRQb3MgPj0gMCkgeworICAgICAgICAgICAgICAgICsrIG9jY3VycmVuY2VzOworICAgICAgICAgICAgICAgIHN0YXJ0UG9zICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9jY3VycmVuY2VzICE9IDQpIHsKKyAgICAgICAgICAgIGVycmxuKCJpbmRleE9mIHdpdGggc3RhcnRpbmcgb2Zmc2V0IGZhaWxlZDogZXhwZWN0ZWQgdG8gZmluZCA0IG9jY3VycmVuY2VzLCBmb3VuZCAiIAorICAgICAgICAgICAgICAgICAgKyBvY2N1cnJlbmNlcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9jY3VycmVuY2VzID0gMDsKKyAgICAgICAgZm9yIChpbnQgc3RhcnRQb3MgPSAwOworICAgICAgICAgICAgc3RhcnRQb3MgIT0gLTEgJiYgc3RhcnRQb3MgPCB0ZXN0My5sZW5ndGgoKTspIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zID0gVVRGMTYuaW5kZXhPZih0ZXN0MywgdGVzdDQsIHN0YXJ0UG9zKTsKKyAgICAgICAgICAgIGlmIChzdGFydFBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgICsrIG9jY3VycmVuY2VzOworICAgICAgICAgICAgICAgIHN0YXJ0UG9zICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9jY3VycmVuY2VzICE9IDQpIHsKKyAgICAgICAgICAgIGVycmxuKCJpbmRleE9mIGZhaWxlZDogZXhwZWN0ZWQgdG8gZmluZCA0IG9jY3VycmVuY2VzLCBmb3VuZCAiIAorICAgICAgICAgICAgKyBvY2N1cnJlbmNlcyk7CisgICAgICAgIH0KKworICAgICAgICBvY2N1cnJlbmNlcyA9IDA7CisgICAgICAgIGZvciAoaW50IHN0YXJ0UG9zID0gMTA7CisgICAgICAgICAgICAgc3RhcnRQb3MgIT0gLTEgJiYgc3RhcnRQb3MgPCB0ZXN0My5sZW5ndGgoKTspIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zID0gVVRGMTYuaW5kZXhPZih0ZXN0MywgdGVzdDQsIHN0YXJ0UG9zKTsKKyAgICAgICAgICAgIGlmIChzdGFydFBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgICsrIG9jY3VycmVuY2VzOyAKKyAgICAgICAgICAgICAgICBzdGFydFBvcyArPSAyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChvY2N1cnJlbmNlcyAhPSAyKSB7CisgICAgICAgICAgICBlcnJsbigiaW5kZXhPZiBmYWlsZWQ6IGV4cGVjdGVkIHRvIGZpbmQgMiBvY2N1cnJlbmNlcywgZm91bmQgIiAKKyAgICAgICAgICAgICAgICAgICsgb2NjdXJyZW5jZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvY2N1cnJlbmNlcyA9IDA7CisgICAgICAgIGZvciAoaW50IHN0YXJ0UG9zID0gMDsKKyAgICAgICAgICAgIHN0YXJ0UG9zICE9IC0xICYmIHN0YXJ0UG9zIDwgdGVzdDEubGVuZ3RoKCk7KSB7CisgICAgICAgICAgICBzdGFydFBvcyA9IFVURjE2LmluZGV4T2YodGVzdDEsIHRlc3RDaGFyMSwgc3RhcnRQb3MpOworICAgICAgICAgICAgaWYgKHN0YXJ0UG9zICE9IC0xKSB7IAorICAgICAgICAgICAgICAgICsrIG9jY3VycmVuY2VzOyAKKyAgICAgICAgICAgICAgICBzdGFydFBvcyArPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChvY2N1cnJlbmNlcyAhPSAxNikgeworICAgICAgICAgICAgZXJybG4oImluZGV4T2Ygd2l0aCBjaGFyYWN0ZXIgZmFpbGVkOiBleHBlY3RlZCB0byBmaW5kIDE2IG9jY3VycmVuY2VzLCBmb3VuZCAiIAorICAgICAgICAgICAgICAgICAgKyBvY2N1cnJlbmNlcyk7CisgICAgICAgIH0KKworICAgICAgICBvY2N1cnJlbmNlcyA9IDA7CisgICAgICAgIGZvciAoaW50IHN0YXJ0UG9zID0gMTA7CisgICAgICAgICAgICBzdGFydFBvcyAhPSAtMSAmJiBzdGFydFBvcyA8IHRlc3QxLmxlbmd0aCgpOykgeworICAgICAgICAgICAgc3RhcnRQb3MgPSBVVEYxNi5pbmRleE9mKHRlc3QxLCB0ZXN0Q2hhcjEsIHN0YXJ0UG9zKTsKKyAgICAgICAgICAgIGlmIChzdGFydFBvcyAhPSAtMSkgeyAKKyAgICAgICAgICAgICAgICArKyBvY2N1cnJlbmNlczsgCisgICAgICAgICAgICAgICAgc3RhcnRQb3MgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAob2NjdXJyZW5jZXMgIT0gMTIpIHsKKyAgICAgICAgICAgIGVycmxuKCJpbmRleE9mIHdpdGggY2hhcmFjdGVyICYgc3RhcnQgb2Zmc2V0IGZhaWxlZDogZXhwZWN0ZWQgdG8gZmluZCAxMiBvY2N1cnJlbmNlcywgZm91bmQgIiAKKyAgICAgICAgICAgICsgb2NjdXJyZW5jZXMpOworICAgICAgICB9CisKKyAgICAgICAgb2NjdXJyZW5jZXMgPSAwOworICAgICAgICBmb3IgKGludCBzdGFydFBvcyA9IDA7CisgICAgICAgICAgICBzdGFydFBvcyAhPSAtMSAmJiBzdGFydFBvcyA8IHRlc3QzLmxlbmd0aCgpOykgeworICAgICAgICAgICAgc3RhcnRQb3MgPSBVVEYxNi5pbmRleE9mKHRlc3QzLCB0ZXN0Q2hhcjIsIHN0YXJ0UG9zKTsKKyAgICAgICAgICAgIGlmIChzdGFydFBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgICsrIG9jY3VycmVuY2VzOyAKKyAgICAgICAgICAgICAgICBzdGFydFBvcyArPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChvY2N1cnJlbmNlcyAhPSA0KSB7CisgICAgICAgICAgICBlcnJsbigiaW5kZXhPZiBmYWlsZWQ6IGV4cGVjdGVkIHRvIGZpbmQgNCBvY2N1cnJlbmNlcywgZm91bmQgIiAKKyAgICAgICAgICAgICAgICAgICsgb2NjdXJyZW5jZXMpOworICAgICAgICB9CisgICAgIAorICAgICAgICBvY2N1cnJlbmNlcyA9IDA7CisgICAgICAgIGZvciAoaW50IHN0YXJ0UG9zID0gNTsgc3RhcnRQb3MgIT0gLTEgJiYgc3RhcnRQb3MgPCB0ZXN0My5sZW5ndGgoKTspIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zID0gVVRGMTYuaW5kZXhPZih0ZXN0MywgdGVzdENoYXIyLCBzdGFydFBvcyk7CisgICAgICAgICAgICBpZiAoc3RhcnRQb3MgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICArKyBvY2N1cnJlbmNlczsgCisgICAgICAgICAgICAgICAgc3RhcnRQb3MgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAob2NjdXJyZW5jZXMgIT0gMykgeworICAgICAgICAgICAgZXJybG4oImluZGV4T2Ygd2l0aCBjaGFyYWN0ZXIgJiBzdGFydCAmIGVuZCBvZmZzZXRzIGZhaWxlZDogZXhwZWN0ZWQgdG8gZmluZCAyIG9jY3VycmVuY2VzLCBmb3VuZCAiIAorICAgICAgICAgICAgKyBvY2N1cnJlbmNlcyk7CisgICAgICAgIH0KKyAgICAgICAgb2NjdXJyZW5jZXMgPSAwOworICAgICAgICBmb3IgKGludCBzdGFydFBvcyA9IDMyOyBzdGFydFBvcyAhPSAtMTspIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zID0gVVRGMTYubGFzdEluZGV4T2YodGVzdDEsIHRlc3QyLCBzdGFydFBvcyk7CisgICAgICAgICAgICBpZiAoc3RhcnRQb3MgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICArKyBvY2N1cnJlbmNlczsKKyAgICAgICAgICAgICAgICBzdGFydFBvcyAtPSA1OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChvY2N1cnJlbmNlcyAhPSA2KSB7CisgICAgICAgICAgICBlcnJsbigibGFzdEluZGV4T2Ygd2l0aCBzdGFydGluZyBhbmQgZW5kaW5nIG9mZnNldHMgZmFpbGVkOiBleHBlY3RlZCB0byBmaW5kIDQgb2NjdXJyZW5jZXMsIGZvdW5kICIgCisgICAgICAgICAgICAgICAgICArIG9jY3VycmVuY2VzKTsKKyAgICAgICAgfQorICAgICAgICBvY2N1cnJlbmNlcyA9IDA7CisgICAgICAgIGZvciAoaW50IHN0YXJ0UG9zID0gMzI7IHN0YXJ0UG9zICE9IC0xOykgeworICAgICAgICAgICAgc3RhcnRQb3MgPSBVVEYxNi5sYXN0SW5kZXhPZih0ZXN0MSwgdGVzdENoYXIxLCBzdGFydFBvcyk7CisgICAgICAgICAgICBpZiAoc3RhcnRQb3MgIT0gLTEpIHsgCisgICAgICAgICAgICAgICAgKysgb2NjdXJyZW5jZXM7CisgICAgICAgICAgICAgICAgc3RhcnRQb3MgLT0gNTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAob2NjdXJyZW5jZXMgIT0gNykgeworICAgICAgICAgICAgZXJybG4oImxhc3RJbmRleE9mIHdpdGggY2hhcmFjdGVyICYgc3RhcnQgJiBlbmQgb2Zmc2V0cyBmYWlsZWQ6IGV4cGVjdGVkIHRvIGZpbmQgMTEgb2NjdXJyZW5jZXMsIGZvdW5kICIgCisgICAgICAgICAgICArIG9jY3VycmVuY2VzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vdGVzdGluZyBVQ2hhcjMyCisgICAgICAgIG9jY3VycmVuY2VzID0gMDsKKyAgICAgICAgZm9yIChpbnQgc3RhcnRQb3MgPSB0ZXN0My5sZW5ndGgoKTsgc3RhcnRQb3MgIT0gLTE7KSB7CisgICAgICAgICAgICBzdGFydFBvcyA9IFVURjE2Lmxhc3RJbmRleE9mKHRlc3QzLCB0ZXN0Q2hhcjIsIHN0YXJ0UG9zIC0gNSk7CisgICAgICAgICAgICBpZiAoc3RhcnRQb3MgIT0gLTEpIHsgCisgICAgICAgICAgICAgICAgKysgb2NjdXJyZW5jZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9jY3VycmVuY2VzICE9IDMpIHsKKyAgICAgICAgICAgIGVycmxuKCJsYXN0SW5kZXhPZiB3aXRoIGNoYXJhY3RlciAmIHN0YXJ0ICYgZW5kIG9mZnNldHMgZmFpbGVkOiBleHBlY3RlZCB0byBmaW5kIDMgb2NjdXJyZW5jZXMsIGZvdW5kICIgCisgICAgICAgICAgICArIG9jY3VycmVuY2VzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gdGVzdGluZyBzdXBwbGVtZW50YXJ5CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhPRl9TVVBQTEVNRU5UQVJZX0NIQVJfLmxlbmd0aDsgaSArKykgeworICAgICAgICAJaW50IGNoID0gSU5ERVhPRl9TVVBQTEVNRU5UQVJZX0NIQVJfW2ldOworICAgICAgICAJZm9yIChpbnQgaiA9IDA7IGogPCBJTkRFWE9GX1NVUFBMRU1FTlRBUllfQ0hBUl9JTkRFWF9baV0ubGVuZ3RoOworICAgICAgICAJICAgICBqICsrKSB7CisgICAgICAgIAkgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIAkgICAgIGludCBleHBlY3RlZCA9IElOREVYT0ZfU1VQUExFTUVOVEFSWV9DSEFSX0lOREVYX1tpXVtqXTsKKyAgICAgICAgCSAgICAgaWYgIChqID4gMCkgeworICAgICAgICAJICAgICAJaW5kZXggPSBJTkRFWE9GX1NVUFBMRU1FTlRBUllfQ0hBUl9JTkRFWF9baV1baiAtIDFdICsgMTsKKyAgICAgICAgCSAgICAgfQorICAgICAgICAJICAgICBpZiAoVVRGMTYuaW5kZXhPZihJTkRFWE9GX1NVUFBMRU1FTlRBUllfU1RSSU5HXywgY2gsIGluZGV4KSAhPQorICAgICAgICAJICAgICAgICAgZXhwZWN0ZWQgfHwKKyAgICAgICAgCSAgICAgICAgIFVURjE2LmluZGV4T2YoSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUklOR18sIAorICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLnRvU3RyaW5nKGNoKSwgaW5kZXgpICE9CisgICAgICAgIAkgICAgICAgICBleHBlY3RlZCkgeworICAgICAgICAJICAgICAgICAgZXJybG4oIkZhaWxlZCBmaW5kaW5nIGluZGV4IGZvciBzdXBwbGVtZW50YXJ5IDB4IiArIAorICAgICAgICAJICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhjaCkpOworICAgICAgICAJICAgICB9CisgICAgICAgIAkgICAgIGluZGV4ID0gSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUklOR18ubGVuZ3RoKCk7CisgICAgICAgIAkgICAgIGlmIChqIDwgSU5ERVhPRl9TVVBQTEVNRU5UQVJZX0NIQVJfSU5ERVhfW2ldLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgCSAgICAgCWluZGV4ID0gSU5ERVhPRl9TVVBQTEVNRU5UQVJZX0NIQVJfSU5ERVhfW2ldW2ogKyAxXSAtIDE7CisgICAgICAgIAkgICAgIH0KKyAgICAgICAgCSAgICAgaWYgKFVURjE2Lmxhc3RJbmRleE9mKElOREVYT0ZfU1VQUExFTUVOVEFSWV9TVFJJTkdfLCBjaCwgCisgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCkgIT0gZXhwZWN0ZWQgfHwKKyAgICAgICAgCSAgICAgICAgIFVURjE2Lmxhc3RJbmRleE9mKElOREVYT0ZfU1VQUExFTUVOVEFSWV9TVFJJTkdfLCAKKyAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIudG9TdHJpbmcoY2gpLCBpbmRleCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBleHBlY3RlZCkgCisgICAgICAgIAkgICAgIHsKKyAgICAgICAgCSAgICAgICAgIGVycmxuKCJGYWlsZWQgZmluZGluZyBsYXN0IGluZGV4IGZvciBzdXBwbGVtZW50YXJ5IDB4IiArIAorICAgICAgICAJICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhjaCkpOworICAgICAgICAJICAgICB9CisgICAgICAgIAl9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUl9JTkRFWF8ubGVuZ3RoOyBpICsrKSB7CisgICAgICAgIAlpbnQgaW5kZXggPSAwOworICAgICAgICAJaW50IGV4cGVjdGVkID0gSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUl9JTkRFWF9baV07CisgICAgICAgIAlpZiAgKGkgPiAwKSB7CisgICAgICAgIAkgICAgIGluZGV4ID0gSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUl9JTkRFWF9baSAtIDFdICsgMTsKKyAgICAgICAgCX0KKyAgICAgICAgCWlmIChVVEYxNi5pbmRleE9mKElOREVYT0ZfU1VQUExFTUVOVEFSWV9TVFJJTkdfLCAKKyAgICAgICAgCSAgICAgICAgICAgICAgICAgIElOREVYT0ZfU1VQUExFTUVOVEFSWV9TVFJfLCBpbmRleCkgIT0gZXhwZWN0ZWQpIHsKKyAgICAgICAgCSAgICBlcnJsbigiRmFpbGVkIGZpbmRpbmcgaW5kZXggZm9yIHN1cHBsZW1lbnRhcnkgc3RyaW5nICIgKyAKKyAgICAgICAgCSAgICAgICAgICBoZXgoSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUklOR18pKTsKKyAgICAgICAgCX0KKyAgICAgICAgCWluZGV4ID0gSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUklOR18ubGVuZ3RoKCk7CisgICAgICAgIAlpZiAoaSA8IElOREVYT0ZfU1VQUExFTUVOVEFSWV9TVFJfSU5ERVhfLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgCSAgICBpbmRleCA9IElOREVYT0ZfU1VQUExFTUVOVEFSWV9TVFJfSU5ERVhfW2kgKyAxXSAtIDE7CisgICAgICAgIAl9CisgICAgICAgIAlpZiAoVVRGMTYubGFzdEluZGV4T2YoSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUklOR18sIAorICAgICAgICAJICAgICAgICAgICAgICAgICAgSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUl8sIGluZGV4KSAhPSBleHBlY3RlZCkgeworICAgICAgICAJICAgIGVycmxuKCJGYWlsZWQgZmluZGluZyBsYXN0IGluZGV4IGZvciBzdXBwbGVtZW50YXJ5IHN0cmluZyAiICsgCisgICAgICAgIAkgICAgICAgICAgaGV4KElOREVYT0ZfU1VQUExFTUVOVEFSWV9TVFJJTkdfKSk7CisgICAgICAgIAl9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFJlcGxhY2UoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHRlc3QxID0gIk9uZSBwb3RhdG8sIHR3byBwb3RhdG8sIHRocmVlIHBvdGF0bywgZm91clxuIjsKKyAgICAgICAgU3RyaW5nIHRlc3QyID0gInBvdGF0byI7CisgICAgICAgIFN0cmluZyB0ZXN0MyA9ICJNSVNTSVNTSVBQSSI7CisKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IFVURjE2LnJlcGxhY2UodGVzdDEsIHRlc3QyLCB0ZXN0Myk7CisgICAgICAgIFN0cmluZyBleHBlY3RlZFZhbHVlID0gCisgICAgICAgICAgICAiT25lIE1JU1NJU1NJUFBJLCB0d28gTUlTU0lTU0lQUEksIHRocmVlIE1JU1NJU1NJUFBJLCBmb3VyXG4iOworICAgICAgICBpZiAoIXJlc3VsdC5lcXVhbHMoZXhwZWN0ZWRWYWx1ZSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJmaW5kQW5kUmVwbGFjZSBmYWlsZWQ6IGV4cGVjdGVkIFwiIiArIGV4cGVjdGVkVmFsdWUgKyAKKyAgICAgICAgICAgICAgICAgICJcIiwgZ290IFwiIiArIHRlc3QxICsgIlwiLiIpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IFVURjE2LnJlcGxhY2UodGVzdDEsIHRlc3QzLCB0ZXN0Mik7CisgICAgICAgIGV4cGVjdGVkVmFsdWUgPSB0ZXN0MTsKKyAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKGV4cGVjdGVkVmFsdWUpKSB7CisgICAgICAgICAgICBlcnJsbigiZmluZEFuZFJlcGxhY2UgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyBleHBlY3RlZFZhbHVlICsgCisgICAgICAgICAgICAgICAgICAiXCIsIGdvdCBcIiIgKyB0ZXN0MSArICJcIi4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gVVRGMTYucmVwbGFjZSh0ZXN0MSwgJywnLCAnZScpOworICAgICAgICBleHBlY3RlZFZhbHVlID0gIk9uZSBwb3RhdG9lIHR3byBwb3RhdG9lIHRocmVlIHBvdGF0b2UgZm91clxuIjsKKyAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKGV4cGVjdGVkVmFsdWUpKSB7CisgICAgICAgICAgICBlcnJsbigiZmluZEFuZFJlcGxhY2UgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyBleHBlY3RlZFZhbHVlICsgCisgICAgICAgICAgICAgICAgICAiXCIsIGdvdCBcIiIgKyB0ZXN0MSArICJcIi4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gVVRGMTYucmVwbGFjZSh0ZXN0MSwgJywnLCAweDEwMDAwKTsKKyAgICAgICAgZXhwZWN0ZWRWYWx1ZSA9ICJPbmUgcG90YXRvXHVkODAwXHVkYzAwIHR3byBwb3RhdG9cdWQ4MDBcdWRjMDAgdGhyZWUgcG90YXRvXHVkODAwXHVkYzAwIGZvdXJcbiI7CisgICAgICAgIGlmICghcmVzdWx0LmVxdWFscyhleHBlY3RlZFZhbHVlKSkgeworICAgICAgICAgICAgZXJybG4oImZpbmRBbmRSZXBsYWNlIGZhaWxlZDogZXhwZWN0ZWQgXCIiICsgZXhwZWN0ZWRWYWx1ZSArIAorICAgICAgICAgICAgICAgICAgIlwiLCBnb3QgXCIiICsgdGVzdDEgKyAiXCIuIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IFVURjE2LnJlcGxhY2UodGVzdDEsICJwb3RhdG8iLCAiXHVkODAwXHVkYzAwXHVkODAxXHVkYzAxIik7CisgICAgICAgIGV4cGVjdGVkVmFsdWUgPSAiT25lIFx1ZDgwMFx1ZGMwMFx1ZDgwMVx1ZGMwMSwgdHdvIFx1ZDgwMFx1ZGMwMFx1ZDgwMVx1ZGMwMSwgdGhyZWUgXHVkODAwXHVkYzAwXHVkODAxXHVkYzAxLCBmb3VyXG4iOworICAgICAgICBpZiAoIXJlc3VsdC5lcXVhbHMoZXhwZWN0ZWRWYWx1ZSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJmaW5kQW5kUmVwbGFjZSBmYWlsZWQ6IGV4cGVjdGVkIFwiIiArIGV4cGVjdGVkVmFsdWUgKyAKKyAgICAgICAgICAgICAgICAgICJcIiwgZ290IFwiIiArIHRlc3QxICsgIlwiLiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmcgdGVzdDQgPSAiXHVkODAwXHVkODAwXHVkYzAwXHVkODAwXHVkYzAwXHVkYzAwXHVkODAwXHVkODAwXHVkYzAwXHVkODAwXHVkYzAwXHVkYzAwIjsKKyAgICAgICAgcmVzdWx0ID0gVVRGMTYucmVwbGFjZSh0ZXN0NCwgMHhkODAwLCAnQScpOworICAgICAgICBleHBlY3RlZFZhbHVlID0gIkFcdWQ4MDBcdWRjMDBcdWQ4MDBcdWRjMDBcdWRjMDBBXHVkODAwXHVkYzAwXHVkODAwXHVkYzAwXHVkYzAwIjsKKyAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKGV4cGVjdGVkVmFsdWUpKSB7CisgICAgICAgICAgICBlcnJsbigiZmluZEFuZFJlcGxhY2UgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyBleHBlY3RlZFZhbHVlICsgCisgICAgICAgICAgICAgICAgICAiXCIsIGdvdCBcIiIgKyB0ZXN0MSArICJcIi4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gVVRGMTYucmVwbGFjZSh0ZXN0NCwgMHhkQzAwLCAnQScpOworICAgICAgICBleHBlY3RlZFZhbHVlID0gIlx1ZDgwMFx1ZDgwMFx1ZGMwMFx1ZDgwMFx1ZGMwMEFcdWQ4MDBcdWQ4MDBcdWRjMDBcdWQ4MDBcdWRjMDBBIjsKKyAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKGV4cGVjdGVkVmFsdWUpKSB7CisgICAgICAgICAgICBlcnJsbigiZmluZEFuZFJlcGxhY2UgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyBleHBlY3RlZFZhbHVlICsgCisgICAgICAgICAgICAgICAgICAiXCIsIGdvdCBcIiIgKyB0ZXN0MSArICJcIi4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gVVRGMTYucmVwbGFjZSh0ZXN0NCwgMHgxMDAwMCwgJ0EnKTsKKyAgICAgICAgZXhwZWN0ZWRWYWx1ZSA9ICJcdWQ4MDBBQVx1ZGMwMFx1ZDgwMEFBXHVkYzAwIjsKKyAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKGV4cGVjdGVkVmFsdWUpKSB7CisgICAgICAgICAgICBlcnJsbigiZmluZEFuZFJlcGxhY2UgZmFpbGVkOiBleHBlY3RlZCBcIiIgKyBleHBlY3RlZFZhbHVlICsgCisgICAgICAgICAgICAgICAgICAiXCIsIGdvdCBcIiIgKyB0ZXN0MSArICJcIi4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0UmV2ZXJzZSgpCisgICAgeworICAgICAgICBTdHJpbmdCdWZmZXIgdGVzdCA9IG5ldyBTdHJpbmdCdWZmZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3dhcmRzIHdvcmRzIHNheSB0byB1c2VkIEkiKTsKKworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gVVRGMTYucmV2ZXJzZSh0ZXN0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQudG9TdHJpbmcoKS5lcXVhbHMoIkkgZGVzdSBvdCB5YXMgc2Ryb3cgc2RyYXdrY2FiIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJyZXZlcnNlKCkgZmFpbGVkOiAgRXhwZWN0ZWQgXCJJIGRlc3Ugb3QgeWFzIHNkcm93IHNkcmF3a2NhYlwiLFxuIGdvdCBcIiIKKyAgICAgICAgICAgICsgcmVzdWx0ICsgIlwiIik7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nQnVmZmVyIHRlc3RidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIFVURjE2LmFwcGVuZCh0ZXN0YnVmZmVyLCAweDJmOTk5KTsKKyAgICAgICAgVVRGMTYuYXBwZW5kKHRlc3RidWZmZXIsIDB4MWQxNWYpOworICAgICAgICBVVEYxNi5hcHBlbmQodGVzdGJ1ZmZlciwgMHgwMGM0KTsKKyAgICAgICAgVVRGMTYuYXBwZW5kKHRlc3RidWZmZXIsIDB4MWVkMCk7CisgICAgICAgIHJlc3VsdCA9IFVURjE2LnJldmVyc2UodGVzdGJ1ZmZlcik7CisgICAgICAgIGlmIChyZXN1bHQuY2hhckF0KDApICE9IDB4MWVkMCB8fCAKKyAgICAgICAgICAgIHJlc3VsdC5jaGFyQXQoMSkgIT0gMHhjNCB8fCAKKyAgICAgICAgICAgIFVURjE2LmNoYXJBdChyZXN1bHQsIDIpICE9IDB4MWQxNWYgfHwgCisgICAgICAgICAgICBVVEYxNi5jaGFyQXQocmVzdWx0LCA0KSE9MHgyZjk5OSkgeworICAgICAgICAgICAgZXJybG4oInJldmVyc2UoKSBmYWlsZWQgd2l0aCBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0aW5nIHRoZSBzZXR0ZXIgYW5kIGdldHRlciBhcGlzIGZvciBTdHJpbmdDb21wYXJhdG9yCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFN0cmluZ0NvbXBhcmF0b3IoKSAKKyAgICB7CisgICAgICAgIFVURjE2LlN0cmluZ0NvbXBhcmF0b3IgY29tcGFyZSA9IG5ldyBVVEYxNi5TdHJpbmdDb21wYXJhdG9yKCk7CisgICAgICAgIGlmIChjb21wYXJlLmdldENvZGVQb2ludENvbXBhcmUoKSAhPSBmYWxzZSkgeworICAgICAgICAgICAgZXJybG4oIkRlZmF1bHQgc3RyaW5nIGNvbXBhcmF0b3Igc2hvdWxkIGJlIGNvZGUgdW5pdCBjb21wYXJlIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbXBhcmUuZ2V0SWdub3JlQ2FzZSgpICE9IGZhbHNlKSB7CisgICAgICAgICAgICBlcnJsbigiRGVmYXVsdCBzdHJpbmcgY29tcGFyYXRvciBzaG91bGQgYmUgY2FzZSBzZW5zaXRpdmUgY29tcGFyZSIpOworICAgICAgICB9CisgICAgICAgIGlmIChjb21wYXJlLmdldElnbm9yZUNhc2VPcHRpb24oKSAKKyAgICAgICAgICAgICE9IFVURjE2LlN0cmluZ0NvbXBhcmF0b3IuRk9MRF9DQVNFX0RFRkFVTFQpIHsKKyAgICAgICAgICAgIGVycmxuKCJEZWZhdWx0IHN0cmluZyBjb21wYXJhdG9yIHNob3VsZCBoYXZlIGZvbGQgY2FzZSBkZWZhdWx0IGNvbXBhcmUiKTsKKyAgICAgICAgfQorICAgICAgICBjb21wYXJlLnNldENvZGVQb2ludENvbXBhcmUodHJ1ZSk7CisgICAgICAgIGlmIChjb21wYXJlLmdldENvZGVQb2ludENvbXBhcmUoKSAhPSB0cnVlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBjb2RlIHBvaW50IGNvbXBhcmUiKTsKKyAgICAgICAgfSAgICAgICAKKyAgICAgICAgY29tcGFyZS5zZXRDb2RlUG9pbnRDb21wYXJlKGZhbHNlKTsKKyAgICAgICAgaWYgKGNvbXBhcmUuZ2V0Q29kZVBvaW50Q29tcGFyZSgpICE9IGZhbHNlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBjb2RlIHBvaW50IGNvbXBhcmUiKTsKKyAgICAgICAgfSAgIAorICAgICAgICBjb21wYXJlLnNldElnbm9yZUNhc2UodHJ1ZSwgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCk7CisgICAgICAgIGlmIChjb21wYXJlLmdldElnbm9yZUNhc2UoKSAhPSB0cnVlCisgICAgICAgICAgICB8fCBjb21wYXJlLmdldElnbm9yZUNhc2VPcHRpb24oKSAKKyAgICAgICAgICAgICAgICAhPSBVVEYxNi5TdHJpbmdDb21wYXJhdG9yLkZPTERfQ0FTRV9ERUZBVUxUKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBpZ25vcmUgY2FzZSBhbmQgb3B0aW9ucyIpOworICAgICAgICB9ICAgCisgICAgICAgIGNvbXBhcmUuc2V0SWdub3JlQ2FzZShmYWxzZSwgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kpOworICAgICAgICBpZiAoY29tcGFyZS5nZXRJZ25vcmVDYXNlKCkgIT0gZmFsc2UKKyAgICAgICAgICAgIHx8IGNvbXBhcmUuZ2V0SWdub3JlQ2FzZU9wdGlvbigpIAorICAgICAgICAgICAgICAgICE9IFVURjE2LlN0cmluZ0NvbXBhcmF0b3IuRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBpZ25vcmUgY2FzZSBhbmQgb3B0aW9ucyIpOworICAgICAgICB9CisgICAgICAgIGNvbXBhcmUuc2V0SWdub3JlQ2FzZSh0cnVlLCBVVEYxNi5TdHJpbmdDb21wYXJhdG9yLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSk7CisgICAgICAgIGlmIChjb21wYXJlLmdldElnbm9yZUNhc2UoKSAhPSB0cnVlCisgICAgICAgICAgICB8fCBjb21wYXJlLmdldElnbm9yZUNhc2VPcHRpb24oKSAKKyAgICAgICAgICAgICAgICAhPSBVVEYxNi5TdHJpbmdDb21wYXJhdG9yLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIHNldHRpbmcgaWdub3JlIGNhc2UgYW5kIG9wdGlvbnMiKTsKKyAgICAgICAgfSAgCisgICAgICAgIGNvbXBhcmUuc2V0SWdub3JlQ2FzZShmYWxzZSwgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCk7CisgICAgICAgIGlmIChjb21wYXJlLmdldElnbm9yZUNhc2UoKSAhPSBmYWxzZQorICAgICAgICAgICAgfHwgY29tcGFyZS5nZXRJZ25vcmVDYXNlT3B0aW9uKCkgCisgICAgICAgICAgICAgICAgIT0gVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIHNldHRpbmcgaWdub3JlIGNhc2UgYW5kIG9wdGlvbnMiKTsKKyAgICAgICAgfSAgICAKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENvZGVQb2ludENvbXBhcmUoKQorICAgIHsKKyAgICAgICAgLy8gdGhlc2Ugc3RyaW5ncyBhcmUgaW4gYXNjZW5kaW5nIG9yZGVyCisgICAgICAgIFN0cmluZyBzdHJbXSA9IHsiXHUwMDYxIiwgIlx1MjBhY1x1ZDgwMSIsICJcdTIwYWNcdWQ4MDBcdWRjMDAiLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAiXHVkODAwIiwgIlx1ZDgwMFx1ZmY2MSIsICJcdWRmZmYiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdWZmNjFcdWRmZmYiLCAiXHVmZjYxXHVkODAwXHVkYzAyIiwgIlx1ZDgwMFx1ZGMwMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiXHVkODRkXHVkYzU2In07CisgICAgICAgIFVURjE2LlN0cmluZ0NvbXBhcmF0b3IgY3Bjb21wYXJlIAorICAgICAgICAgICAgPSBuZXcgVVRGMTYuU3RyaW5nQ29tcGFyYXRvcih0cnVlLCBmYWxzZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCk7CisgICAgICAgIFVURjE2LlN0cmluZ0NvbXBhcmF0b3IgY3Vjb21wYXJlIAorICAgICAgICAgICAgPSBuZXcgVVRGMTYuU3RyaW5nQ29tcGFyYXRvcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGggLSAxOyArKyBpKSB7CisgICAgICAgICAgICBpZiAoY3Bjb21wYXJlLmNvbXBhcmUoc3RyW2ldLCBzdHJbaSArIDFdKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yOiBjb21wYXJlKCkgaW4gY29kZSBwb2ludCBvcmRlciBmYWlscyBmb3Igc3RyaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KHN0cltpXSkgKyAiIGFuZCAiIAorICAgICAgICAgICAgICAgICAgICAgICsgVXRpbGl0eS5oZXgoc3RyW2kgKyAxXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gdGVzdCBjb2RlIHVuaXQgY29tcGFyZQorICAgICAgICAgICAgaWYgKGN1Y29tcGFyZS5jb21wYXJlKHN0cltpXSwgc3RyW2kgKyAxXSkgCisgICAgICAgICAgICAgICAgIT0gc3RyW2ldLmNvbXBhcmVUbyhzdHJbaSArIDFdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvcjogY29tcGFyZSgpIGluIGNvZGUgdW5pdCBvcmRlciBmYWlscyBmb3Igc3RyaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICArIFV0aWxpdHkuaGV4KHN0cltpXSkgKyAiIGFuZCAiIAorICAgICAgICAgICAgICAgICAgICAgICsgVXRpbGl0eS5oZXgoc3RyW2kgKyAxXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RDYXNlQ29tcGFyZSgpIAorICAgIHsKKyAgICAgICAgU3RyaW5nIG1peGVkID0gIlx1MDA2MVx1MDA0Mlx1MDEzMVx1MDNhM1x1MDBkZlx1ZmIwM1x1ZDkzZlx1ZGZmZiI7CisgICAgICAgIFN0cmluZyBvdGhlckRlZmF1bHQgPSAiXHUwMDQxXHUwMDYyXHUwMTMxXHUwM2MzXHUwMDczXHUwMDUzXHUwMDQ2XHUwMDY2XHUwMDQ5XHVkOTNmXHVkZmZmIjsKKyAgICAgICAgU3RyaW5nIG90aGVyRXhjbHVkZVNwZWNpYWxJID0gIlx1MDA0MVx1MDA2Mlx1MDEzMVx1MDNjM1x1MDA1M1x1MDA3M1x1MDA2Nlx1MDA0Nlx1MDA2OVx1ZDkzZlx1ZGZmZiI7CisgICAgICAgIFN0cmluZyBkaWZmZXJlbnQgPSAiXHUwMDQxXHUwMDYyXHUwMTMxXHUwM2MzXHUwMDczXHUwMDUzXHUwMDQ2XHUwMDY2XHUwMDQ5XHVkOTNmXHVkZmZkIjsKKyAgICAKKyAgICAgICAgVVRGMTYuU3RyaW5nQ29tcGFyYXRvciBjb21wYXJlID0gbmV3IFVURjE2LlN0cmluZ0NvbXBhcmF0b3IoKTsKKyAgICAgICAgY29tcGFyZS5zZXRJZ25vcmVDYXNlKHRydWUsIFVURjE2LlN0cmluZ0NvbXBhcmF0b3IuRk9MRF9DQVNFX0RFRkFVTFQpOworICAgICAgICAvLyB0ZXN0IHVfc3RyY2FzZWNtcCgpCisgICAgICAgIGludCByZXN1bHQgPSBjb21wYXJlLmNvbXBhcmUobWl4ZWQsIG90aGVyRGVmYXVsdCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oImVycm9yOiBkZWZhdWx0IGNvbXBhcmUobWl4ZWQsIG90aGVyKSA9ICIgKyByZXN1bHQKKyAgICAgICAgICAgICAgICAgICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyB0ZXN0IHVfc3RyY2FzZWNtcCgpIC0gZXhjbHVkZSBzcGVjaWFsIGkgCisgICAgICAgIGNvbXBhcmUuc2V0SWdub3JlQ2FzZSh0cnVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5TdHJpbmdDb21wYXJhdG9yLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSk7CisgICAgICAgIHJlc3VsdCA9IGNvbXBhcmUuY29tcGFyZShtaXhlZCwgb3RoZXJFeGNsdWRlU3BlY2lhbEkpOworICAgICAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJlcnJvcjogZXhjbHVkZV9pIGNvbXBhcmUobWl4ZWQsIG90aGVyKSA9ICIgKyByZXN1bHQgCisgICAgICAgICAgICAgICAgICArICIgaW5zdGVhZCBvZiAwIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gdGVzdCB1X3N0cmNhc2VjbXAoKQorICAgICAgICBjb21wYXJlLnNldElnbm9yZUNhc2UodHJ1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5TdHJpbmdDb21wYXJhdG9yLkZPTERfQ0FTRV9ERUZBVUxUKTsKKyAgICAgICAgcmVzdWx0ID0gY29tcGFyZS5jb21wYXJlKG1peGVkLCBkaWZmZXJlbnQpOworICAgICAgICBpZiAocmVzdWx0IDw9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJlcnJvcjogZGVmYXVsdCBjb21wYXJlKG1peGVkLCBkaWZmZXJlbnQpID0gIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICAgKyAiIGluc3RlYWQgb2YgcG9zaXRpdmUiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gdGVzdCBzdWJzdHJpbmdzIC0gc3RvcCBiZWZvcmUgdGhlIHNoYXJwIHMgKFUrMDBkZikKKyAgICAgICAgY29tcGFyZS5zZXRJZ25vcmVDYXNlKHRydWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCk7CisgICAgICAgIHJlc3VsdCA9IGNvbXBhcmUuY29tcGFyZShtaXhlZC5zdWJzdHJpbmcoMCwgNCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50LnN1YnN0cmluZygwLCA0KSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oImVycm9yOiBkZWZhdWx0IGNvbXBhcmUobWl4ZWQgc3Vic3RyaW5nLCBkaWZmZXJlbnQgc3Vic3RyaW5nKSA9ICIgCisgICAgICAgICAgICAgICAgICAgICsgcmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgfQorICAgICAgICAvLyB0ZXN0IHN1YnN0cmluZ3MgLSBzdG9wIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNoYXJwIHMgKFUrMDBkZikgCisgICAgICAgIGNvbXBhcmUuc2V0SWdub3JlQ2FzZSh0cnVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LlN0cmluZ0NvbXBhcmF0b3IuRk9MRF9DQVNFX0RFRkFVTFQpOworICAgICAgICByZXN1bHQgPSBjb21wYXJlLmNvbXBhcmUobWl4ZWQuc3Vic3RyaW5nKDAsIDUpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudC5zdWJzdHJpbmcoMCwgNSkpOworICAgICAgICBpZiAocmVzdWx0IDw9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJlcnJvcjogZGVmYXVsdCBjb21wYXJlKG1peGVkIHN1YnN0cmluZywgZGlmZmVyZW50IHN1YnN0cmluZykgPSAiIAorICAgICAgICAgICAgICAgICAgICArIHJlc3VsdCArICIgaW5zdGVhZCBvZiBwb3NpdGl2ZSIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEhhc01vcmVDb2RlUG9pbnRzVGhhbigpCisgICAgeworICAgICAgICBTdHJpbmcgc3RyID0gIlx1MDA2MVx1MDA2Mlx1ZDgwMFx1ZGMwMFx1ZDgwMVx1ZGMwMVx1MDA2M1x1ZDgwMlx1MDA2NCIKKyAgICAgICAgICAgICAgICAgICAgICsgIlx1ZGMwM1x1MDA2NVx1MDA2Nlx1ZDgwNFx1ZGMwNFx1ZDgwNVx1ZGMwNVx1MDA2NyI7CisgICAgICAgIGludCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIHdoaWxlIChsZW5ndGggPj0gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbGVuZ3RoOyArKyBpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHMgPSBzdHIuc3Vic3RyaW5nKDAsIGkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IG51bWJlciA9IC0xOyBudW1iZXIgPD0gKChsZW5ndGggLSBpKSArIDIpOyArKyBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmbGFnID0gVVRGMTYuaGFzTW9yZUNvZGVQb2ludHNUaGFuKHMsIG51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnICE9IChVVEYxNi5jb3VudENvZGVQb2ludChzKSA+IG51bWJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJoYXNNb3JlQ29kZVBvaW50c1RoYW4oIiArIFV0aWxpdHkuaGV4KHMpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCAiICsgbnVtYmVyICsgIikgPSAiICsgZmxhZyArICIgaXMgd3JvbmciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tIGxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gdGVzdGluZyBmb3IgbnVsbCBiYWQgaW5wdXQgCisgICAgICAgIGZvcihsZW5ndGggPSAtMTsgbGVuZ3RoIDw9IDE7ICsrIGxlbmd0aCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbGVuZ3RoOyArKyBpKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgbnVtYmVyID0gLTI7IG51bWJlciA8PSAyOyArKyBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmbGFnID0gVVRGMTYuaGFzTW9yZUNvZGVQb2ludHNUaGFuKChTdHJpbmcpbnVsbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZyAhPSAoVVRGMTYuY291bnRDb2RlUG9pbnQoKFN0cmluZyludWxsKSA+IG51bWJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJoYXNNb3JlQ29kZVBvaW50c1RoYW4obnVsbCwgIiArIG51bWJlciArICIpID0gIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICsgZmxhZyArICIgaXMgd3JvbmciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbGVuZ3RoID0gc3RyLmxlbmd0aCgpOworICAgICAgICB3aGlsZSAobGVuZ3RoID49IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGxlbmd0aDsgKysgaSkgeworICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcihzdHIuc3Vic3RyaW5nKDAsIGkpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBudW1iZXIgPSAtMTsgbnVtYmVyIDw9ICgobGVuZ3RoIC0gaSkgKyAyKTsgKysgbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZmxhZyA9IFVURjE2Lmhhc01vcmVDb2RlUG9pbnRzVGhhbihzLCBudW1iZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZyAhPSAoVVRGMTYuY291bnRDb2RlUG9pbnQocykgPiBudW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiaGFzTW9yZUNvZGVQb2ludHNUaGFuKCIgKyBVdGlsaXR5LmhleChzKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgIiArIG51bWJlciArICIpID0gIiArIGZsYWcgKyAiIGlzIHdyb25nIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAtLSBsZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHRlc3RpbmcgZm9yIG51bGwgYmFkIGlucHV0IAorICAgICAgICBmb3IgKGxlbmd0aCA9IC0xOyBsZW5ndGggPD0gMTsgKysgbGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBsZW5ndGg7ICsrIGkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBudW1iZXIgPSAtMjsgbnVtYmVyIDw9IDI7ICsrIG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZsYWcgPSBVVEYxNi5oYXNNb3JlQ29kZVBvaW50c1RoYW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmdCdWZmZXIpbnVsbCwgbnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWcgCisgICAgICAgICAgICAgICAgICAgICAgICAhPSAoVVRGMTYuY291bnRDb2RlUG9pbnQoKFN0cmluZ0J1ZmZlciludWxsKSA+IG51bWJlcikpIAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiaGFzTW9yZUNvZGVQb2ludHNUaGFuKG51bGwsICIgKyBudW1iZXIgKyAiKSA9ICIgCisgICAgICAgICAgICAgICAgICAgICAgICArIGZsYWcgKyAiIGlzIHdyb25nIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNoYXIgc3RyYXJyYXlbXSA9IHN0ci50b0NoYXJBcnJheSgpOworICAgICAgICB3aGlsZSAobGVuZ3RoID49IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGxpbWl0ID0gMDsgbGltaXQgPD0gbGVuZ3RoOyArKyBsaW1pdCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHN0YXJ0ID0gMDsgc3RhcnQgPD0gbGltaXQ7ICsrIHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IG51bWJlciA9IC0xOyBudW1iZXIgPD0gKChsaW1pdCAtIHN0YXJ0KSArIDIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICArKyBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZmxhZyA9IFVURjE2Lmhhc01vcmVDb2RlUG9pbnRzVGhhbihzdHJhcnJheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgbGltaXQsIG51bWJlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZyAhPSAoVVRGMTYuY291bnRDb2RlUG9pbnQoc3RyYXJyYXksIHN0YXJ0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCkgPiBudW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oImhhc01vcmVDb2RlUG9pbnRzVGhhbigiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVXRpbGl0eS5oZXgoc3RyLnN1YnN0cmluZyhzdGFydCwgbGltaXQpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsICIgKyBzdGFydCArICIsICIgKyBsaW1pdCArICIsICIgKyBudW1iZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiKSA9ICIgKyBmbGFnICsgIiBpcyB3cm9uZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLS0gbGVuZ3RoOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyB0ZXN0aW5nIGZvciBudWxsIGJhZCBpbnB1dCAKKyAgICAgICAgZm9yIChsZW5ndGggPSAtMTsgbGVuZ3RoIDw9IDE7ICsrIGxlbmd0aCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbGVuZ3RoOyArKyBpKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgbnVtYmVyID0gLTI7IG51bWJlciA8PSAyOyArKyBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmbGFnID0gVVRGMTYuaGFzTW9yZUNvZGVQb2ludHNUaGFuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nQnVmZmVyKW51bGwsIG51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnIAorICAgICAgICAgICAgICAgICAgICAgICAgIT0gKFVURjE2LmNvdW50Q29kZVBvaW50KChTdHJpbmdCdWZmZXIpbnVsbCkgPiBudW1iZXIpKSAKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oImhhc01vcmVDb2RlUG9pbnRzVGhhbihudWxsLCAiICsgbnVtYmVyICsgIikgPSAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBmbGFnICsgIiBpcyB3cm9uZyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBiYWQgaW5wdXQKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFVURjE2Lmhhc01vcmVDb2RlUG9pbnRzVGhhbihzdHJhcnJheSwgLTIsIC0xLCA1KTsKKyAgICAgICAgICAgIGVycmxuKCJoYXNNb3JlQ29kZVBvaW50c1RoYW4oY2hhcmFycmF5KSB3aXRoIG5lZ2F0aXZlIGluZGV4ZXMgaGFzIHRvIHRocm93IGFuIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBVVEYxNi5oYXNNb3JlQ29kZVBvaW50c1RoYW4oc3RyYXJyYXksIDUsIDIsIDUpOworICAgICAgICAgICAgZXJybG4oImhhc01vcmVDb2RlUG9pbnRzVGhhbihjaGFyYXJyYXkpIHdpdGggbGltaXQgbGVzcyB0aGFuIHN0YXJ0IGluZGV4IGhhcyB0byB0aHJvdyBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKFVURjE2Lmhhc01vcmVDb2RlUG9pbnRzVGhhbihzdHJhcnJheSwgLTIsIDIsIDUpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImhhc01vcmVDb2RlUG9pbnRzVGhhbihjaGFyYXJyYXkpIHdpdGggbmVnYXRpdmUgc3RhcnQgaW5kZXhlcyBjYW4ndCByZXR1cm4gdHJ1ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9ICAgCisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZykKKyAgICB7CisgICAgCXRyeQorICAgICAgICB7CisgICAgICAgICAgICBVVEYxNlRlc3QgdGVzdCA9IG5ldyBVVEYxNlRlc3QoKTsKKyAgICAgICAgICAgIHRlc3QucnVuKGFyZyk7CisgICAgICAgICAgICAvLyB0ZXN0LlRlc3RDYXNlQ29tcGFyZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUklOR18gPQorICAgICAgICAiXHVkODQxXHVkYzAyXHUwMDcxXHVkYzAyXHVkODQxXHUwMDcxXHVkODQxXHVkYzAyXHUwMDcxXHUwMDcyIiArCisgICAgICAgICJcdWQ4NDFcdWRjMDJcdTAwNzFcdWQ4NDFcdWRjMDJcdTAwNzFcdWRjMDJcdWQ4NDFcdTAwNzMiOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBJTkRFWE9GX1NVUFBMRU1FTlRBUllfQ0hBUl9bXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAJCQl7MHg3MSwgMHhkODQxLCAweGRjMDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgIFVDaGFyYWN0ZXIuZ2V0Q29kZVBvaW50KChjaGFyKTB4ZDg0MSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpMHhkYzAyKX07CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IElOREVYT0ZfU1VQUExFTUVOVEFSWV9DSEFSX0lOREVYX1tdW10gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ezIsIDUsIDgsIDEyLCAxNX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHs0LCAxN30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHszLCAxNn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswLCA2LCAxMCwgMTN9ICAgICAgICAgICAgICAJCisJCQkJCQkJCQkgICAgICAgICAgICAgICAgfTsKKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUl8gPSAiXHVkYzAyXHVkODQxIjsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgSU5ERVhPRl9TVVBQTEVNRU5UQVJZX1NUUl9JTkRFWF9bXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHszLCAxNn07CQkJCQkJCQkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLy8gcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvbm9ybWFsaXplci9CYXNpY1Rlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL0Jhc2ljVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiNzk5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvbm9ybWFsaXplci9CYXNpY1Rlc3QuamF2YQpAQCAtMCwwICsxLDI1ODEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL0Jhc2ljVGVzdC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTEvMjYgMjM6MTY6NTggJAorICogJFJldmlzaW9uOiAxLjIyICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lm5vcm1hbGl6ZXI7CitpbXBvcnQgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK3B1YmxpYyBjbGFzcyBCYXNpY1Rlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBCYXNpY1Rlc3QoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgU3RyaW5nW11bXSBjYW5vblRlc3RzID0geworICAgICAgICAvLyBJbnB1dCAgICAgICAgICAgICAgICBEZWNvbXBvc2VkICAgICAgICAgICAgICBDb21wb3NlZAorICAgICAgICB7ICJjYXQiLCAgICAgICAgICAgICAgICAiY2F0IiwgICAgICAgICAgICAgICAgICAiY2F0IiAgICAgICAgICAgICAgIH0sCisgICAgICAgIHsgIlx1MDBlMGFyZHZhcmsiLCAgICAgICJhXHUwMzAwYXJkdmFyayIsICAgICAgICJcdTAwZTBhcmR2YXJrIiwgICAgfSwKKworICAgICAgICB7ICJcdTFlMGEiLCAgICAgICAgICAgICAiRFx1MDMwNyIsICAgICAgICAgICAgICAiXHUxZTBhIiAgICAgICAgICAgIH0sIC8vIEQtZG90X2Fib3ZlCisgICAgICAgIHsgIkRcdTAzMDciLCAgICAgICAgICAgICJEXHUwMzA3IiwgICAgICAgICAgICAgICJcdTFlMGEiICAgICAgICAgICAgfSwgLy8gRCBkb3RfYWJvdmUKKworICAgICAgICB7ICJcdTFlMGNcdTAzMDciLCAgICAgICAiRFx1MDMyM1x1MDMwNyIsICAgICAgICAiXHUxZTBjXHUwMzA3IiAgICAgIH0sIC8vIEQtZG90X2JlbG93IGRvdF9hYm92ZQorICAgICAgICB7ICJcdTFlMGFcdTAzMjMiLCAgICAgICAiRFx1MDMyM1x1MDMwNyIsICAgICAgICAiXHUxZTBjXHUwMzA3IiAgICAgIH0sIC8vIEQtZG90X2Fib3ZlIGRvdF9iZWxvdworICAgICAgICB7ICJEXHUwMzA3XHUwMzIzIiwgICAgICAiRFx1MDMyM1x1MDMwNyIsICAgICAgICAiXHUxZTBjXHUwMzA3IiAgICAgIH0sIC8vIEQgZG90X2JlbG93IGRvdF9hYm92ZQorCisgICAgICAgIHsgIlx1MWUxMFx1MDMwN1x1MDMyMyIsICJEXHUwMzI3XHUwMzIzXHUwMzA3IiwgICJcdTFlMTBcdTAzMjNcdTAzMDcifSwgLy8gRCBkb3RfYmVsb3cgY2VkaWxsYSBkb3RfYWJvdmUKKyAgICAgICAgeyAiRFx1MDMwN1x1MDMyOFx1MDMyMyIsIkRcdTAzMjhcdTAzMjNcdTAzMDciLCAgIlx1MWUwY1x1MDMyOFx1MDMwNyJ9LCAvLyBEIGRvdF9hYm92ZSBvZ29uZWsgZG90X2JlbG93CisKKyAgICAgICAgeyAiXHUxRTE0IiwgICAgICAgICAgICAgIkVcdTAzMDRcdTAzMDAiLCAgICAgICAgIlx1MUUxNCIgICAgICAgICAgICB9LCAvLyBFLW1hY3Jvbi1ncmF2ZQorICAgICAgICB7ICJcdTAxMTJcdTAzMDAiLCAgICAgICAiRVx1MDMwNFx1MDMwMCIsICAgICAgICAiXHUxRTE0IiAgICAgICAgICAgIH0sIC8vIEUtbWFjcm9uICsgZ3JhdmUKKyAgICAgICAgeyAiXHUwMGM4XHUwMzA0IiwgICAgICAgIkVcdTAzMDBcdTAzMDQiLCAgICAgICAgIlx1MDBjOFx1MDMwNCIgICAgICB9LCAvLyBFLWdyYXZlICsgbWFjcm9uCisKKyAgICAgICAgeyAiXHUyMTJiIiwgICAgICAgICAgICAgIkFcdTAzMGEiLCAgICAgICAgICAgICAgIlx1MDBjNSIgICAgICAgICAgICB9LCAvLyBhbmdzdHJvbV9zaWduCisgICAgICAgIHsgIlx1MDBjNSIsICAgICAgICAgICAgICJBXHUwMzBhIiwgICAgICAgICAgICAgICJcdTAwYzUiICAgICAgICAgICAgfSwgLy8gQS1yaW5nCisKKyAgICAgICAgeyAiXHUwMGM0ZmZpbiIsICAgICAgICAgIkFcdTAzMDhmZmluIiwgICAgICAgICAgIlx1MDBjNGZmaW4iICAgICAgICB9LAorICAgICAgICB7ICJcdTAwYzRcdUZCMDNuIiwgICAgICAiQVx1MDMwOFx1RkIwM24iLCAgICAgICAiXHUwMGM0XHVGQjAzbiIgICAgIH0sCisKKyAgICAgICAgeyAiXHUwMGZkZmZpbiIsICAgICAgICAgInlcdTAzMDFmZmluIiwgICAgICAgICAgIlx1MDBmZGZmaW4iICAgICAgICB9LCAvL3VwZGF0ZWQgd2l0aCAzLjAKKyAgICAgICAgeyAiXHUwMGZkXHVGQjAzbiIsICAgICAgInlcdTAzMDFcdUZCMDNuIiwgICAgICAgIlx1MDBmZFx1RkIwM24iICAgICB9LCAvL3VwZGF0ZWQgd2l0aCAzLjAKKworICAgICAgICB7ICJIZW5yeSBJViIsICAgICAgICAgICAiSGVucnkgSVYiLCAgICAgICAgICAgICAiSGVucnkgSVYiICAgICAgICAgIH0sCisgICAgICAgIHsgIkhlbnJ5IFx1MjE2MyIsICAgICAgICJIZW5yeSBcdTIxNjMiLCAgICAgICAgICJIZW5yeSBcdTIxNjMiICAgICAgfSwKKworICAgICAgICB7ICJcdTMwQUMiLCAgICAgICAgICAgICAiXHUzMEFCXHUzMDk5IiwgICAgICAgICAiXHUzMEFDIiAgICAgICAgICAgIH0sIC8vIGdhIChLYXRha2FuYSkKKyAgICAgICAgeyAiXHUzMEFCXHUzMDk5IiwgICAgICAgIlx1MzBBQlx1MzA5OSIsICAgICAgICAgIlx1MzBBQyIgICAgICAgICAgICB9LCAvLyBrYSArIHRlbgorICAgICAgICB7ICJcdUZGNzZcdUZGOUUiLCAgICAgICAiXHVGRjc2XHVGRjlFIiwgICAgICAgICAiXHVGRjc2XHVGRjlFIiAgICAgIH0sIC8vIGh3X2thICsgaHdfdGVuCisgICAgICAgIHsgIlx1MzBBQlx1RkY5RSIsICAgICAgICJcdTMwQUJcdUZGOUUiLCAgICAgICAgICJcdTMwQUJcdUZGOUUiICAgICAgfSwgLy8ga2EgKyBod190ZW4KKyAgICAgICAgeyAiXHVGRjc2XHUzMDk5IiwgICAgICAgIlx1RkY3Nlx1MzA5OSIsICAgICAgICAgIlx1RkY3Nlx1MzA5OSIgICAgICB9LCAvLyBod19rYSArIHRlbgorCisgICAgICAgIHsgIkFcdTAzMDBcdTAzMTYiLCAiQVx1MDMxNlx1MDMwMCIsICJcdTAwQzBcdTAzMTYiIH0sCisgICAgICAgIHsiXFxVMDAwMWQxNWVcXFUwMDAxZDE1N1xcVTAwMDFkMTY1XFxVMDAwMWQxNWUiLCJcXFUwMDAxRDE1N1xcVTAwMDFEMTY1XFxVMDAwMUQxNTdcXFUwMDAxRDE2NVxcVTAwMDFEMTU3XFxVMDAwMUQxNjUiLCAiXFxVMDAwMUQxNTdcXFUwMDAxRDE2NVxcVTAwMDFEMTU3XFxVMDAwMUQxNjVcXFUwMDAxRDE1N1xcVTAwMDFEMTY1In0sCisgICAgfTsKKworICAgIFN0cmluZ1tdW10gY29tcGF0VGVzdHMgPSB7CisgICAgICAgICAgICAvLyBJbnB1dCAgICAgICAgICAgICAgICBEZWNvbXBvc2VkICAgICAgICAgICAgICBDb21wb3NlZAorICAgICAgICB7ICJjYXQiLCAgICAgICAgICAgICAgICAgImNhdCIsICAgICAgICAgICAgICAgICAgICAgImNhdCIgICAgICAgICAgIH0sCisgICAgICAgIHsgIlx1RkI0ZiIsICAgICAgICAgICAgICJcdTA1RDBcdTA1REMiLCAgICAgICAgICJcdTA1RDBcdTA1REMiLCAgICAgfSwgLy8gQWxlZi1MYW1lZCB2cy4gQWxlZiwgTGFtZWQKKworICAgICAgICB7ICJcdTAwQzRmZmluIiwgICAgICAgICAiQVx1MDMwOGZmaW4iLCAgICAgICAgICAiXHUwMEM0ZmZpbiIgICAgICAgIH0sCisgICAgICAgIHsgIlx1MDBDNFx1RkIwM24iLCAgICAgICJBXHUwMzA4ZmZpbiIsICAgICAgICAgICJcdTAwQzRmZmluIiAgICAgICAgfSwgLy8gZmZpIGxpZ2F0dXJlIC0+IGYgKyBmICsgaQorCisgICAgICAgIHsgIlx1MDBmZGZmaW4iLCAgICAgICAgICJ5XHUwMzAxZmZpbiIsICAgICAgICAgICJcdTAwZmRmZmluIiAgICAgICAgfSwgICAgICAgIC8vdXBkYXRlZCBmb3IgMy4wCisgICAgICAgIHsgIlx1MDBmZFx1RkIwM24iLCAgICAgICJ5XHUwMzAxZmZpbiIsICAgICAgICAgICJcdTAwZmRmZmluIiAgICAgICAgfSwgLy8gZmZpIGxpZ2F0dXJlIC0+IGYgKyBmICsgaQorCisgICAgICAgIHsgIkhlbnJ5IElWIiwgICAgICAgICAgICJIZW5yeSBJViIsICAgICAgICAgICAgICJIZW5yeSBJViIgICAgICAgICAgfSwKKyAgICAgICAgeyAiSGVucnkgXHUyMTYzIiwgICAgICAgIkhlbnJ5IElWIiwgICAgICAgICAgICAgIkhlbnJ5IElWIiAgICAgICAgICB9LAorCisgICAgICAgIHsgIlx1MzBBQyIsICAgICAgICAgICAgICJcdTMwQUJcdTMwOTkiLCAgICAgICAgICJcdTMwQUMiICAgICAgICAgICAgfSwgLy8gZ2EgKEthdGFrYW5hKQorICAgICAgICB7ICJcdTMwQUJcdTMwOTkiLCAgICAgICAiXHUzMEFCXHUzMDk5IiwgICAgICAgICAiXHUzMEFDIiAgICAgICAgICAgIH0sIC8vIGthICsgdGVuCisKKyAgICAgICAgeyAiXHVGRjc2XHUzMDk5IiwgICAgICAgIlx1MzBBQlx1MzA5OSIsICAgICAgICAgIlx1MzBBQyIgICAgICAgICAgICB9LCAvLyBod19rYSArIHRlbgorCisgICAgICAgIC8qIFRoZXNlIHR3byBhcmUgYnJva2VuIGluIFVuaWNvZGUgMi4xLjIgYnV0IGZpeGVkIGluIDIuMS41IGFuZCBsYXRlciovCisgICAgICAgIHsgIlx1RkY3Nlx1RkY5RSIsICAgICAgICJcdTMwQUJcdTMwOTkiLCAgICAgICAgICJcdTMwQUMiICAgICAgICAgICAgfSwgLy8gaHdfa2EgKyBod190ZW4KKyAgICAgICAgeyAiXHUzMEFCXHVGRjlFIiwgICAgICAgIlx1MzBBQlx1MzA5OSIsICAgICAgICAgIlx1MzBBQyIgICAgICAgICAgICB9LCAvLyBrYSArIGh3X3RlbgorCisgICAgfTsKKworICAgIC8vIFdpdGggQ2Fub25pY2FsIGRlY29tcG9zaXRpb24sIEhhbmd1bCBzeWxsYWJsZXMgc2hvdWxkIGdldCBkZWNvbXBvc2VkCisgICAgLy8gaW50byBKYW1vLCBidXQgSmFtbyBjaGFyYWN0ZXJzIHNob3VsZCBub3QgYmUgZGVjb21wb3NlZCBpbnRvCisgICAgLy8gY29uam9pbmluZyBKYW1vCisgICAgU3RyaW5nW11bXSBoYW5ndWxDYW5vbiA9IHsKKyAgICAgICAgLy8gSW5wdXQgICAgICAgICAgICAgICAgRGVjb21wb3NlZCAgICAgICAgICAgICAgQ29tcG9zZWQKKyAgICAgICAgeyAiXHVkNGRiIiwgICAgICAgICAgICAgIlx1MTExMVx1MTE3MVx1MTFiNiIsICAgIlx1ZDRkYiIgICAgICAgIH0sCisgICAgICAgIHsgIlx1MTExMVx1MTE3MVx1MTFiNiIsICJcdTExMTFcdTExNzFcdTExYjYiLCAgICJcdWQ0ZGIiICAgICAgICB9LAorICAgIH07CisKKyAgICAvLyBXaXRoIGNvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbiB0dXJuZWQgb24sCisgICAgLy8gaXQgc2hvdWxkIGdvIGFsbCB0aGUgd2F5IGRvd24gdG8gY29uam9pbmluZyBKYW1vIGNoYXJhY3RlcnMuCisgICAgLy8gVEhJUyBJUyBOTyBMT05HRVIgVFJVRSBJTiBVTklDT0RFIHYyLjEuOCwgU08gVEhJUyBURVNUIElTIE9CU09MRVRFCisgICAgU3RyaW5nW11bXSBoYW5ndWxDb21wYXQgPSB7CisgICAgICAgIC8vIElucHV0ICAgICAgICBEZWNvbXBvc2VkICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NlZAorICAgICAgICAvLyB7ICJcdWQ0ZGIiLCAgICAgIlx1MTExMVx1MTE2ZVx1MTE3NVx1MTFhZlx1MTFjMiIsICAgIlx1ZDQ3OFx1MTE3NVx1MTFhZlx1MTFjMiIgIH0sCisgICAgfTsKKworICAgIHB1YmxpYyB2b2lkIFRlc3RIYW5ndWxDb21wb3NlKCkKKyAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3RhdGljIGNvbXBvc2l0aW9uIG1ldGhvZHMgd29yaworICAgICAgICBsb2dsbigiQ2Fub25pY2FsIGNvbXBvc2l0aW9uLi4uIik7CisgICAgICAgIHN0YXRpY1Rlc3QoTm9ybWFsaXplci5ORkMsIGhhbmd1bENhbm9uLCAgMik7CisgICAgICAgIGxvZ2xuKCJDb21wYXRpYmlsaXR5IGNvbXBvc2l0aW9uLi4uIik7CisgICAgICAgIHN0YXRpY1Rlc3QoTm9ybWFsaXplci5ORktDLCBoYW5ndWxDb21wYXQsIDIpOworICAgICAgICAvLyBOb3cgdHJ5IGl0ZXJhdGl2ZSBjb21wb3NpdGlvbi4uLi4KKyAgICAgICAgbG9nbG4oIkl0ZXJhdGl2ZSBjb21wb3NpdGlvbi4uLiIpOworICAgICAgICBOb3JtYWxpemVyIG5vcm0gPSBuZXcgTm9ybWFsaXplcigiIiwgTm9ybWFsaXplci5ORkMpOworICAgICAgICBpdGVyYXRlVGVzdChub3JtLCBoYW5ndWxDYW5vbiwgMik7CisKKyAgICAgICAgbm9ybS5zZXRNb2RlKE5vcm1hbGl6ZXIuTkZLRCk7CisgICAgICAgIGl0ZXJhdGVUZXN0KG5vcm0sIGhhbmd1bENvbXBhdCwgMik7CisKKyAgICAgICAgLy8gQW5kIGZpbmFsbHksIG1ha2Ugc3VyZSB5b3UgY2FuIGRvIGl0IGluIHJldmVyc2UgdG9vCisgICAgICAgIGxvZ2xuKCJSZXZlcnNlIGl0ZXJhdGlvbi4uLiIpOworICAgICAgICBub3JtLnNldE1vZGUoTm9ybWFsaXplci5ORkMpOworICAgICAgICBiYWNrQW5kRm9ydGgobm9ybSwgaGFuZ3VsQ2Fub24pOworICAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0SGFuZ3VsRGVjb21wKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRpYyBkZWNvbXBvc2l0aW9uIG1ldGhvZHMgd29yaworICAgICAgICBsb2dsbigiQ2Fub25pY2FsIGRlY29tcG9zaXRpb24uLi4iKTsKKyAgICAgICAgc3RhdGljVGVzdChOb3JtYWxpemVyLk5GRCwgaGFuZ3VsQ2Fub24sICAxKTsKKyAgICAgICAgbG9nbG4oIkNvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbi4uLiIpOworICAgICAgICBzdGF0aWNUZXN0KE5vcm1hbGl6ZXIuTkZLRCwgaGFuZ3VsQ29tcGF0LCAxKTsKKworICAgICAgICAgLy8gTm93IHRoZSBpdGVyYXRpdmUgZGVjb21wb3NpdGlvbiBtZXRob2RzLi4uCisgICAgICAgIGxvZ2xuKCJJdGVyYXRpdmUgZGVjb21wb3NpdGlvbi4uLiIpOworICAgICAgICBOb3JtYWxpemVyIG5vcm0gPSBuZXcgTm9ybWFsaXplcigiIiwgTm9ybWFsaXplci5ORkQpOworICAgICAgICBpdGVyYXRlVGVzdChub3JtLCBoYW5ndWxDYW5vbiwgMSk7CisKKyAgICAgICAgbm9ybS5zZXRNb2RlKE5vcm1hbGl6ZXIuTkZLRCk7CisgICAgICAgIGl0ZXJhdGVUZXN0KG5vcm0sIGhhbmd1bENvbXBhdCwgMSk7CisKKyAgICAgICAgLy8gQW5kIGZpbmFsbHksIG1ha2Ugc3VyZSB5b3UgY2FuIGRvIGl0IGluIHJldmVyc2UgdG9vCisgICAgICAgIGxvZ2xuKCJSZXZlcnNlIGl0ZXJhdGlvbi4uLiIpOworICAgICAgICBub3JtLnNldE1vZGUoTm9ybWFsaXplci5ORkQpOworICAgICAgICBiYWNrQW5kRm9ydGgobm9ybSwgaGFuZ3VsQ2Fub24pOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0Tm9uZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIE5vcm1hbGl6ZXIgbm9ybSA9IG5ldyBOb3JtYWxpemVyKCIiLCBOb3JtYWxpemVyLk5PTkUpOworICAgICAgICBpdGVyYXRlVGVzdChub3JtLCBjYW5vblRlc3RzLCAwKTsKKyAgICAgICAgc3RhdGljVGVzdChOb3JtYWxpemVyLk5PTkUsIGNhbm9uVGVzdHMsIDApOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0RGVjb21wKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgTm9ybWFsaXplciBub3JtID0gbmV3IE5vcm1hbGl6ZXIoIiIsIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgaXRlcmF0ZVRlc3Qobm9ybSwgY2Fub25UZXN0cywgMSk7CisgICAgICAgIHN0YXRpY1Rlc3QoTm9ybWFsaXplci5ORkQsIGNhbm9uVGVzdHMsIDEpOworICAgICAgICBkZWNvbXBvc2VUZXN0KE5vcm1hbGl6ZXIuTkZELCBjYW5vblRlc3RzLCAxKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29tcGF0RGVjb21wKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgTm9ybWFsaXplciBub3JtID0gbmV3IE5vcm1hbGl6ZXIoIiIsIE5vcm1hbGl6ZXIuTkZLRCk7CisgICAgICAgIGl0ZXJhdGVUZXN0KG5vcm0sIGNvbXBhdFRlc3RzLCAxKTsKKyAgICAgICAgc3RhdGljVGVzdChOb3JtYWxpemVyLk5GS0QsY29tcGF0VGVzdHMsIDEpOworICAgICAgICBkZWNvbXBvc2VUZXN0KE5vcm1hbGl6ZXIuTkZLRCxjb21wYXRUZXN0cywgMSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdENhbm9uQ29tcG9zZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIE5vcm1hbGl6ZXIgbm9ybSA9IG5ldyBOb3JtYWxpemVyKCIiLCBOb3JtYWxpemVyLk5GQyk7CisgICAgICAgIGl0ZXJhdGVUZXN0KG5vcm0sIGNhbm9uVGVzdHMsIDIpOworICAgICAgICBzdGF0aWNUZXN0KE5vcm1hbGl6ZXIuTkZDLCBjYW5vblRlc3RzLCAyKTsKKyAgICAgICAgY29tcG9zZVRlc3QoTm9ybWFsaXplci5ORkMsIGNhbm9uVGVzdHMsIDIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDb21wYXRDb21wb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgTm9ybWFsaXplciBub3JtID0gbmV3IE5vcm1hbGl6ZXIoIiIsIE5vcm1hbGl6ZXIuTkZLQyk7CisgICAgICAgIGl0ZXJhdGVUZXN0KG5vcm0sIGNvbXBhdFRlc3RzLCAyKTsKKyAgICAgICAgc3RhdGljVGVzdChOb3JtYWxpemVyLk5GS0MsY29tcGF0VGVzdHMsIDIpOworICAgICAgICBjb21wb3NlVGVzdChOb3JtYWxpemVyLk5GS0MsY29tcGF0VGVzdHMsIDIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RFeHBsb2RpbmdCYXNlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgLy8gXHUwMTdmIC0gTGF0aW4gc21hbGwgbGV0dGVyIGxvbmcgcworICAgICAgICAvLyBcdTAzMDcgLSBjb21iaW5pbmcgZG90IGFib3ZlCisgICAgICAgIC8vIFx1MWU2MSAtIExhdGluIHNtYWxsIGxldHRlciBzIHdpdGggZG90IGFib3ZlCisgICAgICAgIC8vIFx1MWU5YiAtIExhdGluIHNtYWxsIGxldHRlciBsb25nIHMgd2l0aCBkb3QgYWJvdmUKKyAgICAgICAgU3RyaW5nW11bXSBjYW5vbiA9IHsKKyAgICAgICAgICAgIC8vIElucHV0ICAgICAgICAgICAgICAgIERlY29tcG9zZWQgICAgICAgICAgICAgIENvbXBvc2VkCisgICAgICAgICAgICB7ICJUc2NodVx1MDE3ZiIsICAgICAgICAiVHNjaHVcdTAxN2YiLCAgICAgICAgICAiVHNjaHVcdTAxN2YiICAgIH0sCisgICAgICAgICAgICB7ICJUc2NodVx1MWU5YiIsICAgICAgICAiVHNjaHVcdTAxN2ZcdTAzMDciLCAgICAiVHNjaHVcdTFlOWIiICAgIH0sCisgICAgICAgIH07CisgICAgICAgIFN0cmluZ1tdW10gY29tcGF0ID0geworICAgICAgICAgICAgLy8gSW5wdXQgICAgICAgICAgICAgICAgRGVjb21wb3NlZCAgICAgICAgICAgICAgQ29tcG9zZWQKKyAgICAgICAgICAgIHsgIlx1MDE3ZiIsICAgICAgICAicyIsICAgICAgICAgICAgICAicyIgICAgICAgICAgIH0sCisgICAgICAgICAgICB7ICJcdTFlOWIiLCAgICAgICAgInNcdTAzMDciLCAgICAgICAgIlx1MWU2MSIgICAgICB9LAorICAgICAgICB9OworCisgICAgICAgIHN0YXRpY1Rlc3QoTm9ybWFsaXplci5ORkQsIGNhbm9uLCAgMSk7CisgICAgICAgIHN0YXRpY1Rlc3QoTm9ybWFsaXplci5ORkMsIGNhbm9uLCAgMik7CisKKyAgICAgICAgc3RhdGljVGVzdChOb3JtYWxpemVyLk5GS0QsIGNvbXBhdCwgMSk7CisgICAgICAgIHN0YXRpY1Rlc3QoTm9ybWFsaXplci5ORktDLCBjb21wYXQsIDIpOworCisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlIFRpYmV0YW4gdm93ZWwgc2lnbiBBQSwgMGY3MSwgd2FzIG1lc3NlZCB1cCBwcmlvciB0bworICAgICAqIFVuaWNvZGUgdmVyc2lvbiAyLjEuOS4KKyAgICAgKiBPbmNlIDIuMS45IG9yIDMuMCBpcyByZWxlYXNlZCwgdW5jb21tZW50IHRoaXMgdGVzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0VGliZXRhbigpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIFN0cmluZ1tdW10gZGVjb21wID0geworICAgICAgICAgICAgeyAiXHUwZjc3IiwgIlx1MGY3NyIsICJcdTBmYjJcdTBmNzFcdTBmODAiIH0KKyAgICAgICAgfTsKKyAgICAgICAgU3RyaW5nW11bXSBjb21wb3NlID0geworICAgICAgICAgICAgeyAiXHUwZmIyXHUwZjcxXHUwZjgwIiwgIlx1MGZiMlx1MGY3MVx1MGY4MCIsICJcdTBmYjJcdTBmNzFcdTBmODAiIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWNUZXN0KE5vcm1hbGl6ZXIuTkZELCBkZWNvbXAsIDEpOworICAgICAgICBzdGF0aWNUZXN0KE5vcm1hbGl6ZXIuTkZLRCxkZWNvbXAsIDIpOworICAgICAgICBzdGF0aWNUZXN0KE5vcm1hbGl6ZXIuTkZDLCBjb21wb3NlLCAxKTsKKyAgICAgICAgc3RhdGljVGVzdChOb3JtYWxpemVyLk5GS0MsY29tcG9zZSwgMik7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWFrZSBzdXJlIGNoYXJhY3RlcnMgaW4gdGhlIENvbXBvc2l0aW9uRXhjbHVzaW9uLnR4dCBsaXN0IGRvIG5vdCBnZXQKKyAgICAgKiBjb21wb3NlZCB0by4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29tcG9zaXRpb25FeGNsdXNpb24oKQorICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIC8vIFRoaXMgbGlzdCBpcyBnZW5lcmF0ZWQgZnJvbSBDb21wb3NpdGlvbkV4Y2x1c2lvbi50eHQuCisgICAgICAgIC8vIFVwZGF0ZSB3aGVuZXZlciB0aGUgbm9ybWFsaXplciB0YWJsZXMgYXJlIHVwZGF0ZWQuICBOb3RlCisgICAgICAgIC8vIHRoYXQgd2UgdGVzdCBhbGwgY2hhcmFjdGVycyBsaXN0ZWQsIGV2ZW4gdGhvc2UgdGhhdCBjYW4gYmUKKyAgICAgICAgLy8gZGVyaXZlZCBmcm9tIHRoZSBVbmljb2RlIERCIGFuZCBhcmUgdGhlcmVmb3JlIGNvbW1lbnRlZAorICAgICAgICAvLyBvdXQuCisgICAgICAgIFN0cmluZyBFWENMVURFRCA9CisgICAgICAgICAgICAiXHUwMzQwXHUwMzQxXHUwMzQzXHUwMzQ0XHUwMzc0XHUwMzdFXHUwMzg3XHUwOTU4IiArCisgICAgICAgICAgICAiXHUwOTU5XHUwOTVBXHUwOTVCXHUwOTVDXHUwOTVEXHUwOTVFXHUwOTVGXHUwOURDIiArCisgICAgICAgICAgICAiXHUwOUREXHUwOURGXHUwQTMzXHUwQTM2XHUwQTU5XHUwQTVBXHUwQTVCXHUwQTVFIiArCisgICAgICAgICAgICAiXHUwQjVDXHUwQjVEXHUwRjQzXHUwRjREXHUwRjUyXHUwRjU3XHUwRjVDXHUwRjY5IiArCisgICAgICAgICAgICAiXHUwRjczXHUwRjc1XHUwRjc2XHUwRjc4XHUwRjgxXHUwRjkzXHUwRjlEXHUwRkEyIiArCisgICAgICAgICAgICAiXHUwRkE3XHUwRkFDXHUwRkI5XHUxRjcxXHUxRjczXHUxRjc1XHUxRjc3XHUxRjc5IiArCisgICAgICAgICAgICAiXHUxRjdCXHUxRjdEXHUxRkJCXHUxRkJFXHUxRkM5XHUxRkNCXHUxRkQzXHUxRkRCIiArCisgICAgICAgICAgICAiXHUxRkUzXHUxRkVCXHUxRkVFXHUxRkVGXHUxRkY5XHUxRkZCXHUxRkZEXHUyMDAwIiArCisgICAgICAgICAgICAiXHUyMDAxXHUyMTI2XHUyMTJBXHUyMTJCXHUyMzI5XHUyMzJBXHVGOTAwXHVGQTEwIiArCisgICAgICAgICAgICAiXHVGQTEyXHVGQTE1XHVGQTIwXHVGQTIyXHVGQTI1XHVGQTI2XHVGQTJBXHVGQjFGIiArCisgICAgICAgICAgICAiXHVGQjJBXHVGQjJCXHVGQjJDXHVGQjJEXHVGQjJFXHVGQjJGXHVGQjMwXHVGQjMxIiArCisgICAgICAgICAgICAiXHVGQjMyXHVGQjMzXHVGQjM0XHVGQjM1XHVGQjM2XHVGQjM4XHVGQjM5XHVGQjNBIiArCisgICAgICAgICAgICAiXHVGQjNCXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2IiArCisgICAgICAgICAgICAiXHVGQjQ3XHVGQjQ4XHVGQjQ5XHVGQjRBXHVGQjRCXHVGQjRDXHVGQjREXHVGQjRFIjsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPEVYQ0xVREVELmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBhID0gU3RyaW5nLnZhbHVlT2YoRVhDTFVERUQuY2hhckF0KGkpKTsKKyAgICAgICAgICAgIFN0cmluZyBiID0gTm9ybWFsaXplci5ub3JtYWxpemUoYSwgTm9ybWFsaXplci5ORktEKTsKKyAgICAgICAgICAgIFN0cmluZyBjID0gTm9ybWFsaXplci5ub3JtYWxpemUoYiwgTm9ybWFsaXplci5ORkMpOworICAgICAgICAgICAgaWYgKGMuZXF1YWxzKGEpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBoZXgoYSkgKyAiIHggREVDT01QX0NPTVBBVCA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICBoZXgoYikgKyAiIHggQ09NUE9TRSA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICBoZXgoYykpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogIiArIGhleChhKSArICIgeCBERUNPTVBfQ09NUEFUID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgIGhleChiKSArICIgeCBDT01QT1NFID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgIGhleChjKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2Qgd29ya3MgdG9vLCBidXQgaXQgaXMgc29tZXdoYXQKKyAgICAgICAgLy8gaW5jZXN0dW91cy4gIEl0IHVzZXMgVUluZm8sIHdoaWNoIGlzIHRoZSBzYW1lIGRhdGFiYXNlIHRoYXQKKyAgICAgICAgLy8gTm9ybWFsaXplckJ1aWxkZXIgdXNlcywgc28gaWYgc29tZXRoaW5nIGlzIHdyb25nIHdpdGgKKyAgICAgICAgLy8gVUluZm8sIHRoZSBmb2xsb3dpbmcgdGVzdCB3b24ndCBzaG93IGl0LiAgQWxsIGl0IHdpbGwgc2hvdworICAgICAgICAvLyBpcyB0aGF0IE5vcm1hbGl6ZXJCdWlsZGVyIGhhcyBiZWVuIHJ1biB3aXRoIHdoYXRldmVyIHRoZQorICAgICAgICAvLyBjdXJyZW50IFVJbmZvIGlzLgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb21tZW50IHRoaXMgb3V0IGluIGZhdm9yIG9mIHRoZSB0ZXN0IGFib3ZlLCB3aGljaAorICAgICAgICAvLyBwcm92aWRlcyBpbmRlcGVuZGVudCB2ZXJpZmljYXRpb24gKGJ1dCBhbHNvIHJlcXVpcmVzCisgICAgICAgIC8vIGluZGVwZW5kZW50IHVwZGF0aW5nKS4KKy8vICAgICAgbG9nbG4oIi0tLSIpOworLy8gICAgICBVSW5mbyB1aW5mbyA9IG5ldyBVSW5mbygpOworLy8gICAgICBmb3IgKGludCBpPTA7IGk8PTB4RkZGRjsgKytpKSB7CisvLyAgICAgICAgICBpZiAoIXVpbmZvLmlzRXhjbHVkZWRDb21wb3NpdGlvbigoY2hhcilpKSB8fAorLy8gICAgICAgICAgICAgICghdWluZm8uaGFzQ2Fub25pY2FsRGVjb21wb3NpdGlvbigoY2hhcilpKSAmJgorLy8gICAgICAgICAgICAgICAhdWluZm8uaGFzQ29tcGF0aWJpbGl0eURlY29tcG9zaXRpb24oKGNoYXIpaSkpKSBjb250aW51ZTsKKy8vICAgICAgICAgIFN0cmluZyBhID0gU3RyaW5nLnZhbHVlT2YoKGNoYXIpaSk7CisvLyAgICAgICAgICBTdHJpbmcgYiA9IE5ld05vcm1hbGl6ZXIubm9ybWFsaXplKGEsTmV3Tm9ybWFsaXplci5ERUNPTVBfQ09NUEFULDApOworLy8gICAgICAgICAgU3RyaW5nIGMgPSBOZXdOb3JtYWxpemVyLm5vcm1hbGl6ZShiLE5ld05vcm1hbGl6ZXIuQ09NUE9TRSwwKTsKKy8vICAgICAgICAgIGlmIChjLmVxdWFscyhhKSkgeworLy8gICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgaGV4KGEpICsgIiB4IERFQ09NUF9DT01QQVQgPT4gIiArCisvLyAgICAgICAgICAgICAgICAgICAgaGV4KGIpICsgIiB4IENPTVBPU0UgPT4gIiArCisvLyAgICAgICAgICAgICAgICAgICAgaGV4KGMpKTsKKy8vICAgICAgICAgIH0gZWxzZSBpZiAoaXNWZXJib3NlKCkpIHsKKy8vICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBoZXgoYSkgKyAiIHggREVDT01QX0NPTVBBVCA9PiAiICsKKy8vICAgICAgICAgICAgICAgICAgICBoZXgoYikgKyAiIHggQ09NUE9TRSA9PiAiICsKKy8vICAgICAgICAgICAgICAgICAgICBoZXgoYykpOworLy8gICAgICAgICAgfQorLy8gICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBmb3IgYSBwcm9ibGVtIHRoYXQgc2hvd2VkIHVwIGp1c3QgYmVmb3JlIElDVSAxLjYgcmVsZWFzZQorICAgICAqIGhhdmluZyB0byBkbyB3aXRoIGNvbWJpbmluZyBjaGFyYWN0ZXJzIHdpdGggYW4gaW5kZXggb2YgemVyby4KKyAgICAgKiBTdWNoIGNoYXJhY3RlcnMgZG8gbm90IHBhcnRpY2lwYXRlIGluIGFueSBjYW5vbmljYWwKKyAgICAgKiBkZWNvbXBvc2l0aW9ucy4gIEhvd2V2ZXIsIGhhdmluZyBhbiBpbmRleCBvZiB6ZXJvIG1lYW5zIHRoYXQKKyAgICAgKiB0aGV5IGFsbCBzaGFyZSBvbmUgdHlwZU1hc2tbXSBlbnRyeSwgdGhhdCBpcywgdGhleSBhbGwgaGF2ZSB0bworICAgICAqIG1hcCB0byB0aGUgc2FtZSBjYW5vbmljYWwgY2xhc3MsIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSwgaW4KKyAgICAgKiByZWFsaXR5LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RaZXJvSW5kZXgoKQorICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIFN0cmluZ1tdIERBVEEgPSB7CisgICAgICAgICAgICAvLyBFeHBlY3QgY29sMSB4IENPTVBPU0VfQ09NUEFUID0+IGNvbDIKKyAgICAgICAgICAgIC8vIEV4cGVjdCBjb2wyIHggREVDT01QID0+IGNvbDMKKyAgICAgICAgICAgICJBXHUwMzE2XHUwMzAwIiwgIlx1MDBDMFx1MDMxNiIsICJBXHUwMzE2XHUwMzAwIiwKKyAgICAgICAgICAgICJBXHUwMzAwXHUwMzE2IiwgIlx1MDBDMFx1MDMxNiIsICJBXHUwMzE2XHUwMzAwIiwKKyAgICAgICAgICAgICJBXHUwMzI3XHUwMzAwIiwgIlx1MDBDMFx1MDMyNyIsICJBXHUwMzI3XHUwMzAwIiwKKyAgICAgICAgICAgICJjXHUwMzIxXHUwMzI3IiwgImNcdTAzMjFcdTAzMjciLCAiY1x1MDMyMVx1MDMyNyIsCisgICAgICAgICAgICAiY1x1MDMyN1x1MDMyMSIsICJcdTAwRTdcdTAzMjEiLCAiY1x1MDMyN1x1MDMyMSIsCisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0zKSB7CisgICAgICAgICAgICBTdHJpbmcgYSA9IERBVEFbaV07CisgICAgICAgICAgICBTdHJpbmcgYiA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGEsIE5vcm1hbGl6ZXIuTkZLQyk7CisgICAgICAgICAgICBTdHJpbmcgZXhwID0gREFUQVtpKzFdOworICAgICAgICAgICAgaWYgKGIuZXF1YWxzKGV4cCkpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBoZXgoYSkgKyAiIHggQ09NUE9TRV9DT01QQVQgPT4gIiArIGhleChiKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgaGV4KGEpICsgIiB4IENPTVBPU0VfQ09NUEFUID0+ICIgKyBoZXgoYikgKworICAgICAgICAgICAgICAgICAgICAgICIsIGV4cGVjdCAiICsgaGV4KGV4cCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYSA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGIsIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgIGV4cCA9IERBVEFbaSsyXTsKKyAgICAgICAgICAgIGlmIChhLmVxdWFscyhleHApKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9rOiAiICsgaGV4KGIpICsgIiB4IERFQ09NUCA9PiAiICsgaGV4KGEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBoZXgoYikgKyAiIHggREVDT01QID0+ICIgKyBoZXgoYSkgKworICAgICAgICAgICAgICAgICAgICAgICIsIGV4cGVjdCAiICsgaGV4KGV4cCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBmb3IgYSBwcm9ibGVtIGZvdW5kIGJ5IFZlcmlzaWduLiAgUHJvYmxlbSBpcyB0aGF0CisgICAgICogY2hhcmFjdGVycyBhdCB0aGUgc3RhcnQgb2YgYSBzdHJpbmcgYXJlIG5vdCBwdXQgaW4gY2Fub25pY2FsCisgICAgICogb3JkZXIgY29ycmVjdGx5IGJ5IGNvbXBvc2UoKSBpZiB0aGVyZSBpcyBubyBzdGFydGVyLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RWZXJpc2lnbigpCisgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgU3RyaW5nW10gaW5wdXRzID0geworICAgICAgICAgICAgIlx1MDViOFx1MDViOVx1MDViMVx1MDU5MVx1MDVjM1x1MDViMFx1MDVhY1x1MDU5ZiIsCisgICAgICAgICAgICAiXHUwNTkyXHUwNWI3XHUwNWJjXHUwNWE1XHUwNWIwXHUwNWMwXHUwNWM0XHUwNWFkIgorICAgICAgICB9OworICAgICAgICBTdHJpbmdbXSBvdXRwdXRzID0geworICAgICAgICAgICAgIlx1MDViMVx1MDViOFx1MDViOVx1MDU5MVx1MDVjM1x1MDViMFx1MDVhY1x1MDU5ZiIsCisgICAgICAgICAgICAiXHUwNWIwXHUwNWI3XHUwNWJjXHUwNWE1XHUwNTkyXHUwNWMwXHUwNWFkXHUwNWM0IgorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5wdXQgPSBpbnB1dHNbaV07CisgICAgICAgICAgICBTdHJpbmcgb3V0cHV0ID0gb3V0cHV0c1tpXTsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBOb3JtYWxpemVyLmRlY29tcG9zZShpbnB1dCwgZmFsc2UpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKG91dHB1dCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTCBpbnB1dDogIiArIGhleChpbnB1dCkpOworICAgICAgICAgICAgICAgIGVycmxuKCIgZGVjb21wb3NlOiAiICsgaGV4KHJlc3VsdCkpOworICAgICAgICAgICAgICAgIGVycmxuKCIgIGV4cGVjdGVkOiAiICsgaGV4KG91dHB1dCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gTm9ybWFsaXplci5jb21wb3NlKGlucHV0LCBmYWxzZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5lcXVhbHMob3V0cHV0KSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMIGlucHV0OiAiICsgaGV4KGlucHV0KSk7CisgICAgICAgICAgICAgICAgZXJybG4oIiAgIGNvbXBvc2U6ICIgKyBoZXgocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgZXJybG4oIiAgZXhwZWN0ZWQ6ICIgKyBoZXgob3V0cHV0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKyAgICBwdWJsaWMgdm9pZCAgVGVzdFF1aWNrQ2hlY2tSZXN1bHROTygpCisgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIGZpbmFsIGNoYXIgQ1BORkRbXSA9IHsweDAwQzUsIDB4MDQwNywgMHgxRTAwLCAweDFGNTcsIDB4MjIwQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMEFFLCAweEFDMDAsIDB4RDdBMywgMHhGQjM2LCAweEZCNEV9OworICAgICAgICBmaW5hbCBjaGFyIENQTkZDW10gPSB7MHgwMzQwLCAweDBGOTMsIDB4MUY3NywgMHgxRkJCLCAweDFGRUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCwgMHgyMzJBLCAweEY5MDAsIDB4RkExRSwgMHhGQjRFfTsKKyAgICAgICAgZmluYWwgY2hhciBDUE5GS0RbXSA9IHsweDAwQTAsIDB4MDJFNCwgMHgxRkRCLCAweDI0RUEsIDB4MzJGRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhBQzAwLCAweEZCNEUsIDB4RkExMCwgMHhGRjNGLCAweEZBMkR9OworICAgICAgICBmaW5hbCBjaGFyIENQTkZLQ1tdID0gezB4MDBBMCwgMHgwMTdGLCAweDIwMDAsIDB4MjRFQSwgMHgzMkZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMzRkUsIDB4RkI0RSwgMHhGQTEwLCAweEZGM0YsIDB4RkEyRH07CisKKworICAgICAgICBmaW5hbCBpbnQgU0laRSA9IDEwOworCisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGZvciAoOyBjb3VudCA8IFNJWkU7IGNvdW50ICsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKFN0cmluZy52YWx1ZU9mKENQTkZEW2NvdW50XSksCisgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZEKSAhPSBOb3JtYWxpemVyLk5PKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORkQgcXVpY2sgY2hlY2sgYXQgVSsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhDUE5GRFtjb3VudF0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKFN0cmluZy52YWx1ZU9mKENQTkZDW2NvdW50XSksCisgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk5GQykgIT1Ob3JtYWxpemVyLk5PKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORkMgcXVpY2sgY2hlY2sgYXQgVSsiKworICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKENQTkZDW2NvdW50XSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soU3RyaW5nLnZhbHVlT2YoQ1BORktEW2NvdW50XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZLRCkgIT0gTm9ybWFsaXplci5OTykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1IgaW4gTkZLRCBxdWljayBjaGVjayBhdCBVKyIrCisgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoQ1BORktEW2NvdW50XSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soU3RyaW5nLnZhbHVlT2YoQ1BORktDW2NvdW50XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZLQykgIT1Ob3JtYWxpemVyLk5PKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORktDIHF1aWNrIGNoZWNrIGF0IFUrIisKKyAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhDUE5GS0NbY291bnRdKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICBwdWJsaWMgdm9pZCBUZXN0UXVpY2tDaGVja1Jlc3VsdFlFUygpCisgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgZmluYWwgY2hhciBDUE5GRFtdID0gezB4MDBDNiwgMHgwMTdGLCAweDBGNzQsIDB4MTAwMCwgMHgxRTlBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyNjEsIDB4MzA3NSwgMHg0MDAwLCAweDUwMDAsIDB4RjAwMH07CisgICAgICAgIGZpbmFsIGNoYXIgQ1BORkNbXSA9IHsweDA0MDAsIDB4MDU0MCwgMHgwOTAxLCAweDEwMDAsIDB4MTUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTlBLCAweDMwMDAsIDB4NDAwMCwgMHg1MDAwLCAweEYwMDB9OworICAgICAgICBmaW5hbCBjaGFyIENQTkZLRFtdID0gezB4MDBBQiwgMHgwMkEwLCAweDEwMDAsIDB4MTAyNywgMHgyRkZCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNGRkYsIDB4NEZGRiwgMHhBMDAwLCAweEYwMDAsIDB4RkEyN307CisgICAgICAgIGZpbmFsIGNoYXIgQ1BORktDW10gPSB7MHgwMEIwLCAweDAxMDAsIDB4MDIwMCwgMHgwQTAyLCAweDEwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAxMCwgMHgzMDMwLCAweDQwMDAsIDB4QTAwMCwgMHhGQTBFfTsKKworICAgICAgICBmaW5hbCBpbnQgU0laRSA9IDEwOworICAgICAgICBpbnQgY291bnQgPSAwOworCisgICAgICAgIGNoYXIgY3AgPSAwOworICAgICAgICB3aGlsZSAoY3AgPCAweEEwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKFN0cmluZy52YWx1ZU9mKGNwKSwgTm9ybWFsaXplci5ORkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IE5vcm1hbGl6ZXIuWUVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORkQgcXVpY2sgY2hlY2sgYXQgVSsiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhjcCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soU3RyaW5nLnZhbHVlT2YoY3ApLCBOb3JtYWxpemVyLk5GQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IE5vcm1hbGl6ZXIuWUVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORkMgcXVpY2sgY2hlY2sgYXQgVSsiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhjcCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soU3RyaW5nLnZhbHVlT2YoY3ApLCBOb3JtYWxpemVyLk5GS0QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBOb3JtYWxpemVyLllFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1IgaW4gTkZLRCBxdWljayBjaGVjayBhdCBVKyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhjcCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soU3RyaW5nLnZhbHVlT2YoY3ApLCBOb3JtYWxpemVyLk5GS0MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBOb3JtYWxpemVyLllFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1IgaW4gTkZLQyBxdWljayBjaGVjayBhdCBVKyIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhjcCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNwKys7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsgY291bnQgPCBTSVpFOyBjb3VudCArKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKE5vcm1hbGl6ZXIucXVpY2tDaGVjayhTdHJpbmcudmFsdWVPZihDUE5GRFtjb3VudF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk5GRCkhPU5vcm1hbGl6ZXIuWUVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORkQgcXVpY2sgY2hlY2sgYXQgVSsiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhDUE5GRFtjb3VudF0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKFN0cmluZy52YWx1ZU9mKENQTkZDW2NvdW50XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZDKSE9Tm9ybWFsaXplci5ZRVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SIGluIE5GQyBxdWljayBjaGVjayBhdCBVKyIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKENQTkZDW2NvdW50XSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soU3RyaW5nLnZhbHVlT2YoQ1BORktEW2NvdW50XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZLRCkhPU5vcm1hbGl6ZXIuWUVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORktEIHF1aWNrIGNoZWNrIGF0IFUrIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoQ1BORktEW2NvdW50XSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soU3RyaW5nLnZhbHVlT2YoQ1BORktDW2NvdW50XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZLQykhPU5vcm1hbGl6ZXIuWUVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORktDIHF1aWNrIGNoZWNrIGF0IFUrIisKKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoQ1BORktDW2NvdW50XSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0QmVuZ2FsaSgpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIFN0cmluZyBpbnB1dCA9ICJcdTA5YmNcdTA5YmVcdTA5Y2RcdTA5YmUiOworICAgICAgICBTdHJpbmcgb3V0cHV0PU5vcm1hbGl6ZXIubm9ybWFsaXplKGlucHV0LE5vcm1hbGl6ZXIuTkZDKTsKKyAgICAgICAgaWYoIWlucHV0LmVxdWFscyhvdXRwdXQpKXsKKyAgICAgICAgICAgICBlcnJsbigiRVJST1IgaW4gTkZDIG9mIHN0cmluZyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHVibGljIHZvaWQgVGVzdFF1aWNrQ2hlY2tSZXN1bHRNQVlCRSgpCisgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKKworICAgICAgICBmaW5hbCBjaGFyW10gQ1BORkMgPSB7MHgwMzA2LCAweDA2NTQsIDB4MEJCRSwgMHgxMDJFLCAweDExNjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTE2QSwgMHgxMTczLCAweDExNzUsIDB4MzA5OSwgMHgzMDlBfTsKKyAgICAgICAgZmluYWwgY2hhcltdIENQTkZLQyA9IHsweDAzMDAsIDB4MDY1NCwgMHgwNjU1LCAweDA5RDcsIDB4MEIzRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRENGLCAweERERiwgMHgxMDJFLCAweDExQTgsIDB4MzA5OX07CisKKworICAgICAgICBmaW5hbCBpbnQgU0laRSA9IDEwOworCisgICAgICAgIGludCBjb3VudCA9IDA7CisKKyAgICAgICAgLyogTkZEIGFuZCBORktEIGRvZXMgbm90IGhhdmUgYW55IE1BWUJFIGNvZGVwb2ludHMgKi8KKyAgICAgICAgZm9yICg7IGNvdW50IDwgU0laRTsgY291bnQgKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soU3RyaW5nLnZhbHVlT2YoQ1BORkNbY291bnRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk5GQykhPU5vcm1hbGl6ZXIuTUFZQkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SIGluIE5GQyBxdWljayBjaGVjayBhdCBVKyIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoQ1BORkNbY291bnRdKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vcm1hbGl6ZXIucXVpY2tDaGVjayhTdHJpbmcudmFsdWVPZihDUE5GS0NbY291bnRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZLQykhPU5vcm1hbGl6ZXIuTUFZQkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SIGluIE5GS0MgcXVpY2sgY2hlY2sgYXQgVSsiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKENQTkZLQ1tjb3VudF0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKG5ldyBjaGFyW117Q1BORkNbY291bnRdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk5GQykhPU5vcm1hbGl6ZXIuTUFZQkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SIGluIE5GQyBxdWljayBjaGVjayBhdCBVKyIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoQ1BORkNbY291bnRdKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vcm1hbGl6ZXIucXVpY2tDaGVjayhuZXcgY2hhcltde0NQTkZLQ1tjb3VudF19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5ORktDKSE9Tm9ybWFsaXplci5NQVlCRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1IgaW4gTkZLQyBxdWljayBjaGVjayBhdCBVKyIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoQ1BORktDW2NvdW50XSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2sobmV3IGNoYXJbXXtDUE5GS0NbY291bnRdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTk9ORSkhPU5vcm1hbGl6ZXIuTUFZQkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SIGluIE5GS0MgcXVpY2sgY2hlY2sgYXQgVSsiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKENQTkZLQ1tjb3VudF0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0UXVpY2tDaGVja1N0cmluZ1Jlc3VsdCgpCisgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBTdHJpbmcgZDsKKyAgICAgICAgU3RyaW5nIGM7CisKKyAgICAgICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgY2Fub25UZXN0cy5sZW5ndGg7IGNvdW50ICsrKQorICAgICAgICB7CisgICAgICAgICAgICBkID0gY2Fub25UZXN0c1tjb3VudF1bMV07CisgICAgICAgICAgICBjID0gY2Fub25UZXN0c1tjb3VudF1bMl07CisgICAgICAgICAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKGQsTm9ybWFsaXplci5ORkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IE5vcm1hbGl6ZXIuWUVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORkQgcXVpY2sgY2hlY2sgZm9yIHN0cmluZyBhdCBjb3VudCAiICsgY291bnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKE5vcm1hbGl6ZXIucXVpY2tDaGVjayhjLCBOb3JtYWxpemVyLk5GQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTm9ybWFsaXplci5OTykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1IgaW4gTkZDIHF1aWNrIGNoZWNrIGZvciBzdHJpbmcgYXQgY291bnQgIiArIGNvdW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBjb21wYXRUZXN0cy5sZW5ndGg7IGNvdW50ICsrKQorICAgICAgICB7CisgICAgICAgICAgICBkID0gY29tcGF0VGVzdHNbY291bnRdWzFdOworICAgICAgICAgICAgYyA9IGNvbXBhdFRlc3RzW2NvdW50XVsyXTsKKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soZCwgTm9ybWFsaXplci5ORktEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBOb3JtYWxpemVyLllFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1IgaW4gTkZLRCBxdWljayBjaGVjayBmb3Igc3RyaW5nIGF0IGNvdW50ICIgKyBjb3VudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKGMsICBOb3JtYWxpemVyLk5GS0MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IE5vcm1hbGl6ZXIuWUVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUiBpbiBORktDIHF1aWNrIGNoZWNrIGZvciBzdHJpbmcgYXQgY291bnQgIiArIGNvdW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBJbnRlcm5hbCB1dGlsaXRpZXMKKyAgICAvLworICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSW50ZXJuYWwgdXRpbGl0aWVzCisgICAgLy8KKworICAgIHByaXZhdGUgdm9pZCBiYWNrQW5kRm9ydGgoTm9ybWFsaXplciBpdGVyLCBTdHJpbmcgaW5wdXQpCisgICAgeworICAgICAgICBpdGVyLnNldFRleHQoaW5wdXQpOworCisgICAgICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBpdGVyYXRvciBmb3J3YXJkcyBhbmQgc3RpY2sgaXQgaW50byBhIFN0cmluZ0J1ZmZlcgorICAgICAgICBTdHJpbmdCdWZmZXIgZm9yd2FyZCA9ICBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGNoID0gaXRlci5maXJzdCgpOyBjaCAhPSBpdGVyLkRPTkU7IGNoID0gaXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvcndhcmQuYXBwZW5kKGNoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBkbyBpdCBiYWNrd2FyZHMKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJldmVyc2UgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGNoID0gaXRlci5sYXN0KCk7IGNoICE9IGl0ZXIuRE9ORTsgY2ggPSBpdGVyLnByZXZpb3VzKCkpIHsKKyAgICAgICAgICAgIHJldmVyc2UuaW5zZXJ0KDAsIGNoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm9yd2FyZC50b1N0cmluZygpLmVxdWFscyhyZXZlcnNlLnRvU3RyaW5nKCkpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogRm9yd2FyZC9yZXZlcnNlIG1pc21hdGNoIGZvciBpbnB1dCAiICsgaGV4KGlucHV0KQorICAgICAgICAgICAgICAgICAgKyAiLCBmb3J3YXJkOiAiICsgaGV4KGZvcndhcmQpICsgIiwgYmFja3dhcmQ6ICIraGV4KHJldmVyc2UpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgbG9nbG4oIk9rOiBGb3J3YXJkL3JldmVyc2UgZm9yIGlucHV0ICIgKyBoZXgoaW5wdXQpCisgICAgICAgICAgICAgICAgICArICIsIGZvcndhcmQ6ICIgKyBoZXgoZm9yd2FyZCkgKyAiLCBiYWNrd2FyZDogIitoZXgocmV2ZXJzZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGJhY2tBbmRGb3J0aChOb3JtYWxpemVyIGl0ZXIsIFN0cmluZ1tdW10gdGVzdHMpCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpdGVyLnNldFRleHQodGVzdHNbaV1bMF0pOworCisgICAgICAgICAgICAvLyBSdW4gdGhyb3VnaCB0aGUgaXRlcmF0b3IgZm9yd2FyZHMgYW5kIHN0aWNrIGl0IGludG8gYQorICAgICAgICAgICAgLy8gU3RyaW5nQnVmZmVyCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgZm9yd2FyZCA9ICBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBmb3IgKGludCBjaCA9IGl0ZXIuZmlyc3QoKTsgY2ggIT0gaXRlci5ET05FOyBjaCA9IGl0ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgZm9yd2FyZC5hcHBlbmQoY2gpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOb3cgZG8gaXQgYmFja3dhcmRzCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgcmV2ZXJzZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGNoID0gaXRlci5sYXN0KCk7IGNoICE9IGl0ZXIuRE9ORTsgY2ggPSBpdGVyLnByZXZpb3VzKCkpIHsKKyAgICAgICAgICAgICAgICByZXZlcnNlLmluc2VydCgwLCBjaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZm9yd2FyZC50b1N0cmluZygpLmVxdWFscyhyZXZlcnNlLnRvU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IEZvcndhcmQvcmV2ZXJzZSBtaXNtYXRjaCBmb3IgaW5wdXQgIgorICAgICAgICAgICAgICAgICAgICArIGhleCh0ZXN0c1tpXVswXSkgKyAiLCBmb3J3YXJkOiAiICsgaGV4KGZvcndhcmQpCisgICAgICAgICAgICAgICAgICAgICsgIiwgYmFja3dhcmQ6ICIgKyBoZXgocmV2ZXJzZSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1ZlcmJvc2UoKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogRm9yd2FyZC9yZXZlcnNlIGZvciBpbnB1dCAiICsgaGV4KHRlc3RzW2ldWzBdKQorICAgICAgICAgICAgICAgICAgICAgICsgIiwgZm9yd2FyZDogIiArIGhleChmb3J3YXJkKSArICIsIGJhY2t3YXJkOiAiCisgICAgICAgICAgICAgICAgICAgICAgKyBoZXgocmV2ZXJzZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHN0YXRpY1Rlc3QgKE5vcm1hbGl6ZXIuTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXVtdIHRlc3RzLCBpbnQgb3V0Q29sKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgaW5wdXQgPSBVdGlsaXR5LnVuZXNjYXBlKHRlc3RzW2ldWzBdKTsKKyAgICAgICAgICAgIFN0cmluZyBleHBlY3QgPSBVdGlsaXR5LnVuZXNjYXBlKHRlc3RzW2ldW291dENvbF0pOworCisgICAgICAgICAgICBsb2dsbigiTm9ybWFsaXppbmcgJyIgKyBpbnB1dCArICInICgiICsgaGV4KGlucHV0KSArICIpIiApOworCisgICAgICAgICAgICBTdHJpbmcgb3V0cHV0ID0gTm9ybWFsaXplci5ub3JtYWxpemUoaW5wdXQsIG1vZGUpOworCisgICAgICAgICAgICBpZiAoIW91dHB1dC5lcXVhbHMoZXhwZWN0KSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjYXNlICIgKyBpCisgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCAnIiArIGV4cGVjdCArICInICgiICsgaGV4KGV4cGVjdCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgKyAiIGJ1dCBnb3QgJyIgKyBvdXRwdXQgKyAiJyAoIiArIGhleChvdXRwdXQpICsgIikiICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2hhcltdIG91dHB1dCA9IG5ldyBjaGFyWzFdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyW10gaW5wdXQgPSBVdGlsaXR5LnVuZXNjYXBlKHRlc3RzW2ldWzBdKS50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgU3RyaW5nIGV4cGVjdCA9VXRpbGl0eS51bmVzY2FwZSggdGVzdHNbaV1bb3V0Q29sXSk7CisKKyAgICAgICAgICAgIGxvZ2xuKCJOb3JtYWxpemluZyAnIiArIG5ldyBTdHJpbmcoaW5wdXQpICsgIicgKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgaGV4KG5ldyBTdHJpbmcoaW5wdXQpKSArICIpIiApOworICAgICAgICAgICAgaW50IHJlcUxlbmd0aD0wOworCSAgICAgICAgd2hpbGUodHJ1ZSl7CisJCSAgICAgICAgdHJ5eworCQkgICAgICAgIAlyZXFMZW5ndGg9Tm9ybWFsaXplci5ub3JtYWxpemUoaW5wdXQsb3V0cHV0LCBtb2RlKTsKKwkJICAgICAgICAJaWYocmVxTGVuZ3RoPD1vdXRwdXQubGVuZ3RoCSl7CisJCSAgICAgICAgCQlicmVhazsKKwkJICAgICAgICAJfQorCQkgICAgICAgIH1jYXRjaChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpeworCQkgICAgICAgIAlvdXRwdXQ9IG5ldyBjaGFyW0ludGVnZXIucGFyc2VJbnQoZS5nZXRNZXNzYWdlKCkpXTsKKwkJICAgICAgICAJY29udGludWU7CisJCSAgICAgICAgfQorCSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFleHBlY3QuZXF1YWxzKG5ldyBTdHJpbmcob3V0cHV0LDAscmVxTGVuZ3RoKSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogY2FzZSAiICsgaQorICAgICAgICAgICAgICAgICAgICArICIgZXhwZWN0ZWQgJyIgKyBleHBlY3QgKyAiJyAoIiArIGhleChleHBlY3QpICsgIikiCisgICAgICAgICAgICAgICAgICAgICsgIiBidXQgZ290ICciICsgbmV3IFN0cmluZyhvdXRwdXQpCisgICAgICAgICAgICAgICAgICAgICsgIicgKCIgICsgaGV4KG5ldyBTdHJpbmcob3V0cHV0KSkgKyAiKSIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwcml2YXRlIHZvaWQgZGVjb21wb3NlVGVzdChOb3JtYWxpemVyLk1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW11bXSB0ZXN0cywgaW50IG91dENvbCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGlucHV0ID0gVXRpbGl0eS51bmVzY2FwZSh0ZXN0c1tpXVswXSk7CisgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ID0gVXRpbGl0eS51bmVzY2FwZSh0ZXN0c1tpXVtvdXRDb2xdKTsKKworICAgICAgICAgICAgbG9nbG4oIk5vcm1hbGl6aW5nICciICsgaW5wdXQgKyAiJyAoIiArIGhleChpbnB1dCkgKyAiKSIgKTsKKworICAgICAgICAgICAgU3RyaW5nIG91dHB1dCA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKGlucHV0LCBtb2RlPT1Ob3JtYWxpemVyLk5GS0QpOworCisgICAgICAgICAgICBpZiAoIW91dHB1dC5lcXVhbHMoZXhwZWN0KSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjYXNlICIgKyBpCisgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCAnIiArIGV4cGVjdCArICInICgiICsgaGV4KGV4cGVjdCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgKyAiIGJ1dCBnb3QgJyIgKyBvdXRwdXQgKyAiJyAoIiArIGhleChvdXRwdXQpICsgIikiICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2hhcltdIG91dHB1dCA9IG5ldyBjaGFyWzFdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyW10gaW5wdXQgPSBVdGlsaXR5LnVuZXNjYXBlKHRlc3RzW2ldWzBdKS50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgU3RyaW5nIGV4cGVjdCA9IFV0aWxpdHkudW5lc2NhcGUodGVzdHNbaV1bb3V0Q29sXSk7CisKKyAgICAgICAgICAgIGxvZ2xuKCJOb3JtYWxpemluZyAnIiArIG5ldyBTdHJpbmcoaW5wdXQpICsgIicgKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgaGV4KG5ldyBTdHJpbmcoaW5wdXQpKSArICIpIiApOworICAgICAgICAgICAgaW50IHJlcUxlbmd0aD0wOworICAgICAgICAgICAgd2hpbGUodHJ1ZSl7CisgICAgICAgICAgICAgICAgdHJ5eworICAgICAgICAgICAgICAgICAgICByZXFMZW5ndGg9Tm9ybWFsaXplci5kZWNvbXBvc2UoaW5wdXQsb3V0cHV0LCBtb2RlPT1Ob3JtYWxpemVyLk5GS0QpOworICAgICAgICAgICAgICAgICAgICBpZihyZXFMZW5ndGg8PW91dHB1dC5sZW5ndGggKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfWNhdGNoKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSl7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dD0gbmV3IGNoYXJbSW50ZWdlci5wYXJzZUludChlLmdldE1lc3NhZ2UoKSldOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWV4cGVjdC5lcXVhbHMobmV3IFN0cmluZyhvdXRwdXQsMCxyZXFMZW5ndGgpKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjYXNlICIgKyBpCisgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCAnIiArIGV4cGVjdCArICInICgiICsgaGV4KGV4cGVjdCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgKyAiIGJ1dCBnb3QgJyIgKyBuZXcgU3RyaW5nKG91dHB1dCkKKyAgICAgICAgICAgICAgICAgICAgKyAiJyAoIiAgKyBoZXgobmV3IFN0cmluZyhvdXRwdXQpKSArICIpIiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNvbXBvc2VUZXN0KE5vcm1hbGl6ZXIuTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXVtdIHRlc3RzLCBpbnQgb3V0Q29sKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgaW5wdXQgPSBVdGlsaXR5LnVuZXNjYXBlKHRlc3RzW2ldWzBdKTsKKyAgICAgICAgICAgIFN0cmluZyBleHBlY3QgPSBVdGlsaXR5LnVuZXNjYXBlKHRlc3RzW2ldW291dENvbF0pOworCisgICAgICAgICAgICBsb2dsbigiTm9ybWFsaXppbmcgJyIgKyBpbnB1dCArICInICgiICsgaGV4KGlucHV0KSArICIpIiApOworCisgICAgICAgICAgICBTdHJpbmcgb3V0cHV0ID0gTm9ybWFsaXplci5jb21wb3NlKGlucHV0LCBtb2RlPT1Ob3JtYWxpemVyLk5GS0MpOworCisgICAgICAgICAgICBpZiAoIW91dHB1dC5lcXVhbHMoZXhwZWN0KSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjYXNlICIgKyBpCisgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCAnIiArIGV4cGVjdCArICInICgiICsgaGV4KGV4cGVjdCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgKyAiIGJ1dCBnb3QgJyIgKyBvdXRwdXQgKyAiJyAoIiArIGhleChvdXRwdXQpICsgIikiICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2hhcltdIG91dHB1dCA9IG5ldyBjaGFyWzFdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyW10gaW5wdXQgPSBVdGlsaXR5LnVuZXNjYXBlKHRlc3RzW2ldWzBdKS50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgU3RyaW5nIGV4cGVjdCA9IFV0aWxpdHkudW5lc2NhcGUodGVzdHNbaV1bb3V0Q29sXSk7CisKKyAgICAgICAgICAgIGxvZ2xuKCJOb3JtYWxpemluZyAnIiArIG5ldyBTdHJpbmcoaW5wdXQpICsgIicgKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgaGV4KG5ldyBTdHJpbmcoaW5wdXQpKSArICIpIiApOworICAgICAgICAgICAgaW50IHJlcUxlbmd0aD0wOworICAgICAgICAgICAgd2hpbGUodHJ1ZSl7CisgICAgICAgICAgICAgICAgdHJ5eworICAgICAgICAgICAgICAgICAgICByZXFMZW5ndGg9Tm9ybWFsaXplci5jb21wb3NlKGlucHV0LG91dHB1dCwgbW9kZT09Tm9ybWFsaXplci5ORktDKTsKKyAgICAgICAgICAgICAgICAgICAgaWYocmVxTGVuZ3RoPD1vdXRwdXQubGVuZ3RoICl7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH1jYXRjaChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgICAgICAgICBvdXRwdXQ9IG5ldyBjaGFyW0ludGVnZXIucGFyc2VJbnQoZS5nZXRNZXNzYWdlKCkpXTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFleHBlY3QuZXF1YWxzKG5ldyBTdHJpbmcob3V0cHV0LDAscmVxTGVuZ3RoKSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogY2FzZSAiICsgaQorICAgICAgICAgICAgICAgICAgICArICIgZXhwZWN0ZWQgJyIgKyBleHBlY3QgKyAiJyAoIiArIGhleChleHBlY3QpICsgIikiCisgICAgICAgICAgICAgICAgICAgICsgIiBidXQgZ290ICciICsgbmV3IFN0cmluZyhvdXRwdXQpCisgICAgICAgICAgICAgICAgICAgICsgIicgKCIgICsgaGV4KG5ldyBTdHJpbmcob3V0cHV0KSkgKyAiKSIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwcml2YXRlIHZvaWQgaXRlcmF0ZVRlc3QoTm9ybWFsaXplciBpdGVyLCBTdHJpbmdbXVtdIHRlc3RzLCBpbnQgb3V0Q29sKXsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIGlucHV0ID0gVXRpbGl0eS51bmVzY2FwZSh0ZXN0c1tpXVswXSk7CisgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ID0gVXRpbGl0eS51bmVzY2FwZSh0ZXN0c1tpXVtvdXRDb2xdKTsKKworICAgICAgICAgICAgbG9nbG4oIk5vcm1hbGl6aW5nICciICsgaW5wdXQgKyAiJyAoIiArIGhleChpbnB1dCkgKyAiKSIgKTsKKworICAgICAgICAgICAgaXRlci5zZXRUZXh0KGlucHV0KTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFsKGV4cGVjdCwgaXRlciwgImNhc2UgIiArIGkgKyAiICIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsKFN0cmluZyBleHBlY3RlZCwgTm9ybWFsaXplciBpdGVyLCBTdHJpbmcgbXNnKQorICAgIHsKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgaW50IGNoOworICAgICAgICBVQ2hhcmFjdGVySXRlcmF0b3IgY0l0ZXIgPSAgVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKGV4cGVjdGVkKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICgoY2g9aXRlci5uZXh0KCkpIT0gaXRlci5ET05FKXsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBleHBlY3RlZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgbXNnICsgIlVuZXhwZWN0ZWQgY2hhcmFjdGVyICciICsgKGNoYXIpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIicgKCIgKyBoZXgoY2gpICsgIikiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgYXQgaW5kZXggIiArIGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCB3YW50ID0gVVRGMTYuY2hhckF0KGV4cGVjdGVkLGluZGV4KTsKKyAgICAgICAgICAgIGlmIChjaCAhPSB3YW50KSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBtc2cgKyAiZ290ICciICsgKGNoYXIpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIicgKCIgKyBoZXgoY2gpICsgIikiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgYnV0IGV4cGVjdGVkICciICsgd2FudCArICInICgiICsgaGV4KHdhbnQpKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdCBpbmRleCAiICsgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXgrPSAgVVRGMTYuZ2V0Q2hhckNvdW50KGNoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXggPCBleHBlY3RlZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBtc2cgKyAiT25seSBnb3QgIiArIGluZGV4ICsgIiBjaGFycywgZXhwZWN0ZWQgIgorICAgICAgICAgICAgKyBleHBlY3RlZC5sZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNJdGVyLnNldFRvTGltaXQoKTsKKyAgICAgICAgd2hpbGUoKGNoPWl0ZXIucHJldmlvdXMoKSkhPWl0ZXIuRE9ORSl7CisgICAgICAgICAgICBpbnQgd2FudCA9IGNJdGVyLnByZXZpb3VzQ29kZVBvaW50KCk7CisgICAgICAgICAgICBpZiAoY2ggIT0gd2FudCApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIG1zZyArICJnb3QgJyIgKyAoY2hhciljaAorICAgICAgICAgICAgICAgICAgICAgICAgKyAiJyAoIiArIGhleChjaCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBidXQgZXhwZWN0ZWQgJyIgKyB3YW50ICsgIicgKCIgKyBoZXgod2FudCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdCBpbmRleCAiICsgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIE5PVEU6IFRoZXNlIHRlc3RzIGFyZSB1c2VkIGZvciBxdWljayBkZWJ1Z2dpbmcgc28gYXJlIG5vdCBwb3J0ZWQKKyAgICAvLyB0byBJQ1U0QyB0c25vcm0uY3BwIGluIGludGx0ZXN0CisgICAgLy8KKworICAgIHB1YmxpYyB2b2lkIFRlc3REZWJ1Z1N0YXRpYygpeworICAgICAgICBTdHJpbmcgaW4gPSBVdGlsaXR5LnVuZXNjYXBlKCJcXFUwMDAxRDE1N1xcVTAwMDFEMTY1Iik7CisgICAgICAgIGlmKCFOb3JtYWxpemVyLmlzTm9ybWFsaXplZChpbixOb3JtYWxpemVyLk5GQykpeworICAgICAgICAgICAgZXJybG4oImlzTm9ybWFsaXplZCBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBpbnB1dCAgPSAgIlx1QUQ4Qlx1QUQ4Qlx1QUQ4Qlx1QUQ4QiIrCisgICAgICAgICAgICAiXFxVMDAwMWQxNWVcXFUwMDAxZDE1N1xcVTAwMDFkMTY1XFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWUiKworICAgICAgICAgICAgIlxcVTAwMDFkMTVlXFxVMDAwMWQxNTdcXFUwMDAxZDE2NVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlIisKKyAgICAgICAgICAgICJcXFUwMDAxZDE1ZVxcVTAwMDFkMTU3XFxVMDAwMWQxNjVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZSIrCisgICAgICAgICAgICAiXFxVMDAwMWQxNTdcXFUwMDAxZDE2NVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWUiKworICAgICAgICAgICAgIlxcVTAwMDFkMTU3XFxVMDAwMWQxNjVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlIisKKyAgICAgICAgICAgICJhYWFhYWFhYWFhYWFhYWFhYWF6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eiIrCisgICAgICAgICAgICAiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiKworICAgICAgICAgICAgImNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIisKKyAgICAgICAgICAgICJkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCIrCisgICAgICAgICAgICAiXHVBRDhCXHVBRDhCXHVBRDhCXHVBRDhCIisKKyAgICAgICAgICAgICJkXHUwMzFCXHUwMzA3XHUwMzIzIjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdCA9ICJcdTExMDBcdTExNkZcdTExQUFcdTExMDBcdTExNkZcdTExQUFcdTExMDBcdTExNkYiKworICAgICAgICAgICAgICAgICAgICAgICAgIlx1MTFBQVx1MTEwMFx1MTE2Rlx1MTFBQVx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NSIrCisgICAgICAgICAgICAgICAgICAgICAgICAiXHVEODM0XHVERDU3XHVEODM0XHVERDY1XHVEODM0XHVERDU3XHVEODM0XHVERDY1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdUQ4MzRcdURENTdcdUQ4MzRcdURENjVcdUQ4MzRcdURENTdcdUQ4MzRcdURENjUiKworICAgICAgICAgICAgICAgICAgICAgICAgIlx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NVx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NSIrCisgICAgICAgICAgICAgICAgICAgICAgICAiXHVEODM0XHVERDU3XHVEODM0XHVERDY1XHVEODM0XHVERDU3XHVEODM0XHVERDY1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdUQ4MzRcdURENTdcdUQ4MzRcdURENjVcdUQ4MzRcdURENTdcdUQ4MzRcdURENjUiKworICAgICAgICAgICAgICAgICAgICAgICAgIlx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NVx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NSIrCisgICAgICAgICAgICAgICAgICAgICAgICAiXHVEODM0XHVERDU3XHVEODM0XHVERDY1XHVEODM0XHVERDU3XHVEODM0XHVERDY1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdUQ4MzRcdURENTdcdUQ4MzRcdURENjVcdUQ4MzRcdURENTdcdUQ4MzRcdURENjUiKworICAgICAgICAgICAgICAgICAgICAgICAgIlx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NVx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NSIrCisgICAgICAgICAgICAgICAgICAgICAgICAiXHVEODM0XHVERDU3XHVEODM0XHVERDY1XHVEODM0XHVERDU3XHVEODM0XHVERDY1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdUQ4MzRcdURENTdcdUQ4MzRcdURENjVcdUQ4MzRcdURENTdcdUQ4MzRcdURENjUiKworICAgICAgICAgICAgICAgICAgICAgICAgIlx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NVx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NSIrCisgICAgICAgICAgICAgICAgICAgICAgICAiXHVEODM0XHVERDU3XHVEODM0XHVERDY1XHVEODM0XHVERDU3XHVEODM0XHVERDY1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdUQ4MzRcdURENTdcdUQ4MzRcdURENjVcdUQ4MzRcdURENTdcdUQ4MzRcdURENjUiKworICAgICAgICAgICAgICAgICAgICAgICAgIlx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NWFhYWFhYWFhYWFhYWFhYWFhYXp6enp6eiIrCisgICAgICAgICAgICAgICAgICAgICAgICAienp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiKworICAgICAgICAgICAgICAgICAgICAgICAgImJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIisKKyAgICAgICAgICAgICAgICAgICAgICAgICJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYyIrCisgICAgICAgICAgICAgICAgICAgICAgICAiY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIisKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCIrCisgICAgICAgICAgICAgICAgICAgICAgICAiZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkIisKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdTExMDBcdTExNkZcdTExQUFcdTExMDBcdTExNkZcdTExQUFcdTExMDBcdTExNkYiKworICAgICAgICAgICAgICAgICAgICAgICAgIlx1MTFBQVx1MTEwMFx1MTE2Rlx1MTFBQVx1MDA2NFx1MDMxQlx1MDMyM1x1MDMwNyI7CisgICAgICAgICAgICBTdHJpbmcgb3V0cHV0ID0gTm9ybWFsaXplci5ub3JtYWxpemUoVXRpbGl0eS51bmVzY2FwZShpbnB1dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5ORkQpOworICAgICAgICAgICAgaWYoIWV4cGVjdC5lcXVhbHMob3V0cHV0KSl7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUwgZXhwZWN0ZWQ6ICIraGV4KGV4cGVjdCkgKyAiIGdvdDogIitoZXgob3V0cHV0KSk7CisgICAgICAgICAgICB9CisKKworCisgICAgfQorICAgIHB1YmxpYyB2b2lkIFRlc3REZWJ1Z0l0ZXIoKXsKKyAgICAgICAgU3RyaW5nIHNyYyA9IFV0aWxpdHkudW5lc2NhcGUoIlxcVTAwMDFkMTVlXFxVMDAwMWQxNTdcXFUwMDAxZDE2NVxcVTAwMDFkMTVlIik7CisgICAgICAgIFN0cmluZyBleHBlY3RlZCA9IFV0aWxpdHkudW5lc2NhcGUoIlxcVTAwMDFkMTVlXFxVMDAwMWQxNTdcXFUwMDAxZDE2NVxcVTAwMDFkMTVlIik7CisgICAgICAgIE5vcm1hbGl6ZXIgaXRlciA9IG5ldyBOb3JtYWxpemVyKG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihVdGlsaXR5LnVuZXNjYXBlKHNyYykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5OT05FKTsKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgaW50IGNoOworICAgICAgICBVQ2hhcmFjdGVySXRlcmF0b3IgY0l0ZXIgPSAgVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKGV4cGVjdGVkKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICgoY2g9aXRlci5uZXh0KCkpIT0gaXRlci5ET05FKXsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBleHBlY3RlZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgICJVbmV4cGVjdGVkIGNoYXJhY3RlciAnIiArIChjaGFyKWNoCisgICAgICAgICAgICAgICAgICAgICAgICArICInICgiICsgaGV4KGNoKSArICIpIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF0IGluZGV4ICIgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgd2FudCA9IFVURjE2LmNoYXJBdChleHBlY3RlZCxpbmRleCk7CisgICAgICAgICAgICBpZiAoY2ggIT0gd2FudCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgICJnb3QgJyIgKyAoY2hhciljaAorICAgICAgICAgICAgICAgICAgICAgICAgKyAiJyAoIiArIGhleChjaCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBidXQgZXhwZWN0ZWQgJyIgKyB3YW50ICsgIicgKCIgKyBoZXgod2FudCkrICIpIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF0IGluZGV4ICIgKyBpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCs9ICBVVEYxNi5nZXRDaGFyQ291bnQoY2gpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmRleCA8IGV4cGVjdGVkLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArICAiT25seSBnb3QgIiArIGluZGV4ICsgIiBjaGFycywgZXhwZWN0ZWQgIgorICAgICAgICAgICAgKyBleHBlY3RlZC5sZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNJdGVyLnNldFRvTGltaXQoKTsKKyAgICAgICAgd2hpbGUoKGNoPWl0ZXIucHJldmlvdXMoKSkhPWl0ZXIuRE9ORSl7CisgICAgICAgICAgICBpbnQgd2FudCA9IGNJdGVyLnByZXZpb3VzQ29kZVBvaW50KCk7CisgICAgICAgICAgICBpZiAoY2ggIT0gd2FudCApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArICJnb3QgJyIgKyAoY2hhciljaAorICAgICAgICAgICAgICAgICAgICAgICAgKyAiJyAoIiArIGhleChjaCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBidXQgZXhwZWN0ZWQgJyIgKyB3YW50ICsgIicgKCIgKyBoZXgod2FudCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdCBpbmRleCAiICsgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHB1YmxpYyB2b2lkIFRlc3REZWJ1Z0l0ZXJPbGQoKXsKKyAgICAgICAgU3RyaW5nIGlucHV0ID0gIlxcVTAwMDFEMTVFIjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkID0gIlx1RDgzNFx1REQ1N1x1RDgzNFx1REQ2NSI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZFJldmVyc2UgPSAiXHVEODM0XHVERDY1XHVEODM0XHVERDU3IjsKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgaW50IGNoOworICAgICAgICBOb3JtYWxpemVyIGl0ZXIgPSBuZXcgTm9ybWFsaXplcihuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoVXRpbGl0eS51bmVzY2FwZShpbnB1dCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5ORktDKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGdvdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgZm9yIChjaCA9IGl0ZXIuZmlyc3QoKTtjaCE9aXRlci5ET05FO2NoPWl0ZXIubmV4dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZXhwZWN0ZWQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArICAiVW5leHBlY3RlZCBjaGFyYWN0ZXIgJyIgKyAoY2hhciljaCArCisgICAgICAgICAgICAgICAgICAgICAgICInICgiICsgaGV4KGNoKSArICIpIiArICIgYXQgaW5kZXggIiArIGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdC5hcHBlbmQoVUNoYXJhY3Rlci50b1N0cmluZyhjaCkpOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWV4cGVjdGVkLmVxdWFscyhnb3QudG9TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArICAiZ290ICciICtnb3QrICInICgiICsgaGV4KGdvdCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBidXQgZXhwZWN0ZWQgJyIgKyBleHBlY3RlZCArICInICgiCisgICAgICAgICAgICAgICAgICAgICAgICArIGhleChleHBlY3RlZCkgKyAiKSIpOworICAgICAgICB9CisgICAgICAgIGlmIChnb3QubGVuZ3RoKCkgPCBleHBlY3RlZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyAgIk9ubHkgZ290ICIgKyBpbmRleCArICIgY2hhcnMsIGV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZXhwZWN0ZWQubGVuZ3RoKCkpOworICAgICAgICB9CisKKyAgICAgICAgbG9nbG4oIlJldmVyc2UgSXRlcmF0aW9uXG4iKTsKKyAgICAgICAgaXRlci5zZXRJbmRleE9ubHkoaXRlci5lbmRJbmRleCgpKTsKKyAgICAgICAgZ290LnNldExlbmd0aCgwKTsKKyAgICAgICAgZm9yKGNoPWl0ZXIucHJldmlvdXMoKTtjaCE9aXRlci5ET05FO2NoPWl0ZXIucHJldmlvdXMoKSl7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZXhwZWN0ZWQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArICAiVW5leHBlY3RlZCBjaGFyYWN0ZXIgJyIgKyAoY2hhciljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIicgKCIgKyBoZXgoY2gpICsgIikiICsgIiBhdCBpbmRleCAiICsgaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290LmFwcGVuZChVQ2hhcmFjdGVyLnRvU3RyaW5nKGNoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFleHBlY3RlZFJldmVyc2UuZXF1YWxzKGdvdC50b1N0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgICJnb3QgJyIgK2dvdCsgIicgKCIgKyBoZXgoZ290KSArICIpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBidXQgZXhwZWN0ZWQgJyIgKyBleHBlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIicgKCIgKyBoZXgoZXhwZWN0ZWQpICsgIikiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZ290Lmxlbmd0aCgpIDwgZXhwZWN0ZWQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgICJPbmx5IGdvdCAiICsgaW5kZXggKyAiIGNoYXJzLCBleHBlY3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgKyBleHBlY3RlZC5sZW5ndGgoKSk7CisgICAgICAgIH0KKworICAgIH0KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gaGVscGVyIGNsYXNzIGZvciBUZXN0UHJldmlvdXNOZXh0KCkKKwkvLyBzaW1wbGUgVVRGLTMyIGNoYXJhY3RlciBpdGVyYXRvcgorCWNsYXNzIFVDaGFySXRlcmF0b3IgeworCisJICAgcHVibGljIFVDaGFySXRlcmF0b3IoaW50W10gc3JjLCBpbnQgbGVuLCBpbnQgaW5kZXgpeworCisJICAgICAgICBzPXNyYzsKKyAgICAgICAgICAgIGxlbmd0aD1sZW47CisgICAgICAgICAgICBpPWluZGV4OworICAgICAgIH0KKworCSAgICBwdWJsaWMgaW50IGN1cnJlbnQoKSB7CisJICAgICAgICBpZihpPGxlbmd0aCkgeworCSAgICAgICAgICAgIHJldHVybiBzW2ldOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICByZXR1cm4gLTE7CisJICAgICAgICB9CisJICAgIH0KKworCSAgICBwdWJsaWMgaW50IG5leHQoKSB7CisJICAgICAgICBpZihpPGxlbmd0aCkgeworCSAgICAgICAgICAgIHJldHVybiBzW2krK107CisJICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIHJldHVybiAtMTsKKwkgICAgICAgIH0KKwkgICAgfQorCisJICAgIHB1YmxpYyBpbnQgcHJldmlvdXMoKSB7CisJICAgICAgICBpZihpPjApIHsKKwkgICAgICAgICAgICByZXR1cm4gc1stLWldOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICByZXR1cm4gLTE7CisJICAgICAgICB9CisJICAgIH0KKworCSAgICBwdWJsaWMgaW50IGdldEluZGV4KCkgeworCSAgICAgICAgcmV0dXJuIGk7CisJICAgIH0KKworCSAgICBwcml2YXRlIGludFtdIHM7CisJICAgIHByaXZhdGUgaW50IGxlbmd0aCwgaTsKKwl9OworCXB1YmxpYyB2b2lkIFRlc3RQcmV2aW91c05leHQoKSB7CisJICAgIC8vIHNyYyBhbmQgZXhwZWN0IHN0cmluZ3MKKwkgICAgY2hhciBzcmNbXT17CisJICAgICAgICBVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKDB4MmY5OTkpLCBVVEYxNi5nZXRUcmFpbFN1cnJvZ2F0ZSgweDJmOTk5KSwKKwkgICAgICAgIFVURjE2LmdldExlYWRTdXJyb2dhdGUoMHgxZDE1ZiksIFVURjE2LmdldFRyYWlsU3Vycm9nYXRlKDB4MWQxNWYpLAorCSAgICAgICAgMHhjNCwKKwkgICAgICAgIDB4MWVkMAorCSAgICB9OworCSAgICBpbnQgZXhwZWN0W109eworCSAgICAgICAgMHg4MzFkLAorCSAgICAgICAgMHgxZDE1OCwgMHgxZDE2NSwKKwkgICAgICAgIDB4NDEsIDB4MzA4LAorCSAgICAgICAgMHg0ZiwgMHgzMDIsIDB4MzAxCisJICAgIH07CisKKwkgICAgLy8gZXhwZWN0ZWQgc3JjIGluZGV4ZXMgY29ycmVzcG9uZGluZyB0byBleHBlY3QgaW5kZXhlcworCSAgICBpbnQgZXhwZWN0SW5kZXhbXT17CisJICAgICAgICAwLAorCSAgICAgICAgMiwgMiwKKwkgICAgICAgIDQsIDQsCisJICAgICAgICA1LCA1LCA1LAorCSAgICAgICAgNiAvLyBiZWhpbmQgbGFzdCBjaGFyYWN0ZXIKKwkgICAgfTsKKworCSAgICAvLyBpbml0aWFsIGluZGV4ZXMgaW50byB0aGUgc3JjIGFuZCBleHBlY3Qgc3RyaW5ncworCisJICAgIGZpbmFsIGludCBTUkNfTUlERExFPTQ7CisJICAgIGZpbmFsIGludCBFWFBFQ1RfTUlERExFPTM7CisKKworCSAgICAvLyBtb3ZlbWVudCB2ZWN0b3IKKwkgICAgLy8gLSBmb3IgcHJldmlvdXMoKSwgMCBmb3IgY3VycmVudCgpLCArIGZvciBuZXh0KCkKKwkgICAgLy8gbm90IGNvbnN0IHNvIHRoYXQgd2UgY2FuIHRlcm1pbmF0ZSBpdCBiZWxvdyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UKKwkgICAgU3RyaW5nIG1vdmVzPSIwKzArMC0tMC0wLSsrKzAtLSsrKysrKyswLS0tLS0tLS0iOworCisJICAgIC8vIGl0ZXJhdG9ycworCSAgICBOb3JtYWxpemVyIGl0ZXIgPSBuZXcgTm9ybWFsaXplcihuZXcgU3RyaW5nKHNyYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk5GRCk7CisJICAgIFVDaGFySXRlcmF0b3IgaXRlcjMyID0gbmV3IFVDaGFySXRlcmF0b3IoZXhwZWN0LCBleHBlY3QubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfTUlERExFKTsKKworCSAgICBpbnQgYzEsIGMyOworCSAgICBjaGFyIG07CisKKwkgICAgLy8gaW5pdGlhbGx5IHNldCB0aGUgaW5kZXhlcyBpbnRvIHRoZSBtaWRkbGUgb2YgdGhlIHN0cmluZ3MKKwkgICAgaXRlci5zZXRJbmRleE9ubHkoU1JDX01JRERMRSk7CisKKwkgICAgLy8gbW92ZSBhcm91bmQgYW5kIGNvbXBhcmUgdGhlIGl0ZXJhdGlvbiBjb2RlIHBvaW50cyB3aXRoCisJICAgIC8vIHRoZSBleHBlY3RlZCBvbmVzCisJICAgIGludCBtb3Zlc0luZGV4ID0wOworCSAgICB3aGlsZShtb3Zlc0luZGV4PG1vdmVzLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtPW1vdmVzLmNoYXJBdChtb3Zlc0luZGV4KyspOworCSAgICAgICAgaWYobT09Jy0nKSB7CisJICAgICAgICAgICAgYzE9aXRlci5wcmV2aW91cygpOworCSAgICAgICAgICAgIGMyPWl0ZXIzMi5wcmV2aW91cygpOworCSAgICAgICAgfSBlbHNlIGlmKG09PScwJykgeworCSAgICAgICAgICAgIGMxPWl0ZXIuY3VycmVudCgpOworCSAgICAgICAgICAgIGMyPWl0ZXIzMi5jdXJyZW50KCk7CisJICAgICAgICB9IGVsc2UgLyogbT09JysnICovIHsKKwkgICAgICAgICAgICBjMT1pdGVyLm5leHQoKTsKKwkgICAgICAgICAgICBjMj1pdGVyMzIubmV4dCgpOworCSAgICAgICAgfQorCisJICAgICAgICAvLyBjb21wYXJlIHJlc3VsdHMKKwkgICAgICAgIGlmKGMxIT1jMikgeworCSAgICAgICAgICAgIC8vIGNvcHkgdGhlIG1vdmVzIHVudGlsIHRoZSBjdXJyZW50IChtKSBtb3ZlLCBhbmQgdGVybWluYXRlCisJICAgICAgICAgICAgU3RyaW5nIGhpc3RvcnkgPSBtb3Zlcy5zdWJzdHJpbmcoMCxtb3Zlc0luZGV4KTsKKwkgICAgICAgICAgICBlcnJsbigiZXJyb3I6IG1pc21hdGNoIGluIE5vcm1hbGl6ZXIgaXRlcmF0aW9uIGF0ICIraGlzdG9yeSsiOiAiCisJICAgICAgICAgICAgICAgICAgKyJnb3QgYzE9ICIgKyBoZXgoYzEpICsiICE9IGV4cGVjdGVkIGMyPSAiKyBoZXgoYzIpKTsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIH0KKworCSAgICAgICAgLy8gY29tcGFyZSBpbmRleGVzCisJICAgICAgICBpZihpdGVyLmdldEluZGV4KCkhPWV4cGVjdEluZGV4W2l0ZXIzMi5nZXRJbmRleCgpXSkgeworCSAgICAgICAgICAgIC8vIGNvcHkgdGhlIG1vdmVzIHVudGlsIHRoZSBjdXJyZW50IChtKSBtb3ZlLCBhbmQgdGVybWluYXRlCisJICAgICAgICAgICAgU3RyaW5nIGhpc3RvcnkgPSBtb3Zlcy5zdWJzdHJpbmcoMCxtb3Zlc0luZGV4KTsKKwkgICAgICAgICAgICBlcnJsbigiZXJyb3I6IGluZGV4IG1pc21hdGNoIGluIE5vcm1hbGl6ZXIgaXRlcmF0aW9uIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAraGlzdG9yeSsgIiA6ICIrICJOb3JtYWxpemVyIGluZGV4ICIgK2l0ZXIuZ2V0SW5kZXgoKQorICAgICAgICAgICAgICAgICAgICAgICsiIGV4cGVjdGVkICIrIGV4cGVjdEluZGV4W2l0ZXIzMi5nZXRJbmRleCgpXSk7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICB9CisJICAgIH0KKwl9CisgICAgLy8gT25seSBpbiBJQ1U0agorICAgIHB1YmxpYyB2b2lkIFRlc3RQcmV2aW91c05leHRKQ0koKSB7CisgICAgICAgIC8vIHNyYyBhbmQgZXhwZWN0IHN0cmluZ3MKKyAgICAgICAgY2hhciBzcmNbXT17CisgICAgICAgICAgICBVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKDB4MmY5OTkpLCBVVEYxNi5nZXRUcmFpbFN1cnJvZ2F0ZSgweDJmOTk5KSwKKyAgICAgICAgICAgIFVURjE2LmdldExlYWRTdXJyb2dhdGUoMHgxZDE1ZiksIFVURjE2LmdldFRyYWlsU3Vycm9nYXRlKDB4MWQxNWYpLAorICAgICAgICAgICAgMHhjNCwKKyAgICAgICAgICAgIDB4MWVkMAorICAgICAgICB9OworICAgICAgICBpbnQgZXhwZWN0W109eworICAgICAgICAgICAgMHg4MzFkLAorICAgICAgICAgICAgMHgxZDE1OCwgMHgxZDE2NSwKKyAgICAgICAgICAgIDB4NDEsIDB4MzA4LAorICAgICAgICAgICAgMHg0ZiwgMHgzMDIsIDB4MzAxCisgICAgICAgIH07CisKKyAgICAgICAgLy8gZXhwZWN0ZWQgc3JjIGluZGV4ZXMgY29ycmVzcG9uZGluZyB0byBleHBlY3QgaW5kZXhlcworICAgICAgICBpbnQgZXhwZWN0SW5kZXhbXT17CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMiwgMiwKKyAgICAgICAgICAgIDQsIDQsCisgICAgICAgICAgICA1LCA1LCA1LAorICAgICAgICAgICAgNiAvLyBiZWhpbmQgbGFzdCBjaGFyYWN0ZXIKKyAgICAgICAgfTsKKworICAgICAgICAvLyBpbml0aWFsIGluZGV4ZXMgaW50byB0aGUgc3JjIGFuZCBleHBlY3Qgc3RyaW5ncworCisgICAgICAgIGZpbmFsIGludCBTUkNfTUlERExFPTQ7CisgICAgICAgIGZpbmFsIGludCBFWFBFQ1RfTUlERExFPTM7CisKKworICAgICAgICAvLyBtb3ZlbWVudCB2ZWN0b3IKKyAgICAgICAgLy8gLSBmb3IgcHJldmlvdXMoKSwgMCBmb3IgY3VycmVudCgpLCArIGZvciBuZXh0KCkKKyAgICAgICAgLy8gbm90IGNvbnN0IHNvIHRoYXQgd2UgY2FuIHRlcm1pbmF0ZSBpdCBiZWxvdyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgU3RyaW5nIG1vdmVzPSIwKzArMC0tMC0wLSsrKzAtLSsrKysrKyswLS0tLS0tLS0iOworCisgICAgICAgIC8vIGl0ZXJhdG9ycworICAgICAgICBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0ID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKG5ldyBTdHJpbmcoc3JjKSk7CisgICAgICAgIE5vcm1hbGl6ZXIgaXRlciA9IG5ldyBOb3JtYWxpemVyKHRleHQsTm9ybWFsaXplci5ORkQpOworICAgICAgICBVQ2hhckl0ZXJhdG9yIGl0ZXIzMiA9IG5ldyBVQ2hhckl0ZXJhdG9yKGV4cGVjdCwgZXhwZWN0Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX01JRERMRSk7CisKKyAgICAgICAgaW50IGMxLCBjMjsKKyAgICAgICAgY2hhciBtOworCisgICAgICAgIC8vIGluaXRpYWxseSBzZXQgdGhlIGluZGV4ZXMgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBzdHJpbmdzCisgICAgICAgIGl0ZXIuc2V0SW5kZXhPbmx5KFNSQ19NSURETEUpOworCisgICAgICAgIC8vIG1vdmUgYXJvdW5kIGFuZCBjb21wYXJlIHRoZSBpdGVyYXRpb24gY29kZSBwb2ludHMgd2l0aAorICAgICAgICAvLyB0aGUgZXhwZWN0ZWQgb25lcworICAgICAgICBpbnQgbW92ZXNJbmRleCA9MDsKKyAgICAgICAgd2hpbGUobW92ZXNJbmRleDxtb3Zlcy5sZW5ndGgoKSkgeworICAgICAgICAgICAgbT1tb3Zlcy5jaGFyQXQobW92ZXNJbmRleCsrKTsKKyAgICAgICAgICAgIGlmKG09PSctJykgeworICAgICAgICAgICAgICAgIGMxPWl0ZXIucHJldmlvdXMoKTsKKyAgICAgICAgICAgICAgICBjMj1pdGVyMzIucHJldmlvdXMoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihtPT0nMCcpIHsKKyAgICAgICAgICAgICAgICBjMT1pdGVyLmN1cnJlbnQoKTsKKyAgICAgICAgICAgICAgICBjMj1pdGVyMzIuY3VycmVudCgpOworICAgICAgICAgICAgfSBlbHNlIC8qIG09PScrJyAqLyB7CisgICAgICAgICAgICAgICAgYzE9aXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgYzI9aXRlcjMyLm5leHQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY29tcGFyZSByZXN1bHRzCisgICAgICAgICAgICBpZihjMSE9YzIpIHsKKyAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSBtb3ZlcyB1bnRpbCB0aGUgY3VycmVudCAobSkgbW92ZSwgYW5kIHRlcm1pbmF0ZQorICAgICAgICAgICAgICAgIFN0cmluZyBoaXN0b3J5ID0gbW92ZXMuc3Vic3RyaW5nKDAsbW92ZXNJbmRleCk7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yOiBtaXNtYXRjaCBpbiBOb3JtYWxpemVyIGl0ZXJhdGlvbiBhdCAiK2hpc3RvcnkrIjogIgorICAgICAgICAgICAgICAgICAgICAgICsiZ290IGMxPSAiICsgaGV4KGMxKSArIiAhPSBleHBlY3RlZCBjMj0gIisgaGV4KGMyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGNvbXBhcmUgaW5kZXhlcworICAgICAgICAgICAgaWYoaXRlci5nZXRJbmRleCgpIT1leHBlY3RJbmRleFtpdGVyMzIuZ2V0SW5kZXgoKV0pIHsKKyAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSBtb3ZlcyB1bnRpbCB0aGUgY3VycmVudCAobSkgbW92ZSwgYW5kIHRlcm1pbmF0ZQorICAgICAgICAgICAgICAgIFN0cmluZyBoaXN0b3J5ID0gbW92ZXMuc3Vic3RyaW5nKDAsbW92ZXNJbmRleCk7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yOiBpbmRleCBtaXNtYXRjaCBpbiBOb3JtYWxpemVyIGl0ZXJhdGlvbiBhdCAiCisgICAgICAgICAgICAgICAgICAgICAgK2hpc3RvcnkrICIgOiAiKyAiTm9ybWFsaXplciBpbmRleCAiICtpdGVyLmdldEluZGV4KCkKKyAgICAgICAgICAgICAgICAgICAgICArIiBleHBlY3RlZCAiKyBleHBlY3RJbmRleFtpdGVyMzIuZ2V0SW5kZXgoKV0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3REZXByZWNhdGVkQVBJKCl7CisgICAgICAgICAvLyBpbnN0YW50aWF0ZSBhIE5vcm1hbGl6ZXIgZnJvbSBhIENoYXJhY3Rlckl0ZXJhdG9yCisgICAgICAgIFN0cmluZyBzPVV0aWxpdHkudW5lc2NhcGUoImFcdTAzMDhcdWFjMDBcXFUwMDAyZjgwMCIpOworICAgICAgICAvLyBtYWtlIHMgYSBiaXQgbG9uZ2VyIGFuZCBtb3JlIGludGVyZXN0aW5nCisgICAgICAgIGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvciBpdGVyID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHMrcyk7CisgICAgICAgIC8vdGVzdCBkZXByZWNhdGVkIGNvbnN0cnVjdG9ycworICAgICAgICBOb3JtYWxpemVyIG5vcm0gPSBuZXcgTm9ybWFsaXplcihpdGVyLCBOb3JtYWxpemVyLk5GQywwKTsKKyAgICAgICAgTm9ybWFsaXplciBub3JtMiA9IG5ldyBOb3JtYWxpemVyKHMsTm9ybWFsaXplci5ORkMsMCk7CisgICAgICAgIGlmKG5vcm0ubmV4dCgpIT0weGU0KSB7CisgICAgICAgICAgICBlcnJsbigiZXJyb3IgaW4gTm9ybWFsaXplcihDaGFyYWN0ZXJJdGVyYXRvcikubmV4dCgpIik7CisgICAgICAgIH0gICAgICAgCisgICAgICAgIC8vIHRlc3QgY2xvbmUoKSwgPT0sIGFuZCBoYXNoQ29kZSgpCisgICAgICAgIE5vcm1hbGl6ZXIgY2xvbmU9KE5vcm1hbGl6ZXIpbm9ybS5jbG9uZSgpOworICAgICAgICBpZihjbG9uZS5nZXRCZWdpbkluZGV4KCkhPSBub3JtLmdldEJlZ2luSW5kZXgoKSl7CisgICAgICAgICAgIGVycmxuKCJlcnJvciBpbiBOb3JtYWxpemVyLmdldEJlZ2luSW5kZXgoKSIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZihjbG9uZS5nZXRFbmRJbmRleCgpIT0gbm9ybS5nZXRFbmRJbmRleCgpKXsKKyAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXIuZ2V0RW5kSW5kZXgoKSIpOworICAgICAgICB9CisgICAgICAgIC8vIHRlc3Qgc2V0T3B0aW9uKCkgYW5kIGdldE9wdGlvbigpCisgICAgICAgIGNsb25lLnNldE9wdGlvbigweGFhMDAwMCwgdHJ1ZSk7CisgICAgICAgIGNsb25lLnNldE9wdGlvbigweDIwMDAwLCBmYWxzZSk7CisgICAgICAgIGlmKGNsb25lLmdldE9wdGlvbigweDg4MDAwMCkgPT0wfHwgY2xvbmUuZ2V0T3B0aW9uKDB4MjAwMDApPT0xKSB7CisgICAgICAgICAgIGVycmxuKCJlcnJvciBpbiBOb3JtYWxpemVyOjpzZXRPcHRpb24oKSBvciBOb3JtYWxpemVyOjpnZXRPcHRpb24oKSIpOworICAgICAgICB9CisgICAgICAgIC8vdGVzdCBkZXByZWNhdGVkIG5vcm1hbGl6ZSBtZXRob2QKKyAgICAgICAgTm9ybWFsaXplci5ub3JtYWxpemUocyxOb3JtYWxpemVyLk5GQywwKTsKKyAgICAgICAgLy90ZXN0IGRlcHJlY2F0ZWQgY29tcG9zZSBtZXRob2QKKyAgICAgICAgTm9ybWFsaXplci5jb21wb3NlKHMsZmFsc2UsMCk7CisgICAgICAgIC8vdGVzdCBkZXByZWNhdGVkIGRlY29tcG9zZSBtZXRob2QKKyAgICAgICAgTm9ybWFsaXplci5kZWNvbXBvc2UocyxmYWxzZSwwKTsKKworICAgIH0KKworCS8vIHRlc3QgQVBJcyB0aGF0IGFyZSBub3Qgb3RoZXJ3aXNlIHVzZWQgLSBpbXByb3ZlIHRlc3QgY292ZXJhZ2UKKwlwdWJsaWMgdm9pZCBUZXN0Tm9ybWFsaXplckFQSSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB0cnl7CisgICAgICAgICAgICAvLyBpbnN0YW50aWF0ZSBhIE5vcm1hbGl6ZXIgZnJvbSBhIENoYXJhY3Rlckl0ZXJhdG9yCisgICAgICAgICAgICBTdHJpbmcgcz1VdGlsaXR5LnVuZXNjYXBlKCJhXHUwMzA4XHVhYzAwXFxVMDAwMmY4MDAiKTsKKyAgICAgICAgICAgIC8vIG1ha2UgcyBhIGJpdCBsb25nZXIgYW5kIG1vcmUgaW50ZXJlc3RpbmcKKyAgICAgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHMrcyk7CisgICAgICAgICAgICBOb3JtYWxpemVyIG5vcm0gPSBuZXcgTm9ybWFsaXplcihpdGVyLCBOb3JtYWxpemVyLk5GQyk7CisgICAgICAgICAgICBpZihub3JtLm5leHQoKSE9MHhlNCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvciBpbiBOb3JtYWxpemVyKENoYXJhY3Rlckl0ZXJhdG9yKS5uZXh0KCkiKTsKKyAgICAgICAgICAgIH0gICAKKyAgICAKKyAgICAgICAgICAgIC8vIHRlc3QgY2xvbmUoKSwgPT0sIGFuZCBoYXNoQ29kZSgpCisgICAgICAgICAgICBOb3JtYWxpemVyIGNsb25lPShOb3JtYWxpemVyKW5vcm0uY2xvbmUoKTsKKyAgICAgICAgICAgIGlmKGNsb25lLmVxdWFscyhub3JtKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvciBpbiBOb3JtYWxpemVyKE5vcm1hbGl6ZXIoQ2hhcmFjdGVySXRlcmF0b3IpKS5jbG9uZSgpIT1ub3JtIik7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmKGNsb25lLmdldExlbmd0aCgpIT0gbm9ybS5nZXRMZW5ndGgoKSl7CisgICAgICAgICAgICAgICBlcnJsbigiZXJyb3IgaW4gTm9ybWFsaXplci5nZXRCZWdpbkluZGV4KCkiKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAvLyBjbG9uZSBtdXN0IGhhdmUgdGhlIHNhbWUgaGFzaENvZGUoKQorICAgICAgICAgICAgLy9pZihjbG9uZS5oYXNoQ29kZSgpIT1ub3JtLmhhc2hDb2RlKCkpIHsKKyAgICAgICAgICAgIC8vICAgIGVycmxuKCJlcnJvciBpbiBOb3JtYWxpemVyKE5vcm1hbGl6ZXIoQ2hhcmFjdGVySXRlcmF0b3IpKS5jbG9uZSgpLmhhc2hDb2RlKCkhPWNvcHkuaGFzaENvZGUoKSIpOworICAgICAgICAgICAgLy99CisgICAgICAgICAgICBpZihjbG9uZS5uZXh0KCkhPTB4YWMwMCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvciBpbiBOb3JtYWxpemVyKE5vcm1hbGl6ZXIoQ2hhcmFjdGVySXRlcmF0b3IpKS5uZXh0KCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBjaCA9IGNsb25lLm5leHQoKTsKKyAgICAgICAgICAgIGlmKGNoIT0weDRlM2QpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiZXJyb3IgaW4gTm9ybWFsaXplcihOb3JtYWxpemVyKENoYXJhY3Rlckl0ZXJhdG9yKSkuY2xvbmUoKS5uZXh0KCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHBvc2l0aW9uIGNoYW5nZWQsIG11c3QgY2hhbmdlIGhhc2hDb2RlKCkKKyAgICAgICAgICAgIGlmKGNsb25lLmhhc2hDb2RlKCk9PW5vcm0uaGFzaENvZGUoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvciBpbiBOb3JtYWxpemVyKE5vcm1hbGl6ZXIoQ2hhcmFjdGVySXRlcmF0b3IpKS5jbG9uZSgpLm5leHQoKS5oYXNoQ29kZSgpPT1jb3B5Lmhhc2hDb2RlKCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8vIHRlc3QgY29tcG9zZSgpIGFuZCBkZWNvbXBvc2UoKQorICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHRlbDsKKyAgICAgICAgICAgIFN0cmluZyBuZmtjLCBuZmtkOworICAgICAgICAgICAgdGVsPW5ldyBTdHJpbmdCdWZmZXIoIlx1MjEyMVx1MjEyMVx1MjEyMVx1MjEyMVx1MjEyMVx1MjEyMVx1MjEyMVx1MjEyMVx1MjEyMVx1MjEyMSIpOworICAgICAgICAgICAgdGVsLmluc2VydCgxLChjaGFyKTB4MDMwMSk7CisgICAgCisgICAgICAgICAgICBuZmtjPU5vcm1hbGl6ZXIuY29tcG9zZSh0ZWwudG9TdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgICAgICBuZmtkPU5vcm1hbGl6ZXIuZGVjb21wb3NlKHRlbC50b1N0cmluZygpLCB0cnVlKTsKKyAgICAgICAgICAgIGlmKAorICAgICAgICAgICAgICAgICFuZmtjLmVxdWFscyhVdGlsaXR5LnVuZXNjYXBlKCJURVx1MDEzOVRFTFRFTFRFTFRFTFRFTFRFTFRFTFRFTFRFTCIpKXx8CisgICAgICAgICAgICAgICAgIW5ma2QuZXF1YWxzKFV0aWxpdHkudW5lc2NhcGUoIlRFTFx1MDMwMVRFTFRFTFRFTFRFTFRFTFRFTFRFTFRFTFRFTCIpKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXI6OihkZSljb21wb3NlKCk6IHdyb25nIHJlc3VsdChzKSIpOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgLy8gdGVzdCBzZXRJbmRleCgpCisgICAgICAgICAgICBjaD1ub3JtLnNldEluZGV4KDMpOworICAgICAgICAgICAgaWYoY2ghPTB4NGUzZCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvciBpbiBOb3JtYWxpemVyKENoYXJhY3Rlckl0ZXJhdG9yKS5zZXRJbmRleCgzKSIpOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgLy8gdGVzdCBzZXRUZXh0KENoYXJhY3Rlckl0ZXJhdG9yKSBhbmQgZ2V0VGV4dCgpCisgICAgICAgICAgICBTdHJpbmcgb3V0LCBvdXQyOworICAgICAgICAgICAgY2xvbmUuc2V0VGV4dChpdGVyKTsKKyAgICAKKyAgICAgICAgICAgIG91dCA9IGNsb25lLmdldFRleHQoKTsKKyAgICAgICAgICAgIG91dDIgPSBpdGVyLmdldFRleHQoKTsKKyAgICAgICAgICAgIGlmKCAhb3V0LmVxdWFscyhvdXQyKSB8fAorICAgICAgICAgICAgICAgIGNsb25lLnN0YXJ0SW5kZXgoKSE9MHx8CisgICAgICAgICAgICAgICAgY2xvbmUuZW5kSW5kZXgoKSE9aXRlci5nZXRMZW5ndGgoKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXI6OnNldFRleHQoKSBvciBOb3JtYWxpemVyOjpnZXRUZXh0KCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgCisgICAgICAgICAgICBjaGFyW10gZmlsbEluMSA9IG5ldyBjaGFyW2Nsb25lLmdldExlbmd0aCgpXTsKKyAgICAgICAgICAgIGNoYXJbXSBmaWxsSW4yID0gbmV3IGNoYXJbaXRlci5nZXRMZW5ndGgoKV07CisgICAgICAgICAgICBpbnQgbGVuID0gY2xvbmUuZ2V0VGV4dChmaWxsSW4xKTsKKyAgICAgICAgICAgIGl0ZXIuZ2V0VGV4dChmaWxsSW4yLDApOworICAgICAgICAgICAgaWYoIVV0aWxpdHkuYXJyYXlSZWdpb25NYXRjaGVzKGZpbGxJbjEsMCxmaWxsSW4yLDAsbGVuKSl7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXIuZ2V0VGV4dCgpLiBOb3JtYWxpemVyOiAiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmhleChuZXcgU3RyaW5nKGZpbGxJbjEpKSsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgSXRlcjogIiArIFV0aWxpdHkuaGV4KG5ldyBTdHJpbmcoZmlsbEluMikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2xvbmUuc2V0VGV4dChmaWxsSW4xKTsKKyAgICAgICAgICAgIGxlbiA9IGNsb25lLmdldFRleHQoZmlsbEluMik7CisgICAgICAgICAgICBpZighVXRpbGl0eS5hcnJheVJlZ2lvbk1hdGNoZXMoZmlsbEluMSwwLGZpbGxJbjIsMCxsZW4pKXsKKyAgICAgICAgICAgICAgICBlcnJsbigiZXJyb3IgaW4gTm9ybWFsaXplci5zZXRUZXh0KCkgb3IgTm9ybWFsaXplci5nZXRUZXh0KCkiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmhleChuZXcgU3RyaW5nKGZpbGxJbjEpKSsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgSXRlcjogIiArIFV0aWxpdHkuaGV4KG5ldyBTdHJpbmcoZmlsbEluMikpKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8vIHRlc3Qgc2V0VGV4dChVQ2hhciAqKSwgZ2V0VU1vZGUoKSBhbmQgc2V0TW9kZSgpCisgICAgICAgICAgICBjbG9uZS5zZXRUZXh0KHMpOworICAgICAgICAgICAgY2xvbmUuc2V0SW5kZXhPbmx5KDEpOworICAgICAgICAgICAgY2xvbmUuc2V0TW9kZShOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICBpZihjbG9uZS5nZXRNb2RlKCkhPU5vcm1hbGl6ZXIuTkZEKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXI6OnNldE1vZGUoKSBvciBOb3JtYWxpemVyOjpnZXRNb2RlKCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGNsb25lLm5leHQoKSE9MHgzMDggfHwgY2xvbmUubmV4dCgpIT0weDExMDApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiZXJyb3IgaW4gTm9ybWFsaXplcjo6c2V0VGV4dCgpIG9yIE5vcm1hbGl6ZXI6OnNldE1vZGUoKSIpOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgLy8gdGVzdCBsYXN0KCkvcHJldmlvdXMoKSB3aXRoIGFuIGludGVybmFsIGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoImFhYWFhYWFhYWEiKTsKKyAgICAgICAgICAgIGJ1Zi5zZXRDaGFyQXQoMTAtMSwnXHUwMzA4Jyk7CisgICAgICAgICAgICBjbG9uZS5zZXRUZXh0KGJ1Zik7CisgICAgICAgICAgICBpZihjbG9uZS5sYXN0KCkhPTB4MzA4KSB7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXIoMTAqVSswMzA4KS5sYXN0KCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8vIHRlc3QgVU5PUk1fTk9ORQorICAgICAgICAgICAgbm9ybS5zZXRNb2RlKE5vcm1hbGl6ZXIuTk9ORSk7CisgICAgICAgICAgICBpZihub3JtLmZpcnN0KCkhPTB4NjEgfHwgbm9ybS5uZXh0KCkhPTB4MzA4IHx8IG5vcm0ubGFzdCgpIT0weDJmODAwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXIoVU5PUk1fTk9ORSkuZmlyc3QoKS9uZXh0KCkvbGFzdCgpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQ9Tm9ybWFsaXplci5ub3JtYWxpemUocywgTm9ybWFsaXplci5OT05FKTsKKyAgICAgICAgICAgIGlmKCFvdXQuZXF1YWxzKHMpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXI6Om5vcm1hbGl6ZShVTk9STV9OT05FKSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfQorCX0KKworCXB1YmxpYyB2b2lkIFRlc3RDb25jYXRlbmF0ZSgpIHsKKworCSAgICBPYmplY3RbXVtdY2FzZXM9bmV3IE9iamVjdFtdW117CisJICAgICAgICAvKiBtb2RlLCBsZWZ0LCByaWdodCwgcmVzdWx0ICovCisJICAgICAgICB7CisJICAgICAgICAgICAgTm9ybWFsaXplci5ORkMsCisJICAgICAgICAgICAgInJlIiwKKwkgICAgICAgICAgICAiXHUwMzAxc3VtXHUwMGU5IiwKKwkgICAgICAgICAgICAiclx1MDBlOXN1bVx1MDBlOSIKKwkgICAgICAgIH0sCisJICAgICAgICB7CisJICAgICAgICAgICAgTm9ybWFsaXplci5ORkMsCisJICAgICAgICAgICAgImFcdTExMDAiLAorCSAgICAgICAgICAgICJcdTExNjFiY2RlZmdoaWprIiwKKwkgICAgICAgICAgICAiYVx1YWMwMGJjZGVmZ2hpamsiCisJICAgICAgICB9LAorCSAgICAgICAgLyogIyMjIFRPRE86IGFkZCBtb3JlIGludGVyZXN0aW5nIGNhc2VzICovCisJICAgICAgICB7CisJICAgICAgICAgICAgTm9ybWFsaXplci5ORkQsCisJICAgICAgICAgICAgIlx1MDM0MFx1MDM0MVx1MDM0M1x1MDM0NFx1MDM3NFx1MDM3RVx1MDM4N1x1MDk1OCIgKworCSAgICAgICAgICAgICJcdTA5NTlcdTA5NUFcdTA5NUJcdTA5NUNcdTA5NURcdTA5NUVcdTA5NUZcdTA5REMiICsKKwkgICAgICAgICAgICAiXHUwOUREXHUwOURGXHUwQTMzXHUwQTM2XHUwQTU5XHUwQTVBXHUwQTVCXHUwQTVFIiArCisJICAgICAgICAgICAgIlx1MEI1Q1x1MEI1RFx1MEY0M1x1MEY0RFx1MEY1Mlx1MEY1N1x1MEY1Q1x1MEY2OSIgKworCSAgICAgICAgICAgICJcdTBGNzNcdTBGNzVcdTBGNzZcdTBGNzhcdTBGODFcdTBGOTNcdTBGOURcdTBGQTIiICsKKwkgICAgICAgICAgICAiXHUwRkE3XHUwRkFDXHUwRkI5XHUxRjcxXHUxRjczXHUxRjc1XHUxRjc3XHUxRjc5IiArCisJICAgICAgICAgICAgIlx1MUY3Qlx1MUY3RFx1MUZCQlx1MUZCRVx1MUZDOVx1MUZDQlx1MUZEM1x1MUZEQiIsCisKKwkgICAgICAgICAgICAiXHUxRkUzXHUxRkVCXHUxRkVFXHUxRkVGXHUxRkY5XHUxRkZCXHUxRkZEXHUyMDAwIiArCisJICAgICAgICAgICAgIlx1MjAwMVx1MjEyNlx1MjEyQVx1MjEyQlx1MjMyOVx1MjMyQVx1RjkwMFx1RkExMCIgKworCSAgICAgICAgICAgICJcdUZBMTJcdUZBMTVcdUZBMjBcdUZBMjJcdUZBMjVcdUZBMjZcdUZBMkFcdUZCMUYiICsKKwkgICAgICAgICAgICAiXHVGQjJBXHVGQjJCXHVGQjJDXHVGQjJEXHVGQjJFXHVGQjJGXHVGQjMwXHVGQjMxIiArCisJICAgICAgICAgICAgIlx1RkIzMlx1RkIzM1x1RkIzNFx1RkIzNVx1RkIzNlx1RkIzOFx1RkIzOVx1RkIzQSIgKworCSAgICAgICAgICAgICJcdUZCM0JcdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYiICsKKwkgICAgICAgICAgICAiXHVGQjQ3XHVGQjQ4XHVGQjQ5XHVGQjRBXHVGQjRCXHVGQjRDXHVGQjREXHVGQjRFIiwKKworCSAgICAgICAgICAgICJcdTAzNDBcdTAzNDFcdTAzNDNcdTAzNDRcdTAzNzRcdTAzN0VcdTAzODdcdTA5NTgiICsKKwkgICAgICAgICAgICAiXHUwOTU5XHUwOTVBXHUwOTVCXHUwOTVDXHUwOTVEXHUwOTVFXHUwOTVGXHUwOURDIiArCisJICAgICAgICAgICAgIlx1MDlERFx1MDlERlx1MEEzM1x1MEEzNlx1MEE1OVx1MEE1QVx1MEE1Qlx1MEE1RSIgKworCSAgICAgICAgICAgICJcdTBCNUNcdTBCNURcdTBGNDNcdTBGNERcdTBGNTJcdTBGNTdcdTBGNUNcdTBGNjkiICsKKwkgICAgICAgICAgICAiXHUwRjczXHUwRjc1XHUwRjc2XHUwRjc4XHUwRjgxXHUwRjkzXHUwRjlEXHUwRkEyIiArCisJICAgICAgICAgICAgIlx1MEZBN1x1MEZBQ1x1MEZCOVx1MUY3MVx1MUY3M1x1MUY3NVx1MUY3N1x1MUY3OSIgKworCSAgICAgICAgICAgICJcdTFGN0JcdTFGN0RcdTFGQkJcdTFGQkVcdTFGQzlcdTFGQ0JcdTFGRDNcdTAzOTkiICsKKwkgICAgICAgICAgICAiXHUwMzAxXHUwM0M1XHUwMzA4XHUwMzAxXHUxRkVCXHUxRkVFXHUxRkVGXHUxRkY5IiArCisJICAgICAgICAgICAgIlx1MUZGQlx1MUZGRFx1MjAwMFx1MjAwMVx1MjEyNlx1MjEyQVx1MjEyQlx1MjMyOSIgKworCSAgICAgICAgICAgICJcdTIzMkFcdUY5MDBcdUZBMTBcdUZBMTJcdUZBMTVcdUZBMjBcdUZBMjJcdUZBMjUiICsKKwkgICAgICAgICAgICAiXHVGQTI2XHVGQTJBXHVGQjFGXHVGQjJBXHVGQjJCXHVGQjJDXHVGQjJEXHVGQjJFIiArCisJICAgICAgICAgICAgIlx1RkIyRlx1RkIzMFx1RkIzMVx1RkIzMlx1RkIzM1x1RkIzNFx1RkIzNVx1RkIzNiIgKworCSAgICAgICAgICAgICJcdUZCMzhcdUZCMzlcdUZCM0FcdUZCM0JcdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDEiICsKKwkgICAgICAgICAgICAiXHVGQjQzXHVGQjQ0XHVGQjQ2XHVGQjQ3XHVGQjQ4XHVGQjQ5XHVGQjRBXHVGQjRCIiArCisJICAgICAgICAgICAgIlx1RkI0Q1x1RkI0RFx1RkI0RSIKKwkgICAgICAgIH0KKwkgICAgfTsKKworCSAgICBTdHJpbmcgbGVmdCwgcmlnaHQsIGV4cGVjdCwgcmVzdWx0OworCSAgICBOb3JtYWxpemVyLk1vZGUgbW9kZTsKKwkgICAgaW50IGk7CisKKwkgICAgLyogdGVzdCBjb25jYXRlbmF0aW9uICovCisJICAgIGZvcihpPTA7IGk8Y2FzZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIG1vZGUgPSAoTm9ybWFsaXplci5Nb2RlKWNhc2VzW2ldWzBdOworCisJICAgICAgICBsZWZ0PShTdHJpbmcpY2FzZXNbaV1bMV07CisJICAgICAgICByaWdodD0oU3RyaW5nKWNhc2VzW2ldWzJdOworCSAgICAgICAgZXhwZWN0PShTdHJpbmcpY2FzZXNbaV1bM107CisJCSAgICB7CisJICAgICAgICAgICAgcmVzdWx0PU5vcm1hbGl6ZXIuY29uY2F0ZW5hdGUobGVmdCwgcmlnaHQsIG1vZGUpOworCQkgICAgICAgIGlmKCByZXN1bHQuZXF1YWxzKGV4cGVjdCkpIHsKKwkJICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXIuY29uY2F0ZW5hdGUoKSwgY2FzZXNbXSBmYWlsZWQiCisJICAgICAgICAgICAgICAgICAgICAgICsiLCByZXN1bHQ9PWV4cGVjdDogZXhwZWN0ZWQ6ICIKKwkgICAgICAgICAgICAgICAgICAgICAgKyBoZXgoZXhwZWN0KSsiID09PT09PT09PT4gZ290OiAiICsgaGV4KHJlc3VsdCkpOworCQkgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQ9Tm9ybWFsaXplci5jb25jYXRlbmF0ZShsZWZ0LnRvQ2hhckFycmF5KCksIHJpZ2h0LnRvQ2hhckFycmF5KCksIG1vZGUpOworICAgICAgICAgICAgICAgIGlmKCByZXN1bHQuZXF1YWxzKGV4cGVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oImVycm9yIGluIE5vcm1hbGl6ZXIuY29uY2F0ZW5hdGUoKSwgY2FzZXNbXSBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICsiLCByZXN1bHQ9PWV4cGVjdDogZXhwZWN0ZWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoZXgoZXhwZWN0KSsiID09PT09PT09PT4gZ290OiAiICsgaGV4KHJlc3VsdCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwkgICAgfQorCX0KKyAgICBwcml2YXRlIGZpbmFsIGludCBSQU5EX01BWCA9IDB4N2ZmZjsKKworICAgIHB1YmxpYyB2b2lkIFRlc3RDaGVja0ZDRCgpCisJeworCSAgY2hhcltdIEZBU1QgPSB7MHgwMDAxLCAweDAwMDIsIDB4MDAwMywgMHgwMDA0LCAweDAwMDUsIDB4MDAwNiwgMHgwMDA3LAorICAgICAgICAgICAgICAgICAgICAgMHgwMDA4LCAweDAwMDksIDB4MDAwQX07CisKKwkgIGNoYXJbXSBGQUxTRSA9IHsweDAwMDEsIDB4MDAwMiwgMHgwMkVBLCAweDAzRUIsIDB4MDMwMCwgMHgwMzAxLAorCSAgICAgICAgICAgICAgICAgIDB4MDJCOSwgMHgwMzE0LCAweDAzMTUsIDB4MDMxNn07CisKKyAgICAgIGNoYXJbXSBUUlVFID0gezB4MDAzMCwgMHgwMDQwLCAweDA0NDAsIDB4MDU2RCwgMHgwNjRGLCAweDA2RTcsCisJICAgICAgICAgICAgICAgICAweDAwNTAsIDB4MDczMCwgMHgwOUVFLCAweDFFMTB9OworCisJICBjaGFyW11bXSBkYXRhc3RyPSB7IHsweDAwNjEsIDB4MDMwQSwgMHgxRTA1LCAweDAzMDIsIDB9LAorCSAgICAgICAgICAgICAgICAgICAgICB7MHgwMDYxLCAweDAzMEEsIDB4MDBFMiwgMHgwMzIzLCAwfSwKKwkgICAgICAgICAgICAgICAgICAgICAgezB4MDA2MSwgMHgwMzIzLCAweDAwRTIsIDB4MDMyMywgMH0sCisJICAgICAgICAgICAgICAgICAgICAgIHsweDAwNjEsIDB4MDMyMywgMHgxRTA1LCAweDAzMDIsIDB9CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCSAgTm9ybWFsaXplci5RdWlja0NoZWNrUmVzdWx0IHJlc3VsdFtdID0ge05vcm1hbGl6ZXIuWUVTLCBOb3JtYWxpemVyLk5PLCBOb3JtYWxpemVyLk5PLCBOb3JtYWxpemVyLllFU307CisKKwkgIGNoYXJbXSBkYXRhY2hhcj0geyAgICAgICAgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2YSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMCwgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlYSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwLCAweDAzMDEsIDB4MDMwMiwgMHgwMzAzLCAweDAzMDQsIDB4MDMwNSwgMHgwMzA2LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDcsIDB4MDMwOCwgMHgwMzA5LCAweDAzMGEsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMyMCwgMHgwMzIxLCAweDAzMjIsIDB4MDMyMywgMHgwMzI0LCAweDAzMjUsIDB4MDMyNiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzI3LCAweDAzMjgsIDB4MDMyOSwgMHgwMzJhLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFlMDAsIDB4MWUwMSwgMHgxZTAyLCAweDFlMDMsIDB4MWUwNCwgMHgxZTA1LCAweDFlMDYsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWUwNywgMHgxZTA4LCAweDFlMDksIDB4MWUwYQorICAgICAgICAgICAgICAgICAgICAgICB9OworCisJICBpbnQgY291bnQgPSAwOworCisJICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKEZBU1QsMCxGQVNULmxlbmd0aCwgTm9ybWFsaXplci5GQ0QpICE9IE5vcm1hbGl6ZXIuWUVTKQorCSAgICBlcnJsbigiTmV3Tm9ybWFsaXplci5xdWlja0NoZWNrKEZDRCkgZmFpbGVkOiBleHBlY3RlZCB2YWx1ZSBmb3IgZmFzdCBOZXdOb3JtYWxpemVyLnF1aWNrQ2hlY2sgaXMgTmV3Tm9ybWFsaXplci5ZRVNcbiIpOworCSAgaWYgKE5vcm1hbGl6ZXIucXVpY2tDaGVjayhGQUxTRSwwLCBGQUxTRS5sZW5ndGgsTm9ybWFsaXplci5GQ0QpICE9IE5vcm1hbGl6ZXIuTk8pCisJICAgIGVycmxuKCJOZXdOb3JtYWxpemVyLnF1aWNrQ2hlY2soRkNEKSBmYWlsZWQ6IGV4cGVjdGVkIHZhbHVlIGZvciBlcnJvciBOZXdOb3JtYWxpemVyLnF1aWNrQ2hlY2sgaXMgTmV3Tm9ybWFsaXplci5OT1xuIik7CisJICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKFRSVUUsMCxUUlVFLmxlbmd0aCxOb3JtYWxpemVyLkZDRCkgIT0gTm9ybWFsaXplci5ZRVMpCisJICAgIGVycmxuKCJOZXdOb3JtYWxpemVyLnF1aWNrQ2hlY2soRkNEKSBmYWlsZWQ6IGV4cGVjdGVkIHZhbHVlIGZvciBjb3JyZWN0IE5ld05vcm1hbGl6ZXIucXVpY2tDaGVjayBpcyBOZXdOb3JtYWxpemVyLllFU1xuIik7CisKKworCSAgd2hpbGUgKGNvdW50IDwgNCkKKwkgIHsKKwkgICAgTm9ybWFsaXplci5RdWlja0NoZWNrUmVzdWx0IGZjZHJlc3VsdCA9IE5vcm1hbGl6ZXIucXVpY2tDaGVjayhkYXRhc3RyW2NvdW50XSwwLGRhdGFzdHJbY291bnRdLmxlbmd0aCwgTm9ybWFsaXplci5GQ0QpOworICAgICAgICBpZiAocmVzdWx0W2NvdW50XSAhPSBmY2RyZXN1bHQpIHsKKwkgICAgICAgIGVycmxuKCJOZXdOb3JtYWxpemVyLnF1aWNrQ2hlY2soRkNEKSBmYWlsZWQ6IERhdGEgc2V0ICIrIGNvdW50CisgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZCB2YWx1ZSAiKyByZXN1bHRbY291bnRdKTsKKwkgICAgfQorCSAgICBjb3VudCArKzsKKwkgIH0KKworCSAgLyogcmFuZG9tIGNoZWNrcyBvZiBsb25nIHN0cmluZ3MgKi8KKwkgIC8vc3JhbmQoKHVuc2lnbmVkKXRpbWUoIE5VTEwgKSk7CisgICAgICBSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKKworCisJICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCA1MDsgY291bnQgKyspCisJICB7CisJICAgIGludCBzaXplID0gMDsKKwkgICAgTm9ybWFsaXplci5RdWlja0NoZWNrUmVzdWx0IHRlc3RyZXN1bHQgPSBOb3JtYWxpemVyLllFUzsKKwkgICAgY2hhcltdIGRhdGE9IG5ldyBjaGFyWzIwXTsKKwkgICAgY2hhcltdIG5vcm09IG5ldyBjaGFyWzEwMF07CisJICAgIGNoYXJbXSBuZmQgPSBuZXcgY2hhclsxMDBdOworCSAgICBpbnQgbm9ybVN0YXJ0ID0gMDsKKwkgICAgaW50IG5mZHNpemUgPSAwOworCSAgICB3aGlsZSAoc2l6ZSAhPSAxOSkgeworCSAgICAgIGRhdGFbc2l6ZV0gPSBkYXRhY2hhcltyYW5kLm5leHRJbnQoUkFORF9NQVgpKjUwL1JBTkRfTUFYXTsKKwkgICAgICBsb2dsbigiMHgiK2RhdGFbc2l6ZV0pOworCSAgICAgIG5vcm1TdGFydCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGRhdGEsc2l6ZSxzaXplKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSxub3JtU3RhcnQsMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZEKTsKKwkgICAgICBzaXplICsrOworCSAgICB9CisJICAgIGxvZ2xuKCJcbiIpOworCisJICAgIG5mZHNpemUgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShkYXRhLDAsc2l6ZSwgbmZkLDAsbmZkLmxlbmd0aCxOb3JtYWxpemVyLk5GRCk7CisgICAgICAgIC8vICAgIG5mZHNpemUgPSB1bm9ybV9ub3JtYWxpemUoZGF0YSwgc2l6ZSwgVU5PUk1fTkZELCBVQ09MX0lHTk9SRV9IQU5HVUwsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIG5mZCwgMTAwLCAmc3RhdHVzKTsKKyAgICAgICAgaWYgKG5mZHNpemUgIT0gbm9ybVN0YXJ0IHx8IFV0aWxpdHkuYXJyYXlSZWdpb25NYXRjaGVzKG5mZCwwLCBub3JtLDAsbmZkc2l6ZSkgPT1mYWxzZSkgeworCSAgICAgIHRlc3RyZXN1bHQgPSBOb3JtYWxpemVyLk5POworCSAgICB9CisJICAgIGlmICh0ZXN0cmVzdWx0ID09IE5vcm1hbGl6ZXIuWUVTKSB7CisJICAgICAgbG9nbG4oInJlc3VsdCBOZXdOb3JtYWxpemVyLllFU1xuIik7CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgbG9nbG4oInJlc3VsdCBOZXdOb3JtYWxpemVyLk5PXG4iKTsKKwkgICAgfQorCisJICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soZGF0YSwwLGRhdGEubGVuZ3RoLCBOb3JtYWxpemVyLkZDRCkgIT0gdGVzdHJlc3VsdCkgeworCSAgICAgIGVycmxuKCJOZXdOb3JtYWxpemVyLnF1aWNrQ2hlY2soRkNEKSBmYWlsZWQ6IGV4cGVjdGVkICIrIHRlc3RyZXN1bHQrIiBmb3IgcmFuZG9tIGRhdGFcbiIgKTsKKwkgICAgfQorCSAgfQorCX0KKworCisJLy8gcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIE5vcm1hbGl6ZXI6OmNvbXBhcmUKKwlwcml2YXRlIGludCByZWZfbm9ybV9jb21wYXJlKFN0cmluZyBzMSwgU3RyaW5nIHMyLCBpbnQgb3B0aW9ucykgeworCSAgICBTdHJpbmcgdDEsIHQyLHIxLHIyOworCisgICAgICAgIHIxPXMxOworICAgICAgICByMj1zMjsKKworCSAgICBpZigob3B0aW9ucyZOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UpIT0wKSB7CisJICAgICAgICByMSA9IFVDaGFyYWN0ZXIuZm9sZENhc2UoczEsKChvcHRpb25zJk5vcm1hbGl6ZXIuRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JKT09MCkpOworCSAgICAgICAgcjIgPSBVQ2hhcmFjdGVyLmZvbGRDYXNlKHMyLCgob3B0aW9ucyZOb3JtYWxpemVyLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSk9PTApKTsKKwkgICAgfQorCisgICAgICAgICB0MSA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKHIxLCBmYWxzZSk7CisgICAgICAgICB0MiA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKHIyLCBmYWxzZSk7CisKKwkgICAgaWYoKG9wdGlvbnMmTm9ybWFsaXplci5DT01QQVJFX0NPREVfUE9JTlRfT1JERVIpIT0wKSB7CisgICAgICAgICAgICBVVEYxNi5TdHJpbmdDb21wYXJhdG9yIGNvbXAgCisgICAgICAgICAgICAgICAgICAgID0gbmV3IFVURjE2LlN0cmluZ0NvbXBhcmF0b3IodHJ1ZSwgZmFsc2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LlN0cmluZ0NvbXBhcmF0b3IuRk9MRF9DQVNFX0RFRkFVTFQpOworCSAgICAgICAgcmV0dXJuIGNvbXAuY29tcGFyZSh0MSx0Mik7CisJICAgIH0gZWxzZSB7CisJICAgICAgICByZXR1cm4gdDEuY29tcGFyZVRvKHQyKTsKKwkgICAgfQorCisJfQorCisJLy8gdGVzdCB3cmFwcGVyIGZvciBOb3JtYWxpemVyOjpjb21wYXJlLCBzZXRzIFVOT1JNX0lOUFVUX0lTX0ZDRCBhcHByb3ByaWF0ZWx5CisJcHJpdmF0ZSBpbnQgbm9ybV9jb21wYXJlKFN0cmluZyBzMSwgU3RyaW5nIHMyLCBpbnQgb3B0aW9ucykgeworCSAgICBpZiggTm9ybWFsaXplci5ZRVM9PU5vcm1hbGl6ZXIucXVpY2tDaGVjayhzMSxOb3JtYWxpemVyLkZDRCkgJiYKKwkgICAgICAgIE5vcm1hbGl6ZXIuWUVTPT1Ob3JtYWxpemVyLnF1aWNrQ2hlY2soczIsTm9ybWFsaXplci5GQ0QpKSB7CisJICAgICAgICBvcHRpb25zfD1Ob3JtYWxpemVyLklOUFVUX0lTX0ZDRDsKKwkgICAgfQorCisJICAgIHJldHVybiBOb3JtYWxpemVyLmNvbXBhcmUoczEsIHMyLCBvcHRpb25zKTsKKwl9CisKKwkvLyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBhcmUKKwlwcml2YXRlIGludCByZWZfY2FzZV9jb21wYXJlKFN0cmluZyBzMSwgU3RyaW5nIHMyLCBpbnQgb3B0aW9ucykgeworCSAgICBTdHJpbmcgdDEsIHQyOworCisJICAgIHQxPXMxOworCSAgICB0Mj1zMjsKKworCSAgICB0MSA9IFVDaGFyYWN0ZXIuZm9sZENhc2UodDEsKChvcHRpb25zJk5vcm1hbGl6ZXIuRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JKT09MCkpOworCSAgICB0MiA9IFVDaGFyYWN0ZXIuZm9sZENhc2UodDIsKChvcHRpb25zJk5vcm1hbGl6ZXIuRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JKT09MCkpOworCisgICAgICAgIGlmKChvcHRpb25zJk5vcm1hbGl6ZXIuQ09NUEFSRV9DT0RFX1BPSU5UX09SREVSKSE9MCkgeworICAgICAgICAgICAgVVRGMTYuU3RyaW5nQ29tcGFyYXRvciBjb21wIAorICAgICAgICAgICAgICAgICAgICA9IG5ldyBVVEYxNi5TdHJpbmdDb21wYXJhdG9yKHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCk7CisgICAgICAgICAgICByZXR1cm4gY29tcC5jb21wYXJlKHQxLHQyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0MS5jb21wYXJlVG8odDIpOworICAgICAgICB9CisKKwl9CisKKwkvLyByZWR1Y2UgYW4gaW50ZWdlciB0byAtMS8wLzEKKwlwcml2YXRlIHN0YXRpYyBpbnQgc2lnbihpbnQgdmFsdWUpIHsKKwkgICAgaWYodmFsdWU9PTApIHsKKwkgICAgICAgIHJldHVybiAwOworCSAgICB9IGVsc2UgeworCSAgICAgICAgcmV0dXJuICh2YWx1ZT4+MzEpfDE7CisJICAgIH0KKwl9CisgICAgICAgICAgICAvLyB0ZXN0IE5vcm1hbGl6ZXI6OmNvbXBhcmUgYW5kIHVub3JtX2NvbXBhcmUgKHRoaW5seSB3cmFwcGVkIGJ5IHRoZSBmb3JtZXIpCisgICAgICAgIC8vIGJ5IGNvbXBhcmluZyBpdCB3aXRoIGl0cyBzZW1hbnRpYyBlcXVpdmFsZW50CisgICAgICAgIC8vIHNpbmNlIHdlIHRydXN0IHRoZSBwaWVjZXMsIHRoaXMgaXMgc3VmZmljaWVudAorCisgICAgICAgIC8vIHRlc3QgZWFjaCBzdHJpbmcgd2l0aCBpdHNlbGYgYW5kIGVhY2ggb3RoZXIKKyAgICAgICAgLy8gZWFjaCB0aW1lIHdpdGggYWxsIG9wdGlvbnMKKyAgICAgcHJpdmF0ZSAgU3RyaW5nIHN0cmluZ3NbXT1uZXcgU3RyaW5nW117CisgICAgICAgICAgICAvLyBzb21lIGNhc2VzIGZyb20gTm9ybWFsaXphdGlvblRlc3QudHh0CisgICAgICAgICAgICAvLyAwLi4zCisgICAgICAgICAgICAiRFx1MDMxQlx1MDMwN1x1MDMyMyIsCisgICAgICAgICAgICAiXHUxRTBDXHUwMzFCXHUwMzA3IiwKKyAgICAgICAgICAgICJEXHUwMzFCXHUwMzIzXHUwMzA3IiwKKyAgICAgICAgICAgICJkXHUwMzFCXHUwMzIzXHUwMzA3IiwKKworICAgICAgICAgICAgLy8gNC4uNgorICAgICAgICAgICAgIlx1MDBFNCIsCisgICAgICAgICAgICAiYVx1MDMwOCIsCisgICAgICAgICAgICAiQVx1MDMwOCIsCisKKyAgICAgICAgICAgIC8vIEFuZ3N0cm9tIHNpZ24gPSBBIHJpbmcKKyAgICAgICAgICAgIC8vIDcuLjEwCisgICAgICAgICAgICAiXHUyMTJCIiwKKyAgICAgICAgICAgICJcdTAwQzUiLAorICAgICAgICAgICAgIkFcdTAzMEEiLAorICAgICAgICAgICAgImFcdTAzMEEiLAorCisgICAgICAgICAgICAvLyAxMS4xNAorICAgICAgICAgICAgImFcdTA1OUFcdTAzMTZcdTMwMkFcdTAzMkZiIiwKKyAgICAgICAgICAgICJhXHUzMDJBXHUwMzE2XHUwMzJGXHUwNTlBYiIsCisgICAgICAgICAgICAiYVx1MzAyQVx1MDMxNlx1MDMyRlx1MDU5QWIiLAorICAgICAgICAgICAgIkFcdTA1OUFcdTAzMTZcdTMwMkFcdTAzMkZiIiwKKworICAgICAgICAgICAgLy8gZnJvbSBJQ1UgY2FzZSBmb2xkaW5nIHRlc3RzCisgICAgICAgICAgICAvLyAxNS4uMjAKKyAgICAgICAgICAgICJBXHUwMGRmXHUwMGI1XHVmYjAzXFxVMDAwMTA0MGNcdTAxMzEiLAorICAgICAgICAgICAgImFzc1x1MDNiY2ZmaVxcVTAwMDEwNDM0aSIsCisgICAgICAgICAgICAiXHUwMDYxXHUwMDQyXHUwMTMxXHUwM2EzXHUwMGRmXHVmYjAzXHVkOTNmXHVkZmZmIiwKKyAgICAgICAgICAgICJcdTAwNDFcdTAwNjJcdTAwNjlcdTAzYzNcdTAwNzNcdTAwNTNcdTAwNDZcdTAwNjZcdTAwNDlcdWQ5M2ZcdWRmZmYiLAorICAgICAgICAgICAgIlx1MDA0MVx1MDA2Mlx1MDEzMVx1MDNjM1x1MDA1M1x1MDA3M1x1MDA2Nlx1MDA0Nlx1MDA2OVx1ZDkzZlx1ZGZmZiIsCisgICAgICAgICAgICAiXHUwMDQxXHUwMDYyXHUwMDY5XHUwM2MzXHUwMDczXHUwMDUzXHUwMDQ2XHUwMDY2XHUwMDQ5XHVkOTNmXHVkZmZkIiwKKworICAgICAgICAgICAgLy8gICAgIFUrZDgwMCBVKzEwMDAxICAgc2VlIGltcGxlbWVudGF0aW9uIGNvbW1lbnQgaW4gdW5vcm1fY21wRXF1aXZGb2xkCisgICAgICAgICAgICAvLyB2cy4gVSsxMDAwMCAgICAgICAgICBhdCBib3R0b20gLSBjb2RlIHBvaW50IG9yZGVyCisgICAgICAgICAgICAvLyAyMS4uMjIKKyAgICAgICAgICAgICJcdWQ4MDBcdWQ4MDBcdWRjMDEiLAorICAgICAgICAgICAgIlx1ZDgwMFx1ZGMwMCIsCisKKyAgICAgICAgICAgIC8vIG90aGVyIGNvZGUgcG9pbnQgb3JkZXIgdGVzdHMgZnJvbSB1c3RydGVzdC5jcHAKKyAgICAgICAgICAgIC8vIDIzLi4zMQorICAgICAgICAgICAgIlx1MjBhY1x1ZDgwMSIsCisgICAgICAgICAgICAiXHUyMGFjXHVkODAwXHVkYzAwIiwKKyAgICAgICAgICAgICJcdWQ4MDAiLAorICAgICAgICAgICAgIlx1ZDgwMFx1ZmY2MSIsCisgICAgICAgICAgICAiXHVkZmZmIiwKKyAgICAgICAgICAgICJcdWZmNjFcdWRmZmYiLAorICAgICAgICAgICAgIlx1ZmY2MVx1ZDgwMFx1ZGMwMiIsCisgICAgICAgICAgICAiXHVkODAwXHVkYzAyIiwKKyAgICAgICAgICAgICJcdWQ4NGRcdWRjNTYiLAorCisgICAgICAgICAgICAvLyBsb25nIHN0cmluZ3MsIHNlZSBjbm9ybXRzdC5jL1Rlc3ROb3JtQ292ZXJhZ2UoKQorICAgICAgICAgICAgLy8gZXF1aXZhbGVudCBpZiBjYXNlLWluc2Vuc2l0aXZlCisgICAgICAgICAgICAvLyAzMi4uMzMKKyAgICAgICAgICAgICJcdUFEOEJcdUFEOEJcdUFEOEJcdUFEOEIiKworICAgICAgICAgICAgIlxcVTAwMDFkMTVlXFxVMDAwMWQxNTdcXFUwMDAxZDE2NVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlIisKKyAgICAgICAgICAgICJcXFUwMDAxZDE1ZVxcVTAwMDFkMTU3XFxVMDAwMWQxNjVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZSIrCisgICAgICAgICAgICAiXFxVMDAwMWQxNWVcXFUwMDAxZDE1N1xcVTAwMDFkMTY1XFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWUiKworICAgICAgICAgICAgIlxcVTAwMDFkMTU3XFxVMDAwMWQxNjVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlIisKKyAgICAgICAgICAgICJcXFUwMDAxZDE1N1xcVTAwMDFkMTY1XFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZSIrCisgICAgICAgICAgICAiYWFhYWFhYWFhYWFhYWFhYWFhenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiKworICAgICAgICAgICAgImJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIisKKyAgICAgICAgICAgICJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYyIrCisgICAgICAgICAgICAiZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQiKworICAgICAgICAgICAgIlx1QUQ4Qlx1QUQ4Qlx1QUQ4Qlx1QUQ4QiIrCisgICAgICAgICAgICAiZFx1MDMxQlx1MDMwN1x1MDMyMyIsCisKKyAgICAgICAgICAgICJcdTExMDBcdTExNmZcdTExYWFcdUFEOEJcdUFEOEJcdTExMDBcdTExNmZcdTExYWEiKworICAgICAgICAgICAgIlxcVTAwMDFkMTU3XFxVMDAwMWQxNjVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlIisKKyAgICAgICAgICAgICJcXFUwMDAxZDE1N1xcVTAwMDFkMTY1XFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZSIrCisgICAgICAgICAgICAiXFxVMDAwMWQxNTdcXFUwMDAxZDE2NVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWUiKworICAgICAgICAgICAgIlxcVTAwMDFkMTVlXFxVMDAwMWQxNTdcXFUwMDAxZDE2NVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlIisKKyAgICAgICAgICAgICJcXFUwMDAxZDE1ZVxcVTAwMDFkMTU3XFxVMDAwMWQxNjVcXFUwMDAxZDE1ZVxcVTAwMDFkMTVlXFxVMDAwMWQxNWVcXFUwMDAxZDE1ZSIrCisgICAgICAgICAgICAiYWFhYWFhYWFhYUFBQUFBQUFBWlpaWlpaWlpaWlpaWlpaWnp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiKworICAgICAgICAgICAgImJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIisKKyAgICAgICAgICAgICJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYyIrCisgICAgICAgICAgICAiZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQiKworICAgICAgICAgICAgIlx1MTEwMFx1MTE2Zlx1MTFhYVx1QUQ4Qlx1QUQ4Qlx1MTEwMFx1MTE2Zlx1MTFhYSIrCisgICAgICAgICAgICAiXHUxRTBDXHUwMzFCXHUwMzA3IiwKKyAgICAgICAgICAgICJcdTAwZGF0ZXJcdTAwZmQiLAorICAgICAgICAgICAgIlx1MDBmYXRlclx1MDBmZCIsCisJICAgICAgICAvLyBzb21lIHN0cmluZ3MgdGhhdCBtYXkgbWFrZSBhIGRpZmZlcmVuY2Ugd2hldGhlciB0aGUgY29tcGFyZSBmdW5jdGlvbgorCSAgICAgICAgLy8gY2FzZS1mb2xkcyBvciBkZWNvbXBvc2VzIGZpcnN0CisJICAgICAgICAvLyAzNC4uNDEKKwkgICAgICAgICJcdTAzNjBcdTAzNDVcdTAzMzQiLAorCSAgICAgICAgIlx1MDM2MFx1MDNiOVx1MDMzNCIsCisKKwkgICAgICAgICJcdTAzNjBcdTFmODBcdTAzMzQiLAorCSAgICAgICAgIlx1MDM2MFx1MDNiMVx1MDMxM1x1MDNiOVx1MDMzNCIsCisKKwkgICAgICAgICJcdTAzNjBcdTFmZmNcdTAzMzQiLAorCSAgICAgICAgIlx1MDM2MFx1MDNjOVx1MDNiOVx1MDMzNCIsCisKKwkgICAgICAgICJcdTAwY2MiLAorCSAgICAgICAgIlx1MDA2OVx1MDMwMCIsCisgICAgICAgICAgICAiYVx1MDM2MFx1MDM0NVx1MDM2MFx1MDM0NWIiLAorICAgICAgICAgICAgImFcdTAzNDVcdTAzNjBcdTAzNDVcdTAzNjBiIiwKKworICAgIH07CisKKwkvLyBhbGwgY29tYmluYXRpb25zIG9mIG9wdGlvbnMKKwkvLyBVTk9STV9JTlBVVF9JU19GQ0QgaXMgc2V0IGF1dG9tYXRpY2FsbHkgaWYgYm90aCBpbnB1dCBzdHJpbmdzIGZ1bGZpbGwgRkNEIGNvbmRpdGlvbnMKKwlmaW5hbCBjbGFzcyBUZW1wIHsKKwkJaW50IG9wdGlvbnM7CisJCVN0cmluZyBuYW1lOworCQlwdWJsaWMgVGVtcChpbnQgb3B0LFN0cmluZyBzdHIpeworCQkJb3B0aW9ucyA9b3B0OworCQkJbmFtZSA9IHN0cjsKKwkJfQorCisJfQorCisgICAgcHVibGljIHZvaWQgVGVzdENvbXBhcmVEZWJ1ZygpeworCisgICAgICAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nWzEwMF07IC8vIGF0IGxlYXN0IGFzIG1hbnkgaXRlbXMgYXMgaW4gc3RyaW5nc1tdICEKKworCisKKyAgICAgICAgVGVtcFtdIG9wdCA9IG5ldyBUZW1wW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUZW1wKDAsImRlZmF1bHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRlbXAoTm9ybWFsaXplci5DT01QQVJFX0NPREVfUE9JTlRfT1JERVIsICJjb2RlIHBvaW50IG9yZGVyIiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGVtcChOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UsICJpZ25vcmUgY2FzZSIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRlbXAoTm9ybWFsaXplci5DT01QQVJFX0NPREVfUE9JTlRfT1JERVJ8Tm9ybWFsaXplci5DT01QQVJFX0lHTk9SRV9DQVNFLCAiY29kZSBwb2ludCBvcmRlciAmIGlnbm9yZSBjYXNlIiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGVtcChOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0V8Tm9ybWFsaXplci5GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0ksICJpZ25vcmUgY2FzZSAmIHNwZWNpYWwgaSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGVtcChOb3JtYWxpemVyLkNPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUnxOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0V8Tm9ybWFsaXplci5GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0ksICJjb2RlIHBvaW50IG9yZGVyICYgaWdub3JlIGNhc2UgJiBzcGVjaWFsIGkiKQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworCisKKyAgICAgICAgaW50IGksIGosIGssIGNvdW50PXN0cmluZ3MubGVuZ3RoOworICAgICAgICBpbnQgcmVzdWx0LCByZWZSZXN1bHQ7CisKKyAgICAgICAgLy8gY3JlYXRlIHRoZSBVbmljb2RlU3RyaW5ncworICAgICAgICBmb3IoaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHNbaV09VXRpbGl0eS51bmVzY2FwZShzdHJpbmdzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBVVEYxNi5TdHJpbmdDb21wYXJhdG9yIGNvbXAgPSBuZXcgVVRGMTYuU3RyaW5nQ29tcGFyYXRvcih0cnVlLCBmYWxzZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCk7CisgICAgICAgIC8vIHRlc3QgdGhlbSBlYWNoIHdpdGggZWFjaCBvdGhlcgorCisgICAgICAgIGkgPSAxNTsKKyAgICAgICAgaiA9IDE2OworICAgICAgICBrID0gNDsKKyAgICAgICAgLy8gdGVzdCBOb3JtYWxpemVyOjpjb21wYXJlCisgICAgICAgIHJlc3VsdD1ub3JtX2NvbXBhcmUoc1tpXSwgc1tqXSwgb3B0W2tdLm9wdGlvbnMpOworICAgICAgICByZWZSZXN1bHQ9cmVmX25vcm1fY29tcGFyZShzW2ldLCBzW2pdLCBvcHRba10ub3B0aW9ucyk7CisgICAgICAgIGlmKHNpZ24ocmVzdWx0KSE9c2lnbihyZWZSZXN1bHQpKSB7CisgICAgICAgICAgICBlcnJsbigiTm9ybWFsaXplcjo6Y29tcGFyZSggIiArIGkgKyIsICIraiArICIsICIgK2srIiggIiArb3B0W2tdLm5hbWUrIikpPSIgKyByZXN1bHQgKyIgc2hvdWxkIGJlIHNhbWUgc2lnbiBhcyAiICsgcmVmUmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHRlc3QgVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBhcmUgLSBzYW1lIGludGVybmFsIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9uCisgICAgICAgICBpZigwIT0ob3B0W2tdLm9wdGlvbnMmTm9ybWFsaXplci5DT01QQVJFX0lHTk9SRV9DQVNFKSkgeworICAgICAgICAvLyAgICByZXN1bHQ9c1tpXS4gKHNbal0sIG9wdFtrXS5vcHRpb25zKTsKKyAgICAgICAgICAgIGlmICgob3B0W2tdLm9wdGlvbnMgJiBOb3JtYWxpemVyLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb21wLnNldElnbm9yZUNhc2UodHJ1ZSwgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wLnNldElnbm9yZUNhc2UodHJ1ZSwgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQ9Y29tcC5jb21wYXJlKHNbaV0sc1tqXSk7CisgICAgICAgICAgICByZWZSZXN1bHQ9cmVmX2Nhc2VfY29tcGFyZShzW2ldLCBzW2pdLCBvcHRba10ub3B0aW9ucyk7CisgICAgICAgICAgICBpZihzaWduKHJlc3VsdCkhPXNpZ24ocmVmUmVzdWx0KSkgeworICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJOb3JtYWxpemVyOjpjb21wYXJlKCAiICsgaSArIiwgIitqICsgIiwgIitrKyIoICIgK29wdFtrXS5uYW1lKyIpKT0iICsgcmVzdWx0ICsiIHNob3VsZCBiZSBzYW1lIHNpZ24gYXMgIiArIHJlZlJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFN0cmluZyB2YWx1ZTEgPSAiXHUwMGRhdGVyXHUwMGZkIjsKKyAgICAgICAgU3RyaW5nIHZhbHVlMiA9ICJcdTAwZmF0ZXJcdTAwZmQiOworICAgICAgICBpZihOb3JtYWxpemVyLmNvbXBhcmUodmFsdWUxLHZhbHVlMiwwKSE9MCl7CisgICAgICAgICAgICBpZihOb3JtYWxpemVyLmNvbXBhcmUodmFsdWUxLHZhbHVlMixOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UpPT0wKXsKKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisJcHVibGljIHZvaWQgVGVzdENvbXBhcmUoKSB7CisKKwkgICAgU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbMTAwXTsgLy8gYXQgbGVhc3QgYXMgbWFueSBpdGVtcyBhcyBpbiBzdHJpbmdzW10gIQorCisKKyAgICAgICAgVGVtcFtdIG9wdCA9IG5ldyBUZW1wW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUZW1wKDAsImRlZmF1bHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRlbXAoTm9ybWFsaXplci5DT01QQVJFX0NPREVfUE9JTlRfT1JERVIsICJjb2RlIHBvaW50IG9yZGVyIiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGVtcChOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UsICJpZ25vcmUgY2FzZSIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRlbXAoTm9ybWFsaXplci5DT01QQVJFX0NPREVfUE9JTlRfT1JERVJ8Tm9ybWFsaXplci5DT01QQVJFX0lHTk9SRV9DQVNFLCAiY29kZSBwb2ludCBvcmRlciAmIGlnbm9yZSBjYXNlIiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGVtcChOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0V8Tm9ybWFsaXplci5GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0ksICJpZ25vcmUgY2FzZSAmIHNwZWNpYWwgaSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGVtcChOb3JtYWxpemVyLkNPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUnxOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0V8Tm9ybWFsaXplci5GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0ksICJjb2RlIHBvaW50IG9yZGVyICYgaWdub3JlIGNhc2UgJiBzcGVjaWFsIGkiKQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworCisKKwkgICAgaW50IGksIGosIGssIGNvdW50PXN0cmluZ3MubGVuZ3RoOworCSAgICBpbnQgcmVzdWx0LCByZWZSZXN1bHQ7CisKKwkgICAgLy8gY3JlYXRlIHRoZSBVbmljb2RlU3RyaW5ncworCSAgICBmb3IoaT0wOyBpPGNvdW50OyArK2kpIHsKKwkgICAgICAgIHNbaV09VXRpbGl0eS51bmVzY2FwZShzdHJpbmdzW2ldKTsKKwkgICAgfQorCSAgICBVVEYxNi5TdHJpbmdDb21wYXJhdG9yIGNvbXAgPSBuZXcgVVRGMTYuU3RyaW5nQ29tcGFyYXRvcigpOworCSAgICAvLyB0ZXN0IHRoZW0gZWFjaCB3aXRoIGVhY2ggb3RoZXIKKwkgICAgZm9yKGk9MDsgaTxjb3VudDsgKytpKSB7CisJICAgICAgICBmb3Ioaj1pOyBqPGNvdW50OyArK2opIHsKKwkgICAgICAgICAgICBmb3Ioaz0wOyBrPG9wdC5sZW5ndGg7ICsraykgeworCSAgICAgICAgICAgICAgICAvLyB0ZXN0IE5vcm1hbGl6ZXI6OmNvbXBhcmUKKwkgICAgICAgICAgICAgICAgcmVzdWx0PW5vcm1fY29tcGFyZShzW2ldLCBzW2pdLCBvcHRba10ub3B0aW9ucyk7CisJICAgICAgICAgICAgICAgIHJlZlJlc3VsdD1yZWZfbm9ybV9jb21wYXJlKHNbaV0sIHNbal0sIG9wdFtrXS5vcHRpb25zKTsKKwkgICAgICAgICAgICAgICAgaWYoc2lnbihyZXN1bHQpIT1zaWduKHJlZlJlc3VsdCkpIHsKKwkgICAgICAgICAgICAgICAgICAgIGVycmxuKCJOb3JtYWxpemVyOjpjb21wYXJlKCAiICsgaSArIiwgIitqICsgIiwgIiAraysiKCAiICtvcHRba10ubmFtZSsiKSk9IiArIHJlc3VsdCArIiBzaG91bGQgYmUgc2FtZSBzaWduIGFzICIgKyByZWZSZXN1bHQpOworCSAgICAgICAgICAgICAgICB9CisKKwkgICAgICAgICAgICAgICAgLy8gdGVzdCBVbmljb2RlU3RyaW5nOjpjYXNlQ29tcGFyZSAtIHNhbWUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24KKwkgICAgICAgICAgICAgICAgIGlmKDAhPShvcHRba10ub3B0aW9ucyZOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UpKSB7CisJICAgICAgICAgICAgICAgICAgICAvLyAgICByZXN1bHQ9c1tpXS4gKHNbal0sIG9wdFtrXS5vcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob3B0W2tdLm9wdGlvbnMgJiBOb3JtYWxpemVyLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLnNldElnbm9yZUNhc2UodHJ1ZSwgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfREVGQVVMVCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLnNldElnbm9yZUNhc2UodHJ1ZSwgVVRGMTYuU3RyaW5nQ29tcGFyYXRvci5GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wLnNldENvZGVQb2ludENvbXBhcmUoKG9wdFtrXS5vcHRpb25zICYgTm9ybWFsaXplci5DT01QQVJFX0NPREVfUE9JTlRfT1JERVIpICE9IDApOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0PWNvbXAuY2FzZUNvbXBhcmUoc1tpXSxzW2pdLCBvcHRba10ub3B0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9Y29tcC5jb21wYXJlKHNbaV0sc1tqXSk7CisJICAgICAgICAgICAgICAgICAgICByZWZSZXN1bHQ9cmVmX2Nhc2VfY29tcGFyZShzW2ldLCBzW2pdLCBvcHRba10ub3B0aW9ucyk7CisJICAgICAgICAgICAgICAgICAgICBpZihzaWduKHJlc3VsdCkhPXNpZ24ocmVmUmVzdWx0KSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJOb3JtYWxpemVyOjpjb21wYXJlKCAiICsgaSArIiwgIitqICsgIiwgIitrKyIoICIgK29wdFtrXS5uYW1lKyIpKT0iICsgcmVzdWx0ICsiIHNob3VsZCBiZSBzYW1lIHNpZ24gYXMgIiArIHJlZlJlc3VsdCk7CisgICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfQorCX0KKworICAgIC8vIHZlcmlmeSB0aGF0IGNhc2UtZm9sZGluZyBkb2VzIG5vdCB1bi1GQ0Qgc3RyaW5ncworCWludCBjb3VudEZvbGRGQ0RFeGNlcHRpb25zKGludCBmb2xkaW5nT3B0aW9ucykgeworCSAgICBTdHJpbmcgcywgZDsKKwkgICAgaW50IGM7CisJICAgIGludCBjb3VudDsKKwkgICAgaW50Lyp1bnNpZ25lZCovIGNjLCB0cmFpbENDLCBmb2xkQ0MsIGZvbGRUcmFpbENDOworCSAgICBOb3JtYWxpemVyLlF1aWNrQ2hlY2tSZXN1bHQgcWNSZXN1bHQ7CisJICAgIGludCBjYXRlZ29yeTsKKwkgICAgYm9vbGVhbiBpc05GRDsKKworCisJICAgIGxvZ2xuKCJUZXN0IGlmIGNhc2UgZm9sZGluZyBtYXkgdW4tRkNEIGEgc3RyaW5nIChmb2xkaW5nIG9wdGlvbnMgMHgpIitoZXgoZm9sZGluZ09wdGlvbnMpKTsKKworCSAgICBjb3VudD0wOworCSAgICBmb3IoYz0wOyBjPD0weDEwZmZmZjsgKytjKSB7CisJICAgICAgICBjYXRlZ29yeT1VQ2hhcmFjdGVyLmdldFR5cGUoYyk7CisJICAgICAgICBpZihjYXRlZ29yeT09VUNoYXJhY3RlckNhdGVnb3J5LlVOQVNTSUdORUQpIHsKKwkgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCB1bmFzc2lnbmVkIGNvZGUgcG9pbnRzCisJICAgICAgICB9CisJICAgICAgICBpZihjPT0weGFjMDApIHsKKwkgICAgICAgICAgICBjPTB4ZDdhMzsgLy8gc2tpcCBIYW5ndWwgLSBubyBjYXNlIGZvbGRpbmcgdGhlcmUKKwkgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIHNraXAgSGFuIGJsb2NrcyAtIG5vIGNhc2UgZm9sZGluZyB0aGVyZSBlaXRoZXIKKwkgICAgICAgIGlmKGM9PTB4MzQwMCkgeworCSAgICAgICAgICAgIGM9MHg0ZGI1OworCSAgICAgICAgICAgIGNvbnRpbnVlOworCSAgICAgICAgfQorCSAgICAgICAgaWYoYz09MHg0ZTAwKSB7CisJICAgICAgICAgICAgYz0weDlmYTU7CisJICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICB9CisJICAgICAgICBpZihjPT0weDIwMDAwKSB7CisJICAgICAgICAgICAgYz0weDJhNmQ2OworCSAgICAgICAgICAgIGNvbnRpbnVlOworCSAgICAgICAgfQorCisJICAgICAgICBzPSBVVEYxNi52YWx1ZU9mKGMpOworCisJICAgICAgICAvLyBnZXQgbGVhZGluZyBhbmQgdHJhaWxpbmcgY2MgZm9yIGMKKwkgICAgICAgIGQ9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKHMsZmFsc2UpOworCSAgICAgICAgaXNORkQ9IHM9PWQ7CisJICAgICAgICBjYz1VQ2hhcmFjdGVyLmdldENvbWJpbmluZ0NsYXNzKFVURjE2LmNoYXJBdChkLDApKTsKKwkgICAgICAgIHRyYWlsQ0M9VUNoYXJhY3Rlci5nZXRDb21iaW5pbmdDbGFzcyhVVEYxNi5jaGFyQXQoZCxkLmxlbmd0aCgpLTEpKTsKKworCSAgICAgICAgLy8gZ2V0IGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNjIGZvciB0aGUgY2FzZS1mb2xkaW5nIG9mIGMKKwkgICAgICAgIFVDaGFyYWN0ZXIuZm9sZENhc2UocywoZm9sZGluZ09wdGlvbnM9PTApKTsKKwkgICAgICAgIGQgPSBOb3JtYWxpemVyLmRlY29tcG9zZShzLCBmYWxzZSk7CisJICAgICAgICBmb2xkQ0M9VUNoYXJhY3Rlci5nZXRDb21iaW5pbmdDbGFzcyhVVEYxNi5jaGFyQXQoZCwwKSk7CisJICAgICAgICBmb2xkVHJhaWxDQz1VQ2hhcmFjdGVyLmdldENvbWJpbmluZ0NsYXNzKFVURjE2LmNoYXJBdChkLGQubGVuZ3RoKCktMSkpOworCisJICAgICAgICBxY1Jlc3VsdD1Ob3JtYWxpemVyLnF1aWNrQ2hlY2socywgTm9ybWFsaXplci5GQ0QpOworCisKKwkgICAgICAgIC8vIGJhZDoKKwkgICAgICAgIC8vIC0gY2hhcmFjdGVyIG1hcHMgdG8gZW1wdHkgc3RyaW5nOiBhZGphY2VudCBjaGFyYWN0ZXJzIG1heSB0aGVuIG5lZWQgcmVvcmRlcmluZworCSAgICAgICAgLy8gLSBmb2xkaW5nIGhhcyBkaWZmZXJlbnQgbGVhZGluZy90cmFpbGluZyBjYydzLCBhbmQgdGhleSBkb24ndCBiZWNvbWUganVzdCAwCisJICAgICAgICAvLyAtIGZvbGRpbmcgaXRzZWxmIGlzIG5vdCBGQ0QKKwkgICAgICAgIGlmKCBxY1Jlc3VsdCE9Tm9ybWFsaXplci5ZRVMgfHwKKwkgICAgICAgICAgICBzLmxlbmd0aCgpPT0wIHx8CisJICAgICAgICAgICAgKGNjIT1mb2xkQ0MgJiYgZm9sZENDIT0wKSB8fCAodHJhaWxDQyE9Zm9sZFRyYWlsQ0MgJiYgZm9sZFRyYWlsQ0MhPTApCisJICAgICAgICApIHsKKwkgICAgICAgICAgICArK2NvdW50OworCSAgICAgICAgICAgIGVycmxuKCJVKyIraGV4KGMpKyI6IGNhc2UtZm9sZGluZyBtYXkgdW4tRkNEIGEgc3RyaW5nIChmb2xkaW5nIG9wdGlvbnMgMHgiK2hleChmb2xkaW5nT3B0aW9ucykrIikiKTsKKwkgICAgICAgICAgICAvL2VycmxuKCIgIGNjICUwMnggdHJhaWxDQyAlMDJ4ICAgIGZvbGRDQyhVKyUwNGx4KSAlMDJ4IGZvbGRUcmFpbENDKFUrJTA0bHgpICUwMnggICBxdWlja0NoZWNrKGZvbGRlZCk9JWQiLCBjYywgdHJhaWxDQywgVVRGMTYuY2hhckF0KGQsMCksIGZvbGRDQywgVVRGMTYuY2hhckF0KGQsZC5sZW5ndGgoKS0xKSwgZm9sZFRyYWlsQ0MsIHFjUmVzdWx0KTsKKwkgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgIH0KKworCSAgICAgICAgLy8gYWxzbyBiYWQ6CisJICAgICAgICAvLyBpZiBhIGNvZGUgcG9pbnQgaXMgaW4gTkZEIGJ1dCBpdHMgY2FzZSBmb2xkaW5nIGlzIG5vdCwgdGhlbgorCSAgICAgICAgLy8gdW5vcm1fY29tcGFyZSB3aWxsIGFsc28gZmFpbAorCSAgICAgICAgaWYoaXNORkQgJiYgTm9ybWFsaXplci5ZRVMhPU5vcm1hbGl6ZXIucXVpY2tDaGVjayhzLCBOb3JtYWxpemVyLk5GRCkpIHsKKwkgICAgICAgICAgICArK2NvdW50OworCSAgICAgICAgICAgIGVycmxuKCJVKyIraGV4KGMpKyI6IGNhc2UtZm9sZGluZyBtYXkgdW4tRkNEIGEgc3RyaW5nIChmb2xkaW5nIG9wdGlvbnMgMHgiK2hleChmb2xkaW5nT3B0aW9ucykrIikiKTsKKwkgICAgICAgIH0KKwkgICAgfQorCisJICAgIGxvZ2xuKCJUaGVyZSBhcmUgIitoZXgoY291bnQpKyIgY29kZSBwb2ludHMgZm9yIHdoaWNoIGNhc2UtZm9sZGluZyBtYXkgdW4tRkNEIGEgc3RyaW5nIChmb2xkaW5nIG9wdGlvbnMiK2ZvbGRpbmdPcHRpb25zKyJ4KSIgKTsKKwkgICAgcmV0dXJuIGNvdW50OworCX0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RGaW5kRm9sZEZDREV4Y2VwdGlvbnMoKSB7CisJICAgIGludCBjb3VudDsKKworCSAgICBjb3VudD1jb3VudEZvbGRGQ0RFeGNlcHRpb25zKDApOworCSAgICBjb3VudCs9Y291bnRGb2xkRkNERXhjZXB0aW9ucyhOb3JtYWxpemVyLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSk7CisJICAgIGlmKGNvdW50PjApIHsKKwkgICAgICAgIC8vKgorCSAgICAgICAgLy8qIElmIGNhc2UtZm9sZGluZyB1bi1GQ0RzIGFueSBzdHJpbmdzLCB0aGVuIHVub3JtX2NvbXBhcmUoKSBtdXN0IGJlCisJICAgICAgICAvLyogcmUtaW1wbGVtZW50ZWQuCisJICAgICAgICAvLyogSXQgY3VycmVudGx5IGFzc3VtZXMgdGhhdCBvbmUgY2FuIGNoZWNrIGZvciBGQ0QgdGhlbiBjYXNlLWZvbGQKKwkgICAgICAgIC8vKiBhbmQgdGhlbiBzdGlsbCBoYXZlIEZDRCBzdHJpbmdzIGZvciByYXcgZGVjb21wb3NpdGlvbiB3aXRob3V0IHJlb3JkZXJpbmcuCisJICAgICAgICAvLyoKKwkgICAgICAgIGVycmxuKCJlcnJvcjogVGhlcmUgYXJlICIrY291bnQrIiBjb2RlIHBvaW50cyBmb3Igd2hpY2ggY2FzZS1mb2xkaW5nIisKKwkgICAgICAgICAgICAgICIgbWF5IHVuLUZDRCBhIHN0cmluZyBmb3IgYWxsIGZvbGRpbmcgb3B0aW9ucy5cbiBTZWUgY29tbWVudCIrCisgICAgICAgICAgICAgICAgICAiIGluIEJhc2ljTm9ybWFsaXplclRlc3Q6OkZpbmRGb2xkRkNERXhjZXB0aW9ucygpISIpOworCSAgICB9CisJfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RDb21iaW5pbmdNYXJrcygpeworICAgICAgICBTdHJpbmcgc3JjID0gIlx1MGY3MVx1MGY3Mlx1MGY3M1x1MGY3NFx1MGY3NSI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZCA9ICJcdTBGNzFcdTBGNzFcdTBGNzFcdTBGNzJcdTBGNzJcdTBGNzRcdTBGNzQiOworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gTm9ybWFsaXplci5kZWNvbXBvc2Uoc3JjLGZhbHNlKTsKKyAgICAgICAgaWYoIWV4cGVjdGVkLmVxdWFscyhyZXN1bHQpKXsKKyAgICAgICAgICAgIGVycmxuKCJSZW9yZGVyaW5nIG9mIGNvbWJpbmluZyBtYXJrcyBmYWlsZWQuIEV4cGVjdGVkOiAiK1V0aWxpdHkuaGV4KGV4cGVjdGVkKSsiIEdvdDogIisgVXRpbGl0eS5oZXgocmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlLWVuYWJsZSB0aGlzIHRlc3Qgd2hlbiBVVEMgZml4ZXMgVUFYIDIxCisgICAgcHVibGljIHZvaWQgVGVzdFVBWDIxRmFpbHVyZSgpeworICAgICAgICBmaW5hbCBTdHJpbmdbXVtdIGNhc2VzID0gbmV3IFN0cmluZ1tdW117CisJCSAgICAgICAgeyJcdTAwNjFcdTAzNDVcdTAzNjBcdTAzNDVcdTAwNjIiLCAiXHUwMDYxXHUwMzYwXHUwMzQ1XHUwMzQ1XHUwMDYyIn0sCisJCQkJeyJcdTAwNjFcdTAzNDVcdTAzNDVcdTAzNjBcdTAwNjIiLCAiXHUwMDYxXHUwMzYwXHUwMzQ1XHUwMzQ1XHUwMDYyIn0sCisJCQkJeyJcdTAwNjFcdTAzNDVcdTAzNjBcdTAzNjJcdTAzNjBcdTAwNjIiLCAiXHUwMDYxXHUwMzYyXHUwMzYwXHUwMzYwXHUwMzQ1XHUwMDYyIn0sCisJCQkJeyJcdTAwNjFcdTAzNjBcdTAzNDVcdTAzNjBcdTAzNjJcdTAwNjIiLCAiXHUwMDYxXHUwMzYyXHUwMzYwXHUwMzYwXHUwMzQ1XHUwMDYyIn0sCisJCQkJeyJcdTAwNjFcdTAzNDVcdTAzNjBcdTAzNjJcdTAzNjFcdTAwNjIiLCAiXHUwMDYxXHUwMzYyXHUwMzYwXHUwMzYxXHUwMzQ1XHUwMDYyIn0sCisJCQkJeyJcdTAwNjFcdTAzNjFcdTAzNDVcdTAzNjBcdTAzNjJcdTAwNjIiLCAiXHUwMDYxXHUwMzYyXHUwMzYxXHUwMzYwXHUwMzQ1XHUwMDYyIn0sCisgICAgICAgIH07CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGk8IGNhc2VzLmxlbmd0aDsgaSsrKXsKKwkgICAgICAgIFN0cmluZyBzMSA9Y2FzZXNbMF1bMF07IAorCSAgICAgICAgU3RyaW5nIHMyID0gY2FzZXNbMF1bMV07CisJICAgICAgICBpZiggKE5vcm1hbGl6ZXIuY29tcGFyZShzMSxzMixOb3JtYWxpemVyLkZPTERfQ0FTRV9ERUZBVUxUID09MCkvL2Nhc2Ugc2Vuc2l0aXZlIGNvbXBhcmUKKyAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgIChOb3JtYWxpemVyLmNvbXBhcmUoczEsczIsTm9ybWFsaXplci5DT01QQVJFX0lHTk9SRV9DQVNFKSE9MCkpeworCSAgICAgICAgICAgIGVycmxuKCJOb3JtYWxpemVyLmNvbXBhcmUoKSBmYWlsZWQgZm9yIHMxOiAiIAorCSAgICAgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmhleChzMSkgKyIgczI6ICIgKyBVdGlsaXR5LmhleChzMikpOworCSAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEZDTkZLQ0Nsb3N1cmUoKSB7CisgICAgICAgIGZpbmFsIGNsYXNzIFRlc3RTdHJ1Y3R7CisgICAgICAgICAgICBpbnQgYzsKKyAgICAgICAgICAgIFN0cmluZyBzOworICAgICAgICAgICAgVGVzdFN0cnVjdChpbnQgY3AsIFN0cmluZyBzcmMpeworICAgICAgICAgICAgICAgIGM9Y3A7CisgICAgICAgICAgICAgICAgcz1zcmM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBUZXN0U3RydWN0W10gdGVzdHM9IG5ldyBUZXN0U3RydWN0W117CisgICAgICAgICAgICBuZXcgVGVzdFN0cnVjdCggMHgwMzdBLCAiXHUwMDIwXHUwM0I5IiApLAorICAgICAgICAgICAgbmV3IFRlc3RTdHJ1Y3QoIDB4MDNEMiwgIlx1MDNDNSIgKSwKKyAgICAgICAgICAgIG5ldyBUZXN0U3RydWN0KCAweDIwQTgsICJcdTAwNzJcdTAwNzMiICkgLAorICAgICAgICAgICAgbmV3IFRlc3RTdHJ1Y3QoIDB4MjEwQiwgIlx1MDA2OCIgKSwKKyAgICAgICAgICAgIG5ldyBUZXN0U3RydWN0KCAweDIxMEMsICJcdTAwNjgiICksCisgICAgICAgICAgICBuZXcgVGVzdFN0cnVjdCggMHgyMTIxLCAiXHUwMDc0XHUwMDY1XHUwMDZDIiApLAorICAgICAgICAgICAgbmV3IFRlc3RTdHJ1Y3QoIDB4MjEyMiwgIlx1MDA3NFx1MDA2RCIgKSwKKyAgICAgICAgICAgIG5ldyBUZXN0U3RydWN0KCAweDIxMjgsICJcdTAwN0EiICksCisgICAgICAgICAgICBuZXcgVGVzdFN0cnVjdCggMHgxRDVEQiwiXHUwMDY4IiApLAorICAgICAgICAgICAgbmV3IFRlc3RTdHJ1Y3QoIDB4MUQ1RUQsIlx1MDA3QSIgKSwKKyAgICAgICAgICAgIG5ldyBUZXN0U3RydWN0KCAweDAwNjEsICIiICkKKyAgICAgICAgfTsKKyAgICAKKworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArKyBpKSB7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0PU5vcm1hbGl6ZXIuZ2V0RkNfTkZLQ19DbG9zdXJlKHRlc3RzW2ldLmMpOworICAgICAgICAgICAgaWYoIXJlc3VsdC5lcXVhbHMobmV3IFN0cmluZyh0ZXN0c1tpXS5zKSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiZ2V0RkNfTkZLQ19DbG9zdXJlKFUrIitJbnRlZ2VyLnRvSGV4U3RyaW5nKHRlc3RzW2ldLmMpKyIpIGlzIHdyb25nIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KKworICAgICAgICBpbnQgbGVuZ3RoPU5vcm1hbGl6ZXIuZ2V0RkNfTkZLQ19DbG9zdXJlKDB4NWMsIG51bGwpOworICAgICAgICBpZihsZW5ndGghPTApeworICAgICAgICAgICAgZXJybG4oImdldEZDX05GS0NfQ2xvc3VyZSBkaWQgbm90IHBlcmZvcm0gZXJyb3IgaGFuZGxpbmcgY29ycmVjdGx5Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHZvaWQgVGVzdEJ1Z0oyMzI0KCl7CisgICAgICAgLyogU3RyaW5nW10gaW5wdXQgPSBuZXcgU3RyaW5nW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8iXHUzMEZEXHUzMDk5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMEZBXHUzMDlBIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMEZCXHUzMDlBIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMEZDXHUzMDlBIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMEZFXHUzMDlBIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMEZEXHUzMDlBIiwKKworICAgICAgICB9OyovCisgICAgICAgIFN0cmluZyB0cm91Ymxlc29tZSA9ICJcdTMwOUEiOworICAgICAgICBmb3IoaW50IGk9MHgzMDAwOyBpPDB4MzEwMDtpKyspeworICAgICAgICAgICAgU3RyaW5nIGlucHV0ID0gKChjaGFyKWkpK3Ryb3VibGVzb21lOworICAgICAgICAgICAgdHJ5eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gTm9ybWFsaXplci5jb21wb3NlKGlucHV0LGZhbHNlKTsKKyAgICAgICAgICAgIH1jYXRjaChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgICAgIGVycmxuKCJjb21wb3NlKCkgZmFpbGVkIGZvciBpbnB1dDogIiArIFV0aWxpdHkuaGV4KGlucHV0KSArICIgRXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgIH0KKyAgIC8qIAorICAgIFVOU0FGRV9TVEFSVFNbRF0gPSBuZXcgVW5pY29kZVNldCgiW1x1MEY3M1x1MEY3NVx1MEY4MV0iLCBmYWxzZSk7CisgICAgVU5TQUZFX1NUQVJUU1tDXSA9IG5ldyBVbmljb2RlU2V0KCJbXHUwOUJFXHUwOUQ3XHUwQjNFXHUwQjU2LVx1MEI1N1x1MEJCRVx1MEJEN1x1MENDMlx1MENENS1cdTBDRDYiCisgICAgICAgICsgIlx1MEQzRVx1MEQ1N1x1MERDRlx1MERERlx1MEY3M1x1MEY3NVx1MEY4MVx1MTAyRVx1MTE2MS1cdTExNzVcdTExQTgtXHUxMUMyXSIsIGZhbHNlKTsKKyAgICBVTlNBRkVfU1RBUlRTW0tEXSA9IG5ldyBVbmljb2RlU2V0KCJbXHUwRjczXHUwRjc1XHUwRjgxXHVGRjlFLVx1RkY5Rl0iLCBmYWxzZSk7CisgICAgVU5TQUZFX1NUQVJUU1tLQ10gPSBuZXcgVW5pY29kZVNldCgiW1x1MDlCRVx1MDlEN1x1MEIzRVx1MEI1Ni1cdTBCNTdcdTBCQkVcdTBCRDdcdTBDQzJcdTBDRDUtXHUwQ0Q2IgorICAgICAgICArICJcdTBEM0VcdTBENTdcdTBEQ0ZcdTBEREZcdTBGNzNcdTBGNzVcdTBGODFcdTEwMkVcdTExNjEtXHUxMTc1XHUxMUE4LVx1MTFDMlx1MzEzM1x1MzEzNS1cdTMxMzYiCisgICAgICAgICsgIlx1MzEzQS1cdTMxM0ZcdTMxNEYtXHUzMTYzXHVGRjlFLVx1RkY5Rlx1RkZBM1x1RkZBNS1cdUZGQTZcdUZGQUEtXHVGRkFGXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0YiCisgICAgICAgICsgIlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSIsIGZhbHNlKTsKKyAgICAqLworICAgICBzdGF0aWMgZmluYWwgaW50IEQgPSAwLCBDID0gMSwgS0Q9IDIsIEtDID0gMzsgICAKKyAgICBwcml2YXRlIHN0YXRpYyBVbmljb2RlU2V0W10gaW5pdFNraXBwYWJsZXMoVW5pY29kZVNldFtdIHNraXBwYWJsZXMpeworICAgICAgICBpZiggc2tpcHBhYmxlcy5sZW5ndGggPCA0ICl7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBza2lwcGFibGVzW0RdID0gbmV3IFVuaWNvZGVTZXQoCisgICAgICAgICAgICAiW15cXHUwMEMwLVxcdTAwQzVcXHUwMEM3LVxcdTAwQ0ZcXHUwMEQxLVxcdTAwRDZcXHUwMEQ5LVxcdTAwREQiCisgICAgICAgICAgICArICJcXHUwMEUwLVxcdTAwRTVcXHUwMEU3LVxcdTAwRUZcXHUwMEYxLVxcdTAwRjZcXHUwMEY5LVxcdTAwRkQiCisgICAgICAgICAgICArICJcXHUwMEZGLVxcdTAxMEZcXHUwMTEyLVxcdTAxMjVcXHUwMTI4LVxcdTAxMzBcXHUwMTM0LVxcdTAxMzciCisgICAgICAgICAgICArICJcXHUwMTM5LVxcdTAxM0VcXHUwMTQzLVxcdTAxNDhcXHUwMTRDLVxcdTAxNTFcXHUwMTU0LVxcdTAxNjUiCisgICAgICAgICAgICArICJcXHUwMTY4LVxcdTAxN0VcXHUwMUEwLVxcdTAxQTFcXHUwMUFGLVxcdTAxQjBcXHUwMUNELVxcdTAxREMiCisgICAgICAgICAgICArICJcXHUwMURFLVxcdTAxRTNcXHUwMUU2LVxcdTAxRjBcXHUwMUY0LVxcdTAxRjVcXHUwMUY4LVxcdTAyMUIiCisgICAgICAgICAgICArICJcXHUwMjFFLVxcdTAyMUZcXHUwMjI2LVxcdTAyMzNcXHUwMzAwLVxcdTAzNEVcXHUwMzYwLVxcdTAzNkYiCisgICAgICAgICAgICArICJcXHUwMzc0XFx1MDM3RVxcdTAzODUtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzOTBcXHUwM0FBLSIKKyAgICAgICAgICAgICsgIlxcdTAzQjBcXHUwM0NBLVxcdTAzQ0VcXHUwM0QzLVxcdTAzRDRcXHUwNDAwLVxcdTA0MDFcXHUwNDAzIgorICAgICAgICAgICAgKyAiXFx1MDQwN1xcdTA0MEMtXFx1MDQwRVxcdTA0MTlcXHUwNDM5XFx1MDQ1MC1cXHUwNDUxXFx1MDQ1MyIKKyAgICAgICAgICAgICsgIlxcdTA0NTdcXHUwNDVDLVxcdTA0NUVcXHUwNDc2LVxcdTA0NzdcXHUwNDgzLVxcdTA0ODZcXHUwNEMxLSIKKyAgICAgICAgICAgICsgIlxcdTA0QzJcXHUwNEQwLVxcdTA0RDNcXHUwNEQ2LVxcdTA0RDdcXHUwNERBLVxcdTA0REZcXHUwNEUyLSIKKyAgICAgICAgICAgICsgIlxcdTA0RTdcXHUwNEVBLVxcdTA0RjVcXHUwNEY4LVxcdTA0RjlcXHUwNTkxLVxcdTA1QTFcXHUwNUEzLSIKKyAgICAgICAgICAgICsgIlxcdTA1QjlcXHUwNUJCLVxcdTA1QkRcXHUwNUJGXFx1MDVDMS1cXHUwNUMyXFx1MDVDNFxcdTA2MjItIgorICAgICAgICAgICAgKyAiXFx1MDYyNlxcdTA2NEItXFx1MDY1NVxcdTA2NzBcXHUwNkMwXFx1MDZDMlxcdTA2RDNcXHUwNkQ2LSIKKyAgICAgICAgICAgICsgIlxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3LVxcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExIgorICAgICAgICAgICAgKyAiXFx1MDczMC1cXHUwNzRBXFx1MDkyOVxcdTA5MzFcXHUwOTM0XFx1MDkzQ1xcdTA5NERcXHUwOTUxLSIKKyAgICAgICAgICAgICsgIlxcdTA5NTRcXHUwOTU4LVxcdTA5NUZcXHUwOUJDXFx1MDlDQi1cXHUwOUNEXFx1MDlEQy1cXHUwOUREIgorICAgICAgICAgICAgKyAiXFx1MDlERlxcdTBBMzNcXHUwQTM2XFx1MEEzQ1xcdTBBNERcXHUwQTU5LVxcdTBBNUJcXHUwQTVFXFx1MEFCQyIKKyAgICAgICAgICAgICsgIlxcdTBBQ0RcXHUwQjNDXFx1MEI0OFxcdTBCNEItXFx1MEI0RFxcdTBCNUMtXFx1MEI1RFxcdTBCOTQiCisgICAgICAgICAgICArICJcXHUwQkNBLVxcdTBCQ0RcXHUwQzQ4XFx1MEM0RFxcdTBDNTUtXFx1MEM1NlxcdTBDQzBcXHUwQ0M3LSIKKyAgICAgICAgICAgICsgIlxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0JcXHUwQ0NEXFx1MEQ0QS1cXHUwRDREXFx1MERDQVxcdTBEREEiCisgICAgICAgICAgICArICJcXHUwRERDLVxcdTBEREVcXHUwRTM4LVxcdTBFM0FcXHUwRTQ4LVxcdTBFNEJcXHUwRUI4LVxcdTBFQjkiCisgICAgICAgICAgICArICJcXHUwRUM4LVxcdTBFQ0JcXHUwRjE4LVxcdTBGMTlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjQzIgorICAgICAgICAgICAgKyAiXFx1MEY0RFxcdTBGNTJcXHUwRjU3XFx1MEY1Q1xcdTBGNjlcXHUwRjcxLVxcdTBGNzZcXHUwRjc4XFx1MEY3QSIKKyAgICAgICAgICAgICsgIi1cXHUwRjdEXFx1MEY4MC1cXHUwRjg0XFx1MEY4Ni1cXHUwRjg3XFx1MEY5M1xcdTBGOURcXHUwRkEyIgorICAgICAgICAgICAgKyAiXFx1MEZBN1xcdTBGQUNcXHUwRkI5XFx1MEZDNlxcdTEwMjZcXHUxMDM3XFx1MTAzOVxcdTE3MTRcXHUxNzM0IgorICAgICAgICAgICAgKyAiXFx1MTdEMlxcdTE4QTlcXHUxRTAwLVxcdTFFOTlcXHUxRTlCXFx1MUVBMC1cXHUxRUY5XFx1MUYwMC0iCisgICAgICAgICAgICArICJcXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC0iCisgICAgICAgICAgICArICJcXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0IgorICAgICAgICAgICAgKyAiXFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzEtXFx1MUZDNFxcdTFGQzYtXFx1MUZEM1xcdTFGRDYtIgorICAgICAgICAgICAgKyAiXFx1MUZEQlxcdTFGREQtXFx1MUZFRlxcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGRFxcdTIwMDAtIgorICAgICAgICAgICAgKyAiXFx1MjAwMVxcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRUFcXHUyMTI2XFx1MjEyQS0iCisgICAgICAgICAgICArICJcXHUyMTJCXFx1MjE5QS1cXHUyMTlCXFx1MjFBRVxcdTIxQ0QtXFx1MjFDRlxcdTIyMDRcXHUyMjA5IgorICAgICAgICAgICAgKyAiXFx1MjIwQ1xcdTIyMjRcXHUyMjI2XFx1MjI0MVxcdTIyNDRcXHUyMjQ3XFx1MjI0OVxcdTIyNjBcXHUyMjYyIgorICAgICAgICAgICAgKyAiXFx1MjI2RC1cXHUyMjcxXFx1MjI3NC1cXHUyMjc1XFx1MjI3OC1cXHUyMjc5XFx1MjI4MC1cXHUyMjgxIgorICAgICAgICAgICAgKyAiXFx1MjI4NC1cXHUyMjg1XFx1MjI4OC1cXHUyMjg5XFx1MjJBQy1cXHUyMkFGXFx1MjJFMC1cXHUyMkUzIgorICAgICAgICAgICAgKyAiXFx1MjJFQS1cXHUyMkVEXFx1MjMyOS1cXHUyMzJBXFx1MkFEQ1xcdTMwMkEtXFx1MzAyRlxcdTMwNEMiCisgICAgICAgICAgICArICJcXHUzMDRFXFx1MzA1MFxcdTMwNTJcXHUzMDU0XFx1MzA1NlxcdTMwNThcXHUzMDVBXFx1MzA1Q1xcdTMwNUUiCisgICAgICAgICAgICArICJcXHUzMDYwXFx1MzA2MlxcdTMwNjVcXHUzMDY3XFx1MzA2OVxcdTMwNzAtXFx1MzA3MVxcdTMwNzMtIgorICAgICAgICAgICAgKyAiXFx1MzA3NFxcdTMwNzYtXFx1MzA3N1xcdTMwNzktXFx1MzA3QVxcdTMwN0MtXFx1MzA3RFxcdTMwOTQiCisgICAgICAgICAgICArICJcXHUzMDk5LVxcdTMwOUFcXHUzMDlFXFx1MzBBQ1xcdTMwQUVcXHUzMEIwXFx1MzBCMlxcdTMwQjRcXHUzMEI2IgorICAgICAgICAgICAgKyAiXFx1MzBCOFxcdTMwQkFcXHUzMEJDXFx1MzBCRVxcdTMwQzBcXHUzMEMyXFx1MzBDNVxcdTMwQzdcXHUzMEM5IgorICAgICAgICAgICAgKyAiXFx1MzBEMC1cXHUzMEQxXFx1MzBEMy1cXHUzMEQ0XFx1MzBENi1cXHUzMEQ3XFx1MzBEOS1cXHUzMERBIgorICAgICAgICAgICAgKyAiXFx1MzBEQy1cXHUzMEREXFx1MzBGNFxcdTMwRjctXFx1MzBGQVxcdTMwRkVcXHVBQzAwLVxcdUQ3QTMiCisgICAgICAgICAgICArICJcXHVGOTAwLVxcdUZBMERcXHVGQTEwXFx1RkExMlxcdUZBMTUtXFx1RkExRVxcdUZBMjBcXHVGQTIyIgorICAgICAgICAgICAgKyAiXFx1RkEyNS1cXHVGQTI2XFx1RkEyQS1cXHVGQTJEXFx1RkEzMC1cXHVGQTZBXFx1RkIxRC1cXHVGQjFGIgorICAgICAgICAgICAgKyAiXFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDAtXFx1RkI0MVxcdUZCNDMtIgorICAgICAgICAgICAgKyAiXFx1RkI0NFxcdUZCNDYtXFx1RkI0RVxcdUZFMjAtXFx1RkUyM1xcVTAwMDFEMTVFLVxcVTAwMDFEMTY5IgorICAgICAgICAgICAgKyAiXFxVMDAwMUQxNkQtXFxVMDAwMUQxNzJcXFUwMDAxRDE3Qi1cXFUwMDAxRDE4MlxcVTAwMDFEMTg1LSIKKyAgICAgICAgICAgICsgIlxcVTAwMDFEMThCXFxVMDAwMUQxQUEtXFxVMDAwMUQxQURcXFUwMDAxRDFCQi1cXFUwMDAxRDFDMFxcVTAwMDIiCisgICAgICAgICAgICArICJGODAwLVxcVTAwMDJGQTFEXSIsIGZhbHNlKTsKKyAgICAvKlVuaWNvZGU6IAorICAgICAgICAgICJbXj8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tIgorICAgICAgICArICI/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8/LT8/Py0/Py0/Py0/Py0/Py0/Pz8/LT8/Pz8tPz8/Py0/Py0/Py0/IgorICAgICAgICArICI/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/Py0/Pz8tPz8tPz8/Pz8/LT8/LT8/LT8/LT8/Py0/Pz8/IgorICAgICAgICArICI/Pz8tPz8tPz8/LT8/LT8/Pz8/Pz8tPz8/Pz8/Py0/Py0/Pz8tPz8/Py0/Pz8tPz8tPz8/LT8/Pz8tPz8tPz8tIgorICAgICAgICArICI/Py0/Py0/Py0/Pz8/Pz8/Pz8/Py0/Pz8tPz8tPz8tPz8/Pz8/Pz8/Pz8/Pz8/Py0/Pz8tPz8tPz8tPz8tPz8tIgorICAgICAgICArICI/Py0/Pz8/Py0/Py0/Py0/Pz8tPz8tPz8tPz8tPz8tPz8tP1w/LVw/Py0/Pz8tPz8/LT8/LT8/Py0/Pz8/Pz8/IgorICAgICAgICArICI/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8/LT8/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/LT8/LT8/IgorICAgICAgICArICItPz8tPz8/LT8/Pz8/Pz8/Pz8/Pz8/Pz8/Py0/Py0/Py0/Py0/Py0/Pz8tPz8/LT8/LT8/Pz8tPz8/Py0/Py0/IgorICAgICAgICArICI/LT8/LT8/LT8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/XSIqLworICAgIAorICAgICAgICBza2lwcGFibGVzW0NdID0gbmV3IFVuaWNvZGVTZXQoCisgICAgICAgICAgICAiW148LT5BLVBSLVphLXByLXpcXHUwMEE4XFx1MDBDMC1cXHUwMENGXFx1MDBEMS1cXHUwMEQ2XFx1MDBEOC0iCisgICAgICAgICAgICArICJcXHUwMEREXFx1MDBFMC1cXHUwMEVGXFx1MDBGMS1cXHUwMEY2XFx1MDBGOC1cXHUwMEZEXFx1MDBGRi0iCisgICAgICAgICAgICArICJcXHUwMTAzXFx1MDEwNi1cXHUwMTBGXFx1MDExMi1cXHUwMTE3XFx1MDExQS1cXHUwMTIxXFx1MDEyNC0iCisgICAgICAgICAgICArICJcXHUwMTI1XFx1MDEyOC1cXHUwMTJEXFx1MDEzMFxcdTAxMzktXFx1MDEzQVxcdTAxM0QtXFx1MDEzRSIKKyAgICAgICAgICAgICsgIlxcdTAxNDMtXFx1MDE0NFxcdTAxNDctXFx1MDE0OFxcdTAxNEMtXFx1MDE1MVxcdTAxNTQtXFx1MDE1NSIKKyAgICAgICAgICAgICsgIlxcdTAxNTgtXFx1MDE1RFxcdTAxNjAtXFx1MDE2MVxcdTAxNjQtXFx1MDE2NVxcdTAxNjgtXFx1MDE3MSIKKyAgICAgICAgICAgICsgIlxcdTAxNzQtXFx1MDE3RlxcdTAxQTAtXFx1MDFBMVxcdTAxQUYtXFx1MDFCMFxcdTAxQjdcXHUwMUNELSIKKyAgICAgICAgICAgICsgIlxcdTAxRENcXHUwMURFLVxcdTAxRTFcXHUwMUU2LVxcdTAxRUJcXHUwMUY0LVxcdTAxRjVcXHUwMUY4LSIKKyAgICAgICAgICAgICsgIlxcdTAxRkJcXHUwMjAwLVxcdTAyMUJcXHUwMjFFLVxcdTAyMUZcXHUwMjI2LVxcdTAyMzNcXHUwMjkyIgorICAgICAgICAgICAgKyAiXFx1MDMwMC1cXHUwMzRFXFx1MDM2MC1cXHUwMzZGXFx1MDM3NFxcdTAzN0VcXHUwMzg3XFx1MDM5MSIKKyAgICAgICAgICAgICsgIlxcdTAzOTVcXHUwMzk3XFx1MDM5OVxcdTAzOUZcXHUwM0ExXFx1MDNBNVxcdTAzQTlcXHUwM0FDXFx1MDNBRSIKKyAgICAgICAgICAgICsgIlxcdTAzQjFcXHUwM0I1XFx1MDNCN1xcdTAzQjlcXHUwM0JGXFx1MDNDMVxcdTAzQzVcXHUwM0M5LVxcdTAzQ0IiCisgICAgICAgICAgICArICJcXHUwM0NFXFx1MDNEMlxcdTA0MDZcXHUwNDEwXFx1MDQxM1xcdTA0MTUtXFx1MDQxOFxcdTA0MUFcXHUwNDFFIgorICAgICAgICAgICAgKyAiXFx1MDQyM1xcdTA0MjdcXHUwNDJCXFx1MDQyRFxcdTA0MzBcXHUwNDMzXFx1MDQzNS1cXHUwNDM4XFx1MDQzQSIKKyAgICAgICAgICAgICsgIlxcdTA0M0VcXHUwNDQzXFx1MDQ0N1xcdTA0NEJcXHUwNDREXFx1MDQ1NlxcdTA0NzQtXFx1MDQ3NVxcdTA0ODMiCisgICAgICAgICAgICArICItXFx1MDQ4NlxcdTA0RDgtXFx1MDREOVxcdTA0RTgtXFx1MDRFOVxcdTA1OTEtXFx1MDVBMVxcdTA1QTMtIgorICAgICAgICAgICAgKyAiXFx1MDVCOVxcdTA1QkItXFx1MDVCRFxcdTA1QkZcXHUwNUMxLVxcdTA1QzJcXHUwNUM0XFx1MDYyMi0iCisgICAgICAgICAgICArICJcXHUwNjIzXFx1MDYyN1xcdTA2NDhcXHUwNjRBLVxcdTA2NTVcXHUwNjcwXFx1MDZDMVxcdTA2RDJcXHUwNkQ1IgorICAgICAgICAgICAgKyAiLVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3LVxcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExIgorICAgICAgICAgICAgKyAiXFx1MDczMC1cXHUwNzRBXFx1MDkyOFxcdTA5MzBcXHUwOTMzXFx1MDkzQ1xcdTA5NERcXHUwOTUxLSIKKyAgICAgICAgICAgICsgIlxcdTA5NTRcXHUwOTU4LVxcdTA5NUZcXHUwOUJDXFx1MDlCRVxcdTA5QzdcXHUwOUNEXFx1MDlEN1xcdTA5REMiCisgICAgICAgICAgICArICItXFx1MDlERFxcdTA5REZcXHUwQTMzXFx1MEEzNlxcdTBBM0NcXHUwQTREXFx1MEE1OS1cXHUwQTVCIgorICAgICAgICAgICAgKyAiXFx1MEE1RVxcdTBBQkNcXHUwQUNEXFx1MEIzQ1xcdTBCM0VcXHUwQjQ3XFx1MEI0RFxcdTBCNTYtXFx1MEI1NyIKKyAgICAgICAgICAgICsgIlxcdTBCNUMtXFx1MEI1RFxcdTBCOTJcXHUwQkJFXFx1MEJDNi1cXHUwQkM3XFx1MEJDRFxcdTBCRDciCisgICAgICAgICAgICArICJcXHUwQzQ2XFx1MEM0RFxcdTBDNTUtXFx1MEM1NlxcdTBDQkZcXHUwQ0MyXFx1MENDNlxcdTBDQ0FcXHUwQ0NEIgorICAgICAgICAgICAgKyAiXFx1MENENS1cXHUwQ0Q2XFx1MEQzRVxcdTBENDYtXFx1MEQ0N1xcdTBENERcXHUwRDU3XFx1MERDQSIKKyAgICAgICAgICAgICsgIlxcdTBEQ0ZcXHUwREQ5XFx1MEREQ1xcdTBEREZcXHUwRTM4LVxcdTBFM0FcXHUwRTQ4LVxcdTBFNEIiCisgICAgICAgICAgICArICJcXHUwRUI4LVxcdTBFQjlcXHUwRUM4LVxcdTBFQ0JcXHUwRjE4LVxcdTBGMTlcXHUwRjM1XFx1MEYzNyIKKyAgICAgICAgICAgICsgIlxcdTBGMzlcXHUwRjQzXFx1MEY0RFxcdTBGNTJcXHUwRjU3XFx1MEY1Q1xcdTBGNjlcXHUwRjcxLVxcdTBGNzYiCisgICAgICAgICAgICArICJcXHUwRjc4XFx1MEY3QS1cXHUwRjdEXFx1MEY4MC1cXHUwRjg0XFx1MEY4Ni1cXHUwRjg3XFx1MEY5MyIKKyAgICAgICAgICAgICsgIlxcdTBGOURcXHUwRkEyXFx1MEZBN1xcdTBGQUNcXHUwRkI5XFx1MEZDNlxcdTEwMjVcXHUxMDJFXFx1MTAzNyIKKyAgICAgICAgICAgICsgIlxcdTEwMzlcXHUxMTAwLVxcdTExMTJcXHUxMTYxLVxcdTExNzVcXHUxMUE4LVxcdTExQzJcXHUxNzE0IgorICAgICAgICAgICAgKyAiXFx1MTczNFxcdTE3RDJcXHUxOEE5XFx1MUUwMC1cXHUxRTAzXFx1MUUwQS1cXHUxRTBGXFx1MUUxMi0iCisgICAgICAgICAgICArICJcXHUxRTFCXFx1MUUyMC1cXHUxRTI3XFx1MUUyQS1cXHUxRTQxXFx1MUU0NC1cXHUxRTUzXFx1MUU1OC0iCisgICAgICAgICAgICArICJcXHUxRTdEXFx1MUU4MC1cXHUxRTg3XFx1MUU4RS1cXHUxRTkxXFx1MUU5Ni1cXHUxRTk5XFx1MUVBMC0iCisgICAgICAgICAgICArICJcXHUxRUYzXFx1MUVGNi1cXHUxRUY5XFx1MUYwMC1cXHUxRjExXFx1MUYxOC1cXHUxRjE5XFx1MUYyMC0iCisgICAgICAgICAgICArICJcXHUxRjMxXFx1MUYzOC1cXHUxRjM5XFx1MUY0MC1cXHUxRjQxXFx1MUY0OC1cXHUxRjQ5XFx1MUY1MC0iCisgICAgICAgICAgICArICJcXHUxRjUxXFx1MUY1OVxcdTFGNjAtXFx1MUY3MVxcdTFGNzMtXFx1MUY3NVxcdTFGNzdcXHUxRjc5IgorICAgICAgICAgICAgKyAiXFx1MUY3Qi1cXHUxRjdEXFx1MUY4MC1cXHUxRjgxXFx1MUY4OC1cXHUxRjg5XFx1MUY5MC1cXHUxRjkxIgorICAgICAgICAgICAgKyAiXFx1MUY5OC1cXHUxRjk5XFx1MUZBMC1cXHUxRkExXFx1MUZBOC1cXHUxRkE5XFx1MUZCM1xcdTFGQjYiCisgICAgICAgICAgICArICJcXHUxRkJCLVxcdTFGQkNcXHUxRkJFLVxcdTFGQkZcXHUxRkMzXFx1MUZDNlxcdTFGQzlcXHUxRkNCLSIKKyAgICAgICAgICAgICsgIlxcdTFGQ0NcXHUxRkQzXFx1MUZEQlxcdTFGRTNcXHUxRkVCXFx1MUZFRS1cXHUxRkVGXFx1MUZGM1xcdTFGRjYiCisgICAgICAgICAgICArICJcXHUxRkY5XFx1MUZGQi1cXHUxRkZFXFx1MjAwMC1cXHUyMDAxXFx1MjBEMC1cXHUyMERDXFx1MjBFMSIKKyAgICAgICAgICAgICsgIlxcdTIwRTUtXFx1MjBFQVxcdTIxMjZcXHUyMTJBLVxcdTIxMkJcXHUyMTkwXFx1MjE5MlxcdTIxOTQiCisgICAgICAgICAgICArICJcXHUyMUQwXFx1MjFEMlxcdTIxRDRcXHUyMjAzXFx1MjIwOFxcdTIyMEJcXHUyMjIzXFx1MjIyNVxcdTIyM0MiCisgICAgICAgICAgICArICJcXHUyMjQzXFx1MjI0NVxcdTIyNDhcXHUyMjREXFx1MjI2MVxcdTIyNjQtXFx1MjI2NVxcdTIyNzItIgorICAgICAgICAgICAgKyAiXFx1MjI3M1xcdTIyNzYtXFx1MjI3N1xcdTIyN0EtXFx1MjI3RFxcdTIyODItXFx1MjI4M1xcdTIyODYtIgorICAgICAgICAgICAgKyAiXFx1MjI4N1xcdTIyOTEtXFx1MjI5MlxcdTIyQTJcXHUyMkE4LVxcdTIyQTlcXHUyMkFCXFx1MjJCMi0iCisgICAgICAgICAgICArICJcXHUyMkI1XFx1MjMyOS1cXHUyMzJBXFx1MkFEQ1xcdTMwMkEtXFx1MzAyRlxcdTMwNDZcXHUzMDRCIgorICAgICAgICAgICAgKyAiXFx1MzA0RFxcdTMwNEZcXHUzMDUxXFx1MzA1M1xcdTMwNTVcXHUzMDU3XFx1MzA1OVxcdTMwNUJcXHUzMDVEIgorICAgICAgICAgICAgKyAiXFx1MzA1RlxcdTMwNjFcXHUzMDY0XFx1MzA2NlxcdTMwNjhcXHUzMDZGXFx1MzA3MlxcdTMwNzVcXHUzMDc4IgorICAgICAgICAgICAgKyAiXFx1MzA3QlxcdTMwOTktXFx1MzA5QVxcdTMwOURcXHUzMEE2XFx1MzBBQlxcdTMwQURcXHUzMEFGXFx1MzBCMSIKKyAgICAgICAgICAgICsgIlxcdTMwQjNcXHUzMEI1XFx1MzBCN1xcdTMwQjlcXHUzMEJCXFx1MzBCRFxcdTMwQkZcXHUzMEMxXFx1MzBDNCIKKyAgICAgICAgICAgICsgIlxcdTMwQzZcXHUzMEM4XFx1MzBDRlxcdTMwRDJcXHUzMEQ1XFx1MzBEOFxcdTMwREJcXHUzMEVGLVxcdTMwRjIiCisgICAgICAgICAgICArICJcXHUzMEZEXFx1QUMwMFxcdUFDMUNcXHVBQzM4XFx1QUM1NFxcdUFDNzBcXHVBQzhDXFx1QUNBOFxcdUFDQzQiCisgICAgICAgICAgICArICJcXHVBQ0UwXFx1QUNGQ1xcdUFEMThcXHVBRDM0XFx1QUQ1MFxcdUFENkNcXHVBRDg4XFx1QURBNFxcdUFEQzAiCisgICAgICAgICAgICArICJcXHVBRERDXFx1QURGOFxcdUFFMTRcXHVBRTMwXFx1QUU0Q1xcdUFFNjhcXHVBRTg0XFx1QUVBMFxcdUFFQkMiCisgICAgICAgICAgICArICJcXHVBRUQ4XFx1QUVGNFxcdUFGMTBcXHVBRjJDXFx1QUY0OFxcdUFGNjRcXHVBRjgwXFx1QUY5Q1xcdUFGQjgiCisgICAgICAgICAgICArICJcXHVBRkQ0XFx1QUZGMFxcdUIwMENcXHVCMDI4XFx1QjA0NFxcdUIwNjBcXHVCMDdDXFx1QjA5OFxcdUIwQjQiCisgICAgICAgICAgICArICJcXHVCMEQwXFx1QjBFQ1xcdUIxMDhcXHVCMTI0XFx1QjE0MFxcdUIxNUNcXHVCMTc4XFx1QjE5NFxcdUIxQjAiCisgICAgICAgICAgICArICJcXHVCMUNDXFx1QjFFOFxcdUIyMDRcXHVCMjIwXFx1QjIzQ1xcdUIyNThcXHVCMjc0XFx1QjI5MFxcdUIyQUMiCisgICAgICAgICAgICArICJcXHVCMkM4XFx1QjJFNFxcdUIzMDBcXHVCMzFDXFx1QjMzOFxcdUIzNTRcXHVCMzcwXFx1QjM4Q1xcdUIzQTgiCisgICAgICAgICAgICArICJcXHVCM0M0XFx1QjNFMFxcdUIzRkNcXHVCNDE4XFx1QjQzNFxcdUI0NTBcXHVCNDZDXFx1QjQ4OFxcdUI0QTQiCisgICAgICAgICAgICArICJcXHVCNEMwXFx1QjREQ1xcdUI0RjhcXHVCNTE0XFx1QjUzMFxcdUI1NENcXHVCNTY4XFx1QjU4NFxcdUI1QTAiCisgICAgICAgICAgICArICJcXHVCNUJDXFx1QjVEOFxcdUI1RjRcXHVCNjEwXFx1QjYyQ1xcdUI2NDhcXHVCNjY0XFx1QjY4MFxcdUI2OUMiCisgICAgICAgICAgICArICJcXHVCNkI4XFx1QjZENFxcdUI2RjBcXHVCNzBDXFx1QjcyOFxcdUI3NDRcXHVCNzYwXFx1Qjc3Q1xcdUI3OTgiCisgICAgICAgICAgICArICJcXHVCN0I0XFx1QjdEMFxcdUI3RUNcXHVCODA4XFx1QjgyNFxcdUI4NDBcXHVCODVDXFx1Qjg3OFxcdUI4OTQiCisgICAgICAgICAgICArICJcXHVCOEIwXFx1QjhDQ1xcdUI4RThcXHVCOTA0XFx1QjkyMFxcdUI5M0NcXHVCOTU4XFx1Qjk3NFxcdUI5OTAiCisgICAgICAgICAgICArICJcXHVCOUFDXFx1QjlDOFxcdUI5RTRcXHVCQTAwXFx1QkExQ1xcdUJBMzhcXHVCQTU0XFx1QkE3MFxcdUJBOEMiCisgICAgICAgICAgICArICJcXHVCQUE4XFx1QkFDNFxcdUJBRTBcXHVCQUZDXFx1QkIxOFxcdUJCMzRcXHVCQjUwXFx1QkI2Q1xcdUJCODgiCisgICAgICAgICAgICArICJcXHVCQkE0XFx1QkJDMFxcdUJCRENcXHVCQkY4XFx1QkMxNFxcdUJDMzBcXHVCQzRDXFx1QkM2OFxcdUJDODQiCisgICAgICAgICAgICArICJcXHVCQ0EwXFx1QkNCQ1xcdUJDRDhcXHVCQ0Y0XFx1QkQxMFxcdUJEMkNcXHVCRDQ4XFx1QkQ2NFxcdUJEODAiCisgICAgICAgICAgICArICJcXHVCRDlDXFx1QkRCOFxcdUJERDRcXHVCREYwXFx1QkUwQ1xcdUJFMjhcXHVCRTQ0XFx1QkU2MFxcdUJFN0MiCisgICAgICAgICAgICArICJcXHVCRTk4XFx1QkVCNFxcdUJFRDBcXHVCRUVDXFx1QkYwOFxcdUJGMjRcXHVCRjQwXFx1QkY1Q1xcdUJGNzgiCisgICAgICAgICAgICArICJcXHVCRjk0XFx1QkZCMFxcdUJGQ0NcXHVCRkU4XFx1QzAwNFxcdUMwMjBcXHVDMDNDXFx1QzA1OFxcdUMwNzQiCisgICAgICAgICAgICArICJcXHVDMDkwXFx1QzBBQ1xcdUMwQzhcXHVDMEU0XFx1QzEwMFxcdUMxMUNcXHVDMTM4XFx1QzE1NFxcdUMxNzAiCisgICAgICAgICAgICArICJcXHVDMThDXFx1QzFBOFxcdUMxQzRcXHVDMUUwXFx1QzFGQ1xcdUMyMThcXHVDMjM0XFx1QzI1MFxcdUMyNkMiCisgICAgICAgICAgICArICJcXHVDMjg4XFx1QzJBNFxcdUMyQzBcXHVDMkRDXFx1QzJGOFxcdUMzMTRcXHVDMzMwXFx1QzM0Q1xcdUMzNjgiCisgICAgICAgICAgICArICJcXHVDMzg0XFx1QzNBMFxcdUMzQkNcXHVDM0Q4XFx1QzNGNFxcdUM0MTBcXHVDNDJDXFx1QzQ0OFxcdUM0NjQiCisgICAgICAgICAgICArICJcXHVDNDgwXFx1QzQ5Q1xcdUM0QjhcXHVDNEQ0XFx1QzRGMFxcdUM1MENcXHVDNTI4XFx1QzU0NFxcdUM1NjAiCisgICAgICAgICAgICArICJcXHVDNTdDXFx1QzU5OFxcdUM1QjRcXHVDNUQwXFx1QzVFQ1xcdUM2MDhcXHVDNjI0XFx1QzY0MFxcdUM2NUMiCisgICAgICAgICAgICArICJcXHVDNjc4XFx1QzY5NFxcdUM2QjBcXHVDNkNDXFx1QzZFOFxcdUM3MDRcXHVDNzIwXFx1QzczQ1xcdUM3NTgiCisgICAgICAgICAgICArICJcXHVDNzc0XFx1Qzc5MFxcdUM3QUNcXHVDN0M4XFx1QzdFNFxcdUM4MDBcXHVDODFDXFx1QzgzOFxcdUM4NTQiCisgICAgICAgICAgICArICJcXHVDODcwXFx1Qzg4Q1xcdUM4QThcXHVDOEM0XFx1QzhFMFxcdUM4RkNcXHVDOTE4XFx1QzkzNFxcdUM5NTAiCisgICAgICAgICAgICArICJcXHVDOTZDXFx1Qzk4OFxcdUM5QTRcXHVDOUMwXFx1QzlEQ1xcdUM5RjhcXHVDQTE0XFx1Q0EzMFxcdUNBNEMiCisgICAgICAgICAgICArICJcXHVDQTY4XFx1Q0E4NFxcdUNBQTBcXHVDQUJDXFx1Q0FEOFxcdUNBRjRcXHVDQjEwXFx1Q0IyQ1xcdUNCNDgiCisgICAgICAgICAgICArICJcXHVDQjY0XFx1Q0I4MFxcdUNCOUNcXHVDQkI4XFx1Q0JENFxcdUNCRjBcXHVDQzBDXFx1Q0MyOFxcdUNDNDQiCisgICAgICAgICAgICArICJcXHVDQzYwXFx1Q0M3Q1xcdUNDOThcXHVDQ0I0XFx1Q0NEMFxcdUNDRUNcXHVDRDA4XFx1Q0QyNFxcdUNENDAiCisgICAgICAgICAgICArICJcXHVDRDVDXFx1Q0Q3OFxcdUNEOTRcXHVDREIwXFx1Q0RDQ1xcdUNERThcXHVDRTA0XFx1Q0UyMFxcdUNFM0MiCisgICAgICAgICAgICArICJcXHVDRTU4XFx1Q0U3NFxcdUNFOTBcXHVDRUFDXFx1Q0VDOFxcdUNFRTRcXHVDRjAwXFx1Q0YxQ1xcdUNGMzgiCisgICAgICAgICAgICArICJcXHVDRjU0XFx1Q0Y3MFxcdUNGOENcXHVDRkE4XFx1Q0ZDNFxcdUNGRTBcXHVDRkZDXFx1RDAxOFxcdUQwMzQiCisgICAgICAgICAgICArICJcXHVEMDUwXFx1RDA2Q1xcdUQwODhcXHVEMEE0XFx1RDBDMFxcdUQwRENcXHVEMEY4XFx1RDExNFxcdUQxMzAiCisgICAgICAgICAgICArICJcXHVEMTRDXFx1RDE2OFxcdUQxODRcXHVEMUEwXFx1RDFCQ1xcdUQxRDhcXHVEMUY0XFx1RDIxMFxcdUQyMkMiCisgICAgICAgICAgICArICJcXHVEMjQ4XFx1RDI2NFxcdUQyODBcXHVEMjlDXFx1RDJCOFxcdUQyRDRcXHVEMkYwXFx1RDMwQ1xcdUQzMjgiCisgICAgICAgICAgICArICJcXHVEMzQ0XFx1RDM2MFxcdUQzN0NcXHVEMzk4XFx1RDNCNFxcdUQzRDBcXHVEM0VDXFx1RDQwOFxcdUQ0MjQiCisgICAgICAgICAgICArICJcXHVENDQwXFx1RDQ1Q1xcdUQ0NzhcXHVENDk0XFx1RDRCMFxcdUQ0Q0NcXHVENEU4XFx1RDUwNFxcdUQ1MjAiCisgICAgICAgICAgICArICJcXHVENTNDXFx1RDU1OFxcdUQ1NzRcXHVENTkwXFx1RDVBQ1xcdUQ1QzhcXHVENUU0XFx1RDYwMFxcdUQ2MUMiCisgICAgICAgICAgICArICJcXHVENjM4XFx1RDY1NFxcdUQ2NzBcXHVENjhDXFx1RDZBOFxcdUQ2QzRcXHVENkUwXFx1RDZGQ1xcdUQ3MTgiCisgICAgICAgICAgICArICJcXHVENzM0XFx1RDc1MFxcdUQ3NkNcXHVENzg4XFx1RjkwMC1cXHVGQTBEXFx1RkExMFxcdUZBMTJcXHVGQTE1IgorICAgICAgICAgICAgKyAiLVxcdUZBMUVcXHVGQTIwXFx1RkEyMlxcdUZBMjUtXFx1RkEyNlxcdUZBMkEtXFx1RkEyRFxcdUZBMzAtIgorICAgICAgICAgICAgKyAiXFx1RkE2QVxcdUZCMUQtXFx1RkIxRlxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0UiCisgICAgICAgICAgICArICJcXHVGQjQwLVxcdUZCNDFcXHVGQjQzLVxcdUZCNDRcXHVGQjQ2LVxcdUZCNEVcXHVGRTIwLVxcdUZFMjMiCisgICAgICAgICAgICArICJcXFUwMDAxRDE1RS1cXFUwMDAxRDE2OVxcVTAwMDFEMTZELVxcVTAwMDFEMTcyXFxVMDAwMUQxN0ItIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQxODJcXFUwMDAxRDE4NS1cXFUwMDAxRDE4QlxcVTAwMDFEMUFBLVxcVTAwMDFEMUFEXFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQxQkItXFxVMDAwMUQxQzBcXFUwMDAyRjgwMC1cXFUwMDAyRkExRF0iLCBmYWxzZSk7CisgICAgLypVbmljb2RlOiAKKyAgICAgICAgICAiW148LT5BLVBSLVphLXByLXo/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8tPz8tPz8tPyIKKyAgICAgICAgKyAiPy0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8/LT8/LT8/PyIKKyAgICAgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Py0/Pz8/Pz8/LT8/Pz8/Pz8/Pz8tPz8/Pz8/Pz8/LT8/LT8/LT8/LT8/LT8/LSIKKyAgICAgICAgKyAiPz8tPz8/LT8/Py0/Pz8/LT8/Pz8/LT8/LT8/LT8/LT8/Py0/Pz8/Pz8/LT8/LT8/Pz8/Pz8tPz8/Pz8/Py0/PyIKKyAgICAgICAgKyAiPz8/Pz8/Py0/Py0/Pz8/LT8/Pz8/Py0/Pz8/Pz8/LT8/Py0/Pz8/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8/Pz8/PyIKKyAgICAgICAgKyAiPz8/Py0/Pz8tPz8tPz8tPz8/Pz8/Pz8/Pz8/Py0/Py0/Py0/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPyIKKyAgICAgICAgKyAiPy0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8tPz8tPz8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/PyIKKyAgICAgICAgKyAiPz8tPz8tPz8/Pz8tPz8/Pz8/LT8/Pz8/LT9cPy1cPz8tPz8/LT8/Py0/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/LSIKKyAgICAgICAgKyAiPz8tPz8tPz8tPz8tPz8tPz8/LT8/Py0/Py0/Pz8tPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8tPz8/Pz8/Pz8/PyIKKyAgICAgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8tPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICAgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICAgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICAgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICAgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICAgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICAgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/Pz8tPz8/Py0/Py0/Py0/Py0/Py0/Py0/Pz8tPyIKKyAgICAgICAgKyAiPy0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/XSIqLworICAgICAgICBza2lwcGFibGVzW0tEXSA9IG5ldyBVbmljb2RlU2V0KAorICAgICAgICAgICAgIlteXFx1MDBBMFxcdTAwQThcXHUwMEFBXFx1MDBBRlxcdTAwQjItXFx1MDBCNVxcdTAwQjgtXFx1MDBCQSIKKyAgICAgICAgICAgICsgIlxcdTAwQkMtXFx1MDBCRVxcdTAwQzAtXFx1MDBDNVxcdTAwQzctXFx1MDBDRlxcdTAwRDEtXFx1MDBENiIKKyAgICAgICAgICAgICsgIlxcdTAwRDktXFx1MDBERFxcdTAwRTAtXFx1MDBFNVxcdTAwRTctXFx1MDBFRlxcdTAwRjEtXFx1MDBGNiIKKyAgICAgICAgICAgICsgIlxcdTAwRjktXFx1MDBGRFxcdTAwRkYtXFx1MDEwRlxcdTAxMTItXFx1MDEyNVxcdTAxMjgtXFx1MDEzMCIKKyAgICAgICAgICAgICsgIlxcdTAxMzItXFx1MDEzN1xcdTAxMzktXFx1MDE0MFxcdTAxNDMtXFx1MDE0OVxcdTAxNEMtXFx1MDE1MSIKKyAgICAgICAgICAgICsgIlxcdTAxNTQtXFx1MDE2NVxcdTAxNjgtXFx1MDE3RlxcdTAxQTAtXFx1MDFBMVxcdTAxQUYtXFx1MDFCMCIKKyAgICAgICAgICAgICsgIlxcdTAxQzQtXFx1MDFEQ1xcdTAxREUtXFx1MDFFM1xcdTAxRTYtXFx1MDFGNVxcdTAxRjgtXFx1MDIxQiIKKyAgICAgICAgICAgICsgIlxcdTAyMUUtXFx1MDIxRlxcdTAyMjYtXFx1MDIzM1xcdTAyQjAtXFx1MDJCOFxcdTAyRDgtXFx1MDJERCIKKyAgICAgICAgICAgICsgIlxcdTAyRTAtXFx1MDJFNFxcdTAzMDAtXFx1MDM0RVxcdTAzNjAtXFx1MDM2RlxcdTAzNzRcXHUwMzdBIgorICAgICAgICAgICAgKyAiXFx1MDM3RVxcdTAzODQtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzOTBcXHUwM0FBLVxcdTAzQjAiCisgICAgICAgICAgICArICJcXHUwM0NBLVxcdTAzQ0VcXHUwM0QwLVxcdTAzRDZcXHUwM0YwLVxcdTAzRjJcXHUwM0Y0LVxcdTAzRjUiCisgICAgICAgICAgICArICJcXHUwNDAwLVxcdTA0MDFcXHUwNDAzXFx1MDQwN1xcdTA0MEMtXFx1MDQwRVxcdTA0MTlcXHUwNDM5IgorICAgICAgICAgICAgKyAiXFx1MDQ1MC1cXHUwNDUxXFx1MDQ1M1xcdTA0NTdcXHUwNDVDLVxcdTA0NUVcXHUwNDc2LVxcdTA0NzciCisgICAgICAgICAgICArICJcXHUwNDgzLVxcdTA0ODZcXHUwNEMxLVxcdTA0QzJcXHUwNEQwLVxcdTA0RDNcXHUwNEQ2LVxcdTA0RDciCisgICAgICAgICAgICArICJcXHUwNERBLVxcdTA0REZcXHUwNEUyLVxcdTA0RTdcXHUwNEVBLVxcdTA0RjVcXHUwNEY4LVxcdTA0RjkiCisgICAgICAgICAgICArICJcXHUwNTg3XFx1MDU5MS1cXHUwNUExXFx1MDVBMy1cXHUwNUI5XFx1MDVCQi1cXHUwNUJEXFx1MDVCRiIKKyAgICAgICAgICAgICsgIlxcdTA1QzEtXFx1MDVDMlxcdTA1QzRcXHUwNjIyLVxcdTA2MjZcXHUwNjRCLVxcdTA2NTVcXHUwNjcwIgorICAgICAgICAgICAgKyAiXFx1MDY3NS1cXHUwNjc4XFx1MDZDMFxcdTA2QzJcXHUwNkQzXFx1MDZENi1cXHUwNkRDXFx1MDZERi0iCisgICAgICAgICAgICArICJcXHUwNkU0XFx1MDZFNy1cXHUwNkU4XFx1MDZFQS1cXHUwNkVEXFx1MDcxMVxcdTA3MzAtXFx1MDc0QSIKKyAgICAgICAgICAgICsgIlxcdTA5MjlcXHUwOTMxXFx1MDkzNFxcdTA5M0NcXHUwOTREXFx1MDk1MS1cXHUwOTU0XFx1MDk1OC0iCisgICAgICAgICAgICArICJcXHUwOTVGXFx1MDlCQ1xcdTA5Q0ItXFx1MDlDRFxcdTA5REMtXFx1MDlERFxcdTA5REZcXHUwQTMzIgorICAgICAgICAgICAgKyAiXFx1MEEzNlxcdTBBM0NcXHUwQTREXFx1MEE1OS1cXHUwQTVCXFx1MEE1RVxcdTBBQkNcXHUwQUNEXFx1MEIzQyIKKyAgICAgICAgICAgICsgIlxcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjVDLVxcdTBCNURcXHUwQjk0XFx1MEJDQS1cXHUwQkNEIgorICAgICAgICAgICAgKyAiXFx1MEM0OFxcdTBDNERcXHUwQzU1LVxcdTBDNTZcXHUwQ0MwXFx1MENDNy1cXHUwQ0M4XFx1MENDQS0iCisgICAgICAgICAgICArICJcXHUwQ0NCXFx1MENDRFxcdTBENEEtXFx1MEQ0RFxcdTBEQ0FcXHUwRERBXFx1MEREQy1cXHUwRERFIgorICAgICAgICAgICAgKyAiXFx1MEUzM1xcdTBFMzgtXFx1MEUzQVxcdTBFNDgtXFx1MEU0QlxcdTBFQjNcXHUwRUI4LVxcdTBFQjkiCisgICAgICAgICAgICArICJcXHUwRUM4LVxcdTBFQ0JcXHUwRURDLVxcdTBFRERcXHUwRjBDXFx1MEYxOC1cXHUwRjE5XFx1MEYzNSIKKyAgICAgICAgICAgICsgIlxcdTBGMzdcXHUwRjM5XFx1MEY0M1xcdTBGNERcXHUwRjUyXFx1MEY1N1xcdTBGNUNcXHUwRjY5XFx1MEY3MS0iCisgICAgICAgICAgICArICJcXHUwRjdEXFx1MEY4MC1cXHUwRjg0XFx1MEY4Ni1cXHUwRjg3XFx1MEY5M1xcdTBGOURcXHUwRkEyIgorICAgICAgICAgICAgKyAiXFx1MEZBN1xcdTBGQUNcXHUwRkI5XFx1MEZDNlxcdTEwMjZcXHUxMDM3XFx1MTAzOVxcdTE3MTRcXHUxNzM0IgorICAgICAgICAgICAgKyAiXFx1MTdEMlxcdTE4QTlcXHUxRTAwLVxcdTFFOUJcXHUxRUEwLVxcdTFFRjlcXHUxRjAwLVxcdTFGMTUiCisgICAgICAgICAgICArICJcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTciCisgICAgICAgICAgICArICJcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LSIKKyAgICAgICAgICAgICsgIlxcdTFGQzRcXHUxRkM2LVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkRELVxcdTFGRUZcXHUxRkYyLSIKKyAgICAgICAgICAgICsgIlxcdTFGRjRcXHUxRkY2LVxcdTFGRkVcXHUyMDAwLVxcdTIwMEFcXHUyMDExXFx1MjAxN1xcdTIwMjQtIgorICAgICAgICAgICAgKyAiXFx1MjAyNlxcdTIwMkZcXHUyMDMzLVxcdTIwMzRcXHUyMDM2LVxcdTIwMzdcXHUyMDNDXFx1MjAzRSIKKyAgICAgICAgICAgICsgIlxcdTIwNDctXFx1MjA0OVxcdTIwNTdcXHUyMDVGXFx1MjA3MC1cXHUyMDcxXFx1MjA3NC1cXHUyMDhFIgorICAgICAgICAgICAgKyAiXFx1MjBBOFxcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRUFcXHUyMTAwLVxcdTIxMDMiCisgICAgICAgICAgICArICJcXHUyMTA1LVxcdTIxMDdcXHUyMTA5LVxcdTIxMTNcXHUyMTE1LVxcdTIxMTZcXHUyMTE5LVxcdTIxMUQiCisgICAgICAgICAgICArICJcXHUyMTIwLVxcdTIxMjJcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLSIKKyAgICAgICAgICAgICsgIlxcdTIxMzFcXHUyMTMzLVxcdTIxMzlcXHUyMTNELVxcdTIxNDBcXHUyMTQ1LVxcdTIxNDlcXHUyMTUzLSIKKyAgICAgICAgICAgICsgIlxcdTIxN0ZcXHUyMTlBLVxcdTIxOUJcXHUyMUFFXFx1MjFDRC1cXHUyMUNGXFx1MjIwNFxcdTIyMDkiCisgICAgICAgICAgICArICJcXHUyMjBDXFx1MjIyNFxcdTIyMjZcXHUyMjJDLVxcdTIyMkRcXHUyMjJGLVxcdTIyMzBcXHUyMjQxIgorICAgICAgICAgICAgKyAiXFx1MjI0NFxcdTIyNDdcXHUyMjQ5XFx1MjI2MFxcdTIyNjJcXHUyMjZELVxcdTIyNzFcXHUyMjc0LSIKKyAgICAgICAgICAgICsgIlxcdTIyNzVcXHUyMjc4LVxcdTIyNzlcXHUyMjgwLVxcdTIyODFcXHUyMjg0LVxcdTIyODVcXHUyMjg4LSIKKyAgICAgICAgICAgICsgIlxcdTIyODlcXHUyMkFDLVxcdTIyQUZcXHUyMkUwLVxcdTIyRTNcXHUyMkVBLVxcdTIyRURcXHUyMzI5LSIKKyAgICAgICAgICAgICsgIlxcdTIzMkFcXHUyNDYwLVxcdTI0RUFcXHUyQTBDXFx1MkE3NC1cXHUyQTc2XFx1MkFEQ1xcdTJFOUYiCisgICAgICAgICAgICArICJcXHUyRUYzXFx1MkYwMC1cXHUyRkQ1XFx1MzAwMFxcdTMwMkEtXFx1MzAyRlxcdTMwMzZcXHUzMDM4LSIKKyAgICAgICAgICAgICsgIlxcdTMwM0FcXHUzMDRDXFx1MzA0RVxcdTMwNTBcXHUzMDUyXFx1MzA1NFxcdTMwNTZcXHUzMDU4XFx1MzA1QSIKKyAgICAgICAgICAgICsgIlxcdTMwNUNcXHUzMDVFXFx1MzA2MFxcdTMwNjJcXHUzMDY1XFx1MzA2N1xcdTMwNjlcXHUzMDcwLVxcdTMwNzEiCisgICAgICAgICAgICArICJcXHUzMDczLVxcdTMwNzRcXHUzMDc2LVxcdTMwNzdcXHUzMDc5LVxcdTMwN0FcXHUzMDdDLVxcdTMwN0QiCisgICAgICAgICAgICArICJcXHUzMDk0XFx1MzA5OS1cXHUzMDlDXFx1MzA5RS1cXHUzMDlGXFx1MzBBQ1xcdTMwQUVcXHUzMEIwIgorICAgICAgICAgICAgKyAiXFx1MzBCMlxcdTMwQjRcXHUzMEI2XFx1MzBCOFxcdTMwQkFcXHUzMEJDXFx1MzBCRVxcdTMwQzBcXHUzMEMyIgorICAgICAgICAgICAgKyAiXFx1MzBDNVxcdTMwQzdcXHUzMEM5XFx1MzBEMC1cXHUzMEQxXFx1MzBEMy1cXHUzMEQ0XFx1MzBENi0iCisgICAgICAgICAgICArICJcXHUzMEQ3XFx1MzBEOS1cXHUzMERBXFx1MzBEQy1cXHUzMEREXFx1MzBGNFxcdTMwRjctXFx1MzBGQSIKKyAgICAgICAgICAgICsgIlxcdTMwRkUtXFx1MzBGRlxcdTMxMzEtXFx1MzE4RVxcdTMxOTItXFx1MzE5RlxcdTMyMDAtXFx1MzIxQyIKKyAgICAgICAgICAgICsgIlxcdTMyMjAtXFx1MzI0M1xcdTMyNTEtXFx1MzI3QlxcdTMyODAtXFx1MzJDQlxcdTMyRDAtXFx1MzJGRSIKKyAgICAgICAgICAgICsgIlxcdTMzMDAtXFx1MzM3NlxcdTMzN0ItXFx1MzNERFxcdTMzRTAtXFx1MzNGRVxcdUFDMDAtXFx1RDdBMyIKKyAgICAgICAgICAgICsgIlxcdUY5MDAtXFx1RkEwRFxcdUZBMTBcXHVGQTEyXFx1RkExNS1cXHVGQTFFXFx1RkEyMFxcdUZBMjIiCisgICAgICAgICAgICArICJcXHVGQTI1LVxcdUZBMjZcXHVGQTJBLVxcdUZBMkRcXHVGQTMwLVxcdUZBNkFcXHVGQjAwLVxcdUZCMDYiCisgICAgICAgICAgICArICJcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MC0iCisgICAgICAgICAgICArICJcXHVGQjQxXFx1RkI0My1cXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC0iCisgICAgICAgICAgICArICJcXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZDXFx1RkUyMC1cXHVGRTIzXFx1RkUzMC0iCisgICAgICAgICAgICArICJcXHVGRTQ0XFx1RkU0OS1cXHVGRTUyXFx1RkU1NC1cXHVGRTY2XFx1RkU2OC1cXHVGRTZCXFx1RkU3MC0iCisgICAgICAgICAgICArICJcXHVGRTcyXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMDEtXFx1RkZCRVxcdUZGQzItXFx1RkZDNyIKKyAgICAgICAgICAgICsgIlxcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ1xcdUZGRTAtXFx1RkZFNiIKKyAgICAgICAgICAgICsgIlxcdUZGRTgtXFx1RkZFRVxcVTAwMDFEMTVFLVxcVTAwMDFEMTY5XFxVMDAwMUQxNkQtXFxVMDAwMUQxNzIiCisgICAgICAgICAgICArICJcXFUwMDAxRDE3Qi1cXFUwMDAxRDE4MlxcVTAwMDFEMTg1LVxcVTAwMDFEMThCXFxVMDAwMUQxQUEtIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQxQURcXFUwMDAxRDFCQi1cXFUwMDAxRDFDMFxcVTAwMDFENDAwLVxcVTAwMDFENDU0XFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ0NTYtXFxVMDAwMUQ0OUNcXFUwMDAxRDQ5RS1cXFUwMDAxRDQ5RlxcVTAwMDFENEEyXFxVMDAwMUQ0QTUtIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ0QTZcXFUwMDAxRDRBOS1cXFUwMDAxRDRBQ1xcVTAwMDFENEFFLVxcVTAwMDFENEI5XFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ0QkJcXFUwMDAxRDRCRC1cXFUwMDAxRDRDMFxcVTAwMDFENEMyLVxcVTAwMDFENEMzXFxVMDAwMUQ0QzUtIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ1MDVcXFUwMDAxRDUwNy1cXFUwMDAxRDUwQVxcVTAwMDFENTBELVxcVTAwMDFENTE0XFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ1MTYtXFxVMDAwMUQ1MUNcXFUwMDAxRDUxRS1cXFUwMDAxRDUzOVxcVTAwMDFENTNCLVxcVTAwMDFENTNFIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ1NDAtXFxVMDAwMUQ1NDRcXFUwMDAxRDU0NlxcVTAwMDFENTRBLVxcVTAwMDFENTUwXFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ1NTItXFxVMDAwMUQ2QTNcXFUwMDAxRDZBOC1cXFUwMDAxRDdDOVxcVTAwMDFEN0NFLVxcVTAwMDFEN0ZGIgorICAgICAgICAgICAgKyAiXFxVMDAwMkY4MDAtXFxVMDAwMkZBMURdIiwgZmFsc2UpOworICAgIC8qVW5pY29kZTogCisgICAgICAgICAgIltePz8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8iCisgICAgICAgICsgIi0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8/Py0/Pz8tPz8tPz8tPz8tPz8tPz8iCisgICAgICAgICsgIi0/Py0/Pz8/LT8/Pz8tPz8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8tPz8tPz8tPz8/LT8/Py0iCisgICAgICAgICsgIj8/LT8/Py0/Pz8/Py0/Py0/Py0/Py0/Pz8tPz8/Pz8/Py0/Py0/Pz8tPz8tPz8/Pz8/Py0/Pz8/Pz8/LT8/LT8iCisgICAgICAgICsgIj8/LT8/Pz8tPz8/LT8/LT8/Py0/Pz8/LT8/Py0/Py0/Pz8tPz8tPz8tPz8/LT8/Pz8/Pz8/Pz8/LT8/LT8/LT8iCisgICAgICAgICsgIj8/Pz8/Pz8/Pz8/Pz8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/IgorICAgICAgICArICJcPy1cPz8/Py0/Pz8tPz8tPz8/Py0/P1w/Py0/Py0/Pz8tPz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/Pz8/LT8/IgorICAgICAgICArICItPz8tPz8tPz8tPz8tPz8tPz8/LT8/Pz8/Pz8tPz8tPz8/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tIgorICAgICAgICArICI/Py0/Py0/Pz8tPz8/Pz8tP1w/Py0/Pz8tPz8/Pz8/Pz8/Pz8/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8/LT8/LT8/IgorICAgICAgICArICI/Pz8/Pz8/Pz8/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/IgorICAgICAgICArICItPz8tPz8tPz8/Py0/Pz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/IgorICAgICAgICArICI/LT8/LT8/LT8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/PyIKKyAgICAgICAgKyAiLT8/LT8/LT8/LT8/Py0/Py0/Py0/Pz8tPz8tPz8tPz8tPz8tPz8iCisgICAgICAgICsgIi0/Py0/Py0/Py0/Pz8tPz8tPz8tPz8tPz8tP10iKi8KKyAgICAKKyAgICAgICAgc2tpcHBhYmxlc1tLQ10gPSBuZXcgVW5pY29kZVNldCgKKyAgICAgICAgICAgICJbXjwtPkEtUFItWmEtcHItelxcdTAwQTBcXHUwMEE4XFx1MDBBQVxcdTAwQUZcXHUwMEIyLVxcdTAwQjUiCisgICAgICAgICAgICArICJcXHUwMEI4LVxcdTAwQkFcXHUwMEJDLVxcdTAwQkVcXHUwMEMwLVxcdTAwQ0ZcXHUwMEQxLVxcdTAwRDYiCisgICAgICAgICAgICArICJcXHUwMEQ4LVxcdTAwRERcXHUwMEUwLVxcdTAwRUZcXHUwMEYxLVxcdTAwRjZcXHUwMEY4LVxcdTAwRkQiCisgICAgICAgICAgICArICJcXHUwMEZGLVxcdTAxMDNcXHUwMTA2LVxcdTAxMEZcXHUwMTEyLVxcdTAxMTdcXHUwMTFBLVxcdTAxMjEiCisgICAgICAgICAgICArICJcXHUwMTI0LVxcdTAxMjVcXHUwMTI4LVxcdTAxMkRcXHUwMTMwXFx1MDEzMi1cXHUwMTMzXFx1MDEzOS0iCisgICAgICAgICAgICArICJcXHUwMTNBXFx1MDEzRC1cXHUwMTQwXFx1MDE0My1cXHUwMTQ0XFx1MDE0Ny1cXHUwMTQ5XFx1MDE0Qy0iCisgICAgICAgICAgICArICJcXHUwMTUxXFx1MDE1NC1cXHUwMTU1XFx1MDE1OC1cXHUwMTVEXFx1MDE2MC1cXHUwMTYxXFx1MDE2NC0iCisgICAgICAgICAgICArICJcXHUwMTY1XFx1MDE2OC1cXHUwMTcxXFx1MDE3NC1cXHUwMTdGXFx1MDFBMC1cXHUwMUExXFx1MDFBRi0iCisgICAgICAgICAgICArICJcXHUwMUIwXFx1MDFCN1xcdTAxQzQtXFx1MDFEQ1xcdTAxREUtXFx1MDFFMVxcdTAxRTYtXFx1MDFFQiIKKyAgICAgICAgICAgICsgIlxcdTAxRjEtXFx1MDFGNVxcdTAxRjgtXFx1MDFGQlxcdTAyMDAtXFx1MDIxQlxcdTAyMUUtXFx1MDIxRiIKKyAgICAgICAgICAgICsgIlxcdTAyMjYtXFx1MDIzM1xcdTAyOTJcXHUwMkIwLVxcdTAyQjhcXHUwMkQ4LVxcdTAyRERcXHUwMkUwLSIKKyAgICAgICAgICAgICsgIlxcdTAyRTRcXHUwMzAwLVxcdTAzNEVcXHUwMzYwLVxcdTAzNkZcXHUwMzc0XFx1MDM3QVxcdTAzN0UiCisgICAgICAgICAgICArICJcXHUwMzg0LVxcdTAzODVcXHUwMzg3XFx1MDM5MVxcdTAzOTVcXHUwMzk3XFx1MDM5OVxcdTAzOUZcXHUwM0ExIgorICAgICAgICAgICAgKyAiXFx1MDNBNVxcdTAzQTlcXHUwM0FDXFx1MDNBRVxcdTAzQjFcXHUwM0I1XFx1MDNCN1xcdTAzQjlcXHUwM0JGIgorICAgICAgICAgICAgKyAiXFx1MDNDMVxcdTAzQzVcXHUwM0M5LVxcdTAzQ0JcXHUwM0NFXFx1MDNEMC1cXHUwM0Q2XFx1MDNGMC0iCisgICAgICAgICAgICArICJcXHUwM0YyXFx1MDNGNC1cXHUwM0Y1XFx1MDQwNlxcdTA0MTBcXHUwNDEzXFx1MDQxNS1cXHUwNDE4IgorICAgICAgICAgICAgKyAiXFx1MDQxQVxcdTA0MUVcXHUwNDIzXFx1MDQyN1xcdTA0MkJcXHUwNDJEXFx1MDQzMFxcdTA0MzNcXHUwNDM1LSIKKyAgICAgICAgICAgICsgIlxcdTA0MzhcXHUwNDNBXFx1MDQzRVxcdTA0NDNcXHUwNDQ3XFx1MDQ0QlxcdTA0NERcXHUwNDU2XFx1MDQ3NC0iCisgICAgICAgICAgICArICJcXHUwNDc1XFx1MDQ4My1cXHUwNDg2XFx1MDREOC1cXHUwNEQ5XFx1MDRFOC1cXHUwNEU5XFx1MDU4NyIKKyAgICAgICAgICAgICsgIlxcdTA1OTEtXFx1MDVBMVxcdTA1QTMtXFx1MDVCOVxcdTA1QkItXFx1MDVCRFxcdTA1QkZcXHUwNUMxLSIKKyAgICAgICAgICAgICsgIlxcdTA1QzJcXHUwNUM0XFx1MDYyMi1cXHUwNjIzXFx1MDYyN1xcdTA2NDhcXHUwNjRBLVxcdTA2NTUiCisgICAgICAgICAgICArICJcXHUwNjcwXFx1MDY3NS1cXHUwNjc4XFx1MDZDMVxcdTA2RDJcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLSIKKyAgICAgICAgICAgICsgIlxcdTA2RTRcXHUwNkU3LVxcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBIgorICAgICAgICAgICAgKyAiXFx1MDkyOFxcdTA5MzBcXHUwOTMzXFx1MDkzQ1xcdTA5NERcXHUwOTUxLVxcdTA5NTRcXHUwOTU4LSIKKyAgICAgICAgICAgICsgIlxcdTA5NUZcXHUwOUJDXFx1MDlCRVxcdTA5QzdcXHUwOUNEXFx1MDlEN1xcdTA5REMtXFx1MDlERFxcdTA5REYiCisgICAgICAgICAgICArICJcXHUwQTMzXFx1MEEzNlxcdTBBM0NcXHUwQTREXFx1MEE1OS1cXHUwQTVCXFx1MEE1RVxcdTBBQkNcXHUwQUNEIgorICAgICAgICAgICAgKyAiXFx1MEIzQ1xcdTBCM0VcXHUwQjQ3XFx1MEI0RFxcdTBCNTYtXFx1MEI1N1xcdTBCNUMtXFx1MEI1RCIKKyAgICAgICAgICAgICsgIlxcdTBCOTJcXHUwQkJFXFx1MEJDNi1cXHUwQkM3XFx1MEJDRFxcdTBCRDdcXHUwQzQ2XFx1MEM0RFxcdTBDNTUiCisgICAgICAgICAgICArICItXFx1MEM1NlxcdTBDQkZcXHUwQ0MyXFx1MENDNlxcdTBDQ0FcXHUwQ0NEXFx1MENENS1cXHUwQ0Q2IgorICAgICAgICAgICAgKyAiXFx1MEQzRVxcdTBENDYtXFx1MEQ0N1xcdTBENERcXHUwRDU3XFx1MERDQVxcdTBEQ0ZcXHUwREQ5XFx1MEREQyIKKyAgICAgICAgICAgICsgIlxcdTBEREZcXHUwRTMzXFx1MEUzOC1cXHUwRTNBXFx1MEU0OC1cXHUwRTRCXFx1MEVCM1xcdTBFQjgtIgorICAgICAgICAgICAgKyAiXFx1MEVCOVxcdTBFQzgtXFx1MEVDQlxcdTBFREMtXFx1MEVERFxcdTBGMENcXHUwRjE4LVxcdTBGMTkiCisgICAgICAgICAgICArICJcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjQzXFx1MEY0RFxcdTBGNTJcXHUwRjU3XFx1MEY1Q1xcdTBGNjkiCisgICAgICAgICAgICArICJcXHUwRjcxLVxcdTBGN0RcXHUwRjgwLVxcdTBGODRcXHUwRjg2LVxcdTBGODdcXHUwRjkzXFx1MEY5RCIKKyAgICAgICAgICAgICsgIlxcdTBGQTJcXHUwRkE3XFx1MEZBQ1xcdTBGQjlcXHUwRkM2XFx1MTAyNVxcdTEwMkVcXHUxMDM3XFx1MTAzOSIKKyAgICAgICAgICAgICsgIlxcdTExMDAtXFx1MTExMlxcdTExNjEtXFx1MTE3NVxcdTExQTgtXFx1MTFDMlxcdTE3MTRcXHUxNzM0IgorICAgICAgICAgICAgKyAiXFx1MTdEMlxcdTE4QTlcXHUxRTAwLVxcdTFFMDNcXHUxRTBBLVxcdTFFMEZcXHUxRTEyLVxcdTFFMUIiCisgICAgICAgICAgICArICJcXHUxRTIwLVxcdTFFMjdcXHUxRTJBLVxcdTFFNDFcXHUxRTQ0LVxcdTFFNTNcXHUxRTU4LVxcdTFFN0QiCisgICAgICAgICAgICArICJcXHUxRTgwLVxcdTFFODdcXHUxRThFLVxcdTFFOTFcXHUxRTk2LVxcdTFFOUJcXHUxRUEwLVxcdTFFRjMiCisgICAgICAgICAgICArICJcXHUxRUY2LVxcdTFFRjlcXHUxRjAwLVxcdTFGMTFcXHUxRjE4LVxcdTFGMTlcXHUxRjIwLVxcdTFGMzEiCisgICAgICAgICAgICArICJcXHUxRjM4LVxcdTFGMzlcXHUxRjQwLVxcdTFGNDFcXHUxRjQ4LVxcdTFGNDlcXHUxRjUwLVxcdTFGNTEiCisgICAgICAgICAgICArICJcXHUxRjU5XFx1MUY2MC1cXHUxRjcxXFx1MUY3My1cXHUxRjc1XFx1MUY3N1xcdTFGNzlcXHUxRjdCLSIKKyAgICAgICAgICAgICsgIlxcdTFGN0RcXHUxRjgwLVxcdTFGODFcXHUxRjg4LVxcdTFGODlcXHUxRjkwLVxcdTFGOTFcXHUxRjk4LSIKKyAgICAgICAgICAgICsgIlxcdTFGOTlcXHUxRkEwLVxcdTFGQTFcXHUxRkE4LVxcdTFGQTlcXHUxRkIzXFx1MUZCNlxcdTFGQkItIgorICAgICAgICAgICAgKyAiXFx1MUZDMVxcdTFGQzNcXHUxRkM2XFx1MUZDOVxcdTFGQ0ItXFx1MUZDRlxcdTFGRDNcXHUxRkRCXFx1MUZERCIKKyAgICAgICAgICAgICsgIi1cXHUxRkRGXFx1MUZFM1xcdTFGRUJcXHUxRkVELVxcdTFGRUZcXHUxRkYzXFx1MUZGNlxcdTFGRjkiCisgICAgICAgICAgICArICJcXHUxRkZCLVxcdTFGRkVcXHUyMDAwLVxcdTIwMEFcXHUyMDExXFx1MjAxN1xcdTIwMjQtXFx1MjAyNiIKKyAgICAgICAgICAgICsgIlxcdTIwMkZcXHUyMDMzLVxcdTIwMzRcXHUyMDM2LVxcdTIwMzdcXHUyMDNDXFx1MjAzRVxcdTIwNDctIgorICAgICAgICAgICAgKyAiXFx1MjA0OVxcdTIwNTdcXHUyMDVGXFx1MjA3MC1cXHUyMDcxXFx1MjA3NC1cXHUyMDhFXFx1MjBBOCIKKyAgICAgICAgICAgICsgIlxcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRUFcXHUyMTAwLVxcdTIxMDNcXHUyMTA1LSIKKyAgICAgICAgICAgICsgIlxcdTIxMDdcXHUyMTA5LVxcdTIxMTNcXHUyMTE1LVxcdTIxMTZcXHUyMTE5LVxcdTIxMURcXHUyMTIwLSIKKyAgICAgICAgICAgICsgIlxcdTIxMjJcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzEiCisgICAgICAgICAgICArICJcXHUyMTMzLVxcdTIxMzlcXHUyMTNELVxcdTIxNDBcXHUyMTQ1LVxcdTIxNDlcXHUyMTUzLVxcdTIxN0YiCisgICAgICAgICAgICArICJcXHUyMTkwXFx1MjE5MlxcdTIxOTRcXHUyMUQwXFx1MjFEMlxcdTIxRDRcXHUyMjAzXFx1MjIwOFxcdTIyMEIiCisgICAgICAgICAgICArICJcXHUyMjIzXFx1MjIyNVxcdTIyMkMtXFx1MjIyRFxcdTIyMkYtXFx1MjIzMFxcdTIyM0NcXHUyMjQzIgorICAgICAgICAgICAgKyAiXFx1MjI0NVxcdTIyNDhcXHUyMjREXFx1MjI2MVxcdTIyNjQtXFx1MjI2NVxcdTIyNzItXFx1MjI3MyIKKyAgICAgICAgICAgICsgIlxcdTIyNzYtXFx1MjI3N1xcdTIyN0EtXFx1MjI3RFxcdTIyODItXFx1MjI4M1xcdTIyODYtXFx1MjI4NyIKKyAgICAgICAgICAgICsgIlxcdTIyOTEtXFx1MjI5MlxcdTIyQTJcXHUyMkE4LVxcdTIyQTlcXHUyMkFCXFx1MjJCMi1cXHUyMkI1IgorICAgICAgICAgICAgKyAiXFx1MjMyOS1cXHUyMzJBXFx1MjQ2MC1cXHUyNEVBXFx1MkEwQ1xcdTJBNzQtXFx1MkE3NlxcdTJBREMiCisgICAgICAgICAgICArICJcXHUyRTlGXFx1MkVGM1xcdTJGMDAtXFx1MkZENVxcdTMwMDBcXHUzMDJBLVxcdTMwMkZcXHUzMDM2IgorICAgICAgICAgICAgKyAiXFx1MzAzOC1cXHUzMDNBXFx1MzA0NlxcdTMwNEJcXHUzMDREXFx1MzA0RlxcdTMwNTFcXHUzMDUzXFx1MzA1NSIKKyAgICAgICAgICAgICsgIlxcdTMwNTdcXHUzMDU5XFx1MzA1QlxcdTMwNURcXHUzMDVGXFx1MzA2MVxcdTMwNjRcXHUzMDY2XFx1MzA2OCIKKyAgICAgICAgICAgICsgIlxcdTMwNkZcXHUzMDcyXFx1MzA3NVxcdTMwNzhcXHUzMDdCXFx1MzA5OS1cXHUzMDlEXFx1MzA5RlxcdTMwQTYiCisgICAgICAgICAgICArICJcXHUzMEFCXFx1MzBBRFxcdTMwQUZcXHUzMEIxXFx1MzBCM1xcdTMwQjVcXHUzMEI3XFx1MzBCOVxcdTMwQkIiCisgICAgICAgICAgICArICJcXHUzMEJEXFx1MzBCRlxcdTMwQzFcXHUzMEM0XFx1MzBDNlxcdTMwQzhcXHUzMENGXFx1MzBEMlxcdTMwRDUiCisgICAgICAgICAgICArICJcXHUzMEQ4XFx1MzBEQlxcdTMwRUYtXFx1MzBGMlxcdTMwRkRcXHUzMEZGXFx1MzEzMS1cXHUzMThFIgorICAgICAgICAgICAgKyAiXFx1MzE5Mi1cXHUzMTlGXFx1MzIwMC1cXHUzMjFDXFx1MzIyMC1cXHUzMjQzXFx1MzI1MS1cXHUzMjdCIgorICAgICAgICAgICAgKyAiXFx1MzI4MC1cXHUzMkNCXFx1MzJEMC1cXHUzMkZFXFx1MzMwMC1cXHUzMzc2XFx1MzM3Qi1cXHUzM0REIgorICAgICAgICAgICAgKyAiXFx1MzNFMC1cXHUzM0ZFXFx1QUMwMFxcdUFDMUNcXHVBQzM4XFx1QUM1NFxcdUFDNzBcXHVBQzhDXFx1QUNBOCIKKyAgICAgICAgICAgICsgIlxcdUFDQzRcXHVBQ0UwXFx1QUNGQ1xcdUFEMThcXHVBRDM0XFx1QUQ1MFxcdUFENkNcXHVBRDg4XFx1QURBNCIKKyAgICAgICAgICAgICsgIlxcdUFEQzBcXHVBRERDXFx1QURGOFxcdUFFMTRcXHVBRTMwXFx1QUU0Q1xcdUFFNjhcXHVBRTg0XFx1QUVBMCIKKyAgICAgICAgICAgICsgIlxcdUFFQkNcXHVBRUQ4XFx1QUVGNFxcdUFGMTBcXHVBRjJDXFx1QUY0OFxcdUFGNjRcXHVBRjgwXFx1QUY5QyIKKyAgICAgICAgICAgICsgIlxcdUFGQjhcXHVBRkQ0XFx1QUZGMFxcdUIwMENcXHVCMDI4XFx1QjA0NFxcdUIwNjBcXHVCMDdDXFx1QjA5OCIKKyAgICAgICAgICAgICsgIlxcdUIwQjRcXHVCMEQwXFx1QjBFQ1xcdUIxMDhcXHVCMTI0XFx1QjE0MFxcdUIxNUNcXHVCMTc4XFx1QjE5NCIKKyAgICAgICAgICAgICsgIlxcdUIxQjBcXHVCMUNDXFx1QjFFOFxcdUIyMDRcXHVCMjIwXFx1QjIzQ1xcdUIyNThcXHVCMjc0XFx1QjI5MCIKKyAgICAgICAgICAgICsgIlxcdUIyQUNcXHVCMkM4XFx1QjJFNFxcdUIzMDBcXHVCMzFDXFx1QjMzOFxcdUIzNTRcXHVCMzcwXFx1QjM4QyIKKyAgICAgICAgICAgICsgIlxcdUIzQThcXHVCM0M0XFx1QjNFMFxcdUIzRkNcXHVCNDE4XFx1QjQzNFxcdUI0NTBcXHVCNDZDXFx1QjQ4OCIKKyAgICAgICAgICAgICsgIlxcdUI0QTRcXHVCNEMwXFx1QjREQ1xcdUI0RjhcXHVCNTE0XFx1QjUzMFxcdUI1NENcXHVCNTY4XFx1QjU4NCIKKyAgICAgICAgICAgICsgIlxcdUI1QTBcXHVCNUJDXFx1QjVEOFxcdUI1RjRcXHVCNjEwXFx1QjYyQ1xcdUI2NDhcXHVCNjY0XFx1QjY4MCIKKyAgICAgICAgICAgICsgIlxcdUI2OUNcXHVCNkI4XFx1QjZENFxcdUI2RjBcXHVCNzBDXFx1QjcyOFxcdUI3NDRcXHVCNzYwXFx1Qjc3QyIKKyAgICAgICAgICAgICsgIlxcdUI3OThcXHVCN0I0XFx1QjdEMFxcdUI3RUNcXHVCODA4XFx1QjgyNFxcdUI4NDBcXHVCODVDXFx1Qjg3OCIKKyAgICAgICAgICAgICsgIlxcdUI4OTRcXHVCOEIwXFx1QjhDQ1xcdUI4RThcXHVCOTA0XFx1QjkyMFxcdUI5M0NcXHVCOTU4XFx1Qjk3NCIKKyAgICAgICAgICAgICsgIlxcdUI5OTBcXHVCOUFDXFx1QjlDOFxcdUI5RTRcXHVCQTAwXFx1QkExQ1xcdUJBMzhcXHVCQTU0XFx1QkE3MCIKKyAgICAgICAgICAgICsgIlxcdUJBOENcXHVCQUE4XFx1QkFDNFxcdUJBRTBcXHVCQUZDXFx1QkIxOFxcdUJCMzRcXHVCQjUwXFx1QkI2QyIKKyAgICAgICAgICAgICsgIlxcdUJCODhcXHVCQkE0XFx1QkJDMFxcdUJCRENcXHVCQkY4XFx1QkMxNFxcdUJDMzBcXHVCQzRDXFx1QkM2OCIKKyAgICAgICAgICAgICsgIlxcdUJDODRcXHVCQ0EwXFx1QkNCQ1xcdUJDRDhcXHVCQ0Y0XFx1QkQxMFxcdUJEMkNcXHVCRDQ4XFx1QkQ2NCIKKyAgICAgICAgICAgICsgIlxcdUJEODBcXHVCRDlDXFx1QkRCOFxcdUJERDRcXHVCREYwXFx1QkUwQ1xcdUJFMjhcXHVCRTQ0XFx1QkU2MCIKKyAgICAgICAgICAgICsgIlxcdUJFN0NcXHVCRTk4XFx1QkVCNFxcdUJFRDBcXHVCRUVDXFx1QkYwOFxcdUJGMjRcXHVCRjQwXFx1QkY1QyIKKyAgICAgICAgICAgICsgIlxcdUJGNzhcXHVCRjk0XFx1QkZCMFxcdUJGQ0NcXHVCRkU4XFx1QzAwNFxcdUMwMjBcXHVDMDNDXFx1QzA1OCIKKyAgICAgICAgICAgICsgIlxcdUMwNzRcXHVDMDkwXFx1QzBBQ1xcdUMwQzhcXHVDMEU0XFx1QzEwMFxcdUMxMUNcXHVDMTM4XFx1QzE1NCIKKyAgICAgICAgICAgICsgIlxcdUMxNzBcXHVDMThDXFx1QzFBOFxcdUMxQzRcXHVDMUUwXFx1QzFGQ1xcdUMyMThcXHVDMjM0XFx1QzI1MCIKKyAgICAgICAgICAgICsgIlxcdUMyNkNcXHVDMjg4XFx1QzJBNFxcdUMyQzBcXHVDMkRDXFx1QzJGOFxcdUMzMTRcXHVDMzMwXFx1QzM0QyIKKyAgICAgICAgICAgICsgIlxcdUMzNjhcXHVDMzg0XFx1QzNBMFxcdUMzQkNcXHVDM0Q4XFx1QzNGNFxcdUM0MTBcXHVDNDJDXFx1QzQ0OCIKKyAgICAgICAgICAgICsgIlxcdUM0NjRcXHVDNDgwXFx1QzQ5Q1xcdUM0QjhcXHVDNEQ0XFx1QzRGMFxcdUM1MENcXHVDNTI4XFx1QzU0NCIKKyAgICAgICAgICAgICsgIlxcdUM1NjBcXHVDNTdDXFx1QzU5OFxcdUM1QjRcXHVDNUQwXFx1QzVFQ1xcdUM2MDhcXHVDNjI0XFx1QzY0MCIKKyAgICAgICAgICAgICsgIlxcdUM2NUNcXHVDNjc4XFx1QzY5NFxcdUM2QjBcXHVDNkNDXFx1QzZFOFxcdUM3MDRcXHVDNzIwXFx1QzczQyIKKyAgICAgICAgICAgICsgIlxcdUM3NThcXHVDNzc0XFx1Qzc5MFxcdUM3QUNcXHVDN0M4XFx1QzdFNFxcdUM4MDBcXHVDODFDXFx1QzgzOCIKKyAgICAgICAgICAgICsgIlxcdUM4NTRcXHVDODcwXFx1Qzg4Q1xcdUM4QThcXHVDOEM0XFx1QzhFMFxcdUM4RkNcXHVDOTE4XFx1QzkzNCIKKyAgICAgICAgICAgICsgIlxcdUM5NTBcXHVDOTZDXFx1Qzk4OFxcdUM5QTRcXHVDOUMwXFx1QzlEQ1xcdUM5RjhcXHVDQTE0XFx1Q0EzMCIKKyAgICAgICAgICAgICsgIlxcdUNBNENcXHVDQTY4XFx1Q0E4NFxcdUNBQTBcXHVDQUJDXFx1Q0FEOFxcdUNBRjRcXHVDQjEwXFx1Q0IyQyIKKyAgICAgICAgICAgICsgIlxcdUNCNDhcXHVDQjY0XFx1Q0I4MFxcdUNCOUNcXHVDQkI4XFx1Q0JENFxcdUNCRjBcXHVDQzBDXFx1Q0MyOCIKKyAgICAgICAgICAgICsgIlxcdUNDNDRcXHVDQzYwXFx1Q0M3Q1xcdUNDOThcXHVDQ0I0XFx1Q0NEMFxcdUNDRUNcXHVDRDA4XFx1Q0QyNCIKKyAgICAgICAgICAgICsgIlxcdUNENDBcXHVDRDVDXFx1Q0Q3OFxcdUNEOTRcXHVDREIwXFx1Q0RDQ1xcdUNERThcXHVDRTA0XFx1Q0UyMCIKKyAgICAgICAgICAgICsgIlxcdUNFM0NcXHVDRTU4XFx1Q0U3NFxcdUNFOTBcXHVDRUFDXFx1Q0VDOFxcdUNFRTRcXHVDRjAwXFx1Q0YxQyIKKyAgICAgICAgICAgICsgIlxcdUNGMzhcXHVDRjU0XFx1Q0Y3MFxcdUNGOENcXHVDRkE4XFx1Q0ZDNFxcdUNGRTBcXHVDRkZDXFx1RDAxOCIKKyAgICAgICAgICAgICsgIlxcdUQwMzRcXHVEMDUwXFx1RDA2Q1xcdUQwODhcXHVEMEE0XFx1RDBDMFxcdUQwRENcXHVEMEY4XFx1RDExNCIKKyAgICAgICAgICAgICsgIlxcdUQxMzBcXHVEMTRDXFx1RDE2OFxcdUQxODRcXHVEMUEwXFx1RDFCQ1xcdUQxRDhcXHVEMUY0XFx1RDIxMCIKKyAgICAgICAgICAgICsgIlxcdUQyMkNcXHVEMjQ4XFx1RDI2NFxcdUQyODBcXHVEMjlDXFx1RDJCOFxcdUQyRDRcXHVEMkYwXFx1RDMwQyIKKyAgICAgICAgICAgICsgIlxcdUQzMjhcXHVEMzQ0XFx1RDM2MFxcdUQzN0NcXHVEMzk4XFx1RDNCNFxcdUQzRDBcXHVEM0VDXFx1RDQwOCIKKyAgICAgICAgICAgICsgIlxcdUQ0MjRcXHVENDQwXFx1RDQ1Q1xcdUQ0NzhcXHVENDk0XFx1RDRCMFxcdUQ0Q0NcXHVENEU4XFx1RDUwNCIKKyAgICAgICAgICAgICsgIlxcdUQ1MjBcXHVENTNDXFx1RDU1OFxcdUQ1NzRcXHVENTkwXFx1RDVBQ1xcdUQ1QzhcXHVENUU0XFx1RDYwMCIKKyAgICAgICAgICAgICsgIlxcdUQ2MUNcXHVENjM4XFx1RDY1NFxcdUQ2NzBcXHVENjhDXFx1RDZBOFxcdUQ2QzRcXHVENkUwXFx1RDZGQyIKKyAgICAgICAgICAgICsgIlxcdUQ3MThcXHVENzM0XFx1RDc1MFxcdUQ3NkNcXHVENzg4XFx1RjkwMC1cXHVGQTBEXFx1RkExMFxcdUZBMTIiCisgICAgICAgICAgICArICJcXHVGQTE1LVxcdUZBMUVcXHVGQTIwXFx1RkEyMlxcdUZBMjUtXFx1RkEyNlxcdUZBMkEtXFx1RkEyRCIKKyAgICAgICAgICAgICsgIlxcdUZBMzAtXFx1RkE2QVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMUQtXFx1RkIzNiIKKyAgICAgICAgICAgICsgIlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwLVxcdUZCNDFcXHVGQjQzLVxcdUZCNDRcXHVGQjQ2LSIKKyAgICAgICAgICAgICsgIlxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLSIKKyAgICAgICAgICAgICsgIlxcdUZERkNcXHVGRTIwLVxcdUZFMjNcXHVGRTMwLVxcdUZFNDRcXHVGRTQ5LVxcdUZFNTJcXHVGRTU0LSIKKyAgICAgICAgICAgICsgIlxcdUZFNjZcXHVGRTY4LVxcdUZFNkJcXHVGRTcwLVxcdUZFNzJcXHVGRTc0XFx1RkU3Ni1cXHVGRUZDIgorICAgICAgICAgICAgKyAiXFx1RkYwMS1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3IgorICAgICAgICAgICAgKyAiXFx1RkZEQS1cXHVGRkRDXFx1RkZFMC1cXHVGRkU2XFx1RkZFOC1cXHVGRkVFXFxVMDAwMUQxNUUtXFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQxNjlcXFUwMDAxRDE2RC1cXFUwMDAxRDE3MlxcVTAwMDFEMTdCLVxcVTAwMDFEMTgyXFxVMDAwMUQxODUtIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQxOEJcXFUwMDAxRDFBQS1cXFUwMDAxRDFBRFxcVTAwMDFEMUJCLVxcVTAwMDFEMUMwXFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ0MDAtXFxVMDAwMUQ0NTRcXFUwMDAxRDQ1Ni1cXFUwMDAxRDQ5Q1xcVTAwMDFENDlFLVxcVTAwMDFENDlGIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ0QTJcXFUwMDAxRDRBNS1cXFUwMDAxRDRBNlxcVTAwMDFENEE5LVxcVTAwMDFENEFDXFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ0QUUtXFxVMDAwMUQ0QjlcXFUwMDAxRDRCQlxcVTAwMDFENEJELVxcVTAwMDFENEMwXFxVMDAwMUQ0QzItIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ0QzNcXFUwMDAxRDRDNS1cXFUwMDAxRDUwNVxcVTAwMDFENTA3LVxcVTAwMDFENTBBXFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ1MEQtXFxVMDAwMUQ1MTRcXFUwMDAxRDUxNi1cXFUwMDAxRDUxQ1xcVTAwMDFENTFFLVxcVTAwMDFENTM5IgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ1M0ItXFxVMDAwMUQ1M0VcXFUwMDAxRDU0MC1cXFUwMDAxRDU0NFxcVTAwMDFENTQ2XFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ1NEEtXFxVMDAwMUQ1NTBcXFUwMDAxRDU1Mi1cXFUwMDAxRDZBM1xcVTAwMDFENkE4LVxcVTAwMDFEN0M5IgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ3Q0UtXFxVMDAwMUQ3RkZcXFUwMDAyRjgwMC1cXFUwMDAyRkExRF0iLCBmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBza2lwcGFibGVzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RTa2lwcGFibGUoKSB7CisgICAgICAgVW5pY29kZVNldCBzdGFydHMsIGRpZmY7CisgICAgICAgVW5pY29kZVNldFtdIHNraXBTZXRzID0gbmV3IFVuaWNvZGVTZXRbXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVW5pY29kZVNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVbmljb2RlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVuaWNvZGVTZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVW5pY29kZVNldCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgVW5pY29kZVNldFtdIGV4cGVjdFNldHMgPSBuZXcgVW5pY29kZVNldFtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVbmljb2RlU2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVuaWNvZGVTZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVW5pY29kZVNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVbmljb2RlU2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICBTdHJpbmdCdWZmZXIgcywgcGF0dGVybjsKKyAgICAgICBpbnQgc3RhcnQsIGxpbWl0LCByYW5nZVN0YXJ0LCByYW5nZUVuZDsKKyAgICAgICBpbnQgaSwgcmFuZ2UsIGNvdW50OworICAgICAgIHN0YXJ0cyA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgCisgICAgICAgCisgICAgICAgLyogYnVpbGQgTkYqU2tpcHBhYmxlIHNldHMgZnJvbSBydW50aW1lIGRhdGEgKi8KKyAgICAgICBOb3JtYWxpemVySW1wbC5hZGRQcm9wZXJ0eVN0YXJ0cyhzdGFydHMpOworICAgICAgIGNvdW50PXN0YXJ0cy5nZXRSYW5nZUNvdW50KCk7CisgICAKKyAgICAgICBzdGFydD1saW1pdD0wOworICAgICAgIHJhbmdlU3RhcnQ9cmFuZ2VFbmQ9MDsKKyAgICAgICByYW5nZT0wOworICAgICAgIGZvcig7OykgeworICAgICAgICAgICBpZihzdGFydDxsaW1pdCkgeworICAgICAgICAgICAgICAgLyogZ2V0IHByb3BlcnRpZXMgZm9yIHN0YXJ0IGFuZCBhcHBseSB0aGVtIHRvIFtzdGFydC4ubGltaXRbICovCisgICAgICAgICAgICAgICBpZihOb3JtYWxpemVyLmlzTkZTa2lwcGFibGUoc3RhcnQsIE5vcm1hbGl6ZXIuTkZEKSkgeworICAgICAgICAgICAgICAgICAgIHNraXBTZXRzW0RdLmFkZChzdGFydCwgbGltaXQtMSk7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBpZihOb3JtYWxpemVyLmlzTkZTa2lwcGFibGUoc3RhcnQsIE5vcm1hbGl6ZXIuTkZLRCkpIHsKKyAgICAgICAgICAgICAgICAgICBza2lwU2V0c1tLRF0uYWRkKHN0YXJ0LCBsaW1pdC0xKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmKE5vcm1hbGl6ZXIuaXNORlNraXBwYWJsZShzdGFydCwgTm9ybWFsaXplci5ORkMpKSB7CisgICAgICAgICAgICAgICAgICAgc2tpcFNldHNbQ10uYWRkKHN0YXJ0LCBsaW1pdC0xKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmKE5vcm1hbGl6ZXIuaXNORlNraXBwYWJsZShzdGFydCwgTm9ybWFsaXplci5ORktDKSkgeworICAgICAgICAgICAgICAgICAgIHNraXBTZXRzW0tDXS5hZGQoc3RhcnQsIGxpbWl0LTEpOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9CisgICAKKyAgICAgICAgICAgLyogZ28gdG8gbmV4dCByYW5nZSBvZiBzYW1lIHByb3BlcnRpZXMgKi8KKyAgICAgICAgICAgc3RhcnQ9bGltaXQ7CisgICAgICAgICAgIGlmKCsrbGltaXQ+cmFuZ2VFbmQpIHsKKyAgICAgICAgICAgICAgIGlmKHJhbmdlPGNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgbGltaXQ9cmFuZ2VTdGFydD1zdGFydHMuZ2V0UmFuZ2VTdGFydChyYW5nZSk7CisgICAgICAgICAgICAgICAgICAgcmFuZ2VFbmQ9c3RhcnRzLmdldFJhbmdlRW5kKHJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICArK3JhbmdlOworICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJhbmdlPT1jb3VudCkgeworICAgICAgICAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgcmFuZ2UgdG8gY29tcGxldGUgdGhlIFVuaWNvZGUgY29kZSBzcGFjZSAqLworICAgICAgICAgICAgICAgICAgIGxpbWl0PXJhbmdlU3RhcnQ9cmFuZ2VFbmQ9MHgxMTAwMDA7CisgICAgICAgICAgICAgICAgICAgKytyYW5nZTsKKyAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICAKKyAgICAgICBleHBlY3RTZXRzID0gaW5pdFNraXBwYWJsZXMoZXhwZWN0U2V0cyk7CisgICAgICAgZm9yKGk9MDsgaTxleHBlY3RTZXRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgIGlmKCFza2lwU2V0c1tpXS5lcXVhbHMoZXhwZWN0U2V0c1tpXSkpIHsKKyAgICAgICAgICAgICAgIGVycmxuKCJlcnJvcjogVGVzdFNraXBwYWJsZSBza2lwU2V0c1siK2krIl0hPWV4cGVjdGVkU2V0c1siK2krIl1cbiIrCisgICAgICAgICAgICAgICAgICAgICAibWF5IG5lZWQgdG8gdXBkYXRlIGhhcmRjb2RlZCBVbmljb2RlU2V0IHBhdHRlcm5zIGluIGNvbS5pYm0uaWN1LmRldi50ZXN0Lm5vcm1hbGl6ZXIuQmFzaWNUZXN0LmphdmFcbiIpOworICAgCisgICAgICAgICAgICAgICBzPW5ldyBTdHJpbmdCdWZmZXIoInNraXAtZXhwZWN0PSIpOworICAgICAgICAgICAgICAgcGF0dGVybiA9IG5ldyBTdHJpbmdCdWZmZXIoKGRpZmY9c2tpcFNldHNbaV0pLnJlbW92ZUFsbChleHBlY3RTZXRzW2ldKS50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICAgICAgICAgcy5hcHBlbmQocGF0dGVybik7CisgICAKKyAgICAgICAgICAgICAgIHBhdHRlcm4uZGVsZXRlKDAscGF0dGVybi5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG5cbmV4cGVjdC1za2lwPSIpOworICAgICAgICAgICAgICAgcGF0dGVybiA9IG5ldyBTdHJpbmdCdWZmZXIoKGRpZmY9ZXhwZWN0U2V0c1tpXSkucmVtb3ZlQWxsKHNraXBTZXRzW2ldKS50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICAgICAgICAgcy5hcHBlbmQocGF0dGVybik7CisgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG5cbiIpOworICAgCisgICAgICAgICAgICAgICBlcnJsbihzLnRvU3RyaW5nKCkpOworICAgICAgICAgICB9CisgICAgICAgfQorICAgICB9CisgICAgIAorICAgICBwdWJsaWMgdm9pZCBUZXN0QnVnSjIwNjgoKXsKKyAgICAgICAgU3RyaW5nIHNhbXBsZSA9ICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGRvZyI7CisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0ID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHNhbXBsZSk7CisgICAgICAgIE5vcm1hbGl6ZXIgbm9ybSA9IG5ldyBOb3JtYWxpemVyKHRleHQsTm9ybWFsaXplci5ORkMpOworICAgICAgICB0ZXh0LnNldEluZGV4KDQpOworICAgICAgICBpZih0ZXh0LmN1cnJlbnQoKSA9PSBub3JtLmN1cnJlbnQoKSl7CisgICAgICAgICAgICBlcnJsbigiTm9ybWFsaXplciBpcyBub3QgY2xvbmluZyB0aGUgVUNoYXJhY3Rlckl0ZXJhdG9yIik7CisgICAgICAgIH0KKyAgICAgfSAgIAorICAgICAgICAKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL0NvbmZvcm1hbmNlVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L25vcm1hbGl6ZXIvQ29uZm9ybWFuY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODcxYjFmMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL0NvbmZvcm1hbmNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDY5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvbm9ybWFsaXplci9Db25mb3JtYW5jZVRlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMS8yMiAwMDoyMzoxOSAkIAorICogJFJldmlzaW9uOiAxLjExICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lm5vcm1hbGl6ZXI7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0VXRpbDsKK2ltcG9ydCBqYXZhLnRleHQuU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKKworcHVibGljIGNsYXNzIENvbmZvcm1hbmNlVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKworICAgIE5vcm1hbGl6ZXIgbm9ybWFsaXplcjsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgQ29uZm9ybWFuY2VUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQ29uZm9ybWFuY2VUZXN0KCkgeworICAgICAgICAvLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBzdHJpbmcgYW5kIG1vZGUgYXJlOyB3ZSdsbCBjaGFuZ2UKKyAgICAgICAgLy8gdGhlbSBsYXRlciBhcyBuZWVkZWQuCisgICAgICAgIG5vcm1hbGl6ZXIgPSBuZXcgTm9ybWFsaXplcigiIiwgTm9ybWFsaXplci5ORkMpOworICAgIH0KKyAgICAvLyBtb3JlIGludGVyZXN0aW5nIGNvbmZvcm1hbmNlIHRlc3QgY2FzZXMsIG5vdCBpbiB0aGUgdW5pY29kZS5vcmcgTm9ybWFsaXphdGlvblRlc3QudHh0CisJc3RhdGljICBTdHJpbmdbXSBtb3JlQ2FzZXMgPXsKKwkgICAgLy8gTWFya3VzIDIwMDFhdWczMAorCSAgICAiMDA2MSAwMzMyIDAzMDg7MDBFNCAwMzMyOzAwNjEgMDMzMiAwMzA4OzAwRTQgMDMzMjswMDYxIDAzMzIgMDMwODsgIyBNYXJrdXMgMCIsCisJCisJICAgIC8vIE1hcmt1cyAyMDAxb2N0MjYgLSB0ZXN0IGVkZ2UgY2FzZSBmb3IgaXRlcmF0aW9uOiBVKzBmNzMuY2M9PTAgYnV0IGRlY29tcG9zaXRpb24ubGVhZC5jYz09MTI5CisJICAgICIwMDYxIDAzMDEgMEY3MzswMEUxIDBGNzEgMEY3MjswMDYxIDBGNzEgMEY3MiAwMzAxOzAwRTEgMEY3MSAwRjcyOzAwNjEgMEY3MSAwRjcyIDAzMDE7ICMgTWFya3VzIDEiCisJfTsKKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGNvbmZvcm1hbmNlIG9mIE5ld05vcm1hbGl6ZXIgdG8KKyAgICAgKiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjE1L2NvbmZvcm1hbmNlL0RyYWZ0LVRlc3RTdWl0ZS50eHQuCisgICAgICogVGhpcyBmaWxlIG11c3QgYmUgbG9jYXRlZCBhdCB0aGUgcGF0aCBzcGVjaWZpZWQgYXMgVEVTVF9TVUlURV9GSUxFLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDb25mb3JtYW5jZSgpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICBTdHJpbmdbXSBmaWVsZHMgPSBuZXcgU3RyaW5nWzVdOworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpbnQgcGFzc0NvdW50ID0gMDsKKyAgICAgICAgaW50IGZhaWxDb3VudCA9IDA7CisgICAgICAgIFVuaWNvZGVTZXQgb3RoZXIgPSBuZXcgVW5pY29kZVNldCgwLCAweDEwZmZmZik7CisgICAgICAgIGludCBjPTA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnB1dCA9IFRlc3RVdGlsLmdldERhdGFSZWFkZXIoInVuaWNvZGUvTm9ybWFsaXphdGlvblRlc3QudHh0Iik7CisgICAgICAgICAgICBmb3IgKGludCBjb3VudCA9IDA7OysrY291bnQpIHsKKyAgICAgICAgICAgICAgICBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKKyAgICAgICAgICAgICAgICBpZiAobGluZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vcmVhZCB0aGUgZXh0cmEgdGVzdCBjYXNlcworCSAgICAgICAgICAgICAgICBpZihjb3VudCA+IG1vcmVDYXNlcy5sZW5ndGgpIHsKKwkJICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKKwkJICAgICAgICAgICAgfSBlbHNlIGlmKGNvdW50ID09IG1vcmVDYXNlcy5sZW5ndGgpIHsKKwkJICAgICAgICAgICAgICAgIC8vIGFsbCBkb25lCisJCSAgICAgICAgICAgICAgICBicmVhazsKKwkJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbW9yZUNhc2VzW2NvdW50KytdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGluZS5sZW5ndGgoKSA9PSAwKSBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEV4cGVjdCA1IGNvbHVtbnMgb2YgdGhpcyBmb3JtYXQ6CisgICAgICAgICAgICAgICAgLy8gMUUwQzsxRTBDOzAwNDQgMDMyMzsxRTBDOzAwNDQgMDMyMzsgIyA8Y29tbWVudHM+CisKKyAgICAgICAgICAgICAgICAvLyBTa2lwIGNvbW1lbnRzCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09ICcjJyAgfHwgbGluZS5jaGFyQXQoMCk9PSdAJykgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBQYXJzZSBvdXQgdGhlIGZpZWxkcworICAgICAgICAgICAgICAgIGhleHNwbGl0KGxpbmUsICc7JywgZmllbGRzLCBidWYpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBhIHNpbmdsZSBjb2RlIHBvaW50IGZyb20gdGhlICJvdGhlciIgVW5pY29kZVNldAorCQkgICAgICAgIGlmKGZpZWxkc1swXS5sZW5ndGgoKT09VVRGMTYubW92ZUNvZGVQb2ludE9mZnNldChmaWVsZHNbMF0sMCwgMSkpIHsKKwkJICAgICAgICAgICAgYz1VVEYxNi5jaGFyQXQoZmllbGRzWzBdLDApOyAKKwkJICAgICAgICAgICAgaWYoMHhhYzIwPD1jICYmIGM8PTB4ZDczZikgeworCQkgICAgICAgICAgICAgICAgLy8gbm90IGFuIGV4aGF1c3RpdmUgdGVzdCBydW46IHNraXAgbW9zdCBIYW5ndWwgc3lsbGFibGVzCisJCSAgICAgICAgICAgICAgICBpZihjPT0weGFjMjApIHsKKwkJICAgICAgICAgICAgICAgICAgICBvdGhlci5yZW1vdmUoMHhhYzIwLCAweGQ3M2YpOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgY29udGludWU7CisJCSAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgb3RoZXIucmVtb3ZlKGMpOworCQkgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tDb25mb3JtYW5jZShmaWVsZHMsIGxpbmUpKSB7CisgICAgICAgICAgICAgICAgICAgICsrcGFzc0NvdW50OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICsrZmFpbENvdW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKGNvdW50ICUgMTAwMCkgPT0gOTk5KSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJMaW5lICIgKyAoY291bnQrMSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaW5wdXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleDIpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ291bGRuJ3QgcmVhZCBmaWxlICIKKyAgICAgICAgICAgICAgKyBleC5nZXRDbGFzcygpLmdldE5hbWUoKSArICIgIiArIGV4LmdldE1lc3NhZ2UoKQorICAgICAgICAgICAgICArICIgbGluZSA9ICIgKyBsaW5lCisgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFpbENvdW50ICE9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJUb3RhbDogIiArIGZhaWxDb3VudCArICIgbGluZXMgZmFpbGVkLCAiICsKKyAgICAgICAgICAgICAgICAgIHBhc3NDb3VudCArICIgbGluZXMgcGFzc2VkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiVG90YWw6ICIgKyBwYXNzQ291bnQgKyAiIGxpbmVzIHBhc3NlZCIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFZlcmlmeSB0aGUgY29uZm9ybWFuY2Ugb2YgdGhlIGdpdmVuIGxpbmUgb2YgdGhlIFVuaWNvZGUKKyAgICAgKiBub3JtYWxpemF0aW9uIChVVFIgMTUpIHRlc3Qgc3VpdGUgZmlsZS4gIEZvciBlYWNoIGxpbmUsCisgICAgICogdGhlcmUgYXJlIGZpdmUgY29sdW1ucywgY29ycmVzcG9uZGluZyB0byBmaWVsZFswXS4uZmllbGRbNF0uCisgICAgICoKKyAgICAgKiBUaGUgZm9sbG93aW5nIGludmFyaWFudHMgbXVzdCBiZSB0cnVlIGZvciBhbGwgY29uZm9ybWFudCBpbXBsZW1lbnRhdGlvbnMKKyAgICAgKiAgYzIgPT0gTkZDKGMxKSA9PSBORkMoYzIpID09IE5GQyhjMykKKyAgICAgKiAgYzMgPT0gTkZEKGMxKSA9PSBORkQoYzIpID09IE5GRChjMykKKyAgICAgKiAgYzQgPT0gTkZLQyhjMSkgPT0gTkZLQyhjMikgPT0gTkZLQyhjMykgPT0gTkZLQyhjNCkgPT0gTkZLQyhjNSkKKyAgICAgKiAgYzUgPT0gTkZLRChjMSkgPT0gTkZLRChjMikgPT0gTkZLRChjMykgPT0gTkZLRChjNCkgPT0gTkZLRChjNSkKKyAgICAgKgorICAgICAqIEBwYXJhbSBmaWVsZCB0aGUgNSBjb2x1bW5zCisgICAgICogQHBhcmFtIGxpbmUgdGhlIHNvdXJjZSBsaW5lIGZyb20gdGhlIHRlc3Qgc3VpdGUgZmlsZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBwYXNzZXMKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tDb25mb3JtYW5jZShTdHJpbmdbXSBmaWVsZCwgU3RyaW5nIGxpbmUpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIGJvb2xlYW4gcGFzcyA9IHRydWU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgU3RyaW5nIG91dCxmY2Q7CisgICAgICAgIGludCBpPTA7CisgICAgICAgIGZvciAoaT0wOyBpPDU7ICsraSkgeworICAgICAgICAgICAgaWYgKGk8MykgeworICAgICAgICAgICAgICAgIG91dCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGZpZWxkW2ldLCBOb3JtYWxpemVyLk5GQyk7CisgICAgICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiQyIsIGZpZWxkW2ldLCBvdXQsIGZpZWxkWzFdLCAiYzIhPUMoYyIgKyAoaSsxKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0ID0gaXRlcmF0aXZlTm9ybShmaWVsZFtpXSwgTm9ybWFsaXplci5ORkMsIGJ1ZiwgKzEpOworICAgICAgICAgICAgICAgIHBhc3MgJj0gYXNzZXJ0RXF1YWwoIkMoKzEpIiwgZmllbGRbaV0sIG91dCwgZmllbGRbMV0sICJjMiE9QyhjIiArIChpKzEpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXQgPSBpdGVyYXRpdmVOb3JtKGZpZWxkW2ldLCBOb3JtYWxpemVyLk5GQywgYnVmLCAtMSk7CisgICAgICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiQygtMSkiLCBmaWVsZFtpXSwgb3V0LCBmaWVsZFsxXSwgImMyIT1DKGMiICsgKGkrMSkpOworCisgICAgICAgICAgICAgICAgb3V0ID0gaXRlcmF0aXZlTm9ybShuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoZmllbGRbaV0pLCBOb3JtYWxpemVyLk5GQywgYnVmLCArMSk7CisgICAgICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiQygrMSkiLCBmaWVsZFtpXSwgb3V0LCBmaWVsZFsxXSwgImMyIT1DKGMiICsgKGkrMSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0obmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKGZpZWxkW2ldKSwgTm9ybWFsaXplci5ORkMsIGJ1ZiwgLTEpOworICAgICAgICAgICAgICAgIHBhc3MgJj0gYXNzZXJ0RXF1YWwoIkMoLTEpIiwgZmllbGRbaV0sIG91dCwgZmllbGRbMV0sICJjMiE9QyhjIiArIChpKzEpKTsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0ID0gTm9ybWFsaXplci5ub3JtYWxpemUoZmllbGRbaV0sIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICBwYXNzICY9IGFzc2VydEVxdWFsKCJEIiwgZmllbGRbaV0sIG91dCwgZmllbGRbMl0sICJjMyE9RChjIiArIChpKzEpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXQgPSBpdGVyYXRpdmVOb3JtKGZpZWxkW2ldLCBOb3JtYWxpemVyLk5GRCwgYnVmLCArMSk7CisgICAgICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiRCgrMSkiLCBmaWVsZFtpXSwgb3V0LCBmaWVsZFsyXSwgImMzIT1EKGMiICsgKGkrMSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0oZmllbGRbaV0sIE5vcm1hbGl6ZXIuTkZELCBidWYsIC0xKTsKKyAgICAgICAgICAgICAgICBwYXNzICY9IGFzc2VydEVxdWFsKCJEKC0xKSIsIGZpZWxkW2ldLCBvdXQsIGZpZWxkWzJdLCAiYzMhPUQoYyIgKyAoaSsxKSk7CisKKyAgICAgICAgICAgICAgICBvdXQgPSBpdGVyYXRpdmVOb3JtKG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihmaWVsZFtpXSksIE5vcm1hbGl6ZXIuTkZELCBidWYsICsxKTsKKyAgICAgICAgICAgICAgICBwYXNzICY9IGFzc2VydEVxdWFsKCJEKCsxKSIsIGZpZWxkW2ldLCBvdXQsIGZpZWxkWzJdLCAiYzMhPUQoYyIgKyAoaSsxKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0ID0gaXRlcmF0aXZlTm9ybShuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoZmllbGRbaV0pLCBOb3JtYWxpemVyLk5GRCwgYnVmLCAtMSk7CisgICAgICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiRCgtMSkiLCBmaWVsZFtpXSwgb3V0LCBmaWVsZFsyXSwgImMzIT1EKGMiICsgKGkrMSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0ID0gTm9ybWFsaXplci5ub3JtYWxpemUoZmllbGRbaV0sIE5vcm1hbGl6ZXIuTkZLQyk7CisgICAgICAgICAgICBwYXNzICY9IGFzc2VydEVxdWFsKCJLQyIsIGZpZWxkW2ldLCBvdXQsIGZpZWxkWzNdLCAiYzQhPUtDKGMiICsgKGkrMSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPSBpdGVyYXRpdmVOb3JtKGZpZWxkW2ldLCBOb3JtYWxpemVyLk5GS0MsIGJ1ZiwgKzEpOworICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiS0QoKzEpIiwgZmllbGRbaV0sIG91dCwgZmllbGRbM10sICJjNCE9S0MoYyIgKyAoaSsxKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0oZmllbGRbaV0sIE5vcm1hbGl6ZXIuTkZLQywgYnVmLCAtMSk7CisgICAgICAgICAgICBwYXNzICY9IGFzc2VydEVxdWFsKCJLRCgtMSkiLCBmaWVsZFtpXSwgb3V0LCBmaWVsZFszXSwgImM0IT1LQyhjIiArIChpKzEpKTsKKworICAgICAgICAgICAgb3V0ID0gaXRlcmF0aXZlTm9ybShuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoZmllbGRbaV0pLCBOb3JtYWxpemVyLk5GS0MsIGJ1ZiwgKzEpOworICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiS0QoKzEpIiwgZmllbGRbaV0sIG91dCwgZmllbGRbM10sICJjNCE9S0MoYyIgKyAoaSsxKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0obmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKGZpZWxkW2ldKSwgTm9ybWFsaXplci5ORktDLCBidWYsIC0xKTsKKyAgICAgICAgICAgIHBhc3MgJj0gYXNzZXJ0RXF1YWwoIktEKC0xKSIsIGZpZWxkW2ldLCBvdXQsIGZpZWxkWzNdLCAiYzQhPUtDKGMiICsgKGkrMSkpOworICAgICAgICAgICAgICAKKworICAgICAgICAgICAgb3V0ID0gTm9ybWFsaXplci5ub3JtYWxpemUoZmllbGRbaV0sIE5vcm1hbGl6ZXIuTkZLRCk7CisgICAgICAgICAgICBwYXNzICY9IGFzc2VydEVxdWFsKCJLRCIsIGZpZWxkW2ldLCBvdXQsIGZpZWxkWzRdLCAiYzUhPUtEKGMiICsgKGkrMSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPSBpdGVyYXRpdmVOb3JtKGZpZWxkW2ldLCBOb3JtYWxpemVyLk5GS0QsIGJ1ZiwgKzEpOworICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiS0QoKzEpIiwgZmllbGRbaV0sIG91dCwgZmllbGRbNF0sICJjNSE9S0QoYyIgKyAoaSsxKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0oZmllbGRbaV0sIE5vcm1hbGl6ZXIuTkZLRCwgYnVmLCAtMSk7CisgICAgICAgICAgICBwYXNzICY9IGFzc2VydEVxdWFsKCJLRCgtMSkiLCBmaWVsZFtpXSwgb3V0LCBmaWVsZFs0XSwgImM1IT1LRChjIiArIChpKzEpKTsKKyAgICAgICAgIAorICAgICAgICAgICAgb3V0ID0gaXRlcmF0aXZlTm9ybShuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoZmllbGRbaV0pLCBOb3JtYWxpemVyLk5GS0QsIGJ1ZiwgKzEpOworICAgICAgICAgICAgcGFzcyAmPSBhc3NlcnRFcXVhbCgiS0QoKzEpIiwgZmllbGRbaV0sIG91dCwgZmllbGRbNF0sICJjNSE9S0QoYyIgKyAoaSsxKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0obmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKGZpZWxkW2ldKSwgTm9ybWFsaXplci5ORktELCBidWYsIC0xKTsKKyAgICAgICAgICAgIHBhc3MgJj0gYXNzZXJ0RXF1YWwoIktEKC0xKSIsIGZpZWxkW2ldLCBvdXQsIGZpZWxkWzRdLCAiYzUhPUtEKGMiICsgKGkrMSkpOworICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBjb21wYXJlKGZpZWxkWzFdLGZpZWxkWzJdKTsKKyAgICAgICAgY29tcGFyZShmaWVsZFswXSxmaWVsZFsxXSk7CisgICAgICAgICAvLyB0ZXN0IHF1aWNrIGNoZWNrcworCSAgICBpZihOb3JtYWxpemVyLk5PID09IE5vcm1hbGl6ZXIucXVpY2tDaGVjayhmaWVsZFsxXSwgTm9ybWFsaXplci5ORkMpKSB7CisJICAgICAgICBlcnJsbigiTm9ybWFsaXplciBlcnJvcjogcXVpY2tDaGVjayhORkMocyksIE5ld05vcm1hbGl6ZXIuTkZDKSBpcyBOZXdOb3JtYWxpemVyLk5PIik7CisJICAgICAgICBwYXNzID0gZmFsc2U7CisJICAgIH0KKwkgICAgaWYoTm9ybWFsaXplci5OTyA9PSBOb3JtYWxpemVyLnF1aWNrQ2hlY2soZmllbGRbMl0sIE5vcm1hbGl6ZXIuTkZEKSkgeworCSAgICAgICAgZXJybG4oIk5vcm1hbGl6ZXIgZXJyb3I6IHF1aWNrQ2hlY2soTkZEKHMpLCBOZXdOb3JtYWxpemVyLk5GRCkgaXMgTmV3Tm9ybWFsaXplci5OTyIpOworCSAgICAgICAgcGFzcyA9IGZhbHNlOworCSAgICB9CisJICAgIGlmKE5vcm1hbGl6ZXIuTk8gPT0gTm9ybWFsaXplci5xdWlja0NoZWNrKGZpZWxkWzNdLCBOb3JtYWxpemVyLk5GS0MpKSB7CisJICAgICAgICBlcnJsbigiTm9ybWFsaXplciBlcnJvcjogcXVpY2tDaGVjayhORktDKHMpLCBOZXdOb3JtYWxpemVyLk5GS0MpIGlzIE5ld05vcm1hbGl6ZXIuTk8iKTsKKwkgICAgICAgIHBhc3MgPSBmYWxzZTsKKwkgICAgfQorCSAgICBpZihOb3JtYWxpemVyLk5PID09IE5vcm1hbGl6ZXIucXVpY2tDaGVjayhmaWVsZFs0XSwgTm9ybWFsaXplci5ORktEKSkgeworCSAgICAgICAgZXJybG4oIk5vcm1hbGl6ZXIgZXJyb3I6IHF1aWNrQ2hlY2soTkZLRChzKSwgTmV3Tm9ybWFsaXplci5ORktEKSBpcyBOZXdOb3JtYWxpemVyLk5PIik7CisJICAgICAgICBwYXNzID0gZmFsc2U7CisJICAgIH0KKwkKKyAgICAgICAgaWYoIU5vcm1hbGl6ZXIuaXNOb3JtYWxpemVkKGZpZWxkWzFdLCBOb3JtYWxpemVyLk5GQykpIHsKKyAgICAgICAgICAgIGVycmxuKCJOb3JtYWxpemVyIGVycm9yOiBpc05vcm1hbGl6ZWQoTkZDKHMpLCBOZXdOb3JtYWxpemVyLk5GQykgaXMgZmFsc2UiKTsKKyAgICAgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZighZmllbGRbMF0uZXF1YWxzKGZpZWxkWzFdKSAmJiBOb3JtYWxpemVyLmlzTm9ybWFsaXplZChmaWVsZFswXSwgTm9ybWFsaXplci5ORkMpKSB7CisgICAgICAgICAgICBlcnJsbigiTm9ybWFsaXplciBlcnJvcjogaXNOb3JtYWxpemVkKHMsIE5ld05vcm1hbGl6ZXIuTkZDKSBpcyBUUlVFIik7CisgICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYoIU5vcm1hbGl6ZXIuaXNOb3JtYWxpemVkKGZpZWxkWzNdLCBOb3JtYWxpemVyLk5GS0MpKSB7CisgICAgICAgICAgICBlcnJsbigiTm9ybWFsaXplciBlcnJvcjogaXNOb3JtYWxpemVkKE5GS0MocyksIE5ld05vcm1hbGl6ZXIuTkZLQykgaXMgZmFsc2UiKTsKKyAgICAgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZighZmllbGRbMF0uZXF1YWxzKGZpZWxkWzNdKSAmJiBOb3JtYWxpemVyLmlzTm9ybWFsaXplZChmaWVsZFswXSwgTm9ybWFsaXplci5ORktDKSkgeworICAgICAgICAgICAgZXJybG4oIk5vcm1hbGl6ZXIgZXJyb3I6IGlzTm9ybWFsaXplZChzLCBOZXdOb3JtYWxpemVyLk5GS0MpIGlzIFRSVUUiKTsKKyAgICAgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgfQorCSAgICAvLyB0ZXN0IGFwaSB0aGF0IHRha2VzIGEgY2hhcltdCisgICAgICAgIGlmKCFOb3JtYWxpemVyLmlzTm9ybWFsaXplZChmaWVsZFsxXS50b0NoYXJBcnJheSgpLDAsZmllbGRbMV0ubGVuZ3RoKCksIE5vcm1hbGl6ZXIuTkZDKSkgeworICAgICAgICAgICAgZXJybG4oIk5vcm1hbGl6ZXIgZXJyb3I6IGlzTm9ybWFsaXplZChORkMocyksIE5ld05vcm1hbGl6ZXIuTkZDKSBpcyBmYWxzZSIpOworICAgICAgICAgICAgcGFzcyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIHRlc3QgYXBpIHRoYXQgdGFrZXMgYSBjb2RlcG9pbnQKKyAgICAgICAgaWYoIU5vcm1hbGl6ZXIuaXNOb3JtYWxpemVkKFVURjE2LmNoYXJBdChmaWVsZFsxXSwwKSwgTm9ybWFsaXplci5ORkMpKSB7CisgICAgICAgICAgICBlcnJsbigiTm9ybWFsaXplciBlcnJvcjogaXNOb3JtYWxpemVkKE5GQyhzKSwgTmV3Tm9ybWFsaXplci5ORkMpIGlzIGZhbHNlIik7CisgICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgIH0KKwkgICAgLy8gdGVzdCBGQ0QgcXVpY2sgY2hlY2sgYW5kICJtYWtlRkNEIgorICAgICAgICBmY2Q9Tm9ybWFsaXplci5ub3JtYWxpemUoZmllbGRbMF0sIE5vcm1hbGl6ZXIuRkNEKTsKKwkgICAgaWYoTm9ybWFsaXplci5OTyA9PSBOb3JtYWxpemVyLnF1aWNrQ2hlY2soZmNkLCBOb3JtYWxpemVyLkZDRCkpIHsKKwkgICAgICAgIGVycmxuKCJOb3JtYWxpemVyIGVycm9yOiBxdWlja0NoZWNrKEZDRChzKSwgTmV3Tm9ybWFsaXplci5GQ0QpIGlzIE5ld05vcm1hbGl6ZXIuTk8iKTsKKwkgICAgICAgIHBhc3MgPSBmYWxzZTsKKwkgICAgfQorICAgICAgICBpZihOb3JtYWxpemVyLk5PID09IE5vcm1hbGl6ZXIucXVpY2tDaGVjayhmY2QsIE5vcm1hbGl6ZXIuRkNEKSkgeworICAgICAgICAgICAgZXJybG4oIk5vcm1hbGl6ZXIgZXJyb3I6IHF1aWNrQ2hlY2soRkNEKHMpLCBOZXdOb3JtYWxpemVyLkZDRCkgaXMgTmV3Tm9ybWFsaXplci5OTyIpOworICAgICAgICAgICAgcGFzcyA9IGZhbHNlOworICAgICAgICB9CisJICAgIGlmKE5vcm1hbGl6ZXIuTk8gPT0gTm9ybWFsaXplci5xdWlja0NoZWNrKGZpZWxkWzJdLCBOb3JtYWxpemVyLkZDRCkpIHsKKwkgICAgICAgIGVycmxuKCJOb3JtYWxpemVyIGVycm9yOiBxdWlja0NoZWNrKE5GRChzKSwgTmV3Tm9ybWFsaXplci5GQ0QpIGlzIE5ld05vcm1hbGl6ZXIuTk8iKTsKKwkgICAgICAgIHBhc3MgPSBmYWxzZTsKKwkgICAgfQorCisJICAgIGlmKE5vcm1hbGl6ZXIuTk8gPT0gTm9ybWFsaXplci5xdWlja0NoZWNrKGZpZWxkWzRdLCBOb3JtYWxpemVyLkZDRCkpIHsKKwkgICAgICAgIGVycmxuKCJOb3JtYWxpemVyIGVycm9yOiBxdWlja0NoZWNrKE5GS0QocyksIE5ld05vcm1hbGl6ZXIuRkNEKSBpcyBOZXdOb3JtYWxpemVyLk5PIik7CisJICAgICAgICBwYXNzID0gZmFsc2U7CisJICAgIH0KKyAgICAgICAgCisgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0obmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKGZpZWxkWzBdKSwgTm9ybWFsaXplci5GQ0QsIGJ1ZiwgKzEpOworICAgICAgICBvdXQgPSBpdGVyYXRpdmVOb3JtKG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihmaWVsZFswXSksIE5vcm1hbGl6ZXIuRkNELCBidWYsIC0xKTsKKyAgICAgICAgCisgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0obmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKGZpZWxkWzJdKSwgTm9ybWFsaXplci5GQ0QsIGJ1ZiwgKzEpOworICAgICAgICBvdXQgPSBpdGVyYXRpdmVOb3JtKG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihmaWVsZFsyXSksIE5vcm1hbGl6ZXIuRkNELCBidWYsIC0xKTsKKyAgICAgICAgCisgICAgICAgIG91dCA9IGl0ZXJhdGl2ZU5vcm0obmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKGZpZWxkWzRdKSwgTm9ybWFsaXplci5GQ0QsIGJ1ZiwgKzEpOworICAgICAgICBvdXQgPSBpdGVyYXRpdmVOb3JtKG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihmaWVsZFs0XSksIE5vcm1hbGl6ZXIuRkNELCBidWYsIC0xKTsKKyAgICAgICAgCisgICAgICAgIG91dD1Ob3JtYWxpemVyLm5vcm1hbGl6ZShmY2QsIE5vcm1hbGl6ZXIuTkZEKTsKKwkgICAgaWYoIW91dC5lcXVhbHMoZmllbGRbMl0pKSB7CisJICAgICAgICBlcnJsbigiTm9ybWFsaXplciBlcnJvcjogTkZEKEZDRChzKSkhPU5GRChzKSIpOworCSAgICAgICAgcGFzcyA9IGZhbHNlOworCSAgICB9ICAgIAorICAgICAgICBpZiAoIXBhc3MpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgbGluZSk7CisgICAgICAgIH0gICAgIAorICAgICAgIAorICAgICAgICByZXR1cm4gcGFzczsKKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkIGNvbXBhcmUoU3RyaW5nIHMxLCBTdHJpbmcgczIpeworICAgICAgICBpZihzMS5sZW5ndGgoKT09MSAmJiBzMi5sZW5ndGgoKT09MSl7CisgICAgICAgICAgICBpZihOb3JtYWxpemVyLmNvbXBhcmUoVVRGMTYuY2hhckF0KHMxLDApLFVURjE2LmNoYXJBdChzMiwwKSxOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UpIT0wKXsKKyAgICAgICAgICAgICAgICBlcnJsbigiTm9ybWFsaXplci5jb21wYXJlKGludCxpbnQpIGZhaWxlZCBmb3IgczE6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICtVdGlsaXR5LmhleChzMSkgKyAiIHMyOiAiICsgVXRpbGl0eS5oZXgoczIpKTsKKyAgICAgICAgICAgIH0gICAgCisgICAgICAgIH0KKyAgICAgICAgaWYoczEubGVuZ3RoKCk9PTEgJiYgczIubGVuZ3RoKCk+MSl7CisgICAgICAgICAgICBpZihOb3JtYWxpemVyLmNvbXBhcmUoVVRGMTYuY2hhckF0KHMxLDApLHMyLE5vcm1hbGl6ZXIuQ09NUEFSRV9JR05PUkVfQ0FTRSkhPTApeworICAgICAgICAgICAgICAgIGVycmxuKCJOb3JtYWxpemVyLmNvbXBhcmUoaW50LFN0cmluZykgZmFpbGVkIGZvciBzMTogIgorICAgICAgICAgICAgICAgICAgICAgICAgK1V0aWxpdHkuaGV4KHMxKSArICIgczI6ICIgKyBVdGlsaXR5LmhleChzMikpOworICAgICAgICAgICAgfSAgICAKKyAgICAgICAgfQorICAgICAgICBpZihzMS5sZW5ndGgoKT4xICYmIHMyLmxlbmd0aCgpPjEpeworICAgICAgICAgICAgLy8gVE9ETzogUmUtZW5hYmxlIHRoaXMgdGVzdHMgYWZ0ZXIgVVRDIGZpeGVzIFVBWCAyMQorICAgICAgICAgICAgaWYoczEuaW5kZXhPZignXHUwMzQ1Jyk+PTApcmV0dXJuOworICAgICAgICAgICAgaWYoTm9ybWFsaXplci5jb21wYXJlKHMxLnRvQ2hhckFycmF5KCksczIudG9DaGFyQXJyYXkoKSxOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UpIT0wKXsKKyAgICAgICAgICAgICAgICBlcnJsbigiTm9ybWFsaXplci5jb21wYXJlKGNoYXJbXSxjaGFyW10pIGZhaWxlZCBmb3IgczE6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICtVdGlsaXR5LmhleChzMSkgKyAiIHMyOiAiICsgVXRpbGl0eS5oZXgoczIpKTsKKyAgICAgICAgICAgIH0gICAgCisgICAgICAgIH0gICAgCisgICAgfQorICAgIC8qKgorICAgICAqIERvIGEgbm9ybWFsaXphdGlvbiB1c2luZyB0aGUgaXRlcmF0aXZlIEFQSSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICAgICAqIEBwYXJhbSBidWYgc2NyYXRjaCBidWZmZXIKKyAgICAgKiBAcGFyYW0gZGlyIGVpdGhlciArMSBvciAtMQorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGl0ZXJhdGl2ZU5vcm0oU3RyaW5nIHN0ciwgTm9ybWFsaXplci5Nb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmLCBpbnQgZGlyKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBub3JtYWxpemVyLnNldFRleHQoc3RyKTsKKyAgICAgICAgbm9ybWFsaXplci5zZXRNb2RlKG1vZGUpOworICAgICAgICBidWYuc2V0TGVuZ3RoKDApOworICAgICAgICAKKyAgICAgICAgaW50IGNoOworICAgICAgICBpZiAoZGlyID4gMCkgeworICAgICAgICAgICAgZm9yIChjaCA9IG5vcm1hbGl6ZXIuZmlyc3QoKTsgY2ggIT0gTm9ybWFsaXplci5ET05FOworICAgICAgICAgICAgICAgICBjaCA9IG5vcm1hbGl6ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChVVEYxNi50b1N0cmluZyhjaCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChjaCA9IG5vcm1hbGl6ZXIubGFzdCgpOyBjaCAhPSBOb3JtYWxpemVyLkRPTkU7CisgICAgICAgICAgICAgICAgIGNoID0gbm9ybWFsaXplci5wcmV2aW91cygpKSB7CisgICAgICAgICAgICAgICAgYnVmLmluc2VydCgwLCBVVEYxNi50b1N0cmluZyhjaCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRG8gYSBub3JtYWxpemF0aW9uIHVzaW5nIHRoZSBpdGVyYXRpdmUgQVBJIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgICAgICogQHBhcmFtIHN0ciBhIEphdmEgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IKKyAgICAgKiBAcGFyYW0gYnVmIHNjcmF0Y2ggYnVmZmVyCisgICAgICogQHBhcmFtIGRpciBlaXRoZXIgKzEgb3IgLTEKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBpdGVyYXRpdmVOb3JtKFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIHN0ciwgTm9ybWFsaXplci5Nb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmLCBpbnQgZGlyKSB0aHJvd3MgRXhjZXB0aW9ueworICAgICAgICBub3JtYWxpemVyLnNldFRleHQoc3RyKTsKKyAgICAgICAgbm9ybWFsaXplci5zZXRNb2RlKG1vZGUpOworICAgICAgICBidWYuc2V0TGVuZ3RoKDApOworICAgICAgICAKKyAgICAgICAgaW50IGNoOworICAgICAgICBpZiAoZGlyID4gMCkgeworICAgICAgICAgICAgZm9yIChjaCA9IG5vcm1hbGl6ZXIuZmlyc3QoKTsgY2ggIT0gTm9ybWFsaXplci5ET05FOworICAgICAgICAgICAgICAgICBjaCA9IG5vcm1hbGl6ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChVVEYxNi50b1N0cmluZyhjaCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChjaCA9IG5vcm1hbGl6ZXIubGFzdCgpOyBjaCAhPSBOb3JtYWxpemVyLkRPTkU7CisgICAgICAgICAgICAgICAgIGNoID0gbm9ybWFsaXplci5wcmV2aW91cygpKSB7CisgICAgICAgICAgICAgICAgYnVmLmluc2VydCgwLCBVVEYxNi50b1N0cmluZyhjaCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gb3AgbmFtZSBvZiBub3JtYWxpemF0aW9uIGZvcm0sIGUuZy4sICJLQyIKKyAgICAgKiBAcGFyYW0gcyBzdHJpbmcgYmVpbmcgbm9ybWFsaXplZAorICAgICAqIEBwYXJhbSBnb3QgdmFsdWUgcmVjZWl2ZWQKKyAgICAgKiBAcGFyYW0gZXhwIGV4cGVjdGVkIHZhbHVlCisgICAgICogQHBhcmFtIG1zZyBkZXNjcmlwdGlvbiBvZiB0aGlzIHRlc3QKKyAgICAgKiBAcGFyYW0gcmV0dXJuIHRydWUgaWYgZ290ID09IGV4cAorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBhc3NlcnRFcXVhbChTdHJpbmcgb3AsIFN0cmluZyBzLCBTdHJpbmcgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwLCBTdHJpbmcgbXNnKSB7CisgICAgICAgIGlmIChleHAuZXF1YWxzKGdvdCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVycmxuKCgiICAgICAgIiArIG1zZyArICIpICIgKyBvcCArICIoIiArIHMgKyAiKT0iICsgaGV4KGdvdCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBleHAuICIgKyBoZXgoZXhwKSkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3BsaXQgYSBzdHJpbmcgaW50byBwaWVjZXMgYmFzZWQgb24gdGhlIGdpdmVuIGRlbGltaXRlcgorICAgICAqIGNoYXJhY3Rlci4gIFRoZW4sIHBhcnNlIHRoZSByZXN1bHRhbnQgZmllbGRzIGZyb20gaGV4IGludG8KKyAgICAgKiBjaGFyYWN0ZXJzLiAgVGhhdCBpcywgIjAwNDAgMDQwMDswQzAwOzA4OTkiIC0+IG5ldyBTdHJpbmdbXSB7CisgICAgICogIlx1MDA0MFx1MDQwMCIsICJcdTBDMDAiLCAiXHUwODk5IiB9LiAgVGhlIG91dHB1dCBpcyBhc3N1bWVkIHRvCisgICAgICogYmUgb2YgdGhlIHByb3BlciBsZW5ndGggYWxyZWFkeSwgYW5kIGV4YWN0bHkgb3V0cHV0Lmxlbmd0aAorICAgICAqIGZpZWxkcyBhcmUgcGFyc2VkLiAgSWYgdGhlcmUgYXJlIHRvbyBmZXcgYW4gZXhjZXB0aW9uIGlzCisgICAgICogdGhyb3duLiAgSWYgdGhlcmUgYXJlIHRvbyBtYW55IHRoZSBleHRyYXMgYXJlIGlnbm9yZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYnVmIHNjcmF0Y2ggYnVmZmVyCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBoZXhzcGxpdChTdHJpbmcgcywgY2hhciBkZWxpbWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBvdXRwdXQsIFN0cmluZ0J1ZmZlciBidWYpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICBmb3IgKGk9MDsgaTxvdXRwdXQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGludCBkZWxpbSA9IHMuaW5kZXhPZihkZWxpbWl0ZXIsIHBvcyk7CisgICAgICAgICAgICBpZiAoZGVsaW0gPCAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTWlzc2luZyBmaWVsZCBpbiAiICsgcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBPdXIgZmllbGQgaXMgZnJvbSBwb3MuLmRlbGltLTEuCisgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgdG9IZXggPSBzLnN1YnN0cmluZyhwb3MsZGVsaW0pOworICAgICAgICAgICAgcG9zID0gZGVsaW07CisgICAgICAgICAgICBpbnQgaW5kZXggPSAwOworICAgICAgICAgICAgaW50IGxlbiA9IHRvSGV4Lmxlbmd0aCgpOworICAgICAgICAgICAgd2hpbGUoaW5kZXg8IGxlbil7CisgICAgICAgICAgICAgICAgaWYodG9IZXguY2hhckF0KGluZGV4KT09JyAnKXsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNwYWNlUG9zID0gdG9IZXguaW5kZXhPZignICcsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYoc3BhY2VQb3M9PS0xKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEludChidWYsdG9IZXguc3Vic3RyaW5nKGluZGV4LGxlbikscyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZVBvcyA9IGxlbjsKKyAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJbnQoYnVmLHRvSGV4LnN1YnN0cmluZyhpbmRleCwgc3BhY2VQb3MpLHMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gc3BhY2VQb3MrMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChidWYubGVuZ3RoKCkgPCAxKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRW1wdHkgZmllbGQgIiArIGkgKyAiIGluICIgKyBzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHB1dFtpXSA9IGJ1Zi50b1N0cmluZygpOworICAgICAgICAgICAgKytwb3M7IC8vIFNraXAgb3ZlciBkZWxpbQorICAgICAgICB9CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhcHBlbmRJbnQoU3RyaW5nQnVmZmVyIGJ1ZiwgU3RyaW5nIHN0clRvSGV4LCBTdHJpbmcgcyl7CisgICAgICAgIGludCBoZXggPSBJbnRlZ2VyLnBhcnNlSW50KHN0clRvSGV4LDE2KTsKKyAgICAgICAgaWYgKGhleCA8IDAgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPdXQgb2YgcmFuZ2UgaGV4ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4ICsgIiBpbiAiICsgcyk7CisgICAgICAgIH1lbHNlIGlmIChoZXggPiAweEZGRkYpeworICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikoKGhleD4+MTApKzB4ZDdjMCkpOyAKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpKChoZXgmMHgzZmYpfDB4ZGMwMCkpOworICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpIGhleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgICAgICAKKyAgICAvLyBTcGVjaWZpYyB0ZXN0cyBmb3IgZGVidWdnaW5nLiAgVGhlc2UgYXJlIGdlbmVyYWxseSBmYWlsdXJlcworICAgIC8vIHRha2VuIGZyb20gdGhlIGNvbmZvcm1hbmNlIGZpbGUsIGJ1dCBjdWxsZWQgb3V0IHRvIG1ha2UKKyAgICAvLyBkZWJ1Z2dpbmcgZWFzaWVyLiAgVGhlc2UgY2FuIGJlIGVsaW1pbmF0ZWQgd2l0aG91dCBhZmZlY3RpbmcKKyAgICAvLyBjb3ZlcmFnZS4KKworICAgIHB1YmxpYyB2b2lkIF9oaWRlVGVzdENhc2U2KCkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgX3Rlc3RPbmVMaW5lKCIwMzg1OzAzODU7MDBBOCAwMzAxOzAwMjAgMDMwOCAwMzAxOzAwMjAgMDMwOCAwMzAxOyIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIF90ZXN0T25lTGluZShTdHJpbmcgbGluZSkgdGhyb3dzIEV4Y2VwdGlvbnsKKyAgICAgICAgU3RyaW5nW10gZmllbGRzID0gbmV3IFN0cmluZ1s1XTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgLy8gUGFyc2Ugb3V0IHRoZSBmaWVsZHMKKyAgICAgICAgaGV4c3BsaXQobGluZSwgJzsnLCBmaWVsZHMsIGJ1Zik7CisgICAgICAgIGNoZWNrQ29uZm9ybWFuY2UoZmllbGRzLCBsaW5lKTsKKyAgICB9CisgICAgCisKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL0V4aGF1c3RpdmVUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvbm9ybWFsaXplci9FeGhhdXN0aXZlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhNWFkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvbm9ybWFsaXplci9FeGhhdXN0aXZlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvbm9ybWFsaXplci9BdHRpYy9FeGhhdXN0aXZlVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA2LzIwIDAxOjE2OjI0ICQgCisgKiAkUmV2aXNpb246IDEuMTEgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0Lm5vcm1hbGl6ZXI7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5Ob3JtYWxpemVySW1wbDsKKworcHVibGljIGNsYXNzIEV4aGF1c3RpdmVUZXN0IGV4dGVuZHMgVGVzdEZtd2sKK3sKKyAJCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAJU3RyaW5nW10gdGVtcEFyZ3MgPSBuZXcgU3RyaW5nW2FyZ3MubGVuZ3RoXTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKworICAgICAgICAvLyBBbGxvdyB0aGUgdGVzdCB0byBiZSBwb2ludGVkIGF0IGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgVW5pY29kZSBkYXRhYmFzZQorICAgICAgICAvL2ZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKKyAgICAgICAgLy97CisgICAgICAgIC8vICAgIGlmIChhcmdzW2ldLmVxdWFscygiLWRhdGEiKSkgeworICAgICAgICAvLyAgICAgICAgdGVtcEluZm8gPSBuZXcgVUluZm8oYXJnc1srK2ldLCBhcmdzWysraV0pOworICAgICAgICAvLyAgICB9IGVsc2UgeworICAgICAgICAvLyAgICAgICAgdGVtcEFyZ3NbY291bnQrK10gPSBhcmdzW2ldOworICAgICAgICAvLyAgICB9CisgICAgICAgIC8vfQorCisgICAgICAgIGFyZ3MgPSBuZXcgU3RyaW5nW2NvdW50XTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0ZW1wQXJncywgMCwgYXJncywgMCwgY291bnQpOworCisKKworICAgICAgICBuZXcgRXhoYXVzdGl2ZVRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBFeGhhdXN0aXZlVGVzdCgpIHsKKyAgICB9CisKKyAKKworICAgIC8qKgorICAgICAqIFJ1biB0aHJvdWdoIGFsbCBvZiB0aGUgY2hhcmFjdGVycyByZXR1cm5lZCBieSBhIGNvbXBvc2VkLWNoYXIgaXRlcmF0b3IKKyAgICAgKiBhbmQgbWFrZSBzdXJlIHRoYXQ6CisgICAgICogPHVsPgorICAgICAqIDxsaT5hKSBUaGV5IGRvIGluZGVlZCBoYXZlIGRlY29tcG9zaXRpb25zLgorICAgICAqIDxsaT5iKSBUaGUgZGVjb21wb3NpdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGl0ZXJhdG9yIGlzIHRoZSBzYW1lIGFzCisgICAgICogICAgICAgICAgcmV0dXJuZWQgYnkgTm9ybWFsaXplci5kZWNvbXBvc2UoKS4KKyAgICAgKiA8bGk+YykgQWxsIGNoYXJhY3RlcnMgPGVtPm5vdDwvZW0+IHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvciBkbyBub3QKKyAgICAgKiAgICAgICAgICBoYXZlIGRlY29tcG9zaXRpb25zLgorICAgICAqIDwvdWw+CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENvbXBvc2VkQ2hhckl0ZXIoKSB7CisgICAgICAgIGRvVGVzdENvbXBvc2VkQ2hhcnMoZmFsc2UpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGRvVGVzdENvbXBvc2VkQ2hhcnMoYm9vbGVhbiBjb21wYXQpIHsKKyAgICAgICAgaW50IG9wdGlvbnMgPSBOb3JtYWxpemVyLklHTk9SRV9IQU5HVUw7CisgICAgICAgIENvbXBvc2VkQ2hhckl0ZXIgaXRlciA9IG5ldyBDb21wb3NlZENoYXJJdGVyKGNvbXBhdCwgb3B0aW9ucyk7CisKKyAgICAgICAgY2hhciBsYXN0Q2hhciA9IDA7CisKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBjaGFyIGNoID0gaXRlci5uZXh0KCk7CisKKyAgICAgICAgICAgIC8vIFRlc3QgYWxsIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgbGFzdCBvbmUgYW5kIHRoaXMgb25lIHRvIG1ha2UKKyAgICAgICAgICAgIC8vIHN1cmUgdGhhdCB0aGV5IGRvbid0IGhhdmUgZGVjb21wb3NpdGlvbnMKKyAgICAgICAgICAgIGFzc2VydE5vRGVjb21wKGxhc3RDaGFyLCBjaCwgY29tcGF0LCBvcHRpb25zKTsKKyAgICAgICAgICAgIGxhc3RDaGFyID0gY2g7CisKKyAgICAgICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb21wb3NpdGlvbnMgZm9yIHRoaXMgY2hhcmFjdGVyCisgICAgICAgICAgICAvLyBtYWtlIHNlbnNlCisgICAgICAgICAgICBTdHJpbmcgY2hTdHJpbmcgICA9IG5ldyBTdHJpbmdCdWZmZXIoKS5hcHBlbmQoY2gpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBTdHJpbmcgaXRlckRlY29tcCA9IGl0ZXIuZGVjb21wb3NpdGlvbigpOworICAgICAgICAgICAgU3RyaW5nIG5vcm1EZWNvbXAgPSBOb3JtYWxpemVyLmRlY29tcG9zZShjaFN0cmluZywgY29tcGF0KTsKKworICAgICAgICAgICAgaWYgKGl0ZXJEZWNvbXAuZXF1YWxzKGNoU3RyaW5nKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogIiArIGhleChjaCkgKyAiIGhhcyBpZGVudGljYWwgZGVjb21wIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghaXRlckRlY29tcC5lcXVhbHMobm9ybURlY29tcCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRVJST1I6IE5vcm1hbGl6ZXIgZGVjb21wIGZvciAiICsgaGV4KGNoKSArICIgKCIgKyBoZXgobm9ybURlY29tcCkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgKyAiICE9IGl0ZXIgZGVjb21wICgiICsgaGV4KGl0ZXJEZWNvbXApICsgIikiICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0Tm9EZWNvbXAobGFzdENoYXIsICdcdUZGRkYnLCBjb21wYXQsIG9wdGlvbnMpOworICAgIH0KKworICAgIHZvaWQgYXNzZXJ0Tm9EZWNvbXAoY2hhciBzdGFydCwgY2hhciBsaW1pdCwgYm9vbGVhbiBjb21wYXQsIGludCBvcHRpb25zKQorICAgIHsKKyAgICAgICAgZm9yIChjaGFyIHggPSArK3N0YXJ0OyB4IDwgbGltaXQ7IHgrKykgeworICAgICAgICAgICAgU3RyaW5nIHhTdHJpbmcgICA9IG5ldyBTdHJpbmdCdWZmZXIoKS5hcHBlbmQoeCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZyBkZWNvbXAgPSBOb3JtYWxpemVyLmRlY29tcG9zZSh4U3RyaW5nLCBjb21wYXQpOworICAgICAgICAgICAgaWYgKCFkZWNvbXAuZXF1YWxzKHhTdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVSUk9SOiAiICsgaGV4KHgpICsgIiBoYXMgZGVjb21wb3NpdGlvbiAoIiArIGhleChkZWNvbXApICsgIikiCisgICAgICAgICAgICAgICAgICAgICsgIiBidXQgd2FzIG5vdCByZXR1cm5lZCBieSBpdGVyYXRvciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Um91bmRUcmlwKCkgeworICAgICAgICBpbnQgb3B0aW9ucyA9IE5vcm1hbGl6ZXIuSUdOT1JFX0hBTkdVTDsKKyAgICAgICAgYm9vbGVhbiBjb21wYXQgPSBmYWxzZTsKKworICAgICAgICBDb21wb3NlZENoYXJJdGVyIGl0ZXIgPSBuZXcgQ29tcG9zZWRDaGFySXRlcihmYWxzZSwgb3B0aW9ucyk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgY2hhciBjaCA9IGl0ZXIubmV4dCgpOworCisgICAgICAgICAgICBTdHJpbmcgY2hTdHIgPSBuZXcgU3RyaW5nQnVmZmVyKCkuYXBwZW5kKGNoKS50b1N0cmluZygpOworICAgICAgICAgICAgU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKGNoU3RyLCBjb21wYXQpOworICAgICAgICAgICAgU3RyaW5nIGNvbXAgPSBOb3JtYWxpemVyLmNvbXBvc2UoZGVjb21wLCBjb21wYXQpOworCisgICAgICAgICAgICBpbnQgY0NsYXNzID0gVUNoYXJhY3Rlci5nZXRDb21iaW5pbmdDbGFzcyhkZWNvbXAuY2hhckF0KDApKTsKKyAgICAgICAgICAgIGNDbGFzcyA9IDA7CisKKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVySW1wbC5pc0Z1bGxDb21wb3NpdGlvbkV4Y2x1c2lvbihjaCkpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiU2tpcHBlZCBleGNsdWRlZCBjaGFyICIgKyBoZXgoY2gpICsgIiAoIiArIFVDaGFyYWN0ZXIuZ2V0TmFtZShjaCkgKyAiKSIgKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQXZvaWQgZGlzcGFyYWdlZCBjaGFyYWN0ZXJzCisgICAgICAgICAgICBpZiAoZ2V0RGVjb21wb3NpdGlvbihjaCxjb21wYXQpLmxlbmd0aCgpID09IDQpIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIWNvbXAuZXF1YWxzKGNoU3RyKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFUlJPUjogUm91bmQgdHJpcCBpbnZhbGlkOiAiICsgaGV4KGNoU3RyKSArICIgLS0+ICIgKyBoZXgoZGVjb21wKQorICAgICAgICAgICAgICAgICAgICArICIgLS0+ICIgKyBoZXgoY29tcCkpOworCisgICAgICAgICAgICAgICAgZXJybG4oIiAgY2hhciBkZWNvbXAgaXMgJyIgKyBnZXREZWNvbXBvc2l0aW9uKGNoLGNvbXBhdCkgKyAiJyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHByaXZhdGUgU3RyaW5nIGdldERlY29tcG9zaXRpb24oY2hhciBjaCwgYm9vbGVhbiBjb21wYXQpeworICAgICAgICBjaGFyW10gZGVzdCA9IG5ldyBjaGFyWzEwXTsgICAKKyAgICAgICAgaW50IGxlbmd0aCA9IE5vcm1hbGl6ZXJJbXBsLmdldERlY29tcG9zaXRpb24oY2gsY29tcGF0LGRlc3QsMCxkZXN0Lmxlbmd0aCk7ICAgCisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGRlc3QsMCxsZW5ndGgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL1Rlc3RDYW5vbmljYWxJdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L25vcm1hbGl6ZXIvVGVzdENhbm9uaWNhbEl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGU2MzJmYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL1Rlc3RDYW5vbmljYWxJdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvbm9ybWFsaXplci9UZXN0Q2Fub25pY2FsSXRlcmF0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMS8yMiAwMDo0NDowNiAkIAorICogJFJldmlzaW9uOiAxLjEwICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5ub3JtYWxpemVyOworCitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvLyBUT0RPOiBmaXQgaW50byB0ZXN0IGZyYW1ld29yaworCitwdWJsaWMgY2xhc3MgVGVzdENhbm9uaWNhbEl0ZXJhdG9yIGV4dGVuZHMgVGVzdEZtd2sgeworCQorICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIFNIT1dfTkFNRVMgPSBmYWxzZTsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgVGVzdENhbm9uaWNhbEl0ZXJhdG9yKCkucnVuKGFyZ3MpOworICAgIH0KKwkKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3RBcnJheVtdW10gPSB7CisgICAgICAgIHsiXHUwMEM1ZFx1MDMwN1x1MDMyNyIsICJBXHUwMzBBZFx1MDMwN1x1MDMyNywgQVx1MDMwQWRcdTAzMjdcdTAzMDcsIEFcdTAzMEFcdTFFMEJcdTAzMjcsICIKKyAgICAgICAgCSsgIkFcdTAzMEFcdTFFMTFcdTAzMDcsIFx1MDBDNWRcdTAzMDdcdTAzMjcsIFx1MDBDNWRcdTAzMjdcdTAzMDcsICIKKyAgICAgICAgCSsgIlx1MDBDNVx1MUUwQlx1MDMyNywgXHUwMEM1XHUxRTExXHUwMzA3LCBcdTIxMkJkXHUwMzA3XHUwMzI3LCAiCisgICAgICAgIAkrICJcdTIxMkJkXHUwMzI3XHUwMzA3LCBcdTIxMkJcdTFFMEJcdTAzMjcsIFx1MjEyQlx1MUUxMVx1MDMwNyJ9LAorICAgICAgICB7Ilx1MDEwZFx1MDE3RSIsICJjXHUwMzBDelx1MDMwQywgY1x1MDMwQ1x1MDE3RSwgXHUwMTBEelx1MDMwQywgXHUwMTBEXHUwMTdFIn0sCisgICAgICAgIHsieFx1MDMwN1x1MDMyNyIsICJ4XHUwMzA3XHUwMzI3LCB4XHUwMzI3XHUwMzA3LCBcdTFFOEJcdTAzMjcifSwKKyAgICB9OworICAgIAorICAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0RXhoYXVzdGl2ZSgpIHsKKyAgICAJaW50IGNvdW50ZXIgPSAwOworICAgIAlpbnQgbWl4ZWRDb3VudGVyID0gMDsKKyAgICAJaW50IGxhc3RNaXhlZENvdW50ZXIgPSAtMTsKKyAgICAJQ2Fub25pY2FsSXRlcmF0b3IgaXQgPSBuZXcgQ2Fub25pY2FsSXRlcmF0b3IoIiIpOworICAgIAkvKgorICAgIAlDYW5vbmljYWxJdGVyYXRvciBzbG93SXQgPSBuZXcgQ2Fub25pY2FsSXRlcmF0b3IoIiIpOworICAgIAlzbG93SXQuU0tJUF9aRVJPUyA9IGZhbHNlOworICAgIAkqLworICAgIAlUcmFuc2xpdGVyYXRvciBuYW1lID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIlteXFx1MDAyMC1cXHUwMDdGXSBuYW1lIik7CisgICAgCVNldCBpdFNldCA9IG5ldyBUcmVlU2V0KCk7CisgICAgCVNldCBzbG93SXRTZXQgPSBuZXcgVHJlZVNldCgpOworICAgIAkKKyAgICAJCisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgMHgxMEZGRkY7ICsraSkgeworICAgIAkJCisgICAgCQkvLyBza2lwIGNoYXJhY3RlcnMgd2Uga25vdyBkb24ndCBoYXZlIGRlY29tcHMKKyAgICAJCWludCB0eXBlID0gVUNoYXJhY3Rlci5nZXRUeXBlKGkpOworICAgIAkJaWYgKHR5cGUgPT0gQ2hhcmFjdGVyLlVOQVNTSUdORUQgfHwgdHlwZSA9PSBDaGFyYWN0ZXIuUFJJVkFURV9VU0UKKyAgICAJCQl8fCB0eXBlID09IENoYXJhY3Rlci5TVVJST0dBVEUpIGNvbnRpbnVlOworICAgIAkJCQorICAgIAkJaWYgKCgrK2NvdW50ZXIgJSA1MDAwKSA9PSAwKSBsb2dsbigiVGVzdGluZyAiICsgVXRpbGl0eS5oZXgoaSwwKSk7CisgICAgCQkKKyAgICAJCVN0cmluZyBzID0gVVRGMTYudmFsdWVPZihpKSArICJcdTAzNDUiOworICAgIAkJU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKHMsIGZhbHNlKTsKKyAgICAJCVN0cmluZyBjb21wID0gTm9ybWFsaXplci5jb21wb3NlKHMsIGZhbHNlKTsKKyAgICAJCS8vIHNraXAgY2hhcmFjdGVycyB0aGF0IGRvbid0IGhhdmUgZWl0aGVyIGRlY29tcC4KKyAgICAJCS8vIG5lZWQgcXVpY2sgdGVzdCBmb3IgdGhpcyEKKyAgICAJCWlmIChzLmVxdWFscyhkZWNvbXApICYmIHMuZXF1YWxzKGNvbXApKSBjb250aW51ZTsKKyAgICAJCQorICAgIAkJaXQuc2V0U291cmNlKHMpOworICAgIAkJYm9vbGVhbiBnb3REZWNvbXAgPSBmYWxzZTsKKyAgICAJCWJvb2xlYW4gZ290Q29tcCA9IGZhbHNlOworICAgIAkJYm9vbGVhbiBnb3RTb3VyY2UgPSBmYWxzZTsKKyAgICAJCXdoaWxlICh0cnVlKSB7CisgICAgCQkJU3RyaW5nIGl0ZW0gPSBpdC5uZXh0KCk7CisgICAgCQkJaWYgKGl0ZW0gPT0gbnVsbCkgYnJlYWs7CisgICAgCQkJaWYgKGl0ZW0uZXF1YWxzKHMpKSBnb3RTb3VyY2UgPSB0cnVlOworICAgIAkJCWlmIChpdGVtLmVxdWFscyhkZWNvbXApKSBnb3REZWNvbXAgPSB0cnVlOworICAgIAkJCWlmIChpdGVtLmVxdWFscyhjb21wKSkgZ290Q29tcCA9IHRydWU7CisgICAgCQkJaWYgKChtaXhlZENvdW50ZXIgJiAweDdGKSA9PSAwICYmIChpIDwgMHhBRDAwIHx8IGkgPiAweEFDMDAgKyAxMTE3MikpIHsKKyAgICAJCQkJaWYgKGxhc3RNaXhlZENvdW50ZXIgIT0gbWl4ZWRDb3VudGVyKSB7CisgICAgCQkJCQlsb2dsbigiIik7CisgICAgCQkJCQlsYXN0TWl4ZWRDb3VudGVyID0gbWl4ZWRDb3VudGVyOworICAgIAkJCQl9CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJcdCIgKyBtaXhlZENvdW50ZXIgKyAiXHQiICsgbmFtZS50cmFuc2xpdGVyYXRlKGl0ZW0pCisgICAgICAgICAgICAgICAgICAgICsgKGl0ZW0uZXF1YWxzKHMpID8gIlx0KCpvcmlnaW5hbCopIiA6ICIiKQorICAgICAgICAgICAgICAgICAgICArIChpdGVtLmVxdWFscyhkZWNvbXApID8gIlx0KCpkZWNvbXAqKSIgOiAiIikKKyAgICAgICAgICAgICAgICAgICAgKyAoaXRlbS5lcXVhbHMoY29tcCkgPyAiXHQoKmNvbXAqKSIgOiAiIikKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAJCQl9CisKKyAgICAJCX0KKyAgICAJCQorICAgIAkJLy8gY2hlY2sgdGhhdCB6ZXJvcyBvcHRpbWl6YXRpb24gZG9lc24ndCBtZXNzIHVwLgorICAgIAkJLyoKKyAgICAJCWlmICh0cnVlKSB7CisgICAgCQkJaXQucmVzZXQoKTsKKyAgICAJCQlpdFNldC5jbGVhcigpOworICAgIAkJCXdoaWxlICh0cnVlKSB7CisgICAgCQkJCVN0cmluZyBpdGVtID0gaXQubmV4dCgpOworICAgIAkJCQlpZiAoaXRlbSA9PSBudWxsKSBicmVhazsKKyAgICAJCQkJaXRTZXQuYWRkKGl0ZW0pOworICAgIAkJCX0KKyAgICAJCQlzbG93SXQuc2V0U291cmNlKHMpOworICAgIAkJCXNsb3dJdFNldC5jbGVhcigpOworICAgIAkJCXdoaWxlICh0cnVlKSB7CisgICAgCQkJCVN0cmluZyBpdGVtID0gc2xvd0l0Lm5leHQoKTsKKyAgICAJCQkJaWYgKGl0ZW0gPT0gbnVsbCkgYnJlYWs7CisgICAgCQkJCXNsb3dJdFNldC5hZGQoaXRlbSk7CisgICAgCQkJfQorICAgIAkJCWlmICghaXRTZXQuZXF1YWxzKHNsb3dJdFNldCkpIHsKKyAgICAJCQkJZXJybG4oIlplcm8gb3B0aW1pemF0aW9uIGZhaWx1cmUgd2l0aCAiICsgZ2V0UmVhZGFibGUocykpOworICAgIAkJCX0KKyAgICAJCX0KKyAgICAJCSovCisgICAgCQkKKyAgICAJCW1peGVkQ291bnRlcisrOworICAgIAkJaWYgKCFnb3RTb3VyY2UgfHwgIWdvdERlY29tcCB8fCAhZ290Q29tcCkgeworICAgIAkJCWVycmxuKCJGQUlMIENhbm9uaWNhbEl0ZXJhdG9yOiAiICsgcyArICIgZGVjb21wOiAiICtkZWNvbXArIiBjb21wOiAiK2NvbXApOworICAgICAgICAgICAgICAgIGl0LnJlc2V0KCk7CisgICAgICAgICAgICAgICAgZm9yKFN0cmluZyBpdGVtPWl0Lm5leHQoKTtpdGVtIT1udWxsO2l0ZW09aXQubmV4dCgpKXsKKyAgICAgICAgICAgICAgICAgICAgZXJyKGl0ZW0gKyAiICAgICIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlcnJsbigiIik7ICAgCisgICAgCQl9CisgICAgCX0KKyAgICB9CisgICAgCisgICAgcHVibGljIGludCBUZXN0U3BlZWQoKSB7CisgICAgICAgICAvLyBza2lwIHVubGVzcyB2ZXJib3NlCisgICAgICAgIGlmICghaXNWZXJib3NlKCkpIHJldHVybiAwOworCisgICAJCVN0cmluZyBzID0gIlx1QUMwMVx1MDM0NSI7CisgICAJCQorICAgIAlDYW5vbmljYWxJdGVyYXRvciBpdCA9IG5ldyBDYW5vbmljYWxJdGVyYXRvcihzKTsKKyAgICAJZG91YmxlIHN0YXJ0LCBlbmQ7CisgICAgCWludCB4ID0gMDsgLy8ganVzdCB0byBrZWVwIGNvZGUgZnJvbSBvcHRpbWl6aW5nIGF3YXkuCisgICAgCWludCBpdGVyYXRpb25zID0gMTAwMDA7CisgICAgCWRvdWJsZSBzbG93RGVsdGEgPSAwOworICAgIAkKKyAgICAJLyoKKyAgICAJQ2Fub25pY2FsSXRlcmF0b3Igc2xvd0l0ID0gbmV3IENhbm9uaWNhbEl0ZXJhdG9yKHMpOworICAgIAlzbG93SXQuU0tJUF9aRVJPUyA9IGZhbHNlOworCisgICAgCXN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgKytpKSB7CisgICAgCQlzbG93SXQuc2V0U291cmNlKHMpOworICAgIAkJd2hpbGUgKHRydWUpIHsKKyAgICAJCQlTdHJpbmcgaXRlbSA9IHNsb3dJdC5uZXh0KCk7CisgICAgCQkJaWYgKGl0ZW0gPT0gbnVsbCkgYnJlYWs7CisgICAgCQkJeCArPSBpdGVtLmxlbmd0aCgpOworICAgIAkJfQorICAgIAl9CisgICAgCWVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIAlkb3VibGUgc2xvd0RlbHRhID0gKGVuZC1zdGFydCkgLyBpdGVyYXRpb25zOworICAgIAlsb2dsbigiU2xvdyBpdGVyYXRpb246ICIgKyBzbG93RGVsdGEpOworICAgIAkqLworCisgICAgCXN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgKytpKSB7CisgICAgCQlpdC5zZXRTb3VyY2Uocyk7CisgICAgCQl3aGlsZSAodHJ1ZSkgeworICAgIAkJCVN0cmluZyBpdGVtID0gaXQubmV4dCgpOworICAgIAkJCWlmIChpdGVtID09IG51bGwpIGJyZWFrOworICAgIAkJCXggKz0gaXRlbS5sZW5ndGgoKTsKKyAgICAJCX0KKyAgICAJfQorICAgIAllbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAJZG91YmxlIGZhc3REZWx0YSA9IChlbmQtc3RhcnQpIC8gaXRlcmF0aW9uczsKKyAgICAJbG9nbG4oIkZhc3QgaXRlcmF0aW9uOiAiICsgZmFzdERlbHRhICsgKHNsb3dEZWx0YSAhPSAwID8gIiwgIiArIChmYXN0RGVsdGEvc2xvd0RlbHRhKSA6ICIiKSk7CisgICAgCQorICAgIAkKKyAgICAJcmV0dXJuIHg7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RCYXNpYygpIHsKKy8vICAgICAgVGhpcyBpcyBub3QgaW50ZXJlc3RpbmcgYW55bW9yZSBhcyB0aGUgZGF0YSBpcyBhbHJlYWR5IGJ1aWx0IAorLy8gICAgICBiZWZvcmVoYW5kCisKKy8vICAgICAgICBjaGVjayBidWlsZAorLy8gICAgICAgIFVuaWNvZGVTZXQgc3MgPSBDYW5vbmljYWxJdGVyYXRvci5nZXRTYWZlU3RhcnQoKTsKKy8vICAgICAgICBsb2dsbigiU2FmZSBTdGFydDogIiArIHNzLnRvUGF0dGVybih0cnVlKSk7CisvLyAgICAgICAgc3MgPSBDYW5vbmljYWxJdGVyYXRvci5nZXRTdGFydHMoJ2EnKTsKKy8vICAgICAgICBleHBlY3RFcXVhbCgiQ2hhcmFjdGVycyB3aXRoICdhJyBhdCB0aGUgc3RhcnQgb2YgdGhlaXIgZGVjb21wb3NpdGlvbjogIiwgIiIsIENhbm9uaWNhbEl0ZXJhdG9yLmdldFN0YXJ0cygnYScpLAorLy8gICAgICAgIAluZXcgVW5pY29kZVNldCgiW1x1MDBFMC1cdTAwRTVcdTAxMDFcdTAxMDNcdTAxMDVcdTAxQ0VcdTAxREZcdTAxRTFcdTAxRkIiCisvLyAgICAgICAgCSsgIlx1MDIwMVx1MDIwM1x1MDIyN1x1MUUwMVx1MUVBMVx1MUVBM1x1MUVBNVx1MUVBN1x1MUVBOVx1MUVBQlx1MUVBRFx1MUVBRlx1MUVCMVx1MUVCM1x1MUVCNVx1MUVCN10iKQorLy8gICAgICAgIAkJKTsKKyAgICAgICAgCisgICAgICAgIC8vIGNoZWNrIHBlcm11dGUKKyAgICAgICAgLy8gTk9URTogd2UgdXNlIGEgVHJlZVNldCBiZWxvdyB0byBzb3J0IHRoZSBvdXRwdXQsIHdoaWNoIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHNvcnRlZCEKKyAgICAgICAgCisgICAgICAgIFNldCByZXN1bHRzID0gbmV3IFRyZWVTZXQoKTsKKyAgICAgICAgQ2Fub25pY2FsSXRlcmF0b3IucGVybXV0ZSgiQUJDIiwgZmFsc2UsIHJlc3VsdHMpOworICAgICAgICBleHBlY3RFcXVhbCgiU2ltcGxlIHBlcm11dGF0aW9uICIsICIiLCBjb2xsZWN0aW9uVG9TdHJpbmcocmVzdWx0cyksICJBQkMsIEFDQiwgQkFDLCBCQ0EsIENBQiwgQ0JBIik7CisgICAgICAgIAorICAgICAgICAvLyB0cnkgc2FtcGxlcworICAgICAgICBTb3J0ZWRTZXQgc2V0ID0gbmV3IFRyZWVTZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0QXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIC8vbG9nbG4oIlJlc3VsdHMgZm9yOiAiICsgbmFtZS50cmFuc2xpdGVyYXRlKHRlc3RBcnJheVtpXSkpOworICAgICAgICAgICAgQ2Fub25pY2FsSXRlcmF0b3IgaXQgPSBuZXcgQ2Fub25pY2FsSXRlcmF0b3IodGVzdEFycmF5W2ldWzBdKTsKKyAgICAgICAgICAgIGludCBjb3VudGVyID0gMDsKKyAgICAgICAgICAgIHNldC5jbGVhcigpOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gaXQubmV4dCgpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgYnJlYWs7CisgICAgICAgICAgICAgICAgc2V0LmFkZChyZXN1bHQpOyAvLyBzb3J0IHRoZW0KKyAgICAgICAgICAgICAgICAvL2xvZ2xuKCsrY291bnRlciArICI6ICIgKyBoZXgudHJhbnNsaXRlcmF0ZShyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAvL2xvZ2xuKCIgPSAiICsgbmFtZS50cmFuc2xpdGVyYXRlKHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0RXF1YWwoaSArICI6ICIsIHRlc3RBcnJheVtpXVswXSwgY29sbGVjdGlvblRvU3RyaW5nKHNldCksIHRlc3RBcnJheVtpXVsxXSk7CisKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBleHBlY3RFcXVhbChTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIGl0ZW0sIE9iamVjdCBhLCBPYmplY3QgYikgeworICAgIAlpZiAoIWEuZXF1YWxzKGIpKSB7CisgICAgCQllcnJsbigiRkFJTDogIiArIG1lc3NhZ2UgKyBnZXRSZWFkYWJsZShpdGVtKSk7CisgICAgCQllcnJsbigiXHQiICsgZ2V0UmVhZGFibGUoYSkpOworICAgIAkJZXJybG4oIlx0IiArIGdldFJlYWRhYmxlKGIpKTsKKyAgICAJfSBlbHNlIHsKKyAgICAJCWxvZ2xuKCJDaGVja2VkOiAiICsgbWVzc2FnZSArIGdldFJlYWRhYmxlKGl0ZW0pKTsKKyAgICAJCWxvZ2xuKCJcdCIgKyBnZXRSZWFkYWJsZShhKSk7CisgICAgCQlsb2dsbigiXHQiICsgZ2V0UmVhZGFibGUoYikpOworICAgIAl9CisgICAgfQorICAgIAorICAgIFRyYW5zbGl0ZXJhdG9yIG5hbWUgPSBudWxsOworICAgIFRyYW5zbGl0ZXJhdG9yIGhleCA9IG51bGw7CisgICAgICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZGFibGUoT2JqZWN0IG9iaikgeworICAgIAlpZiAob2JqID09IG51bGwpIHJldHVybiAibnVsbCI7CisgICAgCVN0cmluZyBzID0gb2JqLnRvU3RyaW5nKCk7CisgICAgCWlmIChzLmxlbmd0aCgpID09IDApIHJldHVybiAiIjsKKyAgICAgICAgLy8gc2V0IHVwIGZvciByZWFkYWJsZSBkaXNwbGF5CisgICAgICAgIGlmIChuYW1lID09IG51bGwpIG5hbWUgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiW15cXCAtXFx1MDA3Rl0gbmFtZSIpOworICAgICAgICBpZiAoaGV4ID09IG51bGwpIGhleCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJbXlxcIC1cXHUwMDdGXSBoZXgiKTsKKyAgICAgICAgcmV0dXJuICJbIiArIChTSE9XX05BTUVTID8gbmFtZS50cmFuc2xpdGVyYXRlKHMpICsgIjsgIiA6ICIiKSArIGhleC50cmFuc2xpdGVyYXRlKHMpICsgIl0iOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3Rpb25Ub1N0cmluZyhDb2xsZWN0aW9uIGNvbCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBJdGVyYXRvciBpdCA9IGNvbC5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICE9IDApIHJlc3VsdC5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0Lm5leHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL3BhY2thZ2UuaHRtbCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9ub3JtYWxpemVyL3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDEwYTgwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L25vcm1hbGl6ZXIvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvbm9ybWFsaXplci9wYWNrYWdlLmh0bWwsdiAkCisgICRSZXZpc2lvbjogMS4xICQKKyAgJERhdGU6IDIwMDAvMDMvMTUgMjE6MzU6NDkgJAorLS0+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSI+CitUZXN0cyBmb3IgTm9ybWFsaXplci4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGFja2FnZS5odG1sIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZmFmOTkyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BhY2thZ2UuaHRtbCx2ICQKKyAgJFJldmlzaW9uOiAxLjEgJAorICAkRGF0ZTogMjAwMC8wMy8xNSAyMTozNTo0OCAkCistLT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIj4KK1NoYXJlZCB1dGlsaXRpZXMgZm9yIHRlc3RzLgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9wZXJmL0NvbGxhdGlvblBlcmZvcm1hbmNlVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvQ29sbGF0aW9uUGVyZm9ybWFuY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3NDA1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9wZXJmL0NvbGxhdGlvblBlcmZvcm1hbmNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI2NyBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IAorKiAkRGF0ZTogCisqICRSZXZpc2lvbjogCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnBlcmY7CisKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS5pby4qOworCitwdWJsaWMgY2xhc3MgQ29sbGF0aW9uUGVyZm9ybWFuY2VUZXN0IHsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIHVzYWdlU3RyaW5nID0gCisgICAgICAgICJ1c2FnZTogIGNvbGxwZXJmIG9wdGlvbnMuLi5cbiIKKyAgICAgICAgKyAiLWhlbHAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UuXG4iCisgICAgICAgICsgIi1maWxlIGZpbGVfbmFtZSAgICAgICAgICAgIHV0Zi0xNiBmb3JtYXQgZmlsZSBvZiBuYW1lcy5cbiIKKyAgICAgICAgKyAiLWxvY2FsZSBuYW1lICAgICAgICAgICAgICAgSUNVIGxvY2FsZSB0byB1c2UuICBEZWZhdWx0IGlzIGVuX1VTXG4iCisgICAgICAgICsgIi1ydWxlcyBmaWxlX25hbWUgICAgICAgICAgIENvbGxhdGlvbiBydWxlcyBmaWxlIChvdmVycmlkZXMgbG9jYWxlKVxuIgorICAgICAgICAvLysgIi1sYW5naWQgMHgxMjM0ICAgICAgICAgICAgIFdpbmRvd3MgTGFuZ3VhZ2UgSUQgbnVtYmVyLiAgRGVmYXVsdCB0byB2YWx1ZSBmb3IgLWxvY2FsZSBvcHRpb25cbiIKKyAgICAgICAgLy8rICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L3BzZGsvd2luYmFzZS9ubHNfOHhvMy5odG1cbiIKKyAgICAgICAgLy8rICItd2luICAgICAgICAgICAgICAgICAgICAgICBSdW4gdGVzdCB1c2luZyBXaW5kb3dzIG5hdGl2ZSBzZXJ2aWNlcy4gIChJQ1UgaXMgZGVmYXVsdClcbiIKKyAgICAgICAgLy8rICItdW5peCAgICAgICAgICAgICAgICAgICAgICBSdW4gdGVzdCB1c2luZyBVbml4IHN0cnhmcm0sIHN0cmNvbGwgc2VydmljZXMuXG4iCisgICAgICAgIC8vKyAiLXVzZWxlbiAgICAgICAgICAgICAgICAgICAgVXNlIEFQSSB3aXRoIHN0cmluZyBsZW5ndGhzLiAgRGVmYXVsdCBpcyBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nc1xuIgorICAgICAgICArICItdXNla2V5cyAgICAgICAgICAgICAgICAgICBSdW4gdGVzdHMgdXNpbmcgc29ydGtleXMgcmF0aGVyIHRoYW4gc3RyY29sbFxuIgorICAgICAgICArICItc3RyY21wICAgICAgICAgICAgICAgICAgICBSdW4gdGVzdHMgdXNpbmcgdV9zdHJjbXAgcmF0aGVyIHRoYW4gc3RyY29sbFxuIgorICAgICAgICArICItc3RyY21wQ1BPICAgICAgICAgICAgICAgICBSdW4gdGVzdHMgdXNpbmcgdV9zdHJjbXBDb2RlUG9pbnRPcmRlciByYXRoZXIgdGhhbiBzdHJjb2xsXG4iCisgICAgICAgICsgIi1sb29wIG5ubm4gICAgICAgICAgICAgICAgIExvb3Bjb3VudCBmb3IgdGVzdC4gIEFkanVzdCBmb3IgcmVhc29uYWJsZSB0b3RhbCBydW5uaW5nIHRpbWUuXG4iCisgICAgICAgICsgIi1pbG9vcCBuICAgICAgICAgICAgICAgICAgIElubmVyIExvb3AgQ291bnQuICBEZWZhdWx0ID0gMS4gIE51bWJlciBvZiBjYWxscyB0byBmdW5jdGlvblxuIgorICAgICAgICArICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGVzdCBhdCBlYWNoIGNhbGwgcG9pbnQuICBGb3IgbWVhc3VyaW5nIHRlc3Qgb3ZlcmhlYWQuXG4iCisgICAgICAgICsgIi10ZXJzZSAgICAgICAgICAgICAgICAgICAgIFRlcnNlIG51bWJlcnMtb25seSBvdXRwdXQuICBJbnRlbmRlZCBmb3IgdXNlIGJ5IHNjcmlwdHMuXG4iCisgICAgICAgICsgIi1mcmVuY2ggICAgICAgICAgICAgICAgICAgIEZyZW5jaCBhY2NlbnQgb3JkZXJpbmdcbiIKKyAgICAgICAgKyAiLWZyZW5jaG9mZiAgICAgICAgICAgICAgICAgTm8gRnJlbmNoIGFjY2VudCBvcmRlcmluZyAoZm9yIHVzZSB3aXRoIEZyZW5jaCBsb2NhbGVzLilcbiIKKyAgICAgICAgKyAiLW5vcm0gICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXppbmcgbW9kZSBvblxuIgorICAgICAgICArICItc2hpZnRlZCAgICAgICAgICAgICAgICAgICBTaGlmdGVkIG1vZGVcbiIKKyAgICAgICAgKyAiLWxvd2VyICAgICAgICAgICAgICAgICAgICAgTG93ZXIgY2FzZSBmaXJzdFxuIgorICAgICAgICArICItdXBwZXIgICAgICAgICAgICAgICAgICAgICBVcHBlciBjYXNlIGZpcnN0XG4iCisgICAgICAgICsgIi1jYXNlICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBzZXBhcmF0ZSBjYXNlIGxldmVsXG4iCisgICAgICAgICsgIi1sZXZlbCBuICAgICAgICAgICAgICAgICAgIFNvcnQgbGV2ZWwsIDEgdG8gNSwgZm9yIFByaW1hcnksIFNlY25kYXJ5LCBUZXJ0aWFyeSwgUXVhdGVybmFyeSwgSWRlbnRpY2FsXG4iCisgICAgICAgICsgIi1rZXloaXN0ICAgICAgICAgICAgICAgICAgIFByb2R1Y2UgYSB0YWJsZSBzb3J0IGtleSBzaXplIHZzLiBzdHJpbmcgbGVuZ3RoXG4iCisgICAgICAgICsgIi1iaW5zZWFyY2ggICAgICAgICAgICAgICAgIEJpbmFyeSBTZWFyY2ggdGltaW5nIHRlc3RcbiIKKyAgICAgICAgKyAiLWtleWdlbiAgICAgICAgICAgICAgICAgICAgU29ydCBLZXkgR2VuZXJhdGlvbiB0aW1pbmcgdGVzdFxuIgorICAgICAgICArICItcXNvcnQgICAgICAgICAgICAgICAgICAgICBRdWlja3NvcnQgdGltaW5nIHRlc3RcbiIKKyAgICAgICAgKyAiLWl0ZXIgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0aW9uIFBlcmZvcm1hbmNlIFRlc3RcbiIKKyAgICAgICAgKyAiLWR1bXAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSBzdHJpbmdzLCBzb3J0IGtleXMgYW5kIENFcy5cbiIKKyAgICAgICAgKyAiLWphdmEgICAgICAgICAgICAgICAgICAgICAgUnVuIHRlc3QgdXNpbmcgamF2YS50ZXh0LkNvbGxhdG9yLlxuIjsKKyAgICAKKyAgICAvL2VudW0ge0ZMQUcsIE5VTSwgU1RSSU5HfSB0eXBlOworICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfZk5hbWUgICAgICA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfbG9jYWxlICAgICA9IG5ldyBTdHJpbmdCdWZmZXIoImVuX1VTIik7CisgICAgLy9zdGF0aWMgU3RyaW5nQnVmZmVyIHRlbXBfb3B0X2xhbmdpZCAgICAgPSBuZXcgU3RyaW5nQnVmZmVyKCIwIik7ICAgICAgICAgLy8gRGVmYXVsdHMgdG8gdmFsdWUgY29ycmVzcG9uZGluZyB0byBvcHRfbG9jYWxlLgorICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfcnVsZXMgICAgICA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfaGVscCAgICAgICA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfbG9vcENvdW50ICA9IG5ldyBTdHJpbmdCdWZmZXIoIjEiKTsKKyAgICBzdGF0aWMgU3RyaW5nQnVmZmVyIHRlbXBfb3B0X2lMb29wQ291bnQgPSBuZXcgU3RyaW5nQnVmZmVyKCIxIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF90ZXJzZSAgICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiZmFsc2UiKTsKKyAgICBzdGF0aWMgU3RyaW5nQnVmZmVyIHRlbXBfb3B0X3Fzb3J0ICAgICAgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICBzdGF0aWMgU3RyaW5nQnVmZmVyIHRlbXBfb3B0X2JpbnNlYXJjaCAgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKyAgICBzdGF0aWMgU3RyaW5nQnVmZmVyIHRlbXBfb3B0X2ljdSAgICAgICAgPSBuZXcgU3RyaW5nQnVmZmVyKCJ0cnVlIik7CisgICAgLy9zdGF0aWMgU3RyaW5nQnVmZmVyIG9wdF93aW4gICAgICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7ICAgICAgLy8gUnVuIHdpdGggV2luZG93cyBuYXRpdmUgZnVuY3Rpb25zLgorICAgIC8vc3RhdGljIFN0cmluZ0J1ZmZlciBvcHRfdW5peCAgICAgICA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOyAgICAgIC8vIFJ1biB3aXRoIFVOSVggc3RyY29sbCwgc3RyeGZybSBmdW5jdGlvbnMuCisgICAgLy9zdGF0aWMgU3RyaW5nQnVmZmVyIG9wdF91c2VsZW4gICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF91c2VrZXlzICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9zdHJjbXAgICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9zdHJjbXBDUE8gID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9ub3JtICAgICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9rZXlnZW4gICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9mcmVuY2ggICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9mcmVuY2hvZmYgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9zaGlmdGVkICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9sb3dlciAgICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF91cHBlciAgICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9jYXNlICAgICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgc3RhdGljIFN0cmluZ0J1ZmZlciB0ZW1wX29wdF9sZXZlbCAgICAgID0gbmV3IFN0cmluZ0J1ZmZlcigiMCIpOworICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfa2V5aGlzdCAgICA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfaXRlcnRlc3QgICA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfZHVtcCAgICAgICA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIHN0YXRpYyBTdHJpbmdCdWZmZXIgdGVtcF9vcHRfamF2YSAgICAgICA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIAorICAgIAorICAgIHN0YXRpYyBTdHJpbmcgICBvcHRfZk5hbWUgICAgICA9ICIiOworICAgIHN0YXRpYyBTdHJpbmcgICBvcHRfbG9jYWxlICAgICA9ICJlbl9VUyI7CisgICAgLy9zdGF0aWMgaW50ICAgICAgb3B0X2xhbmdpZCAgICAgPSAwOyAgICAgICAgIC8vIERlZmF1bHRzIHRvIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gb3B0X2xvY2FsZS4KKyAgICBzdGF0aWMgU3RyaW5nICAgb3B0X3J1bGVzICAgICAgPSAiIjsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X2hlbHAgICAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgaW50ICAgICAgb3B0X2xvb3BDb3VudCAgPSAxOworICAgIHN0YXRpYyBpbnQgICAgICBvcHRfaUxvb3BDb3VudCA9IDE7CisgICAgc3RhdGljIGJvb2xlYW4gIG9wdF90ZXJzZSAgICAgID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2xlYW4gIG9wdF9xc29ydCAgICAgID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2xlYW4gIG9wdF9iaW5zZWFyY2ggID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2xlYW4gIG9wdF9pY3UgICAgICAgID0gdHJ1ZTsKKyAgICAvL3N0YXRpYyBib29sZWFuICBvcHRfd2luICAgICAgICA9IGZhbHNlOyAgICAgIC8vIFJ1biB3aXRoIFdpbmRvd3MgbmF0aXZlIGZ1bmN0aW9ucy4KKyAgICAvL3N0YXRpYyBib29sZWFuICBvcHRfdW5peCAgICAgICA9IGZhbHNlOyAgICAgIC8vIFJ1biB3aXRoIFVOSVggc3RyY29sbCwgc3RyeGZybSBmdW5jdGlvbnMuCisgICAgLy9zdGF0aWMgYm9vbGVhbiAgb3B0X3VzZWxlbiAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X3VzZWtleXMgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X3N0cmNtcCAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X3N0cmNtcENQTyAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X25vcm0gICAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X2tleWdlbiAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X2ZyZW5jaCAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X2ZyZW5jaG9mZiAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X3NoaWZ0ZWQgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X2xvd2VyICAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X3VwcGVyICAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbGVhbiAgb3B0X2Nhc2UgICAgICAgPSBmYWxzZTsKKyAgICBzdGF0aWMgaW50ICAgICAgb3B0X2xldmVsICAgICAgPSAwOworICAgIHN0YXRpYyBib29sZWFuICBvcHRfa2V5aGlzdCAgICA9IGZhbHNlOworICAgIHN0YXRpYyBib29sZWFuICBvcHRfaXRlcnRlc3QgICA9IGZhbHNlOworICAgIHN0YXRpYyBib29sZWFuICBvcHRfZHVtcCAgICAgICA9IGZhbHNlOworICAgIHN0YXRpYyBib29sZWFuICBvcHRfamF2YSAgICAgICA9IGZhbHNlOworCisgICAgc3RhdGljIE9wdGlvblNwZWNbXSBvcHRpb25zID0geworICAgICAgICBuZXcgT3B0aW9uU3BlYygiLWZpbGUiLCAyLCB0ZW1wX29wdF9mTmFtZSksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItbG9jYWxlIiwgMiwgdGVtcF9vcHRfbG9jYWxlKSwKKyAgICAgICAgLy9uZXcgT3B0aW9uU3BlYygiLWxhbmdpZCIsIDEsIHRlbXBfb3B0X2xhbmdpZCksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItcnVsZXMiLCAyLCB0ZW1wX29wdF9ydWxlcyksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItcXNvcnQiLCAwLCB0ZW1wX29wdF9xc29ydCksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItYmluc2VhcmNoIiwgMCwgdGVtcF9vcHRfYmluc2VhcmNoKSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi1pdGVyIiwgMCwgdGVtcF9vcHRfaXRlcnRlc3QpLAorICAgICAgICAvL25ldyBPcHRpb25TcGVjKCItd2luIiwgMCwgdGVtcF9vcHRfd2luKSwKKyAgICAgICAgLy9uZXcgT3B0aW9uU3BlYygiLXVuaXgiLCAwLCB0ZW1wX29wdF91bml4KSwKKyAgICAgICAgLy9uZXcgT3B0aW9uU3BlYygiLXVzZWxlbiIsIDAsIHRlbXBfb3B0X3VzZWxlbiksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItdXNla2V5cyIsIDAsIHRlbXBfb3B0X3VzZWtleXMpLAorICAgICAgICBuZXcgT3B0aW9uU3BlYygiLXN0cmNtcCIsIDAsIHRlbXBfb3B0X3N0cmNtcCksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItc3RyY21wQ1BPIiwgMCwgdGVtcF9vcHRfc3RyY21wQ1BPKSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi1ub3JtIiwgMCwgdGVtcF9vcHRfbm9ybSksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItZnJlbmNoIiwgMCwgdGVtcF9vcHRfZnJlbmNoKSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi1mcmVuY2hvZmYiLCAwLCB0ZW1wX29wdF9mcmVuY2hvZmYpLAorICAgICAgICBuZXcgT3B0aW9uU3BlYygiLXNoaWZ0ZWQiLCAwLCB0ZW1wX29wdF9zaGlmdGVkKSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi1sb3dlciIsIDAsIHRlbXBfb3B0X2xvd2VyKSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi11cHBlciIsIDAsIHRlbXBfb3B0X3VwcGVyKSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi1jYXNlIiwgMCwgdGVtcF9vcHRfY2FzZSksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItbGV2ZWwiLCAxLCB0ZW1wX29wdF9sZXZlbCksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCIta2V5aGlzdCIsIDAsIHRlbXBfb3B0X2tleWhpc3QpLAorICAgICAgICBuZXcgT3B0aW9uU3BlYygiLWtleWdlbiIsIDAsIHRlbXBfb3B0X2tleWdlbiksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItbG9vcCIsIDEsIHRlbXBfb3B0X2xvb3BDb3VudCksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItaWxvb3AiLCAxLCB0ZW1wX29wdF9pTG9vcENvdW50KSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi10ZXJzZSIsIDAsIHRlbXBfb3B0X3RlcnNlKSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi1kdW1wIiwgMCwgdGVtcF9vcHRfZHVtcCksCisgICAgICAgIG5ldyBPcHRpb25TcGVjKCItaGVscCIsIDAsIHRlbXBfb3B0X2hlbHApLAorICAgICAgICBuZXcgT3B0aW9uU3BlYygiLT8iLCAwLCB0ZW1wX29wdF9oZWxwKSwKKyAgICAgICAgbmV3IE9wdGlvblNwZWMoIi1qYXZhIiwgMCwgdGVtcF9vcHRfamF2YSksCisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgamF2YS50ZXh0LkNvbGxhdG9yIGphdmFDb2wgPSBudWxsOworICAgIHN0YXRpYyBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yIGljdUNvbCA9IG51bGw7CisgICAgc3RhdGljIE51bWJlckZvcm1hdCBuZiA9IG51bGw7CisgICAgc3RhdGljIE51bWJlckZvcm1hdCBwZXJjZW50ID0gbnVsbDsKKyAgICBBcnJheUxpc3QgbGlzdCA9IG51bGw7CisgICAgU3RyaW5nW10gdGVzdHMgPSBudWxsOworICAgIGludCBnbG9iYWxDb3VudCA9IDA7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBDb2xsYXRpb25QZXJmb3JtYW5jZVRlc3QgY29sbFBlcmYgPSBuZXcgQ29sbGF0aW9uUGVyZm9ybWFuY2VUZXN0KCk7CisgICAgICAgIGlmICggIWNvbGxQZXJmLnByb2Nlc3NPcHRpb25zKGFyZ3MpIHx8IG9wdF9oZWxwIHx8IG9wdF9mTmFtZS5sZW5ndGgoKT09MCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHVzYWdlU3RyaW5nKTsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBuZiA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworICAgICAgICBuZi5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoMik7CisgICAgICAgIHBlcmNlbnQgPSBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEluc3RhbmNlKCk7CisgICAgICAgIAorICAgICAgICBjb2xsUGVyZi5zZXRPcHRpb25zKCk7CisgICAgICAgIGNvbGxQZXJmLnJlYWREYXRhTGluZXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvcHRfZHVtcCkgeworICAgICAgICAgICAgY29sbFBlcmYuZG9EdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvcHRfcXNvcnQpIHsKKyAgICAgICAgICAgIGNvbGxQZXJmLmRvUVNvcnQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9wdF9iaW5zZWFyY2gpIHsKKyAgICAgICAgICAgIGNvbGxQZXJmLmRvQmluYXJ5U2VhcmNoKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvcHRfa2V5Z2VuKSB7CisgICAgICAgICAgICBjb2xsUGVyZi5kb0tleUdlbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3B0X2tleWhpc3QpIHsKKyAgICAgICAgICAgIGNvbGxQZXJmLmRvS2V5SGlzdCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3B0X2l0ZXJ0ZXN0KSB7CisgICAgICAgICAgICBjb2xsUGVyZi5kb0l0ZXJUZXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIAorICAgIC8vRHVtcCBmaWxlIGxpbmVzLCBDRXMsIFNvcnQgS2V5cyBpZiByZXF1ZXN0ZWQKKyAgICB2b2lkIGRvRHVtcCgpIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIC8vcHJpbnQgdGhlIGxpbmUKKyAgICAgICAgICAgIFN0cmluZyBsaW5lID0gY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5LmVzY2FwZSgoU3RyaW5nKWxpc3QuZ2V0KGkpKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICBDRXM6ICAiKTsKKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBDRWl0ZXIgPSAoKGNvbS5pYm0uaWN1LnRleHQuUnVsZUJhc2VkQ29sbGF0b3IpaWN1Q29sKS5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IobGluZSk7CisgICAgICAgICAgICBpbnQgY2U7CisgICAgICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgICAgICBjZSA9IENFaXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludCgpOworICAgICAgICAgICAgICAgIFN0cmluZyBvdXRTdHIgPSBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNlKTsgCisgICAgICAgICAgICAgICAgZm9yIChpbnQgbGVuID0gMDsgbGVuIDwgOCAtIG91dFN0ci5sZW5ndGgoKTsgbGVuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0U3RyID0nMCcgKyBvdXRTdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQob3V0U3RyICsgIiAgIik7CisgICAgICAgICAgICAgICAgaWYoKytqID44KSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuICAgICAgICAiKTsKKyAgICAgICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4gICBJQ1UgU29ydCBLZXk6ICIpOworICAgICAgICAgICAgQ29sbGF0aW9uS2V5IGNrID0gKChjb20uaWJtLmljdS50ZXh0LlJ1bGVCYXNlZENvbGxhdG9yKWljdUNvbCkuZ2V0Q29sbGF0aW9uS2V5KGxpbmUpOworICAgICAgICAgICAgYnl0ZVtdIGNrcyA9IGNrLnRvQnl0ZUFycmF5KCk7CisgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCBja3MubGVuZ3RoOyBrKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgb3V0U3RyID0gSW50ZWdlci50b0hleFN0cmluZyhja3Nba10pOworICAgICAgICAgICAgICAgIHN3aXRjaCAob3V0U3RyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgb3V0U3RyID0gJzAnICsgb3V0U3RyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgODogICAgIG91dFN0ciA9IG91dFN0ci5zdWJzdHJpbmcoNik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KG91dFN0cik7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICAiKTsKKyAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgaWYoaiA+IDAgJiYgaiAlIDIwID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4gICAgICAgICAgICAgICAgICIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKgorICAgICAqICAgZG9RU29ydCgpICAgIFRoZSBxdWljayBzb3J0IHRpbWluZyB0ZXN0LgorICAgICAqCisgICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKyAgICB2b2lkIGRvUVNvcnQoKSB7CisgICAgICAgIGNhbGxHQygpOworICAgICAgICBTdHJpbmdbXSBzb3J0VGVzdHMgPSAoU3RyaW5nW10pIHRlc3RzLmNsb25lKCk7CisgICAgICAgIC8vQWRqdXN0IGxvb3AgY291bnQgdG8gY29tcGVuc2F0ZSBmb3IgZmlsZSBzaXplLiBRU29ydCBzaG91bGQgYmUgbmxvZyhuKSAKKyAgICAgICAgZG91YmxlIGRMb29wQ291bnQgPSBvcHRfbG9vcENvdW50ICogMzAwMCAvICgoTWF0aC5sb2codGVzdHMubGVuZ3RoKSAvIE1hdGgubG9nKDEwKSogdGVzdHMubGVuZ3RoKSk7CisgCisgICAgICAgIGlmKG9wdF91c2VrZXlzKSB7CisgICAgICAgICAgICBkTG9vcENvdW50ICo9IDU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBhZGpfbG9vcENvdW50ID0gKGludClkTG9vcENvdW50OworICAgICAgICBpZihhZGpfbG9vcENvdW50IDwgMSkgeworICAgICAgICAgICAgYWRqX2xvb3BDb3VudCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGdsb2JhbENvdW50ID0gMDsKKyAgICAgICAgbG9uZyBzdGFydFRpbWUgPSAwOworICAgICAgICBsb25nIGVuZFRpbWUgPSAwOworICAgICAgICBpZiAob3B0X2ljdSAmJiBvcHRfdXNla2V5cykgeworICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgICBxU29ydEltcGxfaWN1X3VzZWtleXModGVzdHMsIDAsIHRlc3RzLmxlbmd0aCAtMSwgaWN1Q29sKTsKKyAgICAgICAgICAgIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3B0X2ljdSAmJiAhb3B0X3VzZWtleXMpeworICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgICBxU29ydEltcGxfbm9rZXlzKHRlc3RzLCAwLCB0ZXN0cy5sZW5ndGggLTEsIGljdUNvbCk7CisgICAgICAgICAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdF9qYXZhICYmIG9wdF91c2VrZXlzKSB7CisgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIHFTb3J0SW1wbF9qYXZhX3VzZWtleXModGVzdHMsIDAsIHRlc3RzLmxlbmd0aCAtMSwgamF2YUNvbCk7CisgICAgICAgICAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdF9qYXZhICYmICFvcHRfdXNla2V5cyl7CisgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIHFTb3J0SW1wbF9ub2tleXModGVzdHMsIDAsIHRlc3RzLmxlbmd0aCAtMSwgamF2YUNvbCk7CisgICAgICAgICAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIH0KKyAgICAgICAgbG9uZyBlbGFwc2VkVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7CisgICAgICAgIGludCBucyA9IChpbnQpKDEwMDAwMDAgKiBlbGFwc2VkVGltZSAvIChnbG9iYWxDb3VudCArIDAuMCkpOworICAgICAgICBpZiAoIW9wdF90ZXJzZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJxc29ydDogIHRvdGFsICMgb2Ygc3RyaW5nIGNvbXBhcmVzID0gIiArIGdsb2JhbENvdW50KTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicXNvcnQ6ICB0aW1lIHBlciBjb21wYXJlID0gIiArIG5zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihucyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICoKKyAgICAgKiAgICBkb0JpbmFyeVNlYXJjaCgpICAgIEJpbmFyeSBTZWFyY2ggdGltaW5nIHRlc3QuICBFYWNoIG5hbWUgZnJvbSB0aGUgbGlzdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgaXMgbG9va2VkIHVwIGluIHRoZSBmdWxsIHNvcnRlZCBsaXN0IG9mIG5hbWVzLgorICAgICAqCisgICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKyAgICB2b2lkIGRvQmluYXJ5U2VhcmNoKCkgeworICAgICAgICBjYWxsR0MoKTsKKyAgICAgICAgaW50IGdDb3VudCA9IDA7CisgICAgICAgIGludCBsb29wcyA9IDA7CisgICAgICAgIGRvdWJsZSBkTG9vcENvdW50ID0gb3B0X2xvb3BDb3VudCAqIDMwMDAgLyAoTWF0aC5sb2codGVzdHMubGVuZ3RoKSAvIE1hdGgubG9nKDEwKSogdGVzdHMubGVuZ3RoKTsKKyAgICAgICAgbG9uZyBzdGFydFRpbWUgPSAwOworICAgICAgICBsb25nIGVsYXBzZWRUaW1lID0gMDsKKyAgICAgICAgCisgICAgICAgIGlmKG9wdF91c2VrZXlzKSB7CisgICAgICAgICAgICBkTG9vcENvdW50ICo9IDU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGFkal9sb29wQ291bnQgPSAoaW50KWRMb29wQ291bnQ7CisgICAgICAgIGlmKGFkal9sb29wQ291bnQgPCAxKSB7CisgICAgICAgICAgICBhZGpfbG9vcENvdW50ID0gMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy9pbnQgb3B0MiA9IDA7CisgICAgICAgIAorICAgICAgICBmb3IoOzspIHsgICAvL25vdCByZWFsbHkgYSBsb29wLCBqdXN0IGFsbG93cyAiYnJlYWsiIHRvIHdvcmssIHRvIHNpbXBsaWZ5IAorICAgICAgICAgICAgICAgICAgICAvL2luYWR2ZXJ0YW50bHkgcnVubmluZyBtb3JlIHRoYW4gb25lIHRlc3QgdGhyb3VnaCBoZXJlCisgICAgICAgICAgICBpZihvcHRfc3RyY21wKSB7CisgICAgICAgICAgICAgICAgaW50IHIgPSAwOworICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAgICAgICAgIGZvcihsb29wcyA9IDA7IGxvb3BzIDwgYWRqX2xvb3BDb3VudDsgbG9vcHMrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHRlc3RzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGkgPSB0ZXN0cy5sZW5ndGgtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsbyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ3Vlc3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXdHdWVzcyA9IChoaSArIGxvKSAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3R3Vlc3MgPT0gZ3Vlc3MpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3MgPSBuZXdHdWVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gdGVzdHNbal0uY29tcGFyZVRvKHRlc3RzW2d1ZXNzXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0NvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYociA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGkgPSBndWVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbyA9IGd1ZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbGFwc2VkVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAob3B0X3N0cmNtcENQTykgeworICAgICAgICAgICAgICAgIGludCByID0gMDsKKyAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgICAgICBmb3IobG9vcHMgPSAwOyBsb29wcyA8IGFkal9sb29wQ291bnQ7IGxvb3BzKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0ZXN0cy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhpID0gdGVzdHMubGVuZ3RoLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG8gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGd1ZXNzID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmV3R3Vlc3MgPSAoaGkgKyBsbykgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5ld0d1ZXNzID09IGd1ZXNzKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXNzID0gbmV3R3Vlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGNvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplci5jb21wYXJlKHRlc3RzW2pdLCB0ZXN0c1tndWVzc10sIE5vcm1hbGl6ZXIuQ09NUEFSRV9DT0RFX1BPSU5UX09SREVSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaSA9IGd1ZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvID0gZ3Vlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvcHRfaWN1KSB7CisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnQgciA9IDA7CisgICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgICAgICAgZm9yIChsb29wcyA9IDA7IGxvb3BzIDwgYWRqX2xvb3BDb3VudDsgbG9vcHMrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHRlc3RzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb20uaWJtLmljdS50ZXh0LkNvbGxhdGlvbktleSBzb3J0S2V5MSA9IGljdUNvbC5nZXRDb2xsYXRpb25LZXkodGVzdHNbal0pOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhpID0gdGVzdHMubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsbyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ3Vlc3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmV3R3Vlc3MgPSAoaGkgKyBsbykgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdHdWVzcyA9PSBndWVzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3MgPSBuZXdHdWVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uaWJtLmljdS50ZXh0LkNvbGxhdGlvbktleSBzb3J0S2V5MiA9IGljdUNvbC5nZXRDb2xsYXRpb25LZXkodGVzdHNbZ3Vlc3NdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0X3VzZWtleXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNvcnRLZXkxLmNvbXBhcmVUbyhzb3J0S2V5Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdDb3VudCArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gaWN1Q29sLmNvbXBhcmUodGVzdHNbal0sIHRlc3RzW2d1ZXNzXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGkgPSBndWVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbyA9IGd1ZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbGFwc2VkVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wdF9qYXZhKSB7CisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnQgciA9IDA7CisgICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgICAgICAgZm9yIChsb29wcyA9IDA7IGxvb3BzIDwgYWRqX2xvb3BDb3VudDsgbG9vcHMrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHRlc3RzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnRleHQuQ29sbGF0aW9uS2V5IHNvcnRLZXkxID0gamF2YUNvbC5nZXRDb2xsYXRpb25LZXkodGVzdHNbal0pOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhpID0gdGVzdHMubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsbyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ3Vlc3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmV3R3Vlc3MgPSAoaGkgKyBsbykgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdHdWVzcyA9PSBndWVzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3MgPSBuZXdHdWVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnRleHQuQ29sbGF0aW9uS2V5IHNvcnRLZXkyID0gamF2YUNvbC5nZXRDb2xsYXRpb25LZXkodGVzdHNbZ3Vlc3NdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0X3VzZWtleXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNvcnRLZXkxLmNvbXBhcmVUbyhzb3J0S2V5Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdDb3VudCArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gamF2YUNvbC5jb21wYXJlKHRlc3RzW2pdLCB0ZXN0c1tndWVzc10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpID0gZ3Vlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG8gPSBndWVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgfQorICAgICAgICBpbnQgbnMgPSAoaW50KSgoZmxvYXQpKDEwMDAwMDApICogKGZsb2F0KWVsYXBzZWRUaW1lIC8gKGZsb2F0KWdDb3VudCk7CisgICAgICAgIGlmICghb3B0X3RlcnNlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJpbmFyeSBzZWFyY2g6ICB0b3RhbCAjIG9mIHN0cmluZyBjb21wYXJlcyA9ICIgKyBnQ291bnQpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiaW5hcnkgc2VhcmNoOiAgY29tcGFyZXMgcGVyIGxvb3AgPSAiICsgZ0NvdW50IC8gbG9vcHMpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiaW5hcnkgc2VhcmNoOiAgdGltZSBwZXIgY29tcGFyZSA9ICIgKyBucyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obnMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqCisgICAgICogICBkb0tleUdlbigpICAgICBLZXkgR2VuZXJhdGlvbiBUaW1pbmcgVGVzdAorICAgICAqCisgICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKyAgICB2b2lkIGRvS2V5R2VuKCkgeworICAgICAgICBjYWxsR0MoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkanVzdCBsb29wIGNvdW50IHRvIGNvbXBlbnNhdGUgZm9yIGZpbGUgc2l6ZS4gICBTaG91bGQgYmUgb3JkZXIgbgorICAgICAgICBkb3VibGUgZExvb3BDb3VudCA9IG9wdF9sb29wQ291bnQgKiAoMTAwMC4wIC8gIChkb3VibGUpbGlzdC5zaXplKCkpOworICAgICAgICBpbnQgYWRqX2xvb3BDb3VudCA9IChpbnQpZExvb3BDb3VudDsKKyAgICAgICAgaWYgKGFkal9sb29wQ291bnQgPCAxKSBhZGpfbG9vcENvdW50ID0gMTsKKworICAgICAgICBsb25nIHN0YXJ0VGltZSA9IDA7CisgICAgICAgIGxvbmcgdG90YWxLZXlMZW4gPSAwOworICAgICAgICBsb25nIHRvdGFsQ2hhcnMgPSAwOworICAgICAgICBpZiAob3B0X2phdmEpIHsKKyAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAgICAgZm9yIChpbnQgbG9vcHM9MDsgbG9vcHM8YWRqX2xvb3BDb3VudDsgbG9vcHMrKykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGxpbmU9MDsgbGluZSA8IHRlc3RzLmxlbmd0aDsgbGluZSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGlMb29wPTA7IGlMb29wIDwgb3B0X2lMb29wQ291bnQ7IGlMb29wKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgKz0gdGVzdHNbbGluZV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gc29ydEtleSA9IGphdmFDb2wuZ2V0Q29sbGF0aW9uS2V5KHRlc3RzW2xpbmVdKS50b0J5dGVBcnJheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxLZXlMZW4gKz0gc29ydEtleS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGxvb3BzPTA7IGxvb3BzPGFkal9sb29wQ291bnQ7IGxvb3BzKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBsaW5lPTA7IGxpbmUgPCB0ZXN0cy5sZW5ndGg7IGxpbmUrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpTG9vcD0wOyBpTG9vcCA8IG9wdF9pTG9vcENvdW50OyBpTG9vcCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzICs9IHRlc3RzW2xpbmVdLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIHNvcnRLZXkgPSBpY3VDb2wuZ2V0Q29sbGF0aW9uS2V5KHRlc3RzW2xpbmVdKS50b0J5dGVBcnJheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxLZXlMZW4gKz0gc29ydEtleS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvbmcgZWxhcHNlZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgbG9uZyBucyA9IChsb25nKSgxMDAwMDAwICogZWxhcHNlZFRpbWUgLyAoYWRqX2xvb3BDb3VudCAqIHRlc3RzLmxlbmd0aCArIDAuMCkpOworICAgICAgICBpZiAoIW9wdF90ZXJzZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTb3J0IEtleSBHZW5lcmF0aW9uOiAgdG90YWwgIyBvZiBrZXlzID0iICsgYWRqX2xvb3BDb3VudCAqIHRlc3RzLmxlbmd0aCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNvcnQgS2V5IEdlbmVyYXRpb246ICB0aW1lIHBlciBrZXkgPSAiICsgbnMgKyAiIG5zIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIktleSBMZW5ndGggLyBjaGFyYWN0ZXIgPSAiICsgbmYuZm9ybWF0KHRvdGFsS2V5TGVuIC8gKHRvdGFsQ2hhcnMgKyAwLjApKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obnMgKyAiLCAgIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmYuZm9ybWF0KHRvdGFsS2V5TGVuIC8gKHRvdGFsQ2hhcnMgKyAwLjApKSArICIsICIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICoKKyAgICAgKiAgICBkb0tleUhpc3QoKSAgICAgICBPdXRwdXQgYSB0YWJsZSBvZiBkYXRhIGZvciBhdmVyYWdlIHNvcnQga2V5IHNpemUgdnMuIHN0cmluZyBsZW5ndGguCisgICAgICoKKyAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqLworICAgIHZvaWQgZG9LZXlIaXN0KCkgeworICAgICAgICBjYWxsR0MoKTsKKyAgICAgICAgaW50ICAgICBtYXhMZW4gPSAwOworCisgICAgICAgIC8vIEZpbmQgdGhlIG1heGltdW0gc3RyaW5nIGxlbmd0aAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAodGVzdHNbaV0ubGVuZ3RoKCkgPiBtYXhMZW4pIG1heExlbiA9IHRlc3RzW2ldLmxlbmd0aCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnRbXSBhY2N1bXVsYXRlZExlbiAgPSBuZXcgaW50W21heExlbiArIDFdOworICAgICAgICBpbnRbXSBudW1LZXlzT2ZTaXplICAgPSBuZXcgaW50W21heExlbiArIDFdOworICAgICAgICAKKyAgICAgICAgLy8gRmlsbCB0aGUgYXJyYXlzLi4uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGludCBsZW4gPSB0ZXN0c1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVkTGVuW2xlbl0gKz0gaWN1Q29sLmdldENvbGxhdGlvbktleSh0ZXN0c1tpXSkudG9CeXRlQXJyYXkoKS5sZW5ndGg7CisgICAgICAgICAgICBudW1LZXlzT2ZTaXplW2xlbl0gICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFuZCB3cml0ZSBvdXQgYXZlcmFnZXMKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdHJpbmcgTGVuZ3RoLCAgQXZnIEtleSBMZW5ndGgsICBBdmcgS2V5IExlbiBwZXIgY2hhciIpOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtYXhMZW47IGkrKykgeworICAgICAgICAgICAgaWYgKG51bUtleXNPZlNpemVbaV0gPiAwKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiLCAiICsgbmYuZm9ybWF0KGFjY3VtdWxhdGVkTGVuW2ldIC8gKG51bUtleXNPZlNpemVbaV0rIDAuMCkpICsgIiwgIiAKKyAgICAgICAgICAgICAgICAgICAgKyBuZi5mb3JtYXQoYWNjdW11bGF0ZWRMZW5baV0gLyAobnVtS2V5c09mU2l6ZVtpXSAqIGkgKyAwLjApKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIAorICAgIHZvaWQgZG9Gb3J3YXJkSXRlclRlc3QoKSB7CisgICAgICAgIGNhbGxHQygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcblxuUGVyZm9ybWluZyBmb3J3YXJkIGl0ZXJhdGlvbiBwZXJmb3JtYW5jZSB0ZXN0IHdpdGggIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGVyZm9ybWFuY2UgdGVzdCBvbiBzdHJpbmdzIGZyb20gZmlsZSAtLS0tLS0tLS0tLSIpOworICAgIAorICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXRlciA9ICgoUnVsZUJhc2VkQ29sbGF0b3IpaWN1Q29sKS5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoIiIpOworICAgICAgICAKKyAgICAgICAgaW50IGdDb3VudCA9IDA7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIHdoaWxlIChjb3VudCA8IG9wdF9sb29wQ291bnQpIHsKKyAgICAgICAgICAgIGludCBsaW5lY291bnQgPSAwOworICAgICAgICAgICAgd2hpbGUgKGxpbmVjb3VudCA8IHRlc3RzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSB0ZXN0c1tsaW5lY291bnRdOworICAgICAgICAgICAgICAgIGl0ZXIuc2V0VGV4dChzdHIpOworICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyLm5leHQoKSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgIGdDb3VudCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lY291bnQgKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbG9uZyBlbGFwc2VkVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVsYXBzZWRUaW1lICIgKyBlbGFwc2VkVGltZSArICIgbXMiKTsKKyAgICAgICAgCisgICAgICAgIC8vIGVtcHR5IGxvb3AgcmVjYWxjdWxhdGlvbgorICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICB3aGlsZSAoY291bnQgPCBvcHRfbG9vcENvdW50KSB7IAorICAgICAgICAgICAgaW50IGxpbmVjb3VudCA9IDA7CisgICAgICAgICAgICB3aGlsZSAobGluZWNvdW50IDwgdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IHRlc3RzW2xpbmVjb3VudF07CisgICAgICAgICAgICAgICAgaXRlci5zZXRUZXh0KHN0cik7CisgICAgICAgICAgICAgICAgbGluZWNvdW50ICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKyAgICAgICAgZWxhcHNlZFRpbWUgLT0gKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbGFwc2VkVGltZSAiICsgZWxhcHNlZFRpbWUgKyAiIG1zIik7CisKKyAgICAgICAgaW50IG5zID0gKGludCkoMTAwMDAwMCAqIGVsYXBzZWRUaW1lIC8gKGdDb3VudCArIDAuMCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIG51bWJlciBvZiBzdHJpbmdzIGNvbXBhcmVkICIgKyB0ZXN0cy5sZW5ndGggCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiaW4gIiArIG9wdF9sb29wQ291bnQgKyAiIGxvb3BzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXZlcmFnZSB0aW1lIHBlciBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IubmV4dCgpIG5hbm8gc2Vjb25kcyAiICsgbnMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBlcmZvcm1hbmNlIHRlc3Qgb24gc2tpcHBlZC01IGNvbmNhdGVuYXRlZCBzdHJpbmdzIGZyb20gZmlsZSAtLS0tLS0tLS0tLSIpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRvdGFsU3RyID0gIiI7CisgICAgICAgIGludCAgICBzdHJsZW4gPSAwOworICAgICAgICAvLyBhcHBlbmRpbmcgYWxsIHRoZSBzdHJpbmdzCisgICAgICAgIGludCBsaW5lY291bnQgPSAwOworICAgICAgICB3aGlsZSAobGluZWNvdW50IDwgdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICB0b3RhbFN0ciArPSB0ZXN0c1tsaW5lY291bnRdOworICAgICAgICAgICAgc3RybGVuICs9IHRlc3RzW2xpbmVjb3VudF0ubGVuZ3RoKCk7CisgICAgICAgICAgICBsaW5lY291bnQgKys7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBzaXplIG9mIHN0cmluZ3MgIiArIHN0cmxlbik7CisgICAgICAgIAorICAgICAgICBnQ291bnQgPSAwOworICAgICAgICBjb3VudCAgPSAwOworICAgICAgICBpdGVyID0gKChSdWxlQmFzZWRDb2xsYXRvcilpY3VDb2wpLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0b3RhbFN0cik7CisgICAgICAgIHN0cmxlbiAtPSA1OyAvLyBhbnkgbGVmdCBvdmVyIGNoYXJhY3RlcnMgYXJlIG5vdCBpdGVyYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdG8gZW5zdXJlIHRoZSBiYWNrd2FyZHMgYW5kIGZvcndhcmRzIGl0ZXJhdG9ycworICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0cyB0aGUgc2FtZSBwb3NpdGlvbgorICAgICAgICBpbnQgc3RyaW5kZXggPSAwOworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgd2hpbGUgKGNvdW50IDwgb3B0X2xvb3BDb3VudCkgeworICAgICAgICAgICAgaW50IGNvdW50NSA9IDU7CisgICAgICAgICAgICBzdHJpbmRleCA9IDA7CisgICAgICAgICAgICBpdGVyLnNldE9mZnNldChzdHJpbmRleCk7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIGlmIChpdGVyLm5leHQoKSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnQ291bnQrKzsKKyAgICAgICAgICAgICAgICBjb3VudDUgLS07CisgICAgICAgICAgICAgICAgaWYgKGNvdW50NSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmluZGV4ICs9IDEwOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5kZXggPiBzdHJsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGl0ZXIuc2V0T2Zmc2V0KHN0cmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQ1ID0gNTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgIAorICAgICAgICBlbGFwc2VkVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVsYXBzZWRUaW1lICIgKyBlbGFwc2VkVGltZSk7CisgICAgICAgIAorICAgICAgICAvLyBlbXB0eSBsb29wIHJlY2FsY3VsYXRpb24KKyAgICAgICAgaW50IHRlbXBnQ291bnQgPSAwOworICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICB3aGlsZSAoY291bnQgPCBvcHRfbG9vcENvdW50KSB7CisgICAgICAgICAgICBpbnQgY291bnQ1ID0gNTsKKyAgICAgICAgICAgIHN0cmluZGV4ID0gMDsKKyAgICAgICAgICAgIGl0ZXIuc2V0T2Zmc2V0KHN0cmluZGV4KTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdGVtcGdDb3VudCArKzsKKyAgICAgICAgICAgICAgICBjb3VudDUgLS07CisgICAgICAgICAgICAgICAgaWYgKGNvdW50NSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmluZGV4ICs9IDEwOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5kZXggPiBzdHJsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGl0ZXIuc2V0T2Zmc2V0KHN0cmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQ1ID0gNTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgICAgICBlbGFwc2VkVGltZSAtPSAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVsYXBzZWRUaW1lICIgKyBlbGFwc2VkVGltZSk7CisgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ0NvdW50ICIgKyBnQ291bnQpOworICAgICAgICBucyA9IChpbnQpKDEwMDAwMDAgKiBlbGFwc2VkVGltZSAvIChnQ291bnQgKyAwLjApKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdmVyYWdlIHRpbWUgcGVyIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5uZXh0KCkgbmFubyBzZWNvbmRzICIgKyBucyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZG9CYWNrd2FyZEl0ZXJUZXN0KCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcblxuUGVyZm9ybWluZyBiYWNrd2FyZCBpdGVyYXRpb24gcGVyZm9ybWFuY2UgdGVzdCB3aXRoICIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBlcmZvcm1hbmNlIHRlc3Qgb24gc3RyaW5ncyBmcm9tIGZpbGUgLS0tLS0tLS0tLS1cbiIpOworICAgICAgICAKKyAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXIgPSAoKFJ1bGVCYXNlZENvbGxhdG9yKWljdUNvbCkuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKCIiKTsKKyAgICAgICAgCisgICAgICAgIGludCBnQ291bnQgPSAwOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICB3aGlsZSAoY291bnQgPCBvcHRfbG9vcENvdW50KSB7CisgICAgICAgICAgICBpbnQgbGluZWNvdW50ID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lY291bnQgPCB0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RyID0gdGVzdHNbbGluZWNvdW50XTsKKyAgICAgICAgICAgICAgICBpdGVyLnNldFRleHQoc3RyKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5wcmV2aW91cygpICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgICAgICAgICAgZ0NvdW50Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVjb3VudCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisgICAgICAgIGxvbmcgZWxhcHNlZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbGFwc2VkVGltZSAiICsgZWxhcHNlZFRpbWUgKyAiIG1zIik7CisgICAgICAgIAorICAgICAgICAvLyBlbXB0eSBsb29wIHJlY2FsY3VsYXRpb24KKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgd2hpbGUgKGNvdW50IDwgb3B0X2xvb3BDb3VudCkgeworICAgICAgICAgICAgaW50IGxpbmVjb3VudCA9IDA7CisgICAgICAgICAgICB3aGlsZSAobGluZWNvdW50IDwgdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IHRlc3RzW2xpbmVjb3VudF07CisgICAgICAgICAgICAgICAgaXRlci5zZXRUZXh0KHN0cik7CisgICAgICAgICAgICAgICAgbGluZWNvdW50ICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKyAgICAgICAgZWxhcHNlZFRpbWUgLT0gKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbGFwc2VkVGltZSAiICsgZWxhcHNlZFRpbWUgKyAiIG1zIik7CisgICAgICAgIAorICAgICAgICBpbnQgbnMgPSAoaW50KSgxMDAwMDAwICogZWxhcHNlZFRpbWUgLyAoZ0NvdW50ICsgMC4wKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgbnVtYmVyIG9mIHN0cmluZ3MgY29tcGFyZWQgIiArIHRlc3RzLmxlbmd0aCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJpbiAiICsgb3B0X2xvb3BDb3VudCArICIgbG9vcHMiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdmVyYWdlIHRpbWUgcGVyIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5wcmV2aW91cygpIG5hbm8gc2Vjb25kcyAiICsgbnMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBlcmZvcm1hbmNlIHRlc3Qgb24gc2tpcHBlZC01IGNvbmNhdGVuYXRlZCBzdHJpbmdzIGZyb20gZmlsZSAtLS0tLS0tLS0tLSIpOworICAgIAorICAgICAgICBTdHJpbmcgdG90YWxTdHIgPSAiIjsKKyAgICAgICAgaW50ICAgIHN0cmxlbiA9IDA7CisgICAgICAgIC8vIGFwcGVuZGluZyBhbGwgdGhlIHN0cmluZ3MKKyAgICAgICAgaW50IGxpbmVjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChsaW5lY291bnQgPCB0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRvdGFsU3RyICs9IHRlc3RzW2xpbmVjb3VudF07CisgICAgICAgICAgICBzdHJsZW4gKz0gdGVzdHNbbGluZWNvdW50XS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGxpbmVjb3VudCArKzsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHNpemUgb2Ygc3RyaW5ncyAiICsgc3RybGVuKTsKKyAgICAgICAgCisgICAgICAgIGdDb3VudCA9IDA7CisgICAgICAgIGNvdW50ICA9IDA7CisgICAgCisgICAgICAgIGl0ZXIgPSAoKFJ1bGVCYXNlZENvbGxhdG9yKWljdUNvbCkuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHRvdGFsU3RyKTsKKyAgICAgICAgaW50IHN0cmluZGV4ID0gMDsKKyAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIHdoaWxlIChjb3VudCA8IG9wdF9sb29wQ291bnQpIHsKKyAgICAgICAgICAgIGludCBjb3VudDUgPSA1OworICAgICAgICAgICAgc3RyaW5kZXggPSA1OworICAgICAgICAgICAgaXRlci5zZXRPZmZzZXQoc3RyaW5kZXgpOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlci5wcmV2aW91cygpID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBnQ291bnQgKys7CisgICAgICAgICAgICAgICAgIGNvdW50NSAtLTsKKyAgICAgICAgICAgICAgICAgaWYgKGNvdW50NSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICBzdHJpbmRleCArPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmRleCA+IHN0cmxlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBpdGVyLnNldE9mZnNldChzdHJpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICBjb3VudDUgPSA1OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgIAorICAgICAgICBlbGFwc2VkVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVsYXBzZWRUaW1lICIgKyBlbGFwc2VkVGltZSk7CisgICAgICAgIAorICAgICAgICAvLyBlbXB0eSBsb29wIHJlY2FsY3VsYXRpb24KKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBpbnQgdGVtcGdDb3VudCA9IDA7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICB3aGlsZSAoY291bnQgPCBvcHRfbG9vcENvdW50KSB7CisgICAgICAgICAgICBpbnQgY291bnQ1ID0gNTsKKyAgICAgICAgICAgIHN0cmluZGV4ID0gNTsKKyAgICAgICAgICAgIGl0ZXIuc2V0T2Zmc2V0KHN0cmluZGV4KTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgIHRlbXBnQ291bnQgKys7CisgICAgICAgICAgICAgICAgIGNvdW50NSAtLTsKKyAgICAgICAgICAgICAgICAgaWYgKGNvdW50NSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICBzdHJpbmRleCArPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmRleCA+IHN0cmxlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBpdGVyLnNldE9mZnNldChzdHJpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICBjb3VudDUgPSA1OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgICAgICBlbGFwc2VkVGltZSAtPSAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVsYXBzZWRUaW1lICIgKyBlbGFwc2VkVGltZSk7CisgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ0NvdW50ICIgKyBnQ291bnQpOworICAgICAgICBucyA9IChpbnQpKDEwMDAwMDAgKiBlbGFwc2VkVGltZSAvIChnQ291bnQgKyAwLjApKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdmVyYWdlIHRpbWUgcGVyIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5wcmV2aW91cygpIG5hbm8gc2Vjb25kcyAiICsgbnMpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKgorICAgICAqICAgIGRvSXRlclRlc3QoKSAgICAgICBJdGVyYXRpb24gdGVzdAorICAgICAqCisgICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKyAgICB2b2lkIGRvSXRlclRlc3QoKSB7CisgICAgICAgIGRvRm9yd2FyZEl0ZXJUZXN0KCk7CisgICAgICAgIGRvQmFja3dhcmRJdGVyVGVzdCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldE9wdGlvbnMoKSB7CisgICAgICAgIAorICAgICAgICBpZiAob3B0X2phdmEpIHsKKyAgICAgICAgICAgIG9wdF9pY3UgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9wdF9ydWxlcy5sZW5ndGgoKSAhPSAwKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGljdUNvbCA9IG5ldyBjb20uaWJtLmljdS50ZXh0LlJ1bGVCYXNlZENvbGxhdG9yKGdldENvbGxhdGlvblJ1bGVzKG9wdF9ydWxlcykpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbm5vdCBvcGVuIHJ1bGVzOiIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpY3VDb2wgPSBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUob3B0X2xvY2FsZSwgIiIpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgamF2YUNvbCA9IGphdmEudGV4dC5Db2xsYXRvci5nZXRJbnN0YW5jZShuZXcgTG9jYWxlKG9wdF9sb2NhbGUsICIiKSk7CisgICAgICAgIAorICAgICAgICBpZiAob3B0X25vcm0pIHsKKyAgICAgICAgICAgIGphdmFDb2wuc2V0RGVjb21wb3NpdGlvbihqYXZhLnRleHQuQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pOworICAgICAgICAgICAgaWN1Q29sLnNldERlY29tcG9zaXRpb24oY29tLmlibS5pY3UudGV4dC5Db2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvcHRfZnJlbmNoICYmIG9wdF9mcmVuY2hvZmYpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3I6IHNwZWNpZmllZCBib3RoIC1mcmVuY2ggYW5kIC1mcmVuY2hvZmYgb3B0aW9ucy4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9wdF9mcmVuY2gpIHsKKyAgICAgICAgICAgICgoY29tLmlibS5pY3UudGV4dC5SdWxlQmFzZWRDb2xsYXRvcilpY3VDb2wpLnNldEZyZW5jaENvbGxhdGlvbih0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3B0X2ZyZW5jaG9mZikgeworICAgICAgICAgICAgKChjb20uaWJtLmljdS50ZXh0LlJ1bGVCYXNlZENvbGxhdG9yKWljdUNvbCkuc2V0RnJlbmNoQ29sbGF0aW9uKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9wdF9sb3dlcikgeworICAgICAgICAgICAgKChjb20uaWJtLmljdS50ZXh0LlJ1bGVCYXNlZENvbGxhdG9yKWljdUNvbCkuc2V0TG93ZXJDYXNlRmlyc3QodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvcHRfdXBwZXIpIHsKKyAgICAgICAgICAgICgoY29tLmlibS5pY3UudGV4dC5SdWxlQmFzZWRDb2xsYXRvcilpY3VDb2wpLnNldFVwcGVyQ2FzZUZpcnN0KHRydWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3B0X3NoaWZ0ZWQpIHsKKyAgICAgICAgICAgICgoY29tLmlibS5pY3UudGV4dC5SdWxlQmFzZWRDb2xsYXRvcilpY3VDb2wpLnNldEFsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9wdF9sZXZlbCAhPSAwKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wdF9sZXZlbCkgeworICAgICAgICAgICAgICAgIGNhc2UgMSA6CisgICAgICAgICAgICAgICAgICAgICAgICBqYXZhQ29sLnNldFN0cmVuZ3RoKGphdmEudGV4dC5Db2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGljdUNvbC5zZXRTdHJlbmd0aChjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yLlBSSU1BUlkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGphdmFDb2wuc2V0U3RyZW5ndGgoamF2YS50ZXh0LkNvbGxhdG9yLlNFQ09OREFSWSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpY3VDb2wuc2V0U3RyZW5ndGgoY29tLmlibS5pY3UudGV4dC5Db2xsYXRvci5TRUNPTkRBUlkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGphdmFDb2wuc2V0U3RyZW5ndGgoamF2YS50ZXh0LkNvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGljdUNvbC5zZXRTdHJlbmd0aChjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNCA6CisgICAgICAgICAgICAgICAgICAgICAgICBpY3VDb2wuc2V0U3RyZW5ndGgoY29tLmlibS5pY3UudGV4dC5Db2xsYXRvci5RVUFURVJOQVJZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNSA6CisgICAgICAgICAgICAgICAgICAgICAgICBqYXZhQ29sLnNldFN0cmVuZ3RoKGphdmEudGV4dC5Db2xsYXRvci5JREVOVElDQUwpOworICAgICAgICAgICAgICAgICAgICAgICAgaWN1Q29sLnNldFN0cmVuZ3RoKGNvbS5pYm0uaWN1LnRleHQuQ29sbGF0b3IuSURFTlRJQ0FMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLWxldmVsIHBhcmFtIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA1XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gbG9hZCBjbGFzc2VzIGF0IGxlYXN0IG9uY2UgYmVmb3JlIHN0YXJ0aW5nCisgICAgICAgIGphdmFDb2wuY29tcGFyZSgiYSIsICJiIik7CisgICAgICAgIGljdUNvbC5jb21wYXJlKCJhIiwgImIiKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2xlYW4gcHJvY2Vzc09wdGlvbnMoU3RyaW5nW10gYXJncykgeworICAgICAgICBpbnQgYXJnTnVtOworICAgICAgICBmb3IgKGFyZ051bSA9MDsgYXJnTnVtIDwgYXJncy5sZW5ndGg7IGFyZ051bSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnc1thcmdOdW1dLmVxdWFsc0lnbm9yZUNhc2Uob3B0aW9uc1tpXS5uYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbnNbaV0udHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zW2ldLnZhbHVlLmRlbGV0ZSgwLCBvcHRpb25zW2ldLnZhbHVlLmNhcGFjaXR5KCkpLmFwcGVuZCgidHJ1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnTnVtKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYXJnTnVtID49IGFyZ3MubGVuZ3RoKSB8fCAoYXJnc1thcmdOdW1dLmNoYXJBdCgwKT09Jy0nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJ2YWx1ZSBleHBlY3RlZCBmb3IiKyBvcHRpb25zW2ldLm5hbWUgKyJvcHRpb24uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludChhcmdzW2FyZ051bV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1tpXS52YWx1ZS5kZWxldGUoMCwgb3B0aW9uc1tpXS52YWx1ZS5jYXBhY2l0eSgpKS5hcHBlbmQoYXJnc1thcmdOdW1dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXhwZWN0ZWQ6IGEgbnVtYmVyIHZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdOdW0rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhcmdOdW0gPj0gYXJncy5sZW5ndGgpIHx8IChhcmdzW2FyZ051bV0uY2hhckF0KDApPT0nLScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oInZhbHVlIGV4cGVjdGVkIGZvciIrIG9wdGlvbnNbaV0ubmFtZSArIm9wdGlvbi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0udmFsdWUuZGVsZXRlKDAsIG9wdGlvbnNbaV0udmFsdWUuY2FwYWNpdHkoKSkuYXBwZW5kKGFyZ3NbYXJnTnVtXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJPcHRpb24gdHlwZSBlcnJvcjoge0ZMQUc9MCwgTlVNPTEsIFNUUklORz0yfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9wdF9mTmFtZSAgICAgID0gdGVtcF9vcHRfZk5hbWUudG9TdHJpbmcoKTsKKyAgICAgICAgb3B0X2xvY2FsZSAgICAgPSB0ZW1wX29wdF9sb2NhbGUudG9TdHJpbmcoKTsKKyAgICAgICAgb3B0X3J1bGVzICAgICAgPSB0ZW1wX29wdF9ydWxlcy50b1N0cmluZygpOworICAgICAgICBpZiAodGVtcF9vcHRfaGVscC50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSkgeworICAgICAgICAgICAgb3B0X2hlbHAgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIG9wdF9sb29wQ291bnQgID0gSW50ZWdlci5wYXJzZUludCh0ZW1wX29wdF9sb29wQ291bnQudG9TdHJpbmcoKSk7CisgICAgICAgIG9wdF9pTG9vcENvdW50ID0gSW50ZWdlci5wYXJzZUludCh0ZW1wX29wdF9pTG9vcENvdW50LnRvU3RyaW5nKCkpOworICAgICAgICBpZiAodGVtcF9vcHRfdGVyc2UudG9TdHJpbmcoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpIHsKKyAgICAgICAgICAgIG9wdF90ZXJzZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBfb3B0X3Fzb3J0LnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKSB7CisgICAgICAgICAgICBvcHRfcXNvcnQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0ZW1wX29wdF9iaW5zZWFyY2gudG9TdHJpbmcoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpIHsKKyAgICAgICAgICAgIG9wdF9iaW5zZWFyY2ggPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0ZW1wX29wdF9pY3UudG9TdHJpbmcoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpIHsKKyAgICAgICAgICAgIG9wdF9pY3UgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0ZW1wX29wdF91c2VrZXlzLnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKSB7CisgICAgICAgICAgICBvcHRfdXNla2V5cyA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBfb3B0X3N0cmNtcC50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSkgeworICAgICAgICAgICAgb3B0X3N0cmNtcCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBfb3B0X3N0cmNtcENQTy50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSkgeworICAgICAgICAgICAgb3B0X3N0cmNtcENQTyA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBfb3B0X2tleWdlbi50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSkgeworICAgICAgICAgICAgb3B0X2tleWdlbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBfb3B0X25vcm0udG9TdHJpbmcoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpIHsKKyAgICAgICAgICAgIG9wdF9ub3JtID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGVtcF9vcHRfZnJlbmNoLnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKSB7CisgICAgICAgICAgICBvcHRfZnJlbmNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGVtcF9vcHRfZnJlbmNob2ZmLnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKSB7CisgICAgICAgICAgICBvcHRfZnJlbmNob2ZmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGVtcF9vcHRfc2hpZnRlZC50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSkgeworICAgICAgICAgICAgb3B0X3NoaWZ0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0ZW1wX29wdF9sb3dlci50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSkgeworICAgICAgICAgICAgb3B0X2xvd2VyID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGVtcF9vcHRfdXBwZXIudG9TdHJpbmcoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpIHsKKyAgICAgICAgICAgIG9wdF91cHBlciA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBfb3B0X2Nhc2UudG9TdHJpbmcoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpIHsKKyAgICAgICAgICAgIG9wdF9jYXNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBvcHRfbGV2ZWwgICAgICA9IEludGVnZXIucGFyc2VJbnQodGVtcF9vcHRfbGV2ZWwudG9TdHJpbmcoKSk7CisgICAgICAgIGlmICh0ZW1wX29wdF9rZXloaXN0LnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKSB7CisgICAgICAgICAgICBvcHRfa2V5aGlzdCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBfb3B0X2l0ZXJ0ZXN0LnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKSB7CisgICAgICAgICAgICBvcHRfaXRlcnRlc3QgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0ZW1wX29wdF9kdW1wLnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKSB7CisgICAgICAgICAgICBvcHRfZHVtcCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBfb3B0X2phdmEudG9TdHJpbmcoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpIHsKKyAgICAgICAgICAgIG9wdF9qYXZhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW52b2tlIHRoZSBydW50aW1lJ3MgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2NlZHVyZSByZXBlYXRlZGx5CisgICAgICogdW50aWwgdGhlIGFtb3VudCBvZiBmcmVlIG1lbW9yeSBzdGFiaWxpemVzIHRvIHdpdGhpbiAxMCUuCisgICAgICovICAgIAorICAgIHByaXZhdGUgdm9pZCBjYWxsR0MoKSB7CisgICAgICAgIC8vIEZyb20gIkphdmEgUGxhdGZvcm0gUGVyZm9ybWFuY2UiLiAgVGhpcyBpcyB0aGUgcHJvY2VkdXJlCisgICAgICAgIC8vIHJlY29tbWVuZGVkIGJ5IEphdmFzb2Z0LgorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLmdjKCk7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMCk7CisgICAgICAgICAgICBTeXN0ZW0ucnVuRmluYWxpemF0aW9uKCk7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5nYygpOworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDApOworICAgICAgICAgICAgU3lzdGVtLnJ1bkZpbmFsaXphdGlvbigpOworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDApOworICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBuZWVkQ1JMRiA9IGZhbHNlOworICAgIAorICAgIHB1YmxpYyBpbnQgRE9UTUFTSyA9IDB4N0ZGOworIAorICAgIHZvaWQgZG90KGludCBpKSB7CisgICAgICAgIGlmICgoaSAlIERPVE1BU0spID09IDApIHsKKyAgICAgICAgICAgIG5lZWRDUkxGID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIEkgZG8gbm90IGtub3cgd2h5IHByaW50IHRoZSBkb3QgaGVyZQorICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50KCcuJyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgU3RyaW5nIHJlYWREYXRhTGluZShCdWZmZXJlZFJlYWRlciBicikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBvcmlnaW5hbExpbmUgPSAiIjsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSAiIjsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsaW5lID0gb3JpZ2luYWxMaW5lID0gYnIucmVhZExpbmUoKTsKKyAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwpIHJldHVybiBudWxsOworICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoKCkgPiAwICYmIGxpbmUuY2hhckF0KDApID09IDB4RkVGRikgbGluZSA9IGxpbmUuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgaW50IGNvbW1lbnRQb3MgPSBsaW5lLmluZGV4T2YoJyMnKTsKKyAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIGxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBjb21tZW50UG9zKTsKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkxpbmUgXCJ7MH1cIiwgIFwiezF9XCIiICsgb3JpZ2luYWxMaW5lICsgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbGluZSArICIgIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpbmU7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVhZERhdGFMaW5lcygpIHsKKyAgICAgICAgLy8gUmVhZCBpbiAgdGhlIGlucHV0IGZpbGUuCisgICAgICAgIC8vICAgRmlsZSBhc3N1bWVkIHRvIGJlIHV0Zi0xNi4KKyAgICAgICAgLy8gICBMaW5lcyBnbyBvbnRvIGhlYXAgYnVmZmVycy4gIEdsb2JhbCBpbmRleCBhcnJheSB0byBsaW5lIHN0YXJ0cyBpcyBjcmVhdGVkLgorICAgICAgICAvLyAgIExpbmVzIHRoZW1zZWx2ZXMgYXJlIG51bGwgdGVybWluYXRlZC4KKyAgICAgICAgLy8KKyAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG51bGw7CisgICAgICAgIElucHV0U3RyZWFtUmVhZGVyIGlzciA9IG51bGw7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0ob3B0X2ZOYW1lKTsKKyAgICAgICAgICAgIGlzciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihmaXMsICJVbmljb2RlTGl0dGxlIik7CisgICAgICAgICAgICBicj0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlzciwgMzIqMTAyNCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiBGaWxlIGFjY2VzcyBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSArICIhIik7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCgyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IGNvdW50ZXIgPSAwOworICAgICAgICAKKyAgICAgICAgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGluZSA9IHJlYWREYXRhTGluZShicik7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUmVhZCBGaWxlIEVycm9yIiArIGUuZ2V0TWVzc2FnZSgpICsgIiEiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxpbmUgPT0gbnVsbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAobGluZS5sZW5ndGgoKSA9PSAwKSBjb250aW51ZTsKKyAgICAgICAgICAgIGRvdChjb3VudGVyKyspOworICAgICAgICAgICAgbGlzdC5hZGQobGluZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFvcHRfdGVyc2UpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCAiICsgY291bnRlciArICIgbGluZXMgaW4gZmlsZSIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgc2l6ZSA9IGxpc3Quc2l6ZSgpOworICAgICAgICB0ZXN0cyA9IG5ldyBTdHJpbmcgW3NpemVdOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIHRlc3RzW2ldID0gKFN0cmluZykgbGlzdC5nZXQoaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0IHRoZSBDb2xsYXRvciBSdWxlcworICAgICAqIFRoZSBSdWxlIEZpbGUgZm9ybWF0OgorICAgICAqIDEuIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2VzIHdpbGwgYmUgb21pdHRlZAorICAgICAqIDIuIGxpbmVzIHdpdGggdGhlIGxlYWRpbmcgY2hhcmFjdGVyICcjJyB3aWxsIGJlIHRyZWF0ZWQgYXMgY29tbWVudHMKKyAgICAgKiAzLiBGaWxlIGVuY29kaW5nIGlzIElTTy04ODU5LTEKKyAgICAgKi8KKyAgICBTdHJpbmcgZ2V0Q29sbGF0aW9uUnVsZXMoU3RyaW5nIHJ1bGVGaWxlTmFtZSkgeworICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbnVsbDsKKyAgICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgaXNyID0gbnVsbDsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShvcHRfcnVsZXMpOworICAgICAgICAgICAgaXNyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGZpcywiSVNPLTg4NTktMSIpOworICAgICAgICAgICAgYnI9IG5ldyBCdWZmZXJlZFJlYWRlcihpc3IpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvcjogRmlsZSBhY2Nlc3MgZXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkgKyAiISIpOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoMik7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHJ1bGVzID0gIiI7CisgICAgICAgIFN0cmluZyBsaW5lID0gIiI7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxpbmUgPSBici5yZWFkTGluZSgpOworICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUmVhZCBGaWxlIEVycm9yIiArIGUuZ2V0TWVzc2FnZSgpICsgIiEiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcjJyk7CisgICAgICAgICAgICBpZiAoY29tbWVudFBvcyA+PSAwKSBsaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgY29tbWVudFBvcyk7CisgICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7CisgICAgICAgICAgICBydWxlcyA9IHJ1bGVzICsgbGluZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnVsZXM7CisgICAgfQorICAgIAorICAgIC8vSW1wbGVtZW50aW5nIHFzb3J0CisgICAgdm9pZCBxU29ydEltcGxfamF2YV91c2VrZXlzKFN0cmluZyBzcmNbXSwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIGphdmEudGV4dC5Db2xsYXRvciBjKSB7CisgICAgICAgIGludCBsb3cgPSBmcm9tSW5kZXg7CisgICAgICAgIGludCBoaWdoID0gdG9JbmRleDsKKyAgICAgICAgU3RyaW5nIG1pZGRsZSA9ICIiOworICAgICAgICBpZiAoaGlnaCA+IGxvdykgeworICAgICAgICAgICAgbWlkZGxlID0gc3JjWyAobG93ICsgaGlnaCkgLyAyIF07CisgICAgICAgICAgICB3aGlsZShsb3cgPD0gaGlnaCkgeworICAgICAgICAgICAgICAgIHdoaWxlKChsb3cgPCB0b0luZGV4KSAmJiAoY29tcGFyZShjLmdldENvbGxhdGlvbktleShzcmNbbG93XSksIGMuZ2V0Q29sbGF0aW9uS2V5KG1pZGRsZSkpIDwgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgKytsb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlKChoaWdoID4gZnJvbUluZGV4KSAmJiAoY29tcGFyZShjLmdldENvbGxhdGlvbktleShzcmNbaGlnaF0pLCBjLmdldENvbGxhdGlvbktleShtaWRkbGUpKSA+IDApKSB7CisgICAgICAgICAgICAgICAgICAgIC0taGlnaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYobG93IDw9IGhpZ2gpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN3YXAgPSBzcmNbbG93XTsKKyAgICAgICAgICAgICAgICAgICAgc3JjW2xvd10gPSBzcmNbaGlnaF07CisgICAgICAgICAgICAgICAgICAgIHNyY1toaWdoXSA9IHN3YXA7CisgICAgICAgICAgICAgICAgICAgICsrbG93OworICAgICAgICAgICAgICAgICAgICAtLWhpZ2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoZnJvbUluZGV4IDwgaGlnaCkgeworICAgICAgICAgICAgICAgIHFTb3J0SW1wbF9qYXZhX3VzZWtleXMoc3JjLCBmcm9tSW5kZXgsIGhpZ2gsIGMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZihsb3cgPCB0b0luZGV4KSB7CisgICAgICAgICAgICAgICAgcVNvcnRJbXBsX2phdmFfdXNla2V5cyhzcmMsIGxvdywgdG9JbmRleCwgYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBxU29ydEltcGxfaWN1X3VzZWtleXMoU3RyaW5nIHNyY1tdLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgY29tLmlibS5pY3UudGV4dC5Db2xsYXRvciBjKSB7CisgICAgICAgIGludCBsb3cgPSBmcm9tSW5kZXg7CisgICAgICAgIGludCBoaWdoID0gdG9JbmRleDsKKyAgICAgICAgU3RyaW5nIG1pZGRsZSA9ICIiOworICAgICAgICBpZiAoaGlnaCA+IGxvdykgeworICAgICAgICAgICAgbWlkZGxlID0gc3JjWyAobG93ICsgaGlnaCkgLyAyIF07CisgICAgICAgICAgICB3aGlsZShsb3cgPD0gaGlnaCkgeworICAgICAgICAgICAgICAgIHdoaWxlKChsb3cgPCB0b0luZGV4KSAmJiAoY29tcGFyZShjLmdldENvbGxhdGlvbktleShzcmNbbG93XSksIGMuZ2V0Q29sbGF0aW9uS2V5KG1pZGRsZSkpIDwgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgKytsb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlKChoaWdoID4gZnJvbUluZGV4KSAmJiAoY29tcGFyZShjLmdldENvbGxhdGlvbktleShzcmNbaGlnaF0pLCBjLmdldENvbGxhdGlvbktleShtaWRkbGUpKSA+IDApKSB7CisgICAgICAgICAgICAgICAgICAgIC0taGlnaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYobG93IDw9IGhpZ2gpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN3YXAgPSBzcmNbbG93XTsKKyAgICAgICAgICAgICAgICAgICAgc3JjW2xvd10gPSBzcmNbaGlnaF07CisgICAgICAgICAgICAgICAgICAgIHNyY1toaWdoXSA9IHN3YXA7CisgICAgICAgICAgICAgICAgICAgICsrbG93OworICAgICAgICAgICAgICAgICAgICAtLWhpZ2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoZnJvbUluZGV4IDwgaGlnaCkgeworICAgICAgICAgICAgICAgIHFTb3J0SW1wbF9pY3VfdXNla2V5cyhzcmMsIGZyb21JbmRleCwgaGlnaCwgYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmKGxvdyA8IHRvSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBxU29ydEltcGxfaWN1X3VzZWtleXMoc3JjLCBsb3csIHRvSW5kZXgsIGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcVNvcnRJbXBsX25va2V5cyhTdHJpbmcgc3JjW10sIGludCBmcm9tSW5kZXgsIGludCB0b0luZGV4LCBDb21wYXJhdG9yIGMpIHsKKyAgICAgICAgaW50IGxvdyA9IGZyb21JbmRleDsKKyAgICAgICAgaW50IGhpZ2ggPSB0b0luZGV4OworICAgICAgICBTdHJpbmcgbWlkZGxlID0gIiI7CisgICAgICAgIGlmIChoaWdoID4gbG93KSB7CisgICAgICAgICAgICBtaWRkbGUgPSBzcmNbIChsb3cgKyBoaWdoKSAvIDIgXTsKKyAgICAgICAgICAgIHdoaWxlKGxvdyA8PSBoaWdoKSB7CisgICAgICAgICAgICAgICAgd2hpbGUoKGxvdyA8IHRvSW5kZXgpICYmIChjb21wYXJlKHNyY1tsb3ddLCBtaWRkbGUsIGMpIDwgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgKytsb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlKChoaWdoID4gZnJvbUluZGV4KSAmJiAoY29tcGFyZShzcmNbaGlnaF0sIG1pZGRsZSwgYykgPiAwKSkgeworICAgICAgICAgICAgICAgICAgICAtLWhpZ2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKGxvdyA8PSBoaWdoKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzd2FwID0gc3JjW2xvd107CisgICAgICAgICAgICAgICAgICAgIHNyY1tsb3ddID0gc3JjW2hpZ2hdOworICAgICAgICAgICAgICAgICAgICBzcmNbaGlnaF0gPSBzd2FwOworICAgICAgICAgICAgICAgICAgICArK2xvdzsKKyAgICAgICAgICAgICAgICAgICAgLS1oaWdoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGZyb21JbmRleCA8IGhpZ2gpIHsKKyAgICAgICAgICAgICAgICBxU29ydEltcGxfbm9rZXlzKHNyYywgZnJvbUluZGV4LCBoaWdoLCBjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYobG93IDwgdG9JbmRleCkgeworICAgICAgICAgICAgICAgIHFTb3J0SW1wbF9ub2tleXMoc3JjLCBsb3csIHRvSW5kZXgsIGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludCBjb21wYXJlKFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQsIENvbXBhcmF0b3IgYykgeworICAgICAgICBnbG9iYWxDb3VudCsrOworICAgICAgICByZXR1cm4gYy5jb21wYXJlKHNvdXJjZSwgdGFyZ2V0KTsKKyAgICB9CisgICAgCisgICAgaW50IGNvbXBhcmUoamF2YS50ZXh0LkNvbGxhdGlvbktleSBzb3VyY2UsIGphdmEudGV4dC5Db2xsYXRpb25LZXkgdGFyZ2V0KSB7CisgICAgICAgIGdsb2JhbENvdW50Kys7CisgICAgICAgIHJldHVybiBzb3VyY2UuY29tcGFyZVRvKHRhcmdldCk7CisgICAgfQorICAgIAorICAgIGludCBjb21wYXJlKGNvbS5pYm0uaWN1LnRleHQuQ29sbGF0aW9uS2V5IHNvdXJjZSwgY29tLmlibS5pY3UudGV4dC5Db2xsYXRpb25LZXkgdGFyZ2V0KSB7CisgICAgICAgIGdsb2JhbENvdW50Kys7CisgICAgICAgIHJldHVybiBzb3VyY2UuY29tcGFyZVRvKHRhcmdldCk7CisgICAgfSAKKyAgICAKKyAgICAvL0NsYXNzIGZvciBjb21tYW5kIGxpbmUgb3B0aW9uCisgICAgc3RhdGljIGNsYXNzIE9wdGlvblNwZWMgeworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgaW50IHR5cGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciB2YWx1ZTsKKyAgICAgICAgcHVibGljIE9wdGlvblNwZWMoU3RyaW5nIG5hbWUsIGludCB0eXBlLCBTdHJpbmdCdWZmZXIgdmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9wZXJmL0RhdGFzZXQucG0gYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9EYXRhc2V0LnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNTgwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9EYXRhc2V0LnBtCkBAIC0wLDAgKzEsODAgQEAKK3BhY2thZ2UgRGF0YXNldDsKK3VzZSBTdGF0aXN0aWNzOjpEZXNjcmlwdGl2ZTsKK3VzZSBTdGF0aXN0aWNzOjpEaXN0cmlidXRpb25zOwordXNlIHN0cmljdDsKKworIyBDcmVhdGUgYSBuZXcgRGF0YXNldCB3aXRoIHRoZSBnaXZlbiBkYXRhLgorc3ViIG5ldyB7CisgICAgbXkgKCRjbGFzcykgPSBzaGlmdDsKKyAgICBteSAkc2VsZiA9IGJsZXNzIHsKKyAgICAgICAgX2RhdGEgPT4gXEBfLAorICAgICAgICBfc2NhbGUgPT4gMS4wLAorICAgICAgICBfbWVhbiA9PiAwLjAsCisgICAgICAgIF9lcnJvciA9PiAwLjAsCisgICAgfSwgJGNsYXNzOworCisgICAgbXkgJG4gPSBAXzsKKyAgICAKKyAgICBpZiAoJG4gPj0gMSkgeworICAgICAgICBteSAkc3RhdHMgPSBTdGF0aXN0aWNzOjpEZXNjcmlwdGl2ZTo6RnVsbC0+bmV3KCk7CisgICAgICAgICRzdGF0cy0+YWRkX2RhdGEoQHskc2VsZi0+e19kYXRhfX0pOworICAgICAgICAkc2VsZi0+e19tZWFufSA9ICRzdGF0cy0+bWVhbigpOworCisgICAgICAgIGlmICgkbiA+PSAyKSB7CisgICAgICAgICAgICAjIFVzZSBhIHQgZGlzdHJpYnV0aW9uIHJhdGhlciB0aGFuIEdhdXNzaWFuIGJlY2F1c2UgKGEpIHdlCisgICAgICAgICAgICAjIGFzc3VtZSBhbiB1bmRlcmx5aW5nIG5vcm1hbCBkaXN0LCAoYikgd2UgZG8gbm90IGtub3cgdGhlCisgICAgICAgICAgICAjIHN0YW5kYXJkIGRldmlhdGlvbiAtLSB3ZSBlc3RpbWF0ZSBpdCBmcm9tIHRoZSBkYXRhLCBhbmQgKGMpCisgICAgICAgICAgICAjIHdlIE1BWSBoYXZlIGEgc21hbGwgc2FtcGxlIHNpemUgKGFsc28gd29ya3MgZm9yIGxhcmdlIG4pLgorICAgICAgICAgICAgbXkgJHQgPSBTdGF0aXN0aWNzOjpEaXN0cmlidXRpb25zOjp0ZGlzdHIoJG4tMSwgMC4wMDUpOworICAgICAgICAgICAgJHNlbGYtPntfZXJyb3J9ID0gJHQgKiAkc3RhdHMtPnN0YW5kYXJkX2RldmlhdGlvbigpOworICAgICAgICB9CisgICAgfQorCisgICAgJHNlbGY7Cit9CisKKyMgU2V0IGEgc2NhbGluZyBmYWN0b3IgZm9yIGFsbCBkYXRhOyAxLjAgbWVhbnMgbm8gc2NhbGluZy4KKyMgU2NhbGUgbXVzdCBiZSA+IDAuCitzdWIgc2V0U2NhbGUgeworICAgIG15ICgkc2VsZiwgJHNjYWxlKSA9IEBfOworICAgICRzZWxmLT57X3NjYWxlfSA9ICRzY2FsZTsKK30KKworIyBNdWx0aXBseSB0aGUgc2NhbGluZyBmYWN0b3IgYnkgYSB2YWx1ZS4KK3N1YiBzY2FsZUJ5IHsKKyAgICBteSAoJHNlbGYsICRhKSA9IEBfOworICAgICRzZWxmLT57X3NjYWxlfSAqPSAkYTsKK30KKworIyBSZXR1cm4gdGhlIG1lYW4uCitzdWIgZ2V0TWVhbiB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICByZXR1cm4gJHNlbGYtPntfbWVhbn0gKiAkc2VsZi0+e19zY2FsZX07Cit9CisKKyMgUmV0dXJuIGEgOTklIGVycm9yIGJhc2VkIG9uIHRoZSB0IGRpc3RyaWJ1dGlvbi4gIFRoZSBkYXRhc2V0CisjIGlzIGRlc3JpYmVkIGFzIGdldE1lYW4oKSArLy0gZ2V0RXJyb3IoKS4KK3N1YiBnZXRFcnJvciB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICByZXR1cm4gJHNlbGYtPntfZXJyb3J9ICogJHNlbGYtPntfc2NhbGV9OworfQorCisjIERpdmlkZSB0d28gRGF0YXNldHMgYW5kIHJldHVybiBhIG5ldyBvbmUsIG1haW50YWluaW5nIHRoZQorIyBtZWFuKy8tZXJyb3IuICBUaGUgbmV3IERhdGFzZXQgaGFzIG5vIGRhdGEgcG9pbnRzLgorc3ViIGRpdmlkZSB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkcmhzID0gc2hpZnQ7CisgICAgCisgICAgbXkgJG1pbnJhdGlvID0gKCRzZWxmLT57X21lYW59IC0gJHNlbGYtPntfZXJyb3J9KSAvCisgICAgICAgICAgICAgICAgICAgKCRyaHMtPntfbWVhbn0gKyAkcmhzLT57X2Vycm9yfSk7CisgICAgbXkgJG1heHJhdGlvID0gKCRzZWxmLT57X21lYW59ICsgJHNlbGYtPntfZXJyb3J9KSAvCisgICAgICAgICAgICAgICAgICAgKCRyaHMtPntfbWVhbn0gLSAkcmhzLT57X2Vycm9yfSk7CisKKyAgICBteSAkcmVzdWx0ID0gRGF0YXNldC0+bmV3KCk7CisgICAgJHJlc3VsdC0+e19tZWFufSA9ICgkbWlucmF0aW8gKyAkbWF4cmF0aW8pIC8gMjsKKyAgICAkcmVzdWx0LT57X2Vycm9yfSA9ICRyZXN1bHQtPntfbWVhbn0gLSAkbWlucmF0aW87CisgICAgJHJlc3VsdC0+e19zY2FsZX0gPSAkc2VsZi0+e19zY2FsZX0gLyAkcmhzLT57X3NjYWxlfTsKKyAgICAkcmVzdWx0OworfQorCisxOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvTm9ybWFsaXplclBlcmZvcm1hbmNlVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvTm9ybWFsaXplclBlcmZvcm1hbmNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhODAwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9Ob3JtYWxpemVyUGVyZm9ybWFuY2VUZXN0LmphdmEKQEAgLTAsMCArMSw2OTkgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoYykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvTm9ybWFsaXplclBlcmZvcm1hbmNlVGVzdC5qYXZhLHYgJCAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnBlcmY7CisKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBOb3JtYWxpemVyUGVyZm9ybWFuY2VUZXN0IGV4dGVuZHMgUGVyZlRlc3QgeworICAgIAorICAgIFN0cmluZ1tdIE5GREZpbGVMaW5lczsKKyAgICBTdHJpbmdbXSBORkNGaWxlTGluZXM7CisgICAgU3RyaW5nW10gZmlsZUxpbmVzOworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgTm9ybWFsaXplclBlcmZvcm1hbmNlVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0dXAoU3RyaW5nW10gYXJncykgeworICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7CisgICAgICAgICAgICBwcmludFVzYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBwYXRoID0gIiI7CisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9ICJVVEYtOCI7CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9ICIiOworICAgICAgICBib29sZWFuIGJ1bGtNb2RlID0gZmFsc2U7CisgICAgICAgIGJvb2xlYW4gbGluZU1vZGUgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYXJnc1tpXS5lcXVhbHNJZ25vcmVDYXNlKCItZiIpIHx8IGFyZ3NbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLS1maWxlTmFtZSIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCgoaSArIDEpID49IGFyZ3MubGVuZ3RoKSB8fCAoYXJnc1tpKzFdLmNoYXJBdCgwKSA9PSAnLScpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50VXNhZ2UoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGFyZ3NbaSsxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJnc1tpXS5lcXVhbHNJZ25vcmVDYXNlKCItcyIpIHx8IGFyZ3NbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLS1zb3VyY2VEaXIiKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoKChpICsgMSkgPj0gYXJncy5sZW5ndGgpIHx8IChhcmdzW2krMV0uY2hhckF0KDApID09ICctJykpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRVc2FnZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBhcmdzW2krMV07CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlc2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIsICIvIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoLmNoYXJBdChwYXRoLmxlbmd0aCgpIC0gMSkgIT0gZmlsZXNlcGFyYXRvci5jaGFyQXQoMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoICsgZmlsZXNlcGFyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzW2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1lIikgfHwgYXJnc1tpXS5lcXVhbHNJZ25vcmVDYXNlKCItLWVuY29kaW5nIikpIHsKKyAgICAgICAgICAgICAgICBpZiAoKChpICsgMSkgPj0gYXJncy5sZW5ndGgpIHx8IChhcmdzW2krMV0uY2hhckF0KDApID09ICctJykpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRVc2FnZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gYXJnc1tpKzFdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzW2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1iIikgfHwgYXJnc1tpXS5lcXVhbHNJZ25vcmVDYXNlKCItLWJ1bGtNb2RlIikpIHsKKyAgICAgICAgICAgICAgICBidWxrTW9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgbGluZU1vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzW2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1sIikgfHwgYXJnc1tpXS5lcXVhbHNJZ25vcmVDYXNlKCItLWxpbmVNb2RlIikpIHsKKyAgICAgICAgICAgICAgICBidWxrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGxpbmVNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihsaW5lTW9kZSA9PSBidWxrTW9kZSl7CisgICAgICAgICAgICBwcmludFVzYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoIiIpKXsKKyAgICAgICAgICAgIHByaW50VXNhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICBmaWxlTGluZXMgPSByZWFkTGluZXMocGF0aCArIGZpbGVOYW1lLCBlbmNvZGluZywgYnVsa01vZGUpOworICAgICAgICBORkRGaWxlTGluZXMgPSBub3JtYWxpemVJbnB1dChmaWxlTGluZXMsIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgTkZDRmlsZUxpbmVzID0gbm9ybWFsaXplSW5wdXQoZmlsZUxpbmVzLCBOb3JtYWxpemVyLk5GQyk7CisgICAgfQorICAgIAorICAgIC8vIFRlc3QgTkZDIFBlcmZvcm1hbmNlCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9ORkNfTkZEX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZmMgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShORkRGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZDKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZERmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9ORkNfTkZDX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZmMgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShORkNGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZDKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZDRmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9ORkNfT3JpZ19UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmZjID0gTm9ybWFsaXplci5ub3JtYWxpemUoZmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLk5GQyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIGZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIC8vIFRlc3QgTkZEIFBlcmZvcm1hbmNlCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9ORkRfTkZEX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZmMgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShORkRGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZERmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9ORkRfTkZDX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZmMgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShORkNGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZDRmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9ORkRfT3JpZ19UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmZjID0gTm9ybWFsaXplci5ub3JtYWxpemUoZmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIGZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorLyoqIEkgcmVhbGx5IHdpc2ggdGhlcmUgd2FzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGluIEphdmEgICAgICAKKyAgICAgICAgLy8gVGVzdCBORkMgUGVyZm9ybWFuY2UKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiBUZXN0SkRLX05GQ19ORkRfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkRGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5mYyA9IHN1bi50ZXh0Lk5vcm1hbGl6ZXIubm9ybWFsaXplKE5GREZpbGVMaW5lc1tpXSwgc3VuLnRleHQuTm9ybWFsaXplci5DT01QT1NFLDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkRGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxDaGFycyA9IHRvdGFsQ2hhcnMgKyBORkRGaWxlTGluZXNbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbENoYXJzOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdEpES19ORkNfTkZDX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZmMgPSBzdW4udGV4dC5Ob3JtYWxpemVyLm5vcm1hbGl6ZShORkNGaWxlTGluZXNbaV0sIHN1bi50ZXh0Lk5vcm1hbGl6ZXIuQ09NUE9TRSwwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZDRmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdEpES19ORkNfT3JpZ19UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmZjID0gc3VuLnRleHQuTm9ybWFsaXplci5ub3JtYWxpemUoZmlsZUxpbmVzW2ldLCBzdW4udGV4dC5Ob3JtYWxpemVyLkNPTVBPU0UsMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIGZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIC8vIFRlc3QgTkZEIFBlcmZvcm1hbmNlCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdEpES19ORkRfTkZEX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZmMgPSBzdW4udGV4dC5Ob3JtYWxpemVyLm5vcm1hbGl6ZShORkRGaWxlTGluZXNbaV0sIHN1bi50ZXh0Lk5vcm1hbGl6ZXIuREVDT01QLDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkRGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxDaGFycyA9IHRvdGFsQ2hhcnMgKyBORkRGaWxlTGluZXNbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbENoYXJzOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiBUZXN0SkRLX05GRF9ORkNfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkNGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5mYyA9IHN1bi50ZXh0Lk5vcm1hbGl6ZXIubm9ybWFsaXplKE5GQ0ZpbGVMaW5lc1tpXSwgc3VuLnRleHQuTm9ybWFsaXplci5ERUNPTVAsMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GQ0ZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIE5GQ0ZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIFRlc3RKREtfTkZEX09yaWdfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5mYyA9IHN1bi50ZXh0Lk5vcm1hbGl6ZXIubm9ybWFsaXplKGZpbGVMaW5lc1tpXSwgc3VuLnRleHQuTm9ybWFsaXplci5ERUNPTVAsMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIGZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIC8vIFRlc3QgRkNEIFBlcmZvcm1hbmNlCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9GQ0RfTkZEX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZmMgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShORkRGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuRkNEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZERmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisqKi8gICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9GQ0RfTkZDX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZmMgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShORkNGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuRkNEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZDRmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElDVV9GQ0RfT3JpZ19UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmZjID0gTm9ybWFsaXplci5ub3JtYWxpemUoZmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLkZDRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIGZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIC8vIFRlc3QgUXVpY2sgQ2hlY2sgUGVyZm9ybWFuY2UKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiBUZXN0UUNfTkZDX05GRF9UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GREZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLlF1aWNrQ2hlY2tSZXN1bHQgcmVzdWx0ID0gTm9ybWFsaXplci5xdWlja0NoZWNrKE5GREZpbGVMaW5lc1tpXSwgTm9ybWFsaXplci5ORkMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkRGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxDaGFycyA9IHRvdGFsQ2hhcnMgKyBORkRGaWxlTGluZXNbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbENoYXJzOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiBUZXN0UUNfTkZDX05GQ19UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GQ0ZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLlF1aWNrQ2hlY2tSZXN1bHQgcmVzdWx0ID0gTm9ybWFsaXplci5xdWlja0NoZWNrKE5GQ0ZpbGVMaW5lc1tpXSwgTm9ybWFsaXplci5ORkMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkNGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxDaGFycyA9IHRvdGFsQ2hhcnMgKyBORkNGaWxlTGluZXNbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbENoYXJzOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiBUZXN0UUNfTkZDX09yaWdfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5RdWlja0NoZWNrUmVzdWx0IHJlc3VsdCA9IE5vcm1hbGl6ZXIucXVpY2tDaGVjayhmaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZDKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgZmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdFFDX05GRF9ORkRfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkRGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5RdWlja0NoZWNrUmVzdWx0IHJlc3VsdCA9IE5vcm1hbGl6ZXIucXVpY2tDaGVjayhORkRGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZERmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdFFDX05GRF9ORkNfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkNGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5RdWlja0NoZWNrUmVzdWx0IHJlc3VsdCA9IE5vcm1hbGl6ZXIucXVpY2tDaGVjayhORkNGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZDRmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdFFDX05GRF9PcmlnX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuUXVpY2tDaGVja1Jlc3VsdCByZXN1bHQgPSBOb3JtYWxpemVyLnF1aWNrQ2hlY2soZmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIGZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIFRlc3RRQ19GQ0RfTkZEX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuUXVpY2tDaGVja1Jlc3VsdCByZXN1bHQgPSBOb3JtYWxpemVyLnF1aWNrQ2hlY2soTkZERmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLkZDRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GREZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIE5GREZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIFRlc3RRQ19GQ0RfTkZDX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuUXVpY2tDaGVja1Jlc3VsdCByZXN1bHQgPSBOb3JtYWxpemVyLnF1aWNrQ2hlY2soTkZDRmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLkZDRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GQ0ZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIE5GQ0ZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIFRlc3RRQ19GQ0RfT3JpZ19UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLlF1aWNrQ2hlY2tSZXN1bHQgcmVzdWx0ID0gTm9ybWFsaXplci5xdWlja0NoZWNrKGZpbGVMaW5lc1tpXSwgTm9ybWFsaXplci5GQ0QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxDaGFycyA9IHRvdGFsQ2hhcnMgKyBmaWxlTGluZXNbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbENoYXJzOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICAvLyBUZXN0IGlzTm9ybWFsaXplZCBQZXJmb3JtYW5jZQorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIFRlc3RJc05vcm1hbGl6ZWRfTkZDX05GRF9UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GREZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IE5vcm1hbGl6ZXIuaXNOb3JtYWxpemVkKE5GREZpbGVMaW5lc1tpXSwgTm9ybWFsaXplci5ORkMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkRGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxDaGFycyA9IHRvdGFsQ2hhcnMgKyBORkRGaWxlTGluZXNbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbENoYXJzOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiBUZXN0SXNOb3JtYWxpemVkX05GQ19ORkNfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkNGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBOb3JtYWxpemVyLmlzTm9ybWFsaXplZChORkNGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZDKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZDRmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElzTm9ybWFsaXplZF9ORkNfT3JpZ19UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IE5vcm1hbGl6ZXIuaXNOb3JtYWxpemVkKGZpbGVMaW5lc1tpXSwgTm9ybWFsaXplci5ORkMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxDaGFycyA9IHRvdGFsQ2hhcnMgKyBmaWxlTGluZXNbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbENoYXJzOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiBUZXN0SXNOb3JtYWxpemVkX05GRF9ORkRfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkRGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBOb3JtYWxpemVyLmlzTm9ybWFsaXplZChORkRGaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgTkZERmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElzTm9ybWFsaXplZF9ORkRfTkZDX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZDRmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gTm9ybWFsaXplci5pc05vcm1hbGl6ZWQoTkZDRmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GQ0ZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIE5GQ0ZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIFRlc3RJc05vcm1hbGl6ZWRfTkZEX09yaWdfVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBOb3JtYWxpemVyLmlzTm9ybWFsaXplZChmaWxlTGluZXNbaV0sIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgaW50IHRvdGFsQ2hhcnMgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hhcnMgPSB0b3RhbENoYXJzICsgZmlsZUxpbmVzW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxDaGFyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gVGVzdElzTm9ybWFsaXplZF9GQ0RfTkZEX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTkZERmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gTm9ybWFsaXplci5pc05vcm1hbGl6ZWQoTkZERmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLkZDRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GREZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIE5GREZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIFRlc3RJc05vcm1hbGl6ZWRfRkNEX05GQ19UZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5GQ0ZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IE5vcm1hbGl6ZXIuaXNOb3JtYWxpemVkKE5GQ0ZpbGVMaW5lc1tpXSwgTm9ybWFsaXplci5GQ0QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORkNGaWxlTGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxDaGFycyA9IHRvdGFsQ2hhcnMgKyBORkNGaWxlTGluZXNbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbENoYXJzOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiBUZXN0SXNOb3JtYWxpemVkX0ZDRF9PcmlnX1RleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUxpbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gTm9ybWFsaXplci5pc05vcm1hbGl6ZWQoZmlsZUxpbmVzW2ldLCBOb3JtYWxpemVyLkZDRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIGludCB0b3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVMaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENoYXJzID0gdG90YWxDaGFycyArIGZpbGVMaW5lc1tpXS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2hhcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgICAgCisgICAgcHJpdmF0ZSB2b2lkIHByaW50VXNhZ2UoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNhZ2U6ICIgKyB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBbT1BUSU9OU10gZmlsZU5hbWVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJcdC1mIG9yIC0tZmlsZU5hbWUgIFx0ZmlsZSB0byBiZSB1c2VkIGFzIHRlc3QgZGF0YVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlx0LXMgb3IgLS1zb3VyY2VEaXIgXHRzb3VyY2UgZGlyZWN0b3J5IGZvciBmaWxlcyBmb2xsb3dlZCBieSBwYXRoXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiXHQtZSBvciAtLWVuY29kaW5nICBcdGVuY29kaW5nIG9mIHNvdXJjZSBmaWxlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlx0LWIgb3IgLS1idWxrTW9kZSAgXHRub3JtYWxpemUgd2hvbGUgZmlsZSBhdCBvbmNlXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiXHQtbCBvciAtLWxpbmVNb2RlICBcdG5vcm1hbGl6ZSBmaWxlIG9uZSBsaW5lIGF0IGEgdGltZVxuIgorICAgICAgICAgICAgKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgfQorICAgIFN0cmluZ1tdIG5vcm1hbGl6ZUlucHV0KFN0cmluZ1tdIHNyYywgTm9ybWFsaXplci5Nb2RlIG1vZGUpIHsKKyAgICAgICAgU3RyaW5nW10gZGVzdCA9IG5ldyBTdHJpbmdbc3JjLmxlbmd0aF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBkZXN0W2ldID0gTm9ybWFsaXplci5ub3JtYWxpemUoc3JjW2ldLCBtb2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGRlc3Q7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvUGVyZlRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9wZXJmL1BlcmZUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmN2I1NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9wZXJmL1BlcmZUZXN0LmphdmEKQEAgLTAsMCArMSw2MzQgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoYykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvUGVyZlRlc3QuamF2YSx2ICQgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5wZXJmOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50b29sLlVPcHRpb247CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5OdW1iZXJGb3JtYXQ7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5EZWNpbWFsRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7CisKKy8qKgorICogQmFzZSBjbGFzcyBmb3IgcGVyZm9ybWFuY2UgdGVzdGluZyBmcmFtZXdvcmsuICBUbyB1c2UsIHN1YmNsYXNzIGFuZAorICogZGVmaW5lIG9uZSBvciBtb3JlIGluc3RhbmNlIG1ldGhvZHMgd2l0aCBuYW1lcyBiZWdpbm5pbmcgd2l0aAorICogInRlc3QiIChjYXNlIGlnbm9yZWQpLiAgRWFjaCBzdWNoIG1ldGhvZCBtdXN0IHRoZW4gY2FsbCB0d28KKyAqIGZ1bmN0aW9ucywgc2V0VGVzdEZ1bmN0aW9uKCksIGFuZCBzZXRFdmVudHNQZXJDYWxsKCkuICBJbiBhZGRpdGlvbiwKKyAqIHRoZSBzdWJjbGFzcyBzaG91bGQgZGVmaW5lIGEgbWFpbigpIG1ldGhvZCB0aGF0IGNhbGxzIHJ1bigpIGFzCisgKiBkZWZpbmVkIGhlcmUuICBJZiB0aGUgc3ViY2xhc3NlcyB1c2VzIGFueSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisgKiAoYmV5b25kIHRob3NlIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGlzIGNhbHNzKSB0aGVuIGl0IHNob3VsZAorICogb3ZlcnJpZGUgc2V0dXAoKSB0byBoYW5kbGUgaXRzIGFyZ3VtZW50cy4KKyAqIAorICogVGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudCBsaXN0IHNob3VsZCBoYXZlIHRoZSBmb3JtOgorICogICBhcmctbGlzdCA6PSBvcHRpb25zKiBtZXRoLXNwZWMrICctJz8gLi4uCisgKiAgIG1ldGgtc3BlYyA6PSBtZXRoLW5hbWUgY291bnQrCisgKiAgIG9wdGlvbnMgOj0gLWdjIHwgLW5vZ2MKKyAqIHdoZXJlOgorICogICBtZXRoLW5hbWUgYSBtZXRob2QgbmFtZSwgY2FzZSBpbnNlbnNpdGl2ZSwgb3B0aW9uYWxseQorICogICAgICAgICAgICAgd2l0aCB0aGUgaW5pdGlhbCAidGVzdCIgb21pdHRlZAorICogICBjb3VudCAgICAgYW4gaW50ZWdlciwgPiAwLCBnaXZpbmcgdGhlIG51bWJlciBvZiB0aW1lCisgKiAgICAgICAgICAgICB0byBjYWxsIHRoZSBtZXRob2Qgc2V0dXAgYnkgbWV0aC1uYW1lLiAgSWYgJ2NvdW50JyBpcworICogICAgICAgICAgICAgYW4gaW50ZWdlciA8IDAsIHRoZW4gaXRlcmF0aW9ucyBhcmUgdmFyaWVkIHRvIGFjaGlldmUgYQorICogICAgICAgICAgICAgdG90YWwgZHVyYXRpb24gb2YgYXQgbGVhc3QgLWNvdW50IHNlY29uZHMuCisgKiAgICctJyAgICAgICBhbiBvcHRpb25hbCBzZXBhcmF0b3I7IGlmIHNlZW4sIGFsbCBzdWJzZXF1ZW50CisgKiAgICAgICAgICAgICBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgc3ViY2xhc3MKKyAqICAgLi4uICAgICAgIGV4dHJhIGFyZ3VtZW50cywgbm90IHJlY29nbml6ZWQgYXMgZWl0aGVyIGEKKyAqICAgICAgICAgICAgIG1ldGgtbmFtZSBvciBhIGNvdW50LCBvciBmb2xsb3dpbmcgYSAnLScsCisgKiAgICAgICAgICAgICBwYXNzZWQgdG8gdGhlIHNldHVwKCkgbWV0aG9kLCB3aGljaCB0aGUKKyAqICAgICAgICAgICAgIHN1YmNsYXNzIG1heSBvdmVycmlkZQorICogb3B0aW9uczoKKyAqICAgLWdjICAgICAgIGNhbGxzIFJ1bnRpbWUuZ2MoKSByZXBlYXRlZGx5IHVudGlsIGhlYXAKKyAqICAgICAgICAgICAgIHN0YWJpbGl6ZXMgYmVmb3JlIGRvaW5nIGFueSB0aW1pbmcKKyAqICAgLW5vZ2MgICAgIGRpc2FibGUgLWdjIChkZWZhdWx0KQorICoKKyAqIEV4YW1wbGUgaW52b2NhdGlvbjoKKyAqIGphdmEgLWNwIGNsYXNzZXMgLXZlcmJvc2U6Z2MgY29tLmlibS5pY3UuZGV2LnRlc3QucGVyZi5Vbmljb2RlU2V0UGVyZiAtZ2MgVW5pY29kZVNldEFkZCAxMDAgMTAwIDEwMCAxMDAgW1s6bDpdWzpjOl1dCisgKiAKKyAqIEV4YW1wbGUgb3V0cHV0OgorICogW0dDIDUxMUstPjE5MksoMTk4NEspLCAwLjAwODYxNzAgc2Vjc10KKyAqIFtHQyA3MDRLLT4zNTNLKDE5ODRLKSwgMC4wMDU5NjE5IHNlY3NdCisgKiBbRnVsbCBHQyA2MThLLT4zNzFLKDE5ODRLKSwgMC4wMjQyNzc5IHNlY3NdCisgKiBbRnVsbCBHQyAzNzFLLT4zNzFLKDE5ODRLKSwgMC4wMjI4NjQ5IHNlY3NdCisgKiA9IHRlc3RVbmljb2RlU2V0QWRkIGJlZ2luIDEwMAorICogPSB0ZXN0VW5pY29kZVNldEFkZCBlbmQgMTE5NzcgMTEwOTA0NAorICogPSB0ZXN0VW5pY29kZVNldEFkZCBiZWdpbiAxMDAKKyAqID0gdGVzdFVuaWNvZGVTZXRBZGQgZW5kIDEyMDQ3IDExMDkwNDQKKyAqID0gdGVzdFVuaWNvZGVTZXRBZGQgYmVnaW4gMTAwCisgKiA9IHRlc3RVbmljb2RlU2V0QWRkIGVuZCAxMTk4NyAxMTA5MDQ0CisgKiA9IHRlc3RVbmljb2RlU2V0QWRkIGJlZ2luIDEwMAorICogPSB0ZXN0VW5pY29kZVNldEFkZCBlbmQgMTE5NzggMTEwOTA0NAorICoKKyAqIFRoZSBbXSBsaW5lcyBhcmUgZW1pdHRlZCBieSB0aGUgSlZNIGFzIGEgcmVzdWx0IG9mIHRoZSAtdmVyYm9zZTpnYworICogc3dpdGNoLgorICoKKyAqIExpbmVzIGJlZ2lubmluZyB3aXRoICc9JyBhcmUgZW1pdHRlZCBieSBQZXJmVGVzdDoKKyAqCisgKiA9IHRlc3RVbmljb2RlU2V0QWRkIGJlZ2luIDEwMAorICogQSAnYmVnaW4nIHN0YXRlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgc2V0dXAgbWV0aG9kLCB3aGljaAorICogZGV0ZXJtaW5lcyB3aGF0IHRlc3QgZnVuY3Rpb24gaXMgbWVhc3VyZXMsIGFuZCB0aGUgbnVtYmVyIG9mCisgKiBpdGVyYXRpb25zIHRoYXQgd2lsbCBiZSB0aW1lcy4KKyAqCisgKiA9IHRlc3RVbmljb2RlU2V0QWRkIGVuZCAxMjA0NyAxMTA5MDQ0CisgKiBBbiAnZW5kJyBzdGF0ZW1lbnQgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIHNldHVwIG1ldGhvZCBhZ2FpbiwgYW5kCisgKiB0aGVuIHR3byBpbnRlZ2Vycy4gIFRoZSBmaXJzdCBpcyB0aGUgdG90YWwgZWxhcHNlZCB0aW1lIGluCisgKiBtaWxsaXNlY29uZHMsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBudW1iZXIgb2YgZXZlbnRzIHBlciBpdGVyYXRpb24uCisgKiBJbiB0aGlzIGV4YW1wbGUsIHRoZSB0aW1lIHBlciBldmVudCBpcyAxMjA0NyAvICgxMDAgKiAxMTA5MDQ0KSBvcgorICogMTA4LjYgbnMvZXZlbnQuCisgKgorICogUmF3IHRpbWVzIGFyZSBnaXZlbiBhcyBpbnRlZ2VyIG1zLCBiZWNhdXNlIHRoaXMgaXMgd2hhdCB0aGUgc3lzdGVtCisgKiBtZWFzdXJlcy4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAc2luY2UgSUNVIDIuNAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGVyZlRlc3QgeworCisgICAgLyoqCisgICAgICogQSBtYXAgb2YgbXVuZ2VkIG5hbWVzIHRvIE1ldGhvZCBvYmplY3RzLiAgQWxsIGF2YWlsYWJsZSBtZXRob2RzCisgICAgICogaW4gdGhlIGN1cnJlbnQgb2JqZWN0IGJlZ2lubmluZyB3aXRoICJ0ZXN0IiAoY2FzZSBpZ25vcmVkKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIE1hcCBhdmFpbGFibGVUZXN0czsgLy8gTk9UIHN0YXRpYworCisgICAgLy8gQ29tbWFuZC1saW5lIG9wdGlvbnMgc2V0IHRoZXNlOgorICAgIHByb3RlY3RlZCBib29sZWFuICAgICAgICB2ZXJib3NlOworICAgIHByb3RlY3RlZCBTdHJpbmcgICAgICAgICBzb3VyY2VEaXI7CisgICAgcHJvdGVjdGVkIFN0cmluZyAgICAgICAgIGZpbGVOYW1lOworICAgIC8vcHJvdGVjdGVkIFN0cmluZyAgICAgICAgIHJlc29sdmVkRmlsZU5hbWU7CisgICAgcHJvdGVjdGVkIFN0cmluZyAgICAgICAgIGVuY29kaW5nOworICAgIHByb3RlY3RlZCBib29sZWFuICAgICAgICB1c2VsZW47CisgICAgcHJvdGVjdGVkIGludCAgICAgICAgICAgIGl0ZXJhdGlvbnM7CisgICAgcHJvdGVjdGVkIGludCAgICAgICAgICAgIHBhc3NlczsKKyAgICBwcm90ZWN0ZWQgaW50ICAgICAgICAgICAgdGltZTsKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiAgICAgICAgbGluZV9tb2RlOworICAgIHByb3RlY3RlZCBib29sZWFuICAgICAgICBidWxrX21vZGU7CisgICAgcHJvdGVjdGVkIGJvb2xlYW4gICAgICAgIGRvUHJpb3JHQzsKKworICAgIC8qKgorICAgICAqIFN1YmNsYXNzZXMgb2YgUGVyZlRlc3Qgd2lsbCBuZWVkIHRvIGNyZWF0ZSBzdWJjbGFzc2VzIG9mCisgICAgICogRnVuY3Rpb24gdGhhdCBkZWZpbmUgYSBjYWxsKCkgbWV0aG9kIHdoaWNoIGNvbnRhaW5zIHRoZSBjb2RlIHRvCisgICAgICogYmUgdGltZWQuICBUaGV5IHRoZW4gY2FsbCBzZXRUZXN0RnVuY3Rpb24oKSBpbiB0aGVpciAiVGVzdC4uLiIKKyAgICAgKiBtZXRob2QgdG8gZXN0YWJsaXNoIHRoaXMgYXMgdGhlIGN1cnJlbnQgdGVzdCBmdW5jdG9yLgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgRnVuY3Rpb24geworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGRvIHRoZSBhY3Rpb24gdG8gYmUKKyAgICAgICAgICogbWVhc3VyZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjYWxsKCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN1YmNsYXNzZXMgbWF5IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byByZXR1cm4gcG9zaXRpdmUKKyAgICAgICAgICogaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBpbiBhIHNpbmdsZQorICAgICAgICAgKiBjYWxsIHRvIHRoaXMgb2JqZWN0J3MgY2FsbCgpIG1ldGhvZC4gIElmIHN1YmNsYXNzZXMgZG8gbm90CisgICAgICAgICAqIG92ZXJyaWRlIHRoaXMgbWV0aG9kLCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDEuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU3ViY2xhc3NlcyBtYXkgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHJldHVybiBlaXRoZXIgcG9zaXRpdmUKKyAgICAgICAgICogb3IgbmVnYXRpdmUgaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZXZlbnRzIGluIGEgc2luZ2xlCisgICAgICAgICAqIGNhbGwgdG8gdGhpcyBvYmplY3QncyBjYWxsKCkgbWV0aG9kLiAgSWYgc3ViY2xhc3NlcyBkbyBub3QKKyAgICAgICAgICogb3ZlcnJpZGUgdGhpcyBtZXRob2QsIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgLTEsCisgICAgICAgICAqIGluZGljYXRpbmcgdGhhdCBldmVudHMgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIHRoaXMgdGVzdC4KKyAgICAgICAgICogZS5nOiBOdW1iZXIgb2YgYnJlYWtzIC8gaXRlcmF0aW9ucyBmb3IgYnJlYWsgaXRlcmF0b3IKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBsb25nIGdldEV2ZW50c1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsIGNhbGwoKSBuIHRpbWVzIGluIGEgdGlnaHQgbG9vcCBhbmQgcmV0dXJuIHRoZSBlbGFwc2VkCisgICAgICAgICAqIG1pbGxpc2Vjb25kcy4gIElmIG4gaXMgc21hbGwgYW5kIGNhbGwoKSBpcyBmYXN0IHRoZSByZXR1cm4KKyAgICAgICAgICogcmVzdWx0IG1heSBiZSB6ZXJvLiAgU21hbGwgcmV0dXJuIHZhbHVlcyBoYXZlIGxpbWl0ZWQKKyAgICAgICAgICogbWVhbmluZ2Z1bG5lc3MsIGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBWTSBhbmQgT1MuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgZmluYWwgbG9uZyB0aW1lKGxvbmcgbikgeworICAgICAgICAgICAgbG9uZyBzdGFydCwgc3RvcDsKKyAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICAgICAgICAgIGNhbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0b3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIHJldHVybiBzdG9wIC0gc3RhcnQ7IC8vIG1zCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFeGNlcHRpb24gaW5kaWNhdGluZyBhIHVzYWdlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVXNhZ2VFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworICAgICAgICBwdWJsaWMgVXNhZ2VFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN1cGVyKG1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFVzYWdlRXhjZXB0aW9uKCkgeworICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLgorICAgICAqLworICAgIHByb3RlY3RlZCBQZXJmVGVzdCgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGcmFtZXdvcmsgbWV0aG9kLiAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwYXJzZSBhbnkKKyAgICAgKiBleHRyYSBhcmd1bWVudHMuICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIHRvIHBhcnNlIGV4dHJhCisgICAgICogYXJndW1lbnRzLiAgU3ViY2xhc3MgaW1wbGVtZW50YXRpb25zIHNob3VsZCBOT1QgY2FsbCB0aGUgYmFzZQorICAgICAqIGNsYXNzIGltcGxlbWVudGF0aW9uLgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIHNldHVwKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4dHJhIGFyZ3VtZW50cyByZWNlaXZlZCIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBnZXRPcHRpb25zKCkuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBIRUxQMSA9IDA7CisgICAgc3RhdGljIGZpbmFsIGludCBIRUxQMiA9IDE7CisgICAgc3RhdGljIGZpbmFsIGludCBWRVJCT1NFID0gMjsKKyAgICBzdGF0aWMgZmluYWwgaW50IFNPVVJDRURJUiA9IDM7CisgICAgc3RhdGljIGZpbmFsIGludCBFTkNPRElORyA9IDQ7CisgICAgc3RhdGljIGZpbmFsIGludCBVU0VMRU4gPSA1OworICAgIHN0YXRpYyBmaW5hbCBpbnQgRklMRV9OQU1FID0gNjsKKyAgICBzdGF0aWMgZmluYWwgaW50IFBBU1NFUyA9IDc7CisgICAgc3RhdGljIGZpbmFsIGludCBJVEVSQVRJT05TID0gODsKKyAgICBzdGF0aWMgZmluYWwgaW50IFRJTUUgPSA5OworICAgIHN0YXRpYyBmaW5hbCBpbnQgTElORV9NT0RFID0gMTA7CisgICAgc3RhdGljIGZpbmFsIGludCBCVUxLX01PREUgPSAxMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IEdBUkJBR0VfQ09MTEVDVCA9IDExOworCisgICAgVU9wdGlvbltdIGdldE9wdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBuZXcgVU9wdGlvbltdIHsKKyAgICAgICAgICAgIFVPcHRpb24uSEVMUF9IKCksCisgICAgICAgICAgICBVT3B0aW9uLkhFTFBfUVVFU1RJT05fTUFSSygpLAorICAgICAgICAgICAgVU9wdGlvbi5WRVJCT1NFKCksCisgICAgICAgICAgICBVT3B0aW9uLlNPVVJDRURJUigpLAorICAgICAgICAgICAgVU9wdGlvbi5FTkNPRElORygpLAorICAgICAgICAgICAgVU9wdGlvbi5ERUYoICJ1c2VsZW4iLCAgICAgICAgJ3UnLCBVT3B0aW9uLk5PX0FSRyksCisgICAgICAgICAgICBVT3B0aW9uLkRFRiggImZpbGUtbmFtZSIsICAgICAnZicsIFVPcHRpb24uUkVRVUlSRVNfQVJHKSwKKyAgICAgICAgICAgIFVPcHRpb24uREVGKCAicGFzc2VzIiwgICAgICAgICdwJywgVU9wdGlvbi5SRVFVSVJFU19BUkcpLAorICAgICAgICAgICAgVU9wdGlvbi5ERUYoICJpdGVyYXRpb25zIiwgICAgJ2knLCBVT3B0aW9uLlJFUVVJUkVTX0FSRyksICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFVPcHRpb24uREVGKCAidGltZSIsICAgICAgICAgICd0JywgVU9wdGlvbi5SRVFVSVJFU19BUkcpLAorICAgICAgICAgICAgVU9wdGlvbi5ERUYoICJsaW5lLW1vZGUiLCAgICAgJ2wnLCBVT3B0aW9uLk5PX0FSRyksCisgICAgICAgICAgICBVT3B0aW9uLkRFRiggImJ1bGstbW9kZSIsICAgICAnYicsIFVPcHRpb24uTk9fQVJHKSwKKworICAgICAgICAgICAgVU9wdGlvbi5ERUYoICJnYyIsICAgICAgICAgICAgJ2cnLCBVT3B0aW9uLk5PX0FSRyksIAorICAgICAgICB9OworICAgIH0KKworICAgIC8qKgorICAgICAqIFN1YmNsYXNzZXMgc2hvdWxkIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlaXIgbWFpbigpLiAgcnVuKCkgd2lsbAorICAgICAqIGluIHR1cm4gY2FsbCBzZXR1cCgpIHdpdGggYW55IGFyZ3VtZW50cyBpdCBkb2VzIG5vdCBwYXJzZS4KKyAgICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgdGhlIGNvbW1hbmQgbGluZSBhbmQgcnVucyB0aGUgdGVzdHMgZ2l2ZW4gb24KKyAgICAgKiB0aGUgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgU2VlIHRoZSBjbGFzcworICAgICAqIGRlc2NyaXB0aW9uIGZvciBkZXRhaWxzLgorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgQXJyYXlMaXN0IG1ldGhvZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIE1ldGhvZCBtZXRoID0gbnVsbDsKKworICAgICAgICBhdmFpbGFibGVUZXN0cyA9IG51bGw7CisgICAgICAgIGRvUHJpb3JHQyA9IGZhbHNlOworICAgICAgICBlbmNvZGluZyA9ICIiOworICAgICAgICB1c2VsZW4gPSBmYWxzZTsKKyAgICAgICAgZmlsZU5hbWUgPSBudWxsOworICAgICAgICBzb3VyY2VEaXIgPSBudWxsOworICAgICAgICAvL2xpbmVzID0gbnVsbDsKKyAgICAgICAgbGluZV9tb2RlID0gZmFsc2U7CisgICAgICAgIC8vYnVmZmVyID0gbnVsbDsKKyAgICAgICAgLy9idWZmZXJMZW4gPSAwOworICAgICAgICB2ZXJib3NlID0gZmFsc2U7CisgICAgICAgIGJ1bGtfbW9kZSA9IGZhbHNlOworICAgICAgICBwYXNzZXMgPSBpdGVyYXRpb25zID0gdGltZSA9IDA7CisKKyAgICAgICAgVU9wdGlvbltdIG9wdGlvbnMgPSBnZXRPcHRpb25zKCk7CisgICAgICAgIGludCByZW1haW5pbmdBcmdjID0gVU9wdGlvbi5wYXJzZUFyZ3MoYXJncywgb3B0aW9ucyk7CisKKyAgICAgICAgaWYoYXJncy5sZW5ndGg9PTAgfHwgb3B0aW9uc1tIRUxQMV0uZG9lc09jY3VyIHx8IG9wdGlvbnNbSEVMUDJdLmRvZXNPY2N1cikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFVzYWdlRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBpZihvcHRpb25zW1ZFUkJPU0VdLmRvZXNPY2N1cikgeworICAgICAgICAgICAgdmVyYm9zZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmKG9wdGlvbnNbU09VUkNFRElSXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgICAgIHNvdXJjZURpciA9IG9wdGlvbnNbU09VUkNFRElSXS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYob3B0aW9uc1tFTkNPRElOR10uZG9lc09jY3VyKSB7CisgICAgICAgICAgICBlbmNvZGluZyA9IG9wdGlvbnNbRU5DT0RJTkddLnZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZihvcHRpb25zW1VTRUxFTl0uZG9lc09jY3VyKSB7CisgICAgICAgICAgICB1c2VsZW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZihvcHRpb25zW0ZJTEVfTkFNRV0uZG9lc09jY3VyKXsKKyAgICAgICAgICAgIGZpbGVOYW1lID0gb3B0aW9uc1tGSUxFX05BTUVdLnZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3B0aW9uc1tUSU1FXS5kb2VzT2NjdXIgJiYgb3B0aW9uc1tJVEVSQVRJT05TXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBVc2FnZUV4Y2VwdGlvbigiQ2Fubm90IHNwZWNpZnkgYm90aCB0aW1lIGFuZCBpdGVyYXRpb25zIik7CisgICAgICAgIH0KKworICAgICAgICBpZihvcHRpb25zW1BBU1NFU10uZG9lc09jY3VyKSB7CisgICAgICAgICAgICBwYXNzZXMgPSBJbnRlZ2VyLnBhcnNlSW50KG9wdGlvbnNbUEFTU0VTXS52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmKG9wdGlvbnNbSVRFUkFUSU9OU10uZG9lc09jY3VyKSB7CisgICAgICAgICAgICBpdGVyYXRpb25zID0gSW50ZWdlci5wYXJzZUludChvcHRpb25zW0lURVJBVElPTlNdLnZhbHVlKTsKKyAgICAgICAgICAgIHRpbWUgPTA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmKG9wdGlvbnNbVElNRV0uZG9lc09jY3VyKSB7CisgICAgICAgICAgICB0aW1lID0gSW50ZWdlci5wYXJzZUludChvcHRpb25zW1RJTUVdLnZhbHVlKTsKKyAgICAgICAgICAgIGl0ZXJhdGlvbnMgPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3B0aW9uc1tMSU5FX01PREVdLmRvZXNPY2N1ciAmJiBvcHRpb25zW0JVTEtfTU9ERV0uZG9lc09jY3VyKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVXNhZ2VFeGNlcHRpb24oIkNhbm5vdCBzcGVjaWZ5IGJvdGggbGluZSBtb2RlIGFuZCBidWxrIG1vZGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKG9wdGlvbnNbTElORV9NT0RFXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgICAgIGxpbmVfbW9kZSA9IHRydWU7CisgICAgICAgICAgICBidWxrX21vZGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYob3B0aW9uc1tCVUxLX01PREVdLmRvZXNPY2N1cikgeworICAgICAgICAgICAgYnVsa19tb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgIGxpbmVfbW9kZSA9IGZhbHNlOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmKG9wdGlvbnNbR0FSQkFHRV9DT0xMRUNUXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgICAgIGRvUHJpb3JHQyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpbnQgaSwgajsKKyAgICAgICAgZm9yIChpPTA7IGk8cmVtYWluaW5nQXJnYzsgKytpKSB7CisKKyAgICAgICAgICAgIC8vIGlzIGFyZ3NbaV0gYSBtZXRob2QgbmFtZT8KKyAgICAgICAgICAgIE1ldGhvZCBtID0gZ2V0VGVzdE1ldGhvZChhcmdzW2ldKTsKKyAgICAgICAgICAgIGlmIChtICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtZXRob2RMaXN0LmFkZChtKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gYXJnc1tpXSBpcyBuZWl0aGVyIGEgbWV0aG9kIG5hbWUgbm9yIGEgbnVtYmVyLiAgUGFzcworICAgICAgICAgICAgLy8gZXZlcnl0aGluZyBmcm9tIGhlcmUgb24gdGhyb3VnaCB0byB0aGUgc3ViY2xhc3MgdmlhCisgICAgICAgICAgICAvLyBzZXR1cCgpLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWV0aG9kTGlzdC5zaXplKCkgPCAxKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVXNhZ2VFeGNlcHRpb24oIk11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgbWV0aG9kIG5hbWUiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBhc3MgcmVtYWluaW5nIGFyZ3VtZW50cywgaWYgYW55LCB0aHJvdWdoIHRvIHRoZSBzdWJjbGFzcworICAgICAgICAvLyB2aWEgc2V0dXAoKSBtZXRob2QuCisgICAgICAgIFN0cmluZ1tdIHN1YmNsYXNzQXJncyA9IG5ldyBTdHJpbmdbcmVtYWluaW5nQXJnYyAtIGldOworICAgICAgICBmb3IgKGo9MDsgaTxyZW1haW5pbmdBcmdjOyArK2opIHsKKyAgICAgICAgICAgIHN1YmNsYXNzQXJnc1tqXSA9IGFyZ3NbaSsrXTsKKyAgICAgICAgfQorICAgICAgICBzZXR1cChzdWJjbGFzc0FyZ3MpOworCisgICAgICAgIGlmIChkb1ByaW9yR0MpIHsKKyAgICAgICAgICAgIC8vIFB1dCB0aGUgaGVhcCBpbiBhIGNvbnNpc3RlbnQgc3RhdGUKKyAgICAgICAgICAgIGdjKCk7CisgICAgICAgIH0KKworCSAgICBmaW5hbCBPYmplY3RbXSBOT19BUkdTID0gbmV3IE9iamVjdFswXTsKKworICAgICAgICAvLyBSdW4gdGhlIHRlc3RzCisgICAgICAgIGZvciAoaT0wOyBpPG1ldGhvZExpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIG1ldGggPSAoTWV0aG9kKSBtZXRob2RMaXN0LmdldChpKTsKKworICAgICAgICAgICAgLy8gQ2FsbCBtZXRoIHRvIHNldCB1cCB0aGUgdGVzdAorICAgICAgICAgICAgbG9uZyBldmVudHNQZXJDYWxsID0gLTE7CisgICAgICAgICAgICBGdW5jdGlvbiB0ZXN0RnVuY3Rpb24gPSAoRnVuY3Rpb24pbWV0aC5pbnZva2UodGhpcywgTk9fQVJHUyk7CisgICAgICAgICAgICBpZiAodGVzdEZ1bmN0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihtZXRoLmdldE5hbWUoKSArICIgZmFpbGVkIHRvIHJldHVybiBhIHRlc3QgZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0ZXN0RnVuY3Rpb24uZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIDwgMSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKG1ldGguZ2V0TmFtZSgpICsgIiByZXR1cm5lZCBhbiBpbGxlZ2FsIG9wZXJhdGlvbnMvaXRlcmF0aW9uKCkiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IG47CisgICAgICAgICAgICBsb25nIHQ7CisgICAgICAgICAgICBmb3IgKGo9MDsgajxwYXNzZXM7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRpb25zID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBSdW4gc3BlY2lmaWVkIG51bWJlciBvZiBpdGVyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPSAiICsgbWV0aC5nZXROYW1lKCkgKyAiIGJlZ2luICIgKyBpdGVyYXRpb25zICsgIiBpdGVyYXRpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHQgPSB0ZXN0RnVuY3Rpb24udGltZShpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9ICIgKyBtZXRoLmdldE5hbWUoKSArICIgZW5kICIgKyAodC8xMDAwLjApICsgIiAiICsgdGVzdEZ1bmN0aW9uLmdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGZvciBzcGVjaWZpZWQgZHVyYXRpb24gaW4gc2Vjb25kcworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj0gIiArIG1ldGguZ2V0TmFtZSgpICsgIiBiZWdpbiAiICsgdGltZSArICIgc2Vjb25kcyIpOworICAgICAgICAgICAgICAgICAgICBuID0gdGltZSAqIDEwMDA7IC8vIHMgPT4gbXMKKyAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiMgIiArIG1ldGguZ2V0TmFtZSgpICsgIiAiICsgbiArICIgc2VjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbnQgbG9vcHMgPSAwOworICAgICAgICAgICAgICAgICAgICBpbnQgZmFpbHNhZmUgPSAxOyAvLyBsYXN0IHJlc29ydCBmb3IgdmVyeSBmYXN0IG1ldGhvZHMKKyAgICAgICAgICAgICAgICAgICAgdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0IDwgKGludCkobiAqIDAuOSkpIHsgLy8gOTAlIGlzIGNsb3NlIGVub3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3BzID09IDAgfHwgdCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcHMgPSBmYWlsc2FmZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsc2FmZSAqPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiMgIiArIG1ldGguZ2V0TmFtZSgpICsgIiB4ICIgKyBsb29wcyArICIgPSAiICsgdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BzID0gKGludCkoKGRvdWJsZSluIC8gdCAqIGxvb3BzICsgMC41KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9vcHMgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGNvbnZlcmdlIG9uIGRlc2lyZWQgZHVyYXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiIyAiICsgbWV0aC5nZXROYW1lKCkgKyAiIHggIiArIGxvb3BzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0ZXN0RnVuY3Rpb24udGltZShsb29wcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9ICIgKyBtZXRoLmdldE5hbWUoKSArICIgZW5kICIgKyAodC8xMDAwLjApICsgIiAiICsgdGVzdEZ1bmN0aW9uLmdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBsb29wcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSW52b2tlIHRoZSBydW50aW1lJ3MgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2NlZHVyZSByZXBlYXRlZGx5CisgICAgICogdW50aWwgdGhlIGFtb3VudCBvZiBmcmVlIG1lbW9yeSBzdGFiaWxpemVzIHRvIHdpdGhpbiAxMCUuCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgZ2MoKSB7CisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgbG9uZyBsYXN0OworICAgICAgICAgICAgbG9uZyBmcmVlID0gMTsKKyAgICAgICAgICAgIFJ1bnRpbWUgcnVudGltZSA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJ1bnRpbWUuZ2MoKTsKKyAgICAgICAgICAgICAgICBsYXN0ID0gZnJlZTsKKyAgICAgICAgICAgICAgICBmcmVlID0gcnVudGltZS5mcmVlTWVtb3J5KCk7CisgICAgICAgICAgICB9IHdoaWxlICgoKGRvdWJsZSlNYXRoLmFicyhmcmVlIC0gbGFzdCkpIC8gZnJlZSA+IDAuMSk7CisgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgY2hhbmdlIGluIGZyZWUgbWVtb3J5IHRvIGRyb3AgdW5kZXIgMTAlCisgICAgICAgICAgICAvLyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbHMuCisgICAgICAgIH0KKworICAgICAgICAvLyBGcm9tICJKYXZhIFBsYXRmb3JtIFBlcmZvcm1hbmNlIi4gIFRoaXMgaXMgdGhlIHByb2NlZHVyZQorICAgICAgICAvLyByZWNvbW1lbmRlZCBieSBKYXZhc29mdC4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5nYygpOworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDApOworICAgICAgICAgICAgU3lzdGVtLnJ1bkZpbmFsaXphdGlvbigpOworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBTeXN0ZW0uZ2MoKTsKKyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwKTsKKyAgICAgICAgICAgIFN5c3RlbS5ydW5GaW5hbGl6YXRpb24oKTsKKyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwKTsKKyAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkge30KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBtYXAgb2YgU3RyaW5nIHRvIE1ldGhvZCBvYmplY3RzLiAgRWFjaCBzdHJpbmcgaXMgYQorICAgICAqIG11bmdlZCBhbGwtbG93ZXJjYXNlIG5hbWUuICBGb3IgdGhpcyByZWFzb24sIHRlc3QgbWV0aG9kcworICAgICAqIChiZWdpbm5pbmcgd2l0aCAidGVzdCIsIGlnbm9yaW5nIGNhc2UpIG11c3Qgbm90IGNvbGxpZGUgd2hlbgorICAgICAqIGNhc2UgZm9sZGVkLgorICAgICAqLworICAgIHByaXZhdGUgTWFwIGdldEF2YWlsYWJsZVRlc3RzKCkgeworICAgICAgICBpZiAoYXZhaWxhYmxlVGVzdHMgPT0gbnVsbCkgeworICAgICAgICAgICAgYXZhaWxhYmxlVGVzdHMgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGdldENsYXNzKCkuZ2V0RGVjbGFyZWRNZXRob2RzKCk7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bWV0aG9kcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBtZXRob2RzIG5hbWVkICJ0ZXN0KCkiIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiA0ICYmIG5hbWUuc3RhcnRzV2l0aCgidGVzdCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGVUZXN0cy5nZXQobmFtZSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkR1cGxpY2F0ZSBtZXRob2QgbmFtZSBpZ25vcmluZyBjYXNlOiAiICsgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlVGVzdHMucHV0KG5hbWUsIG1ldGhvZHNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXZhaWxhYmxlVGVzdHM7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBuYW1lLCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgTWV0aG9kIG9iamVjdCwgb3IgbnVsbCBpZgorICAgICAqIG5vdCBmb3VuZC4gIFRoZSBnaXZlbiBuYW1lIHdpbGwgbWFwIHRvIGEgbWV0aG9kIG9mIHRoZSBzYW1lCisgICAgICogbmFtZSwgb3IgYSBtZXRob2QgbmFtZWQgInRlc3QiICsgbmFtZS4gIENhc2UgaXMgaWdub3JlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIE1ldGhvZCBnZXRUZXN0TWV0aG9kKFN0cmluZyBuYW1lKSB7CisgICAgICAgIE1hcCBhdmFpbCA9IGdldEF2YWlsYWJsZVRlc3RzKCk7CisgICAgICAgIFN0cmluZyBrZXkgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIE1ldGhvZCBtID0gKE1ldGhvZCkgYXZhaWwuZ2V0KGtleSk7CisgICAgICAgIGlmIChtICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBtOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoTWV0aG9kKSBhdmFpbC5nZXQoInRlc3QiICsga2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcml2YXRlIHV0aWxpdHkgdG8gY29udmVydCBhIExpc3Qgb2YgSW50ZWdlciBvYmplY3RzIHRvIGludFtdLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludFtdIHRvSW50QXJyYXkoTGlzdCBsaXN0KSB7CisgICAgICAgIGludFtdIHJlc3VsdCA9IG5ldyBpbnRbbGlzdC5zaXplKCldOworICAgICAgICBmb3IgKGludCBpPTA7IGk8bGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gKChJbnRlZ2VyKSBsaXN0LmdldChpKSkuaW50VmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBwdWJsaWMgc3RhdGljIGNoYXJbXSByZWFkVG9FT1MoSW5wdXRTdHJlYW1SZWFkZXIgc3RyZWFtKSB7CisgICAgICAgIEFycmF5TGlzdCB2ZWMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICBmaW5hbCBpbnQgTUFYTEVOR1RIID0gMHg4MDAwOyAvLyBtYXggYnVmZmVyIHNpemUgLSAzMksKKyAgICAgICAgaW50IGxlbmd0aCA9IDB4ODA7IC8vIHN0YXJ0IHdpdGggc21hbGwgYnVmZmVycyBhbmQgd29yayB1cAorICAgICAgICBkbyB7CisgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoID49IE1BWExFTkdUSCA/IE1BWExFTkdUSCA6IGxlbmd0aCAqIDI7CisgICAgICAgICAgICBjaGFyW10gYnVmZmVyID0gbmV3IGNoYXJbbGVuZ3RoXTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBpbnQgbiA9IHN0cmVhbS5yZWFkKGJ1ZmZlciwgcG9zLCBsZW5ndGggLSBwb3MpOworICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwb3MgKz0gbjsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChwb3MgPCBsZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZlYy5hZGQoYnVmZmVyKTsKKyAgICAgICAgICAgIGNvdW50ICs9IHBvczsKKyAgICAgICAgfSB3aGlsZSAocG9zID09IGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGNoYXJbXSBkYXRhID0gbmV3IGNoYXJbY291bnRdOworICAgICAgICBwb3MgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlYy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY2hhcltdIGJ1ZiA9IChjaGFyW10pdmVjLmdldChpKTsKKyAgICAgICAgICAgIGludCBsZW4gPSBNYXRoLm1pbihidWYubGVuZ3RoLCBjb3VudCAtIHBvcyk7CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZiwgMCwgZGF0YSwgcG9zLCBsZW4pOworICAgICAgICAgICAgcG9zICs9IGxlbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9CisgICAgcHVibGljIHN0YXRpYyBieXRlW10gcmVhZFRvRU9TKElucHV0U3RyZWFtIHN0cmVhbSkgeworCisgICAgICAgIEFycmF5TGlzdCB2ZWMgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICBmaW5hbCBpbnQgTUFYTEVOR1RIID0gMHg4MDAwOyAvLyBtYXggYnVmZmVyIHNpemUgLSAzMksKKyAgICAgICAgaW50IGxlbmd0aCA9IDB4ODA7IC8vIHN0YXJ0IHdpdGggc21hbGwgYnVmZmVycyBhbmQgd29yayB1cAorICAgICAgICBkbyB7CisgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoID49IE1BWExFTkdUSCA/IE1BWExFTkdUSCA6IGxlbmd0aCAqIDI7CisgICAgICAgICAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbbGVuZ3RoXTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBpbnQgbiA9IHN0cmVhbS5yZWFkKGJ1ZmZlciwgcG9zLCBsZW5ndGggLSBwb3MpOworICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwb3MgKz0gbjsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChwb3MgPCBsZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZlYy5hZGQoYnVmZmVyKTsKKyAgICAgICAgICAgIGNvdW50ICs9IHBvczsKKyAgICAgICAgfSB3aGlsZSAocG9zID09IGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbY291bnRdOworICAgICAgICBwb3MgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlYy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYnl0ZVtdIGJ1ZiA9IChieXRlW10pdmVjLmdldChpKTsKKyAgICAgICAgICAgIGludCBsZW4gPSBNYXRoLm1pbihidWYubGVuZ3RoLCBjb3VudCAtIHBvcyk7CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZiwgMCwgZGF0YSwgcG9zLCBsZW4pOworICAgICAgICAgICAgcG9zICs9IGxlbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9CisgICAgCisgICAgcHVibGljIFN0cmluZ1tdIHJlYWRMaW5lcyhTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBlbmNvZGluZywgYm9vbGVhbiBidWxrTW9kZSkgeworICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbnVsbDsKKyAgICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgaXNyID0gbnVsbDsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlTmFtZSk7CisgICAgICAgICAgICBpc3IgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZmlzLCBlbmNvZGluZyk7CisgICAgICAgICAgICBicj0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlzcik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiBGaWxlIGFjY2VzcyBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSArICIhIik7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGluZSA9IHJlYWREYXRhTGluZShicik7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUmVhZCBGaWxlIEVycm9yIiArIGUuZ2V0TWVzc2FnZSgpICsgIiEiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwpIGJyZWFrOworICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoKCkgPT0gMCkgY29udGludWU7CisgICAgICAgICAgICBsaXN0LmFkZChsaW5lKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IHNpemUgPSBsaXN0LnNpemUoKTsKKyAgICAgICAgU3RyaW5nW10gbGluZXMgPSBudWxsOworICAgICAgICAKKyAgICAgICAgaWYgKGJ1bGtNb2RlKSB7CisgICAgICAgICAgICBsaW5lcyA9IG5ldyBTdHJpbmdbMV07CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKFN0cmluZykgbGlzdC5nZXQoaSkpOworICAgICAgICAgICAgICAgIC8qaWYgKGkgPCAoc2l6ZSAtIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlxyXG4iKTsKKyAgICAgICAgICAgICAgICB9Ki8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVzWzBdID0gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaW5lcyA9IG5ldyBTdHJpbmcgW3NpemVdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBsaW5lc1tpXSA9IChTdHJpbmcpIGxpc3QuZ2V0KGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbGluZXM7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBTdHJpbmcgcmVhZERhdGFMaW5lKEJ1ZmZlcmVkUmVhZGVyIGJyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIG9yaWdpbmFsTGluZSA9ICIiOworICAgICAgICBTdHJpbmcgbGluZSA9ICIiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGluZSA9IG9yaWdpbmFsTGluZSA9IGJyLnJlYWRMaW5lKCk7CisgICAgICAgICAgICBpZiAobGluZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCgpID4gMCAmJiBsaW5lLmNoYXJBdCgwKSA9PSAweEZFRkYpIGxpbmUgPSBsaW5lLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIGludCBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcjJyk7CisgICAgICAgICAgICBpZiAoY29tbWVudFBvcyA+PSAwKSBsaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgY29tbWVudFBvcyk7CisgICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJMaW5lIFwiezB9XCIsICBcInsxfVwiIiArIG9yaWdpbmFsTGluZSArICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxpbmUgKyAiICIgKyBlLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaW5lOworICAgIH0KK30KKworLy9lb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9wZXJmL1VDaGFyYWN0ZXJQZXJmLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9VQ2hhcmFjdGVyUGVyZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMWQwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9VQ2hhcmFjdGVyUGVyZi5qYXZhCkBAIC0wLDAgKzEsNTM5IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvVUNoYXJhY3RlclBlcmYuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzEwLzMwIDE3OjU4OjI2ICQKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QucGVyZjsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKKworLyoqCisgKiBCYXNlIHBlcmZvcm1hbmNlIHRlc3QgdGhhdCB0YWtlcyBpbiBhIG1ldGhvZCBuYW1lIGZvciB0ZXN0aW5nIHdpdGggSkRLLgorICogVG8gdXNlIAorICogPGNvZGU+CisgKiBqYXZhIGNvbS5pYm0uaWN1LmRldi50ZXN0LnBlcmYuVUNoYXJhY3RlclBlcmYgJE1ldGhvZE5hbWUgJExvb3BDb3VudCAtIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNUQVJUX1RFU1RfQ0hBUkFDVEVSICRFTkRfVEVTVF9DSEFSQUNURVIKKyAqIDwvY29kZT4KKyAqIHdoZXJlICQqX1RFU1RfQ0hBUkFDVEVSIGFyZSBpbiBoZXggZGVjaW1hbHMgd2l0aCBhIGxlYWRpbmcgMHgKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFVDaGFyYWN0ZXJQZXJmIGV4dGVuZHMgUGVyZlRlc3QgCit7CisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsgICAKKyAgICAgICAgbmV3IFVDaGFyYWN0ZXJQZXJmKCkucnVuKGFyZ3MpOworCSAgICAvLyBuZXcgVUNoYXJhY3RlclBlcmYoKS5UZXN0UGVyZm9ybWFuY2UoKTsKKwl9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0dXAoU3RyaW5nW10gYXJncykgeworICAgICAgICAvLyBXZSBvbmx5IHRha2Ugb25lIGFyZ3VtZW50LCB0aGUgcGF0dGVybgorICAgICAgICBNSU5fID0gQ2hhcmFjdGVyLk1JTl9WQUxVRTsKKyAgICAgICAgTUFYXyA9IENoYXJhY3Rlci5NQVhfVkFMVUU7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAxKSB7CisgICAgICAgIAlNSU5fID0gSW50ZWdlci5wYXJzZUludChhcmdzWzBdLCAxNik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID49IDIpIHsKKyAgICAgICAgICAgIE1BWF8gPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0sIDE2KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0RGlnaXQoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNoID0gTUlOXzsgY2ggPCBNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmRpZ2l0KGNoLCAxMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNQVhfIC0gTUlOXyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RKREtEaWdpdCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gKGNoYXIpTUlOXzsgY2ggPCAoY2hhcilNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIuZGlnaXQoY2gsIDEwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEdldE51bWVyaWNWYWx1ZSgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY2ggPSBNSU5fOyBjaCA8IE1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuZ2V0TnVtZXJpY1ZhbHVlKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SkRLR2V0TnVtZXJpY1ZhbHVlKCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNoYXIgY2ggPSAoY2hhcilNSU5fOyBjaCA8IChjaGFyKU1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5nZXROdW1lcmljVmFsdWUoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEdldFR5cGUoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNoID0gTUlOXzsgY2ggPCBNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmdldFR5cGUoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gICAKKworICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RKREtHZXRUeXBlKCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNoYXIgY2ggPSAoY2hhcilNSU5fOyBjaCA8IChjaGFyKU1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5nZXRUeXBlKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SXNEZWZpbmVkKCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjaCA9IE1JTl87IGNoIDwgTUFYXzsgY2ggKyspIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5pc0RlZmluZWQoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gICAgCisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEpES0lzRGVmaW5lZCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gKGNoYXIpTUlOXzsgY2ggPCAoY2hhcilNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIuaXNEZWZpbmVkKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9ICAgIAorCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdElzRGlnaXQoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNoID0gTUlOXzsgY2ggPCBNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmlzRGlnaXQoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gICAgCisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEpES0lzRGlnaXQoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoY2hhciBjaCA9IChjaGFyKU1JTl87IGNoIDwgKGNoYXIpTUFYXzsgY2ggKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyLmlzRGlnaXQoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SXNJZGVudGlmaWVySWdub3JhYmxlKCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjaCA9IE1JTl87IGNoIDwgTUFYXzsgY2ggKyspIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5pc0lkZW50aWZpZXJJZ25vcmFibGUoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gICAgCisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEpES0lzSWRlbnRpZmllcklnbm9yYWJsZSgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gKGNoYXIpTUlOXzsgY2ggPCAoY2hhcilNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIuaXNJZGVudGlmaWVySWdub3JhYmxlKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdElzSVNPQ29udHJvbCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY2ggPSBNSU5fOyBjaCA8IE1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuaXNJU09Db250cm9sKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEpES0lzSVNPQ29udHJvbCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gKGNoYXIpTUlOXzsgY2ggPCAoY2hhcilNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIuaXNJU09Db250cm9sKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdElzTGV0dGVyKCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjaCA9IE1JTl87IGNoIDwgTUFYXzsgY2ggKyspIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5pc0xldHRlcihjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNQVhfIC0gTUlOXyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RKREtJc0xldHRlcigpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gKGNoYXIpTUlOXzsgY2ggPCAoY2hhcilNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIuaXNMZXR0ZXIoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SXNMZXR0ZXJPckRpZ2l0KCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjaCA9IE1JTl87IGNoIDwgTUFYXzsgY2ggKyspIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SkRLSXNMZXR0ZXJPckRpZ2l0KCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNoYXIgY2ggPSAoY2hhcilNSU5fOyBjaCA8IChjaGFyKU1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RJc0xvd2VyQ2FzZSgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY2ggPSBNSU5fOyBjaCA8IE1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuaXNMb3dlckNhc2UoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gICAgCisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEpES0lzTG93ZXJDYXNlKCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNoYXIgY2ggPSAoY2hhcilNSU5fOyBjaCA8IChjaGFyKU1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5pc0xvd2VyQ2FzZShjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNQVhfIC0gTUlOXyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfSAgICAKKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SXNTcGFjZUNoYXIoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNoID0gTUlOXzsgY2ggPCBNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmlzU3BhY2VDaGFyKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9IAorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RKREtJc1NwYWNlQ2hhcigpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gKGNoYXIpTUlOXzsgY2ggPCAoY2hhcilNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIuaXNTcGFjZUNoYXIoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gIAorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RJc1RpdGxlQ2FzZSgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY2ggPSBNSU5fOyBjaCA8IE1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuaXNUaXRsZUNhc2UoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SkRLSXNUaXRsZUNhc2UoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoY2hhciBjaCA9IChjaGFyKU1JTl87IGNoIDwgKGNoYXIpTUFYXzsgY2ggKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyLmlzVGl0bGVDYXNlKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9ICAgIAorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RJc1VuaWNvZGVJZGVudGlmaWVyUGFydCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY2ggPSBNSU5fOyBjaCA8IE1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmllclBhcnQoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gCisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEpES0lzVW5pY29kZUlkZW50aWZpZXJQYXJ0KCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNoYXIgY2ggPSAoY2hhcilNSU5fOyBjaCA8IChjaGFyKU1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5pc1VuaWNvZGVJZGVudGlmaWVyUGFydChjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNQVhfIC0gTUlOXyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfSAKKyAgICAKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SXNVbmljb2RlSWRlbnRpZmllclN0YXJ0KCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjaCA9IE1JTl87IGNoIDwgTUFYXzsgY2ggKyspIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5pc1VuaWNvZGVJZGVudGlmaWVyU3RhcnQoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFYXyAtIE1JTl8gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gCisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEpES0lzVW5pY29kZUlkZW50aWZpZXJTdGFydCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gKGNoYXIpTUlOXzsgY2ggPCAoY2hhcilNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmllclN0YXJ0KGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9IAorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RJc1VwcGVyQ2FzZSgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gKGNoYXIpTUlOXzsgY2ggPCAoY2hhcilNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmlzVXBwZXJDYXNlKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1BWF8gLSBNSU5fICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdEpES0lzVXBwZXJDYXNlKCkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNoYXIgY2ggPSAoY2hhcilNSU5fOyBjaCA8IChjaGFyKU1BWF87IGNoICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5pc1VwcGVyQ2FzZShjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNQVhfIC0gTUlOXyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfSAgICAKKyAgICAgICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RJc1doaXRlU3BhY2UoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNoID0gTUlOXzsgY2ggPCBNQVhfOyBjaCArKykgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNQVhfIC0gTUlOXyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RKREtJc1doaXRlU3BhY2UoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIGZvciAoY2hhciBjaCA9IChjaGFyKU1JTl87IGNoIDwgKGNoYXIpTUFYXzsgY2ggKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNQVhfIC0gTUlOXyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBNaW5pbXVtIGNvZGVwb2ludCB0byBkbyB0ZXN0LiBUZXN0IGlzIHJhbiBmcm9tIE1JTl8gdG8gTUFYXworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBNSU5fOworICAgIC8qKgorICAgICAqIE1pbmltdW0gY29kZXBvaW50IHRvIGRvIHRlc3QuIFRlc3QgaXMgcmFuIGZyb20gTUlOXyB0byBNQVhfCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IE1BWF87Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9Vbmljb2RlU2V0UGVyZi5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvVW5pY29kZVNldFBlcmYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE1Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvVW5pY29kZVNldFBlcmYuamF2YQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChjKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9Vbmljb2RlU2V0UGVyZi5qYXZhLHYgJCAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnBlcmY7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKKy8qKgorICogQSBjbGFzcyBmb3IgdGVzdGluZyBVbmljb2RlU2V0IHBlcmZvcm1hbmNlLgorICoKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEBzaW5jZSBJQ1UgMi40CisgKi8KK3B1YmxpYyBjbGFzcyBVbmljb2RlU2V0UGVyZiBleHRlbmRzIFBlcmZUZXN0IHsKKworICAgIFN0cmluZyBwYXR0ZXJuOworICAgIFVuaWNvZGVTZXQgdGVzdENoYXJzOworICAgIFVuaWNvZGVTZXRJdGVyYXRvciBpdDsKKyAgICBVbmljb2RlU2V0IHVzOworICAgIEhhc2hTZXQgaHM7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFVuaWNvZGVTZXRQZXJmKCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIHNldHVwKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgLy8gV2Ugb25seSB0YWtlIG9uZSBhcmd1bWVudCwgdGhlIHBhdHRlcm4KKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQbGVhc2Ugc3VwcGx5IFVuaWNvZGVTZXQgcGF0dGVybiIpOworICAgICAgICB9CisKKyAgICAgICAgcGF0dGVybiA9IGFyZ3NbMF07CisgICAgICAgIHRlc3RDaGFycyA9IG5ldyBVbmljb2RlU2V0KHBhdHRlcm4pOworICAgICAgICBpdCA9IG5ldyBVbmljb2RlU2V0SXRlcmF0b3IodGVzdENoYXJzKTsKKyAgICAgICAgdXMgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICBocyA9IG5ldyBIYXNoU2V0KCk7CisgICAgfQorCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdFVuaWNvZGVTZXRBZGQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGVyZlRlc3QuRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjYWxsKCkgeworICAgICAgICAgICAgICAgIHVzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgaXQucmVzZXQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbj0wOworICAgICAgICAgICAgICAgIHdoaWxlIChpdC5uZXh0UmFuZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjcCA9IGl0LmNvZGVwb2ludDsgY3AgPD0gaXQuY29kZXBvaW50RW5kOyArK2NwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cy5hZGQoY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgKytuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0Q2hhcnMuc2l6ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RIYXNoU2V0QWRkKCkgeworICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBocy5jbGVhcigpOworICAgICAgICAgICAgICAgIGl0LnJlc2V0KCk7CisgICAgICAgICAgICAgICAgaW50IG49MDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXQubmV4dFJhbmdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY3AgPSBpdC5jb2RlcG9pbnQ7IGNwIDw9IGl0LmNvZGVwb2ludEVuZDsgKytjcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaHMuYWRkKG5ldyBJbnRlZ2VyKGNwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICArK247CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RDaGFycy5zaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgUGVyZlRlc3QuRnVuY3Rpb24gdGVzdFVuaWNvZGVTZXRDb250YWlucygpIHsKKyAgICAgICAgdXMuY2xlYXIoKTsKKyAgICAgICAgdXMuc2V0KHRlc3RDaGFycyk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBpbnQgdGVtcCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY3AgPSAwOyBjcCA8PSAweDEwRkZGRjsgKytjcCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodXMuY29udGFpbnMoY3ApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICs9IGNwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRPcGVyYXRpb25zUGVySXRlcmF0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAweDExMDAwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SGFzaFNldENvbnRhaW5zKCkgeworICAgICAgICBocy5jbGVhcigpOworICAgICAgICBpdC5yZXNldCgpOworICAgICAgICB3aGlsZSAoaXQubmV4dCgpKSB7CisgICAgICAgICAgICBocy5hZGQobmV3IEludGVnZXIoaXQuY29kZXBvaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgaW50IHRlbXAgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGNwID0gMDsgY3AgPD0gMHgxMEZGRkY7ICsrY3ApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhzLmNvbnRhaW5zKG5ldyBJbnRlZ2VyKGNwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKz0gY3A7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldE9wZXJhdGlvbnNQZXJJdGVyYXRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDB4MTEwMDAwOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIFBlcmZUZXN0LkZ1bmN0aW9uIHRlc3RVbmljb2RlU2V0SXRlcmF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdC5GdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNhbGwoKSB7CisgICAgICAgICAgICAgICAgaW50IHRlbXAgPSAwOworICAgICAgICAgICAgICAgIFVuaWNvZGVTZXRJdGVyYXRvciB1aXQgPSBuZXcgVW5pY29kZVNldEl0ZXJhdG9yKHRlc3RDaGFycyk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHVpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCArPSB1aXQuY29kZXBvaW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdENoYXJzLnNpemUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBQZXJmVGVzdC5GdW5jdGlvbiB0ZXN0SGFzaFNldEl0ZXJhdGUoKSB7CisgICAgICAgIGhzLmNsZWFyKCk7CisgICAgICAgIGl0LnJlc2V0KCk7CisgICAgICAgIHdoaWxlIChpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIGhzLmFkZChuZXcgSW50ZWdlcihpdC5jb2RlcG9pbnQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0LkZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY2FsbCgpIHsKKyAgICAgICAgICAgICAgICBpbnQgdGVtcCA9IDA7CisgICAgICAgICAgICAgICAgSXRlcmF0b3IgaXQgPSBocy5pdGVyYXRvcigpOworICAgICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCArPSAoKEludGVnZXIpaXQubmV4dCgpKS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0T3BlcmF0aW9uc1Blckl0ZXJhdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdENoYXJzLnNpemUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9jb2xsYXRpb25wZXJmLnBsIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvY29sbGF0aW9ucGVyZi5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjVhMGEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvY29sbGF0aW9ucGVyZi5wbApAQCAtMCwwICsxLDExNiBAQAorIworIyAgSUNVIGFuZCBXaW5kb3dzIENvbGxhdGlvbiBwZXJmb3JtYW5jZSB0ZXN0IHNjcmlwdAorIyAgICAgIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgY29sbHBlcmYgdGVzdCBwcm9ncmFtLgorIyAgICAgIFRoaXMgc2NyaXB0IGRlZmluZXMgdGhlIGxvY2FsZXMgYW5kIGRhdGEgZmlsZXMgdG8gYmUgdGVzdGVkLAorIyAgICAgICAgcnVucyB0aGUgY29sbHBlcmYgcHJvZ3JhbSwgYW5kIGZvcm1hdHMgYW5kIHByaW50cyB0aGUgcmVzdWx0cy4KKyMKKyMgICAgICAgIDcgSnVuZSAyMDAxICAgQW5keSBIZW5pbmdlcgorIworIyAgSUNVNEogYW5kIEphdmEgQ29sbGF0b3IgcGVyZm9ybWFuY2UgdGVzdCBzY3JpcHQKKyMgIDIwMDItMDktMjUgbW9kaWZpZWQgYnkgUmljaGFyZCBMaWFuZworCisjCisjIE1hcCBkZWZpbmVzIHRoZSBzZXQgb2YgZGF0YSBmaWxlcyB0byBydW4gaW4gZWFjaCBsb2NhbGUKKyMKKyVkYXRhRmlsZXMgPSAoCisgICAiZW5fVVMiLCAJCSJUZXN0TmFtZXNfTGF0aW4udHh0IiwKKyAgICJkYV9ESyIsIAkJIlRlc3ROYW1lc19MYXRpbi50eHQiLAorICAgImRlX0RFIiwgICAgCQkiVGVzdE5hbWVzX0xhdGluLnR4dCIsCisgICAiZGVfX1BIT05FQk9PSyIsICJUZXN0TmFtZXNfTGF0aW4udHh0IiwKKyAgICJmcl9GUiIsICAgCQkiVGVzdE5hbWVzX0xhdGluLnR4dCIsCisgICAiamFfSlAiLCAJCSJUZXN0TmFtZXNfTGF0aW4udHh0IFRlc3ROYW1lc19KYXBhbmVzZV9oLnR4dCBUZXN0TmFtZXNfSmFwYW5lc2Vfay50eHQgVGVzdE5hbWVzX0FzaWFuLnR4dCIsCisgICAiemhfQ04iLCAJCSJUZXN0TmFtZXNfTGF0aW4udHh0IFRlc3ROYW1lc19DaGluZXNlLnR4dCIsCisgICAiemhfVFciLCAJCSJUZXN0TmFtZXNfTGF0aW4udHh0IFRlc3ROYW1lc19DaGluZXNlLnR4dCIsCisgICAiemhfX1BJTllJTiIsIAkiVGVzdE5hbWVzX0xhdGluLnR4dCBUZXN0TmFtZXNfQ2hpbmVzZS50eHQiLAorICAgInJ1X1JVIiwgCQkiVGVzdE5hbWVzX0xhdGluLnR4dCBUZXN0TmFtZXNfUnVzc2lhbi50eHQiLAorICAgInRoIiwgICAgCQkiVGVzdE5hbWVzX0xhdGluLnR4dCBUZXN0TmFtZXNfVGhhaS50eHQiLAorICAgImtvX0tSIiwgICAgICAgICAiVGVzdE5hbWVzX0xhdGluLnR4dCBUZXN0TmFtZXNfS29yZWFuLnR4dCIsCisgICApOworCisKKyMKKyMgIE91dGVyIGxvb3AgcnVucyB0aHJvdWdoIHRoZSBsb2NhbGVzIHRvIHRlc3QKKyMgICAgIChFZGl0IHRoaXMgbGlzdCBkaXJjdGx5IHRvIG1ha2UgY2hhbmdlcykKKyMKKyAgIGZvcmVhY2ggJGxvY2FsZSAoCisJICAgImVuX1VTIiwKKwkgICAiZGFfREsiLAorCSAgICJkZV9ERSIsCisJICAgImRlX19QSE9ORUJPT0siLAorCSAgICJmcl9GUiIsCisJICAgImphX0pQIiwKKyAgICAgICAiemhfQ04iLAorCSAgICJ6aF9UVyIsCisJICAgInpoX19QSU5ZSU4iLAorICAgICAgICJrb19LUiIsCisJICAgInJ1X1JVIiwKKwkgICAidGgiLAorICAgICAgICAgICAgICAgICAgICkKKyAgICAgICB7CisgICAgICAgIworICAgICAgICMgSW5uZXIgbG9vcCBydW5zIG92ZXIgdGhlIHNldCBvZiBkYXRhIGZpbGVzIHNwZWNpZmllZCBmb3IgZWFjaCBsb2NhbGUuCisgICAgICAgIyAgICAoRWRpdCB0aGUgJWRhdGFmaWxlcyBpbml0aWFsaXphdGlvbiwgYWJvdmUsIHRvIG1ha2UgY2hhbmdlcy4KKyAgICAgICAjCisgICAgICAgJGZmID0gJGRhdGFGaWxlc3skbG9jYWxlfTsKKyAgICAgICBAZmYgPSBzcGxpdCgvW1xzXSsvLCAkZmYpOworICAgICAgIGZvcmVhY2ggJGRhdGEgKEBmZikgeworCisgICAgICAgICAgIworICAgICAgICAgICMgUnVuIElDVSBUZXN0IGZvciB0aGlzIChsb2NhbGUsIGRhdGEgZmlsZSkgcGFpci4KKyAgICAgICAgICAjCisgICAgICAgICAgJGlTdHJDb2wgPSBgamF2YSAtY2xhc3NwYXRoIC4uL2NsYXNzZXMgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uUGVyZm9ybWFuY2VUZXN0IC10ZXJzZSAtZmlsZSAkZGF0YSAtbG9jYWxlICRsb2NhbGUgLWxvb3AgMTAwMCAtYmluc2VhcmNoYDsKKyAgICAgICAgICAkaVN0ckNvbCA9fnMvWyxcc10qLy9nOyAgIyB3aGFjayBvZmYgdGhlIGxlYWRpbmcgIiAgLCIgaW4gdGhlIHJldHVybmVkIHJlc3VsdC4KKyAgICAgICAgICBkb0tleVRpbWVzKCJqYXZhIC1jbGFzc3BhdGggLi4vY2xhc3NlcyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25QZXJmb3JtYW5jZVRlc3QgLXRlcnNlIC1maWxlICRkYXRhIC1sb2NhbGUgJGxvY2FsZSAtbG9vcCAxMDAwIC1rZXlnZW4iLAorICAgICAgICAgICAgICAgICAgICAgJGlLZXlHZW4sICRpS2V5TGVuKTsKKworCisgICAgICAgICAgIworICAgICAgICAgICMgUnVuIFdpbmRvd3MgdGVzdCBmb3IgdGhpcyAobG9jYWxlLCBkYXRhIGZpbGUpIHBhaXIuICBPbmx5IGRvIGlmCisgICAgICAgICAgIyAgICB3ZSBhcmUgbm90IG9uIFdpbmRvd3MgOTgvTUUgYW5kIHdlIGhhdmEgYSB3aW5kb3dzIGxhbmdJRAorICAgICAgICAgICMgICAgZm9yIHRoZSBsb2NhbGUuCisgICAgICAgICAgIworICAgICAgICAgICR3U3RyQ29sID0gJHdLZXlHZW4gPSAkd0tleUxlbiA9IDA7CisgICAgICAgICAgJHdTdHJDb2wgPSBgamF2YSAtY2xhc3NwYXRoIC4uL2NsYXNzZXMgY29tLmlibS5pY3UuZGV2LnRlc3QuY29sbGF0b3IuQ29sbGF0aW9uUGVyZm9ybWFuY2VUZXN0IC10ZXJzZSAtZmlsZSAkZGF0YSAtbG9jYWxlICRsb2NhbGUgLWxvb3AgMTAwMCAtYmluc2VhcmNoIC1qYXZhYDsKKyAgICAgICAgICAkd1N0ckNvbCA9fnMvWyxcc10qLy9nOyAgIyB3aGFjayBvZmYgdGhlIGxlYWRpbmcgIiAgLCIgaW4gdGhlIHJldHVybmVkIHJlc3VsdC4KKyAgICAgICAgICBkb0tleVRpbWVzKCJqYXZhIC1jbGFzc3BhdGggLi4vY2xhc3NlcyBjb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvci5Db2xsYXRpb25QZXJmb3JtYW5jZVRlc3QgLXRlcnNlIC1maWxlICRkYXRhIC1sb2NhbGUgJGxvY2FsZSAtbG9vcCAxMDAwIC1rZXlnZW4gLWphdmEiLAorICAgICAgICAgICAgICAgICAgICAgJHdLZXlHZW4sICR3S2V5TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICRjb2xsRGlmZiA9ICRrZXlHZW5EaWZmID0gJGtleUxlbkRpZmYgPSAwOworICAgICAgICAgIGlmICgkd0tleUxlbiA+IDApIHsKKyAgICAgICAgICAgICAgJGNvbGxEaWZmICAgPSAoKCR3U3RyQ29sIC0gJGlTdHJDb2wpIC8gJGlTdHJDb2wpICogMTAwOworICAgICAgICAgICAgICAka2V5R2VuRGlmZiA9ICgoJHdLZXlHZW4gLSAkaUtleUdlbikgLyAkaUtleUdlbikgKiAxMDA7CisgICAgICAgICAgICAgICRrZXlMZW5EaWZmID0gKCgkd0tleUxlbiAtICRpS2V5TGVuKSAvICRpS2V5TGVuKSAqIDEwMDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICMKKyAgICAgICAgICMgIFdyaXRlIHRoZSBsaW5lIG9mIHJlc3VsdHMgZm9yIHRoaXMgKGxvY2FsZSwgZGF0YSBmaWxlKS4KKyAgICAgICAgICMKKyAgICAgICAgIHdyaXRlOworICAgIH0KKyB9CisKKyMKKyMgIGRvS2V5R2VuVGltZXMoJENvbW1hbmRfdG9fcnVuLCAkdGltZSwgJGtleV9sZW5ndGgpCisjICAgICAgIERvIGEga2V5LWdlbmVyYXRpb24gdGVzdCBhbmQgcmV0dXJuIHRoZSB0aW1lIGFuZCBrZXkgbGVuZ3RoL2NoYXIgdmFsdWVzLgorIworc3ViIGRvS2V5VGltZXMoJCQkKSB7CisgICAjIHByaW50ICIkX1swXSI7CisgICBsb2NhbCgkeCkgPSBgJF9bMF1gOyAgICAgICAgICAgICAgICAgICMgZXhlY3V0ZSB0aGUgY29sbHBlcmYgY29tbWFuZC4KKyAgICgkX1sxXSwgJF9bMl0pID0gc3BsaXQoL1wsLywgJHgpOyAgICAgIyBjb2xscGVyZiByZXR1cm5zICJ0aW1lLCBrZXlsZW5ndGgiIHN0cmluZy4KK30KKworCisjCisjICBPdXRwdXQgRm9ybWF0cyAuLi4KKyMKKyMKK2Zvcm1hdCBTVERPVVRfVE9QID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0gSUNVIC0tLS0tLS0tICAgLS0tLS0tIEpBVkEgLS0tLS0tLSAgICAgIChKQVZBIC0gSUNVKS9JQ1UKK0xvY2FsZSAgICAgRGF0YSBmaWxlICAgICAgICAgICAgICAgICAgc3RyY29sbCBrZXlnZW4gIGtleWxlbiAgc3RyY29sbCBrZXlnZW4gIGtleWxlbiAgICBjb2xsICBrZXlnZW4gIGtleWxlbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuCisKK2Zvcm1hdCBTVERPVVQgPQorQDw8PDw8PDw8PCBAPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8fCBAIyMjIyMjICBAIyMjIyAgIEAjLiMjICB8QCMjIyMjIEAjIyMjIyAgIEAjLiMjIHwgQCMjIyUgIEAjIyMlICAgQCMjIyUKKyRsb2NhbGUsICRkYXRhLCAkaVN0ckNvbCwgJGlLZXlHZW4sICRpS2V5TGVuLCAkd1N0ckNvbCwgJHdLZXlHZW4sICR3S2V5TGVuLCAkY29sbERpZmYsICRrZXlHZW5EaWZmLCAka2V5TGVuRGlmZgorLgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvbm9ybXBlcmYucGwgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9ub3JtcGVyZi5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNjFjMzBjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvbm9ybXBlcmYucGwKQEAgLTAsMCArMSw1MzEgQEAKKyMhL3Vzci9sb2NhbC9iaW4vcGVybAorCit1c2Ugc3RyaWN0OworCisjIEFzc3VtZSB3ZSBhcmUgcnVubmluZyB3aXRoaW4gdGhlIGljdTRqIHJvb3QgZGlyZWN0b3J5Cit1c2UgbGliICdzcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZic7CisKK3VzZSBEYXRhc2V0OworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgY2xhc3MKK215ICRURVNUQ0xBU1MgPSAnY29tLmlibS5pY3UuZGV2LnRlc3QucGVyZi5Ob3JtYWxpemVyUGVyZm9ybWFuY2VUZXN0JzsKKworIyBNZXRob2RzIHRvIGJlIHRlc3RlZC4gIEVhY2ggcGFpciByZXByZXNlbnRzIGEgdGVzdCBtZXRob2QgYW5kCisjIGEgYmFzZWxpbmUgbWV0aG9kIHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBhcmlzb24uCitteSBATUVUSE9EUyAgPSAoWydUZXN0SUNVX05GQ19ORkNfVGV4dCcsICAnVGVzdEpES19ORkNfTkZDX1RleHQnXSwKKyAgICAgICAgICAgICAgICBbJ1Rlc3RJQ1VfTkZDX05GRF9UZXh0JywgICdUZXN0SkRLX05GQ19ORkRfVGV4dCddLAorICAgICAgICAgICAgICAgIFsnVGVzdElDVV9ORkNfT3JpZ19UZXh0JywgJ1Rlc3RKS0RfTkZDX09yaWdfVGV4dCddLAorCQkJCVsnVGVzdElDVV9ORkRfTkZDX1RleHQnLCAgJ1Rlc3RKREtfTkZEX05GQ19UZXh0J10sCisgICAgICAgICAgICAgICAgWydUZXN0SUNVX05GRF9ORkRfVGV4dCcsICAnVGVzdEpES19ORkRfTkZEX1RleHQnXSwKKyAgICAgICAgICAgICAgICBbJ1Rlc3RJQ1VfTkZEX09yaWdfVGV4dCcsICdUZXN0SkRLX05GRF9PcmlnX1RleHQnXSwgCisgICAgICAgICAgICAgICApOworCisjIFBhdHRlcm5zIHdoaWNoIGRlZmluZSB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdXNlZCBmb3IgdGVzdGluZy4KKworbXkgJFNPVVJDRURJUiA9ImM6XFx3b3JrXFxEZXZJQ1VcXGljdVxcc291cmNlXFx0ZXN0XFxwZXJmXFxub3JtcGVyZlxcdGV4dFxcIjsKKworbXkgQE9QVElPTlMgPSAoCisjICAgICAgICAgICAgICAgICAgICAgIHNyYyB0ZXh0ICAgICAgICAgIAkgIHNyYyBlbmNvZGluZyAgbW9kZSAgCisgICAgICAgICAgICAgICAgICAgIFsgImFyYWJpYy50eHQiLCAgICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKyAgICAgICAgICAgICAgICAgICAgWyAiZnJlbmNoLnR4dCIsICAgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorICAgICAgICAgICAgICAgICAgICBbICJncmVlay50eHQiLCAgICAgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisgICAgICAgICAgICAgICAgICAgIFsgImhlYnJldy50eHQiLCAgICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKyAgICAgICAgICAgICAgICAgICAgWyAiaGluZGkudHh0IiAsICAgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorICAgICAgICAgICAgICAgICAgICBbICJqYXBhbmVzZS50eHQiLCAgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisgICAgICAgICAgICAgICAgICAgIFsgImtvcmVhbi50eHQiLCAgICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKyAgICAgICAgICAgICAgICAgICAgWyAicy1jaGluZXNlLnR4dCIsICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorICAgICAgICAgICAgICAgICAgICBbICJmcmVuY2gudHh0IiwgICAgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisgICAgICAgICAgICAgICAgICAgIFsgImdyZWVrLnR4dCIsICAgICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKyAgICAgICAgICAgICAgICAgICAgWyAiaGVicmV3LnR4dCIsICAgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorICAgICAgICAgICAgICAgICAgICBbICJoaW5kaS50eHQiICwgICAgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisgICAgICAgICAgICAgICAgICAgIFsgImphcGFuZXNlLnR4dCIsICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKyAgICAgICAgICAgICAgICAgICAgWyAia29yZWFuLnR4dCIsICAgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorICAgICAgICAgICAgICAgICAgICBbICJzLWNoaW5lc2UudHh0IiwgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisgICAgICAgICAgICAgICAgICAgIFsgImFyYWJpYy5odG1sIiwgICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAiY3plY2guaHRtbCIsICAgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJkYW5pc2guaHRtbCIsICAgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgImVuZ2xpc2guaHRtbCIsICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAiZXNwZXJhbnRvLmh0bWwiLCAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJmcmVuY2guaHRtbCIsICAgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgImdlb3JnaWFuLmh0bWwiLCAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAiZ2VybWFuLmh0bWwiLCAgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJncmVlay5odG1sIiwgICAgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgImhlYnJldy5odG1sIiwgICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAiaGluZGkuaHRtbCIsICAgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJpY2VsYW5kaWMuaHRtbCIsICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgImludGVybGluZ3VhLmh0bWwiLCAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAiaXRhbGlhbi5odG1sIiwgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJqYXBhbmVzZS5odG1sIiwgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgImtvcmVhbi5odG1sIiwgICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAibGl0aHVhbmlhbi5odG1sIiwgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJtYWx0ZXNlLmh0bWwiLCAgICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgInBlcnNpYW4uaHRtbCIsICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAicG9saXNoLmh0bWwiLCAgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJwb3J0dWd1ZXNlLmh0bWwiLCAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgInJvbWFuaWFuLmh0bWwiLCAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAicnVzc2lhbi5odG1sIiwgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJzLWNoaW5lc2UuaHRtbCIsICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgInNwYW5pc2guaHRtbCIsICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAic3dlZGlzaC5odG1sIiwgICAgICAgICAgICAgICAiVVRGLTgiLCAiYiJdLAorCQkJCQlbICJ0LWNoaW5lc2UuaHRtbCIsICAgICAgICAgICAgICJVVEYtOCIsICJiIl0sCisJCQkJCVsgIndlbHNoLmh0bWwiLCAgICAgICAgICAgICAgICAgIlVURi04IiwgImIiXSwKKwkJCQkJWyAiVGVzdE5hbWVzX0FzaWFuLnR4dCIsICAgICAgICAiVVRGLTgiLCAibCJdLAorCQkJCQlbICJUZXN0TmFtZXNfQ2hpbmVzZS50eHQiLCAgICAgICJVVEYtOCIsICJsIl0sCisJCQkJCVsgIlRlc3ROYW1lc19KYXBhbmVzZS50eHQiLCAgICAgIlVURi04IiwgImwiXSwKKwkJCQkJWyAiVGVzdE5hbWVzX0phcGFuZXNlX2gudHh0IiwgICAiVVRGLTgiLCAibCJdLAorCQkJCQlbICJUZXN0TmFtZXNfSmFwYW5lc2Vfay50eHQiLCAgICJVVEYtOCIsICJsIl0sCisJCQkJCVsgIlRlc3ROYW1lc19Lb3JlYW4udHh0IiwgICAgICAgIlVURi04IiwgImwiXSwKKwkJCQkJWyAiVGVzdE5hbWVzX0xhdGluLnR4dCIsICAgICAgICAiVVRGLTgiLCAibCJdLAorCQkJCQlbICJUZXN0TmFtZXNfU2VyYmlhblNILnR4dCIsICAgICJVVEYtOCIsICJsIl0sCisJCQkJCVsgIlRlc3ROYW1lc19TZXJiaWFuU1IudHh0IiwgICAgIlVURi04IiwgImwiXSwKKwkJCQkJWyAiVGVzdE5hbWVzX1RoYWkudHh0IiwgICAgICAgICAiVVRGLTgiLCAibCJdLAorCQkJCQlbICJUZXN0bmFtZXNfUnVzc2lhbi50eHQiLCAgICAgICJVVEYtOCIsICJsIl0sIAorICAgICAgICAgICAgICApOworCitteSAkQ0FMSUJSQVRFID0gMjsgIyBkdXJhdGlvbiBpbiBzZWNvbmRzIGZvciBpbml0aWFsIGNhbGlicmF0aW9uCitteSAkRFVSQVRJT04gPSAxMDsgIyBkdXJhdGlvbiBpbiBzZWNvbmRzIGZvciBlYWNoIHBhc3MKK215ICROVU1QQVNTRVMgPSA0OyAjIG51bWJlciBvZiBwYXNzZXMuICBJZiA+IDEgdGhlbiB0aGUgZmlyc3QgcGFzcworICAgICAgICAgICAgICAgICAgICMgaXMgZGlzY2FyZGVkIGFzIGEgSklUIHdhcm0tdXAgcGFzcy4KKworbXkgJFRBQkxFQVRUUiA9ICdCT1JERVI9IjEiIENFTExQQURESU5HPSI0IiBDRUxMU1BBQ0lORz0iMCInOworCitteSAkUExVU19NSU5VUyA9ICImcGx1c21uOyI7CisKK2lmICgkTlVNUEFTU0VTIDwgMykgeworICAgIGRpZSAiTmVlZCBhdCBsZWFzdCAzIHBhc3Nlcy4gIE9uZSBpcyBkaXNjYXJkZWQgKEpJVCB3YXJtdXApIGFuZCBuZWVkIHR3byB0byBoYXZlIDEgZGVncmVlIG9mIGZyZWVkb20gKHQgZGlzdHJpYnV0aW9uKS4iOworfQorCitteSAkT1VUOyAjIHNlZSBvdXQoKQorCittYWluKCk7CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uCitzdWIgbWFpbiB7CisgICAgbXkgJGRhdGUgPSBsb2NhbHRpbWU7CisgICAgbXkgJHRpdGxlID0gIklDVTRKTkkgUGVyZm9ybWFuY2UgVGVzdCAkZGF0ZSI7CisKKyAgICBteSAkaHRtbCA9ICRkYXRlOworICAgICRodG1sID1+IHMvOi8vZzsgIyAnOicgaWxsZWdhbAorICAgICRodG1sID1+IHMvXHMqXGQrJC8vOyAjIGRlbGV0ZSB5ZWFyCisgICAgJGh0bWwgPX4gcy9eXHcrXHMqLy87ICMgZGVsZXRlIGRvdworICAgICRodG1sID0gInBlcmYgJGh0bWwuaHRtbCI7CisKKyAgICBvcGVuKEhUTUwsIj4kaHRtbCIpIG9yIGRpZSAiQ2FuJ3Qgd3JpdGUgdG8gJGh0bWw6ICQhIjsKKworICAgIHByaW50IEhUTUwgPDxFT0Y7Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4iCisgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+Cis8SFRNTD4KKyAgIDxIRUFEPgorICAgICAgPFRJVExFPiR0aXRsZTwvVElUTEU+CisgICA8L0hFQUQ+CisgICA8Qk9EWT4KK0VPRgorICAgIHByaW50IEhUTUwgIjxIMT4kdGl0bGU8L0gxPlxuIjsKKworICAgIHByaW50IEhUTUwgIjxIMj4kVEVTVENMQVNTPC9IMj5cbiI7CisKKyAgICBteSAkcmF3ID0gIiI7CisKKyAgICBmb3IgbXkgJG1ldGhvZFBhaXIgKEBNRVRIT0RTKSB7CisKKyAgICAgICAgbXkgJHRlc3RNZXRob2QgPSAkbWV0aG9kUGFpci0+WzBdOworICAgICAgICBteSAkYmFzZWxpbmVNZXRob2QgPSAkbWV0aG9kUGFpci0+WzFdOworCisgICAgICAgIHByaW50IEhUTUwgIjxQPjxUQUJMRSAkVEFCTEVBVFRSPjxUUj48VEQ+XG4iOworICAgICAgICBwcmludCBIVE1MICI8UD48Qj4kdGVzdE1ldGhvZCB2cy4gJGJhc2VsaW5lTWV0aG9kPC9CPjwvUD5cbiI7CisgICAgICAgIAorICAgICAgICBwcmludCBIVE1MICI8UD48VEFCTEUgJFRBQkxFQVRUUiBCR0NPTE9SPVwiI0NDRkZGRlwiPlxuIjsKKyAgICAgICAgcHJpbnQgSFRNTCAiPFRSPjxURD5PcHRpb25zPC9URD48VEQ+JHRlc3RNZXRob2Q8L1REPiI7CisgICAgICAgIHByaW50IEhUTUwgIjxURD4kYmFzZWxpbmVNZXRob2Q8L1REPjxURD5SYXRpbzwvVEQ+PC9UUj5cbiI7CisKKyAgICAgICAgJE9VVCA9ICcnOworCisgICAgICAgIGZvciBteSAkcGF0IChAT1BUSU9OUykgeworICAgICAgICAgICAgcHJpbnQgSFRNTCAiPFRSPjxURD5AJHBhdFswXSwgQCRwYXRbMl08L1REPlxuIjsKKworICAgICAgICAgICAgb3V0KCI8UD48VEFCTEUgJFRBQkxFQVRUUiBXSURUSD1cIjEwMCVcIj4iKTsKKworICAgICAgICAgICAgIyBtZWFzdXJlIHRoZSB0ZXN0IG1ldGhvZAorICAgICAgICAgICAgb3V0KCI8VFI+PFREPiIpOworICAgICAgICAgICAgcHJpbnQgIlxuJHRlc3RNZXRob2QgW0AkcGF0XVxuIjsKKyAgICAgICAgICAgIG15ICR0ID0gbWVhc3VyZTIoJHRlc3RNZXRob2QsICRwYXQsIC0kRFVSQVRJT04pOworICAgICAgICAgICAgb3V0KCI8L1REPjwvVFI+Iik7CisgICAgICAgICAgICBwcmludCBIVE1MICI8VEQ+IiwgZm9ybWF0U2Vjb25kcyg0LCAkdC0+Z2V0TWVhbigpLCAkdC0+Z2V0RXJyb3IpOworICAgICAgICAgICAgcHJpbnQgSFRNTCAiL2V2ZW50PC9URD5cbiI7CisKKyAgICAgICAgICAgICMgbWVhc3VyZSBiYXNlbGluZSBtZXRob2QKKyAgICAgICAgICAgIG91dCgiPFRSPjxURD4iKTsKKyAgICAgICAgICAgIHByaW50ICJcbkJlZ2luICRiYXNlbGluZU1ldGhvZCBbQCRwYXRdXG4iOworICAgICAgICAgICAgbXkgJGIgPSBtZWFzdXJlMigkYmFzZWxpbmVNZXRob2QsICRwYXQsIC0kRFVSQVRJT04pOworICAgICAgICAgICAgb3V0KCI8L1REPjwvVFI+Iik7CisgICAgICAgICAgICBwcmludCBIVE1MICI8VEQ+IiwgZm9ybWF0U2Vjb25kcyg0LCAkYi0+Z2V0TWVhbigpLCAkdC0+Z2V0RXJyb3IpOworICAgICAgICAgICAgcHJpbnQgSFRNTCAiL2V2ZW50PC9URD5cbiI7CisKKyAgICAgICAgICAgIG91dCgiPC9UQUJMRT48L1A+Iik7CisKKyAgICAgICAgICAgICMgb3V0cHV0IHJhdGlvCisgICAgICAgICAgICBteSAkciA9ICR0LT5kaXZpZGUoJGIpOworICAgICAgICAgICAgcHJpbnQgSFRNTCAiPFREPjxCPiIsIGZvcm1hdFBlcmNlbnQoMywgJHItPmdldE1lYW4oKSwgJHItPmdldEVycm9yKTsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjwvQj48L1REPjwvVFI+XG4iOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnQgSFRNTCAiPC9UQUJMRT48L1A+XG4iOworCisgICAgICAgIHByaW50IEhUTUwgIjxQPlJhdyBkYXRhOjwvUD5cbiI7CisgICAgICAgIHByaW50IEhUTUwgJE9VVDsKKyAgICAgICAgcHJpbnQgSFRNTCAiPC9UQUJMRT48L1A+XG4iOworICAgIH0KKworICAgIHByaW50IEhUTUwgPDxFT0Y7CisgICA8L0JPRFk+Cis8L0hUTUw+CitFT0YKKyAgICBjbG9zZShIVE1MKSBvciBkaWUgIkNhbid0IGNsb3NlICRodG1sOiAkISI7Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRleHQgdG8gdGhlIGdsb2JhbCB2YXJpYWJsZSAkT1VUCitzdWIgb3V0IHsKKyAgICAkT1VUIC49IGpvaW4oJycsIEBfKTsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGV4dCB0byB0aGUgZ2xvYmFsIHZhcmlhYmxlICRPVVQKK3N1YiBvdXRsbiB7CisgICAgJE9VVCAuPSBqb2luKCcnLCBAXykgLiAiXG4iOworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1lYXN1cmUgYSBnaXZlbiB0ZXN0IG1ldGhvZCB3aXRoIGEgZ2l2ZSB0ZXN0IHBhdHRlcm4gdXNpbmcgdGhlCisjIGdsb2JhbCBydW4gcGFyYW1ldGVycy4KKyMKKyMgQHBhcmFtIHRoZSBtZXRob2QgdG8gcnVuCisjIEBwYXJhbSB0aGUgcGF0dGVybiBkZWZpbmluZyBjaGFyYWN0ZXJzIHRvIHRlc3QKKyMgQHBhcmFtIGlmID4wIHRoZW4gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHBlciBwYXNzLiAgSWYgPDAgdGhlbgorIyAgICAgICAgKG5lZ2F0aXZlIG9mKSB0aGUgbnVtYmVyIG9mIHNlY29uZHMgcGVyIHBhc3MuCisjCisjIEByZXR1cm4gYSBEYXRhc2V0IG9iamVjdCwgc2NhbGVkIGJ5IGl0ZXJhdGlvbnMgcGVyIHBhc3MgYW5kCisjICAgICAgICAgZXZlbnRzIHBlciBpdGVyYXRpb24sIHRvIGdpdmUgdGltZSBwZXIgZXZlbnQKKyMKK3N1YiBtZWFzdXJlMiB7CisgICAgbXkgQGRhdGEgPSBtZWFzdXJlMShAXyk7CisgICAgbXkgJGl0ZXJQZXJQYXNzID0gc2hpZnQoQGRhdGEpOworICAgIG15ICRldmVudFBlckl0ZXIgPSBzaGlmdChAZGF0YSk7CisKKyAgICBzaGlmdChAZGF0YSkgaWYgKEBkYXRhID4gMSk7ICMgZGlzY2FyZCBmaXJzdCBydW4KKworICAgIG15ICRkcyA9IERhdGFzZXQtPm5ldyhAZGF0YSk7CisgICAgJGRzLT5zZXRTY2FsZSgxLjBlLTMgLyAoJGl0ZXJQZXJQYXNzICogJGV2ZW50UGVySXRlcikpOworICAgICRkczsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNZWFzdXJlIGEgZ2l2ZW4gdGVzdCBtZXRob2Qgd2l0aCBhIGdpdmUgdGVzdCBwYXR0ZXJuIHVzaW5nIHRoZQorIyBnbG9iYWwgcnVuIHBhcmFtZXRlcnMuCisjCisjIEBwYXJhbSB0aGUgbWV0aG9kIHRvIHJ1bgorIyBAcGFyYW0gdGhlIHBhdHRlcm4gZGVmaW5pbmcgY2hhcmFjdGVycyB0byB0ZXN0CisjIEBwYXJhbSBpZiA+MCB0aGVuIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBwZXIgcGFzcy4gIElmIDwwIHRoZW4KKyMgICAgICAgIChuZWdhdGl2ZSBvZikgdGhlIG51bWJlciBvZiBzZWNvbmRzIHBlciBwYXNzLgorIworIyBAcmV0dXJuIGFycmF5IG9mOgorIyAgICAgICAgIFswXSBpdGVyYXRpb25zIHBlciBwYXNzCisjICAgICAgICAgWzFdIGV2ZW50cyBwZXIgaXRlcmF0aW9uCisjICAgICAgICAgWzIuLl0gbXMgcmVwb3J0ZWQgZm9yIGVhY2ggcGFzcywgaW4gb3JkZXIKKyMKK3N1YiBtZWFzdXJlMSB7CisgICAgbXkgJG1ldGhvZCA9IHNoaWZ0OworICAgIG15ICRwYXQgPSBzaGlmdDsKKyAgICBteSAkaXRlckNvdW50ID0gc2hpZnQ7ICMgYWN0dWFsbHkgbWlnaHQgYmUgLXNlY29uZHMvcGFzcworCisgICAgb3V0KCI8UD5NZWFzdXJpbmcgJG1ldGhvZCBmb3IgaW5wdXQgZmlsZSBAJHBhdFswXSBpbiBAJHBhdFsyXSAsICIpOworICAgIGlmICgkaXRlckNvdW50ID4gMCkgeworICAgICAgICBvdXQoIiRpdGVyQ291bnQgaXRlcmF0aW9ucy9wYXNzLCAkTlVNUEFTU0VTIHBhc3NlczwvUD5cbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG91dCgtJGl0ZXJDb3VudCwgIiBzZWNvbmRzL3Bhc3MsICROVU1QQVNTRVMgcGFzc2VzPC9QPlxuIik7CisgICAgfQorCisgICAgIyBpcyAkaXRlckNvdW50IGFjdHVhbGx5IC1zZWNvbmRzPworICAgIGlmICgkaXRlckNvdW50IDwgMCkgeworCisgICAgICAgICMgY2FsaWJyYXRlOiBlc3RpbWF0ZSBtcy9pdGVyYXRpb24KKyAgICAgICAgcHJpbnQgIkNhbGlicmF0aW5nLi4uIjsKKyAgICAgICAgbXkgQHQgPSBjYWxsSmF2YSgkbWV0aG9kLCAkcGF0LCAtJENBTElCUkFURSk7CisgICAgICAgIHByaW50ICJkb25lLlxuIjsKKworICAgICAgICBteSBAZGF0YSA9IHNwbGl0KC9ccysvLCAkdFswXS0+WzJdKTsKKyAgICAgICAgbXkgJHRpbWVQZXJJdGVyID0gMS4wZS0zICogJGRhdGFbMF0gLyAkZGF0YVsyXTsKKyAgICAKKyAgICAgICAgIyBkZXRlcm1pbmUgaXRlcmF0aW9ucy9wYXNzCisgICAgICAgICRpdGVyQ291bnQgPSBpbnQoLSRpdGVyQ291bnQgLyAkdGltZVBlckl0ZXIgKyAwLjUpOworCisgICAgICAgIG91dCgiPFA+Q2FsaWJyYXRpb24gcGFzcyAoJENBTElCUkFURSBzZWMpOiAiKTsKKyAgICAgICAgb3V0KCIkZGF0YVswXSBtcywgIik7CisgICAgICAgIG91dCgiJGRhdGFbMl0gaXRlcmF0aW9ucyA9ICIpOworICAgICAgICBvdXQoZm9ybWF0U2Vjb25kcyg0LCAkdGltZVBlckl0ZXIpLCAiL2l0ZXJhdGlvbjxCUj5cbiIpOworICAgIH0KKyAgICAKKyAgICAjIHJ1biBwYXNzZXMKKyAgICBwcmludCAiTWVhc3VyaW5nICRpdGVyQ291bnQgaXRlcmF0aW9ucyB4ICROVU1QQVNTRVMgcGFzc2VzLi4uIjsKKyAgICBteSBAdCA9IGNhbGxKYXZhKCRtZXRob2QsICRwYXQsICIkaXRlckNvdW50ICIgeCAkTlVNUEFTU0VTKTsKKyAgICBwcmludCAiZG9uZS5cbiI7CisgICAgbXkgQG1zID0gKCk7CisgICAgbXkgQGI7ICMgc2NyYXRjaAorICAgIGZvciBteSAkYSAoQHQpIHsKKyAgICAgICAgIyAkYS0+WzBdOiBtZXRob2QgbmFtZSwgY29ycmVzcG9uZHMgdG8gJG1ldGhvZAorICAgICAgICAjICRhLT5bMV06ICdiZWdpbicgZGF0YSwgPT0gJGl0ZXJDb3VudAorICAgICAgICAjICRhLT5bMl06ICdlbmQnIGRhdGEsIG9mIHRoZSBmb3JtIDxtcz4gPGV2ZW50c1Blckl0ZXI+CisgICAgICAgICMgJGEtPlszLi4uXTogZ2MgbWVzc2FnZXMgZnJvbSBKVk0gZHVyaW5nIHBhc3MKKyAgICAgICAgQGIgPSBzcGxpdCgvXHMrLywgJGEtPlsyXSk7CisgICAgICAgIHB1c2goQG1zLCAkYlswXSk7CisgICAgfQorICAgIG15ICRldmVudHNQZXJJdGVyID0gJGJbMV07CisKKyAgICBvdXQoIkl0ZXJhdGlvbnMgcGVyIHBhc3M6ICRpdGVyQ291bnQ8QlI+XG4iKTsKKyAgICBvdXQoIkV2ZW50cyBwZXIgaXRlcmF0aW9uOiAkZXZlbnRzUGVySXRlcjxCUj5cbiIpOworCisgICAgbXkgQG1zX3N0ciA9IEBtczsKKyAgICAkbXNfc3RyWzBdIC49ICIgKGRpc2NhcmRlZCkiIGlmIChAbXNfc3RyID4gMSk7CisgICAgb3V0KCJSYXcgdGltZXMgKG1zL3Bhc3MpOiAiLCBqb2luKCIsICIsIEBtc19zdHIpLCAiPEJSPlxuIik7CisKKyAgICAoJGl0ZXJDb3VudCwgJGV2ZW50c1Blckl0ZXIsIEBtcyk7Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW52b2tlIGphdmEgdG8gcnVuICRURVNUQ0xBU1MsIHBhc3NpbmcgaXQgdGhlIGdpdmVuIHBhcmFtZXRlcnMuCisjCisjIEBwYXJhbSB0aGUgbWV0aG9kIHRvIHJ1bgorIyBAcGFyYW0gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLCBvciBpZiBuZWdhdGl2ZSwgdGhlIGR1cmF0aW9uCisjICAgICAgICBpbiBzZWNvbmRzLiAgSWYgbW9yZSB0aGFuIG9uIHBhc3MgaXMgZGVzaXJlZCwgcGFzcyBpbgorIyAgICAgICAgYSBzdHJpbmcsIGUuZy4sICIxMDAgMTAwIDEwMCIuCisjIEBwYXJhbSB0aGUgcGF0dGVybiBkZWZpbmluZyBjaGFyYWN0ZXJzIHRvIHRlc3QKKyMKKyMgQHJldHVybiBhbiBhcnJheSBvZiByZXN1bHRzLiAgRWFjaCByZXN1bHQgaXMgYW4gYXJyYXkgUkVGCisjICAgICAgICAgZGVzY3JpYmluZyBvbmUgcGFzcy4gIFRoZSBhcnJheSBSRUYgY29udGFpbnM6CisjICAgICAgICAgLT5bMF06IFRoZSBtZXRob2QgbmFtZSBhcyByZXBvcnRlZAorIyAgICAgICAgIC0+WzFdOiBUaGUgcGFyYW1zIG9uIHRoZSAnPSA8bWV0aD4gYmVnaW4gLi4uJyBsaW5lCisjICAgICAgICAgLT5bMl06IFRoZSBwYXJhbXMgb24gdGhlICc9IDxtZXRoPiBlbmQgLi4uJyBsaW5lCisjICAgICAgICAgLT5bMy4uXTogR0MgbWVzc2FnZXMgZnJvbSB0aGUgSlZNLCBpZiBhbnkKKyMKK3N1YiBjYWxsSmF2YSB7CisgICAgbXkgJG1ldGhvZCA9IHNoaWZ0OworICAgIG15ICRwYXQgPSBzaGlmdDsKKyAgICBteSAkbiA9IHNoaWZ0OworICAgIG15ICRmaWxlTmFtZSA9ICRTT1VSQ0VESVIgLiBAJHBhdFswXSA7IAorICAgIG15ICRjbWQgPSAiYzpcXGoyc2RrMS40LjBcXGJpblxcamF2YSAtY2xhc3NwYXRoIDtjbGFzc2VzOyAkVEVTVENMQVNTICRtZXRob2QgJG4gLWYgJGZpbGVOYW1lIC1lIEAkcGF0WzFdIC1AJHBhdFsyXSI7CisgICAgcHJpbnQgIlskY21kXVxuIjsgIyBmb3IgZGVidWdnaW5nCisgICAgb3BlbihQSVBFLCAiJGNtZHwiKSBvciBkaWUgIkNhbid0IHJ1biBcIiRjbWRcIiI7CisgICAgbXkgQG91dDsKKyAgICB3aGlsZSAoPFBJUEU+KSB7CisgICAgICAgIHB1c2goQG91dCwgJF8pOworICAgIH0KKyAgICBjbG9zZShQSVBFKSBvciBkaWUgIkphdmEgZmFpbGVkOiBcIiRjbWRcIiI7CisKKyAgICBAb3V0ID0gZ3JlcCghL15cIy8sIEBvdXQpOyAgIyBmaWx0ZXIgb3V0IGNvbW1lbnRzCisKKyAgICAjcHJpbnQgIlsiLCBqb2luKCJcbiIsIEBvdXQpLCAiXVxuIjsKKworICAgIG15IEByZXN1bHRzOworICAgIG15ICRtZXRob2QgPSAnJzsKKyAgICBteSAkZGF0YSA9IFtdOworICAgIGZvcmVhY2ggKEBvdXQpIHsKKyAgICAgICAgbmV4dCB1bmxlc3MgKC9cUy8pOworCisgICAgICAgIGlmICgvXj1ccyooXHcrKVxzKihcdyspXHMqKC4qKS8pIHsKKyAgICAgICAgICAgIG15ICgkbSwgJHN0YXRlLCAkZCkgPSAoJDEsICQyLCAkMyk7CisgICAgICAgICAgICAjcHJpbnQgIiRfID0+IFtbJG0gJHN0YXRlICRkYXRhXV1cbiI7CisgICAgICAgICAgICBpZiAoJHN0YXRlIGVxICdiZWdpbicpIHsKKyAgICAgICAgICAgICAgICBkaWUgIiRtZXRob2Qgd2FzIGJlZ3VuIGJ1dCBub3QgZmluaXNoZWQiIGlmICgkbWV0aG9kKTsKKyAgICAgICAgICAgICAgICAkbWV0aG9kID0gJG07CisgICAgICAgICAgICAgICAgcHVzaChAJGRhdGEsICRkKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkZGF0YSwgJycpOyAjIHBsYWNlaG9sZGVyIGZvciBlbmQgZGF0YQorICAgICAgICAgICAgfSBlbHNpZiAoJHN0YXRlIGVxICdlbmQnKSB7CisgICAgICAgICAgICAgICAgaWYgKCRtIG5lICRtZXRob2QpIHsKKyAgICAgICAgICAgICAgICAgICAgZGllICIkbWV0aG9kIGVuZCBkb2VzIG5vdCBtYXRjaDogJF8iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkZGF0YS0+WzFdID0gJGQ7ICMgaW5zZXJ0IGVuZCBkYXRhIGF0IFsxXQorICAgICAgICAgICAgICAgICNwcmludCAiIyRtZXRob2Q6Iiwgam9pbigiOyIsQCRkYXRhKSwgIlxuIjsKKyAgICAgICAgICAgICAgICB1bnNoaWZ0KEAkZGF0YSwgJG1ldGhvZCk7ICMgYWRkIG1ldGhvZCB0byBzdGFydAorICAgICAgICAgICAgICAgIHB1c2goQHJlc3VsdHMsICRkYXRhKTsKKyAgICAgICAgICAgICAgICAkbWV0aG9kID0gJyc7CisgICAgICAgICAgICAgICAgJGRhdGEgPSBbXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGllICJDYW4ndCBwYXJzZTogJF8iOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZWxzaWYgKC9eXFsvKSB7CisgICAgICAgICAgICBpZiAoJG1ldGhvZCkgeworICAgICAgICAgICAgICAgIHB1c2goQCRkYXRhLCAkXyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICMgaWdub3JlIGV4dHJhbmVvdXMgR0Mgbm90aWNlcworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkaWUgIkNhbid0IHBhcnNlOiAkXyI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkaWUgIiRtZXRob2Qgd2FzIGJlZ3VuIGJ1dCBub3QgZmluaXNoZWQiIGlmICgkbWV0aG9kKTsKKworICAgIEByZXN1bHRzOworfQorCisjfCMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyN8IyBGb3JtYXQgYSBjb25maWRlbmNlIGludGVydmFsLCBhcyBnaXZlbiBieSBhIERhdGFzZXQuICBPdXRwdXQgaXMgYXMKKyN8IyBhcyBmb2xsb3dzOgorI3wjICAgMjQxLjIzIC0gMjQxLjk4ID0+IDI0MS41ICsvLSAwLjMKKyN8IyAgIDI0MS4yIC0gMjQzLjggPT4gMjQyICsvLSAxCisjfCMgICAyMTEuMCAtIDI0MS4wID0+IDIyNiArLy0gMTUgb3I/IDIzMCArLy0gMjAKKyN8IyAgIDIyMC4zIC0gMjM0LjMgPT4gMjI3ICsvLSA3CisjfCMgICAyMjAuMyAtIDMwMC4zID0+IDI2MCArLy0gNDAKKyN8IyAgIDIyMC4zIC0gMTAwMCA9PiA2MTAgKy8tIDM5MCBvcj8gNjAwICsvLSA0MDAKKyN8IyAgIDAuMDIyIC0gMC4wMjQgPT4gMC4wMjMgKy8tIDAuMDAxCisjfCMgICAwLjAyMiAtIDAuMDMyID0+IDAuMDI3ICsvLSAwLjAwNQorI3wjICAgMC4wMjIgLSAxLjAwMCA9PiAwLjUgKy8tIDAuNQorI3wjIEluIG90aGVyIHdvcmRzLCB0YWtlIG9uZSBzaWduaWZpY2FudCBkaWdpdCBvZiB0aGUgZXJyb3IgdmFsdWUgYW5kCisjfCMgZGlzcGxheSB0aGUgbWVhbiB0byB0aGUgc2FtZSBwcmVjaXNpb24uCisjfHN1YiBmb3JtYXREYXRhc2V0IHsKKyN8ICAgIG15ICRkcyA9IHNoaWZ0OworI3wgICAgbXkgJGxvd2VyID0gJGRzLT5nZXRNZWFuKCkgLSAkZHMtPmdldEVycm9yKCk7CisjfCAgICBteSAkdXBwZXIgPSAkZHMtPmdldE1lYW4oKSArICRkcy0+Z2V0RXJyb3IoKTsKKyN8ICAgIG15ICRzY2FsZSA9IDA7CisjfCAgICAjIEZpbmQgaG93IG1hbnkgaW5pdGlhbCBkaWdpdHMgYXJlIHRoZSBzYW1lCisjfCAgICB3aGlsZSAoJGxvd2VyIDwgMSB8fAorI3wgICAgICAgICAgIGludCgkbG93ZXIpID09IGludCgkdXBwZXIpKSB7CisjfCAgICAgICAgJGxvd2VyICo9IDEwOworI3wgICAgICAgICR1cHBlciAqPSAxMDsKKyN8ICAgICAgICAkc2NhbGUrKzsKKyN8ICAgIH0KKyN8ICAgIHdoaWxlICgkbG93ZXIgPj0gMTAgJiYKKyN8ICAgICAgICAgICBpbnQoJGxvd2VyKSA9PSBpbnQoJHVwcGVyKSkgeworI3wgICAgICAgICRsb3dlciAvPSAxMDsKKyN8ICAgICAgICAkdXBwZXIgLz0gMTA7CisjfCAgICAgICAgJHNjYWxlLS07CisjfCAgICB9CisjfH0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtYXQgYSBudW1iZXIsIG9wdGlvbmFsbHkgd2l0aCBhICsvLSBkZWx0YSwgdG8gbiBzaWduaWZpY2FudAorIyBkaWdpdHMuCisjCisjIEBwYXJhbSBzaWduaWZpY2FudCBkaWdpdCwgYSB2YWx1ZSA+PSAxCisjIEBwYXJhbSBtdWx0aXBsaWVyCisjIEBwYXJhbSB0aW1lIGluIHNlY29uZHMgdG8gYmUgZm9ybWF0dGVkCisjIEBvcHRpb25hbCBkZWx0YSBpbiBzZWNvbmRzCisjCisjIEByZXR1cm4gc3RyaW5nIG9mIHRoZSBmb3JtICIyMyIgb3IgIjIzICsvLSAxMCIuCisjCitzdWIgZm9ybWF0TnVtYmVyIHsKKyAgICBteSAkc2lnZGlnID0gc2hpZnQ7CisgICAgbXkgJG11bHQgPSBzaGlmdDsKKyAgICBteSAkYSA9IHNoaWZ0OworICAgIG15ICRkZWx0YSA9IHNoaWZ0OyAjIG1heSBiZSB1bmRlZgorICAgIAorICAgIG15ICRyZXN1bHQgPSBmb3JtYXRTaWdEaWcoJHNpZ2RpZywgJGEqJG11bHQpOworICAgIGlmIChkZWZpbmVkKCRkZWx0YSkpIHsKKyAgICAgICAgbXkgJGQgPSBmb3JtYXRTaWdEaWcoJHNpZ2RpZywgJGRlbHRhKiRtdWx0KTsKKyAgICAgICAgIyByZXN0cmljdCBQUkVDSVNJT04gb2YgZGVsdGEgdG8gdGhhdCBvZiBtYWluIG51bWJlcgorICAgICAgICBpZiAoJHJlc3VsdCA9fiAvXC4oXGQrKS8pIHsKKyAgICAgICAgICAgICMgVE9ETyBtYWtlIHRoaXMgd29yayBmb3IgdmFsdWVzIHdpdGggYWxsIHNpZ25pZmljYW50CisgICAgICAgICAgICAjIGRpZ2l0cyB0byB0aGUgbGVmdCBvZiB0aGUgZGVjaW1hbCwgZS5nLiwgMTIzNDAwMC4KKworICAgICAgICAgICAgIyBUT0RPIHRoZSBvdGhlciB0aGluZyB3cm9uZyB3aXRoIHRoaXMgaXMgdGhhdCBpdAorICAgICAgICAgICAgIyBpc24ndCByb3VuZGluZyB0aGUgJGRlbHRhIHByb3Blcmx5LiAgSGF2ZSB0byBwdXQKKyAgICAgICAgICAgICMgdGhpcyBsb2dpYyBpbnRvIGZvcm1hdFNpZ0RpZygpLgorICAgICAgICAgICAgbXkgJHggPSBsZW5ndGgoJDEpOworICAgICAgICAgICAgJGQgPX4gcy9cLihcZHskeH0pXGQrLy4kMS87CisgICAgICAgIH0KKyAgICAgICAgJHJlc3VsdCAuPSAiICRQTFVTX01JTlVTICIgLiAkZDsKKyAgICB9CisgICAgJHJlc3VsdDsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtYXQgYSB0aW1lLCBvcHRpb25hbGx5IHdpdGggYSArLy0gZGVsdGEsIHRvIG4gc2lnbmlmaWNhbnQKKyMgZGlnaXRzLgorIworIyBAcGFyYW0gc2lnbmlmaWNhbnQgZGlnaXQsIGEgdmFsdWUgPj0gMQorIyBAcGFyYW0gdGltZSBpbiBzZWNvbmRzIHRvIGJlIGZvcm1hdHRlZAorIyBAb3B0aW9uYWwgZGVsdGEgaW4gc2Vjb25kcworIworIyBAcmV0dXJuIHN0cmluZyBvZiB0aGUgZm9ybSAiMjMgbXMiIG9yICIyMyArLy0gMTAgbXMiLgorIworc3ViIGZvcm1hdFNlY29uZHMgeworICAgIG15ICRzaWdkaWcgPSBzaGlmdDsKKyAgICBteSAkYSA9IHNoaWZ0OworICAgIG15ICRkZWx0YSA9IHNoaWZ0OyAjIG1heSBiZSB1bmRlZgorCisgICAgbXkgQE1VTFQgPSAoMSAgICwgMWUzLCAgMWU2LCAgMWU5KTsKKyAgICBteSBAU1VGRiA9ICgncycgLCAnbXMnLCAndXMnLCAnbnMnKTsKKworICAgICMgRGV0ZXJtaW5lIG91ciBzY2FsZQorICAgIG15ICRpID0gMDsKKyAgICArKyRpIHdoaWxlICgkYSokTVVMVFskaV0gPCAxICYmICRpIDwgQE1VTFQpOworICAgIAorICAgIGZvcm1hdE51bWJlcigkc2lnZGlnLCAkTVVMVFskaV0sICRhLCAkZGVsdGEpIC4gJyAnIC4gJFNVRkZbJGldOworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm1hdCBhIHBlcmNlbnRhZ2UsIG9wdGlvbmFsbHkgd2l0aCBhICsvLSBkZWx0YSwgdG8gbiBzaWduaWZpY2FudAorIyBkaWdpdHMuCisjCisjIEBwYXJhbSBzaWduaWZpY2FudCBkaWdpdCwgYSB2YWx1ZSA+PSAxCisjIEBwYXJhbSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWQsIGFzIGEgZnJhY3Rpb24sIGUuZy4gMC41IGZvciA1MCUKKyMgQG9wdGlvbmFsIGRlbHRhLCBhcyBhIGZyYWN0aW9uCisjCisjIEByZXR1cm4gc3RyaW5nIG9mIHRoZSBmb3JtICIyMyAlIiBvciAiMjMgKy8tIDEwICUiLgorIworc3ViIGZvcm1hdFBlcmNlbnQgeworICAgIG15ICRzaWdkaWcgPSBzaGlmdDsKKyAgICBteSAkYSA9IHNoaWZ0OworICAgIG15ICRkZWx0YSA9IHNoaWZ0OyAjIG1heSBiZSB1bmRlZgorICAgIAorICAgIGZvcm1hdE51bWJlcigkc2lnZGlnLCAxMDAsICRhLCAkZGVsdGEpIC4gJyAlJzsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtYXQgYSBudW1iZXIgdG8gbiBzaWduaWZpY2FudCBkaWdpdHMgd2l0aG91dCB1c2luZyBleHBvbmVudGlhbAorIyBub3RhdGlvbi4KKyMKKyMgQHBhcmFtIHNpZ25pZmljYW50IGRpZ2l0LCBhIHZhbHVlID49IDEKKyMgQHBhcmFtIG51bWJlciB0byBiZSBmb3JtYXR0ZWQKKyMKKyMgQHJldHVybiBzdHJpbmcgb2YgdGhlIGZvcm0gIjEyMzQiICIxMi4zNCIgb3IgIjAuMDAxMjM0Ii4gIElmCisjICAgICAgICAgbnVtYmVyIHdhcyBuZWdhdGl2ZSwgcHJlZml4ZWQgYnkgJy0nLgorIworc3ViIGZvcm1hdFNpZ0RpZyB7CisgICAgbXkgJG4gPSBzaGlmdCgpIC0gMTsKKyAgICBteSAkYSA9IHNoaWZ0OworCisgICAgbG9jYWwgJF8gPSBzcHJpbnRmKCIlLiR7bn1lIiwgJGEpOworICAgIG15ICRzaWduID0gKHMvXi0vLykgPyAnLScgOiAnJzsKKworICAgIG15ICRhX2U7CisgICAgbXkgJHJlc3VsdDsKKyAgICBpZiAoL14oXGQpXC4oXGQrKWUoWy0rXVxkKykkLykgeworICAgICAgICBteSAoJGQsICRkbiwgJGUpID0gKCQxLCAkMiwgJDMpOworICAgICAgICAkYV9lID0gJGU7CisgICAgICAgICRkIC49ICRkbjsKKyAgICAgICAgJGUrKzsKKyAgICAgICAgJGQgLj0gJzAnIHdoaWxlICgkZSA+IGxlbmd0aCgkZCkpOworICAgICAgICB3aGlsZSAoJGUgPCAxKSB7CisgICAgICAgICAgICAkZSsrOworICAgICAgICAgICAgJGQgPSAnMCcgLiAkZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoJGUgPT0gbGVuZ3RoKCRkKSkgeworICAgICAgICAgICAgJHJlc3VsdCA9ICRzaWduIC4gJGQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkcmVzdWx0ID0gJHNpZ24gLiBzdWJzdHIoJGQsIDAsICRlKSAuICcuJyAuIHN1YnN0cigkZCwgJGUpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGllICJDYW4ndCBwYXJzZSAkXyI7CisgICAgfQorICAgICRyZXN1bHQ7Cit9CisKKyNlb2YKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi9wZXJmLnBsIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvcGVyZi5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NjVlMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvcGVyZi5wbApAQCAtMCwwICsxLDQ2OCBAQAorIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7CisKKyMgQXNzdW1lIHdlIGFyZSBydW5uaW5nIHdpdGhpbiB0aGUgaWN1NGogcm9vdCBkaXJlY3RvcnkKK3VzZSBsaWIgJ3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9wZXJmJzsKKwordXNlIERhdGFzZXQ7CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBjbGFzcworbXkgJFRFU1RDTEFTUyA9ICdjb20uaWJtLmljdS5kZXYudGVzdC5wZXJmLlVuaWNvZGVTZXRQZXJmJzsKKworIyBNZXRob2RzIHRvIGJlIHRlc3RlZC4gIEVhY2ggcGFpciByZXByZXNlbnRzIGEgdGVzdCBtZXRob2QgYW5kCisjIGEgYmFzZWxpbmUgbWV0aG9kIHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBhcmlzb24uCitteSBATUVUSE9EUyAgPSAoWydVbmljb2RlU2V0QWRkJywgJ0hhc2hTZXRBZGQnXSwKKyAgICAgICAgICAgICAgICBbJ1VuaWNvZGVTZXRDb250YWlucycsICdIYXNoU2V0Q29udGFpbnMnXSwKKyAgICAgICAgICAgICAgICBbJ1VuaWNvZGVTZXRJdGVyYXRlJywgJ0hhc2hTZXRJdGVyYXRlJ10pOworCisjIFBhdHRlcm5zIHdoaWNoIGRlZmluZSB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdXNlZCBmb3IgdGVzdGluZy4KK215IEBQQVRURVJOUyA9ICgnWzpMdDpdJywgJ1s6Q246XScpOworCitteSAkQ0FMSUJSQVRFID0gMjsgIyBkdXJhdGlvbiBpbiBzZWNvbmRzIGZvciBpbml0aWFsIGNhbGlicmF0aW9uCitteSAkRFVSQVRJT04gPSAxMDsgIyBkdXJhdGlvbiBpbiBzZWNvbmRzIGZvciBlYWNoIHBhc3MKK215ICROVU1QQVNTRVMgPSA0OyAjIG51bWJlciBvZiBwYXNzZXMuICBJZiA+IDEgdGhlbiB0aGUgZmlyc3QgcGFzcworICAgICAgICAgICAgICAgICAgICMgaXMgZGlzY2FyZGVkIGFzIGEgSklUIHdhcm0tdXAgcGFzcy4KKworbXkgJFRBQkxFQVRUUiA9ICdCT1JERVI9IjEiIENFTExQQURESU5HPSI0IiBDRUxMU1BBQ0lORz0iMCInOworCitteSAkUExVU19NSU5VUyA9ICImcGx1c21uOyI7CisKK2lmICgkTlVNUEFTU0VTIDwgMykgeworICAgIGRpZSAiTmVlZCBhdCBsZWFzdCAzIHBhc3Nlcy4gIE9uZSBpcyBkaXNjYXJkZWQgKEpJVCB3YXJtdXApIGFuZCBuZWVkIHR3byB0byBoYXZlIDEgZGVncmVlIG9mIGZyZWVkb20gKHQgZGlzdHJpYnV0aW9uKS4iOworfQorCitteSAkT1VUOyAjIHNlZSBvdXQoKQorCittYWluKCk7CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uCitzdWIgbWFpbiB7CisgICAgbXkgJGRhdGUgPSBsb2NhbHRpbWU7CisgICAgbXkgJHRpdGxlID0gIklDVTRKIFBlcmZvcm1hbmNlIFRlc3QgJGRhdGUiOworCisgICAgbXkgJGh0bWwgPSAkZGF0ZTsKKyAgICAkaHRtbCA9fiBzLzovL2c7ICMgJzonIGlsbGVnYWwKKyAgICAkaHRtbCA9fiBzL1xzKlxkKyQvLzsgIyBkZWxldGUgeWVhcgorICAgICRodG1sID1+IHMvXlx3K1xzKi8vOyAjIGRlbGV0ZSBkb3cKKyAgICAkaHRtbCA9ICJwZXJmICRodG1sLmh0bWwiOworCisgICAgb3BlbihIVE1MLCI+JGh0bWwiKSBvciBkaWUgIkNhbid0IHdyaXRlIHRvICRodG1sOiAkISI7CisKKyAgICBwcmludCBIVE1MIDw8RU9GOworPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIgorICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiPgorPEhUTUw+CisgICA8SEVBRD4KKyAgICAgIDxUSVRMRT4kdGl0bGU8L1RJVExFPgorICAgPC9IRUFEPgorICAgPEJPRFk+CitFT0YKKyAgICBwcmludCBIVE1MICI8SDE+JHRpdGxlPC9IMT5cbiI7CisKKyAgICBwcmludCBIVE1MICI8SDI+JFRFU1RDTEFTUzwvSDI+XG4iOworCisgICAgbXkgJHJhdyA9ICIiOworCisgICAgZm9yIG15ICRtZXRob2RQYWlyIChATUVUSE9EUykgeworCisgICAgICAgIG15ICR0ZXN0TWV0aG9kID0gJG1ldGhvZFBhaXItPlswXTsKKyAgICAgICAgbXkgJGJhc2VsaW5lTWV0aG9kID0gJG1ldGhvZFBhaXItPlsxXTsKKworICAgICAgICBwcmludCBIVE1MICI8UD48VEFCTEUgJFRBQkxFQVRUUj48VFI+PFREPlxuIjsKKyAgICAgICAgcHJpbnQgSFRNTCAiPFA+PEI+JHRlc3RNZXRob2QgdnMuICRiYXNlbGluZU1ldGhvZDwvQj48L1A+XG4iOworICAgICAgICAKKyAgICAgICAgcHJpbnQgSFRNTCAiPFA+PFRBQkxFICRUQUJMRUFUVFIgQkdDT0xPUj1cIiNDQ0ZGRkZcIj5cbiI7CisgICAgICAgIHByaW50IEhUTUwgIjxUUj48VEQ+UGF0dGVybjwvVEQ+PFREPiR0ZXN0TWV0aG9kPC9URD4iOworICAgICAgICBwcmludCBIVE1MICI8VEQ+JGJhc2VsaW5lTWV0aG9kPC9URD48VEQ+UmF0aW88L1REPjwvVFI+XG4iOworCisgICAgICAgICRPVVQgPSAnJzsKKworICAgICAgICBmb3IgbXkgJHBhdCAoQFBBVFRFUk5TKSB7CisgICAgICAgICAgICBwcmludCBIVE1MICI8VFI+PFREPiRwYXQ8L1REPlxuIjsKKworICAgICAgICAgICAgb3V0KCI8UD48VEFCTEUgJFRBQkxFQVRUUiBXSURUSD1cIjEwMCVcIj4iKTsKKworICAgICAgICAgICAgIyBtZWFzdXJlIHRoZSB0ZXN0IG1ldGhvZAorICAgICAgICAgICAgb3V0KCI8VFI+PFREPiIpOworICAgICAgICAgICAgcHJpbnQgIlxuJHRlc3RNZXRob2QgJHBhdFxuIjsKKyAgICAgICAgICAgIG15ICR0ID0gbWVhc3VyZTIoJHRlc3RNZXRob2QsICRwYXQsIC0kRFVSQVRJT04pOworICAgICAgICAgICAgb3V0KCI8L1REPjwvVFI+Iik7CisgICAgICAgICAgICBwcmludCBIVE1MICI8VEQ+IiwgZm9ybWF0U2Vjb25kcyg0LCAkdC0+Z2V0TWVhbigpLCAkdC0+Z2V0RXJyb3IpOworICAgICAgICAgICAgcHJpbnQgSFRNTCAiL2V2ZW50PC9URD5cbiI7CisKKyAgICAgICAgICAgICMgbWVhc3VyZSBiYXNlbGluZSBtZXRob2QKKyAgICAgICAgICAgIG91dCgiPFRSPjxURD4iKTsKKyAgICAgICAgICAgIHByaW50ICJcbkJlZ2luICRiYXNlbGluZU1ldGhvZCAkcGF0XG4iOworICAgICAgICAgICAgbXkgJGIgPSBtZWFzdXJlMigkYmFzZWxpbmVNZXRob2QsICRwYXQsIC0kRFVSQVRJT04pOworICAgICAgICAgICAgb3V0KCI8L1REPjwvVFI+Iik7CisgICAgICAgICAgICBwcmludCBIVE1MICI8VEQ+IiwgZm9ybWF0U2Vjb25kcyg0LCAkYi0+Z2V0TWVhbigpLCAkdC0+Z2V0RXJyb3IpOworICAgICAgICAgICAgcHJpbnQgSFRNTCAiL2V2ZW50PC9URD5cbiI7CisKKyAgICAgICAgICAgIG91dCgiPC9UQUJMRT48L1A+Iik7CisKKyAgICAgICAgICAgICMgb3V0cHV0IHJhdGlvCisgICAgICAgICAgICBteSAkciA9ICR0LT5kaXZpZGUoJGIpOworICAgICAgICAgICAgcHJpbnQgSFRNTCAiPFREPjxCPiIsIGZvcm1hdFBlcmNlbnQoMywgJHItPmdldE1lYW4oKSwgJHItPmdldEVycm9yKTsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjwvQj48L1REPjwvVFI+XG4iOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnQgSFRNTCAiPC9UQUJMRT48L1A+XG4iOworCisgICAgICAgIHByaW50IEhUTUwgIjxQPlJhdyBkYXRhOjwvUD5cbiI7CisgICAgICAgIHByaW50IEhUTUwgJE9VVDsKKyAgICAgICAgcHJpbnQgSFRNTCAiPC9UQUJMRT48L1A+XG4iOworICAgIH0KKworICAgIHByaW50IEhUTUwgPDxFT0Y7CisgICA8L0JPRFk+Cis8L0hUTUw+CitFT0YKKyAgICBjbG9zZShIVE1MKSBvciBkaWUgIkNhbid0IGNsb3NlICRodG1sOiAkISI7Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRleHQgdG8gdGhlIGdsb2JhbCB2YXJpYWJsZSAkT1VUCitzdWIgb3V0IHsKKyAgICAkT1VUIC49IGpvaW4oJycsIEBfKTsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGV4dCB0byB0aGUgZ2xvYmFsIHZhcmlhYmxlICRPVVQKK3N1YiBvdXRsbiB7CisgICAgJE9VVCAuPSBqb2luKCcnLCBAXykgLiAiXG4iOworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1lYXN1cmUgYSBnaXZlbiB0ZXN0IG1ldGhvZCB3aXRoIGEgZ2l2ZSB0ZXN0IHBhdHRlcm4gdXNpbmcgdGhlCisjIGdsb2JhbCBydW4gcGFyYW1ldGVycy4KKyMKKyMgQHBhcmFtIHRoZSBtZXRob2QgdG8gcnVuCisjIEBwYXJhbSB0aGUgcGF0dGVybiBkZWZpbmluZyBjaGFyYWN0ZXJzIHRvIHRlc3QKKyMgQHBhcmFtIGlmID4wIHRoZW4gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHBlciBwYXNzLiAgSWYgPDAgdGhlbgorIyAgICAgICAgKG5lZ2F0aXZlIG9mKSB0aGUgbnVtYmVyIG9mIHNlY29uZHMgcGVyIHBhc3MuCisjCisjIEByZXR1cm4gYSBEYXRhc2V0IG9iamVjdCwgc2NhbGVkIGJ5IGl0ZXJhdGlvbnMgcGVyIHBhc3MgYW5kCisjICAgICAgICAgZXZlbnRzIHBlciBpdGVyYXRpb24sIHRvIGdpdmUgdGltZSBwZXIgZXZlbnQKKyMKK3N1YiBtZWFzdXJlMiB7CisgICAgbXkgQGRhdGEgPSBtZWFzdXJlMShAXyk7CisgICAgbXkgJGl0ZXJQZXJQYXNzID0gc2hpZnQoQGRhdGEpOworICAgIG15ICRldmVudFBlckl0ZXIgPSBzaGlmdChAZGF0YSk7CisKKyAgICBzaGlmdChAZGF0YSkgaWYgKEBkYXRhID4gMSk7ICMgZGlzY2FyZCBmaXJzdCBydW4KKworICAgIG15ICRkcyA9IERhdGFzZXQtPm5ldyhAZGF0YSk7CisgICAgJGRzLT5zZXRTY2FsZSgxLjBlLTMgLyAoJGl0ZXJQZXJQYXNzICogJGV2ZW50UGVySXRlcikpOworICAgICRkczsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNZWFzdXJlIGEgZ2l2ZW4gdGVzdCBtZXRob2Qgd2l0aCBhIGdpdmUgdGVzdCBwYXR0ZXJuIHVzaW5nIHRoZQorIyBnbG9iYWwgcnVuIHBhcmFtZXRlcnMuCisjCisjIEBwYXJhbSB0aGUgbWV0aG9kIHRvIHJ1bgorIyBAcGFyYW0gdGhlIHBhdHRlcm4gZGVmaW5pbmcgY2hhcmFjdGVycyB0byB0ZXN0CisjIEBwYXJhbSBpZiA+MCB0aGVuIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBwZXIgcGFzcy4gIElmIDwwIHRoZW4KKyMgICAgICAgIChuZWdhdGl2ZSBvZikgdGhlIG51bWJlciBvZiBzZWNvbmRzIHBlciBwYXNzLgorIworIyBAcmV0dXJuIGFycmF5IG9mOgorIyAgICAgICAgIFswXSBpdGVyYXRpb25zIHBlciBwYXNzCisjICAgICAgICAgWzFdIGV2ZW50cyBwZXIgaXRlcmF0aW9uCisjICAgICAgICAgWzIuLl0gbXMgcmVwb3J0ZWQgZm9yIGVhY2ggcGFzcywgaW4gb3JkZXIKKyMKK3N1YiBtZWFzdXJlMSB7CisgICAgbXkgJG1ldGhvZCA9IHNoaWZ0OworICAgIG15ICRwYXQgPSBzaGlmdDsKKyAgICBteSAkaXRlckNvdW50ID0gc2hpZnQ7ICMgYWN0dWFsbHkgbWlnaHQgYmUgLXNlY29uZHMvcGFzcworCisgICAgb3V0KCI8UD5NZWFzdXJpbmcgJG1ldGhvZCB1c2luZyAkcGF0LCAiKTsKKyAgICBpZiAoJGl0ZXJDb3VudCA+IDApIHsKKyAgICAgICAgb3V0KCIkaXRlckNvdW50IGl0ZXJhdGlvbnMvcGFzcywgJE5VTVBBU1NFUyBwYXNzZXM8L1A+XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBvdXQoLSRpdGVyQ291bnQsICIgc2Vjb25kcy9wYXNzLCAkTlVNUEFTU0VTIHBhc3NlczwvUD5cbiIpOworICAgIH0KKworICAgICMgaXMgJGl0ZXJDb3VudCBhY3R1YWxseSAtc2Vjb25kcz8KKyAgICBpZiAoJGl0ZXJDb3VudCA8IDApIHsKKworICAgICAgICAjIGNhbGlicmF0ZTogZXN0aW1hdGUgbXMvaXRlcmF0aW9uCisgICAgICAgIHByaW50ICJDYWxpYnJhdGluZy4uLiI7CisgICAgICAgIG15IEB0ID0gY2FsbEphdmEoJG1ldGhvZCwgJHBhdCwgLSRDQUxJQlJBVEUpOworICAgICAgICBwcmludCAiZG9uZS5cbiI7CisKKyAgICAgICAgbXkgQGRhdGEgPSBzcGxpdCgvXHMrLywgJHRbMF0tPlsyXSk7CisgICAgICAgIG15ICR0aW1lUGVySXRlciA9IDEuMGUtMyAqICRkYXRhWzBdIC8gJGRhdGFbMl07CisgICAgCisgICAgICAgICMgZGV0ZXJtaW5lIGl0ZXJhdGlvbnMvcGFzcworICAgICAgICAkaXRlckNvdW50ID0gaW50KC0kaXRlckNvdW50IC8gJHRpbWVQZXJJdGVyICsgMC41KTsKKworICAgICAgICBvdXQoIjxQPkNhbGlicmF0aW9uIHBhc3MgKCRDQUxJQlJBVEUgc2VjKTogIik7CisgICAgICAgIG91dCgiJGRhdGFbMF0gbXMsICIpOworICAgICAgICBvdXQoIiRkYXRhWzJdIGl0ZXJhdGlvbnMgPSAiKTsKKyAgICAgICAgb3V0KGZvcm1hdFNlY29uZHMoNCwgJHRpbWVQZXJJdGVyKSwgIi9pdGVyYXRpb248QlI+XG4iKTsKKyAgICB9CisgICAgCisgICAgIyBydW4gcGFzc2VzCisgICAgcHJpbnQgIk1lYXN1cmluZyAkaXRlckNvdW50IGl0ZXJhdGlvbnMgeCAkTlVNUEFTU0VTIHBhc3Nlcy4uLiI7CisgICAgbXkgQHQgPSBjYWxsSmF2YSgkbWV0aG9kLCAkcGF0LCAiJGl0ZXJDb3VudCAiIHggJE5VTVBBU1NFUyk7CisgICAgcHJpbnQgImRvbmUuXG4iOworICAgIG15IEBtcyA9ICgpOworICAgIG15IEBiOyAjIHNjcmF0Y2gKKyAgICBmb3IgbXkgJGEgKEB0KSB7CisgICAgICAgICMgJGEtPlswXTogbWV0aG9kIG5hbWUsIGNvcnJlc3BvbmRzIHRvICRtZXRob2QKKyAgICAgICAgIyAkYS0+WzFdOiAnYmVnaW4nIGRhdGEsID09ICRpdGVyQ291bnQKKyAgICAgICAgIyAkYS0+WzJdOiAnZW5kJyBkYXRhLCBvZiB0aGUgZm9ybSA8bXM+IDxldmVudHNQZXJJdGVyPgorICAgICAgICAjICRhLT5bMy4uLl06IGdjIG1lc3NhZ2VzIGZyb20gSlZNIGR1cmluZyBwYXNzCisgICAgICAgIEBiID0gc3BsaXQoL1xzKy8sICRhLT5bMl0pOworICAgICAgICBwdXNoKEBtcywgJGJbMF0pOworICAgIH0KKyAgICBteSAkZXZlbnRzUGVySXRlciA9ICRiWzFdOworCisgICAgb3V0KCJJdGVyYXRpb25zIHBlciBwYXNzOiAkaXRlckNvdW50PEJSPlxuIik7CisgICAgb3V0KCJFdmVudHMgcGVyIGl0ZXJhdGlvbjogJGV2ZW50c1Blckl0ZXI8QlI+XG4iKTsKKworICAgIG15IEBtc19zdHIgPSBAbXM7CisgICAgJG1zX3N0clswXSAuPSAiIChkaXNjYXJkZWQpIiBpZiAoQG1zX3N0ciA+IDEpOworICAgIG91dCgiUmF3IHRpbWVzIChtcy9wYXNzKTogIiwgam9pbigiLCAiLCBAbXNfc3RyKSwgIjxCUj5cbiIpOworCisgICAgKCRpdGVyQ291bnQsICRldmVudHNQZXJJdGVyLCBAbXMpOworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEludm9rZSBqYXZhIHRvIHJ1biAkVEVTVENMQVNTLCBwYXNzaW5nIGl0IHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorIworIyBAcGFyYW0gdGhlIG1ldGhvZCB0byBydW4KKyMgQHBhcmFtIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucywgb3IgaWYgbmVnYXRpdmUsIHRoZSBkdXJhdGlvbgorIyAgICAgICAgaW4gc2Vjb25kcy4gIElmIG1vcmUgdGhhbiBvbiBwYXNzIGlzIGRlc2lyZWQsIHBhc3MgaW4KKyMgICAgICAgIGEgc3RyaW5nLCBlLmcuLCAiMTAwIDEwMCAxMDAiLgorIyBAcGFyYW0gdGhlIHBhdHRlcm4gZGVmaW5pbmcgY2hhcmFjdGVycyB0byB0ZXN0CisjCisjIEByZXR1cm4gYW4gYXJyYXkgb2YgcmVzdWx0cy4gIEVhY2ggcmVzdWx0IGlzIGFuIGFycmF5IFJFRgorIyAgICAgICAgIGRlc2NyaWJpbmcgb25lIHBhc3MuICBUaGUgYXJyYXkgUkVGIGNvbnRhaW5zOgorIyAgICAgICAgIC0+WzBdOiBUaGUgbWV0aG9kIG5hbWUgYXMgcmVwb3J0ZWQKKyMgICAgICAgICAtPlsxXTogVGhlIHBhcmFtcyBvbiB0aGUgJz0gPG1ldGg+IGJlZ2luIC4uLicgbGluZQorIyAgICAgICAgIC0+WzJdOiBUaGUgcGFyYW1zIG9uIHRoZSAnPSA8bWV0aD4gZW5kIC4uLicgbGluZQorIyAgICAgICAgIC0+WzMuLl06IEdDIG1lc3NhZ2VzIGZyb20gdGhlIEpWTSwgaWYgYW55CisjCitzdWIgY2FsbEphdmEgeworICAgIG15ICRtZXRob2QgPSBzaGlmdDsKKyAgICBteSAkcGF0ID0gc2hpZnQ7CisgICAgbXkgJG4gPSBzaGlmdDsKKworICAgIG15ICRjbWQgPSAiamF2YSAtY3AgY2xhc3NlcyAkVEVTVENMQVNTICRtZXRob2QgJG4gJHBhdCI7CisgICAgIyBwcmludCAiWyRjbWRdXG4iOyAjIGZvciBkZWJ1Z2dpbmcKKyAgICBvcGVuKFBJUEUsICIkY21kfCIpIG9yIGRpZSAiQ2FuJ3QgcnVuIFwiJGNtZFwiIjsKKyAgICBteSBAb3V0OworICAgIHdoaWxlICg8UElQRT4pIHsKKyAgICAgICAgcHVzaChAb3V0LCAkXyk7CisgICAgfQorICAgIGNsb3NlKFBJUEUpIG9yIGRpZSAiSmF2YSBmYWlsZWQ6IFwiJGNtZFwiIjsKKworICAgIEBvdXQgPSBncmVwKCEvXlwjLywgQG91dCk7ICAjIGZpbHRlciBvdXQgY29tbWVudHMKKworICAgICNwcmludCAiWyIsIGpvaW4oIlxuIiwgQG91dCksICJdXG4iOworCisgICAgbXkgQHJlc3VsdHM7CisgICAgbXkgJG1ldGhvZCA9ICcnOworICAgIG15ICRkYXRhID0gW107CisgICAgZm9yZWFjaCAoQG91dCkgeworICAgICAgICBuZXh0IHVubGVzcyAoL1xTLyk7CisKKyAgICAgICAgaWYgKC9ePVxzKihcdyspXHMqKFx3KylccyooLiopLykgeworICAgICAgICAgICAgbXkgKCRtLCAkc3RhdGUsICRkKSA9ICgkMSwgJDIsICQzKTsKKyAgICAgICAgICAgICNwcmludCAiJF8gPT4gW1skbSAkc3RhdGUgJGRhdGFdXVxuIjsKKyAgICAgICAgICAgIGlmICgkc3RhdGUgZXEgJ2JlZ2luJykgeworICAgICAgICAgICAgICAgIGRpZSAiJG1ldGhvZCB3YXMgYmVndW4gYnV0IG5vdCBmaW5pc2hlZCIgaWYgKCRtZXRob2QpOworICAgICAgICAgICAgICAgICRtZXRob2QgPSAkbTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkZGF0YSwgJGQpOworICAgICAgICAgICAgICAgIHB1c2goQCRkYXRhLCAnJyk7ICMgcGxhY2Vob2xkZXIgZm9yIGVuZCBkYXRhCisgICAgICAgICAgICB9IGVsc2lmICgkc3RhdGUgZXEgJ2VuZCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoJG0gbmUgJG1ldGhvZCkgeworICAgICAgICAgICAgICAgICAgICBkaWUgIiRtZXRob2QgZW5kIGRvZXMgbm90IG1hdGNoOiAkXyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICRkYXRhLT5bMV0gPSAkZDsgIyBpbnNlcnQgZW5kIGRhdGEgYXQgWzFdCisgICAgICAgICAgICAgICAgI3ByaW50ICIjJG1ldGhvZDoiLCBqb2luKCI7IixAJGRhdGEpLCAiXG4iOworICAgICAgICAgICAgICAgIHVuc2hpZnQoQCRkYXRhLCAkbWV0aG9kKTsgIyBhZGQgbWV0aG9kIHRvIHN0YXJ0CisgICAgICAgICAgICAgICAgcHVzaChAcmVzdWx0cywgJGRhdGEpOworICAgICAgICAgICAgICAgICRtZXRob2QgPSAnJzsKKyAgICAgICAgICAgICAgICAkZGF0YSA9IFtdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkaWUgIkNhbid0IHBhcnNlOiAkXyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBlbHNpZiAoL15cWy8pIHsKKyAgICAgICAgICAgIGlmICgkbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgcHVzaChAJGRhdGEsICRfKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgZXh0cmFuZW91cyBHQyBub3RpY2VzCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiQ2FuJ3QgcGFyc2U6ICRfIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRpZSAiJG1ldGhvZCB3YXMgYmVndW4gYnV0IG5vdCBmaW5pc2hlZCIgaWYgKCRtZXRob2QpOworCisgICAgQHJlc3VsdHM7Cit9CisKKyN8Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI3wjIEZvcm1hdCBhIGNvbmZpZGVuY2UgaW50ZXJ2YWwsIGFzIGdpdmVuIGJ5IGEgRGF0YXNldC4gIE91dHB1dCBpcyBhcworI3wjIGFzIGZvbGxvd3M6CisjfCMgICAyNDEuMjMgLSAyNDEuOTggPT4gMjQxLjUgKy8tIDAuMworI3wjICAgMjQxLjIgLSAyNDMuOCA9PiAyNDIgKy8tIDEKKyN8IyAgIDIxMS4wIC0gMjQxLjAgPT4gMjI2ICsvLSAxNSBvcj8gMjMwICsvLSAyMAorI3wjICAgMjIwLjMgLSAyMzQuMyA9PiAyMjcgKy8tIDcKKyN8IyAgIDIyMC4zIC0gMzAwLjMgPT4gMjYwICsvLSA0MAorI3wjICAgMjIwLjMgLSAxMDAwID0+IDYxMCArLy0gMzkwIG9yPyA2MDAgKy8tIDQwMAorI3wjICAgMC4wMjIgLSAwLjAyNCA9PiAwLjAyMyArLy0gMC4wMDEKKyN8IyAgIDAuMDIyIC0gMC4wMzIgPT4gMC4wMjcgKy8tIDAuMDA1CisjfCMgICAwLjAyMiAtIDEuMDAwID0+IDAuNSArLy0gMC41CisjfCMgSW4gb3RoZXIgd29yZHMsIHRha2Ugb25lIHNpZ25pZmljYW50IGRpZ2l0IG9mIHRoZSBlcnJvciB2YWx1ZSBhbmQKKyN8IyBkaXNwbGF5IHRoZSBtZWFuIHRvIHRoZSBzYW1lIHByZWNpc2lvbi4KKyN8c3ViIGZvcm1hdERhdGFzZXQgeworI3wgICAgbXkgJGRzID0gc2hpZnQ7CisjfCAgICBteSAkbG93ZXIgPSAkZHMtPmdldE1lYW4oKSAtICRkcy0+Z2V0RXJyb3IoKTsKKyN8ICAgIG15ICR1cHBlciA9ICRkcy0+Z2V0TWVhbigpICsgJGRzLT5nZXRFcnJvcigpOworI3wgICAgbXkgJHNjYWxlID0gMDsKKyN8ICAgICMgRmluZCBob3cgbWFueSBpbml0aWFsIGRpZ2l0cyBhcmUgdGhlIHNhbWUKKyN8ICAgIHdoaWxlICgkbG93ZXIgPCAxIHx8CisjfCAgICAgICAgICAgaW50KCRsb3dlcikgPT0gaW50KCR1cHBlcikpIHsKKyN8ICAgICAgICAkbG93ZXIgKj0gMTA7CisjfCAgICAgICAgJHVwcGVyICo9IDEwOworI3wgICAgICAgICRzY2FsZSsrOworI3wgICAgfQorI3wgICAgd2hpbGUgKCRsb3dlciA+PSAxMCAmJgorI3wgICAgICAgICAgIGludCgkbG93ZXIpID09IGludCgkdXBwZXIpKSB7CisjfCAgICAgICAgJGxvd2VyIC89IDEwOworI3wgICAgICAgICR1cHBlciAvPSAxMDsKKyN8ICAgICAgICAkc2NhbGUtLTsKKyN8ICAgIH0KKyN8fQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm1hdCBhIG51bWJlciwgb3B0aW9uYWxseSB3aXRoIGEgKy8tIGRlbHRhLCB0byBuIHNpZ25pZmljYW50CisjIGRpZ2l0cy4KKyMKKyMgQHBhcmFtIHNpZ25pZmljYW50IGRpZ2l0LCBhIHZhbHVlID49IDEKKyMgQHBhcmFtIG11bHRpcGxpZXIKKyMgQHBhcmFtIHRpbWUgaW4gc2Vjb25kcyB0byBiZSBmb3JtYXR0ZWQKKyMgQG9wdGlvbmFsIGRlbHRhIGluIHNlY29uZHMKKyMKKyMgQHJldHVybiBzdHJpbmcgb2YgdGhlIGZvcm0gIjIzIiBvciAiMjMgKy8tIDEwIi4KKyMKK3N1YiBmb3JtYXROdW1iZXIgeworICAgIG15ICRzaWdkaWcgPSBzaGlmdDsKKyAgICBteSAkbXVsdCA9IHNoaWZ0OworICAgIG15ICRhID0gc2hpZnQ7CisgICAgbXkgJGRlbHRhID0gc2hpZnQ7ICMgbWF5IGJlIHVuZGVmCisgICAgCisgICAgbXkgJHJlc3VsdCA9IGZvcm1hdFNpZ0RpZygkc2lnZGlnLCAkYSokbXVsdCk7CisgICAgaWYgKGRlZmluZWQoJGRlbHRhKSkgeworICAgICAgICBteSAkZCA9IGZvcm1hdFNpZ0RpZygkc2lnZGlnLCAkZGVsdGEqJG11bHQpOworICAgICAgICAjIHJlc3RyaWN0IFBSRUNJU0lPTiBvZiBkZWx0YSB0byB0aGF0IG9mIG1haW4gbnVtYmVyCisgICAgICAgIGlmICgkcmVzdWx0ID1+IC9cLihcZCspLykgeworICAgICAgICAgICAgIyBUT0RPIG1ha2UgdGhpcyB3b3JrIGZvciB2YWx1ZXMgd2l0aCBhbGwgc2lnbmlmaWNhbnQKKyAgICAgICAgICAgICMgZGlnaXRzIHRvIHRoZSBsZWZ0IG9mIHRoZSBkZWNpbWFsLCBlLmcuLCAxMjM0MDAwLgorCisgICAgICAgICAgICAjIFRPRE8gdGhlIG90aGVyIHRoaW5nIHdyb25nIHdpdGggdGhpcyBpcyB0aGF0IGl0CisgICAgICAgICAgICAjIGlzbid0IHJvdW5kaW5nIHRoZSAkZGVsdGEgcHJvcGVybHkuICBIYXZlIHRvIHB1dAorICAgICAgICAgICAgIyB0aGlzIGxvZ2ljIGludG8gZm9ybWF0U2lnRGlnKCkuCisgICAgICAgICAgICBteSAkeCA9IGxlbmd0aCgkMSk7CisgICAgICAgICAgICAkZCA9fiBzL1wuKFxkeyR4fSlcZCsvLiQxLzsKKyAgICAgICAgfQorICAgICAgICAkcmVzdWx0IC49ICIgJFBMVVNfTUlOVVMgIiAuICRkOworICAgIH0KKyAgICAkcmVzdWx0OworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm1hdCBhIHRpbWUsIG9wdGlvbmFsbHkgd2l0aCBhICsvLSBkZWx0YSwgdG8gbiBzaWduaWZpY2FudAorIyBkaWdpdHMuCisjCisjIEBwYXJhbSBzaWduaWZpY2FudCBkaWdpdCwgYSB2YWx1ZSA+PSAxCisjIEBwYXJhbSB0aW1lIGluIHNlY29uZHMgdG8gYmUgZm9ybWF0dGVkCisjIEBvcHRpb25hbCBkZWx0YSBpbiBzZWNvbmRzCisjCisjIEByZXR1cm4gc3RyaW5nIG9mIHRoZSBmb3JtICIyMyBtcyIgb3IgIjIzICsvLSAxMCBtcyIuCisjCitzdWIgZm9ybWF0U2Vjb25kcyB7CisgICAgbXkgJHNpZ2RpZyA9IHNoaWZ0OworICAgIG15ICRhID0gc2hpZnQ7CisgICAgbXkgJGRlbHRhID0gc2hpZnQ7ICMgbWF5IGJlIHVuZGVmCisKKyAgICBteSBATVVMVCA9ICgxICAgLCAxZTMsICAxZTYsICAxZTkpOworICAgIG15IEBTVUZGID0gKCdzJyAsICdtcycsICd1cycsICducycpOworCisgICAgIyBEZXRlcm1pbmUgb3VyIHNjYWxlCisgICAgbXkgJGkgPSAwOworICAgICsrJGkgd2hpbGUgKCRhKiRNVUxUWyRpXSA8IDEgJiYgJGkgPCBATVVMVCk7CisgICAgCisgICAgZm9ybWF0TnVtYmVyKCRzaWdkaWcsICRNVUxUWyRpXSwgJGEsICRkZWx0YSkgLiAnICcgLiAkU1VGRlskaV07Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybWF0IGEgcGVyY2VudGFnZSwgb3B0aW9uYWxseSB3aXRoIGEgKy8tIGRlbHRhLCB0byBuIHNpZ25pZmljYW50CisjIGRpZ2l0cy4KKyMKKyMgQHBhcmFtIHNpZ25pZmljYW50IGRpZ2l0LCBhIHZhbHVlID49IDEKKyMgQHBhcmFtIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCwgYXMgYSBmcmFjdGlvbiwgZS5nLiAwLjUgZm9yIDUwJQorIyBAb3B0aW9uYWwgZGVsdGEsIGFzIGEgZnJhY3Rpb24KKyMKKyMgQHJldHVybiBzdHJpbmcgb2YgdGhlIGZvcm0gIjIzICUiIG9yICIyMyArLy0gMTAgJSIuCisjCitzdWIgZm9ybWF0UGVyY2VudCB7CisgICAgbXkgJHNpZ2RpZyA9IHNoaWZ0OworICAgIG15ICRhID0gc2hpZnQ7CisgICAgbXkgJGRlbHRhID0gc2hpZnQ7ICMgbWF5IGJlIHVuZGVmCisgICAgCisgICAgZm9ybWF0TnVtYmVyKCRzaWdkaWcsIDEwMCwgJGEsICRkZWx0YSkgLiAnICUnOworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm1hdCBhIG51bWJlciB0byBuIHNpZ25pZmljYW50IGRpZ2l0cyB3aXRob3V0IHVzaW5nIGV4cG9uZW50aWFsCisjIG5vdGF0aW9uLgorIworIyBAcGFyYW0gc2lnbmlmaWNhbnQgZGlnaXQsIGEgdmFsdWUgPj0gMQorIyBAcGFyYW0gbnVtYmVyIHRvIGJlIGZvcm1hdHRlZAorIworIyBAcmV0dXJuIHN0cmluZyBvZiB0aGUgZm9ybSAiMTIzNCIgIjEyLjM0IiBvciAiMC4wMDEyMzQiLiAgSWYKKyMgICAgICAgICBudW1iZXIgd2FzIG5lZ2F0aXZlLCBwcmVmaXhlZCBieSAnLScuCisjCitzdWIgZm9ybWF0U2lnRGlnIHsKKyAgICBteSAkbiA9IHNoaWZ0KCkgLSAxOworICAgIG15ICRhID0gc2hpZnQ7CisKKyAgICBsb2NhbCAkXyA9IHNwcmludGYoIiUuJHtufWUiLCAkYSk7CisgICAgbXkgJHNpZ24gPSAocy9eLS8vKSA/ICctJyA6ICcnOworCisgICAgbXkgJGFfZTsKKyAgICBteSAkcmVzdWx0OworICAgIGlmICgvXihcZClcLihcZCspZShbLStdXGQrKSQvKSB7CisgICAgICAgIG15ICgkZCwgJGRuLCAkZSkgPSAoJDEsICQyLCAkMyk7CisgICAgICAgICRhX2UgPSAkZTsKKyAgICAgICAgJGQgLj0gJGRuOworICAgICAgICAkZSsrOworICAgICAgICAkZCAuPSAnMCcgd2hpbGUgKCRlID4gbGVuZ3RoKCRkKSk7CisgICAgICAgIHdoaWxlICgkZSA8IDEpIHsKKyAgICAgICAgICAgICRlKys7CisgICAgICAgICAgICAkZCA9ICcwJyAuICRkOworICAgICAgICB9CisgICAgICAgIGlmICgkZSA9PSBsZW5ndGgoJGQpKSB7CisgICAgICAgICAgICAkcmVzdWx0ID0gJHNpZ24gLiAkZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRyZXN1bHQgPSAkc2lnbiAuIHN1YnN0cigkZCwgMCwgJGUpIC4gJy4nIC4gc3Vic3RyKCRkLCAkZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBkaWUgIkNhbid0IHBhcnNlICRfIjsKKyAgICB9CisgICAgJHJlc3VsdDsKK30KKworI2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvdWNoYXJhY3RlcnBlcmYucGwgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZi91Y2hhcmFjdGVycGVyZi5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYmE0MjY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3BlcmYvdWNoYXJhY3RlcnBlcmYucGwKQEAgLTAsMCArMSw0ODIgQEAKKyMhL3Vzci9sb2NhbC9iaW4vcGVybAorCit1c2Ugc3RyaWN0OworCisjIEFzc3VtZSB3ZSBhcmUgcnVubmluZyB3aXRoaW4gdGhlIGljdTRqIHJvb3QgZGlyZWN0b3J5Cit1c2UgbGliICdzcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcGVyZic7CisKK3VzZSBEYXRhc2V0OworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgY2xhc3MKK215ICRURVNUQ0xBU1MgPSAnY29tLmlibS5pY3UuZGV2LnRlc3QucGVyZi5VQ2hhcmFjdGVyUGVyZic7CisKKyMgTWV0aG9kcyB0byBiZSB0ZXN0ZWQuICBFYWNoIHBhaXIgcmVwcmVzZW50cyBhIHRlc3QgbWV0aG9kIGFuZAorIyBhIGJhc2VsaW5lIG1ldGhvZCB3aGljaCBpcyB1c2VkIGZvciBjb21wYXJpc29uLgorbXkgQE1FVEhPRFMgID0gKFsnRGlnaXQnLCAnSkRLRGlnaXQnXSwKKyAgICAgICAgICAgICAgICBbJ0dldE51bWVyaWNWYWx1ZScsICdKREtHZXROdW1lcmljVmFsdWUnXSwKKyAgICAgICAgICAgICAgICBbJ0dldFR5cGUnLCAnSkRLR2V0VHlwZSddLAorICAgICAgICAgICAgICAgIFsnSXNEZWZpbmVkJywgJ0pES0lzRGVmaW5lZCddLAorICAgICAgICAgICAgICAgIFsnSXNEaWdpdCcsICdKREtJc0RpZ2l0J10sCisgICAgICAgICAgICAgICAgWydJc0lkZW50aWZpZXJJZ25vcmFibGUnLCAnSkRLSXNJZGVudGlmaWVySWdub3JhYmxlJ10sCisgICAgICAgICAgICAgICAgWydJc0lTT0NvbnRyb2wnLCAnSkRLSXNJU09Db250cm9sJ10sCisgICAgICAgICAgICAgICAgWydJc0xldHRlcicsICdKREtJc0xldHRlciddLAorICAgICAgICAgICAgICAgIFsnSXNMZXR0ZXJPckRpZ2l0JywgJ0pES0lzTGV0dGVyT3JEaWdpdCddLAorICAgICAgICAgICAgICAgIFsnSXNMb3dlckNhc2UnLCAnSkRLSXNMb3dlckNhc2UnXSwKKyAgICAgICAgICAgICAgICBbJ0lzU3BhY2VDaGFyJywgJ0pES0lzU3BhY2VDaGFyJ10sCisgICAgICAgICAgICAgICAgWydJc1RpdGxlQ2FzZScsICdKREtJc1RpdGxlQ2FzZSddLAorICAgICAgICAgICAgICAgIFsnSXNVbmljb2RlSWRlbnRpZmllclBhcnQnLCAnSkRLSXNVbmljb2RlSWRlbnRpZmllclBhcnQnXSwKKyAgICAgICAgICAgICAgICBbJ0lzVW5pY29kZUlkZW50aWZpZXJTdGFydCcsICdKREtJc1VuaWNvZGVJZGVudGlmaWVyU3RhcnQnXSwKKyAgICAgICAgICAgICAgICBbJ0lzVXBwZXJDYXNlJywgJ0pES0lzVXBwZXJDYXNlJ10sCisgICAgICAgICAgICAgICAgWydJc1doaXRlU3BhY2UnLCAnSkRLSXNXaGl0ZVNwYWNlJ10sCisgICAgICAgICAgICAgICApOworCisjIFBhdHRlcm5zIHdoaWNoIGRlZmluZSB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdXNlZCBmb3IgdGVzdGluZy4KK215IEBQQVRURVJOUyA9ICgnMCBmZmZmJyk7CisKK215ICRDQUxJQlJBVEUgPSAyOyAjIGR1cmF0aW9uIGluIHNlY29uZHMgZm9yIGluaXRpYWwgY2FsaWJyYXRpb24KK215ICREVVJBVElPTiA9IDEwOyAjIGR1cmF0aW9uIGluIHNlY29uZHMgZm9yIGVhY2ggcGFzcworbXkgJE5VTVBBU1NFUyA9IDQ7ICMgbnVtYmVyIG9mIHBhc3Nlcy4gIElmID4gMSB0aGVuIHRoZSBmaXJzdCBwYXNzCisgICAgICAgICAgICAgICAgICAgIyBpcyBkaXNjYXJkZWQgYXMgYSBKSVQgd2FybS11cCBwYXNzLgorCitteSAkVEFCTEVBVFRSID0gJ0JPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjQiIENFTExTUEFDSU5HPSIwIic7CisKK215ICRQTFVTX01JTlVTID0gIiZwbHVzbW47IjsKKworaWYgKCROVU1QQVNTRVMgPCAzKSB7CisgICAgZGllICJOZWVkIGF0IGxlYXN0IDMgcGFzc2VzLiAgT25lIGlzIGRpc2NhcmRlZCAoSklUIHdhcm11cCkgYW5kIG5lZWQgdHdvIHRvIGhhdmUgMSBkZWdyZWUgb2YgZnJlZWRvbSAodCBkaXN0cmlidXRpb24pLiI7Cit9CisKK215ICRPVVQ7ICMgc2VlIG91dCgpCisKK21haW4oKTsKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi4KK3N1YiBtYWluIHsKKyAgICBteSAkZGF0ZSA9IGxvY2FsdGltZTsKKyAgICBteSAkdGl0bGUgPSAiSUNVNEogUGVyZm9ybWFuY2UgVGVzdCAkZGF0ZSI7CisKKyAgICBteSAkaHRtbCA9ICRkYXRlOworICAgICRodG1sID1+IHMvOi8vZzsgIyAnOicgaWxsZWdhbAorICAgICRodG1sID1+IHMvXHMqXGQrJC8vOyAjIGRlbGV0ZSB5ZWFyCisgICAgJGh0bWwgPX4gcy9eXHcrXHMqLy87ICMgZGVsZXRlIGRvdworICAgICRodG1sID0gInBlcmYgJGh0bWwuaHRtbCI7CisKKyAgICBvcGVuKEhUTUwsIj4kaHRtbCIpIG9yIGRpZSAiQ2FuJ3Qgd3JpdGUgdG8gJGh0bWw6ICQhIjsKKworICAgIHByaW50IEhUTUwgPDxFT0Y7Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4iCisgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+Cis8SFRNTD4KKyAgIDxIRUFEPgorICAgICAgPFRJVExFPiR0aXRsZTwvVElUTEU+CisgICA8L0hFQUQ+CisgICA8Qk9EWT4KK0VPRgorICAgIHByaW50IEhUTUwgIjxIMT4kdGl0bGU8L0gxPlxuIjsKKworICAgIHByaW50IEhUTUwgIjxIMj4kVEVTVENMQVNTPC9IMj5cbiI7CisKKyAgICBteSAkcmF3ID0gIiI7CisKKyAgICBmb3IgbXkgJG1ldGhvZFBhaXIgKEBNRVRIT0RTKSB7CisKKyAgICAgICAgbXkgJHRlc3RNZXRob2QgPSAkbWV0aG9kUGFpci0+WzBdOworICAgICAgICBteSAkYmFzZWxpbmVNZXRob2QgPSAkbWV0aG9kUGFpci0+WzFdOworCisgICAgICAgIHByaW50IEhUTUwgIjxQPjxUQUJMRSAkVEFCTEVBVFRSPjxUUj48VEQ+XG4iOworICAgICAgICBwcmludCBIVE1MICI8UD48Qj4kdGVzdE1ldGhvZCB2cy4gJGJhc2VsaW5lTWV0aG9kPC9CPjwvUD5cbiI7CisgICAgICAgIAorICAgICAgICBwcmludCBIVE1MICI8UD48VEFCTEUgJFRBQkxFQVRUUiBCR0NPTE9SPVwiI0NDRkZGRlwiPlxuIjsKKyAgICAgICAgcHJpbnQgSFRNTCAiPFRSPjxURD5QYXR0ZXJuPC9URD48VEQ+JHRlc3RNZXRob2Q8L1REPiI7CisgICAgICAgIHByaW50IEhUTUwgIjxURD4kYmFzZWxpbmVNZXRob2Q8L1REPjxURD5SYXRpbzwvVEQ+PC9UUj5cbiI7CisKKyAgICAgICAgJE9VVCA9ICcnOworCisgICAgICAgIGZvciBteSAkcGF0IChAUEFUVEVSTlMpIHsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjxUUj48VEQ+JHBhdDwvVEQ+XG4iOworCisgICAgICAgICAgICBvdXQoIjxQPjxUQUJMRSAkVEFCTEVBVFRSIFdJRFRIPVwiMTAwJVwiPiIpOworCisgICAgICAgICAgICAjIG1lYXN1cmUgdGhlIHRlc3QgbWV0aG9kCisgICAgICAgICAgICBvdXQoIjxUUj48VEQ+Iik7CisgICAgICAgICAgICBwcmludCAiXG4kdGVzdE1ldGhvZCAkcGF0XG4iOworICAgICAgICAgICAgbXkgJHQgPSBtZWFzdXJlMigkdGVzdE1ldGhvZCwgJHBhdCwgLSREVVJBVElPTik7CisgICAgICAgICAgICBvdXQoIjwvVEQ+PC9UUj4iKTsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjxURD4iLCBmb3JtYXRTZWNvbmRzKDQsICR0LT5nZXRNZWFuKCksICR0LT5nZXRFcnJvcik7CisgICAgICAgICAgICBwcmludCBIVE1MICIvZXZlbnQ8L1REPlxuIjsKKworICAgICAgICAgICAgIyBtZWFzdXJlIGJhc2VsaW5lIG1ldGhvZAorICAgICAgICAgICAgb3V0KCI8VFI+PFREPiIpOworICAgICAgICAgICAgcHJpbnQgIlxuQmVnaW4gJGJhc2VsaW5lTWV0aG9kICRwYXRcbiI7CisgICAgICAgICAgICBteSAkYiA9IG1lYXN1cmUyKCRiYXNlbGluZU1ldGhvZCwgJHBhdCwgLSREVVJBVElPTik7CisgICAgICAgICAgICBvdXQoIjwvVEQ+PC9UUj4iKTsKKyAgICAgICAgICAgIHByaW50IEhUTUwgIjxURD4iLCBmb3JtYXRTZWNvbmRzKDQsICRiLT5nZXRNZWFuKCksICR0LT5nZXRFcnJvcik7CisgICAgICAgICAgICBwcmludCBIVE1MICIvZXZlbnQ8L1REPlxuIjsKKworICAgICAgICAgICAgb3V0KCI8L1RBQkxFPjwvUD4iKTsKKworICAgICAgICAgICAgIyBvdXRwdXQgcmF0aW8KKyAgICAgICAgICAgIG15ICRyID0gJHQtPmRpdmlkZSgkYik7CisgICAgICAgICAgICBwcmludCBIVE1MICI8VEQ+PEI+IiwgZm9ybWF0UGVyY2VudCgzLCAkci0+Z2V0TWVhbigpLCAkci0+Z2V0RXJyb3IpOworICAgICAgICAgICAgcHJpbnQgSFRNTCAiPC9CPjwvVEQ+PC9UUj5cbiI7CisgICAgICAgIH0KKworICAgICAgICBwcmludCBIVE1MICI8L1RBQkxFPjwvUD5cbiI7CisKKyAgICAgICAgcHJpbnQgSFRNTCAiPFA+UmF3IGRhdGE6PC9QPlxuIjsKKyAgICAgICAgcHJpbnQgSFRNTCAkT1VUOworICAgICAgICBwcmludCBIVE1MICI8L1RBQkxFPjwvUD5cbiI7CisgICAgfQorCisgICAgcHJpbnQgSFRNTCA8PEVPRjsKKyAgIDwvQk9EWT4KKzwvSFRNTD4KK0VPRgorICAgIGNsb3NlKEhUTUwpIG9yIGRpZSAiQ2FuJ3QgY2xvc2UgJGh0bWw6ICQhIjsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGV4dCB0byB0aGUgZ2xvYmFsIHZhcmlhYmxlICRPVVQKK3N1YiBvdXQgeworICAgICRPVVQgLj0gam9pbignJywgQF8pOworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0ZXh0IHRvIHRoZSBnbG9iYWwgdmFyaWFibGUgJE9VVAorc3ViIG91dGxuIHsKKyAgICAkT1VUIC49IGpvaW4oJycsIEBfKSAuICJcbiI7Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWVhc3VyZSBhIGdpdmVuIHRlc3QgbWV0aG9kIHdpdGggYSBnaXZlIHRlc3QgcGF0dGVybiB1c2luZyB0aGUKKyMgZ2xvYmFsIHJ1biBwYXJhbWV0ZXJzLgorIworIyBAcGFyYW0gdGhlIG1ldGhvZCB0byBydW4KKyMgQHBhcmFtIHRoZSBwYXR0ZXJuIGRlZmluaW5nIGNoYXJhY3RlcnMgdG8gdGVzdAorIyBAcGFyYW0gaWYgPjAgdGhlbiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgcGVyIHBhc3MuICBJZiA8MCB0aGVuCisjICAgICAgICAobmVnYXRpdmUgb2YpIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBwZXIgcGFzcy4KKyMKKyMgQHJldHVybiBhIERhdGFzZXQgb2JqZWN0LCBzY2FsZWQgYnkgaXRlcmF0aW9ucyBwZXIgcGFzcyBhbmQKKyMgICAgICAgICBldmVudHMgcGVyIGl0ZXJhdGlvbiwgdG8gZ2l2ZSB0aW1lIHBlciBldmVudAorIworc3ViIG1lYXN1cmUyIHsKKyAgICBteSBAZGF0YSA9IG1lYXN1cmUxKEBfKTsKKyAgICBteSAkaXRlclBlclBhc3MgPSBzaGlmdChAZGF0YSk7CisgICAgbXkgJGV2ZW50UGVySXRlciA9IHNoaWZ0KEBkYXRhKTsKKworICAgIHNoaWZ0KEBkYXRhKSBpZiAoQGRhdGEgPiAxKTsgIyBkaXNjYXJkIGZpcnN0IHJ1bgorCisgICAgbXkgJGRzID0gRGF0YXNldC0+bmV3KEBkYXRhKTsKKyAgICAkZHMtPnNldFNjYWxlKDEuMGUtMyAvICgkaXRlclBlclBhc3MgKiAkZXZlbnRQZXJJdGVyKSk7CisgICAgJGRzOworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1lYXN1cmUgYSBnaXZlbiB0ZXN0IG1ldGhvZCB3aXRoIGEgZ2l2ZSB0ZXN0IHBhdHRlcm4gdXNpbmcgdGhlCisjIGdsb2JhbCBydW4gcGFyYW1ldGVycy4KKyMKKyMgQHBhcmFtIHRoZSBtZXRob2QgdG8gcnVuCisjIEBwYXJhbSB0aGUgcGF0dGVybiBkZWZpbmluZyBjaGFyYWN0ZXJzIHRvIHRlc3QKKyMgQHBhcmFtIGlmID4wIHRoZW4gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHBlciBwYXNzLiAgSWYgPDAgdGhlbgorIyAgICAgICAgKG5lZ2F0aXZlIG9mKSB0aGUgbnVtYmVyIG9mIHNlY29uZHMgcGVyIHBhc3MuCisjCisjIEByZXR1cm4gYXJyYXkgb2Y6CisjICAgICAgICAgWzBdIGl0ZXJhdGlvbnMgcGVyIHBhc3MKKyMgICAgICAgICBbMV0gZXZlbnRzIHBlciBpdGVyYXRpb24KKyMgICAgICAgICBbMi4uXSBtcyByZXBvcnRlZCBmb3IgZWFjaCBwYXNzLCBpbiBvcmRlcgorIworc3ViIG1lYXN1cmUxIHsKKyAgICBteSAkbWV0aG9kID0gc2hpZnQ7CisgICAgbXkgJHBhdCA9IHNoaWZ0OworICAgIG15ICRpdGVyQ291bnQgPSBzaGlmdDsgIyBhY3R1YWxseSBtaWdodCBiZSAtc2Vjb25kcy9wYXNzCisKKyAgICBvdXQoIjxQPk1lYXN1cmluZyAkbWV0aG9kIHVzaW5nICRwYXQsICIpOworICAgIGlmICgkaXRlckNvdW50ID4gMCkgeworICAgICAgICBvdXQoIiRpdGVyQ291bnQgaXRlcmF0aW9ucy9wYXNzLCAkTlVNUEFTU0VTIHBhc3NlczwvUD5cbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG91dCgtJGl0ZXJDb3VudCwgIiBzZWNvbmRzL3Bhc3MsICROVU1QQVNTRVMgcGFzc2VzPC9QPlxuIik7CisgICAgfQorCisgICAgIyBpcyAkaXRlckNvdW50IGFjdHVhbGx5IC1zZWNvbmRzPworICAgIGlmICgkaXRlckNvdW50IDwgMCkgeworCisgICAgICAgICMgY2FsaWJyYXRlOiBlc3RpbWF0ZSBtcy9pdGVyYXRpb24KKyAgICAgICAgcHJpbnQgIkNhbGlicmF0aW5nLi4uIjsKKyAgICAgICAgbXkgQHQgPSBjYWxsSmF2YSgkbWV0aG9kLCAkcGF0LCAtJENBTElCUkFURSk7CisgICAgICAgIHByaW50ICJkb25lLlxuIjsKKworICAgICAgICBteSBAZGF0YSA9IHNwbGl0KC9ccysvLCAkdFswXS0+WzJdKTsKKyAgICAgICAgbXkgJHRpbWVQZXJJdGVyID0gMS4wZS0zICogJGRhdGFbMF0gLyAkZGF0YVsyXTsKKyAgICAKKyAgICAgICAgIyBkZXRlcm1pbmUgaXRlcmF0aW9ucy9wYXNzCisgICAgICAgICRpdGVyQ291bnQgPSBpbnQoLSRpdGVyQ291bnQgLyAkdGltZVBlckl0ZXIgKyAwLjUpOworCisgICAgICAgIG91dCgiPFA+Q2FsaWJyYXRpb24gcGFzcyAoJENBTElCUkFURSBzZWMpOiAiKTsKKyAgICAgICAgb3V0KCIkZGF0YVswXSBtcywgIik7CisgICAgICAgIG91dCgiJGRhdGFbMl0gaXRlcmF0aW9ucyA9ICIpOworICAgICAgICBvdXQoZm9ybWF0U2Vjb25kcyg0LCAkdGltZVBlckl0ZXIpLCAiL2l0ZXJhdGlvbjxCUj5cbiIpOworICAgIH0KKyAgICAKKyAgICAjIHJ1biBwYXNzZXMKKyAgICBwcmludCAiTWVhc3VyaW5nICRpdGVyQ291bnQgaXRlcmF0aW9ucyB4ICROVU1QQVNTRVMgcGFzc2VzLi4uIjsKKyAgICBteSBAdCA9IGNhbGxKYXZhKCRtZXRob2QsICRwYXQsICIkaXRlckNvdW50ICIgeCAkTlVNUEFTU0VTKTsKKyAgICBwcmludCAiZG9uZS5cbiI7CisgICAgbXkgQG1zID0gKCk7CisgICAgbXkgQGI7ICMgc2NyYXRjaAorICAgIGZvciBteSAkYSAoQHQpIHsKKyAgICAgICAgIyAkYS0+WzBdOiBtZXRob2QgbmFtZSwgY29ycmVzcG9uZHMgdG8gJG1ldGhvZAorICAgICAgICAjICRhLT5bMV06ICdiZWdpbicgZGF0YSwgPT0gJGl0ZXJDb3VudAorICAgICAgICAjICRhLT5bMl06ICdlbmQnIGRhdGEsIG9mIHRoZSBmb3JtIDxtcz4gPGV2ZW50c1Blckl0ZXI+CisgICAgICAgICMgJGEtPlszLi4uXTogZ2MgbWVzc2FnZXMgZnJvbSBKVk0gZHVyaW5nIHBhc3MKKyAgICAgICAgQGIgPSBzcGxpdCgvXHMrLywgJGEtPlsyXSk7CisgICAgICAgIHB1c2goQG1zLCAkYlswXSk7CisgICAgfQorICAgIG15ICRldmVudHNQZXJJdGVyID0gJGJbMV07CisKKyAgICBvdXQoIkl0ZXJhdGlvbnMgcGVyIHBhc3M6ICRpdGVyQ291bnQ8QlI+XG4iKTsKKyAgICBvdXQoIkV2ZW50cyBwZXIgaXRlcmF0aW9uOiAkZXZlbnRzUGVySXRlcjxCUj5cbiIpOworCisgICAgbXkgQG1zX3N0ciA9IEBtczsKKyAgICAkbXNfc3RyWzBdIC49ICIgKGRpc2NhcmRlZCkiIGlmIChAbXNfc3RyID4gMSk7CisgICAgb3V0KCJSYXcgdGltZXMgKG1zL3Bhc3MpOiAiLCBqb2luKCIsICIsIEBtc19zdHIpLCAiPEJSPlxuIik7CisKKyAgICAoJGl0ZXJDb3VudCwgJGV2ZW50c1Blckl0ZXIsIEBtcyk7Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW52b2tlIGphdmEgdG8gcnVuICRURVNUQ0xBU1MsIHBhc3NpbmcgaXQgdGhlIGdpdmVuIHBhcmFtZXRlcnMuCisjCisjIEBwYXJhbSB0aGUgbWV0aG9kIHRvIHJ1bgorIyBAcGFyYW0gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLCBvciBpZiBuZWdhdGl2ZSwgdGhlIGR1cmF0aW9uCisjICAgICAgICBpbiBzZWNvbmRzLiAgSWYgbW9yZSB0aGFuIG9uIHBhc3MgaXMgZGVzaXJlZCwgcGFzcyBpbgorIyAgICAgICAgYSBzdHJpbmcsIGUuZy4sICIxMDAgMTAwIDEwMCIuCisjIEBwYXJhbSB0aGUgcGF0dGVybiBkZWZpbmluZyBjaGFyYWN0ZXJzIHRvIHRlc3QsIHZhbHVlcyBpbiBoZXggZGlnaXRzIHdpdGhvdXQgMHgKKyMKKyMgQHJldHVybiBhbiBhcnJheSBvZiByZXN1bHRzLiAgRWFjaCByZXN1bHQgaXMgYW4gYXJyYXkgUkVGCisjICAgICAgICAgZGVzY3JpYmluZyBvbmUgcGFzcy4gIFRoZSBhcnJheSBSRUYgY29udGFpbnM6CisjICAgICAgICAgLT5bMF06IFRoZSBtZXRob2QgbmFtZSBhcyByZXBvcnRlZAorIyAgICAgICAgIC0+WzFdOiBUaGUgcGFyYW1zIG9uIHRoZSAnPSA8bWV0aD4gYmVnaW4gLi4uJyBsaW5lCisjICAgICAgICAgLT5bMl06IFRoZSBwYXJhbXMgb24gdGhlICc9IDxtZXRoPiBlbmQgLi4uJyBsaW5lCisjICAgICAgICAgLT5bMy4uXTogR0MgbWVzc2FnZXMgZnJvbSB0aGUgSlZNLCBpZiBhbnkKKyMKK3N1YiBjYWxsSmF2YSB7CisgICAgbXkgJG1ldGhvZCA9IHNoaWZ0OworICAgIG15ICRwYXQgPSBzaGlmdDsKKyAgICBteSAkbiA9IHNoaWZ0OworCisgICAgbXkgJGNtZCA9ICJqYXZhIC1jcCBjbGFzc2VzICRURVNUQ0xBU1MgJG1ldGhvZCAkbiAtICRwYXQiOworICAgIHByaW50ICJbJGNtZF1cbiI7ICMgZm9yIGRlYnVnZ2luZworICAgIG9wZW4oUElQRSwgIiRjbWR8Iikgb3IgZGllICJDYW4ndCBydW4gXCIkY21kXCIiOworICAgIG15IEBvdXQ7CisgICAgd2hpbGUgKDxQSVBFPikgeworICAgICAgICBwdXNoKEBvdXQsICRfKTsKKyAgICB9CisgICAgY2xvc2UoUElQRSkgb3IgZGllICJKYXZhIGZhaWxlZDogXCIkY21kXCIiOworCisgICAgQG91dCA9IGdyZXAoIS9eXCMvLCBAb3V0KTsgICMgZmlsdGVyIG91dCBjb21tZW50cworCisgICAgI3ByaW50ICJbIiwgam9pbigiXG4iLCBAb3V0KSwgIl1cbiI7CisKKyAgICBteSBAcmVzdWx0czsKKyAgICBteSAkbWV0aG9kID0gJyc7CisgICAgbXkgJGRhdGEgPSBbXTsKKyAgICBmb3JlYWNoIChAb3V0KSB7CisgICAgICAgIG5leHQgdW5sZXNzICgvXFMvKTsKKworICAgICAgICBpZiAoL149XHMqKFx3KylccyooXHcrKVxzKiguKikvKSB7CisgICAgICAgICAgICBteSAoJG0sICRzdGF0ZSwgJGQpID0gKCQxLCAkMiwgJDMpOworICAgICAgICAgICAgI3ByaW50ICIkXyA9PiBbWyRtICRzdGF0ZSAkZGF0YV1dXG4iOworICAgICAgICAgICAgaWYgKCRzdGF0ZSBlcSAnYmVnaW4nKSB7CisgICAgICAgICAgICAgICAgZGllICIkbWV0aG9kIHdhcyBiZWd1biBidXQgbm90IGZpbmlzaGVkIiBpZiAoJG1ldGhvZCk7CisgICAgICAgICAgICAgICAgJG1ldGhvZCA9ICRtOworICAgICAgICAgICAgICAgIHB1c2goQCRkYXRhLCAkZCk7CisgICAgICAgICAgICAgICAgcHVzaChAJGRhdGEsICcnKTsgIyBwbGFjZWhvbGRlciBmb3IgZW5kIGRhdGEKKyAgICAgICAgICAgIH0gZWxzaWYgKCRzdGF0ZSBlcSAnZW5kJykgeworICAgICAgICAgICAgICAgIGlmICgkbSBuZSAkbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgICAgIGRpZSAiJG1ldGhvZCBlbmQgZG9lcyBub3QgbWF0Y2g6ICRfIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJGRhdGEtPlsxXSA9ICRkOyAjIGluc2VydCBlbmQgZGF0YSBhdCBbMV0KKyAgICAgICAgICAgICAgICAjcHJpbnQgIiMkbWV0aG9kOiIsIGpvaW4oIjsiLEAkZGF0YSksICJcbiI7CisgICAgICAgICAgICAgICAgdW5zaGlmdChAJGRhdGEsICRtZXRob2QpOyAjIGFkZCBtZXRob2QgdG8gc3RhcnQKKyAgICAgICAgICAgICAgICBwdXNoKEByZXN1bHRzLCAkZGF0YSk7CisgICAgICAgICAgICAgICAgJG1ldGhvZCA9ICcnOworICAgICAgICAgICAgICAgICRkYXRhID0gW107CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRpZSAiQ2FuJ3QgcGFyc2U6ICRfIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVsc2lmICgvXlxbLykgeworICAgICAgICAgICAgaWYgKCRtZXRob2QpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEAkZGF0YSwgJF8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAjIGlnbm9yZSBleHRyYW5lb3VzIEdDIG5vdGljZXMKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGllICJDYW4ndCBwYXJzZTogJF8iOworICAgICAgICB9CisgICAgfQorCisgICAgZGllICIkbWV0aG9kIHdhcyBiZWd1biBidXQgbm90IGZpbmlzaGVkIiBpZiAoJG1ldGhvZCk7CisKKyAgICBAcmVzdWx0czsKK30KKworI3wjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjfCMgRm9ybWF0IGEgY29uZmlkZW5jZSBpbnRlcnZhbCwgYXMgZ2l2ZW4gYnkgYSBEYXRhc2V0LiAgT3V0cHV0IGlzIGFzCisjfCMgYXMgZm9sbG93czoKKyN8IyAgIDI0MS4yMyAtIDI0MS45OCA9PiAyNDEuNSArLy0gMC4zCisjfCMgICAyNDEuMiAtIDI0My44ID0+IDI0MiArLy0gMQorI3wjICAgMjExLjAgLSAyNDEuMCA9PiAyMjYgKy8tIDE1IG9yPyAyMzAgKy8tIDIwCisjfCMgICAyMjAuMyAtIDIzNC4zID0+IDIyNyArLy0gNworI3wjICAgMjIwLjMgLSAzMDAuMyA9PiAyNjAgKy8tIDQwCisjfCMgICAyMjAuMyAtIDEwMDAgPT4gNjEwICsvLSAzOTAgb3I/IDYwMCArLy0gNDAwCisjfCMgICAwLjAyMiAtIDAuMDI0ID0+IDAuMDIzICsvLSAwLjAwMQorI3wjICAgMC4wMjIgLSAwLjAzMiA9PiAwLjAyNyArLy0gMC4wMDUKKyN8IyAgIDAuMDIyIC0gMS4wMDAgPT4gMC41ICsvLSAwLjUKKyN8IyBJbiBvdGhlciB3b3JkcywgdGFrZSBvbmUgc2lnbmlmaWNhbnQgZGlnaXQgb2YgdGhlIGVycm9yIHZhbHVlIGFuZAorI3wjIGRpc3BsYXkgdGhlIG1lYW4gdG8gdGhlIHNhbWUgcHJlY2lzaW9uLgorI3xzdWIgZm9ybWF0RGF0YXNldCB7CisjfCAgICBteSAkZHMgPSBzaGlmdDsKKyN8ICAgIG15ICRsb3dlciA9ICRkcy0+Z2V0TWVhbigpIC0gJGRzLT5nZXRFcnJvcigpOworI3wgICAgbXkgJHVwcGVyID0gJGRzLT5nZXRNZWFuKCkgKyAkZHMtPmdldEVycm9yKCk7CisjfCAgICBteSAkc2NhbGUgPSAwOworI3wgICAgIyBGaW5kIGhvdyBtYW55IGluaXRpYWwgZGlnaXRzIGFyZSB0aGUgc2FtZQorI3wgICAgd2hpbGUgKCRsb3dlciA8IDEgfHwKKyN8ICAgICAgICAgICBpbnQoJGxvd2VyKSA9PSBpbnQoJHVwcGVyKSkgeworI3wgICAgICAgICRsb3dlciAqPSAxMDsKKyN8ICAgICAgICAkdXBwZXIgKj0gMTA7CisjfCAgICAgICAgJHNjYWxlKys7CisjfCAgICB9CisjfCAgICB3aGlsZSAoJGxvd2VyID49IDEwICYmCisjfCAgICAgICAgICAgaW50KCRsb3dlcikgPT0gaW50KCR1cHBlcikpIHsKKyN8ICAgICAgICAkbG93ZXIgLz0gMTA7CisjfCAgICAgICAgJHVwcGVyIC89IDEwOworI3wgICAgICAgICRzY2FsZS0tOworI3wgICAgfQorI3x9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybWF0IGEgbnVtYmVyLCBvcHRpb25hbGx5IHdpdGggYSArLy0gZGVsdGEsIHRvIG4gc2lnbmlmaWNhbnQKKyMgZGlnaXRzLgorIworIyBAcGFyYW0gc2lnbmlmaWNhbnQgZGlnaXQsIGEgdmFsdWUgPj0gMQorIyBAcGFyYW0gbXVsdGlwbGllcgorIyBAcGFyYW0gdGltZSBpbiBzZWNvbmRzIHRvIGJlIGZvcm1hdHRlZAorIyBAb3B0aW9uYWwgZGVsdGEgaW4gc2Vjb25kcworIworIyBAcmV0dXJuIHN0cmluZyBvZiB0aGUgZm9ybSAiMjMiIG9yICIyMyArLy0gMTAiLgorIworc3ViIGZvcm1hdE51bWJlciB7CisgICAgbXkgJHNpZ2RpZyA9IHNoaWZ0OworICAgIG15ICRtdWx0ID0gc2hpZnQ7CisgICAgbXkgJGEgPSBzaGlmdDsKKyAgICBteSAkZGVsdGEgPSBzaGlmdDsgIyBtYXkgYmUgdW5kZWYKKyAgICAKKyAgICBteSAkcmVzdWx0ID0gZm9ybWF0U2lnRGlnKCRzaWdkaWcsICRhKiRtdWx0KTsKKyAgICBpZiAoZGVmaW5lZCgkZGVsdGEpKSB7CisgICAgICAgIG15ICRkID0gZm9ybWF0U2lnRGlnKCRzaWdkaWcsICRkZWx0YSokbXVsdCk7CisgICAgICAgICMgcmVzdHJpY3QgUFJFQ0lTSU9OIG9mIGRlbHRhIHRvIHRoYXQgb2YgbWFpbiBudW1iZXIKKyAgICAgICAgaWYgKCRyZXN1bHQgPX4gL1wuKFxkKykvKSB7CisgICAgICAgICAgICAjIFRPRE8gbWFrZSB0aGlzIHdvcmsgZm9yIHZhbHVlcyB3aXRoIGFsbCBzaWduaWZpY2FudAorICAgICAgICAgICAgIyBkaWdpdHMgdG8gdGhlIGxlZnQgb2YgdGhlIGRlY2ltYWwsIGUuZy4sIDEyMzQwMDAuCisKKyAgICAgICAgICAgICMgVE9ETyB0aGUgb3RoZXIgdGhpbmcgd3Jvbmcgd2l0aCB0aGlzIGlzIHRoYXQgaXQKKyAgICAgICAgICAgICMgaXNuJ3Qgcm91bmRpbmcgdGhlICRkZWx0YSBwcm9wZXJseS4gIEhhdmUgdG8gcHV0CisgICAgICAgICAgICAjIHRoaXMgbG9naWMgaW50byBmb3JtYXRTaWdEaWcoKS4KKyAgICAgICAgICAgIG15ICR4ID0gbGVuZ3RoKCQxKTsKKyAgICAgICAgICAgICRkID1+IHMvXC4oXGR7JHh9KVxkKy8uJDEvOworICAgICAgICB9CisgICAgICAgICRyZXN1bHQgLj0gIiAkUExVU19NSU5VUyAiIC4gJGQ7CisgICAgfQorICAgICRyZXN1bHQ7Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybWF0IGEgdGltZSwgb3B0aW9uYWxseSB3aXRoIGEgKy8tIGRlbHRhLCB0byBuIHNpZ25pZmljYW50CisjIGRpZ2l0cy4KKyMKKyMgQHBhcmFtIHNpZ25pZmljYW50IGRpZ2l0LCBhIHZhbHVlID49IDEKKyMgQHBhcmFtIHRpbWUgaW4gc2Vjb25kcyB0byBiZSBmb3JtYXR0ZWQKKyMgQG9wdGlvbmFsIGRlbHRhIGluIHNlY29uZHMKKyMKKyMgQHJldHVybiBzdHJpbmcgb2YgdGhlIGZvcm0gIjIzIG1zIiBvciAiMjMgKy8tIDEwIG1zIi4KKyMKK3N1YiBmb3JtYXRTZWNvbmRzIHsKKyAgICBteSAkc2lnZGlnID0gc2hpZnQ7CisgICAgbXkgJGEgPSBzaGlmdDsKKyAgICBteSAkZGVsdGEgPSBzaGlmdDsgIyBtYXkgYmUgdW5kZWYKKworICAgIG15IEBNVUxUID0gKDEgICAsIDFlMywgIDFlNiwgIDFlOSk7CisgICAgbXkgQFNVRkYgPSAoJ3MnICwgJ21zJywgJ3VzJywgJ25zJyk7CisKKyAgICAjIERldGVybWluZSBvdXIgc2NhbGUKKyAgICBteSAkaSA9IDA7CisgICAgKyskaSB3aGlsZSAoJGEqJE1VTFRbJGldIDwgMSAmJiAkaSA8IEBNVUxUKTsKKyAgICAKKyAgICBmb3JtYXROdW1iZXIoJHNpZ2RpZywgJE1VTFRbJGldLCAkYSwgJGRlbHRhKSAuICcgJyAuICRTVUZGWyRpXTsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3JtYXQgYSBwZXJjZW50YWdlLCBvcHRpb25hbGx5IHdpdGggYSArLy0gZGVsdGEsIHRvIG4gc2lnbmlmaWNhbnQKKyMgZGlnaXRzLgorIworIyBAcGFyYW0gc2lnbmlmaWNhbnQgZGlnaXQsIGEgdmFsdWUgPj0gMQorIyBAcGFyYW0gdmFsdWUgdG8gYmUgZm9ybWF0dGVkLCBhcyBhIGZyYWN0aW9uLCBlLmcuIDAuNSBmb3IgNTAlCisjIEBvcHRpb25hbCBkZWx0YSwgYXMgYSBmcmFjdGlvbgorIworIyBAcmV0dXJuIHN0cmluZyBvZiB0aGUgZm9ybSAiMjMgJSIgb3IgIjIzICsvLSAxMCAlIi4KKyMKK3N1YiBmb3JtYXRQZXJjZW50IHsKKyAgICBteSAkc2lnZGlnID0gc2hpZnQ7CisgICAgbXkgJGEgPSBzaGlmdDsKKyAgICBteSAkZGVsdGEgPSBzaGlmdDsgIyBtYXkgYmUgdW5kZWYKKyAgICAKKyAgICBmb3JtYXROdW1iZXIoJHNpZ2RpZywgMTAwLCAkYSwgJGRlbHRhKSAuICcgJSc7Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ybWF0IGEgbnVtYmVyIHRvIG4gc2lnbmlmaWNhbnQgZGlnaXRzIHdpdGhvdXQgdXNpbmcgZXhwb25lbnRpYWwKKyMgbm90YXRpb24uCisjCisjIEBwYXJhbSBzaWduaWZpY2FudCBkaWdpdCwgYSB2YWx1ZSA+PSAxCisjIEBwYXJhbSBudW1iZXIgdG8gYmUgZm9ybWF0dGVkCisjCisjIEByZXR1cm4gc3RyaW5nIG9mIHRoZSBmb3JtICIxMjM0IiAiMTIuMzQiIG9yICIwLjAwMTIzNCIuICBJZgorIyAgICAgICAgIG51bWJlciB3YXMgbmVnYXRpdmUsIHByZWZpeGVkIGJ5ICctJy4KKyMKK3N1YiBmb3JtYXRTaWdEaWcgeworICAgIG15ICRuID0gc2hpZnQoKSAtIDE7CisgICAgbXkgJGEgPSBzaGlmdDsKKworICAgIGxvY2FsICRfID0gc3ByaW50ZigiJS4ke259ZSIsICRhKTsKKyAgICBteSAkc2lnbiA9IChzL14tLy8pID8gJy0nIDogJyc7CisKKyAgICBteSAkYV9lOworICAgIG15ICRyZXN1bHQ7CisgICAgaWYgKC9eKFxkKVwuKFxkKyllKFstK11cZCspJC8pIHsKKyAgICAgICAgbXkgKCRkLCAkZG4sICRlKSA9ICgkMSwgJDIsICQzKTsKKyAgICAgICAgJGFfZSA9ICRlOworICAgICAgICAkZCAuPSAkZG47CisgICAgICAgICRlKys7CisgICAgICAgICRkIC49ICcwJyB3aGlsZSAoJGUgPiBsZW5ndGgoJGQpKTsKKyAgICAgICAgd2hpbGUgKCRlIDwgMSkgeworICAgICAgICAgICAgJGUrKzsKKyAgICAgICAgICAgICRkID0gJzAnIC4gJGQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCRlID09IGxlbmd0aCgkZCkpIHsKKyAgICAgICAgICAgICRyZXN1bHQgPSAkc2lnbiAuICRkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3VsdCA9ICRzaWduIC4gc3Vic3RyKCRkLCAwLCAkZSkgLiAnLicgLiBzdWJzdHIoJGQsICRlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRpZSAiQ2FuJ3QgcGFyc2UgJF8iOworICAgIH0KKyAgICAkcmVzdWx0OworfQorCisjZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcmJiaS9CcmVha0l0ZXJhdG9yUnVsZXNfZW5fVVNfVEVTVC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvQnJlYWtJdGVyYXRvclJ1bGVzX2VuX1VTX1RFU1QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzJkMzZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvQnJlYWtJdGVyYXRvclJ1bGVzX2VuX1VTX1RFU1QuamF2YQpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvQnJlYWtJdGVyYXRvclJ1bGVzX2VuX1VTX1RFU1QuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjE0ICQKKyAqICRSZXZpc2lvbjogMS44ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5yYmJpOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CisKKy8qKgorICogVGhpcyByZXNvdXJjZSBidW5kbGUgaXMgaW5jbHVkZWQgZm9yIHRlc3RpbmcgYW5kIGRlbW9uc3RyYXRpb24gcHVycG9zZXMgb25seS4KKyAqIEl0IGFwcGxpZXMgdGhlIGRpY3Rpb25hcnktYmFzZWQgYWxnb3JpdGhtIHRvIEVuZ2xpc2ggdGV4dCB0aGF0IGhhcyBoYWQgYWxsIHRoZQorICogc3BhY2VzIHJlbW92ZWQuICBPbmNlIHdlIGhhdmUgZ29vZCB0ZXN0IGNhc2VzIGZvciBUaGFpLCB3ZSB3aWxsIHJlcGxhY2UgdGhpcworICogd2l0aCBnb29kIHJlc291cmNlIGRhdGEgKGFuZCBhIGdvb2QgZGljdGlvbmFyeSBmaWxlKSBmb3IgVGhhaQorICovCitwdWJsaWMgY2xhc3MgQnJlYWtJdGVyYXRvclJ1bGVzX2VuX1VTX1RFU1QgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFVSTCB1cmwgPQorICAgICAgICBCcmVha0l0ZXJhdG9yUnVsZXNfZW5fVVNfVEVTVC5jbGFzcy5nZXRSZXNvdXJjZSgiL2NvbS9pYm0vZGF0YS9taXNjL2VuZ2xpc2guZGljdCIpOworCisgICAgcHVibGljIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBjb250ZW50czsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBjb250ZW50cyA9IHsKKyAgICAgICAgLy8gbmFtZXMgb2YgY2xhc3NlcyB0byBpbnN0YW50aWF0ZSBmb3IgdGhlIGRpZmZlcmVudCBraW5kcyBvZiBicmVhaworICAgICAgICAvLyBpdGVyYXRvci4gIE5vdGljZSB3ZSdyZSBub3cgdXNpbmcgRGljdGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvcgorICAgICAgICAvLyBmb3Igd29yZCBhbmQgbGluZSBicmVha2luZy4KKyAgICAgICAgeyAiQnJlYWtJdGVyYXRvckNsYXNzZXMiLAorICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgIlJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IiLCAgICAgICAgICAgLy8gY2hhcmFjdGVyLWJyZWFrIGl0ZXJhdG9yIGNsYXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGljdGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvciIsICAgICAvLyB3b3JkLWJyZWFrIGl0ZXJhdG9yIGNsYXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGljdGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvciIsICAgICAvLyBsaW5lLWJyZWFrIGl0ZXJhdG9yIGNsYXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiUnVsZUJhc2VkQnJlYWtJdGVyYXRvciIgfSAgICAgICAgICAvLyBzZW50ZW5jZS1icmVhayBpdGVyYXRvciBjbGFzcworICAgICAgICB9LAorCisgICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSB3b3JkLWJyZWFraW5nIHJ1bGVzIGFzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgLy8gcmVzb3VyY2UsIGV4Y2VwdCB0aGF0IHRoZSBMYXRpbiBsZXR0ZXJzLCBhcG9zdHJvcGhlLCBhbmQgaHlwaGVuIGFyZQorICAgICAgICAvLyBzcGVjaWZpZWQgYXMgZGljdGlvbmFyeSBjaGFyYWN0ZXJzCisgICAgICAgIHsgIldvcmRCcmVha1J1bGVzIiwKKyAgICAgICAgICAgIC8vIGlnbm9yZSBub24tc3BhY2luZyBtYXJrcywgZW5jbG9zaW5nIG1hcmtzLCBhbmQgZm9ybWF0IGNoYXJhY3RlcnMsCisgICAgICAgICAgICAvLyBhbGwgb2Ygd2hpY2ggc2hvdWxkIG5vdCBpbmZsdWVuY2UgdGhlIGFsZ29yaXRobQorICAgICAgICAgICAgIiRfaWdub3JlXz1bWzpNbjpdWzpNZTpdWzpDZjpdXTsiCisKKyAgICAgICAgICAgIC8vIGxvd2VyIGFuZCB1cHBlciBjYXNlIFJvbWFuIGxldHRlcnMsIGFwb3N0cm9waHkgYW5kIGRhc2ggYXJlCisgICAgICAgICAgICAvLyBpbiB0aGUgRW5nbGlzaCBkaWN0aW9uYXJ5CisgICAgICAgICAgICArICIkX2RpY3Rpb25hcnlfPVthLXpBLVpcXCdcXC1dOyIKKworICAgICAgICAgICAgLy8gSGluZGkgcGhyYXNlIHNlcGFyYXRvciwga2FuamksIGthdGFrYW5hLCBoaXJhZ2FuYSwgQ0pLIGRpYWNyaXRpY2FscywKKyAgICAgICAgICAgIC8vIG90aGVyIGxldHRlcnMsIGFuZCBkaWdpdHMKKyAgICAgICAgICAgICsgIiRkYW5kYT1bXHUwOTY0XHUwOTY1XTsiCisgICAgICAgICAgICArICIka2Fuamk9W1x1MzAwNVx1NGUwMC1cdTlmYTVcdWY5MDAtXHVmYTJkXTsiCisgICAgICAgICAgICArICIka2F0YT1bXHUzMDk5LVx1MzA5Y1x1MzBhMS1cdTMwZmVdOyIKKyAgICAgICAgICAgICsgIiRoaXJhPVtcdTMwNDEtXHUzMDllXHUzMGZjXTsiCisgICAgICAgICAgICArICIkbGV0PVtbWzpMOl1bOk1jOl1dLVska2Fuamkka2F0YSRoaXJhXV07IgorICAgICAgICAgICAgKyAiJGRndD1bOk46XTsiCisKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uIHRoYXQgY2FuIG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkOiBjdXJyZW50bHkKKyAgICAgICAgICAgIC8vIGRhc2hlcywgYXBvc3Ryb3BoZXMsIGFuZCBxdW90YXRpb24gbWFya3MKKyAgICAgICAgICAgICsgIiRtaWRfd29yZD1bWzpQZDpdXHUwMGFkXHUyMDI3XFxcIlxcXCddOyIKKworICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24gdGhhdCBjYW4gb2NjdXIgaW4gdGhlIG1pZGRsZSBvZiBhIG51bWJlcjogY3VycmVudGx5CisgICAgICAgICAgICAvLyBhcG9zdHJvcGhlcywgcW91dGF0aW9uIG1hcmtzLCBwZXJpb2RzLCBjb21tYXMsIGFuZCB0aGUgQXJhYmljCisgICAgICAgICAgICAvLyBkZWNpbWFsIHBvaW50CisgICAgICAgICAgICArICIkbWlkX251bT1bXFxcIlxcXCdcXCxcdTA2NmJcXC5dOyIKKworICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24gdGhhdCBjYW4gb2NjdXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG51bWJlcjogY3VycmVudGx5CisgICAgICAgICAgICAvLyB0aGUgcGVyaW9kLCB0aGUgbnVtYmVyIHNpZ24sIGFuZCBhbGwgY3VycmVuY3kgc3ltYm9scyBleGNlcHQgdGhlIGNlbnRzIHNpZ24KKyAgICAgICAgICAgICsgIiRwcmVfbnVtPVtbWzpTYzpdLVtcdTAwYTJdXVxcI1xcLl07IgorCisgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBhdCB0aGUgZW5kIG9mIGEgbnVtYmVyOiBjdXJyZW50bHkKKyAgICAgICAgICAgIC8vIHRoZSBwZXJjZW50LCBwZXItdGhvdXNhbmQsIHBlci10ZW4tdGhvdXNhbmQsIGFuZCBBcmFiaWMgcGVyY2VudAorICAgICAgICAgICAgLy8gc2lnbnMsIHRoZSBjZW50cyBzaWduLCBhbmQgdGhlIGFtcGVyc2FuZAorICAgICAgICAgICAgKyAiJHBvc3RfbnVtPVtcXCVcXCZcdTAwYTJcdTA2NmFcdTIwMzBcdTIwMzFdOyIKKworICAgICAgICAgICAgLy8gbGluZSBzZXBhcmF0b3JzOiBjdXJyZW50bHkgTEYsIEZGLCBQUywgYW5kIExTCisgICAgICAgICAgICArICIkbHM9W1xuXHUwMDBjXHUyMDI4XHUyMDI5XTsiCisKKyAgICAgICAgICAgIC8vIHdoaXRlc3BhY2U6IGFsbCBzcGFjZSBzZXBhcmF0b3JzIGFuZCB0aGUgdGFiIGNoYXJhY3RlcgorICAgICAgICAgICAgKyAiJHdzPVtbOlpzOl1cdF07IgorCisgICAgICAgICAgICAvLyBhIHdvcmQgaXMgYSBzZXF1ZW5jZSBvZiBsZXR0ZXJzIHRoYXQgbWF5IGNvbnRhaW4gaW50ZXJuYWwKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uLCBhcyBsb25nIGFzIGl0IGJlZ2lucyBhbmQgZW5kcyB3aXRoIGEgbGV0dGVyIGFuZAorICAgICAgICAgICAgLy8gbmV2ZXIgY29udGFpbnMgdHdvIHB1bmN0dWF0aW9uIG1hcmtzIGluIGEgcm93CisgICAgICAgICAgICArICIkd29yZD0oJGxldCsoJG1pZF93b3JkJGxldCspKiRkYW5kYT8pOyIKKworICAgICAgICAgICAgLy8gYSBudW1iZXIgaXMgYSBzZXF1ZW5jZSBvZiBkaWdpdHMgdGhhdCBtYXkgY29udGFpbiBpbnRlcm5hbAorICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24sIGFzIGxvbmcgYXMgaXQgYmVnaW5zIGFuZCBlbmRzIHdpdGggYSBkaWdpdCBhbmQKKyAgICAgICAgICAgIC8vIG5ldmVyIGNvbnRhaW5zIHR3byBwdW5jdHVhdGlvbiBtYXJrcyBpbiBhIHJvdy4KKyAgICAgICAgICAgICsgIiRudW1iZXI9KCRkZ3QrKCRtaWRfbnVtJGRndCspKik7IgorCisgICAgICAgICAgICAvLyBicmVhayBhZnRlciBldmVyeSBjaGFyYWN0ZXIsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zCisgICAgICAgICAgICAvLyAodGhpcyB3aWxsIGNhdXNlIHB1bmN0dWF0aW9uIG1hcmtzIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQKKyAgICAgICAgICAgIC8vIHBhcnQgb2Ygd29yZHMgb3IgbnVtYmVycyB0byBiZSB0cmVhdGVkIGFzIHdvcmRzIHVudG8gdGhlbXNlbHZlcykKKyAgICAgICAgICAgICsgIi47IgorCisgICAgICAgICAgICAvLyBrZWVwIHRvZ2V0aGVyIGFueSBzZXF1ZW5jZSBvZiBjb250aWd1b3VzIHdvcmRzIGFuZCBudW1iZXJzCisgICAgICAgICAgICAvLyAoaW5jbHVkaW5nIGp1c3Qgb25lIG9mIGVpdGhlciksIHBsdXMgYW4gb3B0aW9uYWwgdHJhaWxpbmcKKyAgICAgICAgICAgIC8vIG51bWJlci1zdWZmaXggY2hhcmFjdGVyCisgICAgICAgICAgICArICIkd29yZD8oJG51bWJlciR3b3JkKSooJG51bWJlciRwb3N0X251bT8pPzsiCisKKyAgICAgICAgICAgIC8vIGtlZXAgdG9nZXRoZXIgYW5kIHNlcXVlbmNlIG9mIGNvbnRpZ3VvdXMgd29yZHMgYW5kIG51bWJlcnMKKyAgICAgICAgICAgIC8vIHRoYXQgc3RhcnRzIHdpdGggYSBudW1iZXItcHJlZml4IGNoYXJhY3RlciBhbmQgYSBudW1iZXIsCisgICAgICAgICAgICAvLyBhbmQgbWF5IGVuZCB3aXRoIGEgbnVtYmVyLXN1ZmZpeCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICsgIiRwcmVfbnVtKCRudW1iZXIkd29yZCkqKCRudW1iZXIkcG9zdF9udW0/KT87IgorCisgICAgICAgICAgICAvLyBrZWVwIHRvZ2V0aGVyIHJ1bnMgb2Ygd2hpdGVzcGFjZSAob3B0aW9uYWxseSB3aXRoIGEgc2luZ2xlIHRyYWlsaW5nCisgICAgICAgICAgICAvLyBsaW5lIHNlcGFyYXRvciBvciBDUkxGIHNlcXVlbmNlKQorICAgICAgICAgICAgKyAiJHdzKlxyPyRscz87IgorCisgICAgICAgICAgICAvLyBrZWVwIHRvZ2V0aGVyIHJ1bnMgb2YgS2F0YWthbmEKKyAgICAgICAgICAgICsgIiRrYXRhKjsiCisKKyAgICAgICAgICAgIC8vIGtlZXAgdG9nZXRoZXIgcnVucyBvZiBIaXJhZ2FuYQorICAgICAgICAgICAgKyAiJGhpcmEqOyIKKworICAgICAgICAgICAgLy8ga2VlcCB0b2dldGhlciBydW5zIG9mIEthbmppCisgICAgICAgICAgICArICIka2FuamkqOyJ9LAorCisgICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSBsaW5lLWJyZWFraW5nIHJ1bGVzIGFzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgLy8gcmVzb3VyY2UsIGV4Y2VwdCB0aGF0IHRoZSBMYXRpbiBsZXR0ZXJzLCBhcG9zdHJvcGhlLCBhbmQgaHlwaGVuIGFyZQorICAgICAgICAvLyBzcGVjaWZpZWQgYXMgZGljdGlvbmFyeSBjaGFyYWN0ZXJzCisgICAgICAgIHsgIkxpbmVCcmVha1J1bGVzIiwKKyAgICAgICAgICAgIC8vIGlnbm9yZSBub24tc3BhY2luZyBtYXJrcywgZW5jbG9zaW5nIG1hcmtzLCBhbmQgZm9ybWF0IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICIkX2lnbm9yZV89W1s6TW46XVs6TWU6XVs6Q2Y6XV07IgorCisgICAgICAgICAgICAvLyBsb3dlciBhbmQgdXBwZXIgY2FzZSBSb21hbiBsZXR0ZXJzLCBhcG9zdHJvcGh5IGFuZCBkYXNoCisgICAgICAgICAgICAvLyBhcmUgaW4gdGhlIEVuZ2xpc2ggZGljdGlvbmFyeQorICAgICAgICAgICAgKyAiJF9kaWN0aW9uYXJ5Xz1bYS16QS1aXFwnXFwtXTsiCisKKyAgICAgICAgICAgIC8vIEhpbmRpIHBocmFzZSBzZXBhcmF0b3JzCisgICAgICAgICAgICArICIkZGFuZGE9W1x1MDk2NFx1MDk2NV07IgorCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgYWx3YXlzIGNhdXNlIGEgYnJlYWs6IEVUWCwgdGFiLCBMRiwgRkYsIExTLCBhbmQgUFMKKyAgICAgICAgICAgICsgIiRicmVhaz1bXHUwMDAzXHRcblxmXHUyMDI4XHUyMDI5XTsiCisKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgdGhhdCBhbHdheXMgcHJldmVudCBhIGJyZWFrOiB0aGUgbm9uLWJyZWFraW5nIHNwYWNlCisgICAgICAgICAgICAvLyBhbmQgc2ltaWxhciBjaGFyYWN0ZXJzCisgICAgICAgICAgICArICIkbmJzcD1bXHUwMGEwXHUyMDA3XHUyMDExXHVmZWZmXTsiCisKKyAgICAgICAgICAgIC8vIHdoaXRlc3BhY2U6IHNwYWNlIHNlcGFyYXRvcnMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycywgZXhjZXB0IGZvcgorICAgICAgICAgICAgLy8gQ1IgYW5kIHRoZSBvdGhlciBjaGFyYWN0ZXJzIG1lbnRpb25lZCBhYm92ZQorICAgICAgICAgICAgKyAiJHNwYWNlPVtbWzpaczpdWzpDYzpdXS1bJG5ic3AkYnJlYWtccl1dOyIKKworICAgICAgICAgICAgLy8gZGFzaGVzOiBkYXNoIHB1bmN0dWF0aW9uIGFuZCB0aGUgZGlzY3JldGlvbmFyeSBoeXBoZW4sIGV4Y2VwdCBmb3IKKyAgICAgICAgICAgIC8vIG5vbi1icmVha2luZyBoeXBoZW5zCisgICAgICAgICAgICArICIkZGFzaD1bW1s6UGQ6XVx1MDBhZF0tWyRuYnNwXV07IgorCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgc3RpY2sgdG8gYSB3b3JkIGlmIHRoZXkgcHJlY2VkZSBpdDogY3VycmVuY3kgc3ltYm9scworICAgICAgICAgICAgLy8gKGV4Y2VwdCB0aGUgY2VudHMgc2lnbikgYW5kIHN0YXJ0aW5nIHB1bmN0dWF0aW9uCisgICAgICAgICAgICArICIkcHJlX3dvcmQ9W1tbOlNjOl0tW1x1MDBhMl1dWzpQczpdXFxcIlxcXCddOyIKKworICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB0aGF0IHN0aWNrIHRvIGEgd29yZCBpZiB0aGV5IGZvbGxvdyBpdDogZW5kaW5nIHB1bmN0dWF0aW9uLAorICAgICAgICAgICAgLy8gb3RoZXIgcHVuY3R1YXRpb24gdGhhdCB1c3VhbGx5IG9jY3VycyBhdCB0aGUgZW5kIG9mIGEgc2VudGVuY2UsCisgICAgICAgICAgICAvLyBzbWFsbCBLYW5hIGNoYXJhY3RlcnMsIHNvbWUgQ0pLIGRpYWNyaXRpY3MsIGV0Yy4KKyAgICAgICAgICAgICsgIiRwb3N0X3dvcmQ9W1s6UGU6XVxcIVxcXCJcXFwnXFwlXFwuXFwsXFw6XFw7XFw/XHUwMGEyXHUwMGIwXHUwNjZhXHUyMDMwLVx1MjAzNCIKKyAgICAgICAgICAgICAgICAgICAgKyAiXHUyMTAzXHUyMTA1XHUyMTA5XHUzMDAxXHUzMDAyXHUzMDA1XHUzMDQxXHUzMDQzXHUzMDQ1XHUzMDQ3XHUzMDQ5XHUzMDYzIgorICAgICAgICAgICAgICAgICAgICArICJcdTMwODNcdTMwODVcdTMwODdcdTMwOGVcdTMwOTktXHUzMDllXHUzMGExXHUzMGEzXHUzMGE1XHUzMGE3XHUzMGE5IgorICAgICAgICAgICAgICAgICAgICArICJcdTMwYzNcdTMwZTNcdTMwZTVcdTMwZTdcdTMwZWVcdTMwZjVcdTMwZjZcdTMwZmMtXHUzMGZlXHVmZjAxXHVmZjBjIgorICAgICAgICAgICAgICAgICAgICArICJcdWZmMGVcdWZmMWZdOyIKKworICAgICAgICAgICAgLy8gS2Fuamk6IGFjdHVhbGx5IGluY2x1ZGVzIGJvdGggS2FuamkgYW5kIEthbmEsIGV4Y2VwdCBmb3Igc21hbGwgS2FuYSBhbmQKKyAgICAgICAgICAgIC8vIENKSyBkaWFjcml0aWNzCisgICAgICAgICAgICArICIka2Fuamk9W1tcdTRlMDAtXHU5ZmE1XHVmOTAwLVx1ZmEyZFx1MzA0MS1cdTMwOTRcdTMwYTEtXHUzMGZhXS1bJHBvc3Rfd29yZCRfaWdub3JlX11dOyIKKworICAgICAgICAgICAgLy8gZGlnaXRzCisgICAgICAgICAgICArICIkZGlnaXQ9W1s6TmQ6XVs6Tm86XV07IgorCisgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyOiBwZXJpb2RzIGFuZCBjb21tYXMKKyAgICAgICAgICAgICsgIiRtaWRfbnVtPVtcXC5cXCxdOyIKKworICAgICAgICAgICAgLy8gZXZlcnl0aGluZyBub3QgbWVudGlvbmVkIGFib3ZlLCBwbHVzIHRoZSBxdW90ZSBtYXJrcyAod2hpY2ggYXJlIGJvdGgKKyAgICAgICAgICAgIC8vIDxwcmUtd29yZD4sIDxwb3N0LXdvcmQ+LCBhbmQgPGNoYXI+KQorICAgICAgICAgICAgKyAiJGNoYXI9W14kYnJlYWskc3BhY2UkZGFzaCRrYW5qaSRuYnNwJF9pZ25vcmVfJHByZV93b3JkJHBvc3Rfd29yZCRtaWRfbnVtJGRhbmRhXHJcXFwiXFxcJ107IgorCisgICAgICAgICAgICAvLyBhICJudW1iZXIiIGlzIGEgcnVuIG9mIHByZWZpeCBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMsIGZvbGxvd2VkIGJ5IG9uZSBvcgorICAgICAgICAgICAgLy8gbW9yZSBkaWdpdHMgd2l0aCBpc29sYXRlZCBudW1iZXItcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbnRlcnNwZXJzZWQKKyAgICAgICAgICAgICsgIiRudW1iZXI9KFskcHJlX3dvcmQkZGFzaF0qJGRpZ2l0KygkbWlkX251bSRkaWdpdCspKik7IgorCisgICAgICAgICAgICAvLyB0aGUgYmFzaWMgY29yZSBvZiBhIHdvcmQgY2FuIGJlIGVpdGhlciBhICJudW1iZXIiIGFzIGRlZmluZWQgYWJvdmUsIGEgc2luZ2xlCisgICAgICAgICAgICAvLyAiS2FuamkiIGNoYXJhY3Rlciwgb3IgYSBydW4gb2YgYW55IG51bWJlciBvZiBub3QtZXhwbGljaXRseS1tZW50aW9uZWQKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgKHRoaXMgaW5jbHVkZXMgTGF0aW4gbGV0dGVycykKKyAgICAgICAgICAgICsgIiR3b3JkX2NvcmU9KFskcHJlX3dvcmQkY2hhcl0qfCRrYW5qaXwkbnVtYmVyKTsiCisKKyAgICAgICAgICAgIC8vIGEgd29yZCBtYXkgZW5kIHdpdGggYW4gb3B0aW9uYWwgc3VmZml4IHRoYXQgYmUgZWl0aGVyIGEgcnVuIG9mIG9uZSBvcgorICAgICAgICAgICAgLy8gbW9yZSBkYXNoZXMgb3IgYSBydW4gb2Ygd29yZC1zdWZmaXggY2hhcmFjdGVycywgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwKKyAgICAgICAgICAgIC8vIHJ1biBvZiB3aGl0ZXNwYWNlCisgICAgICAgICAgICArICIkd29yZF9zdWZmaXg9KCgkZGFzaCt8JHBvc3Rfd29yZCopJHNwYWNlKik7IgorCisgICAgICAgICAgICAvLyBhIHdvcmQsIHRodXMsIGlzIGFuIG9wdGlvbmFsIHJ1biBvZiB3b3JkLXByZWZpeCBjaGFyYWN0ZXJzLCBmb2xsb3dlZCBieQorICAgICAgICAgICAgLy8gYSB3b3JkIGNvcmUgYW5kIGEgd29yZCBzdWZmaXggKHRoZSBzeW50YXggb2YgPHdvcmQtY29yZT4gYW5kIDx3b3JkLXN1ZmZpeD4KKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IGFsbG93cyBlaXRoZXIgb2YgdGhlbSB0byBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLCBwdXR0aW5nIGEgYnJlYWsKKyAgICAgICAgICAgIC8vIGJldHdlZW4gdGhpbmdzIGxpa2UgIikoIiBvciAiYWFhKGFhYSIKKyAgICAgICAgICAgICsgIiR3b3JkPSgkcHJlX3dvcmQqJHdvcmRfY29yZSR3b3JkX3N1ZmZpeCk7IgorCisgICAgICAgICAgICAvLyBmaW5hbGx5LCB0aGUgcnVsZSB0aGF0IGRvZXMgdGhlIHdvcms6IEtlZXAgdG9nZXRoZXIgYW55IHJ1biBvZiB3b3JkcyB0aGF0CisgICAgICAgICAgICAvLyBhcmUgam9pbmVkIGJ5IHJ1bnMgb2Ygb25lIG9mIG1vcmUgbm9uLXNwYWNpbmcgbWFyay4gIEFsc28ga2VlcCBhIHRyYWlsaW5nCisgICAgICAgICAgICAvLyBsaW5lLWJyZWFrIGNoYXJhY3RlciBvciBDUkxGIGNvbWJpbmF0aW9uIHdpdGggdGhlIHdvcmQuICAobGluZSBzZXBhcmF0b3JzCisgICAgICAgICAgICAvLyAid2luIiBvdmVyIG5ic3AncykKKyAgICAgICAgICAgICsgIiR3b3JkKCRuYnNwKyR3b3JkKSpccj8kYnJlYWs/OyIgfSwKKworICAgICAgICAvLyB0aGVzZSB0d28gcmVzb3VyY2VzIHNwZWNpZnkgdGhlIHBhdGhuYW1lcyBvZiB0aGUgZGljdGlvbmFyeSBmaWxlcyB0bworICAgICAgICAvLyB1c2UgZm9yIHdvcmQgYnJlYWtpbmcgYW5kIGxpbmUgYnJlYWtpbmcuICBCb3RoIGN1cnJlbnRseSByZWZlciB0bworICAgICAgICAvLyBhIGZpbGUgY2FsbGVkIGVuZ2xpc2guZGljdCBwbGFjZWQgaW4gY29tLmlibS5pY3UuaW1wbC5kYXRhCisgICAgICAgIC8vIHNvbWV3aGVyZSBpbiB0aGUgY2xhc3MgcGF0aC4gIEl0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdAorICAgICAgICAvLyBlbmdsaXNoLmRpY3Qgd2FzIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seSwgYW5kIGRvZXNuJ3QKKyAgICAgICAgLy8gY29tZSBhbnl3aGVyZSBjbG9zZSB0byBiZWluZyBhbiBleGhhdXN0aXZlIGRpY3Rpb25hcnkgb2YgRW5nbGlzaAorICAgICAgICAvLyB3b3JkcyAoYmFzaWNhbGx5LCBpdCBjb250YWlucyBhbGwgdGhlIHdvcmRzIGluIHRoZSBEZWNsYXJhdGlvbiBvZgorICAgICAgICAvLyBJbmRlcGVuZGVuY2UsIGFuZCB0aGUgUmV2aXNlZCBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBib29rIG9mIEdlbmVzaXMsCisgICAgICAgIC8vIHBsdXMgYSBmZXcgb3RoZXIgd29yZHMgdGhyb3duIGluIHRvIHNob3cgbW9yZSBpbnRlcmVzdGluZyBjYXNlcykuCisgICAgICAgIC8vIHsgIldvcmRCcmVha0RpY3Rpb25hcnkiLCAiY29tXFxpYm1cXHRleHRcXHJlc291cmNlc1xcZW5nbGlzaC5kaWN0IiB9LAorICAgICAgICAvLyB7ICJMaW5lQnJlYWtEaWN0aW9uYXJ5IiwgImNvbVxcaWJtXFx0ZXh0XFxyZXNvdXJjZXNcXGVuZ2xpc2guZGljdCIgfQorICAgICAgICB7ICJXb3JkQnJlYWtEaWN0aW9uYXJ5IiwgdXJsIH0sCisgICAgICAgIHsgIkxpbmVCcmVha0RpY3Rpb25hcnkiLCB1cmwgfQorICAgIH07Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcmJiaS9CcmVha0l0ZXJhdG9yVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvQnJlYWtJdGVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NTY4NGFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvQnJlYWtJdGVyYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDE0MjMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9yYmJpL0JyZWFrSXRlcmF0b3JUZXN0LmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMS8yMiAwMDoyNDozMSAkCisgKiAkUmV2aXNpb246IDEuMTAgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnJiYmk7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQnJlYWtJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS5pby4qOworCitwdWJsaWMgY2xhc3MgQnJlYWtJdGVyYXRvclRlc3QgZXh0ZW5kcyBUZXN0Rm13aworeworICAgIHByaXZhdGUgQnJlYWtJdGVyYXRvciBjaGFyYWN0ZXJCcmVhazsKKyAgICBwcml2YXRlIEJyZWFrSXRlcmF0b3Igd29yZEJyZWFrOworICAgIHByaXZhdGUgQnJlYWtJdGVyYXRvciBsaW5lQnJlYWs7CisgICAgcHJpdmF0ZSBCcmVha0l0ZXJhdG9yIHNlbnRlbmNlQnJlYWs7CisgICAgcHJpdmF0ZSBCcmVha0l0ZXJhdG9yIHRpdGxlQnJlYWs7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEJyZWFrSXRlcmF0b3JUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHB1YmxpYyBCcmVha0l0ZXJhdG9yVGVzdCgpCisgICAgeworICAgICAgICBjaGFyYWN0ZXJCcmVhayA9IEJyZWFrSXRlcmF0b3IuZ2V0Q2hhcmFjdGVySW5zdGFuY2UoKTsKKyAgICAgICAgd29yZEJyZWFrID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoKTsKKyAgICAgICAgbGluZUJyZWFrID0gQnJlYWtJdGVyYXRvci5nZXRMaW5lSW5zdGFuY2UoKTsKKyAgICAgICAgLy9sb2dsbigiQ3JlYXRpbmcgc2VudGVuY2UgaXRlcmF0b3IuLi4iKTsKKyAgICAgICAgc2VudGVuY2VCcmVhayA9IEJyZWFrSXRlcmF0b3IuZ2V0U2VudGVuY2VJbnN0YW5jZSgpOworICAgICAgICAvL2xvZ2xuKCJGaW5pc2hlZCBjcmVhdGluZyBzZW50ZW5jZSBpdGVyYXRvci4uLiIpOworICAgICAgICB0aXRsZUJyZWFrID0gQnJlYWtJdGVyYXRvci5nZXRUaXRsZUluc3RhbmNlKCk7CisgICAgfQorCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gZ2VuZXJhbCB0ZXN0IHN1YnJvdXRpbmVzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBwcml2YXRlIHZvaWQgZ2VuZXJhbEl0ZXJhdG9yVGVzdChCcmVha0l0ZXJhdG9yIGJpLCBWZWN0b3IgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRSZXN1bHQuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIHRleHQgPSAoU3RyaW5nKWV4cGVjdGVkUmVzdWx0LmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQodGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgdGV4dCA9IGJ1ZmZlci50b1N0cmluZygpOworCisgICAgICAgIGJpLnNldFRleHQodGV4dCk7CisKKyAgICAgICAgVmVjdG9yIG5leHRSZXN1bHRzID0gX3Rlc3RGaXJzdEFuZE5leHQoYmksIHRleHQpOworICAgICAgICBWZWN0b3IgcHJldmlvdXNSZXN1bHRzID0gX3Rlc3RMYXN0QW5kUHJldmlvdXMoYmksIHRleHQpOworCisgICAgICAgIGxvZ2xuKCJjb21wYXJpbmcgZm9yd2FyZCBhbmQgYmFja3dhcmQuLi4iKTsKKyAgICAgICAgaW50IGVycnMgPSBnZXRFcnJvckNvdW50KCk7CisgICAgICAgIGNvbXBhcmVGcmFnbWVudExpc3RzKCJmb3J3YXJkIGl0ZXJhdGlvbiIsICJiYWNrd2FyZCBpdGVyYXRpb24iLCBuZXh0UmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUmVzdWx0cyk7CisgICAgICAgIGlmIChnZXRFcnJvckNvdW50KCkgPT0gZXJycykgeworICAgICAgICAgICAgbG9nbG4oImNvbXBhcmluZyBleHBlY3RlZCBhbmQgYWN0dWFsLi4uIik7CisgICAgICAgICAgICBjb21wYXJlRnJhZ21lbnRMaXN0cygiZXhwZWN0ZWQgcmVzdWx0IiwgImFjdHVhbCByZXN1bHQiLCBleHBlY3RlZFJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVzdWx0cyk7CisgICAgICAgIH0KKworICAgICAgICBpbnRbXSBib3VuZGFyaWVzID0gbmV3IGludFtleHBlY3RlZFJlc3VsdC5zaXplKCkgKyAzXTsKKyAgICAgICAgYm91bmRhcmllc1swXSA9IEJyZWFrSXRlcmF0b3IuRE9ORTsKKyAgICAgICAgYm91bmRhcmllc1sxXSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRSZXN1bHQuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBib3VuZGFyaWVzW2kgKyAyXSA9IGJvdW5kYXJpZXNbaSArIDFdICsgKChTdHJpbmcpZXhwZWN0ZWRSZXN1bHQuZWxlbWVudEF0KGkpKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgoKTsKKyAgICAgICAgYm91bmRhcmllc1tib3VuZGFyaWVzLmxlbmd0aCAtIDFdID0gQnJlYWtJdGVyYXRvci5ET05FOworCisgICAgICAgIF90ZXN0Rm9sbG93aW5nKGJpLCB0ZXh0LCBib3VuZGFyaWVzKTsKKyAgICAgICAgX3Rlc3RQcmVjZWRpbmcoYmksIHRleHQsIGJvdW5kYXJpZXMpOworICAgICAgICBfdGVzdElzQm91bmRhcnkoYmksIHRleHQsIGJvdW5kYXJpZXMpOworCisgICAgICAgIGRvTXVsdGlwbGVTZWxlY3Rpb25UZXN0KGJpLCB0ZXh0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIFZlY3RvciBfdGVzdEZpcnN0QW5kTmV4dChCcmVha0l0ZXJhdG9yIGJpLCBTdHJpbmcgdGV4dCkgeworICAgICAgICBpbnQgcCA9IGJpLmZpcnN0KCk7CisgICAgICAgIGludCBsYXN0UCA9IHA7CisgICAgICAgIFZlY3RvciByZXN1bHQgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgaWYgKHAgIT0gMCkKKyAgICAgICAgICAgIGVycmxuKCJmaXJzdCgpIHJldHVybmVkICIgKyBwICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgd2hpbGUgKHAgIT0gQnJlYWtJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICBwID0gYmkubmV4dCgpOworICAgICAgICAgICAgaWYgKHAgIT0gQnJlYWtJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgICAgaWYgKHAgPD0gbGFzdFApCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJuZXh0KCkgZmFpbGVkIHRvIG1vdmUgZm9yd2FyZDogbmV4dCgpIG9uIHBvc2l0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbGFzdFAgKyAiIHlpZWxkZWQgIiArIHApOworCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVsZW1lbnQodGV4dC5zdWJzdHJpbmcobGFzdFAsIHApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChsYXN0UCAhPSB0ZXh0Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBlcnJsbigibmV4dCgpIHJldHVybmVkIERPTkUgcHJlbWF0dXJlbHk6IG9mZnNldCB3YXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsYXN0UCArICIgaW5zdGVhZCBvZiAiICsgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0UCA9IHA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwcml2YXRlIFZlY3RvciBfdGVzdExhc3RBbmRQcmV2aW91cyhCcmVha0l0ZXJhdG9yIGJpLCBTdHJpbmcgdGV4dCkgeworICAgICAgICBpbnQgcCA9IGJpLmxhc3QoKTsKKyAgICAgICAgaW50IGxhc3RQID0gcDsKKyAgICAgICAgVmVjdG9yIHJlc3VsdCA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICBpZiAocCAhPSB0ZXh0Lmxlbmd0aCgpKQorICAgICAgICAgICAgZXJybG4oImxhc3QoKSByZXR1cm5lZCAiICsgcCArICIgaW5zdGVhZCBvZiAiICsgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgIHdoaWxlIChwICE9IEJyZWFrSXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgcCA9IGJpLnByZXZpb3VzKCk7CisgICAgICAgICAgICBpZiAocCAhPSBCcmVha0l0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgICAgICBpZiAocCA+PSBsYXN0UCkKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oInByZXZpb3VzKCkgZmFpbGVkIHRvIG1vdmUgYmFja3dhcmQ6IHByZXZpb3VzKCkgb24gcG9zaXRpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsYXN0UCArICIgeWllbGRlZCAiICsgcCk7CisKKyAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0RWxlbWVudEF0KHRleHQuc3Vic3RyaW5nKHAsIGxhc3RQKSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFAgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oInByZXZpb3VzKCkgcmV0dXJuZWQgRE9ORSBwcmVtYXR1cmVseTogb2Zmc2V0IHdhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxhc3RQICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3RQID0gcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjb21wYXJlRnJhZ21lbnRMaXN0cyhTdHJpbmcgZjFOYW1lLCBTdHJpbmcgZjJOYW1lLCBWZWN0b3IgZjEsIFZlY3RvciBmMikgeworICAgICAgICBpbnQgcDEgPSAwOworICAgICAgICBpbnQgcDIgPSAwOworICAgICAgICBTdHJpbmcgczE7CisgICAgICAgIFN0cmluZyBzMjsKKyAgICAgICAgaW50IHQxID0gMDsKKyAgICAgICAgaW50IHQyID0gMDsKKworICAgICAgICB3aGlsZSAocDEgPCBmMS5zaXplKCkgJiYgcDIgPCBmMi5zaXplKCkpIHsKKyAgICAgICAgICAgIHMxID0gKFN0cmluZylmMS5lbGVtZW50QXQocDEpOworICAgICAgICAgICAgczIgPSAoU3RyaW5nKWYyLmVsZW1lbnRBdChwMik7CisgICAgICAgICAgICB0MSArPSBzMS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHQyICs9IHMyLmxlbmd0aCgpOworCisgICAgICAgICAgICBpZiAoczEuZXF1YWxzKHMyKSkgeworICAgICAgICAgICAgICAgIGRlYnVnTG9nbG4oIiAgID4iICsgczEgKyAiPCIpOworICAgICAgICAgICAgICAgICsrcDE7CisgICAgICAgICAgICAgICAgKytwMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCB0ZW1wVDEgPSB0MTsKKyAgICAgICAgICAgICAgICBpbnQgdGVtcFQyID0gdDI7CisgICAgICAgICAgICAgICAgaW50IHRlbXBQMSA9IHAxOworICAgICAgICAgICAgICAgIGludCB0ZW1wUDIgPSBwMjsKKworICAgICAgICAgICAgICAgIHdoaWxlICh0ZW1wVDEgIT0gdGVtcFQyICYmIHRlbXBQMSA8IGYxLnNpemUoKSAmJiB0ZW1wUDIgPCBmMi5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRlbXBUMSA8IHRlbXBUMiAmJiB0ZW1wUDEgPCBmMS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUMSArPSAoKFN0cmluZylmMS5lbGVtZW50QXQodGVtcFAxKSkubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICArK3RlbXBQMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGVtcFQyIDwgdGVtcFQxICYmIHRlbXBQMiA8IGYyLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFQyICs9ICgoU3RyaW5nKWYyLmVsZW1lbnRBdCh0ZW1wUDIpKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrdGVtcFAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ2xuKCIqKiogIiArIGYxTmFtZSArICIgaGFzOiIpOworICAgICAgICAgICAgICAgIHdoaWxlIChwMSA8PSB0ZW1wUDEgJiYgcDEgPCBmMS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgczEgPSAoU3RyaW5nKWYxLmVsZW1lbnRBdChwMSk7CisgICAgICAgICAgICAgICAgICAgIHQxICs9IHMxLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBkZWJ1Z0xvZ2xuKCIgKioqID4iICsgczEgKyAiPCIpOworICAgICAgICAgICAgICAgICAgICArK3AxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2dsbigiKioqKiogIiArIGYyTmFtZSArICIgaGFzOiIpOworICAgICAgICAgICAgICAgIHdoaWxlIChwMiA8PSB0ZW1wUDIgJiYgcDIgPCBmMi5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgczIgPSAoU3RyaW5nKWYyLmVsZW1lbnRBdChwMik7CisgICAgICAgICAgICAgICAgICAgIHQyICs9IHMyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBkZWJ1Z0xvZ2xuKCIgKioqKiogPiIgKyBzMiArICI8Iik7CisgICAgICAgICAgICAgICAgICAgICsrcDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVycmxuKCJEaXNjcmVwYW5jeSBiZXR3ZWVuICIgKyBmMU5hbWUgKyAiIGFuZCAiICsgZjJOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBfdGVzdEZvbGxvd2luZyhCcmVha0l0ZXJhdG9yIGJpLCBTdHJpbmcgdGV4dCwgaW50W10gYm91bmRhcmllcykgeworICAgICAgICBsb2dsbigidGVzdEZvbGxvd2luZygpOiIpOworICAgICAgICBpbnQgcCA9IDI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHRleHQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPT0gYm91bmRhcmllc1twXSkKKyAgICAgICAgICAgICAgICArK3A7CisKKyAgICAgICAgICAgIGludCBiID0gYmkuZm9sbG93aW5nKGkpOworICAgICAgICAgICAgbG9nbG4oImJpLmZvbGxvd2luZygiICsgaSArICIpIC0+ICIgKyBiKTsKKyAgICAgICAgICAgIGlmIChiICE9IGJvdW5kYXJpZXNbcF0pCisgICAgICAgICAgICAgICAgZXJybG4oIldyb25nIHJlc3VsdCBmcm9tIGZvbGxvd2luZygpIGZvciAiICsgaSArICI6IGV4cGVjdGVkICIgKyBib3VuZGFyaWVzW3BdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgZ290ICIgKyBiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBfdGVzdFByZWNlZGluZyhCcmVha0l0ZXJhdG9yIGJpLCBTdHJpbmcgdGV4dCwgaW50W10gYm91bmRhcmllcykgeworICAgICAgICBsb2dsbigidGVzdFByZWNlZGluZygpOiIpOworICAgICAgICBpbnQgcCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHRleHQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgaW50IGIgPSBiaS5wcmVjZWRpbmcoaSk7CisgICAgICAgICAgICBsb2dsbigiYmkucHJlY2VkaW5nKCIgKyBpICsgIikgLT4gIiArIGIpOworICAgICAgICAgICAgaWYgKGIgIT0gYm91bmRhcmllc1twXSkKKyAgICAgICAgICAgICAgICBlcnJsbigiV3JvbmcgcmVzdWx0IGZyb20gcHJlY2VkaW5nKCkgZm9yICIgKyBpICsgIjogZXhwZWN0ZWQgIiArIGJvdW5kYXJpZXNbcF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBnb3QgIiArIGIpOworCisgICAgICAgICAgICBpZiAoaSA9PSBib3VuZGFyaWVzW3AgKyAxXSkKKyAgICAgICAgICAgICAgICArK3A7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgX3Rlc3RJc0JvdW5kYXJ5KEJyZWFrSXRlcmF0b3IgYmksIFN0cmluZyB0ZXh0LCBpbnRbXSBib3VuZGFyaWVzKSB7CisgICAgICAgIGxvZ2xuKCJ0ZXN0SXNCb3VuZGFyeSgpOiIpOworICAgICAgICBpbnQgcCA9IDE7CisgICAgICAgIGJvb2xlYW4gaXNCOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSB0ZXh0Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlzQiA9IGJpLmlzQm91bmRhcnkoaSk7CisgICAgICAgICAgICBsb2dsbigiYmkuaXNCb3VuZGFyeSgiICsgaSArICIpIC0+ICIgKyBpc0IpOworCisgICAgICAgICAgICBpZiAoaSA9PSBib3VuZGFyaWVzW3BdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0IpCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJXcm9uZyByZXN1bHQgZnJvbSBpc0JvdW5kYXJ5KCkgZm9yICIgKyBpICsgIjogZXhwZWN0ZWQgdHJ1ZSwgZ290IGZhbHNlIik7CisgICAgICAgICAgICAgICAgKytwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlzQikKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIldyb25nIHJlc3VsdCBmcm9tIGlzQm91bmRhcnkoKSBmb3IgIiArIGkgKyAiOiBleHBlY3RlZCBmYWxzZSwgZ290IHRydWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkb011bHRpcGxlU2VsZWN0aW9uVGVzdChCcmVha0l0ZXJhdG9yIGl0ZXJhdG9yLCBTdHJpbmcgdGVzdFRleHQpCisgICAgeworICAgICAgICBsb2dsbigiTXVsdGlwbGUgc2VsZWN0aW9uIHRlc3QuLi4iKTsKKyAgICAgICAgQnJlYWtJdGVyYXRvciB0ZXN0SXRlcmF0b3IgPSAoQnJlYWtJdGVyYXRvcilpdGVyYXRvci5jbG9uZSgpOworICAgICAgICBpbnQgb2Zmc2V0ID0gaXRlcmF0b3IuZmlyc3QoKTsKKyAgICAgICAgaW50IHRlc3RPZmZzZXQ7CisgICAgICAgIGludCBjb3VudCA9IDA7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgdGVzdE9mZnNldCA9IHRlc3RJdGVyYXRvci5maXJzdCgpOworICAgICAgICAgICAgdGVzdE9mZnNldCA9IHRlc3RJdGVyYXRvci5uZXh0KGNvdW50KTsKKyAgICAgICAgICAgIGxvZ2xuKCJuZXh0KCIgKyBjb3VudCArICIpIC0+ICIgKyB0ZXN0T2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gdGVzdE9mZnNldCkKKyAgICAgICAgICAgICAgICBlcnJsbigibmV4dChuKSBhbmQgbmV4dCgpIG5vdCByZXR1cm5pbmcgY29uc2lzdGVudCByZXN1bHRzOiBmb3Igc3RlcCAiICsgY291bnQgKyAiLCBuZXh0KG4pIHJldHVybmVkICIgKyB0ZXN0T2Zmc2V0ICsgIiBhbmQgbmV4dCgpIGhhZCAiICsgb2Zmc2V0KTsKKworICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBCcmVha0l0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIG9mZnNldCA9IGl0ZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAob2Zmc2V0ICE9IEJyZWFrSXRlcmF0b3IuRE9ORSk7CisKKyAgICAgICAgLy8gbm93IGRvIGl0IGJhY2t3YXJkcy4uLgorICAgICAgICBvZmZzZXQgPSBpdGVyYXRvci5sYXN0KCk7CisgICAgICAgIGNvdW50ID0gMDsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICB0ZXN0T2Zmc2V0ID0gdGVzdEl0ZXJhdG9yLmxhc3QoKTsKKyAgICAgICAgICAgIHRlc3RPZmZzZXQgPSB0ZXN0SXRlcmF0b3IubmV4dChjb3VudCk7CisgICAgICAgICAgICBsb2dsbigibmV4dCgiICsgY291bnQgKyAiKSAtPiAiICsgdGVzdE9mZnNldCk7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IHRlc3RPZmZzZXQpCisgICAgICAgICAgICAgICAgZXJybG4oIm5leHQobikgYW5kIG5leHQoKSBub3QgcmV0dXJuaW5nIGNvbnNpc3RlbnQgcmVzdWx0czogZm9yIHN0ZXAgIiArIGNvdW50ICsgIiwgbmV4dChuKSByZXR1cm5lZCAiICsgdGVzdE9mZnNldCArICIgYW5kIG5leHQoKSBoYWQgIiArIG9mZnNldCk7CisKKyAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gQnJlYWtJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBpdGVyYXRvci5wcmV2aW91cygpOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChvZmZzZXQgIT0gQnJlYWtJdGVyYXRvci5ET05FKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9CcmVha0ludmFyaWFudFRlc3QoQnJlYWtJdGVyYXRvciB0YiwgU3RyaW5nIHRlc3RDaGFycykKKyAgICB7CisgICAgICAgIFN0cmluZ0J1ZmZlciB3b3JrID0gbmV3IFN0cmluZ0J1ZmZlcigiYWFhIik7CisvLyAgICAgICAgaW50IGVycm9yQ291bnQgPSAwOworCisgICAgICAgIC8vIGEgYnJlYWsgc2hvdWxkIGFsd2F5cyBvY2N1ciBhZnRlciBDUiAodW5sZXNzIGZvbGxvd2VkIGJ5IExGKSwgTEYsIFBTLCBhbmQgTFMsCisgICAgICAgIC8vIHVubGVzcyB0aGV5J3JlIGZvbGxvd2VkIGJ5IGEgbm9uLXNwYWNpbmcgbWFyayBvciBhIGZvcm1hdCBjaGFyYWN0ZXIKKyAgICAgICAgU3RyaW5nIGJyZWFrcyA9ICJcclxuXHUyMDI5XHUyMDI4IjsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJyZWFrcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICB3b3JrLnNldENoYXJBdCgxLCBicmVha3MuY2hhckF0KGkpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdGVzdENoYXJzLmxlbmd0aCgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICB3b3JrLnNldENoYXJBdCgwLCB0ZXN0Q2hhcnMuY2hhckF0KGopKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHRlc3RDaGFycy5sZW5ndGgoKTsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IHRlc3RDaGFycy5jaGFyQXQoayk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYSBjciBpcyBmb2xsb3dlZCBieSBsZiwgcHMsIGxzIG9yIGV0eCwgZG9uJ3QgZG8gdGhlIGNoZWNrICh0aGF0J3MKKyAgICAgICAgICAgICAgICAgICAgLy8gbm90IHN1cHBvc2VkIHRvIHdvcmspCisgICAgICAgICAgICAgICAgICAgIGlmICh3b3JrLmNoYXJBdCgxKSA9PSAnXHInICYmIChjID09ICdcbicgfHwgYyA9PSAnXHUyMDI5JworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGMgPT0gJ1x1MjAyOCcgfHwgYyA9PSAnXHUwMDAzJykpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICB3b3JrLnNldENoYXJBdCgyLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgdGIuc2V0VGV4dCh3b3JrLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNlZW4yID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGwgPSB0Yi5maXJzdCgpOyBsICE9IEJyZWFrSXRlcmF0b3IuRE9ORTsgbCA9IHRiLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuMiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWVuMikgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIk5vIGJyZWFrIGJldHdlZW4gVSsiICsgSW50ZWdlci50b0hleFN0cmluZygoaW50KSh3b3JrLmNoYXJBdCgxKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYW5kIFUrIiArIEludGVnZXIudG9IZXhTdHJpbmcoKGludCkod29yay5jaGFyQXQoMikpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9PdGhlckludmFyaWFudFRlc3QoQnJlYWtJdGVyYXRvciB0YiwgU3RyaW5nIHRlc3RDaGFycykKKyAgICB7CisgICAgICAgIFN0cmluZ0J1ZmZlciB3b3JrID0gbmV3IFN0cmluZ0J1ZmZlcigiYVxyXG5hIik7CisgICAgICAgIGludCBlcnJvckNvdW50ID0gMDsKKworICAgICAgICAvLyBhIGJyZWFrIHNob3VsZCBuZXZlciBvY2N1ciBiZXR3ZWVuIENSIGFuZCBMRgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RDaGFycy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICB3b3JrLnNldENoYXJBdCgwLCB0ZXN0Q2hhcnMuY2hhckF0KGkpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdGVzdENoYXJzLmxlbmd0aCgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICB3b3JrLnNldENoYXJBdCgzLCB0ZXN0Q2hhcnMuY2hhckF0KGopKTsKKyAgICAgICAgICAgICAgICB0Yi5zZXRUZXh0KHdvcmsudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IHRiLmZpcnN0KCk7IGsgIT0gQnJlYWtJdGVyYXRvci5ET05FOyBrID0gdGIubmV4dCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoayA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiQnJlYWsgYmV0d2VlbiBDUiBhbmQgTEYgaW4gc3RyaW5nIFUrIiArIEludGVnZXIudG9IZXhTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHdvcmsuY2hhckF0KDApKSkgKyAiLCBVK2QgVSthIFUrIiArIEludGVnZXIudG9IZXhTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHdvcmsuY2hhckF0KDMpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ291bnQgPj0gNzUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBhIGJyZWFrIHNob3VsZCBuZXZlciBvY2N1ciBiZWZvcmUgYSBub24tc3BhY2luZyBtYXJrLCB1bmxlc3MgaXQncyBwcmVjZWRlZAorICAgICAgICAvLyBieSBhIGxpbmUgdGVybWluYXRvcgorICAgICAgICB3b3JrLnNldExlbmd0aCgwKTsKKyAgICAgICAgd29yay5hcHBlbmQoImFhYWEiKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0Q2hhcnMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgY2hhciBjID0gdGVzdENoYXJzLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1x1MjAyOScgfHwgYyA9PSAnXHUyMDI4JyB8fCBjID09ICdcdTAwMDMnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgd29yay5zZXRDaGFyQXQoMSwgYyk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHRlc3RDaGFycy5sZW5ndGgoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgYyA9IHRlc3RDaGFycy5jaGFyQXQoaik7CisgICAgICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5nZXRUeXBlKGMpICE9IENoYXJhY3Rlci5OT05fU1BBQ0lOR19NQVJLICYmIENoYXJhY3Rlci5nZXRUeXBlKGMpCisgICAgICAgICAgICAgICAgICAgICAgICAhPSBDaGFyYWN0ZXIuRU5DTE9TSU5HX01BUkspCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHdvcmsuc2V0Q2hhckF0KDIsIGMpOworICAgICAgICAgICAgICAgIHRiLnNldFRleHQod29yay50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gdGIuZmlyc3QoKTsgayAhPSBCcmVha0l0ZXJhdG9yLkRPTkU7IGsgPSB0Yi5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChrID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJCcmVhayBiZXR3ZWVuIFUrIiArIEludGVnZXIudG9IZXhTdHJpbmcoKGludCkod29yay5jaGFyQXQoMSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYW5kIFUrIiArIEludGVnZXIudG9IZXhTdHJpbmcoKGludCkod29yay5jaGFyQXQoMikpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDb3VudCA+PSA3NSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGRlYnVnTG9nbG4oU3RyaW5nIHMpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHplcm9zID0gIjAwMDAiOworICAgICAgICBTdHJpbmcgdGVtcDsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHMuY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGMgPj0gJyAnICYmIGMgPCAnXHUwMDdmJykKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGMpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgiXFx1Iik7CisgICAgICAgICAgICAgICAgdGVtcCA9IEludGVnZXIudG9IZXhTdHJpbmcoKGludCljKTsKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKHplcm9zLnN1YnN0cmluZygwLCA0IC0gdGVtcC5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQodGVtcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4ob3V0LnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIHRlc3RzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0V29yZEJyZWFrKCkgeworICAgICAgICBWZWN0b3Igd29yZFNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiMTIsMzQiKTsKKworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MDBBMiIpOyAvL2NlbnQgc2lnbgorICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTAwQTMiKTsgLy9wb3VuZCBzaWduCisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MDBBNCIpOyAvL2N1cnJlbmN5IHNpZ24KKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwMEE1Iik7IC8veWVuIHNpZ24KKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiYWxwaGEtYmV0YS1nYW1tYSIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIuIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiQmFkZ2VzIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIj8iKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJCQURHRVMiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiISIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCI/Iik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiEiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJXZSIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImRvbid0Iik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgibmVlZCIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIm5vIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiU1RJTktJTkciKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJCQURHRVMiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiISIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIhIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiEiKTsKKworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIwMTIuNTY2LDUiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIxMjMuMzQzNCw5MDAiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIxMDAwLDIzMyw0NTYuMDAwIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiMSwyMy4zMjIlIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiMTIzLjEyMjIiKTsKKworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MDAyNDEyMywwMDAuMjAiKTsKKworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIjE3OS4wMVx1MDAyNSIpOworCisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkhlbGxvIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiwiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJob3ciKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJhcmUiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJ5b3UiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJYIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJOb3ciKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHIiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiaXMiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXG4iKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgidGhlIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlxyXG4iKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgidGltZSIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcbiIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcciIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJmb3IiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHIiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHIiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiYWxsIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHdvcmRCcmVhaywgd29yZFNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBidWcgNDA5Nzc3OQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RCdWc0MDk3Nzc5KCkgeworICAgICAgICBWZWN0b3Igd29yZFNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiYWFcdTAzMDBhIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHdvcmRCcmVhaywgd29yZFNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBidWcgNDA5ODQ2NworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RCdWc0MDk4NDY3V29yZHMoKSB7CisgICAgICAgIFZlY3RvciB3b3JkU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBzdHJpbmcgb2YgS29yZWFuIGNoYXJhY3RlcnMgKEkgZm91bmQgaXQgaW4gdGhlIFllbGxvdyBQYWdlcworICAgICAgICAvLyBhZCBmb3IgdGhlIEtvcmVhbiBQcmVzYnl0ZXJpYW4gQ2h1cmNoIG9mIFNhbiBGcmFuY2lzY28sIGFuZCBJIGhvcGUgSSB0cmFuc2NyaWJlZAorICAgICAgICAvLyBpdCBjb3JyZWN0bHkpLCBmaXJzdCBhcyBwcmVjb21wb3NlZCBzeWxsYWJsZXMsIGFuZCB0aGVuIGFzIGNvbmpvaW5pbmcgamFtby4KKyAgICAgICAgLy8gQm90aCBzZXF1ZW5jZXMgc2hvdWxkIGJlIHNlbWFudGljYWxseSBpZGVudGljYWwgYW5kIGJyZWFrIHRoZSBzYW1lIHdheS4KKyAgICAgICAgLy8gcHJlY29tcG9zZWQgc3lsbGFibGVzLi4uCisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1YzBjMVx1ZDU2ZCIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1ZDU1Y1x1Yzc3OCIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1YzVmMFx1ZDU2OSIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1YzdhNVx1Yjg1Y1x1YWQ1MFx1ZDY4YyIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIC8vIGNvbmpvaW5pbmcgamFtby4uLgorICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMDlcdTExNjFcdTExYmNcdTExMTJcdTExNjFcdTExYmMiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMTJcdTExNjFcdTExYWJcdTExMGJcdTExNzVcdTExYWIiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMGJcdTExNjdcdTExYWJcdTExMTJcdTExNjFcdTExYjgiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMGNcdTExNjFcdTExYmNcdTExMDVcdTExNjlcdTExMDBcdTExNmRcdTExMTJcdTExNmMiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3Qod29yZEJyZWFrLCB3b3JkU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MTE3NTU0CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQxMTc1NTRXb3JkcygpIHsKKyAgICAgICAgVmVjdG9yIHdvcmRTZWxlY3Rpb25EYXRhID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIC8vIHRoaXMgaXMgYSB0ZXN0IGZvciBidWcgIzQxMTc1NTQ6IHRoZSBpZGVvZ3JhcGhpYyBpdGVyYXRpb24gbWFyayAoVSszMDA1KSBzaG91bGQKKyAgICAgICAgLy8gY291bnQgYXMgYSBLYW5qaSBjaGFyYWN0ZXIgZm9yIHRoZSBwdXJwb3NlcyBvZiB3b3JkIGJyZWFraW5nCisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImFiYyIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTRlMDFcdTRlMDJcdTMwMDVcdTRlMDNcdTRlMDMiKTsKKyAgICAgICAgd29yZFNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiYWJjIik7CisKKyAgICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdCh3b3JkQnJlYWssIHdvcmRTZWxlY3Rpb25EYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2VudGVuY2VCcmVhaygpIHsKKyAgICAgICAgVmVjdG9yIHNlbnRlbmNlU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiVGhpcyBpcyBhIHNpbXBsZSBzYW1wbGUgc2VudGVuY2UuICIpOworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiKFRoaXMgaXMgaXQuKSAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlRoaXMgaXMgYSBzaW1wbGUgc2FtcGxlIHNlbnRlbmNlLiAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlwiVGhpcyBpc25cJ3QgaXQuXCIgIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJIaSEgIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJUaGlzIGlzIGEgc2ltcGxlIHNhbXBsZSBzZW50ZW5jZS4gIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJJdCBkb2VzIG5vdCBoYXZlIHRvIG1ha2UgYW55IHNlbnNlIGFzIHlvdSBjYW4gc2VlLiAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIk5lbCBtZXp6byBkZWwgY2FtbWluIGRpIG5vc3RyYSB2aXRhLCBtaSByaXRyb3ZhaSBpbiB1bmEgc2VsdmEgb3NjdXJhLiAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkNoZSBsYSBkcml0dGEgdmlhIGF2ZW8gc21hcnJpdGEuICIpOworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiSGUgc2FpZCwgdGhhdCBJIHNhaWQsIHRoYXQgeW91IHNhaWQhISAiKTsKKworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiRG9uJ3Qgcm9jayB0aGUgYm9hdC5cdTIwMjkiKTsKKworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiQmVjYXVzZSBJIGFtIHRoZSBkYWRkeSwgdGhhdCBpcyB3aHkuICIpOworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiTm90IG9uIG15IHRpbWUgKGVsIHRpbW8uKSEgIik7CisKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlNvIHdoYXQhIVx1MjAyOSIpOworCisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcIkJ1dCBub3csXCIgaGUgc2FpZCwgXCJJIGtub3chXCIgIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJIYXJyaXMgdGh1bWJlZCBkb3duIHNldmVyYWwsIGluY2x1ZGluZyBcIkF3YXkgV2UgR29cIiAod2hpY2ggYmVjYW1lIHRoZSBodWdlIHN1Y2Nlc3MgT2tsYWhvbWEhKS4gIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJPbmUgc3BlY2llcywgQi4gYW50aHJhY2lzLCBpcyBoaWdobHkgdmlydWxlbnQuXG4iKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIldvbGYgc2FpZCBhYm91dCBTb3VuZGVyOlwiQmVhdXRpZnVsbHkgdGhvdWdodC1vdXQgYW5kIGRpcmVjdGVkLlwiICIpOworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiSGF2ZSB5b3UgZXZlciBzYWlkLCBcIlRoaXMgaXMgd2hlcmUgXHRJIHNoYWxsIGxpdmVcIj8gIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJIZSBhbnN3ZXJlZCwgXCJZb3UgbWF5IG5vdCFcIiAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkFub3RoZXIgcG9wdWxhciBzYXlpbmcgaXM6IFwiSG93IGRvIHlvdSBkbz9cIi4gIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJZZXQgYW5vdGhlciBwb3B1bGFyIHNheWluZyBpczogXCdJXCdtIGZpbmUgdGhhbmtzLlwnICIpOworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiV2hhdCBpcyB0aGUgcHJvcGVyIHVzZSBvZiB0aGUgYWJicmV2aWF0aW9uIHBwLj8gIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJZZXMsIEkgYW0gZGVmaW5hdGVsbHkgMTJcIiB0YWxsISEiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHNlbnRlbmNlQnJlYWssIHNlbnRlbmNlU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MTEzODM1CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQxMTM4MzUoKSB7CisgICAgICAgIFZlY3RvciBzZW50ZW5jZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgLy8gdGVzdCBmb3IgYnVnICM0MTEzODM1OiBcbiBhbmQgXHIgY291bnQgYXMgc3BhY2VzLCBub3QgYXMgcGFyYWdyYXBoIGJyZWFrcworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiTm93XHJpc1xudGhlXHJcbnRpbWVcblxyZm9yXHJccmFsbFx1MjAyOSIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3Qoc2VudGVuY2VCcmVhaywgc2VudGVuY2VTZWxlY3Rpb25EYXRhKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAYnVnIDQxMTEzMzgKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0QnVnNDExMTMzOCgpIHsKKyAgICAgICAgVmVjdG9yIHNlbnRlbmNlU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICAvLyB0ZXN0IGZvciBidWcgIzQxMTEzMzg6IERvbid0IGJyZWFrIHNlbnRlbmNlcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiBDSksKKyAgICAgICAgLy8gYW5kIG90aGVyIGxldHRlcnMKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1NTQ4N1x1NjdmZlx1ZTU5MVx1NTAxN1x1NjFiM1x1NjBhMVx1OTUxMFx1ODE2NTpcIkpBVkFcdTgyMWMiCisgICAgICAgICAgICAgICAgKyAiXHU4MTY1XHU3ZmM4XHU1MWNlXHUzMDZkLFx1MjQ5NFx1NTZkOFx1NGVjMFx1NjBiMVx1ODU2MFx1NTFiYSIKKyAgICAgICAgICAgICAgICArICJcdTYxMWRcdTU3YjZcdTI1MTBcdTVkNDZcIi5cdTIwMjkiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1NTQ4N1x1NjdmZlx1ZTU5MVx1NTAxN1x1NjFiM1x1NjBhMVx1OTUxMFx1ODE2NVx1OWRlOCIKKyAgICAgICAgICAgICAgICArICJcdTk3ZTRKQVZBXHU4MjFjXHU4MTY1XHU3ZmM4XHU1MWNlXHUzMDZkXHVlMzBiXHUyNDk0XHU1NmQ4XHU0ZWMwIgorICAgICAgICAgICAgICAgICsgIlx1NjBiMVx1ODU2MFx1NTFiYVx1NjExZFx1NTdiNlx1MjUxMFx1NWQ0Nlx1OTdlNVx1Nzc1MVx1MjAyOSIpOworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHU1NDg3XHU2N2ZmXHVlNTkxXHU1MDE3XHU2MWIzXHU2MGExXHU5NTEwXHU4MTY1XHU5ZGU4XHU5N2U0IgorICAgICAgICAgICAgICAgICsgIlx1NjQ3MFx1ODc5MEpBVkFcdTgyMWNcdTgxNjVcdTdmYzhcdTUxY2VcdTMwNmRcdWUzMGJcdTI0OTRcdTU2ZDgiCisgICAgICAgICAgICAgICAgKyAiXHU0ZWMwXHU2MGIxXHU4NTYwXHU1MWJhXHU2MTFkXHU1N2I2XHUyNTEwXHU1ZDQ2XHU5N2U1XHU3NzUxXHUyMDI5Iik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJIZSBzYWlkLCBcIkkgY2FuIGdvIHRoZXJlLlwiXHUyMDI5Iik7CisKKyAgICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdChzZW50ZW5jZUJyZWFrLCBzZW50ZW5jZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBidWcgNDExNzU1NAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RCdWc0MTE3NTU0U2VudGVuY2VzKCkgeworICAgICAgICBWZWN0b3Igc2VudGVuY2VTZWxlY3Rpb25EYXRhID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIC8vIFRyZWF0IGZ1bGx3aWR0aCB2YXJpYW50cyBvZiAuIT8gdGhlIHNhbWUgYXMgdGhlaXIKKyAgICAgICAgLy8gbm9ybWFsIGNvdW50ZXJwYXJ0cworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiSSBrbm93IEknbSByaWdodFx1ZmYwZSAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlJpZ2h0XHVmZjFmICIpOworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiUmlnaHRcdWZmMDEgIik7CisKKyAgICAgICAgLy8gRG9uJ3QgYnJlYWsgc2VudGVuY2VzIGF0IGJvdW5kYXJ5IGJldHdlZW4gQ0pLIGFuZCBkaWdpdHMKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1NTQ4N1x1NjdmZlx1ZTU5MVx1NTAxN1x1NjFiM1x1NjBhMVx1OTUxMFx1ODE2NVx1OWRlOCIKKyAgICAgICAgICAgICAgICArICJcdTk3ZTQ4ODg4XHU4MjFjXHU4MTY1XHU3ZmM4XHU1MWNlXHUzMDZkXHVlMzBiXHUyNDk0XHU1NmQ4XHU0ZWMwIgorICAgICAgICAgICAgICAgICsgIlx1NjBiMVx1ODU2MFx1NTFiYVx1NjExZFx1NTdiNlx1MjUxMFx1NWQ0Nlx1OTdlNVx1Nzc1MVx1MjAyOSIpOworCisgICAgICAgIC8vIEJyZWFrIHNlbnRlbmNlIGJldHdlZW4gYSBzZW50ZW5jZSB0ZXJtaW5hdG9yIGFuZAorICAgICAgICAvLyBvcGVuaW5nIHB1bmN0dWF0aW9uCisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJubz8iKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIih5ZXMpIik7CisKKyAgICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdChzZW50ZW5jZUJyZWFrLCBzZW50ZW5jZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBidWcgNDE1ODM4MQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RCdWc0MTU4MzgxKCkgeworICAgICAgICBWZWN0b3Igc2VudGVuY2VTZWxlY3Rpb25EYXRhID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIC8vIERvbid0IGJyZWFrIHNlbnRlbmNlIGFmdGVyIHBlcmlvZCBpZiBpdCBpc24ndCBmb2xsb3dlZCBieSBhIHNwYWNlCisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJUZXN0IDxjb2RlPkZsYWdzLkZsYWc8L2NvZGU+IGNsYXNzLiAgIik7CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJBbm90aGVyIHRlc3QuXHUyMDI5Iik7CisKKyAgICAgICAgLy8gTm8gYnJlYWtzIHdoZW4gdGhlcmUgYXJlIG5vIHRlcm1pbmF0b3JzIGFyb3VuZAorICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiPFA+UHJvdmlkZXMgYSBzZXQgb2YgIgorICAgICAgICAgICAgICAgICsgIiZxdW90O2xpZ2h0d2VpZ2h0JnF1b3Q7IChhbGwtamF2YTxGT05UIFNJWkU9XCItMlwiPjxTVVA+VE0iCisgICAgICAgICAgICAgICAgKyAiPC9TVVA+PC9GT05UPiBsYW5ndWFnZSkgY29tcG9uZW50cyB0aGF0LCAiCisgICAgICAgICAgICAgICAgKyAidG8gdGhlIG1heGltdW0gZGVncmVlIHBvc3NpYmxlLCB3b3JrIHRoZSBzYW1lIG9uIGFsbCBwbGF0Zm9ybXMuICAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkFub3RoZXIgdGVzdC5cdTIwMjkiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHNlbnRlbmNlQnJlYWssIHNlbnRlbmNlU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MTQzMDcxCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQxNDMwNzEoKSB7CisgICAgICAgIFZlY3RvciBzZW50ZW5jZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHNlbnRlbmNlcyB0aGF0IGVuZCB3aXRoIGRpZ2l0cyB3b3JrIHJpZ2h0CisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJUb2RheSBpcyB0aGUgMjd0aCBvZiBNYXksIDE5OTguICAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlRvbW9ycm93IHdpbGwgYmUgMjggTWF5IDE5OTguICAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlRoZSBkYXkgYWZ0ZXIgd2lsbCBiZSB0aGUgMzB0aC5cdTIwMjkiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHNlbnRlbmNlQnJlYWssIHNlbnRlbmNlU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MTUyNDE2CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQxNTI0MTYoKSB7CisgICAgICAgIFZlY3RvciBzZW50ZW5jZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHNlbnRlbmNlcyBlbmRpbmcgd2l0aCBhIGNhcGl0YWwgbGV0dGVyIGFyZSB0cmVhdGVkIGNvcnJlY3RseQorICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiVGhlIHR5cGUgb2YgYWxsIHByaW1pdGl2ZSAiCisgICAgICAgICAgICAgICAgKyAiPGNvZGU+Ym9vbGVhbjwvY29kZT4gdmFsdWVzIGFjY2Vzc2VkIGluIHRoZSB0YXJnZXQgVk0uICAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkNhbGxzIHRvIHh4eCB3aWxsIHJldHVybiBhbiAiCisgICAgICAgICAgICAgICAgKyAiaW1wbGVtZW50b3Igb2YgdGhpcyBpbnRlcmZhY2UuXHUyMDI5Iik7CisKKyAgICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdChzZW50ZW5jZUJyZWFrLCBzZW50ZW5jZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBidWcgNDE1MjExNworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RCdWc0MTUyMTE3KCkgeworICAgICAgICBWZWN0b3Igc2VudGVuY2VTZWxlY3Rpb25EYXRhID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBzZW50ZW5jZSBicmVha2luZyBpcyBoYW5kbGluZyBwdW5jdHVhdGlvbiBjb3JyZWN0bHkKKyAgICAgICAgLy8gW0NPVUxEIE5PVCBSRVBST0RVQ0UgVEhJUyBCVUcsIEJVVCBURVNUIElTIEhFUkUgVE8gTUFLRSBTVVJFCisgICAgICAgIC8vIElUIERPRVNOJ1QgQ1JPUCBVUF0KKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkNvbnN0cnVjdHMgYSByYW5kb21seSBnZW5lcmF0ZWQgIgorICAgICAgICAgICAgICAgICsgIkJpZ0ludGVnZXIsIHVuaWZvcm1seSBkaXN0cmlidXRlZCBvdmVyIHRoZSByYW5nZSA8dHQ+MDwvdHQ+ICIKKyAgICAgICAgICAgICAgICArICJ0byA8dHQ+KDI8c3VwPm51bUJpdHM8L3N1cD4gLSAxKTwvdHQ+LCBpbmNsdXNpdmUuICAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlRoZSB1bmlmb3JtaXR5IG9mIHRoZSBkaXN0cmlidXRpb24gIgorICAgICAgICAgICAgICAgICsgImFzc3VtZXMgdGhhdCBhIGZhaXIgc291cmNlIG9mIHJhbmRvbSBiaXRzIGlzIHByb3ZpZGVkIGluICIKKyAgICAgICAgICAgICAgICArICI8dHQ+cm5kPC90dD4uICAiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIk5vdGUgdGhhdCB0aGlzIGNvbnN0cnVjdG9yIGFsd2F5cyAiCisgICAgICAgICAgICAgICAgKyAiY29uc3RydWN0cyBhIG5vbi1uZWdhdGl2ZSBCaWdJbnRlZ2VyLlx1MjAyOSIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3Qoc2VudGVuY2VCcmVhaywgc2VudGVuY2VTZWxlY3Rpb25EYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0TGluZUJyZWFrKCkgeworICAgICAgICBWZWN0b3IgbGluZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiTXVsdGktIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkxldmVsICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJleGFtcGxlICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJvZiAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiYSAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgic2VtaS0iKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiaWRpb3RpYyAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgibm9uLSIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJzZW5zaWNhbCAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiKG5vbi0iKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiaW1wb3J0YW50KSAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgic2VudGVuY2UuICIpOworCisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkhpICAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiSGVsbG8gIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIkhvd1xuIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImFyZVxyIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoInlvdVx1MjAyOCIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJmaW5lLlx0Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImdvb2QuICAiKTsKKworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJOb3dcciIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJpc1xuIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoInRoZVxyXG4iKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgidGltZVxuIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlxyIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImZvclxyIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlxyIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImFsbCIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3QobGluZUJyZWFrLCBsaW5lU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MDY4MTMzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQwNjgxMzMoKSB7CisgICAgICAgIFZlY3RvciBsaW5lU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTk2ZjYiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHU0ZTAwXHUzMDAyIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1NGU4Y1x1MzAwMSIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTRlMDlcdTMwMDJcdTMwMDEiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHU1NmRiXHUzMDAxXHUzMDAyXHUzMDAxIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1NGU5NCwiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHU1MTZkLiIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTRlMDMuXHUzMDAxLFx1MzAwMiIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTUxNmIiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KGxpbmVCcmVhaywgbGluZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBidWcgNDA4NjA1MgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RCdWc0MDg2MDUyKCkgeworICAgICAgICBWZWN0b3IgbGluZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiZm9vXHUwMGEwYmFyICIpOworLy8gICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImZvb1x1ZmVmZmJhciIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3QobGluZUJyZWFrLCBsaW5lU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MDk3OTIwCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQwOTc5MjAoKSB7CisgICAgICAgIFZlY3RvciBsaW5lU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJkb2csIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImNhdCwiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgibW91c2UgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIihvbmUpIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIih0d28pXG4iKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KGxpbmVCcmVhaywgbGluZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBidWcgNDAzNTI2NgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RCdWc0MDM1MjY2KCkgeworICAgICAgICBWZWN0b3IgbGluZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiVGhlICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJiYWxhbmNlICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJpcyAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiJC0yMyw0NTYuNzgsICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJub3QgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIi0kMzIsNDU2Ljc4IVxuIik7CisKKyAgICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdChsaW5lQnJlYWssIGxpbmVTZWxlY3Rpb25EYXRhKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAYnVnIDQwOTg0NjcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0QnVnNDA5ODQ2N0xpbmVzKCkgeworICAgICAgICBWZWN0b3IgbGluZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgc3RyaW5nIG9mIEtvcmVhbiBjaGFyYWN0ZXJzIChJIGZvdW5kIGl0IGluIHRoZSBZZWxsb3cgUGFnZXMKKyAgICAgICAgLy8gYWQgZm9yIHRoZSBLb3JlYW4gUHJlc2J5dGVyaWFuIENodXJjaCBvZiBTYW4gRnJhbmNpc2NvLCBhbmQgSSBob3BlIEkgdHJhbnNjcmliZWQKKyAgICAgICAgLy8gaXQgY29ycmVjdGx5KSwgZmlyc3QgYXMgcHJlY29tcG9zZWQgc3lsbGFibGVzLCBhbmQgdGhlbiBhcyBjb25qb2luaW5nIGphbW8uCisgICAgICAgIC8vIEJvdGggc2VxdWVuY2VzIHNob3VsZCBiZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIGFuZCBicmVhayB0aGUgc2FtZSB3YXkuCisgICAgICAgIC8vIHByZWNvbXBvc2VkIHN5bGxhYmxlcy4uLgorICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdWMwYzFcdWQ1NmQgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1ZDU1Y1x1Yzc3OCAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHVjNWYwXHVkNTY5ICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdWM3YTVcdWI4NWNcdWFkNTBcdWQ2OGMgIik7CisgICAgICAgIC8vIGNvbmpvaW5pbmcgamFtby4uLgorICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMDlcdTExNjFcdTExYmNcdTExMTJcdTExNjFcdTExYmMgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MTExMlx1MTE2MVx1MTFhYlx1MTEwYlx1MTE3NVx1MTFhYiAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUxMTBiXHUxMTY3XHUxMWFiXHUxMTEyXHUxMTYxXHUxMWI4ICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMGNcdTExNjFcdTExYmNcdTExMDVcdTExNjlcdTExMDBcdTExNmRcdTExMTJcdTExNmMiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KGxpbmVCcmVhaywgbGluZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RUaGFpTGluZUJyZWFrKCkgeworICAgICAgICBWZWN0b3IgbGluZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgLy8gXHUwZTJmLS0gdGhlIFRoYWkgcGFpeWFubm9pIGNoYXJhY3Rlci0tIGlzbid0IGEgbGV0dGVyLiAgSXQncyBhIHN5bWJvbCB0aGF0CisgICAgICAgIC8vIHJlcHJlc2VudHMgZWxpZGVkIGxldHRlcnMgYXQgdGhlIGVuZCBvZiBhIGxvbmcgd29yZC4gIEl0IHNob3VsZCBiZSBib3VuZCB0bworICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JkIGFuZCBub3QgdHJlYXRlZCBhcyBhbiBpbmRlcGVuZGVudCBwdW5jdHVhdGlvbiBtYXJrLgorICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMmFcdTBlMTZcdTBlMzJcdTBlMTlcdTBlMzVcdTBlMmYiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTA4XHUwZTMwIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUyM1x1MGUzMFx1MGUxNFx1MGUyMSIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlNDBcdTBlMDhcdTBlNDlcdTBlMzIiKTsKKy8vICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMmJcdTBlMTlcdTBlNDlcdTBlMzIiKTsKKy8vICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMTdcdTBlMzVcdTBlNDgiKTsKKy8vIEkgdGhpbmsgdGhlIGFib3ZlIHR3byBsaW5lcyBhcmUgdGhlIHByZWZlcnJlZCByZWFkaW5nIG9mIHRoaXMgdGV4dCwgYnV0IG91ciBjdXJyZW50CisvLyBkaWN0aW9uYXJ5IHlpZWxkcyB0aGUgZm9sbG93aW5nOgorbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTJiXHUwZTE2XHUwZTQ5XHUwZTMyXHUwZTE3XHUwZTM1XHUwZTQ4Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUyZFx1MGUyZFx1MGUwMSIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMjFcdTBlMzIiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTQwXHUwZTIzXHUwZTQ4XHUwZTA3Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUyM1x1MGUzMFx1MGUxYVx1MGUzMlx1MGUyMiIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMmRcdTBlMjJcdTBlNDhcdTBlMzJcdTBlMDciKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTQwXHUwZTE1XHUwZTQ3XHUwZTIxIik7CisKKyAgICAgICAgLy8gdGhlIG9uZSB0aW1lIHdoZXJlIHRoZSBwYWl5YW5ub2kgb2NjdXJzIHNvbWV3aGVyZSBvdGhlciB0aGFuIGF0IHRoZSBlbmQKKyAgICAgICAgLy8gb2YgYSB3b3JkIGlzIGluIHRoZSBUaGFpIGFiYnJldmF0aW9uIGZvciAiZXRjLiIsIHdoaWNoIGJvdGggYmVnaW5zIGFuZAorICAgICAgICAvLyBlbmRzIHdpdGggYSBwYWl5YW5ub2kKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTJmXHUwZTI1XHUwZTJmIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUxN1x1MGUzNVx1MGU0OCIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMTlcdTBlMzFcdTBlNDlcdTBlMTkiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KEJyZWFrSXRlcmF0b3IuZ2V0TGluZUluc3RhbmNlKG5ldyBMb2NhbGUoInRoIiwgIiIsICIiKSksCisgICAgICAgICAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RNaXhlZFRoYWlMaW5lQnJlYWsoKSB7CisgICAgICAgIFZlY3RvciBsaW5lU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICAvLyBBcmFiaWMgbnVtZXJhbHMgc2hvdWxkIGFsd2F5cyBiZSBzZXBhcmF0ZWQgZnJvbSBzdXJyb3VuZGluZyBUaGFpIHRleHQKKy8qCisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUwNFx1MGU0OFx1MGUzMiIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlNDBcdTBlMDdcdTBlMzRcdTBlMTkiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTFhXHUwZTMyXHUwZTE3Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGU0MVx1MGUxNVx1MGUzMCIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMjNcdTBlMzBcdTBlMTRcdTBlMzFcdTBlMWEiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiMzkiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTFhXHUwZTMyXHUwZTE3ICIpOworCisgICAgICAgIC8vIHdvcmRzIGluIG5vbi1UaGFpIHNjcmlwdHMgc2hvdWxkIGFsd2F5cyBiZSBzZXBhcmF0ZWQgZnJvbSBzdXJyb3VuZGluZyBUaGFpIHRleHQKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTE3XHUwZTE0Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUyYVx1MGUyZFx1MGUxYSIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJKYXZhIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUxYVx1MGUxOSIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlNDBcdTBlMDRcdTBlMjNcdTBlMzdcdTBlNDhcdTBlMmRcdTBlMDciKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTQ0XHUwZTJkXHUwZTFhXHUwZTM1XHUwZTQwXHUwZTJkXHUwZTQ3XHUwZTIxICIpOworCisgICAgICAgIC8vIFRoYWkgbnVtZXJhbHMgc2hvdWxkIGFsd2F5cyBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgdGV4dCBzdXJyb3VuZGluZyB0aGVtCisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUwNFx1MGU0OFx1MGUzMiIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlNDBcdTBlMDdcdTBlMzRcdTBlMTkiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTFhXHUwZTMyXHUwZTE3Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGU0MVx1MGUxNVx1MGUzMCIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMjNcdTBlMzBcdTBlMTRcdTBlMzFcdTBlMWEiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTUzXHUwZTU5Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUxYVx1MGUzMlx1MGUxNyAiKTsKKworICAgICAgICAvLyBUaGFpIHRleHQgc2hvdWxkIGludGVyYWN0IGNvcnJlY3RseSB3aXRoIHB1bmN0dWF0aW9uIGFuZCBzeW1ib2xzCisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGU0NFx1MGUyZFx1MGUxYVx1MGUzNVx1MGU0MFx1MGUyZFx1MGU0N1x1MGUyMSIpOworLy8gICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIihcdTBlMWJcdTBlMjNcdTBlMzBcdTBlNDBcdTBlMTdcdTBlMjgiKTsKKy8vICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlNDRcdTBlMTdcdTBlMjIpIik7CisvLyBJIHRoaW5rIHRoZSBhYm92ZSBsaW5lcyByZXByZXNlbnQgdGhlIHByZWZlcnJlZCByZWFkaW5nIGZvciB0aGlzIHRleHQsIGJ1dCBvdXIgY3VycmVudAorLy8gZGljdGlvbmFyeSBmaWxlIHlpZWxkcyB0aGUgZm9sbG93aW5nOgorbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiKFx1MGUxYlx1MGUyM1x1MGUzMFx1MGU0MFx1MGUxN1x1MGUyOFx1MGU0NFx1MGUxN1x1MGUyMikiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTA4XHUwZTMzXHUwZTAxXHUwZTMxXHUwZTE0Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGU0MFx1MGUxYlx1MGUzNFx1MGUxNCIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMTVcdTBlMzFcdTBlMjdcIiIpOworKi8KKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTJlXHUwZTMyXHUwZTIzXHUwZTRjXHUwZTE0XHUwZTE0XHUwZTM0XHUwZTJhXHUwZTAxXHUwZTRjXCIiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTIzXHUwZTM4XHUwZTQ4XHUwZTE5Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGU0M1x1MGUyYlx1MGUyMVx1MGU0OCIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlNDBcdTBlMTRcdTBlMzdcdTBlMmRcdTBlMTlcdTBlMjFcdTBlMzQuIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUyMi4iKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTE5XHUwZTM1XHUwZTQ5Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUyM1x1MGUzMlx1MGUwNFx1MGUzMiIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIkMjAwIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGU0MFx1MGUxN1x1MGU0OFx1MGUzMiIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMTlcdTBlMzFcdTBlNDlcdTBlMTkgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIihcIlx1MGUyZVx1MGUzMlx1MGUyM1x1MGU0Y1x1MGUxNFx1MGUxNFx1MGUzNFx1MGUyYVx1MGUwMVx1MGU0Y1wiKS4iKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KEJyZWFrSXRlcmF0b3IuZ2V0TGluZUluc3RhbmNlKG5ldyBMb2NhbGUoInRoIiwgIiIsICIiKSksCisgICAgICAgICAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RNYWl5YW1vaygpIHsKKyAgICAgICAgVmVjdG9yIGxpbmVTZWxlY3Rpb25EYXRhID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIC8vIHRoZSBUaGFpIG1haXlhbW9rIGNoYXJhY3RlciBpcyBhIHNob3J0aGFuZCBzeW1ib2wgdGhhdCBtZWFucyAicmVwZWF0IHRoZSBwcmV2aW91cworICAgICAgICAvLyB3b3JkIi4gIEluc3RlYWQgb2YgYXBwZWFyaW5nIGFzIGEgd29yZCB1bnRvIGl0c2VsZiwgaG93ZXZlciwgaXQncyBrZXB0IHRvZ2V0aGVyCisgICAgICAgIC8vIHdpdGggdGhlIHdvcmQgYmVmb3JlIGl0CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGU0NFx1MGUxYlx1MGU0NiIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlMjFcdTBlMzJcdTBlNDYiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTIzXHUwZTMwXHUwZTJiXHUwZTI3XHUwZTQ4XHUwZTMyXHUwZTA3Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGUwMVx1MGUyM1x1MGUzOFx1MGUwN1x1MGU0MFx1MGUxN1x1MGUxZSIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTBlNDFcdTBlMjVcdTBlMzAiKTsKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUwZTQwXHUwZTAzXHUwZTM1XHUwZTIyXHUwZTA3Iik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MGU0M1x1MGUyYlx1MGUyMVx1MGU0OCIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3QoQnJlYWtJdGVyYXRvci5nZXRMaW5lSW5zdGFuY2UobmV3IExvY2FsZSgidGgiLCAiIiwgIiIpKSwKKyAgICAgICAgICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MTE3NTU0CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQxMTc1NTRMaW5lcygpIHsKKyAgICAgICAgVmVjdG9yIGxpbmVTZWxlY3Rpb25EYXRhID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIC8vIEZ1bGx3aWR0aCAuIT8gc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcG9zdEp3cmQKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHU0ZTAxXHVmZjBlIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1NGUwMlx1ZmYwMSIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTRlMDNcdWZmMWYiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KGxpbmVCcmVhaywgbGluZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RMZXR0ZXJzQW5kRGlnaXRzKCkgeworICAgICAgICAvLyBhIGNoYXJhY3RlciBzZXF1ZW5jZSBzdWNoIGFzICJYMTEiIG9yICIzMEYzIiBvciAibmF0aXZlMmFzY2lpIiBzaG91bGQKKyAgICAgICAgLy8gYmUga2VwdCB0b2dldGhlciBhcyBhIHNpbmdsZSB3b3JkCisgICAgICAgIFZlY3RvciBsaW5lU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJYMTEgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIjMwRjMgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIm5hdGl2ZTJhc2NpaSIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3QobGluZUJyZWFrLCBsaW5lU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MjE3NzAzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQyMTc3MDMoKSB7CisgICAgICAgIFZlY3RvciBsaW5lU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgYSBsaW5lIGJyZWFrIGJldHdlZW4gc2VudGVuY2UtZW5kaW5nIHB1bmN0dWF0aW9uCisgICAgICAgIC8vIGFuZCBhIGNsb3NpbmcgcXVvdGUKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiSGUgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoInNhaWQgIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlwiR28hXCIgICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJJICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJ3ZW50LiAgIik7CisKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiSGFzaHRhYmxlJEVudW1lcmF0aW9uICIpOworICAgICAgICBsaW5lU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJnZXRUZXh0KCkuIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoImdldEluZGV4KCkiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KGxpbmVCcmVhaywgbGluZVNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBncmF2ZVMgPSAiU1x1MDMwMCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGFjdXRlQmVsb3dJID0gImlcdTAzMTciOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBhY3V0ZUUgPSAiZVx1MDMwMSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNpcmN1bWZsZXhBID0gImFcdTAzMDIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyB0aWxkZUUgPSAiZVx1MDMwMyI7CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q2hhcmFjdGVyQnJlYWsoKSB7CisgICAgICAgIFZlY3RvciBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudChncmF2ZVMpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoYWN1dGVCZWxvd0kpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIm0iKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJwIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgibCIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoYWN1dGVFKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgicyIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoY2lyY3VtZmxleEEpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIm0iKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJwIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgibCIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQodGlsZGVFKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIuIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgidyIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoY2lyY3VtZmxleEEpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoInciKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJhIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiZiIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoInEiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcbiIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlxyIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHJcbiIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlxuIik7CisKKyAgICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdChjaGFyYWN0ZXJCcmVhaywgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MDk4NDY3CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQwOTg0NjdDaGFyYWN0ZXJzKCkgeworICAgICAgICBWZWN0b3IgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBzdHJpbmcgb2YgS29yZWFuIGNoYXJhY3RlcnMgKEkgZm91bmQgaXQgaW4gdGhlIFllbGxvdyBQYWdlcworICAgICAgICAvLyBhZCBmb3IgdGhlIEtvcmVhbiBQcmVzYnl0ZXJpYW4gQ2h1cmNoIG9mIFNhbiBGcmFuY2lzY28sIGFuZCBJIGhvcGUgSSB0cmFuc2NyaWJlZAorICAgICAgICAvLyBpdCBjb3JyZWN0bHkpLCBmaXJzdCBhcyBwcmVjb21wb3NlZCBzeWxsYWJsZXMsIGFuZCB0aGVuIGFzIGNvbmpvaW5pbmcgamFtby4KKyAgICAgICAgLy8gQm90aCBzZXF1ZW5jZXMgc2hvdWxkIGJlIHNlbWFudGljYWxseSBpZGVudGljYWwgYW5kIGJyZWFrIHRoZSBzYW1lIHdheS4KKyAgICAgICAgLy8gcHJlY29tcG9zZWQgc3lsbGFibGVzLi4uCisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHVjMGMxIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHVkNTZkIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1ZDU1YyIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1Yzc3OCIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdWM1ZjAiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdWQ1NjkiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHVjN2E1Iik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHViODVjIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHVhZDUwIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHVkNjhjIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICAvLyBjb25qb2luaW5nIGphbW8uLi4KKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMDlcdTExNjFcdTExYmMiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMTJcdTExNjFcdTExYmMiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUxMTEyXHUxMTYxXHUxMWFiIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHUxMTBiXHUxMTc1XHUxMWFiIik7CisgICAgICAgIGNoYXJhY3RlclNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MTEwYlx1MTE2N1x1MTFhYiIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MTExMlx1MTE2MVx1MTFiOCIpOworICAgICAgICBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMGNcdTExNjFcdTExYmMiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMDVcdTExNjkiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMDBcdTExNmQiKTsKKyAgICAgICAgY2hhcmFjdGVyU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTExMTJcdTExNmMiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KGNoYXJhY3RlckJyZWFrLCBjaGFyYWN0ZXJTZWxlY3Rpb25EYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0VGl0bGVCcmVhaygpCisgICAgeworICAgICAgICBWZWN0b3IgdGl0bGVEYXRhID0gbmV3IFZlY3RvcigpOworICAgICAgICB0aXRsZURhdGEuYWRkRWxlbWVudCgiICAgIik7CisgICAgICAgIHRpdGxlRGF0YS5hZGRFbGVtZW50KCJUaGlzICIpOworICAgICAgICB0aXRsZURhdGEuYWRkRWxlbWVudCgiaXMgIik7CisgICAgICAgIHRpdGxlRGF0YS5hZGRFbGVtZW50KCJhICIpOworICAgICAgICB0aXRsZURhdGEuYWRkRWxlbWVudCgic2ltcGxlICIpOworICAgICAgICB0aXRsZURhdGEuYWRkRWxlbWVudCgic2FtcGxlICIpOworICAgICAgICB0aXRsZURhdGEuYWRkRWxlbWVudCgic2VudGVuY2UuICIpOworICAgICAgICB0aXRsZURhdGEuYWRkRWxlbWVudCgiVGhpcyAiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHRpdGxlQnJlYWssIHRpdGxlRGF0YSk7CisgICAgfQorCisKKworICAgIC8qCisgICAgICogQGJ1ZyA0MTUzMDcyCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQxNTMwNzIoKSB7CisgICAgICAgIEJyZWFrSXRlcmF0b3IgaXRlciA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKCk7CisgICAgICAgIFN0cmluZyBzdHIgPSAiLi4uSGVsbG8sIFdvcmxkIS4uLiI7CisgICAgICAgIGludCBiZWdpbiA9IDM7CisgICAgICAgIGludCBlbmQgPSBzdHIubGVuZ3RoKCkgLSAzOworICAgICAgICAvLyBub3QgdXNlZCBib29sZWFuIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBib29sZWFuIGR1bW15OworCisgICAgICAgIGl0ZXIuc2V0VGV4dChuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3Ioc3RyLCBiZWdpbiwgZW5kLCBiZWdpbikpOworICAgICAgICBmb3IgKGludCBpbmRleCA9IC0xOyBpbmRleCA8IGJlZ2luICsgMTsgKytpbmRleCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBkdW1teSA9IGl0ZXIuaXNCb3VuZGFyeShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgYmVnaW4pCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJEaWRuJ3QgZ2V0IGV4Y2VwdGlvbiB3aXRoIG9mZnNldCA9ICIgKyBpbmRleCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCBiZWdpbiBpbmRleCA9ICIgKyBiZWdpbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gYmVnaW4pCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJHb3QgZXhjZXB0aW9uIHdpdGggb2Zmc2V0ID0gIiArIGluZGV4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIGJlZ2luIGluZGV4ID0gIiArIGJlZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RCdWc0MTQ2MTc1U2VudGVuY2VzKCkgeworICAgICAgICBWZWN0b3Igc2VudGVuY2VTZWxlY3Rpb25EYXRhID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIC8vIGJyZWFrIGJldHdlZW4gcGVyaW9kcyBhbmQgb3BlbmluZyBwdW5jdHVhdGlvbiBldmVuIHdoZW4gdGhlcmUncyBubworICAgICAgICAvLyBpbnRlcnZlbmluZyBzcGFjZQorICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiZW5kLiIpOworICAgICAgICBzZW50ZW5jZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiKFRoaXMgaXNcdTIwMjkiKTsKKworICAgICAgICAvLyB0cmVhdCB0aGUgZnVsbHdpZHRoIHBlcmlvZCBhcyBhbiB1bmFtYmlndW91cyBzZW50ZW5jZSB0ZXJtaW5hdG9yCisgICAgICAgIHNlbnRlbmNlU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTdkNDJcdTMwOGZcdTMwOGFcdWZmMGUiKTsKKyAgICAgICAgc2VudGVuY2VTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MzAwY1x1MzA1M1x1MzA4Y1x1MzA2ZiIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3Qoc2VudGVuY2VCcmVhaywgc2VudGVuY2VTZWxlY3Rpb25EYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0QnVnNDE0NjE3NUxpbmVzKCkgeworICAgICAgICBWZWN0b3IgbGluZVNlbGVjdGlvbkRhdGEgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgLy8gdGhlIGZ1bGx3aWR0aCBjb21tYSBzaG91bGQgc3RpY2sgdG8gdGhlIHByZWNlZGluZyBKYXBhbmVzZSBjaGFyYWN0ZXIKKyAgICAgICAgbGluZVNlbGVjdGlvbkRhdGEuYWRkRWxlbWVudCgiXHU3ZDQyXHVmZjBjIik7CisgICAgICAgIGxpbmVTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MzA4ZiIpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3QobGluZUJyZWFrLCBsaW5lU2VsZWN0aW9uRGF0YSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEJ1ZzQyMTQzNjcoKSB7CisgICAgICAgIFZlY3RvciB3b3JkU2VsZWN0aW9uRGF0YSA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICAvLyB0aGUgaGlyYWdhbmEgYW5kIGthdGFrYW5hIGl0ZXJhdGlvbiBtYXJrcyBhbmQgdGhlIGxvbmcgdm93ZWwgbWFyaworICAgICAgICAvLyBhcmUgbm90IGJlaW5nIHRyZWF0ZWQgY29ycmVjdGx5IGJ5IHRoZSB3b3JkLWJyZWFrIGl0ZXJhdG9yCisgICAgICAgIHdvcmRTZWxlY3Rpb25EYXRhLmFkZEVsZW1lbnQoIlx1MzA0Mlx1MzA0NFx1MzA5ZFx1MzA0Mlx1MzA5ZVx1MzA0Mlx1MzBmY1x1MzA0MiIpOworICAgICAgICB3b3JkU2VsZWN0aW9uRGF0YS5hZGRFbGVtZW50KCJcdTMwYTJcdTMwYTRcdTMwZmRcdTMwYTJcdTMwZmVcdTMwYTJcdTMwZmNcdTMwYTIiKTsKKworICAgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHdvcmRCcmVhaywgd29yZFNlbGVjdGlvbkRhdGEpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjYW5uZWRUZXN0Q2hhcnMKKyAgICAgICAgPSAiXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0ICFcIiMkJSYoKSstMDEyMzQ8PT5BQkNERVtdXl9gYWJjZGV7fXxcdTAwYTBcdTAwYTIiCisgICAgICAgICsgIlx1MDBhM1x1MDBhNFx1MDBhNVx1MDBhNlx1MDBhN1x1MDBhOFx1MDBhOVx1MDBhYlx1MDBhZFx1MDBhZVx1MDBhZlx1MDBiMFx1MDBiMlx1MDBiMyIKKyAgICAgICAgKyAiXHUwMGI0XHUwMGI5XHUwMGJiXHUwMGJjXHUwMGJkXHUwMmIwXHUwMmIxXHUwMmIyXHUwMmIzXHUwMmI0XHUwMzAwXHUwMzAxXHUwMzAyXHUwMzAzIgorICAgICAgICArICJcdTAzMDRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA5MDNcdTA5M2VcdTA5M2ZcdTA5NDBcdTA5NDlcdTBmM2FcdTBmM2JcdTIwMDAiCisgICAgICAgICsgIlx1MjAwMVx1MjAwMlx1MjAwY1x1MjAwZFx1MjAwZVx1MjAwZlx1MjAxMFx1MjAxMVx1MjAxMlx1MjAyOFx1MjAyOVx1MjAyYVx1MjAzZVx1MjAzZiIKKyAgICAgICAgKyAiXHUyMDQwXHUyMGRkXHUyMGRlXHUyMGRmXHUyMGUwXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0IjsKKworICAgIHB1YmxpYyB2b2lkIFRlc3RTZW50ZW5jZUludmFyaWFudHMoKQorICAgIHsKKyAgICAgICAgQnJlYWtJdGVyYXRvciBlID0gQnJlYWtJdGVyYXRvci5nZXRTZW50ZW5jZUluc3RhbmNlKCk7CisgICAgICAgIGRvT3RoZXJJbnZhcmlhbnRUZXN0KGUsIGNhbm5lZFRlc3RDaGFycyArICIuLFx1MzAwMVx1MzAwMlx1MzA0MVx1MzA0Mlx1MzA0M1x1ZmVmZiIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RXb3JkSW52YXJpYW50cygpCisgICAgeworICAgICAgICBCcmVha0l0ZXJhdG9yIGUgPSBCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZSgpOworICAgICAgICBkb0JyZWFrSW52YXJpYW50VGVzdChlLCBjYW5uZWRUZXN0Q2hhcnMgKyAiXCcsLlx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA5Ylx1MzA5Y1x1MzBhMVx1MzBhMiIKKyAgICAgICAgICAgICsgIlx1MzBhM1x1NGUwMFx1NGUwMVx1NGUwMiIpOworICAgICAgICBkb090aGVySW52YXJpYW50VGVzdChlLCBjYW5uZWRUZXN0Q2hhcnMgKyAiXCcsLlx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA5Ylx1MzA5Y1x1MzBhMVx1MzBhMiIKKyAgICAgICAgICAgICsgIlx1MzBhM1x1NGUwMFx1NGUwMVx1NGUwMiIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RMaW5lSW52YXJpYW50cygpCisgICAgeworICAgICAgICBCcmVha0l0ZXJhdG9yIGUgPSBCcmVha0l0ZXJhdG9yLmdldExpbmVJbnN0YW5jZSgpOworICAgICAgICBTdHJpbmcgdGVzdENoYXJzID0gY2FubmVkVGVzdENoYXJzICsgIi4sOzpcdTMwMDFcdTMwMDJcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDUiCisgICAgICAgICAgICArICJcdTMwYTNcdTRlMDBcdTRlMDFcdTRlMDIiOworICAgICAgICBkb0JyZWFrSW52YXJpYW50VGVzdChlLCB0ZXN0Q2hhcnMpOworICAgICAgICBkb090aGVySW52YXJpYW50VGVzdChlLCB0ZXN0Q2hhcnMpOworCisgICAgICAgIGludCBlcnJvckNvdW50ID0gMDsKKworICAgICAgICAvLyBpbiBhZGRpdGlvbiB0byB0aGUgb3RoZXIgaW52YXJpYW50cywgYSBsaW5lLWJyZWFrIGl0ZXJhdG9yIHNob3VsZCBtYWtlIHN1cmUgdGhhdDoKKyAgICAgICAgLy8gaXQgZG9lc24ndCBicmVhayBhcm91bmQgdGhlIG5vbi1icmVha2luZyBjaGFyYWN0ZXJzCisgICAgICAgIFN0cmluZyBub0JyZWFrID0gIlx1MDBhMFx1MjAwN1x1MjAxMVx1ZmVmZiI7CisgICAgICAgIFN0cmluZ0J1ZmZlciB3b3JrID0gbmV3IFN0cmluZ0J1ZmZlcigiYWFhIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdENoYXJzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHRlc3RDaGFycy5jaGFyQXQoaSk7CisgICAgICAgICAgICBpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdTIwMjknIHx8IGMgPT0gJ1x1MjAyOCcgfHwgYyA9PSAnXHUwMDAzJykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHdvcmsuc2V0Q2hhckF0KDAsIGMpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBub0JyZWFrLmxlbmd0aCgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICB3b3JrLnNldENoYXJBdCgxLCBub0JyZWFrLmNoYXJBdChqKSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCB0ZXN0Q2hhcnMubGVuZ3RoKCk7IGsrKykgeworICAgICAgICAgICAgICAgICAgICB3b3JrLnNldENoYXJBdCgyLCB0ZXN0Q2hhcnMuY2hhckF0KGspKTsKKyAgICAgICAgICAgICAgICAgICAgZS5zZXRUZXh0KHdvcmsudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGwgPSBlLmZpcnN0KCk7IGwgIT0gQnJlYWtJdGVyYXRvci5ET05FOyBsID0gZS5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9PSAxIHx8IGwgPT0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJHb3QgYnJlYWsgYmV0d2VlbiBVKyIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKChpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29yay5jaGFyQXQobCAtIDEpKSkgKyAiIGFuZCBVKyIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkod29yay5jaGFyQXQobCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckNvdW50ID49IDc1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gaXQgZG9lcyBicmVhayBhZnRlciBkYXNoZXMgKHVubGVzcyB0aGV5J3JlIGZvbGxvd2VkIGJ5IGEgZGlnaXQsIGEgbm9uLXNwYWNpbmcgbWFyaywKKyAgICAgICAgLy8gYSBjdXJyZW5jeSBzeW1ib2wsIGEgc3BhY2UsIGEgZm9ybWF0LWNvbnRyb2wgY2hhcmFjdGVyLCBhIHJlZ3VsYXIgY29udHJvbCBjaGFyYWN0ZXIsCisgICAgICAgIC8vIGEgbGluZSBvciBwYXJhZ3JhcGggc2VwYXJhdG9yLCBvciBhbm90aGVyIGRhc2gpCisgICAgICAgIFN0cmluZyBkYXNoZXMgPSAiLVx1MDBhZFx1MjAxMFx1MjAxMlx1MjAxM1x1MjAxNCI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdENoYXJzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIHdvcmsuc2V0Q2hhckF0KDAsIHRlc3RDaGFycy5jaGFyQXQoaSkpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkYXNoZXMubGVuZ3RoKCk7IGorKykgeworICAgICAgICAgICAgICAgIHdvcmsuc2V0Q2hhckF0KDEsIGRhc2hlcy5jaGFyQXQoaikpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgdGVzdENoYXJzLmxlbmd0aCgpOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBjID0gdGVzdENoYXJzLmNoYXJBdChrKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5nZXRUeXBlKGMpID09IENoYXJhY3Rlci5ERUNJTUFMX0RJR0lUX05VTUJFUiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyLmdldFR5cGUoYykgPT0gQ2hhcmFjdGVyLk9USEVSX05VTUJFUiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyLmdldFR5cGUoYykgPT0gQ2hhcmFjdGVyLk5PTl9TUEFDSU5HX01BUksgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5nZXRUeXBlKGMpID09IENoYXJhY3Rlci5FTkNMT1NJTkdfTUFSSyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyLmdldFR5cGUoYykgPT0gQ2hhcmFjdGVyLkNVUlJFTkNZX1NZTUJPTCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyLmdldFR5cGUoYykgPT0gQ2hhcmFjdGVyLkRBU0hfUFVOQ1RVQVRJT04gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5nZXRUeXBlKGMpID09IENoYXJhY3Rlci5TUEFDRV9TRVBBUkFUT1IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5nZXRUeXBlKGMpID09IENoYXJhY3Rlci5GT1JNQVQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci5nZXRUeXBlKGMpID09IENoYXJhY3Rlci5DT05UUk9MIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1x1MjAyOCcgfHwgYyA9PSAnXHUyMDI5JyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgYyA9PSAnXHUwMDAzJyB8fCBjID09ICdcdTIwMDcnIHx8IGMgPT0gJ1x1MjAxMScgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPT0gJ1x1ZmVmZicpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgd29yay5zZXRDaGFyQXQoMiwgYyk7CisgICAgICAgICAgICAgICAgICAgIGUuc2V0VGV4dCh3b3JrLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNhdzIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgbCA9IGUuZmlyc3QoKTsgbCAhPSBCcmVha0l0ZXJhdG9yLkRPTkU7IGwgPSBlLm5leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3MiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2F3MikgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkRpZG4ndCBnZXQgYnJlYWsgYmV0d2VlbiBVKyIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKChpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29yay5jaGFyQXQoMSkpKSArICIgYW5kIFUrIiArIEludGVnZXIudG9IZXhTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSh3b3JrLmNoYXJBdCgyKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckNvdW50ID49IDc1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDaGFyYWN0ZXJJbnZhcmlhbnRzKCkKKyAgICB7CisgICAgICAgIEJyZWFrSXRlcmF0b3IgZSA9IEJyZWFrSXRlcmF0b3IuZ2V0Q2hhcmFjdGVySW5zdGFuY2UoKTsKKyAgICAgICAgZG9CcmVha0ludmFyaWFudFRlc3QoZSwgY2FubmVkVGVzdENoYXJzICsgIlx1MTEwMFx1MTEwMVx1MTEwMlx1MTE2MFx1MTE2MVx1MTE2Mlx1MTFhOCIKKyAgICAgICAgICAgICsgIlx1MTFhOVx1MTFhYSIpOworICAgICAgICBkb090aGVySW52YXJpYW50VGVzdChlLCBjYW5uZWRUZXN0Q2hhcnMgKyAiXHUxMTAwXHUxMTAxXHUxMTAyXHUxMTYwXHUxMTYxXHUxMTYyXHUxMWE4IgorICAgICAgICAgICAgKyAiXHUxMWE5XHUxMWFhIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEVtcHR5U3RyaW5nKCkKKyAgICB7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gIiI7CisgICAgICAgIFZlY3RvciB4ID0gbmV3IFZlY3RvcigpOworICAgICAgICB4LmFkZEVsZW1lbnQodGV4dCk7CisKKyAgICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdChsaW5lQnJlYWssIHgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RHZXRBdmFpbGFibGVMb2NhbGVzKCkKKyAgICB7CisgICAgICAgIExvY2FsZVtdIGxvY0xpc3QgPSBCcmVha0l0ZXJhdG9yLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKworICAgICAgICBpZiAobG9jTGlzdC5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgIGVycmxuKCJnZXRBdmFpbGFibGVMb2NhbGVzKCkgcmV0dXJuZWQgYW4gZW1wdHkgbGlzdCEiKTsKKyAgICAgICAgLy8gSSBoYXZlIG5vIGlkZWEgaG93IHRvIHRlc3QgdGhpcyBmdW5jdGlvbi4uLgorICAgIH0KKworICAgIC8qKgorICAgICAqIEBidWcgNDA5NTMyMgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RKYXBhbmVzZUxpbmVCcmVhaygpCisgICAgeworICAgICAgICBTdHJpbmdCdWZmZXIgdGVzdFN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoIlx1NGUwMHhcdTRlOGMiKTsKKyAgICAgICAgU3RyaW5nIHByZWNlZGluZ0NoYXJzID0gIihbe1x1MDBhYiRcdTAwYTVcdTAwYTNcdTAwYTRcdTIwMThcdTIwMWFcdTIwMWNcdTIwMWVcdTIwMWJcdTIwMWYiOworICAgICAgICBTdHJpbmcgZm9sbG93aW5nQ2hhcnMgPSAiKV19XHUwMGJiISUsLlx1MzAwMVx1MzAwMlx1MzA2M1x1MzA4M1x1MzA4NVx1MzA4N1x1MzBjM1x1MzBlM1x1MzBlNVx1MzBlN1x1MzBmYzo7XHUzMDliXHUzMDljXHUzMDA1XHUzMDlkXHUzMDllXHUzMGZkXHUzMGZlXHUyMDE5XHUyMDFkXHUwMGIwXHUyMDMyXHUyMDMzXHUyMDM0XHUyMDMwXHUyMDMxXHUyMTAzXHUyMTA5XHUwMGEyXHUwMzAwXHUwMzAxXHUwMzAyIjsKKyAgICAgICAgQnJlYWtJdGVyYXRvciBpdGVyID0gQnJlYWtJdGVyYXRvci5nZXRMaW5lSW5zdGFuY2UoTG9jYWxlLkpBUEFOKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZWNlZGluZ0NoYXJzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIHRlc3RTdHJpbmcuc2V0Q2hhckF0KDEsIHByZWNlZGluZ0NoYXJzLmNoYXJBdChpKSk7CisgICAgICAgICAgICBpdGVyLnNldFRleHQodGVzdFN0cmluZy50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGludCBqID0gaXRlci5maXJzdCgpOworICAgICAgICAgICAgaWYgKGogIT0gMCkKKyAgICAgICAgICAgICAgICBlcnJsbigiamEgbGluZSBicmVhayBmYWlsdXJlOiBmYWlsZWQgdG8gc3RhcnQgYXQgMCIpOworICAgICAgICAgICAgaiA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKGogIT0gMSkKKyAgICAgICAgICAgICAgICBlcnJsbigiamEgbGluZSBicmVhayBmYWlsdXJlOiBmYWlsZWQgdG8gc3RvcCBiZWZvcmUgJyIgKyBwcmVjZWRpbmdDaGFycy5jaGFyQXQoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInICgiICsgKChpbnQpKHByZWNlZGluZ0NoYXJzLmNoYXJBdChpKSkpICsgIikiKTsKKyAgICAgICAgICAgIGogPSBpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIGlmIChqICE9IDMpCisgICAgICAgICAgICAgICAgZXJybG4oImphIGxpbmUgYnJlYWsgZmFpbHVyZTogZmFpbGVkIHRvIHNraXAgcG9zaXRpb24gYWZ0ZXIgJyIgKyBwcmVjZWRpbmdDaGFycy5jaGFyQXQoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInICgiICsgKChpbnQpKHByZWNlZGluZ0NoYXJzLmNoYXJBdChpKSkpICsgIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9sbG93aW5nQ2hhcnMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgdGVzdFN0cmluZy5zZXRDaGFyQXQoMSwgZm9sbG93aW5nQ2hhcnMuY2hhckF0KGkpKTsKKyAgICAgICAgICAgIGl0ZXIuc2V0VGV4dCh0ZXN0U3RyaW5nLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaW50IGogPSBpdGVyLmZpcnN0KCk7CisgICAgICAgICAgICBpZiAoaiAhPSAwKQorICAgICAgICAgICAgICAgIGVycmxuKCJqYSBsaW5lIGJyZWFrIGZhaWx1cmU6IGZhaWxlZCB0byBzdGFydCBhdCAwIik7CisgICAgICAgICAgICBqID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoaiAhPSAyKQorICAgICAgICAgICAgICAgIGVycmxuKCJqYSBsaW5lIGJyZWFrIGZhaWx1cmU6IGZhaWxlZCB0byBza2lwIHBvc2l0aW9uIGJlZm9yZSAnIiArIGZvbGxvd2luZ0NoYXJzLmNoYXJBdChpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIicgKCIgKyAoKGludCkoZm9sbG93aW5nQ2hhcnMuY2hhckF0KGkpKSkgKyAiKSIpOworICAgICAgICAgICAgaiA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKGogIT0gMykKKyAgICAgICAgICAgICAgICBlcnJsbigiamEgbGluZSBicmVhayBmYWlsdXJlOiBmYWlsZWQgdG8gc3RvcCBhZnRlciAnIiArIGZvbGxvd2luZ0NoYXJzLmNoYXJBdChpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIicgKCIgKyAoKGludCkoZm9sbG93aW5nQ2hhcnMuY2hhckF0KGkpKSkgKyAiKSIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGJ1ZyA0MDY4MTM3CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEVuZEJlaGF2aW9yKCkKKyAgICB7CisgICAgICAgIFN0cmluZyB0ZXN0U3RyaW5nID0gImJvby4iOworICAgICAgICBCcmVha0l0ZXJhdG9yIHdiID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoKTsKKyAgICAgICAgd2Iuc2V0VGV4dCh0ZXN0U3RyaW5nKTsKKworICAgICAgICBpZiAod2IuZmlyc3QoKSAhPSAwKQorICAgICAgICAgICAgZXJybG4oIkRpZG4ndCBnZXQgYnJlYWsgYXQgYmVnaW5uaW5nIG9mIHN0cmluZy4iKTsKKyAgICAgICAgaWYgKHdiLm5leHQoKSAhPSAzKQorICAgICAgICAgICAgZXJybG4oIkRpZG4ndCBnZXQgYnJlYWsgYmVmb3JlIHBlcmlvZCBpbiBcImJvby5cIiIpOworICAgICAgICBpZiAod2IuY3VycmVudCgpICE9IDQgJiYgd2IubmV4dCgpICE9IDQpCisgICAgICAgICAgICBlcnJsbigiRGlkbid0IGdldCBicmVhayBhdCBlbmQgb2Ygc3RyaW5nLiIpOworICAgIH0KKworICAgIC8vIFRoZSBGb2xsb3dpbmcgdHdvIHRlc3RzIGFyZSBwb3J0ZWQgZnJvbSBJQ1U0QyAxLjguMSBbUmljaGFyZC9HQ0xdCisgICAgLyoqCisgICAgICogUG9ydCBGcm9tOiAgIElDVTRDIHYxLjguMSA6IHRleHRib3VuZHMgOiBJbnRsVGVzdFRleHRCb3VuZGFyeQorICAgICAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L2l0dHh0YmQuY3BwCisgICAgICoqLworICAgIC8qKgorICAgICAqIHRlc3QgbWV0aG9kcyBwcmVjZWRpbmcsIGZvbGxvd2luZyBhbmQgaXNCb3VuZGFyeQorICAgICAqKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0UHJlY2VkaW5nKCkgeworICAgICAgICBTdHJpbmcgd29yZHMzID0gImFhYSBiYmIgY2NjIjsKKyAgICAgICAgQnJlYWtJdGVyYXRvciBlID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIGUuc2V0VGV4dCggd29yZHMzICk7CisgICAgICAgIGUuZmlyc3QoKTsKKyAgICAgICAgaW50IHAxID0gZS5uZXh0KCk7CisgICAgICAgIGludCBwMiA9IGUubmV4dCgpOworICAgICAgICBpbnQgcDMgPSBlLm5leHQoKTsKKyAgICAgICAgaW50IHA0ID0gZS5uZXh0KCk7CisKKyAgICAgICAgaW50IGYgPSBlLmZvbGxvd2luZyhwMisxKTsKKyAgICAgICAgaW50IHAgPSBlLnByZWNlZGluZyhwMisxKTsKKyAgICAgICAgaWYgKGYhPXAzKQorICAgICAgICAgICAgZXJybG4oIkludGxUZXN0VGV4dEJvdW5kYXJ5OjpUZXN0UHJlY2VkaW5nOiBmIT1wMyIpOworICAgICAgICBpZiAocCE9cDIpCisgICAgICAgICAgICBlcnJsbigiSW50bFRlc3RUZXh0Qm91bmRhcnk6OlRlc3RQcmVjZWRpbmc6IHAhPXAyIik7CisKKyAgICAgICAgaWYgKHAxKzEhPXAyKQorICAgICAgICAgICAgZXJybG4oIkludGxUZXN0VGV4dEJvdW5kYXJ5OjpUZXN0UHJlY2VkaW5nOiBwMSsxIT1wMiIpOworCisgICAgICAgIGlmIChwMysxIT1wNCkKKyAgICAgICAgICAgIGVycmxuKCJJbnRsVGVzdFRleHRCb3VuZGFyeTo6VGVzdFByZWNlZGluZzogcDMrMSE9cDQiKTsKKworICAgICAgICBpZiAoIWUuaXNCb3VuZGFyeShwMikgfHwgZS5pc0JvdW5kYXJ5KHAyKzEpIHx8ICFlLmlzQm91bmRhcnkocDMpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiSW50bFRlc3RUZXh0Qm91bmRhcnk6OlRlc3RQcmVjZWRpbmc6IGlzQm91bmRhcnkgZXJyIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IFRoYWkgd29yZCBicmVhayB1c2luZyBnZW5lcmFsSXRlcmF0b3JUZXN0KCkKKyAgICAgKiovCisgICAgcHVibGljIHZvaWQgVGVzdFRoYWlXb3JkQnJlYWsoKSB7CisgICAgICAgIFZlY3RvciB0aGFpV29yZFNlbGVjdGlvbiA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICB0aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCJcdTBFMUFcdTBFMTciKTsgLy8yCisgICAgICAgIHRoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEUxN1x1MEUzNVx1MEU0OCIpOyAvLzUKKyAgICAgICAgdGhhaVdvcmRTZWxlY3Rpb24uYWRkRWxlbWVudCgiXHUwRTUxIik7IC8vNgorICAgICAgICB0aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCJcdTBFMUVcdTBFMzJcdTBFMjJcdTBFMzgiKTsgLy8xMAorICAgICAgICB0aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCJcdTBFNDRcdTBFMEJcdTBFNDJcdTBFMDRcdTBFMjVcdTBFMTkiKTsgLy8xNgorICAgICAgICB0aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCJcclxuIik7IC8vMTgKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb3JyZWN0IHJlc3VsdAorICAgICAgICAvL3RoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoKCJcdTBFNDJcdTBFMTRcdTBFNDJcdTBFMjNcdTBFMThcdTBFMzUiKSk7IC8vMjQKKyAgICAgICAgLy90aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCgiXHUwRTJEXHUwRTMyXHUwRTI4XHUwRTMxXHUwRTIyIikpOyAvLzI5CisKKyAgICAgICAgLy8gYW5kIHRoaXMgaXMgd2hhdCB0aGUgZGljdGlvbmFyeSBkb2VzLi4uCisgICAgICAgIHRoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEU0Mlx1MEUxNCIpOyAvLyAyMAorICAgICAgICB0aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCJcdTBFNDJcdTBFMjNcdTBFMThcdTBFMzVcdTBFMkRcdTBFMzJcdTBFMjhcdTBFMzFcdTBFMjIiKTsgLy8yOQorCisgICAgICAgIHRoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEUyRFx1MEUyMlx1MEUzOVx1MEU0OCIpOyAvLzMzCisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29ycmVjdCByZXN1bHQKKyAgICAgICAgLy90aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCJcdTBFMTdcdTBFNDhcdTBFMzJcdTBFMjEiKTsgLy8zNworICAgICAgICAvL3RoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEUwMVx1MEUyNVx1MEUzMlx1MEUwNyIpOyAvLzQxCisKKyAgICAgICAgLy8gYW5kIHRoaXMgaXMgd2hhdCB0aGUgZGljdGlvbmFyeSBkb2VzCisgICAgICAgIHRoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEUxN1x1MEU0OFx1MEUzMlx1MEUyMVx1MEUwMVx1MEUyNVx1MEUzMlx1MEUwNyIpOyAvLzQxCisKKyAgICAgICAgdGhhaVdvcmRTZWxlY3Rpb24uYWRkRWxlbWVudCgiXHUwRTE3XHUwRTM4XHUwRTQ4XHUwRTA3Iik7IC8vNDUKKyAgICAgICAgdGhhaVdvcmRTZWxlY3Rpb24uYWRkRWxlbWVudCgiXHUwRTQzXHUwRTJCXHUwRTBEXHUwRTQ4Iik7IC8vNDkKKyAgICAgICAgdGhhaVdvcmRTZWxlY3Rpb24uYWRkRWxlbWVudCgiXHUwRTQzXHUwRTE5Iik7IC8vNTEKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb3JyZWN0IHJlc3VsdAorICAgICAgICAvL3RoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEU0MVx1MEUwNFx1MEUxOVx1MEUwQlx1MEUzMVx1MEUyQSIpOyAvLzU3CisgICAgICAgIC8vdGhhaVdvcmRTZWxlY3Rpb24uYWRkRWxlbWVudCgiXHUwRTAxXHUwRTMxXHUwRTFBIik7IC8vNjAKKworICAgICAgICAvLyBhbmQgdGhpcyBpcyB3aGF0IHRoZSBkaWN0aW9uYXJ5IGRvZXMKKyAgICAgICAgdGhhaVdvcmRTZWxlY3Rpb24uYWRkRWxlbWVudCgiXHUwRTQxXHUwRTA0XHUwRTE5Iik7IC8vIDU0CisgICAgICAgIHRoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEUwQlx1MEUzMVx1MEUyQVx1MEUwMVx1MEUzMVx1MEUxQSIpOyAvLzYwCisKKyAgICAgICAgdGhhaVdvcmRTZWxlY3Rpb24uYWRkRWxlbWVudCgiXHUwRTI1XHUwRTM4XHUwRTA3Iik7IC8vNjMKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb3JyZWN0IHJlc3VsdAorICAgICAgICAvL3RoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEU0MFx1MEUyRVx1MEUxOVx1MEUyM1x1MEUzNSIpOyAvLzY4CisgICAgICAgIC8vdGhhaVdvcmRTZWxlY3Rpb24uYWRkRWxlbWVudCgiXHUwRTBBXHUwRTMyXHUwRTI3Iik7IC8vNzEKKyAgICAgICAgLy90aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCJcdTBFNDRcdTBFMjNcdTBFNDgiKTsgLy83NAorICAgICAgICAvL3RoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEU0MVx1MEUyNVx1MEUzMCIpOyAvLzc3CisKKyAgICAgICAgLy8gYW5kIHRoaXMgaXMgd2hhdCB0aGUgZGljdGlvbmFyeSBkb2VzCisgICAgICAgIHRoYWlXb3JkU2VsZWN0aW9uLmFkZEVsZW1lbnQoIlx1MEU0MFx1MEUyRSIpOyAvLyA2NQorICAgICAgICB0aGFpV29yZFNlbGVjdGlvbi5hZGRFbGVtZW50KCJcdTBFMTlcdTBFMjNcdTBFMzVcdTBFMEFcdTBFMzJcdTBFMjdcdTBFNDRcdTBFMjNcdTBFNDhcdTBFNDFcdTBFMjVcdTBFMzAiKTsgLy83NworCisgICAgICAgIEJyZWFrSXRlcmF0b3IgZSA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKG5ldyBMb2NhbGUoInRoIiwiIiwiIikpOworCisgICAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3QoZSwgdGhhaVdvcmRTZWxlY3Rpb24pOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvUkJCSUFQSVRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9yYmJpL1JCQklBUElUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDU4YWU4MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9yYmJpL1JCQklBUElUZXN0LmphdmEKQEAgLTAsMCArMSw0NjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9yYmJpL1JCQklBUElUZXN0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MTUgJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiogCisgKiBQb3J0IEZyb206ICAgSUNVNEMgdjEuOC4xIDogcmJiaSA6IFJCQklBUElUZXN0CisgKiBTb3VyY2UgRmlsZTogJElDVTRDUm9vdC9zb3VyY2UvdGVzdC9pbnRsdGVzdC9yYmJpYXB0cy5jcHAKKyAqKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5yYmJpOworCitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5SdWxlQmFzZWRCcmVha0l0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcjsKKworLyoqCisgKiBBUEkgVGVzdCB0aGUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBjbGFzcworICovCitwdWJsaWMgY2xhc3MgUkJCSUFQSVRlc3QgZXh0ZW5kcyBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13ayB7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBSQkJJQVBJVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdHMgY2xvbmUoKSBhbmQgZXF1YWxzKCkgbWV0aG9kcyBvZiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yICAgICAgICAgCisgICAgICoqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDbG9uZUVxdWFscygpIHsKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBiaTEgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsgCisgICAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgYmllcXVhbCA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmdldENoYXJhY3Rlckluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOyAKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBiaTMgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsgCisgICAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgYmkyID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOyAKKworICAgICAgICBTdHJpbmcgdGVzdFN0cmluZyA9ICJUZXN0aW5nIHdvcmQgYnJlYWsgaXRlcmF0b3JzJ3MgY2xvbmUoKSBhbmQgZXF1YWxzKCkiOworICAgICAgICBiaTEuc2V0VGV4dCh0ZXN0U3RyaW5nKTsKKyAgICAgICAgYmkyLnNldFRleHQodGVzdFN0cmluZyk7CisgICAgICAgIGJpZXF1YWwuc2V0VGV4dCh0ZXN0U3RyaW5nKTsKKyAgICAgICAgCisgICAgICAgIGJpMy5zZXRUZXh0KCJoZWxsbyIpOworICAgICAgICBsb2dsbigiVGVzdGluZyBlcXVhbHMoKSIpOworICAgICAgICBsb2dsbigiVGVzdGluZyA9PSBhbmQgIT0iKTsKKyAgICAgICAgaWYgKCFiaTEuZXF1YWxzKGJpZXF1YWwpIHx8IGJpMS5lcXVhbHMoYmkyKSB8fCBiaTEuZXF1YWxzKGJpMykpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6MSBSQkJJJ3MgPT0gYW5kICEtIG9wZXJhdG9yIGZhaWxlZC4iKTsKKyAgICAgICAgaWYgKGJpMi5lcXVhbHMoYmllcXVhbCkgfHwgYmkyLmVxdWFscyhiaTEpIHx8IGJpZXF1YWwuZXF1YWxzKGJpMykpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6MiBSQkJJJ3MgPT0gYW5kICE9IG9wZXJhdG9yICBmYWlsZWQuIik7CisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIGNsb25lKCkiKTsKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBiaTFjbG9uZSA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBiaTEuY2xvbmUoKTsKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBiaTJjbG9uZSA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBiaTIuY2xvbmUoKTsKKyAgICAgICAgaWYgKCFiaTFjbG9uZS5lcXVhbHMoYmkxKQorICAgICAgICAgICAgfHwgIWJpMWNsb25lLmVxdWFscyhiaWVxdWFsKQorICAgICAgICAgICAgfHwgYmkxY2xvbmUuZXF1YWxzKGJpMykKKyAgICAgICAgICAgIHx8IGJpMWNsb25lLmVxdWFscyhiaTIpKQorICAgICAgICAgICAgZXJybG4oIkVSUk9SOjEgUkJCSSdzIGNsb25lKCkgbWV0aG9kIGZhaWxlZCIpOworCisgICAgICAgIGlmIChiaTJjbG9uZS5lcXVhbHMoYmkxKQorICAgICAgICAgICAgfHwgYmkyY2xvbmUuZXF1YWxzKGJpZXF1YWwpCisgICAgICAgICAgICB8fCBiaTJjbG9uZS5lcXVhbHMoYmkzKQorICAgICAgICAgICAgfHwgIWJpMmNsb25lLmVxdWFscyhiaTIpKQorICAgICAgICAgICAgZXJybG4oIkVSUk9SOjIgUkJCSSdzIGNsb25lKCkgbWV0aG9kIGZhaWxlZCIpOworCisgICAgICAgIGlmICghYmkxLmdldFRleHQoKS5lcXVhbHMoYmkxY2xvbmUuZ2V0VGV4dCgpKQorICAgICAgICAgICAgfHwgIWJpMmNsb25lLmdldFRleHQoKS5lcXVhbHMoYmkyLmdldFRleHQoKSkKKyAgICAgICAgICAgIHx8IGJpMmNsb25lLmVxdWFscyhiaTFjbG9uZSkpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6IFJCQkkncyBjbG9uZSgpIG1ldGhvZCBmYWlsZWQiKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdHMgdG9TdHJpbmcoKSBtZXRob2Qgb2YgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcgorICAgICAqKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0VG9TdHJpbmcoKSB7CisgICAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgYmkxID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0Q2hhcmFjdGVySW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSk7IAorICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGJpMiA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdG9TdHJpbmcoKSIpOworICAgICAgICBiaTEuc2V0VGV4dCgiSGVsbG8gdGhlcmUiKTsKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBiaTMgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgYmkxLmNsb25lKCk7CisgICAgICAgIFN0cmluZyB0ZW1wID0gYmkxLnRvU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyB0ZW1wMiA9IGJpMi50b1N0cmluZygpOworICAgICAgICBTdHJpbmcgdGVtcDMgPSBiaTMudG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKHRlbXAyLmVxdWFscyh0ZW1wMykgfHwgdGVtcC5lcXVhbHModGVtcDIpIHx8ICF0ZW1wLmVxdWFscyh0ZW1wMykpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGVycm9yIGluIHRvU3RyaW5nKCkgbWV0aG9kIik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3RzIHRoZSBtZXRob2QgaGFzaENvZGUoKSBvZiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yCisgICAgICoqLworICAgIHB1YmxpYyB2b2lkIFRlc3RIYXNoQ29kZSgpIHsKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBiaTEgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsgCisgICAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgYmkzID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0Q2hhcmFjdGVySW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSk7IAorICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGJpMiA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgaGFzaENvZGUoKSIpOworICAgICAgICBiaTEuc2V0VGV4dCgiSGFzaCBjb2RlIik7CisgICAgICAgIGJpMi5zZXRUZXh0KCJIYXNoIGNvZGUiKTsKKyAgICAgICAgYmkzLnNldFRleHQoIkhhc2ggY29kZSIpOworICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGJpMWNsb25lID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIGJpMS5jbG9uZSgpOworICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGJpMmNsb25lID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIGJpMi5jbG9uZSgpOworICAgICAgICBpZiAoYmkxLmhhc2hDb2RlKCkgIT0gYmkxY2xvbmUuaGFzaENvZGUoKQorICAgICAgICAgICAgfHwgYmkxLmhhc2hDb2RlKCkgIT0gYmkzLmhhc2hDb2RlKCkKKyAgICAgICAgICAgIHx8IGJpMWNsb25lLmhhc2hDb2RlKCkgIT0gYmkzLmhhc2hDb2RlKCkKKyAgICAgICAgICAgIHx8IGJpMi5oYXNoQ29kZSgpICE9IGJpMmNsb25lLmhhc2hDb2RlKCkpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGlkZW50aWNhbCBvYmplY3RzIGhhdmUgZGlmZmVyZW50IGhhc2hjb2RlcyIpOworICAgICAgICAKKyAgICAgICAgaWYgKGJpMS5oYXNoQ29kZSgpID09IGJpMi5oYXNoQ29kZSgpCisgICAgICAgICAgICB8fCBiaTIuaGFzaENvZGUoKSA9PSBiaTMuaGFzaENvZGUoKQorICAgICAgICAgICAgfHwgYmkxY2xvbmUuaGFzaENvZGUoKSA9PSBiaTJjbG9uZS5oYXNoQ29kZSgpCisgICAgICAgICAgICB8fCBiaTFjbG9uZS5oYXNoQ29kZSgpID09IGJpMi5oYXNoQ29kZSgpKQorICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBkaWZmZXJlbnQgb2JqZWN0cyBoYXZlIHNhbWUgaGFzaGNvZGVzIik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAgKiBUZXN0cyB0aGUgbWV0aG9kcyBnZXRUZXh0KCkgYW5kIHNldFRleHQoKSBvZiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yCisgICAgICAqKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0R2V0U2V0VGV4dCgpIHsKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgZ2V0VGV4dCBzZXRUZXh0ICIpOworICAgICAgICBTdHJpbmcgc3RyMSA9ICJmaXJzdCBzdHJpbmcuIjsKKyAgICAgICAgU3RyaW5nIHN0cjIgPSAiU2Vjb25kIHN0cmluZy4iOworICAgICAgICAvL1J1bGVCYXNlZEJyZWFrSXRlcmF0b3IgY2hhckl0ZXIxID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0Q2hhcmFjdGVySW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSk7IAorICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHdvcmRJdGVyMSA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsgCisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIHRleHQxID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHN0cjEpOworICAgICAgICAvL0NoYXJhY3Rlckl0ZXJhdG9yIHRleHQxQ2xvbmUgPSAoQ2hhcmFjdGVySXRlcmF0b3IpIHRleHQxLmNsb25lKCk7CisgICAgICAgIC8vQ2hhcmFjdGVySXRlcmF0b3IgdGV4dDIgPSBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3Ioc3RyMik7CisgICAgICAgIHdvcmRJdGVyMS5zZXRUZXh0KHN0cjEpOworICAgICAgICBpZiAoIXdvcmRJdGVyMS5nZXRUZXh0KCkuZXF1YWxzKHRleHQxKSkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjoxIGVycm9yIGluIHNldFRleHQgb3IgZ2V0VGV4dCAiKTsKKyAgICAgICAgaWYgKHdvcmRJdGVyMS5jdXJyZW50KCkgIT0gMCkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjoxIHNldFRleHQgZGlkIG5vdCBzZXQgdGhlIGl0ZXJhdGlvbiBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0LCBpdCBpcyIKKyAgICAgICAgICAgICAgICAgICArIHdvcmRJdGVyMS5jdXJyZW50KCkgKyAiXG4iKTsgCisgICAgICAgIHdvcmRJdGVyMS5uZXh0KDIpOworICAgICAgICB3b3JkSXRlcjEuc2V0VGV4dChzdHIyKTsKKyAgICAgICAgaWYgKHdvcmRJdGVyMS5jdXJyZW50KCkgIT0gMCkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjoyIHNldFRleHQgZGlkIG5vdCByZXNldCB0aGUgaXRlcmF0aW9uIHBvc2l0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQsIGl0IGlzIgorICAgICAgICAgICAgICAgICAgICArIHdvcmRJdGVyMS5jdXJyZW50KCkgKyAiXG4iKTsgCisgICAgICAgIC8vSUNVNEogaGFzIHJlbW92ZSB0aGUgbWV0aG9kIGFkb3B0VGV4dAorICAgICAgICAvKgorICAgICAgICBjaGFySXRlcjEuYWRvcHRUZXh0KHRleHQxQ2xvbmUpOworICAgICAgICBpZiAod29yZEl0ZXIxLmdldFRleHQoKSA9PSBjaGFySXRlcjEuZ2V0VGV4dCgpCisgICAgICAgICAgICB8fCB3b3JkSXRlcjEuZ2V0VGV4dCgpICE9IHRleHQyCisgICAgICAgICAgICB8fCBjaGFySXRlcjEuZ2V0VGV4dCgpICE9IHRleHQxKQorICAgICAgICAgICAgZXJybG4oKFVuaWNvZGVTdHJpbmcpICJFUlJPUjoyIGVycm9yIGlzIGdldFRleHQgb3Igc2V0VGV4dCgpIik7CisgICAgICAgIAorICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHJiID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIHdvcmRJdGVyMS5jbG9uZSgpOworICAgICAgICByYi5hZG9wdFRleHQodGV4dDEpOworICAgICAgICBpZiAocmIuZ2V0VGV4dCgpICE9IHRleHQxKQorICAgICAgICAgICAgZXJybG4oKFVuaWNvZGVTdHJpbmcpICJFUlJPUjoxIGVycm9yIGluIGFkb3B0VGV4dCAiKTsKKyAgICAgICAgcmIuYWRvcHRUZXh0KHRleHQyKTsKKyAgICAgICAgaWYgKHJiLmdldFRleHQoKSAhPSB0ZXh0MikKKyAgICAgICAgICAgIGVycmxuKChVbmljb2RlU3RyaW5nKSAiRVJST1I6MiBlcnJvciBpbiBhZG9wdFRleHQgIik7CisgICAgICAgICovCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAgKiBUZXN0aW5nIHRoZSBtZXRob2RzIGZpcnN0KCksIG5leHQoKSwgbmV4dChpbnQpIGFuZCBmb2xsb3dpbmcoKSBvZiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yCisgICAgICAqKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Rmlyc3ROZXh0Rm9sbG93aW5nKCkgeworICAgICAgICBpbnQgcCwgcTsKKyAgICAgICAgU3RyaW5nIHRlc3RTdHJpbmcgPSAiVGhpcyBpcyBhIHdvcmQgYnJlYWsuIElzbid0IGl0PyAyLjI1IjsKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgZmlyc3QoKSBhbmQgbmV4dCgpLCBmb2xsb3dpbmcoKSB3aXRoIGN1c3RvbSBydWxlcyIpOworICAgICAgICBsb2dsbigidGVzdGluZyB3b3JkIGl0ZXJhdG9yIC0gc3RyaW5nIDotIFwiIiArIHRlc3RTdHJpbmcgKyAiXCJcbiIpOworICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHdvcmRJdGVyMSA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgd29yZEl0ZXIxLnNldFRleHQodGVzdFN0cmluZyk7CisgICAgICAgIHAgPSB3b3JkSXRlcjEuZmlyc3QoKTsKKyAgICAgICAgaWYgKHAgIT0gMCkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZmlyc3QoKSByZXR1cm5lZCIgKyBwICsgImluc3RlYWQgb2YgMCIpOworICAgICAgICBxID0gd29yZEl0ZXIxLm5leHQoOSk7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCBwLCBxLCAyMCwgIlRoaXMgaXMgYSB3b3JkIGJyZWFrIik7CisgICAgICAgIHAgPSBxOworICAgICAgICBxID0gd29yZEl0ZXIxLm5leHQoKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDIxLCAiLiIpOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IHdvcmRJdGVyMS5uZXh0KDMpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMjgsICIgSXNuJ3QgIik7CisgICAgICAgIHAgPSBxOworICAgICAgICBxID0gd29yZEl0ZXIxLm5leHQoMik7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCBwLCBxLCAzMSwgIml0PyIpOworICAgICAgICBxID0gd29yZEl0ZXIxLmZvbGxvd2luZygyKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDIsIHEsIDQsICJpcyIpOworICAgICAgICBxID0gd29yZEl0ZXIxLmZvbGxvd2luZygyMik7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCAyMiwgcSwgMjcsICJJc24ndCIpOworICAgICAgICB3b3JkSXRlcjEubGFzdCgpOworICAgICAgICBwID0gd29yZEl0ZXIxLm5leHQoKTsKKyAgICAgICAgcSA9IHdvcmRJdGVyMS5mb2xsb3dpbmcod29yZEl0ZXIxLmxhc3QoKSk7CisgICAgICAgIGlmIChwICE9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORSB8fCBxICE9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORSkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogbmV4dCgpL2ZvbGxvd2luZygpIGF0IGxhc3QgcG9zaXRpb24gcmV0dXJuZWQgIyIKKyAgICAgICAgICAgICAgICAgICAgKyBwICsgIiBhbmQgIiArIHEgKyAiIGluc3RlYWQgb2YiICsgdGVzdFN0cmluZy5sZW5ndGgoKSArICJcbiIpOyAKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBjaGFySXRlcjEgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsgCisgICAgICAgIHRlc3RTdHJpbmcgPSAiV3JpdGUgaGluZGkgaGVyZS4gXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTI0IFx1MDkzOFx1MDk0MVx1MDkwMlx1MDkyNlx1MDkzMCBcdTA5MzlcdTA5NGNcdTA5NjQiOyAKKyAgICAgICAgbG9nbG4oInRlc3RpbmcgY2hhciBpdGVyIC0gc3RyaW5nOi0gXCIiICsgdGVzdFN0cmluZyArICJcIiIpOworICAgICAgICBjaGFySXRlcjEuc2V0VGV4dCh0ZXN0U3RyaW5nKTsKKyAgICAgICAgcCA9IGNoYXJJdGVyMS5maXJzdCgpOworICAgICAgICBpZiAocCAhPSAwKQorICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBmaXJzdCgpIHJldHVybmVkIiArIHAgKyAiaW5zdGVhZCBvZiAwIik7CisgICAgICAgIHEgPSBjaGFySXRlcjEubmV4dCgpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMSwgIlciKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBjaGFySXRlcjEubmV4dCg0KTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDUsICJyaXRlIik7CisgICAgICAgIHAgPSBxOworICAgICAgICBxID0gY2hhckl0ZXIxLm5leHQoMTIpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMTcsICIgaGluZGkgaGVyZS4iKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBjaGFySXRlcjEubmV4dCgtNik7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCBwLCBxLCAxMSwgIiBoZXJlLiIpOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IGNoYXJJdGVyMS5uZXh0KDYpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMTcsICIgaGVyZS4iKTsKKyAgICAgICAgLy8gaGluZGkgc3RhcnRzIGhlcmUKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBjaGFySXRlcjEubmV4dCg0KTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDIyLCAiIFx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIpOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IGNoYXJJdGVyMS5uZXh0KDIpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMjYsICIgXHUwOTM4XHUwOTQxXHUwOTAyIik7CisKKyAgICAgICAgcSA9IGNoYXJJdGVyMS5mb2xsb3dpbmcoMjQpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgMjQsIHEsIDI2LCAiXHUwOTQxXHUwOTAyIik7CisgICAgICAgIHEgPSBjaGFySXRlcjEuZm9sbG93aW5nKDIwKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDIwLCBxLCAyMSwgIlx1MDkzMCIpOworICAgICAgICBwID0gY2hhckl0ZXIxLmZvbGxvd2luZyhjaGFySXRlcjEubGFzdCgpKTsKKyAgICAgICAgcSA9IGNoYXJJdGVyMS5uZXh0KGNoYXJJdGVyMS5sYXN0KCkpOworICAgICAgICBpZiAocCAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUgfHwgcSAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGZvbGxvd2luZygpL25leHQoKSBhdCBsYXN0IHBvc2l0aW9uIHJldHVybmVkICMiCisgICAgICAgICAgICAgICAgICAgICsgcCArICIgYW5kICIgKyBxICsgIiBpbnN0ZWFkIG9mIiArIHRlc3RTdHJpbmcubGVuZ3RoKCkpOyAKKyAgICAgICAgdGVzdFN0cmluZyA9ICJIZWxsbyEgaG93IGFyZSB5b3U/IEknYW0gZmluZS4gVGhhbmt5b3UuIEhvdyBhcmUgeW91IGRvaW5nPyBUaGlzXG4gY29zdHMgJDIwLDAwLDAwMC4iOyAKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBzZW50SXRlcjEgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRTZW50ZW5jZUluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOyAKKyAgICAgICAgbG9nbG4oInRlc3Rpbmcgc2VudGVuY2UgaXRlciAtIFN0cmluZzotIFwiIiArIHRlc3RTdHJpbmcgKyAiXCIiKTsKKyAgICAgICAgc2VudEl0ZXIxLnNldFRleHQodGVzdFN0cmluZyk7CisgICAgICAgIHAgPSBzZW50SXRlcjEuZmlyc3QoKTsKKyAgICAgICAgaWYgKHAgIT0gMCkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZmlyc3QoKSByZXR1cm5lZCIgKyBwICsgImluc3RlYWQgb2YgMCIpOworICAgICAgICBxID0gc2VudEl0ZXIxLm5leHQoKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDcsICJIZWxsbyEgIik7CisgICAgICAgIHAgPSBxOworICAgICAgICBxID0gc2VudEl0ZXIxLm5leHQoMik7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCBwLCBxLCAzMSwgImhvdyBhcmUgeW91PyBJJ2FtIGZpbmUuICIpOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IHNlbnRJdGVyMS5uZXh0KC0yKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDcsICJob3cgYXJlIHlvdT8gSSdhbSBmaW5lLiAiKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBzZW50SXRlcjEubmV4dCg0KTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDYwLCAiaG93IGFyZSB5b3U/IEknYW0gZmluZS4gVGhhbmt5b3UuIEhvdyBhcmUgeW91IGRvaW5nPyAiKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBzZW50SXRlcjEubmV4dCgpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgODMsICJUaGlzXG4gY29zdHMgJDIwLDAwLDAwMC4iKTsKKyAgICAgICAgcSA9IHNlbnRJdGVyMS5mb2xsb3dpbmcoMSk7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCAxLCBxLCA3LCAiZWxsbyEgIik7CisgICAgICAgIHEgPSBzZW50SXRlcjEuZm9sbG93aW5nKDEwKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDEwLCBxLCAyMCwgIiBhcmUgeW91PyAiKTsKKyAgICAgICAgcSA9IHNlbnRJdGVyMS5mb2xsb3dpbmcoMjApOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgMjAsIHEsIDMxLCAiSSdhbSBmaW5lLiAiKTsKKyAgICAgICAgcCA9IHNlbnRJdGVyMS5mb2xsb3dpbmcoc2VudEl0ZXIxLmxhc3QoKSk7CisgICAgICAgIHEgPSBzZW50SXRlcjEubmV4dChzZW50SXRlcjEubGFzdCgpKTsKKyAgICAgICAgaWYgKHAgIT0gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5ET05FIHx8IHEgIT0gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5ET05FKQorICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBmb2xsb3dpbmcoKS9uZXh0KCkgYXQgbGFzdCBwb3NpdGlvbiByZXR1cm5lZCAjIgorICAgICAgICAgICAgICAgICAgICArIHAgKyAiIGFuZCAiICsgcSArICIgaW5zdGVhZCBvZiIgKyB0ZXN0U3RyaW5nLmxlbmd0aCgpKTsgCisgICAgICAgIHRlc3RTdHJpbmcgPSAiSGVsbG8hIGhvd1xyXG4gKGFyZSlcciB5b3U/IEknYW0gZmluZS0gVGhhbmt5b3UuIGZvb1x1MDBhMGJhciBIb3csIGFyZSwgeW91PyBUaGlzLCBjb3N0cyAkMjAsMDAsMDAwLiI7IAorICAgICAgICBsb2dsbigiKFVuaWNvZGVTdHJpbmcpdGVzdGluZyBsaW5lIGl0ZXIgLSBTdHJpbmc6LSBcIiIgKyB0ZXN0U3RyaW5nICsgIlwiIik7CisgICAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgbGluZUl0ZXIxID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0TGluZUluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOyAKKyAgICAgICAgbGluZUl0ZXIxLnNldFRleHQodGVzdFN0cmluZyk7CisgICAgICAgIHAgPSBsaW5lSXRlcjEuZmlyc3QoKTsKKyAgICAgICAgaWYgKHAgIT0gMCkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogZmlyc3QoKSByZXR1cm5lZCIgKyBwICsgImluc3RlYWQgb2YgMCIpOworICAgICAgICBxID0gbGluZUl0ZXIxLm5leHQoKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDcsICJIZWxsbyEgIik7CisgICAgICAgIHAgPSBxOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IGxpbmVJdGVyMS5uZXh0KDQpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMjAsICJob3dcclxuIChhcmUpXHIgIik7CisgICAgICAgIHAgPSBxOworICAgICAgICBxID0gbGluZUl0ZXIxLm5leHQoLTQpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgNywgImhvd1xyXG4gKGFyZSlcciAiKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBsaW5lSXRlcjEubmV4dCg2KTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDMwLCAiaG93XHJcbiAoYXJlKVxyIHlvdT8gSSdhbSAiKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBsaW5lSXRlcjEubmV4dCgpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMzYsICJmaW5lLSAiKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBsaW5lSXRlcjEubmV4dCgyKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDU0LCAiVGhhbmt5b3UuIGZvb1x1MDBhMGJhciAiKTsKKyAgICAgICAgcSA9IGxpbmVJdGVyMS5mb2xsb3dpbmcoNjApOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgNjAsIHEsIDY0LCAicmUsICIpOworICAgICAgICBxID0gbGluZUl0ZXIxLmZvbGxvd2luZygxKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDEsIHEsIDcsICJlbGxvISAiKTsKKyAgICAgICAgcSA9IGxpbmVJdGVyMS5mb2xsb3dpbmcoMTApOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgMTAsIHEsIDEyLCAiXHJcbiIpOworICAgICAgICBxID0gbGluZUl0ZXIxLmZvbGxvd2luZygyMCk7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCAyMCwgcSwgMjUsICJ5b3U/ICIpOworICAgICAgICBwID0gbGluZUl0ZXIxLmZvbGxvd2luZyhsaW5lSXRlcjEubGFzdCgpKTsKKyAgICAgICAgcSA9IGxpbmVJdGVyMS5uZXh0KGxpbmVJdGVyMS5sYXN0KCkpOworICAgICAgICBpZiAocCAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUgfHwgcSAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGZvbGxvd2luZygpL25leHQoKSBhdCBsYXN0IHBvc2l0aW9uIHJldHVybmVkICMiCisgICAgICAgICAgICAgICAgICAgICsgcCArICIgYW5kICIgKyBxICsgIiBpbnN0ZWFkIG9mIiArIHRlc3RTdHJpbmcubGVuZ3RoKCkpOyAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdGluZyB0aGUgbWV0aG9kcyBsYXN0dCgpLCBwcmV2aW91cygpLCBhbmQgcHJlY2VkaW5nKCkgb2YgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcgorICAgICAqKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0TGFzdFByZXZpb3VzUHJlY2VkaW5nKCkgeworICAgICAgICBpbnQgcCwgcTsKKyAgICAgICAgU3RyaW5nIHRlc3RTdHJpbmcgPSAiVGhpcyBpcyBhIHdvcmQgYnJlYWsuIElzbid0IGl0PyAyLjI1IGRvbGxhcnMiOworICAgICAgICBsb2dsbigiVGVzdGluZyBsYXN0KCkscHJldmlvdXMoKSwgcHJlY2VkaW5nKCkgd2l0aCBjdXN0b20gcnVsZXMiKTsKKyAgICAgICAgbG9nbG4oInRlc3Rpbmcgd29yZCBpdGVyYXRpb24gZm9yIHN0cmluZyBcIiIgKyB0ZXN0U3RyaW5nICsgIlwiIik7CisgICAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3Igd29yZEl0ZXIxID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOyAKKyAgICAgICAgd29yZEl0ZXIxLnNldFRleHQodGVzdFN0cmluZyk7CisgICAgICAgIHAgPSB3b3JkSXRlcjEubGFzdCgpOworICAgICAgICBpZiAocCAhPSB0ZXN0U3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGZpcnN0KCkgcmV0dXJuZWQiICsgcCArICJpbnN0ZWFkIG9mIiArIHRlc3RTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICB9CisgICAgICAgIHEgPSB3b3JkSXRlcjEucHJldmlvdXMoKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDM3LCAiZG9sbGFycyIpOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IHdvcmRJdGVyMS5wcmV2aW91cygpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMzYsICIgIik7CisgICAgICAgIHEgPSB3b3JkSXRlcjEucHJlY2VkaW5nKDI1KTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDI1LCBxLCAyMiwgIklzbiIpOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IHdvcmRJdGVyMS5wcmV2aW91cygpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMjEsICIgIik7CisgICAgICAgIHEgPSB3b3JkSXRlcjEucHJlY2VkaW5nKDIwKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDIwLCBxLCAxNSwgImJyZWFrIik7CisgICAgICAgIHAgPSB3b3JkSXRlcjEucHJlY2VkaW5nKHdvcmRJdGVyMS5maXJzdCgpKTsKKyAgICAgICAgaWYgKHAgIT0gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5ET05FKQorICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBwcmVjZWRpbmcoKSAgYXQgc3RhcnRpbmcgcG9zaXRpb24gcmV0dXJuZWQgIyIgKyBwICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgdGVzdFN0cmluZyA9ICJXcml0ZSBoaW5kaSBoZXJlLiBcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQgXHUwOTM4XHUwOTQxXHUwOTAyXHUwOTI2XHUwOTMwIFx1MDkzOVx1MDk0Y1x1MDk2NCI7IAorICAgICAgICBsb2dsbigidGVzdGluZyBjaGFyYWN0ZXIgaXRlcmF0aW9uIGZvciBzdHJpbmcgXCIgIiArIHRlc3RTdHJpbmcgKyAiXCIgXG4iKTsKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBjaGFySXRlcjEgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgY2hhckl0ZXIxLnNldFRleHQodGVzdFN0cmluZyk7CisgICAgICAgIHAgPSBjaGFySXRlcjEubGFzdCgpOworICAgICAgICBpZiAocCAhPSB0ZXN0U3RyaW5nLmxlbmd0aCgpKQorICAgICAgICAgICAgZXJybG4oIkVSUk9SOiBmaXJzdCgpIHJldHVybmVkIiArIHAgKyAiaW5zdGVhZCBvZiIgKyB0ZXN0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgcSA9IGNoYXJJdGVyMS5wcmV2aW91cygpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgMzEsICJcdTA5NjQiKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBjaGFySXRlcjEucHJldmlvdXMoKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDI5LCAiXHUwOTM5XHUwOTRjIik7CisgICAgICAgIHEgPSBjaGFySXRlcjEucHJlY2VkaW5nKDI2KTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDI2LCBxLCAyMywgIlx1MDkzOFx1MDk0MVx1MDkwMiIpOworICAgICAgICBxID0gY2hhckl0ZXIxLnByZWNlZGluZygxNik7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCAxNiwgcSwgMTUsICJlIik7CisgICAgICAgIHAgPSBxOworICAgICAgICBxID0gY2hhckl0ZXIxLnByZXZpb3VzKCk7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCBwLCBxLCAxNCwgInIiKTsKKyAgICAgICAgY2hhckl0ZXIxLmZpcnN0KCk7CisgICAgICAgIHAgPSBjaGFySXRlcjEucHJldmlvdXMoKTsKKyAgICAgICAgcSA9IGNoYXJJdGVyMS5wcmVjZWRpbmcoY2hhckl0ZXIxLmZpcnN0KCkpOworICAgICAgICBpZiAocCAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUgfHwgcSAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6IHByZXZpb3VzKCkvcHJlY2VkaW5nKCkgYXQgc3RhcnRpbmcgcG9zaXRpb24gcmV0dXJuZWQgIyIKKyAgICAgICAgICAgICAgICAgICAgKyBwICsgIiBhbmQgIiArIHEgKyAiIGluc3RlYWQgb2YgMFxuIik7IAorICAgICAgICB0ZXN0U3RyaW5nID0gIkhlbGxvISBob3cgYXJlIHlvdT8gSSdhbSBmaW5lLiBUaGFua3lvdS4gSG93IGFyZSB5b3UgZG9pbmc/IFRoaXNcbiBjb3N0cyAkMjAsMDAsMDAwLiI7IAorICAgICAgICBsb2dsbigidGVzdGluZyBzZW50ZW5jZSBpdGVyIC0gU3RyaW5nOi0gXCIiICsgdGVzdFN0cmluZyArICJcIiIpOworICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHNlbnRJdGVyMSA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmdldFNlbnRlbmNlSW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSk7IAorICAgICAgICBzZW50SXRlcjEuc2V0VGV4dCh0ZXN0U3RyaW5nKTsKKyAgICAgICAgcCA9IHNlbnRJdGVyMS5sYXN0KCk7CisgICAgICAgIGlmIChwICE9IHRlc3RTdHJpbmcubGVuZ3RoKCkpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6IGxhc3QoKSByZXR1cm5lZCIgKyBwICsgImluc3RlYWQgb2YgIiArIHRlc3RTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBxID0gc2VudEl0ZXIxLnByZXZpb3VzKCk7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCBwLCBxLCA2MCwgIlRoaXNcbiBjb3N0cyAkMjAsMDAsMDAwLiIpOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IHNlbnRJdGVyMS5wcmV2aW91cygpOworICAgICAgICBkb1Rlc3QodGVzdFN0cmluZywgcCwgcSwgNDEsICJIb3cgYXJlIHlvdSBkb2luZz8gIik7CisgICAgICAgIHEgPSBzZW50SXRlcjEucHJlY2VkaW5nKDQwKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDQwLCBxLCAzMSwgIlRoYW5reW91LiIpOworICAgICAgICBxID0gc2VudEl0ZXIxLnByZWNlZGluZygyNSk7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCAyNSwgcSwgMjAsICJJJ2FtICIpOworICAgICAgICBzZW50SXRlcjEuZmlyc3QoKTsKKyAgICAgICAgcCA9IHNlbnRJdGVyMS5wcmV2aW91cygpOworICAgICAgICBxID0gc2VudEl0ZXIxLnByZWNlZGluZyhzZW50SXRlcjEuZmlyc3QoKSk7CisgICAgICAgIGlmIChwICE9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORSB8fCBxICE9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORSkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogcHJldmlvdXMoKS9wcmVjZWRpbmcoKSBhdCBzdGFydGluZyBwb3NpdGlvbiByZXR1cm5lZCAjIgorICAgICAgICAgICAgICAgICAgICArIHAgKyAiIGFuZCAiICsgcSArICIgaW5zdGVhZCBvZiAwXG4iKTsgCisgICAgICAgIHRlc3RTdHJpbmcgPSAiSGVsbG8hIGhvdyBhcmUgeW91PyBJJ2FtIGZpbmUuIFRoYW5reW91LiBIb3cgYXJlIHlvdSBkb2luZz8gVGhpc1xuIGNvc3RzICQyMCwwMCwwMDAuIjsgCisgICAgICAgIGxvZ2xuKCJ0ZXN0aW5nIGxpbmUgaXRlciAtIFN0cmluZzotIFwiIiArIHRlc3RTdHJpbmcgKyAiXCIiKTsKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBsaW5lSXRlcjEgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRMaW5lSW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIGxpbmVJdGVyMS5zZXRUZXh0KHRlc3RTdHJpbmcpOworICAgICAgICBwID0gbGluZUl0ZXIxLmxhc3QoKTsKKyAgICAgICAgaWYgKHAgIT0gdGVzdFN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogbGFzdCgpIHJldHVybmVkIiArIHAgKyAiaW5zdGVhZCBvZiAiICsgdGVzdFN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIHEgPSBsaW5lSXRlcjEucHJldmlvdXMoKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDcyLCAiJDIwLDAwLDAwMC4iKTsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSBsaW5lSXRlcjEucHJldmlvdXMoKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIHAsIHEsIDY2LCAiY29zdHMgIik7CisgICAgICAgIHEgPSBsaW5lSXRlcjEucHJlY2VkaW5nKDQwKTsKKyAgICAgICAgZG9UZXN0KHRlc3RTdHJpbmcsIDQwLCBxLCAzMSwgIlRoYW5reW91LiIpOworICAgICAgICBxID0gbGluZUl0ZXIxLnByZWNlZGluZygyNSk7CisgICAgICAgIGRvVGVzdCh0ZXN0U3RyaW5nLCAyNSwgcSwgMjAsICJJJ2FtICIpOworICAgICAgICBsaW5lSXRlcjEuZmlyc3QoKTsKKyAgICAgICAgcCA9IGxpbmVJdGVyMS5wcmV2aW91cygpOworICAgICAgICBxID0gbGluZUl0ZXIxLnByZWNlZGluZyhzZW50SXRlcjEuZmlyc3QoKSk7CisgICAgICAgIGlmIChwICE9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORSB8fCBxICE9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORSkKKyAgICAgICAgICAgIGVycmxuKCJFUlJPUjogcHJldmlvdXMoKS9wcmVjZWRpbmcoKSBhdCBzdGFydGluZyBwb3NpdGlvbiByZXR1cm5lZCAjIgorICAgICAgICAgICAgICAgICAgICArIHAgKyAiIGFuZCAiICsgcSArICIgaW5zdGVhZCBvZiAwXG4iKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdHMgdGhlIG1ldGhvZCBJc0JvdW5kYXJ5KCkgb2YgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcgorICAgICAqKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SXNCb3VuZGFyeSgpIHsKKyAgICAgICAgU3RyaW5nIHRlc3RTdHJpbmcxID0gIldyaXRlIGhlcmUuIFx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCBcdTA5MzhcdTA5NDFcdTA5MDJcdTA5MjZcdTA5MzAgXHUwOTM5XHUwOTRjXHUwOTY0IjsKKyAgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBjaGFySXRlcjEgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgY2hhckl0ZXIxLnNldFRleHQodGVzdFN0cmluZzEpOworICAgICAgICBpbnQgYm91bmRzMVtdID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDE0LCAxNSwgMTYsIDE3LCAyMCwgMjEsIDIyLCAyMywgMjUsIDI2fTsKKyAgICAgICAgZG9Cb3VuZGFyeVRlc3QoY2hhckl0ZXIxLCB0ZXN0U3RyaW5nMSwgYm91bmRzMSk7CisgICAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3Igd29yZEl0ZXIyID0gKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgICAgICB3b3JkSXRlcjIuc2V0VGV4dCh0ZXN0U3RyaW5nMSk7CisgICAgICAgIGludCBib3VuZHMyW10gPSB7MCwgNSwgNiwgMTAsIDExLCAxMiwgMTYsIDE3LCAyMiwgMjMsIDI2fTsKKyAgICAgICAgZG9Cb3VuZGFyeVRlc3Qod29yZEl0ZXIyLCB0ZXN0U3RyaW5nMSwgYm91bmRzMik7CisgICAgfQorICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy9JbnRlcm5hbCBzdWJyb3V0aW5lcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyogSW50ZXJuYWwgc3Vicm91dGluZSB1c2VkIGJ5IFRlc3RJc0JvdW5kYXJ5KCkgKi8gCisgICAgcHVibGljIHZvaWQgZG9Cb3VuZGFyeVRlc3QoUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBiaSwgU3RyaW5nIHRleHQsIGludFtdIGJvdW5kYXJpZXMpIHsKKyAgICAgICAgbG9nbG4oInRlc3RJc0JvdW5kYXJ5KCk6Iik7CisgICAgICAgIGludCBwID0gMDsKKyAgICAgICAgYm9vbGVhbiBpc0I7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBpc0IgPSBiaS5pc0JvdW5kYXJ5KGkpOworICAgICAgICAgICAgbG9nbG4oImJpLmlzQm91bmRhcnkoIiArIGkgKyAiKSAtPiAiICsgaXNCKTsKKyAgICAgICAgICAgIGlmIChpID09IGJvdW5kYXJpZXNbcF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQikKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIldyb25nIHJlc3VsdCBmcm9tIGlzQm91bmRhcnkoKSBmb3IgIiArIGkgKyAiOiBleHBlY3RlZCB0cnVlLCBnb3QgZmFsc2UiKTsKKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0IpCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJXcm9uZyByZXN1bHQgZnJvbSBpc0JvdW5kYXJ5KCkgZm9yICIgKyBpICsgIjogZXhwZWN0ZWQgZmFsc2UsIGdvdCB0cnVlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLypJbnRlcm5hbCBzdWJyb3V0aW5lIHVzZWQgZm9yIGNvbXBhcmlzaW9uIG9mIGV4cGVjdGVkIGFuZCBhY3F1aXJlZCByZXN1bHRzICovCisgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyB0ZXN0U3RyaW5nLCBpbnQgc3RhcnQsIGludCBnb3RvZmZzZXQsIGludCBleHBlY3RlZE9mZnNldCwgU3RyaW5nIGV4cGVjdGVkU3RyaW5nKSB7CisgICAgICAgIFN0cmluZyBzZWxlY3RlZDsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkID0gZXhwZWN0ZWRTdHJpbmc7CisgICAgICAgIGlmIChnb3RvZmZzZXQgIT0gZXhwZWN0ZWRPZmZzZXQpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6KioqKnJldHVybmVkICMiICsgZ290b2Zmc2V0ICsgIiBpbnN0ZWFkIG9mICMiICsgZXhwZWN0ZWRPZmZzZXQpOworICAgICAgICBpZiAoc3RhcnQgPD0gZ290b2Zmc2V0KSB7CisgICAgICAgICAgICBzZWxlY3RlZCA9IHRlc3RTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBnb3RvZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VsZWN0ZWQgPSB0ZXN0U3RyaW5nLnN1YnN0cmluZyhnb3RvZmZzZXQsIHN0YXJ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXNlbGVjdGVkLmVxdWFscyhleHBlY3RlZCkpCisgICAgICAgICAgICBlcnJsbigiRVJST1I6KioqKnNlbGVjdGVkIFwiIiArIHNlbGVjdGVkICsgIlwiIGluc3RlYWQgb2YgXCIiICsgZXhwZWN0ZWQgKyAiXCIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nbG4oIioqKipzZWxlY3RlZCBcIiIgKyBzZWxlY3RlZCArICJcIiIpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcmJiaS9SQkJJVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvUkJCSVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YzBkYjkyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvUkJCSVRlc3QuamF2YQpAQCAtMCwwICsxLDk1MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvUkJCSVRlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNToxNSAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnJiYmk7CisgCisvL1JlZ3Jlc3Npb24gdGVzdGluZyBvZiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlJ1bGVCYXNlZEJyZWFrSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworaW1wb3J0IGphdmEuaW8uKjsgIAorCitwdWJsaWMgY2xhc3MgUkJCSVRlc3QgZXh0ZW5kcyBUZXN0Rm13ayAKK3sgIAorICBwcml2YXRlIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgY2hhcmFjdGVyQnJlYWs7CisgIHByaXZhdGUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciB3b3JkQnJlYWs7CisgIHByaXZhdGUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBsaW5lQnJlYWs7CisgIHByaXZhdGUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBzZW50ZW5jZUJyZWFrOworICAgIAorICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBuZXcgUkJCSVRlc3QoKS5ydW4oYXJncyk7CisgIH0KKworICBwdWJsaWMgUkJCSVRlc3QoKSB7IAorICB9CisgIAorICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGhhbGZOQSA9ICJcdTA5MjhcdTA5NGRcdTIwMGQiOyAgLypoYWxmZm9ybSBOQSA9IGRldmFuaWdpcmkgTkEgKyB2aXJhbWEoc3VwcmVzc2VzIGluaGVyZW50IHZvd2VsKSsgemVybyB3aWR0aCBqb2luZXIgKi8gIAorICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgaGFsZlNBICA9ICJcdTA5MzhcdTA5NGRcdTIwMGQiOyAKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGhhbGZDSEEgPSAiXHUwOTFhXHUwOTRkXHUyMDBkIjsgCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBoYWxmS0EgID0gIlx1MDkxNVx1MDk0ZFx1MjAwZCI7IAorICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVhZFRBICA9ICJcdTA5MjRcdTA5NGQiOworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBkZWFkUkEgICA9ICJcdTA5MzBcdTA5NGQiOyAgLypkZWFkZm9ybSBSQSA9IGRldmFuYWdhcmkgUkEgKyB2aXJhbWEqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVhZFBIQSAgPSAiXHUwOTJiXHUwOTRkIjsgIC8qZGVhZGZvcm0gUEhBID0gZGV2YW5hZ2FyaSBQSEEgKyB2aXJhbWEqLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVhZFRUSEEgPSAiXHUwOTIwXHUwOTRkIjsgCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBkZWFkUEEgICA9ICJcdTA5MmFcdTA5NGQiOyAKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGRlYWRTQSAgID0gIlx1MDkzOFx1MDk0ZCI7ICAgLypkZXZhbmFnYXJpIHZpc2FyZ2EgbG9va3MgbGlrZSBhIGVuZ2xpc2ggY29sb24qLworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgdmlzYXJnYSAgPSAiXHUwOTAzIjsKKworCisgIC8vdGVzdHMgZGVmYXVsdCBydWxlcyBiYXNlZCBjaGFyYWN0ZXIgaXRlcmF0aW9uCisgIHB1YmxpYyB2b2lkIFRlc3REZWZhdWx0UnVsZUJhc2VkQ2hhcmFjdGVySXRlcmF0aW9uKCl7CisgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHJiYmk9KFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZSgpOworICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIFJCQkkgZm9yIGNoYXJhY3RlciBpdGVyYXRpb24gYnkgdXNpbmcgZGVmYXVsdCBydWxlcyIpOworICAgICAgLy9mZXRjaCB0aGUgcnVsZXMgdXNlZCB0byBjcmVhdGUgdGhlIGFib3ZlIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IKKyAgICAgIFN0cmluZyBkZWZhdWx0UnVsZXM9cmJiaS50b1N0cmluZygpOworICAgICAgCisgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGNoYXJJdGVyRGVmYXVsdD1udWxsOworICAgICAgdHJ5eworICAgICAgY2hhckl0ZXJEZWZhdWx0ICAgPSBuZXcgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcihkZWZhdWx0UnVsZXMpOyAKKyAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKXsKKyAgICAgICAgICBlcnJsbigiRVJST1I6IGZhaWxlZCBjb25zdHJ1Y3Rpb24gaW4gVGVzdERlZmF1bHRSdWxlQmFzZWRDaGFyYWN0ZXJJdGVyYXRpb24oKSIrIGlhZS50b1N0cmluZygpKTsKKyAgICAgIH0KKworICAgICAgVmVjdG9yIGNoYXJkYXRhID0gbmV3IFZlY3RvcigpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiSCIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiZSIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgibCIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgibCIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgibyIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiZVx1MDMwMSIpOyAgICAgICAgICAgICAgICAgICAvL2FjdXRlRQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiJiIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiZVx1MDMwMyIpOyAgICAgICAgICAgICAgICAgICAvL3RpbGRhRQorICAgICAgLy9kZXZhbmFnaXJpIGNoYXJhY3RlcnMgZm9yIEhpbmRpIHN1cHBvcnQKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDkwNiIpOyAgICAgICAgICAgICAgICAgICAgLy9kZXZhbmFnaXJpIEFBCisgICAgICAvL2NoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDkzZVx1MDkwMSIpOyAgICAgICAgICAgICAgLy9kZXZhbmFnaXJpIHZvd2Vsc2lnbiBBQSsgY2hhbmRyYWJpbmRodQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTE2XHUwOTQ3Iik7ICAgICAgICAgICAgICAvL2RldmFuYWdpcmkgS0hBK3Zvd2Vsc2lnbiBFCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MzhcdTA5NDFcdTA5MDIiKTsgICAgICAgIC8vZGV2YW5hZ2lyaSBTQSt2b3dlbHNpZ24gVSArIGFudXN2YXJhKGJpbmR1KQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTI2Iik7ICAgICAgICAgICAgICAgICAgICAvL2RldmFuYWdpcmkgY29uc29uYW50IERBCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MzAiKTsgICAgICAgICAgICAgICAgICAgIC8vZGV2YW5hZ2lyaSBjb25zb25hbnQgUkEKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDkzOVx1MDk0YyIpOyAgICAgICAgICAgICAgLy9kZXZhbmFnaXJpIEhBK3Zvd2VsIHNpZ24gQUkKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDk2NCIpOyAgICAgICAgICAgICAgICAgICAgLy9kZXZhbmFnaXJpIGRhbmRhCisgICAgICAvL2VuZCBoaW5kaSBjaGFyYWN0ZXJzICAgICAgCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJBXHUwMzAyIik7ICAgICAgICAgICAgICAgICAgIC8vIGNpcmN1bWZsZXhBIAorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiaVx1MDMwMSIpOyAgICAgICAgICAgICAgICAgICAvLyBhY3V0ZUJlbG93SSAgIAorICAgICAgLy8gY29uam9pbmluZyBqYW1vLi4uIAorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUxMTA5XHUxMTYxXHUxMWJjIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTExMTJcdTExNjFcdTExYmMiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlxuIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcclxuIik7ICAgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgQ1JMRiBzZXF1ZW5jZXMgdG9nZXRoZXIgIAorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiU1x1MDMwMCIpOyAgICAgICAgICAgICAgICAgICAvL2dyYXZlUworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiaVx1MDMwMSIpOyAgICAgICAgICAgICAgICAgICAvLyBhY3V0ZUJlbG93SQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiISIpOworCisgICAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgc3RyaW5nIG9mIEtvcmVhbiBjaGFyYWN0ZXJzIChJIGZvdW5kIGl0IGluIHRoZSBZZWxsb3cgUGFnZXMKKyAgICAgIC8vIGFkIGZvciB0aGUgS29yZWFuIFByZXNieXRlcmlhbiBDaHVyY2ggb2YgU2FuIEZyYW5jaXNjbywgYW5kIEkgaG9wZSBJIHRyYW5zY3JpYmVkCisgICAgICAvLyBpdCBjb3JyZWN0bHkpLCBmaXJzdCBhcyBwcmVjb21wb3NlZCBzeWxsYWJsZXMsIGFuZCB0aGVuIGFzIGNvbmpvaW5pbmcgamFtby4KKyAgICAgIC8vIEJvdGggc2VxdWVuY2VzIHNob3VsZCBiZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIGFuZCBicmVhayB0aGUgc2FtZSB3YXkuCisgICAgICAvLyBwcmVjb21wb3NlZCBzeWxsYWJsZXMuLi4KKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1YzBjMSIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHVkNTZkIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdWQ1NWMiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1Yzc3OCIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHVjNWYwIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdWQ1NjkiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1YzdhNSIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHViODVjIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdWFkNTAiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1ZDY4YyIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgIC8vIGNvbmpvaW5pbmcgamFtby4uLgorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUxMTA5XHUxMTYxXHUxMWJjIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTExMTJcdTExNjFcdTExYmMiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MTExMlx1MTE2MVx1MTFhYiIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUxMTBiXHUxMTc1XHUxMWFiIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTExMGJcdTExNjdcdTExYWIiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MTExMlx1MTE2MVx1MTFiOCIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUxMTBjXHUxMTYxXHUxMWJjIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTExMDVcdTExNjkiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MTEwMFx1MTE2ZCIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUxMTEyXHUxMTZjIik7CisKKyAgICAgIC8vVGVzdGluZyB0aGUgQnJlYWtJdGVyYXRvciBmb3IgZGV2YW5hZ2FyaSBzY3JpcHQKKyAgICAgIC8vZGV2YW5hZ2FyaSBjaGFyYWN0ZXJzIGZvciBIaW5kaSBzdXBwb3J0CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MDYiKTsgICAgICAgICAgICAgICAgICAgIC8vZGV2YW5hZ2FyaSBBQQorICAgICAgLy9oaW5kaSBjaGFyYWN0ZXIgYnJlYWsgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGl0IAorICAgICAgLy8gZG9lc24ndCBicmVhayBpbi1iZXR3ZWVuIGEgdm93ZWxzaWduIGFuZCBhIGNoYW5kcmFiaW5kdQorICAgIC8vICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5M2VcdTA5MDEiKTsgICAgICAgICAgICAgIC8vZGV2YW5hZ2FyaSB2b3dlbHNpZ24gQUErIGNoYW5kcmFiaW5kdQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTE2XHUwOTQ3Iik7ICAgICAgICAgICAgICAvL2RldmFuYWdhcmkgS0hBK3Zvd2Vsc2lnbiBFCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MzhcdTA5NDFcdTA5MDIiKTsgICAgICAgIC8vZGV2YW5hZ2FyaSBTQSt2b3dlbHNpZ24gVSArIGFudXN2YXJhKGJpbmR1KQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTI2Iik7ICAgICAgICAgICAgICAgICAgICAvL2RldmFuYWdhcmkgY29uc29uYW50IERBCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MzAiKTsgICAgICAgICAgICAgICAgICAgIC8vZGV2YW5hZ2FyaSBjb25zb25hbnQgUkEKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDkzOVx1MDk0YyIpOyAgICAgICAgICAgICAgLy9kZXZhbmFnYXJpIGNvbnNvbmFudCBIQStkZXBlbmRlbnQgdm93ZWwgc2lnbiBBSQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTY0Iik7ICAgICAgICAgICAgICAgICAgICAvL2RldmFuYWdhcmkgZGFuZGEKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDk1MCIpOyAgICAgICAgICAgICAgICAgICAgLy9kZXZhbmFnYXJpIE9NIAorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTE1XHUwOTQzIik7ICAgICAgICAgICAgICAvL2RldmFuYWdhcmkgS0ErZGVwZW5kZW50IHZvd2VsIFJJLT5LUkkKKworICAgICAgLy9kZXBlbmRlbnQgaGFsZi1mb3JtcworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudChoYWxmU0ErICJcdTA5MjQiKTsgICAgICAgICAgICAgLy9oYWxmU0ErYmFzZSBjb25zb25hbnQgVEEtPlNUQQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudChoYWxmU0ErICJcdTA5MjUiKTsgICAgICAgICAgICAgLy9oYWxmU0ErYmFzZSBjb25zb25hbnQgVEhBLT5TVEhBCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KGhhbGZTQSsgIlx1MDkyZSIpOyAgICAgICAgICAgICAvL2hhbGZTQStiYXNlIGNvbnNvbmFudCBNQS0+U01BCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KGhhbGZDSEErICJcdTA5MWIiKTsgICAgICAgICAgICAvL2hhbGZDSEErYmFzZSBjb25zb25hbnQgQ0hIQS0+Q0hISEEKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoaGFsZk5BKyAiXHUwOTE3Iik7ICAgICAgICAgICAgIC8vaGFsZk5BK2Jhc2UgY29uc29uYW50IEdBLT5OR0EKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDkyYVx1MDk0ZFx1MjAwZFx1MDkyZiIpOyAgIC8vaGFsZlBBKFBBK3ZpcmFtYSt6ZXJvd2lkdGhqb2luZXIrYmFzZSBjb25zb25hbnQgWUEtPlBZQQorCisKKyAgICAgIC8vY29uc29uYW50IFJBIHJ1bGVzIC0tLS0tLS0tLS0KKyAgICAgIC8vaWYgdGhlIGRlYWQgY29uc29uYW50IFJBIHByZWNlZGVzIGVpdGhlciBhIGNvbnNvbmFudCBvciBhbiBpbmRlcGVuZGVudCB2b3dlbCwKKyAgICAgIC8vdGhlbiBpdCBpcyByZXBsYWNlZCBieSBpdHMgc3VwZXJzY3JpcHQgbm9uLXNwYWNpbmcgbWFyaworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudChkZWFkUkErICJcdTA5MTUiKTsgICAgICAgICAgICAgLy9kZWFkUkErZGV2YW5hZ2FyaSBjb25zb25hbnQgS0EtPktBK3N1cGVyUkEgCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KGRlYWRSQSsgIlx1MDkyMyIpOyAgICAgICAgICAgICAvL2RlYWRSQStkZXZhbmFnYXJpIGNvbnNvbmFudCBOTkEtPk5OQStzdXBlclJBCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KGRlYWRSQSsgIlx1MDkxNyIpOyAgICAgICAgICAgICAvL2RlYWRSQStkZXZhbmFnYXJpIGNvbnNvbmFudCBHQS0+R0Erc3VwZXJSQQorICAgLy8gICBjaGFyZGF0YS5hZGRFbGVtZW50KGRlYWRSQSsgIlx1MDk2MCIpOyAgICAgICAgICAgLy9kZWFkUkErZGV2YW5hZ2FyaSBjb3NvbmFudCBSUkktPlJSSStzdXBlclJBCisgICAgICAKKyAgICAgIC8vaWYgYW55IGRlYWQgY29uc29uYW50KG90aGVyIHRoYW4gZGVhZCBSQSlwcmVjZWRlcyB0aGUgY29uc29uYW50IFJBLCB0aGVuCisgICAgICAvL2l0IGlzIHJlcGxhY2VkIHdpdGggaXRzIG5vbWluYWwgZm9ybWEgbmQgUkEgaXMgcmVwbGFjZWQgYnkgdGhlIHN1YnNjcmlwdCBub24tc3BhY2luZyBtYXJrLgorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudChkZWFkUEhBKyAiXHUwOTMwIik7ICAgICAgICAgICAgLy9kZWFkUEhBK2RldmFuYWdhcmkgY29uc29uYW50IFJBLT5QSEErc3ViUkEKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoZGVhZFBBKyAiXHUwOTMwIik7ICAgICAgICAgICAgIC8vZGVhZFBBK2RldmFuYWdhcmkgY29uc29uYW50IFJBLT5QQStzdWJSQQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudChkZWFkVFRIQSsgIlx1MDkzMCIpOyAgICAgICAgICAgLy9kZWFkVFRIQStkZXZhbmFnYXJpIGNvbnNvbmFudCBSQS0+VFRIQStzdWJSQQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudChkZWFkVEErICJcdTA5MzAiKTsgICAgICAgICAgICAgLy9kZWFkVEErUkEtPlRSQSAKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDkzNlx1MDk0ZFx1MDkzMCIpOyAgICAgICAgIC8vZGVhZFNIQShTSEErdmlyYW1hKStSQS0+U0hSQSAKKworICAgICAgLy9jb25qdWN0IGxpZ2F0dXJlcworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTE1XHUwOTRkXHUwOTM3Iik7ICAgICAgICAgLy9kZWFkS0EoS0ErdmlyYW1hKSBmb2xsb3dlZCBieSBTU0hBIHdyYXBzIHVwIGludG8gYSBzaW5nbGUgY2hhcmFjdGVyIEtTU0hBCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KGRlYWRUQSsgIlx1MDkyNCIpOyAgICAgICAgICAgICAgLy9kZWFkVEErVEEgd3JhcHMgdXAgaW50byBnbHlwaCBUVEhBCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MjZcdTA5NGRcdTA5MzUiKTsgICAgICAgICAvL2RlYWREQShEQSt2aXJhbWEpK1ZBIHdyYXBzIHVwIGludG8gRFZBCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MWNcdTA5NGRcdTA5MWUiKTsgICAgICAgICAvL2RlYWRKQShKQSt2aXJhbWEpK05ZQSB3cmFwcyB1cCBpbnRvIEpOWUEKKyAgICAgCisKKworICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdChjaGFySXRlckRlZmF1bHQsIGNoYXJkYXRhKTsKKworICB9CisKKyAgcHVibGljIHZvaWQgVGVzdERlZmF1bHRSdWxlQmFzZWRXb3JkSXRlcmF0aW9uKCl7CisgICAgICBsb2dsbigiVGVzdGluZyB0aGUgUkJCSSBmb3Igd29yZCBpdGVyYXRpb24gdXNpbmcgZGVmYXVsdCBydWxlcyIpOworICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciByYmJpPShSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKVJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKCk7CisgICAgICAvL2ZldGNoIHRoZSBydWxlcyB1c2VkIHRvIGNyZWF0ZSB0aGUgYWJvdmUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcgorICAgICAgU3RyaW5nIGRlZmF1bHRSdWxlcz1yYmJpLnRvU3RyaW5nKCk7CisgICAgICAKKyAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3Igd29yZEl0ZXJEZWZhdWx0PW51bGw7CisgICAgICB0cnl7CisgICAgICB3b3JkSXRlckRlZmF1bHQgICA9IG5ldyBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKGRlZmF1bHRSdWxlcyk7IAorICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpeworICAgICAgICAgIGVycmxuKCJFUlJPUjogZmFpbGVkIGNvbnN0cnVjdGlvbiBpbiBUZXN0RGVmYXVsdFJ1bGVCYXNlZFdvcmRJdGVyYXRpb24oKSAtLSBjdXN0b20gcnVsZXMiKyBpYWUudG9TdHJpbmcoKSk7CisgICAgICB9CisKKyAgICAgIFZlY3RvciB3b3JkZGF0YSA9IG5ldyBWZWN0b3IoKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQgKCJXcml0ZSIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCAoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQgKCJ3b3JkcnVsZXMiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQgKCIuIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJhbHBoYS1iZXRhLWdhbW1hIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7ICAgICAgCisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5MmZcdTA5MzkiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDkzOVx1MDkzZiIgKyBoYWxmTkEgKyAiXHUwOTI2XHUwOTQwIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5MzlcdTA5NDgiKTsKKyAgICAgIC8vICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5NjQiKTsgICAvL2RhbmRhIGZvbGxvd2VkIGJ5IGEgc3BhY2UKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDkwNVx1MDkzZVx1MDkyYSIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTM4XHUwOTNmXHUwOTE2XHUwOTRiXHUwOTE3XHUwOTQ3Iik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCI/Iik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5NjhcdTA5NjYuXHUwOTY5XHUwOTZmIik7ICAgICAgICAgICAgLy9oaW5kaSBudW1iZXJzCisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5NjdcdTA5NjZcdTA5NjYuXHUwOTY2XHUwOTY2JSIpOyAgICAgLy9wb3N0bnVtZXJpYworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUyMGE4XHUwOTY3LFx1MDk2N1x1MDk2Nlx1MDk2Ni5cdTA5NjZcdTA5NjYiKTsgLy9wcmUtbnVtYmVyIEluZGlhIGN1cnJlbmN5IHN5bWJvbCBScy5cdTIwYUQKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDkwNVx1MDkyZVx1MDkxYyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXG4iKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoaGFsZlNBKyJcdTA5MzVcdTA5MjRcdTA5MDIiK2RlYWRUQSsiXHUwOTMwIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcciIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiSXQncyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiJDMwLjEwIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7ICAKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDBBMiIpOyAvL2NlbnQgc2lnbgorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwMEEzIik7IC8vcG91bmQgc2lnbgorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwMEE0Iik7IC8vY3VycmVuY3kgc2lnbgorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwMEE1Iik7IC8veWVuIHNpZ24KKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoImFscGhhLWJldGEtZ2FtbWEiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIkJhZGdlcyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiPyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiQkFER0VTIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIhIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIxMDAwLDIzMyw0NTYuMDAwIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIxLDIzLjMyMiUiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIjEyMy4xMjIyIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTAwMjQxMjMsMDAwLjIwIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIxNzkuMDFcdTAwMjUiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlgiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIk5vdyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHIiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoImlzIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcbiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgidGhlIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcclxuIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJ0aW1lIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdWM1ZjBcdWQ1NjkiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1YzdhNVx1Yjg1Y1x1YWQ1MFx1ZDY4YyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgLy8gY29uam9pbmluZyBqYW1vLi4uCisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTExMDlcdTExNjFcdTExYmNcdTExMTJcdTExNjFcdTExYmMiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MTExMlx1MTE2MVx1MTFhYlx1MTEwYlx1MTE3NVx1MTFhYiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiSGVsbG8iKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiwiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoImhvdyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiYXJlIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJ5b3UiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKworICAgICAgLy9UZXN0aW5nIHRoZSBCcmVha0l0ZXJhdG9yIGZvciBkZXZhbmFnYXJpIHNjcmlwdAorICAgICAgLy9oaW5kaQorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTE3XHUwOTJhLVx1MDkzNlx1MDkyYSIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiISIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTJmXHUwOTM5Iik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5MzlcdTA5M2YiICsgaGFsZk5BICsgIlx1MDkyNlx1MDk0MCIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTM5XHUwOTQ4Iik7CisgICAgICAvL2RhbmRhIGlzIHNpbWlsYXIgdG8gZnVsbCBzdG9wLiBkYW5kYSBpcyBhIGhpbmRpIHBocmFzZSBzZXBlcmF0b3IKKyAgICAgIC8vTWFrZSBzdXJlIGl0IGJyZWFrcyBiZWZvcmUgZGFuZGEgYW5kIGFmdGVyIGRhbmRhIHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgYSBzcGFjZQorICAgICAgLy93b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5NjQiKTsgICAvL2ZhaWxzIGhlcmUgZG9lc24ndCBicmVhayBhdCBkYW5kYQorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTA1XHUwOTNlXHUwOTJhIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5MzhcdTA5M2ZcdTA5MTZcdTA5NGJcdTA5MTdcdTA5NDciKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIj8iKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlxuIik7IAorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiOiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudChkZWFkUEErIlx1MDkzMFx1MDkzZVx1MDkyZiIrdmlzYXJnYSk7ICAgIC8vbm8gYnJlYWsgYmVmb3JlIHZpc2FyZ2EKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTM1IiArIGRlYWRSQSsgIlx1MDkzN1x1MDkzZSIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHJcbiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudChkZWFkUEErICJcdTA5MzBcdTA5MTVcdTA5M2VcdTA5MzYiKTsgICAgIC8vZGVhZFBBK1JBK0tBK3Zvd2VsIEFBK1NIQSAtPiBwcmFrYXNoCisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIsIik7IAorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTI0XHUwOTQxXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRiIik7IAorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTJlXHUwOTNmIisgZGVhZFRBKyAiXHUwOTMwIik7ICAgICAgIC8vTUErdm93ZWwgSSsgZGVhZFRBICsgUkEgCisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5MTVcdTA5M2UiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDkyYSIrIGRlYWRUQSArICJcdTA5MzAiKTsgICAgICAgICAgICAvL1BBICsgZGVhZFRBICsgUkEKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDkyYVx1MDk1ZFx1MDk0YiIpOworICAgICAgLy8gd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTY0Iik7IC8vZmFpbHMgaGVyZSBkb2Vzbid0IGJyZWFrIGF0IGRhbmRhCisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KGRlYWRTQSArIGRlYWRUQSArICJcdTA5MzBcdTA5M2YiKTsgICAgICAgLy9kZWFkU0ErZGVhZFRBK1JBK3Zvd2VsIEktPnN0aHJpCisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIuIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5NjhcdTA5NjYuXHUwOTY5XHUwOTZmIik7ICAgICAgICAgICAgLy9oaW5kaSBudW1iZXJzCisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5NjdcdTA5NjZcdTA5NjYuXHUwOTY2XHUwOTY2JSIpOyAgICAgLy9wb3N0bnVtZXJpYworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUyMGE4XHUwOTY3LFx1MDk2N1x1MDk2Nlx1MDk2Ni5cdTA5NjZcdTA5NjYiKTsgLy9wcmUtbnVtYmVyIEluZGlhIGN1cnJlbmN5IHN5bWJvbCBScy5cdTIwYUQKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDkwNVx1MDkyZVx1MDkxYyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXG4iKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoaGFsZlNBICsgIlx1MDkzNVx1MDkyNFx1MDkwMiIgK2RlYWRUQSsgIlx1MDkzMCIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHIiKTsKKworICAgICAgZ2VuZXJhbEl0ZXJhdG9yVGVzdCh3b3JkSXRlckRlZmF1bHQsIHdvcmRkYXRhKTsKKyAgfQorICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcga1BhcmFncmFwaFNlcGFyYXRvciA9ICJcdTIwMjkiOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcga0xpbmVTZXBhcmF0b3IgICAgICA9ICJcdTIwMjgiOworCisgIHB1YmxpYyB2b2lkIFRlc3REZWZhdWx0UnVsZUJhc2VkU2VudGVuY2VJdGVyYXRpb24oKXsKKyAgICAgIGxvZ2xuKCJUZXN0aW5nIHRoZSBSQkJJIGZvciBzZW50ZW5jZSBpdGVyYXRpb24gdXNpbmcgZGVmYXVsdCBydWxlcyIpOworICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciByYmJpPShSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKVJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuZ2V0U2VudGVuY2VJbnN0YW5jZSgpOworICAgICAgLy9mZXRjaCB0aGUgcnVsZXMgdXNlZCB0byBjcmVhdGUgdGhlIGFib3ZlIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IKKyAgICAgIFN0cmluZyBkZWZhdWx0UnVsZXM9cmJiaS50b1N0cmluZygpOworICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBzZW50SXRlckRlZmF1bHQ9bnVsbDsKKyAgICAgIHRyeXsKKyAgICAgIHNlbnRJdGVyRGVmYXVsdCAgID0gbmV3IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IoZGVmYXVsdFJ1bGVzKTsgCisgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSl7CisgICAgICAgICAgZXJybG4oIkVSUk9SOiBmYWlsZWQgY29uc3RydWN0aW9uIGluIFRlc3REZWZhdWx0UnVsZUJhc2VkU2VudGVuY2VJdGVyYXRpb24oKSIgKyBpYWUudG9TdHJpbmcoKSk7CisgICAgICB9CisKKyAgICAgIFZlY3RvciBzZW50ZGF0YSA9IG5ldyBWZWN0b3IoKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIihUaGlzIGlzIGl0LikgIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJUZXN0aW5nIHRoZSBzZW50ZW5jZSBpdGVyYXRvci4gIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJcIlRoaXMgaXNuXCd0IGl0LlwiICIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiSGkhICIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiVGhpcyBpcyBhIHNpbXBsZSBzYW1wbGUgc2VudGVuY2UuICIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiKFRoaXMgaXMgaXQuKSAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlRoaXMgaXMgYSBzaW1wbGUgc2FtcGxlIHNlbnRlbmNlLiAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlwiVGhpcyBpc25cJ3QgaXQuXCIgIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJIaSEgIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJUaGlzIGlzIGEgc2ltcGxlIHNhbXBsZSBzZW50ZW5jZS4gIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJJdCBkb2VzIG5vdCBoYXZlIHRvIG1ha2UgYW55IHNlbnNlIGFzIHlvdSBjYW4gc2VlLiAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIk5lbCBtZXp6byBkZWwgY2FtbWluIGRpIG5vc3RyYSB2aXRhLCBtaSByaXRyb3ZhaSBpbiB1bmEgc2VsdmEgb3NjdXJhLiAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIkNoZSBsYSBkcml0dGEgdmlhIGF2ZW8gc21hcnJpdGEuICIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiSGUgc2FpZCwgdGhhdCBJIHNhaWQsIHRoYXQgeW91IHNhaWQhISAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIkRvbid0IHJvY2sgdGhlIGJvYXQuIiArIGtQYXJhZ3JhcGhTZXBhcmF0b3IpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiQmVjYXVzZSBJIGFtIHRoZSBkYWRkeSwgdGhhdCBpcyB3aHkuICIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiTm90IG9uIG15IHRpbWUgKGVsIHRpbW8uKSEgIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJTbyB3aGF0ISEiICsga1BhcmFncmFwaFNlcGFyYXRvcik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJcIkJ1dCBub3csXCIgaGUgc2FpZCwgXCJJIGtub3chXCIgIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJIYXJyaXMgdGh1bWJlZCBkb3duIHNldmVyYWwsIGluY2x1ZGluZyBcIkF3YXkgV2UgR29cIiAod2hpY2ggYmVjYW1lIHRoZSBodWdlIHN1Y2Nlc3MgT2tsYWhvbWEhKS4gIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJPbmUgc3BlY2llcywgQi4gYW50aHJhY2lzLCBpcyBoaWdobHkgdmlydWxlbnQuXG4iKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIldvbGYgc2FpZCBhYm91dCBTb3VuZGVyOlwiQmVhdXRpZnVsbHkgdGhvdWdodC1vdXQgYW5kIGRpcmVjdGVkLlwiICIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiSGF2ZSB5b3UgZXZlciBzYWlkLCBcIlRoaXMgaXMgd2hlcmVcdEkgc2hhbGwgbGl2ZVwiPyAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIkhlIGFuc3dlcmVkLCBcIllvdSBtYXkgbm90IVwiICIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiQW5vdGhlciBwb3B1bGFyIHNheWluZyBpczogXCJIb3cgZG8geW91IGRvP1wiLiAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIllldCBhbm90aGVyIHBvcHVsYXIgc2F5aW5nIGlzOiBcJ0lcJ20gZmluZSB0aGFua3MuXCcgIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJXaGF0IGlzIHRoZSBwcm9wZXIgdXNlIG9mIHRoZSBhYmJyZXZpYXRpb24gcHAuPyAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlllcywgSSBhbSBkZWZpbmF0ZWxseSAxMlwiIHRhbGwhISIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiTm93XHJpc1xudGhlXHJcbnRpbWVcblxyZm9yXHJccmFsbFx1MjAyOSIpOworICAgICAgLy8gRG9uJ3QgYnJlYWsgc2VudGVuY2VzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIENKSworICAgICAgLy8gYW5kIG90aGVyIGxldHRlcnMKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlx1NTQ4N1x1NjdmZlx1ZTU5MVx1NTAxN1x1NjFiM1x1NjBhMVx1OTUxMFx1ODE2NTpcIkpBVkFcdTgyMWMiCisgICAgICAgICAgICAgICAgKyAiXHU4MTY1XHU3ZmM4XHU1MWNlXHUzMDZkLFx1MjQ5NFx1NTZkOFx1NGVjMFx1NjBiMVx1ODU2MFx1NTFiYSIKKyAgICAgICAgICAgICAgICArICJcdTYxMWRcdTU3YjZcdTI1MTBcdTVkNDZcIi5cdTIwMjkiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlx1NTQ4N1x1NjdmZlx1ZTU5MVx1NTAxN1x1NjFiM1x1NjBhMVx1OTUxMFx1ODE2NVx1OWRlOCIKKyAgICAgICAgICAgICAgICArICJcdTk3ZTRKQVZBXHU4MjFjXHU4MTY1XHU3ZmM4XHU1MWNlXHUzMDZkXHVlMzBiXHUyNDk0XHU1NmQ4XHU0ZWMwIgorICAgICAgICAgICAgICAgICsgIlx1NjBiMVx1ODU2MFx1NTFiYVx1NjExZFx1NTdiNlx1MjUxMFx1NWQ0Nlx1OTdlNVx1Nzc1MVx1MjAyOSIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiXHU1NDg3XHU2N2ZmXHVlNTkxXHU1MDE3XHU2MWIzXHU2MGExXHU5NTEwXHU4MTY1XHU5ZGU4XHU5N2U0IgorICAgICAgICAgICAgICAgICsgIlx1NjQ3MFx1ODc5MEpBVkFcdTgyMWNcdTgxNjVcdTdmYzhcdTUxY2VcdTMwNmRcdWUzMGJcdTI0OTRcdTU2ZDgiCisgICAgICAgICAgICAgICAgKyAiXHU0ZWMwXHU2MGIxXHU4NTYwXHU1MWJhXHU2MTFkXHU1N2I2XHUyNTEwXHU1ZDQ2XHU5N2U1XHU3NzUxXHUyMDI5Iik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJIZSBzYWlkLCBcIkkgY2FuIGdvIHRoZXJlLlwiXHUyMDI5Iik7CisgICAgICAvLyBUcmVhdCBmdWxsd2lkdGggdmFyaWFudHMgb2YgLiE/IHRoZSBzYW1lIGFzIHRoZWlyCisgICAgICAvLyBub3JtYWwgY291bnRlcnBhcnRzCisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJJIGtub3cgSSdtIHJpZ2h0XHVmZjBlICIpOworICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiUmlnaHRcdWZmMWYgIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJSaWdodFx1ZmYwMSAiKTsKKworICAgICAgLy8gRG9uJ3QgYnJlYWsgc2VudGVuY2VzIGF0IGJvdW5kYXJ5IGJldHdlZW4gQ0pLIGFuZCBkaWdpdHMKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlx1NTQ4N1x1NjdmZlx1ZTU5MVx1NTAxN1x1NjFiM1x1NjBhMVx1OTUxMFx1ODE2NVx1OWRlOCIKKyAgICAgICAgICAgICAgICArICJcdTk3ZTQ4ODg4XHU4MjFjXHU4MTY1XHU3ZmM4XHU1MWNlXHUzMDZkXHVlMzBiXHUyNDk0XHU1NmQ4XHU0ZWMwIgorICAgICAgICAgICAgICAgICsgIlx1NjBiMVx1ODU2MFx1NTFiYVx1NjExZFx1NTdiNlx1MjUxMFx1NWQ0Nlx1OTdlNVx1Nzc1MVx1MjAyOSIpOworCisgICAgICAvLyBCcmVhayBzZW50ZW5jZSBiZXR3ZWVuIGEgc2VudGVuY2UgdGVybWluYXRvciBhbmQKKyAgICAgIC8vIG9wZW5pbmcgcHVuY3R1YXRpb24KKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIkhvdyBkbyB5b3UgZG8/Iik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCIoZmluZSkuIik7CisgICAgICAvL3NlbnRlbmNlIGJyZWFrcyBmb3IgaGluZGkKKyAgICAgIC8vbWFrZSBzdXJlIHRoZXJlIGlzIHNlbnRlbmNlIGJyZWFrIGFmdGVyID8sZGFuZGEoaGluZGkgcGhyYXNlIHNlcGFyYXRvciksZnVsbHN0b3AgZm9sbG93ZWQgYnkgc3BhY2UgYW5kIG5vIGJyZWFrIGFmdGVyIFxuIFxyIAorICAgICAgc2VudGRhdGEuYWRkRWxlbWVudCgiXHUwOTI4XHUwOTJlIitoYWxmU0ErIlx1MDkyNFx1MDk0NyAiICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiXHUwOTMwXHUwOTJlXHUwOTQ3XHUwOTM2LCAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJcdTA5MDVcdTA5M2VcdTA5MmEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlx1MDkxNVx1MDk0OFx1MDkzOFx1MDk0NyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlx1MDkzOVx1MDk0OD8iKTsgICAKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlx1MDkyZVx1MDk0OCBcdTA5MDUiCisgICAgICAgICAgICAgICAgICAgICAgICArIGhhbGZDSEEKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIlx1MDkxYlx1MDkzZSBcdTA5MzlcdTA5NDJcdTA5MDFcdTA5NjQgIik7ICAgCisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJcdTA5MDVcdTA5M2VcdTA5MmFcclxuIFx1MDkxNVx1MDk0OFx1MDkzOFx1MDk0NyBcdTA5MzlcdTA5NDg/Iik7ICAgCisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJcdTA5MzVcdTA5MzkgIgorICAgICAgICAgICAgICAgICAgICAgICArIGhhbGZLQQorICAgICAgICAgICAgICAgICAgICAgICArICJcdTA5MmZcdTA5M2VcbiBcdTA5MzlcdTA5NDg/Iik7ICAgCisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJcdTA5MmZcdTA5MzkgXHUwOTA1XHUwOTNlXHUwOTJlIFx1MDkzOVx1MDk0OC4gIik7ICAgCisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJcdTA5MmZcdTA5MzkgbWVhbnMgXCJ0aGlzXCIuICIpOyAKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlwiXHUwOTJhXHUwOTVkXHUwOTNlXHUwOTA4XCIgbWVhbmluZyBcImVkdWNhdGlvblwiIG9yIFwic3R1ZGllc1wiLiAiKTsKKyAgICAgIHNlbnRkYXRhLmFkZEVsZW1lbnQoIlx1MDkwNVx1MDkzZVx1MDkxYyIgCisgICAgICAgICAgICAgICAgICAgICAgICArICIoIitoYWxmU0ErIlx1MDkzNVx1MDkyNFx1MDkwMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgZGVhZFRBCisgICAgICAgICAgICAgICAgICAgICAgICArICJcdTA5MzAgIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTM4KSAiCisgICAgICAgICAgICAgICAgICAgICAgICArICJcdTA5MzlcdTA5NDhcdTA5NjQgIik7CisgICAgICBzZW50ZGF0YS5hZGRFbGVtZW50KCJMZXQncyBlbmQgaGVyZS4gIik7CisgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHNlbnRJdGVyRGVmYXVsdCwgc2VudGRhdGEpOworICB9CisgICAKKyAgcHVibGljIHZvaWQgVGVzdERlZmF1bHRSdWxlQmFzZWRMaW5lSXRlcmF0aW9uKCl7CisgICAgIGxvZ2xuKCJUZXN0aW5nIHRoZSBSQkJJIGZvciBsaW5lIGl0ZXJhdGlvbiB1c2luZyBkZWZhdWx0IHJ1bGVzIik7CisgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgcmJiaT0oUnVsZUJhc2VkQnJlYWtJdGVyYXRvcilSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmdldExpbmVJbnN0YW5jZSgpOworICAgICAvL2ZldGNoIHRoZSBydWxlcyB1c2VkIHRvIGNyZWF0ZSB0aGUgYWJvdmUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcgorICAgICBTdHJpbmcgZGVmYXVsdFJ1bGVzPXJiYmkudG9TdHJpbmcoKTsKKyAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBsaW5lSXRlckRlZmF1bHQ9bnVsbDsKKyAgICAgdHJ5eworICAgICBsaW5lSXRlckRlZmF1bHQgICA9IG5ldyBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKGRlZmF1bHRSdWxlcyk7IAorICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSl7CisgICAgICAgICBlcnJsbigiRVJST1I6IGZhaWxlZCBjb25zdHJ1Y3Rpb24gaW4gVGVzdERlZmF1bHRSdWxlQmFzZWRMaW5lSXRlcmF0aW9uKCkiICsgaWFlLnRvU3RyaW5nKCkpOworICAgICB9CisKKyAgICAgVmVjdG9yIGxpbmVkYXRhID0gbmV3IFZlY3RvcigpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJNdWx0aS0iKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiTGV2ZWwgIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoImV4YW1wbGUgIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIm9mICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJhICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJzZW1pLSIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJpZGlvdGljICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJub24tIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoInNlbnNpY2FsICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCIobm9uLSIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJpbXBvcnRhbnQpICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJzZW50ZW5jZS4gIik7CisKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiSGkgICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJIZWxsbyAiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiSG93XG4iKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiYXJlXHIiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgieW91IiArIGtMaW5lU2VwYXJhdG9yKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiZmluZS5cdCIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJnb29kLiAgIik7CisKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiTm93XHIiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiaXNcbiIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJ0aGVcclxuIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoInRpbWVcbiIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcciIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJmb3JcciIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcciIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJhbGwiKTsKKworICAgIC8vIHRvIHRlc3QgZm9yIGJ1ZyAjNDA2ODEzMworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcdTk2ZjYiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiXHU0ZTAwXHUzMDAyIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIlx1NGU4Y1x1MzAwMSIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcdTRlMDlcdTMwMDJcdTMwMDEiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiXHU1NmRiXHUzMDAxXHUzMDAyXHUzMDAxIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIlx1NGU5NCwiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiXHU1MTZkLiIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcdTRlMDMuXHUzMDAxLFx1MzAwMiIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcdTUxNmIiKTsKKworICAgIC8vIHRvIHRlc3QgZm9yIGJ1ZyAjNDA4NjA1MgorICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJmb29cdTAwYTBiYXIgIik7CisgICAgLy8gbGluZWRhdGEuYWRkRWxlbWVudCgiZm9vXHVmZWZmYmFyIik7CisKKyAgICAvLyB0byB0ZXN0IGZvciBidWcgIzQwOTc5MjAKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiZG9nLCIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJjYXQsIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIm1vdXNlICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCIob25lKSIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCIodHdvKVxuIik7CisKKyAgICAvLyB0byB0ZXN0IGZvciBidWcgIzQwMzUyNjYKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiVGhlICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJiYWxhbmNlICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJpcyAiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiJC0yMyw0NTYuNzgsICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJub3QgIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIi0kMzIsNDU2Ljc4IVxuIik7CisKKyAgICAvLyB0byB0ZXN0IGZvciBidWcgIzQwOTg0NjcKKyAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBzdHJpbmcgb2YgS29yZWFuIGNoYXJhY3RlcnMgKEkgZm91bmQgaXQgaW4gdGhlIFllbGxvdyBQYWdlcworICAgIC8vIGFkIGZvciB0aGUgS29yZWFuIFByZXNieXRlcmlhbiBDaHVyY2ggb2YgU2FuIEZyYW5jaXNjbywgYW5kIEkgaG9wZSBJIHRyYW5zY3JpYmVkCisgICAgLy8gaXQgY29ycmVjdGx5KSwgZmlyc3QgYXMgcHJlY29tcG9zZWQgc3lsbGFibGVzLCBhbmQgdGhlbiBhcyBjb25qb2luaW5nIGphbW8uCisgICAgLy8gQm90aCBzZXF1ZW5jZXMgc2hvdWxkIGJlIHNlbWFudGljYWxseSBpZGVudGljYWwgYW5kIGJyZWFrIHRoZSBzYW1lIHdheS4KKyAgICAvLyBwcmVjb21wb3NlZCBzeWxsYWJsZXMuLi4KKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiXHVjMGMxXHVkNTZkICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcdWQ1NWNcdWM3NzggIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIlx1YzVmMFx1ZDU2OSAiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiXHVjN2E1XHViODVjXHVhZDUwXHVkNjhjICIpOworICAgIC8vIGNvbmpvaW5pbmcgamFtby4uLgorICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcdTExMDlcdTExNjFcdTExYmNcdTExMTJcdTExNjFcdTExYmMgIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIlx1MTExMlx1MTE2MVx1MTFhYlx1MTEwYlx1MTE3NVx1MTFhYiAiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiXHUxMTBiXHUxMTY3XHUxMWFiXHUxMTEyXHUxMTYxXHUxMWI4ICIpOworICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcdTExMGNcdTExNjFcdTExYmNcdTExMDVcdTExNjlcdTExMDBcdTExNmRcdTExMTJcdTExNmMiKTsKKworICAgIC8vIHRvIHRlc3QgZm9yIGJ1ZyAjNDExNzU1NDogRnVsbHdpZHRoIC4hPyBzaG91bGQgYmUgdHJlYXRlZCBhcyBwb3N0SndyZAorICAgICBsaW5lZGF0YS5hZGRFbGVtZW50KCJcdTRlMDFcdWZmMGUiKTsKKyAgICAgbGluZWRhdGEuYWRkRWxlbWVudCgiXHU0ZTAyXHVmZjAxIik7CisgICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIlx1NGUwM1x1ZmYxZiIpOworICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KGxpbmVJdGVyRGVmYXVsdCwgbGluZWRhdGEpOworCisKKyAgfQorICBwdWJsaWMgdm9pZCBUZXN0Q3VzdG9tUnVsZUJhc2VkTGluZUl0ZXJhdG9yKCl7CisKKyAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHJiYmk9KFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRMaW5lSW5zdGFuY2UoKTsKKyAgICAvL2ZldGNoIHRoZSBydWxlcyB1c2VkIHRvIGNyZWF0ZSB0aGUgYWJvdmUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcgorICAgIFN0cmluZyBydWxlcz0vLyIkX2lnbm9yZV89W2VdOyIgICsgLy8gW2xpdV0gTm90IHN1cmUgd2hhdCB0aGUgaW50ZW50aW9uIHdhcyBoZXJlLgorICAgICAgICAvLyBJdCdzIGlsbGVnYWwgdG8gcmVkZWZpbmUgdmFyaWFibGVzLCBhbHNvLCB3aHkgcHJlcGVuZCB0aGUgaWdub3JlIGRlZmluaXRpb24gLS0KKyAgICAgICAgLy8gZXZlbiBpZiBpdCdzIGxlZ2FsIHRvIHJlZGVmaW5lIHZhcmlhYmxlcywgdGhlIHByZXBlbmRlZCBkZWZpbml0aW9uIHdpbGwganVzdAorICAgICAgICAvLyBnZXQgb3ZlcnJpZGRlbi4KKyAgICAgICAgICAgICAgICAgcmJiaS50b1N0cmluZygpOworICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgbGluZUl0ZXI9bnVsbDsKKyAgICB0cnl7CisgICAgIGxpbmVJdGVyICAgPSBuZXcgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcihydWxlcyk7IAorICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKXsKKyAgICAgICAgIGVycmxuKCJFUlJPUjogZmFpbGVkIGNvbnN0cnVjdGlvbiBpbiBUZXN0Q3VzdG9tUnVsZUJhc2VkTGluZUl0ZXJhdG9yKCkgLS0gY3VzdG9tIHJ1bGVzXG4iICsgaWFlLnRvU3RyaW5nKCkpOworICAgICAgIH0KKyAgICBWZWN0b3IgbGluZWRhdGE9bmV3IFZlY3RvcigpOworICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIlNMaGVsbG8hICIpOworICAgIGxpbmVkYXRhLmFkZEVsZW1lbnQoIkhvdyAiKTsKKyAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KGxpbmVJdGVyLCBsaW5lZGF0YSk7CisgIH0KKyAgCisgIC8vdGVzdHMgdGhlIGJlaGF2aW91ciBvZiBjaGFyYWN0ZXIgaXRlcmF0aW9uIG9mIFJCQkkgd2l0aCBjdXN0b20gcnVsZXMKKyAgcHVibGljIHZvaWQgVGVzdEN1c3RvbVJ1bGVCYXNlZENoYXJhY3Rlckl0ZXJhdGlvbigpeworICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIFJCQkkgYnkgdXNpbmcgY3VzdG9tIHJ1bGVzIGZvciBjaGFyYWN0ZXIgaXRlcmF0aW9uIik7CisKKyAgICAgIFN0cmluZyBjcnVsZXMyPSIkX2lnbm9yZV89W2VdOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vaWdub3JlIHRoZSBjaGFyYWN0ZXIgImUiCisgICAgICAgICAgICAgICAgICAgICAiLjsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIAorICAgICAgICAgICAgICAgICAgICAgIiRkZXZWb3dlbFNpZ249W1x1MDkzZS1cdTA5NGNcdTA5NjJcdTA5NjNdOyIgICArICAvL2RldmFuYWdpcmkgdm93ZWwgPSBcdTA5M2UgdHAgXHUwOTRjIGFuZCBcdTA5NjIuXHUwOTYzCisgICAgICAgICAgICAgICAgICAgICAiJGRldkNvbnNvbmFudD1bXHUwOTE1LVx1MDkzOV07IiAgICAgICAgICAgICAgICsgIC8vZGV2YW5hZ2lyaSBjb25zb25hbnQgPSBcdTA5MTUgdG8gXHUwOTM5CisgICAgICAgICAgICAgICAgICAgICAiJGRldkNvbnNvbmFudCRkZXZWb3dlbFNpZ247IiA7ICAgICAgICAgICAgICAgIC8vYnJlYWsgYXQgYWxsIHBsYWNlcyBleGNlcHQgdGhlICBmb2xsb3dpbmcgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kZXZhbmFnaXJpIGNvbnNvbmFudHMrIGRldmFuYWdpcmkgdm93ZWxzaWduCisgICAgICAKKyAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgY2hhckl0ZXJSdWxlcz1udWxsOworICAgICAgdHJ5eworICAgICAgY2hhckl0ZXJSdWxlcyAgID0gbmV3IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IoY3J1bGVzMik7IAorICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpeworICAgICAgICAgIGVycmxuKCJFUlJPUjogZmFpbGVkIGNvbnN0cnVjdGlvbiBpbiBUZXN0Q3VzdG9tQmFzZWRDaGFyYWN0ZXJJdGVyYXRpb24oKS0tIGN1c3RvbSBydWxlcyIgKyBpYWUudG9TdHJpbmcoKSk7CisgICAgICB9CisKKyAgICAgIFZlY3RvciBjaGFyZGF0YSA9IG5ldyBWZWN0b3IoKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIkhlIik7ICAgICAgICAgICAgICAvL2lnbm9yZXMgJ2UnCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJsIik7ICAgICAgICAgICAgICAgIAorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgibCIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgib2UiKTsgICAgICAgICAgICAgIC8vaWdub3JlcyAnZScgaGVuY2Ugd3JhcHMgaXQgaW50byAnbycgaW5zdGVhZCBvZiB3cmFwcGluZyB3aXRoCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTAzMDEiKTsgICAgICAgICAgLy8nXHUwMzAxJyB0byBmb3JtICdhY3V0ZUUgJworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiJmUiKTsgICAgICAgICAgICAgIC8vaWdub3JlcyAnZScgaGVuY2Ugd3JhcHMgaXQgaW50byAnJicgaW5zdGVhZCBvZiB3cmFwcGluZyB3aXRoCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTAzMDMiKTsgICAgICAgICAgLy8nXHUwMzAzIHRvIGZvcm0gJ3RpbGRhRScKKyAgICAgIC8vZGV2YW5hZ2lyaSBjaGFyYWN0ZXJzIAorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTA2Iik7ICAgICAgICAgIC8vZGV2YW5hZ2lyaSBBQQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTNlIik7ICAgICAgICAgIC8vZGV2YW5hZ2lyaSB2b3dlbHNpZ24gQUE6LS1icmVha3MgYXQgXHUwOTAxIHdoaWNoIGlzIGRldmFuYWdpcmkgCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MDEiKTsgICAgICAgICAgLy9jaGFuZHJhIGJpbmRodSBzaW5jZSBpdCBpcyBub3QgbWVudGlvbmVkIGluIHRoZSBydWxlcworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTE2XHUwOTQ3Iik7ICAgIC8vZGV2YW5hZ2lyaSBLSEErdm93ZWxzaWduIEUKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDkzOFx1MDk0MSIpOyAgICAvL2RldmFuYWdpcmkgU0Erdm93ZWxzaWduIFUgOiAtIGJyZWFrcyBhdAorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTAyIik7ICAgICAgICAgIC8vXHUwOTAyIGRldmFuYWdpcmkgYW51c3ZhcmEgc2luY2UgaXQgaXMgbm90IG1lbnRpb25lZCBpbiB0aGUgcnVsZXMKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MDkyNiIpOyAgICAgICAgICAvL2RldmFuYWdpcmkgY29uc29uYW50IERBCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5MzAiKTsgICAgICAgICAgLy9kZXZhbmFnaXJpIGNvbnNvbmFudCBSQQorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwOTM5XHUwOTRjIik7ICAgIC8vZGV2YW5hZ2lyaSBIQSt2b3dlbCBzaWduIEFJCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTA5NjQiKTsgICAgICAgICAgLy9kZXZhbmFnaXJpIGRhbmRhCisgICAgICAvLyBkZXZhbmFnaXJpIGNocmFjdGVycyBlbmQKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIkEiKTsgICAgICAgICAgICAgICAvL2JyZWFrcyBpbiBiZXR3ZWVuIHNpbmNlIGl0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIHJ1bGVzCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTAzMDIiKTsgICAgICAgICAgLyogY2lyY3VtZmxleEEgKi8gICAgCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJpIik7ICAgICAgICAgICAgICAgLy9icmVha3MgaW4gYmV0d2VlbiBzaW5jZSBub3QgbWVudGlvbmVkIGluIHRoZSBydWxlcworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUwMzAxIik7ICAgICAgICAgIC8qIGFjdXRlQmVsb3dJICovICAKKyAgICAgIC8vUnVsZXMgZG9uJ3Qgc3VwcG9ydCBjb25qb2luaW5nIGphbW8uLi4uCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTExMDkiKTsgICAgICAgICAgLy9icmVhayBhdCBldmVyeSBjaGFyYWN0ZXIgc2luY2UgcnVsZXMKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MTE2MSIpOyAgICAgICAgICAvL2Rvbid0IHN1cHBvcnQgY29uam9pbmluZyBqYW1vCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTExYmMiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlx1MTExMiIpOworICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXHUxMTYxIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTExYmMiKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlxuIik7CisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcciIpOyAgICAgICAgICAgICAvL2RvZXNuJ3Qga2VlcCBDUkxHRiB0b2dldGhlciBzaW5jZSBydWxlcyBkbyBub3QgbWVudGlvbiBpdAorICAgICAgY2hhcmRhdGEuYWRkRWxlbWVudCgiXG4iKTsKKyAgICAgIGNoYXJkYXRhLmFkZEVsZW1lbnQoIlMiKTsgICAgICAgICAgICAgIC8vZ3JhdmVTCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTAzMDAiKTsgICAgICAgICAvL2JyZWFrcyBpbiBiZXR3ZWVuIHNpbmNlIGl0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIHJ1bGVzCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJpIik7ICAgICAgICAgICAgICAvL2FjdXRlQmVsb3dJCisgICAgICBjaGFyZGF0YS5hZGRFbGVtZW50KCJcdTAzMDEiKTsgICAgICAgICAvL2JyZWFrcyBpbiBiZXR3ZWVuIHNpbmNlIGl0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIHJ1bGVzCisKKyAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3QoY2hhckl0ZXJSdWxlcywgY2hhcmRhdGEpOworCisgIH0gICAgCisgIC8vdGVzdHMgY3VzdG9tIHJ1bGVzIGJhc2VkIHdvcmQgaXRlcmF0aW9uCisgIHB1YmxpYyB2b2lkIFRlc3RDdXN0b21SdWxlQmFzZWRXb3JkSXRlcmF0aW9uKCl7CisgICAgICBsb2dsbigiVGVzdGluZyB0aGUgUkJCSSBieSB1c2luZyBjdXN0b20gcnVsZXMgZm9yIHdvcmQgaXRlcmF0aW9uIik7CisgICAgICBTdHJpbmcgd3J1bGVzMT0iJF9pZ25vcmVfPVtbOk1uOl1bOk1lOl1bOkNmOl1dOyIgICAgICAgICArIC8vIGlnbm9yZSBub24tc3BhY2luZyBtYXJrcywgZW5jbG9zaW5nIG1hcmtzLCBhbmQgZm9ybWF0IGNoYXJhY3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgIiRkYW5kYT1bXHUwOTY0XHUwOTY1XTsiICAgICAgICAgICAgICAgICsgLy8gSGluZGkgUGhyYXNlIHNlcGVyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICIkbGV0PVtbOkw6XVs6TWM6XV07IiAgICAgICAgICAgICAgICAgICArIC8vIHVwcGVyY2FzZShMdSksIGxvd2VyY2FzZShMbCksIHRpdGxlY2FzZShMdCksIG1vZGlmaWVyKExtKSBsZXR0ZXJzLCBNYy1jb21iaW5pbmcgc3BhY2UgbWFyaworICAgICAgICAgICAgICAgICAgICAgICIkbWlkX3dvcmQ9W1s6UGQ6XVxcXCJcXFwnXFwuXTsiICAgICAgICArIC8vIGRhc2hlcywgcXVvdGF0aW9uLCBhcG9zdHJhcGhlcywgcGVyaW9kCisgICAgICAgICAgICAgICAgICAgICAgIiRscz1bXG5cdTAwMGNcdTIwMjhcdTIwMjldOyIgICAgICAgICAgICsgLy8gbGluZSBzZXBhcmF0b3JzOiAgTEYsIEZGLCBQUywgYW5kIExTCisgICAgICAgICAgICAgICAgICAgICAgIiR3cz1bWzpaczpdXHRdOyIgICAgICAgICAgICAgICAgICAgICAgICsgLy8gYWxsIHNwYWNlIHNlcGFyYXRvcnMgYW5kIHRoZSB0YWIgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgIiR3b3JkPSgoJGxldCsoJG1pZF93b3JkJGxldCspKikpOyIgICsgIAorICAgICAgICAgICAgICAgICAgICAgICIuOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLy8gYnJlYWsgYWZ0ZXIgZXZlcnkgY2hhcmFjdGVyLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucworICAgICAgICAgICAgICAgICAgICAgICIkd29yZDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAKKyAgICAgICAgICAgICAgICAgICAgICAiJHdzKlxyJGxzJGRhbmRhPzsiIDsKKworICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciB3b3JkSXRlclJ1bGVzPW51bGw7CisgICAgICB0cnl7CisgICAgICB3b3JkSXRlclJ1bGVzICAgPSBuZXcgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcih3cnVsZXMxKTsgCisgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSl7CisgICAgICAgICAgZXJybG4oIkVSUk9SOiBmYWlsZWQgY29uc3RydWN0aW9uIGluIFRlc3RDdXN0b21SdWxlQmFzZWRXb3JkSXRlcmF0aW9uKCkgLS0gY3VzdG9tIHJ1bGVzIiArIGlhZS50b1N0cmluZygpKTsKKyAgICAgIH0KKworICAgICAgVmVjdG9yIHdvcmRkYXRhID0gbmV3IFZlY3RvcigpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiV3JpdGUiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIndvcmRydWxlcyIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiLiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgLy9wbGF5IHdpdGggaGluZGkKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDkyZlx1MDkzOSIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTM5XHUwOTNmIiArIGhhbGZOQSArICJcdTA5MjZcdTA5NDAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlx1MDkzOVx1MDk0OCIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTY0Iik7ICAgLy9EYW5kYSBpcyBzaW1pbGFyIHRvIGZ1bGwgc3RvcC4gRGFuZGEgZm9sbG93ZWQgYnkgYSBzcGFjZQorICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHUwOTA1XHUwOTNlXHUwOTJhIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCIgIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdTA5MzhcdTA5M2ZcdTA5MTZcdTA5NGJcdTA5MTdcdTA5NDciKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIj8iKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIkl0J3MiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiQiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIjMiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIjAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIi4iKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIjEiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIjAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIC8vIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIGdlbmVyYWxJdGVyYXRvclRlc3Qod29yZEl0ZXJSdWxlcywgd29yZGRhdGEpOyAKKyAgfSAKKyAgLy9hZGRzIGV4dHJhIHJ1bGVzIHRvIGRlYWwgd2l0aCBhYmJyZXZhdGlvbnMobGltaXRlZCkgYW5kIHRlc3QgdGhlIHdvcmQgSXRlcmF0aW9uCisgIHB1YmxpYyB2b2lkIFRlc3RBYmJyUnVsZUJhc2VkV29yZEl0ZXJhdGlvbigpeworICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIFJCQkkgZm9yIHdvcmQgaXRlcmF0aW9uIGJ5IGFkZGluZyBydWxlcyB0byBzdXBwb3J0IGFiYnJldmlhdGlvbiIpOworICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciByYiA9KFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoKTsKKyAgICAgIAorICAgICAgU3RyaW5nIHdydWxlczI9IiRhYmJyPSgoTXIuKXwoTXJzLil8KE1zLil8KERyLil8KFUuUy4pKTsiICsgLy8gYWJicmV2aWF0aW9ucy4gCisgICAgICAgICAgICAgICAgICAgICByYi50b1N0cmluZygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAiKCRhYmJyJHdzKSokd29yZDsiOworICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciB3b3JkSXRlcj1udWxsOworICAgICAgdHJ5eworICAgICAgd29yZEl0ZXIgICA9IG5ldyBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKHdydWxlczIpOyAKKyAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKXsKKyAgICAgICAgICBlcnJsbigiRVJST1I6IGZhaWxlZCBjb25zdHJ1Y3Rpb24gaW4gVGVzdEFiYnJSdWxlQmFzZWRXb3JkSXRlcmF0aW9uKCkgLS1jdXN0b20gcnVsZXMiICsgaWFlLnRvU3RyaW5nKCkpOworICAgICAgfQorICAgICAgVmVjdG9yIHdvcmRkYXRhID0gbmV3IFZlY3RvcigpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiTXIuIEdlb3JnZSIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiaXMiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoImZyb20iKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIlUuUy4gTmF2eSIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiLiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiSGlzIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcbiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiZnJpZW5kIik7CisgICAgICB3b3JkZGF0YS5hZGRFbGVtZW50KCJcdCIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiRHIuIFN0ZXZlbiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgibWFycmllZCIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiTXMuIEJlbm5ldGgiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiEiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIiAiKTsKKyAgICAgIHdvcmRkYXRhLmFkZEVsZW1lbnQoIk1ycy4gSm9obnNvbiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiXHJcbiIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgicGFpZCIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiICIpOworICAgICAgd29yZGRhdGEuYWRkRWxlbWVudCgiJDIsNDAwLjAwIik7CisgICAgICBnZW5lcmFsSXRlcmF0b3JUZXN0KHdvcmRJdGVyLCB3b3JkZGF0YSk7IAorICB9IAorICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIC8vIGdlbmVyYWwgdGVzdCBzdWJyb3V0aW5lcworICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICBwcml2YXRlIHZvaWQgZ2VuZXJhbEl0ZXJhdG9yVGVzdChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHJiYmksIFZlY3RvciBleHBlY3RlZFJlc3VsdCl7CisgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkUmVzdWx0LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgdGV4dCA9IChTdHJpbmcpZXhwZWN0ZWRSZXN1bHQuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQodGV4dCk7CisgICAgICAgICB9CisgICAgICAgICB0ZXh0ID0gYnVmZmVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgIHJiYmkuc2V0VGV4dCh0ZXh0KTsKKworICAgICAgICAgVmVjdG9yIG5leHRSZXN1bHRzID0gX3Rlc3RGaXJzdEFuZE5leHQocmJiaSwgdGV4dCk7CisgICAgICAgICBWZWN0b3IgcHJldmlvdXNSZXN1bHRzID0gX3Rlc3RMYXN0QW5kUHJldmlvdXMocmJiaSwgdGV4dCk7CisKKyAgICAgICAgIGxvZ2xuKCJjb21wYXJpbmcgZm9yd2FyZCBhbmQgYmFja3dhcmQuLi4iKTsKKyAgICAgICAgIGludCBlcnJzID0gZ2V0RXJyb3JDb3VudCgpOworICAgICAgICAgY29tcGFyZUZyYWdtZW50TGlzdHMoImZvcndhcmQgaXRlcmF0aW9uIiwgImJhY2t3YXJkIGl0ZXJhdGlvbiIsIG5leHRSZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUmVzdWx0cyk7CisgICAgICAgICBpZiAoZ2V0RXJyb3JDb3VudCgpID09IGVycnMpIHsKKyAgICAgICAgICAgICBsb2dsbigiY29tcGFyaW5nIGV4cGVjdGVkIGFuZCBhY3R1YWwuLi4iKTsKKyAgICAgICAgICAgICBjb21wYXJlRnJhZ21lbnRMaXN0cygiZXhwZWN0ZWQgcmVzdWx0IiwgImFjdHVhbCByZXN1bHQiLCBleHBlY3RlZFJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFJlc3VsdHMpOworICAgICAgICAgfQorCisgICAgICAgIGludFtdIGJvdW5kYXJpZXMgPSBuZXcgaW50W2V4cGVjdGVkUmVzdWx0LnNpemUoKSArIDNdOworICAgICAgICBib3VuZGFyaWVzWzBdID0gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5ET05FOworICAgICAgICBib3VuZGFyaWVzWzFdID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFJlc3VsdC5zaXplKCk7IGkrKykKKyAgICAgICAgIGJvdW5kYXJpZXNbaSArIDJdID0gYm91bmRhcmllc1tpICsgMV0gKyAoKFN0cmluZylleHBlY3RlZFJlc3VsdC5lbGVtZW50QXQoaSkpLmxlbmd0aCgpOworICAgICAgCisgICAgICAgIGJvdW5kYXJpZXNbYm91bmRhcmllcy5sZW5ndGggLSAxXSA9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORTsKKyAgICAgIAorICAgICAgICBfdGVzdEZvbGxvd2luZyhyYmJpLCB0ZXh0LCBib3VuZGFyaWVzKTsKKyAgICAgICAgX3Rlc3RQcmVjZWRpbmcocmJiaSwgdGV4dCwgYm91bmRhcmllcyk7CisgICAgICAgIF90ZXN0SXNCb3VuZGFyeShyYmJpLCB0ZXh0LCBib3VuZGFyaWVzKTsKKworICAgICAgICBkb011bHRpcGxlU2VsZWN0aW9uVGVzdChyYmJpLCB0ZXh0KTsKKyAgICAgfQorCisgICAgIHByaXZhdGUgVmVjdG9yIF90ZXN0Rmlyc3RBbmROZXh0KFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgcmJiaSwgU3RyaW5nIHRleHQpIHsKKyAgICAgICAgIGludCBwID0gcmJiaS5maXJzdCgpOworICAgICAgICAgaW50IGxhc3RQID0gcDsKKyAgICAgICAgIFZlY3RvciByZXN1bHQgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgIGlmIChwICE9IDApCisgICAgICAgICAgICAgZXJybG4oImZpcnN0KCkgcmV0dXJuZWQgIiArIHAgKyAiIGluc3RlYWQgb2YgMCIpOworICAgICAgICAgd2hpbGUgKHAgIT0gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgcCA9IHJiYmkubmV4dCgpOworICAgICAgICAgICAgIGlmIChwICE9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgICAgICBpZiAocCA8PSBsYXN0UCkKKyAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJuZXh0KCkgZmFpbGVkIHRvIG1vdmUgZm9yd2FyZDogbmV4dCgpIG9uIHBvc2l0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxhc3RQICsgIiB5aWVsZGVkICIgKyBwKTsKKworICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRWxlbWVudCh0ZXh0LnN1YnN0cmluZyhsYXN0UCwgcCkpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgaWYgKGxhc3RQICE9IHRleHQubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgICBlcnJsbigibmV4dCgpIHJldHVybmVkIERPTkUgcHJlbWF0dXJlbHk6IG9mZnNldCB3YXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbGFzdFAgKyAiIGluc3RlYWQgb2YgIiArIHRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBsYXN0UCA9IHA7CisgICAgICAgICB9CisgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICB9CisKKyAgICAgcHJpdmF0ZSBWZWN0b3IgX3Rlc3RMYXN0QW5kUHJldmlvdXMoUnVsZUJhc2VkQnJlYWtJdGVyYXRvciByYmJpLCBTdHJpbmcgdGV4dCkgeworICAgICAgICAgaW50IHAgPSByYmJpLmxhc3QoKTsKKyAgICAgICAgIGludCBsYXN0UCA9IHA7CisgICAgICAgICBWZWN0b3IgcmVzdWx0ID0gbmV3IFZlY3RvcigpOworCisgICAgICAgICBpZiAocCAhPSB0ZXh0Lmxlbmd0aCgpKQorICAgICAgICAgICAgIGVycmxuKCJsYXN0KCkgcmV0dXJuZWQgIiArIHAgKyAiIGluc3RlYWQgb2YgIiArIHRleHQubGVuZ3RoKCkpOworICAgICAgICAgd2hpbGUgKHAgIT0gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgcCA9IHJiYmkucHJldmlvdXMoKTsKKyAgICAgICAgICAgICBpZiAocCAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgICAgICAgaWYgKHAgPj0gbGFzdFApCisgICAgICAgICAgICAgICAgICAgICBlcnJsbigicHJldmlvdXMoKSBmYWlsZWQgdG8gbW92ZSBiYWNrd2FyZDogcHJldmlvdXMoKSBvbiBwb3NpdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsYXN0UCArICIgeWllbGRlZCAiICsgcCk7CisKKyAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydEVsZW1lbnRBdCh0ZXh0LnN1YnN0cmluZyhwLCBsYXN0UCksIDApOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgaWYgKGxhc3RQICE9IDApCisgICAgICAgICAgICAgICAgICAgICBlcnJsbigicHJldmlvdXMoKSByZXR1cm5lZCBET05FIHByZW1hdHVyZWx5OiBvZmZzZXQgd2FzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxhc3RQICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgbGFzdFAgPSBwOworICAgICAgICAgfQorICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgfQorCisgICAgIHByaXZhdGUgdm9pZCBjb21wYXJlRnJhZ21lbnRMaXN0cyhTdHJpbmcgZjFOYW1lLCBTdHJpbmcgZjJOYW1lLCBWZWN0b3IgZjEsIFZlY3RvciBmMikgeworICAgICAgICAgaW50IHAxID0gMDsKKyAgICAgICAgIGludCBwMiA9IDA7CisgICAgICAgICBTdHJpbmcgczE7CisgICAgICAgICBTdHJpbmcgczI7CisgICAgICAgICBpbnQgdDEgPSAwOworICAgICAgICAgaW50IHQyID0gMDsKKworICAgICAgICAgd2hpbGUgKHAxIDwgZjEuc2l6ZSgpICYmIHAyIDwgZjIuc2l6ZSgpKSB7CisgICAgICAgICAgICAgczEgPSAoU3RyaW5nKWYxLmVsZW1lbnRBdChwMSk7CisgICAgICAgICAgICAgczIgPSAoU3RyaW5nKWYyLmVsZW1lbnRBdChwMik7CisgICAgICAgICAgICAgdDEgKz0gczEubGVuZ3RoKCk7CisgICAgICAgICAgICAgdDIgKz0gczIubGVuZ3RoKCk7CisKKyAgICAgICAgICAgICBpZiAoczEuZXF1YWxzKHMyKSkgeworICAgICAgICAgICAgICAgICBkZWJ1Z0xvZ2xuKCIgICA+IiArIHMxICsgIjwiKTsKKyAgICAgICAgICAgICAgICAgKytwMTsKKyAgICAgICAgICAgICAgICAgKytwMjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIGludCB0ZW1wVDEgPSB0MTsKKyAgICAgICAgICAgICAgICAgaW50IHRlbXBUMiA9IHQyOworICAgICAgICAgICAgICAgICBpbnQgdGVtcFAxID0gcDE7CisgICAgICAgICAgICAgICAgIGludCB0ZW1wUDIgPSBwMjsKKworICAgICAgICAgICAgICAgICB3aGlsZSAodGVtcFQxICE9IHRlbXBUMiAmJiB0ZW1wUDEgPCBmMS5zaXplKCkgJiYgdGVtcFAyIDwgZjIuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGVtcFQxIDwgdGVtcFQyICYmIHRlbXBQMSA8IGYxLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUMSArPSAoKFN0cmluZylmMS5lbGVtZW50QXQodGVtcFAxKSkubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgKyt0ZW1wUDE7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGVtcFQyIDwgdGVtcFQxICYmIHRlbXBQMiA8IGYyLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUMiArPSAoKFN0cmluZylmMi5lbGVtZW50QXQodGVtcFAyKSkubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgKyt0ZW1wUDI7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgbG9nbG4oIioqKiAiICsgZjFOYW1lICsgIiBoYXM6Iik7CisgICAgICAgICAgICAgICAgIHdoaWxlIChwMSA8PSB0ZW1wUDEgJiYgcDEgPCBmMS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgIHMxID0gKFN0cmluZylmMS5lbGVtZW50QXQocDEpOworICAgICAgICAgICAgICAgICAgICAgdDEgKz0gczEubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0xvZ2xuKCIgKioqID4iICsgczEgKyAiPCIpOworICAgICAgICAgICAgICAgICAgICAgKytwMTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBsb2dsbigiKioqKiogIiArIGYyTmFtZSArICIgaGFzOiIpOworICAgICAgICAgICAgICAgICB3aGlsZSAocDIgPD0gdGVtcFAyICYmIHAyIDwgZjIuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICBzMiA9IChTdHJpbmcpZjIuZWxlbWVudEF0KHAyKTsKKyAgICAgICAgICAgICAgICAgICAgIHQyICs9IHMyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAgZGVidWdMb2dsbigiICoqKioqID4iICsgczIgKyAiPCIpOworICAgICAgICAgICAgICAgICAgICAgKytwMjsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBlcnJsbigiRGlzY3JlcGFuY3kgYmV0d2VlbiAiICsgZjFOYW1lICsgIiBhbmQgIiArIGYyTmFtZSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgX3Rlc3RGb2xsb3dpbmcoUnVsZUJhc2VkQnJlYWtJdGVyYXRvciByYmJpLCBTdHJpbmcgdGV4dCwgaW50W10gYm91bmRhcmllcykgeworICAgICAgIGxvZ2xuKCJ0ZXN0Rm9sbG93aW5nKCk6Iik7CisgICAgICAgaW50IHAgPSAyOworICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gdGV4dC5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgIGlmIChpID09IGJvdW5kYXJpZXNbcF0pCisgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgIGludCBiID0gcmJiaS5mb2xsb3dpbmcoaSk7CisgICAgICAgICAgIGxvZ2xuKCJyYmJpLmZvbGxvd2luZygiICsgaSArICIpIC0+ICIgKyBiKTsKKyAgICAgICAgICAgaWYgKGIgIT0gYm91bmRhcmllc1twXSkKKyAgICAgICAgICAgICAgIGVycmxuKCJXcm9uZyByZXN1bHQgZnJvbSBmb2xsb3dpbmcoKSBmb3IgIiArIGkgKyAiOiBleHBlY3RlZCAiICsgYm91bmRhcmllc1twXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgZ290ICIgKyBiKTsKKyAgICAgICB9CisgICB9CisKKyAgIHByaXZhdGUgdm9pZCBfdGVzdFByZWNlZGluZyhSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHJiYmksIFN0cmluZyB0ZXh0LCBpbnRbXSBib3VuZGFyaWVzKSB7CisgICAgICAgbG9nbG4oInRlc3RQcmVjZWRpbmcoKToiKTsKKyAgICAgICBpbnQgcCA9IDA7CisgICAgICAgZm9yKGludCBpID0gMDsgaSA8PSB0ZXh0Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgaW50IGIgPSByYmJpLnByZWNlZGluZyhpKTsKKyAgICAgICAgICAgbG9nbG4oInJiYmkucHJlY2VkaW5nKCIgKyBpICsgIikgLT4gIiArIGIpOworICAgICAgICAgICBpZiAoYiAhPSBib3VuZGFyaWVzW3BdKQorICAgICAgICAgICAgICAgZXJybG4oIldyb25nIHJlc3VsdCBmcm9tIHByZWNlZGluZygpIGZvciAiICsgaSArICI6IGV4cGVjdGVkICIgKyBib3VuZGFyaWVzW3BdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGdvdCAiICsgYik7CisgICAgICAgICAgIGlmIChpID09IGJvdW5kYXJpZXNbcCArIDFdKQorICAgICAgICAgICAgICAgKytwOworICAgICAgIH0KKyAgIH0KKworICAgcHJpdmF0ZSB2b2lkIF90ZXN0SXNCb3VuZGFyeShSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHJiYmksIFN0cmluZyB0ZXh0LCBpbnRbXSBib3VuZGFyaWVzKSB7CisgICAgICAgbG9nbG4oInRlc3RJc0JvdW5kYXJ5KCk6Iik7CisgICAgICAgaW50IHAgPSAxOworICAgICAgIGJvb2xlYW4gaXNCOworICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gdGV4dC5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgIGlzQiA9IHJiYmkuaXNCb3VuZGFyeShpKTsKKyAgICAgICAgICAgbG9nbG4oInJiYmkuaXNCb3VuZGFyeSgiICsgaSArICIpIC0+ICIgKyBpc0IpOworICAgICAgICAgICBpZihpID09IGJvdW5kYXJpZXNbcF0pIHsKKyAgICAgICAgICAgICAgIGlmICghaXNCKQorICAgICAgICAgICAgICAgICAgIGVycmxuKCJXcm9uZyByZXN1bHQgZnJvbSBpc0JvdW5kYXJ5KCkgZm9yICIgKyBpICsgIjogZXhwZWN0ZWQgdHJ1ZSwgZ290IGZhbHNlIik7CisgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICBpZihpc0IpCisgICAgICAgICAgICAgICAgICAgZXJybG4oIldyb25nIHJlc3VsdCBmcm9tIGlzQm91bmRhcnkoKSBmb3IgIiArIGkgKyAiOiBleHBlY3RlZCBmYWxzZSwgZ290IHRydWUiKTsKKyAgICAgICAgICAgfQorICAgICAgIH0KKyAgIH0KKyAgIHByaXZhdGUgdm9pZCBkb011bHRpcGxlU2VsZWN0aW9uVGVzdChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGl0ZXJhdG9yLCBTdHJpbmcgdGVzdFRleHQpCisgICB7CisgICAgICAgbG9nbG4oIk11bHRpcGxlIHNlbGVjdGlvbiB0ZXN0Li4uIik7CisgICAgICAgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciB0ZXN0SXRlcmF0b3IgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcilpdGVyYXRvci5jbG9uZSgpOworICAgICAgIGludCBvZmZzZXQgPSBpdGVyYXRvci5maXJzdCgpOworICAgICAgIGludCB0ZXN0T2Zmc2V0OworICAgICAgIGludCBjb3VudCA9IDA7CisKKyAgICAgICBkbyB7CisgICAgICAgICAgIHRlc3RPZmZzZXQgPSB0ZXN0SXRlcmF0b3IuZmlyc3QoKTsKKyAgICAgICAgICAgdGVzdE9mZnNldCA9IHRlc3RJdGVyYXRvci5uZXh0KGNvdW50KTsKKyAgICAgICAgICAgbG9nbG4oIm5leHQoIiArIGNvdW50ICsgIikgLT4gIiArIHRlc3RPZmZzZXQpOworICAgICAgICAgICBpZiAob2Zmc2V0ICE9IHRlc3RPZmZzZXQpCisgICAgICAgICAgICAgICBlcnJsbigibmV4dChuKSBhbmQgbmV4dCgpIG5vdCByZXR1cm5pbmcgY29uc2lzdGVudCByZXN1bHRzOiBmb3Igc3RlcCAiICsgY291bnQgKyAiLCBuZXh0KG4pIHJldHVybmVkICIgKyB0ZXN0T2Zmc2V0ICsgIiBhbmQgbmV4dCgpIGhhZCAiICsgb2Zmc2V0KTsKKworICAgICAgICAgICBpZiAob2Zmc2V0ICE9IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgIG9mZnNldCA9IGl0ZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgfQorICAgICAgIH0gd2hpbGUgKG9mZnNldCAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUpOworCisgICAgICAgLy8gbm93IGRvIGl0IGJhY2t3YXJkcy4uLgorICAgICAgIG9mZnNldCA9IGl0ZXJhdG9yLmxhc3QoKTsKKyAgICAgICBjb3VudCA9IDA7CisKKyAgICAgICBkbyB7CisgICAgICAgICAgIHRlc3RPZmZzZXQgPSB0ZXN0SXRlcmF0b3IubGFzdCgpOworICAgICAgICAgICB0ZXN0T2Zmc2V0ID0gdGVzdEl0ZXJhdG9yLm5leHQoY291bnQpOworICAgICAgICAgICBsb2dsbigibmV4dCgiICsgY291bnQgKyAiKSAtPiAiICsgdGVzdE9mZnNldCk7CisgICAgICAgICAgIGlmIChvZmZzZXQgIT0gdGVzdE9mZnNldCkKKyAgICAgICAgICAgICAgIGVycmxuKCJuZXh0KG4pIGFuZCBuZXh0KCkgbm90IHJldHVybmluZyBjb25zaXN0ZW50IHJlc3VsdHM6IGZvciBzdGVwICIgKyBjb3VudCArICIsIG5leHQobikgcmV0dXJuZWQgIiArIHRlc3RPZmZzZXQgKyAiIGFuZCBuZXh0KCkgaGFkICIgKyBvZmZzZXQpOworCisgICAgICAgICAgIGlmIChvZmZzZXQgIT0gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgICBjb3VudC0tOworICAgICAgICAgICAgICAgb2Zmc2V0ID0gaXRlcmF0b3IucHJldmlvdXMoKTsKKyAgICAgICAgICAgfQorICAgICAgIH0gd2hpbGUgKG9mZnNldCAhPSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkRPTkUpOworICAgfQorCisgICBwcml2YXRlIHZvaWQgZGVidWdMb2dsbihTdHJpbmcgcykgeworICAgICAgICBmaW5hbCBTdHJpbmcgemVyb3MgPSAiMDAwMCI7CisgICAgICAgIFN0cmluZyB0ZW1wOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgY2hhciBjID0gcy5jaGFyQXQoaSk7CisgICAgICAgICAgICBpZiAoYyA+PSAnICcgJiYgYyA8ICdcdTAwN2YnKQorICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoYyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKCJcXHUiKTsKKyAgICAgICAgICAgICAgICB0ZW1wID0gSW50ZWdlci50b0hleFN0cmluZygoaW50KWMpOworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoemVyb3Muc3Vic3RyaW5nKDAsIDQgLSB0ZW1wLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCh0ZW1wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgbG9nbG4ob3V0LnRvU3RyaW5nKCkpOworICAgIH0KKyAgCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcmJiaS9TaW1wbGVCSVRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9yYmJpL1NpbXBsZUJJVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjMWYyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcmJiaS9TaW1wbGVCSVRlc3QuamF2YQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvU2ltcGxlQklUZXN0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MTYgJCAKKyAqICRSZXZpc2lvbjogMS42ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5yYmJpOworCitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkJyZWFrSXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CisKK3B1YmxpYyBjbGFzcyBTaW1wbGVCSVRlc3QgZXh0ZW5kcyBUZXN0Rm13a3sKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB0ZXN0VGV4dCA9CisvLyAgICAgICAgIlRoZSByYWluIGluIFNwYWluIHN0YXlzIG1haW5seSBvbiB0aGUgcGxhaW4uICBUaGUgcGxhaW5zIGluIFNwYWluIGFyZSBtYWlubHkgcGFpbmVkIHdpdGggcmFpbi4iOworLy8ib25lLXR3byBub3ctLSAgSGFoISAgWW91IG93ZSBtZSBleGFjdGx5ICQxLDM0NS42Ny4uLiAgUGF5IHVwLCBodWg/ICBCeSB0aGUgd2F5LCB3aHkgZG9uJ3QgSSBzZW5kIHlvdSBteSByZVx1MDMwMXN1bWVcdTAzMDE/ICBUaGlzIGlzIGEgbGluZVxyXG5icmVhay4iOworLy8ibm93aXN0aGV0aW1lZm9yYWxsZ29vZG1lbi4uLiAgdG9jb21ldG90aGVoZWxwb2Z0aGVpcmNvdW50cnkiOworIldoZW4sIGluIHRoZSBjb3Vyc2Ugb2YgaHVtYW4gZXZlbnRzLCBpdCBiZWNvbWVzIG5lY2Vzc2FyeSBmb3Igb25lIHBlb3BsZSB0byBkaXNzb2x2ZSB0aGUgcG9saXRpY2FsIGJvbmRzIHdoaWNoIGhhdmUgIgorLy8iV2hlbixpbnRoZWNvdXJzZW9maHVtYW5ldmVudHMsaXRiZWNvbWVzbmVjZXNzYXJ5Zm9yb25lcGVvcGxldG9kaXNzb2x2ZXRoZXBvbGl0aWNhbGJvbmRzd2hpY2hoYXZlIgorKyAiY29ubmVjdGVkdGhlbXdpdGhhbm90aGVyLGFuZHRvYXNzdW1lYW1vbmd0aGVwb3dlcnNvZnRoZWVhcnRoLHRoZXNlcGFyYXRlYW5kZXF1YWxzdGF0aW9udG93aGljaHRoZWxhd3MiCisrICJvZm5hdHVyZWFuZG9mbmF0dXJlJ3NHb2RlbnRpdGxldGhlbSxhZGVjZW50cmVzcGVjdHRvdGhlb3BpbmlvbnNvZm1hbmtpbmRyZXF1aXJlc3RoYXR0aGV5c2hvdWxkZGVjbGFyZXRoZSIKKysgImNhdXNlc3doaWNoaW1wZWx0aGVtdG90aGVzZXBhcmF0aW9uXG4iCisrICJXZWhvbGR0aGVzZXRydXRoc3RvYmVzZWxmLWV2aWRlbnQsdGhhdGFsbG1lbmFyZWNyZWF0ZWRlcXVhbCx0aGF0dGhleWFyZWVuZG93ZWRieXRoZWlyQ3JlYXRvcndpdGhjZXJ0YWluIgorKyAidW5hbGllbmFibGVyaWdodHMsdGhhdGFtb25ndGhlc2VhcmVsaWZlLGxpYmVydHlhbmR0aGVwdXJzdWl0b2ZoYXBwaW5lc3MuVGhhdHRvc2VjdXJldGhlc2VyaWdodHMsZ292ZXJubWVudHNhcmUiCisrICJpbnN0aXR1dGVkYW1vbmdtZW4sZGVyaXZpbmd0aGVpcmp1c3Rwb3dlcnNmcm9tdGhlY29uc2VudG9mdGhlZ292ZXJuZWQuVGhhdHdoZW5ldmVyYW55Zm9ybW9mZ292ZXJubWVudCIKKysgImJlY29tZXNkZXN0cnVjdGl2ZXRvdGhlc2VlbmRzLGl0aXN0aGVyaWdodG9mdGhlcGVvcGxldG9hbHRlcm9ydG9hYm9saXNoaXQsYW5kdG9pbnN0aXR1dGVuZXdnb3Zlcm5tZW50LGxheWluZyIKKysgIml0c2ZvdW5kYXRpb25vbnN1Y2hwcmluY2lwbGVzYW5kb3JnYW5pemluZ2l0c3Bvd2Vyc2luc3VjaGZvcm0sYXN0b3RoZW1zaGFsbHNlZW1tb3N0bGlrZWx5dG9lZmZlY3R0aGVpcnNhZmV0eSIKKysgImFuZGhhcHBpbmVzcy5QcnVkZW5jZSxpbmRlZWQsd2lsbGRpY3RhdGV0aGF0Z292ZXJubWVudHNsb25nZXN0YWJsaXNoZWRzaG91bGRub3RiZWNoYW5nZWRmb3JsaWdodGFuZHRyYW5zaWVudCIKKysgImNhdXNlczthbmRhY2NvcmRpbmdseWFsbGV4cGVyaWVuY2VoYXRoc2hvd250aGF0bWFua2luZGFyZW1vcmVkaXNwb3NlZHRvc3VmZmVyLHdoaWxlZXZpbHNhcmVzdWZmZXJhYmxlLHRoYW4iCisrICJ0b3JpZ2h0dGhlbXNlbHZlc2J5YWJvbGlzaGluZ3RoZWZvcm1zdG93aGljaHRoZXlhcmVhY2N1c3RvbWVkLkJ1dHdoZW5hbG9uZ3RyYWlub2ZhYnVzZXNhbmR1c3VycGF0aW9ucywiCisrICJwdXJzdWluZ2ludmFyaWFibHl0aGVzYW1lb2JqZWN0ZXZpbmNlc2FkZXNpZ250b3JlZHVjZXRoZW11bmRlcmFic29sdXRlZGVzcG90aXNtLGl0aXN0aGVpcnJpZ2h0LGl0aXN0aGVpcmR1dHksIgorKyAidG90aHJvd29mZnN1Y2hnb3Zlcm5tZW50LGFuZHRvcHJvdmlkZW5ld2d1YXJkc2ZvcnRoZWlyZnV0dXJlc2VjdXJpdHkuLS1TdWNoaGFzYmVlbnRoZXBhdGllbnRzdWZmZXJhbmNlb2YiCisrICJ0aGVzZWNvbG9uaWVzO2FuZHN1Y2hpc25vd3RoZW5lY2Vzc2l0eXdoaWNoY29uc3RyYWluc3RoZW10b2FsdGVydGhlaXJmb3JtZXJzeXN0ZW1zb2Znb3Zlcm5tZW50LlRoZWhpc3RvcnkiCisrICJvZnRoZXByZXNlbnRLaW5nb2ZHcmVhdEJyaXRhaW5pc2FoaXN0b3J5b2ZyZXBlYXRlZGluanVyaWVzYW5kdXN1cnBhdGlvbnMsYWxsaGF2aW5naW5kaXJlY3RvYmplY3R0aGUiCisrICJlc3RhYmxpc2htZW50b2ZhbmFic29sdXRldHlyYW5ueW92ZXJ0aGVzZXN0YXRlcy5Ub3Byb3ZldGhpcyxsZXRmYWN0c2Jlc3VibWl0dGVkdG9hY2FuZGlkd29ybGQuXG4iCisrICJIZWhhc3JlZnVzZWRoaXNhc3NlbnR0b2xhd3MsdGhlbW9zdHdob2xlc29tZWFuZG5lY2Vzc2FyeWZvcnRoZXB1YmxpY2dvb2QuXG4iCisrICJIZWhhc2ZvcmJpZGRlbmhpc2dvdmVybm9yc3RvcGFzc2xhd3NvZmltbWVkaWF0ZWFuZHByZXNzaW5naW1wb3J0YW5jZSx1bmxlc3NzdXNwZW5kZWRpbnRoZWlyb3BlcmF0aW9udGlsbCIKKysgImhpc2Fzc2VudHNob3VsZGJlb2J0YWluZWQ7YW5kd2hlbnNvc3VzcGVuZGVkLGhlaGFzdXR0ZXJseW5lZ2xlY3RlZHRvYXR0ZW5kdG90aGVtLlxuIgorKyAiSGVoYXNyZWZ1c2VkdG9wYXNzb3RoZXJsYXdzZm9ydGhlYWNjb21tb2RhdGlvbm9mbGFyZ2VkaXN0cmljdHNvZnBlb3BsZSx1bmxlc3N0aG9zZXBlb3BsZXdvdWxkcmVsaW5xdWlzaCIKKysgInRoZXJpZ2h0b2ZyZXByZXNlbnRhdGlvbmludGhlbGVnaXNsYXR1cmUsYXJpZ2h0aW5lc3RpbWFibGV0b3RoZW1hbmRmb3JtaWRhYmxldG90eXJhbnRzb25seS5cbiIKKysgIkhlaGFzY2FsbGVkdG9nZXRoZXJsZWdpc2xhdGl2ZWJvZGllc2F0cGxhY2VzdW51c3VhbCx1bmNvbWZvcnRhYmxlLGFuZGRpc3RhbnRmcm9tdGhlZGVwb3NpdG9yeW9mdGhlaXJwdWJsaWMiCisrICJyZWNvcmRzLGZvcnRoZXNvbGVwdXJwb3Nlb2ZmYXRpZ3Vpbmd0aGVtaW50b2NvbXBsaWFuY2V3aXRoaGlzbWVhc3VyZXMuXG4iCisrICJIZWhhc2Rpc3NvbHZlZHJlcHJlc2VudGF0aXZlaG91c2VzcmVwZWF0ZWRseSxmb3JvcHBvc2luZ3dpdGhtYW5seWZpcm1uZXNzaGlzaW52YXNpb25zb250aGVyaWdodHNvZnRoZXBlb3BsZS5cbiIKKysgIkhlaGFzcmVmdXNlZGZvcmFsb25ndGltZSxhZnRlcnN1Y2hkaXNzb2x1dGlvbnMsdG9jYXVzZW90aGVyc3RvYmVlbGVjdGVkO3doZXJlYnl0aGVsZWdpc2xhdGl2ZXBvd2VycywiCisrICJpbmNhcGFibGVvZmFubmloaWxhdGlvbixoYXZlcmV0dXJuZWR0b3RoZXBlb3BsZWF0bGFyZ2Vmb3J0aGVpcmV4ZXJjaXNlO3RoZXN0YXRlcmVtYWluaW5naW50aGVtZWFudGltZWV4cG9zZWQiCisrICJ0b2FsbHRoZWRhbmdlcnNvZmludmFzaW9uZnJvbXdpdGhvdXQsYW5kY29udnVsc2lvbnN3aXRoaW4uXG4iCisrICJIZWhhc2VuZGVhdm9yZWR0b3ByZXZlbnR0aGVwb3B1bGF0aW9ub2Z0aGVzZXN0YXRlcztmb3J0aGF0cHVycG9zZW9ic3RydWN0aW5ndGhlbGF3c2Zvcm5hdHVyYWxpemF0aW9ub2YiCisrICJmb3JlaWduZXJzO3JlZnVzaW5ndG9wYXNzb3RoZXJzdG9lbmNvdXJhZ2V0aGVpcm1pZ3JhdGlvbmhpdGhlcixhbmRyYWlzaW5ndGhlY29uZGl0aW9uc29mbmV3YXBwcm9wcmlhdGlvbnNvZiIKKysgImxhbmRzLlxuIgorKyAiSGVoYXNvYnN0cnVjdGVkdGhlYWRtaW5pc3RyYXRpb25vZmp1c3RpY2UsYnlyZWZ1c2luZ2hpc2Fzc2VudHRvbGF3c2ZvcmVzdGFibGlzaGluZ2p1ZGljaWFyeXBvd2Vycy5cbiIKKysgIkhlaGFzbWFkZWp1ZGdlc2RlcGVuZGVudG9uaGlzd2lsbGFsb25lLGZvcnRoZXRlbnVyZW9mdGhlaXJvZmZpY2VzLGFuZHRoZWFtb3VudGFuZHBheW1lbnRvZnRoZWlyc2FsYXJpZXMuXG4iCisrICJIZWhhc2VyZWN0ZWRhbXVsdGl0dWRlb2ZuZXdvZmZpY2VzLGFuZHNlbnRoaXRoZXJzd2FybXNvZm9mZmljZXJzdG9oYXJhc3NvdXJwZW9wbGUsYW5kZWF0b3V0dGhlaXIiCisrICJzdWJzdGFuY2UuXG4iCisrICJIZWhhc2tlcHRhbW9uZ3VzLGludGltZXNvZnBlYWNlLHN0YW5kaW5nYXJtaWVzd2l0aG91dHRoZWNvbnNlbnRvZm91cmxlZ2lzbGF0dXJlLlxuIgorKyAiSGVoYXNhZmZlY3RlZHRvcmVuZGVydGhlbWlsaXRhcnlpbmRlcGVuZGVudG9mYW5kc3VwZXJpb3J0b2NpdmlscG93ZXIuXG4iCisrICJIZWhhc2NvbWJpbmVkd2l0aG90aGVyc3Rvc3ViamVjdHVzdG9hanVyaXNkaWN0aW9uZm9yZWlnbnRvb3VyY29uc3RpdHV0aW9uLGFuZHVuYWNrbm93bGVkZ2VkYnlvdXJsYXdzOyIKKysgImdpdmluZ2hpc2Fzc2VudHRvdGhlaXJhY3Rzb2ZwcmV0ZW5kZWRsZWdpc2xhdGlvbjpcbiIKKysgIkZvcnF1YXJ0ZXJpbmdsYXJnZWJvZGllc29mYXJtZWR0cm9vcHNhbW9uZ3VzOlxuIgorKyAiRm9ycHJvdGVjdGluZ3RoZW0sYnltb2NrdHJpYWwsZnJvbXB1bmlzaG1lbnRmb3JhbnltdXJkZXJzd2hpY2h0aGV5c2hvdWxkY29tbWl0b250aGVpbmhhYml0YW50c29mdGhlc2UiCisrICJzdGF0ZXM6XG4iCisrICJGb3JjdXR0aW5nb2Zmb3VydHJhZGV3aXRoYWxscGFydHNvZnRoZXdvcmxkOlxuIgorKyAiRm9yaW1wb3Npbmd0YXhlc29udXN3aXRob3V0b3VyY29uc2VudDpcbiIKKysgIkZvcmRlcHJpdmluZ3VzaW5tYW55Y2FzZXMsb2Z0aGViZW5lZml0c29mdHJpYWxieWp1cnk6XG4iCisrICJGb3J0cmFuc3BvcnRpbmd1c2JleW9uZHNlYXN0b2JldHJpZWRmb3JwcmV0ZW5kZWRvZmZlbnNlczpcbiIKKysgIkZvcmFib2xpc2hpbmd0aGVmcmVlc3lzdGVtb2ZFbmdsaXNobGF3c2luYW5laWdoYm9yaW5ncHJvdmluY2UsZXN0YWJsaXNoaW5ndGhlcmVpbmFuYXJiaXRyYXJ5Z292ZXJubWVudCxhbmQiCisrICJlbmxhcmdpbmdpdHNib3VuZGFyaWVzc29hc3RvcmVuZGVyaXRhdG9uY2VhbmV4YW1wbGVhbmRmaXRpbnN0cnVtZW50Zm9yaW50cm9kdWNpbmd0aGVzYW1lYWJzb2x1dGVydWxlaW50aGVzZSIKKysgImNvbG9uaWVzOlxuIgorKyAiRm9ydGFraW5nYXdheW91cmNoYXJ0ZXJzLGFib2xpc2hpbmdvdXJtb3N0dmFsdWFibGVsYXdzLGFuZGFsdGVyaW5nZnVuZGFtZW50YWxseXRoZWZvcm1zb2ZvdXJnb3Zlcm5tZW50czpcbiIKKysgIkZvcnN1c3BlbmRpbmdvdXJvd25sZWdpc2xhdHVyZXMsYW5kZGVjbGFyaW5ndGhlbXNlbHZlc2ludmVzdGVkd2l0aHBvd2VydG9sZWdpc2xhdGVmb3J1c2luYWxsY2FzZXN3aGF0c29ldmVyLlxuIgorKyAiSGVoYXNhYmRpY2F0ZWRnb3Zlcm5tZW50aGVyZSxieWRlY2xhcmluZ3Vzb3V0b2ZoaXNwcm90ZWN0aW9uYW5kd2FnaW5nd2FyYWdhaW5zdHVzLlxuIgorKyAiSGVoYXNwbHVuZGVyZWRvdXJzZWFzLHJhdmFnZWRvdXJjb2FzdHMsYnVybmVkb3VydG93bnMsYW5kZGVzdHJveWVkdGhlbGl2ZXNvZm91cnBlb3BsZS5cbiIKKysgIkhlaXNhdHRoaXN0aW1ldHJhbnNwb3J0aW5nbGFyZ2Vhcm1pZXNvZmZvcmVpZ25tZXJjZW5hcmllc3RvY29tcGxldGV0aGV3b3Jrc29mZGVhdGgsZGVzb2xhdGlvbmFuZHR5cmFubnksIgorKyAiYWxyZWFkeWJlZ3Vud2l0aGNpcmN1bXN0YW5jZXNvZmNydWVsdHlhbmRwZXJmaWR5c2NhcmNlbHlwYXJhbGxlbGVkaW50aGVtb3N0YmFyYmFyb3VzYWdlcyxhbmR0b3RhbHl1bndvcnRoIgorKyAidGhlaGVhZG9mYWNpdmlsaXplZG5hdGlvbi5cbiIKKysgIkhlaGFzY29uc3RyYWluZWRvdXJmZWxsb3djaXRpemVuc3Rha2VuY2FwdGl2ZW9udGhlaGlnaHNlYXN0b2JlYXJhcm1zYWdhaW5zdHRoZWlyY291bnRyeSx0b2JlY29tZXRoZSIKKysgImV4ZWN1dGlvbmVyc29mdGhlaXJmcmllbmRzYW5kYnJldGhyZW4sb3J0b2ZhbGx0aGVtc2VsdmVzYnl0aGVpcmhhbmRzLlxuIgorKyAiSGVoYXNleGNpdGVkZG9tZXN0aWNpbnN1cnJlY3Rpb25zYW1vbmdzdHVzLGFuZGhhc2VuZGVhdm9yZWR0b2JyaW5nb250aGVpbmhhYml0YW50c29mb3VyZnJvbnRpZXJzLHRoZSIKKysgIm1lcmNpbGVzc0luZGlhbnNhdmFnZXMsd2hvc2Vrbm93bnJ1bGVvZndhcmZhcmUsaXN1bmRpc3Rpbmd1aXNoZWRkZXN0cnVjdGlvbm9mYWxsYWdlcyxzZXhlc2FuZGNvbmRpdGlvbnMuXG4iCisrICJJbmV2ZXJ5c3RhZ2VvZnRoZXNlb3BwcmVzc2lvbnN3ZWhhdmVwZXRpdGlvbmVkZm9ycmVkcmVzc2ludGhlbW9zdGh1bWJsZXRlcm1zOm91cnJlcGVhdGVkcGV0aXRpb25zaGF2ZSIKKysgImJlZW5hbnN3ZXJlZG9ubHlieXJlcGVhdGVkaW5qdXJ5LkFwcmluY2Usd2hvc2VjaGFyYWN0ZXJpc3RodXNtYXJrZWRieWV2ZXJ5YWN0d2hpY2htYXlkZWZpbmVhdHlyYW50LGlzIgorKyAidW5maXR0b2JldGhlcnVsZXJvZmFmcmVlcGVvcGxlLlxuIgorKyAiTm9yaGF2ZXdlYmVlbndhbnRpbmdpbmF0dGVudGlvbnRvb3VyQnJpdGlzaGJyZXRocmVuLldlaGF2ZXdhcm5lZHRoZW1mcm9tdGltZXRvdGltZW9mYXR0ZW1wdHNieXRoZWlyIgorKyAibGVnaXNsYXR1cmV0b2V4dGVuZGFudW53YXJyYW50YWJsZWp1cmlzZGljdGlvbm92ZXJ1cy5XZWhhdmVyZW1pbmRlZHRoZW1vZnRoZWNpcmN1bXN0YW5jZXNvZm91cmVtaWdyYXRpb24iCisrICJhbmRzZXR0bGVtZW50aGVyZS5XZWhhdmVhcHBlYWxlZHRvdGhlaXJuYXRpdmVqdXN0aWNlYW5kbWFnbmFuaW1pdHksYW5kd2VoYXZlY29uanVyZWR0aGVtYnl0aGV0aWVzb2ZvdXIiCisrICJjb21tb25raW5kcmVkdG9kaXNhdm93dGhlc2V1c3VycGF0aW9ucyx3aGljaCx3b3VsZGluZXZpdGFibHlpbnRlcnJ1cHRvdXJjb25uZWN0aW9uc2FuZGNvcnJlc3BvbmRlbmNlLldlIgorKyAibXVzdCx0aGVyZWZvcmUsYWNxdWllc2NlaW50aGVuZWNlc3NpdHksd2hpY2hkZW5vdW5jZXNvdXJzZXBhcmF0aW9uLGFuZGhvbGR0aGVtLGFzd2Vob2xkdGhlcmVzdG9mbWFua2luZCwiCisrICJlbmVtaWVzaW53YXIsaW5wZWFjZWZyaWVuZHMuXG4iCisrICJXZSx0aGVyZWZvcmUsdGhlcmVwcmVzZW50YXRpdmVzb2Z0aGVVbml0ZWRTdGF0ZXNvZkFtZXJpY2EsaW5HZW5lcmFsQ29uZ3Jlc3MsYXNzZW1ibGVkLGFwcGVhbGluZ3RvdGhlIgorKyAiU3VwcmVtZUp1ZGdlb2Z0aGV3b3JsZGZvcnRoZXJlY3RpdHVkZW9mb3VyaW50ZW50aW9ucyxkbyxpbnRoZW5hbWUsYW5kYnl0aGVhdXRob3JpdHlvZnRoZWdvb2RwZW9wbGVvZiIKKysgInRoZXNlY29sb25pZXMsc29sZW1ubHlwdWJsaXNoYW5kZGVjbGFyZSx0aGF0dGhlc2V1bml0ZWRjb2xvbmllc2FyZSxhbmRvZnJpZ2h0b3VnaHR0b2JlZnJlZWFuZGluZGVwZW5kZW50IgorKyAic3RhdGVzO3RoYXR0aGV5YXJlYWJzb2x2ZWRmcm9tYWxsYWxsZWdpYW5jZXRvdGhlQnJpdGlzaENyb3duLGFuZHRoYXRhbGxwb2xpdGljYWxjb25uZWN0aW9uYmV0d2VlbnRoZW1hbmR0aGUiCisrICJzdGF0ZW9mR3JlYXRCcml0YWluLGlzYW5kb3VnaHR0b2JldG90YWxseWRpc3NvbHZlZDthbmR0aGF0YXNmcmVlYW5kaW5kZXBlbmRlbnRzdGF0ZXMsdGhleWhhdmVmdWxscG93ZXJ0byIKKysgImxldmV5d2FyLGNvbmNsdWRlcGVhY2UsY29udHJhY3RhbGxpYW5jZXMsZXN0YWJsaXNoY29tbWVyY2UsYW5kdG9kb2FsbG90aGVyYWN0c2FuZHRoaW5nc3doaWNoaW5kZXBlbmRlbnQiCisrICJzdGF0ZXNtYXlvZnJpZ2h0ZG8uQW5kZm9ydGhlc3VwcG9ydG9mdGhpc2RlY2xhcmF0aW9uLHdpdGhhZmlybXJlbGlhbmNlb250aGVwcm90ZWN0aW9ub2ZEaXZpbmVQcm92aWRlbmNlLHdlIgorKyAibXV0dWFsbHlwbGVkZ2V0b2VhY2hvdGhlcm91cmxpdmVzLG91cmZvcnR1bmVzYW5kb3Vyc2FjcmVkaG9ub3IuXG4iOworCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCW5ldyBTaW1wbGVCSVRlc3QoKS5ydW4oYXJncyk7CisJfQorCisgICAgcHVibGljIHZvaWQgdGVzdFdvcmRCcmVhaygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBCcmVha0l0ZXJhdG9yIHdvcmRCcmVhayA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKG5ldyBMb2NhbGUoImVuIiwgIlVTIiwgIlRFU1QiKSk7CisgICAgICAgIGludCBicmVha3MgPSBkb1Rlc3Qod29yZEJyZWFrKTsKKyAgICAgICAgbG9nbG4oU3RyaW5nLnZhbHVlT2YoYnJlYWtzKSk7CisJfQorCisgICAgcHVibGljIHZvaWQgdGVzdExpbmVCcmVhaygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBCcmVha0l0ZXJhdG9yIGxpbmVCcmVhayA9IEJyZWFrSXRlcmF0b3IuZ2V0TGluZUluc3RhbmNlKG5ldyBMb2NhbGUoImVuIiwgIlVTIiwgIlRFU1QiKSk7CisgICAgICAgIGludCBicmVha3MgPSBkb1Rlc3QobGluZUJyZWFrKTsKKyAgICAgICAgbG9nbG4oU3RyaW5nLnZhbHVlT2YoYnJlYWtzKSk7CisJfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNlbnRlbmNlQnJlYWsoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgQnJlYWtJdGVyYXRvciBzZW50ZW5jZUJyZWFrID0gQnJlYWtJdGVyYXRvci5nZXRTZW50ZW5jZUluc3RhbmNlKG5ldyBMb2NhbGUoImVuIiwgIlVTIiwgIlRFU1QiKSk7CisgICAgICAgIGludCBicmVha3MgPSBkb1Rlc3Qoc2VudGVuY2VCcmVhayk7CisgICAgICAgIGxvZ2xuKFN0cmluZy52YWx1ZU9mKGJyZWFrcykpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGRvVGVzdChCcmVha0l0ZXJhdG9yIGJpKSB7CisgICAgICAgIC8vIGZvcndhcmQKKyAgICAgICAgYmkuc2V0VGV4dCh0ZXN0VGV4dCk7CisgICAgICAgIGludCBwID0gYmkuZmlyc3QoKTsKKyAgICAgICAgaW50IGxhc3RQID0gcDsKKyAgICAgICAgU3RyaW5nIGZyYWdtZW50OworICAgICAgICBpbnQgYnJlYWtzID0gMDsKKyAgICAgICAgbG9nbG4oIkZvcndhcmQuLi4iKTsKKyAgICAgICAgd2hpbGUgKHAgIT0gQnJlYWtJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICBwID0gYmkubmV4dCgpOworICAgICAgICAgICAgaWYgKHAgIT0gQnJlYWtJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSB0ZXN0VGV4dC5zdWJzdHJpbmcobGFzdFAsIHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHRlc3RUZXh0LnN1YnN0cmluZyhsYXN0UCk7CisJCQl9CisgICAgICAgICAgICBkZWJ1Z1ByaW50bG4oIjogPiIgKyBmcmFnbWVudCArICI8Iik7CisgICAgICAgICAgICArK2JyZWFrczsKKyAgICAgICAgICAgIGxhc3RQID0gcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnJlYWtzOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkZWJ1Z1ByaW50bG4oU3RyaW5nIHMpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHplcm9zID0gIjAwMDAiOworICAgICAgICBTdHJpbmcgdGVtcDsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHMuY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGMgPj0gJyAnICYmIGMgPCAnXHUwMDdmJykKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGMpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgiXFx1Iik7CisgICAgICAgICAgICAgICAgdGVtcCA9IEludGVnZXIudG9IZXhTdHJpbmcoKGludCljKTsKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKHplcm9zLnN1YnN0cmluZygwLCA0IC0gdGVtcC5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQodGVtcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4ob3V0LnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkZWJ1Z1ByaW50bG4yKFN0cmluZyBzKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBzLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChjID49ICdcdTAxMDAnKQorICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoIjwiICsgKChpbnQpYyAtIDB4MTAwKSArICI+Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZChjKTsKKyAgICAgICAgfQorICAgICAgICBsb2dsbihvdXQudG9TdHJpbmcoKSk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcmJiaS9wYWNrYWdlLmh0bWwgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvcmJiaS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTJmMWI3NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9yYmJpL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3JiYmkvcGFja2FnZS5odG1sLHYgJAorICAkUmV2aXNpb246IDEuMSAkCisgICREYXRlOiAyMDAwLzAzLzE1IDIxOjM1OjQ5ICQKKy0tPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiPgorVGVzdHMgZm9yIHRoZSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9zYW1wbGUvTW9kdWxlVGVzdFNhbXBsZS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3NhbXBsZS9Nb2R1bGVUZXN0U2FtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjMDcxOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9zYW1wbGUvTW9kdWxlVGVzdFNhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTUwIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3NhbXBsZS9Nb2R1bGVUZXN0U2FtcGxlLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMjowMDo1OCAkCisgKiAkUmV2aXNpb246IDEuMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5zYW1wbGU7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5Nb2R1bGVUZXN0OworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3REYXRhTW9kdWxlOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3REYXRhTW9kdWxlLkRhdGFNYXA7CisKK3B1YmxpYyBjbGFzcyBNb2R1bGVUZXN0U2FtcGxlIGV4dGVuZHMgTW9kdWxlVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisJbmV3IE1vZHVsZVRlc3RTYW1wbGUoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgLy8gc3RhbmRhcmQgbG9vcCwgc2V0dGluZ3MgYW5kIGNhc2VzCisgICAgcHVibGljIHZvaWQgVGVzdDAxKCkgeworCXdoaWxlIChuZXh0U2V0dGluZ3MoKSkgeworCSAgICBsb2dsbigiLS0tLS0tLS0iKTsKKwkgICAgbG9nbG4oIlN0cmluZzogIiArIHNldHRpbmdzLmdldFN0cmluZygiYVN0cmluZyIpKTsKKwkgICAgaWYgKHNldHRpbmdzLmlzRGVmaW5lZCgiYW5JbnQiKSkgeworCQlsb2dsbigiSW50OiAiICsgc2V0dGluZ3MuZ2V0SW50KCJhbkludCIpKTsKKwkgICAgfQorCSAgICBsb2dsbigiQm9vbGVhbjogIiArIHNldHRpbmdzLmdldEJvb2xlYW4oImFCb29sZWFuIikpOworCisJICAgIHdoaWxlIChuZXh0Q2FzZSgpKSB7CisJCWxvZ2xuKCIgIC0tLS0iKTsKKwkJbG9nbG4oIiAgU3RyaW5nQXJyYXk6ICIgKyBwcmludEFycmF5KHRlc3RjYXNlLmdldFN0cmluZ0FycmF5KCJhU3RyaW5nQXJyYXkiKSkpOworCQlsb2dsbigiICBJbnRBcnJheTogIiArIHByaW50QXJyYXkodGVzdGNhc2UuZ2V0SW50QXJyYXkoImFuSW50QXJyYXkiKSkpOworCQlsb2dsbigiICBCb29sZWFuQXJyYXk6ICIgKyBwcmludEFycmF5KHRlc3RjYXNlLmdldEJvb2xlYW5BcnJheSgiYUJvb2xlYW5BcnJheSIpKSk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLy8gbG9vcCB3aXRoIGp1c3QgY2FzZXMKKyAgICBwdWJsaWMgdm9pZCBUZXN0MDIoKSB7CisJd2hpbGUgKG5leHRDYXNlKCkpIHsKKwkgICAgbG9nbG4oIi0tLS0iKTsKKwkgICAgbG9nbG4oIlN0cmluZzogIiArIHRlc3RjYXNlLmdldFN0cmluZygiYVN0cmluZyIpKTsKKwkgICAgbG9nbG4oIkludDogIiArIHRlc3RjYXNlLmdldEludCgiYW5JbnQiKSk7CisJICAgIGxvZ2xuKCJCb29sZWFuOiAiICsgdGVzdGNhc2UuZ2V0Qm9vbGVhbigiYUJvb2xlYW4iKSk7CisJfQorICAgIH0KKworICAgIC8vIG5vIGNhc2VzLCBqdXN0IHVzZXMgaW5mbyBmb3IgdGVzdAorICAgIHB1YmxpYyB2b2lkIFRlc3QwMygpIHsKKwlEYXRhTWFwIGluZm8gPSB0ZXN0SW5mbygpOworCWlmIChpbmZvICE9IG51bGwpIHsKKwkgICAgbG9nbG4oaW5mby5nZXRTdHJpbmcoVGVzdERhdGFNb2R1bGUuREVTQ1JJUFRJT04pKTsgLy8gc3RhbmRhcmQKKwkgICAgbG9nbG4oaW5mby5nZXRTdHJpbmcoIkV4dHJhIikpOyAvLyB0ZXN0LXNwZWNpZmljCisJfQorICAgIH0KKworICAgIC8vIG5vIGRhdGEsIE1vZHVsZVRlc3Qgc2hvdWxkIG5vdCBhbGxvdyB0aGlzIHRvIGV4ZWN1dGUgYnkgZGVmYXVsdAorICAgIHB1YmxpYyB2b2lkIFRlc3QwNCgpIHsKKwllcnJsbigiVGVzdDA0IHNob3VsZCBub3QgZXhlY3V0ZSEiKTsKKyAgICB9CisKKyAgICAvLyBzcGVjaWFsIG92ZXJyaWRlIG9mIHZhbGlkYXRlTWV0aG9kIGFsbG93cyBUZXN0MDUgCisgICAgLy8gdG8gZXhlY3V0ZSBldmVuIHRob3VnaCBpdCBoYXMgbm8gZGF0YSBpbiB0aGUgbW9kdWxlCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVNZXRob2QoU3RyaW5nIG1ldGhvZE5hbWUpIHsKKwlyZXR1cm4gbWV0aG9kTmFtZS5lcXVhbHMoIlRlc3QwNSIpID8gdHJ1ZSA6IHN1cGVyLnZhbGlkYXRlTWV0aG9kKG1ldGhvZE5hbWUpOworICAgIH0KKworICAgIC8vIG5vIGRhdGEsIGJ1dCBvdmVycmlkZSBvZiB2YWxpZGF0ZU1ldGhvZCBhbGxvd3MgaXQgdG8gZXhlY3V0ZQorICAgIHB1YmxpYyB2b2lkIFRlc3QwNSgpIHsKKwlsb2dsbigiVGVzdDA1IGV4ZWN1dGVkLiIpOworICAgIH0KKworICAgIC8vIFRoZSB0ZXN0IGRhdGEgY29udGFpbnMgYW4gZXJyb3IgaW4gdGhlIHRoaXJkIGNhc2UuICBXaGVuIGdldEludCgiRGF0YSIpIGlzCisgICAgLy8gZXhlY3V0ZWQgdGhlIGVycm9yIGlzIGxvZ2dlZCBhbmQgaXRlcmF0aW9uIHN0b3BzLgorICAgIHB1YmxpYyB2b2lkIFRlc3QwNigpIHsKKwl3aGlsZSAobmV4dENhc2UoKSkgeworCSAgICBsb2dsbigiLS0tLSIpOworCSAgICBsb2dsbigiaXNHb29kOiAiICsgdGVzdGNhc2UuZ2V0U3RyaW5nKCJJc0dvb2QiKSk7CisJICAgIGxvZ2xuKCIgIERhdGE6ICIgKyB0ZXN0Y2FzZS5nZXRJbnQoIkRhdGEiKSk7CisJfQorICAgIH0KKworICAgIC8vIFRoZSB0ZXN0IHVzaW5nIHRoZSBkYXRhIHJlcG9ydHMgYW4gZXJyb3IsIHdoaWNoIGFsc28gYXV0b21hdGljYWxseSBzdG9wcyBpdGVyYXRpb24uCisgICAgcHVibGljIHZvaWQgVGVzdDA3KCkgeworCXdoaWxlIChuZXh0U2V0dGluZ3MoKSkgeworCSAgICBpbnQgdmFsdWUgPSBzZXR0aW5ncy5nZXRJbnQoIlZhbHVlIik7CisJICAgIHdoaWxlIChuZXh0Q2FzZSgpKSB7CisJCWludCBmYWN0b3IgPSB0ZXN0Y2FzZS5nZXRJbnQoIkZhY3RvciIpOworCQlmbG9hdCByZXN1bHQgPSAoZmxvYXQpdmFsdWUgLyBmYWN0b3I7CisJCWlmIChyZXN1bHQgIT0gKGludClyZXN1bHQpIHsKKwkJICAgIGVycmxuKCJ0aGUgbnVtYmVyICciICsgZmFjdG9yICsgIicgaXMgbm90IGEgZmFjdG9yIG9mIHRoZSBudW1iZXIgJyIgKyB2YWx1ZSArICInIik7CisJCX0gZWxzZSB7CisJCSAgICBsb2dsbigiJyIgKyBmYWN0b3IgKyAiJyBpcyBhIGZhY3RvciBvZiAnIiArIHZhbHVlICsgIiciKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgZGF0YSBlbGVtZW50cyBpcyBpbmNvcnJlY3QKKyAgICBwdWJsaWMgdm9pZCBUZXN0MDgoKSB7CisJd2hpbGUgKG5leHRDYXNlKCkpIHsKKwkgICAgaW50IG9uZSA9IHRlc3RjYXNlLmdldEludCgiT25lIik7CisJICAgIGludCB0d28gPSB0ZXN0Y2FzZS5nZXRJbnQoIlR3byIpOworCSAgICBpbnQgdGhyZWUgPSB0ZXN0Y2FzZS5nZXRJbnQoIlRocmVlIik7CisJICAgIGxvZ2xuKCJnb3Q6ICIgKyBvbmUgKyAiLCAiICsgdHdvICsgIiwgIiArIHRocmVlKTsKKwl9CisgICAgfQorCisgICAgLy8gdXRpbGl0eSBwcmludCBmdW5jdGlvbnMgdG8gZGlzcGxheSB0aGUgZGF0YSBmcm9tIHRoZSByZXNvdXJjZQorICAgIFN0cmluZyBwcmludEFycmF5KFN0cmluZ1tdIGEpIHsKKwlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiU3RyaW5nW10geyIpOworCWZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgeworCSAgICBpZiAoaSAhPSAwKSB7CisJCWJ1Zi5hcHBlbmQoIiwiKTsKKwkgICAgfQorCSAgICBidWYuYXBwZW5kKCIgIiArIGFbaV0pOworCX0KKwlidWYuYXBwZW5kKCIgfSIpOworCXJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBTdHJpbmcgcHJpbnRBcnJheShpbnRbXSBhKSB7CisJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoImludFtdIHsiKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKwkgICAgaWYgKGkgIT0gMCkgeworCQlidWYuYXBwZW5kKCIsIik7CisJICAgIH0KKwkgICAgYnVmLmFwcGVuZCgiICIgKyBhW2ldKTsKKwl9CisJYnVmLmFwcGVuZCgiIH0iKTsKKwlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgU3RyaW5nIHByaW50QXJyYXkoYm9vbGVhbltdIGEpIHsKKwlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiYm9vbGVhbltdIHsiKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKwkgICAgaWYgKGkgIT0gMCkgeworCQlidWYuYXBwZW5kKCIsIik7CisJICAgIH0KKwkgICAgYnVmLmFwcGVuZCgiICIgKyBhW2ldKTsKKwl9CisJYnVmLmFwcGVuZCgiIH0iKTsKKwlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3NhbXBsZS9Nb2R1bGVUZXN0U2FtcGxlRGF0YS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3NhbXBsZS9Nb2R1bGVUZXN0U2FtcGxlRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMGI2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvc2FtcGxlL01vZHVsZVRlc3RTYW1wbGVEYXRhLmphdmEKQEAgLTAsMCArMSwxNjIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvc2FtcGxlL01vZHVsZVRlc3RTYW1wbGVEYXRhLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMjowMDo1OCAkCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5zYW1wbGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgaXMgc2FtcGxlIGRhdGEgZm9yIE1vZHVsZVRlc3RTYW1wbGUsIHdoaWNoIGlzIGFuIGlsbHVzdHJhdGlvbgorICogb2YgYSBzdWJjbGFzcyBvZiBNb2R1bGVUZXN0LiAgVGhpcyBkYXRhIGlzIGluIGEgZm9ybWF0IHdoaWNoCisgKiBpcyB1bmRlcnN0b29kIGJ5IFJlc291cmNlTW9kdWxlLCB3aGljaCBmb3Igc2ltcGxpY2l0eSBleHBlY3RzCisgKiBhbGwgZGF0YSwgaW5jbHVkaW5nIG51bWVyaWMgYW5kIGJvb2xlYW4gZGF0YSwgdG8gYmUgcmVwcmVzZW50ZWQKKyAqIGJ5IFN0cmluZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBNb2R1bGVUZXN0U2FtcGxlRGF0YSBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgcHVibGljIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisJcmV0dXJuIGNvbnRlbnRzOworICAgIH0KKworICAgIE9iamVjdFtdW10gY29udGVudHMgPSB7CisJeyAiSW5mbyIsIG5ldyBPYmplY3RbXVtdIHsKKwkgICAgeyAiRGVzY3JpcHRpb24iLCAiVGhpcyBpcyBhIHNhbXBsZSB0ZXN0IG1vZHVsZSB0aGF0IGlsbHVzdHJhdGVzIE1vZHVsZVRlc3QgIiArCisJICAgICAgImFuZCB1c2VzIGRhdGEgZm9ybWF0dGVkIGZvciBSZXNvdXJjZU1vZHVsZS4iIH0sCisJICAgIHsgIkhlYWRlcnMiLCBuZXcgU3RyaW5nW10geworCQkiYVN0cmluZ0FycmF5IiwgImFuSW50QXJyYXkiLCAiYUJvb2xlYW5BcnJheSIKKwkgICAgfX0sCisJfX0sCisJCisKKwl7ICJUZXN0RGF0YSIsIG5ldyBPYmplY3RbXVtdIHsKKwkgICAgeyAiVGVzdDAxIiwgbmV3IE9iamVjdFtdW10geworCQl7ICJJbmZvIiwgbmV3IE9iamVjdFtdW10geworCQkgICAgeyAiRGVzY3JpcHRpb24iLCAiQSB0eXBpY2FsIHRlc3QgdXNpbmcgYm90aCBzZXR0aW5ncyBhbmQgY2FzZXMuIiB9LAorCQkgICAgeyAiTG9uZ19EZXNjcmlwdGlvbiIsICJJdCBkb2VzIG5vdCBkZWZpbmVkIGl0cyBvd24gaGVhZGVycywgYnV0IGluc3RlYWQgIiArCisJCSAgICAgICJ1c2VzIHRoZSBkZWZhdWx0IGhlYWRlcnMgZGVmaW5lZCBmb3IgdGhlIG1vZHVsZS4gICIgKworCQkgICAgICAiVGhlcmUgYXJlIHR3byBzZXRzIG9mIHNldHRpbmdzIGFuZCB0aHJlZSBjYXNlcy4iIH0sCisJCX19LAorCQl7ICJTZXR0aW5ncyIsIG5ldyBPYmplY3RbXSB7CisgICAgICAgICAgICBuZXcgT2JqZWN0W11bXQorCQkgICAge3sgImFTdHJpbmciLCAidGhpcyBpcyBhIHN0cmluZyIgfSwKKwkJICAgICB7ICJhbkludCIsICI0MyIgfSwKKwkJICAgICB7ICJhQm9vbGVhbiIsICJmYWxzZSIgfX0sCisJCSAgICBuZXcgT2JqZWN0W11bXSAKKyAgICAgICAgICAgIHt7ICJhU3RyaW5nIiwgInRoaXMgaXMgYW5vdGhlciBzdHJpbmciIH0sCisJCSAgICAgeyAiYUJvb2xlYW4iLCAidHJ1ZSIgfX0KKwkJfX0sCisJCXsgIkNhc2VzIiwgbmV3IE9iamVjdFtdIHsKKyAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7CisgICAgCQkgICAgbmV3IFN0cmluZ1tdIHsgIm9uZSIsICJ0d28iLCAidGhyZWUiIH0sCisgICAgCQkgICAgbmV3IFN0cmluZ1tdIHsgIjI0IiwgIjQ4IiwgIjcyIiB9LAorICAgIAkJICAgIG5ldyBTdHJpbmdbXSB7ICJ0cnVlIiwgImZhbHNlIiwgInRydWUiIH0KKyAgICAJCX0sCisgICAgCQluZXcgT2JqZWN0W10geyAKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAiZm91ciIsICJmaXZlIiwgInNpeCIgfSwKKyAgICAJCSAgICBuZXcgU3RyaW5nW10geyAiLTEiLCAiLTUiLCAiLTEwIiB9LAorICAgIAkJICAgIG5ldyBTdHJpbmdbXSB7ICJ0cnVlIiwgImZhbHNlIiwgImZhbHNlIiB9CisgICAgCQl9LAorICAgIAkJbmV3IE9iamVjdFtdIHsgCisgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgImJhZ2VsIiwgInBlYW51dHMiLCAiY2Fycm90IiB9LAorICAgIAkJICAgIG5ldyBTdHJpbmdbXSB7ICIwIiwgIjAwMDAxIiwgIjEwMTAxIiB9LAorICAgIAkJICAgIG5ldyBTdHJpbmdbXSB7ICJmYWxzZSIsICJmYWxzZSIsICJGYWxzZSIgfQorICAgICAgICAgICAgfSwKKwkJfX0KKwkgICAgfX0sCisKKwkgICAgeyAiVGVzdDAyIiwgbmV3IE9iamVjdFtdW10geworCQl7ICJJbmZvIiwgbmV3IE9iamVjdFtdW10geworCQkgICAgeyAiRGVzY3JpcHRpb24iLCAiQSB0eXBpY2FsIHRlc3QgdGhhdCB1c2VzIGNhc2VzIGJ1dCBub3Qgc2V0dGluZ3MuIiB9LAorCQkgICAgeyAiTG9uZ19EZXNjcmlwdGlvbiIsICJJdCBkZWZpbmVzIGl0cyBvd24gaGVhZGVycy4iIH0sCisJCSAgICB7ICJIZWFkZXJzIiwgbmV3IFN0cmluZ1tdIHsKKwkJCSJhU3RyaW5nIiwgImFuSW50IiwgImFCb29sZWFuIgorCQkgICAgfX0sCisJCX19LAorCQl7ICJDYXNlcyIsIG5ldyBPYmplY3RbXSB7CisJCSAgICBuZXcgT2JqZWN0W10geyAiU3VwZXJzdHJpbmciLCAiNDIiLCAidHJ1ZSIgfSwKKwkJICAgIG5ldyBPYmplY3RbXSB7ICJVbmRlcmRvZyIsICIxMiIsICJmYWxzZSIgfSwKKwkJICAgIG5ldyBPYmplY3RbXSB7ICJTY29vYnlEb28iLCAiNyIsICJUclVlIiB9CisJCX19CisJICAgIH19LAorCisJICAgIHsgIlRlc3QwMyIsIG5ldyBPYmplY3RbXVtdIHsKKwkJeyAiSW5mbyIsIG5ldyBPYmplY3RbXVtdIHsKKwkJICAgIHsgIkRlc2NyaXB0aW9uIiwgIkEgdHlwaWNhbCB0ZXN0IHRoYXQgdXNlcyBqdXN0IHRoZSBpbmZvLCBubyBjYXNlcyBvciBzZXR0aW5ncy4iIH0sCisJCSAgICB7ICJFeHRyYSIsICJUaGlzIGlzIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24uIiB9CisJCX19LAorCSAgICB9fSwKKworCSAgICAvLyBubyBUZXN0MDQgZGF0YQorCSAgICAvLyBUZXN0MDQgc2hvdWxkIGNhdXNlIGFuIGV4Y2VwdGlvbiB0byBiZSB0aHJvd24gc2luY2UgTW9kdWxlVGVzdFNhbXBsZSBkb2VzIG5vdAorCSAgICAvLyBzcGVjaWZ5IHRoYXQgaXQgaXMgb2sgZm9yIGl0IHRvIGhhdmUgbm8gZGF0YS4KKworCSAgICAvLyBubyBUZXN0MDUgZGF0YQorCSAgICAvLyBUZXN0MDUgc2hvdWxkIGp1c3QgbG9nIHRoaXMgZmFjdCwgc2luY2UgTW9kdWxlVGVzdFNhbXBsZSBpbmRpY2F0ZXMgdGhhdCBpdCBpcworCSAgICAvLyBvayBmb3IgVGVzdDA1IHRvIGhhdmUgbm8gZGF0YSBpbiBpdHMgb3ZlcnJpZGUgb2YgdmFsaWRhdGVNZXRob2QuCisKKwkgICAgeyAiVGVzdDA2IiwgbmV3IE9iamVjdFtdW10geworCQl7ICJJbmZvIiwgbmV3IE9iamVjdFtdW10geworCQkgICAgeyAiRGVzY3JpcHRpb24iLCAiQSB0ZXN0IHRoYXQgaGFzIGJhZCBkYXRhLiIgfSwKKwkJICAgIHsgIkxvbmdfRGVzY3JpcHRpb24iLCAiVGhpcyBpbGx1c3RyYXRlcyBob3cgYSBkYXRhIGVycm9yIHdpbGwgYXV0b21hdGljYWxseSAiICsKKwkJICAgICAgInRlcm1pbmF0ZSB0aGUgc2V0dGluZ3MgYW5kIGNhc2VzIGxvb3AuIiB9LAorCQkgICAgeyAiSGVhZGVycyIsIG5ldyBTdHJpbmdbXSB7CisJCQkiSXNHb29kIiwgIkRhdGEiLAorCQkgICAgfX0sCisJCX19LAorCQl7ICJDYXNlcyIsIG5ldyBPYmplY3RbXSB7CisJCSAgICBuZXcgT2JqZWN0W10geyAiR29vZCIsICIyMyIgfSwKKwkJICAgIG5ldyBPYmplY3RbXSB7ICJHb29kIiwgIi0xMjMiIH0sCisJCSAgICBuZXcgT2JqZWN0W10geyAiQmFkIiwgIldob29wcyIgfSwKKwkJICAgIG5ldyBPYmplY3RbXSB7ICJOb3QgRXhlY3V0ZWQiLCAiMzUiIH0sCisJCX19LAorCSAgICB9fSwKKworCSAgICB7ICJUZXN0MDciLCBuZXcgT2JqZWN0W11bXSB7CisJCXsgIkluZm8iLCBuZXcgT2JqZWN0W11bXSB7CisJCSAgICB7ICJEZXNjcmlwdGlvbiIsICJBIHRlc3QgdGhhdCBmYWlscyB3aXRoIGEgY2VydGFpbiBjb21iaW5hdGlvbiBvZiBzZXR0aW5ncyBhbmQgY2FzZS4iIH0sCisJCSAgICB7ICJMb25nX0Rlc2NyaXB0aW9uIiwgIlRoaXMgaWxsdXN0cmF0ZXMgaG93IGEgdGVzdCBlcnJvciB3aWxsIGF1dG9tYXRpY2FsbHkgIiArCisJCSAgICAgICJ0ZXJtaW5hdGUgdGhlIHNldHRpbmdzIGFuZCBjYXNlcyBsb29wLiAgU2V0dGluZ3MgZGF0YSBpcyB2YWx1ZXMsIHRoZSBjYXNlICIgKworCQkgICAgICAiZGF0YSBpcyBmYWN0b3JzLiAgVGhlIHRoaXJkIGZhY3RvciBpcyBub3QgYSBmYWN0b3Igb2YgdGhlIHNlY29uZCB2YWx1ZS4gICIgKworCQkgICAgICAiVGhlIHRlc3Qgd2lsbCBsb2cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBzdG9wIHRoZSBsb29wLiIgfSwKKwkJICAgIHsgIkhlYWRlcnMiLCBuZXcgU3RyaW5nW10geworCQkJIkZhY3RvciIsCisJCSAgICB9fSwKKwkJfX0sCisJCXsgIlNldHRpbmdzIiAsIG5ldyBPYmplY3RbXSB7CisJCSAgICBuZXcgT2JqZWN0W11bXSB7eyAiVmFsdWUiLCAiMjEwIiB9fSwKKwkJICAgIG5ldyBPYmplY3RbXVtdIHt7ICJWYWx1ZSIsICI0MjAiIH19LAorCQkgICAgbmV3IE9iamVjdFtdW10ge3sgIlZhbHVlIiwgIjQyIiB9fSwKKwkJICAgIG5ldyBPYmplY3RbXVtdIHt7ICJWYWx1ZSIsICJOb3QgcmVhY2hlZC4iIH19CisJCX19LAorCQl7ICJDYXNlcyIsIG5ldyBPYmplY3RbXSB7CisJCSAgICBuZXcgT2JqZWN0W10geyAiMiIgfSwKKwkJICAgIG5ldyBPYmplY3RbXSB7ICIzIiB9LAorCQkgICAgbmV3IE9iamVjdFtdIHsgIjUiIH0sCisJCSAgICBuZXcgT2JqZWN0W10geyAiNyIgfSwKKwkJfX0sCisJICAgIH19LAorCisJICAgIHsgIlRlc3QwOCIsIG5ldyBPYmplY3RbXVtdIHsKKwkJeyAiSW5mbyIsIG5ldyBPYmplY3RbXVtdIHsKKwkJICAgIHsgIkRlc2NyaXB0aW9uIiwgIkEgdGVzdCB3aXRoIGRhdGEgbWlzc2luZyBmcm9tIGEgdGVzdCBjYXNlLiIgfSwKKwkJICAgIHsgIkhlYWRlcnMiLCBuZXcgU3RyaW5nW10geworCQkJIk9uZSIsICJUd28iLCAiVGhyZWUiCisJCSAgICB9fSwKKwkJfX0sCisJCXsgIkNhc2VzIiwgbmV3IE9iamVjdFtdIHsKKwkJICAgIG5ldyBPYmplY3RbXSB7ICIxIiwgIjIiLCAiMyIgfSwKKwkJICAgIG5ldyBPYmplY3RbXSB7ICI0IiwgIjUiIH0sIC8vIHRvbyBzaG9ydAorCQkgICAgbmV3IE9iamVjdFtdIHsgIjYiLCAiNyIsICI4IiB9LAorCQl9fSwKKwkgICAgfX0sCisJfX0sCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9zZWFyY2gvU2VhcmNoVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3NlYXJjaC9TZWFyY2hUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTYzNjEyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9zZWFyY2gvU2VhcmNoVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTc5OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAKKyAqICREYXRlOiAKKyAqICRSZXZpc2lvbjogCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqIAorICogUG9ydCBGcm9tOiAgIElDVTRDIHYyLjEgOiBjb2xsYXRlL1N0cmluZ1NlYXJjaFRlc3QKKyAqIFNvdXJjZSBGaWxlOiAkSUNVNENSb290L3NvdXJjZS90ZXN0L2ludGx0ZXN0L3NyY2h0ZXN0LmNwcAorICoqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnNlYXJjaDsKKworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworCitwdWJsaWMgY2xhc3MgU2VhcmNoVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKyAgICAKKyAgICAvL2lubmVyIGNsYXNzCisgICAgc3RhdGljIGNsYXNzIFNlYXJjaERhdGEgeworICAgICAgICBTZWFyY2hEYXRhKFN0cmluZyB0ZXh0LCBTdHJpbmcgcGF0dGVybiwgU3RyaW5nIGNvbGwsIGludCBzdHJlbmd0aCwgU3RyaW5nIGJyZWFrZXIsCisgICAgICAgICAgICAgICAgICAgaW50W10gb2Zmc2V0LCBpbnRbXSBzaXplKSB7CisgICAgICAgICAgICB0aGlzLnRleHQgPSB0ZXh0OworICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjsKKyAgICAgICAgICAgIHRoaXMuY29sbGF0b3IgPSBjb2xsOworICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHN0cmVuZ3RoOworICAgICAgICAgICAgdGhpcy5icmVha2VyID0gYnJlYWtlcjsKKyAgICAgICAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIHRleHQ7CisgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgcGF0dGVybjsKKyAgICAgICAgU3RyaW5nICAgICAgICAgICAgICBjb2xsYXRvcjsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICBzdHJlbmd0aDsKKyAgICAgICAgU3RyaW5nICAgICAgICAgICAgICBicmVha2VyOworICAgICAgICBpbnRbXSAgICAgICAgICAgICAgIG9mZnNldDsKKyAgICAgICAgaW50W10gICAgICAgICAgICAgICBzaXplOworICAgIH07CisgICAgCisgICAgUnVsZUJhc2VkQ29sbGF0b3IgbV9lbl91c187IAorICAgIFJ1bGVCYXNlZENvbGxhdG9yIG1fZnJfZnJfOworICAgIFJ1bGVCYXNlZENvbGxhdG9yIG1fZGVfOworICAgIFJ1bGVCYXNlZENvbGxhdG9yIG1fZXNfOyAKKyAgICBCcmVha0l0ZXJhdG9yICAgICBtX2VuX3dvcmRicmVha2VyXyA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKCk7CisgICAgQnJlYWtJdGVyYXRvciAgICAgbV9lbl9jaGFyYWN0ZXJicmVha2VyXyA9IEJyZWFrSXRlcmF0b3IuZ2V0Q2hhcmFjdGVySW5zdGFuY2UoKTsKKyAgICAKKyAgICBzdGF0aWMgU2VhcmNoRGF0YVtdIEJBU0lDID0geworICAgICAgICBuZXcgU2VhcmNoRGF0YSgieHh4eHh4eHh4eHh4eHh4eHh4eHgiLCAgICAgICAgICAiZmlzaGVyIiwgICAgICAgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCAgICAgICAgICAgIG5ldyBpbnRbXXswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJzaWxseSBzcHJpbmcgc3RyaW5nIiwgICAgICAgICAgICJzdHJpbmciLCAgICAgICBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdezEzLCAtMX0sICAgICAgICAgbmV3IGludFtdezZ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoInNpbGx5IHNwcmluZyBzdHJpbmcgc3RyaW5nIiwgICAgInN0cmluZyIsICAgICAgIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W117MTMsIDIwLCAtMX0sICAgICBuZXcgaW50W117NiwgNn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgic2lsbHkgc3RyaW5nIHNwcmluZyBzdHJpbmciLCAgICAic3RyaW5nIiwgICAgICAgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXXs2LCAyMCwgLTF9LCAgICAgIG5ldyBpbnRbXXs2LCA2fSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJzdHJpbmcgc3ByaW5nIHN0cmluZyIsICAgICAgICAgICJzdHJpbmciLCAgICAgICBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdezAsIDE0LCAtMX0sICAgICAgbmV3IGludFtdezYsIDZ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlNjb3R0IEdhbnlvIiwgICAgICAgICAgICAgICAgICAgImMiLCAgICAgICAgICAgIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W117MSwgLTF9LCAgICAgICAgICBuZXcgaW50W117MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiU2NvdHQgR2FueW8iLCAgICAgICAgICAgICAgICAgICAiICIsICAgICAgICAgICAgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXXs1LCAtMX0sICAgICAgICAgIG5ldyBpbnRbXXsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAzMDBcdTAzMjUiLCAgICAgICAgICAgICAgICAgICJcdTAzMDAiLCAgICAgICBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdey0xfSwgICAgICAgICAgICAgbmV3IGludFtdezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImFcdTAzMDBcdTAzMjUiLCAgICAgICAgICAgICAgICAgIlx1MDMwMCIsICAgICAgIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W117LTF9LCAgICAgICAgICAgICBuZXcgaW50W117MH0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYVx1MDMwMFx1MDMyNSIsICAgICAgICAgICAgICAgICAiXHUwMzAwXHUwMzI1IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXXsxLCAtMX0sICAgICAgICAgIG5ldyBpbnRbXXsyfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJhXHUwMzAwYiIsICAgICAgICAgICAgICAgICAgICAgICJcdTAzMDAiLCAgICAgICBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdezEsIC0xfSwgICAgICAgICAgbmV3IGludFtdezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDBjOSIsICAgICAgICAgICAgICAgICAgICAgICAgImUiLCAgICAgICAgICAgIG51bGwsIENvbGxhdG9yLlBSSU1BUlksICBudWxsLCBuZXcgaW50W117MCwgLTF9LCAgICAgICAgICBuZXcgaW50W117MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCAgICAgICAgICAgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXXstMX0sICAgICAgICAgICAgIG5ldyBpbnRbXXswfSkKKyAgICB9OworICAgIAorICAgIFNlYXJjaERhdGEgQlJFQUtJVEVSQVRPUkVYQUNUW10gPSB7CisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJmb3h5IGZveCIsICJmb3giLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgImNoYXJhY3RlcmJyZWFrZXIiLCBuZXcgaW50W10gezAsIDUsIC0xfSwgbmV3IGludFtdIHszLCAzfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJmb3h5IGZveCIsICJmb3giLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgIndvcmRicmVha2VyIiwgbmV3IGludFtdIHs1LCAtMX0sIG5ldyBpbnRbXSB7M30pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiVGhpcyBpcyBhIHRvZSBUXHUwMEY2bmUiLCAidG9lIiwgImRlIiwgQ29sbGF0b3IuUFJJTUFSWSwgImNoYXJhY3RlcmJyZWFrZXIiLCBuZXcgaW50W10gezEwLCAxNCwgLTF9LCBuZXcgaW50W10gezMsIDJ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlRoaXMgaXMgYSB0b2UgVFx1MDBGNm5lIiwgInRvZSIsICJkZSIsIENvbGxhdG9yLlBSSU1BUlksICJ3b3JkYnJlYWtlciIsIG5ldyBpbnRbXSB7MTAsIC0xfSwgbmV3IGludFtdIHszfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJDaGFubmVsLCBhbm90aGVyIGNoYW5uZWwsIG1vcmUgY2hhbm5lbHMsIGFuZCBvbmUgbGFzdCBDaGFubmVsIiwgIkNoYW5uZWwiLCAiZXMiLCBDb2xsYXRvci5URVJUSUFSWSwgCisgICAgICAgICAgICAgIndvcmRicmVha2VyIiwgbmV3IGludFtdIHswLCA1NCwgLTF9LCBuZXcgaW50W10gezcsIDd9KSwKKyAgICAgICAgLyogaml0dGVyYnVnIDE3NDUgKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoInRlc3RpbmcgdGhhdCBcdTAwZTkgZG9lcyBub3QgbWF0Y2ggZSIsICJlIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIAorICAgICAgICAgICAgImNoYXJhY3RlcmJyZWFrZXIiLCBuZXcgaW50W10gezEsIDE3LCAzMCwgLTF9LCBuZXcgaW50W10gezEsIDEsIDF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoInRlc3RpbmcgdGhhdCBzdHJpbmcgYWJcdTAwZTljZCBkb2VzIG5vdCBtYXRjaCBlIiwgImUiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgCisgICAgICAgICAgICAiY2hhcmFjdGVyYnJlYWtlciIsIG5ldyBpbnRbXSB7MSwgMjgsIDQxLCAtMX0sIG5ldyBpbnRbXSB7MSwgMSwgMX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMGM5IiwgImUiLCAiZnIiLCBDb2xsYXRvci5QUklNQVJZLCAgImNoYXJhY3RlcmJyZWFrZXIiLCBuZXcgaW50W117MCwgLTF9LCBuZXcgaW50W117MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKyAgICAKKyAgICBTZWFyY2hEYXRhIEJSRUFLSVRFUkFUT1JDQU5PTklDQUxbXSA9IHsKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImZveHkgZm94IiwgImZveCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCAiY2hhcmFjdGVyYnJlYWtlciIsIG5ldyBpbnRbXSB7MCwgNSwgLTF9LCBuZXcgaW50W10gezMsIDN9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImZveHkgZm94IiwgImZveCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCAid29yZGJyZWFrZXIiLCBuZXcgaW50W10gezUsIC0xfSwgbmV3IGludFtdIHszfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJUaGlzIGlzIGEgdG9lIFRcdTAwRjZuZSIsICJ0b2UiLCAiZGUiLCBDb2xsYXRvci5QUklNQVJZLCAiY2hhcmFjdGVyYnJlYWtlciIsIG5ldyBpbnRbXSB7MTAsIDE0LCAtMX0sIG5ldyBpbnRbXSB7MywgMn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiVGhpcyBpcyBhIHRvZSBUXHUwMEY2bmUiLCAidG9lIiwgImRlIiwgQ29sbGF0b3IuUFJJTUFSWSwgIndvcmRicmVha2VyIiwgbmV3IGludFtdIHsxMCwgLTF9LCBuZXcgaW50W10gezN9KSwgCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJDaGFubmVsLCBhbm90aGVyIGNoYW5uZWwsIG1vcmUgY2hhbm5lbHMsIGFuZCBvbmUgbGFzdCBDaGFubmVsIiwgIkNoYW5uZWwiLCAiZXMiLCBDb2xsYXRvci5URVJUSUFSWSwgIndvcmRicmVha2VyIiwgCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBpbnRbXSB7MCwgNTQsIC0xfSwgbmV3IGludFtdIHs3LCA3fSksCisgICAgICAgIC8qIGppdHRlcmJ1ZyAxNzQ1ICovCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJ0ZXN0aW5nIHRoYXQgXHUwMGU5IGRvZXMgbm90IG1hdGNoIGUiLCAiZSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCAKKyAgICAgICAgICAgICJjaGFyYWN0ZXJicmVha2VyIiwgbmV3IGludFtdIHsxLCAxNywgMzAsIC0xfSwgbmV3IGludFtdIHsxLCAxLCAxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJ0ZXN0aW5nIHRoYXQgc3RyaW5nIGFiXHUwMGU5Y2QgZG9lcyBub3QgbWF0Y2ggZSIsICJlIiwgbnVsbCwgCisgICAgICAgICAgICAgQ29sbGF0b3IuVEVSVElBUlksICJjaGFyYWN0ZXJicmVha2VyIiwgbmV3IGludFtdIHsxLCAyOCwgNDEsIC0xfSwgbmV3IGludFtdIHsxLCAxLCAxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAwYzkiLCAiZSIsICJmciIsIENvbGxhdG9yLlBSSU1BUlksICAiY2hhcmFjdGVyYnJlYWtlciIsIG5ldyBpbnRbXXswLCAtMX0sIG5ldyBpbnRbXXsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworICAgIAorICAgIFNlYXJjaERhdGEgQkFTSUNDQU5PTklDQUxbXSA9IHsKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoInh4eHh4eHh4eHh4eHh4eHh4eHh4IiwgImZpc2hlciIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludCBbXSB7MH0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgic2lsbHkgc3ByaW5nIHN0cmluZyIsICJzdHJpbmciLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHsxMywgLTF9LCBuZXcgaW50W10gezZ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoInNpbGx5IHNwcmluZyBzdHJpbmcgc3RyaW5nIiwgInN0cmluZyIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezEzLCAyMCwgLTF9LCBuZXcgaW50W10gezYsIDZ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoInNpbGx5IHN0cmluZyBzcHJpbmcgc3RyaW5nIiwgInN0cmluZyIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezYsIDIwLCAtMX0sIG5ldyBpbnRbXSB7NiwgNn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgic3RyaW5nIHNwcmluZyBzdHJpbmciLCAic3RyaW5nIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgMTQsIC0xfSwgbmV3IGludFtdIHs2LCA2fSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJTY290dCBHYW55byIsICJjIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MSwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlNjb3R0IEdhbnlvIiwgIiAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHs1LCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMzAwXHUwMzI1IiwgIlx1MDMwMCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50IFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYVx1MDMwMFx1MDMyNSIsICJcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludCBbXSB7MSwgLTF9LCBuZXcgaW50W10gezJ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImFcdTAzMDBcdTAzMjUiLCAiXHUwMzAwXHUwMzI1IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MSwgLTF9LCBuZXcgaW50W117Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYVx1MDMwMGIiLCAiXHUwMzAwIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXXsxLCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYVx1MDMwMFx1MDMyNWIiLCAiXHUwMzAwYiIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezEsIC0xfSwgbmV3IGludFtdIHszfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAzMjVcdTAzMDBBXHUwMzI1XHUwMzAwIiwgIlx1MDMwMEFcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7NX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMzI1XHUwMzAwQVx1MDMyNVx1MDMwMCIsICJcdTAzMjVBXHUwMzI1IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezV9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImFcdTAzMDBcdTAzMjViXHUwMzAwXHUwMzI1YyBcdTAzMjViXHUwMzAwIFx1MDMwMGJcdTAzMjUiLCAiXHUwMzAwYlx1MDMyNSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCAKKyAgICAgICAgICAgIG5ldyBpbnRbXSB7MSwgMTIsIC0xfSwgbmV3IGludFtdIHs1LCAzfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdezB9KQorICAgIH07CisKKyAgICBTZWFyY2hEYXRhIENPTExBVE9SW10gPSB7CisgICAgICAgIC8qIGVuZ2xpc2ggKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImZveCBmcHgiLCAiZm94IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezN9KSwgCisgICAgICAgIC8qIHRhaWxvcmVkICovCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJmb3ggZnB4IiwgImZveCIsIG51bGwsIENvbGxhdG9yLlBSSU1BUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgNCwgLTF9LCBuZXcgaW50W10gezMsIDN9KSwgCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworICAgIAorICAgIFN0cmluZyBURVNUQ09MTEFUT1JSVUxFID0gIiYgbyxPIDsgcCxQIjsKKyAgICBTdHJpbmcgRVhUUkFDT0xMQVRJT05SVUxFID0gIiAmIGFlIDsgXHUwMGU0ICYgQUUgOyBcdTAwYzQgJiBvZSA7IFx1MDBmNiAmIE9FIDsgXHUwMGQ2ICYgdWUgOyBcdTAwZmMgJiBVRSA7IFx1MDBkYyI7CisKKyAgICAKKyAgICBTZWFyY2hEYXRhIENPTExBVE9SQ0FOT05JQ0FMW10gPSB7CisgICAgICAgIC8qIGVuZ2xpc2ggKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImZveCBmcHgiLCAiZm94IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezN9KSwgCisgICAgICAgIC8qIHRhaWxvcmVkICovCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJmb3ggZnB4IiwgImZveCIsIG51bGwsIENvbGxhdG9yLlBSSU1BUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgNCwgLTF9LCBuZXcgaW50W10gezMsIDN9KSwgCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworCisgICAgU2VhcmNoRGF0YSBDT01QT1NJVEVCT1VOREFSSUVTW10gPSB7CisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAwQzAiLCAiQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJBXHUwMEMwQyIsICJBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSAgezAsIDEsIC0xfSwgbmV3IGludFtdICB7MSwgMX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMEMwQSIsICJBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgMSwgLTF9LCBuZXcgaW50W10gezEsIDF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkJcdTAwQzAiLCAiQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezEsIC0xfSwgbmV3IGludFtdIHsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAwQzBCIiwgIkEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMEMwIiwgIlx1MDMwMCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAzMDBcdTAwQzAiLCAiXHUwMzAwIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgMSwgLTF9LCBuZXcgaW50W10gezEsIDF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDBDMFx1MDMwMCIsICJcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pLAorICAgICAgICAvKiBBICsgMDMwQSArIDAzMDEgKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQSIsICJcdTAxRkEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMUZBIiwgIlx1MDMwQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAxRkEiLCAiQVx1MDMwQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAxRkEiLCAiXHUwMzBBQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAxRkEiLCAiXHUwMzAxIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQSIsICJBXHUwMzAxIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQSIsICJcdTAzMDFBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQSIsICJcdTAzMEFcdTAzMDEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiQVx1MDFGQSIsICJBXHUwMzBBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQUEiLCAiXHUwMzAxQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTBGNzMiLCAiXHUwRjczIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MEY3MyIsICJcdTBGNzEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwRjczIiwgIlx1MEY3MiIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTBGNzMiLCAiXHUwRjcxXHUwRjcyIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkFcdTBGNzMiLCAiQVx1MEY3MSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTBGNzNBIiwgIlx1MEY3MkEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKworICAgIFNlYXJjaERhdGEgQ09NUE9TSVRFQk9VTkRBUklFU0NBTk9OSUNBTFtdID0geworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMEMwIiwgIkEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiQVx1MDBDMEMiLCAiQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIDEsIC0xfSwgbmV3IGludFtdIHsxLCAxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAwQzBBIiwgIkEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAxLCAtMX0sIG5ldyBpbnRbXSB7MSwgMX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiQlx1MDBDMCIsICJBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MSwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDBDMEIiLCAiQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAwQzAiLCAiXHUwMzAwIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDMwMFx1MDBDMCIsICJcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAxLCAtMX0sIG5ldyBpbnRbXSB7MSwgMX0pLAorICAgICAgICAvKiBcdTAzMDAgYmxvY2tlZCBieSBcdTAzMDAgKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDBDMFx1MDMwMCIsICJcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICAvKiBBICsgMDMwQSArIDAzMDEgKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQSIsICJcdTAxRkEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMUZBIiwgIlx1MDMwQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAxRkEiLCAiQVx1MDMwQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAxRkEiLCAiXHUwMzBBQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTAxRkEiLCAiXHUwMzAxIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgLyogYmxvY2tlZCBhY2NlbnQgKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQSIsICJBXHUwMzAxIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQSIsICJcdTAzMDFBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQSIsICJcdTAzMEFcdTAzMDEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiQVx1MDFGQSIsICJBXHUwMzBBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MSwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDFGQUEiLCAiXHUwMzAxQSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsyfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTBGNzMiLCAiXHUwRjczIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MEY3MyIsICJcdTBGNzEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7MX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwRjczIiwgIlx1MEY3MiIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTBGNzMiLCAiXHUwRjcxXHUwRjcyIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkFcdTBGNzMiLCAiQVx1MEY3MSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsyfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJcdTBGNzNBIiwgIlx1MEY3MkEiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMUZBIEFcdTAzMDFcdTAzMEEgQVx1MDMwQVx1MDMwMSBBXHUwMzBBIFx1MDFGQSIsICJBXHUwMzBBIiwgCisgICAgICAgICAgICBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCA2LCAxMCwgMTMsIC0xfSwgbmV3IGludFtdIHsxLCAzLCAyLCAxfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworCisgICAgU2VhcmNoRGF0YSBTVVBQTEVNRU5UQVJZW10gPSB7CisgICAgICAgIC8qIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYWJjIFx1RDgwMFx1REMwMCBcdUQ4MDBcdURDMDEgXHVEODAxXHVEQzAwIFx1RDgwMFx1REMwMGFiYyBhYmNcdUQ4MDBcdURDMDAgXHVEODAwXHVEODAwXHVEQzAwIFx1RDgwMFx1REMwMFx1REMwMCIsIAorICAgICAgICAgICAgIlx1RDgwMFx1REMwMCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezQsIDEzLCAyMiwgMjYsIDI5LCAtMX0sIG5ldyBpbnRbXSB7MiwgMiwgMiwgMiwgMn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKworICAgIFN0cmluZyBDT05UUkFDVElPTlJVTEUgPSAiJnogPSBhYi9jIDwgQUIgPCBYXHUwMzAwIDwgQUJDIDwgWFx1MDMwMFx1MDMxNSI7CisgICAgCisgICAgU2VhcmNoRGF0YSBDT05UUkFDVElPTltdID0geworICAgICAgICAvKiBjb21tb24gZGlzY29udGlndW91cyAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiQVx1MDMwMFx1MDMxNSIsICJcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiQVx1MDMwMFx1MDMxNSIsICJcdTAzMDBcdTAzMTUiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHsxLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICAvKiBjb250cmFjdGlvbiBwcmVmaXggKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkFCXHUwMzE1QyIsICJBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkFCXHUwMzE1QyIsICJBQiIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsyfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJBQlx1MDMxNUMiLCAiXHUwMzE1IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MiwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgLyogZGlzY29udGlndW91cyBwcm9ibGVtIGhlcmUgZm9yIGJhY2t3YXJkcyBpdGVyYXRpb24uIAorICAgICAgICBhY2NlbnRzIG5vdCBmb3VuZCBiZWNhdXNlIGRpc2NvbnRpZ3VvdXMgc3RvcmVzIGFsbCBpbmZvcm1hdGlvbiAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiWFx1MDMwMFx1MDMxOVx1MDMxNSIsICJcdTAzMTkiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pLAorICAgICAgICAgLyogZW5kcyBub3Qgd2l0aCBhIGNvbnRyYWN0aW9uIGNoYXJhY3RlciAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiWFx1MDMxNVx1MDMwMEQiLCAiXHUwMzAwXHUwMzE1IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlhcdTAzMTVcdTAzMDBEIiwgIlhcdTAzMDBcdTAzMTUiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7M30pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiWFx1MDMwMFx1MDMxQVx1MDMxNUQiLCAiWFx1MDMwMCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIC8qIGJsb2NrZWQgZGlzY29udGlndW91cyAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiWFx1MDMwMFx1MDMxQVx1MDMxNUQiLCAiXHUwMzFBXHUwMzE1RCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJhYiIsICJ6IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezJ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEobnVsbCwgbnVsbCwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KQorICAgIH07CisgICAgCisgICAgU2VhcmNoRGF0YSBDT05UUkFDVElPTkNBTk9OSUNBTFtdID0geworICAgICAgICAvKiBjb21tb24gZGlzY29udGlndW91cyAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiQVx1MDMwMFx1MDMxNSIsICJcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHsxLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiQVx1MDMwMFx1MDMxNSIsICJcdTAzMDBcdTAzMTUiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHsxLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICAvKiBjb250cmFjdGlvbiBwcmVmaXggKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkFCXHUwMzE1QyIsICJBIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkFCXHUwMzE1QyIsICJBQiIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsyfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJBQlx1MDMxNUMiLCAiXHUwMzE1IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MiwgLTF9LCBuZXcgaW50W10gezF9KSwKKyAgICAgICAgLyogZGlzY29udGlndW91cyBwcm9ibGVtIGhlcmUgZm9yIGJhY2t3YXJkcyBpdGVyYXRpb24uIAorICAgICAgICBmb3J3YXJkcyBnaXZlcyAwLCA0IGJ1dCBiYWNrd2FyZHMgZ2l2ZSAxLCAzICovCisgICAgICAgIC8qIHsiWFx1MDMwMFx1MDMxOVx1MDMxNSIsICJcdTAzMTkiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgezAsIC0xfSwgCisgICAgICAgIHs0fX0sICovCisgICAgICAgIAorICAgICAgICAgLyogZW5kcyBub3Qgd2l0aCBhIGNvbnRyYWN0aW9uIGNoYXJhY3RlciAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiWFx1MDMxNVx1MDMwMEQiLCAiXHUwMzAwXHUwMzE1IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlhcdTAzMTVcdTAzMDBEIiwgIlhcdTAzMDBcdTAzMTUiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgCisgICAgICAgICAgICBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHszfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJYXHUwMzAwXHUwMzFBXHUwMzE1RCIsICJYXHUwMzAwIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIAorICAgICAgICAgICAgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7NH0pLAorICAgICAgICAvKiBibG9ja2VkIGRpc2NvbnRpZ3VvdXMgKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlhcdTAzMDBcdTAzMUFcdTAzMTVEIiwgIlx1MDMxQVx1MDMxNUQiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgCisgICAgICAgICAgICBuZXcgaW50W10gezEsIC0xfSwgbmV3IGludFtdIHs0fSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJhYiIsICJ6IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgLTF9LCBuZXcgaW50W10gezJ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEobnVsbCwgbnVsbCwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KQorICAgIH07CisgICAgCisgICAgU2VhcmNoRGF0YSBNQVRDSFtdID0geworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYSBidXN5IGJlZSBpcyBhIHZlcnkgYnVzeSBiZWVlZSIsICJiZWUiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgCisgICAgICAgIG5ldyBpbnRbXSB7NywgMjYsIC0xfSwgbmV3IGludFtdIHszLCAzfSksCisgICAgICAgIC8qIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYSBidXN5IGJlZSBpcyBhIHZlcnkgYnVzeSBiZWVlZSB3aXRoIG5vIGJlZSBsaWZlIiwgImJlZSIsIG51bGwsIAorICAgICAgICAgICAgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7NywgMjYsIDQwLCAtMX0sIG5ldyBpbnRbXSB7MywgMywgM30pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKyAgICAKKyAgICBTdHJpbmcgSUdOT1JBQkxFUlVMRSA9ICImYSA9IFx1MDMwMCI7CisgICAgCisgICAgU2VhcmNoRGF0YSBJR05PUkFCTEVbXSA9IHsKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDMxNVx1MDMwMCBcdTAzMTVcdTAzMDBcdTAzMTUgIiwgIlx1MDMwMCIsIG51bGwsIENvbGxhdG9yLlBSSU1BUlksIG51bGwsIAorICAgICAgICAgICAgbmV3IGludFtdIHswLCAzLCAtMX0sIG5ldyBpbnRbXSB7MiwgM30pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKyAgICAKKyAgICBTZWFyY2hEYXRhIE5PUk1DQU5PTklDQUxbXSA9IHsKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlx1MDMwMFx1MDMyNSIsICJcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiXHUwMzAwXHUwMzI1IiwgIlx1MDMyNSIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIC0xfSwgbmV3IGludFtdIHsyfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJhXHUwMzAwXHUwMzI1IiwgIlx1MDMyNVx1MDMwMCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezEsIC0xfSwgCisgICAgICAgICAgICBuZXcgaW50W10gezJ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImFcdTAzMDBcdTAzMjUiLCAiXHUwMzAwXHUwMzI1IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MSwgLTF9LCAKKyAgICAgICAgICAgIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYVx1MDMwMFx1MDMyNSIsICJcdTAzMjUiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHsxLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYVx1MDMwMFx1MDMyNSIsICJcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHsxLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKyAgICAKKyAgICBTZWFyY2hEYXRhIE5PUk1FWEFDVFtdID0geworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYVx1MDMwMFx1MDMyNSIsICJcdTAzMjVcdTAzMDAiLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHsxLCAtMX0sIG5ldyBpbnRbXSB7Mn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKworICAgIFNlYXJjaERhdGEgTk9OTk9STUVYQUNUW10gPSB7CisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJhXHUwMzAwXHUwMzI1IiwgIlx1MDMyNVx1MDMwMCIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworICAgIAorICAgIFNlYXJjaERhdGEgT1ZFUkxBUFtdID0geworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYWJhYmFiYWIiLCAiYWJhYiIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIDIsIDQsIC0xfSwgbmV3IGludFtdIHs0LCA0LCA0fSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworICAgIAorICAgIFNlYXJjaERhdGEgTk9OT1ZFUkxBUFtdID0geworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYWJhYmFiYWIiLCAiYWJhYiIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIDQsIC0xfSwgbmV3IGludFtdIHs0LCA0fSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworICAgIAorICAgIFNlYXJjaERhdGEgT1ZFUkxBUENBTk9OSUNBTFtdID0geworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYWJhYmFiYWIiLCAiYWJhYiIsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gezAsIDIsIDQsIC0xfSwgCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgaW50W10gezQsIDQsIDR9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEobnVsbCwgbnVsbCwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KQorICAgIH07CisgICAgCisgICAgU2VhcmNoRGF0YSBOT05PVkVSTEFQQ0FOT05JQ0FMW10gPSB7CisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJhYmFiYWJhYiIsICJhYmFiIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgNCwgLTF9LCBuZXcgaW50W10gezQsIDR9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEobnVsbCwgbnVsbCwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7LTF9LCBuZXcgaW50W10gezB9KQorICAgIH07CisgICAgCisgICAgU2VhcmNoRGF0YSBQQVRURVJOQ0FOT05JQ0FMW10gPSB7CisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZm94ZXMiLCAidGhlIiwgbnVsbCwgCisgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlBSSU1BUlksIG51bGwsIG5ldyBpbnRbXSB7MCwgMzEsIC0xfSwgbmV3IGludFtdIHszLCAzfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZm94ZXMiLCAiZm94IiwgbnVsbCwgCisgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlBSSU1BUlksIG51bGwsIG5ldyBpbnRbXSB7MTYsIDQwLCAtMX0sIG5ldyBpbnRbXSB7MywgM30pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKyAgICAKKyAgICBTZWFyY2hEYXRhIFBBVFRFUk5bXSA9IHsKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBmb3hlcyIsICJ0aGUiLCBudWxsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuUFJJTUFSWSwgbnVsbCwgbmV3IGludFtdIHswLCAzMSwgLTF9LCBuZXcgaW50W10gezMsIDN9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBmb3hlcyIsICJmb3giLCBudWxsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuUFJJTUFSWSwgbnVsbCwgbmV3IGludFtdIHsxNiwgNDAsIC0xfSwgbmV3IGludFtdIHszLCAzfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworICAgIAorICAgIFNlYXJjaERhdGEgU1RSRU5HVEhbXSA9IHsKKyAgICAgICAgLyowMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGZveGVzIiwgImZveCIsICJlbiIsIAorICAgICAgICAgICAgICAgICAgICAgICBDb2xsYXRvci5QUklNQVJZLCBudWxsLCBuZXcgaW50W10gezE2LCA0MCwgLTF9LCBuZXcgaW50W10gezMsIDN9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBmb3hlcyIsICJmb3giLCAiZW4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuUFJJTUFSWSwgIndvcmRicmVha2VyIiwgbmV3IGludFtdIHsxNiwgLTF9LCBuZXcgaW50W10gezN9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoImJsYWNrYmlyZHMgUGF0IHBcdTAwRTljaFx1MDBFOSBwXHUwMEVBY2hlIHBcdTAwRTljaGVyIHBcdTAwRUFjaGVyIFRvZCBUXHUwMEY2bmUgYmxhY2sgVG9mdSBibGFja2JpcmRzIFRvbiBQQVQgdG9laG9sZCBibGFja2JpcmQgYmxhY2stYmlyZCBwYXQgdG9lIGJpZyBUb2UiLAorICAgICAgICAgICAgICAgICAgICAgICAicGVjaGUiLCAiZnIiLCBDb2xsYXRvci5QUklNQVJZLCBudWxsLCBuZXcgaW50W10gezE1LCAyMSwgMjcsIDM0LCAtMX0sIG5ldyBpbnRbXSB7NSwgNSwgNSwgNX0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgiVGhpcyBpcyBhIHRvZSBUXHUwMEY2bmUiLCAidG9lIiwgImRlIiwgQ29sbGF0b3IuUFJJTUFSWSwgbnVsbCwgCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgaW50W10gezEwLCAxNCwgLTF9LCBuZXcgaW50W10gezMsIDJ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkEgY2hhbm5lbCwgYW5vdGhlciBDSEFOTkVMLCBtb3JlIENoYW5uZWxzLCBhbmQgb25lIGxhc3QgY2hhbm5lbC4uLiIsICJjaGFubmVsIiwgImVzIiwgCisgICAgICAgICAgICAgICAgICAgICAgICBDb2xsYXRvci5QUklNQVJZLCBudWxsLCBuZXcgaW50W10gezIsIDE5LCAzMywgNTYsIC0xfSwgbmV3IGludFtdIHs3LCA3LCA3LCA3fSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworICAgIAorICAgIFNlYXJjaERhdGEgU1RSRU5HVEhDQU5PTklDQUxbXSA9IHsKKyAgICAgICAgLyowMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkgKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBmb3hlcyIsICJmb3giLCAiZW4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuUFJJTUFSWSwgbnVsbCwgbmV3IGludFtdIHsxNiwgNDAsIC0xfSwgbmV3IGludFtdIHszLCAzfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZm94ZXMiLCAiZm94IiwgImVuIiwgCisgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlBSSU1BUlksICJ3b3JkYnJlYWtlciIsIG5ldyBpbnRbXSB7MTYsIC0xfSwgbmV3IGludFtdIHszfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJibGFja2JpcmRzIFBhdCBwXHUwMEU5Y2hcdTAwRTkgcFx1MDBFQWNoZSBwXHUwMEU5Y2hlciBwXHUwMEVBY2hlciBUb2QgVFx1MDBGNm5lIGJsYWNrIFRvZnUgYmxhY2tiaXJkcyBUb24gUEFUIHRvZWhvbGQgYmxhY2tiaXJkIGJsYWNrLWJpcmQgcGF0IHRvZSBiaWcgVG9lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgInBlY2hlIiwgImZyIiwgQ29sbGF0b3IuUFJJTUFSWSwgbnVsbCwgbmV3IGludFtdIHsxNSwgMjEsIDI3LCAzNCwgLTF9LCBuZXcgaW50W10gezUsIDUsIDUsIDV9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIlRoaXMgaXMgYSB0b2UgVFx1MDBGNm5lIiwgInRvZSIsICJkZSIsIENvbGxhdG9yLlBSSU1BUlksIG51bGwsIAorICAgICAgICAgICAgICAgICAgICAgICBuZXcgaW50W10gezEwLCAxNCwgLTF9LCBuZXcgaW50W10gezMsIDJ9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIkEgY2hhbm5lbCwgYW5vdGhlciBDSEFOTkVMLCBtb3JlIENoYW5uZWxzLCBhbmQgb25lIGxhc3QgY2hhbm5lbC4uLiIsICJjaGFubmVsIiwgImVzIiwgCisgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlBSSU1BUlksIG51bGwsIG5ldyBpbnRbXXsyLCAxOSwgMzMsIDU2LCAtMX0sIG5ldyBpbnRbXSB7NywgNywgNywgN30pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXXswfSkKKyAgICB9OworICAgIAorICAgIFNlYXJjaERhdGEgU1VQUExFTUVOVEFSWUNBTk9OSUNBTFtdID0geworICAgICAgICAvKjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiYWJjIFx1RDgwMFx1REMwMCBcdUQ4MDBcdURDMDEgXHVEODAxXHVEQzAwIFx1RDgwMFx1REMwMGFiYyBhYmNcdUQ4MDBcdURDMDAgXHVEODAwXHVEODAwXHVEQzAwIFx1RDgwMFx1REMwMFx1REMwMCIsIAorICAgICAgICAgICAgICAgICAgICAgICAiXHVEODAwXHVEQzAwIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7NCwgMTMsIDIyLCAyNiwgMjksIC0xfSwgCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBpbnRbXSB7MiwgMiwgMiwgMiwgMn0pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YShudWxsLCBudWxsLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgU2VhcmNoRGF0YSBWQVJJQUJMRVtdID0geworICAgICAgICAvKjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSovCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJibGFja2JpcmRzIGJsYWNrIGJsYWNrYmlyZHMgYmxhY2tiaXJkIGJsYWNrLWJpcmQiLCAiYmxhY2tiaXJkIiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksICAgbnVsbCwgCisgICAgICAgIG5ldyBpbnRbXSB7MCwgMTcsIDI4LCAzOCwgLTF9LCBuZXcgaW50W10gezksIDksIDksIDEwfSksCisgICAgICAgIAorICAgICAgICAvKiB0byBzZWUgdGhhdCBpdCBkb2Vzbid0IGdvIGludG8gYW4gaW5maW5pdGUgbG9vcCBpZiB0aGUgc3RhcnQgb2YgdGV4dAorICAgICAgICBpcyBhIGlnbm9yYWJsZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgbmV3IFNlYXJjaERhdGEoIiBvbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnbyIsICAgICAgICBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgICBudWxsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXXswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsICAgICAgICAgICAgICAgICAgICAgICAiICAgIiwgICAgICAgbnVsbCwgQ29sbGF0b3IuUFJJTUFSWSwgICAgbnVsbCwgCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgaW50W117MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIC0xfSwgCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgaW50W10gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9KSwKKyAgICAgICAgCisgICAgICAgIC8qIHRlc3RpbmcgdGlnaHRlc3QgbWF0Y2ggKi8gCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKCIgYWJjICBhIGJjICAgYWIgYyAgICBhICBiYyAgICAgYWIgIGMiLCAgICAgICAgICAgICAiYWJjIiwgICAgICAgbnVsbCwgQ29sbGF0b3IuUVVBVEVSTkFSWSwgbnVsbCwgCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBpbnRbXXsxLCAtMX0sIG5ldyBpbnRbXSB7M30pLAorICAgICAgICAvKjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiIGFiYyAgYSBiYyAgIGFiIGMgICAgYSAgYmMgICAgIGFiICBjIiwgICAgICAgICAgICAgImFiYyIsICAgICAgIG51bGwsIENvbGxhdG9yLlNFQ09OREFSWSwgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBpbnRbXSB7MSwgNiwgMTMsIDIxLCAzMSwgLTF9LCBuZXcgaW50W10gezMsIDQsIDQsIDUsIDV9KSwKKyAgICAKKyAgICAgICAgLyogdG90YWxseSBpZ25vcmFibGUgdGV4dCAqLworICAgICAgICBuZXcgU2VhcmNoRGF0YSgiICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0iLCAgICAgICAgICAgICAgICAgICAgICAgImFiYyIsICAgICAgIG51bGwsIENvbGxhdG9yLlNFQ09OREFSWSwgIG51bGwsIAorICAgICAgICAgICAgICAgICAgICAgICBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSksCisgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdIHswfSkKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBTZWFyY2hEYXRhIFRFWFRDQU5PTklDQUxbXSA9IHsKKyAgICAgICAgbmV3IFNlYXJjaERhdGEoInRoZSBmb3h5IGJyb3duIGZveCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3giLCAgICAgICBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICBuZXcgaW50W10gezQsIDE1LCAtMX0sIG5ldyBpbnRbXSB7MywgM30pLAorICAgICAgICBuZXcgU2VhcmNoRGF0YSgidGhlIHF1aWNrIGJyb3duIGZveCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZveCIsICAgICAgIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBpbnRbXSB7MTYsIC0xfSwgbmV3IGludFtdezN9KSwKKyAgICAgICAgbmV3IFNlYXJjaERhdGEobnVsbCwgbnVsbCwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksbnVsbCwgbmV3IGludFtdIHstMX0sIG5ldyBpbnRbXSB7MH0pCisgICAgfTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAqLworICAgIHB1YmxpYyBTZWFyY2hUZXN0KCkKKyAgICB7CisgICAgICAgIG1fZW5fdXNfID0gKFJ1bGVCYXNlZENvbGxhdG9yKUNvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7IAorICAgICAgICBtX2ZyX2ZyXyA9IChSdWxlQmFzZWRDb2xsYXRvcilDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRlJBTkNFKTsKKyAgICAgICAgbV9kZV8gPSAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgiZGUiLCAiREUiKSk7CisgICAgICAgIG1fZXNfID0gKFJ1bGVCYXNlZENvbGxhdG9yKUNvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoImVzIiwgIkVTIikpOyAKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgcnVsZXMgPSBtX2RlXy5nZXRSdWxlcygpICsgRVhUUkFDT0xMQVRJT05SVUxFOworICAgICAgICAgICAgbV9kZV8gPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXMpOworICAgICAgICAgICAgcnVsZXMgPSBtX2VzXy5nZXRSdWxlcygpICsgRVhUUkFDT0xMQVRJT05SVUxFOworICAgICAgICAgICAgbV9lc18gPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIGNyZWF0aW5nIG1vZGlmaWVkIEdlcm1hbiBhbmQgU3BhbmlzaCBjb2xsYXRvcnMiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFNlYXJjaFRlc3QoKS5ydW4oYXJncyk7CisgICAgICAgIC8vIG5ldyBTZWFyY2hUZXN0KCkuVGVzdENvbnRyYWN0aW9uKCk7CisgICAgfQorICAgIAorICAgIFJ1bGVCYXNlZENvbGxhdG9yIGdldENvbGxhdG9yKFN0cmluZyBjb2xsYXRvcikgeworICAgICAgICBpZiAoY29sbGF0b3IgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG1fZW5fdXNfOworICAgICAgICB9IGlmIChjb2xsYXRvci5lcXVhbHMoImZyIikpIHsKKyAgICAgICAgICAgIHJldHVybiBtX2ZyX2ZyXzsKKyAgICAgICAgfSBlbHNlIGlmIChjb2xsYXRvci5lcXVhbHMoImRlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBtX2RlXzsKKyAgICAgICAgfSBlbHNlIGlmIChjb2xsYXRvci5lcXVhbHMoImVzIikpIHsKKyAgICAgICAgICAgIHJldHVybiBtX2VzXzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBtX2VuX3VzXzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCcmVha0l0ZXJhdG9yIGdldEJyZWFrSXRlcmF0b3IoU3RyaW5nIGJyZWFrZXIpIHsKKyAgICAgICAgaWYgKGJyZWFrZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0gaWYgKGJyZWFrZXIuZXF1YWxzKCJ3b3JkYnJlYWtlciIpKSB7CisgICAgICAgICAgICByZXR1cm4gbV9lbl93b3JkYnJlYWtlcl87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbV9lbl9jaGFyYWN0ZXJicmVha2VyXzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2xlYW4gYXNzZXJ0Q2Fub25pY2FsRXF1YWwoU2VhcmNoRGF0YSBzZWFyY2gpIHsKKyAgICAgICAgQ29sbGF0b3IgICAgICBjb2xsYXRvciA9IGdldENvbGxhdG9yKHNlYXJjaC5jb2xsYXRvcik7CisgICAgICAgIEJyZWFrSXRlcmF0b3IgYnJlYWtlciAgPSBnZXRCcmVha0l0ZXJhdG9yKHNlYXJjaC5icmVha2VyKTsKKyAgICAgICAgU3RyaW5nU2VhcmNoICBzdHJzcmNoOyAKKyAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXh0ID0gc2VhcmNoLnRleHQ7CisgICAgICAgIFN0cmluZyAgcGF0dGVybiA9IHNlYXJjaC5wYXR0ZXJuOworICAgIAorICAgICAgICBpZiAoYnJlYWtlciAhPSBudWxsKSB7CisgICAgICAgICAgICBicmVha2VyLnNldFRleHQodGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgY29sbGF0b3Iuc2V0U3RyZW5ndGgoc2VhcmNoLnN0cmVuZ3RoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgKFJ1bGVCYXNlZENvbGxhdG9yKWNvbGxhdG9yLCBicmVha2VyKTsKKyAgICAgICAgICAgIHN0cnNyY2guc2V0Q2Fub25pY2FsKHRydWUpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIG9wZW5pbmcgc3RyaW5nIHNlYXJjaCIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gICAKKyAgICAgICAgCisgICAgICAgIGlmICghYXNzZXJ0RXF1YWxXaXRoU3RyaW5nU2VhcmNoKHN0cnNyY2gsIHNlYXJjaCkpIHsKKyAgICAgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjb2xsYXRvci5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sZWFuIGFzc2VydEVxdWFsKFNlYXJjaERhdGEgc2VhcmNoKSB7CisgICAgICAgIENvbGxhdG9yICAgICAgY29sbGF0b3IgPSBnZXRDb2xsYXRvcihzZWFyY2guY29sbGF0b3IpOworICAgICAgICBCcmVha0l0ZXJhdG9yIGJyZWFrZXIgID0gZ2V0QnJlYWtJdGVyYXRvcihzZWFyY2guYnJlYWtlcik7CisgICAgICAgIFN0cmluZ1NlYXJjaCAgc3Ryc3JjaDsgCisgICAgICAgIAorICAgICAgICBTdHJpbmcgdGV4dCA9IHNlYXJjaC50ZXh0OworICAgICAgICBTdHJpbmcgIHBhdHRlcm4gPSBzZWFyY2gucGF0dGVybjsKKyAgICAKKyAgICAgICAgaWYgKGJyZWFrZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgYnJlYWtlci5zZXRUZXh0KHRleHQpOworICAgICAgICB9CisgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKHNlYXJjaC5zdHJlbmd0aCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdHJzcmNoID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIChSdWxlQmFzZWRDb2xsYXRvciljb2xsYXRvciwgYnJlYWtlcik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igb3BlbmluZyBzdHJpbmcgc2VhcmNoICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghYXNzZXJ0RXF1YWxXaXRoU3RyaW5nU2VhcmNoKHN0cnNyY2gsIHNlYXJjaCkpIHsKKyAgICAgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjb2xsYXRvci5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sZWFuIGFzc2VydEVxdWFsV2l0aEF0dHJpYnV0ZShTZWFyY2hEYXRhIHNlYXJjaCwgYm9vbGVhbiBjYW5vbmljYWwsIGJvb2xlYW4gb3ZlcmxhcCkgeworICAgICAgICBDb2xsYXRvciAgICAgIGNvbGxhdG9yID0gZ2V0Q29sbGF0b3Ioc2VhcmNoLmNvbGxhdG9yKTsKKyAgICAgICAgQnJlYWtJdGVyYXRvciBicmVha2VyICA9IGdldEJyZWFrSXRlcmF0b3Ioc2VhcmNoLmJyZWFrZXIpOworICAgICAgICBTdHJpbmdTZWFyY2ggIHN0cnNyY2g7IAorICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRleHQgPSBzZWFyY2gudGV4dDsKKyAgICAgICAgU3RyaW5nICBwYXR0ZXJuID0gc2VhcmNoLnBhdHRlcm47CisgICAgCisgICAgICAgIGlmIChicmVha2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGJyZWFrZXIuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBjb2xsYXRvci5zZXRTdHJlbmd0aChzZWFyY2guc3RyZW5ndGgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3Ryc3JjaCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRleHQpLCAoUnVsZUJhc2VkQ29sbGF0b3IpY29sbGF0b3IsIGJyZWFrZXIpOworICAgICAgICAgICAgc3Ryc3JjaC5zZXRDYW5vbmljYWwoY2Fub25pY2FsKTsKKyAgICAgICAgICAgIHN0cnNyY2guc2V0T3ZlcmxhcHBpbmcob3ZlcmxhcCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igb3BlbmluZyBzdHJpbmcgc2VhcmNoICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghYXNzZXJ0RXF1YWxXaXRoU3RyaW5nU2VhcmNoKHN0cnNyY2gsIHNlYXJjaCkpIHsKKyAgICAgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjb2xsYXRvci5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sZWFuIGFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChTdHJpbmdTZWFyY2ggc3Ryc3JjaCwgU2VhcmNoRGF0YSBzZWFyY2gpIHsKKyAgICAgICAgaW50ICAgICAgICAgICBjb3VudCAgICAgICA9IDA7CisgICAgICAgIGludCAgIG1hdGNoaW5kZXggID0gc2VhcmNoLm9mZnNldFtjb3VudF07CisgICAgICAgIFN0cmluZyBtYXRjaHRleHQ7CisgICAgICAgIAorICAgICAgICBpZiAoc3Ryc3JjaC5nZXRNYXRjaFN0YXJ0KCkgIT0gU2VhcmNoSXRlcmF0b3IuRE9ORSB8fAorICAgICAgICAgICAgc3Ryc3JjaC5nZXRNYXRjaExlbmd0aCgpICE9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBtYXRjaCBzdGFydCBhbmQgbGVuZ3RoIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gc3RhcnQgb2YgZm9sbG93aW5nIG1hdGNoZXMgCisgICAgICAgIHdoaWxlIChtYXRjaGluZGV4ID49IDApIHsKKyAgICAgICAgICAgIGludCBtYXRjaGxlbmd0aCA9IHNlYXJjaC5zaXplW2NvdW50XTsKKyAgICAgICAgICAgIHN0cnNyY2gubmV4dCgpOworICAgICAgICAgICAgLy9pbnQgeCA9IHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpOworICAgICAgICAgICAgaWYgKG1hdGNoaW5kZXggIT0gc3Ryc3JjaC5nZXRNYXRjaFN0YXJ0KCkgfHwgCisgICAgICAgICAgICAgICAgbWF0Y2hsZW5ndGggIT0gc3Ryc3JjaC5nZXRNYXRjaExlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlRleHQ6ICIgKyBzZWFyY2gudGV4dCk7CisgICAgICAgICAgICAgICAgZXJybG4oIlBhdHRlcm46ICIgKyBzdHJzcmNoLmdldFBhdHRlcm4oKSk7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGZvbGxvd2luZyBtYXRjaCBmb3VuZCBhdCAiICsgc3Ryc3JjaC5nZXRNYXRjaFN0YXJ0KCkgKyAiLCAiICsgc3Ryc3JjaC5nZXRNYXRjaExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbWF0Y2h0ZXh0ID0gc3Ryc3JjaC5nZXRNYXRjaGVkVGV4dCgpOworICAgICAgICAgICAgU3RyaW5nIHRhcmdldFRleHQgPSBzZWFyY2gudGV4dDsKKyAgICAgICAgICAgIGlmIChtYXRjaGxlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgICAgICB0YXJnZXRUZXh0LnN1YnN0cmluZyhtYXRjaGluZGV4LCBtYXRjaGluZGV4ICsgbWF0Y2hsZW5ndGgpLmNvbXBhcmVUbyhtYXRjaHRleHQpICE9IDApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgZ2V0dGluZyBmb2xsb3dpbmcgbWF0Y2hlZCB0ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBtYXRjaGluZGV4ID0gc2VhcmNoLm9mZnNldFtjb3VudF07CisgICAgICAgIH0KKyAgICAgICAgc3Ryc3JjaC5uZXh0KCk7CisgICAgICAgIGlmIChzdHJzcmNoLmdldE1hdGNoU3RhcnQoKSAhPSBTZWFyY2hJdGVyYXRvci5ET05FIHx8CisgICAgICAgICAgICBzdHJzcmNoLmdldE1hdGNoTGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJUZXh0OiAiICsgc2VhcmNoLnRleHQpOworICAgICAgICAgICAgICAgIGVycmxuKCJQYXR0ZXJuOiAiICsgc3Ryc3JjaC5nZXRQYXR0ZXJuKCkpOworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBmb2xsb3dpbmcgbWF0Y2ggZm91bmQgYXQgIiArIHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpICsgIiwgIiArIHN0cnNyY2guZ2V0TWF0Y2hMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIHN0YXJ0IG9mIHByZWNlZGluZyBtYXRjaGVzIAorICAgICAgICBjb3VudCA9IGNvdW50ID09IDAgPyAwIDogY291bnQgLSAxOworICAgICAgICBtYXRjaGluZGV4ID0gc2VhcmNoLm9mZnNldFtjb3VudF07CisgICAgICAgIHdoaWxlIChtYXRjaGluZGV4ID49IDApIHsKKyAgICAgICAgICAgIGludCBtYXRjaGxlbmd0aCA9IHNlYXJjaC5zaXplW2NvdW50XTsKKyAgICAgICAgICAgIHN0cnNyY2gucHJldmlvdXMoKTsKKyAgICAgICAgICAgIGlmIChtYXRjaGluZGV4ICE9IHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpIHx8IAorICAgICAgICAgICAgICAgIG1hdGNobGVuZ3RoICE9IHN0cnNyY2guZ2V0TWF0Y2hMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJUZXh0OiAiICsgc2VhcmNoLnRleHQpOworICAgICAgICAgICAgICAgIGVycmxuKCJQYXR0ZXJuOiAiICsgc3Ryc3JjaC5nZXRQYXR0ZXJuKCkpOworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBmb2xsb3dpbmcgbWF0Y2ggZm91bmQgYXQgIiArIHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpICsgIiwgIiArIHN0cnNyY2guZ2V0TWF0Y2hMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtYXRjaHRleHQgPSBzdHJzcmNoLmdldE1hdGNoZWRUZXh0KCk7CisgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0VGV4dCA9IHNlYXJjaC50ZXh0OworICAgICAgICAgICAgaWYgKG1hdGNobGVuZ3RoID4gMCAmJiAKKyAgICAgICAgICAgICAgICB0YXJnZXRUZXh0LnN1YnN0cmluZyhtYXRjaGluZGV4LCBtYXRjaGluZGV4ICsgbWF0Y2hsZW5ndGgpLmNvbXBhcmVUbyhtYXRjaHRleHQpICE9IDApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgZ2V0dGluZyBmb2xsb3dpbmcgbWF0Y2hlZCB0ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBtYXRjaGluZGV4ID0gY291bnQgPiAwID8gc2VhcmNoLm9mZnNldFtjb3VudCAtIDFdIDogLTE7CisgICAgICAgICAgICBjb3VudCAtLTsKKyAgICAgICAgfQorICAgICAgICBzdHJzcmNoLnByZXZpb3VzKCk7CisgICAgICAgIGlmIChzdHJzcmNoLmdldE1hdGNoU3RhcnQoKSAhPSBTZWFyY2hJdGVyYXRvci5ET05FIHx8CisgICAgICAgICAgICBzdHJzcmNoLmdldE1hdGNoTGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJUZXh0OiAiICsgc2VhcmNoLnRleHQpOworICAgICAgICAgICAgICAgIGVycmxuKCJQYXR0ZXJuOiAiICsgc3Ryc3JjaC5nZXRQYXR0ZXJuKCkpOworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBmb2xsb3dpbmcgbWF0Y2ggZm91bmQgYXQgIiArIHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpICsgIiwgIiArIHN0cnNyY2guZ2V0TWF0Y2hMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0QmFzaWMoKSB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChCQVNJQ1tjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsKEJBU0lDW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RCcmVha0l0ZXJhdG9yKCkgeworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRleHQgPSBCUkVBS0lURVJBVE9SRVhBQ1RbMF0udGV4dDsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBCUkVBS0lURVJBVE9SRVhBQ1RbMF0ucGF0dGVybjsKKyAgICAgICAgU3RyaW5nU2VhcmNoIHN0cnNyY2ggPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3Ryc3JjaCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRleHQpLCBtX2VuX3VzXywgbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igb3BlbmluZyBzdHJpbmcgc2VhcmNoIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0cnNyY2guc2V0QnJlYWtJdGVyYXRvcihudWxsKTsKKyAgICAgICAgaWYgKHN0cnNyY2guZ2V0QnJlYWtJdGVyYXRvcigpICE9IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciB1c2VhcmNoX2dldEJyZWFrSXRlcmF0b3IgcmV0dXJuZWQgd3Jvbmcgb2JqZWN0Iik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0cnNyY2guc2V0QnJlYWtJdGVyYXRvcihtX2VuX2NoYXJhY3RlcmJyZWFrZXJfKTsKKyAgICAgICAgaWYgKCFzdHJzcmNoLmdldEJyZWFrSXRlcmF0b3IoKS5lcXVhbHMobV9lbl9jaGFyYWN0ZXJicmVha2VyXykpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciB1c2VhcmNoX2dldEJyZWFrSXRlcmF0b3IgcmV0dXJuZWQgd3Jvbmcgb2JqZWN0Iik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0cnNyY2guc2V0QnJlYWtJdGVyYXRvcihtX2VuX3dvcmRicmVha2VyXyk7CisgICAgICAgIGlmICghc3Ryc3JjaC5nZXRCcmVha0l0ZXJhdG9yKCkuZXF1YWxzKG1fZW5fd29yZGJyZWFrZXJfKSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIHVzZWFyY2hfZ2V0QnJlYWtJdGVyYXRvciByZXR1cm5lZCB3cm9uZyBvYmplY3QiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoY291bnQgPCA0KSB7CisgICAgICAgICAgICAvLyBzcGVjaWFsIHB1cnBvc2VzIGZvciB0ZXN0cyBudW1iZXJzIDAtMworICAgICAgICAgICAgU2VhcmNoRGF0YSAgICAgICAgc2VhcmNoICAgPSBCUkVBS0lURVJBVE9SRVhBQ1RbY291bnRdOyAgICAgCisgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciA9IGdldENvbGxhdG9yKHNlYXJjaC5jb2xsYXRvcik7CisgICAgICAgICAgICBCcmVha0l0ZXJhdG9yICAgICBicmVha2VyICA9IGdldEJyZWFrSXRlcmF0b3Ioc2VhcmNoLmJyZWFrZXIpOworICAgICAgICAgICAgICAgICAgLy9TdHJpbmdTZWFyY2ggICAgICBzdHJzcmNoOyAKKyAgICAgICAgCisgICAgICAgICAgICB0ZXh0ID0gc2VhcmNoLnRleHQ7CisgICAgICAgICAgICBwYXR0ZXJuID0gc2VhcmNoLnBhdHRlcm47IAorICAgICAgICAgICAgaWYgKGJyZWFrZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJyZWFrZXIuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKHNlYXJjaC5zdHJlbmd0aCk7CisgICAgICAgICAgICBzdHJzcmNoID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIGNvbGxhdG9yLCBicmVha2VyKTsKKyAgICAgICAgICAgIGlmIChzdHJzcmNoLmdldEJyZWFrSXRlcmF0b3IoKSAhPSBicmVha2VyKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIHNldHRpbmcgYnJlYWsgaXRlcmF0b3IiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghYXNzZXJ0RXF1YWxXaXRoU3RyaW5nU2VhcmNoKHN0cnNyY2gsIHNlYXJjaCkpIHsKKyAgICAgICAgICAgICAgICBjb2xsYXRvci5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWFyY2ggICA9IEJSRUFLSVRFUkFUT1JFWEFDVFtjb3VudCArIDFdOworICAgICAgICAgICAgYnJlYWtlciAgPSBnZXRCcmVha0l0ZXJhdG9yKHNlYXJjaC5icmVha2VyKTsKKyAgICAgICAgICAgIGlmIChicmVha2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBicmVha2VyLnNldFRleHQodGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJzcmNoLnNldEJyZWFrSXRlcmF0b3IoYnJlYWtlcik7CisgICAgICAgICAgICBpZiAoc3Ryc3JjaC5nZXRCcmVha0l0ZXJhdG9yKCkgIT0gYnJlYWtlcikgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIGJyZWFrIGl0ZXJhdG9yIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBzZWFyY2gpKSB7CisgICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQgKz0gMjsKKyAgICAgICAgfQorICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChCUkVBS0lURVJBVE9SRVhBQ1RbY291bnRdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCFhc3NlcnRFcXVhbChCUkVBS0lURVJBVE9SRVhBQ1RbY291bnRdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEJyZWFrSXRlcmF0b3JDYW5vbmljYWwoKSB7CisgICAgICAgIGludCAgICAgICAgY291bnQgID0gMDsKKyAgICAgICAgd2hpbGUgKGNvdW50IDwgNCkgeworICAgICAgICAgICAgLy8gc3BlY2lhbCBwdXJwb3NlcyBmb3IgdGVzdHMgbnVtYmVycyAwLTMKKyAgICAgICAgICAgIFNlYXJjaERhdGEgICAgIHNlYXJjaCAgID0gQlJFQUtJVEVSQVRPUkNBTk9OSUNBTFtjb3VudF07ICAgICAKKyAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IHNlYXJjaC50ZXh0OworICAgICAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBzZWFyY2gucGF0dGVybjsKKyAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yID0gZ2V0Q29sbGF0b3Ioc2VhcmNoLmNvbGxhdG9yKTsKKyAgICAgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKHNlYXJjaC5zdHJlbmd0aCk7CisgICAgCisgICAgICAgICAgICBCcmVha0l0ZXJhdG9yIGJyZWFrZXIgPSBnZXRCcmVha0l0ZXJhdG9yKHNlYXJjaC5icmVha2VyKTsKKyAgICAgICAgICAgIFN0cmluZ1NlYXJjaCAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgY29sbGF0b3IsIGJyZWFrZXIpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgY3JlYXRpbmcgc3RyaW5nIHNlYXJjaCBkYXRhIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Ryc3JjaC5zZXRDYW5vbmljYWwodHJ1ZSk7CisgICAgICAgICAgICBpZiAoIXN0cnNyY2guZ2V0QnJlYWtJdGVyYXRvcigpLmVxdWFscyhicmVha2VyKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIGJyZWFrIGl0ZXJhdG9yIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgc2VhcmNoKSkgeworICAgICAgICAgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWFyY2ggID0gQlJFQUtJVEVSQVRPUkVYQUNUW2NvdW50ICsgMV07CisgICAgICAgICAgICBicmVha2VyID0gZ2V0QnJlYWtJdGVyYXRvcihzZWFyY2guYnJlYWtlcik7CisgICAgICAgICAgICBicmVha2VyLnNldFRleHQoc3Ryc3JjaC5nZXRUYXJnZXQoKSk7CisgICAgICAgICAgICBzdHJzcmNoLnNldEJyZWFrSXRlcmF0b3IoYnJlYWtlcik7CisgICAgICAgICAgICBpZiAoIXN0cnNyY2guZ2V0QnJlYWtJdGVyYXRvcigpLmVxdWFscyhicmVha2VyKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIGJyZWFrIGl0ZXJhdG9yIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Ryc3JjaC5yZXNldCgpOworICAgICAgICAgICAgc3Ryc3JjaC5zZXRDYW5vbmljYWwodHJ1ZSk7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBzZWFyY2gpKSB7CisgICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArPSAyOworICAgICAgICB9CisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKEJSRUFLSVRFUkFUT1JDQU5PTklDQUxbY291bnRdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgIGlmICghYXNzZXJ0RXF1YWwoQlJFQUtJVEVSQVRPUkNBTk9OSUNBTFtjb3VudF0pKSB7CisgICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENhbm9uaWNhbCgpIHsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKEJBU0lDQ0FOT05JQ0FMW2NvdW50XS50ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgCWlmICghYXNzZXJ0Q2Fub25pY2FsRXF1YWwoQkFTSUNDQU5PTklDQUxbY291bnRdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENvbGxhdG9yKCkgeworICAgICAgICAvLyB0ZXN0IGNvbGxhdG9yIHRoYXQgdGhpbmtzICJvIiBhbmQgInAiIGFyZSB0aGUgc2FtZSB0aGluZworICAgICAgICBTdHJpbmcgdGV4dCA9IENPTExBVE9SWzBdLnRleHQ7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuICA9IENPTExBVE9SWzBdLnBhdHRlcm47CisgICAgICAgIFN0cmluZ1NlYXJjaCBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgbV9lbl91c18sIG51bGwpOyAgICAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBvcGVuaW5nIHN0cmluZyBzZWFyY2ggIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgQ09MTEFUT1JbMF0pKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHJ1bGVzID0gVEVTVENPTExBVE9SUlVMRTsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgdGFpbG9yZWQgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGFpbG9yZWQgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXMpOworICAgICAgICAgICAgdGFpbG9yZWQuc2V0U3RyZW5ndGgoQ09MTEFUT1JbMV0uc3RyZW5ndGgpOyAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBvcGVuaW5nIHJ1bGUgYmFzZWQgY29sbGF0b3IgIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgc3Ryc3JjaC5zZXRDb2xsYXRvcih0YWlsb3JlZCk7CisgICAgICAgIGlmICghc3Ryc3JjaC5nZXRDb2xsYXRvcigpLmVxdWFscyh0YWlsb3JlZCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIHJ1bGUgYmFzZWQgY29sbGF0b3IiKTsKKyAgICAgICAgfQorICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgICAgIGlmICghYXNzZXJ0RXF1YWxXaXRoU3RyaW5nU2VhcmNoKHN0cnNyY2gsIENPTExBVE9SWzFdKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IAorICAgICAgICBzdHJzcmNoLnNldENvbGxhdG9yKG1fZW5fdXNfKTsKKyAgICAgICAgc3Ryc3JjaC5yZXNldCgpOworICAgICAgICBpZiAoIXN0cnNyY2guZ2V0Q29sbGF0b3IoKS5lcXVhbHMobV9lbl91c18pKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBydWxlIGJhc2VkIGNvbGxhdG9yIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgQ09MTEFUT1JbMF0pKSB7CisgICAgICAgICAgIGVycmxuKCJFcnJvciBzZWFyY2hpbmcgY29sbGF0b3IgdGVzdCIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RDb2xsYXRvckNhbm9uaWNhbCgpIHsKKyAgICAgICAgLyogdGVzdCBjb2xsYXRvciB0aGF0IHRoaW5rcyAibyIgYW5kICJwIiBhcmUgdGhlIHNhbWUgdGhpbmcgKi8KKyAgICAgICAgU3RyaW5nIHRleHQgPSBDT0xMQVRPUkNBTk9OSUNBTFswXS50ZXh0OworICAgICAgICBTdHJpbmcgcGF0dGVybiA9IENPTExBVE9SQ0FOT05JQ0FMWzBdLnBhdHRlcm47CisgICAgCisgICAgICAgIFN0cmluZ1NlYXJjaCBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgbV9lbl91c18sIG51bGwpOworICAgICAgICAgICAgc3Ryc3JjaC5zZXRDYW5vbmljYWwodHJ1ZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igb3BlbmluZyBzdHJpbmcgc2VhcmNoICIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBDT0xMQVRPUkNBTk9OSUNBTFswXSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBTdHJpbmcgcnVsZXMgPSBURVNUQ09MTEFUT1JSVUxFOworICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciB0YWlsb3JlZCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0YWlsb3JlZCA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlcyk7CisgICAgICAgICAgICB0YWlsb3JlZC5zZXRTdHJlbmd0aChDT0xMQVRPUkNBTk9OSUNBTFsxXS5zdHJlbmd0aCk7CisgICAgICAgICAgICB0YWlsb3JlZC5zZXREZWNvbXBvc2l0aW9uKENvbGxhdG9yLkNBTk9OSUNBTF9ERUNPTVBPU0lUSU9OKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBvcGVuaW5nIHJ1bGUgYmFzZWQgY29sbGF0b3IgIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgc3Ryc3JjaC5zZXRDb2xsYXRvcih0YWlsb3JlZCk7CisgICAgICAgIGlmICghc3Ryc3JjaC5nZXRDb2xsYXRvcigpLmVxdWFscyh0YWlsb3JlZCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIHJ1bGUgYmFzZWQgY29sbGF0b3IiKTsKKyAgICAgICAgfQorICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgICAgIHN0cnNyY2guc2V0Q2Fub25pY2FsKHRydWUpOworICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBDT0xMQVRPUkNBTk9OSUNBTFsxXSkpIHsKKyAgICAgICAgfQorICAgICAgICBzdHJzcmNoLnNldENvbGxhdG9yKG1fZW5fdXNfKTsKKyAgICAgICAgc3Ryc3JjaC5yZXNldCgpOworICAgICAgICBpZiAoIXN0cnNyY2guZ2V0Q29sbGF0b3IoKS5lcXVhbHMobV9lbl91c18pKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBydWxlIGJhc2VkIGNvbGxhdG9yIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgQ09MTEFUT1JDQU5PTklDQUxbMF0pKSB7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENvbXBvc2l0ZUJvdW5kYXJpZXMoKSB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChDT01QT1NJVEVCT1VOREFSSUVTW2NvdW50XS50ZXh0ICE9IG51bGwpIHsgCisgICAgICAgICAgICAvLyBsb2dsbigiY29tcG9zaXRlICIgKyBjb3VudCk7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsKENPTVBPU0lURUJPVU5EQVJJRVNbY291bnRdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29tcG9zaXRlQm91bmRhcmllc0Nhbm9uaWNhbCgpIHsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKENPTVBPU0lURUJPVU5EQVJJRVNDQU5PTklDQUxbY291bnRdLnRleHQgIT0gbnVsbCkgeyAKKyAgICAgICAgICAgIC8vIGxvZ2xuKCJjb21wb3NpdGUgIiArIGNvdW50KTsKKyAgICAgICAgICAgIGlmICghYXNzZXJ0Q2Fub25pY2FsRXF1YWwoQ09NUE9TSVRFQk9VTkRBUklFU0NBTk9OSUNBTFtjb3VudF0pKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGF0IHRlc3QgbnVtYmVyICIgKyBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9IAorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29udHJhY3Rpb24oKSB7CisgICAgICAgIFN0cmluZyBydWxlcyA9IENPTlRSQUNUSU9OUlVMRTsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbGF0b3IgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXMpOyAKKyAgICAgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIGNvbGxhdG9yLnNldERlY29tcG9zaXRpb24oQ29sbGF0b3IuQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04pOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIG9wZW5pbmcgY29sbGF0b3IgIik7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRleHQgPSAidGV4dCI7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gInBhdHRlcm4iOworICAgICAgICBTdHJpbmdTZWFyY2ggc3Ryc3JjaCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdHJzcmNoID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIGNvbGxhdG9yLCBudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBvcGVuaW5nIHN0cmluZyBzZWFyY2ggIik7CisgICAgICAgIH0gICAKKyAgICAgICAgCisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChDT05UUkFDVElPTltjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICB0ZXh0ID0gQ09OVFJBQ1RJT05bY291bnRdLnRleHQ7CisgICAgICAgICAgICBwYXR0ZXJuID0gQ09OVFJBQ1RJT05bY291bnRdLnBhdHRlcm47CisgICAgICAgICAgICBzdHJzcmNoLnNldFRhcmdldChuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCkpOworICAgICAgICAgICAgc3Ryc3JjaC5zZXRQYXR0ZXJuKHBhdHRlcm4pOworICAgICAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgQ09OVFJBQ1RJT05bY291bnRdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29udHJhY3Rpb25DYW5vbmljYWwoKSB7CisgICAgICAgIFN0cmluZyBydWxlcyA9IENPTlRSQUNUSU9OUlVMRTsKKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sbGF0b3IgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3IocnVsZXMpOworICAgICAgICAgICAgY29sbGF0b3Iuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICAgICAgY29sbGF0b3Iuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igb3BlbmluZyBjb2xsYXRvciAiKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdGV4dCA9ICJ0ZXh0IjsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAicGF0dGVybiI7CisgICAgICAgIFN0cmluZ1NlYXJjaCBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgY29sbGF0b3IsIG51bGwpOworICAgICAgICAgICAgc3Ryc3JjaC5zZXRDYW5vbmljYWwodHJ1ZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igb3BlbmluZyBzdHJpbmcgc2VhcmNoIik7CisgICAgICAgIH0gICAKKyAgICAgICAgCisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChDT05UUkFDVElPTkNBTk9OSUNBTFtjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICB0ZXh0ID0gQ09OVFJBQ1RJT05DQU5PTklDQUxbY291bnRdLnRleHQ7CisgICAgICAgICAgICBwYXR0ZXJuID0gQ09OVFJBQ1RJT05DQU5PTklDQUxbY291bnRdLnBhdHRlcm47CisgICAgICAgICAgICBzdHJzcmNoLnNldFRhcmdldChuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCkpOworICAgICAgICAgICAgc3Ryc3JjaC5zZXRQYXR0ZXJuKHBhdHRlcm4pOworICAgICAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgQ09OVFJBQ1RJT05DQU5PTklDQUxbY291bnRdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0R2V0TWF0Y2goKSB7CisgICAgICAgIFNlYXJjaERhdGEgc2VhcmNoID0gTUFUQ0hbMF07CisgICAgICAgIFN0cmluZyB0ZXh0ID0gc2VhcmNoLnRleHQ7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gc2VhcmNoLnBhdHRlcm47CisgICAgCisgICAgICAgIFN0cmluZ1NlYXJjaCBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgbV9lbl91c18sIG51bGwpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIG9wZW5pbmcgc3RyaW5nIHNlYXJjaCAiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50ICAgICAgICAgICBjb3VudCAgICAgID0gMDsKKyAgICAgICAgaW50ICAgbWF0Y2hpbmRleCA9IHNlYXJjaC5vZmZzZXRbY291bnRdOworICAgICAgICBTdHJpbmcgbWF0Y2h0ZXh0OworICAgICAgICB3aGlsZSAobWF0Y2hpbmRleCA+PSAwKSB7CisgICAgICAgICAgICBpbnQgbWF0Y2hsZW5ndGggPSBzZWFyY2guc2l6ZVtjb3VudF07CisgICAgICAgICAgICBzdHJzcmNoLm5leHQoKTsKKyAgICAgICAgICAgIGlmIChtYXRjaGluZGV4ICE9IHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpIHx8IAorICAgICAgICAgICAgICAgIG1hdGNobGVuZ3RoICE9IHN0cnNyY2guZ2V0TWF0Y2hMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJUZXh0OiAiICsgc2VhcmNoLnRleHQpOworICAgICAgICAgICAgICAgIGVycmxuKCJQYXR0ZXJuOiAiICsgc3Ryc3JjaC5nZXRQYXR0ZXJuKCkpOworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBtYXRjaCBmb3VuZCBhdCAiICsgc3Ryc3JjaC5nZXRNYXRjaFN0YXJ0KCkgKyAiLCAiICsgc3Ryc3JjaC5nZXRNYXRjaExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgCisgICAgICAgICAgICBtYXRjaHRleHQgPSBzdHJzcmNoLmdldE1hdGNoZWRUZXh0KCk7CisgICAgICAgICAgICBpZiAobWF0Y2h0ZXh0Lmxlbmd0aCgpICE9IG1hdGNobGVuZ3RoKXsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgZ2V0dGluZyBtYXRjaCB0ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaGluZGV4ID0gc2VhcmNoLm9mZnNldFtjb3VudF07CisgICAgICAgIH0KKyAgICAgICAgc3Ryc3JjaC5uZXh0KCk7CisgICAgICAgIGlmIChzdHJzcmNoLmdldE1hdGNoU3RhcnQoKSAgIT0gU3RyaW5nU2VhcmNoLkRPTkUgfHwgCisgICAgICAgICAgICBzdHJzcmNoLmdldE1hdGNoTGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIGVuZCBvZiBtYXRjaCBub3QgZm91bmQiKTsKKyAgICAgICAgfQorICAgICAgICBtYXRjaHRleHQgPSBzdHJzcmNoLmdldE1hdGNoZWRUZXh0KCk7CisgICAgICAgIGlmIChtYXRjaHRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIGdldHRpbmcgbnVsbCBtYXRjaGVzIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEdldFNldEF0dHJpYnV0ZSgpIHsKKyAgICAgICAgU3RyaW5nICBwYXR0ZXJuID0gInBhdHRlcm4iOworICAgICAgICBTdHJpbmcgIHRleHQgPSAidGV4dCI7CisgICAgICAgIFN0cmluZ1NlYXJjaCAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdHJzcmNoID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIG1fZW5fdXNfLCBudWxsKTsgCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igb3BlbmluZyBzZWFyY2giKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoc3Ryc3JjaC5pc092ZXJsYXBwaW5nKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBkZWZhdWx0IG92ZXJsYXBpbmcgc2hvdWxkIGJlIGZhbHNlIik7CisgICAgICAgIH0KKyAgICAgICAgc3Ryc3JjaC5zZXRPdmVybGFwcGluZyh0cnVlKTsKKyAgICAgICAgaWYgKCFzdHJzcmNoLmlzT3ZlcmxhcHBpbmcoKSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIHNldHRpbmcgb3ZlcmxhcCB0cnVlIik7CisgICAgICAgIH0KKyAgICAgICAgc3Ryc3JjaC5zZXRPdmVybGFwcGluZyhmYWxzZSk7CisgICAgICAgIGlmIChzdHJzcmNoLmlzT3ZlcmxhcHBpbmcoKSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIHNldHRpbmcgb3ZlcmxhcCBmYWxzZSIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdHJzcmNoLnNldENhbm9uaWNhbCh0cnVlKTsKKyAgICAgICAgaWYgKCFzdHJzcmNoLmlzQ2Fub25pY2FsKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIGNhbm9uaWNhbCBtYXRjaCB0cnVlIik7CisgICAgICAgIH0KKyAgICAgICAgc3Ryc3JjaC5zZXRDYW5vbmljYWwoZmFsc2UpOworICAgICAgICBpZiAoc3Ryc3JjaC5pc0Nhbm9uaWNhbCgpKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBjYW5vbmljYWwgbWF0Y2ggZmFsc2UiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEdldFNldE9mZnNldCgpIHsKKyAgICAgICAgU3RyaW5nICBwYXR0ZXJuID0gIjEyMzQ1Njc4OTAxMjM0NTYiOworICAgICAgICBTdHJpbmcgIHRleHQgID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyIjsKKyAgICAgICAgU3RyaW5nU2VhcmNoICBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgbV9lbl91c18sIG51bGwpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIG9wZW5pbmcgc2VhcmNoIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyogdGVzdGluZyBvdXQgb2YgYm91bmRzIGVycm9yICovCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdHJzcmNoLnNldEluZGV4KC0xKTsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBleHBlY3Rpbmcgc2V0IG9mZnNldCBlcnJvciIpOworICAgICAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHt9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgc3Ryc3JjaC5zZXRJbmRleCgxMjgpOworICAgICAgICAgICAgZXJybG4oIkVycm9yIGV4cGVjdGluZyBzZXQgb2Zmc2V0IGVycm9yIik7CisgICAgICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkge30KKyAgICAgICAgCisgICAgICAgIGludCBpbmRleCAgID0gMDsKKyAgICAgICAgd2hpbGUgKEJBU0lDW2luZGV4XS50ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIFNlYXJjaERhdGEgIHNlYXJjaCAgICAgID0gQkFTSUNbaW5kZXggKytdOworICAgICAgICAKKyAgICAgICAgICAgIHRleHQgPXNlYXJjaC50ZXh0OworICAgICAgICAgICAgcGF0dGVybiA9IHNlYXJjaC5wYXR0ZXJuOworICAgICAgICAgICAgc3Ryc3JjaC5zZXRUYXJnZXQobmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRleHQpKTsKKyAgICAgICAgICAgIHN0cnNyY2guc2V0UGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAgICAgIHN0cnNyY2guZ2V0Q29sbGF0b3IoKS5zZXRTdHJlbmd0aChzZWFyY2guc3RyZW5ndGgpOworICAgICAgICAgICAgc3Ryc3JjaC5yZXNldCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAgaW50IG1hdGNoaW5kZXggID0gc2VhcmNoLm9mZnNldFtjb3VudF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChtYXRjaGluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgbWF0Y2hsZW5ndGggPSBzZWFyY2guc2l6ZVtjb3VudF07CisgICAgICAgICAgICAgICAgc3Ryc3JjaC5uZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5kZXggIT0gc3Ryc3JjaC5nZXRNYXRjaFN0YXJ0KCkgfHwgCisgICAgICAgICAgICAgICAgICAgIG1hdGNobGVuZ3RoICE9IHN0cnNyY2guZ2V0TWF0Y2hMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiVGV4dDogIiArIHRleHQpOworICAgICAgICAgICAgICAgICAgICBlcnJsbigiUGF0dGVybjogIiArIHN0cnNyY2guZ2V0UGF0dGVybigpKTsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIG1hdGNoIGZvdW5kIGF0ICIgKyBzdHJzcmNoLmdldE1hdGNoU3RhcnQoKSArICIsICIgKyBzdHJzcmNoLmdldE1hdGNoTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNoaW5kZXggPSBzZWFyY2gub2Zmc2V0W2NvdW50ICsgMV0gPT0gLTEgPyAtMSA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2gub2Zmc2V0W2NvdW50ICsgMl07CisgICAgICAgICAgICAgICAgaWYgKHNlYXJjaC5vZmZzZXRbY291bnQgKyAxXSAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBzdHJzcmNoLnNldEluZGV4KHNlYXJjaC5vZmZzZXRbY291bnQgKyAxXSArIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3Ryc3JjaC5nZXRJbmRleCgpICE9IHNlYXJjaC5vZmZzZXRbY291bnQgKyAxXSArIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIG9mZnNldFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY291bnQgKz0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cnNyY2gubmV4dCgpOworICAgICAgICAgICAgaWYgKHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpICE9IFN0cmluZ1NlYXJjaC5ET05FKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlRleHQ6ICIgKyB0ZXh0KTsKKyAgICAgICAgICAgICAgICBlcnJsbigiUGF0dGVybjogIiArIHN0cnNyY2guZ2V0UGF0dGVybigpKTsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgbWF0Y2ggZm91bmQgYXQgIiArIHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpICsgIiwgIiArIHN0cnNyY2guZ2V0TWF0Y2hMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0cnNyY2guZ2V0Q29sbGF0b3IoKS5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RHZXRTZXRPZmZzZXRDYW5vbmljYWwoKSB7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgIHRleHQgPSAidGV4dCI7CisgICAgICAgIFN0cmluZyAgcGF0dGVybiA9ICJwYXR0ZXJuIjsKKyAgICAgICAgU3RyaW5nU2VhcmNoICBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgbV9lbl91c18sIG51bGwpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWwgdG8gb3BlbiBTdHJpbmdTZWFyY2ghIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3Ryc3JjaC5zZXRDYW5vbmljYWwodHJ1ZSk7CisgICAgICAgIC8qIHRlc3Rpbmcgb3V0IG9mIGJvdW5kcyBlcnJvciAqLworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3Ryc3JjaC5zZXRJbmRleCgtMSk7CisgICAgICAgICAgICBlcnJsbigiRXJyb3IgZXhwZWN0aW5nIHNldCBvZmZzZXQgZXJyb3IiKTsKKyAgICAgICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7fQorICAgICAgICB0cnkgeworICAgICAgICAgICAgc3Ryc3JjaC5zZXRJbmRleCgxMjgpOworICAgICAgICAgICAgZXJybG4oIkVycm9yIGV4cGVjdGluZyBzZXQgb2Zmc2V0IGVycm9yIik7CisgICAgICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkge30KKyAgICAgICAgCisgICAgICAgIGludCAgIGluZGV4ICAgPSAwOworICAgICAgICB3aGlsZSAoQkFTSUNDQU5PTklDQUxbaW5kZXhdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgU2VhcmNoRGF0YSAgc2VhcmNoICAgICAgPSBCQVNJQ0NBTk9OSUNBTFtpbmRleCArK107CisgICAgICAgICAgICBpZiAoQkFTSUNDQU5PTklDQUxbaW5kZXhdLnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIGxhc3Qgb25lIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB0ZXh0ID0gc2VhcmNoLnRleHQ7CisgICAgICAgICAgICBwYXR0ZXJuID0gc2VhcmNoLnBhdHRlcm47CisgICAgICAgICAgICBzdHJzcmNoLnNldFRhcmdldChuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCkpOworICAgICAgICAgICAgc3Ryc3JjaC5zZXRQYXR0ZXJuKHBhdHRlcm4pOworICAgICAgICAgICAgaW50ICAgICAgICAgY291bnQgICAgICAgPSAwOworICAgICAgICAgICAgaW50IG1hdGNoaW5kZXggID0gc2VhcmNoLm9mZnNldFtjb3VudF07CisgICAgICAgICAgICB3aGlsZSAobWF0Y2hpbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgaW50IG1hdGNobGVuZ3RoID0gc2VhcmNoLnNpemVbY291bnRdOworICAgICAgICAgICAgICAgIHN0cnNyY2gubmV4dCgpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZGV4ICE9IHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpIHx8IAorICAgICAgICAgICAgICAgICAgICBtYXRjaGxlbmd0aCAhPSBzdHJzcmNoLmdldE1hdGNoTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIlRleHQ6ICIgKyB0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIlBhdHRlcm46ICIgKyBzdHJzcmNoLmdldFBhdHRlcm4oKSk7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBtYXRjaCBmb3VuZCBhdCAiICsgc3Ryc3JjaC5nZXRNYXRjaFN0YXJ0KCkgKyAiLCAiICsgc3Ryc3JjaC5nZXRNYXRjaExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaGluZGV4ID0gc2VhcmNoLm9mZnNldFtjb3VudCArIDFdID09IC0xID8gLTEgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoLm9mZnNldFtjb3VudCArIDJdOworICAgICAgICAgICAgICAgIGlmIChzZWFyY2gub2Zmc2V0W2NvdW50ICsgMV0gIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgc3Ryc3JjaC5zZXRJbmRleChzZWFyY2gub2Zmc2V0W2NvdW50ICsgMV0gKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnNyY2guZ2V0SW5kZXgoKSAhPSBzZWFyY2gub2Zmc2V0W2NvdW50ICsgMV0gKyAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBvZmZzZXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb3VudCArPSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Ryc3JjaC5uZXh0KCk7CisgICAgICAgICAgICBpZiAoc3Ryc3JjaC5nZXRNYXRjaFN0YXJ0KCkgIT0gU3RyaW5nU2VhcmNoLkRPTkUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiVGV4dDogIiArIHRleHQpOworICAgICAgICAgICAgICAgIGVycmxuKCJQYXR0ZXJuOiAlcyIgKyBzdHJzcmNoLmdldFBhdHRlcm4oKSk7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIG1hdGNoIGZvdW5kIGF0ICIgKyBzdHJzcmNoLmdldE1hdGNoU3RhcnQoKSArICIsICIgKyBzdHJzcmNoLmdldE1hdGNoTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdHJzcmNoLmdldENvbGxhdG9yKCkuc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0SWdub3JhYmxlKCkgeworICAgICAgICBTdHJpbmcgcnVsZXMgPSBJR05PUkFCTEVSVUxFOworICAgICAgICBpbnQgICAgICAgIGNvdW50ICA9IDA7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbGxhdG9yID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKHJ1bGVzKTsKKyAgICAgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKElHTk9SQUJMRVtjb3VudF0uc3RyZW5ndGgpOworICAgICAgICAgICAgY29sbGF0b3Iuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7ICAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBvcGVuaW5nIGNvbGxhdG9yICIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gInBhdHRlcm4iOworICAgICAgICBTdHJpbmcgdGV4dCA9ICJ0ZXh0IjsKKyAgICAgICAgU3RyaW5nU2VhcmNoIHN0cnNyY2ggPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3Ryc3JjaCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRleHQpLCBjb2xsYXRvciwgbnVsbCk7IAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIG9wZW5pbmcgc3RyaW5nIHNlYXJjaCAiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgd2hpbGUgKElHTk9SQUJMRVtjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICB0ZXh0ID0gSUdOT1JBQkxFW2NvdW50XS50ZXh0OworICAgICAgICAgICAgcGF0dGVybiA9IElHTk9SQUJMRVtjb3VudF0ucGF0dGVybjsKKyAgICAgICAgICAgIHN0cnNyY2guc2V0VGFyZ2V0KG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSk7CisgICAgICAgICAgICBzdHJzcmNoLnNldFBhdHRlcm4ocGF0dGVybik7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBJR05PUkFCTEVbY291bnRdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciAiICsgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0SW5pdGlhbGl6YXRpb24oKSB7CisgICAgICAgIFN0cmluZyAgcGF0dGVybjsKKyAgICAgICAgU3RyaW5nICB0ZXh0OworICAgICAgICBTdHJpbmcgIHRlbXAgPSAiYSI7CisgICAgICAgIFN0cmluZ1NlYXJjaCAgcmVzdWx0OworICAgIAorICAgICAgICAvKiBzaW1wbGUgdGVzdCBvbiB0aGUgcGF0dGVybiBjZSBjb25zdHJ1Y3Rpb24gKi8KKyAgICAgICAgcGF0dGVybiA9IHRlbXAgKyB0ZW1wOworICAgICAgICB0ZXh0ID0gdGVtcCArIHRlbXAgKyB0ZW1wOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIG1fZW5fdXNfLCBudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBvcGVuaW5nIHNlYXJjaCAiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyogdGVzdGluZyBpZiBhbiBleHRyZW1lbHkgbGFyZ2UgcGF0dGVybiB3aWxsIGZhaWwgdGhlIGluaXRpYWxpemF0aW9uICovCisgICAgICAgIHBhdHRlcm4gPSAiIjsKKyAgICAgICAgZm9yIChpbnQgY291bnQgPSAwOyBjb3VudCA8IDUxMjsgY291bnQgKyspIHsKKyAgICAgICAgICAgIHBhdHRlcm4gKz0gdGVtcDsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIG1fZW5fdXNfLCBudWxsKTsKKyAgICAgICAgICAgIGxvZ2xuKCJwYXR0ZXJuOiIgKyByZXN1bHQuZ2V0UGF0dGVybigpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBhbiBleHRyZW1lbHkgbGFyZ2UgcGF0dGVybiB3aWxsIGZhaWwgdGhlIGluaXRpYWxpemF0aW9uIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHQpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogc3RyaW5nIHNlYXJjaCBvYmplY3QgZXhwZWN0ZWQgdG8gbWF0Y2ggaXRzZWxmIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3ROb3JtQ2Fub25pY2FsKCkgeworICAgICAgICBtX2VuX3VzXy5zZXREZWNvbXBvc2l0aW9uKENvbGxhdG9yLkNBTk9OSUNBTF9ERUNPTVBPU0lUSU9OKTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKE5PUk1DQU5PTklDQUxbY291bnRdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCFhc3NlcnRDYW5vbmljYWxFcXVhbChOT1JNQ0FOT05JQ0FMW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgbV9lbl91c18uc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5OT19ERUNPTVBPU0lUSU9OKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdE5vcm1FeGFjdCgpIHsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgbV9lbl91c18uc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7CisgICAgICAgIHdoaWxlIChCQVNJQ1tjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsKEJBU0lDW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoTk9STUVYQUNUW2NvdW50XS50ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmICghYXNzZXJ0RXF1YWwoTk9STUVYQUNUW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgbV9lbl91c18uc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5OT19ERUNPTVBPU0lUSU9OKTsKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoTk9OTk9STUVYQUNUW2NvdW50XS50ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmICghYXNzZXJ0RXF1YWwoTk9OTk9STUVYQUNUW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdE9wZW5DbG9zZSgpIHsKKyAgICAgICAgU3RyaW5nU2VhcmNoICAgICAgICAgICAgcmVzdWx0OworICAgICAgICBCcmVha0l0ZXJhdG9yICAgICAgICAgICBicmVha2l0ZXIgPSBtX2VuX3dvcmRicmVha2VyXzsKKyAgICAgICAgU3RyaW5nICAgICAgICAgICBwYXR0ZXJuID0gIiI7CisgICAgICAgIFN0cmluZyAgICAgICAgICAgdGV4dCA9ICIiOworICAgICAgICBTdHJpbmcgICAgICAgICAgIHRlbXAgID0gImEiOworICAgICAgICBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciAgY2hhcml0ZXI9IG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KTsKKyAgICAKKyAgICAgICAgLyogdGVzdGluZyBudWxsIGFyZ3VtZW50cyAqLworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIG51bGwsIG51bGwpOworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBudWxsIGFyZ3VtZW50cyBzaG91bGQgcHJvZHVjZSBhbiBlcnJvciIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAKKyAgICAgICAgY2hhcml0ZXIuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgY2hhcml0ZXIsIG51bGwsIG51bGwpOworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBudWxsIGFyZ3VtZW50cyBzaG91bGQgcHJvZHVjZSBhbiBlcnJvciIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgCisgICAgICAgIHRleHQgID0gU3RyaW5nLnZhbHVlT2YoMHgxKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRleHQpLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogRW1wdHkgcGF0dGVybiBzaG91bGQgcHJvZHVjZSBhbiBlcnJvciIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgCisgICAgICAgIGNoYXJpdGVyLnNldFRleHQodGV4dCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIGNoYXJpdGVyLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogRW1wdHkgcGF0dGVybiBzaG91bGQgcHJvZHVjZSBhbiBlcnJvciIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAKKyAgICAgICAgdGV4dCA9ICIiOworICAgICAgICBwYXR0ZXJuID10ZW1wOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIG51bGwsIG51bGwpOworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBFbXB0eSB0ZXh0IHNob3VsZCBwcm9kdWNlIGFuIGVycm9yIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAKKyAgICAgICAgY2hhcml0ZXIuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgY2hhcml0ZXIsIG51bGwsIG51bGwpOworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBFbXB0eSB0ZXh0IHNob3VsZCBwcm9kdWNlIGFuIGVycm9yIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIAorICAgICAgICB0ZXh0ICs9IHRlbXA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcih0ZXh0KSwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICBlcnJsbigiRXJyb3I6IG51bGwgYXJndW1lbnRzIHNob3VsZCBwcm9kdWNlIGFuIGVycm9yIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIAorICAgICAgICBjaGFyaXRlci5zZXRUZXh0KHRleHQpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBjaGFyaXRlciwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICBlcnJsbigiRXJyb3I6IG51bGwgYXJndW1lbnRzIHNob3VsZCBwcm9kdWNlIGFuIGVycm9yIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRleHQpLCBtX2VuX3VzXywgbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3I6IG51bGwgYnJlYWsgaXRlcmF0b3IgaXMgdmFsaWQgZm9yIG9wZW5pbmcgc2VhcmNoIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgY2hhcml0ZXIsIG1fZW5fdXNfLCBudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogbnVsbCBicmVhayBpdGVyYXRvciBpcyB2YWxpZCBmb3Igb3BlbmluZyBzZWFyY2giKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRleHQpLCBMb2NhbGUuRU5HTElTSCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3I6IG51bGwgYnJlYWsgaXRlcmF0b3IgaXMgdmFsaWQgZm9yIG9wZW5pbmcgc2VhcmNoIik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgY2hhcml0ZXIsIExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogbnVsbCBicmVhayBpdGVyYXRvciBpcyB2YWxpZCBmb3Igb3BlbmluZyBzZWFyY2giKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGV4dCksIG1fZW5fdXNfLCBicmVha2l0ZXIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBCcmVhayBpdGVyYXRvciBpcyB2YWxpZCBmb3Igb3BlbmluZyBzZWFyY2giKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ1NlYXJjaChwYXR0ZXJuLCBjaGFyaXRlciwgbV9lbl91c18sIG51bGwpOworICAgICAgICAgICAgbG9nbG4oInBhdHRlcm46IiArIHJlc3VsdC5nZXRQYXR0ZXJuKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yOiBCcmVhayBpdGVyYXRvciBpcyB2YWxpZCBmb3Igb3BlbmluZyBzZWFyY2giKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RPdmVybGFwKCkgeworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoT1ZFUkxBUFtjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aEF0dHJpYnV0ZShPVkVSTEFQW2NvdW50XSwgZmFsc2UsIHRydWUpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGF0IG92ZXJsYXAgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0gICAgCisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKE5PTk9WRVJMQVBbY291bnRdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCFhc3NlcnRFcXVhbChOT05PVkVSTEFQW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgbm9uIG92ZXJsYXAgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoY291bnQgPCAxKSB7CisgICAgICAgICAgICBTZWFyY2hEYXRhIHNlYXJjaCA9IChPVkVSTEFQW2NvdW50XSk7ICAgICAKKyAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gc2VhcmNoLnRleHQ7CisgICAgICAgICAgICBTdHJpbmcgcGF0dGVybiA9IHNlYXJjaC5wYXR0ZXJuOworICAgIAorICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IgPSBnZXRDb2xsYXRvcihzZWFyY2guY29sbGF0b3IpOworICAgICAgICAgICAgU3RyaW5nU2VhcmNoIHN0cnNyY2ggPSBudWxsOyAgIAorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdHJzcmNoICA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHRleHQpLCBjb2xsYXRvciwgbnVsbCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJlcnJvciBvcGVuIFN0cmluZ1NlYXJjaCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Ryc3JjaC5zZXRPdmVybGFwcGluZyh0cnVlKTsKKyAgICAgICAgICAgIGlmICghc3Ryc3JjaC5pc092ZXJsYXBwaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBvdmVybGFwIG9wdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgc2VhcmNoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2VhcmNoID0gTk9OT1ZFUkxBUFtjb3VudF07CisgICAgICAgICAgICBzdHJzcmNoLnNldE92ZXJsYXBwaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChzdHJzcmNoLmlzT3ZlcmxhcHBpbmcoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIG92ZXJsYXAgb3B0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBzZWFyY2gpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGF0IHRlc3QgbnVtYmVyICIgKyBjb3VudCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0T3ZlcmxhcENhbm9uaWNhbCgpIHsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKE9WRVJMQVBDQU5PTklDQUxbY291bnRdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhBdHRyaWJ1dGUoT1ZFUkxBUENBTk9OSUNBTFtjb3VudF0sIHRydWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgb3ZlcmxhcCB0ZXN0IG51bWJlciAlZCIgKyBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfSAgICAKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoTk9OT1ZFUkxBUFtjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoIWFzc2VydENhbm9uaWNhbEVxdWFsKE5PTk9WRVJMQVBDQU5PTklDQUxbY291bnRdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCBub24gb3ZlcmxhcCB0ZXN0IG51bWJlciAlZCIgKyBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgIAorICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChjb3VudCA8IDEpIHsKKyAgICAgICAgICAgICAgICAgLyogVUNoYXIgICAgICAgdGVtcFsxMjhdOworICAgICAgICAgICAgY29uc3QgU2VhcmNoRGF0YSAqc2VhcmNoID0gJihPVkVSTEFQQ0FOT05JQ0FMW2NvdW50XSk7ICAgICAKKyAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsqLworICAgICAgICAgICAgU2VhcmNoRGF0YSBzZWFyY2ggPSBPVkVSTEFQQ0FOT05JQ0FMW2NvdW50XTsKKyAgICAgICAgCisgICAgICAgICAgICAvKnVfdW5lc2NhcGUoc2VhcmNoLnRleHQsIHRlbXAsIDEyOCk7CisgICAgICAgICAgICBVbmljb2RlU3RyaW5nIHRleHQ7CisgICAgICAgICAgICB0ZXh0LnNldFRvKHRlbXAsIHVfc3RybGVuKHRlbXApKTsKKyAgICAgICAgICAgIHVfdW5lc2NhcGUoc2VhcmNoLnBhdHRlcm4sIHRlbXAsIDEyOCk7CisgICAgICAgICAgICBVbmljb2RlU3RyaW5nIHBhdHRlcm47CisgICAgICAgICAgICBwYXR0ZXJuLnNldFRvKHRlbXAsIHVfc3RybGVuKHRlbXApKTsqLworICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IgPSBnZXRDb2xsYXRvcihzZWFyY2guY29sbGF0b3IpOworICAgICAgICAgICAgU3RyaW5nU2VhcmNoIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHNlYXJjaC5wYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3Ioc2VhcmNoLnRleHQpLCBjb2xsYXRvciwgbnVsbCk7CisgICAgICAgICAgICBzdHJzcmNoLnNldENhbm9uaWNhbCh0cnVlKTsKKyAgICAgICAgICAgIHN0cnNyY2guc2V0T3ZlcmxhcHBpbmcodHJ1ZSk7CisgICAgICAgICAgICBpZiAoc3Ryc3JjaC5pc092ZXJsYXBwaW5nKCkgIT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIG92ZXJsYXAgb3B0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBzZWFyY2gpKSB7CisgICAgICAgICAgICAgICAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VhcmNoID0gTk9OT1ZFUkxBUENBTk9OSUNBTFtjb3VudF07CisgICAgICAgICAgICBzdHJzcmNoLnNldE92ZXJsYXBwaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChzdHJzcmNoLmlzT3ZlcmxhcHBpbmcoKSAhPSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIG92ZXJsYXAgb3B0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBzZWFyY2gpKSB7CisgICAgICAgICAgICAgICAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGF0IHRlc3QgbnVtYmVyICVkIiArIGNvdW50KTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgCisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBudWxsOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RQYXR0ZXJuKCkgeyAgCisgICAgICAgIG1fZW5fdXNfLnNldFN0cmVuZ3RoKFBBVFRFUk5bMF0uc3RyZW5ndGgpOworICAgICAgICBTdHJpbmdTZWFyY2ggc3Ryc3JjaCA9IG5ldyBTdHJpbmdTZWFyY2goUEFUVEVSTlswXS5wYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoUEFUVEVSTlswXS50ZXh0KSwgbV9lbl91c18sIG51bGwpOworICAgICAgICAKKyAgICAgICAgLyppZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBvcGVuaW5nIHN0cmluZyBzZWFyY2ggJXMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKyAgICAgICAgICAgIG1fZW5fdXNfLnNldFN0cmVuZ3RoKGdldEVDb2xsYXRpb25TdHJlbmd0aChVQ09MX1RFUlRJQVJZKSk7CisgICAgICAgICAgICBpZiAoc3Ryc3JjaCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHN0cnNyY2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0qLworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnNyY2guZ2V0UGF0dGVybigpICE9IFBBVFRFUk5bMF0ucGF0dGVybikgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIHNldHRpbmcgcGF0dGVybiIpOworICAgICAgICB9CisgICAgICAgIGlmICghYXNzZXJ0RXF1YWxXaXRoU3RyaW5nU2VhcmNoKHN0cnNyY2gsIFBBVFRFUk5bMF0pKSB7CisgICAgICAgICAgICBtX2VuX3VzXy5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgICAgICBpZiAoc3Ryc3JjaCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgc3Ryc3JjaC5zZXRQYXR0ZXJuKFBBVFRFUk5bMV0ucGF0dGVybik7CisgICAgICAgIGlmIChQQVRURVJOWzFdLnBhdHRlcm4gIT0gc3Ryc3JjaC5nZXRQYXR0ZXJuKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIHBhdHRlcm4iKTsKKyAgICAgICAgICAgIG1fZW5fdXNfLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIGlmIChzdHJzcmNoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgCisgICAgICAgIGlmICghYXNzZXJ0RXF1YWxXaXRoU3RyaW5nU2VhcmNoKHN0cnNyY2gsIFBBVFRFUk5bMV0pKSB7CisgICAgICAgICAgICBtX2VuX3VzXy5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgICAgICBpZiAoc3Ryc3JjaCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgc3Ryc3JjaC5zZXRQYXR0ZXJuKFBBVFRFUk5bMF0ucGF0dGVybik7CisgICAgICAgIGlmIChQQVRURVJOWzBdLnBhdHRlcm4gIT0gc3Ryc3JjaC5nZXRQYXR0ZXJuKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIHBhdHRlcm4iKTsKKyAgICAgICAgICAgIG1fZW5fdXNfLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIGlmIChzdHJzcmNoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgc3Ryc3JjaC5yZXNldCgpOworICAgICAgIAorICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBQQVRURVJOWzBdKSkgeworICAgICAgICAgICAgbV9lbl91c18uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICAgICAgaWYgKHN0cnNyY2ggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN0cnNyY2ggPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8qIGVub3Jtb3VzIHBhdHRlcm4gc2l6ZSB0byBzZWUgaWYgdGhpcyBjcmFzaGVzICovCisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gIiI7CisgICAgICAgIGZvciAoaW50IHRlbXBsZW5ndGggPSAwOyB0ZW1wbGVuZ3RoICE9IDUxMjsgdGVtcGxlbmd0aCArKykgeworICAgICAgICAgICAgcGF0dGVybiArPSAweDYxOworICAgICAgICB9CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIHN0cnNyY2guc2V0UGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBwYXR0ZXJuIHdpdGggc2l6ZSA1MTIiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBtX2VuX3VzXy5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgIGlmIChzdHJzcmNoICE9IG51bGwpIHsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBudWxsOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RQYXR0ZXJuQ2Fub25pY2FsKCkgeworICAgICAgICAvL1N0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIHRleHQgPSBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoUEFUVEVSTkNBTk9OSUNBTFswXS50ZXh0KTsKKyAgICAgICAgbV9lbl91c18uc2V0U3RyZW5ndGgoUEFUVEVSTkNBTk9OSUNBTFswXS5zdHJlbmd0aCk7CisgICAgICAgIFN0cmluZ1NlYXJjaCBzdHJzcmNoID0gbmV3IFN0cmluZ1NlYXJjaChQQVRURVJOQ0FOT05JQ0FMWzBdLnBhdHRlcm4sIG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihQQVRURVJOQ0FOT05JQ0FMWzBdLnRleHQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW5fdXNfLCBudWxsKTsKKyAgICAgICAgc3Ryc3JjaC5zZXRDYW5vbmljYWwodHJ1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoUEFUVEVSTkNBTk9OSUNBTFswXS5wYXR0ZXJuICE9IHN0cnNyY2guZ2V0UGF0dGVybigpKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBwYXR0ZXJuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgUEFUVEVSTkNBTk9OSUNBTFswXSkpIHsKKyAgICAgICAgICAgIG1fZW5fdXNfLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIHN0cnNyY2guc2V0UGF0dGVybihQQVRURVJOQ0FOT05JQ0FMWzFdLnBhdHRlcm4pOworICAgICAgICBpZiAoUEFUVEVSTkNBTk9OSUNBTFsxXS5wYXR0ZXJuICE9IHN0cnNyY2guZ2V0UGF0dGVybigpKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyBwYXR0ZXJuIik7CisgICAgICAgICAgICBtX2VuX3VzXy5zZXRTdHJlbmd0aChDb2xsYXRvci5URVJUSUFSWSk7CisgICAgICAgICAgICBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgICAgIHN0cnNyY2guc2V0Q2Fub25pY2FsKHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgUEFUVEVSTkNBTk9OSUNBTFsxXSkpIHsKKyAgICAgICAgICAgIG1fZW5fdXNfLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3Ryc3JjaC5zZXRQYXR0ZXJuKFBBVFRFUk5DQU5PTklDQUxbMF0ucGF0dGVybik7CisgICAgICAgIGlmIChQQVRURVJOQ0FOT05JQ0FMWzBdLnBhdHRlcm4gIT0gc3Ryc3JjaC5nZXRQYXR0ZXJuKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIHBhdHRlcm4iKTsKKyAgICAgICAgICAgIG1fZW5fdXNfLnNldFN0cmVuZ3RoKENvbGxhdG9yLlRFUlRJQVJZKTsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgICAgIHN0cnNyY2guc2V0Q2Fub25pY2FsKHRydWUpOworICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBQQVRURVJOQ0FOT05JQ0FMWzBdKSkgeworICAgICAgICAgICAgbV9lbl91c18uc2V0U3RyZW5ndGgoQ29sbGF0b3IuVEVSVElBUlkpOworICAgICAgICAgICAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFJlc2V0KCkgeworICAgICAgICBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0ID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKCJmaXNoIGZpc2giKTsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAicyI7CisgICAgICAgIAorICAgICAgICBTdHJpbmdTZWFyY2ggIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHBhdHRlcm4sIHRleHQsIG1fZW5fdXNfLCBudWxsKTsgCisgICAgICAgIHN0cnNyY2guc2V0T3ZlcmxhcHBpbmcodHJ1ZSk7CisgICAgICAgIHN0cnNyY2guc2V0Q2Fub25pY2FsKHRydWUpOworICAgICAgICBzdHJzcmNoLnNldEluZGV4KDkpOworICAgICAgICBzdHJzcmNoLnJlc2V0KCk7CisgICAgICAgIGlmIChzdHJzcmNoLmlzQ2Fub25pY2FsKCkgfHwgc3Ryc3JjaC5pc092ZXJsYXBwaW5nKCkgfHwKKyAgICAgICAgICAgIHN0cnNyY2guZ2V0SW5kZXgoKSAhPSAwIHx8IHN0cnNyY2guZ2V0TWF0Y2hMZW5ndGgoKSAhPSAwIHx8CisgICAgICAgICAgICBzdHJzcmNoLmdldE1hdGNoU3RhcnQoKSAhPSBTZWFyY2hJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIHJlc2V0dGluZyBzdHJpbmcgc2VhcmNoIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0cnNyY2gucHJldmlvdXMoKTsKKyAgICAgICAgaWYgKHN0cnNyY2guZ2V0TWF0Y2hTdGFydCgpICE9IDcgfHwgc3Ryc3JjaC5nZXRNYXRjaExlbmd0aCgpICE9IDEpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciByZXNldHRpbmcgc3RyaW5nIHNlYXJjaFxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFNldE1hdGNoKCkgeworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoTUFUQ0hbY291bnRdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgU2VhcmNoRGF0YSAgICAgc2VhcmNoID0gTUFUQ0hbY291bnRdOworICAgICAgICAgICAgU3RyaW5nU2VhcmNoIHN0cnNyY2ggPSBuZXcgU3RyaW5nU2VhcmNoKHNlYXJjaC5wYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3Ioc2VhcmNoLnRleHQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VuX3VzXywgbnVsbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChzZWFyY2gub2Zmc2V0W3NpemVdICE9IC0xKSB7CisgICAgICAgICAgICAgICAgc2l6ZSArKzsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGlmIChzdHJzcmNoLmZpcnN0KCkgIT0gc2VhcmNoLm9mZnNldFswXSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBnZXR0aW5nIGZpcnN0IG1hdGNoIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3Ryc3JjaC5sYXN0KCkgIT0gc2VhcmNoLm9mZnNldFtzaXplIC0xXSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBnZXR0aW5nIGxhc3QgbWF0Y2giKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IHNpemUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggKyAyIDwgc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3Ryc3JjaC5mb2xsb3dpbmcoc2VhcmNoLm9mZnNldFtpbmRleCArIDJdIC0gMSkgIT0gc2VhcmNoLm9mZnNldFtpbmRleCArIDJdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgZ2V0dGluZyBmb2xsb3dpbmcgbWF0Y2ggYXQgaW5kZXggIiArIChzZWFyY2gub2Zmc2V0W2luZGV4ICsgMl0tMSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPCBzaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJzcmNoLnByZWNlZGluZyhzZWFyY2gub2Zmc2V0W2luZGV4ICsgMV0gKyBzZWFyY2guc2l6ZVtpbmRleCArIDFdICsgMSkgIT0gc2VhcmNoLm9mZnNldFtpbmRleCArIDFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgZ2V0dGluZyBwcmVjZWVkaW5nIG1hdGNoIGF0IGluZGV4ICIgKyAoc2VhcmNoLm9mZnNldFtpbmRleCArIDFdICsgMSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHJzcmNoLmZvbGxvd2luZyhzZWFyY2gudGV4dC5sZW5ndGgoKSkgIT0gU2VhcmNoSXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBleHBlY3Rpbmcgb3V0IG9mIGJvdW5kcyBtYXRjaCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cnNyY2gucHJlY2VkaW5nKDApICE9IFNlYXJjaEl0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgZXhwZWN0aW5nIG91dCBvZiBib3VuZHMgbWF0Y2giKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICAgICAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFN0cmVuZ3RoKCkgeyAgIAorICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoU1RSRU5HVEhbY291bnRdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGNvdW50ID09IDMpIGNvdW50ICsrOworICAgICAgICAgICAgaWYgKCFhc3NlcnRFcXVhbChTVFJFTkdUSFtjb3VudF0pKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGF0IHRlc3QgbnVtYmVyICIgKyBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0U3RyZW5ndGhDYW5vbmljYWwoKSB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChTVFJFTkdUSENBTk9OSUNBTFtjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gMykgY291bnQgKys7CisgICAgICAgICAgICBpZiAoIWFzc2VydENhbm9uaWNhbEVxdWFsKFNUUkVOR1RIQ0FOT05JQ0FMW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgdGVzdCBudW1iZXIiICsgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFN1cHBsZW1lbnRhcnkoKSB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChTVVBQTEVNRU5UQVJZW2NvdW50XS50ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmICghYXNzZXJ0RXF1YWwoU1VQUExFTUVOVEFSWVtjb3VudF0pKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIGF0IHRlc3QgbnVtYmVyIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RTdXBwbGVtZW50YXJ5Q2Fub25pY2FsKCkgeworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoU1VQUExFTUVOVEFSWUNBTk9OSUNBTFtjb3VudF0udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoIWFzc2VydENhbm9uaWNhbEVxdWFsKFNVUFBMRU1FTlRBUllDQU5PTklDQUxbY291bnRdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCB0ZXN0IG51bWJlciIgKyBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RUZXh0KCkgeworICAgICAgICBTZWFyY2hEYXRhIFRFWFRbXSA9IHsKKyAgICAgICAgICAgIG5ldyBTZWFyY2hEYXRhKCJ0aGUgZm94eSBicm93biBmb3giLCAiZm94IiwgbnVsbCwgQ29sbGF0b3IuVEVSVElBUlksIG51bGwsIG5ldyBpbnRbXSB7NCwgMTUsIC0xfSwgbmV3IGludFtdIHszLCAzfSksCisgICAgICAgICAgICBuZXcgU2VhcmNoRGF0YSgidGhlIHF1aWNrIGJyb3duIGZveCIsICJmb3giLCBudWxsLCBDb2xsYXRvci5URVJUSUFSWSwgbnVsbCwgbmV3IGludFtdIHsxNiwgLTF9LCBuZXcgaW50W10gezN9KSwKKyAgICAgICAgICAgIG5ldyBTZWFyY2hEYXRhKG51bGwsIG51bGwsIG51bGwsIENvbGxhdG9yLlRFUlRJQVJZLCBudWxsLCBuZXcgaW50W10gey0xfSwgbmV3IGludFtdezB9KQorICAgICAgICB9OworICAgICAgICBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciB0ID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKFRFWFRbMF0udGV4dCk7CisgICAgICAgIFN0cmluZ1NlYXJjaCBzdHJzcmNoID0gbmV3IFN0cmluZ1NlYXJjaChURVhUWzBdLnBhdHRlcm4sIHQsIG1fZW5fdXNfLCBudWxsKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdC5lcXVhbHMoc3Ryc3JjaC5nZXRUYXJnZXQoKSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIHRleHQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBURVhUWzBdKSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIGF0IGFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIHQgPSBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoVEVYVFsxXS50ZXh0KTsKKyAgICAgICAgc3Ryc3JjaC5zZXRUYXJnZXQodCk7CisgICAgICAgIGlmICghdC5lcXVhbHMoc3Ryc3JjaC5nZXRUYXJnZXQoKSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIHRleHQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgVEVYVFsxXSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCBhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2giKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0VGV4dENhbm9uaWNhbCgpIHsKKyAgICAgICAgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgdCA9IG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihURVhUQ0FOT05JQ0FMWzBdLnRleHQpOworICAgICAgICBTdHJpbmdTZWFyY2ggc3Ryc3JjaCA9IG5ldyBTdHJpbmdTZWFyY2goVEVYVENBTk9OSUNBTFswXS5wYXR0ZXJuLCB0LCBtX2VuX3VzXywgbnVsbCk7CisgICAgICAgIHN0cnNyY2guc2V0Q2Fub25pY2FsKHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKCF0LmVxdWFscyhzdHJzcmNoLmdldFRhcmdldCgpKSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIHNldHRpbmcgdGV4dCIpOworICAgICAgICB9CisgICAgICAgIGlmICghYXNzZXJ0RXF1YWxXaXRoU3RyaW5nU2VhcmNoKHN0cnNyY2gsIFRFWFRDQU5PTklDQUxbMF0pKSB7CisgICAgICAgICAgICBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHQgPSBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoVEVYVENBTk9OSUNBTFsxXS50ZXh0KTsKKyAgICAgICAgc3Ryc3JjaC5zZXRUYXJnZXQodCk7CisgICAgICAgIGlmICghdC5lcXVhbHMoc3Ryc3JjaC5nZXRUYXJnZXQoKSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBzZXR0aW5nIHRleHQiKTsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWFzc2VydEVxdWFsV2l0aFN0cmluZ1NlYXJjaChzdHJzcmNoLCBURVhUQ0FOT05JQ0FMWzFdKSkgeworICAgICAgICAgICAgc3Ryc3JjaCA9IG51bGw7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0ID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKFRFWFRDQU5PTklDQUxbMF0udGV4dCk7CisgICAgICAgIHN0cnNyY2guc2V0VGFyZ2V0KHQpOworICAgICAgICBpZiAoIXQuZXF1YWxzKHN0cnNyY2guZ2V0VGFyZ2V0KCkpKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3Igc2V0dGluZyB0ZXh0Iik7CisgICAgICAgICAgICBzdHJzcmNoID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2goc3Ryc3JjaCwgVEVYVENBTk9OSUNBTFswXSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvciBhdCBhc3NlcnRFcXVhbFdpdGhTdHJpbmdTZWFyY2giKTsKKyAgICAgICAgICAgIHN0cnNyY2ggPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9ICAgIAorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0VmFyaWFibGUoKSB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIG1fZW5fdXNfLnNldEFsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZCh0cnVlKTsKKyAgICAgICAgd2hpbGUgKFZBUklBQkxFW2NvdW50XS50ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIGxvZ2xuKCJ2YXJpYWJsZSIgKyBjb3VudCk7CisgICAgICAgICAgICBpZiAoIWFzc2VydEVxdWFsKFZBUklBQkxFW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisgICAgICAgIG1fZW5fdXNfLnNldEFsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZChmYWxzZSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RWYXJpYWJsZUNhbm9uaWNhbCgpIHsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgbV9lbl91c18uc2V0QWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkKHRydWUpOworICAgICAgICB3aGlsZSAoVkFSSUFCTEVbY291bnRdLnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gbG9nbG4oInZhcmlhYmxlICIgKyBjb3VudCk7CisgICAgICAgICAgICBpZiAoIWFzc2VydENhbm9uaWNhbEVxdWFsKFZBUklBQkxFW2NvdW50XSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgYXQgdGVzdCBudW1iZXIgIiArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisgICAgICAgIG1fZW5fdXNfLnNldEFsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZChmYWxzZSk7CisgICAgfQorICAgIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9zZWFyY2gvcGFja2FnZS5odG1sIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3NlYXJjaC9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZhZDJlMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9zZWFyY2gvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvc2VhcmNoL3BhY2thZ2UuaHRtbCx2ICQKKyAgJFJldmlzaW9uOiAxLjEgJAorICAkRGF0ZTogMjAwMC8wMy8xNSAyMTozNTo1MCAkCistLT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIj4KK1Rlc3RzIGZvciB0aGUgaW50ZXJuYXRpb25hbCBzZWFyY2ggY2xhc3Nlcy4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvc2hhcGluZy9BcmFiaWNTaGFwaW5nUmVnVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3NoYXBpbmcvQXJhYmljU2hhcGluZ1JlZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWE2NjUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3NoYXBpbmcvQXJhYmljU2hhcGluZ1JlZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDQxNSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBDb3B5cmlnaHQgKEMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3Quc2hhcGluZzsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQXJhYmljU2hhcGluZzsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkFyYWJpY1NoYXBpbmdFeGNlcHRpb247CisKKy8qKgorICogUmVncmVzc2lvbiB0ZXN0IGZvciBBcmFiaWMgc2hhcGluZy4KKyAqLworcHVibGljIGNsYXNzIEFyYWJpY1NoYXBpbmdSZWdUZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworCisgICAgLyogY29uc3RhbnRzIGNvcGllZCBmcm9tIEFyYWJpY1NoYXBpbmcgZm9yIGNvbnZlbmllbmNlICovCisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRU5HVEhfR1JPV19TSFJJTksgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFTkdUSF9GSVhFRF9TUEFDRVNfTkVBUiA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9FTkQgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFTkdUSF9GSVhFRF9TUEFDRVNfQVRfQkVHSU5OSU5HID0gMzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFRfRElSRUNUSU9OX0xPR0lDQUwgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFRfRElSRUNUSU9OX1ZJU1VBTF9MVFIgPSA0OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVUVEVSU19OT09QID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVRURVJTX1NIQVBFID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVRURVJTX1NIQVBFX1RBU0hLRUVMX0lTT0xBVEVEID0gMHgxODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVRURVJTX1VOU0hBUEUgPSAweDEwOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRTX05PT1AgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJR0lUU19FTjJBTiA9IDB4MjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRTX0FOMkVOID0gMHg0MDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESUdJVFNfRU4yQU5fSU5JVF9MUiA9IDB4NjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRTX0VOMkFOX0lOSVRfQUwgPSAweDgwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESUdJVFNfUkVTRVJWRUQgPSAweGEwOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRfVFlQRV9BTiA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRfVFlQRV9BTl9FWFRFTkRFRCA9IDB4MTAwOworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0RGF0YSB7CisgICAgICAgIHB1YmxpYyBpbnQgdHlwZTsKKyAgICAgICAgcHVibGljIFN0cmluZyBzb3VyY2U7CisgICAgICAgIHB1YmxpYyBpbnQgZmxhZ3M7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgcmVzdWx0OworICAgICAgICBwdWJsaWMgaW50IGxlbmd0aDsKKyAgICAgICAgcHVibGljIENsYXNzIGVycm9yOworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQU5EQVJEID0gMDsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFRkxJR0hUID0gMTsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSAyOworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgVGVzdERhdGEgc3RhbmRhcmQoU3RyaW5nIHNvdXJjZSwgaW50IGZsYWdzLCBTdHJpbmcgcmVzdWx0KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFRlc3REYXRhKFNUQU5EQVJELCBzb3VyY2UsIGZsYWdzLCByZXN1bHQsIDAsIG51bGwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgc3RhdGljIFRlc3REYXRhIHByZWZsaWdodChTdHJpbmcgc291cmNlLCBpbnQgZmxhZ3MsIGludCBsZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgVGVzdERhdGEoUFJFRkxJR0hULCBzb3VyY2UsIGZsYWdzLCBudWxsLCBsZW5ndGgsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBUZXN0RGF0YSBlcnJvcihTdHJpbmcgc291cmNlLCBpbnQgZmxhZ3MsIENsYXNzIGVycm9yKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFRlc3REYXRhKEVSUk9SLCBzb3VyY2UsIGZsYWdzLCBudWxsLCAwLCBlcnJvcik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIFRlc3REYXRhKGludCB0eXBlLCBTdHJpbmcgc291cmNlLCBpbnQgZmxhZ3MsIFN0cmluZyByZXN1bHQsIGludCBsZW5ndGgsIENsYXNzIGVycm9yKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICB0aGlzLmZsYWdzID0gZmxhZ3M7CisgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoOworICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gdHlwZW5hbWVzID0geyAic3RhbmRhcmQiLCAicHJlZmxpZ2h0IiwgImVycm9yIiB9OworCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIltcbiIpOworICAgICAgICAgICAgYnVmLmFwcGVuZCh0eXBlbmFtZXNbdHlwZV0pOworICAgICAgICAgICAgYnVmLmFwcGVuZCgiLFxuIik7CisgICAgICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJudWxsIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJyInKTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGVzY2FwZWRTdHJpbmcoc291cmNlKSk7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgnIicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmLmFwcGVuZCgiLFxuIik7CisgICAgICAgICAgICBidWYuYXBwZW5kKEludGVnZXIudG9IZXhTdHJpbmcoZmxhZ3MpKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIixcbiIpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgibnVsbCIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCciJyk7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChlc2NhcGVkU3RyaW5nKHJlc3VsdCkpOworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJyInKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIixcbiIpOworICAgICAgICAgICAgYnVmLmFwcGVuZChsZW5ndGgpOworICAgICAgICAgICAgYnVmLmFwcGVuZCgiLFxuIik7CisgICAgICAgICAgICBidWYuYXBwZW5kKGVycm9yKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJ10nKTsKKyAgICAgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBsYW1BbGVmU3BlY2lhbFZMVFIgPQorICAgICAgICAiXHUwMDIwXHUwNjQ2XHUwNjIyXHUwNjQ0XHUwNjI3XHUwMDIwIiArCisgICAgIAkiXHUwNjQ2XHUwNjIzXHUwNjRFXHUwNjQ0XHUwNjI3XHUwMDIwIiArCisgICAgIAkiXHUwNjQ2XHUwNjI3XHUwNjcwXHUwNjQ0XHUwNjI3XHUwMDIwIiArCisgICAgIAkiXHUwNjQ2XHUwNjIyXHUwNjUzXHUwNjQ0XHUwNjI3XHUwMDIwIiArCisgICAgIAkiXHUwNjQ2XHUwNjI1XHUwNjU1XHUwNjQ0XHUwNjI3XHUwMDIwIiArCisgICAgIAkiXHUwNjQ2XHUwNjIyXHUwNjU0XHUwNjQ0XHUwNjI3XHUwMDIwIiArCisgICAgIAkiXHVGRUZDXHUwNjM5IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyB0YXNoa2VlbFNwZWNpYWxWTFRSID0gCisgICAgICAgICJcdTA2NEFcdTA2MjhcdTA2MzFcdTA2MzlcdTAwMjAiICsKKyAgICAgICAgIlx1MDY0QVx1MDYyOFx1MDY1MVx1MDYzMVx1MDY0RVx1MDYzOVx1MDAyMCIgKworICAgICAgICAiXHUwNjRDXHUwNjRBXHUwNjI4XHUwNjMxXHUwNjRGXHUwNjM5XHUwMDIwIiArCisgICAgICAgICJcdTA2MjhcdTA2NzBcdTA2MzFcdTA2NzBcdTA2MzlcdTAwMjAiICsKKyAgICAgICAgIlx1MDYyOFx1MDY1M1x1MDYzMVx1MDY1M1x1MDYzOVx1MDAyMCIgKworICAgICAgICAiXHUwNjI4XHUwNjU0XHUwNjMxXHUwNjU0XHUwNjM5XHUwMDIwIiArCisgICAgICAgICJcdTA2MjhcdTA2NTVcdTA2MzFcdTA2NTVcdTA2MzlcdTAwMjAiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGxvZ2ljYWxVbnNoYXBlID0gCisgICAgICAgICJcdTAwMjBcdTAwMjBcdTAwMjBcdUZFOERcdUZFRjVcdTAwMjBcdUZFRTVcdTAwMjBcdUZFOERcdUZFRjdcdTAwMjAiICsKKyAgICAgICAgIlx1RkVEN1x1RkVGQ1x1MDAyMFx1RkVFMVx1MDAyMFx1RkU4RFx1RkVERlx1RkVDQ1x1RkVBRVx1RkU5MVx1RkVGNCIgKworICAgICAgICAiXHVGRTk0XHUwMDIwXHVGRThEXHVGRURGXHVGRUE0XHVGRUFFXHVGRTkzXHUwMDIwXHUwMDIwXHUwMDIwXHUwMDIwIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBudW1Tb3VyY2UgPQorICAgICAgICAiXHUwMDMxIiArICAvKiBlbjoxICovCisgICAgICAgICJcdTA2MjciICsgIC8qIGFyYWJpYzphbGVmICovCisgICAgICAgICJcdTAwMzIiICsgIC8qIGVuOjIgKi8KKyAgICAgICAgIlx1MDZmMyIgKyAgLyogYW46MyAqLworICAgICAgICAiXHUwMDYxIiArICAvKiBsYXRpbjphICovCisgICAgICAgICJcdTAwMzQiOyAgIC8qIGVuOjQgKi8KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRlc3REYXRhW10gdGVzdHMgPSB7CisgICAgICAgIC8qIGxhbSBhbGVmIHNwZWNpYWwgdmlzdWFsIGx0ciAqLworICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChsYW1BbGVmU3BlY2lhbFZMVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfU0hBUEUgfCBURVhUX0RJUkVDVElPTl9WSVNVQUxfTFRSIHwgTEVOR1RIX0ZJWEVEX1NQQUNFU19ORUFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDIwXHVmZWU1XHUwMDIwXHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZTVcdTAwMjBcdWZlNzZcdWZlZjdcdWZlOGRcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmVlNVx1MDAyMFx1MDY3MFx1ZmVmYlx1ZmU4ZFx1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZWU1XHUwMDIwXHUwNjUzXHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZTVcdTAwMjBcdTA2NTVcdWZlZjlcdWZlOGRcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmVlNVx1MDAyMFx1MDY1NFx1ZmVmNVx1ZmU4ZFx1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZWZjXHVmZWNiIiksCisgICAgICAgIFRlc3REYXRhLnN0YW5kYXJkKGxhbUFsZWZTcGVjaWFsVkxUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTEVUVEVSU19TSEFQRSB8IFRFWFRfRElSRUNUSU9OX1ZJU1VBTF9MVFIgfCBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1ZmVlNVx1ZmVmNVx1ZmU4ZFx1MDAyMFx1ZmVlNSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZTc2XHVmZWY3XHVmZThkXHUwMDIwXHVmZWU1XHUwNjcwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmJcdWZlOGRcdTAwMjBcdWZlZTVcdTA2NTNcdWZlZjUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4ZFx1MDAyMFx1ZmVlNVx1MDY1NVx1ZmVmOVx1ZmU4ZCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDIwXHVmZWU1XHUwNjU0XHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmNcdWZlY2JcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1MDAyMCIpLAorICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChsYW1BbGVmU3BlY2lhbFZMVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfU0hBUEUgfCBURVhUX0RJUkVDVElPTl9WSVNVQUxfTFRSIHwgTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9CRUdJTk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1ZmVlNVx1ZmVmNVx1ZmU4ZFx1MDAyMFx1ZmVlNSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZTc2XHVmZWY3XHVmZThkXHUwMDIwXHVmZWU1XHUwNjcwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmJcdWZlOGRcdTAwMjBcdWZlZTVcdTA2NTNcdWZlZjUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4ZFx1MDAyMFx1ZmVlNVx1MDY1NVx1ZmVmOVx1ZmU4ZCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDIwXHVmZWU1XHUwNjU0XHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmNcdWZlY2IiKSwKKyAgICAgICAgVGVzdERhdGEuc3RhbmRhcmQobGFtQWxlZlNwZWNpYWxWTFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMRVRURVJTX1NIQVBFIHwgVEVYVF9ESVJFQ1RJT05fVklTVUFMX0xUUiB8IExFTkdUSF9HUk9XX1NIUklOSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1ZmVlNVx1ZmVmNVx1ZmU4ZFx1MDAyMFx1ZmVlNSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZTc2XHVmZWY3XHVmZThkXHUwMDIwXHVmZWU1XHUwNjcwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmJcdWZlOGRcdTAwMjBcdWZlZTVcdTA2NTNcdWZlZjUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4ZFx1MDAyMFx1ZmVlNVx1MDY1NVx1ZmVmOVx1ZmU4ZCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDIwXHVmZWU1XHUwNjU0XHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmNcdWZlY2IiKSwKKworICAgICAgICAvKiBUQVNIS0VFTCAqLworICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChsYW1BbGVmU3BlY2lhbFZMVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfU0hBUEVfVEFTSEtFRUxfSVNPTEFURUQgfCBURVhUX0RJUkVDVElPTl9WSVNVQUxfTFRSIHwgTEVOR1RIX0ZJWEVEX1NQQUNFU19ORUFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDIwXHVmZWU1XHUwMDIwXHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZTVcdTAwMjBcdWZlNzZcdWZlZjdcdWZlOGRcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmVlNVx1MDAyMFx1MDY3MFx1ZmVmYlx1ZmU4ZFx1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZWU1XHUwMDIwXHUwNjUzXHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZTVcdTAwMjBcdTA2NTVcdWZlZjlcdWZlOGRcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmVlNVx1MDAyMFx1MDY1NFx1ZmVmNVx1ZmU4ZFx1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZWZjXHVmZWNiIiksCisgICAgICAgIFRlc3REYXRhLnN0YW5kYXJkKGxhbUFsZWZTcGVjaWFsVkxUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTEVUVEVSU19TSEFQRV9UQVNIS0VFTF9JU09MQVRFRCB8IFRFWFRfRElSRUNUSU9OX1ZJU1VBTF9MVFIgfCBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1ZmVlNVx1ZmVmNVx1ZmU4ZFx1MDAyMFx1ZmVlNSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZTc2XHVmZWY3XHVmZThkXHUwMDIwXHVmZWU1XHUwNjcwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmJcdWZlOGRcdTAwMjBcdWZlZTVcdTA2NTNcdWZlZjUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4ZFx1MDAyMFx1ZmVlNVx1MDY1NVx1ZmVmOVx1ZmU4ZCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDIwXHVmZWU1XHUwNjU0XHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmNcdWZlY2JcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1MDAyMCIpLAorICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChsYW1BbGVmU3BlY2lhbFZMVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfU0hBUEVfVEFTSEtFRUxfSVNPTEFURUQgfCBURVhUX0RJUkVDVElPTl9WSVNVQUxfTFRSIHwgTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9CRUdJTk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1ZmVlNVx1ZmVmNVx1ZmU4ZFx1MDAyMFx1ZmVlNSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZTc2XHVmZWY3XHVmZThkXHUwMDIwXHVmZWU1XHUwNjcwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmJcdWZlOGRcdTAwMjBcdWZlZTVcdTA2NTNcdWZlZjUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4ZFx1MDAyMFx1ZmVlNVx1MDY1NVx1ZmVmOVx1ZmU4ZCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDIwXHVmZWU1XHUwNjU0XHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmNcdWZlY2IiKSwKKyAgICAgICAgVGVzdERhdGEuc3RhbmRhcmQobGFtQWxlZlNwZWNpYWxWTFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMRVRURVJTX1NIQVBFX1RBU0hLRUVMX0lTT0xBVEVEIHwgVEVYVF9ESVJFQ1RJT05fVklTVUFMX0xUUiB8IExFTkdUSF9HUk9XX1NIUklOSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1ZmVlNVx1ZmVmNVx1ZmU4ZFx1MDAyMFx1ZmVlNSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZTc2XHVmZWY3XHVmZThkXHUwMDIwXHVmZWU1XHUwNjcwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmJcdWZlOGRcdTAwMjBcdWZlZTVcdTA2NTNcdWZlZjUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4ZFx1MDAyMFx1ZmVlNVx1MDY1NVx1ZmVmOVx1ZmU4ZCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDIwXHVmZWU1XHUwNjU0XHVmZWY1XHVmZThkXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZmNcdWZlY2IiKSwKKworICAgICAgICAvKiB0YXNoa2VlbCBzcGVjaWFsIHZpc3VhbCBsdHIgKi8KKyAgICAgICAgVGVzdERhdGEuc3RhbmRhcmQodGFzaGtlZWxTcGVjaWFsVkxUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTEVUVEVSU19TSEFQRSB8IFRFWFRfRElSRUNUSU9OX1ZJU1VBTF9MVFIgfCBMRU5HVEhfRklYRURfU1BBQ0VTX05FQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlZjJcdWZlOTFcdWZlYWVcdWZlY2JcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmVmMlx1ZmU5MVx1ZmU3Y1x1ZmVhZVx1ZmU3N1x1ZmVjYlx1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZTcyXHVmZWYyXHVmZTkxXHVmZWFlXHVmZTc5XHVmZWNiXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlOGZcdTA2NzBcdWZlYWVcdTA2NzBcdWZlY2JcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4Zlx1MDY1M1x1ZmVhZVx1MDY1M1x1ZmVjYlx1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZThmXHUwNjU0XHVmZWFlXHUwNjU0XHVmZWNiXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlOGZcdTA2NTVcdWZlYWVcdTA2NTVcdWZlY2JcdTAwMjAiKSwKKworICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZCh0YXNoa2VlbFNwZWNpYWxWTFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMRVRURVJTX1NIQVBFX1RBU0hLRUVMX0lTT0xBVEVEIHwgVEVYVF9ESVJFQ1RJT05fVklTVUFMX0xUUiB8IExFTkdUSF9GSVhFRF9TUEFDRVNfTkVBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmVmMlx1ZmU5MVx1ZmVhZVx1ZmVjYlx1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZWYyXHVmZTkxXHVmZTdjXHVmZWFlXHVmZTc2XHVmZWNiXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlNzJcdWZlZjJcdWZlOTFcdWZlYWVcdWZlNzhcdWZlY2JcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4Zlx1MDY3MFx1ZmVhZVx1MDY3MFx1ZmVjYlx1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVmZThmXHUwNjUzXHVmZWFlXHUwNjUzXHVmZWNiXHUwMDIwIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZlOGZcdTA2NTRcdWZlYWVcdTA2NTRcdWZlY2JcdTAwMjAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1ZmU4Zlx1MDY1NVx1ZmVhZVx1MDY1NVx1ZmVjYlx1MDAyMCIpLAorCisgICAgICAgIC8qIGxvZ2ljYWwgdW5zaGFwZSAqLworICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChsb2dpY2FsVW5zaGFwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTEVUVEVSU19VTlNIQVBFIHwgVEVYVF9ESVJFQ1RJT05fTE9HSUNBTCB8IExFTkdUSF9GSVhFRF9TUEFDRVNfTkVBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1MDAyMFx1MDAyMFx1MDYyN1x1MDY0NFx1MDYyMlx1MDY0Nlx1MDAyMFx1MDYyN1x1MDY0NFx1MDYyM1x1MDY0Mlx1MDY0NFx1MDYyNyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwNjQ1XHUwMDIwXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjMxXHUwNjI4XHUwNjRhXHUwNjI5XHUwMDIwXHUwNjI3XHUwNjQ0XHUwNjJkXHUwNjMxIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTA2MjlcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjAiKSwKKyAgICAgICAgVGVzdERhdGEuc3RhbmRhcmQobG9naWNhbFVuc2hhcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfVU5TSEFQRSB8IFRFWFRfRElSRUNUSU9OX0xPR0lDQUwgfCBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAyMFx1MDAyMFx1MDAyMFx1MDYyN1x1MDY0NFx1MDYyMlx1MDAyMFx1MDY0Nlx1MDAyMFx1MDYyN1x1MDY0NFx1MDYyM1x1MDAyMFx1MDY0MiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwNjQ0XHUwNjI3XHUwMDIwXHUwNjQ1XHUwMDIwXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjMxXHUwNjI4XHUwNjRhXHUwNjI5XHUwMDIwXHUwNjI3IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTA2NDRcdTA2MmRcdTA2MzFcdTA2MjlcdTAwMjAiKSwKKyAgICAgICAgVGVzdERhdGEuc3RhbmRhcmQobG9naWNhbFVuc2hhcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfVU5TSEFQRSB8IFRFWFRfRElSRUNUSU9OX0xPR0lDQUwgfCBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0JFR0lOTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDYyN1x1MDY0NFx1MDYyMlx1MDAyMFx1MDY0Nlx1MDAyMFx1MDYyN1x1MDY0NFx1MDYyM1x1MDAyMFx1MDY0Mlx1MDY0NFx1MDYyN1x1MDAyMCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwNjQ1XHUwMDIwXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjMxXHUwNjI4XHUwNjRhXHUwNjI5XHUwMDIwXHUwNjI3XHUwNjQ0XHUwNjJkXHUwNjMxIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTA2MjlcdTAwMjBcdTAwMjBcdTAwMjBcdTAwMjAiKSwKKyAgICAgICAgVGVzdERhdGEuc3RhbmRhcmQobG9naWNhbFVuc2hhcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfVU5TSEFQRSB8IFRFWFRfRElSRUNUSU9OX0xPR0lDQUwgfCBMRU5HVEhfR1JPV19TSFJJTkssCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTAwMjBcdTAwMjBcdTAwMjBcdTA2MjdcdTA2NDRcdTA2MjJcdTAwMjBcdTA2NDZcdTAwMjBcdTA2MjdcdTA2NDRcdTA2MjNcdTAwMjBcdTA2NDIiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDY0NFx1MDYyN1x1MDAyMFx1MDY0NVx1MDAyMFx1MDYyN1x1MDY0NFx1MDYzOVx1MDYzMVx1MDYyOFx1MDY0YVx1MDYyOVx1MDAyMFx1MDYyNyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwNjQ0XHUwNjJkXHUwNjMxXHUwNjI5XHUwMDIwXHUwMDIwXHUwMDIwXHUwMDIwIiksCisKKyAgICAgICAgLyogbnVtYmVycyAqLworICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChudW1Tb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBESUdJVFNfRU4yQU4gfCBESUdJVF9UWVBFX0FOLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDY2MVx1MDYyN1x1MDY2Mlx1MDZmM1x1MDA2MVx1MDY2NCIpLAorICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChudW1Tb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBESUdJVFNfQU4yRU4gfCBESUdJVF9UWVBFX0FOX0VYVEVOREVELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDAzMVx1MDYyN1x1MDAzMlx1MDAzM1x1MDA2MVx1MDAzNCIpLAorICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChudW1Tb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBESUdJVFNfRU4yQU5fSU5JVF9MUiB8IERJR0lUX1RZUEVfQU4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwMDMxXHUwNjI3XHUwNjYyXHUwNmYzXHUwMDYxXHUwMDM0IiksCisgICAgICAgIFRlc3REYXRhLnN0YW5kYXJkKG51bVNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIERJR0lUU19FTjJBTl9JTklUX0FMIHwgRElHSVRfVFlQRV9BTl9FWFRFTkRFRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTA2ZjFcdTA2MjdcdTA2ZjJcdTA2ZjNcdTAwNjFcdTAwMzQiKSwKKyAgICAgICAgVGVzdERhdGEuc3RhbmRhcmQobnVtU291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRElHSVRTX0VOMkFOX0lOSVRfTFIgfCBESUdJVF9UWVBFX0FOIHwgVEVYVF9ESVJFQ1RJT05fVklTVUFMX0xUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDY2MVx1MDYyN1x1MDAzMlx1MDZmM1x1MDA2MVx1MDAzNCIpLAorICAgICAgICBUZXN0RGF0YS5zdGFuZGFyZChudW1Tb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBESUdJVFNfRU4yQU5fSU5JVF9BTCB8IERJR0lUX1RZUEVfQU5fRVhURU5ERUQgfCBURVhUX0RJUkVDVElPTl9WSVNVQUxfTFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUwNmYxXHUwNjI3XHUwMDMyXHUwNmYzXHUwMDYxXHUwNmY0IiksCisKKyAgICAgICAgLyogbm8tb3AgKi8KKyAgICAgICAgVGVzdERhdGEuc3RhbmRhcmQobnVtU291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtU291cmNlKSwKKworICAgICAgICAvKiBwcmVmbGlnaHQgKi8KKyAgICAgICAgVGVzdERhdGEucHJlZmxpZ2h0KCJcdTA2NDRcdTA2MjciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVUVEVSU19TSEFQRSB8IExFTkdUSF9HUk9XX1NIUklOSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpLAorCisgICAgICAgIFRlc3REYXRhLnByZWZsaWdodCgiXHUwNjQ0XHUwNjI3XHUwMDMxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERJR0lUU19FTjJBTiB8IERJR0lUX1RZUEVfQU5fRVhURU5ERUQgfCBMRU5HVEhfR1JPV19TSFJJTkssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAzKSwKKworICAgICAgICBUZXN0RGF0YS5wcmVmbGlnaHQoIlx1MDY0NFx1MDY0NCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMRVRURVJTX1NIQVBFIHwgTEVOR1RIX0dST1dfU0hSSU5LLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMiksCisKKyAgICAgICAgVGVzdERhdGEucHJlZmxpZ2h0KCJcdWZlZjciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVUVEVSU19VTlNIQVBFIHwgTEVOR1RIX0dST1dfU0hSSU5LLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMiksCisKKyAgICAgICAgLyogYmFkIGRhdGEgKi8KKyAgICAgICAgVGVzdERhdGEuZXJyb3IoIlx1MDAyMFx1ZmVmN1x1MDY0NFx1MDAyMCIsCisgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfVU5TSEFQRSB8IExFTkdUSF9GSVhFRF9TUEFDRVNfTkVBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgQXJhYmljU2hhcGluZ0V4Y2VwdGlvbi5jbGFzcyksCisKKyAgICAgICAgVGVzdERhdGEuZXJyb3IoIlx1MDAyMFx1ZmVmNyIsCisgICAgICAgICAgICAgICAgICAgICAgIExFVFRFUlNfVU5TSEFQRSB8IExFTkdUSF9GSVhFRF9TUEFDRVNfQVRfRU5ELAorICAgICAgICAgICAgICAgICAgICAgICBBcmFiaWNTaGFwaW5nRXhjZXB0aW9uLmNsYXNzKSwKKworICAgICAgICBUZXN0RGF0YS5lcnJvcigiXHVmZWY3XHUwMDIwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgTEVUVEVSU19VTlNIQVBFIHwgTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9CRUdJTk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgIEFyYWJpY1NoYXBpbmdFeGNlcHRpb24uY2xhc3MpLAorCisgICAgICAgIC8qIGJhZCBvcHRpb25zICovCisgICAgICAgIFRlc3REYXRhLmVycm9yKCJcdWZlZjciLAorICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAorICAgICAgICAgICAgICAgICAgICAgICBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpLAorICAgIH07CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmQoKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFRlc3REYXRhIHRlc3QgPSB0ZXN0c1tpXTsKKworICAgICAgICAgICAgRXhjZXB0aW9uIGV4ID0gbnVsbDsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBudWxsOworICAgICAgICAgICAgQXJhYmljU2hhcGluZyBzaGFwZXIgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzaGFwZXIgPSBuZXcgQXJhYmljU2hhcGluZyh0ZXN0LmZsYWdzKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzaGFwZXIuc2hhcGUodGVzdC5zb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXggPSBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRlc3QudHlwZSkgeworICAgICAgICAgICAgY2FzZSBUZXN0RGF0YS5TVEFOREFSRDoKKyAgICAgICAgICAgICAgICBpZiAoIXRlc3QucmVzdWx0LmVxdWFscyhyZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydFRlc3RGYWlsdXJlKGksIHRlc3QsIHNoYXBlciwgcmVzdWx0LCBleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBUZXN0RGF0YS5QUkVGTElHSFQ6CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IHRlc3QubGVuZ3RoICE9IHJlc3VsdC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnRUZXN0RmFpbHVyZShpLCB0ZXN0LCBzaGFwZXIsIHJlc3VsdCwgZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBUZXN0RGF0YS5FUlJPUjoKKyAgICAgICAgICAgICAgICBpZiAoIXRlc3QuZXJyb3IuaXNJbnN0YW5jZShleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0VGVzdEZhaWx1cmUoaSwgdGVzdCwgc2hhcGVyLCByZXN1bHQsIGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlcG9ydFRlc3RGYWlsdXJlKGludCBpbmRleCwgVGVzdERhdGEgdGVzdCwgQXJhYmljU2hhcGluZyBzaGFwZXIsIFN0cmluZyByZXN1bHQsIEV4Y2VwdGlvbiBlcnJvcikgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWYuYXBwZW5kKCIqKiogdGVzdCBmYWlsdXJlICoqKlxuIik7CisgICAgICAgIGJ1Zi5hcHBlbmQoImluZGV4OiAiICsgaW5kZXggKyAiXG4iKTsKKyAgICAgICAgYnVmLmFwcGVuZCgidGVzdDogIiArIHRlc3QgKyAiXG4iKTsKKyAgICAgICAgYnVmLmFwcGVuZCgic2hhcGVyOiAiICsgc2hhcGVyICsgIlxuIik7CisgICAgICAgIGJ1Zi5hcHBlbmQoInJlc3VsdDogIiArIGVzY2FwZWRTdHJpbmcocmVzdWx0KSArICJcbiIpOworICAgICAgICBidWYuYXBwZW5kKCJlcnJvcjogIiArIGVycm9yICsgIlxuIik7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsICYmIHRlc3QucmVzdWx0ICE9IG51bGwgJiYgIXRlc3QucmVzdWx0LmVxdWFscyhyZXN1bHQpKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1hdGgubWF4KHRlc3QucmVzdWx0Lmxlbmd0aCgpLCByZXN1bHQubGVuZ3RoKCkpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGVtcCA9IEludGVnZXIudG9TdHJpbmcoaSk7CisgICAgICAgICAgICAgICAgaWYgKHRlbXAubGVuZ3RoKCkgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAiICIuY29uY2F0KHRlbXApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaGFyIHRyZyA9IGkgPCB0ZXN0LnJlc3VsdC5sZW5ndGgoKSA/IHRlc3QucmVzdWx0LmNoYXJBdChpKSA6ICdcdWZmZmYnOworICAgICAgICAgICAgICAgIGNoYXIgcmVzID0gaSA8IHJlc3VsdC5sZW5ndGgoKSA/IHJlc3VsdC5jaGFyQXQoaSkgOiAnXHVmZmZmJzsKKworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIlsiICsgdGVtcCArICJdICIpOworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZXNjYXBlZFN0cmluZygiIiArIHRyZykgKyAiICIpOworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZXNjYXBlZFN0cmluZygiIiArIHJlcykgKyAiICIpOworICAgICAgICAgICAgICAgIGlmICh0cmcgIT0gcmVzKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIioqKiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVycihidWYudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGVzY2FwZWRTdHJpbmcoU3RyaW5nIHN0cikgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihzdHIubGVuZ3RoKCkgKiA2KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgY2hhciBjaCA9IHN0ci5jaGFyQXQoaSk7CisgICAgICAgICAgICBidWYuYXBwZW5kKCJcXHUiKTsKKyAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwMCkgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJzAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaCA8IDB4MDEwMCkgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJzAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaCA8IDB4MDAxMCkgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJzAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoSW50ZWdlci50b0hleFN0cmluZyhjaCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBuZXcgQXJhYmljU2hhcGluZ1JlZ1Rlc3QoKS5ydW4oYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9zaGFwaW5nL0FyYWJpY1NoYXBpbmdUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvc2hhcGluZy9BcmFiaWNTaGFwaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyNzMzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3Qvc2hhcGluZy9BcmFiaWNTaGFwaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjg2IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykgMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5zaGFwaW5nOworCitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5BcmFiaWNTaGFwaW5nOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQXJhYmljU2hhcGluZ0V4Y2VwdGlvbjsKKworLyoqCisgKiBJbnRlcmFjdGl2ZSB0ZXN0IGZvciBBcmFiaWMgc2hhcGluZy4KKyAqIEludm9rZSBmcm9tIGEgY29tbWFuZCBsaW5lIHBhc3NpbmcgYXJncyBhbmQgc3RyaW5ncy4gIFVzZSAnLWhlbHAnIHRvIHNlZSBkZXNjcmlwdGlvbiBvZiBhcmd1bWVudHMuCisgKi8KK3B1YmxpYyBjbGFzcyBBcmFiaWNTaGFwaW5nVGVzdCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPUFkgPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlBMQUNFID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RSSU5HID0gMjsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgaW50IHRlc3R0eXBlID0gQ09QWTsKKyAgICAgICAgaW50IG9wdGlvbnMgPSAwOworICAgICAgICBpbnQgc3MgPSAwOworICAgICAgICBpbnQgc2wgPSAtMTsKKyAgICAgICAgaW50IGRzID0gMDsKKyAgICAgICAgaW50IGRsID0gLTE7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gIiQyMi40IHRlc3QgMTIzIFx1ZmVmNlx1MDY0NFx1MDYyMiA0NTYgXHUwNjY0XHUwNjY1XHUwNjY2ISI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgYXJnID0gYXJnc1tpXTsKKyAgICAgICAgICAgIGlmIChhcmcuY2hhckF0KDApID09ICctJykgeworICAgICAgICAgICAgICAgIFN0cmluZyBvcHQgPSBhcmcuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSBvcHQ7CisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gYXJnLmluZGV4T2YoJzonKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0ID0gb3B0LnN1YnN0cmluZygwLCBNYXRoLm1pbihpbmRleCwgMykpOworICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChvcHQuZXF1YWxzSWdub3JlQ2FzZSgibGVuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAmPSB+QXJhYmljU2hhcGluZy5MRU5HVEhfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJncyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuTEVOR1RIX0dST1dfU0hSSU5LOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJzbiIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuTEVOR1RIX0ZJWEVEX1NQQUNFU19ORUFSOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJzZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9FTkQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLmVxdWFsc0lnbm9yZUNhc2UoInNiIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gQXJhYmljU2hhcGluZy5MRU5HVEhfRklYRURfU1BBQ0VTX0FUX0JFR0lOTklORzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VmFsRXJyb3Iob3B0LCB2YWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzSWdub3JlQ2FzZSgiZGlyIikpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAmPSB+QXJhYmljU2hhcGluZy5URVhUX0RJUkVDVElPTl9NQVNLOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsLmVxdWFsc0lnbm9yZUNhc2UoImxvZyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuVEVYVF9ESVJFQ1RJT05fTE9HSUNBTDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZXF1YWxzSWdub3JlQ2FzZSgidmlzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gQXJhYmljU2hhcGluZy5URVhUX0RJUkVDVElPTl9WSVNVQUxfTFRSOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dWYWxFcnJvcihvcHQsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5lcXVhbHNJZ25vcmVDYXNlKCJsZXQiKSkgeworICAgICAgICAgICAgICAgICAgICBvcHRpb25zICY9IH5BcmFiaWNTaGFwaW5nLkxFVFRFUlNfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJubyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuTEVUVEVSU19OT09QOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJzaCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuTEVUVEVSU19TSEFQRTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZXF1YWxzSWdub3JlQ2FzZSgidW4iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBBcmFiaWNTaGFwaW5nLkxFVFRFUlNfVU5TSEFQRTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZXF1YWxzSWdub3JlQ2FzZSgidGEiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBBcmFiaWNTaGFwaW5nLkxFVFRFUlNfU0hBUEVfVEFTSEtFRUxfSVNPTEFURUQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1ZhbEVycm9yKG9wdCwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0LmVxdWFsc0lnbm9yZUNhc2UoImRpZyIpKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgJj0gfkFyYWJpY1NoYXBpbmcuRElHSVRTX01BU0s7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwuZXF1YWxzSWdub3JlQ2FzZSgibm8iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBBcmFiaWNTaGFwaW5nLkRJR0lUU19OT09QOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJlYSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuRElHSVRTX0VOMkFOOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJhZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuRElHSVRTX0FOMkVOOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJsciIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEFyYWJpY1NoYXBpbmcuRElHSVRTX0VOMkFOX0lOSVRfTFI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLmVxdWFsc0lnbm9yZUNhc2UoImFsIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gQXJhYmljU2hhcGluZy5ESUdJVFNfRU4yQU5fSU5JVF9BTDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VmFsRXJyb3Iob3B0LCB2YWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzSWdub3JlQ2FzZSgidHlwIikpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAmPSB+QXJhYmljU2hhcGluZy5ESUdJVF9UWVBFX01BU0s7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwuZXF1YWxzSWdub3JlQ2FzZSgiYW4iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBBcmFiaWNTaGFwaW5nLkRJR0lUX1RZUEVfQU47CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLmVxdWFsc0lnbm9yZUNhc2UoImV4IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gQXJhYmljU2hhcGluZy5ESUdJVF9UWVBFX0FOX0VYVEVOREVEOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dWYWxFcnJvcihvcHQsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5lcXVhbHNJZ25vcmVDYXNlKCJkc3QiKSkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgZHMgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1ZhbEVycm9yKG9wdCwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0LmVxdWFsc0lnbm9yZUNhc2UoImRsbiIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkbCA9IEludGVnZXIucGFyc2VJbnQodmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VmFsRXJyb3Iob3B0LCB2YWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzSWdub3JlQ2FzZSgic3N0IikpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzID0gSW50ZWdlci5wYXJzZUludCh2YWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dWYWxFcnJvcihvcHQsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5lcXVhbHNJZ25vcmVDYXNlKCJzbG4iKSkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2wgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1ZhbEVycm9yKG9wdCwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0LmVxdWFsc0lnbm9yZUNhc2UoInRlcyIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwuZXF1YWxzSWdub3JlQ2FzZSgiY3AiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHR5cGUgPSBDT1BZOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5lcXVhbHNJZ25vcmVDYXNlKCJpcCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0dHlwZSA9IElOUExBQ0U7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLmVxdWFsc0lnbm9yZUNhc2UoInN0IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3R0eXBlID0gU1RSSU5HOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dWYWxFcnJvcihvcHQsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5lcXVhbHNJZ25vcmVDYXNlKCJoZWxwIikpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHVzYWdlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvd09wdEVycm9yKG9wdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBhc3N1bWUgdGV4dAorICAgICAgICAgICAgICAgIHRleHQgPSBwYXJzZVRleHQoYXJnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzbCA8IDApIHsKKyAgICAgICAgICAgIHNsID0gdGV4dC5sZW5ndGgoKSAtIHNzOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzbCBkZWZhdWx0aW5nIHRvICIgKyBzbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRsIDwgMCkgeworICAgICAgICAgICAgZGwgPSAyICogc2w7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRsIGRlZmF1bHRpbmcgdG8gIiArIGRsKTsKKyAgICAgICAgfQorCisgICAgICAgIEFyYWJpY1NoYXBpbmcgc2hhcGVyID0gbmV3IEFyYWJpY1NoYXBpbmcob3B0aW9ucyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2hhcGVyOiAiICsgc2hhcGVyKTsKKworICAgICAgICBjaGFyW10gc3JjID0gdGV4dC50b0NoYXJBcnJheSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBpbnB1dDogJyIgKyBlc2NhcGVkVGV4dChzcmMsIHNzLCBzbCkgKyAiJyIpOworICAgICAgICBpZiAodGVzdHR5cGUgIT0gU1RSSU5HKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXJ0OiAiICsgc3MgKyAiIGxlbmd0aDogIiArIHNsICsgIiB0b3RhbCBsZW5ndGg6ICIgKyBzcmMubGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCByZXN1bHQgPSAtMTsKKyAgICAgICAgY2hhcltdIGRlc3QgPSBudWxsOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzd2l0Y2ggKHRlc3R0eXBlKSB7CisgICAgICAgICAgICBjYXNlIENPUFk6CisgICAgICAgICAgICAgICAgZGVzdCA9IG5ldyBjaGFyW2RzICsgZGxdOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNoYXBlci5zaGFwZShzcmMsIHNzLCBzbCwgZGVzdCwgZHMsIGRsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJTlBMQUNFOgorICAgICAgICAgICAgICAgIHNoYXBlci5zaGFwZShzcmMsIHNzLCBzbCk7CisgICAgICAgICAgICAgICAgZHMgPSBzczsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzbDsKKyAgICAgICAgICAgICAgICBkZXN0ID0gc3JjOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFNUUklORzoKKyAgICAgICAgICAgICAgICBkZXN0ID0gc2hhcGVyLnNoYXBlKHRleHQpLnRvQ2hhckFycmF5KCk7CisgICAgICAgICAgICAgICAgZHMgPSAwOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRlc3QubGVuZ3RoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm91dHB1dDogJyIgKyBlc2NhcGVkVGV4dChkZXN0LCBkcywgcmVzdWx0KSArICInIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxlbmd0aDogIiArIHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoZHMgIT0gMCB8fCByZXN1bHQgIT0gZGVzdC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZ1bGwgb3V0cHV0OiAnIiArIGVzY2FwZWRUZXh0KGRlc3QsIDAsIGRlc3QubGVuZ3RoKSArICInIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEFyYWJpY1NoYXBpbmdFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgQXJhYmljU2hhcGluZ0V4Y2VwdGlvbiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHRocm93T3B0RXJyb3IoU3RyaW5nIG9wdCkgeworICAgICAgICB0aHJvd1VzYWdlRXJyb3IoInVua25vd24gb3B0aW9uOiAiICsgb3B0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHRocm93VmFsRXJyb3IoU3RyaW5nIG9wdCwgU3RyaW5nIHZhbCkgeworICAgICAgICB0aHJvd1VzYWdlRXJyb3IoInVua25vd24gdmFsdWU6ICIgKyB2YWwgKyAiIGZvciBvcHRpb246ICIgKyBvcHQpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdGhyb3dVc2FnZUVycm9yKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCIqKiogdXNhZ2UgZXJyb3IgKioqXG4iKTsKKyAgICAgICAgYnVmLmFwcGVuZChtZXNzYWdlKTsKKyAgICAgICAgYnVmLmFwcGVuZCgiXG4iKTsKKyAgICAgICAgYnVmLmFwcGVuZCh1c2FnZSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihidWYudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHVzYWdlID0gCisgICAgICAgICJVc2FnZTogW29wdGlvbl0qIFt0ZXh0XVxuIiArCisgICAgICAgICIgIHdoZXJlIG9wdGlvbiBpcyBpbiB0aGUgZm9ybWF0ICctb3B0Wzp2YWxdJ1xuIiArCisgICAgICAgICIgIG9wdGlvbnMgYXJlOlxuIiArCisgICAgICAgICIgICAgLWxlbjpbZ3N8c258c2V8c2JdICAgIChsZW5ndGg6IGdyb3cvc2hyaW5rLCBzcGFjZXMgbmVhciwgc3BhY2VzIGVuZCwgc3BhY2VzIGJlZ2lubmluZylcbiIgKworICAgICAgICAiICAgIC1kaXI6W2xvZ3x2aXNdICAgICAgICAoZGlyZWN0aW9uOiBsb2dpY2FsLCB2aXN1YWwpXG4iICsKKyAgICAgICAgIiAgICAtbGV0Oltub3xzaHx1bnx0YV0gICAgKGxldHRlcnM6IG5vb3AsIHNoYXBlLCB1bnNoYXBlLCB0YXNoa2VlbClcbiIgKworICAgICAgICAvLyAiICAgIC1sZXQ6W25vfHNofHVuXSAgICAgICAobGV0dGVyczogbm9vcCwgc2hhcGUsIHVuc2hhcGUpXG4iICsKKyAgICAgICAgIiAgICAtZGlnOltub3xlYXxhZXxscnxhbF0gKGRpZ2l0czogbm9vcCwgZW4yYW4sIGFuMmVuLCBlbjJhbl9sciwgZW4yYW5fYWwpXG4iICsKKyAgICAgICAgIiAgICAtdHlwOlthbnxleF0gICAgICAgICAgKGRpZ2l0IHR5cGU6IGFyYWJpYywgYXJhYmljIGV4dGVuZGVkKVxuIiArCisgICAgICAgICIgICAgLWRzdDojICAgICAgICAgICAgICAgIChkZXN0IHN0YXJ0OiBbaW50ZWdlcl0pXG4iICsKKyAgICAgICAgIiAgICAtZGxuOiMgICAgICAgICAgICAgICAgKGRlc3QgbGVuZ3RoIChtYXggc2l6ZSk6IFtpbnRlZ2VyXSlcbiIgKworICAgICAgICAiICAgIC1zc3Q6IyAgICAgICAgICAgICAgICAoc291cmNlIHN0YXJ0OiBbaW50ZWdlcl0pXG4iICsKKyAgICAgICAgIiAgICAtc2xuOiMgICAgICAgICAgICAgICAgKHNvdXJjZSBsZW5ndGg6IFtpbnRlZ2VyXSlcbiIgKworICAgICAgICAiICAgIC10ZXM6W2NwfGlwfHN0XSAgICAgICAodGVzdCB0eXBlOiBjb3B5LCBpbiBwbGFjZSwgc3RyaW5nKVxuIiArCisgICAgICAgICIgICAgLWhlbHAgICAgICAgICAgICAgICAgIChwcmludCB0aGlzIGhlbHAgbWVzc2FnZSlcbiIgKworICAgICAgICAiICB0ZXh0IGNhbiBjb250YWluIHVuaWNvZGUgZXNjYXBlIHZhbHVlcyBpbiB0aGUgZm9ybWF0ICdcXHVYWFhYJyBvbmx5XG4iOworICAgICAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXNjYXBlZFRleHQoY2hhcltdIHRleHQsIGludCBzdGFydCwgaW50IGxlbmd0aCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpID0gc3RhcnQsIGUgPSBzdGFydCArIGxlbmd0aDsgaSA8IGU7ICsraSkgeworICAgICAgICAgICAgY2hhciBjaCA9IHRleHRbaV07CisgICAgICAgICAgICBpZiAoY2ggPCAweDIwIHx8IGNoID4gMHg3ZSkgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIlxcdSIpOworICAgICAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwMCkgeworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCcwJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJzAnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoIDwgMHgxMCkgeworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCcwJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoSW50ZWdlci50b0hleFN0cmluZyhjaCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHBhcnNlVGV4dChTdHJpbmcgdGV4dCkgeworICAgICAgICAvLyBwcm9jZXNzIHVuaWNvZGUgZXNjYXBlcyAob25seSkKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgY2hhcltdIGNoYXJzID0gdGV4dC50b0NoYXJBcnJheSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGNoID0gY2hhcnNbaV07CisgICAgICAgICAgICBpZiAoY2ggPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIGlmICgoaSA8IGNoYXJzLmxlbmd0aCAtIDEpICYmCisgICAgICAgICAgICAgICAgICAgIChjaGFyc1tpKzFdID09ICd1JykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHZhbCA9IEludGVnZXIucGFyc2VJbnQodGV4dC5zdWJzdHJpbmcoaSsyLCBpKzYpLCAxNik7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RpbWV6b25lL1RpbWVab25lQm91bmRhcnlUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdGltZXpvbmUvVGltZVpvbmVCb3VuZGFyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzk4MDhmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RpbWV6b25lL1RpbWVab25lQm91bmRhcnlUZXN0LmphdmEKQEAgLTAsMCArMSw3MTUgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdGltZXpvbmUvVGltZVpvbmVCb3VuZGFyeVRlc3QuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIyOjA0OjM5ICQKKyAqICRSZXZpc2lvbjogMS42ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnRpbWV6b25lOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKKy8qKgorICogQSB0ZXN0IHdoaWNoIGRpc2NvdmVycyB0aGUgYm91bmRhcmllcyBvZiBEU1QgcHJvZ3JhbW1hdGljYWxseSBhbmQgdmVyaWZpZXMKKyAqIHRoYXQgdGhleSBhcmUgY29ycmVjdC4KKyAqLworcHVibGljIGNsYXNzIFRpbWVab25lQm91bmRhcnlUZXN0IGV4dGVuZHMgVGVzdEZtd2sKK3sKKyAgICBzdGF0aWMgZmluYWwgaW50IE9ORV9TRUNPTkQgPSAxMDAwOworICAgIHN0YXRpYyBmaW5hbCBpbnQgT05FX01JTlVURSA9IDYwKk9ORV9TRUNPTkQ7CisgICAgc3RhdGljIGZpbmFsIGludCBPTkVfSE9VUiA9IDYwKk9ORV9NSU5VVEU7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgT05FX0RBWSA9IDI0Kk9ORV9IT1VSOworICAgIHN0YXRpYyBmaW5hbCBsb25nIE9ORV9ZRUFSID0gKGxvbmcpKDM2NS4yNSAqIE9ORV9EQVkpOworICAgIHN0YXRpYyBmaW5hbCBsb25nIFNJWF9NT05USFMgPSBPTkVfWUVBUiAvIDI7CisKKyAgICBzdGF0aWMgZmluYWwgaW50IE1PTlRIX0xFTkdUSFtdID0gezMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxfTsKKworICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZW1waXJpY2FsbHkgZGV0ZXJtaW5lZCB0byBiZSBjb3JyZWN0CisgICAgc3RhdGljIGZpbmFsIGxvbmcgUFNUXzE5OTdfQkVHICA9IDg2MDMyMDgwMDAwMEw7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgUFNUXzE5OTdfRU5EICA9IDg3Nzg1NjQwMDAwMEw7CisKKyAgICAvLyBNaW5pbXVtIGludGVydmFsIGZvciBiaW5hcnkgc2VhcmNoZXMgaW4gbXM7IHNob3VsZCBiZSBubyBsYXJnZXIKKyAgICAvLyB0aGFuIDEwMDAuCisgICAgc3RhdGljIGZpbmFsIGxvbmcgSU5URVJWQUwgPSAxMDsgLy8gTWlsbGlzZWNvbmRzCisKKyAgICAvLyBbM0phbjAxIExpdV0gVXBkYXRlZCBmb3IgMjAwMGYgZGF0YQorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVTVFJBTElBID0gIkF1c3RyYWxpYS9BZGVsYWlkZSI7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgQVVTVFJBTElBXzE5OTdfQkVHID0gODc3Nzk3MDAwMDAwTDsKKyAgICBzdGF0aWMgZmluYWwgbG9uZyBBVVNUUkFMSUFfMTk5N19FTkQgPSA4NTk2NTMwMDAwMDBMOworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgVGltZVpvbmVCb3VuZGFyeVRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygpIEJvdW5kYXJ5IFRlc3QKKyAgICAgKiBMb29rIGZvciBhIERTVCBjaGFuZ2VvdmVyIHRvIG9jY3VyIHdpdGhpbiA2IG1vbnRocyBvZiB0aGUgZ2l2ZW4gRGF0ZS4KKyAgICAgKiBUaGUgaW5pdGlhbCBEYXRlLnRvU3RyaW5nKCkgc2hvdWxkIHlpZWxkIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlCisgICAgICogc3RhcnRNb2RlIGFzIGEgU1VCU1RSSU5HLiAgVGhlIGJvdW5kYXJ5IHdpbGwgYmUgdGVzdGVkIHRvIGJlCisgICAgICogYXQgdGhlIGV4cGVjdGVkQm91bmRhcnkgdmFsdWUuCisgICAgICovCisgICAgdm9pZCBmaW5kRGF5bGlnaHRCb3VuZGFyeVVzaW5nRGF0ZShEYXRlIGQsIFN0cmluZyBzdGFydE1vZGUsIGxvbmcgZXhwZWN0ZWRCb3VuZGFyeSkKKyAgICB7CisgICAgICAgIC8vIEdpdmVuIGEgZGF0ZSB3aXRoIGEgeWVhciBzdGFydCwgZmluZCB0aGUgRGF5bGlnaHQgb25zZXQKKyAgICAgICAgLy8gYW5kIGVuZC4gIFRoZSBnaXZlbiBkYXRlIHNob3VsZCBiZSAxLzEveHggaW4gc29tZSB5ZWFyLgorCisgICAgICAgIGlmIChkLnRvU3RyaW5nKCkuaW5kZXhPZihzdGFydE1vZGUpID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dsbigiRXJyb3I6ICIgKyBzdGFydE1vZGUgKyAiIG5vdCBwcmVzZW50IGluICIgKyBkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVzZSBhIGJpbmFyeSBzZWFyY2gsIGFzc3VtaW5nIHRoYXQgd2UgaGF2ZSBhIFN0YW5kYXJkCisgICAgICAgIC8vIHRpbWUgYXQgdGhlIG1pZHBvaW50LgorICAgICAgICBsb25nIG1pbiA9IGQuZ2V0VGltZSgpOworICAgICAgICBsb25nIG1heCA9IG1pbiArIFNJWF9NT05USFM7CisKKyAgICAgICAgd2hpbGUgKChtYXggLSBtaW4pID4gIElOVEVSVkFMKQorICAgICAgICB7CisgICAgICAgICAgICBsb25nIG1pZCA9IChtaW4gKyBtYXgpID4+IDE7CisgICAgICAgICAgICBTdHJpbmcgcyA9IG5ldyBEYXRlKG1pZCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIC8vIGxvZ2xuKHMpOworICAgICAgICAgICAgaWYgKHMuaW5kZXhPZihzdGFydE1vZGUpICE9IC0xKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1pbiA9IG1pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXggPSBtaWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsb2dsbigiRGF0ZSBCZWZvcmU6ICIgKyBzaG93RGF0ZShtaW4pKTsKKyAgICAgICAgbG9nbG4oIkRhdGUgQWZ0ZXI6ICAiICsgc2hvd0RhdGUobWF4KSk7CisgICAgICAgIGxvbmcgbWluZGVsdGEgPSBleHBlY3RlZEJvdW5kYXJ5IC0gbWluOworICAgICAgICAvLyBub3QgdXNlZCBsb25nIG1heGRlbHRhID0gbWF4IC0gZXhwZWN0ZWRCb3VuZGFyeTsKKyAgICAgICAgaWYgKG1pbmRlbHRhID49IDAgJiYgbWluZGVsdGEgPD0gSU5URVJWQUwgJiYKKyAgICAgICAgICAgIG1pbmRlbHRhID49IDAgJiYgbWluZGVsdGEgPD0gSU5URVJWQUwpCisgICAgICAgICAgICBsb2dsbigiUEFTUzogRXhwZWN0ZWQgYm91bmRhcnkgYXQgIiArIGV4cGVjdGVkQm91bmRhcnkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgYm91bmRhcnkgYXQgIiArIGV4cGVjdGVkQm91bmRhcnkpOworICAgIH0KKworICAgIC8vIFRoaXMgdGVzdCBjYW5ub3QgYmUgY29tcGlsZWQgdW50aWwgdGhlIGluRGF5bGlnaHRUaW1lKCkgbWV0aG9kIG9mIEdyZWdvcmlhbkNhbGVuZGFyCisgICAgLy8gYmVjb21lcyBwdWJsaWMuCisgICAgLy8gICAgc3RhdGljIHZvaWQgZmluZERheWxpZ2h0Qm91bmRhcnlVc2luZ0NhbGVuZGFyKERhdGUgZCwgYm9vbGVhbiBzdGFydHNJbkRTVCkKKyAgICAvLyAgICB7CisgICAgLy8gIC8vIEdpdmVuIGEgZGF0ZSB3aXRoIGEgeWVhciBzdGFydCwgZmluZCB0aGUgRGF5bGlnaHQgb25zZXQKKyAgICAvLyAgLy8gYW5kIGVuZC4gIFRoZSBnaXZlbiBkYXRlIHNob3VsZCBiZSAxLzEveHggaW4gc29tZSB5ZWFyLgorICAgIC8vCisgICAgLy8gIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgIC8vICBjYWwuc2V0VGltZShkKTsKKyAgICAvLyAgaWYgKGNhbC5pbkRheWxpZ2h0VGltZSgpICE9IHN0YXJ0c0luRFNUKQorICAgIC8vICB7CisgICAgLy8gICAgICBsb2dsbigiRXJyb3I6IGluRGF5bGlnaHRUaW1lKCIgKyBkICsgIikgIT0gIiArIHN0YXJ0c0luRFNUKTsKKyAgICAvLyAgfQorICAgIC8vCisgICAgLy8gIC8vIFVzZSBhIGJpbmFyeSBzZWFyY2gsIGFzc3VtaW5nIHRoYXQgd2UgaGF2ZSBhIFN0YW5kYXJkCisgICAgLy8gIC8vIHRpbWUgYXQgdGhlIG1pZHBvaW50LgorICAgIC8vICBsb25nIG1pbiA9IGQuZ2V0VGltZSgpOworICAgIC8vICBsb25nIG1heCA9IG1pbiArIChsb25nKSgzNjUuMjUgLyAyICogMjQqNjAqNjAqMTAwMCk7CisgICAgLy8KKyAgICAvLyAgd2hpbGUgKChtYXggLSBtaW4pID4gIElOVEVSVkFMKQorICAgIC8vICB7CisgICAgLy8gICAgICBsb25nIG1pZCA9IChtaW4gKyBtYXgpID4+IDE7CisgICAgLy8gICAgICBjYWwuc2V0VGltZShuZXcgRGF0ZShtaWQpKTsKKyAgICAvLyAgICAgIGlmIChjYWwuaW5EYXlsaWdodFRpbWUoKSA9PSBzdGFydHNJbkRTVCkKKyAgICAvLyAgICAgIHsKKyAgICAvLyAgICAgIG1pbiA9IG1pZDsKKyAgICAvLyAgICAgIH0KKyAgICAvLyAgICAgIGVsc2UKKyAgICAvLyAgICAgIHsKKyAgICAvLyAgICAgIG1heCA9IG1pZDsKKyAgICAvLyAgICAgIH0KKyAgICAvLyAgfQorICAgIC8vCisgICAgLy8gIGxvZ2xuKCJDYWxlbmRhciBCZWZvcmU6ICIgKyBzaG93RGF0ZShtaW4pKTsKKyAgICAvLyAgbG9nbG4oIkNhbGVuZGFyIEFmdGVyOiAgIiArIHNob3dEYXRlKG1heCkpOworICAgIC8vICAgIH0KKworICAgIHZvaWQgZmluZERheWxpZ2h0Qm91bmRhcnlVc2luZ1RpbWVab25lKERhdGUgZCwgYm9vbGVhbiBzdGFydHNJbkRTVCwgbG9uZyBleHBlY3RlZEJvdW5kYXJ5KQorICAgIHsKKyAgICAgICAgZmluZERheWxpZ2h0Qm91bmRhcnlVc2luZ1RpbWVab25lKGQsIHN0YXJ0c0luRFNULCBleHBlY3RlZEJvdW5kYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmREYXlsaWdodEJvdW5kYXJ5VXNpbmdUaW1lWm9uZShEYXRlIGQsIGJvb2xlYW4gc3RhcnRzSW5EU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBleHBlY3RlZEJvdW5kYXJ5LCBUaW1lWm9uZSB0eikKKyAgICB7CisgICAgICAgIC8vIEdpdmVuIGEgZGF0ZSB3aXRoIGEgeWVhciBzdGFydCwgZmluZCB0aGUgRGF5bGlnaHQgb25zZXQKKyAgICAgICAgLy8gYW5kIGVuZC4gIFRoZSBnaXZlbiBkYXRlIHNob3VsZCBiZSAxLzEveHggaW4gc29tZSB5ZWFyLgorCisgICAgICAgIC8vIFVzZSBhIGJpbmFyeSBzZWFyY2gsIGFzc3VtaW5nIHRoYXQgd2UgaGF2ZSBhIFN0YW5kYXJkCisgICAgICAgIC8vIHRpbWUgYXQgdGhlIG1pZHBvaW50LgorICAgICAgICBsb25nIG1pbiA9IGQuZ2V0VGltZSgpOworICAgICAgICBsb25nIG1heCA9IG1pbiArIFNJWF9NT05USFM7CisKKyAgICAgICAgaWYgKHR6LmluRGF5bGlnaHRUaW1lKGQpICE9IHN0YXJ0c0luRFNUKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIHR6LmdldElEKCkgKyAiIGluRGF5bGlnaHRUaW1lKCIgKworICAgICAgICAgICAgICAgICAgZCArICIpICE9ICIgKyBzdGFydHNJbkRTVCk7CisgICAgICAgICAgICBzdGFydHNJbkRTVCA9ICFzdGFydHNJbkRTVDsgLy8gRmxpcCBvdmVyOyBmaW5kIHRoZSBhcHBhcmVudCB2YWx1ZQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR6LmluRGF5bGlnaHRUaW1lKG5ldyBEYXRlKG1heCkpID09IHN0YXJ0c0luRFNUKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIHR6LmdldElEKCkgKyAiIGluRGF5bGlnaHRUaW1lKCIgKworICAgICAgICAgICAgICAgICAgKG5ldyBEYXRlKG1heCkpICsgIikgIT0gIiArICghc3RhcnRzSW5EU1QpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICgobWF4IC0gbWluKSA+ICBJTlRFUlZBTCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9uZyBtaWQgPSAobWluICsgbWF4KSA+PiAxOworICAgICAgICAgICAgYm9vbGVhbiBpc0luID0gdHouaW5EYXlsaWdodFRpbWUobmV3IERhdGUobWlkKSk7CisgICAgICAgICAgICBpZiAoaXNJbiA9PSBzdGFydHNJbkRTVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtaW4gPSBtaWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWF4ID0gbWlkOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbG9nbG4odHouZ2V0SUQoKSArICIgQmVmb3JlOiAiICsgc2hvd0RhdGUobWluLCB0eikpOworICAgICAgICBsb2dsbih0ei5nZXRJRCgpICsgIiBBZnRlcjogICIgKyBzaG93RGF0ZShtYXgsIHR6KSk7CisKKyAgICAgICAgbG9uZyBtaW5kZWx0YSA9IGV4cGVjdGVkQm91bmRhcnkgLSBtaW47CisgICAgICAgIC8vIG5vdCB1c2VkIGxvbmcgbWF4ZGVsdGEgPSBtYXggLSBleHBlY3RlZEJvdW5kYXJ5OyAKKyAgICAgICAgRGF0ZUZvcm1hdCBmbXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5MT05HLCBEYXRlRm9ybWF0LkxPTkcpOworICAgICAgICBmbXQuc2V0VGltZVpvbmUodHopOworICAgICAgICBpZiAobWluZGVsdGEgPj0gMCAmJiBtaW5kZWx0YSA8PSBJTlRFUlZBTCAmJgorICAgICAgICAgICAgbWluZGVsdGEgPj0gMCAmJiBtaW5kZWx0YSA8PSBJTlRFUlZBTCkKKyAgICAgICAgICAgIGxvZ2xuKCJQQVNTOiBFeHBlY3RlZCBib3VuZGFyeSBhdCAiICsgZXhwZWN0ZWRCb3VuZGFyeSArICIgPSAiICsgZm10LmZvcm1hdChuZXcgRGF0ZShleHBlY3RlZEJvdW5kYXJ5KSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgYm91bmRhcnkgYXQgIiArIGV4cGVjdGVkQm91bmRhcnkgKyAiID0gIiArIGZtdC5mb3JtYXQobmV3IERhdGUoZXhwZWN0ZWRCb3VuZGFyeSkpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2hvd0RhdGUobG9uZyBsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNob3dEYXRlKG5ldyBEYXRlKGwpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2hvd0RhdGUoRGF0ZSBkKQorICAgIHsKKyAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwuc2V0VGltZShkKTsKKyAgICAgICAgcmV0dXJuICIiICsgKGNhbC5nZXQoQ2FsZW5kYXIuWUVBUikgLSAxOTAwKSArICIvIiArIAorICAgICAgICAgICAgICAgc2hvd05OKGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMSkgKyAiLyIgKyAKKyAgICAgICAgICAgICAgIHNob3dOTihjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpICsgIiAiICsgCisgICAgICAgICAgICAgICBzaG93Tk4oY2FsLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSkpICsgIjoiIAorICAgICAgICAgICAgICAgKyBzaG93Tk4oY2FsLmdldChDYWxlbmRhci5NSU5VVEUpKSArICIgXCIiICsgZCArICJcIiA9ICIgKworICAgICAgICAgICAgICAgZC5nZXRUaW1lKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNob3dEYXRlKGxvbmcgbCwgVGltZVpvbmUgeikKKyAgICB7CisgICAgICAgIHJldHVybiBzaG93RGF0ZShuZXcgRGF0ZShsKSwgeik7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNob3dEYXRlKERhdGUgZCwgVGltZVpvbmUgem9uZSkKKyAgICB7CisgICAgICAgIERhdGVGb3JtYXQgZm10ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuTE9ORywgRGF0ZUZvcm1hdC5MT05HKTsKKyAgICAgICAgZm10LnNldFRpbWVab25lKHpvbmUpOworICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGNhbC5zZXRUaW1lKGQpOworICAgICAgICByZXR1cm4gIiIgKyAoY2FsLmdldChDYWxlbmRhci5ZRUFSKSAtIDE5MDApICsgIi8iICsgCisgICAgICAgICAgICAgICBzaG93Tk4oY2FsLmdldChDYWxlbmRhci5NT05USCkgKyAxKSArICIvIiArIAorICAgICAgICAgICAgICAgc2hvd05OKGNhbC5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSkgKyAiICIgKyAKKyAgICAgICAgICAgICAgIHNob3dOTihjYWwuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSkgKyAiOiIgKyAKKyAgICAgICAgICAgICAgIHNob3dOTihjYWwuZ2V0KENhbGVuZGFyLk1JTlVURSkpICsgIiBcIiIgKyBkICsgIlwiID0gIiArCisgICAgICAgICAgICAgICBmbXQuZm9ybWF0KGQpICsgIiA9ICIgKyBkLmdldFRpbWUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2hvd05OKGludCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgobiA8IDEwKSA/ICIwIiA6ICIiKSArIG47CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBkYXRlLCBhIFRpbWVab25lLCBhbmQgZXhwZWN0ZWQgdmFsdWVzIGZvciBpbkRheWxpZ2h0VGltZSwKKyAgICAgKiB1c2VEYXlsaWdodFRpbWUsIHpvbmUgYW5kIERTVCBvZmZzZXQsIHZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuCisgICAgICovCisgICAgdm9pZCB2ZXJpZnlEU1QoRGF0ZSBkLCBUaW1lWm9uZSB0aW1lX3pvbmUsCisgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBleHBVc2VEYXlsaWdodFRpbWUsIGJvb2xlYW4gZXhwSW5EYXlsaWdodFRpbWUsCisgICAgICAgICAgICAgICAgICAgaW50IGV4cFpvbmVPZmZzZXQsIGludCBleHBEU1RPZmZzZXQpCisgICAgeworICAgICAgICBsb2dsbigiLS0gVmVyaWZ5aW5nIHRpbWUgIiArIGQgKworICAgICAgICAgICAgICAiIGluIHpvbmUgIiArIHRpbWVfem9uZS5nZXRJRCgpKTsKKworICAgICAgICBpZiAodGltZV96b25lLmluRGF5bGlnaHRUaW1lKGQpID09IGV4cEluRGF5bGlnaHRUaW1lKQorICAgICAgICAgICAgbG9nbG4oIlBBU1M6IGluRGF5bGlnaHRUaW1lID0gIiArIHRpbWVfem9uZS5pbkRheWxpZ2h0VGltZShkKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBpbkRheWxpZ2h0VGltZSA9ICIgKyB0aW1lX3pvbmUuaW5EYXlsaWdodFRpbWUoZCkpOworCisgICAgICAgIGlmICh0aW1lX3pvbmUudXNlRGF5bGlnaHRUaW1lKCkgPT0gZXhwVXNlRGF5bGlnaHRUaW1lKQorICAgICAgICAgICAgbG9nbG4oIlBBU1M6IHVzZURheWxpZ2h0VGltZSA9ICIgKyB0aW1lX3pvbmUudXNlRGF5bGlnaHRUaW1lKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJsbigiRkFJTDogdXNlRGF5bGlnaHRUaW1lID0gIiArIHRpbWVfem9uZS51c2VEYXlsaWdodFRpbWUoKSk7CisKKyAgICAgICAgaWYgKHRpbWVfem9uZS5nZXRSYXdPZmZzZXQoKSA9PSBleHBab25lT2Zmc2V0KQorICAgICAgICAgICAgbG9nbG4oIlBBU1M6IGdldFJhd09mZnNldCgpID0gIiArIGV4cFpvbmVPZmZzZXQvKGRvdWJsZSlPTkVfSE9VUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBnZXRSYXdPZmZzZXQoKSA9ICIgKyB0aW1lX3pvbmUuZ2V0UmF3T2Zmc2V0KCkvKGRvdWJsZSlPTkVfSE9VUiArCisgICAgICAgICAgICAgICAgICAiOyBleHBlY3RlZCAiICsgZXhwWm9uZU9mZnNldC8oZG91YmxlKU9ORV9IT1VSKTsKKworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBnYyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcih0aW1lX3pvbmUpOworICAgICAgICBnYy5zZXRUaW1lKGQpOworICAgICAgICBpbnQgb2Zmc2V0ID0gdGltZV96b25lLmdldE9mZnNldChnYy5nZXQoZ2MuRVJBKSwgZ2MuZ2V0KGdjLllFQVIpLCBnYy5nZXQoZ2MuTU9OVEgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYy5nZXQoZ2MuREFZX09GX01PTlRIKSwgZ2MuZ2V0KGdjLkRBWV9PRl9XRUVLKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYy5nZXQoZ2MuSE9VUl9PRl9EQVkpICogNjAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjLmdldChnYy5NSU5VVEUpKSAqIDYwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjLmdldChnYy5TRUNPTkQpKSAqIDEwMDAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYy5nZXQoZ2MuTUlMTElTRUNPTkQpKTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBleHBEU1RPZmZzZXQpCisgICAgICAgICAgICBsb2dsbigiUEFTUzogZ2V0T2Zmc2V0KCkgPSAiICsgb2Zmc2V0Lyhkb3VibGUpT05FX0hPVVIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJsbigiRkFJTDogZ2V0T2Zmc2V0KCkgPSAiICsgb2Zmc2V0Lyhkb3VibGUpT05FX0hPVVIgKworICAgICAgICAgICAgICAgICAgIjsgZXhwZWN0ZWQgIiArIGV4cERTVE9mZnNldC8oZG91YmxlKU9ORV9IT1VSKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Qm91bmRhcmllcygpCisgICAgeworICAgICAgICBUaW1lWm9uZSBwc3QgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisgICAgICAgIFRpbWVab25lIHNhdmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIGphdmEudXRpbC5DYWxlbmRhciB0ZW1wY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIHRlbXBjYWwuY2xlYXIoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQocHN0KTsKKworICAgICAgICAgICAgLy8gRFNUIGNoYW5nZW92ZXIgZm9yIFBTVCBpcyA0LzYvMTk5NyBhdCAyIGhvdXJzIHBhc3QgbWlkbmlnaHQKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLkFQUklMLCA2KTsKKyAgICAgICAgICAgIERhdGUgZCA9IHRlbXBjYWwuZ2V0VGltZSgpOworCisgICAgICAgICAgICAvLyBpIGlzIG1pbnV0ZXMgcGFzdCBtaWRuaWdodCBzdGFuZGFyZCB0aW1lCisgICAgICAgICAgICBmb3IgKGludCBpPTYwOyBpPD0xODA7IGkrPTE1KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5EU1QgPSAoaSA+PSAxMjApOworICAgICAgICAgICAgICAgIERhdGUgZSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICAgICAgICAgIGUuc2V0VGltZShkLmdldFRpbWUoKSArIGkqNjAqMTAwMCk7CisgICAgICAgICAgICAgICAgdmVyaWZ5RFNUKGUsIHBzdCwgdHJ1ZSwgaW5EU1QsIC04Kk9ORV9IT1VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbkRTVCA/IC03Kk9ORV9IT1VSIDogLTgqT05FX0hPVVIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChzYXZlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaW4gUFNUL1BEVAorICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIikpOworICAgICAgICAgICAgbG9nbG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIDAsIDEpOworICAgICAgICAgICAgZmluZERheWxpZ2h0Qm91bmRhcnlVc2luZ0RhdGUodGVtcGNhbC5nZXRUaW1lKCksICJQU1QiLCBQU1RfMTk5N19CRUcpOworICAgICAgICAgICAgbG9nbG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIDYsIDEpOworICAgICAgICAgICAgZmluZERheWxpZ2h0Qm91bmRhcnlVc2luZ0RhdGUodGVtcGNhbC5nZXRUaW1lKCksICJQRFQiLCBQU1RfMTk5N19FTkQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gIGlmICh0cnVlKQorICAgICAgICAvLyAgeworICAgICAgICAvLyAgICAgIGxvZ2xuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisgICAgICAgIC8vICAgICAgZmluZERheWxpZ2h0Qm91bmRhcnlVc2luZ0NhbGVuZGFyKG5ldyBEYXRlKDk3LDAsMSksIGZhbHNlKTsKKyAgICAgICAgLy8gICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworICAgICAgICAvLyAgICAgIGZpbmREYXlsaWdodEJvdW5kYXJ5VXNpbmdDYWxlbmRhcihuZXcgRGF0ZSg5Nyw2LDEpLCB0cnVlKTsKKyAgICAgICAgLy8gIH0KKworICAgICAgICBpZiAodHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU291dGhlcm4gaGVtaXNwaGVyZSB0ZXN0CisgICAgICAgICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworICAgICAgICAgICAgVGltZVpvbmUgeiA9IFRpbWVab25lLmdldFRpbWVab25lKEFVU1RSQUxJQSk7CisgICAgICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCAwLCAxKTsKKyAgICAgICAgICAgIGZpbmREYXlsaWdodEJvdW5kYXJ5VXNpbmdUaW1lWm9uZSh0ZW1wY2FsLmdldFRpbWUoKSwgdHJ1ZSwgQVVTVFJBTElBXzE5OTdfRU5ELCB6KTsKKyAgICAgICAgICAgIGxvZ2xuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisgICAgICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCA2LCAxKTsKKyAgICAgICAgICAgIGZpbmREYXlsaWdodEJvdW5kYXJ5VXNpbmdUaW1lWm9uZSh0ZW1wY2FsLmdldFRpbWUoKSwgZmFsc2UsIEFVU1RSQUxJQV8xOTk3X0JFRywgeik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nbG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIDAsIDEpOworICAgICAgICAgICAgZmluZERheWxpZ2h0Qm91bmRhcnlVc2luZ1RpbWVab25lKHRlbXBjYWwuZ2V0VGltZSgpLCBmYWxzZSwgUFNUXzE5OTdfQkVHKTsKKyAgICAgICAgICAgIGxvZ2xuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisgICAgICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCA2LCAxKTsKKyAgICAgICAgICAgIGZpbmREYXlsaWdodEJvdW5kYXJ5VXNpbmdUaW1lWm9uZSh0ZW1wY2FsLmdldFRpbWUoKSwgdHJ1ZSwgUFNUXzE5OTdfRU5EKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMganVzdCBzaG93cyB0aGUgb2Zmc2V0IGZvciBBcHJpbCA0LTcgaW4gMTk5Ny4gIFRoaXMgaXMgcmVkdW5kYW50CisgICAgICAgIC8vIHdpdGggYSB0ZXN0IGFib3ZlLCBzbyB3ZSBkaXNhYmxlIGl0LgorICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRpbWVab25lIHogPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCAzLCA0KTsKKyAgICAgICAgICAgIGxvZ2xuKHouZ2V0T2Zmc2V0KDEsIDk3LCAzLCA0LCA2LCAwKSArICIgIiArIHRlbXBjYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIDMsIDUpOworICAgICAgICAgICAgbG9nbG4oei5nZXRPZmZzZXQoMSwgOTcsIDMsIDUsIDcsIDApICsgIiAiICsgdGVtcGNhbC5nZXRUaW1lKCkpOworICAgICAgICAgICAgdGVtcGNhbC5zZXQoMTk5NywgMywgNik7CisgICAgICAgICAgICBsb2dsbih6LmdldE9mZnNldCgxLCA5NywgMywgNiwgMSwgMCkgKyAiICIgKyB0ZW1wY2FsLmdldFRpbWUoKSk7CisgICAgICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCAzLCA3KTsKKyAgICAgICAgICAgIGxvZ2xuKHouZ2V0T2Zmc2V0KDEsIDk3LCAzLCA3LCAyLCAwKSArICIgIiArIHRlbXBjYWwuZ2V0VGltZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQ2FuJ3QgZG8gYW55IG9mIHRoZXNlIHdpdGhvdXQgYSBwdWJsaWMgaW5EYXlsaWdodFRpbWUgaW4gR0MKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgICAgLy8gICAgc3RhdGljIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgIC8vCisgICAgLy8gICAgc3RhdGljIHZvaWQgX3Rlc3RVc2luZ0JpbmFyeVNlYXJjaChEYXRlIGQsIGJvb2xlYW4gc3RhcnRzSW5EU1QpCisgICAgLy8gICAgeworICAgIC8vICAvLyBHaXZlbiBhIGRhdGUgd2l0aCBhIHllYXIgc3RhcnQsIGZpbmQgdGhlIERheWxpZ2h0IG9uc2V0CisgICAgLy8gIC8vIGFuZCBlbmQuICBUaGUgZ2l2ZW4gZGF0ZSBzaG91bGQgYmUgMS8xL3h4IGluIHNvbWUgeWVhci4KKyAgICAvLworICAgIC8vICAvLyBVc2UgYSBiaW5hcnkgc2VhcmNoLCBhc3N1bWluZyB0aGF0IHdlIGhhdmUgYSBTdGFuZGFyZAorICAgIC8vICAvLyB0aW1lIGF0IHRoZSBtaWRwb2ludC4KKyAgICAvLyAgbG9uZyBtaW4gPSBkLmdldFRpbWUoKTsKKyAgICAvLyAgbG9uZyBtYXggPSBtaW4gKyAobG9uZykoMzY1LjI1IC8gMiAqIE9ORV9EQVkpOworICAgIC8vCisgICAgLy8gIC8vIEZpcnN0IGNoZWNrIHRoZSBtYXgKKyAgICAvLyAgY2FsLnNldFRpbWUobmV3IERhdGUobWF4KSk7CisgICAgLy8gIGlmIChjYWwuaW5EYXlsaWdodFRpbWUoKSA9PSBzdGFydHNJbkRTVCkKKyAgICAvLyAgeworICAgIC8vICAgICAgbG9nbG4oIkVycm9yOiBpbkRheWxpZ2h0VGltZSgiICsgKG5ldyBEYXRlKG1heCkpICsgIikgIT0gIiArICghc3RhcnRzSW5EU1QpKTsKKyAgICAvLyAgfQorICAgIC8vCisgICAgLy8gIGNhbC5zZXRUaW1lKGQpOworICAgIC8vICBpZiAoY2FsLmluRGF5bGlnaHRUaW1lKCkgIT0gc3RhcnRzSW5EU1QpCisgICAgLy8gIHsKKyAgICAvLyAgICAgIGxvZ2xuKCJFcnJvcjogaW5EYXlsaWdodFRpbWUoIiArIGQgKyAiKSAhPSAiICsgc3RhcnRzSW5EU1QpOworICAgIC8vICB9CisgICAgLy8KKyAgICAvLyAgd2hpbGUgKChtYXggLSBtaW4pID4gIElOVEVSVkFMKQorICAgIC8vICB7CisgICAgLy8gICAgICBsb25nIG1pZCA9IChtaW4gKyBtYXgpID4+IDE7CisgICAgLy8gICAgICBjYWwuc2V0VGltZShuZXcgRGF0ZShtaWQpKTsKKyAgICAvLyAgICAgIGlmIChjYWwuaW5EYXlsaWdodFRpbWUoKSA9PSBzdGFydHNJbkRTVCkKKyAgICAvLyAgICAgIHsKKyAgICAvLyAgICAgIG1pbiA9IG1pZDsKKyAgICAvLyAgICAgIH0KKyAgICAvLyAgICAgIGVsc2UKKyAgICAvLyAgICAgIHsKKyAgICAvLyAgICAgIG1heCA9IG1pZDsKKyAgICAvLyAgICAgIH0KKyAgICAvLyAgfQorICAgIC8vCisgICAgLy8gIGxvZ2xuKCJCaW5hcnkgU2VhcmNoIEJlZm9yZTogIiArIHNob3dEYXRlKG1pbikpOworICAgIC8vICBsb2dsbigiQmluYXJ5IFNlYXJjaCBBZnRlcjogICIgKyBzaG93RGF0ZShtYXgpKTsKKyAgICAvLyAgICB9CisgICAgLy8KKyAgICAvLyAgICBzdGF0aWMgdm9pZCBfdGVzdFVzaW5nTWlsbGlzKERhdGUgZCwgYm9vbGVhbiBzdGFydHNJbkRTVCkKKyAgICAvLyAgICB7CisgICAgLy8gIGxvbmcgbWlsbGlzID0gZC5nZXRUaW1lKCk7CisgICAgLy8gIGxvbmcgbWF4ID0gbWlsbGlzICsgKGxvbmcpKDM3MCAqIE9ORV9EQVkpOyAvLyBBIHllYXIgcGx1cyBleHRyYQorICAgIC8vCisgICAgLy8gIGJvb2xlYW4gbGFzdERTVCA9IHN0YXJ0c0luRFNUOworICAgIC8vICB3aGlsZSAobWlsbGlzIDwgbWF4KQorICAgIC8vICB7CisgICAgLy8gICAgICBjYWwuc2V0VGltZShuZXcgRGF0ZShtaWxsaXMpKTsKKyAgICAvLyAgICAgIGJvb2xlYW4gaW5EYXlsaWdodCA9IGNhbC5pbkRheWxpZ2h0VGltZSgpOworICAgIC8vCisgICAgLy8gICAgICBpZiAoaW5EYXlsaWdodCAhPSBsYXN0RFNUKQorICAgIC8vICAgICAgeworICAgIC8vICAgICAgbG9nbG4oIlN3aXRjaCAiICsgKGluRGF5bGlnaHQgPyAiaW50byIgOiAib3V0IG9mIikKKyAgICAvLyAgICAgICAgICAgICAgICAgKyAiIERTVCBhdCAiICsgKG5ldyBEYXRlKG1pbGxpcykpKTsKKyAgICAvLyAgICAgIGxhc3REU1QgPSBpbkRheWxpZ2h0OworICAgIC8vICAgICAgfQorICAgIC8vCisgICAgLy8gICAgICBtaWxsaXMgKz0gMTUqT05FX01JTlVURTsKKyAgICAvLyAgfQorICAgIC8vICAgIH0KKyAgICAvLworICAgIC8vICAgIHN0YXRpYyB2b2lkIF90ZXN0VXNpbmdGaWVsZHMoaW50IHksIGJvb2xlYW4gc3RhcnRzSW5EU1QpCisgICAgLy8gICAgeworICAgIC8vICBib29sZWFuIGxhc3REU1QgPSBzdGFydHNJbkRTVDsKKyAgICAvLyAgZm9yIChpbnQgbSA9IDA7IG0gPCAxMjsgKyttKQorICAgIC8vICB7CisgICAgLy8gICAgICBmb3IgKGludCBkID0gMTsgZCA8PSBNT05USF9MRU5HVEhbbV07ICsrZCkKKyAgICAvLyAgICAgIHsKKyAgICAvLyAgICAgIGZvciAoaW50IGggPSAwOyBoIDwgMjQ7ICsraCkKKyAgICAvLyAgICAgIHsKKyAgICAvLyAgICAgICAgICBmb3IgKGludCBtaW4gPSAwOyBtaW4gPCA2MDsgbWluICs9IDE1KQorICAgIC8vICAgICAgICAgIHsKKyAgICAvLyAgICAgICAgICBjYWwuY2xlYXIoKTsKKyAgICAvLyAgICAgICAgICBjYWwuc2V0KHksIG0sIGQsIGgsIG1pbik7CisgICAgLy8gICAgICAgICAgYm9vbGVhbiBpbkRheWxpZ2h0ID0gY2FsLmluRGF5bGlnaHRUaW1lKCk7CisgICAgLy8gICAgICAgICAgaWYgKGluRGF5bGlnaHQgIT0gbGFzdERTVCkKKyAgICAvLyAgICAgICAgICB7CisgICAgLy8gICAgICAgICAgICAgIGxhc3REU1QgPSBpbkRheWxpZ2h0OworICAgIC8vICAgICAgICAgICAgICBsb2coIlN3aXRjaCAiICsgKGxhc3REU1QgPyAiaW50byIgOiAib3V0IG9mIikKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKyAiIERTVCBhdCAiICsgeSArICIvIiArIChtKzEpICsgIi8iICsgZAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICArICIgIiArIHNob3dOTihoKSArICI6IiArIHNob3dOTihtaW4pKTsKKyAgICAvLyAgICAgICAgICAgICAgbG9nbG4oIiAiICsgY2FsLmdldFRpbWUoKSk7CisgICAgLy8KKyAgICAvLyAgICAgICAgICAgICAgY2FsLnNldCh5LCBtLCBkLCBoLTEsIDQ1KTsKKyAgICAvLyAgICAgICAgICAgICAgbG9nKCJCZWZvcmUgPSAiCisgICAgLy8rIHkgKyAiLyIgKyAobSsxKSArICIvIiArIGQKKyAgICAvLysgIiAiICsgc2hvd05OKGgtMSkgKyAiOiIgKyBzaG93Tk4oNDUpKTsKKyAgICAvLyAgICAgICAgICAgICAgbG9nbG4oIiAiICsgY2FsLmdldFRpbWUoKSk7CisgICAgLy8gICAgICAgICAgfQorICAgIC8vICAgICAgICAgIH0KKyAgICAvLyAgICAgIH0KKyAgICAvLyAgICAgIH0KKyAgICAvLyAgfQorICAgIC8vICAgIH0KKyAgICAvLworICAgIC8vICAgIHB1YmxpYyB2b2lkIFRlc3QxKCkKKyAgICAvLyAgICB7CisgICAgLy8gIGxvZ2xuKExvY2FsZS5nZXREZWZhdWx0KCkuZ2V0RGlzcGxheU5hbWUoKSk7CisgICAgLy8gIGxvZ2xuKFRpbWVab25lLmdldERlZmF1bHQoKS5nZXRJRCgpKTsKKyAgICAvLyAgbG9nbG4obmV3IERhdGUoMCkpOworICAgIC8vCisgICAgLy8gIGlmICh0cnVlKQorICAgIC8vICB7CisgICAgLy8gICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworICAgIC8vICAgICAgX3Rlc3RVc2luZ0JpbmFyeVNlYXJjaChuZXcgRGF0ZSg5NywwLDEpLCBmYWxzZSk7CisgICAgLy8gICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworICAgIC8vICAgICAgX3Rlc3RVc2luZ0JpbmFyeVNlYXJjaChuZXcgRGF0ZSg5Nyw2LDEpLCB0cnVlKTsKKyAgICAvLyAgfQorICAgIC8vCisgICAgLy8gIGlmICh0cnVlKQorICAgIC8vICB7CisgICAgLy8gICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworICAgIC8vICAgICAgbG9nbG4oIlN0ZXBwaW5nIHVzaW5nIG1pbGxpcyIpOworICAgIC8vICAgICAgX3Rlc3RVc2luZ01pbGxpcyhuZXcgRGF0ZSg5NywwLDEpLCBmYWxzZSk7CisgICAgLy8gIH0KKyAgICAvLworICAgIC8vICBpZiAodHJ1ZSkKKyAgICAvLyAgeworICAgIC8vICAgICAgbG9nbG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAvLyAgICAgIGxvZ2xuKCJTdGVwcGluZyB1c2luZyBmaWVsZHMiKTsKKyAgICAvLyAgICAgIF90ZXN0VXNpbmdGaWVsZHMoMTk5NywgZmFsc2UpOworICAgIC8vICB9CisgICAgLy8KKyAgICAvLyAgaWYgKGZhbHNlKQorICAgIC8vICB7CisgICAgLy8gICAgICBjYWwuY2xlYXIoKTsKKyAgICAvLyAgICAgIGNhbC5zZXQoMTk5NywgMywgNSwgMTAsIDApOworICAgIC8vICAgICAgLy8gIGNhbC5pbkRheWxpZ2h0VGltZSgpOworICAgIC8vICAgICAgbG9nbG4oIkRhdGUgPSAiICsgY2FsLmdldFRpbWUoKSk7CisgICAgLy8gICAgICBsb2dsbigiTWlsbGlzID0gIiArIGNhbC5nZXRUaW1lKCkuZ2V0VGltZSgpLzM2MDAwMDApOworICAgIC8vICB9CisgICAgLy8gICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2b2lkIF90ZXN0VXNpbmdCaW5hcnlTZWFyY2goU2ltcGxlVGltZVpvbmUgdHosIERhdGUgZCwgbG9uZyBleHBlY3RlZEJvdW5kYXJ5KQorICAgIHsKKyAgICAgICAgLy8gR2l2ZW4gYSBkYXRlIHdpdGggYSB5ZWFyIHN0YXJ0LCBmaW5kIHRoZSBEYXlsaWdodCBvbnNldAorICAgICAgICAvLyBhbmQgZW5kLiAgVGhlIGdpdmVuIGRhdGUgc2hvdWxkIGJlIDEvMS94eCBpbiBzb21lIHllYXIuCisKKyAgICAgICAgLy8gVXNlIGEgYmluYXJ5IHNlYXJjaCwgYXNzdW1pbmcgdGhhdCB3ZSBoYXZlIGEgU3RhbmRhcmQKKyAgICAgICAgLy8gdGltZSBhdCB0aGUgbWlkcG9pbnQuCisgICAgICAgIGxvbmcgbWluID0gZC5nZXRUaW1lKCk7CisgICAgICAgIGxvbmcgbWF4ID0gbWluICsgKGxvbmcpKDM2NS4yNSAvIDIgKiBPTkVfREFZKTsKKworICAgICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYm91bmRhcmllcworICAgICAgICBib29sZWFuIHN0YXJ0c0luRFNUID0gdHouaW5EYXlsaWdodFRpbWUoZCk7CisKKyAgICAgICAgaWYgKHR6LmluRGF5bGlnaHRUaW1lKG5ldyBEYXRlKG1heCkpID09IHN0YXJ0c0luRFNUKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dsbigiRXJyb3I6IGluRGF5bGlnaHRUaW1lKCIgKyAobmV3IERhdGUobWF4KSkgKyAiKSAhPSAiICsgKCFzdGFydHNJbkRTVCkpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKChtYXggLSBtaW4pID4gIElOVEVSVkFMKQorICAgICAgICB7CisgICAgICAgICAgICBsb25nIG1pZCA9IChtaW4gKyBtYXgpID4+IDE7CisgICAgICAgICAgICBpZiAodHouaW5EYXlsaWdodFRpbWUobmV3IERhdGUobWlkKSkgPT0gc3RhcnRzSW5EU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWluID0gbWlkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1heCA9IG1pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxvZ2xuKCJCaW5hcnkgU2VhcmNoIEJlZm9yZTogIiArIHNob3dEYXRlKG1pbikpOworICAgICAgICBsb2dsbigiQmluYXJ5IFNlYXJjaCBBZnRlcjogICIgKyBzaG93RGF0ZShtYXgpKTsKKworICAgICAgICBsb25nIG1pbmRlbHRhID0gZXhwZWN0ZWRCb3VuZGFyeSAtIG1pbjsKKyAgICAgICAgLy8gbm90IHVzZWQgbG9uZyBtYXhkZWx0YSA9IG1heCAtIGV4cGVjdGVkQm91bmRhcnk7CisgICAgICAgIGlmIChtaW5kZWx0YSA+PSAwICYmIG1pbmRlbHRhIDw9IElOVEVSVkFMICYmCisgICAgICAgICAgICBtaW5kZWx0YSA+PSAwICYmIG1pbmRlbHRhIDw9IElOVEVSVkFMKQorICAgICAgICAgICAgbG9nbG4oIlBBU1M6IEV4cGVjdGVkIGJvdW5kYXJ5IGF0ICIgKyBleHBlY3RlZEJvdW5kYXJ5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkIGJvdW5kYXJ5IGF0ICIgKyBleHBlY3RlZEJvdW5kYXJ5KTsKKyAgICB9CisKKyAgICAvKgorICAgICAgc3RhdGljIHZvaWQgX3Rlc3RVc2luZ01pbGxpcyhEYXRlIGQsIGJvb2xlYW4gc3RhcnRzSW5EU1QpCisgICAgICB7CisgICAgICBsb25nIG1pbGxpcyA9IGQuZ2V0VGltZSgpOworICAgICAgbG9uZyBtYXggPSBtaWxsaXMgKyAobG9uZykoMzcwICogT05FX0RBWSk7IC8vIEEgeWVhciBwbHVzIGV4dHJhCisKKyAgICAgIGJvb2xlYW4gbGFzdERTVCA9IHN0YXJ0c0luRFNUOworICAgICAgd2hpbGUgKG1pbGxpcyA8IG1heCkKKyAgICAgIHsKKyAgICAgIGNhbC5zZXRUaW1lKG5ldyBEYXRlKG1pbGxpcykpOworICAgICAgYm9vbGVhbiBpbkRheWxpZ2h0ID0gY2FsLmluRGF5bGlnaHRUaW1lKCk7CisKKyAgICAgIGlmIChpbkRheWxpZ2h0ICE9IGxhc3REU1QpCisgICAgICB7CisgICAgICBsb2dsbigiU3dpdGNoICIgKyAoaW5EYXlsaWdodCA/ICJpbnRvIiA6ICJvdXQgb2YiKQorICAgICAgKyAiIERTVCBhdCAiICsgKG5ldyBEYXRlKG1pbGxpcykpKTsKKyAgICAgIGxhc3REU1QgPSBpbkRheWxpZ2h0OworICAgICAgfQorCisgICAgICBtaWxsaXMgKz0gMTUqT05FX01JTlVURTsKKyAgICAgIH0KKyAgICAgIH0KKyAgICAgICovCisKKyAgICAvKioKKyAgICAgKiBUZXN0IG5ldyBydWxlIGZvcm1hdHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdE5ld1J1bGVzKCkKKyAgICB7CisgICAgICAgIC8vbG9nbG4oTG9jYWxlLmdldERlZmF1bHQoKS5nZXREaXNwbGF5TmFtZSgpKTsKKyAgICAgICAgLy9sb2dsbihUaW1lWm9uZS5nZXREZWZhdWx0KCkuZ2V0SUQoKSk7CisgICAgICAgIC8vbG9nbG4obmV3IERhdGUoMCkpOworCisgICAgICAgIGlmICh0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBkZWZhdWx0IFRpbWVab25lIGlzIGhlcmUsIHNpbmNlIHdlCisgICAgICAgICAgICAvLyBhcmUgY3JlYXRpbmcgb3VyIG93biBUaW1lWm9uZSBvYmplY3RzLgorCisgICAgICAgICAgICBTaW1wbGVUaW1lWm9uZSB0ejsKKyAgICAgICAgICAgIGphdmEudXRpbC5DYWxlbmRhciB0ZW1wY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisKKyAgICAgICAgICAgIGxvZ2xuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICAgICAgbG9nbG4oIkF1ZyAybmRUdWVzIC4uIE1hciAxNSIpOworICAgICAgICAgICAgdHogPSBuZXcgU2ltcGxlVGltZVpvbmUoLTgqT05FX0hPVVIsICJUZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuQVVHVVNULCAyLCBDYWxlbmRhci5UVUVTREFZLCAyKk9ORV9IT1VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuTUFSQ0gsIDE1LCAwLCAyKk9ORV9IT1VSKTsKKyAgICAgICAgICAgIC8vbG9nbG4odHoudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworICAgICAgICAgICAgdGVtcGNhbC5zZXQoMTk5NywgMCwgMSk7CisgICAgICAgICAgICBfdGVzdFVzaW5nQmluYXJ5U2VhcmNoKHR6LCB0ZW1wY2FsLmdldFRpbWUoKSwgODU4NDE2NDAwMDAwTCk7CisgICAgICAgICAgICBsb2dsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworICAgICAgICAgICAgdGVtcGNhbC5zZXQoMTk5NywgNiwgMSk7CisgICAgICAgICAgICBfdGVzdFVzaW5nQmluYXJ5U2VhcmNoKHR6LCB0ZW1wY2FsLmdldFRpbWUoKSwgODcxMzgwMDAwMDAwTCk7CisKKyAgICAgICAgICAgIGxvZ2xuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICAgICAgbG9nbG4oIkFwciBXZWQ+PTE0IC4uIFNlcCBTdW48PTIwIik7CisgICAgICAgICAgICB0eiA9IG5ldyBTaW1wbGVUaW1lWm9uZSgtOCpPTkVfSE9VUiwgIlRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5BUFJJTCwgMTQsIC1DYWxlbmRhci5XRURORVNEQVksIDIqT05FX0hPVVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5TRVBURU1CRVIsIC0yMCwgLUNhbGVuZGFyLlNVTkRBWSwgMipPTkVfSE9VUik7CisgICAgICAgICAgICAvL2xvZ2xuKHR6LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgbG9nbG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIDAsIDEpOworICAgICAgICAgICAgX3Rlc3RVc2luZ0JpbmFyeVNlYXJjaCh0eiwgdGVtcGNhbC5nZXRUaW1lKCksIDg2MTE4NDgwMDAwMEwpOworICAgICAgICAgICAgbG9nbG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIDYsIDEpOworICAgICAgICAgICAgX3Rlc3RVc2luZ0JpbmFyeVNlYXJjaCh0eiwgdGVtcGNhbC5nZXRUaW1lKCksIDg3NDIyNzYwMDAwMEwpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICBpZiAodHJ1ZSkKKyAgICAgICAgICB7CisgICAgICAgICAgbG9nbG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgICBsb2dsbigiU3RlcHBpbmcgdXNpbmcgbWlsbGlzIik7CisgICAgICAgICAgX3Rlc3RVc2luZ01pbGxpcyhuZXcgRGF0ZSg5NywwLDEpLCBmYWxzZSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHRydWUpCisgICAgICAgICAgeworICAgICAgICAgIGxvZ2xuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisgICAgICAgICAgbG9nbG4oIlN0ZXBwaW5nIHVzaW5nIGZpZWxkcyIpOworICAgICAgICAgIF90ZXN0VXNpbmdGaWVsZHMoMTk5NywgZmFsc2UpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgY2FsLnNldCgxOTk3LCAzLCA1LCAxMCwgMCk7CisgICAgICAgICAgLy8gICAgY2FsLmluRGF5bGlnaHRUaW1lKCk7CisgICAgICAgICAgbG9nbG4oIkRhdGUgPSAiICsgY2FsLmdldFRpbWUoKSk7CisgICAgICAgICAgbG9nbG4oIk1pbGxpcyA9ICIgKyBjYWwuZ2V0VGltZSgpLmdldFRpbWUoKS8zNjAwMDAwKTsKKyAgICAgICAgICB9CisgICAgICAgICAgKi8KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBMb25nIEJ1ZworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy9wdWJsaWMgdm9pZCBUZXN0MygpCisgICAgLy97CisgICAgLy8gICAgZmluZERheWxpZ2h0Qm91bmRhcnlVc2luZ1RpbWVab25lKG5ldyBEYXRlKDk3LDYsMSksIHRydWUpOworICAgIC8vfQorCisgICAgLyoqCisgICAgICogRmluZCBib3VuZGFyaWVzIGJ5IHN0ZXBwaW5nLgorICAgICAqLworICAgIHZvaWQgZmluZEJvdW5kYXJpZXNTdGVwd2lzZShpbnQgeWVhciwgbG9uZyBpbnRlcnZhbCwgVGltZVpvbmUgeiwgaW50IGV4cGVjdGVkQ2hhbmdlcykKKyAgICB7CisgICAgICAgIGphdmEudXRpbC5DYWxlbmRhciB0ZW1wY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIHRlbXBjYWwuY2xlYXIoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoeWVhciwgQ2FsZW5kYXIuSkFOVUFSWSwgMSk7CisgICAgICAgIERhdGUgZCA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICBsb25nIHRpbWUgPSBkLmdldFRpbWUoKTsgLy8gbXMKKyAgICAgICAgbG9uZyBsaW1pdCA9IHRpbWUgKyBPTkVfWUVBUiArIE9ORV9EQVk7CisgICAgICAgIGJvb2xlYW4gbGFzdFN0YXRlID0gei5pbkRheWxpZ2h0VGltZShkKTsKKyAgICAgICAgaW50IGNoYW5nZXMgPSAwOworICAgICAgICBsb2dsbigiLS0gWm9uZSAiICsgei5nZXRJRCgpICsgIiBzdGFydHMgaW4gIiArIHllYXIgKyAiIHdpdGggRFNUID0gIiArIGxhc3RTdGF0ZSk7CisgICAgICAgIGxvZ2xuKCJ1c2VEYXlsaWdodFRpbWUgPSAiICsgei51c2VEYXlsaWdodFRpbWUoKSk7CisgICAgICAgIHdoaWxlICh0aW1lIDwgbGltaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGQuc2V0VGltZSh0aW1lKTsKKyAgICAgICAgICAgIGJvb2xlYW4gc3RhdGUgPSB6LmluRGF5bGlnaHRUaW1lKGQpOworICAgICAgICAgICAgaWYgKHN0YXRlICE9IGxhc3RTdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2dsbigoc3RhdGUgPyAiRW50cnkgIiA6ICJFeGl0ICIpICsKKyAgICAgICAgICAgICAgICAgICAgICAiYXQgIiArIGQpOworICAgICAgICAgICAgICAgIGxhc3RTdGF0ZSA9IHN0YXRlOworICAgICAgICAgICAgICAgICsrY2hhbmdlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRpbWUgKz0gaW50ZXJ2YWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5nZXMgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFsYXN0U3RhdGUgJiYgIXoudXNlRGF5bGlnaHRUaW1lKCkpIGxvZ2xuKCJObyBEU1QiKTsKKyAgICAgICAgICAgIGVsc2UgZXJybG4oIkZBSUw6IERTVCBhbGwgeWVhciwgb3Igbm8gRFNUIHdpdGggdHJ1ZSB1c2VEYXlsaWdodFRpbWUiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaGFuZ2VzICE9IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgY2hhbmdlcyArICIgY2hhbmdlcyBzZWVuOyBzaG91bGQgc2VlIDAgb3IgMiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCF6LnVzZURheWxpZ2h0VGltZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogdXNlRGF5bGlnaHRUaW1lIGZhbHNlIGJ1dCAyIGNoYW5nZXMgc2VlbiIpOworICAgICAgICB9CisgICAgICAgIGlmIChjaGFuZ2VzICE9IGV4cGVjdGVkQ2hhbmdlcykKKyAgICAgICAgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBjaGFuZ2VzICsgIiBjaGFuZ2VzIHNlZW47IGV4cGVjdGVkICIgKyBleHBlY3RlZENoYW5nZXMpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFN0ZXB3aXNlKCkKKyAgICB7CisgICAgICAgIGZpbmRCb3VuZGFyaWVzU3RlcHdpc2UoMTk5NywgT05FX0RBWSwgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkVTVCIpLCAyKTsKKyAgICAgICAgZmluZEJvdW5kYXJpZXNTdGVwd2lzZSgxOTk3LCBPTkVfREFZLCBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiQUNUIiksIDIpOyAvLyBVcGRhdGVkIDNKYW4wMQorICAgICAgICBmaW5kQm91bmRhcmllc1N0ZXB3aXNlKDE5OTcsIE9ORV9EQVksIFRpbWVab25lLmdldFRpbWVab25lKCJBbWVyaWNhL1Bob2VuaXgiKSwgMCk7IC8vIEFkZGVkIDNKYW4wMQorICAgICAgICBmaW5kQm91bmRhcmllc1N0ZXB3aXNlKDE5OTcsIE9ORV9EQVksIFRpbWVab25lLmdldFRpbWVab25lKEFVU1RSQUxJQSksIDIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90aW1lem9uZS9UaW1lWm9uZVJlZ3Jlc3Npb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90aW1lem9uZS9UaW1lWm9uZVJlZ3Jlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNmVmNzZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RpbWV6b25lL1RpbWVab25lUmVncmVzc2lvbi5qYXZhCkBAIC0wLDAgKzEsOTY1IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RpbWV6b25lL1RpbWVab25lUmVncmVzc2lvbi5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjI6MDQ6MzkgJAorICogJFJldmlzaW9uOiAxLjggJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqCisgKiBAdGVzdCAxLjE4IDk5LzA5LzIxCisgKiBAYnVnIDQwNTI5NjcgNDA3MzIwOSA0MDczMjE1IDQwODQ5MzMgNDA5Njk1MiA0MTA5MzE0IDQxMjY2NzggNDE1MTQwNiA0MTUxNDI5CisgKiBAYnVnIDQxNTQ1MjUgNDE1NDUzNyA0MTU0NTQyIDQxNTQ2NTAgNDE1OTkyMiA0MTYyNTkzIDQxNzM2MDQgNDE3NjY4NiA0MTg0MjI5IDQyMDg5NjAKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnRpbWV6b25lOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKK3B1YmxpYyBjbGFzcyBUaW1lWm9uZVJlZ3Jlc3Npb24gZXh0ZW5kcyBUZXN0Rm13ayB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFRpbWVab25lUmVncmVzc2lvbigpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA1Mjk2NygpIHsKKyAgICAgICAgbG9nbG4oIioqKiBDSEVDSyBUSU1FWk9ORSBBR0FJTlNUIEhPU1QgT1MgU0VUVElORyAqKioiKTsKKwlTdHJpbmcgaWQgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCkuZ2V0SUQoKTsKKyAgICAgICAgbG9nbG4oInVzZXIudGltZXpvbmU6ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIudGltZXpvbmUiLCAiPG5vdCBzZXQ+IikpOworCWxvZ2xuKCJUaW1lWm9uZS5nZXREZWZhdWx0KCkuZ2V0SUQoKTogIiArIGlkKTsKKyAgICAgICAgbG9nbG4obmV3IERhdGUoKS50b1N0cmluZygpKTsKKyAgICAgICAgbG9nbG4oIioqKiBUSEUgUkVTVUxUUyBPRiBUSElTIFRFU1QgTVVTVCBCRSBWRVJJRklFRCBNQU5VQUxMWSAqKioiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA3MzIwOSgpIHsKKyAgICAgICAgVGltZVpvbmUgejEgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisgICAgICAgIFRpbWVab25lIHoyID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpOworICAgICAgICBpZiAoejEgPT0gejIpIGVycmxuKCJGYWlsOiBUaW1lWm9uZSBzaG91bGQgcmV0dXJuIGNsb25lcyIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MDczMjE1KCkgeworICAgICAgICBTaW1wbGVUaW1lWm9uZSB6ID0gKFNpbXBsZVRpbWVab25lKSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIik7CisgICAgICAgIGlmICh6LnVzZURheWxpZ2h0VGltZSgpKQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IEZpeCB0ZXN0IHRvIHN0YXJ0IHdpdGggbm9uLURTVCB6b25lIik7CisgICAgICAgIHouc2V0U3RhcnRSdWxlKENhbGVuZGFyLkZFQlJVQVJZLCAxLCBDYWxlbmRhci5TVU5EQVksIDApOworICAgICAgICB6LnNldEVuZFJ1bGUoQ2FsZW5kYXIuTUFSQ0gsIC0xLCBDYWxlbmRhci5TVU5EQVksIDApOworICAgICAgICBpZiAoIXoudXNlRGF5bGlnaHRUaW1lKCkpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogRFNUIG5vdCBhY3RpdmUiKTsKKyAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIHRlbXBjYWwgPSBqYXZhLnV0aWwuQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgdGVtcGNhbC5jbGVhcigpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk3LCBDYWxlbmRhci5KQU5VQVJZLCAzMSk7CisgICAgICAgIERhdGUgZDEgPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5NywgQ2FsZW5kYXIuTUFSQ0gsIDEpOworICAgICAgICBEYXRlIGQyID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTcsIENhbGVuZGFyLk1BUkNILCAzMSk7CisgICAgICAgIERhdGUgZDMgPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgaWYgKHouaW5EYXlsaWdodFRpbWUoZDEpIHx8ICF6LmluRGF5bGlnaHRUaW1lKGQyKSB8fAorICAgICAgICAgICAgei5pbkRheWxpZ2h0VGltZShkMykpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBEU1Qgbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBUaW1lWm9uZSBhcm91bmQgdGhlIGJvdW5kYXJpZXMgaXM6CisgICAgICogKEFzc3VtZSB0cmFuc2l0aW9uIHRpbWUgb2YgMjowMCBBTSkKKyAgICAgKiAgICBkYXkgb2Ygb25zZXQgMTo1OSBBTSBTVEQgID0gZGlzcGxheSBuYW1lIDE6NTkgQU0gU1QKKyAgICAgKiAgICAgICAgICAgICAgICAgMjowMCBBTSBTVEQgID0gZGlzcGxheSBuYW1lIDM6MDAgQU0gRFQKKyAgICAgKiAgICBkYXkgb2YgZW5kICAgMDo1OSBBTSBTVEQgID0gZGlzcGxheSBuYW1lIDE6NTkgQU0gRFQKKyAgICAgKiAgICAgICAgICAgICAgICAgMTowMCBBTSBTVEQgID0gZGlzcGxheSBuYW1lIDE6MDAgQU0gU1QKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDA4NDkzMygpIHsKKyAgICAgICAgVGltZVpvbmUgdHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisKKyAgICAgICAgbG9uZyBvZmZzZXQxID0gdHouZ2V0T2Zmc2V0KDEsCisgICAgICAgICAgICAxOTk3LCBDYWxlbmRhci5PQ1RPQkVSLCAyNiwgQ2FsZW5kYXIuU1VOREFZLCAoMio2MCo2MCoxMDAwKSk7CisgICAgICAgIGxvbmcgb2Zmc2V0MiA9IHR6LmdldE9mZnNldCgxLAorICAgICAgICAgICAgMTk5NywgQ2FsZW5kYXIuT0NUT0JFUiwgMjYsIENhbGVuZGFyLlNVTkRBWSwgKDIqNjAqNjAqMTAwMCktMSk7CisKKyAgICAgICAgbG9uZyBvZmZzZXQzID0gdHouZ2V0T2Zmc2V0KDEsCisgICAgICAgICAgICAxOTk3LCBDYWxlbmRhci5PQ1RPQkVSLCAyNiwgQ2FsZW5kYXIuU1VOREFZLCAoMSo2MCo2MCoxMDAwKSk7CisgICAgICAgIGxvbmcgb2Zmc2V0NCA9IHR6LmdldE9mZnNldCgxLAorICAgICAgICAgICAgMTk5NywgQ2FsZW5kYXIuT0NUT0JFUiwgMjYsIENhbGVuZGFyLlNVTkRBWSwgKDEqNjAqNjAqMTAwMCktMSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIFRoZSBmb2xsb3dpbmcgd2FzIGFkZGVkIGp1c3QgZm9yIGNvbnNpc3RlbmN5LiAgSXQgc2hvd3MgdGhhdCBnb2luZyAqdG8qIERheWxpZ2h0CisgICAgICAgICAqICBTYXZpbmdzIFRpbWUgKFBEVCkgZG9lcyB3b3JrIGF0IDJhbS4KKyAgICAgICAgICovCisKKyAgICAgICAgbG9uZyBvZmZzZXQ1ID0gdHouZ2V0T2Zmc2V0KDEsCisgICAgICAgICAgICAxOTk3LCBDYWxlbmRhci5BUFJJTCwgNiwgQ2FsZW5kYXIuU1VOREFZLCAoMio2MCo2MCoxMDAwKSk7CisgICAgICAgIGxvbmcgb2Zmc2V0NiA9IHR6LmdldE9mZnNldCgxLAorICAgICAgICAgICAgMTk5NywgQ2FsZW5kYXIuQVBSSUwsIDYsIENhbGVuZGFyLlNVTkRBWSwgKDIqNjAqNjAqMTAwMCktMSk7CisKKyAgICAgICAgbG9uZyBvZmZzZXQ3ID0gdHouZ2V0T2Zmc2V0KDEsCisgICAgICAgICAgICAxOTk3LCBDYWxlbmRhci5BUFJJTCwgNiwgQ2FsZW5kYXIuU1VOREFZLCAoMSo2MCo2MCoxMDAwKSk7CisgICAgICAgIGxvbmcgb2Zmc2V0OCA9IHR6LmdldE9mZnNldCgxLAorICAgICAgICAgICAgMTk5NywgQ2FsZW5kYXIuQVBSSUwsIDYsIENhbGVuZGFyLlNVTkRBWSwgKDEqNjAqNjAqMTAwMCktMSk7CisKKyAgICAgICAgbG9uZyBTVG9mZnNldCA9IC04ICogNjAqNjAqMTAwMEw7CisgICAgICAgIGxvbmcgRFRvZmZzZXQgPSAtNyAqIDYwKjYwKjEwMDBMOworICAgICAgICBpZiAob2Zmc2V0MSAhPSBTVG9mZnNldCB8fCBvZmZzZXQyICE9IFNUb2Zmc2V0IHx8CisgICAgICAgICAgICBvZmZzZXQzICE9IFNUb2Zmc2V0IHx8IG9mZnNldDQgIT0gRFRvZmZzZXQgfHwKKyAgICAgICAgICAgIG9mZnNldDUgIT0gRFRvZmZzZXQgfHwgb2Zmc2V0NiAhPSBTVG9mZnNldCB8fAorICAgICAgICAgICAgb2Zmc2V0NyAhPSBTVG9mZnNldCB8fCBvZmZzZXQ4ICE9IFNUb2Zmc2V0KQorICAgICAgICAgICAgZXJybG4oIkZhaWw6IFRpbWVab25lIG1pc2JlaGF2aW5nIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdDQwOTY5NTIoKSB7CisgICAgICAgIFN0cmluZ1tdIFpPTkVTID0geyAiR01UIiwgIk1FVCIsICJJU1QiIH07CisgICAgICAgIGJvb2xlYW4gcGFzcyA9IHRydWU7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8Wk9ORVMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBUaW1lWm9uZSB6b25lID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoWk9ORVNbaV0pOworICAgICAgICAgICAgICAgIGlmICghem9uZS5nZXRJRCgpLmVxdWFscyhaT05FU1tpXSkpCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBUZXN0IGJyb2tlbjsgem9uZXMgbm90IGluc3RhbnRpYXRpbmciKTsKKworICAgICAgICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zOworICAgICAgICAgICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvc3RyZWFtID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdE91dHB1dFN0cmVhbShiYW9zID0gbmV3IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpKTsKKyAgICAgICAgICAgICAgICBvc3RyZWFtLndyaXRlT2JqZWN0KHpvbmUpOworICAgICAgICAgICAgICAgIG9zdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBiYW9zLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gaXN0cmVhbSA9CisgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RJbnB1dFN0cmVhbShuZXcgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbShiYW9zLnRvQnl0ZUFycmF5KCkpKTsKKyAgICAgICAgICAgICAgICBUaW1lWm9uZSBmcmFua2VuWm9uZSA9IChUaW1lWm9uZSkgaXN0cmVhbS5yZWFkT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgLy9sb2dsbigiWm9uZTogICAgICAgICIgKyB6b25lKTsKKyAgICAgICAgICAgICAgICAvL2xvZ2xuKCJGcmFua2VuWm9uZTogIiArIGZyYW5rZW5ab25lKTsKKyAgICAgICAgICAgICAgICBpZiAoIXpvbmUuZXF1YWxzKGZyYW5rZW5ab25lKSkgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiVGltZVpvbmUgIiArIHpvbmUuZ2V0SUQoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgbm90IGVxdWFsIHRvIHNlcmlhbGl6ZWQvZGVzZXJpYWxpemVkIG9uZSIpOworICAgICAgICAgICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwYXNzKSBlcnJsbigiRmFpbDogVGltZVpvbmUgc2VyaWFsaXphdGlvbi9lcXVhbGl0eSBidWciKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBlKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6ICIgKyBlKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDEwOTMxNCgpIHsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgdGVzdENhbCA9IChHcmVnb3JpYW5DYWxlbmRhcilDYWxlbmRhci5nZXRJbnN0YW5jZSgpOyAKKyAgICAgICAgVGltZVpvbmUgUFNUID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpOworICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICB0ZW1wY2FsLmNsZWFyKCk7CisgICAgICAgIHRlbXBjYWwuc2V0KDE5OTgsQ2FsZW5kYXIuQVBSSUwsNCwyMiwwKTsKKyAgICAgICAgRGF0ZSBkMSA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk4LENhbGVuZGFyLkFQUklMLDUsNiwwKTsKKyAgICAgICAgRGF0ZSBkMiA9IHRlbXBjYWwuZ2V0VGltZSgpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTk4LENhbGVuZGFyLk9DVE9CRVIsMjQsMjIsMCk7CisgICAgICAgIERhdGUgZDMgPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5OCxDYWxlbmRhci5PQ1RPQkVSLDI1LDYsMCk7CisgICAgICAgIERhdGUgZDQgPSB0ZW1wY2FsLmdldFRpbWUoKTsKKyAgICAgICAgT2JqZWN0W10gdGVzdERhdGEgPSB7CisgICAgICAgICAgICBQU1QsIGQxLCBkMiwKKyAgICAgICAgICAgIFBTVCwgZDMsIGQ0LAorICAgICAgICB9OworICAgICAgICBib29sZWFuIHBhc3M9dHJ1ZTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRlc3REYXRhLmxlbmd0aDsgaSs9MykgeworICAgICAgICAgICAgdGVzdENhbC5zZXRUaW1lWm9uZSgoVGltZVpvbmUpIHRlc3REYXRhW2ldKTsKKyAgICAgICAgICAgIGxvbmcgdCA9ICgoRGF0ZSl0ZXN0RGF0YVtpKzFdKS5nZXRUaW1lKCk7CisgICAgICAgICAgICBEYXRlIGVuZCA9IChEYXRlKSB0ZXN0RGF0YVtpKzJdOworICAgICAgICAgICAgd2hpbGUgKHQgPCBlbmQuZ2V0VGltZSgpKSB7IAorICAgICAgICAgICAgICAgIHRlc3RDYWwuc2V0VGltZShuZXcgRGF0ZSh0KSk7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja0NhbGVuZGFyMzE0KHRlc3RDYWwsIChUaW1lWm9uZSkgdGVzdERhdGFbaV0pKQorICAgICAgICAgICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdCArPSA2MCo2MCoxMDAwTDsKKyAgICAgICAgICAgIH0gCisgICAgICAgIH0KKyAgICAgICAgaWYgKCFwYXNzKSBlcnJsbigiRmFpbDogVFogQVBJIGluY29uc2lzdGVudCIpOworICAgIH0gCisKKyAgICBib29sZWFuIGNoZWNrQ2FsZW5kYXIzMTQoR3JlZ29yaWFuQ2FsZW5kYXIgdGVzdENhbCwgVGltZVpvbmUgdGVzdFRaKSB7IAorICAgICAgICAvLyBHcmVnb3JpYW5DYWxlbmRhciB0ZXN0Q2FsID0gKEdyZWdvcmlhbkNhbGVuZGFyKWFDYWwuY2xvbmUoKTsgCisKKyAgICAgICAgZmluYWwgaW50IE9ORV9EQVkgPSAyNCo2MCo2MCoxMDAwOworCisgICAgICAgIGludCB0ek9mZnNldCwgdHpSYXdPZmZzZXQ7IAorICAgICAgICBGbG9hdCB0ek9mZnNldEZsb2F0LHR6UmF3T2Zmc2V0RmxvYXQ7IAorICAgICAgICAvLyBIZXJlIGlzIHdoZXJlIHRoZSB1c2VyIG1hZGUgYW4gZXJyb3IuICBUaGV5IHdlcmUgcGFzc2luZyBpbiB0aGUgdmFsdWUgb2YKKyAgICAgICAgLy8gdGhlIE1JTExTRUNPTkQgZmllbGQ7IHlvdSBuZWVkIHRvIHBhc3MgaW4gdGhlIG1pbGxpcyBpbiB0aGUgZGF5IGluIFNUQU5EQVJECisgICAgICAgIC8vIHRpbWUuCisgICAgICAgIGludCBtaWxsaXMgPSB0ZXN0Q2FsLmdldChDYWxlbmRhci5NSUxMSVNFQ09ORCkgKworICAgICAgICAgICAgMTAwMCAqICh0ZXN0Q2FsLmdldChDYWxlbmRhci5TRUNPTkQpICsKKyAgICAgICAgICAgICAgICAgICAgNjAgKiAodGVzdENhbC5nZXQoQ2FsZW5kYXIuTUlOVVRFKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIDYwICogKHRlc3RDYWwuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSkpKSAtCisgICAgICAgICAgICB0ZXN0Q2FsLmdldChDYWxlbmRhci5EU1RfT0ZGU0VUKTsKKworICAgICAgICAvKiBGaXggdXAgbWlsbGlzIHRvIGJlIGluIHJhbmdlLiAgQVNTVU1FIFRIQVQgV0UgQVJFIE5PVCBBVCBUSEUKKyAgICAgICAgICogQkVHSU5OSU5HIE9SIEVORCBPRiBBIE1PTlRILiAgV2UgbXVzdCBhZGQgdGhpcyBjb2RlIGJlY2F1c2UKKyAgICAgICAgICogZ2V0T2Zmc2V0KCkgaGFzIGJlZW4gY2hhbmdlZCB0byBiZSBtb3JlIHN0cmljdCBhYm91dCB0aGUgcGFyYW1ldGVycworICAgICAgICAgKiBpdCByZWNlaXZlcyAtLSBpdCB0dXJucyBvdXQgdGhhdCB0aGlzIHRlc3Qgd2FzIHBhc3NpbmcgaW4gaWxsZWdhbAorICAgICAgICAgKiB2YWx1ZXMuICovCisgICAgICAgIGludCBkYXRlID0gdGVzdENhbC5nZXQoQ2FsZW5kYXIuREFURSk7CisgICAgICAgIGludCBkb3cgID0gdGVzdENhbC5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOworICAgICAgICB3aGlsZSAobWlsbGlzIDwgMCkgeworICAgICAgICAgICAgbWlsbGlzICs9IE9ORV9EQVk7CisgICAgICAgICAgICAtLWRhdGU7CisgICAgICAgICAgICBkb3cgPSBDYWxlbmRhci5TVU5EQVkgKyAoKGRvdyAtIENhbGVuZGFyLlNVTkRBWSArIDYpICUgNyk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG1pbGxpcyA+PSBPTkVfREFZKSB7CisgICAgICAgICAgICBtaWxsaXMgLT0gT05FX0RBWTsKKyAgICAgICAgICAgICsrZGF0ZTsKKyAgICAgICAgICAgIGRvdyA9IENhbGVuZGFyLlNVTkRBWSArICgoZG93IC0gQ2FsZW5kYXIuU1VOREFZICsgMSkgJSA3KTsKKyAgICAgICAgfQorCisgICAgICAgIHR6T2Zmc2V0ID0gdGVzdFRaLmdldE9mZnNldCh0ZXN0Q2FsLmdldChDYWxlbmRhci5FUkEpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDYWwuZ2V0KENhbGVuZGFyLllFQVIpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDYWwuZ2V0KENhbGVuZGFyLk1PTlRIKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXMpOyAKKyAgICAgICAgdHpSYXdPZmZzZXQgPSB0ZXN0VFouZ2V0UmF3T2Zmc2V0KCk7IAorICAgICAgICB0ek9mZnNldEZsb2F0ID0gbmV3IEZsb2F0KChmbG9hdCl0ek9mZnNldC8oZmxvYXQpMzYwMDAwMCk7IAorICAgICAgICB0elJhd09mZnNldEZsb2F0ID0gbmV3IEZsb2F0KChmbG9hdCl0elJhd09mZnNldC8oZmxvYXQpMzYwMDAwMCk7IAorCisgICAgICAgIERhdGUgdGVzdERhdGUgPSB0ZXN0Q2FsLmdldFRpbWUoKTsgCisKKyAgICAgICAgYm9vbGVhbiBpbkRheWxpZ2h0VGltZSA9IHRlc3RUWi5pbkRheWxpZ2h0VGltZSh0ZXN0RGF0ZSk7IAorICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHNkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJNTS9kZC95eXl5IEhIOm1tIik7IAorICAgICAgICBzZGYuc2V0Q2FsZW5kYXIodGVzdENhbCk7IAorICAgICAgICBTdHJpbmcgaW5EYXlsaWdodFRpbWVTdHJpbmc7IAorCisgICAgICAgIGJvb2xlYW4gcGFzc2VkOyAKKworICAgICAgICBpZiAoaW5EYXlsaWdodFRpbWUpIAorICAgICAgICB7IAorICAgICAgICAgICAgaW5EYXlsaWdodFRpbWVTdHJpbmcgPSAiIERTVCAiOyAKKyAgICAgICAgICAgIHBhc3NlZCA9ICh0ek9mZnNldCA9PSAodHpSYXdPZmZzZXQgKyAzNjAwMDAwKSk7CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgCisgICAgICAgIHsgCisgICAgICAgICAgICBpbkRheWxpZ2h0VGltZVN0cmluZyA9ICIgICAgICI7IAorICAgICAgICAgICAgcGFzc2VkID0gKHR6T2Zmc2V0ID09IHR6UmF3T2Zmc2V0KTsKKyAgICAgICAgfSAKKworICAgICAgICBTdHJpbmcgb3V0cHV0ID0gdGVzdFRaLmdldElEKCkgKyAiICIgKyBzZGYuZm9ybWF0KHRlc3REYXRlKSArCisgICAgICAgICAgICAiIE9mZnNldCgiICsgdHpPZmZzZXRGbG9hdCArICIpIiArCisgICAgICAgICAgICAiIFJhd09mZnNldCgiICsgdHpSYXdPZmZzZXRGbG9hdCArICIpIiArIAorICAgICAgICAgICAgIiAiICsgbWlsbGlzLyhmbG9hdCkzNjAwMDAwICsgIiAiICsKKyAgICAgICAgICAgIGluRGF5bGlnaHRUaW1lU3RyaW5nOyAKKworICAgICAgICBpZiAocGFzc2VkKSAKKyAgICAgICAgICAgIG91dHB1dCArPSAiICAgICAiOyAKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIG91dHB1dCArPSAiRVJST1IiOyAKKworICAgICAgICBpZiAocGFzc2VkKSBsb2dsbihvdXRwdXQpOyBlbHNlIGVycmxuKG91dHB1dCk7CisgICAgICAgIHJldHVybiBwYXNzZWQ7CisgICAgfSAKKworICAgIC8qKgorICAgICAqIENBTk5PVCBSRVBST0RVREUKKyAgICAgKgorICAgICAqIFlldCBhbm90aGVyIF9hbGxlZ2VkXyBidWcgaW4gVGltZVpvbmUuZ2V0T2Zmc2V0KCksIGEgbWV0aG9kIHRoYXQgbmV2ZXIKKyAgICAgKiBzaG91bGQgaGF2ZSBiZWVuIG1hZGUgcHVibGljLiAgSXQncyBzaW1wbHkgdG9vIGhhcmQgdG8gdXNlIGNvcnJlY3RseS4KKyAgICAgKgorICAgICAqIFRoZSBvcmlnaW5hbCB0ZXN0IGNvZGUgZmFpbGVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICogKDEpIENhbGwgQ2FsZW5kYXIuc2V0VGltZSgpIGJlZm9yZSBnZXR0aW5nIHRoZSBmaWVsZHMhCisgICAgICogKDIpIFVzZSB0aGUgcmlnaHQgbWlsbGlzIChhcyB1c3VhbCkgZm9yIGdldE9mZnNldCgpOyB0aGV5IHdlcmUgcGFzc2luZworICAgICAqICAgICBpbiB0aGUgTUlMTElTIGZpZWxkLCBpbnN0ZWFkIG9mIHRoZSBTVEFOREFSRCBNSUxMSVMgSU4gREFZLgorICAgICAqIFdoZW4geW91IGZpeCB0aGVzZSB0d28gcHJvYmxlbXMsIHRoZSB0ZXN0IHBhc3NlcywgYXMgZXhwZWN0ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxMjY2NzgoKSB7CisJLy8gTm90ZTogdGhpcyB0ZXN0IGRlcGVuZHMgb24gdGhlIFBTVCB0aW1lIHpvbmUuCisJVGltZVpvbmUgaW5pdGlhbFpvbmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIFRpbWVab25lIHR6ID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpOworCVRpbWVab25lLnNldERlZmF1bHQodHopOworICAgICAgICBjYWwuc2V0VGltZVpvbmUodHopOworCisgICAgICAgIGphdmEudXRpbC5DYWxlbmRhciB0ZW1wY2FsID0gamF2YS51dGlsLkNhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIHRlbXBjYWwuY2xlYXIoKTsKKyAgICAgICAgdGVtcGNhbC5zZXQoMTk5OCwgQ2FsZW5kYXIuQVBSSUwsIDUsIDEwLCAwKTsKKyAgICAgICAgRGF0ZSBkdCA9IHRlbXBjYWwuZ2V0VGltZSgpOworCS8vIHRoZSBkdCB2YWx1ZSBpcyBsb2NhbCB0aW1lIGluIFBTVC4KKyAgICAgICAgaWYgKCF0ei5pbkRheWxpZ2h0VGltZShkdCkpCisgICAgICAgICAgICBlcnJsbigiV2UncmUgbm90IGluIERheWxpZ2h0IFNhdmluZ3MgVGltZSBhbmQgd2Ugc2hvdWxkIGJlLlxuIik7CisKKyAgICAgICAgY2FsLnNldFRpbWUoZHQpOworICAgICAgICBpbnQgZXJhID0gY2FsLmdldChDYWxlbmRhci5FUkEpOworICAgICAgICBpbnQgeWVhciA9IGNhbC5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgIGludCBtb250aCA9IGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICBpbnQgZGF5ID0gY2FsLmdldChDYWxlbmRhci5EQVRFKTsKKyAgICAgICAgaW50IGRheU9mV2VlayA9IGNhbC5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOworICAgICAgICBpbnQgbWlsbGlzID0gY2FsLmdldChDYWxlbmRhci5NSUxMSVNFQ09ORCkgKworICAgICAgICAgICAgKGNhbC5nZXQoQ2FsZW5kYXIuU0VDT05EKSArCisgICAgICAgICAgICAgKGNhbC5nZXQoQ2FsZW5kYXIuTUlOVVRFKSArCisgICAgICAgICAgICAgIChjYWwuZ2V0KENhbGVuZGFyLkhPVVIpICogNjApICogNjApICogMTAwMCkgLQorICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5EU1RfT0ZGU0VUKTsKKworICAgICAgICBsb25nIG9mZnNldCA9IHR6LmdldE9mZnNldChlcmEsIHllYXIsIG1vbnRoLCBkYXksIGRheU9mV2VlaywgbWlsbGlzKTsKKyAgICAgICAgbG9uZyByYXdfb2Zmc2V0ID0gdHouZ2V0UmF3T2Zmc2V0KCk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gcmF3X29mZnNldCkKKyAgICAgICAgICAgIGVycmxuKCJPZmZzZXRzIHNob3VsZCBub3QgbWF0Y2ggd2hlbiBpbiBEU1QiKTsKKworCS8vIHJlc3RvcmUgdGhlIGluaXRpYWwgdGltZSB6b25lIHNvIHRoYXQgdGhpcyB0ZXN0IGNhc2UKKwkvLyBkb2Vzbid0IGFmZmVjdCB0aGUgb3RoZXJzLgorCVRpbWVab25lLnNldERlZmF1bHQoaW5pdGlhbFpvbmUpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUaW1lWm9uZS5nZXRBdmFpbGFibGVJRHMoaW50KSB0aHJvd3MgZXhjZXB0aW9uIGZvciBjZXJ0YWluIHZhbHVlcywKKyAgICAgKiBkdWUgdG8gYSBmYXVsdHkgY29uc3RhbnQgaW4gVGltZVpvbmUuamF2YS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE1MTQwNigpIHsKKyAgICAgICAgaW50IG1heCA9IDA7CisgICAgICAgIGZvciAoaW50IGg9LTI4OyBoPD0zMDsgKytoKSB7CisgICAgICAgICAgICAvLyBoIGlzIGluIGhhbGYtaG91cnMgZnJvbSBHTVQ7IHJhd29mZnNldCBpcyBpbiBtaWxsaXMKKyAgICAgICAgICAgIGludCByYXdvZmZzZXQgPSBoICogMTgwMDAwMDsKKyAgICAgICAgICAgIGludCBoaCA9IChoPDApID8gLWggOiBoOworICAgICAgICAgICAgU3RyaW5nIGhuYW1lID0gKChoPDApID8gIkdNVC0iIDogIkdNVCsiKSArCisgICAgICAgICAgICAgICAgKChoaC8yIDwgMTApID8gIjAiIDogIiIpICsKKyAgICAgICAgICAgICAgICAoaGgvMikgKyAnOicgKworICAgICAgICAgICAgICAgICgoaGglMj09MCkgPyAiMDAiIDogIjMwIik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN0cmluZ1tdIGlkcyA9IFRpbWVab25lLmdldEF2YWlsYWJsZUlEcyhyYXdvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoID4gbWF4KSBtYXggPSBpZHMubGVuZ3RoOworICAgICAgICAgICAgICAgIGxvZ2xuKGhuYW1lICsgJyAnICsgaWRzLmxlbmd0aCArCisgICAgICAgICAgICAgICAgICAgICAgKChpZHMubGVuZ3RoID4gMCkgPyAoIiBlLmcuICIgKyBpZHNbMF0pIDogIiIpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oaG5hbWUgKyAnICcgKyAiRmFpbDogIiArIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxvZ2xuKCJNYXhpbXVtIHpvbmVzIHBlciBvZmZzZXQgPSAiICsgbWF4KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE1MTQyOSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRpbWVab25lIHR6ID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB0ei5nZXREaXNwbGF5TmFtZSh0cnVlLCBJbnRlZ2VyLk1BWF9WQUxVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgICAgICBuYW1lID0gbnVsbDsKKyAgICAgICAgICAgIGVycmxuKCJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gbm90IHRocm93biBieSBUaW1lWm9uZS5nZXREaXNwbGF5TmFtZSgpIik7CisgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2ltcGxlVGltZVpvbmUgYWNjZXB0cyBpbGxlZ2FsIERTVCBzYXZpbmdzIHZhbHVlcy4gIFRoZXNlIHZhbHVlcworICAgICAqIG11c3QgYmUgbm9uLXplcm8uICBUaGVyZSBpcyBubyB1cHBlciBsaW1pdCBhdCB0aGlzIHRpbWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNTQ1MjUoKSB7CisgICAgICAgIGZpbmFsIGludCBHT09EID0gMSwgQkFEID0gMDsKKyAgICAgICAgaW50W10gREFUQSA9IHsKKyAgICAgICAgICAgIDEsIEdPT0QsCisgICAgICAgICAgICAwLCBCQUQsCisgICAgICAgICAgICAtMSwgQkFELAorICAgICAgICAgICAgNjAqNjAqMTAwMCwgR09PRCwKKyAgICAgICAgICAgIEludGVnZXIuTUlOX1ZBTFVFLCBCQUQsCisgICAgICAgICAgICAvLyBJbnRlZ2VyLk1BWF9WQUxVRSwgPywgLy8gbm8gdXBwZXIgbGltaXQgb24gRFNUIHNhdmluZ3MgYXQgdGhpcyB0aW1lCisgICAgICAgIH07CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MikgeworICAgICAgICAgICAgaW50IHNhdmluZ3MgPSBEQVRBW2ldOworICAgICAgICAgICAgYm9vbGVhbiB2YWxpZCA9IERBVEFbaSsxXSA9PSBHT09EOworICAgICAgICAgICAgU3RyaW5nIG1ldGhvZCA9IG51bGw7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8MjsgKytqKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChqKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJjb25zdHJ1Y3RvciI7CisgICAgICAgICAgICAgICAgICAgICAgICBTaW1wbGVUaW1lWm9uZSB6ID0gbmV3IFNpbXBsZVRpbWVab25lKDAsICJpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuSkFOVUFSWSwgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5NQVJDSCwgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZpbmdzKTsgLy8gPC0gd2hhdCB3ZSdyZSBpbnRlcmVzdGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gInNldERTVFNhdmluZ3MoKSI7CisgICAgICAgICAgICAgICAgICAgICAgICB6ID0gbmV3IFNpbXBsZVRpbWVab25lKDAsICJHTVQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHouc2V0RFNUU2F2aW5ncyhzYXZpbmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nbG4oIlBhc3M6IERTVCBzYXZpbmdzIG9mICIgKyBzYXZpbmdzICsgIiBhY2NlcHRlZCBieSAiICsgbWV0aG9kKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBEU1Qgc2F2aW5ncyBvZiAiICsgc2F2aW5ncyArICIgYWNjZXB0ZWQgYnkgIiArIG1ldGhvZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBEU1Qgc2F2aW5ncyBvZiAiICsgc2F2aW5ncyArICIgdG8gIiArIG1ldGhvZCArICIgZ2F2ZSAiICsgZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dsbigiUGFzczogRFNUIHNhdmluZ3Mgb2YgIiArIHNhdmluZ3MgKyAiIHRvICIgKyBtZXRob2QgKyAiIGdhdmUgIiArIGUpOworICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2ltcGxlVGltZVpvbmUuaGFzU2FtZVJ1bGVzKCkgZG9lc24ndCB3b3JrIGZvciB6b25lcyB3aXRoIG5vIERTVAorICAgICAqIGFuZCBkaWZmZXJlbnQgRFNUIHBhcmFtZXRlcnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdDQxNTQ1MzcoKSB7CisgICAgICAgIC8vIHR6MSBhbmQgdHoyIGhhdmUgbm8gRFNUIGFuZCBkaWZmZXJlbnQgcnVsZSBwYXJhbWV0ZXJzCisgICAgICAgIFNpbXBsZVRpbWVab25lIHR6MSA9IG5ldyBTaW1wbGVUaW1lWm9uZSgwLCAiMSIsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDApOworICAgICAgICBTaW1wbGVUaW1lWm9uZSB0ejIgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgIjIiLCAxLCAwLCAwLCAwLCAzLCAwLCAwLCAwKTsKKyAgICAgICAgLy8gdHphIGFuZCB0ekEgaGF2ZSB0aGUgc2FtZSBydWxlIHBhcmFtcworICAgICAgICBTaW1wbGVUaW1lWm9uZSB0emEgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgImEiLCAwLCAxLCAwLCAwLCAzLCAyLCAwLCAwKTsKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgdHpBID0gbmV3IFNpbXBsZVRpbWVab25lKDAsICJBIiwgMCwgMSwgMCwgMCwgMywgMiwgMCwgMCk7CisgICAgICAgIC8vIHR6YiBkaWZmZXJzIGZyb20gdHphCisgICAgICAgIFNpbXBsZVRpbWVab25lIHR6YiA9IG5ldyBTaW1wbGVUaW1lWm9uZSgwLCAiYiIsIDAsIDEsIDAsIDAsIDMsIDEsIDAsIDApOworICAgICAgICBpZiAodHoxLnVzZURheWxpZ2h0VGltZSgpIHx8IHR6Mi51c2VEYXlsaWdodFRpbWUoKSB8fAorICAgICAgICAgICAgIXR6YS51c2VEYXlsaWdodFRpbWUoKSB8fCAhdHpBLnVzZURheWxpZ2h0VGltZSgpIHx8CisgICAgICAgICAgICAhdHpiLnVzZURheWxpZ2h0VGltZSgpKSB7CisgICAgICAgICAgICBlcnJsbigiVGVzdCBpcyBicm9rZW4gLS0gcmV3cml0ZSBpdCIpOworICAgICAgICB9CisgICAgICAgIGlmICghdHphLmhhc1NhbWVSdWxlcyh0ekEpIHx8IHR6YS5oYXNTYW1lUnVsZXModHpiKSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6IGhhc1NhbWVSdWxlcygpIGJyb2tlbiBmb3Igem9uZXMgd2l0aCBydWxlcyIpOworICAgICAgICB9CisgICAgICAgIGlmICghdHoxLmhhc1NhbWVSdWxlcyh0ejIpKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbDogaGFzU2FtZVJ1bGVzKCkgcmV0dXJucyBmYWxzZSBmb3Igem9uZXMgd2l0aG91dCBydWxlcyIpOworICAgICAgICAgICAgZXJybG4oInpvbmUgMSA9ICIgKyB0ejEpOworICAgICAgICAgICAgZXJybG4oInpvbmUgMiA9ICIgKyB0ejIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2ltcGxlVGltZVpvbmUgY29uc3RydWN0b3JzLCBzZXRTdGFydFJ1bGUoKSwgYW5kIHNldEVuZFJ1bGUoKSBkb24ndAorICAgICAqIGNoZWNrIGZvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnRzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTU0NTQyKCkgeworICAgICAgICBmaW5hbCBpbnQgR09PRCA9IDE7CisgICAgICAgIGZpbmFsIGludCBCQUQgID0gMDsKKworICAgICAgICBmaW5hbCBpbnQgR09PRF9NT05USCAgICAgICA9IENhbGVuZGFyLkpBTlVBUlk7CisgICAgICAgIGZpbmFsIGludCBHT09EX0RBWSAgICAgICAgID0gMTsKKyAgICAgICAgZmluYWwgaW50IEdPT0RfREFZX09GX1dFRUsgPSBDYWxlbmRhci5TVU5EQVk7CisgICAgICAgIGZpbmFsIGludCBHT09EX1RJTUUgICAgICAgID0gMDsKKworICAgICAgICBpbnRbXSBEQVRBID0geworICAgICAgICAgICAgR09PRCwgSW50ZWdlci5NSU5fVkFMVUUsICAgIDAsICBJbnRlZ2VyLk1BWF9WQUxVRSwgICBJbnRlZ2VyLk1JTl9WQUxVRSwKKyAgICAgICAgICAgIEdPT0QsIENhbGVuZGFyLkpBTlVBUlksICAgIC01LCAgQ2FsZW5kYXIuU1VOREFZLCAgICAgMCwKKyAgICAgICAgICAgIEdPT0QsIENhbGVuZGFyLkRFQ0VNQkVSLCAgICA1LCAgQ2FsZW5kYXIuU0FUVVJEQVksICAgMjQqNjAqNjAqMTAwMC0xLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuREVDRU1CRVIsICAgIDUsICBDYWxlbmRhci5TQVRVUkRBWSwgICAyNCo2MCo2MCoxMDAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuREVDRU1CRVIsICAgIDUsICBDYWxlbmRhci5TQVRVUkRBWSwgIC0xLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuSkFOVUFSWSwgICAgLTYsICBDYWxlbmRhci5TVU5EQVksICAgICAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuREVDRU1CRVIsICAgIDYsICBDYWxlbmRhci5TQVRVUkRBWSwgICAyNCo2MCo2MCoxMDAwLAorICAgICAgICAgICAgR09PRCwgQ2FsZW5kYXIuREVDRU1CRVIsICAgIDEsICAwLCAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgR09PRCwgQ2FsZW5kYXIuREVDRU1CRVIsICAgMzEsICAwLCAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuQVBSSUwsICAgICAgMzEsICAwLCAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuREVDRU1CRVIsICAgMzIsICAwLCAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuSkFOVUFSWS0xLCAgIDEsICBDYWxlbmRhci5TVU5EQVksICAgICAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuREVDRU1CRVIrMSwgIDEsICBDYWxlbmRhci5TVU5EQVksICAgICAwLAorICAgICAgICAgICAgR09PRCwgQ2FsZW5kYXIuREVDRU1CRVIsICAgMzEsIC1DYWxlbmRhci5TVU5EQVksICAgICAwLAorICAgICAgICAgICAgR09PRCwgQ2FsZW5kYXIuREVDRU1CRVIsICAgMzEsIC1DYWxlbmRhci5TQVRVUkRBWSwgICAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuREVDRU1CRVIsICAgMzIsIC1DYWxlbmRhci5TQVRVUkRBWSwgICAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuREVDRU1CRVIsICAtMzIsIC1DYWxlbmRhci5TQVRVUkRBWSwgICAwLAorICAgICAgICAgICAgQkFELCAgQ2FsZW5kYXIuREVDRU1CRVIsICAgMzEsIC1DYWxlbmRhci5TQVRVUkRBWS0xLCAwLAorICAgICAgICB9OworICAgICAgICBTaW1wbGVUaW1lWm9uZSB6b25lID0gbmV3IFNpbXBsZVRpbWVab25lKDAsICJaIik7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9NSkgeworICAgICAgICAgICAgYm9vbGVhbiBzaG91bGRCZUdvb2QgPSAoREFUQVtpXSA9PSBHT09EKTsKKyAgICAgICAgICAgIGludCBtb250aCAgICAgPSBEQVRBW2krMV07CisgICAgICAgICAgICBpbnQgZGF5ICAgICAgID0gREFUQVtpKzJdOworICAgICAgICAgICAgaW50IGRheU9mV2VlayA9IERBVEFbaSszXTsKKyAgICAgICAgICAgIGludCB0aW1lICAgICAgPSBEQVRBW2krNF07CisKKyAgICAgICAgICAgIEV4Y2VwdGlvbiBleCA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHpvbmUuc2V0U3RhcnRSdWxlKG1vbnRoLCBkYXksIGRheU9mV2VlaywgdGltZSk7CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGV4ID0gZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoZXggPT0gbnVsbCkgIT0gc2hvdWxkQmVHb29kKSB7CisgICAgICAgICAgICAgICAgZXJybG4oInNldFN0YXJ0UnVsZShtb250aD0iICsgbW9udGggKyAiLCBkYXk9IiArIGRheSArCisgICAgICAgICAgICAgICAgICAgICAgIiwgZGF5T2ZXZWVrPSIgKyBkYXlPZldlZWsgKyAiLCB0aW1lPSIgKyB0aW1lICsKKyAgICAgICAgICAgICAgICAgICAgICAoc2hvdWxkQmVHb29kID8gKCIpIHNob3VsZCB3b3JrIGJ1dCB0aHJvd3MgIiArIGV4KQorICAgICAgICAgICAgICAgICAgICAgICA6ICIpIHNob3VsZCBmYWlsIGJ1dCBkb2Vzbid0IikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleCA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHpvbmUuc2V0RW5kUnVsZShtb250aCwgZGF5LCBkYXlPZldlZWssIHRpbWUpOworICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBleCA9IGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGV4ID09IG51bGwpICE9IHNob3VsZEJlR29vZCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJzZXRFbmRSdWxlKG1vbnRoPSIgKyBtb250aCArICIsIGRheT0iICsgZGF5ICsKKyAgICAgICAgICAgICAgICAgICAgICAiLCBkYXlPZldlZWs9IiArIGRheU9mV2VlayArICIsIHRpbWU9IiArIHRpbWUgKworICAgICAgICAgICAgICAgICAgICAgIChzaG91bGRCZUdvb2QgPyAoIikgc2hvdWxkIHdvcmsgYnV0IHRocm93cyAiICsgZXgpCisgICAgICAgICAgICAgICAgICAgICAgIDogIikgc2hvdWxkIGZhaWwgYnV0IGRvZXNuJ3QiKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4ID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgU2ltcGxlVGltZVpvbmUgdGVtcCA9IG5ldyBTaW1wbGVUaW1lWm9uZSgwLCAiWiIsCisgICAgICAgICAgICAgICAgICAgICAgICBtb250aCwgZGF5LCBkYXlPZldlZWssIHRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBHT09EX01PTlRILCBHT09EX0RBWSwgR09PRF9EQVlfT0ZfV0VFSywgR09PRF9USU1FKTsKKyAgICAgICAgICAgICAgICB0ZW1wID0gbnVsbDsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXggPSBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChleCA9PSBudWxsKSAhPSBzaG91bGRCZUdvb2QpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiU2ltcGxlVGltZVpvbmUobW9udGg9IiArIG1vbnRoICsgIiwgZGF5PSIgKyBkYXkgKworICAgICAgICAgICAgICAgICAgICAgICIsIGRheU9mV2Vlaz0iICsgZGF5T2ZXZWVrICsgIiwgdGltZT0iICsgdGltZSArCisgICAgICAgICAgICAgICAgICAgICAgKHNob3VsZEJlR29vZCA/ICgiLCA8ZW5kPikgc2hvdWxkIHdvcmsgYnV0IHRocm93cyAiICsgZXgpCisgICAgICAgICAgICAgICAgICAgICAgIDogIiwgPGVuZD4pIHNob3VsZCBmYWlsIGJ1dCBkb2Vzbid0IikpOworICAgICAgICAgICAgfSAgICAgICAgICAgIAorCisgICAgICAgICAgICBleCA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFNpbXBsZVRpbWVab25lIHRlbXAgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgIloiLAorICAgICAgICAgICAgICAgICAgICAgICAgR09PRF9NT05USCwgR09PRF9EQVksIEdPT0RfREFZX09GX1dFRUssIEdPT0RfVElNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoLCBkYXksIGRheU9mV2VlaywgdGltZSk7CisgICAgICAgICAgICAgICAgdGVtcCA9IG51bGw7CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGV4ID0gZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoZXggPT0gbnVsbCkgIT0gc2hvdWxkQmVHb29kKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlNpbXBsZVRpbWVab25lKDxzdGFydD4sIG1vbnRoPSIgKyBtb250aCArICIsIGRheT0iICsgZGF5ICsKKyAgICAgICAgICAgICAgICAgICAgICAiLCBkYXlPZldlZWs9IiArIGRheU9mV2VlayArICIsIHRpbWU9IiArIHRpbWUgKworICAgICAgICAgICAgICAgICAgICAgIChzaG91bGRCZUdvb2QgPyAoIikgc2hvdWxkIHdvcmsgYnV0IHRocm93cyAiICsgZXgpCisgICAgICAgICAgICAgICAgICAgICAgIDogIikgc2hvdWxkIGZhaWwgYnV0IGRvZXNuJ3QiKSk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaW1wbGVUaW1lWm9uZS5nZXRPZmZzZXQgYWNjZXB0cyBpbGxlZ2FsIGFyZ3VtZW50cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE1NDY1MCgpIHsKKyAgICAgICAgZmluYWwgaW50IEdPT0Q9MSwgQkFEPTA7CisgICAgICAgIGZpbmFsIGludCBHT09EX0VSQT1HcmVnb3JpYW5DYWxlbmRhci5BRCwgR09PRF9ZRUFSPTE5OTgsIEdPT0RfTU9OVEg9Q2FsZW5kYXIuQVVHVVNUOworICAgICAgICBmaW5hbCBpbnQgR09PRF9EQVk9MiwgR09PRF9ET1c9Q2FsZW5kYXIuU1VOREFZLCBHT09EX1RJTUU9MTYqMzYwMDAwMDsKKyAgICAgICAgaW50W10gREFUQSA9IHsKKyAgICAgICAgICAgIEdPT0QsIEdPT0RfRVJBLCBHT09EX1lFQVIsIEdPT0RfTU9OVEgsIEdPT0RfREFZLCBHT09EX0RPVywgR09PRF9USU1FLAorCisgICAgICAgICAgICBHT09ELCBHcmVnb3JpYW5DYWxlbmRhci5CQywgR09PRF9ZRUFSLCBHT09EX01PTlRILCBHT09EX0RBWSwgR09PRF9ET1csIEdPT0RfVElNRSwKKyAgICAgICAgICAgIEdPT0QsIEdyZWdvcmlhbkNhbGVuZGFyLkFELCBHT09EX1lFQVIsIEdPT0RfTU9OVEgsIEdPT0RfREFZLCBHT09EX0RPVywgR09PRF9USU1FLAorICAgICAgICAgICAgQkFELCAgR3JlZ29yaWFuQ2FsZW5kYXIuQkMtMSwgR09PRF9ZRUFSLCBHT09EX01PTlRILCBHT09EX0RBWSwgR09PRF9ET1csIEdPT0RfVElNRSwKKyAgICAgICAgICAgIEJBRCwgIEdyZWdvcmlhbkNhbGVuZGFyLkFEKzEsIEdPT0RfWUVBUiwgR09PRF9NT05USCwgR09PRF9EQVksIEdPT0RfRE9XLCBHT09EX1RJTUUsCisKKyAgICAgICAgICAgIEdPT0QsIEdPT0RfRVJBLCBHT09EX1lFQVIsIENhbGVuZGFyLkpBTlVBUlksIEdPT0RfREFZLCBHT09EX0RPVywgR09PRF9USU1FLAorICAgICAgICAgICAgR09PRCwgR09PRF9FUkEsIEdPT0RfWUVBUiwgQ2FsZW5kYXIuREVDRU1CRVIsIEdPT0RfREFZLCBHT09EX0RPVywgR09PRF9USU1FLAorICAgICAgICAgICAgQkFELCAgR09PRF9FUkEsIEdPT0RfWUVBUiwgQ2FsZW5kYXIuSkFOVUFSWS0xLCBHT09EX0RBWSwgR09PRF9ET1csIEdPT0RfVElNRSwKKyAgICAgICAgICAgIEJBRCwgIEdPT0RfRVJBLCBHT09EX1lFQVIsIENhbGVuZGFyLkRFQ0VNQkVSKzEsIEdPT0RfREFZLCBHT09EX0RPVywgR09PRF9USU1FLAorICAgICAgICAgICAgCisgICAgICAgICAgICBHT09ELCBHT09EX0VSQSwgR09PRF9ZRUFSLCBDYWxlbmRhci5KQU5VQVJZLCAxLCBHT09EX0RPVywgR09PRF9USU1FLAorICAgICAgICAgICAgR09PRCwgR09PRF9FUkEsIEdPT0RfWUVBUiwgQ2FsZW5kYXIuSkFOVUFSWSwgMzEsIEdPT0RfRE9XLCBHT09EX1RJTUUsCisgICAgICAgICAgICBCQUQsICBHT09EX0VSQSwgR09PRF9ZRUFSLCBDYWxlbmRhci5KQU5VQVJZLCAwLCBHT09EX0RPVywgR09PRF9USU1FLAorICAgICAgICAgICAgQkFELCAgR09PRF9FUkEsIEdPT0RfWUVBUiwgQ2FsZW5kYXIuSkFOVUFSWSwgMzIsIEdPT0RfRE9XLCBHT09EX1RJTUUsCisKKyAgICAgICAgICAgIEdPT0QsIEdPT0RfRVJBLCBHT09EX1lFQVIsIEdPT0RfTU9OVEgsIEdPT0RfREFZLCBDYWxlbmRhci5TVU5EQVksIEdPT0RfVElNRSwKKyAgICAgICAgICAgIEdPT0QsIEdPT0RfRVJBLCBHT09EX1lFQVIsIEdPT0RfTU9OVEgsIEdPT0RfREFZLCBDYWxlbmRhci5TQVRVUkRBWSwgR09PRF9USU1FLAorICAgICAgICAgICAgQkFELCAgR09PRF9FUkEsIEdPT0RfWUVBUiwgR09PRF9NT05USCwgR09PRF9EQVksIENhbGVuZGFyLlNVTkRBWS0xLCBHT09EX1RJTUUsCisgICAgICAgICAgICBCQUQsICBHT09EX0VSQSwgR09PRF9ZRUFSLCBHT09EX01PTlRILCBHT09EX0RBWSwgQ2FsZW5kYXIuU0FUVVJEQVkrMSwgR09PRF9USU1FLAorCisgICAgICAgICAgICBHT09ELCBHT09EX0VSQSwgR09PRF9ZRUFSLCBHT09EX01PTlRILCBHT09EX0RBWSwgR09PRF9ET1csIDAsCisgICAgICAgICAgICBHT09ELCBHT09EX0VSQSwgR09PRF9ZRUFSLCBHT09EX01PTlRILCBHT09EX0RBWSwgR09PRF9ET1csIDI0KjM2MDAwMDAtMSwKKyAgICAgICAgICAgIEJBRCwgIEdPT0RfRVJBLCBHT09EX1lFQVIsIEdPT0RfTU9OVEgsIEdPT0RfREFZLCBHT09EX0RPVywgLTEsCisgICAgICAgICAgICBCQUQsICBHT09EX0VSQSwgR09PRF9ZRUFSLCBHT09EX01PTlRILCBHT09EX0RBWSwgR09PRF9ET1csIDI0KjM2MDAwMDAsCisgICAgICAgIH07CisKKyAgICAgICAgVGltZVpvbmUgdHogPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9NykgeworICAgICAgICAgICAgYm9vbGVhbiBnb29kID0gREFUQVtpXSA9PSBHT09EOworICAgICAgICAgICAgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdHouZ2V0T2Zmc2V0KERBVEFbaSsxXSwgREFUQVtpKzJdLCBEQVRBW2krM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRBW2krNF0sIERBVEFbaSs1XSwgREFUQVtpKzZdKTsgCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgZSA9IGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGdvb2QgIT0gKGUgPT0gbnVsbCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogZ2V0T2Zmc2V0KCIgKworICAgICAgICAgICAgICAgICAgICAgIERBVEFbaSsxXSArICIsICIgKyBEQVRBW2krMl0gKyAiLCAiICsgREFUQVtpKzNdICsgIiwgIiArCisgICAgICAgICAgICAgICAgICAgICAgREFUQVtpKzRdICsgIiwgIiArIERBVEFbaSs1XSArICIsICIgKyBEQVRBW2krNl0gKworICAgICAgICAgICAgICAgICAgICAgIChnb29kID8gKCIpIHRocmV3ICIgKyBlKSA6ICIpIGFjY2VwdHMgaW52YWxpZCBhcmdzIikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGltZVpvbmUgY29uc3RydWN0b3JzIGFsbG93IG51bGwgSURzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTU5OTIyKCkgeworICAgICAgICBUaW1lWm9uZSB6ID0gbnVsbDsKKworICAgICAgICAvLyBUaW1lWm9uZSBBUEkuICBPbmx5IGhhc1NhbWVSdWxlcygpIGFuZCBzZXREZWZhdWx0KCkgc2hvdWxkCisgICAgICAgIC8vIGFsbG93IG51bGwuCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB6ID0gVGltZVpvbmUuZ2V0VGltZVpvbmUobnVsbCk7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogTnVsbCBhbGxvd2VkIGluIGdldFRpbWVab25lIik7CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICB9CisgICAgICAgIHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB6LmdldERpc3BsYXlOYW1lKGZhbHNlLCBUaW1lWm9uZS5TSE9SVCwgbnVsbCk7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogTnVsbCBhbGxvd2VkIGluIGdldERpc3BsYXlOYW1lKDMpIik7CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB6LmdldERpc3BsYXlOYW1lKG51bGwpOworICAgICAgICAgICAgZXJybG4oIkZBSUw6IE51bGwgYWxsb3dlZCBpbiBnZXREaXNwbGF5TmFtZSgxKSIpOworICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHouaGFzU2FtZVJ1bGVzKG51bGwpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGhhc1NhbWVSdWxlcyByZXR1cm5lZCB0cnVlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBOdWxsIE5PVCBhbGxvd2VkIGluIGhhc1NhbWVSdWxlcyIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB6LmluRGF5bGlnaHRUaW1lKG51bGwpOworICAgICAgICAgICAgZXJybG4oIkZBSUw6IE51bGwgYWxsb3dlZCBpbiBpbkRheWxpZ2h0VGltZSIpOworICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgei5zZXRJRChudWxsKTsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBOdWxsIGFsbG93ZWQgaW4gc2V0SUQiKTsKKyAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgICAgIH0KKworICAgICAgICBUaW1lWm9uZSBzYXZlID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IE51bGwgTk9UIGFsbG93ZWQgaW4gc2V0RGVmYXVsdCIpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChzYXZlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNpbXBsZVRpbWVab25lIEFQSQorICAgICAgICBTaW1wbGVUaW1lWm9uZSBzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHMgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgbnVsbCk7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogTnVsbCBhbGxvd2VkIGluIFNpbXBsZVRpbWVab25lKDIpIik7CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzID0gbmV3IFNpbXBsZVRpbWVab25lKDAsIG51bGwsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDApOworICAgICAgICAgICAgZXJybG4oIkZBSUw6IE51bGwgYWxsb3dlZCBpbiBTaW1wbGVUaW1lWm9uZSgxMCkiKTsKKyAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHMgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgbnVsbCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMTAwMCk7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogTnVsbCBhbGxvd2VkIGluIFNpbXBsZVRpbWVab25lKDExKSIpOworICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRpbWVab25lIGJyb2tlbiBhdCBtaWRuaWdodC4gIFRoZSBUaW1lWm9uZSBjb2RlIGZhaWxzIHRvIGhhbmRsZQorICAgICAqIHRyYW5zaXRpb25zIGF0IG1pZG5pZ2h0IGNvcnJlY3RseS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE2MjU5MygpIHsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmbXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieiIsIExvY2FsZS5VUyk7CisgICAgICAgIGZpbmFsIGludCBPTkVfSE9VUiA9IDYwKjYwKjEwMDA7CisJVGltZVpvbmUgaW5pdGlhbFpvbmUgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIk1NTSBkZCB5eXl5IEhIOm1tIHoiKTsgCisKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgYXN1bmNpb24gPSBuZXcgU2ltcGxlVGltZVpvbmUoLTQqT05FX0hPVVIsICJBbWVyaWNhL0FzdW5jaW9uIiAvKlBZJXNUKi8sCisgICAgICAgICAgICBDYWxlbmRhci5PQ1RPQkVSLCAxLCAwIC8qRE9NKi8sIDAqT05FX0hPVVIsCisgICAgICAgICAgICBDYWxlbmRhci5NQVJDSCwgMSwgMCAvKkRPTSovLCAwKk9ORV9IT1VSLCAxKk9ORV9IT1VSKTsKKworICAgICAgICAvKiBab25lCisgICAgICAgICAqIFN0YXJ0aW5nIHRpbWUKKyAgICAgICAgICogVHJhbnNpdGlvbiBleHBlY3RlZCBiZXR3ZWVuIHN0YXJ0KzFIIGFuZCBzdGFydCsySAorICAgICAgICAgKi8KKyAgICAgICAgT2JqZWN0W10gREFUQSA9IHsKKyAgICAgICAgICAgIG5ldyBTaW1wbGVUaW1lWm9uZSgyKk9ORV9IT1VSLCAiQXNpYS9EYW1hc2N1cyIgLypFRSVzVCovLAorICAgICAgICAgICAgICAgIENhbGVuZGFyLkFQUklMLCAxLCAwIC8qRE9NKi8sIDAqT05FX0hPVVIsCisgICAgICAgICAgICAgICAgQ2FsZW5kYXIuT0NUT0JFUiwgMSwgMCAvKkRPTSovLCAwKk9ORV9IT1VSLCAxKk9ORV9IT1VSKSwKKyAgICAgICAgICAgIG5ldyBpbnRbXSB7OTgsIENhbGVuZGFyLlNFUFRFTUJFUiwgMzAsIDIyLCAwfSwKKyAgICAgICAgICAgIEJvb2xlYW4uVFJVRSwKKworICAgICAgICAgICAgYXN1bmNpb24sCisgICAgICAgICAgICBuZXcgaW50W10gezEwMCwgQ2FsZW5kYXIuRkVCUlVBUlksIDI4LCAyMiwgMH0sCisgICAgICAgICAgICBCb29sZWFuLkZBTFNFLAorCisgICAgICAgICAgICBhc3VuY2lvbiwKKyAgICAgICAgICAgIG5ldyBpbnRbXSB7MTAwLCBDYWxlbmRhci5GRUJSVUFSWSwgMjksIDIyLCAwfSwKKyAgICAgICAgICAgIEJvb2xlYW4uVFJVRSwKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZ1tdIHpvbmUgPSBuZXcgU3RyaW5nWzRdOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaj0wOyBqPERBVEEubGVuZ3RoOyBqKz0zKSB7CisgICAgICAgICAgICBUaW1lWm9uZSB0eiA9IChUaW1lWm9uZSlEQVRBW2pdOworICAgICAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdCh0eik7CisgICAgICAgICAgICBmbXQuc2V0VGltZVpvbmUodHopOworICAgICAgICAgICAgc2RmLnNldFRpbWVab25lKHR6KTsKKworICAgICAgICAgICAgLy8gTXVzdCBjb25zdHJ1Y3QgdGhlIERhdGUgb2JqZWN0IEFGVEVSIHNldHRpbmcgdGhlIGRlZmF1bHQgem9uZQorICAgICAgICAgICAgaW50W10gcCA9IChpbnRbXSlEQVRBW2orMV07CisgICAgICAgICAgICBqYXZhLnV0aWwuQ2FsZW5kYXIgdGVtcGNhbCA9IGphdmEudXRpbC5DYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICAgICAgdGVtcGNhbC5jbGVhcigpOworICAgICAgICAgICAgdGVtcGNhbC5zZXQocFswXSArIDE5MDAsIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0pOworICAgICAgICAgICAgRGF0ZSBkID0gdGVtcGNhbC5nZXRUaW1lKCk7CisgICAgICAgICAgICBib29sZWFuIHRyYW5zaXRpb25FeHBlY3RlZCA9ICgoQm9vbGVhbilEQVRBW2orMl0pLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICBsb2dsbih0ei5nZXRJRCgpICsgIjoiKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTw0OyArK2kpIHsKKyAgICAgICAgICAgICAgICB6b25lW2ldID0gZm10LmZvcm1hdChkKTsKKyAgICAgICAgICAgICAgICBsb2dsbigiIiArIGkgKyAiOiAiICsgc2RmLmZvcm1hdChkKSArICIgPT4gIiArIHpvbmVbaV0pOworICAgICAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShkLmdldFRpbWUoKSArIE9ORV9IT1VSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh6b25lWzBdLmVxdWFscyh6b25lWzFdKSAmJgorICAgICAgICAgICAgICAgICh6b25lWzFdLmVxdWFscyh6b25lWzJdKSAhPSB0cmFuc2l0aW9uRXhwZWN0ZWQpICYmCisgICAgICAgICAgICAgICAgem9uZVsyXS5lcXVhbHMoem9uZVszXSkpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6IHRyYW5zaXRpb24gIiArIHRyYW5zaXRpb25FeHBlY3RlZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKCJGYWlsOiBib3VuZGFyeSB0cmFuc2l0aW9uIGluY29ycmVjdCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKwkvLyByZXN0b3JlIHRoZSBpbml0aWFsIHRpbWUgem9uZSBzbyB0aGF0IHRoaXMgdGVzdCBjYXNlCisJLy8gZG9lc24ndCBhZmZlY3QgdGhlIG90aGVycy4KKwlUaW1lWm9uZS5zZXREZWZhdWx0KGluaXRpYWxab25lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaW1lWm9uZSBicm9rZW4gaW4gbGFzdCBob3VyIG9mIHllYXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDE3MzYwNCgpIHsKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgcHN0ID0gKFNpbXBsZVRpbWVab25lKVRpbWVab25lLmdldFRpbWVab25lKCJQU1QiKTsKKyAgICAgICAgaW50IG8yMiA9IHBzdC5nZXRPZmZzZXQoMSwgMTk5OCwgMTEsIDMxLCBDYWxlbmRhci5USFVSU0RBWSwgMjIqNjAqNjAqMTAwMCk7CisgICAgICAgIGludCBvMjMgPSBwc3QuZ2V0T2Zmc2V0KDEsIDE5OTgsIDExLCAzMSwgQ2FsZW5kYXIuVEhVUlNEQVksIDIzKjYwKjYwKjEwMDApOworICAgICAgICBpbnQgbzAwID0gcHN0LmdldE9mZnNldCgxLCAxOTk5LCAwLCAxLCBDYWxlbmRhci5GUklEQVksIDApOworICAgICAgICBpZiAobzIyICE9IG8yMyB8fCBvMjIgIT0gbzAwKSB7CisgICAgICAgICAgICBlcnJsbigiT2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKGZvciBQU1QpLCBidXQgZ290OiAiICsKKyAgICAgICAgICAgICAgICAgICIxMi8zMSAyMjowMCAiICsgbzIyICsKKyAgICAgICAgICAgICAgICAgICIsIDEyLzMxIDIzOjAwICIgKyBvMjMgKworICAgICAgICAgICAgICAgICAgIiwgMDEvMDEgMDA6MDAgIiArIG8wMCk7CisgICAgICAgIH0KKworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgY2FsLnNldFRpbWVab25lKHBzdCk7CisgICAgICAgIGNhbC5jbGVhcigpOworICAgICAgICBjYWwuc2V0KDE5OTgsIENhbGVuZGFyLkpBTlVBUlksIDEpOworICAgICAgICBpbnQgbGFzdERTVCA9IGNhbC5nZXQoQ2FsZW5kYXIuRFNUX09GRlNFVCk7CisgICAgICAgIGludCB0cmFuc2l0aW9ucyA9IDA7CisgICAgICAgIGludCBkZWx0YSA9IDU7CisgICAgICAgIHdoaWxlIChjYWwuZ2V0KENhbGVuZGFyLllFQVIpIDwgMjAwMCkgeworICAgICAgICAgICAgY2FsLmFkZChDYWxlbmRhci5NSU5VVEUsIGRlbHRhKTsKKyAgICAgICAgICAgIGlmIChjYWwuZ2V0KENhbGVuZGFyLkRTVF9PRkZTRVQpICE9IGxhc3REU1QpIHsKKyAgICAgICAgICAgICAgICArK3RyYW5zaXRpb25zOworICAgICAgICAgICAgICAgIENhbGVuZGFyIHQgPSAoQ2FsZW5kYXIpY2FsLmNsb25lKCk7CisgICAgICAgICAgICAgICAgdC5hZGQoQ2FsZW5kYXIuTUlOVVRFLCAtZGVsdGEpOworICAgICAgICAgICAgICAgIGxvZ2xuKHQuZ2V0VGltZSgpICsgIiAgIiArIHQuZ2V0KENhbGVuZGFyLkRTVF9PRkZTRVQpKTsKKyAgICAgICAgICAgICAgICBsb2dsbihjYWwuZ2V0VGltZSgpICsgIiAgIiArIChsYXN0RFNUPWNhbC5nZXQoQ2FsZW5kYXIuRFNUX09GRlNFVCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodHJhbnNpdGlvbnMgIT0gNCkgeworICAgICAgICAgICAgZXJybG4oIlNhdyAiICsgdHJhbnNpdGlvbnMgKyAiIHRyYW5zaXRpb25zOyBzaG91bGQgaGF2ZSBzZWVuIDQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIGdldERpc3BsYXlOYW1lIGRvZXNuJ3Qgd29yayB3aXRoIHVudXN1YWwgc2F2aW5ncy9vZmZzZXRzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTc2Njg2KCkgeworICAgICAgICAvLyBDb25zdHJ1Y3QgYSB6b25lIHRoYXQgZG9lcyBub3Qgb2JzZXJ2ZSBEU1QgYnV0CisgICAgICAgIC8vIHRoYXQgZG9lcyBoYXZlIGEgRFNUIHNhdmluZ3MgKHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkKS4KKyAgICAgICAgaW50IG9mZnNldCA9IDkwICogNjAwMDA7IC8vIDE6MzAKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgejEgPSBuZXcgU2ltcGxlVGltZVpvbmUob2Zmc2V0LCAiX3N0ZF96b25lXyIpOworICAgICAgICB6MS5zZXREU1RTYXZpbmdzKDQ1ICogNjAwMDApOyAvLyAwOjQ1CisKKyAgICAgICAgLy8gQ29uc3RydWN0IGEgem9uZSB0aGF0IG9ic2VydmVzIERTVCBmb3IgdGhlIGZpcnN0IDYgbW9udGhzLgorICAgICAgICBTaW1wbGVUaW1lWm9uZSB6MiA9IG5ldyBTaW1wbGVUaW1lWm9uZShvZmZzZXQsICJfZHN0X3pvbmVfIik7CisgICAgICAgIHoyLnNldERTVFNhdmluZ3MoNDUgKiA2MDAwMCk7IC8vIDA6NDUKKyAgICAgICAgejIuc2V0U3RhcnRSdWxlKENhbGVuZGFyLkpBTlVBUlksIDEsIDApOworICAgICAgICB6Mi5zZXRFbmRSdWxlKENhbGVuZGFyLkpVTFksIDEsIDApOworCisgICAgICAgIC8vIEFsc28gY2hlY2sgRGF0ZUZvcm1hdAorICAgICAgICBEYXRlRm9ybWF0IGZtdDEgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieiIpOworICAgICAgICBmbXQxLnNldFRpbWVab25lKHoxKTsgLy8gRm9ybWF0IHVzZXMgc3RhbmRhcmQgem9uZQorICAgICAgICBEYXRlRm9ybWF0IGZtdDIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieiIpOworICAgICAgICBmbXQyLnNldFRpbWVab25lKHoyKTsgLy8gRm9ybWF0IHVzZXMgRFNUIHpvbmUKKyAgICAgICAgamF2YS51dGlsLkNhbGVuZGFyIHRlbXBjYWwgPSBqYXZhLnV0aWwuQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgdGVtcGNhbC5jbGVhcigpOworICAgICAgICB0ZW1wY2FsLnNldCgxOTcwLCBDYWxlbmRhci5GRUJSVUFSWSwgMSk7CisgICAgICAgIERhdGUgZHN0ID0gdGVtcGNhbC5nZXRUaW1lKCk7IC8vIFRpbWUgaW4gRFNUCisgICAgICAgIHRlbXBjYWwuc2V0KDE5NzAsIENhbGVuZGFyLkFVR1VTVCwgMSk7CisgICAgICAgIERhdGUgc3RkID0gdGVtcGNhbC5nZXRUaW1lKCk7IC8vIFRpbWUgaW4gc3RhbmRhcmQKKworICAgICAgICAvLyBEZXNjcmlwdGlvbiwgUmVzdWx0LCBFeHBlY3RlZCBSZXN1bHQKKyAgICAgICAgU3RyaW5nW10gREFUQSA9IHsKKyAgICAgICAgICAgICJnZXREaXNwbGF5TmFtZShmYWxzZSwgU0hPUlQpL3N0ZCB6b25lIiwKKyAgICAgICAgICAgIHoxLmdldERpc3BsYXlOYW1lKGZhbHNlLCBUaW1lWm9uZS5TSE9SVCksICJHTVQrMDE6MzAiLAorICAgICAgICAgICAgImdldERpc3BsYXlOYW1lKGZhbHNlLCBMT05HKS9zdGQgem9uZSIsCisgICAgICAgICAgICB6MS5nZXREaXNwbGF5TmFtZShmYWxzZSwgVGltZVpvbmUuTE9ORyApLCAiR01UKzAxOjMwIiwKKyAgICAgICAgICAgICJnZXREaXNwbGF5TmFtZSh0cnVlLCBTSE9SVCkvc3RkIHpvbmUiLAorICAgICAgICAgICAgejEuZ2V0RGlzcGxheU5hbWUodHJ1ZSwgVGltZVpvbmUuU0hPUlQpLCAiR01UKzAxOjMwIiwKKyAgICAgICAgICAgICJnZXREaXNwbGF5TmFtZSh0cnVlLCBMT05HKS9zdGQgem9uZSIsCisgICAgICAgICAgICB6MS5nZXREaXNwbGF5TmFtZSh0cnVlLCBUaW1lWm9uZS5MT05HICksICJHTVQrMDE6MzAiLAorICAgICAgICAgICAgImdldERpc3BsYXlOYW1lKGZhbHNlLCBTSE9SVCkvZHN0IHpvbmUiLAorICAgICAgICAgICAgejIuZ2V0RGlzcGxheU5hbWUoZmFsc2UsIFRpbWVab25lLlNIT1JUKSwgIkdNVCswMTozMCIsCisgICAgICAgICAgICAiZ2V0RGlzcGxheU5hbWUoZmFsc2UsIExPTkcpL2RzdCB6b25lIiwKKyAgICAgICAgICAgIHoyLmdldERpc3BsYXlOYW1lKGZhbHNlLCBUaW1lWm9uZS5MT05HICksICJHTVQrMDE6MzAiLAorICAgICAgICAgICAgImdldERpc3BsYXlOYW1lKHRydWUsIFNIT1JUKS9kc3Qgem9uZSIsCisgICAgICAgICAgICB6Mi5nZXREaXNwbGF5TmFtZSh0cnVlLCBUaW1lWm9uZS5TSE9SVCksICJHTVQrMDI6MTUiLAorICAgICAgICAgICAgImdldERpc3BsYXlOYW1lKHRydWUsIExPTkcpL2RzdCB6b25lIiwKKyAgICAgICAgICAgIHoyLmdldERpc3BsYXlOYW1lKHRydWUsIFRpbWVab25lLkxPTkcgKSwgIkdNVCswMjoxNSIsCisgICAgICAgICAgICAiRGF0ZUZvcm1hdC5mb3JtYXQoc3RkKS9zdGQgem9uZSIsIGZtdDEuZm9ybWF0KHN0ZCksICJHTVQrMDE6MzAiLAorICAgICAgICAgICAgIkRhdGVGb3JtYXQuZm9ybWF0KGRzdCkvc3RkIHpvbmUiLCBmbXQxLmZvcm1hdChkc3QpLCAiR01UKzAxOjMwIiwKKyAgICAgICAgICAgICJEYXRlRm9ybWF0LmZvcm1hdChzdGQpL2RzdCB6b25lIiwgZm10Mi5mb3JtYXQoc3RkKSwgIkdNVCswMTozMCIsCisgICAgICAgICAgICAiRGF0ZUZvcm1hdC5mb3JtYXQoZHN0KS9kc3Qgem9uZSIsIGZtdDIuZm9ybWF0KGRzdCksICJHTVQrMDI6MTUiLAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MykgeworICAgICAgICAgICAgaWYgKCFEQVRBW2krMV0uZXF1YWxzKERBVEFbaSsyXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIERBVEFbaV0gKyAiIC0+ICIgKyBEQVRBW2krMV0gKyAiLCBleHAgIiArIERBVEFbaSsyXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaW1wbGVUaW1lWm9uZSBhbGxvd3MgaW52YWxpZCBET00gdmFsdWVzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3Q0MTg0MjI5KCkgeworICAgICAgICBTaW1wbGVUaW1lWm9uZSB6b25lID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHpvbmUgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgIkEiLCAwLCAtMSwgMCwgMCwgMCwgMCwgMCwgMCk7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkLiBObyBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duIGZvciBET00gLTEgc3RhcnREYXkiKTsKKyAgICAgICAgfSBjYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nbG4oIihhKSAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB6b25lID0gbmV3IFNpbXBsZVRpbWVab25lKDAsICJBIiwgMCwgMCwgMCwgMCwgMCwgLTEsIDAsIDApOworICAgICAgICAgICAgZXJybG4oIkZhaWxlZC4gTm8gZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93biBmb3IgRE9NIC0xIGVuZERheSIpOworICAgICAgICB9IGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dsbigiKGIpICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHpvbmUgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgIkEiLCAwLCAtMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTAwMCk7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkLiBObyBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duIGZvciBET00gLTEgc3RhcnREYXkgK3NhdmluZ3MiKTsKKyAgICAgICAgfSBjYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nbG4oIihjKSAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB6b25lID0gbmV3IFNpbXBsZVRpbWVab25lKDAsICJBIiwgMCwgMCwgMCwgMCwgMCwgLTEsIDAsIDAsIDEwMDApOworICAgICAgICAgICAgZXJybG4oIkZhaWxlZC4gTm8gZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93biBmb3IgRE9NIC0xIGVuZERheSArc2F2aW5ncyIpOworICAgICAgICB9IGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dsbigiKGQpICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWFrZSBhIHZhbGlkIGNvbnN0cnVjdG9yIGNhbGwgZm9yIHN1YnNlcXVlbnQgdGVzdHMuCisgICAgICAgIHpvbmUgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgIkEiLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAwKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHpvbmUuc2V0U3RhcnRSdWxlKDAsIC0xLCAwLCAwKTsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQuIE5vIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24gZm9yIERPTSAtMSBzZXRTdGFydFJ1bGUgK3NhdmluZ3MiKTsKKyAgICAgICAgfSBjYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nbG4oIihlKSAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB6b25lLnNldFN0YXJ0UnVsZSgwLCAtMSwgMCk7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkLiBObyBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duIGZvciBET00gLTEgc2V0U3RhcnRSdWxlIik7CisgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2xuKCIoZikgIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgem9uZS5zZXRFbmRSdWxlKDAsIC0xLCAwLCAwKTsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQuIE5vIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24gZm9yIERPTSAtMSBzZXRFbmRSdWxlICtzYXZpbmdzIik7CisgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2xuKCIoZykgIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgem9uZS5zZXRFbmRSdWxlKDAsIC0xLCAwKTsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQuIE5vIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24gZm9yIERPTSAtMSBzZXRFbmRSdWxlIik7CisgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2xuKCIoaCkgIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNpbXBsZVRpbWVab25lLmdldE9mZnNldCgpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gd2hlbiB0byBnZXQKKyAgICAgKiBvZiAyLzI5LzE5OTYgKGxlYXAgZGF5KS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0NDIwODk2MCAoKSB7CisJU2ltcGxlVGltZVpvbmUgdHogPSAoU2ltcGxlVGltZVpvbmUpVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpOworCXRyeSB7CisJICAgIGludCBvZmZzZXQgPSB0ei5nZXRPZmZzZXQoR3JlZ29yaWFuQ2FsZW5kYXIuQUQsIDE5OTYsIENhbGVuZGFyLkZFQlJVQVJZLCAyOSwgCisJCQkJICAgICAgQ2FsZW5kYXIuVEhVUlNEQVksIDApOworICAgICAgICBvZmZzZXQgPSAwOworCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisJICAgIGVycmxuKCJGQUlMRUQ6IHRvIGdldCBUaW1lWm9uZS5nZXRPZmZzZXQoMi8yOS85NikiKTsKKwl9CisJdHJ5IHsKKwkgICAgaW50IG9mZnNldCA9IHR6LmdldE9mZnNldChHcmVnb3JpYW5DYWxlbmRhci5BRCwgMTk5NywgQ2FsZW5kYXIuRkVCUlVBUlksIDI5LCAKKwkJCQkgICAgICBDYWxlbmRhci5USFVSU0RBWSwgMCk7CisJICAgIG9mZnNldCA9IDA7CisJICAgIGVycmxuKCJGQUlMRUQ6IFRpbWVab25lLmdldE9mZnNldCgyLzI5Lzk3KSBleHBlY3RlZCB0byB0aHJvdyBFeGNlcHRpb24uIik7CisJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKwkgICAgbG9nbG4oImdvdCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iKTsKKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0byBzZWUgaWYgRGF0ZUZvcm1hdCB1bmRlcnN0YW5kcyB6b25lIGVxdWl2YWxlbmN5IGdyb3Vwcy4gIEl0CisgICAgICogbWlnaHQgc2VlbSB0aGF0IHRoaXMgc2hvdWxkIGJlIGEgRGF0ZUZvcm1hdCB0ZXN0LCBidXQgaXQncyByZWFsbHkgYQorICAgICAqIFRpbWVab25lIHRlc3QgLS0gdGhlIGNoYW5nZXMgdG8gRGF0ZUZvcm1hdCBhcmUgbWlub3IuCisgICAgICoKKyAgICAgKiBXZSB1c2UgdHdvIGtub3duLCBzdGFibGUgem9uZXMgdGhhdCBzaG91bGRuJ3QgY2hhbmdlIG11Y2ggb3ZlciB0aW1lCisgICAgICogLS0gQW1lcmljYS9WYW5jb3V2ZXIgYW5kIEFtZXJpY2EvTG9zX0FuZ2VsZXMuICBIb3dldmVyLCB0aGV5IE1BWQorICAgICAqIGNoYW5nZSBhdCBzb21lIHBvaW50IC0tIGlmIHRoYXQgaGFwcGVucywgcmVwbGFjZSB0aGVtIHdpdGggYW55IHR3bworICAgICAqIHpvbmVzIGluIGFuIGVxdWl2YWxlbmN5IGdyb3VwIHdoZXJlIG9uZSB6b25lIGhhcyBsb2NhbGl6ZWQgbmFtZQorICAgICAqIGRhdGEsIGFuZCB0aGUgb3RoZXIgZG9lc24ndCwgaW4gc29tZSBsb2NhbGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEo0NDkoKSB7CisgICAgICAgIC8vIG5vdCB1c2VkIFN0cmluZyBzdHI7CisKKyAgICAgICAgLy8gTW9kaWZ5IHRoZSBmb2xsb3dpbmcgdGhyZWUgYXMgbmVjZXNzYXJ5LiAgVGhlIHR3byBJRHMgbXVzdAorICAgICAgICAvLyBzcGVjaWZ5IHR3byB6b25lcyBpbiB0aGUgc2FtZSBlcXVpdmFsZW5jeSBncm91cC4gIE9uZSBtdXN0IGhhdmUKKyAgICAgICAgLy8gbG9jYWxlIGRhdGEgaW4gJ2xvYyc7IHRoZSBvdGhlciBtdXN0IG5vdC4KKyAgICAgICAgU3RyaW5nIGlkV2l0aExvY2FsZURhdGEgPSAiQW1lcmljYS9Mb3NfQW5nZWxlcyI7CisgICAgICAgIFN0cmluZyBpZFdpdGhvdXRMb2NhbGVEYXRhID0gIkFtZXJpY2EvVmFuY291dmVyIjsKKyAgICAgICAgTG9jYWxlIGxvYyA9IG5ldyBMb2NhbGUoImVuIiwgIiIsICIiKTsKKworICAgICAgICBUaW1lWm9uZSB6b25lV2l0aCA9IFRpbWVab25lLmdldFRpbWVab25lKGlkV2l0aExvY2FsZURhdGEpOworICAgICAgICBUaW1lWm9uZSB6b25lV2l0aG91dCA9IFRpbWVab25lLmdldFRpbWVab25lKGlkV2l0aG91dExvY2FsZURhdGEpOworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZ290IHZhbGlkIHpvbmVzCisgICAgICAgIGlmICghKHpvbmVXaXRoLmdldElEKCkuZXF1YWxzKGlkV2l0aExvY2FsZURhdGEpICYmCisgICAgICAgICAgICAgIHpvbmVXaXRob3V0LmdldElEKCkuZXF1YWxzKGlkV2l0aG91dExvY2FsZURhdGEpKSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWw6IFVuYWJsZSB0byBjcmVhdGUgem9uZXMiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbFdpdGggPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoem9uZVdpdGgpOworICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsV2l0aG91dCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcih6b25lV2l0aG91dCk7CisgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZtdCA9CisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoIk1NTSBkIHl5eXkgaGg6bW0gYSB6enoiLCBsb2MpOworICAgICAgICAgICAgRGF0ZSBkYXRlID0gbmV3IERhdGUoMEwpOworICAgICAgICAgICAgZm10LnNldENhbGVuZGFyKGNhbFdpdGgpOworICAgICAgICAgICAgU3RyaW5nIHN0cldpdGggPSBmbXQuZm9ybWF0KGRhdGUpOworICAgICAgICAgICAgZm10LnNldENhbGVuZGFyKGNhbFdpdGhvdXQpOworICAgICAgICAgICAgU3RyaW5nIHN0cldpdGhvdXQgPSBmbXQuZm9ybWF0KGRhdGUpOworICAgICAgICAgICAgaWYgKHN0cldpdGguZXF1YWxzKHN0cldpdGhvdXQpKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9rOiAiICsgaWRXaXRoTG9jYWxlRGF0YSArICIgLT4gIiArCisgICAgICAgICAgICAgICAgICAgICAgc3RyV2l0aCArICI7ICIgKyBpZFdpdGhvdXRMb2NhbGVEYXRhICsgIiAtPiAiICsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJXaXRob3V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBpZFdpdGhMb2NhbGVEYXRhICsgIiAtPiAiICsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJXaXRoICsgIjsgIiArIGlkV2l0aG91dExvY2FsZURhdGEgKyAiIC0+ICIgKworICAgICAgICAgICAgICAgICAgICAgIHN0cldpdGhvdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RpbWV6b25lL1RpbWVab25lVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RpbWV6b25lL1RpbWVab25lVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU5YWEwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdGltZXpvbmUvVGltZVpvbmVUZXN0LmphdmEKQEAgLTAsMCArMSw3OTYgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdGltZXpvbmUvVGltZVpvbmVUZXN0LmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMi8wMyAyMzoxNTowNSAkCisgKiAkUmV2aXNpb246IDEuMTEgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqCisgKiBAdGVzdCAxLjIyIDk5LzA5LzIxCisgKiBAYnVnIDQwMjgwMDYgNDA0NDAxMyA0MDk2Njk0IDQxMDcyNzYgNDEwNzU3MCA0MTEyODY5IDQxMzA4ODUKKyAqIEBzdW1tYXJ5IHRlc3QgVGltZVpvbmUKKyAqIEBidWlsZCBUaW1lWm9uZVRlc3QKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnRpbWV6b25lOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZURhdGE7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitwdWJsaWMgY2xhc3MgVGltZVpvbmVUZXN0IGV4dGVuZHMgVGVzdEZtd2sKK3sKKyAgICBzdGF0aWMgZmluYWwgaW50IG1pbGxpc1BlckhvdXIgPSAzNjAwMDAwOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBUaW1lWm9uZVRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQnVnIDQxMzA4ODUKKyAgICAgKiBDZXJ0YWluIHNob3J0IHpvbmUgSURzLCB1c2VkIHNpbmNlIDEuMS54LCBhcmUgaW5jb3JyZWN0LgorICAgICAqICAKKyAgICAgKiBUaGUgd29yc3Qgb2YgdGhlc2UgaXM6CisgICAgICoKKyAgICAgKiAiQ0FUIiAoQ2VudHJhbCBBZnJpY2FuIFRpbWUpIHNob3VsZCBiZSBHTVQrMjowMCwgYnV0IGluc3RlYWQgcmV0dXJucyBhCisgICAgICogem9uZSBhdCBHTVQtMTowMC4gVGhlIHpvbmUgYXQgR01ULTE6MDAgc2hvdWxkIGJlIGNhbGxlZCBFR1QsIENWVCwgRUdTVCwKKyAgICAgKiBvciBBWk9TVCwgZGVwZW5kaW5nIG9uIHdoaWNoIHpvbmUgaXMgbWVhbnQsIGJ1dCBpbiBubyBjYXNlIGlzIGl0IENBVC4KKyAgICAgKgorICAgICAqIE90aGVyIHdyb25nIHpvbmUgSURzOgorICAgICAqCisgICAgICogRUNUIChFdXJvcGVhbiBDZW50cmFsIFRpbWUpIEdNVCsxOjAwOiBFQ1QgaXMgRWN1YWRvciBUaW1lLAorICAgICAqIEdNVC01OjAwLiBFdXJvcGVhbiBDZW50cmFsIHRpbWUgaXMgYWJicmV2aWF0ZWQgQ0VTVC4KKyAgICAgKgorICAgICAqIFNTVCAoU29sb21vbiBJc2xhbmQgVGltZSkgR01UKzExOjAwLiBTU1QgaXMgYWN0dWFsbHkgU2Ftb2EgU3RhbmRhcmQgVGltZSwKKyAgICAgKiBHTVQtMTE6MDAuIFNvbG9tb24gSXNsYW5kIHRpbWUgaXMgU0JULgorICAgICAqCisgICAgICogTlNUIChOZXcgWmVhbGFuZCBUaW1lKSBHTVQrMTI6MDAuIE5TVCBpcyB0aGUgYWJicmV2aWF0aW9uIGZvcgorICAgICAqIE5ld2ZvdW5kbGFuZCBTdGFuZGFyZCBUaW1lLCBHTVQtMzozMC4gTmV3IFplYWxhbmRlcnMgdXNlIE5aU1QuCisgICAgICoKKyAgICAgKiBBU1QgKEFsYXNrYSBTdGFuZGFyZCBUaW1lKSBHTVQtOTowMC4gW1RoaXMgaGFzIGFscmVhZHkgYmVlbiBub3RlZCBpbgorICAgICAqIGFub3RoZXIgYnVnLl0gSXQgc2hvdWxkIGJlICJBS1NUIi4gQVNUIGlzIEF0bGFudGljIFN0YW5kYXJkIFRpbWUsCisgICAgICogR01ULTQ6MDAuCisgICAgICoKKyAgICAgKiBQTlQgKFBob2VuaXggVGltZSkgR01ULTc6MDAuIFBOVCB1c3VhbGx5IG1lYW5zIFBpdGNhaXJuIFRpbWUsCisgICAgICogR01ULTg6MzAuIFRoZXJlIGlzIG5vIHN0YW5kYXJkIGFiYnJldmlhdGlvbiBmb3IgUGhvZW5peCB0aW1lLCBhcyBkaXN0aW5jdAorICAgICAqIGZyb20gTVNUIHdpdGggZGF5bGlnaHQgc2F2aW5ncy4KKyAgICAgKgorICAgICAqIEluIGFkZGl0aW9uIHRvIHRoZXNlIHByb2JsZW1zLCBhIG51bWJlciBvZiB6b25lcyBhcmUgRkFLRS4gVGhhdCBpcywgdGhleQorICAgICAqIGRvbid0IG1hdGNoIHdoYXQgcGVvcGxlIHVzZSBpbiB0aGUgcmVhbCB3b3JsZC4KKyAgICAgKgorICAgICAqIEZBS0Ugem9uZXM6CisgICAgICoKKyAgICAgKiBFRVQgKHNob3VsZCBiZSBFRVNUKQorICAgICAqIEFSVCAoc2hvdWxkIGJlIEVFU1QpCisgICAgICogTUVUIChzaG91bGQgYmUgSVJTVCkKKyAgICAgKiBORVQgKHNob3VsZCBiZSBBTVNUKQorICAgICAqIFBMVCAoc2hvdWxkIGJlIFBLVCkKKyAgICAgKiBCU1QgKHNob3VsZCBiZSBCRFQpCisgICAgICogVlNUIChzaG91bGQgYmUgSUNUKQorICAgICAqIENUVCAoc2hvdWxkIGJlIENTVCkgKworICAgICAqIEFDVCAoc2hvdWxkIGJlIENTVCkgKworICAgICAqIEFFVCAoc2hvdWxkIGJlIEVTVCkgKworICAgICAqIE1JVCAoc2hvdWxkIGJlIFdTVCkgKworICAgICAqIElFVCAoc2hvdWxkIGJlIEVTVCkgKworICAgICAqIFBSVCAoc2hvdWxkIGJlIEFTVCkgKworICAgICAqIENOVCAoc2hvdWxkIGJlIE5TVCkKKyAgICAgKiBBR1QgKHNob3VsZCBiZSBBUlNUKQorICAgICAqIEJFVCAoc2hvdWxkIGJlIEVTVCkgKworICAgICAqCisgICAgICogKyBBIHpvbmUgd2l0aCB0aGUgY29ycmVjdCBuYW1lIGFscmVhZHkgZXhpc3RzIGFuZCBtZWFucyBzb21ldGhpbmcKKyAgICAgKiBlbHNlLiBFLmcuLCBFU1QgdXN1YWxseSBpbmRpY2F0ZXMgdGhlIFVTIEVhc3Rlcm4gem9uZSwgc28gaXQgY2Fubm90IGJlCisgICAgICogdXNlZCBmb3IgQnJhemlsIChCRVQpLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RTaG9ydFpvbmVJRHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICBab25lRGVzY3JpcHRvcltdIEpES18xMTZfUkVGRVJFTkNFX0xJU1QgPSB7CisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIk1JVCIsIC02NjAsIGZhbHNlKSwKKyAgICAgICAgICAgIG5ldyBab25lRGVzY3JpcHRvcigiSFNUIiwgLTYwMCwgZmFsc2UpLAorICAgICAgICAgICAgbmV3IFpvbmVEZXNjcmlwdG9yKCJBU1QiLCAtNTQwLCB0cnVlKSwKKyAgICAgICAgICAgIG5ldyBab25lRGVzY3JpcHRvcigiUFNUIiwgLTQ4MCwgdHJ1ZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIlBOVCIsIC00MjAsIGZhbHNlKSwKKyAgICAgICAgICAgIG5ldyBab25lRGVzY3JpcHRvcigiTVNUIiwgLTQyMCwgdHJ1ZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkNTVCIsIC0zNjAsIHRydWUpLAorICAgICAgICAgICAgbmV3IFpvbmVEZXNjcmlwdG9yKCJJRVQiLCAtMzAwLCBmYWxzZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkVTVCIsIC0zMDAsIHRydWUpLAorICAgICAgICAgICAgbmV3IFpvbmVEZXNjcmlwdG9yKCJQUlQiLCAtMjQwLCBmYWxzZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkNOVCIsIC0yMTAsIHRydWUpLAorICAgICAgICAgICAgbmV3IFpvbmVEZXNjcmlwdG9yKCJBR1QiLCAtMTgwLCBmYWxzZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkJFVCIsIC0xODAsIHRydWUpLAorICAgICAgICAgICAgLy8gbmV3IFpvbmVEZXNjcmlwdG9yKCJDQVQiLCAtNjAsIGZhbHNlKSwgLy8gV3Jvbmc6CisgICAgICAgICAgICAvLyBBcyBvZiBidWcgNDEzMDg4NSwgZml4IENBVCAoQ2VudHJhbCBBZnJpY2EpCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkNBVCIsIDEyMCwgZmFsc2UpLCAvLyBBZnJpY2EvSGFyYXJlCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkdNVCIsIDAsIGZhbHNlKSwKKyAgICAgICAgICAgIG5ldyBab25lRGVzY3JpcHRvcigiVVRDIiwgMCwgZmFsc2UpLAorICAgICAgICAgICAgbmV3IFpvbmVEZXNjcmlwdG9yKCJFQ1QiLCA2MCwgdHJ1ZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkFSVCIsIDEyMCwgdHJ1ZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkVFVCIsIDEyMCwgdHJ1ZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkVBVCIsIDE4MCwgZmFsc2UpLAorICAgICAgICAgICAgLy8gbmV3IFpvbmVEZXNjcmlwdG9yKCJNRVQiLCAyMTAsIHRydWUpLAorICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHN0YW5kYXJkIFVuaXggem9uZSwgc28gZG9uJ3QgcmVtYXAgaXQgLSBMaXUgM0phbjAxCisgICAgICAgICAgICAvLyBuZXcgWm9uZURlc2NyaXB0b3IoIk5FVCIsIDI0MCwgZmFsc2UpOworICAgICAgICAgICAgLy8gQXMgb2YgYnVnIDQxOTExNjQsIGZpeCBORVQKKyAgICAgICAgICAgIG5ldyBab25lRGVzY3JpcHRvcigiTkVUIiwgMjQwLCB0cnVlKSwKKyAgICAgICAgICAgIG5ldyBab25lRGVzY3JpcHRvcigiUExUIiwgMzAwLCB0cnVlKSwgLy8gTGl1IDNEZWMwMiwgUGFraXN0YW4gdXNlcyBEU1QgYXMgb2YgMjAwMgorICAgICAgICAgICAgbmV3IFpvbmVEZXNjcmlwdG9yKCJJU1QiLCAzMzAsIGZhbHNlKSwKKyAgICAgICAgICAgIG5ldyBab25lRGVzY3JpcHRvcigiQlNUIiwgMzYwLCBmYWxzZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIlZTVCIsIDQyMCwgZmFsc2UpLAorICAgICAgICAgICAgbmV3IFpvbmVEZXNjcmlwdG9yKCJDVFQiLCA0ODAsIHRydWUpLCAvLyBSZXZpc2VkIExpdSAzSmFuMDEsIHN0ZC0+ZHN0CisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkpTVCIsIDU0MCwgZmFsc2UpLAorICAgICAgICAgICAgbmV3IFpvbmVEZXNjcmlwdG9yKCJBQ1QiLCA1NzAsIHRydWUpLCAvLyBSZXZpc2VkIExpdSAzSmFuMDEsIHN0ZC0+ZHN0CisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIkFFVCIsIDYwMCwgdHJ1ZSksCisgICAgICAgICAgICBuZXcgWm9uZURlc2NyaXB0b3IoIlNTVCIsIDY2MCwgZmFsc2UpLAorICAgICAgICAgICAgLy8gbmV3IFpvbmVEZXNjcmlwdG9yKCJOU1QiLCA3MjAsIGZhbHNlKSwKKyAgICAgICAgICAgIC8vIEFzIG9mIGJ1ZyA0MTMwODg1LCBmaXggTlNUIChOZXcgWmVhbGFuZCkKKyAgICAgICAgICAgIG5ldyBab25lRGVzY3JpcHRvcigiTlNUIiwgNzIwLCB0cnVlKSwgLy8gUGFjaWZpYy9BdWNrbGFuZAorCisgICAgICAgICAgICAvLyBbM0phbjAxIExpdV0gVGhyZWUgb2YgdGhlc2Ugem9uZXMgaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAgICAgICAgICAvLyBUaGUgQ1RUIGFuZCBBQ1Qgem9uZXMganVzdCByZW1hcCB0byBBc2lhL1NoYW5naGFpCisgICAgICAgICAgICAvLyBhbmQgQXVzdHJhbGlhL0Rhcndpbi4gIFNpbmNlIHRob3NlIHpvbmVzIGhhdmUgY2hhbmdlZCwKKyAgICAgICAgICAgIC8vIEkgaGF2ZSB1cGRhdGVkIHRoZSB0YWJsZS4gIFRoZSBNRVQgem9uZSB1c2VkIHRvIGJlIG1hcHBlZAorICAgICAgICAgICAgLy8gdG8gQXNpYS9UZWhyYW4gYnV0IHNpbmNlIE1FVCBpcyBhIHN0YW5kYXJkIFVuaXggem9uZSBuYW1lZAorICAgICAgICAgICAgLy8gaW4gdGhlIHNvdXJjZSBkYXRhIHdlIG5vIGxvbmdlciBkbyB0aGlzIGluIGljdSBvciBpY3U0ai4KKyAgICAgICAgfTsKKworICAgICAgICBIYXNodGFibGUgaGFzaCA9IG5ldyBIYXNodGFibGUoKTsKKworICAgICAgICBTdHJpbmdbXSBpZHMgPSBUaW1lWm9uZS5nZXRBdmFpbGFibGVJRHMoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGlkID0gaWRzW2ldOworICAgICAgICAgICAgaWYgKGlkLmxlbmd0aCgpID09IDMpIHsKKyAgICAgICAgICAgICAgICBoYXNoLnB1dChpZCwgbmV3IFpvbmVEZXNjcmlwdG9yKFRpbWVab25lLmdldFRpbWVab25lKGlkKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPEpES18xMTZfUkVGRVJFTkNFX0xJU1QubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFpvbmVEZXNjcmlwdG9yIHJlZmVyZW5jZVpvbmUgPSBKREtfMTE2X1JFRkVSRU5DRV9MSVNUW2ldOworICAgICAgICAgICAgWm9uZURlc2NyaXB0b3IgY3VycmVudFpvbmUgPSAoWm9uZURlc2NyaXB0b3IpaGFzaC5nZXQocmVmZXJlbmNlWm9uZS5nZXRJRCgpKTsKKyAgICAgICAgICAgIGlmIChyZWZlcmVuY2Vab25lLmVxdWFscyhjdXJyZW50Wm9uZSkpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigib2sgIiArIHJlZmVyZW5jZVpvbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWw6IEV4cGVjdGVkICIgKyByZWZlcmVuY2Vab25lICsKKyAgICAgICAgICAgICAgICAgICAgICAiOyBnb3QgIiArIGN1cnJlbnRab25lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEEgZGVzY3JpcHRvciBmb3IgYSB6b25lOyB1c2VkIHRvIHJlZ3Jlc3MgdGhlIHNob3J0IHpvbmUgSURzLgorICAgICAqLworICAgIHN0YXRpYyBjbGFzcyBab25lRGVzY3JpcHRvciB7CisgICAgICAgIFN0cmluZyBpZDsKKyAgICAgICAgaW50IG9mZnNldDsgLy8gSW4gbWludXRlcworICAgICAgICBib29sZWFuIGRheWxpZ2h0OworCisgICAgICAgIFpvbmVEZXNjcmlwdG9yKFRpbWVab25lIHpvbmUpIHsKKyAgICAgICAgICAgIHRoaXMuaWQgPSB6b25lLmdldElEKCk7CisgICAgICAgICAgICB0aGlzLm9mZnNldCA9IHpvbmUuZ2V0UmF3T2Zmc2V0KCkgLyA2MDAwMDsKKyAgICAgICAgICAgIHRoaXMuZGF5bGlnaHQgPSB6b25lLnVzZURheWxpZ2h0VGltZSgpOworICAgICAgICB9CisKKyAgICAgICAgWm9uZURlc2NyaXB0b3IoU3RyaW5nIGlkLCBpbnQgb2Zmc2V0LCBib29sZWFuIGRheWxpZ2h0KSB7CisgICAgICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgIHRoaXMuZGF5bGlnaHQgPSBkYXlsaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKSB7IHJldHVybiBpZDsgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeworICAgICAgICAgICAgWm9uZURlc2NyaXB0b3IgdGhhdCA9IChab25lRGVzY3JpcHRvcilvOworICAgICAgICAgICAgcmV0dXJuIHRoYXQgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIGlkLmVxdWFscyh0aGF0LmlkKSAmJgorICAgICAgICAgICAgICAgIG9mZnNldCA9PSB0aGF0Lm9mZnNldCAmJgorICAgICAgICAgICAgICAgIGRheWxpZ2h0ID09IHRoYXQuZGF5bGlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgaW50IG1pbiA9IG9mZnNldDsKKyAgICAgICAgICAgIGNoYXIgc2lnbiA9ICcrJzsKKyAgICAgICAgICAgIGlmIChtaW4gPCAwKSB7IHNpZ24gPSAnLSc7IG1pbiA9IC1taW47IH0KKworICAgICAgICAgICAgcmV0dXJuICJab25lW1wiIiArIGlkICsgIlwiLCBHTVQiICsgc2lnbiArIChtaW4vNjApICsgJzonICsKKyAgICAgICAgICAgICAgICAobWluJTYwPDEwPyIwIjoiIikgKyAobWluJTYwKSArICIsICIgKworICAgICAgICAgICAgICAgIChkYXlsaWdodCA/ICJEYXlsaWdodCIgOiAiU3RhbmRhcmQiKSArICJdIjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKKyAgICAgICAgICAgIFpvbmVEZXNjcmlwdG9yIGkxID0gKFpvbmVEZXNjcmlwdG9yKW8xOworICAgICAgICAgICAgWm9uZURlc2NyaXB0b3IgaTIgPSAoWm9uZURlc2NyaXB0b3IpbzI7CisgICAgICAgICAgICBpZiAoaTEub2Zmc2V0ID4gaTIub2Zmc2V0KSByZXR1cm4gMTsKKyAgICAgICAgICAgIGlmIChpMS5vZmZzZXQgPCBpMi5vZmZzZXQpIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChpMS5kYXlsaWdodCAmJiAhaTIuZGF5bGlnaHQpIHJldHVybiAxOworICAgICAgICAgICAgaWYgKCFpMS5kYXlsaWdodCAmJiBpMi5kYXlsaWdodCkgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIGkxLmlkLmNvbXBhcmVUbyhpMi5pZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX0NVU1RPTV9JRCA9ICJDdXN0b20iOworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgZm9ybWF0TWludXRlcyhpbnQgbWluKSB7CisgICAgICAgIGNoYXIgc2lnbiA9ICcrJzsKKyAgICAgICAgaWYgKG1pbiA8IDApIHsgc2lnbiA9ICctJzsgbWluID0gLW1pbjsgfQorICAgICAgICBpbnQgaCA9IG1pbi82MDsKKyAgICAgICAgbWluID0gbWluJTYwOworICAgICAgICByZXR1cm4gIiIgKyBzaWduICsgaCArICI6IiArICgobWluPDEwKSA/ICIwIiA6ICIiKSArIG1pbjsKKyAgICB9CisgICAgLyoqCisgICAgICogQXMgcGFydCBvZiB0aGUgVk0gZml4IChzZWUgQ0NDIGFwcHJvdmVkIFJGRSA0MDI4MDA2LCBidWcKKyAgICAgKiA0MDQ0MDEzKSwgVGltZVpvbmUuZ2V0VGltZVpvbmUoKSBoYXMgYmVlbiBtb2RpZmllZCB0byByZWNvZ25pemUKKyAgICAgKiBnZW5lcmljIElEcyBvZiB0aGUgZm9ybSBHTVRbKy1daGg6bW0sIEdNVFsrLV1oaG1tLCBhbmQKKyAgICAgKiBHTVRbKy1daGguICBUZXN0IHRoaXMgYmVoYXZpb3IgaGVyZS4KKyAgICAgKgorICAgICAqIEJ1ZyA0MDQ0MDEzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEN1c3RvbVBhcnNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIE9iamVjdFtdIERBVEEgPSB7CisgICAgICAgICAgICAvLyBJRCAgICAgICAgRXhwZWN0ZWQgb2Zmc2V0IGluIG1pbnV0ZXMKKyAgICAgICAgICAgICJHTVQiLCAgICAgICBudWxsLAorICAgICAgICAgICAgIkdNVDAiLCAgICAgIG51bGwsCisgICAgICAgICAgICAiR01UKzAiLCAgICAgbmV3IEludGVnZXIoMCksCisgICAgICAgICAgICAiR01UKzEiLCAgICAgbmV3IEludGVnZXIoNjApLAorICAgICAgICAgICAgIkdNVC0wMDMwIiwgIG5ldyBJbnRlZ2VyKC0zMCksCisgICAgICAgICAgICAiR01UKzE1Ojk5IiwgbmV3IEludGVnZXIoMTUqNjArOTkpLAorICAgICAgICAgICAgIkdNVCsiLCAgICAgIG51bGwsCisgICAgICAgICAgICAiR01ULSIsICAgICAgbnVsbCwKKyAgICAgICAgICAgICJHTVQrMDoiLCAgICBudWxsLAorICAgICAgICAgICAgIkdNVC06IiwgICAgIG51bGwsCisgICAgICAgICAgICAiR01UKzAwMTAiLCAgbmV3IEludGVnZXIoMTApLCAvLyBJbnRlcnByZXQgdGhpcyBhcyAwMDoxMAorICAgICAgICAgICAgIkdNVC0xMCIsICAgIG5ldyBJbnRlZ2VyKC0xMCo2MCksCisgICAgICAgICAgICAiR01UKzMwIiwgICAgbmV3IEludGVnZXIoMzApLAorICAgICAgICAgICAgIkdNVC0zOjMwIiwgIG5ldyBJbnRlZ2VyKC0oMyo2MCszMCkpLAorICAgICAgICAgICAgIkdNVC0yMzAiLCAgIG5ldyBJbnRlZ2VyKC0oMio2MCszMCkpLAorICAgICAgICB9OworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IChTdHJpbmcpREFUQVtpXTsKKyAgICAgICAgICAgIEludGVnZXIgZXhwID0gKEludGVnZXIpREFUQVtpKzFdOworICAgICAgICAgICAgVGltZVpvbmUgem9uZSA9IFRpbWVab25lLmdldFRpbWVab25lKGlkKTsKKyAgICAgICAgICAgIGlmICh6b25lLmdldElEKCkuZXF1YWxzKCJHTVQiKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKGlkICsgIiAtPiBnZW5lcmljIEdNVCIpOworICAgICAgICAgICAgICAgIC8vIFdoZW4gVGltZVpvbmUuZ2V0VGltZVpvbmUoKSBjYW4ndCBwYXJzZSB0aGUgaWQsIGl0CisgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBHTVQgLS0gYSBkdWJpb3VzIHByYWN0aWNlLCBidXQgcmVxdWlyZWQgZm9yCisgICAgICAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgICAgICBpZiAoZXhwICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXhwZWN0ZWQgb2Zmc2V0IG9mICIgKyBmb3JtYXRNaW51dGVzKGV4cC5pbnRWYWx1ZSgpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3IgIiArIGlkICsgIiwgZ290IHBhcnNlIGZhaWx1cmUiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgaW9mZnNldCA9IHpvbmUuZ2V0UmF3T2Zmc2V0KCkvNjAwMDA7CisgICAgICAgICAgICAgICAgU3RyaW5nIG9mZnNldCA9IGZvcm1hdE1pbnV0ZXMoaW9mZnNldCk7CisgICAgICAgICAgICAgICAgbG9nbG4oaWQgKyAiIC0+ICIgKyB6b25lLmdldElEKCkgKyAiIEdNVCIgKyBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChleHAgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJFeHBlY3RlZCBwYXJzZSBmYWlsdXJlIGZvciAiICsgaWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIGdvdCBvZmZzZXQgb2YgIiArIG9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgaWQgIiArIHpvbmUuZ2V0SUQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlvZmZzZXQgIT0gZXhwLmludFZhbHVlKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAhem9uZS5nZXRJRCgpLmVxdWFscyhFWFBFQ1RFRF9DVVNUT01fSUQpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkV4cGVjdGVkIG9mZnNldCBvZiAiICsgZm9ybWF0TWludXRlcyhleHAuaW50VmFsdWUoKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIGlkIEN1c3RvbSwgZm9yICIgKyBpZCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZ290IG9mZnNldCBvZiAiICsgb2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBpZCAiICsgem9uZS5nZXRJRCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBnZXREaXNwbGF5TmFtZSgpIEFQSS4KKyAgICAgKgorICAgICAqIEJ1ZyA0MTEyODY5CisgICAgICogQnVnIDQwMjgwMDYKKyAgICAgKgorICAgICAqIFNlZSBhbHNvIEFQSSBjaGFuZ2UgcmVxdWVzdCBBNDEuCisgICAgICoKKyAgICAgKiA0LzIxLzk4IC0gbWFrZSBzbWFydGVyLCBzbyB0aGUgdGVzdCB3b3JrcyBpZiB0aGUgZXh0IHJlc291cmNlcworICAgICAqIGFyZSBwcmVzZW50IG9yIG5vdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0RGlzcGxheU5hbWUoKSB7CisgICAgICAgIFRpbWVab25lIHpvbmUgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisgICAgICAgIFN0cmluZyBuYW1lID0gem9uZS5nZXREaXNwbGF5TmFtZShMb2NhbGUuRU5HTElTSCk7CisgICAgICAgIGxvZ2xuKCJQU1QtPiIgKyBuYW1lKTsKKyAgICAgICAgaWYgKCFuYW1lLmVxdWFscygiUGFjaWZpYyBTdGFuZGFyZCBUaW1lIikpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogRXhwZWN0ZWQgXCJQYWNpZmljIFN0YW5kYXJkIFRpbWVcIiwgZ290ICIgKyBuYW1lICsKKyAgICAgICAgICAgICAgICAgICIgZm9yICIgKyB6b25lKTsKKworICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgIC8vIFRIRSBGT0xMT1dJTkcgTElORVMgTVVTVCBCRSBVUERBVEVEIElGIFRIRSBMT0NBTEUgREFUQSBDSEFOR0VTCisgICAgICAgIC8vIFRIRSBGT0xMT1dJTkcgTElORVMgTVVTVCBCRSBVUERBVEVEIElGIFRIRSBMT0NBTEUgREFUQSBDSEFOR0VTCisgICAgICAgIC8vIFRIRSBGT0xMT1dJTkcgTElORVMgTVVTVCBCRSBVUERBVEVEIElGIFRIRSBMT0NBTEUgREFUQSBDSEFOR0VTCisgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgT2JqZWN0W10gREFUQSA9IHsKKyAgICAgICAgICAgIG5ldyBCb29sZWFuKGZhbHNlKSwgbmV3IEludGVnZXIoVGltZVpvbmUuU0hPUlQpLCAiUFNUIiwKKyAgICAgICAgICAgIG5ldyBCb29sZWFuKHRydWUpLCAgbmV3IEludGVnZXIoVGltZVpvbmUuU0hPUlQpLCAiUERUIiwKKyAgICAgICAgICAgIG5ldyBCb29sZWFuKGZhbHNlKSwgbmV3IEludGVnZXIoVGltZVpvbmUuTE9ORyksICAiUGFjaWZpYyBTdGFuZGFyZCBUaW1lIiwKKyAgICAgICAgICAgIG5ldyBCb29sZWFuKHRydWUpLCAgbmV3IEludGVnZXIoVGltZVpvbmUuTE9ORyksICAiUGFjaWZpYyBEYXlsaWdodCBUaW1lIiwKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7IGkrPTMpIHsKKyAgICAgICAgICAgIG5hbWUgPSB6b25lLmdldERpc3BsYXlOYW1lKCgoQm9vbGVhbilEQVRBW2ldKS5ib29sZWFuVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW50ZWdlcilEQVRBW2krMV0pLmludFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbGUuRU5HTElTSCk7CisgICAgICAgICAgICBpZiAoIW5hbWUuZXF1YWxzKERBVEFbaSsyXSkpCisgICAgICAgICAgICAgICAgZXJybG4oIkZhaWw6IEV4cGVjdGVkICIgKyBEQVRBW2krMl0gKyAiOyBnb3QgIiArIG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgZGlzcGxheSB0aGUgRFNUIG5hbWUgYnkgY29uc3RydWN0aW5nIGEgZmFrZQorICAgICAgICAvLyBQU1Qgem9uZSB0aGF0IGhhcyBEU1QgYWxsIHllYXIgbG9uZy4KKyAgICAgICAgU2ltcGxlVGltZVpvbmUgem9uZTIgPSBuZXcgU2ltcGxlVGltZVpvbmUoMCwgIlBTVCIpOworICAgICAgICB6b25lMi5zZXRTdGFydFJ1bGUoQ2FsZW5kYXIuSkFOVUFSWSwgMSwgMCk7CisgICAgICAgIHpvbmUyLnNldEVuZFJ1bGUoQ2FsZW5kYXIuREVDRU1CRVIsIDMxLCAwKTsKKyAgICAgICAgbG9nbG4oIk1vZGlmaWVkIFBTVCBpbkRheWxpZ2h0VGltZS0+IiArIHpvbmUyLmluRGF5bGlnaHRUaW1lKG5ldyBEYXRlKCkpKTsKKyAgICAgICAgbmFtZSA9IHpvbmUyLmdldERpc3BsYXlOYW1lKExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgbG9nbG4oIk1vZGlmaWVkIFBTVC0+IiArIG5hbWUpOworICAgICAgICBpZiAoIW5hbWUuZXF1YWxzKCJQYWNpZmljIFN0YW5kYXJkIFRpbWUiKSkKKyAgICAgICAgICAgIGVycmxuKCJGYWlsOiBFeHBlY3RlZCBcIlBhY2lmaWMgU3RhbmRhcmQgVGltZVwiIik7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGdldCB0aGUgZGVmYXVsdCBkaXNwbGF5IGZvcm1hdCBmb3IgTG9jYWxlcworICAgICAgICAvLyB3aXRoIG5vIGRpc3BsYXkgbmFtZSBkYXRhLgorICAgICAgICBMb2NhbGUgemhfQ04gPSBMb2NhbGUuU0lNUExJRklFRF9DSElORVNFOworICAgICAgICBuYW1lID0gem9uZS5nZXREaXNwbGF5TmFtZSh6aF9DTik7CisgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgLy8gVEhFIEZPTExPV0lORyBMSU5FIE1VU1QgQkUgVVBEQVRFRCBJRiBUSEUgTE9DQUxFIERBVEEgQ0hBTkdFUworICAgICAgICAvLyBUSEUgRk9MTE9XSU5HIExJTkUgTVVTVCBCRSBVUERBVEVEIElGIFRIRSBMT0NBTEUgREFUQSBDSEFOR0VTCisgICAgICAgIC8vIFRIRSBGT0xMT1dJTkcgTElORSBNVVNUIEJFIFVQREFURUQgSUYgVEhFIExPQ0FMRSBEQVRBIENIQU5HRVMKKyAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICBsb2dsbigiUFNUKHpoX0NOKS0+IiArIG5hbWUpOworCisgICAgICAgIC8vIE5vdyBiZSBzbWFydCAtLSBjaGVjayB0byBzZWUgaWYgemggcmVzb3VyY2UgaXMgZXZlbiBwcmVzZW50LgorICAgICAgICAvLyBJZiBub3QsIHdlIGV4cGVjdCB0aGUgZW4gZmFsbGJhY2sgYmVoYXZpb3IuCisKKwkJLy8gaW4gaWN1NGogMi4xIHdlIGtub3cgd2UgaGF2ZSB0aGUgemhfQ04gbG9jYWxlIGRhdGEsIHRob3VnaCBpdCdzIGluY29tcGxldGUKKwkJLyoKKyAgICAgICAgUmVzb3VyY2VCdW5kbGUgZW5SQiA9IElDVUxvY2FsZURhdGEuZ2V0UmVzb3VyY2VCdW5kbGUoIkRhdGVGb3JtYXRab25lRGF0YSIsIExvY2FsZS5FTkdMSVNIKTsKKyAgICAgICAgUmVzb3VyY2VCdW5kbGUgemhSQiA9IElDVUxvY2FsZURhdGEuZ2V0UmVzb3VyY2VCdW5kbGUoIkRhdGVGb3JtYXRab25lRGF0YSIsIHpoX0NOKTsKKyAgICAgICAgYm9vbGVhbiBub1pIID0gZW5SQiA9PSB6aFJCOworCisgICAgICAgIGlmIChub1pIKSB7CisgICAgICAgICAgICBsb2dsbigiV2FybmluZzogTm90IHRlc3RpbmcgdGhlIHpoX0NOIGJlaGF2aW9yIGJlY2F1c2UgcmVzb3VyY2UgaXMgYWJzZW50Iik7CisgICAgICAgICAgICBpZiAoIW5hbWUuZXF1YWxzKCJQYWNpZmljIFN0YW5kYXJkIFRpbWUiKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRmFpbDogRXhwZWN0ZWQgUGFjaWZpYyBTdGFuZGFyZCBUaW1lIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAKKwkJKi8KKwkJaWYgKCFuYW1lLmVxdWFscygiUGFjaWZpYyBTdGFuZGFyZCBUaW1lIikgJiYKKwkJCSFuYW1lLmVxdWFscygiR01ULTA4OjAwIikgJiYKKwkJCSFuYW1lLmVxdWFscygiR01ULTg6MDAiKSAmJgorCQkJIW5hbWUuZXF1YWxzKCJHTVQtMDgwMCIpICYmCisJCQkhbmFtZS5lcXVhbHMoIkdNVC04MDAiKSkgeworCisgICAgICAgICAgICBlcnJsbigiRmFpbDogRXhwZWN0ZWQgR01ULTA4OjAwIG9yIHNvbWV0aGluZyBzaW1pbGFyIik7CisgICAgICAgICAgICBlcnJsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgICAgICBlcnJsbigiVEhFIEFCT1ZFIEZBSUxVUkUgTUFZIEpVU1QgTUVBTiBUSEUgTE9DQUxFIERBVEEgSEFTIENIQU5HRUQiKTsKKyAgICAgICAgICAgIGVycmxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IHRyeSBhIG5vbi1leGlzdGVudCB6b25lCisgICAgICAgIHpvbmUyID0gbmV3IFNpbXBsZVRpbWVab25lKDkwKjYwKjEwMDAsICJ4eXp6eSIpOworICAgICAgICBuYW1lID0gem9uZTIuZ2V0RGlzcGxheU5hbWUoTG9jYWxlLkVOR0xJU0gpOworICAgICAgICBsb2dsbigiR01UKzkwbWluLT4iICsgbmFtZSk7CisgICAgICAgIGlmICghbmFtZS5lcXVhbHMoIkdNVCswMTozMCIpICYmCisgICAgICAgICAgICAhbmFtZS5lcXVhbHMoIkdNVCsxOjMwIikgJiYKKyAgICAgICAgICAgICFuYW1lLmVxdWFscygiR01UKzAxMzAiKSAmJgorICAgICAgICAgICAgIW5hbWUuZXF1YWxzKCJHTVQrMTMwIikpCisgICAgICAgICAgICBlcnJsbigiRmFpbDogRXhwZWN0ZWQgR01UKzAxOjMwIG9yIHNvbWV0aGluZyBzaW1pbGFyIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEdlbmVyaWNBUEkoKSB7CisgICAgICAgIFN0cmluZyBpZCA9ICJOZXdHTVQiOworICAgICAgICBpbnQgb2Zmc2V0ID0gMTIzNDU7CisKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgem9uZSA9IG5ldyBTaW1wbGVUaW1lWm9uZShvZmZzZXQsIGlkKTsKKyAgICAgICAgaWYgKHpvbmUudXNlRGF5bGlnaHRUaW1lKCkpIGVycmxuKCJGQUlMOiB1c2VEYXlsaWdodFRpbWUgc2hvdWxkIHJldHVybiBmYWxzZSIpOworCisgICAgICAgIFRpbWVab25lIHpvbmVjbG9uZSA9IChUaW1lWm9uZSl6b25lLmNsb25lKCk7CisgICAgICAgIGlmICghem9uZWNsb25lLmVxdWFscyh6b25lKSkgZXJybG4oIkZBSUw6IGNsb25lIG9yIG9wZXJhdG9yPT0gZmFpbGVkIik7CisgICAgICAgIHpvbmVjbG9uZS5zZXRJRCgiYWJjIik7CisgICAgICAgIGlmICh6b25lY2xvbmUuZXF1YWxzKHpvbmUpKSBlcnJsbigiRkFJTDogY2xvbmUgb3Igb3BlcmF0b3IhPSBmYWlsZWQiKTsKKyAgICAgICAgLy8gZGVsZXRlIHpvbmVjbG9uZTsKKworICAgICAgICB6b25lY2xvbmUgPSAoVGltZVpvbmUpem9uZS5jbG9uZSgpOworICAgICAgICBpZiAoIXpvbmVjbG9uZS5lcXVhbHMoem9uZSkpIGVycmxuKCJGQUlMOiBjbG9uZSBvciBvcGVyYXRvcj09IGZhaWxlZCIpOworICAgICAgICB6b25lY2xvbmUuc2V0UmF3T2Zmc2V0KDQ1Njc4KTsKKyAgICAgICAgaWYgKHpvbmVjbG9uZS5lcXVhbHMoem9uZSkpIGVycmxuKCJGQUlMOiBjbG9uZSBvciBvcGVyYXRvciE9IGZhaWxlZCIpOworCisgICAgICAgIC8vIEMrKyBvbmx5CisgICAgICAgIC8qCisgICAgICAgICAgU2ltcGxlVGltZVpvbmUgY29weSgqem9uZSk7CisgICAgICAgICAgaWYgKCEoY29weSA9PSAqem9uZSkpIGVycmxuKCJGQUlMOiBjb3B5IGNvbnN0cnVjdG9yIG9yIG9wZXJhdG9yPT0gZmFpbGVkIik7CisgICAgICAgICAgY29weSA9ICooU2ltcGxlVGltZVpvbmUqKXpvbmVjbG9uZTsKKyAgICAgICAgICBpZiAoIShjb3B5ID09ICp6b25lY2xvbmUpKSBlcnJsbigiRkFJTDogYXNzaWdubWVudCBvcGVyYXRvciBvciBvcGVyYXRvcj09IGZhaWxlZCIpOworICAgICAgICAgICovCisKKyAgICAgICAgVGltZVpvbmUgc2F2ZURlZmF1bHQgPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7CisgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQoem9uZSk7CisgICAgICAgIFRpbWVab25lIGRlZmF1bHR6b25lID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOworICAgICAgICBpZiAoZGVmYXVsdHpvbmUgPT0gem9uZSkgZXJybG4oIkZBSUw6IERlZmF1bHQgb2JqZWN0IGlzIGlkZW50aWNhbCwgbm90IGNsb25lIik7CisgICAgICAgIGlmICghZGVmYXVsdHpvbmUuZXF1YWxzKHpvbmUpKSBlcnJsbigiRkFJTDogRGVmYXVsdCBvYmplY3QgaXMgbm90IGVxdWFsIik7CisgICAgICAgIFRpbWVab25lLnNldERlZmF1bHQoc2F2ZURlZmF1bHQpOworICAgICAgICAvLyBkZWxldGUgZGVmYXVsdHpvbmU7CisgICAgICAgIC8vIGRlbGV0ZSB6b25lY2xvbmU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFJ1bGVBUEkoKQorICAgIHsKKyAgICAgICAgLy8gRXJyb3JDb2RlIHN0YXR1cyA9IFpFUk9fRVJST1I7CisKKyAgICAgICAgaW50IG9mZnNldCA9IChpbnQpKDYwKjYwKjEwMDAqMS43NSk7IC8vIFBpY2sgYSB3ZWlyZCBvZmZzZXQKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgem9uZSA9IG5ldyBTaW1wbGVUaW1lWm9uZShvZmZzZXQsICJUZXN0Wm9uZSIpOworICAgICAgICBpZiAoem9uZS51c2VEYXlsaWdodFRpbWUoKSkgZXJybG4oIkZBSUw6IHVzZURheWxpZ2h0VGltZSBzaG91bGQgcmV0dXJuIGZhbHNlIik7CisKKyAgICAgICAgLy8gRXN0YWJsaXNoIG91ciBleHBlY3RlZCB0cmFuc2l0aW9uIHRpbWVzLiAgRG8gdGhpcyB3aXRoIGEgbm9uLURTVAorICAgICAgICAvLyBjYWxlbmRhciB3aXRoIHRoZSAoYWJvdmUpIGRlY2xhcmVkIGxvY2FsIG9mZnNldC4KKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoem9uZSk7CisgICAgICAgIGdjLmNsZWFyKCk7CisgICAgICAgIGdjLnNldCgxOTkwLCBDYWxlbmRhci5NQVJDSCwgMSk7CisgICAgICAgIGxvbmcgbWFyY2hPbmVTdGQgPSBnYy5nZXRUaW1lKCkuZ2V0VGltZSgpOyAvLyBMb2NhbCBTdGQgdGltZSBtaWRuaWdodAorICAgICAgICBnYy5jbGVhcigpOworICAgICAgICBnYy5zZXQoMTk5MCwgQ2FsZW5kYXIuSlVMWSwgMSk7CisgICAgICAgIGxvbmcganVseU9uZVN0ZCA9IGdjLmdldFRpbWUoKS5nZXRUaW1lKCk7IC8vIExvY2FsIFN0ZCB0aW1lIG1pZG5pZ2h0CisKKyAgICAgICAgLy8gU3RhcnRpbmcgYW5kIGVuZGluZyBob3VycywgV0FMTCBUSU1FCisgICAgICAgIGludCBzdGFydEhvdXIgPSAoaW50KSgyLjI1ICogMzYwMDAwMCk7CisgICAgICAgIGludCBlbmRIb3VyICAgPSAoaW50KSgzLjUgICogMzYwMDAwMCk7CisKKyAgICAgICAgem9uZS5zZXRTdGFydFJ1bGUoQ2FsZW5kYXIuTUFSQ0gsIDEsIDAsIHN0YXJ0SG91cik7CisgICAgICAgIHpvbmUuc2V0RW5kUnVsZSAgKENhbGVuZGFyLkpVTFksICAxLCAwLCBlbmRIb3VyKTsKKworICAgICAgICBnYyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcih6b25lKTsKKyAgICAgICAgLy8gaWYgKGZhaWx1cmUoc3RhdHVzLCAibmV3IEdyZWdvcmlhbkNhbGVuZGFyIikpIHJldHVybjsKKworICAgICAgICBsb25nIG1hcmNoT25lID0gbWFyY2hPbmVTdGQgKyBzdGFydEhvdXI7CisgICAgICAgIGxvbmcganVseU9uZSA9IGp1bHlPbmVTdGQgKyBlbmRIb3VyIC0gMzYwMDAwMDsgLy8gQWRqdXN0IGZyb20gd2FsbCB0byBTdGQgdGltZQorCisgICAgICAgIGxvbmcgZXhwTWFyY2hPbmUgPSA2MzYyNTE0MDAwMDBMOworICAgICAgICBpZiAobWFyY2hPbmUgIT0gZXhwTWFyY2hPbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBFeHBlY3RlZCBzdGFydCBjb21wdXRlZCBhcyAiICsgbWFyY2hPbmUgKworICAgICAgICAgICAgICAgICAgIiA9ICIgKyBuZXcgRGF0ZShtYXJjaE9uZSkpOworICAgICAgICAgICAgbG9nbG4oIiAgICAgIFNob3VsZCBiZSAgICAgICAgICAgICAgICAgICIgKyBleHBNYXJjaE9uZSArCisgICAgICAgICAgICAgICAgICAiID0gIiArIG5ldyBEYXRlKGV4cE1hcmNoT25lKSk7CisgICAgICAgIH0KKworICAgICAgICBsb25nIGV4cEp1bHlPbmUgPSA2NDY3OTMxMDAwMDBMOworICAgICAgICBpZiAoanVseU9uZSAhPSBleHBKdWx5T25lKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgc3RhcnQgY29tcHV0ZWQgYXMgIiArIGp1bHlPbmUgKworICAgICAgICAgICAgICAgICAgIiA9ICIgKyBuZXcgRGF0ZShqdWx5T25lKSk7CisgICAgICAgICAgICBsb2dsbigiICAgICAgU2hvdWxkIGJlICAgICAgICAgICAgICAgICAgIiArIGV4cEp1bHlPbmUgKworICAgICAgICAgICAgICAgICAgIiA9ICIgKyBuZXcgRGF0ZShleHBKdWx5T25lKSk7CisgICAgICAgIH0KKworICAgICAgICBDYWxlbmRhciBjYWwxID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgY2FsMS5zZXQoMTk5MCwgQ2FsZW5kYXIuSkFOVUFSWSwgMSk7CisgICAgICAgIENhbGVuZGFyIGNhbDIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBjYWwyLnNldCgxOTkwLCBDYWxlbmRhci5KVU5FLCAxKTsKKyAgICAgICAgX3Rlc3RVc2luZ0JpbmFyeVNlYXJjaCh6b25lLCBjYWwxLmdldFRpbWVJbk1pbGxpcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbDIuZ2V0VGltZUluTWlsbGlzKCksIG1hcmNoT25lKTsKKyAgICAgICAgY2FsMS5zZXQoMTk5MCwgQ2FsZW5kYXIuSlVORSwgMSk7CisgICAgICAgIGNhbDIuc2V0KDE5OTAsIENhbGVuZGFyLkRFQ0VNQkVSLCAzMSk7CisgICAgICAgIF90ZXN0VXNpbmdCaW5hcnlTZWFyY2goem9uZSwgY2FsMS5nZXRUaW1lSW5NaWxsaXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwyLmdldFRpbWVJbk1pbGxpcygpLCBqdWx5T25lKTsKKworICAgICAgICBpZiAoem9uZS5pbkRheWxpZ2h0VGltZShuZXcgRGF0ZShtYXJjaE9uZSAtIDEwMDApKSB8fAorICAgICAgICAgICAgIXpvbmUuaW5EYXlsaWdodFRpbWUobmV3IERhdGUobWFyY2hPbmUpKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBTdGFydCBydWxlIGJyb2tlbiIpOworICAgICAgICBpZiAoIXpvbmUuaW5EYXlsaWdodFRpbWUobmV3IERhdGUoanVseU9uZSAtIDEwMDApKSB8fAorICAgICAgICAgICAgem9uZS5pbkRheWxpZ2h0VGltZShuZXcgRGF0ZShqdWx5T25lKSkpCisgICAgICAgICAgICBlcnJsbigiRkFJTDogRW5kIHJ1bGUgYnJva2VuIik7CisKKyAgICAgICAgem9uZS5zZXRTdGFydFllYXIoMTk5MSk7CisgICAgICAgIGlmICh6b25lLmluRGF5bGlnaHRUaW1lKG5ldyBEYXRlKG1hcmNoT25lKSkgfHwKKyAgICAgICAgICAgIHpvbmUuaW5EYXlsaWdodFRpbWUobmV3IERhdGUoanVseU9uZSAtIDEwMDApKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBTdGFydCB5ZWFyIGJyb2tlbiIpOworCisgICAgICAgIC8vIGZhaWx1cmUoc3RhdHVzLCAiVGVzdFJ1bGVBUEkiKTsKKyAgICAgICAgLy8gZGVsZXRlIGdjOworICAgICAgICAvLyBkZWxldGUgem9uZTsKKyAgICB9CisKKyAgICB2b2lkIF90ZXN0VXNpbmdCaW5hcnlTZWFyY2goU2ltcGxlVGltZVpvbmUgdHosIGxvbmcgbWluLCBsb25nIG1heCwgbG9uZyBleHBlY3RlZEJvdW5kYXJ5KQorICAgIHsKKyAgICAgICAgLy8gRXJyb3JDb2RlIHN0YXR1cyA9IFpFUk9fRVJST1I7CisgICAgICAgIGJvb2xlYW4gc3RhcnRzSW5EU1QgPSB0ei5pbkRheWxpZ2h0VGltZShuZXcgRGF0ZShtaW4pKTsKKyAgICAgICAgLy8gaWYgKGZhaWx1cmUoc3RhdHVzLCAiU2ltcGxlVGltZVpvbmU6OmluRGF5bGlnaHRUaW1lIikpIHJldHVybjsKKyAgICAgICAgaWYgKHR6LmluRGF5bGlnaHRUaW1lKG5ldyBEYXRlKG1heCkpID09IHN0YXJ0c0luRFNUKSB7CisgICAgICAgICAgICBsb2dsbigiRXJyb3I6IGluRGF5bGlnaHRUaW1lKCIgKyBuZXcgRGF0ZShtYXgpICsgIikgIT0gIiArICghc3RhcnRzSW5EU1QpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBpZiAoZmFpbHVyZShzdGF0dXMsICJTaW1wbGVUaW1lWm9uZTo6aW5EYXlsaWdodFRpbWUiKSkgcmV0dXJuOworICAgICAgICB3aGlsZSAoKG1heCAtIG1pbikgPiBJTlRFUlZBTCkgeworICAgICAgICAgICAgbG9uZyBtaWQgPSAobWluICsgbWF4KSAvIDI7CisgICAgICAgICAgICBpZiAodHouaW5EYXlsaWdodFRpbWUobmV3IERhdGUobWlkKSkgPT0gc3RhcnRzSW5EU1QpIHsKKyAgICAgICAgICAgICAgICBtaW4gPSBtaWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXggPSBtaWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBpZiAoZmFpbHVyZShzdGF0dXMsICJTaW1wbGVUaW1lWm9uZTo6aW5EYXlsaWdodFRpbWUiKSkgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGxvZ2xuKCJCaW5hcnkgU2VhcmNoIEJlZm9yZTogIiArIG1pbiArICIgPSAiICsgbmV3IERhdGUobWluKSk7CisgICAgICAgIGxvZ2xuKCJCaW5hcnkgU2VhcmNoIEFmdGVyOiAgIiArIG1heCArICIgPSAiICsgbmV3IERhdGUobWF4KSk7CisgICAgICAgIGxvbmcgbWluZGVsdGEgPSBleHBlY3RlZEJvdW5kYXJ5IC0gbWluOworICAgICAgICAvLyBub3QgdXNlZCBsb25nIG1heGRlbHRhID0gbWF4IC0gZXhwZWN0ZWRCb3VuZGFyeTsKKyAgICAgICAgaWYgKG1pbmRlbHRhID49IDAgJiYKKyAgICAgICAgICAgIG1pbmRlbHRhIDw9IElOVEVSVkFMICYmCisgICAgICAgICAgICBtaW5kZWx0YSA+PSAwICYmCisgICAgICAgICAgICBtaW5kZWx0YSA8PSBJTlRFUlZBTCkKKyAgICAgICAgICAgIGxvZ2xuKCJQQVNTOiBFeHBlY3RlZCBiZHJ5OiAgIiArIGV4cGVjdGVkQm91bmRhcnkgKyAiID0gIiArIG5ldyBEYXRlKGV4cGVjdGVkQm91bmRhcnkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IEV4cGVjdGVkIGJkcnk6ICAiICsgZXhwZWN0ZWRCb3VuZGFyeSArICIgPSAiICsgbmV3IERhdGUoZXhwZWN0ZWRCb3VuZGFyeSkpOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJWQUwgPSAxMDA7CisKKyAgICAvLyBCdWcgMDA2OyB2ZXJpZnkgdGhlIG9mZnNldCBmb3IgYSBzcGVjaWZpYyB6b25lLgorICAgIHB1YmxpYyB2b2lkIFRlc3RQUlRPZmZzZXQoKQorICAgIHsKKyAgICAgICAgVGltZVpvbmUgdHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSggIlBSVCIgKTsKKyAgICAgICAgaWYoIHR6ID09IG51bGwgKSB7CisgICAgICAgICAgICBlcnJsbiggIkZBSUw6IFRpbWVab25lKFBSVCkgaXMgbnVsbCIgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNleworICAgICAgICAgICAgaWYgKHR6LmdldFJhd09mZnNldCgpICE9ICgtNCptaWxsaXNQZXJIb3VyKSkKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogT2Zmc2V0IGZvciBQUlQgc2hvdWxkIGJlIC00LCBnb3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgdHouZ2V0UmF3T2Zmc2V0KCkgLyAoZG91YmxlKW1pbGxpc1BlckhvdXIpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICAvLyBUZXN0IHZhcmlvdXMgY2FsbHMKKyAgICBwdWJsaWMgdm9pZCBUZXN0VmFyaW91c0FQSTUxOCgpCisgICAgeworICAgICAgICBUaW1lWm9uZSB0aW1lX3pvbmUgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiUFNUIik7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGNhbC5zZXQoMTk5NywgQ2FsZW5kYXIuQVBSSUwsIDMwKTsKKyAgICAgICAgRGF0ZSBkID0gY2FsLmdldFRpbWUoKTsKKworICAgICAgICBsb2dsbigiVGhlIHRpbWV6b25lIGlzICIgKyB0aW1lX3pvbmUuZ2V0SUQoKSk7CisKKyAgICAgICAgaWYgKHRpbWVfem9uZS5pbkRheWxpZ2h0VGltZShkKSAhPSB0cnVlKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IGluRGF5bGlnaHRUaW1lIHJldHVybmVkIGZhbHNlIik7CisKKyAgICAgICAgaWYgKHRpbWVfem9uZS51c2VEYXlsaWdodFRpbWUoKSAhPSB0cnVlKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IHVzZURheWxpZ2h0VGltZSByZXR1cm5lZCBmYWxzZSIpOworCisgICAgICAgIGlmICh0aW1lX3pvbmUuZ2V0UmF3T2Zmc2V0KCkgIT0gLTgqbWlsbGlzUGVySG91cikKKyAgICAgICAgICAgIGVycmxuKCAiRkFJTDogZ2V0UmF3T2Zmc2V0IHJldHVybmVkIHdyb25nIHZhbHVlIik7CisKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgZ2Muc2V0VGltZShkKTsKKyAgICAgICAgaWYgKHRpbWVfem9uZS5nZXRPZmZzZXQoZ2MuQUQsIGdjLmdldChnYy5ZRUFSKSwgZ2MuZ2V0KGdjLk1PTlRIKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2MuZ2V0KGdjLkRBWV9PRl9NT05USCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjLmdldChnYy5EQVlfT0ZfV0VFSyksIDApCisgICAgICAgICAgICAhPSAtNyptaWxsaXNQZXJIb3VyKQorICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdldE9mZnNldCByZXR1cm5lZCB3cm9uZyB2YWx1ZSIpOworICAgIH0KKworICAgIC8vIFRlc3QgZ2V0QXZhaWxhYmxlSUQgQVBJCisgICAgcHVibGljIHZvaWQgVGVzdEdldEF2YWlsYWJsZUlEczkxMygpCisgICAgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiVGltZVpvbmUuZ2V0QXZhaWxhYmxlSURzKCkgPSB7ICIpOworICAgICAgICBTdHJpbmdbXSBzID0gVGltZVpvbmUuZ2V0QXZhaWxhYmxlSURzKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzLmxlbmd0aDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSA+IDApIGJ1Zi5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBidWYuYXBwZW5kKHNbaV0pOworICAgICAgICB9CisgICAgICAgIGJ1Zi5hcHBlbmQoIiB9OyIpOworICAgICAgICBsb2dsbihidWYudG9TdHJpbmcoKSk7CisKKyAgICAgICAgYnVmLnNldExlbmd0aCgwKTsKKyAgICAgICAgYnVmLmFwcGVuZCgiVGltZVpvbmUuZ2V0QXZhaWxhYmxlSURzKEdNVCswMjowMCkgPSB7ICIpOworICAgICAgICBzID0gVGltZVpvbmUuZ2V0QXZhaWxhYmxlSURzKCsyICogNjAgKiA2MCAqIDEwMDApOworICAgICAgICBmb3IgKGludCBpPTA7IGk8cy5sZW5ndGg7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkgPiAwKSBidWYuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgYnVmLmFwcGVuZChzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBidWYuYXBwZW5kKCIgfTsiKTsKKyAgICAgICAgbG9nbG4oYnVmLnRvU3RyaW5nKCkpOworCisgICAgICAgIFRpbWVab25lIHR6ID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIlBTVCIpOworICAgICAgICBpZiAodHogIT0gbnVsbCkKKyAgICAgICAgICAgIGxvZ2xuKCJnZXRUaW1lWm9uZShQU1QpID0gIiArIHR6LmdldElEKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJsbigiRkFJTDogZ2V0VGltZVpvbmUoUFNUKSA9IG51bGwiKTsKKworICAgICAgICB0eiA9IFRpbWVab25lLmdldFRpbWVab25lKCJBbWVyaWNhL0xvc19BbmdlbGVzIik7CisgICAgICAgIGlmICh0eiAhPSBudWxsKQorICAgICAgICAgICAgbG9nbG4oImdldFRpbWVab25lKEFtZXJpY2EvTG9zX0FuZ2VsZXMpID0gIiArIHR6LmdldElEKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJsbigiRkFJTDogZ2V0VGltZVpvbmUoUFNUKSA9IG51bGwiKTsKKworICAgICAgICAvLyBCdWcgNDA5NjY5NAorICAgICAgICB0eiA9IFRpbWVab25lLmdldFRpbWVab25lKCJOT05fRVhJU1RFTlQiKTsKKyAgICAgICAgaWYgKHR6ID09IG51bGwpCisgICAgICAgICAgICBlcnJsbigiRkFJTDogZ2V0VGltZVpvbmUoTk9OX0VYSVNURU5UKSA9IG51bGwiKTsKKyAgICAgICAgZWxzZSBpZiAoIXR6LmdldElEKCkuZXF1YWxzKCJHTVQiKSkKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBnZXRUaW1lWm9uZShOT05fRVhJU1RFTlQpID0gIiArIHR6LmdldElEKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJ1ZyA0MTA3Mjc2CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdERTVFNhdmluZ3MoKSB7CisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0byBmaW5kIGEgd2F5IHRvIGludGVncmF0ZSB0aGlzIHRlc3QgaW50byB0aGUgbWFpbiBUaW1lWm9uZQorICAgICAgICAvLyB0ZXN0cyBhYm92ZSwgYnV0IEkgZG9uJ3QgaGF2ZSB0aW1lIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaXMgKG9yIGlmIGl0J3MKKyAgICAgICAgLy8gZXZlbiByZWFsbHkgYSBnb29kIGlkZWEpLiAgTGV0J3MgY29uc2lkZXIgdGhhdCBhIGZ1dHVyZS4gIC0tcnRnIDEvMjcvOTgKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgdHogPSBuZXcgU2ltcGxlVGltZVpvbmUoLTUgKiBtaWxsaXNQZXJIb3VyLCAiZHN0U2F2aW5nc1Rlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5NQVJDSCwgMSwgMCwgMCwgQ2FsZW5kYXIuU0VQVEVNQkVSLCAxLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgwLjUgKiBtaWxsaXNQZXJIb3VyKSk7CisKKyAgICAgICAgaWYgKHR6LmdldFJhd09mZnNldCgpICE9IC01ICogbWlsbGlzUGVySG91cikKKyAgICAgICAgICAgIGVycmxuKCJHb3QgYmFjayBhIHJhdyBvZmZzZXQgb2YgIiArICh0ei5nZXRSYXdPZmZzZXQoKSAvIG1pbGxpc1BlckhvdXIpICsKKyAgICAgICAgICAgICAgICAgICIgaG91cnMgaW5zdGVhZCBvZiAtNSBob3Vycy4iKTsKKyAgICAgICAgaWYgKCF0ei51c2VEYXlsaWdodFRpbWUoKSkKKyAgICAgICAgICAgIGVycmxuKCJUZXN0IHRpbWUgem9uZSBzaG91bGQgdXNlIERTVCBidXQgY2xhaW1zIGl0IGRvZXNuJ3QuIik7CisgICAgICAgIGlmICh0ei5nZXREU1RTYXZpbmdzKCkgIT0gMC41ICogbWlsbGlzUGVySG91cikKKyAgICAgICAgICAgIGVycmxuKCJTZXQgRFNUIG9mZnNldCB0byAwLjUgaG91ciwgYnV0IGdvdCBiYWNrICIgKyAodHouZ2V0RFNUU2F2aW5ncygpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzUGVySG91cikgKyAiIGhvdXJzIGluc3RlYWQuIik7CisKKyAgICAgICAgaW50IG9mZnNldCA9IHR6LmdldE9mZnNldChHcmVnb3JpYW5DYWxlbmRhci5BRCwgMTk5OCwgQ2FsZW5kYXIuSkFOVUFSWSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5USFVSU0RBWSwgMTAgKiBtaWxsaXNQZXJIb3VyKTsKKyAgICAgICAgaWYgKG9mZnNldCAhPSAtNSAqIG1pbGxpc1BlckhvdXIpCisgICAgICAgICAgICBlcnJsbigiVGhlIG9mZnNldCBmb3IgMTAgQU0sIDEvMS85OCBzaG91bGQgaGF2ZSBiZWVuIC01IGhvdXJzLCBidXQgd2UgZ290ICIKKyAgICAgICAgICAgICAgICAgICsgKG9mZnNldCAvIG1pbGxpc1BlckhvdXIpICsgIiBob3Vycy4iKTsKKworICAgICAgICBvZmZzZXQgPSB0ei5nZXRPZmZzZXQoR3JlZ29yaWFuQ2FsZW5kYXIuQUQsIDE5OTgsIENhbGVuZGFyLkpVTkUsIDEsIENhbGVuZGFyLk1PTkRBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwICogbWlsbGlzUGVySG91cik7CisgICAgICAgIGlmIChvZmZzZXQgIT0gLTQuNSAqIG1pbGxpc1BlckhvdXIpCisgICAgICAgICAgICBlcnJsbigiVGhlIG9mZnNldCBmb3IgMTAgQU0sIDYvMS85OCBzaG91bGQgaGF2ZSBiZWVuIC00LjUgaG91cnMsIGJ1dCB3ZSBnb3QgIgorICAgICAgICAgICAgICAgICAgKyAob2Zmc2V0IC8gbWlsbGlzUGVySG91cikgKyAiIGhvdXJzLiIpOworCisgICAgICAgIHR6LnNldERTVFNhdmluZ3MobWlsbGlzUGVySG91cik7CisgICAgICAgIG9mZnNldCA9IHR6LmdldE9mZnNldChHcmVnb3JpYW5DYWxlbmRhci5BRCwgMTk5OCwgQ2FsZW5kYXIuSkFOVUFSWSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLlRIVVJTREFZLCAxMCAqIG1pbGxpc1BlckhvdXIpOworICAgICAgICBpZiAob2Zmc2V0ICE9IC01ICogbWlsbGlzUGVySG91cikKKyAgICAgICAgICAgIGVycmxuKCJUaGUgb2Zmc2V0IGZvciAxMCBBTSwgMS8xLzk4IHNob3VsZCBoYXZlIGJlZW4gLTUgaG91cnMsIGJ1dCB3ZSBnb3QgIgorICAgICAgICAgICAgICAgICAgKyAob2Zmc2V0IC8gbWlsbGlzUGVySG91cikgKyAiIGhvdXJzLiIpOworCisgICAgICAgIG9mZnNldCA9IHR6LmdldE9mZnNldChHcmVnb3JpYW5DYWxlbmRhci5BRCwgMTk5OCwgQ2FsZW5kYXIuSlVORSwgMSwgQ2FsZW5kYXIuTU9OREFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgKiBtaWxsaXNQZXJIb3VyKTsKKyAgICAgICAgaWYgKG9mZnNldCAhPSAtNCAqIG1pbGxpc1BlckhvdXIpCisgICAgICAgICAgICBlcnJsbigiVGhlIG9mZnNldCBmb3IgMTAgQU0sIDYvMS85OCAod2l0aCBhIDEtaG91ciBEU1Qgb2Zmc2V0KSBzaG91bGQgaGF2ZSBiZWVuIC00IGhvdXJzLCBidXQgd2UgZ290ICIKKyAgICAgICAgICAgICAgICAgICsgKG9mZnNldCAvIG1pbGxpc1BlckhvdXIpICsgIiBob3Vycy4iKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCdWcgNDEwNzU3MAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RBbHRlcm5hdGVSdWxlcygpIHsKKyAgICAgICAgLy8gTGlrZSBUZXN0RFNUU2F2aW5ncywgdGhpcyB0ZXN0IHNob3VsZCBwcm9iYWJseSBiZSBpbnRlZ3JhdGVkIHNvbWVob3cgd2l0aCB0aGUgbWFpbgorICAgICAgICAvLyB0ZXN0IGF0IHRoZSB0b3Agb2YgdGhpcyBjbGFzcywgYnV0IEkgZGlkbid0IGhhdmUgdGltZSB0byBmaWd1cmUgb3V0IGhvdyB0byBkbyB0aGF0LgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAtLXJ0ZyAxLzI4Lzk4CisKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgdHogPSBuZXcgU2ltcGxlVGltZVpvbmUoLTUgKiBtaWxsaXNQZXJIb3VyLCAiYWx0ZXJuYXRlUnVsZVRlc3QiKTsKKworICAgICAgICAvLyB0ZXN0IHRoZSBkYXktb2YtbW9udGggQVBJCisgICAgICAgIHR6LnNldFN0YXJ0UnVsZShDYWxlbmRhci5NQVJDSCwgMTAsIDEyICogbWlsbGlzUGVySG91cik7CisgICAgICAgIHR6LnNldEVuZFJ1bGUoQ2FsZW5kYXIuT0NUT0JFUiwgMjAsIDEyICogbWlsbGlzUGVySG91cik7CisKKyAgICAgICAgaW50IG9mZnNldCA9IHR6LmdldE9mZnNldChHcmVnb3JpYW5DYWxlbmRhci5BRCwgMTk5OCwgQ2FsZW5kYXIuTUFSQ0gsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuVEhVUlNEQVksIDEwICogbWlsbGlzUGVySG91cik7CisgICAgICAgIGlmIChvZmZzZXQgIT0gLTUgKiBtaWxsaXNQZXJIb3VyKQorICAgICAgICAgICAgZXJybG4oIlRoZSBvZmZzZXQgZm9yIDEwQU0sIDMvNS85OCBzaG91bGQgaGF2ZSBiZWVuIC01IGhvdXJzLCBidXQgd2UgZ290ICIKKyAgICAgICAgICAgICAgICAgICsgKG9mZnNldCAvIG1pbGxpc1BlckhvdXIpICsgIiBob3Vycy4iKTsKKworICAgICAgICBvZmZzZXQgPSB0ei5nZXRPZmZzZXQoR3JlZ29yaWFuQ2FsZW5kYXIuQUQsIDE5OTgsIENhbGVuZGFyLk1BUkNILCAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLlNVTkRBWSwgMTAgKiBtaWxsaXNQZXJIb3VyKTsKKyAgICAgICAgaWYgKG9mZnNldCAhPSAtNCAqIG1pbGxpc1BlckhvdXIpCisgICAgICAgICAgICBlcnJsbigiVGhlIG9mZnNldCBmb3IgMTBBTSwgMy8xNS85OCBzaG91bGQgaGF2ZSBiZWVuIC00IGhvdXJzLCBidXQgd2UgZ290ICIKKyAgICAgICAgICAgICAgICAgICsgKG9mZnNldCAvIG1pbGxpc1BlckhvdXIpICsgIiBob3Vycy4iKTsKKworICAgICAgICBvZmZzZXQgPSB0ei5nZXRPZmZzZXQoR3JlZ29yaWFuQ2FsZW5kYXIuQUQsIDE5OTgsIENhbGVuZGFyLk9DVE9CRVIsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuVEhVUlNEQVksIDEwICogbWlsbGlzUGVySG91cik7CisgICAgICAgIGlmIChvZmZzZXQgIT0gLTQgKiBtaWxsaXNQZXJIb3VyKQorICAgICAgICAgICAgZXJybG4oIlRoZSBvZmZzZXQgZm9yIDEwQU0sIDEwLzE1Lzk4IHNob3VsZCBoYXZlIGJlZW4gLTQgaG91cnMsIGJ1dCB3ZSBnb3QgIgorICAgICAgICAgICAgICAgICAgKyAob2Zmc2V0IC8gbWlsbGlzUGVySG91cikgKyAiIGhvdXJzLiIpOworCisgICAgICAgIG9mZnNldCA9IHR6LmdldE9mZnNldChHcmVnb3JpYW5DYWxlbmRhci5BRCwgMTk5OCwgQ2FsZW5kYXIuT0NUT0JFUiwgMjUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5TVU5EQVksIDEwICogbWlsbGlzUGVySG91cik7CisgICAgICAgIGlmIChvZmZzZXQgIT0gLTUgKiBtaWxsaXNQZXJIb3VyKQorICAgICAgICAgICAgZXJybG4oIlRoZSBvZmZzZXQgZm9yIDEwQU0sIDEwLzI1Lzk4IHNob3VsZCBoYXZlIGJlZW4gLTUgaG91cnMsIGJ1dCB3ZSBnb3QgIgorICAgICAgICAgICAgICAgICAgKyAob2Zmc2V0IC8gbWlsbGlzUGVySG91cikgKyAiIGhvdXJzLiIpOworCisgICAgICAgIC8vIHRlc3QgdGhlIGRheS1vZi13ZWVrLWFmdGVyLWRheS1pbi1tb250aCBBUEkKKyAgICAgICAgdHouc2V0U3RhcnRSdWxlKENhbGVuZGFyLk1BUkNILCAxMCwgQ2FsZW5kYXIuRlJJREFZLCAxMiAqIG1pbGxpc1BlckhvdXIsIHRydWUpOworICAgICAgICB0ei5zZXRFbmRSdWxlKENhbGVuZGFyLk9DVE9CRVIsIDIwLCBDYWxlbmRhci5GUklEQVksIDEyICogbWlsbGlzUGVySG91ciwgZmFsc2UpOworCisgICAgICAgIG9mZnNldCA9IHR6LmdldE9mZnNldChHcmVnb3JpYW5DYWxlbmRhci5BRCwgMTk5OCwgQ2FsZW5kYXIuTUFSQ0gsIDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuV0VETkVTREFZLCAxMCAqIG1pbGxpc1BlckhvdXIpOworICAgICAgICBpZiAob2Zmc2V0ICE9IC01ICogbWlsbGlzUGVySG91cikKKyAgICAgICAgICAgIGVycmxuKCJUaGUgb2Zmc2V0IGZvciAxMEFNLCAzLzExLzk4IHNob3VsZCBoYXZlIGJlZW4gLTUgaG91cnMsIGJ1dCB3ZSBnb3QgIgorICAgICAgICAgICAgICAgICAgKyAob2Zmc2V0IC8gbWlsbGlzUGVySG91cikgKyAiIGhvdXJzLiIpOworCisgICAgICAgIG9mZnNldCA9IHR6LmdldE9mZnNldChHcmVnb3JpYW5DYWxlbmRhci5BRCwgMTk5OCwgQ2FsZW5kYXIuTUFSQ0gsIDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuU0FUVVJEQVksIDEwICogbWlsbGlzUGVySG91cik7CisgICAgICAgIGlmIChvZmZzZXQgIT0gLTQgKiBtaWxsaXNQZXJIb3VyKQorICAgICAgICAgICAgZXJybG4oIlRoZSBvZmZzZXQgZm9yIDEwQU0sIDMvMTQvOTggc2hvdWxkIGhhdmUgYmVlbiAtNCBob3VycywgYnV0IHdlIGdvdCAiCisgICAgICAgICAgICAgICAgICArIChvZmZzZXQgLyBtaWxsaXNQZXJIb3VyKSArICIgaG91cnMuIik7CisKKyAgICAgICAgb2Zmc2V0ID0gdHouZ2V0T2Zmc2V0KEdyZWdvcmlhbkNhbGVuZGFyLkFELCAxOTk4LCBDYWxlbmRhci5PQ1RPQkVSLCAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLlRIVVJTREFZLCAxMCAqIG1pbGxpc1BlckhvdXIpOworICAgICAgICBpZiAob2Zmc2V0ICE9IC00ICogbWlsbGlzUGVySG91cikKKyAgICAgICAgICAgIGVycmxuKCJUaGUgb2Zmc2V0IGZvciAxMEFNLCAxMC8xNS85OCBzaG91bGQgaGF2ZSBiZWVuIC00IGhvdXJzLCBidXQgd2UgZ290ICIKKyAgICAgICAgICAgICAgICAgICsgKG9mZnNldCAvIG1pbGxpc1BlckhvdXIpICsgIiBob3Vycy4iKTsKKworICAgICAgICBvZmZzZXQgPSB0ei5nZXRPZmZzZXQoR3JlZ29yaWFuQ2FsZW5kYXIuQUQsIDE5OTgsIENhbGVuZGFyLk9DVE9CRVIsIDE3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuU0FUVVJEQVksIDEwICogbWlsbGlzUGVySG91cik7CisgICAgICAgIGlmIChvZmZzZXQgIT0gLTUgKiBtaWxsaXNQZXJIb3VyKQorICAgICAgICAgICAgZXJybG4oIlRoZSBvZmZzZXQgZm9yIDEwQU0sIDEwLzE3Lzk4IHNob3VsZCBoYXZlIGJlZW4gLTUgaG91cnMsIGJ1dCB3ZSBnb3QgIgorICAgICAgICAgICAgICAgICAgKyAob2Zmc2V0IC8gbWlsbGlzUGVySG91cikgKyAiIGhvdXJzLiIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RFcXVpdmFsZW5jeUdyb3VwcygpIHsKKyAgICAgICAgU3RyaW5nIGlkID0gIkFtZXJpY2EvTG9zX0FuZ2VsZXMiOworICAgICAgICBpbnQgbiA9IFRpbWVab25lLmNvdW50RXF1aXZhbGVudElEcyhpZCk7CisgICAgICAgIGlmIChuIDwgMikgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNvdW50RXF1aXZhbGVudElEcygiICsgaWQgKyAiKSByZXR1cm5lZCAiICsgbiArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCA+PSAyIik7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPG47ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIHMgPSBUaW1lWm9uZS5nZXRFcXVpdmFsZW50SUQoaWQsIGkpOworICAgICAgICAgICAgaWYgKHMubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBnZXRFcXVpdmFsZW50SUQoIiArIGlkICsgIiwgIiArIGkgKworICAgICAgICAgICAgICAgICAgICAgICIpIHJldHVybmVkIFwiIiArIHMgKyAiXCIsIGV4cGVjdGVkIHZhbGlkIElEIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ2xuKCIiICsgaSArICI6IiArIHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdENvdW50cmllcygpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIEFtZXJpY2EvTG9zX0FuZ2VsZXMgaXMgaW4gdGhlICJVUyIgZ3JvdXAsIGFuZAorICAgICAgICAvLyBBc2lhL1Rva3lvIGlzbid0LiAgVmljZSB2ZXJzYSBmb3IgdGhlICJKUCIgZ3JvdXAuCisKKyAgICAgICAgU3RyaW5nW10gcyA9IFRpbWVab25lLmdldEF2YWlsYWJsZUlEcygiVVMiKTsKKyAgICAgICAgYm9vbGVhbiBsYSA9IGZhbHNlLCB0b2t5byA9IGZhbHNlOworICAgICAgICBTdHJpbmcgbGFab25lID0gIkFtZXJpY2EvTG9zX0FuZ2VsZXMiLCB0b2t5b1pvbmUgPSAiQXNpYS9Ub2t5byI7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzW2ldLmVxdWFscyhsYVpvbmUpKSB7CisgICAgICAgICAgICAgICAgbGEgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNbaV0uZXF1YWxzKHRva3lvWm9uZSkpIHsKKyAgICAgICAgICAgICAgICB0b2t5byA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsYSB8fCB0b2t5bykgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBsYVpvbmUgKyAiIGluIFVTID0gIiArIGxhKTsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgdG9reW9ab25lICsgIiBpbiBVUyA9ICIgKyB0b2t5byk7CisgICAgICAgIH0KKworICAgICAgICBzID0gVGltZVpvbmUuZ2V0QXZhaWxhYmxlSURzKCJKUCIpOworICAgICAgICBsYSA9IGZhbHNlOyB0b2t5byA9IGZhbHNlOworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc1tpXS5lcXVhbHMobGFab25lKSkgeworICAgICAgICAgICAgICAgIGxhID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzW2ldLmVxdWFscyh0b2t5b1pvbmUpKSB7CisgICAgICAgICAgICAgICAgdG9reW8gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChsYSB8fCAhdG9reW8pIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgbGFab25lICsgIiBpbiBKUCA9ICIgKyBsYSk7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIHRva3lvWm9uZSArICIgaW4gSlAgPSAiICsgdG9reW8pOworICAgICAgICB9CisgICAgfQorfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0NvbXBvdW5kVHJhbnNsaXRlcmF0b3JUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvQ29tcG91bmRUcmFuc2xpdGVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDQ3MTdiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0NvbXBvdW5kVHJhbnNsaXRlcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9Db21wb3VuZFRyYW5zbGl0ZXJhdG9yVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzI1IDIyOjQzOjU3ICQgCisgKiAkUmV2aXNpb246IDEuNiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQ7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBqYXZhLnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworCisvKioKKyAqIEB0ZXN0CisgKiBAc3VtbWFyeSBHZW5lcmFsIHRlc3Qgb2YgQ29tcG91bmRUcmFuc2xpdGVyYXRvcgorICovCitwdWJsaWMgY2xhc3MgQ29tcG91bmRUcmFuc2xpdGVyYXRvclRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IENvbXBvdW5kVHJhbnNsaXRlcmF0b3JUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDb25zdHJ1Y3Rpb24oKXsKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcG91bmQgVHJhbnNsaXRlcmF0b3IiKTsKKyAgICAgICAgU3RyaW5nIG5hbWVzW109eyJHcmVlay1MYXRpbiIsICJMYXRpbi1EZXZhbmFnYXJpIiwgIkRldmFuYWdhcmktTGF0aW4iLCAiTGF0aW4tR3JlZWsifTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDE9bnVsbDsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDI9bnVsbDsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDM9bnVsbDsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDQ9bnVsbDsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdDE9VHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UobmFtZXNbMF0pOworICAgICAgICAgICAgdDI9VHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UobmFtZXNbMV0pOworICAgICAgICAgICAgdDM9VHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UobmFtZXNbMl0pOworICAgICAgICAgICAgdDQ9VHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UobmFtZXNbM10pOworICAgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogVHJhbnNsaXRlcmF0b3IgY29uc3RydWN0aW9uIGZhaWxlZCIpOworICAgICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgIH0KKyAgCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yW10gdHJhbnNhcnJheTE9e3QxfTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3JbXSB0cmFuc2FycmF5Mj17dDEsIHQ0fTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3JbXSB0cmFuc2FycmF5Mz17dDQsIHQxLCB0Mn07CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yW10gdHJhbnNhcnJheTQ9e3QxLCB0MiwgdDMsIHQ0fTsKKworICAgICAgICBUcmFuc2xpdGVyYXRvcltdW10gdHJhbnNhcnJheT17dHJhbnNhcnJheTEsIHRyYW5zYXJyYXkyLCB0cmFuc2FycmF5MywgdHJhbnNhcnJheTR9OyAKKyAgICAgICAgZmluYWwgU3RyaW5nIElEc1tdPXsKKyAgICAgICAgICAgIG5hbWVzWzBdLCAKKyAgICAgICAgICAgIG5hbWVzWzBdKyI7IituYW1lc1szXSwgCisgICAgICAgICAgICBuYW1lc1szXSsiOyIrbmFtZXNbMV0rIjsiK25hbWVzWzJdLCAKKyAgICAgICAgICAgIG5hbWVzWzBdKyI7IituYW1lc1sxXSsiOyIrbmFtZXNbMl0rIjsiK25hbWVzWzNdIAorICAgICAgICB9OworCisgICAKKyAgICAgICAgZm9yKGludCBpPTA7IGk8NDsgaSsrKXsKKyAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yIGNwZHRyYW5zPW5ldyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKElEc1tpXSk7CisgICAgICAgICAgICAgICAgY3BkdHJhbnMgPSBudWxsOworICAgICAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleDEpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogY29uc3RydWN0aW9uIHVzaW5nIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IoU3RyaW5nIElEKSBmYWlsZWQgZm9yICIgKyBJRHNbaV0pOworICAgICAgICAgICAgICAgIHRocm93IGV4MTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5eworICAgICAgICAgICAgICAgIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IgY3BkdHJhbnM9bmV3IENvbXBvdW5kVHJhbnNsaXRlcmF0b3IoSURzW2ldLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgICAgICAgICBjcGR0cmFucyA9IG51bGw7CisgICAgICAgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4MikgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjb25zdHJ1Y3Rpb24gdXNpbmcgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihTdHJpbmcgSUQsIGludCBkaXJlY3Rpb249Rk9SV0FSRCkgZmFpbGVkIGZvciAiICsgSURzW2ldKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBleDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yIGNwZHRyYW5zPW5ldyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKElEc1tpXSwgVHJhbnNsaXRlcmF0b3IuUkVWRVJTRSk7CisgICAgICAgICAgICAgICAgY3BkdHJhbnMgPSBudWxsOworICAgICAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleDMpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogY29uc3RydWN0aW9uIHVzaW5nIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IoU3RyaW5nIElELCBpbnQgZGlyZWN0aW9uPVJFVkVSU0UpIGZhaWxlZCBmb3IgIiArIElEc1tpXSk7CisgICAgICAgICAgICAgICAgdGhyb3cgZXgzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgQ29tcG91bmRUcmFuc2xpdGVyYXRvciBjcGR0cmFucz1uZXcgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihJRHNbaV0sIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQsIG51bGwpOworICAgICAgICAgICAgICAgIGNwZHRyYW5zID0gbnVsbDsKKyAgICAgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXg0KSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNvbnN0cnVjdGlvbiB1c2luZyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCwgaW50IGRpcmVjdGlvbj1GT1JXQVJELCIgKworICAgICAgICAgICAgICAgICAgICAgICAgIlVuaWNvZGVGaWx0ZXIgYWRvcHRlZEZpbHRlcj0wKSBmYWlsZWQgZm9yICIgKyBJRHNbaV0pOworICAgICAgICAgICAgICAgIHRocm93IGV4NDsKKyAgICAgICAgICAgIH0KKyAgCisgICAgICAgCisgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgQ29tcG91bmRUcmFuc2xpdGVyYXRvciBjcGR0cmFuczI9bmV3IENvbXBvdW5kVHJhbnNsaXRlcmF0b3IodHJhbnNhcnJheVtpXSwgbnVsbCk7CisgICAgICAgICAgICAgICAgY3BkdHJhbnMyID0gbnVsbDsKKyAgICAgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXg1KSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IENvbnN0cnVjdGlvbiB1c2luZyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKFRyYW5zbGl0ZXJhdG9yIHRyYW5zbGl0ZXJhdG9yc1tdLCIgKworICAgICAgICAgICAgICAgICAgICAgICAiVW5pY29kZUZpbHRlciBhZG9wdGVkRmlsdGVyID0gMCkgIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIHRocm93IGV4NTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgIAorICAgIH0KKyAKKyAgICBwdWJsaWMgdm9pZCBUZXN0R2V0VHJhbnNsaXRlcmF0b3IoKXsKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIGdldFRyYW5zbGl0ZXJhdG9yKCkgQVBJIG9mIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IiKTsKKyAgICAgICAgU3RyaW5nIElEPSJMYXRpbi1HcmVlaztHcmVlay1MYXRpbjtMYXRpbi1EZXZhbmFnYXJpO0RldmFuYWdhcmktTGF0aW47TGF0aW4tQ3lyaWxsaWM7Q3lyaWxsaWMtTGF0aW47QW55LUhleDtIZXgtQW55IjsKKyAgICAgICAgQ29tcG91bmRUcmFuc2xpdGVyYXRvciBjdDE9bnVsbDsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgY3QxPW5ldyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKElEKTsKKyAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgICAgIGVycmxuKCJDb21wb3VuZFRyYW5zbGl0ZXJhdG9yIGNvbnN0cnVjdGlvbiBmYWlsZWQgZm9yIElEPSIgKyBJRCk7CisgICAgICAgICAgICB0aHJvdyBpYWU7CisgICAgICAgICB9CisgICAgICAgIGludCBjb3VudD1jdDEuZ2V0Q291bnQoKTsKKyAgICAgICAgU3RyaW5nIGFycmF5W109c3BsaXQoSUQsICc7Jyk7CisgICAgICAgIGlmIChjb3VudCAhPSBhcnJheS5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogZ2V0Q291bnQoKSBmYWlsZWQuIEV4cGVjdGVkOiIgKyBhcnJheS5sZW5ndGggKyAiIGdvdDoiICsgY291bnQpOworICAgICAgICB9CisgICAgICAgIGZvcihpbnQgaT0wOyBpIDwgY291bnQ7IGkrKyl7CisgICAgICAgICAgICBTdHJpbmcgY2hpbGQ9IGN0MS5nZXRUcmFuc2xpdGVyYXRvcihpKS5nZXRJRCgpOworICAgICAgICAgICAgaWYoIWNoaWxkLmVxdWFscyhhcnJheVtpXSkpeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBnZXRUcmFuc2xpdGVyYXRvcigpIGZhaWxlZDogRXhwZWN0ZWQtPiIgKyBhcnJheVtpXSArICIgR290LT4iICsgY2hpbGQpOworICAgICAgICAgICAgfWVsc2UgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPSzogZ2V0VHJhbnNsaXRlcmF0b3IoKSBwYXNzZWQ6IEV4cGVjdGVkLT4iICsgYXJyYXlbaV0gKyAiIEdvdC0+IiArIGNoaWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIAorICAgIH0KKyAKKyAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0VHJhbnNsaXRlcmF0ZSgpeworICAgICAgICBsb2dsbigiVGVzdGluZyB0aGUgaGFuZGxlVHJhbnNsaXRlcmF0ZSgpIEFQSSBvZiBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yIik7CisgICAgICAgIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IgY3QxPW51bGw7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIGN0MT1uZXcgQ29tcG91bmRUcmFuc2xpdGVyYXRvcigiQW55LUhleDtIZXgtQW55Iik7CisgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKXsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjb25zdHJ1Y3Rpb24gdXNpbmcgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihTdHJpbmcgSUQpIGZhaWxlZCBmb3IgIiArICJBbnktSGV4O0hleC1BbnkiKTsKKyAgICAgICAgICAgIHRocm93IGlhZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBTdHJpbmcgcz0iYWJjYWJjIjsKKyAgICAgICAgZXhwZWN0KGN0MSwgcywgcyk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIGluZGV4ID0gbmV3IFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uKCk7CisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHJzb3VyY2UyPW5ldyBSZXBsYWNlYWJsZVN0cmluZyhzKTsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVzdWx0PXM7CisgICAgICAgIGN0MS50cmFuc2xpdGVyYXRlKHJzb3VyY2UyLCBpbmRleCk7CisgICAgICAgIGN0MS5maW5pc2hUcmFuc2xpdGVyYXRpb24ocnNvdXJjZTIsIGluZGV4KTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdD1yc291cmNlMi50b1N0cmluZygpOworICAgICAgICBleHBlY3RBdXgoY3QxLmdldElEKCkgKyAiOlJlcGxhY2VhYmxlU3RyaW5nLCBpbmRleCgwLDAsMCwwKSIsIHMgKyAiLT4iICsgcnNvdXJjZTIsIHJlc3VsdC5lcXVhbHMoZXhwZWN0ZWRSZXN1bHQpLCBleHBlY3RlZFJlc3VsdCk7CisgICAgIAorICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBpbmRleDIgPSBuZXcgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24oMSwzLDIsMyk7CisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHJzb3VyY2UzPW5ldyBSZXBsYWNlYWJsZVN0cmluZyhzKTsKKyAgICAgICAgY3QxLnRyYW5zbGl0ZXJhdGUocnNvdXJjZTMsIGluZGV4Mik7IAorICAgICAgICBjdDEuZmluaXNoVHJhbnNsaXRlcmF0aW9uKHJzb3VyY2UzLCBpbmRleDIpOworICAgICAgICByZXN1bHQ9cnNvdXJjZTMudG9TdHJpbmcoKTsKKyAgICAgICAgZXhwZWN0QXV4KGN0MS5nZXRJRCgpICsgIjpTdHJpbmcsIGluZGV4MigxLDIsMiwzKSIsIHMgKyAiLT4iICsgcnNvdXJjZTMsIHJlc3VsdC5lcXVhbHMoZXhwZWN0ZWRSZXN1bHQpLCBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAKKyAgICAgICAgU3RyaW5nIERhdGFbXT17CisgICAgICAgICAgICAgLy9JRCwgaW5wdXQgc3RyaW5nLCB0cmFuc2xpdGVyYXRlZCBzdHJpbmcKKyAgICAgICAgICAgICAiQW55LUhleDtIZXgtQW55O0FueS1IZXgiLCAgICAgImhlbGxvIiwgICJcXHUwMDY4XFx1MDA2NVxcdTAwNkNcXHUwMDZDXFx1MDA2RiIsIAorICAgICAgICAgICAgICJBbnktSGV4O0hleC1BbnkiLCAgICAgICAgICAgICAgICAgImhlbGxvISBIb3cgYXJlIHlvdT8iLCAgImhlbGxvISBIb3cgYXJlIHlvdT8iLAorICAgICAgICAgICAgICJEZXZhbmFnYXJpLUxhdGluO0xhdGluLURldmFuYWdhcmkiLCAgICAgICAiXHUwOTJEXHUwOTQ4J1x1MDkzMCdcdTA5MzUiLCAgIlx1MDkyRFx1MDk0OFx1MDkzMFx1MDkzNSIsIC8vIHF1b3RlcyBsb3N0CisgICAgICAgICAgICAgIkxhdGluLUN5cmlsbGljO0N5cmlsbGljLUxhdGluIiwgICAgICAgICAgICJhJ2InaydkJ2UnZidnJ2gnaSdqJ1NoY2gnc2hjaCd6aCdoIiwgImEnYidrJ2QnZSdmJ2cnaCdpJ2onU2hjaCdzaGNoJ3poJ2giLAorICAgICAgICAgICAgICJMYXRpbi1HcmVlaztHcmVlay1MYXRpbiIsICAgICAgICAgICAgICAgICAiQUJHYWJnQUtMTU4iLCAiQUJHYWJnQUtMTU4iLAorICAgICAgICAgICAgIC8vIkxhdGluLUFyYWJpYztBcmFiaWMtTGF0aW4iLCAgICAgICAgICAgICAgICJBZCdyJ2EnYidpJ2snZGgnZGQnZ2giLCAiQWRyYWJpa2RoZGRnaCIsCisgICAgICAgICAgICAgIkhpcmFnYW5hLUthdGFrYW5hIiwgICAgICAgICAgICAgICAgICAgICAgICJcdTMwNDFcdTMwOGZcdTMwOTlcdTMwNmVcdTMwNGJcdTMwOTJcdTMwOTkiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MzBBMVx1MzBmN1x1MzBjZVx1MzBhYlx1MzBmYSIsICAKKyAgICAgICAgICAgICAiSGlyYWdhbmEtS2F0YWthbmE7S2F0YWthbmEtSGlyYWdhbmEiLCAgICAgIlx1MzA0MVx1MzA4Zlx1MzA5OVx1MzA2ZVx1MzA0Ylx1MzA1MSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMDQxXHUzMDhmXHUzMDk5XHUzMDZlXHUzMDRiXHUzMDUxIiwKKyAgICAgICAgICAgICAiS2F0YWthbmEtSGlyYWdhbmE7SGlyYWdhbmEtS2F0YWthbmEiLCAgICAgIlx1MzBBMVx1MzBmN1x1MzBjZVx1MzBmNVx1MzBmNiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUzMEExXHUzMGY3XHUzMGNlXHUzMGFiXHUzMGIxIiwgIAorICAgICAgICAgICAgICJMYXRpbi1LYXRha2FuYTtLYXRha2FuYS1MYXRpbiIsICAgICAgICAgICAgICAgICAgICJ2YXZpdnV2ZXZvaHV6aXp1em9uaW51bmFzZXN1emV6dSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmF2aXZ1dmV2b2h1eml6dXpvbmludW5hc2VzdXplenUiLCAgCisgICAgICAgIH07CisgICAgICAgIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IgY3QyPW51bGw7CisgICAgICAgIGZvcihpbnQgaT0wOyBpPERhdGEubGVuZ3RoOyBpKz0zKXsKKyAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICBjdDI9bmV3IENvbXBvdW5kVHJhbnNsaXRlcmF0b3IoRGF0YVtpKzBdKTsKKyAgICAgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlMil7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IENvbXBvdW5kVHJhbnNsaXRlcmF0b3IgY29uc3RydWN0aW9uIGZhaWxlZCBmb3IgIiArIERhdGFbaSswXSk7CisgICAgICAgICAgICAgICAgdGhyb3cgaWFlMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZXhwZWN0KGN0MiwgRGF0YVtpKzFdLCBEYXRhW2krMl0pOworICAgICAgICB9CisgICAKKyAgICB9CisgCisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBTdXBwb3J0IG1ldGhvZHMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAvKioKKyAgICAgKiBTcGxpdHMgYSBzdHJpbmcsCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBzcGxpdChTdHJpbmcgcywgY2hhciBkaXZpZGVyKSB7CisgICAgICAKKwkvLyBzZWUgaG93IG1hbnkgdGhlcmUgYXJlCisgICAgICAgIGludCBjb3VudCA9IDE7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyArK2kpIHsKKwkgICBpZiAocy5jaGFyQXQoaSkgPT0gZGl2aWRlcikgKytjb3VudDsKKwl9CisJICAgIAorCS8vIG1ha2UgYW4gYXJyYXkgd2l0aCB0aGVtCisJU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1tjb3VudF07CisJaW50IGxhc3QgPSAwOworCWludCBjdXJyZW50ID0gMDsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgKytpKSB7CisJICAgIGlmIChzLmNoYXJBdChpKSA9PSBkaXZpZGVyKSB7CisJICAgICAgICByZXN1bHRbY3VycmVudCsrXSA9IHMuc3Vic3RyaW5nKGxhc3QsaSk7CisJICAgICAgICBsYXN0ID0gaSsxOworCSAgICB9CisJfQorCXJlc3VsdFtjdXJyZW50KytdID0gcy5zdWJzdHJpbmcobGFzdCxpKTsKKwlyZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBleHBlY3QoQ29tcG91bmRUcmFuc2xpdGVyYXRvciB0LCBTdHJpbmcgc291cmNlLCBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHQudHJhbnNsaXRlcmF0ZShzb3VyY2UpOworICAgICAgICBleHBlY3RBdXgodC5nZXRJRCgpICsgIjpTdHJpbmciLCBzb3VyY2UsIHJlc3VsdCwgZXhwZWN0ZWRSZXN1bHQpOworCisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHJzb3VyY2UgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoc291cmNlKTsKKyAgICAgICAgdC50cmFuc2xpdGVyYXRlKHJzb3VyY2UpOworICAgICAgICByZXN1bHQgPSByc291cmNlLnRvU3RyaW5nKCk7CisgICAgICAgIGV4cGVjdEF1eCh0LmdldElEKCkgKyAiOlJlcGxhY2VhYmxlIiwgc291cmNlLCByZXN1bHQsIGV4cGVjdGVkUmVzdWx0KTsKKworICAgICAgICAvLyBUZXN0IGtleWJvYXJkIChpbmNyZW1lbnRhbCkgdHJhbnNsaXRlcmF0aW9uIC0tIHRoaXMgcmVzdWx0CisgICAgICAgIC8vIG11c3QgYmUgdGhlIHNhbWUgYWZ0ZXIgd2UgZmluYWxpemUgKHNlZSBiZWxvdykuCisgICAgICAgIHJzb3VyY2UucmVwbGFjZSgwLCByc291cmNlLmxlbmd0aCgpLCAiIik7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIGluZGV4ID0gbmV3IFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciBsb2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHNvdXJjZS5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgbG9nLmFwcGVuZCgiICsgIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2cuYXBwZW5kKHNvdXJjZS5jaGFyQXQoaSkpLmFwcGVuZCgiIC0+ICIpOworICAgICAgICAgICAgdC50cmFuc2xpdGVyYXRlKHJzb3VyY2UsIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHNvdXJjZS5jaGFyQXQoaSkpKTsKKyAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgc3RyaW5nIGJ1ZmZlciB3aXRoIGEgdmVydGljYWwgYmFyICd8JyB3aGVyZQorICAgICAgICAgICAgLy8gdGhlIGNvbW1pdHRlZCBpbmRleCBpcy4KKyAgICAgICAgICAgIFN0cmluZyBzID0gcnNvdXJjZS50b1N0cmluZygpOworICAgICAgICAgICAgbG9nLmFwcGVuZChzLnN1YnN0cmluZygwLCBpbmRleC5zdGFydCkpLgorICAgICAgICAgICAgICAgIGFwcGVuZCgnfCcpLgorICAgICAgICAgICAgICAgIGFwcGVuZChzLnN1YnN0cmluZyhpbmRleC5zdGFydCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBcyBhIGZpbmFsIHN0ZXAgaW4ga2V5Ym9hcmQgdHJhbnNsaXRlcmF0aW9uLCB3ZSBtdXN0IGNhbGwKKyAgICAgICAgLy8gdHJhbnNsaXRlcmF0ZSB0byBmaW5pc2ggb2ZmIGFueSBwZW5kaW5nIHBhcnRpYWwgbWF0Y2hlcyB0aGF0CisgICAgICAgIC8vIHdlcmUgd2FpdGluZyBmb3IgbW9yZSBpbnB1dC4KKyAgICAgICAgdC5maW5pc2hUcmFuc2xpdGVyYXRpb24ocnNvdXJjZSwgaW5kZXgpOworICAgICAgICByZXN1bHQgPSByc291cmNlLnRvU3RyaW5nKCk7CisgICAgICAgIGxvZy5hcHBlbmQoIiA9PiAiKS5hcHBlbmQocnNvdXJjZS50b1N0cmluZygpKTsKKyAgICAgICAgZXhwZWN0QXV4KHQuZ2V0SUQoKSArICI6S2V5Ym9hcmQiLCBsb2cudG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgcmVzdWx0LmVxdWFscyhleHBlY3RlZFJlc3VsdCksCisgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0KTsKKworICAgIH0KKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0QXV4KFN0cmluZyB0YWcsIFN0cmluZyBzb3VyY2UsCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0LCBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgZXhwZWN0QXV4KHRhZywgc291cmNlICsgIiAtPiAiICsgcmVzdWx0LAorICAgICAgICAgICAgICAgICByZXN1bHQuZXF1YWxzKGV4cGVjdGVkUmVzdWx0KSwKKyAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBleHBlY3RBdXgoU3RyaW5nIHRhZywgU3RyaW5nIHN1bW1hcnksIGJvb2xlYW4gcGFzcywgU3RyaW5nIGV4cGVjdGVkUmVzdWx0KSB7CisgICAgICAgIGlmIChwYXNzKSB7CisgICAgICAgICAgICBsb2dsbigiKCIgKyB0YWcgKyAiKSAiICsgVXRpbGl0eS5lc2NhcGUoc3VtbWFyeSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6ICgiICsgdGFnKyAiKSAiCisgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmVzY2FwZShzdW1tYXJ5KQorICAgICAgICAgICAgICAgICsgIiwgZXhwZWN0ZWQgIiArIFV0aWxpdHkuZXNjYXBlKGV4cGVjdGVkUmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9ICAKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0Vycm9yVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0Vycm9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3N2NiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvRXJyb3JUZXN0LmphdmEKQEAgLTAsMCArMSwyMjcgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvRXJyb3JUZXN0LmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMjowNzo1OCAkCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC50cmFuc2xpdDsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CisKKy8qKgorICogQHRlc3QKKyAqIEBzdW1tYXJ5IEVycm9yIGNvbmRpdGlvbiB0ZXN0IG9mIFRyYW5zbGl0ZXJhdG9yCisgKi8KK3B1YmxpYyBjbGFzcyBFcnJvclRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBFcnJvclRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFRyYW5zbGl0ZXJhdG9yRXJyb3JzKCkgeworICAgICAgICBTdHJpbmcgdHJhbnM9IkxhdGluLUdyZWVrIjsKKyAgICAgICAgU3RyaW5nIGJvZ3VzSUQ9IkxBVElOR1JFRUstR1JFRUtMQVRJTiI7CisgICAgICAgIFN0cmluZyBuZXdJRD0iQm9ndXMtTGF0aW4iOworICAgICAgICBTdHJpbmcgbmV3SURSdWxlcz0ienp6ID4gWjsgZiA8PiBwaCI7CisgICAgICAgIFN0cmluZyBib2d1c1J1bGVzPSJhIH0gW2ItZyBtLXAgIjsKKyAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgdGVzdFN0cmluZz0gbmV3IFJlcGxhY2VhYmxlU3RyaW5nKCJBIHF1aWNrIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cuIik7CisgICAgICAgIFN0cmluZyBpbnNlcnRTdHJpbmc9ImNhdHMgYW5kIGRvZ3MiOworICAgICAgICBpbnQgc3RvcHBlZEF0ID0gMCwgbGVuOworICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBwb3MgPSBuZXcgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24oKTsKKworICAgICAgICBUcmFuc2xpdGVyYXRvciB0PSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSh0cmFucywgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGlmKHQ9PW51bGwpeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNvbnN0cnVjdGlvbiBvZiBMYXRpbi1HcmVlayIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGxlbiA9IHRlc3RTdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIHN0b3BwZWRBdCA9IHQudHJhbnNsaXRlcmF0ZSh0ZXN0U3RyaW5nLCAwLCAxMDApOworICAgICAgICBpZiAoc3RvcHBlZEF0ICE9IC0xKSB7CisgICAgICAgICAgIGVycmxuKCJGQUlMOiBPdXQgb2YgYm91bmRzIGNoZWNrIGZhaWxlZCAoMSkuIik7CisgICAgICAgIH0gZWxzZSBpZiAodGVzdFN0cmluZy5sZW5ndGgoKSAhPSBsZW4pIHsKKyAgICAgICAgICAgdGVzdFN0cmluZz0gbmV3IFJlcGxhY2VhYmxlU3RyaW5nKCJBIHF1aWNrIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cuIik7ICAgICAgICAKKyAgICAgICAgICAgZXJybG4oIkZBSUw6IFRyYW5zbGl0ZXJhdGUgZmFpbHMgYW5kIHRoZSB0YXJnZXQgc3RyaW5nIHdhcyBtb2RpZmllZC4iKTsKKyAgICAgICAgfQorICAgICAgICBzdG9wcGVkQXQgPSB0LnRyYW5zbGl0ZXJhdGUodGVzdFN0cmluZywgMTAwLCB0ZXN0U3RyaW5nLmxlbmd0aCgpLTEpOworICAgICAgICBpZiAoc3RvcHBlZEF0ICE9IC0xKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogT3V0IG9mIGJvdW5kcyBjaGVjayBmYWlsZWQgKDIpLiIpOworICAgICAgICB9IGVsc2UgaWYgKHRlc3RTdHJpbmcubGVuZ3RoKCkgIT0gbGVuKSB7CisgICAgICAgICAgICB0ZXN0U3RyaW5nPW5ldyBSZXBsYWNlYWJsZVN0cmluZygiQSBxdWljayBmb3gganVtcGVkIG92ZXIgdGhlIGxhenkgZG9nLiIpOyAgICAgICAgCisgICAgICAgICAgICBlcnJsbigiRkFJTDogVHJhbnNsaXRlcmF0ZSBmYWlscyBhbmQgdGhlIHRhcmdldCBzdHJpbmcgd2FzIG1vZGlmaWVkLiIpOworCX0KKyAgICAgICAgcG9zLnN0YXJ0ID0gMTAwOworICAgICAgICBwb3MubGltaXQgPSB0ZXN0U3RyaW5nLmxlbmd0aCgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdC50cmFuc2xpdGVyYXRlKHRlc3RTdHJpbmcsIHBvcyk7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogU3RhcnQgb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMsIGVycm9yIG5vdCByZXBvcnRlZC4iKTsKKyAgICAgICAgfSBjYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworCSAgICBsb2dsbigiU3RhcnQgb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMgYW5kIGRldGVjdGVkLiIpOworICAgICAgICB9CisgICAgICAgIHBvcy5saW1pdCA9IDEwMDsKKyAgICAgICAgcG9zLnN0YXJ0ID0gMDsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdC50cmFuc2xpdGVyYXRlKHRlc3RTdHJpbmcsIHBvcyApOworICAgICAgICAgICAgZXJybG4oIkZBSUw6IExpbWl0IG9mZnNldCBpcyBvdXQgb2YgYm91bmRzLCBlcnJvciBub3QgcmVwb3J0ZWQuXG4iKTsKKyAgICAgICAgfSBjYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworCSAgICBsb2dsbigiU3RhcnQgb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMgYW5kIGRldGVjdGVkLiIpOworICAgICAgICB9CisgICAgICAgIGxlbiA9IHBvcy5jb250ZXh0TGltaXQgPSB0ZXN0U3RyaW5nLmxlbmd0aCgpOworICAgICAgICBwb3MuY29udGV4dFN0YXJ0ID0gMDsKKyAgICAgICAgcG9zLmxpbWl0ID0gbGVuIC0gMTsKKyAgICAgICAgcG9zLnN0YXJ0ID0gNTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHQudHJhbnNsaXRlcmF0ZSh0ZXN0U3RyaW5nLCBwb3MsIGluc2VydFN0cmluZyk7CisgICAgICAgICAgICBpZiAobGVuID09IHBvcy5saW1pdCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBUZXN0IGluc2VydGlvbiB3aXRoIHN0cmluZzogdGhlIHRyYW5zbGl0ZXJhdGlvbiBwb3NpdGlvbiBsaW1pdCBkaWRuJ3QgY2hhbmdlIGFzIGV4cGVjdGVkLiIpOworCSAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiSW5zZXJ0aW9uIHRlc3Qgd2l0aCBzdHJpbmcgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4iKTsKKwl9CisgICAgICAgIHBvcy5jb250ZXh0U3RhcnQgPSAwOworICAgICAgICBwb3MuY29udGV4dExpbWl0ID0gdGVzdFN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgcG9zLmxpbWl0ID0gdGVzdFN0cmluZy5sZW5ndGgoKSAtMTsKKyAgICAgICAgcG9zLnN0YXJ0ID0gNTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHQudHJhbnNsaXRlcmF0ZSh0ZXN0U3RyaW5nLCBwb3MsIDB4MDA2MSk7CisgICAgICAgICAgICBpZiAobGVuID09IHBvcy5saW1pdCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBUZXN0IGluc2VydGlvbiB3aXRoIGNoYXJhY3RlcjogdGhlIHRyYW5zbGl0ZXJhdGlvbiBwb3NpdGlvbiBsaW1pdCBkaWRuJ3QgY2hhbmdlIGFzIGV4cGVjdGVkLiIpOworCSAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogSW5zZXJ0aW9uIHRlc3Qgd2l0aCBVVEYtMTYgY29kZSBwb2ludCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLiIpOworCX0KKyAgICAgICAgbGVuID0gcG9zLmxpbWl0ID0gdGVzdFN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgcG9zLmNvbnRleHRTdGFydCA9IDA7CisgICAgICAgIHBvcy5jb250ZXh0TGltaXQgPSB0ZXN0U3RyaW5nLmxlbmd0aCgpIC0gMTsKKyAgICAgICAgcG9zLnN0YXJ0ID0gNTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHQudHJhbnNsaXRlcmF0ZSh0ZXN0U3RyaW5nLCBwb3MsIGluc2VydFN0cmluZyk7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogT3V0IG9mIGJvdW5kcyBjaGVjayBmYWlsZWQgKDMpLiIpOworICAgICAgICAgICAgaWYgKHRlc3RTdHJpbmcubGVuZ3RoKCkgIT0gbGVuKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IFRoZSBpbnB1dCBzdHJpbmcgd2FzIG1vZGlmaWVkIHRob3VnaCB0aGUgb2Zmc2V0cyB3ZXJlIG91dCBvZiBib3VuZHMuIik7CisJICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJJbnNlcnRpb24gdGVzdCB3aXRoIG91dCBvZiBib3VuZHMgaW5kZXhlcy4iKTsKKwl9CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQxID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHQxPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShib2d1c0lELCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgICAgIGlmKHQxIT1udWxsKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNvbnN0cnVjdGlvbiBvZiBib2d1cyBJRCBcIkxBVElOR1JFRUstR1JFRUtMQVRJTlwiIik7IAorCSAgICB9CisJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsgfQorCisgICAgICAgIC8vdHJ5IHsgLy8gdW5uZWVkZWQgLSBFeGNlcHRpb24gY2Fubm90IGJlIHRocm93bgorICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDIgPSBuZXcgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IobmV3SUQsIG5ld0lEUnVsZXMpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0MyA9IHQyLmdldEludmVyc2UoKTsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogVGhlIG5ld0lEIHRyYW5zbGl0ZXJhdG9yIHdhcyBub3QgcmVnaXN0ZXJlZCBzbyBjcmVhdGVJbnZlcnNlIHNob3VsZCBmYWlsLiIpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgICAgICAgIC8vfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMobmV3SUQsIGJvZ3VzUnVsZXMsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICAgICAgaWYgKHQ0ICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IFRoZSBydWxlcyBpcyBtYWxmb3JtZWQgYnV0IGVycm9yIHdhcyBub3QgcmVwb3J0ZWQuIik7IAorCSAgICB9CisJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RVbmljb2RlU2V0RXJyb3JzKCkgeworICAgICAgICBTdHJpbmcgYmFkUGF0dGVybj0iW1s6TDpdLVsweDAzMDAtMHgwNDAwXSI7CisgICAgICAgIFVuaWNvZGVTZXQgc2V0ID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdDsKKworICAgICAgICBpZiAoIXNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBUaGUgZGVmYXVsdCBjdG9yIG9mIFVuaWNvZGVTZXQgY3JlYXRlZCBhIG5vbi1lbXB0eSBvYmplY3QuIik7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNldC5hcHBseVBhdHRlcm4oYmFkUGF0dGVybik7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogQXBwbGllZCBhIGJhZCBwYXR0ZXJuIHRvIHRoZSBVbmljb2RlU2V0IG9iamVjdCBva2F5LiIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nbG4oIlRlc3QgYXBwbHlpbmcgd2l0aCB0aGUgYmFkIHBhdHRlcm4uIik7CisJfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgVW5pY29kZVNldCBzZXQxID0gbmV3IFVuaWNvZGVTZXQoYmFkUGF0dGVybik7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogQ3JlYXRlZCBhIFVuaWNvZGVTZXQgYmFzZWQgb24gYmFkIHBhdHRlcm5zLiIpOworCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dsbigiVGVzdCBjb25zdHJ1Y3Rpbmcgd2l0aCB0aGUgYmFkIHBhdHRlcm4uIik7CisJfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RVbmlUb0hleEVycm9ycygpIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0ID0gbmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKCIiLCB0cnVlLCBudWxsKTsKKyAgICAgICAgICAgIGlmICh0ICE9IG51bGwpIHsgICAgCisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IENyZWF0ZWQgYSBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvciB3aXRoIGFuIGVtcHR5IHBhdHRlcm4uIik7CisJICAgIH0KKwl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeyB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0ID0gbmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKCJcXHgiLCB0cnVlLCBudWxsKTsKKwkgICAgaWYgKHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBDcmVhdGVkIGEgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3Igd2l0aCBhIGJhZCBwYXR0ZXJuLiIpOworCSAgICB9CisJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsgfQorICAgICAgICB0ID0gbmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAoKFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKXQpLmFwcGx5UGF0dGVybigiXFx4Iik7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3I6OmFwcGx5UGF0dGVybiBzdWNjZWVkZWQgd2l0aCBhIGJhZCBwYXR0ZXJuLiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFJCVEVycm9ycygpIHsKKworICAgICAgICBTdHJpbmcgcnVsZXM9ImFiPnkiOworICAgICAgICBTdHJpbmcgaWQ9Ik15UmFuZG9tLVlSZXZlcnNlIjsKKyAgICAgICAgU3RyaW5nIGdvb2RQYXR0ZXJuPSJbWzpMOl0mW1xcdTAwMDAtXFx1RkZGRl1dIjsgLyogYWxsIEJNUCBsZXR0ZXJzICovCisgICAgICAgIFVuaWNvZGVTZXQgc2V0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNldCA9IG5ldyBVbmljb2RlU2V0KGdvb2RQYXR0ZXJuKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IgdCA9IG5ldyBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcihpZCwgcnVsZXMsIFRyYW5zbGl0ZXJhdG9yLlJFVkVSU0UsIHNldCk7CisgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXJDbGFzcyhpZCwgdC5nZXRDbGFzcygpLCBudWxsKTsKKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci51bnJlZ2lzdGVyKGlkKTsgIAorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQxPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShpZCwgVHJhbnNsaXRlcmF0b3IuUkVWRVJTRSk7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjb25zdHJ1Y3Rpb24gb2YgdW5yZWdpc3RlcmVkIElEIHNob3VsZCBoYXZlIGZhaWxlZC4iKTsKKwkgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7IH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBhIGdvb2QgUkJUIHRvIHRlc3QgcmVnaXN0cmF0aW9uLiIpOworCSAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBhIGdvb2QgVW5pY29kZVNldCBiYXNlZCBvbiB2YWxpZCBwYXR0ZXJucy4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKwl9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEhleFRvVW5pRXJyb3JzKCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gbnVsbDsKKyAgICAgICAgLy90cnkgeyAvLyB1bm5lZWRlZCAtIGV4Y2VwdGlvbiBjYW5ub3QgYmUgdGhyb3duCisgICAgICAgICAgICB0ID0gbmV3IEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKCIiLCBudWxsKTsKKyAgICAgICAgLy99IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAvLyAgICBlcnJsbigiRkFJTDogQ291bGQgbm90IGNyZWF0ZSBhIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIHdpdGggYW4gZW1wdHkgcGF0dGVybi4iKTsKKyAgICAgICAgLy99CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0ID0gbmV3IEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKCJcXHgiLCBudWxsKTsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBDcmVhdGVkIGEgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3Igd2l0aCBhIGJhZCBwYXR0ZXJuLiIpOworCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7IH0KKworICAgICAgICB0ID0gbmV3IEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAoKEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKXQpLmFwcGx5UGF0dGVybigiXFx4Iik7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3I6OmFwcGx5UGF0dGVybiBzdWNjZWVkZWQgd2l0aCBhIGJhZCBwYXR0ZXJuLiIpOworCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7IH0KKyAgICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0hleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0hleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhYTNkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwyNjkgQEAKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0F0dGljL0hleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA4LzI4IDE2OjQ1OjE4ICQgCisgKiAkUmV2aXNpb246IDEuNiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQ7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBqYXZhLnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworCisvKioKKyAqIEB0ZXN0CisgKiBAc3VtbWFyeSBHZW5lcmFsIHRlc3Qgb2YgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IKKyAqLworcHVibGljIGNsYXNzIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3JUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIC8qKgorICAgICogVXNlZCBieSBUZXN0Q29uc3RydWN0aW9uKCkgYW5kIFRlc3RUcmFuc2xpdGVyYXRlLgorICAgICovCisgICAgVW5pY29kZUZpbHRlciBIZXhGaWx0ZXI9bmV3IFVuaWNvZGVGaWx0ZXIoKSB7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKGludCBjKSB7CisgICAgICAgICAgICBpZihjID09IDB4MDA2MSB8fCBjID09IDB4MDA2MyApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9QYXR0ZXJuKGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUpIHsKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzSW5kZXhWYWx1ZShpbnQgdikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyB2b2lkIGFkZE1hdGNoU2V0VG8oVW5pY29kZVNldCB0b1VuaW9uVG8pIHt9CisgICAgfTsKKworICAgIHB1YmxpYyB2b2lkIFRlc3RDb25zdHJ1Y3Rpb24oKXsKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIGNvbnN0cnVjdGlvbiBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcigpIik7CisgICAgICAgIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIHRyYW5zMT1uZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IoKTsKKyAgICAgICAKKworICAgICAgICBsb2dsbigiVGVzdGluZyB0aGUgY29zbnRydWN0aW9uIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4pIik7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuPSJcXFxcVSswMDAwYWJjIjsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgdHJhbnMxPW5ldyBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcihwYXR0ZXJuKTsKKyAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleDIpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciBjb25zdHJ1Y3Rpb24gZmFpbGVkIHdpdGggcGF0dGVybj0iICsgcGF0dGVybiArICIgRXhjZXB0aW9uPSAiICsgZXgyLnRvU3RyaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIGNvc250cnVjdGlvbiBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcihwYXR0ZXJuKSB3aXRoIGlsbGVnYWwgcGF0dGVybiIpOworICAgICAgICBTdHJpbmcgcGF0dGVybjI9IlxcWCsiOworICAgICAgICB0cnl7CisgICAgICAgICAgICB0cmFuczE9bmV3IEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4yKTsKKyAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleDMpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPSzogY29uc3RydWN0aW9uIHdpdGggSWxsZWdhbCBwYXR0ZXJuIGhhbmRsZWQgY29ycmVjdGx5Iik7CisgICAgICAgIH0gIAorICAgICAgICAKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIGNvbnN0cnVjdGlvbiBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcihwYXR0ZXJuLCBhZG9wdGVkRmlsdGVyPW51bGwpIik7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIHRyYW5zMT1uZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IocGF0dGVybiwgbnVsbCk7CisgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXg0KSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IocGF0dGVybiwgYWRvcHRlZEZpbHRlcj1udWxsKSBjb25zdHJ1Y3Rpb24gZmFpbGVkLiBFeGNlcHRpb249ICIgKyBleDQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICBsb2dsbigiVGVzdGluZyB0aGUgY29uc3RydWN0aW9uIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4sIGFkb3B0ZWRGaWx0ZXIpIik7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIHRyYW5zMT1uZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IocGF0dGVybiwgSGV4RmlsdGVyKTsKKyAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleDQpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcihwYXR0ZXJuLCBhZG9wdGVkRmlsdGVyKSBjb25zdHJ1Y3Rpb24gZmFpbGVkLiBFeGNlcHRpb249ICIgKyBleDQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBUZXN0UGF0dGVybigpeworICAgICAgICBsb2dsbigiVGVzdGluZyB0aGUgYXBwbHlQYXR0ZXJuKCkgYW5kIHRvUGF0dGVybigpIEFQSSBvZiBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciIpOworICAgICAgICAvKmRlZmF1bHQgdHJhbnNsaXRlcmF0b3IgaGFzIHBhdHRlcm4gXFx1MDAwMCovCisgICAgICAgIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIHRyYW5zZGVmYXVsdD1uZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGRlZmF1bHRwYXR0ZXJuPXRyYW5zZGVmYXVsdC50b1BhdHRlcm4oKTsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4xPSJcXFxcVSswMDAwIjsKKyAgICAgICAgCisgICAgICAgIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIHRyYW5zMT1udWxsOworICAgICAgICB0cnl7CisgICAgICAgICAgICB0cmFuczE9bmV3IEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4xLCBudWxsKTsKKyAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleDEpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciBjb25zdHJ1Y3Rpb24gZmFpbGVkIHdpdGggcGF0dGVybiA9IiArIHBhdHRlcm4xICsKKyAgICAgICAgICAgICAgICAgICAiRXhjZXB0aW9uOiIgKyBleDEudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICAvKnRlc3QgdG9QYXR0ZXJuKCkgKi8KKyAgICAgICAgaWYodHJhbnNkZWZhdWx0LnRvUGF0dGVybigpLmVxdWFscyh0cmFuczEudG9QYXR0ZXJuKCkpID09IHRydWUgfHwKKyAgICAgICAgICAgIHRyYW5zZGVmYXVsdC50b1BhdHRlcm4oKS5lcXVhbHMoIlxcXFx1MDAwMDtcXFxcVTAwMDA7dSswMDAwO1UrMDAwMCIpICE9IHRydWUgfHwKKyAgICAgICAgICAgIHRyYW5zMS50b1BhdHRlcm4oKS5lcXVhbHMocGF0dGVybjEpICE9IHRydWUgKXsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogdG9QYXR0ZXJuKCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICAvKmFwcGx5IHBhdHRlcm5zIGZvciB0cmFuc2RlZmF1bHQqLworICAgICAgICBTdHJpbmcgc3RyPSJhYktmIjsKKyAgICAgICAgZXhwZWN0UGF0dGVybih0cmFuc2RlZmF1bHQsICBwYXR0ZXJuMSwgIlxcVSswMDYxXFxVKzAwNjJcXFUrMDA0QlxcVSswMDY2Iiwgc3RyKTsKKyAgICAgICAgZXhwZWN0UGF0dGVybih0cmFuc2RlZmF1bHQsICAiXFxVIyMwMCwiLCAiVTYxLFU2MixVNEIsVTY2LCIsIHN0cik7CisgICAgICAgIGV4cGVjdFBhdHRlcm4odHJhbnNkZWZhdWx0LCBkZWZhdWx0cGF0dGVybiwgIlxcdTAwNjFcXHUwMDYyXFx1MDA0QlxcdTAwNjYiLCBzdHIpOworICAgICAgICBleHBlY3RQYXR0ZXJuKHRyYW5zMSwgIlxcdW5pMDAwMCIsICJ1bmkwMDYxdW5pMDA2MnVuaTAwNEJ1bmkwMDY2Iiwgc3RyKTsKKyAgICAgICAgZXhwZWN0UGF0dGVybih0cmFuczEsICJcXFxcUy0wMDAwLUUiLCAiXFxTLTAwNjEtRVxcUy0wMDYyLUVcXFMtMDA0Qi1FXFxTLTAwNjYtRSIsIHN0cik7CisgICAgICAgIAorICAgICAgICBleHBlY3RQYXR0ZXJuKHRyYW5zMSwgIlxcXFxTLTAwMDAtRSIsICJcXFMtMDA2MS1FXFxTLTAwNjItRVxcUy0wMDRCLUVcXFMtMDA2Ni1FIiwgIHN0cik7CisgICAgICAgIGV4cGVjdFBhdHRlcm4odHJhbnMxLCAiXFx1IyMwMDAwIiwgIlxcdSMjMDA2MVxcdSMjMDA2MiIsICJGQUlMIik7CisgICAgICAgIGV4cGVjdFBhdHRlcm4odHJhbnMxLCAiXFwqMDAwMCIsICAiKjAwNjEqMDA2MiowMDRCKjAwNjYiLCAgc3RyKTsgCisgICAgICAgIGV4cGVjdFBhdHRlcm4odHJhbnMxLCAiXFx1IyMjIyIsICJcXHUjIzAwNjFcXHUjIzAwNjIiLCAiRkFJTCIpOworICAKKworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RTaW1wbGVUcmFuc2xpdGVyYXRlKCl7IAorICAgICAgICBTdHJpbmcgcGF0dGVybjE9IlxcXFxVKzAwMDAiOworICAgICAgICBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciB0cmFuczE9bnVsbDsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgdHJhbnMxPW5ldyBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcihwYXR0ZXJuMSwgbnVsbCk7CisgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKXsKKyAgICAgICAgICAgIGVycmxuKCJIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcihwYXR0ZXJuMSwgbnVsbCkgY29uc3RydWN0aW9uIGZhaWxlZCB3aXRoIHBhdHRlcm4gPSIgCisgICAgICAgICAgICAgICAgICArIHBhdHRlcm4xICsgIkV4Y2VwdGlvbjoiICsgaWFlLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBzb3VyY2U9IkhlXFxVKzAwNkNcXFUrMDA2Q1xcVSswMDZGIjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkPSJIZWxsbyI7CisKKyAgICAgICAgZXhwZWN0VHJhbnNsaXQodHJhbnMxLCAiOlJlcGxhY2VhYmxlICIsIHNvdXJjZSwgIDEsIHNvdXJjZS5sZW5ndGgoKSwgMiwgZXhwZWN0ZWQpOyAKKyAgICAgICAgZXhwZWN0KHRyYW5zMSwgIiIsICJcXFUrMDA0OFxcVSswMDY1XFxVKzAwNkNcXFUrMDA2Q1xcVSswMDZGIiwgZXhwZWN0ZWQpOworCisgICAgICAgIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIHRyYW5zZGVmYXVsdD1uZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IoKTsKKyAgICAgICAgCisgICAgICAgIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIHRyYW5zMj1udWxsOworICAgICAgICB0cnl7CisgICAgICAgICAgICB0cmFuczI9bmV3IEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKHRyYW5zZGVmYXVsdC50b1BhdHRlcm4oKSwgSGV4RmlsdGVyKTsKKyAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleDIpeworICAgICAgICAgICAgZXJybG4oIkhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4xLCBIZXhGaWx0ZXIpIGNvbnN0cnVjdGlvbiBmYWlsZWQgd2l0aCBwYXR0ZXJuID0iIAorICAgICAgICAgICAgICAgICAgKyBwYXR0ZXJuMSArICJFeGNlcHRpb246IiArIGV4Mi50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICBleHBlY3QodHJhbnMyLCAid2l0aCBGaWx0ZXIoMHgwMDYxLCAweDAwNjMpICIsICJcdTAwNjFcdTAwNjJcdTAwNjMiLCAgICJcdTAwNjFiXHUwMDYzIik7CisgICAgfQorICAgCisgICAgcHVibGljIHZvaWQgVGVzdFRyYW5zbGl0ZXJhdGUoKXsKKyAgICAgICAgU3RyaW5nIERhdGFbXT17CisgICAgICAgICAgICAvL3BhdHRlcm4sIHNvdXJjZSwgaW5kZXguY29udGV4dFN0YXJ0LCBpbmRleC5jb250ZXh0TGltaXQsIGluZGV4LnN0YXJ0LCBleHBlY3RlZFJlc3VsdCwKKyAgICAgICAvLyAgICAgIlUrIyMwMCIsICAgICJhYlUrNjMiLCAiMSIsICI3IiwgIjIiLCAgImFiYyIsIAorICAgICAgICAgICAgIlxcXFx1MDAwMCIsICJhXFx1MDA2MmMiLCAiMSIsICI3IiwgIjEiLCAgImFiYyIsIAorICAgICAgICAgICAgIlVuaTAwMDAiLCAgICJhYlVuaTAwNjMiLCAiMSIsICI5IiwgIjIiLCAgImFiYyIsIAorICAgICAgICAgICAgIlVbMDAwMF0iLCAgICJoZVVbMDA2Q11VWzAwNkNdbyIsICIwIiwgIjE2IiwgIjIiLCAiaGVsbG8iLCAKKyAgICAgICAvLyAgICAgInByZWZpeC0wMDAwLXN1ZmZpeCIsICJhcHJlZml4LTAwNjItc3VmZml4cHJlZml4LTAwNjMtc3VmZml4IiwgIjEiLCAiMzkiLCAiMSIsICJhYmMiLCAKKyAgICAgICAgICAgICIqIyMwMCoiLCAgICAiaGVsbCo2RioqNzQqKjY4Kio2NSpyZSIsICAiMSIsICIyMCIsICI0IiwgImhlbGxvdGhlcmUiLCAKKworICAgICAgICB9OworICAgICAgICBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciB0cmFuczE9bnVsbDsKKyAgICAgICAgZm9yKGludCBpPTA7IGk8RGF0YS5sZW5ndGg7IGkrPTYpeworICAgICAgICAgICAgdHJ5eworICAgICAgICAgICAgICAgIHRyYW5zMT1uZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IoRGF0YVtpKzBdLCBudWxsKTsKKyAgICAgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgxKXsKKyAgICAgICAgICAgICAgICBlcnJsbigiSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IocGF0dGVybjEsIG51bGwpIGNvbnN0cnVjdGlvbiBmYWlsZWQgd2l0aCBwYXR0ZXJuID0iIAorICAgICAgICAgICAgICAgICAgICAgKyBEYXRhW2krMF0gKyAiRXhjZXB0aW9uOiIgKyBleDEudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3RUcmFuc2xpdCh0cmFuczEsICIiLCBEYXRhW2krMV0sIEludGVnZXIucGFyc2VJbnQoRGF0YVtpKzJdKSwgCisgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQoRGF0YVtpKzNdKSwgSW50ZWdlci5wYXJzZUludChEYXRhW2krNF0pLCBEYXRhW2krNV0gKTsKKyAgICAgICAgICAgIGV4cGVjdCh0cmFuczEsICIiLCBEYXRhW2krMV0sIERhdGFbaSs1XSk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIFN1cHBvcnQgbWV0aG9kcworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgcHJpdmF0ZSB2b2lkIGV4cGVjdFRyYW5zbGl0KEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBpbnQgbGltaXQsIGludCBjdXJzb3IsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVzdWx0KXsKKyAgICAKKworICAgICAgICBSZXBsYWNlYWJsZVN0cmluZyByc291cmNlID0gbmV3IFJlcGxhY2VhYmxlU3RyaW5nKHNvdXJjZSk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIGluZGV4ID0gbmV3IFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uKHN0YXJ0LCBsaW1pdCwgY3Vyc29yLCBsaW1pdCk7CisgICAgICAgIHQudHJhbnNsaXRlcmF0ZShyc291cmNlLCBpbmRleCk7CisgICAgICAgIHQuZmluaXNoVHJhbnNsaXRlcmF0aW9uKHJzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdD1yc291cmNlLnRvU3RyaW5nKCk7CisgICAgICAgIGV4cGVjdEF1eCh0LmdldElEKCkgKyAiOmtleWJvYXJkICIgKyBtZXNzYWdlLCBzb3VyY2UgKyAiLT4iICsgcmVzdWx0LCByZXN1bHQuZXF1YWxzKGV4cGVjdGVkUmVzdWx0KSwgZXhwZWN0ZWRSZXN1bHQpOworICAgIH0KKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0UGF0dGVybihIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBzb3VyY2UsIFN0cmluZyBleHBlY3RlZFJlc3VsdCl7CisKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgdC5hcHBseVBhdHRlcm4ocGF0dGVybik7CisgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKXsKKyAgICAgICAgICAgIGlmKGV4cGVjdGVkUmVzdWx0LmVxdWFscygiRkFJTCIpKXsKKyAgICAgICAgICAgICAgICBsb2dsbigiT0s6IGNhbGxpbmcgYXBwbHlQYXR0ZXJuKCkgd2l0aCBpbGxlZ2FsIHBhdHRlcm4gZmFpbGVkIGFzIGV4cGVjdGVkLiIgKyBpYWUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9IGVsc2V7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGFwcGx5UGF0dGVybigpIGZhaWxlZCB3aXRoIHBhdHRlcm4gPSIgKyBwYXR0ZXJuICsgIi0tLT4iICsgaWFlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKCFleHBlY3RlZFJlc3VsdC5lcXVhbHMoIkZBSUwiKSl7CisgICAgICAgICAgICBpZighdC50b1BhdHRlcm4oKS5lcXVhbHMocGF0dGVybikpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogYXBwbHlQYXR0ZXJuIG9yIHRvUGF0dGVuIGZhaWxlZC4gIEV4cGVjdGVkOiAiICsgcGF0dGVybiArICJHb3Q6ICIgKyB0LnRvUGF0dGVybigpKTsKKyAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgIGxvZ2xuKCJPSzogYXBwbHlQYXR0ZXJuIHBhc3NlZC4gVGVzdGluZyB0cmFuc2xpdGVyYXRpb24iKTsKKyAgICAgICAgICAgICAgICBleHBlY3QodCwgIiB3aXRoIHBhdHRlcm4gIitwYXR0ZXJuLCBzb3VyY2UsIGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0KEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIHQsICBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGV4cGVjdGVkUmVzdWx0KSB7CisgICAgCisgICAgICAgIFN0cmluZyByZXN1bHQ9dC50cmFuc2xpdGVyYXRlKHNvdXJjZSk7CisgICAgICAgIGV4cGVjdEF1eCh0LmdldElEKCkgKyAiOlN0cmluZyAiICsgbWVzc2FnZSwgc291cmNlICsgIi0+IiArIHJlc3VsdCwgcmVzdWx0LmVxdWFscyhleHBlY3RlZFJlc3VsdCksIGV4cGVjdGVkUmVzdWx0KTsKKworICAgICAgICBSZXBsYWNlYWJsZVN0cmluZyByc291cmNlID0gbmV3IFJlcGxhY2VhYmxlU3RyaW5nKHNvdXJjZSk7CisgICAgICAgIHQudHJhbnNsaXRlcmF0ZShyc291cmNlKTsKKyAgICAgICAgcmVzdWx0ID0gcnNvdXJjZS50b1N0cmluZygpOworICAgICAgICBleHBlY3RBdXgodC5nZXRJRCgpICsgIjpSZXBsYWNlYWJsZSIgKyBtZXNzYWdlLCBzb3VyY2UgKyAiLT4iICsgcmVzdWx0LCByZXN1bHQuZXF1YWxzKGV4cGVjdGVkUmVzdWx0KSwgZXhwZWN0ZWRSZXN1bHQpOworCisgICAgICAgIC8vIFRlc3Qga2V5Ym9hcmQgKGluY3JlbWVudGFsKSB0cmFuc2xpdGVyYXRpb24gLS0gdGhpcyByZXN1bHQKKyAgICAgICAgLy8gbXVzdCBiZSB0aGUgc2FtZSBhZnRlciB3ZSBmaW5hbGl6ZSAoc2VlIGJlbG93KS4KKyAgICAgICAgcnNvdXJjZS5yZXBsYWNlKDAsIHJzb3VyY2UubGVuZ3RoKCksICIiKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24gaW5kZXggPSBuZXcgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24oKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGxvZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8c291cmNlLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKCIgKyAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZy5hcHBlbmQoc291cmNlLmNoYXJBdChpKSkuYXBwZW5kKCIgLT4gIik7CisgICAgICAgICAgICB0LnRyYW5zbGl0ZXJhdGUocnNvdXJjZSwgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc291cmNlLmNoYXJBdChpKSkpOworICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBzdHJpbmcgYnVmZmVyIHdpdGggYSB2ZXJ0aWNhbCBiYXIgJ3wnIHdoZXJlCisgICAgICAgICAgICAvLyB0aGUgY29tbWl0dGVkIGluZGV4IGlzLgorICAgICAgICAgICAgU3RyaW5nIHMgPSByc291cmNlLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBsb2cuYXBwZW5kKHMuc3Vic3RyaW5nKDAsIGluZGV4LnN0YXJ0KSkuCisgICAgICAgICAgICAgICAgYXBwZW5kKCd8JykuCisgICAgICAgICAgICAgICAgYXBwZW5kKHMuc3Vic3RyaW5nKGluZGV4LnN0YXJ0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFzIGEgZmluYWwgc3RlcCBpbiBrZXlib2FyZCB0cmFuc2xpdGVyYXRpb24sIHdlIG11c3QgY2FsbAorICAgICAgICAvLyB0cmFuc2xpdGVyYXRlIHRvIGZpbmlzaCBvZmYgYW55IHBlbmRpbmcgcGFydGlhbCBtYXRjaGVzIHRoYXQKKyAgICAgICAgLy8gd2VyZSB3YWl0aW5nIGZvciBtb3JlIGlucHV0LgorICAgICAgICB0LmZpbmlzaFRyYW5zbGl0ZXJhdGlvbihyc291cmNlLCBpbmRleCk7CisgICAgICAgIHJlc3VsdCA9IHJzb3VyY2UudG9TdHJpbmcoKTsKKyAgICAgICAgbG9nLmFwcGVuZCgiID0+ICIpLmFwcGVuZChyc291cmNlLnRvU3RyaW5nKCkpOworICAgICAgICBleHBlY3RBdXgodC5nZXRJRCgpICsgIjpLZXlib2FyZCIsIGxvZy50b1N0cmluZygpICsgIlxuIiArIHNvdXJjZSArICIgLT4gIiArIHJlc3VsdCwgcmVzdWx0LmVxdWFscyhleHBlY3RlZFJlc3VsdCksIGV4cGVjdGVkUmVzdWx0KTsKKworICAgIH0KKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0QXV4KFN0cmluZyB0YWcsIFN0cmluZyBzdW1tYXJ5LCBib29sZWFuIHBhc3MsICBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgaWYgKHBhc3MpIHsKKyAgICAgICAgICAgIGxvZ2xuKCIoIiArIHRhZyArICIpICIgKyBVdGlsaXR5LmVzY2FwZShzdW1tYXJ5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogKCIgKyB0YWcrICIpICIKKyAgICAgICAgICAgICAgICArIFV0aWxpdHkuZXNjYXBlKHN1bW1hcnkpCisgICAgICAgICAgICAgICAgKyAiLCBleHBlY3RlZCAiICsgVXRpbGl0eS5lc2NhcGUoZXhwZWN0ZWRSZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH0gIAorfQorCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0phbW9UZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvSmFtb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jM2YzNmEyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L0phbW9UZXN0LmphdmEKQEAgLTAsMCArMSw0OTQgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvSmFtb1Rlc3QuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIyOjA3OjU4ICQKKyAqICRSZXZpc2lvbjogMS4xNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC50cmFuc2xpdDsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGphdmEudGV4dC4qOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIEB0ZXN0CisgKiBAc3VtbWFyeSBUZXN0IHRoZSBMYXRpbi1KYW1vIHRyYW5zbGl0ZXJhdG9yCisgKi8KK3B1YmxpYyBjbGFzcyBKYW1vVGVzdCBleHRlbmRzIFRyYW5zbGl0ZXJhdG9yVGVzdCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFNFUCA9ICdcJyc7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IEphbW9UZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RKYW1vKCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvciBsYXRpbkphbW8gPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTGF0aW4tSmFtbyIpOworICAgICAgICBUcmFuc2xpdGVyYXRvciBqYW1vTGF0aW4gPSBsYXRpbkphbW8uZ2V0SW52ZXJzZSgpOworCisgICAgICAgIFN0cmluZ1tdIENBU0UgPSB7CisgICAgICAgICAgICAvLyBDb2x1bW4gMSBpcyB0aGUgbGF0aW4gdGV4dCBMMSB0byBiZSBmZWQgdG8gTGF0aW4tSmFtbworICAgICAgICAgICAgLy8gdG8geWllbGQgb3V0cHV0IEouCisKKyAgICAgICAgICAgIC8vIENvbHVtbiAyIGlzIGV4cGVjdGVkIHZhbHVlIG9mIEouICBKIGlzIGZlZCB0bworICAgICAgICAgICAgLy8gSmFtby1MYXRpbiB0byB5aWVsZCBvdXRwdXQgTDIuCisKKyAgICAgICAgICAgIC8vIENvbHVtbiAzIGlzIGV4cGVjdGVkIHZhbHVlIG9mIEwyLiAgSWYgdGhlIGV4cGVjdGVkCisgICAgICAgICAgICAvLyB2YWx1ZSBvZiBMMiBpcyBMMSwgdGhlbiBMMiBpcyBudWxsLgorICAgICAgICAgICAgImJhYiIsICIoQmkpKEEpKEJmKSIsIG51bGwsCisgICAgICAgICAgICAiYmFiYiIsICIoQmkpKEEpKEJmKShCaSkoRVUpIiwgImJhYiIrU0VQKyJiZXUiLAorICAgICAgICAgICAgImJhYmJiYSIsICIoQmkpKEEpKEJmKShCQikoQSkiLCBudWxsLAorICAgICAgICAgICAgImJhZ2ciLCAiKEJpKShBKShHR2YpIiwgbnVsbCwKKyAgICAgICAgICAgICJiYWdnZ2EiLCAiKEJpKShBKShHR2YpKEdpKShBKSIsIG51bGwsCisgICAgICAgICAgICAiYmFnIitTRVArImdnYSIsICIoQmkpKEEpKEdmKShHR2kpKEEpIiwgbnVsbCwKKyAgICAgICAgICAgICJrYWJzYSIsICIoS2kpKEEpKEJmKShTaSkoQSkiLCBudWxsLAorICAgICAgICAgICAgImthYnNrYSIsICIoS2kpKEEpKEJTKShLaSkoQSkiLCBudWxsLAorICAgICAgICAgICAgImdhYnNia2EiLCAiKEdpKShBKShCUykoQmkpKEVVKShLaSkoQSkiLCAiZ2Fic2JldWthIiwgLy8gbm90IChLZikKKyAgICAgICAgICAgICJnZ2EiLCAiKEdHaSkoQSkiLCBudWxsLAorICAgICAgICAgICAgImJzYSIsICIoQmkpKEVVKShTaSkoQSkiLCAiYmV1c2EiLAorICAgICAgICAgICAgImFnZyIsICIoSUVVTkcpKEEpKEdHZikiLCBudWxsLAorICAgICAgICAgICAgImFnZ2EiLCAiKElFVU5HKShBKShHR2kpKEEpIiwgbnVsbCwKKyAgICAgICAgICAgICJsYSIsICIoUikoQSkiLCAicmEiLAorICAgICAgICAgICAgImJzIiwgIihCaSkoRVUpKFNmKSIsICJiZXVzIiwKKyAgICAgICAgICAgICJrYWxnZ2EiLCAiKEtpKShBKShMKShHR2kpKEEpIiwgbnVsbCwKKworICAgICAgICAgICAgLy8gJ3InIGluIGEgZmluYWwgcG9zaXRpb24gaXMgdHJlYXRlZCBsaWtlICdsJworICAgICAgICAgICAgImthcmthIiwgIihLaSkoQSkoTCkoS2kpKEEpIiwgImthbGthIiwKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8Q0FTRS5sZW5ndGg7IGkrPTMpIHsKKyAgICAgICAgICAgIFN0cmluZyBqYW1vID0gbmFtZVRvSmFtbyhDQVNFW2krMV0pOworICAgICAgICAgICAgaWYgKENBU0VbaSsyXSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KGxhdGluSmFtbywgQ0FTRVtpXSwgamFtbywgamFtb0xhdGluKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlcmUgcm91bmQtdHJpcCBpcyBleHBlY3RlZCB0byBmYWlsCisgICAgICAgICAgICAgICAgZXhwZWN0KGxhdGluSmFtbywgQ0FTRVtpXSwgamFtbyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGphbW9MYXRpbiwgamFtbywgQ0FTRVtpKzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZXNlIGFyZSBwcm9ibGVtcyB0dXJuZWQgdXAgYnkgdGhlIEhhbmd1bC1KYW1vO0phbW8tTGF0aW4KKyAgICAgKiByb3VuZCB0cmlwIHRlc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFJvdW5kVHJpcCgpIHsKKyAgICAgICAgU3RyaW5nIEhBTkdVTFtdID0geyAiXHVBQzAzXHVDMkY4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHVDNTQ0XHVDNUI0In07CisgICAgICAgIAorICAgICAgICBUcmFuc2xpdGVyYXRvciBsYXRpbkphbW8gPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTGF0aW4tSmFtbyIpOworICAgICAgICBUcmFuc2xpdGVyYXRvciBqYW1vTGF0aW4gPSBsYXRpbkphbW8uZ2V0SW52ZXJzZSgpOworICAgICAgICBUcmFuc2xpdGVyYXRvciBqYW1vSGFuZ3VsID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIk5GQyIpOworICAgICAgICBUcmFuc2xpdGVyYXRvciBoYW5ndWxKYW1vID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIk5GRCIpOworCisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxIQU5HVUwubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBoYW5ndWwgPSBIQU5HVUxbaV07CisgICAgICAgICAgICBTdHJpbmcgamFtbyA9IGhhbmd1bEphbW8udHJhbnNsaXRlcmF0ZShoYW5ndWwpOworICAgICAgICAgICAgU3RyaW5nIGxhdGluID0gamFtb0xhdGluLnRyYW5zbGl0ZXJhdGUoamFtbyk7CisgICAgICAgICAgICBTdHJpbmcgamFtbzIgPSBsYXRpbkphbW8udHJhbnNsaXRlcmF0ZShsYXRpbik7CisgICAgICAgICAgICBTdHJpbmcgaGFuZ3VsMiA9IGphbW9IYW5ndWwudHJhbnNsaXRlcmF0ZShqYW1vMik7CisgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgYnVmLmFwcGVuZChoYW5ndWwgKyAiID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgICBqYW1vVG9OYW1lKGphbW8pICsgIiA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgbGF0aW4gKyAiID0+ICIgKyBqYW1vVG9OYW1lKGphbW8yKQorICAgICAgICAgICAgICAgICAgICAgICArICIgPT4gIiArIGhhbmd1bDIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmICghaGFuZ3VsLmVxdWFscyhoYW5ndWwyKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgVXRpbGl0eS5lc2NhcGUoYnVmLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nbG4oVXRpbGl0eS5lc2NhcGUoYnVmLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdmFyaW91cyBzdGVwLWF0LWEtdGltZSB0cmFuc2Zvcm1hdGlvbiBvZiBoYW5ndWwgdG8gamFtbyB0bworICAgICAqIGxhdGluIGFuZCBiYWNrLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQaWVjZW1lYWwoKSB7CisgICAgICAgIFN0cmluZyBoYW5ndWwgPSAiXHVCQzBGIjsKKyAgICAgICAgU3RyaW5nIGphbW8gPSBuYW1lVG9KYW1vKCIoTWkpKEkpKENmKSIpOworICAgICAgICBTdHJpbmcgbGF0aW4gPSAibWljIjsKKworICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gbnVsbDsKKworICAgICAgICB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIk5GRCIpOyAvLyB3YXMgSGFuZ3VsLUphbW8KKyAgICAgICAgZXhwZWN0KHQsIGhhbmd1bCwgamFtbyk7CisKKyAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJORkMiKTsgLy8gd2FzIEphbW8tSGFuZ3VsCisgICAgICAgIGV4cGVjdCh0LCBqYW1vLCBoYW5ndWwpOworCisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTGF0aW4tSmFtbyIpOworICAgICAgICBleHBlY3QodCwgbGF0aW4sIGphbW8pOworCisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSmFtby1MYXRpbiIpOworICAgICAgICBleHBlY3QodCwgamFtbywgbGF0aW4pOworCisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSGFuZ3VsLUxhdGluIik7CisgICAgICAgIGV4cGVjdCh0LCBoYW5ndWwsIGxhdGluKTsKKworICAgICAgICB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkxhdGluLUhhbmd1bCIpOworICAgICAgICBleHBlY3QodCwgbGF0aW4sIGhhbmd1bCk7CisKKyAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJIYW5ndWwtTGF0aW47IExhdGluLUphbW8iKTsKKyAgICAgICAgZXhwZWN0KHQsIGhhbmd1bCwgamFtbyk7CisKKyAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJKYW1vLUxhdGluOyBMYXRpbi1IYW5ndWwiKTsKKyAgICAgICAgZXhwZWN0KHQsIGphbW8sIGhhbmd1bCk7CisKKyAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJIYW5ndWwtTGF0aW47IExhdGluLUhhbmd1bCIpOworICAgICAgICBleHBlY3QodCwgaGFuZ3VsLCBoYW5ndWwpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RSZWFsVGV4dCgpIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgbGF0aW5KYW1vID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkxhdGluLUphbW8iKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgamFtb0xhdGluID0gbGF0aW5KYW1vLmdldEludmVyc2UoKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgamFtb0hhbmd1bCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJORkMiKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgaGFuZ3VsSmFtbyA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJORkQiKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgcnQgPSBuZXcgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihuZXcgVHJhbnNsaXRlcmF0b3JbXSB7CisgICAgICAgICAgICBoYW5ndWxKYW1vLCBqYW1vTGF0aW4sIGxhdGluSmFtbywgamFtb0hhbmd1bCB9KTsKKworICAgICAgICBpbnQgcG9zID0gMDsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgaW50IHRvdGFsID0gMDsKKyAgICAgICAgaW50IGVycm9ycyA9IDA7CisgICAgICAgIHdoaWxlIChwb3MgPCBXSEFUX0lTX1VOSUNPREUubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGludCBzcGFjZSA9IFdIQVRfSVNfVU5JQ09ERS5pbmRleE9mKCcgJywgcG9zKzEpOworICAgICAgICAgICAgaWYgKHNwYWNlIDwgMCkgeworICAgICAgICAgICAgICAgIHNwYWNlID0gV0hBVF9JU19VTklDT0RFLmxlbmd0aCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvcyA8IHNwYWNlKSB7CisgICAgICAgICAgICAgICAgKyt0b3RhbDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaGFuZ3VsID0gV0hBVF9JU19VTklDT0RFLnN1YnN0cmluZyhwb3MsIHNwYWNlKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaGFuZ3VsWCA9IHJ0LnRyYW5zbGl0ZXJhdGUoaGFuZ3VsKTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhbmd1bC5lcXVhbHMoaGFuZ3VsWCkpIHsKKyAgICAgICAgICAgICAgICAgICAgKytlcnJvcnM7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBqYW1vID0gaGFuZ3VsSmFtby50cmFuc2xpdGVyYXRlKGhhbmd1bCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsYXRpbiA9IGphbW9MYXRpbi50cmFuc2xpdGVyYXRlKGphbW8pOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgamFtbzIgPSBsYXRpbkphbW8udHJhbnNsaXRlcmF0ZShsYXRpbik7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBoYW5ndWwyID0gamFtb0hhbmd1bC50cmFuc2xpdGVyYXRlKGphbW8yKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmd1bC5lcXVhbHMoaGFuZ3VsMikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJGQUlMIChDb21wb3VuZCB0cmFuc2xpdGVyYXRvciBwcm9ibGVtKTogIik7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGhhbmd1bCArICIgPT4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphbW9Ub05hbWUoamFtbykgKyAiID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRpbiArICIgPT4gIiArIGphbW9Ub05hbWUoamFtbzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiA9PiAiICsgaGFuZ3VsMiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7IGJ1dCAiICsgaGFuZ3VsICsgIiA9Y3BkPT4gIiArIGphbW9Ub05hbWUoaGFuZ3VsWCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKFV0aWxpdHkuZXNjYXBlKGJ1Zi50b1N0cmluZygpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoamFtby5lcXVhbHMoamFtbzIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiRkFJTCAoSmFtbzw+SGFuZ3VsIHByb2JsZW0pOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFuZ3VsMi5lcXVhbHMoaGFuZ3VsWCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCIoV2VpcmQ6ICIgKyBoYW5ndWxYICsgIiAhPSAiICsgaGFuZ3VsMiArICIpIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGhhbmd1bCArICIgPT4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphbW9Ub05hbWUoamFtbykgKyAiID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRpbiArICIgPT4gIiArIGphbW9Ub05hbWUoamFtbzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiA9PiAiICsgaGFuZ3VsMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oVXRpbGl0eS5lc2NhcGUoYnVmLnRvU3RyaW5nKCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJGQUlMOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFuZ3VsMi5lcXVhbHMoaGFuZ3VsWCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCIoV2VpcmQ6ICIgKyBoYW5ndWxYICsgIiAhPSAiICsgaGFuZ3VsMiArICIpIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgSGFuZ3VsLUphbW8gY29udmVyc2lvbiBpcyBub3QgdXN1YWxseSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZyBoZXJlLCBzbyB3ZSBoaWRlIGl0IGZyb20gZGlzcGxheS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuY29tbWVudCBsaW5lcyB0byBzZWUgdGhlIEhhbmd1bC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoLy9oYW5ndWwgKyAiID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYW1vVG9OYW1lKGphbW8pICsgIiA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aW4gKyAiID0+ICIgKyBqYW1vVG9OYW1lKGphbW8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLysgIiA9PiAiICsgaGFuZ3VsMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oVXRpbGl0eS5lc2NhcGUoYnVmLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcyA9IHNwYWNlKzE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVycm9ycyAhPSAwKSB7CisgICAgICAgICAgICBlcnJsbigiVGVzdCB3b3JkIGZhaWx1cmVzOiAiICsgZXJyb3JzICsgIiBvdXQgb2YgIiArIHRvdGFsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ2xuKCJBbGwgIiArIHRvdGFsICsgIiB0ZXN0IHdvcmRzIHBhc3NlZCIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGVzdCB0ZXh0IHRha2VuIGZyb20gdGhlIFVuaWNvZGUgd2ViIHNpdGUKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFdIQVRfSVNfVU5JQ09ERSA9CisKKyAgICAgICAgIlx1YzcyMFx1YjJjOFx1Y2Y1NFx1YjRkY1x1YzVkMCBcdWIzMDBcdWQ1NzQgPyAiICsKKworICAgICAgICAiXHVjNWI0XHViNWE0IFx1ZDUwY1x1YjdhYlx1ZDNmYywgXHVjNWI0XHViNWE0ICIgKworICAgICAgICAiXHVkNTA0XHViODVjXHVhZGY4XHViN2E4LCBcdWM1YjRcdWI1YTQgXHVjNWI4XHVjNWI0XHVjNWQwXHViM2M0ICIgKworICAgICAgICAiXHVjMGMxXHVhZDAwXHVjNWM2XHVjNzc0IFx1YzcyMFx1YjJjOFx1Y2Y1NFx1YjRkY1x1YjI5NCBcdWJhYThcdWI0ZTAgIiArCisgICAgICAgICJcdWJiMzhcdWM3OTBcdWM1ZDAgXHViMzAwXHVkNTc0IFx1YWNlMFx1YzcyMCBcdWJjODhcdWQ2MzhcdWI5N2MgIiArCisgICAgICAgICJcdWM4MWNcdWFjZjVcdWQ1NjlcdWIyYzhcdWIyZTQuICIgKworICAgICAgICAKKyAgICAgICAgIlx1YWUzMFx1YmNmOFx1YzgwMVx1YzczY1x1Yjg1YyBcdWNlZjRcdWQ0ZThcdWQxMzBcdWIyOTQgIiArCisgICAgICAgICJcdWMyMmJcdWM3OTBcdWI5Y2MgXHVjYzk4XHViOWFjXHVkNTY5XHViMmM4XHViMmU0LiBcdWFlMDBcdWM3OTBcdWIwOTggIiArCisgICAgICAgICJcdWIyZTRcdWI5NzggXHViYjM4XHVjNzkwXHVjNWQwXHViM2M0IFx1YzIyYlx1Yzc5MFx1Yjk3YyAiICsKKyAgICAgICAgIlx1YzljMFx1YzgxNVx1ZDU1OFx1YzVlYyAiICsKKyAgICAgICAgIlx1YzgwMFx1YzdhNVx1ZDU2OVx1YjJjOFx1YjJlNC4gXHVjNzIwXHViMmM4XHVjZjU0XHViNGRjXHVhYzAwICIgKworICAgICAgICAiXHVhYzFjXHViYzFjXHViNDE4XHVhZTMwIFx1YzgwNFx1YzVkMFx1YjI5NCBcdWM3NzRcdWI3ZWNcdWQ1NWMgIiArCisgICAgICAgICJcdWMyMmJcdWM3OTBcdWI5N2MgXHVjOWMwXHVjODE1XHVkNTU4XHVhZTMwIFx1YzcwNFx1ZDU3NCBcdWMyMThcdWJjMzEgIiArCisgICAgICAgICJcdWFjMDBcdWM5YzBcdWM3NTggXHViMmU0XHViOTc4IFx1YWUzMFx1ZDYzOFx1ZDY1NCAiICsKKyAgICAgICAgIlx1YzJkY1x1YzJhNFx1ZDE1Y1x1Yzc0NCAiICsKKyAgICAgICAgIlx1YzBhY1x1YzZhOVx1ZDU4OFx1YzJiNVx1YjJjOFx1YjJlNC4gXHViMmU4XHVjNzdjIFx1YWUzMFx1ZDYzOFx1ZDY1NCAiICsKKyAgICAgICAgIlx1YmMyOVx1YmM5NVx1YzczY1x1Yjg1Y1x1YjI5NCBcdWJhYThcdWI0ZTAgXHViYjM4XHVjNzkwXHViOTdjICIgKworICAgICAgICAiXHVkM2VjXHVkNTY4XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM1YzhcdWMyYjVcdWIyYzhcdWIyZTQuIFx1YzYwOFx1Yjk3YyAiICsKKyAgICAgICAgIlx1YjRlNFx1YzViNCBcdWM3MjBcdWI3ZmQgXHVjNWYwXHVkNTY5XHVjNWQwXHVjMTFjXHViOWNjICIgKworICAgICAgICAiXHViY2Y0XHViMzU0XHViNzdjXHViM2M0IFx1YmFhOFx1YjRlMCBcdWFjMDEgXHViMDk4XHViNzdjXHViY2M0ICIgKworICAgICAgICAiXHVjNWI4XHVjNWI0XHViOTdjIFx1Y2M5OFx1YjlhY1x1ZDU1OFx1YjgyNFx1YmE3NCBcdWM1ZWNcdWI3ZWMgIiArCisgICAgICAgICJcdWFjMWNcdWM3NTggXHViMmU0XHViOTc4IFx1YWUzMFx1ZDYzOFx1ZDY1NCBcdWJjMjlcdWJjOTVcdWM3NzQgIiArCisgICAgICAgICJcdWQ1NDRcdWM2OTRcdWQ1NjlcdWIyYzhcdWIyZTQuIFx1YzYwMVx1YzViNFx1YzY0MCBcdWFjMTlcdWM3NDAgIiArCisgICAgICAgICJcdWIyZThcdWM3N2MgXHVjNWI4XHVjNWI0XHVjNzU4IFx1YWNiZFx1YzZiMFx1YjNjNCAiICsKKyAgICAgICAgIlx1YWNmNVx1ZDFiNVx1YzgwMVx1YzczY1x1Yjg1YyBcdWMwYWNcdWM2YTlcdWI0MThcdWIyOTQgXHViYWE4XHViNGUwICIgKworICAgICAgICAiXHVhZTAwXHVjNzkwLCBcdWJiMzhcdWM3YTUgXHViZDgwXHVkNjM4IFx1YmMwZiAiICsKKyAgICAgICAgIlx1ZDE0Y1x1ZDA2Y1x1YjJjOFx1Y2VlYyBcdWFlMzBcdWQ2MzhcdWM1ZDAgXHViOWRlXHViMjk0IFx1YjJlOFx1Yzc3YyAiICsKKyAgICAgICAgIlx1YWUzMFx1ZDYzOFx1ZDY1NCBcdWJjMjlcdWJjOTVcdWM3NDQgXHVhYzE2XHVhY2UwIFx1Yzc4OFx1YzljMCAiICsKKyAgICAgICAgIlx1YmFiYlx1ZDU1OFx1YzYwMFx1YzJiNVx1YjJjOFx1YjJlNC4gIiArCisgICAgICAgIAorICAgICAgICAiXHVjNzc0XHViN2VjXHVkNTVjIFx1YWUzMFx1ZDYzOFx1ZDY1NCBcdWMyZGNcdWMyYTRcdWQxNWNcdWM3NDAgIiArCisgICAgICAgICJcdWI2MTBcdWQ1NWMgXHViMmU0XHViOTc4IFx1YWUzMFx1ZDYzOFx1ZDY1NCBcdWMyZGNcdWMyYTRcdWQxNWNcdWFjZmMgIiArCisgICAgICAgICJcdWNkYTlcdWIzY2NcdWQ1NjlcdWIyYzhcdWIyZTQuIFx1Yzk4OSBcdWI0NTAgXHVhYzAwXHVjOWMwICIgKworICAgICAgICAiXHVhZTMwXHVkNjM4XHVkNjU0IFx1YmMyOVx1YmM5NVx1Yzc3NCBcdWI0NTAgXHVhYzFjXHVjNzU4IFx1YjJlNFx1Yjk3OCAiICsKKyAgICAgICAgIlx1YmIzOFx1Yzc5MFx1YzVkMCBcdWIzMDBcdWQ1NzQgXHVhYzE5XHVjNzQwIFx1YmM4OFx1ZDYzOFx1Yjk3YyAiICsKKyAgICAgICAgIlx1YzBhY1x1YzZhOVx1ZDU1OFx1YWM3MFx1YjA5OCBcdWFjMTlcdWM3NDAgXHViYjM4XHVjNzkwXHVjNWQwICIgKworICAgICAgICAiXHViMzAwXHVkNTc0IFx1YjJlNFx1Yjk3OCBcdWJjODhcdWQ2MzhcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTYwIFx1YzIxOCAiICsKKyAgICAgICAgIlx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNC4gXHVjOGZjXHVjNWI0XHVjOWM0IFx1YmFhOFx1YjRlMCAiICsKKyAgICAgICAgIlx1Y2VmNFx1ZDRlOFx1ZDEzMChcdWQyYjlcdWQ3ODggXHVjMTFjXHViYzg0KVx1YjI5NCBcdWMxMWNcdWI4NWMgIiArCisgICAgICAgICJcdWIyZTRcdWI5NzggXHVjNWVjXHViN2VjIFx1YWMwMFx1YzljMCBcdWFlMzBcdWQ2MzhcdWQ2NTQgIiArCisgICAgICAgICJcdWJjMjlcdWJjOTVcdWM3NDQgXHVjOWMwXHVjNmQwXHVkNTc0XHVjNTdjICIgKworICAgICAgICAiXHVkNTY5XHViMmM4XHViMmU0LiBcdWFkZjhcdWI3ZWNcdWIwOTgsIFx1YjM3MFx1Yzc3NFx1ZDEzMFx1Yjk3YyAiICsKKyAgICAgICAgIlx1YzExY1x1Yjg1YyBcdWIyZTRcdWI5NzggXHVhZTMwXHVkNjM4XHVkNjU0IFx1YmMyOVx1YmM5NVx1Yzc3NFx1YjA5OCAiICsKKyAgICAgICAgIlx1ZDUwY1x1YjdhYlx1ZDNmYyBcdWFjMDRcdWM1ZDAgXHVjODA0XHViMmVjXHVkNTYwIFx1YjU0Y1x1YjljOFx1YjJlNCAiICsKKyAgICAgICAgIlx1YWRmOCBcdWIzNzBcdWM3NzRcdWQxMzBcdWIyOTQgXHVkNTZkXHVjMGMxIFx1YzE5MFx1YzBjMVx1Yzc1OCAiICsKKyAgICAgICAgIlx1YzcwNFx1ZDVkOFx1Yzc0NCBcdWFjYWFcdWFjOGMgXHViNDI5XHViMmM4XHViMmU0LiAiICsKKyAgICAgICAgCisgICAgICAgICJcdWM3MjBcdWIyYzhcdWNmNTRcdWI0ZGNcdWI4NWMgXHViYWE4XHViNGUwIFx1YWM4M1x1Yzc0NCAiICsKKyAgICAgICAgIlx1ZDU3NFx1YWNiMFx1ZDU2MCBcdWMyMTggXHVjNzg4XHVjMmI1XHViMmM4XHViMmU0ISAiICsKKyAgICAgICAgIlx1YzcyMFx1YjJjOFx1Y2Y1NFx1YjRkY1x1YjI5NCBcdWMwYWNcdWM2YTkgXHVjOTExXHVjNzc4ICIgKworICAgICAgICAiXHVkNTBjXHViN2FiXHVkM2ZjLCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTgsIFx1YzViOFx1YzViNFx1YzVkMCAiICsKKyAgICAgICAgIlx1YWQwMFx1YWNjNFx1YzVjNlx1Yzc3NCBcdWJiMzhcdWM3OTBcdWI5YzhcdWIyZTQgXHVhY2UwXHVjNzIwXHVkNTVjICIgKworICAgICAgICAiXHVjMjJiXHVjNzkwXHViOTdjICIgKworICAgICAgICAiXHVjODFjXHVhY2Y1XHVkNTY5XHViMmM4XHViMmU0LiBcdWM3MjBcdWIyYzhcdWNmNTRcdWI0ZGMgIiArCisgICAgICAgICJcdWQ0NWNcdWM5MDBcdWM3NDAgIiArIC8vICJBcHBsZSwgSFAsIElCTSwgSnVzdFN5c3RlbSwgTWljcm9zb2Z0LCBPcmFjbGUsIFNBUCwgIiArCisgICAgICAgIC8vICJTdW4sIFN5YmFzZSwgVW5pc3lzICIgKyAKKyAgICAgICAgIlx1YmMwZiBcdWFlMzBcdWQwYzAgXHVjNWVjXHViN2VjICIgKworICAgICAgICAiXHVkNjhjXHVjMGFjXHVjNjQwIFx1YWMxOVx1Yzc0MCBcdWM1YzVcdWFjYzQgIiArCisgICAgICAgICJcdWMxMjBcdWI0NTBcdWM4ZmNcdWM3OTBcdWM1ZDAgXHVjNzU4XHVkNTc0ICIgKworICAgICAgICAiXHVjYzQ0XHVkMGRkXHViNDE4XHVjNWM4XHVjMmI1XHViMmM4XHViMmU0LiBcdWM3MjBcdWIyYzhcdWNmNTRcdWI0ZGNcdWIyOTQgIiArCisgICAgICAgIC8vICJYTUwsIEphdmEsIEVDTUFTY3JpcHQoSmF2YVNjcmlwdCksIExEQVAsIENPUkJBIDMuMCwgV01MICIgKworICAgICAgICAiXHViNGYxXHVhY2ZjICIgKworICAgICAgICAiXHVhYzE5XHVjNzc0IFx1ZDYwNFx1YzdhYyBcdWIxMTBcdWI5YWMgXHVjMGFjXHVjNmE5XHViNDE4XHViMjk0ICIgKworICAgICAgICAiXHVkNDVjXHVjOTAwXHVjNWQwXHVjMTFjIFx1ZDU0NFx1YzY5NFx1ZDU1OFx1YmE3MCBcdWM3NzRcdWIyOTQgIiArIC8vSVNPL0lFQyAiICsKKyAgICAgICAgIjEwNjQ2XHVjNzQ0IFx1YWQ2Y1x1ZDYwNFx1ZDU1OFx1YjI5NCBcdWFjZjVcdWMyZGRcdWM4MDFcdWM3NzggIiArCisgICAgICAgICJcdWJjMjlcdWJjOTVcdWM3ODVcdWIyYzhcdWIyZTQuIFx1Yzc3NFx1YjI5NCBcdWI5Y2VcdWM3NDAgXHVjNmI0XHVjNjAxICIgKworICAgICAgICAiXHVjY2I0XHVjODFjLCBcdWM2OTRcdWM5OTggXHVjMGFjXHVjNmE5XHViNDE4XHViMjk0IFx1YmFhOFx1YjRlMCAiICsKKyAgICAgICAgIlx1YmUwY1x1Yjc3Y1x1YzZiMFx1YzgwMCBcdWJjMGYgXHVhZTMwXHVkMGMwIFx1YjljZVx1Yzc0MCAiICsKKyAgICAgICAgIlx1YzgxY1x1ZDQ4OFx1YzVkMFx1YzExYyAiICsKKyAgICAgICAgIlx1YzljMFx1YzZkMFx1YjQyOVx1YjJjOFx1YjJlNC4gXHVjNzIwXHViMmM4XHVjZjU0XHViNGRjICIgKworICAgICAgICAiXHVkNDVjXHVjOTAwXHVjNzU4IFx1YmQ4MFx1YzBjMVx1YWNmYyBcdWM3NzRcdWI5N2MgIiArCisgICAgICAgICJcdWM5YzBcdWM2ZDBcdWQ1NThcdWIyOTQgXHViM2M0XHVhZDZjXHVjNzU4IFx1YWMwMFx1YzZhOVx1YzEzMVx1Yzc0MCAiICsKKyAgICAgICAgIlx1Y2Q1Y1x1YWRmYyBcdWM4MDQgXHVjMTM4XHVhY2M0XHVjNWQwIFx1YmQ4OFx1YWNlMCBcdWM3ODhcdWIyOTQgIiArCisgICAgICAgICJcdWFlMzBcdWMyMjAgXHVhY2JkXHVkNWE1XHVjNWQwXHVjMTFjIFx1YWMwMFx1YzdhNSBcdWM5MTFcdWM2OTRcdWQ1NWMgIiArCisgICAgICAgICJcdWJkODBcdWJkODRcdWM3NDQgXHVjYzI4XHVjOWMwXHVkNTU4XHVhY2UwIFx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNC4gIiArCisgICAgICAgIAorICAgICAgICAiXHVjNzIwXHViMmM4XHVjZjU0XHViNGRjXHViOTdjICIgKworICAgICAgICAiXHVkMDc0XHViNzdjXHVjNzc0XHVjNWI4XHVkMmI4LVx1YzExY1x1YmM4NCBcdWI2MTBcdWIyOTQgIiArCisgICAgICAgICJcdWIyZTRcdWM5MTEtXHVjNWYwXHVhY2IwIFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWFjZmMgIiArCisgICAgICAgICJcdWM2ZjkgXHVjMGFjXHVjNzc0XHVkMmI4XHVjNWQwIFx1ZDFiNVx1ZDU2OVx1ZDU1OFx1YmE3NCAiICsKKyAgICAgICAgIlx1YjgwOFx1YWM3MFx1YzJkYyBcdWJiMzhcdWM3OTAgXHVjMTM4XHVkMmI4IFx1YzBhY1x1YzZhOVx1YzVkMCAiICsKKyAgICAgICAgIlx1Yzc4OFx1YzViNFx1YzExYyBcdWMwYzFcdWIyZjlcdWQ1NWMgXHViZTQ0XHVjNmE5IFx1YzgwOFx1YWMxMCAiICsKKyAgICAgICAgIlx1ZDZhOFx1YWNmY1x1YWMwMCAiICsKKyAgICAgICAgIlx1YjA5OFx1ZDBjMFx1YjBhOVx1YjJjOFx1YjJlNC4gXHVjNzIwXHViMmM4XHVjZjU0XHViNGRjXHViOTdjICIgKworICAgICAgICAiXHVkMWI1XHVkNTc0IFx1YjlhY1x1YzVkNFx1YzljMFx1YjJjOFx1YzViNFx1YjljMSBcdWM1YzZcdWM3NzQgIiArCisgICAgICAgICJcdWIyZTRcdWM5MTEgXHVkNTBjXHViN2FiXHVkM2ZjLCBcdWM1YjhcdWM1YjQgXHViYzBmIFx1YWQ2ZFx1YWMwMCAiICsKKyAgICAgICAgIlx1YWMwNFx1YzVkMCBcdWIyZThcdWM3N2MgXHVjMThjXHVkNTA0XHVkMmI4XHVjNmU4XHVjNWI0ICIgKworICAgICAgICAiXHVkNTBjXHViN2FiXHVkM2ZjIFx1YjYxMFx1YjI5NCBcdWIyZThcdWM3N2MgXHVjNmY5ICIgKworICAgICAgICAiXHVjMGFjXHVjNzc0XHVkMmI4XHViOTdjIFx1YmFhOVx1ZDQ1Y1x1Yjg1YyBcdWMwYmNcdWM3NDQgXHVjMjE4ICIgKworICAgICAgICAiXHVjNzg4XHVjMmI1XHViMmM4XHViMmU0LiBcdWM3NzRcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTU4XHViYTc0ICIgKworICAgICAgICAiXHViMzcwXHVjNzc0XHVkMTMwXHViOTdjIFx1YzE5MFx1YzBjMSBcdWM1YzZcdWM3NzQgXHVjNWVjXHViN2VjICIgKworICAgICAgICAiXHVjMmRjXHVjMmE0XHVkMTVjXHVjNzQ0IFx1ZDFiNVx1ZDU3NCBcdWM4MDRcdWMxYTFcdWQ1NjAgXHVjMjE4ICIgKworICAgICAgICAiXHVjNzg4XHVjMmI1XHViMmM4XHViMmU0LiAiICsKKyAgICAgICAgCisgICAgICAgICJcdWM3MjBcdWIyYzhcdWNmNTRcdWI0ZGMgXHVjZjU4XHVjMThjXHVjMmRjXHVjNWM0XHVjNWQwIFx1YjMwMFx1ZDU3NCAiICsKKyAgICAgICAgIlx1YzcyMFx1YjJjOFx1Y2Y1NFx1YjRkYyBcdWNmNThcdWMxOGNcdWMyZGNcdWM1YzRcdWM3NDAgIiArCisgICAgICAgICJcdWJlNDRcdWM2MDFcdWI5YWMgXHVjODcwXHVjOWMxXHVjNzNjXHViODVjXHVjMTFjIFx1ZDYwNFx1YjMwMCAiICsKKyAgICAgICAgIlx1YzE4Y1x1ZDUwNFx1ZDJiOFx1YzZlOFx1YzViNCBcdWM4MWNcdWQ0ODhcdWFjZmMgIiArCisgICAgICAgICJcdWQ0NWNcdWM5MDBcdWM1ZDBcdWMxMWMgXHVkMTRkXHVjMmE0XHVkMmI4XHVjNzU4IFx1ZDQ1Y1x1ZDYwNFx1Yzc0NCAiICsKKyAgICAgICAgIlx1YzljMFx1YzgxNVx1ZDU1OFx1YjI5NCBcdWM3MjBcdWIyYzhcdWNmNTRcdWI0ZGMgXHVkNDVjXHVjOTAwXHVjNzU4ICIgKworICAgICAgICAiXHVjMGFjXHVjNmE5XHVjNzQ0IFx1YWMxY1x1YmMxY1x1ZDU1OFx1YWNlMCBcdWQ2NTVcdWM3YTVcdWQ1NThcdWJhNzAgIiArCisgICAgICAgICJcdWM3YTVcdWI4MjRcdWQ1NThcdWFlMzAgXHVjNzA0XHVkNTc0ICIgKworICAgICAgICAiXHVjMTM4XHVjNmNjXHVjODRjXHVjMmI1XHViMmM4XHViMmU0LiBcdWNmNThcdWMxOGNcdWMyZGNcdWM1YzQgIiArCisgICAgICAgICJcdWJhNjRcdWJjODRcdWMyN2RcdWM3NDAgXHVjZWY0XHVkNGU4XHVkMTMwXHVjNjQwIFx1YzgxNVx1YmNmNCAiICsKKyAgICAgICAgIlx1Y2M5OFx1YjlhYyBcdWMwYjBcdWM1YzVcdWM1ZDAgXHVjODg1XHVjMGFjXHVkNTU4XHVhY2UwIFx1Yzc4OFx1YjI5NCAiICsKKyAgICAgICAgIlx1YWQxMVx1YmM5NFx1YzcwNFx1ZDU1YyBcdWQ2OGNcdWMwYWMgXHViYzBmIFx1Yzg3MFx1YzljMVx1Yzc1OCAiICsKKyAgICAgICAgIlx1YmM5NFx1YzcwNFx1Yjk3YyAiICsKKyAgICAgICAgIlx1YjA5OFx1ZDBjMFx1YjBjNVx1YjJjOFx1YjJlNC4gXHVjZjU4XHVjMThjXHVjMmRjXHVjNWM0XHVjNzU4ICIgKworICAgICAgICAiXHVjN2FjXHVjODE1XHVjNzQwIFx1YzgwNFx1YzgwMVx1YzczY1x1Yjg1YyBcdWQ2OGNcdWJlNDRcdWM1ZDAgIiArCisgICAgICAgICJcdWM3NThcdWQ1NzQgXHVjZGE5XHViMmY5XHViNDI5XHViMmM4XHViMmU0LiBcdWM3MjBcdWIyYzhcdWNmNTRcdWI0ZGMgIiArCisgICAgICAgICJcdWNlZThcdWMxOGNcdWMyZGNcdWM1YzRcdWM1ZDBcdWMxMWNcdWM3NTggXHViYTY0XHViYzg0XHVjMjdkXHVjNzQwICIgKworICAgICAgICAiXHVjODA0IFx1YzEzOFx1YWNjNCBcdWM1YjRcdWIyOTAgXHVhY2YzXHVjNWQwXHVjMTFjXHViMDk4ICIgKworICAgICAgICAiXHVjNzIwXHViMmM4XHVjZjU0XHViNGRjIFx1ZDQ1Y1x1YzkwMFx1Yzc0NCBcdWM5YzBcdWM2ZDBcdWQ1NThcdWFjZTAgIiArCisgICAgICAgICJcdWFkZjggXHVkNjU1XHVjN2E1XHVhY2ZjIFx1YWQ2Y1x1ZDYwNFx1Yzc0NCAiICsKKyAgICAgICAgIlx1YzljMFx1YzZkMFx1ZDU1OFx1YWNlMFx1Yzc5MFx1ZDU1OFx1YjI5NCBcdWM4NzBcdWM5YzFcdWFjZmMgIiArCisgICAgICAgICJcdWFjMWNcdWM3NzhcdWM1ZDBcdWFjOGMgXHVhYzFjXHViYzI5XHViNDE4XHVjNWI0ICIgKworICAgICAgICAiXHVjNzg4XHVjMmI1XHViMmM4XHViMmU0LiAiICsKKyAgICAgICAgCisgICAgICAgICJcdWIzNTQgXHVjNzkwXHVjMTM4XHVkNTVjIFx1YjBiNFx1YzZhOVx1Yzc0MCBcdWM2YTlcdWM1YjRcdWM5ZDEsICIgKworICAgICAgICAiXHVjNjA4XHVjODFjIFx1YzcyMFx1YjJjOFx1Y2Y1NFx1YjRkYyBcdWMwYWNcdWM2YTkgXHVhYzAwXHViMmE1ICIgKworICAgICAgICAiXHVjODFjXHVkNDg4LCBcdWFlMzBcdWMyMjAgXHVjODE1XHViY2Y0IFx1YmMwZiBcdWFlMzBcdWQwYzAgIiArCisgICAgICAgICJcdWM3MjBcdWM2YTlcdWQ1NWMgXHVjODE1XHViY2Y0XHViOTdjICIgKworICAgICAgICAiXHVjYzM4XHVjODcwXHVkNTU4XHVjMmVkXHVjMmRjXHVjNjI0LiI7CisKKyAgICAvLyBUcmFuc2xpdGVyYXRvclRlc3Qgb3ZlcnJpZGUKKyAgICBib29sZWFuIGV4cGVjdEF1eChTdHJpbmcgdGFnLCBTdHJpbmcgc3VtbWFyeSwgYm9vbGVhbiBwYXNzLAorICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZFJlc3VsdCkgeworICAgICAgICByZXR1cm4gc3VwZXIuZXhwZWN0QXV4KHRhZywgamFtb1RvTmFtZShzdW1tYXJ5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MsIGphbW9Ub05hbWUoZXhwZWN0ZWRSZXN1bHQpKTsKKyAgICB9CisKKyAgICAvLyBVVElMSVRJRVMKKworICAgIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgY291bGQgbW9yZSBlYXNpbHkgYmUgZG9uZSB3aXRoIGEgdHJhbnNsaXRlcmF0b3IhCisgICAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEpBTU9fTkFNRVMgPSB7CisgICAgICAgICIoR2kpIiwgIlx1MTEwMCIsCisgICAgICAgICIoR0dpKSIsICJcdTExMDEiLAorICAgICAgICAiKE5pKSIsICJcdTExMDIiLAorICAgICAgICAiKERpKSIsICJcdTExMDMiLAorICAgICAgICAiKEREKSIsICJcdTExMDQiLAorICAgICAgICAiKFIpIiwgIlx1MTEwNSIsCisgICAgICAgICIoTWkpIiwgIlx1MTEwNiIsCisgICAgICAgICIoQmkpIiwgIlx1MTEwNyIsCisgICAgICAgICIoQkIpIiwgIlx1MTEwOCIsCisgICAgICAgICIoU2kpIiwgIlx1MTEwOSIsCisgICAgICAgICIoU1NpKSIsICJcdTExMEEiLAorICAgICAgICAiKElFVU5HKSIsICJcdTExMEIiLAorICAgICAgICAiKEppKSIsICJcdTExMEMiLAorICAgICAgICAiKEpKKSIsICJcdTExMEQiLAorICAgICAgICAiKENpKSIsICJcdTExMEUiLAorICAgICAgICAiKEtpKSIsICJcdTExMEYiLAorICAgICAgICAiKFRpKSIsICJcdTExMTAiLAorICAgICAgICAiKFBpKSIsICJcdTExMTEiLAorICAgICAgICAiKEhpKSIsICJcdTExMTIiLAorICAgICAgICAKKyAgICAgICAgIihBKSIsICJcdTExNjEiLAorICAgICAgICAiKEFFKSIsICJcdTExNjIiLAorICAgICAgICAiKFlBKSIsICJcdTExNjMiLAorICAgICAgICAiKFlBRSkiLCAiXHUxMTY0IiwKKyAgICAgICAgIihFTykiLCAiXHUxMTY1IiwKKyAgICAgICAgIihFKSIsICJcdTExNjYiLAorICAgICAgICAiKFlFTykiLCAiXHUxMTY3IiwKKyAgICAgICAgIihZRSkiLCAiXHUxMTY4IiwKKyAgICAgICAgIihPKSIsICJcdTExNjkiLAorICAgICAgICAiKFdBKSIsICJcdTExNkEiLAorICAgICAgICAiKFdBRSkiLCAiXHUxMTZCIiwKKyAgICAgICAgIihPRSkiLCAiXHUxMTZDIiwKKyAgICAgICAgIihZTykiLCAiXHUxMTZEIiwKKyAgICAgICAgIihVKSIsICJcdTExNkUiLAorICAgICAgICAiKFdFTykiLCAiXHUxMTZGIiwKKyAgICAgICAgIihXRSkiLCAiXHUxMTcwIiwKKyAgICAgICAgIihXSSkiLCAiXHUxMTcxIiwKKyAgICAgICAgIihZVSkiLCAiXHUxMTcyIiwKKyAgICAgICAgIihFVSkiLCAiXHUxMTczIiwKKyAgICAgICAgIihZSSkiLCAiXHUxMTc0IiwKKyAgICAgICAgIihJKSIsICJcdTExNzUiLAorCisgICAgICAgICIoR2YpIiwgIlx1MTFBOCIsCisgICAgICAgICIoR0dmKSIsICJcdTExQTkiLAorICAgICAgICAiKEdTKSIsICJcdTExQUEiLAorICAgICAgICAiKE5mKSIsICJcdTExQUIiLAorICAgICAgICAiKE5KKSIsICJcdTExQUMiLAorICAgICAgICAiKE5IKSIsICJcdTExQUQiLAorICAgICAgICAiKERmKSIsICJcdTExQUUiLAorICAgICAgICAiKEwpIiwgIlx1MTFBRiIsCisgICAgICAgICIoTEcpIiwgIlx1MTFCMCIsCisgICAgICAgICIoTE0pIiwgIlx1MTFCMSIsCisgICAgICAgICIoTEIpIiwgIlx1MTFCMiIsCisgICAgICAgICIoTFMpIiwgIlx1MTFCMyIsCisgICAgICAgICIoTFQpIiwgIlx1MTFCNCIsCisgICAgICAgICIoTFApIiwgIlx1MTFCNSIsCisgICAgICAgICIoTEgpIiwgIlx1MTFCNiIsCisgICAgICAgICIoTWYpIiwgIlx1MTFCNyIsCisgICAgICAgICIoQmYpIiwgIlx1MTFCOCIsCisgICAgICAgICIoQlMpIiwgIlx1MTFCOSIsCisgICAgICAgICIoU2YpIiwgIlx1MTFCQSIsCisgICAgICAgICIoU1NmKSIsICJcdTExQkIiLAorICAgICAgICAiKE5HKSIsICJcdTExQkMiLAorICAgICAgICAiKEpmKSIsICJcdTExQkQiLAorICAgICAgICAiKENmKSIsICJcdTExQkUiLAorICAgICAgICAiKEtmKSIsICJcdTExQkYiLAorICAgICAgICAiKFRmKSIsICJcdTExQzAiLAorICAgICAgICAiKFBmKSIsICJcdTExQzEiLAorICAgICAgICAiKEhmKSIsICJcdTExQzIiLAorICAgIH07CisKKyAgICBzdGF0aWMgSGFzaHRhYmxlIEpBTU9fVE9fTkFNRTsKKyAgICBzdGF0aWMgSGFzaHRhYmxlIE5BTUVfVE9fSkFNTzsKKworICAgIHN0YXRpYyB7CisgICAgICAgIEpBTU9fVE9fTkFNRSA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgTkFNRV9UT19KQU1PID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8SkFNT19OQU1FUy5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgIEpBTU9fVE9fTkFNRS5wdXQoSkFNT19OQU1FU1tpKzFdLCBKQU1PX05BTUVTW2ldKTsKKyAgICAgICAgICAgIE5BTUVfVE9fSkFNTy5wdXQoSkFNT19OQU1FU1tpXSwgSkFNT19OQU1FU1tpKzFdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgc2hvcnQgbmFtZXMgdG8gYWN0dWFsIGphbW8uICBFLmcuLCAieChMRyl5IiByZXR1cm5zCisgICAgICogInhcdTExQjB5Ii4gIFNlZSBKQU1PX05BTUVTIGZvciB0YWJsZSBvZiBuYW1lcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgU3RyaW5nIG5hbWVUb0phbW8oU3RyaW5nIGlucHV0KSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxpbnB1dC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBpbnB1dC5jaGFyQXQoaSk7CisgICAgICAgICAgICBpZiAoYyA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICBpbnQgaiA9IGlucHV0LmluZGV4T2YoJyknLCBpKzEpOworICAgICAgICAgICAgICAgIGlmICgoai1pKSA+PSAyICYmIChqLWkpIDw9IDYpIHsgLy8gIihBKSIsICIoSUVVTkcpIgorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgamFtbyA9IChTdHJpbmcpIE5BTUVfVE9fSkFNTy5nZXQoaW5wdXQuc3Vic3RyaW5nKGksIGorMSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoamFtbyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGphbW8pOworICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGo7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgamFtbyB0byBzaG9ydCBuYW1lcy4gIEUuZy4sICJ4XHUxMUIweSIgcmV0dXJucworICAgICAqICJ4KExHKXkiLiAgU2VlIEpBTU9fTkFNRVMgZm9yIHRhYmxlIG9mIG5hbWVzLgorICAgICAqLworICAgIHN0YXRpYyBTdHJpbmcgamFtb1RvTmFtZShTdHJpbmcgaW5wdXQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGlucHV0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IGlucHV0LmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChjID49IDB4MTEwMCAmJiBjIDw9IDB4MTFDMikgeworICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgSkFNT19UT19OQU1FLmdldChpbnB1dC5zdWJzdHJpbmcoaSwgaSsxKSk7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKG5hbWUpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWYuYXBwZW5kKGMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvUmVwbGFjZWFibGVUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvUmVwbGFjZWFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWI3MTQyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9SZXBsYWNlYWJsZVRlc3QuamF2YQpAQCAtMCwwICsxLDE5MCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9SZXBsYWNlYWJsZVRlc3QuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzExLzIyIDE3OjQ4OjAwICQKKyAqICRSZXZpc2lvbjogMS4xNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC50cmFuc2xpdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworCisvKioKKyAqIEB0ZXN0CisgKiBAc3VtbWFyeSBSb3VuZCB0cmlwIHRlc3Qgb2YgVHJhbnNsaXRlcmF0b3IKKyAqLworcHVibGljIGNsYXNzIFJlcGxhY2VhYmxlVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gTEFURVJfVEhBTl8yXzEgPSB0cnVlOworCQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgUmVwbGFjZWFibGVUZXN0KCkucnVuKGFyZ3MpOworICAgIH0KKyAgCisgICAgcHVibGljIHZvaWQgVGVzdCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgUGFyc2VFeGNlcHRpb24geworICAgICAgICBjaGVjaygiTG93ZXIiLCAiQUJDRCIsICIxMjM0Iik7CisgICAgICAgIGNoZWNrKCJVcHBlciIsICJhYmNkXHUwMERGIiwgIjEyMzQ1NSIpOyAvLyBtdXN0IG1hcCAwMERGIHRvIFNTCisgICAgICAgIGNoZWNrKCJUaXRsZSIsICJhQkNEIiwgIjEyMzQiKTsKKyAgICAgICAgY2hlY2soIk5GQyIsICJBXHUwMzAwRVx1MDMwMCIsICIxMyIpOworICAgICAgICBjaGVjaygiTkZEIiwgIlx1MDBDMFx1MDBDOCIsICIxMTIyIik7CisgICAgICAgIGlmICghTEFURVJfVEhBTl8yXzEpIHJldHVybjsKKyAgICAgICAgY2hlY2soIiooeCkgPiBBICQxIEIiLCAid3h5IiwgIjExMjIzIik7CisgICAgICAgIGNoZWNrKCIqKHgpKHkpID4gQSAkMiBCICQxIEMgJDIgRCIsICJ3eHl6IiwgIjExMzMyMjMzNCIpOworICAgICAgICBjaGVjaygiKih4KSh5KSh6KSA+IEEgJDMgQiAkMiBDICQxIEQiLCAid3h5enUiLCAiMTE0NDMzMjI1Iik7CisJLy8gRGlzYWJsZWQgZm9yIDIuNC4gIFRPRE8gUmV2aXNpdCBpbiAyLjYgb3IgbGF0ZXIuCisgICAgICAgIC8vY2hlY2soIip4ID4gYSIsICJ4eXoiLCAiMjIzIik7IC8vIGV4cGVjdCAiMTIzIj8KKyAgICAgICAgLy9jaGVjaygiKnggPiBhIiwgInd4eSIsICIxMTMiKTsgLy8gZXhwZWN0ICIxMjMiPworICAgICAgICAvL2NoZWNrKCIqeCA+IGEiLCAiXHVGRkZGeHkiLCAiXzMzIik7IC8vIGV4cGVjdCAiXzIzIj8KKyAgICAgICAgLy9jaGVjaygiKih4KSA+IEEgJDEgQiIsICJcdUZGRkZ4eSIsICJfXzIyMyIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNoZWNrKFN0cmluZyB0cmFuc2xpdGVyYXRvck5hbWUsIFN0cmluZyB0ZXN0LCBTdHJpbmcgc2hvdWxkUHJvZHVjZVN0eWxlcykgeworICAgICAgICBUZXN0UmVwbGFjZWFibGUgdHIgPSBuZXcgVGVzdFJlcGxhY2VhYmxlKHRlc3QsIG51bGwpOworICAgICAgICBTdHJpbmcgb3JpZ2luYWwgPSB0ci50b1N0cmluZygpOworICAgICAgICAKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDsKKyAgICAgICAgaWYgKHRyYW5zbGl0ZXJhdG9yTmFtZS5zdGFydHNXaXRoKCIqIikpIHsKKyAgICAgICAgCXRyYW5zbGl0ZXJhdG9yTmFtZSA9IHRyYW5zbGl0ZXJhdG9yTmFtZS5zdWJzdHJpbmcoMSk7CisgICAgICAgIAl0ID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJ0ZXN0IiwgdHJhbnNsaXRlcmF0b3JOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgCXQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSh0cmFuc2xpdGVyYXRvck5hbWUpOworICAgICAgICB9CisgICAgICAgIHQudHJhbnNsaXRlcmF0ZSh0cik7CisgICAgICAgIFN0cmluZyBuZXdTdHlsZXMgPSB0ci5nZXRTdHlsZXMoKTsKKyAgICAgICAgaWYgKCFuZXdTdHlsZXMuZXF1YWxzKHNob3VsZFByb2R1Y2VTdHlsZXMpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCBTdHlsZXM6ICIgKyB0cmFuc2xpdGVyYXRvck5hbWUgKyAiICggIgorICAgICAgICAgICAgICAgICsgb3JpZ2luYWwgKyAiICkgPT4gIiArIHRyLnRvU3RyaW5nKCkgKyAiOyBzaG91bGQgYmUgeyIgKyBzaG91bGRQcm9kdWNlU3R5bGVzICsgIn0hIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiT0s6ICIgKyB0cmFuc2xpdGVyYXRvck5hbWUgKyAiICggIiArIG9yaWdpbmFsICsgIiApID0+ICIgKyB0ci50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKworICAgIC8qKgorICAgICAqIFRoaXMgaXMgYSB0ZXN0IGNsYXNzIHRoYXQgc2ltdWxhdGVzIHN0eWxlZCB0ZXh0LgorICAgICAqIEl0IGFzc29jaWF0ZXMgYSBzdHlsZSBudW1iZXIgKDAuLjY1NTM1KSB3aXRoIGVhY2ggY2hhcmFjdGVyLAorICAgICAqIGFuZCBtYWludGFpbnMgdGhhdCBzdHlsZSBpbiB0aGUgbm9ybWFsIGZhc2hpb246CisgICAgICogV2hlbiBzZXR0aW5nIHRleHQgZnJvbSByYXcgc3RyaW5nIG9yIGNoYXJhY3RlcnMsPGJyPgorICAgICAqIFNldCB0aGUgc3R5bGVzIHRvIHRoZSBzdHlsZSBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIHJlcGxhY2VkLjxicj4KKyAgICAgKiBJZiBubyBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCwgdXNlIHRoZSBzdHlsZSBvZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLjxicj4KKyAgICAgKiBJZiBhdCBzdGFydCwgdXNlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyPGJyPgorICAgICAqIE90aGVyd2lzZSB1c2UgTk9fU1RZTEUuCisgICAgICovCisgICAgc3RhdGljIGNsYXNzIFRlc3RSZXBsYWNlYWJsZSBpbXBsZW1lbnRzIFJlcGxhY2VhYmxlIHsKKyAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgY2hhcnM7CisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHN0eWxlczsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBmaW5hbCBjaGFyIE5PX1NUWUxFID0gJ18nOworCisgICAgICAgIHN0YXRpYyBmaW5hbCBjaGFyIE5PX1NUWUxFX01BUksgPSAweEZGRkY7CisgICAgICAgIAorICAgICAgICBUZXN0UmVwbGFjZWFibGUgKFN0cmluZyB0ZXh0LCBTdHJpbmcgc3R5bGVzKSB7CisgICAgICAgICAgICBjaGFycyA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyh0ZXh0KTsKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGVzICE9IG51bGwgJiYgaSA8IHN0eWxlcy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChzdHlsZXMuY2hhckF0KGkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5jaGFyQXQoaSkgPT0gTk9fU1RZTEVfTUFSSykgeworICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoTk9fU1RZTEUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoKGNoYXIpIChpICsgJzEnKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnN0eWxlcyA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyhzLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFN0eWxlcygpIHsKKyAgICAgICAgICAgIHJldHVybiBzdHlsZXMudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiBjaGFycy50b1N0cmluZygpICsgInsiICsgc3R5bGVzLnRvU3RyaW5nKCkgKyAifSI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIHN1YnN0cmluZyhpbnQgc3RhcnQsIGludCBsaW1pdCkgeworICAgICAgICAgICAgcmV0dXJuIGNoYXJzLnN1YnN0cmluZyhzdGFydCwgbGltaXQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBsZW5ndGgoKSB7CisgICAgICAgICAgICByZXR1cm4gY2hhcnMubGVuZ3RoKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgY2hhciBjaGFyQXQoaW50IG9mZnNldCkgeworICAgICAgICAgICAgcmV0dXJuIGNoYXJzLmNoYXJBdChvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBjaGFyMzJBdChpbnQgb2Zmc2V0KSB7CisgICAgICAgICAgICByZXR1cm4gY2hhcnMuY2hhcjMyQXQob2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGdldENoYXJzKGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0LCBjaGFyIGRzdFtdLCBpbnQgZHN0U3RhcnQpIHsKKyAgICAgICAgICAgIGNoYXJzLmdldENoYXJzKHNyY1N0YXJ0LCBzcmNMaW1pdCwgZHN0LCBkc3RTdGFydCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCByZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBTdHJpbmcgdGV4dCkgeworICAgICAgICAgICAgaWYgKHN1YnN0cmluZyhzdGFydCxsaW1pdCkuZXF1YWxzKHRleHQpKSByZXR1cm47IC8vIE5PIEFDVElPTiEKKyAgICAgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludChVdGlsaXR5LmVzY2FwZSh0b1N0cmluZygpICsgIiAtPiByZXBsYWNlKCIgKyBzdGFydCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIiArIGxpbWl0ICsgIiwiICsgdGV4dCkgKyAiKSAtPiAiKTsKKyAgICAgICAgICAgIGNoYXJzLnJlcGxhY2Uoc3RhcnQsIGxpbWl0LCB0ZXh0KTsKKyAgICAgICAgICAgIGZpeFN0eWxlcyhzdGFydCwgbGltaXQsIHRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oVXRpbGl0eS5lc2NhcGUodG9TdHJpbmcoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgdm9pZCByZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBjaGFyW10gY2hhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJzU3RhcnQsIGludCBjaGFyc0xlbikgeworICAgICAgICAgICAgaWYgKHN1YnN0cmluZyhzdGFydCxsaW1pdCkuZXF1YWxzKG5ldyBTdHJpbmcoY2hhcnMsIGNoYXJzU3RhcnQsIGNoYXJzTGVuLWNoYXJzU3RhcnQpKSkgcmV0dXJuOyAvLyBOTyBBQ1RJT04hCisgICAgICAgICAgICB0aGlzLmNoYXJzLnJlcGxhY2Uoc3RhcnQsIGxpbWl0LCBjaGFycywgY2hhcnNTdGFydCwgY2hhcnNMZW4pOworICAgICAgICAgICAgZml4U3R5bGVzKHN0YXJ0LCBsaW1pdCwgY2hhcnNMZW4pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaXhTdHlsZXMoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGludCBuZXdMZW4pIHsKKyAgICAgICAgICAgIGNoYXIgbmV3U3R5bGUgPSBOT19TVFlMRTsKKyAgICAgICAgICAgIGlmIChzdGFydCAhPSBsaW1pdCAmJiBzdHlsZXMuY2hhckF0KHN0YXJ0KSAhPSBOT19TVFlMRSkgeworICAgICAgICAgICAgICAgIG5ld1N0eWxlID0gc3R5bGVzLmNoYXJBdChzdGFydCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID4gMCAmJiBjaGFyQXQoc3RhcnQtMSkgIT0gTk9fU1RZTEVfTUFSSykgeworICAgICAgICAgICAgICAgIG5ld1N0eWxlID0gc3R5bGVzLmNoYXJBdChzdGFydC0xKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGltaXQgPCBzdHlsZXMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBuZXdTdHlsZSA9IHN0eWxlcy5jaGFyQXQobGltaXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gZHVtYiBpbXBsZW1lbnRhdGlvbiBmb3Igbm93LgorICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld0xlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgLy8gdGhpcyBkb2Vzbid0IHJlYWxseSBoYW5kbGUgYW4gZW1iZWRkZWQgTk9fU1RZTEVfTUFSSworICAgICAgICAgICAgICAgIC8vIGluIHRoZSBtaWRkbGUgb2YgYSBsb25nIHJ1biBvZiBjaGFyYWN0ZXJzIHJpZ2h0IC0tIGJ1dAorICAgICAgICAgICAgICAgIC8vIHRoYXQgY2FzZSBzaG91bGRuJ3QgaGFwcGVuIGFueXdheQorICAgICAgICAgICAgICAgIGlmIChjaGFyQXQoc3RhcnQraSkgPT0gTk9fU1RZTEVfTUFSSykgeworICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZChOT19TVFlMRSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQobmV3U3R5bGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0eWxlcy5yZXBsYWNlKHN0YXJ0LCBsaW1pdCwgcy50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGNvcHkoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGludCBkZXN0KSB7CisgICAgICAgICAgICBjaGFycy5jb3B5KHN0YXJ0LCBsaW1pdCwgZGVzdCk7CisgICAgICAgICAgICBzdHlsZXMuY29weShzdGFydCwgbGltaXQsIGRlc3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNNZXRhRGF0YSgpIHsKKyAgICAgICAgCXJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvUm91bmRUcmlwVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L1JvdW5kVHJpcFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYWE5ZTYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L1JvdW5kVHJpcFRlc3QuamF2YQpAQCAtMCwwICsxLDEzNzUgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvUm91bmRUcmlwVGVzdC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjI6MDc6NTcgJAorICogJFJldmlzaW9uOiAxLjQ3ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnRyYW5zbGl0OworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogQHRlc3QKKyAqIEBzdW1tYXJ5IFJvdW5kIHRyaXAgdGVzdCBvZiBUcmFuc2xpdGVyYXRvcgorICovCitwdWJsaWMgY2xhc3MgUm91bmRUcmlwVGVzdCBleHRlbmRzIFRlc3RGbXdrIHsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBFWFRSQV9URVNUUyA9IHRydWU7CisgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJJTlRfUlVMRVMgPSB0cnVlOworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgUm91bmRUcmlwVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgLyoKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2luZ2xlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTGF0aW4tR3JlZWsiKTsKKyAgICAgICAgU3RyaW5nIHMgPSB0LnRyYW5zbGl0ZXJhdGUoIlx1MDEwMVx1MDA2OSIpOworICAgIH0KKyAgICAqLworICAgIAorICAgIC8qCisgICAgTm90ZTogVW5pY29kZSAzLjIgYWRkZWQgbmV3IEhpcmFnYW5hL0thdGFrYW5hIGNoYXJhY3RlcnM6CisgICAgCiszMDk1Li4zMDk2ICAgIDsgMy4yICMgICBbMl0gSElSQUdBTkEgTEVUVEVSIFNNQUxMIEtBLi5ISVJBR0FOQSBMRVRURVIgU01BTEwgS0UKKzMwOUYuLjMwQTAgICAgOyAzLjIgIyAgIFsyXSBISVJBR0FOQSBESUdSQVBIIFlPUkkuLktBVEFLQU5BLUhJUkFHQU5BIERPVUJMRSBIWVBIRU4KKzMwRkYgICAgICAgICAgOyAzLjIgIyAgICAgICBLQVRBS0FOQSBESUdSQVBIIEtPVE8KKzMxRjAuLjMxRkYgICAgOyAzLjIgIyAgWzE2XSBLQVRBS0FOQSBMRVRURVIgU01BTEwgS1UuLktBVEFLQU5BIExFVFRFUiBTTUFMTCBSTworCisgICAgV2Ugd2lsbCBub3QgYWRkIHRoZW0gdG8gdGhlIHJ1bGVzIHVudGlsIHRoZXkgYXJlIG1vcmUgc3VwcG9ydGVkIChlLmcuIGluIGZvbnRzIG9uIFdpbmRvd3MpCisgICAgQSBidWcgaGFzIGJlZW4gZmlsZWQgdG8gcmVtaW5kIHVzIHRvIGRvIHRoaXM6ICMxOTc5LgorICAgICovCisgICAgCisgICAgc3RhdGljIFN0cmluZyBLQVRBS0FOQSA9ICJbW1s6a2F0YWthbmE6XVtcdTMwQTEtXHUzMEZBXHUzMEZDXV0tW1x1MzBGRlx1MzFGMC1cdTMxRkZdXSI7CisgICAgc3RhdGljIFN0cmluZyBISVJBR0FOQSA9ICJbW1s6aGlyYWdhbmE6XVtcdTMwNDAtXHUzMDk0XV0tW1x1MzA5NS1cdTMwOTZcdTMwOUYtXHUzMEEwXV0iOworICAgIHN0YXRpYyBTdHJpbmcgTEVOR1RIID0gIltcdTMwRkNdIjsKKyAgICBzdGF0aWMgU3RyaW5nIEhBTEZXSURUSF9LQVRBS0FOQSA9ICJbXHVGRjY1LVx1RkY5RF0iOworICAgIHN0YXRpYyBTdHJpbmcgS0FUQUtBTkFfSVRFUkFUSU9OID0gIltcdTMwRkRcdTMwRkVdIjsKKyAgICBzdGF0aWMgU3RyaW5nIEhJUkFHQU5BX0lURVJBVElPTiA9ICJbXHUzMDlEXHUzMDlFXSI7CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEthbmEoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFRlc3QoIkthdGFrYW5hLUhpcmFnYW5hIikKKyAgICAgICAgICAudGVzdChLQVRBS0FOQSwgIlsiICsgSElSQUdBTkEgKyBMRU5HVEggKyAiXSIsICJbIiArIEhBTEZXSURUSF9LQVRBS0FOQSArIExFTkdUSCArICJdIiwgdGhpcywgbmV3IExlZ2FsKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RIaXJhZ2FuYSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgUGFyc2VFeGNlcHRpb24geworICAgICAgICBuZXcgVGVzdCgiTGF0aW4tSGlyYWdhbmEiKQorICAgICAgICAgIC50ZXN0KCJbYS16QS1aXSIsIEhJUkFHQU5BLCBISVJBR0FOQV9JVEVSQVRJT04sIHRoaXMsIG5ldyBMZWdhbCgpKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEthdGFrYW5hKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBUZXN0KCJMYXRpbi1LYXRha2FuYSIpCisgICAgICAgICAgLnRlc3QoIlthLXpBLVpdIiwgS0FUQUtBTkEsICJbIiArIEtBVEFLQU5BX0lURVJBVElPTiArIEhBTEZXSURUSF9LQVRBS0FOQSArICJdIiwgdGhpcywgbmV3IExlZ2FsKCkpOworICAgIH0KKworLy8gU29tZSB0cmFuc2xpdGVyYXRvcnMgcmVtb3ZlZCBmb3IgMi4wCisKKy8vICBwdWJsaWMgdm9pZCBUZXN0QXJhYmljKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZUV4Y2VwdGlvbiB7CisvLyAgICAgIG5ldyBUZXN0KCJMYXRpbi1BcmFiaWMiLCAKKy8vICAgICAgICBUZXN0VXRpbGl0eS5MQVRJTl9TQ1JJUFQsIFRlc3RVdGlsaXR5LkFSQUJJQ19TQ1JJUFQpCisvLyAgICAgICAgLnRlc3QoIlthLXpBLVpdIiwgIltcdTA2MjAtXHUwNjVGLVtcdTA2NDBdXSIsIHRoaXMpOworLy8gIH0KKworLy8gIHB1YmxpYyB2b2lkIFRlc3RIZWJyZXcoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlRXhjZXB0aW9uIHsKKy8vICAgICAgbmV3IFRlc3QoIkxhdGluLUhlYnJldyIsIAorLy8gICAgICAgIFRlc3RVdGlsaXR5LkxBVElOX1NDUklQVCwgVGVzdFV0aWxpdHkuSEVCUkVXX1NDUklQVCkKKy8vICAgICAgICAudGVzdChudWxsLCAiW1x1MDVEMC1cdTA1RUZdIiwgdGhpcyk7CisvLyAgfQorCisvLyAgcHVibGljIHZvaWQgVGVzdEhhbmd1bCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgUGFyc2VFeGNlcHRpb24geworLy8gICAgICBUZXN0IHQgPSBuZXcgVGVzdEhhbmd1bCgpOworLy8gICAgICB0LnNldFBhaXJMaW1pdCgzMCk7IC8vIERvbid0IHJ1biBmdWxsIHRlc3QgLS0gdG9vIGxvbmcKKy8vICAgICAgdC50ZXN0KG51bGwsIG51bGwsIHRoaXMpOworLy8gIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RKYW1vKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBUZXN0KCJMYXRpbi1KYW1vIikKKyAgICAgICAgICAgIC50ZXN0KCJbYS16QS1aXSIsICJbXHUxMTAwLVx1MTExMiBcdTExNjEtXHUxMTc1IFx1MTFBOC1cdTExQzJdIiwgIiIsIHRoaXMsIG5ldyBMZWdhbEphbW8oKSk7CisgICAgfQorCisvKgorICAgICAgICBTQmFzZSA9IDB4QUMwMCwgTEJhc2UgPSAweDExMDAsIFZCYXNlID0gMHgxMTYxLCBUQmFzZSA9IDB4MTFBNywKKyAgICAgICAgTENvdW50ID0gMTksIFZDb3VudCA9IDIxLCBUQ291bnQgPSAyOCwKKyAgICAgICAgTkNvdW50ID0gVkNvdW50ICogVENvdW50LCAgIC8vIDU4OAorICAgICAgICBTQ291bnQgPSBMQ291bnQgKiBOQ291bnQsICAgLy8gMTExNzIKKyAgICAgICAgTExpbWl0ID0gTEJhc2UgKyBMQ291bnQsICAgIC8vIDExMTMKKyAgICAgICAgVkxpbWl0ID0gVkJhc2UgKyBWQ291bnQsICAgIC8vIDExNzYKKyAgICAgICAgVExpbWl0ID0gVEJhc2UgKyBUQ291bnQsICAgIC8vIDExQzMKKyAgICAgICAgU0xpbWl0ID0gU0Jhc2UgKyBTQ291bnQ7ICAgIC8vIEQ3QTQKKyovCisKKyAgICBwdWJsaWMgdm9pZCBUZXN0SGFuZ3VsKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgIFRlc3QgdCA9IG5ldyBUZXN0KCJMYXRpbi1IYW5ndWwiKTsKKyAgICAgICAgdC50ZXN0KCJbYS16QS1aXSIsICJbXHVBQzAwLVx1RDdBNF0iLCAiIiwgdGhpcywgbmV3IExlZ2FsKCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2luZ2xlKCkgeworCQlUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkxhdGluLUdyZWVrIik7CisgICAgCXQudHJhbnNsaXRlcmF0ZSgiXHUwMDYxXHUwMTAxXHUwMDY5Iik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEdyZWVrKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBUZXN0KCJMYXRpbi1HcmVlayIpCisgICAgICAgIC50ZXN0KCJbYS16QS1aXSIsICJbXHUwMDNCXHUwMEI3WzpHcmVlazpdLVtcdTAzRDctXHUwM0VGXV0iLCAKKyAgICAgICAgICAgICJbXHUwMEI1XHUwMzdBXHUwM0QwLVx1MDNGNV0iLCAvKiByb3VuZHRyaXAgZXhjbHVzaW9ucyAqLworICAgICAgICAgICAgdGhpcywgbmV3IExlZ2FsR3JlZWsodHJ1ZSkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RHcmVla1VOR0VHTigpIHRocm93cyBJT0V4Y2VwdGlvbiwgUGFyc2VFeGNlcHRpb24geworICAgICAgICBuZXcgVGVzdCgiTGF0aW4tR3JlZWsvVU5HRUdOIikKKyAgICAgICAgICAudGVzdCgiW2EtekEtWl0iLCAiW1x1MDAzQlx1MDBCN1s6R3JlZWs6XS1bXHUwM0Q3LVx1MDNFRl1dIiwgCisgICAgICAgICAgICAiW1x1MDBCNVx1MDM3QVx1MDNEMC1cdUZGRkZ7XHUwMzlDXHUwM0MwfV0iLCAvKiByb3VuZHRyaXAgZXhjbHVzaW9ucyAqLworICAgICAgICAgICAgdGhpcywgbmV3IExlZ2FsR3JlZWsoZmFsc2UpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0ZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFRlc3QoIkxhdGluLWVsIikKKyAgICAgICAgICAudGVzdCgiW2EtekEtWl0iLCAiW1x1MDAzQlx1MDBCN1s6R3JlZWs6XS1bXHUwM0Q3LVx1MDNFRl1dIiwgCisgICAgICAgICAgICAiW1x1MDBCNVx1MDM3QVx1MDNEMC1cdUZGRkZ7XHUwMzlDXHUwM0MwfV0iLCAvKiByb3VuZHRyaXAgZXhjbHVzaW9ucyAqLworICAgICAgICAgICAgdGhpcywgbmV3IExlZ2FsR3JlZWsoZmFsc2UpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q3lyaWxsaWMoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFRlc3QoIkxhdGluLUN5cmlsbGljIikKKyAgICAgICAgICAudGVzdCgiW2EtekEtWlx1MDExMFx1MDExMV0iLCAiW1x1MDQwMC1cdTA0NUZdIiwgbnVsbCwgdGhpcywgbmV3IExlZ2FsKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEFSQUJJQyA9ICJbXHUwNjBDXHUwNjFCXHUwNjFGXHUwNjIxXHUwNjI3LVx1MDYzQVx1MDY0MS1cdTA2NTVcdTA2NjAtXHUwNjZDXHUwNjdFXHUwNjg2XHUwNjk4XHUwNkE0XHUwNkFEXHUwNkFGXHUwNkNCLVx1MDZDQ1x1MDZGMC1cdTA2RjldIjsKKworICAgIHB1YmxpYyB2b2lkIFRlc3RBcmFiaWMoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFRlc3QoIkxhdGluLUFyYWJpYyIpCisgICAgICAgICAgLnRlc3QoIlthLXpBLVpcdTAyQkVcdTAyQkZdIiwgQVJBQklDLCAiW2EtekEtWlx1MDJCRVx1MDJCRlx1MjA3Rl0iLCBudWxsLCB0aGlzLCBuZXcgTGVnYWwoKSk7IC8vIAorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0SGVicmV3KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBUZXN0KCJMYXRpbi1IZWJyZXciKQorICAgICAgICAgIC50ZXN0KCJbYS16QS1aXHUwMkJDXHUwMkJCXSIsICJbWzpoZWJyZXc6XS1bXHVGQjAwLVx1RkJGRl1dIiwgIltcdTA1RjBcdTA1RjFcdTA1RjJdIiwgdGhpcywgbmV3IExlZ2FsSGVicmV3KCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0VGhhaSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgUGFyc2VFeGNlcHRpb24geworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiXG5UZXN0IGNvbW1lbnRlZCBvdXQsIHRvIGJlIHJlaW5zdGF0ZWQgbGF0ZXIiKTsKKyAgICAgICAgCisgICAgICAgIG5ldyBUZXN0KCJMYXRpbi1UaGFpIikKKyAgICAgICAgICAudGVzdCgiW2EtekEtWlx1MDE0Mlx1MUVDRFx1MDBFNlx1MDEzMVx1MDI2OF0iLCAiW1x1MEUwMS1cdTBFM0FcdTBFNDAtXHUwRTVCXSIsIG51bGwsIHRoaXMsIG5ldyBMZWdhbFRoYWkoKSk7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBJbnRlci1JbmRpYyBUZXN0cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTGVnYWxJbmRpYyBleHRlbmRzIExlZ2FseworICAgICAgICBVbmljb2RlU2V0IHZvd2VsU2lnblNldCA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgIAorICAgICAgICBwdWJsaWMgTGVnYWxJbmRpYygpeworICAgICAgICAgICAgdm93ZWxTaWduU2V0LmFkZEFsbChuZXcgVW5pY29kZVNldCgiW1x1MDkwMVx1MDkwMlx1MDkwM1x1MDkzZS1cdTA5NGNcdTA5NjJcdTA5NjNdIikpOwkJCQkvKiBEZXZhbmFnYXJpICovCisgICAgICAgICAgICB2b3dlbFNpZ25TZXQuYWRkQWxsKG5ldyBVbmljb2RlU2V0KCJbXHUwOTgxXHUwOTgyXHUwOTgzXHUwOWJlLVx1MDljY1x1MDllMlx1MDllM1x1MDlEN10iKSk7CQkJLyogQmVuZ2FsaSAqLworICAgICAgICAgICAgdm93ZWxTaWduU2V0LmFkZEFsbChuZXcgVW5pY29kZVNldCgiW1x1MGEwMVx1MGEwMlx1MGEwM1x1MGEzZS1cdTBhNGNcdTBhNjJcdTBhNjNcdTBhNzBcdTBhNzFdIikpOwkvKiBHdXJtdWtoaSAqLworICAgICAgICAgICAgdm93ZWxTaWduU2V0LmFkZEFsbChuZXcgVW5pY29kZVNldCgiW1x1MGE4MVx1MGE4Mlx1MGE4M1x1MGFiZS1cdTBhY2NcdTBhZTJcdTBhZTNdIikpOwkJCQkvKiBHdWphcmF0aSAqLworICAgICAgICAgICAgdm93ZWxTaWduU2V0LmFkZEFsbChuZXcgVW5pY29kZVNldCgiW1x1MGIwMVx1MGIwMlx1MGIwM1x1MGIzZS1cdTBiNGNcdTBiNjJcdTBiNjNcdTBiNTZcdTBiNTddIikpOwkvKiBPcml5YSAqLworICAgICAgICAgICAgdm93ZWxTaWduU2V0LmFkZEFsbChuZXcgVW5pY29kZVNldCgiW1x1MGI4MVx1MGI4Mlx1MGI4M1x1MGJiZS1cdTBiY2NcdTBiZTJcdTBiZTNcdTBiZDddIikpOwkJCS8qIFRhbWlsICovCisgICAgICAgICAgICB2b3dlbFNpZ25TZXQuYWRkQWxsKG5ldyBVbmljb2RlU2V0KCJbXHUwYzAxXHUwYzAyXHUwYzAzXHUwYzNlLVx1MGM0Y1x1MGM2Mlx1MGM2M1x1MGM1NVx1MGM1Nl0iKSk7CS8qIFRlbHVndSAqLworICAgICAgICAgICAgdm93ZWxTaWduU2V0LmFkZEFsbChuZXcgVW5pY29kZVNldCgiW1x1MGM4MVx1MGM4Mlx1MGM4M1x1MGNiZS1cdTBjY2NcdTBjZTJcdTBjZTNcdTBjZDVcdTBjZDZdIikpOwkvKiBLYW5uYWRhICovCisgICAgICAgICAgICB2b3dlbFNpZ25TZXQuYWRkQWxsKG5ldyBVbmljb2RlU2V0KCJbXHUwZDAxXHUwZDAyXHUwZDAzXHUwZDNlLVx1MGQ0Y1x1MGQ2Mlx1MGQ2M1x1MGQ1N10iKSk7CQkJLyogTWFsYXlhbGFtICovCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBhdmFncmFoYSA9ICJcdTA5M2RcdTBhYmRcdTBiM2QiOworICAgICAgICBTdHJpbmcgbnVrdGEgPSAiXHUwOTNjXHUwOWJjXHUwYTNjXHUwYWJjXHUwYjNjIjsKKyAgICAgICAgU3RyaW5nIHZpcmFtYSA9ICJcdTA5NGRcdTA5Y2RcdTBhNGRcdTBhY2RcdTBiNGRcdTBiY2RcdTBjNGRcdTBjY2RcdTBkNGQiOworICAgICAgICBTdHJpbmcgc2Fuc2tyaXRTdHJlc3NTaWducyA9ICJcdTA5NTFcdTA5NTJcdTA5NTNcdTA5NTQiOworICAgICAgICBTdHJpbmcgY2hhbmRyYWJpbmR1ID0gIlx1MDkwMVx1MDk4MVx1MEE4MVx1MGIwMVx1MGMwMSI7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzKFN0cmluZyBzb3VyY2VTdHJpbmcpeworICAgICAgICAgICAgaW50IGNwPXNvdXJjZVN0cmluZy5jaGFyQXQoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEEgdm93ZWwgc2lnbiBjYW5ub3QgYmUgdGhlIGZpcnN0IGNoYXIKKyAgICAgICAgICAgIGlmKHZvd2VsU2lnblNldC5jb250YWlucyhjcCkpeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH1lbHNlIGlmKGF2YWdyYWhhLmluZGV4T2YoY3ApIT0tMSl7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfWVsc2UgaWYodmlyYW1hLmluZGV4T2YoY3ApIT0tMSl7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfWVsc2UgaWYobnVrdGEuaW5kZXhPZihjcCkhPS0xKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9ZWxzZSBpZihzYW5za3JpdFN0cmVzc1NpZ25zLmluZGV4T2YoY3ApIT0tMSl7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfWVsc2UgaWYoKGNoYW5kcmFiaW5kdS5pbmRleE9mKGNwKSE9LTEpICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZVN0cmluZy5sZW5ndGgoKSA+MSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3dlbFNpZ25TZXQuY29udGFpbnMoc291cmNlU3RyaW5nLmNoYXJBdCgxKSkpKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzdGF0aWMgU3RyaW5nIGxhdGluRm9ySW5kaWMgPSAiW1snLjAtOUEtWmEten5cdTAwQzAtXHUwMEM1XHUwMEM3LVx1MDBDRlx1MDBEMS1cdTAwRDZcdTAwRDktXHUwMEREIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDBFMC1cdTAwRTVcdTAwRTctXHUwMEVGXHUwMEYxLVx1MDBGNlx1MDBGOS1cdTAwRkRcdTAwRkYtXHUwMTBGIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDExMi1cdTAxMjVcdTAxMjgtXHUwMTMwXHUwMTM0LVx1MDEzN1x1MDEzOS1cdTAxM0VcdTAxNDMtXHUwMTQ4IisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDE0Qy1cdTAxNTFcdTAxNTQtXHUwMTY1XHUwMTY4LVx1MDE3RVx1MDFBMC1cdTAxQTFcdTAxQUYtXHUwMUIwIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDFDRC1cdTAxRENcdTAxREUtXHUwMUUzXHUwMUU2LVx1MDFFRFx1MDFGMFx1MDFGNC1cdTAxRjVcdTAxRjgtXHUwMUZCIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDIwMC1cdTAyMUJcdTAyMUUtXHUwMjFGXHUwMjI2LVx1MDIzM1x1MDMwMy1cdTAzMDRcdTAzMDZcdTAzMTQtXHUwMzE1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MDMyNVx1MDQwRVx1MDQxOVx1MDQzOVx1MDQ1RVx1MDRDMS1cdTA0QzJcdTA0RDAtXHUwNEQxXHUwNEQ2LVx1MDRENyIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTA0RTItXHUwNEUzXHUwNEVFLVx1MDRFRlx1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUxRjAxXHUxRjAzXHUxRjA1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MUYwN1x1MUYwOVx1MUYwQlx1MUYwRFx1MUYwRlx1MUYxMVx1MUYxM1x1MUYxNVx1MUYxOVx1MUYxQlx1MUYxRFx1MUYyMSIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTFGMjNcdTFGMjVcdTFGMjdcdTFGMjlcdTFGMkJcdTFGMkRcdTFGMkZcdTFGMzFcdTFGMzNcdTFGMzVcdTFGMzdcdTFGMzkiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUxRjNCXHUxRjNEXHUxRjNGXHUxRjQxXHUxRjQzXHUxRjQ1XHUxRjQ5XHUxRjRCXHUxRjREXHUxRjUxXHUxRjUzXHUxRjU1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Rlx1MUY2MVx1MUY2M1x1MUY2NVx1MUY2N1x1MUY2OVx1MUY2Qlx1MUY2RCIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdTFGNkZcdTFGODFcdTFGODNcdTFGODVcdTFGODdcdTFGODlcdTFGOEJcdTFGOERcdTFGOEZcdTFGOTFcdTFGOTNcdTFGOTUiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUxRjk3XHUxRjk5XHUxRjlCXHUxRjlEXHUxRjlGXHUxRkExXHUxRkEzXHUxRkE1XHUxRkE3XHUxRkE5XHUxRkFCXHUxRkFEIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MUZBRi1cdTFGQjFcdTFGQjgtXHUxRkI5XHUxRkQwLVx1MUZEMVx1MUZEOC1cdTFGRDlcdTFGRTAtXHUxRkUxXHUxRkU1IisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx1MUZFOC1cdTFGRTlcdTFGRUNcdTIxMkEtXHUyMTJCXHVFMDREXHVFMDY0XSIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItW1x1RTAwMC1cdUUwODAgXHUwMUUyXHUwMUUzXSYgW1s6bGF0aW46XVs6bWFyazpdXV0iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0RGV2YW5hZ2FyaUxhdGluKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBUZXN0KCJMYXRpbi1ERVZBTkFHQVJJIikKKyAgICAgICAgICAudGVzdChsYXRpbkZvckluZGljLCAiW1s6RGV2YW5hZ2FyaTpdW1x1MDk0ZF1bXHUwOTY0XHUwOTY1XV0iLCAiW1x1MDk2NV0iLCB0aGlzLCBuZXcgTGVnYWxJbmRpYygpKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFtdW10gYXJyYXk9IG5ldyBTdHJpbmdbXVtdeworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJCRU5HQUxJLURFVkFOQUdBUkkiLAorICAgICAgICAgICAgIls6QkVOR0FMSTpdIiwgIls6RGV2YW5hZ2FyaTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTA5NTEtXHUwOTU0XHUwOTQzLVx1MDk0OVx1MDk0YVx1MDk2Mlx1MDk2M1x1MDkwRFx1MDkwZVx1MDkxMVx1MDkxMlx1MDkyOVx1MDkzM1x1MDkzNFx1MDkzNVx1MDkzZFx1MDk1MFx1MDk1OFx1MDk1OVx1MDk1YVx1MDk1Ylx1MDk1ZVx1MDlmMFx1MDlmMV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJERVZBTkFHQVJJLUJFTkdBTEkiLAorICAgICAgICAgICAiWzpEZXZhbmFnYXJpOl0iLCAiWzpCRU5HQUxJOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTA5NTEtXHUwOTU0XHUwOUQ3XHUwOTBEXHUwOTBlXHUwOTExXHUwOTEyXHUwOTI5XHUwOTMzXHUwOTM0XHUwOTM1XHUwOTNkXHUwOTUwXHUwOTU4XHUwOTU5XHUwOTVhXHUwOTViXHUwOTVlXHUwOWYwXHUwOWYxXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJHVVJNVUtISS1ERVZBTkFHQVJJIiwKKyAgICAgICAgICAiWzpHVVJNVUtISTpdIiwgIls6RGV2YW5hZ2FyaTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTA5MDJcdTA5MzZcdTA5MzNcdTA5NTEtXHUwOTU0XHUwOTAyXHUwOTAzXHUwOTQzLVx1MDk0OVx1MDk0YVx1MDk2Mlx1MDk2M1x1MDkwQlx1MDkwQ1x1MDkwRFx1MDkwZVx1MDkxMVx1MDkxMlx1MDkzNFx1MDkzN1x1MDkzRFx1MDk1MFx1MDk2MFx1MDk2MVx1MGE3Mlx1MGE3M1x1MGE3NF0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJERVZBTkFHQVJJLUdVUk1VS0hJIiwKKyAgICAgICAgICAgIls6RGV2YW5hZ2FyaTpdIiwgIls6R1VSTVVLSEk6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MEEwMlx1MDk0Nlx1MEE1Q1x1MDk1MS1cdTA5NTRcdTBBNzBcdTBBNzFcdTA5MEJcdTA5MENcdTA5MERcdTA5MGVcdTA5MTFcdTA5MTJcdTA5MzRcdTA5MzdcdTA5M0RcdTA5NTBcdTA5NjBcdTA5NjFcdTBhNzJcdTBhNzNcdTBhNzRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkdVSkFSQVRJLURFVkFOQUdBUkkiLAorICAgICAgICAgICJbOkdVSkFSQVRJOl0iLCAiWzpEZXZhbmFnYXJpOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MDk0Nlx1MDk0QVx1MDk2Mlx1MDk2M1x1MDk1MS1cdTA5NTRcdTA5NjFcdTA5MGNcdTA5MGVcdTA5MTJdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiREVWQU5BR0FSSS1HVUpBUkFUSSIsCisgICAgICAgICAgICJbOkRldmFuYWdhcmk6XSIsICJbOkdVSkFSQVRJOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTA5NTEtXHUwOTU0XHUwOTYxXHUwOTBjXHUwOTBlXHUwOTEyXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJPUklZQS1ERVZBTkFHQVJJIiwKKyAgICAgICAgICAiWzpPUklZQTpdIiwgIls6RGV2YW5hZ2FyaTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTA5NDMtXHUwOTRhXHUwOTYyXHUwOTYzXHUwOTUxLVx1MDk1NFx1MDk1MFx1MDkwRFx1MDkwZVx1MDkxMlx1MDkxMVx1MDkzMVx1MDkzNV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJERVZBTkFHQVJJLU9SSVlBIiwKKyAgICAgICAgICAgIls6RGV2YW5hZ2FyaTpdIiwgIls6T1JJWUE6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGI1Zlx1MGI1Nlx1MGI1N1x1MDk1MFx1MDkwRFx1MDkwZVx1MDkxMlx1MDkxMVx1MDkzMVx1MDkzNV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVGFtaWwtREVWQU5BR0FSSSIsCisgICAgICAgICAgIls6dGFtaWw6XSIsICJbOkRldmFuYWdhcmk6XSIsIAorICAgICAgICAgICAgICAgICAgIltcdTA5MDFcdTA5M2NcdTA5NDMtXHUwOTRhXHUwOTUxLVx1MDk1NFx1MDk2Mlx1MDk2M1x1MDkwQlx1MDkwQ1x1MDkwRFx1MDkxMVx1MDkxNlx1MDkxN1x1MDkxOFx1MDkxQlx1MDkxRFx1MDkyMFx1MDkyMVx1MDkyMlx1MDkyNVx1MDkyNlx1MDkyN1x1MDkyQlx1MDkyQ1x1MDkyRFx1MDkzNlx1MDkzZFx1MDk1MFtcdTA5NTgtXHUwOTYxXV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkRFVkFOQUdBUkktVGFtaWwiLAorICAgICAgICAgICAiWzpEZXZhbmFnYXJpOl0iLCAiWzp0YW1pbDpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwYmQ3XSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJUZWx1Z3UtREVWQU5BR0FSSSIsCisgICAgICAgICAgIls6dGVsdWd1Ol0iLCAiWzpEZXZhbmFnYXJpOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MDkzY1x1MDk1MFx1MDk0NVx1MDk0OVx1MDk1MS1cdTA5NTRcdTA5NjJcdTA5NjNcdTA5MERcdTA5MTFcdTA5M2RcdTA5MjlcdTA5MzRbXHUwOTU4LVx1MDk1Zl1dIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiREVWQU5BR0FSSS1URUxVR1UiLAorICAgICAgICAgICAiWzpEZXZhbmFnYXJpOl0iLCAiWzpURUxVR1U6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGM1NVx1MGM1Nlx1MDk1MFx1MDkwRFx1MDkxMVx1MDkzZFx1MDkyOVx1MDkzNFtcdTA5NTgtXHUwOTVmXV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiS0FOTkFEQS1ERVZBTkFHQVJJIiwKKyAgICAgICAgICAiWzpLQU5OQURBOl0iLCAiWzpEZXZhbmFnYXJpOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MDkwMVx1MDk0Nlx1MDkzY1x1MDk1MFx1MDk0NVx1MDk0OVx1MDk1MS1cdTA5NTRcdTA5NjJcdTA5NjNcdTA5NTBcdTA5MERcdTA5MTFcdTA5M2RcdTA5MjlcdTA5MzRbXHUwOTU4LVx1MDk1Zl1dIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiREVWQU5BR0FSSS1LQU5OQURBIiwKKyAgICAgICAgICAgIls6RGV2YW5hZ2FyaTpdIiwgIls6S0FOTkFEQTpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwY2RlXHUwY2Q1XHUwY2Q2XHUwOTUwXHUwOTBEXHUwOTExXHUwOTNkXHUwOTI5XHUwOTM0W1x1MDk1OC1cdTA5NWZdXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLyAKKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiTUFMQVlBTEFNLURFVkFOQUdBUkkiLAorICAgICAgICAgICJbOk1BTEFZQUxBTTpdIiwgIls6RGV2YW5hZ2FyaTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTA5MDFcdTA5NGFcdTA5NGJcdTA5NGNcdTA5M2NcdTA5NTBcdTA5NDRcdTA5NDVcdTA5NDlcdTA5NTEtXHUwOTU0XHUwOTYyXHUwOTYzXHUwOTBEXHUwOTExXHUwOTNkXHUwOTI5XHUwOTM0W1x1MDk1OC1cdTA5NWZdXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgIH0sCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkRFVkFOQUdBUkktTUFMQVlBTEFNIiwKKyAgICAgICAgICAgIls6RGV2YW5hZ2FyaTpdIiwgIls6TUFMQVlBTEFNOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBkNGNcdTBkNTdcdTA5NTBcdTA5MERcdTA5MTFcdTA5M2RcdTA5MjlcdTA5MzRbXHUwOTU4LVx1MDk1Zl1dIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkdVUk1VS0hJLUJFTkdBTEkiLAorICAgICAgICAgICJbOkdVUk1VS0hJOl0iLCAiWzpCRU5HQUxJOl0iLCAgCisgICAgICAgICAgICAgICAgIltcdTA5ODJcdTA5YjZcdTA5ZTJcdTA5ZTNcdTA5YzNcdTA5YzRcdTA5ZDdcdTA5OEJcdTA5OENcdTA5QjdcdTA5RTBcdTA5RTFcdTA5RjBcdTA5RjFdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiQkVOR0FMSS1HVVJNVUtISSIsCisgICAgICAgICAgICJbOkJFTkdBTEk6XSIsICJbOkdVUk1VS0hJOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBBMDJcdTBhNWNcdTBhNDdcdTBhNzBcdTBhNzFcdTBBMzNcdTBBMzVcdTBBNTlcdTBBNUFcdTBBNUJcdTBBNUVcdTBBNzJcdTBBNzNcdTBBNzRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkdVSkFSQVRJLUJFTkdBTEkiLAorICAgICAgICAgICJbOkdVSkFSQVRJOl0iLCAiWzpCRU5HQUxJOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MDlkN1x1MDllMlx1MDllM1x1MDk4Y1x1MDllMVx1MDlmMFx1MDlmMV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJCRU5HQUxJLUdVSkFSQVRJIiwKKyAgICAgICAgICAgIls6QkVOR0FMSTpdIiwgIls6R1VKQVJBVEk6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MEE4Mlx1MGE4M1x1MEFjOVx1MEFjNVx1MGFjN1x1MEE4RFx1MEE5MVx1MEFCM1x1MEFCNVx1MEFCRFx1MEFEMF0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisgCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIk9SSVlBLUJFTkdBTEkiLAorICAgICAgICAgICJbOk9SSVlBOl0iLCAiWzpCRU5HQUxJOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MDljNFx1MDllMlx1MDllM1x1MDlmMFx1MDlmMV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJCRU5HQUxJLU9SSVlBIiwKKyAgICAgICAgICAgIls6QkVOR0FMSTpdIiwgIls6T1JJWUE6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGI1Zlx1MGI1Nlx1MGIzM1x1MGIzZF0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVGFtaWwtQkVOR0FMSSIsCisgICAgICAgICAgIls6dGFtaWw6XSIsICJbOkJFTkdBTEk6XSIsIAorICAgICAgICAgICAgICAgICAgIltcdTA5ODFcdTA5YmNcdTA5YzNcdTA5YzRcdTA5ZTJcdTA5ZTNcdTA5ZjBcdTA5ZjFcdTA5OEJcdTA5OENcdTA5OTZcdTA5OTdcdTA5OThcdTA5OUJcdTA5OURcdTA5QTBcdTA5QTFcdTA5QTJcdTA5QTVcdTA5QTZcdTA5QTdcdTA5QUJcdTA5QUNcdTA5QURcdTA5QjZcdTA5RENcdTA5RERcdTA5REZcdTA5RTBcdTA5RTFdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJCRU5HQUxJLVRhbWlsIiwKKyAgICAgICAgICAgIls6QkVOR0FMSTpdIiwgIls6dGFtaWw6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGJjNlx1MGJjN1x1MGJjYVx1MEI4RVx1MEI5Mlx1MEJBOVx1MEJCMVx1MEJCM1x1MEJCNFx1MEJCNV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVGVsdWd1LUJFTkdBTEkiLAorICAgICAgICAgICJbOnRlbHVndTpdIiwgIls6QkVOR0FMSTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTA5ZTJcdTA5ZTNcdTA5YmNcdTA5ZDdcdTA5ZjBcdTA5ZjFcdTA5ZGNcdTA5ZGRcdTA5ZGZdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiQkVOR0FMSS1URUxVR1UiLAorICAgICAgICAgICAiWzpCRU5HQUxJOl0iLCAiWzpURUxVR1U6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGM1NVx1MGM1Nlx1MGM0N1x1MGM0Nlx1MGM0YVx1MEMwRVx1MEMxMlx1MEMzMVx1MEMzM1x1MEMzNV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiS0FOTkFEQS1CRU5HQUxJIiwKKyAgICAgICAgICAiWzpLQU5OQURBOl0iLCAiWzpCRU5HQUxJOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MDk4MVx1MDllMlx1MDllM1x1MDliY1x1MDlkN1x1MDlmMFx1MDlmMVx1MDlkY1x1MDlkZFx1MDlkZl0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJCRU5HQUxJLUtBTk5BREEiLAorICAgICAgICAgICAiWzpCRU5HQUxJOl0iLCAiWzpLQU5OQURBOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBjYzZcdTBjY2FcdTBjZDVcdTBjZDZcdTBjYzdcdTBDOEVcdTBDOTJcdTBDQjFcdTBjYjNcdTBjYjVcdTBjZGVdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovIAorICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJNQUxBWUFMQU0tQkVOR0FMSSIsCisgICAgICAgICAgIls6TUFMQVlBTEFNOl0iLCAiWzpCRU5HQUxJOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MDk4MVx1MDllMlx1MDllM1x1MDliY1x1MDljNFx1MDlmMFx1MDlmMVx1MDlkY1x1MDlkZFx1MDlkZl0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJCRU5HQUxJLU1BTEFZQUxBTSIsCisgICAgICAgICAgICJbOkJFTkdBTEk6XSIsICJbOk1BTEFZQUxBTTpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwZDQ2XHUwZDRhXHUwZDQ3XHUwZDMxLVx1MGQzNVx1MGQwZVx1MGQxMl0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiR1VKQVJBVEktR1VSTVVLSEkiLAorICAgICAgICAgICJbOkdVSkFSQVRJOl0iLCAiWzpHVVJNVUtISTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBBMDJcdTBhYjNcdTBhYjZcdTBBNzBcdTBhNzFcdTBhODJcdTBhODNcdTBhYzNcdTBhYzRcdTBhYzVcdTBhYzlcdTBhNWNcdTBhNzJcdTBhNzNcdTBhNzRcdTBhOGJcdTBhOGRcdTBhOTFcdTBhYmRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiR1VSTVVLSEktR1VKQVJBVEkiLAorICAgICAgICAgICAiWzpHVVJNVUtISTpdIiwgIls6R1VKQVJBVEk6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGFiM1x1MGFiNlx1MEE3MFx1MGE3MVx1MGE4Mlx1MGE4M1x1MGFjM1x1MGFjNFx1MGFjNVx1MGFjOVx1MGE1Y1x1MGE3Mlx1MGE3M1x1MGE3NFx1MGE4Ylx1MGE4ZFx1MGE5MVx1MGFiN1x1MGFiZFx1MGFkMFx1MGFlMF0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiT1JJWUEtR1VSTVVLSEkiLAorICAgICAgICAgICJbOk9SSVlBOl0iLCAiWzpHVVJNVUtISTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBBMDJcdTBhNWNcdTBhMjFcdTBhNDdcdTBhNzFcdTBiMDJcdTBiMDNcdTBiMzNcdTBiMzZcdTBiNDNcdTBiNTZcdTBiNTdcdTBCMEJcdTBCMENcdTBCMzdcdTBCM0RcdTBCNUZcdTBCNjBcdTBCNjFcdTBhMzVcdTBhNzJcdTBhNzNcdTBhNzRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiR1VSTVVLSEktT1JJWUEiLAorICAgICAgICAgICAiWzpHVVJNVUtISTpdIiwgIls6T1JJWUE6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGE3MVx1MGIwMlx1MGIwM1x1MGIzM1x1MGIzNlx1MGI0M1x1MGI1Nlx1MGI1N1x1MEIwQlx1MEIwQ1x1MEIzN1x1MEIzRFx1MEI1Rlx1MEI2MFx1MEI2MV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVEFNSUwtR1VSTVVLSEkiLAorICAgICAgICAgICJbOlRBTUlMOl0iLCAiWzpHVVJNVUtISTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBBMDJcdTBhMzNcdTBhMzZcdTBhM2NcdTBhNzBcdTBhNzFcdTBhNDdcdTBBMTZcdTBBMTdcdTBBMThcdTBBMUJcdTBBMURcdTBBMjBcdTBBMjFcdTBBMjJcdTBBMjVcdTBBMjZcdTBBMjdcdTBBMkJcdTBBMkNcdTBBMkRcdTBBNTlcdTBBNUFcdTBBNUJcdTBBNUNcdTBBNUVcdTBBNzJcdTBBNzNcdTBBNzRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiR1VSTVVLSEktVEFNSUwiLAorICAgICAgICAgICAiWzpHVVJNVUtISTpdIiwgIls6VEFNSUw6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGI4Mlx1MGJjNlx1MGJjYVx1MGJkN1x1MGJiN1x1MGJiM1x1MGI4M1x1MEI4RVx1MEI5Mlx1MEJBOVx1MEJCMVx1MEJCNF0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVEVMVUdVLUdVUk1VS0hJIiwKKyAgICAgICAgICAiWzpURUxVR1U6XSIsICJbOkdVUk1VS0hJOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MEEwMlx1MGEzM1x1MGEzNlx1MGEzY1x1MGE3MFx1MGE3MVx1MEE1OVx1MEE1QVx1MEE1Qlx1MEE1Q1x1MEE1RVx1MEE3Mlx1MEE3M1x1MEE3NF0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJHVVJNVUtISS1URUxVR1UiLAorICAgICAgICAgICAiWzpHVVJNVUtISTpdIiwgIls6VEVMVUdVOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBjMDJcdTBjMDNcdTBjMzNcdTBjMzZcdTBjNDRcdTBjNDNcdTBjNDZcdTBjNGFcdTBjNTZcdTBjNTVcdTBDMEJcdTBDMENcdTBDMEVcdTBDMTJcdTBDMzFcdTBDMzdcdTBDNjBcdTBDNjFdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJLQU5OQURBLUdVUk1VS0hJIiwKKyAgICAgICAgICAiWzpLQU5OQURBOl0iLCAiWzpHVVJNVUtISTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBBMDJcdTBhMzNcdTBhMzZcdTBhM2NcdTBhNzBcdTBhNzFcdTBBNTlcdTBBNUFcdTBBNUJcdTBBNUNcdTBBNUVcdTBBNzJcdTBBNzNcdTBBNzRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiR1VSTVVLSEktS0FOTkFEQSIsCisgICAgICAgICAgICJbOkdVUk1VS0hJOl0iLCAiWzpLQU5OQURBOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBjODJcdTBjODNcdTBjYjNcdTBjYjZcdTBjYzRcdTBjYzNcdTBjYzZcdTBjY2FcdTBjZDVcdTBjZDZcdTBDOEJcdTBDOENcdTBDOEVcdTBDOTJcdTBDQjFcdTBDQjdcdTBDRTBcdTBDRTFdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIk1BTEFZQUxBTS1HVVJNVUtISSIsCisgICAgICAgICAgIls6TUFMQVlBTEFNOl0iLCAiWzpHVVJNVUtISTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBBMDJcdTBhNGJcdTBhNGNcdTBhMzNcdTBhMzZcdTBhM2NcdTBhNzBcdTBhNzFcdTBBNTlcdTBBNUFcdTBBNUJcdTBBNUNcdTBBNUVcdTBBNzJcdTBBNzNcdTBBNzRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiR1VSTVVLSEktTUFMQVlBTEFNIiwKKyAgICAgICAgICAgIls6R1VSTVVLSEk6XSIsICJbOk1BTEFZQUxBTTpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwZDAyXHUwZDAzXHUwZDMzXHUwZDM2XHUwZDQzXHUwZDQ2XHUwZDRhXHUwZDRjXHUwZDU3XHUwRDBCXHUwRDBDXHUwRDBFXHUwRDEyXHUwRDMxXHUwRDM0XHUwRDM3XHUwRDYwXHUwRDYxXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJHVUpBUkFUSS1PUklZQSIsCisgICAgICAgICAgIls6R1VKQVJBVEk6XSIsICJbOk9SSVlBOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MGI1Nlx1MGI1N1x1MEIwQ1x1MEI1Rlx1MEI2MV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJPUklZQS1HVUpBUkFUSSIsCisgICAgICAgICAgICJbOk9SSVlBOl0iLCAiWzpHVUpBUkFUSTpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwQWM0XHUwQWM1XHUwQWM5XHUwQWM3XHUwQThEXHUwQTkxXHUwQUI1XHUwQWQwXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJUQU1JTC1HVUpBUkFUSSIsCisgICAgICAgICAgIls6VEFNSUw6XSIsICJbOkdVSkFSQVRJOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MEE4MVx1MGFiY1x1MGFjM1x1MEFjNFx1MEFjNVx1MEFjOVx1MEFjN1x1MEE4Qlx1MEE4RFx1MEE5MVx1MEE5Nlx1MEE5N1x1MEE5OFx1MEE5Qlx1MEE5RFx1MEFBMFx1MEFBMVx1MEFBMlx1MEFBNVx1MEFBNlx1MEFBN1x1MEFBQlx1MEFBQ1x1MEFBRFx1MEFCNlx1MEFCRFx1MEFEMFx1MEFFMF0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJHVUpBUkFUSS1UQU1JTCIsCisgICAgICAgICAgICJbOkdVSkFSQVRJOl0iLCAiWzpUQU1JTDpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwQmM2XHUwQmNhXHUwQmQ3XHUwQjhFXHUwQjkyXHUwQkE5XHUwQkIxXHUwQkI0XSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJURUxVR1UtR1VKQVJBVEkiLAorICAgICAgICAgICJbOlRFTFVHVTpdIiwgIls6R1VKQVJBVEk6XSIsIAorICAgICAgICAgICAgICAgICJbXHUwYWJjXHUwQWM1XHUwQWM5XHUwQThEXHUwQTkxXHUwQUJEXHUwQWQwXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgIH0sCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkdVSkFSQVRJLVRFTFVHVSIsCisgICAgICAgICAgICJbOkdVSkFSQVRJOl0iLCAiWzpURUxVR1U6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGM0Nlx1MGM0YVx1MGM1NVx1MGM1Nlx1MEMwQ1x1MEMwRVx1MEMxMlx1MEMzMVx1MEM2MV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiS0FOTkFEQS1HVUpBUkFUSSIsCisgICAgICAgICAgIls6S0FOTkFEQTpdIiwgIls6R1VKQVJBVEk6XSIsIAorICAgICAgICAgICAgICAgICJbXHUwQTgxXHUwYWJjXHUwQWM1XHUwQWM5XHUwQThEXHUwQTkxXHUwQUJEXHUwQWQwXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgIH0sCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkdVSkFSQVRJLUtBTk5BREEiLAorICAgICAgICAgICAiWzpHVUpBUkFUSTpdIiwgIls6S0FOTkFEQTpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwY2M2XHUwY2NhXHUwY2Q1XHUwY2Q2XHUwQzhDXHUwQzhFXHUwQzkyXHUwQ0IxXHUwQ0RFXHUwQ0UxXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJNQUxBWUFMQU0tR1VKQVJBVEkiLAorICAgICAgICAgICJbOk1BTEFZQUxBTTpdIiwgIls6R1VKQVJBVEk6XSIsIAorICAgICAgICAgICAgICAgICJbXHUwQTgxXHUwYWM0XHUwYWNiXHUwYWNjXHUwYWJjXHUwQWM1XHUwQWM5XHUwQThEXHUwQTkxXHUwQUJEXHUwQWQwXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgIH0sCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkdVSkFSQVRJLU1BTEFZQUxBTSIsCisgICAgICAgICAgICJbOkdVSkFSQVRJOl0iLCAiWzpNQUxBWUFMQU06XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGQ0Nlx1MGQ0YVx1MGQ0Y1x1MGQ1NVx1MGQ1N1x1MEQwQ1x1MEQwRVx1MEQxMlx1MEQzMVx1MEQzNFx1MEQ2MV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVEFNSUwtT1JJWUEiLAorICAgICAgICAgICJbOlRBTUlMOl0iLCAiWzpPUklZQTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBCMDFcdTBiM2NcdTBiNDNcdTBiNTZcdTBCMEJcdTBCMENcdTBCMTZcdTBCMTdcdTBCMThcdTBCMUJcdTBCMURcdTBCMjBcdTBCMjFcdTBCMjJcdTBCMjVcdTBCMjZcdTBCMjdcdTBCMkJcdTBCMkNcdTBCMkRcdTBCMzZcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUZcdTBCNjBcdTBCNjFdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiT1JJWUEtVEFNSUwiLAorICAgICAgICAgICAiWzpPUklZQTpdIiwgIls6VEFNSUw6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGJjNlx1MGJjYVx1MGJjN1x1MEI4RVx1MEI5Mlx1MEJBOVx1MEJCMVx1MEJCNFx1MEJCNV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVEVMVUdVLU9SSVlBIiwKKyAgICAgICAgICAiWzpURUxVR1U6XSIsICJbOk9SSVlBOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MGIzY1x1MGI1N1x1MGI1Nlx1MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Rl0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJPUklZQS1URUxVR1UiLAorICAgICAgICAgICAiWzpPUklZQTpdIiwgIls6VEVMVUdVOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBjNDRcdTBjNDZcdTBjNGFcdTBjNTVcdTBjNDdcdTBDMEVcdTBDMTJcdTBDMzFcdTBDMzVdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIktBTk5BREEtT1JJWUEiLAorICAgICAgICAgICJbOktBTk5BREE6XSIsICJbOk9SSVlBOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MEIwMVx1MGIzY1x1MGI1N1x1MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Rl0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJPUklZQS1LQU5OQURBIiwKKyAgICAgICAgICAgIls6T1JJWUE6XSIsICJbOktBTk5BREE6XSIsCisgICAgICAgICAgICAgICAgICAiW1x1MGNjNFx1MGNjNlx1MGNjYVx1MGNkNVx1MGNjN1x1MEM4RVx1MEM5Mlx1MENCMVx1MENCNVx1MENERV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiTUFMQVlBTEFNLU9SSVlBIiwKKyAgICAgICAgICAiWzpNQUxBWUFMQU06XSIsICJbOk9SSVlBOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MEIwMVx1MGIzY1x1MGI1Nlx1MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Rl0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJPUklZQS1NQUxBWUFMQU0iLAorICAgICAgICAgICAiWzpPUklZQTpdIiwgIls6TUFMQVlBTEFNOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBENDdcdTBENDZcdTBENGFcdTBEMEVcdTBEMTJcdTBEMzFcdTBEMzRcdTBEMzVdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIlRFTFVHVS1UQU1JTCIsCisgICAgICAgICAgIls6VEVMVUdVOl0iLCAiWzpUQU1JTDpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBiZDdcdTBiYTlcdTBiYjRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVEFNSUwtVEVMVUdVIiwKKyAgICAgICAgICAgIls6VEFNSUw6XSIsICJbOlRFTFVHVTpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwQzAxXHUwYzQzXHUwYzQ0XHUwYzQ2XHUwYzQ3XHUwYzU1XHUwYzU2XHUwYzY2XHUwQzBCXHUwQzBDXHUwQzE2XHUwQzE3XHUwQzE4XHUwQzFCXHUwQzFEXHUwQzIwXHUwQzIxXHUwQzIyXHUwQzI1XHUwQzI2XHUwQzI3XHUwQzJCXHUwQzJDXHUwQzJEXHUwQzM2XHUwQzYwXHUwQzYxXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJLQU5OQURBLVRBTUlMIiwKKyAgICAgICAgICAiWzpLQU5OQURBOl0iLCAiWzpUQU1JTDpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBiZDdcdTBiYzZcdTBiYTlcdTBiYjRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVEFNSUwtS0FOTkFEQSIsCisgICAgICAgICAgICJbOlRBTUlMOl0iLCAiWzpLQU5OQURBOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBjYzNcdTBjYzRcdTBjYzZcdTBjYzdcdTBjZDVcdTBjZDZcdTBDOEJcdTBDOENcdTBDOTZcdTBDOTdcdTBDOThcdTBDOUJcdTBDOURcdTBDQTBcdTBDQTFcdTBDQTJcdTBDQTVcdTBDQTZcdTBDQTdcdTBDQUJcdTBDQUNcdTBDQURcdTBDQjZcdTBDREVcdTBDRTBcdTBDRTFdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIk1BTEFZQUxBTS1UQU1JTCIsCisgICAgICAgICAgIls6TUFMQVlBTEFNOl0iLCAiWzpUQU1JTDpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBiYTldIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVEFNSUwtTUFMQVlBTEFNIiwKKyAgICAgICAgICAgIls6VEFNSUw6XSIsICJbOk1BTEFZQUxBTTpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwZDQzXHUwZDEyXHUwRDBCXHUwRDBDXHUwRDE2XHUwRDE3XHUwRDE4XHUwRDFCXHUwRDFEXHUwRDIwXHUwRDIxXHUwRDIyXHUwRDI1XHUwRDI2XHUwRDI3XHUwRDJCXHUwRDJDXHUwRDJEXHUwRDM2XHUwRDYwXHUwRDYxXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJLQU5OQURBLVRFTFVHVSIsCisgICAgICAgICAgIls6S0FOTkFEQTpdIiwgIls6VEVMVUdVOl0iLCAKKyAgICAgICAgICAgICAgICAiW1x1MEMwMVx1MGMzZlx1MGM0Nlx1MGM0OFx1MGM0YV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJURUxVR1UtS0FOTkFEQSIsCisgICAgICAgICAgICJbOlRFTFVHVTpdIiwgIls6S0FOTkFEQTpdIiwKKyAgICAgICAgICAgICAgICAgICJbXHUwY2M4XHUwY2Q1XHUwY2Q2XHUwQ0RFXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJNQUxBWUFMQU0tVEVMVUdVIiwKKyAgICAgICAgICAiWzpNQUxBWUFMQU06XSIsICJbOlRFTFVHVTpdIiwgCisgICAgICAgICAgICAgICAgIltcdTBDMDFcdTBjNDRcdTBjNGFcdTBjNGNcdTBjNGJcdTBjNTVcdTBjNTZdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiVEVMVUdVLU1BTEFZQUxBTSIsCisgICAgICAgICAgICJbOlRFTFVHVTpdIiwgIls6TUFMQVlBTEFNOl0iLAorICAgICAgICAgICAgICAgICAgIltcdTBkNGNcdTBkNTdcdTBEMzRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIk1BTEFZQUxBTS1LQU5OQURBIiwKKyAgICAgICAgICAiWzpNQUxBWUFMQU06XSIsICJbOktBTk5BREE6XSIsIAorICAgICAgICAgICAgICAgICJbXHUwY2M0XHUwY2M2XHUwY2NhXHUwY2NjXHUwY2NiXHUwY2Q1XHUwY2Q2XHUwY0RlXSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgIH0sCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkxhdGluLUJlbmdhbGkiLAorICAgICAgICAgICAgbGF0aW5Gb3JJbmRpYywgIltbOkJlbmdhbGk6XVtcdTA5NjRcdTA5NjVdXSIsIAorICAgICAgICAgICAgICAgIltcdTA5NjVcdTA5ZjBcdTA5ZjFcdTA5NjVdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiTGF0aW4tR3VybXVraGkiLAorICAgICAgICAgICBsYXRpbkZvckluZGljLCAiW1s6R3VybXVraGk6XVtcdTA5NjRcdTA5NjVdXSIsIAorICAgICAgICAgICAgICAgIltcdTBhMDJcdTA5NjVcdTBhNzJcdTBhNzNcdTBhNzRdIiwgLypyb3VuZHRyaXAgZXhjbHVzaW9ucyovCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiTGF0aW4tR3VqYXJhdGkiLAorICAgICAgICAgICAgbGF0aW5Gb3JJbmRpYywgIltbOkd1amFyYXRpOl1bXHUwOTY0XHUwOTY1XV0iLCAKKyAgICAgICAgICAgICAgICJbXHUwOTY1XSIsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgIH0sCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkxhdGluLU9yaXlhIiwKKyAgICAgICAgICAgIGxhdGluRm9ySW5kaWMsICJbWzpPcml5YTpdW1x1MDk2NFx1MDk2NV1dIiwgCisgICAgICAgICAgICAgICAiW1x1MDk2NV0iLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJMYXRpbi1UYW1pbCIsCisgICAgICAgICAgICBsYXRpbkZvckluZGljLCAiWzpUYW1pbDpdIiwgCisgICAgICAgICAgICAgICBudWxsLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICBuZXcgU3RyaW5nIFtdIHsgICJMYXRpbi1UZWx1Z3UiLAorICAgICAgICAgICAgbGF0aW5Gb3JJbmRpYywgIls6VGVsdWd1Ol0iLCAKKyAgICAgICAgICAgICAgIG51bGwsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgIH0sCisgICAgICAgIG5ldyBTdHJpbmcgW10geyAgIkxhdGluLUthbm5hZGEiLAorICAgICAgICAgICAgbGF0aW5Gb3JJbmRpYywgIls6S2FubmFkYTpdIiwgCisgICAgICAgICAgICAgICBudWxsLCAvKnJvdW5kdHJpcCBleGNsdXNpb25zKi8KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgbmV3IFN0cmluZyBbXSB7ICAiTGF0aW4tTWFsYXlhbGFtIiwKKyAgICAgICAgICAgbGF0aW5Gb3JJbmRpYywgIls6TWFsYXlhbGFtOl0iLCAKKyAgICAgICAgICAgICAgIG51bGwsIC8qcm91bmR0cmlwIGV4Y2x1c2lvbnMqLworICAgICAgICAgICAgICAgIH0sCisgICAgICAgIH07CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0SW50ZXJJbmRpYygpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIGludCBudW0gPSBhcnJheS5sZW5ndGg7CisgICAgICAgIGlmIChpc1F1aWNrKCkpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJUZXN0aW5nIG9ubHkgNSBvZiAiKyBhcnJheS5sZW5ndGgrIiBTa2lwcGluZyByZXN0ICh1c2UgLWUgZm9yIGV4aGF1c3RpdmUpIik7CisgICAgICAgICAgICBudW0gPSA1OworICAgICAgICB9CisgICAgICAgIGZvcihpbnQgaT0wOyBpPG51bTtpKyspeworICAgICAgICAgICBsb2dsbigiVGVzdGluZyAiICsgYXJyYXlbaV1bMF0gKyAiIGF0IGluZGV4ICIgKyBpICAgKTsKKyAgICAgICAgICAgbmV3IFRlc3QoYXJyYXlbaV1bMF0pCisgICAgICAgICAgICAgICAgLnRlc3QoYXJyYXlbaV1bMV0sIGFycmF5W2ldWzJdLCAKKyAgICAgICAgICAgICAgICBhcnJheVtpXVszXSwKKyAgICAgICAgICAgICAgICB0aGlzLCBuZXcgTGVnYWxJbmRpYygpKTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEVuZCBJbmRpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBMZWdhbCB7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzKFN0cmluZyBzb3VyY2VTdHJpbmcpIHtyZXR1cm4gdHJ1ZTt9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTGVnYWxKYW1vIGV4dGVuZHMgTGVnYWwgeworICAgICAgICAvLyBhbnkgaW5pdGlhbCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgbWVkaWFsIChvciBpbml0aWFsKQorICAgICAgICAvLyBhbnkgbWVkaWFsIG11c3QgZm9sbG93IGFuIGluaXRpYWwgKG9yIG1lZGlhbCkKKyAgICAgICAgLy8gYW55IGZpbmFsIG11c3QgZm9sbG93IGEgbWVkaWFsIChvciBmaW5hbCkKKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzKFN0cmluZyBzb3VyY2VTdHJpbmcpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaW50IHQ7CisgICAgICAgICAgICAgICAgU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKHNvdXJjZVN0cmluZywgTm9ybWFsaXplci5ORkQpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjb21wLmxlbmd0aCgpOyArK2kpIHsgLy8gZG9uJ3Qgd29ycnkgYWJvdXQgc3Vycm9nYXRlcworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoZGVjb21wLmNoYXJBdChpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGdldFR5cGUoZGVjb21wLmNoYXJBdChpKzEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICE9IDAgJiYgdCAhPSAxKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGdldFR5cGUoZGVjb21wLmNoYXJBdChpLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICE9IDAgJiYgdCAhPSAxKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGdldFR5cGUoZGVjb21wLmNoYXJBdChpLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICE9IDEgJiYgdCAhPSAyKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIGludCBnZXRUeXBlKGNoYXIgYykgeworICAgICAgICAgICAgaWYgKCdcdTExMDAnIDw9IGMgJiYgYyA8PSAnXHUxMTEyJykgcmV0dXJuIDA7CisgICAgICAgICAgICBlbHNlIGlmICgnXHUxMTYxJyA8PSBjICYmIGMgIDw9ICdcdTExNzUnKSByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCdcdTExQTgnIDw9IGMgJiYgYyAgPD0gJ1x1MTFDMicpIHJldHVybiAyOworICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBvdGhlcgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBCcmVha0l0ZXJhdG9yIHRoYWlCcmVhayA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKG5ldyBMb2NhbGUoInRoIiwgIlRIIikpOworICAgIC8vIGFueXRoaW5nIGlzIGxlZ2FsIGV4Y2VwdCB3b3JkIGVuZGluZyB3aXRoIExvZ2ljYWwtb3JkZXItZXhjZXB0aW9uCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBMZWdhbFRoYWkgZXh0ZW5kcyBMZWdhbCB7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzKFN0cmluZyBzb3VyY2VTdHJpbmcpIHsKKyAgICAgICAgICAgIGlmIChzb3VyY2VTdHJpbmcubGVuZ3RoKCkgPT0gMCkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjaGFyIGNoID0gc291cmNlU3RyaW5nLmNoYXJBdChzb3VyY2VTdHJpbmcubGVuZ3RoKCkgLSAxKTsgLy8gZG9uJ3Qgd29ycnkgYWJvdXQgc3Vycm9nYXRlcy4KKyAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmhhc0JpbmFyeVByb3BlcnR5KGNoLCBVUHJvcGVydHkuTE9HSUNBTF9PUkRFUl9FWENFUFRJT04pKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gZGlzYWxsb3cgYW55dGhpbmcgd2l0aCBhIHdvcmRicmVhayBiZXR3ZWVuCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgaWYgKFVURjE2LmNvdW50Q29kZVBvaW50KHNvdXJjZVN0cmluZykgPD0gMSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB0aGFpQnJlYWsuc2V0VGV4dChzb3VyY2VTdHJpbmcpOworICAgICAgICAgICAgZm9yIChpbnQgcG9zID0gdGhhaUJyZWFrLmZpcnN0KCk7IHBvcyAhPSBCcmVha0l0ZXJhdG9yLkRPTkU7IHBvcyA9IHRoYWlCcmVhay5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocG9zID4gMCAmJiBwb3MgPCBzb3VyY2VTdHJpbmcubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTa2lwcGluZyAiICsgVXRpbGl0eS5lc2NhcGUoc291cmNlU3RyaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqLworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gYW55dGhpbmcgaXMgbGVnYWwgZXhjZXB0IHRoYXQgRmluYWwgbGV0dGVycyBjYW4ndCBiZSBmb2xsb3dlZCBieSBsZXR0ZXI7IE5vbkZpbmFsIG11c3QgYmUKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIExlZ2FsSGVicmV3IGV4dGVuZHMgTGVnYWwgeworICAgICAgICBzdGF0aWMgVW5pY29kZVNldCBGSU5BTCA9IG5ldyBVbmljb2RlU2V0KCJbXHUwNURBXHUwNUREXHUwNURGXHUwNUUzXHUwNUU1XSIpOworICAgICAgICBzdGF0aWMgVW5pY29kZVNldCBOT05fRklOQUwgPSBuZXcgVW5pY29kZVNldCgiW1x1MDVEQlx1MDVERVx1MDVFMFx1MDVFNFx1MDVFNl0iKTsKKyAgICAgICAgc3RhdGljIFVuaWNvZGVTZXQgTEVUVEVSID0gbmV3IFVuaWNvZGVTZXQoIls6bGV0dGVyOl0iKTsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXMoU3RyaW5nIHNvdXJjZVN0cmluZykgeworICAgICAgICAgICAgaWYgKHNvdXJjZVN0cmluZy5sZW5ndGgoKSA9PSAwKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIC8vIGRvbid0IHdvcnJ5IGFib3V0IHN1cnJvZ2F0ZXMuCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZVN0cmluZy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgY2hhciBjaCA9IHNvdXJjZVN0cmluZy5jaGFyQXQoaSk7CisgICAgICAgICAgICAgICAgY2hhciBuZXh0ID0gaSsxID09IHNvdXJjZVN0cmluZy5sZW5ndGgoKSA/ICdcdTAwMDAnIDogc291cmNlU3RyaW5nLmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICBpZiAoRklOQUwuY29udGFpbnMoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChMRVRURVIuY29udGFpbnMobmV4dCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE5PTl9GSU5BTC5jb250YWlucyhjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFMRVRURVIuY29udGFpbnMobmV4dCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9ICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIExlZ2FsR3JlZWsgZXh0ZW5kcyBMZWdhbCB7CisgICAgICAgIAorICAgICAgICBib29sZWFuIGZ1bGw7CisgICAgICAgIAorICAgICAgICBwdWJsaWMgTGVnYWxHcmVlayhib29sZWFuIGZ1bGwpIHsKKyAgICAgICAgICAgIHRoaXMuZnVsbCA9IGZ1bGw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBmaW5hbCBjaGFyIElPVEFfU1VCU0NSSVBUID0gJ1x1MDM0NSc7CisgICAgICAgIHN0YXRpYyBmaW5hbCBVbmljb2RlU2V0IGJyZWF0aGluZyA9IG5ldyBVbmljb2RlU2V0KCJbXFx1MDMxM1xcdTAzMTQnXSIpOworICAgICAgICBzdGF0aWMgZmluYWwgVW5pY29kZVNldCB2YWxpZFNlY29uZFZvd2VsID0gbmV3IFVuaWNvZGVTZXQoIltcXHUwM0M1XFx1MDNCOVxcdTAzQTVcXHUwMzk5XSIpOworICAgICAgICAKKyAgICAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVm93ZWwoY2hhciBjKSB7CisgICAgICAgICAgICByZXR1cm4gIlx1MDNCMVx1MDNCNVx1MDNCN1x1MDNCOVx1MDNCRlx1MDNDNVx1MDNDOVx1MDM5MVx1MDM5NVx1MDM5N1x1MDM5OVx1MDM5Rlx1MDNBNVx1MDNBOSIuaW5kZXhPZihjKSA+PSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSaG8oY2hhciBjKSB7CisgICAgICAgICAgICByZXR1cm4gIlx1MDNDMVx1MDNBMSIuaW5kZXhPZihjKSA+PSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpcyhTdHJpbmcgc291cmNlU3RyaW5nKSB7IAorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGVjb21wID0gTm9ybWFsaXplci5ub3JtYWxpemUoc291cmNlU3RyaW5nLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gbW9kZXJuIGlzIHNpbXBsZXI6IGRvbid0IGNhcmUgYWJvdXQgYW55dGhpbmcgYnV0IGEgZ3JhdmUKKyAgICAgICAgICAgICAgICBpZiAoIWZ1bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9pZiAoc291cmNlU3RyaW5nLmVxdWFscygiXHUwMzlDXHUwM0MwIikpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNvbXAubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjID0gZGVjb21wLmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGUgYWxsIHRoZSBhY2NlbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXHUwMzEzJyB8fCBjID09ICdcdTAzMTQnIHx8IGMgPT0gJ1x1MDMwMCcgfHwgYyA9PSAnXHUwMzAyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGMgPT0gJ1x1MDM0MicgfHwgYyA9PSAnXHUwMzQ1JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBMZWdhbCBmdWxsIEdyZWVrIGhhcyBicmVhdGhpbmcgbWFya3MgSUZGIHRoZXJlIGlzIGEgdm93ZWwgb3IgUkhPIGF0IHRoZSBzdGFydAorICAgICAgICAgICAgICAgIC8vIElGIGl0IGhhcyB0aGVtLCBpdCBoYXMgZXhhY3RseSBvbmUuCisgICAgICAgICAgICAgICAgLy8gSUYgaXQgc3RhcnRzIHdpdGggYSBSSE8sIHRoZW4gdGhlIGJyZWF0aGluZyBtYXJrIG11c3QgY29tZSBiZWZvcmUgdGhlIHNlY29uZCBsZXR0ZXIuCisgICAgICAgICAgICAgICAgLy8gSUYgaXQgc3RhcnRzIHdpdGggYSB2b3dlbCwgdGhlbiBpdCBtdXN0IGJlZm9yZSB0aGUgdGhpcmQgbGV0dGVyLgorICAgICAgICAgICAgICAgIC8vCWl0IHdpbGwgb25seSBjb21lIGFmdGVyIHRoZSBzZWNvbmQgaWYgb2YgdGhlIGZvcm1hdCBbdm93ZWxdIFtubyBpb3RhIHN1YnNjcmlwdCFdIFt1cHNpbG9uIG9yIGlvdGFdCisgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlcmUgYXJlIG5vIHN1cnJvZ2F0ZXMgaW4gZ3JlZWssIGRvbid0IHdvcnJ5IGFib3V0IHRoZW0KKworICAgICAgICAgICAgICAgIGJvb2xlYW4gZmlyc3RJc1Zvd2VsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBmaXJzdElzUmhvID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBub0xldHRlcllldCA9IHRydWU7CisgICAgICAgICAgICAgICAgaW50IGJyZWF0aGluZ0NvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgbGV0dGVyQ291bnQgPSAwOworICAgICAgICAgICAgICAgIGludCBicmVhdGhpbmdQb3NpdGlvbiA9IC0xOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjb21wLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBjID0gZGVjb21wLmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNMZXR0ZXIoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrbGV0dGVyQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RJc1Zvd2VsICYmICF2YWxpZFNlY29uZFZvd2VsLmNvbnRhaW5zKGMpICYmIGJyZWF0aGluZ0NvdW50ID09IDApIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub0xldHRlcllldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vTGV0dGVyWWV0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJc1Zvd2VsID0gaXNWb3dlbChjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdElzUmhvID0gaXNSaG8oYyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RJc1JobyAmJiBsZXR0ZXJDb3VudCA9PSAyICYmIGJyZWF0aGluZ0NvdW50ID09IDApIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSBJT1RBX1NVQlNDUklQVCAmJiBmaXJzdElzVm93ZWwgJiYgYnJlYXRoaW5nQ291bnQgPT0gMCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYXRoaW5nLmNvbnRhaW5zKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIAlicmVhdGhpbmdQb3NpdGlvbiA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICArK2JyZWF0aGluZ0NvdW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChmaXJzdElzVm93ZWwgfHwgZmlyc3RJc1JobykgcmV0dXJuIGJyZWF0aGluZ0NvdW50ID09IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyZWF0aGluZ0NvdW50ID09IDA7CisgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiAiICsgdC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjbGFzcyBUZXN0IHsKKyAgICAKKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0OworICAgIAorICAgICAgICBwcml2YXRlIFN0cmluZyB0cmFuc2xpdGVyYXRvcklEOyAKKyAgICAgICAgcHJpdmF0ZSBpbnQgZXJyb3JMaW1pdCA9IDUwMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgZXJyb3JDb3VudCA9IDA7CisgICAgICAgIHByaXZhdGUgaW50IHBhaXJMaW1pdCAgPSAweDEwMDAwOworICAgICAgICBVbmljb2RlU2V0IHNvdXJjZVJhbmdlOworICAgICAgICBVbmljb2RlU2V0IHRhcmdldFJhbmdlOworICAgICAgICBVbmljb2RlU2V0IHRvU291cmNlOworICAgICAgICBVbmljb2RlU2V0IHRvVGFyZ2V0OworICAgICAgICBVbmljb2RlU2V0IHJvdW5kdHJpcEV4Y2x1c2lvbnM7CisgICAgICAgIAorICAgICAgICBSb3VuZFRyaXBUZXN0IGxvZzsKKyAgICAgICAgTGVnYWwgbGVnYWxTb3VyY2U7CisgICAgICAgIFVuaWNvZGVTZXQgYmFkQ2hhcmFjdGVyczsKKyAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogY3JlYXRlIGEgdGVzdCBmb3IgdGhlIGdpdmVuIHNjcmlwdCB0cmFuc2xpdGVyYXRvci4KKyAgICAgICAgICovCisgICAgICAgIFRlc3QoU3RyaW5nIHRyYW5zbGl0ZXJhdG9ySUQpIHsKKyAgICAgICAgICAgIHRoaXMudHJhbnNsaXRlcmF0b3JJRCA9IHRyYW5zbGl0ZXJhdG9ySUQ7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgcHVibGljIHZvaWQgc2V0RXJyb3JMaW1pdChpbnQgbGltaXQpIHsKKyAgICAgICAgICAgIGVycm9yTGltaXQgPSBsaW1pdDsKKyAgICAgICAgfQorICAgIAorICAgICAgICBwdWJsaWMgdm9pZCBzZXRQYWlyTGltaXQoaW50IGxpbWl0KSB7CisgICAgICAgICAgICBwYWlyTGltaXQgPSBsaW1pdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQWRkZWQgdG8gZG8gYmV0dGVyIGVxdWFsaXR5IGNoZWNrLgorICAgICAgICAKKyAgICAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU2FtZShTdHJpbmcgYSwgU3RyaW5nIGIpIHsKKyAgICAgICAgICAgIGlmIChhLmVxdWFscyhiKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAoYS5lcXVhbHNJZ25vcmVDYXNlKGIpICYmIGlzQ2FtZWwoYSkpIHJldHVybiB0cnVlOworICAgICAgICAgICAgYSA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGEsIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgIGIgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShiLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICBpZiAoYS5lcXVhbHMoYikpIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKGEuZXF1YWxzSWdub3JlQ2FzZShiKSAmJiBpc0NhbWVsKGEpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaW5jbHVkZXNTb21lKFVuaWNvZGVTZXQgc2V0LCBTdHJpbmcgYSkgeworICAgICAgICAgICAgaW50IGNwOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aCgpOyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAgICAgICAgICAgICBjcCA9IFVURjE2LmNoYXJBdChhLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKGNwKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NhbWVsKFN0cmluZyBhKSB7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ2FtZWxUZXN0Iik7CisgICAgICAgICAgICAvLyBzZWUgaWYgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIGFCOyBlLmcuIGxvd2VyLCB0aGVuIHVwcGVyIG9yIHRpdGxlCisgICAgICAgICAgICBpbnQgY3A7CisgICAgICAgICAgICBib29sZWFuIGhhdmVMb3dlciA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aCgpOyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAgICAgICAgICAgICBjcCA9IFVURjE2LmNoYXJBdChhLCBpKTsKKyAgICAgICAgICAgICAgICBpbnQgdCA9IFVDaGFyYWN0ZXIuZ2V0VHlwZShjcCk7CisgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIHQgKyAiICIgKyBJbnRlZ2VyLnRvU3RyaW5nKGNwLDE2KSArICIgIiArIFVDaGFyYWN0ZXIuZ2V0TmFtZShjcCkpOworICAgICAgICAgICAgICAgIHN3aXRjaCAodCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5VUFBFUkNBU0VfTEVUVEVSOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmVMb3dlcikgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXIuVElUTEVDQVNFX0xFVFRFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlTG93ZXIpIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJvcCB0aHJvdWdoLCBzaW5jZSBzZWNvbmQgbGV0dGVyIGlzIGxvd2VyLgorICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5MT1dFUkNBU0VfTEVUVEVSOgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZUxvd2VyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUxTRSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZmluYWwgVW5pY29kZVNldCBva0FueXdheSA9IG5ldyBVbmljb2RlU2V0KCJbXls6TGV0dGVyOl1dIik7CisgICAgICAgIHN0YXRpYyBmaW5hbCBVbmljb2RlU2V0IG5ldmVyT2sgPSBuZXcgVW5pY29kZVNldCgiWzpPdGhlcjpdIik7CisgICAgICAKKyAgICAgICAgcHVibGljIHZvaWQgdGVzdChTdHJpbmcgc291cmNlUmFuZ2UsIFN0cmluZyB0YXJnZXRSYW5nZSwgCisgICAgICAgICAgU3RyaW5nIHJvdW5kdHJpcEV4Y2x1c2lvbnMsIFJvdW5kVHJpcFRlc3QgbG9nLCBMZWdhbCBsZWdhbFNvdXJjZSkgCisgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0ZXN0KHNvdXJjZVJhbmdlLCB0YXJnZXRSYW5nZSwgc291cmNlUmFuZ2UsIHJvdW5kdHJpcEV4Y2x1c2lvbnMsIGxvZywgbGVnYWxTb3VyY2UpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgdGVzdChTdHJpbmcgc291cmNlUmFuZ2UsIFN0cmluZyB0YXJnZXRSYW5nZSwgU3RyaW5nIGJhY2t0b1NvdXJjZVJhbmdlLAorICAgICAgICAgIFN0cmluZyByb3VuZHRyaXBFeGNsdXNpb25zLCBSb3VuZFRyaXBUZXN0IGxvZywgTGVnYWwgbGVnYWxTb3VyY2UpIAorICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb24geworICAgICAgICAgICAgCisgICAgICAgICAgICB0aGlzLmxlZ2FsU291cmNlID0gbGVnYWxTb3VyY2U7CisgICAgICAgICAgICB0aGlzLnNvdXJjZVJhbmdlID0gbmV3IFVuaWNvZGVTZXQoc291cmNlUmFuZ2UpOworICAgICAgICAgICAgdGhpcy5zb3VyY2VSYW5nZS5yZW1vdmVBbGwobmV2ZXJPayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0UmFuZ2UgPSBuZXcgVW5pY29kZVNldCh0YXJnZXRSYW5nZSk7CisgICAgICAgICAgICB0aGlzLnRhcmdldFJhbmdlLnJlbW92ZUFsbChuZXZlck9rKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhpcy50b1NvdXJjZSA9IG5ldyBVbmljb2RlU2V0KGJhY2t0b1NvdXJjZVJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMudG9Tb3VyY2UuYWRkQWxsKG9rQW55d2F5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhpcy50b1RhcmdldCA9IG5ldyBVbmljb2RlU2V0KHRhcmdldFJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMudG9UYXJnZXQuYWRkQWxsKG9rQW55d2F5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJvdW5kdHJpcEV4Y2x1c2lvbnMgIT0gbnVsbCAmJiByb3VuZHRyaXBFeGNsdXNpb25zLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIHRoaXMucm91bmR0cmlwRXhjbHVzaW9ucyA9IG5ldyBVbmljb2RlU2V0KHJvdW5kdHJpcEV4Y2x1c2lvbnMpOworICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgdGhpcy5yb3VuZHRyaXBFeGNsdXNpb25zID0gbmV3IFVuaWNvZGVTZXQoKTsgLy8gZW1wdHkKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5sb2cgPSBsb2c7CisKKyAgICAgICAgICAgIGxvZy5sb2dsbihVdGlsaXR5LmVzY2FwZSgiU291cmNlOiAgIiArIHRoaXMuc291cmNlUmFuZ2UpKTsKKyAgICAgICAgICAgIGxvZy5sb2dsbihVdGlsaXR5LmVzY2FwZSgiVGFyZ2V0OiAgIiArIHRoaXMudGFyZ2V0UmFuZ2UpKTsKKyAgICAgICAgICAgIGxvZy5sb2dsbihVdGlsaXR5LmVzY2FwZSgiRXhjbHVkZTogIiArIHRoaXMucm91bmR0cmlwRXhjbHVzaW9ucykpOworICAgICAgICAgICAgaWYgKGxvZy5pc1F1aWNrKCkpIGxvZy5sb2dsbigiQWJicmV2aWF0ZWQgVGVzdCIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBiYWRDaGFyYWN0ZXJzID0gbmV3IFVuaWNvZGVTZXQoIls6b3RoZXI6XSIpOworCisgICAgICAgICAgICAvLyBtYWtlIGEgVVRGLTggb3V0cHV0IGZpbGUgd2UgY2FuIHJlYWQgd2l0aCBhIGJyb3dzZXIKKworICAgICAgICAgICAgLy8gbm90ZTogY2hlY2sgdGhhdCBldmVyeSB0cmFuc2xpdGVyYXRvciB0cmFuc2xpdGVyYXRlcyB0aGUgbnVsbCBzdHJpbmcgY29ycmVjdGx5IQorCisgICAgICAgICAgICBTdHJpbmcgbG9nRmlsZU5hbWUgPSAidGVzdF8iICsgdHJhbnNsaXRlcmF0b3JJRC5yZXBsYWNlKCcvJywgJ18nKSArICIuaHRtbCI7CisKKyAgICAgICAgICAgIEZpbGUgbGYgPSBuZXcgRmlsZShsb2dGaWxlTmFtZSk7IAorICAgICAgICAgICAgbG9nLmxvZ2xuKCJDcmVhdGluZyBsb2cgZmlsZSAiICsgbGYuZ2V0QWJzb2x1dGVGaWxlKCkpOworCisgICAgICAgICAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIobmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVPdXRwdXRTdHJlYW0obG9nRmlsZU5hbWUpLCAiVVRGOCIpLCA0KjEwMjQpKTsKKyAgICAgICAgICAgIC8vb3V0LndyaXRlKCdcdUZGRUYnKTsgICAgLy8gQk9NCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTlwiPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxIVE1MPjxIRUFEPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIiBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZT48L0hFQUQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEJPRFkgYmdjb2xvcj0nI0ZGRkZGRicgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCBVbmljb2RlIE1TJz4iKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB0ZXN0MigpOworICAgICAgICAgICAgfSBjYXRjaCAoVGVzdFRydW5jYXRlZCBlKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT48L0hUTUw+Iik7CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKworICAgICAgICAgICAgaWYgKGVycm9yQ291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgbG9nLmVycmxuKHRyYW5zbGl0ZXJhdG9ySUQgKyAiIGVycm9yczogIiAKKyAgICAgICAgICAgICAgICAgICAgKyBlcnJvckNvdW50ICsgKGVycm9yQ291bnQgPiBlcnJvckxpbWl0ID8gIiAoYXQgbGVhc3QhKSIgOiAiIikKKyAgICAgICAgICAgICAgICAgICAgKyAiLCBzZWUgIiArIGxmLmdldEFic29sdXRlRmlsZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nLmxvZ2xuKHRyYW5zbGl0ZXJhdG9ySUQgKyAiIG9rIik7CisgICAgICAgICAgICAgICAgbmV3IEZpbGUobG9nRmlsZU5hbWUpLmRlbGV0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBvayBpZiBhdCBsZWFzdCBvbmUgaXMgbm90IGVxdWFsCisgICAgICAgIHB1YmxpYyBib29sZWFuIGNoZWNrSXJyZWxldmFudHMoVHJhbnNsaXRlcmF0b3IgdCwgU3RyaW5nIGlycmVsZXZhbnRzKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlycmVsZXZhbnRzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGMgPSBpcnJlbGV2YW50cy5jaGFyQXQoaSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNzID0gVVRGMTYudmFsdWVPZihjKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZyA9IHQudHJhbnNsaXRlcmF0ZShjcyk7CisgICAgICAgICAgICAgICAgaWYgKGNzLmVxdWFscyh0YXJnKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0MigpIHsKKworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3Igc291cmNlVG9UYXJnZXQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSh0cmFuc2xpdGVyYXRvcklEKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHRhcmdldFRvU291cmNlID0gc291cmNlVG9UYXJnZXQuZ2V0SW52ZXJzZSgpOworICAgICAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIHVzaSA9IG5ldyBVbmljb2RlU2V0SXRlcmF0b3IoKTsKKyAgICAgICAgICAgIFVuaWNvZGVTZXRJdGVyYXRvciB1c2kyID0gbmV3IFVuaWNvZGVTZXRJdGVyYXRvcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2cubG9nbG4oIkNoZWNraW5nIHRoYXQgYXQgbGVhc3Qgb25lIGlycmV2YW50IGNoYXJhY3RlcnMgaXMgbm90IE5GQydlZCIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIGlycmVsZXZhbnRzID0gIlx1MjAwMFx1MjAwMVx1MjEyNlx1MjEyQVx1MjEyQlx1MjMyOSI7IC8vIHN0cmluZyBpcyBmcm9tIE5GQ19OTyBpbiB0aGUgVUNECisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWNoZWNrSXJyZWxldmFudHMoc291cmNlVG9UYXJnZXQsIGlycmVsZXZhbnRzKSkgeworICAgICAgICAgICAgICAgIGxvZ0ZhaWxzKCJTb3VyY2UtVGFyZ2V0LCBNdXN0IG5vdCBORkMgZXZlcnl0aGluZyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjaGVja0lycmVsZXZhbnRzKHRhcmdldFRvU291cmNlLCBpcnJlbGV2YW50cykpIHsKKyAgICAgICAgICAgICAgICBsb2dGYWlscygiVGFyZ2V0LVNvdXJjZSwgaXJyZWxldmFudHMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKEVYVFJBX1RFU1RTKSB7CisgICAgICAgICAgICAgICAgbG9nLmxvZ2xuKCJDaGVja2luZyB0aGF0IHRvUnVsZXMgd29ya3MiKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcnVsZXMgPSAiIjsKKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciBzb3VyY2VUb1RhcmdldDI7CisgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdGFyZ2V0VG9Tb3VyY2UyOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gc291cmNlVG9UYXJnZXQudG9SdWxlcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZVRvVGFyZ2V0MiA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiczJ0MiIsIHJ1bGVzLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBSSU5UX1JVTEVTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgzPkZvcndhcmQgUnVsZXM6PC9oMz48cD4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKFRlc3RVdGlsaXR5LnJlcGxhY2UocnVsZXMsICJcbiIsICI8YnI+XG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9wPiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gdGFyZ2V0VG9Tb3VyY2UudG9SdWxlcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldFRvU291cmNlMiA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygidDJzMiIsIHJ1bGVzLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBSSU5UX1JVTEVTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgzPkJhY2t3YXJkIFJ1bGVzOjwvaDM+PHA+Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihUZXN0VXRpbGl0eS5yZXBsYWNlKHJ1bGVzLCAiXG4iLCAiPGJyPlxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvcD4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgzPkJyb2tlbiBSdWxlczo8L2gzPjxwPiIpOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihUZXN0VXRpbGl0eS5yZXBsYWNlKHJ1bGVzLCAiXG4iLCAiPGJyPlxuIikpOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9wPiIpOworICAgICAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpLnJlc2V0KHNvdXJjZVJhbmdlKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodXNpLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgYyA9IHVzaS5jb2RlcG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY3MgPSBVVEYxNi52YWx1ZU9mKGMpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZyA9IHNvdXJjZVRvVGFyZ2V0LnRyYW5zbGl0ZXJhdGUoY3MpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZzIgPSBzb3VyY2VUb1RhcmdldDIudHJhbnNsaXRlcmF0ZShjcyk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZy5lcXVhbHModGFyZzIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dUb1J1bGVzRmFpbHMoIlNvdXJjZS1UYXJnZXQsIHRvUnVsZXMiLCBjcywgdGFyZywgdGFyZzIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaS5yZXNldCh0YXJnZXRSYW5nZSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHVzaS5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGMgPSB1c2kuY29kZXBvaW50OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNzID0gVVRGMTYudmFsdWVPZihjKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmcgPSB0YXJnZXRUb1NvdXJjZS50cmFuc2xpdGVyYXRlKGNzKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmcyID0gdGFyZ2V0VG9Tb3VyY2UyLnRyYW5zbGl0ZXJhdGUoY3MpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmcuZXF1YWxzKHRhcmcyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nVG9SdWxlc0ZhaWxzKCJUYXJnZXQtU291cmNlLCB0b1J1bGVzIiwgY3MsIHRhcmcsIHRhcmcyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorCisgICAgICAgICAgICBsb2cubG9nbG4oIkNoZWNraW5nIHRoYXQgc291cmNlIGNoYXJhY3RlcnMgY29udmVydCB0byB0YXJnZXQgLSBTaW5nbGVzIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFVuaWNvZGVTZXQgZmFpbFNvdXJjZVRhcmcgPSBuZXcgVW5pY29kZVNldCgpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgZm9yIChjaGFyIGMgPSAwOyBjIDwgMHhGRkZGOyArK2MpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZVJhbmdlLmNvbnRhaW5zKGMpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgdXNpLnJlc2V0KHNvdXJjZVJhbmdlKTsKKyAgICAgICAgICAgIHdoaWxlICh1c2kubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaW50IGMgPSB1c2kuY29kZXBvaW50OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cmluZyBjcyA9IFVURjE2LnZhbHVlT2YoYyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmcgPSBzb3VyY2VUb1RhcmdldC50cmFuc2xpdGVyYXRlKGNzKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRvVGFyZ2V0LmNvbnRhaW5zQWxsKHRhcmcpIAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmFkQ2hhcmFjdGVycy5jb250YWluc1NvbWUodGFyZykpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdEID0gTm9ybWFsaXplci5ub3JtYWxpemUodGFyZywgTm9ybWFsaXplci5ORkQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRvVGFyZ2V0LmNvbnRhaW5zQWxsKHRhcmdEKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBiYWRDaGFyYWN0ZXJzLmNvbnRhaW5zU29tZSh0YXJnRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1dyb25nU2NyaXB0KCJTb3VyY2UtVGFyZ2V0IiwgY3MsIHRhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgZmFpbFNvdXJjZVRhcmcuYWRkKGMpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RyaW5nIGNzMiA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGNzLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmcyID0gc291cmNlVG9UYXJnZXQudHJhbnNsaXRlcmF0ZShjczIpOworICAgICAgICAgICAgICAgIGlmICghdGFyZy5lcXVhbHModGFyZzIpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ05vdENhbm9uaWNhbCgiU291cmNlLVRhcmdldCIsIGNzLCB0YXJnLCBjczIsIHRhcmcyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZy5sb2dsbigiQ2hlY2tpbmcgdGhhdCBzb3VyY2UgY2hhcmFjdGVycyBjb252ZXJ0IHRvIHRhcmdldCAtIERvdWJsZXMiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgIGZvciAoY2hhciBjID0gMDsgYyA8IDB4RkZGRjsgKytjKSB7IAorICAgICAgICAgICAgICAgIGlmIChUZXN0VXRpbGl0eS5pc1VuYXNzaWduZWQoYykgfHwKKyAgICAgICAgICAgICAgICAgICAgIXNvdXJjZVJhbmdlLmNvbnRhaW5zKGMpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoZmFpbFNvdXJjZVRhcmcuZ2V0KGMpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICovCisgICAgICAgICAgICAKKyAgICAgICAgICAgIFVuaWNvZGVTZXQgc291cmNlUmFuZ2VNaW51c0ZhaWx1cmVzID0gbmV3IFVuaWNvZGVTZXQoc291cmNlUmFuZ2UpOworICAgICAgICAgICAgc291cmNlUmFuZ2VNaW51c0ZhaWx1cmVzLnJlbW92ZUFsbChmYWlsU291cmNlVGFyZyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2xlYW4gc2tpcFNvbWUgPSBsb2cuZ2V0SW5jbHVzaW9uKCkgPCAxMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdXNpLnJlc2V0KHNvdXJjZVJhbmdlTWludXNGYWlsdXJlcyk7CisgICAgICAgICAgICB1c2kuc2V0QWJicmV2aWF0ZWQoc2tpcFNvbWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAodXNpLm5leHQoKSkgeworICAgICAgICAgICAgICAgIGludCBjID0gdXNpLmNvZGVwb2ludDsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGZvciAoY2hhciBkID0gMDsgZCA8IDB4RkZGRjsgKytkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0VXRpbGl0eS5pc1VuYXNzaWduZWQoZCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICFzb3VyY2VSYW5nZS5jb250YWlucyhkKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWlsU291cmNlVGFyZy5nZXQoZCkpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdXNpMi5yZXNldChzb3VyY2VSYW5nZU1pbnVzRmFpbHVyZXMpOworICAgICAgICAgICAgCXVzaTIuc2V0QWJicmV2aWF0ZWQoc2tpcFNvbWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHdoaWxlICh1c2kyLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IHVzaTIuY29kZXBvaW50OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNzID0gVVRGMTYudmFsdWVPZihjKSArIFVURjE2LnZhbHVlT2YoZCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnID0gc291cmNlVG9UYXJnZXQudHJhbnNsaXRlcmF0ZShjcyk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdG9UYXJnZXQuY29udGFpbnNBbGwodGFyZykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmFkQ2hhcmFjdGVycy5jb250YWluc1NvbWUodGFyZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnRCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKHRhcmcsIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9UYXJnZXQuY29udGFpbnNBbGwodGFyZ0QpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBiYWRDaGFyYWN0ZXJzLmNvbnRhaW5zU29tZSh0YXJnRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dXcm9uZ1NjcmlwdCgiU291cmNlLVRhcmdldCIsIGNzLCB0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY3MyID0gTm9ybWFsaXplci5ub3JtYWxpemUoY3MsIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmcyID0gc291cmNlVG9UYXJnZXQudHJhbnNsaXRlcmF0ZShjczIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmcuZXF1YWxzKHRhcmcyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nTm90Q2Fub25pY2FsKCJTb3VyY2UtVGFyZ2V0IiwgY3MsIHRhcmcsIGNzMiwgdGFyZzIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2cubG9nbG4oIkNoZWNraW5nIHRoYXQgdGFyZ2V0IGNoYXJhY3RlcnMgY29udmVydCB0byBzb3VyY2UgYW5kIGJhY2sgLSBTaW5nbGVzIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFVuaWNvZGVTZXQgZmFpbFRhcmdTb3VyY2UgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICAgICAgVW5pY29kZVNldCBmYWlsUm91bmQgPSBuZXcgVW5pY29kZVNldCgpOworCisgICAgICAgICAgICAvKmZvciAoY2hhciBjID0gMDsgYyA8IDB4RkZGRjsgKytjKSB7CisgICAgICAgICAgICAgICAgaWYgKFRlc3RVdGlsaXR5LmlzVW5hc3NpZ25lZChjKSB8fAorICAgICAgICAgICAgICAgICAgICAhdGFyZ2V0UmFuZ2UuY29udGFpbnMoYykpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHVzaS5yZXNldCh0YXJnZXRSYW5nZSk7CisgICAgICAgICAgICB3aGlsZSAodXNpLm5leHQoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBjczsKKyAgICAgICAgICAgICAgICBpbnQgYzsKKyAgICAgICAgICAgICAgICBpZih1c2kuY29kZXBvaW50ID09IHVzaS5JU19TVFJJTkcpeworICAgICAgICAgICAgICAgICAgICBjcyA9IHVzaS5zdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIGMgPSBVVEYxNi5jaGFyQXQoY3MsMCk7CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgIGMgPSB1c2kuY29kZXBvaW50OworICAgICAgICAgICAgICAgICAgICBjcyA9VVRGMTYudmFsdWVPZihjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnID0gdGFyZ2V0VG9Tb3VyY2UudHJhbnNsaXRlcmF0ZShjcyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHJldmVyc2UgPSBzb3VyY2VUb1RhcmdldC50cmFuc2xpdGVyYXRlKHRhcmcpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghdG9Tb3VyY2UuY29udGFpbnNBbGwodGFyZykgCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBiYWRDaGFyYWN0ZXJzLmNvbnRhaW5zU29tZSh0YXJnKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZ0QgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZSh0YXJnLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdG9Tb3VyY2UuY29udGFpbnNBbGwodGFyZ0QpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJhZENoYXJhY3RlcnMuY29udGFpbnNTb21lKHRhcmdEKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nV3JvbmdTY3JpcHQoIlRhcmdldC1Tb3VyY2UiLCBjcywgdGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsVGFyZ1NvdXJjZS5hZGQoY3MpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpc1NhbWUoY3MsIHJldmVyc2UpICYmICFyb3VuZHRyaXBFeGNsdXNpb25zLmNvbnRhaW5zKGMpCisgICAgICAgICAgICAgICAgICAgICYmICFyb3VuZHRyaXBFeGNsdXNpb25zLmNvbnRhaW5zKGNzKSkgeworICAgICAgICAgICAgICAgICAgICBsb2dSb3VuZFRyaXBGYWlsdXJlKGNzLHRhcmdldFRvU291cmNlLmdldElEKCksIHRhcmcsc291cmNlVG9UYXJnZXQuZ2V0SUQoKSwgcmV2ZXJzZSk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxSb3VuZC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZzIgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZSh0YXJnLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHJldmVyc2UyID0gc291cmNlVG9UYXJnZXQudHJhbnNsaXRlcmF0ZSh0YXJnMik7CisgICAgICAgICAgICAgICAgaWYgKCFyZXZlcnNlLmVxdWFscyhyZXZlcnNlMikpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nTm90Q2Fub25pY2FsKCJUYXJnZXQtU291cmNlIiwgdGFyZywgcmV2ZXJzZSwgdGFyZzIsIHJldmVyc2UyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZy5sb2dsbigiQ2hlY2tpbmcgdGhhdCB0YXJnZXQgY2hhcmFjdGVycyBjb252ZXJ0IHRvIHNvdXJjZSBhbmQgYmFjayAtIERvdWJsZXMiKTsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFVuaWNvZGVTZXQgdGFyZ2V0UmFuZ2VNaW51c0ZhaWx1cmVzID0gbmV3IFVuaWNvZGVTZXQodGFyZ2V0UmFuZ2UpOworICAgICAgICAgICAgdGFyZ2V0UmFuZ2VNaW51c0ZhaWx1cmVzLnJlbW92ZUFsbChmYWlsVGFyZ1NvdXJjZSk7CisgICAgICAgICAgICB0YXJnZXRSYW5nZU1pbnVzRmFpbHVyZXMucmVtb3ZlQWxsKGZhaWxSb3VuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vY2hhcltdIGJ1ZiA9IG5ldyBjaGFyWzRdOyAvLyBtYXhpbXVtIHdlIGNhbiBoYXZlIHdpdGggMiBjb2RlIHBvaW50cworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgIGZvciAoY2hhciBjID0gMDsgYyA8IDB4RkZGRjsgKytjKSB7CisgICAgICAgICAgICAgICAgaWYgKFRlc3RVdGlsaXR5LmlzVW5hc3NpZ25lZChjKSB8fAorICAgICAgICAgICAgICAgICAgICAhdGFyZ2V0UmFuZ2UuY29udGFpbnMoYykpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgCisgICAgICAgICAgICB1c2kucmVzZXQodGFyZ2V0UmFuZ2VNaW51c0ZhaWx1cmVzKTsKKyAgICAgICAgICAgIHVzaS5zZXRBYmJyZXZpYXRlZChza2lwU29tZSk7CisgICAgICAgICAgICAJCisgICAgICAgICAgICB3aGlsZSAodXNpLm5leHQoKSkgeworICAgICAgICAgICAgICAgIGludCBjID0gdXNpLmNvZGVwb2ludDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoKytjb3VudCA+IHBhaXJMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVGVzdFRydW5jYXRlZCgiVGVzdCB0cnVuY2F0ZWQgYXQgIiArIHBhaXJMaW1pdCArICIgeCA2NGsgcGFpcnMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9nLmxvZyhUZXN0VXRpbGl0eS5oZXgoYykpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgZm9yIChjaGFyIGQgPSAwOyBkIDwgMHhGRkZGOyArK2QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3RVdGlsaXR5LmlzVW5hc3NpZ25lZChkKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIXRhcmdldFJhbmdlLmNvbnRhaW5zKGQpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdXNpMi5yZXNldCh0YXJnZXRSYW5nZU1pbnVzRmFpbHVyZXMpOworICAgICAgICAgICAgCXVzaTIuc2V0QWJicmV2aWF0ZWQoc2tpcFNvbWUpOworICAgICAgICAgICAgCQorICAgICAgICAgICAgCXdoaWxlICh1c2kyLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IHVzaTIuY29kZXBvaW50OworICAgICAgICAgICAgICAgICAgICBpZiAoZCA8IDApIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNzID0gVVRGMTYudmFsdWVPZihjKSArIFVURjE2LnZhbHVlT2YoZCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnID0gdGFyZ2V0VG9Tb3VyY2UudHJhbnNsaXRlcmF0ZShjcyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXZlcnNlID0gc291cmNlVG9UYXJnZXQudHJhbnNsaXRlcmF0ZSh0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghdG9Tb3VyY2UuY29udGFpbnNBbGwodGFyZykgLyomJiAhZmFpbFRhcmdTb3VyY2UuY29udGFpbnMoYykgJiYgIWZhaWxUYXJnU291cmNlLmNvbnRhaW5zKGQpKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBiYWRDaGFyYWN0ZXJzLmNvbnRhaW5zU29tZSh0YXJnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdEID0gTm9ybWFsaXplci5ub3JtYWxpemUodGFyZywgTm9ybWFsaXplci5ORkQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b1NvdXJjZS5jb250YWluc0FsbCh0YXJnRCkgLyomJiAhZmFpbFRhcmdTb3VyY2UuY29udGFpbnMoYykgJiYgIWZhaWxUYXJnU291cmNlLmNvbnRhaW5zKGQpKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmFkQ2hhcmFjdGVycy5jb250YWluc1NvbWUodGFyZ0QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nV3JvbmdTY3JpcHQoIlRhcmdldC1Tb3VyY2UiLCBjcywgdGFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NhbWUoY3MsIHJldmVyc2UpIC8qJiYgIWZhaWxSb3VuZC5jb250YWlucyhjKSAmJiAhZmFpbFJvdW5kLmNvbnRhaW5zKGQpKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm91bmR0cmlwRXhjbHVzaW9ucy5jb250YWlucyhjKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm91bmR0cmlwRXhjbHVzaW9ucy5jb250YWlucyhkKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm91bmR0cmlwRXhjbHVzaW9ucy5jb250YWlucyhjcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JvdW5kVHJpcEZhaWx1cmUoY3MsdGFyZ2V0VG9Tb3VyY2UuZ2V0SUQoKSwgdGFyZyxzb3VyY2VUb1RhcmdldC5nZXRJRCgpLCByZXZlcnNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnMiA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKHRhcmcsIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldmVyc2UyID0gc291cmNlVG9UYXJnZXQudHJhbnNsaXRlcmF0ZSh0YXJnMik7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmV2ZXJzZS5lcXVhbHMocmV2ZXJzZTIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dOb3RDYW5vbmljYWwoIlRhcmdldC1Tb3VyY2UiLCB0YXJnLCByZXZlcnNlLCB0YXJnMiwgcmV2ZXJzZTIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nLmxvZ2xuKCIiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIHZvaWQgbG9nV3JvbmdTY3JpcHQoU3RyaW5nIGxhYmVsLCBTdHJpbmcgZnJvbSwgU3RyaW5nIHRvKSB7CisgICAgICAgICAgICBpZiAoKytlcnJvckNvdW50ID4gZXJyb3JMaW1pdCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBUZXN0VHJ1bmNhdGVkKCJUZXN0IHRydW5jYXRlZDsgdG9vIG1hbnkgZmFpbHVyZXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+RmFpbCAiICsgbGFiZWwgKyAiOiBcdTIwMEUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKyAiXHUyMDBFICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RVdGlsaXR5LmhleChmcm9tKSArICIpID0+IFx1MjAwRSIgKworICAgICAgICAgICAgICAgICAgICAgICAgdG8gKyAiXHUyMDBFICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RVdGlsaXR5LmhleCh0bykgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCB2b2lkIGxvZ05vdENhbm9uaWNhbChTdHJpbmcgbGFiZWwsIFN0cmluZyBmcm9tLCBTdHJpbmcgdG8sIFN0cmluZyBmcm9tQ2FuLCBTdHJpbmcgdG9DYW4pIHsKKyAgICAgICAgICAgIGlmICgrK2Vycm9yQ291bnQgPiBlcnJvckxpbWl0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRlc3RUcnVuY2F0ZWQoIlRlc3QgdHJ1bmNhdGVkOyB0b28gbWFueSBmYWlsdXJlcyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5GYWlsIChjYW4uZXF1aXYpICIgKyBsYWJlbCArICI6IFx1MjAwRSIgKworICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArICJcdTIwMEUgKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFV0aWxpdHkuaGV4KGZyb20pICsgIikgPT4gXHUyMDBFIiArCisgICAgICAgICAgICAgICAgICAgICAgICB0byArICJcdTIwMEUgKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFV0aWxpdHkuaGV4KHRvKSArICIpIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiIC0tIFx1MjAwRSIgKworICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUNhbiArICJcdTIwMEUgKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFV0aWxpdHkuaGV4KGZyb21DYW4pICsgIikgPT4gXHUyMDBFIiArCisgICAgICAgICAgICAgICAgICAgICAgICB0b0NhbiArICJcdTIwMEUgKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFV0aWxpdHkuaGV4KHRvQ2FuKSArICIpIgorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZmluYWwgdm9pZCBsb2dGYWlscyhTdHJpbmcgbGFiZWwpIHsKKyAgICAgICAgICAgIGlmICgrK2Vycm9yQ291bnQgPiBlcnJvckxpbWl0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRlc3RUcnVuY2F0ZWQoIlRlc3QgdHJ1bmNhdGVkOyB0b28gbWFueSBmYWlsdXJlcyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5GYWlsIChjYW4uZXF1aXYpIiArIGxhYmVsKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIHZvaWQgbG9nVG9SdWxlc0ZhaWxzKFN0cmluZyBsYWJlbCwgU3RyaW5nIGZyb20sIFN0cmluZyB0bywgU3RyaW5nIHRvQ2FuKSB7CisgICAgICAgICAgICBpZiAoKytlcnJvckNvdW50ID4gZXJyb3JMaW1pdCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBUZXN0VHJ1bmNhdGVkKCJUZXN0IHRydW5jYXRlZDsgdG9vIG1hbnkgZmFpbHVyZXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+RmFpbCAoY2FuLmVxdWl2KSAiICsgbGFiZWwgKyAiOiBcdTIwMEUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKyAiXHUyMDBFICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RVdGlsaXR5LmhleChmcm9tKSArICIpID0+IFx1MjAwRSIgKworICAgICAgICAgICAgICAgICAgICAgICAgdG8gKyAiXHUyMDBFICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RVdGlsaXR5LmhleCh0bykgKyAiKVx1MjAwRSIgKworICAgICAgICAgICAgICAgICAgICAgICAgdG9DYW4gKyAiXHUyMDBFICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RVdGlsaXR5LmhleCh0b0NhbikgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCB2b2lkIGxvZ1JvdW5kVHJpcEZhaWx1cmUoU3RyaW5nIGZyb20sU3RyaW5nIHRvSUQsIFN0cmluZyB0byxTdHJpbmcgYmFja0lELCBTdHJpbmcgYmFjaykgeworICAgICAgICAgICAgaWYgKCFsZWdhbFNvdXJjZS5pcyhmcm9tKSkgcmV0dXJuOyAvLyBza2lwIGlsbGVnYWxzCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgrK2Vycm9yQ291bnQgPiBlcnJvckxpbWl0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRlc3RUcnVuY2F0ZWQoIlRlc3QgdHJ1bmNhdGVkOyB0b28gbWFueSBmYWlsdXJlcyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5GYWlsIFJvdW5kdHJpcDogXHUyMDBFIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArICJcdTIwMEUgKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFV0aWxpdHkuaGV4KGZyb20pICsgIikgIit0b0lEKyI9PiBcdTIwMEUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvICsgIlx1MjAwRSAoIiArCisgICAgICAgICAgICAgICAgICAgICAgICBUZXN0VXRpbGl0eS5oZXgodG8pICsgIikgIiArIGJhY2tJRCsiPT4gXHUyMDBFIiArCisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrICsgIlx1MjAwRSAoIiArCisgICAgICAgICAgICAgICAgICAgICAgICBUZXN0VXRpbGl0eS5oZXgoYmFjaykgKyAiKSIgCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hhcmFjdGVycyB0byBmaWx0ZXIgZm9yIHNvdXJjZS10YXJnZXQgbWFwcGluZyBjb21wbGV0ZW5lc3MKKyAgICAgICAgICogVHlwaWNhbGx5IGlzIGJhc2UgYWxwaGFiZXQsIG1pbnVzIGV4dGVuZGVkIGNoYXJhY3RlcnMKKyAgICAgICAgICogRGVmYXVsdCBpcyBBU0NJSSBsZXR0ZXJzIGZvciBMYXRpbgorICAgICAgICAgKi8KKyAgICAgICAgIC8qCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzU291cmNlKGNoYXIgYykgeworICAgICAgICAgICAgaWYgKCFzb3VyY2VSYW5nZS5jb250YWlucyhjKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBDaGFyYWN0ZXJzIHRvIGNoZWNrIGZvciB0YXJnZXQgYmFjayB0byBzb3VyY2UgbWFwcGluZy4KKyAgICAgICAgICogVHlwaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSB0YXJnZXQgc2NyaXB0LCBwbHVzIHB1bmN0dWF0aW9uCisgICAgICAgICAqLworICAgICAgICAgLyoKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNSZWNlaXZpbmdTb3VyY2UoY2hhciBjKSB7CisgICAgICAgICAgICBpZiAoIXRhcmdldFJhbmdlLmNvbnRhaW5zKGMpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAqLworICAgICAgICAvKgorICAgICAgICAgKiBDaGFyYWN0ZXJzIHRvIGZpbHRlciBmb3IgdGFyZ2V0LXNvdXJjZSBtYXBwaW5nCisgICAgICAgICAqIFR5cGljYWxseSBpcyBiYXNlIGFscGhhYmV0LCBtaW51cyBleHRlbmRlZCBjaGFyYWN0ZXJzCisgICAgICAgICAqLworICAgICAgICAgLyoKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNUYXJnZXQoY2hhciBjKSB7CisgICAgICAgICAgICBieXRlIHNjcmlwdCA9IFRlc3RVdGlsaXR5LmdldFNjcmlwdChjKTsKKyAgICAgICAgICAgIGlmIChzY3JpcHQgIT0gdGFyZ2V0U2NyaXB0KSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIVRlc3RVdGlsaXR5LmlzTGV0dGVyKGMpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAodGFyZ2V0UmFuZ2UgIT0gbnVsbCAmJiAhdGFyZ2V0UmFuZ2UuY29udGFpbnMoYykpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICovCisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBDaGFyYWN0ZXJzIHRvIGNoZWNrIGZvciB0YXJnZXQtc291cmNlIG1hcHBpbmcKKyAgICAgICAgICogVHlwaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBzb3VyY2Ugc2NyaXB0LCBwbHVzIHB1bmN0dWF0aW9uCisgICAgICAgICAqLworICAgICAgICAvKgorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlY2VpdmluZ1RhcmdldChjaGFyIGMpIHsKKyAgICAgICAgICAgIGJ5dGUgc2NyaXB0ID0gVGVzdFV0aWxpdHkuZ2V0U2NyaXB0KGMpOworICAgICAgICAgICAgcmV0dXJuIChzY3JpcHQgPT0gdGFyZ2V0U2NyaXB0IHx8IHNjcmlwdCA9PSBUZXN0VXRpbGl0eS5DT01NT05fU0NSSVBUKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNTb3VyY2UoU3RyaW5nIHMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1NvdXJjZShzLmNoYXJBdChpKSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpc1RhcmdldChTdHJpbmcgcykgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVGFyZ2V0KHMuY2hhckF0KGkpKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBib29sZWFuIGlzUmVjZWl2aW5nU291cmNlKFN0cmluZyBzKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghaXNSZWNlaXZpbmdTb3VyY2Uocy5jaGFyQXQoaSkpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNSZWNlaXZpbmdUYXJnZXQoU3RyaW5nIHMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1JlY2VpdmluZ1RhcmdldChzLmNoYXJBdChpKSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICovCisKKyAgICAgICAgc3RhdGljIGNsYXNzIFRlc3RUcnVuY2F0ZWQgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIFRlc3RUcnVuY2F0ZWQoU3RyaW5nIG1zZykgeworICAgICAgICAgICAgICAgIHN1cGVyKG1zZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKy8vICBzdGF0aWMgY2xhc3MgVGVzdEhhbmd1bCBleHRlbmRzIFRlc3QgeworLy8gICAgICBUZXN0SGFuZ3VsICgpIHsKKy8vICAgICAgICAgIHN1cGVyKCJKYW1vLUhhbmd1bCIsIFRlc3RVdGlsaXR5LkpBTU9fU0NSSVBULCBUZXN0VXRpbGl0eS5IQU5HVUxfU0NSSVBUKTsKKy8vICAgICAgfQorLy8KKy8vICAgICAgcHVibGljIGJvb2xlYW4gaXNTb3VyY2UoY2hhciBjKSB7CisvLyAgICAgICAgICBpZiAoMHgxMTEzIDw9IGMgJiYgYyA8PSAweDExNjApIHJldHVybiBmYWxzZTsKKy8vICAgICAgICAgIGlmICgweDExNzYgPD0gYyAmJiBjIDw9IDB4MTFGOSkgcmV0dXJuIGZhbHNlOworLy8gICAgICAgICAgaWYgKDB4MzEzMSA8PSBjICYmIGMgPD0gMHgzMThFKSByZXR1cm4gZmFsc2U7CisvLyAgICAgICAgICByZXR1cm4gc3VwZXIuaXNTb3VyY2UoYyk7CisvLyAgICAgIH0KKy8vICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVGVzdFV0aWxpdHkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9UZXN0VXRpbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgxZDZmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVGVzdFV0aWxpdHkuamF2YQpAQCAtMCwwICsxLDQ1MyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9UZXN0VXRpbGl0eS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjI6MDc6NTcgJAorICogJFJldmlzaW9uOiAxLjEwICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnRyYW5zbGl0OworCitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlckNhdGVnb3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBUZXN0VXRpbGl0eSB7CisKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBoZXgoY2hhciBjaCkgeworCQlTdHJpbmcgZm9vID0gSW50ZWdlci50b1N0cmluZyhjaCwxNikudG9VcHBlckNhc2UoKTsKKwkJcmV0dXJuICIwMDAwIi5zdWJzdHJpbmcoMCw0LWZvby5sZW5ndGgoKSkgKyBmb287CisJfQorICAgIAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGhleChpbnQgY2gpIHsKKwkJU3RyaW5nIGZvbyA9IEludGVnZXIudG9TdHJpbmcoY2gsMTYpLnRvVXBwZXJDYXNlKCk7CisJCXJldHVybiAiMDAwMDAwMDAiLnN1YnN0cmluZygwLDQtZm9vLmxlbmd0aCgpKSArIGZvbzsKKwl9CisgICAgCisJcHVibGljIHN0YXRpYyBTdHJpbmcgaGV4KFN0cmluZyBzKSB7CisJICByZXR1cm4gaGV4KHMsIiwiKTsKKwl9CisJCisJcHVibGljIHN0YXRpYyBTdHJpbmcgaGV4KFN0cmluZyBzLCBTdHJpbmcgc2VwKSB7CisJICBpZiAocy5sZW5ndGgoKSA9PSAwKSByZXR1cm4gIiI7CisJICBTdHJpbmcgcmVzdWx0ID0gaGV4KHMuY2hhckF0KDApKTsKKwkgIGZvciAoaW50IGkgPSAxOyBpIDwgcy5sZW5ndGgoKTsgKytpKSB7CisJICAgIHJlc3VsdCArPSBzZXA7CisJICAgIHJlc3VsdCArPSBoZXgocy5jaGFyQXQoaSkpOworCSAgfQorCSAgcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJcHVibGljIHN0YXRpYyBTdHJpbmcgcmVwbGFjZShTdHJpbmcgc291cmNlLCBTdHJpbmcgdG9CZVJlcGxhY2VkLCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKKwkgICAgU3RyaW5nQnVmZmVyIHJlc3VsdHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJICAgIGludCBsZW4gPSB0b0JlUmVwbGFjZWQubGVuZ3RoKCk7CisJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aCgpOyArK2kpIHsKKwkgICAgICAgIGlmIChzb3VyY2UucmVnaW9uTWF0Y2hlcyhmYWxzZSwgaSwgdG9CZVJlcGxhY2VkLCAwLCBsZW4pKSB7CisJICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVwbGFjZW1lbnQpOworCSAgICAgICAgICAgIGkgKz0gbGVuIC0gMTsgLy8gbWludXMgb25lLCBzaW5jZSB3ZSB3aWxsIGluY3JlbWVudAorCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzb3VyY2UuY2hhckF0KGkpKTsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gcmVzdWx0cy50b1N0cmluZygpOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIFN0cmluZyByZXBsYWNlQWxsKFN0cmluZyBzb3VyY2UsIFVuaWNvZGVTZXQgc2V0LCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKKwkgICAgU3RyaW5nQnVmZmVyIHJlc3VsdHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJICAgIGludCBjcDsKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoKCk7IGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGNwKSkgeworCSAgICAgICAgY3AgPSBVVEYxNi5jaGFyQXQoc291cmNlLGkpOworCSAgICAgICAgaWYgKHNldC5jb250YWlucyhjcCkpIHsKKwkgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXBsYWNlbWVudCk7CisJICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIFVURjE2LmFwcGVuZChyZXN1bHRzLCBjcCk7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgcmV0dXJuIHJlc3VsdHMudG9TdHJpbmcoKTsKKwl9CisJCisgICAgLy8gQ09NTUVOVEVEIE9VVCBBTEwgVEhFIE9MRCBTQ1JJUFQgU1RVRkYKKyAgICAvKgorICAgIHB1YmxpYyBzdGF0aWMgYnl0ZSBnZXRTY3JpcHQoY2hhciBjKSB7CisgICAgICByZXR1cm4gZ2V0U2NyaXB0KGdldEJsb2NrKGMpKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyBieXRlIGdldFNjcmlwdChieXRlIGJsb2NrKSB7CisgICAgICByZXR1cm4gYmxvY2tUb1NjcmlwdFtibG9ja107CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgYnl0ZSBnZXRCbG9jayhjaGFyIGMpIHsKKyAgICAgIGludCBpbmRleCA9IGMgPj4gNzsKKyAgICAgIGJ5dGUgYmxvY2sgPSBjaGFyVG9CbG9ja1tpbmRleF07CisgICAgICB3aGlsZSAoYmxvY2sgPCAwKSB7IC8vIHRha2UgY2FyZSBvZiBleGNlcHRpb25zLCBibG9ja3Mgc3BsaXQgYWNyb3NzIDEyOCBib3VuZGFyaWVzCisgICAgICAgICAgaW50W10gdHVwbGUgPSBzcGxpdFstYmxvY2stMV07CisgICAgICAgICAgaWYgKGMgPCB0dXBsZVswXSkgYmxvY2sgPSAoYnl0ZSl0dXBsZVsxXTsKKyAgICAgICAgICBlbHNlIGJsb2NrID0gKGJ5dGUpdHVwbGVbMl07CisgICAgICB9CisgICAgICByZXR1cm4gYmxvY2s7CisgICAgfQorICAgICAgICAgICAgICAgCisgICAgLy8gcmV0dXJucyBuZXh0IGxldHRlciBvZiBzY3JpcHQsIG9yIDB4RkZGRiBpZiBkb25lCisgICAgCisgICAgcHVibGljIHN0YXRpYyBjaGFyIGdldE5leHRMZXR0ZXIoY2hhciBjLCBieXRlIHNjcmlwdCkgeworICAgICAgICB3aGlsZSAoYyA8IDB4RkZGRikgeworICAgICAgICAgICAgKytjOworICAgICAgICAgICAgaWYgKGdldFNjcmlwdChjKSA9PSBzY3JpcHQgJiYgQ2hhcmFjdGVyLmlzTGV0dGVyKGMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorICAgIAorICAgIC8vIFN1cHBsZW1lbnRzIHRvIENoYXJhY3RlciBtZXRob2RzOyB0aGVzZSBtZXRob2RzIGdvIHRocm91Z2gKKyAgICAvLyBVQ2hhcmFjdGVyIGlmIHBvc3NpYmxlLiAgSWYgbm90LCB0aGV5IGZhbGwgYmFjayB0byBDaGFyYWN0ZXIuCisKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNVbmFzc2lnbmVkKGNoYXIgYykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXIuZ2V0VHlwZShjKSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVU5BU1NJR05FRDsKKyAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlci5nZXRUeXBlKGMpID09IENoYXJhY3Rlci5VTkFTU0lHTkVEOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0xldHRlcihjaGFyIGMpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyLmlzTGV0dGVyKGMpOworICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ2hhcmFjdGVyLmlzTGV0dGVyKGMpOworICAgIH0KKworICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJCbG9ja3M6ICIpOworICAgIGJ5dGUgbGFzdGJsb2NrID0gLTEyODsKKyAgICBmb3IgKGNoYXIgY2MgPSAwOyBjYyA8IDB4RkZGRjsgKytjYykgeworICAgICAgYnl0ZSBibG9jayA9IFRlc3RVdGlsaXR5LmdldEJsb2NrKGNjKTsKKyAgICAgIGlmIChibG9jayAhPSBsYXN0YmxvY2spIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRlc3RVdGlsaXR5LmhleChjYykgKyAiXHQiICsgYmxvY2spOworICAgICAgICBsYXN0YmxvY2sgPSBibG9jazsKKyAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTY3JpcHRzOiAiKTsKKyAgICBieXRlIGxhc3RTY3JpcHQgPSAtMTI4OworICAgIGZvciAoY2hhciBjYyA9IDA7IGNjIDwgMHhGRkZGOyArK2NjKSB7CisgICAgICBieXRlIHNjcmlwdCA9IFRlc3RVdGlsaXR5LmdldFNjcmlwdChjYyk7CisgICAgICBpZiAoc2NyaXB0ICE9IGxhc3RTY3JpcHQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRlc3RVdGlsaXR5LmhleChjYykgKyAiXHQiICsgc2NyaXB0KTsKKyAgICAgICAgbGFzdFNjcmlwdCA9IHNjcmlwdDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgICAgIAorCQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSAvLyBTQ1JJUFQgQ09ERQorICAgICAgICBDT01NT05fU0NSSVBUID0gMCwKKyAgICAgICAgTEFUSU5fU0NSSVBUID0gMSwKKyAgICAgICAgR1JFRUtfU0NSSVBUID0gMiwKKyAgICAgICAgQ1lSSUxMSUNfU0NSSVBUID0gMywKKyAgICAgICAgQVJNRU5JQU5fU0NSSVBUID0gNCwKKyAgICAgICAgSEVCUkVXX1NDUklQVCA9IDUsCisgICAgICAgIEFSQUJJQ19TQ1JJUFQgPSA2LAorICAgICAgICBTWVJJQUNfU0NSSVBUID0gNywKKyAgICAgICAgVEhBQU5BX1NDUklQVCA9IDgsIAorICAgICAgICBERVZBTkFHQVJJX1NDUklQVCA9IDksCisgICAgICAgIEJFTkdBTElfU0NSSVBUID0gMTAsCisgICAgICAgIEdVUk1VS0hJX1NDUklQVCA9IDExLAorICAgICAgICBHVUpBUkFUSV9TQ1JJUFQgPSAxMiwKKyAgICAgICAgT1JJWUFfU0NSSVBUID0gMTMsCisgICAgICAgIFRBTUlMX1NDUklQVCA9IDE0LAorICAgICAgICBURUxVR1VfU0NSSVBUID0gMTUsCisgICAgICAgIEtBTk5BREFfU0NSSVBUID0gMTYsCisgICAgICAgIE1BTEFZQUxBTV9TQ1JJUFQgPSAxNywKKyAgICAgICAgU0lOSEFMQV9TQ1JJUFQgPSAxOCwKKyAgICAgICAgVEhBSV9TQ1JJUFQgPSAxOSwKKyAgICAgICAgTEFPX1NDUklQVCA9IDIwLAorICAgICAgICBUSUJFVEFOX1NDUklQVCA9IDIxLAorICAgICAgICBNWUFOTUFSX1NDUklQVCA9IDIyLAorICAgICAgICBHRU9SR0lBTl9TQ1JJUFQgPSAyMywKKyAgICAgICAgSkFNT19TQ1JJUFQgPSAyNCwKKyAgICAgICAgSEFOR1VMX1NDUklQVCA9IDI1LAorICAgICAgICBFVEhJT1BJQ19TQ1JJUFQgPSAyNiwKKyAgICAgICAgQ0hFUk9LRUVfU0NSSVBUID0gMjcsCisgICAgICAgIEFCT1JJR0lOQUxfU0NSSVBUID0gMjgsCisgICAgICAgIE9HSEFNX1NDUklQVCA9IDI5LAorICAgICAgICBSVU5JQ19TQ1JJUFQgPSAzMCwKKyAgICAgICAgS0hNRVJfU0NSSVBUID0gMzEsCisgICAgICAgIE1PTkdPTElBTl9TQ1JJUFQgPSAzMiwKKyAgICAgICAgSElSQUdBTkFfU0NSSVBUID0gMzMsCisgICAgICAgIEtBVEFLQU5BX1NDUklQVCA9IDM0LAorICAgICAgICBCT1BPTU9GT19TQ1JJUFQgPSAzNSwKKyAgICAgICAgSEFOX1NDUklQVCA9IDM2LAorICAgICAgICBZSV9TQ1JJUFQgPSAzNzsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgLy8gYmxvY2sgY29kZQorICAgICAgICBSRVNFUlZFRF9CTE9DSyA9IDAsCisgICAgICAgIEJBU0lDX0xBVElOID0gMSwKKyAgICAgICAgTEFUSU5fMV9TVVBQTEVNRU5UID0gMiwKKyAgICAgICAgTEFUSU5fRVhURU5ERURfQSA9IDMsCisgICAgICAgIExBVElOX0VYVEVOREVEX0IgPSA0LAorICAgICAgICBJUEFfRVhURU5TSU9OUyA9IDUsCisgICAgICAgIFNQQUNJTkdfTU9ESUZJRVJfTEVUVEVSUyA9IDYsCisgICAgICAgIENPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUyA9IDcsCisgICAgICAgIEdSRUVLID0gOCwKKyAgICAgICAgQ1lSSUxMSUMgPSA5LAorICAgICAgICBBUk1FTklBTiA9IDEwLAorICAgICAgICBIRUJSRVcgPSAxMSwKKyAgICAgICAgQVJBQklDID0gMTIsCisgICAgICAgIFNZUklBQyA9IDEzLAorICAgICAgICBUSEFBTkEgPSAxNCwKKyAgICAgICAgREVWQU5BR0FSSSA9IDE1LAorICAgICAgICBCRU5HQUxJID0gMTYsCisgICAgICAgIEdVUk1VS0hJID0gMTcsCisgICAgICAgIEdVSkFSQVRJID0gMTgsCisgICAgICAgIE9SSVlBID0gMTksCisgICAgICAgIFRBTUlMID0gMjAsCisgICAgICAgIFRFTFVHVSA9IDIxLAorICAgICAgICBLQU5OQURBID0gMjIsCisgICAgICAgIE1BTEFZQUxBTSA9IDIzLAorICAgICAgICBTSU5IQUxBID0gMjQsCisgICAgICAgIFRIQUkgPSAyNSwKKyAgICAgICAgTEFPID0gMjYsCisgICAgICAgIFRJQkVUQU4gPSAyNywKKyAgICAgICAgTVlBTk1BUiA9IDI4LAorICAgICAgICBHRU9SR0lBTiA9IDI5LAorICAgICAgICBIQU5HVUxfSkFNTyA9IDMwLAorICAgICAgICBFVEhJT1BJQyA9IDMxLAorICAgICAgICBDSEVST0tFRSA9IDMyLAorICAgICAgICBVTklGSUVEX0NBTkFESUFOX0FCT1JJR0lOQUxfU1lMTEFCSUNTID0gMzMsCisgICAgICAgIE9HSEFNID0gMzQsCisgICAgICAgIFJVTklDID0gMzUsCisgICAgICAgIEtITUVSID0gMzYsCisgICAgICAgIE1PTkdPTElBTiA9IDM3LAorICAgICAgICBMQVRJTl9FWFRFTkRFRF9BRERJVElPTkFMID0gMzgsCisgICAgICAgIEdSRUVLX0VYVEVOREVEID0gMzksCisgICAgICAgIEdFTkVSQUxfUFVOQ1RVQVRJT04gPSA0MCwKKyAgICAgICAgU1VQRVJTQ1JJUFRTX0FORF9TVUJTQ1JJUFRTID0gNDEsCisgICAgICAgIENVUlJFTkNZX1NZTUJPTFMgPSA0MiwKKyAgICAgICAgQ09NQklOSU5HX01BUktTX0ZPUl9TWU1CT0xTID0gNDMsCisgICAgICAgIExFVFRFUkxJS0VfU1lNQk9MUyA9IDQ0LAorICAgICAgICBOVU1CRVJfRk9STVMgPSA0NSwKKyAgICAgICAgQVJST1dTID0gNDYsCisgICAgICAgIE1BVEhFTUFUSUNBTF9PUEVSQVRPUlMgPSA0NywKKyAgICAgICAgTUlTQ0VMTEFORU9VU19URUNITklDQUwgPSA0OCwKKyAgICAgICAgQ09OVFJPTF9QSUNUVVJFUyA9IDQ5LAorICAgICAgICBPUFRJQ0FMX0NIQVJBQ1RFUl9SRUNPR05JVElPTiA9IDUwLAorICAgICAgICBFTkNMT1NFRF9BTFBIQU5VTUVSSUNTID0gNTEsCisgICAgICAgIEJPWF9EUkFXSU5HID0gNTIsCisgICAgICAgIEJMT0NLX0VMRU1FTlRTID0gNTMsCisgICAgICAgIEdFT01FVFJJQ19TSEFQRVMgPSA1NCwKKyAgICAgICAgTUlTQ0VMTEFORU9VU19TWU1CT0xTID0gNTUsCisgICAgICAgIERJTkdCQVRTID0gNTYsCisgICAgICAgIEJSQUlMTEVfUEFUVEVSTlMgPSA1NywKKyAgICAgICAgQ0pLX1JBRElDQUxTX1NVUFBMRU1FTlQgPSA1OCwKKyAgICAgICAgS0FOR1hJX1JBRElDQUxTID0gNTksCisgICAgICAgIElERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlMgPSA2MCwKKyAgICAgICAgQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OID0gNjEsCisgICAgICAgIEhJUkFHQU5BID0gNjIsCisgICAgICAgIEtBVEFLQU5BID0gNjMsCisgICAgICAgIEJPUE9NT0ZPID0gNjQsCisgICAgICAgIEhBTkdVTF9DT01QQVRJQklMSVRZX0pBTU8gPSA2NSwKKyAgICAgICAgS0FOQlVOID0gNjYsCisgICAgICAgIEJPUE9NT0ZPX0VYVEVOREVEID0gNjcsCisgICAgICAgIEVOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFMgPSA2OCwKKyAgICAgICAgQ0pLX0NPTVBBVElCSUxJVFkgPSA2OSwKKyAgICAgICAgQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQSA9IDcwLAorICAgICAgICBDSktfVU5JRklFRF9JREVPR1JBUEhTID0gNzEsCisgICAgICAgIFlJX1NZTExBQkxFUyA9IDcyLAorICAgICAgICBZSV9SQURJQ0FMUyA9IDczLAorICAgICAgICBIQU5HVUxfU1lMTEFCTEVTID0gNzQsCisgICAgICAgIEhJR0hfU1VSUk9HQVRFUyA9IDc1LAorICAgICAgICBISUdIX1BSSVZBVEVfVVNFX1NVUlJPR0FURVMgPSA3NiwKKyAgICAgICAgTE9XX1NVUlJPR0FURVMgPSA3NywKKyAgICAgICAgUFJJVkFURV9VU0UgPSA3OCwKKyAgICAgICAgQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIUyA9IDc5LAorICAgICAgICBBTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUyA9IDgwLAorICAgICAgICBBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0EgPSA4MSwKKyAgICAgICAgQ09NQklOSU5HX0hBTEZfTUFSS1MgPSA4MiwKKyAgICAgICAgQ0pLX0NPTVBBVElCSUxJVFlfRk9STVMgPSA4MywKKyAgICAgICAgU01BTExfRk9STV9WQVJJQU5UUyA9IDg0LAorICAgICAgICBBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0IgPSA4NSwKKyAgICAgICAgU1BFQ0lBTFMgPSA4NiwKKyAgICAgICAgSEFMRldJRFRIX0FORF9GVUxMV0lEVEhfRk9STVMgPSA4NzsKKyAgICAgICAgCisgICAgc3RhdGljIGZpbmFsIGJ5dGVbXSBibG9ja1RvU2NyaXB0ID0geworICAgICAgICBDT01NT05fU0NSSVBULCAvLyAwLCA8UkVTRVJWRURfQkxPQ0s+CisgICAgICAgIExBVElOX1NDUklQVCwgLy8gMSwgQkFTSUNfTEFUSU4KKyAgICAgICAgTEFUSU5fU0NSSVBULCAvLyAyLCBMQVRJTl8xX1NVUFBMRU1FTlQKKyAgICAgICAgTEFUSU5fU0NSSVBULCAvLyAzLCBMQVRJTl9FWFRFTkRFRF9BCisgICAgICAgIExBVElOX1NDUklQVCwgLy8gNCwgTEFUSU5fRVhURU5ERURfQgorICAgICAgICBMQVRJTl9TQ1JJUFQsIC8vIDUsIElQQV9FWFRFTlNJT05TCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDYsIFNQQUNJTkdfTU9ESUZJRVJfTEVUVEVSUworICAgICAgICBDT01NT05fU0NSSVBULCAvLyA3LCBDT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1MKKyAgICAgICAgR1JFRUtfU0NSSVBULCAvLyA4LCBHUkVFSworICAgICAgICBDWVJJTExJQ19TQ1JJUFQsIC8vIDksIENZUklMTElDCisgICAgICAgIEFSTUVOSUFOX1NDUklQVCwgLy8gMTAsIEFSTUVOSUFOCisgICAgICAgIEhFQlJFV19TQ1JJUFQsIC8vIDExLCBIRUJSRVcKKyAgICAgICAgQVJBQklDX1NDUklQVCwgLy8gMTIsIEFSQUJJQworICAgICAgICBTWVJJQUNfU0NSSVBULCAvLyAxMywgU1lSSUFDCisgICAgICAgIFRIQUFOQV9TQ1JJUFQsIC8vIDE0LCBUSEFBTkEKKyAgICAgICAgREVWQU5BR0FSSV9TQ1JJUFQsIC8vIDE1LCBERVZBTkFHQVJJCisgICAgICAgIEJFTkdBTElfU0NSSVBULCAvLyAxNiwgQkVOR0FMSQorICAgICAgICBHVVJNVUtISV9TQ1JJUFQsIC8vIDE3LCBHVVJNVUtISQorICAgICAgICBHVUpBUkFUSV9TQ1JJUFQsIC8vIDE4LCBHVUpBUkFUSQorICAgICAgICBPUklZQV9TQ1JJUFQsIC8vIDE5LCBPUklZQQorICAgICAgICBUQU1JTF9TQ1JJUFQsIC8vIDIwLCBUQU1JTAorICAgICAgICBURUxVR1VfU0NSSVBULCAvLyAyMSwgVEVMVUdVCisgICAgICAgIEtBTk5BREFfU0NSSVBULCAvLyAyMiwgS0FOTkFEQQorICAgICAgICBNQUxBWUFMQU1fU0NSSVBULCAvLyAyMywgTUFMQVlBTEFNCisgICAgICAgIFNJTkhBTEFfU0NSSVBULCAvLyAyNCwgU0lOSEFMQQorICAgICAgICBUSEFJX1NDUklQVCwgLy8gMjUsIFRIQUkKKyAgICAgICAgTEFPX1NDUklQVCwgLy8gMjYsIExBTworICAgICAgICBUSUJFVEFOX1NDUklQVCwgLy8gMjcsIFRJQkVUQU4KKyAgICAgICAgTVlBTk1BUl9TQ1JJUFQsIC8vIDI4LCBNWUFOTUFSCisgICAgICAgIEdFT1JHSUFOX1NDUklQVCwgLy8gMjksIEdFT1JHSUFOCisgICAgICAgIEpBTU9fU0NSSVBULCAvLyAzMCwgSEFOR1VMX0pBTU8KKyAgICAgICAgRVRISU9QSUNfU0NSSVBULCAvLyAzMSwgRVRISU9QSUMKKyAgICAgICAgQ0hFUk9LRUVfU0NSSVBULCAvLyAzMiwgQ0hFUk9LRUUKKyAgICAgICAgQUJPUklHSU5BTF9TQ1JJUFQsIC8vIDMzLCBVTklGSUVEX0NBTkFESUFOX0FCT1JJR0lOQUxfU1lMTEFCSUNTCisgICAgICAgIE9HSEFNX1NDUklQVCwgLy8gMzQsIE9HSEFNCisgICAgICAgIFJVTklDX1NDUklQVCwgLy8gMzUsIFJVTklDCisgICAgICAgIEtITUVSX1NDUklQVCwgLy8gMzYsIEtITUVSCisgICAgICAgIE1PTkdPTElBTl9TQ1JJUFQsIC8vIDM3LCBNT05HT0xJQU4KKyAgICAgICAgTEFUSU5fU0NSSVBULCAvLyAzOCwgTEFUSU5fRVhURU5ERURfQURESVRJT05BTAorICAgICAgICBHUkVFS19TQ1JJUFQsIC8vIDM5LCBHUkVFS19FWFRFTkRFRAorICAgICAgICBDT01NT05fU0NSSVBULCAvLyA0MCwgR0VORVJBTF9QVU5DVFVBVElPTgorICAgICAgICBDT01NT05fU0NSSVBULCAvLyA0MSwgU1VQRVJTQ1JJUFRTX0FORF9TVUJTQ1JJUFRTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDQyLCBDVVJSRU5DWV9TWU1CT0xTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDQzLCBDT01CSU5JTkdfTUFSS1NfRk9SX1NZTUJPTFMKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gNDQsIExFVFRFUkxJS0VfU1lNQk9MUworICAgICAgICBDT01NT05fU0NSSVBULCAvLyA0NSwgTlVNQkVSX0ZPUk1TCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDQ2LCBBUlJPV1MKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gNDcsIE1BVEhFTUFUSUNBTF9PUEVSQVRPUlMKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gNDgsIE1JU0NFTExBTkVPVVNfVEVDSE5JQ0FMCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDQ5LCBDT05UUk9MX1BJQ1RVUkVTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDUwLCBPUFRJQ0FMX0NIQVJBQ1RFUl9SRUNPR05JVElPTgorICAgICAgICBDT01NT05fU0NSSVBULCAvLyA1MSwgRU5DTE9TRURfQUxQSEFOVU1FUklDUworICAgICAgICBDT01NT05fU0NSSVBULCAvLyA1MiwgQk9YX0RSQVdJTkcKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gNTMsIEJMT0NLX0VMRU1FTlRTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDU0LCBHRU9NRVRSSUNfU0hBUEVTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDU1LCBNSVNDRUxMQU5FT1VTX1NZTUJPTFMKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gNTYsIERJTkdCQVRTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDU3LCBCUkFJTExFX1BBVFRFUk5TCisgICAgICAgIEhBTl9TQ1JJUFQsIC8vIDU4LCBDSktfUkFESUNBTFNfU1VQUExFTUVOVAorICAgICAgICBIQU5fU0NSSVBULCAvLyA1OSwgS0FOR1hJX1JBRElDQUxTCisgICAgICAgIEhBTl9TQ1JJUFQsIC8vIDYwLCBJREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDYxLCBDSktfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT04KKyAgICAgICAgSElSQUdBTkFfU0NSSVBULCAvLyA2MiwgSElSQUdBTkEKKyAgICAgICAgS0FUQUtBTkFfU0NSSVBULCAvLyA2MywgS0FUQUtBTkEKKyAgICAgICAgQk9QT01PRk9fU0NSSVBULCAvLyA2NCwgQk9QT01PRk8KKyAgICAgICAgSkFNT19TQ1JJUFQsIC8vIDY1LCBIQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1PCisgICAgICAgIEhBTl9TQ1JJUFQsIC8vIDY2LCBLQU5CVU4KKyAgICAgICAgQk9QT01PRk9fU0NSSVBULCAvLyA2NywgQk9QT01PRk9fRVhURU5ERUQKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gNjgsIEVOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFMKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gNjksIENKS19DT01QQVRJQklMSVRZCisgICAgICAgIEhBTl9TQ1JJUFQsIC8vIDcwLCBDSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9BCisgICAgICAgIEhBTl9TQ1JJUFQsIC8vIDcxLCBDSktfVU5JRklFRF9JREVPR1JBUEhTCisgICAgICAgIFlJX1NDUklQVCwgLy8gNzIsIFlJX1NZTExBQkxFUworICAgICAgICBZSV9TQ1JJUFQsIC8vIDczLCBZSV9SQURJQ0FMUworICAgICAgICBIQU5HVUxfU0NSSVBULCAvLyA3NCwgSEFOR1VMX1NZTExBQkxFUworICAgICAgICBDT01NT05fU0NSSVBULCAvLyA3NSwgSElHSF9TVVJST0dBVEVTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDc2LCBISUdIX1BSSVZBVEVfVVNFX1NVUlJPR0FURVMKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gNzcsIExPV19TVVJST0dBVEVTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDc4LCBQUklWQVRFX1VTRQorICAgICAgICBIQU5fU0NSSVBULCAvLyA3OSwgQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIUworICAgICAgICBDT01NT05fU0NSSVBULCAvLyA4MCwgQUxQSEFCRVRJQ19QUkVTRU5UQVRJT05fRk9STVMKKyAgICAgICAgQVJBQklDX1NDUklQVCwgLy8gODEsIEFSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQQorICAgICAgICBDT01NT05fU0NSSVBULCAvLyA4MiwgQ09NQklOSU5HX0hBTEZfTUFSS1MKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gODMsIENKS19DT01QQVRJQklMSVRZX0ZPUk1TCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDg0LCBTTUFMTF9GT1JNX1ZBUklBTlRTCisgICAgICAgIEFSQUJJQ19TQ1JJUFQsIC8vIDg1LCBBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0IKKyAgICAgICAgQ09NTU9OX1NDUklQVCwgLy8gODYsIFNQRUNJQUxTCisgICAgICAgIENPTU1PTl9TQ1JJUFQsIC8vIDg3LCBIQUxGV0lEVEhfQU5EX0ZVTExXSURUSF9GT1JNUworICAgICAgICBDT01NT05fU0NSSVBULCAvLyA4OCwgU1BFQ0lBTFMKKyAgICB9OworICAgICAgICAKKyAgICAvLyBjb3VsZCBiZSBmdXJ0aGVyIHJlZHVjZWQgdG8gYSBieXRlIGFycmF5LCBidXQgSSBkaWRuJ3QgYm90aGVyLgorICAgIHN0YXRpYyBmaW5hbCBpbnRbXVtdIHNwbGl0ID0geworICAgICAgICB7MHgwMjUwLCA0LCA1fSwgLy8gLTEKKyAgICAgICAgezB4MDJCMCwgNSwgNn0sIC8vIC0yCisgICAgICAgIHsweDAzNzAsIDcsIDh9LCAvLyAtMworICAgICAgICB7MHgwNTMwLCAwLCAxMH0sIC8vIC00CisgICAgICAgIHsweDA1OTAsIDEwLCAxMX0sIC8vIC01CisgICAgICAgIHsweDA3NTAsIDEzLCAwfSwgLy8gLTYKKyAgICAgICAgezB4MDdDMCwgMTQsIDB9LCAvLyAtNworICAgICAgICB7MHgxMEEwLCAyOCwgMjl9LCAvLyAtOAorICAgICAgICB7MHgxM0EwLCAwLCAzMn0sIC8vIC05CisgICAgICAgIHsweDE2QTAsIDM0LCAzNX0sIC8vIC0xMAorICAgICAgICB7MHgxOEIwLCAzNywgMH0sIC8vIC0xMQorICAgICAgICB7MHgyMDcwLCA0MCwgNDF9LCAvLyAtMTIKKyAgICAgICAgezB4MjBBMCwgNDEsIC0zMX0sIC8vIC0xMworICAgICAgICB7MHgyMTUwLCA0NCwgNDV9LCAvLyAtMTQKKyAgICAgICAgezB4MjE5MCwgNDUsIDQ2fSwgLy8gLTE1CisgICAgICAgIHsweDI0NDAsIDQ5LCAtMzJ9LCAvLyAtMTYKKyAgICAgICAgezB4MjVBMCwgNTMsIDU0fSwgLy8gLTE3CisgICAgICAgIHsweDI3QzAsIDU2LCAwfSwgLy8gLTE4CisgICAgICAgIHsweDJGRTAsIDU5LCAtMzN9LCAvLyAtMTkKKyAgICAgICAgezB4MzA0MCwgNjEsIDYyfSwgLy8gLTIwCisgICAgICAgIHsweDMwQTAsIDYyLCA2M30sIC8vIC0yMQorICAgICAgICB7MHgzMTMwLCA2NCwgNjV9LCAvLyAtMjIKKyAgICAgICAgezB4MzE5MCwgNjUsIC0zNH0sIC8vIC0yMworICAgICAgICB7MHg0REI2LCA3MCwgMH0sIC8vIC0yNAorICAgICAgICB7MHhBNDkwLCA3MiwgLTM1fSwgLy8gLTI1CisgICAgICAgIHsweEQ3QTQsIDc0LCAwfSwgLy8gLTI2CisgICAgICAgIHsweEZCNTAsIDgwLCA4MX0sIC8vIC0yNworICAgICAgICB7MHhGRTIwLCAwLCAtMzZ9LCAvLyAtMjgKKyAgICAgICAgezB4RkVGRiwgODUsIDg2fSwgLy8gLTI5CisgICAgICAgIHsweEZGRjAsIDg3LCAtMzd9LCAvLyAtMzAKKyAgICAgICAgezB4MjBEMCwgNDIsIDQzfSwgLy8gLTMxCisgICAgICAgIHsweDI0NjAsIDUwLCA1MX0sIC8vIC0zMgorICAgICAgICB7MHgyRkYwLCAwLCA2MH0sIC8vIC0zMworICAgICAgICB7MHgzMUEwLCA2NiwgLTM4fSwgLy8gLTM0CisgICAgICAgIHsweEE0RDAsIDczLCAwfSwgLy8tMzUKKyAgICAgICAgezB4RkUzMCwgODIsIC0zOX0sIC8vLTM2CisgICAgICAgIHsweEZGRkUsIDg4LCAwfSwgLy8tMzcKKyAgICAgICAgezB4MzFDMCwgNjcsIDB9LCAvLyAtMzgKKyAgICAgICAgezB4RkU1MCwgODMsIC00MH0sIC8vLTM5CisgICAgICAgIHsweEZFNzAsIDg0LCA4NX0gLy8gLTQwCisgICAgfTsKKyAgICAgICAgCisgICAgc3RhdGljIGZpbmFsIGJ5dGVbXSBjaGFyVG9CbG9jayA9IHsKKyAgICAgIDEsIDIsIDMsIDQsIC0xLCAtMiwgLTMsIDgsIDksIDksIC00LCAtNSwgMTIsIDEyLCAtNiwgLTcsCisgICAgICAwLCAwLCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjcsCisgICAgICAyOCwgLTgsIDMwLCAzMCwgMzEsIDMxLCAzMSwgLTksIDMzLCAzMywgMzMsIDMzLCAzMywgLTEwLCAwLCAzNiwKKyAgICAgIDM3LCAtMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4LCAzOCwgMzksIDM5LAorICAgICAgLTEyLCAtMTMsIC0xNCwgLTE1LCA0NywgNDcsIDQ4LCA0OCwgLTE2LCA1MSwgNTIsIC0xNywgNTUsIDU1LCA1NiwgLTE4LAorICAgICAgNTcsIDU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OCwgNTksIC0xOSwKKyAgICAgIC0yMCwgLTIxLCAtMjIsIC0yMywgNjgsIDY4LCA2OSwgNjksIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwKKyAgICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLAorICAgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsCisgICAgICA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIC0yNCwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcyLCA3MiwgNzIsIDcyLCA3MiwgNzIsIDcyLCA3MiwgNzIsIC0yNSwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAgICAgIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAorICAgICAgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgICAgICA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAgICAgIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAorICAgICAgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgLTI2LAorICAgICAgNzUsIDc1LCA3NSwgNzUsIDc1LCA3NSwgNzUsIDc2LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsCisgICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwKKyAgICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LAorICAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsCisgICAgICA3OCwgNzgsIDc5LCA3OSwgNzksIDc5LCAtMjcsIDgxLCA4MSwgODEsIDgxLCA4MSwgLTI4LCAtMjksIDg3LCAtMzAKKyAgICB9OworICAgICovCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVHJhbnNsaXRlcmF0b3JUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVHJhbnNsaXRlcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTE2ZTBkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVHJhbnNsaXRlcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwyODYxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVHJhbnNsaXRlcmF0b3JUZXN0LmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOS8wOSAxNjozMzo0MyAkCisgKiAkUmV2aXNpb246IDEuMTE3ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC50cmFuc2xpdDsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ2FzZUluc2Vuc2l0aXZlU3RyaW5nOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgICAgICAgICAgICAgICAgICAgSE9XIFRPIFVTRSBUSElTIFRFU1QgRklMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1vci0KKyAgICAgICAgICAgICAgICAgIEhvdyBJIGRldmVsb3BlZCBvbiB0d28gcGxhdGZvcm1zCisgICAgICAgICAgICAgICAgd2l0aG91dCBsb3NpbmcgKHRvbyBtdWNoIG9mKSBteSBtaW5kCisKKworMS4gQWRkIG5ldyB0ZXN0cyBieSBjb3B5aW5nL3Bhc3RpbmcvY2hhbmdpbmcgZXhpc3RpbmcgdGVzdHMuICBPbiBKYXZhLAorICAgYW55IHB1YmxpYyB2b2lkIG1ldGhvZCBuYW1lZCBUZXN0Li4uKCkgdGFraW5nIG5vIHBhcmFtZXRlcnMgYmVjb21lcworICAgYSB0ZXN0LiAgT24gQysrLCB5b3UgbmVlZCB0byBtb2RpZnkgdGhlIGhlYWRlciBhbmQgYWRkIGEgbGluZSB0bworICAgdGhlIHJ1bkluZGV4ZWRUZXN0KCkgZGlzcGF0Y2ggbWV0aG9kLgorCisyLiBNYWtlIGxpYmVyYWwgdXNlIG9mIHRoZSBleHBlY3QoKSBtZXRob2Q7IGl0IGlzIHlvdXIgZnJpZW5kLgorCiszLiBUaGUgdGVzdHMgaW4gdGhpcyBmaWxlIGV4YWN0bHkgbWF0Y2ggdGhvc2UgaW4gYSBzaXN0ZXIgZmlsZSBvbiB0aGUKKyAgIG90aGVyIHNpZGUuICBUaGUgdHdvIGZpbGVzIGFyZToKKworICAgaWN1NGo6ICBzcmMvY29tLmlibS5pY3UuZGV2LnRlc3QvdHJhbnNsaXQvVHJhbnNsaXRlcmF0b3JUZXN0LmphdmEKKyAgIGljdTRjOiAgc291cmNlL3Rlc3QvaW50bHRlc3QvdHJhbnN0c3QuY3BwCisKKyAgICAgICAgICAgICAgICAgID09PiBUSElTIElTIFRIRSBJTVBPUlRBTlQgUEFSVCA8PT0KKworICAgV2hlbiB5b3UgYWRkIGEgdGVzdCBpbiB0aGlzIGZpbGUsIGFkZCBpdCBpbiB0cmFuc3RzdC5jcHAgdG9vLgorICAgR2l2ZSBpdCB0aGUgc2FtZSBuYW1lIGFuZCBwdXQgaXQgaW4gdGhlIHNhbWUgcmVsYXRpdmUgcGxhY2UuICBUaGlzCisgICBtYWtlcyBtYWludGVuYW5jZSBhIGxvdCBzaW1wbGVyIGZvciBhbnkgcG9vciBzb3VsIHdobyBlbmRzIHVwCisgICB0cnlpbmcgdG8gc3luY2hyb25pemUgdGhlIHRlc3RzIGJldHdlZW4gaWN1NGogYW5kIGljdTRjLgorCis0LiBJZiB5b3UgTVVTVCBlbnRlciBhIHRlc3QgdGhhdCBpcyBOT1QgcGFyYWxsZWxlZCBpbiB0aGUgc2lzdGVyIGZpbGUsCisgICB0aGVuIGFkZCBpdCBpbiB0aGUgc3BlY2lhbCBub24tbWlycm9yZWQgc2VjdGlvbi4gIFRoZXNlIGFyZQorICAgbGFiZWxlZAorCisgICAgICJpY3U0aiBPTkxZIgorCisgICBvcgorCisgICAgICJpY3U0YyBPTkxZIgorCisgICBNYWtlIHN1cmUgeW91IGRvY3VtZW50IHRoZSByZWFzb24gdGhlIHRlc3QgaXMgaGVyZSBhbmQgbm90IHRoZXJlLgorCisKK1RoYW5rIHlvdS4KK1RoZSBNYW5hZ2VtZW50CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAdGVzdAorICogQHN1bW1hcnkgR2VuZXJhbCB0ZXN0IG9mIFRyYW5zbGl0ZXJhdG9yCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc2xpdGVyYXRvclRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFRyYW5zbGl0ZXJhdG9yVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0SW5zdGFudGlhdGlvbigpIHsKKyAgICAgICAgbG9uZyBtcyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBTdHJpbmcgSUQ7CisgICAgICAgIGZvciAoRW51bWVyYXRpb24gZSA9IFRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZUlEcygpOyBlLmhhc01vcmVFbGVtZW50cygpOyApIHsKKyAgICAgICAgICAgIElEID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKElELmVxdWFscygiTGF0aW4tSGFuL2RlZmluaXRpb24iKSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5UT0RPOiBkaXNhYmxpbmcgTGF0aW4tSGFuL2RlZmluaXRpb24gY2hlY2sgZm9yIG5vdzogZml4IGxhdGVyIik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKElEKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgZ2V0IGEgbmV3IGluc3RhbmNlIGlmIHdlIHRyeSBhZ2FpbgorICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQyID0gbnVsbDsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRydWUgb25seSBvZiBSQlQKKyAgICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0ICE9IHQyKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJPSzogIiArIFRyYW5zbGl0ZXJhdG9yLmdldERpc3BsYXlOYW1lKElEKSArICIgKCIgKyBJRCArICIpOiAiICsgdCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBJRCArICIgcmV0dXJuZWQgaWRlbnRpY2FsIGluc3RhbmNlcyIpOworICAgICAgICAgICAgICAgICAgICB0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIElEKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIE5vdyB0ZXN0IHRvUnVsZXMKKyAgICAgICAgICAgICAgICBTdHJpbmcgcnVsZXMgPSBudWxsOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gdC50b1J1bGVzKHRydWUpOworCisgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHUgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIngiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgyKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgSUQgKyAiLnRvUnVsZXMoKSA9PiBiYWQgcnVsZXM6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlcyk7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGV4MjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgdGVzdCB0aGUgZmFpbHVyZSBwYXRoCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBJRCA9ICI8Tm90IGEgdmFsaWQgVHJhbnNsaXRlcmF0b3IgSUQ+IjsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShJRCk7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIElEICsgIiByZXR1cm5lZCAiICsgdCk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgbG9nbG4oIk9LOiBCb2d1cyBJRCBoYW5kbGVkIHByb3Blcmx5Iik7CisgICAgICAgIH0KKworICAgICAgICBtcyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gbXM7CisgICAgICAgIGxvZ2xuKCJFbGFwc2VkIHRpbWU6ICIgKyBtcyArICIgbXMiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2ltcGxlUnVsZXMoKSB7CisgICAgICAgIC8qIEV4YW1wbGU6IHJ1bGVzIDEuIGFiPnh8eQorICAgICAgICAgKiAgICAgICAgICAgICAgICAyLiB5Yz56CisgICAgICAgICAqCisgICAgICAgICAqIFtdfGVhYmNkICBzdGFydCAtIG5vIG1hdGNoLCBjb3B5IGUgdG8gdHJhbmxhdGVkIGJ1ZmZlcgorICAgICAgICAgKiBbZV18YWJjZCAgbWF0Y2ggcnVsZSAxIC0gY29weSBvdXRwdXQgJiBhZGp1c3QgY3Vyc29yCisgICAgICAgICAqIFtleHx5XWNkICBtYXRjaCBydWxlIDIgLSBjb3B5IG91dHB1dCAmIGFkanVzdCBjdXJzb3IKKyAgICAgICAgICogW2V4el18ZCAgIG5vIG1hdGNoLCBjb3B5IGQgdG8gdHJhbnNsaXRlcmF0ZWQgYnVmZmVyCisgICAgICAgICAqIFtleHpkXXwgICBkb25lCisgICAgICAgICAqLworICAgICAgICBleHBlY3QoImFiPnh8eTsiICsKKyAgICAgICAgICAgICAgICJ5Yz56IiwKKyAgICAgICAgICAgICAgICJlYWJjZCIsICJleHpkIik7CisKKyAgICAgICAgLyogQW5vdGhlciBzZXQgb2YgcnVsZXM6CisgICAgICAgICAqICAgIDEuIGFiPnh8eXphY3cKKyAgICAgICAgICogICAgMi4gemE+cQorICAgICAgICAgKiAgICAzLiBxYz5yCisgICAgICAgICAqICAgIDQuIGN3Pm4KKyAgICAgICAgICoKKyAgICAgICAgICogW118YWIgICAgICAgUnVsZSAxCisgICAgICAgICAqIFt4fHl6YWN3XSAgIE5vIG1hdGNoCisgICAgICAgICAqIFt4eXx6YWN3XSAgIFJ1bGUgMgorICAgICAgICAgKiBbeHlxfGN3XSAgICBSdWxlIDQKKyAgICAgICAgICogW3h5cW5dfCAgICAgRG9uZQorICAgICAgICAgKi8KKyAgICAgICAgZXhwZWN0KCJhYj54fHl6YWN3OyIgKworICAgICAgICAgICAgICAgInphPnE7IiArCisgICAgICAgICAgICAgICAicWM+cjsiICsKKyAgICAgICAgICAgICAgICJjdz5uIiwKKyAgICAgICAgICAgICAgICJhYiIsICJ4eXFuIik7CisKKyAgICAgICAgLyogVGVzdCBjYXRlZ29yaWVzCisgICAgICAgICAqLworICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gbmV3IFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKCI8SUQ+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJGR1bW15PVx1RTEwMDsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHZvd2VsPVthZWlvdUFFSU9VXTsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJGx1PVs6THU6XTsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHZvd2VsIH0gJGx1ID4gJyEnOyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkdm93ZWwgPiAnJic7IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIichJyB7ICRsdSA+ICdeJzsiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJGx1ID4gJyonOyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhPkVSUk9SIik7CisgICAgICAgIGV4cGVjdCh0LCAiYWJjZGVmZ0FCQ0RFRkdVIiwgIiZiY2QmZmchXioqIV4qJiIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgaW5saW5lIHNldCBzeW50YXggYW5kIHNldCB2YXJpYWJsZSBzeW50YXguCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdElubGluZVNldCgpIHsKKyAgICAgICAgZXhwZWN0KCJ7IFs6TGw6XSB9IHggPiB5OyBbOkxsOl0gPiB6OyIsICJhQWJ4cSIsICJ6QXl6eiIpOworICAgICAgICBleHBlY3QoImFbMC05XWIgPiBxcnMiLCAiMWE3YjkiLCAiMXFyczkiKTsKKworICAgICAgICBleHBlY3QoIiRkaWdpdCA9IFswLTldOyIgKworICAgICAgICAgICAgICAgIiRhbHBoYSA9IFthLXpBLVpdOyIgKworICAgICAgICAgICAgICAgIiRhbHBoYW51bWVyaWMgPSBbJGRpZ2l0ICRhbHBoYV07IiArIC8vICoqKgorICAgICAgICAgICAgICAgIiRzcGVjaWFsID0gW14kYWxwaGFudW1lcmljXTsiICsgICAgIC8vICoqKgorICAgICAgICAgICAgICAgIiRhbHBoYW51bWVyaWMgPiAnLSc7IiArCisgICAgICAgICAgICAgICAiJHNwZWNpYWwgPiAnKic7IiwKKworICAgICAgICAgICAgICAgInRoeC0xMTM4IiwgIi0tLSotLS0tIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIHNvbWUgaW52ZXJzZXMgYW5kIGNvbmZpcm0gdGhhdCB0aGV5IHdvcmsuICBXZSBoYXZlIHRvIGJlCisgICAgICogY2FyZWZ1bCBob3cgd2UgZG8gdGhpcywgc2luY2UgdGhlIGludmVyc2VzIHdpbGwgbm90IGJlIHRydWUKKyAgICAgKiBpbnZlcnNlcyAtLSB3ZSBjYW4ndCB0aHJvdyBhbnkgcmFuZG9tIHN0cmluZyBhdCB0aGUgY29tcG9zaXRpb24KKyAgICAgKiBvZiB0aGUgdHJhbnNsaXRlcmF0b3JzIGFuZCBleHBlY3QgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLiAgRiB4CisgICAgICogRicgIT0gSS4gIEhvd2V2ZXIsIGlmIHdlIGFyZSBjYXJlZnVsIGFib3V0IHRoZSBpbnB1dCwgd2Ugd2lsbAorICAgICAqIGdldCB0aGUgZXhwZWN0ZWQgcmVzdWx0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0UnVsZUJhc2VkSW52ZXJzZSgpIHsKKyAgICAgICAgU3RyaW5nIFJVTEVTID0KKyAgICAgICAgICAgICJhYmM+enl4OyIgKworICAgICAgICAgICAgImFiPnl6OyIgKworICAgICAgICAgICAgImJjPnp4OyIgKworICAgICAgICAgICAgImNhPnh5OyIgKworICAgICAgICAgICAgImE+eDsiICsKKyAgICAgICAgICAgICJiPnk7IiArCisgICAgICAgICAgICAiYz56OyIgKworCisgICAgICAgICAgICAiYWJjPHp5eDsiICsKKyAgICAgICAgICAgICJhYjx5ejsiICsKKyAgICAgICAgICAgICJiYzx6eDsiICsKKyAgICAgICAgICAgICJjYTx4eTsiICsKKyAgICAgICAgICAgICJhPHg7IiArCisgICAgICAgICAgICAiYjx5OyIgKworICAgICAgICAgICAgImM8ejsiICsKKworICAgICAgICAgICAgIiI7CisKKyAgICAgICAgU3RyaW5nW10gREFUQSA9IHsKKyAgICAgICAgICAgIC8vIENhcmVmdWwgaGVyZSAtLSByYW5kb20gc3RyaW5ncyB3aWxsIG5vdCB3b3JrLiAgSWYgd2Uga2VlcAorICAgICAgICAgICAgLy8gdGhlIGxlZnQgc2lkZSB0byB0aGUgZG9tYWluIGFuZCB0aGUgcmlnaHQgc2lkZSB0byB0aGUgcmFuZ2UKKyAgICAgICAgICAgIC8vIHdlIHdpbGwgYmUgb2theSB0aG91Z2ggKGxlZnQsIGFiYzsgcmlnaHQgeHl6KS4KKyAgICAgICAgICAgICJhIiwgIngiLAorICAgICAgICAgICAgImFiY2FjYWIiLCAienl4eHh5eSIsCisgICAgICAgICAgICAiY2FjY2IiLCAieHl6enkiLAorICAgICAgICB9OworCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGZ3ZCA9IG5ldyBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcigiPElEPiIsIFJVTEVTKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgcmV2ID0gbmV3IFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKCI8SUQ+IiwgUlVMRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuUkVWRVJTRSwgbnVsbCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MikgeworICAgICAgICAgICAgZXhwZWN0KGZ3ZCwgREFUQVtpXSwgREFUQVtpKzFdKTsKKyAgICAgICAgICAgIGV4cGVjdChyZXYsIERBVEFbaSsxXSwgREFUQVtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCYXNpYyB0ZXN0IG9mIGtleWJvYXJkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RLZXlib2FyZCgpIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IG5ldyBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcigiPElEPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzY2g+WTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyJwcz55OyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArImNoPng7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiYT5BOyIpOworICAgICAgICBTdHJpbmcgREFUQVtdID0geworICAgICAgICAgICAgLy8gaW5zZXJ0aW9uLCBidWZmZXIKKyAgICAgICAgICAgICJhIiwgIkEiLAorICAgICAgICAgICAgInAiLCAiQXAiLAorICAgICAgICAgICAgInMiLCAiQXBzIiwKKyAgICAgICAgICAgICJjIiwgIkFwc2MiLAorICAgICAgICAgICAgImEiLCAiQXljQSIsCisgICAgICAgICAgICAicHNjaCIsICJBeWNBWSIsCisgICAgICAgICAgICBudWxsLCAiQXljQVkiLCAvLyBudWxsIG1lYW5zIGZpbmlzaEtleWJvYXJkVHJhbnNsaXRlcmF0aW9uCisgICAgICAgIH07CisKKyAgICAgICAga2V5Ym9hcmRBdXgodCwgREFUQSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQmFzaWMgdGVzdCBvZiBrZXlib2FyZCB3aXRoIGN1cnNvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0S2V5Ym9hcmQyKCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gbmV3IFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKCI8SUQ+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieWNoPlk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsicHM+fHk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiY2g+eDsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyJhPkE7Iik7CisgICAgICAgIFN0cmluZyBEQVRBW10gPSB7CisgICAgICAgICAgICAvLyBpbnNlcnRpb24sIGJ1ZmZlcgorICAgICAgICAgICAgImEiLCAiQSIsCisgICAgICAgICAgICAicCIsICJBcCIsCisgICAgICAgICAgICAicyIsICJBcHMiLCAvLyBtb2RpZmllZCBmb3Igcm9sbGJhY2sgLSAiQXkiLAorICAgICAgICAgICAgImMiLCAiQXBzYyIsIC8vIG1vZGlmaWVkIGZvciByb2xsYmFjayAtICJBeWMiLAorICAgICAgICAgICAgImEiLCAiQXljQSIsCisgICAgICAgICAgICAicCIsICJBeWNBcCIsCisgICAgICAgICAgICAicyIsICJBeWNBcHMiLCAvLyBtb2RpZmllZCBmb3Igcm9sbGJhY2sgLSAiQXljQXkiLAorICAgICAgICAgICAgImMiLCAiQXljQXBzYyIsIC8vIG1vZGlmaWVkIGZvciByb2xsYmFjayAtICJBeWNBeWMiLAorICAgICAgICAgICAgImgiLCAiQXljQVkiLAorICAgICAgICAgICAgbnVsbCwgIkF5Y0FZIiwgLy8gbnVsbCBtZWFucyBmaW5pc2hLZXlib2FyZFRyYW5zbGl0ZXJhdGlvbgorICAgICAgICB9OworCisgICAgICAgIGtleWJvYXJkQXV4KHQsIERBVEEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3Qga2V5Ym9hcmQgdHJhbnNsaXRlcmF0aW9uIHdpdGggYmFjay1yZXBsYWNlbWVudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0S2V5Ym9hcmQzKCkgeworICAgICAgICAvLyBXZSB3YW50IHRoPnogYnV0IHQ+eS4gIEZ1cnRoZXJtb3JlLCBkdXJpbmcga2V5Ym9hcmQKKyAgICAgICAgLy8gdHJhbnNsaXRlcmF0aW9uIHdlIHdhbnQgdD55IHRoZW4geWg+eiBpZiB0LCB0aGVuIGggYXJlCisgICAgICAgIC8vIHR5cGVkLgorICAgICAgICBTdHJpbmcgUlVMRVMgPQorICAgICAgICAgICAgInQ+fHk7IiArCisgICAgICAgICAgICAieWg+ejsiICsKKyAgICAgICAgICAgICIiOworCisgICAgICAgIFN0cmluZ1tdIERBVEEgPSB7CisgICAgICAgICAgICAvLyBDb2x1bW4gMTogY2hhcmFjdGVycyB0byBhZGQgdG8gYnVmZmVyIChhcyBpZiB0eXBlZCkKKyAgICAgICAgICAgIC8vIENvbHVtbiAyOiBleHBlY3RlZCBhcHBlYXJhbmNlIG9mIGJ1ZmZlciBhZnRlcgorICAgICAgICAgICAgLy8gICAgICAgICAgIGtleWJvYXJkIHhsaXRlcmF0aW9uLgorICAgICAgICAgICAgImEiLCAiYSIsCisgICAgICAgICAgICAiYiIsICJhYiIsCisgICAgICAgICAgICAidCIsICJhYnQiLCAvLyBtb2RpZmllZCBmb3Igcm9sbGJhY2sgLSAiYWJ5IiwKKyAgICAgICAgICAgICJjIiwgImFieWMiLAorICAgICAgICAgICAgInQiLCAiYWJ5Y3QiLCAvLyBtb2RpZmllZCBmb3Igcm9sbGJhY2sgLSAiYWJ5Y3kiLAorICAgICAgICAgICAgImgiLCAiYWJ5Y3oiLAorICAgICAgICAgICAgbnVsbCwgImFieWN6IiwgLy8gbnVsbCBtZWFucyBmaW5pc2hLZXlib2FyZFRyYW5zbGl0ZXJhdGlvbgorICAgICAgICB9OworCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBuZXcgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IoIjxJRD4iLCBSVUxFUyk7CisgICAgICAgIGtleWJvYXJkQXV4KHQsIERBVEEpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBrZXlib2FyZEF1eChUcmFuc2xpdGVyYXRvciB0LCBTdHJpbmdbXSBEQVRBKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIGluZGV4ID0gbmV3IFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uKCk7CisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHMgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0yKSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgbG9nOworICAgICAgICAgICAgaWYgKERBVEFbaV0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxvZyA9IG5ldyBTdHJpbmdCdWZmZXIocy50b1N0cmluZygpICsgIiArICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgREFUQVtpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIC0+ICIpOworICAgICAgICAgICAgICAgIHQudHJhbnNsaXRlcmF0ZShzLCBpbmRleCwgREFUQVtpXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZyA9IG5ldyBTdHJpbmdCdWZmZXIocy50b1N0cmluZygpICsgIiA9PiAiKTsKKyAgICAgICAgICAgICAgICB0LmZpbmlzaFRyYW5zbGl0ZXJhdGlvbihzLCBpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBVdGlsaXR5LmZvcm1hdElucHV0KGxvZywgcywgaW5kZXgpOworICAgICAgICAgICAgaWYgKHMudG9TdHJpbmcoKS5lcXVhbHMoREFUQVtpKzFdKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKGxvZy50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBsb2cudG9TdHJpbmcoKSArICIsIGV4cGVjdGVkICIgKyBEQVRBW2krMV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGF0aW4tQXJhYmljIGhhcyBiZWVuIHRlbXBvcmFyaWx5IHJlbW92ZWQgdW50aWwgaXQgY2FuIGJlCisgICAgLy8gZG9uZSBjb3JyZWN0bHkuCisKKy8vICBwdWJsaWMgdm9pZCBUZXN0QXJhYmljKCkgeworLy8gICAgICBTdHJpbmcgREFUQVtdID0geworLy8gICAgICAgICAgIkFyYWJpYyIsCisvLyAgICAgICAgICAgICAgIlx1MDYyYVx1MDYyYVx1MDY0NVx1MDYyYVx1MDYzOSAiKworLy8gICAgICAgICAgICAgICJcdTA2MjdcdTA2NDRcdTA2NDRcdTA2M2FcdTA2MjkgIisKKy8vICAgICAgICAgICAgICAiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjMxXHUwNjI4XHUwNjI4XHUwNjRhXHUwNjI5ICIrCisvLyAgICAgICAgICAgICAgIlx1MDYyOFx1MDYyOFx1MDY0Nlx1MDYzOFx1MDY0NSAiKworLy8gICAgICAgICAgICAgICJcdTA2NDNcdTA2MmFcdTA2MjdcdTA2MjhcdTA2MjhcdTA2NGFcdTA2MjkgIisKKy8vICAgICAgICAgICAgICAiXHUwNjJjXHUwNjQ1XHUwNjRhXHUwNjQ0XHUwNjI5IgorLy8gICAgICB9OworCisvLyAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTGF0aW4tQXJhYmljIik7CisvLyAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MikgeworLy8gICAgICAgICAgZXhwZWN0KHQsIERBVEFbaV0sIERBVEFbaSsxXSk7CisvLyAgICAgIH0KKy8vICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wb3NlIHRoZSBLYW5hIHRyYW5zbGl0ZXJhdG9yIGZvcndhcmQgYW5kIHJldmVyc2UgYW5kIHRyeQorICAgICAqIHNvbWUgc3RyaW5ncyB0aGF0IHNob3VsZCBjb21lIG91dCB1bmNoYW5nZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENvbXBvdW5kS2FuYSgpIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IG5ldyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKCJMYXRpbi1LYXRha2FuYTtLYXRha2FuYS1MYXRpbiIpOworICAgICAgICBleHBlY3QodCwgImFhYWFhIiwgImFhYWFhIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcG9zZSB0aGUgaGV4IHRyYW5zbGl0ZXJhdG9ycyBmb3J3YXJkIGFuZCByZXZlcnNlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDb21wb3VuZEhleCgpIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgYSA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJBbnktSGV4Iik7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGIgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSGV4LUFueSIpOworICAgICAgICBUcmFuc2xpdGVyYXRvcltdIHRyYW5zID0geyBhLCBiIH07CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGFiID0gbmV3IENvbXBvdW5kVHJhbnNsaXRlcmF0b3IodHJhbnMpOworCisgICAgICAgIC8vIERvIHNvbWUgYmFzaWMgdGVzdHMgb2YgYgorICAgICAgICBleHBlY3QoYiwgIlxcdTAwMzBcXHUwMDMxIiwgIjAxIik7CisKKyAgICAgICAgU3RyaW5nIHMgPSAiYWJjZGUiOworICAgICAgICBleHBlY3QoYWIsIHMsIHMpOworCisgICAgICAgIHRyYW5zID0gbmV3IFRyYW5zbGl0ZXJhdG9yW10geyBiLCBhIH07CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGJhID0gbmV3IENvbXBvdW5kVHJhbnNsaXRlcmF0b3IodHJhbnMpOworICAgICAgICBSZXBsYWNlYWJsZVN0cmluZyBzdHIgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcocyk7CisgICAgICAgIGEudHJhbnNsaXRlcmF0ZShzdHIpOworICAgICAgICBleHBlY3QoYmEsIHN0ci50b1N0cmluZygpLCBzdHIudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRG8gc29tZSBiYXNpYyB0ZXN0cyBvZiBmaWx0ZXJpbmcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEZpbHRlcmluZygpIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgaGV4ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkFueS1IZXgiKTsKKyAgICAgICAgaGV4LnNldEZpbHRlcihuZXcgVW5pY29kZUZpbHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKGludCBjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGMgIT0gJ2MnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVibGljIFN0cmluZyB0b1BhdHRlcm4oYm9vbGVhbiBlc2NhcGVVbnByaW50YWJsZSkgeworICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXNJbmRleFZhbHVlKGludCB2KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVibGljIHZvaWQgYWRkTWF0Y2hTZXRUbyhVbmljb2RlU2V0IHRvVW5pb25Ubykge30KKyAgICAgICAgfSk7CisgICAgICAgIFN0cmluZyBzID0gImFiY2RlIjsKKyAgICAgICAgU3RyaW5nIG91dCA9IGhleC50cmFuc2xpdGVyYXRlKHMpOworICAgICAgICBTdHJpbmcgZXhwID0gIlxcdTAwNjFcXHUwMDYyY1xcdTAwNjRcXHUwMDY1IjsKKyAgICAgICAgaWYgKG91dC5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgbG9nbG4oIk9rOiAgIFwiIiArIGV4cCArICJcIiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nbG4oIkZBSUw6IFwiIiArIG91dCArICJcIiwgd2FudGVkIFwiIiArIGV4cCArICJcIiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBhbmNob3JzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEFuY2hvcnMoKSB7CisgICAgICAgIGV4cGVjdCgiXmFiICA+IDAxIDsiICsKKyAgICAgICAgICAgICAgICIgYWIgID4gfDggOyIgKworICAgICAgICAgICAgICAgIiAgYiAgPiBrIDsiICsKKyAgICAgICAgICAgICAgICIgOHgkID4gNDUgOyIgKworICAgICAgICAgICAgICAgIiA4eCAgPiA3NyA7IiwKKworICAgICAgICAgICAgICAgImFiYWJiYWJ4YWJ4IiwKKyAgICAgICAgICAgICAgICIwMThrNzc0NSIpOworICAgICAgICBleHBlY3QoIiRzID0gW3okXSA7IiArCisgICAgICAgICAgICAgICAiJHN7YWIgICAgPiAwMSA7IiArCisgICAgICAgICAgICAgICAiICAgYWIgICAgPiB8OCA7IiArCisgICAgICAgICAgICAgICAiICAgIGIgICAgPiBrIDsiICsKKyAgICAgICAgICAgICAgICIgICA4eH0kcyA+IDQ1IDsiICsKKyAgICAgICAgICAgICAgICIgICA4eCAgICA+IDc3IDsiLAorCisgICAgICAgICAgICAgICAiYWJ6YWJhYmJhYnh6YWJ4YWJ4IiwKKyAgICAgICAgICAgICAgICIwMXowMThrNDV6MDF4NDUiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IHBhdHRlcm4gcXVvdGluZyBhbmQgZXNjYXBlIG1lY2hhbmlzbXMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFBhdHRlcm5RdW90aW5nKCkgeworICAgICAgICAvLyBBcnJheSBvZiAzbiBpdGVtcworICAgICAgICAvLyBFYWNoIGl0ZW0gaXMgPHJ1bGVzPiwgPGlucHV0PiwgPGV4cGVjdGVkIG91dHB1dD4KKyAgICAgICAgU3RyaW5nW10gREFUQSA9IHsKKyAgICAgICAgICAgICJcdTRFMDE+J1ttYWxlIGFkdWx0XSciLCAiXHU0RTAxIiwgIlttYWxlIGFkdWx0XSIsCisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0zKSB7CisgICAgICAgICAgICBsb2dsbigiUGF0dGVybjogIiArIFV0aWxpdHkuZXNjYXBlKERBVEFbaV0pKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBuZXcgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IoIjxJRD4iLCBEQVRBW2ldKTsKKyAgICAgICAgICAgIGV4cGVjdCh0LCBEQVRBW2krMV0sIERBVEFbaSsyXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIGJ1Z3MgZm91bmQgaW4gR3JlZWsgdHJhbnNsaXRlcmF0aW9uLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RKMjc3KCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvciBnbCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJHcmVlay1MYXRpbjsgTkZEOyBbOk06XVJlbW92ZTsgTkZDIik7CisKKyAgICAgICAgY2hhciBzaWdtYSA9IChjaGFyKTB4M0MzOworICAgICAgICBjaGFyIHVwc2lsb24gPSAoY2hhcikweDNDNTsKKyAgICAgICAgY2hhciBudSA9IChjaGFyKTB4M0JEOworICAgICAgICAvLyBub3QgdXNlZCBjaGFyIFBISSA9IChjaGFyKTB4M0E2OworICAgICAgICBjaGFyIGFscGhhID0gKGNoYXIpMHgzQjE7CisgICAgICAgIC8vIG5vdCB1c2VkIGNoYXIgb21lZ2EgPSAoY2hhcikweDNDOTsKKyAgICAgICAgLy8gbm90IHVzZWQgY2hhciBvbWljcm9uID0gKGNoYXIpMHgzQkY7CisgICAgICAgIC8vIG5vdCB1c2VkIGNoYXIgZXBzaWxvbiA9IChjaGFyKTB4M0I1OworCisgICAgICAgIC8vIHNpZ21hIHVwc2lsb24gbnUgLT4gc3luCisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJ1Zi5hcHBlbmQoc2lnbWEpLmFwcGVuZCh1cHNpbG9uKS5hcHBlbmQobnUpOworICAgICAgICBTdHJpbmcgc3luID0gYnVmLnRvU3RyaW5nKCk7CisgICAgICAgIGV4cGVjdChnbCwgc3luLCAic3luIik7CisKKyAgICAgICAgLy8gc2lnbWEgYWxwaGEgdXBzaWxvbiBudSAtPiBzYXVuCisgICAgICAgIGJ1Zi5zZXRMZW5ndGgoMCk7CisgICAgICAgIGJ1Zi5hcHBlbmQoc2lnbWEpLmFwcGVuZChhbHBoYSkuYXBwZW5kKHVwc2lsb24pLmFwcGVuZChudSk7CisgICAgICAgIFN0cmluZyBzYXluID0gYnVmLnRvU3RyaW5nKCk7CisgICAgICAgIGV4cGVjdChnbCwgc2F5biwgInNhdW4iKTsKKworICAgICAgICAvLyBBZ2FpbiwgdXNpbmcgYSBzbWFsbGVyIHJ1bGUgc2V0CisgICAgICAgIFN0cmluZyBydWxlcyA9CisgICAgICAgICAgICAgICAgICAgICIkYWxwaGEgICA9IFx1MDNCMTsiICsKKyAgICAgICAgICAgICAgICAgICAgIiRudSAgICAgID0gXHUwM0JEOyIgKworICAgICAgICAgICAgICAgICAgICAiJHNpZ21hICAgPSBcdTAzQzM7IiArCisgICAgICAgICAgICAgICAgICAgICIkeXBzaWxvbiA9IFx1MDNDNTsiICsKKyAgICAgICAgICAgICAgICAgICAgIiR2b3dlbCAgID0gW2FlaW91QUVJT1UkYWxwaGEkeXBzaWxvbl07IiArCisgICAgICAgICAgICAgICAgICAgICJzIDw+ICAgICAgICAgICAkc2lnbWE7IiArCisgICAgICAgICAgICAgICAgICAgICJhIDw+ICAgICAgICAgICAkYWxwaGE7IiArCisgICAgICAgICAgICAgICAgICAgICJ1IDw+ICAkdm93ZWwgeyAkeXBzaWxvbjsiICsKKyAgICAgICAgICAgICAgICAgICAgInkgPD4gICAgICAgICAgICR5cHNpbG9uOyIgKworICAgICAgICAgICAgICAgICAgICAibiA8PiAgICAgICAgICAgJG51OyI7CisgICAgICAgIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yIG1pbmkgPSBuZXcgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IKKyAgICAgICAgICAgICgibWluaSIsIHJ1bGVzLCBUcmFuc2xpdGVyYXRvci5SRVZFUlNFLCBudWxsKTsKKyAgICAgICAgZXhwZWN0KG1pbmksIHN5biwgInN5biIpOworICAgICAgICBleHBlY3QobWluaSwgc2F5biwgInNhdW4iKTsKKworLy98ICAgIC8vIFRyYW5zbGl0ZXJhdGUgdGhlIEdyZWVrIGxvY2FsZSBkYXRhCisvL3wgICAgTG9jYWxlIGVsKCJlbCIpOworLy98ICAgIERhdGVGb3JtYXRTeW1ib2xzIHN5bXMoZWwsIHN0YXR1cyk7CisvL3wgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7IGVycmxuKCJGQUlMOiBUcmFuc2xpdGVyYXRvciBjb25zdHJ1Y3RvciBmYWlsZWQiKTsgcmV0dXJuOyB9CisvL3wgICAgaW50MzJfdCBpLCBjb3VudDsKKy8vfCAgICBjb25zdCBVbmljb2RlU3RyaW5nKiBkYXRhID0gc3ltcy5nZXRNb250aHMoY291bnQpOworLy98ICAgIGZvciAoaT0wOyBpPGNvdW50OyArK2kpIHsKKy8vfCAgICAgICAgaWYgKGRhdGFbaV0ubGVuZ3RoKCkgPT0gMCkgeworLy98ICAgICAgICAgICAgY29udGludWU7CisvL3wgICAgICAgIH0KKy8vfCAgICAgICAgVW5pY29kZVN0cmluZyBvdXQoZGF0YVtpXSk7CisvL3wgICAgICAgIGdsLT50cmFuc2xpdGVyYXRlKG91dCk7CisvL3wgICAgICAgIGJvb2xfdCBvayA9IFRSVUU7CisvL3wgICAgICAgIGlmIChkYXRhW2ldLmxlbmd0aCgpID49IDIgJiYgb3V0Lmxlbmd0aCgpID49IDIgJiYKKy8vfCAgICAgICAgICAgIHVfaXN1cHBlcihkYXRhW2ldLmNoYXJBdCgwKSkgJiYgdV9pc2xvd2VyKGRhdGFbaV0uY2hhckF0KDEpKSkgeworLy98ICAgICAgICAgICAgaWYgKCEodV9pc3VwcGVyKG91dC5jaGFyQXQoMCkpICYmIHVfaXNsb3dlcihvdXQuY2hhckF0KDEpKSkpIHsKKy8vfCAgICAgICAgICAgICAgICBvayA9IEZBTFNFOworLy98ICAgICAgICAgICAgfQorLy98ICAgICAgICB9CisvL3wgICAgICAgIGlmIChvaykgeworLy98ICAgICAgICAgICAgbG9nbG4ocHJldHRpZnkoZGF0YVtpXSArICIgLT4gIiArIG91dCkpOworLy98ICAgICAgICB9IGVsc2UgeworLy98ICAgICAgICAgICAgZXJybG4oVW5pY29kZVN0cmluZygiRkFJTDogIikgKyBwcmV0dGlmeShkYXRhW2ldICsgIiAtPiAiICsgb3V0KSk7CisvL3wgICAgICAgIH0KKy8vfCAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJlZml4LCBzdWZmaXggc3VwcG9ydCBpbiBoZXggdHJhbnNsaXRlcmF0b3JzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEoyNDMoKSB7CisgICAgICAgIC8vIFRlc3QgZGVmYXVsdCBIZXgtQW55LCB3aGljaCBzaG91bGQgaGFuZGxlCisgICAgICAgIC8vIFxcdSwgXFxVLCB1KywgYW5kIFUrCisgICAgICAgIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIGhleCA9IG5ldyBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcigpOworICAgICAgICBleHBlY3QoaGV4LCAiXFx1MDA0MStcXFUwMDQyLHUrMDA0M3V1KzAwNDR6IiwgIkErQixDdUR6Iik7CisKKyAgICAgICAgLy8gVHJ5IGEgY3VzdG9tIEhleC1BbnkKKyAgICAgICAgLy8gXFx1WFhYWCBhbmQgJiN4WFhYWDsKKyAgICAgICAgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IgaGV4MiA9IG5ldyBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcigiXFxcXHUjIyMwOyZcXCN4IyMjMFxcOyIpOworICAgICAgICBleHBlY3QoaGV4MiwgIlxcdTYxXFx1MDYyXFx1MDA2M1xcdTAwNjQ1XFx1NjZ4JiN4MzA7JiN4MDMxOyYjeDAwMzI7JiN4MDAwMzM7IiwKKyAgICAgICAgICAgICAgICJhYmNkNWZ4MDEyJiN4MDAwMzM7Iik7CisKKyAgICAgICAgLy8gVHJ5IGN1c3RvbSBBbnktSGV4IChkZWZhdWx0IGlzIHRlc3RlZCBlbHNld2hlcmUpCisgICAgICAgIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yIGhleDMgPSBuZXcgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IoIiZcXCN4IyMjMDsiKTsKKyAgICAgICAgZXhwZWN0KGhleDMsICIwMTIiLCAiJiN4MzA7JiN4MzE7JiN4MzI7Iik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEozMjkoKSB7CisKKyAgICAgICAgT2JqZWN0W10gREFUQSA9IHsKKyAgICAgICAgICAgIG5ldyBCb29sZWFuKGZhbHNlKSwgImEgPiBiOyBjID4gZCIsCisgICAgICAgICAgICBuZXcgQm9vbGVhbih0cnVlKSwgICJhID4gYjsgbm8gb3BlcmF0b3I7IGMgPiBkIiwKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgIFN0cmluZyBlcnIgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gbmV3CisgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKCI8SUQ+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmluZykgREFUQVtpKzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5GT1JXQVJELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZXJyID0gZS5nZXRNZXNzYWdlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sZWFuIGdvdEVycm9yID0gKGVyciAhPSBudWxsKTsKKyAgICAgICAgICAgIFN0cmluZyBkZXNjID0gKFN0cmluZykgREFUQVtpKzFdICsKKyAgICAgICAgICAgICAgICAoZ290RXJyb3IgPyAoIiAtPiBlcnJvcjogIiArIGVycikgOiAiIC0+IG5vIGVycm9yIik7CisgICAgICAgICAgICBpZiAoKGVyciAhPSBudWxsKSA9PSAoKEJvb2xlYW4pREFUQVtpXSkuYm9vbGVhblZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICAgIiArIGRlc2MpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIGRlc2MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBzZWdtZW50cyBhbmQgc2VnbWVudCByZWZlcmVuY2VzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RTZWdtZW50cygpIHsKKyAgICAgICAgLy8gQXJyYXkgb2YgM24gaXRlbXMKKyAgICAgICAgLy8gRWFjaCBpdGVtIGlzIDxydWxlcz4sIDxpbnB1dD4sIDxleHBlY3RlZCBvdXRwdXQ+CisgICAgICAgIFN0cmluZ1tdIERBVEEgPSB7CisgICAgICAgICAgICAiKFthLXpdKSAnLicgKFswLTldKSA+ICQyICctJyAkMSIsCisgICAgICAgICAgICAiYWJjLjEyMy54eXouNDU2IiwKKyAgICAgICAgICAgICJhYjEtYzIzLnh5NC16NTYiLAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MykgeworICAgICAgICAgICAgbG9nbG4oIlBhdHRlcm46ICIgKyBVdGlsaXR5LmVzY2FwZShEQVRBW2ldKSk7CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gbmV3IFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKCI8SUQ+IiwgREFUQVtpXSk7CisgICAgICAgICAgICBleHBlY3QodCwgREFUQVtpKzFdLCBEQVRBW2krMl0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBjdXJzb3IgcG9zaXRpb25pbmcgb3V0c2lkZSBvZiB0aGUga2V5CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEN1cnNvck9mZnNldCgpIHsKKyAgICAgICAgLy8gQXJyYXkgb2YgM24gaXRlbXMKKyAgICAgICAgLy8gRWFjaCBpdGVtIGlzIDxydWxlcz4sIDxpbnB1dD4sIDxleHBlY3RlZCBvdXRwdXQ+CisgICAgICAgIFN0cmluZ1tdIERBVEEgPSB7CisgICAgICAgICAgICAicHJlIHthbHBoYX0gcG9zdCA+IHwgQCBBTFBIQSA7IiArCisgICAgICAgICAgICAiZUFMUEhBID4gYmV0YSA7IiArCisgICAgICAgICAgICAicHJlIHtiZXRhfSBwb3N0ID4gQkVUQSBAQCB8IDsiICsKKyAgICAgICAgICAgICJwb3N0ID4geHl6IiwKKworICAgICAgICAgICAgInByZWFscGhhcG9zdCBwcmViZXRhcG9zdCIsCisgICAgICAgICAgICAicHJiZXRheHl6IHByZUJFVEFwb3N0IiwKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7IGkrPTMpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJQYXR0ZXJuOiAiICsgVXRpbGl0eS5lc2NhcGUoREFUQVtpXSkpOworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IG5ldyBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcigiPElEPiIsIERBVEFbaV0pOworICAgICAgICAgICAgZXhwZWN0KHQsIERBVEFbaSsxXSwgREFUQVtpKzJdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgemVybyBsZW5ndGggYW5kID4gMSBjaGFyIGxlbmd0aCB2YXJpYWJsZSB2YWx1ZXMuICBUZXN0CisgICAgICogdXNlIG9mIHZhcmlhYmxlIHJlZnMgaW4gVW5pY29kZVNldHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEFyYml0cmFyeVZhcmlhYmxlVmFsdWVzKCkgeworICAgICAgICAvLyBBcnJheSBvZiAzbiBpdGVtcworICAgICAgICAvLyBFYWNoIGl0ZW0gaXMgPHJ1bGVzPiwgPGlucHV0PiwgPGV4cGVjdGVkIG91dHB1dD4KKyAgICAgICAgU3RyaW5nW10gREFUQSA9IHsKKyAgICAgICAgICAgICIkYWJlID0gYWI7IiArCisgICAgICAgICAgICAiJHBhdCA9IHhbeVldejsiICsKKyAgICAgICAgICAgICIkbGwgID0gJ2Eteic7IiArCisgICAgICAgICAgICAiJGxsWiA9IFskbGxdOyIgKworICAgICAgICAgICAgIiRsbFkgPSBbJGxsJHBhdF07IiArCisgICAgICAgICAgICAiJGVtcCA9IDsiICsKKworICAgICAgICAgICAgIiRhYmUgPiBBQkU7IiArCisgICAgICAgICAgICAiJHBhdCA+IEVORDsiICsKKyAgICAgICAgICAgICIkbGxaID4gMTsiICsKKyAgICAgICAgICAgICIkbGxZID4gMjsiICsKKyAgICAgICAgICAgICI3JGVtcCA4ID4gOTsiICsKKyAgICAgICAgICAgICIiLAorCisgICAgICAgICAgICAiYWIgeFl6eHl6IHN0WTc4IiwKKyAgICAgICAgICAgICJBQkUgRU5ERU5EIDExMjkiLAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MykgeworICAgICAgICAgICAgbG9nbG4oIlBhdHRlcm46ICIgKyBVdGlsaXR5LmVzY2FwZShEQVRBW2ldKSk7CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gbmV3IFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKCI8SUQ+IiwgREFUQVtpXSk7CisgICAgICAgICAgICBleHBlY3QodCwgREFUQVtpKzFdLCBEQVRBW2krMl0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uZmlybSB0aGF0IHRoZSBjb250ZXh0U3RhcnQsIGNvbnRleHRMaW1pdCwgc3RhcnQsIGFuZCBsaW1pdAorICAgICAqIGJlaGF2ZSBjb3JyZWN0bHkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFBvc2l0aW9uSGFuZGxpbmcoKSB7CisgICAgICAgIC8vIEFycmF5IG9mIDNuIGl0ZW1zCisgICAgICAgIC8vIEVhY2ggaXRlbSBpcyA8cnVsZXM+LCA8aW5wdXQ+LCA8ZXhwZWN0ZWQgb3V0cHV0PgorICAgICAgICBTdHJpbmdbXSBEQVRBID0geworICAgICAgICAgICAgImF7dH0gPiBTUyA7IHt0fWIgPiBVVSA7IHt0fSA+IFRUIDsiLAorICAgICAgICAgICAgInh0YXQgdHh0YiIsIC8vIHBvcyAwLDksMCw5CisgICAgICAgICAgICAieFRUYVNTIFRUeFVVYiIsCisKKyAgICAgICAgICAgICJhe3R9ID4gU1MgOyB7dH1iID4gVVUgOyB7dH0gPiBUVCA7IiwKKyAgICAgICAgICAgICJ4dGF0IHR4dGIiLCAvLyBwb3MgMiw5LDMsOAorICAgICAgICAgICAgInh0YVNTIFRUeFVVYiIsCisKKyAgICAgICAgICAgICJhe3R9ID4gU1MgOyB7dH1iID4gVVUgOyB7dH0gPiBUVCA7IiwKKyAgICAgICAgICAgICJ4dGF0IHR4dGIiLCAvLyBwb3MgMyw4LDMsOAorICAgICAgICAgICAgInh0YVRUIFRUeFRUYiIsCisgICAgICAgIH07CisKKyAgICAgICAgLy8gQXJyYXkgb2YgNG4gcG9zaXRpb25zIC0tIHRoZXNlIGdvIHdpdGggdGhlIERBVEEgYXJyYXkKKyAgICAgICAgLy8gVGhleSBhcmU6IGNvbnRleHRTdGFydCwgY29udGV4dExpbWl0LCBzdGFydCwgbGltaXQKKyAgICAgICAgaW50W10gUE9TID0geworICAgICAgICAgICAgMCwgOSwgMCwgOSwKKyAgICAgICAgICAgIDIsIDksIDMsIDgsCisgICAgICAgICAgICAzLCA4LCAzLCA4LAorICAgICAgICB9OworCisgICAgICAgIGludCBuID0gREFUQS5sZW5ndGgvMzsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPG47IGkrKykgeworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IG5ldyBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcigiPElEPiIsIERBVEFbMyppXSk7CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBwb3MgPSBuZXcgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24oCisgICAgICAgICAgICAgICAgUE9TWzQqaV0sIFBPU1s0KmkrMV0sIFBPU1s0KmkrMl0sIFBPU1s0KmkrM10pOworICAgICAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgcnNvdXJjZSA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyhEQVRBWzMqaSsxXSk7CisgICAgICAgICAgICB0LnRyYW5zbGl0ZXJhdGUocnNvdXJjZSwgcG9zKTsKKyAgICAgICAgICAgIHQuZmluaXNoVHJhbnNsaXRlcmF0aW9uKHJzb3VyY2UsIHBvcyk7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcnNvdXJjZS50b1N0cmluZygpOworICAgICAgICAgICAgU3RyaW5nIGV4cCA9IERBVEFbMyppKzJdOworICAgICAgICAgICAgZXhwZWN0QXV4KFV0aWxpdHkuZXNjYXBlKERBVEFbMyppXSksCisgICAgICAgICAgICAgICAgICAgICAgREFUQVszKmkrMV0sCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcXVhbHMoZXhwKSwKKyAgICAgICAgICAgICAgICAgICAgICBleHApOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgSGlyYWdhbmEtS2F0YWthbmEgdHJhbnNsaXRlcmF0b3IuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEhpcmFnYW5hS2F0YWthbmEoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGhrID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkhpcmFnYW5hLUthdGFrYW5hIik7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGtoID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkthdGFrYW5hLUhpcmFnYW5hIik7CisKKyAgICAgICAgLy8gQXJyYXkgb2YgM24gaXRlbXMKKyAgICAgICAgLy8gRWFjaCBpdGVtIGlzICJoayJ8ImtoInwiYm90aCIsIDxIaXJhZ2FuYT4sIDxLYXRha2FuYT4KKyAgICAgICAgU3RyaW5nW10gREFUQSA9IHsKKyAgICAgICAgICAgICJib3RoIiwKKyAgICAgICAgICAgICJcdTMwNDJcdTMwOTBcdTMwOTlcdTMwOTJcdTMwNTAiLAorICAgICAgICAgICAgIlx1MzBBMlx1MzBGOFx1MzBGMlx1MzBCMCIsCisKKyAgICAgICAgICAgICJraCIsCisgICAgICAgICAgICAiXHUzMDdDXHUzMDUxXHUzMDYwXHUzMDQyXHUzMDkzXHUzMEZDIiwKKyAgICAgICAgICAgICJcdTMwRENcdTMwRjZcdTMwQzBcdTMwRkNcdTMwRjNcdTMwRkMiLAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MykgeworICAgICAgICAgICAgc3dpdGNoIChEQVRBW2ldLmNoYXJBdCgwKSkgeworICAgICAgICAgICAgY2FzZSAnaCc6IC8vIEhpcmFnYW5hLUthdGFrYW5hCisgICAgICAgICAgICAgICAgZXhwZWN0KGhrLCBEQVRBW2krMV0sIERBVEFbaSsyXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdrJzogLy8gS2F0YWthbmEtSGlyYWdhbmEKKyAgICAgICAgICAgICAgICBleHBlY3Qoa2gsIERBVEFbaSsyXSwgREFUQVtpKzFdKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2InOiAvLyBib3RoCisgICAgICAgICAgICAgICAgZXhwZWN0KGhrLCBEQVRBW2krMV0sIERBVEFbaSsyXSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGtoLCBEQVRBW2krMl0sIERBVEFbaSsxXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDb3B5SjQ3NigpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIEMrKy1vbmx5IGNvcHkgY29uc3RydWN0b3IgdGVzdAorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgaW50ZXItSW5kaWMgdHJhbnNsaXRlcmF0b3JzLiAgVGhlc2UgYXJlIGNvbXBvc2VkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RJbnRlckluZGljKCkgeworICAgICAgICBTdHJpbmcgSUQgPSAiRGV2YW5hZ2FyaS1HdWphcmF0aSI7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGRnID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoSUQpOworICAgICAgICBpZiAoZGcgPT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGdldEluc3RhbmNlKCIgKyBJRCArICIpIHJldHVybmVkIG51bGwiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgaWQgPSBkZy5nZXRJRCgpOworICAgICAgICBpZiAoIWlkLmVxdWFscyhJRCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBnZXRJbnN0YW5jZSgiICsgSUQgKyAiKS5nZXRJRCgpID0+ICIgKyBpZCk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGRldiA9ICJcdTA5MDFcdTA5MEJcdTA5MjUiOworICAgICAgICBTdHJpbmcgZ3VqID0gIlx1MEE4MVx1MEE4Qlx1MEFBNSI7CisgICAgICAgIGV4cGVjdChkZywgZGV2LCBndWopOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgZmlsdGVyIHN5bnRheCBpbiBJRHMuIChKMjMpCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEZpbHRlcklEcygpIHsKKyAgICAgICAgU3RyaW5nW10gREFUQSA9IHsKKyAgICAgICAgICAgICJbYWVpb3VdQW55LUhleCIsIC8vIElECisgICAgICAgICAgICAiW2FlaW91XUhleC1BbnkiLCAvLyBleHBlY3RlZCBpbnZlcnNlIElECisgICAgICAgICAgICAicXVpenppY2FsIiwgICAgICAvLyBzcmMKKyAgICAgICAgICAgICJxXFx1MDA3NVxcdTAwNjl6elxcdTAwNjljXFx1MDA2MWwiLCAvLyBleHBlY3RlZCBJRC50cmFuc2xpdChzcmMpCisKKyAgICAgICAgICAgICJbYWVpb3VdQW55LUhleDtbXjVdSGV4LUFueSIsCisgICAgICAgICAgICAiW141XUFueS1IZXg7W2FlaW91XUhleC1BbnkiLAorICAgICAgICAgICAgInF1aXp6aWNhbCIsCisgICAgICAgICAgICAicVxcdTAwNzVpenppY2FsIiwKKworICAgICAgICAgICAgIlthYmNdTnVsbCIsCisgICAgICAgICAgICAiW2FiY11OdWxsIiwKKyAgICAgICAgICAgICJ4eXoiLAorICAgICAgICAgICAgInh5eiIsCisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz00KSB7CisgICAgICAgICAgICBTdHJpbmcgSUQgPSBEQVRBW2ldOworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKElEKTsKKyAgICAgICAgICAgIGV4cGVjdCh0LCBEQVRBW2krMl0sIERBVEFbaSszXSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIHRoZSBJRAorICAgICAgICAgICAgaWYgKCFJRC5lcXVhbHModC5nZXRJRCgpKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBnZXRJbnN0YW5jZSgiICsgSUQgKyAiKS5nZXRJRCgpID0+ICIgKworICAgICAgICAgICAgICAgICAgICAgIHQuZ2V0SUQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIHRoZSBpbnZlcnNlCisgICAgICAgICAgICBTdHJpbmcgdUlEID0gREFUQVtpKzFdOworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdSA9IHQuZ2V0SW52ZXJzZSgpOworICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgSUQgKyAiLmdldEludmVyc2UoKSByZXR1cm5lZCBOVUxMIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCF1LmdldElEKCkuZXF1YWxzKHVJRCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIElEICsgIi5nZXRJbnZlcnNlKCkuZ2V0SUQoKSA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICB1LmdldElEKCkgKyAiLCBleHBlY3RlZCAiICsgdUlEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGNhc2UgbWFwcGluZyB0cmFuc2xpdGVyYXRvcnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENhc2VNYXAoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHRvVXBwZXIgPQorICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkFueS1VcHBlclteeHl6WFlaXSIpOworICAgICAgICBUcmFuc2xpdGVyYXRvciB0b0xvd2VyID0KKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJBbnktTG93ZXJbXnh5elhZWl0iKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdG9UaXRsZSA9CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LVRpdGxlW154eXpYWVpdIik7CisKKyAgICAgICAgZXhwZWN0KHRvVXBwZXIsICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGRvZ3MuIiwKKyAgICAgICAgICAgICAgICJUSEUgUVVJQ0sgQlJPV04gRk94IEpVTVBFRCBPVkVSIFRIRSBMQXp5IERPR1MuIik7CisgICAgICAgIGV4cGVjdCh0b0xvd2VyLCAiVGhlIHF1SWNrIGJyb3duIGZPWCBqVU1QRUQgT1ZFUiBUSEUgTEF6WSBkb2dzLiIsCisgICAgICAgICAgICAgICAidGhlIHF1aWNrIGJyb3duIGZvWCBqdW1wZWQgb3ZlciB0aGUgbGF6WSBkb2dzLiIpOworICAgICAgICBleHBlY3QodG9UaXRsZSwgInRoZSBxdWljayBicm93biBmb1ggY2FOJ1QganVtcCBvdmVyIHRoZSBsYVp5IGRvZ3MuIiwKKyAgICAgICAgICAgICAgICJUaGUgUXVpY2sgQnJvd24gRm9YIENhbid0IEp1bXAgT3ZlciBUaGUgTGFaeSBEb2dzLiIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlIG5hbWUgbWFwcGluZyB0cmFuc2xpdGVyYXRvcnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdE5hbWVNYXAoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHVuaTJuYW1lID0KKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJBbnktTmFtZVteYWJjXSIpOworICAgICAgICBUcmFuc2xpdGVyYXRvciBuYW1lMnVuaSA9CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTmFtZS1BbnkiKTsKKworICAgICAgICBleHBlY3QodW5pMm5hbWUsICJcdTAwQTBhYmNcdTRFMDFcdTAwQjVcdTBBODFcdUZGRkRcdTAwMDRcdTAwMDlcdTAwODFcdUZGRkYiLAorICAgICAgICAgICAgICAgIlxcTntOTy1CUkVBSyBTUEFDRX1hYmNcXE57Q0pLIFVOSUZJRUQgSURFT0dSQVBILTRFMDF9XFxOe01JQ1JPIFNJR059XFxOe0dVSkFSQVRJIFNJR04gQ0FORFJBQklORFV9XFxOe1JFUExBQ0VNRU5UIENIQVJBQ1RFUn1cXE57RU5EIE9GIFRSQU5TTUlTU0lPTn1cXE57Q0hBUkFDVEVSIFRBQlVMQVRJT059XFxOezxjb250cm9sLTAwODE+fVxcTns8bm9uY2hhcmFjdGVyLUZGRkY+fSIpOworICAgICAgICBleHBlY3QobmFtZTJ1bmksICJ7XFxOIHsgTk8tQlJFQUsgU1BBQ0V9YWJjXFxOeyAgQ0pLIFVOSUZJRUQgIElERU9HUkFQSC00RTAxICB9XFxOe3hcXE57TUlDUk8gU0lHTn1cXE57R1VKQVJBVEkgU0lHTiBDQU5EUkFCSU5EVX1cXE57UkVQTEFDRU1FTlQgQ0hBUkFDVEVSfVxcTntFTkQgT0YgVFJBTlNNSVNTSU9OfVxcTntDSEFSQUNURVIgVEFCVUxBVElPTn1cXE57PGNvbnRyb2wtMDA4MT59XFxOezxub25jaGFyYWN0ZXItRkZGRj59XFxOezxjb250cm9sLTAwMDQ+fVxcTnsiLAorICAgICAgICAgICAgICAgIntcdTAwQTBhYmNcdTRFMDFcXE57eFx1MDBCNVx1MEE4MVx1RkZGRFx1MDAwNFx1MDAwOVx1MDA4MVx1RkZGRlx1MDAwNFxcTnsiKTsKKworICAgICAgICAvLyByb3VuZCB0cmlwCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LU5hbWU7TmFtZS1BbnkiKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBzID0gIntcdTAwQTBhYmNcdTRFMDFcXE57eFx1MDBCNVx1MEE4MVx1RkZGRFx1MDAwNFx1MDAwOVx1MDA4MVx1RkZGRlx1MDAwNFxcTnsiOworICAgICAgICBleHBlY3QodCwgcywgcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBsaWJlcmFsaXplZCBJRCBzeW50YXguICAxMDA2YworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RMaWJlcmFsaXplZElEKCkgeworICAgICAgICAvLyBTb21lIHRlc3QgY2FzZXMgaGF2ZSBhbiBleHBlY3RlZCBnZXRJRCgpIHZhbHVlIG9mIE5VTEwuICBUaGlzCisgICAgICAgIC8vIG1lYW5zIEkgaGF2ZSBkaXNhYmxlZCB0aGUgdGVzdCBjYXNlIGZvciBub3cuICBUaGlzIHN0dWZmIGlzCisgICAgICAgIC8vIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50LCBhbmQgSSBoYXZlbid0IGRlY2lkZWQgd2hldGhlciB0byBtYWtlCisgICAgICAgIC8vIGdldElEKCkgcmV0dXJuIGNhbm9uaWNhbCBjYXNlIHlldC4gIEl0IHdpbGwgYWxsIGdldCByZXdyaXR0ZW4KKyAgICAgICAgLy8gd2l0aCB0aGUgbW92ZSB0byBTb3VyY2UtVGFyZ2V0L1ZhcmlhbnQgSURzIGFueXdheS4gW2FsaXVdCisgICAgICAgIFN0cmluZyBEQVRBW10gPSB7CisgICAgICAgICAgICAibGF0aW4tZ3JlZWsiLCBudWxsIC8qIkxhdGluLUdyZWVrIiovLCAiY2FzZSBpbnNlbnNpdGl2aXR5IiwKKyAgICAgICAgICAgICIgIE51bGwgICIsICJOdWxsIiwgIndoaXRlc3BhY2UiLAorICAgICAgICAgICAgIiBMYXRpblthLXpdLUdyZWVrICAiLCAiW2Etel1MYXRpbi1HcmVlayIsICJpbmxpbmUgZmlsdGVyIiwKKyAgICAgICAgICAgICIgIG51bGwgIDsgbGF0aW4tZ3JlZWsgICIsIG51bGwgLyoiTnVsbDtMYXRpbi1HcmVlayIqLywgImNvbXBvdW5kIHdoaXRlc3BhY2UiLAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxEQVRBLmxlbmd0aDsgaSs9MykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoREFUQVtpXSk7CisgICAgICAgICAgICAgICAgaWYgKERBVEFbaSsxXSA9PSBudWxsIHx8IERBVEFbaSsxXS5lcXVhbHModC5nZXRJRCgpKSkgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBEQVRBW2krMl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNyZWF0ZSBJRCBcIiIgKyBEQVRBW2ldICsgIlwiID0+IFwiIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHQuZ2V0SUQoKSArICJcIiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgREFUQVtpKzJdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjcmVhdGUgSUQgXCIiICsgREFUQVtpXSArICJcIiA9PiBcIiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICB0LmdldElEKCkgKyAiXCIsIGV4cCBcIiIgKyBEQVRBW2krMV0gKyAiXCIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgREFUQVtpKzJdICsKKyAgICAgICAgICAgICAgICAgICAgICAiIGNyZWF0ZSBJRCBcIiIgKyBEQVRBW2ldICsgIlwiIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q3JlYXRlSW5zdGFuY2UoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIG15VHJhbnMgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTGF0aW4tSGFuZ3VsIiwgVHJhbnNsaXRlcmF0b3IuUkVWRVJTRSk7CisgICAgICAgIFN0cmluZyBuZXdJRCA9IG15VHJhbnMuZ2V0SUQoKTsKKyAgICAgICAgaWYgKCFuZXdJRC5lcXVhbHMoIkhhbmd1bC1MYXRpbiIpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogVGVzdCBmb3IgSml0dGVyYnVnIDkxMiBUcmFuc2xpdGVyYXRvcjo6Y3JlYXRlSW5zdGFuY2UoaWQsVVRSQU5TX1JFVkVSU0UpIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgbm9ybWFsaXphdGlvbiB0cmFuc2xpdGVyYXRvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Tm9ybWFsaXphdGlvblRyYW5zbGl0ZXJhdG9yKCkgeworICAgICAgICAvLyBUSEUgRk9MTE9XSU5HIFRXTyBUQUJMRVMgQVJFIENPUElFRCBGUk9NIGNvbS5pYm0uaWN1LmRldi50ZXN0Lm5vcm1hbGl6ZXIuQmFzaWNUZXN0CisgICAgICAgIC8vIFBMRUFTRSBLRUVQIFRIRU0gSU4gU1lOQyBXSVRIIEJhc2ljVGVzdC4KKyAgICAgICAgU3RyaW5nW11bXSBDQU5PTiA9IHsKKyAgICAgICAgICAgIC8vIElucHV0ICAgICAgICAgICAgICAgRGVjb21wb3NlZCAgICAgICAgICAgIENvbXBvc2VkCisgICAgICAgICAgICB7ImNhdCIsICAgICAgICAgICAgICAgICJjYXQiLCAgICAgICAgICAgICAgICAiY2F0IiAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7Ilx1MDBlMGFyZHZhcmsiLCAgICAgICJhXHUwMzAwYXJkdmFyayIsICAgICAiXHUwMGUwYXJkdmFyayIgICAgIH0sCisKKyAgICAgICAgICAgIHsiXHUxZTBhIiwgICAgICAgICAgICAgIkRcdTAzMDciLCAgICAgICAgICAgICJcdTFlMGEiICAgICAgICAgICAgfSwgLy8gRC1kb3RfYWJvdmUKKyAgICAgICAgICAgIHsiRFx1MDMwNyIsICAgICAgICAgICAgIkRcdTAzMDciLCAgICAgICAgICAgICJcdTFlMGEiICAgICAgICAgICAgfSwgLy8gRCBkb3RfYWJvdmUKKworICAgICAgICAgICAgeyJcdTFlMGNcdTAzMDciLCAgICAgICAiRFx1MDMyM1x1MDMwNyIsICAgICAgIlx1MWUwY1x1MDMwNyIgICAgICB9LCAvLyBELWRvdF9iZWxvdyBkb3RfYWJvdmUKKyAgICAgICAgICAgIHsiXHUxZTBhXHUwMzIzIiwgICAgICAgIkRcdTAzMjNcdTAzMDciLCAgICAgICJcdTFlMGNcdTAzMDciICAgICAgfSwgLy8gRC1kb3RfYWJvdmUgZG90X2JlbG93CisgICAgICAgICAgICB7IkRcdTAzMDdcdTAzMjMiLCAgICAgICJEXHUwMzIzXHUwMzA3IiwgICAgICAiXHUxZTBjXHUwMzA3IiAgICAgIH0sIC8vIEQgZG90X2JlbG93IGRvdF9hYm92ZQorCisgICAgICAgICAgICB7Ilx1MWUxMFx1MDMwN1x1MDMyMyIsICJEXHUwMzI3XHUwMzIzXHUwMzA3IiwiXHUxZTEwXHUwMzIzXHUwMzA3In0sIC8vIEQgZG90X2JlbG93IGNlZGlsbGEgZG90X2Fib3ZlCisgICAgICAgICAgICB7IkRcdTAzMDdcdTAzMjhcdTAzMjMiLCJEXHUwMzI4XHUwMzIzXHUwMzA3IiwiXHUxZTBjXHUwMzI4XHUwMzA3In0sIC8vIEQgZG90X2Fib3ZlIG9nb25layBkb3RfYmVsb3cKKworICAgICAgICAgICAgeyJcdTFFMTQiLCAgICAgICAgICAgICAiRVx1MDMwNFx1MDMwMCIsICAgICAgIlx1MUUxNCIgICAgICAgICAgICB9LCAvLyBFLW1hY3Jvbi1ncmF2ZQorICAgICAgICAgICAgeyJcdTAxMTJcdTAzMDAiLCAgICAgICAiRVx1MDMwNFx1MDMwMCIsICAgICAgIlx1MUUxNCIgICAgICAgICAgICB9LCAvLyBFLW1hY3JvbiArIGdyYXZlCisgICAgICAgICAgICB7Ilx1MDBjOFx1MDMwNCIsICAgICAgICJFXHUwMzAwXHUwMzA0IiwgICAgICAiXHUwMGM4XHUwMzA0IiAgICAgIH0sIC8vIEUtZ3JhdmUgKyBtYWNyb24KKworICAgICAgICAgICAgeyJcdTIxMmIiLCAgICAgICAgICAgICAiQVx1MDMwYSIsICAgICAgICAgICAgIlx1MDBjNSIgICAgICAgICAgICB9LCAvLyBhbmdzdHJvbV9zaWduCisgICAgICAgICAgICB7Ilx1MDBjNSIsICAgICAgICAgICAgICJBXHUwMzBhIiwgICAgICAgICAgICAiXHUwMGM1IiAgICAgICAgICAgIH0sIC8vIEEtcmluZworCisgICAgICAgICAgICB7Ilx1MDBmZGZmaW4iLCAgICAgICAgICJ5XHUwMzAxZmZpbiIsICAgICAgICAiXHUwMGZkZmZpbiIgICAgICAgIH0sCS8vdXBkYXRlZCB3aXRoIDMuMAorICAgICAgICAgICAgeyJcdTAwZmRcdUZCMDNuIiwgICAgICAieVx1MDMwMVx1RkIwM24iLCAgICAgIlx1MDBmZFx1RkIwM24iICAgICB9LAkvL3VwZGF0ZWQgd2l0aCAzLjAKKworICAgICAgICAgICAgeyJIZW5yeSBJViIsICAgICAgICAgICAiSGVucnkgSVYiLCAgICAgICAgICAgIkhlbnJ5IElWIiAgICAgICAgICB9LAorICAgICAgICAgICAgeyJIZW5yeSBcdTIxNjMiLCAgICAgICAiSGVucnkgXHUyMTYzIiwgICAgICAgIkhlbnJ5IFx1MjE2MyIgICAgICB9LAorCisgICAgICAgICAgICB7Ilx1MzBBQyIsICAgICAgICAgICAgICJcdTMwQUJcdTMwOTkiLCAgICAgICAiXHUzMEFDIiAgICAgICAgICAgIH0sIC8vIGdhIChLYXRha2FuYSkKKyAgICAgICAgICAgIHsiXHUzMEFCXHUzMDk5IiwgICAgICAgIlx1MzBBQlx1MzA5OSIsICAgICAgICJcdTMwQUMiICAgICAgICAgICAgfSwgLy8ga2EgKyB0ZW4KKyAgICAgICAgICAgIHsiXHVGRjc2XHVGRjlFIiwgICAgICAgIlx1RkY3Nlx1RkY5RSIsICAgICAgICJcdUZGNzZcdUZGOUUiICAgICAgfSwgLy8gaHdfa2EgKyBod190ZW4KKyAgICAgICAgICAgIHsiXHUzMEFCXHVGRjlFIiwgICAgICAgIlx1MzBBQlx1RkY5RSIsICAgICAgICJcdTMwQUJcdUZGOUUiICAgICAgfSwgLy8ga2EgKyBod190ZW4KKyAgICAgICAgICAgIHsiXHVGRjc2XHUzMDk5IiwgICAgICAgIlx1RkY3Nlx1MzA5OSIsICAgICAgICJcdUZGNzZcdTMwOTkiICAgICAgfSwgLy8gaHdfa2EgKyB0ZW4KKworICAgICAgICAgICAgeyJBXHUwMzAwXHUwMzE2IiwgICAgICAiQVx1MDMxNlx1MDMwMCIsICAgICAgIlx1MDBDMFx1MDMxNiIgICAgICB9LAorICAgICAgICB9OworCisgICAgICAgIFN0cmluZ1tdW10gQ09NUEFUID0geworICAgICAgICAgICAgLy8gSW5wdXQgICAgICAgICAgICAgICBEZWNvbXBvc2VkICAgICAgICAgICAgQ29tcG9zZWQKKyAgICAgICAgICAgIHsiXHVGQjRmIiwgICAgICAgICAgICAgIlx1MDVEMFx1MDVEQyIsICAgICAgICJcdTA1RDBcdTA1REMiICAgICAgfSwgLy8gQWxlZi1MYW1lZCB2cy4gQWxlZiwgTGFtZWQKKworICAgICAgICAgICAgeyJcdTAwZmRmZmluIiwgICAgICAgICAieVx1MDMwMWZmaW4iLCAgICAgICAgIlx1MDBmZGZmaW4iICAgICAgICB9LAkvL3VwZGF0ZWQgZm9yIDMuMAorICAgICAgICAgICAgeyJcdTAwZmRcdUZCMDNuIiwgICAgICAieVx1MDMwMWZmaW4iLCAgICAgICAgIlx1MDBmZGZmaW4iICAgICAgICB9LCAvLyBmZmkgbGlnYXR1cmUgLT4gZiArIGYgKyBpCisKKyAgICAgICAgICAgIHsiSGVucnkgSVYiLCAgICAgICAgICAgIkhlbnJ5IElWIiwgICAgICAgICAgICJIZW5yeSBJViIgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsiSGVucnkgXHUyMTYzIiwgICAgICAgIkhlbnJ5IElWIiwgICAgICAgICAgICJIZW5yeSBJViIgICAgICAgICAgfSwKKworICAgICAgICAgICAgeyJcdTMwQUMiLCAgICAgICAgICAgICAiXHUzMEFCXHUzMDk5IiwgICAgICAgIlx1MzBBQyIgICAgICAgICAgICB9LCAvLyBnYSAoS2F0YWthbmEpCisgICAgICAgICAgICB7Ilx1MzBBQlx1MzA5OSIsICAgICAgICJcdTMwQUJcdTMwOTkiLCAgICAgICAiXHUzMEFDIiAgICAgICAgICAgIH0sIC8vIGthICsgdGVuCisKKyAgICAgICAgICAgIHsiXHVGRjc2XHUzMDk5IiwgICAgICAgIlx1MzBBQlx1MzA5OSIsICAgICAgICJcdTMwQUMiICAgICAgICAgICAgfSwgLy8gaHdfa2EgKyB0ZW4KKyAgICAgICAgfTsKKworICAgICAgICBUcmFuc2xpdGVyYXRvciBORkQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTkZEIik7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIE5GQyA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJORkMiKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPENBTk9OLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW4gPSBDQU5PTltpXVswXTsKKyAgICAgICAgICAgIFN0cmluZyBleHBkID0gQ0FOT05baV1bMV07CisgICAgICAgICAgICBTdHJpbmcgZXhwYyA9IENBTk9OW2ldWzJdOworICAgICAgICAgICAgZXhwZWN0KE5GRCwgaW4sIGV4cGQpOworICAgICAgICAgICAgZXhwZWN0KE5GQywgaW4sIGV4cGMpOworICAgICAgICB9CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgTkZLRCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJORktEIik7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIE5GS0MgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTkZLQyIpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8Q09NUEFULmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW4gPSBDT01QQVRbaV1bMF07CisgICAgICAgICAgICBTdHJpbmcgZXhwa2QgPSBDT01QQVRbaV1bMV07CisgICAgICAgICAgICBTdHJpbmcgZXhwa2MgPSBDT01QQVRbaV1bMl07CisgICAgICAgICAgICBleHBlY3QoTkZLRCwgaW4sIGV4cGtkKTsKKyAgICAgICAgICAgIGV4cGVjdChORktDLCBpbiwgZXhwa2MpOworICAgICAgICB9CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJORkQ7IFt4XVJlbW92ZSIpOworICAgICAgICBleHBlY3QodCwgIlx1MDEwZHgiLCAiY1x1MDMwQyIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgY29tcG91bmQgUkJUIHJ1bGVzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDb21wb3VuZFJCVCgpIHsKKyAgICAgICAgLy8gQ2FyZWZ1bCB3aXRoIHNwYWNpbmcgYW5kICc7JyBoZXJlOiAgUGhyYXNlIHRoaXMgZXhhY3RseQorICAgICAgICAvLyBhcyB0b1J1bGVzKCkgaXMgZ29pbmcgdG8gcmV0dXJuIGl0LiAgSWYgdG9SdWxlcygpIGNoYW5nZXMKKyAgICAgICAgLy8gd2l0aCByZWdhcmQgdG8gc3BhY2luZyBvciAnOycsIHRoZW4gYWRqdXN0IHRoaXMgc3RyaW5nLgorICAgICAgICBTdHJpbmcgcnVsZSA9ICI6OkhleC1Bbnk7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAiOjpBbnktTG93ZXI7XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAiYSA+ICcuQS4nO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAgImIgPiAnLkIuJztcbiIgKworICAgICAgICAgICAgICAgICAgICAgICI6OltedF1BbnktVXBwZXI7IjsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiVGVzdCIsIHJ1bGUsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBpZiAodCA9PSBudWxsKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogY3JlYXRlRnJvbVJ1bGVzIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGV4cGVjdCh0LCAiXHUwMDQzYXQgaW4gdGhlIGhhdCwgYmF0IG9uIHRoZSBtYXQiLAorICAgICAgICAgICAgICAgIkMuQS50IElOIHRIRSBILkEudCwgLkIuLkEudCBPTiB0SEUgTS5BLnQiKTsKKyAgICAgICAgU3RyaW5nIHIgPSB0LnRvUnVsZXModHJ1ZSk7CisgICAgICAgIGlmIChyLmVxdWFscyhydWxlKSkgeworICAgICAgICAgICAgbG9nbG4oIk9LOiB0b1J1bGVzKCkgPT4gIiArIHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IHRvUnVsZXMoKSA9PiAiICsgciArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgcnVsZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgdGVzdCB0b1J1bGVzCisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiR3JlZWstTGF0aW47IExhdGluLUN5cmlsbGljIiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjcmVhdGVJbnN0YW5jZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZXhwID0gIjo6R3JlZWstTGF0aW47XG46OkxhdGluLUN5cmlsbGljOyI7CisgICAgICAgIHIgPSB0LnRvUnVsZXModHJ1ZSk7CisgICAgICAgIGlmICghci5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IHRvUnVsZXMoKSA9PiAiICsgciArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgZXhwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPSzogdG9SdWxlcygpID0+ICIgKyByKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJvdW5kIHRyaXAgdGhlIHJlc3VsdCBvZiB0b1J1bGVzCisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIlRlc3QiLCByLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgaWYgKHQgPT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNyZWF0ZUZyb21SdWxlcyAjMiBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPSzogY3JlYXRlRnJvbVJ1bGVzKCIgKyByICsgIikgc3VjY2VlZGVkIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRvUnVsZXMgYWdhaW4KKyAgICAgICAgciA9IHQudG9SdWxlcyh0cnVlKTsKKyAgICAgICAgaWYgKCFyLmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogdG9SdWxlcygpID0+ICIgKyByICsKKyAgICAgICAgICAgICAgICAgICIsIGV4cGVjdGVkICIgKyBleHApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nbG4oIk9LOiB0b1J1bGVzKCkgPT4gIiArIHIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCBGb28oQmFyKSBJRHMuICBDYXJlZnVsIHdpdGggc3BhY2luZyBpbiBpZDsgbWFrZSBpdCBjb25mb3JtCisgICAgICAgIC8vIHRvIHdoYXQgdGhlIHJlZ2VuZXJhdGVkIElEIHdpbGwgbG9vayBsaWtlLgorICAgICAgICBTdHJpbmcgaWQgPSAiVXBwZXIoTG93ZXIpOyhORktDKSI7CisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShpZCwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjcmVhdGVJbnN0YW5jZSAjMiBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodC5nZXRJRCgpLmVxdWFscyhpZCkpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPSzogY3JlYXRlZCAiICsgaWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNyZWF0ZUluc3RhbmNlKCIgKyBpZCArCisgICAgICAgICAgICAgICAgICAiKS5nZXRJRCgpID0+ICIgKyB0LmdldElEKCkpOworICAgICAgICB9CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdSA9IHQuZ2V0SW52ZXJzZSgpOworICAgICAgICBpZiAodSA9PSBudWxsKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogY3JlYXRlSW52ZXJzZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBleHAgPSAiTkZLQygpO0xvd2VyKFVwcGVyKSI7CisgICAgICAgIGlmICh1LmdldElEKCkuZXF1YWxzKGV4cCkpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPSzogY3JlYXRlSW52ZXJzZSgiICsgaWQgKyAiKSA9PiAiICsKKyAgICAgICAgICAgICAgICAgIHUuZ2V0SUQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogY3JlYXRlSW52ZXJzZSgiICsgaWQgKyAiKSA9PiAiICsKKyAgICAgICAgICAgICAgICAgIHUuZ2V0SUQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wb3VuZCBmaWx0ZXIgc2VtYW50aWNzIHdlcmUgb3JnaW5pYWxseSBub3QgaW1wbGVtZW50ZWQKKyAgICAgKiBjb3JyZWN0bHkuICBPcmlnaW5hbGx5LCBlYWNoIGNvbXBvbmVudCBmaWx0ZXIgZihpKSBpcyByZXBsYWNlZCBieQorICAgICAqIGYnKGkpID0gZihpKSAmJiBnLCB3aGVyZSBnIGlzIHRoZSBmaWx0ZXIgZm9yIHRoZSBjb21wb3VuZAorICAgICAqIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqCisgICAgICogRnJvbSBNYXJrOgorICAgICAqCisgICAgICogU3VwcG9zZSBhbmQgSSBoYXZlIGEgdHJhbnNsaXRlcmF0b3IgWC4gSW50ZXJuYWxseSBYIGlzCisgICAgICogIkdyZWVrLUxhdGluOyBMYXRpbi1DeXJpbGxpYzsgQW55LUxvd2VyIi4gSSB1c2UgYSBmaWx0ZXIgW15BXS4KKyAgICAgKgorICAgICAqIFRoZSBjb21wb3VuZCBzaG91bGQgY29udmVydCBhbGwgZ3JlZWsgY2hhcmFjdGVycyAodGhyb3VnaCBsYXRpbikgdG8KKyAgICAgKiBjeXJpbGxpYywgdGhlbiBsb3dlcmNhc2UgdGhlIHJlc3VsdC4gVGhlIGZpbHRlciBzaG91bGQgc2F5ICJkb24ndAorICAgICAqIHRvdWNoICdBJyBpbiB0aGUgb3JpZ2luYWwiLiBCdXQgYmVjYXVzZSBhbiBpbnRlcm1lZGlhdGUgcmVzdWx0CisgICAgICogaGFwcGVucyB0byBnbyB0aHJvdWdoICJBIiwgdGhlIEdyZWVrIEFscGhhIGdldHMgaHVuZyB1cC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29tcG91bmRGaWx0ZXIoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZQorICAgICAgICAgICAgKCJHcmVlay1MYXRpbjsgTGF0aW4tR3JlZWs7IExvd2VyIiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIHQuc2V0RmlsdGVyKG5ldyBVbmljb2RlU2V0KCJbXkFdIikpOworCisgICAgICAgIC8vIE9ubHkgdGhlICdBJyBhdCBpbmRleCAxIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkCisgICAgICAgIGV4cGVjdCh0LAorICAgICAgICAgICAgICAgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoIkJBXFx1MDM5QVxcdTAzOTEiKSwKKyAgICAgICAgICAgICAgIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJcXHUwM2IyQVxcdTAzYmFcXHUwM2IxIikpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlICJSZW1vdmUiIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RSZW1vdmUoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiUmVtb3ZlW2FlaW91XSIpOworICAgICAgICBleHBlY3QodCwgIlRoZSBxdWljayBicm93biBmb3guIiwKKyAgICAgICAgICAgICAgICJUaCBxY2sgYnJ3biBmeC4iKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0VG9SdWxlcygpIHsKKyAgICAgICAgU3RyaW5nIFJCVCA9ICJyYnQiOworICAgICAgICBTdHJpbmcgU0VUID0gInNldCI7CisgICAgICAgIFN0cmluZ1tdIERBVEEgPSB7CisgICAgICAgICAgICBSQlQsCisgICAgICAgICAgICAiJGE9XFx1NEU2MTsgWyRhXSA+IEE7IiwKKyAgICAgICAgICAgICJbXFx1NEU2MV0gPiBBOyIsCisKKyAgICAgICAgICAgIFJCVCwKKyAgICAgICAgICAgICIkd2hpdGU9W1s6WnM6XVs6Wmw6XV07ICR3aGl0ZXthfSA+IEE7IiwKKyAgICAgICAgICAgICJbWzpaczpdWzpabDpdXXthfSA+IEE7IiwKKworICAgICAgICAgICAgU0VULAorICAgICAgICAgICAgIltbOlpzOl1bOlpsOl1dIiwKKyAgICAgICAgICAgICJbWzpaczpdWzpabDpdXSIsCisKKyAgICAgICAgICAgIFNFVCwKKyAgICAgICAgICAgICJbOlBzOl0iLAorICAgICAgICAgICAgIls6UHM6XSIsCisKKyAgICAgICAgICAgIFNFVCwKKyAgICAgICAgICAgICJbOkw6XSIsCisgICAgICAgICAgICAiWzpMOl0iLAorCisgICAgICAgICAgICBTRVQsCisgICAgICAgICAgICAiW1s6TDpdLVtBXV0iLAorICAgICAgICAgICAgIltbOkw6XS1bQV1dIiwKKworICAgICAgICAgICAgU0VULAorICAgICAgICAgICAgIlt+WzpMdTpdWzpMbDpdXSIsCisgICAgICAgICAgICAiW35bOkx1Ol1bOkxsOl1dIiwKKworICAgICAgICAgICAgU0VULAorICAgICAgICAgICAgIlt+W2Etel1dIiwKKyAgICAgICAgICAgICJbflthLXpdXSIsCisKKyAgICAgICAgICAgIFJCVCwKKyAgICAgICAgICAgICIkd2hpdGU9WzpaczpdOyAkYmxhY2s9W14kd2hpdGVdOyAkYmxhY2t7YX0gPiBBOyIsCisgICAgICAgICAgICAiW15bOlpzOl1de2F9ID4gQTsiLAorCisgICAgICAgICAgICBSQlQsCisgICAgICAgICAgICAiJGE9WzpaczpdOyAkYj1bW2Etel0tJGFdOyAkYnthfSA+IEE7IiwKKyAgICAgICAgICAgICJbW2Etel0tWzpaczpdXXthfSA+IEE7IiwKKworICAgICAgICAgICAgUkJULAorICAgICAgICAgICAgIiRhPVs6WnM6XTsgJGI9WyRhJlthLXpdXTsgJGJ7YX0gPiBBOyIsCisgICAgICAgICAgICAiW1s6WnM6XSZbYS16XV17YX0gPiBBOyIsCisKKyAgICAgICAgICAgIFJCVCwKKyAgICAgICAgICAgICIkYT1bOlpzOl07ICRiPVt4JGFdOyAkYnthfSA+IEE7IiwKKyAgICAgICAgICAgICJbeFs6WnM6XV17YX0gPiBBOyIsCisKKyAgICAgICAgICAgIFJCVCwKKyAgICAgICAgICAgICIkYWNjZW50TWludXMgPSBbIFtcXHUwMzAwLVxcdTAzNDVdICYgWzpNOl0gLSBbXFx1MDMzOF1dIDsiKworICAgICAgICAgICAgIiRtYWNyb24gPSBcXHUwMzA0IDsiKworICAgICAgICAgICAgIiRldm93ZWwgPSBbYWVpb3V5QUVJT1VZXSA7IisKKyAgICAgICAgICAgICIkaW90YXN1YiA9IFxcdTAzNDUgOyIrCisgICAgICAgICAgICAiKCRldm93ZWwgJG1hY3JvbiAkYWNjZW50TWludXMgKikgaSA+IHwgJDEgJGlvdGFzdWIgOyIsCisgICAgICAgICAgICAiKFtBRUlPVVlhZWlvdXldXFx1MDMwNFtbXFx1MDMwMC1cXHUwMzQ1XSZbOk06XS1bXFx1MDMzOF1dKilpID4gfCAkMSBcXHUwMzQ1OyIsCisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJCVCwKKyAgICAgICAgICAgICIoW0FFSU9VWWFlaW91eV1cXHUwMzA0W1s6TTpdLVtcXHUwMzA0XFx1MDM0NV1dKilpID4gfCAkMSBcXHUwMzQ1OyIsCisgICAgICAgICAgICAiKFtBRUlPVVlhZWlvdXldXFx1MDMwNFtbOk06XS1bXFx1MDMwNFxcdTAzNDVdXSopaSA+IHwgJDEgXFx1MDM0NTsiLAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGQ9MDsgZCA8IERBVEEubGVuZ3RoOyBkKz0zKSB7CisgICAgICAgICAgICBpZiAoREFUQVtkXSA9PSBSQlQpIHsKKyAgICAgICAgICAgICAgICAvLyBUcmFuc2xpdGVyYXRvciB0ZXN0CisgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiSUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFUQVtkKzFdLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgICAgICAgICBpZiAodCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjcmVhdGVGcm9tUnVsZXMgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU3RyaW5nIHJ1bGVzLCBlc2NhcGVkUnVsZXM7CisgICAgICAgICAgICAgICAgcnVsZXMgPSB0LnRvUnVsZXMoZmFsc2UpOworICAgICAgICAgICAgICAgIGVzY2FwZWRSdWxlcyA9IHQudG9SdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXhwUnVsZXMgPSBVdGlsaXR5LnVuZXNjYXBlKERBVEFbZCsyXSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGV4cEVzY2FwZWRSdWxlcyA9IERBVEFbZCsyXTsKKyAgICAgICAgICAgICAgICBpZiAocnVsZXMuZXF1YWxzKGV4cFJ1bGVzKSkgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBEQVRBW2QrMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAiID0+ICIgKyBVdGlsaXR5LmVzY2FwZShydWxlcykpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgREFUQVtkKzFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiA9PiAiICsgVXRpbGl0eS5lc2NhcGUocnVsZXMgKyAiLCBleHAgIiArIGV4cFJ1bGVzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkUnVsZXMuZXF1YWxzKGV4cEVzY2FwZWRSdWxlcykpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nbG4oIk9rOiAiICsgREFUQVtkKzFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiA9PiAiICsgZXNjYXBlZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIERBVEFbZCsxXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgPT4gIiArIGVzY2FwZWRSdWxlcyArICIsIGV4cCAiICsgZXhwRXNjYXBlZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVW5pY29kZVNldCB0ZXN0CisgICAgICAgICAgICAgICAgU3RyaW5nIHBhdCA9IERBVEFbZCsxXTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXhwVG9QYXQgPSBEQVRBW2QrMl07CisgICAgICAgICAgICAgICAgVW5pY29kZVNldCBzZXQgPSBuZXcgVW5pY29kZVNldChwYXQpOworCisgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHNwYWNpbmcgZXRjLiBhcyBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgU3RyaW5nIHRvUGF0OworICAgICAgICAgICAgICAgIHRvUGF0ID0gc2V0LnRvUGF0dGVybih0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhwVG9QYXQuZXF1YWxzKHRvUGF0KSkgeworICAgICAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBwYXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiID0+ICIgKyB0b1BhdCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBwYXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiID0+ICIgKyBVdGlsaXR5LmVzY2FwZSh0b1BhdCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBleHAgIiArIFV0aWxpdHkuZXNjYXBlKHBhdCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDb250ZXh0KCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBwb3MgPSBuZXcgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24oMCwgMiwgMCwgMSk7IC8vIGNzIGNsIHMgbAorCisgICAgICAgIGV4cGVjdCgiZGUgPiB4OyB7ZH1lID4geTsiLAorICAgICAgICAgICAgICAgImRlIiwKKyAgICAgICAgICAgICAgICJ5ZSIsCisgICAgICAgICAgICAgICBwb3MpOworCisgICAgICAgIGV4cGVjdCgiYWJ7Y30gPiB6OyIsCisgICAgICAgICAgICAgICAieGFkYWJkYWJjeSIsCisgICAgICAgICAgICAgICAieGFkYWJkYWJ6eSIpOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIFV0aWxpdHkudW5lc2NhcGUocyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFN1cHBsZW1lbnRhbCgpIHsKKworICAgICAgICBleHBlY3QoQ2hhcnNUb1VuaWNvZGVTdHJpbmcoIiRhPVxcVTAwMDEwMzAwOyAkcz1bXFxVMDAwMTAzMDAtXFxVMDAwMTAzMjNdOyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgPiAkYTsgJHMgPiBpOyIpLAorICAgICAgICAgICAgICAgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoImFiXFxVMDAwMTAzMEZ4IiksCisgICAgICAgICAgICAgICBDaGFyc1RvVW5pY29kZVN0cmluZygiXFxVMDAwMTAzMDBiaXgiKSk7CisKKyAgICAgICAgZXhwZWN0KENoYXJzVG9Vbmljb2RlU3RyaW5nKCIkYT1bYS16XFxVMDAwMTAzMDAtXFxVMDAwMTAzMjNdOyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiRiPVtBLVpcXFUwMDAxMDQwMC1cXFUwMDAxMDQ0RF07IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCRhKSgkYikgPiAkMiAkMTsiKSwKKyAgICAgICAgICAgICAgIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJhQlxcVTAwMDEwMzAwXFxVMDAwMTA0MDBjXFxVMDAwMTA0MDFcXFUwMDAxMDMwMUQiKSwKKyAgICAgICAgICAgICAgIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJCYVxcVTAwMDEwNDAwXFxVMDAwMTAzMDBcXFUwMDAxMDQwMWNEXFxVMDAwMTAzMDEiKSk7CisKKyAgICAgICAgLy8ga3xheFxcVTAwMDEwMzAweG0KKworICAgICAgICAvLyBrfGFcXFUwMDAxMDQwMFxcVTAwMDEwMzAweG0KKyAgICAgICAgLy8ga3l8XFxVMDAwMTA0MDBcXFUwMDAxMDMwMHhtCisgICAgICAgIC8vIGt5XFxVMDAwMTA0MDB8XFxVMDAwMTAzMDB4bQorCisgICAgICAgIC8vIGt5XFxVMDAwMTA0MDB8XFxVMDAwMTAzMDBcXFUwMDAxMDQwMG0KKyAgICAgICAgLy8ga3lcXFUwMDAxMDQwMHl8XFxVMDAwMTA0MDBtCisgICAgICAgIGV4cGVjdChDaGFyc1RvVW5pY29kZVN0cmluZygiJGE9W2FcXFUwMDAxMDMwMC1cXFUwMDAxMDMyM107IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJGEge3h9ID4gfCBAIFxcVTAwMDEwNDAwOyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInskYX0gW15cXHUwMDAwLVxcdUZGRkZdID4geTsiKSwKKyAgICAgICAgICAgICAgIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJrYXhcXFUwMDAxMDMwMHhtIiksCisgICAgICAgICAgICAgICBDaGFyc1RvVW5pY29kZVN0cmluZygia3lcXFUwMDAxMDQwMHlcXFUwMDAxMDQwMG0iKSk7CisKKyAgICAgICAgZXhwZWN0KFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJBbnktTmFtZSIpLAorICAgICAgICAgICAgICAgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoIlxcVTAwMDEwMzMwXFxVMDAwRTAwNjFcXHUwMEEwIiksCisgICAgICAgICAgICAgICAiXFxOe0dPVEhJQyBMRVRURVIgQUhTQX1cXE57VEFHIExBVElOIFNNQUxMIExFVFRFUiBBfVxcTntOTy1CUkVBSyBTUEFDRX0iKTsKKworICAgICAgICBleHBlY3QoVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIk5hbWUtQW55IiksCisgICAgICAgICAgICAgICAiXFxOe0dPVEhJQyBMRVRURVIgQUhTQX1cXE57VEFHIExBVElOIFNNQUxMIExFVFRFUiBBfVxcTntOTy1CUkVBSyBTUEFDRX0iLAorICAgICAgICAgICAgICAgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoIlxcVTAwMDEwMzMwXFxVMDAwRTAwNjFcXHUwMEEwIikpOworCisgICAgICAgIGV4cGVjdChUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LUhleC9Vbmljb2RlIiksCisgICAgICAgICAgICAgICBDaGFyc1RvVW5pY29kZVN0cmluZygiXFxVMDAwMTAzMzBcXFUwMDEwRkYwMFxcVTAwMEUwMDYxXFx1MDBBMCIpLAorICAgICAgICAgICAgICAgIlUrMTAzMzBVKzEwRkYwMFUrRTAwNjFVKzAwQTAiKTsKKyAgCisgICAgICAgIGV4cGVjdChUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LUhleC9DIiksCisgICAgICAgICAgICAgICBDaGFyc1RvVW5pY29kZVN0cmluZygiXFxVMDAwMTAzMzBcXFUwMDEwRkYwMFxcVTAwMEUwMDYxXFx1MDBBMCIpLAorICAgICAgICAgICAgICAgIlxcVTAwMDEwMzMwXFxVMDAxMEZGMDBcXFUwMDBFMDA2MVxcdTAwQTAiKTsKKworICAgICAgICBleHBlY3QoVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkFueS1IZXgvUGVybCIpLAorICAgICAgICAgICAgICAgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoIlxcVTAwMDEwMzMwXFxVMDAxMEZGMDBcXFUwMDBFMDA2MVxcdTAwQTAiKSwKKyAgICAgICAgICAgICAgICJcXHh7MTAzMzB9XFx4ezEwRkYwMH1cXHh7RTAwNjF9XFx4e0EwfSIpOworCisgICAgICAgIGV4cGVjdChUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LUhleC9KYXZhIiksCisgICAgICAgICAgICAgICBDaGFyc1RvVW5pY29kZVN0cmluZygiXFxVMDAwMTAzMzBcXFUwMDEwRkYwMFxcVTAwMEUwMDYxXFx1MDBBMCIpLAorICAgICAgICAgICAgICAgIlxcdUQ4MDBcXHVERjMwXFx1REJGRlxcdURGMDBcXHVEQjQwXFx1REM2MVxcdTAwQTAiKTsKKworICAgICAgICBleHBlY3QoVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkFueS1IZXgvWE1MIiksCisgICAgICAgICAgICAgICBDaGFyc1RvVW5pY29kZVN0cmluZygiXFxVMDAwMTAzMzBcXFUwMDEwRkYwMFxcVTAwMEUwMDYxXFx1MDBBMCIpLAorICAgICAgICAgICAgICAgIiYjeDEwMzMwOyYjeDEwRkYwMDsmI3hFMDA2MTsmI3hBMDsiKTsKKworICAgICAgICBleHBlY3QoVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkFueS1IZXgvWE1MMTAiKSwKKyAgICAgICAgICAgICAgIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJcXFUwMDAxMDMzMFxcVTAwMTBGRjAwXFxVMDAwRTAwNjFcXHUwMEEwIiksCisgICAgICAgICAgICAgICAiJiM2NjM1MjsmIzExMTM4NTY7JiM5MTc2MDE7JiMxNjA7Iik7CisKKyAgICAgICAgZXhwZWN0KFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJbXFxVMDAwRTAwMDAtXFxVMDAwRTBGRkZdIFJlbW92ZSIpLAorICAgICAgICAgICAgICAgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoIlxcVTAwMDEwMzMwXFxVMDAxMEZGMDBcXFUwMDBFMDA2MVxcdTAwQTAiKSwKKyAgICAgICAgICAgICAgIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJcXFUwMDAxMDMzMFxcVTAwMTBGRjAwXFx1MDBBMCIpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0UXVhbnRpZmllcigpIHsKKworICAgICAgICAvLyBNYWtlIHN1cmUgQCBpbiBhIHF1YW50aWZpZWQgYW50ZUNvbnRleHQgd29ya3MKKyAgICAgICAgZXhwZWN0KCJhKyB7Yn0gPiB8IEBAIGM7IEEgPiBhOyAoYSsgYykgPiAnKCcgJDEgJyknOyIsCisgICAgICAgICAgICAgICAiQUFBQUFiIiwKKyAgICAgICAgICAgICAgICJhYWEoYWFjKSIpOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBAIGluIGEgcXVhbnRpZmllZCBwb3N0Q29udGV4dCB3b3JrcworICAgICAgICBleHBlY3QoIntifSBhKyA+IGMgQEAgfDsgKGErKSA+ICcoJyAkMSAnKSc7IiwKKyAgICAgICAgICAgICAgICJiYWFhYWEiLAorICAgICAgICAgICAgICAgImNhYShhYWEpIik7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIEAgaW4gYSBxdWFudGlmaWVkIHBvc3RDb250ZXh0IHdpdGggc2VnIHJlZiB3b3JrcworICAgICAgICBleHBlY3QoInsoYil9IGErID4gJDEgQEAgfDsgKGErKSA+ICcoJyAkMSAnKSc7IiwKKyAgICAgICAgICAgICAgICJiYWFhYWEiLAorICAgICAgICAgICAgICAgImJhYShhYWEpIik7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIEAgcGFzdCBhbnRlIGNvbnRleHQgZG9lc24ndCBlbnRlciBhbnRlIGNvbnRleHQKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24gcG9zID0gbmV3IFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uKDAsIDUsIDMsIDUpOworICAgICAgICBleHBlY3QoImErIHtifSA+IHwgQEAgYzsgeCA+IHk7IChhKyBjKSA+ICcoJyAkMSAnKSc7IiwKKyAgICAgICAgICAgICAgICJ4eHhhYiIsCisgICAgICAgICAgICAgICAieHh4KGFjKSIsCisgICAgICAgICAgICAgICBwb3MpOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBAIHBhc3QgcG9zdCBjb250ZXh0IGRvZXNuJ3QgcGFzcyBsaW1pdAorICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBwb3MyID0gbmV3IFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uKDAsIDQsIDAsIDIpOworICAgICAgICBleHBlY3QoIntifSBhKyA+IGMgQEAgfDsgeCA+IHk7IGEgPiBBOyIsCisgICAgICAgICAgICAgICAiYmF4eCIsCisgICAgICAgICAgICAgICAiY2F4eCIsCisgICAgICAgICAgICAgICBwb3MyKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgQCBwYXN0IHBvc3QgY29udGV4dCBkb2Vzbid0IGVudGVyIHBvc3QgY29udGV4dAorICAgICAgICBleHBlY3QoIntifSBhKyA+IGMgQEAgfDsgeCA+IHk7IGEgPiBBOyIsCisgICAgICAgICAgICAgICAiYmF4eCIsCisgICAgICAgICAgICAgICAiY2F5eSIpOworCisgICAgICAgIGV4cGVjdCgiKGFiKT8gYyA+IGQ7IiwKKyAgICAgICAgICAgICAgICJjIGFiYyBhYmFiYyIsCisgICAgICAgICAgICAgICAiZCBkIGFiZCIpOworCisgICAgICAgIC8vIE5PVEU6IFRoZSAoYWIpKyB3aGVuIHJlZmVyZW5jZWQganVzdCB5aWVsZHMgYSBzaW5nbGUgImFiIiwKKyAgICAgICAgLy8gbm90IHRoZSBmdWxsIHNlcXVlbmNlIG9mIHRoZW0uICBUaGlzIGFjY29yZHMgd2l0aCBwZXJsIGJlaGF2aW9yLgorICAgICAgICBleHBlY3QoIihhYikrIHt4fSA+ICcoJyAkMSAnKSc7IiwKKyAgICAgICAgICAgICAgICJ4IGFieCBhYmFieHkiLAorICAgICAgICAgICAgICAgInggYWIoYWIpIGFiYWIoYWIpeSIpOworCisgICAgICAgIGV4cGVjdCgiYisgPiB4OyIsCisgICAgICAgICAgICAgICAiYWMgYWJjIGFiYmMgYWJiYmMiLAorICAgICAgICAgICAgICAgImFjIGF4YyBheGMgYXhjIik7CisKKyAgICAgICAgZXhwZWN0KCJbYWJjXSsgPiB4OyIsCisgICAgICAgICAgICAgICAicWFjIGFicmMgYWJiY3MgYWJ0YmJjIiwKKyAgICAgICAgICAgICAgICJxeCB4cnggeHMgeHR4Iik7CisKKyAgICAgICAgZXhwZWN0KCJxeyhhYikrfSA+IHg7IiwKKyAgICAgICAgICAgICAgICJxYSBxYWIgcWFiYSBxYWJhYmMgcWFiYSIsCisgICAgICAgICAgICAgICAicWEgcXggcXhhIHF4YyBxeGEiKTsKKworICAgICAgICBleHBlY3QoInEoYWIpKiA+IHg7IiwKKyAgICAgICAgICAgICAgICJxYSBxYWIgcWFiYSBxYWJhYmMiLAorICAgICAgICAgICAgICAgInhhIHggeGEgeGMiKTsKKworICAgICAgICAvLyBOT1RFOiBUaGUgKGFiKSsgd2hlbiByZWZlcmVuY2VkIGp1c3QgeWllbGRzIGEgc2luZ2xlICJhYiIsCisgICAgICAgIC8vIG5vdCB0aGUgZnVsbCBzZXF1ZW5jZSBvZiB0aGVtLiAgVGhpcyBhY2NvcmRzIHdpdGggcGVybCBiZWhhdmlvci4KKyAgICAgICAgZXhwZWN0KCJxKGFiKSogPiAnKCcgJDEgJyknOyIsCisgICAgICAgICAgICAgICAicWEgcWFiIHFhYmEgcWFiYWJjIiwKKyAgICAgICAgICAgICAgICIoKWEgKGFiKSAoYWIpYSAoYWIpYyIpOworCisgICAgICAgIC8vICdmb28nKyBhbmQgJ2ZvbycqIC0tIHRoZSBxdWFudGlmaWVyIHNob3VsZCBhcHBseSB0byB0aGUgZW50aXJlCisgICAgICAgIC8vIHF1b3RlZCBzdHJpbmcKKyAgICAgICAgZXhwZWN0KCInYWInKyA+IHg7IiwKKyAgICAgICAgICAgICAgICJiYiBhYiBhYmFiYiIsCisgICAgICAgICAgICAgICAiYmIgeCB4YiIpOworCisgICAgICAgIC8vICRmb28rIGFuZCAkZm9vKiAtLSB0aGUgcXVhbnRpZmllciBzaG91bGQgYXBwbHkgdG8gdGhlIGVudGlyZQorICAgICAgICAvLyB2YXJpYWJsZSByZWZlcmVuY2UKKyAgICAgICAgZXhwZWN0KCIkdmFyID0gYWI7ICR2YXIrID4geDsiLAorICAgICAgICAgICAgICAgImJiIGFiIGFiYWJiIiwKKyAgICAgICAgICAgICAgICJiYiB4IHhiIik7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFRlc3RGYWN0IGltcGxlbWVudHMgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSB7CisgICAgICAgIHN0YXRpYyBjbGFzcyBOYW1lYWJsZU51bGxUcmFucyBleHRlbmRzIE51bGxUcmFuc2xpdGVyYXRvciB7CisgICAgICAgICAgICBwdWJsaWMgTmFtZWFibGVOdWxsVHJhbnMoU3RyaW5nIGlkKSB7CisgICAgICAgICAgICAgICAgc2V0SUQoaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBTdHJpbmcgaWQ7CisgICAgICAgIHB1YmxpYyBUZXN0RmFjdChTdHJpbmcgdGhlSUQpIHsKKyAgICAgICAgICAgIGlkID0gdGhlSUQ7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBpZ25vcmVkSUQpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTmFtZWFibGVOdWxsVHJhbnMoaWQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyB2b2lkIFRlc3RTVFYoKSB7CisgICAgICAgIEVudW1lcmF0aW9uIGVzID0gVHJhbnNsaXRlcmF0b3IuZ2V0QXZhaWxhYmxlU291cmNlcygpOworICAgICAgICBmb3IgKGludCBpPTA7IGVzLmhhc01vcmVFbGVtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBzb3VyY2UgPSAoU3RyaW5nKSBlcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgbG9nbG4oIiIgKyBpICsgIjogIiArIHNvdXJjZSk7CisgICAgICAgICAgICBpZiAoc291cmNlLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogZW1wdHkgc291cmNlIik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbnVtZXJhdGlvbiBldCA9IFRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZVRhcmdldHMoc291cmNlKTsKKyAgICAgICAgICAgIGZvciAoaW50IGo9MDsgZXQuaGFzTW9yZUVsZW1lbnRzKCk7ICsraikgeworICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnZXQgPSAoU3RyaW5nKSBldC5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGxvZ2xuKCIgIiArIGogKyAiOiAiICsgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGVtcHR5IHRhcmdldCIpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZXYgPSBUcmFuc2xpdGVyYXRvci5nZXRBdmFpbGFibGVWYXJpYW50cyhzb3VyY2UsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wOyBldi5oYXNNb3JlRWxlbWVudHMoKTsgKytrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYW50ID0gKFN0cmluZykgZXYubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nbG4oIiAgIiArIGsgKyAiOiA8ZW1wdHk+Iik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dsbigiICAiICsgayArICI6ICIgKyB2YXJpYW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgcmVnaXN0cmF0aW9uCisgICAgICAgIFN0cmluZ1tdIElEUyA9IHsgIkZpZXJ1d2VyIiwgIlNlb3JpZGYtU3dlb3JpZSIsICJPZXdvaXItT3dlcmkvVnNpZSIgfTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDM7ICsraSkgeworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXJGYWN0b3J5KElEU1tpXSwgbmV3IFRlc3RGYWN0KElEU1tpXSkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoSURTW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAodC5nZXRJRCgpLmVxdWFscyhJRFNbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogUmVnaXN0cmF0aW9uL2NyZWF0aW9uIHN1Y2NlZWRlZCBmb3IgSUQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIElEU1tpXSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IFJlZ2lzdHJhdGlvbiBvZiBJRCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSURTW2ldICsgIiBjcmVhdGVzIElEICIgKyB0LmdldElEKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci51bnJlZ2lzdGVyKElEU1tpXSk7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKElEU1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBVbnJlZ2lzdHJhdGlvbiBmYWlsZWQgZm9yIElEICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICBJRFNbaV0gKyAiOyBzdGlsbCByZWNlaXZpbmcgSUQgIiArIHQuZ2V0SUQoKSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUyKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdvb2Q7IHRoaXMgaXMgd2hhdCB3ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAgICAgbG9nbG4oIk9rOyBVbnJlZ2lzdGVyZWQgIiArIElEU1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogUmVnaXN0cmF0aW9uL2NyZWF0aW9uIGZhaWxlZCBmb3IgSUQgIiArCisgICAgICAgICAgICAgICAgICAgICAgSURTW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgaW52ZXJzZSBvZiBHcmVlay1MYXRpbjsgVGl0bGUoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDb21wb3VuZEludmVyc2UoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZQorICAgICAgICAgICAgKCJHcmVlay1MYXRpbjsgVGl0bGUoKSIsIFRyYW5zbGl0ZXJhdG9yLlJFVkVSU0UpOworICAgICAgICBpZiAodCA9PSBudWxsKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogY3JlYXRlSW5zdGFuY2UiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZXhwID0gIihUaXRsZSk7TGF0aW4tR3JlZWsiOworICAgICAgICBpZiAodC5nZXRJRCgpLmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBsb2dsbigiT2s6IGludmVyc2Ugb2YgXCJHcmVlay1MYXRpbjsgVGl0bGUoKVwiIGlzIFwiIiArCisgICAgICAgICAgICAgICAgICB0LmdldElEKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGludmVyc2Ugb2YgXCJHcmVlay1MYXRpbjsgVGl0bGUoKVwiIGlzIFwiIiArCisgICAgICAgICAgICAgICAgICB0LmdldElEKCkgKyAiXCIsIGV4cGVjdGVkIFwiIiArIGV4cCArICJcIiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBORkQgY2hhaW5pbmcgd2l0aCBSQlQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0TkZEQ2hhaW5SQlQoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRFU1QiLCAiOjpORkQ7IGFhID4gUTsgYSA+IHE7IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgbG9nbG4odC50b1J1bGVzKHRydWUpKTsKKyAgICAgICAgZXhwZWN0KHQsICJhYSIsICJRIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW52ZXJzZSBvZiAiTnVsbCIgc2hvdWxkIGJlICJOdWxsIi4gKEoyMSkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0TnVsbEludmVyc2UoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTnVsbCIpOworICAgICAgICBUcmFuc2xpdGVyYXRvciB1ID0gdC5nZXRJbnZlcnNlKCk7CisgICAgICAgIGlmICghdS5nZXRJRCgpLmVxdWFscygiTnVsbCIpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogSW52ZXJzZSBvZiBOdWxsIHNob3VsZCBiZSBOdWxsIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBJRCBvZiBpbnZlcnNlIG9mIGFsaWFzLiAoSjIyKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RBbGlhc0ludmVyc2VJRCgpIHsKKyAgICAgICAgU3RyaW5nIElEID0gIkxhdGluLUhhbmd1bCI7IC8vIFRoaXMgc2hvdWxkIGJlIGFueSBhbGlhcyBJRCB3aXRoIGFuIGludmVyc2UKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKElEKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdSA9IHQuZ2V0SW52ZXJzZSgpOworICAgICAgICBTdHJpbmcgZXhwID0gIkhhbmd1bC1MYXRpbiI7CisgICAgICAgIFN0cmluZyBnb3QgPSB1LmdldElEKCk7CisgICAgICAgIGlmICghZ290LmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogSW52ZXJzZSBvZiAiICsgSUQgKyAiIGlzICIgKyBnb3QgKworICAgICAgICAgICAgICAgICAgIiwgZXhwZWN0ZWQgIiArIGV4cCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IElEcyBvZiBpbnZlcnNlcyBvZiBjb21wb3VuZCB0cmFuc2xpdGVyYXRvcnMuIChKMjApCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENvbXBvdW5kSW52ZXJzZUlEKCkgeworICAgICAgICBTdHJpbmcgSUQgPSAiTGF0aW4tSmFtbztORkMoTkZEKSI7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShJRCk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHUgPSB0LmdldEludmVyc2UoKTsKKyAgICAgICAgU3RyaW5nIGV4cCA9ICJORkQoTkZDKTtKYW1vLUxhdGluIjsKKyAgICAgICAgU3RyaW5nIGdvdCA9IHUuZ2V0SUQoKTsKKyAgICAgICAgaWYgKCFnb3QuZXF1YWxzKGV4cCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBJbnZlcnNlIG9mICIgKyBJRCArICIgaXMgIiArIGdvdCArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgZXhwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdW5kZWZpbmVkIHZhcmlhYmxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RVbmRlZmluZWRWYXJpYWJsZSgpIHsKKyAgICAgICAgU3RyaW5nIHJ1bGUgPSAiJGluaXRpYWwgfSBhIDw+IFx1MTE2MTsiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IG5ldyBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcigiPElEPiIsIHJ1bGUpOworICAgICAgICAgICAgdCA9IG51bGw7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dsbigiT0s6IEdvdCBleGNlcHRpb24gZm9yICIgKyBydWxlICsgIiwgYXMgZXhwZWN0ZWQ6ICIgKworICAgICAgICAgICAgICAgICAgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVycmxuKCJGYWlsOiBib2d1cyBydWxlICIgKyBydWxlICsgIiBjb21waWxlZCB3aXRob3V0IGVycm9yIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBlbXB0eSBjb250ZXh0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RFbXB0eUNvbnRleHQoKSB7CisgICAgICAgIGV4cGVjdCgiIHsgYSB9ID4gYjsiLCAieGF5IGEgIiwgInhieSBiICIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgY29tcG91bmQgZmlsdGVyIElEIHN5bnRheAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDb21wb3VuZEZpbHRlcklEKCkgeworICAgICAgICBTdHJpbmdbXSBEQVRBID0geworICAgICAgICAgICAgLy8gQ29sLiAxID0gSUQgb3IgcnVsZSBzZXQgKGxhdHRlciBtdXN0IHN0YXJ0IHdpdGggIykKKworICAgICAgICAgICAgLy8gPSBjb2x1bW5zID4gMSBhcmUgbnVsbCBpZiBleHBlY3QgY29sLiAxIHRvIGJlIGlsbGVnYWwgPQorCisgICAgICAgICAgICAvLyBDb2wuIDIgPSBkaXJlY3Rpb24sICJGLi4uIiBvciAiUi4uLiIKKyAgICAgICAgICAgIC8vIENvbC4gMyA9IHNvdXJjZSBzdHJpbmcKKyAgICAgICAgICAgIC8vIENvbC4gNCA9IGV4cCByZXN1bHQKKworICAgICAgICAgICAgIlthYmNdOyBbYWJjXSIsIG51bGwsIG51bGwsIG51bGwsIC8vIG11bHRpcGxlIGZpbHRlcnMKKyAgICAgICAgICAgICJMYXRpbi1HcmVlazsgW2FiY107IiwgbnVsbCwgbnVsbCwgbnVsbCwgLy8gbWlzcGxhY2VkIGZpbHRlcgorICAgICAgICAgICAgIltiXTsgTGF0aW4tR3JlZWs7IFVwcGVyOyAoW3h5el0pIiwgIkYiLCAiYWJjIiwgImFcdTAzOTJjIiwKKyAgICAgICAgICAgICJbYl07IChMb3dlcik7IExhdGluLUdyZWVrOyBVcHBlcigpOyAoW1x1MDM5Ml0pIiwgIlIiLCAiXHUwMzkxXHUwMzkyXHUwMzkzIiwgIlx1MDM5MWJcdTAzOTMiLAorICAgICAgICAgICAgIiNcbjo6W2JdOyA6OkxhdGluLUdyZWVrOyA6OlVwcGVyOyA6OihbeHl6XSk7IiwgIkYiLCAiYWJjIiwgImFcdTAzOTJjIiwKKyAgICAgICAgICAgICIjXG46OltiXTsgOjooTG93ZXIpOyA6OkxhdGluLUdyZWVrOyA6OlVwcGVyKCk7IDo6KFtcdTAzOTJdKTsiLCAiUiIsICJcdTAzOTFcdTAzOTJcdTAzOTMiLCAiXHUwMzkxYlx1MDM5MyIsCisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz00KSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBEQVRBW2ldOworICAgICAgICAgICAgaW50IGRpcmVjdGlvbiA9IChEQVRBW2krMV0gIT0gbnVsbCAmJiBEQVRBW2krMV0uY2hhckF0KDApID09ICdSJykgPworICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlJFVkVSU0UgOiBUcmFuc2xpdGVyYXRvci5GT1JXQVJEOworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZSA9IERBVEFbaSsyXTsKKyAgICAgICAgICAgIFN0cmluZyBleHAgPSBEQVRBW2krM107CisgICAgICAgICAgICBib29sZWFuIGV4cE9rID0gKERBVEFbaSsxXSAhPSBudWxsKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBudWxsOworICAgICAgICAgICAgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAoaWQuY2hhckF0KDApID09ICcjJykgeworICAgICAgICAgICAgICAgICAgICB0ID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJJRCIsIGlkLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShpZCwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZWUpIHsKKyAgICAgICAgICAgICAgICBlID0gZWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sZWFuIG9rID0gKHQgIT0gbnVsbCAmJiBlID09IG51bGwpOworICAgICAgICAgICAgaWYgKG9rID09IGV4cE9rKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9rOiAiICsgaWQgKyAiID0+ICIgKyB0ICsKKyAgICAgICAgICAgICAgICAgICAgICAoZSAhPSBudWxsID8gKCIsICIgKyBlLmdldE1lc3NhZ2UoKSkgOiAiIikpOworICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBleHBlY3QodCwgc291cmNlLCBleHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBpZCArICIgPT4gIiArIHQgKworICAgICAgICAgICAgICAgICAgICAgIChlICE9IG51bGwgPyAoIiwgIiArIGUuZ2V0TWVzc2FnZSgpKSA6ICIiKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IG5ldyBwcm9wZXJ0eSBzZXQgc3ludGF4CisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFByb3BlcnR5U2V0KCkgeworICAgICAgICBleHBlY3QoImE+QTsgXFxwe0x1fT54OyBcXHB7QW55fT55OyIsICJhYmNERUYiLCAiQXl5eHh4Iik7CisgICAgICAgIGV4cGVjdCgiKC4rKT4nWycgJDEgJ10nOyIsICIgYSBzdGl0Y2ggXG4gaW4gdGltZSBcciBzYXZlcyA5IiwKKyAgICAgICAgICAgICAgICJbIGEgc3RpdGNoIF1cblsgaW4gdGltZSBdXHJbIHNhdmVzIDldIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB2YXJpb3VzIGZhaWx1cmUgcG9pbnRzIG9mIHRoZSBuZXcgMi4wIGVuZ2luZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0TmV3RW5naW5lKCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkxhdGluLUhpcmFnYW5hIik7CisgICAgICAgIC8vIEthdGFrYW5hIHNob3VsZCBiZSB1bnRvdWNoZWQKKyAgICAgICAgZXhwZWN0KHQsICJhXHUzMDQyXHUzMEEyIiwgIlx1MzA0Mlx1MzA0Mlx1MzBBMiIpOworCisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICAvLyBUaGlzIHRlc3Qgd2lsbCBvbmx5IHdvcmsgaWYgVHJhbnNsaXRlcmF0b3IuUk9MTEJBQ0sgaXMKKyAgICAgICAgICAgIC8vIHRydWUuICBPdGhlcndpc2UsIHRoaXMgdGVzdCB3aWxsIGZhaWwsIHJldmVhbGluZyBhCisgICAgICAgICAgICAvLyBsaW1pdGF0aW9uIG9mIGdsb2JhbCBmaWx0ZXJzIGluIGluY3JlbWVudGFsIG1vZGUuCisKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGEgPQorICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiYSIsICJhID4gQTsiLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIEEgPQorICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiQSIsICJBID4gYjsiLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgYXJyYXlbXSA9IG5ldyBUcmFuc2xpdGVyYXRvcltdIHsKKyAgICAgICAgICAgICAgICBhLAorICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJORkQiKSwKKyAgICAgICAgICAgICAgICBBIH07CisKKyAgICAgICAgICAgIHQgPSBuZXcgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihhcnJheSwgbmV3IFVuaWNvZGVTZXQoIls6TGw6XSIpKTsKKworICAgICAgICAgICAgZXhwZWN0KHQsICJhQWFBIiwgImJBYkEiKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgiJHNtb290aCA9IHg7ICRtYWNyb24gPSBxOyBbOl5MOl0geyAoW2FlaW91eUFFSU9VWV0gJG1hY3Jvbj8pIH0gW15hZWlvdXlBRUlPVVkkc21vb3RoJG1hY3Jvbl0gPiB8ICQxICRzbW9vdGggOyIsCisgICAgICAgICAgICAgICAiYSIsCisgICAgICAgICAgICAgICAiYXgiKTsKKworICAgICAgICBTdHJpbmcgZ3IgPQorICAgICAgICAgICAgIiRkZG90ID0gXHUwMzA4IDsiICsKKyAgICAgICAgICAgICIkbGNndm93ZWwgPSBbXHUwM2IxXHUwM2I1XHUwM2I3XHUwM2I5XHUwM2JmXHUwM2M1XHUwM2M5XSA7IiArCisgICAgICAgICAgICAiJHJvdWdoID0gXHUwMzE0IDsiICsKKyAgICAgICAgICAgICIoJGxjZ3Zvd2VsKyAkZGRvdD8pICRyb3VnaCA+IGggfCAkMSA7IiArCisgICAgICAgICAgICAiXHUwM2IxIDw+IGEgOyIgKworICAgICAgICAgICAgIiRyb3VnaCA8PiBoIDsiOworCisgICAgICAgIGV4cGVjdChnciwgIlx1MDNCMVx1MDMxNCIsICJoYSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgcXVhbnRpZmllZCBzZWdtZW50IGJlaGF2aW9yLiAgV2Ugd2FudDoKKyAgICAgKiAoW2FiY10pKyA+IHggJDEgeDsgYXBwbGllZCB0byAiY2JhIiBwcm9kdWNlcyAieGF4IgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RRdWFudGlmaWVkU2VnbWVudCgpIHsKKyAgICAgICAgLy8gVGhlIG5vcm1hbCBjYXNlCisgICAgICAgIGV4cGVjdCgiKFthYmNdKykgPiB4ICQxIHg7IiwgImNiYSIsICJ4Y2JheCIpOworCisgICAgICAgIC8vIFRoZSB0cmlja3kgY2FzZTsgdGhlIHF1YW50aWZpZXIgaXMgYXJvdW5kIHRoZSBzZWdtZW50CisgICAgICAgIGV4cGVjdCgiKFthYmNdKSsgPiB4ICQxIHg7IiwgImNiYSIsICJ4YXgiKTsKKworICAgICAgICAvLyBUcmlja3kgY2FzZSBpbiByZXZlcnNlIGRpcmVjdGlvbgorICAgICAgICBleHBlY3QoIihbYWJjXSkrIHsgcSA+IHggJDEgeDsiLCAiY2JhcSIsICJjYmF4YXgiKTsKKworICAgICAgICAvLyBDaGVjayBwb3N0LWNvbnRleHQgc2VnbWVudAorICAgICAgICBleHBlY3QoIntxfSAoW2EtZF0pKyA+ICcoJyAkMSAnKSc7IiwgImRkcWNiYSIsICJkZChhKWNiYSIpOworCisgICAgICAgIC8vIFRlc3QgdG9SdWxlL3RvUGF0dGVybiBmb3Igbm9uLXF1YW50aWZpZWQgc2VnbWVudC4KKyAgICAgICAgLy8gQ2FyZWZ1bCB3aXRoIHNwYWNpbmcgaGVyZS4KKyAgICAgICAgU3RyaW5nIHIgPSAiKFthLWNdKXtxfSA+IHggJDEgeDsiOworICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJJRCIsIHIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBTdHJpbmcgcnIgPSB0LnRvUnVsZXModHJ1ZSk7CisgICAgICAgIGlmICghci5lcXVhbHMocnIpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogXCIiICsgciArICJcIiB4IHRvUnVsZXMoKSA9PiBcIiIgKyByciArICJcIiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nbG4oIk9rOiBcIiIgKyByICsgIlwiIHggdG9SdWxlcygpID0+IFwiIiArIHJyICsgIlwiIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRvUnVsZS90b1BhdHRlcm4gZm9yIHF1YW50aWZpZWQgc2VnbWVudC4KKyAgICAgICAgLy8gQ2FyZWZ1bCB3aXRoIHNwYWNpbmcgaGVyZS4KKyAgICAgICAgciA9ICIoW2EtY10pK3txfSA+IHggJDEgeDsiOworICAgICAgICB0ID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJJRCIsIHIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICByciA9IHQudG9SdWxlcyh0cnVlKTsKKyAgICAgICAgaWYgKCFyLmVxdWFscyhycikpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBcIiIgKyByICsgIlwiIHggdG9SdWxlcygpID0+IFwiIiArIHJyICsgIlwiIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiT2s6IFwiIiArIHIgKyAiXCIgeCB0b1J1bGVzKCkgPT4gXCIiICsgcnIgKyAiXCIiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIFJhbSdzIHRlc3RzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgLyogdGhpcyB0ZXN0IHBlcmZvcm1zICB0ZXN0IG9mIHJ1bGVzIGluIElTTyAxNTkxNSAqLworICAgIHB1YmxpYyB2b2lkICBUZXN0RGV2YW5hZ2FyaUxhdGluUlQoKXsKKyAgICAgICAgU3RyaW5nW10gIHNvdXJjZSA9IHsKKyAgICAgICAgICAgICJiaFx1MDEwMXJhdGEiLAorICAgICAgICAgICAgImtyYSIsCisgICAgICAgICAgICAia1x1MUU2M2EiLAorICAgICAgICAgICAgImtocmEiLAorICAgICAgICAgICAgImdyYSIsCisgICAgICAgICAgICAiXHUxRTQ1cmEiLAorICAgICAgICAgICAgImNyYSIsCisgICAgICAgICAgICAiY2hyYSIsCisgICAgICAgICAgICAialx1MDBGMWEiLAorICAgICAgICAgICAgImpocmEiLAorICAgICAgICAgICAgIlx1MDBGMXJhIiwKKyAgICAgICAgICAgICJcdTFFNkR5YSIsCisgICAgICAgICAgICAiXHUxRTZEaHJhIiwKKyAgICAgICAgICAgICJcdTFFMER5YSIsCisgICAgICAgIC8vInJcdTAzMjN5YSIsIC8vIFx1MDk1YyBpcyBub3QgdmFsaWQgaW4gRGV2YW5hZ2FyaQorICAgICAgICAgICAgIlx1MUUwRGh5YSIsCisgICAgICAgICAgICAiXHUxRTVCaHJhIiwKKyAgICAgICAgICAgICJcdTFFNDdyYSIsCisgICAgICAgICAgICAidHRhIiwKKyAgICAgICAgICAgICJ0aHJhIiwKKyAgICAgICAgICAgICJkZGEiLAorICAgICAgICAgICAgImRocmEiLAorICAgICAgICAgICAgIm5uYSIsCisgICAgICAgICAgICAicHJhIiwKKyAgICAgICAgICAgICJwaHJhIiwKKyAgICAgICAgICAgICJicmEiLAorICAgICAgICAgICAgImJocmEiLAorICAgICAgICAgICAgIm1yYSIsCisgICAgICAgICAgICAiXHUxRTQ5cmEiLAorICAgICAgICAvLyJsXHUwMzMxcmEiLAorICAgICAgICAgICAgInlyYSIsCisgICAgICAgICAgICAiXHUxRThGcmEiLAorICAgICAgICAvLyJsLSIsCisgICAgICAgICAgICAidnJhIiwKKyAgICAgICAgICAgICJcdTAxNUJyYSIsCisgICAgICAgICAgICAiXHUxRTYzcmEiLAorICAgICAgICAgICAgInNyYSIsCisgICAgICAgICAgICAiaG1hIiwKKyAgICAgICAgICAgICJcdTFFNkRcdTFFNkRhIiwKKyAgICAgICAgICAgICJcdTFFNkRcdTFFNkRoYSIsCisgICAgICAgICAgICAiXHUxRTZEaFx1MUU2RGhhIiwKKyAgICAgICAgICAgICJcdTFFMERcdTFFMERhIiwKKyAgICAgICAgICAgICJcdTFFMERcdTFFMERoYSIsCisgICAgICAgICAgICAiXHUxRTZEeWEiLAorICAgICAgICAgICAgIlx1MUU2RGh5YSIsCisgICAgICAgICAgICAiXHUxRTBEeWEiLAorICAgICAgICAgICAgIlx1MUUwRGh5YSIsCisgICAgICAgICAgICAvLyBOb3Qgcm91bmR0cmlwcGFibGUgLS0KKyAgICAgICAgICAgIC8vIFx1MDkzOVx1MDk0ZFx1MDk0ZFx1MDkyRSAgLSBobWEKKyAgICAgICAgICAgIC8vIFx1MDkzOVx1MDk0ZFx1MDkyRSAgICAgICAgIC0gaG1hCisgICAgICAgICAgICAvLyBDaGFyc1RvVW5pY29kZVN0cmluZygiaG1hIiksCisgICAgICAgICAgICAiaHlhIiwKKyAgICAgICAgICAgICJcdTAxNUJyXHUwMzI1IiwKKyAgICAgICAgICAgICJcdTAxNUJjYSIsCisgICAgICAgICAgICAiXHUwMTE1IiwKKyAgICAgICAgICAgICJzYW5cdTAzMDRqXHUwMTJCYiBzXHUwMTEzbmFndXB0YSIsCisgICAgICAgICAgICAiXHUwMTAxbmFuZCB2YWRkaXJcdTAxMDFqdSIsCisgICAgICAgIH07CisgICAgICAgIFN0cmluZ1tdICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgICJcdTA5MkRcdTA5M0VcdTA5MzBcdTA5MjQiLCAgICAvKiBiaGFcdTAzMDRyYXRhICovCisgICAgICAgICAgICAiXHUwOTE1XHUwOTREXHUwOTMwIiwgICAgICAgICAgLyoga3JhICAgICAgICAgKi8KKyAgICAgICAgICAgICJcdTA5MTVcdTA5NERcdTA5MzciLCAgICAgICAgICAvKiBrc1x1MDMyM2EgICovCisgICAgICAgICAgICAiXHUwOTE2XHUwOTREXHUwOTMwIiwgICAgICAgICAgLyoga2hyYSAgICAgICAgKi8KKyAgICAgICAgICAgICJcdTA5MTdcdTA5NERcdTA5MzAiLCAgICAgICAgICAvKiBncmEgICAgICAgICAqLworICAgICAgICAgICAgIlx1MDkxOVx1MDk0RFx1MDkzMCIsICAgICAgICAgIC8qIG5cdTAzMDdyYSAgKi8KKyAgICAgICAgICAgICJcdTA5MUFcdTA5NERcdTA5MzAiLCAgICAgICAgICAvKiBjcmEgICAgICAgICAqLworICAgICAgICAgICAgIlx1MDkxQlx1MDk0RFx1MDkzMCIsICAgICAgICAgIC8qIGNocmEgICAgICAgICovCisgICAgICAgICAgICAiXHUwOTFDXHUwOTREXHUwOTFFIiwgICAgICAgICAgLyogam5cdTAzMDNhICAqLworICAgICAgICAgICAgIlx1MDkxRFx1MDk0RFx1MDkzMCIsICAgICAgICAgIC8qIGpocmEgICAgICAgICovCisgICAgICAgICAgICAiXHUwOTFFXHUwOTREXHUwOTMwIiwgICAgICAgICAgLyogblx1MDMwM3JhICAqLworICAgICAgICAgICAgIlx1MDkxRlx1MDk0RFx1MDkyRiIsICAgICAgICAgIC8qIHRcdTAzMjN5YSAgKi8KKyAgICAgICAgICAgICJcdTA5MjBcdTA5NERcdTA5MzAiLCAgICAgICAgICAvKiB0XHUwMzIzaHJhICovCisgICAgICAgICAgICAiXHUwOTIxXHUwOTREXHUwOTJGIiwgICAgICAgICAgLyogZFx1MDMyM3lhICAqLworICAgICAgICAvLyJcdTA5NUNcdTA5NERcdTA5MkYiLCAgICAgICAgICAvKiByXHUwMzIzeWEgICovIC8vIFx1MDk1YyBpcyBub3QgdmFsaWQgaW4gRGV2YW5hZ2FyaQorICAgICAgICAgICAgIlx1MDkyMlx1MDk0RFx1MDkyRiIsICAgICAgICAgIC8qIGRcdTAzMjNoeWEgKi8KKyAgICAgICAgICAgICJcdTA5MjJcdTA5M0NcdTA5NERcdTA5MzAiLCAgICAvKiByXHUwMzIzaHJhICovCisgICAgICAgICAgICAiXHUwOTIzXHUwOTREXHUwOTMwIiwgICAgICAgICAgLyogblx1MDMyM3JhICAqLworICAgICAgICAgICAgIlx1MDkyNFx1MDk0RFx1MDkyNCIsICAgICAgICAgIC8qIHR0YSAgICAgICAgICovCisgICAgICAgICAgICAiXHUwOTI1XHUwOTREXHUwOTMwIiwgICAgICAgICAgLyogdGhyYSAgICAgICAgKi8KKyAgICAgICAgICAgICJcdTA5MjZcdTA5NERcdTA5MjYiLCAgICAgICAgICAvKiBkZGEgICAgICAgICAqLworICAgICAgICAgICAgIlx1MDkyN1x1MDk0RFx1MDkzMCIsICAgICAgICAgIC8qIGRocmEgICAgICAgICovCisgICAgICAgICAgICAiXHUwOTI4XHUwOTREXHUwOTI4IiwgICAgICAgICAgLyogbm5hICAgICAgICAgKi8KKyAgICAgICAgICAgICJcdTA5MkFcdTA5NERcdTA5MzAiLCAgICAgICAgICAvKiBwcmEgICAgICAgICAqLworICAgICAgICAgICAgIlx1MDkyQlx1MDk0RFx1MDkzMCIsICAgICAgICAgIC8qIHBocmEgICAgICAgICovCisgICAgICAgICAgICAiXHUwOTJDXHUwOTREXHUwOTMwIiwgICAgICAgICAgLyogYnJhICAgICAgICAgKi8KKyAgICAgICAgICAgICJcdTA5MkRcdTA5NERcdTA5MzAiLCAgICAgICAgICAvKiBiaHJhICAgICAgICAqLworICAgICAgICAgICAgIlx1MDkyRVx1MDk0RFx1MDkzMCIsICAgICAgICAgIC8qIG1yYSAgICAgICAgICovCisgICAgICAgICAgICAiXHUwOTI5XHUwOTREXHUwOTMwIiwgICAgICAgICAgLyogblx1MDMzMXJhICAqLworICAgICAgICAvLyJcdTA5MzRcdTA5NERcdTA5MzAiLCAgICAgICAgICAvKiBsXHUwMzMxcmEgICovCisgICAgICAgICAgICAiXHUwOTJGXHUwOTREXHUwOTMwIiwgICAgICAgICAgLyogeXJhICAgICAgICAgKi8KKyAgICAgICAgICAgICJcdTA5MkZcdTA5M0NcdTA5NERcdTA5MzAiLCAgICAvKiB5XHUwMzA3cmEgICovCisgICAgICAgIC8vImwtIiwKKyAgICAgICAgICAgICJcdTA5MzVcdTA5NERcdTA5MzAiLCAgICAgICAgICAvKiB2cmEgICAgICAgICAqLworICAgICAgICAgICAgIlx1MDkzNlx1MDk0RFx1MDkzMCIsICAgICAgICAgIC8qIHNcdTAzMDFyYSAgKi8KKyAgICAgICAgICAgICJcdTA5MzdcdTA5NERcdTA5MzAiLCAgICAgICAgICAvKiBzXHUwMzIzcmEgICovCisgICAgICAgICAgICAiXHUwOTM4XHUwOTREXHUwOTMwIiwgICAgICAgICAgLyogc3JhICAgICAgICAgKi8KKyAgICAgICAgICAgICJcdTA5MzlcdTA5NGRcdTA5MkUiLCAgICAgICAgICAvKiBobWEgICAgICAgICAqLworICAgICAgICAgICAgIlx1MDkxRlx1MDk0RFx1MDkxRiIsICAgICAgICAgIC8qIHRcdTAzMjN0XHUwMzIzYSAgKi8KKyAgICAgICAgICAgICJcdTA5MUZcdTA5NERcdTA5MjAiLCAgICAgICAgICAvKiB0XHUwMzIzdFx1MDMyM2hhICovCisgICAgICAgICAgICAiXHUwOTIwXHUwOTREXHUwOTIwIiwgICAgICAgICAgLyogdFx1MDMyM2h0XHUwMzIzaGEqLworICAgICAgICAgICAgIlx1MDkyMVx1MDk0RFx1MDkyMSIsICAgICAgICAgIC8qIGRcdTAzMjNkXHUwMzIzYSAgKi8KKyAgICAgICAgICAgICJcdTA5MjFcdTA5NERcdTA5MjIiLCAgICAgICAgICAvKiBkXHUwMzIzZFx1MDMyM2hhICovCisgICAgICAgICAgICAiXHUwOTFGXHUwOTREXHUwOTJGIiwgICAgICAgICAgLyogdFx1MDMyM3lhICAqLworICAgICAgICAgICAgIlx1MDkyMFx1MDk0RFx1MDkyRiIsICAgICAgICAgIC8qIHRcdTAzMjNoeWEgKi8KKyAgICAgICAgICAgICJcdTA5MjFcdTA5NERcdTA5MkYiLCAgICAgICAgICAvKiBkXHUwMzIzeWEgICovCisgICAgICAgICAgICAiXHUwOTIyXHUwOTREXHUwOTJGIiwgICAgICAgICAgLyogZFx1MDMyM2h5YSAqLworICAgICAgICAvLyAiaG1hIiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogaG1hICAgICAgICAgKi8KKyAgICAgICAgICAgICJcdTA5MzlcdTA5NERcdTA5MkYiLCAgICAgICAgICAvKiBoeWEgICAgICAgICAqLworICAgICAgICAgICAgIlx1MDkzNlx1MDk0MyIsICAgICAgICAgICAgICAgIC8qIHNcdTAzMDFyXHUwMzI1YSAgKi8KKyAgICAgICAgICAgICJcdTA5MzZcdTA5NERcdTA5MUEiLCAgICAgICAgICAvKiBzXHUwMzAxY2EgICovCisgICAgICAgICAgICAiXHUwOTBkIiwgICAgICAgICAgICAgICAgICAgICAgLyogZVx1MDMwNiAgICAqLworICAgICAgICAgICAgIlx1MDkzOFx1MDkwMlx1MDkxQ1x1MDk0MFx1MDkyQ1x1MDk0RCBcdTA5MzhcdTA5NDdcdTA5MjhcdTA5MTdcdTA5NDFcdTA5MkFcdTA5NERcdTA5MjQiLAorICAgICAgICAgICAgIlx1MDkwNlx1MDkyOFx1MDkwMlx1MDkyNlx1MDk0RCBcdTA5MzVcdTA5MjZcdTA5NERcdTA5MjZcdTA5M0ZcdTA5MzBcdTA5M0VcdTA5MUNcdTA5NDEiLAorICAgICAgICB9OworCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGxhdGluVG9EZXY9VHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkxhdGluLURldmFuYWdhcmkiLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEICk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGRldlRvTGF0aW49VHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkRldmFuYWdhcmktTGF0aW4iLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKworICAgICAgICBmb3IoaW50IGk9IDA7IGk8c291cmNlLmxlbmd0aDsgaSsrKXsKKyAgICAgICAgICAgIGV4cGVjdChsYXRpblRvRGV2LChzb3VyY2VbaV0pLChleHBlY3RlZFtpXSkpOworICAgICAgICAgICAgZXhwZWN0KGRldlRvTGF0aW4sKGV4cGVjdGVkW2ldKSwoc291cmNlW2ldKSk7CisgICAgICAgIH0KKworICAgIH0KKyAgICBwdWJsaWMgdm9pZCAgVGVzdFRlbHVndUxhdGluUlQoKXsKKyAgICAgICAgU3RyaW5nW10gIHNvdXJjZSA9IHsKKyAgICAgICAgICAgICJyYWdodXJcdTAxMDFtIHZpXHUwMTVCdmFuXHUwMTAxZGhhIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSYWdodXJhbSBWaXN3YW5hZGhhICAgICovCisgICAgICAgICAgICAiXHUwMTAxbmFuZCB2YWRkaXJcdTAxMDFqdSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5hbmQgVmFkZGlyYWp1IAkgICAgICAqLworICAgICAgICAgICAgInJcdTAxMDFqXHUwMTJCdiBrYVx1MDE1QmFyYWJcdTAxMDFkYSIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJhamVldiBLYXNhcmFiYWRhICAgICAgKi8KKyAgICAgICAgICAgICJzYW5cdTAzMDRqXHUwMTJCdiBrYVx1MDE1QmFyYWJcdTAxMDFkYSIsICAgICAgICAgICAgICAgICAgICAgICAvKiBzYW5qZWV2IGthc2FyYWJhZGEgICAgICovCisgICAgICAgICAgICAic2FuXHUwMzA0alx1MDEyQmIgc2VuJ2d1cHRhIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2FuamliIHNlbmd1cGF0YSAJICAqLworICAgICAgICAgICAgImFtYXJcdTAxMTNuZHJhIGhhbnVtXHUwMTAxbnVsYSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFtYXJlbmRyYSBoYW51bWFudWxhICAgKi8KKyAgICAgICAgICAgICJyYXZpIGt1bVx1MDEwMXIgdmlcdTAxNUJ2YW5cdTAxMDFkaGEiLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSYXZpIEt1bWFyIFZpc3dhbmFkaGEgICovCisgICAgICAgICAgICAiXHUwMTAxZGl0eWEga2FuZHJcdTAxMTNndWxhIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRpdHlhIEthbmRyZWd1bGEgICAgICAqLworICAgICAgICAgICAgIlx1MDE1QnJcdTAxMkJkaGFyIGthXHUxRTQ3XHUxRTZEYW1hXHUwMTVCZVx1MUU2RFx1MUU2RGkiLCAgICAgIC8qIFNocmlkaGFyIEthbnRhbXNldHR5ICAgKi8KKyAgICAgICAgICAgICJtXHUwMTAxZGhhdiBkZVx1MDE1QmVcdTFFNkRcdTFFNkRpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWRoYXYgRGVzZXR0eSAgICAgICAgICovCisgICAgICAgIH07CisKKyAgICAgICAgU3RyaW5nW10gIGV4cGVjdGVkID0geworICAgICAgICAgICAgIlx1MGMzMFx1MGMxOFx1MGM0MVx1MGMzMFx1MGMzZVx1MGMyZVx1MGM0ZCBcdTBjMzVcdTBjM2ZcdTBjMzZcdTBjNGRcdTBjMzVcdTBjMjhcdTBjM2VcdTBjMjciLAorICAgICAgICAgICAgIlx1MGMwNlx1MGMyOFx1MGMwMlx1MGMyNlx1MGM0ZCBcdTBDMzVcdTBDMjZcdTBDNERcdTBDMjZcdTBDM0ZcdTBDMzBcdTBDM0VcdTBDMUNcdTBDNDEiLAorICAgICAgICAgICAgIlx1MGMzMFx1MGMzZVx1MGMxY1x1MGM0MFx1MGMzNVx1MGM0ZCBcdTBjMTVcdTBjMzZcdTBjMzBcdTBjMmNcdTBjM2VcdTBjMjYiLAorICAgICAgICAgICAgIlx1MGMzOFx1MGMwMlx1MGMxY1x1MGM0MFx1MGMzNVx1MGM0ZCBcdTBjMTVcdTBjMzZcdTBjMzBcdTBjMmNcdTBjM2VcdTBjMjYiLAorICAgICAgICAgICAgIlx1MGMzOFx1MGMwMlx1MGMxY1x1MGM0MFx1MGMyY1x1MGM0ZCBcdTBjMzhcdTBjNDZcdTBjMjhcdTBjNGRcdTBjMTdcdTBjNDFcdTBjMmFcdTBjNGRcdTBjMjQiLAorICAgICAgICAgICAgIlx1MGMwNVx1MGMyZVx1MGMzMFx1MGM0N1x1MGMwMlx1MGMyNlx1MGM0ZFx1MGMzMCBcdTBjMzlcdTBjMjhcdTBjNDFcdTBjMmVcdTBjM2VcdTBjMjhcdTBjNDFcdTBjMzIiLAorICAgICAgICAgICAgIlx1MGMzMFx1MGMzNVx1MGMzZiBcdTBjMTVcdTBjNDFcdTBjMmVcdTBjM2VcdTBjMzBcdTBjNGQgXHUwYzM1XHUwYzNmXHUwYzM2XHUwYzRkXHUwYzM1XHUwYzI4XHUwYzNlXHUwYzI3IiwKKyAgICAgICAgICAgICJcdTBjMDZcdTBjMjZcdTBjM2ZcdTBjMjRcdTBjNGRcdTBjMmYgXHUwQzE1XHUwQzAyXHUwQzI2XHUwQzREXHUwQzMwXHUwQzQ3XHUwQzE3XHUwQzQxXHUwYzMyIiwKKyAgICAgICAgICAgICJcdTBjMzZcdTBjNGRcdTBjMzBcdTBjNDBcdTBDMjdcdTBDMzBcdTBDNEQgXHUwYzE1XHUwYzAyXHUwYzFmXHUwYzJlXHUwYzM2XHUwYzQ2XHUwYzFmXHUwYzRkXHUwYzFmXHUwYzNmIiwKKyAgICAgICAgICAgICJcdTBjMmVcdTBjM2VcdTBjMjdcdTBjMzVcdTBjNGQgXHUwYzI2XHUwYzQ2XHUwYzM2XHUwYzQ2XHUwYzFmXHUwYzRkXHUwYzFmXHUwYzNmIiwKKyAgICAgICAgfTsKKworCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGxhdGluVG9EZXY9VHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkxhdGluLVRlbHVndSIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBUcmFuc2xpdGVyYXRvciBkZXZUb0xhdGluPVRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJUZWx1Z3UtTGF0aW4iLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKworICAgICAgICBmb3IoaW50IGk9IDA7IGk8c291cmNlLmxlbmd0aDsgaSsrKXsKKyAgICAgICAgICAgIGV4cGVjdChsYXRpblRvRGV2LChzb3VyY2VbaV0pLChleHBlY3RlZFtpXSkpOworICAgICAgICAgICAgZXhwZWN0KGRldlRvTGF0aW4sKGV4cGVjdGVkW2ldKSwoc291cmNlW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCAgVGVzdFNhbnNrcml0TGF0aW5SVCgpeworICAgICAgICBpbnQgTUFYX0xFTiA9MTU7CisgICAgICAgIFN0cmluZ1tdICBzb3VyY2UgPSB7CisgICAgICAgICAgICAicm1rXHUxRTYzXHUwMTEzdCIsCisgICAgICAgICAgICAiXHUwMTVCclx1MDEyQm1hZCIsCisgICAgICAgICAgICAiYmhhZ2F2YWRnXHUwMTJCdFx1MDEwMSIsCisgICAgICAgICAgICAiYWRoeVx1MDEwMXlhIiwKKyAgICAgICAgICAgICJhcmp1bmEiLAorICAgICAgICAgICAgInZpXHUxRTYzXHUwMTAxZGEiLAorICAgICAgICAgICAgInlcdTAxNERnYSIsCisgICAgICAgICAgICAiZGhyXHUwMzI1dGFyXHUwMTAxXHUxRTYzXHUxRTZEcmEiLAorICAgICAgICAgICAgInV2XHUwMTAxY3JcdTAzMjUiLAorICAgICAgICAgICAgImRoYXJtYWtcdTFFNjNcdTAxMTN0clx1MDExMyIsCisgICAgICAgICAgICAia3VydWtcdTFFNjNcdTAxMTN0clx1MDExMyIsCisgICAgICAgICAgICAic2FtYXZcdTAxMTN0XHUwMTAxIiwKKyAgICAgICAgICAgICJ5dXl1dHNhdmFcdTFFMjUiLAorICAgICAgICAgICAgIm1cdTAxMDFtYWtcdTAxMDFcdTFFMjUiLAorICAgICAgICAvLyAicFx1MDEwMVx1MUU0N1x1MUUwRGF2XHUwMTAxXHUwMTVCY2FpdmEiLAorICAgICAgICAgICAgImtpbWFrdXJ2YXRhIiwKKyAgICAgICAgICAgICJzYW5cdTAzMDRqYXZhIiwKKyAgICAgICAgfTsKKyAgICAgICAgU3RyaW5nW10gIGV4cGVjdGVkID0geworICAgICAgICAgICAgIlx1MDkzMFx1MDk0RFx1MDkyRVx1MDk0RFx1MDkxNVx1MDk0RFx1MDkzN1x1MDk0N1x1MDkyNFx1MDk0RCIsCisgICAgICAgICAgICAiXHUwOTM2XHUwOTRkXHUwOTMwXHUwOTQwXHUwOTJlXHUwOTI2XHUwOTRkIiwKKyAgICAgICAgICAgICJcdTA5MmRcdTA5MTdcdTA5MzVcdTA5MjZcdTA5NGRcdTA5MTdcdTA5NDBcdTA5MjRcdTA5M2UiLAorICAgICAgICAgICAgIlx1MDkwNVx1MDkyN1x1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyZiIsCisgICAgICAgICAgICAiXHUwOTA1XHUwOTMwXHUwOTRkXHUwOTFjXHUwOTQxXHUwOTI4IiwKKyAgICAgICAgICAgICJcdTA5MzVcdTA5M2ZcdTA5MzdcdTA5M2VcdTA5MjYiLAorICAgICAgICAgICAgIlx1MDkyZlx1MDk0Ylx1MDkxNyIsCisgICAgICAgICAgICAiXHUwOTI3XHUwOTQzXHUwOTI0XHUwOTMwXHUwOTNlXHUwOTM3XHUwOTRkXHUwOTFmXHUwOTRkXHUwOTMwIiwKKyAgICAgICAgICAgICJcdTA5MDlcdTA5MzVcdTA5M0VcdTA5MUFcdTA5NDMiLAorICAgICAgICAgICAgIlx1MDkyN1x1MDkzMFx1MDk0ZFx1MDkyZVx1MDkxNVx1MDk0ZFx1MDkzN1x1MDk0N1x1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0NyIsCisgICAgICAgICAgICAiXHUwOTE1XHUwOTQxXHUwOTMwXHUwOTQxXHUwOTE1XHUwOTRkXHUwOTM3XHUwOTQ3XHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQ3IiwKKyAgICAgICAgICAgICJcdTA5MzhcdTA5MmVcdTA5MzVcdTA5NDdcdTA5MjRcdTA5M2UiLAorICAgICAgICAgICAgIlx1MDkyZlx1MDk0MVx1MDkyZlx1MDk0MVx1MDkyNFx1MDk0ZFx1MDkzOFx1MDkzNVx1MDkwMyIsCisgICAgICAgICAgICAiXHUwOTJlXHUwOTNlXHUwOTJlXHUwOTE1XHUwOTNlXHUwOTAzIiwKKyAgICAgICAgLy8iXHUwOTJhXHUwOTNlXHUwOTIzXHUwOTRkXHUwOTIxXHUwOTM1XHUwOTNlXHUwOTM2XHUwOTRkXHUwOTFhXHUwOTQ4XHUwOTM1IiwKKyAgICAgICAgICAgICJcdTA5MTVcdTA5M2ZcdTA5MmVcdTA5MTVcdTA5NDFcdTA5MzBcdTA5NGRcdTA5MzVcdTA5MjQiLAorICAgICAgICAgICAgIlx1MDkzOFx1MDkwMlx1MDkxY1x1MDkzNSIsCisgICAgICAgIH07CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgbGF0aW5Ub0Rldj1UcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTGF0aW4tRGV2YW5hZ2FyaSIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBUcmFuc2xpdGVyYXRvciBkZXZUb0xhdGluPVRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJEZXZhbmFnYXJpLUxhdGluIiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGZvcihpbnQgaT0gMDsgaTxNQVhfTEVOOyBpKyspeworICAgICAgICAgICAgZXhwZWN0KGxhdGluVG9EZXYsKHNvdXJjZVtpXSksKGV4cGVjdGVkW2ldKSk7CisgICAgICAgICAgICBleHBlY3QoZGV2VG9MYXRpbiwoZXhwZWN0ZWRbaV0pLChzb3VyY2VbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkICBUZXN0Q29tcG91bmRMYXRpblJUKCl7CisgICAgICAgIGludCBNQVhfTEVOID0xNTsKKyAgICAgICAgU3RyaW5nW10gIHNvdXJjZSA9IHsKKyAgICAgICAgICAgICJybWtcdTFFNjNcdTAxMTN0IiwKKyAgICAgICAgICAgICJcdTAxNUJyXHUwMTJCbWFkIiwKKyAgICAgICAgICAgICJiaGFnYXZhZGdcdTAxMkJ0XHUwMTAxIiwKKyAgICAgICAgICAgICJhZGh5XHUwMTAxeWEiLAorICAgICAgICAgICAgImFyanVuYSIsCisgICAgICAgICAgICAidmlcdTFFNjNcdTAxMDFkYSIsCisgICAgICAgICAgICAieVx1MDE0RGdhIiwKKyAgICAgICAgICAgICJkaHJcdTAzMjV0YXJcdTAxMDFcdTFFNjNcdTFFNkRyYSIsCisgICAgICAgICAgICAidXZcdTAxMDFjclx1MDMyNSIsCisgICAgICAgICAgICAiZGhhcm1ha1x1MUU2M1x1MDExM3RyXHUwMTEzIiwKKyAgICAgICAgICAgICJrdXJ1a1x1MUU2M1x1MDExM3RyXHUwMTEzIiwKKyAgICAgICAgICAgICJzYW1hdlx1MDExM3RcdTAxMDEiLAorICAgICAgICAgICAgInl1eXV0c2F2YVx1MUUyNSIsCisgICAgICAgICAgICAibVx1MDEwMW1ha1x1MDEwMVx1MUUyNSIsCisgICAgICAgIC8vICJwXHUwMTAxXHUxRTQ3XHUxRTBEYXZcdTAxMDFcdTAxNUJjYWl2YSIsCisgICAgICAgICAgICAia2ltYWt1cnZhdGEiLAorICAgICAgICAgICAgInNhblx1MDMwNGphdmEiCisgICAgICAgIH07CisgICAgICAgIFN0cmluZ1tdICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgICJcdTA5MzBcdTA5NERcdTA5MkVcdTA5NERcdTA5MTVcdTA5NERcdTA5MzdcdTA5NDdcdTA5MjRcdTA5NEQiLAorICAgICAgICAgICAgIlx1MDkzNlx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkyZVx1MDkyNlx1MDk0ZCIsCisgICAgICAgICAgICAiXHUwOTJkXHUwOTE3XHUwOTM1XHUwOTI2XHUwOTRkXHUwOTE3XHUwOTQwXHUwOTI0XHUwOTNlIiwKKyAgICAgICAgICAgICJcdTA5MDVcdTA5MjdcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MmYiLAorICAgICAgICAgICAgIlx1MDkwNVx1MDkzMFx1MDk0ZFx1MDkxY1x1MDk0MVx1MDkyOCIsCisgICAgICAgICAgICAiXHUwOTM1XHUwOTNmXHUwOTM3XHUwOTNlXHUwOTI2IiwKKyAgICAgICAgICAgICJcdTA5MmZcdTA5NGJcdTA5MTciLAorICAgICAgICAgICAgIlx1MDkyN1x1MDk0M1x1MDkyNFx1MDkzMFx1MDkzZVx1MDkzN1x1MDk0ZFx1MDkxZlx1MDk0ZFx1MDkzMCIsCisgICAgICAgICAgICAiXHUwOTA5XHUwOTM1XHUwOTNFXHUwOTFBXHUwOTQzIiwKKyAgICAgICAgICAgICJcdTA5MjdcdTA5MzBcdTA5NGRcdTA5MmVcdTA5MTVcdTA5NGRcdTA5MzdcdTA5NDdcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDciLAorICAgICAgICAgICAgIlx1MDkxNVx1MDk0MVx1MDkzMFx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzN1x1MDk0N1x1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0NyIsCisgICAgICAgICAgICAiXHUwOTM4XHUwOTJlXHUwOTM1XHUwOTQ3XHUwOTI0XHUwOTNlIiwKKyAgICAgICAgICAgICJcdTA5MmZcdTA5NDFcdTA5MmZcdTA5NDFcdTA5MjRcdTA5NGRcdTA5MzhcdTA5MzVcdTA5MDMiLAorICAgICAgICAgICAgIlx1MDkyZVx1MDkzZVx1MDkyZVx1MDkxNVx1MDkzZVx1MDkwMyIsCisgICAgICAgIC8vICAiXHUwOTJhXHUwOTNlXHUwOTIzXHUwOTRkXHUwOTIxXHUwOTM1XHUwOTNlXHUwOTM2XHUwOTRkXHUwOTFhXHUwOTQ4XHUwOTM1IiwKKyAgICAgICAgICAgICJcdTA5MTVcdTA5M2ZcdTA5MmVcdTA5MTVcdTA5NDFcdTA5MzBcdTA5NGRcdTA5MzVcdTA5MjQiLAorICAgICAgICAgICAgIlx1MDkzOFx1MDkwMlx1MDkxY1x1MDkzNSIKKyAgICAgICAgfTsKKworICAgICAgICBUcmFuc2xpdGVyYXRvciBsYXRpblRvRGV2VG9MYXRpbj1UcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiTGF0aW4tRGV2YW5hZ2FyaTtEZXZhbmFnYXJpLUxhdGluIiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGRldlRvTGF0aW5Ub0Rldj1UcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiRGV2YW5hZ2FyaS1MYXRpbjtMYXRpbi1EZXZhbmFnYXJpIiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGZvcihpbnQgaT0gMDsgaTxNQVhfTEVOOyBpKyspeworICAgICAgICAgICAgZXhwZWN0KGxhdGluVG9EZXZUb0xhdGluLChzb3VyY2VbaV0pLChzb3VyY2VbaV0pKTsKKyAgICAgICAgICAgIGV4cGVjdChkZXZUb0xhdGluVG9EZXYsKGV4cGVjdGVkW2ldKSwoZXhwZWN0ZWRbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBUZXN0IEd1cm11a2hpLURldmFuYWdhcmkgVGlwcGkgYW5kIEJpbmRpCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdEd1cm11a2hpRGV2YW5hZ2FyaSgpeworICAgICAgICAvLyB0aGUgcnVsZSBzYXlzOgorICAgICAgICAvLyAoXHUwOTAyKSAod2hlbiBwcmVjZWRlZCBieSB2b3dlbCkgICAgICAtLS0+ICAoXHUwQTAyKQorICAgICAgICAvLyAoXHUwOTAyKSAod2hlbiBwcmVjZWRlZCBieSBjb25zb25hbnQpICAtLS0+ICAoXHUwQTcwKQorCisgICAgICAgIFVuaWNvZGVTZXQgdm93ZWwgPW5ldyBVbmljb2RlU2V0KCJbXHUwOTA1LVx1MDkwQSBcdTA5MEZcdTA5MTBcdTA5MTNcdTA5MTQgXHUwOTNlLVx1MDk0Mlx1MDk0N1x1MDk0OFx1MDk0Qlx1MDk0Q1x1MDk0RF0iKTsKKyAgICAgICAgVW5pY29kZVNldCBub25fdm93ZWwgPW5ldyBVbmljb2RlU2V0KCJbXHUwOTE1LVx1MDkyOFx1MDkyQS1cdTA5MzBdIik7CisKKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIHZJdGVyID0gbmV3IFVuaWNvZGVTZXRJdGVyYXRvcih2b3dlbCk7CisgICAgICAgIFVuaWNvZGVTZXRJdGVyYXRvciBudkl0ZXIgPSBuZXcgVW5pY29kZVNldEl0ZXJhdG9yKG5vbl92b3dlbCk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHRyYW5zID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkRldmFuYWdhcmktR3VybXVraGkiKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHNyYyA9IG5ldyBTdHJpbmdCdWZmZXIoIiBcdTA5MDIiKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGV4cGVjdCA9IG5ldyBTdHJpbmdCdWZmZXIoIiBcdTBBMDIiKTsKKyAgICAgICAgd2hpbGUodkl0ZXIubmV4dCgpKXsKKyAgICAgICAgICAgIHNyYy5zZXRDaGFyQXQoMCwoY2hhcikgdkl0ZXIuY29kZXBvaW50KTsKKyAgICAgICAgICAgIGV4cGVjdC5zZXRDaGFyQXQoMCwoY2hhcikgKHZJdGVyLmNvZGVwb2ludCsweDAxMDApKTsKKyAgICAgICAgICAgIGV4cGVjdCh0cmFucyxzcmMudG9TdHJpbmcoKSxleHBlY3QudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4cGVjdC5zZXRDaGFyQXQoMSwnXHUwQTcwJyk7CisgICAgICAgIHdoaWxlKG52SXRlci5uZXh0KCkpeworICAgICAgICAgICAgLy9zcmMuc2V0Q2hhckF0KDAsKGNoYXIpIG52SXRlci5jb2RlcG9pbnQpOworICAgICAgICAgICAgc3JjLnNldENoYXJBdCgwLChjaGFyKW52SXRlci5jb2RlcG9pbnQpOworICAgICAgICAgICAgZXhwZWN0LnNldENoYXJBdCgwLChjaGFyKSAobnZJdGVyLmNvZGVwb2ludCsweDAxMDApKTsKKyAgICAgICAgICAgIGV4cGVjdCh0cmFucyxzcmMudG9TdHJpbmcoKSxleHBlY3QudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAgICogVGVzdCBpbnN0YW50aWF0aW9uIGZyb20gYSBsb2NhbGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdExvY2FsZUluc3RhbnRpYXRpb24oKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgicnVfUlUtTGF0aW4iKTsKKyAgICAgICAgZXhwZWN0KHQsICJcdTA0MzAiLCAiYSIpOworCisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiZW4tZWwiKTsKKyAgICAgICAgZXhwZWN0KHQsICJhIiwgIlx1MDNCMSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGl0bGUgY2FzZSBoYW5kbGluZyBvZiBhY2NlbnQgKHNob3VsZCBpZ25vcmUgYWNjZW50cykKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0VGl0bGVBY2NlbnRzKCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIlRpdGxlIik7CisgICAgICAgIGV4cGVjdCh0LCAiYVx1MDMwMGIgY2FuJ3QgYWJlIiwgIkFcdTAzMDBiIENhbid0IEFiZSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJhc2ljIHRlc3Qgb2YgYSBsb2NhbGUgcmVzb3VyY2UgYmFzZWQgcnVsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0TG9jYWxlUmVzb3VyY2UoKSB7CisgICAgICAgIFN0cmluZyBEQVRBW10gPSB7CisgICAgICAgICAgICAvLyBpZCAgICAgICAgICAgICAgICAgICAgZnJvbSAgICAgICAgICAgICB0bworICAgICAgICAgICAgIkxhdGluLUdyZWVrL1VOR0VHTiIsICAgICJiIiwgICAgICAgICAgICAgIlx1MDNiY1x1MDNjMCIsCisgICAgICAgICAgICAiTGF0aW4tZWwiLCAgICAgICAgICAgICAgImIiLCAgICAgICAgICAgICAiXHUwM2JjXHUwM2MwIiwKKyAgICAgICAgICAgICJMYXRpbi1HcmVlayIsICAgICAgICAgICAiYiIsICAgICAgICAgICAgICJcdTAzQjIiLAorICAgICAgICAgICAgIkdyZWVrLUxhdGluL1VOR0VHTiIsICAgICJcdTAzQjIiLCAgICAgICAgInYiLAorICAgICAgICAgICAgImVsLUxhdGluIiwgICAgICAgICAgICAgICJcdTAzQjIiLCAgICAgICAgInYiLAorICAgICAgICAgICAgIkdyZWVrLUxhdGluIiwgICAgICAgICAgICJcdTAzQjIiLCAgICAgICAgImIiLAorICAgICAgICB9OworICAgICAgICBmb3IgKGludCBpPTA7IGk8REFUQS5sZW5ndGg7IGkrPTMpIHsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShEQVRBW2ldKTsKKyAgICAgICAgICAgIGV4cGVjdCh0LCBEQVRBW2krMV0sIERBVEFbaSsyXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYWtlIHN1cmUgcGFyc2UgZXJyb3JzIHJlZmVyZW5jZSB0aGUgcmlnaHQgbGluZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0UGFyc2VFcnJvcigpIHsKKyAgICAgICAgU3RyaW5nIHJ1bGUgPQorICAgICAgICAgICAgImEgPiBiO1xuIiArCisgICAgICAgICAgICAiIyBtb3JlIHN0dWZmXG4iICsKKyAgICAgICAgICAgICJkIDw8IGI7IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIklEIiwgcnVsZSwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTdHJpbmcgZXJyID0gZS5nZXRNZXNzYWdlKCk7CisgICAgICAgICAgICBpZiAoZXJyLmluZGV4T2YoImQgPDwgYiIpID49IDApIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBlcnIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIGVycik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZXJybG4oIkZBSUw6IG5vIHN5bnRheCBlcnJvciIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1ha2Ugc3VyZSBzZXRzIG9uIG91dHB1dCBhcmUgZGlzYWxsb3dlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0T3V0cHV0U2V0KCkgeworICAgICAgICBTdHJpbmcgcnVsZSA9ICIkc2V0ID0gW2EtY20tbl07IGIgPiAkc2V0OyI7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiSUQiLCBydWxlLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJPazogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlcnJsbigiRkFJTDogTm8gc3ludGF4IGVycm9yIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgdXNlIHZhcmlhYmxlIHJhbmdlIHByYWdtYSwgbWFraW5nIHN1cmUgdGhhdCB1c2Ugb2YKKyAgICAgKiB2YXJpYWJsZSByYW5nZSBjaGFyYWN0ZXJzIGlzIGRldGVjdGVkIGFuZCBmbGFnZ2VkIGFzIGFuIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RWYXJpYWJsZVJhbmdlKCkgeworICAgICAgICBTdHJpbmcgcnVsZSA9ICJ1c2UgdmFyaWFibGUgcmFuZ2UgMHg3MCAweDcyOyBhID4gQTsgYiA+IEI7IHEgPiBROyI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0KKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIklEIiwgcnVsZSwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZXJybG4oIkZBSUw6IE5vIHN5bnRheCBlcnJvciIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgaW52YWxpZCBwb3N0IGNvbnRleHQgZXJyb3IgaGFuZGxpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SW52YWxpZFBvc3RDb250ZXh0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9CisgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJJRCIsICJhfWJ7Yz5kOyIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3RyaW5nIG1zZyA9IGUuZ2V0TWVzc2FnZSgpOworICAgICAgICAgICAgaWYgKG1zZy5pbmRleE9mKCJhfWJ7YyIpID49IDApIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyBtc2cpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogIiArIG1zZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZXJybG4oIkZBSUw6IE5vIHN5bnRheCBlcnJvciIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgSUQgZm9ybSB2YXJpYW50cworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RJREZvcm1zKCkgeworICAgICAgICBTdHJpbmcgREFUQVtdID0geworICAgICAgICAgICAgIk5GQyIsIG51bGwsICJORkQiLAorICAgICAgICAgICAgIm5mZCIsIG51bGwsICJORkMiLCAvLyBtYWtlIHN1cmUgY2FzZSBpcyBpZ25vcmVkCisgICAgICAgICAgICAiQW55LU5GS0QiLCBudWxsLCAiQW55LU5GS0MiLAorICAgICAgICAgICAgIk51bGwiLCBudWxsLCAiTnVsbCIsCisgICAgICAgICAgICAiLW5ma2MiLCAibmZrYyIsICJORktEIiwKKyAgICAgICAgICAgICItbmZrYy8iLCAibmZrYyIsICJORktEIiwKKyAgICAgICAgICAgICJMYXRpbi1HcmVlay9VTkdFR04iLCBudWxsLCAiR3JlZWstTGF0aW4vVU5HRUdOIiwKKyAgICAgICAgICAgICJHcmVlay9VTkdFR04tTGF0aW4iLCAiR3JlZWstTGF0aW4vVU5HRUdOIiwgIkxhdGluLUdyZWVrL1VOR0VHTiIsCisgICAgICAgICAgICAiQmVuZ2FsaS1EZXZhbmFnYXJpLyIsICJCZW5nYWxpLURldmFuYWdhcmkiLCAiRGV2YW5hZ2FyaS1CZW5nYWxpIiwKKyAgICAgICAgICAgICJTb3VyY2UtIiwgbnVsbCwgbnVsbCwKKyAgICAgICAgICAgICJTb3VyY2UvVmFyaWFudC0iLCBudWxsLCBudWxsLAorICAgICAgICAgICAgIlNvdXJjZS0vVmFyaWFudCIsIG51bGwsIG51bGwsCisgICAgICAgICAgICAiL1ZhcmlhbnQiLCBudWxsLCBudWxsLAorICAgICAgICAgICAgIi9WYXJpYW50LSIsIG51bGwsIG51bGwsCisgICAgICAgICAgICAiLS9WYXJpYW50IiwgbnVsbCwgbnVsbCwKKyAgICAgICAgICAgICItLyIsIG51bGwsIG51bGwsCisgICAgICAgICAgICAiLSIsIG51bGwsIG51bGwsCisgICAgICAgICAgICAiLyIsIG51bGwsIG51bGwsCisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0zKSB7CisgICAgICAgICAgICBTdHJpbmcgSUQgPSBEQVRBW2ldOworICAgICAgICAgICAgU3RyaW5nIGV4cElEID0gREFUQVtpKzFdOworICAgICAgICAgICAgU3RyaW5nIGV4cEludklEID0gREFUQVtpKzJdOworICAgICAgICAgICAgYm9vbGVhbiBleHBWYWxpZCA9IChleHBJbnZJRCAhPSBudWxsKTsKKyAgICAgICAgICAgIGlmIChleHBJRCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgZXhwSUQgPSBJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9CisgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKElEKTsKKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB1ID0gdC5nZXRJbnZlcnNlKCk7CisgICAgICAgICAgICAgICAgaWYgKHQuZ2V0SUQoKS5lcXVhbHMoZXhwSUQpICYmCisgICAgICAgICAgICAgICAgICAgIHUuZ2V0SUQoKS5lcXVhbHMoZXhwSW52SUQpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogIiArIElEICsgIi5nZXRJbnZlcnNlKCkgPT4gIiArIGV4cEludklEKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogZ2V0SW5zdGFuY2UoIiArIElEICsgIikgPT4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHQuZ2V0SUQoKSArICIgeCBnZXRJbnZlcnNlKCkgPT4gIiArIHUuZ2V0SUQoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIsIGV4cGVjdGVkICIgKyBleHBJbnZJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWV4cFZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogZ2V0SW5zdGFuY2UoIiArIElEICsgIikgPT4gIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogZ2V0SW5zdGFuY2UoIiArIElEICsgIikgPT4gIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNoZWNrUnVsZXMoU3RyaW5nIGxhYmVsLCBUcmFuc2xpdGVyYXRvciB0MiwgU3RyaW5nIHRlc3RSdWxlc0ZvcndhcmQpIHsKKyAgICAgICAgU3RyaW5nIHJ1bGVzMiA9IHQyLnRvUnVsZXModHJ1ZSk7CisgICAgICAgIC8vcnVsZXMyID0gVGVzdFV0aWxpdHkucmVwbGFjZUFsbChydWxlczIsIG5ldyBVbmljb2RlU2V0KCJbJyAnXG5ccl0iKSwgIiIpOworICAgICAgICBydWxlczIgPSBUZXN0VXRpbGl0eS5yZXBsYWNlKHJ1bGVzMiwgIiAiLCAiIik7CisgICAgICAgIHJ1bGVzMiA9IFRlc3RVdGlsaXR5LnJlcGxhY2UocnVsZXMyLCAiXG4iLCAiIik7CisgICAgICAgIHJ1bGVzMiA9IFRlc3RVdGlsaXR5LnJlcGxhY2UocnVsZXMyLCAiXHIiLCAiIik7CisgICAgICAgIHRlc3RSdWxlc0ZvcndhcmQgPSBUZXN0VXRpbGl0eS5yZXBsYWNlKHRlc3RSdWxlc0ZvcndhcmQsICIgIiwgIiIpOworCisgICAgICAgIGlmICghcnVsZXMyLmVxdWFscyh0ZXN0UnVsZXNGb3J3YXJkKSkgeworICAgICAgICAgICAgZXJybG4obGFiZWwpOworICAgICAgICAgICAgbG9nbG4oIkdFTkVSQVRFRCBSVUxFUzogIiArIHJ1bGVzMik7CisgICAgICAgICAgICBsb2dsbigiU0hPVUxEIEJFOiAgICAgICAiICsgdGVzdFJ1bGVzRm9yd2FyZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYXJrJ3MgdG9SdWxlcyB0ZXN0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RUb1J1bGVzTWFyaygpIHsKKworICAgICAgICBTdHJpbmcgdGVzdFJ1bGVzID0KKyAgICAgICAgICAgICI6OltbOkxhdGluOl1bOk1hcms6XV07IgorICAgICAgICAgICAgKyAiOjpORktEIChORkMpOyIKKyAgICAgICAgICAgICsgIjo6TG93ZXIgKExvd2VyKTsiCisgICAgICAgICAgICArICJhIDw+IFxcdTAzQjE7IiAvLyBhbHBoYQorICAgICAgICAgICAgKyAiOjpORktDIChORkQpOyIKKyAgICAgICAgICAgICsgIjo6VXBwZXIgKExvd2VyKTsiCisgICAgICAgICAgICArICI6Okxvd2VyICgpOyIKKyAgICAgICAgICAgICsgIjo6KFtbOkdyZWVrOl1bOk1hcms6XV0pOyIKKyAgICAgICAgICAgIDsKKyAgICAgICAgU3RyaW5nIHRlc3RSdWxlc0ZvcndhcmQgPQorICAgICAgICAgICAgIjo6W1s6TGF0aW46XVs6TWFyazpdXTsiCisgICAgICAgICAgICArICI6Ok5GS0QoTkZDKTsiCisgICAgICAgICAgICArICI6Okxvd2VyKExvd2VyKTsiCisgICAgICAgICAgICArICJhID4gXFx1MDNCMTsiCisgICAgICAgICAgICArICI6Ok5GS0MoTkZEKTsiCisgICAgICAgICAgICArICI6OlVwcGVyIChMb3dlcik7IgorICAgICAgICAgICAgKyAiOjpMb3dlciAoKTsiCisgICAgICAgICAgICA7CisgICAgICAgIFN0cmluZyB0ZXN0UnVsZXNCYWNrd2FyZCA9CisgICAgICAgICAgICAiOjpbWzpHcmVlazpdWzpNYXJrOl1dOyIKKyAgICAgICAgICAgICsgIjo6TG93ZXIgKFVwcGVyKTsiCisgICAgICAgICAgICArICI6Ok5GRChORktDKTsiCisgICAgICAgICAgICArICJcXHUwM0IxID4gYTsiCisgICAgICAgICAgICArICI6Okxvd2VyKExvd2VyKTsiCisgICAgICAgICAgICArICI6Ok5GQyhORktEKTsiCisgICAgICAgICAgICA7CisgICAgICAgIFN0cmluZyBzb3VyY2UgPSAiXHUwMEUxIjsgLy8gYS1hY3V0ZQorICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gIlx1MDNBQyI7IC8vIGFscGhhLWFjdXRlCisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDIgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoInNvdXJjZS10YXJnZXQiLCB0ZXN0UnVsZXMsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBUcmFuc2xpdGVyYXRvciB0MyA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygidGFyZ2V0LXNvdXJjZSIsIHRlc3RSdWxlcywgVHJhbnNsaXRlcmF0b3IuUkVWRVJTRSk7CisKKyAgICAgICAgZXhwZWN0KHQyLCBzb3VyY2UsIHRhcmdldCk7CisgICAgICAgIGV4cGVjdCh0MywgdGFyZ2V0LCBzb3VyY2UpOworCisgICAgICAgIGNoZWNrUnVsZXMoIkZhaWxlZCB0b1J1bGVzIEZPUldBUkQiLCB0MiwgdGVzdFJ1bGVzRm9yd2FyZCk7CisgICAgICAgIGNoZWNrUnVsZXMoIkZhaWxlZCB0b1J1bGVzIEJBQ0tXQVJEIiwgdDMsIHRlc3RSdWxlc0JhY2t3YXJkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IEVzY2FwZSBhbmQgVW5lc2NhcGUgdHJhbnNsaXRlcmF0b3JzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RFc2NhcGUoKSB7CisgICAgICAgIGV4cGVjdChUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSGV4LUFueSIpLAorICAgICAgICAgICAgICAgIlxceHs0MH1cXFUwMDAwMDAzMSYjeDMyOyYjODE7IiwKKyAgICAgICAgICAgICAgICJAMTJRIik7CisgICAgICAgIGV4cGVjdChUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LUhleC9DIiksCisgICAgICAgICAgICAgICBDaGFyc1RvVW5pY29kZVN0cmluZygiQVxcVTAwMTBCRUVGXFx1RkVFRCIpLAorICAgICAgICAgICAgICAgIlxcdTAwNDFcXFUwMDEwQkVFRlxcdUZFRUQiKTsKKyAgICAgICAgZXhwZWN0KFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJBbnktSGV4L0phdmEiKSwKKyAgICAgICAgICAgICAgIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJBXFxVMDAxMEJFRUZcXHVGRUVEIiksCisgICAgICAgICAgICAgICAiXFx1MDA0MVxcdURCRUZcXHVERUVGXFx1RkVFRCIpOworICAgICAgICBleHBlY3QoVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkFueS1IZXgvUGVybCIpLAorICAgICAgICAgICAgICAgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoIkFcXFUwMDEwQkVFRlxcdUZFRUQiKSwKKyAgICAgICAgICAgICAgICJcXHh7NDF9XFx4ezEwQkVFRn1cXHh7RkVFRH0iKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYWtlIHN1cmUgZGlzcGxheSBuYW1lcyBvZiB2YXJpYW50cyBsb29rIHJlYXNvbmFibGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdERpc3BsYXlOYW1lKCkgeworICAgICAgICBTdHJpbmcgREFUQVtdID0geworICAgICAgICAgICAgLy8gSUQsIGZvcndhcmQgbmFtZSwgcmV2ZXJzZSBuYW1lCisgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRleHQgYXMgbmVjZXNzYXJ5IC0tIHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMKKyAgICAgICAgICAgIC8vIG5vdCB0aGUgdGV4dCBpdHNlbGYsIGJ1dCBob3cgdmFyaW91cyBjYXNlcyBhcmUgaGFuZGxlZC4KKworICAgICAgICAgICAgLy8gQmFzaWMgdGVzdAorICAgICAgICAgICAgIkFueS1IZXgiLCAiQW55IHRvIEhleCBFc2NhcGUiLCAiSGV4IEVzY2FwZSB0byBBbnkiLAorCisgICAgICAgICAgICAvLyBWYXJpYW50cworICAgICAgICAgICAgIkFueS1IZXgvUGVybCIsICJBbnkgdG8gSGV4IEVzY2FwZS9QZXJsIiwgIkhleCBFc2NhcGUgdG8gQW55L1BlcmwiLAorCisgICAgICAgICAgICAvLyBUYXJnZXQtb25seSBJRHMKKyAgICAgICAgICAgICJORkMiLCAiQW55IHRvIE5GQyIsICJBbnkgdG8gTkZEIiwKKyAgICAgICAgfTsKKworICAgICAgICBMb2NhbGUgVVMgPSBMb2NhbGUuVVM7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0zKSB7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IFRyYW5zbGl0ZXJhdG9yLmdldERpc3BsYXlOYW1lKERBVEFbaV0sIFVTKTsKKyAgICAgICAgICAgIGlmICghbmFtZS5lcXVhbHMoREFUQVtpKzFdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgREFUQVtpXSArICIuZ2V0RGlzcGxheU5hbWUoKSA9PiAiICsKKyAgICAgICAgICAgICAgICAgICAgICBuYW1lICsgIiwgZXhwZWN0ZWQgIiArIERBVEFbaSsxXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogIiArIERBVEFbaV0gKyAiLmdldERpc3BsYXlOYW1lKCkgPT4gIiArIG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKERBVEFbaV0sIFRyYW5zbGl0ZXJhdG9yLlJFVkVSU0UpOworICAgICAgICAgICAgbmFtZSA9IFRyYW5zbGl0ZXJhdG9yLmdldERpc3BsYXlOYW1lKHQuZ2V0SUQoKSwgVVMpOworICAgICAgICAgICAgaWYgKCFuYW1lLmVxdWFscyhEQVRBW2krMl0pKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyB0LmdldElEKCkgKyAiLmdldERpc3BsYXlOYW1lKCkgPT4gIiArCisgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICIsIGV4cGVjdGVkICIgKyBEQVRBW2krMl0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2dsbigiT2s6ICIgKyB0LmdldElEKCkgKyAiLmdldERpc3BsYXlOYW1lKCkgPT4gIiArIG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBhbmNob3IgbWFza2luZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RBbmNob3JNYXNraW5nKCkgeworICAgICAgICBTdHJpbmcgcnVsZSA9ICJeYSA+IFE7IGEgPiBxOyI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJJRCIsIHJ1bGUsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyBydWxlICsgIiA9PiAiICsgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSByZWdpc3RlclJ1bGVzID0geworICAgICAgICB7IkFueS1EZXYxIiwgInggPiBYOyB5ID4gWTsifSwKKyAgICAgICAgeyJBbnktRGV2MiIsICJYWSA+IFoifSwKKyAgICAgICAgeyJHcmVlay1MYXRpbi9GQUtFIiwKKyAgICAgICAgICAgICJbXls6TDpdWzpNOl1dIHsgXHUwM2JjXHUwM2MwID4gYiA7ICIrCisgICAgICAgICAgICAiXHUwM2JjXHUwM2MwIH0gW15bOkw6XVs6TTpdXSA+IGIgOyAiKworICAgICAgICAgICAgIlteWzpMOl1bOk06XV0geyBbXHUwMzljXHUwM2JjXVtcdTAzYTBcdTAzYzBdID4gQiA7ICIrCisgICAgICAgICAgICAiW1x1MDM5Y1x1MDNiY11bXHUwM2EwXHUwM2MwXSB9IFteWzpMOl1bOk06XV0gPiBCIDsiCisgICAgICAgICAgICB9LAorICAgIH07CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0VSRVRfREVFID0gVVRGMTYudmFsdWVPZigweDEwNDE0KTsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0VSRVRfZGVlID0gVVRGMTYudmFsdWVPZigweDEwNDNDKTsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHRlc3RDYXNlcyA9IHsKKworICAgICAgICAvLyBOT1JNQUxJWkFUSU9OCisgICAgICAgIC8vIHNob3VsZCBhZGQgbW9yZSB0ZXN0IGNhc2VzCisgICAgICAgIHsiTkZEIiAsICJhXHUwMzAwIFx1MDBFMCBcdTExMDBcdTExNjEgXHVGRjc2XHVGRjlFXHUwM0QzIn0sCisgICAgICAgIHsiTkZDIiAsICJhXHUwMzAwIFx1MDBFMCBcdTExMDBcdTExNjEgXHVGRjc2XHVGRjlFXHUwM0QzIn0sCisgICAgICAgIHsiTkZLRCIsICJhXHUwMzAwIFx1MDBFMCBcdTExMDBcdTExNjEgXHVGRjc2XHVGRjlFXHUwM0QzIn0sCisgICAgICAgIHsiTkZLQyIsICJhXHUwMzAwIFx1MDBFMCBcdTExMDBcdTExNjEgXHVGRjc2XHVGRjlFXHUwM0QzIn0sCisKKyAgICAgICAgLy8gbXAgLT4gYiBCVUcKKyAgICAgICAgeyJHcmVlay1MYXRpbi9VTkdFR04iLCAiKFx1MDNCQ1x1MDNDMCkiLCAiKGIpIn0sCisgICAgICAgIHsiR3JlZWstTGF0aW4vRkFLRSIsICIoXHUwM0JDXHUwM0MwKSIsICIoYikifSwKKworICAgICAgICAvLyBjaGVjayBmb3IgZGV2YW5hZ2FyaSBidWcKKyAgICAgICAgeyJuZmQ7RGV2MTtEZXYyO25mYyIsICJ4eSIsICJaIn0sCisKKyAgICAgICAgLy8gZmYsIGksIGRvdGxlc3MtaSwgSSwgZG90dGVkLUksIExKTGpsaiBkZXNlcmV0IGRlZURFRQorICAgICAgICB7IlRpdGxlIiwgImFiJ2NEIGZmaVx1MDEzMUlcdTAxMzAgXHUwMUM3XHUwMUM4XHUwMUM5ICIgKyBERVNFUkVUX2RlZSArIERFU0VSRVRfREVFLAorICAgICAgICAgICAgICAgICAgIkFiJ2NkIEZmaVx1MDEzMWlpXHUwMzA3IFx1MDFDOFx1MDFDOVx1MDFDOSAiICsgREVTRVJFVF9ERUUgKyBERVNFUkVUX2RlZX0sCisgICAgICAgIC8vVE9ETzogZW5hYmxlIHRoaXMgdGVzdCBvbmNlIFRpdGxlY2FzZSB3b3JrcyByaWdodAorICAgICAgICAvL3siVGl0bGUiLCAiXHVGQjAwaVx1MDEzMUlcdTAxMzAgXHUwMUM3XHUwMUM4XHUwMUM5ICIgKyBERVNFUkVUX2RlZSArIERFU0VSRVRfREVFLAorICAgICAgICAvLyAgICAgICAgICAiRmZpXHUwMTMxaWkgXHUwMUM4XHUwMUM5XHUwMUM5ICIgKyBERVNFUkVUX0RFRSArIERFU0VSRVRfZGVlfSwKKyAgICAgICAgCisgICAgICAgIHsiVXBwZXIiLCAiYWInY0QgXHVGQjAwaVx1MDEzMUlcdTAxMzAgXHUwMUM3XHUwMUM4XHUwMUM5ICIgKyBERVNFUkVUX2RlZSArIERFU0VSRVRfREVFLAorICAgICAgICAgICAgICAgICAgIkFCJ0NEIEZGSUlJXHUwMTMwIFx1MDFDN1x1MDFDN1x1MDFDNyAiICsgREVTRVJFVF9ERUUgKyBERVNFUkVUX0RFRX0sCisgICAgICAgIHsiTG93ZXIiLCAiYWInY0QgXHVGQjAwaVx1MDEzMUlcdTAxMzAgXHUwMUM3XHUwMUM4XHUwMUM5ICIgKyBERVNFUkVUX2RlZSArIERFU0VSRVRfREVFLAorICAgICAgICAgICAgICAgICAgImFiJ2NkIFx1RkIwMGlcdTAxMzFpaVx1MDMwNyBcdTAxQzlcdTAxQzlcdTAxQzkgIiArIERFU0VSRVRfZGVlICsgREVTRVJFVF9kZWV9LAorICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsiVXBwZXIiLCAiYWInY0QgXHVGQjAwaVx1MDEzMUlcdTAxMzAgXHUwMUM3XHUwMUM4XHUwMUM5ICIgKyBERVNFUkVUX2RlZSArIERFU0VSRVRfREVFfSwKKyAgICAgICAgeyJMb3dlciIsICJhYidjRCBcdUZCMDBpXHUwMTMxSVx1MDEzMCBcdTAxQzdcdTAxQzhcdTAxQzkgIiArIERFU0VSRVRfZGVlICsgREVTRVJFVF9ERUV9LAorCisgICAgICAgICAvLyBGT1JNUyBPRiBTCisgICAgICAgIHsiR3JlZWstTGF0aW4vVU5HRUdOIiwgIlx1MDNDMyBcdTAzQzNcdTAzQzIgXHUwM0MyXHUwM0MzIiwgInMgc3Mgc1x1MDMzMXNcdTAzMzEifSwKKyAgICAgICAgeyJMYXRpbi1HcmVlay9VTkdFR04iLCAicyBzcyBzXHUwMzMxc1x1MDMzMSIsICJcdTAzQzMgXHUwM0MzXHUwM0MyIFx1MDNDMlx1MDNDMyJ9LAorICAgICAgICB7IkdyZWVrLUxhdGluIiwgIlx1MDNDMyBcdTAzQzNcdTAzQzIgXHUwM0MyXHUwM0MzIiwgInMgc3Mgc1x1MDMzMXNcdTAzMzEifSwKKyAgICAgICAgeyJMYXRpbi1HcmVlayIsICJzIHNzIHNcdTAzMzFzXHUwMzMxIiwgIlx1MDNDMyBcdTAzQzNcdTAzQzIgXHUwM0MyXHUwM0MzIn0sCisKKyAgICAgICAgLy8gVGF0aWFuYSBidWcKKyAgICAgICAgLy8gVXBwZXI6IFRBVFx1MDJCOVx1MDBDMk5BCisgICAgICAgIC8vIExvd2VyOiB0YXRcdTAyQjlcdTAwRTJuYQorICAgICAgICAvLyBUaXRsZTogVGF0XHUwMkI5XHUwMEUybmEKKyAgICAgICAgeyJVcHBlciIsICJ0YXRcdTAyQjlcdTAwRTJuYSIsICJUQVRcdTAyQjlcdTAwQzJOQSJ9LAorICAgICAgICB7Ikxvd2VyIiwgIlRBVFx1MDJCOVx1MDBDMk5BIiwgInRhdFx1MDJCOVx1MDBFMm5hIn0sCisgICAgICAgIHsiVGl0bGUiLCAidGF0XHUwMkI5XHUwMEUybmEiLCAiVGF0XHUwMkI5XHUwMEUybmEifSwKKyAgICB9OworCisgICAgcHVibGljIHZvaWQgVGVzdFNwZWNpYWxDYXNlcygpIHsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVnaXN0ZXJSdWxlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcyhyZWdpc3RlclJ1bGVzW2ldWzBdLAorICAgICAgICAgICAgICAgIHJlZ2lzdGVyUnVsZXNbaV1bMV0sIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICAgICAgRHVtbXlGYWN0b3J5LmFkZChyZWdpc3RlclJ1bGVzW2ldWzBdLCB0KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RDYXNlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB0ZXN0Q2FzZXNbaV1bMF07CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UobmFtZSk7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSB0LmdldElEKCk7CisgICAgICAgICAgICBTdHJpbmcgc291cmNlID0gdGVzdENhc2VzW2ldWzFdOworICAgICAgICAgICAgU3RyaW5nIHRhcmdldCA9IG51bGw7CisKKyAgICAgICAgICAgIC8vIEF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHRhcmdldHMsIHRvIG1ha2UgaXQgc2ltcGxlciB0byBhZGQgdGVzdCBjYXNlcyAoYW5kIG1vcmUgZmFpbC1zYWZlKQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodGVzdENhc2VzW2ldLmxlbmd0aCA+IDIpICAgIHRhcmdldCA9IHRlc3RDYXNlc1tpXVsyXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlkLmVxdWFsc0lnbm9yZUNhc2UoIk5GRCIpKSAgICB0YXJnZXQgPSBjb20uaWJtLmljdS50ZXh0Lk5vcm1hbGl6ZXIubm9ybWFsaXplKHNvdXJjZSwgY29tLmlibS5pY3UudGV4dC5Ob3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICBlbHNlIGlmIChpZC5lcXVhbHNJZ25vcmVDYXNlKCJORkMiKSkgICAgdGFyZ2V0ID0gY29tLmlibS5pY3UudGV4dC5Ob3JtYWxpemVyLm5vcm1hbGl6ZShzb3VyY2UsIGNvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplci5ORkMpOworICAgICAgICAgICAgZWxzZSBpZiAoaWQuZXF1YWxzSWdub3JlQ2FzZSgiTkZLRCIpKSAgIHRhcmdldCA9IGNvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplci5ub3JtYWxpemUoc291cmNlLCBjb20uaWJtLmljdS50ZXh0Lk5vcm1hbGl6ZXIuTkZLRCk7CisgICAgICAgICAgICBlbHNlIGlmIChpZC5lcXVhbHNJZ25vcmVDYXNlKCJORktDIikpICAgdGFyZ2V0ID0gY29tLmlibS5pY3UudGV4dC5Ob3JtYWxpemVyLm5vcm1hbGl6ZShzb3VyY2UsIGNvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplci5ORktDKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlkLmVxdWFsc0lnbm9yZUNhc2UoIkxvd2VyIikpICB0YXJnZXQgPSBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKExvY2FsZS5VUywgc291cmNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlkLmVxdWFsc0lnbm9yZUNhc2UoIlVwcGVyIikpICB0YXJnZXQgPSBVQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKExvY2FsZS5VUywgc291cmNlKTsKKworICAgICAgICAgICAgZXhwZWN0KHQsIHNvdXJjZSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHNlZW1zIGxpa2UgdGhlcmUgc2hvdWxkIGJlIGFuIGVhc2llciB3YXkgdG8ganVzdCByZWdpc3RlciBhbiBpbnN0YW5jZSBvZiBhIHRyYW5zbGl0ZXJhdG9yCisKKyAgICBzdGF0aWMgY2xhc3MgRHVtbXlGYWN0b3J5IGltcGxlbWVudHMgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSB7CisgICAgICAgIHN0YXRpYyBEdW1teUZhY3Rvcnkgc2luZ2xldG9uID0gbmV3IER1bW15RmFjdG9yeSgpOworICAgICAgICBzdGF0aWMgSGFzaE1hcCBtID0gbmV3IEhhc2hNYXAoKTsKKworICAgICAgICAvLyBTaW5jZSBUcmFuc2xpdGVyYXRvcnMgYXJlIGltbXV0YWJsZSwgd2UgZG9uJ3QgaGF2ZSB0byBjbG9uZSBvbiBzZXQgJiBnZXQKKyAgICAgICAgc3RhdGljIHZvaWQgYWRkKFN0cmluZyBJRCwgVHJhbnNsaXRlcmF0b3IgdCkgeworICAgICAgICAgICAgbS5wdXQoSUQsIHQpOworICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJlZ2lzdGVyaW5nOiAiICsgSUQgKyAiLCAiICsgdC50b1J1bGVzKHRydWUpKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeShJRCwgc2luZ2xldG9uKTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICByZXR1cm4gKFRyYW5zbGl0ZXJhdG9yKSBtLmdldChJRCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0U3Vycm9nYXRlQ2FzaW5nICgpIHsKKyAgICAgICAgLy8gY2hlY2sgdGhhdCBjYXNpbmcgaGFuZGxlcyBzdXJyb2dhdGVzCisgICAgICAgIC8vIHRpdGxlY2FzZSBpcyBjdXJyZW50bHkgZGVmZWN0aXZlCisgICAgICAgIGludCBkZWUgPSBVVEYxNi5jaGFyQXQoREVTRVJFVF9kZWUsMCk7CisgICAgICAgIGludCBERUUgPSBVQ2hhcmFjdGVyLnRvVGl0bGVDYXNlKGRlZSk7CisgICAgICAgIGlmICghVVRGMTYudmFsdWVPZihERUUpLmVxdWFscyhERVNFUkVUX0RFRSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlscyB0aXRsZWNhc2Ugb2Ygc3Vycm9nYXRlcyIgKyBJbnRlZ2VyLnRvU3RyaW5nKGRlZSwxNikgKyAiLCAiICsgSW50ZWdlci50b1N0cmluZyhERUUsMTYpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShERVNFUkVUX2RlZSArIERFU0VSRVRfREVFKS5lcXVhbHMoREVTRVJFVF9ERUUgKyBERVNFUkVUX0RFRSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlscyB1cHBlcmNhc2Ugb2Ygc3Vycm9nYXRlcyIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKERFU0VSRVRfZGVlICsgREVTRVJFVF9ERUUpLmVxdWFscyhERVNFUkVUX2RlZSArIERFU0VSRVRfZGVlKSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWxzIGxvd2VyY2FzZSBvZiBzdXJyb2dhdGVzIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayB0byBzZWUgdGhhdCBpbmNyZW1lbnRhbCBnZXRzIGF0IGxlYXN0IHBhcnQgd2F5IHRocm91Z2ggYSByZWFzb25hYmxlIHN0cmluZy4KKworICAgIHB1YmxpYyB2b2lkIFRlc3RJbmNyZW1lbnRhbFByb2dyZXNzKCkgeworICAgICAgICBTdHJpbmcgbGF0aW5UZXN0ID0gIlRoZSBRdWljayBCcm93biBGb3guIjsKKyAgICAgICAgU3RyaW5nIGRldmFUZXN0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkxhdGluLURldmFuYWdhcmkiKS50cmFuc2xpdGVyYXRlKGxhdGluVGVzdCk7CisgICAgICAgIFN0cmluZyBrYXRhVGVzdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJMYXRpbi1LYXRha2FuYSIpLnRyYW5zbGl0ZXJhdGUobGF0aW5UZXN0KTsKKyAgICAgICAgU3RyaW5nW11bXSB0ZXN0cyA9IHsKKyAgICAgICAgICAgIHsiQW55IiwgbGF0aW5UZXN0fSwKKyAgICAgICAgICAgIHsiTGF0aW4iLCBsYXRpblRlc3R9LAorICAgICAgICAgICAgeyJIYWxmd2lkdGgiLCBsYXRpblRlc3R9LAorICAgICAgICAgICAgeyJEZXZhbmFnYXJpIiwgZGV2YVRlc3R9LAorICAgICAgICAgICAgeyJLYXRha2FuYSIsIGthdGFUZXN0fSwKKyAgICAgICAgfTsKKworICAgICAgICBFbnVtZXJhdGlvbiBzb3VyY2VzID0gVHJhbnNsaXRlcmF0b3IuZ2V0QXZhaWxhYmxlU291cmNlcygpOworICAgICAgICB3aGlsZShzb3VyY2VzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgc291cmNlID0gKFN0cmluZykgc291cmNlcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIHRlc3QgPSBmaW5kTWF0Y2goc291cmNlLCB0ZXN0cyk7CisgICAgICAgICAgICBpZiAodGVzdCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIlNraXBwaW5nICIgKyBzb3VyY2UgKyAiLVgiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVudW1lcmF0aW9uIHRhcmdldHMgPSBUcmFuc2xpdGVyYXRvci5nZXRBdmFpbGFibGVUYXJnZXRzKHNvdXJjZSk7CisgICAgICAgICAgICB3aGlsZSh0YXJnZXRzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdldCA9IChTdHJpbmcpIHRhcmdldHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiB2YXJpYW50cyA9IFRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZVZhcmlhbnRzKHNvdXJjZSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB3aGlsZSh2YXJpYW50cy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFyaWFudCA9IChTdHJpbmcpIHZhcmlhbnRzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IHNvdXJjZSArICItIiArIHRhcmdldCArICIvIiArIHZhcmlhbnQ7CisKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbHRlciA9IGdldEZpbHRlcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwgJiYgaWQuaW5kZXhPZihmaWx0ZXIpIDwgMCkgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tJbmNyZW1lbnRhbEF1eCh0LCB0ZXN0KTsKKworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV2ID0gdC50cmFuc2xpdGVyYXRlKHRlc3QpOworICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciBpbnYgPSB0LmdldEludmVyc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tJbmNyZW1lbnRhbEF1eChpbnYsIHJldik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBmaW5kTWF0Y2ggKFN0cmluZyBzb3VyY2UsIFN0cmluZ1tdW10gcGFpcnMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHNvdXJjZS5lcXVhbHNJZ25vcmVDYXNlKHBhaXJzW2ldWzBdKSkgcmV0dXJuIHBhaXJzW2ldWzFdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIENoZWNrSW5jcmVtZW50YWxBdXgoVHJhbnNsaXRlcmF0b3IgdCwgU3RyaW5nIGlucHV0KSB7CisKKyAgICAgICAgUmVwbGFjZWFibGUgdGVzdCA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyhpbnB1dCk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIHBvcyA9IG5ldyBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbigwLCB0ZXN0Lmxlbmd0aCgpLCAwLCB0ZXN0Lmxlbmd0aCgpKTsKKyAgICAgICAgdC50cmFuc2xpdGVyYXRlKHRlc3QsIHBvcyk7CisgICAgICAgIGJvb2xlYW4gZ290RXJyb3IgPSBmYWxzZTsKKworICAgICAgICAvLyB3ZSBoYXZlIGEgZmV3IHNwZWNpYWwgY2FzZXMuIEFueS1SZW1vdmUgKHBvcy5zdGFydCA9IDAsIGJ1dCBhbHNvID0gbGltaXQpIGFuZCBVK1hYWFhYP1g/CisKKyAgICAgICAgaWYgKHBvcy5zdGFydCA9PSAwICYmIHBvcy5saW1pdCAhPSAwICYmICF0LmdldElEKCkuZXF1YWxzKCJIZXgtQW55L1VuaWNvZGUiKSkgeworICAgICAgICAgICAgZXJybG4oIk5vIFByb2dyZXNzLCAiICsgdC5nZXRJRCgpICsgIjogIiArIFV0aWxpdHkuZm9ybWF0SW5wdXQodGVzdCwgcG9zKSk7CisgICAgICAgICAgICBnb3RFcnJvciA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiUEFTUyBQcm9ncmVzcywgIiArIHQuZ2V0SUQoKSArICI6ICIgKyBVdGlsaXR5LmZvcm1hdElucHV0KHRlc3QsIHBvcykpOworICAgICAgICB9CisgICAgICAgIHQuZmluaXNoVHJhbnNsaXRlcmF0aW9uKHRlc3QsIHBvcyk7CisgICAgICAgIGlmIChwb3Muc3RhcnQgIT0gcG9zLmxpbWl0KSB7CisgICAgICAgICAgICBlcnJsbigiSW5jb21wbGV0ZSwgIiArIHQuZ2V0SUQoKSArICI6ICAiICsgVXRpbGl0eS5mb3JtYXRJbnB1dCh0ZXN0LCBwb3MpKTsKKyAgICAgICAgICAgIGdvdEVycm9yID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RGdW5jdGlvbigpIHsKKyAgICAgICAgLy8gQ2FyZWZ1bCB3aXRoIHNwYWNpbmcgYW5kICc7JyBoZXJlOiAgUGhyYXNlIHRoaXMgZXhhY3RseQorICAgICAgICAvLyBhcyB0b1J1bGVzKCkgaXMgZ29pbmcgdG8gcmV0dXJuIGl0LiAgSWYgdG9SdWxlcygpIGNoYW5nZXMKKyAgICAgICAgLy8gd2l0aCByZWdhcmQgdG8gc3BhY2luZyBvciAnOycsIHRoZW4gYWRqdXN0IHRoaXMgc3RyaW5nLgorICAgICAgICBTdHJpbmcgcnVsZSA9CisgICAgICAgICAgICAiKFs6THU6XSkgPiAkMSAnKCcgJkxvd2VyKCAkMSApICc9JyAmSGV4KCAmQW55LUxvd2VyKCAkMSApICkgJyknOyI7CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiVGVzdCIsIHJ1bGUsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBpZiAodCA9PSBudWxsKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogY3JlYXRlRnJvbVJ1bGVzIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHIgPSB0LnRvUnVsZXModHJ1ZSk7CisgICAgICAgIGlmIChyLmVxdWFscyhydWxlKSkgeworICAgICAgICAgICAgbG9nbG4oIk9LOiB0b1J1bGVzKCkgPT4gIiArIHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IHRvUnVsZXMoKSA9PiAiICsgciArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgcnVsZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4cGVjdCh0LCAiVGhlIFF1aWNrIEJyb3duIEZveCIsCisgICAgICAgICAgICAgICAiVCh0PVxcdTAwNzQpaGUgUShxPVxcdTAwNzEpdWljayBCKGI9XFx1MDA2Milyb3duIEYoZj1cXHUwMDY2KW94Iik7CisgICAgICAgIHJ1bGUgPQorICAgICAgICAgICAgIihbXlxcIC1cXHUwMDdGXSkgPiAmSGV4L1VuaWNvZGUoICQxICkgJyAnICZOYW1lKCAkMSApIDsiOworCisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIlRlc3QiLCBydWxlLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgaWYgKHQgPT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNyZWF0ZUZyb21SdWxlcyBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHIgPSB0LnRvUnVsZXModHJ1ZSk7CisgICAgICAgIGlmIChyLmVxdWFscyhydWxlKSkgeworICAgICAgICAgICAgbG9nbG4oIk9LOiB0b1J1bGVzKCkgPT4gIiArIHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IHRvUnVsZXMoKSA9PiAiICsgciArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgcnVsZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4cGVjdCh0LCAiXHUwMzAxIiwKKyAgICAgICAgICAgICAgICJVKzAzMDEgXFxOe0NPTUJJTklORyBBQ1VURSBBQ0NFTlR9Iik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEludmFsaWRCYWNrUmVmKCkgeworICAgICAgICBTdHJpbmcgcnVsZSA9ICAiLiA+ICQxOyI7CisgICAgICAgIFN0cmluZyBydWxlMiA9IiguKSA8PiAmaGV4L3VuaWNvZGUoJDEpICZuYW1lKCQxKTsgLiA+ICQxOyBbe31dID5cdTAwMjA7IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIlRlc3QiLCBydWxlLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgICAgIGlmICh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogY3JlYXRlRnJvbVJ1bGVzIHNob3VsZCBoYXZlIHJldHVybmVkIE5VTEwiKTsKKyAgICAgICAgICAgIH0KKwkgICAgICAgIGVycmxuKCJGQUlMOiBPazogLiA+ICQxOyA9PiBubyBlcnJvciIpOworCSAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDI9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiVGVzdDIiLCBydWxlMiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgICAgICBpZiAodDIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjcmVhdGVGcm9tUnVsZXMgc2hvdWxkIGhhdmUgcmV0dXJuZWQgTlVMTCIpOworICAgICAgICAgICAgfQorCSAgICAgICAgZXJybG4oIkZBSUw6IE9rOiAuID4gJDE7ID0+IG5vIGVycm9yIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7ICAgICAgICAKKyAgICAgICAgICAJIGxvZ2xuKCJPazogLiA+ICQxOyA9PiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdE11bHRpY2hhclN0cmluZ1NldCgpIHsKKyAgICAgICAgLy8gQmFzaWMgdGVzdGluZworICAgICAgICBTdHJpbmcgcnVsZSA9CisgICAgICAgICAgICAiICAgICAgIFt7YWF9XSAgICAgICA+IHg7IiArCisgICAgICAgICAgICAiICAgICAgICAgYSAgICAgICAgICA+IHk7IiArCisgICAgICAgICAgICAiICAgICAgIFtie2JjfV0gICAgICA+IHo7IiArCisgICAgICAgICAgICAiW3tnZH1dIHsgZSAgICAgICAgICA+IHE7IiArCisgICAgICAgICAgICAiICAgICAgICAgZSB9IFt7Zmd9XSA+IHI7IiA7CisgICAgICAgIAorICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJUZXN0IiwgcnVsZSwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjcmVhdGVGcm9tUnVsZXMgZmFpbGVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4cGVjdCh0LCAiYSBhYSBhYiBiYyBkIGdkIGRlIGdkZSBnZGVmZyBkZGVmZyIsCisgICAgICAgICAgICAgICAgICAieSB4IHl6IHogZCBnZCBkZSBnZHEgZ2RxZmcgZGRyZmciKTsKKworICAgICAgICAvLyBPdmVybGFwcGVkIHN0cmluZyB0ZXN0LiAgTWFrZSBzdXJlIHRoYXQgd2hlbiBtdWx0aXBsZQorICAgICAgICAvLyBzdHJpbmdzIGNhbiBtYXRjaCB0aGF0IHRoZSBsb25nZXN0IG9uZSBpcyBtYXRjaGVkLgorICAgICAgICBydWxlID0KKyAgICAgICAgICAgICIgICAgW2Ege2FifSB7YWJjfV0gICAgPiB4OyIgKworICAgICAgICAgICAgIiAgICAgICAgICAgYiAgICAgICAgICA+IHk7IiArCisgICAgICAgICAgICAiICAgICAgICAgICBjICAgICAgICAgID4gejsiICsKKyAgICAgICAgICAgICIgcSBbdCB7c3R9IHtyc3R9XSB7IGUgPiBwOyIgOworICAgICAgICAKKyAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygiVGVzdCIsIHJ1bGUsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBpZiAodCA9PSBudWxsKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogY3JlYXRlRnJvbVJ1bGVzIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBleHBlY3QodCwgImEgYWIgYWJjIHF0ZSBxc3RlIHFyc3RlIiwKKyAgICAgICAgICAgICAgICAgICJ4IHggeCBxdHAgcXN0cCBxcnN0cCIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhhdCB1c2VyLXJlZ2lzdGVyZWQgdHJhbnNsaXRlcmF0b3JzIGNhbiBiZSB1c2VkIHVuZGVyIGZ1bmN0aW9uCisgICAgICogc3ludGF4LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RVc2VyRnVuY3Rpb24oKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQ7CisKKyAgICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHJlZ2lzdGVyIGludmVyc2VzIGlmIHdlIGRvbid0IHVzZSB0aGVtCisgICAgICAgIFRlc3RVc2VyRnVuY3Rpb25GYWN0b3J5LmFkZCgiQW55LWdpZiIsCisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoImdpZiIsCisgICAgICAgICAgICAgICAgIidcXCd1KC4uKSguLikgPiAnPGltZyBzcmM9XCJodHRwOi8vd3d3LnVuaWNvZGUub3JnL2dpZnMvMjQvJyAkMSAnL1UnICQxJDIgJy5naWZcIj4nOyIsCisgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCkpOworICAgICAgICAvL1Rlc3RVc2VyRnVuY3Rpb25GYWN0b3J5LmFkZCgiZ2lmLUFueSIsIFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJBbnktTnVsbCIpKTsKKworICAgICAgICBUZXN0VXNlckZ1bmN0aW9uRmFjdG9yeS5hZGQoIkFueS1SZW1vdmVDdXJseSIsCisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIlJlbW92ZUN1cmx5IiwgIltcXHtcXH1dID4gOyBcXFxcTiA+IDsiLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKSk7CisgICAgICAgIC8vVGVzdFVzZXJGdW5jdGlvbkZhY3RvcnkuYWRkKCJSZW1vdmVDdXJseS1BbnkiLCBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LU51bGwiKSk7CisKKyAgICAgICAgbG9nbG4oIlRyeWluZyAmaGV4Iik7CisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoImhleDIiLCAiKC4pID4gJmhleCgkMSk7IiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGxvZ2xuKCJSZWdpc3RlcmluZyIpOworICAgICAgICBUZXN0VXNlckZ1bmN0aW9uRmFjdG9yeS5hZGQoIkFueS1oZXgyIiwgdCk7CisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LWhleDIiKTsKKyAgICAgICAgZXhwZWN0KHQsICJhYmMiLCAiXFx1MDA2MVxcdTAwNjJcXHUwMDYzIik7CisKKyAgICAgICAgbG9nbG4oIlRyeWluZyAmZ2lmIik7CisgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoImdpZjIiLCAiKC4pID4gJkdpZigmSGV4MigkMSkpOyIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBsb2dsbigiUmVnaXN0ZXJpbmciKTsKKyAgICAgICAgVGVzdFVzZXJGdW5jdGlvbkZhY3RvcnkuYWRkKCJBbnktZ2lmMiIsIHQpOworICAgICAgICB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkFueS1naWYyIik7CisgICAgICAgIGV4cGVjdCh0LCAiYWIiLCAiPGltZyBzcmM9XCJodHRwOi8vd3d3LnVuaWNvZGUub3JnL2dpZnMvMjQvMDAvVTAwNjEuZ2lmXCI+IiArCisgICAgICAgICAgICAgICAiPGltZyBzcmM9XCJodHRwOi8vd3d3LnVuaWNvZGUub3JnL2dpZnMvMjQvMDAvVTAwNjIuZ2lmXCI+Iik7CisKKyAgICAgICAgLy8gVGVzdCB0aGF0IGZpbHRlcnMgYXJlIGFsbG93ZWQgYWZ0ZXIgJgorICAgICAgICB0ID0gVHJhbnNsaXRlcmF0b3IuY3JlYXRlRnJvbVJ1bGVzKCJ0ZXN0IiwKKyAgICAgICAgICAgICAgICAiKC4pID4gJkhleCgkMSkgJyAnICZBbnktUmVtb3ZlQ3VybHkoJk5hbWUoJDEpKSAnICc7IiwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGV4cGVjdCh0LCAiYWJjIiwgIlxcdTAwNjEgTEFUSU4gU01BTEwgTEVUVEVSIEEgXFx1MDA2MiBMQVRJTiBTTUFMTCBMRVRURVIgQiBcXHUwMDYzIExBVElOIFNNQUxMIExFVFRFUiBDICIpOworCisgICAgICAgIC8vIFVucmVnaXN0ZXIgb3VyIHRlc3Qgc3R1ZmYKKyAgICAgICAgVGVzdFVzZXJGdW5jdGlvbkZhY3RvcnkudW5yZWdpc3RlcigpOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBUZXN0VXNlckZ1bmN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkgeworICAgICAgICBzdGF0aWMgVGVzdFVzZXJGdW5jdGlvbkZhY3Rvcnkgc2luZ2xldG9uID0gbmV3IFRlc3RVc2VyRnVuY3Rpb25GYWN0b3J5KCk7CisgICAgICAgIHN0YXRpYyBIYXNoTWFwIG0gPSBuZXcgSGFzaE1hcCgpOworCisgICAgICAgIHN0YXRpYyB2b2lkIGFkZChTdHJpbmcgSUQsIFRyYW5zbGl0ZXJhdG9yIHQpIHsKKyAgICAgICAgICAgIG0ucHV0KG5ldyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcoSUQpLCB0KTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeShJRCwgc2luZ2xldG9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgICAgIHJldHVybiAoVHJhbnNsaXRlcmF0b3IpIG0uZ2V0KG5ldyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcoSUQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlcigpIHsKKyAgICAgICAgICAgIEl0ZXJhdG9yIGlkcyA9IG0ua2V5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlIChpZHMuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nIGlkID0gKENhc2VJbnNlbnNpdGl2ZVN0cmluZykgaWRzLm5leHQoKTsKKyAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci51bnJlZ2lzdGVyKGlkLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBpZHMucmVtb3ZlKCk7IC8vIHJlbW92ZXMgcGFpciBmcm9tIG0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlIEFueS1YIHRyYW5zbGl0ZXJhdG9ycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0QW55WCgpIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgYW55TGF0aW4gPQorICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkFueS1MYXRpbiIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICAKKyAgICAgICAgZXhwZWN0KGFueUxhdGluLAorICAgICAgICAgICAgICAgImdyZWVrOlx1MDNCMVx1MDNCMlx1MDNCQVx1MDM5MVx1MDM5Mlx1MDM5QSBoaXJhZ2FuYTpcdTMwNDJcdTMwNzZcdTMwNEYgY3lyaWxsaWM6XHUwNDMwXHUwNDMxXHUwNDQ2IiwKKyAgICAgICAgICAgICAgICJncmVlazphYmtBQksgaGlyYWdhbmE6YWJ1a3UgY3lyaWxsaWM6YWJjIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0aGUgc291cmNlIGFuZCB0YXJnZXQgc2V0IEFQSS4gIFRoZXNlIGFyZSBvbmx5IGltcGxlbWVudGVkCisgICAgICogZm9yIFJCVCBhbmQgQ29tcG91bmRUcmFuc2xpdGVyYXRvciBhdCB0aGlzIHRpbWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFNvdXJjZVRhcmdldFNldCgpIHsKKyAgICAgICAgLy8gUnVsZXMKKyAgICAgICAgU3RyaW5nIHIgPQorICAgICAgICAgICAgImEgPiBiOyAiICsKKyAgICAgICAgICAgICJyIFt4e2x1fV0gPiBxOyI7CisKKyAgICAgICAgLy8gRXhwZWN0ZWQgc291cmNlCisgICAgICAgIFVuaWNvZGVTZXQgZXhwU3JjID0gbmV3IFVuaWNvZGVTZXQoIlthcnh7bHV9XSIpOworCisgICAgICAgIC8vIEV4cGVjdGVkIHRhcmdldAorICAgICAgICBVbmljb2RlU2V0IGV4cFRyZyA9IG5ldyBVbmljb2RlU2V0KCJbYnFdIik7CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygidGVzdCIsIHIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworICAgICAgICBVbmljb2RlU2V0IHNyYyA9IHQuZ2V0U291cmNlU2V0KCk7CisgICAgICAgIFVuaWNvZGVTZXQgdHJnID0gdC5nZXRUYXJnZXRTZXQoKTsKKworICAgICAgICBpZiAoc3JjLmVxdWFscyhleHBTcmMpICYmIHRyZy5lcXVhbHMoZXhwVHJnKSkgeworICAgICAgICAgICAgbG9nbG4oIk9rOiAiICsgciArICIgPT4gc291cmNlID0gIiArIHNyYy50b1BhdHRlcm4odHJ1ZSkgKworICAgICAgICAgICAgICAgICAgIiwgdGFyZ2V0ID0gIiArIHRyZy50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyByICsgIiA9PiBzb3VyY2UgPSAiICsgc3JjLnRvUGF0dGVybih0cnVlKSArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgZXhwU3JjLnRvUGF0dGVybih0cnVlKSArCisgICAgICAgICAgICAgICAgICAiOyB0YXJnZXQgPSAiICsgdHJnLnRvUGF0dGVybih0cnVlKSArCisgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgZXhwVHJnLnRvUGF0dGVybih0cnVlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IGhhbmRsaW5nIG9mIHJ1bGUgd2hpdGVzcGFjZSwgZm9yIGJvdGggUkJUIGFuZCBVbmljb2RlU2V0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RSdWxlV2hpdGVzcGFjZSgpIHsKKyAgICAgICAgLy8gUnVsZXMKKyAgICAgICAgU3RyaW5nIHIgPSAiYSA+IFx1MjAwRSBiOyI7CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmNyZWF0ZUZyb21SdWxlcygidGVzdCIsIHIsIFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpOworCisgICAgICAgIGV4cGVjdCh0LCAiYSIsICJiIik7CisKKyAgICAgICAgLy8gVW5pY29kZVNldAorICAgICAgICBVbmljb2RlU2V0IHNldCA9IG5ldyBVbmljb2RlU2V0KCJbYSBcdTIwMEVdIik7CisKKyAgICAgICAgaWYgKHNldC5jb250YWlucygweDIwMEUpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogVSsyMDBFIG5vdCBiZWluZyBpZ25vcmVkIGJ5IFVuaWNvZGVTZXQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIFRoZXNlIHRlc3RzIGFyZSBub3QgbWlycm9yZWQgKHlldCkgaW4gaWN1NGMgYXQKKyAgICAvLyBzb3VyY2UvdGVzdC9pbnRsdGVzdC90cmFuc3RzdC5jcHAKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIEltcHJvdmUgY29kZSBjb3ZlcmFnZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Q292ZXJhZ2UoKSB7CisgICAgICAgIC8vIE51bGxUcmFuc2xpdGVyYXRvcgorICAgICAgICBUcmFuc2xpdGVyYXRvciB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIk51bGwiLCBUcmFuc2xpdGVyYXRvci5GT1JXQVJEKTsKKyAgICAgICAgZXhwZWN0KHQsICJhIiwgImEiKTsKKyAgICB9CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBTdXBwb3J0IG1ldGhvZHMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICB2b2lkIGV4cGVjdChTdHJpbmcgcnVsZXMsCisgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQsCisgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24gcG9zKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoIjxJRD4iLCBydWxlcywgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIGV4cGVjdCh0LCBzb3VyY2UsIGV4cGVjdGVkUmVzdWx0LCBwb3MpOworICAgIH0KKworICAgIHZvaWQgZXhwZWN0KFN0cmluZyBydWxlcywgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGV4cGVjdGVkUmVzdWx0KSB7CisgICAgICAgIGV4cGVjdChydWxlcywgc291cmNlLCBleHBlY3RlZFJlc3VsdCwgbnVsbCk7CisgICAgfQorCisgICAgdm9pZCBleHBlY3QoVHJhbnNsaXRlcmF0b3IgdCwgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGV4cGVjdGVkUmVzdWx0LAorICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHJldmVyc2VUcmFuc2xpdGVyYXRvcikgeworICAgICAgICBleHBlY3QodCwgc291cmNlLCBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgIGlmIChyZXZlcnNlVHJhbnNsaXRlcmF0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgZXhwZWN0KHJldmVyc2VUcmFuc2xpdGVyYXRvciwgZXhwZWN0ZWRSZXN1bHQsIHNvdXJjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGV4cGVjdChUcmFuc2xpdGVyYXRvciB0LCBTdHJpbmcgc291cmNlLCBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgZXhwZWN0KHQsIHNvdXJjZSwgZXhwZWN0ZWRSZXN1bHQsIChUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbikgbnVsbCk7CisgICAgfQorCisgICAgdm9pZCBleHBlY3QoVHJhbnNsaXRlcmF0b3IgdCwgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGV4cGVjdGVkUmVzdWx0LAorICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIHBvcykgeworICAgICAgICBpZiAocG9zID09IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSB0LnRyYW5zbGl0ZXJhdGUoc291cmNlKTsKKyAgICAgICAgICAgIGlmICghZXhwZWN0QXV4KHQuZ2V0SUQoKSArICI6U3RyaW5nIiwgc291cmNlLCByZXN1bHQsIGV4cGVjdGVkUmVzdWx0KSkgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24gaW5kZXggPSBudWxsOworICAgICAgICBpZiAocG9zID09IG51bGwpIHsKKyAgICAgICAgICAgIGluZGV4ID0gbmV3IFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uKDAsIHNvdXJjZS5sZW5ndGgoKSwgMCwgc291cmNlLmxlbmd0aCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluZGV4ID0gbmV3IFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uKHBvcy5jb250ZXh0U3RhcnQsIHBvcy5jb250ZXh0TGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Muc3RhcnQsIHBvcy5saW1pdCk7CisgICAgICAgIH0KKworICAgICAgICBSZXBsYWNlYWJsZVN0cmluZyByc291cmNlID0gbmV3IFJlcGxhY2VhYmxlU3RyaW5nKHNvdXJjZSk7CisKKyAgICAgICAgdC5maW5pc2hUcmFuc2xpdGVyYXRpb24ocnNvdXJjZSwgaW5kZXgpOworICAgICAgICAvLyBEbyBpdCBhbGwgYXQgb25jZSAtLSBiZWxvdyB3ZSBkbyBpdCBpbmNyZW1lbnRhbGx5CisKKyAgICAgICAgaWYgKGluZGV4LnN0YXJ0ICE9IGluZGV4LmxpbWl0KSB7CisgICAgICAgICAgICBleHBlY3RBdXgodC5nZXRJRCgpICsgIjpVTkZJTklTSEVEIiwgc291cmNlLAorICAgICAgICAgICAgICAgICJzdGFydDogIiArIGluZGV4LnN0YXJ0ICsgIiwgbGltaXQ6ICIgKyBpbmRleC5saW1pdCwgZmFsc2UsIGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcnNvdXJjZS50b1N0cmluZygpOworICAgICAgICBpZiAoIWV4cGVjdEF1eCh0LmdldElEKCkgKyAiOlJlcGxhY2VhYmxlIiwgc291cmNlLCByZXN1bHQsIGV4cGVjdGVkUmVzdWx0KSkgcmV0dXJuOworCisKKyAgICAgICAgaWYgKHBvcyA9PSBudWxsKSB7CisgICAgICAgICAgICBpbmRleCA9IG5ldyBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5kZXggPSBuZXcgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24ocG9zLmNvbnRleHRTdGFydCwgcG9zLmNvbnRleHRMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5zdGFydCwgcG9zLmxpbWl0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgaW5jcmVtZW50YWwgdHJhbnNsaXRlcmF0aW9uIC0tIHRoaXMgcmVzdWx0CisgICAgICAgIC8vIG11c3QgYmUgdGhlIHNhbWUgYWZ0ZXIgd2UgZmluYWxpemUgKHNlZSBiZWxvdykuCisgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOworICAgICAgICB2LmFkZChzb3VyY2UpOworICAgICAgICByc291cmNlLnJlcGxhY2UoMCwgcnNvdXJjZS5sZW5ndGgoKSwgIiIpOworICAgICAgICBpZiAocG9zICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJzb3VyY2UucmVwbGFjZSgwLCAwLCBzb3VyY2UpOworICAgICAgICAgICAgdi5hZGQoVXRpbGl0eS5mb3JtYXRJbnB1dChyc291cmNlLCBpbmRleCkpOworICAgICAgICAgICAgdC50cmFuc2xpdGVyYXRlKHJzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgICAgIHYuYWRkKFV0aWxpdHkuZm9ybWF0SW5wdXQocnNvdXJjZSwgaW5kZXgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxzb3VyY2UubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIC8vdi5hZGQoaSA9PSAwID8gIiIgOiAiICsgIiArIHNvdXJjZS5jaGFyQXQoaSkgKyAiIik7CisgICAgICAgICAgICAgICAgLy9sb2cuYXBwZW5kKHNvdXJjZS5jaGFyQXQoaSkpLmFwcGVuZCgiIC0+ICIpKTsKKyAgICAgICAgICAgICAgICB0LnRyYW5zbGl0ZXJhdGUocnNvdXJjZSwgaW5kZXgsIHNvdXJjZS5jaGFyQXQoaSkpOworICAgICAgICAgICAgICAgIC8vdi5hZGQoVXRpbGl0eS5mb3JtYXRJbnB1dChyc291cmNlLCBpbmRleCkgKyBzb3VyY2Uuc3Vic3RyaW5nKGkrMSkpOworICAgICAgICAgICAgICAgIHYuYWRkKFV0aWxpdHkuZm9ybWF0SW5wdXQocnNvdXJjZSwgaW5kZXgpICsKKyAgICAgICAgICAgICAgICAgICAgICAoKGk8c291cmNlLmxlbmd0aCgpLTEpPygiICsgJyIgKyBzb3VyY2UuY2hhckF0KGkrMSkgKyAiJyAtPiIpOiIgPT4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBcyBhIGZpbmFsIHN0ZXAgaW4ga2V5Ym9hcmQgdHJhbnNsaXRlcmF0aW9uLCB3ZSBtdXN0IGNhbGwKKyAgICAgICAgLy8gdHJhbnNsaXRlcmF0ZSB0byBmaW5pc2ggb2ZmIGFueSBwZW5kaW5nIHBhcnRpYWwgbWF0Y2hlcyB0aGF0CisgICAgICAgIC8vIHdlcmUgd2FpdGluZyBmb3IgbW9yZSBpbnB1dC4KKyAgICAgICAgdC5maW5pc2hUcmFuc2xpdGVyYXRpb24ocnNvdXJjZSwgaW5kZXgpOworICAgICAgICByZXN1bHQgPSByc291cmNlLnRvU3RyaW5nKCk7CisgICAgICAgIC8vbG9nLmFwcGVuZCgiID0+ICIpLmFwcGVuZChyc291cmNlLnRvU3RyaW5nKCkpOworICAgICAgICB2LmFkZChyZXN1bHQpOworCisgICAgICAgIFN0cmluZ1tdIHJlc3VsdHMgPSBuZXcgU3RyaW5nW3Yuc2l6ZSgpXTsKKyAgICAgICAgdi5jb3B5SW50byhyZXN1bHRzKTsKKyAgICAgICAgZXhwZWN0QXV4KHQuZ2V0SUQoKSArICI6SW5jcmVtZW50YWwiLCByZXN1bHRzLAorICAgICAgICAgICAgICAgICAgcmVzdWx0LmVxdWFscyhleHBlY3RlZFJlc3VsdCksCisgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCk7CisgICAgfQorCisgICAgYm9vbGVhbiBleHBlY3RBdXgoU3RyaW5nIHRhZywgU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0LCBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIGV4cGVjdEF1eCh0YWcsIG5ldyBTdHJpbmdbXSB7c291cmNlLCByZXN1bHR9LAorICAgICAgICAgICAgICAgICAgcmVzdWx0LmVxdWFscyhleHBlY3RlZFJlc3VsdCksCisgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCk7CisgICAgfQorCisgICAgYm9vbGVhbiBleHBlY3RBdXgoU3RyaW5nIHRhZywgU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0LCBib29sZWFuIHBhc3MsCisgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVzdWx0KSB7CisgICAgICAgIHJldHVybiBleHBlY3RBdXgodGFnLCBuZXcgU3RyaW5nW10ge3NvdXJjZSwgcmVzdWx0fSwKKyAgICAgICAgICAgICAgICAgIHBhc3MsCisgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCk7CisgICAgfQorCisgICAgYm9vbGVhbiBleHBlY3RBdXgoU3RyaW5nIHRhZywgU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBib29sZWFuIHBhc3MsCisgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVzdWx0KSB7CisgICAgICAgIHJldHVybiBleHBlY3RBdXgodGFnLCBuZXcgU3RyaW5nW10ge3NvdXJjZX0sCisgICAgICAgICAgICAgICAgICBwYXNzLAorICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQpOworICAgIH0KKworICAgIGJvb2xlYW4gZXhwZWN0QXV4KFN0cmluZyB0YWcsIFN0cmluZ1tdIHJlc3VsdHMsIGJvb2xlYW4gcGFzcywKKyAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgbG9nbG4oKHBhc3M/IigiOiJGQUlMOiAoIikrdGFnKyIpIiwgcGFzcyk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgbGFiZWw7CisgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbGFiZWwgPSAic291cmNlOiAgICI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gcmVzdWx0cy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgbGFiZWwgPSAicmVzdWx0OiAgICI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghaXNWZXJib3NlKCkgJiYgcGFzcykgY29udGludWU7CisgICAgICAgICAgICAgICAgbGFiZWwgPSAiaW50ZXJtIiArIGkgKyAiOiAgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZ2xuKCIgICAgIiArIGxhYmVsICsgcmVzdWx0c1tpXSwgcGFzcywgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXNzKSB7CisgICAgICAgICAgICBsb2dsbiggICIgICAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFJlc3VsdCwgcGFzcywgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHBhc3M7CisgICAgfQorfQorCisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9Vbmljb2RlRmlsdGVyTG9naWNUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVW5pY29kZUZpbHRlckxvZ2ljVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjljOTZkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVW5pY29kZUZpbHRlckxvZ2ljVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjExIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvQXR0aWMvVW5pY29kZUZpbHRlckxvZ2ljVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA4LzI4IDE2OjQ1OjE5ICQgCisgKiAkUmV2aXNpb246IDEuNiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQ7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBqYXZhLnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBAdGVzdAorICogQHN1bW1hcnkgVW5pY29kZUZpbHRlckxvZ2ljIHRlc3QgCisgKi8KK3B1YmxpYyBjbGFzcyBVbmljb2RlRmlsdGVyTG9naWNUZXN0IGV4dGVuZHMgVGVzdEZtd2sgeworCisgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFVuaWNvZGVGaWx0ZXJMb2dpY1Rlc3QoKS5ydW4oYXJncyk7CisgICB9CisKKworICAgVW5pY29kZUZpbHRlciBGaWx0ZXIxPW5ldyBVbmljb2RlRmlsdGVyKCkgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhpbnQgYykgeworICAgICAgICAgICAgaWYoYyA9PSAweDAwNjEgfHwgYyA9PSAweDAwNDEgfHwgYyA9PSAweDAwNjMgfHwgYyA9PSAweDAwNDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9QYXR0ZXJuKGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUpIHsKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzSW5kZXhWYWx1ZShpbnQgdikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyB2b2lkIGFkZE1hdGNoU2V0VG8oVW5pY29kZVNldCB0b1VuaW9uVG8pIHt9CisgICB9OworICAgVW5pY29kZUZpbHRlciBGaWx0ZXIyPW5ldyBVbmljb2RlRmlsdGVyKCkgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhpbnQgYykgeworICAgICAgICAgICAgaWYoYyA9PSAweDAwNzkgfHwgYyA9PSAweDAwNTkgfHwgYyA9PSAweDAwN2EgfHwgYyA9PSAweDAwNWEgIHx8IGMgPT0gMHgwMDYxIHx8IGMgPT0gMHgwMDYzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgU3RyaW5nIHRvUGF0dGVybihib29sZWFuIGVzY2FwZVVucHJpbnRhYmxlKSB7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlc0luZGV4VmFsdWUoaW50IHYpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCBhZGRNYXRjaFNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKSB7fQorICAgfTsKKworICAgcHVibGljIHZvaWQgVGVzdEFsbEZpbHRlcnMoKSB7CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDEgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiQW55LUhleCIpOworICAgICAgICBTdHJpbmcgc291cmNlPSJhYmNkQUJDRHl6WVoiOworCisgICAgICAgIC8vc2FuaXR5IHRlc3Rpbmcgd2lodG91dCBhbnkgZmlsdGVyCisgICAgICAgIGV4cGVjdCh0MSwgIndpdGhvdXQgYW55IEZpbHRlciIsIHNvdXJjZSwgIlx1MDA2MVx1MDA2Mlx1MDA2M1x1MDA2NFx1MDA0MVx1MDA0Mlx1MDA0M1x1MDA0NFx1MDA3OVx1MDA3QVx1MDA1OVx1MDA1QSIpOworICAgICAgICAvL3Nhbml0eSB0ZXN0aW5nIHVzaW5nIHRoZSBGaWx0ZXIxKGFjQUMpIGFuZCBGaWx0ZXIyKGFjeXpZWikKKyAgICAgICAgdDEuc2V0RmlsdGVyKEZpbHRlcjEpOworICAgICAgICBleHBlY3QodDEsICJ3aXRoIEZpbHRlcihhY0FDKSIsIHNvdXJjZSwgImFcdTAwNjJjXHUwMDY0QVx1MDA0MkNcdTAwNDRcdTAwNzlcdTAwN0FcdTAwNTlcdTAwNUEiKTsKKyAgICAgICAgdDEuc2V0RmlsdGVyKEZpbHRlcjIpOworICAgICAgICBleHBlY3QodDEsICJ3aXRoIEZpbHRlcjIoYWN5ellaKSIsIHNvdXJjZSwgImFcdTAwNjJjXHUwMDY0XHUwMDQxXHUwMDQyXHUwMDQzXHUwMDQ0eXpZWiIpOworCisgICAgICAgIFVuaWNvZGVGaWx0ZXIgZmlsdGVyTk9UPVVuaWNvZGVGaWx0ZXJMb2dpYy5ub3QoRmlsdGVyMSk7CisgICAgICAgIFVuaWNvZGVGaWx0ZXIgZmlsdGVyQU5EPVVuaWNvZGVGaWx0ZXJMb2dpYy5hbmQoRmlsdGVyMSwgRmlsdGVyMik7CisgICAgICAgIFVuaWNvZGVGaWx0ZXIgZmlsdGVyT1I9VW5pY29kZUZpbHRlckxvZ2ljLm9yKEZpbHRlcjEsIEZpbHRlcjIpOworCisgICAgICAgIGNoZWNrTk9UKHQxLCBGaWx0ZXIxLCAiRmlsdGVyKGFjQUMpIiwgIHNvdXJjZSwgIlx1MDA2MWJcdTAwNjNkXHUwMDQxQlx1MDA0M0R5ellaIik7CisgICAgICAgIGNoZWNrTk9UKHQxLCBGaWx0ZXIyLCAiRmlsdGVyKGFjeXpZWikiLCBzb3VyY2UsICJcdTAwNjFiXHUwMDYzZEFCQ0RcdTAwNzlcdTAwN0FcdTAwNTlcdTAwNUEiKTsKKyAgICAgICAvLyBjaGVja05PVCh0MSwgbnVsbCwgIk5VTEwiLCBzb3VyY2UsICJhYmNkQUJDRHl6WVoiKTsKKyAgICAgICAgY2hlY2tOT1QodDEsIGZpbHRlck5PVCwgIkZpbHRlck5PVChGaXRsZXIxKGFjQUMpKSIsIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICJhXHUwMDYyY1x1MDA2NEFcdTAwNDJDXHUwMDQ0XHUwMDc5XHUwMDdBXHUwMDU5XHUwMDVBIik7CisgICAgICAgIGNoZWNrTk9UKHQxLCBmaWx0ZXJBTkQsICJGaWx0ZXJBTkQoRml0bGVyMShhY0FDKSwgIEZpbHRlcjIoYWN5ellaKSkiLCAgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgICJcdTAwNjFiXHUwMDYzZFx1MDA0MUJcdTAwNDNEXHUwMDc5XHUwMDdBXHUwMDU5XHUwMDVBIik7CisgICAgICAgIGNoZWNrTk9UKHQxLCBmaWx0ZXJPUiwgIkZpbHRlck9SKEZpdGxlcjEoYWNBQyksICBGaWx0ZXIyKGFjeXpZWikpIiwgIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICJcdTAwNjFiXHUwMDYzZEFCQ0R5ellaIik7CisKKyAgICAgICAgY2hlY2tBTkQodDEsIEZpbHRlcjEsIEZpbHRlcjIsICJGaWx0ZXIxKGEsYyxBLEMpLCBGaWx0ZXIyKGFjeXpZWikiLCAgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0QVx1MDA0MkNcdTAwNDR5ellaIik7CisgICAgICAgIGNoZWNrQU5EKHQxLCBGaWx0ZXIyLCBGaWx0ZXIxLCAiRmlsdGVyMihhY3l6WVopLCBGaWx0ZXIxKGEsYyxBLEMpLCAiLCBzb3VyY2UsIAorICAgICAgICAgICAgICAgICAiYVx1MDA2MmNcdTAwNjRBXHUwMDQyQ1x1MDA0NHl6WVoiKTsKKyAgICAgICAgY2hlY2tBTkQodDEsIEZpbHRlcjEsIG51bGwsICJGaWx0ZXIxKGEsYyxBLEMpLCBOVUxMIiwgIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICJhXHUwMDYyY1x1MDA2NEFcdTAwNDJDXHUwMDQ0XHUwMDc5XHUwMDdBXHUwMDU5XHUwMDVBIik7CisgICAgICAgIGNoZWNrQU5EKHQxLCBudWxsLCBGaWx0ZXIyLCAiTlVMTCwgRmlsdGVyMihhY3l6WVopIiwgICBzb3VyY2UsIAorICAgICAgICAgICAgICAgICAiYVx1MDA2MmNcdTAwNjRcdTAwNDFcdTAwNDJcdTAwNDNcdTAwNDR5ellaIik7CisgICAgICAgIGNoZWNrQU5EKHQxLCBudWxsLCBudWxsLCAiTlVMTCwgTlVMTCIsICBzb3VyY2UsIAorICAgICAgICAgICAgICAgICAiXHUwMDYxXHUwMDYyXHUwMDYzXHUwMDY0XHUwMDQxXHUwMDQyXHUwMDQzXHUwMDQ0XHUwMDc5XHUwMDdBXHUwMDU5XHUwMDVBIik7CisgICAgICAgIGNoZWNrQU5EKHQxLCBmaWx0ZXJBTkQsIG51bGwsICJGaWx0ZXJBTkQoRml0bGVyMShhY0FDKSwgIEZpbHRlcjIoYWN5ellaKSksIE5VTEwiLCAgc291cmNlLAorICAgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0QVx1MDA0MkNcdTAwNDR5ellaIik7CisgICAgICAgIGNoZWNrQU5EKHQxLCBmaWx0ZXJBTkQsIEZpbHRlcjEsICJGaWx0ZXJBTkQoRml0bGVyMShhY0FDKSwgIEZpbHRlcjIoYWN5ellaKSksIEZpbHRlcjEoYWNBQykiLCBzb3VyY2UsIAorICAgICAgICAgICAgICAgICAiYVx1MDA2MmNcdTAwNjRBXHUwMDQyQ1x1MDA0NHl6WVoiKTsKKyAgICAgICAgY2hlY2tBTkQodDEsIGZpbHRlckFORCwgRmlsdGVyMiwgIkZpbHRlckFORChGaXRsZXIxKGFjQUMpLCAgRmlsdGVyMihhY3l6WVopKSwgRmlsdGVyMihhY3l6WVopIiwgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0QVx1MDA0MkNcdTAwNDR5ellaIik7CisgICAgICAgIGNoZWNrQU5EKHQxLCBGaWx0ZXIxLCBmaWx0ZXJBTkQsICJGaWx0ZXIxKGFjQUMpLCBGaWx0ZXJBTkQoRmlsdGVyMShhY0FDKSwgRml0bGVyMShhY0FDKSkiLCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAiYVx1MDA2MmNcdTAwNjRBXHUwMDQyQ1x1MDA0NHl6WVoiKTsKKyAgICAgICAgY2hlY2tBTkQodDEsIEZpbHRlcjIsIGZpbHRlckFORCwgIkZpbHRlcjIoYWN5ellaKSwgRmlsdGVyQU5EKEZpbHRlcjEoYWNBQyksIEZpdGxlcjEoYWNBQykpIiwgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0QVx1MDA0MkNcdTAwNDR5ellaIik7CisgICAgICAgIGNoZWNrQU5EKHQxLCBmaWx0ZXJPUiwgbnVsbCwgIkZpbHRlck9SKEZpdGxlcjEoYWNBQyksICBGaWx0ZXIyKGFjeXpZWikpLCBOVUxMIiwgIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICJhXHUwMDYyY1x1MDA2NFx1MDA0MVx1MDA0Mlx1MDA0M1x1MDA0NFx1MDA3OVx1MDA3QVx1MDA1OVx1MDA1QSIpOworICAgICAgICBjaGVja0FORCh0MSwgZmlsdGVyT1IsIEZpbHRlcjEsICJGaWx0ZXJPUihGaXRsZXIxKGFjQUMpLCAgRmlsdGVyMihhY3l6WVopKSwgRml0bGVyMShhY0FDKSIsIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0QVx1MDA0MkNcdTAwNDRcdTAwNzlcdTAwN0FcdTAwNTlcdTAwNUEiKTsKKyAgICAgICAgY2hlY2tBTkQodDEsIGZpbHRlck9SLCBGaWx0ZXIyLCAiRmlsdGVyT1IoRml0bGVyMShhY0FDKSwgIEZpbHRlcjIoYWN5ellaKSksIEZpdGxlcjIoYWN5ellaKSIsIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICJhXHUwMDYyY1x1MDA2NFx1MDA0MVx1MDA0Mlx1MDA0M1x1MDA0NHl6WVoiKTsKKyAgICAgICAgY2hlY2tBTkQodDEsIGZpbHRlck5PVCwgRmlsdGVyMSwgIkZpbHRlck5PVChGaXRsZXIxKGFjQUMpKSwgRml0bGVyMShhY0FDKSIsIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICJhYmNkQUJDRHl6WVoiKTsKKyAgICAgICAgY2hlY2tBTkQodDEsIEZpbHRlcjEsIGZpbHRlck5PVCwgIkZpdGxlcjEoYWNBQyksIEZpbHRlck5PVChGaXRsZXIxKGFjQUMpKSIsIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICJhYmNkQUJDRHl6WVoiKTsKKyAgICAgICAgY2hlY2tBTkQodDEsIGZpbHRlck5PVCwgRmlsdGVyMiwgIkZpbHRlck5PVChGaXRsZXIxKGFjQUMpKSwgRml0bGVyMihhY3l6WVopIiwgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgImFiY2RcdTAwNDFCXHUwMDQzRHl6WVoiKTsKKyAgICAgICAgY2hlY2tBTkQodDEsIEZpbHRlcjIsIGZpbHRlck5PVCwgIkZpdGxlcjIoYWN5ellaKSwgRmlsdGVyTk9UKEZpdGxlcjEoYWNBQykpIiwgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgImFiY2RcdTAwNDFCXHUwMDQzRHl6WVoiKTsKKworICAgICAgICBjaGVja09SKHQxLCBGaWx0ZXIxLCBGaWx0ZXIyLCAiRmlsdGVyMShhLGMsQSxDKSwgRmlsdGVyMihhY3l6WVopIiwgIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAiYVx1MDA2MmNcdTAwNjRcdTAwNDFcdTAwNDJcdTAwNDNcdTAwNDRcdTAwNzlcdTAwN0FcdTAwNTlcdTAwNUEiKTsKKyAgICAgICAgY2hlY2tPUih0MSwgRmlsdGVyMiwgRmlsdGVyMSwgIkZpbHRlcjIoYWN5ellaKSwgRmlsdGVyMShhLGMsQSxDKSIsIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0XHUwMDQxXHUwMDQyXHUwMDQzXHUwMDQ0XHUwMDc5XHUwMDdBXHUwMDU5XHUwMDVBIik7CisgICAgICAgIGNoZWNrT1IodDEsIEZpbHRlcjEsIG51bGwsICJGaWx0ZXIxKGEsYyxBLEMpLCBOVUxMIiwgc291cmNlLCAKKyAgICAgICAgICAgICAgICAiYVx1MDA2MmNcdTAwNjRBXHUwMDQyQ1x1MDA0NFx1MDA3OVx1MDA3QVx1MDA1OVx1MDA1QSIpOworICAgICAgICBjaGVja09SKHQxLCBudWxsLCBGaWx0ZXIyLCAiTlVMTCwgRmlsdGVyMihhY3l6WVopIiwgIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0XHUwMDQxXHUwMDQyXHUwMDQzXHUwMDQ0eXpZWiIpOworICAgICAgICBjaGVja09SKHQxLCBudWxsLCBudWxsLCAiTlVMTCwgTlVMTCIsICAgc291cmNlLCAKKyAgICAgICAgICAgICAgICAiXHUwMDYxXHUwMDYyXHUwMDYzXHUwMDY0XHUwMDQxXHUwMDQyXHUwMDQzXHUwMDQ0XHUwMDc5XHUwMDdBXHUwMDU5XHUwMDVBIik7CisgICAgICAgIGNoZWNrT1IodDEsIGZpbHRlckFORCwgbnVsbCwgIkZpbHRlckFORChGaXRsZXIxKGFjQUMpLCAgRmlsdGVyMihhY3l6WVopKSwgTlVMTCIsIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0QVx1MDA0MkNcdTAwNDR5ellaIik7CisgICAgICAgIGNoZWNrT1IodDEsIGZpbHRlckFORCwgRmlsdGVyMSwgIkZpbHRlckFORChGaXRsZXIxKGFjQUMpLCAgRmlsdGVyMihhY3l6WVopKSwgRmlsdGVyMShhY0FDKSIsIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0QVx1MDA0MkNcdTAwNDRcdTAwNzlcdTAwN0FcdTAwNTlcdTAwNUEiKTsKKyAgICAgICAgY2hlY2tPUih0MSwgZmlsdGVyQU5ELCBGaWx0ZXIyLCAiRmlsdGVyQU5EKEZpdGxlcjEoYWNBQyksICBGaWx0ZXIyKGFjeXpZWikpLCBGaWx0ZXIyKGFjeXpZWikiLCBzb3VyY2UsIAorICAgICAgICAgICAgICAgICJhXHUwMDYyY1x1MDA2NFx1MDA0MVx1MDA0Mlx1MDA0M1x1MDA0NHl6WVoiKTsKKyAgICAgICAgY2hlY2tPUih0MSwgRmlsdGVyMSwgZmlsdGVyQU5ELCAiRmlsdGVyMShhY0FDKSwgRmlsdGVyQU5EKEZpbHRlcjEoYWNBQyksIEZpdGxlcjEoYWNBQykpIiwgc291cmNlLCAKKyAgICAgICAgICAgICAgICAiYVx1MDA2MmNcdTAwNjRBXHUwMDQyQ1x1MDA0NFx1MDA3OVx1MDA3QVx1MDA1OVx1MDA1QSIpOworICAgICAgICBjaGVja09SKHQxLCBGaWx0ZXIyLCBmaWx0ZXJBTkQsICJGaWx0ZXIyKGFjeXpZWiksIEZpbHRlckFORChGaWx0ZXIxKGFjQUMpLCBGaXRsZXIxKGFjQUMpKSIsIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgImFcdTAwNjJjXHUwMDY0XHUwMDQxXHUwMDQyXHUwMDQzXHUwMDQ0eXpZWiIpOworICAgICAgICBjaGVja09SKHQxLCBmaWx0ZXJOT1QsIEZpbHRlcjEsICJGaWx0ZXJOT1QoRml0bGVyMShhY0FDKSksIEZpdGxlcjEoYWNBQykiLCBzb3VyY2UsIAorICAgICAgICAgICAgICAgICJcdTAwNjFcdTAwNjJcdTAwNjNcdTAwNjRcdTAwNDFcdTAwNDJcdTAwNDNcdTAwNDRcdTAwNzlcdTAwN0FcdTAwNTlcdTAwNUEiKTsKKyAgICAgICAgY2hlY2tPUih0MSwgRmlsdGVyMSwgZmlsdGVyTk9ULCAiRml0bGVyMShhY0FDKSwgRmlsdGVyTk9UKEZpdGxlcjEoYWNBQykpIiwgIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgIlx1MDA2MVx1MDA2Mlx1MDA2M1x1MDA2NFx1MDA0MVx1MDA0Mlx1MDA0M1x1MDA0NFx1MDA3OVx1MDA3QVx1MDA1OVx1MDA1QSIpOworICAgICAgICBjaGVja09SKHQxLCBmaWx0ZXJOT1QsIEZpbHRlcjIsICJGaWx0ZXJOT1QoRml0bGVyMShhY0FDKSksIEZpdGxlcjEoYWN5ellaKSIsICBzb3VyY2UsIAorICAgICAgICAgICAgICAgICJcdTAwNjFcdTAwNjJcdTAwNjNcdTAwNjRcdTAwNDFcdTAwNDJcdTAwNDNcdTAwNDR5ellaIik7CisgICAgICAgIGNoZWNrT1IodDEsIEZpbHRlcjIsIGZpbHRlck5PVCwgIkZpdGxlcjIoYWN5ellaKSwgRmlsdGVyTk9UKEZpdGxlcjEoYWNBQykpIiwgc291cmNlLCAKKyAgICAgICAgICAgICAgICAiXHUwMDYxXHUwMDYyXHUwMDYzXHUwMDY0XHUwMDQxXHUwMDQyXHUwMDQzXHUwMDQ0eXpZWiIpOworCisgIAorfQorICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIFN1cHBvcnQgbWV0aG9kcworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgdm9pZCBjaGVja09SKFRyYW5zbGl0ZXJhdG9yIHQsCisgICAgICAgICAgICAgICAgICAgVW5pY29kZUZpbHRlciBmMSwgCisgICAgICAgICAgICAgICAgICAgVW5pY29kZUZpbHRlciBmMiwgCisgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWQpeworICAgICAgICBVbmljb2RlRmlsdGVyIGZpbHRlcj1Vbmljb2RlRmlsdGVyTG9naWMub3IoZjEsIGYyKTsKKyAgICAgICAgdC5zZXRGaWx0ZXIoZmlsdGVyKTsKKyAgICAgICAgZXhwZWN0KHQsICJ3aXRoIEZpbHRlck9SKCIgKyBtZXNzYWdlICsgIikiLCBzb3VyY2UsIGV4cGVjdGVkKTsKKworICAgIH0KKyAgICB2b2lkIGNoZWNrQU5EKFRyYW5zbGl0ZXJhdG9yIHQsCisgICAgICAgICAgICAgICAgICAgVW5pY29kZUZpbHRlciBmMSwgCisgICAgICAgICAgICAgICAgICAgVW5pY29kZUZpbHRlciBmMiwgCisgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWQpeworICAgICAgICBVbmljb2RlRmlsdGVyIGZpbHRlcj1Vbmljb2RlRmlsdGVyTG9naWMuYW5kKGYxLCBmMik7CisgICAgICAgIHQuc2V0RmlsdGVyKGZpbHRlcik7CisgICAgICAgIGV4cGVjdCh0LCAid2l0aCBGaWx0ZXJBTkQoIiArIG1lc3NhZ2UgKyAiKSIsIHNvdXJjZSwgZXhwZWN0ZWQpOworCisgICAgfQorICAgIHZvaWQgY2hlY2tOT1QoVHJhbnNsaXRlcmF0b3IgdCwKKyAgICAgICAgICAgICAgICAgICBVbmljb2RlRmlsdGVyIGYxLCAKKyAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlLAorICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZCl7CisgICAgICAgIFVuaWNvZGVGaWx0ZXIgZmlsdGVyPVVuaWNvZGVGaWx0ZXJMb2dpYy5ub3QoZjEpOworICAgICAgICB0LnNldEZpbHRlcihmaWx0ZXIpOworICAgICAgICBleHBlY3QodCwgIndpdGggRmlsdGVyTk9UKCIgKyBtZXNzYWdlICsgIikiLCBzb3VyY2UsIGV4cGVjdGVkKTsKKworICAgIH0gIAorICAgIHZvaWQgZXhwZWN0KFRyYW5zbGl0ZXJhdG9yIHQsICBTdHJpbmcgbWVzc2FnZSwgIFN0cmluZyBzb3VyY2UsICBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgU3RyaW5nIHJzb3VyY2UgPSBzb3VyY2U7CisgICAgICAgIHQudHJhbnNsaXRlcmF0ZShyc291cmNlKTsKKyAgICAgICAgZXhwZWN0QXV4KHQuZ2V0SUQoKSArICI6UmVwbGFjZWFibGUgIiArIG1lc3NhZ2UsIHNvdXJjZSArICItPiIgKyByc291cmNlLCBleHBlY3RlZFJlc3VsdC5lcXVhbHMocnNvdXJjZSksIGV4cGVjdGVkUmVzdWx0KTsKKworICAgIH0KKyAgICB2b2lkIGV4cGVjdEF1eChTdHJpbmcgdGFnLCBTdHJpbmcgc3VtbWFyeSwgYm9vbGVhbiBwYXNzLCBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAgICAgaWYgKHBhc3MpIHsKKyAgICAgICAgICAgIGxvZ2xuKCIoIiArIHRhZysgIikgIiArIFV0aWxpdHkuZXNjYXBlKHN1bW1hcnkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAoIisgdGFnKyAiKSAiCisgICAgICAgICAgICAgICAgKyBVdGlsaXR5LmVzY2FwZShzdW1tYXJ5KQorICAgICAgICAgICAgICAgICsgIiwgZXhwZWN0ZWQgIiArIFV0aWxpdHkuZXNjYXBlKGV4cGVjdGVkUmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9CisKK30KKworCisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9Vbmljb2RlU2V0VGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L1VuaWNvZGVTZXRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWYyZDE2MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9Vbmljb2RlU2V0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI4MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L1VuaWNvZGVTZXRUZXN0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDQgMDA6MjU6NTIgJCAKKyAqICRSZXZpc2lvbjogMS4zOSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQ7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlNvcnRlZFNldFJlbGF0aW9uOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIEB0ZXN0CisgKiBAc3VtbWFyeSBHZW5lcmFsIHRlc3Qgb2YgVW5pY29kZVNldAorICovCitwdWJsaWMgY2xhc3MgVW5pY29kZVNldFRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIE5PVCA9ICIlJSUlIjsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgVW5pY29kZVNldFRlc3QoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCB0aGF0IHRvUGF0dGVybigpIHJvdW5kIHRyaXBzIHdpdGggc3ludGF4IGNoYXJhY3RlcnMgYW5kCisgICAgICogd2hpdGVzcGFjZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0VG9QYXR0ZXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgT1RIRVJfVE9QQVRURVJOX1RFU1RTLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjaGVja1BhdChPVEhFUl9UT1BBVFRFUk5fVEVTVFNbaV0sIG5ldyBVbmljb2RlU2V0KE9USEVSX1RPUEFUVEVSTl9URVNUU1tpXSkpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDB4MTBGRkZGOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoaSA8PSAweEZGICYmICFVQ2hhcmFjdGVyLmlzTGV0dGVyKGkpKSB8fCBVQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShpKSkgeworICAgICAgICAgICAgICAgIC8vIGNoZWNrIHZhcmlvdXMgY29tYmluYXRpb25zIHRvIG1ha2Ugc3VyZSB0aGV5IGFsbCB3b3JrLgorICAgICAgICAgICAgICAgIGlmIChpICE9IDAgJiYgIXRvUGF0dGVybkF1eChpLCBpKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKCF0b1BhdHRlcm5BdXgoMCwgaSkpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghdG9QYXR0ZXJuQXV4KGksIDB4RkZGRikpIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJpbmdbXSBPVEhFUl9UT1BBVFRFUk5fVEVTVFMgPSB7CisgICAgICAgICAgICAgICAgIltbOmxhdGluOl0mWzpncmVlazpdXSIsIAorICAgICAgICAgICAgICAgICJbWzpsYXRpbjpdLVs6Z3JlZWs6XV0iLAorICAgICAgICAgICAgICAgICJbOm5vbnNwYWNpbmcgbWFyazpdIgorICAgIH07CisgICAgCisgICAgCisgICAgcHVibGljIGJvb2xlYW4gdG9QYXR0ZXJuQXV4KGludCBzdGFydCwgaW50IGVuZCkgeworICAgICAgICAvLyB1c2UgSW50ZWdlci50b1N0cmluZyBiZWNhdXNlIFV0aWxpdHkuaGV4IGRvZXNuJ3QgaGFuZGxlIGludHMKKyAgICAgICAgU3RyaW5nIHNvdXJjZSA9ICIweCIgKyBJbnRlZ2VyLnRvU3RyaW5nKHN0YXJ0LDE2KS50b1VwcGVyQ2FzZSgpOworICAgICAgICBpZiAoc3RhcnQgIT0gZW5kKSBzb3VyY2UgKz0gIi4uMHgiICsgSW50ZWdlci50b1N0cmluZyhlbmQsMTYpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIFVuaWNvZGVTZXQgdGVzdFNldCA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgIHRlc3RTZXQuYWRkKHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gY2hlY2tQYXQoc291cmNlLCB0ZXN0U2V0KTsKKyAgICB9CisgICAgCisgICAgYm9vbGVhbiBjaGVja1BhdCAoU3RyaW5nIHNvdXJjZSwgVW5pY29kZVNldCB0ZXN0U2V0KSB7CisgICAgICAgIFN0cmluZyBwYXQgPSAiIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIFdoYXQgd2Ugd2FudCB0byBtYWtlIHN1cmUgb2YgaXMgdGhhdCBhIHBhdHRlcm4gZ2VuZXJhdGVkCisgICAgICAgICAgICAvLyBieSB0b1BhdHRlcm4oKSwgd2l0aCBvciB3aXRob3V0IGVzY2FwZWQgdW5wcmludGFibGVzLCBjYW4KKyAgICAgICAgICAgIC8vIGJlIHBhc3NlZCBiYWNrIGludG8gdGhlIFVuaWNvZGVTZXQgY29uc3RydWN0b3IuCisgICAgICAgICAgICBTdHJpbmcgcGF0MCA9IHRlc3RTZXQudG9QYXR0ZXJuKHRydWUpOworICAgICAgICAgICAgaWYgKCFjaGVja1BhdChzb3VyY2UgKyAiIChlc2NhcGVkKSIsIHRlc3RTZXQsIHBhdDApKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vU3RyaW5nIHBhdDEgPSB1bmVzY2FwZUxlbmllbnRseShwYXQwKTsKKyAgICAgICAgICAgIC8vaWYgKCFjaGVja1BhdChzb3VyY2UgKyAiIChpbiBjb2RlKSIsIHRlc3RTZXQsIHBhdDEpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyBwYXQyID0gdGVzdFNldC50b1BhdHRlcm4oZmFsc2UpOworICAgICAgICAgICAgaWYgKCFjaGVja1BhdChzb3VyY2UsIHRlc3RTZXQsIHBhdDIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vU3RyaW5nIHBhdDMgPSB1bmVzY2FwZUxlbmllbnRseShwYXQyKTsKKyAgICAgICAgICAgIC8vaWYgKCFjaGVja1BhdChzb3VyY2UgKyAiIChpbiBjb2RlKSIsIHRlc3RTZXQsIHBhdDMpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vbG9nbG4oc291cmNlICsgIiA9PiAiICsgcGF0MCArICIsICIgKyBwYXQxICsgIiwgIiArIHBhdDIgKyAiLCAiICsgcGF0Myk7CisgICAgICAgICAgICBsb2dsbihzb3VyY2UgKyAiID0+ICIgKyBwYXQwICsgIiwgIiArIHBhdDIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkVYQ0VQVElPTiBpbiB0b1BhdHRlcm46ICIgKyBzb3VyY2UgKyAiID0+ICIgKyBwYXQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sZWFuIGNoZWNrUGF0IChTdHJpbmcgc291cmNlLCBVbmljb2RlU2V0IHRlc3RTZXQsIFN0cmluZyBwYXQpIHsKKyAgICAgICAgVW5pY29kZVNldCB0ZXN0U2V0MiA9IG5ldyBVbmljb2RlU2V0KHBhdCk7CisgICAgICAgIGlmICghdGVzdFNldDIuZXF1YWxzKHRlc3RTZXQpKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbCB0b1BhdHRlcm46ICIgKyBzb3VyY2UgKyAiID0+ICIgKyBwYXQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBOT1RFOiBjb3BpZWQgdGhlIGZvbGxvd2luZyBmcm9tIFV0aWxpdHkuIFRoZXJlIG91Z2h0IHRvIGJlIGEgdmVyc2lvbiBpbiB0aGVyZSB3aXRoIGEgZmxhZworICAgIC8vIHRoYXQgZG9lcyB0aGUgSmF2YSBzdHVmZgorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgaW50IHVuZXNjYXBlQXQoU3RyaW5nIHMsIGludFtdIG9mZnNldDE2KSB7CisgICAgICAgIGludCBjOworICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgaW50IG4gPSAwOworICAgICAgICBpbnQgbWluRGlnID0gMDsKKyAgICAgICAgaW50IG1heERpZyA9IDA7CisgICAgICAgIGludCBiaXRzUGVyRGlnaXQgPSA0OworICAgICAgICBpbnQgZGlnOworICAgICAgICBpbnQgaTsKKworICAgICAgICAvKiBDaGVjayB0aGF0IG9mZnNldCBpcyBpbiByYW5nZSAqLworICAgICAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0MTZbMF07CisgICAgICAgIGludCBsZW5ndGggPSBzLmxlbmd0aCgpOworICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICAvKiBGZXRjaCBmaXJzdCBVQ2hhciBhZnRlciAnXFwnICovCisgICAgICAgIGMgPSBVVEYxNi5jaGFyQXQocywgb2Zmc2V0KTsKKyAgICAgICAgb2Zmc2V0ICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKworICAgICAgICAvKiBDb252ZXJ0IGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgIG1pbkRpZyA9IG1heERpZyA9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyoKKyAgICAgICAgY2FzZSAnVSc6CisgICAgICAgICAgICBtaW5EaWcgPSBtYXhEaWcgPSA4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgbWluRGlnID0gMTsKKyAgICAgICAgICAgIG1heERpZyA9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRpZyA9IFVDaGFyYWN0ZXIuZGlnaXQoYywgOCk7CisgICAgICAgICAgICBpZiAoZGlnID49IDApIHsKKyAgICAgICAgICAgICAgICBtaW5EaWcgPSAxOworICAgICAgICAgICAgICAgIG1heERpZyA9IDM7CisgICAgICAgICAgICAgICAgbiA9IDE7IC8qIEFscmVhZHkgaGF2ZSBmaXJzdCBvY3RhbCBkaWdpdCAqLworICAgICAgICAgICAgICAgIGJpdHNQZXJEaWdpdCA9IDM7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGlnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1pbkRpZyAhPSAwKSB7CisgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuZ3RoICYmIG4gPCBtYXhEaWcpIHsKKyAgICAgICAgICAgICAgICAvLyBURU1QT1JBUlkKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBSZXN0b3JlIHRoZSBjaGFyMzItYmFzZWQgY29kZSB3aGVuIFVDaGFyYWN0ZXIuZGlnaXQKKyAgICAgICAgICAgICAgICAvLyBpcyB3b3JraW5nIChCdWcgNjYpLgorCisgICAgICAgICAgICAgICAgLy9jID0gVVRGMTYuY2hhckF0KHMsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgLy9kaWcgPSBVQ2hhcmFjdGVyLmRpZ2l0KGMsIChiaXRzUGVyRGlnaXQgPT0gMykgPyA4IDogMTYpOworICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChvZmZzZXQpOworICAgICAgICAgICAgICAgIGRpZyA9IENoYXJhY3Rlci5kaWdpdCgoY2hhciljLCAoYml0c1BlckRpZ2l0ID09IDMpID8gOCA6IDE2KTsKKyAgICAgICAgICAgICAgICBpZiAoZGlnIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCBiaXRzUGVyRGlnaXQpIHwgZGlnOworICAgICAgICAgICAgICAgIC8vb2Zmc2V0ICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKyAgICAgICAgICAgICAgICArK29mZnNldDsKKyAgICAgICAgICAgICAgICArK247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobiA8IG1pbkRpZykgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldDE2WzBdID0gb2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENvbnZlcnQgQy1zdHlsZSBlc2NhcGVzIGluIHRhYmxlICovCisgICAgICAgIGZvciAoaT0wOyBpPFVORVNDQVBFX01BUC5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgIGlmIChjID09IFVORVNDQVBFX01BUFtpXSkgeworICAgICAgICAgICAgICAgIG9mZnNldDE2WzBdID0gb2Zmc2V0OworICAgICAgICAgICAgICAgIHJldHVybiBVTkVTQ0FQRV9NQVBbaSsxXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA8IFVORVNDQVBFX01BUFtpXSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogSWYgbm8gc3BlY2lhbCBmb3JtcyBhcmUgcmVjb2duaXplZCwgdGhlbiBjb25zaWRlcgorICAgICAgICAgKiB0aGUgYmFja3NsYXNoIHRvIGdlbmVyaWNhbGx5IGVzY2FwZSB0aGUgbmV4dCBjaGFyYWN0ZXIuICovCisgICAgICAgIG9mZnNldDE2WzBdID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisKKyAgICAvKiBUaGlzIG1hcCBtdXN0IGJlIGluIEFTQ0VORElORyBPUkRFUiBPRiBUSEUgRVNDQVBFIENPREUgKi8KKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBjaGFyW10gVU5FU0NBUEVfTUFQID0geworICAgICAgICAvKiIgICAweDIyLCAweDIyICovCisgICAgICAgIC8qJyAgIDB4MjcsIDB4MjcgKi8KKyAgICAgICAgLyo/ICAgMHgzRiwgMHgzRiAqLworICAgICAgICAvKlwgICAweDVDLCAweDVDICovCisgICAgICAgIC8qYSovIDB4NjEsIDB4MDcsCisgICAgICAgIC8qYiovIDB4NjIsIDB4MDgsCisgICAgICAgIC8qZiovIDB4NjYsIDB4MGMsCisgICAgICAgIC8qbiovIDB4NkUsIDB4MGEsCisgICAgICAgIC8qciovIDB4NzIsIDB4MGQsCisgICAgICAgIC8qdCovIDB4NzQsIDB4MDksCisgICAgICAgIC8qdiovIDB4NzYsIDB4MGIKKyAgICB9OworCisgICAgLyoqCisgICAgICogQ29udmVydCBhbGwgZXNjYXBlcyBpbiBhIGdpdmVuIHN0cmluZyB1c2luZyB1bmVzY2FwZUF0KCkuCisgICAgICogTGVhdmUgaW52YWxpZCBlc2NhcGUgc2VxdWVuY2VzIHVuY2hhbmdlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB1bmVzY2FwZUxlbmllbnRseShTdHJpbmcgcykgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpbnRbXSBwb3MgPSBuZXcgaW50WzFdOworICAgICAgICBmb3IgKGludCBpPTA7IGk8cy5sZW5ndGgoKTsgKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBzLmNoYXJBdChpKyspOworICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIHBvc1swXSA9IGk7CisgICAgICAgICAgICAgICAgaW50IGUgPSB1bmVzY2FwZUF0KHMsIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKGUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgVVRGMTYuYXBwZW5kKGJ1ZiwgZSk7CisgICAgICAgICAgICAgICAgICAgIGkgPSBwb3NbMF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0UGF0dGVybnMoKSB7CisgICAgICAgIFVuaWNvZGVTZXQgc2V0ID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgZXhwZWN0UGF0dGVybihzZXQsICJbW2EtbV0mW2Qtel0mW2steV1dIiwgICJrbSIpOworICAgICAgICBleHBlY3RQYXR0ZXJuKHNldCwgIltbYS16XS1bbS15XS1bZC1yXV0iLCAgImFjenoiKTsKKyAgICAgICAgZXhwZWN0UGF0dGVybihzZXQsICJbYVxcLXpdIiwgICItLWFhenoiKTsKKyAgICAgICAgZXhwZWN0UGF0dGVybihzZXQsICJbLWF6XSIsICAiLS1hYXp6Iik7CisgICAgICAgIGV4cGVjdFBhdHRlcm4oc2V0LCAiW2F6LV0iLCAgIi0tYWF6eiIpOworICAgICAgICBleHBlY3RQYXR0ZXJuKHNldCwgIltbW2Etel0tW2FlaW91XWldXSIsICJiZGZucHR2eiIpOworCisgICAgICAgIC8vIFRocm93IGluIGEgdGVzdCBvZiBjb21wbGVtZW50CisgICAgICAgIHNldC5jb21wbGVtZW50KCk7CisgICAgICAgIFN0cmluZyBleHAgPSAnXHUwMDAwJyArICJhZWVvb3V1IiArIChjaGFyKSgneicrMSkgKyAnXHVGRkZGJzsKKyAgICAgICAgZXhwZWN0UGFpcnMoc2V0LCBleHApOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDYXRlZ29yaWVzKCkgeworICAgICAgICBpbnQgZmFpbHVyZXMgPSAwOworICAgICAgICBVbmljb2RlU2V0IHNldCA9IG5ldyBVbmljb2RlU2V0KCJbOkx1Ol0iKTsKKyAgICAgICAgZXhwZWN0Q29udGFpbm1lbnQoc2V0LCAiQUJDIiwgImFiYyIpOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBnZW5lcmF0aW9uIG9mIEwgZG9lc24ndCBwb2xsdXRlIGNhY2hlZCBMdSBzZXQKKyAgICAgICAgLy8gRmlyc3QgZ2VuZXJhdGUgTCwgdGhlbiBMdQorICAgICAgICAvLyBub3QgdXNlZCBpbnQgVE9QID0gMHgyMDA7IC8vIERvbid0IG5lZWQgdG8gZ28gb3ZlciB0aGUgd2hvbGUgcmFuZ2U6CisgICAgICAgIHNldCA9IG5ldyBVbmljb2RlU2V0KCJbOkw6XSIpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8MHgyMDA7ICsraSkgeworICAgICAgICAgICAgYm9vbGVhbiBsID0gVUNoYXJhY3Rlci5pc0xldHRlcihpKTsKKyAgICAgICAgICAgIGlmIChsICE9IHNldC5jb250YWlucygoY2hhcilpKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBMIGNvbnRhaW5zICIgKyAoY2hhcilpICsgIiA9ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICBzZXQuY29udGFpbnMoKGNoYXIpaSkpOworICAgICAgICAgICAgICAgIGlmICgrK2ZhaWx1cmVzID09IDEwKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNldCA9IG5ldyBVbmljb2RlU2V0KCJbOkx1Ol0iKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDB4MjAwOyArK2kpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gbHUgPSAoVUNoYXJhY3Rlci5nZXRUeXBlKGkpID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VUFBFUkNBU0VfTEVUVEVSKTsKKyAgICAgICAgICAgIGlmIChsdSAhPSBzZXQuY29udGFpbnMoKGNoYXIpaSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogTHUgY29udGFpbnMgIiArIChjaGFyKWkgKyAiID0gIiArIAorICAgICAgICAgICAgICAgICAgICAgIHNldC5jb250YWlucygoY2hhcilpKSk7CisgICAgICAgICAgICAgICAgaWYgKCsrZmFpbHVyZXMgPT0gMjApIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdEFkZFJlbW92ZSgpIHsKKyAgICAgICAgVW5pY29kZVNldCBzZXQgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICBzZXQuYWRkKCdhJywgJ3onKTsKKyAgICAgICAgZXhwZWN0UGFpcnMoc2V0LCAiYXoiKTsKKyAgICAgICAgc2V0LnJlbW92ZSgnbScsICdwJyk7CisgICAgICAgIGV4cGVjdFBhaXJzKHNldCwgImFscXoiKTsKKyAgICAgICAgc2V0LnJlbW92ZSgnZScsICdnJyk7CisgICAgICAgIGV4cGVjdFBhaXJzKHNldCwgImFkaGxxeiIpOworICAgICAgICBzZXQucmVtb3ZlKCdkJywgJ2knKTsKKyAgICAgICAgZXhwZWN0UGFpcnMoc2V0LCAiYWNqbHF6Iik7CisgICAgICAgIHNldC5yZW1vdmUoJ2MnLCAncicpOworICAgICAgICBleHBlY3RQYWlycyhzZXQsICJhYnN6Iik7CisgICAgICAgIHNldC5hZGQoJ2YnLCAncScpOworICAgICAgICBleHBlY3RQYWlycyhzZXQsICJhYmZxc3oiKTsKKyAgICAgICAgc2V0LnJlbW92ZSgnYScsICdnJyk7CisgICAgICAgIGV4cGVjdFBhaXJzKHNldCwgImhxc3oiKTsKKyAgICAgICAgc2V0LnJlbW92ZSgnYScsICd6Jyk7CisgICAgICAgIGV4cGVjdFBhaXJzKHNldCwgIiIpOworCisgICAgICAgIC8vIFRyeSByZW1vdmluZyBhbiBlbnRpcmUgc2V0IGZyb20gYW5vdGhlciBzZXQKKyAgICAgICAgZXhwZWN0UGF0dGVybihzZXQsICJbYy14XSIsICJjeCIpOworICAgICAgICBVbmljb2RlU2V0IHNldDIgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICBleHBlY3RQYXR0ZXJuKHNldDIsICJbZi1reS16YS1iY1t2d11dIiwgImFjZmt2d3l6Iik7CisgICAgICAgIHNldC5yZW1vdmVBbGwoc2V0Mik7CisgICAgICAgIGV4cGVjdFBhaXJzKHNldCwgImRlbHV4eCIpOworCisgICAgICAgIC8vIFRyeSBhZGRpbmcgYW4gZW50aXJlIHNldCB0byBhbm90aGVyIHNldAorICAgICAgICBleHBlY3RQYXR0ZXJuKHNldCwgIltqYWNraWVtY2xlYW5dIiwgImFhY2NlZWluIik7CisgICAgICAgIGV4cGVjdFBhdHRlcm4oc2V0MiwgIltoaXRvc2hpbmFtZWthdGFqYW1lc2FuZGVyc29uXSIsICJhYWRlaGttb3J0Iik7CisgICAgICAgIHNldC5hZGRBbGwoc2V0Mik7CisgICAgICAgIGV4cGVjdFBhaXJzKHNldCwgImFhY2Vob3J0Iik7CisKKyAgICAgICAgLy8gVGVzdCBjb21tdXRhdGl2aXR5CisgICAgICAgIGV4cGVjdFBhdHRlcm4oc2V0LCAiW2hpdG9zaGluYW1la2F0YWphbWVzYW5kZXJzb25dIiwgImFhZGVoa21vcnQiKTsKKyAgICAgICAgZXhwZWN0UGF0dGVybihzZXQyLCAiW2phY2tpZW1jbGVhbl0iLCAiYWFjY2VlaW4iKTsKKyAgICAgICAgc2V0LmFkZEFsbChzZXQyKTsKKyAgICAgICAgZXhwZWN0UGFpcnMoc2V0LCAiYWFjZWhvcnQiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYWtlIHN1cmUgbWluaW1hbCByZXByZXNlbnRhdGlvbiBpcyBtYWludGFpbmVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RNaW5pbWFsUmVwKCkgeworICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSB0aG9yb3VnaGx5IHRlc3RlZCBieSBjaGVja0Nhbm9uaWNhbFJlcCgpCisgICAgICAgIC8vIHJ1biBhZ2FpbnN0IHRoZSBleGhhdXN0aXZlIG9wZXJhdGlvbiByZXN1bHRzLiAgVXNlIHRoZSBjb2RlCisgICAgICAgIC8vIGhlcmUgZm9yIGRlYnVnZ2luZyBzcGVjaWZpYyBzcG90IHByb2JsZW1zLgorICAgICAgIAorICAgICAgICAvLyAxIG92ZXJsYXAgYWdhaW5zdCAyCisgICAgICAgIFVuaWNvZGVTZXQgc2V0ID0gbmV3IFVuaWNvZGVTZXQoIltoLWttLXFdIik7CisgICAgICAgIFVuaWNvZGVTZXQgc2V0MiA9IG5ldyBVbmljb2RlU2V0KCJbaS1vXSIpOworICAgICAgICBzZXQuYWRkQWxsKHNldDIpOworICAgICAgICBleHBlY3RQYWlycyhzZXQsICJocSIpOworICAgICAgICAvLyByaWdodAorICAgICAgICBzZXQuYXBwbHlQYXR0ZXJuKCJbYS1tXSIpOworICAgICAgICBzZXQyLmFwcGx5UGF0dGVybigiW2Utb10iKTsKKyAgICAgICAgc2V0LmFkZEFsbChzZXQyKTsKKyAgICAgICAgZXhwZWN0UGFpcnMoc2V0LCAiYW8iKTsKKyAgICAgICAgLy8gbGVmdAorICAgICAgICBzZXQuYXBwbHlQYXR0ZXJuKCJbZS1vXSIpOworICAgICAgICBzZXQyLmFwcGx5UGF0dGVybigiW2EtbV0iKTsKKyAgICAgICAgc2V0LmFkZEFsbChzZXQyKTsKKyAgICAgICAgZXhwZWN0UGFpcnMoc2V0LCAiYW8iKTsKKyAgICAgICAgLy8gMSBvdmVybGFwIGFnYWluc3QgMworICAgICAgICBzZXQuYXBwbHlQYXR0ZXJuKCJbYS1lZy1tby13XSIpOworICAgICAgICBzZXQyLmFwcGx5UGF0dGVybigiW2QtcV0iKTsKKyAgICAgICAgc2V0LmFkZEFsbChzZXQyKTsKKyAgICAgICAgZXhwZWN0UGFpcnMoc2V0LCAiYXciKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0QVBJKCkgeworICAgICAgICAvLyBkZWZhdWx0IGN0CisgICAgICAgIFVuaWNvZGVTZXQgc2V0ID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgaWYgKCFzZXQuaXNFbXB0eSgpIHx8IHNldC5nZXRSYW5nZUNvdW50KCkgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUwsIHNldCBzaG91bGQgYmUgZW1wdHkgYnV0IGlzbid0OiAiICsKKyAgICAgICAgICAgICAgICAgIHNldCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBjbGVhcigpLCBpc0VtcHR5KCkKKyAgICAgICAgc2V0LmFkZCgnYScpOworICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUwsIHNldCBzaG91bGRuJ3QgYmUgZW1wdHkgYnV0IGlzOiAiICsKKyAgICAgICAgICAgICAgICAgIHNldCk7CisgICAgICAgIH0KKyAgICAgICAgc2V0LmNsZWFyKCk7CisgICAgICAgIGlmICghc2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUwsIHNldCBzaG91bGQgYmUgZW1wdHkgYnV0IGlzbid0OiAiICsKKyAgICAgICAgICAgICAgICAgIHNldCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBzaXplKCkKKyAgICAgICAgc2V0LmNsZWFyKCk7CisgICAgICAgIGlmIChzZXQuc2l6ZSgpICE9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMLCBzaXplIHNob3VsZCBiZSAwLCBidXQgaXMgIiArIHNldC5zaXplKCkgKworICAgICAgICAgICAgICAgICAgIjogIiArIHNldCk7CisgICAgICAgIH0KKyAgICAgICAgc2V0LmFkZCgnYScpOworICAgICAgICBpZiAoc2V0LnNpemUoKSAhPSAxKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCwgc2l6ZSBzaG91bGQgYmUgMSwgYnV0IGlzICIgKyBzZXQuc2l6ZSgpICsKKyAgICAgICAgICAgICAgICAgICI6ICIgKyBzZXQpOworICAgICAgICB9CisgICAgICAgIHNldC5hZGQoJzEnLCAnOScpOworICAgICAgICBpZiAoc2V0LnNpemUoKSAhPSAxMCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUwsIHNpemUgc2hvdWxkIGJlIDEwLCBidXQgaXMgIiArIHNldC5zaXplKCkgKworICAgICAgICAgICAgICAgICAgIjogIiArIHNldCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBjb250YWlucyhmaXJzdCwgbGFzdCkKKyAgICAgICAgc2V0LmNsZWFyKCk7CisgICAgICAgIHNldC5hcHBseVBhdHRlcm4oIltBLVkgMS04IGItZCBsLXldIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpPHNldC5nZXRSYW5nZUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgaW50IGEgPSBzZXQuZ2V0UmFuZ2VTdGFydChpKTsKKyAgICAgICAgICAgIGludCBiID0gc2V0LmdldFJhbmdlRW5kKGkpOworICAgICAgICAgICAgaWYgKCFzZXQuY29udGFpbnMoYSwgYikpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTCwgc2hvdWxkIGNvbnRhaW4gIiArIChjaGFyKWEgKyAnLScgKyAoY2hhciliICsKKyAgICAgICAgICAgICAgICAgICAgICAiIGJ1dCBkb2Vzbid0OiAiICsgc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZXQuY29udGFpbnMoKGNoYXIpKGEtMSksIGIpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUwsIHNob3VsZG4ndCBjb250YWluICIgKworICAgICAgICAgICAgICAgICAgICAgIChjaGFyKShhLTEpICsgJy0nICsgKGNoYXIpYiArCisgICAgICAgICAgICAgICAgICAgICAgIiBidXQgZG9lczogIiArIHNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKGEsIChjaGFyKShiKzEpKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMLCBzaG91bGRuJ3QgY29udGFpbiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAoY2hhcilhICsgJy0nICsgKGNoYXIpKGIrMSkgKworICAgICAgICAgICAgICAgICAgICAgICIgYnV0IGRvZXM6ICIgKyBzZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUG9ydGVkIEludmVyc2lvbkxpc3QgdGVzdC4KKyAgICAgICAgVW5pY29kZVNldCBhID0gbmV3IFVuaWNvZGVTZXQoKGNoYXIpMywoY2hhcikxMCk7CisgICAgICAgIFVuaWNvZGVTZXQgYiA9IG5ldyBVbmljb2RlU2V0KChjaGFyKTcsKGNoYXIpMTUpOworICAgICAgICBVbmljb2RlU2V0IGMgPSBuZXcgVW5pY29kZVNldCgpOworCisgICAgICAgIGxvZ2xuKCJhIFszLTEwXTogIiArIGEpOworICAgICAgICBsb2dsbigiYiBbNy0xNV06ICIgKyBiKTsKKyAgICAgICAgYy5zZXQoYSk7IGMuYWRkQWxsKGIpOworICAgICAgICBVbmljb2RlU2V0IGV4cCA9IG5ldyBVbmljb2RlU2V0KChjaGFyKTMsKGNoYXIpMTUpOworICAgICAgICBpZiAoYy5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgbG9nbG4oImMuc2V0KGEpLmFkZChiKTogIiArIGMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGMuc2V0KGEpLmFkZChiKSA9ICIgKyBjICsgIiwgZXhwZWN0ICIgKyBleHApOworICAgICAgICB9CisgICAgICAgIGMuY29tcGxlbWVudCgpOworICAgICAgICBleHAuc2V0KChjaGFyKTAsIChjaGFyKTIpOworICAgICAgICBleHAuYWRkKChjaGFyKTE2LCBVbmljb2RlU2V0Lk1BWF9WQUxVRSk7CisgICAgICAgIGlmIChjLmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBsb2dsbigiYy5jb21wbGVtZW50KCk6ICIgKyBjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKFV0aWxpdHkuZXNjYXBlKCJGQUlMOiBjLmNvbXBsZW1lbnQoKSA9ICIgKyBjICsgIiwgZXhwZWN0ICIgKyBleHApKTsKKyAgICAgICAgfQorICAgICAgICBjLmNvbXBsZW1lbnQoKTsKKyAgICAgICAgZXhwLnNldCgoY2hhcikzLCAoY2hhcikxNSk7CisgICAgICAgIGlmIChjLmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBsb2dsbigiYy5jb21wbGVtZW50KCk6ICIgKyBjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjLmNvbXBsZW1lbnQoKSA9ICIgKyBjICsgIiwgZXhwZWN0ICIgKyBleHApOworICAgICAgICB9CisgICAgICAgIGMuc2V0KGEpOyBjLmNvbXBsZW1lbnRBbGwoYik7CisgICAgICAgIGV4cC5zZXQoKGNoYXIpMywoY2hhcik2KTsKKyAgICAgICAgZXhwLmFkZCgoY2hhcikxMSwoY2hhcikgMTUpOworICAgICAgICBpZiAoYy5lcXVhbHMoZXhwKSkgeworICAgICAgICAgICAgbG9nbG4oImMuc2V0KGEpLmNvbXBsZW1lbnQoYik6ICIgKyBjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBjLnNldChhKS5jb21wbGVtZW50KGIpID0gIiArIGMgKyAiLCBleHBlY3QgIiArIGV4cCk7CisgICAgICAgIH0KKworICAgICAgICBleHAuc2V0KGMpOworICAgICAgICBjID0gYml0c1RvU2V0KHNldFRvQml0cyhjKSk7CisgICAgICAgIGlmIChjLmVxdWFscyhleHApKSB7CisgICAgICAgICAgICBsb2dsbigiYml0c1RvU2V0KHNldFRvQml0cyhjKSk6ICIgKyBjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBiaXRzVG9TZXQoc2V0VG9CaXRzKGMpKSA9ICIgKyBjICsgIiwgZXhwZWN0ICIgKyBleHApOworICAgICAgICB9IAorCisgICAgICAgIC8vIEFkZGl0aW9uYWwgdGVzdHMgZm9yIGNvdmVyYWdlIEpCIzIxMTgKKyAgICAgICAgLy9Vbmljb2RlU2V0Ojpjb21wbGVtZW50KGNsYXNzIFVuaWNvZGVTdHJpbmcgY29uc3QgJikKKyAgICAgICAgLy9Vbmljb2RlU2V0Ojpjb21wbGVtZW50QWxsKGNsYXNzIFVuaWNvZGVTdHJpbmcgY29uc3QgJikKKyAgICAgICAgLy9Vbmljb2RlU2V0Ojpjb250YWluc05vbmUoY2xhc3MgVW5pY29kZVNldCBjb25zdCAmKQorICAgICAgICAvL1VuaWNvZGVTZXQ6OmNvbnRhaW5zTm9uZShsb25nLGxvbmcpCisgICAgICAgIC8vVW5pY29kZVNldDo6Y29udGFpbnNTb21lKGNsYXNzIFVuaWNvZGVTZXQgY29uc3QgJikKKyAgICAgICAgLy9Vbmljb2RlU2V0Ojpjb250YWluc1NvbWUobG9uZyxsb25nKQorICAgICAgICAvL1VuaWNvZGVTZXQ6OnJlbW92ZUFsbChjbGFzcyBVbmljb2RlU3RyaW5nIGNvbnN0ICYpCisgICAgICAgIC8vVW5pY29kZVNldDo6cmV0YWluKGxvbmcpCisgICAgICAgIC8vVW5pY29kZVNldDo6cmV0YWluQWxsKGNsYXNzIFVuaWNvZGVTdHJpbmcgY29uc3QgJikKKyAgICAgICAgLy9Vbmljb2RlU2V0OjpzZXJpYWxpemUodW5zaWduZWQgc2hvcnQgKixsb25nLGVudW0gVUVycm9yQ29kZSAmKQorICAgICAgICAvL1VuaWNvZGVTZXRJdGVyYXRvcjo6Z2V0U3RyaW5nKHZvaWQpCisgICAgICAgIHNldC5jbGVhcigpOworICAgICAgICBzZXQuY29tcGxlbWVudCgiYWIiKTsKKyAgICAgICAgZXhwLmFwcGx5UGF0dGVybigiW3thYn1dIik7CisgICAgICAgIGlmICghc2V0LmVxdWFscyhleHApKSB7IGVycmxuKCJGQUlMOiBjb21wbGVtZW50KFwiYWJcIikiKTsgcmV0dXJuOyB9CisKKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIGlzZXQgPSBuZXcgVW5pY29kZVNldEl0ZXJhdG9yKHNldCk7CisgICAgICAgIGlmICghaXNldC5uZXh0KCkgfHwgaXNldC5jb2RlcG9pbnQgIT0gVW5pY29kZVNldEl0ZXJhdG9yLklTX1NUUklORykgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IFVuaWNvZGVTZXRJdGVyYXRvci5uZXh0L0lTX1NUUklORyIpOworICAgICAgICB9IGVsc2UgaWYgKCFpc2V0LnN0cmluZy5lcXVhbHMoImFiIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBVbmljb2RlU2V0SXRlcmF0b3Iuc3RyaW5nIik7CisgICAgICAgIH0KKworICAgICAgICBzZXQuYWRkKChjaGFyKTB4NjEsIChjaGFyKTB4N0EpOworICAgICAgICBzZXQuY29tcGxlbWVudEFsbCgiYWxhbiIpOworICAgICAgICBleHAuYXBwbHlQYXR0ZXJuKCJbe2FifWIta21vLXpdIik7CisgICAgICAgIGlmICghc2V0LmVxdWFscyhleHApKSB7IGVycmxuKCJGQUlMOiBjb21wbGVtZW50QWxsKFwiYWxhblwiKSIpOyByZXR1cm47IH0KKworICAgICAgICBleHAuYXBwbHlQYXR0ZXJuKCJbYS16XSIpOworICAgICAgICBpZiAoc2V0LmNvbnRhaW5zTm9uZShleHApKSB7IGVycmxuKCJGQUlMOiBjb250YWluc05vbmUoVW5pY29kZVNldCkiKTsgfQorICAgICAgICBpZiAoIXNldC5jb250YWluc1NvbWUoZXhwKSkgeyBlcnJsbigiRkFJTDogY29udGFpbnNTb21lKFVuaWNvZGVTZXQpIik7IH0KKyAgICAgICAgZXhwLmFwcGx5UGF0dGVybigiW2Fsbl0iKTsKKyAgICAgICAgaWYgKCFzZXQuY29udGFpbnNOb25lKGV4cCkpIHsgZXJybG4oIkZBSUw6IGNvbnRhaW5zTm9uZShVbmljb2RlU2V0KSIpOyB9CisgICAgICAgIGlmIChzZXQuY29udGFpbnNTb21lKGV4cCkpIHsgZXJybG4oIkZBSUw6IGNvbnRhaW5zU29tZShVbmljb2RlU2V0KSIpOyB9CisgICAgICAgIAorICAgICAgICBpZiAoc2V0LmNvbnRhaW5zTm9uZSgoY2hhcikweDYxLCAoY2hhcikweDdBKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNvbnRhaW5zTm9uZShjaGFyLCBjaGFyKSIpOworICAgICAgICB9CisgICAgICAgIGlmICghc2V0LmNvbnRhaW5zU29tZSgoY2hhcikweDYxLCAoY2hhcikweDdBKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNvbnRhaW5zU29tZShjaGFyLCBjaGFyKSIpOworICAgICAgICB9CisgICAgICAgIGlmICghc2V0LmNvbnRhaW5zTm9uZSgoY2hhcikweDQxLCAoY2hhcikweDVBKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNvbnRhaW5zTm9uZShjaGFyLCBjaGFyKSIpOworICAgICAgICB9CisgICAgICAgIGlmIChzZXQuY29udGFpbnNTb21lKChjaGFyKTB4NDEsIChjaGFyKTB4NUEpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogY29udGFpbnNTb21lKGNoYXIsIGNoYXIpIik7CisgICAgICAgIH0KKworICAgICAgICBzZXQucmVtb3ZlQWxsKCJsaXUiKTsKKyAgICAgICAgZXhwLmFwcGx5UGF0dGVybigiW3thYn1iLWhqLWttby10di16XSIpOworICAgICAgICBpZiAoIXNldC5lcXVhbHMoZXhwKSkgeyBlcnJsbigiRkFJTDogcmVtb3ZlQWxsKFwibGl1XCIpIik7IHJldHVybjsgfQorCisgICAgICAgIHNldC5yZXRhaW5BbGwoInN0YXIiKTsKKyAgICAgICAgZXhwLmFwcGx5UGF0dGVybigiW3JzdF0iKTsKKyAgICAgICAgaWYgKCFzZXQuZXF1YWxzKGV4cCkpIHsgZXJybG4oIkZBSUw6IHJldGFpbkFsbChcInN0YXJcIikiKTsgcmV0dXJuOyB9CisKKyAgICAgICAgc2V0LnJldGFpbigoY2hhcikweDczKTsKKyAgICAgICAgZXhwLmFwcGx5UGF0dGVybigiW3NdIik7CisgICAgICAgIGlmICghc2V0LmVxdWFscyhleHApKSB7IGVycmxuKCJGQUlMOiByZXRhaW4oJ3MnKSIpOyByZXR1cm47IH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdFN0cmluZ3MoKSB7CisvLyAgICAgICAgT2JqZWN0W11bXSB0ZXN0TGlzdCA9IHsKKy8vICAgICAgICAgICAge0lfRVFVQUxTLCAgVW5pY29kZVNldC5mcm9tQWxsKCJhYmMiKSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVuaWNvZGVTZXQoIlthLWNdIil9LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAKKy8vICAgICAgICAgICAge0lfRVFVQUxTLCAgVW5pY29kZVNldC5mcm9tKCJjaCIpLmFkZCgnYScsJ3onKS5hZGQoImxsIiksCisvLyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVbmljb2RlU2V0KCJbe2xsfXtjaH1hLXpdIil9LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAKKy8vICAgICAgICAgICAge0lfRVFVQUxTLCAgVW5pY29kZVNldC5mcm9tKCJhYn1jIiksICAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVuaWNvZGVTZXQoIlt7YWJcXH1jfV0iKX0sCisvLyAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gICAgICAgICAgICB7SV9FUVVBTFMsICBuZXcgVW5pY29kZVNldCgnYScsJ3onKS5hZGQoJ0EnLCAnWicpLnJldGFpbignTScsJ20nKS5jb21wbGVtZW50KCdYJyksIAorLy8gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVW5pY29kZVNldCgiW1thLXpBLVpdJltNLW1dLVtYXV0iKX0sCisvLyAgICAgICAgfTsKKy8vICAgICAgICAKKy8vICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RMaXN0Lmxlbmd0aDsgKytpKSB7CisvLyAgICAgICAgICAgIGV4cGVjdFJlbGF0aW9uKHRlc3RMaXN0W2ldWzBdLCB0ZXN0TGlzdFtpXVsxXSwgdGVzdExpc3RbaV1bMl0sICIoIiArIGkgKyAiKSIpOworLy8gICAgICAgIH0gICAgICAgIAorCisgICAgICAgIFVuaWNvZGVTZXRbXVtdIHRlc3RMaXN0ID0geworICAgICAgICAgICAge1VuaWNvZGVTZXQuZnJvbUFsbCgiYWJjIiksCisgICAgICAgICAgICAgbmV3IFVuaWNvZGVTZXQoIlthLWNdIil9LAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB7VW5pY29kZVNldC5mcm9tKCJjaCIpLmFkZCgnYScsJ3onKS5hZGQoImxsIiksCisgICAgICAgICAgICAgbmV3IFVuaWNvZGVTZXQoIlt7bGx9e2NofWEtel0iKX0sCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHtVbmljb2RlU2V0LmZyb20oImFifWMiKSwgIAorICAgICAgICAgICAgIG5ldyBVbmljb2RlU2V0KCJbe2FiXFx9Y31dIil9LAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB7bmV3IFVuaWNvZGVTZXQoJ2EnLCd6JykuYWRkKCdBJywgJ1onKS5yZXRhaW4oJ00nLCdtJykuY29tcGxlbWVudCgnWCcpLCAKKyAgICAgICAgICAgICBuZXcgVW5pY29kZVNldCgiW1thLXpBLVpdJltNLW1dLVtYXV0iKX0sCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXRlc3RMaXN0W2ldWzBdLmVxdWFscyh0ZXN0TGlzdFtpXVsxXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogc2V0cyB1bmVxdWFsOyBzZWUgc291cmNlIGNvZGUgKCIgKyBpICsgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3QgcGF0dGVybiBiZWhhdmlvciBvZiBtdWx0aWNoYXJhY3RlciBzdHJpbmdzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RTdHJpbmdQYXR0ZXJucygpIHsKKyAgICAgICAgVW5pY29kZVNldCBzID0gbmV3IFVuaWNvZGVTZXQoIlthLXoge2FhfSB7YWJ9XSIpOworICAgICAgICBleHBlY3RUb1BhdHRlcm4ocywgIlthLXp7YWF9e2FifV0iLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsiYWEiLCAiYWIiLCBOT1QsICJhYyJ9KTsKKyAgICAgICAgcy5hZGQoImFjIik7CisgICAgICAgIGV4cGVjdFRvUGF0dGVybihzLCAiW2EtenthYX17YWJ9e2FjfV0iLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsiYWEiLCAiYWIiLCAiYWMiLCBOT1QsICJ4eSJ9KTsKKworICAgICAgICBzLmFwcGx5UGF0dGVybigiW2EteiB7XFx7bH0ge3JcXH19XSIpOworICAgICAgICBleHBlY3RUb1BhdHRlcm4ocywgIlthLXp7XFx7bH17clxcfX1dIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IntsIiwgInJ9IiwgTk9ULCAieHkifSk7CisgICAgICAgIHMuYWRkKCJbXSIpOworICAgICAgICBleHBlY3RUb1BhdHRlcm4ocywgIlthLXp7XFxbXFxdfXtyXFx9fXtcXHtsfV0iLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsie2wiLCAicn0iLCAiW10iLCBOT1QsICJ4eSJ9KTsKKworICAgICAgICBzLmFwcGx5UGF0dGVybigiW2EteiB7XHU0RTAxXHU0RTAyfXtcXG5cXHJ9XSIpOworICAgICAgICBleHBlY3RUb1BhdHRlcm4ocywgIlthLXp7XFx1NEUwMVxcdTRFMDJ9e1xcblxccn1dIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7Ilx1NEUwMVx1NEUwMiIsICJcblxyIn0pOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBJbnRlZ2VyIAorICAgICAgICBJX0FOWSA9IG5ldyBJbnRlZ2VyKFNvcnRlZFNldFJlbGF0aW9uLkFOWSksCisgICAgICAgIElfQ09OVEFJTlMgPSBuZXcgSW50ZWdlcihTb3J0ZWRTZXRSZWxhdGlvbi5DT05UQUlOUyksCisgICAgICAgIElfRElTSk9JTlQgPSBuZXcgSW50ZWdlcihTb3J0ZWRTZXRSZWxhdGlvbi5ESVNKT0lOVCksCisgICAgICAgIElfTk9fQiA9IG5ldyBJbnRlZ2VyKFNvcnRlZFNldFJlbGF0aW9uLk5PX0IpLAorICAgICAgICBJX0lTQ09OVEFJTkVEID0gbmV3IEludGVnZXIoU29ydGVkU2V0UmVsYXRpb24uSVNDT05UQUlORUQpLAorICAgICAgICBJX0VRVUFMUyA9IG5ldyBJbnRlZ2VyKFNvcnRlZFNldFJlbGF0aW9uLkVRVUFMUyksCisgICAgICAgIElfTk9fQSA9IG5ldyBJbnRlZ2VyKFNvcnRlZFNldFJlbGF0aW9uLk5PX0EpLAorICAgICAgICBJX05PTkUgPSBuZXcgSW50ZWdlcihTb3J0ZWRTZXRSZWxhdGlvbi5OT05FKTsKKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0U2V0UmVsYXRpb24oKSB7CisgICAgICAgIAorICAgICAgICBTdHJpbmdbXSBjaG9pY2VzID0geyJhIiwgImIiLCAiY2QiLCAiZWYifTsKKyAgICAgICAgaW50IGxpbWl0ID0gMSA8PCBjaG9pY2VzLmxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIFNvcnRlZFNldCBpc2V0ID0gbmV3IFRyZWVTZXQoKTsKKyAgICAgICAgU29ydGVkU2V0IGpzZXQgPSBuZXcgVHJlZVNldCgpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW1pdDsgKytpKSB7CisgICAgICAgICAgICBwaWNrKGksIGNob2ljZXMsIGlzZXQpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaW1pdDsgKytqKSB7CisgICAgICAgICAgICAgICAgcGljayhqLCBjaG9pY2VzLCBqc2V0KTsKKyAgICAgICAgICAgICAgICBjaGVja1NldFJlbGF0aW9uKGlzZXQsIGpzZXQsICIoIiArIGkgKyAiKSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RTZXRTcGVlZCgpIHsKKyAgICAgICAgLy8gc2tpcCB1bmxlc3MgdmVyYm9zZQorICAgICAgICBpZiAoIWlzVmVyYm9zZSgpKSByZXR1cm47CisgICAgICAgIAorICAgICAgICBTZXRTcGVlZDIoMTAwKTsKKyAgICAgICAgU2V0U3BlZWQyKDEwMDApOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBTZXRTcGVlZDIoaW50IHNpemUpIHsKKyAgICAgICAgCisgICAgICAgIFNvcnRlZFNldCBpc2V0ID0gbmV3IFRyZWVTZXQoKTsKKyAgICAgICAgU29ydGVkU2V0IGpzZXQgPSBuZXcgVHJlZVNldCgpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplKjI7IGkgKz0gMikgeyAvLyBvbmx5IGV2ZW4gdmFsdWVzCisgICAgICAgICAgICBpc2V0LmFkZChuZXcgSW50ZWdlcihpKSk7CisgICAgICAgICAgICBqc2V0LmFkZChuZXcgSW50ZWdlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBpdGVyYXRpb25zID0gMTAwMDAwMCAvIHNpemU7CisgICAgICAgIAorICAgICAgICBsb2dsbigiVGltaW5nIGNvbXBhcmlzb24gb2YgSmF2YSB2cyBVdGlsaXR5Iik7CisgICAgICAgIGxvZ2xuKCJGb3IgYWJvdXQgIiArIHNpemUgKyAiIG9iamVjdHMgdGhhdCBhcmUgYWxtb3N0IGFsbCB0aGUgc2FtZS4iKTsKKyAgICAgICAgCisgICAgICAgIENoZWNrU3BlZWQoaXNldCwganNldCwgIndoZW4gYSA9IGIiLCBpdGVyYXRpb25zKTsKKyAgICAgICAgCisgICAgICAgIGlzZXQuYWRkKG5ldyBJbnRlZ2VyKHNpemUgKyAxKSk7ICAgIC8vIGFkZCBvZGQgdmFsdWUgaW4gbWlkZGxlCisgICAgICAgIAorICAgICAgICBDaGVja1NwZWVkKGlzZXQsIGpzZXQsICJ3aGVuIGEgY29udGFpbnMgYiIsIGl0ZXJhdGlvbnMpOyAgICAgICAgCisgICAgICAgIENoZWNrU3BlZWQoanNldCwgaXNldCwgIndoZW4gYiBjb250YWlucyBhIiwgaXRlcmF0aW9ucyk7CisgICAgICAgIAorICAgICAgICBqc2V0LmFkZChuZXcgSW50ZWdlcihzaXplIC0gMSkpOyAgICAvLyBhZGQgZGlmZmVyZW50IG9kZCB2YWx1ZSBpbiBtaWRkbGUKKyAgICAgICAgCisgICAgICAgIENoZWNrU3BlZWQoanNldCwgaXNldCwgIndoZW4gYSwgYiBhcmUgZGlzam9pbnQiLCBpdGVyYXRpb25zKTsgICAgICAgIAorICAgIH0KKyAgICAKKyAgICB2b2lkIENoZWNrU3BlZWQoU29ydGVkU2V0IGlzZXQsIFNvcnRlZFNldCBqc2V0LCBTdHJpbmcgbWVzc2FnZSwgaW50IGl0ZXJhdGlvbnMpIHsKKyAgICAgICAgQ2hlY2tTcGVlZDIoaXNldCwganNldCwgbWVzc2FnZSwgaXRlcmF0aW9ucyk7CisgICAgICAgIENoZWNrU3BlZWQzKGlzZXQsIGpzZXQsIG1lc3NhZ2UsIGl0ZXJhdGlvbnMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIENoZWNrU3BlZWQyKFNvcnRlZFNldCBpc2V0LCBTb3J0ZWRTZXQganNldCwgU3RyaW5nIG1lc3NhZ2UsIGludCBpdGVyYXRpb25zKSB7CisgICAgICAgIGJvb2xlYW4geDsKKyAgICAgICAgYm9vbGVhbiB5OworICAgICAgICAKKyAgICAgICAgLy8gbWFrZSBzdXJlIGNvZGUgaXMgbG9hZGVkOgorICAgICAgICB4ID0gaXNldC5jb250YWluc0FsbChqc2V0KTsKKyAgICAgICAgeSA9IFNvcnRlZFNldFJlbGF0aW9uLmhhc1JlbGF0aW9uKGlzZXQsIFNvcnRlZFNldFJlbGF0aW9uLkNPTlRBSU5TLCBqc2V0KTsKKyAgICAgICAgaWYgKHggIT0geSkgZXJybG4oIkZBSUwgY29udGFpbnMgY29tcGFyaXNvbiIpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgKytpKSB7CisgICAgICAgICAgICB4IHw9IGlzZXQuY29udGFpbnNBbGwoanNldCk7CisgICAgICAgIH0KKyAgICAgICAgZG91YmxlIG1pZGRsZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7ICsraSkgeworICAgICAgICAgICAgeSB8PSBTb3J0ZWRTZXRSZWxhdGlvbi5oYXNSZWxhdGlvbihpc2V0LCBTb3J0ZWRTZXRSZWxhdGlvbi5DT05UQUlOUywganNldCk7CisgICAgICAgIH0KKyAgICAgICAgZG91YmxlIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIGp0aW1lID0gKG1pZGRsZSAtIHN0YXJ0KS9pdGVyYXRpb25zOworICAgICAgICBkb3VibGUgdXRpbWUgPSAoZW5kIC0gbWlkZGxlKS9pdGVyYXRpb25zOworICAgICAgICAKKyAgICAgICAgamF2YS50ZXh0Lk51bWJlckZvcm1hdCBuZiA9IGphdmEudGV4dC5OdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEluc3RhbmNlKCk7CisgICAgICAgIGxvZ2xuKCJUZXN0IGNvbnRhaW5zOiAiICsgbWVzc2FnZSArICI6IEphdmE6ICIgKyBqdGltZQorICAgICAgICAgICAgKyAiLCBVdGlsaXR5OiAiICsgdXRpbWUgKyAiLCB1Omo6ICIgKyBuZi5mb3JtYXQodXRpbWUvanRpbWUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBDaGVja1NwZWVkMyhTb3J0ZWRTZXQgaXNldCwgU29ydGVkU2V0IGpzZXQsIFN0cmluZyBtZXNzYWdlLCBpbnQgaXRlcmF0aW9ucykgeworICAgICAgICBib29sZWFuIHg7CisgICAgICAgIGJvb2xlYW4geTsKKyAgICAgICAgCisgICAgICAgIC8vIG1ha2Ugc3VyZSBjb2RlIGlzIGxvYWRlZDoKKyAgICAgICAgeCA9IGlzZXQuZXF1YWxzKGpzZXQpOworICAgICAgICB5ID0gU29ydGVkU2V0UmVsYXRpb24uaGFzUmVsYXRpb24oaXNldCwgU29ydGVkU2V0UmVsYXRpb24uRVFVQUxTLCBqc2V0KTsKKyAgICAgICAgaWYgKHggIT0geSkgZXJybG4oIkZBSUwgZXF1YWxpdHkgY29tcGFyaXNvbiIpOworCisgICAgICAgIAorICAgICAgICBkb3VibGUgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyArK2kpIHsKKyAgICAgICAgICAgIHggfD0gaXNldC5lcXVhbHMoanNldCk7CisgICAgICAgIH0KKyAgICAgICAgZG91YmxlIG1pZGRsZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7ICsraSkgeworICAgICAgICAgICAgeSB8PSBTb3J0ZWRTZXRSZWxhdGlvbi5oYXNSZWxhdGlvbihpc2V0LCBTb3J0ZWRTZXRSZWxhdGlvbi5FUVVBTFMsIGpzZXQpOworICAgICAgICB9CisgICAgICAgIGRvdWJsZSBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBqdGltZSA9IChtaWRkbGUgLSBzdGFydCkvaXRlcmF0aW9uczsKKyAgICAgICAgZG91YmxlIHV0aW1lID0gKGVuZCAtIG1pZGRsZSkvaXRlcmF0aW9uczsKKyAgICAgICAgCisgICAgICAgIGphdmEudGV4dC5OdW1iZXJGb3JtYXQgbmYgPSBqYXZhLnRleHQuTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZSgpOworICAgICAgICBsb2dsbigiVGVzdCBlcXVhbHM6ICAgIiArIG1lc3NhZ2UgKyAiOiBKYXZhOiAiICsganRpbWUKKyAgICAgICAgICAgICsgIiwgVXRpbGl0eTogIiArIHV0aW1lICsgIiwgdTpqOiAiICsgbmYuZm9ybWF0KHV0aW1lL2p0aW1lKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcGljayhpbnQgYml0cywgT2JqZWN0W10gZXhhbXBsZXMsIFNvcnRlZFNldCBvdXRwdXQpIHsKKyAgICAgICAgb3V0cHV0LmNsZWFyKCk7CisgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgMzI7ICsraykgeworICAgICAgICAgICAgaWYgKCgoMTw8aykgJiBiaXRzKSAhPSAwKSBvdXRwdXQuYWRkKGV4YW1wbGVzW2tdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFJFTEFUSU9OX05BTUUgPSB7CisgICAgICAgICJib3RoLWFyZS1udWxsIiwKKyAgICAgICAgImEtaXMtbnVsbCIsIAorICAgICAgICAiZXF1YWxzIiwgCisgICAgICAgICJpcy1jb250YWluZWQtaW4iLAorICAgICAgICAiYi1pcy1udWxsIiwKKyAgICAgICAgImlzLWRpc2pvaW50X3dpdGgiLAorICAgICAgICAiY29udGFpbnMiLCAKKyAgICAgICAgImFueSIsIH07CisgICAgICAgIAorICAgIGJvb2xlYW4gZHVtYkhhc1JlbGF0aW9uKENvbGxlY3Rpb24gQSwgaW50IGZpbHRlciwgQ29sbGVjdGlvbiBCKSB7CisgICAgICAgIENvbGxlY3Rpb24gYWIgPSBuZXcgVHJlZVNldChBKTsKKyAgICAgICAgYWIucmV0YWluQWxsKEIpOworICAgICAgICBpZiAoYWIuc2l6ZSgpID4gMCAmJiAoZmlsdGVyICYgU29ydGVkU2V0UmVsYXRpb24uQV9BTkRfQikgPT0gMCkgcmV0dXJuIGZhbHNlOyAKKyAgICAgICAgCisgICAgICAgIC8vIEEgLSBCIHNpemUgPT0gQS5zaXplIC0gQSZCLnNpemUKKyAgICAgICAgaWYgKEEuc2l6ZSgpID4gYWIuc2l6ZSgpICYmIChmaWx0ZXIgJiBTb3J0ZWRTZXRSZWxhdGlvbi5BX05PVF9CKSA9PSAwKSByZXR1cm4gZmFsc2U7IAorICAgICAgICAKKyAgICAgICAgLy8gQiAtIEEgc2l6ZSA9PSBCLnNpemUgLSBBJkIuc2l6ZQorICAgICAgICBpZiAoQi5zaXplKCkgPiBhYi5zaXplKCkgJiYgKGZpbHRlciAmIFNvcnRlZFNldFJlbGF0aW9uLkJfTk9UX0EpID09IDApIHJldHVybiBmYWxzZTsgCisKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gICAgCisgICAgCisgICAgdm9pZCBjaGVja1NldFJlbGF0aW9uKFNvcnRlZFNldCBhLCBTb3J0ZWRTZXQgYiwgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyArK2kpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbGVhbiBoYXNSZWxhdGlvbiA9IFNvcnRlZFNldFJlbGF0aW9uLmhhc1JlbGF0aW9uKGEsIGksIGIpOworICAgICAgICAgICAgYm9vbGVhbiBkdW1iSGFzUmVsYXRpb24gPSBkdW1iSGFzUmVsYXRpb24oYSwgaSwgYik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvZ2xuKG1lc3NhZ2UgKyAiICIgKyBoYXNSZWxhdGlvbiArICI6XHQiICsgYSArICJcdCIgKyBSRUxBVElPTl9OQU1FW2ldICsgIlx0IiArIGIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaGFzUmVsYXRpb24gIT0gZHVtYkhhc1JlbGF0aW9uKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6ICIgKyAKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArICIgIiArIGR1bWJIYXNSZWxhdGlvbiArICI6XHQiICsgYSArICJcdCIgKyBSRUxBVElPTl9OQU1FW2ldICsgIlx0IiArIGIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxvZ2xuKCIiKTsKKyAgICB9CisgICAgCisgICAvKioKKyAgICAqIFRlc3QgdGhlIFs6TGF0aW46XSBzeW50YXguCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0U2NyaXB0U2V0KCkgeworICAgICAgICBVbmljb2RlU2V0IHNldCA9IG5ldyBVbmljb2RlU2V0KCJbOkxhdGluOl0iKTsKKworICAgICAgICBleHBlY3RDb250YWlubWVudChzZXQsICJhQSIsIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJcXHUwMzkxXFx1MDNCMSIpKTsKKworICAgICAgICBVbmljb2RlU2V0IHNldDIgPSBuZXcgVW5pY29kZVNldCgiWzpHcmVlazpdIik7CisgICAgICAgIGV4cGVjdENvbnRhaW5tZW50KHNldDIsIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJcXHUwMzkxXFx1MDNCMSIpLCAiYUEiKTsKKyAgICAgICAgCisgICAgICAgIC8qIEppdHRlcmJ1ZyAxNDIzICovCisgICAgICAgIFVuaWNvZGVTZXQgc2V0MyA9IG5ldyBVbmljb2RlU2V0KCJbWzpDb21tb246XVs6SW5oZXJpdGVkOl1dIik7CisgICAgICAgIGV4cGVjdENvbnRhaW5tZW50KHNldDMsIENoYXJzVG9Vbmljb2RlU3RyaW5nKCJcXFUwMDAwMzA5OVxcVTAwMDFEMTY5XFx1MDAwMCIpLCAiYUEiKTsKKworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoZSBbOkxhdGluOl0gc3ludGF4LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RQcm9wZXJ0eVNldCgpIHsKKyAgICAgICAgU3RyaW5nW10gREFUQSA9IHsKKyAgICAgICAgICAgIC8vIFBhdHRlcm4sIENoYXJzIElOLCBDaGFycyBOT1QgaW4KKworICAgICAgICAgICAgIls6TGF0aW46XSIsCisgICAgICAgICAgICAiYUEiLAorICAgICAgICAgICAgIlx1MDM5MVx1MDNCMSIsCisKKyAgICAgICAgICAgICJbXFxwe0dyZWVrfV0iLAorICAgICAgICAgICAgIlx1MDM5MVx1MDNCMSIsCisgICAgICAgICAgICAiYUEiLAorCisgICAgICAgICAgICAiXFxQeyBHRU5FUkFMIENhdGVnb3J5ID0gdXBwZXIgY2FzZSBsZXR0ZXIgfSIsCisgICAgICAgICAgICAiYWJjIiwKKyAgICAgICAgICAgICJBQkMiLAorCisgICAgICAgICAgICAvLyBDb21iaW5pbmcgY2xhc3M6IEBzaW5jZSBJQ1UgMi4yCisgICAgICAgICAgICAvLyBDaGVjayBib3RoIHN5bWJvbGljIGFuZCBudW1lcmljCisgICAgICAgICAgICAiXFxwe2NjYz1OdWt0YX0iLAorICAgICAgICAgICAgIlx1MEFCQyIsCisgICAgICAgICAgICAiYWJjIiwKKworICAgICAgICAgICAgIlxccHtDYW5vbmljYWwgQ29tYmluaW5nIENsYXNzID0gMTF9IiwKKyAgICAgICAgICAgICJcdTA1QjEiLAorICAgICAgICAgICAgIlx1MDVCMiIsCisKKyAgICAgICAgICAgICJbOmMgYyBjID0gaW90YSBzdWJzY3JpcHQgOl0iLAorICAgICAgICAgICAgIlx1MDM0NSIsCisgICAgICAgICAgICAieHl6IiwKKworICAgICAgICAgICAgLy8gQmlkaSBjbGFzczogQHNpbmNlIElDVSAyLjIKKyAgICAgICAgICAgICJcXHB7YmlkaWNsYXNzPWxlZnR0b3JpZ2h0fSIsCisgICAgICAgICAgICAiYWJjIiwKKyAgICAgICAgICAgICJcdTA2NzFcdTA2NzIiLAorCisgICAgICAgICAgICAvLyBCaW5hcnkgcHJvcGVydGllczogQHNpbmNlIElDVSAyLjIKKyAgICAgICAgICAgICJcXHB7aWRlb2dyYXBoaWN9IiwKKyAgICAgICAgICAgICJcdTRFMEEiLAorICAgICAgICAgICAgIngiLAorCisgICAgICAgICAgICAiWzptYXRoPWZhbHNlOl0iLAorICAgICAgICAgICAgInEiLAorICAgICAgICAgICAgIigqKykiLAorCisgICAgICAgICAgICAvLyBKQiMxNzY3IFxOe30sIFxwe0FTQ0lJfQorICAgICAgICAgICAgIls6QXNjaWk6XSIsCisgICAgICAgICAgICAiYWJjXHUwMDAwXHUwMDdGIiwKKyAgICAgICAgICAgICJcdTAwODBcdTRFMDAiLAorCisgICAgICAgICAgICAiW1xcTnsgbGF0aW4gc21hbGwgbGV0dGVyICBhICB9WzpuYW1lPSBsYXRpbiBzbWFsbCBsZXR0ZXIgejpdXSIsCisgICAgICAgICAgICAiYXoiLAorICAgICAgICAgICAgInFycyIsCisKKyAgICAgICAgICAgIC8vIEpCIzIwMTUKKyAgICAgICAgICAgICJbOmFueTpdIiwKKyAgICAgICAgICAgICJhXFxVMDAxMEZGRkYiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAKKyAgICAgICAgICAgICJbOm52PTAuNTpdIiwKKyAgICAgICAgICAgICJcdTAwQkRcdTBGMkEiLAorICAgICAgICAgICAgIlx1MDBCQyIsCisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPERBVEEubGVuZ3RoOyBpKz0zKSB7CisgICAgICAgICAgICBVbmljb2RlU2V0IHNldDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgc2V0ID0gbmV3IFVuaWNvZGVTZXQoREFUQVtpXSk7CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBDb3VsZG4ndCBjcmVhdGUgVW5pY29kZVNldCBmcm9tIHBhdHRlcm4gXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICBEQVRBW2ldICsgJyInKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4cGVjdENvbnRhaW5tZW50KHNldCwgREFUQVtpKzFdLCBEQVRBW2krMl0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBjbG9uaW5nIG9mIFVuaWNvZGVTZXQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0Q2xvbmUoKSB7CisgICAgICAgIFVuaWNvZGVTZXQgcyA9IG5ldyBVbmljb2RlU2V0KCJbYWJjeHl6XSIpOworICAgICAgICBVbmljb2RlU2V0IHQgPSAoVW5pY29kZVNldCkgcy5jbG9uZSgpOworICAgICAgICBleHBlY3RDb250YWlubWVudCh0LCAiYWJjIiwgImRlZiIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgdGhlIGluZGV4T2YoKSBhbmQgY2hhckF0KCkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SW5kZXhPZigpIHsKKyAgICAgICAgVW5pY29kZVNldCBzZXQgPSBuZXcgVW5pY29kZVNldCgiW2EtY3gteTM1NzhdIik7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBjID0gc2V0LmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChzZXQuaW5kZXhPZihjKSAhPSBpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNoYXJBdCgiICsgaSArICIpID0gIiArIGMgKworICAgICAgICAgICAgICAgICAgICAgICIgPT4gaW5kZXhPZigpID0+ICIgKyBzZXQuaW5kZXhPZihjKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50IGMgPSBzZXQuY2hhckF0KHNldC5zaXplKCkpOworICAgICAgICBpZiAoYyAhPSAtMSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGNoYXJBdCg8b3V0IG9mIHJhbmdlPikgPSAiICsKKyAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlKFN0cmluZy52YWx1ZU9mKGMpKSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGogPSBzZXQuaW5kZXhPZigncScpOworICAgICAgICBpZiAoaiAhPSAtMSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IGluZGV4T2YoJ3EnKSA9ICIgKyBqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RDb250YWluc1N0cmluZygpIHsKKyAgICAgICAgVW5pY29kZVNldCB4ID0gbmV3IFVuaWNvZGVTZXQoIlthe2JjfV0iKTsKKyAgICAgICAgaWYgKHguY29udGFpbnMoImFiYyIpKSBlcnJsbigiRkFJTCIpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0RXhoYXVzdGl2ZSgpIHsKKyAgICAgICAgLy8gZXhoYXVzdGl2ZSB0ZXN0cy4gU2ltdWxhdGUgVW5pY29kZVNldHMgd2l0aCBpbnRlZ2Vycy4KKyAgICAgICAgLy8gVGhhdCBnaXZlcyB1cyB2ZXJ5IHNvbGlkIHRlc3RzIChleGNlcHQgZm9yIGxhcmdlIG1lbW9yeSB0ZXN0cykuCisKKyAgICAgICAgY2hhciBsaW1pdCA9IChjaGFyKTEyODsKKworICAgICAgICBmb3IgKGNoYXIgaSA9IDA7IGkgPCBsaW1pdDsgKytpKSB7CisgICAgICAgICAgICBsb2dsbigiVGVzdGluZyAiICsgaSArICIsICIgKyBiaXRzVG9TZXQoaSkpOworICAgICAgICAgICAgX3Rlc3RDb21wbGVtZW50KGkpOworICAgICAgICAgICAgCisgICAgICAgIAkvLyBBUyBMT05HIEFTIFdFIEFSRSBIRVJFLCBjaGVjayByb3VuZHRyaXAKKyAgICAgICAgCWNoZWNrUm91bmRUcmlwKGJpdHNUb1NldChpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoY2hhciBqID0gMDsgaiA8IGxpbWl0OyArK2opIHsKKyAgICAgICAgICAgICAgICBfdGVzdEFkZChpLGopOworICAgICAgICAgICAgICAgIF90ZXN0WG9yKGksaik7CisgICAgICAgICAgICAgICAgX3Rlc3RSZXRhaW4oaSxqKTsKKyAgICAgICAgICAgICAgICBfdGVzdFJlbW92ZShpLGopOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIE1ha2Ugc3VyZSBlYWNoIHNjcmlwdCBuYW1lIGFuZCBhYmJyZXZpYXRlZCBuYW1lIGNhbiBiZSB1c2VkCisgICAgICogdG8gY29uc3RydWN0IGEgVW5pY29kZVNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0U2NyaXB0TmFtZXMoKSB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxVU2NyaXB0LkNPREVfTElNSVQ7ICsraSkgeworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPDI7ICsraikgeworICAgICAgICAgICAgICAgIFN0cmluZyBwYXQgPSAiIjsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAoaj09MCkgPyBVU2NyaXB0LmdldE5hbWUoaSkgOiBVU2NyaXB0LmdldFNob3J0TmFtZShpKTsKKyAgICAgICAgICAgICAgICAgICAgcGF0ID0gIls6IiArIG5hbWUgKyAiOl0iOworICAgICAgICAgICAgICAgICAgICBVbmljb2RlU2V0IHNldCA9IG5ldyBVbmljb2RlU2V0KHBhdCk7CisgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJPazogIiArIHBhdCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhdC5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTCAoaW4gVVNjcmlwdCk6IE5vIG5hbWUgZm9yIHNjcmlwdCAiICsgaSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogQ291bGRuJ3QgY3JlYXRlICIgKyBwYXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBfdGVzdENvbXBsZW1lbnQoaW50IGEpIHsKKyAgICAgICAgVW5pY29kZVNldCB4ID0gYml0c1RvU2V0KGEpOworICAgICAgICBVbmljb2RlU2V0IHogPSBiaXRzVG9TZXQoYSk7CisgICAgICAgIHouY29tcGxlbWVudCgpOworICAgICAgICBpbnQgYyA9IHNldFRvQml0cyh6KTsKKyAgICAgICAgaWYgKGMgIT0gKH5hKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUxFRDogYWRkOiB+IiArIHggKyAgIiAhPSAiICsgeik7CisgICAgICAgICAgICBlcnJsbigiRkFJTEVEOiBhZGQ6IH4iICsgYSArICIgIT0gIiArIGMpOworICAgICAgICB9CisgICAgICAgIGNoZWNrQ2Fub25pY2FsUmVwKHosICJjb21wbGVtZW50ICIgKyBhKTsKKyAgICB9CisKKyAgICB2b2lkIF90ZXN0QWRkKGludCBhLCBpbnQgYikgeworICAgICAgICBVbmljb2RlU2V0IHggPSBiaXRzVG9TZXQoYSk7CisgICAgICAgIFVuaWNvZGVTZXQgeSA9IGJpdHNUb1NldChiKTsKKyAgICAgICAgVW5pY29kZVNldCB6ID0gYml0c1RvU2V0KGEpOworICAgICAgICB6LmFkZEFsbCh5KTsKKyAgICAgICAgaW50IGMgPSBzZXRUb0JpdHMoeik7CisgICAgICAgIGlmIChjICE9IChhIHwgYikpIHsKKyAgICAgICAgICAgIGVycmxuKFV0aWxpdHkuZXNjYXBlKCJGQUlMRUQ6IGFkZDogIiArIHggKyAiIHwgIiArIHkgKyAiICE9ICIgKyB6KSk7CisgICAgICAgICAgICBlcnJsbigiRkFJTEVEOiBhZGQ6ICIgKyBhICsgIiB8ICIgKyBiICsgIiAhPSAiICsgYyk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tDYW5vbmljYWxSZXAoeiwgImFkZCAiICsgYSArICIsIiArIGIpOworICAgIH0KKworICAgIHZvaWQgX3Rlc3RSZXRhaW4oaW50IGEsIGludCBiKSB7CisgICAgICAgIFVuaWNvZGVTZXQgeCA9IGJpdHNUb1NldChhKTsKKyAgICAgICAgVW5pY29kZVNldCB5ID0gYml0c1RvU2V0KGIpOworICAgICAgICBVbmljb2RlU2V0IHogPSBiaXRzVG9TZXQoYSk7CisgICAgICAgIHoucmV0YWluQWxsKHkpOworICAgICAgICBpbnQgYyA9IHNldFRvQml0cyh6KTsKKyAgICAgICAgaWYgKGMgIT0gKGEgJiBiKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUxFRDogcmV0YWluOiAiICsgeCArICIgJiAiICsgeSArICIgIT0gIiArIHopOworICAgICAgICAgICAgZXJybG4oIkZBSUxFRDogcmV0YWluOiAiICsgYSArICIgJiAiICsgYiArICIgIT0gIiArIGMpOworICAgICAgICB9CisgICAgICAgIGNoZWNrQ2Fub25pY2FsUmVwKHosICJyZXRhaW4gIiArIGEgKyAiLCIgKyBiKTsKKyAgICB9CisKKyAgICB2b2lkIF90ZXN0UmVtb3ZlKGludCBhLCBpbnQgYikgeworICAgICAgICBVbmljb2RlU2V0IHggPSBiaXRzVG9TZXQoYSk7CisgICAgICAgIFVuaWNvZGVTZXQgeSA9IGJpdHNUb1NldChiKTsKKyAgICAgICAgVW5pY29kZVNldCB6ID0gYml0c1RvU2V0KGEpOworICAgICAgICB6LnJlbW92ZUFsbCh5KTsKKyAgICAgICAgaW50IGMgPSBzZXRUb0JpdHMoeik7CisgICAgICAgIGlmIChjICE9IChhICZ+IGIpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTEVEOiByZW1vdmU6ICIgKyB4ICsgIiAmfiAiICsgeSArICIgIT0gIiArIHopOworICAgICAgICAgICAgZXJybG4oIkZBSUxFRDogcmVtb3ZlOiAiICsgYSArICIgJn4gIiArIGIgKyAiICE9ICIgKyBjKTsKKyAgICAgICAgfQorICAgICAgICBjaGVja0Nhbm9uaWNhbFJlcCh6LCAicmVtb3ZlICIgKyBhICsgIiwiICsgYik7CisgICAgfQorCisgICAgdm9pZCBfdGVzdFhvcihpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgVW5pY29kZVNldCB4ID0gYml0c1RvU2V0KGEpOworICAgICAgICBVbmljb2RlU2V0IHkgPSBiaXRzVG9TZXQoYik7CisgICAgICAgIFVuaWNvZGVTZXQgeiA9IGJpdHNUb1NldChhKTsKKyAgICAgICAgei5jb21wbGVtZW50QWxsKHkpOworICAgICAgICBpbnQgYyA9IHNldFRvQml0cyh6KTsKKyAgICAgICAgaWYgKGMgIT0gKGEgXiBiKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUxFRDogY29tcGxlbWVudDogIiArIHggKyAiIF4gIiArIHkgKyAiICE9ICIgKyB6KTsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMRUQ6IGNvbXBsZW1lbnQ6ICIgKyBhICsgIiBeICIgKyBiICsgIiAhPSAiICsgYyk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tDYW5vbmljYWxSZXAoeiwgImNvbXBsZW1lbnQgIiArIGEgKyAiLCIgKyBiKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ2hlY2sgdGhhdCByYW5nZXMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBhbmQgbm9uLQorICAgICAqIG92ZXJsYXBwaW5nLgorICAgICAqLworICAgIHZvaWQgY2hlY2tDYW5vbmljYWxSZXAoVW5pY29kZVNldCBzZXQsIFN0cmluZyBtc2cpIHsKKyAgICAgICAgaW50IG4gPSBzZXQuZ2V0UmFuZ2VDb3VudCgpOworICAgICAgICBpZiAobiA8IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMIHJlc3VsdCBvZiAiICsgbXNnICsKKyAgICAgICAgICAgICAgICAgICI6IHJhbmdlIGNvdW50IHNob3VsZCBiZSA+PSAwIGJ1dCBpcyAiICsKKyAgICAgICAgICAgICAgICAgIG4gKyAiIGZvciAiICsgVXRpbGl0eS5lc2NhcGUoc2V0LnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpbnQgbGFzdCA9IDA7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxuOyArK2kpIHsKKyAgICAgICAgICAgIGludCBzdGFydCA9IHNldC5nZXRSYW5nZVN0YXJ0KGkpOworICAgICAgICAgICAgaW50IGVuZCA9IHNldC5nZXRSYW5nZUVuZChpKTsKKyAgICAgICAgICAgIGlmIChzdGFydCA+IGVuZCkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMIHJlc3VsdCBvZiAiICsgbXNnICsKKyAgICAgICAgICAgICAgICAgICAgICAiOiByYW5nZSAiICsgKGkrMSkgKworICAgICAgICAgICAgICAgICAgICAgICIgc3RhcnQgPiBlbmQ6ICIgKyBzdGFydCArICIsICIgKyBlbmQgKworICAgICAgICAgICAgICAgICAgICAgICIgZm9yICIgKyBVdGlsaXR5LmVzY2FwZShzZXQudG9TdHJpbmcoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPiAwICYmIHN0YXJ0IDw9IGxhc3QpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTCByZXN1bHQgb2YgIiArIG1zZyArCisgICAgICAgICAgICAgICAgICAgICAgIjogcmFuZ2UgIiArIChpKzEpICsKKyAgICAgICAgICAgICAgICAgICAgICAiIG92ZXJsYXBzIHByZXZpb3VzIHJhbmdlOiAiICsgc3RhcnQgKyAiLCAiICsgZW5kICsKKyAgICAgICAgICAgICAgICAgICAgICAiIGZvciAiICsgVXRpbGl0eS5lc2NhcGUoc2V0LnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3QgPSBlbmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgYml0bWFzayB0byBhIFVuaWNvZGVTZXQuCisgICAgICovCisgICAgVW5pY29kZVNldCBiaXRzVG9TZXQoaW50IGEpIHsKKyAgICAgICAgVW5pY29kZVNldCByZXN1bHQgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDMyOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoYSAmICgxPDxpKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoKGNoYXIpaSwoY2hhcilpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ29udmVydCBhIFVuaWNvZGVTZXQgdG8gYSBiaXRtYXNrLiAgT25seSB0aGUgY2hhcmFjdGVycworICAgICAqIFUrMDAwMCB0byBVKzAwMjAgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBiaXRtYXNrLgorICAgICAqLworICAgIHN0YXRpYyBpbnQgc2V0VG9CaXRzKFVuaWNvZGVTZXQgeCkgeworICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzMjsgKytpKSB7CisgICAgICAgICAgICBpZiAoeC5jb250YWlucygoY2hhcilpKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAoMTw8aSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludmVyc2lvbiBsaXN0IGJhc2VkIFVuaWNvZGVTZXQKKyAgICAgKiBhcyBhIHBhaXJzIGxpc3QuICBSYW5nZXMgYXJlIGxpc3RlZCBpbiBhc2NlbmRpbmcgVW5pY29kZSBvcmRlci4KKyAgICAgKiBGb3IgZXhhbXBsZSwgdGhlIHNldCBbYS16QS1NM10gaXMgcmVwcmVzZW50ZWQgYXMgIjMzQU1heiIuCisgICAgICovCisgICAgc3RhdGljIFN0cmluZyBnZXRQYWlycyhVbmljb2RlU2V0IHNldCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgcGFpcnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzZXQuZ2V0UmFuZ2VDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBzdGFydCA9IHNldC5nZXRSYW5nZVN0YXJ0KGkpOworICAgICAgICAgICAgaW50IGVuZCA9IHNldC5nZXRSYW5nZUVuZChpKTsKKyAgICAgICAgICAgIGlmIChlbmQgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICBlbmQgPSAweEZGRkY7CisgICAgICAgICAgICAgICAgaSA9IHNldC5nZXRSYW5nZUNvdW50KCk7IC8vIFNob3VsZCBiZSB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFpcnMuYXBwZW5kKChjaGFyKXN0YXJ0KS5hcHBlbmQoKGNoYXIpZW5kKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFpcnMudG9TdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdCBmdW5jdGlvbi4gTWFrZSBzdXJlIHRoYXQgdGhlIHNldHMgaGF2ZSB0aGUgcmlnaHQgcmVsYXRpb24KKyAgICAgKi8KKyAgICAgCisgICAgdm9pZCBleHBlY3RSZWxhdGlvbihPYmplY3QgcmVsYXRpb25PYmosIE9iamVjdCBzZXQxT2JqLCBPYmplY3Qgc2V0Mk9iaiwgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgaW50IHJlbGF0aW9uID0gKChJbnRlZ2VyKSByZWxhdGlvbk9iaikuaW50VmFsdWUoKTsKKyAgICAgICAgVW5pY29kZVNldCBzZXQxID0gKFVuaWNvZGVTZXQpIHNldDFPYmo7CisgICAgICAgIFVuaWNvZGVTZXQgc2V0MiA9IChVbmljb2RlU2V0KSBzZXQyT2JqOworICAgICAgICAKKyAgICAgICAgLy8gYnktdGhlLWJ5LCBjaGVjayB0aGUgaXRlcmF0b3IKKyAgICAgICAgY2hlY2tSb3VuZFRyaXAoc2V0MSk7CisgICAgICAgIGNoZWNrUm91bmRUcmlwKHNldDIpOworICAgICAgICAKKyAgICAgICAgYm9vbGVhbiBjb250YWlucyA9IHNldDEuY29udGFpbnNBbGwoc2V0Mik7CisgICAgICAgIGJvb2xlYW4gaXNDb250YWluZWQgPSBzZXQyLmNvbnRhaW5zQWxsKHNldDEpOworICAgICAgICBib29sZWFuIGRpc2pvaW50ID0gc2V0MS5jb250YWluc05vbmUoc2V0Mik7CisgICAgICAgIGJvb2xlYW4gZXF1YWxzID0gc2V0MS5lcXVhbHMoc2V0Mik7CisgICAgICAgIAorICAgICAgICBVbmljb2RlU2V0IGludGVyc2VjdGlvbiA9IG5ldyBVbmljb2RlU2V0KHNldDEpLnJldGFpbkFsbChzZXQyKTsKKyAgICAgICAgVW5pY29kZVNldCBtaW51czEyID0gbmV3IFVuaWNvZGVTZXQoc2V0MSkucmVtb3ZlQWxsKHNldDIpOworICAgICAgICBVbmljb2RlU2V0IG1pbnVzMjEgPSBuZXcgVW5pY29kZVNldChzZXQyKS5yZW1vdmVBbGwoc2V0MSk7CisgICAgICAgIAorICAgICAgICAvLyB0ZXN0IGJhc2ljIHByb3BlcnRpZXMKKyAgICAgICAgCisgICAgICAgIGlmIChjb250YWlucyAhPSAoaW50ZXJzZWN0aW9uLnNpemUoKSA9PSBzZXQyLnNpemUoKSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMIGNvbnRhaW5zMSIgKyBzZXQxLnRvUGF0dGVybih0cnVlKSArICIsICIgKyBzZXQyLnRvUGF0dGVybih0cnVlKSk7CisgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgaWYgKGNvbnRhaW5zICE9IChpbnRlcnNlY3Rpb24uZXF1YWxzKHNldDIpKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUwgY29udGFpbnMyIiArIHNldDEudG9QYXR0ZXJuKHRydWUpICsgIiwgIiArIHNldDIudG9QYXR0ZXJuKHRydWUpKTsKKyAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICBpZiAoaXNDb250YWluZWQgIT0gKGludGVyc2VjdGlvbi5zaXplKCkgPT0gc2V0MS5zaXplKCkpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCBpc0NvbnRhaW5lZDEiICsgc2V0MS50b1BhdHRlcm4odHJ1ZSkgKyAiLCAiICsgc2V0Mi50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgIGlmIChpc0NvbnRhaW5lZCAhPSAoaW50ZXJzZWN0aW9uLmVxdWFscyhzZXQxKSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMIGlzQ29udGFpbmVkMiIgKyBzZXQxLnRvUGF0dGVybih0cnVlKSArICIsICIgKyBzZXQyLnRvUGF0dGVybih0cnVlKSk7CisgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgaWYgKChjb250YWlucyAmJiBpc0NvbnRhaW5lZCkgIT0gZXF1YWxzKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCBlcXVhbHMiICsgc2V0MS50b1BhdHRlcm4odHJ1ZSkgKyAiLCAiICsgc2V0Mi50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgIGlmIChkaXNqb2ludCAhPSAoaW50ZXJzZWN0aW9uLnNpemUoKSA9PSAwKSkgeworICAgICAgICAgICAgZXJybG4oIkZBSUwgZGlzam9pbnQiICsgc2V0MS50b1BhdHRlcm4odHJ1ZSkgKyAiLCAiICsgc2V0Mi50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3cgc2VlIGlmIHRoZSBleHBlY3RlZCByZWxhdGlvbiBpcyB0cnVlCisgICAgICAgIGludCBzdGF0dXMgPSAobWludXMxMi5zaXplKCkgIT0gMCA/IDQgOiAwKQorICAgICAgICAgIHwgKGludGVyc2VjdGlvbi5zaXplKCkgIT0gMCA/IDIgOiAwKQorICAgICAgICAgIHwgKG1pbnVzMjEuc2l6ZSgpICE9IDAgPyAxIDogMCk7CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzICE9IHJlbGF0aW9uKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTCByZWxhdGlvbiBpbmNvcnJlY3QiICsgbWVzc2FnZQorICAgICAgICAgICAgICArICI7IGRlc2lyZWQgPSAiICsgUkVMQVRJT05fTkFNRVtyZWxhdGlvbl0KKyAgICAgICAgICAgICAgKyAiOyBmb3VuZCA9ICIgKyBSRUxBVElPTl9OQU1FW3N0YXR1c10KKyAgICAgICAgICAgICAgKyAiOyBzZXQxID0gIiArIHNldDEudG9QYXR0ZXJuKHRydWUpCisgICAgICAgICAgICAgICsgIjsgc2V0MiA9ICIgKyBzZXQyLnRvUGF0dGVybih0cnVlKQorICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEJhc2ljIGNvbnNpc3RlbmN5IGNoZWNrIGZvciBhIGZldyBpdGVtcy4KKyAgICAgKiBUaGF0IHRoZSBpdGVyYXRvciB3b3JrcywgYW5kIHRoYXQgd2UgY2FuIGNyZWF0ZSBhIHBhdHRlcm4gYW5kCisgICAgICogZ2V0IHRoZSBzYW1lIHRoaW5nIGJhY2sKKyAgICAgKi8KKyAgICAKKyAgICB2b2lkIGNoZWNrUm91bmRUcmlwKFVuaWNvZGVTZXQgcykgeworICAgICAgICBTdHJpbmcgcGF0ID0gcy50b1BhdHRlcm4oZmFsc2UpOworICAgICAgICBVbmljb2RlU2V0IHQgPSBjb3B5V2l0aEl0ZXJhdG9yKHMsIGZhbHNlKTsKKyAgICAgICAgY2hlY2tFcXVhbChzLCB0LCAiaXRlcmF0b3Igcm91bmR0cmlwIik7CisKKyAgICAgICAgdCA9IGNvcHlXaXRoSXRlcmF0b3IocywgdHJ1ZSk7IC8vIHRyeSByYW5nZQorICAgICAgICBjaGVja0VxdWFsKHMsIHQsICJpdGVyYXRvciByb3VuZHRyaXAiKTsKKyAgICAgICAgCisgICAgICAgIHQgPSBuZXcgVW5pY29kZVNldChwYXQpOworICAgICAgICBjaGVja0VxdWFsKHMsIHQsICJ0b1BhdHRlcm4oZmFsc2UpIik7CisgICAgICAgIAorICAgICAgICBwYXQgPSBzLnRvUGF0dGVybih0cnVlKTsKKyAgICAgICAgdCA9IG5ldyBVbmljb2RlU2V0KHBhdCk7CisgICAgICAgIGNoZWNrRXF1YWwocywgdCwgInRvUGF0dGVybih0cnVlKSIpOworICAgIH0KKyAgICAKKyAgICBVbmljb2RlU2V0IGNvcHlXaXRoSXRlcmF0b3IoVW5pY29kZVNldCBzLCBib29sZWFuIHdpdGhSYW5nZSkgeworICAgIAlVbmljb2RlU2V0IHQgPSBuZXcgVW5pY29kZVNldCgpOworICAgIAlVbmljb2RlU2V0SXRlcmF0b3IgaXQgPSBuZXcgVW5pY29kZVNldEl0ZXJhdG9yKHMpOworICAgIAlpZiAod2l0aFJhbmdlKSB7CisgICAgCQl3aGlsZSAoaXQubmV4dFJhbmdlKCkpIHsKKyAgICAJCQlpZiAoaXQuY29kZXBvaW50ID09IFVuaWNvZGVTZXRJdGVyYXRvci5JU19TVFJJTkcpIHsKKyAgICAJCQkJdC5hZGQoaXQuc3RyaW5nKTsKKyAgICAJCQl9IGVsc2UgeworICAgIAkJCQl0LmFkZChpdC5jb2RlcG9pbnQsIGl0LmNvZGVwb2ludEVuZCk7CisgICAgCQkJfQorICAgIAkJfQorICAgIAl9IGVsc2UgeworICAgIAkJd2hpbGUgKGl0Lm5leHQoKSkgeworICAgIAkJCWlmIChpdC5jb2RlcG9pbnQgPT0gVW5pY29kZVNldEl0ZXJhdG9yLklTX1NUUklORykgeworICAgIAkJCQl0LmFkZChpdC5zdHJpbmcpOworICAgIAkJCX0gZWxzZSB7CisgICAgCQkJCXQuYWRkKGl0LmNvZGVwb2ludCk7CisgICAgCQkJfQorICAgIAkJfQorICAgIAl9CisgICAgCXJldHVybiB0OworICAgIH0KKyAgICAKKyAgICBib29sZWFuIGNoZWNrRXF1YWwoVW5pY29kZVNldCBzLCBVbmljb2RlU2V0IHQsIFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIGlmICghcy5lcXVhbHModCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMICIgKyBtZXNzYWdlCisgICAgICAgICAgICAgICsgIjsgc291cmNlID0gIiArIHMudG9QYXR0ZXJuKHRydWUpCisgICAgICAgICAgICAgICsgIjsgcmVzdWx0ID0gIiArIHQudG9QYXR0ZXJuKHRydWUpCisgICAgICAgICAgICAgICk7CisgICAgICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAkJCisgICAgCisgICAgLyoqCisgICAgICogRXhwZWN0IHRoZSBnaXZlbiBzZXQgdG8gY29udGFpbiB0aGUgY2hhcmFjdGVycyBpbiBjaGFyc0luIGFuZAorICAgICAqIHRvIG5vdCBjb250YWluIHRob3NlIGluIGNoYXJzT3V0LgorICAgICAqLworICAgIHZvaWQgZXhwZWN0Q29udGFpbm1lbnQoVW5pY29kZVNldCBzZXQsIFN0cmluZyBjaGFyc0luLCBTdHJpbmcgY2hhcnNPdXQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJhZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgaWYgKGNoYXJzSW4gIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNoYXJzSW4ubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGludCBjID0gVVRGMTYuY2hhckF0KGNoYXJzSW4saSk7CisgICAgICAgICAgICAgICAgaWYoYz4weGZmZmYpIGkrKzsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgICAgICBVVEYxNi5hcHBlbmQoYmFkLGMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiYWQubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgZXJybG4oVXRpbGl0eS5lc2NhcGUoIkZBSUw6IHNldCAiICsgc2V0ICsgIiBkb2VzIG5vdCBjb250YWluICIgKyBiYWQgKworICAgICAgICAgICAgICAgICAgICAgICIsIGV4cGVjdGVkIGNvbnRhaW5tZW50IG9mICIgKyBjaGFyc0luKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ2xuKFV0aWxpdHkuZXNjYXBlKCJPazogc2V0ICIgKyBzZXQgKyAiIGNvbnRhaW5zICIgKyBjaGFyc0luKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYXJzT3V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGJhZC5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8Y2hhcnNPdXQubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNoYXIgYyA9IGNoYXJzT3V0LmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIGJhZC5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJhZC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBlcnJsbihVdGlsaXR5LmVzY2FwZSgiRkFJTDogc2V0ICIgKyBzZXQgKyAiIGNvbnRhaW5zICIgKyBiYWQgKworICAgICAgICAgICAgICAgICAgICAgICIsIGV4cGVjdGVkIG5vbi1jb250YWlubWVudCBvZiAiICsgY2hhcnNPdXQpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nbG4oVXRpbGl0eS5lc2NhcGUoIk9rOiBzZXQgIiArIHNldCArICIgZG9lcyBub3QgY29udGFpbiAiICsgY2hhcnNPdXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZXhwZWN0UGF0dGVybihVbmljb2RlU2V0IHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZFBhaXJzKSB7CisgICAgICAgIHNldC5hcHBseVBhdHRlcm4ocGF0dGVybik7CisgICAgICAgIGlmICghZ2V0UGFpcnMoc2V0KS5lcXVhbHMoZXhwZWN0ZWRQYWlycykpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBhcHBseVBhdHRlcm4oXCIiICsgcGF0dGVybiArCisgICAgICAgICAgICAgICAgICAiXCIpID0+IHBhaXJzIFwiIiArCisgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShnZXRQYWlycyhzZXQpKSArICJcIiwgZXhwZWN0ZWQgXCIiICsKKyAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlKGV4cGVjdGVkUGFpcnMpICsgIlwiIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dsbigiT2s6ICAgYXBwbHlQYXR0ZXJuKFwiIiArIHBhdHRlcm4gKworICAgICAgICAgICAgICAgICAgIlwiKSA9PiBwYWlycyBcIiIgKworICAgICAgICAgICAgICAgICAgVXRpbGl0eS5lc2NhcGUoZ2V0UGFpcnMoc2V0KSkgKyAiXCIiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZXhwZWN0VG9QYXR0ZXJuKFVuaWNvZGVTZXQgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHBQYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gZXhwU3RyaW5ncykgeworICAgICAgICBTdHJpbmcgcGF0ID0gc2V0LnRvUGF0dGVybih0cnVlKTsKKyAgICAgICAgaWYgKHBhdC5lcXVhbHMoZXhwUGF0KSkgeworICAgICAgICAgICAgbG9nbG4oIk9rOiAgIHRvUGF0dGVybigpID0+IFwiIiArIHBhdCArICJcIiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IHRvUGF0dGVybigpID0+IFwiIiArIHBhdCArICJcIiwgZXhwZWN0ZWQgXCIiICsgZXhwUGF0ICsgIlwiIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiBpbiA9IHRydWU7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxleHBTdHJpbmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZXhwU3RyaW5nc1tpXSA9PSBOT1QpIHsgLy8gc2ljOyBwb2ludGVyIGNvbXBhcmlzb24KKyAgICAgICAgICAgICAgICBpbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbGVhbiBjb250YWluZWQgPSBzZXQuY29udGFpbnMoZXhwU3RyaW5nc1tpXSk7CisgICAgICAgICAgICBpZiAoY29udGFpbmVkID09IGluKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9rOiAiICsgZXhwUGF0ICsgCisgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lZCA/ICIgY29udGFpbnMgeyIgOiAiIGRvZXMgbm90IGNvbnRhaW4geyIpICsKKyAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShleHBTdHJpbmdzW2ldKSArICJ9Iik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiAiICsgZXhwUGF0ICsgCisgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lZCA/ICIgY29udGFpbnMgeyIgOiAiIGRvZXMgbm90IGNvbnRhaW4geyIpICsKKyAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShleHBTdHJpbmdzW2ldKSArICJ9Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGV4cGVjdFBhaXJzKFVuaWNvZGVTZXQgc2V0LCBTdHJpbmcgZXhwZWN0ZWRQYWlycykgeworICAgICAgICBpZiAoIWdldFBhaXJzKHNldCkuZXF1YWxzKGV4cGVjdGVkUGFpcnMpKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogRXhwZWN0ZWQgcGFpciBsaXN0IFwiIiArCisgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShleHBlY3RlZFBhaXJzKSArICJcIiwgZ290IFwiIiArCisgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShnZXRQYWlycyhzZXQpKSArICJcIiIpOworICAgICAgICB9CisgICAgfQorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ2hhcnNUb1VuaWNvZGVTdHJpbmcoU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIFV0aWxpdHkudW5lc2NhcGUocyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L1VuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L1VuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3MTg0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9BdHRpYy9Vbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvclRlc3QuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8yOCAxNjo0NToxOSAkIAorICogJFJldmlzaW9uOiAxLjcgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnRyYW5zbGl0OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgamF2YS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLio7CisKKworLyoqCisgKiBAdGVzdAorICogQHN1bW1hcnkgR2VuZXJhbCB0ZXN0IG9mIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yCisgKi8KK3B1YmxpYyBjbGFzcyBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvclRlc3QgZXh0ZW5kcyBUZXN0Rm13ayB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yVGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFVzZWQgYnkgVGVzdENvbnN0cnVjdGlvbigpIGFuZCBUZXN0VHJhbnNsaXRlcmF0ZS4KKyAgICAqLworICAgIFVuaWNvZGVGaWx0ZXIgVW5pRmlsdGVyPW5ldyBVbmljb2RlRmlsdGVyKCkgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhpbnQgYykgeworICAgICAgICAgICAgaWYoYz09MHgwMDYzIHx8IGM9PTB4MDA2MSB8fCBjPT0weDAwNDMgfHwgYz09MHgwMDQxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgU3RyaW5nIHRvUGF0dGVybihib29sZWFuIGVzY2FwZVVucHJpbnRhYmxlKSB7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlc0luZGV4VmFsdWUoaW50IHYpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCBhZGRNYXRjaFNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKSB7fQorICAgIH07CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q29uc3RydWN0aW9uKCl7CisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHRoZSBjb25zdHJ1Y3Rpb24gVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IoKSIpOworICAgICAgICBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvciB0cmFuczE9bmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKCk7CisgICAgICAgIAorCisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHRoZSBjb3NudHJ1Y3Rpb24gVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IocGF0dGVybikiKTsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm49IlxcXFxVKzAwMDBhYmMiOworICAgICAgICB0cnl7CisgICAgICAgICAgICB0cmFuczE9bmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4pOworICAgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4MikgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yIGNvbnN0cnVjdGlvbiBmYWlsZWQgd2l0aCBwYXR0ZXJuPSIgKyBwYXR0ZXJuICsgIiBFeGNlcHRpb249ICIgKyBleDIudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICBsb2dsbigiVGVzdGluZyB0aGUgY29zbnRydWN0aW9uIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4pIHdpdGggaWxsZWdhbCBwYXR0ZXJuIik7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuMj0iXFxYKyI7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIHRyYW5zMT1uZXcgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IocGF0dGVybjIpOworICAgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4MykgeworICAgICAgICAgICAgbG9nbG4oIk9LOiBjb25zdHJ1Y3Rpb24gd2l0aCBJbGxlZ2FsIHBhdHRlcm4gaGFuZGxlZCBjb3JyZWN0bHkiKTsKKyAgICAgICAgfSAgCisgICAgICAgIAorICAgICAgICBsb2dsbigiVGVzdGluZyB0aGUgY29uc3RydWN0aW9uIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4sIGlzVXBwZXJjYXNlPWZhbHNlLCBhZG9wdGVkRmlsdGVyPW51bGwpIik7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIHRyYW5zMT1uZXcgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IocGF0dGVybiwgZmFsc2UsIG51bGwpOworICAgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4NCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4sIGlzVXBwZXJjYXNlPWZhbHNlLCBhZG9wdGVkRmlsdGVyPW51bGwpIGNvbnN0cnVjdGlvbiBmYWlsZWQuIEV4Y2VwdGlvbj0gIiArIGV4NC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIGxvZ2xuKCJUZXN0aW5nIHRoZSBjb25zdHJ1Y3Rpb24gVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IocGF0dGVybiwgaXNVcHBlcmNhc2U9dHJ1ZSwgYWRvcHRlZEZpbHRlcikiKTsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgdHJhbnMxPW5ldyBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvcihwYXR0ZXJuLCB0cnVlLCBVbmlGaWx0ZXIpOworICAgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4NCkgeworICAgICAgICAgICAgZXJybG4oIkZBSUw6IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4sIGlzVXBwZXJjYXNlPXRydWUsIGFkb3B0ZWRGaWx0ZXIpIGNvbnN0cnVjdGlvbiBmYWlsZWQuIEV4Y2VwdGlvbj0gIiArIGV4NC50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFVwcGVyQ2FzZSgpeworICAgICAgICBsb2dsbigiVGVzdGluZyB0aGUgaXNVcHBlcmNhc2UoKSBhbmQgc2V0VXBwZXJjYXNlKCkgQVBJIG9mIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yIik7CisgICAgICAgIFN0cmluZyBzdHI9ImFiayI7CisgICAgICAgIC8qZGVmYXVsdCB0cmFuc2xpdGVyYXRvciBoYXMgdXBwZXIgY2FzZSBUUlVFKi8KKyAgICAgICAgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IgdHJhbnNkZWZhdWx0PW5ldyBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvcigpOworICAgICAgICBleHBlY3QodHJhbnNkZWZhdWx0LCAid2hlcmUgdXBwZXJjYXNlPWRlZmF1bHQiLCBzdHIsICJcXHUwMDYxXFx1MDA2MlxcdTAwNkIiKTsKKworICAgICAgICBTdHJpbmcgcGF0dGVybj0iXFxcXHUwMDAwIjsKKyAgICAgICAgLyp0cmFuc2xpdGVyYXRvciB3aXRoIFVwcGVyY2FzZSBGQUxTRSovCisgICAgICAgIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yIHRyYW5zMT1udWxsOworICAgICAgICB0cnl7CisgICAgICAgICAgICB0cmFuczE9bmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4sIGZhbHNlLCBudWxsKTsKKyAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleDEpIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvcihwYXR0ZXJuLCBmYWxzZSxudWxsKSBjb25zdHJ1Y3Rpb24gZmFpbGVkIHdpdGggcGF0dGVyIiAKKyAgICAgICAgICAgICAgICAgICsgcGF0dGVybisgIiBFeGNlcHRpb246ICIgKyBleDEudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0KHRyYW5zMSwgIndoZXJlIHVwcGVyY2FzZT1GQUxTRSIsIHN0ciwgIlxcdTAwNjFcXHUwMDYyXFx1MDA2YiIpOyAgLypkb2Vzbid0IGRpc3BsYXkgdXBwZXJjYXNlKi8KKworICAgICAgICBpZih0cmFuc2RlZmF1bHQuaXNVcHBlcmNhc2UoKSAhPSB0cnVlICB8fCAKKyAgICAgICAgICAgdHJhbnMxLmlzVXBwZXJjYXNlKCkgIT0gZmFsc2UgKXsKKyAgICAgICAgICAgIGVycmxuKCJpc1VwcGVyQ2FzZSgpIGZhaWxlZCIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKmNoYW5naW5nIHRoZSBvdXRwdXRoZXhkaWdpdHMgdG8gbG93ZXIgY2FzZSBmb3IgdGhlIGRlZmF1bHQgdHJhbnNsaXRlcmF0b3IqLworICAgICAgICB0cmFuc2RlZmF1bHQuc2V0VXBwZXJjYXNlKHRyYW5zMS5pc1VwcGVyY2FzZSgpKTsKKyAgICAgICAgaWYodHJhbnNkZWZhdWx0LmlzVXBwZXJjYXNlKCkgIT0gdHJhbnMxLmlzVXBwZXJjYXNlKCkgfHwgCisgICAgICAgICAgIHRyYW5zZGVmYXVsdC5pc1VwcGVyY2FzZSgpICE9IGZhbHNlKXsKKyAgICAgICAgICAgIGVycmxuKCJzZXRVcHBlcmNhc2UoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICAvKmRvZXNuJ3Qgb3VwdXQgdXBwZXJjYXNlIGhleCwgc2luY2UgdHJhbnNkZWZhdWx0J3MgdXBwZXJjYXNlIGlzIHNldCB0byBGQUxTRSB1c2luZyBzZXRVcHBlcmNhc2UqLworICAgICAgICBleHBlY3QodHJhbnNkZWZhdWx0LCAid2hlcmUgdXBwZXJjYXNlPUZBTFNFIiwgc3RyLCAiXFx1MDA2MVxcdTAwNjJcXHUwMDZiIik7ICAgICAKKworICAgICAgICAvKnRyeWluZyByb3VuZCB0cmlwKi8KKyAgICAgICAgdHJhbnNkZWZhdWx0LnNldFVwcGVyY2FzZSh0cnVlKTsKKyAgICAgICAgaWYodHJhbnNkZWZhdWx0LmlzVXBwZXJjYXNlKCkgIT0gdHJ1ZSB8fCAKKyAgICAgICAgICAgdHJhbnNkZWZhdWx0LmlzVXBwZXJjYXNlKCkgPT0gdHJhbnMxLmlzVXBwZXJjYXNlKCkgKXsKKyAgICAgICAgICAgIGVycmxuKCJzZXRVcHBlcmNhc2UoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICAvKmRpc3BsYXlzIHVwcGVyIGNhc2Ugc2luY2UgaXQgaXMgc2V0IHRvIFRSVUUqLworICAgICAgICBleHBlY3QodHJhbnNkZWZhdWx0LCAid2hlcmUgdXBwZXJjYXNlPVRSVUUiLCBzdHIsICJcXHUwMDYxXFx1MDA2MlxcdTAwNkIiKTsKKworICAgIH0gCisgICAgcHVibGljIHZvaWQgVGVzdFBhdHRlcm4oKXsKKyAgICAgICAgbG9nbG4oIlRlc3RpbmcgdGhlIGFwcGx5UGF0dGVybigpIGFuZCB0b1BhdHRlcm4oKSBBUEkgb2YgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IiKTsKKyAgICAgICAgLypkZWZhdWx0IHRyYW5zbGl0ZXJhdG9yIGhhcyBwYXR0ZXJuIFxcdTAwMDAqLworICAgICAgICBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvciB0cmFuc2RlZmF1bHQ9bmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBkZWZhdWx0cGF0dGVybj10cmFuc2RlZmF1bHQudG9QYXR0ZXJuKCk7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuMT0iXFxcXFUrMDAwMCI7CisgICAgICAgIAorICAgICAgICBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvciB0cmFuczE9bnVsbDsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgdHJhbnMxPW5ldyBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvcihwYXR0ZXJuMSwgdHJ1ZSwgbnVsbCk7CisgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgxKSB7CisgICAgICAgICAgICBlcnJsbigiRkFJTDogVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IgY29uc3RydWN0aW9uIGZhaWxlZCB3aXRoIHBhdHRlcm4gPSIgKyBwYXR0ZXJuMSArCisgICAgICAgICAgICAgICAgICAgIkV4Y2VwdGlvbjoiICsgZXgxLnRvU3RyaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgLyp0ZXN0IHRvUGF0dGVybigpICovCisgICAgICAgIGlmKHRyYW5zZGVmYXVsdC50b1BhdHRlcm4oKS5lcXVhbHModHJhbnMxLnRvUGF0dGVybigpKSA9PSB0cnVlIHx8CisgICAgICAgICAgICB0cmFuc2RlZmF1bHQudG9QYXR0ZXJuKCkuZXF1YWxzKCJcXFxcdTAwMDAiKSAhPSB0cnVlIHx8CisgICAgICAgICAgICB0cmFuczEudG9QYXR0ZXJuKCkuZXF1YWxzKHBhdHRlcm4xKSAhPSB0cnVlICl7CisgICAgICAgICAgICBlcnJsbigiRXJyb3I6IHRvUGF0dGVybigpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgLyphcHBseSBwYXR0ZXJucyBmb3IgdHJhbnNkZWZhdWx0Ki8KKyAgICAgICAgU3RyaW5nIHN0cj0iYWJLZiI7CisgICAgICAgIGV4cGVjdFBhdHRlcm4odHJhbnNkZWZhdWx0LCAgcGF0dGVybjEsIHN0ciwgIlxcVSswMDYxXFxVKzAwNjJcXFUrMDA0QlxcVSswMDY2Iik7CisgICAgICAgIGV4cGVjdFBhdHRlcm4odHJhbnNkZWZhdWx0LCAgIlxcVSMjMDAsIiwgc3RyLCAiVTYxLFU2MixVNEIsVTY2LCIpOworICAgICAgICBleHBlY3RQYXR0ZXJuKHRyYW5zZGVmYXVsdCwgZGVmYXVsdHBhdHRlcm4sIHN0ciwgIlxcdTAwNjFcXHUwMDYyXFx1MDA0QlxcdTAwNjYiKTsKKyAgICAgICAgZXhwZWN0UGF0dGVybih0cmFuczEsICJcXHVuaTAwMDAiLCBzdHIsICJ1bmkwMDYxdW5pMDA2MnVuaTAwNEJ1bmkwMDY2Iik7CisgICAgICAgIGV4cGVjdFBhdHRlcm4odHJhbnMxLCAiXFxcXFMtMDAwMC1FIiwgc3RyLCAiXFxTLTAwNjEtRVxcUy0wMDYyLUVcXFMtMDA0Qi1FXFxTLTAwNjYtRSIpOworICAgICAgICBleHBlY3RQYXR0ZXJuKHRyYW5zMSwgIlxcdSMjMDAwMCIsIHN0ciwgIkZBSUwiKTsKKyAgICAgICAgZXhwZWN0UGF0dGVybih0cmFuczEsICJcXCowMDAwIiwgc3RyLCAiKjAwNjEqMDA2MiowMDRCKjAwNjYiKTsgCisgICAgICAgIGV4cGVjdFBhdHRlcm4odHJhbnMxLCAiXFx1IyMjIyIsIHN0ciwgIkZBSUwiKTsKKyAgIAorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RTaW1wbGVUcmFuc2xpdGVyYXRlKCl7IAorICAgICAgICBTdHJpbmcgcGF0dGVybjE9IlxcXFxVKzAwMDAiOworICAgICAgICBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvciB0cmFuczE9bnVsbDsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgdHJhbnMxPW5ldyBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvcihwYXR0ZXJuMSwgdHJ1ZSwgbnVsbCk7CisgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKXsKKyAgICAgICAgICAgIGVycmxuKCJVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvcihwYXR0ZXJuMSwgdHJ1ZSwgbnVsbCkgY29uc3RydWN0aW9uIGZhaWxlZCB3aXRoIHBhdHRlcm4gPSIgCisgICAgICAgICAgICAgICAgICArIHBhdHRlcm4xICsgIkV4Y2VwdGlvbjoiICsgaWFlLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBzb3VyY2U9IkhlbGxvIjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkPSJIZVxcVSswMDZDXFxVKzAwNkNcXFUrMDA2RiI7CisKKyAgICAgICAgZXhwZWN0VHJhbnNsaXQodHJhbnMxLCAiOlJlcGxhY2VhYmxlICIsIHNvdXJjZSwgIDEsIDUsIDIsIGV4cGVjdGVkKTsgICAKKyAgICB9CisgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0VHJhbnNsaXRlcmF0ZSgpeworICAgICAgICBTdHJpbmcgRGF0YVtdPXsKKyAgICAgICAgLy9wYXR0ZXJuLCBzb3VyY2UsIGluZGV4LmNvbnRleHRTdGFydCwgaW5kZXguY29udGV4dExpbWl0LCBpbmRleC5zdGFydCwgZXhwZWN0ZWRSZXN1bHQsIGV4cGVjdGVkUmVzdWx0IHVzaW5nIGZpbHRlcihhLCBiKQorICAgICAgICAiVSsjIzAwIiwgICAgImFiYyIsICIxIiwgIjMiLCAiMiIsICJhYlUrNjMiLCAiYWJjIiwKKyAgICAgICAgIlxcXFx1MDAwMCIsICJhYmMiLCAiMSIsICIyIiwgIjEiLCAiYVxcdTAwNjJjIiwgImFcXHUwMDYyYyIsCisgICAgICAgICJVbmkwMDAwIiwgICAiYWJjIiwgIjEiLCAiMyIsICIyIiwgImFiVW5pMDA2MyIsICJhYmMiLAorICAgICAgICAiVVswMDAwXSIsICAgImhlbGxvIiwgIjAiLCAiNCIsICIyIiwgImhlVVswMDZDXVVbMDA2Q11vIiwgImhlVVswMDZDXVVbMDA2Q11vIiwKKyAgICAgICAgInByZWZpeC0wMDAwLXN1ZmZpeCIsICJhYmMiLCAiMSIsICIzIiwgIjEiLCAiYXByZWZpeC0wMDYyLXN1ZmZpeHByZWZpeC0wMDYzLXN1ZmZpeCIsICJhcHJlZml4LTAwNjItc3VmZml4YyIsCisgICAgICAgICIqIyMwMCoiLCAgICAgImhlbGxvdGhlcmUiLCAiMSIsICI4IiwgIjQiLCAiaGVsbCo2RioqNzQqKjY4Kio2NSpyZSIsICJoZWxsKjZGKio3NCoqNjgqKjY1KnJlIiwKKworICAgICAgICB9OworICAgICAgICBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvciB0cmFuczE9bnVsbDsKKyAgICAgICAgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IgdHJhbnMyPW51bGw7CisgICAgICAgIGZvcihpbnQgaT0wO2k8RGF0YS5sZW5ndGg7aSs9Nyl7CisgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgdHJhbnMxPW5ldyBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvcihEYXRhW2krMF0sdHJ1ZSwgbnVsbCk7CisgICAgICAgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSl7CisgICAgICAgICAgICAgICAgZXJybG4oIlVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKHBhdHRlcm4xLCB0cnVlLCBudWxsKSBjb25zdHJ1Y3Rpb24gZmFpbGVkIHdpdGggcGF0dGVybiA9IiAKKyAgICAgICAgICAgICAgICAgICsgRGF0YVtpKzBdICsgIkV4Y2VwdGlvbjoiICsgaWFlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0VHJhbnNsaXQodHJhbnMxLCAiIiwgRGF0YVtpKzFdLCBJbnRlZ2VyLnBhcnNlSW50KERhdGFbaSsyXSksIAorICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KERhdGFbaSszXSksIEludGVnZXIucGFyc2VJbnQoRGF0YVtpKzRdKSwgCisgICAgICAgICAgICAgICAgICAgICAgIERhdGFbaSs1XSApOworICAgICAgICAKKyAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICB0cmFuczI9bmV3IFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKERhdGFbaSswXSwgdHJ1ZSwgVW5pRmlsdGVyKTsKKyAgICAgICAgICAgIH1jYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKXsKKyAgICAgICAgICAgICAgICBlcnJsbigiVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IocGF0dGVybjEsIHRydWUsIFVuaWNvZGVGaWx0ZXIpIGNvbnN0cnVjdGlvbiBmYWlsZWQgd2l0aCBwYXR0ZXJuID0iIAorICAgICAgICAgICAgICAgICAgKyAgRGF0YVtpKzBdICsgIiB3aXRoIGZpbHRlcihhLGMpLiAgRXhjZXB0aW9uOiIgKyBpYWUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3RUcmFuc2xpdCh0cmFuczIsICIgd2l0aCBmaWx0ZXIoYSxBLGMsQykiLCBEYXRhW2krMV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci5wYXJzZUludChEYXRhW2krMl0pLCBJbnRlZ2VyLnBhcnNlSW50KERhdGFbaSszXSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci5wYXJzZUludChEYXRhW2krNF0pLCBEYXRhW2krNl0gKTsKKyAgICAgICAgfQorCisgICAgfSAKKyAgICAgICAgCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gU3VwcG9ydCBtZXRob2RzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0VHJhbnNsaXQoVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBzb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGludCBsaW1pdCwgaW50IGN1cnNvciwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpeworICAgIAorCisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHJzb3VyY2UgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoc291cmNlKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24gaW5kZXggPSBuZXcgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24oc3RhcnQsIGxpbWl0LCBjdXJzb3IsIGxpbWl0KTsKKyAgICAgICAgdC50cmFuc2xpdGVyYXRlKHJzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgdC5maW5pc2hUcmFuc2xpdGVyYXRpb24ocnNvdXJjZSwgaW5kZXgpOworICAgICAgICBTdHJpbmcgcmVzdWx0PXJzb3VyY2UudG9TdHJpbmcoKTsKKyAgICAgICAgZXhwZWN0QXV4KHQuZ2V0SUQoKSArICI6a2V5Ym9hcmQgIiArIG1lc3NhZ2UsIHNvdXJjZSArICItPiIgKyByZXN1bHQsIHJlc3VsdC5lcXVhbHMoZXhwZWN0ZWRSZXN1bHQpLCBleHBlY3RlZFJlc3VsdCk7CisgICAgfQorICAgIHByaXZhdGUgdm9pZCBleHBlY3RQYXR0ZXJuKFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yIHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGF0dGVybiwgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGV4cGVjdGVkUmVzdWx0KXsKKworICAgICAgICB0cnl7CisgICAgICAgICAgICB0LmFwcGx5UGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAgfWNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpeworICAgICAgICAgICAgaWYoZXhwZWN0ZWRSZXN1bHQuZXF1YWxzKCJGQUlMIikpeworICAgICAgICAgICAgICAgIGxvZ2xuKCJPSzogY2FsbGluZyBhcHBseVBhdHRlcm4oKSB3aXRoIGlsbGVnYWwgcGF0dGVybiBmYWlsZWQgYXMgZXhwZWN0ZWQuIiArIGlhZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0gZWxzZXsKKyAgICAgICAgICAgICAgICBlcnJsbigiRkFJTDogYXBwbHlQYXR0ZXJuKCkgZmFpbGVkIHdpdGggcGF0dGVybiA9IiArIHBhdHRlcm4gKyAiLS0tPiIgKyBpYWUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYoIWV4cGVjdGVkUmVzdWx0LmVxdWFscygiRkFJTCIpKXsKKyAgICAgICAgICAgIGlmKCF0LnRvUGF0dGVybigpLmVxdWFscyhwYXR0ZXJuKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJGQUlMOiBhcHBseVBhdHRlcm4gb3IgdG9QYXR0ZW4gZmFpbGVkLiAgRXhwZWN0ZWQ6ICIgKyBwYXR0ZXJuICsgIkdvdDogIiArIHQudG9QYXR0ZXJuKCkpOworICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgbG9nbG4oIk9LOiBhcHBseVBhdHRlcm4gcGFzc2VkLiBUZXN0aW5nIHRyYW5zbGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgICAgIGV4cGVjdCh0LCAiIHdpdGggcGF0dGVybiAiK3BhdHRlcm4sIHNvdXJjZSwgZXhwZWN0ZWRSZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHByaXZhdGUgdm9pZCBleHBlY3QoVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IgdCwgIFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgc291cmNlLCBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHsKKyAgICAKKyAgICAgICAgU3RyaW5nIHJlc3VsdD10LnRyYW5zbGl0ZXJhdGUoc291cmNlKTsKKyAgICAgICAgZXhwZWN0QXV4KHQuZ2V0SUQoKSArICI6U3RyaW5nICIgKyBtZXNzYWdlLCBzb3VyY2UgKyAiLT4iICsgcmVzdWx0LCByZXN1bHQuZXF1YWxzKGV4cGVjdGVkUmVzdWx0KSwgZXhwZWN0ZWRSZXN1bHQpOworCisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHJzb3VyY2UgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoc291cmNlKTsKKyAgICAgICAgdC50cmFuc2xpdGVyYXRlKHJzb3VyY2UpOworICAgICAgICByZXN1bHQgPSByc291cmNlLnRvU3RyaW5nKCk7CisgICAgICAgIGV4cGVjdEF1eCh0LmdldElEKCkgKyAiOlJlcGxhY2VhYmxlIiArIG1lc3NhZ2UsIHNvdXJjZSArICItPiIgKyByZXN1bHQsIHJlc3VsdC5lcXVhbHMoZXhwZWN0ZWRSZXN1bHQpLCBleHBlY3RlZFJlc3VsdCk7CisKKyAgICAgICAgLy8gVGVzdCBrZXlib2FyZCAoaW5jcmVtZW50YWwpIHRyYW5zbGl0ZXJhdGlvbiAtLSB0aGlzIHJlc3VsdAorICAgICAgICAvLyBtdXN0IGJlIHRoZSBzYW1lIGFmdGVyIHdlIGZpbmFsaXplIChzZWUgYmVsb3cpLgorICAgICAgICByc291cmNlLnJlcGxhY2UoMCwgcnNvdXJjZS5sZW5ndGgoKSwgIiIpOworICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBpbmRleCA9IG5ldyBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbigpOworICAgICAgICBTdHJpbmdCdWZmZXIgbG9nID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzb3VyY2UubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgIT0gMCkgeworICAgICAgICAgICAgICAgIGxvZy5hcHBlbmQoIiArICIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nLmFwcGVuZChzb3VyY2UuY2hhckF0KGkpKS5hcHBlbmQoIiAtPiAiKTsKKyAgICAgICAgICAgIHQudHJhbnNsaXRlcmF0ZShyc291cmNlLCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihzb3VyY2UuY2hhckF0KGkpKSk7CisgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHN0cmluZyBidWZmZXIgd2l0aCBhIHZlcnRpY2FsIGJhciAnfCcgd2hlcmUKKyAgICAgICAgICAgIC8vIHRoZSBjb21taXR0ZWQgaW5kZXggaXMuCisgICAgICAgICAgICBTdHJpbmcgcyA9IHJzb3VyY2UudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGxvZy5hcHBlbmQocy5zdWJzdHJpbmcoMCwgaW5kZXguc3RhcnQpKS4KKyAgICAgICAgICAgICAgICBhcHBlbmQoJ3wnKS4KKyAgICAgICAgICAgICAgICBhcHBlbmQocy5zdWJzdHJpbmcoaW5kZXguc3RhcnQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXMgYSBmaW5hbCBzdGVwIGluIGtleWJvYXJkIHRyYW5zbGl0ZXJhdGlvbiwgd2UgbXVzdCBjYWxsCisgICAgICAgIC8vIHRyYW5zbGl0ZXJhdGUgdG8gZmluaXNoIG9mZiBhbnkgcGVuZGluZyBwYXJ0aWFsIG1hdGNoZXMgdGhhdAorICAgICAgICAvLyB3ZXJlIHdhaXRpbmcgZm9yIG1vcmUgaW5wdXQuCisgICAgICAgIHQuZmluaXNoVHJhbnNsaXRlcmF0aW9uKHJzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgcmVzdWx0ID0gcnNvdXJjZS50b1N0cmluZygpOworICAgICAgICBsb2cuYXBwZW5kKCIgPT4gIikuYXBwZW5kKHJzb3VyY2UudG9TdHJpbmcoKSk7CisgICAgICAgIGV4cGVjdEF1eCh0LmdldElEKCkgKyAiOktleWJvYXJkIiwgbG9nLnRvU3RyaW5nKCkgKyAiXG4iICsgc291cmNlICsgIiAtPiAiICsgcmVzdWx0LCByZXN1bHQuZXF1YWxzKGV4cGVjdGVkUmVzdWx0KSwgZXhwZWN0ZWRSZXN1bHQpOworCisgICAgfQorICAgIHByaXZhdGUgdm9pZCBleHBlY3RBdXgoU3RyaW5nIHRhZywgU3RyaW5nIHN1bW1hcnksIGJvb2xlYW4gcGFzcywgIFN0cmluZyBleHBlY3RlZFJlc3VsdCkgeworICAgICAgICBpZiAocGFzcykgeworICAgICAgICAgICAgbG9nbG4oIigiICsgdGFnICsgIikgIiArIFV0aWxpdHkuZXNjYXBlKHN1bW1hcnkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycmxuKCJGQUlMOiAoIiArIHRhZysgIikgIgorICAgICAgICAgICAgICAgICsgVXRpbGl0eS5lc2NhcGUoc3VtbWFyeSkKKyAgICAgICAgICAgICAgICArICIsIGV4cGVjdGVkICIgKyBVdGlsaXR5LmVzY2FwZShleHBlY3RlZFJlc3VsdCkpOworICAgICAgICB9CisgICAgfSAgCit9CisKKworCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvV3JpdGVDaGFydHMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9Xcml0ZUNoYXJ0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3MGVmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdHJhbnNsaXQvV3JpdGVDaGFydHMuamF2YQpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L1dyaXRlQ2hhcnRzLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wNi8yMCAwMToxNjo0OCAkCisgKiAkUmV2aXNpb246IDEuMTUgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisgCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnRyYW5zbGl0OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CisvL2ltcG9ydCBqYXZhLnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLmlvLio7CisKK3B1YmxpYyBjbGFzcyBXcml0ZUNoYXJ0cyB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBwcmludFNldCgiW1tcdTAwMDAtXHUwMDdFIFx1MzBBMS1cdTMwRkMgXHVGRjYxLVx1RkY5Rlx1MzAwMVx1MzAwMl1bOkthdGFrYW5hOl1bOk1hcms6XV0iKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdGVzdFNldCA9ICIiOworICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkgYXJncyA9IGdldEFsbFNjcmlwdHMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisgICAgLy8gRW51bWVyYXRpb24gZW51bSA9IFRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZUlEcygpOworICAgICAgICAgICAgaWYgKGFyZ3NbaV0uc3RhcnRzV2l0aCgiWyIpKSB7CisgICAgICAgICAgICAgICAgdGVzdFNldCA9IGFyZ3NbaV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50KHRlc3RTZXQsIGFyZ3NbaV0pOworICAgICAgICAgICAgICAgIHRlc3RTZXQgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTZXQoU3RyaW5nIHNvdXJjZSkgeworICAgICAgICBVbmljb2RlU2V0IHMgPSBuZXcgVW5pY29kZVNldChzb3VyY2UpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByaW50b3V0IGZvciAnIiArIHNvdXJjZSArICInIik7CisgICAgICAgIGludCBjb3VudCA9IHMuZ2V0UmFuZ2VDb3VudCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGludCBzdGFydCA9IHMuZ2V0UmFuZ2VTdGFydChpKTsKKyAgICAgICAgICAgIGludCBlbmQgPSBzLmdldFJhbmdlRW5kKGkpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEludGVnZXIudG9TdHJpbmcoc3RhcnQsMTYpICsgIi4uIiArIEludGVnZXIudG9TdHJpbmcoZW5kLDE2KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTY3JpcHRzKCkgeworICAgICAgICBTZXQgc2V0ID0gbmV3IFRyZWVTZXQoKTsKKyAgICAgICAgaW50IHNjcmlwdHNbXTsKKyAgICAgICAgRW51bWVyYXRpb24gc291cmNlcyA9IFRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZVNvdXJjZXMoKTsKKyAgICAgICAgd2hpbGUoc291cmNlcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZSA9IChTdHJpbmcpIHNvdXJjZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNjcmlwdHMgPSBVU2NyaXB0LmdldENvZGUoc291cmNlKTsKKyAgICAgICAgICAgIGlmIChzY3JpcHRzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTa2lwcGluZyAiICsgc291cmNlICsgIl0iKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBzb3VyY2VTY3JpcHQgPSBzY3JpcHRzWzBdOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTb3VyY2U6ICIgKyBzb3VyY2UgKyAiO1x0U2NyaXB0czogIiArIHNob3dTY3JpcHRzKHNjcmlwdHMpKTsKKyAgICAgICAgICAgIEVudW1lcmF0aW9uIHRhcmdldHMgPSBUcmFuc2xpdGVyYXRvci5nZXRBdmFpbGFibGVUYXJnZXRzKHNvdXJjZSk7CisgICAgICAgICAgICB3aGlsZSh0YXJnZXRzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdldCA9IChTdHJpbmcpIHRhcmdldHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBzY3JpcHRzID0gVVNjcmlwdC5nZXRDb2RlKHRhcmdldCk7CisgICAgICAgICAgICAgICAgaWYgKHNjcmlwdHMgPT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJpb3JpdHkoc2NyaXB0c1swXSkgPCBwcmlvcml0eShzb3VyY2VTY3JpcHQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgZG9pbmcgYm90aCBkaXJlY3Rpb25zCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NraXBwaW5nICciICsgc291cmNlICsgIi0iICsgdGFyZ2V0ICsgIiddIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlx0VGFyZ2V0OiAiICsgdGFyZ2V0ICsgIjtcdFNjcmlwdHM6ICIgKyBzaG93U2NyaXB0cyhzY3JpcHRzKSk7CisgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gdmFyaWFudHMgPSBUcmFuc2xpdGVyYXRvci5nZXRBdmFpbGFibGVWYXJpYW50cyhzb3VyY2UsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgd2hpbGUodmFyaWFudHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhcmlhbnQgPSAoU3RyaW5nKSB2YXJpYW50cy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSBzb3VyY2UgKyAiLSIgKyB0YXJnZXQ7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lmxlbmd0aCgpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkICs9ICIvIiArIHZhcmlhbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNLSVBQSU5HIFZBUklBTlQsIFNJTkNFIElUIENVUlJFTlRMWSBCUkVBS1MhXHQiICsgaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXHRcdFx0XHRBZGRpbmc6ICciICsgaWQgKyAiJyIpOworICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKGlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nW10gcmVzdWx0cyA9IG5ldyBTdHJpbmdbc2V0LnNpemUoKV07CisgICAgICAgIHNldC50b0FycmF5KHJlc3VsdHMpOworICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBwdWJsaWMgaW50IHByaW9yaXR5KGludCBzY3JpcHQpIHsKKyAgICAgICAgaWYgKHNjcmlwdCA9PSBVU2NyaXB0LkxBVElOKSByZXR1cm4gLTI7CisgICAgICAgIHJldHVybiBzY3JpcHQ7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHNob3dTY3JpcHRzKGludFtdIHNjcmlwdHMpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgIT0gMCkgcmVzdWx0cy5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChVU2NyaXB0LmdldE5hbWUoc2NyaXB0c1tpXSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHRzLnRvU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludChTdHJpbmcgdGVzdFNldCwgU3RyaW5nIHJhd0lkKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3NpbmcgIiArIHJhd0lkKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKHJhd0lkKTsKKyAgICAgICAgU3RyaW5nIGlkID0gdC5nZXRJRCgpOworICAgICAgICAKKyAgICAgICAgLy8gY2xlYW4gdXAgSURzLiBPdWdodCB0byBiZSBBUEkgZm9yIGdldHRpbmcgc291cmNlLCB0YXJnZXQsIHZhcmlhbnQKKyAgICAgICAgaW50IG1pbnVzUG9zID0gaWQuaW5kZXhPZignLScpOworICAgICAgICBTdHJpbmcgc291cmNlID0gaWQuc3Vic3RyaW5nKDAsbWludXNQb3MpOworICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gaWQuc3Vic3RyaW5nKG1pbnVzUG9zKzEpOworICAgICAgICBpbnQgc2xhc2hQb3MgPSB0YXJnZXQuaW5kZXhPZignLycpOworICAgICAgICBpZiAoc2xhc2hQb3MgPj0gMCkgdGFyZ2V0ID0gdGFyZ2V0LnN1YnN0cmluZygwLHNsYXNoUG9zKTsKKyAgICAgICAgCisgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNvdXJjZSBpcyBhIHNjcmlwdAorICAgICAgICBpZiAodGVzdFNldC5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICBpbnRbXSBzY3JpcHRzID0gVVNjcmlwdC5nZXRDb2RlKHNvdXJjZSk7CisgICAgICAgICAgICBpZiAoc2NyaXB0cyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQ6ICIgCisgICAgICAgICAgICAgICAgICAgICsgVHJhbnNsaXRlcmF0b3IuZ2V0RGlzcGxheU5hbWUoaWQpCisgICAgICAgICAgICAgICAgICAgICsgIiBkb2VzIG5vdCBoYXZlIGEgc2NyaXB0IGFzIHRoZSBzb3VyY2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRlc3RTZXQgPSAiWzoiICsgc291cmNlICsgIjpdIjsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLmVxdWFsc0lnbm9yZUNhc2UoImthdGFrYW5hIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdFNldCA9ICJbIiArIHRlc3RTZXQgKyAiXHUzMEZDXSI7CisgICAgICAgICAgICAgICAgICAgIHByaW50U2V0KHRlc3RTZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBVbmljb2RlU2V0IHNvdXJjZVNldCA9IG5ldyBVbmljb2RlU2V0KHRlc3RTZXQpOworCisgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIHRhcmdldCBpcyBhIHNjcmlwdAorICAgICAgICBpbnRbXSBzY3JpcHRzID0gVVNjcmlwdC5nZXRDb2RlKHRhcmdldCk7CisgICAgICAgIGlmIChzY3JpcHRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHRhcmdldCA9ICJbOkxhdGluOl0iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0ID0gIls6IiArIHRhcmdldCArICI6XSI7CisgICAgICAgIH0KKyAgICAgICAgVW5pY29kZVNldCB0YXJnZXRTZXQgPSBuZXcgVW5pY29kZVNldCh0YXJnZXQpOyAgICAgICAgCisgICAgICAgIAorICAgICAgICBUcmFuc2xpdGVyYXRvciBpbnZlcnNlID0gdC5nZXRJbnZlcnNlKCk7CisgICAgICAgIAorICAgICAgICAvL1RyYW5zbGl0ZXJhdG9yIGhleCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJBbnktSGV4Iik7CisgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggc2NyaXB0CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNsaXRlcmF0aW5nICIgKyBzb3VyY2VTZXQudG9QYXR0ZXJuKHRydWUpIAorICAgICAgICAgICAgKyAiIHdpdGggIiArIFRyYW5zbGl0ZXJhdG9yLmdldERpc3BsYXlOYW1lKGlkKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIFVuaWNvZGVTZXQgbGVmdE92ZXJTZXQgPSBuZXcgVW5pY29kZVNldCh0YXJnZXRTZXQpOworICAgICAgICBVbmljb2RlU2V0IHByaXZhdGVVc2UgPSBuZXcgVW5pY29kZVNldCgiWzpwcml2YXRlIHVzZTpdIik7CisgICAgICAgICAgICAKKyAgICAgICAgTWFwIG1hcCA9IG5ldyBUcmVlTWFwKCk7CisgICAgICAgIAorICAgICAgICBVbmljb2RlU2V0IHRhcmdldFNldFBsdXNBbnl3YXlzID0gbmV3IFVuaWNvZGVTZXQodGFyZ2V0U2V0KTsKKyAgICAgICAgdGFyZ2V0U2V0UGx1c0FueXdheXMuYWRkQWxsKG9rQW55d2F5KTsKKyAgICAgICAgCisgICAgICAgIFVuaWNvZGVTZXQgc291cmNlU2V0UGx1c0FueXdheXMgPSBuZXcgVW5pY29kZVNldChzb3VyY2VTZXQpOworICAgICAgICBzb3VyY2VTZXRQbHVzQW55d2F5cy5hZGRBbGwob2tBbnl3YXkpOworICAgICAgICAKKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIHVzaSA9IG5ldyBVbmljb2RlU2V0SXRlcmF0b3Ioc291cmNlU2V0KTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh1c2kubmV4dCgpKSB7CisgICAgICAgICAgICBpbnQgaiA9IHVzaS5jb2RlcG9pbnQ7CisgICAgICAgICAgICAvKgorICAgICAgICBpbnQgY291bnQgPSBzb3VyY2VTZXQuZ2V0UmFuZ2VDb3VudCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGludCBlbmQgPSBzb3VyY2VTZXQuZ2V0UmFuZ2VFbmQoaSk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gc291cmNlU2V0LmdldFJhbmdlU3RhcnQoaSk7IGogPD0gZW5kOyArK2opIHsKKyAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgU3RyaW5nIGZsYWcgPSAiIjsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3MgPSBVVEYxNi52YWx1ZU9mKGopOworICAgICAgICAgICAgICAgIFN0cmluZyB0cyA9IHQudHJhbnNsaXRlcmF0ZShzcyk7CisgICAgICAgICAgICAgICAgY2hhciBncm91cCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRTZXRQbHVzQW55d2F5cy5jb250YWluc0FsbCh0cykpIHsKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgfD0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFVURjE2LmNvdW50Q29kZVBvaW50KHRzKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGxlZnRPdmVyU2V0LnJlbW92ZShVVEYxNi5jaGFyQXQodHMsMCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTdHJpbmcgcnQgPSBpbnZlcnNlLnRyYW5zbGl0ZXJhdGUodHMpOworICAgICAgICAgICAgICAgIGlmICghc291cmNlU2V0UGx1c0FueXdheXMuY29udGFpbnNBbGwocnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGdyb3VwIHw9IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3MuZXF1YWxzKHJ0KSkgeworICAgICAgICAgICAgICAgICAgICBncm91cCB8PSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVVc2UuY29udGFpbnNOb25lKHRzKSB8fCAhcHJpdmF0ZVVzZS5jb250YWluc05vbmUocnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGdyb3VwIHw9IDE2OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwLnB1dChncm91cCArIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoTm9ybWFsaXplci5ub3JtYWxpemUoc3MsIE5vcm1hbGl6ZXIuTkZLRCkpCisgICAgICAgICAgICAgICAgICAgICAgICArICJcdTAwMDAiICsgc3MsIAorICAgICAgICAgICAgICAgICAgICAiPHRkIGNsYXNzPSdzJz4iICsgc3MgKyAiPGJyPjx0dD4iICsgaGV4KHNzKQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC90dD48L3RkPjx0ZCBjbGFzcz0ndCc+IiArIHRzICsgIjxicj48dHQ+IiArIGhleCh0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvdHQ+PC90ZD48dGQgY2xhc3M9J3InPiIgKyBydCArICI8YnI+PHR0PiIgKyBoZXgocnQpICsgIjwvdHQ+PC90ZD4iICk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgRHVhbHMKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGludCBtYXhEdWFsID0gMjAwOworICAgICAgICAgICAgICBkdWFsOgorICAgICAgICAgICAgICAgIGZvciAoaW50IGkyID0gMDsgaTIgPCBjb3VudDsgKytpMikgeworICAgICAgICAgICAgICAgICAgICBpbnQgZW5kMiA9IHNvdXJjZVNldC5nZXRSYW5nZUVuZChpMik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGoyID0gc291cmNlU2V0LmdldFJhbmdlU3RhcnQoaTIpOyBqMiA8PSBlbmQ7ICsrajIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzczIgPSBVVEYxNi52YWx1ZU9mKGoyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0czIgPSB0LnRyYW5zbGl0ZXJhdGUoc3MyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBydDIgPSBpbnZlcnNlLnRyYW5zbGl0ZXJhdGUodHMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNzMTIgPSBzcyArIHNzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0czEyID0gdC50cmFuc2xpdGVyYXRlKHNzICsgc3MxMik7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcnQxMiA9IGludmVyc2UudHJhbnNsaXRlcmF0ZSh0czEyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0czEyLmVxdWFscyh0cyArIHRzMikgJiYgcnQxMi5lcXVhbHMocnQgKyBydDIpKSBjb250aW51ZTsgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLW1heER1YWwgPCAwKSBicmVhayBkdWFsOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2xpdGVyYXRpb24gb2Ygd2hvbGUgZGlmZmVycyBmcm9tIHRoYXQgb2YgcGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gMHgxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXAucHV0KGdyb3VwICsgVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShOb3JtYWxpemVyLm5vcm1hbGl6ZShzczEyLCBOb3JtYWxpemVyLkRFQ09NUF9DT01QQVQsIDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJcdTAwMDAiICsgc3MxMiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz0ncyc+IiArIHNzMTIgKyAiPGJyPjx0dD4iICsgaGV4KHNzMTIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvdHQ+PC90ZD48dGQgY2xhc3M9J3QnPiIgKyB0czEyICsgIjxicj48dHQ+IiArIGhleCh0czEyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICI8L3R0PjwvdGQ+PHRkIGNsYXNzPSdyJz4iICsgcnQxMiArICI8YnI+PHR0PiIgKyBoZXgocnQxMikgKyAiPC90dD48L3RkPiIgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLy99CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBsZWZ0T3ZlclNldC5yZW1vdmUoMHgwMTAwLDB4MDJGRik7IC8vIHJlbW92ZSBleHRlbmRlZCAmIElQQQorICAgICAgICAKKyAgICAgICAgLyppbnQgY291bnQgPSBsZWZ0T3ZlclNldC5nZXRSYW5nZUNvdW50KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgaW50IGVuZCA9IGxlZnRPdmVyU2V0LmdldFJhbmdlRW5kKGkpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IGxlZnRPdmVyU2V0LmdldFJhbmdlU3RhcnQoaSk7IGogPD0gZW5kOyArK2opIHsKKyAgICAgICAgICAgICovCisgICAgICAgICAgICAKKyAgICAgICAgdXNpLnJlc2V0KGxlZnRPdmVyU2V0KTsKKyAgICAgICAgd2hpbGUgKHVzaS5uZXh0KCkpIHsKKyAgICAgICAgICAgIGludCBqID0gdXNpLmNvZGVwb2ludDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cmluZyB0cyA9IFVURjE2LnZhbHVlT2Yoaik7CisgICAgICAgICAgICAgICAgLy8gU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKHRzLCBOb3JtYWxpemVyLkRFQ09NUF9DT01QQVQsIDApOworICAgICAgICAgICAgICAgIC8vIGlmICghZGVjb21wLmVxdWFscyh0cykpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cmluZyBydCA9IGludmVyc2UudHJhbnNsaXRlcmF0ZSh0cyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZsYWcgPSAiIjsKKyAgICAgICAgICAgICAgICBjaGFyIGdyb3VwID0gMHg4MDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VTZXRQbHVzQW55d2F5cy5jb250YWluc0FsbChydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgfD0gODsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwcml2YXRlVXNlLmNvbnRhaW5zTm9uZShydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgfD0gMTY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXAucHV0KGdyb3VwICsgVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShOb3JtYWxpemVyLm5vcm1hbGl6ZSh0cywgTm9ybWFsaXplci5ORktEKSkgKyB0cywgCisgICAgICAgICAgICAgICAgICAgICI8dGQgY2xhc3M9J3MnPi08L3RkPjx0ZCBjbGFzcz0ndCc+IiArIHRzICsgIjxicj48dHQ+IiArIGhleCh0cykKKyAgICAgICAgICAgICAgICAgICAgKyAiPC90dD48L3RkPjx0ZCBjbGFzcz0ncic+IgorICAgICAgICAgICAgICAgICAgICArIHJ0ICsgIjxicj48dHQ+IiArIGhleChydCkgKyAiPC90dD48L3RkPiIpOworICAgICAgICAgICAgLy99CisgICAgICAgIH0KKworICAgICAgICAvLyBtYWtlIGZpbGUgbmFtZSBhbmQgb3BlbgorICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZSgidHJhbnNsaXRlcmF0aW9uL2NoYXJ0XyIgKyBpZC5yZXBsYWNlKCcvJywgJ18nKSArICIuaHRtbCIpOworICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBmLmdldENhbm9uaWNhbEZpbGUoKS50b1N0cmluZygpOworICAgICAgICBQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoCisgICAgICAgICAgICBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAorICAgICAgICAgICAgICAgIG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lKSwgIlVURi04IikpOworICAgICAgICAvL291dC5wcmludCgnXHVGRUZGJyk7IC8vIEJPTQorICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcml0aW5nICIgKyBmaWxlbmFtZSk7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU5cIj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8SFRNTD48SEVBRD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8TUVUQSBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+PC9IRUFEPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0naHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvdWNhL2NoYXJ0cy5jc3MnIHR5cGU9J3RleHQvY3NzJz4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxCT0RZPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5UcmFuc2xpdGVyYXRpb24gU2FtcGxlcyBmb3IgJyIgKyBUcmFuc2xpdGVyYXRvci5nZXREaXNwbGF5TmFtZShpZCkgKyAiJzwvaDE+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHA+VGhpcyBmaWxlIGlsbHVzdHJhdGVzIHRoZSB0cmFuc2xpdGVyYXRpb25zIG9mICIgKyBUcmFuc2xpdGVyYXRvci5nZXREaXNwbGF5TmFtZShpZCkgKyAiLiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIlRoZSBzYW1wbGVzIGFyZSBtZWNoYW5pY2FsbHkgZ2VuZXJhdGVkLCBhbmQgb25seSBpbmNsdWRlIHNpbmdsZSBjaGFyYWN0ZXJzIik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiZnJvbSB0aGUgc291cmNlIHNldC4gVGh1cyBpdCB3aWxsIDxpPm5vdDwvaT4gY29udGFpbiBleGFtcGxlcyB3aGVyZSB0aGUgdHJhbnNsaXRlcmF0aW9uIik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiZGVwZW5kcyBvbiB0aGUgY29udGV4dCBhcm91bmQgdGhlIGNoYXJhY3Rlci4gRm9yIGEgbW9yZSBkZXRhaWxlZCAtLSBhbmQgaW50ZXJhY3RpdmUgLS0gZXhhbXBsZSwgc2VlIHRoZSIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxhIGhyZWY9J2h0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jZ2ktYmluL2ljdS90cic+VHJhbnNsaXRlcmF0aW9uIERlbW88L2E+PC9wPjxocj4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gc2V0IHVwIHRoZSBoZWFkZXJzCisgICAgICAgICAgICBpbnQgY29sdW1uQ291bnQgPSAzOworICAgICAgICAgICAgU3RyaW5nIGhlYWRlckJhc2UgPSAiPHRoPlNvdXJjZTwvdGg+PHRoPlRhcmdldDwvdGg+PHRoPlJldHVybjwvdGg+IjsKKyAgICAgICAgICAgIFN0cmluZyBoZWFkZXJzID0gaGVhZGVyQmFzZTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBjb2x1bW5Db3VudCAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSBjb2x1bW5Db3VudCAtIDEpIGhlYWRlcnMgKz0gIjx0aD4mbmJzcDs8L3RoPiI7CisgICAgICAgICAgICAgICAgaGVhZGVycyArPSBoZWFkZXJCYXNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgdGFibGVIZWFkZXIgPSAiPHA+PHRhYmxlIGJvcmRlcj0nMSc+PHRyPiIgKyBoZWFkZXJzICsgIjwvdHI+IjsKKyAgICAgICAgICAgIFN0cmluZyB0YWJsZUZvb3RlciA9ICI8L3RhYmxlPjwvcD4iOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMj5Sb3VuZCBUcmlwPC9oMj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKHRhYmxlSGVhZGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSXRlcmF0b3IgaXQgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIGNoYXIgbGFzdEdyb3VwID0gMDsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICBpbnQgY29sdW1uID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworICAgICAgICAgICAgICAgIGNoYXIgZ3JvdXAgPSBrZXkuY2hhckF0KDApOworICAgICAgICAgICAgICAgIGlmIChncm91cCAhPSBsYXN0R3JvdXAgfHwgY291bnQrKyA+IDUwKSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RHcm91cCA9IGdyb3VwOworICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4gIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdHI+Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKHRhYmxlRm9vdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9ICIiOworICAgICAgICAgICAgICAgICAgICBpZiAoKGdyb3VwICYgMHgxMDApICE9IDApIG91dC5wcmludGxuKCI8aHI+PGgyPkR1YWxzPC9oMj4iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGdyb3VwICYgMHg4MCkgIT0gMCkgb3V0LnByaW50bG4oIjxocj48aDI+Q29tcGxldGVuZXNzPC9oMj4iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBvdXQucHJpbnRsbigiPGhyPjxoMj5Sb3VuZCBUcmlwPC9oMj4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChncm91cCAmIDE2KSAhPSAwKSBvdXQucHJpbnRsbigiPGgzPkVycm9yczogQ29udGFpbnMgUHJpdmF0ZSBVc2UgQ2hhcmFjdGVyczwvaDM+Iik7CisgICAgICAgICAgICAgICAgICAgIGlmICgoZ3JvdXAgJiA4KSAhPSAwKSBvdXQucHJpbnRsbigiPGgzPlBvc3NpYmxlIEVycm9yczogUmV0dXJuIG5vdCBpbiBTb3VyY2UgU2V0PC9oMz4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChncm91cCAmIDQpICE9IDApIG91dC5wcmludGxuKCI8aDM+T25lLVdheSBNYXBwaW5nOiBSZXR1cm4gbm90IGVxdWFsIHRvIFNvdXJjZTwvaDM+Iik7CisgICAgICAgICAgICAgICAgICAgIGlmICgoZ3JvdXAgJiAyKSAhPSAwKSBvdXQucHJpbnRsbigiPGgzPkVycm9yczogUmV0dXJuIG5vdCBpbiBTb3VyY2UgU2V0PC9oMz4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChncm91cCAmIDEpICE9IDApIG91dC5wcmludGxuKCI8aDM+RXJyb3JzOiBUYXJnZXQgbm90IGluIFRhcmdldCBTZXQ8L2gzPiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbih0YWJsZUhlYWRlcik7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IChTdHJpbmcpIG1hcC5nZXQoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoY29sdW1uKysgPT0gMCkgb3V0LnByaW50KCI8dHI+Iik7CisgICAgICAgICAgICAgICAgZWxzZSBvdXQucHJpbnQoIjx0aD4mbmJzcDs8L3RoPiIpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoY29sdW1uID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdHI+Iik7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbHVtbiAhPSAwKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdHI+Iik7CisgICAgICAgICAgICAgICAgY29sdW1uID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludGxuKHRhYmxlRm9vdGVyICsgIjwvQk9EWT48L0hUTUw+Iik7CisgICAgICAgICAgICAKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGhleChTdHJpbmcgcykgeworICAgICAgICBpbnQgY3A7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHRzID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7IGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGNwKSkgeworICAgICAgICAgICAgY3AgPSBVVEYxNi5jaGFyQXQocywgaSk7CisgICAgICAgICAgICBpZiAoaSAhPSAwKSByZXN1bHRzLmFwcGVuZCgnICcpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoSW50ZWdlci50b0hleFN0cmluZyhjcCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHRzLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGZpbmFsIFVuaWNvZGVTZXQgb2tBbnl3YXkgPSBuZXcgVW5pY29kZVNldCgiW15bOkxldHRlcjpdXSIpOworICAgIAorICAgIC8qCisgICAgLy8gdGVzdHMgd2hldGhlciBhIHN0cmluZyBpcyBpbiBhIHNldC4gQWxzbyBjaGVja3MgZm9yIENvbW1vbiBhbmQgSW5oZXJpdGVkCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSW4oU3RyaW5nIHMsIFVuaWNvZGVTZXQgc2V0KSB7CisgICAgICAgIGludCBjcDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpICs9IFVURjE2LmdldENoYXJDb3VudChpKSkgeworICAgICAgICAgICAgY3AgPSBVVEYxNi5jaGFyQXQocywgaSk7CisgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKGNwKSkgY29udGludWU7CisgICAgICAgICAgICBpZiAob2tBbnl3YXkuY29udGFpbnMoY3ApKSBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgKi8KKyAgICAKK30KKyAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3RyYW5zbGl0L3BhY2thZ2UuaHRtbCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzliNTYwYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC90cmFuc2xpdC9wYWNrYWdlLmh0bWwsdiAkCisgICRSZXZpc2lvbjogMS4xICQKKyAgJERhdGU6IDIwMDAvMDMvMTUgMjE6MzU6NTEgJAorLS0+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSI+CitUcmFuc2xpdGVyYXRvciB0ZXN0cy4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9Db21wYWN0QXJyYXlUZXN0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9Db21wYWN0QXJyYXlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4ZGZmOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL0NvbXBhY3RBcnJheVRlc3QuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvQ29tcGFjdEFycmF5VGVzdC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTIgMjA6MjY6MzkgJAorICogJFJldmlzaW9uOiAxLjEgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnV0aWw7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkNvbXBhY3RCeXRlQXJyYXk7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5Db21wYWN0Q2hhckFycmF5OworCisvKioKKyAqIEBzaW5jZSByZWxlYXNlIDIuMgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29tcGFjdEFycmF5VGVzdCBleHRlbmRzIFRlc3RGbXdrIAoreyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBuZXcgQ29tcGFjdEFycmF5VGVzdCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEJ5dGVBcnJheUNvdmVyYWdlKCkgeworCUNvbXBhY3RCeXRlQXJyYXkgY2JhID0gbmV3IENvbXBhY3RCeXRlQXJyYXkoKTsKKwljYmEuc2V0RWxlbWVudEF0KChjaGFyKTB4NSwgKGJ5dGUpMHhkZik7CisJY2JhLnNldEVsZW1lbnRBdCgoY2hhcikweDEwNSwgKGJ5dGUpMHhkZik7CisJY2JhLnNldEVsZW1lbnRBdCgoY2hhcikweDIwNSwgKGJ5dGUpMHhkZik7CisJY2JhLnNldEVsZW1lbnRBdCgoY2hhcikweDMwNSwgKGJ5dGUpMHhkZik7CisJQ29tcGFjdEJ5dGVBcnJheSBjYmEyID0gbmV3IENvbXBhY3RCeXRlQXJyYXkoKGJ5dGUpMHhkZik7CisJaWYgKGNiYS5lcXVhbHMoY2JhMikpIHsKKwkgICAgZXJybG4oInVuZXF1YWwgYnl0ZSBhcnJheXMgY29tcGFyZSBlcXVhbCIpOworCX0KKwlDb21wYWN0Qnl0ZUFycmF5IGNiYTMgPSAoQ29tcGFjdEJ5dGVBcnJheSljYmEuY2xvbmUoKTsKKworCWxvZ2xuKCJlcXVhbHMgbnVsbDogIiArIGNiYS5lcXVhbHMobnVsbCkpOworCWxvZ2xuKCJlcXVhbHMgc2VsZjogIiArIGNiYS5lcXVhbHMoY2JhKSk7CisJbG9nbG4oImVxdWFscyBjbG9uZTogIiArIGNiYS5lcXVhbHMoY2JhMykpOworCWxvZ2xuKCJlcXVhbHMgYm9ndXM6ICIgKyBjYmEuZXF1YWxzKG5ldyBPYmplY3QoKSkpOworCWxvZ2xuKCJoYXNoOiAiICsgY2JhLmhhc2hDb2RlKCkpOworCisJY2JhLmNvbXBhY3QodHJ1ZSk7CisJY2JhLmNvbXBhY3QodHJ1ZSk7CisKKwljaGFyW10geGEgPSBjYmEuZ2V0SW5kZXhBcnJheSgpOworCWJ5dGVbXSB2YSA9IGNiYS5nZXRWYWx1ZUFycmF5KCk7CisJQ29tcGFjdEJ5dGVBcnJheSBjYmE0ID0gbmV3IENvbXBhY3RCeXRlQXJyYXkoeGEsIHZhKTsKKworCVN0cmluZyB4cyA9IFV0aWxpdHkuYXJyYXlUb1JMRVN0cmluZyh4YSk7CisJU3RyaW5nIHZzID0gVXRpbGl0eS5hcnJheVRvUkxFU3RyaW5nKHZhKTsKKwlDb21wYWN0Qnl0ZUFycmF5IGNiYTUgPSBuZXcgQ29tcGFjdEJ5dGVBcnJheSh4cywgdnMpOworCisJbG9nbG4oImVxdWFsczogIiArIGNiYTQuZXF1YWxzKGNiYTUpKTsKKwlsb2dsbigiZXF1YWxzOiAiICsgY2JhLmVxdWFscyhjYmE0KSk7CisKKwljYmE0LmNvbXBhY3QoZmFsc2UpOworCWxvZ2xuKCJlcXVhbHM6ICIgKyBjYmE0LmVxdWFscyhjYmE1KSk7CisKKwljYmE1LmNvbXBhY3QodHJ1ZSk7CisJbG9nbG4oImVxdWFsczogIiArIGNiYTQuZXF1YWxzKGNiYTUpKTsKKworCWNiYS5zZXRFbGVtZW50QXQoKGNoYXIpMHg0MDUsIChieXRlKTB4ZGYpOyAvLyBmb3JjZSBleHBhbmQKKwlsb2dsbigibW9kaWZpZWQgZXF1YWxzIGNsb25lOiAiICsgY2JhLmVxdWFscyhjYmEzKSk7CisKKwljYmEzLnNldEVsZW1lbnRBdCgoY2hhcikweDQwNSwgKGJ5dGUpMHhkZik7IC8vIGVxdWl2YWxlbnQgbW9kaWZpY2F0aW9uCisJbG9nbG4oIm1vZGlmaWVkIGVxdWFscyBtb2RpZmllZCBjbG9uZTogIiArIGNiYS5lcXVhbHMoY2JhMykpOworCisJY2JhMy5zZXRFbGVtZW50QXQoKGNoYXIpMHg0MDUsIChieXRlKTB4ZWUpOyAvLyBkaWZmZXJlbnQgbW9kaWZpY2F0aW9uCisJbG9nbG4oImRpZmZlcmVudCBtb2QgZXF1YWxzOiAiICsgY2JhLmVxdWFscyhjYmEzKSk7CisKKwljYmEuY29tcGFjdCgpOworCUNvbXBhY3RCeXRlQXJyYXkgY2JhNiA9IChDb21wYWN0Qnl0ZUFycmF5KWNiYS5jbG9uZSgpOworCWxvZ2xuKCJjbG9uZWQgY29tcGFjdCBlcXVhbHM6ICIgKyBjYmEuZXF1YWxzKGNiYTYpKTsKKworCWNiYTYuc2V0RWxlbWVudEF0KChjaGFyKTB4NDA1LCAoYnl0ZSkweGVlKTsKKwlsb2dsbigibW9kaWZpZWQgY2xvbmU6ICIgKyBjYmEzLmVxdWFscyhjYmE2KSk7CisKKwljYmE2LnNldEVsZW1lbnRBdCgoY2hhcikweDEwMCwgKGNoYXIpMHgxMDQsIChieXRlKTB4ZmUpOworCWZvciAoaW50IGkgPSAweDEwMDsgaSA8IDB4MTA1OyArK2kpIHsKKwkgICAgY2JhMy5zZXRFbGVtZW50QXQoKGNoYXIpaSwgKGJ5dGUpMHhmZSk7CisJfQorCWxvZ2xuKCJkb3VibGUgbW9kaWZpZWQ6ICIgKyBjYmEzLmVxdWFscyhjYmE2KSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdENoYXJBcnJheUNvdmVyYWdlKCkgeworCS8vIHYxLjggZmFpbHMgd2l0aCBleHRlbnNpdmUgY29tcGFjdGlvbiwgc28gc2V0IHRvIGZhbHNlCisJZmluYWwgYm9vbGVhbiBFWFRFTlNJVkUgPSBmYWxzZTsKKworCUNvbXBhY3RDaGFyQXJyYXkgY2NhID0gbmV3IENvbXBhY3RDaGFyQXJyYXkoKTsKKwljY2Euc2V0RWxlbWVudEF0KChjaGFyKTB4NSwgKGNoYXIpMHhkZik7CisJY2NhLnNldEVsZW1lbnRBdCgoY2hhcikweDEwNSwgKGNoYXIpMHhkZik7CisJY2NhLnNldEVsZW1lbnRBdCgoY2hhcikweDIwNSwgKGNoYXIpMHhkZik7CisJY2NhLnNldEVsZW1lbnRBdCgoY2hhcikweDMwNSwgKGNoYXIpMHhkZik7CisJQ29tcGFjdENoYXJBcnJheSBjY2EyID0gbmV3IENvbXBhY3RDaGFyQXJyYXkoKGNoYXIpMHhkZik7CisJaWYgKGNjYS5lcXVhbHMoY2NhMikpIHsKKwkgICAgZXJybG4oInVuZXF1YWwgY2hhciBhcnJheXMgY29tcGFyZSBlcXVhbCIpOworCX0KKwlDb21wYWN0Q2hhckFycmF5IGNjYTMgPSAoQ29tcGFjdENoYXJBcnJheSljY2EuY2xvbmUoKTsKKworCWxvZ2xuKCJlcXVhbHMgbnVsbDogIiArIGNjYS5lcXVhbHMobnVsbCkpOworCWxvZ2xuKCJlcXVhbHMgc2VsZjogIiArIGNjYS5lcXVhbHMoY2NhKSk7CisJbG9nbG4oImVxdWFscyBjbG9uZTogIiArIGNjYS5lcXVhbHMoY2NhMykpOworCWxvZ2xuKCJlcXVhbHMgYm9ndXM6ICIgKyBjY2EuZXF1YWxzKG5ldyBPYmplY3QoKSkpOworCWxvZ2xuKCJoYXNoOiAiICsgY2NhLmhhc2hDb2RlKCkpOworCisJY2NhLmNvbXBhY3QoRVhURU5TSVZFKTsKKwljY2EuY29tcGFjdChFWFRFTlNJVkUpOworCisJY2hhcltdIHhhID0gY2NhLmdldEluZGV4QXJyYXkoKTsKKwljaGFyW10gdmEgPSBjY2EuZ2V0VmFsdWVBcnJheSgpOworCUNvbXBhY3RDaGFyQXJyYXkgY2NhNCA9IG5ldyBDb21wYWN0Q2hhckFycmF5KHhhLCB2YSk7CisKKwlTdHJpbmcgeHMgPSBVdGlsaXR5LmFycmF5VG9STEVTdHJpbmcoeGEpOworCVN0cmluZyB2cyA9IFV0aWxpdHkuYXJyYXlUb1JMRVN0cmluZyh2YSk7CisJQ29tcGFjdENoYXJBcnJheSBjY2E1ID0gbmV3IENvbXBhY3RDaGFyQXJyYXkoeHMsIHZzKTsKKworCWxvZ2xuKCJlcXVhbHM6ICIgKyBjY2E0LmVxdWFscyhjY2E1KSk7CisJbG9nbG4oImVxdWFsczogIiArIGNjYS5lcXVhbHMoY2NhNCkpOworCisJY2NhNC5jb21wYWN0KGZhbHNlKTsKKwlsb2dsbigiZXF1YWxzOiAiICsgY2NhNC5lcXVhbHMoY2NhNSkpOworCisJY2NhNS5jb21wYWN0KEVYVEVOU0lWRSk7CisJbG9nbG4oImVxdWFsczogIiArIGNjYTQuZXF1YWxzKGNjYTUpKTsKKworCWNjYS5zZXRFbGVtZW50QXQoKGNoYXIpMHg0MDUsIChjaGFyKTB4ZGYpOyAvLyBmb3JjZSBleHBhbmQKKwlsb2dsbigibW9kaWZpZWQgZXF1YWxzIGNsb25lOiAiICsgY2NhLmVxdWFscyhjY2EzKSk7CisKKwljY2EzLnNldEVsZW1lbnRBdCgoY2hhcikweDQwNSwgKGNoYXIpMHhkZik7IC8vIGVxdWl2YWxlbnQgbW9kaWZpY2F0aW9uCisJbG9nbG4oIm1vZGlmaWVkIGVxdWFscyBtb2RpZmllZCBjbG9uZTogIiArIGNjYS5lcXVhbHMoY2NhMykpOworCisJY2NhMy5zZXRFbGVtZW50QXQoKGNoYXIpMHg0MDUsIChjaGFyKTB4ZWUpOyAvLyBkaWZmZXJlbnQgbW9kaWZpY2F0aW9uCisJbG9nbG4oImRpZmZlcmVudCBtb2QgZXF1YWxzOiAiICsgY2NhLmVxdWFscyhjY2EzKSk7CisKKwkvLyB2MS44IGZhaWxzIHdpdGggZXh0ZW5zaXZlIGNvbXBhY3Rpb24sIGFuZCBkZWZhdWx0cyBleHRlbnNpdmUsIHNvIGRvbid0IGNvbXBhY3QKKwkvLyBjY2EuY29tcGFjdCgpOworCUNvbXBhY3RDaGFyQXJyYXkgY2NhNiA9IChDb21wYWN0Q2hhckFycmF5KWNjYS5jbG9uZSgpOworCWxvZ2xuKCJjbG9uZWQgY29tcGFjdCBlcXVhbHM6ICIgKyBjY2EuZXF1YWxzKGNjYTYpKTsKKworCWNjYTYuc2V0RWxlbWVudEF0KChjaGFyKTB4NDA1LCAoY2hhcikweGVlKTsKKwlsb2dsbigibW9kaWZpZWQgY2xvbmU6ICIgKyBjY2EzLmVxdWFscyhjY2E2KSk7CisKKwljY2E2LnNldEVsZW1lbnRBdCgoY2hhcikweDEwMCwgKGNoYXIpMHgxMDQsIChjaGFyKTB4ZmUpOworCWZvciAoaW50IGkgPSAweDEwMDsgaSA8IDB4MTA1OyArK2kpIHsKKwkgICAgY2NhMy5zZXRFbGVtZW50QXQoKGNoYXIpaSwgKGNoYXIpMHhmZSk7CisJfQorCWxvZ2xuKCJkb3VibGUgbW9kaWZpZWQ6ICIgKyBjY2EzLmVxdWFscyhjY2E2KSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvSUNVQmluYXJ5VGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvSUNVQmluYXJ5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMjZmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9JQ1VCaW5hcnlUZXN0LmphdmEKQEAgLTAsMCArMSwxMTkgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9JQ1VCaW5hcnlUZXN0LmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMC8xMCAwNToxNjoxMyAkIAorKiAkUmV2aXNpb246IDEuMSAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnV0aWw7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUJpbmFyeTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CisKKy8qKgorKiBUZXN0aW5nIGNsYXNzIGZvciBUcmllLiBUZXN0cyBoZXJlIHdpbGwgYmUgc2ltcGxlLCBzaW5jZSBib3RoIENoYXJUcmllIGFuZCAKKyogSW50VHJpZSBhcmUgdmVyeSBzaW1pbGFyIGFuZCBhcmUgaGVhdmlseSB1c2VkIGluIG90aGVyIHBhcnRzIG9mIElDVTRKLgorKiBDb2RlcyB1c2luZyBUcmllcyBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBkZXRhaWxlZCB0ZXN0cy4KKyogQGF1dGhvciBTeW4gV2VlIFF1ZWsKKyogQHNpbmNlIHJlbGVhc2UgMi4xIEphbiAwMSAyMDAyCisqLworcHVibGljIGZpbmFsIGNsYXNzIElDVUJpbmFyeVRlc3QgZXh0ZW5kcyBUZXN0Rm13ayAKK3sgCisgICAgLy8gY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAorICAgIC8qKgorICAgICogQ29uc3RydWN0b3IKKyAgICAqLworICAgIHB1YmxpYyBJQ1VCaW5hcnlUZXN0KCkKKyAgICB7CisgICAgfQorICAgICAgCisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnW10pIAorICAgIHsKKyAgICAgICAgSUNVQmluYXJ5VGVzdCB0ZXN0ID0gbmV3IElDVUJpbmFyeVRlc3QoKTsKKyAgICAgICAgdHJ5IHsKKwkgICAgICAgIHRlc3QucnVuKGFyZyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAl0ZXN0LmVycmxuKCJFcnJvciB0ZXN0aW5nIGljdWJpbmFyeXRlc3QiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0aW5nIHRoZSBjb25zdHJ1Y3RvcnMgb2YgdGhlIFRyaWVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdFJlYWRIZWFkZXIoKSAKKyAgICB7CisgICAgICAgIGJ5dGUgZm9ybWF0aWRbXSA9IHsxLCAyLCAzLCA0fTsKKyAgICAJYnl0ZSBhcnJheVtdID0geworICAgICAgICAgICAgLy8gaGVhZGVyIHNpemUKKyAgICAgICAgICAgIDAsIDB4MTgsIAorICAgICAgICAgICAgLy8gbWFnaWMgbnVtYmVycworICAgICAgICAgICAgKGJ5dGUpMHhkYSwgMHgyNywgCisgICAgICAgICAgICAvLyBzaXplCisgICAgICAgICAgICAwLCAwLCAKKyAgICAgICAgICAgIC8vIHJlc2VydmVkIHdvcmQKKyAgICAgICAgICAgIDAsIDAsIAorICAgICAgICAgICAgLy8gYmlnZW5kaWFuCisgICAgICAgICAgICAxLCAKKyAgICAgICAgICAgIC8vIGNoYXJzZXQgCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgLy8gY2hhcnNpemUKKyAgICAgICAgICAgIDIsIAorICAgICAgICAgICAgLy8gcmVzZXJ2ZWQgYnl0ZQorICAgICAgICAgICAgMCwgCisgICAgICAgICAgICAvLyBkYXRhIGZvcm1hdCBpZAorICAgICAgICAgICAgMSwgMiwgMywgNCwKKyAgICAgICAgICAgIC8vIGRhdGFWZXJzaW9uCisgICAgICAgICAgICAxLCAyLCAzLCA0LAorICAgICAgICAgICAgLy8gdW5pY29kZVZlcnNpb24KKyAgICAgICAgICAgIDMsIDIsIDAsIDAKKyAgICAgICAgfTsKKyAgICAgICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYXJyYXkpOworICAgICAgICBJQ1VCaW5hcnkuQXV0aGVudGljYXRlIGF1dGhlbnRpY2F0ZSAKKyAgICAgICAgICAgICAgICA9IG5ldyBJQ1VCaW5hcnkuQXV0aGVudGljYXRlKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0RhdGFWZXJzaW9uQWNjZXB0YWJsZShieXRlIHZlcnNpb25bXSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25bMF0gPT0gMTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAvLyBjaGVjayBmdWxsIGRhdGEgdmVyc2lvbgorICAgICAgICB0cnkgeworICAgICAgICAgICAgSUNVQmluYXJ5LnJlYWRIZWFkZXIoaW5wdXRzdHJlYW0sIGZvcm1hdGlkLCBhdXRoZW50aWNhdGUpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkOiBMZW5pZW50IGF1dGhlbnRpY2F0ZSBvYmplY3Qgc2hvdWxkIHBhc3MgSUNVQmluYXJ5LnJlYWRIZWFkZXIiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBubyByZXN0cmljdGlvbiB0byB0aGUgZGF0YSB2ZXJzaW9uCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnB1dHN0cmVhbS5yZXNldCgpOworICAgICAgICAJSUNVQmluYXJ5LnJlYWRIZWFkZXIoaW5wdXRzdHJlYW0sIGZvcm1hdGlkLCBudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJybG4oIkZhaWxlZDogTnVsbCBhdXRoZW50aWNhdGUgb2JqZWN0IHNob3VsZCBwYXNzIElDVUJpbmFyeS5yZWFkSGVhZGVyIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gbGVuaWVudCBkYXRhIHZlcnNpb24KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlucHV0c3RyZWFtLnJlc2V0KCk7CisgICAgICAgIAlJQ1VCaW5hcnkucmVhZEhlYWRlcihpbnB1dHN0cmVhbSwgZm9ybWF0aWQsIGF1dGhlbnRpY2F0ZSk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQ6IExlbmllbnQgYXV0aGVudGljYXRlIG9iamVjdCBzaG91bGQgcGFzcyBJQ1VCaW5hcnkucmVhZEhlYWRlciIpOworICAgICAgICB9CisgICAgICAgIC8vIGNoYW5naW5nIHRoZSB2ZXJzaW9uIHRvIGFuIGluY29ycmVjdCBvbmUsIGV4cGVjdGluZyBmYWlsdXJlCisgICAgICAgIGFycmF5WzE2XSA9IDI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnB1dHN0cmVhbS5yZXNldCgpOworICAgICAgICAgICAgSUNVQmluYXJ5LnJlYWRIZWFkZXIoaW5wdXRzdHJlYW0sIGZvcm1hdGlkLCBhdXRoZW50aWNhdGUpOworICAgICAgICAgICAgZXJybG4oIkZhaWxlZDogSW52YWxpZCB2ZXJzaW9uIG51bWJlciBzaG91bGQgbm90IHBhc3MgYXV0aGVudGljYXRlIG9iamVjdCIpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL0lDVUxpc3RSZXNvdXJjZUJ1bmRsZVRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL0lDVUxpc3RSZXNvdXJjZUJ1bmRsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjFkNjBkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvSUNVTGlzdFJlc291cmNlQnVuZGxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9JQ1VMaXN0UmVzb3VyY2VCdW5kbGVUZXN0LmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMjoxMDoyMCAkCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC51dGlsOworCitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworCisKK3B1YmxpYyBmaW5hbCBjbGFzcyBJQ1VMaXN0UmVzb3VyY2VCdW5kbGVUZXN0IGV4dGVuZHMgVGVzdEZtd2sgCit7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUlDVUxpc3RSZXNvdXJjZUJ1bmRsZVRlc3QgdGVzdCA9IG5ldyBJQ1VMaXN0UmVzb3VyY2VCdW5kbGVUZXN0KCk7CisJICAgIHRlc3QucnVuKGFyZ3MpOworCisgICAgfQorCisgICAgcHVibGljIHZvaWQgVGVzdFJlZmVyZW5jZXMoKSB7CisJCVJlc291cmNlQnVuZGxlIHJiID0gSUNVTG9jYWxlRGF0YS5nZXRMb2NhbGVFbGVtZW50cygidGgiKTsKKwkJbG9nbG4oImdvdCByYjoiICsgcmIpOworCQorCQlieXRlW10gYmluYXJ5RGF0YSA9IG51bGw7Ly8oYnl0ZVtdKXJiLmdldE9iamVjdCgiJSVDb2xsYXRpb25CaW4iKTsKKwkJT2JqZWN0IGNvbEVsZW0gPSByYi5nZXRPYmplY3QoIkNvbGxhdGlvbkVsZW1lbnRzIik7CisgICAgICAgIGlmKGNvbEVsZW0gaW5zdGFuY2VvZiBPYmplY3RbXVtdKXsKKyAgICAgICAgICAgIE9iamVjdFtdW10gY29sRWxlbUFyciA9IChPYmplY3RbXVtdKWNvbEVsZW07CisgICAgICAgICAgICBpZigoKFN0cmluZyljb2xFbGVtQXJyWzBdWzBdKS5lcXVhbHMoIiUlQ29sbGF0aW9uQmluIikpeyAgIAorCSAgICAgICAgICAgYmluYXJ5RGF0YSA9IChieXRlW10pIGNvbEVsZW1BcnJbMF1bMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4oImdvdCBiaW5hcnlEYXRhOiAiICsgYmluYXJ5RGF0YSArICIgbGVuZ3RoOiAiICsgKGJpbmFyeURhdGEgPT0gbnVsbCA/IDAgOiBiaW5hcnlEYXRhLmxlbmd0aCkpOworCQlPYmplY3RbXSBzdHJpbmdBcnJheURhdGEgPSAoT2JqZWN0W10pcmIuZ2V0T2JqZWN0KCJDb2xsYXRpb25FbGVtZW50cyIpOworCQkvL1N0cmluZ1tdIGNvbGxhdGlvbkRhdGEgPSBuZXcgU3RyaW5nW10geworCQkgLy8gICAoU3RyaW5nKXN0cmluZ0FycmF5RGF0YVswXSwKKwkJIC8vICAgKFN0cmluZylzdHJpbmdBcnJheURhdGFbMF0KKwkJLy99OworCQlsb2dsbigiZ290IHN0cmluZ0RhdGE6ICIgKyBzdHJpbmdBcnJheURhdGEgKyAiIGxlbmd0aDogIiArIHN0cmluZ0FycmF5RGF0YS5sZW5ndGgpOworCQlsb2dsbigiZ290IHN0cmluZ0RhdGFFbGVtZW50OiAiICsgc3RyaW5nQXJyYXlEYXRhWzBdICsgIiBsZW5ndGg6ICIgKyBzdHJpbmdBcnJheURhdGEubGVuZ3RoKTsKKwkJLy9TeXN0ZW0ub3V0LnByaW50bG4oImdvdCBzZGVlOiAiICsgY29sbGF0aW9uRGF0YVswXSk7CisJCS8vCVN5c3RlbS5vdXQucHJpbnRsbigiY2hhciBkYXRhIGxlbmd0aDogIiArIHN0cmluZ0FycmF5RGF0YS5sZW5ndGgoKSk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIFRlc3RBbGlhc2VzKCl7CisgICAgICAgIFJlc291cmNlQnVuZGxlIHJiID0gSUNVTG9jYWxlRGF0YS5nZXRSZXNvdXJjZUJ1bmRsZSgiY29tLmlibS5pY3UuZGV2LmRhdGEiLCJUZXN0RGF0YUVsZW1lbnRzIiwidGVzdGFsaWFzZXMiKTsKKyAgICAgICAgT2JqZWN0IG8gPSByYi5nZXRPYmplY3QoIkNvbGxhdGlvbkVsZW1lbnRzIik7CisgICAgICAgIE9iamVjdCBvMSA9IHJiLmdldE9iamVjdCgiem9uZVRlc3RzIik7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Q2lyY3VsYXJBbGlhc2VzKCl7CisgICAgICAgIHRyeXsKKwkgICAgICAgIFJlc291cmNlQnVuZGxlIHJiID0gSUNVTG9jYWxlRGF0YS5nZXRSZXNvdXJjZUJ1bmRsZSgiY29tLmlibS5pY3UuZGV2LmRhdGEiLCJUZXN0RGF0YUVsZW1lbnRzIiwidGVzdGNpcmN1bGFyYWxpYXMiKTsKKwkgICAgICAgIE9iamVjdCBvID0gcmIuZ2V0T2JqZWN0KCJhYWEiKTsKKyAgICAgICAgfWNhdGNoKGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSl7CisgICAgICAgICAgICBpZihlLnRvU3RyaW5nKCkuaW5kZXhPZigiaXJjdWxhciIpPT0tMSl7CisgICAgICAgICAgICAgICAgZXJybG4oIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBFeGNlcHRpb24gZm9yIGNpcmN1bGFyIGFsaWFzZXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlcnJsbigiRGlkIG5vdCBnZXQgdGhlIGV4cGVjdGVkIEV4Y2VwdGlvbiBmb3IgY2lyY3VsYXIgYWxpYXNlcyIpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvSUNVU2VydmljZVRlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL0lDVVNlcnZpY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0YzM4OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL0lDVVNlcnZpY2VUZXN0LmphdmEKQEAgLTAsMCArMSw5NDEgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9JQ1VTZXJ2aWNlVGVzdC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTAvMDkgMTg6NTY6NTcgJAorICogJFJldmlzaW9uOiAxLjkgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRlc3QudXRpbDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTm90aWZpZXI7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VSV0xvY2s7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZS5GYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZS5LZXk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlLlNlcnZpY2VMaXN0ZW5lcjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVVNlcnZpY2UuU2ltcGxlRmFjdG9yeTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkxvY2FsZVV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZVNlcnZpY2UuTG9jYWxlS2V5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZS5Mb2NhbGVLZXlGYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZS5JQ1VSZXNvdXJjZUJ1bmRsZUZhY3Rvcnk7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRMaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKK3B1YmxpYyBjbGFzcyBJQ1VTZXJ2aWNlVGVzdCBleHRlbmRzIFRlc3RGbXdrCit7ICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworCUlDVVNlcnZpY2VUZXN0IHRlc3QgPSBuZXcgSUNVU2VydmljZVRlc3QoKTsKKwl0ZXN0LnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBscm1zZyhTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGxocywgT2JqZWN0IHJocykgeworCXJldHVybiBtZXNzYWdlICsgIiBsaHM6ICIgKyBsaHMgKyAiIHJoczogIiArIHJoczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjb25maXJtQm9vbGVhbihTdHJpbmcgbWVzc2FnZSwgYm9vbGVhbiB2YWwpIHsKKwlsb2dsbihtZXNzYWdlLCB2YWwsICF2YWwpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNvbmZpcm1FcXVhbChTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGxocywgT2JqZWN0IHJocykgeworCWxvZ2xuKGxybXNnKG1lc3NhZ2UsIGxocywgcmhzKSwgbGhzID09IG51bGwgPyByaHMgPT0gbnVsbCA6IGxocy5lcXVhbHMocmhzKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY29uZmlybUlkZW50aWNhbChTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGxocywgT2JqZWN0IHJocykgeworCWxvZ2xuKGxybXNnKG1lc3NhZ2UsIGxocywgcmhzKSwgbGhzID09IHJocyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY29uZmlybUlkZW50aWNhbChTdHJpbmcgbWVzc2FnZSwgaW50IGxocywgaW50IHJocykgeworCWxvZ2xuKG1lc3NhZ2UgKyAiIGxoczogIiArIGxocyArICIgcmhzOiAiICsgcmhzLCBsaHMgPT0gcmhzKTsKKyAgICB9CisKKyAgICAvLyB1c2UgbG9jYWxlIGtleXMKKyAgICBzdGF0aWMgZmluYWwgY2xhc3MgVGVzdFNlcnZpY2UgZXh0ZW5kcyBJQ1VTZXJ2aWNlIHsKKwlwdWJsaWMgS2V5IGNyZWF0ZUtleShTdHJpbmcgaWQpIHsKKwkgICAgcmV0dXJuIExvY2FsZUtleS5jcmVhdGVXaXRoQ2Fub25pY2FsRmFsbGJhY2soaWQsIG51bGwpOyAvLyBubyBmYWxsYmFjayBsb2NhbGUKKwl9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdEFQSSgpIHsKKwkvLyBjcmVhdGUgYSBzZXJ2aWNlIHVzaW5nIGxvY2FsZSBrZXlzLAorCUlDVVNlcnZpY2Ugc2VydmljZSA9IG5ldyBUZXN0U2VydmljZSgpOworCisJLy8gcmVnaXN0ZXIgYW4gb2JqZWN0IHdpdGggb25lIGxvY2FsZSwgCisJLy8gc2VhcmNoIGZvciBhbiBvYmplY3Qgd2l0aCBhIG1vcmUgc3BlY2lmaWMgbG9jYWxlCisJLy8gc2hvdWxkIHJldHVybiB0aGUgb3JpZ2luYWwgb2JqZWN0CisJSW50ZWdlciBzaW5nbGV0b24wID0gbmV3IEludGVnZXIoMCk7CisJc2VydmljZS5yZWdpc3Rlck9iamVjdChzaW5nbGV0b24wLCAiZW5fVVMiKTsKKyAJT2JqZWN0IHJlc3VsdCA9IHNlcnZpY2UuZ2V0KCJlbl9VU19GT08iKTsKKwljb25maXJtSWRlbnRpY2FsKCIxKSBlbl9VU19GT08gLT4gZW5fVVMiLCByZXN1bHQsIHNpbmdsZXRvbjApOworCisJLy8gcmVnaXN0ZXIgYSBuZXcgb2JqZWN0IHdpdGggdGhlIG1vcmUgc3BlY2lmaWMgbG9jYWxlCisJLy8gc2VhcmNoIGZvciBhbiBvYmplY3Qgd2l0aCB0aGF0IGxvY2FsZQorCS8vIHNob3VsZCByZXR1cm4gdGhlIG5ldyBvYmplY3QKKwlJbnRlZ2VyIHNpbmdsZXRvbjEgPSBuZXcgSW50ZWdlcigxKTsKKwlzZXJ2aWNlLnJlZ2lzdGVyT2JqZWN0KHNpbmdsZXRvbjEsICJlbl9VU19GT08iKTsKKwlyZXN1bHQgPSBzZXJ2aWNlLmdldCgiZW5fVVNfRk9PIik7CisJY29uZmlybUlkZW50aWNhbCgiMikgZW5fVVNfRk9PIC0+IGVuX1VTX0ZPTyIsIHJlc3VsdCwgc2luZ2xldG9uMSk7CisKKwkvLyBzZWFyY2ggZm9yIGFuIG9iamVjdCB0aGF0IGZhbGxzIGJhY2sgdG8gdGhlIGZpcnN0IHJlZ2lzdGVyZWQgbG9jYWxlCisJcmVzdWx0ID0gc2VydmljZS5nZXQoImVuX1VTX0JBUiIpOworCWNvbmZpcm1JZGVudGljYWwoIjMpIGVuX1VTX0JBUiAtPiBlbl9VUyIsIHJlc3VsdCwgc2luZ2xldG9uMCk7CisKKwkvLyBnZXQgYSBsaXN0IG9mIHRoZSBmYWN0b3JpZXMsIHNob3VsZCBiZSB0d28KKwlMaXN0IGZhY3RvcmllcyA9IHNlcnZpY2UuZmFjdG9yaWVzKCk7CisJY29uZmlybUlkZW50aWNhbCgiNCkgZmFjdG9yeSBzaXplIiwgZmFjdG9yaWVzLnNpemUoKSwgMik7CisKKwkvLyByZWdpc3RlciBhIG5ldyBvYmplY3Qgd2l0aCB5ZXQgYW5vdGhlciBsb2NhbGUKKwkvLyBvcmlnaW5hbCBmYWN0b3J5IGxpc3QgaXMgdW5jaGFuZ2VkCisJSW50ZWdlciBzaW5nbGV0b24yID0gbmV3IEludGVnZXIoMik7CisJc2VydmljZS5yZWdpc3Rlck9iamVjdChzaW5nbGV0b24yLCAiZW4iKTsKKwljb25maXJtSWRlbnRpY2FsKCI1KSBmYWN0b3J5IHNpemUiLCBmYWN0b3JpZXMuc2l6ZSgpLCAyKTsKKworCS8vIHNlYXJjaCBmb3IgYW4gb2JqZWN0IHdpdGggdGhlIG5ldyBsb2NhbGUKKwkvLyBzdGFjayBvZiBmYWN0b3JpZXMgaXMgbm93IGVuLCBlbl9VU19GT08sIGVuX1VTCisJLy8gc2VhcmNoIGZvciBlbl9VUyBzaG91bGQgc3RpbGwgZmluZCBlbl9VUyBvYmplY3QKKwlyZXN1bHQgPSBzZXJ2aWNlLmdldCgiZW5fVVNfQkFSIik7CisJY29uZmlybUlkZW50aWNhbCgiNikgZW5fVVNfQkFSIC0+IGVuX1VTIiwgcmVzdWx0LCBzaW5nbGV0b24wKTsKKworCS8vIHJlZ2lzdGVyIGEgbmV3IG9iamVjdCB3aXRoIGFuIG9sZCBpZCwgc2hvdWxkIGhpZGUgZWFybGllciBmYWN0b3J5IHVzaW5nIHRoaXMgaWQsIGJ1dCBsZWF2ZSBpdCB0aGVyZQorCUludGVnZXIgc2luZ2xldG9uMyA9IG5ldyBJbnRlZ2VyKDMpOworCXNlcnZpY2UucmVnaXN0ZXJPYmplY3Qoc2luZ2xldG9uMywgImVuX1VTIik7CisJZmFjdG9yaWVzID0gc2VydmljZS5mYWN0b3JpZXMoKTsKKwljb25maXJtSWRlbnRpY2FsKCI5KSBmYWN0b3J5IHNpemUiLCBmYWN0b3JpZXMuc2l6ZSgpLCA0KTsKKworCS8vIHNob3VsZCBnZXQgZGF0YSBmcm9tIHRoYXQgbmV3IGZhY3RvcnkKKwlyZXN1bHQgPSBzZXJ2aWNlLmdldCgiZW5fVVNfQkFSIik7CisJY29uZmlybUlkZW50aWNhbCgiMTApIGVuX1VTX0JBUiAtPiAoMykiLCByZXN1bHQsIHNpbmdsZXRvbjMpOworCisJLy8gcmVtb3ZlIG5ldyBmYWN0b3J5CisJLy8gc2hvdWxkIGhhdmUgZmV3ZXIgZmFjdG9yaWVzIGFnYWluCisJc2VydmljZS51bnJlZ2lzdGVyRmFjdG9yeSgoRmFjdG9yeSlmYWN0b3JpZXMuZ2V0KDApKTsKKwlmYWN0b3JpZXMgPSBzZXJ2aWNlLmZhY3RvcmllcygpOworCWNvbmZpcm1JZGVudGljYWwoIjExKSBmYWN0b3J5IHNpemUiLCBmYWN0b3JpZXMuc2l6ZSgpLCAzKTsKKworCS8vIHNob3VsZCBnZXQgb3JpZ2luYWwgZGF0YSBhZ2FpbiBhZnRlciByZW1vdmUgZmFjdG9yeQorCXJlc3VsdCA9IHNlcnZpY2UuZ2V0KCJlbl9VU19CQVIiKTsKKwljb25maXJtSWRlbnRpY2FsKCIxMikgZW5fVVNfQkFSIC0+IDAiLCByZXN1bHQsIHNpbmdsZXRvbjApOworCisJLy8gc2hvdWxkbid0IGZpbmQgdW5yZWdpc3RlcmVkIGlkcworCXJlc3VsdCA9IHNlcnZpY2UuZ2V0KCJmb28iKTsKKwljb25maXJtSWRlbnRpY2FsKCIxMykgZm9vIC0+IG51bGwiLCByZXN1bHQsIG51bGwpOworCisJLy8gc2hvdWxkIGZpbmQgbm9uLWNhbm9uaWNhbCBzdHJpbmdzCisJU3RyaW5nW10gcmVzdWx0SUQgPSBuZXcgU3RyaW5nWzFdOworCXJlc3VsdCA9IHNlcnZpY2UuZ2V0KCJFTl91c19mT28iLCByZXN1bHRJRCk7CisJY29uZmlybUVxdWFsKCIxNCkgZmluZCBub24tY2Fub25pY2FsIiwgcmVzdWx0SURbMF0sICJlbl9VU19GT08iKTsKKworCS8vIHNob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIG5vbi1jYW5vbmljYWwgc3RyaW5ncyBhbmQgZ2V0IHRoZW0gY2Fub25pY2FsaXplZAorCXNlcnZpY2UucmVnaXN0ZXJPYmplY3Qoc2luZ2xldG9uMywgImVOX2NhX2RVZGUiKTsKKwlyZXN1bHQgPSBzZXJ2aWNlLmdldCgiRW5fQ2FfRHVEZSIsIHJlc3VsdElEKTsKKwljb25maXJtRXF1YWwoIjE1KSByZWdpc3RlciBub24tY2Fub25pY2FsIiwgcmVzdWx0SURbMF0sICJlbl9DQV9EVURFIik7CisKKwkvLyBzaG91bGQgYmUgYWJsZSB0byByZWdpc3RlciBpbnZpc2libGUgZmFjdG9yaWVzLCB0aGVzZSB3aWxsIG5vdAorCS8vIGJlIHZpc2libGUgYnkgZGVmYXVsdCwgYnV0IGlmIHlvdSBrbm93IHRoZSBzZWNyZXQgcGFzc3dvcmQgeW91CisJLy8gY2FuIHN0aWxsIGFjY2VzcyB0aGVzZSBzZXJ2aWNlcy4uLgorCUludGVnZXIgc2luZ2xldG9uNCA9IG5ldyBJbnRlZ2VyKDQpOworCXNlcnZpY2UucmVnaXN0ZXJPYmplY3Qoc2luZ2xldG9uNCwgImVuX1VTX0JBUiIsIGZhbHNlKTsKKwlyZXN1bHQgPSBzZXJ2aWNlLmdldCgiZW5fVVNfQkFSIik7CisJY29uZmlybUlkZW50aWNhbCgiMTcpIGdldCBpbnZpc2libGUiLCByZXN1bHQsIHNpbmdsZXRvbjQpOworCQorCS8vIHNob3VsZCBub3QgYmUgYWJsZSB0byBsb2NhdGUgaW52aXNpYmxlIHNlcnZpY2VzCisJU2V0IGlkcyA9IHNlcnZpY2UuZ2V0VmlzaWJsZUlEcygpOworCWNvbmZpcm1Cb29sZWFuKCIxOCkgZmluZCBpbnZpc2libGUiLCAhaWRzLmNvbnRhaW5zKCJlbl9VU19CQVIiKSk7CisKKwlzZXJ2aWNlLnJlc2V0KCk7CisJLy8gYW4gYW5vbnltb3VzIGZhY3RvcnkgdGhhbiBoYW5kbGVzIGFsbCBpZHMKKwl7CisJICAgIEZhY3RvcnkgZmFjdG9yeSA9IG5ldyBGYWN0b3J5KCkgeworCQkgICAgcHVibGljIE9iamVjdCBjcmVhdGUoS2V5IGtleSwgSUNVU2VydmljZSBzZXJ2aWNlKSB7CisJCQlyZXR1cm4gTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShrZXkuY3VycmVudElEKCkpOworCQkgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vL0NMT1ZFUjpPRkYKKwkJICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVZpc2libGVJRHMoTWFwIHJlc3VsdCkgeworCQkgICAgfQorICAgICAgICAgICAgICAgICAgICAvLy9DTE9WRVI6T04KKworICAgICAgICAgICAgICAgICAgICAvLy9DTE9WRVI6T0ZGCisJCSAgICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKFN0cmluZyBpZCwgTG9jYWxlIGwpIHsKKwkJCXJldHVybiBudWxsOworCQkgICAgfQorICAgICAgICAgICAgICAgICAgICAvLy9DTE9WRVI6T04KKwkJfTsKKwkgICAgc2VydmljZS5yZWdpc3RlckZhY3RvcnkoZmFjdG9yeSk7CisKKwkgICAgLy8gYW5vbnltb3VzIGZhY3Rvcnkgd2lsbCBzdGlsbCBoYW5kbGUgdGhlIGlkCisJICAgIHJlc3VsdCA9IHNlcnZpY2UuZ2V0KExvY2FsZS5VUy50b1N0cmluZygpKTsKKwkgICAgY29uZmlybUVxdWFsKCIyMSkgbG9jYWxlIiwgcmVzdWx0LCBMb2NhbGUuVVMpOworCisJICAgIC8vIHN0aWxsIG5vcm1hbGl6ZXMgaWQKKwkgICAgcmVzdWx0ID0gc2VydmljZS5nZXQoIkVOX1VTX0JBUiIpOworCSAgICBjb25maXJtRXF1YWwoIjIyKSBsb2NhbGUiLCByZXN1bHQsIExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUoImVuX1VTX0JBUiIpKTsKKwkgICAgCisJICAgIC8vIHdlIGNhbiBvdmVycmlkZSBmb3IgcGFydGljdWxhciBpZHMKKwkgICAgc2VydmljZS5yZWdpc3Rlck9iamVjdChzaW5nbGV0b24zLCAiZW5fVVNfQkFSIik7CisJICAgIHJlc3VsdCA9IHNlcnZpY2UuZ2V0KCJlbl9VU19CQVIiKTsKKwkgICAgY29uZmlybUlkZW50aWNhbCgiMjMpIG92ZXJyaWRlIHN1cGVyIiwgcmVzdWx0LCBzaW5nbGV0b24zKTsKKwl9CisKKwkvLyBlbXB0eSBzZXJ2aWNlIHNob3VsZCBub3QgcmVjb2duaXplIGFueXRoaW5nIAorCXNlcnZpY2UucmVzZXQoKTsKKwlyZXN1bHQgPSBzZXJ2aWNlLmdldCgiZW5fVVMiKTsKKwljb25maXJtSWRlbnRpY2FsKCIyNCkgZW1wdHkiLCByZXN1bHQsIG51bGwpOworCisJLy8gY3JlYXRlIGEgY3VzdG9tIG11bHRpcGxlIGtleSBmYWN0b3J5CisJeworCSAgICBTdHJpbmdbXSB4aWRzID0geyAiZW5fVVNfVkFMTEVZX0dJUkwiLCAKKwkJCSAgICAgICJlbl9VU19WQUxMRVlfQk9ZIiwKKwkJCSAgICAgICJlbl9VU19TVVJGRVJfR0FMIiwKKwkJCSAgICAgICJlbl9VU19TVVJGRVJfRFVERSIKKwkgICAgfTsKKwkgICAgc2VydmljZS5yZWdpc3RlckZhY3RvcnkobmV3IFRlc3RMb2NhbGVLZXlGYWN0b3J5KHhpZHMsICJMYXRlciIpKTsKKwl9CisKKwkvLyBpdGVyYXRlIG92ZXIgdGhlIHZpc3VhbCBpZHMgcmV0dXJuZWQgYnkgdGhlIG11bHRpcGxlIGZhY3RvcnkKKwl7CisJICAgIFNldCB2aWRzID0gc2VydmljZS5nZXRWaXNpYmxlSURzKCk7CisJICAgIEl0ZXJhdG9yIGl0ZXIgPSB2aWRzLml0ZXJhdG9yKCk7CisJICAgIGludCBjb3VudCA9IDA7CisJICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworCSAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKWl0ZXIubmV4dCgpOworCQlsb2dsbigiICAiICsgaWQgKyAiIC0tPiAiICsgc2VydmljZS5nZXQoaWQpKTsKKwkgICAgfQorCSAgICAvLyBmb3VyIHZpc2libGUgaWRzCisJICAgIGNvbmZpcm1JZGVudGljYWwoIjI1KSB2aXNpYmxlIGlkcyIsIGNvdW50LCA0KTsKKwl9CisKKwkvLyBpdGVyYXRlIG92ZXIgdGhlIGRpc3BsYXkgbmFtZXMKKwl7CisJICAgIE1hcCBkaWRzID0gc2VydmljZS5nZXREaXNwbGF5TmFtZXMoTG9jYWxlLkdFUk1BTlkpOworCSAgICBJdGVyYXRvciBpdGVyID0gZGlkcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7CisJICAgIGludCBjb3VudCA9IDA7CisJICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworCSAgICAgICAgKytjb3VudDsKKwkgICAgICAgIEVudHJ5IGUgPSAoRW50cnkpaXRlci5uZXh0KCk7CisJICAgICAgICBsb2dsbigiICAiICsgZS5nZXRLZXkoKSArICIgLS0gPiAiICsgZS5nZXRWYWx1ZSgpKTsKKwkgICAgfQorCSAgICAvLyBmb3VyIGRpc3BsYXkgbmFtZXMsIGluIGdlcm1hbgorCSAgICBjb25maXJtSWRlbnRpY2FsKCIyNikgZGlzcGxheSBuYW1lcyIsIGNvdW50LCA0KTsKKwl9CisKKwkvLyBubyB2YWxpZCBkaXNwbGF5IG5hbWUKKwljb25maXJtSWRlbnRpY2FsKCIyNykgZ2V0IGRpc3BsYXkgbmFtZSIsIHNlcnZpY2UuZ2V0RGlzcGxheU5hbWUoImVuX1VTX1ZBTExFWV9HRUVLIiksIG51bGwpOworCisJeworCSAgICBTdHJpbmcgbmFtZSA9IHNlcnZpY2UuZ2V0RGlzcGxheU5hbWUoImVuX1VTX1NVUkZFUl9EVURFIiwgTG9jYWxlLlVTKTsKKwkgICAgY29uZmlybUVxdWFsKCIyOCkgZ2V0IGRpc3BsYXkgbmFtZSIsIG5hbWUsICJFbmdsaXNoIChVbml0ZWQgU3RhdGVzLFNVUkZFUixEVURFKSIpOworCX0KKworCS8vIHJlZ2lzdGVyIGFub3RoZXIgbXVsdGlwbGUgZmFjdG9yeQorCXsKKwkgICAgU3RyaW5nW10geGlkcyA9IHsKKwkJImVuX1VTX1NVUkZFUiIsICJlbl9VU19TVVJGRVJfR0FMIiwgImVuX1VTX1NJTElDT04iLCAiZW5fVVNfU0lMSUNPTl9HRUVLIgorCSAgICB9OworCSAgICBzZXJ2aWNlLnJlZ2lzdGVyRmFjdG9yeShuZXcgVGVzdExvY2FsZUtleUZhY3RvcnkoeGlkcywgIlJhZCBkdWRlIikpOworCX0KKworCS8vIHRoaXMgdGltZSwgd2UgaGF2ZSBzZXZlbiBkaXNwbGF5IG5hbWVzCisgICAgICAgIC8vIFJhZCBkdWRlJ3Mgc3VyZmVyIGdhbCAncmVwbGFjZXMnIGxhdGVyJ3Mgc3VyZmVyIGdhbAorCXsKKwkgICAgTWFwIGRpZHMgPSBzZXJ2aWNlLmdldERpc3BsYXlOYW1lcygpOworCSAgICBJdGVyYXRvciBpdGVyID0gZGlkcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7CisJICAgIGludCBjb3VudCA9IDA7CisJICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworCSAgICAgICAgKytjb3VudDsKKwkgICAgICAgIEVudHJ5IGUgPSAoRW50cnkpaXRlci5uZXh0KCk7CisJICAgICAgICBsb2dsbigiICAiICsgZS5nZXRLZXkoKSArICIgLS0+ICIgKyBlLmdldFZhbHVlKCkpOworCSAgICB9CisJICAgIC8vIHNldmVuIGRpc3BsYXkgbmFtZXMsIGluIHNwYW5pc2gKKwkgICAgY29uZmlybUlkZW50aWNhbCgiMjkpIGRpc3BsYXkgbmFtZXMiLCBjb3VudCwgNyk7CisJfQorCisJLy8gd2Ugc2hvdWxkIGdldCB0aGUgZGlzcGxheSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFjdHVhbCBpZAorCS8vIHJldHVybmVkIGJ5IHRoZSBpZCB3ZSB1c2VkLgorCXsKKwkgICAgU3RyaW5nW10gYWN0dWFsSUQgPSBuZXcgU3RyaW5nWzFdOworCSAgICBTdHJpbmcgaWQgPSAiZW5fdXNfc3VyZmVyX2dhbCI7CisJICAgIFN0cmluZyBnYWwgPSAoU3RyaW5nKXNlcnZpY2UuZ2V0KGlkLCBhY3R1YWxJRCk7CisJICAgIGlmIChnYWwgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJhY3R1YWwgaWQ6ICIgKyBhY3R1YWxJRFswXSk7CisJCVN0cmluZyBkaXNwbGF5TmFtZSA9IHNlcnZpY2UuZ2V0RGlzcGxheU5hbWUoYWN0dWFsSURbMF0sIExvY2FsZS5VUyk7CisJCWxvZ2xuKCJmb3VuZCBhY3R1YWw6ICIgKyBnYWwgKyAiIHdpdGggZGlzcGxheSBuYW1lOiAiICsgZGlzcGxheU5hbWUpOworCQljb25maXJtQm9vbGVhbigiMzApIGZvdW5kIGRpc3BsYXkgbmFtZSBmb3IgYWN0dWFsIiwgZGlzcGxheU5hbWUgIT0gbnVsbCk7CisKKwkJZGlzcGxheU5hbWUgPSBzZXJ2aWNlLmdldERpc3BsYXlOYW1lKGlkLCBMb2NhbGUuVVMpOworCQlsb2dsbigiZm91bmQgcXVlcnk6ICIgKyBnYWwgKyAiIHdpdGggZGlzcGxheSBuYW1lOiAiICsgZGlzcGxheU5hbWUpOworCQljb25maXJtQm9vbGVhbigiMzEpIGZvdW5kIGRpc3BsYXkgbmFtZSBmb3IgcXVlcnkiLCBkaXNwbGF5TmFtZSA9PSBudWxsKTsKKwkgICAgfSBlbHNlIHsKKwkJZXJybG4oIjMwKSBzZXJ2aWNlIGNvdWxkIG5vdCBmaW5kIGVudHJ5IGZvciAiICsgaWQpOworCSAgICB9CisKKyAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlICdkdWRlJyBmYWN0b3J5LCBzaW5jZSBpdCBvdmVycmlkZXMgZW5fVVNfU1VSRkVSLgorCSAgICBpZCA9ICJlbl9VU19TVVJGRVJfQk9aTyI7CisJICAgIFN0cmluZyBib3pvID0gKFN0cmluZylzZXJ2aWNlLmdldChpZCwgYWN0dWFsSUQpOworCSAgICBpZiAoYm96byAhPSBudWxsKSB7CisJCVN0cmluZyBkaXNwbGF5TmFtZSA9IHNlcnZpY2UuZ2V0RGlzcGxheU5hbWUoYWN0dWFsSURbMF0sIExvY2FsZS5VUyk7CisJCWxvZ2xuKCJmb3VuZCBhY3R1YWw6ICIgKyBib3pvICsgIiB3aXRoIGRpc3BsYXkgbmFtZTogIiArIGRpc3BsYXlOYW1lKTsKKwkJY29uZmlybUJvb2xlYW4oIjMyKSBmb3VuZCBkaXNwbGF5IG5hbWUgZm9yIGFjdHVhbCIsIGRpc3BsYXlOYW1lICE9IG51bGwpOworCisJCWRpc3BsYXlOYW1lID0gc2VydmljZS5nZXREaXNwbGF5TmFtZShpZCwgTG9jYWxlLlVTKTsKKwkJbG9nbG4oImZvdW5kIGFjdHVhbDogIiArIGJvem8gKyAiIHdpdGggZGlzcGxheSBuYW1lOiAiICsgZGlzcGxheU5hbWUpOworCQljb25maXJtQm9vbGVhbigiMzMpIGZvdW5kIGRpc3BsYXkgbmFtZSBmb3IgcXVlcnkiLCBkaXNwbGF5TmFtZSA9PSBudWxsKTsKKwkgICAgfSBlbHNlIHsKKwkJZXJybG4oIjMyKSBzZXJ2aWNlIGNvdWxkIG5vdCBmaW5kIGVudHJ5IGZvciAiICsgaWQpOworCSAgICB9CisKKyAgICAgICAgICAgIGNvbmZpcm1Cb29sZWFuKCIzNCkgaXMgZGVmYXVsdCAiLCAhc2VydmljZS5pc0RlZmF1bHQoKSk7CisJfQorCisgICAgICAgIC8qCisgICAgICAgIC8vIGRpc2FsbG93IGhpZGluZyBmb3Igbm93CisKKwkvLyBoaWRpbmcgZmFjdG9yeSBzaG91bGQgb2JzY3VyZSAnc3VibG9jYWxlcycKKwl7CisJICAgIFN0cmluZ1tdIHhpZHMgPSB7CisJCSJlbl9VU19WQUxMRVkiLCAiZW5fVVNfU0lMSUNPTiIKKwkgICAgfTsKKwkgICAgc2VydmljZS5yZWdpc3RlckZhY3RvcnkobmV3IFRlc3RIaWRpbmdGYWN0b3J5KHhpZHMsICJoaWRpbmciKSk7CisJfQorCisJeworCSAgICBNYXAgZGlkcyA9IHNlcnZpY2UuZ2V0RGlzcGxheU5hbWVzKCk7CisJICAgIEl0ZXJhdG9yIGl0ZXIgPSBkaWRzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKwkgICAgaW50IGNvdW50ID0gMDsKKwkgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJICAgICAgICArK2NvdW50OworCSAgICAgICAgRW50cnkgZSA9IChFbnRyeSlpdGVyLm5leHQoKTsKKwkgICAgICAgIGxvZ2xuKCIgICIgKyBlLmdldEtleSgpICsgIiAtLSA+ICIgKyBlLmdldFZhbHVlKCkpOworCSAgICB9CisJICAgIGNvbmZpcm1JZGVudGljYWwoIjM1KSBoaWRpbmcgZmFjdG9yeSIsIGNvdW50LCA1KTsKKwl9CisgICAgICAgICovCisKKwl7CisJICAgIFNldCB4aWRzID0gc2VydmljZS5nZXRWaXNpYmxlSURzKCk7CisJICAgIEl0ZXJhdG9yIGl0ZXIgPSB4aWRzLml0ZXJhdG9yKCk7CisJICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworCQlTdHJpbmcgeGlkID0gKFN0cmluZylpdGVyLm5leHQoKTsKKwkJbG9nbG4oeGlkICsgIj8gICIgKyBzZXJ2aWNlLmdldCh4aWQpKTsKKwkgICAgfQorCisJICAgIGxvZ2xuKCJ2YWxsZXlnaXJsPyAgIiArIHNlcnZpY2UuZ2V0KCJlbl9VU19WQUxMRVlfR0lSTCIpKTsKKwkgICAgbG9nbG4oInZhbGxleWJveT8gICAiICsgc2VydmljZS5nZXQoImVuX1VTX1ZBTExFWV9CT1kiKSk7CisJICAgIGxvZ2xuKCJ2YWxsZXlkdWRlPyAgIiArIHNlcnZpY2UuZ2V0KCJlbl9VU19WQUxMRVlfRFVERSIpKTsKKwkgICAgbG9nbG4oInN1cmZlcmdpcmw/ICAiICsgc2VydmljZS5nZXQoImVuX1VTX1NVUkZFUl9HSVJMIikpOworCX0KKworCS8vIHJlc291cmNlIGJ1bmRsZSBmYWN0b3J5LgorCXNlcnZpY2UucmVzZXQoKTsKKwlzZXJ2aWNlLnJlZ2lzdGVyRmFjdG9yeShuZXcgSUNVUmVzb3VyY2VCdW5kbGVGYWN0b3J5KCkpOworCisJLy8gbGlzdCBhbGwgb2YgdGhlIHJlc291cmNlcyAKKwl7CisgICAgICAgICAgICBsb2dsbigiYWxsIHZpc2libGUgaWRzOiAiICsgc2VydmljZS5nZXRWaXNpYmxlSURzKCkpOworICAgICAgICAgICAgLyoKKwkgICAgU2V0IHhpZHMgPSBzZXJ2aWNlLmdldFZpc2libGVJRHMoKTsKKwkgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoInsiKTsKKwkgICAgYm9vbGVhbiBub3RmaXJzdCA9IGZhbHNlOworCSAgICBJdGVyYXRvciBpdGVyID0geGlkcy5pdGVyYXRvcigpOworCSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJU3RyaW5nIHhpZCA9IChTdHJpbmcpaXRlci5uZXh0KCk7CisJCWlmIChub3RmaXJzdCkgeworCQkgICAgYnVmLmFwcGVuZCgiLCAiKTsKKwkJfSBlbHNlIHsKKwkJICAgIG5vdGZpcnN0ID0gdHJ1ZTsKKwkJfQorCQlidWYuYXBwZW5kKHhpZCk7CisJICAgIH0KKwkgICAgYnVmLmFwcGVuZCgifSIpOworCSAgICBsb2dsbihidWYudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAqLworCX0KKworCS8vIGdldCBhbGwgdGhlIGRpc3BsYXkgbmFtZXMgb2YgdGhlc2UgcmVzb3VyY2VzCisJLy8gdGhpcyBzaG91bGQgYmUgZmFzdCBzaW5jZSB0aGUgZGlzcGxheSBuYW1lcyB3ZXJlIGNhY2hlZC4KKwl7CisgICAgICAgICAgICBsb2dsbigic2VydmljZSBkaXNwbGF5IG5hbWVzIGZvciBkZV9ERSIpOworCSAgICBNYXAgbmFtZXMgPSBzZXJ2aWNlLmdldERpc3BsYXlOYW1lcyhMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKCJkZV9ERSIpKTsKKwkgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoInsiKTsKKwkgICAgSXRlcmF0b3IgaXRlciA9IG5hbWVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKwkgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCUVudHJ5IGUgPSAoRW50cnkpaXRlci5uZXh0KCk7CisJCVN0cmluZyBuYW1lID0gKFN0cmluZyllLmdldEtleSgpOworCQlTdHJpbmcgaWQgPSAoU3RyaW5nKWUuZ2V0VmFsdWUoKTsKKwkJYnVmLmFwcGVuZCgiXG4gICAiICsgbmFtZSArICIgLS0+ICIgKyBpZCk7CisJICAgIH0KKwkgICAgYnVmLmFwcGVuZCgiXG59Iik7CisJICAgIGxvZ2xuKGJ1Zi50b1N0cmluZygpKTsKKwl9CisKKyAgICAgICAgQ2FsaWZvcm5pb0xhbmd1YWdlRmFjdG9yeSBjYWxpZmFjdG9yeSA9IG5ldyBDYWxpZm9ybmlvTGFuZ3VhZ2VGYWN0b3J5KCk7CisgICAgICAgIHNlcnZpY2UucmVnaXN0ZXJGYWN0b3J5KGNhbGlmYWN0b3J5KTsKKwkvLyBnZXQgYWxsIHRoZSBkaXNwbGF5IG5hbWVzIG9mIHRoZXNlIHJlc291cmNlcworCXsKKyAgICAgICAgICAgIGxvZ2xuKCJjYWxpZm9ybmlvIGxhbmd1YWdlIGZhY3RvcnkiKTsKKwkgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoInsiKTsKKyAgICAgICAgICAgIFN0cmluZ1tdIGlkTmFtZXMgPSB7CisgICAgICAgICAgICAgICAgY2FsaWZhY3RvcnkuY2FsaWZvcm5pbywgY2FsaWZhY3RvcnkudmFsbGV5LCBjYWxpZmFjdG9yeS5zdXJmZXIsIGNhbGlmYWN0b3J5LmdlZWsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkTmFtZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaWROYW1lID0gaWROYW1lc1tpXTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJcbiAgLS0tICIgKyBpZE5hbWUgKyAiIC0tLSIpOworICAgICAgICAgICAgICAgIE1hcCBuYW1lcyA9IHNlcnZpY2UuZ2V0RGlzcGxheU5hbWVzKExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUoaWROYW1lKSk7CisgICAgICAgICAgICAgICAgSXRlcmF0b3IgaXRlciA9IG5hbWVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgRW50cnkgZSA9IChFbnRyeSlpdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWUuZ2V0S2V5KCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IChTdHJpbmcpZS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJcbiAgICAiICsgbmFtZSArICIgLS0+ICIgKyBpZCk7CisgICAgICAgICAgICAgICAgfQorCSAgICB9CisJICAgIGJ1Zi5hcHBlbmQoIlxufSIpOworCSAgICBsb2dsbihidWYudG9TdHJpbmcoKSk7CisJfQorCisJLy8gdGVzdCBub3RpZmljYXRpb24KKwkvLyBzaW1wbGUgcmVnaXN0cmF0aW9uCisJeworICAgICAgICAgICAgbG9nbG4oInNpbXBsZSByZWdpc3RyYXRpb24gbm90aWZpY2F0aW9uIik7CisJICAgIElDVUxvY2FsZVNlcnZpY2UgbHMgPSBuZXcgSUNVTG9jYWxlU2VydmljZSgpOworCSAgICBTZXJ2aWNlTGlzdGVuZXIgbDEgPSBuZXcgU2VydmljZUxpc3RlbmVyKCkgeworCQkgICAgcHJpdmF0ZSBpbnQgbjsKKwkJICAgIHB1YmxpYyB2b2lkIHNlcnZpY2VDaGFuZ2VkKElDVVNlcnZpY2UgcykgeworCQkJbG9nbG4oImxpc3RlbmVyIDEgcmVwb3J0ICIgKyBuKysgKyAiIHNlcnZpY2UgY2hhbmdlZDogIiArIHMpOworCQkgICAgfQorCQl9OyAKKwkgICAgbHMuYWRkTGlzdGVuZXIobDEpOworCSAgICBTZXJ2aWNlTGlzdGVuZXIgbDIgPSBuZXcgU2VydmljZUxpc3RlbmVyKCkgeworCQkgICAgcHJpdmF0ZSBpbnQgbjsKKwkJICAgIHB1YmxpYyB2b2lkIHNlcnZpY2VDaGFuZ2VkKElDVVNlcnZpY2UgcykgeworCQkJbG9nbG4oImxpc3RlbmVyIDIgcmVwb3J0ICIgKyBuKysgKyAiIHNlcnZpY2UgY2hhbmdlZDogIiArIHMpOworCQkgICAgfQorCQl9OworCSAgICBscy5hZGRMaXN0ZW5lcihsMik7CisJICAgIGxvZ2xuKCJyZWdpc3RlcmluZyBmb28uLi4gIik7CisJICAgIGxzLnJlZ2lzdGVyT2JqZWN0KCJGb28iLCAiZW5fRk9PIik7CisJICAgIGxvZ2xuKCJyZWdpc3RlcmluZyBiYXIuLi4gIik7CisJICAgIGxzLnJlZ2lzdGVyT2JqZWN0KCJCYXIiLCAiZW5fQkFSIik7CisJICAgIGxvZ2xuKCJnZXR0aW5nIGZvby4uLiIpOworCSAgICBsb2dsbigoU3RyaW5nKWxzLmdldCgiZW5fRk9PIikpOworCSAgICBsb2dsbigicmVtb3ZpbmcgbGlzdGVuZXIgMi4uLiIpOworCSAgICBscy5yZW1vdmVMaXN0ZW5lcihsMik7CisJICAgIGxvZ2xuKCJyZWdpc3RlcmluZyBiYXouLi4iKTsKKwkgICAgbHMucmVnaXN0ZXJPYmplY3QoIkJheiIsICJlbl9CQVoiKTsKKwkgICAgbG9nbG4oInJlbW92aW5nIGxpc3RlbmVyIDEiKTsKKwkgICAgbHMucmVtb3ZlTGlzdGVuZXIobDEpOworCSAgICBsb2dsbigicmVnaXN0ZXJpbmcgYnVycC4uLiIpOworCSAgICBscy5yZWdpc3Rlck9iamVjdCgiQnVycCIsICJlbl9CVVJQIik7CisKKwkgICAgLy8gc2hvdWxkIG9ubHkgZ2V0IG9uZSBub3RpZmljYXRpb24gZXZlbiBpZiByZWdpc3RlciBtdWx0aXBsZSB0aW1lcworCSAgICBsb2dsbigiLi4uIHRyeWluZyBtdWx0aXBsZSByZWdpc3RyYXRpb24iKTsKKwkgICAgbHMuYWRkTGlzdGVuZXIobDEpOworCSAgICBscy5hZGRMaXN0ZW5lcihsMSk7CisJICAgIGxzLmFkZExpc3RlbmVyKGwxKTsKKwkgICAgbHMuYWRkTGlzdGVuZXIobDIpOworCSAgICBscy5yZWdpc3Rlck9iamVjdCgiRm9vIiwgImVuX0ZPTyIpOworCSAgICBsb2dsbigiLi4uIHJlZ2lzdGVyZWQgZm9vIik7CisKKwkgICAgLy8gc2luY2UgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIHdlIGNhbiBjYWxsYmFjayBhbmQgbm90IGRlYWRsb2NrCisJICAgIFNlcnZpY2VMaXN0ZW5lciBsMyA9IG5ldyBTZXJ2aWNlTGlzdGVuZXIoKSB7CisJCSAgICBwcml2YXRlIGludCBuOworCQkgICAgcHVibGljIHZvaWQgc2VydmljZUNoYW5nZWQoSUNVU2VydmljZSBzKSB7CisJCQlsb2dsbigibGlzdGVuZXIgMyByZXBvcnQgIiArIG4rKyArICIgc2VydmljZSBjaGFuZ2VkLi4uIik7CisJCQlpZiAocy5nZXQoImVuX0JPSU5LIikgPT0gbnVsbCkgeyAvLyBkb24ndCByZWN1cnNlIG9uIG91cnNlbHZlcyEhIQorCQkJICAgIGxvZ2xuKCJyZWdpc3RlcmluZyBib2luay4uLiIpOworCQkJICAgIHMucmVnaXN0ZXJPYmplY3QoImJvaW5rIiwgImVuX0JPSU5LIik7CisJCQl9CisJCSAgICB9CisJCX07CisJICAgIGxzLmFkZExpc3RlbmVyKGwzKTsKKwkgICAgbG9nbG4oInJlZ2lzdGVyaW5nIGJvby4uLiIpOworCSAgICBscy5yZWdpc3Rlck9iamVjdCgiQm9vIiwgImVuX0JPTyIpOworCSAgICBsb2dsbigiLi4uZG9uZSIpOworCisJICAgIHRyeSB7CisJCVRocmVhZC5zbGVlcCgxMDApOworCSAgICB9CisJICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFRlc3RMb2NhbGVLZXlGYWN0b3J5IGV4dGVuZHMgTG9jYWxlS2V5RmFjdG9yeSB7CisJcHJvdGVjdGVkIGZpbmFsIFNldCBpZHM7CisJcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBmYWN0b3J5SUQ7CisKKwlwdWJsaWMgVGVzdExvY2FsZUtleUZhY3RvcnkoU3RyaW5nW10gaWRzLCBTdHJpbmcgZmFjdG9yeUlEKSB7CisgICAgICAgICAgICBzdXBlcihWSVNJQkxFLCBmYWN0b3J5SUQpOworCisJICAgIHRoaXMuaWRzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KG5ldyBIYXNoU2V0KEFycmF5cy5hc0xpc3QoaWRzKSkpOworICAgICAgICAgICAgdGhpcy5mYWN0b3J5SUQgPSBmYWN0b3J5SUQgKyAiOiAiOworCX0KKyAgICAKKwlwcm90ZWN0ZWQgT2JqZWN0IGhhbmRsZUNyZWF0ZShMb2NhbGUgbG9jLCBpbnQga2luZCwgSUNVU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFjdG9yeUlEICsgbG9jLnRvU3RyaW5nKCk7CisJfQorCisJcHJvdGVjdGVkIFNldCBnZXRTdXBwb3J0ZWRJRHMoKSB7CisgICAgICAgICAgICByZXR1cm4gaWRzOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAvLyBEaXNhbGxvdyBoaWRpbmcgZm9yIG5vdyBzaW5jZSBpdCBjYXVzZXMgZ25hcmx5IHByb2JsZW1zLCBsaWtlCisgICAgIC8vIGhvdyBkbyB5b3UgbG9jYWxpemUgdGhlIGhpZGRlbiAoYnV0IHN0aWxsIGV4cG9ydGVkKSBuYW1lcy4KKworICAgIHN0YXRpYyBjbGFzcyBUZXN0SGlkaW5nRmFjdG9yeSBpbXBsZW1lbnRzIElDVVNlcnZpY2UuRmFjdG9yeSB7CisJcHJvdGVjdGVkIGZpbmFsIFN0cmluZ1tdIGlkczsKKwlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGZhY3RvcnlJRDsKKworCXB1YmxpYyBUZXN0SGlkaW5nRmFjdG9yeShTdHJpbmdbXSBpZHMpIHsKKwkgICAgdGhpcyhpZHMsICJIaWRpbmciKTsKKwl9CisKKwlwdWJsaWMgVGVzdEhpZGluZ0ZhY3RvcnkoU3RyaW5nW10gaWRzLCBTdHJpbmcgZmFjdG9yeUlEKSB7CisJICAgIHRoaXMuaWRzID0gKFN0cmluZ1tdKWlkcy5jbG9uZSgpOworCisJICAgIGlmIChmYWN0b3J5SUQgPT0gbnVsbCB8fCBmYWN0b3J5SUQubGVuZ3RoKCkgPT0gMCkgeworCQl0aGlzLmZhY3RvcnlJRCA9ICIiOworCSAgICB9IGVsc2UgeworCQl0aGlzLmZhY3RvcnlJRCA9IGZhY3RvcnlJRCArICI6ICI7CisJICAgIH0KKwl9CisKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZShLZXkga2V5LCBJQ1VTZXJ2aWNlIHNlcnZpY2UpIHsKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyArK2kpIHsKKwkJaWYgKExvY2FsZVV0aWxpdHkuaXNGYWxsYmFja09mKGlkc1tpXSwga2V5LmN1cnJlbnRJRCgpKSkgeworCQkgICAgcmV0dXJuIGZhY3RvcnlJRCArIGtleS5jYW5vbmljYWxJRCgpOworCQl9CisJICAgIH0KKwkgICAgcmV0dXJuIG51bGw7CisJfQorCisJcHVibGljIHZvaWQgdXBkYXRlVmlzaWJsZUlEcyhNYXAgcmVzdWx0KSB7CisJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKSB7CisJCVN0cmluZyBpZCA9IGlkc1tpXTsKKwkJSXRlcmF0b3IgaXRlciA9IHJlc3VsdC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJICAgIGlmIChMb2NhbGVVdGlsaXR5LmlzRmFsbGJhY2tPZihpZCwgKFN0cmluZylpdGVyLm5leHQoKSkpIHsKKwkJCWl0ZXIucmVtb3ZlKCk7CisJCSAgICB9CisJCX0KKwkJcmVzdWx0LnB1dChpZCwgdGhpcyk7CisJICAgIH0KKwl9CisKKwlwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKFN0cmluZyBpZCwgTG9jYWxlIGxvY2FsZSkgeworCSAgICByZXR1cm4gZmFjdG9yeUlEICsgTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShpZCkuZ2V0RGlzcGxheU5hbWUobG9jYWxlKTsKKwl9CisgICAgfQorICAgICovCisKKyAgICBzdGF0aWMgY2xhc3MgQ2FsaWZvcm5pb0xhbmd1YWdlRmFjdG9yeSBleHRlbmRzIElDVVJlc291cmNlQnVuZGxlRmFjdG9yeSB7CisJcHVibGljIHN0YXRpYyBTdHJpbmcgY2FsaWZvcm5pbyA9ICJlbl9VU19DQSI7CisJcHVibGljIHN0YXRpYyBTdHJpbmcgdmFsbGV5ID0gY2FsaWZvcm5pbyArICJfVkFMTEVZIjsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBzdXJmZXIgPSBjYWxpZm9ybmlvICsgIl9TVVJGRVIiOworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdlZWsgPSBjYWxpZm9ybmlvICsgIl9HRUVLIjsKKyAgICAgICAgcHVibGljIHN0YXRpYyBTZXQgc3VwcG9ydGVkSURzOworICAgICAgICBzdGF0aWMgeworICAgICAgICAgICAgSGFzaFNldCByZXN1bHQgPSBuZXcgSGFzaFNldCgpOworICAgICAgICAgICAgcmVzdWx0LmFkZEFsbChJQ1VMb2NhbGVEYXRhLmdldEF2YWlsYWJsZUxvY2FsZU5hbWVTZXQoKSk7CisJICAgIHJlc3VsdC5hZGQoY2FsaWZvcm5pbyk7CisJICAgIHJlc3VsdC5hZGQodmFsbGV5KTsKKwkgICAgcmVzdWx0LmFkZChzdXJmZXIpOworCSAgICByZXN1bHQuYWRkKGdlZWspOworICAgICAgICAgICAgc3VwcG9ydGVkSURzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KHJlc3VsdCk7CisgICAgICAgIH0KKworCXB1YmxpYyBTZXQgZ2V0U3VwcG9ydGVkSURzKCkgeworICAgICAgICAgICAgcmV0dXJuIHN1cHBvcnRlZElEczsKKwl9CisKKwlwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKFN0cmluZyBpZCwgTG9jYWxlIGxvY2FsZSkgeworCSAgICBTdHJpbmcgcHJlZml4ID0gIiI7CisJICAgIFN0cmluZyBzdWZmaXggPSAiIjsKKwkgICAgU3RyaW5nIGxzID0gbG9jYWxlLnRvU3RyaW5nKCk7CisJICAgIGlmIChMb2NhbGVVdGlsaXR5LmlzRmFsbGJhY2tPZihjYWxpZm9ybmlvLCBscykpIHsKKwkJaWYgKGxzLmVxdWFsc0lnbm9yZUNhc2UodmFsbGV5KSkgeworCQkgICAgcHJlZml4ID0gIkxpa2UsIHlvdSBrbm93LCBpdCdzIHNvIHRvdGFsbHkgIjsKKwkJfSBlbHNlIGlmIChscy5lcXVhbHNJZ25vcmVDYXNlKHN1cmZlcikpIHsKKwkJICAgIHByZWZpeCA9ICJEdWRlLCBpdHMgIjsKKwkJfSBlbHNlIGlmIChscy5lcXVhbHNJZ25vcmVDYXNlKGdlZWspKSB7CisJCSAgICBwcmVmaXggPSAiSSdkIGVzdGltYXRlIGl0J3MgYXBwcm94aW1hdGVseSAiOworCQl9IGVsc2UgeworCQkgICAgcHJlZml4ID0gIkh1aD8gIE1heWJlICI7CisJCX0KKwkgICAgfQorCSAgICBpZiAoTG9jYWxlVXRpbGl0eS5pc0ZhbGxiYWNrT2YoY2FsaWZvcm5pbywgaWQpKSB7CisJCWlmIChpZC5lcXVhbHNJZ25vcmVDYXNlKHZhbGxleSkpIHsKKwkJICAgIHN1ZmZpeCA9ICJsaWtlIHRoZSBWYWxsZXksIHlvdSBrbm93PyAgTGV0J3MgZ28gdG8gdGhlIG1hbGwhIjsKKwkJfSBlbHNlIGlmIChpZC5lcXVhbHNJZ25vcmVDYXNlKHN1cmZlcikpIHsKKwkJICAgIHN1ZmZpeCA9ICJ0aW1lIHRvIGhpdCB0aG9zZSBnbmFybHkgd2F2ZXMsIER1ZGUhISEiOworCQl9IGVsc2UgaWYgKGlkLmVxdWFsc0lnbm9yZUNhc2UoZ2VlaykpIHsKKwkJICAgIHN1ZmZpeCA9ICJhbGwgc3lzdGVtcyBnby4gIFQtTWludXMgOSwgOCwgNy4uLiI7CisJCX0gZWxzZSB7CisJCSAgICBzdWZmaXggPSAiTm8gSGFibGEgRW5nbGFpcyI7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc3VmZml4ID0gc3VwZXIuZ2V0RGlzcGxheU5hbWUoaWQsIGxvY2FsZSk7CisJICAgIH0KKwkJCisJICAgIHJldHVybiBwcmVmaXggKyBzdWZmaXg7CisJfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIFRlc3RMb2NhbGUoKSB7CisJSUNVTG9jYWxlU2VydmljZSBzZXJ2aWNlID0gbmV3IElDVUxvY2FsZVNlcnZpY2UoInRlc3QgbG9jYWxlIik7CisJc2VydmljZS5yZWdpc3Rlck9iamVjdCgicm9vdCIsICIiKTsKKwlzZXJ2aWNlLnJlZ2lzdGVyT2JqZWN0KCJnZXJtYW4iLCAiZGUiKTsKKwlzZXJ2aWNlLnJlZ2lzdGVyT2JqZWN0KCJnZXJtYW5fR2VybWFueSIsIExvY2FsZS5HRVJNQU5ZKTsKKwlzZXJ2aWNlLnJlZ2lzdGVyT2JqZWN0KCJqYXBhbmVzZSIsICJqYSIpOworCXNlcnZpY2UucmVnaXN0ZXJPYmplY3QoImphcGFuZXNlX0phcGFuIiwgTG9jYWxlLkpBUEFOKTsKKworCU9iamVjdCB0YXJnZXQgPSBzZXJ2aWNlLmdldCgiZGVfVVMiKTsKKwljb25maXJtRXF1YWwoInRlc3QgZGVfVVMiLCAiZ2VybWFuIiwgdGFyZ2V0KTsKKworICAgICAgICBMb2NhbGUgZGUgPSBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKCJkZSIpOworICAgICAgICBMb2NhbGUgZGVfVVMgPSBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKCJkZV9VUyIpOworCisgICAgICAgIHRhcmdldCA9IHNlcnZpY2UuZ2V0KGRlX1VTKTsKKwljb25maXJtRXF1YWwoInRlc3QgZGVfVVMgMiIsICJnZXJtYW4iLCB0YXJnZXQpOworCisgICAgICAgIHRhcmdldCA9IHNlcnZpY2UuZ2V0KGRlX1VTLCBMb2NhbGVLZXkuS0lORF9BTlkpOworCWNvbmZpcm1FcXVhbCgidGVzdCBkZV9VUyAzIiwgImdlcm1hbiIsIHRhcmdldCk7CisKKyAgICAgICAgdGFyZ2V0ID0gc2VydmljZS5nZXQoZGVfVVMsIDEyMzQpOworCWNvbmZpcm1FcXVhbCgidGVzdCBkZV9VUyA0IiwgImdlcm1hbiIsIHRhcmdldCk7CisKKyAgICAgICAgTG9jYWxlW10gYWN0dWFsUmV0dXJuID0gbmV3IExvY2FsZVsxXTsKKyAgICAgICAgdGFyZ2V0ID0gc2VydmljZS5nZXQoZGVfVVMsIGFjdHVhbFJldHVybik7CisgICAgICAgIGNvbmZpcm1FcXVhbCgidGVzdCBkZV9VUyA1IiwgImdlcm1hbiIsIHRhcmdldCk7CisgICAgICAgIGNvbmZpcm1FcXVhbCgidGVzdCBkZV9VUyA2IiwgYWN0dWFsUmV0dXJuWzBdLCBkZSk7CisKKyAgICAgICAgYWN0dWFsUmV0dXJuWzBdID0gbnVsbDsKKyAgICAgICAgdGFyZ2V0ID0gc2VydmljZS5nZXQoZGVfVVMsIExvY2FsZUtleS5LSU5EX0FOWSwgYWN0dWFsUmV0dXJuKTsKKyAgICAgICAgY29uZmlybUVxdWFsKCJ0ZXN0IGRlX1VTIDciLCBhY3R1YWxSZXR1cm5bMF0sIGRlKTsKKworICAgICAgICBhY3R1YWxSZXR1cm5bMF0gPSBudWxsOworICAgICAgICB0YXJnZXQgPSBzZXJ2aWNlLmdldChkZV9VUywgMTIzNCwgYWN0dWFsUmV0dXJuKTsKKwljb25maXJtRXF1YWwoInRlc3QgZGVfVVMgOCIsICJnZXJtYW4iLCB0YXJnZXQpOworICAgICAgICBjb25maXJtRXF1YWwoInRlc3QgZGVfVVMgOSIsIGFjdHVhbFJldHVyblswXSwgZGUpOworCisgICAgICAgIHNlcnZpY2UucmVnaXN0ZXJPYmplY3QoIm9uZS9kZV9VUyIsIGRlX1VTLCAxKTsKKyAgICAgICAgc2VydmljZS5yZWdpc3Rlck9iamVjdCgidHdvL2RlX1VTIiwgZGVfVVMsIDIpOworCisgICAgICAgIHRhcmdldCA9IHNlcnZpY2UuZ2V0KGRlX1VTLCAxKTsKKyAgICAgICAgY29uZmlybUVxdWFsKCJ0ZXN0IGRlX1VTIGtpbmQgMSIsICJvbmUvZGVfVVMiLCB0YXJnZXQpOworICAgICAgICAKKyAgICAgICAgdGFyZ2V0ID0gc2VydmljZS5nZXQoZGVfVVMsIDIpOworICAgICAgICBjb25maXJtRXF1YWwoInRlc3QgZGVfVVMga2luZCAyIiwgInR3by9kZV9VUyIsIHRhcmdldCk7CisgICAgICAgIAorICAgICAgICB0YXJnZXQgPSBzZXJ2aWNlLmdldChkZV9VUyk7CisgICAgICAgIGNvbmZpcm1FcXVhbCgidGVzdCBkZV9VUyBraW5kIDMiLCAiZ2VybWFuIiwgdGFyZ2V0KTsKKworICAgICAgICBMb2NhbGVLZXkgbGtleSA9IExvY2FsZUtleS5jcmVhdGVXaXRoQ2Fub25pY2FsRmFsbGJhY2soImVuIiwgbnVsbCwgMTIzNCk7CisgICAgICAgIGxvZ2xuKCJsa2V5IHByZWZpeDogIiArIGxrZXkucHJlZml4KCkpOworICAgICAgICBsb2dsbigibGtleSBkZXNjcmlwdG9yOiAiICsgbGtleS5jdXJyZW50RGVzY3JpcHRvcigpKTsKKyAgICAgICAgbG9nbG4oImxrZXkgY3VycmVudCBsb2NhbGU6ICIgKyBsa2V5LmN1cnJlbnRMb2NhbGUoKSk7CisKKyAgICAgICAgbGtleS5mYWxsYmFjaygpOworICAgICAgICBsb2dsbigibGtleSBkZXNjcmlwdG9yIDI6ICIgKyBsa2V5LmN1cnJlbnREZXNjcmlwdG9yKCkpOworCisgICAgICAgIGxrZXkuZmFsbGJhY2soKTsKKyAgICAgICAgbG9nbG4oImxrZXkgZGVzY3JpcHRvciAzOiAiICsgbGtleS5jdXJyZW50RGVzY3JpcHRvcigpKTsKKworCXRhcmdldCA9IHNlcnZpY2UuZ2V0KCJ6YV9QUFAiKTsKKwljb25maXJtRXF1YWwoInRlc3QgemFwcHAiLCAicm9vdCIsIHRhcmdldCk7CisKKwlMb2NhbGUgbG9jID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKwlMb2NhbGUuc2V0RGVmYXVsdChMb2NhbGUuSkFQQU5FU0UpOworCXRhcmdldCA9IHNlcnZpY2UuZ2V0KCJ6YV9QUFAiKTsKKwljb25maXJtRXF1YWwoInRlc3Qgd2l0aCBqYSBsb2NhbGUiLCAiamFwYW5lc2UiLCB0YXJnZXQpOworCisJU2V0IGlkcyA9IHNlcnZpY2UuZ2V0VmlzaWJsZUlEcygpOworCWZvciAoSXRlcmF0b3IgaXRlciA9IGlkcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKKwkgICAgbG9nbG4oImlkOiAiICsgaXRlci5uZXh0KCkpOworCX0KKworCUxvY2FsZS5zZXREZWZhdWx0KGxvYyk7CisJaWRzID0gc2VydmljZS5nZXRWaXNpYmxlSURzKCk7CisJZm9yIChJdGVyYXRvciBpdGVyID0gaWRzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworCSAgICBsb2dsbigiaWQ6ICIgKyBpdGVyLm5leHQoKSk7CisJfQorCisJdGFyZ2V0ID0gc2VydmljZS5nZXQoInphX1BQUCIpOworCWNvbmZpcm1FcXVhbCgidGVzdCB3aXRoIGVuIGxvY2FsZSIsICJyb290IiwgdGFyZ2V0KTsKKworICAgICAgICBMb2NhbGVbXSBsb2NhbGVzID0gc2VydmljZS5nZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgIGNvbmZpcm1JZGVudGljYWwoInRlc3QgYXZhaWxhYmxlIGxvY2FsZXMiLCBsb2NhbGVzLmxlbmd0aCwgNik7CisgICAgICAgIGxvZ2xuKCJsb2NhbGVzOiAiKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsb2coIlxuICBbIiArIGkgKyAiXSAiICsgbG9jYWxlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgbG9nbG4oIiAiKTsKKworICAgICAgICBzZXJ2aWNlLnJlZ2lzdGVyRmFjdG9yeShuZXcgSUNVUmVzb3VyY2VCdW5kbGVGYWN0b3J5KCkpOworICAgICAgICB0YXJnZXQgPSBzZXJ2aWNlLmdldChMb2NhbGUuSkFQQU4pOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBuID0gMDsKKyAgICAgICAgICAgIExpc3QgZmFjdG9yaWVzID0gc2VydmljZS5mYWN0b3JpZXMoKTsKKyAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBmYWN0b3JpZXMuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJbIiArIG4rKyArICJdICIgKyBpdGVyLm5leHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBUZXN0V3JhcEZhY3RvcnkoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBncmVldGluZyA9ICJIZWxsbyBUaGVyZSI7CisgICAgICAgIGZpbmFsIFN0cmluZyBncmVldGluZ0lEID0gImdyZWV0aW5nIjsKKworICAgICAgICBJQ1VTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgSUNVU2VydmljZSgid3JhcCIpOworICAgICAgICBzZXJ2aWNlLnJlZ2lzdGVyT2JqZWN0KGdyZWV0aW5nLCBncmVldGluZ0lEKTsKKworICAgICAgICBsb2dsbigidGVzdCBvbmU6ICIgKyBzZXJ2aWNlLmdldChncmVldGluZ0lEKSk7CisKKyAgICAgICAgY2xhc3MgV3JhcEZhY3RvcnkgaW1wbGVtZW50cyBGYWN0b3J5IHsKKyAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlKEtleSBrZXksIElDVVNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICAgICAgICAgIGlmIChrZXkuY3VycmVudElEKCkuZXF1YWxzKGdyZWV0aW5nSUQpKSB7CisgICAgICAgICAgICAgICAgICAgIE9iamVjdCBwcmV2aW91cyA9IHNlcnZpY2UuZ2V0S2V5KGtleSwgbnVsbCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQSBkaWZmZXJlbnQgZ3JlZXRpbmc6IFwiIiArIHByZXZpb3VzICsgIlwiIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVZpc2libGVJRHMoTWFwIHJlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5wdXQoImdyZWV0aW5nIiwgdGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoU3RyaW5nIGlkLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJ3cmFwICciICsgaWQgKyAiJyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2VydmljZS5yZWdpc3RlckZhY3RvcnkobmV3IFdyYXBGYWN0b3J5KCkpOworCisgICAgICAgIGNvbmZpcm1FcXVhbCgid3JhcCB0ZXN0OiAiLCBzZXJ2aWNlLmdldChncmVldGluZ0lEKSwgIkEgZGlmZmVyZW50IGdyZWV0aW5nOiBcIiIgKyBncmVldGluZyArICJcIiIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGVycmxuKFN0cmluZyBtc2cpIHsKKyAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKG1zZyk7CisgICAgICAgIHN1cGVyLmVycmxuKG1zZyk7CisgICAgfQorCisgICAgLy8gbWlzYyBjb3ZlcmFnZSB0ZXN0cworICAgIHB1YmxpYyB2b2lkIFRlc3RDb3ZlcmFnZSgpIHsKKwkvLyBLZXkKKwlLZXkga2V5ID0gbmV3IEtleSgiZm9vYmFyIik7CisJbG9nbG4oIklEOiAiICsga2V5LmlkKCkpOworCWxvZ2xuKCJjYW5vbmljYWxJRDogIiArIGtleS5jYW5vbmljYWxJRCgpKTsKKwlsb2dsbigiY3VycmVudElEOiAiICsga2V5LmN1cnJlbnRJRCgpKTsKKwlsb2dsbigiaGFzIGZhbGxiYWNrOiAiICsga2V5LmZhbGxiYWNrKCkpOworCisJLy8gU2ltcGxlRmFjdG9yeQorCU9iamVjdCBvYmogPSBuZXcgT2JqZWN0KCk7CisJU2ltcGxlRmFjdG9yeSBzZiA9IG5ldyBTaW1wbGVGYWN0b3J5KG9iaiwgIm9iamVjdCIpOworCXRyeSB7CisJICAgIHNmID0gbmV3IFNpbXBsZUZhY3RvcnkobnVsbCwgbnVsbCk7CisJICAgIGVycmxuKCJkaWRuJ3QgdGhyb3cgZXhjZXB0aW9uIik7CisJfQorCWNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworCSAgICBsb2dsbigiT0s6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisJfQorCWNhdGNoIChFeGNlcHRpb24gZSkgeworCSAgICBlcnJsbigidGhyZXcgd3JvbmcgZXhjZXB0aW9uIiArIGUpOworCX0KKwlsb2dsbihzZi5nZXREaXNwbGF5TmFtZSgib2JqZWN0IiwgbnVsbCkpOworCisJLy8gSUNVU2VydmljZQorCUlDVVNlcnZpY2Ugc2VydmljZSA9IG5ldyBJQ1VTZXJ2aWNlKCk7CisJc2VydmljZS5yZWdpc3RlckZhY3Rvcnkoc2YpOworCisJdHJ5IHsKKwkgICAgc2VydmljZS5nZXQobnVsbCwgbnVsbCk7CisJICAgIGVycmxuKCJkaWRuJ3QgdGhyb3cgZXhjZXB0aW9uIik7CisJfQorCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisJICAgIGxvZ2xuKCJPSzogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKwl9CisgICAgICAgIC8qCisJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJICAgIGVycmxuKCJ0aHJldyB3cm9uZyBleGNlcHRpb24iICsgZSk7CisJfQorICAgICAgICAqLworCXRyeSB7CisJICAgIHNlcnZpY2UucmVnaXN0ZXJGYWN0b3J5KG51bGwpOworCSAgICBlcnJsbigiZGlkbid0IHRocm93IGV4Y2VwdGlvbiIpOworCX0KKwljYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworCSAgICBsb2dsbigiT0s6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisJfQorCWNhdGNoIChFeGNlcHRpb24gZSkgeworCSAgICBlcnJsbigidGhyZXcgd3JvbmcgZXhjZXB0aW9uIiArIGUpOworCX0KKworCXRyeSB7CisJICAgIHNlcnZpY2UudW5yZWdpc3RlckZhY3RvcnkobnVsbCk7CisJICAgIGVycmxuKCJkaWRuJ3QgdGhyb3cgZXhjZXB0aW9uIik7CisJfQorCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisJICAgIGxvZ2xuKCJPSzogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKwl9CisJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJICAgIGVycmxuKCJ0aHJldyB3cm9uZyBleGNlcHRpb24iICsgZSk7CisJfQorCisJbG9nbG4oIm9iamVjdCBpczogIiArIHNlcnZpY2UuZ2V0KCJvYmplY3QiKSk7CisKKwlsb2dsbigic3RhdHM6ICIgKyBzZXJ2aWNlLnN0YXRzKCkpOworCisJLy8gSUNVUldMb2NrCisKKwlJQ1VSV0xvY2sgcndsb2NrID0gbmV3IElDVVJXTG9jaygpOworCXJ3bG9jay5hY3F1aXJlUmVhZCgpOworCXJ3bG9jay5yZWxlYXNlUmVhZCgpOworCisJcndsb2NrLmFjcXVpcmVXcml0ZSgpOworCXJ3bG9jay5yZWxlYXNlV3JpdGUoKTsKKwlsb2dsbigic3RhdHM6ICIgKyByd2xvY2suZ2V0U3RhdHMoKSk7CisJbG9nbG4oInN0YXRzOiAiICsgcndsb2NrLmNsZWFyU3RhdHMoKSk7CisJcndsb2NrLmFjcXVpcmVSZWFkKCk7CisJcndsb2NrLnJlbGVhc2VSZWFkKCk7CisJcndsb2NrLmFjcXVpcmVXcml0ZSgpOworCXJ3bG9jay5yZWxlYXNlV3JpdGUoKTsKKwlsb2dsbigic3RhdHM6ICIgKyByd2xvY2suZ2V0U3RhdHMoKSk7CisKKwl0cnkgeworCSAgICByd2xvY2sucmVsZWFzZVJlYWQoKTsKKwkgICAgZXJybG4oIm5vIGVycm9yIHRocm93biIpOworCX0KKwljYXRjaCAoSW50ZXJuYWxFcnJvciBlKSB7CisJICAgIGxvZ2xuKCJPSzogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKwl9CisKKwl0cnkgeworCSAgICByd2xvY2sucmVsZWFzZVdyaXRlKCk7CisJICAgIGVycmxuKCJubyBlcnJvciB0aHJvd24iKTsKKwl9CisJY2F0Y2ggKEludGVybmFsRXJyb3IgZSkgeworCSAgICBsb2dsbigiT0s6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisJfQorCisgICAgICAgIC8vIElDVUxvY2FsZVNlcnZpY2UKKworCS8vIExvY2FsZUtleQorICAgICAgICAKKwkvLyBMb2NhbGVLZXkgbGtleSA9IExvY2FsZUtleS5jcmVhdGUoImVuX1VTIiwgImphX0pQIik7CisJLy8gbGtleSA9IExvY2FsZUtleS5jcmVhdGUobnVsbCwgbnVsbCk7CisJTG9jYWxlS2V5IGxrZXkgPSBMb2NhbGVLZXkuY3JlYXRlV2l0aENhbm9uaWNhbEZhbGxiYWNrKCJlbl9VUyIsICJqYV9KUCIpOworICAgICAgICBsb2dsbigibGtleTogIiArIGxrZXkpOworCisgICAgICAgIGxrZXkgPSBMb2NhbGVLZXkuY3JlYXRlV2l0aENhbm9uaWNhbEZhbGxiYWNrKG51bGwsIG51bGwpOworICAgICAgICBsb2dsbigibGtleSBmcm9tIG51bGwsbnVsbDogIiArIGxrZXkpOworCisJLy8gTG9jYWxlS2V5RmFjdG9yeSAKKwlMb2NhbGVLZXlGYWN0b3J5IGxrZiA9IG5ldyBMS0ZTdWJjbGFzcyhmYWxzZSk7CisgICAgICAgIGxvZ2xuKCJsa2Y6ICIgKyBsa2YpOworCWxvZ2xuKCJvYmo6ICIgKyBsa2YuY3JlYXRlKGxrZXksIG51bGwpKTsKKwlsb2dsbihsa2YuZ2V0RGlzcGxheU5hbWUoImZvbyIsIG51bGwpKTsKKwlsb2dsbihsa2YuZ2V0RGlzcGxheU5hbWUoImJhciIsIG51bGwpKTsKKwlsa2YudXBkYXRlVmlzaWJsZUlEcyhuZXcgSGFzaE1hcCgpKTsKKworCUxvY2FsZUtleUZhY3RvcnkgaW52aXNpYmxlTEtGID0gbmV3IExLRlN1YmNsYXNzKGZhbHNlKTsKKwlsb2dsbigib2JqOiAiICsgaW52aXNpYmxlTEtGLmNyZWF0ZShsa2V5LCBudWxsKSk7CisJbG9nbG4oaW52aXNpYmxlTEtGLmdldERpc3BsYXlOYW1lKCJmb28iLCBudWxsKSk7CisJbG9nbG4oaW52aXNpYmxlTEtGLmdldERpc3BsYXlOYW1lKCJiYXIiLCBudWxsKSk7CisJaW52aXNpYmxlTEtGLnVwZGF0ZVZpc2libGVJRHMobmV3IEhhc2hNYXAoKSk7CisKKwkvLyBSZXNvdXJjZUJ1bmRsZUZhY3RvcnkKKwlJQ1VSZXNvdXJjZUJ1bmRsZUZhY3RvcnkgcmJmID0gbmV3IElDVVJlc291cmNlQnVuZGxlRmFjdG9yeSgpOworCWxvZ2xuKCJSQjogIiArIHJiZi5jcmVhdGUobGtleSwgbnVsbCkpOworCisJLy8gSUNVTm90aWZpZXIKKwlJQ1VOb3RpZmllciBuZiA9IG5ldyBJQ1VOU3ViY2xhc3MoKTsKKwl0cnkgeworCSAgICBuZi5hZGRMaXN0ZW5lcihudWxsKTsKKwkgICAgZXJybG4oImFkZGVkIG51bGwgbGlzdGVuZXIiKTsKKwl9CisJY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKwkgICAgbG9nbG4oZS5nZXRNZXNzYWdlKCkpOworCX0KKwljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkgICAgZXJybG4oImdvdCB3cm9uZyBleGNlcHRpb24iKTsKKwl9CisKKwl0cnkgeworCSAgICBuZi5hZGRMaXN0ZW5lcihuZXcgV3JvbmdMaXN0ZW5lcigpKTsKKwkgICAgZXJybG4oImFkZGVkIHdyb25nIGxpc3RlbmVyIik7CisJfQorCWNhdGNoIChJbnRlcm5hbEVycm9yIGUpIHsKKwkgICAgbG9nbG4oZS5nZXRNZXNzYWdlKCkpOworCX0KKwljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkgICAgZXJybG4oImdvdCB3cm9uZyBleGNlcHRpb24iKTsKKwl9CisKKwl0cnkgeworCSAgICBuZi5yZW1vdmVMaXN0ZW5lcihudWxsKTsKKwkgICAgZXJybG4oInJlbW92ZWQgbnVsbCBsaXN0ZW5lciIpOworCX0KKwljYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworCSAgICBsb2dsbihlLmdldE1lc3NhZ2UoKSk7CisJfQorCWNhdGNoIChFeGNlcHRpb24gZSkgeworCSAgICBlcnJsbigiZ290IHdyb25nIGV4Y2VwdGlvbiIpOworCX0KKworCW5mLnJlbW92ZUxpc3RlbmVyKG5ldyBNeUxpc3RlbmVyKCkpOworCW5mLm5vdGlmeUNoYW5nZWQoKTsKKwluZi5hZGRMaXN0ZW5lcihuZXcgTXlMaXN0ZW5lcigpKTsKKwluZi5yZW1vdmVMaXN0ZW5lcihuZXcgTXlMaXN0ZW5lcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXlMaXN0ZW5lciBpbXBsZW1lbnRzIEV2ZW50TGlzdGVuZXIgeworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBXcm9uZ0xpc3RlbmVyIGltcGxlbWVudHMgRXZlbnRMaXN0ZW5lciB7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIElDVU5TdWJjbGFzcyBleHRlbmRzIElDVU5vdGlmaWVyIHsKKwlwdWJsaWMgYm9vbGVhbiBhY2NlcHRzTGlzdGVuZXIoRXZlbnRMaXN0ZW5lciBsKSB7CisJICAgIHJldHVybiBsIGluc3RhbmNlb2YgTXlMaXN0ZW5lcjsKKwl9CisKKyAgICAgICAgLy8gbm90IHVzZWQsIGp1c3QgbmVlZGVkIHRvIGltcGxlbWVudCBhYnN0cmFjdCBiYXNlCisgICAgICAgIC8vL0NMT1ZFUjpPRkYKKwlwdWJsaWMgdm9pZCBub3RpZnlMaXN0ZW5lcihFdmVudExpc3RlbmVyIGwpIHsKKwl9CisgICAgICAgIC8vL0NMT1ZFUjpPTgorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBMS0ZTdWJjbGFzcyBleHRlbmRzIExvY2FsZUtleUZhY3RvcnkgeworCUxLRlN1YmNsYXNzKGJvb2xlYW4gdmlzaWJsZSkgeworCSAgICBzdXBlcih2aXNpYmxlID8gVklTSUJMRSA6IElOVklTSUJMRSk7CisJfQorCisJcHJvdGVjdGVkIFNldCBnZXRTdXBwb3J0ZWRJRHMoKSB7CisgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfU0VUOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9JQ1VTZXJ2aWNlVGVzdFNhbXBsZS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvSUNVU2VydmljZVRlc3RTYW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTJlM2YzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvSUNVU2VydmljZVRlc3RTYW1wbGUuamF2YQpAQCAtMCwwICsxLDIxMCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL0lDVVNlcnZpY2VUZXN0U2FtcGxlLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMjoxMDoyMCAkCisgKiAkUmV2aXNpb246IDEuMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC51dGlsOworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVTZXJ2aWNlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkxvY2FsZVV0aWxpdHk7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50TGlzdGVuZXI7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK3B1YmxpYyBjbGFzcyBJQ1VTZXJ2aWNlVGVzdFNhbXBsZSB7CisgICAgc3RhdGljIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCUhlbGxvU2VydmljZUNsaWVudCBjbGllbnQgPSBuZXcgSGVsbG9TZXJ2aWNlQ2xpZW50KCk7CisKKwlUaHJlYWQgdCA9IG5ldyBIZWxsb1VwZGF0ZVRocmVhZCgpOworCXQuc3RhcnQoKTsKKwl0cnkgeworCSAgICB0LmpvaW4oKTsKKwl9CisJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKwl9CisJU3lzdGVtLm91dC5wcmludGxuKCJkb25lIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBjbGFzcyB0aGF0IGRpc3BsYXlzIHRoZSBjdXJyZW50IG5hbWVzIGluIHRoZSBIZWxsbyBzZXJ2aWNlLgorICAgICAqIEVhY2ggdGltZSB0aGUgc2VydmljZSBjaGFuZ2VzLCBpdCByZWRpc3BsYXlzIHRoZSBuYW1lcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgY2xhc3MgSGVsbG9TZXJ2aWNlQ2xpZW50IGltcGxlbWVudHMgSGVsbG9TZXJ2aWNlLkhlbGxvU2VydmljZUxpc3RlbmVyIHsKKworCUhlbGxvU2VydmljZUNsaWVudCgpIHsKKwkgICAgSGVsbG9TZXJ2aWNlLmFkZExpc3RlbmVyKHRoaXMpOworCSAgICBkaXNwbGF5KCk7CisJfQorCisJLyoqCisJICogVGhpcyB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgbm90aWZpY2F0aW9uIHRocmVhZCBvZgorCSAqIElDVU5vdGlmaWVyLiAgSUNVTm90aWZpZXIgY291bGQgc3Bhd24gYSAobm9uLWRhZW1vbikgdGhyZWFkCisJICogZm9yIGVhY2ggbGlzdGVuZXIsIHNvIHRoYXQgaW1wb2xpdGUgbGlzdGVuZXJzIHdvdWxkbid0IGhvbGQKKwkgKiB1cCBub3RpZmljYXRpb24sIGJ1dCByaWdodCBub3cgaXQgZG9lc24ndC4gIEluc3RlYWQsIGFsbAorCSAqIG5vdGlmaWNhdGlvbnMgYXJlIGRlbGl2ZXJlZCBvbiB0aGUgbm90aWZpY2F0aW9uIHRocmVhZC4KKwkgKiBTaW5jZSB0aGF0J3MgYSBkYWVtb24gdGhyZWFkLCBhIG5vdGlmaWNhdGlvbiBtaWdodCBub3QKKwkgKiBjb21wbGV0ZSBiZWZvcmUgbWFpbiB0ZXJtaW5hdGVzLiAgCisJICovCisJcHVibGljIHZvaWQgaGVsbG9TZXJ2aWNlQ2hhbmdlZCgpIHsKKwkgICAgZGlzcGxheSgpOworCX0KKworCXByaXZhdGUgdm9pZCBkaXNwbGF5KCkgeworCSAgICBNYXAgbmFtZXMgPSBIZWxsb1NlcnZpY2UuZ2V0RGlzcGxheU5hbWVzKExvY2FsZS5VUyk7CisJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGlzcGxheWluZyAiICsgbmFtZXMuc2l6ZSgpICsgIiBuYW1lcy4iKTsKKwkgICAgSXRlcmF0b3IgaXRlciA9IG5hbWVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKwkgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCUVudHJ5IGVudHJ5ID0gKEVudHJ5KWl0ZXIubmV4dCgpOworCQlTdHJpbmcgZGlzcGxheU5hbWUgPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOworCQlIZWxsb1NlcnZpY2Ugc2VydmljZSA9IEhlbGxvU2VydmljZS5nZXQoKFN0cmluZyllbnRyeS5nZXRWYWx1ZSgpKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKGRpc3BsYXlOYW1lICsgIiBzYXlzICIgKyBzZXJ2aWNlLmhlbGxvKCkpOworCQl0cnkgeworCQkgICAgVGhyZWFkLnNsZWVwKDUwKTsKKwkJfQorCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQl9CisJICAgIH0KKwkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tIik7CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEEgdGhyZWFkIHRvIHVwZGF0ZSB0aGUgc2VydmljZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgY2xhc3MgSGVsbG9VcGRhdGVUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgeworCVN0cmluZ1tdW10gdXBkYXRlcyA9IHsKKwkgICAgeyAiSGV5IiwgImVuX1VTX0lORk9STUFMIiB9LAorCSAgICB7ICJIYWxsbyIsICJkZV9ERV9JTkZPUk1BTCIgfSwKKwkgICAgeyAiWW8hIiwgImVuX1VTX0NBTElGT1JOSUFfSU5GT1JNQUwiIH0sCisJICAgIHsgIkNoaSBGYW5sZSBNYT8iLCAiemhfX0lORk9STUFMIiB9LAorCSAgICB7ICJNdW5jaCBtdW5jaC4uLiBCdXJnZXI/IiwgImVuIiB9LAorCSAgICB7ICJTbmlmZiIsICJmciIgfSwKKwkgICAgeyAiVG9uZ1poaSEgTWFvWmVEb25nIFNpWGlhbmcgV2FuIFN1aSEiLCAiemhfQ04iIH0sCisJICAgIHsgIkJpZXI/IEphISIsICJkZSIgfSwKKwl9OworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1cGRhdGVzLmxlbmd0aDsgKytpKSB7CisJCXRyeSB7CisJCSAgICBUaHJlYWQuc2xlZXAoNTAwKTsKKwkJfQorCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQl9CisJCUhlbGxvU2VydmljZS5yZWdpc3Rlcih1cGRhdGVzW2ldWzBdLCBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKHVwZGF0ZXNbaV1bMV0pKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbiBleGFtcGxlIHNlcnZpY2UgdGhhdCB3cmFwcyBhbiBJQ1Ugc2VydmljZSBpbiBvcmRlciB0byBleHBvcnQgY3VzdG9tIEFQSSBhbmQKKyAgICAgKiBub3RpZmljYXRpb24uIFRoZSBzZXJ2aWNlIGp1c3QgaW1wbGVtZW50cyAnaGVsbG8nLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBIZWxsb1NlcnZpY2UgeworCXByaXZhdGUgc3RhdGljIElDVVNlcnZpY2UgcmVnaXN0cnk7CisJcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKworCXByaXZhdGUgSGVsbG9TZXJ2aWNlKFN0cmluZyBuYW1lKSB7IAorCSAgICB0aGlzLm5hbWUgPSBuYW1lOyAKKwl9CisKKwkvKioKKwkgKiBUaGUgaGVsbG8gc2VydmljZS4uLgorCSAqLworCXB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7IAorCSAgICByZXR1cm4gbmFtZTsgCisJfQorCQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7IAorCSAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKSArICI6ICIgKyBuYW1lOyAKKwl9CisKKwkvKioKKwkgKiBEZWZlcnJlZCBpbml0LgorCSAqLworCXByaXZhdGUgc3RhdGljIElDVVNlcnZpY2UgcmVnaXN0cnkoKSB7CisJICAgIGlmIChyZWdpc3RyeSA9PSBudWxsKSB7CisJCWluaXRSZWdpc3RyeSgpOworCSAgICB9CisJICAgIHJldHVybiByZWdpc3RyeTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRSZWdpc3RyeSgpIHsKKwkgICAgcmVnaXN0cnkgPSBuZXcgSUNVTG9jYWxlU2VydmljZSgpIHsKKwkJICAgIHByb3RlY3RlZCBib29sZWFuIGFjY2VwdHNMaXN0ZW5lcihFdmVudExpc3RlbmVyIGwpIHsKKwkJCXJldHVybiB0cnVlOyAvLyB3ZSBhbHJlYWR5IHZlcmlmeSBpbiBvdXIgd3JhcHBlciBBUElzCisJCSAgICB9CisJCSAgICBwcm90ZWN0ZWQgdm9pZCBub3RpZnlMaXN0ZW5lcihFdmVudExpc3RlbmVyIGwpIHsKKwkJCSgoSGVsbG9TZXJ2aWNlTGlzdGVuZXIpbCkuaGVsbG9TZXJ2aWNlQ2hhbmdlZCgpOworCQkgICAgfQorCQl9OworCisJICAgIC8vIGluaXRpYWxpemUKKwkgICAgZG9SZWdpc3RlcigiSGVsbG8iLCAiZW4iKTsKKwkgICAgZG9SZWdpc3RlcigiQm9uam91ciIsICJmciIpOworCSAgICBkb1JlZ2lzdGVyKCJOaSBIYW8iLCAiemhfQ04iKTsKKwkgICAgZG9SZWdpc3RlcigiR3V0ZW4gVGFnIiwgImRlIik7CisJfQorCisJLyoqCisJICogQSBjdXN0b20gbGlzdGVuZXIgZm9yIGNoYW5nZXMgdG8gdGhpcyBzZXJ2aWNlLiAgV2UgZG9uJ3QgbmVlZCB0bworCSAqIHBvaW50IHRvIHRoZSBzZXJ2aWNlIHNpbmNlIGl0IGlzIGRlZmluZWQgYnkgdGhpcyBjbGFzcyBhbmQgbm90CisJICogYW4gb2JqZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEhlbGxvU2VydmljZUxpc3RlbmVyIGV4dGVuZHMgRXZlbnRMaXN0ZW5lciB7CisJICAgIHB1YmxpYyB2b2lkIGhlbGxvU2VydmljZUNoYW5nZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUeXBlLXNhZmUgbm90aWZpY2F0aW9uIGZvciB0aGlzIHNlcnZpY2UuCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGFkZExpc3RlbmVyKEhlbGxvU2VydmljZUxpc3RlbmVyIGwpIHsKKwkgICAgcmVnaXN0cnkoKS5hZGRMaXN0ZW5lcihsKTsKKwl9CisKKwkvKioKKwkgKiBUeXBlLXNhZmUgbm90aWZpY2F0aW9uIGZvciB0aGlzIHNlcnZpY2UuCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKEhlbGxvU2VydmljZUxpc3RlbmVyIGwpIHsKKwkgICAgcmVnaXN0cnkoKS5yZW1vdmVMaXN0ZW5lcihsKTsKKwl9CisKKwkvKioKKwkgKiBUeXBlLXNhZmUgYWNjZXNzIHRvIHRoZSBzZXJ2aWNlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgSGVsbG9TZXJ2aWNlIGdldChTdHJpbmcgaWQpIHsKKwkgICAgcmV0dXJuIChIZWxsb1NlcnZpY2UpcmVnaXN0cnkoKS5nZXQoaWQpOworCX0KKworCXB1YmxpYyBzdGF0aWMgU2V0IGdldFZpc2libGVJRHMoKSB7CisJICAgIHJldHVybiByZWdpc3RyeSgpLmdldFZpc2libGVJRHMoKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIE1hcCBnZXREaXNwbGF5TmFtZXMoTG9jYWxlIGxvY2FsZSkgeworCSAgICByZXR1cm4gcmVnaXN0cnkoKS5nZXREaXNwbGF5TmFtZXMobG9jYWxlKTsKKwl9CisKKwkvKioKKwkgKiBSZWdpc3RlciBhIG5ldyBoZWxsbyBzdHJpbmcgZm9yIHRoaXMgbG9jYWxlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCByZWdpc3RlcihTdHJpbmcgaGVsbG9TdHJpbmcsIExvY2FsZSBsb2NhbGUpIHsKKwkgICAgaWYgKGhlbGxvU3RyaW5nID09IG51bGwgfHwgbG9jYWxlID09IG51bGwpIHsKKwkJdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7CisJICAgIH0KKwkgICAgZG9SZWdpc3RlcihoZWxsb1N0cmluZywgTG9jYWxlVXRpbGl0eS5jYW5vbmljYWxMb2NhbGVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCkpKTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGRvUmVnaXN0ZXIoU3RyaW5nIGhlbGxvLCBTdHJpbmcgaWQpIHsKKwkgICAgcmVnaXN0cnkoKS5yZWdpc3Rlck9iamVjdChuZXcgSGVsbG9TZXJ2aWNlKGhlbGxvKSwgaWQpOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9JQ1VTZXJ2aWNlVGhyZWFkVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvSUNVU2VydmljZVRocmVhZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTg3ZDcyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvSUNVU2VydmljZVRocmVhZFRlc3QuamF2YQpAQCAtMCwwICsxLDQ1NiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL0lDVVNlcnZpY2VUaHJlYWRUZXN0LmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMC8wMiAyMDoyMDoyNSAkCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC51dGlsOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdExvZzsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVVNlcnZpY2U7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlLkZhY3Rvcnk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlLlNpbXBsZUZhY3Rvcnk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlLktleTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkxvY2FsZVV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZVNlcnZpY2UuTG9jYWxlS2V5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZS5JQ1VSZXNvdXJjZUJ1bmRsZUZhY3Rvcnk7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCitwdWJsaWMgY2xhc3MgSUNVU2VydmljZVRocmVhZFRlc3QgZXh0ZW5kcyBUZXN0Rm13aworeyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSSU5UU1RBVFMgPSBmYWxzZTsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworCUlDVVNlcnZpY2VUaHJlYWRUZXN0IHRlc3QgPSBuZXcgSUNVU2VydmljZVRocmVhZFRlc3QoKTsKKwl0ZXN0LnJ1bihhcmdzKTsKKworCS8vIGdldAorCS8vIGdldHZpc2libGVpZHMKKwkvLyBnZXRkaXNwbGF5bmFtZShsb2NhbGUpCisJLy8gZmFjdG9yaWVzCisJCisJLy8gcmVnaXN0ZXJGYWN0b3J5CisJLy8gdW5yZWdpc3RlckZhY3RvcnkKKworCS8vIDEpIGNvbmN1cnJlbnQgYWNjZXNzCisJLy8gMikgYWNjZXNzIHdoaWxlIGZhY3RvcmllcyBjaGFuZ2UKKwkvLyAzKSBpdGVyYXRpb24gd2hpbGUgZmFjdG9yaWVzIGNoYW5nZQorCS8vIDQpIGNvbmN1cnJlbnQgY29uZmxpY3RpbmcgYWNjZXNzCisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gY291bnRyaWVzID0geworCSJhYiIsICJiYyIsICJjZCIsICJkZSIsICJlZiIsICJmZyIsICJnaCIsICJqaSIsICJpaiIsICJqayIKKyAgICB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGxhbmd1YWdlcyA9IHsKKwkiIiwgIlpZIiwgIllYIiwgIlhXIiwgIldWIiwgIlZVIiwgIlVUIiwgIlRTIiwgIlNSIiwgIlJRIiwgIlFQIgorICAgIH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gdmFyaWFudHMgPSB7CisJIiIsICIiLCAiIiwgIkdPTEQiLCAiU0lMVkVSIiwgIkJST05aRSIKKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdEZhY3RvcnkgZXh0ZW5kcyBTaW1wbGVGYWN0b3J5IHsKKwlUZXN0RmFjdG9yeShTdHJpbmcgaWQpIHsKKwkgICAgc3VwZXIoTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShpZCksIGlkLCB0cnVlKTsKKwl9CisKKwlwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKFN0cmluZyBpZCwgTG9jYWxlIGxvY2FsZSkgeworCSAgICByZXR1cm4gKHZpc2libGUgJiYgaWQuZXF1YWxzKHRoaXMuaWQpKSA/ICIoIiArIGxvY2FsZS50b1N0cmluZygpICsgIikgIiArIGlkIDogbnVsbDsKKwl9CisKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCSAgICByZXR1cm4gIkZhY3RvcnlfIiArIGlkOworCX0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBSYW5kb20gciA9IG5ldyBSYW5kb20oKTsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRDTFYoKSB7CisJU3RyaW5nIGMgPSBjb3VudHJpZXNbci5uZXh0SW50KGNvdW50cmllcy5sZW5ndGgpXTsKKwlTdHJpbmcgbCA9IGxhbmd1YWdlc1tyLm5leHRJbnQobGFuZ3VhZ2VzLmxlbmd0aCldOworCVN0cmluZyB2ID0gdmFyaWFudHNbci5uZXh0SW50KHZhcmlhbnRzLmxlbmd0aCldOworCXJldHVybiBuZXcgTG9jYWxlKGMsIGwsIHYpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBXQUlUID0gdHJ1ZTsKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIEdPID0gZmFsc2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBUSU1FID0gNTAwMDsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBydW5UaHJlYWRzKCkgeworCXJ1blRocmVhZHMoVElNRSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJ1blRocmVhZHMobG9uZyB0aW1lKSB7CisJdHJ5IHsKKwkgICAgR08gPSB0cnVlOworCSAgICBXQUlUID0gZmFsc2U7CisKKwkgICAgVGhyZWFkLnNsZWVwKHRpbWUpOworCisJICAgIFdBSVQgPSB0cnVlOworCSAgICBHTyA9IGZhbHNlOworCisJICAgIFRocmVhZC5zbGVlcCgzMDApOworCX0KKwljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCX0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgVGVzdFRocmVhZCBleHRlbmRzIFRocmVhZCBpbXBsZW1lbnRzIFRlc3RMb2cgeworCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CisJcHJvdGVjdGVkIElDVVNlcnZpY2Ugc2VydmljZTsKKwlwcml2YXRlIGZpbmFsIGxvbmcgZGVsYXk7CisJcHJpdmF0ZSBmaW5hbCBUZXN0TG9nIGxvZzsKKworCXB1YmxpYyBUZXN0VGhyZWFkKFN0cmluZyBuYW1lLCBJQ1VTZXJ2aWNlIHNlcnZpY2UsIGxvbmcgZGVsYXksIFRlc3RMb2cgbG9nKSB7CisJICAgIHRoaXMubmFtZSA9IG5hbWUgKyAiICI7CisJICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7CisJICAgIHRoaXMuZGVsYXkgPSBkZWxheTsKKwkgICAgdGhpcy5sb2cgPSBsb2c7CisJICAgIHRoaXMuc2V0RGFlbW9uKHRydWUpOworCX0KKworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkgICAgd2hpbGUgKFdBSVQpIHsKKwkJVGhyZWFkLnlpZWxkKCk7CisJICAgIH0KKworCSAgICB0cnkgeworCQl3aGlsZSAoR08pIHsKKwkJICAgIGl0ZXJhdGUoKTsKKwkJICAgIGlmIChkZWxheSA+IDApIHsKKwkJCVRocmVhZC5zbGVlcChkZWxheSk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCSAgICB9CisJfQorCisJcHJvdGVjdGVkIHZvaWQgaXRlcmF0ZSgpIHsKKwl9CisKKwlwdWJsaWMgYm9vbGVhbiBsb2dnaW5nKCkgeworCSAgICByZXR1cm4gbG9nICE9IG51bGw7CisJfQorCisJcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2cpIHsKKwkgICAgaWYgKGxvZ2dpbmcoKSkgeworCQlsb2cubG9nKG5hbWUgKyBtc2cpOworCSAgICB9CisJfQorCisJcHVibGljIHZvaWQgbG9nbG4oU3RyaW5nIG1zZykgeworCSAgICBpZiAobG9nZ2luZygpKSB7CisJCWxvZy5sb2dsbihuYW1lICsgbXNnKTsKKwkgICAgfQorCX0KKworCXB1YmxpYyB2b2lkIGVycihTdHJpbmcgbXNnKSB7CisJICAgIGlmIChsb2dnaW5nKCkpIHsKKwkJbG9nLmVycihuYW1lICsgbXNnKTsKKwkgICAgfQorCX0KKworCXB1YmxpYyB2b2lkIGVycmxuKFN0cmluZyBtc2cpIHsKKwkgICAgaWYgKGxvZ2dpbmcoKSkgeworCQlsb2cuZXJybG4obmFtZSArIG1zZyk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFJlZ2lzdGVyRmFjdG9yeVRocmVhZCBleHRlbmRzIFRlc3RUaHJlYWQgeworCVJlZ2lzdGVyRmFjdG9yeVRocmVhZChTdHJpbmcgbmFtZSwgSUNVU2VydmljZSBzZXJ2aWNlLCBsb25nIGRlbGF5LCBUZXN0TG9nIGxvZykgeworCSAgICBzdXBlcigiUkVHICIgKyBuYW1lLCBzZXJ2aWNlLCBkZWxheSwgbG9nKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBpdGVyYXRlKCkgeworCSAgICBGYWN0b3J5IGYgPSBuZXcgVGVzdEZhY3RvcnkoZ2V0Q0xWKCkpOworCSAgICBzZXJ2aWNlLnJlZ2lzdGVyRmFjdG9yeShmKTsKKwkgICAgbG9nbG4oZi50b1N0cmluZygpKTsKKwl9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFVucmVnaXN0ZXJGYWN0b3J5VGhyZWFkIGV4dGVuZHMgVGVzdFRocmVhZCB7CisJcHJpdmF0ZSBSYW5kb20gcjsKKwlMaXN0IGZhY3RvcmllczsKKworCVVucmVnaXN0ZXJGYWN0b3J5VGhyZWFkKFN0cmluZyBuYW1lLCBJQ1VTZXJ2aWNlIHNlcnZpY2UsIGxvbmcgZGVsYXksIFRlc3RMb2cgbG9nKSB7CisJICAgIHN1cGVyKCJVTlJFRyAiICsgbmFtZSwgc2VydmljZSwgZGVsYXksIGxvZyk7CisJICAgIAorCSAgICByID0gbmV3IFJhbmRvbSgpOworCSAgICBmYWN0b3JpZXMgPSBzZXJ2aWNlLmZhY3RvcmllcygpOworCX0KKworCXB1YmxpYyB2b2lkIGl0ZXJhdGUoKSB7CisJICAgIGludCBzID0gZmFjdG9yaWVzLnNpemUoKTsKKwkgICAgaWYgKHMgPT0gMCkgeworCQlmYWN0b3JpZXMgPSBzZXJ2aWNlLmZhY3RvcmllcygpOworCSAgICB9IGVsc2UgeworCQlpbnQgbiA9IHIubmV4dEludChzKTsKKwkJRmFjdG9yeSBmID0gKEZhY3RvcnkpZmFjdG9yaWVzLnJlbW92ZShuKTsKKwkJYm9vbGVhbiBzdWNjZXNzID0gc2VydmljZS51bnJlZ2lzdGVyRmFjdG9yeShmKTsKKwkJaWYgKGxvZ2dpbmcoKSkgbG9nbG4oImZhY3Rvcnk6ICIgKyBmICsgKHN1Y2Nlc3MgPyAiIHN1Y2NlZWRlZC4iIDogIiAqKiogZmFpbGVkLiIpKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgVW5yZWdpc3RlckZhY3RvcnlMaXN0VGhyZWFkIGV4dGVuZHMgVGVzdFRocmVhZCB7CisJRmFjdG9yeVtdIGZhY3RvcmllczsKKwlpbnQgbjsKKworCVVucmVnaXN0ZXJGYWN0b3J5TGlzdFRocmVhZChTdHJpbmcgbmFtZSwgSUNVU2VydmljZSBzZXJ2aWNlLCBsb25nIGRlbGF5LCBGYWN0b3J5W10gZmFjdG9yaWVzLCBUZXN0TG9nIGxvZykgeworCSAgICBzdXBlcigiVU5SRUcgIiArIG5hbWUsIHNlcnZpY2UsIGRlbGF5LCBsb2cpOworCSAgICAKKwkgICAgdGhpcy5mYWN0b3JpZXMgPSBmYWN0b3JpZXM7CisJfQorCisJcHVibGljIHZvaWQgaXRlcmF0ZSgpIHsKKwkgICAgaWYgKG4gPCBmYWN0b3JpZXMubGVuZ3RoKSB7CisJCUZhY3RvcnkgZiA9IGZhY3Rvcmllc1tuKytdOworCQlib29sZWFuIHN1Y2Nlc3MgPSBzZXJ2aWNlLnVucmVnaXN0ZXJGYWN0b3J5KGYpOworCQlpZiAobG9nZ2luZygpKSBsb2dsbigiZmFjdG9yeTogIiArIGYgKyAoc3VjY2VzcyA/ICIgc3VjY2VlZGVkLiIgOiAiICoqKiBmYWlsZWQuIikpOworCSAgICB9CisJfQorICAgIH0KKworCisgICAgc3RhdGljIGNsYXNzIEdldFZpc2libGVUaHJlYWQgZXh0ZW5kcyBUZXN0VGhyZWFkIHsKKwlHZXRWaXNpYmxlVGhyZWFkKFN0cmluZyBuYW1lLCBJQ1VTZXJ2aWNlIHNlcnZpY2UsIGxvbmcgZGVsYXksIFRlc3RMb2cgbG9nKSB7CisJICAgIHN1cGVyKCJWSVMgIiArIG5hbWUsIHNlcnZpY2UsIGRlbGF5LCBsb2cpOworCX0KKworCXByb3RlY3RlZCB2b2lkIGl0ZXJhdGUoKSB7CisJICAgIFNldCBpZHMgPSBzZXJ2aWNlLmdldFZpc2libGVJRHMoKTsKKwkgICAgSXRlcmF0b3IgaXRlciA9IGlkcy5pdGVyYXRvcigpOworCSAgICBpbnQgbiA9IDEwOworCSAgICB3aGlsZSAoLS1uID49IDAgJiYgaXRlci5oYXNOZXh0KCkpIHsKKwkJU3RyaW5nIGlkID0gKFN0cmluZylpdGVyLm5leHQoKTsKKwkJT2JqZWN0IHJlc3VsdCA9IHNlcnZpY2UuZ2V0KGlkKTsKKwkJbG9nbG4oIml0ZXI6ICIgKyBuICsgIiBpZDogIiArIGlkICsgIiByZXN1bHQ6ICIgKyByZXN1bHQpOworCSAgICB9CisJfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBHZXREaXNwbGF5VGhyZWFkIGV4dGVuZHMgVGVzdFRocmVhZCB7CisJTG9jYWxlIGxvY2FsZTsKKworCUdldERpc3BsYXlUaHJlYWQoU3RyaW5nIG5hbWUsIElDVVNlcnZpY2Ugc2VydmljZSwgbG9uZyBkZWxheSwgTG9jYWxlIGxvY2FsZSwgVGVzdExvZyBsb2cpIHsKKwkgICAgc3VwZXIoIkRJUyAiICsgbmFtZSwgc2VydmljZSwgZGVsYXksIGxvZyk7CisKKwkgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgaXRlcmF0ZSgpIHsKKwkgICAgTWFwIG5hbWVzID0gc2VydmljZS5nZXREaXNwbGF5TmFtZXMobG9jYWxlKTsKKwkgICAgSXRlcmF0b3IgaXRlciA9IG5hbWVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKwkgICAgaW50IG4gPSAxMDsKKwkgICAgd2hpbGUgKC0tbiA+PSAwICYmIGl0ZXIuaGFzTmV4dCgpKSB7CisJCUVudHJ5IGUgPSAoRW50cnkpaXRlci5uZXh0KCk7CisJCVN0cmluZyBkbmFtZSA9IChTdHJpbmcpZS5nZXRLZXkoKTsKKwkJU3RyaW5nIGlkID0gKFN0cmluZyllLmdldFZhbHVlKCk7CisJCU9iamVjdCByZXN1bHQgPSBzZXJ2aWNlLmdldChpZCk7CisJCWlmIChsb2dnaW5nKCkpIGxvZ2xuKCIgaXRlcjogIiArIG4gKyAKKwkJCQkgICAgICIgZG5hbWU6ICIgKyBkbmFtZSArIAorCQkJCSAgICAgIiBpZDogIiArIGlkICsgCisJCQkJICAgICAiIHJlc3VsdDogIiArIHJlc3VsdCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEdldFRocmVhZCBleHRlbmRzIFRlc3RUaHJlYWQgeworCXByaXZhdGUgU3RyaW5nW10gYWN0dWFsSUQ7CisKKwlHZXRUaHJlYWQoU3RyaW5nIG5hbWUsIElDVVNlcnZpY2Ugc2VydmljZSwgbG9uZyBkZWxheSwgVGVzdExvZyBsb2cpIHsKKwkgICAgc3VwZXIoIkdFVCAiICsgbmFtZSwgc2VydmljZSwgZGVsYXksIGxvZyk7CisKKwkgICAgYWN0dWFsSUQgPSBuZXcgU3RyaW5nWzFdOworCX0KKworCXByb3RlY3RlZCB2b2lkIGl0ZXJhdGUoKSB7CisJICAgIFN0cmluZyBpZCA9IGdldENMVigpOworCSAgICBPYmplY3QgbyA9IHNlcnZpY2UuZ2V0KGlkLCBhY3R1YWxJRCk7CisJICAgIGlmIChsb2dnaW5nKCkgJiYgbyAhPSBudWxsKSB7CisJCWxvZ2xuKCIgaWQ6ICIgKyBpZCArICIgYWN0dWFsOiAiICsgYWN0dWFsSURbMF0gKyAiIHJlc3VsdDogIiArIG8pOworCSAgICB9CisJfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBHZXRMaXN0VGhyZWFkIGV4dGVuZHMgVGVzdFRocmVhZCB7CisJcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBsaXN0OworCXByaXZhdGUgaW50IG47CisKKwlHZXRMaXN0VGhyZWFkKFN0cmluZyBuYW1lLCBJQ1VTZXJ2aWNlIHNlcnZpY2UsIGxvbmcgZGVsYXksIFN0cmluZ1tdIGxpc3QsIFRlc3RMb2cgbG9nKSB7CisJICAgIHN1cGVyKCJHRVRMICIgKyBuYW1lLCBzZXJ2aWNlLCBkZWxheSwgbG9nKTsKKworCSAgICB0aGlzLmxpc3QgPSBsaXN0OworCX0KKworCXByb3RlY3RlZCB2b2lkIGl0ZXJhdGUoKSB7CisJICAgIGlmICgtLW4gPCAwKSB7CisJCW4gPSBsaXN0Lmxlbmd0aCAtIDE7CisJICAgIH0KKwkgICAgU3RyaW5nIGlkID0gbGlzdFtuXTsKKwkgICAgT2JqZWN0IG8gPSBzZXJ2aWNlLmdldChpZCk7CisJICAgIGlmIChsb2dnaW5nKCkpIHsKKwkJbG9nbG4oIiBpZDogIiArIGlkICsgIiByZXN1bHQ6ICIgKyBvKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvLyByZXR1cm4gYSBjb2xsZWN0aW9uIG9mIHVuaXF1ZSBmYWN0b3JpZXMsIG1pZ2h0IGJlIGZld2VyIHRoYW4gcmVxdWVzdGVkCisgICAgQ29sbGVjdGlvbiBnZXRGYWN0b3J5Q29sbGVjdGlvbihpbnQgcmVxdWVzdGVkKSB7CisJU2V0IGxvY2FsZXMgPSBuZXcgSGFzaFNldCgpOworCWZvciAoaW50IGkgPSAwOyBpIDwgcmVxdWVzdGVkOyArK2kpIHsKKwkgICAgbG9jYWxlcy5hZGQoZ2V0Q0xWKCkpOworCX0KKwlMaXN0IGZhY3RvcmllcyA9IG5ldyBBcnJheUxpc3QobG9jYWxlcy5zaXplKCkpOworCUl0ZXJhdG9yIGl0ZXIgPSBsb2NhbGVzLml0ZXJhdG9yKCk7CisJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJICAgIGZhY3Rvcmllcy5hZGQobmV3IFRlc3RGYWN0b3J5KChTdHJpbmcpaXRlci5uZXh0KCkpKTsKKwl9CisJcmV0dXJuIGZhY3RvcmllczsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyRmFjdG9yaWVzKElDVVNlcnZpY2Ugc2VydmljZSwgQ29sbGVjdGlvbiBjKSB7CisJSXRlcmF0b3IgaXRlciA9IGMuaXRlcmF0b3IoKTsKKwl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkgICAgc2VydmljZS5yZWdpc3RlckZhY3RvcnkoKEZhY3RvcnkpaXRlci5uZXh0KCkpOworCX0KKyAgICB9CisKKyAgICBJQ1VTZXJ2aWNlIHN0YWJsZVNlcnZpY2UoKSB7CisJaWYgKHN0YWJsZVNlcnZpY2UgPT0gbnVsbCkgeworCSAgICBzdGFibGVTZXJ2aWNlID0gbmV3IElDVUxvY2FsZVNlcnZpY2UoKTsKKwkgICAgcmVnaXN0ZXJGYWN0b3JpZXMoc3RhYmxlU2VydmljZSwgZ2V0RmFjdG9yeUNvbGxlY3Rpb24oNTApKTsKKwl9CisJcmV0dXJuIHN0YWJsZVNlcnZpY2U7CisgICAgfQorICAgIHByaXZhdGUgSUNVU2VydmljZSBzdGFibGVTZXJ2aWNlOworCisgICAgLy8gcnVuIG11bHRpcGxlIGdldCBvbiBhIHN0YWJsZSBzZXJ2aWNlCisgICAgcHVibGljIHZvaWQgVGVzdDAwX0NvbmN1cnJlbnRHZXQoKSB7CisJZm9yKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkgICAgbmV3IEdldFRocmVhZCgiWyIgKyBJbnRlZ2VyLnRvU3RyaW5nKGkpICsgIl0iLCAgc3RhYmxlU2VydmljZSgpLCAwLCB0aGlzKS5zdGFydCgpOworCX0KKwlydW5UaHJlYWRzKCk7CisJaWYgKFBSSU5UU1RBVFMpIFN5c3RlbS5vdXQucHJpbnRsbihzdGFibGVTZXJ2aWNlLnN0YXRzKCkpOworICAgIH0KKworICAgIC8vIHJ1biBtdWx0aXBsZSBnZXRWaXNpYmxlSUQgb24gYSBzdGFibGUgc2VydmljZQorICAgIHB1YmxpYyB2b2lkIFRlc3QwMV9Db25jdXJyZW50R2V0VmlzaWJsZSgpIHsKKwlmb3IoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgeworCSAgICBuZXcgR2V0VmlzaWJsZVRocmVhZCgiWyIgKyBJbnRlZ2VyLnRvU3RyaW5nKGkpICsgIl0iLCAgc3RhYmxlU2VydmljZSgpLCAwLCB0aGlzKS5zdGFydCgpOworCX0KKwlydW5UaHJlYWRzKCk7CisJaWYgKFBSSU5UU1RBVFMpIFN5c3RlbS5vdXQucHJpbnRsbihzdGFibGVTZXJ2aWNlLnN0YXRzKCkpOworICAgIH0KKworICAgIC8vIHJ1biBtdWx0aXBsZSBnZXREaXNwbGF5TmFtZSBvbiBhIHN0YWJsZSBzZXJ2aWNlCisgICAgcHVibGljIHZvaWQgVGVzdDAyX0NvbmN1cnJlbnRHZXREaXNwbGF5KCkgeworCVN0cmluZ1tdIGxvY2FsZU5hbWVzID0geworCSAgICAiZW4iLCAiZXMiLCAiZGUiLCAiZnIiLCAiemgiLCAiaXQiLCAibm8iLCAic3YiCisJfTsKKwlmb3IoaW50IGkgPSAwOyBpIDwgbG9jYWxlTmFtZXMubGVuZ3RoOyArK2kpIHsKKwkgICAgU3RyaW5nIGxvY2FsZSA9IGxvY2FsZU5hbWVzW2ldOworCSAgICBuZXcgR2V0RGlzcGxheVRocmVhZCgiWyIgKyBsb2NhbGUgKyAiXSIsICAKKwkJCQkgc3RhYmxlU2VydmljZSgpLCAKKwkJCQkgMCwKKwkJCQkgTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShsb2NhbGUpLAorCQkJCSB0aGlzKS5zdGFydCgpOworCX0KKwlydW5UaHJlYWRzKCk7CisJaWYgKFBSSU5UU1RBVFMpIFN5c3RlbS5vdXQucHJpbnRsbihzdGFibGVTZXJ2aWNlLnN0YXRzKCkpOworICAgIH0KKworICAgIC8vIHJ1biByZWdpc3Rlci91bnJlZ2lzdGVyIG9uIGEgc2VydmljZQorICAgIHB1YmxpYyB2b2lkIFRlc3QwM19Db25jdXJyZW50UmVnVW5yZWcoKSB7CisJSUNVU2VydmljZSBzZXJ2aWNlID0gbmV3IElDVUxvY2FsZVNlcnZpY2UoKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IDU7ICsraSkgeworCSAgICBuZXcgUmVnaXN0ZXJGYWN0b3J5VGhyZWFkKCJbIiArIGkgKyAiXSIsIHNlcnZpY2UsIDAsIHRoaXMpLnN0YXJ0KCk7CisJfQorCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CisJICAgIG5ldyBVbnJlZ2lzdGVyRmFjdG9yeVRocmVhZCgiWyIgKyBpICsgIl0iLCBzZXJ2aWNlLCAwLCB0aGlzKS5zdGFydCgpOworCX0KKwlydW5UaHJlYWRzKCk7CisJaWYgKFBSSU5UU1RBVFMpIFN5c3RlbS5vdXQucHJpbnRsbihzZXJ2aWNlLnN0YXRzKCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0MDRfV2l0aGVyaW5nU2VydmljZSgpIHsKKwlJQ1VTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgSUNVTG9jYWxlU2VydmljZSgpOworCisJQ29sbGVjdGlvbiBmYyA9IGdldEZhY3RvcnlDb2xsZWN0aW9uKDUwKTsKKwlyZWdpc3RlckZhY3RvcmllcyhzZXJ2aWNlLCBmYyk7CisKKwlGYWN0b3J5W10gZmFjdG9yaWVzID0gKEZhY3RvcnlbXSlmYy50b0FycmF5KG5ldyBGYWN0b3J5W2ZjLnNpemUoKV0pOworCUNvbXBhcmF0b3IgY29tcCA9IG5ldyBDb21wYXJhdG9yKCkgeworCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IGxocywgT2JqZWN0IHJocykgeworCQkgICAgcmV0dXJuIGxocy50b1N0cmluZygpLmNvbXBhcmVUbyhyaHMudG9TdHJpbmcoKSk7CisJCX0KKwkgICAgfTsKKwlBcnJheXMuc29ydChmYWN0b3JpZXMsIGNvbXApOworCisJbmV3IEdldFRocmVhZCgiIiwgc2VydmljZSwgMCwgdGhpcykuc3RhcnQoKTsKKwluZXcgVW5yZWdpc3RlckZhY3RvcnlMaXN0VGhyZWFkKCIiLCBzZXJ2aWNlLCAzLCBmYWN0b3JpZXMsIHRoaXMpLnN0YXJ0KCk7CisKKwlydW5UaHJlYWRzKDIwMDApOworCWlmIChQUklOVFNUQVRTKSBTeXN0ZW0ub3V0LnByaW50bG4oc2VydmljZS5zdGF0cygpKTsKKyAgICB9CisJCisgICAgLy8gImFsbCBoZWxsIGJyZWFrcyBsb29zZSIKKyAgICAvLyBvbmUgcmVnaXN0ZXIgYW5kIG9uZSB1bnJlZ2lzdGVyIHRocmVhZCwgZGVsYXkgNTAwbXMKKyAgICAvLyB0d28gZGlzcGxheSB0aHJlYWRzIHdpdGggZGlmZmVyZW50IGxvY2FsZXMsIGRlbGF5IDUwMG1zOworICAgIC8vIG9uZSB2aXNpYmxlIGlkIHRocmVhZCwgZGVsYXkgNTBtcworICAgIC8vIGZpZnRlZW4gZ2V0IHRocmVhZHMsIGRlbGF5IDAKKyAgICAvLyBydW4gZm9yIHRlbiBzZWNvbmRzCisgICAgcHVibGljIHZvaWQgVGVzdDA1X0NvbmN1cnJlbnRFdmVyeXRoaW5nKCkgeworCUlDVVNlcnZpY2Ugc2VydmljZSA9IG5ldyBJQ1VMb2NhbGVTZXJ2aWNlKCk7CisKKwluZXcgUmVnaXN0ZXJGYWN0b3J5VGhyZWFkKCIiLCBzZXJ2aWNlLCA1MDAsIHRoaXMpLnN0YXJ0KCk7CisKKwlmb3IoaW50IGkgPSAwOyBpIDwgMTU7ICsraSkgeworCSAgICBuZXcgR2V0VGhyZWFkKCJbIiArIEludGVnZXIudG9TdHJpbmcoaSkgKyAiXSIsIHNlcnZpY2UsIDAsIHRoaXMpLnN0YXJ0KCk7CisJfQorCisJbmV3IEdldFZpc2libGVUaHJlYWQoIiIsICBzZXJ2aWNlLCA1MCwgdGhpcykuc3RhcnQoKTsKKworCVN0cmluZ1tdIGxvY2FsZU5hbWVzID0geworCSAgICAiZW4iLCAiZGUiCisJfTsKKwlmb3IoaW50IGkgPSAwOyBpIDwgbG9jYWxlTmFtZXMubGVuZ3RoOyArK2kpIHsKKwkgICAgU3RyaW5nIGxvY2FsZSA9IGxvY2FsZU5hbWVzW2ldOworCSAgICBuZXcgR2V0RGlzcGxheVRocmVhZCgiWyIgKyBsb2NhbGUgKyAiXSIsICAKKwkJCQkgc3RhYmxlU2VydmljZSgpLCAKKwkJCQkgNTAwLAorCQkJCSBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKGxvY2FsZSksCisJCQkJIHRoaXMpLnN0YXJ0KCk7CisJfQorCisJbmV3IFVucmVnaXN0ZXJGYWN0b3J5VGhyZWFkKCIiLCBzZXJ2aWNlLCA1MDAsIHRoaXMpLnN0YXJ0KCk7CisKKwkvLyB5b3dlZWUhISEKKwlydW5UaHJlYWRzKDEwMDAwKTsKKwlpZiAoUFJJTlRTVEFUUykgU3lzdGVtLm91dC5wcmludGxuKHNlcnZpY2Uuc3RhdHMoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvU3RyaW5nVG9rZW5pemVyVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvU3RyaW5nVG9rZW5pemVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjVkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9TdHJpbmdUb2tlbml6ZXJUZXN0LmphdmEKQEAgLTAsMCArMSw0MzIgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9TdHJpbmdUb2tlbml6ZXJUZXN0LmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMC8yOCAyMTo1OToyMiAkIAorKiAkUmV2aXNpb246IDEuMSAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnV0aWw7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5Vbmljb2RlU2V0OworCisvKioKKyogVGVzdGluZyBjbGFzcyBmb3IgU3RyaW5nVG9rZW5pemVyIGNsYXNzCisqIEBhdXRob3IgU3luIFdlZSBRdWVrCisqIEBzaW5jZSBvY3QgMjYgMjAwMgorKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTdHJpbmdUb2tlbml6ZXJUZXN0IGV4dGVuZHMgVGVzdEZtd2sKK3sgCisgIAkvLyBjb25zdHJ1Y3RvciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgCisgIAkvKioKKyAgCSogQ29uc3RydWN0b3IKKyAgCSovCisgIAlwdWJsaWMgU3RyaW5nVG9rZW5pemVyVGVzdCgpCisgIAl7CisgIAl9CisgIAorICAJLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0aW5nIGNvbnN0cnVjdG9ycworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RDb25zdHJ1Y3RvcnMoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9ICJ0aGlzXHRpc1xuYVxyc3RyaW5nXGZ0ZXN0aW5nXHRTdHJpbmdUb2tlbml6ZXJcbmNvbnN0cnVjdG9ycyEiOworICAgICAgICBTdHJpbmcgZGVsaW1pdGVyID0gIiBcdFxuXHJcZiI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZFtdID0geyJ0aGlzIiwgImlzIiwgImEiLCAic3RyaW5nIiwgInRlc3RpbmciLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZ1Rva2VuaXplciIsICJjb25zdHJ1Y3RvcnMhIn07CisgICAgICAgIFN0cmluZ1Rva2VuaXplciBkZWZhdWx0c3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cik7CisgICAgICAgIFN0cmluZ1Rva2VuaXplciBzdGRlbGltaXRlciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXIpOworICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3RkZWxpbWl0ZXJyZXR1cm4gPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0ciwgZGVsaW1pdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgVW5pY29kZVNldCBkZWxpbWl0ZXJzZXQgPSBuZXcgVW5pY29kZVNldCgiWyIgKyBkZWxpbWl0ZXIgKyAiXSIsIGZhbHNlKTsKKyAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ZGVsaW1pdGVyc2V0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsIGRlbGltaXRlcnNldCk7CisgICAgICAgIFN0cmluZ1Rva2VuaXplciBzdGRlbGltaXRlcnNldHJldHVybiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSArKykgeworICAgICAgICAgICAgaWYgKCEoZGVmYXVsdHN0Lm5leHRFbGVtZW50KCkuZXF1YWxzKGV4cGVjdGVkW2ldKSAKKyAgICAgICAgICAgICAgICAgICYmIHN0ZGVsaW1pdGVyLm5leHRFbGVtZW50KCkuZXF1YWxzKGV4cGVjdGVkW2ldKQorICAgICAgICAgICAgICAgICAgJiYgc3RkZWxpbWl0ZXJyZXR1cm4ubmV4dEVsZW1lbnQoKS5lcXVhbHMoZXhwZWN0ZWRbaV0pCisgICAgICAgICAgICAgICAgICAmJiBzdGRlbGltaXRlcnNldC5uZXh0RWxlbWVudCgpLmVxdWFscyhleHBlY3RlZFtpXSkKKyAgICAgICAgICAgICAgICAgICYmIHN0ZGVsaW1pdGVyc2V0cmV0dXJuLm5leHRFbGVtZW50KCkuZXF1YWxzKGV4cGVjdGVkW2ldKSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiQ29uc3RydWN0b3Igd2l0aCBkZWZhdWx0IGRlbGltaXRlciBnaXZlcyB3cm9uZyByZXN1bHRzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBleHBlY3RlZDFbXSA9IHsidGhpcyIsICJcdCIsICJpcyIsICJcbiIsICJhIiwgIlxyIiwgInN0cmluZyIsICJcZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RpbmciLCAiXHQiLCAiU3RyaW5nVG9rZW5pemVyIiwgIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uc3RydWN0b3JzISJ9OworICAgICAgICBzdGRlbGltaXRlcnJldHVybiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXIsIHRydWUpOworICAgICAgICBzdGRlbGltaXRlcnNldHJldHVybiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXJzZXQsIHRydWUpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkMS5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIGlmICghKHN0ZGVsaW1pdGVycmV0dXJuLm5leHRFbGVtZW50KCkuZXF1YWxzKGV4cGVjdGVkMVtpXSkKKyAgICAgICAgICAgICAgICAgICYmIHN0ZGVsaW1pdGVyc2V0cmV0dXJuLm5leHRFbGVtZW50KCkuZXF1YWxzKGV4cGVjdGVkMVtpXSkpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkNvbnN0cnVjdG9yIHdpdGggZGVmYXVsdCBkZWxpbWl0ZXIgYW5kIGRlbGltaXRlciB0b2tlbnMgZ2l2ZXMgd3JvbmcgcmVzdWx0cyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHN0ZGVsaW1pdGVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsIChTdHJpbmcpbnVsbCk7CisgICAgICAgIHN0ZGVsaW1pdGVycmV0dXJuID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsIChTdHJpbmcpbnVsbCwgZmFsc2UpOworICAgICAgICBkZWxpbWl0ZXJzZXQgPSBudWxsOworICAgICAgICBzdGRlbGltaXRlcnNldCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXJzZXQpOworICAgICAgICBzdGRlbGltaXRlcnNldHJldHVybiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXJzZXQsIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIGlmICghKHN0ZGVsaW1pdGVyLm5leHRFbGVtZW50KCkuZXF1YWxzKHN0cikKKyAgICAgICAgICAgICAgJiYgc3RkZWxpbWl0ZXJyZXR1cm4ubmV4dEVsZW1lbnQoKS5lcXVhbHMoc3RyKQorICAgICAgICAgICAgICAmJiBzdGRlbGltaXRlcnNldC5uZXh0RWxlbWVudCgpLmVxdWFscyhzdHIpCisgICAgICAgICAgICAgICYmIHN0ZGVsaW1pdGVyc2V0cmV0dXJuLm5leHRFbGVtZW50KCkuZXF1YWxzKHN0cikpKSB7CisgICAgICAgICAgICBlcnJsbigiQ29uc3RydWN0b3Igd2l0aCBudWxsIGRlbGltaXRlciBnaXZlcyB3cm9uZyByZXN1bHRzIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRlbGltaXRlciA9ICIiOworICAgICAgICBzdGRlbGltaXRlciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXIpOworICAgICAgICBzdGRlbGltaXRlcnJldHVybiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXIsIGZhbHNlKTsKKyAgICAgICAgZGVsaW1pdGVyc2V0ID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgc3RkZWxpbWl0ZXJzZXQgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0ciwgZGVsaW1pdGVyc2V0KTsKKyAgICAgICAgc3RkZWxpbWl0ZXJzZXRyZXR1cm4gPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0ciwgZGVsaW1pdGVyc2V0LCBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIShzdGRlbGltaXRlci5uZXh0RWxlbWVudCgpLmVxdWFscyhzdHIpCisgICAgICAgICAgICAgICYmIHN0ZGVsaW1pdGVycmV0dXJuLm5leHRFbGVtZW50KCkuZXF1YWxzKHN0cikKKyAgICAgICAgICAgICAgJiYgc3RkZWxpbWl0ZXJzZXQubmV4dEVsZW1lbnQoKS5lcXVhbHMoc3RyKQorICAgICAgICAgICAgICAmJiBzdGRlbGltaXRlcnNldHJldHVybi5uZXh0RWxlbWVudCgpLmVxdWFscyhzdHIpKSkgeworICAgICAgICAgICAgZXJybG4oIkNvbnN0cnVjdG9yIHdpdGggZW1wdHkgZGVsaW1pdGVyIGdpdmVzIHdyb25nIHJlc3VsdHMiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRlZmF1bHRzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobnVsbCk7CisgICAgICAgICAgICBlcnJsbigibnVsbCBzdHJpbmcgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdGRlbGltaXRlciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobnVsbCwgZGVsaW1pdGVyKTsKKyAgICAgICAgICAgIGVycmxuKCJudWxsIHN0cmluZyBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0ZGVsaW1pdGVycmV0dXJuID0gbmV3IFN0cmluZ1Rva2VuaXplcihudWxsLCBkZWxpbWl0ZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIGVycmxuKCJudWxsIHN0cmluZyBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0ZGVsaW1pdGVyc2V0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihudWxsLCBkZWxpbWl0ZXJzZXQpOworICAgICAgICAgICAgZXJybG4oIm51bGwgc3RyaW5nIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RkZWxpbWl0ZXJzZXRyZXR1cm4gPSBuZXcgU3RyaW5nVG9rZW5pemVyKG51bGwsIGRlbGltaXRlcnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICBlcnJsbigibnVsbCBzdHJpbmcgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3Rpbmcgc3VwcGxlbWVudGFyeQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RTdXBwbGVtZW50YXJ5KCkKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHIgPSAiYm1wIHN0cmluZyBcdWQ4MDAgd2l0aCBhIHVubWF0Y2hlZCBzdXJyb2dhdGUgY2hhcmFjdGVyIjsKKyAgICAgICAgU3RyaW5nIGRlbGltaXRlciA9ICJcdWQ4MDBcdWRjMDAiOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWRbXSA9IHtzdHJ9OworICAgICAgICAgICAgCisgICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0ciwgZGVsaW1pdGVyKTsKKyAgICAgICAgaWYgKCF0b2tlbml6ZXIubmV4dEVsZW1lbnQoKS5lcXVhbHMoZXhwZWN0ZWRbMF0pKSB7CisgICAgICAgICAgICBlcnJsbigiRXJyb3IgcGFyc2luZyBcIiIgKyBVdGlsaXR5LmhleChzdHIpICsgIlwiIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRva2VuaXplci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgZXJybG4oIk51bWJlciBvZiB0b2tlbnMgZXhjZWVkZWQgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgICAgICBkZWxpbWl0ZXIgPSAiXHVkODAwIjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkMVtdID0geyJibXAgc3RyaW5nICIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB3aXRoIGEgdW5tYXRjaGVkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIifTsKKyAgICAgICAgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsIGRlbGltaXRlcik7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgaWYgKCF0b2tlbml6ZXIubmV4dEVsZW1lbnQoKS5lcXVhbHMoZXhwZWN0ZWQxW2kgKytdKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvciBwYXJzaW5nIFwiIiArIFV0aWxpdHkuaGV4KHN0cikgKyAiXCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodG9rZW5pemVyLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBlcnJsbigiTnVtYmVyIG9mIHRva2VucyBleGNlZWRlZCBleHBlY3RlZCIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdHIgPSAic3RyaW5nIFx1ZDgwMFx1ZGMwMCB3aXRoIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIjsKKyAgICAgICAgZGVsaW1pdGVyID0gIlx1ZDgwMCI7CisgICAgICAgIFN0cmluZyBleHBlY3RlZDJbXSA9IHtzdHJ9OworICAgICAgICB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0ciwgZGVsaW1pdGVyKTsKKyAgICAgICAgaWYgKCF0b2tlbml6ZXIubmV4dEVsZW1lbnQoKS5lcXVhbHMoZXhwZWN0ZWQyWzBdKSkgeworICAgICAgICAgICAgZXJybG4oIkVycm9yIHBhcnNpbmcgXCIiICsgVXRpbGl0eS5oZXgoc3RyKSArICJcIiIpOworICAgICAgICB9CisgICAgICAgIGlmICh0b2tlbml6ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJOdW1iZXIgb2YgdG9rZW5zIGV4Y2VlZGVkIGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgCisgICAgICAgIGRlbGltaXRlciA9ICJcdWQ4MDBcdWRjMDAiOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWQzW10gPSB7InN0cmluZyAiLCAiIHdpdGggc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIifTsKKyAgICAgICAgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsIGRlbGltaXRlcik7CisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoIXRva2VuaXplci5uZXh0RWxlbWVudCgpLmVxdWFscyhleHBlY3RlZDNbaSArK10pKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIHBhcnNpbmcgXCIiICsgVXRpbGl0eS5oZXgoc3RyKSArICJcIiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0b2tlbml6ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJOdW1iZXIgb2YgdG9rZW5zIGV4Y2VlZGVkIGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ciA9ICJcdWQ4MDAgXHVkODAwXHVkYzAwIFx1ZDgwMCBcdWQ4MDBcdWRjMDAiOworICAgICAgICBkZWxpbWl0ZXIgPSAiXHVkODAwIjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkNFtdID0geyIgXHVkODAwXHVkYzAwICIsICIgXHVkODAwXHVkYzAwIn07CisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoIXRva2VuaXplci5uZXh0RWxlbWVudCgpLmVxdWFscyhleHBlY3RlZDRbaSArK10pKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVycm9yIHBhcnNpbmcgXCIiICsgVXRpbGl0eS5oZXgoc3RyKSArICJcIiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0b2tlbml6ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJOdW1iZXIgb2YgdG9rZW5zIGV4Y2VlZGVkIGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRlbGltaXRlciA9ICJcdWQ4MDBcdWRjMDAiOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWQ1W10gPSB7Ilx1ZDgwMCAiLCAiIFx1ZDgwMCAifTsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICghdG9rZW5pemVyLm5leHRFbGVtZW50KCkuZXF1YWxzKGV4cGVjdGVkNVtpICsrXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgcGFyc2luZyBcIiIgKyBVdGlsaXR5LmhleChzdHIpICsgIlwiIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRva2VuaXplci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgZXJybG4oIk51bWJlciBvZiB0b2tlbnMgZXhjZWVkZWQgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgCisgIAkvKioKKyAgCSogVGVzdGluZyBuZXh0IGFwaQorICAJKi8KKyAgCXB1YmxpYyB2b2lkIFRlc3ROZXh0Tm9uRGVsaW1pdGVyVG9rZW4oKQorICAJeworICAgICAgICBTdHJpbmcgc3RyID0gIiAgLCAgMSAyIDMgIEFISEhISCEgNS41IDYgNyAgICAsICAgICAgICA4XG4iOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWRbXSA9IHsiLCIsICIxIiwgIjIiLCAiMyIsICJBSEhISEghIiwgIjUuNSIsICI2IiwgIjciLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwiLCAiOFxuIn07CisgICAgICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAiICI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXIpOworICAgICAgICBpbnQgY3VycnRva2VuID0gMDsKKyAgICAgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgaWYgKCF0b2tlbml6ZXIubmV4dEVsZW1lbnQoKS5lcXVhbHMoZXhwZWN0ZWRbY3VycnRva2VuXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgdG9rZW4gbWlzbWF0Y2gsIGV4cGVjdGVkICIgKyBleHBlY3RlZFtjdXJydG9rZW5dKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJ0b2tlbiArKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJydG9rZW4gIT0gZXhwZWN0ZWQubGVuZ3RoKSB7CisgICAgICAgICAgICBlcnJsbigiRGlkbid0IGdldCBjb3JyZWN0IG51bWJlciBvZiB0b2tlbnMiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcigiIiwgZGVsaW1pdGVyKTsKKyAgICAgICAgaWYgKHRva2VuaXplci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgZXJybG4oIkVtcHR5IHN0cmluZyBzaG91bGQgbm90IGhhdmUgYW55IHRva2VucyIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0b2tlbml6ZXIubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGVycmxuKCJFbXB0eSBzdHJpbmcgc2hvdWxkIG5vdCBoYXZlIGFueSB0b2tlbnMiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcigiLCAsIiwgIiwgIik7CisgICAgICAgIGlmICh0b2tlbml6ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJTdHJpbmcgd2l0aCBvbmx5IGRlbGltaXRlcnMgc2hvdWxkIG5vdCBoYXZlIGFueSB0b2tlbnMiKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgdG9rZW5pemVyLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBlcnJsbigiU3RyaW5nIHdpdGggb25seSBkZWxpbWl0ZXJzIHNob3VsZCBub3QgaGF2ZSBhbnkgdG9rZW5zIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKworICAgICAgICB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKCJxLCAsIiwgIiwgIik7CisgICAgICAgIGlmICghdG9rZW5pemVyLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBlcnJsbigiU3RyaW5nIHRoYXQgZG9lcyBub3QgYmVnaW4gd2l0aCBkZWxpbWl0ZXJzIHNob3VsZCBoYXZlIHNvbWUgdG9rZW5zIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0b2tlbml6ZXIubmV4dEVsZW1lbnQoKS5lcXVhbHMoInEiKSkgeworICAgICAgICAgICAgZXJybG4oIlN0cmluZyB0aGF0IGRvZXMgbm90IGJlZ2luIHdpdGggZGVsaW1pdGVycyBzaG91bGQgaGF2ZSBzb21lIHRva2VucyIpOworICAgICAgICB9IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgdG9rZW5pemVyLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBlcnJsbigiU3RyaW5nIGhhcyBvbmx5IG9uZSB0b2tlbnMiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG51bGwsIGRlbGltaXRlcik7CisgICAgICAgICAgICBlcnJsbigiU3RyaW5nVG9rZW5pemVyIGNvbnN0cnVjdGVkIHdpdGggbnVsbCBzb3VyY2Ugc2hvdWxkIHRocm93IGEgbnVsbHBvaW50ZXJleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorCisgICAgICAgIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCAicSIpOworICAgICAgICBpZiAoIXRva2VuaXplci5uZXh0RWxlbWVudCgpLmVxdWFscyhzdHIpKSB7CisgICAgICAgICAgICBlcnJsbigiU2hvdWxkIGhhdmUgcmVjZWl2ZWQgdGhlIHNhbWUgc3RyaW5nIHdoZW4gdGhlcmUgYXJlIG5vIGRlbGltaXRlcnMiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIFRlc3RpbmcgbmV4dCBhcGkKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3ROZXh0RGVsaW1pdGVyVG9rZW4oKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9ICIgICwgIDEgMiAzICBBSEhISEghIDUuNSA2IDcgICAgLCAgICAgICAgOFxuIjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkW10gPSB7IiAgIiwgIiwiLCAiICAiLCAiMSIsICIgIiwgIjIiLCAiICIsICIzIiwgIiAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFISEhISCEiLCAiICIsICI1LjUiLCAiICIsICI2IiwgIiAiLCAiNyIsICIgICAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwiLCAiICAgICAgICAiLCAiOFxuIn07CisgICAgICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAiICI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXIsIHRydWUpOworICAgICAgICBpbnQgY3VycnRva2VuID0gMDsKKyAgICAgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgaWYgKCF0b2tlbml6ZXIubmV4dEVsZW1lbnQoKS5lcXVhbHMoZXhwZWN0ZWRbY3VycnRva2VuXSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRXJyb3IgdG9rZW4gbWlzbWF0Y2gsIGV4cGVjdGVkICIgKyBleHBlY3RlZFtjdXJydG9rZW5dKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJ0b2tlbiArKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJydG9rZW4gIT0gZXhwZWN0ZWQubGVuZ3RoKSB7CisgICAgICAgICAgICBlcnJsbigiRGlkbid0IGdldCBjb3JyZWN0IG51bWJlciBvZiB0b2tlbnMiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcigiIiwgZGVsaW1pdGVyLCB0cnVlKTsKKyAgICAgICAgaWYgKHRva2VuaXplci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgZXJybG4oIkVtcHR5IHN0cmluZyBzaG91bGQgbm90IGhhdmUgYW55IHRva2VucyIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0b2tlbml6ZXIubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGVycmxuKCJFbXB0eSBzdHJpbmcgc2hvdWxkIG5vdCBoYXZlIGFueSB0b2tlbnMiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcigiLCAsIiwgIiwgIiwgdHJ1ZSk7CisgICAgICAgIGlmICghdG9rZW5pemVyLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBlcnJsbigiU3RyaW5nIHdpdGggb25seSBkZWxpbWl0ZXJzIHNob3VsZCBoYXZlIHRva2VucyB3aGVuIGRlbGltaXRlciBpcyB0cmVhdGVkIGFzIHRva2VucyIpOworICAgICAgICB9CisgICAgICAgIGlmICghdG9rZW5pemVyLm5leHRFbGVtZW50KCkuZXF1YWxzKCIsICwiKSkgeworICAgICAgICAgICAgZXJybG4oIlN0cmluZyB3aXRoIG9ubHkgZGVsaW1pdGVycyBzaG91bGQgcmV0dXJuIGl0c2VsZiB3aGVuIGRlbGltaXRlciBpcyB0cmVhdGVkIGFzIHRva2VucyIpOworICAgICAgICB9CisKKyAgICAgICAgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcigicSwgLCIsICIsICIsIHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKCF0b2tlbml6ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJTdHJpbmcgc2hvdWxkIGhhdmUgc29tZSB0b2tlbnMiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRva2VuaXplci5uZXh0RWxlbWVudCgpLmVxdWFscygicSIpIAorICAgICAgICAgICAgfHwgIXRva2VuaXplci5uZXh0RWxlbWVudCgpLmVxdWFscygiLCAsIikpIHsKKyAgICAgICAgICAgIGVycmxuKCJTdHJpbmcgdG9rZW5zIGRvIG5vdCBtYXRjaCBleHBlY3RlZCByZXN1bHRzIik7CisgICAgICAgIH0gCisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobnVsbCwgZGVsaW1pdGVyLCB0cnVlKTsKKyAgICAgICAgICAgIGVycmxuKCJTdHJpbmdUb2tlbml6ZXIgY29uc3RydWN0ZWQgd2l0aCBudWxsIHNvdXJjZSBzaG91bGQgdGhyb3cgYSBudWxscG9pbnRlcmV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisKKyAgICAgICAgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICJxIiwgdHJ1ZSk7CisgICAgICAgIGlmICghdG9rZW5pemVyLm5leHRFbGVtZW50KCkuZXF1YWxzKHN0cikpIHsKKyAgICAgICAgICAgIGVycmxuKCJTaG91bGQgaGF2ZSByZWNpZXZlZCB0aGUgc2FtZSBzdHJpbmcgd2hlbiB0aGVyZSBhcmUgbm8gZGVsaW1pdGVycyIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3RpbmcgY291bnQgdG9rZW5zCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENvdW50VG9rZW5zKCkKKyAgICB7CisgICAgICAgIFN0cmluZyBzdHIgPSAidGhpc1x0aXNcbmFccnN0cmluZ1xmdGVzdGluZ1x0U3RyaW5nVG9rZW5pemVyXG5jb25zdHJ1Y3RvcnMhIjsKKyAgICAgICAgU3RyaW5nIGRlbGltaXRlciA9ICIgXHRcblxyXGYiOworICAgICAgICBTdHJpbmcgZXhwZWN0ZWRbXSA9IHsidGhpcyIsICJpcyIsICJhIiwgInN0cmluZyIsICJ0ZXN0aW5nIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdHJpbmdUb2tlbml6ZXIiLCAiY29uc3RydWN0b3JzISJ9OworICAgICAgICBTdHJpbmcgZXhwZWN0ZWRyZXR1cm5bXSA9IHsidGhpcyIsICJcdCIsICJpcyIsICJcbiIsICJhIiwgIlxyIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmciLCAiXGYiLCAidGVzdGluZyIsICJcdCIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RyaW5nVG9rZW5pemVyIiwgIlxuIiwgImNvbnN0cnVjdG9ycyEifTsKKyAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsIGRlbGltaXRlcik7CisgICAgICAgIFN0cmluZ1Rva2VuaXplciBzdHJldHVybiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLCBkZWxpbWl0ZXIsIHRydWUpOworICAgICAgICBpZiAoc3QuY291bnRUb2tlbnMoKSAhPSBleHBlY3RlZC5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVycmxuKCJDb3VudFRva2VucyBmYWlsZWQgZm9yIG5vbi1kZWxpbWl0ZXIgdG9rZW5zIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmV0dXJuLmNvdW50VG9rZW5zKCkgIT0gZXhwZWN0ZWRyZXR1cm4ubGVuZ3RoKSB7CisgICAgICAgICAgICBlcnJsbigiQ291bnRUb2tlbnMgZmFpbGVkIGZvciBkZWxpbWl0ZXIgdG9rZW5zIik7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIGlmICghc3QubmV4dEVsZW1lbnQoKS5lcXVhbHMoZXhwZWN0ZWRbaV0pCisgICAgICAgICAgICAgICAgfHwgc3QuY291bnRUb2tlbnMoKSAhPSBleHBlY3RlZC5sZW5ndGggLSBpIC0gMSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJDb3VudFRva2VucyBkZWZhdWx0IGRlbGltaXRlciBnaXZlcyB3cm9uZyByZXN1bHRzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZHJldHVybi5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIGlmICghc3RyZXR1cm4ubmV4dEVsZW1lbnQoKS5lcXVhbHMoZXhwZWN0ZWRyZXR1cm5baV0pCisgICAgICAgICAgICAgICAgfHwgc3RyZXR1cm4uY291bnRUb2tlbnMoKSAhPSBleHBlY3RlZHJldHVybi5sZW5ndGggLSBpIC0gMSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJDb3VudFRva2VucyB3aXRoIGRlZmF1bHQgZGVsaW1pdGVyIGFuZCBkZWxpbWl0ZXIgdG9rZW5zIGdpdmVzIHdyb25nIHJlc3VsdHMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIE5leHQgdG9rZW4gd2l0aCBuZXcgZGVsaW1pdGVycworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3ROZXh0TmV3RGVsaW1pdGVycygpCisgICAgeworICAgICAgICBTdHJpbmcgc3RyID0gImFiYzBkZWYxZ2hpMmprbDNtbm80cHFyMHN0dTF2d3gyeXphM2JjZDRlZmcwaGlqMWtsbTJub3AzcXJzNHR1diI7CisgICAgICAgIFN0cmluZyBkZWxpbWl0ZXJbXSA9IHsiMCIsICIxIiwgIjIiLCAiMyIsICI0In07CisgICAgICAgIFN0cmluZyBleHBlY3RlZFtdW10gPSB7eyJhYmMiLCAicHFyIiwgImVmZyJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiZGVmIiwgInN0dSIsICJoaWoifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ImdoaSIsICJ2d3giLCAia2xtIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJqa2wiLCAieXphIiwgIm5vcCJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibW5vIiwgImJjZCIsICJxcnMifQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIpOworICAgICAgICBpbnQgc2l6ZSA9IGV4cGVjdGVkWzBdLmxlbmd0aDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGRlbGltaXRlci5sZW5ndGg7IGogKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0Lm5leHRUb2tlbihkZWxpbWl0ZXJbal0pLmVxdWFscyhleHBlY3RlZFtqXVtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIm5leHRUb2tlbigpIHdpdGggZGVsaW1pdGVycyBlcnJvciAiICsgaSArICIgIiArIGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3QuY291bnRUb2tlbnMoKSAhPSBleHBlY3RlZFtqXS5sZW5ndGggLSBpKSB7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJjb3VudFRva2VucygpIGFmdGVyIG5leHRUb2tlbigpIHdpdGggZGVsaW1pdGVycyBlcnJvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpICsgIiAiICsgaik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9ICAgIAorICAgICAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyKTsKKyAgICAgICAgU3RyaW5nIGRlbGltaXRlcjFbXSA9IHsiMCIsICIyIiwgIjQifTsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkMVtdID0geyJhYmMiLCAiZGVmMWdoaSIsICJqa2wzbW5vIiwgInBxciIsICJzdHUxdnd4IiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieXphM2JjZCIsICJlZmciLCAiaGlqMWtsbSIsICJub3AzcXJzIiwgInR1diJ9OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkMS5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIGlmICghc3QubmV4dFRva2VuKGRlbGltaXRlcjFbaSAlIGRlbGltaXRlcjEubGVuZ3RoXSkuZXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQxW2ldKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJuZXh0VG9rZW4oKSB3aXRoIGRlbGltaXRlcnMgZXJyb3IgIiArIGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZykKKyAgICB7CisgICAgCXRyeQorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXJUZXN0IHRlc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyVGVzdCgpOworICAgICAgICAgICAgdGVzdC5ydW4oYXJnKTsKKyAgICAgICAgICAgIC8vIHRlc3QuVGVzdENhc2VDb21wYXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9UcmllVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvVHJpZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOWMwNTkwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90ZXN0L3V0aWwvVHJpZVRlc3QuamF2YQpAQCAtMCwwICsxLDczOCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL1RyaWVUZXN0LmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8wNC8wMiAyMTowMDowOCAkIAorKiAkUmV2aXNpb246IDEuNCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnV0aWw7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlRyaWU7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JbnRUcmllOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuQ2hhclRyaWU7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyUHJvcGVydHk7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKKworLyoqCisqIFRlc3RpbmcgY2xhc3MgZm9yIFRyaWUuIFRlc3RzIGhlcmUgd2lsbCBiZSBzaW1wbGUsIHNpbmNlIGJvdGggQ2hhclRyaWUgYW5kIAorKiBJbnRUcmllIGFyZSB2ZXJ5IHNpbWlsYXIgYW5kIGFyZSBoZWF2aWx5IHVzZWQgaW4gb3RoZXIgcGFydHMgb2YgSUNVNEouCisqIENvZGVzIHVzaW5nIFRyaWVzIGFyZSBleHBlY3RlZCB0byBoYXZlIGRldGFpbGVkIHRlc3RzLgorKiBAYXV0aG9yIFN5biBXZWUgUXVlaworKiBAc2luY2UgcmVsZWFzZSAyLjEgSmFuIDAxIDIwMDIKKyovCitwdWJsaWMgZmluYWwgY2xhc3MgVHJpZVRlc3QgZXh0ZW5kcyBUZXN0Rm13ayAKK3sgCisgICAgLy8gY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAorICAgIC8qKgorICAgICogQ29uc3RydWN0b3IKKyAgICAqLworICAgIHB1YmxpYyBUcmllVGVzdCgpCisgICAgeworICAgIH0KKyAgICAgIAorICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ1tdKSAKKyAgICB7CisgICAgICAgIFRyaWVUZXN0IHRlc3QgPSBuZXcgVHJpZVRlc3QoKTsKKyAgICAgICAgdHJ5IHsKKwkgICAgICAgIHRlc3QucnVuKGFyZyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIAl0ZXN0LmVycmxuKCJFcnJvciB0ZXN0aW5nIHRyaWV0ZXN0Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdGluZyB0aGUgY29uc3RydWN0b3JzIG9mIHRoZSBUcmllcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RJbml0KCkgCisgICAgeworICAgIAlieXRlIGFycmF5W10gPSBuZXcgYnl0ZVtJTlRfVFJJRV9EQVRBXy5sZW5ndGggPDwgMV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU5UX1RSSUVfREFUQV8ubGVuZ3RoOyBpICsrKSB7CisgICAgICAgICAgICBhcnJheVtpIDw8IDFdID0gKGJ5dGUpKChJTlRfVFJJRV9EQVRBX1tpXSA+PiA4KSAmIDB4RkYpOworICAgICAgICAgICAgYXJyYXlbKGkgPDwgMSkgKyAxXSA9IChieXRlKShJTlRfVFJJRV9EQVRBX1tpXSAmIDB4RkYpOworICAgICAgICB9CisgICAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtICAgID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkpOworICAgICAgICBJbnREYXRhTWFuaXB1bGF0ZSAgICBkYXRhbWFuaXB1bGF0ZSA9IG5ldyBJbnREYXRhTWFuaXB1bGF0ZSgpOworICAgICAgICAvLyBjaGFydHJpZSBzaG91bGQgZmFpbCB3aXRoIGludCBkYXRhCisgICAgICAgIHRyeSB7CisgICAgICAgIAlDaGFyVHJpZSBjaGFydHJpZSA9IG5ldyBDaGFyVHJpZShpbnB1dFN0cmVhbSwgZGF0YW1hbmlwdWxhdGUpOworICAgICAgICAJZXJybG4oIkNoYXJUcmllIHNob3VsZCBmYWlsIHdpdGggSW50IGRhdGEgZHVyaW5nIGNvbnN0cnVjdGlvbiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgICAgIC8vIGludHRyaWUgc2hvdWxkIHBhc3Mgd2l0aCBpbnQgZGF0YQorICAgICAgICB0cnkgeworICAgICAgICAJaW5wdXRTdHJlYW0ucmVzZXQoKTsKKyAgICAgICAgICAgIEludFRyaWUgbV90cmllXyA9IG5ldyBJbnRUcmllKGlucHV0U3RyZWFtLCBkYXRhbWFuaXB1bGF0ZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJsbigiRmFpbGVkIHJlYWRpbmcgSW50VHJpZSBkYXRhIik7CisgICAgICAgIH0JCisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RJbnRWYWx1ZXMoKQorICAgIHsKKyAgICAgICAgYnl0ZSBhcnJheVtdID0gbmV3IGJ5dGVbSU5UX1RSSUVfREFUQV8ubGVuZ3RoIDw8IDFdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElOVF9UUklFX0RBVEFfLmxlbmd0aDsgaSArKykgeworICAgICAgICAgICAgYXJyYXlbaSA8PCAxXSA9IChieXRlKSgoSU5UX1RSSUVfREFUQV9baV0gPj4gOCkgJiAweEZGKTsKKyAgICAgICAgICAgIGFycmF5WyhpIDw8IDEpICsgMV0gPSAoYnl0ZSkoSU5UX1RSSUVfREFUQV9baV0gJiAweEZGKTsKKyAgICAgICAgfQorICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShhcnJheSk7CisgICAgICAgIEludFRyaWUgdHJpZSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cmllID0gbmV3IEludFRyaWUoaW5wdXRTdHJlYW0sIG5ldyBJbnREYXRhTWFuaXB1bGF0ZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycmxuKCJGYWlsZWQgcmVhZGluZyB0cmllIGRhdGEiKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFNUUklOR18xXy5sZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIFVURjE2LmFwcGVuZChidWZmZXIsIFNUUklOR18xX1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHN0ciAgICAgID0gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgICAgIGludCAgICB2YWx1ZXNbXSA9IFZBTFVFXzFfOworICAgICAgICBpbnRlcm5hbFRlc3RJbnRWYWx1ZXModHJpZSwgc3RyLCB2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgLy8gdGVzdGluZyBpbnZhbGlkIGNvZGVwb2ludHMKKyAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgIHJlc3VsdCA9IHRyaWUuZ2V0Q29kZVBvaW50VmFsdWUoMHgxMTAwMDApOworICAgICAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgICAgIGVycmxuKCJFcnJvcjogRXhwZWN0ZWQgdmFsdWUgZm9yIGlsbGVnYWwgY29kZXBvaW50IHNob3VsZCBiZSAwIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMHhGRkZGOyBpICsrKSB7CisgICAgCQlpZiAodHJpZS5nZXRCTVBWYWx1ZSgoY2hhcilpKSAhPSB0cmllLmdldENvZGVQb2ludFZhbHVlKGkpKSB7CisgICAgCQkJZXJybG4oIkZvciBCTVAgY29kZXBvaW50LCBnZXRCTVBWYWx1ZSBzaG91bGQgYmUgdGhlIHNhbWUgIiArCisgICAgCQkJICAgICAgICJhcyBnZXRDb2RlcG9pbnRWYWx1ZSIpOworICAgIAkJfQorICAgIAl9CisgICAgCWZvciAoaW50IGkgPSAweDEwMDAwOyBpIDwgMHgxMGZmZmY7IGkgKyspIHsKKyAgICAJCWNoYXIgbGVhZCA9IFVURjE2LmdldExlYWRTdXJyb2dhdGUoaSk7CisgICAgCQljaGFyIHRyYWlsID0gVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoaSk7CisgICAgCQlpbnQgdmFsdWUgPSB0cmllLmdldENvZGVQb2ludFZhbHVlKGkpOworICAgIAkJaWYgKHZhbHVlICE9IHRyaWUuZ2V0U3Vycm9nYXRlVmFsdWUobGVhZCwgdHJhaWwpIHx8CisgICAgCQkgICAgdmFsdWUgIT0gdHJpZS5nZXRUcmFpbFZhbHVlKHRyaWUuZ2V0TGVhZFZhbHVlKGxlYWQpLCAKKyAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWwpKSB7CisgICAgCQkgICAgZXJybG4oIkZvciBOb24tQk1QIGNvZGVwb2ludHMsIGdldFN1cnJvZ2F0ZVZhbHVlIHNob3VsZCBiZSAiCisgICAgCQkgICAgICAgICAgKyAidGhlIHNhbWUgcyBnZXRDb2RlcG9pbnRWYWx1ZSBhbmQgZ2V0VHJhaWxWYWx1ZSIpOworICAgIAkJfQkJCisgICAgCX0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdENoYXJWYWx1ZXMoKQorICAgIHsKKyAgICAJQ2hhclRyaWUgdHJpZSA9IG51bGw7CisgICAgCXRyeSB7CisJCSAJdHJpZSA9IFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRJbnN0YW5jZSgpLm1fdHJpZV87CisgICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgCQllcnJsbigiRXJyb3IgY3JlYXRpbmcgdWNoYXJhY3RlciB0cmllIik7CisgICAgCX0KKyAgICAJCisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgMHhGRkZGOyBpICsrKSB7CisgICAgCQlpZiAodHJpZS5nZXRCTVBWYWx1ZSgoY2hhcilpKSAhPSB0cmllLmdldENvZGVQb2ludFZhbHVlKGkpKSB7CisgICAgCQkJZXJybG4oIkZvciBCTVAgY29kZXBvaW50LCBnZXRCTVBWYWx1ZSBzaG91bGQgYmUgdGhlIHNhbWUgIiArCisgICAgCQkJICAgICAgICJhcyBnZXRDb2RlcG9pbnRWYWx1ZSIpOworICAgIAkJfQorICAgIAl9CisgICAgCWZvciAoaW50IGkgPSAweDEwMDAwOyBpIDwgMHgxMGZmZmY7IGkgKyspIHsKKyAgICAJCWNoYXIgbGVhZCA9IFVURjE2LmdldExlYWRTdXJyb2dhdGUoaSk7CisgICAgCQljaGFyIHRyYWlsID0gVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoaSk7CisgICAgCQljaGFyIHZhbHVlID0gdHJpZS5nZXRDb2RlUG9pbnRWYWx1ZShpKTsKKyAgICAJCWlmICh2YWx1ZSAhPSB0cmllLmdldFN1cnJvZ2F0ZVZhbHVlKGxlYWQsIHRyYWlsKSB8fAorICAgIAkJICAgIHZhbHVlICE9IHRyaWUuZ2V0VHJhaWxWYWx1ZSh0cmllLmdldExlYWRWYWx1ZShsZWFkKSwgCisgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsKSkgeworICAgIAkJICAgIGVycmxuKCJGb3IgTm9uLUJNUCBjb2RlcG9pbnRzLCBnZXRTdXJyb2dhdGVWYWx1ZSBzaG91bGQgYmUgIgorICAgIAkJICAgICAgICAgICsgInRoZSBzYW1lIHMgZ2V0Q29kZXBvaW50VmFsdWUgYW5kIGdldFRyYWlsVmFsdWUiKTsKKyAgICAJCX0JCQorICAgIAl9CisgICAgfQorICAgIAorICAgIC8vIHByaXZhdGUgY2xhc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW50RGF0YU1hbmlwdWxhdGUgaW1wbGVtZW50cyBUcmllLkRhdGFNYW5pcHVsYXRlCisgICAgeworICAgICAgICBwdWJsaWMgaW50IGdldEZvbGRpbmdPZmZzZXQoaW50IGRhdGEpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZGF0YSA+PiAxNjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgCisgICAgLy8gdHJpZSBkYXRhLCBnZW5lcmF0ZWQgZnJvbSBpY3U0YworICAgIHByaXZhdGUgZmluYWwgY2hhciBJTlRfVFJJRV9EQVRBX1tdID0geworICAgIDB4NTQ3MiwgMHg2OTY1LCAweDAsIDB4MTI1LCAweDAsIDB4OGMwLCAweDAsIDB4MThjLCAweDAsIDB4OCwgMHg4LCAweDgsIAorMHg4LCAweGYsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MWUsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHg0ZCwgMHg0ZiwgMHg0ZiwgMHg0ZiwgCisweDRmLCAweDRmLCAweDUzLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjIsIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIAorMHg1YiwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgCisweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAKKzB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIAorMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgCisweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAKKzB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIAorMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgCisweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAKKzB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIAorMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgCisweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAKKzB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIAorMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyZSwgCisweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAKKzB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIAorMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgCisweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAKKzB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIAorMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgCisweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAKKzB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIAorMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgCisweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAKKzB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIAorMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAKKzB4MjAsIDB4MjAsIDB4MjIsIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIAorMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgCisweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAKKzB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIAorMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzNiwgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsIAorMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgCisweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAKKzB4MTcsIDB4MTcsIDB4M2QsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHg0NSwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIAorMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgCisweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAKKzB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIAorMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgCisweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIDB4MCwgMHgxMjM0LCAKKzB4MCwgMHgxMjM0LCAweDAsIDB4MTIzNCwgMHgwLCAweDEyMzQsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgCisweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAKKzB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIAorMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgCisweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAKKzB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIAorMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgCisweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAKKzB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIAorMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgCisweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAKKzB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIAorMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIAorMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgCisweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAKKzB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIAorMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgCisweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAKKzB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MSwgMHgwLCAweDEsIDB4MCwgMHgxLCAweDAsIDB4MSwgCisweDAsIDB4MSwgMHgwLCAweDEsIDB4MCwgMHgxLCAweDAsIDB4MSwgMHgwLCAweDEsIDB4MCwgMHgxLCAKKzB4MCwgMHgxLCAweDAsIDB4MSwgMHgwLCAweDEsIDB4MCwgMHgxLCAweDAsIDB4MSwgMHgwLCAweDEsIAorMHgwLCAweDEsIDB4MCwgMHgxLCAweDAsIDB4MSwgMHgwLCAweDEsIDB4MCwgMHgxLCAweDAsIDB4MSwgCisweDAsIDB4MSwgMHgwLCAweDEsIDB4MCwgMHgxLCAweDAsIDB4MSwgMHgwLCAweDEsIDB4MCwgMHgxLCAKKzB4MCwgMHgxLCAweDAsIDB4MSwgMHgwLCAweDEsIDB4MCwgMHgxLCAweDAsIDB4MSwgMHgwLCAweDEsIAorMHgwLCAweDEsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgCisweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAKKzB4MCwgMHg2MTYyLCAweDAsIDB4NjE2MiwgMHgwLCAweDYxNjIsIDB4MCwgMHg2MTYyLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHhmLCAKKzB4MCwgMHgxMCwgMHgwLCAweDEwLCAweDAsIDB4MTEsIDB4MCwgMHgxMiwgMHgwLCAweDEyLCAweDAsIDB4MTIsIAorMHgwLCAweDEyLCAweDAsIDB4MTIsIDB4MCwgMHgxMiwgMHgwLCAweDEyLCAweDAsIDB4MTIsIDB4MCwgMHgxMiwgCisweDAsIDB4MTIsIDB4MCwgMHgxMiwgMHgwLCAweDEyLCAweDAsIDB4MTIsIDB4MCwgMHgxMiwgMHgwLCAweDEyLCAKKzB4MCwgMHgxMiwgMHgwLCAweDEyLCAweDAsIDB4MTIsIDB4MCwgMHgxMiwgMHgwLCAweDEyLCAweDAsIDB4MTIsIAorMHgwLCAweDEyLCAweDAsIDB4MTIsIDB4MCwgMHgxMiwgMHgwLCAweDEyLCAweDgyMCwgMHgxLCAweDgyMCwgMHgxLCAKKzB4ODIwLCAweDEsIDB4ODIwLCAweDEsIDB4ODQwLCAweDYxNjMsIDB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIAorMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgCisweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAKKzB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIAorMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgMHg4NjAsIDB4NjE2MiwgCisweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAweDg2MCwgMHg2MTYyLCAKKzB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIDB4ODYwLCAweDYxNjIsIDB4ODgwLCAweDYxNjIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgCisweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAKKzB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIDB4MCwgMHgzMTMyLCAweDAsIDB4MzEzMiwgMHgwLCAweDMxMzIsIAorMHg4YTAsIDB4MWYsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAKKzB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIAorMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgCisweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAKKzB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgyNywgMHgwLCAweDI3LCAweDAsIDB4MjcsIAorMHgwLCAweDI3LCAweDAsIDB4MjcsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIAorMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgCisweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAKKzB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwCisgICAgfTsKKworICAgIHByaXZhdGUgZmluYWwgaW50IFNUUklOR18xX1tdID0gezAsIDB4MjAsIDB4YTcsIDB4MzQwMCwgMHg5ZmE2LCAweGRhZGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZWVlZSwgMHgxMTExMSwgMHg0NDQ0NCwgMHhmMDAwMywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMDAwNCwgMHhmMDAwNiwgMHhmMDAwNywgMHhmMDAyMH07CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgVkFMVUVfMV9bXSA9IHswLCAweDEyMzQsIDAsIDB4NjE2MiwgMHgzMTMyLCAweDI3LCAxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjE2MiwgMCwgMHhmLCAweDEwLCAweDExLCAweDEyLCAwfTsKKyAgICAKKyAgICAvLyBwcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgICBwcml2YXRlIHZvaWQgaW50ZXJuYWxUZXN0SW50VmFsdWVzKEludFRyaWUgdHJpZSwgU3RyaW5nIHN0ciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWVzW10pIAorICAgIHsKKyAgICAgICAgLy8gdHJ5IGZvcndhcmQgCisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGludCB2YWx1ZWluZGV4ID0gMDsKKyAgICAgICAgd2hpbGUgKGNvdW50IDwgc3RyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBpbnQgdmFsdWU7CisgICAgICAgICAgICBjaGFyIGMgPSBzdHIuY2hhckF0KGNvdW50ICsrKTsKKyAgICAgICAgICAgIGNoYXIgYzIgPSBVVEYxNi5pc0xlYWRTdXJyb2dhdGUoYykgJiYgY291bnQgPCBzdHIubGVuZ3RoKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKHN0ci5jaGFyQXQoY291bnQpKQorICAgICAgICAgICAgICAgICAgICAgID8gc3RyLmNoYXJBdChjb3VudCArKykgOiAwOworICAgICAgICAgICAgaWYgKGMyICE9IDApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRyaWUuZ2V0U3Vycm9nYXRlVmFsdWUoYywgYzIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB0cmllLmdldEJNUFZhbHVlKGMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlc1t2YWx1ZWluZGV4XSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvcjogRXhwZWN0ZWQgdmFsdWUgZm9yIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoYykgKworICAgICAgICAgICAgICAgICAgICAgICIgYW5kIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoYzIpICsgIiBzaG91bGQgYmUgIiArIAorICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZWluZGV4XSArICIgbm90ICIgKyB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZSA9IHRyaWUuZ2V0TGVhZFZhbHVlKGMpOworICAgICAgICAgICAgaWYgKGMyICE9IDApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRyaWUuZ2V0VHJhaWxWYWx1ZSh2YWx1ZSwgYzIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlc1t2YWx1ZWluZGV4XSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvcjogRXhwZWN0ZWQgdmFsdWUgZm9yIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoYykgKworICAgICAgICAgICAgICAgICAgICAgICIgYW5kIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoYzIpICsgIiBzaG91bGQgYmUgIiArIAorICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZWluZGV4XSArICIgbm90ICIgKyB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYzIhPTApIHsKKyAgICAgICAgICAgICAgICBpbnQgY29kZXBvaW50ID0gVUNoYXJhY3Rlci5nZXRDb2RlUG9pbnQoYywgYzIpOworICAgICAgICAgICAgICAgIHZhbHVlID0gdHJpZS5nZXRDb2RlUG9pbnRWYWx1ZShjb2RlcG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB0cmllLmdldEJNUFZhbHVlKGMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlc1t2YWx1ZWluZGV4XSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJFcnJvcjogRXhwZWN0ZWQgdmFsdWUgZm9yIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoYykgKworICAgICAgICAgICAgICAgICAgICAgICIgYW5kIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoYzIpICsgIiBzaG91bGQgYmUgIiArIAorICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZWluZGV4XSArICIgbm90ICIgKyB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZWluZGV4ICsrOworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9WZXJzaW9uSW5mb1Rlc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL1ZlcnNpb25JbmZvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Y2U4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rlc3QvdXRpbC9WZXJzaW9uSW5mb1Rlc3QuamF2YQpAQCAtMCwwICsxLDMyOCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC91dGlsL1ZlcnNpb25JbmZvVGVzdC5qYXZhLHYgJCAKKyogJERhdGU6IDIwMDIvMDMvMjcgMDE6NTk6NDYgJCAKKyogJFJldmlzaW9uOiAxLjUgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50ZXN0LnV0aWw7CisKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RGbXdrOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVmVyc2lvbkluZm87CisKKworLyoqCisqIFRlc3RpbmcgY2xhc3MgZm9yIFZlcnNpb25JbmZvCisqIEBhdXRob3IgU3luIFdlZSBRdWVrCisqIEBzaW5jZSByZWxlYXNlIDIuMSBNYXJjaCAwMSAyMDAyCisqLworcHVibGljIGZpbmFsIGNsYXNzIFZlcnNpb25JbmZvVGVzdCBleHRlbmRzIFRlc3RGbXdrIAoreyAKKyAgICAvLyBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgICAgLyoqCisgICAgKiBDb25zdHJ1Y3RvcgorICAgICovCisgICAgcHVibGljIFZlcnNpb25JbmZvVGVzdCgpCisgICAgeworICAgIH0KKworICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ1tdKSAKKyAgICB7CisgICAgICAgIFZlcnNpb25JbmZvVGVzdCB0ZXN0ID0gbmV3IFZlcnNpb25JbmZvVGVzdCgpOworICAgICAgICB0cnkgeworCSAgICAgICAgdGVzdC5ydW4oYXJnKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCXRlc3QuZXJybG4oIkVycm9yIHRlc3RpbmcgVmVyc2lvbkluZm8iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoYXQgdGhlIGluc3RhbnRpYXRpb24gd29ya3MKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBUZXN0SW5zdGFuY2UoKQorICAgIHsKKyAgICAJVmVyc2lvbkluZm8gdmVyc2lvbjsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBJTlNUQU5DRV9JTlZBTElEX1NUUklOR18ubGVuZ3RoOyBpICsrKSB7CisgICAgCQl0cnkgeworICAgIAkJCXZlcnNpb24gPSAKKyAgICAJCQkgICAgICAgIFZlcnNpb25JbmZvLmdldEluc3RhbmNlKElOU1RBTkNFX0lOVkFMSURfU1RSSU5HX1tpXSk7CisgICAgCQkJZXJybG4oIlwiIiArIElOU1RBTkNFX0lOVkFMSURfU1RSSU5HX1tpXSArIAorICAgIAkJCSAgICAgICJcIiBzaG91bGQgcHJvZHVjZSBhbiBleGNlcHRpb24iKTsKKyAgICAJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgIAkJfQorICAgIAl9CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgSU5TVEFOQ0VfVkFMSURfU1RSSU5HXy5sZW5ndGg7IGkgKyspIHsKKwkgICAgCXRyeSB7CisJICAgIAkJdmVyc2lvbiA9IFZlcnNpb25JbmZvLmdldEluc3RhbmNlKElOU1RBTkNFX1ZBTElEX1NUUklOR19baV0pOworCSAgICAJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJICAgIAkJZXJybG4oIlwiIiArIElOU1RBTkNFX1ZBTElEX1NUUklOR19baV0gKyAKKwkgICAgCQkgICAgICAiXCIgc2hvdWxkIHByb2R1Y2UgYW4gdmFsaWQgdmVyc2lvbiIpOworCSAgICAJfQorICAgIAl9CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgSU5TVEFOQ0VfSU5WQUxJRF9JTlRfLmxlbmd0aDsgaSArKykgeworCSAgICAJdHJ5IHsKKwkgICAgCQl2ZXJzaW9uID0gZ2V0SW5zdGFuY2UoSU5TVEFOQ0VfSU5WQUxJRF9JTlRfW2ldKTsKKwkgICAgCQllcnJsbigiaW52YWxpZCBpbnRzIHNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbiIpOworCSAgICAJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJICAgIAl9CisgICAgCX0KKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBJTlNUQU5DRV9WQUxJRF9JTlRfLmxlbmd0aDsgaSArKykgeworCSAgICAJdHJ5IHsKKwkgICAgCQl2ZXJzaW9uID0gZ2V0SW5zdGFuY2UoSU5TVEFOQ0VfVkFMSURfSU5UX1tpXSk7CisJICAgIAl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkgICAgCQllcnJsbigidmFsaWQgaW50cyBzaG91bGQgbm90IHByb2R1Y2UgYW4gZXhjZXB0aW9uIik7CisJICAgIAl9CisgICAgCX0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdCB0aGF0IHRoZSBjb21wYXJpc29uIHdvcmtzCisgICAgICovCisgICAgcHVibGljIHZvaWQgVGVzdENvbXBhcmUoKQorICAgIHsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBDT01QQVJFX05PVF9FUVVBTF9TVFJJTkdfLmxlbmd0aDsgaSArPSAyKSB7CisgICAgCQlWZXJzaW9uSW5mbyB2MSA9IAorICAgIAkJICAgICAgICAgICAgVmVyc2lvbkluZm8uZ2V0SW5zdGFuY2UoQ09NUEFSRV9OT1RfRVFVQUxfU1RSSU5HX1tpXSk7CisgICAgCQlWZXJzaW9uSW5mbyB2MiA9IAorICAgIAkJICAgICAgICBWZXJzaW9uSW5mby5nZXRJbnN0YW5jZShDT01QQVJFX05PVF9FUVVBTF9TVFJJTkdfW2kgKyAxXSk7CisgICAgCQlpZiAodjEuY29tcGFyZVRvKHYyKSA9PSAwKSB7CisgICAgCQkJZXJybG4oQ09NUEFSRV9OT1RfRVFVQUxfU1RSSU5HX1tpXSArICIgc2hvdWxkIG5vdCBlcXVhbCAiICsKKyAgICAJCQkgICAgICBDT01QQVJFX05PVF9FUVVBTF9TVFJJTkdfW2kgKyAxXSk7CisgICAgCQl9CisgICAgCX0KKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBDT01QQVJFX05PVF9FUVVBTF9JTlRfLmxlbmd0aDsgaSArPSAyKSB7CisgICAgCQlWZXJzaW9uSW5mbyB2MSA9IGdldEluc3RhbmNlKENPTVBBUkVfTk9UX0VRVUFMX0lOVF9baV0pOworICAgIAkJVmVyc2lvbkluZm8gdjIgPSBnZXRJbnN0YW5jZShDT01QQVJFX05PVF9FUVVBTF9JTlRfW2kgKyAxXSk7CisgICAgCQlpZiAodjEuY29tcGFyZVRvKHYyKSA9PSAwKSB7CisgICAgCQkJZXJybG4oQ09NUEFSRV9OT1RfRVFVQUxfSU5UX1tpXSArICIgc2hvdWxkIG5vdCBlcXVhbCAiICsKKyAgICAJCQkgICAgICBDT01QQVJFX05PVF9FUVVBTF9JTlRfW2kgKyAxXSk7CisgICAgCQl9CisgICAgCX0KKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBDT01QQVJFX0VRVUFMX1NUUklOR18ubGVuZ3RoIC0gMTsgaSArKykgeworICAgIAkJVmVyc2lvbkluZm8gdjEgPSAKKyAgICAJCSAgICAgICAgICAgIFZlcnNpb25JbmZvLmdldEluc3RhbmNlKENPTVBBUkVfRVFVQUxfU1RSSU5HX1tpXSk7CisgICAgCQlWZXJzaW9uSW5mbyB2MiA9IAorICAgIAkJICAgICAgICBWZXJzaW9uSW5mby5nZXRJbnN0YW5jZShDT01QQVJFX0VRVUFMX1NUUklOR19baSArIDFdKTsKKyAgICAJCWlmICh2MS5jb21wYXJlVG8odjIpICE9IDApIHsKKyAgICAJCQllcnJsbihDT01QQVJFX0VRVUFMX1NUUklOR19baV0gKyAiIHNob3VsZCBlcXVhbCAiICsKKyAgICAJCQkgICAgICBDT01QQVJFX0VRVUFMX1NUUklOR19baSArIDFdKTsKKyAgICAJCX0KKyAgICAJfQorICAgIAlmb3IgKGludCBpID0gMDsgaSA8IENPTVBBUkVfRVFVQUxfSU5UXy5sZW5ndGggLSAxOyBpICsrKSB7CisgICAgCQlWZXJzaW9uSW5mbyB2MSA9IGdldEluc3RhbmNlKENPTVBBUkVfRVFVQUxfSU5UX1tpXSk7CisgICAgCQlWZXJzaW9uSW5mbyB2MiA9IGdldEluc3RhbmNlKENPTVBBUkVfRVFVQUxfSU5UX1tpICsgMV0pOworICAgIAkJaWYgKHYxLmNvbXBhcmVUbyh2MikgIT0gMCkgeworICAgIAkJCWVycmxuKENPTVBBUkVfRVFVQUxfSU5UX1tpXSArICIgc2hvdWxkIGVxdWFsICIgKworICAgIAkJCSAgICAgIENPTVBBUkVfRVFVQUxfSU5UX1tpICsgMV0pOworICAgIAkJfQorICAgIAl9CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgQ09NUEFSRV9MRVNTXy5sZW5ndGggLSAxOyBpICsrKSB7CisgICAgCQlWZXJzaW9uSW5mbyB2MSA9IFZlcnNpb25JbmZvLmdldEluc3RhbmNlKENPTVBBUkVfTEVTU19baV0pOworICAgIAkJVmVyc2lvbkluZm8gdjIgPSBWZXJzaW9uSW5mby5nZXRJbnN0YW5jZShDT01QQVJFX0xFU1NfW2kgKyAxXSk7CisgICAgCQlpZiAodjEuY29tcGFyZVRvKHYyKSA+PSAwKSB7CisgICAgCQkJZXJybG4oQ09NUEFSRV9MRVNTX1tpXSArICIgc2hvdWxkIGJlIGxlc3MgdGhhbiAiICsgCisgICAgCQkJICAgICAgQ09NUEFSRV9MRVNTX1tpICsgMV0pOworICAgIAkJfQorICAgIAkJaWYgKHYyLmNvbXBhcmVUbyh2MSkgPD0gMCkgeworICAgIAkJCWVycmxuKENPTVBBUkVfTEVTU19baSArIDFdICsgIiBzaG91bGQgYmUgZ3JlYXRlciB0aGFuICIgKyAKKyAgICAJCQkgICAgICBDT01QQVJFX0xFU1NfW2ldKTsKKyAgICAJCX0KKyAgICAJfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0IHRoYXQgdGhlIGdldHRlciBmdW5jdGlvbiB3b3JrcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIFRlc3RHZXR0ZXIoKQorICAgIHsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBHRVRfU1RSSU5HXy5sZW5ndGg7IGkgKyspIHsKKyAgICAJCVZlcnNpb25JbmZvIHYgPSBWZXJzaW9uSW5mby5nZXRJbnN0YW5jZShHRVRfU1RSSU5HX1tpXSk7CisgICAgCQlpZiAodi5nZXRNYWpvcigpICE9IEdFVF9SRVNVTFRfW2kgPDwgMl0gfHwKKyAgICAJCSAgICB2LmdldE1pbm9yKCkgIT0gR0VUX1JFU1VMVF9bKGkgPDwgMikgKyAxXSB8fAorICAgIAkJICAgIHYuZ2V0TWlsbGkoKSAhPSBHRVRfUkVTVUxUX1soaSA8PCAyKSArIDJdIHx8CisgICAgCQkgICAgdi5nZXRNaWNybygpICE9IEdFVF9SRVNVTFRfWyhpIDw8IDIpICsgM10pIHsKKyAgICAJCSAgICBlcnJsbihHRVRfU1RSSU5HX1tpXSArICIgc2hvdWxkIHJldHVybiBtYWpvcj0iICsgCisgICAgCQkgICAgICAgICAgR0VUX1JFU1VMVF9baSA8PCAyXSArICIgbWlub3I9IiArIAorICAgIAkJICAgICAgICAgIEdFVF9SRVNVTFRfWyhpIDw8IDIpICsgMV0gKyAiIG1pbGxpPSIgKyAKKyAgICAJCSAgICAgICAgICBHRVRfUkVTVUxUX1soaSA8PCAyKSArIDJdICsgIiBtaWNybz0iICsKKyAgICAJCSAgICAgICAgICBHRVRfUkVTVUxUX1soaSA8PCAyKSArIDNdKTsgIAorICAgIAkJfQorICAgIAkJdiA9IGdldEluc3RhbmNlKEdFVF9JTlRfW2ldKTsKKyAgICAJCWlmICh2LmdldE1ham9yKCkgIT0gR0VUX1JFU1VMVF9baSA8PCAyXSB8fAorICAgIAkJICAgIHYuZ2V0TWlub3IoKSAhPSBHRVRfUkVTVUxUX1soaSA8PCAyKSArIDFdIHx8CisgICAgCQkgICAgdi5nZXRNaWxsaSgpICE9IEdFVF9SRVNVTFRfWyhpIDw8IDIpICsgMl0gfHwKKyAgICAJCSAgICB2LmdldE1pY3JvKCkgIT0gR0VUX1JFU1VMVF9bKGkgPDwgMikgKyAzXSkgeworICAgIAkJICAgIGVycmxuKEdFVF9TVFJJTkdfW2ldICsgIiBzaG91bGQgcmV0dXJuIG1ham9yPSIgKyAKKyAgICAJCSAgICAgICAgICBHRVRfUkVTVUxUX1tpIDw8IDJdICsgIiBtaW5vcj0iICsgCisgICAgCQkgICAgICAgICAgR0VUX1JFU1VMVF9bKGkgPDwgMikgKyAxXSArICIgbWlsbGk9IiArIAorICAgIAkJICAgICAgICAgIEdFVF9SRVNVTFRfWyhpIDw8IDIpICsgMl0gKyAiIG1pY3JvPSIgKworICAgIAkJICAgICAgICAgIEdFVF9SRVNVTFRfWyhpIDw8IDIpICsgM10pOyAgCisgICAgCQl9CisgICAgCX0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGVzdCB0b1N0cmluZygpCisgICAgICovCisJcHVibGljIHZvaWQgVGVzdHRvU3RyaW5nKCkgCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IFRPU1RSSU5HX1NUUklOR18ubGVuZ3RoOyBpICsrKSB7CisgICAgCQlWZXJzaW9uSW5mbyB2ID0gVmVyc2lvbkluZm8uZ2V0SW5zdGFuY2UoVE9TVFJJTkdfU1RSSU5HX1tpXSk7CisgICAgCQlpZiAoIXYudG9TdHJpbmcoKS5lcXVhbHMoVE9TVFJJTkdfUkVTVUxUX1tpXSkpIHsKKyAgICAJICAgIAllcnJsbigidG9TdHJpbmcoKSBmb3IgIiArIFRPU1RSSU5HX1NUUklOR19baV0gKyAKKyAgICAJICAgIAkgICAgICAiIHNob3VsZCBwcm9kdWNlICIgKyBUT1NUUklOR19SRVNVTFRfW2ldKTsKKyAgICAJCX0KKyAgICAJCXYgPSBnZXRJbnN0YW5jZShUT1NUUklOR19JTlRfW2ldKTsKKyAgICAJCWlmICghdi50b1N0cmluZygpLmVxdWFscyhUT1NUUklOR19SRVNVTFRfW2ldKSkgeworICAgIAkgICAgCWVycmxuKCJ0b1N0cmluZygpIGZvciAiICsgVE9TVFJJTkdfSU5UX1tpXSArIAorICAgIAkgICAgCSAgICAgICIgc2hvdWxkIHByb2R1Y2UgIiArIFRPU1RSSU5HX1JFU1VMVF9baV0pOworICAgIAkJfQorCQl9CisJfQorCQorCS8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQorCS8qKgorCSAqIGludCBhcnJheSB2ZXJzaW9uaW5mbyBjcmVhdGlvbgorCSAqLworCXByaXZhdGUgc3RhdGljIFZlcnNpb25JbmZvIGdldEluc3RhbmNlKGludCBkYXRhW10pCisJeworCQlzd2l0Y2ggKGRhdGEubGVuZ3RoKSB7CisJICAgIAljYXNlIDE6CisJICAgIAkJcmV0dXJuIFZlcnNpb25JbmZvLmdldEluc3RhbmNlKGRhdGFbMF0pOworCSAgICAJY2FzZSAyOgorCSAgICAJCXJldHVybiBWZXJzaW9uSW5mby5nZXRJbnN0YW5jZShkYXRhWzBdLCBkYXRhWzFdKTsKKwkgICAgCWNhc2UgMzoKKwkgICAgCQlyZXR1cm4gVmVyc2lvbkluZm8uZ2V0SW5zdGFuY2UoZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSk7CisJICAgIAlkZWZhdWx0OgorCSAgICAJCXJldHVybiBWZXJzaW9uSW5mby5nZXRJbnN0YW5jZShkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCAKKwkgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVszXSk7CisJCX0KKwl9CisJCisJLy8gcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKioKKwkgKiBUZXN0IGluc3RhbmNlIGRhdGEKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFOQ0VfSU5WQUxJRF9TVFJJTkdfW10gPSB7CisJCSJhIiwKKwkJIi0xIiwKKwkJIi0xLjAiLAorCQkiLTEuMC4wIiwKKwkJIi0xLjAuMC4wIiwKKwkJIjAuLTEiLAorCQkiMC4wLi0xIiwKKwkJIjAuMC4wLi0xIiwKKwkJIjI1NiIsCisJCSIyNTYuMCIsCisJCSIyNTYuMC4wIiwKKwkJIjI1Ni4wLjAuMCIsCisJCSIwLjI1NiIsCisJCSIwLjAuMjU2IiwKKwkJIjAuMC4wLjI1NiIsCisJCSIxLjIuMy40LjUiCisJfTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFOQ0VfVkFMSURfU1RSSU5HX1tdID0geworCQkiMjU1IiwKKwkJIjI1NS4yNTUiLAorCQkiMjU1LjI1NS4yNTUiLAorCQkiMjU1LjI1NS4yNTUuMjU1IgorCX07CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOU1RBTkNFX0lOVkFMSURfSU5UX1tdW10gPSB7CisJCXstMX0sCisJCXstMSwgMH0sCisJCXstMSwgMCwgMH0sCisJCXstMSwgMCwgMCwgMH0sCisJCXswLCAtMX0sCisJCXswLCAwLCAtMX0sCisJCXswLCAwLCAwLCAtMX0sCisJCXsyNTZ9LAorCQl7MjU2LCAwfSwKKwkJezI1NiwgMCwgMH0sCisJCXsyNTYsIDAsIDAsIDB9LAorCQl7MCwgMjU2fSwKKwkJezAsIDAsIDI1Nn0sCisJCXswLCAwLCAwLCAyNTZ9LAorCX07CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOU1RBTkNFX1ZBTElEX0lOVF9bXVtdID0geworCQl7MjU1fSwKKwkJezI1NSwgMjU1fSwKKwkJezI1NSwgMjU1LCAyNTV9LAorCQl7MjU1LCAyNTUsIDI1NSwgMjU1fQorCX07CisJCisJLyoqCisJICogVGVzdCBjb21wYXJlIGRhdGEKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUEFSRV9OT1RfRVFVQUxfU1RSSU5HX1tdID0geworCQkiMi4wLjAuMCIsICIzLjAuMC4wIgorCX07CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTVBBUkVfTk9UX0VRVUFMX0lOVF9bXVtdID0geworCQl7MiwgMCwgMCwgMH0sIHszLCAwLCAwLCAwfQorCX07CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTVBBUkVfRVFVQUxfU1RSSU5HX1tdID0geworCQkiMi4wLjAuMCIsICIyLjAuMCIsICIyLjAiLCAiMiIKKwl9OworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT01QQVJFX0VRVUFMX0lOVF9bXVtdID0geworCQl7Mn0sIHsyLCAwfSwgezIsIDAsIDB9LCB7MiwgMCwgMCwgMH0JCisJfTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUEFSRV9MRVNTX1tdID0geworCQkiMCIsICIwLjAuMC4xIiwgIjAuMC4xIiwgIjAuMSIsICIxIiwgIjIiLCAiMi4xIiwgIjIuMS4xIiwgIjIuMS4xLjEiCisJfTsKKwkKKwkvKioKKwkgKiBUZXN0IEdldHRlciBkYXRhCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdFVF9TVFJJTkdfW10gPSB7CisJCSIwIiwKKwkJIjEuMSIsCisJCSIyLjEuMjU1IiwKKwkJIjMuMS4yNTUuMTAwIgorCX07CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlRfW11bXSA9IHsKKwkJezB9LAorCQl7MSwgMX0sCisJCXsyLCAxLCAyNTV9LAorCQl7MywgMSwgMjU1LCAxMDB9CisJfTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1JFU1VMVF9bXSA9IHsKKwkJMCwgMCwgMCwgMCwKKwkJMSwgMSwgMCwgMCwKKwkJMiwgMSwgMjU1LCAwLAorCQkzLCAxLCAyNTUsIDEwMAorCX07CisJCisJLyoqCisJICogVGVzdCB0b1N0cmluZyBkYXRhCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPU1RSSU5HX1NUUklOR19bXSA9IHsKKwkJIjAiLAorCQkiMS4xIiwKKwkJIjIuMS4yNTUiLAorCQkiMy4xLjI1NS4xMDAiCQorCX07CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRPU1RSSU5HX0lOVF9bXVtdID0geworCQl7MH0sCisJCXsxLCAxfSwKKwkJezIsIDEsIDI1NX0sCisJCXszLCAxLCAyNTUsIDEwMH0KKwl9OworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT1NUUklOR19SRVNVTFRfW10gPSB7CisJCSIwLjAuMC4wIiwKKwkJIjEuMS4wLjAiLAorCQkiMi4xLjI1NS4wIiwKKwkJIjMuMS4yNTUuMTAwIgkKKwl9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9VT3B0aW9uLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvVU9wdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWY2MTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvVU9wdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjU5IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKGMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEF1dGhvcjogQWxhbiBMaXUKKyogQ3JlYXRlZDogTm92ZW1iZXIgMTUgMjAwMgorKiBTaW5jZTogSUNVIDIuNAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2w7CisKKy8qKgorICogQSBjb21tYW5kLWxpbmUgb3B0aW9uLiAgQSBVT3B0aW9uIHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhbiBvcHRpb24KKyAqIGFuZCB3aGV0aGVyIG9yIG5vdCBpdCB0YWtlcyBhbiBhcmd1bWVudC4gIEl0IGlzIGEgbXV0YWJsZSBvYmplY3QKKyAqIHRoYXQgbGF0ZXIgY29udGFpbnMgdGhlIG9wdGlvbiBhcmd1bWVudCwgaWYgYW55LCBhbmQgYSBib29sZWFuCisgKiBmbGFnIHN0YXRpbmcgd2hldGhlciB0aGUgb3B0aW9uIHdhcyBzZWVuIG9yIG5vdC4KKyAqCisgKiBUaGUgc3RhdGljIG1ldGhvZCBwYXJzZUFyZ3MoKSB0YWtlcyBhbiBhcnJheSBvZiBjb21tYW5kLWxpbmUKKyAqIGFyZ3VtZW50cyBhbmQgYW4gYXJyYXkgb2YgVU9wdGlvbnMgYW5kIHBhcnNlcyB0aGUgY29tbWFuZC1saW5lCisgKiBhcmd1bWVudHMuCisgKgorICogVGhpcyBkZWxpYmVyYXRlbHkgcmVzZW1ibGVzIHRoZSBpY3U0YyBmaWxlIHVvcHRpb24uW2NoXS4KKyAqLworcHVibGljIGNsYXNzIFVPcHRpb24geworCisgICAgLy8gRGVsaWJlcmF0ZWQgcHVibGljIGRhdGEgbWVtYmVycworICAgIHB1YmxpYyBTdHJpbmcgIGxvbmdOYW1lOworICAgIHB1YmxpYyBTdHJpbmcgIHZhbHVlOworICAgIHB1YmxpYyBGbiAgICAgIG9wdGlvbkZuOworICAgIHB1YmxpYyBPYmplY3QgIGNvbnRleHQ7CisgICAgcHVibGljIGNoYXIgICAgc2hvcnROYW1lOworICAgIHB1YmxpYyBpbnQgICAgIGhhc0FyZzsKKyAgICBwdWJsaWMgYm9vbGVhbiBkb2VzT2NjdXI7CisKKyAgICAvLyBWYWx1ZXMgb2YgaGFzQXJnCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9fQVJHICAgICAgID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVFVSVJFU19BUkcgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QVElPTkFMX0FSRyA9IDI7CisKKyAgICAvLyBBbmFsb2cgb2YgVU9wdGlvbkZuLiAgV2UgZG9uJ3QgcGFzcyBpbiB0aGUgY29udGV4dCBiZWNhdXNlIHRoZQorICAgIC8vIGZ1bmN0b3IgY2FuIGdldCBpdCBmcm9tIHRoZSBVT3B0aW9uLgorICAgIHB1YmxpYyBpbnRlcmZhY2UgRm4geworICAgICAgICBpbnQgaGFuZGxlKFVPcHRpb24gb3B0aW9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBVT3B0aW9uIHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBVT3B0aW9uIGNyZWF0ZShTdHJpbmcgYUxvbmdOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGFTaG9ydE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoYXNBcmd1bWVudCkgeworICAgICAgICByZXR1cm4gbmV3IFVPcHRpb24oYUxvbmdOYW1lLCBhU2hvcnROYW1lLCBoYXNBcmd1bWVudCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgVU9wdGlvbiB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGVzLgorICAgICAqIFN5bm9ueW0gZm9yIGNyZWF0ZSgpLCBmb3IgQyBjb21wYXRpYmlsaXR5LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVU9wdGlvbiBERUYoU3RyaW5nIGFMb25nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYVNob3J0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoYXNBcmd1bWVudCkgeworICAgICAgICByZXR1cm4gY3JlYXRlKGFMb25nTmFtZSwgYVNob3J0TmFtZSwgaGFzQXJndW1lbnQpOworICAgIH0KKworICAgIC8vIFN0YW5kYXJkIGNhbm5lZCBvcHRpb25zLiAgVGhlc2UgY3JlYXRlIGEgbmV3IG9iamVjdCB3aGVuCisgICAgLy8gY2FsbGVkLiAgU2luY2UgdGhlIFVPcHRpb24gb2JqZWN0IGlzIG11dGFibGUsIHdlIGNhbm5vdCB1c2UKKyAgICAvLyBzdGF0aWMgZmluYWwgaW5zdGFuY2VzLgorICAgIHB1YmxpYyBzdGF0aWMgVU9wdGlvbiBIRUxQX0goKSAgICAgICAgICAgICB7IHJldHVybiBjcmVhdGUoImhlbHAiLCAnaCcsIE5PX0FSRyk7IH0KKyAgICBwdWJsaWMgc3RhdGljIFVPcHRpb24gSEVMUF9RVUVTVElPTl9NQVJLKCkgeyByZXR1cm4gY3JlYXRlKCJoZWxwIiwgJz8nLCBOT19BUkcpOyB9CisgICAgcHVibGljIHN0YXRpYyBVT3B0aW9uIFZFUkJPU0UoKSAgICAgICAgICAgIHsgcmV0dXJuIGNyZWF0ZSgidmVyYm9zZSIsICd2JywgTk9fQVJHKTsgfQorICAgIHB1YmxpYyBzdGF0aWMgVU9wdGlvbiBRVUlFVCgpICAgICAgICAgICAgICB7IHJldHVybiBjcmVhdGUoInF1aWV0IiwgJ3EnLCBOT19BUkcpOyB9CisgICAgcHVibGljIHN0YXRpYyBVT3B0aW9uIFZFUlNJT04oKSAgICAgICAgICAgIHsgcmV0dXJuIGNyZWF0ZSgidmVyc2lvbiIsICdWJywgTk9fQVJHKTsgfQorICAgIHB1YmxpYyBzdGF0aWMgVU9wdGlvbiBDT1BZUklHSFQoKSAgICAgICAgICB7IHJldHVybiBjcmVhdGUoImNvcHlyaWdodCIsICdjJywgTk9fQVJHKTsgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgVU9wdGlvbiBERVNURElSKCkgICAgICAgICAgICB7IHJldHVybiBjcmVhdGUoImRlc3RkaXIiLCAnZCcsIFJFUVVJUkVTX0FSRyk7IH0KKyAgICBwdWJsaWMgc3RhdGljIFVPcHRpb24gU09VUkNFRElSKCkgICAgICAgICAgeyByZXR1cm4gY3JlYXRlKCJzb3VyY2VkaXIiLCAncycsIFJFUVVJUkVTX0FSRyk7IH0KKyAgICBwdWJsaWMgc3RhdGljIFVPcHRpb24gRU5DT0RJTkcoKSAgICAgICAgICAgeyByZXR1cm4gY3JlYXRlKCJlbmNvZGluZyIsICdlJywgUkVRVUlSRVNfQVJHKTsgfQorICAgIHB1YmxpYyBzdGF0aWMgVU9wdGlvbiBJQ1VEQVRBRElSKCkgICAgICAgICB7IHJldHVybiBjcmVhdGUoImljdWRhdGFkaXIiLCAnaScsIFJFUVVJUkVTX0FSRyk7IH0KKyAgICBwdWJsaWMgc3RhdGljIFVPcHRpb24gUEFDS0FHRV9OQU1FKCkgICAgICAgeyByZXR1cm4gY3JlYXRlKCJwYWNrYWdlLW5hbWUiLCAncCcsIFJFUVVJUkVTX0FSRyk7IH0KKyAgICBwdWJsaWMgc3RhdGljIFVPcHRpb24gQlVORExFX05BTUUoKSAgICAgICAgeyByZXR1cm4gY3JlYXRlKCJidW5kbGUtbmFtZSIsICdiJywgUkVRVUlSRVNfQVJHKTsgfQorCisgICAgLyoqCisgICAgICogSmF2YSBDb21tYW5kIGxpbmUgYXJndW1lbnQgcGFyc2VyLgorICAgICAqCisgICAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgYXJndltdIGNvbW1hbmQgbGluZSBhbmQgYSBkZXNjcmlwdGlvbiBvZgorICAgICAqIHRoZSBwcm9ncmFtJ3Mgb3B0aW9ucyBpbiBmb3JtIG9mIGFuIGFycmF5IG9mIFVPcHRpb24gc3RydWN0dXJlcy4KKyAgICAgKiBFYWNoIFVPcHRpb24gZGVmaW5lcyBhIGxvbmcgYW5kIGEgc2hvcnQgbmFtZSAoYSBzdHJpbmcgYW5kIGEgY2hhcmFjdGVyKQorICAgICAqIGZvciBvcHRpb25zIGxpa2UgIi0tZm9vIiBhbmQgIi1mIi4KKyAgICAgKgorICAgICAqIEVhY2ggb3B0aW9uIGlzIG1hcmtlZCB3aXRoIHdoZXRoZXIgaXQgZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudCwKKyAgICAgKiByZXF1aXJlcyBvbmUsIG9yIG9wdGlvbmFsbHkgdGFrZXMgb25lLiBUaGUgYXJndW1lbnQgbWF5IGZvbGxvdyBpbgorICAgICAqIHRoZSBzYW1lIGFyZ3ZbXSBlbnRyeSBmb3Igc2hvcnQgb3B0aW9ucywgb3IgaXQgbWF5IGFsd2F5cyBmb2xsb3cKKyAgICAgKiBpbiB0aGUgbmV4dCBhcmd2W10gZW50cnkuCisgICAgICoKKyAgICAgKiBBbiBhcmd1bWVudCBpcyBpbiB0aGUgbmV4dCBhcmd2W10gZW50cnkgZm9yIGJvdGggbG9uZyBhbmQgc2hvcnQgbmFtZQorICAgICAqIG9wdGlvbnMsIGV4Y2VwdCBpdCBpcyB0YWtlbiBmcm9tIGRpcmVjdGx5IGJlaGluZCB0aGUgc2hvcnQgbmFtZSBpbgorICAgICAqIGl0cyBvd24gYXJndltdIGVudHJ5IGlmIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIGZvbGxvd2luZyB0aGUgb3B0aW9uIGxldHRlci4KKyAgICAgKiBBbiBhcmd1bWVudCBpbiBpdHMgb3duIGFyZ3ZbXSBlbnRyeSBtdXN0IG5vdCBiZWdpbiB3aXRoIGEgJy0nCisgICAgICogdW5sZXNzIGl0IGlzIG9ubHkgdGhlICctJyBpdHNlbGYuIFRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIG9mIHRoZQorICAgICAqIGFyZ3VtZW50IGZvcm1hdCBpZiBpdCBpcyBwYXJ0IG9mIHRoZSBzaG9ydCBuYW1lIG9wdGlvbnMncyBhcmd2W10gZW50cnkuCisgICAgICoKKyAgICAgKiBUaGUgYXJndW1lbnQgaXMgc3RvcmVkIGluIHRoZSB2YWx1ZSBmaWVsZCBvZiB0aGUgY29ycmVzcG9uZGluZworICAgICAqIFVPcHRpb24gZW50cnksIGFuZCB0aGUgZG9lc09jY3VyIGZpZWxkIGlzIHNldCB0byAxIGlmIHRoZSBvcHRpb24KKyAgICAgKiBpcyBmb3VuZCBhdCBhbGwuCisgICAgICoKKyAgICAgKiBTaG9ydCBuYW1lIG9wdGlvbnMgd2l0aG91dCBhcmd1bWVudHMgY2FuIGJlIGNvbGxhcHNlZCBpbnRvIGEgc2luZ2xlCisgICAgICogYXJndltdIGVudHJ5LiBBZnRlciBhbiBvcHRpb24gbGV0dGVyIHRha2VzIGFuIGFyZ3VtZW50LCBmb2xsb3dpbmcKKyAgICAgKiBsZXR0ZXJzIHdpbGwgYmUgdGFrZW4gYXMgaXRzIGFyZ3VtZW50LgorICAgICAqCisgICAgICogSWYgdGhlIHNhbWUgb3B0aW9uIGlzIGZvdW5kIHNldmVyYWwgdGltZXMsIHRoZW4gdGhlIGxhc3QKKyAgICAgKiBhcmd1bWVudCB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgdmFsdWUgZmllbGQuCisgICAgICoKKyAgICAgKiBGb3IgZWFjaCBvcHRpb24sIGEgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZC4gVGhpcyBjb3VsZCBiZSB1c2VkCisgICAgICogZm9yIG9wdGlvbnMgdGhhdCBvY2N1ciBtdWx0aXBsZSB0aW1lcyBhbmQgYWxsIGFyZ3VtZW50cyBhcmUgdG8KKyAgICAgKiBiZSBjb2xsZWN0ZWQuCisgICAgICoKKyAgICAgKiBBbGwgb3B0aW9ucyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBhcmd2W10gYXJyYXkgaXRzZWxmLiBJZiB0aGUgcGFyc2VyCisgICAgICogaXMgc3VjY2Vzc2Z1bCwgdGhlbiBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIG5vbi1vcHRpb24KKyAgICAgKiBzdHJpbmdzLiAgKFVubGlrZSBDLCB0aGUgSmF2YSBhcmd2W10gYXJyYXkgZG9lcyBOT1QgY29udGFpbgorICAgICAqIHRoZSBwcm9ncmFtIG5hbWUgaW4gYXJndlswXS4pCisgICAgICoKKyAgICAgKiBBbiBvcHRpb24gIi0tIiBlbmRzIG9wdGlvbiBwcm9jZXNzaW5nOyBldmVyeXRoaW5nIGFmdGVyIHRoaXMKKyAgICAgKiByZW1haW5zIGluIHRoZSBhcmd2W10gYXJyYXkuCisgICAgICoKKyAgICAgKiBBbiBvcHRpb24gc3RyaW5nICItIiBhbG9uZSBpcyB0cmVhdGVkIGFzIGEgbm9uLW9wdGlvbi4KKyAgICAgKgorICAgICAqIElmIGFuIG9wdGlvbiBpcyBub3QgcmVjb2duaXplZCBvciBhbiBhcmd1bWVudCBtaXNzaW5nLCB0aGVuCisgICAgICogdGhlIHBhcnNlciByZXR1cm5zIHdpdGggdGhlIG5lZ2F0aXZlIGluZGV4IG9mIHRoZSBhcmd2W10gZW50cnkKKyAgICAgKiB3aGVyZSB0aGUgZXJyb3Igd2FzIGRldGVjdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIGFyZ3YgdGhpcyBwYXJhbWV0ZXIgaXMgbW9kaWZpZWQKKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGZpcnN0IGFyZ3VtZW50IGluIGFyZ3ZbXSB0byBleGFtaW5lLiAgTXVzdCBiZQorICAgICAqIDAuLmFyZ3YubGVuZ3RoLTEuICBBcmd1bWVudHMgZnJvbSAwLi5zdGFydC0xIGFyZSBpZ25vcmVkLgorICAgICAqIEBwYXJhbSBvcHRpb25zIHRoaXMgcGFyYW1ldGVyIGlzIG1vZGlmaWVkCisgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50cyBpbiBhcmd2W10sIGluY2x1ZGluZworICAgICAqIGFyZ3VtZW50cyAwLi5zdGFydC0xLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IHBhcnNlQXJncyhTdHJpbmcgYXJndltdLCBpbnQgc3RhcnQsIFVPcHRpb24gb3B0aW9uc1tdKSB7CisgICAgICAgIFN0cmluZyBhcmc7CisgICAgICAgIGludCBpPXN0YXJ0LCByZW1haW5pbmc9c3RhcnQ7CisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgYm9vbGVhbiBzdG9wT3B0aW9ucz1mYWxzZTsKKworICAgICAgICB3aGlsZShpPGFyZ3YubGVuZ3RoKSB7CisgICAgICAgICAgICBhcmc9YXJndltpXTsKKyAgICAgICAgICAgIGlmKCFzdG9wT3B0aW9ucyAmJiBhcmcubGVuZ3RoKCk+MSAmJiBhcmcuY2hhckF0KDApPT0nLScpIHsKKyAgICAgICAgICAgICAgICAvKiBwcm9jZXNzIGFuIG9wdGlvbiAqLworICAgICAgICAgICAgICAgIGM9YXJnLmNoYXJBdCgxKTsKKyAgICAgICAgICAgICAgICBVT3B0aW9uIG9wdGlvbj1udWxsOworICAgICAgICAgICAgICAgIGFyZz1hcmcuc3Vic3RyaW5nKDIpOworICAgICAgICAgICAgICAgIGlmKGM9PSctJykgeworICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzIGEgbG9uZyBvcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYoYXJnLmxlbmd0aCgpPT0wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9wIHByb2Nlc3Npbmcgb3B0aW9ucyBhZnRlciAiLS0iICovCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wT3B0aW9ucz10cnVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VhcmNoIGZvciB0aGUgb3B0aW9uIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPG9wdGlvbnMubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihvcHRpb25zW2pdLmxvbmdOYW1lICE9IG51bGwgJiYgYXJnLmVxdWFscyhvcHRpb25zW2pdLmxvbmdOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb249b3B0aW9uc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYob3B0aW9uPT1udWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gb3B0aW9uIG1hdGNoZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uZG9lc09jY3VyPXRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbi5oYXNBcmchPU5PX0FSRykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBhcnNlIHRoZSBhcmd1bWVudCBmb3IgdGhlIG9wdGlvbiwgaWYgYW55ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSsxPGFyZ3YubGVuZ3RoICYmICEoYXJndltpKzFdLmxlbmd0aCgpPjEgJiYgYXJndltpKzFdLmNoYXJBdCgwKT09Jy0nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcmd1bWVudCBpbiB0aGUgbmV4dCBhcmd2W10sIGFuZCB0aGVyZSBpcyBub3QgYW4gb3B0aW9uIGluIHRoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZT1hcmd2WysraV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKG9wdGlvbi5oYXNBcmc9PVJFUVVJUkVTX0FSRykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBubyBhcmd1bWVudCwgYnV0IG9uZSBpcyByZXF1aXJlZDogcmV0dXJuIHdpdGggZXJyb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3Mgb25lIG9yIG1vcmUgc2hvcnQgb3B0aW9ucyAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWFyY2ggZm9yIHRoZSBvcHRpb24gbGV0dGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8b3B0aW9ucy5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PW9wdGlvbnNbal0uc2hvcnROYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbj1vcHRpb25zW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZihvcHRpb249PW51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvcHRpb24gbWF0Y2hlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5kb2VzT2NjdXI9dHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYob3B0aW9uLmhhc0FyZyE9Tk9fQVJHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGFyc2UgdGhlIGFyZ3VtZW50IGZvciB0aGUgb3B0aW9uLCBpZiBhbnkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhcmcubGVuZ3RoKCkhPTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJndW1lbnQgZm9sbG93aW5nIGluIHRoZSBzYW1lIGFyZ3ZbXSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24udmFsdWU9YXJnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3QgcHJvY2VzcyB0aGUgcmVzdCBvZiB0aGlzIGFyZyBhcyBvcHRpb24gbGV0dGVycyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoaSsxPGFyZ3YubGVuZ3RoICYmICEoYXJndltpKzFdLmxlbmd0aCgpPjEgJiYgYXJndltpKzFdLmNoYXJBdCgwKT09Jy0nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcmd1bWVudCBpbiB0aGUgbmV4dCBhcmd2W10sIGFuZCB0aGVyZSBpcyBub3QgYW4gb3B0aW9uIGluIHRoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZT1hcmd2WysraV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgYnJlYWsgaXMgcmVkdW5kYW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0ICphcmc9PTAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKG9wdGlvbi5oYXNBcmc9PVJFUVVJUkVTX0FSRykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBubyBhcmd1bWVudCwgYnV0IG9uZSBpcyByZXF1aXJlZDogcmV0dXJuIHdpdGggZXJyb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBuZXh0IG9wdGlvbiBsZXR0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbj1udWxsOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5sZW5ndGgoKT09MCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjPWFyZy5jaGFyQXQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmc9YXJnLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKG9wdGlvbiE9bnVsbCAmJiBvcHRpb24ub3B0aW9uRm4hPW51bGwgJiYgb3B0aW9uLm9wdGlvbkZuLmhhbmRsZShvcHRpb24pPDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogdGhlIG9wdGlvbiBmdW5jdGlvbiB3YXMgY2FsbGVkIGFuZCByZXR1cm5lZCBhbiBlcnJvciAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogZ28gdG8gbmV4dCBhcmd2W10gKi8KKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIG1vdmUgYSBub24tb3B0aW9uIHVwIGluIGFyZ3ZbXSAqLworICAgICAgICAgICAgICAgIGFyZ3ZbcmVtYWluaW5nKytdPWFyZzsKKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlbWFpbmluZzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW50IG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBwYXJzZUFyZ3MoU3RyaW5nIGFyZ3ZbXSwgVU9wdGlvbiBvcHRpb25zW10pIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlQXJncyhhcmd2LCAwLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4KKyAgICAgKi8KKyAgICBwcml2YXRlIFVPcHRpb24oU3RyaW5nIGFMb25nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY2hhciBhU2hvcnROYW1lLAorICAgICAgICAgICAgICAgICAgICBpbnQgaGFzQXJndW1lbnQpIHsKKyAgICAgICAgbG9uZ05hbWUgPSBhTG9uZ05hbWU7CisgICAgICAgIHNob3J0TmFtZSA9IGFTaG9ydE5hbWU7CisgICAgICAgIGhhc0FyZyA9IGhhc0FyZ3VtZW50OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jb21wcmVzc2lvbi9Db21wcmVzc2lvblRhYmxlR2VuZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY29tcHJlc3Npb24vQ29tcHJlc3Npb25UYWJsZUdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0ZjJjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY29tcHJlc3Npb24vQ29tcHJlc3Npb25UYWJsZUdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY29tcHJlc3Npb24vQ29tcHJlc3Npb25UYWJsZUdlbmVyYXRvci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjI1ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wuY29tcHJlc3Npb247CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworCisvKioKKyAqIFV0aWxpdHkgY2xhc3MgdG8gZ2VuZXJhdGUgdGhlIHRhYmxlcyB1c2VkIGJ5IHRoZSBTQ1NVIGludGVyZmFjZSBhbmQKKyAqIHRoZSBVbmljb2RlQ29tcHJlc3NvciBjbGFzcy4KKyAqCisgKiBAYXV0aG9yIFN0ZXBoZW4gRi4gQm9vdGgKKyAqIEB2ZXJzaW9uIDEuMCAwOCBNYXIgOTkKKyAqLworY2xhc3MgQ29tcHJlc3Npb25UYWJsZUdlbmVyYXRvcgoreworICAgIC8vIGR1cGxpY2F0ZSBvZiBjb25zdGFudHMgaW4gU0NTVQorCisgICAgZmluYWwgc3RhdGljIGludCBMQVRJTklOREVYICAgICAgICAgICAgICAgICAgPSAweEY5OworICAgIGZpbmFsIHN0YXRpYyBpbnQgSVBBRVhURU5TSU9OSU5ERVggICAgICAgICAgID0gMHhGQTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IEdSRUVLSU5ERVggICAgICAgICAgICAgICAgICA9IDB4RkI7CisgICAgZmluYWwgc3RhdGljIGludCBBUk1FTklBTklOREVYICAgICAgICAgICAgICAgPSAweEZDOworICAgIGZpbmFsIHN0YXRpYyBpbnQgSElSQUdBTkFJTkRFWCAgICAgICAgICAgICAgID0gMHhGRDsKKyAgICBmaW5hbCBzdGF0aWMgaW50IEtBVEFLQU5BSU5ERVggICAgICAgICAgICAgICA9IDB4RkU7CisgICAgZmluYWwgc3RhdGljIGludCBIQUxGV0lEVEhLQVRBS0FOQUlOREVYICAgICAgPSAweEZGOworCisgICAgZmluYWwgc3RhdGljIGludCBTREVGSU5FWCAgICAgICAgICAgICAgICAgICAgPSAweDBCOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU1JFU0VSVkVEICAgICAgICAgICAgICAgICAgID0gMHgwQzsgIC8vIHJlc2VydmVkIHZhbHVlCisgICAgZmluYWwgc3RhdGljIGludCBTUVVPVEVVICAgICAgICAgICAgICAgICAgICAgPSAweDBFOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0NIQU5HRVUgICAgICAgICAgICAgICAgICAgID0gMHgwRjsKKworICAgIGZpbmFsIHN0YXRpYyBpbnQgU1FVT1RFMCAgICAgICAgICAgICAgICAgICAgID0gMHgwMTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTEgICAgICAgICAgICAgICAgICAgICA9IDB4MDI7CisgICAgZmluYWwgc3RhdGljIGludCBTUVVPVEUyICAgICAgICAgICAgICAgICAgICAgPSAweDAzOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU1FVT1RFMyAgICAgICAgICAgICAgICAgICAgID0gMHgwNDsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTQgICAgICAgICAgICAgICAgICAgICA9IDB4MDU7CisgICAgZmluYWwgc3RhdGljIGludCBTUVVPVEU1ICAgICAgICAgICAgICAgICAgICAgPSAweDA2OworICAgIGZpbmFsIHN0YXRpYyBpbnQgU1FVT1RFNiAgICAgICAgICAgICAgICAgICAgID0gMHgwNzsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTcgICAgICAgICAgICAgICAgICAgICA9IDB4MDg7CisKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNDSEFOR0UwICAgICAgICAgICAgICAgICAgICA9IDB4MTA7CisgICAgZmluYWwgc3RhdGljIGludCBTQ0hBTkdFMSAgICAgICAgICAgICAgICAgICAgPSAweDExOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0NIQU5HRTIgICAgICAgICAgICAgICAgICAgID0gMHgxMjsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNDSEFOR0UzICAgICAgICAgICAgICAgICAgICA9IDB4MTM7CisgICAgZmluYWwgc3RhdGljIGludCBTQ0hBTkdFNCAgICAgICAgICAgICAgICAgICAgPSAweDE0OworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0NIQU5HRTUgICAgICAgICAgICAgICAgICAgID0gMHgxNTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNDSEFOR0U2ICAgICAgICAgICAgICAgICAgICA9IDB4MTY7CisgICAgZmluYWwgc3RhdGljIGludCBTQ0hBTkdFNyAgICAgICAgICAgICAgICAgICAgPSAweDE3OworCisgICAgZmluYWwgc3RhdGljIGludCBTREVGSU5FMCAgICAgICAgICAgICAgICAgICAgPSAweDE4OworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTEgICAgICAgICAgICAgICAgICAgID0gMHgxOTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNERUZJTkUyICAgICAgICAgICAgICAgICAgICA9IDB4MUE7CisgICAgZmluYWwgc3RhdGljIGludCBTREVGSU5FMyAgICAgICAgICAgICAgICAgICAgPSAweDFCOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTQgICAgICAgICAgICAgICAgICAgID0gMHgxQzsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNERUZJTkU1ICAgICAgICAgICAgICAgICAgICA9IDB4MUQ7CisgICAgZmluYWwgc3RhdGljIGludCBTREVGSU5FNiAgICAgICAgICAgICAgICAgICAgPSAweDFFOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTcgICAgICAgICAgICAgICAgICAgID0gMHgxRjsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBVbmljb2RlIG1vZGUgdGFncworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBmaW5hbCBzdGF0aWMgaW50IFVDSEFOR0UwICAgICAgICAgICAgICAgICAgICA9IDB4RTA7CisgICAgZmluYWwgc3RhdGljIGludCBVQ0hBTkdFMSAgICAgICAgICAgICAgICAgICAgPSAweEUxOworICAgIGZpbmFsIHN0YXRpYyBpbnQgVUNIQU5HRTIgICAgICAgICAgICAgICAgICAgID0gMHhFMjsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVDSEFOR0UzICAgICAgICAgICAgICAgICAgICA9IDB4RTM7CisgICAgZmluYWwgc3RhdGljIGludCBVQ0hBTkdFNCAgICAgICAgICAgICAgICAgICAgPSAweEU0OworICAgIGZpbmFsIHN0YXRpYyBpbnQgVUNIQU5HRTUgICAgICAgICAgICAgICAgICAgID0gMHhFNTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVDSEFOR0U2ICAgICAgICAgICAgICAgICAgICA9IDB4RTY7CisgICAgZmluYWwgc3RhdGljIGludCBVQ0hBTkdFNyAgICAgICAgICAgICAgICAgICAgPSAweEU3OworCisgICAgZmluYWwgc3RhdGljIGludCBVREVGSU5FMCAgICAgICAgICAgICAgICAgICAgPSAweEU4OworICAgIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTEgICAgICAgICAgICAgICAgICAgID0gMHhFOTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkUyICAgICAgICAgICAgICAgICAgICA9IDB4RUE7CisgICAgZmluYWwgc3RhdGljIGludCBVREVGSU5FMyAgICAgICAgICAgICAgICAgICAgPSAweEVCOworICAgIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTQgICAgICAgICAgICAgICAgICAgID0gMHhFQzsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkU1ICAgICAgICAgICAgICAgICAgICA9IDB4RUQ7CisgICAgZmluYWwgc3RhdGljIGludCBVREVGSU5FNiAgICAgICAgICAgICAgICAgICAgPSAweEVFOworICAgIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTcgICAgICAgICAgICAgICAgICAgID0gMHhFRjsKKworICAgIGZpbmFsIHN0YXRpYyBpbnQgVVFVT1RFVSAgICAgICAgICAgICAgICAgICAgID0gMHhGMDsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkVYICAgICAgICAgICAgICAgICAgICA9IDB4RjE7CisgICAgZmluYWwgc3RhdGljIGludCBVUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgPSAweEYyOyAgLy8gcmVzZXJ2ZWQgdmFsdWUKKworICAgIGZpbmFsIHN0YXRpYyBpbnQgQkxPQ0tTSVpFID0gMHhGRjsKKyAgICAKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZSB0aGUgdGFibGUgdXNlZCBhcyBzT2Zmc2V0VGFibGUgaW4gU0NTVS4KKyAgICAgKiBUaGlzIHRhYmxlIGNvbnRhaW5zIHByZWZvcm1lZCBpbmRpY2VzIHNvIHdlIGNhbiBkbyBhcnJheSBsb29rdXBzIAorICAgICAqIGluc3RlYWQgb2YgY2FsY3VsYXRpb25zIGZvciBzcGVlZCBkdXJpbmcgZGVjb21wcmVzc2lvbi4KKyAgICAgKi8KKyAgICBzdGF0aWMgdm9pZCBwcmludE9mZnNldFRhYmxlKCkKKyAgICB7CisgICAgICAgIGludCAgICAgaSAgICAgICAgICAgPSAwOworCWludCBbXQlvZmZzZXRUYWJsZSA9IG5ldyBpbnQgWyBCTE9DS1NJWkUgKyAxIF07CisKKyAgICAgICAgLy8gMHgwMCBpcyByZXNlcnZlZAorCisgICAgICAgIC8vIGhhbGYgYmxvY2tzIGZyb20gVSswMDgwIHRvIFUrMzM4MAorICAgICAgICBmb3IoIGkgPSAweDAxOyBpIDwgMHg2ODsgaSsrICkKKyAgICAgICAgICAgIG9mZnNldFRhYmxlW2ldID0gaSAqIDB4ODA7CisJCisgICAgICAgIC8vIGhhbGYgYmxvY2tzIGZyb20gVStFMDAwIHRvIFUrRkY4MAorICAgICAgICBmb3IoIGkgPSAweDY4OyBpIDwgMHhBODsgaSsrICkKKyAgICAgICAgICAgIG9mZnNldFRhYmxlW2ldID0gKGkgKiAweDgwKSArIDB4QUMwMDsKKwkKKyAgICAgICAgLy8gMHhBOC4uMHhGOCBpcyByZXNlcnZlZAorIAorICAgICAgICBvZmZzZXRUYWJsZVsgTEFUSU5JTkRFWCBdID0gMHgwMEMwOworICAgICAgICBvZmZzZXRUYWJsZVsgSVBBRVhURU5TSU9OSU5ERVggXSA9IDB4MDI1MDsKKyAgICAgICAgb2Zmc2V0VGFibGVbIEdSRUVLSU5ERVggXSA9IDB4MDM3MDsKKyAgICAgICAgb2Zmc2V0VGFibGVbIEFSTUVOSUFOSU5ERVggXSA9IDB4MDUzMDsKKyAgICAgICAgb2Zmc2V0VGFibGVbIEhJUkFHQU5BSU5ERVggXSA9IDB4MzA0MDsKKyAgICAgICAgb2Zmc2V0VGFibGVbIEtBVEFLQU5BSU5ERVggXSA9IDB4MzBBMDsKKyAgICAgICAgb2Zmc2V0VGFibGVbIEhBTEZXSURUSEtBVEFLQU5BSU5ERVggXSA9IDB4RkY2MDsKKworICAgICAgICAvLyBkdW1wIHRoZSBnZW5lcmF0ZWQgdGFibGUKKwlTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRpYyBpbnQgW10gc09mZnNldFRhYmxlID0geyIpOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBvZmZzZXRUYWJsZS5sZW5ndGggLSAxOyBpKyspCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKG9mZnNldFRhYmxlW2ldKQorCQkJICAgICArICIsICIpOworICAgICAgICBmb3IoaSA9IG9mZnNldFRhYmxlLmxlbmd0aCAtIDE7IGkgPCBvZmZzZXRUYWJsZS5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIjB4IiArIEludGVnZXIudG9IZXhTdHJpbmcob2Zmc2V0VGFibGVbaV0pKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigifTsiKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2VuZXJhdGUgdGhlIHRhYmxlIHVzZWQgYXMgc1NpbmdsZVRhZ1RhYmxlIGluIFVuaWNvZGVDb21wcmVzc29yLgorICAgICAqIFRoaXMgdGFibGUgY29udGFpbnMgYm9vbGVhbiB2YWx1ZXMgaW5kaWNhdGluZyBpZiBhIGJ5dGUgaXMgYQorICAgICAqIHNpbmdsZS1ieXRlIG1vZGUgdGFnLgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHByaW50U2luZ2xlVGFnVGFibGUoKQorICAgIHsKKyAgICAgICAgaW50ICAgICAgICBpICAgICAgICAgICAgICA9IDA7CisJYm9vbGVhbiBbXSBzaW5nbGVUYWdUYWJsZSA9IG5ldyBib29sZWFuICBbIEJMT0NLU0laRSArIDEgXTsKKworICAgICAgICBmb3IoIGkgPSAweDAwOyBpIDw9IEJMT0NLU0laRTsgaSsrICkgeworICAgICAgICAgICAgc3dpdGNoKCBpICkgeworCQkKKwkgICAgY2FzZSBTUVVPVEVVOiAgY2FzZSBTQ0hBTkdFVTogCisJICAgIGNhc2UgU0RFRklORVg6IGNhc2UgU1JFU0VSVkVEOgorCSAgICBjYXNlIFNRVU9URTA6ICBjYXNlIFNRVU9URTE6ICAKKwkgICAgY2FzZSBTUVVPVEUyOiAgY2FzZSBTUVVPVEUzOgorCSAgICBjYXNlIFNRVU9URTQ6ICBjYXNlIFNRVU9URTU6ICAKKwkgICAgY2FzZSBTUVVPVEU2OiAgY2FzZSBTUVVPVEU3OgorCSAgICBjYXNlIFNDSEFOR0UwOiBjYXNlIFNDSEFOR0UxOiAKKwkgICAgY2FzZSBTQ0hBTkdFMjogY2FzZSBTQ0hBTkdFMzoKKwkgICAgY2FzZSBTQ0hBTkdFNDogY2FzZSBTQ0hBTkdFNTogCisJICAgIGNhc2UgU0NIQU5HRTY6IGNhc2UgU0NIQU5HRTc6CisJICAgIGNhc2UgU0RFRklORTA6IGNhc2UgU0RFRklORTE6IAorCSAgICBjYXNlIFNERUZJTkUyOiBjYXNlIFNERUZJTkUzOgorCSAgICBjYXNlIFNERUZJTkU0OiBjYXNlIFNERUZJTkU1OiAKKwkgICAgY2FzZSBTREVGSU5FNjogY2FzZSBTREVGSU5FNzoKKwkJc2luZ2xlVGFnVGFibGVbaV0gPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworCQkKKwkgICAgZGVmYXVsdDoKKwkJc2luZ2xlVGFnVGFibGVbaV0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCQorICAgICAgICAvLyBkdW1wIHRoZSBnZW5lcmF0ZWQgdGFibGUKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcml2YXRlIHN0YXRpYyBib29sZWFuIFtdIHNTaW5nbGVUYWdUYWJsZSA9IHsiKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgc2luZ2xlVGFnVGFibGUubGVuZ3RoIC0gMTsgaSsrKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChzaW5nbGVUYWdUYWJsZVtpXSArICIsICIpOworICAgICAgICBmb3IoaSA9IHNpbmdsZVRhZ1RhYmxlLmxlbmd0aCAtIDE7IGkgPCBzaW5nbGVUYWdUYWJsZS5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoc2luZ2xlVGFnVGFibGVbaV0pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ9OyIpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZSB0aGUgdGFibGUgdXNlZCBhcyBzVW5pY29kZVRhZ1RhYmxlIGluIAorICAgICAqIFRoaXMgdGFibGUgY29udGFpbnMgYm9vbGVhbiB2YWx1ZXMgaW5kaWNhdGluZyBpZiBhIGJ5dGUgaXMgYQorICAgICAqIHVuaWNvZGUgbW9kZSB0YWcuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgcHJpbnRVbmljb2RlVGFnVGFibGUoKQorICAgIHsKKyAgICAgICAgaW50ICAgICAgICBpICAgICAgICAgICAgICAgPSAwOworCWJvb2xlYW4gW10gdW5pY29kZVRhZ1RhYmxlID0gbmV3IGJvb2xlYW4gIFsgQkxPQ0tTSVpFICsgMSBdOworCisgICAgICAgIGZvciggaSA9IDB4MDA7IGkgPD0gQkxPQ0tTSVpFOyBpKysgKSB7CisgICAgICAgICAgICBzd2l0Y2goIGkgKSB7CisJICAgIGNhc2UgVVFVT1RFVTogIGNhc2UgVURFRklORVg6IAorCSAgICBjYXNlIFVSRVNFUlZFRDoKKwkgICAgY2FzZSBVQ0hBTkdFMDogY2FzZSBVQ0hBTkdFMTogCisJICAgIGNhc2UgVUNIQU5HRTI6IGNhc2UgVUNIQU5HRTM6CisJICAgIGNhc2UgVUNIQU5HRTQ6IGNhc2UgVUNIQU5HRTU6IAorCSAgICBjYXNlIFVDSEFOR0U2OiBjYXNlIFVDSEFOR0U3OgorCSAgICBjYXNlIFVERUZJTkUwOiBjYXNlIFVERUZJTkUxOiAKKwkgICAgY2FzZSBVREVGSU5FMjogY2FzZSBVREVGSU5FMzoKKwkgICAgY2FzZSBVREVGSU5FNDogY2FzZSBVREVGSU5FNTogCisJICAgIGNhc2UgVURFRklORTY6IGNhc2UgVURFRklORTc6CisJCXVuaWNvZGVUYWdUYWJsZVtpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJCQorCSAgICBkZWZhdWx0OgorCQl1bmljb2RlVGFnVGFibGVbaV0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCQorICAgICAgICAvLyBkdW1wIHRoZSBnZW5lcmF0ZWQgdGFibGUKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcml2YXRlIHN0YXRpYyBib29sZWFuIFtdIHNVbmljb2RlVGFnVGFibGUgPSB7Iik7CisgICAgICAgIGZvcihpID0gMDsgaSA8IHVuaWNvZGVUYWdUYWJsZS5sZW5ndGggLSAxOyBpKyspCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHVuaWNvZGVUYWdUYWJsZVtpXSArICIsICIpOworICAgICAgICBmb3IoaSA9IHVuaWNvZGVUYWdUYWJsZS5sZW5ndGggLSAxOyBpIDwgdW5pY29kZVRhZ1RhYmxlLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCh1bmljb2RlVGFnVGFibGVbaV0pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ9OyIpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KQorICAgIHsKKyAgICAgICAgcHJpbnRPZmZzZXRUYWJsZSgpOworICAgICAgICBwcmludFNpbmdsZVRhZ1RhYmxlKCk7CisgICAgICAgIHByaW50VW5pY29kZVRhZ1RhYmxlKCk7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jb21wcmVzc2lvbi9wYWNrYWdlLmh0bWwgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY29tcHJlc3Npb24vcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5Zjk2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY29tcHJlc3Npb24vcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY29tcHJlc3Npb24vcGFja2FnZS5odG1sLHYgJAorICAkUmV2aXNpb246IDEuMSAkCisgICREYXRlOiAyMDAwLzAzLzE1IDIxOjM1OjUyICQKKy0tPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiPgorVG9vbCB1c2VkIHRvIHJlYnVpbGQgdGFibGVzIHVzZWQgYnkgdGhlIFVuaWNvZGUgY29tcHJlc3Npb24gY2xhc3Nlcy4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvZG9jcy9DaGVja1RhZ3MuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9kb2NzL0NoZWNrVGFncy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YjQ5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvZG9jcy9DaGVja1RhZ3MuamF2YQpAQCAtMCwwICsxLDM1NiBAQAorLyoqCisgKiBUaGlzIGlzIGEgdG9vbCB0byBjaGVjayB0aGUgdGFncyBvbiBJQ1U0SiBmaWxlcy4gIEluIHBhcnRpY3VsYXIsIHdlJ3JlIGxvb2tpbmcgZm9yOgorICoKKyAqIC0gbWV0aG9kcyB0aGF0IGhhdmUgbm8gdGFncworICogLSBjdXN0b20gdGFnczogQGRyYWZ0LCBAc3RhYmxlLCBAaW50ZXJuYWw/CisgKiAtIHN0YW5kYXJkIHRhZ3M6IEBzaW5jZSwgQGRlcHJlY2F0ZWQKKyAqCisgKiBTeW50YXggb2YgdGFnczoKKyAqIEBkcmFmdCBJQ1UgWC5YLlgKKyAqIEBzdGFibGUgSUNVIFguWC5YCisgKiBAaW50ZXJuYWwKKyAqIEBzaW5jZSAgKGRvbid0IHVzZSkKKyAqIEBkZXByZWNhdGVkIHRvIGJlIHJlbW92ZWQgaW4gSUNVIFguWC4gW1VzZSAuLi5dCisgKgorICogZmxhZ3MgbmFtZXMgb2YgY2xhc3NlcyBhbmQgdGhlaXIgbWVtYmVycyB0aGF0IGhhdmUgbm8gdGFncyBvciBpbmNvcnJlY3Qgc3ludGF4LgorICoKKyAqIFJlcXVpcmVzIEpESyAxLjQgb3IgbGF0ZXIKKyAqIAorICogUnVuIGZyb20gZGlyZWN0b3J5IGNvbnRhaW5pbmcgQ2hlY2tUYWdzLmNsYXNzIGFzIGZvbGxvd3M6CisgKiBqYXZhZG9jIC1jbGFzc3BhdGggJHtKQVZBX0hPTUV9L2xpYi90b29scy5qYXIgLWRvY2xldCBDaGVja1RhZ3MgLXNvdXJjZXBhdGggJHtJQ1U0Sl9zcmN9IFtwYWNrYWdlbmFtZXNdCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5kb2NzOworCitpbXBvcnQgY29tLnN1bi5qYXZhZG9jLio7CisKK3B1YmxpYyBjbGFzcyBDaGVja1RhZ3MgeworICAgIFJvb3REb2Mgcm9vdDsKKyAgICBib29sZWFuIGxvZzsKKyAgICBib29sZWFuIGJyaWVmOworICAgIERvY1N0YWNrIHN0YWNrID0gbmV3IERvY1N0YWNrKCk7CisKKyAgICBjbGFzcyBEb2NOb2RlIHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgaGVhZGVyOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gcHJpbnRlZDsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIHJlcG9ydEVycm9yOworICAgICAgICBwcml2YXRlIGludCBlcnJvckNvdW50OworCisgICAgICAgIHB1YmxpYyB2b2lkIHJlc2V0KFN0cmluZyBoZWFkZXIsIGJvb2xlYW4gcmVwb3J0RXJyb3IpIHsKKyAgICAgICAgICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyOworICAgICAgICAgICAgdGhpcy5wcmludGVkID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLmVycm9yQ291bnQgPSAwOworICAgICAgICAgICAgdGhpcy5yZXBvcnRFcnJvciA9IHJlcG9ydEVycm9yOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gaGVhZGVyICsgCisgICAgICAgICAgICAgICAgIiBwcmludGVkOiAiICsgcHJpbnRlZCArCisgICAgICAgICAgICAgICAgIiByZXBvcnRFcnJvcjogIiArIHJlcG9ydEVycm9yICsKKyAgICAgICAgICAgICAgICAiIGVycm9yQ291bnQ6ICIgKyBlcnJvckNvdW50OworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgRG9jU3RhY2sgeworICAgICAgICBwcml2YXRlIERvY05vZGVbXSBzdGFjazsKKyAgICAgICAgcHJpdmF0ZSBpbnQgaW5kZXg7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBuZXdsaW5lOworCisgICAgICAgIHB1YmxpYyB2b2lkIHB1c2goU3RyaW5nIGhlYWRlciwgYm9vbGVhbiByZXBvcnRFcnJvcikgeworICAgICAgICAgICAgaWYgKHN0YWNrID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzdGFjayA9IG5ldyBEb2NOb2RlWzVdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gc3RhY2subGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIERvY05vZGVbXSB0ZW1wID0gbmV3IERvY05vZGVbc3RhY2subGVuZ3RoICogMl07CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3RhY2ssIDAsIHRlbXAsIDAsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sgPSB0ZW1wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGFja1tpbmRleF0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN0YWNrW2luZGV4XSA9IG5ldyBEb2NOb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAgU3lzdGVtLm91dC5wcmludGxuKCJyZXNldCBbIiArIGluZGV4ICsgIl0gaGVhZGVyOiAiICsgaGVhZGVyICsgIiByZXBvcnQ6ICIgKyByZXBvcnRFcnJvcik7CisgICAgICAgICAgICBzdGFja1tpbmRleCsrXS5yZXNldChoZWFkZXIsIHJlcG9ydEVycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHBvcCgpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0taW5kZXg7CisKKyAgICAgICAgICAgIGludCBlYyA9IHN0YWNrW2luZGV4XS5lcnJvckNvdW50OyAvLyBpbmRleCBhbHJlYWR5IGRlY3JlbWVudGVkCisgICAgICAgICAgICBpZiAoZWMgPiAwIHx8IGluZGV4ID09IDApIHsgLy8gYWx3YXlzIHJlcG9ydCBmb3Igb3V0ZXJtb3N0IGVsZW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2tbaW5kZXhdLnJlcG9ydEVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiKCIgKyBlYyArIChlYyA9PSAxID8gIiBlcnJvciIgOiAiIGVycm9ycyIpICsgIikiLCBmYWxzZSwgdHJ1ZSwgaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSB0byBwYXJlbnQKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrW2luZGV4LTFdLmVycm9yQ291bnQgKz0gZWM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID09IDApIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsgLy8gYWx3YXlzIHNpbmNlIHdlIGFsd2F5cyByZXBvcnQgbnVtYmVyIG9mIGVycm9ycworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb3V0cHV0KFN0cmluZyBtc2csIGJvb2xlYW4gZXJyb3IsIGJvb2xlYW4gbmV3bGluZSkgeworICAgICAgICAgICAgb3V0cHV0KG1zZywgZXJyb3IsIG5ld2xpbmUsIGluZGV4LTEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBvdXRwdXQoU3RyaW5nIG1zZywgYm9vbGVhbiBlcnJvciwgYm9vbGVhbiBuZXdsaW5lLCBpbnQgaXgpIHsKKyAgICAgICAgICAgIERvY05vZGUgbGFzdCA9IHN0YWNrW2l4XTsKKyAgICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgICAgIGxhc3QuZXJyb3JDb3VudCArPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sZWFuIHNob3cgPSAhYnJpZWYgfHwgbGFzdC5yZXBvcnRFcnJvcjsKKyAgICAgICAgICAgIGJvb2xlYW4gbm9tc2cgPSBzaG93ICYmIGJyaWVmICYmIGVycm9yOworICAgICAgICAgICAgLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiAiICsgbGFzdCArICIgZXJyb3I6ICIgKyBlcnJvciArICIgc2hvdzogIiArIHNob3cgKyAiIG5vbXNnOiAiICsgbm9tc2cpOworCisgICAgICAgICAgICBpZiAoc2hvdykgeworICAgICAgICAgICAgICAgIGlmIChicmllZiAmJiBlcnJvcikgeworICAgICAgICAgICAgICAgICAgICBtc2cgPSBudWxsOyAvLyBudWtlIGVycm9yIG1lc3NhZ2VzIGlmIHdlJ3JlIGJyaWVmLCBqdXN0IHJlcG9ydCBoZWFkZXJzIGFuZCB0b3RhbHMKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gaXg7KSB7CisgICAgICAgICAgICAgICAgICAgIERvY05vZGUgbiA9IHN0YWNrW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAobi5wcmludGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNnICE9IG51bGwgfHwgIWxhc3QucHJpbnRlZCkgeyAvLyBzaW5jZSBpbmRleCA+IDAgbGFzdCBpcyBub3QgbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5ld2xpbmUgJiYgaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld2xpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQobi5oZWFkZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgbi5wcmludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3bGluZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtc2cgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCAmJiB0aGlzLm5ld2xpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiKioqICIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQobXNnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMubmV3bGluZSA9IG5ld2xpbmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc3RhcnQoUm9vdERvYyByb290KSB7CisgICAgICAgIHJldHVybiBuZXcgQ2hlY2tUYWdzKHJvb3QpLnJ1bigpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgaW50IG9wdGlvbkxlbmd0aChTdHJpbmcgb3B0aW9uKSB7CisgICAgICAgIGlmIChvcHRpb24uZXF1YWxzKCItbG9nIikpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5lcXVhbHMoIi1icmllZiIpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBDaGVja1RhZ3MoUm9vdERvYyByb290KSB7CisgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7CisKKyAgICAgICAgU3RyaW5nW11bXSBvcHRpb25zID0gcm9vdC5vcHRpb25zKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIG9wdCA9IG9wdGlvbnNbaV1bMF07CisgICAgICAgICAgICBpZiAob3B0LmVxdWFscygiLWxvZyIpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5sb2cgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItYnJpZWYiKSkgeworICAgICAgICAgICAgICAgIHRoaXMuYnJpZWYgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbGVhbiBydW4oKSB7CisgICAgICAgIGRvRG9jcyhyb290LmNsYXNzZXMoKSwgIlBhY2thZ2UiLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSB0YWdLaW5kcyA9IHsKKyAgICAgICAgIkBpbnRlcm5hbCIsICJAZHJhZnQiLCAiQHN0YWJsZSIsICJAc2luY2UiLCAiQGRlcHJlY2F0ZWQiLCAiQGF1dGhvciIsICJAc2VlIiwgIkB2ZXJzaW9uIiwKKyAgICAgICAgIkBwYXJhbSIsICJAcmV0dXJuIiwgIkB0aHJvd3MiLCAiQG9ic29sZXRlIiwgIkBleGNlcHRpb24iLCAiQHNlcmlhbCIKKyAgICB9OworCisgICAgc3RhdGljIGZpbmFsIGludCBVTktOT1dOID0gLTE7CisgICAgc3RhdGljIGZpbmFsIGludCBJTlRFUk5BTCA9IDA7CisgICAgc3RhdGljIGZpbmFsIGludCBEUkFGVCA9IDE7CisgICAgc3RhdGljIGZpbmFsIGludCBTVEFCTEUgPSAyOworICAgIHN0YXRpYyBmaW5hbCBpbnQgU0lOQ0UgPSAzOworICAgIHN0YXRpYyBmaW5hbCBpbnQgREVQUkVDQVRFRCA9IDQ7CisgICAgc3RhdGljIGZpbmFsIGludCBBVVRIT1IgPSA1OworICAgIHN0YXRpYyBmaW5hbCBpbnQgU0VFID0gNjsKKyAgICBzdGF0aWMgZmluYWwgaW50IFZFUlNJT04gPSA3OworICAgIHN0YXRpYyBmaW5hbCBpbnQgUEFSQU0gPSA4OworICAgIHN0YXRpYyBmaW5hbCBpbnQgUkVUVVJOID0gOTsKKyAgICBzdGF0aWMgZmluYWwgaW50IFRIUk9XUyA9IDEwOworICAgIHN0YXRpYyBmaW5hbCBpbnQgT0JTT0xFVEUgPSAxMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IEVYQ0VQVElPTiA9IDEyOworICAgIHN0YXRpYyBmaW5hbCBpbnQgU0VSSUFMID0gMTM7CisKKyAgICBzdGF0aWMgaW50IHRhZ0tpbmRJbmRleChTdHJpbmcga2luZCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhZ0tpbmRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoa2luZC5lcXVhbHModGFnS2luZHNbaV0pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFVOS05PV047CisgICAgfQorCisgICAgYm9vbGVhbiBuZXdsaW5lID0gZmFsc2U7CisKKyAgICB2b2lkIG91dHB1dChTdHJpbmcgbXNnLCBib29sZWFuIGVycm9yLCBib29sZWFuIG5ld2xpbmUpIHsKKyAgICAgICAgc3RhY2sub3V0cHV0KG1zZywgZXJyb3IsIG5ld2xpbmUpOworICAgIH0KKworICAgIHZvaWQgbG9nKCkgeworICAgICAgICBvdXRwdXQobnVsbCwgZmFsc2UsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGxvZ2xuKCkgeworICAgICAgICBvdXRwdXQobnVsbCwgZmFsc2UsIHRydWUpOworICAgIH0KKworICAgIHZvaWQgbG9nKFN0cmluZyBtc2cpIHsKKyAgICAgICAgb3V0cHV0KG1zZywgZmFsc2UsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGxvZ2xuKFN0cmluZyBtc2cpIHsKKyAgICAgICAgb3V0cHV0KG1zZywgZmFsc2UsIHRydWUpOworICAgIH0KKworICAgIHZvaWQgZXJyKFN0cmluZyBtc2cpIHsKKyAgICAgICAgb3V0cHV0KG1zZywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZXJybG4oU3RyaW5nIG1zZykgeworICAgICAgICBvdXRwdXQobXNnLCB0cnVlLCB0cnVlKTsKKyAgICB9CisKKyAgICB2b2lkIHRhZ0VycihUYWcgdGFnKSB7CisgICAgICAgIC8vIFRhZy5wb3NpdGlvbigpIHJlcXVpcmVzIEpESyAxLjQsIGJ1aWxkLnhtbCB0ZXN0cyBmb3IgdGhpcworICAgICAgICBlcnJsbih0YWcudG9TdHJpbmcoKSArICIgWyIgKyB0YWcucG9zaXRpb24oKSArICJdIik7CisgICAgfQorCisgICAgdm9pZCBkb0RvY3MoUHJvZ3JhbUVsZW1lbnREb2NbXSBkb2NzLCBTdHJpbmcgaGVhZGVyLCBib29sZWFuIHJlcG9ydEVycm9yKSB7CisgICAgICAgIGlmIChkb2NzICE9IG51bGwgJiYgZG9jcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBzdGFjay5wdXNoKGhlYWRlciwgcmVwb3J0RXJyb3IpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkb2NzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgZG9Eb2MoZG9jc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGFjay5wb3AoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZG9Eb2MoUHJvZ3JhbUVsZW1lbnREb2MgZG9jKSB7CisgICAgICAgIGlmIChkb2MgIT0gbnVsbCAmJiAoZG9jLmlzUHVibGljKCkgfHwgZG9jLmlzUHJvdGVjdGVkKCkpCisgICAgICAgICAgICAmJiAhKGRvYyBpbnN0YW5jZW9mIENvbnN0cnVjdG9yRG9jICYmICgoQ29uc3RydWN0b3JEb2MpZG9jKS5pc1N5bnRoZXRpYygpKSkgeworCisgICAgICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5LCBpbiBKREsgMS40LjEgTWVtYmVyRG9jLmlzU3ludGhldGljIGlzIG5vdCBwcm9wZXJseSBpbXBsZW1lbnRlZCBmb3IgCisgICAgICAgICAgICAvLyBzeW50aGV0aWMgY29uc3RydWN0b3JzLiAgU28geW91J2xsIGhhdmUgdG8gbGl2ZSB3aXRoIHNwdXJpb3VzIGVycm9ycyBvciAnaW1wbGVtZW50JworICAgICAgICAgICAgLy8gdGhlIHN5bnRoZXRpYyBjb25zdHJ1Y3RvcnMuLi4KKworICAgICAgICAgICAgYm9vbGVhbiBpc0NsYXNzID0gZG9jLmlzQ2xhc3MoKSB8fCBkb2MuaXNJbnRlcmZhY2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBoZWFkZXIgPSAiLS0tICIgKyAoaXNDbGFzcyA/IGRvYy5xdWFsaWZpZWROYW1lKCkgOiBkb2MubmFtZSgpKTsKKyAgICAgICAgICAgIGlmIChkb2MgaW5zdGFuY2VvZiBFeGVjdXRhYmxlTWVtYmVyRG9jKSB7CisgICAgICAgICAgICAgICAgaGVhZGVyICs9ICgoRXhlY3V0YWJsZU1lbWJlckRvYylkb2MpLmZsYXRTaWduYXR1cmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhlYWRlciArPSAiIC0tLSI7CisgICAgICAgICAgICBzdGFjay5wdXNoKGhlYWRlciwgaXNDbGFzcyk7CisgICAgICAgICAgICBpZiAobG9nKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvVGFncyhkb2MpOworICAgICAgICAgICAgaWYgKGlzQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICBDbGFzc0RvYyBjZG9jID0gKENsYXNzRG9jKWRvYzsKKyAgICAgICAgICAgICAgICBkb0RvY3MoY2RvYy5maWVsZHMoKSwgIkZpZWxkcyIsICFicmllZik7CisgICAgICAgICAgICAgICAgZG9Eb2NzKGNkb2MuY29uc3RydWN0b3JzKCksICJDb25zdHJ1Y3RvcnMiLCAhYnJpZWYpOworICAgICAgICAgICAgICAgIGRvRG9jcyhjZG9jLm1ldGhvZHMoKSwgIk1ldGhvZHMiLCAhYnJpZWYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGRvVGFncyhQcm9ncmFtRWxlbWVudERvYyBkb2MpIHsKKyAgICAgICAgVGFnW10gdGFncyA9IGRvYy50YWdzKCk7CisgICAgICAgIGJvb2xlYW4gZm91bmRSZXF1aXJlZFRhZyA9IGZhbHNlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFRhZyB0YWcgPSB0YWdzW2ldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIGtpbmQgPSB0YWcua2luZCgpOworICAgICAgICAgICAgaW50IGl4ID0gdGFnS2luZEluZGV4KGtpbmQpOworCisgICAgICAgICAgICBzd2l0Y2ggKGl4KSB7CisgICAgICAgICAgICBjYXNlIFVOS05PV046CisgICAgICAgICAgICAgICAgZXJybG4oInVua25vd24ga2luZDogIiArIGtpbmQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBJTlRFUk5BTDoKKyAgICAgICAgICAgICAgICBmb3VuZFJlcXVpcmVkVGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBEUkFGVDoKKyAgICAgICAgICAgICAgaWYgKHRhZy50ZXh0KCkuaW5kZXhPZigiSUNVIDIuMCIpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm91bmRSZXF1aXJlZFRhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgdGFnRXJyKHRhZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICAgICAgICAgIGNhc2UgREVQUkVDQVRFRDoKKyAgICAgICAgICAgIGNhc2UgT0JTT0xFVEU6CisgICAgICAgICAgICAgICAgaWYgKHRhZy50ZXh0KCkuaW5kZXhPZigiSUNVIikgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0YWdFcnIodGFnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm91bmRSZXF1aXJlZFRhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU1RBQkxFOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSB0YWcudGV4dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSAhPSAwICYmIHRleHQuaW5kZXhPZigiSUNVIikgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFnRXJyKHRhZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm91bmRSZXF1aXJlZFRhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFNJTkNFOgorICAgICAgICAgICAgICAgIHRhZ0Vycih0YWcpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVYQ0VQVElPTjoKKyAgICAgICAgICAgICAgICBsb2dsbigiWW91IHJlYWxseSBvdWdodCB0byB1c2UgQHRocm93cywgeW91IGtub3cuLi4gOi0pIik7CisKKyAgICAgICAgICAgIGNhc2UgQVVUSE9SOgorICAgICAgICAgICAgY2FzZSBTRUU6CisgICAgICAgICAgICBjYXNlIFBBUkFNOgorICAgICAgICAgICAgY2FzZSBSRVRVUk46CisgICAgICAgICAgICBjYXNlIFRIUk9XUzoKKyAgICAgICAgICAgIGNhc2UgU0VSSUFMOgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFZFUlNJT046CisgICAgICAgICAgICAgICAgdGFnRXJyKHRhZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZXJybG4oInVua25vd24gaW5kZXg6ICIgKyBpeCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZFJlcXVpcmVkVGFnKSB7CisgICAgICAgICAgICBlcnJsbigibWlzc2luZyByZXF1aXJlZCB0YWcgWyIgKyBkb2MucG9zaXRpb24oKSArICJdIik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvZG9jcy9JQ1VUYWdsZXQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9kb2NzL0lDVVRhZ2xldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNTI3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvZG9jcy9JQ1VUYWdsZXQuamF2YQpAQCAtMCwwICsxLDE5NSBAQAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5kb2NzOworCitpbXBvcnQgY29tLnN1bi5qYXZhZG9jLio7CitpbXBvcnQgY29tLnN1bi50b29scy5kb2NsZXRzLio7CisKK2ltcG9ydCBqYXZhLnRleHQuQnJlYWtJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJQ1VUYWdsZXQgaW1wbGVtZW50cyBUYWdsZXQgeworICAgIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgbmFtZTsKKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IG1hc2s7CisKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVNLX0ZJRUxEID0gMTsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVNLX0NPTlNUUlVDVE9SID0gMjsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVNLX01FVEhPRCA9IDQ7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFTS19PVkVSVklFVyA9IDg7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFTS19QQUNLQUdFID0gMTY7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFTS19UWVBFID0gMzI7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFTS19JTkxJTkUgPSA2NDsKKworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BU0tfREVGQVVMVCA9IDB4MDAzZjsgLy8gbm8gaW5saW5lCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFTS19WQUxJRCA9IDB4MDA3ZjsgLy8gaW5jbHVkZXMgaW5saW5lCisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXIoTWFwIHRhZ2xldHMpIHsKKyAgICAgICAgSUNVSW50ZXJuYWxUYWdsZXQucmVnaXN0ZXIodGFnbGV0cyk7CisgICAgICAgIElDVURyYWZ0VGFnbGV0LnJlZ2lzdGVyKHRhZ2xldHMpOworICAgICAgICBJQ1VTdGFibGVUYWdsZXQucmVnaXN0ZXIodGFnbGV0cyk7CisgICAgICAgIElDVURlcHJlY2F0ZWRUYWdsZXQucmVnaXN0ZXIodGFnbGV0cyk7CisgICAgICAgIElDVU9ic29sZXRlVGFnbGV0LnJlZ2lzdGVyKHRhZ2xldHMpOworICAgIH0KKworICAgIHByb3RlY3RlZCBJQ1VUYWdsZXQoU3RyaW5nIG5hbWUsIGludCBtYXNrKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMubWFzayA9IG1hc2sgJiBNQVNLX1ZBTElEOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGluRmllbGQoKSB7CisgICAgICAgIHJldHVybiAobWFzayAmIE1BU0tfRklFTEQpICE9IDA7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaW5Db25zdHJ1Y3RvcigpIHsKKyAgICAgICAgcmV0dXJuIChtYXNrICYgTUFTS19GSUVMRCkgIT0gMDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpbk1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIChtYXNrICYgTUFTS19GSUVMRCkgIT0gMDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpbk92ZXJ2aWV3KCkgeworICAgICAgICByZXR1cm4gKG1hc2sgJiBNQVNLX0ZJRUxEKSAhPSAwOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGluUGFja2FnZSgpIHsKKyAgICAgICAgcmV0dXJuIChtYXNrICYgTUFTS19GSUVMRCkgIT0gMDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpblR5cGUoKSB7CisgICAgICAgIHJldHVybiAobWFzayAmIE1BU0tfRklFTEQpICE9IDA7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNJbmxpbmVUYWcoKSB7CisgICAgICAgIHJldHVybiAobWFzayAmIE1BU0tfRklFTEQpICE9IDA7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKFRhZyB0YWcpIHsKKyAgICAgICAgcmV0dXJuIHRhZy50ZXh0KCk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZyhUYWdbXSB0YWdzKSB7CisgICAgICAgIGlmICh0YWdzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmICh0YWdzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbXNnID0gIlNob3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4gb25lIElDVSB0YWcgcGVyIGVsZW1lbnQ6XG4iOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIiAgWyIgKyBpICsgIl0gIiArIHRhZ3NbaV0gKyAiXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihtc2cpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9TdHJpbmcodGFnc1swXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVFVTID0gIjxkdD48Yj5TdGF0dXM6PC9iPjwvZHQ+IjsKKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSUNVSW50ZXJuYWxUYWdsZXQgZXh0ZW5kcyBJQ1VUYWdsZXQgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJpbnRlcm5hbCI7CisKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyKE1hcCB0YWdsZXRzKSB7CisgICAgICAgICAgICB0YWdsZXRzLnB1dChOQU1FLCBuZXcgSUNVSW50ZXJuYWxUYWdsZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIElDVUludGVybmFsVGFnbGV0KCkgeworICAgICAgICAgICAgc3VwZXIoTkFNRSwgTUFTS19ERUZBVUxUKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoVGFnIHRhZykgeworICAgICAgICAgICAgcmV0dXJuIFNUQVRVUyArICI8ZGQ+PGVtPkludGVybmFsPC9lbT4uIDxmb250IGNvbG9yPSdyZWQnPlRoaXMgQVBJIGlzIDxlbT5JbnRlcm5hbCBPbmx5PC9lbT4gYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHRpbWUuPC9mb250PjwvZGQ+IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSUNVRHJhZnRUYWdsZXQgZXh0ZW5kcyBJQ1VUYWdsZXQgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJkcmFmdCI7CisKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyKE1hcCB0YWdsZXRzKSB7CisgICAgICAgICAgICB0YWdsZXRzLnB1dChOQU1FLCBuZXcgSUNVRHJhZnRUYWdsZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIElDVURyYWZ0VGFnbGV0KCkgeworICAgICAgICAgICAgc3VwZXIoTkFNRSwgTUFTS19ERUZBVUxUKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoVGFnIHRhZykgeworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSB0YWcudGV4dCgpOworICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV2FybmluZzogZW1wdHkgZHJhZnQgdGFnIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU1RBVFVTICsgIjxkZD5EcmFmdCAiICsgdGFnLnRleHQoKSArICIuPC9kZD4iOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBJQ1VTdGFibGVUYWdsZXQgZXh0ZW5kcyBJQ1VUYWdsZXQgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJzdGFibGUiOworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZWdpc3RlcihNYXAgdGFnbGV0cykgeworICAgICAgICAgICAgdGFnbGV0cy5wdXQoTkFNRSwgbmV3IElDVVN0YWJsZVRhZ2xldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgSUNVU3RhYmxlVGFnbGV0KCkgeworICAgICAgICAgICAgc3VwZXIoTkFNRSwgTUFTS19ERUZBVUxUKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoVGFnIHRhZykgeworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSB0YWcudGV4dCgpOworICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVRVUyArICI8ZGQ+U3RhYmxlICIgKyB0ZXh0ICsgIi48L2RkPiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBTVEFUVVMgKyAiPGRkPlN0YWJsZS48L2RkPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIElDVURlcHJlY2F0ZWRUYWdsZXQgZXh0ZW5kcyBJQ1VUYWdsZXQgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJkZXByZWNhdGVkIjsKKworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXIoTWFwIHRhZ2xldHMpIHsKKyAgICAgICAgICAgIHRhZ2xldHMucHV0KE5BTUUsIG5ldyBJQ1VEZXByZWNhdGVkVGFnbGV0KCkpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBJQ1VEZXByZWNhdGVkVGFnbGV0KCkgeworICAgICAgICAgICAgc3VwZXIoTkFNRSwgTUFTS19ERUZBVUxUKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoVGFnIHRhZykgeworICAgICAgICAgICAgQnJlYWtJdGVyYXRvciBiaSA9IEJyZWFrSXRlcmF0b3IuZ2V0U2VudGVuY2VJbnN0YW5jZShMb2NhbGUuVVMpOworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSB0YWcudGV4dCgpOworICAgICAgICAgICAgYmkuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgICAgIGludCBmaXJzdCA9IGJpLmZpcnN0KCk7CisgICAgICAgICAgICBpbnQgbmV4dCA9IGJpLm5leHQoKTsKKyAgICAgICAgICAgIGlmIChmaXJzdCA9PSAtMSB8fCBuZXh0ID09IC0xKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXYXJuaW5nOiBiYWQgZGVwcmVjYXRlZCB0YWcgJyIgKyB0ZXh0ICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBVFVTICsgIjxkZD48ZW0+RGVwcmVjYXRlZDwvZW0+LiAiICsgdGV4dCArICI8L2RkPiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBTVEFUVVMgKyAiPGRkPjxlbT5EZXByZWNhdGVkIGluICIgKyB0ZXh0LnN1YnN0cmluZyhmaXJzdCwgbmV4dCkgKyAiPC9lbT4uICIgKyB0ZXh0LnN1YnN0cmluZyhuZXh0KSArICI8L2RkPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIElDVU9ic29sZXRlVGFnbGV0IGV4dGVuZHMgSUNVVGFnbGV0IHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUUgPSAib2Jzb2xldGUiOworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZWdpc3RlcihNYXAgdGFnbGV0cykgeworICAgICAgICAgICAgdGFnbGV0cy5wdXQoTkFNRSwgbmV3IElDVU9ic29sZXRlVGFnbGV0KCkpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBJQ1VPYnNvbGV0ZVRhZ2xldCgpIHsKKyAgICAgICAgICAgIHN1cGVyKE5BTUUsIE1BU0tfREVGQVVMVCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKFRhZyB0YWcpIHsKKyAgICAgICAgICAgIEJyZWFrSXRlcmF0b3IgYmkgPSBCcmVha0l0ZXJhdG9yLmdldFNlbnRlbmNlSW5zdGFuY2UoTG9jYWxlLlVTKTsKKyAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gdGFnLnRleHQoKTsKKyAgICAgICAgICAgIGJpLnNldFRleHQodGV4dCk7CisgICAgICAgICAgICBpbnQgZmlyc3QgPSBiaS5maXJzdCgpOworICAgICAgICAgICAgaW50IG5leHQgPSBiaS5uZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gU1RBVFVTICsgIjxkZD48ZW0+T2Jzb2xldGUuPC9lbT4gPGZvbnQgY29sb3I9J3JlZCc+V2lsbCBiZSByZW1vdmVkIGluICIgKyB0ZXh0LnN1YnN0cmluZyhmaXJzdCwgbmV4dCkgKyAiPC9mb250Pi4gIiArIHRleHQuc3Vic3RyaW5nKG5leHQpICsgIjwvZGQ+IjsKKworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9BcnJheUVudW1lcmF0aW9uLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0FycmF5RW51bWVyYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNWMxN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9BcnJheUVudW1lcmF0aW9uLmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9BcnJheUVudW1lcmF0aW9uLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjYgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGZpbmFsIGNsYXNzIEFycmF5RW51bWVyYXRpb24gaW1wbGVtZW50cyBFbnVtZXJhdGlvbiB7CisKKyAgICBwdWJsaWMgQXJyYXlFbnVtZXJhdGlvbihPYmplY3RbXSBhcnJheSwgaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKKyAgICAgICAgdGhpcy5hcnJheSA9IGFycmF5OworICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0OworICAgICAgICB0aGlzLmxpbWl0ID0gbGltaXQ7CisgICAgfQorCisgICAgcHVibGljIEFycmF5RW51bWVyYXRpb24oYnl0ZVtdIGFycmF5LCBpbnQgc3RhcnQsIGludCBsaW1pdCkgeworICAgICAgICB0aGlzLmFycmF5ID0gbmV3IE9iamVjdFthcnJheS5sZW5ndGhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gbmV3IEJ5dGUoYXJyYXlbaV0pOworICAgICAgICB9CisgICAgICAgIHBvc2l0aW9uID0gc3RhcnQ7CisgICAgICAgIHRoaXMubGltaXQgPSBsaW1pdDsKKyAgICB9CisKKyAgICBwdWJsaWMgQXJyYXlFbnVtZXJhdGlvbihjaGFyW10gYXJyYXksIGludCBzdGFydCwgaW50IGxpbWl0KSB7CisgICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgT2JqZWN0W2FycmF5Lmxlbmd0aF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBuZXcgQ2hhcmFjdGVyKGFycmF5W2ldKTsKKyAgICAgICAgfQorICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0OworICAgICAgICB0aGlzLmxpbWl0ID0gbGltaXQ7CisgICAgfQorCisgICAgcHVibGljIEFycmF5RW51bWVyYXRpb24oc2hvcnRbXSBhcnJheSwgaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKKyAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBPYmplY3RbYXJyYXkubGVuZ3RoXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IG5ldyBTaG9ydChhcnJheVtpXSk7CisgICAgICAgIH0KKyAgICAgICAgcG9zaXRpb24gPSBzdGFydDsKKyAgICAgICAgdGhpcy5saW1pdCA9IGxpbWl0OworICAgIH0KKworICAgIHB1YmxpYyBBcnJheUVudW1lcmF0aW9uKGludFtdIGFycmF5LCBpbnQgc3RhcnQsIGludCBsaW1pdCkgeworICAgICAgICB0aGlzLmFycmF5ID0gbmV3IE9iamVjdFthcnJheS5sZW5ndGhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gbmV3IEludGVnZXIoYXJyYXlbaV0pOworICAgICAgICB9CisgICAgICAgIHBvc2l0aW9uID0gc3RhcnQ7CisgICAgICAgIHRoaXMubGltaXQgPSBsaW1pdDsKKyAgICB9CisKKyAgICBwdWJsaWMgQXJyYXlFbnVtZXJhdGlvbihmbG9hdFtdIGFycmF5LCBpbnQgc3RhcnQsIGludCBsaW1pdCkgeworICAgICAgICB0aGlzLmFycmF5ID0gbmV3IE9iamVjdFthcnJheS5sZW5ndGhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gbmV3IEZsb2F0KGFycmF5W2ldKTsKKyAgICAgICAgfQorICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0OworICAgICAgICB0aGlzLmxpbWl0ID0gbGltaXQ7CisgICAgfQorCisgICAgcHVibGljIEFycmF5RW51bWVyYXRpb24oZG91YmxlW10gYXJyYXksIGludCBzdGFydCwgaW50IGxpbWl0KSB7CisgICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgT2JqZWN0W2FycmF5Lmxlbmd0aF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBuZXcgRG91YmxlKGFycmF5W2ldKTsKKyAgICAgICAgfQorICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0OworICAgICAgICB0aGlzLmxpbWl0ID0gbGltaXQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGFzTW9yZUVsZW1lbnRzKCkgeworICAgICAgICAgcmV0dXJuIHBvc2l0aW9uIDwgbGltaXQ7CisgICAgfQorCisgICAgcHVibGljIE9iamVjdCBuZXh0RWxlbWVudCgpIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgbGltaXQpCisgICAgICAgICAgICByZXR1cm4gYXJyYXlbcG9zaXRpb24rK107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocm93IG5ldyBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigpOworICAgIH0KKyAgICAvLyBwcml2YXRlcworICAgIHByaXZhdGUgT2JqZWN0W10gYXJyYXk7CisgICAgcHJpdmF0ZSBpbnQgcG9zaXRpb24gPSAwOworICAgIHByaXZhdGUgaW50IGxpbWl0ID0gMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0NvbGxhdGlvbkl0ZW0uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29sbGF0aW9uSXRlbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmMTU0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0NvbGxhdGlvbkl0ZW0uamF2YQpAQCAtMCwwICsxLDk1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0NvbGxhdGlvbkl0ZW0uamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNToyNiAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBBIENvbGxhdGlvbkl0ZW0gcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSBpbiBhIGNvbGxhdGlvbiBzZXF1ZW5jZS4KKyAqLworcHVibGljIGNsYXNzIENvbGxhdGlvbkl0ZW0geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBPUF9DSEFSUyA9IHsnPScsICc8JywgJzsnLCAnLCcsICcmJyB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBTUEVDSUFMX0NIQVJTID0geyAnJicsICdAJyAsICc9JywgJzwnLCAnOycsICcsJyB9OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PTkUgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSSU1BUlkgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFQ09OREFSWSA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVSVElBUlkgPSAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGSVJTVCA9IDQ7CisgICAgcHVibGljIGludCBvcDsKKyAgICBwdWJsaWMgU3RyaW5nIGl0ZW07CisgICAgcHVibGljIFN0cmluZyBleHBhbnNpb247CisgICAgcHVibGljIFN0cmluZyBjb21tZW50OworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29sbGF0aW9uSXRlbSBGT1JXQVJEID0gbmV3IENvbGxhdGlvbkl0ZW0oTk9ORSwgIiIpIHsKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuICIiOyB9CisgICAgfTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbGxhdGlvbkl0ZW0gQkFDS1dBUkQgPSBuZXcgQ29sbGF0aW9uSXRlbShOT05FLCAiIikgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gIkAiOyB9CisgICAgfTsKKyAgICAKKyAgICBwdWJsaWMgQ29sbGF0aW9uSXRlbShTdHJpbmcgaXRlbSkgeworICAgICAgICB0aGlzLm9wID0gRklSU1Q7CisgICAgICAgIHRoaXMuaXRlbSA9IGNsZWFuU3RyaW5nKGl0ZW0pOworICAgICAgICB0aGlzLmV4cGFuc2lvbiA9ICIiOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQ29sbGF0aW9uSXRlbShpbnQgb3AsIFN0cmluZyBpdGVtKSB7CisgICAgICAgIHRoaXMob3AsIGl0ZW0sIG51bGwpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQ29sbGF0aW9uSXRlbShpbnQgb3AsIFN0cmluZyBpdGVtLCBTdHJpbmcgZXhwYW5zaW9uKSB7CisgICAgICAgIHRoaXMub3AgPSBNYXRoLmFicyhvcCk7CisgICAgICAgIGlmICh0aGlzLm9wID4gVEVSVElBUlkpIHRoaXMub3AgPSBURVJUSUFSWTsKKyAgICAgICAgdGhpcy5pdGVtID0gY2xlYW5TdHJpbmcoaXRlbSk7CisgICAgICAgIHRoaXMuZXhwYW5zaW9uID0gY2xlYW5TdHJpbmcoZXhwYW5zaW9uKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgc2V0Q29tbWVudChTdHJpbmcgY29tbWVudCkgeworICAgICAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmcgaXRlbVN0cmluZyA9IGl0ZW07CisgICAgICAgIGlmIChleHBhbnNpb24ubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuICIiK09QX0NIQVJTW29wXStpdGVtOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICImIitleHBhbnNpb24rT1BfQ0hBUlNbb3BdK2l0ZW07CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgY2xlYW5TdHJpbmcoU3RyaW5nIHNvdXJjZSkgeworICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiAiIjsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHNvdXJjZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgZmluYWwgY2hhciBjID0gcmVzdWx0LmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmICgoYyA9PSAnQCcpIHx8IChjID09ICdcdCcpIHx8IChjID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIHx8IChjID09ICdcZicpIHx8IChjID09J1xyJykgfHwgKGMgPT0gJ1wwMTMnKQorICAgICAgICAgICAgICAgICAgICB8fCAoKGMgPD0gJ1x1MDAyRicpICYmIChjID49ICdcdTAwMjAnKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgKChjIDw9ICdcdTAwM0YnKSAmJiAoYyA+PSAnXHUwMDNBJykpCisgICAgICAgICAgICAgICAgICAgIHx8ICgoYyA8PSAnXHUwMDYwJykgJiYgKGMgPj0gJ1x1MDA1QicpKQorICAgICAgICAgICAgICAgICAgICB8fCAoKGMgPD0gJ1x1MDA3RScpICYmIChjID49ICdcdTAwN0InKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IHJlc3VsdC5sZW5ndGgoKS0xKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInIiArIGMgKyInIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcmVzdWx0LnN1YnN0cmluZyhpKzEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInIiArIGMgKyInIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaSArPSAyOyAvL3NraXAgdGhlIHR3byBjaGFyYWN0ZXJzIHdlIGluc2VydGVkCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db21wYXJhYmxlLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0NvbXBhcmFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMWJhZGNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db21wYXJhYmxlLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db21wYXJhYmxlLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjYgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK3B1YmxpYyBpbnRlcmZhY2UgQ29tcGFyYWJsZSB7CisgICAgLyoqCisgICAgICAgIHJldHVybnMgMCBpZiBvYmplY3RzIGFyZSBlcXVhbCwgLTEgaWYgYSBpcyBsZXNzIHRoYW4gYiwgMSBvdGhlcndpc2UuCisgICAgKi8KKyAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhPYmplY3QgYik7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db21wYXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0NvbXBhcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODNhOTQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db21wYXJhdG9yLmphdmEKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db21wYXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjYgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK3B1YmxpYyBpbnRlcmZhY2UgQ29tcGFyYXRvciB7CisgICAgLyoqCisgICAgICAgIHJldHVybnMgMCBpZiBvYmplY3RzIGFyZSBlcXVhbCwgLTEgaWYgYSBpcyBsZXNzIHRoYW4gYiwgMSBvdGhlcndpc2UuCisgICAgKi8KKyAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IGEsIE9iamVjdCBiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29tcGxleFRyYW5zaXRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29tcGxleFRyYW5zaXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTMwNGRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db21wbGV4VHJhbnNpdGlvbi5qYXZhCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29tcGxleFRyYW5zaXRpb24uamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNToyNiAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBBIENvbXBsZXhUcmFuc2l0aW9uIGlzIGNvbmNlcHR1YWxseSBhIHNpbmdsZSB0cmFuc2l0aW9uIHRoYXQKKyAqIGNvbnN1bWVzIG11bHRpcGxlIGlucHV0IGNoYXJhY3RlcnMuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb21wbGV4VHJhbnNpdGlvbiBpbXBsZW1lbnRzIExleC5UcmFuc2l0aW9uIHsKKyAgICAgICAgLy90aGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBieSBzdWJjbGFzc2VzIGluZGljYXRpbmcgdGhhdAorICAgICAgICAvL3RoZSB0cmFuc2l0aW9uIHdhcyBzdWNjZXNzZnVsbC4gIFRoaXMgdmFsdWUgaXMgdGhlbgorICAgICAgICAvL2Rpc2NhcmRlZCBhbmQgdGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgLy9pcyB0aGVuIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgU1VDQ0VTUyA9IExleC5FTkRfT0ZfRklMRSAtIDE7CisgICAgcHJpdmF0ZSBpbnQgc3VjY2VzczsgICAgLy92YWx1ZSB0byByZXR1cm4gaWYgc3VjY2Vzc2Z1bGwKKyAgICBwcml2YXRlIExleCBwYXJzZXI7ICAgICAvL3RoZSBwYXJzZXIgdXNlZCBmb3IgdGhpcyB0cmFuc2l0aW9uCisgICAgICAgIAorICAgIHB1YmxpYyBDb21wbGV4VHJhbnNpdGlvbihpbnQgc3VjY2VzcykgeworICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBzdWNjZXNzOworICAgICAgICB0aGlzLnBhcnNlciA9IG5ldyBMZXgobnVsbCk7CisgICAgICAgIC8vdGhpcy5wYXJzZXIuZGVidWcodHJ1ZSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBpbnQgZG9BY3Rpb24oaW50IGMsIFB1c2hiYWNrUmVhZGVyIGlucHV0LCBTdHJpbmdCdWZmZXIgYnVmZmVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpbnB1dC51bnJlYWQoYyk7CisgICAgICAgIHBhcnNlci5zZXRTdGF0ZXMoZ2V0U3RhdGVzKCkpOworICAgICAgICBwYXJzZXIuc2V0SW5wdXQoaW5wdXQpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW50IHMgPSBwYXJzZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzKHBhcnNlciwgYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBoYW5kbGVGYWlsdXJlKHBhcnNlciwgYnVmZmVyKTsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgLy9jYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHBhcnNlCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlU3VjY2VzcyhMZXggcGFyc2VyLCBTdHJpbmdCdWZmZXIgb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBwYXJzZXIuYXBwZW5kRGF0YVRvKG91dHB1dCk7CisgICAgfQorICAgIAorICAgICAgICAvL2NhbGxlZCBhZnRlciBhIGZhaWxlZCBwYXJzZQorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUZhaWx1cmUoTGV4IHBhcnNlciwgU3RyaW5nQnVmZmVyIG91dHB1dCkgeworICAgIH0KKyAgICAKKyAgICAgICAgLy9zdWJjbGFzc2VzIHNob3VsZCByZXR1cm4gdGhlIHN0YXRlcyB0byB1c2UgdG8gcGFyc2UgdGhpcworICAgICAgICAvL3RyYW5zaXRpb24KKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgTGV4LlRyYW5zaXRpb25bXVtdIGdldFN0YXRlcygpOworCisgICAgcHVibGljIENvbXBsZXhUcmFuc2l0aW9uIGRlYnVnKGJvb2xlYW4gZGVidWcpIHsKKyAgICAgICAgcGFyc2VyLmRlYnVnKGRlYnVnKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBDb21wbGV4VHJhbnNpdGlvbiBkZWJ1Zyhib29sZWFuIGRlYnVnLCBTdHJpbmcgdGFnKSB7CisgICAgICAgIHBhcnNlci5kZWJ1ZyhkZWJ1ZywgdGFnKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db252ZXJ0QWxsSmF2YUxvY2FsZXMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29udmVydEFsbEphdmFMb2NhbGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODhmZWM1YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29udmVydEFsbEphdmFMb2NhbGVzLmphdmEKQEAgLTAsMCArMSw4OCBAQAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorCitUaGUgQ29udmVydEphdmFMb2NhbGUgYXBwbGljYXRpb24gY29udmVydHMgamF2YSBsb2NhbGVzIHRvIAorSmF2YSBhbmQgSUNVIExvY2FsZSBmaWxlcy4gIEl0J3MgdXNhZ2UgaXMgYXMgZm9sbG93cworCisgICAgQ29udmVydEphdmFMb2NhbGUgWy0xMV0gWy0xMl0gWy1pY3VdIGxvY2FsZS4uLgorCitVc2FnZQorCistMTEKKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGRhdGEgaXMgb3V0cHV0IGluIAorICAgIEphdmEgMS4xLnggbG9jYWxlIGZvcm1hdC4KKyAgICAKKy0xMgorICAgIElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZGF0YSBpcyBvdXRwdXQgaW4KKyAgICBKYXZhIDEuMi54IGxvY2FsZSBmb3JtYXQuICBJZiBhbiBvdXRwdXQgZm9ybWF0CisgICAgaXMgbm90IHNwZWNpZmllZCwgLTEyIGlzIHRoZSBkZWZhdWx0LgorICAgIAorLWljdQorICAgIElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZGF0YSBpcyBvdXRwdXQgaW4KKyAgICBJQ1UgbG9jYWxlIGZvcm1hdC4KKworbG9jYWxlCisgICAgVGhlIGxvY2FsZSB0byBjb252ZXJ0CisKKworKi8KK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC4qOworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db252ZXJ0QWxsSmF2YUxvY2FsZXMuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNToyNyAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwdWJsaWMgY2xhc3MgQ29udmVydEFsbEphdmFMb2NhbGVzIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBuZXcgQ29udmVydEFsbEphdmFMb2NhbGVzKGFyZ3MpOworICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmtub3duIGVycm9yOiAiK3QpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBDb252ZXJ0QWxsSmF2YUxvY2FsZXMoU3RyaW5nIGFyZ3NJbltdKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBhcmdzSW5bMF07CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdGhlIHBhY2thZ2VuYW1lIDogIitwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBTdHJpbmcgY2xhc3NuYW1lID0gcGFja2FnZU5hbWUrIi5Mb2NhbGUiOworICAgICAgICAgICAgLy9jbGFzc25hbWUuY29uY2F0KCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdGhlIGNsYXNzbmFtZSA6ICIrY2xhc3NuYW1lKTsKKyAgICAgICAgICAvKiAgQ2xhc3MgY2wgPSBDbGFzcy5mb3JOYW1lKGNsYXNzbmFtZSk7CisgICAgICAgICAgICBDbGFzc1tdIHBhcmFtTGlzdD1udWxsOworICAgICAgICAgICAgTWV0aG9kIGd2bCA9IGNsLmdldE1ldGhvZCgiZ2V0QXZhaWxhYmxlTG9jYWxlcyIsIHBhcmFtTGlzdCk7CisgICAgICAgICAgICBPYmplY3RbXSBwYXJhbXMgPSBuZXcgT2JqZWN0W117IiJ9OworICAgICAgICAgICAgZ3ZsLmludm9rZShudWxsLHBhcmFtcyk7Ki8KKyAgICAgICAgICAgIGZpbmFsIExvY2FsZVtdIGxvY2FsZXMgPSBqYXZhLnV0aWwuTG9jYWxlLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsvLyhMb2NhbGVbXSlndmwuaW52b2tlKG51bGwscGFyYW1zKTs7CisgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbG9jYWxlTmFtZSA9IGxvY2FsZXNbaV0udG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBhcmdzID0geyItcGFja2FnZSIscGFja2FnZU5hbWUsIi1pY3UiLCBsb2NhbGVOYW1lfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnZlcnRpbmcgIitsb2NhbGVOYW1lKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmaW5hbCBGaWxlT3V0cHV0U3RyZWFtIG91dEZpbGUgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgiSUNVTG9jYWxlXyIrbG9jYWxlTmFtZSk7CisgICAgICAgICAgICAgICAgZmluYWwgUHJpbnRTdHJlYW0gb3V0ID0gbmV3IFByaW50U3RyZWFtKG91dEZpbGUsIHRydWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5ldyBDb252ZXJ0SmF2YUxvY2FsZShhcmdzLCBvdXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuZXhwZWN0ZWQgSU8gZXJyb3IiKTsKKyAgICAgICAgfWNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29udmVydEphdmFMb2NhbGUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29udmVydEphdmFMb2NhbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGQ0MzdkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db252ZXJ0SmF2YUxvY2FsZS5qYXZhCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0NvbnZlcnRKYXZhTG9jYWxlLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjcgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorCitUaGUgQ29udmVydEphdmFMb2NhbGUgYXBwbGljYXRpb24gY29udmVydHMgamF2YSBsb2NhbGVzIHRvIAorSmF2YSBhbmQgSUNVIExvY2FsZSBmaWxlcy4gIEl0J3MgdXNhZ2UgaXMgYXMgZm9sbG93cworCisgICAgQ29udmVydEphdmFMb2NhbGUgWy0xMV0gWy0xMl0gWy1pY3VdIGxvY2FsZS4uLgorCitVc2FnZQorCistMTEKKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGRhdGEgaXMgb3V0cHV0IGluIAorICAgIEphdmEgMS4xLnggbG9jYWxlIGZvcm1hdC4KKyAgICAKKy0xMgorICAgIElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZGF0YSBpcyBvdXRwdXQgaW4KKyAgICBKYXZhIDEuMi54IGxvY2FsZSBmb3JtYXQuICBJZiBhbiBvdXRwdXQgZm9ybWF0CisgICAgaXMgbm90IHNwZWNpZmllZCwgLTEyIGlzIHRoZSBkZWZhdWx0LgorICAgIAorLWljdQorICAgIElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZGF0YSBpcyBvdXRwdXQgaW4KKyAgICBJQ1UgbG9jYWxlIGZvcm1hdC4KKworbG9jYWxlCisgICAgVGhlIGxvY2FsZSB0byBjb252ZXJ0CisKKworKi8KKworcHVibGljIGNsYXNzIENvbnZlcnRKYXZhTG9jYWxlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIE9QVF8xMSA9IChieXRlKTB4MDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBPUFRfMTIgPSAoYnl0ZSkweDAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgT1BUX0lDVSA9IChieXRlKTB4MDQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBPUFRfUEFDS0FHRSA9IChieXRlKTB4MDg7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBPUFRfVU5LTk9XTiA9IChieXRlKTB4ODA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRVJfT1BUSU9OU1tdID0geworICAgICAgICAiLTExIiwgCisgICAgICAgICItMTIiLCAKKyAgICAgICAgIi1pY3UiLAorICAgICAgICAiLXBhY2thZ2UiCisgICAgfTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSB0YWdzID0geworICAgICAgICAiTG9jYWxlU3RyaW5nIiwKKyAgICAgICAgIkxvY2FsZUlEIiwKKyAgICAgICAgIlNob3J0TGFuZ3VhZ2UiLAorICAgICAgICAiU2hvcnRDb3VudHJ5IiwKKyAgICAgICAgIkxhbmd1YWdlcyIsCisgICAgICAgICJDb3VudHJpZXMiLAorICAgICAgICAiTW9udGhOYW1lcyIsCisgICAgICAgICJNb250aEFiYnJldmlhdGlvbnMiLAorICAgICAgICAiRGF5TmFtZXMiLAorICAgICAgICAiRGF5QWJicmV2aWF0aW9ucyIsCisgICAgICAgICJBbVBtTWFya2VycyIsCisgICAgICAgICJFcmFzIiwKKyAgICAgICAgIk51bWJlclBhdHRlcm5zIiwKKyAgICAgICAgIk51bWJlckVsZW1lbnRzIiwKKyAgICAgICAgIkN1cnJlbmN5RWxlbWVudHMiLAorICAgICAgICAiRGF0ZVRpbWVQYXR0ZXJucyIsCisgICAgICAgICJEYXRlVGltZUVsZW1lbnRzIiwgICAKKyAgICAgICAgIkNvbGxhdGlvbkVsZW1lbnRzIiwKKyAgICAgICAgInpvbmVTdHJpbmdzIiwKKyAgICAgICAgImxvY2FsUGF0dGVybkNoYXJzIiwKKyAgICB9OworCisKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG5ldyBDb252ZXJ0SmF2YUxvY2FsZShhcmdzLCBTeXN0ZW0ub3V0KTsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5rbm93biBlcnJvcjogIit0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQ29udmVydEphdmFMb2NhbGUoU3RyaW5nIGFyZ3NbXSwgUHJpbnRTdHJlYW0gb3V0KSB7CisgICAgICAgIHByb2Nlc3MoYXJncywgb3V0KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgcHJvY2VzcyhTdHJpbmcgYXJnc1tdLCBQcmludFN0cmVhbSBvdXQpIHsKKyAgICAgICAgc2hvcnQgb3B0aW9ucyA9IGlkZW50aWZ5T3B0aW9ucyhhcmdzKTsKKyAgICAgICAgaWYgKChhcmdzLmxlbmd0aCA8IDEpIHx8ICgob3B0aW9ucyAmIE9QVF9VTktOT1dOKSAhPSAwKSkgeworICAgICAgICAgICAgcHJpbnRVc2FnZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGxvY2FsZU5hbWUgPSBudWxsOworICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VuYW1lID0gbnVsbDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0aGlzQXJnID0gYXJnc1tpXTsKKyAgICAgICAgICAgICAgICBpZihhcmdzW2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1wYWNrYWdlIikpeworICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICBwYWNrYWdlbmFtZSA9IGFyZ3NbaV07CisgICAgICAgICAgICAgICAgfWVsc2UgaWYoYXJnc1tpXS5lcXVhbHNJZ25vcmVDYXNlKCItaWN1IikpeworICAgICAgICAgICAgICAgIH1lbHNlIGlmICghYXJnc1tpXS5zdGFydHNXaXRoKCItIikpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxlTmFtZSA9IGFyZ3NbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgSGFzaHRhYmxlIGRhdGEgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbG9jYWxlRWxlbWVudHMgPSBwYWNrYWdlbmFtZSsiLkxvY2FsZUVsZW1lbnRzIiArCisgICAgICAgICAgICAgICAgICAgIChTdHJpbmcpKChsb2NhbGVOYW1lICE9IG51bGwpID8gIl8iK2xvY2FsZU5hbWUgOiAiIik7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgRGF0ZUZvcm1hdFpvbmVEYXRhID0gcGFja2FnZW5hbWUrIi5EYXRlRm9ybWF0Wm9uZURhdGEiICsKKyAgICAgICAgICAgICAgICAgICAgKFN0cmluZykoKGxvY2FsZU5hbWUgIT0gbnVsbCkgPyAiXyIrbG9jYWxlTmFtZSA6ICIiKTsKKyAgICAgICAgICAgIGFkZExvY2FsZURhdGEobG9jYWxlRWxlbWVudHMsIGRhdGEpOworICAgICAgICAgICAgYWRkTG9jYWxlRGF0YShEYXRlRm9ybWF0Wm9uZURhdGEsIGRhdGEpOworICAgICAgICAgICAgZmluYWwgTG9jYWxlIGxvY2FsZSA9IGxvY2FsZUZyb21TdHJpbmcobG9jYWxlTmFtZSk7CisgICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBPUFRfMTEpICE9IDApIHsKKyAgICAgICAgICAgICAgICBuZXcgSmF2YTFMb2NhbGVXcml0ZXIob3V0LCBTeXN0ZW0uZXJyKS53cml0ZShsb2NhbGUsIGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChvcHRpb25zICYgT1BUXzEyKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgbmV3IEphdmFMb2NhbGVXcml0ZXIob3V0LCBTeXN0ZW0uZXJyKS53cml0ZShsb2NhbGUsIGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChvcHRpb25zICYgT1BUX0lDVSkgIT0gMCkgeworICAgICAgICAgICAgICAgIG5ldyBJQ1VMb2NhbGVXcml0ZXIob3V0LCBTeXN0ZW0uZXJyKS53cml0ZShsb2NhbGUsIGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZExvY2FsZURhdGEoZmluYWwgU3RyaW5nIGJ1bmRsZUNsYXNzTmFtZSwgZmluYWwgSGFzaHRhYmxlIGRhdGEpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIENsYXNzIGJ1bmRsZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShidW5kbGVDbGFzc05hbWUpOworICAgICAgICAgICAgZmluYWwgUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gKFJlc291cmNlQnVuZGxlKWJ1bmRsZUNsYXNzLm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgcmVzb3VyY2UgPSBidW5kbGUuZ2V0T2JqZWN0KHRhZ3NbaV0pOworICAgICAgICAgICAgICAgICAgICBkYXRhLnB1dCh0YWdzW2ldLCByZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDb3VsZCBub3QgZmluZCBidW5kbGUgY2xhc3MgZm9yIGJ1bmRsZTogIitidW5kbGVDbGFzc05hbWUpOworICAgICAgICB9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSBidW5kbGUgaW5zdGFuY2UgZm9yIGJ1bmRsZTogIitidW5kbGVDbGFzc05hbWUpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSBidW5kbGUgaW5zdGFuY2UgZm9yIGJ1bmRsZTogIitidW5kbGVDbGFzc05hbWUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBwcmludFVzYWdlKCkgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBDb252ZXJ0SmF2YUxvY2FsZSBbLTExXSBbLTEyXSBbLWljdV0gbG9jYWxlTmFtZSIpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHNob3J0IGlkZW50aWZ5T3B0aW9ucyhTdHJpbmdbXSBvcHRpb25zKSB7CisgICAgICAgIHNob3J0IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgb3B0aW9ucy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgU3RyaW5nIG9wdGlvbiA9IG9wdGlvbnNbal07CisgICAgICAgICAgICBpZiAob3B0aW9uLnN0YXJ0c1dpdGgoIi0iKSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gb3B0aW9uUmVjb2duaXplZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAoc2hvcnQgaSA9IDA7IGkgPCBVU0VSX09QVElPTlMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVTRVJfT1BUSU9OU1tpXS5lcXVhbHMob3B0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IChzaG9ydCkoMSA8PCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblJlY29nbml6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25SZWNvZ25pemVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBPUFRfVU5LTk9XTjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBMb2NhbGUgbG9jYWxlRnJvbVN0cmluZyhmaW5hbCBTdHJpbmcgbG9jYWxlTmFtZSkgeworICAgICAgICBpZiAobG9jYWxlTmFtZSA9PSBudWxsKSByZXR1cm4gbmV3IExvY2FsZSgiIiwgIiIsICIiKTsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gbG9jYWxlTmFtZTsKKyAgICAgICAgU3RyaW5nIGNvdW50cnkgPSAiIjsKKyAgICAgICAgU3RyaW5nIHZhcmlhbnQgPSAiIjsKKyAgICAgICAgCisgICAgICAgIGludCBuZHggPSBsYW5ndWFnZS5pbmRleE9mKCdfJyk7CisgICAgICAgIGlmIChuZHggPj0gMCkgeworICAgICAgICAgICAgY291bnRyeSA9IGxhbmd1YWdlLnN1YnN0cmluZyhuZHgrMSk7CisgICAgICAgICAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnN1YnN0cmluZygwLCBuZHgpOworICAgICAgICB9CisgICAgICAgIG5keCA9IGNvdW50cnkuaW5kZXhPZignXycpOworICAgICAgICBpZiAobmR4ID49IDApIHsKKyAgICAgICAgICAgIHZhcmlhbnQgPSBjb3VudHJ5LnN1YnN0cmluZyhuZHgrMSk7CisgICAgICAgICAgICBjb3VudHJ5ID0gY291bnRyeS5zdWJzdHJpbmcoMCwgbmR4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db252ZXJ0TG9jYWxlVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db252ZXJ0TG9jYWxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczMmNmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0NvbnZlcnRMb2NhbGVUZXN0LmphdmEKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db252ZXJ0TG9jYWxlVGVzdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjI3ICQgCisgKiAkUmV2aXNpb246IDEuMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wubG9jYWxlY29udmVydGVyOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworLyoKKworQ29udmVydFBPU0lYTG9jYWxlIFstMTFdIFstMTJdIFstaWN1XSBbLWljdTJdIGxvY2FsZURhdGFGaWxlIFtjaGFyTWFwRmlsZSAuLi5dCisKKyovCisKK3B1YmxpYyBjbGFzcyBDb252ZXJ0TG9jYWxlVGVzdCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeworLyoKKyAgICAgICAgQ29udmVydFBPU0lYTG9jYWxlLm1haW4oIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiLTEyIiwKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcY29sbGF0aW9uVGVzdC50eHQiCisgICAgICAgIH0gKTsgICAgCisgCisgICAgICAgIENvbnZlcnRQT1NJWExvY2FsZS5tYWluKCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIi1pY3UiLAorICAgICAgICAgICAgIkM6XFxwcm9qZWN0c1xcY29tXFx0YWxpZ2VudFxcbG9jYWxlY29udmVydGVyXFxjb2xsYXRpb25UZXN0Mi50eHQiLAorICAgICAgICAgICAgIkM6XFxwcm9qZWN0c1xcY29tXFx0YWxpZ2VudFxcbG9jYWxlY29udmVydGVyXFxDaGFyTWFwc1xcSVNPLTg4NTktMSIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXENoYXJNYXBzXFxtbmVtb25pYy5kcyIsCisgICAgICAgIH0gKTsKKworICAgICAgICBDb252ZXJ0UE9TSVhMb2NhbGUubWFpbiggbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICItaWN1IiwgIi1MQ19NRVNTQUdFUyIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXExvY2FsZXNcXFZpdm54NDMuaWJtIiwKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcQ2hhck1hcHNcXGlibTExMjktMi1VbmlDb2RlLmNobSIsCisgICAgICAgIH0gKTsKKy8qICAgICAgQ29udmVydFBPU0lYTG9jYWxlLm1haW4oIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiLTEyIiwKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcTG9jYWxlc1xcUE9TSVhMb2NhbGVzXFxlbl9VUyIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXENoYXJNYXBzXFxJU08tODg1OS0xIiwKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcQ2hhck1hcHNcXG1uZW1vbmljLmRzIiwKKyAgICAgICAgfSk7CisvKiAgICAgIENvbnZlcnRQT1NJWExvY2FsZS5tYWluKCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIi0xMiIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXExvY2FsZXNcXFBPU0lYTG9jYWxlc1xcZmlfRkkiLAorICAgICAgICAgICAgIkM6XFxwcm9qZWN0c1xcY29tXFx0YWxpZ2VudFxcbG9jYWxlY29udmVydGVyXFxDaGFyTWFwc1xcSVNPLTg4NTktMSIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXENoYXJNYXBzXFxtbmVtb25pYy5kcyIsCisgICAgICAgIH0pOworCisgICAgICAgIENvbnZlcnRQT1NJWExvY2FsZS5tYWluKCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIi0xMiIsICJlbl9CRSIsIAorICAgICAgICAgICAgIkM6XFxwcm9qZWN0c1xcY29tXFx0YWxpZ2VudFxcbG9jYWxlY29udmVydGVyXFxMb2NhbGVzXFxFTkJFV0lOLklCTSIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXENoYXJNYXBzXFxJYm0xMjUyLmNobSIsCisgICAgICAgIH0pOworCisgICAgICAgIENvbnZlcnRQT1NJWExvY2FsZS5tYWluKCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIi0xMiIsICJ2aV9WTiIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXExvY2FsZXNcXFZpdm54NDMuaWJtIiwKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcQ2hhck1hcHNcXGlibTExMjktMi1VbmlDb2RlLmNobSIsCisgICAgICAgIH0pOworCisgICAgICAgIENvbnZlcnRQT1NJWExvY2FsZS5tYWluKCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIi1pY3UiLCAiZnJfRlIiLCAKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcTG9jYWxlc1xcUE9TSVhMb2NhbGVzXFxmcl9GUiIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXENoYXJNYXBzXFxJU08tODg1OS0xIiwKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcQ2hhck1hcHNcXG1uZW1vbmljLmRzIiwKKyAgICAgICAgfSk7CisKKyAgICAgICAgQ29udmVydFBPU0lYTG9jYWxlLm1haW4oIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiLWljdSIsICJmb19GTyIsIAorICAgICAgICAgICAgIkM6XFxwcm9qZWN0c1xcY29tXFx0YWxpZ2VudFxcbG9jYWxlY29udmVydGVyXFxMb2NhbGVzXFxQT1NJWExvY2FsZXNcXGZvX0ZPIiwKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcQ2hhck1hcHNcXElTTy04ODU5LTEiLAorICAgICAgICAgICAgIkM6XFxwcm9qZWN0c1xcY29tXFx0YWxpZ2VudFxcbG9jYWxlY29udmVydGVyXFxDaGFyTWFwc1xcbW5lbW9uaWMuZHMiLAorICAgICAgICB9KTsKKyovCisgICAgICAgIENvbnZlcnRQT1NJWExvY2FsZS5tYWluKCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIi1pY3UiLCAiZnJfTFUiLCAKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcTG9jYWxlc1xcUE9TSVhMb2NhbGVzXFxmcl9MVSIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXENoYXJNYXBzXFxJU08tODg1OS0xIiwKKyAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcQ2hhck1hcHNcXG1uZW1vbmljLmRzIiwKKyAgICAgICAgfSk7CisvKgorICAgICAgICBDb252ZXJ0UE9TSVhMb2NhbGUubWFpbiggbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICItaWN1IiwgImRlX0xVIiwgCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXExvY2FsZXNcXFBPU0lYTG9jYWxlc1xcZGVfTFUiLAorICAgICAgICAgICAgIkM6XFxwcm9qZWN0c1xcY29tXFx0YWxpZ2VudFxcbG9jYWxlY29udmVydGVyXFxDaGFyTWFwc1xcSVNPLTg4NTktMSIsCisgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXENoYXJNYXBzXFxtbmVtb25pYy5kcyIsCisgICAgICAgIH0pOworKi8KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Db252ZXJ0UE9TSVhMb2NhbGUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29udmVydFBPU0lYTG9jYWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWE2OWMxYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29udmVydFBPU0lYTG9jYWxlLmphdmEKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvQ29udmVydFBPU0lYTG9jYWxlLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDYvMjAgMDE6MTc6MTEgJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorCitUaGUgQ29udmVydFBPU0lYTG9jYWxlIGFwcGxpY2F0aW9uIGNvbnZlcnRzIFBPU0lYIGxvY2FsZSBmaWxlcyB0byAKK0phdmEgYW5kIElDVSBMb2NhbGUgZmlsZXMuICBJdCdzIHVzYWdlIGlzIGFzIGZvbGxvd3MKKworICAgIENvbnZlcnRQT1NJWExvY2FsZSAKKyAgICAgICAgWy1MQ19DVFlQRV0KKyAgICAgICAgWy1MQ19USU1FXQorICAgICAgICBbLUxDX05VTUVSSUNdIAorICAgICAgICBbLUxDX01PTkVUQVJZXSAKKyAgICAgICAgWy1MQ19NRVNTQUdFU10gCisgICAgICAgIFstMTFdIAorICAgICAgICBbLTEyXSAKKyAgICAgICAgWy1pY3VdCisgICAgICAgIFstaWN1Ml0KKyAgICAgICAgbG9jYWxlTmFtZQorICAgICAgICBsb2NhbGVEYXRhRmlsZSAKKyAgICAgICAgW2NoYXJNYXBGaWxlIC4uLl0KKyAgICAgICAgCitUaGUgYXBwbGljYXRpb24gaXMgaW52b2tlZCB3aXRoIG9wdGlvbnMgc3BlY2lmeWluZyB0aGUgZm9ybWF0KHMpIG9mCit0aGUgbG9jYWxlIGZpbGUocykgdG8gZ2VuZXJhdGUgYXMgd2VsbCBhcyB0aGUgUE9TSVggbG9jYWxlIGZpbGUgYW5kCitjaGFyYWN0ZXIgbWFwcGluZyBmaWxlcy4KKworVXNhZ2UKKworLUxDX0NUWVBFCisgICAgSWYgdGhlIC1MQ19DVFlQRSBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUKKyAgICBmb2xsb3dpbmcgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZSBsb2NhbGUgaWYgdGhleQorICAgIGFyZSBwcmVzZW50IGluIHRoZSBzb3VyY2U6IHVwcGVyLCBsb3dlciwgYWxwaGEsIGRpZ2l0LCAKKyAgICBzcGFjZSwgY250cmwsIHB1bmN0LCBncmFwaCwgcHJpbnQsIHhkaWdpdCwgYmxhbmssIAorICAgIHRvdXBwZXIsIHRvbG93ZXIuCisgICAgCis8Q09ERT4tTENfVElNRQorICAgIElmIHRoZSAtTENfVElNRSBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgZm9sbG93aW5nCisgICAgaXRlbXMgd2lsbCBiZSBpbmNsdWRlZCBpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBQT1NJWCBzb3VyY2U6CisgICAgYWJkYXksIGRheSwgYWJtb24sIG1vbiwgZF90X2ZtdCwgZF9mdG0sIHRfZm10LCBhbV9wbSwKKyAgICB0X2ZtdF9hbXBtLCBlcmEsIGVyYV95ZWFyLCBlcmFfZF9mbXQsIGFsdF9kaWdpdHMuCisgICAgCistTENfTlVNRVJJQworICAgIElmIHRoZSAtTENfTlVNRVJJQyBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgZm9sbG93aW5nCisgICAgaXRlbXMgd2lsbCBiZSBpbmNsdWRlZCBpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBzb3VyY2U6CisgICAgZGVjaW1hbF9wb2ludCwgdGhvdXNhbmRzX3NlcCwgZ3JvdXBpbmcKKworLUxDX01PTkVUQVJZCisgICAgSWYgdGhlIC1MQ19NT05FVEFSWSBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgZm9sbG93aW5nCisgICAgaXRlbXMgd2lsbCBiZSBpbmNsdWRlZCBpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBzb3VyY2U6CisgICAgaW50X2N1cnJfc3ltYm9sLCBjdXJyZW5jeV9zeW1ib2wsIG1vbl9kZWNpbWFsX3BvaW50LAorICAgIG1vbl90aG91c2FuZHNfc2VwLCBtb25fZ3JvdXBpbmcsIHBvc2l0aXZlX3NpZ24sIAorICAgIG5lZ2F0aXZlX3NpZ24sIGludF9mcmFjX2RpZ2l0cywgZnJhY19kaWdpdHMsIHBfY3NfcHJlY2VkZXMsCisgICAgcF9zZXBfYnlfc3BhY2UsIG5fY3NfcHJlY2VkZXMsIG5fc2VwX2J5X3NwYWNlLCBwX3NpZ25fcG9zbi4KKworLUxDX01FU1NBR0VTCisgICAgSWYgdGhlIC1MQ19NRVNTQUdFUyBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUKKyAgICBmb2xsb3dpbmcgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZSBsb2NhbGUgaWYgdGhleQorICAgIGFyZSBwcmVzZW50IGluIHRoZSBzb3VyY2U6IHllc2V4cHIsIG5vZXhwcgorCistMTEKKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGRhdGEgaXMgb3V0cHV0IGluIAorICAgIEphdmEgMS4xLnggbG9jYWxlIGZvcm1hdC4KKyAgICAKKy0xMgorICAgIElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZGF0YSBpcyBvdXRwdXQgaW4KKyAgICBKYXZhIDEuMi54IGxvY2FsZSBmb3JtYXQuICBJZiBhbiBvdXRwdXQgZm9ybWF0CisgICAgaXMgbm90IHNwZWNpZmllZCwgLTEyIGlzIHRoZSBkZWZhdWx0LgorICAgIAorLWljdQorICAgIElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZGF0YSBpcyBvdXRwdXQgaW4KKyAgICBJQ1UgbG9jYWxlIGZvcm1hdC4KKworbG9jYWxlTmFtZQorICAgIFRoZSBuYW1lIG9mIHRoZSBsb2NhbGUgaW4gdGhlIGxvY2FsZURhdGFGaWxlLiAgRXguICBlbl9VUy4KKworbG9jYWxlRGF0YUZpbGUKKyAgICBUaGUgbG9jYWxlRGF0YUZpbGUgcGF0aCBpcyByZXF1aXJlZCBhbmQgc3BlY2lmaWVzIHRoZSBwYXRoIAorICAgIHRvIHRoZSBsb2NhbGUgZGF0YSBmaWxlLiAgSWYgYSAiY29weSIgZGlyZWN0aXZlIGlzIGVuY291bnRlcmVkIAorICAgIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGxvY2FsZURhdGFGaWxlLCBDb252ZXJ0UE9TSVhMb2NhbGUgd2lsbCBsb29rCisgICAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBsb2NhbGVEYXRhRmlsZSBmb3IgYWRkaXRpb25hbAorICAgIFBPU0lYIGxvY2FsZSBkYXRhIGZpbGVzLiAgRmlsZXMgbXVzdCBiZSBpbiB0aGUgUE9TSVggZm9ybWF0CisgICAgc3BlY2lmaWVkIGluIElTTy9JRUMgOTk0NS0gd2l0aCBleGNlcHRpb25zIG5vdGVkIGJlbG93LiAgRXhhY3RseQorICAgIG9uZSBsb2NhbGVEYXRhRmlsZSBtdXN0IGJlIHNwZWNpZmllZC4KKyAgICAKK2NoYXJNYXBGaWxlCisgICAgWmVybyBvciBtb3JlIGNoYXJhY3RlciBtYXBwaW5nIGZpbGVzIG1heSBiZSBzcGVjaWZpZWQuICBjaGFyTWFwRmlsZXMgYXJlIHVzZWQKKyAgICB0byBtYXAgc3ltYm9scyBpbiB0aGUgbG9jYWxlRGF0YUZpbGUgdG8gVW5pY29kZSB2YWx1ZXMuICBUaGV5IGFyZSBwcm9jZXNzZWQKKyAgICBhcyBmb2xsb3dzLiAgQ29udmVydFBPU0lYTG9jYWxlIHNlYXJjaHMgZm9yIGEgbGluZSBjb250YWluaW5nIG9ubHkgdGhlCisgICAgd29yZCAiQ0hBUk1BUCIgYW5kIHJlYWRzIHN5bWJvbCBtYXBwaW5ncyB1bnRpbCBpdCByZWFjaGVzIGEgbGluZQorICAgIGNvbnRhaW5pbmcgb25seSB0aGUgd29yZHMgIkVORCBDSEFSTUFQIi4gIFN5bWJvbCBtYXBwaW5ncyBoYXZlCisgICAgdGhlIGZvcm0gIjxTWU1CT0w+IDxVaGhoaD4iIHdoZXJlICI8U1lNQk9MPiIgaXMgYW55IHN5bWJvbCB2YWxpZAorICAgIGluIGEgbG9jYWxlRGF0YUZpbGUgYW5kICJoaGhoIiBpcyBmb3VyIGhleGlkZWNpbWFsIGRpZ2l0cyByZXByZXNlbnRpbmcKKyAgICB0aGUgVW5pY29kZSB2YWx1ZSBmb3IgdGhhdCBzeW1ib2wuICBTdXJyb2dhdGUgcGFpcnMgYXJlIG5vdCBzdXBwb3J0ZWQKKyAgICBpbiBjaGFyTWFwRmlsZXMuIEFuIGV4YW1wbGUgY2hhck1hcEZpbGUgbWlnaHQgY29udGFpbiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgIENIQVJNQVAKKyAgICAgICAgPFNUQVJUX09GX1RFWFQ+ICAgICAgIDxVMDAwMj4KKyAgICAgICAgPEU+ICAgICAgICAgICAgICAgICAgIDxVMDA0NT4KKyAgICAgICAgPHE+ICAgICAgICAgICAgICAgICAgIDxVMDA3MT4KKyAgICAgICAgRU5EIENIQVJNQVAKKworICAgIHNwZWNpZnlpbmcgdGhhdCB0aGUgc3ltYm9sIDxTVEFSVF9PRl9URVhUPiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgCisgICAgdGhlIFVuaWNvZGUgdmFsdWUgb2YgMHgwMDAyIHdoZXJldmVyIGl0IG9jY3Vycy4KKyAgICAKKyAgICBXaGVuIG11bHRpcGxlIGNoYXJNYXBGaWxlcyBhcmUgc3BlY2lmaWVkLCBtYXBwaW5ncyBpbiBmaWxlcyBsaXN0ZWQgCisgICAgbGF0ZXIgdGFrZSBwcmVjZWRlbmNlIG92ZXIgZWFybGllciBvbmVzLgorCisKK0NvbnZlcnNpb24gdG8gSUNVIGFuZCBKYXZhOgorCitDb2xsYXRpb25FbGVtZW50cworICAgIENvbnZlcnRlZCBmcm9tIHRoZSBMQ19DT0xMQVRFIHNlY3Rpb24uICBUaGUgIi4uLiIgZGlyZWN0aXZlIGlzIGlnbm9yZWQuCisgICAgVGhlICJyZXBsYWNlLWFmdGVyIiBkaXJlY3RpdmUgaXMgaWdub3JlZC4KKworQ3VycmVuY3lFbGVtZW50cworICAgIGVsZW1lbnQgMCBpcyBzZXQgdG8gY3VycmVuY3lfc3ltYm9sCisgICAgZWxlbWVudCAxIGlzIHNldCB0byBpbnRfY3Vycl9zeW1ib2wKKyAgICBlbGVtZW50IDIgaXMgc2V0IHRvIG1vbl9kZWNpbWFsX3BvaW50CisgICAgQWxsIG90aGVyIGVsZW1lbnRzIGRlZmF1bHQuCisgICAgCitOdW1iZXJFbGVtZW50cworICAgIGVsZW1lbnQgMCBpcyBzZXQgdG8gZGVjaW1hbF9wb2ludAorICAgIGVsZW1lbnQgMSBpcyBzZXQgdG8gdGhvdXNhbmRzX3NlcAorCitNb250aE5hbWVzIGlzIHNldCB0byBtb24KKworTW9udGhBYmJyZXZpYXRpb25zIGlzIHNldCB0byBhYm1vbgorCitEYXlOYW1lcyBpcyBzZXQgdG8gZGF5CisKK0RheUFiYnJldmlhdGlvbnMgaXMgc2V0IHRvIGFiZGF5CisKK0FtUG1NYXJrZXJzIGlzIHNldCB0byBhbV9wbQorCitEYXRlVGltZVBhdHRlcm5zCisgICAgZWxlbWVudHMgMCB0aHJvdWdoIDMgYXJlIHNldCB0byB0X2ZtdF9hbXBtIHdpdGggdGhlIHBhdHRlcm5zIGNvbnZlcnRlZAorICAgIGVsZW1lbnRzIDQgdGhyb3VnaCA3IGFyZSBzZXQgdG8gZF9mbXQgd2l0aCB0aGUgcGF0dGVybnMgY29udmVydGVkCisKKworQWRpdGlvbiBQT1NJWCBkYXRhIG1heSBiZSBpbmNsdWRlZCBpbiB0aGUgTG9jYWxlIGFzIGZvbGxvd3M6CisKK0xDX1RZUEUgCisgICAgVGhpcyBzZWN0aW9uIGlzIGlnbm9yZWQgdW5sZXNzIHRoZSAtTENfQ1RZUEUgb3B0aW9uIGlzCisgICAgc3BlY2lmaWVkLiAgSWYgdGhlIC1MQ19DVFlQRSBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUKKyAgICBmb2xsb3dpbmcgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZSBsb2NhbGUgaWYgdGhleQorICAgIGFyZSBwcmVzZW50IGluIHRoZSBzb3VyY2U6IHVwcGVyLCBsb3dlciwgYWxwaGEsIGRpZ2l0LCAKKyAgICBzcGFjZSwgY250cmwsIHB1bmN0LCBncmFwaCwgcHJpbnQsIHhkaWdpdCwgYmxhbmssIAorICAgIHRvdXBwZXIsIHRvbG93ZXIuCisKK0xDX01FU1NBR0VTCisgICAgCitMQ19NT05FVEFSWQorICAgIAorTENfTlVNRVJJQworCitMQ19USU1FCisgICAgSWYgdGhlIC1MQ19USU1FIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBmb2xsb3dpbmcKKyAgICBpdGVtcyB3aWxsIGJlIGluY2x1ZGVkIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHNvdXJjZToKKyAgICBhYmRheSwgZGF5LCBhYm1vbiwgbW9uLCBkX3RfZm10LCBkX2Z0bSwgdF9mbXQsIGFtX3BtLAorICAgIHRfZm10X2FtcG0sIGVyYSwgZXJhX3llYXIsIGVyYV9kX2ZtdCwgYWx0X2RpZ2l0cy4KKworTENfQ09MTEFURQorICAgIENvbnZlcnRlZCB0byBDb2xsYXRpb25FbGVtZW50cyBpbiB0aGUgcmVzb3VyY2UgZmlsZS4KKyAgICAKKyAgICAKKyovCisKK3B1YmxpYyBjbGFzcyBDb252ZXJ0UE9TSVhMb2NhbGUgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IE9QVF9MQ19DVFlQRSA9IDB4MDAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IE9QVF9MQ19USU1FID0gMHgwMDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX0xDX05VTUVSSUMgPSAweDAwNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfTENfTU9ORVRBUlkgPSAweDAwODsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfTENfTUVTU0FHRVMgPSAweDAxMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfMTEgPSAweDAyMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfMTIgPSAweDA0MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfSUNVID0gMHgwODA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX0lDVTIgPSAweDEwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfUkFXID0gMHgyMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX1VOS05PV04gPSAweDQwMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRVJfT1BUSU9OU1tdID0geworICAgICAgICAiLUxDX0NUWVBFIiwgCisgICAgICAgICItTENfVElNRSIsIAorICAgICAgICAiLUxDX05VTUVSSUMiLCAKKyAgICAgICAgIi1MQ19NT05FVEFSWSIsCisgICAgICAgICItTENfTUVTU0FHRVMiLAorICAgICAgICAiLTExIiwgCisgICAgICAgICItMTIiLCAKKyAgICAgICAgIi1pY3UiLCAKKyAgICAgICAgIi1pY3UyIiwgCisgICAgICAgICItUkFXIiwKKyAgICAgICAgIi1lbmMiLAorICAgIH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX0NPTlZFUlQgPSAoc2hvcnQpKE9QVF9MQ19DVFlQRSB8IE9QVF9MQ19USU1FIAorICAgICAgICAgICAgfCBPUFRfTENfTlVNRVJJQyB8IE9QVF9MQ19NT05FVEFSWSB8IE9QVF9MQ19NRVNTQUdFUyk7CisgICAgCisgICAgcHJpdmF0ZSBIYXNodGFibGUgZGF0YTsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG5ldyBDb252ZXJ0UE9TSVhMb2NhbGUoYXJncyk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmtub3duIGVycm9yOiAiK3QpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBDb252ZXJ0UE9TSVhMb2NhbGUoU3RyaW5nIGFyZ3NbXSkgeworICAgICAgICBwcm9jZXNzKGFyZ3MpOworICAgICAgICAgICAgLy97e0lOSVRfQ09OVFJPTFMKKwkJLy99fQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBwcm9jZXNzKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgc2hvcnQgb3B0aW9ucyA9IGlkZW50aWZ5T3B0aW9ucyhhcmdzKTsKKyAgICAgICAgU3RyaW5nIGVuYz1udWxsOworICAgICAgICBpZiAoKGFyZ3MubGVuZ3RoIDwgMikgfHwgKChvcHRpb25zICYgT1BUX1VOS05PV04pICE9IDApKSB7CisgICAgICAgICAgICBwcmludFVzYWdlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWZWN0b3IgbWFwRmlsZXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICBMb2NhbGUgbG9jYWxlID0gbnVsbDsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGhpc0FyZyA9IGFyZ3NbaV07CisgICAgICAgICAgICAgICAgaWYgKHRoaXNBcmcuc3RhcnRzV2l0aCgiLSIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKHRoaXNBcmcuc3RhcnRzV2l0aCgiLWVuYyIpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYyA9IGFyZ3NbKytpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9jYWxlRnJvbVN0cmluZyh0aGlzQXJnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSB0aGlzQXJnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1hcEZpbGVzLmFkZEVsZW1lbnQodGhpc0FyZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoZW5jPT1udWxsKXsKKyAgICAgICAgICAgICAgICBlbmM9IkRlZmF1bHQiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChmaWxlTmFtZSA9PSBudWxsKSB8fCAobG9jYWxlID09IG51bGwpIHx8IChvcHRpb25zID09IDApKSB7CisgICAgICAgICAgICAgICAgcHJpbnRVc2FnZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQb3NpeENoYXJNYXAgbWFwID0gbmV3IFBvc2l4Q2hhck1hcCgpOworICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGVudW0gPSBtYXBGaWxlcy5lbGVtZW50cygpOworICAgICAgICAgICAgICAgIHdoaWxlIChlbnVtLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtYXBGaWxlID0gKFN0cmluZyllbnVtLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9jYWxlOiAiK2xvY2FsZSk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9hZGluZyBjaGFyYWN0ZXIgbWFwIGZpbGU6ICIrbWFwRmlsZSk7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXAubG9hZChuZXcgRmlsZShtYXBGaWxlKSxlbmMpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIGxvYWRpbmcgbWFwIGZpbGU6ICIrbWFwRmlsZSsiICAiK2UpOworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGaWxlIHNraXBwZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTeW1ib2xUcmFuc2l0aW9uLnNldENoYXJNYXAobWFwKTsKKyAgICAgICAgICAgICAgICBGaWxlIGRhdGFGaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9jYWxlIGRpcmVjdG9yeTogIitkYXRhRmlsZS5nZXRQYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgUE9TSVhMb2NhbGVSZWFkZXIgcmVhZGVyID0gbmV3IFBPU0lYTG9jYWxlUmVhZGVyKGRhdGFGaWxlLmdldFBhcmVudCgpLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUGFyc2luZyBmaWxlOiAiK2RhdGFGaWxlLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlYWRlci5wYXJzZShkYXRhRmlsZS5nZXROYW1lKCksIChieXRlKShvcHRpb25zICYgT1BUX0NPTlZFUlQpKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDb252ZXJ0aW5nLi4uLiIpOworICAgICAgICAgICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBPUFRfMTEpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBKYXZhMUxvY2FsZVdyaXRlcihTeXN0ZW0ub3V0LCBTeXN0ZW0uZXJyKS53cml0ZShsb2NhbGUsIGRhdGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucyAmIE9QVF8xMikgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEphdmFMb2NhbGVXcml0ZXIoU3lzdGVtLm91dCwgU3lzdGVtLmVycikud3JpdGUobG9jYWxlLCBkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBPUFRfSUNVKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSUNVTG9jYWxlV3JpdGVyKFN5c3RlbS5vdXQsIFN5c3RlbS5lcnIpLndyaXRlKGxvY2FsZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChvcHRpb25zICYgT1BUX0lDVTIpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJQ1UyTG9jYWxlV3JpdGVyKFN5c3RlbS5vdXQsIFN5c3RlbS5lcnIpLndyaXRlKGxvY2FsZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChvcHRpb25zICYgT1BUX1JBVykgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3IElDVUxvY2FsZVdyaXRlcihTeXN0ZW0ub3V0LCBTeXN0ZW0uZXJyKS53cml0ZShsb2NhbGUsIGRhdGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHByaW50VXNhZ2UoKSB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IENvbnZlcnRQT1NJWExvY2FsZSBbLUxDX0NUWVBFXSBbLUxDX1RJTUVdIisKKyAgICAgICAgICAgICIgWy1MQ19OVU1FUklDXSBbLUxDX01PTkVUQVJZXSBbLUxDX01FU1NBR0VTXSBbLTExXSBbLTEyXSBbLWljdV0iKyAKKyAgICAgICAgICAgICIgbG9jYWxlTmFtZSBsb2NhbGVEYXRhRmlsZSBbY2hhck1hcEZpbGUgLi4uXSIpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHNob3J0IGlkZW50aWZ5T3B0aW9ucyhTdHJpbmdbXSBvcHRpb25zKSB7CisgICAgICAgIHNob3J0IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgb3B0aW9ucy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgU3RyaW5nIG9wdGlvbiA9IG9wdGlvbnNbal07CisgICAgICAgICAgICBpZiAob3B0aW9uLnN0YXJ0c1dpdGgoIi0iKSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gb3B0aW9uUmVjb2duaXplZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAoc2hvcnQgaSA9IDA7IGkgPCBVU0VSX09QVElPTlMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVTRVJfT1BUSU9OU1tpXS5lcXVhbHMob3B0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IChzaG9ydCkoMSA8PCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblJlY29nbml6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25SZWNvZ25pemVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBPUFRfVU5LTk9XTjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBMb2NhbGUgbG9jYWxlRnJvbVN0cmluZyhmaW5hbCBTdHJpbmcgbG9jYWxlTmFtZSkgeworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBsb2NhbGVOYW1lOworICAgICAgICBTdHJpbmcgY291bnRyeSA9ICIiOworICAgICAgICBTdHJpbmcgdmFyaWFudCA9ICIiOworICAgICAgICAKKyAgICAgICAgaW50IG5keCA9IGxhbmd1YWdlLmluZGV4T2YoJ18nKTsKKyAgICAgICAgaWYgKG5keCA+PSAwKSB7CisgICAgICAgICAgICBjb3VudHJ5ID0gbGFuZ3VhZ2Uuc3Vic3RyaW5nKG5keCsxKTsKKyAgICAgICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyaW5nKDAsIG5keCk7CisgICAgICAgIH0KKyAgICAgICAgbmR4ID0gY291bnRyeS5pbmRleE9mKCdfJyk7CisgICAgICAgIGlmIChuZHggPj0gMCkgeworICAgICAgICAgICAgdmFyaWFudCA9IGNvdW50cnkuc3Vic3RyaW5nKG5keCsxKTsKKyAgICAgICAgICAgIGNvdW50cnkgPSBjb3VudHJ5LnN1YnN0cmluZygwLCBuZHgpOworICAgICAgICB9CisgICAgICAgIG5keCA9IGNvdW50cnkuaW5kZXhPZignQCcpOworICAgICAgICBpZihuZHg+MCl7CisgICAgICAgICAgICB2YXJpYW50ID0gY291bnRyeS5zdWJzdHJpbmcobmR4KzEpOworICAgICAgICAgICAgY291bnRyeSA9IGNvdW50cnkuc3Vic3RyaW5nKDAsbmR4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudCk7CisgICAgfQorICAgIC8ve3tERUNMQVJFX0NPTlRST0xTCisJLy99fQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9FT0xUcmFuc2l0aW9uLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0VPTFRyYW5zaXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTIwM2YyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9FT0xUcmFuc2l0aW9uLmphdmEKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvRU9MVHJhbnNpdGlvbi5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjI3ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wubG9jYWxlY29udmVydGVyOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIFRoaXMgdHJhbnNpdGlvbiBwYXJzZXMgYW4gZW5kLW9mLWxpbmUgc2VxdWVuY2UuICBUaGUgY29tbWVudCBjaGFyYWN0ZXIKKyAqIGNhbiBiZSBzZXQgdG8gYW4gYXJiaXRyYXJ5IGNoYXJhY3RlciwgYnV0IGl0IGlzIHNoYXJlZCBnbG9iYWxseS4KKyAqIEEgY29tbWVudCBtYXkgb25seSBvY2N1ciBhZnRlciBhbiBlbmQtb2YtbGluZS4KKyAqIEVPTCA6PSA8RU9GPiB8IDxFT0xfQ0hBUlM+IFsgPEVPTF9TRUdNRU5UPiBdKgorICogRU9MX1NFR01FTlQgOj0gPEVPTF9DSEFSUz4gfCA8U1BBQ0VfQ0hBUlM+IHwgPENPTU1FTlQ+CisgKiBTUEFDRV9DSEFSUyA6PSAiIFx0IjsKKyAqIEVPTF9DSEFSUyA9ICJcclxuXHUyMDI4XHUyMDI5IjsKKyAqIENPTU1FTlRfU1RSSU5HIDo9IDxDT01NRU5UX0NIQVI+IDxDT01NRU5UX0JPRFk+CisgKiBDT01NRU5UX0NIQVIgPSAiIyI7CisgKiBDT01NRU5UX0JPRFkgPSBbIH48RU9GPiAmIH48RU9MX0NIQVJTPiBdKgorICovCitwdWJsaWMgY2xhc3MgRU9MVHJhbnNpdGlvbiBleHRlbmRzIENvbXBsZXhUcmFuc2l0aW9uIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFT0xfQ0hBUlMgPSAiXGZcclxuXHUyMDI4XHUyMDI5IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgREVGQVVMVF9DT01NRU5UX0NIQVIgPSAnIyc7CisgICAgcHVibGljIHN0YXRpYyBjaGFyIENPTU1FTlRfQ0hBUiA9IERFRkFVTFRfQ09NTUVOVF9DSEFSOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRU9MVHJhbnNpdGlvbiBHTE9CQUwgPSBuZXcgRU9MVHJhbnNpdGlvbihTVUNDRVNTKTsKKyAgICAKKyAgICAgICAgLyoqIFJlc3RvcmUgdGhlIGNvbW1lbnQgY2hhcmFjdGVyIHRvIHRoZSBkZWZhdWx0IHZhbHVlICovCisgICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgY2hhciBzZXREZWZhdWx0Q29tbWVudENoYXIoKSB7CisgICAgICAgIHJldHVybiBzZXRDb21tZW50Q2hhcihERUZBVUxUX0NPTU1FTlRfQ0hBUik7CisgICAgfQorICAgIAorICAgICAgICAvKiogU2V0IGEgbmV3IGNvbW1lbnQgY2hhcmFjdGVyICovCisgICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgY2hhciBzZXRDb21tZW50Q2hhcihjaGFyIGMpIHsKKyAgICAgICAgY2hhciByZXN1bHQgPSBDT01NRU5UX0NIQVI7CisgICAgICAgIENPTU1FTlRfQ0hBUiA9IGM7CisgICAgICAgIHN0YXRlcyA9IG51bGw7ICAvL2ZsdXNoIHN0YXRlcworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgRU9MVHJhbnNpdGlvbihpbnQgc3VjY2VzcykgeworICAgICAgICBzdXBlcihzdWNjZXNzKTsKKyAgICAgICAgICAgIC8ve3tJTklUX0NPTlRST0xTCisgICAgICAgIC8vfX0KK30KKyAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRzKGludCBjKSB7CisgICAgICAgIHJldHVybiBFT0xfQ0hBUlMuaW5kZXhPZigoY2hhciljKSA+PSAwOworICAgIH0KKyAgICBwcm90ZWN0ZWQgTGV4LlRyYW5zaXRpb25bXVtdIGdldFN0YXRlcygpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChnZXRDbGFzcygpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGVzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvL2NhY2hlIHRoZSBzdGF0ZXMgc28gdGhleSBjYW4gYmUgc2hhcmVkLiAgVGhpcyBzdGF0ZXMKKyAgICAgICAgICAgICAgICAvL25lZWQgdG8gYmUgZmx1c2hlZCBhbmQgcmVidWlsdCB3aGVuIHRoZSBjb21tZW50CisgICAgICAgICAgICAgICAgLy9jaGFyYWN0ZXIgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBzdGF0ZXMgPSBuZXcgTGV4LlRyYW5zaXRpb25bXVtdIHsKKyAgICAgICAgICAgICAgICAgICAgeyAvL3N0YXRlIDA6IAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKEVPTF9DSEFSUywgTGV4LklHTk9SRV9DT05TVU1FLCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkVPRlRyYW5zaXRpb24oU1VDQ0VTUyksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LlBhcnNlRXhjZXB0aW9uVHJhbnNpdGlvbigiYmFkIGNoYXJhY3RlcnMgaW4gRU9MIikKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAvL3N0YXRlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkNoYXJUcmFuc2l0aW9uKENPTU1FTlRfQ0hBUiwgTGV4LklHTk9SRV9DT05TVU1FLCAtMiksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LlN0cmluZ1RyYW5zaXRpb24oRU9MX0NIQVJTLCBMZXguSUdOT1JFX0NPTlNVTUUsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguU3RyaW5nVHJhbnNpdGlvbihTcGFjZVRyYW5zaXRpb24uU1BBQ0VfQ0hBUlMsIExleC5JR05PUkVfQ09OU1VNRSwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKFNVQ0NFU1MpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5EZWZhdWx0VHJhbnNpdGlvbihMZXguSUdOT1JFX1BVVEJBQ0ssIFNVQ0NFU1MpCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsgLy9zdGF0ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKEVPTF9DSEFSUywgTGV4LklHTk9SRV9DT05TVU1FLCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkVPRlRyYW5zaXRpb24oU1VDQ0VTUyksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkRlZmF1bHRUcmFuc2l0aW9uKExleC5JR05PUkVfQ09OU1VNRSwgLTIpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0ZXM7CisgICAgfQorICAgIHByaXZhdGUgc3RhdGljIExleC5UcmFuc2l0aW9uW11bXSBzdGF0ZXM7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBMZXguVHJhbnNpdGlvbltdW10gc3RhdGVzID0ge3sgCisgICAgICAgICAgICAgICAgbmV3IEVPTFRyYW5zaXRpb24oU1VDQ0VTUykuZGVidWcodHJ1ZSksCisgICAgICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKCksCisgICAgICAgICAgICAgICAgbmV3IExleC5QYXJzZUV4Y2VwdGlvblRyYW5zaXRpb24oImJhZCB0ZXN0IGlucHV0IikKKyAgICAgICAgICAgIH19OworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSAiXG5cclxuIyBIZWxsbyBXb3JsZFxuXHJcblxuXG5cclxyXG4jaGVsbG8gIGtkc2pcbiI7CisgICAgICAgICAgICBTdHJpbmdSZWFkZXIgc3IgPSBuZXcgU3RyaW5nUmVhZGVyKHRleHQpOworICAgICAgICAgICAgUHVzaGJhY2tSZWFkZXIgcHIgPSBuZXcgUHVzaGJhY2tSZWFkZXIoc3IpOworICAgICAgICAgICAgTGV4IHBhcnNlciA9IG5ldyBMZXgoc3RhdGVzLCBwcik7CisgICAgICAgICAgICBwYXJzZXIuZGVidWcodHJ1ZSk7CisgICAgICAgICAgICAvL3BhcnNlci5kZWJ1Zyh0cnVlKTsKKyAgICAgICAgICAgIGludCBzID0gcGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgd2hpbGUgKHMgPT0gU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKHBhcnNlci5nZXREYXRhKCkpOworICAgICAgICAgICAgICAgIHMgPSBwYXJzZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy97e0RFQ0xBUkVfQ09OVFJPTFMKKyAgICAvL319Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0VzY2FwZVRyYW5zaXRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvRXNjYXBlVHJhbnNpdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhNmZmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0VzY2FwZVRyYW5zaXRpb24uamF2YQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Fc2NhcGVUcmFuc2l0aW9uLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjggJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIEFuIGVzY2FwZSB0cmFuc2l0aW9uIHBhcnNlcyBhIFBPU0lYIGVzY2FwZSBzZXF1ZW5jZS4gIEFuIGVzY2FwZQorICogc2VxdWVuY2UgY2FuIGJlIGEgaGV4LCBvY3RhbCwgb3IgZGVjaW1hbCBjb25zdGFudCwgb3IgYW4gZXNjYXBlZAorICogY2hhcmFjdGVyLiAgVGhlIHJlc3VsdGFudCB2YWx1ZSBpcyBBTFdBWVMgb24gYnl0ZSBsb25nLiAgTG9uZ2VyCisgKiBlc2NhcGVkIHZhbHVlcyAoaWUuXHhGRjYzKSBvdmVyZmxvdyBhbmQgYXJlIHRydW5jYXRlZC4gIEFuIGVzY2FwZQorICogY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IGFuIEVPTCBzZXF1ZW5jZSBpcyBzaWxlbnRseSBlYXRlbi4KKyAqLworcHVibGljIGNsYXNzIEVzY2FwZVRyYW5zaXRpb24gZXh0ZW5kcyBDb21wbGV4VHJhbnNpdGlvbiB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFc2NhcGVUcmFuc2l0aW9uIEdMT0JBTCA9IG5ldyBFc2NhcGVUcmFuc2l0aW9uKFNVQ0NFU1MpOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIERFRkFVTFRfRVNDQVBFX0NIQVIgPSAnXFwnOworICAgIHB1YmxpYyBzdGF0aWMgY2hhciBFU0NBUEVfQ0hBUiA9IERFRkFVTFRfRVNDQVBFX0NIQVI7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFQ0lNQUwgPSAxOyAgIC8vZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2FzIHBhcnNlZAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPQ1RBTCA9IDI7ICAgICAvL29jdGFsIGVzY2FwZSBzZXF1ZW5jZSB3YXMgcGFyc2VkCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFWCA9IDM7ICAgICAgIC8vaGV4IGVzY2FwZSBzZXF1ZW5jZSB3YXMgcGFyc2VkCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVTQ0FQRSA9IDQ7ICAgIC8vY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZSB3YXMgcGFyc2VkCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVPTCA9IDU7ICAgICAgIC8vYW4gZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSBFT0YgZWF0ZW4KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0NUQUxfQ0hBUlMgPSAiMDEyMzQ1NjciOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUNJTUFMX0NIQVJTID0gIjAxMjM0NTY3ODkiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRVhfQ0hBUlMgPSAiMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRiI7CisgICAgCisgICAgICAgIC8qKiBTZXQgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgdG8gdGhlIGRlZmF1bHQgKi8KKyAgICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBjaGFyIHNldERlZmF1bHRFc2NhcGVDaGFyKCkgeworICAgICAgICByZXR1cm4gc2V0RXNjYXBlQ2hhcihERUZBVUxUX0VTQ0FQRV9DSEFSKTsKKyAgICB9CisgICAgCisgICAgICAgIC8qKiBTZXQgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgKi8KKyAgICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBjaGFyIHNldEVzY2FwZUNoYXIoY2hhciBjKSB7CisgICAgICAgIGNoYXIgcmVzdWx0ID0gRVNDQVBFX0NIQVI7CisgICAgICAgIEVTQ0FQRV9DSEFSID0gYzsKKyAgICAgICAgdGhlU3RhdGVzID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgcHVibGljIEVzY2FwZVRyYW5zaXRpb24oaW50IHN1Y2Nlc3MpIHsKKyAgICAgICAgc3VwZXIoc3VjY2Vzcyk7CisgICAgICAgICAgICAvL3t7SU5JVF9DT05UUk9MUworICAgICAgICAvL319Cit9CisgICAgCisgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhpbnQgYykgeworICAgICAgICByZXR1cm4gRVNDQVBFX0NIQVIgPT0gKGNoYXIpYzsKKyAgICB9CisgICAgCisgICAgICAgIC8qKiBDb252ZXJ0IHRoZSBhY2NlcHRlZCB0ZXh0IGludG8gdGhlIGFwcHJvcHJpYXRlIHVuaWNvZGUgY2hhcmFjdGVyICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlU3VjY2VzcyhMZXggcGFyc2VyLCBTdHJpbmdCdWZmZXIgb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBzd2l0Y2ggKHBhcnNlci5nZXRTdGF0ZSgpKSB7CisgICAgICAgIGNhc2UgREVDSU1BTDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoKGNoYXIpcGFyc2VyLmRhdGFBc051bWJlcigxMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0NUQUw6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKChjaGFyKXBhcnNlci5kYXRhQXNOdW1iZXIoOCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSEVYOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgoY2hhcilwYXJzZXIuZGF0YUFzTnVtYmVyKDE2KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFU0NBUEU6CisgICAgICAgICAgICBwYXJzZXIuYXBwZW5kRGF0YVRvKG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT0w6CisgICAgICAgICAgICAvL3NpbGVudGx5IGVhdCB0aGUgRU9MIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy9zaG91bGQgbmV2ZXIgZ2V0IGhlcmUKKyAgICAgICAgICAgIHRocm93IG5ldyBMZXguUGFyc2VFeGNlcHRpb24oIkludGVybmFsIGVycm9yIHBhcnNpbmcgZXNjYXBlIHNlcXVlbmNlIik7CisvLyAgICAgICAgICBwYXJzZXIuYXBwZW5kRGF0YVRvKG91dHB1dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIC8qKiByZXR1cm4gdGhlIHN0YXRlcyBmb3IgdGhpcyB0cmFuc2FjdGlvbiAqLworICAgIHByb3RlY3RlZCBMZXguVHJhbnNpdGlvbltdW10gZ2V0U3RhdGVzKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKGdldENsYXNzKCkpIHsKKyAgICAgICAgICAgIGlmICh0aGVTdGF0ZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vY2FjaGUgdGhlIHN0YXRlcyBzbyB0aGV5IGNhbiBiZSBzaGFyZWQuICBUaGV5IG11c3QKKyAgICAgICAgICAgICAgICAvL2JlIHJlYnVpbHQgd2hlbiB0aGUgZXNjYXBlIGNoYXJhY3RlciBpcyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgIHRoZVN0YXRlcyA9IG5ldyBMZXguVHJhbnNpdGlvbltdW10geworICAgICAgICAgICAgICAgICAgICB7IC8vc3RhdGUgMDogCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkNoYXJUcmFuc2l0aW9uKEVTQ0FQRV9DSEFSLCBMZXguSUdOT1JFX0NPTlNVTUUsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguUGFyc2VFeGNlcHRpb25UcmFuc2l0aW9uKCJpbGxlZ2FsIGVzY2FwZSBjaGFyYWN0ZXIiKQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7IC8vc3RhdGUgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguRU9GVHJhbnNpdGlvbihPQ1RBTCksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkNoYXJUcmFuc2l0aW9uKCdkJywgTGV4LklHTk9SRV9DT05TVU1FLCAtMyksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkNoYXJUcmFuc2l0aW9uKCd4JywgTGV4LklHTk9SRV9DT05TVU1FLCAtMiksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LlN0cmluZ1RyYW5zaXRpb24oT0NUQUxfQ0hBUlMsIExleC5BQ0NVTVVMQVRFX0NPTlNVTUUsIC00KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguQ2hhclRyYW5zaXRpb24oRVNDQVBFX0NIQVIsIExleC5BQ0NVTVVMQVRFX0NPTlNVTUUsIEVTQ0FQRSksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRU9MVHJhbnNpdGlvbihFT0wpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5EZWZhdWx0VHJhbnNpdGlvbihMZXguQUNDVU1VTEFURV9DT05TVU1FLCBFU0NBUEUpCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsgLy9zdGF0ZSAyOiBoZXgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguRU9GVHJhbnNpdGlvbihIRVgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKEhFWF9DSEFSUywgTGV4LkFDQ1VNVUxBVEVfQ09OU1VNRSwgLTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5EZWZhdWx0VHJhbnNpdGlvbihMZXguSUdOT1JFX1BVVEJBQ0ssIEhFWCkKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAvL3N0YXRlIDM6IGRlY2ltYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguRU9GVHJhbnNpdGlvbihERUNJTUFMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguU3RyaW5nVHJhbnNpdGlvbihERUNJTUFMX0NIQVJTLCBMZXguQUNDVU1VTEFURV9DT05TVU1FLCAtMyksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkRlZmF1bHRUcmFuc2l0aW9uKExleC5JR05PUkVfUFVUQkFDSywgREVDSU1BTCkKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAvL3N0YXRlIDQ6IG9jdGFsCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkVPRlRyYW5zaXRpb24oT0NUQUwpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKE9DVEFMX0NIQVJTLCBMZXguQUNDVU1VTEFURV9DT05TVU1FLCAtNCksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkRlZmF1bHRUcmFuc2l0aW9uKExleC5JR05PUkVfUFVUQkFDSywgT0NUQUwpCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhlU3RhdGVzOworICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBMZXguVHJhbnNpdGlvbltdW10gdGhlU3RhdGVzID0gbnVsbDsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIExleC5UcmFuc2l0aW9uW11bXSBzdGF0ZXMgPSB7eyAKKyAgICAgICAgICAgICAgICBuZXcgRXNjYXBlVHJhbnNpdGlvbihTVUNDRVNTKSwKKyAgICAgICAgICAgICAgICBuZXcgTGV4LkVPRlRyYW5zaXRpb24oKSwKKyAgICAgICAgICAgICAgICBuZXcgTGV4LlBhcnNlRXhjZXB0aW9uVHJhbnNpdGlvbigiYmFkIHRlc3QgaW5wdXQiKQorICAgICAgICAgICAgfX07CisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9ICJcXGQxMDBcXHhBZlxcXFxcXDc3N1xcXG5cXDEyM1xceDIwMjhcXHgyMDI5IjsKKyAgICAgICAgICAgIFN0cmluZ1JlYWRlciBzciA9IG5ldyBTdHJpbmdSZWFkZXIodGV4dCk7CisgICAgICAgICAgICBQdXNoYmFja1JlYWRlciBwciA9IG5ldyBQdXNoYmFja1JlYWRlcihzcik7CisgICAgICAgICAgICBMZXggcGFyc2VyID0gbmV3IExleChzdGF0ZXMsIHByKTsKKyAgICAgICAgICAgIC8vcGFyc2VyLmRlYnVnKHRydWUpOworICAgICAgICAgICAgaW50IHMgPSBwYXJzZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICB3aGlsZSAocyA9PSBTVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcnNlci5nZXRTdGF0ZSgpKTsKKyAgICAgICAgICAgICAgICBzID0gcGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgICAgICB9CisgICAgfQorICAgIC8ve3tERUNMQVJFX0NPTlRST0xTCisgICAgLy99fQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9JQ1UyTG9jYWxlV3JpdGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0lDVTJMb2NhbGVXcml0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMzI4N2QyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9JQ1UyTG9jYWxlV3JpdGVyLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvSUNVMkxvY2FsZVdyaXRlci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA2LzIwIDAxOjE3OjEyICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wubG9jYWxlY29udmVydGVyOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgSUNVMkxvY2FsZVdyaXRlciBleHRlbmRzIExvY2FsZVdyaXRlciB7CisgICAgcHVibGljIElDVTJMb2NhbGVXcml0ZXIoUHJpbnRTdHJlYW0gb3V0KSB7CisgICAgICAgIHN1cGVyKG91dCk7CisgICAgICAgICAgICAvL3t7SU5JVF9DT05UUk9MUworICAgICAgICAvL319Cit9CisgICAgcHVibGljIElDVTJMb2NhbGVXcml0ZXIoUHJpbnRTdHJlYW0gb3V0LCBQcmludFN0cmVhbSBlcnIpIHsKKyAgICAgICAgc3VwZXIob3V0LCBlcnIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCBvcGVuKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgcHJpbnQobG9jYWxlLnRvU3RyaW5nKCkpOworICAgICAgICBwcmludGxuKCIgeyIpOworICAgICAgICBpbmRlbnQoKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGUoU3RyaW5nIHRhZywgU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIHByaW50KHRhZyk7CisgICAgICAgIHByaW50KCIgeyAiKTsKKyAgICAgICAgcHJpbnRTdHJpbmcodmFsdWUpOworICAgICAgICBwcmludGxuKCIgfSIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZShTdHJpbmcgdGFnLCBTdHJpbmdbXSB2YWx1ZSkgeworICAgICAgICBpZiAodGFnICE9IG51bGwpIHsKKyAgICAgICAgICAgIHByaW50KHRhZyk7CisgICAgICAgICAgICBwcmludGxuKCIgeyAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50bG4oInsiKTsKKyAgICAgICAgfQorICAgICAgICBpbmRlbnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwcmludFN0cmluZyh2YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgcHJpbnRsbigiLCIpOworICAgICAgICAgICAgfQorICAgICAgICBvdXRkZW50KCk7CisgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGUoU3RyaW5nIHRhZywgT2JqZWN0IG8pIHsKKyAgICAgICAgaWYgKCJDb2xsYXRpb25FbGVtZW50cyIuZXF1YWxzKHRhZykpIHsKKyAgICAgICAgICAgIHdyaXRlVGFnZ2VkKHRhZywoT2JqZWN0W11bXSlvKTsKKyAgICAgICAgfSBlbHNlIGlmICghKG8gaW5zdGFuY2VvZiBDb2xsYXRpb25JdGVtW10pKSB7CisgICAgICAgICAgICBzdXBlci53cml0ZSh0YWcsIG8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ29sbGF0aW9uSXRlbVtdIGl0ZW1zID0gKENvbGxhdGlvbkl0ZW1bXSlvOworICAgICAgICAgICAgaWYoaXRlbXNbMF0hPW51bGwpeworICAgICAgICAgICAgICAgIHByaW50KCJTZXF1ZW5jZSIpOworICAgICAgICAgICAgICAgIHByaW50bG4oIiB7ICIpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoaXRlbXNbaV0hPW51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRTdHJpbmcoaXRlbXNbaV0udG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0uY29tbWVudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiVG8oMzApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIvLyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50bG4oaXRlbXNbaV0uY29tbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRsbigifSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVGFnZ2VkKFN0cmluZyB0YWcsIE9iamVjdFtdW10gdmFsdWUpIHsKKyAgICAgICAgcHJpbnQodGFnKTsKKyAgICAgICAgcHJpbnRsbigiIHsgIik7CisgICAgICAgIGluZGVudCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHdyaXRlKChTdHJpbmcpdmFsdWVbaV1bMF0sIHZhbHVlW2ldWzFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgb3V0ZGVudCgpOworICAgICAgICBwcmludGxuKCJ9Iik7CisgICAgfQorICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlMkQoU3RyaW5nIHRhZywgU3RyaW5nW11bXSB2YWx1ZSkgeworICAgICAgICBwcmludCh0YWcpOworICAgICAgICBwcmludGxuKCIgeyAiKTsKKyAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgd3JpdGUobnVsbCwgdmFsdWVbaV0pOworICAgICAgICAgICAgfQorICAgICAgICBvdXRkZW50KCk7CisgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVUYWdnZWQoU3RyaW5nIHRhZywgU3RyaW5nW11bXSB2YWx1ZSkgeworICAgICAgICBwcmludCh0YWcpOworICAgICAgICBwcmludGxuKCIgeyAiKTsKKyAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgd3JpdGUodmFsdWVbaV1bMF0sIHZhbHVlW2ldWzFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgb3V0ZGVudCgpOworICAgICAgICBwcmludGxuKCJ9Iik7CisgICAgfQorICAgIHByb3RlY3RlZCB2b2lkIGNsb3NlKCkgeworICAgICAgICBvdXRkZW50KCk7CisgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN0cmluZ0pvaW5pbmdDaGFyYWN0ZXIoKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNFc2NhcGVDaGFyKGZpbmFsIGNoYXIgYykgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRFc2NhcGVDaGFyKCkgeworICAgICAgICByZXR1cm4gIiV1IjsKKyAgICB9CisgICAgLy97e0RFQ0xBUkVfQ09OVFJPTFMKKyAgICAvL319Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9JQ1VMb2NhbGVXcml0ZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvSUNVTG9jYWxlV3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzFhNDZhOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvSUNVTG9jYWxlV3JpdGVyLmphdmEKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvSUNVTG9jYWxlV3JpdGVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDYvMjAgMDE6MTc6MTIgJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBJQ1VMb2NhbGVXcml0ZXIgZXh0ZW5kcyBMb2NhbGVXcml0ZXIgeworICAgIHB1YmxpYyBJQ1VMb2NhbGVXcml0ZXIoUHJpbnRTdHJlYW0gb3V0KSB7CisgICAgICAgIHN1cGVyKG91dCk7CisgICAgfQorICAgIHB1YmxpYyBJQ1VMb2NhbGVXcml0ZXIoUHJpbnRTdHJlYW0gb3V0LCBQcmludFN0cmVhbSBlcnIpIHsKKyAgICAgICAgc3VwZXIob3V0LCBlcnIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCBvcGVuKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgcHJpbnQobG9jYWxlLnRvU3RyaW5nKCkpOworICAgICAgICBwcmludGxuKCIgeyIpOworICAgICAgICBpbmRlbnQoKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGUoU3RyaW5nIHRhZywgT2JqZWN0IG8pIHsKKyAgICAgICAgaWYgKCJDb2xsYXRpb25FbGVtZW50cyIuZXF1YWxzKHRhZykpIHsKKyAgICAgICAgICAgIGlmKG8gaW5zdGFuY2VvZiBPYmplY3RbXVtdKXsKKyAgICAgICAgICAgICAgICB3cml0ZVRhZ2dlZCh0YWcsKE9iamVjdFtdW10pbyk7CisgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgIHdyaXRlKHRhZywoU3RyaW5nKW8pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCEobyBpbnN0YW5jZW9mIENvbGxhdGlvbkl0ZW1bXSkpIHsKKyAgICAgICAgICAgIHN1cGVyLndyaXRlKHRhZywgbyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDb2xsYXRpb25JdGVtW10gaXRlbXMgPSAoQ29sbGF0aW9uSXRlbVtdKW87CisgICAgICAgICAgICBpZihpdGVtc1swXSE9bnVsbCl7CisJICAgICAgICAgICAgcHJpbnQoIlNlcXVlbmNlIik7CisJICAgICAgICAgICAgcHJpbnRsbigiIHsgIik7CisJICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCSAgICAgICAgICAgICAgICBpZihpdGVtc1tpXSE9bnVsbCl7CisJICAgICAgICAgICAgICAgICAgICBwcmludFN0cmluZyhpdGVtc1tpXS50b1N0cmluZygpKTsKKwkgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtc1tpXS5jb21tZW50ICE9IG51bGwpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0YWJUbygzMCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIi8vIik7CisJICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRsbihpdGVtc1tpXS5jb21tZW50KTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBwcmludGxuKCJ9Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGUoU3RyaW5nIHRhZywgU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIHByaW50KHRhZyk7CisgICAgICAgIHByaW50KCIgeyAiKTsKKyAgICAgICAgcHJpbnRTdHJpbmcodmFsdWUpOworICAgICAgICBwcmludGxuKCIgfSIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZShTdHJpbmcgdGFnLCBTdHJpbmdbXSB2YWx1ZSkgeworICAgICAgICBpZiAodGFnICE9IG51bGwpIHsKKyAgICAgICAgICAgIHByaW50KHRhZyk7CisgICAgICAgICAgICBwcmludGxuKCIgeyAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50bG4oInsiKTsKKyAgICAgICAgfQorICAgICAgICBpbmRlbnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwcmludFN0cmluZyh2YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgcHJpbnRsbigiLCIpOworICAgICAgICAgICAgfQorICAgICAgICBvdXRkZW50KCk7CisgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGUyRChTdHJpbmcgdGFnLCBTdHJpbmdbXVtdIHZhbHVlKSB7CisgICAgICAgIHByaW50KHRhZyk7CisgICAgICAgIHByaW50bG4oIiB7ICIpOworICAgICAgICBpbmRlbnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB3cml0ZShudWxsLCB2YWx1ZVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgcHJpbnRsbigifSIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVRhZ2dlZChTdHJpbmcgdGFnLCBPYmplY3RbXVtdIHZhbHVlKSB7CisgICAgICAgIHByaW50KHRhZyk7CisgICAgICAgIHByaW50bG4oIiB7ICIpOworICAgICAgICBpbmRlbnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB3cml0ZSgoU3RyaW5nKXZhbHVlW2ldWzBdLCB2YWx1ZVtpXVsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgcHJpbnRsbigifSIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVRhZ2dlZChTdHJpbmcgdGFnLCBTdHJpbmdbXVtdIHZhbHVlKSB7CisgICAgICAgIHByaW50KHRhZyk7CisgICAgICAgIHByaW50bG4oIiB7ICIpOworICAgICAgICBpbmRlbnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB3cml0ZSh2YWx1ZVtpXVswXSwgdmFsdWVbaV1bMV0pOworICAgICAgICAgICAgfQorICAgICAgICBvdXRkZW50KCk7CisgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgcHJpbnRsbigifSIpOworICAgICAgICBzdXBlci5jbG9zZUZpbGVIYW5kbGUoKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN0cmluZ0pvaW5pbmdDaGFyYWN0ZXIoKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0phdmExTG9jYWxlV3JpdGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0phdmExTG9jYWxlV3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmEwYzI5OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvSmF2YTFMb2NhbGVXcml0ZXIuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9KYXZhMUxvY2FsZVdyaXRlci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjI4ICQgCisgKiAkUmV2aXNpb246IDEuMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wubG9jYWxlY29udmVydGVyOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworCitwdWJsaWMgY2xhc3MgSmF2YTFMb2NhbGVXcml0ZXIgZXh0ZW5kcyBMb2NhbGVXcml0ZXIgeworICAgIHB1YmxpYyBKYXZhMUxvY2FsZVdyaXRlcihQcmludFN0cmVhbSBvdXQpIHsKKyAgICAgICAgc3VwZXIob3V0KTsKKyAgICAgICAgICAgIC8ve3tJTklUX0NPTlRST0xTCisgICAgICAgIC8vfX0KKyAgICB9CisgICAgCisgICAgcHVibGljIEphdmExTG9jYWxlV3JpdGVyKFByaW50U3RyZWFtIG91dCwgUHJpbnRTdHJlYW0gZXJyKSB7CisgICAgICAgIHN1cGVyKG91dCwgZXJyKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgd3JpdGUoTG9jYWxlIGxvY2FsZSwgSGFzaHRhYmxlIGxvY2FsZURhdGEpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEhhc2h0YWJsZSB0ZW1wID0gbmV3IE5ldXRyYWxUb0oxQ29udmVydGVyKGxvY2FsZSkuY29udmVydChsb2NhbGVEYXRhKTsKKyAgICAgICAgICAgIHN1cGVyLndyaXRlKGxvY2FsZSwgdGVtcCk7CisgICAgICAgIH0gY2F0Y2ggKExvY2FsZUNvbnZlcnRlci5Db252ZXJzaW9uRXJyb3IgZSkgeworICAgICAgICAgICAgZXJyLnByaW50bG4oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBvcGVuKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgcHJpbnQoSEVBREVSMSk7CisgICAgICAgIHByaW50KGxvY2FsZS50b1N0cmluZygpKTsKKyAgICAgICAgcHJpbnQoSEVBREVSMik7CisgICAgICAgIHByaW50KGxvY2FsZS50b1N0cmluZygpKTsKKyAgICAgICAgcHJpbnRsbihIRUFERVIzKTsKKyAgICAgICAgaW5kZW50KDMpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZShTdHJpbmcgdGFnLCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgcHJpbnQoInsgIik7CisgICAgICAgIHByaW50U3RyaW5nKHRhZyk7CisgICAgICAgIHByaW50KCIsICIpOworICAgICAgICBwcmludFN0cmluZyh2YWx1ZSk7CisgICAgICAgIHByaW50bG4oIiB9LCIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZShTdHJpbmcgdGFnLCBTdHJpbmdbXSB2YWx1ZSkgeworICAgICAgICBwcmludCgieyAiKTsKKyAgICAgICAgaWYgKHRhZyAhPSBudWxsKSB7CisgICAgICAgICAgICBwcmludFN0cmluZyh0YWcpOworICAgICAgICAgICAgcHJpbnRsbigiLCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRsbigiIik7CisgICAgICAgIH0KKyAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICBwcmludGxuKCJuZXcgU3RyaW5nW10geyIpOworICAgICAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBwcmludFN0cmluZyh2YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgICAgIHByaW50bG4oIiwiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRkZW50KCk7CisgICAgICAgICAgICBwcmludGxuKCJ9Iik7CisgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgcHJpbnRsbigifSwiKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGUyRChTdHJpbmcgdGFnLCBTdHJpbmdbXVtdIHZhbHVlKSB7CisgICAgICAgIHByaW50KCJ7ICIpOworICAgICAgICBwcmludFN0cmluZyh0YWcpOworICAgICAgICBwcmludGxuKCIsIik7CisgICAgICAgIGluZGVudCgpOworICAgICAgICAgICAgcHJpbnRsbigibmV3IFN0cmluZ1tdW10geyIpOworICAgICAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBwcmludGxuKCJ7Iik7CisgICAgICAgICAgICAgICAgICAgIGluZGVudCgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZhbHVlW2ldLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludFN0cmluZyh2YWx1ZVtpXVtqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGxuKCIsIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0ZGVudCgpOworICAgICAgICAgICAgICAgICAgICBwcmludGxuKCJ9LCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICAgICAgb3V0ZGVudCgpOworICAgICAgICBwcmludGxuKCJ9LCIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVRhZ2dlZChTdHJpbmcgdGFnLCBTdHJpbmdbXVtdIHZhbHVlKSB7CisgICAgICAgIHByaW50KCJ7ICIpOworICAgICAgICBwcmludFN0cmluZyh0YWcpOworICAgICAgICBwcmludGxuKCIsIik7CisgICAgICAgIGluZGVudCgpOworICAgICAgICAgICAgcHJpbnRsbigibmV3IFN0cmluZ1tdW10geyIpOworICAgICAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB3cml0ZSh2YWx1ZVtpXVswXSwgdmFsdWVbaV1bMV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICAgICAgb3V0ZGVudCgpOworICAgICAgICBwcmludGxuKCJ9LCIpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgb3V0ZGVudCgzKTsKKyAgICAgICAgcHJpbnQoRk9PVEVSKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBhcHBlbmRFc2NhcGVkQ2hhcihjaGFyIGMsIFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKKyAgICAgICAgaWYgKGMgPCAnXHUwMDIwJyB8fCBjID09ICciJyB8fCBjID09ICdcXCcpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKEhFWF9ESUdJVFsoYyAmIDA3MDApID4+IDZdKTsgLy8gSEVYX0RJR0lUIHdvcmtzIGZvciBvY3RhbAorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChIRVhfRElHSVRbKGMgJiAwMDcwKSA+PiAzXSk7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKEhFWF9ESUdJVFsoYyAmIDAwMDcpXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdXBlci5hcHBlbmRFc2NhcGVkQ2hhcihjLCBidWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTdHJpbmdKb2luaW5nQ2hhcmFjdGVyKCkgeworICAgICAgICByZXR1cm4gIisiOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSMSA9IAorICAgICAgICAgICAgInBhY2thZ2UgamF2YS50ZXh0LnJlc291cmNlcztcbiIrCisgICAgICAgICAgICAicHVibGljIGNsYXNzIExvY2FsZUVsZW1lbnRzXyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUjIgPSAKKyAgICAgICAgICAgICIgZXh0ZW5kcyBMb2NhbGVEYXRhIHtcbiIrCisgICAgICAgICAgICAiICAgIHB1YmxpYyBMb2NhbGVFbGVtZW50c18iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVIzID0gCisgICAgICAgICIoKSB7XG4iKworICAgICAgICAiICAgICAgICBzdXBlci5pbml0KHRhYmxlKTtcbiIrCisgICAgICAgICIgICAgfVxuIisKKyAgICAgICAgIiAgICBzdGF0aWMgU3RyaW5nIHRhYmxlIFtdPSI7CisgICAgICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT09URVIgPSAKKyAgICAgICAgIiAgICB9XG4iKworICAgICAgICAifSI7CisgICAgLy97e0RFQ0xBUkVfQ09OVFJPTFMKKyAgICAvL319Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0phdmFMb2NhbGVXcml0ZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvSmF2YUxvY2FsZVdyaXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmMTBmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0phdmFMb2NhbGVXcml0ZXIuamF2YQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9KYXZhTG9jYWxlV3JpdGVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjkgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBKYXZhTG9jYWxlV3JpdGVyIGV4dGVuZHMgTG9jYWxlV3JpdGVyIHsKKyAgICBwdWJsaWMgSmF2YUxvY2FsZVdyaXRlcihQcmludFN0cmVhbSBvdXQpIHsKKyAgICAgICAgc3VwZXIob3V0KTsKKyAgICB9CisgICAgcHVibGljIEphdmFMb2NhbGVXcml0ZXIoUHJpbnRTdHJlYW0gb3V0LCBQcmludFN0cmVhbSBlcnIpIHsKKyAgICAgICAgc3VwZXIob3V0LCBlcnIpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBvcGVuKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgcHJpbnRsbihIRUFERVIpOworICAgICAgICBpbmRlbnQoMyk7CisgICAgfQorICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlKFN0cmluZyB0YWcsIE9iamVjdCBvKSB7CisgICAgICAgIGlmICgiQ29sbGF0aW9uRWxlbWVudHMiLmVxdWFscyh0YWcpKSB7CisgICAgICAgICAgICAgd3JpdGVUYWdnZWQodGFnLChPYmplY3RbXVtdKW8pOworICAgICAgICB9IGVsc2UgaWYgKCEobyBpbnN0YW5jZW9mIENvbGxhdGlvbkl0ZW1bXSkpIHsKKyAgICAgICAgICAgIHN1cGVyLndyaXRlKHRhZywgbyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDb2xsYXRpb25JdGVtW10gaXRlbXMgPSAoQ29sbGF0aW9uSXRlbVtdKW87CisgICAgICAgICAgICBwcmludCgieyAiKTsKKyAgICAgICAgICAgIHByaW50U3RyaW5nKCJDb2xsYXRpb25FbGVtZW50cyIpOworICAgICAgICAgICAgcHJpbnRsbigiLCAiKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZihpdGVtc1tpXSE9bnVsbCl7CisgICAgICAgICAgICAgICAgICAgIHByaW50U3RyaW5nKGl0ZW1zW2ldLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0uY29tbWVudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiKyIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFiVG8oMzApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIi8vIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGxuKGl0ZW1zW2ldLmNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRsbigiKyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRsbigiXCJcIiIpOworICAgICAgICAgICAgcHJpbnRsbigiIH0sIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShTdHJpbmcgdGFnLCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgcHJpbnQoInsgIik7CisgICAgICAgIHByaW50U3RyaW5nKHRhZyk7CisgICAgICAgIHByaW50KCIsICIpOworICAgICAgICBwcmludFN0cmluZyh2YWx1ZSk7CisgICAgICAgIHByaW50bG4oIiB9LCIpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCB3cml0ZShTdHJpbmcgdGFnLCBTdHJpbmdbXSB2YWx1ZSkgeworICAgICAgICBwcmludCgieyAiKTsKKyAgICAgICAgaWYgKHRhZyAhPSBudWxsKSB7CisgICAgICAgICAgICBwcmludFN0cmluZyh0YWcpOworICAgICAgICAgICAgcHJpbnRsbigiLCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRsbigiIik7CisgICAgICAgIH0KKyAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICBwcmludGxuKCJuZXcgU3RyaW5nW10geyIpOworICAgICAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBwcmludFN0cmluZyh2YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgICAgIHByaW50bG4oIiwiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRkZW50KCk7CisgICAgICAgICAgICBwcmludGxuKCJ9Iik7CisgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgcHJpbnRsbigifSwiKTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgd3JpdGUyRChTdHJpbmcgdGFnLCBTdHJpbmdbXVtdIHZhbHVlKSB7CisgICAgICAgIHByaW50KCJ7ICIpOworICAgICAgICBwcmludFN0cmluZyh0YWcpOworICAgICAgICBwcmludGxuKCIsIik7CisgICAgICAgIGluZGVudCgpOworICAgICAgICAgICAgcHJpbnRsbigibmV3IFN0cmluZ1tdW10geyIpOworICAgICAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBwcmludGxuKCJ7Iik7CisgICAgICAgICAgICAgICAgICAgIGluZGVudCgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZhbHVlW2ldLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludFN0cmluZyh2YWx1ZVtpXVtqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGxuKCIsIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0ZGVudCgpOworICAgICAgICAgICAgICAgICAgICBwcmludGxuKCJ9LCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICAgICAgb3V0ZGVudCgpOworICAgICAgICBwcmludGxuKCJ9LCIpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRhZ2dlZChTdHJpbmcgdGFnLCBTdHJpbmdbXVtdIHZhbHVlKSB7CisgICAgICAgIHByaW50KCJ7ICIpOworICAgICAgICBwcmludFN0cmluZyh0YWcpOworICAgICAgICBwcmludGxuKCIsIik7CisgICAgICAgIGluZGVudCgpOworICAgICAgICAgICAgcHJpbnRsbigibmV3IFN0cmluZ1tdW10geyIpOworICAgICAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB3cml0ZSh2YWx1ZVtpXVswXSwgdmFsdWVbaV1bMV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGRlbnQoKTsKKyAgICAgICAgICAgIHByaW50bG4oIn0iKTsKKyAgICAgICAgb3V0ZGVudCgpOworICAgICAgICBwcmludGxuKCJ9LCIpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRhZ2dlZChTdHJpbmcgdGFnLCBPYmplY3RbXVtdIHZhbHVlKSB7CisgICAgICAgIHByaW50KCJ7ICIpOworICAgICAgICBwcmludFN0cmluZyh0YWcpOworICAgICAgICBwcmludGxuKCIsIik7CisgICAgICAgIGluZGVudCgpOworICAgICAgICAgICAgcHJpbnRsbigibmV3IFN0cmluZ1tdW10geyIpOworICAgICAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB3cml0ZSgoU3RyaW5nKXZhbHVlW2ldWzBdLCB2YWx1ZVtpXVsxXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0ZGVudCgpOworICAgICAgICAgICAgcHJpbnRsbigifSIpOworICAgICAgICBvdXRkZW50KCk7CisgICAgICAgIHByaW50bG4oIn0sIik7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICBvdXRkZW50KDMpOworICAgICAgICBwcmludChGT09URVIpOworICAgICAgICBwcmludGxuKCIiKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBhcHBlbmRFc2NhcGVkQ2hhcihjaGFyIGMsIFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKKyAgICAgICAgaWYgKGMgPCAnXHUwMDIwJyB8fCBjID09ICciJyB8fCBjID09ICdcXCcpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKEhFWF9ESUdJVFsoYyAmIDA3MDApID4+IDZdKTsgLy8gSEVYX0RJR0lUIHdvcmtzIGZvciBvY3RhbAorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChIRVhfRElHSVRbKGMgJiAwMDcwKSA+PiAzXSk7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKEhFWF9ESUdJVFsoYyAmIDAwMDcpXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdXBlci5hcHBlbmRFc2NhcGVkQ2hhcihjLCBidWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTdHJpbmdKb2luaW5nQ2hhcmFjdGVyKCkgeworICAgICAgICByZXR1cm4gIisiOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSID0gCisgICAgICAgICJwYWNrYWdlIGphdmEudGV4dC5yZXNvdXJjZXM7XG4iKworICAgICAgICAiaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7XG4iKworICAgICAgICAicHVibGljIGNsYXNzIFRlc3RMb2NhbGVFbGVtZW50cyBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7XG4iKworICAgICAgICAiICAgIHB1YmxpYyBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkge1xuIisKKyAgICAgICAgIiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsiOworICAgICAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PVEVSID0gCisgICAgICAgICIgICAgICAgIH07XG4iKworICAgICAgICAiICAgIH1cbiIrCisgICAgICAgICJ9IjsKKyAgICAvL3t7REVDTEFSRV9DT05UUk9MUworICAgIC8vfX0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTGV4LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0xleC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5ZTQ1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0xleC5qYXZhCkBAIC0wLDAgKzEsNDIwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0xleC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjI5ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wubG9jYWxlY29udmVydGVyOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIEEgTGV4IGlzIGEgc3RhdGUgbWFjaGluZS4gIFRyYW5zaXRpb25zIGNhbiBiZSBhY3RpdmF0ZWQKKyAqIGFyYml0cmFyaWx5IGFuZCBjYW4gY29uc3VtZSBhcmJpdHJhcnkgYW1vdW50cyBvZiB0ZXh0LgorICogQSB0cmFuc2l0aW9uIHNpbXBseSBzYXlzIGl0IGNhbiBjb25zdW1lIHRoZSBuZXh0IGNoYXJhY3RlcgorICogYW5kIHJldHVybnMgdGhlIHN0YXRlIHRoYXQgdGhlIG1hY2hpbmUgc2hvdWxkIHRyYW5zaXRpb24gaW50by4KKyAqIFN0YXRlcyB0aGF0IGFyZSA+IDAgYXJlIGZpbmFsIHN0YXRlcyBhbmQgY2F1c2UgdGhlIG5leHRUb2tlbgorICogcm91dGluZSB0byByZXR1cm4gYSB2YWx1ZS4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIExleCB7CisgICAgcHJpdmF0ZSBUcmFuc2l0aW9uW11bXSBzdGF0ZXM7ICAvL2ZpbmFsCisgICAgcHJpdmF0ZSBQdXNoYmFja1JlYWRlciBpbnB1dDsgICAvL2ZpbmFsCisgICAgcHJpdmF0ZSBpbnQgc3RhdGU7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGF0YTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZ0J1ZmZlciBkYXRhQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1Z01lc3NhZ2VzT247CisgICAgcHJpdmF0ZSBTdHJpbmcgZGVidWdUYWc7CisgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5EX09GX0ZJTEUgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKworICAgICAgICAvKiogQ29uc3RydWN0IGEgbmV3IG1hY2hpbmUuICBOT1RFOiBzZXRJbnB1dCBtdXN0IGJlCisgICAgICAgICAqIGNhbGxlZCBiZWZvcmUgbmV4dFRva2VuIGlzIGNhbGxlZCAqLworICAgIHB1YmxpYyBMZXgoZmluYWwgVHJhbnNpdGlvbltdW10gc3RhdGVzKSB7CisgICAgICAgIHRoaXMuc3RhdGVzID0gc3RhdGVzOworICAgICAgICAgICAgLy97e0lOSVRfQ09OVFJPTFMKKwkJLy99fQorfQorCisgICAgICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgbWFjaGluZS4gKi8KKyAgICBwdWJsaWMgTGV4KGZpbmFsIFRyYW5zaXRpb25bXVtdIHN0YXRlc0luLCBmaW5hbCBQdXNoYmFja1JlYWRlciBpbnB1dEluKSB7CisgICAgICAgIHN0YXRlcyA9IHN0YXRlc0luOworICAgICAgICBpbnB1dCA9IGlucHV0SW47CisgICAgfQorCisgICAgICAgIC8qKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgKi8KKyAgICBwdWJsaWMgaW50IGdldFN0YXRlKCkgeworICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgfQorCisgICAgICAgIC8qKiBSZXR1cm4gdGhlIGRhdGEgcmVzdWx0aW5nIGZyb20gdGhlIGxhc3QgY2FsbCB0byBuZXh0VG9rZW4gKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldERhdGEoKSB7CisgICAgICAgIGlmIChkYXRhID09IG51bGwpIHsKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhQnVmZmVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfQorICAgIAorICAgICAgICAvKiogUmV0dXJuIHRoZSBpbnB1dCByZWFkZXIgdXNlZCBieSB0aGlzIG1hY2hpbmUgKi8KKyAgICBwdWJsaWMgUHVzaGJhY2tSZWFkZXIgZ2V0SW5wdXQoKSB7CisgICAgICAgIHJldHVybiBpbnB1dDsKKyAgICB9CisKKyAgICAgICAgLyoqIHNldCB0aGUgaW5wdXQgcmVhZGVyIHVzZWQgYnkgdGhpcyBtYWNoaW5lICovCisgICAgcHVibGljIHZvaWQgc2V0SW5wdXQoUHVzaGJhY2tSZWFkZXIgaW5wdXQpIHsKKyAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0OworICAgIH0KKworICAgICAgICAvKiogUmV0dXJuIHRoZSBzdGF0ZXMgdXNlZCBieSB0aGlzIG1hY2hpbmUgKi8KKyAgICBwdWJsaWMgVHJhbnNpdGlvbltdW10gZ2V0U3RhdGVzKCkgeworICAgICAgICByZXR1cm4gc3RhdGVzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFN0YXRlcyhUcmFuc2l0aW9uW11bXSBzdGF0ZXMpIHsKKyAgICAgICAgdGhpcy5zdGF0ZXMgPSBzdGF0ZXM7CisgICAgfQorCisgICAgICAgIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBlcXVhbHMgdGhlCisgICAgICAgICAqIHN0cmluZyByZXR1cm5lZCBieSBnZXREYXRhKCkuICBUaGlzIHJvdXRpbmUKKyAgICAgICAgICogbWF5IGJlIGZhc3RlciB0aGFuIGNhbGxpbmcgZ2V0RGF0YSBiZWNhdXNlCisgICAgICAgICAqIGl0IGRvZXMgbm90IGNyZWF0ZSBhIHN0cmluZyBvbiB0aGUgaGVhcC4KKyAgICAgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGF0YUVxdWFscyhmaW5hbCBTdHJpbmcgb3RoZXIpIHsKKyAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgICAgICAgLy9pZiBkYXRhQnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvCisgICAgICAgICAgICAvL2Egc3RyaW5nLCBqdXN0IGNvbXBhcmUgdGhlIHN0cmluZ3MuCisgICAgICAgICAgICByZXR1cm4gZGF0YS5lcXVhbHMob3RoZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG90aGVyLmxlbmd0aCgpICE9IGRhdGFCdWZmZXIubGVuZ3RoKCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZpbmFsIGludCBsZW4gPSBkYXRhQnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChvdGhlci5jaGFyQXQoaSkgIT0gZGF0YUJ1ZmZlci5jaGFyQXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogQXBwZW5kIHRoZSBkYXRhIHJldHVybmVkIGZyb20gZ2V0RGF0YSgpIHRvIHRoZQorICAgICAgICAgKiBzcGVjaWZpZWQgU3RyaW5nQnVmZmVyLiAgVGhpcyByb3V0aW5lIGF2b2lkcworICAgICAgICAgKiB0aGUgY3JlYXRpb24gb2YgYSBTdHJpbmcgb24gdGhlIGhlYXAuCisgICAgICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFwcGVuZERhdGFUbyhTdHJpbmdCdWZmZXIgYnVmZmVyKSB7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YUJ1ZmZlcik7CisgICAgfQorICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGRhdGEgcmV0dXJuZWQgYnkgZ2V0RGF0YSgpCisgICAgICAgICAqIHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgc3RyaW5nLiAgVGhpcyByb3V0aW5lIGF2b2lkcworICAgICAgICAgKiB0aGUgY3JlYXRpb24gb2YgYSBTdHJpbmcgb24gdGhlIGhlYXAuCisgICAgICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGRhdGFTdGFydHNXaXRoKFN0cmluZyBzKSB7CisgICAgICAgIGlmIChkYXRhQnVmZmVyLmxlbmd0aCgpIDwgcy5sZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluYWwgaW50IHNMZW5ndGggPSBzLmxlbmd0aCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YUJ1ZmZlci5jaGFyQXQoaSkgIT0gcy5jaGFyQXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBDb252ZXJ0IHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YSBidWZmZXIgdG8gYW4gaW50ZWdlcgorICAgICAgICAgKiBvZiB0aGUgc3BlY2lmaWVkIHJhZGl4CisgICAgICAgICAqLworICAgIHB1YmxpYyBpbnQgZGF0YUFzTnVtYmVyKGludCByYWRpeCkgeworICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAgICBmaW5hbCBpbnQgbGVuID0gZGF0YUJ1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSpyYWRpeCArIENoYXJhY3Rlci5kaWdpdChkYXRhQnVmZmVyLmNoYXJBdChpKSwgcmFkaXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgaW5wdXQgc3RyZWFtLiAgVGhlCisgICAgICAgICAqIGRhdGFCdWZmZXIgaXMgY2xlYXJlZCBhbmQgdGhlIHN0YXRlIGlzIHNldCB0byB6ZXJvIGJlZm9yZQorICAgICAgICAgKiBwYXJzaW5nIGJlZ2lucy4gIFBhcnNpbmcgY29udGludWVzIHVudGlsIGEgc3RhdGUKKyAgICAgICAgICogZ3JlYXRlciBvZiBlcXVhbCB0byAwIHMgcmVhY2hlZCBvciBhbiBleGNlcHRpb24gaXMgdGhyb3duLgorICAgICAgICAgKiBBZnRlciBlYWNoIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9uLCB0aGUgc3RhdGUgbWFjaGluZSAKKyAgICAgICAgICogd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHRyYW5zaXRpb25zLCBpbiBvcmRlciwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqIHN0YXRlIHVudGlsIGl0IGZpbmRzIG9uZSB0aGF0IHdpbGwgYWNjZXB0IHRoZSBjdXJyZW50CisgICAgICAgICAqIGlucHV0IGNoYXJhY3RlciBhbmQgdGhlbiBjYWxscyBkb0FjdGlvbiBvbiB0aGF0IHRyYW5zaXRpb24uCisgICAgICAgICAqLworICAgIHB1YmxpYyBpbnQgbmV4dFRva2VuKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3RhdGUgPSAwOworICAgICAgICBkYXRhQnVmZmVyLnNldExlbmd0aCgwKTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBpbnQgYyA9IGlucHV0LnJlYWQoKTsKKyAgICAgICAgICAgIGZpbmFsIFRyYW5zaXRpb25bXSB0cmFuc2l0aW9uID0gc3RhdGVzWy1zdGF0ZV07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zaXRpb24ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNpdGlvbltpXS5hY2NlcHRzKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZVsiKyAtc3RhdGUrIl0udHJhbnNpdGlvblsiK2krIl0gb24gIitjKyIgICciKyhjaGFyKWMrIicgdG8gc3RhdGVbIik7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdHJhbnNpdGlvbltpXS5kb0FjdGlvbihjLCBpbnB1dCwgZGF0YUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRsbigiIiArIC1zdGF0ZSArICJdIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoc3RhdGUgPD0gMCk7CisgICAgICAgIGRhdGEgPSBudWxsOyAgICAvL2R1bXAgdGhlIGNhY2hlZCBkYXRhIHN0cmluZworICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgfQorCisgICAgICAgIC8qKiAKKyAgICAgICAgICogR2V0IHRoZSBuZXh0IHRva2VuIGFuZCB0aHJvdyBhbiBhY2NlcHRpb24gaWYKKyAgICAgICAgICogdGhlIHN0YXRlIG1hY2hpbmUgaXMgbm90IGluIHRoZSBzcGVjaWZpZWQgc3RhdGUuCisgICAgICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFjY2VwdChmaW5hbCBpbnQgbmVlZGVkU3RhdGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChuZWVkZWRTdGF0ZSAhPSBuZXh0VG9rZW4oKSkgeworICAgICAgICAgICAgRXhjZXB0aW9uIGUgPSBuZXcgRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHRva2VuIC0gIitnZXREYXRhKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBuZXh0IHRva2VuIGFuZCB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlCisgICAgICAgICAqIHN0YXRlIG1hY2hpbmUgaXMgbm90IGluIHRoZSBzcGVjaWZpZWQgc3RhdGUgYW5kIHRoZQorICAgICAgICAgKiB2YWx1ZSByZXR1cm5lZCBieSBnZXREYXRhKCkgZG9lcyBub3QgbWF0Y2ggdGhlIAorICAgICAgICAgKiBzcGVjaWZpZWQgdmFsdWUuCisgICAgICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFjY2VwdChmaW5hbCBpbnQgbmVlZGVkU3RhdGUsIGZpbmFsIFN0cmluZyBuZWVkZWRWYWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgYWNjZXB0KG5lZWRlZFN0YXRlKTsKKyAgICAgICAgaWYgKCFkYXRhRXF1YWxzKG5lZWRlZFZhbHVlKSkgeworICAgICAgICAgICAgRXhjZXB0aW9uIGUgPSBuZXcgRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHRva2VuIC0gIitnZXREYXRhKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZGVidWcoYm9vbGVhbiBkZWJ1Z01lc3NhZ2VzT24pIHsKKyAgICAgICAgdGhpcy5kZWJ1Z01lc3NhZ2VzT24gPSBkZWJ1Z01lc3NhZ2VzT247CisgICAgICAgIGRlYnVnVGFnID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgZGVidWcoYm9vbGVhbiBkZWJ1Z01lc3NhZ2VzT24sIFN0cmluZyB0YWcpIHsKKyAgICAgICAgdGhpcy5kZWJ1Z01lc3NhZ2VzT24gPSBkZWJ1Z01lc3NhZ2VzT247CisgICAgICAgIHRoaXMuZGVidWdUYWcgPSB0YWc7CisgICAgfQorICAgIAorLyogIHByaXZhdGUgdm9pZCBwcmludChTdHJpbmcgcykgeworICAgICAgICBpZiAoZGVidWdNZXNzYWdlc09uKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHMpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHByaW50bG4oU3RyaW5nIHMpIHsKKyAgICAgICAgaWYgKGRlYnVnTWVzc2FnZXNPbikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMrIiAgPCIrZGVidWdUYWcpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlIGludGVyZmFjZSBmb3Igc3RhdGUgbWFjaGluZSB0cmFuc2l0aW9ucy4gCisgICAgICovCisgICAgcHVibGljIGludGVyZmFjZSBUcmFuc2l0aW9uIHsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdHJhbnNpdGlvbiBjYW4gYWNjZXB0IHRoZSBjdXJyZW50IGlucHV0CisgICAgICAgICAqIGNoYXJhY3Rlci4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoaW50IGMpOworICAgICAgICAvKioKKyAgICAgICAgICogUGVyZm9ybSB0aGUgdHJhbnNpdGlvbi4KKyAgICAgICAgICogQHBhcmFtIGMgdGhlIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyCisgICAgICAgICAqIEBwYXJhbSBpbnB1dCB0aGUgY3VycmVudCBpbnB1dCBzdHJlYW0sIG1pbnVzIHRoZSBjdXJyZW50IGlucHV0IGNoYXJhY3RlcgorICAgICAgICAgKiBAcGFyYW0gYnVmZmVyIHRoZSBjdXJyZW50IG91dHB1dCBidWZmZXIKKyAgICAgICAgICogQHJldHVybiB0aGUgc3RhdGUgdGhlIG1hY2hpbmUgc2hvdWxkIGJlIGluIG5leHQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZG9BY3Rpb24oaW50IGMsIFB1c2hiYWNrUmVhZGVyIGlucHV0LCBTdHJpbmdCdWZmZXIgYnVmZmVyKSB0aHJvd3MgSU9FeGNlcHRpb247CisgICAgfQorCisgICAgICAgIC8qIGNvbnN0YW50cyBmb3IgQmFzZVRyYW5zaXRpb25zICovCisgICAgICAgIC8qKiBEb24ndCBjb3B5IHRoZSBjdXJyZW50IGNoYXJhY3RlciB0byB0aGUgb3V0cHV0ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIElHTk9SRSA9IDB4MDE7CisgICAgICAgIC8qKiBBcHBlbmQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgQUNDVU1VTEFURSA9IDB4MDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBCVUZGRVJfTUFTSyA9IDB4MDE7CisKKyAgICAgICAgLyoqIFJlbW92ZSB0aGUgY3VycmVudCBjaGFyYWN0ZXIgZnJvbSB0aGUgaW5wdXQgc3RyZWFtICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIENPTlNVTUUgPSAweDAwOworICAgICAgICAvKiogUmV0dXJuIHRoZSBjdXJyZW50IGNoYXJhY3RlciB0byB0aGUgaW5wdXQgc3RyZWFtICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFBVVEJBQ0sgPSAweDEwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgSU5QVVRfTUFTSyA9IDB4MTA7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgCisgICAgICAgICAgICBBQ0NVTVVMQVRFX0NPTlNVTUUgPSAoYnl0ZSkoQUNDVU1VTEFURSB8IENPTlNVTUUpLAorICAgICAgICAgICAgSUdOT1JFX0NPTlNVTUUgPSAoYnl0ZSkoSUdOT1JFIHwgQ09OU1VNRSksCisgICAgICAgICAgICBBQ0NVTVVMQVRFX1BVVEJBQ0sgPSAoYnl0ZSkoQUNDVU1VTEFURSB8IFBVVEJBQ0spLAorICAgICAgICAgICAgSUdOT1JFX1BVVEJBQ0sgPSAoYnl0ZSkoSUdOT1JFIHwgUFVUQkFDSyk7CisKKyAgICAvKioKKyAgICAgKiBCYXNlIGNsYXNzIGZvciBzaW1wbGUgdHJhbnNpdGlvbiBjbGFzc2VzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBCYXNlVHJhbnNpdGlvbiBpbXBsZW1lbnRzIFRyYW5zaXRpb24geworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gYWRkVG9CdWZmZXI7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiB1bnJlYWRJbnB1dDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbmV4dDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnN0cnVjdCBhIG5ldyB0cmFuc2l0aW9uLiAgT24gZXhlY3V0aW9uLCB0aGUgCisgICAgICAgICAqIHNwZWNpZmllZCBhY3Rpb24gaXMgcGVyZm9ybWVkIGFuZCB0aGUKKyAgICAgICAgICogc3BlY2lmaWVkIHN0YXRlIGlzIHJldHVybmVkLgorICAgICAgICAgKiBAcGFyYW0gYWN0aW9uIHRoZSBhY3Rpb25zIHRvIHBlcmZvcm0gdG8gdGhlIAorICAgICAgICAgKiBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMuCisgICAgICAgICAqIEBwYXJhbSBuZXh0IHRoZSBuZXh0IHN0YXRlIHRoZSBtYWNoaW5lIHNob3VsZAorICAgICAgICAgKiBtb3ZlIGludG8KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCYXNlVHJhbnNpdGlvbihieXRlIGFjdGlvbiwgaW50IG5leHQpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkVG9CdWZmZXIgPSAoYWN0aW9uICYgQlVGRkVSX01BU0spID09IEFDQ1VNVUxBVEU7CisgICAgICAgICAgICB0aGlzLnVucmVhZElucHV0ID0gKGFjdGlvbiAmIElOUFVUX01BU0spID09IFBVVEJBQ0s7CisgICAgICAgICAgICB0aGlzLm5leHQgPSBuZXh0OworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGFjY2VwdHMoaW50IGMpOworICAgICAgICBwdWJsaWMgaW50IGRvQWN0aW9uKGZpbmFsIGludCBjLCAKKyAgICAgICAgICAgICAgICBmaW5hbCBQdXNoYmFja1JlYWRlciBpbnB1dCwgCisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nQnVmZmVyIGJ1ZmZlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChhZGRUb0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodW5yZWFkSW5wdXQpIHsKKyAgICAgICAgICAgICAgICBpbnB1dC51bnJlYWQoYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFjY2VwdCBlbmQtb2YtZmlsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEVPRlRyYW5zaXRpb24gZXh0ZW5kcyBCYXNlVHJhbnNpdGlvbiB7CisgICAgICAgIHB1YmxpYyBFT0ZUcmFuc2l0aW9uKCkgeworICAgICAgICAgICAgdGhpcyhJR05PUkVfQ09OU1VNRSwgRU5EX09GX0ZJTEUpOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBFT0ZUcmFuc2l0aW9uKGludCBuZXh0KSB7CisgICAgICAgICAgICB0aGlzKElHTk9SRV9DT05TVU1FLCBuZXh0KTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgRU9GVHJhbnNpdGlvbihieXRlIGFjdGlvbiwgaW50IG5leHQpIHsKKyAgICAgICAgICAgIHN1cGVyKGFjdGlvbiwgbmV4dCk7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhpbnQgYykgeworICAgICAgICAgICAgcmV0dXJuIGMgPT0gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBY2NlcHQgYW55dGhpbmcuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBEZWZhdWx0VHJhbnNpdGlvbiBleHRlbmRzIEJhc2VUcmFuc2l0aW9uIHsKKyAgICAgICAgcHVibGljIERlZmF1bHRUcmFuc2l0aW9uKGJ5dGUgYWN0aW9uLCBpbnQgbmV4dFN0YXRlKSB7CisgICAgICAgICAgICBzdXBlcihhY3Rpb24sIG5leHRTdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhpbnQgYykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBY2NlcHQgYW55IGNoYXJhY3RlcnMgaW4gdGhlIHNwZWNpZmllZCBzdHJpbmcuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTdHJpbmdUcmFuc2l0aW9uIGV4dGVuZHMgQmFzZVRyYW5zaXRpb24geworICAgICAgICBwcml2YXRlIFN0cmluZyBjaGFyczsKKyAgICAgICAgcHVibGljIFN0cmluZ1RyYW5zaXRpb24oU3RyaW5nIGNoYXJzLCBieXRlIGFjdGlvbiwgaW50IG5leHRTdGF0ZSkgeworICAgICAgICAgICAgc3VwZXIoYWN0aW9uLCBuZXh0U3RhdGUpOworICAgICAgICAgICAgdGhpcy5jaGFycyA9IGNoYXJzOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoaW50IGMpIHsKKyAgICAgICAgICAgIHJldHVybiBjaGFycy5pbmRleE9mKChjaGFyKWMpICE9IC0xOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQWNjZXB0IG9ubHkgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBDaGFyVHJhbnNpdGlvbiBleHRlbmRzIEJhc2VUcmFuc2l0aW9uIHsKKyAgICAgICAgcHJpdmF0ZSBjaGFyIGM7CisgICAgICAgIHB1YmxpYyBDaGFyVHJhbnNpdGlvbihjaGFyIGMsIGJ5dGUgYWN0aW9uLCBpbnQgbmV4dFN0YXRlKSB7CisgICAgICAgICAgICBzdXBlcihhY3Rpb24sIG5leHRTdGF0ZSk7CisgICAgICAgICAgICB0aGlzLmMgPSBjOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoaW50IGMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmMgPT0gKGNoYXIpYzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFjY2VwdCBhbnl0aGluZywgYnV0IHRocm93IHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIGFmdGVyCisgICAgICogcGVyZm9ybWluZyB0aGUgc3BlY2lmaWVkIGFjdGlvbgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRXhjZXB0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEJhc2VUcmFuc2l0aW9uIHsKKyAgICAgICAgcHJpdmF0ZSBJT0V4Y2VwdGlvbiBlOworICAgICAgICBwdWJsaWMgRXhjZXB0aW9uVHJhbnNpdGlvbihJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBzdXBlcihJR05PUkVfUFVUQkFDSywgRU5EX09GX0ZJTEUpOyAvL3N0YXRlIGlzIGlnbm9yZWQKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgRXhjZXB0aW9uVHJhbnNpdGlvbihieXRlIGFjdGlvbiwgSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgc3VwZXIoYWN0aW9uLCBFTkRfT0ZfRklMRSk7IC8vc3RhdGUgaXMgaWdub3JlZAorICAgICAgICB9CisgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoaW50IGMpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZG9BY3Rpb24oZmluYWwgaW50IGMsIAorICAgICAgICAgICAgICAgIGZpbmFsIFB1c2hiYWNrUmVhZGVyIGlucHV0LCAKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdCdWZmZXIgYnVmZmVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgc3VwZXIuZG9BY3Rpb24oYywgaW5wdXQsIGJ1ZmZlcik7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgYmFzZSBjbGFzcyBmb3IgcGFyc2UgZXhjZXB0aW9ucy4gIEV4Y2VwdGlvbnMKKyAgICAgICAgICogcmVzdWx0aW5nIGZyb20gcGFyc2luZyBlcnJvcnMgc2hvdWxkIGJlIHN1YmNsYXNzZXMgb2YgdGhpcworICAgICAgICAgKiBjbGFzcy4KKyAgICAgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQYXJzZUV4Y2VwdGlvbiBleHRlbmRzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyByZWFzb247CisgICAgICAgIHB1YmxpYyBQYXJzZUV4Y2VwdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMucmVhc29uID0gInVua293biI7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIFBhcnNlRXhjZXB0aW9uKFN0cmluZyByZWFzb24pIHsKKyAgICAgICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gcmVhc29uOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQWNjZXB0IGFueXRoaW5nLCBleGVjdXRlIGFzIElHTk9SRV9QVVRCQUNLLCBhbmQgdGhyb3cKKyAgICAgKiBhIFBhcnNlRXhjZXB0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQYXJzZUV4Y2VwdGlvblRyYW5zaXRpb24gaW1wbGVtZW50cyBUcmFuc2l0aW9uIHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgcmVhc29uOworICAgICAgICBwdWJsaWMgUGFyc2VFeGNlcHRpb25UcmFuc2l0aW9uKFN0cmluZyByZWFzb24pIHsKKyAgICAgICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoaW50IGMpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZG9BY3Rpb24oZmluYWwgaW50IGMsIAorICAgICAgICAgICAgICAgIGZpbmFsIFB1c2hiYWNrUmVhZGVyIGlucHV0LCAKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdCdWZmZXIgYnVmZmVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgaW5wdXQudW5yZWFkKChjaGFyKWMpOworICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKHJlYXNvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvL3t7REVDTEFSRV9DT05UUk9MUworCS8vfX0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTGluZUNoYXJOdW1iZXJSZWFkZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTGluZUNoYXJOdW1iZXJSZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzExZTMyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9MaW5lQ2hhck51bWJlclJlYWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0xpbmVDaGFyTnVtYmVyUmVhZGVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjkgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8qKgorICogQSBMaW5lQ2hhck51bWJlclJlYWRlciBpcyBhIEJ1ZmZlcmVkUmVhZGVyIHRoYXQKKyAqIGtlZXBzIHRyYWNrIG9mIHRoZSBsaW5lIG51bWJlciBhbmQgY2hhcmFjdGVyIG9mZnNldAorICogb24gdGhhdCBsaW5lIG9mIHRoZSBjdXJyZW50IGlucHV0IHN0cmVhbS4KKyAqLworcHVibGljIGNsYXNzIExpbmVDaGFyTnVtYmVyUmVhZGVyIGV4dGVuZHMgQnVmZmVyZWRSZWFkZXIgeworICAgIHByaXZhdGUgaW50IGxpbmVOdW1iZXIgPSAwOworICAgIHByaXZhdGUgaW50IGNoYXJOdW1iZXIgPSAwOworICAgIHByaXZhdGUgaW50IG1hcmtlZExpbmVOdW1iZXI7CisgICAgcHJpdmF0ZSBpbnQgbWFya2VkQ2hhck51bWJlcjsKKyAgICBwcml2YXRlIGJvb2xlYW4gc2tpcExGOworCisgICAgcHVibGljIExpbmVDaGFyTnVtYmVyUmVhZGVyKFJlYWRlciBpbikgeworICAgICAgICBzdXBlcihpbik7CisgICAgICAgICAgICAvL3t7SU5JVF9DT05UUk9MUworICAgICAgICAvL319Cit9CisKKyAgICBwdWJsaWMgTGluZUNoYXJOdW1iZXJSZWFkZXIoUmVhZGVyIGluLCBpbnQgc3opIHsKKyAgICAgICAgc3VwZXIoaW4sIHN6KTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldExpbmVOdW1iZXIoKSB7CisgICAgICAgIHJldHVybiBsaW5lTnVtYmVyOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0Q2hhck51bWJlcigpIHsKKyAgICAgICAgcmV0dXJuIGNoYXJOdW1iZXI7CisgICAgfQorCisgICAgcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3luY2hyb25pemVkIChsb2NrKSB7CisgICAgICAgICAgICBpbnQgYyA9IHN1cGVyLnJlYWQoKTsKKyAgICAgICAgICAgIGNoYXJOdW1iZXIrKzsKKyAgICAgICAgICAgIGlmIChza2lwTEYpIHsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKSBjID0gc3VwZXIucmVhZCgpOworICAgICAgICAgICAgICAgIHNraXBMRiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICdccic6CisgICAgICAgICAgICAgICAgc2tpcExGID0gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgJ1xuJzogICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgJ1x1MjAyOCc6ICAgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlICdcdTIwMjknOiAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICBjaGFyTnVtYmVyID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1xuJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludCByZWFkKGNoYXIgY2J1ZltdLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBzeW5jaHJvbml6ZWQgKGxvY2spIHsKKyAgICAgICAgICAgIGludCBuID0gc3VwZXIucmVhZChjYnVmLCBvZmYsIGxlbik7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBvZmY7IGkgPCBvZmYgKyBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGludCBjID0gY2J1ZltpXTsKKyAgICAgICAgICAgICAgICBjaGFyTnVtYmVyKys7CisgICAgICAgICAgICAgICAgaWYgKHNraXBMRikgeworICAgICAgICAgICAgICAgICAgICBza2lwTEYgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgICAgICAgICAgICAgc2tpcExGID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjYXNlICdcbic6ICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICBjYXNlICdcdTIwMjgnOiAgLyogRmFsbCB0aHJvdWdoICovCisgICAgICAgICAgICAgICAgY2FzZSAnXHUyMDI5JzogIC8qIEZhbGwgdGhyb3VnaCAqLworICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyKys7CisgICAgICAgICAgICAgICAgICAgIGNoYXJOdW1iZXIgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyByZWFkTGluZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHN5bmNocm9uaXplZCAobG9jaykgeworICAgICAgICAgICAgU3RyaW5nIGwgPSBzdXBlci5yZWFkTGluZSgpOworICAgICAgICAgICAgaWYgKGwgIT0gbnVsbCkKKyAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgIGNoYXJOdW1iZXIgPSAwOworICAgICAgICAgICAgc2tpcExGID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBtYXhTa2lwQnVmZmVyU2l6ZSA9IDgxOTI7CisKKyAgICBwcml2YXRlIGNoYXIgc2tpcEJ1ZmZlcltdID0gbnVsbDsKKworICAgIHB1YmxpYyBsb25nIHNraXAobG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpbnQgbm4gPSAoaW50KSBNYXRoLm1pbihuLCBtYXhTa2lwQnVmZmVyU2l6ZSk7CisgICAgICAgIHN5bmNocm9uaXplZCAobG9jaykgeworICAgICAgICAgICAgaWYgKChza2lwQnVmZmVyID09IG51bGwpIHx8IChza2lwQnVmZmVyLmxlbmd0aCA8IG5uKSkKKyAgICAgICAgICAgIHNraXBCdWZmZXIgPSBuZXcgY2hhcltubl07CisgICAgICAgICAgICBsb25nIHIgPSBuOworICAgICAgICAgICAgd2hpbGUgKHIgPiAwKSB7CisgICAgICAgICAgICBpbnQgbmMgPSByZWFkKHNraXBCdWZmZXIsIDAsIG5uKTsKKyAgICAgICAgICAgIGlmIChuYyA9PSAtMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHIgLT0gbmM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbiAtIHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtYXJrKGludCByZWFkQWhlYWRMaW1pdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3luY2hyb25pemVkIChsb2NrKSB7CisgICAgICAgICAgICBzdXBlci5tYXJrKHJlYWRBaGVhZExpbWl0KTsKKyAgICAgICAgICAgIG1hcmtlZExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICAgICAgbWFya2VkQ2hhck51bWJlciA9IGNoYXJOdW1iZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHN5bmNocm9uaXplZCAobG9jaykgeworICAgICAgICAgICAgc3VwZXIucmVzZXQoKTsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBtYXJrZWRMaW5lTnVtYmVyOworICAgICAgICAgICAgY2hhck51bWJlciA9IG1hcmtlZENoYXJOdW1iZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvL3t7REVDTEFSRV9DT05UUk9MUworICAgIC8vfX0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTG9jYWxlQ29udmVydGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0xvY2FsZUNvbnZlcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlNDc0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL0xvY2FsZUNvbnZlcnRlci5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTG9jYWxlQ29udmVydGVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjkgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBMb2NhbGVDb252ZXJ0ZXIgeworICAgIHB1YmxpYyBIYXNodGFibGUgY29udmVydChIYXNodGFibGUgdGFibGUpIHRocm93cyBDb252ZXJzaW9uRXJyb3IgeworICAgICAgICBIYXNodGFibGUgcmVzdWx0ID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICBjb252ZXJ0KHJlc3VsdCwgdGFibGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBjb252ZXJ0KEhhc2h0YWJsZSByZXN1bHQsIEhhc2h0YWJsZSBzb3VyY2UpIHRocm93cyBDb252ZXJzaW9uRXJyb3IgeworICAgICAgICBFbnVtZXJhdGlvbiBlbnVtID0gc291cmNlLmtleXMoKTsKKyAgICAgICAgd2hpbGUgKGVudW0uaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWVudW0ubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIE9iamVjdCBkYXRhID0gc291cmNlLmdldChrZXkpOworICAgICAgICAgICAgcmVzdWx0LnB1dChrZXksIGRhdGEpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udmVyc2lvbkVycm9yIGV4dGVuZHMgRXhjZXB0aW9uIHsKKyAgICAgICAgcHVibGljIENvbnZlcnNpb25FcnJvcigpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIENvbnZlcnNpb25FcnJvcihTdHJpbmcgcmVhc29uKSB7CisgICAgICAgICAgICBzdXBlcihyZWFzb24pOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Mb2NhbGVXcml0ZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTG9jYWxlV3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODA1YjIzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTG9jYWxlV3JpdGVyLmphdmEKQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTG9jYWxlV3JpdGVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MjkgJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisvKioKKyAqIEEgTG9jYWxlV3JpdGVyIHRha2VzIGxvY2FsZSBkYXRhIGluIHN0YW5kYXJkIGZvcm0gYW5kCisgKiB3cml0ZXMgaXQgdG8gc3RhbmRhcmQgb3V0cHV0IGluIGEgZm9ybSBzdWl0YWJsZSBmb3IKKyAqIGxvYWRpbmcgcHJvZ3JhbWF0aWNhbGx5LgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTG9jYWxlV3JpdGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERU5UX0NIQVJTID0gCisgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIisKKyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKworICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBFT0xfQ0hBUlNbXSA9IHsnXHInLCAnXG4nLCAnXHUyMDI4JywgJ1x1MjAyOSd9OworICAgICAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5ERU5UX1NJWkUgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfTElORV9MRU5HVEggPSA4MDsKKyAgICBwcml2YXRlIGludCBpbmRlbnRMZXZlbDsKKyAgICBwcml2YXRlIFN0cmluZyBpbmRlbnRTdHJpbmc7CisgICAgcHJpdmF0ZSBib29sZWFuIG5lZWRzSW5kZW50OworICAgIHByb3RlY3RlZCBTdHJpbmdCdWZmZXIgbGluZUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICBwcml2YXRlIGludCBsaW5lTGVuZ3RoOworICAgIHByb3RlY3RlZCBQcmludFN0cmVhbSBvdXQ7CisgICAgcHJvdGVjdGVkIFByaW50U3RyZWFtIGVycjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIGh1VHJhbnNsaXQgPSBuZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IoIjxVIyMjMD4iKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yIHVoVHJhbnNsaXQgPSBuZXcgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IoIlxcXFx1MDAwMCIpOworICAgIGZpbmFsIEZpbGUgb3V0RmlsZSA9IG5ldyBGaWxlKCAgImNudkxvYy50eHQiKTsKKyAgICBGaWxlT3V0cHV0U3RyZWFtIG91dEZpbGVTdHJlYW07CisgICAgQnVmZmVyZWRXcml0ZXIgb3V0QnVmV3JpdGU7CisgICAgUHJpbnRXcml0ZXIgbXlPdXQ7CisgICAgCisgICAgcHVibGljIExvY2FsZVdyaXRlcihQcmludFN0cmVhbSBvdXQpIHsKKyAgICAgICAgdGhpcy5vdXQgPSBvdXQ7CisgICAgICAgIHRoaXMuZXJyID0gb3V0OworICAgICAgICB0cnl7CisgICAgICAgICAgICBvdXRGaWxlLmNhbldyaXRlKCk7CisgICAgICAgICAgICBvdXRGaWxlU3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0RmlsZSk7CisgICAgICAgICAgICBvdXRCdWZXcml0ZSA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dEZpbGVTdHJlYW0sIlVURjgiKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBjYXRjaChqYXZhLmlvLklPRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbmNvZGluZyB1bnN1cHBvcnRlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9ICAKKyAgICB9CisgICAgcHVibGljIExvY2FsZVdyaXRlcihQcmludFN0cmVhbSBvdXQsIFByaW50U3RyZWFtIGVycikgeworICAgICAgICB0aGlzLm91dCA9IG91dDsKKyAgICAgICAgdGhpcy5lcnIgPSBlcnI7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIG91dEZpbGUuY2FuV3JpdGUoKTsKKyAgICAgICAgICAgIG91dEZpbGVTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRGaWxlKTsKKyAgICAgICAgICAgIG91dEJ1ZldyaXRlID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0RmlsZVN0cmVhbSwiVVRGOCIpKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIGNhdGNoKGphdmEuaW8uSU9FeGNlcHRpb24gZSl7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVuY29kaW5nIHVuc3VwcG9ydGVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gIAorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHdyaXRlKExvY2FsZSBsb2NhbGUsIEhhc2h0YWJsZSBsb2NhbGVEYXRhKSB7CisgICAgICAgIG9wZW4obG9jYWxlKTsKKyAgICAgICAgICAgIC8vc29ydCB0aGUga2V5IHNvIHRoZSB0YWdzIGFyZSBpbiBvcmRlciBpbiB0aGUgcmVzb3VyY2UgZmlsZQorICAgICAgICBTb3J0ZWRWZWN0b3Igb3JkZXIgPSBuZXcgU29ydGVkVmVjdG9yKGxvY2FsZURhdGEua2V5cygpLCBuZXcgU29ydGVkVmVjdG9yLlN0cmluZ0NvbXBhcmF0b3IoKSk7CisgICAgICAgIEVudW1lcmF0aW9uIGUgPSBvcmRlci5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGtleSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgZmluYWwgT2JqZWN0IGRhdGEgPSBsb2NhbGVEYXRhLmdldChrZXkpOworICAgICAgICAgICAgaWYgKGlzRHVwbGljYXRlT2ZJbmhlcml0ZWRWYWx1ZShsb2NhbGUsIGtleSwgZGF0YSkpIHsKKyAgICAgICAgICAgICAgIHByaW50bG4oIi8vLyogRGlzY2FyZGluZyBkdXBsaWNhdGUgZGF0YSBmb3IgdGFnOiAiK2tleSsiICovIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdyaXRlKGtleSwgZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAKKyAgICAgICAgY2xvc2UoKTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgY2xvc2VGaWxlSGFuZGxlKCl7CisgICAgICAgICB0cnl7CisgICAgICAgICAgICBvdXRCdWZXcml0ZS5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKGphdmEuaW8uSU9FeGNlcHRpb24gZXhjcCl7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiY291bGQgbm90IGNsb3NlIHRoZSBvdXRwdXQgZmlsZSIpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZShTdHJpbmcgdGFnLCBPYmplY3QgbykgeworICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgICAgd3JpdGUodGFnLCAoU3RyaW5nKW8pOworICAgICAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmdbXSkgeworICAgICAgICAgICAgd3JpdGUodGFnLCAoU3RyaW5nW10pIG8pOworICAgICAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmdbXVtdKSB7CisgICAgICAgICAgICB3cml0ZSh0YWcsIChTdHJpbmdbXVtdKW8pOworICAgICAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBPYmplY3RbXSkgeworICAgICAgICAgICAgT2JqZWN0W10gZGF0YSA9IChPYmplY3RbXSlvOworICAgICAgICAgICAgU3RyaW5nW10gdGVtcCA9IG5ldyBTdHJpbmdbZGF0YS5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGVtcFtpXSA9IGRhdGFbaV0udG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlKHRhZywgdGVtcCk7CisgICAgICAgIH0gZWxzZSBpZiAobyBpbnN0YW5jZW9mIE9iamVjdFtdW10pIHsKKyAgICAgICAgICAgIE9iamVjdFtdW10gZGF0YSA9IChPYmplY3RbXVtdKW87CisgICAgICAgICAgICBTdHJpbmdbXVtdIHRlbXAgPSBuZXcgU3RyaW5nW2RhdGEubGVuZ3RoXVtdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGVtcFtpXSA9IG5ldyBTdHJpbmdbZGF0YVtpXS5sZW5ndGhdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdGVtcFtpXS5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wW2ldW2pdID0gZGF0YVtpXVtqXS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlKHRhZywgdGVtcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3cml0ZSh0YWcsIG8udG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgd3JpdGUoU3RyaW5nIHRhZywgU3RyaW5nW11bXSB2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKHZhbHVlWzBdLmxlbmd0aCA+IDIpIHsKKyAgICAgICAgICAgICAgICB3cml0ZTJEKHRhZywgdmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3cml0ZVRhZ2dlZCh0YWcsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdyaXRlVGFnZ2VkKHRhZywgdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgb3BlbihMb2NhbGUgbG9jYWxlKTsKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB3cml0ZShTdHJpbmcgdGFnLCBTdHJpbmcgdmFsdWUpOworICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHdyaXRlKFN0cmluZyB0YWcsIFN0cmluZ1tdIHZhbHVlKTsKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB3cml0ZTJEKFN0cmluZyB0YWcsIFN0cmluZ1tdW10gdmFsdWUpOworICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHdyaXRlVGFnZ2VkKFN0cmluZyB0YWcsIFN0cmluZ1tdW10gdmFsdWUpOworICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGNsb3NlKCk7CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRTdHJpbmdKb2luaW5nQ2hhcmFjdGVyKCk7CisKKyAgICBwcm90ZWN0ZWQgdm9pZCB0YWJUbyhpbnQgcG9zKSB7CisgICAgICAgIGlmIChwb3MgPiBsaW5lTGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gbGluZUxlbmd0aDsgaSA8IHBvczsgaSsrKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoIiAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVRvRmlsZShTdHJpbmcgc3RyKXsKKyAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgdGVtcFN0ciA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZygpOworICAgICAgICB0ZW1wU3RyLnJlcGxhY2UoMCx0ZW1wU3RyLmxlbmd0aCgpLHN0cik7CisgICAgICAgIAorICAgICAgICAvL2h1VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wU3RyKTsKKyAgICAgICAgLy91aFRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcFN0cik7CisgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgb3V0QnVmV3JpdGUud3JpdGUodGVtcFN0ci50b1N0cmluZygpKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGNhdGNoKGphdmEuaW8uSU9FeGNlcHRpb24gZSl7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIik7CisgICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIHByaW50KFN0cmluZyB2YWwpIHsKKyAgICAgICAgaWYgKG5lZWRzSW5kZW50KSB7CisgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50U3RyaW5nKTsKKyAgICAgICAgICAgIHdyaXRlVG9GaWxlKGluZGVudFN0cmluZyk7CisgICAgICAgICAgICBsaW5lTGVuZ3RoICs9IGluZGVudFN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgICAgIG5lZWRzSW5kZW50ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgdGVtcFN0ciA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZygpOworICAgICAgICB0ZW1wU3RyLnJlcGxhY2UoMCx0ZW1wU3RyLmxlbmd0aCgpLHZhbCk7ICAgICAgCisgICAgICAgIGh1VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wU3RyKTsKKyAgICAgICAgU3RyaW5nIHR2YWwgPSB0ZW1wU3RyLnRvU3RyaW5nKCk7CisgICAgICAgIGlmKHR2YWwubGVuZ3RoKCk8IHZhbC5sZW5ndGgoKSl7CisgICAgICAgICAgIC8vIHVoVHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wU3RyKTsKKyAgICAgICAgICAgIHR2YWw9cHJlcGVuZEVzYyh0ZW1wU3RyLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIGlmICh0dmFsICE9IG51bGwpIHsKKyAgICAgICAgICAgIG91dC5wcmludCh0dmFsKTsKKyAgICAgICAgICAgIHdyaXRlVG9GaWxlKHR2YWwpOworICAgICAgICAgICAgaW50IGxlbiA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEVPTF9DSEFSUy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGxlbiA9IE1hdGgubWF4KGxlbiwgdHZhbC5sYXN0SW5kZXhPZihFT0xfQ0hBUlNbaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgICAgICAgICAgIGxpbmVMZW5ndGggKz0gdHZhbC5sZW5ndGgoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGluZUxlbmd0aCA9IHR2YWwubGVuZ3RoKCkgLSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcHJvdGVjdGVkIFN0cmluZyBwcmVwZW5kRXNjKFN0cmluZyBzdHIpeworICAgICAgICBTdHJpbmdCdWZmZXIgbXlTdHIgPSAgbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IoaW50IGk9MDtpPHN0ci5sZW5ndGgoKTtpKyspeworICAgICAgICAgICAgY2hhciBjaCA9IHN0ci5jaGFyQXQoaSk7CisgICAgICAgICAgICBpZihjaCA+IDB4MDA3Zil7CisgICAgICAgICAgICAgICAgbXlTdHIuYXBwZW5kKCJcXHUiKTsKKyAgICAgICAgICAgICAgICBteVN0ci5hcHBlbmQodG9IZXhTdHJpbmcoY2gsMTYsNCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICBteVN0ci5hcHBlbmQoY2gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBteVN0ci50b1N0cmluZygpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIHRvSGV4U3RyaW5nKGNoYXIgY2gsIGludCByYWRpeCwgaW50IHBhZCl7CisgICAgICAgIGZpbmFsIGludCBNQVhfRElHSVRTID0gMTA7CisgICAgICAgIGludCBsZW5ndGggPSAwOworICAgICAgICBjaGFyIGJ1ZmZlcltdID0gbmV3IGNoYXJbMTBdOworICAgICAgICBpbnQgbnVtID0gMDsKKyAgICAgICAgaW50IGRpZ2l0OworICAgICAgICBpbnQgajsKKyAgICAgICAgY2hhciB0ZW1wOworICAgICAgICBpbnQgaSA9IChpbnQpY2g7CisgICAgICAgIGRveworICAgICAgICAgICAgZGlnaXQgPSAoaW50KShpICUgcmFkaXgpOworICAgICAgICAgICAgYnVmZmVyW2xlbmd0aCsrXT0oY2hhcikoZGlnaXQ8PTk/KDB4MDAzMCtkaWdpdCk6KDB4MDAzMCtkaWdpdCs3KSk7CisgICAgICAgICAgICBpPShpL3JhZGl4KTsKKyAgICAgICAgfXdoaWxlKGk+MCk7CisKKyAgICAgICAgd2hpbGUgKGxlbmd0aCA8IHBhZCl7ICAgCisgICAgICAgICAgICBidWZmZXJbbGVuZ3RoKytdID0gIDB4MDAzMDsvKnplcm8gcGFkZGluZyAqLworICAgICAgICB9CisgICAgICAgIC8qIG51bGwgdGVybWluYXRlIHRoZSBidWZmZXIgKi8KKyAgICAgICAgaWYobGVuZ3RoPE1BWF9ESUdJVFMpeworICAgICAgICAgICAgYnVmZmVyW2xlbmd0aF0gPSAgMHgwMDAwOworICAgICAgICB9CisgICAgICAgIG51bT0gKHBhZD49bGVuZ3RoKSA/IHBhZCA6bGVuZ3RoOworICAgICAgICAgICAgICAKKyAgICAgICAgLyogUmV2ZXJzZXMgdGhlIHN0cmluZyAqLworICAgICAgICBmb3IgKGogPSAwOyBqIDwgKG51bSAvIDIpOyBqKyspeworICAgICAgICAgICAgdGVtcCA9IGJ1ZmZlclsobGVuZ3RoLTEpIC0gal07CisgICAgICAgICAgICBidWZmZXJbKGxlbmd0aC0xKSAtIGpdID0gYnVmZmVyW2pdOworICAgICAgICAgICAgYnVmZmVyW2pdID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmZmVyLDAsbGVuZ3RoKTsKKyAgICB9CisgICAgICAgIAorICAgIHByb3RlY3RlZCB2b2lkIHByaW50bG4oU3RyaW5nIHZhbCkgeworICAgICAgICBwcmludCh2YWwpOworICAgICAgICBvdXQucHJpbnRsbigpOworICAgICAgICB3cml0ZVRvRmlsZSgiXG4iKTsKKyAgICAgICAgbGluZUxlbmd0aCA9IDA7CisgICAgICAgIG5lZWRzSW5kZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBwcmludFN0cmluZyhTdHJpbmcgdmFsKSB7CisgICAgICAgIGlmICh2YWwgIT0gbnVsbCkgeworICAgICAgICAgICAgaW5kZW50KCk7CisgICAgICAgICAgICBsaW5lQnVmZmVyLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgIGxpbmVCdWZmZXIuYXBwZW5kKCJcIiIpOworICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSB2YWwubGVuZ3RoKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGFwcGVuZCh2YWwuY2hhckF0KGkpKTsKKyAgICAgICAgICAgICAgICAvKmlmICghYXBwZW5kKHZhbC5jaGFyQXQoaSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQnVmZmVyLmFwcGVuZCgiXCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCdWZmZXIuYXBwZW5kKGdldFN0cmluZ0pvaW5pbmdDaGFyYWN0ZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGxuKGxpbmVCdWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQnVmZmVyLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCdWZmZXIuYXBwZW5kKCJcIiIpOworICAgICAgICAgICAgICAgIH0qLworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBsaW5lQnVmZmVyLmFwcGVuZCgiXCIiKTsKKyAgICAgICAgICAgIHByaW50KGxpbmVCdWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBvdXRkZW50KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludCgiXCJcIiIpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBhcHBlbmQoZmluYWwgY2hhciBjKSB7CisgICAgICAgIGJvb2xlYW4gZXNjYXBlID0gaXNFc2NhcGVDaGFyKGMpOworICAgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgICAgICBhcHBlbmRFc2NhcGVkQ2hhcihjLCBsaW5lQnVmZmVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmVCdWZmZXIuYXBwZW5kKGMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAobGluZUxlbmd0aCArIGxpbmVCdWZmZXIubGVuZ3RoKCkgPCBNQVhfTElORV9MRU5HVEgpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0VzY2FwZUNoYXIoZmluYWwgY2hhciBjKSB7CisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICciJzoKKyAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICBjYXNlICdcbic6CisgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgY2FzZSAnXHUyMDI4JzoKKyAgICAgICAgY2FzZSAnXHUyMDI5JzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIChjIDwgJyAnKSB8fCAoYyA+IDB4MDdGKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBhcHBlbmRFc2NhcGVkQ2hhcihjaGFyIGMsIFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChnZXRFc2NhcGVDaGFyKCkpOworICAgICAgICBpbnQgdmFsdWUgPSAoKGludCljKSAmIDB4RkZGRjsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChIRVhfRElHSVRbKHZhbHVlICYgMHhGMDAwKSA+PiAxMl0pOworICAgICAgICBidWZmZXIuYXBwZW5kKEhFWF9ESUdJVFsodmFsdWUgJiAweDBGMDApID4+IDhdKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChIRVhfRElHSVRbKHZhbHVlICYgMHgwMEYwKSA+PiA0XSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoSEVYX0RJR0lUWyh2YWx1ZSAmIDB4MDAwRildKTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRFc2NhcGVDaGFyKCkgeworICAgICAgICByZXR1cm4gIlxcdSI7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluZGVudCgpIHsKKyAgICAgICAgaW5kZW50KDEpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCBpbmRlbnQoaW50IGFtb3VudCkgeworICAgICAgICBpbmRlbnRMZXZlbCArPSBhbW91bnQ7CisgICAgICAgIGluZGVudFN0cmluZyA9IElOREVOVF9DSEFSUy5zdWJzdHJpbmcoMCwgaW5kZW50TGV2ZWwqSU5ERU5UX1NJWkUpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBvdXRkZW50KCkgeworICAgICAgICBvdXRkZW50KDEpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgdm9pZCBvdXRkZW50KGludCBhbW91bnQpIHsKKyAgICAgICAgaW5kZW50TGV2ZWwgLT0gYW1vdW50OworICAgICAgICBpbmRlbnRTdHJpbmcgPSBJTkRFTlRfQ0hBUlMuc3Vic3RyaW5nKDAsIGluZGVudExldmVsKklOREVOVF9TSVpFKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgY2hhcltdIEhFWF9ESUdJVCA9IHsnMCcsJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLAorICAgICAgICAgICAgICAgICAgICAgJzgnLCc5JywnQScsJ0InLCdDJywnRCcsJ0UnLCdGJ307CisKKyAgICAvKiogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHRhZyBpcyB0aGUgc2FtZQorICAgICAqIGFzIHRoZSB2YWx1ZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IGZvciB0aGF0IHRhZyAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc0R1cGxpY2F0ZU9mSW5oZXJpdGVkVmFsdWUoZmluYWwgTG9jYWxlIGxvYywgU3RyaW5nIHRhZywgT2JqZWN0IHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFJlc291cmNlQnVuZGxlIHBhcmVudEJ1bmRsZSA9IGdldFBhcmVudEJ1bmRsZShsb2MpOworICAgICAgICAgICAgaWYgKHBhcmVudEJ1bmRsZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBPYmplY3QgcGFyZW50VmFsdWUgPSBwYXJlbnRCdW5kbGUuZ2V0T2JqZWN0KHRhZyk7CisgICAgICAgICAgICBpZiAoIW9iamVjdHNBcmVFcXVhbCh2YWx1ZSwgcGFyZW50VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBib29sZWFuIG9iamVjdHNBcmVFcXVhbChmaW5hbCBPYmplY3QgaXRlbSwgZmluYWwgT2JqZWN0IHBhcmVudEl0ZW0pIHsKKyAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3RbXSAmJiBwYXJlbnRJdGVtIGluc3RhbmNlb2YgT2JqZWN0W10pIHsKKyAgICAgICAgICAgIHJldHVybiBhcnJheXNBcmVFcXVhbCgoT2JqZWN0W10paXRlbSwgKE9iamVjdFtdKXBhcmVudEl0ZW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXF1YWxzKHBhcmVudEl0ZW0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgYm9vbGVhbiBhcnJheXNBcmVFcXVhbChmaW5hbCBPYmplY3RbXSBpdGVtLCBmaW5hbCBPYmplY3RbXSBwYXJlbnRJdGVtKSB7CisgICAgICAgIGJvb2xlYW4gbWF0Y2hlcyA9IGl0ZW0ubGVuZ3RoID09IHBhcmVudEl0ZW0ubGVuZ3RoOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoICYmIG1hdGNoZXM7IGkrKykgeworICAgICAgICAgICAgbWF0Y2hlcyA9IG9iamVjdHNBcmVFcXVhbChpdGVtW2ldLCBwYXJlbnRJdGVtW2ldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICB9CisgICAgICAgIAorICAgIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgZ2V0UGFyZW50QnVuZGxlKGZpbmFsIExvY2FsZSBsb2MpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyB4ID0gbG9jLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgbmR4ID0geC5sYXN0SW5kZXhPZignXycpOworICAgICAgICAgICAgaWYgKG5keCA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhcmVudExvY05hbWUgPSB4LnN1YnN0cmluZygwLCBuZHgpOworICAgICAgICAgICAgICAgIGZpbmFsIExvY2FsZSBwYXJlbnRMb2MgPSBsb2NhbGVGcm9tU3RyaW5nKHBhcmVudExvY05hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoImNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlci5teUxvY2FsZUVsZW1lbnRzIiwgcGFyZW50TG9jKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIHJlcGxhY2UoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgU3RyaW5nIHJlcGxhY2VtZW50KSB7CisgICAgICAgIGlmICh0YXJnZXQuZXF1YWxzKHJlcGxhY2VtZW50KSkgeworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBpbnQgbGFzdE5keCA9IDA7CisgICAgICAgICAgICBpbnQgbmR4ID0gc291cmNlLmluZGV4T2YodGFyZ2V0KTsKKyAgICAgICAgICAgIHdoaWxlIChuZHggPj0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc291cmNlLnN1YnN0cmluZyhsYXN0TmR4LCBuZHgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICBuZHggKz0gdGFyZ2V0Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGxhc3ROZHggPSBuZHg7CisgICAgICAgICAgICAgICAgbmR4ID0gc291cmNlLmluZGV4T2YodGFyZ2V0LCBuZHgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzb3VyY2Uuc3Vic3RyaW5nKGxhc3ROZHgpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBMb2NhbGUgbG9jYWxlRnJvbVN0cmluZyhmaW5hbCBTdHJpbmcgbG9jYWxlTmFtZSkgeworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBsb2NhbGVOYW1lOworICAgICAgICBTdHJpbmcgY291bnRyeSA9ICIiOworICAgICAgICBTdHJpbmcgdmFyaWFudCA9ICIiOworICAgICAgICAKKyAgICAgICAgaW50IG5keCA9IGxhbmd1YWdlLmluZGV4T2YoJ18nKTsKKyAgICAgICAgaWYgKG5keCA+PSAwKSB7CisgICAgICAgICAgICBjb3VudHJ5ID0gbGFuZ3VhZ2Uuc3Vic3RyaW5nKG5keCsxKTsKKyAgICAgICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyaW5nKDAsIG5keCk7CisgICAgICAgIH0KKyAgICAgICAgbmR4ID0gY291bnRyeS5pbmRleE9mKCdfJyk7CisgICAgICAgIGlmIChuZHggPj0gMCkgeworICAgICAgICAgICAgdmFyaWFudCA9IGNvdW50cnkuc3Vic3RyaW5nKG5keCk7CisgICAgICAgICAgICBjb3VudHJ5ID0gY291bnRyeS5zdWJzdHJpbmcoMCwgbmR4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9OZXV0cmFsVG9KMUNvbnZlcnRlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9OZXV0cmFsVG9KMUNvbnZlcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgxNzUzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL05ldXRyYWxUb0oxQ29udmVydGVyLmphdmEKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvTmV1dHJhbFRvSjFDb252ZXJ0ZXIuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozMCAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIE5ldXRyYWxUb0oxQ29udmVydGVyIGV4dGVuZHMgTG9jYWxlQ29udmVydGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb252ZXJzaW9uIHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgcHJvcE5hbWU7CisgICAgICAgIHByaXZhdGUgaW50IG5keDsKKyAgICAgICAgcHJvdGVjdGVkIENvbnZlcnNpb24oKSB7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIENvbnZlcnNpb24oU3RyaW5nIHByb3BOYW1lKSB7CisgICAgICAgICAgICB0aGlzLnByb3BOYW1lID0gcHJvcE5hbWU7CisgICAgICAgICAgICB0aGlzLm5keCA9IC0xOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBDb252ZXJzaW9uKFN0cmluZyBwcm9wTmFtZSwgaW50IG5keCkgeworICAgICAgICAgICAgdGhpcy5wcm9wTmFtZSA9IHByb3BOYW1lOworICAgICAgICAgICAgdGhpcy5uZHggPSBuZHg7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRQcm9wTmFtZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBwcm9wTmFtZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgU3RyaW5nIGNvbnZlcnQoSGFzaHRhYmxlIHNvdXJjZSkgdGhyb3dzIENvbnZlcnNpb25FcnJvciB7CisgICAgICAgICAgICBPYmplY3Qgc291cmNlRGF0YSA9IHNvdXJjZS5nZXQocHJvcE5hbWUpOworICAgICAgICAgICAgaWYgKHNvdXJjZURhdGEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5keCA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZURhdGEgaW5zdGFuY2VvZiBTdHJpbmdbXSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2VEYXRhID0gKChTdHJpbmdbXSlzb3VyY2VEYXRhKVtuZHhdOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlRGF0YSBpbnN0YW5jZW9mIFN0cmluZ1tdW10pIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlRGF0YSA9ICgoU3RyaW5nW11bXSlzb3VyY2VEYXRhKVtuZHhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzb3VyY2VEYXRhIGluc3RhbmNlb2YgU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpc291cmNlRGF0YTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlRGF0YSBpbnN0YW5jZW9mIFN0cmluZ1tdKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nW10gZGF0YSA9IChTdHJpbmdbXSlzb3VyY2VEYXRhOworICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkgcmVzdWx0LmFwcGVuZCgnOycpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGFbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb252ZXJzaW9uRXJyb3IoImNvdWxkIG5vdCBjb252ZXJ0IHRhZzogIitwcm9wTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb2xsYXRpb25Db252ZXJzaW9uIGV4dGVuZHMgQ29udmVyc2lvbiB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgY29udmVydChIYXNodGFibGUgc291cmNlKSB0aHJvd3MgQ29udmVyc2lvbkVycm9yIHsKKyAgICAgICAgICAgIE9iamVjdFtdW10gZWxlbWVudHMgPSAoT2JqZWN0W11bXSlzb3VyY2UuZ2V0KCJDb2xsYXRpb25FbGVtZW50cyIpOworICAgICAgICAgICAgQ29sbGF0aW9uSXRlbVtdIGl0ZW1zID0gKENvbGxhdGlvbkl0ZW1bXSllbGVtZW50c1syXVsxXTsKKyAgICAgICAgICAgIGlmIChpdGVtcyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoaXRlbXNbaV0hPW51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtc1tpXS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDb252ZXJzaW9uW10gY29udmVyc2lvbnMgPSB7CisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJMb2NhbGVTdHJpbmciKSwgLypsb2NhbGUgaWQgYmFzZWQgb24gaXNvIGNvZGVzKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkxvY2FsZUlEIiksIC8qV2luZG93cyBpZCovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJTaG9ydExhbmd1YWdlIiksIC8qaXNvLTMgYWJicmV2IGxhbmcgbmFtZSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJTaG9ydENvdW50cnkiKSwgLyppc28tMyBhYmJyZXYgY291bnRyeSBuYW1lKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkxhbmd1YWdlcyIpLCAvKmxhbmd1YWdlIG5hbWVzKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkNvdW50cmllcyIpLCAvKmNvdW50cnkgbmFtZXMqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhOYW1lcyIsMCksIC8qamFudWFyeSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aE5hbWVzIiwxKSwgLypmZWJydWFyeSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aE5hbWVzIiwyKSwgLyptYXJjaCovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aE5hbWVzIiwzKSwgLyphcHJpbCovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aE5hbWVzIiw0KSwgLyptYXkqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhOYW1lcyIsNSksIC8qanVuZSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aE5hbWVzIiw2KSwgLypqdWx5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk1vbnRoTmFtZXMiLDcpLCAvKmF1Z3VzdCovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aE5hbWVzIiw4KSwgLypzZXB0ZW1iZXIqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhOYW1lcyIsOSksIC8qb2N0b2JlciovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aE5hbWVzIiwxMCksIC8qbm92ZW1iZXIqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhOYW1lcyIsMTEpLCAvKmRlY2VtYmVyKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk1vbnRoTmFtZXMiLDEyKSwgLyptb250aCAxMyBpZiBhcHBsaWNhYmxlKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk1vbnRoQWJicmV2aWF0aW9ucyIsMCksIC8qYWJiIGphbnVhcnkqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhBYmJyZXZpYXRpb25zIiwxKSwgLyphYmIgZmVicnVhcnkqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhBYmJyZXZpYXRpb25zIiwyKSwgLyphYmIgbWFyY2gqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhBYmJyZXZpYXRpb25zIiwzKSwgLyphYmIgYXByaWwqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhBYmJyZXZpYXRpb25zIiw0KSwgLyphYmIgbWF5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk1vbnRoQWJicmV2aWF0aW9ucyIsNSksIC8qYWJiIGp1bmUqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhBYmJyZXZpYXRpb25zIiw2KSwgLyphYmIganVseSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aEFiYnJldmlhdGlvbnMiLDcpLCAvKmFiYiBhdWd1c3QqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhBYmJyZXZpYXRpb25zIiw4KSwgLyphYmIgc2VwdGVtYmVyKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk1vbnRoQWJicmV2aWF0aW9ucyIsOSksIC8qYWJiIG9jdG9iZXIqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTW9udGhBYmJyZXZpYXRpb25zIiwxMCksIC8qYWJiIG5vdmVtYmVyKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk1vbnRoQWJicmV2aWF0aW9ucyIsMTEpLCAvKmFiYiBkZWNlbWJlciovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJNb250aEFiYnJldmlhdGlvbnMiLDEyKSwgLyphYmIgbW9udGggMTMgaWYgYXBwbGljYWJsZSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJEYXlOYW1lcyIsMCksIC8qTW9uZGF5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkRheU5hbWVzIiwxKSwgLypUdWVzZGF5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkRheU5hbWVzIiwyKSwgLypXZWRuZXNkYXkqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF5TmFtZXMiLDMpLCAvKlRodXJzZGF5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkRheU5hbWVzIiw0KSwgLypGcmlkYXkqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF5TmFtZXMiLDUpLCAvKlNhdHVyZGF5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkRheU5hbWVzIiw2KSwgLypTdW5kYXkqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF5QWJicmV2aWF0aW9ucyIsMCksIC8qYWJiIE1vbmRheSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJEYXlBYmJyZXZpYXRpb25zIiwxKSwgLyphYmIgVHVlc2RheSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJEYXlBYmJyZXZpYXRpb25zIiwyKSwgLyphYmIgV2VkbmVzZGF5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkRheUFiYnJldmlhdGlvbnMiLDMpLCAvKmFiYiBUaHVyc2RheSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJEYXlBYmJyZXZpYXRpb25zIiw0KSwgLyphYmIgRnJpZGF5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkRheUFiYnJldmlhdGlvbnMiLDUpLCAvKmFiYiBTYXR1cmRheSovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJEYXlBYmJyZXZpYXRpb25zIiw2KSwgLyphYmIgU3VuZGF5Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIkFtUG1NYXJrZXJzIiwwKSwgLyphbSBtYXJrZXIqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiQW1QbU1hcmtlcnMiLDEpLCAvKnBtIG1hcmtlciovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJFcmFzIiksLyplcmEgc3RyaW5ncyovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJOdW1iZXJQYXR0ZXJucyIsMCksIC8qZGVjaW1hbCBwYXR0ZXJuKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk51bWJlclBhdHRlcm5zIiwxKSwgLypjdXJyZW5jeSBwYXR0ZXJuKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk51bWJlclBhdHRlcm5zIiwyKSwgLypwZXJjZW50IHBhdHRlcm4qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTnVtYmVyRWxlbWVudHMiLDApLCAvKmRlY2ltYWwgc2VwYXJhdG9yKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk51bWJlckVsZW1lbnRzIiwxKSwgLypncm91cCAodGhvdXNhbmRzKSBzZXBhcmF0b3IqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTnVtYmVyRWxlbWVudHMiLDIpLCAvKmxpc3Qgc2VwYXJhdG9yKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk51bWJlckVsZW1lbnRzIiwzKSwgLypwZXJjZW50IHNpZ24qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiTnVtYmVyRWxlbWVudHMiLDQpLCAvKm5hdGl2ZSAwIGRpZ2l0Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk51bWJlckVsZW1lbnRzIiw1KSwgLypwYXR0ZXJuIGRpZ2l0Ki8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk51bWJlckVsZW1lbnRzIiw2KSwgLyptaW51cyBzaWduKi8KKyAgICAgICAgbmV3IENvbnZlcnNpb24oIk51bWJlckVsZW1lbnRzIiw3KSwgLypleHBvbmVudGlhbCovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJDdXJyZW5jeUVsZW1lbnRzIiwwKSwgLypsb2NhbCBjdXJyZW5jeSBzeW1ib2wqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiQ3VycmVuY3lFbGVtZW50cyIsMSksIC8qaW50bCBjdXJyZW5jeSBzeW1ib2wqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiQ3VycmVuY3lFbGVtZW50cyIsMiksIC8qbW9uZXRhcnkgZGVjaW1hbCBzZXBhcmF0b3IqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVQYXR0ZXJucyIsMCksIC8qZnVsbCB0aW1lIHBhdHRlcm4qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVQYXR0ZXJucyIsMSksIC8qbG9uZyB0aW1lIHBhdHRlcm4qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVQYXR0ZXJucyIsMiksIC8qbWVkaXVtIHRpbWUgcGF0dGVybiovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJEYXRlVGltZVBhdHRlcm5zIiwzKSwgLypzaG9ydCB0aW1lIHBhdHRlcm4qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVQYXR0ZXJucyIsNCksIC8qZnVsbCBkYXRlIHBhdHRlcm4qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVQYXR0ZXJucyIsNSksIC8qbG9uZyBkYXRlIHBhdHRlcm4qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVQYXR0ZXJucyIsNiksIC8qbWVkaXVtIGRhdGUgcGF0dGVybiovCisgICAgICAgIG5ldyBDb252ZXJzaW9uKCJEYXRlVGltZVBhdHRlcm5zIiw3KSwgLypzaG9ydCBkYXRlIHBhdHRlcm4qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVQYXR0ZXJucyIsOCksIC8qZGF0ZS10aW1lIHBhdHRlcm4qLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVFbGVtZW50cyIsOSksIC8qZmlyc3QgZGF5IG9mIHdlZWsqLworICAgICAgICBuZXcgQ29udmVyc2lvbigiRGF0ZVRpbWVFbGVtZW50cyIsMTApLCAvKm1pbiBkYXlzIGluIGZpcnN0IHdlZWsqLworICAgICAgICBuZXcgQ29sbGF0aW9uQ29udmVyc2lvbigpLCAvKmNvbGxhdGlvbiBvcmRlciovCisgICAgfTsKKyAgICBwcml2YXRlIExvY2FsZSBsb2NhbGU7CisgICAgcHJpdmF0ZSBMb2NhbGUgcGFyZW50TG9jYWxlOworICAgIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgZGVmYXVsdERhdGE7CisKKyAgICBwdWJsaWMgTmV1dHJhbFRvSjFDb252ZXJ0ZXIoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gbG9jYWxlLnRvU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyBjb3VudHJ5ID0gIiI7CisgICAgICAgIFN0cmluZyB2YXJpYW50ID0gIiI7CisgICAgICAgIAorICAgICAgICBpbnQgbmR4ID0gbGFuZ3VhZ2UuaW5kZXhPZignXycpOworICAgICAgICBpZiAobmR4ID49IDApIHsKKyAgICAgICAgICAgIGNvdW50cnkgPSBsYW5ndWFnZS5zdWJzdHJpbmcobmR4KzEpOworICAgICAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zdWJzdHJpbmcoMCwgbmR4KTsKKyAgICAgICAgfQorICAgICAgICBuZHggPSBjb3VudHJ5LmluZGV4T2YoJ18nKTsKKyAgICAgICAgaWYgKG5keCA+PSAwKSB7CisgICAgICAgICAgICB2YXJpYW50ID0gY291bnRyeS5zdWJzdHJpbmcobmR4KTsKKyAgICAgICAgICAgIGNvdW50cnkgPSBjb3VudHJ5LnN1YnN0cmluZygwLCBuZHgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIiIuZXF1YWxzKGNvdW50cnkpKSB7CisgICAgICAgICAgICBsYW5ndWFnZSA9ICIiOworICAgICAgICAgICAgdmFyaWFudCA9ICIiOworICAgICAgICB9IGVsc2UgaWYgKCIiLmVxdWFscyh2YXJpYW50KSkgeworICAgICAgICAgICAgY291bnRyeSA9ICIiOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwYXJlbnRMb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KTsKKyAgICAgICAgZGVmYXVsdERhdGEgPQorICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXIubXlMb2NhbGVFbGVtZW50cyIsIHBhcmVudExvY2FsZSk7CisgICAgICAgICAgICAvL3t7SU5JVF9DT05UUk9MUworCQkvL319Cit9CisgICAgCisgICAgLyoqIGNvbnZlcnQgdGhlIHNvdXJjZSB0YWJsZSB0byB0aGUgcmVzdWx0ICovCisgICAgcHJvdGVjdGVkIHZvaWQgY29udmVydChIYXNodGFibGUgcmVzdWx0LCBIYXNodGFibGUgc291cmNlKSB0aHJvd3MgQ29udmVyc2lvbkVycm9yIHsKKyAgICAgICAgVmVjdG9yIGxvY2FsZUVsZW1lbnRzID0gbmV3IFZlY3RvcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnZlcnNpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBDb252ZXJzaW9uIGNvbnYgPSBjb252ZXJzaW9uc1tpXTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuZXdWYWx1ZSA9IGNvbnYuY29udmVydChzb3VyY2UpOworICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBsb2NhbGVFbGVtZW50cy5hZGRFbGVtZW50KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9jYWxlRWxlbWVudHMuYWRkRWxlbWVudChkZWZhdWx0RGF0YS5nZXRPYmplY3QoY29udi5nZXRQcm9wTmFtZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LnB1dCgiTG9jYWxlRWxlbWVudHMiLCBsb2NhbGVFbGVtZW50cyk7CisgICAgfQorICAgIC8ve3tERUNMQVJFX0NPTlRST0xTCisJLy99fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUE9TSVhMb2NhbGVSZWFkZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUE9TSVhMb2NhbGVSZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNmRlMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9QT1NJWExvY2FsZVJlYWRlci5qYXZhCkBAIC0wLDAgKzEsNDA3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1BPU0lYTG9jYWxlUmVhZGVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDgvMDEgMDA6MDg6NTcgJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBQT1NJWExvY2FsZVJlYWRlciB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbG9jYWxlRGF0YVBhdGg7CisgICAgcHJpdmF0ZSBmaW5hbCBMb2NhbGUgbG9jYWxlOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFHX1RPS0VOID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVBBUkFUT1JfVE9LRU4gPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVPTF9UT0tFTiA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU9GX1RPS0VOID0gNDsKKworICAgICAgICAvL3RoZXNlIHN0YXRlcyBhcmUgdXNlZCB0byBwYXJzZSB0aGUgYnVsayBvZiB0aGUKKyAgICAgICAgLy9pbnB1dCBmaWxlLiAgVGhleSB0cmFuc2xhdGUgZXNjYXBlZCBjaGFyYWN0ZXJzCisgICAgICAgIC8vYW5kIHN5bW9saWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgaW5saW5lLgorICAgIHN0YXRpYyBmaW5hbCBMZXguVHJhbnNpdGlvbltdW10gZGF0YVN0YXRlcyA9IHsKKyAgICAgICAgeyAvL3N0YXRlIDA6IHN0YXJ0CisgICAgICAgICAgICBuZXcgU3BhY2VUcmFuc2l0aW9uKDApLAorICAgICAgICAgICAgbmV3IExleC5DaGFyVHJhbnNpdGlvbignOycsIExleC5JR05PUkVfQ09OU1VNRSwgU0VQQVJBVE9SX1RPS0VOKSwKKyAgICAgICAgICAgIG5ldyBMZXguQ2hhclRyYW5zaXRpb24oJywnLCBMZXguSUdOT1JFX0NPTlNVTUUsIFNFUEFSQVRPUl9UT0tFTiksCisgICAgICAgICAgICBuZXcgRU9MVHJhbnNpdGlvbihFT0xfVE9LRU4pLAorICAgICAgICAgICAgbmV3IFRva2VuVHJhbnNpdGlvbihUQUdfVE9LRU4pLAorICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKEVPRl9UT0tFTiksCisgICAgICAgICAgICBuZXcgTGV4LlBhcnNlRXhjZXB0aW9uVHJhbnNpdGlvbigidW5leHBlY3RlZCBjaGFyYWN0ZXJzIikKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdGF0aWMgZmluYWwgTGV4LlRyYW5zaXRpb25bXVtdIExDU3RhdGVzID0geworICAgICAgICB7IC8vc3RhdGUgMDogc3RhcnQKKyAgICAgICAgICAgIG5ldyBTcGFjZVRyYW5zaXRpb24oMCksCisgICAgICAgICAgICBuZXcgRU9MVHJhbnNpdGlvbihFT0xfVE9LRU4pLAorICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKEVPRl9UT0tFTiksCisgICAgICAgICAgICBuZXcgTGV4LkRlZmF1bHRUcmFuc2l0aW9uKExleC5BQ0NVTVVMQVRFX0NPTlNVTUUsIC0xKQorICAgICAgICB9LAorICAgICAgICB7ICAgLy9ncmFiIGZpcnN0IHdvcmQKKyAgICAgICAgICAgIG5ldyBMZXguU3RyaW5nVHJhbnNpdGlvbihTcGFjZVRyYW5zaXRpb24uU1BBQ0VfQ0hBUlMsIExleC5JR05PUkVfUFVUQkFDSywgVEFHX1RPS0VOKSwKKyAgICAgICAgICAgIG5ldyBMZXguU3RyaW5nVHJhbnNpdGlvbihFT0xUcmFuc2l0aW9uLkVPTF9DSEFSUywgTGV4LklHTk9SRV9QVVRCQUNLLCBUQUdfVE9LRU4pLAorICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKFRBR19UT0tFTiksCisgICAgICAgICAgICBuZXcgTGV4LkRlZmF1bHRUcmFuc2l0aW9uKExleC5BQ0NVTVVMQVRFX0NPTlNVTUUsIC0xKQorICAgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBQT1NJWExvY2FsZVJlYWRlcihmaW5hbCBTdHJpbmcgbG9jYWxlRGF0YVBhdGgsIGZpbmFsIExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgdGhpcy5sb2NhbGVEYXRhUGF0aCA9IGxvY2FsZURhdGFQYXRoOworICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTsKKyAgICAgICAgICAgIC8ve3tJTklUX0NPTlRST0xTCisJCS8vfX0KK30KKyAgICAKKyAgICBwdWJsaWMgSGFzaHRhYmxlIHBhcnNlKFN0cmluZyBmaWxlTmFtZSwgYnl0ZSBmbGFncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEhhc2h0YWJsZSB0YWJsZSA9IHBhcnNlTmF0aXZlKGZpbGVOYW1lKTsKKyAgICAgICAgICAgIEhhc2h0YWJsZSByZXN1bHQgPSBuZXcgUG9zaXhUb05ldXRyYWxDb252ZXJ0ZXIoZmxhZ3MsIGxvY2FsZSxmaWxlTmFtZSkuY29udmVydCh0YWJsZSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9IGNhdGNoIChMb2NhbGVDb252ZXJ0ZXIuQ29udmVyc2lvbkVycm9yIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSW50ZXJuYWwgZXJyb3IgY29udmVydGluZyBsb2NhbGUgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIEhhc2h0YWJsZSBwYXJzZU5hdGl2ZShTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGNoYXIgb2xkRXNjYXBlQ2hhciA9IEVzY2FwZVRyYW5zaXRpb24uc2V0RGVmYXVsdEVzY2FwZUNoYXIoKTsKKyAgICAgICAgY2hhciBvbGRDb21tZW50Q2hhciA9IEVPTFRyYW5zaXRpb24uc2V0RGVmYXVsdENvbW1lbnRDaGFyKCk7CisgICAgICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTGluZUNoYXJOdW1iZXJSZWFkZXIgbGluZXMgPSBuZXcgTGluZUNoYXJOdW1iZXJSZWFkZXIoCisgICAgICAgICAgICAgICAgbmV3IEJ1ZmZlcmVkUmVhZGVyKAorICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZVJlYWRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlKGxvY2FsZURhdGFQYXRoLCBmaWxlTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBQdXNoYmFja1JlYWRlciByZWFkZXIgPSBuZXcgUHVzaGJhY2tSZWFkZXIobGluZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvL1Nob3ZlIGEgbmV3bGluZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUuICBUaGlzIGhhcyB0aGUgYWZmZWN0IG9mIGFsbG93aW5nCisgICAgICAgICAgICAvL3RoZSBmaWxlIHRvIHN0YXJ0IHdpdGggYSBjb21tZW50LCBzaW5jZSB0aGUgcGFyc2VyIG9ubHkgYWxsb3dzIGNvbW1lbnRzIGFzIAorICAgICAgICAgICAgLy9wYXJ0IG9mIGFuIEVPTAorICAgICAgICAgICAgcmVhZGVyLnVucmVhZCgnXG4nKTsKKworICAgICAgICAgICAgU3RyaW5nIHNlY3Rpb25UYWcgPSBzZWVrTEMocmVhZGVyKTsKKyAgICAgICAgICAgIHdoaWxlIChzZWN0aW9uVGFnICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZVNlY3Rpb24odGFibGUsIHJlYWRlciwgc2VjdGlvblRhZyk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoTGV4LlBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUiBwYXJzaW5nOiAiK2UucmVhc29uKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgICAgICAgICBMaW5lOiAiK2xpbmVzLmdldExpbmVOdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAgICAgICAgY2hhcjogIitsaW5lcy5nZXRDaGFyTnVtYmVyKCkpOworICAgICAgICAgICAgICAgICAgICBzZWVrRU5EKHJlYWRlcik7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiU2tpcHBlZCB0byBsaW5lOiAiKyhsaW5lcy5nZXRMaW5lTnVtYmVyKCkrMSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZWN0aW9uVGFnID0gc2Vla0xDKHJlYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBFc2NhcGVUcmFuc2l0aW9uLnNldEVzY2FwZUNoYXIob2xkRXNjYXBlQ2hhcik7CisgICAgICAgICAgICBFT0xUcmFuc2l0aW9uLnNldENvbW1lbnRDaGFyKG9sZENvbW1lbnRDaGFyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGFibGU7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBwYXJzZVNlY3Rpb24oSGFzaHRhYmxlIHRhYmxlLCBQdXNoYmFja1JlYWRlciByZWFkZXIsIFN0cmluZyBzZWN0aW9uVGFnKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoc2VjdGlvblRhZy5lcXVhbHMoIkxDX0NUWVBFIikpIHsKKyAgICAgICAgICAgIHBhcnNlQ1RZUEUodGFibGUsIHJlYWRlcik7CisgICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvblRhZy5lcXVhbHMoIkxDX0NPTExBVEUiKSkgeworICAgICAgICAgICAgcGFyc2VDT0xMQVRFKHRhYmxlLCByZWFkZXIpOworICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb25UYWcuZXF1YWxzKCJMQ19NT05FVEFSWSIpKSB7CisgICAgICAgICAgICBwYXJzZUxDKHRhYmxlLCByZWFkZXIsIHNlY3Rpb25UYWcpOworICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb25UYWcuZXF1YWxzKCJMQ19OVU1FUklDIikpIHsKKyAgICAgICAgICAgIHBhcnNlTEModGFibGUsIHJlYWRlciwgc2VjdGlvblRhZyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2VjdGlvblRhZy5lcXVhbHMoIkxDX1RJTUUiKSkgeworICAgICAgICAgICAgcGFyc2VMQyh0YWJsZSwgcmVhZGVyLCBzZWN0aW9uVGFnKTsKKyAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uVGFnLmVxdWFscygiTENfTUVTU0FHRVMiKSkgeworICAgICAgICAgICAgcGFyc2VMQyh0YWJsZSwgcmVhZGVyLCBzZWN0aW9uVGFnKTsKKyAgICAgICAgfWVsc2UgaWYoc2VjdGlvblRhZy5lcXVhbHMoIkxDX01FQVNVUkVNRU5UIikpeworICAgICAgICAgICAgcGFyc2VMQyh0YWJsZSwgcmVhZGVyLCBzZWN0aW9uVGFnKTsKKyAgICAgICAgfWVsc2UgaWYoc2VjdGlvblRhZy5lcXVhbHMoIkxDX0FERFJFU1MiKSl7CisgICAgICAgICAgICBwYXJzZUxDKHRhYmxlLCByZWFkZXIsIHNlY3Rpb25UYWcpOworICAgICAgICB9ZWxzZSBpZihzZWN0aW9uVGFnLmVxdWFscygiTENfUEFQRVIiKSl7CisgICAgICAgICAgICBwYXJzZUxDKHRhYmxlLCByZWFkZXIsIHNlY3Rpb25UYWcpOworICAgICAgICB9ZWxzZSBpZihzZWN0aW9uVGFnLmVxdWFscygiTENfTkFNRSIpKXsKKyAgICAgICAgICAgIHBhcnNlTEModGFibGUsIHJlYWRlciwgc2VjdGlvblRhZyk7CisgICAgICAgIH1lbHNlIGlmKHNlY3Rpb25UYWcuZXF1YWxzKCJMQ19JREVOVElGSUNBVElPTiIpKXsKKyAgICAgICAgICAgIHBhcnNlTEModGFibGUsIHJlYWRlciwgc2VjdGlvblRhZyk7CisgICAgICAgIH1lbHNlIGlmKHNlY3Rpb25UYWcuZXF1YWxzKCJMQ19URUxFUEhPTkUiKSl7CisgICAgICAgICAgICBwYXJzZUxDKHRhYmxlLCByZWFkZXIsIHNlY3Rpb25UYWcpOworICAgICAgICAgICAgCisgICAgICAgIH1lbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5yZWNvZ25pc2VkIHNlY3Rpb246IitzZWN0aW9uVGFnKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVmYXVsdCBwYXJzaW5nIGFwcGxpZWQuIik7CisgICAgICAgICAgICBwYXJzZUxDKHRhYmxlLCByZWFkZXIsIHNlY3Rpb25UYWcpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBQdXNoYmFja1JlYWRlciBjcmVhdGVQYXJzZXJJbnB1dChTdHJpbmcgbG9jYWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgUHVzaGJhY2tSZWFkZXIgcmVhZGVyID0gbmV3IFB1c2hiYWNrUmVhZGVyKAorICAgICAgICAgICAgbmV3IEJ1ZmZlcmVkUmVhZGVyKAorICAgICAgICAgICAgICAgIG5ldyBGaWxlUmVhZGVyKAorICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZShsb2NhbGVEYXRhUGF0aCwgbG9jYWxlTmFtZSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICk7CisgICAgICAgIC8vU2hvdmUgYSBuZXdsaW5lIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4gIFRoaXMgaGFzIHRoZSBhZmZlY3Qgb2YgYWxsb3dpbmcKKyAgICAgICAgLy90aGUgZmlsZSB0byBzdGFydCB3aXRoIGEgY29tbWVudCwgc2luY2UgdGhlIHBhcnNlciBvbmx5IGFsbG93cyBjb21tZW50cyBhcyAKKyAgICAgICAgLy9wYXJ0IG9mIGFuIEVPTAorICAgICAgICByZWFkZXIudW5yZWFkKCdcbicpOworICAgICAgICByZXR1cm4gcmVhZGVyOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyBzZWVrTEMoUHVzaGJhY2tSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBMZXggcCA9IG5ldyBMZXgoTENTdGF0ZXMsIHJlYWRlcik7CisgICAgICAgIGZpbmFsIFN0cmluZyBMQyA9ICJMQ18iOworICAgICAgICBpbnQgcyA9IHAubmV4dFRva2VuKCk7CisgICAgICAgIHdoaWxlICgocyAhPSBFT0ZfVE9LRU4pKSB7CisgICAgICAgICAgICBpZiAocyA9PSBUQUdfVE9LRU4pIHsKKyAgICAgICAgICAgICAgICBpZiAocC5kYXRhU3RhcnRzV2l0aChMQykpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZyA9IHAuZ2V0RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gcC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocyAhPSBFT0xfVE9LRU4gJiYgcyAhPSBFT0ZfVE9LRU4pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocC5kYXRhRXF1YWxzKCJlc2NhcGVfY2hhciIpKSB7CisgICAgICAgICAgICAgICAgICAgIHMgPSBwLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBUQUdfVE9LRU4gfHwgcC5nZXREYXRhKCkubGVuZ3RoKCkgIT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVzY2FwZV9jaGFyID0gcC5nZXREYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBFc2NhcGVUcmFuc2l0aW9uLnNldEVzY2FwZUNoYXIoZXNjYXBlX2NoYXIuY2hhckF0KDApKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgaW4gZXNjYXBlX2NoYXIgZGlyZWN0aXZlLiAgRGlyZWN0aXZlIGlnbm9yZWQuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAuZGF0YUVxdWFscygiY29tbWVudF9jaGFyIikpIHsKKyAgICAgICAgICAgICAgICAgICAgcyA9IHAubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzID09IFRBR19UT0tFTiB8fCBwLmdldERhdGEoKS5sZW5ndGgoKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29tbWVudF9jaGFyID0gcC5nZXREYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBFT0xUcmFuc2l0aW9uLnNldENvbW1lbnRDaGFyKGNvbW1lbnRfY2hhci5jaGFyQXQoMCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBpbiBlc2NhcGVfY2hhciBkaXJlY3RpdmUuICBEaXJlY3RpdmUgaWdub3JlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMgPSBwLm5leHRUb2tlbigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBzZWVrRU5EKFB1c2hiYWNrUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgTGV4IHAgPSBuZXcgTGV4KExDU3RhdGVzLCByZWFkZXIpOworICAgICAgICBmaW5hbCBTdHJpbmcgRU5EID0gIkVORCI7CisgICAgICAgIGludCBzID0gcC5uZXh0VG9rZW4oKTsKKyAgICAgICAgd2hpbGUgKChzICE9IEVPRl9UT0tFTikpIHsKKyAgICAgICAgICAgIGlmIChzID09IFRBR19UT0tFTikgeworICAgICAgICAgICAgICAgIGlmIChwLmRhdGFTdGFydHNXaXRoKEVORCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHAubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHMgIT0gRU9MX1RPS0VOICYmIHMgIT0gRU9GX1RPS0VOKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcyA9IHAubmV4dFRva2VuKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcGFyc2VDVFlQRShIYXNodGFibGUgdGFibGUsIFB1c2hiYWNrUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgTGV4IHAgPSBuZXcgTGV4KGRhdGFTdGF0ZXMsIHJlYWRlcik7CisgICAgICAgIFN0cmluZ0J1ZmZlciB0ZW1wID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpbnQgcyA9IHAubmV4dFRva2VuKCk7CisgICAgICAgIGlmICgocyA9PSBUQUdfVE9LRU4pICYmIHAuZGF0YUVxdWFscygiY29weSIpKSB7CisgICAgICAgICAgICBwLmFjY2VwdChUQUdfVE9LRU4pOworICAgICAgICAgICAgcGFyc2VDb3B5KCJMQ19DVFlQRSIsIHAuZ2V0RGF0YSgpLCB0YWJsZSk7CisgICAgICAgICAgICBwLmFjY2VwdChFT0xfVE9LRU4pOworICAgICAgICAgICAgcC5hY2NlcHQoVEFHX1RPS0VOLCAiRU5EIik7CisgICAgICAgICAgICBwLmFjY2VwdChUQUdfVE9LRU4sICJMQ19DVFlQRSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2hpbGUgKChzID09IFRBR19UT0tFTikgJiYgIXAuZGF0YUVxdWFscygiRU5EIikpIHsgIAorICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBwLmdldERhdGEoKTsKKyAgICAgICAgICAgICAgICB0ZW1wLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgICAgICBwLmFjY2VwdChUQUdfVE9LRU4pOworICAgICAgICAgICAgICAgIHAuYXBwZW5kRGF0YVRvKHRlbXApOworICAgICAgICAgICAgICAgIHMgPSBwLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIHdoaWxlIChzID09IFNFUEFSQVRPUl9UT0tFTikgeworICAgICAgICAgICAgICAgICAgICBwLmFjY2VwdChUQUdfVE9LRU4pOworICAgICAgICAgICAgICAgICAgICBwLmFwcGVuZERhdGFUbyh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgcyA9IHAubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzICE9IEVPTF9UT0tFTikgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZS5wdXQoa2V5LCB0ZW1wLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzID0gcC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHAuYWNjZXB0KFRBR19UT0tFTiwgIkxDX0NUWVBFIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHBhcnNlQ29weShTdHJpbmcgc2VjdGlvbiwgU3RyaW5nIHRvQ29weSwgSGFzaHRhYmxlIHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGNoYXIgb2xkRXNjYXBlQ2hhciA9IEVzY2FwZVRyYW5zaXRpb24uc2V0RGVmYXVsdEVzY2FwZUNoYXIoKTsKKyAgICAgICAgY2hhciBvbGRDb21tZW50Q2hhciA9IEVPTFRyYW5zaXRpb24uc2V0RGVmYXVsdENvbW1lbnRDaGFyKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBQdXNoYmFja1JlYWRlciByZWFkZXIgPSBjcmVhdGVQYXJzZXJJbnB1dCh0b0NvcHkpOworICAgICAgICAgICAgU3RyaW5nIHRhZyA9IHNlZWtMQyhyZWFkZXIpOworICAgICAgICAgICAgd2hpbGUgKHRhZyAhPSBudWxsICYmICFzZWN0aW9uLmVxdWFscyh0YWcpKSB7CisgICAgICAgICAgICAgICAgdGFnID0gc2Vla0xDKHJlYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGFnICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBwYXJzZVNlY3Rpb24odCwgcmVhZGVyLCBzZWN0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy9oZXkge2pmfSAtIGlzIHRoaXMgYW4gZXJyb3I/CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBFc2NhcGVUcmFuc2l0aW9uLnNldEVzY2FwZUNoYXIob2xkRXNjYXBlQ2hhcik7CisgICAgICAgICAgICBFT0xUcmFuc2l0aW9uLnNldENvbW1lbnRDaGFyKG9sZENvbW1lbnRDaGFyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcGFyc2VMQyhIYXNodGFibGUgdCwgUHVzaGJhY2tSZWFkZXIgcmVhZGVyLCBTdHJpbmcgc2VjdGlvblRhZykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgTGV4IGlucHV0ID0gbmV3IExleChkYXRhU3RhdGVzLCByZWFkZXIpOworICAgICAgICBpbnB1dC5hY2NlcHQoVEFHX1RPS0VOKTsKKyAgICAgICAgaWYgKGlucHV0LmRhdGFFcXVhbHMoImNvcHkiKSkgeworICAgICAgICAgICAgaW5wdXQuYWNjZXB0KFRBR19UT0tFTik7CisgICAgICAgICAgICBwYXJzZUNvcHkoc2VjdGlvblRhZywgaW5wdXQuZ2V0RGF0YSgpLCB0KTsgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoKGlucHV0LmdldFN0YXRlKCkgPT0gVEFHX1RPS0VOKSAmJiAhaW5wdXQuZGF0YUVxdWFscygiRU5EIikpIHsgICAKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGFiZWwgPSBpbnB1dC5nZXREYXRhKCk7CisgICAgICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBpbnB1dC5hY2NlcHQoVEFHX1RPS0VOKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGVtcCA9IGlucHV0LmdldERhdGEoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYWRkRWxlbWVudCh0ZW1wKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5wdXQubmV4dFRva2VuKCkgPT0gU0VQQVJBVE9SX1RPS0VOKSB7CisgICAgICAgICAgICAgICAgICAgIGlucHV0LmFjY2VwdChUQUdfVE9LRU4pOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpbnB1dC5nZXREYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hZGRFbGVtZW50KHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGRhdGEgPSBuZXcgU3RyaW5nW3ZhbHVlcy5zaXplKCldOworICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuY29weUludG8oZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIHQucHV0KGxhYmVsLCBkYXRhKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0LnB1dChsYWJlbCwgdmFsdWVzLmVsZW1lbnRBdCgwKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbnB1dC5nZXRTdGF0ZSgpICE9IEVPTF9UT0tFTikgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4dHJhbmVvdXMgdGV4dCBhZnRlciBsYWJlbDogIiArbGFiZWwpOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5wdXQubmV4dFRva2VuKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW5wdXQuYWNjZXB0KFRBR19UT0tFTiwgc2VjdGlvblRhZyk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBwYXJzZUNPTExBVEUoSGFzaHRhYmxlIHRhYmxlLCBQdXNoYmFja1JlYWRlciByZWFkZXIpIAorICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgUG9zaXhDaGFyTWFwIG1hcCA9IG5ldyBQb3NpeENoYXJNYXAoU3ltYm9sVHJhbnNpdGlvbi5nZXRDaGFyTWFwKCkpOworICAgICAgICBTeW1ib2xUcmFuc2l0aW9uLnNldENoYXJNYXAobWFwKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIExleCBpbnB1dCA9IG5ldyBMZXgoZGF0YVN0YXRlcywgcmVhZGVyKTsKKyAgICAgICAgICAgIFBvc2l4Q29sbGF0aW9uQnVpbGRlciBidWlsZGVyID0gbmV3IFBvc2l4Q29sbGF0aW9uQnVpbGRlcihtYXApOworCisgICAgICAgICAgICBpbnQgcyA9IGlucHV0Lm5leHRUb2tlbigpOworICAgICAgICAgICAgd2hpbGUgKHMgPT0gRU9MX1RPS0VOKSBzID0gaW5wdXQubmV4dFRva2VuKCk7CisgICAgICAgICAgICB3aGlsZSAocyA9PSBUQUdfVE9LRU4pIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YUVxdWFscygiRU5EIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5kYXRhRXF1YWxzKCJVTkRFRklORUQiKSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldBUk5JTkc6IFVuZGVmaW5lZCBjaGFyYWN0ZXJzIHdpbGwgc29ydCBsYXN0LiIpOworICAgICAgICAgICAgICAgICAgICBzID0gaW5wdXQubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzICE9IEVPRl9UT0tFTiAmJiBzICE9IEVPTF9UT0tFTikgeworICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGlucHV0Lm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5kYXRhRXF1YWxzKCJjb3B5IikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9jb3B5IGNvbGxhdGlvbiBydWxlcyBmcm9tIGFub3RoZXIgbG9jYWxlCisgICAgICAgICAgICAgICAgICAgIGlucHV0LmFjY2VwdChUQUdfVE9LRU4pOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG9Db3B5ID0gaW5wdXQuZ2V0RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpbnB1dC5hY2NlcHQoRU9MX1RPS0VOKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb3B5KCJMQ19DT0xMQVRFIiwgdG9Db3B5LCB0YWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ29weWluZyBjb2xsYXRpb24gcnVsZXMgZnJvbSAiK3RvQ29weSsiLi4uIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5kYXRhRXF1YWxzKCIuLi4iKSkgeworICAgICAgICAgICAgICAgICAgICAvL2ZpbGwgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGxhc3QgZWxlbWVudCBhbmQgdGhlIG5leHQgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOiBFbGxpcHNpcyBub3Qgc3VwcG9ydGVkIGluIGNvbGxhdGlvbiBydWxlcy4iKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgICAgICAgTGluZSBpZ25vcmVkIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5kYXRhRXF1YWxzKCJyZXBsYWNlLWFmdGVyIikpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjogUmVwbGFjZS1hZnRlciBub3Qgc3VwcG9ydGVkIGluIGNvbGxhdGlvbiBydWxlcy4iKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgICAgICAgU2tpcHBpbmcgdW50aWwgbmV4dCByZXBsYWNlLWVuZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgcyA9IGlucHV0Lm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyAhPSBFT0ZfVE9LRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09IFRBR19UT0tFTiAmJiBpbnB1dC5kYXRhRXF1YWxzKCJyZXBsYWNlLWVuZCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0KEVPTF9UT0tFTik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LmRhdGFFcXVhbHMoImNvbGxhdGluZy1lbGVtZW50IikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9TZXZlcmFsIGNoYXJhY3RlcnMgc2hvdWxkIHNvcnQgYXMgYSBzaW5nbGUgZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0KFRBR19UT0tFTik7ICAgIC8vZ2V0IHRoZSBzeW1ib2wKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGlucHV0LmdldERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0KFRBR19UT0tFTiwgImZyb20iKTsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0KFRBR19UT0tFTik7ICAgIC8vZ2V0IHRoZSBleHBhbnNpb24KKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaW5wdXQuZ2V0RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmRlZmluZUNvbnRyYWN0aW9uKGtleSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpbnB1dC5hY2NlcHQoRU9MX1RPS0VOKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LmRhdGFFcXVhbHMoImNvbGxhdGluZy1zeW1ib2wiKSkgeworICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSBhIHdlaWdodCBzeW1ib2wuICBUaGlzIHN5bWJvbCBkb2VzIG5vdCByZXByZXNlbnQgYSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgIC8vSXQncyBvbmx5IHVzZWQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuICBXZSBkZWZpbmUgdGhlIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAvL3ZhbHVlIGZvciB0aGlzIGNoYXJhY3RlciB0byBiZSBpbiB0aGUgcHJpdmF0ZSBhcmVhIHNpbmNlIG91cgorICAgICAgICAgICAgICAgICAgICAvL2NvbGxhdGlvbiBzdHVmZiBkb2Vzbid0IHNvcnQgdGhhdCBhcmVhLgorICAgICAgICAgICAgICAgICAgICBpbnB1dC5hY2NlcHQoVEFHX1RPS0VOKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5kZWZpbmVXZWlnaHRTeW1ib2woaW5wdXQuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0KEVPTF9UT0tFTik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5kYXRhRXF1YWxzKCJvcmRlcl9zdGFydCIpKSB7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvciB0ZW1wVmVjdG9yID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgICAgICAvL3N0YXJ0IHJlYWRpbmcgY29sbGF0aW9uIG9yZGVyaW5nIHJ1bGVzLiAKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0KFRBR19UT0tFTik7CisgICAgICAgICAgICAgICAgICAgIHRlbXBWZWN0b3IuYWRkRWxlbWVudChpbnB1dC5nZXREYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBzID0gaW5wdXQubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzID09IFNFUEFSQVRPUl9UT0tFTikgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0KFRBR19UT0tFTik7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVmVjdG9yLmFkZEVsZW1lbnQoaW5wdXQuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBpbnB1dC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBvcmRlcl9zdGFydCA9IG5ldyBTdHJpbmdbdGVtcFZlY3Rvci5zaXplKCldOworICAgICAgICAgICAgICAgICAgICB0ZW1wVmVjdG9yLmNvcHlJbnRvKG9yZGVyX3N0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGUucHV0KCJzb3J0X29yZGVyIiwgb3JkZXJfc3RhcnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZGF0YUVxdWFscygib3JkZXJfZW5kIikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9idWlsZCBhIGxpc3Qgb2Ygb3JkZXJlZCBjb2xsYXRpb24gZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0KEVPTF9UT0tFTik7CisgICAgICAgICAgICAgICAgICAgIFNvcnRlZFZlY3RvciBvcmRlciA9IGJ1aWxkZXIuZ2V0U29ydE9yZGVyKCk7CisgICAgICAgICAgICAgICAgICAgIFBvc2l4Q29sbGF0aW9uQnVpbGRlci5Db2xsYXRpb25SdWxlW10gcnVsZVNvdXJjZSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBvc2l4Q29sbGF0aW9uQnVpbGRlci5Db2xsYXRpb25SdWxlW29yZGVyLnNpemUoKV07CisgICAgICAgICAgICAgICAgICAgIG9yZGVyLmNvcHlJbnRvKHJ1bGVTb3VyY2UpOyAvL2NvcHkgaW50byBhbiBhcnJheSBzbyB3ZSBjYW4gYWRkIGl0IHRvIHRoZSBvdXRwdXQgdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBpcyBvbmx5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBzbyB3ZSBjYW4gcmV0cmlldmUgdGhlIHNvdXJjZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vY29sbGF0aW9uSXRlbXMgd2l0aCB0aGUgd2VpZ2h0cyBpZiB3ZSB3YW50IHRoZW0gbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgdGFibGUucHV0KCJwb3NpeF9zb3J0X3J1bGVzIiwgcnVsZVNvdXJjZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9hZGQgYSBjb2xsYXRpb24gaXRlbSB0byB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFJ1bGUoaW5wdXQuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcyA9IGlucHV0Lm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA9PSBUQUdfVE9LRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vd2UncmUgZXhwZWN0aW5nIHdlaWdodHMgaGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRXZWlnaHQoaW5wdXQuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBpbnB1dC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09IFNFUEFSQVRPUl9UT0tFTikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBpbnB1dC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzID0gaW5wdXQubmV4dFRva2VuKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnB1dC5hY2NlcHQoVEFHX1RPS0VOLCAiTENfQ09MTEFURSIpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgU3ltYm9sVHJhbnNpdGlvbi5zZXRDaGFyTWFwKG1hcC5nZXRQYXJlbnQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy97e0RFQ0xBUkVfQ09OVFJPTFMKKwkvL319Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1Bvc2l4Q2hhck1hcC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Qb3NpeENoYXJNYXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjk0NWU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Qb3NpeENoYXJNYXAuamF2YQpAQCAtMCwwICsxLDQ2OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Qb3NpeENoYXJNYXAuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wNi8yMCAwMToxNzoxMiAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisgCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworCitwdWJsaWMgY2xhc3MgUG9zaXhDaGFyTWFwIHsKKyAgICBwcml2YXRlIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBwcml2YXRlIEhhc2h0YWJsZSBiYWNrVGFibGUgPSBudWxsOworICAgIHByaXZhdGUgUG9zaXhDaGFyTWFwIHBhcmVudE1hcDsKKyAgICBwcml2YXRlIFN0cmluZyBlbmNvZGluZzsKKyAgICAKKyAgICBwdWJsaWMgUG9zaXhDaGFyTWFwKCkgeworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgUG9zaXhDaGFyTWFwKFBvc2l4Q2hhck1hcCBwYXJlbnQpIHsKKyAgICAgICAgcGFyZW50TWFwID0gcGFyZW50OworICAgIH0KKworICAgIHB1YmxpYyBQb3NpeENoYXJNYXAoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB0aGlzKG5ldyBGaWxlUmVhZGVyKGZpbGVOYW1lKSk7CisgICAgfQorCisgICAgcHVibGljIFBvc2l4Q2hhck1hcChTdHJpbmcgcGF0aE5hbWUsIFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdGhpcyhuZXcgRmlsZVJlYWRlcihuZXcgRmlsZShwYXRoTmFtZSwgZmlsZU5hbWUpKSk7CisgICAgfQorCisgICAgcHVibGljIFBvc2l4Q2hhck1hcChSZWFkZXIgaW5wdXRSZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGxvYWQobmV3IEJ1ZmZlcmVkUmVhZGVyKGlucHV0UmVhZGVyKSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBQb3NpeENoYXJNYXAgZ2V0UGFyZW50KCkgeworICAgICAgICByZXR1cm4gcGFyZW50TWFwOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXJlbnQoUG9zaXhDaGFyTWFwIHBhcmVudCkgeworICAgICAgICBwYXJlbnRNYXAgPSBwYXJlbnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbG9hZChTdHJpbmcgcGF0aE5hbWUsIFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgbG9hZChuZXcgRmlsZShwYXRoTmFtZSwgZmlsZU5hbWUpLCIiKTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgbG9hZChTdHJpbmcgcGF0aE5hbWUsIFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIGVuYyl0aHJvd3MgSU9FeGNlcHRpb257CisgICAgICAgIGxvYWQobmV3IEZpbGUocGF0aE5hbWUsIGZpbGVOYW1lKSxlbmMpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBsb2FkKEZpbGUgZmlsZSwgU3RyaW5nIGVuYykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZW5jb2RpbmcgPWVuYzsKKyAgICAgICAgbG9hZChuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZSkpKTsKKyAgICB9CisgICAgLyogVGhpcyBtYXAgbXVzdCBiZSBpbiBBU0NFTkRJTkcgT1JERVIgT0YgVEhFIEVTQ0FQRSBDT0RFICovCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgY2hhcltdIFVORVNDQVBFX01BUCA9IHsKKyAgICAgICAgLyoiICAgMHgyMiwgMHgyMiAqLworICAgICAgICAvKicgICAweDI3LCAweDI3ICovCisgICAgICAgIC8qPyAgIDB4M0YsIDB4M0YgKi8KKyAgICAgICAgLypcICAgMHg1QywgMHg1QyAqLworICAgICAgICAvKmEqLyAweDYxLCAweDA3LAorICAgICAgICAvKmIqLyAweDYyLCAweDA4LAorICAgICAgICAvKmYqLyAweDY2LCAweDBjLAorICAgICAgICAvKm4qLyAweDZFLCAweDBhLAorICAgICAgICAvKnIqLyAweDcyLCAweDBkLAorICAgICAgICAvKnQqLyAweDc0LCAweDA5LAorICAgICAgICAvKnYqLyAweDc2LCAweDBiCisgICAgfTsKKyAgICAgICAgLyoqCisgICAgICogQ29udmVydCBhbiBlc2NhcGUgdG8gYSAzMi1iaXQgY29kZSBwb2ludCB2YWx1ZS4gIFdlIGF0dGVtcHQKKyAgICAgKiB0byBwYXJhbGxlbCB0aGUgaWN1NGMgdW5lc2FjcGVBdCgpIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBvZmZzZXQxNiBhbiBhcnJheSBjb250YWluaW5nIG9mZnNldCB0byB0aGUgY2hhcmFjdGVyCisgICAgICogPGVtPmFmdGVyPC9lbT4gdGhlIGJhY2tzbGFzaC4gIFVwb24gcmV0dXJuIG9mZnNldDE2WzBdIHdpbGwKKyAgICAgKiBiZSB1cGRhdGVkIHRvIHBvaW50IGFmdGVyIHRoZSBlc2NhcGUgc2VxdWVuY2UuCisgICAgICogQHJldHVybiBjaGFyYWN0ZXIgdmFsdWUgZnJvbSAwIHRvIDEwRkZGRiwgb3IgLTEgb24gZXJyb3IuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgdW5lc2NhcGVBdChTdHJpbmcgcywgaW50W10gb2Zmc2V0MTYpIHsKKyAgICAgICAgaW50IGM7CisgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICBpbnQgbiA9IDA7CisgICAgICAgIGludCBtaW5EaWcgPSAwOworICAgICAgICBpbnQgbWF4RGlnID0gMDsKKyAgICAgICAgaW50IGJpdHNQZXJEaWdpdCA9IDQ7CisgICAgICAgIGludCBkaWc7CisgICAgICAgIGludCBpOworCisgICAgICAgIC8qIENoZWNrIHRoYXQgb2Zmc2V0IGlzIGluIHJhbmdlICovCisgICAgICAgIGludCBvZmZzZXQgPSBvZmZzZXQxNlswXTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHMubGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZldGNoIGZpcnN0IFVDaGFyIGFmdGVyICdcXCcgKi8KKyAgICAgICAgYyA9IFVURjE2LmNoYXJBdChzLCBvZmZzZXQpOworICAgICAgICBvZmZzZXQgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworCisgICAgICAgIC8qIENvbnZlcnQgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIGVzY2FwZXMgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgbWluRGlnID0gbWF4RGlnID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdVJzoKKyAgICAgICAgICAgIG1pbkRpZyA9IG1heERpZyA9IDg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICBtaW5EaWcgPSAxOworICAgICAgICAgICAgbWF4RGlnID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZGlnID0gVUNoYXJhY3Rlci5kaWdpdChjLCA4KTsKKyAgICAgICAgICAgIGlmIChkaWcgPj0gMCkgeworICAgICAgICAgICAgICAgIG1pbkRpZyA9IDE7CisgICAgICAgICAgICAgICAgbWF4RGlnID0gMzsKKyAgICAgICAgICAgICAgICBuID0gMTsgLyogQWxyZWFkeSBoYXZlIGZpcnN0IG9jdGFsIGRpZ2l0ICovCisgICAgICAgICAgICAgICAgYml0c1BlckRpZ2l0ID0gMzsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkaWc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobWluRGlnICE9IDApIHsKKyAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBsZW5ndGggJiYgbiA8IG1heERpZykgeworICAgICAgICAgICAgICAgIC8vIFRFTVBPUkFSWQorICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlc3RvcmUgdGhlIGNoYXIzMi1iYXNlZCBjb2RlIHdoZW4gVUNoYXJhY3Rlci5kaWdpdAorICAgICAgICAgICAgICAgIC8vIGlzIHdvcmtpbmcgKEJ1ZyA2NikuCisKKyAgICAgICAgICAgICAgICAvL2MgPSBVVEYxNi5jaGFyQXQocywgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAvL2RpZyA9IFVDaGFyYWN0ZXIuZGlnaXQoYywgKGJpdHNQZXJEaWdpdCA9PSAzKSA/IDggOiAxNik7CisgICAgICAgICAgICAgICAgYyA9IHMuY2hhckF0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgZGlnID0gQ2hhcmFjdGVyLmRpZ2l0KChjaGFyKWMsIChiaXRzUGVyRGlnaXQgPT0gMykgPyA4IDogMTYpOworICAgICAgICAgICAgICAgIGlmIChkaWcgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IDw8IGJpdHNQZXJEaWdpdCkgfCBkaWc7CisgICAgICAgICAgICAgICAgLy9vZmZzZXQgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgICAgICsrb2Zmc2V0OworICAgICAgICAgICAgICAgICsrbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuIDwgbWluRGlnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0MTZbMF0gPSBvZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLyogQ29udmVydCBDLXN0eWxlIGVzY2FwZXMgaW4gdGFibGUgKi8KKyAgICAgICAgZm9yIChpPTA7IGk8VU5FU0NBUEVfTUFQLmxlbmd0aDsgaSs9MikgeworICAgICAgICAgICAgaWYgKGMgPT0gVU5FU0NBUEVfTUFQW2ldKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0MTZbMF0gPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFVORVNDQVBFX01BUFtpKzFdOworICAgICAgICAgICAgfSBlbHNlIGlmIChjIDwgVU5FU0NBUEVfTUFQW2ldKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiBubyBzcGVjaWFsIGZvcm1zIGFyZSByZWNvZ25pemVkLCB0aGVuIGNvbnNpZGVyCisgICAgICAgICAqIHRoZSBiYWNrc2xhc2ggdG8gZ2VuZXJpY2FsbHkgZXNjYXBlIHRoZSBuZXh0IGNoYXJhY3Rlci4gKi8KKyAgICAgICAgb2Zmc2V0MTZbMF0gPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiBjOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYWxsIGVzY2FwZXMgaW4gYSBnaXZlbiBzdHJpbmcgdXNpbmcgdW5lc2NhcGVBdCgpLgorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGFuIGludmFsaWQgZXNjYXBlIGlzCisgICAgICogc2Vlbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB1bmVzY2FwZShTdHJpbmcgcykgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpbnRbXSBwb3MgPSBuZXcgaW50WzFdOworICAgICAgICBmb3IgKGludCBpPTA7IGk8cy5sZW5ndGgoKTsgKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBzLmNoYXJBdChpKyspOworICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIHBvc1swXSA9IGk7CisgICAgICAgICAgICAgICAgaW50IGUgPSB1bmVzY2FwZUF0KHMsIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKGUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZXNjYXBlIHNlcXVlbmNlICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3Vic3RyaW5nKGktMSwgTWF0aC5taW4oaSs4LCBzLmxlbmd0aCgpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBVVEYxNi5hcHBlbmQoYnVmLCBlKTsKKyAgICAgICAgICAgICAgICBpID0gcG9zWzBdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBsb2FkKFJlYWRlciBpbnB1dFJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgUG9zaXhDaGFyTWFwIG9sZE1hcCA9IFN5bWJvbFRyYW5zaXRpb24uZ2V0Q2hhck1hcCgpOworICAgICAgICBTeW1ib2xUcmFuc2l0aW9uLnNldENoYXJNYXAobnVsbCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgVE9LRU4gPSAxOworICAgICAgICAgICAgZmluYWwgaW50IEVPRiA9IDI7CisgICAgICAgICAgICBmaW5hbCBpbnQgRU9MID0gMzsKKyAgICAgICAgICAgIGZpbmFsIGludCBSQU5HRSA9IDQ7CisgICAgICAgICAgICBmaW5hbCBMZXguVHJhbnNpdGlvbltdW10gc3RhdGVzMSA9IHsKKyAgICAgICAgICAgICAgICB7IC8vc3RhdGUgMDogc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgbmV3IFNwYWNlVHJhbnNpdGlvbigwKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IEVPTFRyYW5zaXRpb24oRU9MKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKEVPRiksCisgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguRGVmYXVsdFRyYW5zaXRpb24oTGV4LkFDQ1VNVUxBVEVfQ09OU1VNRSwgLTEpCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7ICAgLy9ncmFiIGZpcnN0IHdvcmQKKyAgICAgICAgICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKFNwYWNlVHJhbnNpdGlvbi5TUEFDRV9DSEFSUywgTGV4LklHTk9SRV9DT05TVU1FLCBUT0tFTiksCisgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguU3RyaW5nVHJhbnNpdGlvbihFT0xUcmFuc2l0aW9uLkVPTF9DSEFSUywgTGV4LklHTk9SRV9DT05TVU1FLCBUT0tFTiksCisgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguRU9GVHJhbnNpdGlvbihUT0tFTiksCisgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguRGVmYXVsdFRyYW5zaXRpb24oTGV4LkFDQ1VNVUxBVEVfQ09OU1VNRSwgLTEpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgZmluYWwgTGV4LlRyYW5zaXRpb25bXVtdIHN0YXRlczIgPSB7CisgICAgICAgICAgICAgICAgeyAgIC8vVGhlc2Ugc3RhdGVzIG9ubHkgcmV0dXJuIDxzeW1ib2xzPi4gIEFsbAorICAgICAgICAgICAgICAgICAgICAvL290aGVyIHRleHQgaXMgaWdub3JlZC4KKyAgICAgICAgICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKEVPRiksCisgICAgICAgICAgICAgICAgICAgIG5ldyBFT0xUcmFuc2l0aW9uKEVPTCksCisgICAgICAgICAgICAgICAgICAgIG5ldyBTeW1ib2xUcmFuc2l0aW9uKFRPS0VOKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFNwYWNlVHJhbnNpdGlvbigwKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlVHJhbnNpdGlvbihSQU5HRSksCisgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguRGVmYXVsdFRyYW5zaXRpb24oTGV4LkFDQ1VNVUxBVEVfQ09OU1VNRSwgMCkKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgICAgICBQdXNoYmFja1JlYWRlciBpbnB1dCA9IG5ldyBQdXNoYmFja1JlYWRlcihpbnB1dFJlYWRlcik7CisgICAgICAgICAgICBMZXggcCA9IG5ldyBMZXgoc3RhdGVzMSwgaW5wdXQpOworICAgICAgICAgICAgaW50IHN0YXRlOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHN0YXRlID0gcC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKChzdGF0ZSAhPSBFT0YpICYmICFwLmRhdGFFcXVhbHMoIkNIQVJNQVAiKSk7CisgICAgICAgICAgICBwLmFjY2VwdChFT0wpOworICAgICAgICAgICAgaWYgKHN0YXRlICE9IEVPRiApIHsKKyAgICAgICAgICAgICAgICBwID0gbmV3IExleChzdGF0ZXMyLCBpbnB1dCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBwLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0ZSAhPSBFT0YgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IHAuZ2V0RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZihwLmRhdGFFcXVhbHMoIkVORENIQVJNQVAiKSl7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHAubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0ZSA9PSBFT0wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHAuZGF0YUVxdWFscygiRU5EQ0hBUk1BUCIpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhID0gdW5lc2NhcGUocC5nZXREYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50cmltKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGFydHNXaXRoKCI8VSIpIHx8IGRhdGEuc3RhcnRzV2l0aCgiI1UiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBudW1EYXRhID0gZGF0YS5zdWJzdHJpbmcoMixkYXRhLmxlbmd0aCgpLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IEludGVnZXIucGFyc2VJbnQobnVtRGF0YSwgMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZU1hcHBpbmcoa2V5LCAiIisoY2hhcilkaWdpdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihkYXRhLnN0YXJ0c1dpdGgoIlxceCIpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gZW5jRGF0YSA9IG5ldyBieXRlWzZdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0gPSBoZXhUb0J5dGUoZGF0YSxlbmNEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdERhdGEgPSBuZXcgU3RyaW5nKGVuY0RhdGEsMCxudW0sZW5jb2RpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZU1hcHBpbmcoa2V5LHREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleT1wLmdldERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNvbWUgaGVyZSBvbmx5IGlmIHRoZXJlIGlzIGEgcmFuZ2UgdHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICAgaWYoIHN0YXRlID09UkFOR0UpeworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYmVnaW4gPSBrZXk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcC5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBlbmQgPSBwLmdldERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGEgPSBwLmdldERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudHJpbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGVuY0RhdGEgPSBuZXcgYnl0ZVs2XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0gPSBoZXhUb0J5dGUoZGF0YSxlbmNEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0RGF0YSA9IG5ldyBTdHJpbmcoZW5jRGF0YSwwLG51bSxlbmNvZGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nVmFsOworICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gdmFsID0gZ2V0SW50KGJlZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBiZWdpblJhbmdlID0gdmFsWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsID1nZXRJbnQoZW5kKTsgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmRSYW5nZSA9IHZhbFsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1ZhbCA9IGtleS5zdWJzdHJpbmcoMCx2YWxbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0ID0gKGludCkoY2hhcil0RGF0YS5jaGFyQXQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShiZWdpblJhbmdlIDw9IGVuZFJhbmdlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVNYXBwaW5nKChzdHJpbmdWYWwrYmVnaW5SYW5nZSsiPiIpLCIiKyhjaGFyKWRpZ2l0KyspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luUmFuZ2UrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAga2V5PXAuZ2V0RGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy9zdGF0ZSA9IHAubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFT0ZFeGNlcHRpb24gZSkgeworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgU3ltYm9sVHJhbnNpdGlvbi5zZXRDaGFyTWFwKG9sZE1hcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIGludFtdIGdldEludChTdHJpbmcgZGF0YSl7CisgICAgICAgIGludCBpPTA7CisgICAgICAgIGludFtdIHJldFZhbCA9IG5ldyBpbnRbMl07CisgICAgICAgIGludCBsZW4gPWRhdGEubGVuZ3RoKCk7CisgICAgICAgIHdoaWxlKGk8IGxlbil7CisgICAgICAgICAgICBpZigoZGF0YS5jaGFyQXQoaSkpLTB4MzAgPCAoMHgzOS0weDMwKSl7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHN1YiA9ZGF0YS5zdWJzdHJpbmcoaSxsZW4tMSk7CisgICAgICAgIHJldFZhbFswXSA9aTsKKyAgICAgICAgcmV0VmFsWzFdPUludGVnZXIucGFyc2VJbnQoc3ViLDEwKTsKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgcHVibGljIGludCBoZXhUb0J5dGUoU3RyaW5nIGRhdGEsIGJ5dGVbXSByZXR2YWwpeworICAgICAgICBTdHJpbmcgdERhdGEgPSBkYXRhOworICAgICAgICBpbnQgaT0wOworICAgICAgICBmb3IoaT0wO2kgPCBkYXRhLmxlbmd0aCgpLzQ7IGkrKyl7CisgICAgICAgICAgICBpZih0RGF0YS5jaGFyQXQoMCk9PSdcXCcgJiYgdERhdGEuY2hhckF0KDEpPT0neCcpeworICAgICAgICAgICAgICAgIFN0cmluZyBudW1EYXRhID0gdERhdGEuc3Vic3RyaW5nKDIsNCk7CisgICAgICAgICAgICAgICAgcmV0dmFsW2ldID0gKGJ5dGUpIEludGVnZXIucGFyc2VJbnQobnVtRGF0YSwxNik7CisgICAgICAgICAgICAgICAgdERhdGEgPSB0RGF0YS5zdWJzdHJpbmcoNCx0RGF0YS5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gICAgICAgCisgICAgICAgIHJldHVybiBpOworICAgIH0gICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRlZmluZU1hcHBpbmcoU3RyaW5nIGZyb20sIFN0cmluZyB0bykgeworICAgICAgICB0YWJsZS5wdXQoZnJvbSwgdG8pOworICAgICAgICBiYWNrVGFibGUgPSBudWxsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVuZGVmaW5lTWFwcGluZyhTdHJpbmcgZnJvbSkgeworICAgICAgICB0YWJsZS5yZW1vdmUoZnJvbSk7CisgICAgICAgIGJhY2tUYWJsZSA9IG51bGw7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3dhcCgpIHsKKyAgICAgICAgSGFzaHRhYmxlIG5ld1RhYmxlID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICBFbnVtZXJhdGlvbiBlbnVtID0gdGFibGUua2V5cygpOworICAgICAgICB3aGlsZSAoZW51bS5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpZW51bS5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIGNvZGUgPSAoU3RyaW5nKXRhYmxlLmdldChrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgbmV3S2V5ID0gdG9TeW1ib2woY29kZSk7CisgICAgICAgICAgICBTdHJpbmcgbmV3Q29kZSA9IHRvTGl0ZXJhbChrZXkpOworICAgICAgICAgICAgU3RyaW5nIHByZXZDb2RlID0gKFN0cmluZyluZXdUYWJsZS5nZXQobmV3S2V5KTsKKyAgICAgICAgICAgIGlmIChwcmV2Q29kZSA9PSBudWxsIHx8IHByZXZDb2RlLmNvbXBhcmVUbyhuZXdDb2RlKSA+IDApIHsKKyAgICAgICAgICAgICAgICBuZXdUYWJsZS5wdXQobmV3S2V5LCBuZXdDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0YWJsZSA9IG5ld1RhYmxlOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyB0b0xpdGVyYWwoU3RyaW5nIGNvZGUpIHsKKyAgICAgICAgU3RyaW5nIGRhdGEgPSBjb2RlLnN1YnN0cmluZygyLGNvZGUubGVuZ3RoKCktMSk7CisgICAgICAgIGludCBkaWdpdCA9IEludGVnZXIucGFyc2VJbnQoZGF0YSwgMTYpOworICAgICAgICByZXR1cm4gIiIgKyAoY2hhcilkaWdpdDsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgdG9TeW1ib2woU3RyaW5nIGNvZGUpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGVzY2FwZUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgZXNjYXBlQnVmZmVyLmFwcGVuZCgiPiIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvZGUubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgaW50IHZhbHVlID0gKChpbnQpY29kZS5jaGFyQXQoaSkpICYgMHhGRkZGOworICAgICAgICAgICAgd2hpbGUgKCh2YWx1ZSA+IDApIHx8IChlc2NhcGVCdWZmZXIubGVuZ3RoKCkgPCA1KSkgeworICAgICAgICAgICAgICAgIGNoYXIgZGlnaXQgPSBDaGFyYWN0ZXIuZm9yRGlnaXQodmFsdWUgJSAxNiwgMTYpOworICAgICAgICAgICAgICAgIGVzY2FwZUJ1ZmZlci5hcHBlbmQoZGlnaXQpOworICAgICAgICAgICAgICAgIHZhbHVlID4+PSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVzY2FwZUJ1ZmZlci5hcHBlbmQoIlU8Iik7CisgICAgICAgIGVzY2FwZUJ1ZmZlci5yZXZlcnNlKCk7CisgICAgICAgIHJldHVybiBlc2NhcGVCdWZmZXIudG9TdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgZHVtcChQcmludFN0cmVhbSBvdXQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGVzY2FwZUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgRW51bWVyYXRpb24gZW51bSA9IHRhYmxlLmtleXMoKTsKKyAgICAgICAgd2hpbGUgKGVudW0uaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWVudW0ubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyBjb2RlID0gKFN0cmluZyl0YWJsZS5nZXQoa2V5KTsKKyAgICAgICAgICAgIG91dC5wcmludChrZXkpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgICAgPFUiKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29kZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKChpbnQpY29kZS5jaGFyQXQoaSkpICYgMHhGRkZGOworICAgICAgICAgICAgICAgIGVzY2FwZUJ1ZmZlci5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCh2YWx1ZSA+IDApIHx8IChlc2NhcGVCdWZmZXIubGVuZ3RoKCkgPCA0KSkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIGRpZ2l0ID0gQ2hhcmFjdGVyLmZvckRpZ2l0KHZhbHVlICUgMTYsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlQnVmZmVyLmFwcGVuZChkaWdpdCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID4+PSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlc2NhcGVCdWZmZXIucmV2ZXJzZSgpOworICAgICAgICAgICAgICAgIG91dC5wcmludChlc2NhcGVCdWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBtYXBLZXkoZmluYWwgU3RyaW5nIGtleSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gKFN0cmluZyl0YWJsZS5nZXQoa2V5KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAocGFyZW50TWFwICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJlbnRNYXAubWFwS2V5KGtleSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGtleTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIGJhY2ttYXBWYWx1ZShmaW5hbCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgaWYgKGJhY2tUYWJsZSA9PSBudWxsKSB7CisgICAgICAgICAgICBiYWNrVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICBFbnVtZXJhdGlvbiBlbnVtID0gdGFibGUua2V5cygpOworICAgICAgICAgICAgd2hpbGUgKGVudW0uaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZyllbnVtLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpdGFibGUuZ2V0KGtleSk7CisgICAgICAgICAgICAgICAgYmFja1RhYmxlLnB1dCh2YWwsIGtleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpYmFja1RhYmxlLmdldCh2YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKHBhcmVudE1hcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50TWFwLmJhY2ttYXBWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAgCisgICAgfQorCisgICAgcHVibGljIEVudW1lcmF0aW9uIGtleXMoKSB7CisgICAgICAgIHJldHVybiB0YWJsZS5rZXlzKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBFbnVtZXJhdGlvbiBlbGVtZW50cygpIHsKKyAgICAgICAgcmV0dXJuIHRhYmxlLmVsZW1lbnRzKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFBvc2l4Q2hhck1hcCBtYXAxID0gbmV3IFBvc2l4Q2hhck1hcCgKKyAgICAgICAgICAgICAgICAiQzpcXHByb2plY3RzXFxjb21cXHRhbGlnZW50XFxsb2NhbGVjb252ZXJ0ZXJcXENoYXJNYXBzIiwKKyAgICAgICAgICAgICAgICAiSUJNLTExMjkuVVBNQVAxMDAudHh0Iik7CisgICAgICAgICAgICBtYXAxLnN3YXAoKTsKKyAgICAgICAgICAgIG1hcDEuZHVtcChTeXN0ZW0ub3V0KTsKKyAgICAgICAgCisgICAgICAgICAgICBTeW1ib2xUcmFuc2l0aW9uLnNldENoYXJNYXAobWFwMSk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgIAorICAgICAgICAgICAgLy9Qb3NpeENoYXJNYXAgbWFwID0gbmV3IFBvc2l4Q2hhck1hcCgiQzpcXHByb2plY3RzXFxkYXRhXFxJU08tODg1OS0xLmh0bWwiKTsKKyAgICAgICAgICAgIFBvc2l4Q2hhck1hcCBtYXAgPSBuZXcgUG9zaXhDaGFyTWFwKAorICAgICAgICAgICAgICAgICJDOlxccHJvamVjdHNcXGNvbVxcdGFsaWdlbnRcXGxvY2FsZWNvbnZlcnRlclxcQ2hhck1hcHMiLAorICAgICAgICAgICAgICAgICJpYm0xMTI5LnR4dCIpOworICAgICAgICAgICAgbWFwLmR1bXAoU3lzdGVtLm91dCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUG9zaXhDb2xsYXRpb25CdWlsZGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1Bvc2l4Q29sbGF0aW9uQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxMTJhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1Bvc2l4Q29sbGF0aW9uQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1Bvc2l4Q29sbGF0aW9uQnVpbGRlci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjMwICQgCisgKiAkUmV2aXNpb246IDEuMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wubG9jYWxlY29udmVydGVyOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworCitjbGFzcyBQb3NpeENvbGxhdGlvbkJ1aWxkZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfV0VJR0hUUyA9IDQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9DT01QT1NJVElPTiA9IDQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IG5leHRDaGFyTnVtYmVyID0gMTsKKyAgICBwcml2YXRlIEhhc2h0YWJsZSB3ZWlnaHRTeW1ib2xzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIHByaXZhdGUgSGFzaHRhYmxlIGNvbnRyYWN0aW9ucyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBwcml2YXRlIEhhc2h0YWJsZSBydWxlcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBwcml2YXRlIENvbGxhdGlvblJ1bGUgbGFzdFJ1bGUgPSBudWxsOworICAgIHByaXZhdGUgUG9zaXhDaGFyTWFwIG1hcDsKKyAgICBwcml2YXRlIFNvcnRlZFZlY3RvciBvcmRlcjsKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgRklSU1RfV0VJR0hUX0NIQVIgPSAweDAwMDBGN0ZGOworICAgIHByaXZhdGUgaW50IG5leHRXZWlnaHRDaGFyID0gRklSU1RfV0VJR0hUX0NIQVI7CisgICAgcHJpdmF0ZSBDb2xsYXRpb25SdWxlIGlnbm9yZVJ1bGU7ICAgLy9ydWxlIGZvciB0aGUgY29sbGF0aW5nLXN5bWJvbCBJR05PUkUKKyAgICAKKyAgICBwdWJsaWMgY2xhc3MgQ29sbGF0aW9uUnVsZSB7CisgICAgICAgIGludCBjaGFyTnVtYmVyOworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGludCBuZXh0V2VpZ2h0ID0gMDsKKyAgICAgICAgU3RyaW5nW10gd2VpZ2h0U291cmNlID0gbmV3IFN0cmluZ1tNQVhfV0VJR0hUU107CisgICAgICAgIGludCB3ZWlnaHRbXVtdID0gbnVsbDsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHNvdXJjZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBDb2xsYXRpb25SdWxlKFN0cmluZyBzeW1ib2wpIHsKKyAgICAgICAgICAgIGNoYXJOdW1iZXI9IG5leHRDaGFyTnVtYmVyKys7CisgICAgICAgICAgICB2YWx1ZSA9IHN5bWJvbDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1dFSUdIVFM7IGkrKykgeworICAgICAgICAgICAgICAgIHdlaWdodFNvdXJjZVtpXSA9IHN5bWJvbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZS5hcHBlbmQobWFwLmJhY2ttYXBWYWx1ZShzeW1ib2wpKTsKKyAgICAgICAgICAgIHNvdXJjZS5hcHBlbmQoIlx0XHQiKTsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIENvbGxhdGlvblJ1bGUoQ29sbGF0aW9uUnVsZSBvdGhlciwgaW50IGNvbXBvc2l0aW9uKSB7CisgICAgICAgICAgICBjaGFyTnVtYmVyID0gb3RoZXIuY2hhck51bWJlcjsKKyAgICAgICAgICAgIHZhbHVlID0gb3RoZXIudmFsdWU7CisgICAgICAgICAgICBuZXh0V2VpZ2h0ID0gb3RoZXIubmV4dFdlaWdodDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1dFSUdIVFM7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2UgPSBvdGhlci53ZWlnaHRTb3VyY2VbaV07CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5sZW5ndGgoKSA+IGNvbXBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHdlaWdodFNvdXJjZVtpXSA9ICIiK3NvdXJjZS5jaGFyQXQoY29tcG9zaXRpb24pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHdlaWdodFNvdXJjZVtpXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgIC8vSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IgbXlUcmFuc2xpdCA9IG5ldyBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvcigiPFUjIyMwPiIpOworICAgICAgICBwdWJsaWMgdm9pZCBhZGRXZWlnaHQoU3RyaW5nIHN5bWJvbCkgeworICAgICAgICAgLy8gICBSZXBsYWNlYWJsZVN0cmluZyB0U3ltYm9sID0gbmV3IFJlcGxhY2VhYmxlU3RyaW5nKHN5bWJvbCk7CisgICAgICAgICAgIC8vIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0U3ltYm9sKTsKKyAgICAgICAgICAgICAgICAvL2xpbWl0IHRoZSBzaXplIG9mIGEgc2luZ2xlIHdlaWdodAorICAgICAgICAgICAgaWYgKHN5bWJvbC5sZW5ndGgoKSA+IE1BWF9DT01QT1NJVElPTikgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV0FSTklORzogV2VpZ2h0cyBvZiBjb21wb3NpdGlvbiBncmVhdGVyIHRoYW4gIitNQVhfQ09NUE9TSVRJT04rIiB3ZXJlIHRydW5jYXRlZC4iKTsKKyAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2wuc3Vic3RyaW5nKDAsIE1BWF9DT01QT1NJVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy9saW1pdCB0aGUgbnVtYmVyIG9mIHdlaWdodHMKKyAgICAgICAgICAgIGlmIChuZXh0V2VpZ2h0IDwgTUFYX1dFSUdIVFMpIHsKKyAgICAgICAgICAgICAgICBpZiAobmV4dFdlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLmFwcGVuZCgiOyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5hcHBlbmQobWFwLmJhY2ttYXBWYWx1ZSgiIitzeW1ib2wuY2hhckF0KGkpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdlaWdodFNvdXJjZVtuZXh0V2VpZ2h0KytdID0gc3ltYm9sOworICAgICAgICAgICAgICAgIHdlaWdodCA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKENvbGxhdGlvblJ1bGUgb3RoZXIpIHsKKyAgICAgICAgICAgIGlmIChvdGhlciA9PSBudWxsKSByZXR1cm4gY29tcGFyZShpZ25vcmVSdWxlKTsKKyAgICAgICAgICAgIHJlc29sdmVXZWlnaHRzKCk7CisgICAgICAgICAgICBvdGhlci5yZXNvbHZlV2VpZ2h0cygpOworICAgICAgICAgICAgaW50IGNvbXBhcmVTaXplID0gTWF0aC5taW4oZ2V0U2l6ZSgpLCBvdGhlci5nZXRTaXplKCkpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb21wYXJlU2l6ZTsgaisrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfV0VJR0hUUzsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBkaWZmID0gd2VpZ2h0W2pdW2ldIC0gb3RoZXIud2VpZ2h0W2pdW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoZGlmZiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtKGkrMSk7CisgICAgICAgICAgICAgICAgICAgIH0gaWYgKGRpZmYgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSsxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGdldFNpemUoKSAtIG90aGVyLmdldFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc011bHRpV2VpZ2h0KCkgeworICAgICAgICAgICAgcmV0dXJuIGdldFNpemUoKSA+IDE7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIGludCBnZXRTaXplKCkgeworICAgICAgICAgICAgaW50IHNpemUgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCB3ZWlnaHRTb3VyY2UubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzaXplID0gTWF0aC5tYXgoc2l6ZSwgd2VpZ2h0U291cmNlW2ldLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzaXplOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBDb2xsYXRpb25SdWxlIGdldENvbXBvbmVudChpbnQgbmR4KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENvbGxhdGlvblJ1bGUodGhpcywgbmR4KTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3ltYm9sKCkgeworICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlID0gaXNDb250cmFjdGlvbigpOworICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNXZWlnaHRTeW1ib2woKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2UudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIFN0cmluZyBpc0NvbnRyYWN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpY29udHJhY3Rpb25zLmdldCh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgaXNXZWlnaHRTeW1ib2woKSB7CisgICAgICAgICAgICByZXR1cm4gKFN0cmluZyl3ZWlnaHRTeW1ib2xzLmdldCh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIENvbGxhdGlvblJ1bGUgc2Vla3NUb1J1bGUoKSB7CisgICAgICAgICAgICBDb2xsYXRpb25SdWxlIGNvbXA7CisgICAgICAgICAgICBpZiAoZ2V0U2l6ZSgpIDw9IDEpIHsKKyAgICAgICAgICAgICAgICBjb21wID0gdGhpczsgICAgLy9zYXZlIGFuIG9iamVjdCBjcmVhdGlvbgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wID0gZ2V0Q29tcG9uZW50KDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IG5keCA9IG9yZGVyLmluZGV4T2YoY29tcCk7CisgICAgICAgICAgICBpZiAobmR4ID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ29sbGF0aW9uUnVsZSBleHA7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBleHAgPSAoQ29sbGF0aW9uUnVsZSlvcmRlci5lbGVtZW50QXQobmR4LS0pOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKG5keCA+IDAgJiYgZXhwLmdldFNpemUoKSA+IDEpOworICAgICAgICAgICAgICAgIHJldHVybiBleHA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRFeHBhbnNpb24oKSB7CisgICAgICAgICAgICBpZiAoZ2V0U2l6ZSgpIDw9IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGV4cGFuc2lvbiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdldFNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIENvbGxhdGlvblJ1bGUgY29tcCA9IGdldENvbXBvbmVudChqKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IG5keCA9IG9yZGVyLmluZGV4T2YoY29tcCk7CisgICAgICAgICAgICAgICAgICAgIENvbGxhdGlvblJ1bGUgZXhwOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHAgPSAoQ29sbGF0aW9uUnVsZSlvcmRlci5lbGVtZW50QXQobmR4LS0pOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChuZHggPj0gMCAmJiBleHAuZ2V0U2l6ZSgpID4gMSk7CisgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvbi5hcHBlbmQoZXhwLmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGFuc2lvbi50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gc291cmNlLnRvU3RyaW5nKCk7CisvKiAgICAgICAgICByZXNvbHZlV2VpZ2h0cygpOworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoY2hhck51bWJlcik7CisgICAgICAgICAgICBidWYuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBidWYuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZ2V0U3ltYm9sKCkpOworICAgICAgICAgICAgYnVmLmFwcGVuZCgnICcpOworICAgICAgICAgICAgYnVmLmFwcGVuZCgoaXNXZWlnaHRTeW1ib2woKSAhPSBudWxsKT8iVyI6IiAiKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1dFSUdIVFM7IGkrKykgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQod2VpZ2h0U291cmNlW2ldKTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldFNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiWyAiKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IE1BWF9XRUlHSFRTOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHcgPSB3ZWlnaHRbaV1bal07CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQodyk7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgnXScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworKi8KKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIHZvaWQgcmVzb2x2ZVdlaWdodHMoKSB7CisgICAgICAgICAgICBpZiAod2VpZ2h0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB3ZWlnaHQgPSBuZXcgaW50W01BWF9DT01QT1NJVElPTl1bTUFYX1dFSUdIVFNdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTUFYX1dFSUdIVFM7IGorKykgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3ltYm9sID0gd2VpZ2h0U291cmNlW2pdOworICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLmxlbmd0aCgpIDw9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodFswXVtqXSA9IG9yZGluYWxpdHlPZihzeW1ib2wpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGMgPSBzeW1ib2wuY2hhckF0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodFtpXVtqXSA9IG9yZGluYWxpdHlPZigiIitjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgUG9zaXhDb2xsYXRpb25CdWlsZGVyKFBvc2l4Q2hhck1hcCBtYXApIHsKKyAgICAgICAgdGhpcy5tYXAgPSBtYXA7CisgICAgICAgIFN0cmluZyBpZ25vcmVTeW1ib2wgPSBkZWZpbmVXZWlnaHRTeW1ib2woIklHTk9SRSIpOworICAgICAgICBpZ25vcmVSdWxlID0gbmV3IENvbGxhdGlvblJ1bGUoaWdub3JlU3ltYm9sKTsKKyAgICAgICAgcnVsZXMucHV0KGlnbm9yZVN5bWJvbCwgaWdub3JlUnVsZSk7CisgICAgICAgIGxhc3RSdWxlID0gaWdub3JlUnVsZTsKKyAgICAgICAgICAgIC8ve3tJTklUX0NPTlRST0xTCisJCS8vfX0KK30KKworICAgIHB1YmxpYyBTdHJpbmcgZGVmaW5lV2VpZ2h0U3ltYm9sKFN0cmluZyBzeW1ib2wpIHsKKyAgICAgICAgb3JkZXIgPSBudWxsOworICAgICAgICBTdHJpbmcgYyA9IG5leHRGcmVlV2VpZ2h0Q2hhcigpOworICAgICAgICBtYXAuZGVmaW5lTWFwcGluZyhzeW1ib2wsIGMpOworICAgICAgICB3ZWlnaHRTeW1ib2xzLnB1dChjLCBzeW1ib2wpOworICAgICAgICB3ZWlnaHRTeW1ib2xzLnB1dChzeW1ib2wsIGMpOworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisgICAgCisgICAgcHVibGljIFN0cmluZyBkZWZpbmVDb250cmFjdGlvbihTdHJpbmcgc3ltYm9sLCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgb3JkZXIgPSBudWxsOworICAgICAgICBTdHJpbmcgYyA9IG5leHRGcmVlV2VpZ2h0Q2hhcigpOworICAgICAgICBtYXAuZGVmaW5lTWFwcGluZyhzeW1ib2wsIGMpOworICAgICAgICBjb250cmFjdGlvbnMucHV0KGMsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIG5leHRGcmVlV2VpZ2h0Q2hhcigpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiOworICAgICAgICBTdHJpbmcgbWFwcGVkU291cmNlOworICAgICAgICBkbyB7CisgICAgICAgICAgICByZXN1bHQgPSAiIisoY2hhciluZXh0V2VpZ2h0Q2hhci0tOworICAgICAgICAgICAgbWFwcGVkU291cmNlID0gbWFwLmJhY2ttYXBWYWx1ZShyZXN1bHQpOworICAgICAgICB9IHdoaWxlIChyZXN1bHQgIT0gbWFwcGVkU291cmNlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgcHVibGljIGludCBvcmRpbmFsaXR5T2YoU3RyaW5nIHN5bWJvbCkgeworLy8gICAgICAgIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIG5ld1RyYW5zbGl0ID0gbmV3IEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKCk7CisvLyAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgdFN5bWJvbCA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyhzeW1ib2wpOworLy8gICAgICAgIG5ld1RyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodFN5bWJvbCk7CisgICAgICAgIENvbGxhdGlvblJ1bGUgdyA9IChDb2xsYXRpb25SdWxlKXJ1bGVzLmdldChzeW1ib2wpOworICAgICAgICBpZiAodyAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gdy5jaGFyTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludCgiRVJST1I6IFdlaWdodCBzeW1ib2wgbm90IGZvdW5kOiAiKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHN5bWJvbC5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgY2hhciBjID0gc3ltYm9sLmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50KCJcXHUiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50KEhFWF9ESUdJVFsoYyAmIDB4MEYwMDApID4+IDEyXSk7IC8vIEhFWF9ESUdJVCB3b3JrcyBmb3Igb2N0YWwKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50KEhFWF9ESUdJVFsoYyAmIDB4MEYwMCkgPj4gOF0pOyAvLyBIRVhfRElHSVQgd29ya3MgZm9yIG9jdGFsCisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludChIRVhfRElHSVRbKGMgJiAweDAwRjApID4+IDRdKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oSEVYX0RJR0lUWyhjICYgMHgwMDBGKV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgICAgICAgV2VpZ2h0IGdpdmVuIG1heGltdW0gcG9zc2libGUgdmFsdWUuIik7CisgICAgICAgICAgICByZXR1cm4gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgICAgIH0KKyAgICB9CisvLyAgICBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciBteVRyYW5zbGl0ID0gbmV3IEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKCI8VSMjIzA+Iik7CisgICAgcHVibGljIHZvaWQgYWRkUnVsZShTdHJpbmcgc3ltYm9sKSB7CisgIC8vICAgICAgUmVwbGFjZWFibGVTdHJpbmcgdFN5bWJvbCA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyhzeW1ib2wpOworICAgLy8gICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0U3ltYm9sKTsKKyAgICAgICAgaWYgKHN5bWJvbC5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV0FSTklORzogVW5kZWZpbmVkIGVsZW1lbnQgJyIrc3ltYm9sKyInLiAgY29sbGF0aW5nLXN5bWJvbCBnZW5lcmF0ZWQuIik7CisgICAgICAgICAgICBzeW1ib2wgPSBkZWZpbmVXZWlnaHRTeW1ib2woc3ltYm9sKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBvcmRlciA9IG51bGw7CisgICAgICAgIGxhc3RSdWxlID0gbmV3IENvbGxhdGlvblJ1bGUoc3ltYm9sKTsKKyAgICAgICAgcnVsZXMucHV0KHN5bWJvbCwgbGFzdFJ1bGUpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBhZGRSdWxlKENvbGxhdGlvblJ1bGUgcnVsZSkgeworICAgICAgICBvcmRlciA9IG51bGw7CisgICAgICAgIGxhc3RSdWxlID0gcnVsZTsKKyAgICAgICAgcnVsZXMucHV0KHJ1bGUudmFsdWUsIHJ1bGUpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBhZGRXZWlnaHQoU3RyaW5nIHdlaWdodCkgeworICAgICAgICBpZiAod2VpZ2h0Lmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgLy9jaGVjayB0byBzZWUgaWYgaXQncyBhIGJvZ3VzIHdlaWdodCBzeW1ib2wuCisgICAgICAgICAgICB3ZWlnaHQgPSBtYXAubWFwS2V5KHdlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgb3JkZXIgPSBudWxsOworICAgICAgICBsYXN0UnVsZS5hZGRXZWlnaHQod2VpZ2h0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UnVsZXMoKSB7CisgICAgICAgIHJldHVybiBydWxlcy5lbGVtZW50cygpOworICAgIH0KKworICAgIHB1YmxpYyBTb3J0ZWRWZWN0b3IgZ2V0U29ydE9yZGVyKCkgeworICAgICAgICBpZiAob3JkZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgb3JkZXIgPSBuZXcgU29ydGVkVmVjdG9yKAorICAgICAgICAgICAgICAgIG5ldyBDb21wYXJhdG9yKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoZmluYWwgT2JqZWN0IGksIGZpbmFsIE9iamVjdCBqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDb2xsYXRpb25SdWxlIG8xID0gKENvbGxhdGlvblJ1bGUpaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbGxhdGlvblJ1bGUgbzIgPSAoQ29sbGF0aW9uUnVsZSlqOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB3MSA9IG8xLmlzV2VpZ2h0U3ltYm9sKCkgIT0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdzIgPSBvMi5pc1dlaWdodFN5bWJvbCgpICE9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zb3J0IHdlaWdodHMgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3MSAmJiAhdzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF3MSAmJiB3MikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbzEuY29tcGFyZShvMik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApOworICAgICAgICAgICAgb3JkZXIuYWRkRWxlbWVudHMocnVsZXMuZWxlbWVudHMoKSk7CisgICAgICAgICAgICAgICAgLy9yZW1vdmUgd2VpZ2h0IHN5bWJvbHMgZnJvbSB0aGUgbGlzdAorICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXIuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBDb2xsYXRpb25SdWxlIHIgPSAoQ29sbGF0aW9uUnVsZSlvcmRlci5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHIuaXNXZWlnaHRTeW1ib2woKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9yZGVyLnJlbW92ZUVsZW1lbnRzKDAsIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvcmRlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgY2hhcltdIEhFWF9ESUdJVCA9IHsnMCcsJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLAorICAgICAgICAgICAgICAgICAgICAgJzgnLCc5JywnQScsJ0InLCdDJywnRCcsJ0UnLCdGJ307CisgICAgLy97e0RFQ0xBUkVfQ09OVFJPTFMKKwkvL319Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1Bvc2l4VG9OZXV0cmFsQ29udmVydGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1Bvc2l4VG9OZXV0cmFsQ29udmVydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmJiYjE2OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUG9zaXhUb05ldXRyYWxDb252ZXJ0ZXIuamF2YQpAQCAtMCwwICsxLDEyNDggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUG9zaXhUb05ldXRyYWxDb252ZXJ0ZXIuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozMSAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFBvc2l4VG9OZXV0cmFsQ29udmVydGVyIGV4dGVuZHMgTG9jYWxlQ29udmVydGVyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfQ1RZUEUgICAgICAgICAgID0gMHgwMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfVElNRSAgICAgICAgICAgID0gMHgwMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfTlVNRVJJQyAgICAgICAgID0gMHgwNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfTU9ORVRBUlkgICAgICAgID0gMHgwODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfTUVTU0FHRVMgICAgICAgID0gMHgxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfTUVBU1VSRU1FTlQgICAgID0gMHgxMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfQUREUkVTUyAgICAgICAgID0gMHgxMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfUEFQRVIgICAgICAgICAgID0gMHgxMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfTkFNRSAgICAgICAgICAgID0gMHgxNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfSURFTlRJRklDQVRJT04gID0gMHgxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTENfVEVMRVBIT05FICAgICAgID0gMHgxNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIG15VHJhbnNsaXQgPSBuZXcgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IoKTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gbWFza3MgPSB7IAorICAgICAgICBMQ19DVFlQRSwgTENfVElNRSwgTENfTlVNRVJJQywgTENfTU9ORVRBUlksIExDX01FU1NBR0VTLAorICAgICAgICBMQ19NRUFTVVJFTUVOVCxMQ19BRERSRVNTLExDX1BBUEVSLExDX05BTUUsTENfSURFTlRJRklDQVRJT04sCisgICAgICAgIExDX1RFTEVQSE9ORQorICAgICAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSBwcm9wcyA9IHsKKyAgICAgICAgLy9MQ19DVFlQRQorICAgICAgICB7IAorICAgICAgICAgICAgInVwcGVyIiwgImxvd2VyIiwgImFscGhhIiwgImRpZ2l0IiwgInNwYWNlIiwgImNudHJsIiwgCisgICAgICAgICAgICAicHVuY3QiLCAiZ3JhcGgiLCAicHJpbnQiLCAieGRpZ2l0IiwgImJsYW5rIiwgCisgICAgICAgICAgICAidG91cHBlciIsICJ0b2xvd2VyIiAKKyAgICAgICAgfSwKKyAgICAgICAgLy9MQ19USU1FCisgICAgICAgIHsKKyAgICAgICAgICAgICJhYmRheSIsICJkYXkiLCAiYWJtb24iLCAibW9uIiwgImRfdF9mbXQiLCAiZF9mdG0iLCAidF9mbXQiLCAKKyAgICAgICAgICAgICJhbV9wbSIsICJ0X2ZtdF9hbXBtIiwgImVyYSIsICJlcmFfeWVhciIsICJlcmFfZF9mbXQiLCAiYWx0X2RpZ2l0cyIKKyAgICAgICAgfSwKKyAgICAgICAgLy9MQ19OVU1FUklDCisgICAgICAgIHsKKyAgICAgICAgICAgICJkZWNpbWFsX3BvaW50IiwgInRob3VzYW5kc19zZXAiLCAiZ3JvdXBpbmciCisgICAgICAgIH0sCisgICAgICAgIC8vTENfTU9ORVRBUlkKKyAgICAgICAgeworICAgICAgICAgICAgImludF9jdXJyX3N5bWJvbCIsICJjdXJyZW5jeV9zeW1ib2wiLCAibW9uX2RlY2ltYWxfcG9pbnQiLAorICAgICAgICAgICAgIm1vbl90aG91c2FuZHNfc2VwIiwgIm1vbl9ncm91cGluZyIsICJwb3NpdGl2ZV9zaWduIiwKKyAgICAgICAgICAgICJuZWdhdGl2ZV9zaWduIiwgImludF9mcmFjX2RpZ2l0cyIsICJmcmFjX2RpZ2l0cyIsICJwX2NzX3ByZWNlZGVzIiwKKyAgICAgICAgICAgICJwX3NlcF9ieV9zcGFjZSIsICJuX2NzX3ByZWNlZGVzIiwgIm5fc2VwX2J5X3NwYWNlIiwgInBfc2lnbl9wb3NuIiwKKyAgICAgICAgfSwKKyAgICAgICAgLy9MQ19NRVNTQUdFUworICAgICAgICB7CisgICAgICAgICAgICAieWVzZXhwciIsICJub2V4cHIiCisgICAgICAgIH0sCisgICAgICAgICAgIAorICAgICAgICAvL0xDX01FQVNVUkVNRU5UCisgICAgICAgIHsKKyAgICAgICAgICAgIm1lYXN1cmVtZW50IgorICAgICAgICB9LAorICAgICAgICAvL0xDX0FERFJFU1MKKyAgICAgICAgeworICAgICAgICAgICAiY29weSIsInBvc3RhbF9mbXQiLCJjb3VudHJ5X25hbWUiLCJjb3VudHJ5X3Bvc3QiLAorICAgICAgICAgICAiY291bnRyeV9hYjIiLCJjb3VudHJ5X2FiMyIsImNvdW50cnlfbnVtIiwiY291bnRyeV9jYXIiLAorICAgICAgICAgICAiY291bnRyeV9pc2JuIiwibGFuZ19uYW1lIiwibGFuZ19hYiIsImxhbmdfdGVybSIsImxhbmdfbGliIgorICAgICAgICAgICAgCisgICAgICAgIH0sCisgICAgICAgIC8vTENfUEFQRVIKKyAgICAgICAgeworICAgICAgICAgICAgImhlaWdodCIsIndpZHRoIiwiY29weSIKKyAgICAgICAgfSwKKyAgICAgICAgLy9MQ19OQU1FICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgImNvcHkiLCJuYW1lX2ZtdCIsIm5hbWVfZ2VuIiwibmFtZV9taXNzIiwibmFtZV9tciIsIm5hbWVfbXJzIiwibmFtZV9tcyIgIAorICAgICAgICB9LAorICAgICAgICAvL0xDX0lERU5USUZJQ0FUSU9OCisgICAgICAgIHsKKyAgICAgICAgICAgICJ0aXRsZSIsInNvdXJjZSIsImFkZHJlc3MiLCJjb250YWN0IiwiZW1haWwiLCJ0ZWwiLCJmYXgiLCJsYW5ndWFnZSIsCisgICAgICAgICAgICAidGVycml0b3J5IiwicmV2aXNpb24gIiwiZGF0ZSIgICAgIAorICAgICAgICB9LAorICAgICAgICAvL0xDX1RFTEVQSE9ORQorICAgICAgICB7CisgICAgICAgICAgICAiY29weSIsInRlbF9pbnRfZm10IiwidGVsX2RvbV9mbXQiLCJpbnRfc2VsZWN0IiwiaW50X3ByZWZpeCIgCisgICAgICAgIH0sCisgICAgICAgIAorICAgICAgICAgICAgCisgICAgfTsKKyAgICBwcml2YXRlIGZpbmFsIGJ5dGUgZmxhZ3M7CisgICAgcHJpdmF0ZSBmaW5hbCBMb2NhbGUgbG9jYWxlOworICAgIHByaXZhdGUgZmluYWwgTG9jYWxlIHBhcmVudExvY2FsZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBzZmlsZU5hbWU7CisgICAgcHVibGljIFBvc2l4VG9OZXV0cmFsQ29udmVydGVyKGJ5dGUgZmxhZ3MsIGZpbmFsIExvY2FsZSBsb2NhbGUsZmluYWwgU3RyaW5nIGZpbGVOYW1lKSB7CisgICAgICAgIHRoaXMuZmxhZ3MgPSBmbGFnczsKKyAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7CisgICAgICAgIHRoaXMuc2ZpbGVOYW1lPWZpbGVOYW1lOworICAgICAgICBteVRyYW5zbGl0LmFwcGx5UGF0dGVybigiPFUjIyMwPiIpOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKTsKKyAgICAgICAgU3RyaW5nIGNvdW50cnkgPSBsb2NhbGUuZ2V0Q291bnRyeSgpOworICAgICAgICBTdHJpbmcgdmFyaWFudCA9ICIiOworICAgICAgICAKKyAgICAgICAgaW50IG5keCA9IGxhbmd1YWdlLmluZGV4T2YoJ18nKTsKKyAgICAgICAgaWYgKG5keCA+PSAwKSB7CisgICAgICAgICAgICBjb3VudHJ5ID0gbGFuZ3VhZ2Uuc3Vic3RyaW5nKG5keCsxKTsKKyAgICAgICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyaW5nKDAsIG5keCk7CisgICAgICAgIH0KKyAgICAgICAgbmR4ID0gY291bnRyeS5pbmRleE9mKCdfJyk7CisgICAgICAgIGlmIChuZHggPj0gMCkgeworICAgICAgICAgICAgdmFyaWFudCA9IGNvdW50cnkuc3Vic3RyaW5nKG5keCk7CisgICAgICAgICAgICBjb3VudHJ5ID0gY291bnRyeS5zdWJzdHJpbmcoMCwgbmR4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCIiLmVxdWFscyhjb3VudHJ5KSkgeworICAgICAgICAgICAgbGFuZ3VhZ2UgPSAiIjsKKyAgICAgICAgICAgIHZhcmlhbnQgPSAiIjsKKyAgICAgICAgfSBlbHNlIGlmICgiIi5lcXVhbHModmFyaWFudCkpIHsKKyAgICAgICAgICAgIGNvdW50cnkgPSAiIjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcGFyZW50TG9jYWxlID0gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudCk7CisgICAgICAgICAgICAvL3t7SU5JVF9DT05UUk9MUworCQkvL319CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgY29udmVydChmaW5hbCBIYXNodGFibGUgcmVzdWx0LCBmaW5hbCBIYXNodGFibGUgc291cmNlKSAKKyAgICAgICAgICAgIHRocm93cyBDb252ZXJzaW9uRXJyb3IgeworLy8gICAgICAgIGNvbnZlcnRNRVNTQUdFUyhyZXN1bHQsc291cmNlKTsKKyAgICAgICAgd3JpdGVQb3NpeENvbXBEYXRhKHJlc3VsdCxzb3VyY2UpOworICAgICAgICBjb252ZXJ0TUVBU1VSRU1FTlQocmVzdWx0LCBzb3VyY2UpOworICAgICAgICBjb252ZXJ0Q09VTlRSWU5VTUJFUihyZXN1bHQsIHNvdXJjZSk7CisgICAgICAgIGNvbnZlcnRDT1VOVFJZSVNCTk5VTUJFUihyZXN1bHQsIHNvdXJjZSk7CisgICAgICAgIGNvbnZlcnRMQU5HVUFHRUxJQihyZXN1bHQsIHNvdXJjZSk7CisgICAgICAgIGNvbnZlcnRQQVBFUlNJWkUocmVzdWx0LCBzb3VyY2UpOworICAgICAgICBjb252ZXJ0TU9ORVRBUlkocmVzdWx0LCBzb3VyY2UpOworICAgICAgICBjb252ZXJ0TlVNRVJJQyhyZXN1bHQsIHNvdXJjZSk7CisgICAgICAgIGNvbnZlcnRUSU1FKHJlc3VsdCwgc291cmNlKTsKKyAgICAgICAgY29udmVydENPTExBVEUocmVzdWx0LCBzb3VyY2UpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hc2tzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzICYgbWFza3NbaV0pICE9IDApIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHByb3BzW2ldLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm9wID0gcHJvcHNbaV1bal07CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCB2YWwgPSBzb3VyY2UuZ2V0KHByb3ApOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsIHByb3AsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIFN0cmluZ1tdW10gY2xvbmUyREFycihTdHJpbmdbXVtdc3RyMkRhcnJheSl7CisgICAgICAgIFN0cmluZ1tdW10gbmV3U3RyMkRBcnIgPSBuZXcgU3RyaW5nW3N0cjJEYXJyYXkubGVuZ3RoXVtzdHIyRGFycmF5WzBdLmxlbmd0aF07IAorICAgICAgICBmb3IoaW50IGk9MDsgaTxzdHIyRGFycmF5Lmxlbmd0aDtpKyspeworICAgICAgICAgICAgZm9yKGludCBqPTA7IGo8c3RyMkRhcnJheVtpXS5sZW5ndGg7aisrKXsKKyAgICAgICAgICAgICAgICBuZXdTdHIyREFycltpXVtqXSA9IG5ldyBTdHJpbmcoc3RyMkRhcnJheVtpXVtqXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld1N0cjJEQXJyOyAgICAgICAgICAgCisgICAgfQorICAgIHB1YmxpYyBPYmplY3RbXVtdIGNsb25lMkRBcnIoT2JqZWN0W11bXXN0cjJEYXJyYXkpeworICAgICAgICBPYmplY3RbXVtdIG5ld1N0cjJEQXJyID0gbmV3IE9iamVjdFtzdHIyRGFycmF5Lmxlbmd0aF1bc3RyMkRhcnJheVswXS5sZW5ndGhdOyAKKyAgICAgICAgZm9yKGludCBpPTA7IGk8c3RyMkRhcnJheS5sZW5ndGg7aSsrKXsKKyAgICAgICAgICAgIGZvcihpbnQgaj0wOyBqPHN0cjJEYXJyYXlbaV0ubGVuZ3RoO2orKyl7CisgICAgICAgICAgICAgICAgbmV3U3RyMkRBcnJbaV1bal0gPSAoT2JqZWN0KShuZXcgU3RyaW5nKChTdHJpbmcpc3RyMkRhcnJheVtpXVtqXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXdTdHIyREFycjsgICAgICAgICAgIAorICAgIH0KKyAgICBwdWJsaWMgdm9pZCB3cml0ZVBvc2l4Q29tcERhdGEoZmluYWwgSGFzaHRhYmxlIHJlc3VsdCwgZmluYWwgSGFzaHRhYmxlIHNvdXJjZSl7ICAgICAgICAKKyAgICAgICAgICAgCisKKyAgICAgICAgICAgIGNsYXNzIER1bXBQb3NpeERhdGF7CisgICAgICAgICAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gb3V0RmlsZTsKKyAgICAgICAgICAgICAgICAgICAgSUNVTG9jYWxlV3JpdGVyIG15TG9jYWxlV3JpdGVyOworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgRHVtcFBvc2l4RGF0YShTdHJpbmcgZmlsZU5hbWUpeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dEZpbGUgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlTmFtZS5jb25jYXQoIl9QQ0QudHh0IikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15TG9jYWxlV3JpdGVyPW5ldyBJQ1VMb2NhbGVXcml0ZXIobmV3IFByaW50U3RyZWFtKChPdXRwdXRTdHJlYW0pb3V0RmlsZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goamF2YS5pby5JT0V4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpbGUgbm90IGZvdW5kXG5cblxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIHdyaXRlUG9zaXhDb21wRGF0YShmaW5hbCBIYXNodGFibGUgcmVzdWx0SGFzaCwgZmluYWwgSGFzaHRhYmxlIHNvdXJjZSwgU3RyaW5nIGZpbGVOYW1lKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRNRVNTQUdFUyhyZXN1bHRIYXNoLHNvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0SURFTlRJRklDQVRJT04ocmVzdWx0SGFzaCxzb3VyY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydE5BTUVGT1JNQVQocmVzdWx0SGFzaCxzb3VyY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEFERFJFU1NGT1JNQVQocmVzdWx0SGFzaCxzb3VyY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRFTEVQSE9ORUZPUk1BVChyZXN1bHRIYXNoLHNvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXVyb1ZhciA9IGxvY2FsZS5nZXRWYXJpYW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihldXJvVmFyLmVxdWFscygiIikpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cm9WYXIgPSAiUENEIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cm9WYXI9ZXVyb1Zhci5jb25jYXQoIl9QQ0QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlIG15TG9jYWxlID0gbmV3IExvY2FsZShsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSxsb2NhbGUuZ2V0Q291bnRyeSgpLGV1cm9WYXIpOworICAgICAgICAgICAgICAgICAgICAgICAgbXlMb2NhbGVXcml0ZXIud3JpdGUobXlMb2NhbGUsIHJlc3VsdEhhc2gpOyAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHByaXZhdGUgdm9pZCBjb252ZXJ0TUVTU0FHRVMoZmluYWwgSGFzaHRhYmxlIHJlc3VsdCwgZmluYWwgSGFzaHRhYmxlIHNvdXJjZSl7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXVtdREVGQVVMVF9NRVNTQUdFUyA9IChTdHJpbmdbXVtdKSBnZXREZWZhdWx0KCJNZXNzYWdlcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW11bXSBteU1lc3NhZ2VzID0gY2xvbmUyREFycihERUZBVUxUX01FU1NBR0VTKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0oU3RyaW5nKSBzb3VyY2UuZ2V0KCJ5ZXNleHByIik7CisgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlYWJsZVN0cmluZyB0ZW1wID1uZXcgUmVwbGFjZWFibGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlIT1udWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlNZXNzYWdlc1swXVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgibm9leHByIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15TWVzc2FnZXNbMV1bMV0gPSB0ZW1wLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsIk1lc3NhZ2VzIixteU1lc3NhZ2VzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwcml2YXRlIHZvaWQgY29udmVydElERU5USUZJQ0FUSU9OKGZpbmFsIEhhc2h0YWJsZSByZXN1bHQsIGZpbmFsIEhhc2h0YWJsZSBzb3VyY2UpeworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW11bXURFRkFVTFRfTUVTU0FHRVMgPSAoU3RyaW5nW11bXSkgZ2V0RGVmYXVsdCgiSWRlbnRpZmljYXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdW10gbXlJZGVudGlmaWNhdGlvbiA9IGNsb25lMkRBcnIoREVGQVVMVF9NRVNTQUdFUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPShTdHJpbmcpIHNvdXJjZS5nZXQoInRpdGxlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlYWJsZVN0cmluZyB0ZW1wID1uZXcgUmVwbGFjZWFibGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlIT1udWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlJZGVudGlmaWNhdGlvblswXVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgic291cmNlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlJZGVudGlmaWNhdGlvblsxXVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgiYWRkcmVzcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5yZXBsYWNlKDAsdGVtcC5sZW5ndGgoKSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15SWRlbnRpZmljYXRpb25bMl1bMV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgiY29udGFjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5yZXBsYWNlKDAsdGVtcC5sZW5ndGgoKSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15SWRlbnRpZmljYXRpb25bM11bMV0gPSB0ZW1wLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChTdHJpbmcpIHNvdXJjZS5nZXQoImVtYWlsIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlJZGVudGlmaWNhdGlvbls0XVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgidGVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlJZGVudGlmaWNhdGlvbls1XVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoU3RyaW5nKSBzb3VyY2UuZ2V0KCJmYXgiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteUlkZW50aWZpY2F0aW9uWzZdWzFdID0gdGVtcC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoU3RyaW5nKSBzb3VyY2UuZ2V0KCJsYW5ndWFnZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5yZXBsYWNlKDAsdGVtcC5sZW5ndGgoKSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15SWRlbnRpZmljYXRpb25bN11bMV0gPSB0ZW1wLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChTdHJpbmcpIHNvdXJjZS5nZXQoInRlcnJpdG9yeSIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5yZXBsYWNlKDAsdGVtcC5sZW5ndGgoKSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15SWRlbnRpZmljYXRpb25bOF1bMV0gPSB0ZW1wLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChTdHJpbmcpIHNvdXJjZS5nZXQoImF1ZGllbmNlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlJZGVudGlmaWNhdGlvbls5XVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoU3RyaW5nKSBzb3VyY2UuZ2V0KCJhcHBsaWNhdGlvbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5yZXBsYWNlKDAsdGVtcC5sZW5ndGgoKSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15SWRlbnRpZmljYXRpb25bMTBdWzFdID0gdGVtcC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoU3RyaW5nKSBzb3VyY2UuZ2V0KCJhYmJyZXZpYXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteUlkZW50aWZpY2F0aW9uWzExXVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgicmV2aXNpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteUlkZW50aWZpY2F0aW9uWzEyXVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgiZGF0ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5yZXBsYWNlKDAsdGVtcC5sZW5ndGgoKSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15SWRlbnRpZmljYXRpb25bMTNdWzFdID0gdGVtcC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UHV0KHJlc3VsdCwiSWRlbnRpZmljYXRpb24iLG15SWRlbnRpZmljYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaXZhdGUgdm9pZCBjb252ZXJ0TkFNRUZPUk1BVChmaW5hbCBIYXNodGFibGUgcmVzdWx0LCBmaW5hbCBIYXNodGFibGUgc291cmNlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdW11ERUZBVUxUX01FU1NBR0VTID0gKFN0cmluZ1tdW10pIGdldERlZmF1bHQoIk5hbWVGb3JtYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdW10gbXlOYW1lRm9ybWF0ID0gY2xvbmUyREFycihERUZBVUxUX01FU1NBR0VTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9KFN0cmluZykgc291cmNlLmdldCgibmFtZV9tciIpOworICAgICAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgdGVtcCA9bmV3IFJlcGxhY2VhYmxlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlOYW1lRm9ybWF0WzJdWzFdID0gdGVtcC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoU3RyaW5nKSBzb3VyY2UuZ2V0KCJuYW1lX21pc3MiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteU5hbWVGb3JtYXRbM11bMV0gPSB0ZW1wLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChTdHJpbmcpIHNvdXJjZS5nZXQoIm5hbWVfbXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteU5hbWVGb3JtYXRbNl1bMV0gPSB0ZW1wLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChTdHJpbmcpIHNvdXJjZS5nZXQoIm5hbWVfbXJzIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlOYW1lRm9ybWF0WzRdWzFdID0gdGVtcC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoU3RyaW5nKSBzb3VyY2UuZ2V0KCJuYW1lX2dlbmRlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5yZXBsYWNlKDAsdGVtcC5sZW5ndGgoKSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15TmFtZUZvcm1hdFsxXVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgibmFtZV9mbXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gbXlDaGFycz0gbmV3IGNoYXJbMTAwXTsvLyA9IHRlbXAudG9TdHJpbmcoKS5nZXRDaGFycygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuZ2V0Q2hhcnMoMCx0ZW1wLmxlbmd0aCgpLG15Q2hhcnMsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIG15U3RyaW5nPW5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXlDaGFyc1tpXSE9JyUnKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZChteUNoYXJzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChteUNoYXJzW2ldKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInswfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCgiezF9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2cnIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKCJ7Mn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRycgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoInszfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCggIns0fSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCgiezV9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ20nIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKCJ7Nn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTScgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoIns3fSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCgiezh9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQgKCJ7OX0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInsxMH0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInsxMX0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInsxMn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKG15Q2hhcnNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZShpPHRlbXAubGVuZ3RoKCkpOyAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlOYW1lRm9ybWF0WzBdWzFdID0gbXlTdHJpbmcudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQdXQocmVzdWx0LCJOYW1lRm9ybWF0IixteU5hbWVGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaXZhdGUgdm9pZCBjb252ZXJ0QUREUkVTU0ZPUk1BVChmaW5hbCBIYXNodGFibGUgcmVzdWx0LCBmaW5hbCBIYXNodGFibGUgc291cmNlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdW11ERUZBVUxUX01FU1NBR0VTID0gKFN0cmluZ1tdW10pIGdldERlZmF1bHQoIkFkZHJlc3NGb3JtYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdW10gbXlBZGRyZXNzRm9ybWF0ID0oIGNsb25lMkRBcnIoREVGQVVMVF9NRVNTQUdFUykpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0oU3RyaW5nKSBzb3VyY2UuZ2V0KCJwb3N0YWxfZm10Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlYWJsZVN0cmluZyB0ZW1wID1uZXcgUmVwbGFjZWFibGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gbXlDaGFycz0gbmV3IGNoYXJbMTAwXTsvLyA9IHRlbXAudG9TdHJpbmcoKS5nZXRDaGFycygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuZ2V0Q2hhcnMoMCx0ZW1wLmxlbmd0aCgpLG15Q2hhcnMsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIG15U3RyaW5nPW5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXlDaGFyc1tpXSE9JyUnKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZChteUNoYXJzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChteUNoYXJzW2ldKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInswfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCgiezF9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKCJ7Mn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYicgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoInszfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCggIns0fSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdoJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCgiezV9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ04nIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKCJ7Nn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndCcgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoInsxM30iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncicgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoIns3fSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kICgiezh9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0MnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQgKCJ7OX0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInsxMH0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInsxMX0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInsxMn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCAoInsxNH0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKG15Q2hhcnNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoaTx0ZW1wLmxlbmd0aCgpKTsgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteUFkZHJlc3NGb3JtYXRbMF1bMV0gPSBteVN0cmluZy50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsIkFkZHJlc3NGb3JtYXQiLG15QWRkcmVzc0Zvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRURUxFUEhPTkVGT1JNQVQoZmluYWwgSGFzaHRhYmxlIHJlc3VsdCwgZmluYWwgSGFzaHRhYmxlIHNvdXJjZSl7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXVtdREVGQVVMVF9NRVNTQUdFUyA9IChTdHJpbmdbXVtdKSBnZXREZWZhdWx0KCJUZWxlcGhvbmVGb3JtYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdW10gbXlUZWxlcGhvbmVGb3JtYXQgPSBjbG9uZTJEQXJyKERFRkFVTFRfTUVTU0FHRVMpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0oU3RyaW5nKSBzb3VyY2UuZ2V0KCJ0ZWxfaW50X2ZtdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgdGVtcCA9bmV3IFJlcGxhY2VhYmxlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnJlcGxhY2UoMCx0ZW1wLmxlbmd0aCgpLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIG15Q2hhcnM9IG5ldyBjaGFyWzEwMF07Ly8gPSB0ZW1wLnRvU3RyaW5nKCkuZ2V0Q2hhcnMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmdldENoYXJzKDAsdGVtcC5sZW5ndGgoKSxteUNoYXJzLDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBteVN0cmluZz1uZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG97CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15Q2hhcnNbaV0hPSclJyl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQobXlDaGFyc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobXlDaGFyc1tpXSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYScgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQgKCJ7MH0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQScgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoInsxfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCgiezJ9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKCJ7M30iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQycgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoICJ7NH0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKG15Q2hhcnNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoaTx0ZW1wLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRlbGVwaG9uZUZvcm1hdFswXVsxXSA9IG15U3RyaW5nLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChTdHJpbmcpIHNvdXJjZS5nZXQoImRvbV9mbXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gbXlDaGFycz0gbmV3IGNoYXJbMTAwXTsvLyA9IHRlbXAudG9TdHJpbmcoKS5nZXRDaGFycygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuZ2V0Q2hhcnMoMCx0ZW1wLmxlbmd0aCgpLG15Q2hhcnMsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIG15U3RyaW5nPW5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG97CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15Q2hhcnNbaV0hPSclJyl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQobXlDaGFyc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobXlDaGFyc1tpXSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYScgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQgKCJ7MH0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQScgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoInsxfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U3RyaW5nLmFwcGVuZCgiezJ9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKCJ7M30iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQycgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVN0cmluZy5hcHBlbmQoICJ7NH0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTdHJpbmcuYXBwZW5kKG15Q2hhcnNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoaTx0ZW1wLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRlbGVwaG9uZUZvcm1hdFsxXVsxXSA9IG15U3RyaW5nLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChTdHJpbmcpIHNvdXJjZS5nZXQoImludF9zZWxlY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucmVwbGFjZSgwLHRlbXAubGVuZ3RoKCksdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZSh0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRlbGVwaG9uZUZvcm1hdFsyXVsxXSA9IHRlbXAudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZykgc291cmNlLmdldCgiaW50X3ByZWZpeCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5yZXBsYWNlKDAsdGVtcC5sZW5ndGgoKSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGVsZXBob25lRm9ybWF0WzNdWzFdID0gdGVtcC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsIlRlbGVwaG9uZUZvcm1hdCIsbXlUZWxlcGhvbmVGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIER1bXBQb3NpeERhdGEgcCA9IG5ldyBEdW1wUG9zaXhEYXRhKHNmaWxlTmFtZSk7CisgICAgICAgICAgICBIYXNodGFibGUgbXlyZXN1bHQgPSBuZXcgSGFzaHRhYmxlKDIwKTsKKyAgICAgICAgICAgIHAud3JpdGVQb3NpeENvbXBEYXRhKG15cmVzdWx0LHNvdXJjZSxzZmlsZU5hbWUpOworICAgIH0KKyAgICBwcml2YXRlIHZvaWQgY29udmVydE1PTkVUQVJZKGZpbmFsIEhhc2h0YWJsZSByZXN1bHQsIGZpbmFsIEhhc2h0YWJsZSBzb3VyY2UpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gREVGQVVMVF9DVVJSRU5DWV9FTEVNRU5UUyA9IChTdHJpbmdbXSlnZXREZWZhdWx0KCJDdXJyZW5jeUVsZW1lbnRzIik7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIGVsZW1lbnRzID0gKFN0cmluZ1tdKURFRkFVTFRfQ1VSUkVOQ1lfRUxFTUVOVFMuY2xvbmUoKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gKFN0cmluZylzb3VyY2UuZ2V0KCJjdXJyZW5jeV9zeW1ib2wiKTsKKyAgICAgICAgLy9SZXBsYWNlYWJsZSB0ZW1wID0gbmV3IFJlcGxhY2VhYmxlKHZhbHVlKTsKKyAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKKyAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZShuZXcgUmVwbGFjZWFibGVTdHJpbmcodmFsdWUpKTsKKyAgICAgICAgICAgIGVsZW1lbnRzWzBdID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSAoU3RyaW5nKXNvdXJjZS5nZXQoImludF9jdXJyX3N5bWJvbCIpOworICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgeworICAgICAgICAgICAgIG15VHJhbnNsaXQudHJhbnNsaXRlcmF0ZShuZXcgUmVwbGFjZWFibGVTdHJpbmcodmFsdWUpKTsKKyAgICAgICAgICAgIGVsZW1lbnRzWzFdID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSAoU3RyaW5nKXNvdXJjZS5nZXQoIm1vbl9kZWNpbWFsX3BvaW50Iik7CisgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CisgICAgICAgICAgICBteVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUobmV3IFJlcGxhY2VhYmxlU3RyaW5nKHZhbHVlKSk7CisgICAgICAgICAgICBlbGVtZW50c1syXSA9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsICJDdXJyZW5jeUVsZW1lbnRzIiwgZWxlbWVudHMpOworICAgIH0KKyAgICAKKworICAgIHByaXZhdGUgdm9pZCBjb252ZXJ0TUVBU1VSRU1FTlQoZmluYWwgSGFzaHRhYmxlIHJlc3VsdCwgZmluYWwgSGFzaHRhYmxlIHNvdXJjZSl7CisgICAgICAgIGZpbmFsIFN0cmluZyBERUZBVUxUX01FQVNVUkVNRU5UID0oU3RyaW5nKWdldERlZmF1bHQoIk1lYXN1cmVtZW50Iik7CisgICAgICAgIFN0cmluZyBlbGVtZW50cyA9IChTdHJpbmcpREVGQVVMVF9NRUFTVVJFTUVOVDsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0oU3RyaW5nKSBzb3VyY2UuZ2V0KCJtZWFzdXJlbWVudCIpOworICAgICAgICBpZih2YWx1ZSE9bnVsbCl7CisgICAgICAgICAgICBpZih2YWx1ZS5lcXVhbHMoIjEiKSkKKyAgICAgICAgICAgICAgICBlbGVtZW50cyA9ICJNZXRyaWMiOworICAgICAgICAgICAgZWxzZSBpZih2YWx1ZS5lcXVhbHMoIjIiKSkKKyAgICAgICAgICAgICAgICBlbGVtZW50cyA9ICJBbWVyaWNhbiI7CisgICAgICAgICAgICBlbHNlIGlmKHZhbHVlLmVxdWFscygiMyIpKQorICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gIk90aGVyIjsKKyAgICAgICAgfQorICAgICAgICByZXN1bHRQdXQocmVzdWx0LCJNZWFzdXJlbWVudCIsZWxlbWVudHMpOworICAgIH0KKyAgICBwcml2YXRlIHZvaWQgY29udmVydENPVU5UUllOVU1CRVIgKGZpbmFsIEhhc2h0YWJsZSByZXN1bHQsIGZpbmFsIEhhc2h0YWJsZSBzb3VyY2UpeworICAgICAgICBmaW5hbCBTdHJpbmcgREVGQVVMVF9DT1VOVFJZTlVNQkVSID0oU3RyaW5nKWdldERlZmF1bHQoIkNvdW50cnlOdW1iZXIiKTsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnRzID0gKFN0cmluZylERUZBVUxUX0NPVU5UUllOVU1CRVI7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9KFN0cmluZykgc291cmNlLmdldCgiY291bnRyeV9udW0iKTsKKyAgICAgICAgaWYodmFsdWUhPW51bGwpeworICAgICAgICAgICAgZWxlbWVudHMgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHRQdXQocmVzdWx0LCJDb3VudHJ5TnVtYmVyIixlbGVtZW50cyk7CisgICAgfQorICAgIHByaXZhdGUgdm9pZCBjb252ZXJ0Q09VTlRSWUlTQk5OVU1CRVIgKGZpbmFsIEhhc2h0YWJsZSByZXN1bHQsIGZpbmFsIEhhc2h0YWJsZSBzb3VyY2UpeworICAgICAgICBmaW5hbCBTdHJpbmcgREVGQVVMVF9DT1VOVFJZTlVNQkVSID0oU3RyaW5nKWdldERlZmF1bHQoIkNvdW50cnlJU0JOTnVtYmVyIik7CisgICAgICAgIFN0cmluZyBlbGVtZW50cyA9IG5ldyBTdHJpbmcoKFN0cmluZylERUZBVUxUX0NPVU5UUllOVU1CRVIpOworICAgICAgICBTdHJpbmcgdmFsdWUgPShTdHJpbmcpIHNvdXJjZS5nZXQoImNvdW50cnlfbnVtIik7CisgICAgICAgIGlmKHZhbHVlIT1udWxsKXsKKyAgICAgICAgICAgIGVsZW1lbnRzID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0UHV0KHJlc3VsdCwiQ291bnRyeUlTQk5OdW1iZXIiLGVsZW1lbnRzKTsKKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRMQU5HVUFHRUxJQiAoZmluYWwgSGFzaHRhYmxlIHJlc3VsdCwgZmluYWwgSGFzaHRhYmxlIHNvdXJjZSl7CisgICAgICAgIGZpbmFsIFN0cmluZyBERUZBVUxUX0xBTkdVQUdFTElCID0oU3RyaW5nKWdldERlZmF1bHQoIkxhbmd1YWdlTGlicmFyeVVzZSIpOworICAgICAgICBTdHJpbmcgZWxlbWVudHMgPW5ldyBTdHJpbmcoIChTdHJpbmcpREVGQVVMVF9MQU5HVUFHRUxJQik7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9KFN0cmluZykgc291cmNlLmdldCgibGFuZ19saWIiKTsKKyAgICAgICAgaWYodmFsdWUhPW51bGwpeworICAgICAgICAgICAgZWxlbWVudHMgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHRQdXQocmVzdWx0LCJMYW5ndWFnZUxpYnJhcnlVc2UiLGVsZW1lbnRzKTsKKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRQQVBFUlNJWkUgKGZpbmFsIEhhc2h0YWJsZSByZXN1bHQsIGZpbmFsIEhhc2h0YWJsZSBzb3VyY2UpeworICAgICAgICBmaW5hbCBTdHJpbmdbXVtdIERFRkFVTFRfUEFQRVJTSVpFPShTdHJpbmdbXVtdKSBnZXREZWZhdWx0KCJQYXBlclNpemUiKTsKKyAgICAgICAgZmluYWwgU3RyaW5nW11bXSBlbGVtZW50cz1jbG9uZTJEQXJyKERFRkFVTFRfUEFQRVJTSVpFKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlPShTdHJpbmcpIHNvdXJjZS5nZXQoImhlaWdodCIpOworICAgICAgICBpZiAodmFsdWUhPW51bGwpeworICAgICAgICAgICAgZWxlbWVudHNbMF1bMV09IHZhbHVlOworICAgICAgICB9CisgICAgICAgIHZhbHVlID0gIChTdHJpbmcpIHNvdXJjZS5nZXQoIndpZHRoIik7CisgICAgICAgIGlmKHZhbHVlIT1udWxsKXsKKyAgICAgICAgICAgIGVsZW1lbnRzWzFdWzFdID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxlbWVudHNbMl1bMV09KFN0cmluZykibW0iOworICAgICAgICAKKyAgICAgICAgcmVzdWx0UHV0KHJlc3VsdCwiUGFwZXJTaXplIixlbGVtZW50cyk7CisgICAgfQorICAgIAorICAgLyogcHJpdmF0ZSB2b2lkIGNvbnZlcnRJREVOVElGSUNBVElPTihmaW5hbCBIYXNodGFibGUgcmVzdWx0LCBmaW5hbCBIYXNodGFibGUgc291cmNlKXsKKyAgICAgICAgZmluYWwgU3RyaW5nW11bXURFRkFVTFRfSURFTlRJRklDQVRJT04gPShTdHJpbmdbXVtdKSBnZXREZWZhdWx0KCJJZGVudGlmaWNhdGlvbiIpOworICAgICAgICBmaW5hbCBTdHJpbmdbXVtdIGVsZW1lbnRzID0gKFN0cmluZ1tdW10pREVGQVVMVF9JREVOVElGSUNBVElPTi5jbG9hbmUoKTsKKyAgICAgICAgCisgICAgfSovCisgICAgcHJpdmF0ZSB2b2lkIGNvbnZlcnROVU1FUklDKGZpbmFsIEhhc2h0YWJsZSByZXN1bHQsIGZpbmFsIEhhc2h0YWJsZSBzb3VyY2UpIHsKKyAgICAgICAgLy9CdWlsZCBOdW1iZXJFbGVtZW50cyBkYXRhIGFycmF5CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIERFRkFVTFRfTlVNQkVSX0VMRU1FTlRTID0gKFN0cmluZ1tdKWdldERlZmF1bHQoIk51bWJlckVsZW1lbnRzIik7CisgICAgICAgIC8vU2V0IG5ldyBudW1iZXIgZWxlbWVudHMgdG8gYSBjb3B5IG9mIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIHBhcmVudC4KKyAgICAgICAgZmluYWwgU3RyaW5nW10gZWxlbWVudHMgPSAoU3RyaW5nW10pREVGQVVMVF9OVU1CRVJfRUxFTUVOVFMuY2xvbmUoKTsKKyAgICAgICAgLy9wdXQgZGVjaW1hbCBzZXBlcmF0b3IgaW50byB0aGUgTnVtYmVyRWxlbWVudHMgYXJyYXkKKyAgICAgICAgU3RyaW5nIGRlY2ltYWxQb2ludCA9IChTdHJpbmcpc291cmNlLmdldCgiZGVjaW1hbF9wb2ludCIpOworICAgICAgICBpZiAoZGVjaW1hbFBvaW50ICE9IG51bGwpIHsgLy9pZiB3ZSBoYXZlIGEgUE9TSVggdmFsdWUsIHN0b21wIG9uIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBlbGVtZW50c1swXSA9IGRlY2ltYWxQb2ludDsKKyAgICAgICAgfQorCisgICAgICAgIC8vcHV0IHRob3VzYW5kcyBzZXBlcmF0b3IgaW50byB0aGUgTnVtYmVyRWxlbWVudHMgYXJyYXkKKyAgICAgICAgU3RyaW5nIHRob3VzYW5kc1NlcCA9IChTdHJpbmcpc291cmNlLmdldCgidGhvdXNhbmRzX3NlcCIpOworICAgICAgICBpZiAodGhvdXNhbmRzU2VwICE9IG51bGwpIHsgLy9pZiB3ZSBoYXZlIGEgUE9TSVggdmFsdWUsIHN0b21wIG9uIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBlbGVtZW50c1sxXSA9IHRob3VzYW5kc1NlcDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy9BZGQgTnVtYmVyRWxlbWVudHMgdG8gcmVzdWx0CisgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsICJOdW1iZXJFbGVtZW50cyIsIGVsZW1lbnRzKTsKKworICAgICAgICAvL3VzZSBjYW5vbmljYWwgZGVjaW1hbCBhbmQgdGhvdXNhbmRzIHNlcGVyYXRvcnMgZm9yIHBhdHRlcm5zCisgICAgICAgIGRlY2ltYWxQb2ludCA9ICIuIjsKKyAgICAgICAgdGhvdXNhbmRzU2VwID0gIiwiOworICAgICAgICAKKyAgICAgICAgLy9OdW1iZXJQYXR0ZXJucworICAgICAgICBmaW5hbCBTdHJpbmdbXSBERUZBVUxUX05VTUJFUl9QQVRURVJOUyA9IChTdHJpbmdbXSlnZXREZWZhdWx0KCJOdW1iZXJQYXR0ZXJucyIpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBwYXR0ZXJucyA9IChTdHJpbmdbXSlERUZBVUxUX05VTUJFUl9QQVRURVJOUy5jbG9uZSgpOworICAgICAgICAKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhdHRlcm5EaWdpdCA9IGVsZW1lbnRzWzVdOworICAgICAgICBmaW5hbCBTdHJpbmcgemVyb0RpZ2l0ID0gZWxlbWVudHNbNF07CisgICAgICAgIGZpbmFsIFN0cmluZyBuZWdhdGl2ZVNpZ24gPSBlbGVtZW50c1s2XTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHBlcmNlbnRTaWduID0gZWxlbWVudHNbM107CisgICAgICAgIFN0cmluZyBncm91cGluZ1N0cmluZzsKKyAgICAgICAgT2JqZWN0IGdyb3VwaW5nT2JqID0gc291cmNlLmdldCgiZ3JvdXBpbmciKTsKKyAgICAgICAgYm9vbGVhbiBpc1N0ckFycmF5ID0gZ3JvdXBpbmdPYmogaW5zdGFuY2VvZiBTdHJpbmdbXTsKKyAgICAgICAgaWYgKGlzU3RyQXJyYXkpIHsKKyAgICAgICAgICAgIGdyb3VwaW5nU3RyaW5nID0gKChTdHJpbmdbXSlncm91cGluZ09iailbMF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBncm91cGluZ1N0cmluZyA9IChTdHJpbmcpZ3JvdXBpbmdPYmo7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdyb3VwaW5nU3RyaW5nID09IG51bGwpIHsKKyAgICAgICAgICAgIHBhdHRlcm5zWzBdID0gcmVwbGFjZShwYXR0ZXJuc1swXSwgZWxlbWVudHNbMF0sICI8REVDSU1BTD4iKTsKKyAgICAgICAgICAgIHBhdHRlcm5zWzBdID0gcmVwbGFjZShwYXR0ZXJuc1swXSwgZWxlbWVudHNbMV0sICI8VEhPVVNBTkQ+Iik7CisgICAgICAgICAgICBwYXR0ZXJuc1swXSA9IHJlcGxhY2UocGF0dGVybnNbMF0sICI8REVDSU1BTD4iLCBkZWNpbWFsUG9pbnQpOworICAgICAgICAgICAgcGF0dGVybnNbMF0gPSByZXBsYWNlKHBhdHRlcm5zWzBdLCAiPFRIT1VTQU5EPiIsIHRob3VzYW5kc1NlcCk7CisKKyAgICAgICAgICAgIHBhdHRlcm5zWzJdID0gcmVwbGFjZShwYXR0ZXJuc1syXSwgZWxlbWVudHNbMV0sICI8VEhPVVNBTkQ+Iik7CisgICAgICAgICAgICBwYXR0ZXJuc1syXSA9IHJlcGxhY2UocGF0dGVybnNbMl0sICI8VEhPVVNBTkQ+IiwgdGhvdXNhbmRzU2VwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBncm91cGluZyA9IEludGVnZXIucGFyc2VJbnQoZ3JvdXBpbmdTdHJpbmcpOworICAgICAgICAgICAgLy9mb3IgYSBncm91cGluZyBvZiA1CisgICAgICAgICAgICAvLyM8dGhvdXNhbmRzU2VwPiMjIyMwPGRlY2ltYWxQb2ludD4jIyMjIworICAgICAgICAgICAgZmluYWwgU3RyaW5nQnVmZmVyIHBhdHRlcm4gPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBwYXR0ZXJuLmFwcGVuZChwYXR0ZXJuRGlnaXQpOworICAgICAgICAgICAgcGF0dGVybi5hcHBlbmQodGhvdXNhbmRzU2VwKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBNYXRoLm1heCgxLCBncm91cGluZyAtIDEpOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgcGF0dGVybi5hcHBlbmQocGF0dGVybkRpZ2l0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5kKHplcm9EaWdpdCk7CisgICAgICAgICAgICBwYXR0ZXJuLmFwcGVuZChkZWNpbWFsUG9pbnQpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IE1hdGgubWF4KDEsIGdyb3VwaW5nIC0gMSk7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgcGF0dGVybi5hcHBlbmQocGF0dGVybkRpZ2l0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXR0ZXJuU3RyaW5nID0gcGF0dGVybi50b1N0cmluZygpOworICAgICAgICAgICAgcGF0dGVybnNbMF0gPSBwYXR0ZXJuU3RyaW5nICsgIjsiICsgbmVnYXRpdmVTaWduICsgcGF0dGVyblN0cmluZzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcGF0dGVybi5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICBwYXR0ZXJuLmFwcGVuZChwYXR0ZXJuRGlnaXQpOworICAgICAgICAgICAgcGF0dGVybi5hcHBlbmQodGhvdXNhbmRzU2VwKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBNYXRoLm1heCgxLCBncm91cGluZyAtIDEpOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgcGF0dGVybi5hcHBlbmQocGF0dGVybkRpZ2l0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5kKHplcm9EaWdpdCk7CisgICAgICAgICAgICBwYXR0ZXJuLmFwcGVuZChwZXJjZW50U2lnbik7ICAgICAgICAgICAgCisgICAgICAgICAgICBwYXR0ZXJuc1syXSA9IHBhdHRlcm4udG9TdHJpbmcoKTsKKworICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gY3VycmVuY3lFbGVtZW50cyA9ICgoU3RyaW5nW10pZ2V0RGVmYXVsdCgiQ3VycmVuY3lFbGVtZW50cyIpKTsKKyAgICAgICAgICAgIFN0cmluZyBjdXJyZW5jeV9zeW1ib2wgPSAoU3RyaW5nKXNvdXJjZS5nZXQoImN1cnJlbmN5X3N5bWJvbCIpOworICAgICAgICAgICAgY3VycmVuY3lfc3ltYm9sID0gKGN1cnJlbmN5X3N5bWJvbCAhPSBudWxsKSA/IGN1cnJlbmN5X3N5bWJvbCA6IChTdHJpbmcpc291cmNlLmdldCgiaW50X2N1cnJfc3ltYm9sIik7CisgICAgICAgICAgICBjdXJyZW5jeV9zeW1ib2wgPSAoY3VycmVuY3lfc3ltYm9sICE9IG51bGwpID8gY3VycmVuY3lfc3ltYm9sIDogIiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyBtb25fZGVjaW1hbF9wb2ludCA9IChTdHJpbmcpc291cmNlLmdldCgibW9uX2RlY2ltYWxfcG9pbnQiKTsKKyAgICAgICAgICAgIG1vbl9kZWNpbWFsX3BvaW50ID0gKG1vbl9kZWNpbWFsX3BvaW50ICE9IG51bGwpID8gbW9uX2RlY2ltYWxfcG9pbnQgOiAiIjsKKworICAgICAgICAgICAgU3RyaW5nIG1vbl90aG91c2FuZHNfc2VwID0gKFN0cmluZylzb3VyY2UuZ2V0KCJtb25fdGhvdXNhbmRzX3NlcCIpOworICAgICAgICAgICAgbW9uX3Rob3VzYW5kc19zZXAgPSAobW9uX3Rob3VzYW5kc19zZXAgIT0gbnVsbCkgPyBtb25fdGhvdXNhbmRzX3NlcCA6ICIiOworCisgICAgICAgICAgICBTdHJpbmcgbW9uX2dyb3VwaW5nX3N0cmluZzsKKyAgICAgICAgICAgIGZpbmFsIE9iamVjdCBtb25Hcm91cGluZ09iaiA9IHNvdXJjZS5nZXQoIm1vbl9ncm91cGluZyIpOworICAgICAgICAgICAgaWYgKG1vbkdyb3VwaW5nT2JqIGluc3RhbmNlb2YgU3RyaW5nW10pIHsKKyAgICAgICAgICAgICAgICBtb25fZ3JvdXBpbmdfc3RyaW5nID0gKChTdHJpbmdbXSltb25Hcm91cGluZ09iailbMF07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1vbl9ncm91cGluZ19zdHJpbmcgPSAoU3RyaW5nKW1vbkdyb3VwaW5nT2JqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgaW50IG1vbl9ncm91cGluZyA9IChtb25fZ3JvdXBpbmdfc3RyaW5nID09IG51bGwpID8gZ3JvdXBpbmcgOiBJbnRlZ2VyLnBhcnNlSW50KG1vbl9ncm91cGluZ19zdHJpbmcpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZnJhY19kaWdpdHNfc3RyaW5nID0gKFN0cmluZylzb3VyY2UuZ2V0KCJmcmFjX2RpZ2l0cyIpOworICAgICAgICAgICAgZmluYWwgaW50IGZyYWNfZGlnaXRzID0gKGZyYWNfZGlnaXRzX3N0cmluZyA9PSBudWxsKSA/IG1vbl9ncm91cGluZyA6IEludGVnZXIucGFyc2VJbnQoZnJhY19kaWdpdHNfc3RyaW5nKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHBvc2l0aXZlX3NpZ24gPSAoU3RyaW5nKXNvdXJjZS5nZXQoInBvc2l0aXZlX3NpZ24iKTsKKyAgICAgICAgICAgIHBvc2l0aXZlX3NpZ24gPSAocG9zaXRpdmVfc2lnbiAhPSBudWxsKSA/IHBvc2l0aXZlX3NpZ24gOiAiIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIG5lZ2F0aXZlX3NpZ24gPSAoU3RyaW5nKXNvdXJjZS5nZXQoIm5lZ2F0aXZlX3NpZ24iKTsKKyAgICAgICAgICAgIG5lZ2F0aXZlX3NpZ24gPSAobmVnYXRpdmVfc2lnbiAhPSBudWxsKSA/IG5lZ2F0aXZlX3NpZ24gOiAiIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHBfc2lnbl9wb3NuID0gKFN0cmluZylzb3VyY2UuZ2V0KCJwX3NpZ25fcG9zbiIpOworICAgICAgICAgICAgcF9zaWduX3Bvc24gPSAocF9zaWduX3Bvc24gIT0gbnVsbCkgPyBwX3NpZ25fcG9zbiA6ICIiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgbl9zaWduX3Bvc24gPSAoU3RyaW5nKXNvdXJjZS5nZXQoIm5fc2lnbl9wb3NuIik7CisgICAgICAgICAgICBuX3NpZ25fcG9zbiA9IChuX3NpZ25fcG9zbiAhPSBudWxsKSA/IG5fc2lnbl9wb3NuIDogIiI7CisKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gcF9jc19wcmVjZWRlcyA9ICEiMCIuZXF1YWxzKHNvdXJjZS5nZXQoInBfY3NfcHJlY2VkZXMiKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcF9zZXBfYnlfc3BhY2UgPSAoU3RyaW5nKXNvdXJjZS5nZXQoInBfc2VwX2J5X3NwYWNlIik7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIG5fY3NfcHJlY2VkZXMgPSAhIjAiLmVxdWFscyhzb3VyY2UuZ2V0KCJuX2NzX3ByZWNlZGVzIikpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5fc2VwX2J5X3NwYWNlID0gKFN0cmluZylzb3VyY2UuZ2V0KCJuX3NlcF9ieV9zcGFjZSIpOworCisgICAgICAgICAgICBwYXR0ZXJuLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgIAorLyogICAgICAgICAgICAKKyAgICAgICAgICAgIHBhdHRlcm5zWzFdID0KKyAgICAgICAgICAgICAgICBjcmVhdGVQYXR0ZXJuU3RyaW5nKGN1cnJlbmN5X3N5bWJvbCwgbW9uX2RlY2ltYWxfcG9pbnQsIG1vbl90aG91c2FuZHNfc2VwLCBtb25fZ3JvdXBpbmcsIGZyYWNfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZV9zaWduLCBwX2NzX3ByZWNlZGVzLCBwX3NlcF9ieV9zcGFjZSwgcF9zaWduX3Bvc24sIHBhdHRlcm5EaWdpdCwgemVyb0RpZ2l0KQorICAgICAgICAgICAgICAgICsgIjsiCisgICAgICAgICAgICAgICAgKyBjcmVhdGVQYXR0ZXJuU3RyaW5nKGN1cnJlbmN5X3N5bWJvbCwgbW9uX2RlY2ltYWxfcG9pbnQsIG1vbl90aG91c2FuZHNfc2VwLCBtb25fZ3JvdXBpbmcsIGZyYWNfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZV9zaWduLCBuX2NzX3ByZWNlZGVzLCBuX3NlcF9ieV9zcGFjZSwgbl9zaWduX3Bvc24sIHBhdHRlcm5EaWdpdCwgemVyb0RpZ2l0KTsKKyovCisgICAgICAgICAgICAKKy8qICAgICAgICAgICAgcGF0dGVybnNbMV0gPQorICAgICAgICAgICAgICAgIGNyZWF0ZVBhdHRlcm5TdHJpbmcoY3VycmVuY3lfc3ltYm9sLCAiLiIsICIsIiwgbW9uX2dyb3VwaW5nLCBmcmFjX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmVfc2lnbiwgcF9jc19wcmVjZWRlcywgcF9zZXBfYnlfc3BhY2UsIHBfc2lnbl9wb3NuLCBwYXR0ZXJuRGlnaXQsIHplcm9EaWdpdCkKKyAgICAgICAgICAgICAgICArICI7IgorICAgICAgICAgICAgICAgICsgY3JlYXRlUGF0dGVyblN0cmluZyhjdXJyZW5jeV9zeW1ib2wsICIuIiwgIiwiLCBtb25fZ3JvdXBpbmcsIGZyYWNfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZV9zaWduLCBuX2NzX3ByZWNlZGVzLCBuX3NlcF9ieV9zcGFjZSwgbl9zaWduX3Bvc24sIHBhdHRlcm5EaWdpdCwgemVyb0RpZ2l0KTsKKyovCisgICAgICAgICAgICBwYXR0ZXJuc1sxXSA9CisgICAgICAgICAgICAgICAgY3JlYXRlUGF0dGVyblN0cmluZygiLiIsICIsIiwgbW9uX2dyb3VwaW5nLCBmcmFjX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmVfc2lnbiwgcF9jc19wcmVjZWRlcywgcF9zZXBfYnlfc3BhY2UsIHBfc2lnbl9wb3NuLCBwYXR0ZXJuRGlnaXQsIHplcm9EaWdpdCkKKyAgICAgICAgICAgICAgICArICI7IgorICAgICAgICAgICAgICAgICsgY3JlYXRlUGF0dGVyblN0cmluZygiLiIsICIsIiwgbW9uX2dyb3VwaW5nLCBmcmFjX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmVfc2lnbiwgbl9jc19wcmVjZWRlcywgbl9zZXBfYnlfc3BhY2UsIG5fc2lnbl9wb3NuLCBwYXR0ZXJuRGlnaXQsIHplcm9EaWdpdCk7CisKKyAgICAgICAgfQorICAgICAgICByZXN1bHRQdXQocmVzdWx0LCAiTnVtYmVyUGF0dGVybnMiLCBwYXR0ZXJucyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyByb3V0aW5lIGNyZWF0ZXMgY3VycmVuY3kgZm9ybWF0cyBmcm9tIGFsbCB0aGUgcG9zaXggc3R1ZmYuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlUGF0dGVyblN0cmluZyhTdHJpbmcgZGVjaW1hbCwgU3RyaW5nIHRob3VzYW5kcywgaW50IGdyb3VwaW5nLCBpbnQgZnJhY0RpZ2l0cywKKyAgICAgICAgICAgIFN0cmluZyBzaWduLCBib29sZWFuIHByZWNlZWRzLCBTdHJpbmcgc2VwX2J5X3NwYWNlLCBTdHJpbmcgc2lnbl9wb3NuLCBTdHJpbmcgZGlnaXQsCisgICAgICAgICAgICBTdHJpbmcgcmVxdWlyZWREaWdpdCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmaW5hbCBTdHJpbmcgY3VycmVuY3kgPSAiXHUwMEE0IjsKKyAgICAgICAgaWYgKCIyIi5lcXVhbHMoc2VwX2J5X3NwYWNlKSAmJiAoIiIuZXF1YWxzKGN1cnJlbmN5KSB8fCAiIi5lcXVhbHMoc2lnbikpKSB7CisgICAgICAgICAgICBzZXBfYnlfc3BhY2UgPSAiMCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCIxIi5lcXVhbHMoc2VwX2J5X3NwYWNlKSAmJiAiIi5lcXVhbHMoY3VycmVuY3kpKSB7CisgICAgICAgICAgICBzZXBfYnlfc3BhY2UgPSAiMCI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZpbmFsIFN0cmluZyBzaWduX2N1cnJlbmN5X3NlcGVyYXRvciA9ICgiMiIuZXF1YWxzKHNlcF9ieV9zcGFjZSkpID8gIiAiIDogIiI7CisgICAgICAgIGZpbmFsIFN0cmluZyBxdWFudGl0eV9jdXJyZW5jeV9zZXBlcmF0b3IgPSAoIjEiLmVxdWFscyhzZXBfYnlfc3BhY2UpKSA/ICIgIiA6ICIiOworICAgICAgICAKKyAgICAgICAgaWYgKCIwIi5lcXVhbHMoc2lnbl9wb3NuKSkgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnKCcpOworICAgICAgICB9CisgICAgICAgIGlmICgiMSIuZXF1YWxzKHNpZ25fcG9zbikpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc2lnbik7CisgICAgICAgICAgICBpZiAocHJlY2VlZHMpIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHNpZ25fY3VycmVuY3lfc2VwZXJhdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocHJlY2VlZHMpIHsKKyAgICAgICAgICAgIGlmICgiMyIuZXF1YWxzKHNpZ25fcG9zbikpIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHNpZ24pOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc2lnbl9jdXJyZW5jeV9zZXBlcmF0b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjdXJyZW5jeSk7CisgICAgICAgICAgICBpZiAoIjQiLmVxdWFscyhzaWduX3Bvc24pKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzaWduX2N1cnJlbmN5X3NlcGVyYXRvcik7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzaWduKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQocXVhbnRpdHlfY3VycmVuY3lfc2VwZXJhdG9yKTsKKyAgICAgICAgfSAgICAgICAKKyAgICAgICAgCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGlnaXQpOworICAgICAgICBpZiAoZ3JvdXBpbmcgPiAwKSB7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHRob3VzYW5kcyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gZ3JvdXBpbmctMTsgaSA+IDA7IGktLSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGlnaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5hcHBlbmQocmVxdWlyZWREaWdpdCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGVjaW1hbCk7CisgICAgICAgIGlmIChmcmFjRGlnaXRzID4gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGZyYWNEaWdpdHMtMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHJlcXVpcmVkRGlnaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChkaWdpdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghcHJlY2VlZHMpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQocXVhbnRpdHlfY3VycmVuY3lfc2VwZXJhdG9yKTsKKyAgICAgICAgICAgIGlmICgiMSIuZXF1YWxzKHNpZ25fcG9zbikpIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHNpZ25fY3VycmVuY3lfc2VwZXJhdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgiMyIuZXF1YWxzKHNpZ25fcG9zbikpIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHNpZ24pOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc2lnbl9jdXJyZW5jeV9zZXBlcmF0b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjdXJyZW5jeSk7CisgICAgICAgICAgICBpZiAoIjQiLmVxdWFscyhzaWduX3Bvc24pKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzaWduX2N1cnJlbmN5X3NlcGVyYXRvcik7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzaWduKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAKKyAgICAgICAgaWYgKCIyIi5lcXVhbHMoc2lnbl9wb3NuKSkgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzaWduX2N1cnJlbmN5X3NlcGVyYXRvcik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHNpZ24pOworICAgICAgICB9CisgICAgICAgIGlmICgiMCIuZXF1YWxzKHNpZ25fcG9zbikpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJyknKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgY29udmVydFRJTUUoSGFzaHRhYmxlIHJlc3VsdCwgSGFzaHRhYmxlIHNvdXJjZSkgeworICAgICAgICByZXN1bHRQdXQocmVzdWx0LCAiRGF5TmFtZXMiLCBzb3VyY2UuZ2V0KCJkYXkiKSk7CisgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsICJEYXlBYmJyZXZpYXRpb25zIiwgc291cmNlLmdldCgiYWJkYXkiKSk7CisgICAgICAgIFN0cmluZ1tdIHRlbXAgPSAoU3RyaW5nW10pc291cmNlLmdldCgiYW1fcG0iKTsKKyAgICAgICAgaWYgKHRlbXAgIT0gbnVsbCkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gZGVmYXVsdEFNUE0gPSAoU3RyaW5nW10pZ2V0RGVmYXVsdCgiQW1QbU1hcmtlcnMiKTsKKyAgICAgICAgICAgIGlmICgiIi5lcXVhbHModGVtcFswXSkpIHRlbXBbMF0gPSBkZWZhdWx0QU1QTVswXTsKKyAgICAgICAgICAgIGlmICgiIi5lcXVhbHModGVtcFsxXSkpIHRlbXBbMV0gPSBkZWZhdWx0QU1QTVsxXTsKKyAgICAgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsICJBbVBtTWFya2VycyIsIHRlbXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZW1wID0gKFN0cmluZ1tdKXNvdXJjZS5nZXQoIm1vbiIpOworICAgICAgICBpZiAodGVtcCAhPSBudWxsKSB7CisgICAgICAgICAgICAvL2FkZCBlbXB0eSAxM3RoIG1vbnRoCisgICAgICAgICAgICBTdHJpbmdbXSBuZXdUZW1wID0gbmV3IFN0cmluZ1sxM107CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHRlbXAsIDAsIG5ld1RlbXAsIDAsIDEyKTsKKyAgICAgICAgICAgIG5ld1RlbXBbMTJdID0gIiI7CisgICAgICAgICAgICByZXN1bHRQdXQocmVzdWx0LCAiTW9udGhOYW1lcyIsIG5ld1RlbXApOworICAgICAgICB9CisgICAgICAgIHRlbXAgPSAoU3RyaW5nW10pc291cmNlLmdldCgiYWJtb24iKTsKKyAgICAgICAgaWYgKHRlbXAgIT0gbnVsbCkgeworICAgICAgICAgICAgLy9hZGQgZW1wdHkgMTN0aCBtb250aAorICAgICAgICAgICAgU3RyaW5nW10gbmV3VGVtcCA9IG5ldyBTdHJpbmdbMTNdOworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0ZW1wLCAwLCBuZXdUZW1wLCAwLCAxMik7CisgICAgICAgICAgICBuZXdUZW1wWzEyXSA9ICIiOworICAgICAgICAgICAgcmVzdWx0UHV0KHJlc3VsdCwgIk1vbnRoQWJicmV2aWF0aW9ucyIsIG5ld1RlbXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmaW5hbCBTdHJpbmcgdF9mbXRfYW1wbSA9IChTdHJpbmcpc291cmNlLmdldCgidF9mbXRfYW1wbSIpOworICAgICAgICBmaW5hbCBTdHJpbmcgdF9mbXQgPSAoU3RyaW5nKXNvdXJjZS5nZXQoInRfZm10Iik7CisgICAgICAgIGZpbmFsIFN0cmluZyBkX3RfZm10ID0gKFN0cmluZylzb3VyY2UuZ2V0KCJkX3RfZm10Iik7CisgICAgICAgIGZpbmFsIFN0cmluZyBkX2ZtdCA9IChTdHJpbmcpc291cmNlLmdldCgiZF9mbXQiKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIG5sbGRhdGUgPSAoU3RyaW5nKXNvdXJjZS5nZXQoIm5sbGRhdGUiKTsgICAvL25vbi1zdGFuZGFyZCBJQk0gdGhpbmcKKyAgICAgICAgCisgICAgICAgIGZpbmFsIFN0cmluZyBERUZBVUxUX0RBVEVUSU1FX0VMRU1FTlRTW10gPSAoU3RyaW5nW10pZ2V0RGVmYXVsdCgiRGF0ZVRpbWVQYXR0ZXJucyIpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBlbGVtZW50cyA9IChTdHJpbmdbXSlERUZBVUxUX0RBVEVUSU1FX0VMRU1FTlRTLmNsb25lKCk7CisgICAgICAgIGZpbmFsIFN0cmluZyBYX3BhdHRlcm4gPSBlbGVtZW50c1szXTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHhfcGF0dGVybiA9IGVsZW1lbnRzWzddOworICAgICAgICBmaW5hbCBTdHJpbmcgY19wYXR0ZXJuID0gZWxlbWVudHNbNF0gKyAiICIgKyBlbGVtZW50c1swXTsKKyAgICAgICAgCisgICAgICAgIGVsZW1lbnRzWzBdID0gKHRfZm10X2FtcG0gIT0gbnVsbCAmJiB0X2ZtdF9hbXBtLmxlbmd0aCgpID4gMCkgPyB0X2ZtdF9hbXBtIDogdF9mbXQ7CisgICAgICAgIGVsZW1lbnRzWzFdID0gKHRfZm10ICE9IG51bGwpID8gdF9mbXQgOiB0X2ZtdF9hbXBtOworICAgICAgICBlbGVtZW50c1syXSA9ICh0X2ZtdCAhPSBudWxsKSA/IHRfZm10IDogdF9mbXRfYW1wbTsKKyAgICAgICAgZWxlbWVudHNbM10gPSAodF9mbXQgIT0gbnVsbCkgPyB0X2ZtdCA6IHRfZm10X2FtcG07CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbG9uZ2lzaERhdGVGb3JtYXQgPSAobmxsZGF0ZSAhPSBudWxsKSA/IG5sbGRhdGUgOiBkX2ZtdDsKKyAgICAgICAgaWYgKGRfdF9mbXQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKHRfZm10ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvL3RyeSB0byBidWlsZCBhIGRldGFpbGVkIGRhdGEgZm9ybWF0IGJ5IHRha2luZyB0aGUgCisgICAgICAgICAgICAgICAgLy9kYXRlLXRpbWUgZm9ybWF0IGFuZCByZW1vdmluZyB0aGUgdGltZSBwb3J0aW9uCisgICAgICAgICAgICAgICAgaW50IG5keCA9IGRfdF9mbXQuaW5kZXhPZih0X2ZtdCk7CisgICAgICAgICAgICAgICAgaWYgKG5keCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZHggPCAoZF90X2ZtdC5sZW5ndGgoKSAtIHRfZm10Lmxlbmd0aCgpKS8yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1s4XSA9ICJ7MH0gezF9IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBsb25naXNoRGF0ZUZvcm1hdCA9IHJlcGxhY2UoZF90X2ZtdCwgdF9mbXQsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgbG9uZ2lzaERhdGVGb3JtYXQgPSByZXBsYWNlKGxvbmdpc2hEYXRlRm9ybWF0LCAiJVoiLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGxvbmdpc2hEYXRlRm9ybWF0ID0gcmVwbGFjZShsb25naXNoRGF0ZUZvcm1hdCwgIiAgIiwgIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgbG9uZ2lzaERhdGVGb3JtYXQgPSByZXBsYWNlKGxvbmdpc2hEYXRlRm9ybWF0LCAiICAiLCAiICIpOworICAgICAgICAgICAgICAgICAgICBpZiAobG9uZ2lzaERhdGVGb3JtYXQuY2hhckF0KDApID09ICcgJykgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2lzaERhdGVGb3JtYXQgPSBsb25naXNoRGF0ZUZvcm1hdC5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbG9uZ2lzaERhdGVGb3JtYXQudHJpbSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbGVtZW50c1s0XSA9IGxvbmdpc2hEYXRlRm9ybWF0OworICAgICAgICBlbGVtZW50c1s1XSA9IGRfdF9mbXQ7CisgICAgICAgIGVsZW1lbnRzWzZdID0gKG5sbGRhdGUgIT0gbnVsbCkgPyBubGxkYXRlIDogZF9mbXQ7CisgICAgICAgIGVsZW1lbnRzWzddID0gZF9mbXQ7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50c1tpXSA9IGNvbnZlcnRGb3JtYXRzKGVsZW1lbnRzW2ldLCBYX3BhdHRlcm4sIHhfcGF0dGVybiwgY19wYXR0ZXJuKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0gPSBERUZBVUxUX0RBVEVUSU1FX0VMRU1FTlRTW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlc3VsdFB1dChyZXN1bHQsICJEYXRlVGltZVBhdHRlcm5zIiwgZWxlbWVudHMpOworICAgIH0KKyAgIAorICAgIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRGb3JtYXRzKFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgWF9wYXR0ZXJuLCAKKyAgICAgICAgICAgIFN0cmluZyB4X3BhdHRlcm4sIFN0cmluZyBjX3BhdHRlcm4pIHsKKyAgICAgICAgCisgICAgICAgIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yIGh1VHJhbnNsaXQgPW15VHJhbnNsaXQ7CisgICAgICAgIGh1VHJhbnNsaXQuYXBwbHlQYXR0ZXJuKCI8VTAwMDA+Iik7CisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHRlbXBTdHIgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoKTsKKyAgICAgICAgdGVtcFN0ci5yZXBsYWNlKDAsdGVtcFN0ci5sZW5ndGgoKSxwYXR0ZXJuKTsgICAgICAKKyAgICAgICAgaHVUcmFuc2xpdC50cmFuc2xpdGVyYXRlKHRlbXBTdHIpOworICAgICAgICBTdHJpbmcgdHBhdHRlcm4gPSB0ZW1wU3RyLnRvU3RyaW5nKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHBhdHRlcm4ubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgY2hhciBjID0gdHBhdHRlcm4uY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGMgIT0gJyUnKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIGMgPSB0cGF0dGVybi5jaGFyQXQoaSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVFRSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdBJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiRUVFRSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiTU1NIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ0InOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJNTU1NIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNfcGF0dGVybik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ0MnOiAgIC8vKiogaGV5IHtqZn0gLSB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBjZW50dXJ5IG9ubHkuCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIllZWVkiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRkIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJtbS9kZC95eSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdlJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiZGQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIk1NTSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdIJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiSEgiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnSSc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImhoIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2onOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJEREQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIk1NIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ00nOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJtbSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImFhIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZlcnRGb3JtYXRzKCIlSTolTTolUyAlcCIsIFhfcGF0dGVybiwgeF9wYXR0ZXJuLCBjX3BhdHRlcm4pKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoInNzIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcdCcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb252ZXJ0Rm9ybWF0cygiJUk6JU06JVMiLCBYX3BhdHRlcm4sIHhfcGF0dGVybiwgY19wYXR0ZXJuKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ1UnOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJ3dyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICd3JzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiRSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdXJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgid3ciKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeF9wYXR0ZXJuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnWCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoWF9wYXR0ZXJuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAneSc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoInl5Iik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ1knOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJ5eXl5Iik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ1onOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJ6Iik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIlIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyUnKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRDT0xMQVRFKEhhc2h0YWJsZSByZXN1bHQsIEhhc2h0YWJsZSBzb3VyY2UpIHsKKyAgICAgICAgU3RyaW5nW10gc29ydE9yZGVyID0gKFN0cmluZ1tdKXNvdXJjZS5nZXQoInNvcnRfb3JkZXIiKTsKKyAgICAgICAgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IgaHVUcmFuc2xpdCA9bXlUcmFuc2xpdDsKKyAgICAgICAgaHVUcmFuc2xpdC5hcHBseVBhdHRlcm4oIjxVMDAwMD4iKTsKKyAgICAgICAgUmVwbGFjZWFibGVTdHJpbmcgdGVtcFN0ciA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZygpOworICAgICAgICAvL3RlbXBTdHIucmVwbGFjZSgwLHRlbXBTdHIubGVuZ3RoKCksc29ydE9yZGVyKTsgICAgICAKKyAgICAgICAgZmluYWwgT2JqZWN0W11bXSBERUZBVUxUX0NPTExBVElPTj0oT2JqZWN0W11bXSkgZ2V0RGVmYXVsdCgiQ29sbGF0aW9uRWxlbWVudHMiKTsKKyAgICAgICAgZmluYWwgT2JqZWN0W11bXSBlbGVtZW50cz0oT2JqZWN0W11bXSljbG9uZTJEQXJyKERFRkFVTFRfQ09MTEFUSU9OKTsgICAgICAgIAorICAgICAgICBodVRyYW5zbGl0LnRyYW5zbGl0ZXJhdGUodGVtcFN0cik7CisgICAgICAgIGlmIChzb3J0T3JkZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCEiZm9yd2FyZCIuZXF1YWxzKHNvcnRPcmRlclswXSkpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOiBVbnN1cHBvcnRlZCBwcmltYXJ5IHNvcnQgb3JkZXI6ICIrc29ydE9yZGVyWzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzb3J0T3JkZXIubGVuZ3RoID09IDIgJiYgISJmb3J3YXJkIi5lcXVhbHMoc29ydE9yZGVyWzFdKSAmJiAhImJhY2t3YXJkIi5lcXVhbHMoc29ydE9yZGVyWzFdKSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6IFVuc3VwcG9ydGVkIHNlY29uZGFyeSBzb3J0IG9yZGVyOiAiK3NvcnRPcmRlclsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc29ydE9yZGVyLmxlbmd0aCA9PSAzICYmICEiZm9yd2FyZCIuZXF1YWxzKHNvcnRPcmRlclsyXSkpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVSUk9SOiBVbnN1cHBvcnRlZCB0ZXJ0aWFyeSBzb3J0IG9yZGVyOiAiK3NvcnRPcmRlclsyXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc29ydE9yZGVyLmxlbmd0aCA+IDMpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldBUk5JTkc6IFNvcnQgbGV2ZWxzIG9mIG9yZGVyIGdyZWF0ZXIgdGhhbiB0aHJlZSBpZ25vcmVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQb3NpeENvbGxhdGlvbkJ1aWxkZXIuQ29sbGF0aW9uUnVsZVtdIHJ1bGVTb3VyY2UgPSAKKyAgICAgICAgICAgIChQb3NpeENvbGxhdGlvbkJ1aWxkZXIuQ29sbGF0aW9uUnVsZVtdKXNvdXJjZS5nZXQoInBvc2l4X3NvcnRfcnVsZXMiKTsKKworICAgICAgICBpZiAocnVsZVNvdXJjZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy9hbGxvY2F0ZSBhIGxpc3Qgb2YgY29sbGF0aW9uSXRlbXMuICBBZGQgYW4gZXh0cmEgZW50cnkgZm9yIHNlY29uZGFyeSBvcmRlcmluZworICAgICAgICAgICAgQ29sbGF0aW9uSXRlbVtdIHJ1bGVzID0gbmV3IENvbGxhdGlvbkl0ZW1bcnVsZVNvdXJjZS5sZW5ndGgrMV07CisgICAgICAgICAgICBQb3NpeENvbGxhdGlvbkJ1aWxkZXIuQ29sbGF0aW9uUnVsZSBwcmV2UnVsZSA9IG51bGw7CisgICAgICAgICAgICAgICAgLy9hZGQgYWxsIHRoZSBydWxlcyBmb3Igbm9uLWV4cGFuZGluZyBjaGFyYWN0ZXJzCisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBuZHggPSAwOyBuZHggPCBydWxlU291cmNlLmxlbmd0aDsgbmR4KyspIHsKKyAgICAgICAgICAgICAgICBQb3NpeENvbGxhdGlvbkJ1aWxkZXIuQ29sbGF0aW9uUnVsZSBydWxlID0gcnVsZVNvdXJjZVtuZHhdOworICAgICAgICAgICAgICAgICAgICAvL2FkZCBub24tZXhwYW5kaW5nIGNoYXJhY3RlcnMgdG8gdGhlIHNvcnQgbGlzdAorICAgICAgICAgICAgICAgIGlmIChydWxlLmdldFNpemUoKSA8PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBkaWZmOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldlJ1bGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBpdCdzIHRoZSBmaXJzdCBydWxlLCBkb24ndCBjb21wYXJlIHRvIGFueXRoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zZWVrIGJhY2sgc28gaXQgY2FuIGJlIGFwcGVuZGVkIHRvIHRoZSBkZWZhdWx0IHJ1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICBydWxlc1tpXSA9IG5ldyBDb2xsYXRpb25JdGVtKHJ1bGUuZ2V0U3ltYm9sKCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9jb21wYXJlIHRvIHByZXZpb3VzIGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYgPSBwcmV2UnVsZS5jb21wYXJlKHJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXNbaV0gPSBuZXcgQ29sbGF0aW9uSXRlbShkaWZmLCBydWxlLmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBydWxlc1tpKytdLnNldENvbW1lbnQocnVsZS5nZXRTb3VyY2UoKSk7CisgICAgICAgICAgICAgICAgICAgIHByZXZSdWxlID0gcnVsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy9hZGQgcnVsZXMgZm9yIGV4cGFuZGluZyBjaGFyYWN0ZXJzCisgICAgICAgICAgICBTdHJpbmcgcHJldlNlZWsgPSBudWxsOworICAgICAgICAgICAgcHJldlJ1bGUgPSBudWxsOworICAgICAgICAgICAgZm9yIChpbnQgbmR4ID0gMDsgbmR4IDwgcnVsZVNvdXJjZS5sZW5ndGg7IG5keCsrKSB7CisgICAgICAgICAgICAgICAgUG9zaXhDb2xsYXRpb25CdWlsZGVyLkNvbGxhdGlvblJ1bGUgcnVsZSA9IHJ1bGVTb3VyY2VbbmR4XTsKKyAgICAgICAgICAgICAgICBpZiAocnVsZS5nZXRTaXplKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL2ZpbmQgb3V0IHdoYXQgdGhpcyBjaGFyYWN0ZXIgZXhwYW5kcyB0bworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2VlayA9IHJ1bGUuZ2V0RXhwYW5zaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2Vlay5lcXVhbHMocHJldlNlZWspKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVuIHNlZWsgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZXhwYW5zaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgY29tcGFyZSB0byB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBQb3NpeENvbGxhdGlvbkJ1aWxkZXIuQ29sbGF0aW9uUnVsZSBzZWVrUnVsZSA9IHJ1bGUuc2Vla3NUb1J1bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldID0gbmV3IENvbGxhdGlvbkl0ZW0oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWtSdWxlLmNvbXBhcmUocnVsZSksIHJ1bGUuZ2V0U3ltYm9sKCksIHJ1bGUuZ2V0RXhwYW5zaW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNlZWsgPSBzZWVrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZSdWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2l0IGV4cGFuZHMgdG8gdGhlIHNhbWUgY2hhcmFjdGVycyBhcyB0aGUgcHJldmlvdXMgZXhwYW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc28gY29tcGFyZSB0byB0aGUgcHJldmlvdXMgZXhwYW5zaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBydWxlc1tpXSA9IG5ldyBDb2xsYXRpb25JdGVtKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2UnVsZS5jb21wYXJlKHJ1bGUpLCBydWxlLmdldFN5bWJvbCgpLCBwcmV2UnVsZS5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGUgdW5saWtlbHkgY2FzZSB0aGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmUgYW4gZXhwYW5kaW5nIGNoYXJhY3Rlci4uLkkgZG9uJ3QgdGhpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgaXMgZXZlbiBwb3NzaWJsZS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXNbaV0gPSBuZXcgQ29sbGF0aW9uSXRlbShydWxlLmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBydWxlc1tpKytdLnNldENvbW1lbnQocnVsZS5nZXRTb3VyY2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByZXZSdWxlID0gcnVsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgiYmFja3dhcmQiLmVxdWFscyhzb3J0T3JkZXJbMV0pKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudHNbMV1bMV0gPSAidHJ1ZSI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsZW1lbnRzWzFdWzFdID0gImZhbHNlIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsZW1lbnRzWzJdWzFdPShPYmplY3QpcnVsZXM7CisgICAgICAgICAgICByZXN1bHRQdXQocmVzdWx0LCAiQ29sbGF0aW9uRWxlbWVudHMiLCBlbGVtZW50cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIHByaXZhdGUgdm9pZCByZXN1bHRQdXQoSGFzaHRhYmxlIHJlc3VsdFRhYmxlLCBTdHJpbmcgdGFnLCBPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjsKKyAgICAgICAgcmVzdWx0VGFibGUucHV0KHRhZywgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIE9iamVjdCBnZXREZWZhdWx0KFN0cmluZyBkZXNpcmVkUmVzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIGdldFBhcmVudEJ1bmRsZSgpLmdldE9iamVjdChkZXNpcmVkUmVzb3VyY2UpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIFJlc291cmNlQnVuZGxlIGdldFBhcmVudEJ1bmRsZSgpIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiY29tLmlibS5pY3UuZGV2LnRvb2wubG9jYWxlY29udmVydGVyLm15TG9jYWxlRWxlbWVudHMiLCBwYXJlbnRMb2NhbGUpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyByZXBsYWNlKFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQsIFN0cmluZyByZXBsYWNlbWVudCkgeworICAgICAgICBpZiAodGFyZ2V0LmVxdWFscyhyZXBsYWNlbWVudCkpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgaW50IGxhc3ROZHggPSAwOworICAgICAgICAgICAgaW50IG5keCA9IHNvdXJjZS5pbmRleE9mKHRhcmdldCk7CisgICAgICAgICAgICB3aGlsZSAobmR4ID49IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNvdXJjZS5zdWJzdHJpbmcobGFzdE5keCwgbmR4KSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudCk7CisgICAgICAgICAgICAgICAgbmR4ICs9IHRhcmdldC5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBsYXN0TmR4ID0gbmR4OworICAgICAgICAgICAgICAgIG5keCA9IHNvdXJjZS5pbmRleE9mKHRhcmdldCwgbmR4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc291cmNlLnN1YnN0cmluZyhsYXN0TmR4KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisJLy97e0RFQ0xBUkVfQ09OVFJPTFMKKwkvL319Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9RdW90ZVRyYW5zaXRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUXVvdGVUcmFuc2l0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTBhODBjMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUXVvdGVUcmFuc2l0aW9uLmphdmEKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9RdW90ZVRyYW5zaXRpb24uamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozMSAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFF1b3RlVHJhbnNpdGlvbiBleHRlbmRzIENvbXBsZXhUcmFuc2l0aW9uIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFF1b3RlVHJhbnNpdGlvbiBHTE9CQUwgPSBuZXcgUXVvdGVUcmFuc2l0aW9uKFNVQ0NFU1MpOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIFNUUklOR19DSEFSID0gJyInOworICAgIAorICAgIHB1YmxpYyBRdW90ZVRyYW5zaXRpb24oaW50IHN1Y2Nlc3MpIHsKKyAgICAgICAgc3VwZXIoc3VjY2Vzcyk7CisgICAgICAgICAgICAvL3t7SU5JVF9DT05UUk9MUworICAgICAgICAvL319CisgICAgfQorICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoaW50IGMpIHsKKyAgICAgICAgcmV0dXJuIFNUUklOR19DSEFSID09IChjaGFyKWM7CisgICAgfQorICAgIHByb3RlY3RlZCBMZXguVHJhbnNpdGlvbltdW10gZ2V0U3RhdGVzKCkgeworICAgICAgICByZXR1cm4gc3RhdGVzOworICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMZXguVHJhbnNpdGlvbltdW10gc3RhdGVzID0geworICAgICAgICB7IC8vc3RhdGUgMDogCisgICAgICAgICAgICBuZXcgTGV4LkNoYXJUcmFuc2l0aW9uKFNUUklOR19DSEFSLCBMZXguSUdOT1JFX0NPTlNVTUUsIC0xKSwKKyAgICAgICAgICAgIG5ldyBMZXguUGFyc2VFeGNlcHRpb25UcmFuc2l0aW9uKCJpbGxlZ2FsIGNoYXJhY3RlciBpbiBxdW90ZWQgc3RyaW5nIikKKyAgICAgICAgfSwKKyAgICAgICAgeyAvL3N0YXRlIDE6CisgICAgICAgICAgICBuZXcgTGV4LkNoYXJUcmFuc2l0aW9uKFNUUklOR19DSEFSLCBMZXguSUdOT1JFX0NPTlNVTUUsIFNVQ0NFU1MpLAorICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKEVPTFRyYW5zaXRpb24uRU9MX0NIQVJTLCBMZXguSUdOT1JFX0NPTlNVTUUsIC0yKSwKKyAgICAgICAgICAgIG5ldyBFc2NhcGVUcmFuc2l0aW9uKC0xKSwKKyAgICAgICAgICAgIG5ldyBTeW1ib2xUcmFuc2l0aW9uKC0xKSwKKyAgICAgICAgICAgIG5ldyBMZXguRU9GVHJhbnNpdGlvbigtMiksCisgICAgICAgICAgICBuZXcgTGV4LkRlZmF1bHRUcmFuc2l0aW9uKExleC5BQ0NVTVVMQVRFX0NPTlNVTUUsIC0xKQorICAgICAgICB9LAorICAgICAgICB7IC8vc3RhdGUgMjogZmFpbHVyZSBmcm9tIGVvZgorICAgICAgICAgICAgbmV3IExleC5QYXJzZUV4Y2VwdGlvblRyYW5zaXRpb24oInVudGVybWluYXRlZCBzdHJpbmciKQorICAgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIExleC5UcmFuc2l0aW9uW11bXSBzdGF0ZXMgPSB7eyAKKyAgICAgICAgICAgICAgICBuZXcgUXVvdGVUcmFuc2l0aW9uKFNVQ0NFU1MpLAorICAgICAgICAgICAgICAgIG5ldyBMZXguRU9GVHJhbnNpdGlvbigpLAorICAgICAgICAgICAgICAgIG5ldyBMZXguUGFyc2VFeGNlcHRpb25UcmFuc2l0aW9uKCJiYWQgdGVzdCBpbnB1dCIpCisgICAgICAgICAgICB9fTsKKyAgICAgICAgICAgIEVzY2FwZVRyYW5zaXRpb24uc2V0RXNjYXBlQ2hhcignLycpOworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSAiXCJoZWxsbzxcIi8+Pi9kMzJ3b3JsZFwiXCI8b25lPi9cbjx0d28+XCIiOworICAgICAgICAgICAgU3RyaW5nUmVhZGVyIHNyID0gbmV3IFN0cmluZ1JlYWRlcih0ZXh0KTsKKyAgICAgICAgICAgIFB1c2hiYWNrUmVhZGVyIHByID0gbmV3IFB1c2hiYWNrUmVhZGVyKHNyKTsKKyAgICAgICAgICAgIExleCBwYXJzZXIgPSBuZXcgTGV4KHN0YXRlcywgcHIpOworICAgICAgICAgICAgLy9wYXJzZXIuZGVidWcodHJ1ZSk7CisgICAgICAgICAgICBpbnQgcyA9IHBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIHdoaWxlIChzID09IFNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyc2VyLmdldERhdGEoKSk7CisgICAgICAgICAgICAgICAgcyA9IHBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvL3t7REVDTEFSRV9DT05UUk9MUworICAgIC8vfX0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUmFuZ2VUcmFuc2l0aW9uLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1JhbmdlVHJhbnNpdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1Mzg4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1JhbmdlVHJhbnNpdGlvbi5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvUmFuZ2VUcmFuc2l0aW9uLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MzEgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBSYW5nZVRyYW5zaXRpb24gZXh0ZW5kcyBDb21wbGV4VHJhbnNpdGlvbiB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBSYW5nZVRyYW5zaXRpb24gR0xPQkFMID0gbmV3IFJhbmdlVHJhbnNpdGlvbihTVUNDRVNTKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSQU5HRV9DSEFSUyA9ICIuLi4iOworICAgIHB1YmxpYyBSYW5nZVRyYW5zaXRpb24oaW50IHN1Y2Nlc3MpeworICAgICAgICBzdXBlcihzdWNjZXNzKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhpbnQgYyl7CisgICAgICAgIHJldHVybiBSQU5HRV9DSEFSUy5pbmRleE9mKChjaGFyKWMpID49MDsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIExleC5UcmFuc2l0aW9uW11bXWdldFN0YXRlcygpeworICAgICAgICByZXR1cm4gc3RhdGVzOworICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMZXguVHJhbnNpdGlvbltdW10gc3RhdGVzPSB7CisKKyAgICAgICAgeyAvL3N0YXRlIDA6IAorICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKFJBTkdFX0NIQVJTLCBMZXguSUdOT1JFX0NPTlNVTUUsIC0xKSwKKyAgICAgICAgICAgIG5ldyBMZXguUGFyc2VFeGNlcHRpb25UcmFuc2l0aW9uKCJpbGxlZ2FsIHNwYWNlIGNoYXJhY3RlciIpCisgICAgICAgIH0sCisgICAgICAgIHsgLy9zdGF0ZSAxOgorICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKFNVQ0NFU1MpLAorICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKFJBTkdFX0NIQVJTLCBMZXguSUdOT1JFX0NPTlNVTUUsIC0xKSwKKyAgICAgICAgICAgIG5ldyBMZXguRGVmYXVsdFRyYW5zaXRpb24oTGV4LklHTk9SRV9QVVRCQUNLLCBTVUNDRVNTKQorICAgICAgICB9LAorICAgIH07Cit9CisgICAgICAgICAgICAKKyAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1NvcnRlZFZlY3Rvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Tb3J0ZWRWZWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OWVlYTAwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Tb3J0ZWRWZWN0b3IuamF2YQpAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Tb3J0ZWRWZWN0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozMSAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworLyoqCisgICAgSW1wbGVtZW50cyBhIHNvcnRlZCB2ZWN0b3IuIFlvdSBjYW4gYWRkIGFueXRoaW5nIHRvIGl0OyB3aGVuIHlvdSBhY2Nlc3MgYW55IGVsZW1lbnQsIGl0IHNvcnRzCisgICAgdGhlIGFycmF5IGludGVybmFsbHkgd2hlbiBuZWNlc3NhcnkuCisgICAgPHA+QSBDb21wYXJhdG9yIGlzIHVzZWQgdG8gY29tcGFyZSB0aGUgZWxlbWVudHMsIGFsbG93aW5nIGFyYml0cmFyeSBvcmRlcmluZ3MuCisgICAgSWYgbm8gQ29tcGFyYXRvciBpcyBzdXBwbGllZCwgdGhlbiBvbmUgaXMgY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIHR5cGUKKyAgICBvZiB0aGUgZmlyc3QgZWxlbWVudCBhZGRlZC4gT25seSBOdW1iZXJzIGFuZCBDb21wYXJhYmxlcyBhcmUgaGFuZGxlZC4KKyAgICA8cD5EdXBsaWNhdGVzIGFyZSBhbGxvd2VkLgorKi8KK2ZpbmFsIHB1YmxpYyBjbGFzcyBTb3J0ZWRWZWN0b3IgeworICAgIC8qKgorICAgICAgICBDb3BpZXMgZWxlbWVudHMgb2YgdmVjdG9yLCBlbnVtZXJhdGlvbiBvciBhcnJheQorICAgICAgICBOb3RlOiB0aGUgb2JqZWN0cyBpbiB0aGUgc291cmNlIGFyZSBOT1QgY2xvbmVkLgorICAgICAgICBEbyBub3QgY2hhbmdlIHRoZW0gb3IgdGhlIHNvcnRpbmcgd2lsbCBiZSBpbnZhbGlkLgorICAgICovCisgICAgcHVibGljIFNvcnRlZFZlY3RvcihPYmplY3RbXSBuZXdWYWx1ZXMsIENvbXBhcmF0b3IgY29tcGFyYXRvcikgeworICAgICAgICB0aGlzLmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yOworICAgICAgICBhZGRFbGVtZW50cyhuZXdWYWx1ZXMpOworICAgICAgICAgICAgLy97e0lOSVRfQ09OVFJPTFMKKwkJLy99fQorfQorCisgICAgcHVibGljIFNvcnRlZFZlY3RvcihWZWN0b3IgbmV3VmFsdWVzLCBDb21wYXJhdG9yIGNvbXBhcmF0b3IpIHsKKyAgICAgICAgdGhpcy5jb21wYXJhdG9yID0gY29tcGFyYXRvcjsKKyAgICAgICAgYWRkRWxlbWVudHMobmV3VmFsdWVzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU29ydGVkVmVjdG9yKEVudW1lcmF0aW9uIG5ld1ZhbHVlcywgQ29tcGFyYXRvciBjb21wYXJhdG9yKSB7CisgICAgICAgIHRoaXMuY29tcGFyYXRvciA9IGNvbXBhcmF0b3I7CisgICAgICAgIGFkZEVsZW1lbnRzKG5ld1ZhbHVlcyk7CisgICAgfQorCisgICAgcHVibGljIFNvcnRlZFZlY3RvcihPYmplY3RbXSBuZXdWYWx1ZXMpIHsKKyAgICAgICAgYWRkRWxlbWVudHMobmV3VmFsdWVzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU29ydGVkVmVjdG9yKENvbXBhcmF0b3IgY29tcGFyYXRvcikgeworICAgICAgICB0aGlzLmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yOworICAgIH0KKworICAgIHB1YmxpYyBTb3J0ZWRWZWN0b3IoVmVjdG9yIG5ld1ZhbHVlcykgeworICAgICAgICBhZGRFbGVtZW50cyhuZXdWYWx1ZXMpOworICAgIH0KKworICAgIHB1YmxpYyBTb3J0ZWRWZWN0b3IoRW51bWVyYXRpb24gbmV3VmFsdWVzKSB7CisgICAgICAgIGFkZEVsZW1lbnRzKG5ld1ZhbHVlcyk7CisgICAgfQorCisgICAgcHVibGljIFNvcnRlZFZlY3RvcigpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgQWRkcyBvbmUgZWxlbWVudC4KKyAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEVsZW1lbnQoT2JqZWN0IGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKGNvdW50ID49IGRhdGFBcnJheS5sZW5ndGgpIHNldENhcGFjaXR5KGNvdW50KjIgKyAxNyk7CisgICAgICAgIGRhdGFBcnJheVtjb3VudCsrXSA9IGVsZW1lbnQ7CisgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgQWRkcyBtdWx0aXBsZSBlbGVtZW50cy4gRmFzdGVyIHRoYW4gYWRkaW5nIG9uZSBhdCBhIHRpbWUuCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRFbGVtZW50cyhPYmplY3RbXSBuZXdWYWx1ZXMpIHsKKyAgICAgICAgaW50IG5ld0NvdW50ID0gY291bnQgKyBuZXdWYWx1ZXMubGVuZ3RoOworICAgICAgICBpZiAobmV3Q291bnQgPiBkYXRhQXJyYXkubGVuZ3RoKSBzZXRDYXBhY2l0eShuZXdDb3VudCk7CisgICAgICAgIGZvciAoaW50IGkgPSBjb3VudDsgaSA8IG5ld0NvdW50OyArK2kpCisgICAgICAgICAgICBkYXRhQXJyYXlbaV0gPSBuZXdWYWx1ZXNbaS1jb3VudF07CisgICAgICAgIGNvdW50ID0gbmV3Q291bnQ7CisgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRFbGVtZW50cyhWZWN0b3IgbmV3VmFsdWVzKSB7CisgICAgICAgIGludCBuZXdDb3VudCA9IGNvdW50ICsgbmV3VmFsdWVzLnNpemUoKTsKKyAgICAgICAgaWYgKG5ld0NvdW50ID4gZGF0YUFycmF5Lmxlbmd0aCkgc2V0Q2FwYWNpdHkobmV3Q291bnQpOworICAgICAgICBmb3IgKGludCBpID0gY291bnQ7IGkgPCBuZXdDb3VudDsgKytpKQorICAgICAgICAgICAgZGF0YUFycmF5W2ldID0gbmV3VmFsdWVzLmVsZW1lbnRBdChpLWNvdW50KTsKKyAgICAgICAgY291bnQgPSBuZXdDb3VudDsKKyAgICAgICAgaXNWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZEVsZW1lbnRzKEVudW1lcmF0aW9uIG5ld1ZhbHVlcykgeworICAgICAgICB3aGlsZSAobmV3VmFsdWVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBhZGRFbGVtZW50KG5ld1ZhbHVlcy5uZXh0RWxlbWVudCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAgICBSZW1vdmVzIGVsZW1lbnRzIGF0IGluZGljZXMgPj0gc3RhcnRJbmRleCBhbmQgPCBlbmRJbmRleAorICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlRWxlbWVudHMoaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkgeworICAgICAgICBpZiAoIWlzVmFsaWQpIHZhbGlkYXRlKCk7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZGF0YUFycmF5LGVuZEluZGV4LGRhdGFBcnJheSxzdGFydEluZGV4LGNvdW50IC0gZW5kSW5kZXgpOworICAgICAgICBmb3IgKGludCBpID0gY291bnQgLSAoZW5kSW5kZXggLSBzdGFydEluZGV4KTsgaSA8IGNvdW50OysraSkKKyAgICAgICAgICAgIGRhdGFBcnJheVtpXSA9IG51bGw7ICAgLy8gZnJlZSB1cCBzdG9yYWdlCisgICAgICAgIGNvdW50IC09IChlbmRJbmRleCAtIHN0YXJ0SW5kZXgpOworICAgIH0KKworICAgIC8qKgorICAgICAgICBTZXRzIGNvbXBhcmF0b3IKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbXBhcmF0b3IoQ29tcGFyYXRvciBjb21wYXJhdG9yKSB7CisgICAgICAgIHRoaXMuY29tcGFyYXRvciA9IGNvbXBhcmF0b3I7CisgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29tcGFyYXRvciBnZXRDb21wYXJhdG9yKCkgeworICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBudWxsKSB2YWxpZGF0ZUNvbXBhcmF0b3IoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyYXRvcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgR2V0cyBzaXplLCB0aGUgYWN0dWFsIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAqLworICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKworICAgIC8qKgorICAgICAgICBHZXRzIGNhcGFjaXR5LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHlvdSBjYW4gaGF2ZSB3aXRob3V0IGdyb3dpbmcgdGhlIGFycmF5LgorICAgICovCisgICAgcHVibGljIGludCBjYXBhY2l0eSgpIHsKKyAgICAgICAgcmV0dXJuIGRhdGFBcnJheS5sZW5ndGg7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIFNldHMgY2FwYWNpdHksIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgeW91IGNhbiBoYXZlIHdpdGhvdXQgZ3Jvd2luZyB0aGUgYXJyYXkuCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDYXBhY2l0eShpbnQgbmV3U2l6ZSkgeworICAgICAgICBPYmplY3RbXSB0ZW1wID0gbmV3IE9iamVjdFtuZXdTaXplXTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShkYXRhQXJyYXksIDAsIHRlbXAsIDAsIE1hdGgubWluKGNvdW50LG5ld1NpemUpKTsKKyAgICAgICAgZGF0YUFycmF5ID0gdGVtcDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgICAgVHJpbXMgdGhlIGFycmF5LgorICAgICovCisgICAgcHVibGljIHZvaWQgdHJpbVRvU2l6ZSgpIHsKKyAgICAgICAgc2V0Q2FwYWNpdHkoY291bnQpOworICAgIH0KKworICAgIC8qKgorICAgICAgICBHZXRzIHRoZSBlbGVtZW50IGF0IHRoZSBpbmRleAorICAgICovCisgICAgcHVibGljIE9iamVjdCBlbGVtZW50QXQgKGludCBpbmRleCkgeworICAgICAgICBpZiAoIWlzVmFsaWQpIHZhbGlkYXRlKCk7CisgICAgICAgIGlmIChpbmRleCA+PSBjb3VudCkgcmV0dXJuIGRhdGFBcnJheVtkYXRhQXJyYXkubGVuZ3RoXTsKKyAgICAgICAgcmV0dXJuIGRhdGFBcnJheVtpbmRleF07CisgICAgfQorCisgICAgLyoqCisgICAgICAgIFNlZXMgd2hldGhlciB0aGUgdmVjdG9yIGNvbnRhaW5zIHRoZSBvYmplY3QKKyAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zIChPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgaW50IGluZGV4ID0gaW5kZXhPZih2YWx1ZSk7CisgICAgICAgIHJldHVybiAoaW5kZXggPj0gMCAmJiBjb21wYXJhdG9yLmNvbXBhcmUodmFsdWUsZGF0YUFycmF5W2luZGV4XSkgPT0gMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIEdldHMgYW4gZW51bWVyYXRpb24KKyAgICAqLworICAgIHB1YmxpYyBFbnVtZXJhdGlvbiBlbGVtZW50cygpIHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKSB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gbmV3IEFycmF5RW51bWVyYXRpb24oZGF0YUFycmF5LDAsY291bnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNvcHlJbnRvKE9iamVjdFtdIHRvRmlsbCkgeworICAgICAgICBpZiAoIWlzVmFsaWQpIHZhbGlkYXRlKCk7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZGF0YUFycmF5LDAsdG9GaWxsLDAsdG9GaWxsLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICAgIEZpbmRzIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZWFyY2hWYWx1ZQorICAgICAgICBJZiB0aGVyZSBhcmUgbm9uZSwgcmV0dXJucyAtMQorICAgICovCisgICAgcHVibGljIGludCBpbmRleE9mKE9iamVjdCBzZWFyY2hWYWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghaXNWYWxpZCkgdmFsaWRhdGUoKTsKKyAgICAgICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgaWYgKDAgPD0gY29tcGFyYXRvci5jb21wYXJlKHNlYXJjaFZhbHVlLCBkYXRhQXJyYXlbYXV4U3RhcnRdKSkgeworICAgICAgICAgICAgaW5kZXggKz0gYXV4U3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gdmVyeSBmYXN0LCBjb21wbGV0ZWx5IHVucm9sbGVkIGJpbmFyeSBzZWFyY2gKKyAgICAgICAgLy8gZWFjaCBjYXNlIGRlbGliZXJhdGVseSBmYWxscyB0aHJvdWdoIHRvIHRoZSBuZXh0CisgICAgICAgIHN3aXRjaCAocG93ZXIpIHsKKyAgICAgICAgY2FzZSAzMTogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDQwMDAwMDAwXSkpIGluZGV4IC09IDB4NDAwMDAwMDA7CisgICAgICAgIGNhc2UgMzA6IGlmICgwID4gY29tcGFyYXRvci5jb21wYXJlKHNlYXJjaFZhbHVlLCBkYXRhQXJyYXlbaW5kZXgtMHgyMDAwMDAwMF0pKSBpbmRleCAtPSAweDIwMDAwMDAwOworICAgICAgICBjYXNlIDI5OiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4MTAwMDAwMDBdKSkgaW5kZXggLT0gMHgxMDAwMDAwMDsKKworICAgICAgICBjYXNlIDI4OiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4ODAwMDAwMF0pKSBpbmRleCAtPSAweDgwMDAwMDA7CisgICAgICAgIGNhc2UgMjc6IGlmICgwID4gY29tcGFyYXRvci5jb21wYXJlKHNlYXJjaFZhbHVlLCBkYXRhQXJyYXlbaW5kZXgtMHg0MDAwMDAwXSkpIGluZGV4IC09IDB4NDAwMDAwMDsKKyAgICAgICAgY2FzZSAyNjogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDIwMDAwMDBdKSkgaW5kZXggLT0gMHgyMDAwMDAwOworICAgICAgICBjYXNlIDI1OiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4MTAwMDAwMF0pKSBpbmRleCAtPSAweDEwMDAwMDA7CisKKyAgICAgICAgY2FzZSAyNDogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDgwMDAwMF0pKSBpbmRleCAtPSAweDgwMDAwMDsKKyAgICAgICAgY2FzZSAyMzogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDQwMDAwMF0pKSBpbmRleCAtPSAweDQwMDAwMDsKKyAgICAgICAgY2FzZSAyMjogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDIwMDAwMF0pKSBpbmRleCAtPSAweDIwMDAwMDsKKyAgICAgICAgY2FzZSAyMTogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDEwMDAwMF0pKSBpbmRleCAtPSAweDEwMDAwMDsKKworICAgICAgICBjYXNlIDIwOiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4ODAwMDBdKSkgaW5kZXggLT0gMHg4MDAwMDsKKyAgICAgICAgY2FzZSAxOTogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDQwMDAwXSkpIGluZGV4IC09IDB4NDAwMDA7CisgICAgICAgIGNhc2UgMTg6IGlmICgwID4gY29tcGFyYXRvci5jb21wYXJlKHNlYXJjaFZhbHVlLCBkYXRhQXJyYXlbaW5kZXgtMHgyMDAwMF0pKSBpbmRleCAtPSAweDIwMDAwOworICAgICAgICBjYXNlIDE3OiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4MTAwMDBdKSkgaW5kZXggLT0gMHgxMDAwMDsKKworICAgICAgICBjYXNlIDE2OiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4ODAwMF0pKSBpbmRleCAtPSAweDgwMDA7CisgICAgICAgIGNhc2UgMTU6IGlmICgwID4gY29tcGFyYXRvci5jb21wYXJlKHNlYXJjaFZhbHVlLCBkYXRhQXJyYXlbaW5kZXgtMHg0MDAwXSkpIGluZGV4IC09IDB4NDAwMDsKKyAgICAgICAgY2FzZSAxNDogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDIwMDBdKSkgaW5kZXggLT0gMHgyMDAwOworICAgICAgICBjYXNlIDEzOiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4MTAwMF0pKSBpbmRleCAtPSAweDEwMDA7CisKKyAgICAgICAgY2FzZSAxMjogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDgwMF0pKSBpbmRleCAtPSAweDgwMDsKKyAgICAgICAgY2FzZSAxMTogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDQwMF0pKSBpbmRleCAtPSAweDQwMDsKKyAgICAgICAgY2FzZSAxMDogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDIwMF0pKSBpbmRleCAtPSAweDIwMDsKKyAgICAgICAgY2FzZSAgOTogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDEwMF0pKSBpbmRleCAtPSAweDEwMDsKKworICAgICAgICBjYXNlICA4OiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4ODBdKSkgaW5kZXggLT0gMHg4MDsKKyAgICAgICAgY2FzZSAgNzogaWYgKDAgPiBjb21wYXJhdG9yLmNvbXBhcmUoc2VhcmNoVmFsdWUsIGRhdGFBcnJheVtpbmRleC0weDQwXSkpIGluZGV4IC09IDB4NDA7CisgICAgICAgIGNhc2UgIDY6IGlmICgwID4gY29tcGFyYXRvci5jb21wYXJlKHNlYXJjaFZhbHVlLCBkYXRhQXJyYXlbaW5kZXgtMHgyMF0pKSBpbmRleCAtPSAweDIwOworICAgICAgICBjYXNlICA1OiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4MTBdKSkgaW5kZXggLT0gMHgxMDsKKworICAgICAgICBjYXNlICA0OiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4OF0pKSBpbmRleCAtPSA4OworICAgICAgICBjYXNlICAzOiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4NF0pKSBpbmRleCAtPSA0OworICAgICAgICBjYXNlICAyOiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4Ml0pKSBpbmRleCAtPSAyOworICAgICAgICBjYXNlICAxOiBpZiAoMCA+IGNvbXBhcmF0b3IuY29tcGFyZShzZWFyY2hWYWx1ZSwgZGF0YUFycmF5W2luZGV4LTB4MV0pKSBpbmRleCAtPSAxOworCisgICAgICAgIGNhc2UgIDA6IGlmICgwID4gY29tcGFyYXRvci5jb21wYXJlKHNlYXJjaFZhbHVlLCBkYXRhQXJyYXlbaW5kZXhdKSkgaW5kZXggLT0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorCisgICAgLy8gPT09PT09PT09PT09PT09PT0gcHJpdmF0ZXMgPT09PT09PT09PT09PT09PT09CisgICAgLyoqIE9ubHkgY2FsbCBpZiBjb21wYXJhdG9yIGlzIG51bGwKKyAgICAqLworICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUNvbXBhcmF0b3IoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3QgdHJpYWwgPSBkYXRhQXJyYXlbMF07CisgICAgICAgICAgICBpZiAodHJpYWwgaW5zdGFuY2VvZiBGbG9hdCB8fCB0cmlhbCBpbnN0YW5jZW9mIERvdWJsZSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSBuZXcgRG91YmxlQ29tcGFyYXRvcigpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0cmlhbCBpbnN0YW5jZW9mIEludGVnZXIpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJhdG9yID0gbmV3IEludGVnZXJDb21wYXJhdG9yKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRyaWFsIGluc3RhbmNlb2YgTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgY29tcGFyYXRvciA9IG5ldyBMb25nQ29tcGFyYXRvcigpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0cmlhbCBpbnN0YW5jZW9mIFN0cmluZykgeworICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSBuZXcgU3RyaW5nQ29tcGFyYXRvcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJhdG9yID0gbmV3IENvbXBhcmFibGVDb21wYXJhdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fSAvLyBsZWF2ZSBudWxsCisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKCkgeworICAgICAgICBpZiAoaXNWYWxpZCkgcmV0dXJuOworICAgICAgICAvLyBpZiB0aGUgQ29tcGFyYXRvciBpcyBudWxsLCB0aGVuIHBpY2sgYSByZWFzb25hYmxlIG9uZQorICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBudWxsKSB2YWxpZGF0ZUNvbXBhcmF0b3IoKTsKKworICAgICAgICAvLyBkZXRlcm1pbmUgc2VhcmNoIHBhcmFtZXRlcnMKKworICAgICAgICAvLyBmaW5kIGxlYXN0IHBvd2VyIG9mIDIgZ3JlYXRlciB0aGFuIGNvdW50CisgICAgICAgIGZvciAocG93ZXIgPSBleHAyLmxlbmd0aC0xOyBwb3dlciA+IDAgJiYgY291bnQgPCBleHAyW3Bvd2VyXTsgcG93ZXItLSkge30KKworICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIHN0YXJ0aW5nIHBvaW50CisgICAgICAgIGlmIChleHAyW3Bvd2VyXSAhPSBjb3VudCkgeworICAgICAgICAgICAgYXV4U3RhcnQgPSBjb3VudCAtIGV4cDJbcG93ZXJdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV4U3RhcnQgPSAwOworICAgICAgICB9CisgICAgICAgIHN0YXJ0SW5kZXggPSBleHAyW3Bvd2VyXS0xOworCisgICAgICAgIC8vIHNoZWxsIHNvcnQuIExhdGVyLCBtYWtlIHRoaXMgYSBRdWlja1NvcnQKKyAgICAgICAgaW50IGxvID0gMDsKKyAgICAgICAgaW50IHVwID0gY291bnQtMTsKKyAgICAgICAgZm9yIChpbnQgc3RlcCA9IHVwIC0gbG8gKyAxOyBzdGVwID4gMTspIHsKKyAgICAgICAgICAgIGlmIChzdGVwIDwgNSkKKyAgICAgICAgICAgICAgICBzdGVwID0gMTsKKyAgICAgICAgICAgIGVsc2Ugc3RlcCA9ICg1ICogc3RlcCAtIDEpIC8gMTE7CisgICAgICAgICAgICBmb3IgKGludCBpID0gdXAgLSBzdGVwOyBpID49IGxvOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QgdGVtcCA9IGRhdGFBcnJheVtpXTsKKyAgICAgICAgICAgICAgICBpbnQgajsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSBpICsgc3RlcDsgaiA8PSB1cCAmJiAwID4gY29tcGFyYXRvci5jb21wYXJlKGRhdGFBcnJheVtqXSx0ZW1wKTsgaiArPSBzdGVwKQorICAgICAgICAgICAgICAgICAgICBkYXRhQXJyYXlbai1zdGVwXSA9IGRhdGFBcnJheVtqXTsKKyAgICAgICAgICAgICAgICBkYXRhQXJyYXlbai1zdGVwXSA9IHRlbXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgfQorCisgICAgcHJpdmF0ZSBPYmplY3RbXSBkYXRhQXJyYXkgPSBuZXcgT2JqZWN0WzE2XTsKKyAgICBwcml2YXRlIENvbXBhcmF0b3IgY29tcGFyYXRvcjsKKyAgICBwcml2YXRlIGludCBjb3VudCA9IDA7CisgICAgcHJpdmF0ZSBib29sZWFuIGlzVmFsaWQgPSBmYWxzZTsKKyAgICBwcml2YXRlIGludCBhdXhTdGFydDsKKyAgICBwcml2YXRlIGludCBzdGFydEluZGV4OworICAgIHByaXZhdGUgaW50IHBvd2VyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBleHAyW10gPSB7CisgICAgICAgIDB4MSwgMHgyLCAweDQsIDB4OCwKKyAgICAgICAgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKKyAgICAgICAgMHgxMDAsIDB4MjAwLCAweDQwMCwgMHg4MDAsCisgICAgICAgIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAsIDB4ODAwMCwKKyAgICAgICAgMHgxMDAwMCwgMHgyMDAwMCwgMHg0MDAwMCwgMHg4MDAwMCwKKyAgICAgICAgMHgxMDAwMDAsIDB4MjAwMDAwLCAweDQwMDAwMCwgMHg4MDAwMDAsCisgICAgICAgIDB4MTAwMDAwMCwgMHgyMDAwMDAwLCAweDQwMDAwMDAsIDB4ODAwMDAwMCwKKyAgICAgICAgMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMH07CisKKyAgICAvLyBVdGlsaXR5IENsYXNzZXMKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgTG9uZ0NvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKE9iamVjdCBhLCBPYmplY3QgYikgeworICAgICAgICAgICAgbG9uZyBhYSA9ICgoTnVtYmVyKWEpLmxvbmdWYWx1ZSgpOworICAgICAgICAgICAgbG9uZyBiYiA9ICgoTnVtYmVyKWIpLmxvbmdWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIChhYSA8IGJiID8gLTEgOiBhYSA+IGJiID8gMSA6IDApOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBJbnRlZ2VyQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IgeworICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IGEsIE9iamVjdCBiKSB7CisgICAgICAgICAgICByZXR1cm4gKCgoTnVtYmVyKWEpLmludFZhbHVlKCkgLSAoKE51bWJlciliKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRG91YmxlQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IgeworICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IGEsIE9iamVjdCBiKSB7CisgICAgICAgICAgICBkb3VibGUgYWEgPSAoKE51bWJlcilhKS5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGJiID0gKChOdW1iZXIpYikuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiAoYWEgPCBiYiA/IC0xIDogYWEgPiBiYiA/IDEgOiAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQ29tcGFyYWJsZUNvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKE9iamVjdCBhLCBPYmplY3QgYikgeworICAgICAgICAgICAgcmV0dXJuICgoQ29tcGFyYWJsZSlhKS5jb21wYXJlVG8oYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFN0cmluZ0NvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKE9iamVjdCBhLCBPYmplY3QgYikgeworICAgICAgICAgICAgcmV0dXJuICgoU3RyaW5nKWEpLmNvbXBhcmVUbygoU3RyaW5nKWIpOworICAgICAgICB9OworICAgIH0KKyAgICAvL3t7REVDTEFSRV9DT05UUk9MUworCS8vfX0KK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9TcGFjZVRyYW5zaXRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvU3BhY2VUcmFuc2l0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjBlN2Y0MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvU3BhY2VUcmFuc2l0aW9uLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9TcGFjZVRyYW5zaXRpb24uamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozMiAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFNwYWNlVHJhbnNpdGlvbiBleHRlbmRzIENvbXBsZXhUcmFuc2l0aW9uIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNwYWNlVHJhbnNpdGlvbiBHTE9CQUwgPSBuZXcgU3BhY2VUcmFuc2l0aW9uKFNVQ0NFU1MpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQUNFX0NIQVJTID0gIiBcdCI7CisgICAgCisgICAgcHVibGljIFNwYWNlVHJhbnNpdGlvbihpbnQgc3VjY2VzcykgeworICAgICAgICBzdXBlcihzdWNjZXNzKTsKKyAgICAgICAgICAgIC8ve3tJTklUX0NPTlRST0xTCisgICAgICAgIC8vfX0KKyAgICB9CisgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhpbnQgYykgeworICAgICAgICByZXR1cm4gU1BBQ0VfQ0hBUlMuaW5kZXhPZigoY2hhciljKSA+PSAwOworICAgIH0KKyAgICBwcm90ZWN0ZWQgTGV4LlRyYW5zaXRpb25bXVtdIGdldFN0YXRlcygpIHsKKyAgICAgICAgcmV0dXJuIHN0YXRlczsKKyAgICB9CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGV4LlRyYW5zaXRpb25bXVtdIHN0YXRlcyA9IHsKKyAgICAgICAgeyAvL3N0YXRlIDA6IAorICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKFNQQUNFX0NIQVJTLCBMZXguSUdOT1JFX0NPTlNVTUUsIC0xKSwKKyAgICAgICAgICAgIG5ldyBMZXguUGFyc2VFeGNlcHRpb25UcmFuc2l0aW9uKCJpbGxlZ2FsIHNwYWNlIGNoYXJhY3RlciIpCisgICAgICAgIH0sCisgICAgICAgIHsgLy9zdGF0ZSAxOgorICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKFNVQ0NFU1MpLAorICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKFNQQUNFX0NIQVJTLCBMZXguSUdOT1JFX0NPTlNVTUUsIC0xKSwKKyAgICAgICAgICAgIG5ldyBMZXguRGVmYXVsdFRyYW5zaXRpb24oTGV4LklHTk9SRV9QVVRCQUNLLCBTVUNDRVNTKQorICAgICAgICB9LAorICAgIH07CisgICAgLy97e0RFQ0xBUkVfQ09OVFJPTFMKKyAgICAvL319Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1N5bWJvbFRyYW5zaXRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvU3ltYm9sVHJhbnNpdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwMGNmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL1N5bWJvbFRyYW5zaXRpb24uamF2YQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9TeW1ib2xUcmFuc2l0aW9uLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MzIgJCAKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK3B1YmxpYyBjbGFzcyBTeW1ib2xUcmFuc2l0aW9uIGV4dGVuZHMgQ29tcGxleFRyYW5zaXRpb24geworICAgIHByaXZhdGUgc3RhdGljIFBvc2l4Q2hhck1hcCBtYXBwaW5nID0gbmV3IFBvc2l4Q2hhck1hcCgpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3ltYm9sVHJhbnNpdGlvbiBHTE9CQUwgPSBuZXcgU3ltYm9sVHJhbnNpdGlvbihTVUNDRVNTKTsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q2hhck1hcChQb3NpeENoYXJNYXAgbWFwcGluZ0luKSB7CisgICAgICAgIG1hcHBpbmcgPSBtYXBwaW5nSW47CisgICAgICAgIGlmIChtYXBwaW5nID09IG51bGwpIHsKKyAgICAgICAgICAgIG1hcHBpbmcgPSBuZXcgUG9zaXhDaGFyTWFwKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFBvc2l4Q2hhck1hcCBnZXRDaGFyTWFwKCkgeworICAgICAgICByZXR1cm4gbWFwcGluZzsKKyAgICB9CisKKyAgICBwdWJsaWMgU3ltYm9sVHJhbnNpdGlvbihpbnQgc3VjY2VzcykgeworICAgICAgICBzdXBlcihzdWNjZXNzKTsKKyAgICAgICAgICAgIC8ve3tJTklUX0NPTlRST0xTCisgICAgICAgIC8vfX0KKyAgICB9CisgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhpbnQgYykgeworICAgICAgICByZXR1cm4gJzwnID09IChjaGFyKWM7CisgICAgfQorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVN1Y2Nlc3MoTGV4IHBhcnNlciwgU3RyaW5nQnVmZmVyIG91dHB1dCkgeworICAgICAgICBTdHJpbmcgdGV4dCA9IHBhcnNlci5nZXREYXRhKCk7CisgICAgICAgIFN0cmluZyBtYXBwZWRUZXh0ID0gbWFwcGluZy5tYXBLZXkodGV4dCk7CisgICAgICAgIGlmIChtYXBwZWRUZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQobWFwcGVkVGV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHRleHQpOworICAgICAgICB9CisgICAgfQorICAgIHByb3RlY3RlZCBMZXguVHJhbnNpdGlvbltdW10gZ2V0U3RhdGVzKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKGdldENsYXNzKCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN0YXRlcyA9IG5ldyBMZXguVHJhbnNpdGlvbltdW10geworICAgICAgICAgICAgICAgICAgICB7IC8vc3RhdGUgMDogCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkNoYXJUcmFuc2l0aW9uKCc8JywgTGV4LkFDQ1VNVUxBVEVfQ09OU1VNRSwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5QYXJzZUV4Y2VwdGlvblRyYW5zaXRpb24oImlsbGVnYWwgY2hhcmFjdGVycyBpbiBzeW1ib2wiKQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7IC8vc3RhdGUgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguQ2hhclRyYW5zaXRpb24oJy8nLCBMZXguQUNDVU1VTEFURV9DT05TVU1FLCAtMiksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LkNoYXJUcmFuc2l0aW9uKCc+JywgTGV4LkFDQ1VNVUxBVEVfQ09OU1VNRSwgU1VDQ0VTUyksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LlN0cmluZ1RyYW5zaXRpb24oRU9MVHJhbnNpdGlvbi5FT0xfQ0hBUlMsIExleC5JR05PUkVfUFVUQkFDSywgLTMpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKC0zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguRGVmYXVsdFRyYW5zaXRpb24oTGV4LkFDQ1VNVUxBVEVfQ09OU1VNRSwgLTEpCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsgLy9zdGF0ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExleC5DaGFyVHJhbnNpdGlvbignPicsIExleC5BQ0NVTVVMQVRFX0NPTlNVTUUsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMZXguQ2hhclRyYW5zaXRpb24oJy8nLCBMZXguQUNDVU1VTEFURV9DT05TVU1FLCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LlBhcnNlRXhjZXB0aW9uVHJhbnNpdGlvbigiaWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyIGluIHN5bWJvbCIpCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsgLy9zdGF0ZSAzOiBmYWlsdXJlCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGV4LlBhcnNlRXhjZXB0aW9uVHJhbnNpdGlvbigidW5leHBlY3RlZCBlbmQgb2YgbGluZS9maWxlIikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRlczsKKyAgICB9CisgICAgcHJpdmF0ZSBzdGF0aWMgTGV4LlRyYW5zaXRpb25bXVtdIHN0YXRlczsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBMZXguVHJhbnNpdGlvbltdW10gc3RhdGVzID0ge3sgCisgICAgICAgICAgICAgICAgbmV3IFN5bWJvbFRyYW5zaXRpb24oU1VDQ0VTUyksCisgICAgICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKCksCisgICAgICAgICAgICAgICAgbmV3IExleC5QYXJzZUV4Y2VwdGlvblRyYW5zaXRpb24oImJhZCB0ZXN0IGlucHV0IikKKyAgICAgICAgICAgIH19OworICAgICAgICAgICAgLy9TdHJpbmcgdGV4dCA9ICI8Q0FQSVRBTD48XCI8PjwvLz48ViU+PE42PjxDWVJJTExJQz4iOworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSAiPFU+PFM+PEQ+ICI7CisgICAgICAgICAgICBTdHJpbmdSZWFkZXIgc3IgPSBuZXcgU3RyaW5nUmVhZGVyKHRleHQpOworICAgICAgICAgICAgUHVzaGJhY2tSZWFkZXIgcHIgPSBuZXcgUHVzaGJhY2tSZWFkZXIoc3IpOworICAgICAgICAgICAgTGV4IHBhcnNlciA9IG5ldyBMZXgoc3RhdGVzLCBwcik7CisgICAgICAgICAgICAvL3BhcnNlci5kZWJ1Zyh0cnVlKTsKKyAgICAgICAgICAgIGludCBzID0gcGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgd2hpbGUgKHMgPT0gU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJzZXIuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICBzID0gcGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgICAgICB9CisgICAgfQorICAgIC8ve3tERUNMQVJFX0NPTlRST0xTCisgICAgLy99fQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Ub2tlblRyYW5zaXRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvVG9rZW5UcmFuc2l0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWFhNWMyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9sb2NhbGVjb252ZXJ0ZXIvVG9rZW5UcmFuc2l0aW9uLmphdmEKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9Ub2tlblRyYW5zaXRpb24uamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozMiAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmxvY2FsZWNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworcHVibGljIGNsYXNzIFRva2VuVHJhbnNpdGlvbiBleHRlbmRzIENvbXBsZXhUcmFuc2l0aW9uIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFRva2VuVHJhbnNpdGlvbiBHTE9CQUwgPSBuZXcgVG9rZW5UcmFuc2l0aW9uKFNVQ0NFU1MpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUEFSQVRPUl9DSEFSUyA9ICI7IiArIFNwYWNlVHJhbnNpdGlvbi5TUEFDRV9DSEFSUzsKKyAgICAKKyAgICBwdWJsaWMgVG9rZW5UcmFuc2l0aW9uKGludCBzdWNjZXNzKSB7CisgICAgICAgIHN1cGVyKHN1Y2Nlc3MpOworICAgICAgICAgICAgLy97e0lOSVRfQ09OVFJPTFMKKyAgICAgICAgLy99fQorfQorICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoaW50IGMpIHsKKyAgICAgICAgcmV0dXJuIChjID4gMCkgJiYgCisgICAgICAgICAgICAhRU9MVHJhbnNpdGlvbi5HTE9CQUwuYWNjZXB0cyhjKSAmJiAKKyAgICAgICAgICAgICFTcGFjZVRyYW5zaXRpb24uR0xPQkFMLmFjY2VwdHMoYykgJiYgIAorICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgIChTRVBBUkFUT1JfQ0hBUlMuaW5kZXhPZigoY2hhciljKSA8IDApIHx8CisgICAgICAgICAgICAgICAgU3ltYm9sVHJhbnNpdGlvbi5HTE9CQUwuYWNjZXB0cyhjKSB8fAorICAgICAgICAgICAgICAgIFF1b3RlVHJhbnNpdGlvbi5HTE9CQUwuYWNjZXB0cyhjKSB8fAorICAgICAgICAgICAgICAgIEVzY2FwZVRyYW5zaXRpb24uR0xPQkFMLmFjY2VwdHMoYykKKyAgICAgICAgICAgICk7CisgICAgfQorICAgIHByb3RlY3RlZCBMZXguVHJhbnNpdGlvbltdW10gZ2V0U3RhdGVzKCkgeworICAgICAgICByZXR1cm4gc3RhdGVzOworICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMZXguVHJhbnNpdGlvbltdW10gc3RhdGVzID0geworICAgICAgICB7IC8vc3RhdGUgMDogCisgICAgICAgICAgICBuZXcgU3ltYm9sVHJhbnNpdGlvbigtMSksCisgICAgICAgICAgICBuZXcgUXVvdGVUcmFuc2l0aW9uKC0xKSwgCisgICAgICAgICAgICBuZXcgRXNjYXBlVHJhbnNpdGlvbigtMSksCisgICAgICAgICAgICBuZXcgTGV4LlN0cmluZ1RyYW5zaXRpb24oRU9MVHJhbnNpdGlvbi5FT0xfQ0hBUlMsIExleC5JR05PUkVfUFVUQkFDSywgLTIpLAorICAgICAgICAgICAgbmV3IExleC5TdHJpbmdUcmFuc2l0aW9uKFNFUEFSQVRPUl9DSEFSUywgTGV4LklHTk9SRV9QVVRCQUNLLCAtMyksCisgICAgICAgICAgICBuZXcgTGV4LkVPRlRyYW5zaXRpb24oLTQpLAorICAgICAgICAgICAgbmV3IExleC5EZWZhdWx0VHJhbnNpdGlvbihMZXguQUNDVU1VTEFURV9DT05TVU1FLCAtMSkKKyAgICAgICAgfSwKKyAgICAgICAgeyAvL3N0YXRlIDE6CisgICAgICAgICAgICBuZXcgU3ltYm9sVHJhbnNpdGlvbigtMSksCisgICAgICAgICAgICBuZXcgUXVvdGVUcmFuc2l0aW9uKC0xKSwgCisgICAgICAgICAgICBuZXcgRXNjYXBlVHJhbnNpdGlvbigtMSksCisgICAgICAgICAgICBuZXcgTGV4LlN0cmluZ1RyYW5zaXRpb24oRU9MVHJhbnNpdGlvbi5FT0xfQ0hBUlMsIExleC5JR05PUkVfUFVUQkFDSywgU1VDQ0VTUyksCisgICAgICAgICAgICBuZXcgTGV4LlN0cmluZ1RyYW5zaXRpb24oU0VQQVJBVE9SX0NIQVJTLCBMZXguSUdOT1JFX1BVVEJBQ0ssIFNVQ0NFU1MpLAorICAgICAgICAgICAgbmV3IExleC5FT0ZUcmFuc2l0aW9uKFNVQ0NFU1MpLAorICAgICAgICAgICAgbmV3IExleC5EZWZhdWx0VHJhbnNpdGlvbihMZXguQUNDVU1VTEFURV9DT05TVU1FLCAtMSkKKyAgICAgICAgfSwKKyAgICAgICAgeyAvL3N0YXRlIDI6IGZhaWx1cmUgLSB1bmV4cGVjdGVkIEVPTAorICAgICAgICAgICAgbmV3IExleC5QYXJzZUV4Y2VwdGlvblRyYW5zaXRpb24oInVuZXhwZWN0ZWQgRU9MIGluIHRva2VuIikKKyAgICAgICAgfSwKKyAgICAgICAgeyAvL3N0YXRlIDM6IGZhaWx1cmUKKyAgICAgICAgICAgIG5ldyBMZXguUGFyc2VFeGNlcHRpb25UcmFuc2l0aW9uKCJ1bmV4cGVjdGVkIHNlcGVyYXRvciBjaGFyYWN0ZXIgaW4gdG9rZW4iKQorICAgICAgICB9LAorICAgICAgICB7IC8vc3RhdGUgNDogZmFpbHVyZQorICAgICAgICAgICAgbmV3IExleC5QYXJzZUV4Y2VwdGlvblRyYW5zaXRpb24oInVuZXhwZWN0ZWQgRU9GIGluIHRva2VuIikKKyAgICAgICAgfSwKKyAgICB9OworICAgIC8ve3tERUNMQVJFX0NPTlRST0xTCisgICAgLy99fQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9teUxvY2FsZUVsZW1lbnRzLmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL215TG9jYWxlRWxlbWVudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMGYyZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2xvY2FsZWNvbnZlcnRlci9teUxvY2FsZUVsZW1lbnRzLmphdmEKQEAgLTAsMCArMSw1ODMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvbG9jYWxlY29udmVydGVyL215TG9jYWxlRWxlbWVudHMuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wMSAyMDoyNzoyMSAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKgorICoKKyAqIFRhYmxlIG9mIEphdmEgc3VwcGxpZWQgc3RhbmRhcmQgbG9jYWxlIGVsZW1lbnRzCisgKgorICogYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgamF2YSBMb2NhbGVUb29sIExvY2FsZUVsZW1lbnRzLmphdmEKKyAqCisgKiBEYXRlIENyZWF0ZWQ6IFdlZCBBdWcgMjEgMTU6NDc6NTcgIDE5OTYKKyAqCisgKiAgICAgTG9jYWxlIEVsZW1lbnRzIGFuZCBQYXR0ZXJuczogIGxhc3QgdXBkYXRlIDEwLzIzLzk2CisgKgorICoKKyAqLworCisvLyBXQVJOSU5HIDogdGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSEKKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5sb2NhbGVjb252ZXJ0ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCitwdWJsaWMgY2xhc3MgbXlMb2NhbGVFbGVtZW50cyBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIExpc3RSZXNvdXJjZUJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgeyAiTG9jYWxlU3RyaW5nIiwgImVuX1VTIiB9LCAvLyBsb2NhbGUgaWQgYmFzZWQgb24gaXNvIGNvZGVzCisgICAgICAgICAgICB7ICJMb2NhbGVJRCIsICIwNDA5IiB9LCAvLyBXaW5kb3dzIGlkCisgICAgICAgICAgICB7ICJTaG9ydExhbmd1YWdlIiwgImVuZyIgfSwgLy8gaXNvLTMgYWJicmV2IGxhbmcgbmFtZQorICAgICAgICAgICAgeyAiU2hvcnRDb3VudHJ5IiwgIlVTQSIgfSwgLy8gaXNvLTMgYWJicmV2IGNvdW50cnkgbmFtZQorICAgICAgICAgICAgeyAiTGFuZ3VhZ2VzIiwgLy8gbGFuZ3VhZ2UgbmFtZXMKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW11bXSB7CisgICAgICAgICAgICAgICAgICAgIHsgImFiIiwgIkFia2hhemlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYWEiLCAiQWZhciIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYWYiLCAiQWZyaWthYW5zIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJzcSIsICJBbGJhbmlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYW0iLCAiQW1oYXJpYyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYXIiLCAiQXJhYmljIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJoeSIsICJBcm1lbmlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYXMiLCAiQXNzYW1lc2UiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImF5IiwgIkF5bWFyYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYXoiLCAiQXplcmJhaWphbmkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImJhIiwgIkJhc2hraXIiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImV1IiwgIkJhc3F1ZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYm4iLCAiQmVuZ2FsaSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiZHoiLCAiQmh1dGFuaSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYmgiLCAiQmloYXJpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJiaSIsICJCaXNsYW1hIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJiciIsICJCcmV0b24iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImJnIiwgIkJ1bGdhcmlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibXkiLCAiQnVybWVzZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYmUiLCAiQnllbG9ydXNzaWFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJrbSIsICJDYW1ib2RpYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImNhIiwgIkNhdGFsYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInpoIiwgIkNoaW5lc2UiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImNvIiwgIkNvcnNpY2FuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJociIsICJDcm9hdGlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiY3MiLCAiQ3plY2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImRhIiwgIkRhbmlzaCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmwiLCAiRHV0Y2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImVuIiwgIkVuZ2xpc2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImVvIiwgIkVzcGVyYW50byIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiZXQiLCAiRXN0b25pYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImZvIiwgIkZhZXJvZXNlIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJmaiIsICJGaWppIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJmaSIsICJGaW5uaXNoIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJmciIsICJGcmVuY2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImZ5IiwgIkZyaXNpYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImdsIiwgIkdhbGljaWFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJrYSIsICJHZW9yZ2lhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiZGUiLCAiR2VybWFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJlbCIsICJHcmVlayIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAia2wiLCAiR3JlZW5sYW5kaWMiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImduIiwgIkd1YXJhbmkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImd1IiwgIkd1amFyYXRpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJoYSIsICJIYXVzYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiaXciLCAiSGVicmV3IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJoaSIsICJIaW5kaSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiaHUiLCAiSHVuZ2FyaWFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJpcyIsICJJY2VsYW5kaWMiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImluIiwgIkluZG9uZXNpYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImlhIiwgIkludGVybGluZ3VhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJpZSIsICJJbnRlcmxpbmd1ZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiaWsiLCAiSW51cGlhayIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiZ2EiLCAiSXJpc2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIml0IiwgIkl0YWxpYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImphIiwgIkphcGFuZXNlIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJqdyIsICJKYXZhbmVzZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAia24iLCAiS2FubmFkYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAia3MiLCAiS2FzaG1pcmkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImtrIiwgIkthemFraCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAicnciLCAiS2lueWFyd2FuZGEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImt5IiwgIktpcmdoaXoiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInJuIiwgIktpcnVuZGkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImtvIiwgIktvcmVhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAia3UiLCAiS3VyZGlzaCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibG8iLCAiTGFvdGhpYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImxhIiwgIkxhdGluIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJsdiIsICJMYXR2aWFuIChMZXR0aXNoKSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibG4iLCAiTGluZ2FsYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibHQiLCAiTGl0aHVhbmlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibWsiLCAiTWFjZWRvbmlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibWciLCAiTWFsYWdhc3kiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm1zIiwgIk1hbGF5IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJtbCIsICJNYWxheWFsYW0iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm10IiwgIk1hbHRlc2UiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm1pIiwgIk1hb3JpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJtciIsICJNYXJhdGhpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJtbyIsICJNb2xkYXZpYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm1uIiwgIk1vbmdvbGlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmEiLCAiTmF1cnUiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5lIiwgIk5lcGFsaSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibm8iLCAiTm9yd2VnaWFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJvYyIsICJPY2NpdGFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJvciIsICJPcml5YSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAib20iLCAiT3JvbW8gKEFmYW4pIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJwcyIsICJQYXNodG8gKFB1c2h0bykiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImZhIiwgIlBlcnNpYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInBsIiwgIlBvbGlzaCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAicHQiLCAiUG9ydHVndWVzZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAicGEiLCAiUHVuamFiaSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAicXUiLCAiUXVlY2h1YSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAicm0iLCAiUmhhZXRvLVJvbWFuY2UiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInJvIiwgIlJvbWFuaWFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJydSIsICJSdXNzaWFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJzbSIsICJTYW1vYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInNnIiwgIlNhbmdybyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAic2EiLCAiU2Fuc2tyaXQiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImdkIiwgIlNjb3RzIEdhZWxpYyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAic3IiLCAiU2VyYmlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAic2giLCAiU2VyYm8tQ3JvYXRpYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInN0IiwgIlNlc290aG8iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInRuIiwgIlNldHN3YW5hIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJzbiIsICJTaG9uYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAic2QiLCAiU2luZGhpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJzaSIsICJTaW5naGFsZXNlIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJzcyIsICJTaXN3YXRpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJzayIsICJTbG92YWsiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInNsIiwgIlNsb3ZlbmlhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAic28iLCAiU29tYWxpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJlcyIsICJTcGFuaXNoIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJzdSIsICJTdW5kYW5lc2UiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInN3IiwgIlN3YWhpbGkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInN2IiwgIlN3ZWRpc2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInRsIiwgIlRhZ2Fsb2ciIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInRnIiwgIlRhamlrIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJ0YSIsICJUYW1pbCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAidHQiLCAiVGF0YXIiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInRlIiwgIlRlbHVndSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAidGgiLCAiVGhhaSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiYm8iLCAiVGliZXRhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAidGkiLCAiVGlncmlueWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInRvIiwgIlRvbmdhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJ0cyIsICJUc29uZ2EiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInRyIiwgIlR1cmtpc2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInRrIiwgIlR1cmttZW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgInR3IiwgIlR3aSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAidWsiLCAiVWtyYWluaWFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJ1ciIsICJVcmR1IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJ1eiIsICJVemJlayIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAidmkiLCAiVmlldG5hbWVzZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAidm8iLCAiVm9sYXB1ayIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiY3kiLCAiV2Vsc2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIndvIiwgIldvbG9mIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJ4aCIsICJYaG9zYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiamkiLCAiWWlkZGlzaCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAieW8iLCAiWW9ydWJhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJ6dSIsICJadWx1IiB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgIkNvdW50cmllcyIsIC8vIGNvdW50cnkgbmFtZXMKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW11bXSB7CisgICAgICAgICAgICAgICAgICAgIHsgIkFGIiwgIkFmZ2hhbmlzdGFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJBTCIsICJBbGJhbmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJEWiIsICJBbGdlcmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJBRCIsICJBbmRvcnJhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJBTyIsICJBbmdvbGEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkFJIiwgIkFuZ3VpbGxhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJBUiIsICJBcmdlbnRpbmEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkFNIiwgIkFybWVuaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkFXIiwgIkFydWJhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJBVSIsICJBdXN0cmFsaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkFUIiwgIkF1c3RyaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkFaIiwgIkF6ZXJiYWlqYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJTIiwgIkJhaGFtYXMiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJIIiwgIkJhaHJhaW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJEIiwgIkJhbmdsYWRlc2giIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJCIiwgIkJhcmJhZG9zIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJCWSIsICJCZWxhcnVzIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJCRSIsICJCZWxnaXVtIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJCWiIsICJCZWxpemUiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJKIiwgIkJlbmluIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJCTSIsICJCZXJtdWRhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJCVCIsICJCaHV0YW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJPIiwgIkJvbGl2aWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJBIiwgIkJvc25pYSBhbmQgSGVyemVnb3ZpbmEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJXIiwgIkJvdHN3YW5hIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJCUiIsICJCcmF6aWwiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkJOIiwgIkJydW5laSBEYXJ1c3NhbGFtIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJCRyIsICJCdWxnYXJpYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQkYiLCAiQnVya2luYSBGYXNvIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJCSSIsICJCdXJ1bmRpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJLSCIsICJDYW1ib2RpYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ00iLCAiQ2FtZXJvb24iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkNBIiwgIkNhbmFkYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ1YiLCAiQ2FwZSBWZXJkZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ0YiLCAiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJURCIsICJDaGFkIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJDTCIsICJDaGlsZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ04iLCAiQ2hpbmEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkNPIiwgIkNvbG9tYmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJLTSIsICJDb21vcm9zIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJDRyIsICJDb25nbyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ1IiLCAiQ29zdGEgUmljYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ0kiLCAiQ290ZSBEJ2l2b2lyZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiSFIiLCAiQ3JvYXRpYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ1UiLCAiQ3ViYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ1kiLCAiQ3lwcnVzIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJDWiIsICJDemVjaCBSZXB1YmxpYyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiREsiLCAiRGVubWFyayIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiREoiLCAiRGppYm91dGkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkRNIiwgIkRvbWluaWNhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJETyIsICJEb21pbmljYW4gUmVwdWJsaWMiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlRQIiwgIkVhc3QgVGltb3IiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkVDIiwgIkVjdWFkb3IiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkVHIiwgIkVneXB0IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJTViIsICJFbCBTYWx2YWRvciIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiR1EiLCAiRXF1YXRvcmlhbCBHdWluZWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkVSIiwgIkVyaXRyZWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkVFIiwgIkVzdG9uaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkVUIiwgIkV0aGlvcGlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJGSiIsICJGaWppIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJGSSIsICJGaW5sYW5kIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJGUiIsICJGcmFuY2UiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkdGIiwgIkZyZW5jaCBHdWlhbmEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlBGIiwgIkZyZW5jaCBQb2x5bmVzaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlRGIiwgIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiR0EiLCAiR2Fib24iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkdNIiwgIkdhbWJpYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiR0UiLCAiR2VvcmdpYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiREUiLCAiR2VybWFueSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiR0giLCAiR2hhbmEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkdSIiwgIkdyZWVjZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiR1AiLCAiR3VhZGVsb3VwZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiR1QiLCAiR3VhdGVtYWxhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJHTiIsICJHdWluZWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkdXIiwgIkd1aW5lYS1CaXNzYXUiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkdZIiwgIkd1eWFuYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiSFQiLCAiSGFpdGkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkhOIiwgIkhvbmR1cmFzIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJISyIsICJIb25nIEtvbmciIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkhVIiwgIkh1bmdhcnkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIklTIiwgIkljZWxhbmQiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIklOIiwgIkluZGlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJJRCIsICJJbmRvbmVzaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIklSIiwgIklyYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIklRIiwgIklyYXEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIklFIiwgIklyZWxhbmQiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIklMIiwgIklzcmFlbCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiSVQiLCAiSXRhbHkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkpNIiwgIkphbWFpY2EiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkpQIiwgIkphcGFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJKTyIsICJKb3JkYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIktaIiwgIkthemFraHN0YW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIktFIiwgIktlbnlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJLSSIsICJLaXJpYmF0aSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiS1AiLCAiTm9ydGggS29yZWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIktSIiwgIlNvdXRoIEtvcmVhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJLVyIsICJLdXdhaXQiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIktHIiwgIkt5cmd5enN0YW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkxBIiwgIkxhb3MiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkxWIiwgIkxhdHZpYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTEIiLCAiTGViYW5vbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTFMiLCAiTGVzb3RobyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTFIiLCAiTGliZXJpYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTFkiLCAiTGlieWFuIEFyYWIgSmFtYWhpcml5YSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTEkiLCAiTGllY2h0ZW5zdGVpbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTFQiLCAiTGl0aHVhbmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJMVSIsICJMdXhlbWJvdXJnIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJNSyIsICJNYWNlZG9uaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk1HIiwgIk1hZGFnYXNjYXIiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk1ZIiwgIk1hbGF5c2lhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJNTCIsICJNYWxpIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJNVCIsICJNYWx0YSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTVEiLCAiTWFydGluaXF1ZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTVIiLCAiTWF1cml0YW5pYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTVUiLCAiTWF1cml0aXVzIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJZVCIsICJNYXlvdHRlIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJNWCIsICJNZXhpY28iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkZNIiwgIk1pY3JvbmVzaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk1EIiwgIk1vbGRvdmEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk1DIiwgIk1vbmFjbyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiTU4iLCAiTW9uZ29saWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk1TIiwgIk1vbnRzZXJyYXQiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk1BIiwgIk1vcm9jY28iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk1aIiwgIk1vemFtYmlxdWUiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk1NIiwgIk15YW5tYXIiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk5BIiwgIk5hbWliaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk5QIiwgIk5lcGFsIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJOTCIsICJOZXRoZXJsYW5kcyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQU4iLCAiTmV0aGVybGFuZHMgQW50aWxsZXMiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk5DIiwgIk5ldyBDYWxlZG9uaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk5aIiwgIk5ldyBaZWFsYW5kIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJOSSIsICJOaWNhcmFndWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk5FIiwgIk5pZ2VyIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJORyIsICJOaWdlcmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJOVSIsICJOaXVlIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJOTyIsICJOb3J3YXkiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIk9NIiwgIk9tYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlBLIiwgIlBha2lzdGFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJQQSIsICJQYW5hbWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlBHIiwgIlBhcHVhIE5ldyBHdWluZWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlBZIiwgIlBhcmFndWF5IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJQRSIsICJQZXJ1IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJQSCIsICJQaGlsaXBwaW5lcyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiUEwiLCAiUG9sYW5kIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJQVCIsICJQb3J0dWdhbCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiUFIiLCAiUHVlcnRvIFJpY28iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlFBIiwgIlFhdGFyIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJSTyIsICJSb21hbmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJSVSIsICJSdXNzaWFuIEZlZGVyYXRpb24iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlJXIiwgIlJ3YW5kYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiU0EiLCAiU2F1ZGkgQXJhYmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJTTiIsICJTZW5lZ2FsIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJTUCIsICJTZXJiaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlNDIiwgIlNleWNoZWxsZXMiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlNMIiwgIlNpZXJyYSBMZW9uZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiU0ciLCAiU2luZ2Fwb3JlIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJTSyIsICJTbG92YWtpYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiU0kiLCAiU2xvdmVuaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlNPIiwgIlNvbWFsaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlpBIiwgIlNvdXRoIEFmcmljYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiRVMiLCAiU3BhaW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkxLIiwgIlNyaSBMYW5rYSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiU0QiLCAiU3VkYW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlNSIiwgIlN1cmluYW1lIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJTWiIsICJTd2F6aWxhbmQiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlNFIiwgIlN3ZWRlbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQ0giLCAiU3dpdHplcmxhbmQiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlNZIiwgIlN5cmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJUVyIsICJUYWl3YW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlRKIiwgIlRhamlraXN0YW4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlRaIiwgIlRhbnphbmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJUSCIsICJUaGFpbGFuZCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVEciLCAiVG9nbyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVEsiLCAiVG9rZWxhdSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVE8iLCAiVG9uZ2EiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlRUIiwgIlRyaW5pZGFkIGFuZCBUb2JhZ28iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlROIiwgIlR1bmlzaWEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlRSIiwgIlR1cmtleSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVE0iLCAiVHVya21lbmlzdGFuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJVRyIsICJVZ2FuZGEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIlVBIiwgIlVrcmFpbmUiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIkFFIiwgIlVuaXRlZCBBcmFiIEVtaXJhdGVzIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJHQiIsICJVbml0ZWQgS2luZ2RvbSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVVMiLCAiVW5pdGVkIFN0YXRlcyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVVkiLCAiVXJ1Z3VheSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVVoiLCAiVXpiZWtpc3RhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVlUiLCAiVmFudWF0dSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVkEiLCAiVmF0aWNhbiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVkUiLCAiVmVuZXp1ZWxhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJWTiIsICJWaWV0IE5hbSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVkciLCAiQnJpdGlzaCBWaXJnaW4gSXNsYW5kcyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiVkkiLCAiVS5TLiBWaXJnaW4gSXNsYW5kcyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiRUgiLCAiV2VzdGVybiBTYWhhcmEiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIllFIiwgIlllbWVuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJZVSIsICJZdWdvc2xhdmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJaUiIsICJaYWlyZSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiWk0iLCAiWmFtYmlhIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJaVyIsICJaaW1iYWJ3ZSIgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7ICIlJUVVUk8iLCAiRXVybyIgfSwgLy8gRXVybyB2YXJpYW50IGRpc3BsYXkgbmFtZQorICAgICAgICAgICAgeyAiTG9jYWxlTmFtZVBhdHRlcm5zIiwKKyAgICAgICAgICAgICAgICAvKiBGb3JtYXRzIGZvciB0aGUgZGlzcGxheSBuYW1lIG9mIGEgbG9jYWxlLCBmb3IgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICogaXRlbXMsIGFuZCBmb3IgY29tcG9zaW5nIHR3byBpdGVtcyBpbiBhIGxpc3QgaW50byBvbmUgaXRlbS4KKyAgICAgICAgICAgICAgICAgKiBUaGUgbGlzdCBwYXR0ZXJucyBhcmUgdXNlZCBpbiB0aGUgdmFyaWFudCBuYW1lIGFuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgKiBmdWxsIGRpc3BsYXkgbmFtZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgICAgICAgICAiezAsY2hvaWNlLDAjfDEjezF9fDIjezF9ICh7Mn0pfSIsIC8vIERpc3BsYXkgbmFtZQorICAgICAgICAgICAgICAgICAgICAiezAsY2hvaWNlLDAjfDEjezF9fDIjezF9LHsyfXwzI3sxfSx7Mn0sezN9fSIsIC8vIExpc3QKKyAgICAgICAgICAgICAgICAgICAgInswfSx7MX0iIC8vIExpc3QgY29tcG9zaXRpb24KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyAiTW9udGhOYW1lcyIsIAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICAgICAiSmFudWFyeSIsIC8vIGphbnVhcnkKKyAgICAgICAgICAgICAgICAgICAgIkZlYnJ1YXJ5IiwgLy8gZmVicnVhcnkKKyAgICAgICAgICAgICAgICAgICAgIk1hcmNoIiwgLy8gbWFyY2gKKyAgICAgICAgICAgICAgICAgICAgIkFwcmlsIiwgLy8gYXByaWwKKyAgICAgICAgICAgICAgICAgICAgIk1heSIsIC8vIG1heQorICAgICAgICAgICAgICAgICAgICAiSnVuZSIsIC8vIGp1bmUKKyAgICAgICAgICAgICAgICAgICAgIkp1bHkiLCAvLyBqdWx5CisgICAgICAgICAgICAgICAgICAgICJBdWd1c3QiLCAvLyBhdWd1c3QKKyAgICAgICAgICAgICAgICAgICAgIlNlcHRlbWJlciIsIC8vIHNlcHRlbWJlcgorICAgICAgICAgICAgICAgICAgICAiT2N0b2JlciIsIC8vIG9jdG9iZXIKKyAgICAgICAgICAgICAgICAgICAgIk5vdmVtYmVyIiwgLy8gbm92ZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgIkRlY2VtYmVyIiwgLy8gZGVjZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgIiIgLy8gbW9udGggMTMgaWYgYXBwbGljYWJsZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7ICJNb250aEFiYnJldmlhdGlvbnMiLCAKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgIkphbiIsIC8vIGFiYiBqYW51YXJ5CisgICAgICAgICAgICAgICAgICAgICJGZWIiLCAvLyBhYmIgZmVicnVhcnkKKyAgICAgICAgICAgICAgICAgICAgIk1hciIsIC8vIGFiYiBtYXJjaAorICAgICAgICAgICAgICAgICAgICAiQXByIiwgLy8gYWJiIGFwcmlsCisgICAgICAgICAgICAgICAgICAgICJNYXkiLCAvLyBhYmIgbWF5CisgICAgICAgICAgICAgICAgICAgICJKdW4iLCAvLyBhYmIganVuZQorICAgICAgICAgICAgICAgICAgICAiSnVsIiwgLy8gYWJiIGp1bHkKKyAgICAgICAgICAgICAgICAgICAgIkF1ZyIsIC8vIGFiYiBhdWd1c3QKKyAgICAgICAgICAgICAgICAgICAgIlNlcCIsIC8vIGFiYiBzZXB0ZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgIk9jdCIsIC8vIGFiYiBvY3RvYmVyCisgICAgICAgICAgICAgICAgICAgICJOb3YiLCAvLyBhYmIgbm92ZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgIkRlYyIsIC8vIGFiYiBkZWNlbWJlcgorICAgICAgICAgICAgICAgICAgICAiIiAvLyBhYmIgbW9udGggMTMgaWYgYXBwbGljYWJsZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7ICJEYXlOYW1lcyIsIAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICAgICAiU3VuZGF5IiwgLy8gU3VuZGF5CisgICAgICAgICAgICAgICAgICAgICJNb25kYXkiLCAvLyBNb25kYXkKKyAgICAgICAgICAgICAgICAgICAgIlR1ZXNkYXkiLCAvLyBUdWVzZGF5CisgICAgICAgICAgICAgICAgICAgICJXZWRuZXNkYXkiLCAvLyBXZWRuZXNkYXkKKyAgICAgICAgICAgICAgICAgICAgIlRodXJzZGF5IiwgLy8gVGh1cnNkYXkKKyAgICAgICAgICAgICAgICAgICAgIkZyaWRheSIsIC8vIEZyaWRheQorICAgICAgICAgICAgICAgICAgICAiU2F0dXJkYXkiIC8vIFNhdHVyZGF5CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgIkRheUFiYnJldmlhdGlvbnMiLCAKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgIlN1biIsIC8vIGFiYiBTdW5kYXkKKyAgICAgICAgICAgICAgICAgICAgIk1vbiIsIC8vIGFiYiBNb25kYXkKKyAgICAgICAgICAgICAgICAgICAgIlR1ZSIsIC8vIGFiYiBUdWVzZGF5CisgICAgICAgICAgICAgICAgICAgICJXZWQiLCAvLyBhYmIgV2VkbmVzZGF5CisgICAgICAgICAgICAgICAgICAgICJUaHUiLCAvLyBhYmIgVGh1cnNkYXkKKyAgICAgICAgICAgICAgICAgICAgIkZyaSIsIC8vIGFiYiBGcmlkYXkKKyAgICAgICAgICAgICAgICAgICAgIlNhdCIgLy8gYWJiIFNhdHVyZGF5CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgIkFtUG1NYXJrZXJzIiwgCisgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgCisgICAgICAgICAgICAgICAgICAgICJBTSIsIC8vIGFtIG1hcmtlcgorICAgICAgICAgICAgICAgICAgICAiUE0iIC8vIHBtIG1hcmtlcgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7ICJFcmFzIiwgCisgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgLy8gZXJhIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgIkJDIiwgCisgICAgICAgICAgICAgICAgICAgICJBRCIgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgIk51bWJlclBhdHRlcm5zIiwgCisgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgCisgICAgICAgICAgICAgICAgICAgICIjLCMjMC4jIyM7LSMsIyMwLiMjIyIsIC8vIGRlY2ltYWwgcGF0dGVybgorICAgICAgICAgICAgICAgICAgICAiJCMsIyMwLjAwOygkIywjIzAuMDApIiwgLy8gY3VycmVuY3kgcGF0dGVybgorICAgICAgICAgICAgICAgICAgICAiIywjIzAlIiAvLyBwZXJjZW50IHBhdHRlcm4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyAiTnVtYmVyRWxlbWVudHMiLCAKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgIi4iLCAvLyBkZWNpbWFsIHNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICAiLCIsIC8vIGdyb3VwICh0aG91c2FuZHMpIHNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICAiOyIsIC8vIGxpc3Qgc2VwYXJhdG9yCisgICAgICAgICAgICAgICAgICAgICIlIiwgLy8gcGVyY2VudCBzaWduCisgICAgICAgICAgICAgICAgICAgICIwIiwgLy8gbmF0aXZlIDAgZGlnaXQKKyAgICAgICAgICAgICAgICAgICAgIiMiLCAvLyBwYXR0ZXJuIGRpZ2l0CisgICAgICAgICAgICAgICAgICAgICItIiwgLy8gbWludXMgc2lnbgorICAgICAgICAgICAgICAgICAgICAiRSIsIC8vIGV4cG9uZW50aWFsCisgICAgICAgICAgICAgICAgICAgICJcdTIwMzAiLCAvLyBwZXIgbWlsbGUKKyAgICAgICAgICAgICAgICAgICAgIlx1MjIxZSIsIC8vIGluZmluaXR5CisgICAgICAgICAgICAgICAgICAgICJcdWZmZmQiIC8vIE5hTgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7ICJDdXJyZW5jeUVsZW1lbnRzIiwgCisgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgCisgICAgICAgICAgICAgICAgICAgICIkIiwgLy8gbG9jYWwgY3VycmVuY3kgc3ltYm9sCisgICAgICAgICAgICAgICAgICAgICJVU0QiLCAvLyBpbnRsIGN1cnJlbmN5IHN5bWJvbAorICAgICAgICAgICAgICAgICAgICAiLiIgLy8gbW9uZXRhcnkgZGVjaW1hbCBzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyAiRGF0ZVRpbWVQYXR0ZXJucyIsIAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICAgICAiaDptbTpzcyAnbycnJydjbG9jaycgYSB6IiwgLy8gZnVsbCB0aW1lIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgImg6bW06c3MgYSB6IiwgLy8gbG9uZyB0aW1lIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgImg6bW06c3MgYSIsIC8vIG1lZGl1bSB0aW1lIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgImg6bW0gYSIsIC8vIHNob3J0IHRpbWUgcGF0dGVybgorICAgICAgICAgICAgICAgICAgICAiRUVFRSwgTU1NTSBkLCB5eXl5IiwgLy8gZnVsbCBkYXRlIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgIk1NTU0gZCwgeXl5eSIsIC8vIGxvbmcgZGF0ZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgICJkZC1NTU0teXkiLCAvLyBtZWRpdW0gZGF0ZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgICJNL2QveXkiLCAvLyBzaG9ydCBkYXRlIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgInsxfSB7MH0iIC8vIGRhdGUtdGltZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgIkRhdGVUaW1lRWxlbWVudHMiLCAKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAgICAgIjEiLCAvLyBmaXJzdCBkYXkgb2Ygd2VlaworICAgICAgICAgICAgICAgICAgICAiMSIgLy8gbWluIGRheXMgaW4gZmlyc3Qgd2VlaworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7ICJDb2xsYXRpb25FbGVtZW50cyIsbmV3IFN0cmluZ1tdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IlZlcnNpb24iLCIxLjAifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiT3ZlcmlkZSIsImZhbHNlIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IlNlcXVlbmNlIiwiIn0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgIk1lYXN1cmVtZW50IiAsIiJ9LAorICAgICAgICAgICAgeyAiQ291bnRyeU51bWJlciIgLCAiIn0sCisgICAgICAgICAgICB7ICJDb3VudHJ5SVNCTk51bWJlciIgLCAiIn0sCisgICAgICAgICAgICB7ICJMYW5ndWFnZUxpYnJhcnlVc2UiICwgIiJ9LAorICAgICAgICAgICAgeyAiUGFwZXJTaXplIiwgbmV3IFN0cmluZ1tdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJIaWVnaHQiLCIifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IldpZHRoIiwiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJVbml0cyIsICIifQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAKKyAgICAgICAgICAgIHsgIk1lc3NhZ2VzIiAsIG5ldyBTdHJpbmdbXVtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ5ZXNFeHByZXNzaW9uIiwiIn0sIC8qIHllcyBleHByZXNzaW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibm9FeHByZXNzaW9uIiwiIn0gIC8qIG5vIGV4cHJlc3Npb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyAiQWRkcmVzc0Zvcm1hdCIsIG5ldyBTdHJpbmdbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiUG9zdGFsRm9ybWF0IiwiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHsiTmFtZUZvcm1hdCIsIG5ldyBTdHJpbmdbXVtdeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJeyJOYW1lUGF0dGVybiIsIiJ9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJHZW5lcmFsU2FsdXRhaW9uIiwgIiJ9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJTaG9ydFNhbHV0YXRpb25NciIsICIifSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiU2hvcnRTYWx1dGF0aW9uTWlzcyIsIiJ9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJTaG9ydFNhbHV0YXRpb25NcnMiLCIifSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTG9uZ1NhbHV0YXRpb25NciIsIiJ9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJMb25nU2FsdXRhdGlvbk1pc3MiLCIifSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTG9uZ1NhbHV0YXRpb25NcnMiLCIifQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIAorICAgICAgICAgICAgeyAiSWRlbnRpZmljYXRpb24iLCBuZXcgU3RyaW5nW11bXXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJUaXRsZSIsIiJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IlNvdXJjZSIsIiJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IkFkZHJlc3MiLCIifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJDb250YWN0IiwiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiRW1haWwiLCIifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJUZWxlcGhvbmUiLCAiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiRmF4IiwgIiJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ikxhbmd1YWdlIiwiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiVGVycml0b3J5IiwiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiQXVkaWVuY2UiLCAiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiQXBwbGljYXRpb24iLCAiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiQWJicmV2aWF0aW9uIiwgIiJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IlJldmlzaW9uIiwgIiJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IkRhdGUiLCIifQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyAiVGVsZXBob25lRm9ybWF0IiwgbmV3IFN0cmluZ1tdW117CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiSW50ZXJuYXRpb25hbEZvcm1hdCIsIiJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IkRvbWVzdGljRm9ybWF0IiwiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiSW50ZXJuYXRpb25hbERpYWxDb2RlIiwiIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiSW50ZXJuYXRpb25hbFByZWZpeCIsIiJ9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9ICAgIAorICAgICAgICB9OworICAgIH0KK30KKyAgICAgICAgICAgIAorICAgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9yYmJpL0J1aWxkRGljdGlvbmFyeUZpbGUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9yYmJpL0J1aWxkRGljdGlvbmFyeUZpbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40M2M1NDFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3JiYmkvQnVpbGREaWN0aW9uYXJ5RmlsZS5qYXZhCkBAIC0wLDAgKzEsODc3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvcmJiaS9CdWlsZERpY3Rpb25hcnlGaWxlLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMjUgMjI6NDM6NTkgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5yYmJpOworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5Db21wYWN0Qnl0ZUFycmF5OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVW5pY29kZVNldDsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCitwdWJsaWMgY2xhc3MgQnVpbGREaWN0aW9uYXJ5RmlsZSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKKyAgICAgICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gYXJnc1swXTsKKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gIiI7CisgICAgICAgIFN0cmluZyBvdXRwdXRGaWxlID0gIiI7CisgICAgICAgIFN0cmluZyBsaXN0aW5nRmlsZSA9ICIiOworCisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAyKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBhcmdzWzFdOworCisgICAgICAgIGlmKGFyZ3MubGVuZ3RoID49IDMpCisgICAgICAgICAgICBvdXRwdXRGaWxlID0gYXJnc1syXTsKKworICAgICAgICBpZiAoYXJncy5sZW5ndGggPj0gNCkKKyAgICAgICAgICAgIGxpc3RpbmdGaWxlID0gYXJnc1szXTsKKworICAgICAgICBCdWlsZERpY3Rpb25hcnlGaWxlIGRpY3Rpb25hcnkgPSBuZXcgQnVpbGREaWN0aW9uYXJ5RmlsZSgpOworICAgICAgICBkaWN0aW9uYXJ5LmJ1aWxkKGZpbGVuYW1lLCBlbmNvZGluZyk7CisKKyAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPSBudWxsOworICAgICAgICBpZiAob3V0cHV0RmlsZS5sZW5ndGgoKSAhPSAwKSB7CisgICAgICAgICAgICBvdXQgPSBuZXcgRGF0YU91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRwdXRGaWxlKSk7CisgICAgICAgICAgICBkaWN0aW9uYXJ5LndyaXRlRGljdGlvbmFyeUZpbGUob3V0KTsKKyAgICAgICAgfQorCisgICAgICAgIFByaW50V3JpdGVyIGxpc3RpbmcgPSBudWxsOworICAgICAgICBpZiAobGlzdGluZ0ZpbGUubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgbGlzdGluZyA9IG5ldyBQcmludFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGxpc3RpbmdGaWxlKSwgIlVuaWNvZGVMaXR0bGUiKSk7CisgICAgICAgICAgICBkaWN0aW9uYXJ5LnByaW50V29yZExpc3QoIiIsIDAsIGxpc3RpbmcpOworICAgICAgICAgICAgbGlzdGluZy5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIEJ1aWxkRGljdGlvbmFyeUZpbGUoKSB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYnVpbGQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcpCisgICAgICAgICAgICB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaWxlID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlbmFtZSk7CisgICAgICAgIElucHV0U3RyZWFtUmVhZGVyIGluOworICAgICAgICBpZiAoZW5jb2RpbmcubGVuZ3RoKCkgPT0gMCkKKyAgICAgICAgICAgIGluID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGZpbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbiA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihmaWxlLCBlbmNvZGluZyk7CisKKyAgICAgICAgYnVpbGRDb2x1bW5NYXAoaW4pOworCisgICAgICAgIGZpbGUgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGVuY29kaW5nLmxlbmd0aCgpID09IDApCisgICAgICAgICAgICBpbiA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihmaWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW4gPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZmlsZSwgZW5jb2RpbmcpOworCisgICAgICAgIGJ1aWxkU3RhdGVUYWJsZShpbik7CisvL3ByaW50VGFibGUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBidWlsZENvbHVtbk1hcChJbnB1dFN0cmVhbVJlYWRlciBpbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKK1N5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRpbmcgY29sdW1uIG1hcC4uLiIpOworICAgICAgICBVbmljb2RlU2V0IGNoYXJzSW5GaWxlID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgaW50IGMgPSBpbi5yZWFkKCk7CitpbnQgdG90YWxDaGFycyA9IDA7CisgICAgICAgIHdoaWxlIChjID49IDApIHsKKysrdG90YWxDaGFyczsgaWYgKHRvdGFsQ2hhcnMgPiAwICYmIHRvdGFsQ2hhcnMgJSA1MDAwID09IDApIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCAiICsgdG90YWxDaGFycyArICIgY2hhcmFjdGVycy4uLiIpOworICAgICAgICAgICAgaWYgKGMgPiAnICcpCisgICAgICAgICAgICAgICAgY2hhcnNJbkZpbGUuYWRkKChjaGFyKWMpOworICAgICAgICAgICAgYyA9IGluLnJlYWQoKTsKKyAgICAgICAgfQorLy8gICAgICAgIFRlc3QuZGVidWdQcmludGxuKGNoYXJzSW5GaWxlLnRvU3RyaW5nKCkpOworCisgICAgICAgIFN0cmluZ0J1ZmZlciB0ZW1wUmV2ZXJzZU1hcCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgdGVtcFJldmVyc2VNYXAuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgY29sdW1uTWFwID0gbmV3IENvbXBhY3RCeXRlQXJyYXkoKTsKKyAgICAgICAgaW50IG4gPSBjaGFyc0luRmlsZS5nZXRSYW5nZUNvdW50KCk7CisgICAgICAgIGJ5dGUgcCA9IDE7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxuOyArK2kpIHsKKyAgICAgICAgICAgIGNoYXIgc3RhcnQgPSAoY2hhcikgY2hhcnNJbkZpbGUuZ2V0UmFuZ2VTdGFydChpKTsKKyAgICAgICAgICAgIGNoYXIgZW5kID0gKGNoYXIpIGNoYXJzSW5GaWxlLmdldFJhbmdlRW5kKGkpOworICAgICAgICAgICAgZm9yIChjaGFyIGNoID0gc3RhcnQ7IGNoIDw9IGVuZDsgY2grKykgeworICAgICAgICAgICAgICAgIGlmIChjb2x1bW5NYXAuZWxlbWVudEF0KENoYXJhY3Rlci50b0xvd2VyQ2FzZShjaCkpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTWFwLnNldEVsZW1lbnRBdChDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2gpLCBDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHApOworICAgICAgICAgICAgICAgICAgICBjb2x1bW5NYXAuc2V0RWxlbWVudEF0KENoYXJhY3Rlci50b0xvd2VyQ2FzZShjaCksIENoYXJhY3Rlci50b0xvd2VyQ2FzZShjaCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCk7CisgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFJldmVyc2VNYXAuYXBwZW5kKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKy8vU3lzdGVtLm91dC5wcmludGxuKCJDb21wYWN0aW5nLi4uIik7CisgICAgICAgIGNvbHVtbk1hcC5jb21wYWN0KCk7CisKKy8vU3lzdGVtLm91dC5wcmludGxuKHRlbXBSZXZlcnNlTWFwLnRvU3RyaW5nKCkpOworICAgICAgICByZXZlcnNlQ29sdW1uTWFwID0gbmV3IGNoYXJbcF07CisgICAgICAgIFV0aWxpdHkuZ2V0Q2hhcnModGVtcFJldmVyc2VNYXAsIDAsIHAsIHJldmVyc2VDb2x1bW5NYXAsIDApOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidG90YWwgY29sdW1ucyA9ICIgKyBwKTsKKyAgICAgICAgbnVtQ29scyA9IHA7CisgICAgICAgIG51bUNvbEdyb3VwcyA9IChudW1Db2xzID4+IDUpICsgMTsKKworLyoKK3Nob3J0W10gaW5kZXggPSBjb2x1bW5NYXAuZ2V0SW5kZXhBcnJheSgpOworU3lzdGVtLm91dC5wcmludGxuKCJJbmRleDoiKTsKK2ZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXgubGVuZ3RoOyBpKyspIHsKK2lmIChpICUgMTYgPT0gMCkgeworU3lzdGVtLm91dC5wcmludGxuKCk7CitTeXN0ZW0ub3V0LnByaW50KCIgICAgIiArIEludGVnZXIudG9IZXhTdHJpbmcoaSAqIDEyOCkgKyAiOiIpOworfQorU3lzdGVtLm91dC5wcmludCgiXHQiICsgSW50ZWdlci50b0hleFN0cmluZyhpbmRleFtpXSkpOworfQorU3lzdGVtLm91dC5wcmludGxuKCk7CitieXRlW10gZGF0YSA9IGNvbHVtbk1hcC5nZXRTdHJpbmdBcnJheSgpOworU3lzdGVtLm91dC5wcmludCgiVmFsdWVzOiIpOworZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CitpZiAoaSAlIDE2ID09IDApIHsKK1N5c3RlbS5vdXQucHJpbnRsbigpOworU3lzdGVtLm91dC5wcmludCgiICAgICIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGkpICsgIjoiKTsKK30KK2lmIChkYXRhW2ldID09IDApCitTeXN0ZW0ub3V0LnByaW50KCJcdC4iKTsKK2Vsc2UKK1N5c3RlbS5vdXQucHJpbnQoIlx0IiArIEludGVnZXIudG9TdHJpbmcoZGF0YVtpXSkpOworfQorU3lzdGVtLm91dC5wcmludGxuKCk7CisqLworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGJ1aWxkU3RhdGVUYWJsZShJbnB1dFN0cmVhbVJlYWRlciBpbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgVmVjdG9yIHRlbXBUYWJsZSA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgdGVtcFRhYmxlLmFkZEVsZW1lbnQobmV3IGludFtudW1Db2xzICsgMV0pOworICAgICAgICBpbnQgc3RhdGUgPSAwOworCisgICAgICAgIGludCBjID0gaW4ucmVhZCgpOworICAgICAgICBpbnRbXSByb3cgPSBudWxsOworICAgICAgICBpbnQgY2hhcnNJbldvcmQgPSAwOworICAgICAgICB3aGlsZSAoYyA+PSAwKSB7CisgICAgICAgICAgICBjaGFyc0luV29yZCsrOworICAgICAgICAgICAgc2hvcnQgY29sdW1uID0gY29sdW1uTWFwLmVsZW1lbnRBdCgoY2hhciljKTsKKworICAgICAgICAgICAgcm93ID0gKGludFtdKSh0ZW1wVGFibGUuZWxlbWVudEF0KHN0YXRlKSk7CisgICAgICAgICAgICBpZiAoY29sdW1uICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbl0gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uXSA9IHRlbXBUYWJsZS5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgICsrcm93W251bUNvbHNdOworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICh0ZW1wVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFRhYmxlLmFkZEVsZW1lbnQobmV3IGludFtudW1Db2xzICsgMV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcm93W2NvbHVtbl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHJvd1swXSAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICByb3dbMF0gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgKytyb3dbbnVtQ29sc107CisgICAgICAgICAgICAgICAgICAgIHVuaXF1ZVdvcmRzKys7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsVW5pcXVlV29yZENoYXJzICs9IGNoYXJzSW5Xb3JkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0b3RhbFdvcmRzKys7CitpZiAodG90YWxXb3JkcyAlIDUwMDAgPT0gMCkgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkICIgKyB0b3RhbFdvcmRzICsgIiB3b3JkcywgIiArIHRlbXBUYWJsZS5zaXplKCkgKyAiIHJvd3MuLi4iKTsKKyAgICAgICAgICAgICAgICBjaGFyc0luV29yZCA9IDA7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYyA9IGluLnJlYWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGUgIT0gMCkgeworICAgICAgICAgICAgcm93ID0gKGludFtdKSh0ZW1wVGFibGUuZWxlbWVudEF0KHN0YXRlKSk7CisgICAgICAgICAgICBpZiAocm93WzBdICE9IC0xKSB7CisgICAgICAgICAgICAgICAgcm93WzBdID0gLTE7CisgICAgICAgICAgICAgICAgdW5pcXVlV29yZHMrKzsKKyAgICAgICAgICAgICAgICB0b3RhbFVuaXF1ZVdvcmRDaGFycyArPSBjaGFyc0luV29yZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRvdGFsV29yZHMrKzsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXByZXNzKHRlbXBUYWJsZSk7CisKKyAgICAgICAgdGFibGUgPSBuZXcgc2hvcnRbbnVtQ29scyAqIHRlbXBUYWJsZS5zaXplKCldOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBUYWJsZS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgcm93ID0gKGludFtdKXRlbXBUYWJsZS5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bUNvbHM7IGorKykKKyAgICAgICAgICAgICAgICB0YWJsZVtpICogbnVtQ29scyArIGpdID0gKHNob3J0KXJvd1tqXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjb21wcmVzcyhWZWN0b3IgdGVtcFRhYmxlKSB7CitTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjb21wcmVzc2lvbjoiKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiICBOdW1iZXIgb2Ygcm93cyA9ICIgKyB0ZW1wVGFibGUuc2l6ZSgpKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiICBOdW1iZXIgb2YgY29sdW1ucyA9ICIgKyBudW1Db2xzKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiICBOdW1iZXIgb2YgY2VsbHMgPSAiICsgdGVtcFRhYmxlLnNpemUoKSAqIG51bUNvbHMpOworICAgICAgICBkZWxldGVEdXBsaWNhdGVSb3dzKHRlbXBUYWJsZSk7CitTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIHJlbW92aW5nIGR1cGxpY2F0ZSByb3dzOiIpOworU3lzdGVtLm91dC5wcmludGxuKCIgIE51bWJlciBvZiByb3dzID0gIiArIHRlbXBUYWJsZS5zaXplKCkpOworU3lzdGVtLm91dC5wcmludGxuKCIgIE51bWJlciBvZiBjb2x1bW5zID0gIiArIG51bUNvbHMpOworU3lzdGVtLm91dC5wcmludGxuKCIgIE51bWJlciBvZiBjZWxscyA9ICIgKyB0ZW1wVGFibGUuc2l6ZSgpICogbnVtQ29scyk7CisgICAgICAgIHN0YWNrUm93cyh0ZW1wVGFibGUpOworaWYgKHRlbXBUYWJsZS5zaXplKCkgPiAzMjc2NykgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVG9vIG1hbnkgcm93cyBpbiB0YWJsZSEiKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZG91YmxpbmcgdXAgb24gcm93czoiKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiICBOdW1iZXIgb2Ygcm93cyA9ICIgKyB0ZW1wVGFibGUuc2l6ZSgpKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiICBOdW1iZXIgb2YgY29sdW1ucyA9ICIgKyBudW1Db2xzKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiICBOdW1iZXIgb2YgY2VsbHMgPSAiICsgdGVtcFRhYmxlLnNpemUoKSAqIG51bUNvbHMpOworICAgIH0KKworLyoKK2V4cGVyaW1lbnRhbC4uLgorICAgIHByaXZhdGUgdm9pZCBkZWxldGVEdXBsaWNhdGVSb3dzKFZlY3RvciB0ZW1wVGFibGUpIHsKKyAgICAgICAgaW50W10gcm93TnVtTWFwID0gbmV3IGludFt0ZW1wVGFibGUuc2l6ZSgpXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dOdW1NYXAubGVuZ3RoOyBpKyspCisgICAgICAgICAgICByb3dOdW1NYXBbaV0gPSBpOworCisgICAgICAgIGludCBuZXh0Q2xhc3MgPSBudW1Db2xzOworICAgICAgICBpbnQgY3VycmVudENsYXNzOworICAgICAgICBpbnQgbGFzdENsYXNzOworICAgICAgICBib29sZWFuIHNwbGl0OworICAgICAgICBpbnRbXSByb3cxLCByb3cyLCB0ZW1wUm93OworICAgICAgICBpbnQgdGVtcENhdDsKKworICAgICAgICBkbyB7CitTeXN0ZW0ub3V0LnByaW50bG4oIk1ha2luZyBhIHBhc3MgKCIgKyBuZXh0Q2xhc3MgKyAiIGNsYXNzZXMpLi4uIik7CisgICAgICAgICAgICBjdXJyZW50Q2xhc3MgPSAwOworICAgICAgICAgICAgbGFzdENsYXNzID0gbmV4dENsYXNzOworICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDbGFzcyA8IG5leHRDbGFzcykgeworU3lzdGVtLm91dC5wcmludGxuKCIgICBjdXJyZW50Q2xhc3MgPSAiICsgY3VycmVudENsYXNzKTsKKyAgICAgICAgICAgICAgICBzcGxpdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJvdzEgPSByb3cyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBUYWJsZS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wUm93ID0gKGludFtdKXRlbXBUYWJsZS5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wUm93W251bUNvbHNdID09IGN1cnJlbnRDbGFzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdzEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzEgPSAoaW50W10pdGVtcFRhYmxlLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzIgPSAoaW50W10pdGVtcFRhYmxlLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bUNvbHM7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJvdzFbal0gPT0gMCkgIT0gKHJvdzJbal0gPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJvdzFbal0gPT0gLTEpICE9IChyb3cyW2pdID09IC0xKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93MltudW1Db2xzXSA9IG5leHRDbGFzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJvdzFbal0gIT0gMCAmJiByb3cyW2pdICE9IDAgJiYgcm93MVtqXSAhPSAtMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcm93MltqXSAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFJvdyA9IChpbnRbXSl0ZW1wVGFibGUuZWxlbWVudEF0KHJvdzFbal0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENhdCA9IHRlbXBSb3dbbnVtQ29sc107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wUm93ID0gKGludFtdKXRlbXBUYWJsZS5lbGVtZW50QXQocm93MltqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcENhdCAhPSB0ZW1wUm93W251bUNvbHNdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93MltudW1Db2xzXSA9IG5leHRDbGFzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNwbGl0KQorICAgICAgICAgICAgICAgICAgICArK25leHRDbGFzczsKKyAgICAgICAgICAgICAgICArK2N1cnJlbnRDbGFzczsKKy8vU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGxhc3RDbGFzcyAhPSBuZXh0Q2xhc3MpOworCisgICAgICAgIGludFtdIHJlcHJlc2VudGF0aXZlcyA9IG5ldyBpbnRbbmV4dENsYXNzXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCB0ZW1wVGFibGUuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIHRlbXBSb3cgPSAoaW50W10pdGVtcFRhYmxlLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGlmIChyZXByZXNlbnRhdGl2ZXNbdGVtcFJvd1tudW1Db2xzXV0gPT0gMCkKKyAgICAgICAgICAgICAgICByZXByZXNlbnRhdGl2ZXNbdGVtcFJvd1tudW1Db2xzXV0gPSBpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJvd051bU1hcFtpXSA9IHJlcHJlc2VudGF0aXZlc1t0ZW1wUm93W251bUNvbHNdXTsKKyAgICAgICAgfQorU3lzdGVtLm91dC5wcmludGxuKCJSZW51bWJlcmluZy4uLiIpOworCisgICAgICAgIC8vIHJlbnVtYmVyIGFsbCByZW1haW5pbmcgcm93cworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd051bU1hcC5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGlmIChyb3dOdW1NYXBbaV0gIT0gaSkKKyAgICAgICAgICAgICAgICB0ZW1wVGFibGUuc2V0RWxlbWVudEF0KG51bGwsIGkpOworICAgICAgICBpbnQgbmV3Um93TnVtID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dOdW1NYXAubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBpZiAodGVtcFRhYmxlLmVsZW1lbnRBdChpKSAhPSBudWxsKQorICAgICAgICAgICAgICAgIHJvd051bU1hcFtpXSA9IG5ld1Jvd051bSsrOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd051bU1hcC5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGlmICh0ZW1wVGFibGUuZWxlbWVudEF0KGkpID09IG51bGwpCisgICAgICAgICAgICAgICAgcm93TnVtTWFwW2ldID0gcm93TnVtTWFwW3Jvd051bU1hcFtpXV07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IHRlbXBUYWJsZS5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgdGVtcFJvdyA9IChpbnRbXSl0ZW1wVGFibGUuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgaWYgKHRlbXBSb3cgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0ZW1wVGFibGUucmVtb3ZlRWxlbWVudEF0KGkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1Db2xzOyBqKyspCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wUm93W2pdICE9IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFJvd1tqXSA9IHJvd051bU1hcFtqXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorLy9mb3IgKGludCBpID0gMTsgaSA8IHJvd051bU1hcC5sZW5ndGg7IGkrKykgcm93TnVtTWFwW2ldID0gaTsgaW50IG5ld1Jvd051bSA9IHJvd051bU1hcC5sZW5ndGg7CisgICAgfQorKi8KKworICAgIHByaXZhdGUgdm9pZCBkZWxldGVEdXBsaWNhdGVSb3dzKFZlY3RvciB0ZW1wVGFibGUpIHsKKyAgICAgICAgVmVjdG9yIHdvcmsgPSAoVmVjdG9yKSh0ZW1wVGFibGUuY2xvbmUoKSk7CisgICAgICAgIGJvb2xlYW4gZGlkRGVsZXRlUm93ID0gdHJ1ZTsKKworICAgICAgICBWZWN0b3IgdGVtcE1hcHBpbmcgPSBuZXcgVmVjdG9yKHdvcmsuc2l6ZSgpKTsKKyAgICAgICAgaW50W10gbWFwcGluZyA9IG5ldyBpbnRbd29yay5zaXplKCldOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcHBpbmcubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIG1hcHBpbmdbaV0gPSBpOworICAgICAgICAgICAgdGVtcE1hcHBpbmcuYWRkRWxlbWVudChuZXcgSW50ZWdlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbltdIHRiZCA9IG5ldyBib29sZWFuW3dvcmsuc2l6ZSgpXTsKKworICAgICAgICB3aGlsZSAoZGlkRGVsZXRlUm93KSB7CitTeXN0ZW0ub3V0LnByaW50bG4oIiAiICsgd29yay5zaXplKCkgKyAiIHJvd3MuLi4iKTsKK2ludCBkZWxldGVkUm93cyA9IDA7CisgICAgICAgICAgICBkaWREZWxldGVSb3cgPSBmYWxzZTsKKworICAgICAgICAgICAgc29ydFRhYmxlKHdvcmssIHRlbXBNYXBwaW5nLCBtYXBwaW5nLCAxLCB3b3JrLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdvcmsuc2l6ZSgpIC0gMTsgKSB7CitTeXN0ZW0ub3V0LnByaW50KCJEZWxldGluZywgaW5zcGVjdGluZyByb3cgIiArIGkgKyAiLCBkZWxldGVkICIgKyBkZWxldGVkUm93cyArICIgcm93cy4uLlxyIik7CisgICAgICAgICAgICAgICAgaW50IHJvd1RvRGVsZXRlID0gKChJbnRlZ2VyKSh0ZW1wTWFwcGluZy5lbGVtZW50QXQoaSArIDEpKSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpbnQgcm93VG9NYXBUbyA9ICgoSW50ZWdlcikodGVtcE1hcHBpbmcuZWxlbWVudEF0KGkpKSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoY29tcGFyZVJvd3MoKGludFtdKXdvcmsuZWxlbWVudEF0KGkpLCAoaW50W10pd29yay5lbGVtZW50QXQoaSArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRiZFtyb3dUb0RlbGV0ZV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0ZW1wVGFibGUuc2V0RWxlbWVudEF0KG51bGwsIHJvd1RvRGVsZXRlKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRiZFttYXBwaW5nW3Jvd1RvTWFwVG9dXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbcm93VG9NYXBUb10gPSBtYXBwaW5nW21hcHBpbmdbcm93VG9NYXBUb11dOworICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW3Jvd1RvRGVsZXRlXSA9IG1hcHBpbmdbcm93VG9NYXBUb107CisgICAgICAgICAgICAgICAgICAgIGRpZERlbGV0ZVJvdyA9IHRydWU7CitkZWxldGVkUm93cysrOworICAgICAgICAgICAgICAgICAgICB3b3JrLnJlbW92ZUVsZW1lbnRBdChpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBNYXBwaW5nLnJlbW92ZUVsZW1lbnRBdChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXBwaW5nLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHRiZFtpXSAmJiB0YmRbbWFwcGluZ1tpXV0pCisgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbaV0gPSBtYXBwaW5nW21hcHBpbmdbaV1dOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50IGRlY3JlbWVudEJ5ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXBwaW5nLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAodGJkW2ldKQorICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ5Kys7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWFwcGluZ1tpXSAtPSBkZWNyZW1lbnRCeTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcHBpbmcubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0YmRbaV0pCisgICAgICAgICAgICAgICAgbWFwcGluZ1tpXSA9IG1hcHBpbmdbbWFwcGluZ1tpXV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IHRlbXBUYWJsZS5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHRiZFtpXSkKKyAgICAgICAgICAgICAgICB0ZW1wVGFibGUucmVtb3ZlRWxlbWVudEF0KGkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50W10gcm93ID0gKGludFtdKXRlbXBUYWJsZS5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1Db2xzOyBqKyspCisgICAgICAgICAgICAgICAgICAgIHJvd1tqXSA9IChyb3dbal0gPT0gLTEpID8gLTEgOiBtYXBwaW5nW3Jvd1tqXV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc29ydFRhYmxlKFZlY3RvciB0YWJsZSwgVmVjdG9yIHRlbXBNYXBwaW5nLCBpbnRbXSBtYXBwaW5nLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKK1N5c3RlbS5vdXQucHJpbnQoIlNvcnRpbmcgKCIgKyBzdGFydCArICIsICIgKyBlbmQgKyAiKS4uLlxyIik7CisgICAgICAgIGlmIChzdGFydCArIDEgPj0gZW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBlbHNlIGlmIChzdGFydCArIDEwID49IGVuZCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0ICsgMTsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaW50W10gcm93ID0gKGludFtdKXRhYmxlLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgICAgICBJbnRlZ2VyIHRlbXBNYXAgPSAoSW50ZWdlcil0ZW1wTWFwcGluZy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICAgICAgZm9yIChqID0gaSAtIDE7IGogPj0gc3RhcnQ7IGotLSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGFyZVJvd3MoKGludFtdKXRhYmxlLmVsZW1lbnRBdChqKSwgcm93LCBtYXBwaW5nKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLnNldEVsZW1lbnRBdCgoaW50W10pdGFibGUuZWxlbWVudEF0KGopLCBqICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWFwcGluZy5zZXRFbGVtZW50QXQoKEludGVnZXIpdGVtcE1hcHBpbmcuZWxlbWVudEF0KGopLCBqICsgMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5zZXRFbGVtZW50QXQocm93LCBqICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWFwcGluZy5zZXRFbGVtZW50QXQodGVtcE1hcCwgaiArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGogPCBzdGFydCkgeworICAgICAgICAgICAgICAgICAgICB0YWJsZS5zZXRFbGVtZW50QXQocm93LCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBNYXBwaW5nLnNldEVsZW1lbnRBdCh0ZW1wTWFwLCBzdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IGJvdW5kYXJ5UG9zID0gKHN0YXJ0ICsgZW5kKSAvIDI7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2xlYW4gYWxsVGhlU2FtZSA9IHRydWU7CisgICAgICAgICAgICBpbnQgZmlyc3REaWZmZXJlbnQgPSAwOworCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaW50W10gYm91bmRhcnkgPSAoaW50W10pdGFibGUuZWxlbWVudEF0KGJvdW5kYXJ5UG9zKTsKKyAgICAgICAgICAgICAgICBpID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgaW50IGogPSBlbmQgLSAxOworICAgICAgICAgICAgICAgIGludFtdIHJvdyA9IG51bGw7CisgICAgICAgICAgICAgICAgYnl0ZSBjb21wUmVzdWx0OworICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgaikgeworICAgICAgICAgICAgICAgICAgICByb3cgPSAoaW50W10pdGFibGUuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8PSBqICYmIGNvbXBhcmVSb3dzKHJvdywgYm91bmRhcnksIG1hcHBpbmcpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICAgICAgcm93ID0gKGludFtdKXRhYmxlLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJvdyA9IChpbnRbXSl0YWJsZS5lbGVtZW50QXQoaik7CisgICAgICAgICAgICAgICAgICAgIGNvbXBSZXN1bHQgPSBjb21wYXJlUm93cyhyb3csIGJvdW5kYXJ5LCBtYXBwaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPD0gaiAmJiAoY29tcFJlc3VsdCA+PSAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBSZXN1bHQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFRoZVNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERpZmZlcmVudCA9IGo7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSAoaW50W10pdGFibGUuZWxlbWVudEF0KGopOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcFJlc3VsdCA9IGNvbXBhcmVSb3dzKHJvdywgYm91bmRhcnksIG1hcHBpbmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDw9IGopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IChpbnRbXSl0YWJsZS5lbGVtZW50QXQoaik7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5zZXRFbGVtZW50QXQodGFibGUuZWxlbWVudEF0KGkpLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLnNldEVsZW1lbnRBdChyb3csIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHRlbXAgPSB0ZW1wTWFwcGluZy5lbGVtZW50QXQoaik7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWFwcGluZy5zZXRFbGVtZW50QXQodGVtcE1hcHBpbmcuZWxlbWVudEF0KGkpLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBNYXBwaW5nLnNldEVsZW1lbnRBdCh0ZW1wLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaSA8PSBzdGFydCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsVGhlU2FtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnlQb3MgPSBmaXJzdERpZmZlcmVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlIChpIDw9IHN0YXJ0KTsKKyAgICAgICAgICAgIHNvcnRUYWJsZSh0YWJsZSwgdGVtcE1hcHBpbmcsIG1hcHBpbmcsIHN0YXJ0LCBpKTsKKyAgICAgICAgICAgIHNvcnRUYWJsZSh0YWJsZSwgdGVtcE1hcHBpbmcsIG1hcHBpbmcsIGksIGVuZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJ5dGUgY29tcGFyZVJvd3MoaW50W10gcm93MSwgaW50W10gcm93MiwgaW50W10gbWFwcGluZykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbHM7IGkrKykgeworICAgICAgICAgICAgaW50IGMxID0gKHJvdzFbaV0gPT0gLTEpID8gLTEgOiBtYXBwaW5nW3JvdzFbaV1dOworICAgICAgICAgICAgaW50IGMyID0gKHJvdzJbaV0gPT0gLTEpID8gLTEgOiBtYXBwaW5nW3JvdzJbaV1dOworICAgICAgICAgICAgaWYgKGMxIDwgYzIpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZWxzZSBpZiAoYzEgPiBjMikKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwcml2YXRlIGludFtdIGJ1aWxkUm93SW5kZXgoVmVjdG9yIHRlbXBUYWJsZSkgeworICAgICAgICBpbnRbXSB0ZW1wUm93SW5kZXggPSBuZXcgaW50W3RlbXBUYWJsZS5zaXplKCldOworICAgICAgICByb3dJbmRleEZsYWdzSW5kZXggPSBuZXcgc2hvcnRbdGVtcFRhYmxlLnNpemUoKV07CisgICAgICAgIFZlY3RvciB0ZW1wUm93SW5kZXhGbGFncyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgcm93SW5kZXhTaGlmdHMgPSBuZXcgYnl0ZVt0ZW1wVGFibGUuc2l6ZSgpXTsKKworICAgICAgICAvLyBidWlsZCB0aGUgcm93IGluZGV4LiAgRWFjaCBlbnRyeSBpbiB0aGUgcm93IGluZGV4IHN0YXJ0cyBvdXQgcmVmZXJyaW5nCisgICAgICAgIC8vIHRvIHRoZSBvcmlnaW5hbCByb3cgKHNvIGl0IGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55IG1hcHBpbmcpLCBhbmQgd2Ugc2V0CisgICAgICAgIC8vIHVwIHRoZSBpbmRleCBmbGFncyB0byBzaG93IHdoaWNoIGNlbGxzIGluIHRoZSByb3cgYXJlIHBvcHVsYXRlZAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBUYWJsZS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgdGVtcFJvd0luZGV4W2ldID0gaTsKKworICAgICAgICAgICAgaW50W10gcm93ID0gKGludFtdKXRlbXBUYWJsZS5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBpZiAocm93W251bUNvbHNdID09IDEgJiYgcm93WzBdID09IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKHJvd1tqXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgcm93SW5kZXhGbGFnc0luZGV4W2ldID0gKHNob3J0KSgtaik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnRbXSBmbGFncyA9IG5ldyBpbnRbbnVtQ29sR3JvdXBzXTsKKyAgICAgICAgICAgICAgICBpbnQgbmV4dEZsYWcgPSAxOworICAgICAgICAgICAgICAgIGludCBjb2xHcm91cCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1Db2xzOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd1tqXSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3NbY29sR3JvdXBdIHw9IG5leHRGbGFnOworICAgICAgICAgICAgICAgICAgICBuZXh0RmxhZyA8PD0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRGbGFnID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrY29sR3JvdXA7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29sR3JvdXAgPSAwOworICAgICAgICAgICAgICAgIGludCBqID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IHRlbXBSb3dJbmRleEZsYWdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKChJbnRlZ2VyKXRlbXBSb3dJbmRleEZsYWdzLmVsZW1lbnRBdChqKSkuaW50VmFsdWUoKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3NbY29sR3JvdXBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK2NvbEdyb3VwOworICAgICAgICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbEdyb3VwID49IG51bUNvbEdyb3VwcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2xHcm91cCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sR3JvdXAgPSAwOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJvd0luZGV4RmxhZ3NJbmRleFtpXSA9IChzaG9ydCkoaiAtIGNvbEdyb3VwKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoY29sR3JvdXAgPCBudW1Db2xHcm91cHMpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFJvd0luZGV4RmxhZ3MuYWRkRWxlbWVudChuZXcgSW50ZWdlcihmbGFnc1tjb2xHcm91cF0pKTsKKyAgICAgICAgICAgICAgICAgICAgKytjb2xHcm91cDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcm93SW5kZXhGbGFncyA9IG5ldyBpbnRbdGVtcFJvd0luZGV4RmxhZ3Muc2l6ZSgpXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dJbmRleEZsYWdzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgcm93SW5kZXhGbGFnc1tpXSA9ICgoSW50ZWdlcil0ZW1wUm93SW5kZXhGbGFncy5lbGVtZW50QXQoaSkpLmludFZhbHVlKCk7CitTeXN0ZW0ub3V0LnByaW50bG4oIk51bWJlciBvZiBjb2x1bW4gZ3JvdXBzID0gIiArIG51bUNvbEdyb3Vwcyk7CitTeXN0ZW0ub3V0LnByaW50bG4oIlNpemUgb2Ygcm93SW5kZXhGbGFncyA9ICIgKyByb3dJbmRleEZsYWdzLmxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIHRlbXBSb3dJbmRleDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc3RhY2tSb3dzKFZlY3RvciB0ZW1wVGFibGUpIHsKKy8qCitTeXN0ZW0ub3V0LnByaW50KCJSb3c6XHQiKTsKK2ZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29sczsgaSsrKQorU3lzdGVtLm91dC5wcmludChyZXZlcnNlQ29sdW1uTWFwW2ldICsgIlx0Iik7CitTeXN0ZW0ub3V0LnByaW50bG4oKTsKK2ZvciAoaW50IGkgPSAwOyBpIDwgdGVtcFRhYmxlLnNpemUoKTsgaSsrKSB7CitTeXN0ZW0ub3V0LnByaW50KEludGVnZXIudG9TdHJpbmcoaSkgKyAiOlx0Iik7CitpbnRbXSByb3cgPSAoaW50W10pdGVtcFRhYmxlLmVsZW1lbnRBdChpKTsKK2ZvciAoaW50IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKQoraWYgKHJvd1tqXSAhPSAwKSBTeXN0ZW0ub3V0LnByaW50KEludGVnZXIudG9TdHJpbmcocm93W2pdKSArICJcdCIpOworZWxzZSBTeXN0ZW0ub3V0LnByaW50KCIuXHQiKTsKK1N5c3RlbS5vdXQucHJpbnRsbigpOworfQorKi8KKworICAgICAgICBpbnRbXSB0ZW1wUm93SW5kZXggPSBidWlsZFJvd0luZGV4KHRlbXBUYWJsZSk7CisgICAgICAgIGJvb2xlYW5bXSB0YmQgPSBuZXcgYm9vbGVhblt0ZW1wVGFibGUuc2l6ZSgpXTsKKworICAgICAgICAvLyBub3cgd2UgYWN0dWFsbHkgZ28gdGhyb3VnaCBhbmQgc3RhY2sgcm93cyB0b2dldGhlcgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBUYWJsZS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKHRiZFtpXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKK1N5c3RlbS5vdXQucHJpbnQoIlN0YWNraW5nLCBpbnNwZWN0aW5nIHJvdyAiICsgaSArICIuLi5cciIpOworLy9TeXN0ZW0ub3V0LnByaW50bG4oIlN0YWNraW5nLCBpbnNwZWN0aW5nIHJvdyAiICsgaSArICIuLi4iKTsKKworICAgICAgICAgICAgaW50W10gZGVzdFJvdyA9IChpbnRbXSl0ZW1wVGFibGUuZWxlbWVudEF0KGkpOworCisgICAgICAgICAgICBib29sZWFuW10gdGVtcEZsYWdzID0gbmV3IGJvb2xlYW5bbnVtQ29sc107CisgICAgICAgICAgICBib29sZWFuW10gZmlsbGVkQ2VsbHMgPSBuZXcgYm9vbGVhbltudW1Db2xzXTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQ29sczsgaisrKQorICAgICAgICAgICAgICAgIGZpbGxlZENlbGxzW2pdID0gZGVzdFJvd1tqXSAhPSAwOworCisgICAgICAgICAgICBmb3IgKGludCBqID0gaSArIDE7IGRlc3RSb3dbbnVtQ29sc10gPCBudW1Db2xzICYmIGogPCB0ZW1wVGFibGUuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGJkW2pdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGludFtdIHNyY1JvdyA9IChpbnRbXSl0ZW1wVGFibGUuZWxlbWVudEF0KGopOworICAgICAgICAgICAgICAgIGlmIChzcmNSb3dbbnVtQ29sc10gKyBkZXN0Um93W251bUNvbHNdID4gbnVtQ29scykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpbnQgbWF4TGVmdFNoaWZ0ID0gLTk5OTsKKyAgICAgICAgICAgICAgICBpbnQgbWF4UmlnaHRTaGlmdCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBudW1Db2xzOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcEZsYWdzW2tdID0gc3JjUm93W2tdICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wRmxhZ3Nba10pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhMZWZ0U2hpZnQgPT0gLTk5OSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhMZWZ0U2hpZnQgPSAtazsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heFJpZ2h0U2hpZnQgPSAobnVtQ29scyAtIDEpIC0gazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludCBzaGlmdDsKKyAgICAgICAgICAgICAgICBmb3IgKHNoaWZ0ID0gbWF4TGVmdFNoaWZ0OyBzaGlmdCA8PSBtYXhSaWdodFNoaWZ0OyBzaGlmdCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBrOworICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbnVtQ29sczsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcEZsYWdzW2tdICYmIGZpbGxlZENlbGxzW2sgKyBzaGlmdF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj0gbnVtQ29scykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2hpZnQgPD0gbWF4UmlnaHRTaGlmdCkgeworLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBhY2tpbmcgcm93ICIgKyBqICsgIiBpbnRvIHJvdyAiICsgaSArICIgd2l0aCBzaGlmdCA9ICIgKyBzaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbnVtQ29sczsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcEZsYWdzW2tdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbGVkQ2VsbHNbayArIHNoaWZ0XSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd1trICsgc2hpZnRdID0gc3JjUm93W2tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZGVzdFJvd1tudW1Db2xzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0YmRbal0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0ZW1wUm93SW5kZXhbal0gPSBpOworICAgICAgICAgICAgICAgICAgICByb3dJbmRleFNoaWZ0c1tqXSA9IChieXRlKXNoaWZ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGZpbmFsbHksIHdlIHNxdWVlemUgb3V0IGFsbCB0aGUgZGVsZXRlZCByb3dzCisgICAgICAgIGludCBkZWNyZW1lbnRCeSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcFJvd0luZGV4Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXRiZFtpXSkKKyAgICAgICAgICAgICAgICB0ZW1wUm93SW5kZXhbaV0gLT0gZGVjcmVtZW50Qnk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKytkZWNyZW1lbnRCeTsKKyAgICAgICAgfQorICAgICAgICByb3dJbmRleCA9IG5ldyBzaG9ydFt0ZW1wUm93SW5kZXgubGVuZ3RoXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHRlbXBSb3dJbmRleC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHRiZFtpXSkgeworICAgICAgICAgICAgICAgIHJvd0luZGV4W2ldID0gKHNob3J0KSh0ZW1wUm93SW5kZXhbdGVtcFJvd0luZGV4W2ldXSk7CisgICAgICAgICAgICAgICAgdGVtcFRhYmxlLnJlbW92ZUVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByb3dJbmRleFtpXSA9IChzaG9ydCl0ZW1wUm93SW5kZXhbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcHJpbnRUYWJsZSgpIHsKKyAgICAgICAgc2hvcnQgY2VsbDsKKyAgICAgICAgaW50IHBvcHVsYXRlZENlbGxzID0gMDsKKy8qCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29uY2VwdHVhbCB0YWJsZToiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgUm93OiAgIGEgICBiICAgYyAgIGQgICBlICAgZiAgIGcgICBoICAgaSAgIGogICBrICAgbCAgIG0gICBuIgorICAgICAgICAgICAgICAgICsgIiAgIG8gICBwICAgcSAgIHIgICBzICAgdCAgIHUgICB2ICAgdyAgIHggICB5ICAgeiAgICcgICAjIik7CisKKyAgICAgICAgYm9vbGVhbltdIHJvd1ByaW50RmxhZ3MgPSBuZXcgYm9vbGVhbltyb3dJbmRleC5sZW5ndGhdOworICAgICAgICBwcmludENvbmNlcHR1YWxUYWJsZSgiIiwgMCwgcm93UHJpbnRGbGFncyk7CisqLworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbmNlcHR1YWwgdGFibGU6Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiBSb3c6Iik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmV2ZXJzZUNvbHVtbk1hcC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAgICIgKyByZXZlcnNlQ29sdW1uTWFwW2ldKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd0luZGV4Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgICAgIHByaW50TnVtYmVyKGksIDQpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiOiIpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1Db2xzOyBqKyspCisgICAgICAgICAgICAgICAgcHJpbnROdW1iZXIoYXQoaSwgaiksIDQpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbignXG4nKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcm5hbGx5IHN0b3JlZCB0YWJsZToiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIFJvdzoiKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXZlcnNlQ29sdW1uTWFwLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICAgIiArIHJldmVyc2VDb2x1bW5NYXBbaV0pOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFibGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpICUgbnVtQ29scyA9PSAwKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICAgICAgcHJpbnROdW1iZXIoaSAvIG51bUNvbHMsIDQpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIjoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNlbGwgPSB0YWJsZVtpXTsKKyAgICAgICAgICAgIGlmIChjZWxsICE9IDApCisgICAgICAgICAgICAgICAgcG9wdWxhdGVkQ2VsbHMrKzsKKyAgICAgICAgICAgIHByaW50TnVtYmVyKGNlbGwsIDQpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbignXG4nKTsKKworU3lzdGVtLm91dC5wcmludGxuKCJSb3cgaW5kZXg6Iik7Citmb3IgKGludCBpID0gMDsgaSA8IHJvd0luZGV4Lmxlbmd0aDsgaSsrKSB7CisgICAgU3lzdGVtLm91dC5wcmludCgiICAgIiArIGkgKyAiIC0+ICIgKyByb3dJbmRleFtpXSk7CisgICAgaWYgKHJvd0luZGV4RmxhZ3NJbmRleFtpXSA8IDApCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiwgZmxhZ3MgPSAiICsgSW50ZWdlci50b0JpbmFyeVN0cmluZygoMSA8PCAoLXJvd0luZGV4RmxhZ3NJbmRleFtpXSkpKSArICIgKCIgKyByb3dJbmRleEZsYWdzSW5kZXhbaV0pOworICAgIGVsc2UKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiLCBmbGFncyA9ICIgKyBJbnRlZ2VyLnRvQmluYXJ5U3RyaW5nKHJvd0luZGV4RmxhZ3Nbcm93SW5kZXhGbGFnc0luZGV4W2ldXSkgKyAiICgiICsgcm93SW5kZXhGbGFnc0luZGV4W2ldKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiksIHNoaWZ0ID0gIiArIHJvd0luZGV4U2hpZnRzW2ldKTsKK30KKy8qCisgICAgICAgIGludCB0aGVvcmV0aWNhbE1pblJvd3MgPSBwb3B1bGF0ZWRDZWxscyAvIG51bUNvbHM7CisgICAgICAgIGlmIChwb3B1bGF0ZWRDZWxscyAlIG51bUNvbHMgIT0gMCkKKyAgICAgICAgICAgIHRoZW9yZXRpY2FsTWluUm93cysrOworICAgICAgICBpbnQgb25lQ2VsbFJvd3MgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd0luZGV4RmxhZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGRvdWJsZSB0ZW1wID0gTWF0aC5sb2cocm93SW5kZXhGbGFnc1tpXSkgLyBNYXRoLmxvZygyKTsKKyAgICAgICAgICAgIGlmICh0ZW1wID09IChpbnQpdGVtcCkKKyAgICAgICAgICAgICAgICBvbmVDZWxsUm93cysrOworICAgICAgICB9CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCdcbicpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHdvcmRzIGluIGlucHV0ID0gIiArIHRvdGFsV29yZHMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHVuaXF1ZSB3b3JkcyA9ICIgKyB1bmlxdWVXb3JkcyArICIsIGNvbXByaXNpbmcgIiArCisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFVuaXF1ZVdvcmRDaGFycyArICIgY2hhcmFjdGVyc1xuIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtYmVyIG9mIHBvcHVsYXRlZCBjZWxscyA9ICIgKyBwb3B1bGF0ZWRDZWxscyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgbnVtYmVyIG9mIGNlbGxzID0gIiArICh0YWJsZS5sZW5ndGgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNpZGVuY3kgPSAiICsgKChmbG9hdClwb3B1bGF0ZWRDZWxscyAvIHRhYmxlLmxlbmd0aCAqIDEwMCkgKyAnJScpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJhdGlvIG9mIHBvcHVsYXRlZCBjZWxscyB0byB1bmlxdWUtd29yZCBjaGFyYWN0ZXJzID0gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAoKGZsb2F0KXBvcHVsYXRlZENlbGxzIC8gdG90YWxVbmlxdWVXb3JkQ2hhcnMgKiAxMDApICsgJyUnKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSYXRpbyBvZiB0b3RhbCBjZWxscyB0byB1bmlxdWUtd29yZCBjaGFyYWN0ZXJzID0gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAoKGZsb2F0KXRhYmxlLmxlbmd0aCAvIHRvdGFsVW5pcXVlV29yZENoYXJzICogMTAwKSArICclJyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtYmVyIG9mIHJvd3MgPSAiICsgKHRhYmxlLmxlbmd0aCAvIG51bUNvbHMpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGVvcmV0aWNhbCBtaW5pbXVtIG51bWJlciBvZiByb3dzID0gIiArIHRoZW9yZXRpY2FsTWluUm93cyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmF0aW8gb2YgbnVtYmVyIG9mIHJvd3MgdG8gdGhlb3JldGljYWwgbWluaW11bSA9ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgKChmbG9hdCkodGFibGUubGVuZ3RoIC8gbnVtQ29scykgLyB0aGVvcmV0aWNhbE1pblJvd3MgKiAxMDApICsgJyUnKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW1iZXIgb2YgY29uY2VwdHVhbCByb3dzID0gIiArIHJvd0luZGV4Lmxlbmd0aCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29uY2VwdHVhbCByb3dzIHdpdGggb25seSBvbmUgcG9wdWxhdGVkIGNlbGwgPSAiICsgb25lQ2VsbFJvd3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJhdGlvIG9mIG9uZS1jZWxsIHJvd3MgdG8gdG90YWwgY29uY2VwdHVhbCByb3dzID0gIiArICgoKGZsb2F0KW9uZUNlbGxSb3dzKQorICAgICAgICAgICAgICAgICAgICAgICAgLyByb3dJbmRleC5sZW5ndGggKiAxMDApICsgJyUnKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdmVyYWdlIG51bWJlciBvZiBwb3B1bGF0ZWQgY2VsbHMgaW4gbXVsdGktY2VsbCByb3dzID0gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAoKGZsb2F0KShwb3B1bGF0ZWRDZWxscyAtIG9uZUNlbGxSb3dzKSAvIChyb3dJbmRleC5sZW5ndGggLSBvbmVDZWxsUm93cykpKTsKKworICAgICAgICBpbnQgc3RvcmFnZVVzZWQgPSB0YWJsZS5sZW5ndGggKiAyICsgcm93SW5kZXgubGVuZ3RoICogMgorICAgICAgICAgICAgICAgICAgICAgICAgKyByb3dJbmRleEZsYWdzLmxlbmd0aCAqIDQgKyByb3dJbmRleFNoaWZ0cy5sZW5ndGg7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIHRhYmxlIChpbmNsdWRpbmcgaW5kZXhlcykgPSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VVc2VkKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCeXRlcyBvZiBvdmVyaGVhZCBwZXIgdW5pcXVlLXdvcmQgY2hhcmFjdGVyID0gIiArICgoZG91YmxlKShzdG9yYWdlVXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgLSAodG90YWxVbmlxdWVXb3JkQ2hhcnMgKiAyKSkgLyB0b3RhbFVuaXF1ZVdvcmRDaGFycykpOworKi8KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcHJpbnRDb25jZXB0dWFsVGFibGUoU3RyaW5nIGluaXRpYWxTdHJpbmcsIGludCBzdGF0ZSwgYm9vbGVhbltdIGZsYWdzKSB7CisgICAgICAgIGlmIChpbml0aWFsU3RyaW5nLmxlbmd0aCgpID09IDApCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJvb3Q6Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbml0aWFsU3RyaW5nICsgJzonKTsKKworICAgICAgICBpZiAoIWZsYWdzW3N0YXRlXSkgeworICAgICAgICAgICAgZmxhZ3Nbc3RhdGVdID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW50TnVtYmVyKHN0YXRlLCA0KTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIjoiKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29sczsgaSsrKQorICAgICAgICAgICAgICAgIHByaW50TnVtYmVyKGF0KHN0YXRlLCBpKSwgNCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBuZXh0U3RhdGU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29sczsgaSsrKSB7CisgICAgICAgICAgICBuZXh0U3RhdGUgPSBhdChzdGF0ZSwgaSk7CisgICAgICAgICAgICBpZiAobmV4dFN0YXRlID4gMCAmJiAhZmxhZ3NbbmV4dFN0YXRlXSkgeworICAgICAgICAgICAgICAgIHByaW50TnVtYmVyKG5leHRTdGF0ZSwgNCk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiOiIpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQ29sczsgaisrKQorICAgICAgICAgICAgICAgICAgICBwcmludE51bWJlcihhdChuZXh0U3RhdGUsIGopLCA0KTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbHM7IGkrKykgeworICAgICAgICAgICAgbmV4dFN0YXRlID0gYXQoc3RhdGUsIGkpOworICAgICAgICAgICAgaWYgKG5leHRTdGF0ZSA+IDAgJiYgIWZsYWdzW25leHRTdGF0ZV0pIHsKKyAgICAgICAgICAgICAgICBjaGFyIG5leHRDaGFyOworICAgICAgICAgICAgICAgIGlmIChuZXh0U3RhdGUgPT0gMjcpCisgICAgICAgICAgICAgICAgICAgIG5leHRDaGFyID0gJyAnOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHRTdGF0ZSA9PSAyNikKKyAgICAgICAgICAgICAgICAgICAgbmV4dENoYXIgPSAnXCcnOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV4dENoYXIgPSAoY2hhcikoaSArICdhJyk7CisgICAgICAgICAgICAgICAgZmxhZ3NbbmV4dFN0YXRlXSA9IHRydWU7CisgICAgICAgICAgICAgICAgcHJpbnRDb25jZXB0dWFsVGFibGUoaW5pdGlhbFN0cmluZyArIG5leHRDaGFyLCBuZXh0U3RhdGUsIGZsYWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBwcmludFdvcmRMaXN0KFN0cmluZyBwYXJ0aWFsV29yZCwgaW50IHN0YXRlLCBQcmludFdyaXRlciBvdXQpCisgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoc3RhdGUgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aWFsV29yZCk7CisgICAgICAgICAgICBpZiAob3V0ICE9IG51bGwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4ocGFydGlhbFdvcmQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2xzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYXQoc3RhdGUsIGkpICE9IDApCisgICAgICAgICAgICAgICAgICAgIHByaW50V29yZExpc3QocGFydGlhbFdvcmQgKyByZXZlcnNlQ29sdW1uTWFwW2ldLCBhdChzdGF0ZSwgaSksIG91dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgd3JpdGVEaWN0aW9uYXJ5RmlsZShEYXRhT3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgb3V0LndyaXRlSW50KDApOyAgICAvLyB2ZXJzaW9uIG51bWJlcgorCisgICAgICAgIGNoYXJbXSBjb2x1bW5NYXBJbmRleGVzID0gY29sdW1uTWFwLmdldEluZGV4QXJyYXkoKTsKKyAgICAgICAgb3V0LndyaXRlSW50KGNvbHVtbk1hcEluZGV4ZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5NYXBJbmRleGVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgb3V0LndyaXRlU2hvcnQoKHNob3J0KWNvbHVtbk1hcEluZGV4ZXNbaV0pOworICAgICAgICBieXRlW10gY29sdW1uTWFwVmFsdWVzID0gY29sdW1uTWFwLmdldFZhbHVlQXJyYXkoKTsKKyAgICAgICAgb3V0LndyaXRlSW50KGNvbHVtbk1hcFZhbHVlcy5sZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbk1hcFZhbHVlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIG91dC53cml0ZUJ5dGUoKGJ5dGUpY29sdW1uTWFwVmFsdWVzW2ldKTsKKworICAgICAgICBvdXQud3JpdGVJbnQobnVtQ29scyk7CisgICAgICAgIG91dC53cml0ZUludChudW1Db2xHcm91cHMpOworCisgICAgICAgIG91dC53cml0ZUludChyb3dJbmRleC5sZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd0luZGV4Lmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgb3V0LndyaXRlU2hvcnQocm93SW5kZXhbaV0pOworCisgICAgICAgIG91dC53cml0ZUludChyb3dJbmRleEZsYWdzSW5kZXgubGVuZ3RoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dJbmRleEZsYWdzSW5kZXgubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBvdXQud3JpdGVTaG9ydChyb3dJbmRleEZsYWdzSW5kZXhbaV0pOworICAgICAgICBvdXQud3JpdGVJbnQocm93SW5kZXhGbGFncy5sZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd0luZGV4RmxhZ3MubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBvdXQud3JpdGVJbnQocm93SW5kZXhGbGFnc1tpXSk7CisKKyAgICAgICAgb3V0LndyaXRlSW50KHJvd0luZGV4U2hpZnRzLmxlbmd0aCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93SW5kZXhTaGlmdHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKHJvd0luZGV4U2hpZnRzW2ldKTsKKworICAgICAgICBvdXQud3JpdGVJbnQodGFibGUubGVuZ3RoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIG91dC53cml0ZVNob3J0KHRhYmxlW2ldKTsKKworICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcHJpbnROdW1iZXIoaW50IHgsIGludCB3aWR0aCkgeworICAgICAgICBTdHJpbmcgcyA9IFN0cmluZy52YWx1ZU9mKHgpOworICAgICAgICBpZiAod2lkdGggPiBzLmxlbmd0aCgpKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChzcGFjZXMuc3Vic3RyaW5nKDAsIHdpZHRoIC0gcy5sZW5ndGgoKSkpOworICAgICAgICBpZiAoeCAhPSAwKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgnLicpOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBzaG9ydCBhdChpbnQgcm93LCBjaGFyIGNoKSB7CisgICAgICAgIGludCBjb2wgPSBjb2x1bW5NYXAuZWxlbWVudEF0KGNoKTsKKyAgICAgICAgcmV0dXJuIGF0KHJvdywgY29sKTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgc2hvcnQgYXQoaW50IHJvdywgaW50IGNvbCkgeworICAgICAgICBpZiAoY2VsbElzUG9wdWxhdGVkKHJvdywgY29sKSkKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbEF0KHJvd0luZGV4W3Jvd10sIGNvbCArIHJvd0luZGV4U2hpZnRzW3Jvd10pOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gY2VsbElzUG9wdWxhdGVkKGludCByb3csIGludCBjb2wpIHsKKyAgICAgICAgaWYgKHJvd0luZGV4RmxhZ3NJbmRleFtyb3ddIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBjb2wgPT0gLXJvd0luZGV4RmxhZ3NJbmRleFtyb3ddOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBmbGFncyA9IHJvd0luZGV4RmxhZ3Nbcm93SW5kZXhGbGFnc0luZGV4W3Jvd10gKyAoY29sID4+IDUpXTsKKyAgICAgICAgICAgIHJldHVybiAoZmxhZ3MgJiAoMSA8PCAoY29sICYgMHgxZikpKSAhPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBzaG9ydCBpbnRlcm5hbEF0KGludCByb3csIGludCBjb2wpIHsKKyAgICAgICAgcmV0dXJuIHRhYmxlW3JvdyAqIG51bUNvbHMgKyBjb2xdOworICAgIH0KKworICAgIHByaXZhdGUgQ29tcGFjdEJ5dGVBcnJheSBjb2x1bW5NYXAgPSBudWxsOworICAgIHByaXZhdGUgY2hhcltdIHJldmVyc2VDb2x1bW5NYXAgPSBudWxsOworICAgIHByaXZhdGUgaW50IG51bUNvbHM7CisgICAgcHJpdmF0ZSBpbnQgbnVtQ29sR3JvdXBzOworICAgIHByaXZhdGUgc2hvcnRbXSB0YWJsZSA9IG51bGw7CisgICAgcHJpdmF0ZSBzaG9ydFtdIHJvd0luZGV4ID0gbnVsbDsKKyAgICBwcml2YXRlIGludFtdIHJvd0luZGV4RmxhZ3MgPSBudWxsOworICAgIHByaXZhdGUgc2hvcnRbXSByb3dJbmRleEZsYWdzSW5kZXggPSBudWxsOworICAgIHByaXZhdGUgYnl0ZVtdIHJvd0luZGV4U2hpZnRzID0gbnVsbDsKKworICAgIHByaXZhdGUgaW50IHRvdGFsV29yZHMgPSAwOworICAgIHByaXZhdGUgaW50IHVuaXF1ZVdvcmRzID0gMDsKKyAgICBwcml2YXRlIGludCB0b3RhbFVuaXF1ZVdvcmRDaGFycyA9IDA7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3BhY2VzID0gIiAgICAgICI7Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9yYmJpL1dyaXRlVGFibGVzVG9GaWxlcy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3JiYmkvV3JpdGVUYWJsZXNUb0ZpbGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2E4NDYzYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9yYmJpL1dyaXRlVGFibGVzVG9GaWxlcy5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9yYmJpL0F0dGljL1dyaXRlVGFibGVzVG9GaWxlcy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAzLzAxIDAyOjM3OjQ3ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wucmJiaTsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworCitwdWJsaWMgY2xhc3MgV3JpdGVUYWJsZXNUb0ZpbGVzIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB3cml0ZUJhdGNoKHRydWUpOworICAgICAgICB3cml0ZUJhdGNoKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlQmF0Y2goYm9vbGVhbiBsaXR0bGVFbmRpYW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIEJyZWFrSXRlcmF0b3IgYmk7CisgICAgICAgIFN0cmluZyBzdWZmaXggPSAobGl0dGxlRW5kaWFuID8gIkxFIiA6ICJCRSIpOworICAgICAgICAKKyAgICAgICAgYmkgPSBCcmVha0l0ZXJhdG9yLmdldENoYXJhY3Rlckluc3RhbmNlKCk7CisgICAgICAgICgoUnVsZUJhc2VkQnJlYWtJdGVyYXRvciliaSkud3JpdGVUYWJsZXNUb0ZpbGUobmV3IEZpbGVPdXRwdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICJjaGFyIiArIHN1ZmZpeCArICIuYnJrIiksIGxpdHRsZUVuZGlhbik7CisgICAgICAgIAorICAgICAgICBiaSA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKCk7CisgICAgICAgICgoUnVsZUJhc2VkQnJlYWtJdGVyYXRvciliaSkud3JpdGVUYWJsZXNUb0ZpbGUobmV3IEZpbGVPdXRwdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICJ3b3JkIiArIHN1ZmZpeCArICIuYnJrIiksIGxpdHRsZUVuZGlhbik7CisgICAgICAgIAorICAgICAgICBiaSA9IEJyZWFrSXRlcmF0b3IuZ2V0TGluZUluc3RhbmNlKCk7CisgICAgICAgICgoUnVsZUJhc2VkQnJlYWtJdGVyYXRvciliaSkud3JpdGVUYWJsZXNUb0ZpbGUobmV3IEZpbGVPdXRwdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICJsaW5lIiArIHN1ZmZpeCArICIuYnJrIiksIGxpdHRsZUVuZGlhbik7CisgICAgICAgIAorICAgICAgICBiaSA9IEJyZWFrSXRlcmF0b3IuZ2V0U2VudGVuY2VJbnN0YW5jZSgpOworICAgICAgICAoKFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IpYmkpLndyaXRlVGFibGVzVG9GaWxlKG5ldyBGaWxlT3V0cHV0U3RyZWFtKAorICAgICAgICAgICAgICAgICAgICAic2VudCIgKyBzdWZmaXggKyAiLmJyayIpLCBsaXR0bGVFbmRpYW4pOworCisgICAgICAgIGJpID0gQnJlYWtJdGVyYXRvci5nZXRUaXRsZUluc3RhbmNlKCk7CisgICAgICAgICgoUnVsZUJhc2VkQnJlYWtJdGVyYXRvciliaSkud3JpdGVUYWJsZXNUb0ZpbGUobmV3IEZpbGVPdXRwdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICJ0aXRsZSIgKyBzdWZmaXggKyAiLmJyayIpLCBsaXR0bGVFbmRpYW4pOworCisgICAgICAgIGphdmEudXRpbC5Mb2NhbGUgdGhhaSA9IG5ldyBqYXZhLnV0aWwuTG9jYWxlKCJ0aCIsICIiLCAiIik7CisgICAgICAgIGJpID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UodGhhaSk7CisgICAgICAgICgoUnVsZUJhc2VkQnJlYWtJdGVyYXRvciliaSkud3JpdGVUYWJsZXNUb0ZpbGUobmV3IEZpbGVPdXRwdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICJ3b3JkX3RoIiArIHN1ZmZpeCArICIuYnJrIiksIGxpdHRsZUVuZGlhbik7CisKKyAgICAgICAgYmkgPSBCcmVha0l0ZXJhdG9yLmdldExpbmVJbnN0YW5jZSh0aGFpKTsKKyAgICAgICAgKChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKWJpKS53cml0ZVRhYmxlc1RvRmlsZShuZXcgRmlsZU91dHB1dFN0cmVhbSgKKyAgICAgICAgICAgICAgICAgICAgImxpbmVfdGgiICsgc3VmZml4ICsgIi5icmsiKSwgbGl0dGxlRW5kaWFuKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvU291cmNlU2V0LmphdmEgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvU291cmNlU2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczZTk4OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9Tb3VyY2VTZXQuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBDb3B5cmlnaHQgKGMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDExLzI5LzIwMDEgIGFsaXUgICAgICAgIENyZWF0aW9uLgorKiAgIDA2LzI2LzIwMDIgIGFsaXUgICAgICAgIE1vdmVkIHRvIGNvbS5pYm0uaWN1LmRldi50b29sLnRyYW5zbGl0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC50cmFuc2xpdDsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudG9vbC50cmFuc2xpdC5Vbmljb2RlU2V0Q2xvc3VyZTsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworCisvKioKKyAqIENsYXNzIHRoYXQgZ2VuZXJhdGVzIHNvdXJjZSBzZXQgaW5mb3JtYXRpb24gZm9yIGEgdHJhbnNsaXRlcmF0b3IuCisgKiAKKyAqIFRvIHJ1biwgdXNlOgorICogCisgKiAgIGphdmEgY29tLmlibS5pY3UuZGV2LnRvb2wudHJhbnNsaXQuU291cmNlU2V0IExhdGluLUthdGFrYW5hIE5GRCBsb3dlcgorICogCisgKiBPdXRwdXQgaXMgcHJvZHVjZWQgaW4gdGhlIGNvbW1hbmQgY29uc29sZSwgYW5kIGEgZmlsZSB3aXRoIG1vcmUgZGV0YWlsIGlzIGFsc28gd3JpdHRlbi4KKyAqIAorICogVG8gc2VlIGlmIGl0IHdvcmtzLCB1c2U6CisgKiAKKyAqICAgamF2YSBjb20uaWJtLmljdS5kZXYudGVzdC50cmFuc2xpdC5UcmFuc2xpdGVyYXRvclRlc3QgLXYgLW5vdGhyb3cgVGVzdEluY3JlbWVudGFsUHJvZ3Jlc3MKKyAqIAorICogYW5kCisgKiAgCisgKiAgIGphdmEgY29tLmlibS5pY3UuZGV2LmRlbW8udHJhbnNsaXQuRGVtbworICovCitwdWJsaWMgY2xhc3MgU291cmNlU2V0IHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAvLyBDb21wdXRlIGFuZCBkaXNwbGF5IHRoZSBzb3VyY2Ugc2V0cyBmb3IgYWxsIHN5c3RlbQorICAgICAgICAgICAgLy8gdHJhbnNsaXRlcmF0b3JzLgorICAgICAgICAgICAgZm9yIChFbnVtZXJhdGlvbiBlID0gVHJhbnNsaXRlcmF0b3IuZ2V0QXZhaWxhYmxlSURzKCk7IGUuaGFzTW9yZUVsZW1lbnRzKCk7ICkgeworICAgICAgICAgICAgICAgIFN0cmluZyBJRCA9IChTdHJpbmcpIGUubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBzaG93U291cmNlU2V0KElELCBOb3JtYWxpemVyLk5PTkUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFVzYWdlOiBJRCBbTkZLRCB8IE5GRF0gW2xvd2VyXQorICAgICAgICAgICAgTm9ybWFsaXplci5Nb2RlIG0gPSBOb3JtYWxpemVyLk5PTkU7CisgICAgICAgICAgICBib29sZWFuIGxvd2VyRmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAyKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMV0uZXF1YWxzSWdub3JlQ2FzZSgiTkZEIikpIHsKKyAgICAgICAgICAgICAgICAgICAgbSA9IE5vcm1hbGl6ZXIuTkZEOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1sxXS5lcXVhbHNJZ25vcmVDYXNlKCJORktEIikpIHsKKyAgICAgICAgICAgICAgICAgICAgbSA9IE5vcm1hbGl6ZXIuTkZLRDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMl0uZXF1YWxzSWdub3JlQ2FzZSgibG93ZXIiKSkgeworICAgICAgICAgICAgICAgICAgICBsb3dlckZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHsKKyAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hvd1NvdXJjZVNldChhcmdzWzBdLCBtLCBsb3dlckZpcnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHNob3dTb3VyY2VTZXQoU3RyaW5nIElELCBOb3JtYWxpemVyLk1vZGUgbSwgYm9vbGVhbiBsb3dlckZpcnN0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZSgiVW5pY29kZVNldENsb3N1cmUudHh0Iik7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGYuZ2V0Q2Fub25pY2FsRmlsZSgpLnRvU3RyaW5nKCk7CisgICAgICAgIG91dCA9IG5ldyBQcmludFdyaXRlcigKKyAgICAgICAgICAgIG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCisgICAgICAgICAgICAgICAgbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpLCAiVVRGLTgiKSk7CisgICAgICAgIG91dC5wcmludCgnXHVGRUZGJyk7IC8vIEJPTQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcml0aW5nICIgKyBmaWxlbmFtZSk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShJRCk7CisgICAgICAgIHNob3dTb3VyY2VTZXRBdXgodCwgbSwgbG93ZXJGaXJzdCwgdHJ1ZSk7CisgICAgICAgIHNob3dTb3VyY2VTZXRBdXgodC5nZXRJbnZlcnNlKCksIG0sIGxvd2VyRmlyc3QsIGZhbHNlKTsKKyAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcmludFdyaXRlciBvdXQ7CisgICAgCisgICAgc3RhdGljIHZvaWQgc2hvd1NvdXJjZVNldEF1eChUcmFuc2xpdGVyYXRvciB0LCBOb3JtYWxpemVyLk1vZGUgbSwgYm9vbGVhbiBsb3dlckZpcnN0LCBib29sZWFuIGZvcndhcmQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIFVuaWNvZGVTZXQgc291cmNlU2V0ID0gdC5nZXRTb3VyY2VTZXQoKTsKKyAgICAgICAgaWYgKG0gIT0gTm9ybWFsaXplci5OT05FIHx8IGxvd2VyRmlyc3QpIHsKKyAgICAgICAgICAgIFVuaWNvZGVTZXRDbG9zdXJlLmNsb3NlKHNvdXJjZVNldCwgbSwgbG93ZXJGaXJzdCk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0SUQoKSArICI6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlU2V0LnRvUGF0dGVybih0cnVlKSk7CisgICAgICAgIG91dC5wcmludGxuKCIjIE1JTklNQUwgRklMVEVSIEdFTkVSQVRFRCBGT1I6ICIgKyB0LmdldElEKCkgKyAoZm9yd2FyZCA/ICIiIDogIiBSRVZFUlNFIikpOworICAgICAgICBvdXQucHJpbnRsbigiOjogIiAKKyAgICAgICAgICAgICsgKGZvcndhcmQgPyAiIiA6ICIoICIpIAorICAgICAgICAgICAgKyBzb3VyY2VTZXQudG9QYXR0ZXJuKHRydWUpIAorICAgICAgICAgICAgKyAoZm9yd2FyZCA/ICIiIDogIiApIikKKyAgICAgICAgICAgICsgIiA7Iik7CisgICAgICAgIG91dC5wcmludGxuKCIjIFVuaWNvZGU6ICIgKyBzb3VyY2VTZXQudG9QYXR0ZXJuKGZhbHNlKSk7CisgICAgICAgIG91dC5wcmludGxuKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdXNhZ2UoKSB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IElEIFsgTkZEfE5GS0QgW2xvd2VyXSBdIik7CisgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9UcmFucy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L1RyYW5zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2UzYzJkZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9UcmFucy5qYXZhCkBAIC0wLDAgKzEsMTQ3IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L1RyYW5zLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMjoxMToyNiAkCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC50cmFuc2xpdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS5pby4qOworCisvKioKKyAqIEEgY29tbWFuZC1saW5lIGludGVyZmFjZSB0byB0aGUgSUNVNEogdHJhbnNsaXRlcmF0b3JzLgorICogQGF1dGhvciBBbGFuIExpdQorICovCitwdWJsaWMgY2xhc3MgVHJhbnMgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGJvb2xlYW4gaXNIVE1MID0gZmFsc2U7CisgICAgICAgIGludCBwb3MgPSAwOworCisgICAgICAgIFN0cmluZyB0cmFuc05hbWUgPSBudWxsOyAvLyBmaXJzdCB1bnRhZ2dlZCBzdHJpbmcgaXMgdGhpcworICAgICAgICBTdHJpbmcgaW5UZXh0ID0gbnVsbDsgLy8gYWxsIG90aGVyIHVudGFnZ2VkIHN0cmluZ3MgYXJlIHRoaXMKKyAgICAgICAgU3RyaW5nIGluTmFtZSA9IG51bGw7CisgICAgICAgIFN0cmluZyBvdXROYW1lID0gbnVsbDsKKworICAgICAgICB3aGlsZSAocG9zIDwgYXJncy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChhcmdzW3Bvc10uZXF1YWxzKCItaHRtbCIpKSB7CisgICAgICAgICAgICAgICAgaXNIVE1MID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1twb3NdLmVxdWFscygiLWkiKSkgeworICAgICAgICAgICAgICAgIGlmICgrK3BvcyA9PSBhcmdzLmxlbmd0aCkgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICBpbk5hbWUgPSBhcmdzW3Bvc107CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbcG9zXS5lcXVhbHMoIi1vIikpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytwb3MgPT0gYXJncy5sZW5ndGgpIHVzYWdlKCk7CisgICAgICAgICAgICAgICAgb3V0TmFtZSA9IGFyZ3NbcG9zXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cmFuc05hbWUgPSBhcmdzW3Bvc107CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpblRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpblRleHQgPSBhcmdzW3Bvc107CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW5UZXh0ID0gaW5UZXh0ICsgIiAiICsgYXJnc1twb3NdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrcG9zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluVGV4dCAhPSBudWxsICYmIGluTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICB9CisKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdHJhbnMgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSh0cmFuc05hbWUpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG51bGw7CisgICAgICAgIGlmIChpbk5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5OYW1lKSwgIlVURjgiKSk7CisgICAgICAgIH0KKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gbnVsbDsKKyAgICAgICAgaWYgKG91dE5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgb3V0ID0gbmV3IFByaW50V3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0TmFtZSksICJVVEY4IikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0ID0gbmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQpOworICAgICAgICB9CisgICAgICAgIHRyYW5zKHRyYW5zLCBpblRleHQsIGluLCBvdXQsIGlzSFRNTCk7CisgICAgICAgIG91dC5jbG9zZSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRyYW5zKFRyYW5zbGl0ZXJhdG9yIHRyYW5zLCBTdHJpbmcgaW5UZXh0LAorICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluLCBQcmludFdyaXRlciBvdXQsIGJvb2xlYW4gaXNIVE1MKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBib29sZWFuIGluVGFnID0gZmFsc2U7IC8vIElmIHRydWUsIHdlIGFyZSB3aXRoaW4gYSA8dGFnPgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgICAgICBpZiAoaW5UZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBsaW5lID0gaW5UZXh0OworICAgICAgICAgICAgICAgIGluVGV4dCA9IG51bGw7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBsaW5lID0gaW4ucmVhZExpbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0hUTUwpIHsKKyAgICAgICAgICAgICAgICAvLyBQYXNzIHRhZ3MgYmV0d2VlbiA8IGFuZCA+IHVuY2hhbmdlZAorICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgaW50IHJpZ2h0ID0gLTE7CisgICAgICAgICAgICAgICAgaWYgKGluVGFnKSB7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbGluZS5pbmRleE9mKCc+Jyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyaWdodCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbGluZS5sZW5ndGgoKS0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQobGluZS5zdWJzdHJpbmcoMCwgcmlnaHQrMSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigiKlM6IiArIGxpbmUuc3Vic3RyaW5nKDAsIHJpZ2h0KzEpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5UYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBpbnQgbGVmdCA9IGxpbmUuaW5kZXhPZignPCcsIHJpZ2h0KzEpOworICAgICAgICAgICAgICAgICAgICBpZiAobGVmdCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdodCA8IGxpbmUubGVuZ3RoKCktMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQodHJhbnMudHJhbnNsaXRlcmF0ZShsaW5lLnN1YnN0cmluZyhyaWdodCsxKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJUOiIgKyBsaW5lLnN1YnN0cmluZyhyaWdodCsxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdHJhbnNsaXRlcmF0ZWQgc2VnbWVudCByaWdodCsxLi5sZWZ0LTEKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCh0cmFucy50cmFuc2xpdGVyYXRlKGxpbmUuc3Vic3RyaW5nKHJpZ2h0KzEsIGxlZnQpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJUOiIgKyBsaW5lLnN1YnN0cmluZyhyaWdodCsxLCBsZWZ0KSk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbGluZS5pbmRleE9mKCc+JywgbGVmdCsxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5UYWcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChsaW5lLnN1YnN0cmluZyhsZWZ0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigiUzoiICsgbGluZS5zdWJzdHJpbmcobGVmdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChsaW5lLnN1YnN0cmluZyhsZWZ0LCByaWdodCsxKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJTOiIgKyBsaW5lLnN1YnN0cmluZyhsZWZ0LCByaWdodCsxKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUgPSBidWYudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGluZSA9IHRyYW5zLnRyYW5zbGl0ZXJhdGUobGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisKKyAgICAvKioKKyAgICAgKiBFbWl0IHVzYWdlIGFuZCBkaWUuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgdXNhZ2UoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNhZ2U6IGphdmEgY29tLmlibS5pY3UuZGV2LnRvb2wudHJhbnNsaXQuVHJhbnMgWy1odG1sXSA8dHJhbnM+ICggPGlucHV0PiB8IC1pIDxpbmZpbGU+KSBbIC1vIDxvdXRmaWxlPiBdIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPHRyYW5zPiAgIE5hbWUgb2YgdHJhbnNsaXRlcmF0b3IiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8aW5wdXQ+ICAgVGV4dCB0byB0cmFuc2xpdGVyYXRlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPGluZmlsZT4gIE5hbWUgb2YgaW5wdXQgZmlsZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjxvdXRmaWxlPiBOYW1lIG9mIG91dHB1dCBmaWxlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWh0bWwgICAgIE9ubHkgdHJhbnNsaXRlcmF0ZSB0ZXh0IG91dHNpZGUgb2YgPHRhZ3M+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5wdXQgbWF5IGNvbWUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIG9yIGEgZmlsZS5cbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk91cHV0IG1heSBnbyB0byBzdGRvdXQgb3IgYSBmaWxlLlxuIik7CisgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9Vbmljb2RlU2V0Q2xvc3VyZS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L1VuaWNvZGVTZXRDbG9zdXJlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDRjNjU5ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9Vbmljb2RlU2V0Q2xvc3VyZS5qYXZhCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvVW5pY29kZVNldENsb3N1cmUuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA2LzIwIDAxOjE3OjM5ICQKKyAqICRSZXZpc2lvbjogMS43ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC50cmFuc2xpdDsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKKy8vaW1wb3J0IGphdmEudGV4dC4qOworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCisvLyBjb20uaWJtLmljdS5kZXYudG9vbC50cmFuc2xpdC5Vbmljb2RlU2V0Q2xvc3VyZQorLy8gY29tLmlibS5pY3UuZGV2LnRlc3QudHJhbnNsaXQuVHJhbnNsaXRlcmF0b3JUZXN0CisKK3B1YmxpYyBjbGFzcyBVbmljb2RlU2V0Q2xvc3VyZSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIAorICAgICAgICBVbmljb2RlU2V0IGZvbyA9IAkgICAgbmV3IFVuaWNvZGVTZXQoIltcdTFGRjYtXHUxRkZEXHUyMDAwLVx1MjAwMVx1MjEyNl0iKTsKKyAgICAgICAgCisgICAgICAgIHRlc3QoKTsKKyAgICAgICAgLyogVGhlIGZvbGxvd2luZyBpcyBzdXBlcmNlZGVkIGJ5IEFsYW4ncyB0b29sCisgICAgICAgIAorICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZSgiVW5pY29kZVNldENsb3N1cmUudHh0Iik7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGYuZ2V0Q2Fub25pY2FsRmlsZSgpLnRvU3RyaW5nKCk7CisgICAgICAgIG91dCA9IG5ldyBQcmludFdyaXRlcigKKyAgICAgICAgICAgIG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCisgICAgICAgICAgICAgICAgbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpLCAiVVRGLTgiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JpdGluZyAiICsgZmlsZW5hbWUpOworICAgICAgICBvdXQucHJpbnQoJ1x1RkVGRicpOyAvLyBCT00KKyAgICAgICAgCisgICAgICAgIGdlbmVyYXRlU2V0cygiTGF0aW4tS2F0YWthbmEiLCB0cnVlLCBOb3JtYWxpemVyLkRFQ09NUF9DT01QQVQsIHRydWUsCisiWycsLmEten5cdTAwREZcdTAwRTZcdTAwRjBcdTAwRjhcdTAwRkVcdTAyQkVcdTAzMDAtXHUwMzRFXHUwMzYwLVx1MDM2Mlx1MDQ4My1cdTA0ODZcdTA1OTEtXHUwNUExXHUwNUEzLVx1MDVCOVx1MDVCQi1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0XHUwNjRCLVx1MDY1NVx1MDY3MFx1MDZENi1cdTA2RENcdTA2REYtXHUwNkU0XHUwNkU3LVx1MDZFOFx1MDZFQS1cdTA2RURcdTA3MTFcdTA3MzAtXHUwNzRBXHUwN0E2LVx1MDdCMFx1MDkwMS1cdTA5MDJcdTA5M0NcdTA5NDEtXHUwOTQ4XHUwOTREXHUwOTUxLVx1MDk1NFx1MDk2Mi1cdTA5NjNcdTA5ODFcdTA5QkNcdTA5QzEtXHUwOUM0XHUwOUNEXHUwOUUyLVx1MDlFM1x1MEEwMlx1MEEzQ1x1MEE0MS1cdTBBNDJcdTBBNDctXHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE3MC1cdTBBNzFcdTBBODEtXHUwQTgyXHUwQUJDXHUwQUMxLVx1MEFDNVx1MEFDNy1cdTBBQzhcdTBBQ0RcdTBCMDFcdTBCM0NcdTBCM0ZcdTBCNDEtXHUwQjQzXHUwQjREXHUwQjU2XHUwQjgyXHUwQkMwXHUwQkNEXHUwQzNFLVx1MEM0MFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1LVx1MEM1Nlx1MENCRlx1MENDNlx1MENDQy1cdTBDQ0RcdTBENDEtXHUwRDQzXHUwRDREXHUwRENBXHUwREQyLVx1MERENFx1MERENlx1MEUzMVx1MEUzNC1cdTBFM0FcdTBFNDctXHUwRTRFXHUwRUIxXHUwRUI0LVx1MEVCOVx1MEVCQi1cdTBFQkNcdTBFQzgtXHUwRUNEXHUwRjE4LVx1MEYxOVx1MEYzNVx1MEYzN1x1MEYzOVx1MEY3MS1cdTBGN0VcdTBGODAtXHUwRjg0XHUwRjg2LVx1MEY4N1x1MEY5MC1cdTBGOTdcdTBGOTktXHUwRkJDXHUwRkM2XHUxMDJELVx1MTAzMFx1MTAzMlx1MTAzNi1cdTEwMzdcdTEwMzlcdTEwNTgtXHUxMDU5XHUxN0I3LVx1MTdCRFx1MTdDNlx1MTdDOS1cdTE3RDNcdTE4QTlcdTIwRDAtXHUyMERDXHUyMEUxXHUzMDJBLVx1MzAyRlx1RkIxRVx1RkUyMC1cdUZFMjNcXFUwMDAxRDE2Ny1cXFUwMDAxRDE2OVxcVTAwMDFEMTdCLVxcVTAwMDFEMTgyXFxVMDAwMUQxODUtXFxVMDAwMUQxOEJcXFUwMDAxRDFBQS1cXFUwMDAxRDFBRF0iCisgICAgICAgICk7CisgICAgICAgIGdlbmVyYXRlU2V0cygiTGF0aW4tS2F0YWthbmEiLCBmYWxzZSwgTm9ybWFsaXplci5ERUNPTVBfQ09NUEFULCBmYWxzZSwKKyJbflx1MzAwMS1cdTMwMDJcdTMwQTEtXHUzMEFCXHUzMEFEXHUzMEFGXHUzMEIxXHUzMEIzXHUzMEI1XHUzMEI3XHUzMEI5XHUzMEJCXHUzMEJEXHUzMEJGXHUzMEMxXHUzMEMzLVx1MzBDNFx1MzBDNlx1MzBDOFx1MzBDQS1cdTMwQ0ZcdTMwRDJcdTMwRDVcdTMwRDhcdTMwREJcdTMwREUtXHUzMEYzXHUzMEY1LVx1MzBGNlx1MzBGQy1cdTMwRkRdIgorICAgICAgICApOworICAgICAgICAKKyAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgIAorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIGlmICh0cnVlKSByZXR1cm47IC8vIHNraXAgdGhlIHN0dWZmIHdlJ3ZlIGRvbmUgYWxyZWFkeQorICAgICAgICAKKyAgICAgICAgZ2VuZXJhdGVTZXRzKCJDeXJpbGxpYy1MYXRpbiIsIHRydWUsIE5vcm1hbGl6ZXIuREVDT01QLCBmYWxzZSwKKyAgICAgICAgICAgICJbXHUwNDAyXHUwNDA0LVx1MDQwNlx1MDQwOC1cdTA0MEJcdTA0MEYtXHUwNDE4XHUwNDFBLVx1MDQzOFx1MDQzQS1cdTA0NEZcdTA0NTJcdTA0NTQtXHUwNDU2XHUwNDU4LVx1MDQ1Qlx1MDQ1Rlx1MDQ5MC1cdTA0OTVcdTA0OTgtXHUwNDk5XHUwNEQ0LVx1MDRENVx1MDREOC1cdTA0RDldIgorICAgICAgICApOworICAgICAgICBnZW5lcmF0ZVNldHMoIkxhdGluLUN5cmlsbGljIiwgZmFsc2UsIE5vcm1hbGl6ZXIuREVDT01QLCBmYWxzZSwKKyAgICAgICAgICAgICJbQS1aYS16XHUwMEM2XHUwMEU2XHUwMTEwLVx1MDExMVx1MDE4Rlx1MDI1OVx1MDJCOS1cdTAyQkFdIgorICAgICAgICApOworICAgICAgICAqLworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZ2VuZXJhdGVTZXRzKFN0cmluZyBsYWJlbCwgYm9vbGVhbiBmb3J3YXJkLCAKKyAgICAgICAgICAgIE5vcm1hbGl6ZXIuTW9kZSBtLCBib29sZWFuIGxvd2VyRmlyc3QsIFN0cmluZyBydWxlcykgeworICAgICAgICBVbmljb2RlU2V0IHMgPSBuZXcgVW5pY29kZVNldChydWxlcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2VuZXJhdGluZyAiICsgbGFiZWwgKyAoZm9yd2FyZCA/ICIiIDogIiBCQUNLV0FSRCIpKTsKKyAgICAgICAgY2xvc2UocywgbSwgbG93ZXJGaXJzdCk7CisgICAgICAgIG91dC5wcmludGxuKCIjIE1JTklNQUwgRklMVEVSIEdFTkVSQVRFRCBGT1I6ICIgKyBsYWJlbCArIChmb3J3YXJkID8gIiIgOiAiIEJBQ0tXQVJEIikpOworICAgICAgICBvdXQucHJpbnRsbigiOjogIiAKKyAgICAgICAgICAgICsgKGZvcndhcmQgPyAiIiA6ICIoICIpIAorICAgICAgICAgICAgKyBzLnRvUGF0dGVybih0cnVlKSAKKyAgICAgICAgICAgICsgKGZvcndhcmQgPyAiIiA6ICIgKSIpCisgICAgICAgICAgICArICIgOyIpOworICAgICAgICBvdXQucHJpbnRsbigpOworICAgICAgICBvdXQucHJpbnRsbigiVW5pY29kZTogIiArIHMudG9QYXR0ZXJuKGZhbHNlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sZWFuIEdFTkVSQVRFID0gZmFsc2U7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoIlRlc3RVbmljb2RlU2V0Q2xvc3VyZS50eHQiKTsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZi5nZXRDYW5vbmljYWxGaWxlKCkudG9TdHJpbmcoKTsKKyAgICAgICAgb3V0ID0gbmV3IFByaW50V3JpdGVyKAorICAgICAgICAgICAgbmV3IE91dHB1dFN0cmVhbVdyaXRlcigKKyAgICAgICAgICAgICAgICBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlbmFtZSksICJVVEYtOCIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcml0aW5nICIgKyBmaWxlbmFtZSk7CisgICAgICAgIG91dC5wcmludCgnXHVGRUZGJyk7IC8vIEJPTQorICAgICAgICAKKyAgICAgICAgR0VORVJBVEUgPSB0cnVlOworICAgICAgICB0ZXN0KCJbOkRldmFuYWdhcmk6XSIpOworICAgICAgICAvKgorICAgICAgICB0ZXN0KCJbXHUwMEUwQmNdIik7CisgICAgICAgIHRlc3QoIlttXSIpOworICAgICAgICAqLworICAgICAgICAKKyAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBmaW5hbCBOb3JtYWxpemVyLk1vZGVbXSB0ZXN0TW9kZXMgPSB7CisgICAgICAgIE5vcm1hbGl6ZXIuTk9ORSwgTm9ybWFsaXplci5ORkQsIE5vcm1hbGl6ZXIuTkZDLCBOb3JtYWxpemVyLk5GS0QsIE5vcm1hbGl6ZXIuTkZLQ307CisgICAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIG1vZGVOYW1lcyA9IHsKKyAgICAgICAgIk5vTkYiLCAiTkZEIiwgIk5GQyIsICJORktEIiwgIk5GS0MifTsKKyAgICAgICAgCisgICAgc3RhdGljIGZpbmFsIGJvb2xlYW5bXSB0ZXN0Q2FzZXMgPSB7CisgICAgICAgIGZhbHNlLCB0cnVlfTsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nW10gY2FzZU5hbWVzID0geworICAgICAgICAibm9Mb3dlciIsICJsb3dlciJ9OworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0KFN0cmluZyB0ZXN0U3RyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVW5pY29kZVNldCBvcmlnaW5hbCA9IG5ldyBVbmljb2RlU2V0KHRlc3RTdHIpOworICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENsb3N1cmUgb2Y6ICIgKyBvcmlnaW5hbC50b1BhdHRlcm4odHJ1ZSkpOworICAgICAgICBvdXQucHJpbnRsbigiVGVzdGluZyBDbG9zdXJlIG9mOiAiICsgb3JpZ2luYWwudG9QYXR0ZXJuKGZhbHNlKSk7CisgICAgICAgIFVuaWNvZGVTZXQgcmF3ID0gbmV3IFVuaWNvZGVTZXQob3JpZ2luYWwpOworICAgICAgICBvcmlnaW5hbC5jb21wbGVtZW50KCk7CisgICAgICAgIG9yaWdpbmFsLmNvbXBsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFyYXcuZXF1YWxzKG9yaWdpbmFsKSkgeworICAgICAgICAgICAgb3V0LnByaW50bG4oIkVxdWFsczoiICsgb3JpZ2luYWwudG9QYXR0ZXJuKGZhbHNlKSk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nV3JpdGVyIHN3TG9nID0gbnVsbDsKKyAgICAgICAgUHJpbnRXcml0ZXIgbG9nID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIGlmIChHRU5FUkFURSkgeworICAgICAgICAgICAgc3dMb2cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisgICAgICAgICAgICBsb2cgPSBuZXcgUHJpbnRXcml0ZXIoc3dMb2cpOworICAgICAgICAgICAgbG9nLnByaW50bG4oInN0YXRpYyBVbmljb2RlU2V0W11bXSBVTkNIQU5HRUQgPSB7Iik7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0Q2FzZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChHRU5FUkFURSkgbG9nLnByaW50bG4oIiAgICB7Iik7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHRlc3RNb2Rlcy5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgIFVuaWNvZGVTZXQgdGVzdCA9IG5ldyBVbmljb2RlU2V0KG9yaWdpbmFsKTsKKyAgICAgICAgICAgICAgICBjbG9zZSh0ZXN0LCB0ZXN0TW9kZXNbal0sIHRlc3RDYXNlc1tpXSk7CisgICAgICAgICAgICAgICAgaWYgKEdFTkVSQVRFKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZy5wcmludGxuKCJcdG5ldyBVbmljb2RlU2V0KFwiIiArIGdlbmVyYXRlZFNldC50b1BhdHRlcm4odHJ1ZSkgKyAiXCIpLCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTdHJpbmcgbGFiZWwgPSBjYXNlTmFtZXNbaV0gICsgIiwgIiArIG1vZGVOYW1lc1tqXSA7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxhYmVsKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihsYWJlbCArICI6ICIgKyB0ZXN0LnRvUGF0dGVybihmYWxzZSkpOworICAgICAgICAgICAgICAgIHRlc3QucmVtb3ZlQWxsKG9yaWdpbmFsKTsKKyAgICAgICAgICAgICAgICBpZiAodGVzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlx0Tm8gRGlmZmVyZW5jZSBmcm9tIG9yaWdpbmFsIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlx0RGlmZmVyZW5jZSA9ICIgKyB0ZXN0LnRvUGF0dGVybihmYWxzZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChHRU5FUkFURSkgbG9nLnByaW50bG4oIiAgICB9LCIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKEdFTkVSQVRFKSB7CisgICAgICAgICAgICBsb2cucHJpbnRsbigifTsiKTsKKyAgICAgICAgICAgIG91dC5wcmludChzd0xvZy5nZXRCdWZmZXIoKS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGNsb3NlKHRlc3QsIE5vcm1hbGl6ZXIuREVDT01QLCBmYWxzZSk7CisgICAgICAgICAgICBwcmludCgiTkZEIiwgdGVzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRlc3QgPSBuZXcgVW5pY29kZVNldCh0ZXN0U3RyKTsKKyAgICAgICAgICAgIGNsb3NlKHRlc3QsIE5vcm1hbGl6ZXIuTk9fT1AsIHRydWUpOworICAgICAgICAgICAgcHJpbnQoIkxvd2VyIiwgdGVzdCk7CisKKyAgICAgICAgICAgIHRlc3QgPSBuZXcgVW5pY29kZVNldCh0ZXN0U3RyKTsKKyAgICAgICAgICAgIGNsb3NlKHRlc3QsIE5vcm1hbGl6ZXIuQ09NUE9TRSwgZmFsc2UpOworICAgICAgICAgICAgcHJpbnQoIk5GQyIsIHRlc3QpOworCisgICAgICAgICAgICB0ZXN0ID0gbmV3IFVuaWNvZGVTZXQodGVzdFN0cik7CisgICAgICAgICAgICBjbG9zZSh0ZXN0LCBOb3JtYWxpemVyLkRFQ09NUF9DT01QQVQsIGZhbHNlKTsKKyAgICAgICAgICAgIHByaW50KCJORktEIiwgdGVzdCk7CisKKyAgICAgICAgICAgIHRlc3QgPSBuZXcgVW5pY29kZVNldCh0ZXN0U3RyKTsKKyAgICAgICAgICAgIGNsb3NlKHRlc3QsIE5vcm1hbGl6ZXIuQ09NUE9TRV9DT01QQVQsIGZhbHNlKTsKKyAgICAgICAgICAgIHByaW50KCJORktDIiwgdGVzdCk7CisgICAgICAgICovCisgICAgfQorICAgIAorICAgIHN0YXRpYyBQcmludFdyaXRlciBvdXQ7CisgICAgCisgICAgLyoKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnQoU3RyaW5nIGxhYmVsLCBVbmljb2RlU2V0IHRlc3QpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxhYmVsKTsKKyAgICAgICAgb3V0LnByaW50bG4obGFiZWwgKyAiOiAiICsgdGVzdC50b1BhdHRlcm4oZmFsc2UpKTsKKyAgICAgICAgb3V0LnByaW50bG4oKTsKKyAgICB9CisgICAgKi8KKyAgICAKKyAgICAvLyBkdW1iLCBzbG93IGltcGxlbWVudGF0aW9ucworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTkZUb1N0cmluZyBpbXBsZW1lbnRzIENoYXIzMlRvU3RyaW5nIHsKKyAgICAgICAgTm9ybWFsaXplci5Nb2RlIG1vZGU7CisgICAgICAgIGJvb2xlYW4gbG93ZXJGaXJzdDsKKyAgICAgICAgCisgICAgICAgIE5GVG9TdHJpbmcoTm9ybWFsaXplci5Nb2RlIG0sIGJvb2xlYW4gbG93ZXJGaXJzdCkgeworICAgICAgICAgICAgbW9kZSA9IG07CisgICAgICAgICAgICB0aGlzLmxvd2VyRmlyc3QgPSBsb3dlckZpcnN0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldChpbnQgY3ApIHsKKyAgICAgICAgICAgIFN0cmluZyBzb3VyY2UgPSBVVEYxNi52YWx1ZU9mKGNwKTsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBzb3VyY2U7CisgICAgICAgICAgICBpZiAobG93ZXJGaXJzdCkgcmVzdWx0ID0gVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShMb2NhbGUuVVMsIHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShyZXN1bHQsIG1vZGUpOworICAgICAgICAgICAgaWYgKGxvd2VyRmlyc3QpIHJlc3VsdCA9IFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoTG9jYWxlLlVTLCByZXN1bHQpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5lcXVhbHMoc291cmNlKSkgcmV0dXJuIG51bGw7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICAKKyAgICAvKiogUmV0dXJucyBhIG1hcHBpbmcgZnJvbSBjaGFyMzIgdG8gYSBzdHJpbmcuIElmIHRoZXJlIGlzIG5vIGNoYW5nZSwKKyAgICAgKiBudWxsIGlzIHJldHVybmVkLgorICAgICAqLworICAgICAKKyAgICBpbnRlcmZhY2UgQ2hhcjMyVG9TdHJpbmcgeworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldChpbnQgY3ApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbGVhbiBGQVNUID0gdHJ1ZTsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xvc2UoVW5pY29kZVNldCBzLCBOb3JtYWxpemVyLk1vZGUgbSwgYm9vbGVhbiBsb3dlckZpcnN0KSB7CisgICAgICAgIENoYXIzMlRvU3RyaW5nIGYgPSBuZXcgTkZUb1N0cmluZyhtLCBsb3dlckZpcnN0KTsKKyAgICAgICAgaWYgKEZBU1QpIHsKKyAgICAgICAgICAgIGludCBtbTsKKyAgICAgICAgICAgIGZvciAobW0gPSAwOyA7ICsrbW0pIGlmIChtID09IHRlc3RNb2Rlc1ttbV0pIGJyZWFrOyAvLyBmaW5kIG1vZGUKKyAgICAgICAgICAgIGNsb3NlMihzLCBmLCBsb3dlckZpcnN0ID8gMSA6IDAsIG1tKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjbG9zZShzLCBmKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGNsb3NlKFVuaWNvZGVTZXQgcywgQ2hhcjMyVG9TdHJpbmcgZikgeworICAgICAgICBpZiAoR0VORVJBVEUpIGdlbmVyYXRlZFNldCA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBjcCA9IDA7IGNwIDw9IDB4MTBGRkZGOyArK2NwKSB7CisgICAgICAgICAgICBpbnQgdHlwZSA9IFVDaGFyYWN0ZXIuZ2V0VHlwZShjcCk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBDaGFyYWN0ZXIuVU5BU1NJR05FRCkgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vaWYgKGNwID09ICdcdTAwZTcnKSB7CisgICAgICAgICAgICAgIC8vICBTeXN0ZW0ub3V0LnByaW50bG4oImRlYnVnIik7CisgICAgICAgICAgICAvL30KKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBmLmdldChjcCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKEdFTkVSQVRFKSB7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVkU2V0LmFkZChjcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5zU29tZShzLCByZXN1bHQpKSBjb250aW51ZTsKKyAgICAgICAgICAgIHMuYWRkKGNwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xvc2UyKFVuaWNvZGVTZXQgcywgQ2hhcjMyVG9TdHJpbmcgZiwgaW50IGxjLCBpbnQgbW9kZSkgeworICAgICAgICBVbmljb2RlU2V0IHVuY2hhbmdlZCA9IG5ldyBVbmljb2RlU2V0KCk7IC8vIFVOQ0hBTkdFRFtsY11bbW9kZV07CisgICAgICAgIGludCBjb3VudCA9IHVuY2hhbmdlZC5nZXRSYW5nZUNvdW50KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgaW50IHN0YXJ0ID0gdW5jaGFuZ2VkLmdldFJhbmdlU3RhcnQoaSk7CisgICAgICAgICAgICBpbnQgZW5kID0gdW5jaGFuZ2VkLmdldFJhbmdlRW5kKGkpOworICAgICAgICAgICAgZm9yIChpbnQgY3AgPSBzdGFydDsgY3AgPD0gZW5kOyArK2NwKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGYuZ2V0KGNwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNvbWV0aGluZyB3cm9uZyAtLSBzaG91bGQgbmV2ZXIgaGFwcGVuIik7CisgICAgICAgICAgICAgICAgaWYgKCFjb250YWluc1NvbWUocywgcmVzdWx0KSkgY29udGludWU7CisgICAgICAgICAgICAgICAgcy5hZGQoY3ApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qCisgICAgc3RhdGljIGZpbmFsIFVuaWNvZGVTZXRbXVtdIFVOQ0hBTkdFRCA9IHsKKyAgICAgICAgeyAvLyBcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMS1cdTFGQzRcdTFGQzYtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZERC1cdTFGRUZcdTFGRjItXHUxRkY0CisJICAgIG5ldyBVbmljb2RlU2V0KCJbXHUxRkY2LVx1MUZGRFx1MjAwMC1cdTIwMDFcdTIxMjZdIiksCisJICAgIC8vIFx1MjEyQS1cdTIxMkJcdTIxOUEtXHUyMTlCXHUyMUFFXHUyMUNELVx1MjFDRlx1MjIwNFx1MjIwOVx1MjIwQ1x1MjIyNFx1MjIyNlx1MjI0MVx1MjI0NFx1MjI0N1x1MjI0OVx1MjI2MFx1MjI2Mlx1MjI2RC1cdTIyNzFcdTIyNzQtXHUyMjc1XHUyMjc4CisJICAgIG5ldyBVbmljb2RlU2V0KCJbXHUwMEMwLVx1MDBDNVx1MDBDNy1cdTAwQ0ZcdTAwRDEtXHUwMEQ2XHUwMEQ5LVx1MDBERFx1MDBFMC1cdTAwRTVcdTAwRTctXHUwMEVGXHUwMEYxLVx1MDBGNlx1MDBGOS1cdTAwRkRcdTAwRkYtXHUwMTBGXHUwMTEyLVx1MDEyNVx1MDEyOC1cdTAxMzBcdTAxMzQtXHUwMTM3XHUwMTM5LVx1MDEzRVx1MDE0My1cdTAxNDhcdTAxNEMtXHUwMTUxXHUwMTU0LVx1MDE2NVx1MDE2OC1cdTAxN0VcdTAxQTAtXHUwMUExXHUwMUFGLVx1MDFCMFx1MDFDRC1cdTAxRENcdTAxREUtXHUwMUUzXHUwMUU2LVx1MDFGMFx1MDFGNC1cdTAxRjVcdTAxRjgtXHUwMjFCXHUwMjFFLVx1MDIxRlx1MDIyNi1cdTAyMzNcdTAzNDAtXHUwMzQxXHUwMzQzLVx1MDM0NFx1MDM3NFx1MDM3RVx1MDM4NS1cdTAzOEFcdTAzOENcdTAzOEUtXHUwMzkwXHUwM0FBLVx1MDNCMFx1MDNDQS1cdTAzQ0VcdTAzRDMtXHUwM0Q0XHUwNDAwLVx1MDQwMVx1MDQwM1x1MDQwN1x1MDQwQy1cdTA0MEVcdTA0MTlcdTA0MzlcdTA0NTAtXHUwNDUxXHUwNDUzXHUwNDU3XHUwNDVDLVx1MDQ1RVx1MDQ3Ni1cdTA0NzdcdTA0QzEtXHUwNEMyXHUwNEQwLVx1MDREM1x1MDRENi1cdTA0RDdcdTA0REEtXHUwNERGXHUwNEUyLVx1MDRFN1x1MDRFQS1cdTA0RjVcdTA0RjgtXHUwNEY5XHUwNjIyLVx1MDYyNlx1MDZDMFx1MDZDMlx1MDZEM1x1MDkyOVx1MDkzMVx1MDkzNFx1MDk1OC1cdTA5NUZcdTA5Q0ItXHUwOUNDXHUwOURDLVx1MDlERFx1MDlERlx1MEEzM1x1MEEzNlx1MEE1OS1cdTBBNUJcdTBBNUVcdTBCNDhcdTBCNEItXHUwQjRDXHUwQjVDLVx1MEI1RFx1MEI5NFx1MEJDQS1cdTBCQ0NcdTBDNDhcdTBDQzBcdTBDQzctXHUwQ0M4XHUwQ0NBLVx1MENDQlx1MEQ0QS1cdTBENENcdTBEREFcdTBEREMtXHUwRERFXHUwRjQzXHUwRjREXHUwRjUyXHUwRjU3XHUwRjVDXHUwRjY5XHUwRjczXHUwRjc1LVx1MEY3Nlx1MEY3OFx1MEY4MVx1MEY5M1x1MEY5RFx1MEZBMlx1MEZBN1x1MEZBQ1x1MEZCOVx1MTAyNlx1MUUwMC1cdTFFOTlcdTFFOUJcdTFFQTAtXHUxRUY5XHUxRjAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzEtXHUxRkM0XHUxRkM2LVx1MUZEM1x1MUZENi1cdTFGREJcdTFGREQtXHUxRkVGXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkRcdTIwMDAtXHUyMDAxXHUyMTI2XHUyMTJBLVx1MjEyQlx1MjE5QS1cdTIxOUJcdTIxQUVcdTIxQ0QtXHUyMUNGXHUyMjA0XHUyMjA5XHUyMjBDXHUyMjI0XHUyMjI2XHUyMjQxXHUyMjQ0XHUyMjQ3XHUyMjQ5XHUyMjYwXHUyMjYyXHUyMjZELVx1MjI3MVx1MjI3NC1cdTIyNzVcdTIyNzgtXHUyMjc5XHUyMjgwLVx1MjI4MVx1MjI4NC1cdTIyODVcdTIyODgtXHUyMjg5XHUyMkFDLVx1MjJBRlx1MjJFMC1cdTIyRTNcdTIyRUEtXHUyMkVEXHUyMzI5LVx1MjMyQVx1MzA0Q1x1MzA0RVx1MzA1MFx1MzA1Mlx1MzA1NFx1MzA1Nlx1MzA1OFx1MzA1QVx1MzA1Q1x1MzA1RVx1MzA2MFx1MzA2Mlx1MzA2NVx1MzA2N1x1MzA2OVx1MzA3MC1cdTMwNzFcdTMwNzMtXHUzMDc0XHUzMDc2LVx1MzA3N1x1MzA3OS1cdTMwN0FcdTMwN0MtXHUzMDdEXHUzMDk0XHUzMDlFXHUzMEFDXHUzMEFFXHUzMEIwXHUzMEIyXHUzMEI0XHUzMEI2XHUzMEI4XHUzMEJBXHUzMEJDXHUzMEJFXHUzMEMwXHUzMEMyXHUzMEM1XHUzMEM3XHUzMEM5XHUzMEQwLVx1MzBEMVx1MzBEMy1cdTMwRDRcdTMwRDYtXHUzMEQ3XHUzMEQ5LVx1MzBEQVx1MzBEQy1cdTMwRERcdTMwRjRcdTMwRjctXHUzMEZBXHUzMEZFXHVBQzAwLVx1RDdBM1x1RjkwMC1cdUZBMERcdUZBMTBcdUZBMTJcdUZBMTUtXHVGQTFFXHVGQTIwXHVGQTIyXHVGQTI1LVx1RkEyNlx1RkEyQS1cdUZBMkRcdUZCMURcdUZCMUZcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MC1cdUZCNDFcdUZCNDMtXHVGQjQ0XHVGQjQ2LVx1RkI0RV0iKSwKKwkgICAgbmV3IFVuaWNvZGVTZXQoIltcdTAzNDAtXHUwMzQxXHUwMzQzLVx1MDM0NFx1MDM3NFx1MDM3RVx1MDM4N1x1MDk1OC1cdTA5NUZcdTA5REMtXHUwOUREXHUwOURGXHUwQTMzXHUwQTM2XHUwQTU5LVx1MEE1Qlx1MEE1RVx1MEI1Qy1cdTBCNURcdTBGNDNcdTBGNERcdTBGNTJcdTBGNTdcdTBGNUNcdTBGNjlcdTBGNzNcdTBGNzUtXHUwRjc2XHUwRjc4XHUwRjgxXHUwRjkzXHUwRjlEXHUwRkEyXHUwRkE3XHUwRkFDXHUwRkI5XHUxRjcxXHUxRjczXHUxRjc1XHUxRjc3XHUxRjc5XHUxRjdCXHUxRjdEXHUxRkJCXHUxRkJFXHUxRkM5XHUxRkNCXHUxRkQzXHUxRkRCXHUxRkUzXHUxRkVCXHUxRkVFLVx1MUZFRlx1MUZGOVx1MUZGQlx1MUZGRFx1MjAwMC1cdTIwMDFcdTIxMjZcdTIxMkEtXHUyMTJCXHUyMzI5LVx1MjMyQVx1RjkwMC1cdUZBMERcdUZBMTBcdUZBMTJcdUZBMTUtXHVGQTFFXHVGQTIwXHVGQTIyXHVGQTI1LVx1RkEyNlx1RkEyQS1cdUZBMkRcdUZCMUZcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MC1cdUZCNDFcdUZCNDMtXHVGQjQ0XHVGQjQ2LVx1RkI0RV0iKSwKKwkgICAgbmV3IFVuaWNvZGVTZXQoIltcdTAwQTBcdTAwQThcdTAwQUFcdTAwQUZcdTAwQjItXHUwMEI1XHUwMEI4LVx1MDBCQVx1MDBCQy1cdTAwQkVcdTAwQzAtXHUwMEM1XHUwMEM3LVx1MDBDRlx1MDBEMS1cdTAwRDZcdTAwRDktXHUwMEREXHUwMEUwLVx1MDBFNVx1MDBFNy1cdTAwRUZcdTAwRjEtXHUwMEY2XHUwMEY5LVx1MDBGRFx1MDBGRi1cdTAxMEZcdTAxMTItXHUwMTI1XHUwMTI4LVx1MDEzMFx1MDEzMi1cdTAxMzdcdTAxMzktXHUwMTQwXHUwMTQzLVx1MDE0OVx1MDE0Qy1cdTAxNTFcdTAxNTQtXHUwMTY1XHUwMTY4LVx1MDE3Rlx1MDFBMC1cdTAxQTFcdTAxQUYtXHUwMUIwXHUwMUM0LVx1MDFEQ1x1MDFERS1cdTAxRTNcdTAxRTYtXHUwMUY1XHUwMUY4LVx1MDIxQlx1MDIxRS1cdTAyMUZcdTAyMjYtXHUwMjMzXHUwMkIwLVx1MDJCOFx1MDJEOC1cdTAyRERcdTAyRTAtXHUwMkU0XHUwMzQwLVx1MDM0MVx1MDM0My1cdTAzNDRcdTAzNzRcdTAzN0FcdTAzN0VcdTAzODQtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDM5MFx1MDNBQS1cdTAzQjBcdTAzQ0EtXHUwM0NFXHUwM0QwLVx1MDNENlx1MDNGMC1cdTAzRjJcdTA0MDAtXHUwNDAxXHUwNDAzXHUwNDA3XHUwNDBDLVx1MDQwRVx1MDQxOVx1MDQzOVx1MDQ1MC1cdTA0NTFcdTA0NTNcdTA0NTdcdTA0NUMtXHUwNDVFXHUwNDc2LVx1MDQ3N1x1MDRDMS1cdTA0QzJcdTA0RDAtXHUwNEQzXHUwNEQ2LVx1MDREN1x1MDREQS1cdTA0REZcdTA0RTItXHUwNEU3XHUwNEVBLVx1MDRGNVx1MDRGOC1cdTA0RjlcdTA1ODdcdTA2MjItXHUwNjI2XHUwNjc1LVx1MDY3OFx1MDZDMFx1MDZDMlx1MDZEM1x1MDkyOVx1MDkzMVx1MDkzNFx1MDk1OC1cdTA5NUZcdTA5Q0ItXHUwOUNDXHUwOURDLVx1MDlERFx1MDlERlx1MEEzM1x1MEEzNlx1MEE1OS1cdTBBNUJcdTBBNUVcdTBCNDhcdTBCNEItXHUwQjRDXHUwQjVDLVx1MEI1RFx1MEI5NFx1MEJDQS1cdTBCQ0NcdTBDNDhcdTBDQzBcdTBDQzctXHUwQ0M4XHUwQ0NBLVx1MENDQlx1MEQ0QS1cdTBENENcdTBEREFcdTBEREMtXHUwRERFXHUwRTMzXHUwRUIzXHUwRURDLVx1MEVERFx1MEYwQ1x1MEY0M1x1MEY0RFx1MEY1Mlx1MEY1N1x1MEY1Q1x1MEY2OVx1MEY3M1x1MEY3NS1cdTBGNzlcdTBGODFcdTBGOTNcdTBGOURcdTBGQTJcdTBGQTdcdTBGQUNcdTBGQjlcdTEwMjZcdTFFMDAtXHUxRTlCXHUxRUEwLVx1MUVGOVx1MUYwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkM0XHUxRkM2LVx1MUZEM1x1MUZENi1cdTFGREJcdTFGREQtXHUxRkVGXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkVcdTIwMDAtXHUyMDBBXHUyMDExXHUyMDE3XHUyMDI0LVx1MjAyNlx1MjAyRlx1MjAzMy1cdTIwMzRcdTIwMzYtXHUyMDM3XHUyMDNDXHUyMDNFXHUyMDQ4LVx1MjA0OVx1MjA3MFx1MjA3NC1cdTIwOEVcdTIwQThcdTIxMDAtXHUyMTAzXHUyMTA1LVx1MjEwN1x1MjEwOS1cdTIxMTNcdTIxMTUtXHUyMTE2XHUyMTE5LVx1MjExRFx1MjEyMC1cdTIxMjJcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzMVx1MjEzMy1cdTIxMzlcdTIxNTMtXHUyMTdGXHUyMTlBLVx1MjE5Qlx1MjFBRVx1MjFDRC1cdTIxQ0ZcdTIyMDRcdTIyMDlcdTIyMENcdTIyMjRcdTIyMjZcdTIyMkMtXHUyMjJEXHUyMjJGLVx1MjIzMFx1MjI0MVx1MjI0NFx1MjI0N1x1MjI0OVx1MjI2MFx1MjI2Mlx1MjI2RC1cdTIyNzFcdTIyNzQtXHUyMjc1XHUyMjc4LVx1MjI3OVx1MjI4MC1cdTIyODFcdTIyODQtXHUyMjg1XHUyMjg4LVx1MjI4OVx1MjJBQy1cdTIyQUZcdTIyRTAtXHUyMkUzXHUyMkVBLVx1MjJFRFx1MjMyOS1cdTIzMkFcdTI0NjAtXHUyNEVBXHUyRTlGXHUyRUYzXHUyRjAwLVx1MkZENVx1MzAwMFx1MzAzNlx1MzAzOC1cdTMwM0FcdTMwNENcdTMwNEVcdTMwNTBcdTMwNTJcdTMwNTRcdTMwNTZcdTMwNThcdTMwNUFcdTMwNUNcdTMwNUVcdTMwNjBcdTMwNjJcdTMwNjVcdTMwNjdcdTMwNjlcdTMwNzAtXHUzMDcxXHUzMDczLVx1MzA3NFx1MzA3Ni1cdTMwNzdcdTMwNzktXHUzMDdBXHUzMDdDLVx1MzA3RFx1MzA5NFx1MzA5Qi1cdTMwOUNcdTMwOUVcdTMwQUNcdTMwQUVcdTMwQjBcdTMwQjJcdTMwQjRcdTMwQjZcdTMwQjhcdTMwQkFcdTMwQkNcdTMwQkVcdTMwQzBcdTMwQzJcdTMwQzVcdTMwQzdcdTMwQzlcdTMwRDAtXHUzMEQxXHUzMEQzLVx1MzBENFx1MzBENi1cdTMwRDdcdTMwRDktXHUzMERBXHUzMERDLVx1MzBERFx1MzBGNFx1MzBGNy1cdTMwRkFcdTMwRkVcdTMxMzEtXHUzMThFXHUzMTkyLVx1MzE5Rlx1MzIwMC1cdTMyMUNcdTMyMjAtXHUzMjQzXHUzMjYwLVx1MzI3Qlx1MzI4MC1cdTMyQjBcdTMyQzAtXHUzMkNCXHUzMkQwLVx1MzJGRVx1MzMwMC1cdTMzNzZcdTMzN0ItXHUzM0REXHUzM0UwLVx1MzNGRVx1QUMwMC1cdUQ3QTNcdUY5MDAtXHVGQTBEXHVGQTEwXHVGQTEyXHVGQTE1LVx1RkExRVx1RkEyMFx1RkEyMlx1RkEyNS1cdUZBMjZcdUZBMkEtXHVGQTJEXHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MC1cdUZCNDFcdUZCNDMtXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFMzAtXHVGRTQ0XHVGRTQ5LVx1RkU1Mlx1RkU1NC1cdUZFNjZcdUZFNjgtXHVGRTZCXHVGRTcwLVx1RkU3Mlx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMDEtXHVGRjVFXHVGRjYxLVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENcdUZGRTAtXHVGRkU2XHVGRkU4LVx1RkZFRV0iKSwKKwkgICAgbmV3IFVuaWNvZGVTZXQoIltcdTAwQTBcdTAwQThcdTAwQUFcdTAwQUZcdTAwQjItXHUwMEI1XHUwMEI4LVx1MDBCQVx1MDBCQy1cdTAwQkVcdTAxMzItXHUwMTMzXHUwMTNGLVx1MDE0MFx1MDE0OVx1MDE3Rlx1MDFDNC1cdTAxQ0NcdTAxRjEtXHUwMUYzXHUwMkIwLVx1MDJCOFx1MDJEOC1cdTAyRERcdTAyRTAtXHUwMkU0XHUwMzQwLVx1MDM0MVx1MDM0My1cdTAzNDRcdTAzNzRcdTAzN0FcdTAzN0VcdTAzODQtXHUwMzg1XHUwMzg3XHUwM0QwLVx1MDNENlx1MDNGMC1cdTAzRjJcdTA1ODdcdTA2NzUtXHUwNjc4XHUwOTU4LVx1MDk1Rlx1MDlEQy1cdTA5RERcdTA5REZcdTBBMzNcdTBBMzZcdTBBNTktXHUwQTVCXHUwQTVFXHUwQjVDLVx1MEI1RFx1MEUzM1x1MEVCM1x1MEVEQy1cdTBFRERcdTBGMENcdTBGNDNcdTBGNERcdTBGNTJcdTBGNTdcdTBGNUNcdTBGNjlcdTBGNzNcdTBGNzUtXHUwRjc5XHUwRjgxXHUwRjkzXHUwRjlEXHUwRkEyXHUwRkE3XHUwRkFDXHUwRkI5XHUxRTlBLVx1MUU5Qlx1MUY3MVx1MUY3M1x1MUY3NVx1MUY3N1x1MUY3OVx1MUY3Qlx1MUY3RFx1MUZCQlx1MUZCRC1cdTFGQzFcdTFGQzlcdTFGQ0JcdTFGQ0QtXHUxRkNGXHUxRkQzXHUxRkRCXHUxRkRELVx1MUZERlx1MUZFM1x1MUZFQlx1MUZFRC1cdTFGRUZcdTFGRjlcdTFGRkJcdTFGRkQtXHUxRkZFXHUyMDAwLVx1MjAwQVx1MjAxMVx1MjAxN1x1MjAyNC1cdTIwMjZcdTIwMkZcdTIwMzMtXHUyMDM0XHUyMDM2LVx1MjAzN1x1MjAzQ1x1MjAzRVx1MjA0OC1cdTIwNDlcdTIwNzBcdTIwNzQtXHUyMDhFXHUyMEE4XHUyMTAwLVx1MjEwM1x1MjEwNS1cdTIxMDdcdTIxMDktXHUyMTEzXHUyMTE1LVx1MjExNlx1MjExOS1cdTIxMURcdTIxMjAtXHUyMTIyXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzFcdTIxMzMtXHUyMTM5XHUyMTUzLVx1MjE3Rlx1MjIyQy1cdTIyMkRcdTIyMkYtXHUyMjMwXHUyMzI5LVx1MjMyQVx1MjQ2MC1cdTI0RUFcdTJFOUZcdTJFRjNcdTJGMDAtXHUyRkQ1XHUzMDAwXHUzMDM2XHUzMDM4LVx1MzAzQVx1MzA5Qi1cdTMwOUNcdTMxMzEtXHUzMThFXHUzMTkyLVx1MzE5Rlx1MzIwMC1cdTMyMUNcdTMyMjAtXHUzMjQzXHUzMjYwLVx1MzI3Qlx1MzI4MC1cdTMyQjBcdTMyQzAtXHUzMkNCXHUzMkQwLVx1MzJGRVx1MzMwMC1cdTMzNzZcdTMzN0ItXHUzM0REXHUzM0UwLVx1MzNGRVx1RjkwMC1cdUZBMERcdUZBMTBcdUZBMTJcdUZBMTUtXHVGQTFFXHVGQTIwXHVGQTIyXHVGQTI1LVx1RkEyNlx1RkEyQS1cdUZBMkRcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRi1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwLVx1RkI0MVx1RkI0My1cdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUzMC1cdUZFNDRcdUZFNDktXHVGRTUyXHVGRTU0LVx1RkU2Nlx1RkU2OC1cdUZFNkJcdUZFNzAtXHVGRTcyXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYwMS1cdUZGNUVcdUZGNjEtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ1x1RkZFMC1cdUZGRTZcdUZGRTgtXHVGRkVFXSIpLAorICAgICAgICB9LAorICAgICAgICB7CisJICAgIG5ldyBVbmljb2RlU2V0KCJbQS1aXHUwMEIyLVx1MDBCM1x1MDBCNVx1MDBCOVx1MDBCQy1cdTAwQkVcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBERVx1MDEwMFx1MDEwMlx1MDEwNFx1MDEwNlx1MDEwOFx1MDEwQVx1MDEwQ1x1MDEwRVx1MDExMFx1MDExMlx1MDExNFx1MDExNlx1MDExOFx1MDExQVx1MDExQ1x1MDExRVx1MDEyMFx1MDEyMlx1MDEyNFx1MDEyNlx1MDEyOFx1MDEyQVx1MDEyQ1x1MDEyRVx1MDEzMC1cdTAxMzJcdTAxMzRcdTAxMzZcdTAxMzlcdTAxM0JcdTAxM0RcdTAxM0ZcdTAxNDFcdTAxNDNcdTAxNDVcdTAxNDdcdTAxNEFcdTAxNENcdTAxNEVcdTAxNTBcdTAxNTJcdTAxNTRcdTAxNTZcdTAxNThcdTAxNUFcdTAxNUNcdTAxNUVcdTAxNjBcdTAxNjJcdTAxNjRcdTAxNjZcdTAxNjhcdTAxNkFcdTAxNkNcdTAxNkVcdTAxNzBcdTAxNzJcdTAxNzRcdTAxNzZcdTAxNzgtXHUwMTc5XHUwMTdCXHUwMTdEXHUwMTdGXHUwMTgxLVx1MDE4Mlx1MDE4NFx1MDE4Ni1cdTAxODdcdTAxODktXHUwMThCXHUwMThFLVx1MDE5MVx1MDE5My1cdTAxOTRcdTAxOTYtXHUwMTk4XHUwMTlDLVx1MDE5RFx1MDE5Ri1cdTAxQTBcdTAxQTJcdTAxQTRcdTAxQTYtXHUwMUE3XHUwMUE5XHUwMUFDXHUwMUFFLVx1MDFBRlx1MDFCMS1cdTAxQjNcdTAxQjVcdTAxQjctXHUwMUI4XHUwMUJDXHUwMUM0LVx1MDFDRFx1MDFDRlx1MDFEMVx1MDFEM1x1MDFENVx1MDFEN1x1MDFEOVx1MDFEQlx1MDFERVx1MDFFMFx1MDFFMlx1MDFFNFx1MDFFNlx1MDFFOFx1MDFFQVx1MDFFQ1x1MDFFRVx1MDFGMS1cdTAxRjRcdTAxRjYtXHUwMUY4XHUwMUZBXHUwMUZDXHUwMUZFXHUwMjAwXHUwMjAyXHUwMjA0XHUwMjA2XHUwMjA4XHUwMjBBXHUwMjBDXHUwMjBFXHUwMjEwXHUwMjEyXHUwMjE0XHUwMjE2XHUwMjE4XHUwMjFBXHUwMjFDXHUwMjFFXHUwMjIyXHUwMjI0XHUwMjI2XHUwMjI4XHUwMjJBXHUwMjJDXHUwMjJFXHUwMjMwXHUwMjMyXHUwMzQ1XHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzOEZcdTAzOTEtXHUwM0ExXHUwM0EzLVx1MDNBQlx1MDNDMlx1MDNEMC1cdTAzRDFcdTAzRDUtXHUwM0Q2XHUwM0RBXHUwM0RDXHUwM0RFXHUwM0UwXHUwM0UyXHUwM0U0XHUwM0U2XHUwM0U4XHUwM0VBXHUwM0VDXHUwM0VFXHUwM0YwLVx1MDNGMlx1MDNGNC1cdTAzRjVcdTA0MDAtXHUwNDJGXHUwNDYwXHUwNDYyXHUwNDY0XHUwNDY2XHUwNDY4XHUwNDZBXHUwNDZDXHUwNDZFXHUwNDcwXHUwNDcyXHUwNDc0XHUwNDc2XHUwNDc4XHUwNDdBXHUwNDdDXHUwNDdFXHUwNDgwXHUwNDhDXHUwNDhFXHUwNDkwXHUwNDkyXHUwNDk0XHUwNDk2XHUwNDk4XHUwNDlBXHUwNDlDXHUwNDlFXHUwNEEwXHUwNEEyXHUwNEE0XHUwNEE2XHUwNEE4XHUwNEFBXHUwNEFDXHUwNEFFXHUwNEIwXHUwNEIyXHUwNEI0XHUwNEI2XHUwNEI4XHUwNEJBXHUwNEJDXHUwNEJFXHUwNEMxXHUwNEMzXHUwNEM3XHUwNENCXHUwNEQwXHUwNEQyXHUwNEQ0XHUwNEQ2XHUwNEQ4XHUwNERBXHUwNERDXHUwNERFXHUwNEUwXHUwNEUyXHUwNEU0XHUwNEU2XHUwNEU4XHUwNEVBXHUwNEVDXHUwNEVFXHUwNEYwXHUwNEYyXHUwNEY0XHUwNEY4XHUwNTMxLVx1MDU1Nlx1MDlGOFx1MEYyQS1cdTBGMzNcdTEzN0NcdTFFMDBcdTFFMDJcdTFFMDRcdTFFMDZcdTFFMDhcdTFFMEFcdTFFMENcdTFFMEVcdTFFMTBcdTFFMTJcdTFFMTRcdTFFMTZcdTFFMThcdTFFMUFcdTFFMUNcdTFFMUVcdTFFMjBcdTFFMjJcdTFFMjRcdTFFMjZcdTFFMjhcdTFFMkFcdTFFMkNcdTFFMkVcdTFFMzBcdTFFMzJcdTFFMzRcdTFFMzZcdTFFMzhcdTFFM0FcdTFFM0NcdTFFM0VcdTFFNDBcdTFFNDJcdTFFNDRcdTFFNDZcdTFFNDhcdTFFNEFcdTFFNENcdTFFNEVcdTFFNTBcdTFFNTJcdTFFNTRcdTFFNTZcdTFFNThcdTFFNUFcdTFFNUNcdTFFNUVcdTFFNjBcdTFFNjJcdTFFNjRcdTFFNjZcdTFFNjhcdTFFNkFcdTFFNkNcdTFFNkVcdTFFNzBcdTFFNzJcdTFFNzRcdTFFNzZcdTFFNzhcdTFFN0FcdTFFN0NcdTFFN0VcdTFFODBcdTFFODJcdTFFODRcdTFFODZcdTFFODhcdTFFOEFcdTFFOENcdTFFOEVcdTFFOTBcdTFFOTJcdTFFOTRcdTFFOUJcdTFFQTBcdTFFQTJcdTFFQTRcdTFFQTZcdTFFQThcdTFFQUFcdTFFQUNcdTFFQUVcdTFFQjBcdTFFQjJcdTFFQjRcdTFFQjZcdTFFQjhcdTFFQkFcdTFFQkNcdTFFQkVcdTFFQzBcdTFFQzJcdTFFQzRcdTFFQzZcdTFFQzhcdTFFQ0FcdTFFQ0NcdTFFQ0VcdTFFRDBcdTFFRDJcdTFFRDRcdTFFRDZcdTFFRDhcdTFFREFcdTFFRENcdTFFREVcdTFFRTBcdTFFRTJcdTFFRTRcdTFFRTZcdTFFRThcdTFFRUFcdTFFRUNcdTFFRUVcdTFFRjBcdTFFRjJcdTFFRjRcdTFFRjZcdTFFRjhcdTFGMDgtXHUxRjBGXHUxRjE4LVx1MUYxRFx1MUYyOC1cdTFGMkZcdTFGMzgtXHUxRjNGXHUxRjQ4LVx1MUY0RFx1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Rlx1MUY2OC1cdTFGNkZcdTFGODgtXHUxRjhGXHUxRjk4LVx1MUY5Rlx1MUZBOC1cdTFGQUZcdTFGQjgtXHUxRkJDXHUxRkJFXHUxRkM4LVx1MUZDQ1x1MUZEOC1cdTFGREJcdTFGRTgtXHUxRkVDXHUxRkY4LVx1MUZGQ1x1MjA3MFx1MjA3NC1cdTIwNzlcdTIwODAtXHUyMDg5XHUyMTI2XHUyMTJBLVx1MjEyQlx1MjE1My1cdTIxNUVcdTIxNjAtXHUyMTdGXHUyMTgxLVx1MjE4M1x1MjQ2MC1cdTI0NjhcdTI0NzQtXHUyNDdDXHUyNDg4LVx1MjQ5MFx1MjRCNi1cdTI0RUFcdTI3NzYtXHUyNzdFXHUyNzgwLVx1Mjc4OFx1Mjc4QS1cdTI3OTJcdUZGMjEtXHVGRjNBXFxVMDAwMTAzNEFcXFUwMDAxMDQwMC1cXFUwMDAxMDQyNVxcVTAwMDFEMTY1LVxcVTAwMDFEMTY2XFxVMDAwMUQxNkQtXFxVMDAwMUQxNzJdIiksCisJICAgIG5ldyBVbmljb2RlU2V0KCJbQS1aXHUwMEIyLVx1MDBCM1x1MDBCNVx1MDBCOVx1MDBCQy1cdTAwQkVcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBERVx1MDBFMC1cdTAwRTVcdTAwRTctXHUwMEVGXHUwMEYxLVx1MDBGNlx1MDBGOS1cdTAwRkRcdTAwRkYtXHUwMTEwXHUwMTEyLVx1MDEyNlx1MDEyOC1cdTAxMzJcdTAxMzQtXHUwMTM3XHUwMTM5LVx1MDEzRlx1MDE0MVx1MDE0My1cdTAxNDhcdTAxNEFcdTAxNEMtXHUwMTUyXHUwMTU0LVx1MDE2Nlx1MDE2OC1cdTAxN0ZcdTAxODEtXHUwMTgyXHUwMTg0XHUwMTg2LVx1MDE4N1x1MDE4OS1cdTAxOEJcdTAxOEUtXHUwMTkxXHUwMTkzLVx1MDE5NFx1MDE5Ni1cdTAxOThcdTAxOUMtXHUwMTlEXHUwMTlGLVx1MDFBMlx1MDFBNFx1MDFBNi1cdTAxQTdcdTAxQTlcdTAxQUNcdTAxQUUtXHUwMUIzXHUwMUI1XHUwMUI3LVx1MDFCOFx1MDFCQ1x1MDFDNC1cdTAxRENcdTAxREUtXHUwMUU0XHUwMUU2LVx1MDIxQ1x1MDIxRS1cdTAyMUZcdTAyMjJcdTAyMjRcdTAyMjYtXHUwMjMzXHUwMzQwLVx1MDM0MVx1MDM0My1cdTAzNDVcdTAzNzRcdTAzN0VcdTAzODUtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzQjBcdTAzQzJcdTAzQ0EtXHUwM0NFXHUwM0QwLVx1MDNEMVx1MDNEMy1cdTAzRDZcdTAzREFcdTAzRENcdTAzREVcdTAzRTBcdTAzRTJcdTAzRTRcdTAzRTZcdTAzRThcdTAzRUFcdTAzRUNcdTAzRUVcdTAzRjAtXHUwM0YyXHUwM0Y0LVx1MDNGNVx1MDQwMC1cdTA0MkZcdTA0MzlcdTA0NTAtXHUwNDUxXHUwNDUzXHUwNDU3XHUwNDVDLVx1MDQ1RVx1MDQ2MFx1MDQ2Mlx1MDQ2NFx1MDQ2Nlx1MDQ2OFx1MDQ2QVx1MDQ2Q1x1MDQ2RVx1MDQ3MFx1MDQ3Mlx1MDQ3NFx1MDQ3Ni1cdTA0NzhcdTA0N0FcdTA0N0NcdTA0N0VcdTA0ODBcdTA0OENcdTA0OEVcdTA0OTBcdTA0OTJcdTA0OTRcdTA0OTZcdTA0OThcdTA0OUFcdTA0OUNcdTA0OUVcdTA0QTBcdTA0QTJcdTA0QTRcdTA0QTZcdTA0QThcdTA0QUFcdTA0QUNcdTA0QUVcdTA0QjBcdTA0QjJcdTA0QjRcdTA0QjZcdTA0QjhcdTA0QkFcdTA0QkNcdTA0QkVcdTA0QzEtXHUwNEMzXHUwNEM3XHUwNENCXHUwNEQwLVx1MDRENFx1MDRENi1cdTA0RDhcdTA0REEtXHUwNEUwXHUwNEUyLVx1MDRFOFx1MDRFQS1cdTA0RjVcdTA0RjgtXHUwNEY5XHUwNTMxLVx1MDU1Nlx1MDYyMi1cdTA2MjZcdTA2QzBcdTA2QzJcdTA2RDNcdTA5MjlcdTA5MzFcdTA5MzRcdTA5NTgtXHUwOTVGXHUwOUNCLVx1MDlDQ1x1MDlEQy1cdTA5RERcdTA5REZcdTA5RjhcdTBBMzNcdTBBMzZcdTBBNTktXHUwQTVCXHUwQTVFXHUwQjQ4XHUwQjRCLVx1MEI0Q1x1MEI1Qy1cdTBCNURcdTBCOTRcdTBCQ0EtXHUwQkNDXHUwQzQ4XHUwQ0MwXHUwQ0M3LVx1MENDOFx1MENDQS1cdTBDQ0JcdTBENEEtXHUwRDRDXHUwRERBXHUwRERDLVx1MERERVx1MEYyQS1cdTBGMzNcdTBGNDNcdTBGNERcdTBGNTJcdTBGNTdcdTBGNUNcdTBGNjlcdTBGNzNcdTBGNzUtXHUwRjc2XHUwRjc4XHUwRjgxXHUwRjkzXHUwRjlEXHUwRkEyXHUwRkE3XHUwRkFDXHUwRkI5XHUxMDI2XHUxMzdDXHUxRTAwLVx1MUU5OVx1MUU5Qlx1MUVBMC1cdTFFRjlcdTFGMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMS1cdTFGQzRcdTFGQzYtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZERC1cdTFGRUZcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGRFx1MjAwMC1cdTIwMDFcdTIwNzBcdTIwNzQtXHUyMDc5XHUyMDgwLVx1MjA4OVx1MjEyNlx1MjEyQS1cdTIxMkJcdTIxNTMtXHUyMTVFXHUyMTYwLVx1MjE3Rlx1MjE4MS1cdTIxODNcdTIxOUEtXHUyMTlCXHUyMUFFXHUyMUNELVx1MjFDRlx1MjIwNFx1MjIwOVx1MjIwQ1x1MjIyNFx1MjIyNlx1MjI0MVx1MjI0NFx1MjI0N1x1MjI0OVx1MjI2MFx1MjI2Mlx1MjI2RC1cdTIyNzFcdTIyNzQtXHUyMjc1XHUyMjc4LVx1MjI3OVx1MjI4MC1cdTIyODFcdTIyODQtXHUyMjg1XHUyMjg4LVx1MjI4OVx1MjJBQy1cdTIyQUZcdTIyRTAtXHUyMkUzXHUyMkVBLVx1MjJFRFx1MjMyOS1cdTIzMkFcdTI0NjAtXHUyNDY4XHUyNDc0LVx1MjQ3Q1x1MjQ4OC1cdTI0OTBcdTI0QjYtXHUyNEVBXHUyNzc2LVx1Mjc3RVx1Mjc4MC1cdTI3ODhcdTI3OEEtXHUyNzkyXHUzMDRDXHUzMDRFXHUzMDUwXHUzMDUyXHUzMDU0XHUzMDU2XHUzMDU4XHUzMDVBXHUzMDVDXHUzMDVFXHUzMDYwXHUzMDYyXHUzMDY1XHUzMDY3XHUzMDY5XHUzMDcwLVx1MzA3MVx1MzA3My1cdTMwNzRcdTMwNzYtXHUzMDc3XHUzMDc5LVx1MzA3QVx1MzA3Qy1cdTMwN0RcdTMwOTRcdTMwOUVcdTMwQUNcdTMwQUVcdTMwQjBcdTMwQjJcdTMwQjRcdTMwQjZcdTMwQjhcdTMwQkFcdTMwQkNcdTMwQkVcdTMwQzBcdTMwQzJcdTMwQzVcdTMwQzdcdTMwQzlcdTMwRDAtXHUzMEQxXHUzMEQzLVx1MzBENFx1MzBENi1cdTMwRDdcdTMwRDktXHUzMERBXHUzMERDLVx1MzBERFx1MzBGNFx1MzBGNy1cdTMwRkFcdTMwRkVcdUFDMDAtXHVEN0EzXHVGOTAwLVx1RkEwRFx1RkExMFx1RkExMlx1RkExNS1cdUZBMUVcdUZBMjBcdUZBMjJcdUZBMjUtXHVGQTI2XHVGQTJBLVx1RkEyRFx1RkIxRFx1RkIxRlx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwLVx1RkI0MVx1RkI0My1cdUZCNDRcdUZCNDYtXHVGQjRFXHVGRjIxLVx1RkYzQVxcVTAwMDEwMzRBXFxVMDAwMTA0MDAtXFxVMDAwMTA0MjVcXFUwMDAxRDE2NS1cXFUwMDAxRDE2NlxcVTAwMDFEMTZELVxcVTAwMDFEMTcyXSIpLAorCSAgICBuZXcgVW5pY29kZVNldCgiW0EtWlx1MDBCMi1cdTAwQjNcdTAwQjVcdTAwQjlcdTAwQkMtXHUwMEJFXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwREVcdTAxMDBcdTAxMDJcdTAxMDRcdTAxMDZcdTAxMDhcdTAxMEFcdTAxMENcdTAxMEVcdTAxMTBcdTAxMTJcdTAxMTRcdTAxMTZcdTAxMThcdTAxMUFcdTAxMUNcdTAxMUVcdTAxMjBcdTAxMjJcdTAxMjRcdTAxMjZcdTAxMjhcdTAxMkFcdTAxMkNcdTAxMkVcdTAxMzAtXHUwMTMyXHUwMTM0XHUwMTM2XHUwMTM5XHUwMTNCXHUwMTNEXHUwMTNGXHUwMTQxXHUwMTQzXHUwMTQ1XHUwMTQ3XHUwMTRBXHUwMTRDXHUwMTRFXHUwMTUwXHUwMTUyXHUwMTU0XHUwMTU2XHUwMTU4XHUwMTVBXHUwMTVDXHUwMTVFXHUwMTYwXHUwMTYyXHUwMTY0XHUwMTY2XHUwMTY4XHUwMTZBXHUwMTZDXHUwMTZFXHUwMTcwXHUwMTcyXHUwMTc0XHUwMTc2XHUwMTc4LVx1MDE3OVx1MDE3Qlx1MDE3RFx1MDE3Rlx1MDE4MS1cdTAxODJcdTAxODRcdTAxODYtXHUwMTg3XHUwMTg5LVx1MDE4Qlx1MDE4RS1cdTAxOTFcdTAxOTMtXHUwMTk0XHUwMTk2LVx1MDE5OFx1MDE5Qy1cdTAxOURcdTAxOUYtXHUwMUEwXHUwMUEyXHUwMUE0XHUwMUE2LVx1MDFBN1x1MDFBOVx1MDFBQ1x1MDFBRS1cdTAxQUZcdTAxQjEtXHUwMUIzXHUwMUI1XHUwMUI3LVx1MDFCOFx1MDFCQ1x1MDFDNC1cdTAxQ0RcdTAxQ0ZcdTAxRDFcdTAxRDNcdTAxRDVcdTAxRDdcdTAxRDlcdTAxREJcdTAxREVcdTAxRTBcdTAxRTJcdTAxRTRcdTAxRTZcdTAxRThcdTAxRUFcdTAxRUNcdTAxRUVcdTAxRjEtXHUwMUY0XHUwMUY2LVx1MDFGOFx1MDFGQVx1MDFGQ1x1MDFGRVx1MDIwMFx1MDIwMlx1MDIwNFx1MDIwNlx1MDIwOFx1MDIwQVx1MDIwQ1x1MDIwRVx1MDIxMFx1MDIxMlx1MDIxNFx1MDIxNlx1MDIxOFx1MDIxQVx1MDIxQ1x1MDIxRVx1MDIyMlx1MDIyNFx1MDIyNlx1MDIyOFx1MDIyQVx1MDIyQ1x1MDIyRVx1MDIzMFx1MDIzMlx1MDM0MC1cdTAzNDFcdTAzNDMtXHUwMzQ1XHUwMzc0XHUwMzdFXHUwMzg2LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzOEZcdTAzOTEtXHUwM0ExXHUwM0EzLVx1MDNBQlx1MDNDMlx1MDNEMC1cdTAzRDFcdTAzRDUtXHUwM0Q2XHUwM0RBXHUwM0RDXHUwM0RFXHUwM0UwXHUwM0UyXHUwM0U0XHUwM0U2XHUwM0U4XHUwM0VBXHUwM0VDXHUwM0VFXHUwM0YwLVx1MDNGMlx1MDNGNC1cdTAzRjVcdTA0MDAtXHUwNDJGXHUwNDYwXHUwNDYyXHUwNDY0XHUwNDY2XHUwNDY4XHUwNDZBXHUwNDZDXHUwNDZFXHUwNDcwXHUwNDcyXHUwNDc0XHUwNDc2XHUwNDc4XHUwNDdBXHUwNDdDXHUwNDdFXHUwNDgwXHUwNDhDXHUwNDhFXHUwNDkwXHUwNDkyXHUwNDk0XHUwNDk2XHUwNDk4XHUwNDlBXHUwNDlDXHUwNDlFXHUwNEEwXHUwNEEyXHUwNEE0XHUwNEE2XHUwNEE4XHUwNEFBXHUwNEFDXHUwNEFFXHUwNEIwXHUwNEIyXHUwNEI0XHUwNEI2XHUwNEI4XHUwNEJBXHUwNEJDXHUwNEJFXHUwNEMxXHUwNEMzXHUwNEM3XHUwNENCXHUwNEQwXHUwNEQyXHUwNEQ0XHUwNEQ2XHUwNEQ4XHUwNERBXHUwNERDXHUwNERFXHUwNEUwXHUwNEUyXHUwNEU0XHUwNEU2XHUwNEU4XHUwNEVBXHUwNEVDXHUwNEVFXHUwNEYwXHUwNEYyXHUwNEY0XHUwNEY4XHUwNTMxLVx1MDU1Nlx1MDk1OC1cdTA5NUZcdTA5REMtXHUwOUREXHUwOURGXHUwOUY4XHUwQTMzXHUwQTM2XHUwQTU5LVx1MEE1Qlx1MEE1RVx1MEI1Qy1cdTBCNURcdTBGMkEtXHUwRjMzXHUwRjQzXHUwRjREXHUwRjUyXHUwRjU3XHUwRjVDXHUwRjY5XHUwRjczXHUwRjc1LVx1MEY3Nlx1MEY3OFx1MEY4MVx1MEY5M1x1MEY5RFx1MEZBMlx1MEZBN1x1MEZBQ1x1MEZCOVx1MTM3Q1x1MUUwMFx1MUUwMlx1MUUwNFx1MUUwNlx1MUUwOFx1MUUwQVx1MUUwQ1x1MUUwRVx1MUUxMFx1MUUxMlx1MUUxNFx1MUUxNlx1MUUxOFx1MUUxQVx1MUUxQ1x1MUUxRVx1MUUyMFx1MUUyMlx1MUUyNFx1MUUyNlx1MUUyOFx1MUUyQVx1MUUyQ1x1MUUyRVx1MUUzMFx1MUUzMlx1MUUzNFx1MUUzNlx1MUUzOFx1MUUzQVx1MUUzQ1x1MUUzRVx1MUU0MFx1MUU0Mlx1MUU0NFx1MUU0Nlx1MUU0OFx1MUU0QVx1MUU0Q1x1MUU0RVx1MUU1MFx1MUU1Mlx1MUU1NFx1MUU1Nlx1MUU1OFx1MUU1QVx1MUU1Q1x1MUU1RVx1MUU2MFx1MUU2Mlx1MUU2NFx1MUU2Nlx1MUU2OFx1MUU2QVx1MUU2Q1x1MUU2RVx1MUU3MFx1MUU3Mlx1MUU3NFx1MUU3Nlx1MUU3OFx1MUU3QVx1MUU3Q1x1MUU3RVx1MUU4MFx1MUU4Mlx1MUU4NFx1MUU4Nlx1MUU4OFx1MUU4QVx1MUU4Q1x1MUU4RVx1MUU5MFx1MUU5Mlx1MUU5NFx1MUU5Qlx1MUVBMFx1MUVBMlx1MUVBNFx1MUVBNlx1MUVBOFx1MUVBQVx1MUVBQ1x1MUVBRVx1MUVCMFx1MUVCMlx1MUVCNFx1MUVCNlx1MUVCOFx1MUVCQVx1MUVCQ1x1MUVCRVx1MUVDMFx1MUVDMlx1MUVDNFx1MUVDNlx1MUVDOFx1MUVDQVx1MUVDQ1x1MUVDRVx1MUVEMFx1MUVEMlx1MUVENFx1MUVENlx1MUVEOFx1MUVEQVx1MUVEQ1x1MUVERVx1MUVFMFx1MUVFMlx1MUVFNFx1MUVFNlx1MUVFOFx1MUVFQVx1MUVFQ1x1MUVFRVx1MUVGMFx1MUVGMlx1MUVGNFx1MUVGNlx1MUVGOFx1MUYwOC1cdTFGMEZcdTFGMTgtXHUxRjFEXHUxRjI4LVx1MUYyRlx1MUYzOC1cdTFGM0ZcdTFGNDgtXHUxRjREXHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGXHUxRjY4LVx1MUY2Rlx1MUY3MVx1MUY3M1x1MUY3NVx1MUY3N1x1MUY3OVx1MUY3Qlx1MUY3RFx1MUY4OC1cdTFGOEZcdTFGOTgtXHUxRjlGXHUxRkE4LVx1MUZBRlx1MUZCOC1cdTFGQkNcdTFGQkVcdTFGQzgtXHUxRkNDXHUxRkQzXHUxRkQ4LVx1MUZEQlx1MUZFM1x1MUZFOC1cdTFGRUNcdTFGRUUtXHUxRkVGXHUxRkY4LVx1MUZGRFx1MjAwMC1cdTIwMDFcdTIwNzBcdTIwNzQtXHUyMDc5XHUyMDgwLVx1MjA4OVx1MjEyNlx1MjEyQS1cdTIxMkJcdTIxNTMtXHUyMTVFXHUyMTYwLVx1MjE3Rlx1MjE4MS1cdTIxODNcdTIzMjktXHUyMzJBXHUyNDYwLVx1MjQ2OFx1MjQ3NC1cdTI0N0NcdTI0ODgtXHUyNDkwXHUyNEI2LVx1MjRFQVx1Mjc3Ni1cdTI3N0VcdTI3ODAtXHUyNzg4XHUyNzhBLVx1Mjc5Mlx1RjkwMC1cdUZBMERcdUZBMTBcdUZBMTJcdUZBMTUtXHVGQTFFXHVGQTIwXHVGQTIyXHVGQTI1LVx1RkEyNlx1RkEyQS1cdUZBMkRcdUZCMUZcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MC1cdUZCNDFcdUZCNDMtXHVGQjQ0XHVGQjQ2LVx1RkI0RVx1RkYyMS1cdUZGM0FcXFUwMDAxMDM0QVxcVTAwMDEwNDAwLVxcVTAwMDEwNDI1XFxVMDAwMUQxNjUtXFxVMDAwMUQxNjZcXFUwMDAxRDE2RC1cXFUwMDAxRDE3Ml0iKSwKKwkgICAgbmV3IFVuaWNvZGVTZXQoIltBLVpcdTAwQTBcdTAwQThcdTAwQUFcdTAwQUZcdTAwQjItXHUwMEI1XHUwMEI4LVx1MDBCQVx1MDBCQy1cdTAwQkVcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBERVx1MDBFMC1cdTAwRTVcdTAwRTctXHUwMEVGXHUwMEYxLVx1MDBGNlx1MDBGOS1cdTAwRkRcdTAwRkYtXHUwMTEwXHUwMTEyLVx1MDEyNlx1MDEyOC1cdTAxMzdcdTAxMzktXHUwMTQxXHUwMTQzLVx1MDE0QVx1MDE0Qy1cdTAxNTJcdTAxNTQtXHUwMTY2XHUwMTY4LVx1MDE3Rlx1MDE4MS1cdTAxODJcdTAxODRcdTAxODYtXHUwMTg3XHUwMTg5LVx1MDE4Qlx1MDE4RS1cdTAxOTFcdTAxOTMtXHUwMTk0XHUwMTk2LVx1MDE5OFx1MDE5Qy1cdTAxOURcdTAxOUYtXHUwMUEyXHUwMUE0XHUwMUE2LVx1MDFBN1x1MDFBOVx1MDFBQ1x1MDFBRS1cdTAxQjNcdTAxQjVcdTAxQjctXHUwMUI4XHUwMUJDXHUwMUM0LVx1MDFEQ1x1MDFERS1cdTAxRTRcdTAxRTYtXHUwMjFDXHUwMjFFLVx1MDIxRlx1MDIyMlx1MDIyNFx1MDIyNi1cdTAyMzNcdTAyQjAtXHUwMkI4XHUwMkQ4LVx1MDJERFx1MDJFMC1cdTAyRTRcdTAzNDAtXHUwMzQxXHUwMzQzLVx1MDM0NVx1MDM3NFx1MDM3QVx1MDM3RVx1MDM4NC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNCMFx1MDNDMlx1MDNDQS1cdTAzQ0VcdTAzRDAtXHUwM0Q2XHUwM0RBXHUwM0RDXHUwM0RFXHUwM0UwXHUwM0UyXHUwM0U0XHUwM0U2XHUwM0U4XHUwM0VBXHUwM0VDXHUwM0VFXHUwM0YwLVx1MDNGMlx1MDNGNC1cdTAzRjVcdTA0MDAtXHUwNDJGXHUwNDM5XHUwNDUwLVx1MDQ1MVx1MDQ1M1x1MDQ1N1x1MDQ1Qy1cdTA0NUVcdTA0NjBcdTA0NjJcdTA0NjRcdTA0NjZcdTA0NjhcdTA0NkFcdTA0NkNcdTA0NkVcdTA0NzBcdTA0NzJcdTA0NzRcdTA0NzYtXHUwNDc4XHUwNDdBXHUwNDdDXHUwNDdFXHUwNDgwXHUwNDhDXHUwNDhFXHUwNDkwXHUwNDkyXHUwNDk0XHUwNDk2XHUwNDk4XHUwNDlBXHUwNDlDXHUwNDlFXHUwNEEwXHUwNEEyXHUwNEE0XHUwNEE2XHUwNEE4XHUwNEFBXHUwNEFDXHUwNEFFXHUwNEIwXHUwNEIyXHUwNEI0XHUwNEI2XHUwNEI4XHUwNEJBXHUwNEJDXHUwNEJFXHUwNEMxLVx1MDRDM1x1MDRDN1x1MDRDQlx1MDREMC1cdTA0RDRcdTA0RDYtXHUwNEQ4XHUwNERBLVx1MDRFMFx1MDRFMi1cdTA0RThcdTA0RUEtXHUwNEY1XHUwNEY4LVx1MDRGOVx1MDUzMS1cdTA1NTZcdTA1ODdcdTA2MjItXHUwNjI2XHUwNjc1LVx1MDY3OFx1MDZDMFx1MDZDMlx1MDZEM1x1MDkyOVx1MDkzMVx1MDkzNFx1MDk1OC1cdTA5NUZcdTA5Q0ItXHUwOUNDXHUwOURDLVx1MDlERFx1MDlERlx1MDlGOFx1MEEzM1x1MEEzNlx1MEE1OS1cdTBBNUJcdTBBNUVcdTBCNDhcdTBCNEItXHUwQjRDXHUwQjVDLVx1MEI1RFx1MEI5NFx1MEJDQS1cdTBCQ0NcdTBDNDhcdTBDQzBcdTBDQzctXHUwQ0M4XHUwQ0NBLVx1MENDQlx1MEQ0QS1cdTBENENcdTBEREFcdTBEREMtXHUwRERFXHUwRTMzXHUwRUIzXHUwRURDLVx1MEVERFx1MEYwQ1x1MEYyQS1cdTBGMzNcdTBGNDNcdTBGNERcdTBGNTJcdTBGNTdcdTBGNUNcdTBGNjlcdTBGNzNcdTBGNzUtXHUwRjc5XHUwRjgxXHUwRjkzXHUwRjlEXHUwRkEyXHUwRkE3XHUwRkFDXHUwRkI5XHUxMDI2XHUxMzdDXHUxRTAwLVx1MUU5Qlx1MUVBMC1cdTFFRjlcdTFGMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZDNFx1MUZDNi1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkRELVx1MUZFRlx1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZFXHUyMDAwLVx1MjAwQVx1MjAxMVx1MjAxN1x1MjAyNC1cdTIwMjZcdTIwMkZcdTIwMzMtXHUyMDM0XHUyMDM2LVx1MjAzN1x1MjAzQ1x1MjAzRVx1MjA0OC1cdTIwNDlcdTIwNzBcdTIwNzQtXHUyMDhFXHUyMEE4XHUyMTAwLVx1MjEwM1x1MjEwNS1cdTIxMDdcdTIxMDktXHUyMTEzXHUyMTE1LVx1MjExNlx1MjExOS1cdTIxMURcdTIxMjAtXHUyMTIyXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzFcdTIxMzMtXHUyMTM5XHUyMTUzLVx1MjE3Rlx1MjE4MS1cdTIxODNcdTIxOUEtXHUyMTlCXHUyMUFFXHUyMUNELVx1MjFDRlx1MjIwNFx1MjIwOVx1MjIwQ1x1MjIyNFx1MjIyNlx1MjIyQy1cdTIyMkRcdTIyMkYtXHUyMjMwXHUyMjQxXHUyMjQ0XHUyMjQ3XHUyMjQ5XHUyMjYwXHUyMjYyXHUyMjZELVx1MjI3MVx1MjI3NC1cdTIyNzVcdTIyNzgtXHUyMjc5XHUyMjgwLVx1MjI4MVx1MjI4NC1cdTIyODVcdTIyODgtXHUyMjg5XHUyMkFDLVx1MjJBRlx1MjJFMC1cdTIyRTNcdTIyRUEtXHUyMkVEXHUyMzI5LVx1MjMyQVx1MjQ2MC1cdTI0RUFcdTI3NzYtXHUyNzdFXHUyNzgwLVx1Mjc4OFx1Mjc4QS1cdTI3OTJcdTJFOUZcdTJFRjNcdTJGMDAtXHUyRkQ1XHUzMDAwXHUzMDM2XHUzMDM4LVx1MzAzQVx1MzA0Q1x1MzA0RVx1MzA1MFx1MzA1Mlx1MzA1NFx1MzA1Nlx1MzA1OFx1MzA1QVx1MzA1Q1x1MzA1RVx1MzA2MFx1MzA2Mlx1MzA2NVx1MzA2N1x1MzA2OVx1MzA3MC1cdTMwNzFcdTMwNzMtXHUzMDc0XHUzMDc2LVx1MzA3N1x1MzA3OS1cdTMwN0FcdTMwN0MtXHUzMDdEXHUzMDk0XHUzMDlCLVx1MzA5Q1x1MzA5RVx1MzBBQ1x1MzBBRVx1MzBCMFx1MzBCMlx1MzBCNFx1MzBCNlx1MzBCOFx1MzBCQVx1MzBCQ1x1MzBCRVx1MzBDMFx1MzBDMlx1MzBDNVx1MzBDN1x1MzBDOVx1MzBEMC1cdTMwRDFcdTMwRDMtXHUzMEQ0XHUzMEQ2LVx1MzBEN1x1MzBEOS1cdTMwREFcdTMwREMtXHUzMEREXHUzMEY0XHUzMEY3LVx1MzBGQVx1MzBGRVx1MzEzMS1cdTMxOEVcdTMxOTItXHUzMTlGXHUzMjAwLVx1MzIxQ1x1MzIyMC1cdTMyNDNcdTMyNjAtXHUzMjdCXHUzMjgwLVx1MzJCMFx1MzJDMC1cdTMyQ0JcdTMyRDAtXHUzMkZFXHUzMzAwLVx1MzM3Nlx1MzM3Qi1cdTMzRERcdTMzRTAtXHUzM0ZFXHVBQzAwLVx1RDdBM1x1RjkwMC1cdUZBMERcdUZBMTBcdUZBMTJcdUZBMTUtXHVGQTFFXHVGQTIwXHVGQTIyXHVGQTI1LVx1RkEyNlx1RkEyQS1cdUZBMkRcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwLVx1RkI0MVx1RkI0My1cdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUzMC1cdUZFNDRcdUZFNDktXHVGRTUyXHVGRTU0LVx1RkU2Nlx1RkU2OC1cdUZFNkJcdUZFNzAtXHVGRTcyXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYwMS1cdUZGNUVcdUZGNjEtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ1x1RkZFMC1cdUZGRTZcdUZGRTgtXHVGRkVFXFxVMDAwMTAzNEFcXFUwMDAxMDQwMC1cXFUwMDAxMDQyNVxcVTAwMDFEMTY1LVxcVTAwMDFEMTY2XFxVMDAwMUQxNkQtXFxVMDAwMUQxNzJdIiksCisJICAgIG5ldyBVbmljb2RlU2V0KCJbQS1aXHUwMEEwXHUwMEE4XHUwMEFBXHUwMEFGXHUwMEIyLVx1MDBCNVx1MDBCOC1cdTAwQkFcdTAwQkMtXHUwMEJFXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwREVcdTAxMDBcdTAxMDJcdTAxMDRcdTAxMDZcdTAxMDhcdTAxMEFcdTAxMENcdTAxMEVcdTAxMTBcdTAxMTJcdTAxMTRcdTAxMTZcdTAxMThcdTAxMUFcdTAxMUNcdTAxMUVcdTAxMjBcdTAxMjJcdTAxMjRcdTAxMjZcdTAxMjhcdTAxMkFcdTAxMkNcdTAxMkVcdTAxMzAtXHUwMTM0XHUwMTM2XHUwMTM5XHUwMTNCXHUwMTNEXHUwMTNGLVx1MDE0MVx1MDE0M1x1MDE0NVx1MDE0N1x1MDE0OS1cdTAxNEFcdTAxNENcdTAxNEVcdTAxNTBcdTAxNTJcdTAxNTRcdTAxNTZcdTAxNThcdTAxNUFcdTAxNUNcdTAxNUVcdTAxNjBcdTAxNjJcdTAxNjRcdTAxNjZcdTAxNjhcdTAxNkFcdTAxNkNcdTAxNkVcdTAxNzBcdTAxNzJcdTAxNzRcdTAxNzZcdTAxNzgtXHUwMTc5XHUwMTdCXHUwMTdEXHUwMTdGXHUwMTgxLVx1MDE4Mlx1MDE4NFx1MDE4Ni1cdTAxODdcdTAxODktXHUwMThCXHUwMThFLVx1MDE5MVx1MDE5My1cdTAxOTRcdTAxOTYtXHUwMTk4XHUwMTlDLVx1MDE5RFx1MDE5Ri1cdTAxQTBcdTAxQTJcdTAxQTRcdTAxQTYtXHUwMUE3XHUwMUE5XHUwMUFDXHUwMUFFLVx1MDFBRlx1MDFCMS1cdTAxQjNcdTAxQjVcdTAxQjctXHUwMUI4XHUwMUJDXHUwMUM0LVx1MDFDRFx1MDFDRlx1MDFEMVx1MDFEM1x1MDFENVx1MDFEN1x1MDFEOVx1MDFEQlx1MDFERVx1MDFFMFx1MDFFMlx1MDFFNFx1MDFFNlx1MDFFOFx1MDFFQVx1MDFFQ1x1MDFFRVx1MDFGMS1cdTAxRjRcdTAxRjYtXHUwMUY4XHUwMUZBXHUwMUZDXHUwMUZFXHUwMjAwXHUwMjAyXHUwMjA0XHUwMjA2XHUwMjA4XHUwMjBBXHUwMjBDXHUwMjBFXHUwMjEwXHUwMjEyXHUwMjE0XHUwMjE2XHUwMjE4XHUwMjFBXHUwMjFDXHUwMjFFXHUwMjIyXHUwMjI0XHUwMjI2XHUwMjI4XHUwMjJBXHUwMjJDXHUwMjJFXHUwMjMwXHUwMjMyXHUwMkIwLVx1MDJCOFx1MDJEOC1cdTAyRERcdTAyRTAtXHUwMkU0XHUwMzQwLVx1MDM0MVx1MDM0My1cdTAzNDVcdTAzNzRcdTAzN0FcdTAzN0VcdTAzODQtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDM4Rlx1MDM5MS1cdTAzQTFcdTAzQTMtXHUwM0FCXHUwM0MyXHUwM0QwLVx1MDNENlx1MDNEQVx1MDNEQ1x1MDNERVx1MDNFMFx1MDNFMlx1MDNFNFx1MDNFNlx1MDNFOFx1MDNFQVx1MDNFQ1x1MDNFRVx1MDNGMC1cdTAzRjJcdTAzRjQtXHUwM0Y1XHUwNDAwLVx1MDQyRlx1MDQ2MFx1MDQ2Mlx1MDQ2NFx1MDQ2Nlx1MDQ2OFx1MDQ2QVx1MDQ2Q1x1MDQ2RVx1MDQ3MFx1MDQ3Mlx1MDQ3NFx1MDQ3Nlx1MDQ3OFx1MDQ3QVx1MDQ3Q1x1MDQ3RVx1MDQ4MFx1MDQ4Q1x1MDQ4RVx1MDQ5MFx1MDQ5Mlx1MDQ5NFx1MDQ5Nlx1MDQ5OFx1MDQ5QVx1MDQ5Q1x1MDQ5RVx1MDRBMFx1MDRBMlx1MDRBNFx1MDRBNlx1MDRBOFx1MDRBQVx1MDRBQ1x1MDRBRVx1MDRCMFx1MDRCMlx1MDRCNFx1MDRCNlx1MDRCOFx1MDRCQVx1MDRCQ1x1MDRCRVx1MDRDMVx1MDRDM1x1MDRDN1x1MDRDQlx1MDREMFx1MDREMlx1MDRENFx1MDRENlx1MDREOFx1MDREQVx1MDREQ1x1MDRERVx1MDRFMFx1MDRFMlx1MDRFNFx1MDRFNlx1MDRFOFx1MDRFQVx1MDRFQ1x1MDRFRVx1MDRGMFx1MDRGMlx1MDRGNFx1MDRGOFx1MDUzMS1cdTA1NTZcdTA1ODdcdTA2NzUtXHUwNjc4XHUwOTU4LVx1MDk1Rlx1MDlEQy1cdTA5RERcdTA5REZcdTA5RjhcdTBBMzNcdTBBMzZcdTBBNTktXHUwQTVCXHUwQTVFXHUwQjVDLVx1MEI1RFx1MEUzM1x1MEVCM1x1MEVEQy1cdTBFRERcdTBGMENcdTBGMkEtXHUwRjMzXHUwRjQzXHUwRjREXHUwRjUyXHUwRjU3XHUwRjVDXHUwRjY5XHUwRjczXHUwRjc1LVx1MEY3OVx1MEY4MVx1MEY5M1x1MEY5RFx1MEZBMlx1MEZBN1x1MEZBQ1x1MEZCOVx1MTM3Q1x1MUUwMFx1MUUwMlx1MUUwNFx1MUUwNlx1MUUwOFx1MUUwQVx1MUUwQ1x1MUUwRVx1MUUxMFx1MUUxMlx1MUUxNFx1MUUxNlx1MUUxOFx1MUUxQVx1MUUxQ1x1MUUxRVx1MUUyMFx1MUUyMlx1MUUyNFx1MUUyNlx1MUUyOFx1MUUyQVx1MUUyQ1x1MUUyRVx1MUUzMFx1MUUzMlx1MUUzNFx1MUUzNlx1MUUzOFx1MUUzQVx1MUUzQ1x1MUUzRVx1MUU0MFx1MUU0Mlx1MUU0NFx1MUU0Nlx1MUU0OFx1MUU0QVx1MUU0Q1x1MUU0RVx1MUU1MFx1MUU1Mlx1MUU1NFx1MUU1Nlx1MUU1OFx1MUU1QVx1MUU1Q1x1MUU1RVx1MUU2MFx1MUU2Mlx1MUU2NFx1MUU2Nlx1MUU2OFx1MUU2QVx1MUU2Q1x1MUU2RVx1MUU3MFx1MUU3Mlx1MUU3NFx1MUU3Nlx1MUU3OFx1MUU3QVx1MUU3Q1x1MUU3RVx1MUU4MFx1MUU4Mlx1MUU4NFx1MUU4Nlx1MUU4OFx1MUU4QVx1MUU4Q1x1MUU4RVx1MUU5MFx1MUU5Mlx1MUU5NFx1MUU5QS1cdTFFOUJcdTFFQTBcdTFFQTJcdTFFQTRcdTFFQTZcdTFFQThcdTFFQUFcdTFFQUNcdTFFQUVcdTFFQjBcdTFFQjJcdTFFQjRcdTFFQjZcdTFFQjhcdTFFQkFcdTFFQkNcdTFFQkVcdTFFQzBcdTFFQzJcdTFFQzRcdTFFQzZcdTFFQzhcdTFFQ0FcdTFFQ0NcdTFFQ0VcdTFFRDBcdTFFRDJcdTFFRDRcdTFFRDZcdTFFRDhcdTFFREFcdTFFRENcdTFFREVcdTFFRTBcdTFFRTJcdTFFRTRcdTFFRTZcdTFFRThcdTFFRUFcdTFFRUNcdTFFRUVcdTFFRjBcdTFFRjJcdTFFRjRcdTFFRjZcdTFFRjhcdTFGMDgtXHUxRjBGXHUxRjE4LVx1MUYxRFx1MUYyOC1cdTFGMkZcdTFGMzgtXHUxRjNGXHUxRjQ4LVx1MUY0RFx1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Rlx1MUY2OC1cdTFGNkZcdTFGNzFcdTFGNzNcdTFGNzVcdTFGNzdcdTFGNzlcdTFGN0JcdTFGN0RcdTFGODgtXHUxRjhGXHUxRjk4LVx1MUY5Rlx1MUZBOC1cdTFGQUZcdTFGQjgtXHUxRkMxXHUxRkM4LVx1MUZDRlx1MUZEM1x1MUZEOC1cdTFGREJcdTFGREQtXHUxRkRGXHUxRkUzXHUxRkU4LVx1MUZFRlx1MUZGOC1cdTFGRkVcdTIwMDAtXHUyMDBBXHUyMDExXHUyMDE3XHUyMDI0LVx1MjAyNlx1MjAyRlx1MjAzMy1cdTIwMzRcdTIwMzYtXHUyMDM3XHUyMDNDXHUyMDNFXHUyMDQ4LVx1MjA0OVx1MjA3MFx1MjA3NC1cdTIwOEVcdTIwQThcdTIxMDAtXHUyMTAzXHUyMTA1LVx1MjEwN1x1MjEwOS1cdTIxMTNcdTIxMTUtXHUyMTE2XHUyMTE5LVx1MjExRFx1MjEyMC1cdTIxMjJcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzMVx1MjEzMy1cdTIxMzlcdTIxNTMtXHUyMTdGXHUyMTgxLVx1MjE4M1x1MjIyQy1cdTIyMkRcdTIyMkYtXHUyMjMwXHUyMzI5LVx1MjMyQVx1MjQ2MC1cdTI0RUFcdTI3NzYtXHUyNzdFXHUyNzgwLVx1Mjc4OFx1Mjc4QS1cdTI3OTJcdTJFOUZcdTJFRjNcdTJGMDAtXHUyRkQ1XHUzMDAwXHUzMDM2XHUzMDM4LVx1MzAzQVx1MzA5Qi1cdTMwOUNcdTMxMzEtXHUzMThFXHUzMTkyLVx1MzE5Rlx1MzIwMC1cdTMyMUNcdTMyMjAtXHUzMjQzXHUzMjYwLVx1MzI3Qlx1MzI4MC1cdTMyQjBcdTMyQzAtXHUzMkNCXHUzMkQwLVx1MzJGRVx1MzMwMC1cdTMzNzZcdTMzN0ItXHUzM0REXHUzM0UwLVx1MzNGRVx1RjkwMC1cdUZBMERcdUZBMTBcdUZBMTJcdUZBMTUtXHVGQTFFXHVGQTIwXHVGQTIyXHVGQTI1LVx1RkEyNlx1RkEyQS1cdUZBMkRcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRi1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwLVx1RkI0MVx1RkI0My1cdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUzMC1cdUZFNDRcdUZFNDktXHVGRTUyXHVGRTU0LVx1RkU2Nlx1RkU2OC1cdUZFNkJcdUZFNzAtXHVGRTcyXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYwMS1cdUZGNUVcdUZGNjEtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ1x1RkZFMC1cdUZGRTZcdUZGRTgtXHVGRkVFXFxVMDAwMTAzNEFcXFUwMDAxMDQwMC1cXFUwMDAxMDQyNVxcVTAwMDFEMTY1LVxcVTAwMDFEMTY2XFxVMDAwMUQxNkQtXFxVMDAwMUQxNzJdIiksCisgICAgICAgIH0sCisgICAgfTsKKyAgICAqLworCisgICAgCisgICAgc3RhdGljIFVuaWNvZGVTZXQgZ2VuZXJhdGVkU2V0OworICAgIAorICAgIC8vIFRoZXNlIHNob3VsZCBib3RoIGJlIHB1YmxpYywgYW5kIG9uIHRoZSByZXNwZWN0aXZlIGNsYXNzZXMKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkQWxsKFVuaWNvZGVTZXQgcywgU3RyaW5nIHN0cikgeworICAgICAgICBpbnQgY3A7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAgICAgICAgIGNwID0gVVRGMTYuY2hhckF0KHN0cixpKTsKKyAgICAgICAgICAgIHMuYWRkKGNwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY29udGFpbnNTb21lKFVuaWNvZGVTZXQgcywgU3RyaW5nIHN0cikgeworICAgICAgICBpbnQgY3A7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAgICAgICAgIGNwID0gVVRGMTYuY2hhckF0KHN0cixpKTsKKyAgICAgICAgICAgIGlmIChzLmNvbnRhaW5zKGNwKSkgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvV3JpdGVJbmRpY0NoYXJ0cy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L1dyaXRlSW5kaWNDaGFydHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBhMTlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L1dyaXRlSW5kaWNDaGFydHMuamF2YQpAQCAtMCwwICsxLDM1MSBAQAorcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC50cmFuc2xpdDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLio7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworLyoqCisgKiBAYXV0aG9yIHJhbQorICoKKyAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6CisgKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuCisgKiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHR5cGUgY29tbWVudHMgZ28gdG8KKyAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi43RgorICovCitwdWJsaWMgY2xhc3MgV3JpdGVJbmRpY0NoYXJ0cyB7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgICAgIHdyaXRlSUlDaGFydHMoKTsKKyAgICB9CisgICAKKyAgICAKKwlzdGF0aWMgU3RyaW5nIGhlYWRlciA9ICAiPGh0bWw+XG4iICsKKwkJCSAgICAgICAgICAgICAgICAiICAgIDxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCI+IisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICBJbnRlci1JbmRpYyBUcmFuc2xpdGVyYXRpb24gQ29tcGFyaXNvbiBjaGFydCIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8L2hlYWQ+XG4iKworCQkJICAgICAgICAgICAgICAgICIgICAgPGJvZHkgYmdjb2xvcj0jRkZGRkZGPlxuIisKKwkJCSAgICAgICAgICAgICAgICAiICAgICAgICAgPHRhYmxlIGJvcmRlcj0xIHdpZHRoPTEwMCUgPlxuIisKKwkJCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgPHRyPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgPHRoIHdpZHRoPTklPkludGVyLUluZGljPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIDx0aCB3aWR0aD05JT5MYXRpbjwvdGg+XG4iKworCQkJICAgICAgICAgICAgICAgICIgICAgICAgICAgICA8dGggd2lkdGg9OSU+RGV2YW5hZ2FyaTwvdGg+XG4iKworCQkJICAgICAgICAgICAgICAgICIgICAgICAgICAgICA8dGggd2lkdGg9OSU+QmVuZ2FsaTwvdGg+XG4iKworCQkJICAgICAgICAgICAgICAgICIgICAgICAgICAgICA8dGggd2lkdGg9OSU+R3VybXVraGk8L3RoPlxuIisKKwkJCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgPHRoIHdpZHRoPTklPkd1amFyYXRpPC90aD5cbiIrCisJCQkgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIDx0aCB3aWR0aD05JT5Pcml5YTwvdGg+XG4iKworCQkJICAgICAgICAgICAgICAgICIgICAgICAgICAgICA8dGggd2lkdGg9OSU+VGFtaWw8L3RoPlxuIisKKwkJCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgPHRoIHdpZHRoPTklPlRlbHVndTwvdGg+XG4iKworCQkJICAgICAgICAgICAgICAgICIgICAgICAgICAgICA8dGggd2lkdGg9OSU+S2FubmFkYTwvdGg+XG4iKworCQkJICAgICAgICAgICAgICAgICIgICAgICAgICAgICA8dGggd2lkdGg9OSU+TWFsYXlhbGFtPC90aD5cbiIrCisJCQkgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIDwvdHI+XG4iOworICAgIHN0YXRpYyBTdHJpbmcgZm9vdGVyID0gICIgICAgICAgICAgPC90YWJsZT5cbiIrCisJCSAgICAgICAgICAgICAgICAgICAgIiAgICA8L2JvZHk+XG4iICsKKwkJICAgICAgICAgICAgICAgICAgICAiPC9odG1sPlxuIjsKKyAgICAgICAgICAgICAgICAgICAKKyAgICBzdGF0aWMgVW5pY29kZVNldCBkZXZhID0gbmV3IFVuaWNvZGVTZXQoIls6ZGV2YTpdIik7IAorICAgIHN0YXRpYyBVbmljb2RlU2V0IGJlbmcgPSBuZXcgVW5pY29kZVNldCgiWzpiZW5nOl0iKTsKKyAgICBzdGF0aWMgVW5pY29kZVNldCBndWpyID0gbmV3IFVuaWNvZGVTZXQoIls6Z3VqcjpdIik7CisgICAgc3RhdGljIFVuaWNvZGVTZXQgZ3VydSA9IG5ldyBVbmljb2RlU2V0KCJbOmd1cnU6XSIpOworICAgIHN0YXRpYyBVbmljb2RlU2V0IG9yeWEgPSBuZXcgVW5pY29kZVNldCgiWzpvcnlhOl0iKTsKKyAgICBzdGF0aWMgVW5pY29kZVNldCB0YW1sID0gbmV3IFVuaWNvZGVTZXQoIls6dGFtbDpdIik7CisgICAgc3RhdGljIFVuaWNvZGVTZXQgdGVsdSA9IG5ldyBVbmljb2RlU2V0KCJbOnRlbHU6XSIpOworICAgIHN0YXRpYyBVbmljb2RlU2V0IGtuZGEgPSBuZXcgVW5pY29kZVNldCgiWzprbmRhOl0iKTsgCisgICAgc3RhdGljIFVuaWNvZGVTZXQgbWx5bSA9IG5ldyBVbmljb2RlU2V0KCJbOm1seW06XSIpOyAgICAgICAgICAgICAgICAgICAgICAKKyAgICBzdGF0aWMgVW5pY29kZVNldCBpbnRlcj0gbmV3IFVuaWNvZGVTZXQoIltcdUUwMDAtXHVFMDgwXSIpOworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZUlJQ2hhcnRzKCl7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQxID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtQmVuZ2FsaSIpOyAgICAKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQyID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtR3VybXVraGkiKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQzID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtR3VqYXJhdGkiKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQ0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtT3JpeWEiKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQ1ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtVGFtaWwiKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQ2ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtVGVsdWd1Iik7CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0NyA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJJbnRlckluZGljLUthbm5hZGEiKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQ4ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtTWFsYXlhbGFtIik7CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciB0OSA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJJbnRlckluZGljLURldmFuYWdhcmkiKTsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQxMCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKCJJbnRlckluZGljLUxhdGluIik7CisgICAgICAgICAgICBVbmljb2RlU2V0SXRlcmF0b3Igc0l0ZXIgPSBuZXcgVW5pY29kZVNldEl0ZXJhdG9yKGRldmEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IoaW50IGk9MHgwMDtpPD0weDgwO2krKyl7CisgICAgICAgICAgICAgICBTdHJpbmdbXSBhcnIgPSAgbmV3IFN0cmluZ1sxMF07CisgICAgICAgICAgICAgICBhcnJbMF09VVRGMTYudmFsdWVPZihpKyAweEUwMDApOworICAgICAgICAgICAgICAgdGFibGUucHV0KFVURjE2LnZhbHVlT2YoaSksYXJyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIG9zID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihuZXcgRmlsZU91dHB1dFN0cmVhbSgiY29tcGFyaXNvbi1jaGFydC5odG1sIiksIlVURi04Iik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9zLndyaXRlKGhlYWRlcik7CisKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDksMHgwOTAwLDEpOworICAgICAgICAgICAgd3JpdGVJSUNoYXJ0cyh0MSwweDA5ODAsMik7ICAgICAgICAKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDIsMHgwQTAwLDMpOyAKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDMsMHgwQTgwLDQpOyAKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDQsMHgwQjAwLDUpOyAKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDUsMHgwQjgwLDYpOyAKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDYsMHgwYzAwLDcpOyAKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDcsMHgwQzgwLDgpOyAKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDgsMHgwRDAwLDkpOyAKKworICAgICAgICAgICAgZm9yKGludCBpPTB4MDA7aTw9MHg4MDtpKyspeworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHRlbXAgPSAoU3RyaW5nW10pdGFibGUuZ2V0KFVURjE2LnZhbHVlT2YoaSkpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gd3JpdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IoaW50IGs9MTtrPHRlbXAubGVuZ3RoICYmIHRlbXBba10hPW51bGw7aysrKXsKKyAgICAgICAgICAgICAgICAgICAgaWYoVUNoYXJhY3Rlci5nZXRFeHRlbmRlZE5hbWUoVVRGMTYuY2hhckF0KHRlbXBba10sMCkpLmluZGV4T2YoInVuYXNzaWduZWQiKTwwIHx8CisgICAgICAgICAgICAgICAgICAgICAgIHRlbXBba10uaW5kZXhPZigiOlVOQVNTSUdORUQiKTwwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZih3cml0ZSl7CisgICAgICAgICAgICAgICAgICAgIG9zLndyaXRlKCIgICAgICAgIDx0cj5cbiIpOworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGo9MDsgajx0ZW1wLmxlbmd0aDtqKyspeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodGVtcFtqXSE9bnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmYWxsYmFjaz1mYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHVuYXNzaWduZWQ9ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1bm1hcHBlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gY29uc3VtZWQgPWZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSB0ZW1wW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0ZW1wW2pdLmluZGV4T2YoIjpGQUxMQkFDSyIpPj0wKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gdGVtcFtqXS5zdWJzdHJpbmcoMCx0ZW1wW2pdLmluZGV4T2YoIjoiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPXRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Mud3JpdGUoIiAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSNGRkZGMDAgYWxpZ249Y2VudGVyIHRpdGxlPVwiIisrIlwiPiIrc3RyKyI8YnI+PHR0PiIrVXRpbGl0eS5oZXgoc3RyKSsiPC90dD4iKyI8L3RkPlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRlbXBbal0uaW5kZXhPZigiOlVOQVNTSUdORUQiKT49MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRlbXBbal0uc3Vic3RyaW5nKDAsdGVtcFtqXS5pbmRleE9mKCI6IikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmFzc2lnbmVkPXRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRlbXBbal0uaW5kZXhPZigiOlVOTUFQUEVEIik+PTApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSB0ZW1wW2pdLnN1YnN0cmluZygwLHRlbXBbal0uaW5kZXhPZigiOiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXBwZWQ9dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGVtcFtqXS5pbmRleE9mKCI6Q09OU1VNRUQiKT49MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRlbXBbal0uc3Vic3RyaW5nKDAsdGVtcFtqXS5pbmRleE9mKCI6IikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lZD10cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgbmFtZUJ1Zj1uZXcgU3RyaW5nQnVmZmVyKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgZj0wOyBmPHN0ci5sZW5ndGgoKTtmKyspeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmPjApeyBuYW1lQnVmLmFwcGVuZCgiKyIpO30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUJ1Zi5hcHBlbmQoVUNoYXJhY3Rlci5nZXRFeHRlbmRlZE5hbWUoVVRGMTYuY2hhckF0KHN0cixmKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZUJ1Zi50b1N0cmluZygpOyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZhbGxiYWNrKXsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihVQ2hhcmFjdGVyLmdldEV4dGVuZGVkTmFtZShVVEYxNi5jaGFyQXQoc3RyLDApKS5pbmRleE9mKCJ1bmFzc2lnbmVkIik+MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICAgPHRkICB3aWR0aD05JSBiZ2NvbG9yPSNCQkJCRkYgYWxpZ249Y2VudGVyIHRpdGxlPVwiIituYW1lKyJcIj4iKyImbmJzcDxicj48dHQ+IitVdGlsaXR5LmhleChzdHIpKyI8L3R0PiIrIjwvdGQ+XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICAgPHRkIHdpZHRoPTklIGJnY29sb3I9I0JCQkJGRiBhbGlnbj1jZW50ZXIgdGl0bGU9XCIiK25hbWUrIlwiPiIrIHN0cisiPGJyPjx0dD4iK1V0aWxpdHkuaGV4KHN0cikrIjwvdHQ+IisiPC90ZD5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodW5tYXBwZWQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICAgPHRkIGJnY29sb3I9I0ZGOTk5OSBhbGlnbj1jZW50ZXIgdGl0bGU9XCIiK25hbWUrIlwiPiIrIiZuYnNwPGJyPjx0dD4iK1V0aWxpdHkuaGV4KHN0cikrIjwvdHQ+IisiPC90ZD5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHVuYXNzaWduZWQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihVQ2hhcmFjdGVyLmdldEV4dGVuZGVkTmFtZShVVEYxNi5jaGFyQXQoc3RyLDApKS5pbmRleE9mKCJ1bmFzc2lnbmVkIik+MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICAgPHRkIHdpZHRoPTklIGJnY29sb3I9IzAwRkZGRiBhbGlnbj1jZW50ZXIgdGl0bGU9XCIiK25hbWUrIlwiPiIrIiZuYnNwPGJyPjx0dD4iK1V0aWxpdHkuaGV4KHN0cikrIjwvdHQ+IisiPC90ZD5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLndyaXRlKCIgICAgICAgICAgICA8dGQgd2lkdGg9OSUgYmdjb2xvcj0jMDBGRkZGIGFsaWduPWNlbnRlciB0aXRsZT1cIiIrbmFtZSsiXCI+Iisgc3RyKyI8YnI+PHR0PiIrVXRpbGl0eS5oZXgoc3RyKSsiPC90dD4iKyI8L3RkPlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihjb25zdW1lZCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihVQ2hhcmFjdGVyLmdldEV4dGVuZGVkTmFtZShVVEYxNi5jaGFyQXQoc3RyLDApKS5pbmRleE9mKCJ1bmFzc2lnbmVkIik+MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICAgPHRkIHdpZHRoPTklIGJnY29sb3I9I0ZGRkY1NSBhbGlnbj1jZW50ZXIgdGl0bGU9XCIiK25hbWUrIlwiPiIrIiZuYnNwPGJyPjx0dD4iK1V0aWxpdHkuaGV4KHN0cikrIjwvdHQ+IisiPC90ZD5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLndyaXRlKCIgICAgICAgICAgICA8dGQgd2lkdGg9OSUgYmdjb2xvcj0jRkZGRjU1IGFsaWduPWNlbnRlciB0aXRsZT1cIiIrIiIrIlwiPiIrIiZuYnNwPGJyPjx0dD4iK1V0aWxpdHkuaGV4KHN0cikrIjwvdHQ+IisiPC90ZD5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobmFtZS5pbmRleE9mKCJwcml2YXRlIikhPS0xKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHMgPSB0MTAudHJhbnNsaXRlcmF0ZShzdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICAgPHRkIHdpZHRoPTklIGJnY29sb3I9I0ZGQkJCQiAgYWxpZ249Y2VudGVyIHRpdGxlPVwiIituYW1lKyJcIj4iKyImbmJzcDxicj48dHQ+IitVdGlsaXR5LmhleChzdHIpKyI8L3R0PiIrIjwvdGQ+XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXMuZXF1YWxzKHN0cikpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Mud3JpdGUoIiAgICAgICAgICAgIDx0ZCB3aWR0aD05JSAgYmdjb2xvcj0jQ0NFRUREIGFsaWduPWNlbnRlcj4iK3MgKyI8L3RkPiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLndyaXRlKCIgICAgICAgICAgICA8dGQgd2lkdGg9OSUgYmdjb2xvcj0jQ0NFRUREIGFsaWduPWNlbnRlcj4mbmJzcDs8L3RkPiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Mud3JpdGUoIiAgICAgICAgICAgIDx0ZCB3aWR0aD05JSBhbGlnbj1jZW50ZXIgdGl0bGU9XCIiK25hbWUrIlwiPiIrIHN0cisiPGJyPjx0dD4iK1V0aWxpdHkuaGV4KHN0cikrIjwvdHQ+IisiPC90ZD5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Mud3JpdGUoIiAgICAgICAgICAgPHRkIHdpZHRoPTklID4mbmJzcDwvdGQ+XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICA8L3RyPlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3Mud3JpdGUoZm9vdGVyKTsKKyAgICAgICAgICAgIG9zLmNsb3NlKCk7CisgICAgICAgIH1jYXRjaCggRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVDaGFydHMoKXsKKyAgICAgICAgdHJ5eworCSAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDEgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSW50ZXJJbmRpYy1CZW5nYWxpIik7ICAgIAorCSAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDIgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSW50ZXJJbmRpYy1HdXJtdWtoaSIpOworCSAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDMgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSW50ZXJJbmRpYy1HdWphcmF0aSIpOworCSAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSW50ZXJJbmRpYy1Pcml5YSIpOworCSAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDUgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSW50ZXJJbmRpYy1UYW1pbCIpOworCSAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDYgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSW50ZXJJbmRpYy1UZWx1Z3UiKTsKKwkgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQ3ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtS2FubmFkYSIpOworCSAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDggPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZSgiSW50ZXJJbmRpYy1NYWxheWFsYW0iKTsKKwkgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQ5ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIkludGVySW5kaWMtRGV2YW5hZ2FyaSIpOworICAgICAgICAgICAgCisJICAgICAgICBVbmljb2RlU2V0SXRlcmF0b3Igc0l0ZXIgPSBuZXcgVW5pY29kZVNldEl0ZXJhdG9yKGRldmEpOworCSAgICAgICAgCisJICAgICAgICBmb3IoaW50IGk9MHgwOTAwO2k8PTB4MDk3RjtpKyspeworCSAgICAgICAgICAgU3RyaW5nW10gYXJyID0gIG5ldyBTdHJpbmdbMTBdOworCSAgICAgICAgICAgYXJyWzBdPVVURjE2LnZhbHVlT2YoKGkmMHhGRikgKyAweEUwMDApOworCSAgICAgICAgICAgdGFibGUucHV0KFVURjE2LnZhbHVlT2YoaSksYXJyKTsKKwkgICAgICAgIH0KKyAgICAgICAgICAgIAorCSAgICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIG9zID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihuZXcgRmlsZU91dHB1dFN0cmVhbSgiY29tcGFyaXNvbi1jaGFydC5odG1sIiksIlVURi04Iik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9zLndyaXRlKGhlYWRlcik7CisJICAgICAgICAvKgorCSAgICAgICAgd3JpdGVDaGFydHModDEsYmVuZywxKTsgICAgICAgIAorCSAgICAgICAgd3JpdGVDaGFydHModDIsZ3VydSwyKTsgCisJICAgICAgICB3cml0ZUNoYXJ0cyh0MyxndWpyLDMpOyAKKwkgICAgICAgIHdyaXRlQ2hhcnRzKHQ0LG9yeWEsNCk7IAorCSAgICAgICAgd3JpdGVDaGFydHModDUsdGFtbCw1KTsgCisJICAgICAgICB3cml0ZUNoYXJ0cyh0Nix0ZWx1LDYpOyAKKwkgICAgICAgIHdyaXRlQ2hhcnRzKHQ3LGtuZGEsNyk7IAorCSAgICAgICAgd3JpdGVDaGFydHModDgsbWx5bSw4KTsgCisgICAgICAgICAgICAqLworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgIHdyaXRlQ2hhcnRzKHQ5LDB4MDkwMCwxKTsKKyAgICAgICAgICAgIHdyaXRlQ2hhcnRzKHQxLDB4MDk4MCwyKTsgICAgICAgIAorICAgICAgICAgICAgd3JpdGVDaGFydHModDIsMHgwQTAwLDMpOyAKKyAgICAgICAgICAgIHdyaXRlQ2hhcnRzKHQzLDB4MEE4MCw0KTsgCisgICAgICAgICAgICB3cml0ZUNoYXJ0cyh0NCwweDBCMDAsNSk7IAorICAgICAgICAgICAgd3JpdGVDaGFydHModDUsMHgwQjgwLDYpOyAKKyAgICAgICAgICAgIHdyaXRlQ2hhcnRzKHQ2LDB4MGMwMCw3KTsgCisgICAgICAgICAgICB3cml0ZUNoYXJ0cyh0NywweDBDODAsOCk7IAorICAgICAgICAgICAgd3JpdGVDaGFydHModDgsMHgwRDAwLDkpOyAKKyAgICAgICAgICAgICovCisgICAgICAgICAgICB3cml0ZUlJQ2hhcnRzKHQ5LDB4MDkwMCwxKTsKKyAgICAgICAgICAgIHdyaXRlSUlDaGFydHModDEsMHgwOTgwLDIpOyAgICAgICAgCisgICAgICAgICAgICB3cml0ZUlJQ2hhcnRzKHQyLDB4MEEwMCwzKTsgCisgICAgICAgICAgICB3cml0ZUlJQ2hhcnRzKHQzLDB4MEE4MCw0KTsgCisgICAgICAgICAgICB3cml0ZUlJQ2hhcnRzKHQ0LDB4MEIwMCw1KTsgCisgICAgICAgICAgICB3cml0ZUlJQ2hhcnRzKHQ1LDB4MEI4MCw2KTsgCisgICAgICAgICAgICB3cml0ZUlJQ2hhcnRzKHQ2LDB4MGMwMCw3KTsgCisgICAgICAgICAgICB3cml0ZUlJQ2hhcnRzKHQ3LDB4MEM4MCw4KTsgCisgICAgICAgICAgICB3cml0ZUlJQ2hhcnRzKHQ4LDB4MEQwMCw5KTsgCisJICAgICAgICBmb3IoaW50IGk9MHgwOTAwO2k8PTB4MDk3RjtpKyspeworCSAgICAgICAgICAgIFN0cmluZ1tdIHRlbXAgPSAoU3RyaW5nW10pdGFibGUuZ2V0KFVURjE2LnZhbHVlT2YoaSkpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gd3JpdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IoaW50IGs9MTtrPHRlbXAubGVuZ3RoO2srKyl7CisgICAgICAgICAgICAgICAgICAgIGlmKFVDaGFyYWN0ZXIuZ2V0RXh0ZW5kZWROYW1lKFVURjE2LmNoYXJBdCh0ZW1wW2tdLDApKS5pbmRleE9mKCJ1bmFzc2lnbmVkIik8MCl7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYod3JpdGUpeworCQkgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICA8dHI+XG4iKTsKKwkJICAgICAgICAgICAgZm9yKGludCBqPTA7IGo8dGVtcC5sZW5ndGg7aisrKXsKKwkJICAgICAgICAgICAgICAgIGlmKHRlbXBbal0hPW51bGwpeworCSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZmFsbGJhY2s9ZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IHRlbXBbal07CisJICAgICAgICAgICAgICAgICAgICAgICAgCisJCQkgICAgICAgICAgICAgICAgaWYodGVtcFtqXS5pbmRleE9mKCI6RkFMTEJBQ0siKT49MCl7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRlbXBbal0uc3Vic3RyaW5nKDAsdGVtcFtqXS5pbmRleE9mKCI6IikpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjaz10cnVlOworCQkJICAgICAgICAgICAgICAgICAgIC8vIG9zLndyaXRlKCIgICAgICAgICAgICA8dGQgYmdjb2xvcj0jRkZGRjAwIGFsaWduPWNlbnRlciB0aXRsZT1cIiIrKyJcIj4iK3N0cisiPGJyPjx0dD4iK1V0aWxpdHkuaGV4KHN0cikrIjwvdHQ+IisiPC90ZD5cbiIpOworCQkJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IFVDaGFyYWN0ZXIuZ2V0RXh0ZW5kZWROYW1lKFVURjE2LmNoYXJBdChzdHIsMCkpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZhbGxiYWNrKXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Mud3JpdGUoIiAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSNCQkJCRkYgYWxpZ249Y2VudGVyIHRpdGxlPVwiIituYW1lKyJcIj4iKyBzdHIrIjxicj48dHQ+IitVdGlsaXR5LmhleChzdHIpKyI8L3R0PiIrIjwvdGQ+XG4iKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihuYW1lLmluZGV4T2YoInVuYXNzaWduZWQiKSE9LTEpeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICAgPHRkIGJnY29sb3I9I0NDQ0NDQyBhbGlnbj1jZW50ZXIgdGl0bGU9XCIiK25hbWUrIlwiPiIrIiZuYnNwPGJyPjx0dD4iK1V0aWxpdHkuaGV4KHN0cikrIjwvdHQ+IisiPC90ZD5cbiIpOworCSAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKG5hbWUuaW5kZXhPZigicHJpdmF0ZSIpIT0tMSl7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLndyaXRlKCIgICAgICAgICAgICA8dGQgYmdjb2xvcj0jRkZCQkJCIGFsaWduPWNlbnRlciB0aXRsZT1cIiIrbmFtZSsiXCI+IisiJm5ic3A8YnI+PHR0PiIrVXRpbGl0eS5oZXgoc3RyKSsiPC90dD4iKyI8L3RkPlxuIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICAgPHRkIGFsaWduPWNlbnRlciB0aXRsZT1cIiIrbmFtZSsiXCI+Iisgc3RyKyI8YnI+PHR0PiIrVXRpbGl0eS5oZXgoc3RyKSsiPC90dD4iKyI8L3RkPlxuIik7CisJICAgICAgICAgICAgICAgICAgICAgICAgfSAKKwkJICAgICAgICAgICAgICAgIH1lbHNleworCQkgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgiICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuIik7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgb3Mud3JpdGUoIiAgICAgICAgPC90cj5cbiIpOworCQkgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwkgICAgICAgIG9zLndyaXRlKGZvb3Rlcik7CisgICAgICAgICAgICBvcy5jbG9zZSgpOworICAgICAgICB9Y2F0Y2goIEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgc3RhdGljIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldEtleShpbnQgY3ApeworICAgICAgICBpbnQgZGVsdGEgPSBjcCAmIDB4RkY7CisgICAgICAgIGRlbHRhLT0gKGRlbHRhPjB4N2YpPyAweDgwIDogMDsKKyAgICAgICAgLy9kZWx0YSs9MHgwOTAwOworICAgICAgICByZXR1cm4gVVRGMTYudmFsdWVPZihkZWx0YSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZUNoYXJ0cyhUcmFuc2xpdGVyYXRvciB0cmFucywgaW50IHN0YXJ0LCBpbnQgaW5kZXgpeworICAgICAgICAKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgaW52ZXJzZSA9IHRyYW5zLmdldEludmVyc2UoKTsKKyAgICAgICAgZm9yKGludCBpPTA7aTw9MHg3ZjtpKyspeworICAgICAgICAgICAgU3RyaW5nIGNwID0gVVRGMTYudmFsdWVPZihzdGFydCtpKTsKKyAgICAgICAgICAgIFN0cmluZyBzMSA9IGludmVyc2UudHJhbnNsaXRlcmF0ZShjcCk7CisgICAgICAgICAgICBTdHJpbmcgczIgPSB0cmFucy50cmFuc2xpdGVyYXRlKHMxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nW10gYXJyID0gKFN0cmluZ1tdKXRhYmxlLmdldChnZXRLZXkoc3RhcnQraSkpOworICAgICAgICAgICAgaWYoY3AuZXF1YWxzKHMyKSl7CisgICAgICAgICAgICAgICAgYXJyW2luZGV4XSA9IHMxOworICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgYXJyW2luZGV4XSA9IHMxICsgIjpGQUxMQkFDSyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlSUlDaGFydHMoVHJhbnNsaXRlcmF0b3IgdHJhbnMsaW50IHN0YXJ0LCBpbnQgaW5kZXgpeworICAgICAgICAKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgaW52ZXJzZSA9IHRyYW5zLmdldEludmVyc2UoKTsKKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIgPSBuZXcgVW5pY29kZVNldEl0ZXJhdG9yKGludGVyKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlKGl0ZXIubmV4dCgpKXsKKyAgICAgICAgICAgIFN0cmluZyBjcCA9VVRGMTYudmFsdWVPZihpdGVyLmNvZGVwb2ludCk7CisgICAgICAgICAgICBTdHJpbmcgczEgPSB0cmFucy50cmFuc2xpdGVyYXRlKGNwKTsKKyAgICAgICAgICAgIFN0cmluZyBzMiA9IGludmVyc2UudHJhbnNsaXRlcmF0ZShzMSk7CisgICAgICAgICAgICBTdHJpbmdbXSBhcnIgPSAoU3RyaW5nW10pdGFibGUuZ2V0KFVURjE2LnZhbHVlT2YoaXRlci5jb2RlcG9pbnQmMHhGRikpOworICAgICAgICAgICAgaWYoY3AuZXF1YWxzKHMxKSl7CisgICAgICAgICAgICAgICAgYXJyW2luZGV4XSA9IFVURjE2LnZhbHVlT2Yoc3RhcnQrKCgoYnl0ZSlpdGVyLmNvZGVwb2ludCkmMHhGRikpKyI6VU5BU1NJR05FRCI7CisgICAgICAgICAgICB9ZWxzZSBpZihjcC5lcXVhbHMoczIpKXsKKyAgICAgICAgICAgICAgICBhcnJbaW5kZXhdID0gczE7CisgICAgICAgICAgICB9ZWxzZSBpZihzMS5lcXVhbHMoczIpKXsKKyAgICAgICAgICAgICAgICBpZihzMS5lcXVhbHMoIiIpKXsKKyAgICAgICAgICAgICAgICAgICAgYXJyW2luZGV4XSA9IFVURjE2LnZhbHVlT2Yoc3RhcnQrKCgoYnl0ZSlpdGVyLmNvZGVwb2ludCkmMHhGRikpKyI6Q09OU1VNRUQiOworICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICBhcnJbaW5kZXhdID0gczErICI6RkFMTEJBQ0siOzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2V7CisgICAgICAgICAgICAgICAgaWYoczIuZXF1YWxzKCIiKSl7CisgICAgICAgICAgICAgICAgICAgIGFycltpbmRleF0gPSBVVEYxNi52YWx1ZU9mKHN0YXJ0KygoKGJ5dGUpaXRlci5jb2RlcG9pbnQpJjB4RkYpKSsiOkNPTlNVTUVEIjsKKyAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgYXJyW2luZGV4XSA9IHMxKyAiOkZBTExCQUNLIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlQ2hhcnRzKFRyYW5zbGl0ZXJhdG9yIHRyYW5zLCBVbmljb2RlU2V0IHRhcmdldCwgaW50IGluZGV4KXsKKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIHRJdGVyID0gbmV3IFVuaWNvZGVTZXRJdGVyYXRvcih0YXJnZXQpOworICAgICAgICBUcmFuc2xpdGVyYXRvciBpbnZlcnNlID0gdHJhbnMuZ2V0SW52ZXJzZSgpOworICAgICAgICB3aGlsZSh0SXRlci5uZXh0KCkpeworICAgICAgICAgICAgU3RyaW5nIGNwID0gVVRGMTYudmFsdWVPZih0SXRlci5jb2RlcG9pbnQpOworICAgICAgICAgICAgU3RyaW5nIHMxID0gaW52ZXJzZS50cmFuc2xpdGVyYXRlKGNwKTsKKyAgICAgICAgICAgIFN0cmluZyBzMiA9IHRyYW5zLnRyYW5zbGl0ZXJhdGUoczEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmdbXSBhcnIgPSAoU3RyaW5nW10pdGFibGUuZ2V0KGdldEtleSh0SXRlci5jb2RlcG9pbnQpKTsKKyAgICAgICAgICAgIGlmKGNwLmVxdWFscyhzMikpeworICAgICAgICAgICAgICAgIGFycltpbmRleF0gPSBjcDsKKyAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgIGFycltpbmRleF0gPSBjcCArICI6RkFMTEJBQ0siOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvZHVtcElDVXJ1bGVzLmJhdCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9kdW1wSUNVcnVsZXMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3ZDliY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvZHVtcElDVXJ1bGVzLmJhdApAQCAtMCwwICsxLDQ3OSBAQAorQHJlbSA9ICctLSotUGVybC0qLS0KK0BlY2hvIG9mZgoraWYgIiVPUyUiID09ICJXaW5kb3dzX05UIiBnb3RvIFdpbk5UCitwZXJsIC14IC1TICIlMCIgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKK2dvdG8gZW5kb2ZwZXJsCis6V2luTlQKK3BlcmwgLXggLVMgIiUwIiAlKgoraWYgTk9UICIlQ09NU1BFQyUiID09ICIlU3lzdGVtUm9vdCVcc3lzdGVtMzJcY21kLmV4ZSIgZ290byBlbmRvZnBlcmwKK2lmICVlcnJvcmxldmVsJSA9PSA5MDA5IGVjaG8gWW91IGRvIG5vdCBoYXZlIFBlcmwgaW4geW91ciBQQVRILgorZ290byBlbmRvZnBlcmwKK0ByZW0gJzsKKyMhcGVybAorI2xpbmUgMTQKKworIyBUaGlzIHBlcmwgc2NyaXB0IGNyZWF0ZXMgSUNVIHRyYW5zbGl0ZXJhdG9yIGRhdGEgZmlsZXMsIHRoYXQgbGl2ZQorIyBpbiBpY3UvZGF0YSwgZnJvbSBJQ1U0SiBVVEY4IHRyYW5zbGl0ZXJhdG9yIGRhdGEgZmlsZXMsIGluCisjIGljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvLgorIworIyBUaGUgdHJhbnNmb3JtYXRpb24gdGhhdCBpcyBkb25lIGlzIHZlcnkgbWluaW1hbC4gIFRoZSBzY3JpcHQgYXNzdW1lcworIyB0aGF0IHRoZSBpbnB1dCBmaWxlcyB1c2Ugb25seSAjIGNvbW1lbnRzCisjIGFuZCB0aGF0IHRoZXkgZm9sbG93IGEgcmlnaWQgZm9ybWF0LgorIworIyBUaGUgb3V0cHV0IGZpbGVzIGFyZSBuYW1lZCBhY2NvcmRpbmcgdG8gSUNVIGNvbnZlbnRpb25zIChzZWUgTkFNRV9NQVAKKyMgYmVsb3cpIGFuZCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoZXkgc2hvdWxkIGJlIG1hbnVhbGx5CisjIGNoZWNrZWQgYW5kIHRoZW4gY29waWVkIGludG8gdGhlIGljdS9kYXRhL3RyYW5saXQgZGlyZWN0b3J5LgorIyBBbiBJQ1UgYnVpbGQgbXVzdAorIyB0aGVuIGJlIGluaXRpYXRlZCwgYW5kIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiBJQ1UgdHJhbnNsaXRlcmF0b3IgdGVzdHMKKyMgc2hvdWxkIGJlIHJ1biBhZnRlciB0aGF0LgorIworIyBBbGFuIExpdSA1LzE5LzAwIDIvMjcvMDEKKwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBzdHJpY3Q7CisKK3VzZSB2YXJzIHF3KCVVU0VEX0ZJTEVTKTsKKworbXkgJERJUiA9ICIuLi8uLi8uLi9pbXBsL2RhdGEiOworbXkgJElEID0gJyc7CisKK0dldE9wdGlvbnMoJ2Rpcj1zJyA9PiBcJERJUiwKKyAgICAgICAgICAgJ2lkPXMnID0+IFwkSUQsCisgICAgICAgICAgICc8PicgPT4gXCZ1c2FnZSkgfHwgZGllOworCit1c2FnZSgpIGlmIChAQVJHVik7CisKK215ICRJRCA9fiBzLy0vXy87CitpZiAoISAtZCAkRElSKSB7CisgICAgcHJpbnQgU1RERVJSICIkRElSIGlzIG5vdCBhIGRpcmVjdG9yeVxuIjsKKyAgICB1c2FnZSgpOworfQorCitzdWIgdXNhZ2UgeworICAgIG15ICRtZSA9ICQwOworICAgICRtZSA9fiBzfC4rWy9cXF18fDsKKyAgICBwcmludCAiVXNhZ2U6ICRtZSBbLWRpciA8ZGlyPl0gWy1pZCA8aWQ+XVxuIjsKKyAgICBwcmludCAiIC0tZGlyIDxkaXI+IFNwZWNpZnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZVxuIjsKKyAgICBwcmludCAiICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yXyoudHh0IGZpbGVzXG4iOworICAgIHByaW50ICIgLS1pZCA8aWQ+ICAgU3BlY2lmeSBhIHNpbmdsZSBJRCB0byB0cmFuc2Zvcm0sIGUuZy5cbiI7CisgICAgcHJpbnQgIiAgICAgICAgICAgICBGdWxsd2lkdGgtSGFsZndpZHRoXG4iOworICAgIGV4aXQoMSk7Cit9CisKK215ICRKQVZBX09OTFkgPSAnLSc7CisKK215ICRPVVRESVIgPSAiaWN1NGMiOworbWtkaXIoJE9VVERJUiwwNzc3KTsKKworIyBNYXBwaW5nIGZyb20gSmF2YSBmaWxlIG5hbWVzIHRvIElDVSBmaWxlIG5hbWVzCisjIENvbnN0cmFpbnRzIG9uIElDVTRDIGZpbGUgbmFtZTogaWN1ZHQyMGJfCisjIHwtLTkgKHByZWZpeCktLS18LS0tMTgobmFtZSB3aXRoIGRpc3Rpbmd1aXNoZXIsZS5nLiAidF8iICktLS0tfAorIyAgLS00ICgiLiIrZXh0biktLXwgPSAzMSBjaGFyYWN0ZXJzIHRvdGFsLgorIyBUaGF0IGlzLCBtdXN0IGhhdmUgbGVuZ3RoKCVOQU1FX01BUHt4fSkgPD0gMTYKKworbXkgJE1BWF9JQ1U0Q19GSUxFTkFNRV9MRU4gPSAxODsKKworIyAtLSBISVNUT1JZIC0tIElmIG5vdCBtYXJrZWQsIHRoZW4gcHJlIDIuMi4KKyMgICAgICAgICAgICAgICBBbGwgSW50ZXJJbmRpYyBhcmUgcHJlIDIuMi4KKyMgQW55X0FjY2VudHMKKyMgQW55X1B1Ymxpc2hpbmcKKyMgQXJhYmljX0xhdGluICAgICAgICAgICAqIDIuMgorIyBDeXJpbGxpY19MYXRpbgorIyBGdWxsd2lkdGhfSGFsZndpZHRoCisjIEdyZWVrX0xhdGluCisjIEdyZWVrX0xhdGluX1VOR0VHTiAgICAgKiAyLjIgKG1vdmVkIGZyb20gZWwudHh0KQorIyBIYW5fTGF0aW4gICAgICAgICAgICAgICogMi4yCisjIEhhbl9MYXRpbl9EZWZpbml0aW9uICAgKiAyLjIKKyMgSGFuX0xhdGluX0VESUNUICAgICAgICAqIDIuMiBKIG9ubHkKKyMgSGVicmV3X0xhdGluICAgICAgICAgICAqIDIuMgorIyBIaXJhZ2FuYV9LYXRha2FuYQorIyBIaXJhZ2FuYV9MYXRpbgorIyBMYXRpbl9KYW1vCisjIExhdGluX0thdGFrYW5hCisjIFRoYWlMb2dpY2FsX0xhdGluICAgICAgKiAyLjIgSiBvbmx5CisjIFRoYWlfVGhhaUxvZ2ljYWwgICAgICAgKiAyLjIgSiBvbmx5CisjIFRoYWlfVGhhaVNlbWkgICAgICAgICAgKiAyLjIgSiBvbmx5CisKK215ICVOQU1FX01BUCA9ICgKKyAgICAgIyBBbiBJQ1UgbmFtZSBvZiAiIiBtZWFucyB0aGUgSUNVIG5hbWUgPT0gdGhlIElECisKKyAgICAgIyBXZSBmaWx0ZXIgbmFtZXMgYmFzZWQgb24gd2hhdCBpcyBpbiB1c2UgaW4gdGhlIGluZGV4IGZpbGUuCisKKyAgICAgIyBGbGFnIGEgcnVsZSBhcyBKQVZBX09OTFkgaWYgaXQgZXhpc3RzIGFuZCB3ZSB1c2UgaXQgaW4gSmF2YSwKKyAgICAgIyBidXQgd2UgZG9uJ3QgdXNlIGl0IGluIEMuCisKKyAgICAgIyBVc2Ugb2ZmaWNpYWwgc2NyaXB0IGFiYnJldmlhdGlvbnMgd2hlcmUgcG9zc2libGUuCisKKyAgICMgfC4uLi4uLi4uLi4uLi4ufCAgICAgICAgICAgfC4uLi4uLi4uLi4uLi4ufCAgICAgICAgICAgICAKKyAgICMgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorICAgICBBbnlfQWNjZW50cyAgICAgICAgICAgID0+ICIiLAorICAgICBBbnlfUHVibGlzaGluZyAgICAgICAgID0+ICIiLAorICAgICBDeXJpbGxpY19MYXRpbiAgICAgICAgID0+ICJDeXJsX0xhdG4iLAorICAgICBGdWxsd2lkdGhfSGFsZndpZHRoICAgID0+ICJGV2lkdGhfSFdpZHRoIiwKKyAgICAgR3JlZWtfTGF0aW4gICAgICAgICAgICA9PiAiR3Jla19MYXRuIiwKKyAgICAgSGlyYWdhbmFfS2F0YWthbmEgICAgICA9PiAiSGlyYV9LYW5hIiwKKyAgICAgSGlyYWdhbmFfTGF0aW4gICAgICAgICA9PiAiSGlyYV9MYXRuIiwKKyAgICAgTGF0aW5fSmFtbyAgICAgICAgICAgICA9PiAiTGF0bl9KYW1vIiwKKyAgICAgTGF0aW5fS2F0YWthbmEgICAgICAgICA9PiAiTGF0bl9LYW5hIiwKKworICAgICBBcmFiaWNfTGF0aW4gICAgICAgICAgID0+ICJBcmFiX0xhdG4iLAorICAgICBHcmVla19MYXRpbl9VTkdFR04gICAgID0+ICJHcmVrX0xhdG5fVU5HRUdOIiwKKyAgICAgSGFuX0xhdGluICAgICAgICAgICAgICA9PiAiSGFuaV9MYXRuIiwKKyAgICAgSGFuX0xhdGluX0RlZmluaXRpb24gICA9PiAiSGFuaV9MYXRuX0RlZiIsCisgICAgIEhhbl9MYXRpbl9FRElDVCAgICAgICAgPT4gIkhhbmlfTGF0bl9FRElDVCIsCisgICAgIEhlYnJld19MYXRpbiAgICAgICAgICAgPT4gIkhlYnJfTGF0biIsCisgICAgIFRoYWlMb2dpY2FsX0xhdGluICAgICAgPT4gJEpBVkFfT05MWSwgIyAiVGhhaUxvZ19MYXRuIiwKKyAgICAgVGhhaV9UaGFpTG9naWNhbCAgICAgICA9PiAkSkFWQV9PTkxZLCAjICJUaGFpX1RoYWlMb2ciLAorICAgICBUaGFpX1RoYWlTZW1pICAgICAgICAgID0+ICRKQVZBX09OTFksICMgIlRoYWlfVGhhaVNlbWkiLAorCisgICAgIEludGVySW5kaWNfQmVuZ2FsaSAgICAgPT4gIkludGVySW5kaWNfQmVuZyIsCisgICAgIEludGVySW5kaWNfRGV2YW5hZ2FyaSAgPT4gIkludGVySW5kaWNfRGV2YSIsCisgICAgIEludGVySW5kaWNfR3VqYXJhdGkgICAgPT4gIkludGVySW5kaWNfR3VqciIsCisgICAgIEludGVySW5kaWNfR3VybXVraGkgICAgPT4gIkludGVySW5kaWNfR3VydSIsCisgICAgIEludGVySW5kaWNfS2FubmFkYSAgICAgPT4gIkludGVySW5kaWNfS25kYSIsCisgICAgIEludGVySW5kaWNfTGF0aW4gICAgICAgPT4gIkludGVySW5kaWNfTGF0biIsCisgICAgIEludGVySW5kaWNfTWFsYXlhbGFtICAgPT4gIkludGVySW5kaWNfTWx5bSIsCisgICAgIEludGVySW5kaWNfT3JpeWEgICAgICAgPT4gIkludGVySW5kaWNfT3J5YSIsCisgICAgIEludGVySW5kaWNfVGFtaWwgICAgICAgPT4gIkludGVySW5kaWNfVGFtbCIsCisgICAgIEludGVySW5kaWNfVGVsdWd1ICAgICAgPT4gIkludGVySW5kaWNfVGVsdSIsCisKKyAgICAgQmVuZ2FsaV9JbnRlckluZGljICAgICA9PiAiQmVuZ19JbnRlckluZGljIiwKKyAgICAgRGV2YW5hZ2FyaV9JbnRlckluZGljICA9PiAiRGV2YV9JbnRlckluZGljIiwKKyAgICAgR3VqYXJhdGlfSW50ZXJJbmRpYyAgICA9PiAiR3Vqcl9JbnRlckluZGljIiwKKyAgICAgR3VybXVraGlfSW50ZXJJbmRpYyAgICA9PiAiR3VydV9JbnRlckluZGljIiwKKyAgICAgS2FubmFkYV9JbnRlckluZGljICAgICA9PiAiS25kYV9JbnRlckluZGljIiwKKyAgICAgTGF0aW5fSW50ZXJJbmRpYyAgICAgICA9PiAiTGF0bl9JbnRlckluZGljIiwKKyAgICAgTWFsYXlhbGFtX0ludGVySW5kaWMgICA9PiAiTWx5bV9JbnRlckluZGljIiwKKyAgICAgT3JpeWFfSW50ZXJJbmRpYyAgICAgICA9PiAiT3J5YV9JbnRlckluZGljIiwKKyAgICAgVGFtaWxfSW50ZXJJbmRpYyAgICAgICA9PiAiVGFtbF9JbnRlckluZGljIiwKKyAgICAgVGVsdWd1X0ludGVySW5kaWMgICAgICA9PiAiVGVsdV9JbnRlckluZGljIiwKKyAgICAgCisgICAgIEhhbl9QaW55aW4gICAgICAgICAgICAgPT4gJEpBVkFfT05MWSwKKyAgICAgS2FuamlfRW5nbGlzaCAgICAgICAgICA9PiAkSkFWQV9PTkxZLAorICAgICBLYW5qaV9PblJvbWFqaSAgICAgICAgID0+ICRKQVZBX09OTFksCisgICAgICk7CisKK215ICgkeCwkeCwkeCwkeCwkeCwkVEhJU19ZRUFSKSA9IGxvY2FsdGltZSgpOworJFRISVNfWUVBUiArPSAxOTAwOworCisjIEhlYWRlciBibG9ja3Mgb2YgdGV4dCB3cml0dGVuIGF0IHN0YXJ0IG9mIElDVSBvdXRwdXQgZmlsZXMKK215ICRIRUFERVIxID0gPDxFTkQ7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb3B5cmlnaHQgKGMpIDE5OTktJFRISVNfWUVBUiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworLy8gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUSElTIElTIEEgTUFDSElORS1HRU5FUkFURUQgRklMRQorRU5ECitteSAkSEVBREVSMiA9IDw8RU5EOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRU5ECisKK215ICRUT09MID0gJDA7CisKKyMgQ29udmVydCB0aGUgaW5kZXggZmlyc3Q7IHRoaXMgdGVsbHMgdXMgd2hpY2ggcnVsZSBmaWxlcyBhcmUgaW4gdXNlLgorY29udmVydEluZGV4KCk7CisKKyMgcHJpbnQgIkluIHVzZTpcbiIsIGpvaW4oIlxuIiwgc29ydCBrZXlzKCVVU0VEX0ZJTEVTKSksICJcbiI7CisKKyMgSXRlcmF0ZSBvdmVyIGFsbCBKYXZhIFJCVCBydWxlIGZpbGVzCitmb3JlYWNoICg8JERJUi9UcmFuc2xpdGVyYXRvcl8qLnR4dD4pIHsKKyAgICBuZXh0IGlmICgvfiQvKTsgIyBJZ25vcmUgZW1hY3MgYmFja3VwcworICAgIG5leHQgaWYgKC9faW5kZXhcLnR4dCQvKTsgIyBUaGUgaW5kZXggZmlsZSB3YXMgcHJvY2Vzc2VkIGFib3ZlCisgICAgIyBTZWxlY3QgZWl0aGVyIHRoZSBjb21tYW5kLWxpbmUgYXJnLCBpZiB0aGVyZSB3YXMgb25lLCBvcgorICAgICMgYW55IGZpbGVzIG1lbnRpb25lZCBpbiB0aGUgaW5kZXguCisgICAgbXkgJGxlYWYgPSAkXzsKKyAgICAkbGVhZiA9fiBzfC4rWy9cXF18fDsKKyAgICBpZiAoKCRJRCAmJiAkbGVhZiA9fiAvJElELykgfHwgZXhpc3RzICRVU0VEX0ZJTEVTeyRsZWFmfSkgeworICAgICAgICBteSAoJG91dCwgJGlkKSA9IGNvbnZlcnRGaWxlTmFtZSgkXyk7CisgICAgICAgIGlmICgkb3V0KSB7CisgICAgICAgICAgICBpZiAoJG91dCBlcSAkSkFWQV9PTkxZKSB7CisgICAgICAgICAgICAgICAgcHJpbnQgU1RERVJSICIqKiogJGlkIHNraXBwZWQ6IEphdmEgb25seSAqKipcbiI7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbGUoJGlkLCAkXywgJG91dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2lmICghJElEKSB7CisgICAgICAgIHByaW50ICIqKiogJGxlYWYgc2tpcHBlZDogbm90IGluIHVzZSAqKipcbiI7CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbnZlcnQgYSBKYXZhIGZpbGUgbmFtZSB0byBDCisjIFBhcmFtOiBKYXZhIGZpbGUgbmFtZSBvZiB0aGUgZm9ybSBtfFRyYW5zbGl0ZXJhdG9yXyguKylcLnV0ZjhcLnR4dCR8CisjIFJldHVybjogQSBDIGZpbGUgbmFtZSAoZS5nLiwgbGRldmFuLnR4dCkgb3IgdGhlIGVtcHR5IHN0cmluZywKKyMgIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcsIG9yICRKQVZBX09OTFkgaWYgdGhlIGdpdmVuIGZpbGUgaXNuJ3QKKyMgIGludGVuZGVkIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIEMuCitzdWIgY29udmVydEZpbGVOYW1lIHsKKyAgICBsb2NhbCAkXyA9IHNoaWZ0OworICAgIG15ICRpZDsKKyAgICBpZiAobXxUcmFuc2xpdGVyYXRvcl8oLispXC51dGY4XC50eHQkfCB8fAorICAgICAgICBtfFRyYW5zbGl0ZXJhdG9yXyguKylcLnR4dCR8KSB7CisgICAgICAgICRpZCA9ICQxOworICAgIH0gZWxzZSB7IGRpZSAiQ2FuJ3QgcGFyc2UgSmF2YSBmaWxlIG5hbWUgJF8iOyB9CisgICAgaWYgKCFleGlzdHMgJE5BTUVfTUFQeyRpZH0pIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJFUlJPUjogJGlkIG5vdCBpbiBtYXA7IHBsZWFzZSB1cGRhdGUgJDBcbiI7CisgICAgICAgIHJldHVybiAnJzsKKyAgICB9CisgICAgbXkgJG91dCA9ICROQU1FX01BUHskaWR9OworICAgIGlmICgkb3V0IGVxICcnKSB7CisgICAgICAgICRvdXQgPSAkaWQ7CisgICAgfQorICAgIGlmICgkb3V0IG5lICRKQVZBX09OTFkpIHsKKyAgICAgICAgJG91dCA9ICd0XycgLiAkb3V0OworICAgIH0KKyAgICBpZiAobGVuZ3RoKCRvdXQpID4gJE1BWF9JQ1U0Q19GSUxFTkFNRV9MRU4pIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJFUlJPUjogSUNVNEMgZmlsZSBuYW1lIFwiJG91dFwiIHRvbyBsb25nOyBwbGVhc2UgdXBkYXRlICQwXG4iOworICAgICAgICByZXR1cm4gJyc7CisgICAgfQorICAgIHJldHVybiAoJG91dCwgJGlkKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb252ZXJ0IHRoZSBpbmRleCBmaWxlIGZyb20gSmF2YSB0byBDIGZvcm1hdAorc3ViIGNvbnZlcnRJbmRleCB7CisgICAgbXkgJEpBVkFfSU5ERVggPSAiVHJhbnNsaXRlcmF0b3JfaW5kZXgudHh0IjsKKyAgICBteSAkQ19JTkRFWCA9ICJ0cmFuc2xpdF9pbmRleC50eHQiOworICAgIG9wZW4oSkFWQV9JTkRFWCwgIiRESVIvJEpBVkFfSU5ERVgiKSBvciBkaWU7CisgICAgb3BlbihDX0lOREVYLCAiPiRPVVRESVIvJENfSU5ERVgiKSBvciBkaWU7CisgICAgCisgICAgaGVhZGVyKFwqQ19JTkRFWCwgJEpBVkFfSU5ERVgpOworICAgIAorICAgIHByaW50IENfSU5ERVggPDxFTkQ7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOLkIuOiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBmcm9tIHRoZQorLy8gY29ycmVzcG9uZGluZyBJQ1U0SiBmaWxlLCB3aGljaCBpcyB0aGUgbWFzdGVyIGZpbGUgdGhhdCByZWNlaXZlcworLy8gcHJpbWFyeSB1cGRhdGVzLiAgVGhlIGNvbG9uLWRlbGltaXRlZCBmaWVsZHMgaGF2ZSBiZWVuIHNwbGl0IGludG8KKy8vIHNlcGFyYXRlIHN0cmluZ3MuICBGb3IgJ2ZpbGUnIGFuZCAnaW50ZXJuYWwnIGxpbmVzLCB0aGUgZW5jb2RpbmcKKy8vIGZpZWxkIGhhcyBiZWVuIGRlbGV0ZWQsIHNpbmNlIHRoZSBlbmNvZGluZyBpcyBwcm9jZXNzZWQgYXQgYnVpbGQKKy8vIHRpbWUgaW4gSUNVNEMuICBDZXJ0YWluIGxhcmdlIHJ1bGUgc2V0cyBub3QgaW50ZW5kZWQgZm9yIGdlbmVyYWwKKy8vIHVzZSBoYXZlIGJlZW4gY29tbWVudGVkIG91dCB3aXRoIHRoZSBub3RhdGlvbiAiSmF2YSBvbmx5Ii4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordHJhbnNsaXRfaW5kZXggeworICBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcklEcyB7CitFTkQKKyAgICAgICAgCisgICAgd2hpbGUgKDxKQVZBX0lOREVYPikgeworICAgICAgICAjIGlnbm9yZSAkU291cmNlICRSZXZpc2lvbiAkRGF0ZSBDVlMga2V5d29yZCBzdWJzdGl0dXRpb25zCisgICAgICAgIG5leHQgaWYgL1wkU291cmNlLyA7CisgICAgICAgIG5leHQgaWYgL1wkUmV2aXNpb24vIDsKKyAgICAgICAgbmV4dCBpZiAvXCREYXRlLyA7CisKKyAgICAgICAgIyB3ZSBoYXZlIHByaW50ZWQgb3V0IHRoZSBjb3B5cmlnaHQgaW5mbyAuLi4gaWdub3JlIG9uZSBpbiBKYXZhIHZlcnNpb24KKyAgICAgICAgbmV4dCBpZiAvQ29weXJpZ2h0LyA7CisgICAgICAgIG5leHQgaWYgL0NvcnBvcmF0aW9uLzsKKworICAgICAgICAjIENvbW1lbnRzOyBjaGFuZ2UgIyB0byAvLworICAgICAgICBpZiAoc3xeKFxzKilcI3wkMS8vfCkgeworICAgICAgICAgICAgcHJpbnQgQ19JTkRFWDsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgIyBCbGFuayBsaW5lcworICAgICAgICBpZiAoIS9cUy8pIHsKKyAgICAgICAgICAgIHByaW50IENfSU5ERVg7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICAgICMgQ29udGVudCBsaW5lcworICAgICAgICBjaG9tcDsKKyAgICAgICAgbXkgJHByZWZpeCA9ICcnOworICAgICAgICAjcmVwbGFjZSBccCB3aXRoIFxccAorICAgICAgICAkXz1+IHMvXFxwL1xcXFxwL2c7CisgICAgICAgIG15IEBhID0gc3BsaXQoJzonLCAkXyk7CisgICAgICAgIGlmICgkYVsxXSBlcSAnZmlsZScgfHwgJGFbMV0gZXEgJ2ludGVybmFsJykgeworICAgICAgICAgICAgIyBDb252ZXJ0IHRoZSBmaWxlIG5hbWUKKyAgICAgICAgICAgIG15ICRpZDsKKyAgICAgICAgICAgICMgUmVjb3JkIGZpbGUgbmFtZXMgaW4gdXNlCisgICAgICAgICAgICAkVVNFRF9GSUxFU3skYVsyXX0gPSAxOworICAgICAgICAgICAgKCRhWzJdLCAkaWQpID0gY29udmVydEZpbGVOYW1lKCRhWzJdKTsKKyAgICAgICAgICAgIGlmICgkYVsyXSBlcSAkSkFWQV9PTkxZKSB7CisgICAgICAgICAgICAgICAgJHByZWZpeCA9ICcvLyBKYXZhIG9ubHk6ICc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgRGVsZXRlIHRoZSBlbmNvZGluZyBmaWVsZAorICAgICAgICAgICAgc3BsaWNlKEBhLCAzLCAxKTsKKyAgICAgICAgfSBlbHNpZiAoJGFbMV0gZXEgJ2FsaWFzJykgeworICAgICAgICAgICAgIyBQYWQgb3V0IHdpdGggZXh0cmEgYmxhbmsgZmllbGRzIHRvIG1ha2UgdGhlCisgICAgICAgICAgICAjIDItZCBhcnJheSBzcXVhcmUKKyAgICAgICAgICAgIHB1c2ggQGEsICIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJDYW4ndCBwYXJzZSAkXyI7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgQ19JTkRFWAorICAgICAgICAgICAgJHByZWZpeCwgInsgIiwKKyAgICAgICAgICAgIGpvaW4oIiwgIiwgbWFwKCJcIiRfXCIiLCBAYSkpLAorICAgICAgICAgICAgIiB9LFxuIjsKKyAgICB9CisKKyAgICBwcmludCBDX0lOREVYIDw8RU5EOworICB9Cit9CitFTkQKKworICAgIGNsb3NlKENfSU5ERVgpOworICAgIGNsb3NlKEpBVkFfSU5ERVgpOworICAgIHByaW50IFNUREVSUiAiJEpBVkFfSU5ERVggLT4gJENfSU5ERVhcbiI7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT3V0cHV0IGEgaGVhZGVyCisjIFBhcmFtOiBGaWxlaGFuZGxlCitzdWIgaGVhZGVyIHsKKyAgICBteSAkb3V0ID0gc2hpZnQ7CisgICAgbXkgJGluID0gc2hpZnQ7CisgICAgcHJpbnQgJG91dCAkSEVBREVSMTsKKyAgICBwcmludCAkb3V0ICIvLyBUb29sOiAkVE9PTFxuLy8gU291cmNlOiAkaW5cbiI7CisgICAgcHJpbnQgJG91dCAiLy8gRGF0ZTogIiwgc2NhbGFyIGxvY2FsdGltZSwgIlxuIjsKKyAgICBwcmludCAkb3V0ICRIRUFERVIyOworICAgIHByaW50ICRvdXQgIlxuIjsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQcm9jZXNzIG9uZSBmaWxlCisjIFBhcmFtOiBJRCwgZS5nLiBGdWxsd2lkdGgtSGFsZndpZHRoCisjIFBhcmFtOiBKYXZhIGlucHV0IGZpbGUgbmFtZSwgZS5nLgorIyAgZjovaWN1NGovc3JjL2NvbS9pYm0vdGV4dC9yZXNvdXJjZXMvVHJhbnNsaXRlcmF0b3JfRnVsbHdpZHRoX0hhbGZ3aWR0aC51dGY4LnR4dAorIyBQYXJhbTogSUNVIG91dHB1dCBmaWxlIG5hbWUsIGUuZy4gZnVsbGhhbGYKK3N1YiBmaWxlIHsKKyAgICBteSAkaWQgPSBzaGlmdDsKKyAgICBteSAkSU4gPSBzaGlmdDsKKyAgICBteSAkb3V0ID0gc2hpZnQ7CisKKyAgICBteSAkT1VUID0gIiRvdXQudHh0IjsKKworICAgICMgU2hvdyBpbnB1dCBzaXplLiBTaG93IG91dHB1dCBzaXplIGxhdGVyIC0tIHVzZWZ1bCBmb3IgcXVpY2sgc2FuaXR5IGNoZWNrLgorICAgIHByaW50ICIkaWQgKCIsIC1zICRJTiwgIikgLT4gJE9VVCAoIjsKKworICAgICMgT3BlbiBmaWxlLCB3cml0ZSBVVEY4IG1hcmtlciwgY2xvc2UgaXQsIGFuZCByZW9wZW4gaW4gdGV4dCBtb2RlCisgICAgb3BlbihPVVQsICI+JE9VVERJUi8kT1VUIikgb3IgZGllOworICAgIGJpbm1vZGUgT1VUOyAgICAgICAgIyBNdXN0IGRvIHRoaXMgc28gd2UgY2FuIHdyaXRlIG91ciBVVEY4IG1hcmtlcgorICAgIHByaW50IE9VVCBwYWNrKCJDMyIsIDB4RUYsIDB4QkIsIDB4QkYpOyAjIFdyaXRlIFVURjggbWFya2VyCisgICAgY2xvc2UoT1VUKTsKKworICAgIG9wZW4oT1VULCAiPj4kT1VURElSLyRPVVQiKSBvciBkaWU7CisgICAgcHJpbnQgT1VUICIgLy8gLSotIENvZGluZzogdXRmLTg7IC0qLVxuIjsKKworICAgIGhlYWRlcihcKk9VVCwgJElOKTsKKyAgICBwcmludCBPVVQgIi8vICRpZFxuIjsKKyAgICBwcmludCBPVVQgIlxuIjsKKyAgICBwcmludCBPVVQgIiRvdXQge1xuIjsKKyAgICBwcmludCBPVVQgIiAgUnVsZSB7XG4iOworCisgICAgb3BlbihJTiwgJElOKSBvciBkaWU7CisgICAgYmlubW9kZSBJTjsgICAgICAgICAgICAgICAgICMgSU4gaXMgYSBVVEY4IGZpbGUKKworICAgIG15ICRmaXJzdCA9IDE7CisgICAgbXkgJEJPTSA9IHBhY2soIkMzIiwgMjM5LCAxODcsIDE5MSk7ICMgYSBVVEY4IGJ5dGUgb3JkZXIgbWFyaworCisgICAgIyBQcm9jZXNzIGVhY2ggbGluZSBieSBjaGFuZ2luZyAjIGNvbW1lbnRzIHRvIC8vIGNvbW1lbnRzCisgICAgIyBhbmQgdGFraW5nIG90aGVyIHRleHQgYW5kIGVuY2xvc2luZyBpdCBpbiBkb3VibGUgcXVvdGVzCisgICAgd2hpbGUgKDxJTj4pIHsKKyAgICAgICAgbXkgJHJhdyA9ICRfOworICAgICAgICAjIGlnbm9yZSAkU291cmNlICRSZXZpc2lvbiAkRGF0ZSBDVlMga2V5d29yZCBzdWJzdGl0dXRpb25zCisgICAgICAgIG5leHQgaWYgL1wkU291cmNlLyA7CisgICAgICAgIG5leHQgaWYgL1wkUmV2aXNpb24vIDsKKyAgICAgICAgbmV4dCBpZiAvXCREYXRlLyA7CisKKyAgICAgICAgIyB3ZSBoYXZlIHByaW50ZWQgb3V0IHRoZSBjb3B5cmlnaHQgaW5mbyAuLi4gaWdub3JlIG9uZSBpbiBKYXZhIHZlcnNpb24KKyAgICAgICAgbmV4dCBpZiAvQ29weXJpZ2h0LyA7CisgICAgICAgIG5leHQgaWYgL0NvcnBvcmF0aW9uLzsKKworICAgICAgICAjIExvb2sgZm9yIGFuZCBkZWxldGUgQk9NCisgICAgICAgIGlmICgkZmlyc3QpIHsKKyAgICAgICAgICAgIHMvXiRCT00vLzsKKyAgICAgICAgICAgICRmaXJzdCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAjIENsZWFuIHRoZSBlb2wganVuayB1cAorICAgICAgICBzL1tceDBEXHgwQV0rJC8vOworCisgICAgICAgICMgSWYgdGhlcmUgaXMgYSB0cmFpbGluZyBiYWNrc2xhc2gsIHRoZW4gZGVsZXRlIGl0IC0tIHdlIGRvbid0CisgICAgICAgICMgbmVlZCBsaW5lIGNvbnRpbnVhdGlvbiBpbiBDLCBzaW5jZSBhZGphY2VudCBzdHJpbmdzIGFyZQorICAgICAgICAjIGNvbmNhdGVuYXRlZC4gIENvdW50IHRyYWlsaW5nIGJhY2tzbGFzaGVzOyBpZiB0aGV5IGFyZSBvZGQsCisgICAgICAgICMgb25lIGlzIHRyYWlsaW5nLgorICAgICAgICBpZiAobXwoXFwrKSR8KSB7CisgICAgICAgICAgICBpZiAoKGxlbmd0aCgkMSkgJSAyKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgc3xcXCR8fDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICMgVHJhbnNmb3JtIGVzY2FwZWQgY2hhcmFjdGVycworICAgICAgICBoaWRlRXNjYXBlcygpOworCisgICAgICAgIGlmICgvXihccyopKFwjLiopJC8pIHsKKyAgICAgICAgICAgICMgQ29tbWVudC1vbmx5IGxpbmUKKyAgICAgICAgICAgIG15ICgkd2hpdGUsICRjbXQpID0gKCQxLCAkMik7CisgICAgICAgICAgICAkY210ID1+IHN8XCN8Ly98OworICAgICAgICAgICAgJF8gPSAkd2hpdGUgLiAkY210OworCisgICAgICAgIH0gZWxzaWYgKCEvXFMvKSB7CisgICAgICAgICAgICAjIEJsYW5rIGxpbmUgLS0gbGVhdmUgYXMtaXMKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyBSZW1vdmUgc2luZ2xlLXF1b3RlZCBtYXR0ZXIgCisgICAgICAgICAgICBteSBAcXVvdGVzOworICAgICAgICAgICAgbXkgJG5xdW90ZXMgPSAwOworICAgICAgICAgICAgbXkgJHggPSAkXzsKKyAgICAgICAgICAgIHdoaWxlIChzL14oW15cJ10qKShcJ1teXCddKlwnKS8kMTw8eCRucXVvdGVzPj4vKSB7CisgICAgICAgICAgICAgICAgcHVzaCBAcXVvdGVzLCAkMjsKKyAgICAgICAgICAgICAgICArKyRucXVvdGVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIEV4dHJhY3QgY29tbWVudAorICAgICAgICAgICAgbXkgJGNtdCA9ICcnOworICAgICAgICAgICAgaWYgKHN8XCMoLiopfHwpIHsKKyAgICAgICAgICAgICAgICAkY210ID0gJy8vJyAuICQxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIEFkZCBxdW90ZXMKKyAgICAgICAgICAgIHN8XihccyopKFxTLio/KShccyopJHwkMVwiJDJcIiQzfDsKKworICAgICAgICAgICAgIyBSZXN0b3JlIHNpbmdsZS1xdW90ZWQgbWF0dGVyCisgICAgICAgICAgICBmb3IgKG15ICRpPTA7ICRpPCRucXVvdGVzOyArKyRpKSB7CisgICAgICAgICAgICAgICAgc3w8PHgkaT4+fCRxdW90ZXNbJGldfDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBSZXN0b3JlIGNvbW1lbnQKKyAgICAgICAgICAgICRfIC49ICRjbXQ7CisgICAgICAgIH0KKworICAgICAgICAjIFJlc3RvcmUgZXNjYXBlZCBjaGFyYWN0ZXJzCisgICAgICAgIHJlc3RvcmVFc2NhcGVzKCk7CisKKyAgICAgICAgcHJpbnQgT1VUICRfLCAiXG4iOworICAgIH0KKworICAgICMgRmluaXNoIHVwCisgICAgY2xvc2UoSU4pOworICAgIHByaW50IE9VVCAiICB9XG4iOworICAgIHByaW50IE9VVCAifVxuIjsKKyAgICBjbG9zZShPVVQpOworCisgICAgIyBXcml0ZSBvdXRwdXQgZmlsZSBzaXplIGZvciBzYW5pdHkgY2hlY2sKKyAgICBwcmludCAtcyAiJE9VVERJUi8kT1VUIiwgIilcbiI7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBoaWRlRXNjYXBlcyB7CisgICAgIyBUcmFuc2Zvcm0gZXNjYXBlZCBjaGFyYWN0ZXJzCisgICAgc3xcXFxcfDw8YnM+PnxnOyAjIERPIFRISVMgRklSU1QgVHJhbnNmb3JtIGJhY2tzbGFzaGVzCisgICAgc3xcXHUoW2EtekEtWjAtOV17NH0pfDw8dSQxPj58ZzsgIyBUcmFuc2Zvcm0gVW5pY29kZSBlc2NhcGVzCisgICAgc3xcXFwifDw8ZHE+PnxnOyAjIFRyYW5zZm9ybSBiYWNrc2xhc2ggZG91YmxlIHF1b3RlCisgICAgc3xcXFwnfDw8c3E+PnxnOyAjIFRyYW5zZm9ybSBiYWNrc2xhc2ggc2luZ2xlIHF1b3RlCisgICAgc3xcXFwjfDw8bGI+PnxnOyAjIFRyYW5zZm9ybSBiYWNrc2xhc2ggcG91bmQKKyAgICBzfFxcKC4pfDw8cSQxPj58ZzsgIyBUcmFuc2Zvcm0gYmFja3NsYXNoIGVzY2FwZXMKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIHJlc3RvcmVFc2NhcGVzIHsKKyAgICAjIFJlc3RvcmUgZXNjYXBlZCBjaGFyYWN0ZXJzCisgICAgc3w8PGJzPj58XFxcXHxnOworICAgIHN8PDxkcT4+fFxcXFxcXFwifGc7CisgICAgc3w8PHNxPj58XFxcXFxcXCd8ZzsKKyAgICBzfDw8bGI+PnxcXFxcXFxcI3xnOworICAgIHN8PDxxKC4pPj58XFxcXFxcJDF8ZzsKKyAgICBzfDw8dTAwMDA+PnxcXFxcdTAwMDB8ZzsgIyBEb3VibGUgZXNjYXBlIFUrMDAwMAorICAgIHN8PDx1KC4uLi4pPj58XFx1JDF8ZzsKK30KKworX19FTkRfXworOmVuZG9mcGVybApkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L2dlbkluZGV4RmlsdGVycy5iYXQgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvZ2VuSW5kZXhGaWx0ZXJzLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lODUxNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L2dlbkluZGV4RmlsdGVycy5iYXQKQEAgLTAsMCArMSwxMTUgQEAKK0ByZW0gPSAnLS0qLVBlcmwtKi0tCitAZWNobyBvZmYKK2lmICIlT1MlIiA9PSAiV2luZG93c19OVCIgZ290byBXaW5OVAorcGVybCAtVyAteCAtUyAiJTAiICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Citnb3RvIGVuZG9mcGVybAorOldpbk5UCitwZXJsIC1XIC14IC1TICIlMCIgJSoKK2lmIE5PVCAiJUNPTVNQRUMlIiA9PSAiJVN5c3RlbVJvb3QlXHN5c3RlbTMyXGNtZC5leGUiIGdvdG8gZW5kb2ZwZXJsCitpZiAlZXJyb3JsZXZlbCUgPT0gOTAwOSBlY2hvIFlvdSBkbyBub3QgaGF2ZSBQZXJsIGluIHlvdXIgUEFUSC4KK2dvdG8gZW5kb2ZwZXJsCitAcmVtICc7CisjIXBlcmwKKyNsaW5lIDE0CisKKyMgVGhpcyBwZXJsIHNjcmlwdCB1cGRhdGVzIHRoZSBmaWx0ZXJzIGluIHRoZSB0cmFuc2xpdGVyYXRvciBpbmRleCBmaWxlLgorIyBJdCBkb2VzIHNvIGluIGEgZHVtYiB3YXk6CisjCisjICBMYXRpbi1YICAgTkZEIGxvd2VyCisjICBYLUxhdGluICAgTkZECisjCisjIEZvciB0cmFuc2xpdGVyYXRvcnMgdXNpbmcgTkZLRCwgb3Igbm90IHVzaW5nIExvd2VyIGluIHRoaXMgd2F5LCB5b3UKKyMgd2lsbCBoYXZlIHRvIGhhbmQtZWRpdCB0aGUgaW5kZXggZmlsZS4KKyMKKyMgVGhpcyBzY3JpcHQgd3JpdGVzIGEgbmV3IGluZGV4IGZpbGUuICBUaGUgbmV3IGZpbGUgaGFzIHRvIHRoZW4gYmUKKyMgaGFuZC1lZGl0ZWQgYW5kIGNoZWNrZWQgYmVmb3JlIHVzZTsgaXQgY29udGFpbnMgY29tbWVudHMgaW5kaWNhdGluZworIyBvbGQgbGluZXMgdGhhdCB3ZXJlIHJlcGxhY2VkLgorIworIyBBbGFuIExpdSAxMS8yOS8wMQorCit1c2UgR2V0b3B0OjpMb25nOworCitteSAkRElSID0gIi4uLy4uL3RleHQvcmVzb3VyY2VzIjsKK215ICRDTEFTU0VTID0gIi4uLy4uLy4uLy4uLy4uL2NsYXNzZXMiOworCisjR2V0T3B0aW9ucygnZGlyPXMnID0+IFwkRElSLAorIyAgICAgICAgICAgJ2lkPXMnID0+IFwkSUQsCisjICAgICAgICAgICAnPD4nID0+IFwmdXNhZ2UpIHx8IGRpZTsKKworI3VzYWdlKCkgaWYgKEBBUkdWKTsKKworIyRJRCA9fiBzLy0vXy87CitpZiAoISAtZCAkRElSKSB7CisgICAgcHJpbnQgU1RERVJSICIkRElSIGlzIG5vdCBhIGRpcmVjdG9yeVxuIjsKKyAgICB1c2FnZSgpOworfQorCisjc3ViIHVzYWdlIHsKKyMgICAgbXkgJG1lID0gJDA7CisjICAgICRtZSA9fiBzfC4rWy9cXF18fDsKKyMgICAgcHJpbnQgIlVzYWdlOiAkbWUgWy1kaXIgPGRpcj5dIFstaWQgPGlkPl1cbiI7CisjICAgIHByaW50ICIgLS1kaXIgPGRpcj4gU3BlY2lmeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlXG4iOworIyAgICBwcmludCAiICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yXyoudHh0IGZpbGVzXG4iOworIyAgICBwcmludCAiIC0taWQgPGlkPiAgIFNwZWNpZnkgYSBzaW5nbGUgSUQgdG8gdHJhbnNmb3JtLCBlLmcuXG4iOworIyAgICBwcmludCAiICAgICAgICAgICAgIEZ1bGx3aWR0aC1IYWxmd2lkdGhcbiI7CisjICAgIGRpZTsKKyN9CisKK2NvbnZlcnRJbmRleCgpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbnZlcnQgdGhlIGluZGV4IGZpbGUgZnJvbSBKYXZhIHRvIEMgZm9ybWF0CisjIEFzc3VtZSBsaW5lcyBhcmUgb2YgdGhlIGZvcm06CisjICAgPElEPjphbGlhczo8RklMVEVSPjs8UkVNQUlOREVSPgorIyA8UkVNQUlOREVSPiBjYW4gYmUKKyMgICBMb3dlcjtORlg7Li4uCisjICAgTkZYO0xvd2VyOy4uLgorIyAgIE5GWDsuLi4KK3N1YiBjb252ZXJ0SW5kZXggeworICAgICRJTiA9ICJUcmFuc2xpdGVyYXRvcl9pbmRleC50eHQiOworICAgICRPVVQgPSAiJElOLm5ldyI7CisgICAgb3BlbihJTiwgIiRESVIvJElOIikgb3IgZGllOworICAgIG9wZW4oT1VULCAiPiRESVIvJE9VVCIpIG9yIGRpZTsKKyAgICAKKyAgICB3aGlsZSAoPElOPikgeworICAgICAgICAjIExvb2sgZm9yIGxpbmVzIHRoYXQgYXJlIGFsaWFzZXMgd2l0aCBORioKKyAgICAgICAgaWYgKC9eKFteOl0rKTphbGlhczooXFsuKz8pO1xzKigoTkZbXlxzXSo/KVxzKjsuKykkL2kpIHsKKyAgICAgICAgICAgIG15ICRpZCA9ICQxOworICAgICAgICAgICAgbXkgJG9sZHNldCA9ICQyOworICAgICAgICAgICAgbXkgJHJlbWFpbmRlciA9ICQzOworICAgICAgICAgICAgbXkgJE5GWEQgPSAkNDsKKyAgICAgICAgICAgIG15ICRsb3dlciA9ICcnOworICAgICAgICAgICAgIyBDaGVjayBmb3IgTG93ZXIKKyAgICAgICAgICAgICMgSWYgaXQgY29tZXMgYmVmb3JlIE5GKiB0aGVuIGFkanVzdCBhY2NvcmRpbmdseQorICAgICAgICAgICAgaWYgKC9eKFteOl0rKTphbGlhczooXFsuKz8pO1xzKihMb3dlclxzKjsuKykkL2kpIHsKKyAgICAgICAgICAgICAgICAkbG93ZXIgPSAnbG93ZXInOworICAgICAgICAgICAgICAgIGlmIChsZW5ndGgoJDIpIDwgbGVuZ3RoKCRvbGRzZXQpKSB7CisgICAgICAgICAgICAgICAgICAgICRvbGRzZXQgPSAkMjsKKyAgICAgICAgICAgICAgICAgICAgJHJlbWFpbmRlciA9ICQzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiJGlkICRORlhEICRsb3dlclxuIjsKKyAgICAgICAgICAgIG15ICRzZXQgPSBnZXRTb3VyY2VTZXQoJGlkLCAkTkZYRCwgJGxvd2VyKTsKKyAgICAgICAgICAgICRfID0gIiRpZDphbGlhczokc2V0OyRyZW1haW5kZXJcbiI7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgT1VUOworICAgIH0KKworICAgIGNsb3NlKElOKTsKKyAgICBjbG9zZShPVVQpOworICAgIHByaW50IFNUREVSUiAiV3JvdGUgJERJUi8kT1VUXG4iOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdldCB0aGUgc291cmNlIHNldCAoY2FsbCBvdXQgdG8gSmF2YSksIG9wdGlvbmFsbHkgd2l0aCBhIGNsb3N1cmUuCitzdWIgZ2V0U291cmNlU2V0IHsKKyAgICBteSAkSUQgPSBzaGlmdDsKKyAgICBteSAkTkZYRCA9IHNoaWZ0OworICAgIG15ICRsb3dlciA9IHNoaWZ0OworICAgIG15ICRzZXQgPSBgamF2YSAtY2xhc3NwYXRoICRDTEFTU0VTIGNvbS5pYm0udG9vbHMudHJhbnNsaXQuZ2VuSW5kZXhGaWx0ZXJzICRJRCAkTkZYRCAkbG93ZXJgOworICAgIGNob21wKCRzZXQpOworICAgICRzZXQ7Cit9CisKK19fRU5EX18KKzplbmRvZnBlcmwKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9nZW5JbmRleEZpbHRlcnMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9nZW5JbmRleEZpbHRlcnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YjljYmU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L2dlbkluZGV4RmlsdGVycy5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChjKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAxMS8yOS8yMDAxICBhbGl1ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLnRyYW5zbGl0OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS5pby4qOworCisvKioKKyAqIEFkanVuY3QgY2xhc3MgdG8gZ2V0SW5kZXhGaWx0ZXJzLmJhdC4gIEp1c3QgZ2VuZXJhdGVzIHNvdXJjZSBzZXRzCisgKiBhbmQgdGhlaXIgY2xvc3VyZXMuCisgKgorICogVXNhZ2U6IElEIFsgTkZEfE5GS0QgW2xvd2VyXSBdCisgKgorICogICBqYXZhIC1jbGFzc3BhdGggY2xhc3NlcyBjb20uaWJtLmljdS5kZXYudG9vbC50cmFuc2xpdC5nZW5JbmRleEZpbHRlcnMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF0aW4tR3JlZWsgTkZEIGxvd2VyCisgKgorICogVGhlICdORkQnfCdORktEJyBhbmQgJ2xvd2VyJyBhcmdzIGFyZSBvcHRpb25hbCwgYnV0ICdsb3dlcicgY2FuCisgKiBvbmx5IGJlIHNwZWNpZmllZCBpZiAnTkZEJyBvciAnTkZLRCcgaXMuCisgKgorICogRE8gTk9UIENIQU5HRSBPVVRQVVQgRk9STUFULiAgVGhpcyB0b29sJ3Mgb3V0cHV0IGlzIHJlYWQgYnkgYSBQZXJsCisgKiBzY3JpcHQuCisgKi8KK3B1YmxpYyBjbGFzcyBnZW5JbmRleEZpbHRlcnMgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgTm9ybWFsaXplci5Nb2RlIG0gPSBOb3JtYWxpemVyLk5PTkU7CisgICAgICAgIGJvb2xlYW4gbG93ZXJGaXJzdCA9IGZhbHNlOworICAgICAgICBpZiAoYXJncy5sZW5ndGggPj0gMikgeworICAgICAgICAgICAgaWYgKGFyZ3NbMV0uZXF1YWxzSWdub3JlQ2FzZSgiTkZEIikpIHsKKyAgICAgICAgICAgICAgICBtID0gTm9ybWFsaXplci5ORkQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbMV0uZXF1YWxzSWdub3JlQ2FzZSgiTkZLRCIpKSB7CisgICAgICAgICAgICAgICAgbSA9IE5vcm1hbGl6ZXIuTkZLRDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYXJncy5sZW5ndGggPj0gMykgeworICAgICAgICAgICAgaWYgKGFyZ3NbMl0uZXF1YWxzSWdub3JlQ2FzZSgibG93ZXIiKSkgeworICAgICAgICAgICAgICAgIGxvd2VyRmlyc3QgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHsKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgc2hvd1NvdXJjZVNldChhcmdzWzBdLCBtLCBsb3dlckZpcnN0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBzaG93U291cmNlU2V0KFN0cmluZyBJRCwgTm9ybWFsaXplci5Nb2RlIG0sIGJvb2xlYW4gbG93ZXJGaXJzdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEluc3RhbmNlKElEKTsKKyAgICAgICAgVW5pY29kZVNldCBzb3VyY2VTZXQgPSB0LmdldFNvdXJjZVNldCgpOworICAgICAgICBpZiAobSAhPSBOb3JtYWxpemVyLk5PTkUgfHwgbG93ZXJGaXJzdCkgeworICAgICAgICAgICAgVW5pY29kZVNldENsb3N1cmUuY2xvc2Uoc291cmNlU2V0LCBtLCBsb3dlckZpcnN0KTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc291cmNlU2V0LnRvUGF0dGVybih0cnVlKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdXNhZ2UoKSB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IElEIFsgTkZEfE5GS0QgW2xvd2VyXSBdIik7CisgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9pbmRpYy5iYXQgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvaW5kaWMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwMjIzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvaW5kaWMuYmF0CkBAIC0wLDAgKzEsMTcgQEAKK0BlY2hvIG9mZgorUkVNIENvcHlyaWdodCAoQykgMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworUkVNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitSRU0gVGhpcyBzY3JpcHQgaXMgYSBXaW5kb3dzIGxhdW5jaGVyIGZvciB0aGUgaW5kaWMucGwgc2NyaXB0LiAgRm9yIHRoaXMKK1JFTSB0byB3b3JrLCB0aGUgcGVybCBleGVjdXRhYmxlIG11c3QgYmUgb24gdGhlIHBhdGguICBXZSByZWNvbW1lbmQKK1JFTSB0aGUgQWN0aXZlU3RhdGUgYnVpbGQ7IHNlZSBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS4gIFNlZSB0aGUKK1JFTSB0ei5wbCBzY3JpcHQgaXRzZWxmIGZvciBtb3JlIGRvY3VtZW50YXRpb24uCisKK2lmICIlT1MlIiA9PSAiV2luZG93c19OVCIgZ290byBXaW5OVAorcGVybCAtdyAteCBpbmRpYy5wbCAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQorZ290byBlbmQKKzpXaW5OVAorcGVybCAtdyAteCBpbmRpYy5wbCAlKgoraWYgTk9UICIlQ09NU1BFQyUiID09ICIlU3lzdGVtUm9vdCVcc3lzdGVtMzJcY21kLmV4ZSIgZ290byBlbmQKK2lmICVlcnJvcmxldmVsJSA9PSA5MDA5IGVjaG8gWW91IGRvIG5vdCBoYXZlIFBlcmwgaW4geW91ciBQQVRILgorOmVuZApkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L2luZGljLnBsIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L2luZGljLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1OWM0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvaW5kaWMucGwKQEAgLTAsMCArMSw2NTUgQEAKKyMhcGVybAorCisjIFVzYWdlIC0gJDAgPHJlbWFwIGZpbGU+CisjICBlLmcuIC0gaW5kaWMgaW5kaWMudHh0CisjIFRoZSBpbnB1dCBmaWxlIHNob3VsZCBiZSBhIHN1YnNldCBvZiB0aGUgVW5pY29kZSBkYXRhIGZpbGUgY29udGFpbmluZworIyB0aGUgYmxvY2tzIG9mIGludGVyZXN0LgorIworIyBUaGUgcmVtYXAgZmlsZSBzaG91bGQgaGF2ZSBsaW5lcyBvZiB0aGUgZm9ybQorIyAiXHUwRDAxPlx1MEQwMjsiCisjIGluY2x1ZGluZyB0aGUgcXVvdGVzLiAgVGhlc2Ugd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBzYXlpbmcgdGhhdCB0aGUKKyMgdW5kZWZpbmVkIGNvZGUgcG9pbnQgVStEMDEgKGRlcml2ZWQgdmlhIG1hcHBpbmcgZnJvbSBJbnRlckluZGljKQorIyBjYW4gYmUgcmVtYXBwZWQgdG8gVStEMDIuCisjIAorIyBUaGUgcHVycG9zZSBvZiB0aGlzIHNjcmlwdCBpcyB0byBwcm9jZXNzIHRoZSBJbmRpYyBzY3JpcHQgZGF0YSBpbnRvCisjIGEgZm9ybSB1c2FibGUgYnkgdGhlIEluZGljVHJhbnNsaXRlcmF0b3IsIHRoYXQgaXMsIHRoZSBJbmRpYy1JbmRpYworIyB0cmFuc2xpdGVyYXRvci4gIFRoZSB0cmFuc2xpdGVyYXRvciBuZWVkcyB0d28gdGhpbmdzOiBBIG1hcHBpbmcgb2YKKyMgdGhlIGNvZGUgcG9pbnRzIGluIGNvbW1vbiwgYW5kIGEgbGlzdCBvZiB0aGUgZXhjZXB0aW9ucy4KKworIyBBc3N1bWUgd2UgYXJlIGxvY2F0ZWQgaW4gaWN1NGovc3JjL2NvbS9pYm0vdG9vbHMvdHJhbnNsaXQvLgorIyBXZSB3YW50IHRoZSBVbmljb2RlIERCIGluIGljdTRqL3NyYy9kYXRhL3VuaWNvZGUvLgorJFVOSUNPREVfREIgPSAiLi4vLi4vLi4vLi4vZGF0YS91bmljb2RlL1VuaWNvZGVEYXRhLnR4dCI7CiskRVhDRVBUSU9OU19GSUxFID0gc2hpZnQ7CisKKyMgQXNzdW1lIHdlIGFyZSBsb2NhdGVkIGluIGljdTRqL3NyYy9jb20vaWJtL3Rvb2xzL3RyYW5zbGl0Ly4KKyMgV2Ugd2FudCB0byBvdXRwdXQgZmlsZXMgdG8gaWN1NGovc3JjL2NvbS9pYm0vdGV4dC9yZXNvdXJjZXMvLgorIyBPdXRwdXQgZGlyZWN0b3J5CiskT1VURElSID0gIi4uLy4uL3RleHQvcmVzb3VyY2VzIjsKKworIyBUaGUgdGVtcGxhdGUgZmlsZSBzaG91bGQgY29udGFpbiBqYXZhIGNvZGUgdGhhdCBjYW4gYmUgdXNlZAorIyB0byBnZW5lcmF0ZSBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvciByZXNvdXJjZSBmaWxlcy4gIFRoZSB0ZW1wbGF0ZQorIyBzaG91bGQgY29udGFpbiB0aGUgZm9sbG93aW5nIGVtYmVkZGVkIHN5bWJvbHMsIHdoaWNoIHRoaXMgc2NyaXB0CisjIHdpbGwgcmVwbGFjZToKKyMgJFRPT0wgLSBuYW1lIG9mIGdlbmVyYXRpbmcgdG9vbAorIyAkREFURSAtIGRhdGUgb2YgZ2VuZXJhdGlvbgorIyAkU0NSSVBURlJPTSAtIG5hbWUgb2Ygc291cmNlIHNjcmlwdAorIyAkU0NSSVBUVE8gLSBuYW1lIG9mIHRhcmdldCBzY3JpcHQKKyMgJFJVTEVTIC0gcnVsZXMKKyRSQlRfVEVNUExBVEUgPSAncmJ0VGVtcGxhdGUudHh0JzsKKworIyBOYW1lIG9mIHRoaXMgdG9vbCBpbiBnZW5lcmF0ZWQgUkJUIGZpbGVzCiskUkJUX0dFTl9UT09MID0gJ2ljdTRqL3NyYy9jb20vaWJtL3Rvb2xzL3RyYW5zbGl0L2luZGljLnBsJzsKKworJERVTVAgPSAwOyAjIElmIDEsIGR1bXAgb3V0IGludGVybmFsIGRhdGEKKworJERPX0hFVVJJU1RJQ19SRU1BUCA9IDA7ICMgSWYgMSwgZG8gYXV0b21hdGljIGhldXJpc3RpYyByZW1hcHBpbmcKKyRET19ERUNPTVBfUkVNQVAgPSAwOyAjIElmIDEsIGRvIGRlY29tcCByZW1hcHBpbmcKKworb3BlbihVTklDT0RFX0RCKTsKK3doaWxlICg8VU5JQ09ERV9EQj4pIHsKKyAgICBuZXh0IGlmIChtfF4wWzAtOF18KTsgIyBTa2lwIHVwIHRvIERldmFuYWdhcmkgYmxvY2sgKDA5MDApCisgICAgbGFzdCBpZiAobXxeMERbOC1GXXxpKTsgIyBCYWlsIG91dCBhZnRlciBNYWxheWFtIGJsb2NrICgwRDAwKQorICAgICMgMEQzOTtNQUxBWUFMQU0gTEVUVEVSIEhBO0xvOzA7TDs7Ozs7Tjs7Ozs7CisgICAgbXkgQGRhdGEgPSBzcGxpdCgvOy8pOworICAgIG15ICRmdWxsQ29kZSA9IGhleCgkZGF0YVswXSk7ICMgZS5nLiwgMHgwOTNGCisgICAgbXkgJGNvZGUgPSAkZnVsbENvZGUgJiAweDdGOyAjIGUuZy4sIDB4M0YKKyAgICBteSAoJHNjcmlwdCwgJG5hbWUpID0gKCRkYXRhWzFdID1+IC8oXHcrKVxzKyguKykvKTsKKyAgICBkaWUgIkNhbid0IHBhcnNlICRfIiB1bmxlc3MgKCRuYW1lKTsKKyAgICAjIGUuZy4sICRjb2RlLyRzY3JpcHQvJG5hbWUgPSAzRi9NQUxBWUFMQU0vVk9XRUwgU0lHTiBJCisKKyAgICAjIFRpdGxlY2FzZSB0aGUgc2NyaXB0CisgICAgJHNjcmlwdCA9IHVjZmlyc3QobGMoJHNjcmlwdCkpOworCisgICAgIyBGaXggYSBjb3VwbGUgaW5jb25zaXN0ZW5jaWVzIGluIHRoZSAzLjAgZGF0YQorICAgICMgUkVWSVNJVDogSXMgdGhpcyBva2F5IHRvIGRvPworICAgIGlmICgkRE9fSEVVUklTVElDX1JFTUFQKSB7CisgICAgICAgIGlmICgkc2NyaXB0IGVxICdHdWphcmF0aScgJiYgJGNvZGUgPj0gNSAmJiAkY29kZSA8PSAweDE0KSB7CisgICAgICAgICAgICAkbmFtZSA9fiBzL15WT1dFTC9MRVRURVIvOworICAgICAgICB9CisgICAgfQorCisgICAgIyBLZWVwIHRyYWNrIG9mIGFsbCBzY3JpcHQgbmFtZXMgd2UgZW5jb3VudGVyLiAgV2UgYWxzbyBub3RlIHRoZQorICAgICMgYmFzZSBvZiB0aGUgYmxvY2suCisgICAgbXkgJGJhc2UgPSAkZnVsbENvZGUgJiB+MHg3RjsgIyBlLmcuLCAweDkwMDsKKyAgICBpZiAoZXhpc3RzICRTQ1JJUFRfVE9fQkFTRXskc2NyaXB0fSkgeworICAgICAgICBkaWUgIlNjcmlwdCBiYXNlIG1pc21hdGNoIGZvciAkc2NyaXB0OiAkYmFzZSB2cy4gJFNDUklQVF9UT19CQVNFeyRzY3JpcHR9IgorICAgICAgICAgICAgaWYgKCRTQ1JJUFRfVE9fQkFTRXskc2NyaXB0fSBuZSAkYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJFNDUklQVF9UT19CQVNFeyRzY3JpcHR9ID0gJGJhc2U7CisgICAgfQorCisgICAgIyBCdWlsZCB1cCBhIG1hcHBpbmcgYnkgbmFtZS4gIEZvciBlYWNoIG5hbWUsIGtlZXAgYSBoYXNoIGtleWVkIGJ5CisgICAgIyBjb2RlIHBvaW50LiAgRm9yIGVhY2ggY29kZSBwb2ludCwga2VlcCBhbiBhcnJheSBvZiBzY3JpcHQgbmFtZXMuCisgICAgIyBBbHNvIGtlZXAgYSB0b3RhbCB1c2UgY291bnQgZm9yIGVhY2ggbmFtZS4KKyAgICBwdXNoIEB7JE5BTUVfQ09ERV9UT19TQ1JJUFRTeyRuYW1lfXskY29kZX19LCAkc2NyaXB0OworICAgICsrJE5BTUVfQ09ERV9UT19TQ1JJUFRTeyRuYW1lfXtjb3VudH07CisKKyAgICAjIEJ1aWxkIGEgbWFwIHRoYXQgbG9va3MgbGlrZSB0aGlzOgorICAgICMgJFNDUklQVF9OQU1FX1RPX0NPREV7PHNjcmlwdD59ezxuYW1lPn0gPSA8Y29kZT4KKyAgICAjIG9yIHVuZGVmIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcuCisgICAgJFNDUklQVF9OQU1FX1RPX0NPREV7JHNjcmlwdH17JG5hbWV9ID0gJGNvZGU7CisKKyAgICAjIEJ1aWxkIGEgbWFwIHRoYXQgbG9va3MgbGlrZSB0aGlzOgorICAgICRTQ1JJUFRfQ09ERV9UT19OQU1FeyRzY3JpcHR9eyRjb2RlfSA9ICRuYW1lOworCisgICAgIyBBbmQgYSBtYXAgZnJvbSB0aGUgZnVsbENvZGUgcG9pbnQgdG8gdGhlIG5hbWUKKyAgICAkRlVMTENPREVfVE9fTkFNRXskZnVsbENvZGV9ID0gJG5hbWU7CisKKyAgICAjIE1hcCBjb2RlICgwLi43RikgdG8gbmFtZS4gIFRoaXMgaXMgdXN1YWxseSBhIDEtMSBtYXBwaW5nLCBidXQKKyAgICAjIGlzIDEtbiBpbiBhIGZldyBjYXNlcy4KKyAgICBpZiAoZXhpc3RzICRDT0RFX1RPX05BTUV7JGNvZGV9KSB7CisgICAgICAgIGlmICgkbmFtZSBuZSAkQ09ERV9UT19OQU1FeyRjb2RlfSkgeworICAgICAgICAgICAgIyBGb3IgbXVsdGlwbGUgbmFtZXMgb24gYSBjb2RlIG9mZnNldCwgdXNlIHRoZSBmb3JtYXQKKyAgICAgICAgICAgICMgKGEvYiksIChhL2IvYyksIGV0Yy4KKyAgICAgICAgICAgIGxvY2FsICRfID0gJENPREVfVE9fTkFNRXskY29kZX07CisgICAgICAgICAgICBpZiAobXxeXCh8KSB7CisgICAgICAgICAgICAgICAgaWYgKCFtfFtcKFwpL10kbmFtZVtcKFwpL118KSB7CisgICAgICAgICAgICAgICAgICAgIHN8XCkkfC8kbmFtZVwpfDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRfID0gIigkXy8kbmFtZSkiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJENPREVfVE9fTkFNRXskY29kZX0gPSAkXzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgICRDT0RFX1RPX05BTUV7JGNvZGV9ID0gJG5hbWU7CisgICAgfQorfQorY2xvc2UoVU5JQ09ERV9EQik7CisKKyMgUmVhZCBhbmQgcGFyc2UgdGhlIG1hbnVhbCByZW1hcHBpbmcgZmlsZS4gIFRoaXMgY29udGFpbnMgbGluZXMKKyMgb2YgdGhlIGZvcm06CisKKyMgfCJcdTA5NTY+XHUwOTQ4OyIgIC8vIEFJIExlbmd0aCBNYXJrIC0+IERldmFuYWdhcmkgVm93ZWwgU2lnbiBBSSAKKworIyBUaGUgbGVmdCBoYW5kIHNpZGUgY29udGFpbnMgYSBub24tZXhpc3RlbnQgZnVsbCBjb2RlIHZhbHVlLiAgSXQKKyMgc2hvdWxkIGJlIGEgc2luZ2xlIHZhbHVlLiAgVGhlIHJpZ2h0IGhhbmQgc2lkZSBjb250YWlucyBvbmUgb3IgbW9yZQorIyByZWFsIGZ1bGwgY29kZSB2YWx1ZXMuICBUaGUgaWRlYSBpcyB0aGF0IHdoZW4gYSBtYXBwaW5nIGZyb20gYW5vdGhlcgorIyBzY3JpcHQgZW5kcyB1cCBhdCB0aGUgbm9uLWV4aXN0ZW50IGNvZGUgcG9pbnQgb24gdGhlIGxlZnQsIHRoZQorIyBzZXF1ZW5jZSBvbiB0aGUgcmlnaHQgc2hvdWxkIGJlIHN1YnN0aXR1dGVkLiAgSW4gdGhpcyBleGFtcGxlLAorIyBEZXZhbmFnYXJpIGhhcyBubyBBSSBMZW5ndGggTWFyay4gIFNvLCBpZiB0cmFuc2xpdGVyYXRpbmcgZnJvbQorIyBPcml5YSwgdGhlbiB0aGUgY2hhcmFjdGVyIDBCNTYgKE9yaXlhIEFJIExlbmd0aCBNYXJrKSB3aWxsIHJlbWFwIHRvCisjIHRoZSBub24tZXhpc3RlbnQgMDk1NiwgYW5kIHRoYXQgcmVtYXBzIHRvIDA5NDgsIG91ciBjaG9zZW4KKyMgRGV2YW5hZ2FyaSBlcXVpdmFsZW50LiAgRm9yIG91ciBwdXJwb3NlcywgdGhlIGxlZnQgaGFuZCBzaWRlIHNob3VsZAorIyBiZSB0YWtlbiB0byBtZWFuIGl0cyBlcXVpdmFsZW50IHBvaW50IGluIHRoZSBJbnRlckluZGljIHJhbmdlLiAgSW4KKyMgdGhpcyBleGFtcGxlLCB3aGF0IGl0IHJlYWxseSBzYXlzIGlzIEUwNTY+MDk0OCBpbiB0aGUKKyMgSW50ZXJJbmRpYy1EZXZhbmFnYXJpIHRyYW5zbGl0ZXJhdG9yLgorCitpZiAoJEVYQ0VQVElPTlNfRklMRSkgeworICAgIG9wZW4oRVhDRVBUSU9OU19GSUxFKSBvciBkaWU7CisgICAgd2hpbGUgKDxFWENFUFRJT05TX0ZJTEU+KSB7CisgICAgICAgIGlmIChtfF5ccypcIihbXlwiXSo/KVwifCkgeworICAgICAgICAgICAgbXkgJGxpbmUgPSAkXzsKKyAgICAgICAgICAgICRfID0gJDE7CisgICAgICAgICAgICBpZiAoL14oLiopPiguKik7JC8pIHsKKyAgICAgICAgICAgICAgICBteSAoJHJhd0Zyb20sICRyYXdUbykgPSAoJDEsICQyKTsKKyAgICAgICAgICAgICAgICBteSBAZnJvbSA9IHBhcnNlVW5pY29kZUVzY2FwZSgkcmF3RnJvbSk7CisgICAgICAgICAgICAgICAgbXkgQHRvID0gcGFyc2VVbmljb2RlRXNjYXBlKCRyYXdUbyk7CisgICAgICAgICAgICAgICAgbXkgJGZyb20gPSBoZXhBcnJheShAZnJvbSk7CisgICAgICAgICAgICAgICAgIyBTb21lIGVudHJpZXMgbG9vayBsaWtlIHRoaXM6CisgICAgICAgICAgICAgICAgIyB8Ilx1MDk1NT5cdTA5NTU7IgorICAgICAgICAgICAgICAgICMgdGhlc2UgZG8gbm90aGluZzsgaWdub3JlIHRoZW0uCisgICAgICAgICAgICAgICAgaWYgKGludEFycmF5c0VxdWFsKFxAZnJvbSwgXEB0bykpIHsKKyAgICAgICAgICAgICAgICAgICAgI3ByaW50IFNUREVSUiAiSWdub3JpbmcgTk9PUCByZW1hcCBvZiAkZnJvbVxuIjsKKyAgICAgICAgICAgICAgICB9IGVsc2lmIChleGlzdHMgJEVYQ0VQVElPTlN7JGZyb219KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50IFNUREVSUiAiRVJST1IgaW4gJEVYQ0VQVElPTlNfRklMRSAtIER1cGxpY2F0ZSByZW1hcCBlbnRyaWVzIGZvciAkZnJvbVxuIjsKKyAgICAgICAgICAgICAgICB9IGVsc2lmIChzY2FsYXIgQGZyb20gPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50IFNUREVSUiAiRVJST1IgaW4gJEVYQ0VQVElPTlNfRklMRSAtIElnbm9yaW5nIG11bHRpY2hhciByZW1hcDogIiwgaGV4QXJyYXkoQGZyb20pLCAiLT4iLCBoZXhBcnJheShAdG8pLCAiXG4iOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGlzIGZvciB2YWxpZGl0eS4gIEZ1bGwgY29kZSBvbiB0aGUgbGVmdAorICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBOT1QgZXhpc3QuICBGdWxsIGNvZGUgc2VxIG9uIHRoZSByaWdodCBzaG91bGQuCisgICAgICAgICAgICAgICAgICAgIGlmIChleGlzdHMgJEZVTExDT0RFX1RPX05BTUV7JGZyb21bMF19KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBTVERFUlIgIkVSUk9SIGluICRFWENFUFRJT05TX0ZJTEUgLSBJbnZhbGlkIHJlbWFwOyBsZWZ0IHNpZGUgZGVmaW5lZDogIiwgaGV4QXJyYXkoQGZyb20pLCAiLT4iLCBoZXhBcnJheShAdG8pLCAiXG4iOworICAgICAgICAgICAgICAgICAgICB9IGVsc2lmIChncmVwKCEgZXhpc3RzICRGVUxMQ09ERV9UT19OQU1FeyRffSwgQHRvKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgU1RERVJSICJFUlJPUiBpbiAkRVhDRVBUSU9OU19GSUxFIC0gSW52YWxpZCByZW1hcDsgcmlnaHQgc2lkZSB1bmRlZmluZWQ6ICIsIGhleEFycmF5KEBmcm9tKSwgIi0+IiwgaGV4QXJyYXkoQHRvKSwgIlxuIjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRFWENFUFRJT05TeyRmcm9tWzBdfSA9IFxAdG87CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeyBkaWUgIkVSUk9SIGluICRFWENFUFRJT05TX0ZJTEUgLSBDYW4ndCBwYXJzZSBcIiRfXCIgaW4gbGluZSAkbGluZSI7IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZShFWENFUFRJT05TX0ZJTEUpOworICAgIHByaW50IFNUREVSUiAiJEVYQ0VQVElPTlNfRklMRTogTG9hZGVkICIsIHNjYWxhciBrZXlzICVFWENFUFRJT05TLCAiIHJlbWFwcGluZ3NcbiI7Cit9CisKK2lmICgkRE9fREVDT01QX1JFTUFQKSB7CisgICAgIyBSZWFkIHRoZSBOYW1lc0xpc3QudHh0IGZpbGUuICBUaGlzIGNvbnRhaW5zIGRlY29tcG9zaXRpb24gZGF0YS4KKyAgICAjIEdhdGhlciB0aGVzZSBpbnRvICVERUNPTVAsIHdoaWNoIG1hcHMgYSBuYW1lIHRvIG4xLm4yLi4uLCB3aGVyZSBuMQorICAgICMgZXRjLiBhcmUgZGVjb21wb3NlZCBuYW1lcy4gIEUuZy4gJERFQ09NUHsnTEVUVEVSIFJSQSd9IC0+ICdMRVRURVIKKyAgICAjIFJBLlNJR04gTlVLVEEnLiAgVGhlcmUgbWF5IGJlIGRpZmZlcmVudCBtYXBwaW5ncyBpbiBkaWZmZXJlbnQgc2NyaXB0CisgICAgIyBibG9ja3MgKExFVFRFUiBSUkEgaXMgbWFwcGVkIGRpZmZlcmVudGx5IGluIERldmFuYWdhcmkgYW5kIEJlbmdhbGkpLAorICAgICMgaW4gd2hpY2ggY2FzZSB0aGUgbmFtZSBnb2VzIGludG8gJURFQ09NUF9NSVNNQVRDSCwgYW5kIGlzIHJlbW92ZWQKKyAgICAjIGZyb20gJURFQ09NUC4KKyAgICAkTkFNRVMgPSAiTmFtZXNMaXN0LnR4dCI7CisgICAgb3BlbihOQU1FUyk7CisgICAgd2hpbGUgKDxOQU1FUz4pIHsKKyAgICAgICAgIyBTa2lwIHRvIHN0YXJ0IG9mIERFVkFOQUdBUkkgYmxvY2sKKyAgICAgICAgbGFzdCBpZiAoL15cQFxAXHMrMDkwMC8pOworICAgIH0KKyAgICB3aGlsZSAoPE5BTUVTPikgeworICAgICAgICAjIENvbnRpbnVlIHVudGlsIHN0YXJ0IG9mIFNJTkhBTEEgYmxvY2sKKyAgICAgICAgbGFzdCBpZiAoL15cQFxAXHMrMEQ4MC8pOworICAgICAgICBpZiAoL14oWzAtOUEtWl17NH0pL2kpIHsKKyAgICAgICAgICAgICRjb2RlID0gJDE7CisgICAgICAgIH0gZWxzaWYgKC9eXHMrOlxzKiguKykvKSB7CisgICAgICAgICAgICAjIFdlJ3ZlIGZvdW5kIGEgbWFwcGluZyBvZiB0aGUgZm9ybToKKyAgICAgICAgICAgICMgMDkyOSAgICBERVZBTkFHQVJJIExFVFRFUiBOTk5BCisgICAgICAgICAgICAjICAgICAqIGZvciB0cmFuc2NyaWJpbmcgRHJhdmlkaWFuIGFsdmVvbGFyIG4KKyAgICAgICAgICAgICMgICAgIDogMDkyOCAwOTNDCisgICAgICAgICAgICBteSAkZnJvbSA9ICRGVUxMQ09ERV9UT19OQU1Fe2hleCgkY29kZSl9OworICAgICAgICAgICAgbXkgQHRvID0gbWFwKCRGVUxMQ09ERV9UT19OQU1Fe2hleCgkXyl9LCBzcGxpdCgvXHMrLywgJDEpKTsKKyAgICAgICAgICAgIGlmIChleGlzdHMgJERFQ09NUHskZnJvbX0pIHsKKyAgICAgICAgICAgICAgICBteSAkYXJlZiA9ICRERUNPTVB7JGZyb219OworICAgICAgICAgICAgICAgIGlmIChqb2luKCIuIiwgQCRhcmVmKSBuZSBqb2luKCIuIiwgQHRvKSkgeworICAgICAgICAgICAgICAgICAgICBwcmludCBTVERFUlIgIkVSUk9SOiBEZWNvbXAgbWlzbWF0Y2ggZm9yICRmcm9tXG4iOworICAgICAgICAgICAgICAgICAgICBwcmludCBTVERFUlIgIiAgICAgOiAkZnJvbSA9ICIsIGpvaW4oIi4iLCBAJGFyZWYpLCAiXG4iOworICAgICAgICAgICAgICAgICAgICBwcmludCBTVERFUlIgIiAgICAgOiAkZnJvbSA9ICIsIGpvaW4oIi4iLCBAdG8pLCAiXG4iOworICAgICAgICAgICAgICAgICAgICAkREVDT01QX01JU01BVENIeyRmcm9tfSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkREVDT01QeyRmcm9tfSA9IFxAdG87CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2UoTkFNRVMpOworICAgICMgUmVtb3ZlIG1pc21hdGNoZXMKKyAgICBmb3JlYWNoIChrZXlzICVERUNPTVBfTUlTTUFUQ0gpIHsKKyAgICAgICAgZGVsZXRlICRERUNPTVB7JF99OworICAgIH0KKyAgICBpZiAoJERVTVApIHsKKyAgICAgICAgZm9yZWFjaCAoa2V5cyAlREVDT01QKSB7CisgICAgICAgICAgICBwcmludCAiJF8gPSAiLCBqb2luKCIgKyAiLCBAeyRERUNPTVB7JF99fSksICJcbiI7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyMgQ291bnQgdGhlIHRvdGFsIG51bWJlciBvZiBzY3JpcHRzCisKKyRTQ1JJUFRfQ09VTlQgPSBzY2FsYXIga2V5cyAlU0NSSVBUX1RPX0JBU0U7CisjcHJpbnQgam9pbigiXG4iLCBzb3J0IGtleXMgJVNDUklQVF9UT19CQVNFKSwgIlxuIjsKKworIyBEdW1wIG91dCB0aGUgJU5BTUVfQ09ERV9UT19TQ1JJUFRTIG1hcC4KKworaWYgKCREVU1QKSB7CisgICAgcHJpbnQgIlxuQlkgTkFNRTpcbiI7CisgICAgZm9yZWFjaCBteSAkcGFzcyAoKDEsIDIpKSB7CisgICAgICAgIHByaW50ICJcbkJZIE5BTUUgLSBTSU5HTEVUT05TOlxuIiBpZiAoJHBhc3MgZXEgMik7CisgICAgICAgIGZvcmVhY2ggbXkgJG5hbWUgKHNvcnQga2V5cyAlTkFNRV9DT0RFX1RPX1NDUklQVFMpIHsKKyAgICAgICAgICAgIGlmICgkcGFzcyBlcSAxKSB7CisgICAgICAgICAgICAgICAgbmV4dCBpZiAoMSA+PSAkTkFNRV9DT0RFX1RPX1NDUklQVFN7JG5hbWV9e2NvdW50fSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5leHQgaWYgKDEgPCAkTkFNRV9DT0RFX1RPX1NDUklQVFN7JG5hbWV9e2NvdW50fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludCAiJG5hbWU6IjsKKyAgICAgICAgICAgIG15ICRocmVmID0gJE5BTUVfQ09ERV9UT19TQ1JJUFRTeyRuYW1lfTsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGNvZGUgKHNvcnQgeyRhIDw9PiAkYn0ga2V5cyAlJGhyZWYpIHsKKyAgICAgICAgICAgICAgICBuZXh0IGlmICgkY29kZSBlcSAnY291bnQnKTsKKyAgICAgICAgICAgICAgICBteSAkYXJlZiA9ICRocmVmLT57JGNvZGV9OworICAgICAgICAgICAgICAgIHByaW50ICIgIiwgaGV4MigkY29kZSksICIgKCIsIGZvcm1hdFNjcmlwdExpc3QoJGFyZWYpLCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludCAiXG4iOworICAgICAgICB9CisgICAgfQorfQorCisjIENyZWF0ZSBzb21lIHRyYW5zbGl0ZXJhdG9ycywgYmFzZWQgb24gdGhlIHNjcmlwdHMgYW5kIHRoZSAlTkFNRV9DT0RFX1RPX1NDUklQVFMKKyMgbWFwLiAgT25seSB1c2UgJU5BTUVfQ09ERV9UT19TQ1JJUFRTIGVudHJpZXMgd2l0aCBhIGNvdW50IG9mIDIgb3IgbW9yZSwgdGhhdCBpcywKKyMgbmFtZXMgdGhhdCBvY2N1ciBpbiB0d28gb3IgbW9yZSBzY3JpcHRzLiAgRm9yIHRob3NlIHNjcmlwdHMgd2hlcmUKKyMgdGhlIG5hbWVzIG9jY3VyLCBtYXAgYm90aCB1cCB0byB0aGUgSW50ZXJJbmRpYyByYW5nZSwgYW5kIGRvd24gdG8KKyMgdGhlIHRhcmdldCBzY3JpcHQuCisKKyRJTlRFUklORElDID0gMHhFMDAwOworJElOVEVSSU5ESUNfRVhUUkEgPSAweEUwODA7CiskSU5URVJJTkRJQ19FWFRSQV9ORVhUID0gJElOVEVSSU5ESUNfRVhUUkE7CisKKyMgRm9yIGVhY2ggc2NyaXB0LCBjcmVhdGUgYSBoYXNoLiAgVGhlIGhhc2ggaGFzIGEga2V5IGZvciBlYWNoCisjIGNvZGUgcG9pbnQsIGVpdGhlciB3aXRoaW4gaXRzIGJsb2NrLCBvciBpbiB0aGUgSW50ZXJJbmRpYyBibG9jay4KKyMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgaXMgdGhlIG1hcHBpbmcuCisKKyMgVGhlIHNjcmlwdCBoYXNoZXMgYXJlIG5hbWVkICVERVZBTkFHQVJJLCBldGMuLCBhbmQgcmVmZXJlbmNlZAorIyB3aXRoIHN5bWJvbGljIHJlZnMuCisKK0BSRU1BUCA9ICgncy9cYlNIT1JUXHMrLy9pJywKKyAgICAgICAgICAncy9cYkNBTkRSQVxzKy8vaScsCisgICAgICAgICAgJ3MvXGJRQSQvS0EvaScsCisgICAgICAgICAgJ3MvXGJLSEhBJC9LSEEvaScsCisgICAgICAgICAgJ3MvXGJHSEhBJC9HQS9pJywKKyAgICAgICAgICAncy9cYlpBJC9KQS9pJywKKyAgICAgICAgICAncy9cYkZBJC9QSEEvaScsCisgICAgICAgICAgJ3MvXGJWQSQvQkEvaScsCisgICAgICAgICAgJ3MvXGJOTk5BJC9OQS9pJywKKyAgICAgICAgICAncy9cYlJSQSQvUkEvaScsCisgICAgICAgICAgJ3MvXGJMTExBJC9MTEEvaScsCisgICAgICAgICAgJ3MvXGJMTExBJC9MQS9pJywKKyAgICAgICAgICAncy9cYkxMQSQvTEEvaScsCisgICAgICAgICAgJ3MvXkEoLikgTEVOR1RIIE1BUkskL1ZPV0VMIFNJR04gQSQxL2knLAorICAgICAgICAgICdzL0NBTkRSQUJJTkRVL0JJTkRJL2knLAorICAgICAgICAgICdzL0JJTkRJL0NBTkRSQUJJTkRVL2knLAorICAgICAgICAgICk7CisKKyMgRG8gdGhpcyBzbyB3ZSBzZWUgemVybyBjb3VudHM6Citmb3JlYWNoIG15ICRyZW1hcCAoQFJFTUFQKSB7ICRSRU1BUHskcmVtYXB9ID0gMDsgfQorCisjIFRoaXMgbG9vcCBpdGVyYXRlcyBvdmVyIHRoZSBuYW1lcyBpbiB0aGUgTkFNRV9DT0RFX1RPX1NDUklQVFMgaGFzaC4KKyMgVGhlc2UgbmFtZXMgYXJlIHRoaW5ncyBsaWtlICJMRVRURVIgTk5OQSIuICBGb3IgZWFjaCBuYW1lLCBpdCB0aGVuCisjIGNyZWF0ZXMgc2NyaXB0IG1hcHBpbmdzIHVwIHRvIHRoZSBJbnRlckluZGljIGFyZWEsIGFuZCBiYWNrIGRvd24KKyMgdG8gdGhlIHNjcmlwdCBhcmVhcy4gIElmIGEgbmFtZSBtYXBzIHRvIG1vcmUgdGhhbiBvbmUgb2Zmc2V0LAorIyB0aGVuIGl0IHVzZXMgdGhlIEludGVySW5kaWMgZXh0cmEgcmFuZ2UuICBFaXRoZXIgd2F5LCBpdCBwaWNrcworIyBhIHNpbmdsZSBJbnRlckluZGljIHBvaW50LCBlaXRoZXIgYW4gb2Zmc2V0IHBvaW50IG9yIHNvbWV0aGluZyBpbgorIyB0aGUgZXh0cmEgcmFuZ2UsIGFuZCBtYXBzIHVwIGFuZCBkb3duIGZyb20gdGhhdCBwb2ludC4KK2ZvcmVhY2ggbXkgJG5hbWUgKHNvcnQga2V5cyAlTkFNRV9DT0RFX1RPX1NDUklQVFMpIHsKKyAgICBuZXh0IGlmICgxID49ICROQU1FX0NPREVfVE9fU0NSSVBUU3skbmFtZX17Y291bnR9KTsKKyAgICBteSAkaHJlZiA9ICROQU1FX0NPREVfVE9fU0NSSVBUU3skbmFtZX07CisgICAgIyBDb3VudCB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjb2RlcyBhc3NpZ25lZCB0byB0aGlzIG5hbWUuCisgICAgIyBVc3VhbGx5IDEsIGJ1dCAyIGZvciBhIGhhbmRmdWwgb2YgbmFtZXMuCisgICAgbXkgJGNvZGVDb3VudCA9IChrZXlzICV7JE5BTUVfQ09ERV9UT19TQ1JJUFRTeyRuYW1lfX0pIC0gMTsgIyBsZXNzIDE6IHtjb3VudH0KKyAgICAjIElmICRjb2RlQ291bnQgaXMgMSwgdGhlbiBtYXAgZGlyZWN0bHkgdXAgdG8gdGhlICRJTlRFUklORElDCisgICAgIyBiYXNlLiAgSWYgJGNvZGVDb3VudCBpcyAyLCB0aGVuIG1hcCBpbnRvIHVudXNlZCBzcG90cyBzdGFydGluZworICAgICMgYXQgJElOVEVSSU5ESUNfRVhUUkEuCisgICAgbXkgJGludGVySW5kaWNDb2RlOworICAgIGlmICgkY29kZUNvdW50ID4gMSkgeworICAgICAgICAjIE1hcCBpbnRvIHRoZSBJbnRlckluZGljIGV4dHJhIHJhbmdlCisgICAgICAgICRpbnRlckluZGljQ29kZSA9ICRJTlRFUklORElDX0VYVFJBX05FWFQrKzsKKyAgICB9CisgICAgbXkgJXNlZW47CisgICAgZm9yZWFjaCBteSAkY29kZSAoc29ydCB7JGEgbmUgJ2NvdW50JyAmJiAkYiBuZSAnY291bnQnICYmICRhIDw9PiAkYn0ga2V5cyAlJGhyZWYpIHsKKyAgICAgICAgbmV4dCBpZiAoJGNvZGUgZXEgJ2NvdW50Jyk7CisgICAgICAgIG15ICRhcmVmID0gJGhyZWYtPnskY29kZX07ICMgUmVmIHRvIGFycmF5IG9mIHNjcmlwdHMKKyAgICAgICAgaWYgKCRjb2RlQ291bnQgPT0gMSkgeworICAgICAgICAgICAgIyBNYXAgZGlyZWN0bHkKKyAgICAgICAgICAgICRpbnRlckluZGljQ29kZSA9ICRJTlRFUklORElDICsgJGNvZGU7CisgICAgICAgIH0KKyAgICAgICAgIyBLZWVwIHRyYWNrIG9mIHRoZSBuYW1lcyBvZiB0aGUgZXh0cmEgSW50ZXJJbmRpYyBwb2ludHMKKyAgICAgICAgJElOVEVSSU5ESUNfTkFNRV9UT19GVUxMQ09ERXskbmFtZX0gPSAkaW50ZXJJbmRpY0NvZGU7CisKKyAgICAgICAgZm9yZWFjaCBteSAkc2NyIChAJGFyZWYpIHsKKyAgICAgICAgICAgICRzZWVueyRzY3J9ID0gMTsKKyAgICAgICAgICAgIG15ICRmdWxsQ29kZSA9ICRTQ1JJUFRfVE9fQkFTRXskc2NyfSArICRjb2RlOworICAgICAgICAgICAgJCB7JHNjcn17JGZ1bGxDb2RlfSA9IGhleDQoJGludGVySW5kaWNDb2RlKSAuICI7IC8vICRuYW1lIjsKKyAgICAgICAgICAgICQgeyRzY3J9eyRpbnRlckluZGljQ29kZX0gPSBoZXg0KCRmdWxsQ29kZSkgLiAiOyAvLyAkbmFtZSI7CisgICAgICAgIH0KKyAgICB9CisgICAgIyBOb3cgaGFuZGxlIEludGVySW5kaWMtPlNjcmlwdCB1bm1hcHBlZCBwb2ludHMuICBGb3IgZWFjaCBuYW1lLAorICAgICMgc29tZSBvZiB0aGUgc2NyaXB0cyB3aWxsIGJlIGxlZnQgb3V0IC0tIHdpbGwgaGF2ZSBubyBtYXBwaW5ncworICAgICMgdG8gdGhhdCBuYW1lLiAgRm9yIHRoZXNlIHNjcmlwdHMsIHdlIGNhbiBlaXRoZXIgbGVhdmUgdGhlbQorICAgICMgdW5tYXBwZWQgKHNvIHRoZSBJbnRlckluZGljLT5Mb2NhbCBtYXBwaW5nIGlzIGVtcHR5KSwgb3IKKyAgICAjIHRyeSB0byByZW1hcC4KKyB1bm1hcHBlZFNjcmlwdDoKKyAgICBmb3JlYWNoIG15ICRzY3IgKGtleXMgJVNDUklQVF9UT19CQVNFKSB7CisgICAgICAgIG5leHQgaWYgKCRzZWVueyRzY3J9KTsKKworICAgICAgICBpZiAoJERPX0hFVVJJU1RJQ19SRU1BUCkgeworICAgICAgICAgICAgIyBUcnkgdG8gcmVtYXAgdGhyb3VnaCB0aGUga25vd24gZXF1aXZhbGVuY2VzIGluIG91cgorICAgICAgICAgICAgIyByZW1hcHBpbmcgdGFibGUKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJHJlbWFwUkUgKEBSRU1BUCkgeworICAgICAgICAgICAgICAgIGxvY2FsICRfID0gJG5hbWU7CisgICAgICAgICAgICAgICAgaWYgKGV2YWwoJHJlbWFwUkUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleGlzdHMgJFNDUklQVF9OQU1FX1RPX0NPREV7JHNjcn17JF99KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkIHskc2NyfXskaW50ZXJJbmRpY0NvZGV9ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXg0KCRTQ1JJUFRfVE9fQkFTRXskc2NyfSArICRTQ1JJUFRfTkFNRV9UT19DT0RFeyRzY3J9eyRffSkgLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOyAvLyBSRU1BUDogJG5hbWUgLT4gJF8iOworICAgICAgICAgICAgICAgICAgICAgICAgKyskUkVNQVB7JHJlbWFwUkV9OworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCB1bm1hcHBlZFNjcmlwdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICMgVHJ5IHRvIHJlbWFwIHRocm91Z2ggdGhlIGZpbGUuICBUaGlzIGNvbnRhaW5zIHJlbWFwcGluZ3Mgb2YKKyAgICAgICAgIyB0aGUgZm9ybSAwOTkxLT4wOTkzLiAgVGhhdCBpcywgaXQgY29udGFpbnMgbG9jYWwgcmVtYXBwaW5ncworICAgICAgICAjIHRoYXQgd2UgY2FuIHN1YnN0aXR1dGUgYW5kIHRyeSBhZ2FpbiB3aXRoLgorICAgICAgICAjfEdVUk1VS0hJLUludGVySW5kaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICN8Ly8gMEEwMj47IC8vIFVOTUFQUEVEIElOVEVSTkFMOiBTSUdOIEJJTkRJCisgICAgICAgICN8SW50ZXJJbmRpYy1HVVJNVUtISSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgI3wvLyBFMDAxPjsgLy8gVU5NQVBQRUQgRVhURVJOQUw6IFNJR04gQ0FORFJBQklORFUKKyAgICAgICAgI3wiXHUwQTAxPlx1MEEwMjsiCisgICAgICAgICMgSW4gdGhpcyBleGFtcGxlLCB0aGUgcmVtYXBwaW5nIHRlbGxzIHVzIHRoYXQgdGhlIG5vbi1leGlzdGVudAorICAgICAgICAjIGNoYXJhY3RlciBBMDEgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byB0aGUgcmVhbAorICAgICAgICAjIGNoYXJhY3RlciBBMDIuCisgICAgICAgICMgV2UgaW1wbGVtZW50IHRoaXMgYnkgYWRkaW5nIHR3byBtYXBwaW5nczsgb25lIGZyb20KKyAgICAgICAgIyB0aGUgSW50ZXJJbmRpYyBlcXVpdmFsZW50IG9mIEEwMSwgdGhhdCBpcywgRTAwMSwgdG8gQTAyLAorICAgICAgICAjIGFuZCBvbmUgZnJvbSBBMDIsIHdoaWNoIG90aGVyd2lzZSBoYXMgbm8gbWFwcGluZywgdG8gRTAwMS4KKyAgICAgICAgaWYgKCRFWENFUFRJT05TX0ZJTEUgJiYgJGludGVySW5kaWNDb2RlIDwgJElOVEVSSU5ESUNfRVhUUkEpIHsKKyAgICAgICAgICAgICMgVHJ5IHRvIG1hcCB0aGlzIEludGVySW5kaWMgY2hhcmFjdGVyIGJhY2sgdG8gYSB0aGUgc3BvdAorICAgICAgICAgICAgIyBpdCB3b3VsZCBvY2N1cHkgaW4gdGhpcyBzY3JpcHQgaWYgaXQgaGFkIGEgbWFwcGluZy4KKyAgICAgICAgICAgIG15ICRjb2RlID0gJGludGVySW5kaWNDb2RlICYgMHg3RjsKKyAgICAgICAgICAgIG15ICRwc2V1ZG9GdWxsQ29kZSA9ICRTQ1JJUFRfVE9fQkFTRXskc2NyfSArICRjb2RlOworICAgICAgICAgICAgaWYgKGV4aXN0cyAkRVhDRVBUSU9OU3skcHNldWRvRnVsbENvZGV9KSB7CisgICAgICAgICAgICAgICAgbXkgJGZ1bGxDb2RlQXJyYXkgPSAkRVhDRVBUSU9OU3skcHNldWRvRnVsbENvZGV9OworICAgICAgICAgICAgICAgIG15ICRjb21tZW50OworICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGMgKEAkZnVsbENvZGVBcnJheSkgeworICAgICAgICAgICAgICAgICAgICAkY29tbWVudCAuPSAiLiIgaWYgKCRjb21tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgJGNvbW1lbnQgLj0gJEZVTExDT0RFX1RPX05BTUV7JGN9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkY29tbWVudCA9ICI7IC8vIFJFTUFQICgkRVhDRVBUSU9OU19GSUxFKTogIiAuCisgICAgICAgICAgICAgICAgICAgIGhleDQoJHBzZXVkb0Z1bGxDb2RlKSAuICI+IiAuIGhleEFycmF5KEAkZnVsbENvZGVBcnJheSkgLiAiID0gIiAuCisgICAgICAgICAgICAgICAgICAgICRDT0RFX1RPX05BTUV7JGNvZGV9IC4gIj4iIC4gJGNvbW1lbnQ7CisgICAgICAgICAgICAgICAgJCB7JHNjcn17JGludGVySW5kaWNDb2RlfSA9IGhleEFycmF5KEAkZnVsbENvZGVBcnJheSkgLiAkY29tbWVudDsKKyAgICAgICAgICAgICAgICBpZiAoc2NhbGFyIEAkZnVsbENvZGVBcnJheSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleGlzdHMgJCB7JHNjcn17JGZ1bGxDb2RlQXJyYXktPlswXX0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlcmUncyBhbHJlYWR5IGEgcHJvcGVyIG1hcHBpbmc7IG5vIG5lZWQgdG8gZmlsbAorICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiByZXZlcnNlCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkIHskc2NyfXskZnVsbENvZGVBcnJheS0+WzBdfSA9IGhleDQoJGludGVySW5kaWNDb2RlKSAuICRjb21tZW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5leHQgdW5tYXBwZWRTY3JpcHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAkU0NSSVBUX0ZVTExDT0RFX1RPX0lTX1VOTUFQUEVEeyRzY3J9eyRpbnRlckluZGljQ29kZX0gPSAxOworICAgICAgICBsb2NhbCAkXyA9ICI7IC8vIFVOTUFQUEVEIEludGVySW5kaWMtJHNjcjogJG5hbWUiOworICAgICAgICBpZiAoZXhpc3RzICRTQ1JJUFRfQ09ERV9UT19OQU1FeyRzY3J9eyRpbnRlckluZGljQ29kZSAmIDB4N0Z9KSB7CisgICAgICAgICAgICBteSAkZnVsbENvZGUgPSAkU0NSSVBUX1RPX0JBU0V7JHNjcn0gKyAoJGludGVySW5kaWNDb2RlICYgMHg3Rik7CisgICAgICAgICAgICAkXyAuPSAiICgiIC4gaGV4NCgkZnVsbENvZGUpIC4gIiA9ICIgLiAkRlVMTENPREVfVE9fTkFNRXskZnVsbENvZGV9IC4gIikiOworICAgICAgICB9CisgICAgICAgICQgeyRzY3J9eyRpbnRlckluZGljQ29kZX0gPSAkXzsKKyAgICB9Cit9CisKKyMgQWRkIGluIHVubWFwcGVkIGVudHJpZXMgZm9yIGVhY2ggc2NyaXB0Citmb3JlYWNoIG15ICRzY3IgKGtleXMgJVNDUklQVF9UT19CQVNFKSB7CisgICAgbXkgJGJhc2UgPSAkU0NSSVBUX1RPX0JBU0V7JHNjcn07CisgdW5tYXBwZWRJbnQ6CisgICAgZm9yZWFjaCBteSAkY29kZSAoa2V5cyAleyRTQ1JJUFRfQ09ERV9UT19OQU1FeyRzY3J9fSkgeworICAgICAgICBteSAkZnVsbENvZGUgPSAkY29kZSArICRiYXNlOworICAgICAgICBuZXh0IGlmIChleGlzdHMgJCB7JHNjcn17JGZ1bGxDb2RlfSk7CisgICAgICAgIG15ICRuYW1lID0gJFNDUklQVF9DT0RFX1RPX05BTUV7JHNjcn17JGNvZGV9OworCisgICAgICAgIGlmICgkRE9fSEVVUklTVElDX1JFTUFQKSB7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRyZW1hcFJFIChAUkVNQVApIHsKKyAgICAgICAgICAgICAgICBsb2NhbCAkXyA9ICRuYW1lOworICAgICAgICAgICAgICAgIGlmIChldmFsKCRyZW1hcFJFKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RzICRJTlRFUklORElDX05BTUVfVE9fRlVMTENPREV7JF99KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkIHskc2NyfXskZnVsbENvZGV9ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXg0KCRJTlRFUklORElDX05BTUVfVE9fRlVMTENPREV7JF99KSAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7IC8vIFJFTUFQOiAkbmFtZSAtPiAkXyI7CisgICAgICAgICAgICAgICAgICAgICAgICArKyRSRU1BUHskcmVtYXBSRX07CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IHVubWFwcGVkSW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgIyBOb3cgdHJ5IHRoZSBkZWNvbXAgdGFibGUKKyAgICAgICAgaWYgKCRET19ERUNPTVBfUkVNQVAgJiYgZXhpc3RzICRERUNPTVB7JG5hbWV9KSB7CisgICAgICAgICAgICBteSAkeDsKKyAgICAgICAgICAgIG15ICRjbXQgPSAiOyAvLyBERUNPTVA6ICRuYW1lIC0+ICI7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRuIChAeyRERUNPTVB7JG5hbWV9fSkgeworICAgICAgICAgICAgICAgIGlmIChleGlzdHMgJFNDUklQVF9OQU1FX1RPX0NPREV7JHNjcn17JG59KSB7CisgICAgICAgICAgICAgICAgICAgICR4IC49IGhleDQoJFNDUklQVF9UT19CQVNFeyRzY3J9ICsgJFNDUklQVF9OQU1FX1RPX0NPREV7JHNjcn17JG59KTsKKyAgICAgICAgICAgICAgICAgICAgJGNtdCAuPSAkbiAuICIgKyAiOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICRjbXQgPSAwOworICAgICAgICAgICAgICAgICAgICBsYXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgkY210KSB7CisgICAgICAgICAgICAgICAgJCB7JHNjcn17JGZ1bGxDb2RlfSA9ICR4IC4gJGNtdDsKKyAgICAgICAgICAgICAgICBuZXh0IHVubWFwcGVkSW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgJFNDUklQVF9GVUxMQ09ERV9UT19JU19VTk1BUFBFRHskc2NyfXskZnVsbENvZGV9ID0gMTsKKyAgICAgICAgJCB7JHNjcn17JGZ1bGxDb2RlfSA9ICI7IC8vIFVOTUFQUEVEICRzY3ItSW50ZXJJbmRpYzogJG5hbWUiOworICAgIH0KK30KKworIyBHVVIKKyMgRTAwQj47IC8vIFVOTUFQUEVEIEVYVEVSTkFMOiBMRVRURVIgVk9DQUxJQyBSICJcdTBBMEI+XHUwQTMwXHUwQTNGOyIKKyMgRTAwQz47IC8vIFVOTUFQUEVEIEVYVEVSTkFMOiBMRVRURVIgVk9DQUxJQyBMICJcdTBBMEM+XHUwQTA3OyIKKyMgRTAwRD47IC8vIFVOTUFQUEVEIEVYVEVSTkFMOiBMRVRURVIgQ0FORFJBIEUgIlx1MEEwRD5cdTBBMTA7IgorIyBFMDExPjsgLy8gVU5NQVBQRUQgRVhURVJOQUw6IExFVFRFUiBDQU5EUkEgTyAiXHUwQTExPlx1MEExNDsiCisjIEUwMzc+OyAvLyBVTk1BUFBFRCBFWFRFUk5BTDogTEVUVEVSIFNTQSAiXHUwQTM3Plx1MEEzNjsiCisjIEUwNDU+OyAvLyBVTk1BUFBFRCBFWFRFUk5BTDogVk9XRUwgU0lHTiBDQU5EUkEgRSAiXHUwQTQ1Plx1MEE0ODsiCisjIEUwNDk+OyAvLyBVTk1BUFBFRCBFWFRFUk5BTDogVk9XRUwgU0lHTiBDQU5EUkEgTyAiXHUwQTQ5Plx1MEE0QzsiCisjIEZpeCBRQSB0b28KKworIyBEdW1wIG91dCBzY3JpcHQgbWFwcworZm9yZWFjaCBteSAkc2NyIChzb3J0IGtleXMgJVNDUklQVF9UT19CQVNFKSB7CisgICAgIyMgbmV4dCB1bmxlc3MgKCRzY3IgZXEgJ1RFTFVHVScpOyAjIERlYnVnZ2luZworICAgIG15IEBydWxlczsKKyAgICBteSAkZmxhZyA9IDE7CisgICAgZm9yZWFjaCBteSAkZnVsbENvZGUgKHNvcnQgeyRhIDw9PiAkYn0ga2V5cyAleyRzY3J9KSB7CisgICAgICAgIGlmICgkZmxhZyAmJiAkZnVsbENvZGUgPj0gJElOVEVSSU5ESUMpIHsKKyAgICAgICAgICAgICMgV2UgaGF2ZSB0aGUgY29tcGxldGUgPHNjcj4tSW50ZXJJbmRpYyBydWxlczsgZHVtcAorICAgICAgICAgICAgIyB0aGVtIG91dC4KKyAgICAgICAgICAgIGdlbmVyYXRlUkJUKCRzY3IsICJJbnRlckluZGljIiwgXEBydWxlcywgJE9VVERJUik7CisgICAgICAgICAgICBAcnVsZXMgPSAoKTsKKyAgICAgICAgICAgICRmbGFnID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhpc3RzICRTQ1JJUFRfRlVMTENPREVfVE9fSVNfVU5NQVBQRUR7JHNjcn17JGZ1bGxDb2RlfSkgeworICAgICAgICAgICAgcHVzaCBAcnVsZXMsICIvLyAiIC4gaGV4NCgkZnVsbENvZGUpIC4gIj4iIC4gJCB7JHNjcn17JGZ1bGxDb2RlfTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2ggQHJ1bGVzLCBoZXg0KCRmdWxsQ29kZSkgLiAiPiIgLiAkIHskc2NyfXskZnVsbENvZGV9OworICAgICAgICB9CisgICAgfQorICAgICMgTm93IGdlbmVyYXRlIHRoZSBJbnRlckluZGljLTxzY3I+IHJ1bGVzLgorICAgIGdlbmVyYXRlUkJUKCJJbnRlckluZGljIiwgJHNjciwgXEBydWxlcywgJE9VVERJUik7CisKKyMgICAgcHJpbnQgIiRzY3ItSW50ZXJJbmRpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisjICAgIG15ICRmbGFnID0gMTsKKyMgICAgZm9yZWFjaCBteSAkZnVsbENvZGUgKHNvcnQgeyRhIDw9PiAkYn0ga2V5cyAleyRzY3J9KSB7CisjICAgICAgICBpZiAoJGZsYWcgJiYgJGZ1bGxDb2RlID49ICRJTlRFUklORElDKSB7CisjICAgICAgICAgICAgcHJpbnQgIkludGVySW5kaWMtJHNjciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisjICAgICAgICAgICAgJGZsYWcgPSAwOworIyAgICAgICAgfQorIyAgICAgICAgaWYgKGV4aXN0cyAkU0NSSVBUX0ZVTExDT0RFX1RPX0lTX1VOTUFQUEVEeyRzY3J9eyRmdWxsQ29kZX0pIHsKKyMgICAgICAgICAgICBwcmludCAiLy8gIiwgaGV4NCgkZnVsbENvZGUpLCAiPiIsICQgeyRzY3J9eyRmdWxsQ29kZX0sICJcbiI7CisjICAgICAgICB9IGVsc2UgeworIyAgICAgICAgICAgIHByaW50IGhleDQoJGZ1bGxDb2RlKSwgIj4iLCAkIHskc2NyfXskZnVsbENvZGV9LCAiXG4iOworIyAgICAgICAgfQorIyAgICB9Cit9CisKKyMgTGlzdCBzdWNjZXNzZnVsIHJlbWFwcGluZ3MKK2lmICgkRE9fSEVVUklTVElDX1JFTUFQKSB7CisgICAgZm9yZWFjaCBteSAkcmVtYXAgKHNvcnQga2V5cyAlUkVNQVApIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJSRU1BUCAiLCAkUkVNQVB7JHJlbWFwfSwgIiB4ICRyZW1hcFxuIjsKKyAgICB9Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNVQlJPVVRJTkVTCisKKyMgUmV0dXJuIGEgbGlzdGluZyBvZiBhbiBhcnJheSBvZiBzY3JpcHRzCisjIFBhcmFtOiBhcnJheSByZWYKK3N1YiBmb3JtYXRTY3JpcHRMaXN0IHsKKyAgICBteSAkYXJlZiA9IHNoaWZ0OworICAgIGlmICgkU0NSSVBUX0NPVU5UID09IEAkYXJlZikgeworICAgICAgICByZXR1cm4gImFsbCI7CisgICAgfSBlbHNpZiAoKCRTQ1JJUFRfQ09VTlQgLSAzKSA8PSBAJGFyZWYpIHsKKyAgICAgICAgbXkgJHMgPSAiYWxsIGJ1dCI7CisgICAgICAgIG15ICV0ZW1wOworICAgICAgICBmb3JlYWNoIChAJGFyZWYpIHsgJHRlbXB7JF99ID0gMTsgfQorICAgICAgICBmb3JlYWNoIChzb3J0IGtleXMgJVNDUklQVF9UT19CQVNFKSB7CisgICAgICAgICAgICAkcyAuPSAiICRfIiB1bmxlc3MgZXhpc3RzICR0ZW1weyRffTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJHM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGpvaW4oIiAiLCBAJGFyZWYpOworICAgIH0KK30KKworIyBGb3JtYXQgYXMgJTAyWCBoZXgKK3N1YiBoZXgyIHsKKyAgICBzcHJpbnRmKCIlMDJYIiwgJF9bMF0pOworfQorCisjIEZvcm1hdCBhcyAlMDRYIGhleAorc3ViIGhleDQgeworICAgIHNwcmludGYoIlxcdSUwNFgiLCAkX1swXSk7Cit9CisKKyMgRm9ybWF0IGFuIGFycmF5IGFzICUwNFggaGV4LCBkZWxpbWl0ZWQgYnkgIi4icworc3ViIGhleEFycmF5IHsKKyAgICBqb2luKCIiLCBtYXAgeyBoZXg0KCRfKTsgfSBAXyk7Cit9CisKKyMgUGFyc2UgYSBzdHJpbmcgb2YgdGhlIGZvcm0gIlx1MEQwMSIgdG8gYW4gYXJyYXkgb2YgaW50ZWdlcnMuCisjIE11c3QgT05MWSBjb250YWluIGVzY2FwZXMuCisjIFJldHVybiB0aGUgYXJyYXkuCitzdWIgcGFyc2VVbmljb2RlRXNjYXBlIHsKKyAgICBsb2NhbCAkXyA9IHNoaWZ0OworICAgIG15ICRvcmlnID0gJF87CisgICAgbXkgQHJlc3VsdDsKKyAgICB3aGlsZSAobGVuZ3RoKCRfKSkgeworICAgICAgICBpZiAoL15cXHUoWzAtOWEtZl17NH0pKC4qKS9pKSB7CisgICAgICAgICAgICBwdXNoIEByZXN1bHQsIGhleCgkMSk7CisgICAgICAgICAgICAkXyA9ICQyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJDYW4ndCBwYXJzZSBVbmljb2RlIGVzY2FwZSAkb3JpZ1xuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoMCA9PSBAcmVzdWx0KSB7CisgICAgICAgIGRpZSAiQ2FuJ3QgcGFyc2UgVW5pY29kZSBlc2NhcGUgJG9yaWdcbiI7ICAgICAgICAKKyAgICB9CisgICAgQHJlc3VsdDsKK30KKworIyBSZXR1cm4gMSBpZiB0aGUgdHdvIGFycmF5cyBvZiBpbnRzIGFyZSBlcXVhbC4KKyMgUGFyYW06IHJlZiB0byBhcnJheSBvZiBpbnRzCisjIFBhcmFtOiByZWYgdG8gYXJyYXkgb2YgaW50cworc3ViIGludEFycmF5c0VxdWFsIHsKKyAgICBteSAkYSA9IHNoaWZ0OworICAgIG15ICRiID0gc2hpZnQ7CisgICAgaWYgKHNjYWxhciBAJGEgPT0gc2NhbGFyIEAkYikgeworICAgICAgICBmb3IgKG15ICRpPTA7ICRpPEAkYTsgKyskaSkgeworICAgICAgICAgICAgaWYgKCRhLT5bJGldICE9ICRiLT5bJGldKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjIEdpdmVuIGEgcnVsZSwgcG9zc2libHkgd2l0aCB0cmFpbGluZyAvLyBjb21tZW50LAorIyBxdW90ZSB0aGUgcnVsZSBwYXJ0IGFuZCBhZGQgYSB0cmFpbGluZyAiKyIgYWZ0ZXIKKyMgaXQuCitzdWIgcXVvdGVSdWxlIHsKKyAgICBteSAkY210OworICAgICRjbXQgPSAkMSBpZiAoc3woXHMqLy8uKil8fCk7ICMgaXNvbGF0ZSB0cmFpbGluZyAvLyBjb21tZW50CisgICAgcy9eKC4qOykvXCIkMVwiKy87CisgICAgcy8kLyRjbXQvOworICAgICRfOworfQorCisjIEdpdmVuIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2Ugc2NyaXB0LCBuYW1lIG9mIHRoZSB0YXJnZXQgc2NyaXB0LAorIyBhbmQgYXJyYXkgb2YgcnVsZSBzdHJpbmdzLCByZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgc291cmNlCisjIGZvciBhIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yIGZpbGUuCisjIFBhcmFtOiBzb3VyY2Ugc2NyaXB0IG5hbWUKKyMgUGFyYW06IHRhcmdldCBzY3JpcHQgbmFtZQorIyBQYXJhbTogcmVmIHRvIGFycmF5IG9mIHJ1bGVzLiAgVGhlc2UgcnVsZXMgYXJlIHVucXVvdGVkLCB3aXRob3V0CisjICBjb25jYXRlbmF0b3JzIGJldHdlZW4gdGhlbSwgYnV0IGRvIGhhdmUgdHJhaWxpbmcgJzsnIHNlcGFyYXRvcnMuCisjIFBhcmFtOiBuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkKK3N1YiBnZW5lcmF0ZVJCVCB7CisgICAgIyAkVE9PTCAtIG5hbWUgb2YgZ2VuZXJhdGluZyB0b29sCisgICAgIyAkREFURSAtIGRhdGUgb2YgZ2VuZXJhdGlvbgorICAgICMgJFNDUklQVEZST00gLSBuYW1lIG9mIHNvdXJjZSBzY3JpcHQKKyAgICAjICRTQ1JJUFRUTyAtIG5hbWUgb2YgdGFyZ2V0IHNjcmlwdAorICAgICMgJFJVTEVTIC0gcnVsZXMKKyAgICBteSAoJHNvdXJjZSwgJHRhcmdldCwgJHJ1bGVzLCAkb3V0ZGlyKSA9IEBfOworICAgIG15ICR0ZXh0OworICAgICRvdXRkaXIgPX4gc3xbL1xcXSR8fDsgIyBEZWxldGUgdHJhaWxpbmcgLyBvciBcCisgICAgbXkgJE9VVCA9ICIkb3V0ZGlyL1RyYW5zbGl0ZXJhdGlvblJ1bGVfJHtzb3VyY2V9XyR0YXJnZXQuamF2YSI7CisgICAgb3BlbihSQlRfVEVNUExBVEUpIG9yIGRpZTsKKyAgICBvcGVuKE9VVCwgIj4kT1VUIikgb3IgZGllOworICAgIHdoaWxlICg8UkJUX1RFTVBMQVRFPikgeworICAgICAgICB3aGlsZSAoL1wkKFtBLVphLXowLTldKykvKSB7CisgICAgICAgICAgICBteSAkdGFnID0gJDE7CisgICAgICAgICAgICBteSAkc3ViOworICAgICAgICAgICAgaWYgKCR0YWcgZXEgJ1RPT0wnKSB7CisgICAgICAgICAgICAgICAgJHN1YiA9ICRSQlRfR0VOX1RPT0w7CisgICAgICAgICAgICB9IGVsc2lmICgkdGFnIGVxICdEQVRFJykgeworICAgICAgICAgICAgICAgICRzdWIgPSBsb2NhbHRpbWU7CisgICAgICAgICAgICB9IGVsc2lmICgkdGFnIGVxICdTQ1JJUFRGUk9NJykgeworICAgICAgICAgICAgICAgICRzdWIgPSAkc291cmNlOworICAgICAgICAgICAgfSBlbHNpZiAoJHRhZyBlcSAnU0NSSVBUVE8nKSB7CisgICAgICAgICAgICAgICAgJHN1YiA9ICR0YXJnZXQ7CisgICAgICAgICAgICB9IGVsc2lmICgkdGFnIGVxICdSVUxFUycpIHsKKyAgICAgICAgICAgICAgICAjIEdldCBhbnkgd2hpdGVzcGFjZS1vbmx5IGluZGVudCBvZmYgdGhlIGZyb250IG9mIHRoaXMgdGFnCisgICAgICAgICAgICAgICAgbXkgJGluZGVudDsKKyAgICAgICAgICAgICAgICAkaW5kZW50ID0gJDEgaWYgKC9eKFxzKylcJCR0YWcvKTsKKworICAgICAgICAgICAgICAgICMgVGhlIHJ1bGVzIGluIHRoZSBhcnJheSBhcmUgbm90IHF1b3RlZC4gIFdlIG5lZWQgdG8gcXVvdGUKKyAgICAgICAgICAgICAgICAjIHRoZW0gYW5kIGFkZCAnKycgb3BlcmF0b3JzIGJldHdlZW4gdGhlbS4gIFdlIGRvIE5PVCBuZWVkCisgICAgICAgICAgICAgICAgIyB0byBhZGQgJzsnIHNlcGFyYXRvcnMuICBXZSBETyBuZWVkIHRvIHNlcGFyYXRlIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgIyAvLyBjb21tZW50cyBhbmQgaGFuZGxlIHRoZW0uCisgICAgICAgICAgICAgICAgJHN1YiA9IGpvaW4oIlxuJGluZGVudCIsIG1hcCgmcXVvdGVSdWxlLCBAJHJ1bGVzKSkgLgorICAgICAgICAgICAgICAgICAgICAiXG4kaW5kZW50XCJcIiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50IFNUREVSUiAiRVJST1IgaW4gJFJCVF9URU1QTEFURTogVW5rbm93biB0YWcgJHRhZ1xuIjsKKyAgICAgICAgICAgICAgICAkc3ViID0gIltFUlJPUjpVbmtub3duIHRhZyBcJCR0YWddIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMvXCQkdGFnLyRzdWIvOworICAgICAgICB9CisgICAgICAgIHByaW50IE9VVDsKKyAgICB9CisgICAgY2xvc2UoT1VUKTsKKyAgICBjbG9zZShSQlRfVEVNUExBVEUpOworICAgIHByaW50IFNUREVSUiAiV3JpdHRlbjogJE9VVFxuIjsKK30KKworX19FTkRfXwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L2luZGljRXhjZXB0aW9ucy50eHQgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvdHJhbnNsaXQvaW5kaWNFeGNlcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYjk2NTI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L2luZGljRXhjZXB0aW9ucy50eHQKQEAgLTAsMCArMSwzNzAgQEAKKy8qIFJlc2VydmVkIGluIGFsbCA5IHNjcmlwdHMgKi8KKworLyoKKyAgIFRoZXNlIGNvZGVwb2ludHMgYXJlIG1hcmtlZCBSRVNFUlZFRCBpbiBhbGwgOSBpbmRpYyBzY3JpcHRzLgorICAgVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgdHJhbnNsaXRlcmF0aW9uIHdvcmsgb24gdGhlc2UgY29kZXBvaW50cywgCisgICBpZiB0aGV5IGFyZSBldmVyIGVuY291bnRlcmVkLiAgSWdub3JlIHRoZXNlIGNvZGVwb2ludHMuCisKKyAgIENvbW1vbiByZXNlcnZlZCBjb2RlcG9pbnRzIGluIEFMTCA5IHNjcmlwdHMgOiAob2Zmc2V0KQorICAgMDAsIDA0LCAKKyAgIDNBLCAzQiwgCisgICA0RSwgNEYsIAorICAgN0IsIDdDLCA3RCwgN0UsIDdGCisqLworCisvKiBTY3JpcHQtc3BlY2lmaWMgKi8KKy8qCisgICBUaGVzZSBjb2RlcG9pbnRzIGFyZSBzcGVjaWZpYyB0byB0aGVpciByZXNwZWN0aXZlIHNjcmlwdC4KKyAgIFRyYW5zbGl0ZXJhdGlvbiBvZiB0aGVzZSBjb2RlcG9pbnRzIGZyb20gb25lIHNjcmlwdCB0byBhbm90aGVyIGlzIG1lYW5pbmdsZXNzLgorCisgICBGb3IgZXhhbXBsZSwKKyAgICAgIFx1MEI3MCAoT3JpeWEpIGFuZCBcdTBCRjAgKFRhbWlsKSBhcmUgbm9uLXJlc2VydmVkIGNvZGVwb2ludHMgd2l0aGluIGVhY2ggc2NyaXB0LgorICAgICAgT24gdHJhbnNsaXRlcmF0aW5nIFx1MEI3MCBmcm9tIE9yaXlhIHRvIFRhbWlsLCB3ZSB3aWxsIGdldCBcdTBCRjAuCisgICAgICBCdXQgXHUwQjcwIGluIE9yaXlhIHJlcHJlc2VudHMgSVNTSEFSLCB3aGVyZWFzIFx1MEJGMCBpbiBUYW1pbCByZXByZXNlbnRzIE5VTUJFUiBURU4uCisKKyAgIFx1MDk3MCBEZXZhbmFnYXJpIGFiYnJldmlhdGlvbiBzaWduCisKKyAgIFx1MDlGMCBCZW5nYWxpIGxldHRlciBSQSB3aXRoIG1pZGRsZSBkaWFnb25hbCAoQXNzYW1lc2UpCisgICBcdTA5RjEgQmVuZ2FsaSBsZXR0ZXIgUkEgd2l0aCBsb3dlciBkaWFnb25hbCAKKyAgICAgICAgICAoPUJlbmdhbGkgbGV0dGVyIFZBIHdpdGggbG93ZXIgZGlhZ29uYWwsIEFzc2FtZXNlKQorICAgXHUwOUYyIEJlbmdhbGkgcnVwZWUgbWFyaworICAgXHUwOUYzIEJlbmdhbGkgcnVwZWUgc2lnbgorICAgXHUwOUY0IEJlbmdhbGkgY3VycmVuY3kgbnVtZXJhdG9yIG9uZQorICAgXHUwOUY1IEJlbmdhbGkgY3VycmVuY3kgbnVtZXJhdG9yIHR3bworICAgXHUwOUY2IEJlbmdhbGkgY3VycmVuY3kgbnVtZXJhdG9yIHRocmVlCisgICBcdTA5RjcgQmVuZ2FsaSBjdXJyZW5jeSBudW1lcmF0b3IgZm91cgorICAgXHUwOUY4IEJlbmdhbGkgY3VycmVuY3kgbnVtZXJhdG9yIG9uZSBsZXNzIHRoYW4gdGhlIGRlbm9taW5hdG9yCisgICBcdTA5RjkgQmVuZ2FsaSBjdXJyZW5jeSBkZW5vbWluYXRvciBzaXh0ZWVuCisgICBcdTA5RkEgQmVuZ2FsaSBpc3NoYXIKKworICAgXHUwQTcwIEd1cm11a2hpIHRpcHBpIChuYXNhbGl6YXRpb24pCisgICBcdTBBNzEgR3VybXVraGkgYWRkYWsgKGRvdWJsZXMgZm9sbG93aW5nIGNvbnNvbmFudCkKKyAgIFx1MEE3MiBHdXJtdWtoaSBpcmkgKGJhc2UgZm9yIHZvd2VscykKKyAgIFx1MEE3MyBHdXJtdWtoaSB1cmEgKGJhc2UgZm9yIHZvd2VscykKKyAgIFx1MEE3NCBHdXJtdWtoaSBlayBvbmthciAoR29kIGlzIE9uZSkKKworICAgXHUwQjcwIE9yaXlhIGlzc2hhcgorCisgICBcdTBCRjAgVGFtaWwgbnVtYmVyIHRlbgorICAgXHUwQkYxIFRhbWlsIG51bWJlciBvbmUgaHVuZHJlZAorICAgXHUwQkYyIFRhbWlsIG51bWJlciBvbmUgdGhvdXNhbmQKKyovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTk9URSA6IDx1bmtub3duPiBjb2RlIHdpbGwgbWFwIGJhY2sgdG8gaXRzZWxmICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgIHRpbGwgd2UgZmluZCBhIGdvb2QgbWF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZXZhbmFnYXJpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyJcdTA5NTU+XHUwOTU1OyIgIC8vIDx1bmtub3duPiBMZW5ndGggTWFyayAtIEthbm5hZGEgKFx1MENENSksIFRlbHVndSAoXHUwQzU1KQorIlx1MDk1Nj5cdTA5NDg7IiAgLy8gQUkgTGVuZ3RoIE1hcmsgLT4gRGV2YW5hZ2FyaSBWb3dlbCBTaWduIEFJCisiXHUwOTU3Plx1MDk0QzsiICAvLyBBVSBMZW5ndGggTWFyayAtPiBEZXZhbmFnYXJpIFZvd2VsIFNpZ24gQVUKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEJlbmdhbGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIlx1MDk4RD5cdTA5OEQ7IiAgLy8gPHVua25vd24+IGluZGVwZW5kZW50IHZvd2VsIENhbmRyYSBFCisiXHUwOThFPlx1MDk4RjsiICAvLyBMZXR0ZXIgU2hvcnQgRSAtPiBMZXR0ZXIgRQorIlx1MDk5MT5cdTA5OTM7IiAgLy8gTGV0dGVyIENhbmRyYSBPIC0+IExldHRlciBPCisiXHUwOTkyPlx1MDk5MzsiICAvLyBMZXR0ZXIgU2hvcnQgTyAtPiBMZXR0ZXIgTworIlx1MDlBOT5cdTA5QTg7IiAgLy8gTGV0dGVyIE5OTkEgLT4gTGV0dGVyIE5BCisiXHUwOUIxPlx1MDlCMDsiICAvLyBMZXR0ZXIgUlJBIC0+IExldHRlciBSQQorIlx1MDlCMz5cdTA5QjI7IiAgLy8gTGV0dGVyIExMQSAtPiBMZXR0ZXIgTEEKKyJcdTA5QjQ+XHUwOUIyOyIgIC8vIExldHRlciBMTExBIC0+IExldHRlciBMQQorIlx1MDlCNT5cdTA5QUM7IiAgLy8gTGV0dGVyIFZBIC0+IExldHRlciBCQQorIlx1MDlCRD5cdTA5QkQ7IiAgLy8gPHVua25vd24+IFNpZ24gQXZhZ3JhaGEgLSBEZXZhbmFnYXJpIChcdTA5M0QpCisiXHUwOUM1Plx1MDlDNzsiICAvLyBWb3dlbCBDYW5kcmEgRSAtPiBWb3dlbCBFCisiXHUwOUM2Plx1MDlDNzsiICAvLyBWb3dlbCBTaG9ydCBFIC0+IFZvd2VsIEUKKyJcdTA5Qzk+XHUwOUNCOyIgIC8vIFZvd2VsIENhbmRyYSBPIC0+IFZvd2VsIE8KKyJcdTA5Q0E+XHUwOUNCOyIgIC8vIFZvd2VsIFNob3J0IE8gLT4gVm93ZWwgTworIlx1MDlEMD5cdTA5RDA7IiAgLy8gPHVua25vd24+IE9NIC0gRGV2YW5hZ2FyaSAoXHUwOTUwKSwgR3VqYXJhdGkgKFx1MEFEMCkKKyJcdTA5RDE+XHUwOUQxOyIgIC8vIDx1bmtub3duPiBTdHJlc3MgLSBEZXZhbmFnYXJpIChcdTA5NTEpCisiXHUwOUQyPlx1MDlEMjsiICAvLyA8dW5rbm93bj4gU3RyZXNzIC0gRGV2YW5hZ2FyaSAoXHUwOTUyKQorIlx1MDlEMz5cdTA5RDM7IiAgLy8gPHVua25vd24+IEFjY2VudCAtIERldmFuYWdhcmkgKFx1MDk1MykKKyJcdTA5RDQ+XHUwOUQ0OyIgIC8vIDx1bmtub3duPiBBY2NlbnQgLSBEZXZhbmFnYXJpIChcdTA5NTQpCisiXHUwOUQ1Plx1MDlENTsiICAvLyA8dW5rbm93bj4gTGVuZ3RoIE1hcmsgLSBLYW5uYWRhIChcdTBDRDUpLCBUZWx1Z3UgKFx1MEM1NSkKKyJcdTA5RDY+XHUwOUM4OyIgIC8vIEFJIExlbmd0aCBNYXJrIC0+IEJlbmdhbGkgVm93ZWwgU2lnbiBBSQorIlx1MDlEOD5cdTA5OTU7IiAgLy8gTGV0dGVyIFFBIC0+IExldHRlciBLQQorIlx1MDlEOT5cdTA5OTY7IiAgLy8gTGV0dGVyIEtISEEgLT4gTGV0dGVyIEtIQQorIlx1MDlEQT5cdTA5OTc7IiAgLy8gTGV0dGVyIEdISEEgLT4gTGV0dGVyIEdBCisiXHUwOURCPlx1MDk5QzsiICAvLyBMZXR0ZXIgWkEgLT4gTGV0dGVyIEpBCisiXHUwOURFPlx1MDlBQjsiICAvLyBMZXR0ZXIgRkEgLT4gTGV0dGVyIFBIQQorIlx1MDlFND5cdTA5RTQ7IiAgLy8gPHVua25vd24+IERhbmRhIC0gRGV2YW5hZ2FyaSAoXHUwOTY0KQorIlx1MDlFNT5cdTA5RTU7IiAgLy8gPHVua25vd24+IERvdWJsZSBEYW5kYSAtIERldmFuYWdhcmkgKFx1MDk2NSkKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEd1cm11a2hpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIlx1MEEwMT5cdTBBMDI7IgorIlx1MEEwMz5cdTBBMDM7IiAgLy8gPHVua25vd24+IFNpZ24gVmlzYXJnYSAtIERldmFuYWdhcmkgKFx1MDkwMykgJiB0aGUgcmVzdAorIlx1MEEwQj5cdTBBMzBcdTBBM0Y7IgorIlx1MEEwQz5cdTBBMDc7IgorIlx1MEEwRD5cdTBBMTA7IgorIlx1MEEwRT5cdTBBMEY7IgorIlx1MEExMT5cdTBBMTQ7IgorIlx1MEExMj5cdTBBMTM7IgorIlx1MEEyOT5cdTBBMjg7IgorIlx1MEEzMT5cdTBBMzA7IgorIlx1MEEzND5cdTBBMzM7IgorIlx1MEEzNz5cdTBBMzY7IgorIlx1MEEzRD5cdTBBM0Q7IiAgLy8gPHVua25vd24+IFNpZ24gQXZhZ3JhaGEgLSBEZXZhbmFnYXJpIChcdTA5M0QpCisiXHUwQTQzPlx1MEE0MzsiICAvLyA8dW5rbm93bj4gVm9jYWxpYyBSIC0gRGV2YW5hZ2FyaSAoXHUwOTQzKQorIlx1MEE0ND5cdTBBNDQ7IiAgLy8gPHVua25vd24+IFZvY2FsaWMgUlIgLSBEZXZhbmFnYXJpIChcdTA5NDQpCisiXHUwQTQ1Plx1MEE0ODsiCisiXHUwQTQ2Plx1MEE0NzsiCisiXHUwQTQ5Plx1MEE0QzsiCisiXHUwQTRBPlx1MEE0QjsiCisiXHUwQTUwPlx1MEE1MDsiICAvLyA8dW5rbm93bj4gT00gLSBEZXZhbmFnYXJpIChcdTA5NTApLCBHdWphcmF0aSAoXHUwQUQwKQorIlx1MEE1MT5cdTBBNTE7IiAgLy8gPHVua25vd24+IFN0cmVzcyAtIERldmFuYWdhcmkgKFx1MDk1MSkKKyJcdTBBNTI+XHUwQTUyOyIgIC8vIDx1bmtub3duPiBTdHJlc3MgLSBEZXZhbmFnYXJpIChcdTA5NTIpCisiXHUwQTUzPlx1MEE1MzsiICAvLyA8dW5rbm93bj4gQWNjZW50IC0gRGV2YW5hZ2FyaSAoXHUwOTUzKQorIlx1MEE1ND5cdTBBNTQ7IiAgLy8gPHVua25vd24+IEFjY2VudCAtIERldmFuYWdhcmkgKFx1MDk1NCkKKyJcdTBBNTU+XHUwQTU1OyIgIC8vIDx1bmtub3duPiBMZW5ndGggTWFyayAtIEthbm5hZGEgKFx1MENENSksIFRlbHVndSAoXHUwQzU1KQorIlx1MEE1Nj5cdTBBNDg7IiAgLy8gQUkgTGVuZ3RoIE1hcmsgLT4gR3VybXVraGkgVm93ZWwgU2lnbiBBSQorIlx1MEE1Nz5cdTBBNEM7IiAgLy8gQVUgTGVuZ3RoIE1hcmsgLT4gR3VybXVraGkgVm93ZWwgU2lnbiBBVQorIlx1MEE1OD5cdTBBMTVcdTBBM0M7IgorIlx1MEE1RD5cdTBBMjJcdTBBM0M7IiAgLy8gTGV0dGVyIFJIQSAtPiBHdXJtdWtoaSBsZXR0ZXIgZGRoYSAoXHUwQTIyKSArIG51a3RhIChcdTBBM0MpCisiXHUwQTVGPlx1MEEyRjsiCisiXHUwQTYwPlx1MEEzMFx1MEEzRjsiCisiXHUwQTYxPlx1MEEwOFx1MEEzQzsiCisiXHUwQTYyPlx1MEEzRlx1MEEzQzsiCisiXHUwQTYzPlx1MEE0MFx1MEEzQzsiCisiXHUwQTY0Plx1MEE2NDsiICAvLyA8dW5rbm93bj4gRGFuZGEgLSBEZXZhbmFnYXJpIChcdTA5NjQpCisiXHUwQTY1Plx1MEE2NTsiICAvLyA8dW5rbm93bj4gRG91YmxlIERhbmRhIC0gRGV2YW5hZ2FyaSAoXHUwOTY1KQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogR3VqYXJhdGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIlx1MEE4Qz5cdTBBQjJcdTBBQzM7IgorIlx1MEE4RT5cdTBBOEQ7IgorIlx1MEE5Mj5cdTBBOTE7IgorIlx1MEFBOT5cdTBBQTg7IgorIlx1MEFCMT5cdTBBQjA7IgorIlx1MEFCND5cdTBBQjM7IgorIlx1MEFDNj5cdTBBQzU7IgorIlx1MEFDQT5cdTBBQzk7IgorIlx1MEFEMT5cdTBBRDE7IiAgLy8gPHVua25vd24+IFN0cmVzcyAtIERldmFuYWdhcmkgKFx1MDk1MSkKKyJcdTBBRDI+XHUwQUQyOyIgIC8vIDx1bmtub3duPiBTdHJlc3MgLSBEZXZhbmFnYXJpIChcdTA5NTIpCisiXHUwQUQzPlx1MEFEMzsiICAvLyA8dW5rbm93bj4gQWNjZW50IC0gRGV2YW5hZ2FyaSAoXHUwOTUzKQorIlx1MEFEND5cdTBBRDQ7IiAgLy8gPHVua25vd24+IEFjY2VudCAtIERldmFuYWdhcmkgKFx1MDk1NCkKKyJcdTBBRDU+XHUwQUQ1OyIgIC8vIDx1bmtub3duPiBMZW5ndGggTWFyayAtIEthbm5hZGEgKFx1MENENSksIFRlbHVndSAoXHUwQzU1KQorIlx1MEFENj5cdTBBQzg7IiAgLy8gQUkgTGVuZ3RoIE1hcmsgLT4gR3VqYXJhdGkgVm93ZWwgU2lnbiBBSQorIlx1MEFENz5cdTBBQ0M7IiAgLy8gQVUgTGVuZ3RoIE1hcmsgLT4gR3VqYXJhdGkgVm93ZWwgU2lnbiBBVQorIlx1MEFEOD5cdTBBOTVcdTBBQkM7IgorIlx1MEFEOT5cdTBBOTZcdTBBQkM7IgorIlx1MEFEQT5cdTBBOTdcdTBBQkM7IgorIlx1MEFEQj5cdTBBOUNcdTBBQkM7IgorIlx1MEFEQz5cdTBBQTFcdTBBQkM7IgorIlx1MEFERD5cdTBBQTJcdTBBQkM7IgorIlx1MEFERT5cdTBBQUJcdTBBQkM7IgorIlx1MEFERj5cdTBBQUZcdTBBQkM7IgorIlx1MEFFMT5cdTBBQjJcdTBBQzM7IgorIlx1MEFFMj5cdTBBQkZcdTBBQkM7IgorIlx1MEFFMz5cdTBBQzBcdTBBQkM7IgorIlx1MEFFND5cdTBBRTQ7IiAgLy8gPHVua25vd24+IERhbmRhIC0gRGV2YW5hZ2FyaSAoXHUwOTY0KQorIlx1MEFFNT5cdTBBRTU7IiAgLy8gPHVua25vd24+IERvdWJsZSBEYW5kYSAtIERldmFuYWdhcmkgKFx1MDk2NSkKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE9yaXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyJcdTBCMEQ+XHUwQjBGOyIKKyJcdTBCMEU+XHUwQjBGOyIKKyJcdTBCMTE+XHUwQjEzOyIKKyJcdTBCMTI+XHUwQjEzOyIKKyJcdTBCMjk+XHUwQjI4OyIKKyJcdTBCMzE+XHUwQjMwOyIKKyJcdTBCMzQ+XHUwQjMzOyIKKyJcdTBCMzU+XHUwQjJDOyIgIC8vIExldHRlciBWQSAtPiBPcml5YSBMZXR0ZXIgQkEKKyJcdTBCNDQ+XHUwQjQzXHUwQjNDOyIKKyJcdTBCNDU+XHUwQjQ3OyIKKyJcdTBCNDY+XHUwQjQ3OyIKKyJcdTBCNDk+XHUwQjRCOyIKKyJcdTBCNEE+XHUwQjRCOyIKKyJcdTBCNTA+XHUwQjEzXHUwQjAxOyIKKyJcdTBCNTE+XHUwQjUxOyIgIC8vIDx1bmtub3duPiBTdHJlc3MgLSBEZXZhbmFnYXJpIChcdTA5NTEpCisiXHUwQjUyPlx1MEI1MjsiICAvLyA8dW5rbm93bj4gU3RyZXNzIC0gRGV2YW5hZ2FyaSAoXHUwOTUyKQorIlx1MEI1Mz5cdTBCNTM7IiAgLy8gPHVua25vd24+IEFjY2VudCAtIERldmFuYWdhcmkgKFx1MDk1MykKKyJcdTBCNTQ+XHUwQjU0OyIgIC8vIDx1bmtub3duPiBBY2NlbnQgLSBEZXZhbmFnYXJpIChcdTA5NTQpCisiXHUwQjU1Plx1MEI1NTsiICAvLyA8dW5rbm93bj4gTGVuZ3RoIE1hcmsgLSBLYW5uYWRhIChcdTBDRDUpLCBUZWx1Z3UgKFx1MEM1NSkKKyJcdTBCNTg+XHUwQjE1XHUwQjNDOyIKKyJcdTBCNTk+XHUwQjE2XHUwQjNDOyIKKyJcdTBCNUE+XHUwQjE3XHUwQjNDOyIKKyJcdTBCNUI+XHUwQjFDXHUwQjNDOyIKKyJcdTBCNUU+XHUwQjJCXHUwQjNDOyIKKyJcdTBCNjI+XHUwQjU2XHUwQjNDOyIKKyJcdTBCNjM+XHUwQjU3XHUwQjNDOyIKKyJcdTBCNjQ+XHUwQjY0OyIgIC8vIDx1bmtub3duPiBEYW5kYSAtIERldmFuYWdhcmkgKFx1MDk2NCkKKyJcdTBCNjU+XHUwQjY1OyIgIC8vIDx1bmtub3duPiBEb3VibGUgRGFuZGEgLSBEZXZhbmFnYXJpIChcdTA5NjUpCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUYW1pbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyJcdTBCODE+XHUwQjgxOyIgIC8vIDx1bmtub3duPiBDYW5kcmFiaW5kdSAtIERldmFuYWdhcmkgKFx1MDkwMSkgLGV0YworIlx1MEI4Qj5cdTBCQjBcdTBCQkY7IgorIlx1MEI4Qz5cdTBCODc7IgorIlx1MEI4RD5cdTBCODY7IgorIlx1MEI5MT5cdTBCODY7IgorIlx1MEI5Nj5cdTBCOTU7IgorIlx1MEI5Nz5cdTBCOTU7IgorIlx1MEI5OD5cdTBCOTU7IgorIlx1MEI5Qj5cdTBCOUE7IgorIlx1MEI5RD5cdTBCOUE7IgorIlx1MEJBMD5cdTBCOUY7IgorIlx1MEJBMT5cdTBCOUY7IgorIlx1MEJBMj5cdTBCOUY7IgorIlx1MEJBNT5cdTBCQTQ7IgorIlx1MEJBNj5cdTBCQTQ7IgorIlx1MEJBNz5cdTBCQTQ7IgorIlx1MEJBQj5cdTBCQUE7IgorIlx1MEJBQz5cdTBCQUE7IgorIlx1MEJBRD5cdTBCQUE7IgorIlx1MEJCNj5cdTBCQjc7IgorIlx1MEJCQz5cdTBCQkM7IiAgLy8gPHVua25vd24+IE51a3RhCisiXHUwQkJEPlx1MEJCRDsiICAvLyA8dW5rbm93bj4gU2lnbiBBdmFncmFoYSAtIERldmFuYWdhcmkgKFx1MDkzRCkKKyJcdTBCQzM+XHUwQkNEXHUwQkIwXHUwQkJGOyIKKyJcdTBCQzQ+XHUwQkNEXHUwQkIwXHUwQkJGOyIKKyJcdTBCQzU+XHUwQkJFOyIKKyJcdTBCQzk+XHUwQkJFOyIKKyJcdTBCRDA+XHUwQjkzXHUwQkFFXHUwQkNEOyIKKyJcdTBCRDE+XHUwQkQxOyIgIC8vIDx1bmtub3duPiBTdHJlc3MgLSBEZXZhbmFnYXJpIChcdTA5NTEpCisiXHUwQkQyPlx1MEJEMjsiICAvLyA8dW5rbm93bj4gU3RyZXNzIC0gRGV2YW5hZ2FyaSAoXHUwOTUyKQorIlx1MEJEMz5cdTBCRDM7IiAgLy8gPHVua25vd24+IEFjY2VudCAtIERldmFuYWdhcmkgKFx1MDk1MykKKyJcdTBCRDQ+XHUwQkQ0OyIgIC8vIDx1bmtub3duPiBBY2NlbnQgLSBEZXZhbmFnYXJpIChcdTA5NTQpCisiXHUwQkQ1Plx1MEJENTsiICAvLyA8dW5rbm93bj4gTGVuZ3RoIE1hcmsgLSBLYW5uYWRhIChcdTBDRDUpLCBUZWx1Z3UgKFx1MEM1NSkKKyJcdTBCRDY+XHUwQkM4OyIgIC8vIEFJIExlbmd0aCBNYXJrIC0+IFRhbWlsIFZvd2VsIFNpZ24gQUkKKyJcdTBCRDg+XHUwQjk1OyIKKyJcdTBCRDk+XHUwQjk1OyIKKyJcdTBCREE+XHUwQjk1OyIKKyJcdTBCREI+XHUwQjlDOyIKKyJcdTBCREM+XHUwQjlGOyIKKyJcdTBCREQ+XHUwQjlGOyIKKyJcdTBCREU+XHUwQkFBOyIKKyJcdTBCREY+XHUwQkFGOyIKKyJcdTBCRTA+XHUwQkIwXHUwQkJGOyIKKyJcdTBCRTE+XHUwQjg4OyIKKyJcdTBCRTI+XHUwQkUyOyIgIC8vIDx1bmtub3duPiBWb2NhbGljIEwgLSBEZXZhbmFnYXJpIChcdTA5NjIpCisiXHUwQkUzPlx1MEJFMzsiICAvLyA8dW5rbm93bj4gVm9jYWxpYyBMTCAtIERldmFuYWdhcmkgKFx1MDk2MykKKyJcdTBCRTQ+XHUwQkU0OyIgIC8vIDx1bmtub3duPiBEYW5kYSAtIERldmFuYWdhcmkgKFx1MDk2NCkKKyJcdTBCRTU+XHUwQkU1OyIgIC8vIDx1bmtub3duPiBEb3VibGUgRGFuZGEgLSBEZXZhbmFnYXJpIChcdTA5NjUpCisiXHUwQkU2Plx1MDAzMDsiICAvLyBaRVJPIC0gRGlnaXQgWkVSTworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGVsdWd1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisiXHUwQzBEPlx1MEMwRTsiCisiXHUwQzExPlx1MEMxMjsiCisiXHUwQzI5Plx1MEMyODsiCisiXHUwQzM0Plx1MEMzMzsiCisiXHUwQzNDPlx1MEMzQzsiICAvLyA8dW5rbm93bj4gTnVrdGEKKyJcdTBDM0Q+XHUwQzNEOyIgIC8vIDx1bmtub3duPiBTaWduIEF2YWdyYWhhIC0gRGV2YW5hZ2FyaSAoXHUwOTNEKQorIlx1MEM0NT5cdTBDNDY7IgorIlx1MEM0OT5cdTBDNEE7IgorIlx1MEM1MD5cdTBDMTNcdTBDMDI7IgorIlx1MEM1MT5cdTBDNTE7IiAgLy8gPHVua25vd24+IFN0cmVzcyAtIERldmFuYWdhcmkgKFx1MDk1MSkKKyJcdTBDNTI+XHUwQzUyOyIgIC8vIDx1bmtub3duPiBTdHJlc3MgLSBEZXZhbmFnYXJpIChcdTA5NTIpCisiXHUwQzUzPlx1MEM1MzsiICAvLyA8dW5rbm93bj4gQWNjZW50IC0gRGV2YW5hZ2FyaSAoXHUwOTUzKQorIlx1MEM1ND5cdTBDNTQ7IiAgLy8gPHVua25vd24+IEFjY2VudCAtIERldmFuYWdhcmkgKFx1MDk1NCkKKyJcdTBDNTc+XHUwQzRDOyIKKyJcdTBDNTg+XHUwQzE1OyIKKyJcdTBDNTk+XHUwQzE2OyIKKyJcdTBDNUE+XHUwQzE3OyIKKyJcdTBDNUI+XHUwQzFDOyIKKyJcdTBDNUM+XHUwQzIxOyIKKyJcdTBDNUQ+XHUwQzIyOyIKKyJcdTBDNUU+XHUwQzJCOyIKKyJcdTBDNUY+XHUwQzJGOyIKKyJcdTBDNjI+XHUwQzNGOyIKKyJcdTBDNjM+XHUwQzQwOyIKKyJcdTBDNjQ+XHUwQzY0OyIgIC8vIDx1bmtub3duPiBEYW5kYSAtIERldmFuYWdhcmkgKFx1MDk2NCkKKyJcdTBDNjU+XHUwQzY1OyIgIC8vIDx1bmtub3duPiBEb3VibGUgRGFuZGEgLSBEZXZhbmFnYXJpIChcdTA5NjUpCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBLYW5uYWRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyJcdTBDODE+XHUwQzgyOyIKKyJcdTBDOEQ+XHUwQzhFOyIKKyJcdTBDOTE+XHUwQzkyOyIKKyJcdTBDQTk+XHUwQ0E4OyIKKyJcdTBDQjQ+XHUwQ0IzOyIKKyJcdTBDQkM+XHUwQ0JDOyIgIC8vIDx1bmtub3duPiBOdWt0YQorIlx1MENCRD5cdTBDQkQ7IiAgLy8gPHVua25vd24+IFNpZ24gQXZhZ3JhaGEgLSBEZXZhbmFnYXJpIChcdTA5M0QpCisiXHUwQ0M1Plx1MENDNjsiCisiXHUwQ0M5Plx1MENDQTsiCisiXHUwQ0QwPlx1MEM5M1x1MEM4MjsiCisiXHUwQ0QxPlx1MENEMTsiICAvLyA8dW5rbm93bj4gU3RyZXNzIC0gRGV2YW5hZ2FyaSAoXHUwOTUxKQorIlx1MENEMj5cdTBDRDI7IiAgLy8gPHVua25vd24+IFN0cmVzcyAtIERldmFuYWdhcmkgKFx1MDk1MikKKyJcdTBDRDM+XHUwQ0QzOyIgIC8vIDx1bmtub3duPiBBY2NlbnQgLSBEZXZhbmFnYXJpIChcdTA5NTMpCisiXHUwQ0Q0Plx1MENENDsiICAvLyA8dW5rbm93bj4gQWNjZW50IC0gRGV2YW5hZ2FyaSAoXHUwOTU0KQorIlx1MENENz5cdTBDQ0M7IgorIlx1MENEOD5cdTBDOTU7IgorIlx1MENEOT5cdTBDOTY7IgorIlx1MENEQT5cdTBDOTc7IgorIlx1MENEQj5cdTBDOUM7IgorIlx1MENEQz5cdTBDQTE7IgorIlx1MENERD5cdTBDQTI7IgorIlx1MENERj5cdTBDQUY7IgorIlx1MENFMj5cdTBDQkY7IgorIlx1MENFMz5cdTBDQzA7IgorIlx1MENFND5cdTBDRTQ7IiAgLy8gPHVua25vd24+IERhbmRhIC0gRGV2YW5hZ2FyaSAoXHUwOTY0KQorIlx1MENFNT5cdTBDRTU7IiAgLy8gPHVua25vd24+IERvdWJsZSBEYW5kYSAtIERldmFuYWdhcmkgKFx1MDk2NSkKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1hbGF5YWxhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIlx1MEQwMT5cdTBEMDI7IgorIlx1MEQwRD5cdTBEMDY7IgorIlx1MEQxMT5cdTBEMTM7IgorIlx1MEQyOT5cdTBEMjg7IgorIlx1MEQzQz5cdTBEM0M7IiAgLy8gPHVua25vd24+IE51a3RhCisiXHUwRDNEPlx1MEQzRDsiICAvLyA8dW5rbm93bj4gU2lnbiBBdmFncmFoYSAtIERldmFuYWdhcmkgKFx1MDkzRCkKKyJcdTBENDQ+XHUwRDQ0OyIgIC8vIDx1bmtub3duPiBWb2NhbGljIFJSIC0gRGV2YW5hZ2FyaSAoXHUwOTQ0KQorIlx1MEQ0NT5cdTBEM0U7IgorIlx1MEQ0OT5cdTBENEI7IgorIlx1MEQ1MD5cdTBENTA7IiAgLy8gPHVua25vd24+IE9NIC0gRGV2YW5hZ2FyaSAoXHUwOTUwKSwgR3VqYXJhdGkgKFx1MEFEMCkKKyJcdTBENTE+XHUwRDUxOyIgIC8vIDx1bmtub3duPiBTdHJlc3MgLSBEZXZhbmFnYXJpIChcdTA5NTEpCisiXHUwRDUyPlx1MEQ1MjsiICAvLyA8dW5rbm93bj4gU3RyZXNzIC0gRGV2YW5hZ2FyaSAoXHUwOTUyKQorIlx1MEQ1Mz5cdTBENTM7IiAgLy8gPHVua25vd24+IEFjY2VudCAtIERldmFuYWdhcmkgKFx1MDk1MykKKyJcdTBENTQ+XHUwRDU0OyIgIC8vIDx1bmtub3duPiBBY2NlbnQgLSBEZXZhbmFnYXJpIChcdTA5NTQpCisiXHUwRDU1Plx1MEQ1NTsiICAvLyA8dW5rbm93bj4gTGVuZ3RoIE1hcmsgLSBLYW5uYWRhIChcdTBDRDUpLCBUZWx1Z3UgKFx1MEM1NSkKKyJcdTBENTY+XHUwRDQ4OyIgIC8vIEFJIExlbmd0aCBNYXJrIC0+IE1hbGF5YWxhbSBWb3dlbCBTaWduIEFJCisiXHUwRDU4Plx1MEQxNTsiCisiXHUwRDU5Plx1MEQxNjsiCisiXHUwRDVBPlx1MEQxNzsiCisiXHUwRDVCPlx1MEQxQzsiCisiXHUwRDVDPlx1MEQyMTsiCisiXHUwRDVEPlx1MEQyMjsiCisiXHUwRDVFPlx1MEQyQjsiCisiXHUwRDVGPlx1MEQyRjsiCisiXHUwRDYyPlx1MEQ2MjsiICAvLyA8dW5rbm93bj4gVm9jYWxpYyBMIC0gRGV2YW5hZ2FyaSAoXHUwOTYyKQorIlx1MEQ2Mz5cdTBENjM7IiAgLy8gPHVua25vd24+IFZvY2FsaWMgTEwgLSBEZXZhbmFnYXJpIChcdTA5NjMpCisiXHUwRDY0Plx1MEQ2NDsiICAvLyA8dW5rbm93bj4gRGFuZGEgLSBEZXZhbmFnYXJpIChcdTA5NjQpCisiXHUwRDY1Plx1MEQ2NTsiICAvLyA8dW5rbm93bj4gRG91YmxlIERhbmRhIC0gRGV2YW5hZ2FyaSAoXHUwOTY1KQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L3JidFRlbXBsYXRlLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9yYnRUZW1wbGF0ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDU0OWJiZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC9yYnRUZW1wbGF0ZS50eHQKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoYykgMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorKiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiA+IFRISVMgRklMRSBXQVMgTUFDSElORSBHRU5FUkFURUQgPAorKiA+ICAgICAgIERPIE5PVCBFRElUIEJZIEhBTkQgICAgICAgPAorKiA+ICAgICAgUlVOIFRPT0wgVE8gUkVHRU5FUkFURSAgICAgPAorKiBUb29sOiAkVE9PTAorKiBDcmVhdGlvbiBkYXRlOiAkREFURQorKi8KK3BhY2thZ2UgY29tLmlibS50ZXh0LnJlc291cmNlczsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBUcmFuc2xpdGVyYXRpb25SdWxlXyRTQ1JJUFRGUk9NXyRTQ1JJUFRUTyBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIExpc3RSZXNvdXJjZUJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgeyAiUnVsZSIsCisgICAgICAgICAgICAgICRSVUxFUworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC92YXJzdWIuYmF0IGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3RyYW5zbGl0L3ZhcnN1Yi5iYXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDg5MjcyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC90cmFuc2xpdC92YXJzdWIuYmF0CkBAIC0wLDAgKzEsNzQgQEAKK0ByZW0gPSAnLS0qLVBlcmwtKi0tCitAZWNobyBvZmYKK2lmICIlT1MlIiA9PSAiV2luZG93c19OVCIgZ290byBXaW5OVAorcGVybCAteCAtUyAiJTAiICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Citnb3RvIGVuZG9mcGVybAorOldpbk5UCitwZXJsIC14IC1TICIlMCIgJSoKK2lmIE5PVCAiJUNPTVNQRUMlIiA9PSAiJVN5c3RlbVJvb3QlXHN5c3RlbTMyXGNtZC5leGUiIGdvdG8gZW5kb2ZwZXJsCitpZiAlZXJyb3JsZXZlbCUgPT0gOTAwOSBlY2hvIFlvdSBkbyBub3QgaGF2ZSBQZXJsIGluIHlvdXIgUEFUSC4KK2dvdG8gZW5kb2ZwZXJsCitAcmVtICc7CisjIXBlcmwKKyNsaW5lIDE0CisKKyMgVXNhZ2U6IHBlcmwgdmFyc3ViLmJhdCBbLW58LW5yXSA8aW5maWxlPiA8b3V0ZmlsZT4KKyMKKyMgU3Vic3RpdHV0ZXMgdmFyaWFibGVzIGludG8gcnVsZXMgYW5kIGRlbGV0ZXMgdmFyaWFibGUgZGVmaW5pdGlvbgorIyBzdGF0ZW1lbnRzLiAgVmFyaWFibGVzIHRoYXQgZXhwYW5kIHRvIFVuaWNvZGVTZXRzIGFyZSBOT1QKKyMgc3Vic3RpdHV0ZWQuCisjCisjICAtbiAgIEFmdGVyd2FyZHMsIHJ1biBuYXRpdmUyYXNjaWkgLWVuY29kaW5nIFVURjgKKyMgIC1uciAgQWZ0ZXJ3YXJkcywgcnVuIG5hdGl2ZTJhc2NpaSAtZW5jb2RpbmcgVVRGOCAtcmV2ZXJzZQorCiskTjJBID0gMDsKKworJElOID0gc2hpZnQ7CitpZiAoJElOID1+IC9eLW4vKSB7CisgICAgJE4yQSA9IDE7CisgICAgJE4yQW9wdGlvbiA9ICgkSU4gZXEgJy1ucicpID8gIiAtcmV2ZXJzZSAiIDogIiI7CisgICAgJElOID0gc2hpZnQ7Cit9CiskT1VUID0gc2hpZnQ7CisKK2lmICghKCRJTiAmJiAkT1VUKSkgeworICAgIGRpZSAiVXNhZ2U6ICQwIFstbnwtbnJdIDxpbmZpbGU+IDxvdXRmaWxlPiI7Cit9CisKK29wZW4oSU4pIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkSU46ICQhIjsKK29wZW4oT1VULCAiPiRPVVQiKSBvciBkaWUgIkNhbid0IG9wZW4gJE9VVDogJCEiOworCit3aGlsZSAoPElOPikgeworICAgIGlmICgvXlxzKlwkKFthLXpBLVowLTlfXSspXHMqPVxzKihbXjtcI10rKVxzKjtccyooXCMuKik/JC8pIHsKKyAgICAgICAgIyBUaGlzIGxvb2tzIGxpa2UgYSB2YXJpYWJsZSBkZWZpbml0aW9uCisgICAgICAgIG15ICgkdmFyLCAkZGVmKSA9ICgkMSwgJDIpOworICAgICAgICAjIERvbid0IHN1YnN0aXR1dGUgVW5pY29kZVNldCB2YXJzCisgICAgICAgIGlmICgkZGVmICF+IC9eXFsvKSB7CisgICAgICAgICAgICBpZiAoZXhpc3RzICRWQVJ7JHZhcn0pIHsKKyAgICAgICAgICAgICAgICBwcmludCBTVERFUlIgIkVycm9yOiBEdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiAkdmFyXG4iOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkVkFSeyR2YXJ9ID0gJGRlZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgIyBEbyB2YXJpYWJsZSBzdWJzdGl0dXRpb25zLCBhbmQgb3V0cHV0IGxpbmUKKyAgICBmb3JlYWNoIG15ICR2YXIgKGtleXMgJVZBUikgeworICAgICAgICBteSAkZGVmID0gJFZBUnskdmFyfTsKKyAgICAgICAgcy9cJCR2YXJcYi8kZGVmL2c7CisgICAgfQorICAgIHByaW50IE9VVDsKK30KKworY2xvc2UoT1VUKTsKK2Nsb3NlKElOKTsKKworaWYgKCROMkEpIHsKKyAgICBgbmF0aXZlMmFzY2lpIC1lbmNvZGluZyBVVEY4ICROMkFvcHRpb24gJE9VVCAkT1VULm5hdGl2ZTJhc2NpaWA7CisgICAgdW5saW5rICRPVVQ7CisgICAgcmVuYW1lICIkT1VULm5hdGl2ZTJhc2NpaSIsICRPVVQ7Cit9CisKK19fRU5EX18KKzplbmRvZnBlcmwKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC94bWxjb21wYXJhdG9yL1Jlc3VsdFhNTC5kdGQgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wveG1sY29tcGFyYXRvci9SZXN1bHRYTUwuZHRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzQ1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wveG1sY29tcGFyYXRvci9SZXN1bHRYTUwuZHRkCkBAIC0wLDAgKzEsMjggQEAKKzwhRUxFTUVOVCBkaWZmZXJlbmNlX3htbCAoZGlmZmVyZW5jZV9lbGVtZW50KSogPgorCis8IUVMRU1FTlQgZGlmZmVyZW5jZV9lbGVtZW50ICggaWN1IHwgaWJtX3Rvcm9udG8gfCB3aW5kb3dzIHwgc3VuX2pkayB8IGlibV9qZGsgfCBzb2xhcmlzIHwgYXBwbGUgfCBocF91eCB8IG90aGVyKSogPgorPCFBVFRMSVNUIGRpZmZlcmVuY2VfZWxlbWVudCBwYXJlbnRfbm9kZSBOTVRPS0VOICNJTVBMSUVEID4KKzwhQVRUTElTVCBkaWZmZXJlbmNlX2VsZW1lbnQgbm9kZV9uYW1lIE5NVE9LRU4gI0lNUExJRUQgPgorPCFBVFRMSVNUIGRpZmZlcmVuY2VfZWxlbWVudCBpbmRleCBOTVRPS0VOICNJTVBMSUVEID4KKzwhQVRUTElTVCBkaWZmZXJlbmNlX2VsZW1lbnQgaWQgSUQgI1JFUVVJUkVEID4KKworCisKKzwhRUxFTUVOVCBpY3UgKCNQQ0RBVEEpID4KKzwhQVRUTElTVCBpY3UgY2FzZV9kaWZmIE5NVE9LRU4gI0lNUExJRUQgPgorPCFFTEVNRU5UIGlibV90b3JvbnRvICgjUENEQVRBKSA+Cis8IUFUVExJU1QgaWJtX3Rvcm9udG8gY2FzZV9kaWZmIE5NVE9LRU4gI0lNUExJRUQgPgorPCFFTEVNRU5UIHdpbmRvd3MgKCNQQ0RBVEEpID4KKzwhQVRUTElTVCB3aW5kb3dzIGNhc2VfZGlmZiBOTVRPS0VOICNJTVBMSUVEID4KKzwhRUxFTUVOVCBzdW5famRrICgjUENEQVRBKSA+Cis8IUFUVExJU1Qgc3VuX2pkayBjYXNlX2RpZmYgTk1UT0tFTiAjSU1QTElFRCA+Cis8IUVMRU1FTlQgaWJtX2pkayAoI1BDREFUQSkgPgorPCFBVFRMSVNUIGlibV9qZGsgY2FzZV9kaWZmIE5NVE9LRU4gI0lNUExJRUQgPgorPCFFTEVNRU5UIHNvbGFyaXMgKCNQQ0RBVEEpID4KKzwhQVRUTElTVCBzb2xhcmlzIGNhc2VfZGlmZiBOTVRPS0VOICNJTVBMSUVEID4KKzwhRUxFTUVOVCBhcHBsZSAoI1BDREFUQSkgPgorPCFBVFRMSVNUIGFwcGxlIGNhc2VfZGlmZiBOTVRPS0VOICNJTVBMSUVEID4KKzwhRUxFTUVOVCBocF91eCAoI1BDREFUQSkgPgorPCFBVFRMSVNUIGhwX3V4IGNhc2VfZGlmZiBOTVRPS0VOICNJTVBMSUVEID4KKzwhRUxFTUVOVCBvdGhlciAoI1BDREFUQSkgPgorPCFBVFRMSVNUIG90aGVyIGNhc2VfZGlmZiBOTVRPS0VOICNJTVBMSUVEID4KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC94bWxjb21wYXJhdG9yL1Jlc3VsdFhNTC54bWwgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wveG1sY29tcGFyYXRvci9SZXN1bHRYTUwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YmEzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wveG1sY29tcGFyYXRvci9SZXN1bHRYTUwueG1sCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzwhRE9DVFlQRSBkaWZmZXJlbmNlX3htbCBTWVNURU0gIi4vUmVzdWx0WE1MLmR0ZCIgPgorCis8ZGlmZmVyZW5jZV94bWw+CisgICAgPGRpZmZlcmVuY2VfZWxlbWVudCBwYXJlbnRfbm9kZT0idGVzdCIgbm9kZV9uYW1lPSJ0ZXN0IiBpZD0iMSIgaW5kZXg9InRlc3QiPgorICAgICAgICA8aWN1IGNhc2VfZGlmZj0iZmFsc2UiID4gPC9pY3U+CisgICAgICAgIDxpYm1fdG9yb250byBjYXNlX2RpZmY9ImZhbHNlIj4gPC9pYm1fdG9yb250bz4KKyAgICAgICAgPHdpbmRvd3MgY2FzZV9kaWZmPSJmYWxzZSI+IDwvd2luZG93cz4KKyAgICAgICAgPHN1bl9qZGsgY2FzZV9kaWZmPSJmYWxzZSI+IDwvc3VuX2pkaz4KKyAgICAgICAgPGlibV9qZGsgY2FzZV9kaWZmPSJmYWxzZSI+IDwvaWJtX2pkaz4KKyAgICAgICAgPHNvbGFyaXMgY2FzZV9kaWZmPSJmYWxzZSI+IDwvc29sYXJpcz4KKyAgICAgICAgPGFwcGxlIGNhc2VfZGlmZj0iZmFsc2UiPiA8L2FwcGxlPgorICAgICAgICA8aHBfdXggY2FzZV9kaWZmPSJmYWxzZSI+IDwvaHBfdXg+CisgICAgICAgIDxvdGhlciBjYXNlX2RpZmY9ImZhbHNlIj4gPC9vdGhlcj4KKyAgICA8L2RpZmZlcmVuY2VfZWxlbWVudD4KKzwvZGlmZmVyZW5jZV94bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3htbGNvbXBhcmF0b3IvWE1MQ29tcGFyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL3htbGNvbXBhcmF0b3IvWE1MQ29tcGFyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZGI4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wveG1sY29tcGFyYXRvci9YTUxDb21wYXJhdG9yLmphdmEKQEAgLTAsMCArMSwxMTk3IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC91c3IvY3ZzL2ljdTRqL2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL0J5dGVUcmllLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8wMy8wMiAwMjoyMDowMSAkIAorKiAkUmV2aXNpb246IDEuNSAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wueG1sY29tcGFyYXRvcjsKKworLyoqCisgKiBAYXV0aG9yIHJhbQorICoKKyAqIFRoaXMgdG9vbCBjb21wYXJlcyBsb2NhbGUgZGF0YSBpbiBYTUwgZm9ybWF0IGFuZCBnZW5lcmF0ZXMgSFRNTCBhbmQgWE1MIHJlcG9ydHMKKyAqLworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8vIERPTSBpbXBvcnRzCitpbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7CitpbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OworaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7CisKKy8vIE5lZWRlZCBKQVhQIGNsYXNzZXMKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKKworLy8gU0FYMiBpbXBvcnRzCitpbXBvcnQgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyOworaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplcjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CisKK3B1YmxpYyBjbGFzcyBYTUxDb21wYXJhdG9yIHsKKyAgICBTdHJpbmdbXSBmaWxlTmFtZXM7IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IE9QVF9TVU5fSkRLID0gMHgwMDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX0lCTV9KREsgPSAweDAwMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfV0lORE9XUyA9IDB4MDA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IE9QVF9IUF9VWCAgID0gMHgwMDg7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX1NPTEFSSVMgPSAweDAxMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfSUJNX1RPUiA9IDB4MDIwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IE9QVF9BUFBMRSAgID0gMHgwNDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX0lDVSAgICAgPSAweDA4MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfT1RIRVIgICA9IDB4MTAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IE9QVF9TT1VSQ0UgID0gMHgxMjA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX0RFU1QgICAgPSAweDE0MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBzaG9ydCBPUFRfT1VUMSAgICA9IDB4MTYwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IE9QVF9PVVQyICAgID0gMHgxODA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgT1BUX1VOS05PV04gPSAweDEwMDA7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPU0lYPSAiMCI7LyogTk8gaW5oZXJpdGVuY2Ugb2YgbG9jYWxlIGRhdGEgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVICA9ICIxIjsvKiBTdXBwb3J0cyBpbmhlcml0ZW5jZSBvZiBsb2NhbGUgZGF0YSovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRVJfT1BUSU9OU1tdW10gPSB7CisgICAgICAgIHsiLXN1bl9qZGsiLCAic3VuX2pkayIsSUNVfSwgCisgICAgICAgIHsiLWlibV9qZGsiLCAiaWJtX2pkayIsSUNVfSwKKyAgICAgICAgeyItd2luZG93cyIsICJ3aW5kb3dzIiwgUE9TSVh9LAorICAgICAgICB7Ii1ocF91eCIsICAgImhwX3V4IixQT1NJWCB9LCAKKyAgICAgICAgeyItc29sYXJpcyIsICJzb2xhcmlzIixQT1NJWCB9LAorICAgICAgICB7Ii1pYm1fdG9yIiwgImlibV90b3JvbnRvIixQT1NJWH0sCisgICAgICAgIHsiLWFwcGxlIiwgICAiYXBwbGUiLCBQT1NJWH0sCisgICAgICAgIHsiLWljdSIsICAgICAiaWN1IixJQ1V9LAorICAgICAgICB7Ii1vdGhlciIsICAgIm90aGVyIiwgUE9TSVh9LAorICAgICAgICB7Ii1zIixudWxsLG51bGx9LAorICAgICAgICB7Ii1kIixudWxsLCBudWxsfSwKKyAgICAgICAgeyItb3V0MSIsbnVsbCxudWxsfSwKKyAgICB9OworICAgIAorICAgIEhhc2h0YWJsZSBvcHRpb25UYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBwcml2YXRlIFN0cmluZyBzb3VyY2VGb2xkZXIgPSAiLiI7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdEZvbGRlciA9ICIuIjsKKyAgICBwcml2YXRlIGJvb2xlYW4gb3V0MSA9IGZhbHNlOworICAgIHByaXZhdGUgYm9vbGVhbiBvdXQyID0gZmFsc2U7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CisgICAgICAgIFhNTENvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBYTUxDb21wYXJhdG9yKCk7CisgICAgICAgIGNvbXBhcmF0b3IucHJvY2Vzc0FyZ3MoYXJncyk7ICAgIAorICAgICAgICAKKyAgICB9CisgICAgCisgICAgQXJyYXlMaXN0IGRvZXNOb3RFeGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICBBcnJheUxpc3Qgbm90QXZhaWxhYmxlID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgCisgICAgLyoKKyAgICAgKiBUaGlzIGFwcGxpY2F0aW9uIHdpbGwgY29tcGFyZSBkaWZmZXJlbnQgbG9jYWxlIGRhdGEgeG1sIGZpbGVzCisgICAgICogY29uZm9ybWluZyB0byBsb2NhbGVFbGVtZW50cy5kdGQgYW5kIHByb2R1Y2VzIGFuIHhtbCBmaWxlIGZpbGUKKyAgICAgKiBpbiB0aGUgZm9ybWF0CisgICAgICovIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgRG9jdW1lbnQgcmVzdWx0RG9jdW1lbnQ7CisgICAgU3RyaW5nIGxvY2FsZVN0cjsgICAgCisgICAgTG9jYWxlIGxvY2FsZTsKKyAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICAgICAgICAgICAKKyAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc0FyZ3MoU3RyaW5nW10gYXJncyl7CisgICAgICAgIHNob3J0IG9wdGlvbnMgPSBpZGVudGlmeU9wdGlvbnMoYXJncyk7CisgICAgICAgIGlmICgoYXJncy5sZW5ndGggPCAyKSB8fCAoKG9wdGlvbnMgJiBPUFRfVU5LTk9XTikgIT0gMCkpIHsKKyAgICAgICAgICAgIHByaW50VXNhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBib29sZWFuIHdhcm5pbmdbXSA9IG5ldyBib29sZWFuWzFdOworICAgICAgICB3YXJuaW5nWzBdID0gZmFsc2U7CisgICAgICAgIEVudW1lcmF0aW9uIGVudW0gPSBvcHRpb25UYWJsZS5rZXlzKCk7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0RG9jdW1lbnQgPSBwYXJzZShzb3VyY2VGb2xkZXIrRmlsZS5zZXBhcmF0b3IrIlJlc3VsdFhNTC54bWwiKTsKKyAgICAgICAgICAgIAorCSAgICAgICAgbG9jYWxlU3RyICA9IGdvbGRGaWxlTmFtZS5zdWJzdHJpbmcoZ29sZEZpbGVOYW1lLmxhc3RJbmRleE9mKEZpbGUuc2VwYXJhdG9yQ2hhcikrMSxnb2xkRmlsZU5hbWUuaW5kZXhPZignLicpKTsKKwkgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUobG9jYWxlU3RyLnN1YnN0cmluZygwLGxvY2FsZVN0ci5pbmRleE9mKCdfJykpLGxvY2FsZVN0ci5zdWJzdHJpbmcobG9jYWxlU3RyLmluZGV4T2YoJ18nKSsxLGxvY2FsZVN0ci5sZW5ndGgoKSkpOworICAgICAgICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIG9zMSA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0oZGVzdEZvbGRlcitGaWxlLnNlcGFyYXRvcitsb2NhbGUrIi54bWwiKSxlbmNvZGluZyk7CisJICAgICAgICBPdXRwdXRTdHJlYW1Xcml0ZXIgb3MyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0Rm9sZGVyK0ZpbGUuc2VwYXJhdG9yK2xvY2FsZSsiLmh0bWwiKSxlbmNvZGluZyk7CisJICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IoO2VudW0uaGFzTW9yZUVsZW1lbnRzKCk7KXsKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZyllbnVtLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gKFN0cmluZykgb3B0aW9uVGFibGUuZ2V0KGtleSk7CisgICAgICAgICAgICAgICAgY29tcGFyZShnb2xkRmlsZU5hbWUsZ29sZEtleSwgZmlsZU5hbWUsa2V5LG91dDEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAKKwkKKyAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPWRvZXNOb3RFeGlzdC5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpeworICAgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpaXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICBOb2RlTGlzdCBsaXN0ID0gcmVzdWx0RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoa2V5KTsKKyAgICAgICAgICAgICAgICAgIGFkZE5vZGVWYWx1ZShsaXN0LGtleSwiUy5OLkEiLG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm90QXZhaWxhYmxlLmFkZCgic29sYXJpcyIpOworICAgICAgICAgICAgbm90QXZhaWxhYmxlLmFkZCgiYXBwbGUiKTsKKyAgICAgICAgICAgIG5vdEF2YWlsYWJsZS5hZGQoIm90aGVyIik7CisgICAgICAgICAgICBub3RBdmFpbGFibGUuYWRkKCJvcGVuX29mZmljZSIpOworICAgICAgICAgICAgaXRlciA9bm90QXZhaWxhYmxlLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSl7CisgICAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylpdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgIE5vZGVMaXN0IGxpc3QgPSByZXN1bHREb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShrZXkpOworICAgICAgICAgICAgICAgICAgYWRkTm9kZVZhbHVlKGxpc3Qsa2V5LCJTLk4uQSIsbnVsbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlcjEgPSBuZXcgUHJpbnRXcml0ZXIob3MxKTsKKyAgICAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlcjIgPSBuZXcgUHJpbnRXcml0ZXIob3MyKTsKKyAgICAgICAgICAgIHByaW50KHdyaXRlcjEscmVzdWx0RG9jdW1lbnQpOworICAgICAgICAgICAgaWYob3V0MSl7CisgICAgICAgICAgICAgICAgcHJpbnRIVE1MXzEod3JpdGVyMik7CisgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICBwcmludEhUTUwod3JpdGVyMik7CisgICAgICAgICAgICB9CisgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHByaW50VXNhZ2UoKSB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IFhNTENvbXBhcmF0b3IgWzxvcHRpb24+Ojxnb2xkPl0gZmlsZW5hbWUxIFtvcHRpb25dIGZpbGVuYW1lMiAuLi4gXG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBYTUxDb21wYXJhdG9yIFstc3VuX2pkazpnb2xkXSAgZmlsZW5hbWUiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgWy1pYm1famRrXSBmaWxlbmFtZSBbLXdpbmRvd3NdIGZpbGVuYW1lIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFstaHBfdXhdICBmaWxlbmFtZSBbLXNvbGFyaXNdIGZpbGVuYW1lIiAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBbLWlibV90b3JdIGZpbGVuYW1lIFstYXBwbGVdIGZpbGVuYW1lIiAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgWy1pY3VdIGZpbGVuYW1lIFstb3RoZXJdIGZpbGVuYW1lIiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBwcml2YXRlIFN0cmluZyBnb2xkRmlsZU5hbWU7IAorICAgIHByaXZhdGUgU3RyaW5nIGdvbGRLZXk7CisKKyAgICBwcml2YXRlIHNob3J0IGlkZW50aWZ5T3B0aW9ucyhTdHJpbmdbXSBvcHRpb25zKSB7CisgICAgICAgIHNob3J0IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgb3B0aW9ucy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgU3RyaW5nIG9wdGlvbiA9IG9wdGlvbnNbal07CisgICAgICAgICAgICBib29sZWFuIGlzR29sZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG9wdGlvbi5zdGFydHNXaXRoKCItIikpIHsKKyAgICAgICAgICAgICAgICBpZihvcHRpb24uaW5kZXhPZigiOmdvbGQiKT4wKXsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uLnN1YnN0cmluZygwLG9wdGlvbi5pbmRleE9mKCI6IikpOworICAgICAgICAgICAgICAgICAgICBpc0dvbGQgPSB0cnVlOyAgICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbGVhbiBvcHRpb25SZWNvZ25pemVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChzaG9ydCBpID0gMDsgaSA8IFVTRVJfT1BUSU9OUy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoVVNFUl9PUFRJT05TW2ldWzBdLmVxdWFscyhvcHRpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gKHNob3J0KSgxIDw8IGkpOworICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uUmVjb2duaXplZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihpPT05KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXIgPSBvcHRpb25zWysral07CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihpPT0xMCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvbGRlciA9IG9wdGlvbnNbKytqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGk9PTExKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQxPXRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaXNHb2xkKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVGFibGUucHV0KFVTRVJfT1BUSU9OU1tpXVsxXSxvcHRpb25zWysral0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2xkRmlsZU5hbWUgPSBvcHRpb25zWysral07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvbGRLZXkgICAgICA9IFVTRVJfT1BUSU9OU1tpXVsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW9wdGlvblJlY29nbml6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IE9QVF9VTktOT1dOOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgICBwcmludEhUTUwoUHJpbnRXcml0ZXIgd3JpdGVyKXsKKyAgICAgICAgTm9kZUxpc3QgbGlzdD0gcmVzdWx0RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpZmZlcmVuY2VfZWxlbWVudCIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPGh0bWw+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8aGVhZD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDx0aXRsZT4iK2xvY2FsZSsiPC90aXRsZT5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDwvaGVhZD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxib2R5PlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDxwPjxiPiIrbG9jYWxlKyI8L2I+PC9wPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDx0YWJsZSBib3JkZXI9XCIxXCIgY2VsbHNwYWNpbmc9XCIwXCI+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIDx0cj5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx0aD5QYXJlbnROb2RlPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx0aD5JRDwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+SUNVIDIuMTwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+SUJNIFRvcm9udG88L3RoPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHRoPldpbmRvd3MgMjAwMDwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+U3VuIEpESyAxLjM8L3RoPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHRoPklCTSBKREsgMS4zPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx0aD5Tb2xhcmlzPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx0aD5BcHBsZTwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+SFBVWCAxMTwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+T3BlbiBPZmZpY2U8L3RoPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHRoPk90aGVyPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgPC90cj5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGZvcihpbnQgaSA9MDsgaTxsaXN0LmdldExlbmd0aCgpO2krKyl7CisgICAgICAgICAgICAgTm9kZSBkaWZmRWxlbSA9IGxpc3QuaXRlbShpKTsKKyAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiICAgICAgICAgICAgPHRyPlxuIik7CisgICAgICAgICAgICAgTmFtZWROb2RlTWFwIGF0dHJiID0gZGlmZkVsZW0uZ2V0QXR0cmlidXRlcygpOworICAgICAgICAgICAgIGlmKGF0dHJiLml0ZW0oMCkuZ2V0Tm9kZVZhbHVlKCkuZXF1YWxzKCJ0ZXN0IikpIGNvbnRpbnVlOworICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgICAgICAgICAgICAgICAgPHRkPiIgKyBhdHRyYi5pdGVtKDApLmdldE5vZGVWYWx1ZSgpKyI8L3RkPiIpOworICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgICAgICAgICAgICAgICAgPHRkPiIgKyBhdHRyYi5pdGVtKDEpLmdldE5vZGVWYWx1ZSgpKyI8L3RkPiIpOworICAgICAgICAgICAgIC8vYXR0cmlidXRlIDIgaXMgaWdub3JlZAorICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgICAgICAgICAgICAgICAgPHRkPiIgKyBhdHRyYi5pdGVtKDMpLmdldE5vZGVWYWx1ZSgpKyI8L3RkPiIpOworICAgICAgICAgICAgIAorICAgICAgICAgICAgIE5vZGVMaXN0IGNoaWxkTGlzdCA9IGRpZmZFbGVtLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICBmb3IoaW50IGo9MDsgajxjaGlsZExpc3QuZ2V0TGVuZ3RoKCk7aisrKXsKKyAgICAgICAgICAgICAgICAgTm9kZSBjdXJyZW50ID0gY2hpbGRMaXN0Lml0ZW0oaik7CisgICAgICAgICAgICAgICAgIGlmKGN1cnJlbnQhPW51bGwgJiYgY3VycmVudC5nZXROb2RlVHlwZSgpPT1Ob2RlLkVMRU1FTlRfTk9ERSl7CisgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudC5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gY3VycmVudC5nZXRGaXJzdENoaWxkKCkuZ2V0Tm9kZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYodmFsPT1udWxsIHx8ICh2YWw9dHJpbSh2YWwpKS5lcXVhbHMoIiIpKSB2YWw9IiZuYnNwOyI7CisgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgICAgICAgICAgICAgICA8dGQ+Iit2YWwrIjwvdGQ+Iik7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9ICAgICAgIAorCisgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgICAgICAgICAgICA8L3RyPlxuIik7CisgICAgICAgIH0gICAKKyAgICAgICAgd3JpdGVyLnByaW50bG4oICIgICAgICAgIDwvdGFibGU+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPC9ib2R5PlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIpOworICAgICAgICB3cml0ZXIuZmx1c2goKTsKKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkICAgcHJpbnRIVE1MXzEoUHJpbnRXcml0ZXIgd3JpdGVyKXsKKyAgICAgICAgTm9kZUxpc3QgbGlzdD0gcmVzdWx0RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpZmZlcmVuY2VfZWxlbWVudCIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPGh0bWw+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8aGVhZD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDx0aXRsZT4iK2xvY2FsZVN0cisiPC90aXRsZT5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDwvaGVhZD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxib2R5PlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIDxwPjxiPiIrbG9jYWxlU3RyKyIoIitsb2NhbGUuZ2V0RGlzcGxheUxhbmd1YWdlKCkrIl8iK2xvY2FsZS5nZXREaXNwbGF5Q291bnRyeSgpKyIpPC9iPjwvcD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICA8dGFibGUgYm9yZGVyPVwiMVwiIGNlbGxzcGFjaW5nPVwiMFwiPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICA8dHI+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+UGFyZW50Tm9kZTwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+SUQ8L3RoPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHRoPklDVSAyLjE8L3RoPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHRoPklCTSBUb3JvbnRvPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx0aD5XaW5kb3dzIDIwMDA8L3RoPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHRoPlN1biBKREsgMS4zPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx0aD5JQk0gSkRLIDEuMzwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+U29sYXJpczwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8dGg+QXBwbGU8L3RoPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHRoPkhQVVggMTE8L3RoPlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHRoPk9wZW4gT2ZmaWNlPC90aD5cbiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx0aD5PdGhlcjwvdGg+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIDwvdHI+XG4iKTsKKyAgICAgICAgCisgICAgICAgIEhhc2h0YWJsZSBjb2xvckhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIGNvbG9ySGFzaC5wdXQoImljdSIsIiNEM0QzRDMiKTsgICAgICAgIAorICAgICAgICBjb2xvckhhc2gucHV0KCJpYm1fdG9yb250byIsIiNGRjc3NzciKTsKKyAgICAgICAgY29sb3JIYXNoLnB1dCgid2luZG93cyIsIiM5OEZCOTgiKTsKKyAgICAgICAgY29sb3JIYXNoLnB1dCgic3VuX2pkayIsIiNERERERkYiKTsKKyAgICAgICAgY29sb3JIYXNoLnB1dCgiaWJtX2pkayIsIiNGRkJCQkIiKTsKKyAgICAgICAgY29sb3JIYXNoLnB1dCgiaHBfdXgiLCIjRkZFNEI1Iik7CisgICAgICAgIGNvbG9ySGFzaC5wdXQoImFwcGxlIiwiI0ZGQkJCQiIpOworICAgICAgICBjb2xvckhhc2gucHV0KCJzb2xhcmlzIiwiI0UwRkZGRiIpOworICAgICAgICBjb2xvckhhc2gucHV0KCJvdGhlciIsIiNDQ0NDRkYiKTsKKyAgICAgICAgYm9vbGVhbiBoYXNEYXRhID1mYWxzZTsgICAgICAgICAgCisgICAgICAgIGZvcihpbnQgaSA9MDsgaTxsaXN0LmdldExlbmd0aCgpO2krKyl7CisgICAgICAgICAgICAgTm9kZSBkaWZmRWxlbSA9IGxpc3QuaXRlbShpKTsKKyAgICAgICAgICAgICBOYW1lZE5vZGVNYXAgYXR0cmIgPSBkaWZmRWxlbS5nZXRBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICBpZihhdHRyYi5pdGVtKDApLmdldE5vZGVWYWx1ZSgpLmVxdWFscygidGVzdCIpIHx8IGF0dHJiLml0ZW0oMCkuZ2V0Tm9kZVZhbHVlKCkuZXF1YWxzKCJpZGVudGl0eSIpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiICAgICAgICAgICAgPHRyPlxuIik7CisgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgICAgICAgICAgICAgICA8dGQ+IiArIGF0dHJiLml0ZW0oMCkuZ2V0Tm9kZVZhbHVlKCkrIjwvdGQ+Iik7CisgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgICAgICAgICAgICAgICA8dGQ+IiArIGF0dHJiLml0ZW0oMSkuZ2V0Tm9kZVZhbHVlKCkrIjwvdGQ+Iik7CisgICAgICAgICAgICAgLy9hdHRyaWJ1dGUgMiBpcyBpZ25vcmVkCisgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgICAgICAgICAgICAgICA8dGQ+IiArIGF0dHJiLml0ZW0oMykuZ2V0Tm9kZVZhbHVlKCkrIjwvdGQ+Iik7CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgTm9kZUxpc3QgY2hpbGRMaXN0ID0gZGlmZkVsZW0uZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgIGZvcihpbnQgaj0wOyBqPGNoaWxkTGlzdC5nZXRMZW5ndGgoKTtqKyspeworICAgICAgICAgICAgICAgICBOb2RlIGN1cnJlbnQgPSBjaGlsZExpc3QuaXRlbShqKTsKKyAgICAgICAgICAgICAgICAgaWYoY3VycmVudCE9bnVsbCAmJiBjdXJyZW50LmdldE5vZGVUeXBlKCk9PU5vZGUuRUxFTUVOVF9OT0RFKXsKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50LmdldE5vZGVOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSBjdXJyZW50LmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZih2YWw9PW51bGwgfHwgKHZhbD10cmltKHZhbCkpLmVxdWFscygiIikpIHZhbD0iJm5ic3A7IjsKKyAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29sb3I9IiNGRkZGRkYiOworICAgICAgICAgICAgICAgICAgICAgIGlmKCF2YWwuZXF1YWxzKCJTLk4uQSIpICYmICF2YWwuZXF1YWxzKCImbmJzcDsiKSl7CisJICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaz0wOyBrPGNoaWxkTGlzdC5nZXRMZW5ndGgoKTtrKyspeworCSAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlIG4gPSBjaGlsZExpc3QuaXRlbShrKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgaWYobiE9bnVsbCAmJiBuLmdldE5vZGVUeXBlKCk9PU5vZGUuRUxFTUVOVF9OT0RFKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5WYWwgPW4uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy1pYm1famRrIGM6XE5MVENcSUJNSkRLXFhNTFxjc19DWi54bWwgLXN1bl9qZGsgYzpcTkxUQ1xKYXZhXHhtbFxjc19DWi54bWwgLXdpbmRvd3MgYzpcTkxUQ1x3aW5kb3dzXHhtbFxjc19DWi54bWwgLWhwX3V4IGM6XE5MVENcaHBceG1sXGNzX0NaLnhtbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICghblZhbC5lcXVhbHMoIlMuTi5BIikmJiAhdmFsLmVxdWFscygiJm5ic3A7IikpJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwuZXF1YWxzKG5WYWwpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhdHRyYi5pdGVtKDEpLmdldE5vZGVWYWx1ZSgpLmVxdWFscygicGF0dGVybiIpKSYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZVBhdHRlcm5zKHZhbCxuVmFsKSl8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYXR0cmIuaXRlbSgwKS5nZXROb2RlVmFsdWUoKS5lcXVhbHMoInBhdHRlcm5zIikpJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlUGF0dGVybnModmFsLG5WYWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl7IAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IChTdHJpbmcpY29sb3JIYXNoLmdldChuLmdldE5vZGVOYW1lKCkpOworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RyIT1udWxsKXsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1zdHI7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBpZighdmFsLmVxdWFscygiUy5OLkEiKSl7CisJICAgICAgICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCBhdHRMaXN0ID0gY3VycmVudC5nZXRBdHRyaWJ1dGVzKCk7CisJICAgICAgICAgICAgICAgICAgICAgIGlmKGF0dExpc3QuZ2V0TmFtZWRJdGVtKCJjYXNlX2RpZmYiKS5nZXROb2RlVmFsdWUoKS5lcXVhbHMoImZhbHNlIikpeworCSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9Iitjb2xvcisiPiIrdmFsKyI8L3RkPiIpOworCSAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKwkgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIrY29sb3IrIj4iKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGZvbnQgY29sb3I9I0E1MkEyQT4gKGNhc2UgZGlmZmVyZW5jZSBvbmx5KTwvZm9udD4iKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L3RkPiIpOworCSAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgIGhhc0RhdGE9dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9ICAgICAgIAorCisgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCIgICAgICAgICAgICA8L3RyPlxuIik7CisgICAgICAgIH0KKyAgCisgICAgICAgIHdyaXRlci5wcmludGxuKCAiICAgICAgICA8L3RhYmxlPlxuIik7CisgICAgICAgIAorICAgICAgICBpZighaGFzRGF0YSl7CisgICAgICAgICAgICB3cml0ZXIucHJpbnRsbiggIiAgICAgICA8cD48Zm9udCBzaXplPTE2IGNvbG9yPSNGRjAwMDA+IERhdGEgZXhpc3RzIG9ubHkgaW4gSUNVIDwvZm9udD48L3A+XG4iKTsKKyAgICAgICAgfSAKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgICAgICAgPHA+Q3JlYXRlZCBvbjogIiArIGNhbC5nZXRUaW1lKCkgKyI8L3A+XG4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPC9ib2R5PlxuIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIpOworICAgICAgICB3cml0ZXIuZmx1c2goKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENvbXBhcmUgdHdvIGZpbGVzIGJ5IHBhcnNpbmcgaW50byBET01zIGFuZCBjb21wYXJpbmcgdHJlZXMuCisgICAgICogQHBhcmFtIGdvbGRGaWxlTmFtZSBleHBlY3RlZCBmaWxlCisgICAgICogQHBhcmFtIHRlc3RGaWxlTmFtZSBhY3R1YWwgZmlsZQorICAgICAqIEBwYXJhbSByZXBvcnRlciBQcmludFdyaXRlciB0byBkdW1wIHN0YXR1cyBpbmZvIHRvCisgICAgICogQHBhcmFtIGFycmF5IG9mIHdhcm5pbmcgZmxhZ3MgKGZvciB3aGl0ZXNwYWNlIGRpZmZzLCBJIHRoaW5rPykKKyAgICAgKiBORUVEU0RPQyBAcGFyYW0gd2FybmluZworICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIHRvIGF0dGVtcHQgdG8gc2V0IG9udG8gcGFyc2VycworICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGV5IG1hdGNoLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwcml2YXRlIERvY3VtZW50IGdvbGREb2M9bnVsbDsKKyAgICAKKyAgICBwdWJsaWMgRG9jdW1lbnQgZ2V0RnVsbHlSZXNvbHZlZExvY2FsZShTdHJpbmcgbG9jYWxlTmFtZSxTdHJpbmcgZmlsZU5hbWUpeworICAgICAgICAvLyBoZXJlIHdlIGFzc3VtZSB0aGF0ICJfIiBpcyB0aGUgZGVsaW1pdGVyCisgICAgICAgIERvY3VtZW50IGRvYyA9IHBhcnNlKGxvY2FsZU5hbWUpOworICAgICAgICBTdHJpbmcgdGVtcCA9IGxvY2FsZU5hbWU7ICAgIAorCQlpZigodGVtcC5pbmRleE9mKCJpY3UiKT49MCApIHx8ICh0ZW1wLmluZGV4T2YoImpkayIpPj0wKSl7CisJCSAgICAvLyBPSyB3ZSBoYXZlIGEgcG9zaXggc3R5bGUgbG9jYWxlIGRhdGEKKwkJICAgIC8vIG1lcmdlIGFsbCBkYXRhIGluIGluaGVyaXRlbmNlIHRyZWUgaW50byBnb2xkRG9jCisJCSAgICBpbnQgaW5kZXggPSAtMTsKKwkJICAgIHdoaWxlKChpbmRleCA9IHRlbXAuaW5kZXhPZigiXyIpKSA+MCAmJiBpbmRleCA+IGZpbGVOYW1lLmxhc3RJbmRleE9mKCJcXCIpKXsKKwkJICAgICAgICBEb2N1bWVudCBwYXJlbnREb2MgPSBwYXJzZSgodGVtcCA9IHRlbXAuc3Vic3RyaW5nKDAsaW5kZXgpKyIueG1sIikpOworCQkgICAgICAgIGlmKHBhcmVudERvYyE9bnVsbCl7CisJCSAgICAgICAgICAgbWVyZ2VFbGVtZW50cyhkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkscGFyZW50RG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKKwkJICAgICAgICB9CisJCSAgICB9CisJCX0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyByb290RmlsZU5hbWU9IiIgOworICAgICAgICBpZihmaWxlTmFtZS5sYXN0SW5kZXhPZihGaWxlLnBhdGhTZXBhcmF0b3JDaGFyKSE9LTEpeworICAgICAgICAgICAgcm9vdEZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsZmlsZU5hbWUubGFzdEluZGV4T2YoRmlsZS5wYXRoU2VwYXJhdG9yQ2hhcikrMSk7CisgICAgICAgIH0KKyAgICAgICAgcm9vdEZpbGVOYW1lID0gcm9vdEZpbGVOYW1lKyJyb290LnhtbCI7ICAgICAgICAKKwkJRG9jdW1lbnQgcm9vdERvYyA9IHBhcnNlKHJvb3RGaWxlTmFtZSk7CisKKwkJbWVyZ2VFbGVtZW50cyhkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkscm9vdERvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7CisgICAgICAgIHJldHVybiBkb2M7CisgICAgfQorICAgIHB1YmxpYyBib29sZWFuIGNvbXBhcmUoU3RyaW5nIGdvbGRGaWxlTmFtZSwgU3RyaW5nIGdvbGRLZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3RGaWxlTmFtZSwgU3RyaW5nIHRlc3RLZXksIGJvb2xlYW4gbWVyZ2VEYXRhKQorICAgIHsKKyAgICAgICAgCisgICAgICAgIC8vIHBhcnNlIHRoZSBnb2xkIGRvYyBvbmx5IGlmIGl0IGlzIG51bGwKKyAgICAgICAgaWYoZ29sZERvYz09bnVsbCl7CisgICAgICAgICAgICBnb2xkRG9jID0gZ2V0RnVsbHlSZXNvbHZlZExvY2FsZShnb2xkS2V5LGdvbGRGaWxlTmFtZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBwYXJzZSB0aGUgdGVzdCBkb2Mgb25seSBpZiBnb2xkIGRvYyB3YXMgcGFyc2VkIE9LCisgICAgICAgIAorICAgICAgICBEb2N1bWVudCB0ZXN0RG9jID0gbnVsbDsKKyAgICAgICAgaWYoZ29sZERvYyE9bnVsbCkKKyAgICAgICAgIHRlc3REb2MgPSBnZXRGdWxseVJlc29sdmVkTG9jYWxlKHRlc3RLZXksdGVzdEZpbGVOYW1lKTsKKyAgICAgICAgaWYgKG51bGwgPT0gZ29sZERvYykKKyAgICAgICAgeworICAgICAgICAgICAgZG9lc05vdEV4aXN0LmFkZChnb2xkS2V5KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChudWxsID09IHRlc3REb2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvZXNOb3RFeGlzdC5hZGQodGVzdEtleSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYobWVyZ2VEYXRhKXsKKyAgICAgICAgICAgIHJldHVybiBleHRyYWN0TWVyZ2VEYXRhKGdvbGREb2MsZ29sZEtleSx0ZXN0RG9jLHRlc3RLZXkpOworICAgICAgICB9ZWxzZXsgICAKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlRWxlbWVudHNBbmREYXRhKGdvbGREb2MsZ29sZEtleSx0ZXN0RG9jLHRlc3RLZXkpOworICAgICAgICB9CisgICAgfQorICAgIGJvb2xlYW4gY2Fub25pY2FsICA9IGZhbHNlOworICAgIAorICAgIFN0cmluZyAgZW5jb2RpbmcgICA9ICJVVEYtOCI7IC8vIGRlZmF1bHQgZW5jb2RpbmcKKyAgICAKKyAgICAvKiogUmV0dXJucyBhIHNvcnRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMuICovCisgICAgcHJvdGVjdGVkIEF0dHJbXSBzb3J0QXR0cmlidXRlcyhOYW1lZE5vZGVNYXAgYXR0cnMpIHsKKworICAgICAgICBpbnQgbGVuID0gKGF0dHJzICE9IG51bGwpID8gYXR0cnMuZ2V0TGVuZ3RoKCkgOiAwOworICAgICAgICBBdHRyIGFycmF5W10gPSBuZXcgQXR0cltsZW5dOworICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgIGFycmF5W2ldID0gKEF0dHIpYXR0cnMuaXRlbShpKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSAgPSBhcnJheVtpXS5nZXROb2RlTmFtZSgpOworICAgICAgICAgICAgaW50ICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAgIGZvciAoIGludCBqID0gaSArIDE7IGogPCBsZW47IGorKyApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VyTmFtZSA9IGFycmF5W2pdLmdldE5vZGVOYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKCBjdXJOYW1lLmNvbXBhcmVUbyhuYW1lKSA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgID0gY3VyTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBqOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggaW5kZXggIT0gaSApIHsKKyAgICAgICAgICAgICAgICBBdHRyIHRlbXAgICAgPSBhcnJheVtpXTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSAgICAgPSBhcnJheVtpbmRleF07CisgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybihhcnJheSk7CisKKyAgICB9IC8vIHNvcnRBdHRyaWJ1dGVzKE5hbWVkTm9kZU1hcCk6QXR0cltdCisgICAgCisgICAgICAgIC8qKiBOb3JtYWxpemVzIHRoZSBnaXZlbiBzdHJpbmcuICovCisgICAgcHJvdGVjdGVkIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHMpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHN0ciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgICAgICBpbnQgbGVuID0gKHMgIT0gbnVsbCkgPyBzLmxlbmd0aCgpIDogMDsKKyAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICBjaGFyIGNoID0gcy5jaGFyQXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKCBjaCApIHsKKyAgICAgICAgICAgIGNhc2UgJzwnOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ci5hcHBlbmQoIiZsdDsiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAnPic6IHsKKyAgICAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZCgiJmd0OyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlICcmJzogeworICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCImYW1wOyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlICciJzogeworICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCImcXVvdDsiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAnXCcnOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ci5hcHBlbmQoIiZhcG9zOyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlICdccic6CisgICAgICAgICAgICBjYXNlICdcbic6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYW5vbmljYWwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCImIyIpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZChJbnRlZ2VyLnRvU3RyaW5nKGNoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCc7Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBlbHNlLCBkZWZhdWx0IGFwcGVuZCBjaGFyCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oc3RyLnRvU3RyaW5nKCkpOworCisgICAgfSAvLyBub3JtYWxpemUoU3RyaW5nKTpTdHJpbmcKKworCisgICAgLyoqIFByaW50cyB0aGUgc3BlY2lmaWVkIG5vZGUsIHJlY3Vyc2l2ZWx5LiAqLworICAgIHB1YmxpYyB2b2lkIHByaW50KFByaW50V3JpdGVyIG91dCwgTm9kZSBub2RlKSB7CisKKyAgICAgICAgLy8gaXMgdGhlcmUgYW55dGhpbmcgdG8gZG8/CisgICAgICAgIGlmICggbm9kZSA9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IHR5cGUgPSBub2RlLmdldE5vZGVUeXBlKCk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKCB0eXBlICkgeworICAgICAgICAvLyBwcmludCBkb2N1bWVudAorICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfTk9ERTogeworICAgICAgICAgICAgICAgaWYgKCAhY2Fub25pY2FsICkgeworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgKyAiXCI/PiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL3ByaW50KCgoRG9jdW1lbnQpbm9kZSkuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOworCisgICAgICAgICAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaUNoaWxkID0gMDsgaUNoaWxkIDwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGlDaGlsZCsrICkgeworICAgICAgICAgICAgICAgICAgICBwcmludChvdXQsY2hpbGRyZW4uaXRlbShpQ2hpbGQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHByaW50IGVsZW1lbnQgd2l0aCBhdHRyaWJ1dGVzCisgICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoJzwnKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQobm9kZS5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBBdHRyIGF0dHJzW10gPSBzb3J0QXR0cmlidXRlcyhub2RlLmdldEF0dHJpYnV0ZXMoKSk7CisgICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIEF0dHIgYXR0ciA9IGF0dHJzW2ldOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoJyAnKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KGF0dHIuZ2V0Tm9kZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiPVwiIik7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludChub3JtYWxpemUoYXR0ci5nZXROb2RlVmFsdWUoKSkpOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoJyInKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCc+Jyk7CisgICAgICAgICAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAoIGNoaWxkcmVuICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBjaGlsZHJlbi5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChvdXQsY2hpbGRyZW4uaXRlbShpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGhhbmRsZSBlbnRpdHkgcmVmZXJlbmNlIG5vZGVzCisgICAgICAgIGNhc2UgTm9kZS5FTlRJVFlfUkVGRVJFTkNFX05PREU6IHsKKyAgICAgICAgICAgICAgICBpZiAoIGNhbm9uaWNhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjaGlsZHJlbiAhPSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IGNoaWxkcmVuLmdldExlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQob3V0LGNoaWxkcmVuLml0ZW0oaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCcmJyk7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludChub2RlLmdldE5vZGVOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoJzsnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHByaW50IGNkYXRhIHNlY3Rpb25zCisgICAgICAgIGNhc2UgTm9kZS5DREFUQV9TRUNUSU9OX05PREU6IHsKKyAgICAgICAgICAgICAgICBpZiAoIGNhbm9uaWNhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KG5vcm1hbGl6ZShub2RlLmdldE5vZGVWYWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCI8IVtDREFUQVsiKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KG5vZGUuZ2V0Tm9kZVZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIl1dPiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gcHJpbnQgdGV4dAorICAgICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KG5vcm1hbGl6ZShub2RlLmdldE5vZGVWYWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHByaW50IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KKyAgICAgICAgY2FzZSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTogeworICAgICAgICAgICAgICAgIG91dC5wcmludCgiPD8iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQobm9kZS5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YSA9IG5vZGUuZ2V0Tm9kZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKCBkYXRhICE9IG51bGwgJiYgZGF0YS5sZW5ndGgoKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgnICcpOworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI/PiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0eXBlID09IE5vZGUuRUxFTUVOVF9OT0RFICkgeworICAgICAgICAgICAgb3V0LnByaW50KCI8LyIpOworICAgICAgICAgICAgb3V0LnByaW50KG5vZGUuZ2V0Tm9kZU5hbWUoKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoJz4nKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dC5mbHVzaCgpOworICAgIH0gLy8gcHJpbnQoTm9kZSkKKyAgICAKKyAgICAvLyBSZXBvcnRlciBmb3JtYXQ6CisgICAgLy8gUkVBU09OX0NPTlNUQU5UO2dvbGQgdmFsO3Rlc3QgdmFsO3JlYXNvbiBkZXNjcmlwdGlvbgorICAgIHByaXZhdGUgdm9pZCBhZGROb2RlVmFsdWUoTm9kZUxpc3QgbGlzdCxTdHJpbmcgbm9kZU5hbWUsU3RyaW5nIG5vZGVWYWx1ZSxTdHJpbmcgY2FzZURpZmYpeworICAgICAgICBmb3IoaW50IGk9MDtpPGxpc3QuZ2V0TGVuZ3RoKCk7aSsrKXsKKyAgICAgICAgICAgIE5vZGUgbm9kZSA9IGxpc3QuaXRlbShpKTsKKyAgICAgICAgICAgIGlmKG5vZGVOYW1lLmVxdWFscyhub2RlLmdldE5vZGVOYW1lKCkpKXsgICAKKyAgICAgICAgICAgICAgICBub2RlLmdldEZpcnN0Q2hpbGQoKS5zZXROb2RlVmFsdWUobm9kZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZihjYXNlRGlmZiE9bnVsbCl7CisJICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCBhdHRyID0gbm9kZS5nZXRBdHRyaWJ1dGVzKCk7CisJICAgICAgICAgICAgICAgIE5vZGUgY2FzZV9kaWZmID0gYXR0ci5nZXROYW1lZEl0ZW0oImNhc2VfZGlmZiIpOworCSAgICAgICAgICAgICAgICBjYXNlX2RpZmYuc2V0Tm9kZVZhbHVlKGNhc2VEaWZmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkIGFkZEVsZW1lbnQoU3RyaW5nIHBhcmVudE5vZGUsIFN0cmluZyBjaGlsZE5vZGUsIFN0cmluZyBhdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBub2RlTmFtZTEsICBTdHJpbmcgdmFsdWUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBub2RlTmFtZTIsIFN0cmluZyB2YWx1ZTIpeworICAgICAgICAgICAgU3RyaW5nIGlkIDsKKyAgICAgICAgICAgIFN0cmluZyBjYXNlRGlmZj1udWxsOworICAgICAgICAgICAgaWYoTm9ybWFsaXplci5jb21wYXJlKHZhbHVlMSx2YWx1ZTIsMCkhPTApeworICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJWYWx1ZTE6ICIrdmFsdWUxKyAiICBWYWx1ZTI6ICIrIHZhbHVlMik7CisJICAgICAgICAgICAgaWYoTm9ybWFsaXplci5jb21wYXJlKHZhbHVlMSx2YWx1ZTIsTm9ybWFsaXplci5DT01QQVJFX0lHTk9SRV9DQVNFKT09MCl7CisJICAgICAgICAgICAgICAgIGNhc2VEaWZmPSJ0cnVlIjsKKwkgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihhdHRyIT1udWxsKXsKKyAgICAgICAgICAgICAgICBpZCA9IHBhcmVudE5vZGUrIl8iK2NoaWxkTm9kZSsiXyIrYXR0cjsKKyAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgIGlkID0gcGFyZW50Tm9kZSsiXyIrY2hpbGROb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gcmVzdWx0RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgTm9kZUxpc3Qgbm9kZXM9bnVsbDsKKyAgICAgICAgICAgIE5hbWVkTm9kZU1hcCBhdHRyaWJNYXA9bnVsbDsKKyAgICAgICAgICAgIE5vZGUgcm9vdE5vZGUgPXJlc3VsdERvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaWZmZXJlbmNlX3htbCIpLml0ZW0oMCk7CisgICAgICAgICAgICBpZihlbGVtZW50IT1udWxsKXsKKyAgICAgICAgICAgICAgICBub2RlcyA9IGVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgIGF0dHJpYk1hcD1lbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsgICAgICAgICAgICAgIAorICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICBOb2RlTGlzdCBub2RlTGlzdD1yZXN1bHREb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGlmZmVyZW5jZV9lbGVtZW50Iik7CisgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3Qgbm9kZSBpcyBhbHdheXMgdGhlIGVtcHR5IG9uZSBpbiB0aGUgcmVzdWx0IGRvY3VtZW50CisgICAgICAgICAgICAgICAvLyBzbyBnZXQgdGhhdCBub2RlIGFuZCBjbG9uZSBpdAorICAgICAgICAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbSgwKS5jbG9uZU5vZGUodHJ1ZSk7CisgICAgICAgICAgICAgICBhdHRyaWJNYXA9bm9kZS5nZXRBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICAgICBub2Rlcz0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGROb2RlVmFsdWUobm9kZXMsbm9kZU5hbWUxLHZhbHVlMSwobm9kZU5hbWUxLmVxdWFscyhnb2xkS2V5KSk/bnVsbDpjYXNlRGlmZik7CisgICAgICAgICAgICBhZGROb2RlVmFsdWUobm9kZXMsbm9kZU5hbWUyLHZhbHVlMiwobm9kZU5hbWUyLmVxdWFscyhnb2xkS2V5KSk/bnVsbDpjYXNlRGlmZik7CisgICAgICAgICAgICBOb2RlIHBhcmVudF9ub2RlID0gYXR0cmliTWFwLmdldE5hbWVkSXRlbSgicGFyZW50X25vZGUiKTsKKyAgICAgICAgICAgIE5vZGUgbm9kZV9uYW1lICAgPSBhdHRyaWJNYXAuZ2V0TmFtZWRJdGVtKCJub2RlX25hbWUiKTsKKyAgICAgICAgICAgIE5vZGUgaWRfYXR0cmliICAgPSBhdHRyaWJNYXAuZ2V0TmFtZWRJdGVtKCJpZCIpOworICAgICAgICAgICAgTm9kZSBpbmRleCAgICAgICA9IGF0dHJpYk1hcC5nZXROYW1lZEl0ZW0oImluZGV4Iik7CisgICAgICAgICAgICBwYXJlbnRfbm9kZS5zZXROb2RlVmFsdWUocGFyZW50Tm9kZSk7CisgICAgICAgICAgICBub2RlX25hbWUuc2V0Tm9kZVZhbHVlKGNoaWxkTm9kZSk7CisgICAgICAgICAgICBpZF9hdHRyaWIuc2V0Tm9kZVZhbHVlKGlkKTsKKyAgICAgICAgICAgIGluZGV4LnNldE5vZGVWYWx1ZSgoYXR0cj09bnVsbCkgPyAiJm5ic3A7IiA6IGF0dHIpOworICAgICAgICAgICAgcm9vdE5vZGUuYXBwZW5kQ2hpbGQobm9kZXMuaXRlbSgwKS5nZXRQYXJlbnROb2RlKCkpOyAgICAgICAKKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkIGFkZERpZmZlcmVuY2UoU3RyaW5nIHBhcmVudE5vZGUsIFN0cmluZyBjaGlsZE5vZGUsIFN0cmluZyBhdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBub2RlTmFtZTEsICBTdHJpbmcgdmFsdWUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBub2RlTmFtZTIsIFN0cmluZyB2YWx1ZTIpeworICAgICAgICAgICAgU3RyaW5nIGlkIDsKKyAgICAgICAgICAgIC8vIERlY29tcG9zZSB0aGUgdmFsdWVzIGFuZCBmaW5kIG91dCBpZiB0aGV5IGFyZSBlcXVhbAorICAgICAgICAgICAgaWYoTm9ybWFsaXplci5jb21wYXJlKHZhbHVlMSx2YWx1ZTIsMCk9PTApeworICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZXMgYXJlIGVxdWFsIGp1c3QgcmV0dXJuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGNhc2VEaWZmPSBudWxsOworICAgICAgICAgICAgaWYoTm9ybWFsaXplci5jb21wYXJlKHZhbHVlMSx2YWx1ZTIsTm9ybWFsaXplci5DT01QQVJFX0lHTk9SRV9DQVNFKT09MCl7CisgICAgICAgICAgICAgICAgY2FzZURpZmY9InRydWUiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoYXR0ciE9bnVsbCl7CisgICAgICAgICAgICAgICAgaWQgPSBwYXJlbnROb2RlKyJfIitjaGlsZE5vZGUrIl8iK2F0dHI7CisgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICBpZCA9IHBhcmVudE5vZGUrIl8iK2NoaWxkTm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IHJlc3VsdERvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIE5vZGVMaXN0IG5vZGVzPW51bGw7CisgICAgICAgICAgICBOYW1lZE5vZGVNYXAgYXR0cmliTWFwPW51bGw7CisgICAgICAgICAgICBOb2RlIHJvb3ROb2RlID1yZXN1bHREb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGlmZmVyZW5jZV94bWwiKS5pdGVtKDApOworICAgICAgICAgICAgaWYoZWxlbWVudCE9bnVsbCl7CisgICAgICAgICAgICAgICAgbm9kZXMgPSBlbGVtZW50LmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJNYXA9ZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgTm9kZUxpc3Qgbm9kZUxpc3Q9cmVzdWx0RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpZmZlcmVuY2VfZWxlbWVudCIpOworICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IG5vZGUgaXMgYWx3YXlzIHRoZSBlbXB0eSBvbmUgaW4gdGhlIHJlc3VsdCBkb2N1bWVudAorICAgICAgICAgICAgICAgLy8gc28gZ2V0IHRoYXQgbm9kZSBhbmQgY2xvbmUgaXQKKyAgICAgICAgICAgICAgIE5vZGUgbm9kZSA9IG5vZGVMaXN0Lml0ZW0oMCkuY2xvbmVOb2RlKHRydWUpOworICAgICAgICAgICAgICAgYXR0cmliTWFwPW5vZGUuZ2V0QXR0cmlidXRlcygpOworICAgICAgICAgICAgICAgbm9kZXM9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkTm9kZVZhbHVlKG5vZGVzLG5vZGVOYW1lMSx2YWx1ZTEsY2FzZURpZmYpOworICAgICAgICAgICAgYWRkTm9kZVZhbHVlKG5vZGVzLG5vZGVOYW1lMix2YWx1ZTIsY2FzZURpZmYpOworICAgICAgICAgICAgTm9kZSBwYXJlbnRfbm9kZSA9IGF0dHJpYk1hcC5nZXROYW1lZEl0ZW0oInBhcmVudF9ub2RlIik7CisgICAgICAgICAgICBOb2RlIG5vZGVfbmFtZSAgID0gYXR0cmliTWFwLmdldE5hbWVkSXRlbSgibm9kZV9uYW1lIik7CisgICAgICAgICAgICBOb2RlIGlkX2F0dHJpYiAgID0gYXR0cmliTWFwLmdldE5hbWVkSXRlbSgiaWQiKTsKKyAgICAgICAgICAgIE5vZGUgaW5kZXggICAgICAgPSBhdHRyaWJNYXAuZ2V0TmFtZWRJdGVtKCJpbmRleCIpOworICAgICAgICAgICAgcGFyZW50X25vZGUuc2V0Tm9kZVZhbHVlKHBhcmVudE5vZGUpOworICAgICAgICAgICAgbm9kZV9uYW1lLnNldE5vZGVWYWx1ZShjaGlsZE5vZGUpOworICAgICAgICAgICAgaWRfYXR0cmliLnNldE5vZGVWYWx1ZShpZCk7CisgICAgICAgICAgICBpbmRleC5zZXROb2RlVmFsdWUoKGF0dHI9PW51bGwpID8gIiZuYnNwOyIgOiBhdHRyKTsKKyAgICAgICAgICAgIHJvb3ROb2RlLmFwcGVuZENoaWxkKG5vZGVzLml0ZW0oMCkuZ2V0UGFyZW50Tm9kZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICB9CisgICAgCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8KKyAgICAvLyAgIE1lcmdlIGVsZW1lbnQgbm9kZXMuICBkZXN0IGFuZCBzb3VyY2UgYXJlIEVsZW1lbnQgbm9kZXMgb2YgdGhlIHNhbWUgdHlwZS4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIGFueSBjaGlsZHJlbiBFbGVtZW50cyB0aGF0IGV4aXN0IGluIHRoZSBzb3VyY2UgYnV0IG5vdCBpbiB0aGUKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBpbnRvIHRoZSBkZXN0aW5hdGlvbgorICAgIC8vCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgcHJpdmF0ZSB2b2lkICBtZXJnZUVsZW1lbnRzKE5vZGUgZGVzdCwgTm9kZSBzb3VyY2UpIHsKKyAgICAgICAgTm9kZSAgIGNoaWxkT2ZTb3VyY2U7CisgICAgICAgIE5vZGUgICBjaGlsZE9mRGVzdDsKKyAgICAgICAgCisgICAgICAgIERvY3VtZW50IGRlc3REb2MgPSBkZXN0LmdldE93bmVyRG9jdW1lbnQoKTsKKyAgICAgICAgTm9kZSBzcGFjZXMgPSBkZXN0RG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgICAgICAiKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoY2hpbGRPZlNvdXJjZSA9IHNvdXJjZS5nZXRGaXJzdENoaWxkKCk7IGNoaWxkT2ZTb3VyY2UgIT0gbnVsbDsgY2hpbGRPZlNvdXJjZSA9IGNoaWxkT2ZTb3VyY2UuZ2V0TmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkT2ZTb3VyY2UuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoY2hpbGRPZlNvdXJjZS5nZXROb2RlTmFtZSgpLmVxdWFscygiY29sbGF0aW9uIikgCisgICAgICAgICAgICAgICAgfHwgY2hpbGRPZlNvdXJjZS5nZXROb2RlTmFtZSgpLmVxdWFscygidGltZVpvbmVOYW1lcyIpCisgICAgICAgICAgICAgICAgKXsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2xlYW4gZGlkTWVyZ2UgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoY2hpbGRPZkRlc3QgPSBkZXN0LmdldEZpcnN0Q2hpbGQoKTsgY2hpbGRPZkRlc3QgIT0gbnVsbDsgY2hpbGRPZkRlc3QgPSBjaGlsZE9mRGVzdC5nZXROZXh0U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkT2ZEZXN0LmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUgICYmCisgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkT2ZEZXN0LmdldE5vZGVOYW1lKCkuZXF1YWxzKGNoaWxkT2ZTb3VyY2UuZ2V0Tm9kZU5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIGRvY3VtZW50IGFscmVhZHkgaGFzIGFuIGVsZW1lbnQgb2YgdGhpcyB0eXBlIGF0IHRoaXMgbGV2ZWwuCisgICAgICAgICAgICAgICAgICAgIC8vICAgUmVjdXJzZSB0byBwaWNrIHVwIGFueSBleHRyYSBjaGlsZHJlbiB0aGF0IHRoZSBzb3VyY2Ugbm9kZSBtYXkgaGF2ZS4KKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VFbGVtZW50cyhjaGlsZE9mRGVzdCwgY2hpbGRPZlNvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgIGRpZE1lcmdlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgaWYgKGRpZE1lcmdlID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgLy8gZGVzdGluYXRpb24gZG9jdW1lbnQgaGFkIG5vIGNvcnJlc3BvbmRpbmcgbm9kZSB0byB0aGUgY3VycmVudCBjaGlsZE9mU291cmNlLiAgQWRkIGl0LgorICAgICAgICAgICAgICAgIE5vZGUgaW1wb3J0ZWROb2RlID0gZGVzdERvYy5pbXBvcnROb2RlKGNoaWxkT2ZTb3VyY2UsIHRydWUpOworICAgICAgICAgICAgICAgIGRlc3QuYXBwZW5kQ2hpbGQoc3BhY2VzKTsKKyAgICAgICAgICAgICAgICBkZXN0LmFwcGVuZENoaWxkKGltcG9ydGVkTm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy9kZXN0LmFwcGVuZENoaWxkKHNwYWNlcyk7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBkb3VibGUgYXJnczEgID0gMTAwMDAwMDAwMDAuMDA7CisgICAgZG91YmxlIGFyZ3MyICA9IC0xMDAwMDAwMDAwMC4wMDsKKyAgICAKKyAgICBEZWNpbWFsRm9ybWF0IGZtdCA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7IAorICAgIAorICAgIHByaXZhdGUgYm9vbGVhbiBjb21wYXJlUGF0dGVybnMoU3RyaW5nIHBhdDEsU3RyaW5nIHBhdDIpeworICAgICAgICBmbXQuYXBwbHlQYXR0ZXJuKHBhdDEpOworICAgICAgICBTdHJpbmcgczEgPSBmbXQuZm9ybWF0KGFyZ3MxKTsKKyAgICAgICAgU3RyaW5nIHMzID0gZm10LmZvcm1hdChhcmdzMik7CisgICAgICAgIGZtdC5hcHBseVBhdHRlcm4ocGF0Mik7CisgICAgICAgIFN0cmluZyBzMiA9IGZtdC5mb3JtYXQoYXJnczEpOworICAgICAgICBTdHJpbmcgczQgPSBmbXQuZm9ybWF0KGFyZ3MyKTsKKyAgICAgICAgaWYoczEuZXF1YWxzKHMyKSAmJiBzMy5lcXVhbHMoczQpKXsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcHJpdmF0ZSBib29sZWFuIGNvbXBhcmVFbGVtZW50c0FuZERhdGEoTm9kZSBnb2xkTm9kZSxTdHJpbmcgZ29sZEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2N1bWVudCB0ZXN0RG9jLFN0cmluZyB0ZXN0S2V5KXsKKyAgICAKKyAgICAgICAgTm9kZSBjaGlsZE9mU291cmNlOworCisgICAgICAgIGZvcihjaGlsZE9mU291cmNlID0gZ29sZE5vZGUuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZE9mU291cmNlICE9IG51bGw7IGNoaWxkT2ZTb3VyY2UgPSBjaGlsZE9mU291cmNlLmdldE5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZE9mU291cmNlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGNoaWxkT2ZTb3VyY2UuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoImNvbGxhdGlvbiIpIAorICAgICAgICAgICAgICAgIHx8IGNoaWxkT2ZTb3VyY2UuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoInRpbWVab25lTmFtZXMiKQorICAgICAgICAgICAgICAgIHx8IGNoaWxkT2ZTb3VyY2UuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoInZlcnNpb25pbmciKSl7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBOYW1lZE5vZGVNYXAgYXR0ciA9IGNoaWxkT2ZTb3VyY2UuZ2V0QXR0cmlidXRlcygpOyAgICAgICAKKyAgICAgICAgICAgIE5vZGVMaXN0IGRlc3RMaXN0ID0gdGVzdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShjaGlsZE9mU291cmNlLmdldE5vZGVOYW1lKCkpOworICAgICAgICAgICAgTm9kZSBzb3VyY2VJRCA9IGF0dHIuZ2V0TmFtZWRJdGVtKCJpZCIpOworICAgICAgICAgICAKKyAgICAKKyAgICAgICAgICAgIGZvcihpbnQgaSA9MCA7IGk8ZGVzdExpc3QuZ2V0TGVuZ3RoKCk7IGkrKyl7CisgICAgICAgICAgICAgICAgTm9kZSBkZXN0Tm9kZSA9ZGVzdExpc3QuaXRlbShpKTsKKyAgICAgICAgICAgICAgICBOYW1lZE5vZGVNYXAgZGVzdEF0dHIgPSBkZXN0Tm9kZS5nZXRBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5vZGVzIHdpdGggYXR0cmlidXRlIGlkICovCisgICAgICAgICAgICAgICAgTm9kZSBkZXN0SUQgPSBkZXN0QXR0ci5nZXROYW1lZEl0ZW0oImlkIik7CisgICAgICAgICAgICAgICAgaWYoZGVzdElEIT1udWxsICYmIHNvdXJjZUlEIT1udWxsKXsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZVZhbCA9c291cmNlSUQuZ2V0Tm9kZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXN0VmFsID0gZGVzdElELmdldE5vZGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYoc291cmNlVmFsLmVxdWFscyhkZXN0VmFsKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihzb3VyY2VWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oZGVzdFZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihkZXN0Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgY2hpbGRPZlNvdXJjZS5oYXNDaGlsZE5vZGVzKCkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlc3ROb2RlLmdldFBhcmVudE5vZGUoKS5nZXROb2RlTmFtZSgpLmVxdWFscyhjaGlsZE9mU291cmNlLmdldFBhcmVudE5vZGUoKS5nZXROb2RlTmFtZSgpKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXN0Tm9kZVZhbCA9IHRyaW0oZGVzdE5vZGUuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZU5vZGVWYWwgPSB0cmltKGNoaWxkT2ZTb3VyY2UuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihjaGlsZE9mU291cmNlLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oZGVzdE5vZGUuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGVzdE5vZGVWYWwuZXF1YWxzKHNvdXJjZU5vZGVWYWwpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gd3JpdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmVudE5vZGVOYW1lID0gdHJpbShjaGlsZE9mU291cmNlLmdldFBhcmVudE5vZGUoKS5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjaGlsZE5vZGVOYW1lICA9IHRyaW0oY2hpbGRPZlNvdXJjZS5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkTm9kZU5hbWUuZXF1YWxzKCJwYXR0ZXJuIikpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbXBhcmVQYXR0ZXJucyhzb3VyY2VOb2RlVmFsLGRlc3ROb2RlVmFsKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod3JpdGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZERpZmZlcmVuY2UocGFyZW50Tm9kZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Tm9kZVZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvbGRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICBpZihkZXN0Tm9kZS5nZXROb2RlTmFtZSgpLmVxdWFscyhjaGlsZE9mU291cmNlLmdldE5vZGVOYW1lKCkpJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3ROb2RlLmdldFBhcmVudE5vZGUoKS5nZXROb2RlTmFtZSgpLmVxdWFscyhjaGlsZE9mU291cmNlLmdldFBhcmVudE5vZGUoKS5nZXROb2RlTmFtZSgpKQorICAgICAgICAgICAgICAgICAgICAgICApeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVzdE5vZGUuaGFzQ2hpbGROb2RlcygpICYmIGNoaWxkT2ZTb3VyY2UuaGFzQ2hpbGROb2RlcygpKXsKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzdE5vZGVWYWwgPSB0cmltKGRlc3ROb2RlLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZU5vZGVWYWwgPSB0cmltKGNoaWxkT2ZTb3VyY2UuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpKTsKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXR0SUQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkZXN0Tm9kZVZhbC5lcXVhbHMoc291cmNlTm9kZVZhbCkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHdyaXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmVudE5vZGVOYW1lID0gY2hpbGRPZlNvdXJjZS5nZXRQYXJlbnROb2RlKCkuZ2V0Tm9kZU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNoaWxkTm9kZU5hbWUgID0gY2hpbGRPZlNvdXJjZS5nZXROb2RlTmFtZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZE5vZGVOYW1lLmVxdWFscygicGF0dGVybiIpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjb21wYXJlUGF0dGVybnMoc291cmNlTm9kZVZhbCxkZXN0Tm9kZVZhbCkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3cml0ZSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGREaWZmZXJlbmNlKHBhcmVudE5vZGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdE5vZGVWYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvbGRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5vZGVWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgCisgICAgICAgICAgICBjb21wYXJlRWxlbWVudHNBbmREYXRhKGNoaWxkT2ZTb3VyY2UsZ29sZEtleSx0ZXN0RG9jLHRlc3RLZXkpOworICAgICAgICB9CisgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAgICAKKyAgICBwcml2YXRlIFN0cmluZyB0cmltKFN0cmluZyBzb3VyY2UpeworICAgICAgICBjaGFyW10gc3JjID0gc291cmNlLnRvQ2hhckFycmF5KCk7CisgICAgICAgIGNoYXJbXSBkZXN0ID0gbmV3IGNoYXJbc3JjLmxlbmd0aF07CisKKyAgICAgICAgaW50IHN0YXJ0PTA7CisgICAgICAgIHdoaWxlKHN0YXJ0PChzcmMubGVuZ3RoKSAmJiAoVUNoYXJhY3Rlci5pc1doaXRlc3BhY2Uoc3JjW3N0YXJ0XSl8fCBzcmNbc3RhcnRdPT0weEEwKSl7c3RhcnQrKzt9CisgICAgICAgIGludCBzdG9wPXNyYy5sZW5ndGgtMTsKKyAgICAgICAgd2hpbGUoc3RvcD4wICYmIChVQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShzcmNbc3RvcF0pfHwoc3JjW3N0b3BdPT0weEEwKSkpe3N0b3AtLTt9CisgICAgICAgIGlmKHN0b3AhPS0xICYmIHN0YXJ0IT1zcmMubGVuZ3RoKXsKKwkgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3JjLHN0YXJ0LGRlc3QsMCwoc3RvcC1zdGFydCkrMSk7CisJICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhkZXN0LDAsKHN0b3Atc3RhcnQpKzEpOworICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgIAorICAgIH0KKyAgICBwcml2YXRlIGJvb2xlYW4gZXh0cmFjdE1lcmdlRGF0YShOb2RlIGdvbGROb2RlLFN0cmluZyBnb2xkS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50IHRlc3REb2MsU3RyaW5nIHRlc3RLZXkpeworICAgIAorICAgICAgICBOb2RlIGNoaWxkT2ZTb3VyY2U7CisKKyAgICAgICAgZm9yKGNoaWxkT2ZTb3VyY2UgPSBnb2xkTm9kZS5nZXRGaXJzdENoaWxkKCk7IGNoaWxkT2ZTb3VyY2UgIT0gbnVsbDsgY2hpbGRPZlNvdXJjZSA9IGNoaWxkT2ZTb3VyY2UuZ2V0TmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkT2ZTb3VyY2UuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoY2hpbGRPZlNvdXJjZS5nZXROb2RlTmFtZSgpLmVxdWFscygiY29sbGF0aW9uIikgCisgICAgICAgICAgICAgICAgfHwgY2hpbGRPZlNvdXJjZS5nZXROb2RlTmFtZSgpLmVxdWFscygidGltZVpvbmVOYW1lcyIpCisgICAgICAgICAgICAgICAgfHwgY2hpbGRPZlNvdXJjZS5nZXROb2RlTmFtZSgpLmVxdWFscygidmVyc2lvbmluZyIpKXsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5hbWVkTm9kZU1hcCBhdHRyID0gY2hpbGRPZlNvdXJjZS5nZXRBdHRyaWJ1dGVzKCk7ICAgICAgIAorICAgICAgICAgICAgTm9kZUxpc3QgZGVzdExpc3QgPSB0ZXN0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKGNoaWxkT2ZTb3VyY2UuZ2V0Tm9kZU5hbWUoKSk7CisgICAgICAgICAgICBOb2RlIHNvdXJjZUlEID0gYXR0ci5nZXROYW1lZEl0ZW0oImlkIik7CisgICAgCisgICAgICAgICAgICBmb3IoaW50IGkgPTAgOyBpPGRlc3RMaXN0LmdldExlbmd0aCgpOyBpKyspeworICAgICAgICAgICAgICAgIE5vZGUgZGVzdE5vZGUgPWRlc3RMaXN0Lml0ZW0oaSk7CisgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwIGRlc3RBdHRyID0gZGVzdE5vZGUuZ2V0QXR0cmlidXRlcygpOworICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBub2RlcyB3aXRoIGF0dHJpYnV0ZSBpZCAqLworICAgICAgICAgICAgICAgIE5vZGUgZGVzdElEID0gZGVzdEF0dHIuZ2V0TmFtZWRJdGVtKCJpZCIpOworICAgICAgICAgICAgICAgIGlmKGRlc3RJRCE9bnVsbCAmJiBzb3VyY2VJRCE9bnVsbCl7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VJRFZhbCA9c291cmNlSUQuZ2V0Tm9kZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXN0SURWYWwgPSBkZXN0SUQuZ2V0Tm9kZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZihzb3VyY2VJRFZhbC5lcXVhbHMoZGVzdElEVmFsKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihzb3VyY2VWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oZGVzdFZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihkZXN0Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgY2hpbGRPZlNvdXJjZS5oYXNDaGlsZE5vZGVzKCkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlc3ROb2RlLmdldFBhcmVudE5vZGUoKS5nZXROb2RlTmFtZSgpLmVxdWFscyhjaGlsZE9mU291cmNlLmdldFBhcmVudE5vZGUoKS5nZXROb2RlTmFtZSgpKSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXN0Tm9kZVZhbCA9IHRyaW0oZGVzdE5vZGUuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZU5vZGVWYWwgPSB0cmltKGNoaWxkT2ZTb3VyY2UuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmVudE5vZGVOYW1lID0gdHJpbShjaGlsZE9mU291cmNlLmdldFBhcmVudE5vZGUoKS5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNoaWxkTm9kZU5hbWUgID0gdHJpbShjaGlsZE9mU291cmNlLmdldE5vZGVOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzb3VyY2VOb2RlVmFsLmxlbmd0aCgpIT0wKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocGFyZW50Tm9kZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdElEVmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3ROb2RlVmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29sZEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5vZGVWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKGNoaWxkT2ZTb3VyY2UuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihkZXN0Tm9kZS5nZXRGaXJzdENoaWxkKCkuZ2V0Tm9kZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgIGlmKGRlc3ROb2RlLmdldE5vZGVOYW1lKCkuZXF1YWxzKGNoaWxkT2ZTb3VyY2UuZ2V0Tm9kZU5hbWUoKSkmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdE5vZGUuZ2V0UGFyZW50Tm9kZSgpLmdldE5vZGVOYW1lKCkuZXF1YWxzKGNoaWxkT2ZTb3VyY2UuZ2V0UGFyZW50Tm9kZSgpLmdldE5vZGVOYW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihkZXN0Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgY2hpbGRPZlNvdXJjZS5oYXNDaGlsZE5vZGVzKCkpeworICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXN0Tm9kZVZhbCA9IHRyaW0oZGVzdE5vZGUuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlTm9kZVZhbCA9IHRyaW0oY2hpbGRPZlNvdXJjZS5nZXRGaXJzdENoaWxkKCkuZ2V0Tm9kZVZhbHVlKCkpOworICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJlbnROb2RlTmFtZSA9IHRyaW0oY2hpbGRPZlNvdXJjZS5nZXRQYXJlbnROb2RlKCkuZ2V0Tm9kZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNoaWxkTm9kZU5hbWUgID0gdHJpbShjaGlsZE9mU291cmNlLmdldE5vZGVOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNvdXJjZU5vZGVWYWwubGVuZ3RoKCkhPTApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHBhcmVudE5vZGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Tm9kZVZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29sZEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTm9kZVZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgCisgICAgICAgICAgICBleHRyYWN0TWVyZ2VEYXRhKGNoaWxkT2ZTb3VyY2UsZ29sZEtleSx0ZXN0RG9jLHRlc3RLZXkpOworICAgICAgICB9CisgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKworICAgIC8qKgorICAgICAqIFV0aWxpdHkgbWV0aG9kIHRvIHRyYW5zbGF0ZSBhIFN0cmluZyBmaWxlbmFtZSB0byBVUkwuICAKKyAgICAgKgorICAgICAqIE5vdGU6IFRoaXMgbWV0aG9kIGlzIG5vdCBuZWNlc3NhcmlseSBwcm92ZW4gdG8gZ2V0IHRoZSAKKyAgICAgKiBjb3JyZWN0IFVSTCBmb3IgZXZlcnkgcG9zc2libGUga2luZCBvZiBmaWxlbmFtZTsgaXQgc2hvdWxkIAorICAgICAqIGJlIGltcHJvdmVkLiAgSXQgaGFuZGxlcyB0aGUgbW9zdCBjb21tb24gY2FzZXMgdGhhdCB3ZSd2ZSAKKyAgICAgKiBlbmNvdW50ZXJlZCB3aGVuIHJ1bm5pbmcgQ29uZm9ybWFuY2UgdGVzdHMgb24gWGFsYW4uCisgICAgICogQWxzbyBub3RlLCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBoYW5kbGUgb3RoZXIgbm9uLWZpbGU6CisgICAgICogZmxhdm9ycyBvZiBVUkxzIGF0IGFsbC4KKyAgICAgKgorICAgICAqIElmIHRoZSBuYW1lIGlzIG51bGwsIHJldHVybiBudWxsLgorICAgICAqIElmIHRoZSBuYW1lIHN0YXJ0cyB3aXRoIGEgY29tbW9uIFVSSSBzY2hlbWUgKG5hbWVseSB0aGUgb25lcyAKKyAgICAgKiBmb3VuZCBpbiB0aGUgZXhhbXBsZXMgb2YgUkZDMjM5NiksIHRoZW4gc2ltcGx5IHJldHVybiB0aGUgCisgICAgICogbmFtZSBhcy1pcyAodGhlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIGFscmVhZHkgYSBVUkwpCisgICAgICogT3RoZXJ3aXNlIHdlIGF0dGVtcHQgKGNoZWFwbHkpIHRvIGNvbnZlcnQgdG8gYSBmaWxlOi8vLyBVUkwuCisgICAgICogCisgICAgICogQHBhcmFtIFN0cmluZyBsb2NhbCBwYXRoXGZpbGVuYW1lIG9mIGEgZmlsZQorICAgICAqIEByZXR1cm4gYSBmaWxlOi8vLyBVUkwsIHRoZSBzYW1lIHN0cmluZyBpZiBpdCBhcHBlYXJzIHRvIAorICAgICAqIGFscmVhZHkgYmUgYSBVUkwsIG9yIG51bGwgaWYgZXJyb3IKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmaWxlbmFtZVRvVVJMKFN0cmluZyBmaWxlbmFtZSkKKyAgICB7CisgICAgICAgIC8vIG51bGwgYmVnZXRzIG51bGwgLSBzb21ldGhpbmcgbGlrZSB0aGUgY29tbXV0YXRpdmUgcHJvcGVydHkKKyAgICAgICAgaWYgKG51bGwgPT0gZmlsZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAvLyBEb24ndCB0cmFuc2xhdGUgYSBzdHJpbmcgdGhhdCBhbHJlYWR5IGxvb2tzIGxpa2UgYSBVUkwKKyAgICAgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6IikKKyAgICAgICAgICAgIHx8IGZpbGVuYW1lLnN0YXJ0c1dpdGgoImh0dHA6IikKKyAgICAgICAgICAgIHx8IGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZ0cDoiKQorICAgICAgICAgICAgfHwgZmlsZW5hbWUuc3RhcnRzV2l0aCgiZ29waGVyOiIpCisgICAgICAgICAgICB8fCBmaWxlbmFtZS5zdGFydHNXaXRoKCJtYWlsdG86IikKKyAgICAgICAgICAgIHx8IGZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5ld3M6IikKKyAgICAgICAgICAgIHx8IGZpbGVuYW1lLnN0YXJ0c1dpdGgoInRlbG5ldDoiKQorICAgICAgICAgICApCisgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWU7CisKKyAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoZmlsZW5hbWUpOworICAgICAgICBTdHJpbmcgdG1wID0gbnVsbDsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbm9ybWFsbHkgZ2l2ZXMgYSBiZXR0ZXIgcGF0aAorICAgICAgICAgICAgdG1wID0gZi5nZXRDYW5vbmljYWxQYXRoKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQnV0IHRoaXMgY2FuIGJlIHVzZWQgYXMgYSBiYWNrdXAsIGZvciBjYXNlcyAKKyAgICAgICAgICAgIC8vICB3aGVyZSB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgZXRjLgorICAgICAgICAgICAgdG1wID0gZi5nZXRBYnNvbHV0ZVBhdGgoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVSTHMgbXVzdCBleHBsaWNpdGx5IHVzZSBvbmx5IGZvcndhcmQgc2xhc2hlcworICAgICAgICBpZiAoRmlsZS5zZXBhcmF0b3JDaGFyID09ICdcXCcpIHsKKyAgICAgICAgICAgIHRtcCA9IHRtcC5yZXBsYWNlKCdcXCcsICcvJyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTm90ZSB0aGUgcHJlc3VtcHRpb24gdGhhdCBpdCdzIGEgZmlsZSByZWZlcmVuY2UKKyAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHNsYXNoZXMgYXQgdGhlIAorICAgICAgICAvLyAgc3RhcnQ6IHdlIGFsd2F5cyB3YW50IDMgLy8vIGlmIGl0J3MgYWJzb2x1dGUKKyAgICAgICAgLy8gICh3aGljaCB3ZSBzaG91bGQgaGF2ZSBmb3JjZWQgYWJvdmUpCisgICAgICAgIGlmICh0bXAuc3RhcnRzV2l0aCgiLyIpKQorICAgICAgICAgICAgcmV0dXJuICJmaWxlOi8vIiArIHRtcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICJmaWxlOi8vLyIgKyB0bXA7CisKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFNpbXBsZSB3b3JrZXIgbWV0aG9kIHRvIHBhcnNlIGZpbGVuYW1lIHRvIGEgRG9jdW1lbnQuICAKKyAgICAgKgorICAgICAqIEF0dGVtcHRzIFhNTCBwYXJzZSwgdGhlbiBIVE1MIHBhcnNlICh3aGVuIHBhcnNlciBhdmFpbGFibGUpLCAKKyAgICAgKiB0aGVuIGp1c3QgcGFyc2VzIGFzIHRleHQgYW5kIHN0aWNrcyBpbnRvIGEgdGV4dCBub2RlLgorICAgICAqCisgICAgICogQHBhcmFtIGZpbGVuYW1lIHRvIHBhcnNlIGFzIGEgbG9jYWwgcGF0aAorICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIG5hbWU9dmFsdWUgcGFpcnMgdG8gc2V0IG9uIHRoZSAKKyAgICAgKiBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IHRoYXQgd2UgdXNlIHRvIHBhcnNlCisgICAgICoKKyAgICAgKiBAcmV0dXJuIERvY3VtZW50IG9iamVjdCB3aXRoIGNvbnRlbnRzIG9mIHRoZSBmaWxlOyAKKyAgICAgKiBvdGhlcndpc2UgdGhyb3dzIGFuIHVuY2hlY2tlZCBSdW50aW1lRXhjZXB0aW9uIGlmIHRoZXJlIAorICAgICAqIGlzIGFueSBmYXRhbCBwcm9ibGVtCisgICAgICovCisgICAgRG9jdW1lbnQgcGFyc2UoU3RyaW5nIGZpbGVuYW1lKQorICAgIHsKKyAgICAgICAgLy8gRm9yY2UgZmlsZXJlZnMgdG8gYmUgVVJJJ3MgaWYgbmVlZGVkOiBub3RlIHRoaXMgaXMgaW5kZXBlbmRlbnQgb2YgYW55IG90aGVyIGZpbGVzCisgICAgICAgIFN0cmluZyBkb2NVUkkgPSBmaWxlbmFtZVRvVVJMKGZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlKG5ldyBJbnB1dFNvdXJjZShkb2NVUkkpLGZpbGVuYW1lKTsKKyAgICB9CisgICAgCisgICAgRG9jdW1lbnQgcGFyc2UoSW5wdXRTb3VyY2UgZG9jU3JjLCBTdHJpbmcgZmlsZW5hbWUpeworICAgICAgICAKKyAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgLy8gQWx3YXlzIHNldCBuYW1lc3BhY2VzIG9uCisgICAgICAgIGRmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOworICAgICAgICAvLyBTZXQgb3RoZXIgYXR0cmlidXRlcyBoZXJlIGFzIG5lZWRlZAorICAgICAgICAvL2FwcGx5QXR0cmlidXRlcyhkZmFjdG9yeSwgYXR0cmlidXRlcyk7CisgICAgICAgIAorICAgICAgICAvLyBMb2NhbCBjbGFzczogY2hlYXAgbm9uLXByaW50aW5nIEVycm9ySGFuZGxlcgorICAgICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gc3VwcHJlc3MgdmFsaWRhdGlvbiB3YXJuaW5ncworICAgICAgICBFcnJvckhhbmRsZXIgbnVsbEhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHtTeXN0ZW0uZXJyLnByaW50bG4oIldhcm5pbmc6ICIgKyBlLmdldE1lc3NhZ2UoKSk7fQorICAgICAgICAgICAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7U3lzdGVtLmVyci5wcmludGxuKCJFcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTt9CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24gCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBEb2N1bWVudCBkb2MgPSBudWxsOworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmlyc3QsIGF0dGVtcHQgdG8gcGFyc2UgYXMgWE1MIChwcmVmZXJyZWQpLi4uCisgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IGRmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOworICAgICAgICAgICAgZG9jQnVpbGRlci5zZXRFcnJvckhhbmRsZXIobnVsbEhhbmRsZXIpOworICAgICAgICAgICAgZG9jID0gZG9jQnVpbGRlci5wYXJzZShkb2NTcmMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChUaHJvd2FibGUgc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIC4uLiBpZiB3ZSBjb3VsZG4ndCBwYXJzZSBhcyBYTUwsIGF0dGVtcHQgcGFyc2UgYXMgSFRNTC4uLgorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUiA6IiArIHNlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQHRvZG8gbmVlZCB0byBmaW5kIGFuIEhUTUwgdG8gRE9NIHBhcnNlciB3ZSBjYW4gdXNlISEhCisgICAgICAgICAgICAgICAgLy8gZG9jID0gc29tZUhUTUxQYXJzZXIucGFyc2UobmV3IElucHV0U291cmNlKGZpbGVuYW1lKSk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlhNTENvbXBhcmF0b3Igbm8gSFRNTCBwYXJzZXIhIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoZmlsZW5hbWUhPW51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAuLi4gaWYgd2UgY2FuJ3QgcGFyc2UgYXMgSFRNTCwgdGhlbiBqdXN0IHBhcnNlIHRoZSB0ZXh0CisgICAgICAgICAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgICAgICAgICB7CisgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSBhcyB0ZXh0LCBsaW5lIGJ5IGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgU2luY2Ugd2UgYWxyZWFkeSBrbm93IGl0IHNob3VsZCBiZSB0ZXh0LCB0aGlzIHNob3VsZCAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd29yayBiZXR0ZXIgdGhhbiBwYXJzaW5nIGJ5IGJ5dGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVJlYWRlciBmciA9IG5ldyBGaWxlUmVhZGVyKGZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0bXAgPSBici5yZWFkTGluZSgpOworICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiXG4iKTsgIC8vIFB1dCBpbiB0aGUgbmV3bGluZXMgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBkZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IGRvY0J1aWxkZXIubmV3RG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgb3V0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCJvdXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgdGV4dE5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoYnVmZmVyLnRvU3RyaW5nKCkpOworICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogd2lsbCB0aGlzIGFsd2F5cyBiZSBhIHZhbGlkIG5vZGU/ICBJZiB3ZSdyZSBwYXJzaW5nIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgaW4gYXMgdGV4dCwgd2lsbCB0aGVyZSBldmVyIGJlIGNhc2VzIHdoZXJlIHRoZSBkaWZmIHRoYXQncyAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGRvbmUgbGF0ZXIgb24gd2lsbCBmYWlsIGJlY3Vhc2Ugc29tZSByZWFsbHkgZ2FyYmFnZS1saWtlIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgdGV4dCBoYXMgYmVlbiBwdXQgaW50byBhIG5vZGU/CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRFbGVtLmFwcGVuZENoaWxkKHRleHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5hcHBlbmRDaGlsZChvdXRFbGVtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHRocm93YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvL3Rocm93YWJsZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9jOworICAgIH0gIC8vIGVuZCBvZiBwYXJzZSgpCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9CT0NVLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9CT0NVLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4OWEwOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0JPQ1UuamF2YQpAQCAtMCwwICsxLDM4MyBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL0JPQ1UuamF2YSx2ICQgCisqICREYXRlOiAyMDAyLzEwLzMxIDIyOjM1OjIwICQgCisqICRSZXZpc2lvbjogMS4zICQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VQ2hhcmFjdGVySXRlcmF0b3I7CisKKy8qKgorICogPHA+QmluYXJ5IE9yZGVyZWQgQ29tcHJlc3Npb24gZm9yIFVuaWNvZGU8L3A+CisgKiAKKyAqIDxwPlVzZXJzIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHJlYWQgdGhlIElDVSBwYXBlciBvbiAKKyAqIDxhIGhyZWY9aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RvY3MvcGFwZXJzL2JpbmFyeV9vcmRlcmVkX2NvbXByZXNzaW9uX2Zvcl91bmljb2RlLmh0bWw+CisgKiBCT0NVPC9hPiBiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgdGhpcyBjbGFzcy48L3A+CisgKiAKKyAqIDxwPkJPQ1UgaXMgdXNlZCB0byBjb21wcmVzcyB1bmljb2RlIHRleHQgaW50byBhIHN0cmVhbSBvZiB1bnNpZ25lZAorICogYnl0ZXMuICBGb3IgbWFueSBraW5kcyBvZiB0ZXh0IHRoZSBjb21wcmVzc2lvbiBjb21wYXJlcyBmYXZvcmFibHkKKyAqIHRvIFVURi04LCBhbmQgZm9yIHNvbWUga2luZHMgb2YgdGV4dCAoc3VjaCBhcyBDSkspIGl0IGRvZXMgYmV0dGVyLgorICogVGhlIHJlc3VsdGluZyBieXRlcyB3aWxsIGNvbXBhcmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIG9yaWdpbmFsCisgKiBjb2RlIHBvaW50cy4gIFRoZSBieXRlIHN0cmVhbSBkb2VzIG5vdCBjb250YWluIHRoZSB2YWx1ZXMgMCwgMSwgb3IKKyAqIDIuPC9wPgorICogCisgKiA8cD5PbmUgZXhhbXBsZSBvZiBhIHVzZSBvZiBCT0NVIGlzIGluIHtAbGluayAKKyAqIENvbGxhdG9yI2dldENvbGxhdGlvbktleShTdHJpbmcpfSBmb3IgYSBSdWxlQmFzZWRDb2xsYXRvciBvYmplY3Qgd2l0aCAKKyAqIGNvbGxhdGlvbiBzdHJlbmd0aCBJREVOVElDQUwuIFRoZSByZXN1bHQgQ29sbGF0aW9uS2V5IHdpbGwgY29uc2lzdCBvZiB0aGUgCisgKiBjb2xsYXRpb24gb3JkZXIgb2YgdGhlIHNvdXJjZSBzdHJpbmcgZm9sbG93ZWQgYnkgdGhlIEJPQ1UgcmVzdWx0IG9mIHRoZSAKKyAqIHNvdXJjZSBzdHJpbmcuIAorICogPC9wPiAKKyAqCisgKiA8cD5Vbmxpa2UgYSBVVEYgZW5jb2RpbmcsIEJPQ1UtY29tcHJlc3NlZCB0ZXh0IGlzIG5vdCBzdWl0YWJsZSBmb3IKKyAqIHJhbmRvbSBhY2Nlc3MuPC9wPgorICogCisgKiA8cD5NZXRob2Q6IFNsb3BlIERldGVjdGlvbjxicj4gUmVtZW1iZXIgdGhlIHByZXZpb3VzIGNvZGUgcG9pbnQKKyAqIChpbml0aWFsIDApLiAgRm9yIGVhY2ggY29kZSBwb2ludCBpbiB0aGUgc3RyaW5nLCBlbmNvZGUgdGhlCisgKiBkaWZmZXJlbmNlIHdpdGggdGhlIHByZXZpb3VzIG9uZS4gIFNpbWlsYXIgdG8gYSBVVEYsIHRoZSBsZW5ndGggb2YKKyAqIHRoZSBieXRlIHNlcXVlbmNlIGlzIGVuY29kZWQgaW4gdGhlIGxlYWQgYnl0ZXMuICBVbmxpa2UgYSBVVEYsIHRoZQorICogdHJhaWwgYnl0ZSB2YWx1ZXMgbWF5IG92ZXJsYXAgd2l0aCBsZWFkL3NpbmdsZSBieXRlIHZhbHVlcy4gIFRoZQorICogc2lnbmVkbmVzcyBvZiB0aGUgZGlmZmVyZW5jZSBtdXN0IGJlIGVuY29kZWQgYXMgdGhlIG1vc3QKKyAqIHNpZ25pZmljYW50IHBhcnQuPC9wPgorICoKKyAqIDxwPldlIGVuY29kZSBkaWZmZXJlbmNlcyB3aXRoIGZldyBieXRlcyBpZiB0aGVpciBhYnNvbHV0ZSB2YWx1ZXMKKyAqIGFyZSBzbWFsbC4gIEZvciBjb3JyZWN0IG9yZGVyaW5nLCB3ZSBtdXN0IHRyZWF0IHRoZSBlbnRpcmUgdmFsdWUKKyAqIHJhbmdlIC0xMGZmZmYuLisxMGZmZmYgaW4gYXNjZW5kaW5nIG9yZGVyLCB3aGljaCBmb3JiaWRzIGVuY29kaW5nCisgKiB0aGUgc2lnbiBhbmQgdGhlIGFic29sdXRlIHZhbHVlIHNlcGFyYXRlbHkuIEluc3RlYWQsIHdlIHNwbGl0IHRoZQorICogbGVhZCBieXRlIHJhbmdlIGluIHRoZSBtaWRkbGUgYW5kIGVuY29kZSBub24tbmVnYXRpdmUgdmFsdWVzIGdvaW5nCisgKiB1cCBhbmQgbmVnYXRpdmUgdmFsdWVzIGdvaW5nIGRvd24uPC9wPgorICoKKyAqIDxwPkZvciB2ZXJ5IHNtYWxsIGFic29sdXRlIHZhbHVlcywgdGhlIGRpZmZlcmVuY2UgaXMgYWRkZWQgdG8gYQorICogbWlkZGxlIGJ5dGUgdmFsdWUgZm9yIHNpbmdsZS1ieXRlIGVuY29kZWQgZGlmZmVyZW5jZXMuICBGb3IKKyAqIHNvbWV3aGF0IGxhcmdlciBhYnNvbHV0ZSB2YWx1ZXMsIHRoZSBkaWZmZXJlbmNlIGlzIGRpdmlkZWQgYnkgdGhlCisgKiBudW1iZXIgb2YgYnl0ZSB2YWx1ZXMgYXZhaWxhYmxlLCB0aGUgbW9kdWxvIGlzIHVzZWQgZm9yIG9uZSB0cmFpbAorICogYnl0ZSwgYW5kIHRoZSByZW1haW5kZXIgaXMgYWRkZWQgdG8gYSBsZWFkIGJ5dGUgYXZvaWRpbmcgdGhlCisgKiBzaW5nbGUtYnl0ZSByYW5nZS4gIEZvciBsYXJnZSBhYnNvbHV0ZSB2YWx1ZXMsIHRoZSBkaWZmZXJlbmNlIGlzCisgKiBzaW1pbGFybHkgZW5jb2RlZCBpbiB0aHJlZSBieXRlcy4gKFN5biBXZWUsIEkgbmVlZCBleGFtcGxlcworICogaGVyZS4pPC9wPgorICoKKyAqIDxwPkJPQ1UgZG9lcyBub3QgdXNlIGJ5dGUgdmFsdWVzIDAsIDEsIG9yIDIsIGJ1dCB1c2VzIGFsbCBvdGhlcgorICogYnl0ZSB2YWx1ZXMgZm9yIGxlYWQgYW5kIHNpbmdsZSBieXRlcywgc28gdGhhdCB0aGUgbWlkZGxlIHJhbmdlIG9mCisgKiBzaW5nbGUgYnl0ZXMgaXMgYXMgbGFyZ2UgYXMgcG9zc2libGUuPC9wPgorICoKKyAqIDxwPk5vdGUgdGhhdCB0aGUgbGVhZCBieXRlIHJhbmdlcyBvdmVybGFwIHNvbWUsIGJ1dCB0aGF0IHRoZQorICogc2VxdWVuY2VzIGFzIGEgd2hvbGUgYXJlIHdlbGwgb3JkZXJlZC4gSS5lLiwgZXZlbiBpZiB0aGUgbGVhZCBieXRlCisgKiBpcyB0aGUgc2FtZSBmb3Igc2VxdWVuY2VzIG9mIGRpZmZlcmVudCBsZW5ndGhzLCB0aGUgdHJhaWwgYnl0ZXMKKyAqIGVzdGFibGlzaCBjb3JyZWN0IG9yZGVyLiAgSXQgd291bGQgYmUgcG9zc2libGUgdG8gZW5jb2RlIHNsaWdodGx5CisgKiBsYXJnZXIgcmFuZ2VzIGZvciBlYWNoIGxlbmd0aCAoPjEpIGJ5IHN1YnRyYWN0aW5nIHRoZSBsb3dlciBib3VuZAorICogb2YgdGhlIHJhbmdlLiBIb3dldmVyLCB0aGF0IHdvdWxkIGFsc28gc2xvdyBkb3duIHRoZSBjYWxjdWxhdGlvbi4KKyAqIChTeW4gV2VlLCBuZWVkIGFuIGV4YW1wbGUpLjwvcD4KKyAqCisgKiA8cD5Gb3IgdGhlIGFjdHVhbCBzdHJpbmcgZW5jb2RpbmcsIGFuIG9wdGltaXphdGlvbiBtb3ZlcyB0aGUKKyAqIHByZXZpb3VzIGNvZGUgcG9pbnQgdmFsdWUgdG8gdGhlIG1pZGRsZSBvZiBpdHMgVW5pY29kZSBzY3JpcHQgYmxvY2sKKyAqIHRvIG1pbmltaXplIHRoZSBkaWZmZXJlbmNlcyBpbiBzYW1lLXNjcmlwdCB0ZXh0IHJ1bnMuICAoU3luIFdlZSwKKyAqIG5lZWQgYW4gZXhhbXBsZS4pPC9wPgorICoKKyAqIEBhdXRob3IgU3luIFdlZSBRdWVrCisgKiBAc2luY2UgcmVsZWFzZSAyLjIsIE1heSAzcmQgMjAwMgorICogQGRyYWZ0IDIuMiAqLworcHVibGljIGNsYXNzIEJPQ1UgCit7ICAgICAgCisgICAgLy8gcHVibGljIGNvbnN0cnVjdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogPHA+RW5jb2RlIHRoZSBjb2RlIHBvaW50cyBvZiBhIHN0cmluZyBhcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLAorICAgICAqIHByZXNlcnZpbmcgbGV4aWNhbCBvcmRlci48L3A+CisgICAgICogPHA+VGhlIG1pbmltdW0gc2l6ZSBvZiBidWZmZXIgcmVxdWlyZWQgZm9yIHRoZSBjb21wcmVzc2lvbiBjYW4gYmUgCisgICAgICogcHJlZmxpZ2h0ZWQgYnkgZ2V0Q29tcHJlc3Npb25MZW5ndGgoU3RyaW5nKS48L3A+CisgICAgICogQHBhcmFtIHNvdXJjZSB0ZXh0IHNvdXJjZQorICAgICAqIEBwYXJhbSBidWZmZXIgb3V0cHV0IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBvZmZzZXQgdG8gc3RhcnQgd3JpdGluZyB0bworICAgICAqIEByZXR1cm4gZW5kIG9mZnNldCB3aGVyZSB0aGUgd3JpdGluZyBzdG9wcGVkCisgICAgICogQHNlZSAjZ2V0Q29tcHJlc3Npb25MZW5ndGgoU3RyaW5nKQorICAgICAqIEBleGNlcHRpb24gQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHRocm93biBpZiBzaXplIG9mIGJ1ZmZlciBpcyAKKyAgICAgKiAgICAgICAgICAgIHRvbyBzbWFsbCBmb3IgdGhlIG91dHB1dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBjb21wcmVzcyhTdHJpbmcgc291cmNlLCBieXRlIGJ1ZmZlcltdLCBpbnQgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIGludCBwcmV2ID0gMDsKKyAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHNvdXJjZSk7CisgICAgICAgIGludCBjb2RlcG9pbnQgPSBpdGVyYXRvci5uZXh0Q29kZVBvaW50KCk7CisgICAgICAgIHdoaWxlIChjb2RlcG9pbnQgIT0gVUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgIGlmIChwcmV2IDwgMHg0ZTAwIHx8IHByZXYgPj0gMHhhMDAwKSB7CisgICAgICAgICAgICAgICAgcHJldiA9IChwcmV2ICYgfjB4N2YpIC0gU0xPUEVfUkVBQ0hfTkVHXzFfOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFVuaWhhbiBVKzRlMDAuLlUrOWZhNToKKyAgICAgICAgICAgICAgICAvLyBkb3VibGUtYnl0ZXMgZG93biBmcm9tIHRoZSB1cHBlciBlbmQKKyAgICAgICAgICAgICAgICBwcmV2ID0gMHg5ZmZmIC0gU0xPUEVfUkVBQ0hfUE9TXzJfOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9IHdyaXRlRGlmZihjb2RlcG9pbnQgLSBwcmV2LCBidWZmZXIsIG9mZnNldCk7CisgICAgICAgICAgICBwcmV2ID0gY29kZXBvaW50OworICAgICAgICAgICAgY29kZXBvaW50ID0gaXRlcmF0b3IubmV4dENvZGVQb2ludCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgfQorICAgICAgICAKKyAgICAvKiogCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgIGJ5dGVzIHRoYXQgY29tcHJlc3MoKSB3b3VsZCB3cml0ZS4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRleHQgc291cmNlIHN0cmluZworICAgICAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgQk9DVSByZXN1bHQgCisgICAgICogQHNlZSAjY29tcHJlc3MoU3RyaW5nLCBieXRlW10sIGludCkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRDb21wcmVzc2lvbkxlbmd0aChTdHJpbmcgc291cmNlKSAKKyAgICB7CisgICAgICAgIGludCBwcmV2ID0gMDsKKyAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyYXRvciA9ICBVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2Uoc291cmNlKTsKKyAgICAgICAgaW50IGNvZGVwb2ludCA9IGl0ZXJhdG9yLm5leHRDb2RlUG9pbnQoKTsKKyAgICAgICAgd2hpbGUgKGNvZGVwb2ludCAhPSBVQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgaWYgKHByZXYgPCAweDRlMDAgfHwgcHJldiA+PSAweGEwMDApIHsKKyAgICAgICAgICAgICAgICBwcmV2ID0gKHByZXYgJiB+MHg3ZikgLSBTTE9QRV9SRUFDSF9ORUdfMV87CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVW5paGFuIFUrNGUwMC4uVSs5ZmE1OgorICAgICAgICAgICAgICAgIC8vIGRvdWJsZS1ieXRlcyBkb3duIGZyb20gdGhlIHVwcGVyIGVuZAorICAgICAgICAgICAgICAgIHByZXYgPSAweDlmZmYgLSBTTE9QRV9SRUFDSF9QT1NfMl87CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgY29kZXBvaW50ID0gaXRlcmF0b3IubmV4dENvZGVQb2ludCgpOworICAgICAgICAgICAgcmVzdWx0ICs9IGxlbmd0aE9mRGlmZihjb2RlcG9pbnQgLSBwcmV2KTsKKyAgICAgICAgICAgIHByZXYgPSBjb2RlcG9pbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBwdWJsaWMgc2V0dGVyIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAvLyBwdWJsaWMgZ2V0dGVyIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAKKyAgICAvLyBwdWJsaWMgb3RoZXIgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLy8gcHJvdGVjdGVkIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLy8gcHJvdGVjdGVkIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvLyBwcm90ZWN0ZWQgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqIAorICAgICAqIERvIG5vdCB1c2UgYnl0ZSB2YWx1ZXMgMCwgMSwgMiBiZWNhdXNlIHRoZXkgYXJlIHNlcGFyYXRvcnMgaW4gc29ydCBrZXlzLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTTE9QRV9NSU5fID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0xPUEVfTUFYXyA9IDB4ZmY7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX01JRERMRV8gPSAweDgxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTTE9QRV9UQUlMX0NPVU5UXyA9IFNMT1BFX01BWF8gLSBTTE9QRV9NSU5fICsgMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0xPUEVfTUFYX0JZVEVTXyA9IDQ7CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgbGVhZCBieXRlczoKKyAgICAgKiAxICAgICAgICBtaWRkbGUgYnl0ZSBmb3IgMAorICAgICAqIDIqODA9MTYwIHNpbmdsZSBieXRlcyBmb3IgIT0wCisgICAgICogMio0Mj04NCAgZm9yIGRvdWJsZS1ieXRlIHZhbHVlcworICAgICAqIDIqMz02ICAgIGZvciAzLWJ5dGUgdmFsdWVzCisgICAgICogMioxPTIgICAgZm9yIDQtYnl0ZSB2YWx1ZXMKKyAgICAgKgorICAgICAqIFRoZSBzdW0gbXVzdCBiZSA8PVNMT1BFX1RBSUxfQ09VTlQuCisgICAgICoKKyAgICAgKiBXaHkgdGhlc2UgbnVtYmVycz8KKyAgICAgKiAtIFRoZXJlIHNob3VsZCBiZSA+PTEyOCBzaW5nbGUtYnl0ZSB2YWx1ZXMgdG8gY292ZXIgMTI4LWJsb2NrcworICAgICAqICAgd2l0aCBzbWFsbCBzY3JpcHRzLgorICAgICAqIC0gVGhlcmUgc2hvdWxkIGJlID49MjA5MDIgc2luZ2xlL2RvdWJsZS1ieXRlIHZhbHVlcyB0byBjb3ZlciBVbmloYW4uCisgICAgICogLSBJdCBoZWxwcyBDSksgRXh0ZW5zaW9uIEIgc29tZSBpZiB0aGVyZSBhcmUgMy1ieXRlIHZhbHVlcyB0aGF0IGNvdmVyCisgICAgICogICB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGVtIGFuZCBVbmloYW4uCisgICAgICogICBUaGlzIGFsc28gaGVscHMgdG8ganVtcCBhbW9uZyBkaXN0YW50IHBsYWNlcyBpbiB0aGUgQk1QLgorICAgICAqIC0gRm91ci1ieXRlIHZhbHVlcyBhcmUgbmVjZXNzYXJ5IHRvIGNvdmVyIHRoZSByZXN0IG9mIFVuaWNvZGUuCisgICAgICoKKyAgICAgKiBTeW1tZXRyaWNhbCBsZWFkIGJ5dGUgY291bnRzIGFyZSBmb3IgY29udmVuaWVuY2UuCisgICAgICogV2l0aCBhbiBlcXVhbCBkaXN0cmlidXRpb24gb2YgZXZlbiBhbmQgb2RkIGRpZmZlcmVuY2VzIHRoZXJlIGlzIGFsc28KKyAgICAgKiBubyBhZHZhbnRhZ2UgdG8gYXN5bW1ldHJpY2FsIGxlYWQgYnl0ZSBjb3VudHMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX1NJTkdMRV8gPSA4MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0xPUEVfTEVBRF8yXyA9IDQyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTTE9QRV9MRUFEXzNfID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0xPUEVfTEVBRF80XyA9IDE7CisKKyAgICAvKiogCisgICAgICogVGhlIGRpZmZlcmVuY2UgdmFsdWUgcmFuZ2UgZm9yIHNpbmdsZS1ieXRlcnMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX1JFQUNIX1BPU18xXyA9IFNMT1BFX1NJTkdMRV87CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX1JFQUNIX05FR18xXyA9ICgtU0xPUEVfU0lOR0xFXyk7CisKKyAgICAvKiogCisgICAgICogVGhlIGRpZmZlcmVuY2UgdmFsdWUgcmFuZ2UgZm9yIGRvdWJsZS1ieXRlcnMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX1JFQUNIX1BPU18yXyA9IAorICAgICAgICBTTE9QRV9MRUFEXzJfICogU0xPUEVfVEFJTF9DT1VOVF8gKyBTTE9QRV9MRUFEXzJfIC0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0xPUEVfUkVBQ0hfTkVHXzJfID0gKC1TTE9QRV9SRUFDSF9QT1NfMl8gLSAxKTsKKworICAgIC8qKiAKKyAgICAgKiBUaGUgZGlmZmVyZW5jZSB2YWx1ZSByYW5nZSBmb3IgMy1ieXRlcnMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX1JFQUNIX1BPU18zXyA9IFNMT1BFX0xFQURfM18gCisgICAgICAgICogU0xPUEVfVEFJTF9DT1VOVF8gCisgICAgICAgICogU0xPUEVfVEFJTF9DT1VOVF8gCisgICAgICAgICsgKFNMT1BFX0xFQURfM18gLSAxKQorICAgICAgICAqIFNMT1BFX1RBSUxfQ09VTlRfICsKKyAgICAgICAgKFNMT1BFX1RBSUxfQ09VTlRfIC0gMSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX1JFQUNIX05FR18zXyA9ICgtU0xPUEVfUkVBQ0hfUE9TXzNfIC0gMSk7CisKKyAgICAvKiogCisgICAgICogVGhlIGxlYWQgYnl0ZSBzdGFydCB2YWx1ZXMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX1NUQVJUX1BPU18yXyA9IFNMT1BFX01JRERMRV8gCisgICAgICAgICsgU0xPUEVfU0lOR0xFXyArIDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNMT1BFX1NUQVJUX1BPU18zXyA9IFNMT1BFX1NUQVJUX1BPU18yXyAKKyAgICAgICAgKyBTTE9QRV9MRUFEXzJfOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTTE9QRV9TVEFSVF9ORUdfMl8gPSBTTE9QRV9NSURETEVfICsgCisgICAgICAgIFNMT1BFX1JFQUNIX05FR18xXzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0xPUEVfU1RBUlRfTkVHXzNfID0gU0xPUEVfU1RBUlRfTkVHXzJfCisgICAgICAgIC0gU0xPUEVfTEVBRF8yXzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgcHJpdmF0ZSB0byBwcmV2ZW50IGluaXRpYWxpemF0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBCT0NVKCkKKyAgICB7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogSW50ZWdlciBkaXZpc2lvbiBhbmQgbW9kdWxvIHdpdGggbmVnYXRpdmUgbnVtZXJhdG9ycworICAgICAqIHlpZWxkcyBuZWdhdGl2ZSBtb2R1bG8gcmVzdWx0cyBhbmQgcXVvdGllbnRzIHRoYXQgYXJlIG9uZSBtb3JlIHRoYW4KKyAgICAgKiB3aGF0IHdlIG5lZWQgaGVyZS4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIHdoaWNoIG9wZXJhdGlvbnMgYXJlIHRvIGJlIHBlcmZvcm1lZCBvbgorICAgICAqIEBwYXJhbSBmYWN0b3IgdGhlIGZhY3RvciB0byB1c2UgZm9yIGRpdmlzaW9uCisgICAgICogQHJldHVybiAocmVzdWx0IG9mIGRpdmlzaW9uKSA8PCAzMiB8IG1vZHVsbyAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIGdldE5lZ0Rpdk1vZChpbnQgbnVtYmVyLCBpbnQgZmFjdG9yKSAKKyAgICB7CisgICAgICAgIGludCBtb2R1bG8gPSBudW1iZXIgJSBmYWN0b3I7IAorICAgICAgICBsb25nIHJlc3VsdCA9IG51bWJlciAvIGZhY3RvcjsKKyAgICAgICAgaWYgKG1vZHVsbyA8IDApIHsgCisgICAgICAgICAgICAtLSByZXN1bHQ7IAorICAgICAgICAgICAgbW9kdWxvICs9IGZhY3RvcjsgCisgICAgICAgIH0gCisgICAgICAgIHJldHVybiAocmVzdWx0IDw8IDMyKSB8IG1vZHVsbzsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIEVuY29kZSBvbmUgZGlmZmVyZW5jZSB2YWx1ZSAtMHgxMGZmZmYuLisweDEwZmZmZiBpbiAxLi4zIGJ5dGVzLAorICAgICAqIHByZXNlcnZpbmcgbGV4aWNhbCBvcmRlcgorICAgICAqIEBwYXJhbSBkaWZmCisgICAgICogQHBhcmFtIGJ1ZmZlciBieXRlIGJ1ZmZlciB0byBhcHBlbmQgdG8KKyAgICAgKiBAcGFyYW0gb2Zmc2V0IHRvIHRoZSBieXRlIGJ1ZmZlciB0byBzdGFydCBhcHBlbmRpbmcKKyAgICAgKiBAcmV0dXJuIGVuZCBvZmZzZXQgd2hlcmUgdGhlIGFwcGVuZGluZyBzdG9wcworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCB3cml0ZURpZmYoaW50IGRpZmYsIGJ5dGUgYnVmZmVyW10sIGludCBvZmZzZXQpIAorICAgIHsKKyAgICAgICAgaWYgKGRpZmYgPj0gU0xPUEVfUkVBQ0hfTkVHXzFfKSB7CisgICAgICAgICAgICBpZiAoZGlmZiA8PSBTTE9QRV9SRUFDSF9QT1NfMV8pIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0ICsrXSA9IChieXRlKShTTE9QRV9NSURETEVfICsgZGlmZik7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAoZGlmZiA8PSBTTE9QRV9SRUFDSF9QT1NfMl8pIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0ICsrXSA9IChieXRlKShTTE9QRV9TVEFSVF9QT1NfMl8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZGlmZiAvIFNMT1BFX1RBSUxfQ09VTlRfKSk7CisgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCArK10gPSAoYnl0ZSkoU0xPUEVfTUlOXyArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWZmICUgU0xPUEVfVEFJTF9DT1VOVF8pKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIGlmIChkaWZmIDw9IFNMT1BFX1JFQUNIX1BPU18zXykgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAyXSA9IChieXRlKShTTE9QRV9NSU5fIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChkaWZmICUgU0xPUEVfVEFJTF9DT1VOVF8pKTsKKyAgICAgICAgICAgICAgICBkaWZmIC89IFNMT1BFX1RBSUxfQ09VTlRfOworICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAxXSA9IChieXRlKShTTE9QRV9NSU5fIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChkaWZmICUgU0xPUEVfVEFJTF9DT1VOVF8pKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSA9IChieXRlKShTTE9QRV9TVEFSVF9QT1NfM18gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZGlmZiAvIFNMT1BFX1RBSUxfQ09VTlRfKSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDM7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCArIDNdID0gKGJ5dGUpKFNMT1BFX01JTl8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGlmZiAlIFNMT1BFX1RBSUxfQ09VTlRfKTsKKyAgICAgICAgICAgICAgICBkaWZmIC89IFNMT1BFX1RBSUxfQ09VTlRfOworICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXRdID0gKGJ5dGUpKFNMT1BFX01JTl8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkaWZmICUgU0xPUEVfVEFJTF9DT1VOVF8pOworICAgICAgICAgICAgICAgIGRpZmYgLz0gU0xPUEVfVEFJTF9DT1VOVF87CisgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gKGJ5dGUpKFNMT1BFX01JTl8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGlmZiAlIFNMT1BFX1RBSUxfQ09VTlRfKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSA9IChieXRlKVNMT1BFX01BWF87CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbG9uZyBkaXZpc2lvbiA9IGdldE5lZ0Rpdk1vZChkaWZmLCBTTE9QRV9UQUlMX0NPVU5UXyk7CisgICAgICAgICAgICBpbnQgbW9kdWxvID0gKGludClkaXZpc2lvbjsKKyAgICAgICAgICAgIGlmIChkaWZmID49IFNMT1BFX1JFQUNIX05FR18yXykgeworICAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KShkaXZpc2lvbiA+PiAzMik7CisgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCArK10gPSAoYnl0ZSkoU0xPUEVfU1RBUlRfTkVHXzJfICsgZGlmZik7CisgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCArK10gPSAoYnl0ZSkoU0xPUEVfTUlOXyArIG1vZHVsbyk7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAoZGlmZiA+PSBTTE9QRV9SRUFDSF9ORUdfM18pIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSAoYnl0ZSkoU0xPUEVfTUlOXyArIG1vZHVsbyk7CisgICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpKGRpdmlzaW9uID4+IDMyKTsKKyAgICAgICAgICAgICAgICBkaXZpc2lvbiA9IGdldE5lZ0Rpdk1vZChkaWZmLCBTTE9QRV9UQUlMX0NPVU5UXyk7CisgICAgICAgICAgICAgICAgbW9kdWxvID0gKGludClkaXZpc2lvbjsKKyAgICAgICAgICAgICAgICBkaWZmID0gKGludCkoZGl2aXNpb24gPj4gMzIpOworICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAxXSA9IChieXRlKShTTE9QRV9NSU5fICsgbW9kdWxvKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSA9IChieXRlKShTTE9QRV9TVEFSVF9ORUdfM18gKyBkaWZmKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0ICsgM10gPSAoYnl0ZSkoU0xPUEVfTUlOXyArIG1vZHVsbyk7CisgICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpKGRpdmlzaW9uID4+IDMyKTsKKyAgICAgICAgICAgICAgICBkaXZpc2lvbiA9IGdldE5lZ0Rpdk1vZChkaWZmLCBTTE9QRV9UQUlMX0NPVU5UXyk7CisgICAgICAgICAgICAgICAgbW9kdWxvID0gKGludClkaXZpc2lvbjsKKyAgICAgICAgICAgICAgICBkaWZmID0gKGludCkoZGl2aXNpb24gPj4gMzIpOworICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAyXSA9IChieXRlKShTTE9QRV9NSU5fICsgbW9kdWxvKTsKKyAgICAgICAgICAgICAgICBkaXZpc2lvbiA9IGdldE5lZ0Rpdk1vZChkaWZmLCBTTE9QRV9UQUlMX0NPVU5UXyk7CisgICAgICAgICAgICAgICAgbW9kdWxvID0gKGludClkaXZpc2lvbjsKKyAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSAoYnl0ZSkoU0xPUEVfTUlOXyArIG1vZHVsbyk7CisgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldF0gPSBTTE9QRV9NSU5fOworICAgICAgICAgICAgICAgIG9mZnNldCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBIb3cgbWFueSBieXRlcyB3b3VsZCB3cml0ZURpZmYoKSB3cml0ZT8gCisgICAgICogQHBhcmFtIGRpZmYKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgbGVuZ3RoT2ZEaWZmKGludCBkaWZmKSAKKyAgICB7CisgICAgICAgIGlmIChkaWZmID49IFNMT1BFX1JFQUNIX05FR18xXykgeworICAgICAgICAgICAgaWYgKGRpZmYgPD0gU0xPUEVfUkVBQ0hfUE9TXzFfKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAoZGlmZiA8PSBTTE9QRV9SRUFDSF9QT1NfMl8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIGlmKGRpZmYgPD0gU0xPUEVfUkVBQ0hfUE9TXzNfKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGRpZmYgPj0gU0xPUEVfUkVBQ0hfTkVHXzJfKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAoZGlmZiA+PSBTTE9QRV9SRUFDSF9ORUdfM18pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL0NoYXJUcmllLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9DaGFyVHJpZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyNjE1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9DaGFyVHJpZS5qYXZhCkBAIC0wLDAgKzEsMjUxIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL0NoYXJUcmllLmphdmEsdiAkCisqICREYXRlOiAyMDAyLzEwLzMxIDAxOjEwOjE5ICQKKyogJFJldmlzaW9uOiAxLjkgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKy8qKgorICogVHJpZSBpbXBsZW1lbnRhdGlvbiB3aGljaCBzdG9yZXMgZGF0YSBpbiBjaGFyLCAxNiBiaXRzLgorICogQGF1dGhvciBzeW53ZWUKKyAqIEBzZWUgY29tLmlibS5pY3UudXRpbC5UcmllCisgKiBAc2luY2UgcmVsZWFzZSAyLjEsIEphbiAwMSAyMDAyCisgKi8KKworIC8vIG5vdGUgdGhhdCBpIG5lZWQgdG8gaGFuZGxlIHRoZSBibG9jayBjYWxjdWxhdGlvbnMgbGF0ZXIsIHNpbmNlIGNoYXJ0cmllCisgLy8gaW4gaWN1NGMgdXNlcyB0aGUgc2FtZSBpbmRleCBhcnJheS4KK3B1YmxpYyBjbGFzcyBDaGFyVHJpZSBleHRlbmRzIFRyaWUKK3sKKyAgICAvLyBwdWJsaWMgY29uc3RydWN0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgKiA8cD5DcmVhdGVzIGEgbmV3IFRyaWUgd2l0aCB0aGUgc2V0dGluZ3MgZm9yIHRoZSB0cmllIGRhdGEuPC9wPgorICAgICogPHA+VW5zZXJpYWxpemUgdGhlIDMyLWJpdC1hbGlnbmVkIGlucHV0IHN0cmVhbSBhbmQgdXNlIHRoZSBkYXRhIGZvciB0aGUgCisgICAgKiB0cmllLjwvcD4KKyAgICAqIEBwYXJhbSBpbnB1dFN0cmVhbSBmaWxlIGlucHV0IHN0cmVhbSB0byBhIElDVSBkYXRhIGZpbGUsIGNvbnRhaW5pbmcgCisgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlIHRyaWUKKyAgICAqIEBwYXJhbSBkYXRhTWFuaXB1bGF0ZSwgb2JqZWN0IHdoaWNoIHByb3ZpZGVzIG1ldGhvZHMgdG8gcGFyc2UgdGhlIGNoYXIgCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEKKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3duIHdoZW4gZGF0YSByZWFkaW5nIGZhaWxzCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwdWJsaWMgQ2hhclRyaWUoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIAorICAgICAgICAgICAgICAgICAgICBEYXRhTWFuaXB1bGF0ZSBkYXRhTWFuaXB1bGF0ZSkgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlcihpbnB1dFN0cmVhbSwgZGF0YU1hbmlwdWxhdGUpOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc0NoYXJUcmllKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGEgZ2l2ZW4gZG9lcyBub3QgYmVsb25nIHRvIGEgY2hhciB0cmllLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICogR2V0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2RlcG9pbnQuCisgICAgKiBJZiBubyB2YWx1ZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvZGVwb2ludCwgYSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUKKyAgICAqIHJldHVybmVkLgorICAgICogQHBhcmFtIGNoIGNvZGVwb2ludAorICAgICogQHJldHVybiBvZmZzZXQgdG8gZGF0YQorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHVibGljIGZpbmFsIGNoYXIgZ2V0Q29kZVBvaW50VmFsdWUoaW50IGNoKQorICAgIHsKKyAgICAgICAgaW50IG9mZnNldCA9IGdldENvZGVQb2ludE9mZnNldChjaCk7CisgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhX1tvZmZzZXRdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2luaXRpYWxWYWx1ZV87CisgICAgfQorCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSB2YWx1ZSB0byB0aGUgZGF0YSB3aGljaCB0aGlzIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3RlciBwb2ludHMKKyAgICAqIHRvLgorICAgICogUmV0dXJuZWQgZGF0YSBtYXkgY29udGFpbiBmb2xkaW5nIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIG5leHQKKyAgICAqIHRyYWlsaW5nIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIuCisgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBndWFyYW50ZWUgY29ycmVjdCByZXN1bHRzIGZvciB0cmFpbCBzdXJyb2dhdGVzLgorICAgICogQHBhcmFtIGNoIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3RlcgorICAgICogQHJldHVybiBkYXRhIHZhbHVlCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgY2hhciBnZXRMZWFkVmFsdWUoY2hhciBjaCkKKyAgICB7CisgICAgICAgcmV0dXJuIG1fZGF0YV9bZ2V0TGVhZE9mZnNldChjaCldOworICAgIH0KKworICAgIC8qKgorICAgICogR2V0IHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIEJNUCBjb2RlIHBvaW50LgorICAgICogTGVhZCBzdXJyb2dhdGUgY29kZSBwb2ludHMgYXJlIHRyZWF0ZWQgYXMgbm9ybWFsIGNvZGUgcG9pbnRzLCB3aXRoCisgICAgKiB1bmZvbGRlZCB2YWx1ZXMgdGhhdCBtYXkgZGlmZmVyIGZyb20gZ2V0TGVhZFZhbHVlKCkgcmVzdWx0cy4KKyAgICAqIEBwYXJhbSBjaCB0aGUgaW5wdXQgQk1QIGNvZGUgcG9pbnQKKyAgICAqIEByZXR1cm4gdHJpZSBkYXRhIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgQk1QIGNvZGVwb2ludAorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHVibGljIGZpbmFsIGNoYXIgZ2V0Qk1QVmFsdWUoY2hhciBjaCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGFfW2dldEJNUE9mZnNldChjaCldOworICAgIH0KKworICAgIC8qKgorICAgICogR2V0IHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBwYWlyIG9mIHN1cnJvZ2F0ZXMuCisgICAgKiBAcGFyYW0gbGVhZCBhIGxlYWQgc3Vycm9nYXRlCisgICAgKiBAcGFyYW0gdHJhaWwgYSB0cmFpbCBzdXJyb2dhdGUKKyAgICAqIEBwYXJhbSB0cmllIGRhdGEgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXJyb2dhdGUgY2hhcmFjdGVycworICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHVibGljIGZpbmFsIGNoYXIgZ2V0U3Vycm9nYXRlVmFsdWUoY2hhciBsZWFkLCBjaGFyIHRyYWlsKQorICAgIHsKKyAgICAJaW50IG9mZnNldCA9IGdldFN1cnJvZ2F0ZU9mZnNldChsZWFkLCB0cmFpbCk7CisgICAgCWlmIChvZmZzZXQgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhX1tvZmZzZXRdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2luaXRpYWxWYWx1ZV87CisgICAgfQorCisgICAgLyoqCisgICAgKiA8cD5HZXQgYSB2YWx1ZSBmcm9tIGEgZm9sZGluZyBvZmZzZXQgKGZyb20gdGhlIHZhbHVlIG9mIGEgbGVhZCBzdXJyb2dhdGUpCisgICAgKiBhbmQgYSB0cmFpbCBzdXJyb2dhdGUuPC9wPgorICAgICogPHA+SWYgdGhlIAorICAgICogQHBhcmFtIGxlYWR2YWx1ZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGxlYWQgc3Vycm9nYXRlIHdoaWNoIGNvbnRhaW5zCisgICAgKiAgICAgICAgdGhlIGZvbGRpbmcgb2Zmc2V0CisgICAgKiBAcGFyYW0gdHJhaWwgc3Vycm9nYXRlCisgICAgKiBAcmV0dXJuIHRyaWUgZGF0YSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRyYWlsIGNoYXJhY3RlcgorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHVibGljIGZpbmFsIGNoYXIgZ2V0VHJhaWxWYWx1ZShpbnQgbGVhZHZhbHVlLCBjaGFyIHRyYWlsKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGF0YU1hbmlwdWxhdGVfID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBmaWVsZCBEYXRhTWFuaXB1bGF0ZSBpbiB0aGlzIFRyaWUgaXMgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGludCBvZmZzZXQgPSBtX2RhdGFNYW5pcHVsYXRlXy5nZXRGb2xkaW5nT2Zmc2V0KGxlYWR2YWx1ZSk7CisgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7CisJICAgICAgICByZXR1cm4gbV9kYXRhX1tnZXRSYXdPZmZzZXQob2Zmc2V0LAorIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcikodHJhaWwgJiBTVVJST0dBVEVfTUFTS18pKV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1faW5pdGlhbFZhbHVlXzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogPHA+R2V0cyB0aGUgbGF0aW4gMSBmYXN0IHBhdGggdmFsdWUuPC9wPgorICAgICAqIDxwPk5vdGUgdGhpcyBvbmx5IHdvcmtzIGlmIGxhdGluIDEgY2hhcmFjdGVycyBoYXZlIHRoZWlyIG93biBsaW5lYXIgCisgICAgICogYXJyYXkuPC9wPgorICAgICAqIEBwYXJhbSBjaCBsYXRpbiAxIGNoYXJhY3RlcnMKKyAgICAgKiBAcmV0dXJuIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBsYXRpbiBjaGFyYWN0ZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgY2hhciBnZXRMYXRpbjFMaW5lYXJWYWx1ZShjaGFyIGNoKSAKKyAgICB7CisgICAgCXJldHVybiBtX2RhdGFfW0lOREVYX1NUQUdFXzNfTUFTS18gKyAxICsgbV9kYXRhT2Zmc2V0XyArIGNoXTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBhcmd1bWVudCBUcmllIGhhcyB0aGUgc2FtZSBkYXRhIGFzIHRoaXMgVHJpZQorICAgICAqIEBwYXJhbSBvdGhlciBUcmllIHRvIGNoZWNrCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBUcmllIGhhcyB0aGUgc2FtZSBkYXRhIGFzIHRoaXMgVHJpZSwgZmFsc2UKKyAgICAgKiAgICAgICAgIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIAorICAgIHsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBzdXBlci5lcXVhbHMob3RoZXIpOworICAgICAgICBpZiAocmVzdWx0ICYmIG90aGVyIGluc3RhbmNlb2YgQ2hhclRyaWUpIHsKKyAgICAgICAgICAgIENoYXJUcmllIG90aGVydHJpZSA9IChDaGFyVHJpZSlvdGhlcjsKKyAgICAgICAgICAgIHJldHVybiBtX2luaXRpYWxWYWx1ZV8gPT0gb3RoZXJ0cmllLm1faW5pdGlhbFZhbHVlXzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gcHJvdGVjdGVkIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICogPHA+UGFyc2VzIHRoZSBpbnB1dCBzdHJlYW0gYW5kIHN0b3JlcyBpdHMgdHJpZSBjb250ZW50IGludG8gYSBpbmRleCBhbmQKKyAgICAqIGRhdGEgYXJyYXk8L3A+CisgICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0gZGF0YSBpbnB1dCBzdHJlYW0gY29udGFpbmluZyB0cmllIGRhdGEKKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3duIHdoZW4gZGF0YSByZWFkaW5nIGZhaWxzCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCB1bnNlcmlhbGl6ZShJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIERhdGFJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBEYXRhSW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOworICAgICAgICBpbnQgaW5kZXhEYXRhTGVuZ3RoID0gbV9kYXRhT2Zmc2V0XyArIG1fZGF0YUxlbmd0aF87CisgICAgICAgIG1faW5kZXhfID0gbmV3IGNoYXJbaW5kZXhEYXRhTGVuZ3RoXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRleERhdGFMZW5ndGg7IGkgKyspIHsKKyAgICAgICAgICAgIG1faW5kZXhfW2ldID0gaW5wdXQucmVhZENoYXIoKTsKKyAgICAgICAgfQorICAgICAgICBtX2RhdGFfICAgICAgICAgICA9IG1faW5kZXhfOworICAgICAgICBtX2luaXRpYWxWYWx1ZV8gICA9IG1fZGF0YV9bbV9kYXRhT2Zmc2V0X107CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogR2V0cyB0aGUgb2Zmc2V0IHRvIHRoZSBkYXRhIHdoaWNoIHRoZSBzdXJyb2dhdGUgcGFpciBwb2ludHMgdG8uCisgICAgKiBAcGFyYW0gbGVhZCBsZWFkIHN1cnJvZ2F0ZQorICAgICogQHBhcmFtIHRyYWlsIHRyYWlsaW5nIHN1cnJvZ2F0ZQorICAgICogQHJldHVybiBvZmZzZXQgdG8gZGF0YQorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRTdXJyb2dhdGVPZmZzZXQoY2hhciBsZWFkLCBjaGFyIHRyYWlsKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGF0YU1hbmlwdWxhdGVfID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBmaWVsZCBEYXRhTWFuaXB1bGF0ZSBpbiB0aGlzIFRyaWUgaXMgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBnZXQgZm9sZCBwb3NpdGlvbiBmb3IgdGhlIG5leHQgdHJhaWwgc3Vycm9nYXRlCisgICAgICAgIGludCBvZmZzZXQgPSBtX2RhdGFNYW5pcHVsYXRlXy5nZXRGb2xkaW5nT2Zmc2V0KGdldExlYWRWYWx1ZShsZWFkKSk7CisKKyAgICAgICAgLy8gZ2V0IHRoZSByZWFsIGRhdGEgZnJvbSB0aGUgZm9sZGVkIGxlYWQvdHJhaWwgdW5pdHMKKyAgICAgICAgaWYgKG9mZnNldCA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRSYXdPZmZzZXQob2Zmc2V0LCAoY2hhcikodHJhaWwgJiBTVVJST0dBVEVfTUFTS18pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJldHVybiAtMSBpZiB0aGVyZSBpcyBhbiBlcnJvciwgaW4gdGhpcyBjYXNlIHdlIHJldHVybiB0aGUgZGVmYXVsdAorICAgICAgICAvLyB2YWx1ZTogbV9pbml0aWFsVmFsdWVfCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCB0aGUgYXJndW1lbnQgaW5kZXguCisgICAgKiBGb3IgdXNlIGludGVybmFsbHkgaW4gY29tLmlibS5pY3UudXRpbC5UcmllRW51bWVyYXRpb24uCisgICAgKiBAcGFyYW0gaW5kZXggdmFsdWUgYXQgaW5kZXggd2lsbCBiZSByZXRyaWV2ZWQKKyAgICAqIEByZXR1cm4gMzIgYml0IHZhbHVlCisgICAgKiBAc2VlIGNvbS5pYm0uaWN1LnV0aWwuVHJpZUVudW1lcmF0aW9uCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldFZhbHVlKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGFfW2luZGV4XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZQorICAgICogQHJldHVybiAzMiBiaXQgdmFsdWUgCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldEluaXRpYWxWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbml0aWFsVmFsdWVfOworICAgIH0KKyAgCisgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICogRGVmYXVsdCB2YWx1ZQorICAgICovCisgICAgcHJpdmF0ZSBjaGFyIG1faW5pdGlhbFZhbHVlXzsKKyAgICAvKioKKyAgICAqIEFycmF5IG9mIGNoYXIgZGF0YQorICAgICovCisgICAgcHJvdGVjdGVkIGNoYXIgbV9kYXRhX1tdOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL0NoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyZWU2OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0NoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAvdXNyL2N2cy9pY3U0ai9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VDaGFyYWN0ZXJJdGVyYXRvci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA2LzIwIDAxOjE4OjA3ICQgCisgKiAkUmV2aXNpb246IDEuMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworCitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCBDaGFyYWN0ZXJJdGVyYXRvciBhbmQgaW1wbGVtZW50cyB0aGUgCisgKiBVQ2hhcmFjdGVySXRlcmF0b3IgcHJvdG9jb2wKKyAqIEBhdXRob3IgcmFtCisgKi8KKworcHVibGljIGNsYXNzIENoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlciBleHRlbmRzIFVDaGFyYWN0ZXJJdGVyYXRvciB7CisgICAgCisgICAgcHJpdmF0ZSBDaGFyYWN0ZXJJdGVyYXRvciBpdGVyYXRvcjsKKyAgICAKKyAgICAKKyAgICBwdWJsaWMgQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyKENoYXJhY3Rlckl0ZXJhdG9yIGl0ZXIpeworICAgICAgICBpZihpdGVyPT1udWxsKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICBpdGVyYXRvciAgICAgPSBpdGVyOyAgIAorICAgIH0KKworICAgIC8qKgorICAgICAqIEBzZWUgVUNoYXJhY3Rlckl0ZXJhdG9yI2N1cnJlbnQoKQorICAgICAqLworICAgIHB1YmxpYyBpbnQgY3VycmVudCgpIHsKKyAgICAgICAgaW50IGMgPSBpdGVyYXRvci5jdXJyZW50KCk7CisgICAgICAgIGlmKGM9PWl0ZXJhdG9yLkRPTkUpeworCQkgIHJldHVybiBET05FOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzZWUgVUNoYXJhY3Rlckl0ZXJhdG9yI2dldExlbmd0aCgpCisgICAgICovCisgICAgcHVibGljIGludCBnZXRMZW5ndGgoKSB7CisJICAgIHJldHVybiAoaXRlcmF0b3IuZ2V0RW5kSW5kZXgoKSAtIGl0ZXJhdG9yLmdldEJlZ2luSW5kZXgoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHNlZSBVQ2hhcmFjdGVySXRlcmF0b3IjZ2V0SW5kZXgoKQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKSB7CisgICAgICAgIHJldHVybiBpdGVyYXRvci5nZXRJbmRleCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzZWUgVUNoYXJhY3Rlckl0ZXJhdG9yI25leHQoKQorICAgICAqLworICAgIHB1YmxpYyBpbnQgbmV4dCgpIHsKKyAgICAgICAgaW50IGkgPSBpdGVyYXRvci5jdXJyZW50KCk7CisgICAgICAgIGl0ZXJhdG9yLm5leHQoKTsKKyAgICAgICAgaWYoaT09aXRlcmF0b3IuRE9ORSl7ICAKKwkJICByZXR1cm4gRE9ORTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAc2VlIFVDaGFyYWN0ZXJJdGVyYXRvciNwcmV2aW91cygpCisgICAgICovCisgICAgcHVibGljIGludCBwcmV2aW91cygpIHsKKyAgICAgICAgaW50IGkgPSBpdGVyYXRvci5wcmV2aW91cygpOworICAgICAgICBpZihpPT1pdGVyYXRvci5ET05FKXsKKyAgICAgICAgICAgIHJldHVybiBET05FOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzZWUgVUNoYXJhY3Rlckl0ZXJhdG9yI3NldEluZGV4KGludCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpIHsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgaXRlcmF0b3Iuc2V0SW5kZXgoaW5kZXgpOworICAgICAgICB9Y2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpeworICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBzZWUgVUNoYXJhY3Rlckl0ZXJhdG9yI3NldFRvTGltaXQoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRvTGltaXQoKSB7CisJCWl0ZXJhdG9yLnNldEluZGV4KGl0ZXJhdG9yLmdldEVuZEluZGV4KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzZWUgVUNoYXJhY3Rlckl0ZXJhdG9yI2dldFRleHQoY2hhcltdKQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0VGV4dChjaGFyW10gZmlsbEluLCBpbnQgb2Zmc2V0KXsKKyAgICAJaW50IGxlbmd0aCA9aXRlcmF0b3IuZ2V0RW5kSW5kZXgoKSAtIGl0ZXJhdG9yLmdldEJlZ2luSW5kZXgoKTsgCisgICAgICAgIGludCBjdXJyZW50SW5kZXggPSBpdGVyYXRvci5nZXRJbmRleCgpOworICAgICAgICBpZihvZmZzZXQgPCAwIHx8IG9mZnNldCArIGxlbmd0aCA+IGZpbGxJbi5sZW5ndGgpeworICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oSW50ZWdlci50b1N0cmluZyhsZW5ndGgpKTsKKyAgICAgICAgfQorCQorICAgICAgICBmb3IgKGNoYXIgY2ggPSBpdGVyYXRvci5maXJzdCgpOyBjaCAhPSBpdGVyYXRvci5ET05FOyBjaCA9IGl0ZXJhdG9yLm5leHQoKSkgeworCSAgICAgICAgZmlsbEluW29mZnNldCsrXSA9IGNoOworCSAgICB9CisJICAgIGl0ZXJhdG9yLnNldEluZGV4KGN1cnJlbnRJbmRleCk7CisKKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBpdGVyYXRvci4gIENsb25lcyB0aGUgdW5kZXJseWluZyBjaGFyYWN0ZXIgaXRlcmF0b3IuCisgICAgICogQHNlZSBVQ2hhcmFjdGVySXRlcmF0b3IjY2xvbmUoKQorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKXsKKwkJdHJ5IHsKKwkJICAgIENoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlciByZXN1bHQgPSAoQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyKSBzdXBlci5jbG9uZSgpOworCQkgICAgcmVzdWx0Lml0ZXJhdG9yID0gKENoYXJhY3Rlckl0ZXJhdG9yKXRoaXMuaXRlcmF0b3IuY2xvbmUoKTsKKwkJICAgIHJldHVybiByZXN1bHQ7CisJCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsgICAgICAKKyAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBvbmx5IGludm9rZWQgaWYgYmFkIHVuZGVybHlpbmcgY2hhcmFjdGVyIGl0ZXJhdG9yCisJCX0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQHNlZSBVQ2hhcmFjdGVySXRlcmF0b3IjbW92ZUluZGV4KCkKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG1vdmVJbmRleChpbnQgZGVsdGEpeworICAgIAlpbnQgbGVuZ3RoID0gaXRlcmF0b3IuZ2V0RW5kSW5kZXgoKSAtIGl0ZXJhdG9yLmdldEJlZ2luSW5kZXgoKTsgCisgICAgICAgIGludCBpZHggPSBpdGVyYXRvci5nZXRJbmRleCgpK2RlbHRhOworICAgICAgICAKKyAgICAgICAgaWYoaWR4IDwgMCkgeworCSAgICAgICAgaWR4ID0gMDsKKwkJfSBlbHNlIGlmKGlkeCA+IGxlbmd0aCkgeworCQkgICAgaWR4ID0gbGVuZ3RoOworCQl9CisgICAgICAgIHJldHVybiBpdGVyYXRvci5zZXRJbmRleChpZHgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAc2VlIFVDaGFyYWN0ZXJJdGVyYXRvciNnZXRDaGFyYWN0ZXJJdGVyYXRvcigpCisgICAgICovCisgICAgcHVibGljIENoYXJhY3Rlckl0ZXJhdG9yIGdldENoYXJhY3Rlckl0ZXJhdG9yKCl7CisgICAgICAgIHJldHVybiAoQ2hhcmFjdGVySXRlcmF0b3IpaXRlcmF0b3IuY2xvbmUoKTsKKyAgICB9IAorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSUNVQmluYXJ5LmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VCaW5hcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZDAwMmM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSUNVQmluYXJ5LmphdmEKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUJpbmFyeS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTAvMDkgMjM6NTM6MjQgJAorICogJFJldmlzaW9uOiAxLjcgJAorICogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbDsKKworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCitwdWJsaWMgZmluYWwgY2xhc3MgSUNVQmluYXJ5IAoreyAgICAKKyAgICAvLyBwdWJsaWMgaW5uZXIgaW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFNwZWNpYWwgaW50ZXJmYWNlIGZvciBkYXRhIGF1dGhlbnRpY2F0aW9uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgQXV0aGVudGljYXRlCisgICAgeworICAgICAgICAvKioKKyAgICAgICAgICogTWV0aG9kIHVzZWQgaW4gSUNVQmluYXJ5LnJlYWRIZWFkZXIoKSB0byBwcm92aWRlIGRhdGEgZm9ybWF0CisgICAgICAgICAqIGF1dGhlbnRpY2F0aW9uLiAKKyAgICAgICAgICogQHBhcmFtIHZlcnNpb24gdmVyc2lvbiBvZiB0aGUgY3VycmVudCBkYXRhCisgICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBkYXRhZm9ybWF0IGlzIGFuIGFjY2VwdGFibGUgdmVyc2lvbiwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0RhdGFWZXJzaW9uQWNjZXB0YWJsZShieXRlIHZlcnNpb25bXSk7CisgICAgfQorICAgIAorICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiA8cD5JQ1UgZGF0YSBoZWFkZXIgcmVhZGVyIG1ldGhvZC4gCisgICAgKiBUYWtlcyBhIElDVSBnZW5lcmF0ZWQgYmlnLWVuZGlhbiBpbnB1dCBzdHJlYW0sIHBhcnNlIHRoZSBJQ1Ugc3RhbmRhcmQgCisgICAgKiBmaWxlIGhlYWRlciBhbmQgYXV0aGVudGljYXRlcyB0aGVtLjwvcD4KKyAgICAqIDxwPkhlYWRlciBmb3JtYXQ6IAorICAgICogPHVsPgorICAgICogICAgIDxsaT4gSGVhZGVyIHNpemUgKGNoYXIpCisgICAgKiAgICAgPGxpPiBNYWdpYyBudW1iZXIgMSAoYnl0ZSkKKyAgICAqICAgICA8bGk+IE1hZ2ljIG51bWJlciAyIChieXRlKQorICAgICogICAgIDxsaT4gUmVzdCBvZiB0aGUgaGVhZGVyIHNpemUgKGNoYXIpCisgICAgKiAgICAgPGxpPiBSZXNlcnZlZCB3b3JkIChjaGFyKQorICAgICogICAgIDxsaT4gQmlnIGVuZGlhbiBpbmRpY2F0b3IgKGJ5dGUpCisgICAgKiAgICAgPGxpPiBDaGFyYWN0ZXIgc2V0IGZhbWlseSBpbmRpY2F0b3IgKGJ5dGUpCisgICAgKiAgICAgPGxpPiBTaXplIG9mIGEgY2hhciAoYnl0ZSkgZm9yIGMrKyBhbmQgYyB1c2UKKyAgICAqICAgICA8bGk+IFJlc2VydmVkIGJ5dGUgKGJ5dGUpCisgICAgKiAgICAgPGxpPiBEYXRhIGZvcm1hdCBpZGVudGlmaWVyICg0IGJ5dGVzKSwgZWFjaCBJQ1UgZGF0YSBoYXMgaXRzIG93bgorICAgICogICAgICAgICAgaWRlbnRpZmllciB0byBkaXN0aW5ndWlzaCB0aGVtLiBbMF0gbWFqb3IgWzFdIG1pbm9yIAorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gbWlsbGkgWzNdIG1pY3JvIAorICAgICogICAgIDxsaT4gRGF0YSB2ZXJzaW9uICg0IGJ5dGVzKSwgdGhlIGNoYW5nZSB2ZXJzaW9uIG9mIHRoZSBJQ1UgZGF0YQorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswXSBtYWpvciBbMV0gbWlub3IgWzJdIG1pbGxpIFszXSBtaWNybyAKKyAgICAqICAgICA8bGk+IFVuaWNvZGUgdmVyc2lvbiAoNCBieXRlcykgdGhpcyBJQ1UgaXMgYmFzZWQgb24uCisgICAgKiA8L3VsPgorICAgICogPC9wPgorICAgICogPHA+CisgICAgKiBFeGFtcGxlIG9mIHVzZTo8YnI+CisgICAgKiA8cHJlPgorICAgICogdHJ5IHsKKyAgICAqICAgIEZpbGVJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZW5hbWUpOworICAgICogICAgSWYgKFV0aWxpdHkucmVhZElDVURhdGFIZWFkZXIoaW5wdXQsIGRhdGFmb3JtYXQsIGRhdGF2ZXJzaW9uLCAKKyAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUpIHsKKyAgICAqICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZlcmlmaWVkIGZpbGUgaGVhZGVyLCB0aGlzIGlzIGEgSUNVIGRhdGEgZmlsZSIpOworICAgICogICAgfQorICAgICogfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICogICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGlzIGlzIG5vdCBhIElDVSBkYXRhIGZpbGUiKTsKKyAgICAqIH0KKyAgICAqIDwvcHJlPgorICAgICogPC9wPgorICAgICogQHBhcmFtIGlucHV0U3RyZWFtIGlucHV0IHN0cmVhbSB0aGF0IGNvbnRhaW5zIHRoZSBJQ1UgZGF0YSBoZWFkZXIKKyAgICAqIEBwYXJhbSBkYXRhRm9ybWF0SURFeHBlY3RlZCBEYXRhIGZvcm1hdCBleHBlY3RlZC4gQW4gYXJyYXkgb2YgNCBieXRlcyAKKyAgICAqICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEgZm9ybWF0LgorICAgICogICAgICAgICAgICAgICAgICAgICBFLmcuIGRhdGEgZm9ybWF0IElEIDEuMi4zLjQuIHdpbGwgYmVjYW1lIGFuIGFycmF5IG9mIAorICAgICogICAgICAgICAgICAgICAgICAgICB7MSwgMiwgMywgNH0KKyAgICAqIEBwYXJhbSBhdXRoZW50aWNhdGUgdXNlciBkZWZpbmVkIGV4dHJhIGRhdGEgYXV0aGVudGljYXRpb24uIFRoaXMgdmFsdWUKKyAgICAqICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIG51bGwsIGlmIG5vIGV4dHJhIGF1dGhlbnRpY2F0aW9uIGlzIG5lZWRlZC4KKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3duIGlmIHRoZXJlIGlzIGEgcmVhZCBlcnJvciBvciAKKyAgICAqICAgICAgICAgICAgd2hlbiBoZWFkZXIgYXV0aGVudGljYXRpb24gZmFpbHMuCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGVbXSByZWFkSGVhZGVyKElucHV0U3RyZWFtIGlucHV0U3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgZGF0YUZvcm1hdElERXhwZWN0ZWRbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoZW50aWNhdGUgYXV0aGVudGljYXRlKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIERhdGFJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBEYXRhSW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOworICAgICAgICBjaGFyIGhlYWRlcnNpemUgPSBpbnB1dC5yZWFkQ2hhcigpOworICAgICAgICBoZWFkZXJzaXplIC09IDI7CisgICAgICAgIC8vcmVhZGluZyB0aGUgaGVhZGVyIGZvcm1hdAorICAgICAgICBieXRlIG1hZ2ljMSA9IGlucHV0LnJlYWRCeXRlKCk7CisgICAgICAgIGhlYWRlcnNpemUgLS07CisgICAgICAgIGJ5dGUgbWFnaWMyID0gaW5wdXQucmVhZEJ5dGUoKTsKKyAgICAgICAgaGVhZGVyc2l6ZSAtLTsKKyAgICAgICAgaWYgKG1hZ2ljMSAhPSBNQUdJQzEgfHwgbWFnaWMyICE9IE1BR0lDMikgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKE1BR0lDX05VTUJFUl9BVVRIRU5USUNBVElPTl9GQUlMRURfKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW5wdXQucmVhZENoYXIoKTsgLy8gcmVhZGluZyBzaXplCisgICAgICAgIGhlYWRlcnNpemUgLT0gMjsKKyAgICAgICAgaW5wdXQucmVhZENoYXIoKTsgLy8gcmVhZGluZyByZXNlcnZlZCB3b3JkCisgICAgICAgIGhlYWRlcnNpemUgLT0gMjsKKyAgICAgICAgYnl0ZSBiaWdlbmRpYW4gICAgPSBpbnB1dC5yZWFkQnl0ZSgpOworICAgICAgICBoZWFkZXJzaXplIC0tOworICAgICAgICBieXRlIGNoYXJzZXQgICAgICA9IGlucHV0LnJlYWRCeXRlKCk7CisgICAgICAgIGhlYWRlcnNpemUgLS07CisgICAgICAgIGJ5dGUgY2hhcnNpemUgICAgID0gaW5wdXQucmVhZEJ5dGUoKTsKKyAgICAgICAgaGVhZGVyc2l6ZSAtLTsKKyAgICAgICAgaW5wdXQucmVhZEJ5dGUoKTsgLy8gcmVhZGluZyByZXNlcnZlZCBieXRlCisgICAgICAgIGhlYWRlcnNpemUgLS07CisgICAgICAgICAgICAgICAgCisgICAgICAgIGJ5dGUgZGF0YUZvcm1hdElEW10gPSBuZXcgYnl0ZVs0XTsKKyAgICAgICAgaW5wdXQucmVhZEZ1bGx5KGRhdGFGb3JtYXRJRCk7CisgICAgICAgIGhlYWRlcnNpemUgLT0gNDsKKyAgICAgICAgYnl0ZSBkYXRhVmVyc2lvbltdID0gbmV3IGJ5dGVbNF07CisgICAgICAgIGlucHV0LnJlYWRGdWxseShkYXRhVmVyc2lvbik7CisgICAgICAgIGhlYWRlcnNpemUgLT0gNDsKKyAgICAgICAgYnl0ZSB1bmljb2RlVmVyc2lvbltdID0gbmV3IGJ5dGVbNF07CisgICAgICAgIGlucHV0LnJlYWRGdWxseSh1bmljb2RlVmVyc2lvbik7CisgICAgICAgIGhlYWRlcnNpemUgLT0gNDsKKyAgICAgICAgaW5wdXQuc2tpcEJ5dGVzKGhlYWRlcnNpemUpOworCisgICAgICAgIGlmIChiaWdlbmRpYW4gIT0gQklHX0VORElBTl8gfHwgY2hhcnNldCAhPSBDSEFSX1NFVF8KKyAgICAgICAgICAgIHx8IGNoYXJzaXplICE9IENIQVJfU0laRV8KKyAgICAgICAgICAgIHx8ICFBcnJheXMuZXF1YWxzKGRhdGFGb3JtYXRJREV4cGVjdGVkLCBkYXRhRm9ybWF0SUQpCisgICAgICAgICAgICB8fCAoYXV0aGVudGljYXRlICE9IG51bGwgCisgICAgICAgICAgICAgICAgJiYgIWF1dGhlbnRpY2F0ZS5pc0RhdGFWZXJzaW9uQWNjZXB0YWJsZShkYXRhVmVyc2lvbikpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oSEVBREVSX0FVVEhFTlRJQ0FUSU9OX0ZBSUxFRF8pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1bmljb2RlVmVyc2lvbjsKKyAgICB9CisgICAgIAorICAgIC8vIHByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgICAgLyoqCisgICAgKiBNYWdpYyBudW1iZXJzIHRvIGF1dGhlbnRpY2F0ZSB0aGUgZGF0YSBmaWxlCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIE1BR0lDMSA9IChieXRlKTB4ZGE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBNQUdJQzIgPSAoYnl0ZSkweDI3OworICAgICAgCisgICAgLyoqCisgICAgKiBGaWxlIGZvcm1hdCBhdXRoZW50aWNhdGlvbiB2YWx1ZXMKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgQklHX0VORElBTl8gPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgQ0hBUl9TRVRfID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIENIQVJfU0laRV8gPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qKgorICAgICogRXJyb3IgbWVzc2FnZXMKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQUdJQ19OVU1CRVJfQVVUSEVOVElDQVRJT05fRkFJTEVEXyA9IAorICAgICAgICAgICAgICAgICAgICAgICAiSUNVIGRhdGEgZmlsZSBlcnJvcjogTm90IGFuIElDVSBkYXRhIGZpbGUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSEVOVElDQVRJT05fRkFJTEVEXyA9CisgICAgICAgICJJQ1UgZGF0YSBmaWxlIGVycm9yOiBIZWFkZXIgYXV0aGVudGljYXRpb24gZmFpbGVkLCBwbGVhc2UgY2hlY2sgaWYgeW91IGhhdmUgYSB2YWxpZCBJQ1UgZGF0YSBmaWxlIjsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUJpbmFyeVN0cmVhbS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSUNVQmluYXJ5U3RyZWFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg0ZTVhMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUJpbmFyeVN0cmVhbS5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoYykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQXV0aG9yOiBBbGFuIExpdQorKiBDcmVhdGVkOiBOb3ZlbWJlciA1IDIwMDIKKyogU2luY2U6IElDVSAyLjQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8qKgorICogQSBEYXRhSW5wdXRTdHJlYW0gdGhhdCBpbXBsZW1lbnRzIHJhbmRvbS1hY2Nlc3Mgc2Vla2luZy4gIEZvciB0aGlzCisgKiB0byB3b3JrLCB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBzdHJlYW0gbXVzdCBiZSBrbm93biBpbiBhZHZhbmNlLCBvcgorICogdGhlIGRhdGEgbXVzdCBiZSBzdXBwbGllZCBhcyBhIHJhdyBieXRlW10gYXJyYXkuCisgKgorICogU2Vla2luZyBkb2Vzbid0IHdvcmsgZGlyZWN0bHkgb24gYWxsIHN0cmVhbXMuICBJZiBhIGdpdmVuIHN0cmVhbQorICogZG9lc24ndCBzdXBwb3J0IHNlZWtpbmcsIGV4dHJhY3QgdGhlIGJ5dGVzIGludG8gYSBieXRlW10gYXJyYXkgYW5kCisgKiB1c2UgdGhlIGJ5dGVbXSBjb25zdHJ1Y3Rvci4KKyAqLworY2xhc3MgSUNVQmluYXJ5U3RyZWFtIGV4dGVuZHMgRGF0YUlucHV0U3RyZWFtIHsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIHN0cmVhbSBmcm9tIHRoZSBnaXZlbiBzdHJlYW0gYW5kIHNpemUuCisgICAgICogQHBhcmFtIHN0cmVhbSB0aGUgc3RyZWFtIG9mIGRhdGEKKyAgICAgKiBAcGFyYW0gc2l6ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlCisgICAgICogZm9yIHNlZWtpbmcuICBCeXRlcyBiZXlvbmQgdGhpcyBtYXkgYmUgcmVhZCwgYnV0IHNlZWtpbmcgd2lsbAorICAgICAqIG5vdCB3b3JrIGZvciBvZmZzZXQgPj0gc2l6ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgSUNVQmluYXJ5U3RyZWFtKElucHV0U3RyZWFtIHN0cmVhbSwgaW50IHNpemUpIHsKKyAgICAgICAgc3VwZXIoc3RyZWFtKTsKKyAgICAgICAgbWFyayhzaXplKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBzdHJlYW0gZnJvbSB0aGUgZ2l2ZW4gcmF3IGJ5dGVzLgorICAgICAqLworICAgIHB1YmxpYyBJQ1VCaW5hcnlTdHJlYW0oYnl0ZVtdIHJhdykgeworICAgICAgICB0aGlzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShyYXcpLCByYXcubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZWVrIHRvIHRoZSBnaXZlbiBvZmZzZXQuICBPZmZzZXQgaXMgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlCisgICAgICogc3RyZWFtIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IsIG9yIGZyb20gdGhlIHN0YXJ0IG9mIHRoZQorICAgICAqIGJ5dGVbXSBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZWVrKGludCBvZmZzZXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHJlc2V0KCk7CisgICAgICAgIGludCBhY3R1YWwgPSBza2lwQnl0ZXMob2Zmc2V0KTsKKyAgICAgICAgaWYgKGFjdHVhbCAhPSBvZmZzZXQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTa2lwKCIgKyBvZmZzZXQgKyAiKSBvbmx5IHNraXBwZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgKyAiIGJ5dGVzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhbHNlKSBTeXN0ZW0ub3V0LnByaW50bG4oIihzZWVrICIgKyBvZmZzZXQgKyAiKSIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVURlYnVnLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VEZWJ1Zy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MGViOWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VEZWJ1Zy5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvSUNVRGVidWcuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjQwOjUxICQKKyAqICRSZXZpc2lvbjogMS41ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlZlcnNpb25JbmZvOworCitwdWJsaWMgZmluYWwgY2xhc3MgSUNVRGVidWcgeworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwYXJhbXM7CisgICAgc3RhdGljIHsKKwl0cnkgeworCSAgICBwYXJhbXMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIklDVURlYnVnIik7CisJfQorCWNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisJfQorICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRlYnVnID0gcGFyYW1zICE9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoZWxwID0gZGVidWcgJiYgKHBhcmFtcy5lcXVhbHMoIiIpIHx8IHBhcmFtcy5pbmRleE9mKCJoZWxwIikgIT0gLTEpOworCisgICAgc3RhdGljIHsKKwlpZiAoZGVidWcpIHsKKwkgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbklDVURlYnVnPSIgKyBwYXJhbXMpOworCX0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBqYXZhVmVyc2lvblN0cmluZyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIik7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzSkRLMTRPckhpZ2hlcjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25JbmZvIGphdmFWZXJzaW9uOworCisgICAgcHVibGljIHN0YXRpYyBWZXJzaW9uSW5mbyBnZXRJbnN0YW5jZUxlbmllbnQoU3RyaW5nIHMpIHsKKwkvLyBjbGVhbiBzdHJpbmcKKwkvLyBwcmVzZXJ2ZSBvbmx5IGRpZ2l0cywgc2VwYXJhdGVkIGJ5IHNpbmdsZSAnLicgCisJLy8gaWdub3JlIG92ZXIgNCBkaWdpdCBzZXF1ZW5jZXMKKwkvLyBkb2VzIG5vdCB0ZXN0IDwgMjU1LCB2ZXJ5IG9kZC4uLgorCisJY2hhcltdIGNoYXJzID0gcy50b0NoYXJBcnJheSgpOworCWludCByID0gMCwgdyA9IDAsIGNvdW50ID0gMDsKKwlib29sZWFuIG51bWVyaWMgPSBmYWxzZTsgLy8gaWdub3JlIGxlYWRpbmcgbm9uLW51bWVyaWNzCisJd2hpbGUgKHIgPCBjaGFycy5sZW5ndGgpIHsKKwkgICAgY2hhciBjID0gY2hhcnNbcisrXTsKKwkgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykgeworCQlpZiAobnVtZXJpYykgeworCQkgICAgaWYgKGNvdW50ID09IDMpIHsKKwkJCS8vIG9ubHkgZm91ciBkaWdpdCBzdHJpbmdzIGFsbG93ZWQKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgbnVtZXJpYyA9IGZhbHNlOworCQkgICAgY2hhcnNbdysrXSA9ICcuJzsKKwkJICAgICsrY291bnQ7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJbnVtZXJpYyA9IHRydWU7CisJCWNoYXJzW3crK10gPSBjOworCSAgICB9CisJfQorCXdoaWxlICh3ID4gMCAmJiBjaGFyc1t3LTFdID09ICcuJykgeworCSAgICAtLXc7CisJfQorCQorCVN0cmluZyB2cyA9IG5ldyBTdHJpbmcoY2hhcnMsIDAsIHcpOworCisJcmV0dXJuIFZlcnNpb25JbmZvLmdldEluc3RhbmNlKHZzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgeworCWphdmFWZXJzaW9uID0gZ2V0SW5zdGFuY2VMZW5pZW50KGphdmFWZXJzaW9uU3RyaW5nKTsKKworICAgICAgICBWZXJzaW9uSW5mbyBqYXZhMTRWZXJzaW9uID0gVmVyc2lvbkluZm8uZ2V0SW5zdGFuY2UoIjEuNC4wIik7CisKKyAgICAgICAgaXNKREsxNE9ySGlnaGVyID0gamF2YVZlcnNpb24uY29tcGFyZVRvKGphdmExNFZlcnNpb24pID49IDA7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGVuYWJsZWQoKSB7CisJcmV0dXJuIGRlYnVnOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlbmFibGVkKFN0cmluZyBhcmcpIHsKKwlpZiAoZGVidWcpIHsKKwkgICAgYm9vbGVhbiByZXN1bHQgPSBwYXJhbXMuaW5kZXhPZihhcmcpICE9IC0xOworCSAgICBpZiAoaGVscCkgU3lzdGVtLm91dC5wcmludGxuKCJcbklDVURlYnVnLmVuYWJsZWQoIiArIGFyZyArICIpID0gIiArIHJlc3VsdCk7CisJICAgIHJldHVybiByZXN1bHQ7CisJfQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB2YWx1ZShTdHJpbmcgYXJnKSB7CisJU3RyaW5nIHJlc3VsdCA9ICJmYWxzZSI7CisJaWYgKGRlYnVnKSB7CisJICAgIGludCBpbmRleCA9IHBhcmFtcy5pbmRleE9mKGFyZyk7CisJICAgIGlmIChpbmRleCAhPSAtMSkgeworCQlpbmRleCArPSBhcmcubGVuZ3RoKCk7CisJCWlmIChwYXJhbXMubGVuZ3RoKCkgPiBpbmRleCAmJiBwYXJhbXMuY2hhckF0KGluZGV4KSA9PSAnPScpIHsKKwkJICAgIGluZGV4ICs9IDE7CisJCSAgICBpbnQgbGltaXQgPSBwYXJhbXMuaW5kZXhPZigiLCIsIGluZGV4KTsKKwkJICAgIHJlc3VsdCA9IHBhcmFtcy5zdWJzdHJpbmcoaW5kZXgsIGxpbWl0ID09IC0xID8gcGFyYW1zLmxlbmd0aCgpIDogbGltaXQpOworCQl9CisJCXJlc3VsdCA9ICJ0cnVlIjsKKwkgICAgfQorCisJICAgIGlmIChoZWxwKSBTeXN0ZW0ub3V0LnByaW50bG4oIlxuSUNVRGVidWcudmFsdWUoIiArIGFyZyArICIpID0gIiArIHJlc3VsdCk7CisJfQorCXJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCS8vIHRlc3QKKwlTdHJpbmdbXSB0ZXN0cyA9IHsKKwkgICAgIjEuMy4wIiwKKwkgICAgIjEuMy4wXzAyIiwKKwkgICAgIjEuMy4xZWEiLAorCSAgICAiMS40LjFiNDMiLAorCSAgICAiX19fNDFfX181IiwKKwkgICAgIngxLjQuNTF4eDg5ZWEuN2YiCisJfTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CisJICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0c1tpXSArICIgPT4gIiArIGdldEluc3RhbmNlTGVuaWVudCh0ZXN0c1tpXSkpOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VMaXN0UmVzb3VyY2VCdW5kbGUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUxpc3RSZXNvdXJjZUJ1bmRsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjM2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VMaXN0UmVzb3VyY2VCdW5kbGUuamF2YQpAQCAtMCwwICsxLDQzNCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUxpc3RSZXNvdXJjZUJ1bmRsZS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6NDA6NTIgJAorICogJFJldmlzaW9uOiAxLjkgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqCisgKiBBIGxpc3QgcmVzb3VyY2UgYnVuZGxlIHRoYXQgZG9lcyByZWRpcmVjdGlvbiAKKyAqIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgb2Ygb3VyIHJlc291cmNlIGNsYXNzIGZpbGVzCisgKiBhcmUgdG9vIGJpZyBmb3IgdGhlIGphdmEgcnVudGltZSB0byBoYW5kbGUuCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworCitwdWJsaWMgY2xhc3MgSUNVTGlzdFJlc291cmNlQnVuZGxlIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVREFUQSA9ICJJQ1VEQVRBIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVX0JVTkRMRV9OQU1FID0gIkxvY2FsZUVsZW1lbnRzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVX1BBQ0tBR0VfTkFNRSA9ImNvbS5pYm0uaWN1LmltcGwuZGF0YSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOQ09ESU5HPSJVVEYtOCI7CisgICAgCisgICAgcHJvdGVjdGVkIElDVUxpc3RSZXNvdXJjZUJ1bmRsZSgpIHsKKyAgICB9CisKKyAgICBwcml2YXRlIEhhc2h0YWJsZSB2aXNpdGVkID0gbmV3IEhhc2h0YWJsZSgpOworICAgIC8qKgorICAgICAqIFN1YmNsYXNzZXJzIG11c3Qgc3RhdGljYWxseSBpbml0aWFsaXplIHRoaXMKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgT2JqZWN0W11bXSBjb250ZW50czsKKworICAgIC8qKgorICAgICAqIFRoaXMgaXMgb3VyIGNhY2hlCisgICAgICovCisgICAgcHJpdmF0ZSBPYmplY3RbXVtdIHJlYWxDb250ZW50czsKKworICAgIC8qKgorICAgICAqIFNlZSBiYXNlIGNsYXNzIGRlc2NyaXB0aW9uCisgICAgICovCisgICAgcHJvdGVjdGVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKXsKKwkJLy8gd2UgcmVwbGFjZSBhbnkgcmVkaXJlY3RlZCB2YWx1ZXMgd2l0aCByZWFsIHZhbHVlcyBpbiBhIGNsb25lZCBhcnJheQorCQorCQlpZiAocmVhbENvbnRlbnRzID09IG51bGwpIHsKKwkJICAgIHJlYWxDb250ZW50cyA9IGNvbnRlbnRzOworCQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50cy5sZW5ndGg7ICsraSkgeworCQkJCU9iamVjdCBuZXdWYWx1ZSA9IGdldFJlZGlyZWN0ZWRSZXNvdXJjZSgoU3RyaW5nKWNvbnRlbnRzW2ldWzBdLGNvbnRlbnRzW2ldWzFdKTsKKwkJCQlpZiAobmV3VmFsdWUgIT0gbnVsbCkgeworCQkJCSAgICBpZiAocmVhbENvbnRlbnRzID09IGNvbnRlbnRzKSB7CisJCQkJCSAgICAgcmVhbENvbnRlbnRzID0gKE9iamVjdFtdW10pY29udGVudHMuY2xvbmUoKTsKKwkJCQkgICAgfQorCQkJCSAgICByZWFsQ29udGVudHNbaV0gPSBuZXcgT2JqZWN0W10geyBjb250ZW50c1tpXVswXSwgbmV3VmFsdWUgfTsKKwkJCQl9CisJCSAgICB9CisJCX0KKwkKKwkJcmV0dXJuIHJlYWxDb250ZW50czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gbnVsbCBpZiB2YWx1ZSBpcyBhbHJlYWR5IGluIGV4aXN0aW5nIGNvbnRlbnRzIGFycmF5LCBvdGhlcndpc2UgZmV0Y2ggdGhlCisgICAgICogcmVhbCB2YWx1ZSBhbmQgcmV0dXJuIGl0LgorICAgICAqLworICAgIHByaXZhdGUgT2JqZWN0IGdldFJlZGlyZWN0ZWRSZXNvdXJjZShTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpIHsKKwkKKwkJaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0W11bXSkgeworCQkgICAgT2JqZWN0W11bXSBhVmFsdWUgPSAoT2JqZWN0W11bXSl2YWx1ZTsKKyAgICAgICAgICAgIGludCBpPTA7CisgICAgICAgICAgICB3aGlsZShpIDwgYVZhbHVlLmxlbmd0aCl7CisgICAgICAgICAgICAgICAgaW50IGo9MDsKKyAgICAgICAgICAgICAgICB3aGlsZShqIDwgYVZhbHVlW2ldLmxlbmd0aCl7CisgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVtpXVtqXSA9IGdldFJlZGlyZWN0ZWRSZXNvdXJjZSgoU3RyaW5nKWFWYWx1ZVtpXVswXSxhVmFsdWVbaV1bal0pOworICAgICAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAKKwkJfWVsc2UgaWYodmFsdWUgaW5zdGFuY2VvZiBBbGlhcyl7ICAKKyAgICAgICAgICAgIFN0cmluZyBjTmFtZSA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgICAgICAgICB2aXNpdGVkLmNsZWFyKCk7CisgICAgICAgICAgICB2aXNpdGVkLnB1dChjTmFtZStrZXksIiIpOyAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gKChBbGlhcyl2YWx1ZSkuZ2V0UmVzb3VyY2UoY05hbWUsa2V5LHZpc2l0ZWQpOworICAgICAgICB9ZWxzZSBpZih2YWx1ZSBpbnN0YW5jZW9mIFJlZGlyZWN0ZWRSZXNvdXJjZSl7CisgICAgICAgICAgICByZXR1cm4gKChSZWRpcmVjdGVkUmVzb3VyY2UpdmFsdWUpLmdldFJlc291cmNlKHRoaXMpOworICAgICAgICB9ICAgICAgIAorCQkJCisJCXJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBieXRlW10gcmVhZFRvRU9TKElucHV0U3RyZWFtIHN0cmVhbSkgeworCisJCUFycmF5TGlzdCB2ZWMgPSBuZXcgQXJyYXlMaXN0KCk7CisJCWludCBjb3VudCA9IDA7CisJCWludCBwb3MgPSAwOworCQlmaW5hbCBpbnQgTUFYTEVOR1RIID0gMHg4MDAwOyAvLyBtYXggYnVmZmVyIHNpemUgLSAzMksKKwkJaW50IGxlbmd0aCA9IDB4ODA7IC8vIHN0YXJ0IHdpdGggc21hbGwgYnVmZmVycyBhbmQgd29yayB1cAorCQlkbyB7CisJCSAgICBwb3MgPSAwOworCQkgICAgbGVuZ3RoID0gbGVuZ3RoID49IE1BWExFTkdUSCA/IE1BWExFTkdUSCA6IGxlbmd0aCAqIDI7CisJCSAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbbGVuZ3RoXTsKKwkJICAgIHRyeSB7CisJCQkJZG8geworCQkJCSAgICBpbnQgbiA9IHN0cmVhbS5yZWFkKGJ1ZmZlciwgcG9zLCBsZW5ndGggLSBwb3MpOworCQkJCSAgICBpZiAobiA9PSAtMSkgeworCQkJCQlicmVhazsKKwkJCQkgICAgfQorCQkJCSAgICBwb3MgKz0gbjsKKwkJCQl9IHdoaWxlIChwb3MgPCBsZW5ndGgpOworCQkgICAgfQorCQkgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJICAgIH0KKwkJICAgIHZlYy5hZGQoYnVmZmVyKTsKKwkJICAgIGNvdW50ICs9IHBvczsKKwkJfSB3aGlsZSAocG9zID09IGxlbmd0aCk7CisJCQkJCQkJCisJCQkJCQkJCisJCWJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbY291bnRdOworCQlwb3MgPSAwOworCQlmb3IgKGludCBpID0gMDsgaSA8IHZlYy5zaXplKCk7ICsraSkgeworCQkgICAgYnl0ZVtdIGJ1ZiA9IChieXRlW10pdmVjLmdldChpKTsKKwkJICAgIGludCBsZW4gPSBNYXRoLm1pbihidWYubGVuZ3RoLCBjb3VudCAtIHBvcyk7CisJCSAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZiwgMCwgZGF0YSwgcG9zLCBsZW4pOworCQkgICAgcG9zICs9IGxlbjsKKwkJfQorCQlyZXR1cm4gZGF0YTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyW10gcmVhZFRvRU9TKElucHV0U3RyZWFtUmVhZGVyIHN0cmVhbSkgeworCQlBcnJheUxpc3QgdmVjID0gbmV3IEFycmF5TGlzdCgpOworCQlpbnQgY291bnQgPSAwOworCQlpbnQgcG9zID0gMDsKKwkJZmluYWwgaW50IE1BWExFTkdUSCA9IDB4ODAwMDsgLy8gbWF4IGJ1ZmZlciBzaXplIC0gMzJLCisJCWludCBsZW5ndGggPSAweDgwOyAvLyBzdGFydCB3aXRoIHNtYWxsIGJ1ZmZlcnMgYW5kIHdvcmsgdXAKKwkJZG8geworCQkgICAgcG9zID0gMDsKKwkJICAgIGxlbmd0aCA9IGxlbmd0aCA+PSBNQVhMRU5HVEggPyBNQVhMRU5HVEggOiBsZW5ndGggKiAyOworCQkgICAgY2hhcltdIGJ1ZmZlciA9IG5ldyBjaGFyW2xlbmd0aF07CisJCSAgICB0cnkgeworCQkJCWRvIHsKKwkJCQkgICAgaW50IG4gPSBzdHJlYW0ucmVhZChidWZmZXIsIHBvcywgbGVuZ3RoIC0gcG9zKTsKKwkJCQkgICAgaWYgKG4gPT0gLTEpIHsKKwkJCQkJYnJlYWs7CisJCQkJICAgIH0KKwkJCQkgICAgcG9zICs9IG47CisJCQkJfSB3aGlsZSAocG9zIDwgbGVuZ3RoKTsKKwkJICAgIH0KKwkJICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCSAgICB9CisJCSAgICB2ZWMuYWRkKGJ1ZmZlcik7CisJCSAgICBjb3VudCArPSBwb3M7CisJCX0gd2hpbGUgKHBvcyA9PSBsZW5ndGgpOworCQkJCQkJCQorCQljaGFyW10gZGF0YSA9IG5ldyBjaGFyW2NvdW50XTsKKwkJcG9zID0gMDsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB2ZWMuc2l6ZSgpOyArK2kpIHsKKwkJICAgIGNoYXJbXSBidWYgPSAoY2hhcltdKXZlYy5nZXQoaSk7CisJCSAgICBpbnQgbGVuID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgY291bnQgLSBwb3MpOworCQkgICAgU3lzdGVtLmFycmF5Y29weShidWYsIDAsIGRhdGEsIHBvcywgbGVuKTsKKwkJICAgIHBvcyArPSBsZW47CisJCX0KKwkJcmV0dXJuIGRhdGE7CisgICAgfQorICAgIC8qCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb21wcmVzc2VkU3RyaW5nIGltcGxlbWVudHMgUmVkaXJlY3RlZFJlc291cmNleworICAgICAgICBwcml2YXRlIFN0cmluZyBleHBhbmRlZD1udWxsOworICAgICAgICBwcml2YXRlIFN0cmluZyBjb21wcmVzc2VkPW51bGw7CisgICAgICAgIHB1YmxpYyBDb21wcmVzc2VkU3RyaW5nKFN0cmluZyBzdHIpeworICAgICAgICAgICBjb21wcmVzc2VkPXN0cjsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgT2JqZWN0IGdldFJlc291cmNlKE9iamVjdCBvYmopeworICAgICAgICAgICAgaWYoY29tcHJlc3NlZD09bnVsbCl7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihleHBhbmRlZD09bnVsbCl7CisgICAgICAgICAgICAgICAgZXhwYW5kZWQ9IG5ldyBTdHJpbmcoVXRpbGl0eS5STEVTdHJpbmdUb0NoYXJBcnJheShjb21wcmVzc2VkKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbXByZXNzZWRCaW5hcnkgaW1wbGVtZW50cyBSZWRpcmVjdGVkUmVzb3VyY2V7CisgICAgICAgIHByaXZhdGUgYnl0ZVtdIGV4cGFuZGVkPW51bGw7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGNvbXByZXNzZWQ9bnVsbDsKKyAgICAgICAgcHVibGljIENvbXByZXNzZWRCaW5hcnkoU3RyaW5nIHN0cil7CisgICAgICAgICAgIGNvbXByZXNzZWQgPSBzdHI7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIE9iamVjdCBnZXRSZXNvdXJjZShPYmplY3Qgb2JqKXsKKyAgICAgICAgICAgIGlmKGNvbXByZXNzZWQ9PW51bGwpeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZihleHBhbmRlZD09bnVsbCl7CisgICAgICAgICAgICAgICAgZXhwYW5kZWQ9IFV0aWxpdHkuUkxFU3RyaW5nVG9CeXRlQXJyYXkoY29tcHJlc3NlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7CisgICAgICAgIH0KKyAgICAKKyAgICB9CisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgUmVkaXJlY3RlZFJlc291cmNleworICAgICAgICBwdWJsaWMgT2JqZWN0IGdldFJlc291cmNlKE9iamVjdCBvYmopOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJlc291cmNlQmluYXJ5IGltcGxlbWVudHMgUmVkaXJlY3RlZFJlc291cmNleworICAgICAgICBwcml2YXRlIGJ5dGVbXSBleHBhbmRlZD1udWxsOworICAgICAgICBwcml2YXRlIFN0cmluZyByZXNOYW1lPW51bGw7CisgICAgICAgIHB1YmxpYyBSZXNvdXJjZUJpbmFyeShTdHJpbmcgbmFtZSl7CisgICAgICAgICAgICByZXNOYW1lPW5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIE9iamVjdCBnZXRSZXNvdXJjZShPYmplY3Qgb2JqKXsKKyAgICAgICAgICAgIGlmKGV4cGFuZGVkPT1udWxsKXsKKwkgICAgICAgICAgICBJbnB1dFN0cmVhbSBzdHJlYW0gPSBvYmouZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHJlc05hbWUpOworICAgICAgICAgICAgICAgIGlmKHN0cmVhbT09bnVsbCl7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24oIiIsb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpLHJlc05hbWUpOworICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBleHBhbmRlZCA9IHJlYWRUb0VPUyhzdHJlYW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGV4cGFuZGVkOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVzb3VyY2VTdHJpbmcgaW1wbGVtZW50cyBSZWRpcmVjdGVkUmVzb3VyY2V7CisgICAgICAgIHByaXZhdGUgY2hhcltdIGV4cGFuZGVkPW51bGw7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIHJlc05hbWU9bnVsbDsKKyAgICAgICAgcHVibGljIFJlc291cmNlU3RyaW5nKFN0cmluZyBuYW1lKXsKKyAgICAgICAgICAgIHJlc05hbWU9bmFtZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgT2JqZWN0IGdldFJlc291cmNlKE9iamVjdCBvYmopeworICAgICAgICAgICAgaWYoZXhwYW5kZWQ9PW51bGwpeworICAgICAgICAgICAgICAgIC8vIFJlc291cmNlIHN0cmluZ3MgYXJlIGFsd2F5cyBVVEYtOAorICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIHN0cmVhbSA9IG9iai5nZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0ocmVzTmFtZSk7CisgICAgICAgICAgICAgICAgaWYoc3RyZWFtPT1udWxsKXsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbigiIixvYmouZ2V0Q2xhc3MoKS5nZXROYW1lKCkscmVzTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gIG5ldyBJbnB1dFN0cmVhbVJlYWRlcihzdHJlYW0sRU5DT0RJTkcpOworICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCA9IHJlYWRUb0VPUyhyZWFkZXIpOworICAgICAgICAgICAgICAgIH1jYXRjaChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG9wZW4gY29udmVydGVyIGZvciBlbmNvZGluZzogIiArRU5DT0RJTkcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGV4cGFuZGVkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEFsaWFzeworICAgICAgICBwdWJsaWMgQWxpYXMoU3RyaW5nIHBhdGgpeworICAgICAgICAgICAgcGF0aFRvUmVzb3VyY2UgPSBwYXRoOworICAgICAgICB9OworICAgICAgICBwcml2YXRlIGZpbmFsIGNoYXIgUkVTX1BBVEhfU0VQX0NIQVIgPSAnLyc7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIHBhdGhUb1Jlc291cmNlOworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgT2JqZWN0IGdldFJlc291cmNlKFN0cmluZyBjbGFzc05hbWUsU3RyaW5nIHBhcmVudEtleSwgSGFzaHRhYmxlIHZpc2l0ZWQpeworICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lPW51bGwsYnVuZGxlTmFtZT1udWxsLCBsb2NhbGU9bnVsbCwga2V5UGF0aD1udWxsOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZihwYXRoVG9SZXNvdXJjZS5pbmRleE9mKFJFU19QQVRIX1NFUF9DSEFSKT09MCl7CisgICAgICAgICAgICAgICAgaW50IGkgPXBhdGhUb1Jlc291cmNlLmluZGV4T2YoUkVTX1BBVEhfU0VQX0NIQVIsMSk7CisgICAgICAgICAgICAgICAgaW50IGogPXBhdGhUb1Jlc291cmNlLmluZGV4T2YoUkVTX1BBVEhfU0VQX0NIQVIsaSsxKTsKKyAgICAgICAgICAgICAgICBidW5kbGVOYW1lPXBhdGhUb1Jlc291cmNlLnN1YnN0cmluZygxLGkpOworICAgICAgICAgICAgICAgIGxvY2FsZT1wYXRoVG9SZXNvdXJjZS5zdWJzdHJpbmcoaSsxKTsKKyAgICAgICAgICAgICAgICBpZihqIT0tMSl7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZT1wYXRoVG9SZXNvdXJjZS5zdWJzdHJpbmcoaSsxLGopOworICAgICAgICAgICAgICAgICAgICBrZXlQYXRoPXBhdGhUb1Jlc291cmNlLnN1YnN0cmluZyhqKzEscGF0aFRvUmVzb3VyY2UubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL3RoZXJlIGlzIGEgcGF0aCBpbmNsdWRlZCAKKyAgICAgICAgICAgICAgICBpZihidW5kbGVOYW1lLmVxdWFscyhJQ1VEQVRBKSl7CisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZU5hbWUgPSBJQ1VfQlVORExFX05BTUU7CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lID0gSUNVX1BBQ0tBR0VfTkFNRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAvL25vIHBhdGggc3RhcnQgd2l0aCBsb2NhbGUKKyAgICAgICAgICAgICAgICBpbnQgaSA9cGF0aFRvUmVzb3VyY2UuaW5kZXhPZihSRVNfUEFUSF9TRVBfQ0hBUik7CisgICAgICAgICAgICAgICAgLy9JZiB0aGlzIGlzIGEgYnVuZGxlIHdpdGggbG9jYWxlIG5hbWUgZm9sbG93aW5nIGl0CisgICAgICAgICAgICAgICAgLy90aGVuIGl0IHNob3VsZCBiZSBvZiB0eXBlIDxidW5kbGUgbmFtZT5fPGxvY2FsZT4KKyAgICAgICAgICAgICAgICAvL2lmIG5vdCB3ZSBkb25vdCBndWFyYW50ZWUgdGhhdCB0aGlzIHdpbGwgd29yaworICAgICAgICAgICAgICAgIGludCBqID0gY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuIik7CisgICAgICAgICAgICAgICAgcGFja2FnZU5hbWU9Y2xhc3NOYW1lLnN1YnN0cmluZygwLGopOworICAgICAgICAgICAgICAgIGJ1bmRsZU5hbWU9Y2xhc3NOYW1lLnN1YnN0cmluZyhqKzEsY2xhc3NOYW1lLmluZGV4T2YoIl8iKSk7CisgICAgICAgICAgICAgICAga2V5UGF0aD1wYXRoVG9SZXNvdXJjZS5zdWJzdHJpbmcoaSsxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZihpIT0tMSl7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IHBhdGhUb1Jlc291cmNlLnN1YnN0cmluZygwLGkpOworICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICBsb2NhbGU9a2V5UGF0aDsKKyAgICAgICAgICAgICAgICAgICAga2V5UGF0aD1wYXJlbnRLZXk7CisgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1wYWNrYWdlTmFtZSsiLiIrYnVuZGxlTmFtZSsiXyIrbG9jYWxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IG51bGw7CisgICAgICAgICAgICAvLyBnZXRSZXNvdXJjZUJ1bmRsZSBndWFyYW50ZWVzIHRoYXQgdGhlIENMQVNTUEFUSCB3aWxsIGJlIHNlYXJjaGVkCisgICAgICAgICAgICAvLyBmb3IgbG9hZGluZyB0aGUgcmVzb3VyY2Ugd2l0aCBuYW1lIDxidW5kbGVOYW1lPl88bG9jYWxlTmFtZT4uY2xhc3MKKyAgICAgICAgICAgIGJ1bmRsZSA9IElDVUxvY2FsZURhdGEuZ2V0UmVzb3VyY2VCdW5kbGUocGFja2FnZU5hbWUsYnVuZGxlTmFtZSxsb2NhbGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZmluZFJlc291cmNlKGJ1bmRsZSxjbGFzc05hbWUsa2V5UGF0aCwgdmlzaXRlZCk7CisgICAgICAgIH0KKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc0luZGV4KFN0cmluZyBzKXsKKyAgICAgICAgICAgICBpZihzLmxlbmd0aCgpPT0xKXsKKyAgICAgICAgICAgICAgICBjaGFyIGMgPSBzLmNoYXJBdCgwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2hhcmFjdGVyLmlzRGlnaXQoYyk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIGludCBnZXRJbmRleChTdHJpbmcgcyl7CisgICAgICAgICAgICAgaWYocy5sZW5ndGgoKT09MSl7CisgICAgICAgICAgICAgICAgY2hhciBjID0gcy5jaGFyQXQoMCk7CisgICAgICAgICAgICAgICAgaWYoQ2hhcmFjdGVyLmlzRGlnaXQoYykpeworICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVnZXIudmFsdWVPZihzKS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHByaXZhdGUgT2JqZWN0IGZpbmRSZXNvdXJjZShPYmplY3RbXVtdIGNvbnRlbnRzLCBTdHJpbmcga2V5KXsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBrZXkgbXVzdCBiZSBub24tbnVsbCBTdHJpbmcsIHZhbHVlIG11c3QgYmUgbm9uLW51bGwKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGVtcEtleSA9IChTdHJpbmcpIGNvbnRlbnRzW2ldWzBdOworICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNvbnRlbnRzW2ldWzFdOworICAgICAgICAgICAgICAgIGlmICh0ZW1wS2V5ID09IG51bGwgfHwgdmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYodGVtcEtleS5lcXVhbHMoa2V5KSl7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIE9iamVjdCBmaW5kUmVzb3VyY2UoT2JqZWN0IG8gLCBTdHJpbmdbXSBrZXlzLCBpbnQgc3RhcnQpeworICAgICAgICAgICAgT2JqZWN0IG9iaiA9IG87CisgICAgICAgICAgICBpZiggc3RhcnQgPCBrZXlzLmxlbmd0aCAmJiBrZXlzW3N0YXJ0XSAhPW51bGwpeworCSAgICAgICAgICAgIGlmKG9iaiBpbnN0YW5jZW9mIE9iamVjdFtdW10peworCSAgICAgICAgICAgICAgICBvYmogPSBmaW5kUmVzb3VyY2UoKE9iamVjdFtdW10pb2JqLGtleXNbc3RhcnRdKTsgICAKKwkgICAgICAgICAgICB9ZWxzZSBpZihvYmogaW5zdGFuY2VvZiBPYmplY3RbXSAmJiBpc0luZGV4KGtleXNbc3RhcnRdKSl7CisgICAgICAgICAgICAgICAgICAgIG9iaiA9ICgoT2JqZWN0W10pb2JqKVtnZXRJbmRleChrZXlzW3N0YXJ0XSldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihzdGFydCsxIDwga2V5cy5sZW5ndGggJiYga2V5c1tzdGFydCsxXSAhPW51bGwpeworICAgICAgICAgICAgICAgICAgICBvYmogPSBmaW5kUmVzb3VyY2Uob2JqLGtleXMsc3RhcnQrMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG9iajsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIE9iamVjdCBmaW5kUmVzb3VyY2UoUmVzb3VyY2VCdW5kbGUgYnVuZGxlLFN0cmluZyBjbGFzc05hbWUsU3RyaW5nIGtleSwgSGFzaHRhYmxlIHZpc2l0ZWQpeworICAgICAgICAgICAgaWYoa2V5PT1udWxsKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gKChJQ1VMaXN0UmVzb3VyY2VCdW5kbGUpYnVuZGxlKS5nZXRDb250ZW50cygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYodmlzaXRlZC5nZXQoY2xhc3NOYW1lK2tleSkhPW51bGwpeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24oIkNpcmN1bGFyIEFsaWFzZXMgaW4gYnVuZGxlLiIsYnVuZGxlLmdldENsYXNzKCkuZ2V0TmFtZSgpLGtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0ZWQucHV0KGNsYXNzTmFtZStrZXksIiIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmdbXSBrZXlzID0gc3BsaXQoa2V5LFJFU19QQVRIX1NFUF9DSEFSKTsKKyAgICAgICAgICAgIE9iamVjdCBvID1udWxsOworICAgICAgICAgICAgaWYoa2V5cy5sZW5ndGg+MCl7CisgICAgICAgICAgICAgICAgbyA9IGJ1bmRsZS5nZXRPYmplY3Qoa2V5c1swXSk7CisgICAgICAgICAgICAgICAgbyA9IGZpbmRSZXNvdXJjZShvLGtleXMsMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvPXJlc29sdmVBbGlhc2VzKG8sY2xhc3NOYW1lLGtleSx2aXNpdGVkKTsKKyAgICAgICAgICAgIHJldHVybiBvOworICAgICAgICB9CisgICAgICAgIHByaXZhdGUgIE9iamVjdCByZXNvbHZlQWxpYXNlcyhPYmplY3QgbyxTdHJpbmcgY2xhc3NOYW1lLFN0cmluZyBrZXksIEhhc2h0YWJsZSB2aXNpdGVkKXsKKyAgICAgICAgICAgIGlmKG8gaW5zdGFuY2VvZiBPYmplY3RbXVtdKXsKKyAgICAgICAgICAgICAgICBvID0gcmVzb2x2ZUFsaWFzZXMoKE9iamVjdFtdW10pbyxjbGFzc05hbWUsa2V5LHZpc2l0ZWQpOworICAgICAgICAgICAgfWVsc2UgaWYobyBpbnN0YW5jZW9mIE9iamVjdFtdKXsKKyAgICAgICAgICAgICAgICAgbyA9IHJlc29sdmVBbGlhc2VzKChPYmplY3RbXSlvLGNsYXNzTmFtZSxrZXksdmlzaXRlZCk7ICAgICAgICAgICAKKyAgICAgICAgICAgIH1lbHNlIGlmKG8gaW5zdGFuY2VvZiBBbGlhcyl7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoQWxpYXMpbykuZ2V0UmVzb3VyY2UoY2xhc3NOYW1lLGtleSx2aXNpdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvOworICAgICAgICB9CisgICAgICAgIHByaXZhdGUgT2JqZWN0IHJlc29sdmVBbGlhc2VzKE9iamVjdFtdW10gbyxTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcga2V5LEhhc2h0YWJsZSB2aXNpdGVkKXsKKyAgICAgICAgICAgIGludCBpID0wOworICAgICAgICAgICAgd2hpbGUoaTxvLmxlbmd0aCl7CisgICAgICAgICAgICAgICAgb1tpXVsxXT1yZXNvbHZlQWxpYXNlcygoT2JqZWN0KW9baV1bMV0sY2xhc3NOYW1lLGtleSx2aXNpdGVkKTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgfQorICAgICAgICBwcml2YXRlIE9iamVjdCByZXNvbHZlQWxpYXNlcyhPYmplY3RbXSBvLFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBrZXksSGFzaHRhYmxlIHZpc2l0ZWQpeworICAgICAgICAgICAgaW50IGkgPTA7CisgICAgICAgICAgICB3aGlsZShpPG8ubGVuZ3RoKXsKKyAgICAgICAgICAgICAgICBvW2ldPXJlc29sdmVBbGlhc2VzKChPYmplY3Qpb1tpXSxjbGFzc05hbWUsa2V5LHZpc2l0ZWQpOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcml2YXRlIFN0cmluZ1tdIHNwbGl0KFN0cmluZyBzb3VyY2UsIGNoYXIgZGVsaW1pdGVyKXsKKyAgICAgICAgICAgCisgICAgICAgICAgICBjaGFyW10gc3JjID0gc291cmNlLnRvQ2hhckFycmF5KCk7CisgICAgICAgICAgICBpbnQgaW5kZXggPSAwOworICAgICAgICAgICAgaW50IG51bWRlbGltaXQ9MDsKKyAgICAgICAgICAgIC8vIGZpcnN0IGNvdW50IHRoZSBudW1iZXIgb2YgZGVsaW1pdGVycworICAgICAgICAgICAgZm9yKGludCBpPTA7aTxzb3VyY2UubGVuZ3RoKCk7aSsrKXsKKyAgICAgICAgICAgICAgICBpZihzcmNbaV09PWRlbGltaXRlcil7CisgICAgICAgICAgICAgICAgICAgIG51bWRlbGltaXQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmdbXSB2YWx1ZXMgPW51bGw7CisgICAgICAgICAgICB2YWx1ZXMgPSBuZXcgU3RyaW5nW251bWRlbGltaXQrMl07CisgICAgICAgICAgICAvLyBub3cgc3BsaXQKKyAgICAgICAgICAgIGludCBvbGQ9MDsKKyAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8c3JjLmxlbmd0aDtqKyspeworICAgICAgICAgICAgICAgIGlmKHNyY1tqXT09ZGVsaW1pdGVyKXsKKwkgICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4KytdID0gbmV3IFN0cmluZyhzcmMsb2xkLGotb2xkKTsKKwkgICAgICAgICAgICAgICAgb2xkPWorMS8qIHNraXAgYWZ0ZXIgdGhlIGRlbGltaXRlciovOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKG9sZCA8c3JjLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB2YWx1ZXNbaW5kZXgrK109bmV3IFN0cmluZyhzcmMsb2xkLHNyYy5sZW5ndGgtb2xkKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgIH0KKyAgICB9CisgICAgCit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUxvY2FsZURhdGEuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUxvY2FsZURhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjZkNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSUNVTG9jYWxlRGF0YS5qYXZhCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBqYXZhLmxhbmcucmVmLlNvZnRSZWZlcmVuY2U7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYW5kIGFjY2VzcyB0byByZXNvdXJjZSBidW5kbGVzIGluIHRoZQorICogY29tLmlibS50ZXh0LnJlc291cmNlcyBwYWNrYWdlLiAgVW5saWtlIHRoZSBqYXZhIHZlcnNpb24sIHRoaXMgZG9lcworICogbm90IGluY2x1ZGUgcmVzb3VyY2VzIGZyb20gYW55IG90aGVyIGxvY2F0aW9uLiAgSW4gcGFydGljdWxhciwgaXQKKyAqIGRvZXMgbm90IGxvb2sgaW4gdGhlIGJvb3Qgb3Igc3lzdGVtIGNsYXNzIHBhdGguCisgKi8KK3B1YmxpYyBjbGFzcyBJQ1VMb2NhbGVEYXRhIHsKKyAgICBwcml2YXRlIHN0YXRpYyBMb2NhbGVbXSBsb2NhbGVMaXN0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQUNLQUdFMSA9ICJjb20uaWJtLmljdS5pbXBsLmRhdGEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHBhY2thZ2VOYW1lcyA9IHsgUEFDS0FHRTEgfTsKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRlYnVnID0gSUNVRGVidWcuZW5hYmxlZCgibG9jYWxlZGF0YSIpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGluc3RhbGxlZCBsb2NhbGVzLgorICAgICAqCisgICAgICogVGhlIGZvbGxvd2luZyBub3RlIGJ5IFJpY2ggaXMgb2Jzb2xldGUsIHNlZSBiZWxvdy4gIC0tIGRsZiAwMSBPY3QuIDIwMDIKKyAgICAgKiAtLS0tLQorICAgICAqIEBwYXJhbSBrZXkgQSByZXNvdXJjZSB0YWcuICBDdXJyZW50bHksIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuICBUaGUgb2J2aW91cworICAgICAqIGludGVudCwgaG93ZXZlciwgIGlzIGZvciBnZXRBdmFpbGFibGVMb2NhbGVzKCkgdG8gcmV0dXJuIGEgbGlzdCBvZiBvbmx5IHRob3NlCisgICAgICogbG9jYWxlcyB0aGF0IGNvbnRhaW4gYSByZXNvdXJjZSB3aXRoIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgdGFnLgorICAgICAqCisgICAgICogPHA+QmVmb3JlIHdlIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIHRoaXMgd2F5LCBob3dldmVyLCBzb21lIHRob3VnaHQgc2hvdWxkIGJlCisgICAgICogZ2l2ZW4gdG8gd2hldGhlciB0aGlzIGlzIHJlYWxseSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uICBCZWNhdXNlIG9mIHRoZSBsb29rdXAKKyAgICAgKiBhbGdvcml0aG0sIGEgTnVtYmVyRm9ybWF0LCBmb3IgZXhhbXBsZSwgaXMgImluc3RhbGxlZCIgZm9yIGFsbCBsb2NhbGVzLiAgQnV0IGlmCisgICAgICogd2UncmUgdHJ5aW5nIHRvIHB1dCB1cCBhIGxpc3Qgb2YgTnVtYmVyRm9ybWF0cyB0byBjaG9vc2UgZnJvbSwgd2UgbWF5IHdhbnQgdG8gc2VlCisgICAgICogb25seSBhIGxpc3Qgb2YgdGhvc2UgbG9jYWxlcyB0aGF0IHVuaXF1ZWx5IGRlZmluZSBhIE51bWJlckZvcm1hdCByYXRoZXIgdGhhbgorICAgICAqIGluaGVyaXRpbmcgb25lIGZyb20gYW5vdGhlciBsb2NhbGUuICBUaHVzLCBpZiBmciBhbmQgZnJfQ0EgdW5pcXVlbHkgZGVmaW5lCisgICAgICogTnVtYmVyRm9ybWF0IGRhdGEsIGJ1dCBmcl9CRSBkb2Vzbid0LCB0aGUgdXNlciB3b3VsZG4ndCBzZWUgIkZyZW5jaCAoQmVsZ2l1bSkiIGluCisgICAgICogdGhlIGxpc3QgYW5kIHdvdWxkIGdvIGZvciAiRnJlbmNoIChkZWZhdWx0KSIgaW5zdGVhZC4gIE9mIGNvdXJzZSwgdGhpcyBtZWFucworICAgICAqICJFbmdpc2ggKFVuaXRlZCBTdGF0ZXMpIiB3b3VsZCBub3QgYmUgaW4gdGhlIGxpc3QsIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBUaGlzIG1pZ2h0IGJlIG9rYXksIGJ1dCBtaWdodCBiZSBjb25mdXNpbmcgdG8gc29tZSB1c2Vycy4KKyAgICAgKgorICAgICAqIDxwPkluIGFkZGl0aW9uLCB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBnZXRBdmFpbGFibGVMb2NhbGVzKCkgZG9uJ3QgY3VycmVudGx5CisgICAgICogYWxsIHBhc3MgdGhlIHJpZ2h0IHRoaW5nIGZvciAia2V5LCIgbWVhbmluZyB0aGF0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlCisgICAgICogbG9va2VkIGF0IGJlZm9yZSBhbnl0aGluZyBpcyBkb25lIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICoKKyAgICAgKiA8cD5XZSByZWNvbW1lbmQgdGhhdCBzb21lb25lIHRha2Ugc29tZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24gb2YgdGhlc2UgaXNzdWVzIGJlZm9yZQorICAgICAqIG1vZGlmeWluZyB0aGlzIGZ1bmN0aW9uIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlICJrZXkiIHBhcmFtZXRlci4gIC0tcnRnIDEvMjYvOTgKKyAgICAgKiAtLS0tLQorICAgICAqCisgICAgICogUmV0dXJuIGEgbGlzdCBvZiB0aGUgbG9jYWxlcyBzdXBwb3J0ZWQgYnkgYSBjb2xsZWN0aW9uIG9mIHJlc291cmNlIGJ1bmRsZXMuCisgICAgICogQWxsIElDVUxvY2FsZURhdGEtYmFzZWQgc2VydmljZXMgdGhhdCB1c2UgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGJ1bmRsZSBzdXBwb3J0CisgICAgICogYWxsIHRoZSBsb2NhbGVzIGZyb20gdGhhdCBidW5kbGUuICBJZiBzdXBwb3J0IGZvciBhIHBhcnRpY3VsYXIgc2VydmljZSBpcyBzcG90dHksCisgICAgICogYSBkaWZmZXJlbnQgYnVuZGxlIHByZWZpeCBzaG91bGQgYmUgdXNlZCBmb3IgdGhhdCBzZXJ2aWNlLgorICAgICAqIEBwYXJhbSBidW5kbGVQcmVmaXggdGhlIHByZWZpeCBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlcyB0byB1c2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBMb2NhbGVbXSBnZXRBdmFpbGFibGVMb2NhbGVzKFN0cmluZyBidW5kbGVQcmVmaXgpIHsKKyAgICAgICAgcmV0dXJuIChMb2NhbGVbXSlnZXRBdmFpbEVudHJ5KGJ1bmRsZVByZWZpeCkuZ2V0TG9jYWxlTGlzdCgpLmNsb25lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRoZSBhdmlsYWJsZSBMT0NBTEVfRUxFTUVOVFMgbG9jYWxlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvY2FsZVtdIGdldEF2YWlsYWJsZUxvY2FsZXMoKSB7CisgICAgICAgIHJldHVybiBnZXRBdmFpbGFibGVMb2NhbGVzKExPQ0FMRV9FTEVNRU5UUyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgc2V0IG9mIHRoZSBsb2NhbGUgbmFtZXMgc3VwcG9ydGVkIGJ5IGEgY29sbGVjdGlvbiBvZiByZXNvdXJjZSBidW5kbGVzLgorICAgICAqIEBwYXJhbSBidW5kbGVQcmVmaXggdGhlIHByZWZpeCBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlcyB0byB1c2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTZXQgZ2V0QXZhaWxhYmxlTG9jYWxlTmFtZVNldChTdHJpbmcgYnVuZGxlUHJlZml4KSB7CisgICAgICAgIHJldHVybiBnZXRBdmFpbEVudHJ5KGJ1bmRsZVByZWZpeCkuZ2V0TG9jYWxlTmFtZVNldCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHNldCBvZiB0aGUgbG9jYWxlIG5hbWVzIHN1cHBvcnRlZCBieSBhIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2UgYnVuZGxlcy4KKyAgICAgKiBAcGFyYW0gYnVuZGxlUHJlZml4IHRoZSBwcmVmaXggb2YgdGhlIHJlc291cmNlIGJ1bmRsZXMgdG8gdXNlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2V0IGdldEF2YWlsYWJsZUxvY2FsZU5hbWVTZXQoKSB7CisgICAgICAgIHJldHVybiBnZXRBdmFpbGFibGVMb2NhbGVOYW1lU2V0KExPQ0FMRV9FTEVNRU5UUyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSG9sZHMgdGhlIHByZWZpeCwgYW5kIGxhemlseSBjcmVhdGVzIHRoZSBMb2NhbGVbXSBsaXN0IG9yIHRoZSBsb2NhbGUgbmFtZSBTZXQgYXMgbmVlZGVkLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEF2YWlsRW50cnkgeworICAgICAgICBwcml2YXRlIFN0cmluZyBwcmVmaXg7CisgICAgICAgIHByaXZhdGUgTG9jYWxlW10gbG9jYWxlczsKKyAgICAgICAgcHJpdmF0ZSBTZXQgbmFtZVNldDsKKworICAgICAgICBBdmFpbEVudHJ5KFN0cmluZyBwcmVmaXgpIHsKKyAgICAgICAgICAgIHRoaXMucHJlZml4ID0gcHJlZml4OworICAgICAgICB9CisKKyAgICAgICAgTG9jYWxlW10gZ2V0TG9jYWxlTGlzdCgpIHsKKyAgICAgICAgICAgIGlmIChsb2NhbGVzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBsb2NhbGVzID0gY3JlYXRlTG9jYWxlTGlzdChwcmVmaXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXM7CisgICAgICAgIH0KKworICAgICAgICBTZXQgZ2V0TG9jYWxlTmFtZVNldCgpIHsKKyAgICAgICAgICAgIGlmIChuYW1lU2V0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBuYW1lU2V0ID0gY3JlYXRlTG9jYWxlTmFtZVNldChwcmVmaXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5hbWVTZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdG9yZXMgdGhlIGxvY2FsZSBpbmZvcm1hdGlvbiBpbiBhIGNhY2hlIGFjY2Vzc2VkIGJ5IGtleSAoYnVuZGxlIHByZWZpeCkuICBUaGUKKyAgICAgKiBjYWNoZWQgb2JqZWN0cyBhcmUgQXZhaWxFbnRyaWVzLiAgVGhlIGNhY2hlIGlzIGhlbGQgYnkgYSBTb2Z0UmVmZXJlbmNlIAorICAgICAqIHNvIGl0IGNhbiBiZSBHQydkLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIEF2YWlsRW50cnkgZ2V0QXZhaWxFbnRyeShTdHJpbmcga2V5KSB7CisgICAgICAgIEF2YWlsRW50cnkgYWUgPSBudWxsOworICAgICAgICBNYXAgbGNhY2hlID0gbnVsbDsKKyAgICAgICAgaWYgKGxjYWNoZXJlZiAhPSBudWxsKSB7CisgICAgICAgICAgICBsY2FjaGUgPSAoTWFwKWxjYWNoZXJlZi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChsY2FjaGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFlID0gKEF2YWlsRW50cnkpbGNhY2hlLmdldChrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGFlID09IG51bGwpIHsKKyAgICAgICAgICAgIGFlID0gbmV3IEF2YWlsRW50cnkoa2V5KTsKKyAgICAgICAgICAgIGlmIChsY2FjaGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxjYWNoZSA9IG5ldyBIYXNoTWFwKCk7CisgICAgICAgICAgICAgICAgbGNhY2hlLnB1dChrZXksIGFlKTsKKyAgICAgICAgICAgICAgICBsY2FjaGVyZWYgPSBuZXcgU29mdFJlZmVyZW5jZShsY2FjaGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsY2FjaGUucHV0KGtleSwgYWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFlOworICAgIH0KKyAgICBwcml2YXRlIHN0YXRpYyBTb2Z0UmVmZXJlbmNlIGxjYWNoZXJlZjsKKworICAgIC8qKgorICAgICAqIFRoZSBkZWZhdWx0IG5hbWUgZm9yIHJlc291cmNlcyBjb250YWluaW5nIElDVSBsb2NhbGUgZGF0YS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBTEVfRUxFTUVOVFMgPSAiTG9jYWxlRWxlbWVudHMiOworCisgICAgLyoqCisgICAgICogR2V0cyBhIExvY2FsZUVsZW1lbnRzIHJlc291cmNlIGJ1bmRsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlc291cmNlQnVuZGxlIGdldExvY2FsZUVsZW1lbnRzKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIGdldFJlc291cmNlQnVuZGxlKExPQ0FMRV9FTEVNRU5UUywgbG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgTG9jYWxlRWxlbWVudHMgcmVzb3VyY2UgYnVuZGxlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUmVzb3VyY2VCdW5kbGUgZ2V0TG9jYWxlRWxlbWVudHMoU3RyaW5nIGxvY2FsZU5hbWUpIHsKKwlyZXR1cm4gZ2V0UmVzb3VyY2VCdW5kbGUoTE9DQUxFX0VMRU1FTlRTLCBsb2NhbGVOYW1lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGlsbCBuZWVkIHBlcm1pc3Npb25zIHRvIHVzZSBvdXIgb3duIGNsYXNzIGxvYWRlciwgaXMgdGhlcmUgbm8gd2F5CisgICAgICogdG8gbG9hZCBjbGFzcyByZXNvdXJjZXMgZnJvbSBuZXcgbG9jYXRpb25zIHRoYXQgYXJlbid0IGFscmVhZHkgb24gdGhlCisgICAgICogY2xhc3MgcGF0aD8KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBSZXNvdXJjZUJ1bmRsZSBpbnN0YW50aWF0ZUJ1bmRsZShTdHJpbmcgbmFtZSwgTG9jYWxlIGwpIHsKKwlSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShuYW1lLCBsKTsKKwlyZXR1cm4gcmI7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgcmVzb3VyY2UgYnVuZGxlIGZyb20gdGhlIGxvb2t1cCBjaGFpbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgbG9jYWxlTmFtZSkgeworCUxvY2FsZSBsb2NhbGUgPSBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKGxvY2FsZU5hbWUpOworCXJldHVybiBnZXRSZXNvdXJjZUJ1bmRsZShidW5kbGVOYW1lLCBsb2NhbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIHJlc291cmNlIGJ1bmRsZSBmcm9tIHRoZSBsb29rdXAgY2hhaW4uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZShTdHJpbmcgYnVuZGxlTmFtZSwgTG9jYWxlIGxvY2FsZSkgeworCWlmIChsb2NhbGUgPT0gbnVsbCkgeworCSAgICBsb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworCX0KKwlmb3IgKGludCBpID0gMDsgaSA8IHBhY2thZ2VOYW1lcy5sZW5ndGg7ICsraSkgeworCSAgICB0cnkgeworCQlTdHJpbmcgcGF0aCA9IHBhY2thZ2VOYW1lc1tpXSArICIuIiArIGJ1bmRsZU5hbWU7CisJCWlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKCJjYWxsaW5nIGluc3RhbnRpYXRlQnVuZGxlOiAiICsgcGF0aCArICJfIiArIGxvY2FsZSk7CisJCVJlc291cmNlQnVuZGxlIHJiID0gaW5zdGFudGlhdGVCdW5kbGUocGF0aCwgbG9jYWxlKTsKKwkJcmV0dXJuIHJiOworCSAgICB9IAorCSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJaWYgKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4oYnVuZGxlTmFtZSArICJfIiArIGxvY2FsZSArICIgbm90IGZvdW5kIGluICIgKyBwYWNrYWdlTmFtZXNbaV0pOworCSAgICB9CisJfQorCisJcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgcmVzb3VyY2UgYnVuZGxlIGZyb20gdGhlIGxvb2t1cCBjaGFpbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKFN0cmluZ1tdIHBhY2thZ2VzLCBTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIGxvY2FsZU5hbWUpIHsKKwkgICAgTG9jYWxlIGxvY2FsZSA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUobG9jYWxlTmFtZSk7CisgICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkgeworCSAgICAgICAgbG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKwkgICAgfQorCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhY2thZ2VzLmxlbmd0aDsgKytpKSB7CisJICAgICAgICB0cnkgeworCQkgICAgICAgIFN0cmluZyBwYXRoID0gcGFja2FnZXNbaV0gKyAiLiIgKyBidW5kbGVOYW1lOworCQkgICAgICAgIGlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKCJjYWxsaW5nIGluc3RhbnRpYXRlQnVuZGxlOiAiICsgcGF0aCArICJfIiArIGxvY2FsZSk7CisJCSAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBpbnN0YW50aWF0ZUJ1bmRsZShwYXRoLCBsb2NhbGUpOworCQkgICAgICAgIHJldHVybiByYjsKKwkgICAgICAgIH0gCisJICAgICAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkgICAgICAgICAgIGlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKGJ1bmRsZU5hbWUgKyAiXyIgKyBsb2NhbGUgKyAiIG5vdCBmb3VuZCBpbiAiICsgcGFja2FnZXNbaV0pOworCSAgICAgICAgfQorCSAgICB9CisJICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIHJlc291cmNlIGJ1bmRsZSBmcm9tIHRoZSBsb29rdXAgY2hhaW4uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZShTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgbG9jYWxlTmFtZSkgeworICAgICAgICBMb2NhbGUgbG9jYWxlID0gTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShsb2NhbGVOYW1lKTsKKyAgICAgICAgaWYgKGxvY2FsZSA9PSBudWxsKSB7CisgICAgICAgICAgICBsb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHBhdGggPSBwYWNrYWdlTmFtZSArICIuIiArIGJ1bmRsZU5hbWU7CisgICAgICAgICAgICBpZiAoZGVidWcpIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGluZyBpbnN0YW50aWF0ZUJ1bmRsZTogIiArIHBhdGggKyAiXyIgKyBsb2NhbGUpOworICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBpbnN0YW50aWF0ZUJ1bmRsZShwYXRoLCBsb2NhbGUpOworICAgICAgICAgICAgcmV0dXJuIHJiOworICAgICAgICB9IAorICAgICAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgaWYgKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4oYnVuZGxlTmFtZSArICJfIiArIGxvY2FsZSArICIgbm90IGZvdW5kIGluICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgYSByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlIHBhdGguICBVbmxpa2UgZ2V0UmVzb3VyY2VCdW5kbGUsIHRoaXMKKyAgICAgKiByZXR1cm5zIGFuICd1bnBhcmVudGVkJyBidW5kbGUgdGhhdCBleGFjdGx5IG1hdGNoZXMgdGhlIGJ1bmRsZSBuYW1lIGFuZCBsb2NhbGUgbmFtZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlc291cmNlQnVuZGxlIGxvYWRSZXNvdXJjZUJ1bmRsZShTdHJpbmcgYnVuZGxlTmFtZSwgTG9jYWxlIGxvY2FsZSkgeworCWlmIChsb2NhbGUgPT0gbnVsbCkgeworCSAgICBsb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworCX0KKwlyZXR1cm4gbG9hZFJlc291cmNlQnVuZGxlKGJ1bmRsZU5hbWUsIGxvY2FsZS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlIHBhdGguICBVbmxpa2UgZ2V0UmVzb3VyY2VCdW5kbGUsIHRoaXMKKyAgICAgKiByZXR1cm5zIGFuICd1bnBhcmVudGVkJyBidW5kbGUgdGhhdCBleGFjdGx5IG1hdGNoZXMgdGhlIGJ1bmRsZSBuYW1lIGFuZCBsb2NhbGUgbmFtZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlc291cmNlQnVuZGxlIGxvYWRSZXNvdXJjZUJ1bmRsZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIGxvY2FsZU5hbWUpIHsKKwlpZiAobG9jYWxlTmFtZSAhPSBudWxsICYmIGxvY2FsZU5hbWUubGVuZ3RoKCkgPiAwKSB7CisJICAgIGJ1bmRsZU5hbWUgPSBidW5kbGVOYW1lICsgIl8iICsgbG9jYWxlTmFtZTsKKwl9CisJZm9yIChpbnQgaSA9IDA7IGkgPCBwYWNrYWdlTmFtZXMubGVuZ3RoOyArK2kpIHsKKwkgICAgU3RyaW5nIG5hbWUgPSBwYWNrYWdlTmFtZXNbaV0gKyAiLiIgKyBidW5kbGVOYW1lOworCSAgICB0cnkgeworCQlpZiAobmFtZS5pbmRleE9mKCJfemhfIikgPT0gLTEpIHsgLy8gRExGIHRlbXBvcmFyeSBoYWNrCisJCSAgICBDbGFzcyByYmNsYXNzID0gSUNVTG9jYWxlRGF0YS5jbGFzcy5mb3JOYW1lKG5hbWUpOworCQkgICAgUmVzb3VyY2VCdW5kbGUgcmIgPSAoUmVzb3VyY2VCdW5kbGUpcmJjbGFzcy5uZXdJbnN0YW5jZSgpOworCQkgICAgcmV0dXJuIHJiOworCQl9CisJICAgIH0gCisJICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJaWYgKGRlYnVnKSB7CisJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oYnVuZGxlTmFtZSArICIgbm90IGZvdW5kIGluICIgKyBwYWNrYWdlTmFtZXNbaV0pOworCQl9CisJCS8vIGlnbm9yZSwga2VlcCBsb29raW5nCisJICAgIH0KKwkgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCWlmIChkZWJ1ZykgeworCQkgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCSAgICB9CisJfQorCWlmIChkZWJ1ZykgeworCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oYnVuZGxlTmFtZSArICIgbm90IGZvdW5kLiIpOworCX0KKwkKKwlyZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvLyA9PT09PT09PT09IHByaXZhdGVzID09PT09PT09PT0KKworICAgIHByaXZhdGUgc3RhdGljIFNldCBjcmVhdGVMb2NhbGVOYW1lU2V0KFN0cmluZyBidW5kbGVOYW1lKSB7CisJdHJ5IHsKKwkgICAgUmVzb3VyY2VCdW5kbGUgaW5kZXggPSBnZXRSZXNvdXJjZUJ1bmRsZShidW5kbGVOYW1lLCAiaW5kZXgiKTsKKwkgICAgU3RyaW5nW10gbG9jYWxlTmFtZXMgPSBpbmRleC5nZXRTdHJpbmdBcnJheSgiSW5zdGFsbGVkTG9jYWxlcyIpOworCisgICAgICAgICAgICAvLyBiYXJmIGdhZyBjaG9rZSBzcGl0IGhhY2suLi4KKyAgICAgICAgICAgIC8vIHNpbmNlIGphdmEncyBMb2NhbGUgJ2ZpeGVzJyB0aGUgbG9jYWxlIHN0cmluZyBmb3Igc29tZSBsb2NhbGVzLAorICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBmaXggb3VyIG5hbWVzIHRvIG1hdGNoLCBvdGhlcndpc2UgdGhlIExvY2FsZVtdIGxpc3QKKyAgICAgICAgICAgIC8vIHdvbid0IG1hdGNoIHRoZSBsb2NhbGUgbmFtZSBzZXQuICBXaGF0IHdlcmUgdGhleSB0aGlua2luZz8hPworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVOYW1lcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGxvY2FsZU5hbWVzW2ldID0gTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShsb2NhbGVOYW1lc1tpXSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSGFzaFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOworICAgICAgICAgICAgc2V0LmFkZEFsbChBcnJheXMuYXNMaXN0KGxvY2FsZU5hbWVzKSk7CisgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KHNldCk7CisJfQorCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VsZG4ndCBmaW5kIGluZGV4IGZvciBidW5kbGVOYW1lOiAiICsgYnVuZGxlTmFtZSk7CisgICAgICAgICAgICBUaHJlYWQuZHVtcFN0YWNrKCk7CisJfQorICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfU0VUOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIExvY2FsZVtdIGNyZWF0ZUxvY2FsZUxpc3QoU3RyaW5nIGJ1bmRsZU5hbWUpIHsKKwl0cnkgeworCSAgICBSZXNvdXJjZUJ1bmRsZSBpbmRleCA9IGdldFJlc291cmNlQnVuZGxlKGJ1bmRsZU5hbWUsICJpbmRleCIpOworCSAgICBTdHJpbmdbXSBsb2NhbGVOYW1lcyA9IGluZGV4LmdldFN0cmluZ0FycmF5KCJJbnN0YWxsZWRMb2NhbGVzIik7CisJICAgIExvY2FsZVtdIGxvY2FsZXMgPSBuZXcgTG9jYWxlW2xvY2FsZU5hbWVzLmxlbmd0aF07CisJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYWxlTmFtZXMubGVuZ3RoOyArK2kpIHsKKwkJbG9jYWxlc1tpXSA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUobG9jYWxlTmFtZXNbaV0pOworCSAgICB9CisJICAgIHJldHVybiBsb2NhbGVzOworCX0KKwljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3QgZmluZCBpbmRleCBmb3IgYnVuZGxlTmFtZTogIiArIGJ1bmRsZU5hbWUpOworICAgICAgICAgICAgVGhyZWFkLmR1bXBTdGFjaygpOworCX0KKwlyZXR1cm4gbmV3IExvY2FsZVswXTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VMb2NhbGVTZXJ2aWNlLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VMb2NhbGVTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmY2MyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUxvY2FsZVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDYxOCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVUxvY2FsZVNlcnZpY2UuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzEwLzA5IDE4OjU2OjU4ICQKKyAqICRSZXZpc2lvbjogMS4xMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS5sYW5nLnJlZi5Tb2Z0UmVmZXJlbmNlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKKworcHVibGljIGNsYXNzIElDVUxvY2FsZVNlcnZpY2UgZXh0ZW5kcyBJQ1VTZXJ2aWNlIHsKKyAgICBwcml2YXRlIExvY2FsZSBmYWxsYmFja0xvY2FsZTsKKyAgICBwcml2YXRlIFN0cmluZyBmYWxsYmFja0xvY2FsZU5hbWU7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYW4gSUNVTG9jYWxlU2VydmljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgSUNVTG9jYWxlU2VydmljZSgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYW4gSUNVTG9jYWxlU2VydmljZSB3aXRoIGEgbmFtZSAodXNlZnVsIGZvciBkZWJ1Z2dpbmcpLgorICAgICAqLworICAgIHB1YmxpYyBJQ1VMb2NhbGVTZXJ2aWNlKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHN1cGVyKG5hbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJyaWRlIGZvciBjYWxsZXJzIHVzaW5nIGxvY2FsZXMuICBUaGlzIGNhbGxzCisgICAgICogZ2V0KExvY2FsZSwgaW50LCBMb2NhbGVbXSkgd2l0aCBLSU5EX0FOWSBmb3Iga2luZCBhbmQgbnVsbCBmb3IKKyAgICAgKiBhY3R1YWxSZXR1cm4uCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXQoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICByZXR1cm4gZ2V0KGxvY2FsZSwgTG9jYWxlS2V5LktJTkRfQU5ZLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBvdmVycmlkZSBmb3IgY2FsbGVycyB1c2luZyBsb2NhbGVzLiAgVGhpcyBjYWxscworICAgICAqIGdldChMb2NhbGUsIGludCwgTG9jYWxlW10pIHdpdGggYSBudWxsIGFjdHVhbFJldHVybi4KKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGdldChMb2NhbGUgbG9jYWxlLCBpbnQga2luZCkgeworICAgICAgICByZXR1cm4gZ2V0KGxvY2FsZSwga2luZCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2Ugb3ZlcnJpZGUgZm9yIGNhbGxlcnMgdXNpbmcgbG9jYWxlcy4gVGhpcyBjYWxscworICAgICAqIGdldChMb2NhbGUsIFN0cmluZywgTG9jYWxlW10pIHdpdGggYSBudWxsIGtpbmQuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXQoTG9jYWxlIGxvY2FsZSwgTG9jYWxlW10gYWN0dWFsUmV0dXJuKSB7CisgICAgICAgIHJldHVybiBnZXQobG9jYWxlLCBMb2NhbGVLZXkuS0lORF9BTlksIGFjdHVhbFJldHVybik7CisgICAgfQorICAgICAgICAgICAgICAgICAgIAorICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJyaWRlIGZvciBjYWxsZXJzIHVzaW5nIGxvY2FsZXMuICBUaGlzIHVzZXMKKyAgICAgKiBjcmVhdGVLZXkoTG9jYWxlLnRvU3RyaW5nKCksIGtpbmQpIHRvIGNyZWF0ZSBhIGtleSwgY2FsbHMgZ2V0S2V5LCBhbmQgdGhlbgorICAgICAqIGlmIGFjdHVhbFJldHVybiBpcyBub3QgbnVsbCwgcmV0dXJucyB0aGUgYWN0dWFsUmVzdWx0IGZyb20KKyAgICAgKiBnZXRLZXkgKHN0cmlwcGluZyBhbnkgcHJlZml4KSBpbnRvIGEgTG9jYWxlLiAgCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXQoTG9jYWxlIGxvY2FsZSwgaW50IGtpbmQsIExvY2FsZVtdIGFjdHVhbFJldHVybikgeworICAgICAgICBLZXkga2V5ID0gY3JlYXRlS2V5KGxvY2FsZS50b1N0cmluZygpLCBraW5kKTsKKyAgICAgICAgaWYgKGFjdHVhbFJldHVybiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0S2V5KGtleSk7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmdbXSB0ZW1wID0gbmV3IFN0cmluZ1sxXTsKKyAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGdldEtleShrZXksIHRlbXApOworICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGludCBuID0gdGVtcFswXS5pbmRleE9mKCIvIik7CisgICAgICAgICAgICBpZiAobiA+PSAwKSB7CisgICAgICAgICAgICAgICAgdGVtcFswXSA9IHRlbXBbMF0uc3Vic3RyaW5nKG4rMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhY3R1YWxSZXR1cm5bMF0gPSBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKHRlbXBbMF0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2Ugb3ZlcnJpZGUgZm9yIGNhbGxlcnMgdXNpbmcgbG9jYWxlcy4gIFRoaXMgY2FsbHMKKyAgICAgKiByZWdpc3Rlck9iamVjdChPYmplY3QsIExvY2FsZSwgaW50IGtpbmQsIGludCBjb3ZlcmFnZSkKKyAgICAgKiBwYXNzaW5nIEtJTkRfQU5ZIGZvciB0aGUga2luZCwgYW5kIFZJU0lCTEUgZm9yIHRoZSBjb3ZlcmFnZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgRmFjdG9yeSByZWdpc3Rlck9iamVjdChPYmplY3Qgb2JqLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiByZWdpc3Rlck9iamVjdChvYmosIGxvY2FsZSwgTG9jYWxlS2V5LktJTkRfQU5ZLCBMb2NhbGVLZXlGYWN0b3J5LlZJU0lCTEUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjYWxsZXJzIHVzaW5nIGxvY2FsZXMuICBUaGlzIGNhbGxzCisgICAgICogcmVnaXN0ZXJPYmplY3QoT2JqZWN0LCBMb2NhbGUsIGludCBraW5kLCBpbnQgY292ZXJhZ2UpCisgICAgICogcGFzc2luZyBWSVNJQkxFIGZvciB0aGUgY292ZXJhZ2UuCisgICAgICovCisgICAgcHVibGljIEZhY3RvcnkgcmVnaXN0ZXJPYmplY3QoT2JqZWN0IG9iaiwgTG9jYWxlIGxvY2FsZSwgaW50IGtpbmQpIHsKKyAgICAgICAgcmV0dXJuIHJlZ2lzdGVyT2JqZWN0KG9iaiwgbG9jYWxlLCBraW5kLCBMb2NhbGVLZXlGYWN0b3J5LlZJU0lCTEUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjYWxsZXJzIHVzaW5nIGxvY2FsZXMuICBUaGlzICBpbnN0YW50aWF0ZXMKKyAgICAgKiBhIFNpbXBsZUxvY2FsZUtleUZhY3RvcnksIGFuZCByZWdpc3RlcnMgdGhlIGZhY3RvcnkuCisgICAgICovCisgICAgcHVibGljIEZhY3RvcnkgcmVnaXN0ZXJPYmplY3QoT2JqZWN0IG9iaiwgTG9jYWxlIGxvY2FsZSwgaW50IGtpbmQsIGludCBjb3ZlcmFnZSkgeworICAgICAgICBGYWN0b3J5IGZhY3RvcnkgPSBuZXcgU2ltcGxlTG9jYWxlS2V5RmFjdG9yeShvYmosIGxvY2FsZSwga2luZCwgY292ZXJhZ2UpOworCXJldHVybiByZWdpc3RlckZhY3RvcnkoZmFjdG9yeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjYWxsZXJzIHVzaW5nIGxvY2FsZXMuICBUaGlzIHJldHVybnMgdGhlIHN0YW5kYXJkCisgICAgICogTG9jYWxlIGxpc3QsIGJ1aWx0IGZyb20gdGhlIFNldCBvZiB2aXNpYmxlIGlkcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgTG9jYWxlW10gZ2V0QXZhaWxhYmxlTG9jYWxlcygpIHsKKyAgICAgICAgU2V0IHZpc0lEcyA9IGdldFZpc2libGVJRHMoKTsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IHZpc0lEcy5pdGVyYXRvcigpOworICAgICAgICBMb2NhbGVbXSBsb2NhbGVzID0gbmV3IExvY2FsZVt2aXNJRHMuc2l6ZSgpXTsKKyAgICAgICAgaW50IG4gPSAwOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIExvY2FsZSBsb2MgPSBMb2NhbGVVdGlsaXR5LmdldExvY2FsZUZyb21OYW1lKChTdHJpbmcpaXRlci5uZXh0KCkpOworICAgICAgICAgICAgbG9jYWxlc1tuKytdID0gbG9jOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsb2NhbGVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgc3ViY2xhc3Mgb2YgS2V5IHRoYXQgaW1wbGVtZW50cyBhIGxvY2FsZSBmYWxsYmFjayBtZWNoYW5pc20uCisgICAgICogVGhlIGZpcnN0IGxvY2FsZSB0byBzZWFyY2ggZm9yIGlzIHRoZSBsb2NhbGUgcHJvdmlkZWQgYnkgdGhlCisgICAgICogY2xpZW50LCBhbmQgdGhlIGZhbGxiYWNrIGxvY2FsZSB0byBzZWFyY2ggZm9yIGlzIHRoZSBjdXJyZW50CisgICAgICogZGVmYXVsdCBsb2NhbGUuICBJZiBhIHByZWZpeCBpcyBwcmVzZW50LCB0aGUgY3VycmVudERlc2NyaXB0b3IKKyAgICAgKiBpbmNsdWRlcyBpdCBiZWZvcmUgdGhlIGxvY2FsZSBwcm9wZXIsIHNlcGFyYXRlZCBieSAiLyIuICBUaGlzCisgICAgICogaXMgdGhlIGRlZmF1bHQga2V5IGluc3RhbnRpYXRlZCBieSBJQ1VMb2NhbGVTZXJ2aWNlLjwvcD4KKyAgICAgKgorICAgICAqIDxwPkNhbm9uaWNhbGl6YXRpb24gYWRqdXN0cyB0aGUgbG9jYWxlIHN0cmluZyBzbyB0aGF0IHRoZQorICAgICAqIHNlY3Rpb24gYmVmb3JlIHRoZSBmaXJzdCB1bmRlcnN0b3JlIGlzIGluIGxvd2VyIGNhc2UsIGFuZCB0aGUgcmVzdAorICAgICAqIGlzIGluIHVwcGVyIGNhc2UsIHdpdGggbm8gdHJhaWxpbmcgdW5kZXJzY29yZXMuPC9wPiAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIExvY2FsZUtleSBleHRlbmRzIElDVVNlcnZpY2UuS2V5IHsKKyAgICAgICAgcHJpdmF0ZSBpbnQga2luZDsKKwlwcml2YXRlIFN0cmluZyBwcmltYXJ5SUQ7CisJcHJpdmF0ZSBTdHJpbmcgZmFsbGJhY2tJRDsKKwlwcml2YXRlIFN0cmluZyBjdXJyZW50SUQ7CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9BTlkgPSAtMTsKKworCS8qKgorCSAqIENyZWF0ZSBhIExvY2FsZUtleSB3aXRoIGNhbm9uaWNhbCBwcmltYXJ5IGFuZCBmYWxsYmFjayBJRHMuCisJICovCisJcHVibGljIHN0YXRpYyBMb2NhbGVLZXkgY3JlYXRlV2l0aENhbm9uaWNhbEZhbGxiYWNrKFN0cmluZyBwcmltYXJ5SUQsIFN0cmluZyBjYW5vbmljYWxGYWxsYmFja0lEKSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlV2l0aENhbm9uaWNhbEZhbGxiYWNrKHByaW1hcnlJRCwgY2Fub25pY2FsRmFsbGJhY2tJRCwgS0lORF9BTlkpOworCX0KKwkgICAgCisJLyoqCisJICogQ3JlYXRlIGEgTG9jYWxlS2V5IHdpdGggY2Fub25pY2FsIHByaW1hcnkgYW5kIGZhbGxiYWNrIElEcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIExvY2FsZUtleSBjcmVhdGVXaXRoQ2Fub25pY2FsRmFsbGJhY2soU3RyaW5nIHByaW1hcnlJRCwgU3RyaW5nIGNhbm9uaWNhbEZhbGxiYWNrSUQsIGludCBraW5kKSB7CisgICAgICAgICAgICBpZiAocHJpbWFyeUlEID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBjYW5vbmljYWxQcmltYXJ5SUQgPSBMb2NhbGVVdGlsaXR5LmNhbm9uaWNhbExvY2FsZVN0cmluZyhwcmltYXJ5SUQpOworCSAgICByZXR1cm4gbmV3IExvY2FsZUtleShwcmltYXJ5SUQsIGNhbm9uaWNhbFByaW1hcnlJRCwgY2Fub25pY2FsRmFsbGJhY2tJRCwga2luZCk7CisJfQorCSAgICAKKwkvKioKKwkgKiBQcmltYXJ5SUQgaXMgdGhlIHVzZXIncyByZXF1ZXN0ZWQgbG9jYWxlIHN0cmluZywKKwkgKiBjYW5vbmljYWxQcmltYXJ5SUQgaXMgdGhpcyBzdHJpbmcgaW4gY2Fub25pY2FsIGZvcm0sCisJICogZmFsbGJhY2tJRCBpcyB0aGUgY3VycmVudCBkZWZhdWx0IGxvY2FsZSdzIHN0cmluZyBpbgorCSAqIGNhbm9uaWNhbCBmb3JtLgorCSAqLworICAgICAgICBwcm90ZWN0ZWQgTG9jYWxlS2V5KFN0cmluZyBwcmltYXJ5SUQsIFN0cmluZyBjYW5vbmljYWxQcmltYXJ5SUQsIFN0cmluZyBjYW5vbmljYWxGYWxsYmFja0lELCBpbnQga2luZCkgeworCSAgICBzdXBlcihwcmltYXJ5SUQpOworCisgICAgICAgICAgICB0aGlzLmtpbmQgPSBraW5kOworCSAgICAKKwkgICAgaWYgKGNhbm9uaWNhbFByaW1hcnlJRCA9PSBudWxsKSB7CisJCXRoaXMucHJpbWFyeUlEID0gIiI7CisJICAgIH0gZWxzZSB7CisJCXRoaXMucHJpbWFyeUlEID0gY2Fub25pY2FsUHJpbWFyeUlEOworCSAgICB9CisJICAgIGlmICh0aGlzLnByaW1hcnlJRCA9PSAiIikgeworCQl0aGlzLmZhbGxiYWNrSUQgPSBudWxsOworCSAgICB9IGVsc2UgeworCQlpZiAoY2Fub25pY2FsRmFsbGJhY2tJRCA9PSBudWxsIHx8IHRoaXMucHJpbWFyeUlELmVxdWFscyhjYW5vbmljYWxGYWxsYmFja0lEKSkgeworCQkgICAgdGhpcy5mYWxsYmFja0lEID0gIiI7CisJCX0gZWxzZSB7CisJCSAgICB0aGlzLmZhbGxiYWNrSUQgPSBjYW5vbmljYWxGYWxsYmFja0lEOworCQl9CisJICAgIH0KKworCSAgICB0aGlzLmN1cnJlbnRJRCA9IHRoaXMucHJpbWFyeUlEOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiB0aGUgcHJlZml4IGFzc29jaWF0ZWQgd2l0aCB0aGUga2luZCwgb3IgbnVsbCBpZiB0aGUga2luZCBpcyBLSU5EX0FOWS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgcHJlZml4KCkgeworICAgICAgICAgICAgcmV0dXJuIGtpbmQgPT0gS0lORF9BTlkgPyBudWxsIDogSW50ZWdlci50b1N0cmluZyhraW5kKCkpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiB0aGUga2luZCBjb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQga2luZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBraW5kOworICAgICAgICB9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIChjYW5vbmljYWwpIG9yaWdpbmFsIElELgorCSAqLworCXB1YmxpYyBTdHJpbmcgY2Fub25pY2FsSUQoKSB7CisJICAgIHJldHVybiBwcmltYXJ5SUQ7CisJfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIChjYW5vbmljYWwpIGN1cnJlbnQgSUQsIG9yIG51bGwgaWYgbm8gY3VycmVudCBpZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgY3VycmVudElEKCkgeworCSAgICByZXR1cm4gY3VycmVudElEOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiB0aGUgKGNhbm9uaWNhbCkgY3VycmVudCBkZXNjcmlwdG9yLCBvciBudWxsIGlmIG5vIGN1cnJlbnQgaWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIGN1cnJlbnREZXNjcmlwdG9yKCkgeworICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGN1cnJlbnRJRCgpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gIi8iICsgcmVzdWx0OworICAgICAgICAgICAgICAgIGlmIChraW5kICE9IEtJTkRfQU5ZKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByZWZpeCgpICsgcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHJldHVybiB0aGUgbG9jYWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIChjYW5vbmljYWwpIG9yaWdpbmFsIElELgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIExvY2FsZSBjYW5vbmljYWxMb2NhbGUoKSB7CisgICAgICAgICAgICByZXR1cm4gTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShwcmltYXJ5SUQpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byByZXR1cm4gdGhlIGxvY2FsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSAoY2Fub25pY2FsKSBjdXJyZW50IElELgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIExvY2FsZSBjdXJyZW50TG9jYWxlKCkgeworICAgICAgICAgICAgcmV0dXJuIExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUoY3VycmVudElEKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUga2V5IGhhcyBhIGZhbGxiYWNrLCBtb2RpZnkgdGhlIGtleSBhbmQgcmV0dXJuIHRydWUsCisgICAgICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuPC9wPgorCSAqCisJICogPHA+Rmlyc3QgZmFsbHMgYmFjayB0aHJvdWdoIHRoZSBwcmltYXJ5IElELCB0aGVuIHRocm91Z2gKKwkgKiB0aGUgZmFsbGJhY2tJRC4gIFRoZSBmaW5hbCBmYWxsYmFjayBpcyB0aGUgZW1wdHkgc3RyaW5nLAorCSAqIHVubGVzcyB0aGUgcHJpbWFyeSBpZCB3YXMgdGhlIGVtcHR5IHN0cmluZywgaW4gd2hpY2ggY2FzZQorCSAqIHRoZXJlIGlzIG5vIGZhbGxiYWNrLiAgCisJICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGZhbGxiYWNrKCkgeworCSAgICBpbnQgeCA9IGN1cnJlbnRJRC5sYXN0SW5kZXhPZignXycpOworCSAgICBpZiAoeCAhPSAtMSkgeworCQljdXJyZW50SUQgPSBjdXJyZW50SUQuc3Vic3RyaW5nKDAsIHgpOworCQlyZXR1cm4gdHJ1ZTsKKwkgICAgfQorCSAgICBpZiAoZmFsbGJhY2tJRCAhPSBudWxsKSB7CisJCWN1cnJlbnRJRCA9IGZhbGxiYWNrSUQ7CisJCWZhbGxiYWNrSUQgPSBmYWxsYmFja0lELmxlbmd0aCgpID09IDAgPyBudWxsIDogIiI7CisJCXJldHVybiB0cnVlOworCSAgICB9CisJICAgIGN1cnJlbnRJRCA9IG51bGw7CisJICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEEgc3ViY2xhc3Mgb2YgRmFjdG9yeSB0aGF0IHVzZXMgTG9jYWxlS2V5cywgYW5kIGlzIGFibGUgdG8KKyAgICAgKiAnY292ZXInIG1vcmUgc3BlY2lmaWMgbG9jYWxlcyB3aXRoIG1vcmUgZ2VuZXJhbCBsb2NhbGVzIHRoYXQgaXQKKyAgICAgKiBzdXBwb3J0cy4gIAorICAgICAqCisgICAgICogPHA+Q292ZXJhZ2UgbWF5IGJlIGVpdGhlciBvZiB0aGUgdmFsdWVzIFZJU0lCTEUgb3IgSU5WSVNJQkxFLgorICAgICAqCisgICAgICogPHA+J1Zpc2libGUnIGluZGljYXRlcyB0aGF0IHRoZSBzcGVjaWZpYyBsb2NhbGUocykgc3VwcG9ydGVkIGJ5CisgICAgICogdGhlIGZhY3RvcnkgYXJlIHJlZ2lzdGVyZWQgaW4gZ2V0U3VwcG9ydGVkSURzLCAnSW52aXNpYmxlJworICAgICAqIGluZGljYXRlcyB0aGF0IHRoZXkgYXJlIG5vdC4KKyAgICAgKgorICAgICAqIDxwPkxvY2FsaXphdGlvbiBvZiB2aXNpYmxlIGlkcyBpcyBoYW5kbGVkCisgICAgICogYnkgdGhlIGhhbmRsaW5nIGZhY3RvcnksIHJlZ2FyZGxlc3Mgb2Yga2luZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIExvY2FsZUtleUZhY3RvcnkgaW1wbGVtZW50cyBGYWN0b3J5IHsKKyAgICAgICAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBuYW1lOworICAgICAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGNvdmVyYWdlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb3ZlcmFnZSB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGZhY3RvcnkgbWFrZXMKKyAgICAgICAgICogaXRzIGxvY2FsZXMgdmlzaWJsZSwgYW5kIGRvZXMgbm90IGNvdmVyIG1vcmUgc3BlY2lmaWMgCisgICAgICAgICAqIGxvY2FsZXMuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWSVNJQkxFID0gMDsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ292ZXJhZ2UgdmFsdWUgaW5kaWNhdGluZyB0aGF0IHRoZSBmYWN0b3J5IGRvZXMgbm90IG1ha2UKKyAgICAgICAgICogaXRzIGxvY2FsZXMgdmlzaWJsZSwgYW5kIGRvZXMgbm90IGNvdmVyIG1vcmUgc3BlY2lmaWMKKyAgICAgICAgICogbG9jYWxlcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVklTSUJMRSA9IDE7CisKKyAgICAgICAgLy8gdW5kZWZpbmUgdGhlc2Ugc2luY2UgaGlkaW5nIG90aGVyIGZhY3RvcmllcyBvcGVucyBhIGJpZyBiYWcgb2Ygd29ybXMKKyAgICAgICAgLyoKKyAgICAgICAgICogQ292ZXJhZ2UgdmFsdWUgaW5kaWNhdGluZyB0aGF0IHRoZSBmYWN0b3J5IG1ha2VzCisgICAgICAgICAqIGl0cyBsb2NhbGVzIHZpc2libGUsIGNvdmVycyBtb3JlIHNwZWNpZmljIAorICAgICAgICAgKiBsb2NhbGVzLCBhbmQgcHJvdmlkZXMgbG9jYWxpemF0aW9uIGZvciB0aGUgY292ZXJlZAorICAgICAgICAgKiBsb2NhbGVzLgorICAgICAgICAgKgorICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWSVNJQkxFX0NPVkVSUyA9IDI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvdmVyYWdlIHZhbHVlIGluZGljYXRpbmcgdGhhdCB0aGUgZmFjdG9yeSBkb2VzIG5vdAorICAgICAgICAgKiBtYWtlIGl0cyBsb2NhbGVzIHZpc2libGUsIGNvdmVycyBtb3JlIHNwZWNpZmljCisgICAgICAgICAqIGxvY2FsZXMsIGFuZCBhbHNvIGRvZXMgbm90IGFsbG93IHRoZSBsb2NhbGVzIGl0CisgICAgICAgICAqIGNvdmVycyB0byBiZSB2aXNpYmxlLgorICAgICAgICAgKgorICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlZJU0lCTEVfQ09WRVJTID0gMzsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ292ZXJhZ2UgdmFsdWUgaW5kaWNhdGluZyB0aGF0IHRoZSBmYWN0b3J5IG1ha2VzCisgICAgICAgICAqIGl0cyBsb2NhbGVzIHZpc2libGUsIGNvdmVycyBtb3JlIHNwZWNpZmljIAorICAgICAgICAgKiBsb2NhbGVzLCBidXQgZG9lcyBub3QgYWxsb3cgdGhlIGxvY2FsZXMgaXQgY292ZXJzCisgICAgICAgICAqIHRvIGJlIHZpc2libGUuCisgICAgICAgICAqCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZJU0lCTEVfQ09WRVJTX1JFTU9WRSA9IDY7CisgICAgICAgICovCisKKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb25zdHJ1Y3RvciB1c2VkIGJ5IHN1YmNsYXNzZXMuCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgTG9jYWxlS2V5RmFjdG9yeShpbnQgY292ZXJhZ2UpIHsKKyAgICAgICAgICAgIHRoaXMuY292ZXJhZ2UgPSBjb3ZlcmFnZTsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ29uc3RydWN0b3IgdXNlZCBieSBzdWJjbGFzc2VzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIExvY2FsZUtleUZhY3RvcnkoaW50IGNvdmVyYWdlLCBTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgdGhpcy5jb3ZlcmFnZSA9IGNvdmVyYWdlOworICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbXBsZW1lbnQgc3VwZXJjbGFzcyBhYnN0cmFjdCBtZXRob2QuICBUaGlzIGNoZWNrcyB0aGUgY3VycmVudElEIG9mCisgICAgICAgICAqIHRoZSBrZXkgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIElEcywgYW5kIHBhc3NlcyB0aGUgY2Fub25pY2FsTG9jYWxlIGFuZAorICAgICAgICAgKiBraW5kIG9mZiB0byBoYW5kbGVDcmVhdGUgKHdoaWNoIHN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQpLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIE9iamVjdCBjcmVhdGUoS2V5IGtleSwgSUNVU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlc0tleShrZXkpKSB7CisgICAgICAgICAgICAgICAgTG9jYWxlS2V5IGxrZXkgPSAoTG9jYWxlS2V5KWtleTsKKyAgICAgICAgICAgICAgICBMb2NhbGUgbG9jID0gbGtleS5jYW5vbmljYWxMb2NhbGUoKTsKKyAgICAgICAgICAgICAgICBpbnQga2luZCA9IGxrZXkua2luZCgpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNyZWF0ZShsb2MsIGtpbmQsIHNlcnZpY2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oImZhY3Rvcnk6ICIgKyB0aGlzICsgIiBkaWQgbm90IHN1cHBvcnQgaWQ6ICIgKyBrZXkuY3VycmVudElEKCkpOworICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigic3VwcG9ydGVkIGlkczogIiArIGdldFN1cHBvcnRlZElEcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlc0tleShLZXkga2V5KSB7CisgICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IGtleS5jdXJyZW50SUQoKTsKKyAgICAgICAgICAgIFNldCBzdXBwb3J0ZWQgPSBnZXRTdXBwb3J0ZWRJRHMoKTsKKyAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWQuY29udGFpbnMoaWQpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGNvdmVyYWdlIG5vdCBzdXBwb3J0ZWQKKworICAgICAgICAgICAgaWYgKHN1cHBvcnRlZC5jb250YWlucyhpZCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoY292ZXJhZ2UgJiAweDIpICE9IDApIHsgCisgICAgICAgICAgICAgICAgSXRlcmF0b3IgaXRlciA9IHN1cHBvcnRlZC5pdGVyYXRvcigpOworICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcyA9IChTdHJpbmcpaXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMb2NhbGVVdGlsaXR5LmlzRmFsbGJhY2tPZihzLCBpZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSBvZiBzdXBlcmNsYXNzIG1ldGhvZC4gIFRoaXMgYWRqdXN0cyB0aGUgcmVzdWx0IGJhc2VkCisgICAgICAgICAqIG9uIHRoZSBjb3ZlcmFnZSBydWxlIGZvciB0aGlzIGZhY3RvcnkuCisgICAgICAgICAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZVZpc2libGVJRHMoTWFwIHJlc3VsdCkgeworICAgICAgICAgICAgU2V0IGNhY2hlID0gZ2V0U3VwcG9ydGVkSURzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2xlYW4gdmlzaWJsZSA9IChjb3ZlcmFnZSAmIDB4MSkgPT0gMDsKKyAgICAgICAgICAgIGJvb2xlYW4gY292ZXJzID0gKGNvdmVyYWdlICYgMHgyKSAhPSAwOworICAgICAgICAgICAgYm9vbGVhbiByZW1vdmVzID0gIXZpc2libGUgfHwgKGNvdmVyYWdlICYgMHg0KSAhPSAwOworCisgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oInZpczogIiArIHZpc2libGUgKyAiIGNvdmVyczogIiArIGNvdmVycyArICIgcmVtb3ZlczogIiArIHJlbW92ZXMpOworICAgICAgICAgICAgTWFwIHRvUmVtYXAgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICAgICAgSXRlcmF0b3IgaXRlciA9IGNhY2hlLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQ292ZXJhZ2Ugbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIGlmIChjb3ZlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGlkbGVuID0gaWQubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIG1pdGVyID0gcmVzdWx0LmtleVNldCgpLml0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtaWQgPSAoU3RyaW5nKW1pdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaWQuc3RhcnRzV2l0aChpZCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWlkLmxlbmd0aCgpID09IGlkbGVuIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pZC5jaGFyQXQoaWRsZW4pID09ICdfJykpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pdGVyLnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVtYXAucHV0KG1pZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCF2aXNpYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZW1vdmUoaWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRvUmVtYXAucHV0KGlkLCB0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0LnB1dEFsbCh0b1JlbWFwKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gYSBsb2NhbGl6ZWQgbmFtZSBmb3IgdGhlIGxvY2FsZSByZXByZXNlbnRlZCBieSBpZC4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKFN0cmluZyBpZCwgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgaWYgKGxvY2FsZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTG9jYWxlIGxvYyA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUoaWQpOworCSAgICByZXR1cm4gbG9jLmdldERpc3BsYXlOYW1lKGxvY2FsZSk7CisJfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBVdGlsaXR5IG1ldGhvZCB1c2VkIGJ5IGNyZWF0ZShLZXksIElDVVNlcnZpY2UpLiAgU3ViY2xhc3NlcyBjYW4gaW1wbGVtZW50CisgICAgICAgICAqIHRoaXMgaW5zdGVhZCBvZiBjcmVhdGUuCisgICAgICAgICAqLworICAgICAgICAvLy9DTE9WRVI6T0ZGCisgICAgICAgIHByb3RlY3RlZCBPYmplY3QgaGFuZGxlQ3JlYXRlKExvY2FsZSBsb2MsIGludCBraW5kLCBJQ1VTZXJ2aWNlIHNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIC8vL0NMT1ZFUjpPTgorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIHNldCBvZiBpZHMgdGhhdCB0aGlzIGZhY3Rvcnkgc3VwcG9ydHMgKHZpc2libGUgb3IgCisgICAgICAgICAqIG90aGVyd2lzZSkuICBUaGlzIGNhbiBiZSBjYWxsZWQgb2Z0ZW4gYW5kIG1pZ2h0IG5lZWQgdG8gYmUKKyAgICAgICAgICogY2FjaGVkIGlmIGl0IGlzIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU2V0IGdldFN1cHBvcnRlZElEcygpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBGb3IgZGVidWdnaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIiwgbmFtZTogIik7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIiwgY292ZXJhZ2U6ICIpOworICAgICAgICAgICAgU3RyaW5nW10gY292ZXJhZ2VfbmFtZXMgPSB7CisgICAgICAgICAgICAgICAgInZpc2libGUiLCAiaW52aXNpYmxlIiwgInZpc2libGVfY292ZXJzIiwgImludmlzaWJsZV9jb3ZlcnMiLCAiPz8/PyIsICJ2aXNpYmxlX2NvdmVyc19yZW1vdmUiCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnVmLmFwcGVuZChjb3ZlcmFnZV9uYW1lc1tjb3ZlcmFnZV0pOworICAgICAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBMb2NhbGVLZXlGYWN0b3J5IHRoYXQganVzdCByZXR1cm5zIGEgc2luZ2xlIG9iamVjdCBmb3IgYSBraW5kL2xvY2FsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNpbXBsZUxvY2FsZUtleUZhY3RvcnkgZXh0ZW5kcyBMb2NhbGVLZXlGYWN0b3J5IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3Qgb2JqOworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBpZDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQga2luZDsKKworICAgICAgICBwdWJsaWMgU2ltcGxlTG9jYWxlS2V5RmFjdG9yeShPYmplY3Qgb2JqLCBMb2NhbGUgbG9jYWxlLCBpbnQga2luZCwgaW50IGNvdmVyYWdlKSB7CisgICAgICAgICAgICB0aGlzKG9iaiwgbG9jYWxlLCBraW5kLCBjb3ZlcmFnZSwgbnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU2ltcGxlTG9jYWxlS2V5RmFjdG9yeShPYmplY3Qgb2JqLCBMb2NhbGUgbG9jYWxlLCBpbnQga2luZCwgaW50IGNvdmVyYWdlLCBTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgc3VwZXIoY292ZXJhZ2UsIG5hbWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB0aGlzLm9iaiA9IG9iajsKKyAgICAgICAgICAgIHRoaXMuaWQgPSBMb2NhbGVVdGlsaXR5LmNhbm9uaWNhbExvY2FsZVN0cmluZyhsb2NhbGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB0aGlzLmtpbmQgPSBraW5kOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2Ugb2JqZWN0IGlmIGtpbmQvbG9jYWxlIG1hdGNoLiAgU2VydmljZSBpcyBub3QgdXNlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlKEtleSBrZXksIElDVVNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICAgICAgTG9jYWxlS2V5IGxrZXkgPSAoTG9jYWxlS2V5KWtleTsKKyAgICAgICAgICAgIGlmIChraW5kID09IExvY2FsZUtleS5LSU5EX0FOWSB8fCBraW5kID09IGxrZXkua2luZCgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGtleUlEID0gbGtleS5jdXJyZW50SUQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaWQuZXF1YWxzKGtleUlEKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIFNldCBnZXRTdXBwb3J0ZWRJRHMoKSB7CisgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uKGlkKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIiwgaWQ6ICIpOworICAgICAgICAgICAgYnVmLmFwcGVuZChpZCk7CisgICAgICAgICAgICBidWYuYXBwZW5kKCIsIGtpbmQ6ICIpOworICAgICAgICAgICAgYnVmLmFwcGVuZChraW5kKTsKKyAgICAgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEEgTG9jYWxlS2V5RmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzZXJ2aWNlIGJhc2VkIG9uIHRoZSBJQ1UgbG9jYWxlIGRhdGEuCisgICAgICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIG1vc3QgSUNVIGZhY3Rvcmllcy4gIFN1YmNsYXNzZXMgaW5zdGFudGlhdGUgaXQKKyAgICAgKiB3aXRoIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIGJ1bmRsZSBuYW1lLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzdXBwb3J0ZWQKKyAgICAgKiBJRHMuICBTdWJjbGFzc2VzIHRoZW4gb3ZlcnJpZGUgaGFuZGxlQ3JlYXRlIHRvIGNyZWF0ZSB0aGUgYWN0dWFsIHNlcnZpY2UKKyAgICAgKiBvYmplY3QuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGEgcmVzb3VyY2UgYnVuZGxlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSUNVUmVzb3VyY2VCdW5kbGVGYWN0b3J5IGV4dGVuZHMgTG9jYWxlS2V5RmFjdG9yeSB7CisJcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBidW5kbGVOYW1lOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb252ZW5pZW5jZSBjb25zdHJ1Y3RvciB0aGF0IHVzZXMgdGhlIG1haW4gSUNVIGJ1bmRsZSBuYW1lLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIElDVVJlc291cmNlQnVuZGxlRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHRoaXMoSUNVTG9jYWxlRGF0YS5MT0NBTEVfRUxFTUVOVFMpOworICAgICAgICB9CisKKwkvKioKKwkgKiBBIHNlcnZpY2UgZmFjdG9yeSBiYXNlZCBvbiBJQ1UgcmVzb3VyY2UgZGF0YSBpbiByZXNvdXJjZXMKKwkgKiB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqLworCXB1YmxpYyBJQ1VSZXNvdXJjZUJ1bmRsZUZhY3RvcnkoU3RyaW5nIGJ1bmRsZU5hbWUpIHsKKyAgICAgICAgICAgIHN1cGVyKFZJU0lCTEUpOworCisgICAgICAgICAgICB0aGlzLmJ1bmRsZU5hbWUgPSBidW5kbGVOYW1lOworICAgICAgICB9CisKKwkvKioKKyAgICAgICAgICogUmV0dXJuIHRoZSBzdXBwb3J0ZWQgSURzLiAgVGhpcyBpcyB0aGUgc2V0IG9mIGFsbCBsb2NhbGUgbmFtZXMgaW4gSUNVTG9jYWxlRGF0YS4KKwkgKi8KKwlwcm90ZWN0ZWQgU2V0IGdldFN1cHBvcnRlZElEcygpIHsKKyAgICAgICAgICAgIHJldHVybiBJQ1VMb2NhbGVEYXRhLmdldEF2YWlsYWJsZUxvY2FsZU5hbWVTZXQoYnVuZGxlTmFtZSk7CisJfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgdGhlIHNlcnZpY2UuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSByZXNvdXJjZSBidW5kbGUKKyAgICAgICAgICogZm9yIHRoZSBsb2NhbGUsIGlnbm9yaW5nIGtpbmQsIGFuZCBzZXJ2aWNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBoYW5kbGVDcmVhdGUoTG9jYWxlIGxvYywgaW50IGtpbmQsIElDVVNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICAgICAgcmV0dXJuIElDVUxvY2FsZURhdGEuZ2V0UmVzb3VyY2VCdW5kbGUoYnVuZGxlTmFtZSwgbG9jKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKSArICIsIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmFsbGJhY2sgbG9jYWxlLiAgSWYgaXQgaGFzIGNoYW5nZWQgc2luY2UgdGhpcyB3YXMKKyAgICAgKiBsYXN0IGFjY2Vzc2VkLCB0aGUgc2VydmljZSBjYWNoZSBpcyBjbGVhcmVkLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdmFsaWRhdGVGYWxsYmFja0xvY2FsZSgpIHsKKwlMb2NhbGUgbG9jID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKwlpZiAobG9jICE9IGZhbGxiYWNrTG9jYWxlKSB7CisJICAgIHN5bmNocm9uaXplZCAodGhpcykgeworCQlpZiAobG9jICE9IGZhbGxiYWNrTG9jYWxlKSB7CisJCSAgICBmYWxsYmFja0xvY2FsZSA9IGxvYzsKKwkJICAgIGZhbGxiYWNrTG9jYWxlTmFtZSA9IExvY2FsZVV0aWxpdHkuY2Fub25pY2FsTG9jYWxlU3RyaW5nKGxvYy50b1N0cmluZygpKTsKKwkJICAgIGNsZWFyU2VydmljZUNhY2hlKCk7CisJCX0KKwkgICAgfQorCX0KKyAgICAgICAgcmV0dXJuIGZhbGxiYWNrTG9jYWxlTmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgS2V5IGNyZWF0ZUtleShTdHJpbmcgaWQpIHsKKwlyZXR1cm4gTG9jYWxlS2V5LmNyZWF0ZVdpdGhDYW5vbmljYWxGYWxsYmFjayhpZCwgdmFsaWRhdGVGYWxsYmFja0xvY2FsZSgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgS2V5IGNyZWF0ZUtleShTdHJpbmcgaWQsIGludCBraW5kKSB7CisJcmV0dXJuIExvY2FsZUtleS5jcmVhdGVXaXRoQ2Fub25pY2FsRmFsbGJhY2soaWQsIHZhbGlkYXRlRmFsbGJhY2tMb2NhbGUoKSwga2luZCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSUNVTm90aWZpZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVU5vdGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhlYzhkOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVU5vdGlmaWVyLmphdmEKQEAgLTAsMCArMSwxNzcgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VOb3RpZmllci5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6NDA6NTIgJAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50TGlzdGVuZXI7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIDxwPkFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGEgbm90aWZpY2F0aW9uIGZhY2lsaXR5LiAgQ2xpZW50cyBhZGQKKyAqIEV2ZW50TGlzdGVuZXJzIHdpdGggYWRkTGlzdGVuZXIgYW5kIHJlbW92ZSB0aGVtIHdpdGggcmVtb3ZlTGlzdGVuZXIuCisgKiBOb3RpZmllcnMgY2FsbCBub3RpZnlDaGFuZ2VkIHdoZW4gdGhleSB3aXNoIHRvIG5vdGlmeSBsaXN0ZW5lcnMuCisgKiBUaGlzIHF1ZXVlcyB0aGUgbGlzdGVuZXIgbGlzdCBvbiB0aGUgbm90aWZpY2F0aW9uIHRocmVhZCwgd2hpY2gKKyAqIGV2ZW50dWFsbHkgZGVxdWV1ZXMgdGhlIGxpc3QgYW5kIGNhbGxzIG5vdGlmeUxpc3RlbmVyIG9uIGVhY2gKKyAqIGxpc3RlbmVyIGluIHRoZSBsaXN0LjwvcD4KKyAqCisgKiA8cD5TdWJjbGFzc2VzIG92ZXJyaWRlIGFjY2VwdHNMaXN0ZW5lciBhbmQgbm90aWZ5TGlzdGVuZXIgCisgKiB0byBhZGQgdHlwZS1zYWZlIG5vdGlmaWNhdGlvbi4gIEFjY2VwdHNMaXN0ZW5lciBzaG91bGQgcmV0dXJuCisgKiB0cnVlIGlmIHRoZSBsaXN0ZW5lciBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZTsgSUNVTm90aWZpZXIKKyAqIGl0c2VsZiB3aWxsIGVuc3VyZSB0aGUgbGlzdGVuZXIgaXMgbm9uLW51bGwgYW5kIHRoYXQgdGhlCisgKiBpZGVudGljYWwgbGlzdGVuZXIgaXMgbm90IGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBOb3RpZmllci4KKyAqIE5vdGlmeUxpc3RlbmVyIHNob3VsZCBjYXN0IHRoZSBsaXN0ZW5lciB0byB0aGUgYXBwcm9wcmlhdGUgCisgKiB0eXBlIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb24gdGhlIGxpc3RlbmVyLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSUNVTm90aWZpZXIgeworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG5vdGlmeUxvY2sgPSBuZXcgT2JqZWN0KCk7CisgICAgcHJpdmF0ZSBOb3RpZnlUaHJlYWQgbm90aWZ5VGhyZWFkOworICAgIHByaXZhdGUgTGlzdCBsaXN0ZW5lcnM7CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSBsaXN0ZW5lciB0byBiZSBub3RpZmllZCB3aGVuIG5vdGlmeUNoYW5nZWQgaXMgY2FsbGVkLgorICAgICAqIFRoZSBsaXN0ZW5lciBtdXN0IG5vdCBiZSBudWxsLiBBY2NlcHRzTGlzdGVuZXIgbXVzdCByZXR1cm4KKyAgICAgKiB0cnVlIGZvciB0aGUgbGlzdGVuZXIuICBBdHRlbXB0cyB0byBjb25jdXJyZW50bHkKKyAgICAgKiByZWdpc3RlciB0aGUgaWRlbnRpY2FsIGxpc3RlbmVyIG1vcmUgdGhhbiBvbmNlIHdpbGwgYmUKKyAgICAgKiBzaWxlbnRseSBpZ25vcmVkLiAgCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoRXZlbnRMaXN0ZW5lciBsKSB7CisJaWYgKGwgPT0gbnVsbCkgeworCSAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKwl9CisKKwlpZiAoYWNjZXB0c0xpc3RlbmVyKGwpKSB7CisJICAgIHN5bmNocm9uaXplZCAobm90aWZ5TG9jaykgeworCQlpZiAobGlzdGVuZXJzID09IG51bGwpIHsKKwkJICAgIGxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3QoNSk7CisJCX0gZWxzZSB7CisJCSAgICAvLyBpZGVudGl0eSBlcXVhbGl0eSBjaGVjaworCQkgICAgSXRlcmF0b3IgaXRlciA9IGxpc3RlbmVycy5pdGVyYXRvcigpOworCQkgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlpZiAoaXRlci5uZXh0KCkgPT0gbCkgeworCQkJICAgIHJldHVybjsKKwkJCX0KKwkJICAgIH0KKwkJfQorCisJCWxpc3RlbmVycy5hZGQobCk7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiTGlzdGVuZXIgaW52YWxpZCBmb3IgdGhpcyBub3RpZmllci4iKTsKKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RvcCBub3RpZnlpbmcgdGhpcyBsaXN0ZW5lci4gIFRoZSBsaXN0ZW5lciBtdXN0CisgICAgICogbm90IGJlIG51bGwuICBBdHRlbXBzIHRvIHJlbW92ZSBhIGxpc3RlbmVyIHRoYXQgaXMKKyAgICAgKiBub3QgcmVnaXN0ZXJlZCB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoRXZlbnRMaXN0ZW5lciBsKSB7CisJaWYgKGwgPT0gbnVsbCkgeworCSAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKwl9CisJc3luY2hyb25pemVkIChub3RpZnlMb2NrKSB7CisJICAgIGlmIChsaXN0ZW5lcnMgIT0gbnVsbCkgeworCQkvLyBpZGVudGl0eSBlcXVhbGl0eSBjaGVjaworCQlJdGVyYXRvciBpdGVyID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgeworCQkgICAgaWYgKGl0ZXIubmV4dCgpID09IGwpIHsKKwkJCWl0ZXIucmVtb3ZlKCk7CisJCQlpZiAobGlzdGVuZXJzLnNpemUoKSA9PSAwKSB7CisJCQkgICAgbGlzdGVuZXJzID0gbnVsbDsKKwkJCX0KKwkJCXJldHVybjsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFF1ZXVlIGEgbm90aWZpY2F0aW9uIG9uIHRoZSBub3RpZmljYXRpb24gdGhyZWFkIGZvciB0aGUgY3VycmVudAorICAgICAqIGxpc3RlbmVycy4gIFdoZW4gdGhlIHRocmVhZCB1bnF1ZXVlcyB0aGUgbm90aWZpY2F0aW9uLCBub3RpZnlMaXN0ZW5lcgorICAgICAqIGlzIGNhbGxlZCBvbiBlYWNoIGxpc3RlbmVyIGZyb20gdGhlIG5vdGlmaWNhdGlvbiB0aHJlYWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZCgpIHsKKwlpZiAobGlzdGVuZXJzICE9IG51bGwpIHsKKwkgICAgc3luY2hyb25pemVkIChub3RpZnlMb2NrKSB7CisJCWlmIChsaXN0ZW5lcnMgIT0gbnVsbCkgeworCQkgICAgaWYgKG5vdGlmeVRocmVhZCA9PSBudWxsKSB7CisJCQlub3RpZnlUaHJlYWQgPSBuZXcgTm90aWZ5VGhyZWFkKHRoaXMpOworCQkJbm90aWZ5VGhyZWFkLnNldERhZW1vbih0cnVlKTsKKwkJCW5vdGlmeVRocmVhZC5zdGFydCgpOworCQkgICAgfQorCQkgICAgbm90aWZ5VGhyZWFkLnF1ZXVlKGxpc3RlbmVycy50b0FycmF5KCkpOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlIG5vdGlmaWNhdGlvbiB0aHJlYWQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTm90aWZ5VGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKKwlwcml2YXRlIGZpbmFsIElDVU5vdGlmaWVyIG5vdGlmaWVyOworCXByaXZhdGUgZmluYWwgTGlzdCBxdWV1ZSA9IG5ldyBMaW5rZWRMaXN0KCk7CisKKwlOb3RpZnlUaHJlYWQoSUNVTm90aWZpZXIgbm90aWZpZXIpIHsKKwkgICAgdGhpcy5ub3RpZmllciA9IG5vdGlmaWVyOworCX0KKworCS8qKgorCSAqIFF1ZXVlIHRoZSBub3RpZmljYXRpb24gb24gdGhlIHRocmVhZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBxdWV1ZShPYmplY3RbXSBsaXN0KSB7CisJICAgIHN5bmNocm9uaXplZCAodGhpcykgeworCQlxdWV1ZS5hZGQobGlzdCk7CisJCW5vdGlmeSgpOworCSAgICB9CisJfQorCisJLyoqCisJICogV2FpdCBmb3IgYSBub3RpZmljYXRpb24gdG8gYmUgcXVldWVkLCB0aGVuIG5vdGlmeSBhbGwKKwkgKiBsaXN0ZW5lcnMgbGlzdGVkIGluIHRoZSBub3RpZmljYXRpb24uCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCSAgICBPYmplY3RbXSBsaXN0OworCSAgICB3aGlsZSAodHJ1ZSkgeworCQl0cnkgeworCQkgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisJCQl3aGlsZSAocXVldWUuaXNFbXB0eSgpKSB7CisJCQkgICAgd2FpdCgpOworCQkJfQorCQkJbGlzdCA9IChPYmplY3RbXSlxdWV1ZS5yZW1vdmUoMCk7CisJCSAgICB9CisKKwkJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkgeworCQkJbm90aWZpZXIubm90aWZ5TGlzdGVuZXIoKEV2ZW50TGlzdGVuZXIpbGlzdFtpXSk7CisJCSAgICB9CisJCX0KKwkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFN1YmNsYXNzZXMgaW1wbGVtZW50IHRoaXMgdG8gcmV0dXJuIHRydWUgaWYgdGhlIGxpc3RlbmVyIGlzCisgICAgICogb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuCisgICAgICovCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gYWNjZXB0c0xpc3RlbmVyKEV2ZW50TGlzdGVuZXIgbCk7CisKKyAgICAvKioKKyAgICAgKiBTdWJjbGFzc2VzIGltcGxlbWVudCB0aGlzIHRvIG5vdGlmeSB0aGUgbGlzdGVuZXIuCisgICAgICovCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgbm90aWZ5TGlzdGVuZXIoRXZlbnRMaXN0ZW5lciBsKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVVJXTG9jay5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSUNVUldMb2NrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0ZTI1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVVJXTG9jay5qYXZhCkBAIC0wLDAgKzEsMzA0IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvSUNVUldMb2NrLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMzo0MDo1MiAkCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCisvLyBTZWUgQWxsYW4gSG9sdWIncyAxOTk5IGNvbHVtbiBpbiBKYXZhV29ybGQsIGFuZCBEb3VnIExlYSdzIGNvZGUgZm9yIFJXTG9ja3Mgd2l0aCB3cml0ZXIgcHJlZmVyZW5jZS4KKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworCisvKioKKyAqIDxwPkEgc2ltcGxlIFJlYWRlci9Xcml0ZXIgbG9jay4gIFRoaXMgYXNzdW1lcyB0aGF0IHRoZXJlIHdpbGwKKyAqIGJlIGxpdHRsZSB3cml0aW5nIGNvbnRlbnRpb24uICBJdCBhbHNvIGRvZXNuJ3QgYWxsb3cgCisgKiBhY3RpdmUgcmVhZGVycyB0byBhY3F1aXJlIGFuZCByZWxlYXNlIGEgd3JpdGUgbG9jaywgb3IKKyAqIGRlYWwgd2l0aCBwcmlvcml0eSBpbnZlcnNpb24gaXNzdWVzLjwvcD4KKyAqCisgKiA8cD5BY2Nlc3MgdG8gdGhlIGxvY2sgc2hvdWxkIGJlIGVuY2xvc2VkIGluIGEgdHJ5L2ZpbmFsbHkgYmxvY2sKKyAqIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBsb2NrIGlzIGFsd2F5cyByZWxlYXNlZCBpbiBjYXNlIG9mCisgKiBleGNlcHRpb25zOjxicj48cHJlPgorICogdHJ5IHsKKyAqICAgICBsb2NrLmFjcXVpcmVSZWFkKCk7CisgKiAgICAgLy8gdXNlIHNlcnZpY2UgcHJvdGVjdGVkIGJ5IHRoZSBsb2NrCisgKiB9CisgKiBmaW5hbGx5IHsKKyAqICAgICBsb2NrLnJlbGVhc2VSZWFkKCk7CisgKiB9CisgKiA8L3ByZT48L3A+CisgKgorICogPHA+VGhlIGxvY2sgcHJvdmlkZXMgdXRpbGl0eSBtZXRob2RzIGdldFN0YXRzIGFuZCBjbGVhclN0YXRzCisgKiB0byByZXR1cm4gc3RhdGlzdGljcyBvbiB0aGUgdXNlIG9mIHRoZSBsb2NrLjwvcD4KKyAqLworcHVibGljIGNsYXNzIElDVVJXTG9jayB7CisgICAgcHJpdmF0ZSBPYmplY3Qgd3JpdGVMb2NrID0gbmV3IE9iamVjdCgpOworICAgIHByaXZhdGUgT2JqZWN0IHJlYWRMb2NrID0gbmV3IE9iamVjdCgpOworICAgIHByaXZhdGUgaW50IHd3YzsgLy8gd2FpdGluZyB3cml0ZXJzCisgICAgcHJpdmF0ZSBpbnQgcmM7IC8vIGFjdGl2ZSByZWFkZXJzLCAtMSBpZiB0aGVyZSdzIGFuIGFjdGl2ZSB3cml0ZXIKKyAgICBwcml2YXRlIGludCB3cmM7IC8vIHdhaXRpbmcgcmVhZGVycworCisgICAgcHJpdmF0ZSBTdGF0cyBzdGF0cyA9IG5ldyBTdGF0cygpOyAvLyBtYXliZSBkb24ndCBpbml0IHRvIHN0YXJ0Li4uCisKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGdhdGhlciBzdGF0aXN0aWNzIG9uIHRoZSBSV0xvY2suCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBTdGF0cyB7CisJLyoqCisJICogTnVtYmVyIG9mIHRpbWVzIHJlYWQgYWNjZXNzIGdyYW50ZWQgKHJlYWQgY291bnQpLgorCSAqLworCXB1YmxpYyBpbnQgX3JjOworCisJLyoqCisJICogTnVtYmVyIG9mIHRpbWVzIGNvbmN1cnJlbnQgcmVhZCBhY2Nlc3MgZ3JhbnRlZCAobXVsdGlwbGUgcmVhZCBjb3VudCkuCisJICovCisJcHVibGljIGludCBfbXJjOworCisJLyoqCisJICogTnVtYmVyIG9mIHRpbWVzIGJsb2NrZWQgZm9yIHJlYWQgKHdhaXRpbmcgcmVhZGVyIGNvdW50KS4KKwkgKi8KKwlwdWJsaWMgaW50IF93cmM7IC8vIHdhaXQgZm9yIHJlYWQKKworCS8qKgorCSAqIE51bWJlciBvZiB0aW1lcyB3cml0ZSBhY2Nlc3MgZ3JhbnRlZCAod3JpdGVyIGNvdW50KS4KKwkgKi8KKwlwdWJsaWMgaW50IF93YzsKKworCS8qKgorCSAqIE51bWJlciBvZiB0aW1lcyBibG9ja2VkIGZvciB3cml0ZSAod2FpdGluZyB3cml0ZXIgY291bnQpLgorCSAqLworCXB1YmxpYyBpbnQgX3d3YzsKKworCXByaXZhdGUgU3RhdHMoKSB7CisJfQorCisJcHJpdmF0ZSBTdGF0cyhpbnQgcmMsIGludCBtcmMsIGludCB3cmMsIGludCB3YywgaW50IHd3YykgeworCSAgICB0aGlzLl9yYyA9IHJjOworCSAgICB0aGlzLl9tcmMgPSBtcmM7CisJICAgIHRoaXMuX3dyYyA9IHdyYzsKKwkgICAgdGhpcy5fd2MgPSB3YzsKKwkgICAgdGhpcy5fd3djID0gd3djOworCX0KKworCXByaXZhdGUgU3RhdHMoU3RhdHMgcmhzKSB7CisJICAgIHRoaXMocmhzLl9yYywgcmhzLl9tcmMsIHJocy5fd3JjLCByaHMuX3djLCByaHMuX3d3Yyk7CisJfQorCisJLyoqCisJICogUmV0dXJuIGEgc3RyaW5nIGxpc3RpbmcgYWxsIHRoZSBzdGF0cy4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCSAgICByZXR1cm4gIiByYzogIiArIF9yYyArCisJCSIgbXJjOiAiICsgX21yYyArIAorCQkiIHdyYzogIiArIF93cmMgKworCQkiIHdjOiAiICsgX3djICsKKwkJIiB3d2M6ICIgKyBfd3djOworCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgc3RhdHMuICBSZXR1cm5zIGV4aXN0aW5nIHN0YXRzLCBpZiBhbnkuCisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCBTdGF0cyByZXNldFN0YXRzKCkgeworCVN0YXRzIHJlc3VsdCA9IHN0YXRzOworCXN0YXRzID0gbmV3IFN0YXRzKCk7CisJcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDbGVhciB0aGUgc3RhdHMgKHN0b3AgY29sbGVjdGluZyBzdGF0cykuICBSZXR1cm5zIGV4aXN0aW5nIHN0YXRzLCBpZiBhbnkuCisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCBTdGF0cyBjbGVhclN0YXRzKCkgeworCVN0YXRzIHJlc3VsdCA9IHN0YXRzOworCXN0YXRzID0gbnVsbDsKKwlyZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzdGF0cy4gIFRoaXMgZG9lcyBub3QgcmVzZXQgdGhlIHN0YXRzLgorICAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgU3RhdHMgZ2V0U3RhdHMoKSB7CisJcmV0dXJuIHN0YXRzID09IG51bGwgPyBudWxsIDogbmV3IFN0YXRzKHN0YXRzKTsKKyAgICB9CisKKyAgICAvLyB1dGlsaXRpZXMKKworICAgIHByaXZhdGUgc3luY2hyb25pemVkIGJvb2xlYW4gZ290UmVhZCgpIHsKKwkrK3JjOworCWlmIChzdGF0cyAhPSBudWxsKSB7CisJICAgICsrc3RhdHMuX3JjOworCSAgICBpZiAocmMgPiAxKSArK3N0YXRzLl9tcmM7CisJfQorCXJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgc3luY2hyb25pemVkIGJvb2xlYW4gZ2V0UmVhZCgpIHsKKwlpZiAocmMgPj0gMCAmJiB3d2MgPT0gMCkgeworCSAgICByZXR1cm4gZ290UmVhZCgpOworCX0KKwkrK3dyYzsKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgYm9vbGVhbiByZXRyeVJlYWQoKSB7CisJaWYgKHN0YXRzICE9IG51bGwpICsrc3RhdHMuX3dyYzsKKwlpZiAocmMgPj0gMCAmJiB3d2MgPT0gMCkgeworCSAgICAtLXdyYzsKKwkgICAgcmV0dXJuIGdvdFJlYWQoKTsKKwl9CisJcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgc3luY2hyb25pemVkIGJvb2xlYW4gZmluaXNoUmVhZCgpIHsKKwlpZiAocmMgPiAwKSB7CisJICAgIHJldHVybiAoMCA9PSAtLXJjICYmIHd3YyA+IDApOworCX0KKwl0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigibm8gY3VycmVudCByZWFkZXIgdG8gcmVsZWFzZSIpOworICAgIH0KKwkKKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCBib29sZWFuIGdvdFdyaXRlKCkgeworCXJjID0gLTE7CisJaWYgKHN0YXRzICE9IG51bGwpIHsKKwkgICAgKytzdGF0cy5fd2M7CisJfQorCXJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgc3luY2hyb25pemVkIGJvb2xlYW4gZ2V0V3JpdGUoKSB7CisJaWYgKHJjID09IDApIHsKKwkgICAgcmV0dXJuIGdvdFdyaXRlKCk7CisJfQorCSsrd3djOworCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCBib29sZWFuIHJldHJ5V3JpdGUoKSB7CisJaWYgKHN0YXRzICE9IG51bGwpICsrc3RhdHMuX3d3YzsKKwlpZiAocmMgPT0gMCkgeworCSAgICAtLXd3YzsKKwkgICAgcmV0dXJuIGdvdFdyaXRlKCk7CisJfQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9USUZZX05PTkUgPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOT1RJRllfV1JJVEVSUyA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PVElGWV9SRUFERVJTID0gMjsKKworICAgIHByaXZhdGUgc3luY2hyb25pemVkIGludCBmaW5pc2hXcml0ZSgpIHsKKwlpZiAocmMgPCAwKSB7CisJICAgIHJjID0gMDsKKwkgICAgaWYgKHd3YyA+IDApIHsKKwkJcmV0dXJuIE5PVElGWV9XUklURVJTOworCSAgICB9IGVsc2UgaWYgKHdyYyA+IDApIHsKKwkJcmV0dXJuIE5PVElGWV9SRUFERVJTOworCSAgICB9IGVsc2UgeworCQlyZXR1cm4gTk9USUZZX05PTkU7CisJICAgIH0KKwl9CisJdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIm5vIGN1cnJlbnQgd3JpdGVyIHRvIHJlbGVhc2UiKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogPHA+QWNxdWlyZSBhIHJlYWQgbG9jaywgYmxvY2tpbmcgdW50aWwgYSByZWFkIGxvY2sgaXMKKyAgICAgKiBhdmFpbGFibGUuICBNdWx0aXBsZSByZWFkZXJzIGNhbiBjb25jdXJyZW50bHkgaG9sZCB0aGUgcmVhZAorICAgICAqIGxvY2suPC9wPgorICAgICAqCisgICAgICogPHA+SWYgdGhlcmUncyBhIHdyaXRlciwgb3IgYSB3YWl0aW5nIHdyaXRlciwgaW5jcmVtZW50IHRoZQorICAgICAqIHdhaXRpbmcgcmVhZGVyIGNvdW50IGFuZCBibG9jayBvbiB0aGlzLiAgT3RoZXJ3aXNlCisgICAgICogaW5jcmVtZW50IHRoZSBhY3RpdmUgcmVhZGVyIGNvdW50IGFuZCByZXR1cm4uICBDYWxsZXIgbXVzdCBjYWxsCisgICAgICogcmVsZWFzZVJlYWQgd2hlbiBkb25lIChmb3IgZXhhbXBsZSwgaW4gYSBmaW5hbGx5IGJsb2NrKS48L3A+IAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFjcXVpcmVSZWFkKCkgeworCWlmICghZ2V0UmVhZCgpKSB7CisJICAgIGZvciAoOzspIHsKKwkJdHJ5IHsKKwkJICAgIHN5bmNocm9uaXplZCAocmVhZExvY2spIHsKKwkJCXJlYWRMb2NrLndhaXQoKTsKKwkJICAgIH0KKwkJICAgIGlmIChyZXRyeVJlYWQoKSkgeworCQkJcmV0dXJuOworCQkgICAgfQorCQl9CisJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD5SZWxlYXNlIGEgcmVhZCBsb2NrIGFuZCByZXR1cm4uICBBbiBlcnJvciB3aWxsIGJlIHRocm93bgorICAgICAqIGlmIGEgcmVhZCBsb2NrIGlzIG5vdCBjdXJyZW50bHkgaGVsZC48L3A+CisgICAgICoKKyAgICAgKiA8cD5JZiB0aGlzIGlzIHRoZSBsYXN0IGFjdGl2ZSByZWFkZXIsIG5vdGlmeSB0aGUgb2xkZXN0CisgICAgICogd2FpdGluZyB3cml0ZXIuICBDYWxsIHdoZW4gZmluaXNoZWQgd2l0aCB3b3JrCisgICAgICogY29udHJvbGxlZCBieSBhY3F1aXJlUmVhZC48L3A+CisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVsZWFzZVJlYWQoKSB7CisJaWYgKGZpbmlzaFJlYWQoKSkgeworCSAgICBzeW5jaHJvbml6ZWQgKHdyaXRlTG9jaykgeworCQl3cml0ZUxvY2subm90aWZ5KCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoqCisgICAgICogPHA+QWNxdWlyZSB0aGUgd3JpdGUgbG9jaywgYmxvY2tpbmcgdW50aWwgdGhlIHdyaXRlIGxvY2sgaXMKKyAgICAgKiBhdmFpbGFibGUuICBPbmx5IG9uZSB3cml0ZXIgY2FuIGFjcXVpcmUgdGhlIHdyaXRlIGxvY2ssIGFuZAorICAgICAqIHdoZW4gaGVsZCwgbm8gcmVhZGVycyBjYW4gYWNxdWlyZSB0aGUgcmVhZCBsb2NrLjwvcD4KKyAgICAgKgorICAgICAqIDxwPklmIHRoZXJlIGFyZSBubyByZWFkZXJzIGFuZCBubyB3YWl0aW5nIHdyaXRlcnMsIG1hcmsgYXMKKyAgICAgKiBoYXZpbmcgYW4gYWN0aXZlIHdyaXRlciBhbmQgcmV0dXJuLiAgT3RoZXJ3aXNlLCBhZGQgYSBsb2NrIHRvIHRoZQorICAgICAqIGVuZCBvZiB0aGUgd2FpdGluZyB3cml0ZXIgbGlzdCwgYW5kIGJsb2NrIG9uIGl0LiAgQ2FsbGVyCisgICAgICogbXVzdCBjYWxsIHJlbGVhc2VXcml0ZSB3aGVuIGRvbmUgKGZvciBleGFtcGxlLCBpbiBhIGZpbmFsbHkKKyAgICAgKiBibG9jaykuPHA+IAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFjcXVpcmVXcml0ZSgpIHsKKwlpZiAoIWdldFdyaXRlKCkpIHsKKwkgICAgZm9yICg7OykgeworCQl0cnkgeworCQkgICAgc3luY2hyb25pemVkICh3cml0ZUxvY2spIHsKKwkJCXdyaXRlTG9jay53YWl0KCk7CisJCSAgICB9CisJCSAgICBpZiAocmV0cnlXcml0ZSgpKSB7CisJCQlyZXR1cm47CisJCSAgICB9CisJCX0KKwkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPlJlbGVhc2UgdGhlIHdyaXRlIGxvY2sgYW5kIHJldHVybi4gIEFuIGVycm9yIHdpbGwgYmUgdGhyb3duCisgICAgICogaWYgdGhlIHdyaXRlIGxvY2sgaXMgbm90IGN1cnJlbnRseSBoZWxkLjwvcD4KKyAgICAgKgorICAgICAqIDxwPklmIHRoZXJlIGFyZSB3YWl0aW5nIHJlYWRlcnMsIG1ha2UgdGhlbSBhbGwgYWN0aXZlIGFuZAorICAgICAqIG5vdGlmeSBhbGwgb2YgdGhlbS4gIE90aGVyd2lzZSwgbm90aWZ5IHRoZSBvbGRlc3Qgd2FpdGluZworICAgICAqIHdyaXRlciwgaWYgYW55LiAgQ2FsbCB3aGVuIGZpbmlzaGVkIHdpdGggd29yayBjb250cm9sbGVkIGJ5CisgICAgICogYWNxdWlyZVdyaXRlLjwvcD4gCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVsZWFzZVdyaXRlKCkgeworCXN3aXRjaCAoZmluaXNoV3JpdGUoKSkgeworCWNhc2UgTk9USUZZX1dSSVRFUlM6CisJICAgIHN5bmNocm9uaXplZCAod3JpdGVMb2NrKSB7CisJCXdyaXRlTG9jay5ub3RpZnkoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIE5PVElGWV9SRUFERVJTOgorCSAgICBzeW5jaHJvbml6ZWQgKHJlYWRMb2NrKSB7CisJCXJlYWRMb2NrLm5vdGlmeUFsbCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgTk9USUZZX05PTkU6CisJICAgIGJyZWFrOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VTZXJ2aWNlLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkMWRlMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDk2NyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL0lDVVNlcnZpY2UuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzEwLzA5IDE4OjU2OjU4ICQKKyAqICRSZXZpc2lvbjogMS4xMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5Db2xsYXRvcjsKKworaW1wb3J0IGphdmEubGFuZy5yZWYuU29mdFJlZmVyZW5jZTsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRMaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOworCisvKioKKyAqIDxwPkEgU2VydmljZSBwcm92aWRlcyBhY2Nlc3MgdG8gc2VydmljZSBvYmplY3RzIHRoYXQgaW1wbGVtZW50IGEKKyAqIHBhcnRpY3VsYXIgc2VydmljZSwgZS5nLiB0cmFuc2xpdGVyYXRvcnMuICBVc2VycyBwcm92aWRlIGEgU3RyaW5nCisgKiBpZCAoZm9yIGV4YW1wbGUsIGEgbG9jYWxlIHN0cmluZykgdG8gdGhlIHNlcnZpY2UsIGFuZCBnZXQgYmFjayBhbgorICogb2JqZWN0IGZvciB0aGF0IGlkLiAgU2VydmljZSBvYmplY3RzIGNhbiBiZSBhbnkga2luZCBvZiBvYmplY3QuCisgKiBUaGUgc2VydmljZSBvYmplY3QgaXMgY2FjaGVkIGFuZCByZXR1cm5lZCBmb3IgbGF0ZXIgcXVlcmllcywgc28KKyAqIGdlbmVyYWxseSBpdCBzaG91bGQgbm90IGJlIG11dGFibGUsIG9yIHRoZSBjYWxsZXIgc2hvdWxkIGNsb25lIHRoZQorICogb2JqZWN0IGJlZm9yZSBtb2RpZnlpbmcgaXQuPC9wPgorICoKKyAqIDxwPlNlcnZpY2VzICdjYW5vbmljYWxpemUnIHRoZSBxdWVyeSBpZCBhbmQgdXNlIHRoZSBjYW5vbmljYWwgaWQgdG8KKyAqIHF1ZXJ5IGZvciB0aGUgc2VydmljZS4gIFRoZSBzZXJ2aWNlIGFsc28gZGVmaW5lcyBhIG1lY2hhbmlzbSB0bworICogJ2ZhbGxiYWNrJyB0aGUgaWQgbXVsdGlwbGUgdGltZXMuICBDbGllbnRzIGNhbiBvcHRpb25hbGx5IHJlcXVlc3QKKyAqIHRoZSBhY3R1YWwgaWQgdGhhdCB3YXMgbWF0Y2hlZCBieSBhIHF1ZXJ5IHdoZW4gdGhleSB1c2UgYW4gaWQgdG8KKyAqIHJldHJpZXZlIGEgc2VydmljZSBvYmplY3QuPC9wPgorICoKKyAqIDxwPlNlcnZpY2Ugb2JqZWN0cyBhcmUgaW5zdGFudGlhdGVkIGJ5IEZhY3Rvcnkgb2JqZWN0cyByZWdpc3RlcmVkIHdpdGggCisgKiB0aGUgc2VydmljZS4gIFRoZSBzZXJ2aWNlIHF1ZXJpZXMgZWFjaCBGYWN0b3J5IGluIHR1cm4sIGZyb20gbW9zdCByZWNlbnRseQorICogcmVnaXN0ZXJlZCB0byBlYXJsaWVzdCByZWdpc3RlcmVkLCB1bnRpbCBvbmUgcmV0dXJucyBhIHNlcnZpY2Ugb2JqZWN0LgorICogSWYgbm9uZSByZXNwb25kcyB3aXRoIGEgc2VydmljZSBvYmplY3QsIGEgZmFsbGJhY2sgaWQgaXMgZ2VuZXJhdGVkLAorICogYW5kIHRoZSBwcm9jZXNzIHJlcGVhdHMgdW50aWwgYSBzZXJ2aWNlIG9iamVjdCBpcyByZXR1cm5lZCBvciB1bnRpbAorICogdGhlIGlkIGhhcyBubyBmdXJ0aGVyIGZhbGxiYWNrcy48L3A+CisgKgorICogPHA+RmFjdG9yaWVzIGNhbiBiZSBkeW5hbWljYWxseSByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQgd2l0aCB0aGUKKyAqIHNlcnZpY2UuICBXaGVuIHJlZ2lzdGVyZWQsIGEgRmFjdG9yeSBpcyBpbnN0YWxsZWQgYXQgdGhlIGhlYWQgb2YKKyAqIHRoZSBmYWN0b3J5IGxpc3QsIGFuZCBzbyBnZXRzICdmaXJzdCBjcmFjaycgYXQgYW55IGtleXMgb3IgZmFsbGJhY2sKKyAqIGtleXMuICBXaGVuIHVucmVnaXN0ZXJlZCwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzZXJ2aWNlIGFuZCBjYW4gbm8KKyAqIGxvbmdlciBiZSBsb2NhdGVkIHRocm91Z2ggaXQuICBTZXJ2aWNlIG9iamVjdHMgZ2VuZXJhdGVkIGJ5IHRoaXMKKyAqIGZhY3RvcnkgYW5kIGhlbGQgYnkgdGhlIGNsaWVudCBhcmUgdW5hZmZlY3RlZC48L3A+CisgKgorICogPHA+SUNVU2VydmljZSB1c2VzIEtleXMgdG8gcXVlcnkgZmFjdG9yaWVzIGFuZCBwZXJmb3JtCisgKiBmYWxsYmFjay4gIFRoZSBLZXkgZGVmaW5lcyB0aGUgY2Fub25pY2FsIGZvcm0gb2YgdGhlIGlkLCBhbmQKKyAqIGltcGxlbWVudHMgdGhlIGZhbGxiYWNrIHN0cmF0ZWd5LiAgQ3VzdG9tIEtleXMgY2FuIGJlIGRlZmluZWQgdGhhdAorICogcGFyc2UgY29tcGxleCBJRHMgaW50byBjb21wb25lbnRzIHRoYXQgRmFjdG9yaWVzIGNhbiBtb3JlIGVhc2lseQorICogdXNlLiAgVGhlIEtleSBjYW4gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpcyBwYXJzaW5nIHRvIHNhdmUKKyAqIHJlcGVhdGVkIGVmZm9ydC4gIElDVVNlcnZpY2UgcHJvdmlkZXMgY29udmVuaWVuY2UgQVBJcyB0aGF0CisgKiB0YWtlIFN0cmluZ3MgYW5kIGdlbmVyYXRlIGRlZmF1bHQgS2V5cyBmb3IgdXNlIGluIHF1ZXJ5aW5nLjwvcD4KKyAqCisgKiA8cD5JQ1VTZXJ2aWNlIHByb3ZpZGVzIEFQSSB0byBnZXQgdGhlIGxpc3Qgb2YgaWRzIHB1YmxpY2x5CisgKiBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZpY2UgKGFsdGhvdWdoIHF1ZXJpZXMgYXJlbid0IHJlc3RyaWN0ZWQgdG8KKyAqIHRoaXMgbGlzdCkuICBUaGlzIGxpc3QgY29udGFpbnMgb25seSAnc2ltcGxlJyBJRHMsIGFuZCBub3QgZnVsbHkKKyAqIHVuaXF1ZSBpZHMuICBGYWN0b3JpZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHNpbXBsZSBJRCBhbmQKKyAqIHRoZSByZXNwb25zaWJsZSBmYWN0b3J5IGNhbiBhbHNvIHJldHVybiBhIGh1bWFuLXJlYWRhYmxlIGxvY2FsaXplZAorICogdmVyc2lvbiBvZiB0aGUgc2ltcGxlIElELCBmb3IgdXNlIGluIHVzZXIgaW50ZXJmYWNlcy4gIElDVVNlcnZpY2UKKyAqIGNhbiBhbHNvIHByb3ZpZGUgYSBzb3J0ZWQgY29sbGVjdGlvbiBvZiB0aGUgYWxsIHRoZSBsb2NhbGl6ZWQgdmlzaWJsZSAKKyAqIGlkcy48L3A+CisgKgorICogPHA+SUNVU2VydmljZSBpbXBsZW1lbnRzIElDVU5vdGlmaWVyLCBzbyB0aGF0IGNsaWVudHMgY2FuIHJlZ2lzdGVyCisgKiB0byByZWNlaXZlIG5vdGlmaWNhdGlvbiB3aGVuIGZhY3RvcmllcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIAorICogdGhlIHNlcnZpY2UuICBJQ1VTZXJ2aWNlIHByb3ZpZGVzIGEgZGVmYXVsdCBFdmVudExpc3RlbmVyIHN1YmludGVyZmFjZSwKKyAqIFNlcnZpY2VMaXN0ZW5lciwgd2hpY2ggY2FuIGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2VydmljZS4gIFdoZW4KKyAqIHRoZSBzZXJ2aWNlIGNoYW5nZXMsIHRoZSBTZXJ2aWNlTGlzdGVuZXIncyBzZXJ2aWNlQ2hhbmdlZCBtZXRob2QKKyAqIGlzIGNhbGxlZCwgd2l0aCB0aGUgc2VydmljZSBhcyB0aGUgb25seSBhcmd1bWVudC48L3A+CisgKgorICogPHA+VGhlIElDVVNlcnZpY2UgQVBJIGlzIGJvdGggcmljaCBhbmQgZ2VuZXJpYywgYW5kIGl0IGlzIGV4cGVjdGVkCisgKiB0aGF0IG1vc3QgaW1wbGVtZW50YXRpb25zIHdpbGwgc3RhdGljYWxseSAnd3JhcCcgSUNVU2VydmljZSB0bworICogcHJlc2VudCBhIG1vcmUgYXBwcm9wcmlhdGUgQVBJLS0gZm9yIGV4YW1wbGUsIHRvIGRlY2xhcmUgdGhlIHR5cGUKKyAqIG9mIHRoZSBvYmplY3RzIHJldHVybmVkIGZyb20gZ2V0LCB0byBsaW1pdCB0aGUgZmFjdG9yaWVzIHRoYXQgY2FuCisgKiBiZSByZWdpc3RlcmVkIHdpdGggdGhlIHNlcnZpY2UsIG9yIHRvIGRlZmluZSB0aGVpciBvd24gbGlzdGVuZXIKKyAqIGludGVyZmFjZSB3aXRoIGEgY3VzdG9tIGNhbGxiYWNrIG1ldGhvZC4gIFRoZXkgbWlnaHQgYWxzbyBjdXN0b21pemUKKyAqIElDVVNlcnZpY2UgYnkgb3ZlcnJpZGluZyBpdCwgZm9yIGV4YW1wbGUsIHRvIGN1c3RvbWl6ZSB0aGUgS2V5IGFuZAorICogZmFsbGJhY2sgc3RyYXRlZ3kuICBJQ1VMb2NhbGVTZXJ2aWNlIGlzIGEgY3VzdG9taXplZCBzZXJ2aWNlIHRoYXQKKyAqIHVzZXMgTG9jYWxlIG5hbWVzIGFzIGlkcyBhbmQgdXNlcyBLZXlzIHRoYXQgaW1wbGVtZW50IHRoZSBzdGFuZGFyZAorICogcmVzb3VyY2UgYnVuZGxlIGZhbGxiYWNrIHN0cmF0ZWd5LjxwPiAKKyAqLworcHVibGljIGNsYXNzIElDVVNlcnZpY2UgZXh0ZW5kcyBJQ1VOb3RpZmllciB7CisgICAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBuYW1lOworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IuCisgICAgICovCisgICAgcHVibGljIElDVVNlcnZpY2UoKSB7CisgICAgICAgIG5hbWUgPSAiIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Qgd2l0aCBhIG5hbWUgKHVzZWZ1bCBmb3IgZGVidWdnaW5nKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgSUNVU2VydmljZShTdHJpbmcgbmFtZSkgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFjY2VzcyB0byBmYWN0b3JpZXMgaXMgcHJvdGVjdGVkIGJ5IGEgcmVhZC13cml0ZSBsb2NrLiAgVGhpcyBpcworICAgICAqIHRvIGFsbG93IG11bHRpcGxlIHRocmVhZHMgdG8gcmVhZCBjb25jdXJyZW50bHksIGJ1dCBrZWVwCisgICAgICogY2hhbmdlcyB0byB0aGUgZmFjdG9yeSBsaXN0IGF0b21pYyB3aXRoIHJlc3BlY3QgdG8gYWxsIHJlYWRlcnMuICAKKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIElDVVJXTG9jayBmYWN0b3J5TG9jayA9IG5ldyBJQ1VSV0xvY2soKTsKKworICAgIC8qKgorICAgICAqIEFsbCB0aGUgZmFjdG9yaWVzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIHNlcnZpY2UuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBMaXN0IGZhY3RvcmllcyA9IG5ldyBBcnJheUxpc3QoKTsKKworICAgIC8qKgorICAgICAqIEtleXMgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBmYWN0b3JpZXMgdG8gZ2VuZXJhdGUgYW4KKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgc2VydmljZS4gIEtleXMgZGVmaW5lIGhvdyBpZHMgYXJlCisgICAgICogY2Fub25pY2FsaXplZCwgcHJvdmlkZSBib3RoIGEgY3VycmVudCBpZCBhbmQgYSBjdXJyZW50CisgICAgICogZGVzY3JpcHRvciB0byB1c2UgaW4gcXVlcnlpbmcgdGhlIGNhY2hlIGFuZCBmYWN0b3JpZXMsIGFuZAorICAgICAqIGRldGVybWluZSB0aGUgZmFsbGJhY2sgc3RyYXRlZ3kuPC9wPgorICAgICAqCisgICAgICogPHA+S2V5cyBwcm92aWRlIGJvdGggYSBjdXJyZW50RGVzY3JpcHRvciBhbmQgYSBjdXJyZW50SUQuCisgICAgICogVGhlIGRlc2NyaXB0b3IgY29udGFpbnMgYW4gb3B0aW9uYWwgcHJlZml4LCBmb2xsb3dlZCBieSAnLycKKyAgICAgKiBhbmQgdGhlIGN1cnJlbnRJRC4gIEZhY3RvcmllcyB0aGF0IGhhbmRsZSBjb21wbGV4IGtleXMsCisgICAgICogZm9yIGV4YW1wbGUgbnVtYmVyIGZvcm1hdCBmYWN0b3JpZXMgdGhhdCBnZW5lcmF0ZSBtdWx0aXBsZQorICAgICAqIGtpbmRzIG9mIGZvcm1hdHRlcnMgZm9yIHRoZSBzYW1lIGxvY2FsZSwgdXNlIHRoZSBkZXNjcmlwdG9yIAorICAgICAqIHRvIHByb3ZpZGUgYSBmdWxseSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNlcnZpY2Ugb2JqZWN0LCAKKyAgICAgKiB3aGlsZSB1c2luZyB0aGUgY3VycmVudElEIChpbiB0aGlzIGNhc2UsIHRoZSBsb2NhbGUgc3RyaW5nKSwKKyAgICAgKiBhcyB0aGUgdmlzaWJsZSBJRHMgdGhhdCBjYW4gYmUgbG9jYWxpemVkLgorICAgICAqCisgICAgICogPHA+IFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIEtleSBoYXMgbm8gZmFsbGJhY2tzIGFuZAorICAgICAqIGhhcyBubyBjdXN0b20gZGVzY3JpcHRvcnMuPC9wPgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgS2V5IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3QgYSBrZXkgZnJvbSBhbiBpZC4KKwkgKi8KKyAgICAgICAgcHVibGljIEtleShTdHJpbmcgaWQpIHsKKyAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIG9yaWdpbmFsIElEIHVzZWQgdG8gY29uc3RydWN0IHRoaXMga2V5LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyBpZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBpZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIGNhbm9uaWNhbCB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBJRC4gIFRoaXMgaW1wbGVtZW50YXRpb24KKwkgKiByZXR1cm5zIHRoZSBvcmlnaW5hbCBJRCB1bmNoYW5nZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIGNhbm9uaWNhbElEKCkgeworICAgICAgICAgICAgcmV0dXJuIGlkOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiB0aGUgKGNhbm9uaWNhbCkgY3VycmVudCBJRC4gIFRoaXMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICogcmV0dXJucyB0aGUgY2Fub25pY2FsIElELiAgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIGN1cnJlbnRJRCgpIHsKKyAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxJRCgpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiB0aGUgY3VycmVudCBkZXNjcmlwdG9yLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisgICAgICAgICAqIHRoZSBjdXJyZW50IElELiAgVGhlIGN1cnJlbnQgZGVzY3JpcHRvciBpcyB1c2VkIHRvIGZ1bGx5CisgICAgICAgICAqIGlkZW50aWZ5IGFuIGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlIGluIHRoZSBjYWNoZS4gIEEKKyAgICAgICAgICogZmFjdG9yeSBtYXkgaGFuZGxlIGFsbCBkZXNjcmlwdG9ycyBmb3IgYW4gSUQsIG9yIGp1c3QgYQorICAgICAgICAgKiBwYXJ0aWN1bGFyIGRlc2NyaXB0b3IuICBUaGUgZmFjdG9yeSBjYW4gZWl0aGVyIHBhcnNlIHRoZQorICAgICAgICAgKiBkZXNjcmlwdG9yIG9yIHVzZSBjdXN0b20gQVBJIG9uIHRoZSBrZXkgaW4gb3JkZXIgdG8KKyAgICAgICAgICogaW5zdGFudGlhdGUgdGhlIHNlcnZpY2UuICAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgY3VycmVudERlc2NyaXB0b3IoKSB7CisgICAgICAgICAgICByZXR1cm4gIi8iICsgY3VycmVudElEKCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSWYgdGhlIGtleSBoYXMgYSBmYWxsYmFjaywgbW9kaWZ5IHRoZSBrZXkgYW5kIHJldHVybiB0cnVlLAorICAgICAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLiAgVGhlIGN1cnJlbnQgSUQgd2lsbCBjaGFuZ2UgaWYgdGhlcmUKKwkgKiBpcyBhIGZhbGxiYWNrLiAgTm8gY3VycmVudElEcyBzaG91bGQgYmUgcmVwZWF0ZWQsIGFuZCBmYWxsYmFjaworCSAqIG11c3QgZXZlbnR1YWxseSByZXR1cm4gZmFsc2UuICBUaGlzIGltcGxtZW50YXRpb24gaGFzIG5vIGZhbGxiYWNrcworCSAqIGFuZCBhbHdheXMgcmV0dXJucyBmYWxzZS4KKwkgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gZmFsbGJhY2soKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSWYgYSBrZXkgY3JlYXRlZCBmcm9tIGlkIHdvdWxkIGV2ZW50dWFsbHkgZmFsbGJhY2sgdG8gbWF0Y2ggdGhlIAorICAgICAgICAgKiBjdXJyZW50IElEIG9mIHRoaXMga2V5LCByZXR1cm4gdHJ1ZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzRmFsbGJhY2tPZihTdHJpbmcgaWQpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50SUQoKS5lcXVhbHMoaWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRmFjdG9yaWVzIGdlbmVyYXRlIHRoZSBzZXJ2aWNlIG9iamVjdHMgbWFpbnRhaW5lZCBieSB0aGUKKyAgICAgKiBzZXJ2aWNlLiAgQSBmYWN0b3J5IGdlbmVyYXRlcyBhIHNlcnZpY2Ugb2JqZWN0IGZyb20gYSBrZXksCisgICAgICogdXBkYXRlcyBpZC0+ZmFjdG9yeSBtYXBwaW5ncywgYW5kIHJldHVybnMgdGhlIGRpc3BsYXkgbmFtZSBmb3IKKyAgICAgKiBhIHN1cHBvcnRlZCBpZC4gIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEZhY3RvcnkgeworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgYSBzZXJ2aWNlIG9iamVjdCBmcm9tIHRoZSBrZXksIGlmIHRoaXMgZmFjdG9yeQorICAgICAgICAgKiBzdXBwb3J0cyB0aGUga2V5LiAgT3RoZXJ3aXNlLCByZXR1cm4gbnVsbC4gIAorICAgICAgICAgKgorICAgICAgICAgKiA8cD5JZiB0aGUgZmFjdG9yeSBzdXBwb3J0cyB0aGUga2V5LCB0aGVuIGl0IGNhbiBjYWxsCisgICAgICAgICAqIHRoZSBzZXJ2aWNlJ3MgZ2V0S2V5KEtleSwgU3RyaW5nW10sIEZhY3RvcnkpIG1ldGhvZAorICAgICAgICAgKiBwYXNzaW5nIGl0c2VsZiBhcyB0aGUgZmFjdG9yeSB0byBnZXQgdGhlIG9iamVjdCB0aGF0CisgICAgICAgICAqIHRoZSBzZXJ2aWNlIHdvdWxkIGhhdmUgY3JlYXRlZCBwcmlvciB0byB0aGUgZmFjdG9yeSdzCisgICAgICAgICAqIHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBzZXJ2aWNlLiAgVGhpcyBjYW4gY2hhbmdlIHRoZQorICAgICAgICAgKiBrZXksIHNvIGFueSBpbmZvcm1hdGlvbiByZXF1aXJlZCBmcm9tIHRoZSBrZXkgc2hvdWxkCisgICAgICAgICAqIGJlIGV4dHJhY3RlZCBiZWZvcmUgbWFraW5nIHN1Y2ggYSBjYWxsYmFjay4KKwkgKi8KKyAgICAgICAgcHVibGljIE9iamVjdCBjcmVhdGUoS2V5IGtleSwgSUNVU2VydmljZSBzZXJ2aWNlKTsKKworCS8qKgorCSAqIFVwZGF0ZSB0aGUgcmVzdWx0IElEcyAobm90IGRlc2NyaXB0b3JzKSB0byByZWZsZWN0IHRoZSBJRHMKKyAgICAgICAgICogdGhpcyBmYWN0b3J5IGhhbmRsZXMuICBUaGlzIGZ1bmN0aW9uIGFuZCBnZXREaXNwbGF5TmFtZSBhcmUKKyAgICAgICAgICogdXNlZCB0byBzdXBwb3J0IElDVVNlcnZpY2UuZ2V0RGlzcGxheU5hbWVzLiAgQmFzaWNhbGx5LCB0aGUKKyAgICAgICAgICogZmFjdG9yeSBoYXMgdG8gZGV0ZXJtaW5lIHdoaWNoIElEcyBpdCB3aWxsIHBlcm1pdCB0byBiZQorICAgICAgICAgKiBhdmFpbGFibGUsIGFuZCBvZiB0aG9zZSwgd2hpY2ggaXQgd2lsbCBwcm92aWRlIGxvY2FsaXplZAorICAgICAgICAgKiBkaXNwbGF5IG5hbWVzIGZvci4gIEluIG1vc3QgY2FzZXMgdGhpcyByZWZsZWN0cyB0aGUgSURzIHRoYXQKKyAgICAgICAgICogdGhlIGZhY3RvcnkgZGlyZWN0bHkgc3VwcG9ydHMuCisgICAgICAgICAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZVZpc2libGVJRHMoTWFwIHJlc3VsdCk7CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhpcyBpZCBpbiB0aGUgcHJvdmlkZWQgbG9jYWxlLgorCSAqIFRoaXMgaXMgYW4gbG9jYWxpemVkIGlkLCBub3QgYSBkZXNjcmlwdG9yLiAgSWYgdGhlIGlkIGlzIAorICAgICAgICAgKiBub3QgdmlzaWJsZSBvciBub3QgZGVmaW5lZCBieSB0aGUgZmFjdG9yeSwgcmV0dXJuIG51bGwuCisgICAgICAgICAqIElmIGxvY2FsZSBpcyBudWxsLCByZXR1cm4gaWQgdW5jaGFuZ2VkLgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoU3RyaW5nIGlkLCBMb2NhbGUgbG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZmFjdG9yeS4gIFRoaXMgcHJvdmlkZXMgZGVmYXVsdAorICAgICAqIGltcGxlbWVudGF0aW9ucyBmb3Igc3ViY2xhc3NlcywgYW5kIGltcGxlbWVudHMgYSBzaW5nbGV0b24KKyAgICAgKiBmYWN0b3J5IHRoYXQgbWF0Y2hlcyBhIHNpbmdsZSBpZCAgYW5kIHJldHVybnMgYSBzaW5nbGUKKyAgICAgKiAocG9zc2libHkgZGVmZXJyZWQtaW5pdGlhbGl6ZWQpIGluc3RhbmNlLiAgVGhpcyBpbXBsZW1lbnRzCisgICAgICogdXBkYXRlVmlzaWJsZUlEcyB0byBhZGQgYSBtYXBwaW5nIGZyb20gaXRzIElEIHRvIGl0c2VsZgorICAgICAqIGlmIHZpc2libGUgaXMgdHJ1ZSwgb3IgdG8gcmVtb3ZlIGFueSBleGlzdGluZyBtYXBwaW5nCisgICAgICogZm9yIGl0cyBJRCBpZiB2aXNpYmxlIGlzIGZhbHNlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU2ltcGxlRmFjdG9yeSBpbXBsZW1lbnRzIEZhY3RvcnkgeworCXByb3RlY3RlZCBPYmplY3QgaW5zdGFuY2U7CisJcHJvdGVjdGVkIFN0cmluZyBpZDsKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2aXNpYmxlOworCisJLyoqCisJICogQ29udmVuaWVuY2UgY29uc3RydWN0b3IgdGhhdCBjYWxscyBTaW1wbGVGYWN0b3J5KE9iamVjdCwgU3RyaW5nLCBib29sZWFuKQorCSAqIHdpdGggdmlzaWJsZSB0cnVlLgorCSAqLworCXB1YmxpYyBTaW1wbGVGYWN0b3J5KE9iamVjdCBpbnN0YW5jZSwgU3RyaW5nIGlkKSB7CisJICAgIHRoaXMoaW5zdGFuY2UsIGlkLCB0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3QgYSBzaW1wbGUgZmFjdG9yeSB0aGF0IG1hcHMgYSBzaW5nbGUgaWQgdG8gYSBzaW5nbGUgCisJICogc2VydmljZSBpbnN0YW5jZS4gIElmIHZpc2libGUgaXMgdHJ1ZSwgdGhlIGlkIHdpbGwgYmUgdmlzaWJsZS4KKwkgKiBOZWl0aGVyIHRoZSBpbnN0YW5jZSBub3IgdGhlIGlkIGNhbiBiZSBudWxsLgorCSAqLworCXB1YmxpYyBTaW1wbGVGYWN0b3J5KE9iamVjdCBpbnN0YW5jZSwgU3RyaW5nIGlkLCBib29sZWFuIHZpc2libGUpIHsKKwkgICAgaWYgKGluc3RhbmNlID09IG51bGwgfHwgaWQgPT0gbnVsbCkgeworCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnN0YW5jZSBvciBpZCBpcyBudWxsIik7CisJICAgIH0KKwkgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlOworCSAgICB0aGlzLmlkID0gaWQ7CisJICAgIHRoaXMudmlzaWJsZSA9IHZpc2libGU7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSBzZXJ2aWNlIGluc3RhbmNlIGlmIHRoZSBmYWN0b3J5J3MgaWQgaXMgZXF1YWwgdG8KKyAgICAgICAgICogdGhlIGtleSdzIGN1cnJlbnRJRC4gIFNlcnZpY2UgaXMgaWdub3JlZC4KKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZShLZXkga2V5LCBJQ1VTZXJ2aWNlIHNlcnZpY2UpIHsKKwkgICAgaWYgKGlkLmVxdWFscyhrZXkuY3VycmVudElEKCkpKSB7CisJCXJldHVybiBpbnN0YW5jZTsKKwkgICAgfQorCSAgICByZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBJZiB2aXNpYmxlLCBhZGRzIGEgbWFwcGluZyBmcm9tIGlkIC0+IHRoaXMgdG8gdGhlIHJlc3VsdCwgCisgICAgICAgICAqIG90aGVyd2lzZSByZW1vdmVzIGlkIGZyb20gcmVzdWx0LgorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZVZpc2libGVJRHMoTWFwIHJlc3VsdCkgeworCSAgICBpZiAodmlzaWJsZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5wdXQoaWQsIHRoaXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQucmVtb3ZlKGlkKTsKKyAgICAgICAgICAgIH0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGlzLmlkIGVxdWFscyBpZCwgcmV0dXJucyBpZCByZWdhcmRsZXNzIG9mIGxvY2FsZSwKKwkgKiBvdGhlcndpc2UgcmV0dXJucyBudWxsLiAgKFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYXMKKwkgKiBubyBsb2NhbGl6ZWQgaWQgaW5mb3JtYXRpb24uKSAgCisgICAgICAgICAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoU3RyaW5nIGlkLCBMb2NhbGUgbG9jYWxlKSB7CisJICAgIHJldHVybiAodmlzaWJsZSAmJiB0aGlzLmlkLmVxdWFscyhpZCkpID8gaWQgOiBudWxsOworCX0KKworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIGRlYnVnZ2luZy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIiwgaWQ6ICIpOworICAgICAgICAgICAgYnVmLmFwcGVuZChpZCk7CisgICAgICAgICAgICBidWYuYXBwZW5kKCIsIHZpc2libGU6ICIpOworICAgICAgICAgICAgYnVmLmFwcGVuZCh2aXNpYmxlKTsKKyAgICAgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJyaWRlIGZvciBnZXQoU3RyaW5nLCBTdHJpbmdbXSkuIFRoaXMgdXNlcworICAgICAqIGNyZWF0ZUtleSB0byBjcmVhdGUgYSBrZXkgZm9yIHRoZSBwcm92aWRlZCBkZXNjcmlwdG9yLgorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0KFN0cmluZyBkZXNjcmlwdG9yKSB7CisJcmV0dXJuIGdldEtleShjcmVhdGVLZXkoZGVzY3JpcHRvciksIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJyaWRlIGZvciBnZXQoS2V5LCBTdHJpbmdbXSkuICBUaGlzIHVzZXMKKyAgICAgKiBjcmVhdGVLZXkgdG8gY3JlYXRlIGEga2V5IGZyb20gdGhlIHByb3ZpZGVkIGRlc2NyaXB0b3IuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXQoU3RyaW5nIGRlc2NyaXB0b3IsIFN0cmluZ1tdIGFjdHVhbFJldHVybikgeworICAgICAgICBpZiAoZGVzY3JpcHRvciA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImRlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIHJldHVybiBnZXRLZXkoY3JlYXRlS2V5KGRlc2NyaXB0b3IpLCBhY3R1YWxSZXR1cm4pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJyaWRlIGZvciBnZXQoS2V5LCBTdHJpbmdbXSkuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXRLZXkoS2V5IGtleSkgeworICAgICAgICByZXR1cm4gZ2V0S2V5KGtleSwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogPHA+R2l2ZW4gYSBrZXksIHJldHVybiBhIHNlcnZpY2Ugb2JqZWN0LCBhbmQsIGlmIGFjdHVhbFJldHVybgorICAgICAqIGlzIG5vdCBudWxsLCB0aGUgZGVzY3JpcHRvciB3aXRoIHdoaWNoIGl0IHdhcyBmb3VuZCBpbiB0aGUKKyAgICAgKiBmaXJzdCBlbGVtZW50IG9mIGFjdHVhbFJldHVybi4gIElmIG5vIHNlcnZpY2Ugb2JqZWN0IG1hdGNoZXMKKyAgICAgKiB0aGlzIGtleSwgcmV0dXJuIG51bGwsIGFuZCBsZWF2ZSBhY3R1YWxSZXR1cm4gdW5jaGFuZ2VkLjwvcD4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgcXVlcmllcyB0aGUgY2FjaGUgdXNpbmcgdGhlIGtleSdzIGRlc2NyaXB0b3IsIGFuZCBpZiBubworICAgICAqIG9iamVjdCBpbiB0aGUgY2FjaGUgbWF0Y2hlcyBpdCwgdHJpZXMgdGhlIGtleSBvbiBlYWNoCisgICAgICogcmVnaXN0ZXJlZCBmYWN0b3J5LCBpbiBvcmRlci4gIElmIG5vbmUgZ2VuZXJhdGVzIGEgc2VydmljZQorICAgICAqIG9iamVjdCBmb3IgdGhlIGtleSwgcmVwZWF0cyB0aGUgcHJvY2VzcyB3aXRoIGVhY2ggZmFsbGJhY2sgb2YKKyAgICAgKiB0aGUga2V5LCB1bnRpbCBlaXRoZXIgb25lIHJldHVybnMgYSBzZXJ2aWNlIG9iamVjdCwgb3IgdGhlIGtleQorICAgICAqIGhhcyBubyBmYWxsYmFjay48L3A+IAorICAgICAqCisgICAgICogPHA+SWYga2V5IGlzIG51bGwsIGp1c3QgcmV0dXJucyBudWxsLjwvcD4KKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGdldEtleShLZXkga2V5LCBTdHJpbmdbXSBhY3R1YWxSZXR1cm4pIHsKKyAgICAgICAgcmV0dXJuIGdldEtleShrZXksIGFjdHVhbFJldHVybiwgbnVsbCk7CisgICAgfQorCisgICAgCisgICAgcHVibGljIE9iamVjdCBnZXRLZXkoS2V5IGtleSwgU3RyaW5nW10gYWN0dWFsUmV0dXJuLCBGYWN0b3J5IGZhY3RvcnkpIHsKKwlpZiAoZmFjdG9yaWVzLnNpemUoKSA9PSAwKSB7CisJICAgIHJldHVybiBoYW5kbGVEZWZhdWx0KGtleSwgYWN0dWFsUmV0dXJuKTsKKwl9CisKKwlib29sZWFuIGRlYnVnID0gZmFsc2U7CisgICAgICAgIGlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2aWNlOiAiICsgbmFtZSArICIga2V5OiAiICsga2V5KTsKKworCUNhY2hlRW50cnkgcmVzdWx0ID0gbnVsbDsKKwlpZiAoa2V5ICE9IG51bGwpIHsKKwkgICAgdHJ5IHsKKwkJLy8gVGhlIGZhY3RvcnkgbGlzdCBjYW4ndCBiZSBtb2RpZmllZCB1bnRpbCB3ZSdyZSBkb25lLCAKKwkJLy8gb3RoZXJ3aXNlIHdlIG1pZ2h0IHVwZGF0ZSB0aGUgY2FjaGUgd2l0aCBhbiBpbnZhbGlkIHJlc3VsdC4KKwkJLy8gVGhlIGNhY2hlIGhhcyB0byBzdGF5IGluIHN5bmNoIHdpdGggdGhlIGZhY3RvcnkgbGlzdC4KKwkJZmFjdG9yeUxvY2suYWNxdWlyZVJlYWQoKTsgCisKKwkJTWFwIGNhY2hlID0gbnVsbDsKKwkJU29mdFJlZmVyZW5jZSBjcmVmID0gY2FjaGVyZWY7IC8vIGNvcHkgc28gd2UgZG9uJ3QgbmVlZCB0byBzeW5jIG9uIHRoaXMgCisJCWlmIChjcmVmICE9IG51bGwpIHsKKwkJICAgIGNhY2hlID0gKE1hcCljcmVmLmdldCgpOworCQl9CisJCWlmIChjYWNoZSA9PSBudWxsKSB7CisJCSAgICAvLyBzeW5jaHJvbml6ZWQgc2luY2UgYWRkaXRpb25zIGFuZCBxdWVyaWVzIG9uIHRoZSBjYWNoZSBtdXN0IGJlIGF0b21pYworCQkgICAgLy8gdGhleSBjYW4gYmUgaW50ZXJsZWF2ZWQsIHRob3VnaAorCQkgICAgY2FjaGUgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRNYXAobmV3IEhhc2hNYXAoKSk7CisJCSAgICBjcmVmID0gbmV3IFNvZnRSZWZlcmVuY2UoY2FjaGUpOworCQl9CisKKwkJU3RyaW5nIGN1cnJlbnREZXNjcmlwdG9yID0gbnVsbDsKKwkJQXJyYXlMaXN0IGNhY2hlRGVzY3JpcHRvckxpc3QgPSBudWxsOworCQlib29sZWFuIHB1dEluQ2FjaGUgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIGludCBORGVidWcgPSAwOworCisgICAgICAgICAgICAgICAgaW50IHN0YXJ0SW5kZXggPSAwOworICAgICAgICAgICAgICAgIGludCBsaW1pdCA9IGZhY3Rvcmllcy5zaXplKCk7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBjYWNoZVJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZhY3RvcnkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbWl0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWN0b3J5ID09IGZhY3Rvcmllcy5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkZhY3RvcnkgIiArIGZhY3RvcnkgKyAibm90IHJlZ2lzdGVyZWQgd2l0aCBzZXJ2aWNlOiAiICsgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2FjaGVSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKwkgICAgb3V0ZXI6CisJCWRvIHsKKwkJICAgIGN1cnJlbnREZXNjcmlwdG9yID0ga2V5LmN1cnJlbnREZXNjcmlwdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKG5hbWUgKyAiWyIgKyBORGVidWcrKyArICJdIGxvb2tpbmcgZm9yOiAiICsgY3VycmVudERlc2NyaXB0b3IpOworCQkgICAgcmVzdWx0ID0gKENhY2hlRW50cnkpY2FjaGUuZ2V0KGN1cnJlbnREZXNjcmlwdG9yKTsKKwkJICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICIgZm91bmQgd2l0aCBkZXNjcmlwdG9yOiAiICsgY3VycmVudERlc2NyaXB0b3IpOworCQkJYnJlYWsgb3V0ZXI7CisJCSAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4oImRpZCBub3QgZmluZDogIiArIGN1cnJlbnREZXNjcmlwdG9yICsgIiBpbiBjYWNoZSIpOworICAgICAgICAgICAgICAgICAgICB9CisKKwkJICAgIC8vIGZpcnN0IHRlc3Qgb2YgY2FjaGUgZmFpbGVkLCBzbyB3ZSdsbCBoYXZlIHRvIHVwZGF0ZQorCQkgICAgLy8gdGhlIGNhY2hlIGlmIHdlIGV2ZW50dWFsbHkgc3VjY2VlZC0tIHRoYXQgaXMsIGlmIHdlJ3JlIAorICAgICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB1cGRhdGUgdGhlIGNhY2hlIGF0IGFsbC4KKwkJICAgIHB1dEluQ2FjaGUgPSBjYWNoZVJlc3VsdDsKKworICAgICAgICAgICAgICAgICAgICBpbnQgbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IHN0YXJ0SW5kZXg7CisJCSAgICB3aGlsZSAoaW5kZXggPCBsaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgRmFjdG9yeSBmID0gKEZhY3RvcnkpZmFjdG9yaWVzLmdldChpbmRleCsrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKCJ0cnlpbmcgZmFjdG9yeVsiICsgKGluZGV4LTEpICsgIl0gIiArIGYudG9TdHJpbmcoKSk7CisJCQlPYmplY3Qgc2VydmljZSA9IGYuY3JlYXRlKGtleSwgdGhpcyk7CisJCQlpZiAoc2VydmljZSAhPSBudWxsKSB7CisJCQkgICAgcmVzdWx0ID0gbmV3IENhY2hlRW50cnkoY3VycmVudERlc2NyaXB0b3IsIHNlcnZpY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKG5hbWUgKyAiIGZhY3Rvcnkgc3VwcG9ydGVkOiAiICsgY3VycmVudERlc2NyaXB0b3IgKyAiLCBjYWNoaW5nIik7CisJCQkgICAgYnJlYWsgb3V0ZXI7CisJCQl9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKCJmYWN0b3J5IGRpZCBub3Qgc3VwcG9ydDogIiArIGN1cnJlbnREZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgIH0KKworCQkgICAgLy8gcHJlcGFyZSB0byBsb2FkIHRoZSBjYWNoZSB3aXRoIGFsbCBhZGRpdGlvbmFsIGlkcyB0aGF0IAorCQkgICAgLy8gd2lsbCByZXNvbHZlIHRvIHJlc3VsdCwgYXNzdW1pbmcgd2UnbGwgc3VjY2VlZC4gIFdlCisJCSAgICAvLyBkb24ndCB3YW50IHRvIGtlZXAgcXVlcnlpbmcgb24gYW4gaWQgdGhhdCdzIGdvaW5nIHRvCisJCSAgICAvLyBmYWxsYmFjayB0byB0aGUgb25lIHRoYXQgc3VjY2VlZGVkLCB3ZSB3YW50IHRvIGhpdCB0aGUKKwkJICAgIC8vIGNhY2hlIHRoZSBmaXJzdCB0aW1lIG5leHQgZ29hcm91bmQuCisJCSAgICBpZiAoY2FjaGVEZXNjcmlwdG9yTGlzdCA9PSBudWxsKSB7CisJCQljYWNoZURlc2NyaXB0b3JMaXN0ID0gbmV3IEFycmF5TGlzdCg1KTsKKwkJICAgIH0KKwkJICAgIGNhY2hlRGVzY3JpcHRvckxpc3QuYWRkKGN1cnJlbnREZXNjcmlwdG9yKTsKKworCQl9IHdoaWxlIChrZXkuZmFsbGJhY2soKSk7CisKKwkJaWYgKHJlc3VsdCAhPSBudWxsKSB7CisJCSAgICBpZiAocHV0SW5DYWNoZSkgeworCQkJY2FjaGUucHV0KHJlc3VsdC5hY3R1YWxEZXNjcmlwdG9yLCByZXN1bHQpOworCQkJaWYgKGNhY2hlRGVzY3JpcHRvckxpc3QgIT0gbnVsbCkgeworCQkJICAgIEl0ZXJhdG9yIGl0ZXIgPSBjYWNoZURlc2NyaXB0b3JMaXN0Lml0ZXJhdG9yKCk7CisJCQkgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXNjID0gKFN0cmluZylpdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICIgYWRkaW5nIGRlc2NyaXB0b3I6ICciICsgZGVzYyArICInIGZvciBhY3R1YWw6ICciICsgcmVzdWx0LmFjdHVhbERlc2NyaXB0b3IgKyAiJyIpOworCisJCQkJY2FjaGUucHV0KGRlc2MsIHJlc3VsdCk7CisJCQkgICAgfQorCQkJfQorCQkJLy8gQXRvbWljIHVwZGF0ZS4gIFdlIGhlbGQgdGhlIHJlYWQgbG9jayBhbGwgdGhpcyB0aW1lCisJCQkvLyBzbyB3ZSBrbm93IG91ciBjYWNoZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGZhY3RvcnkgbGlzdC4KKwkJCS8vIFdlIG1pZ2h0IHN0b21wIG92ZXIgYSBjYWNoZSB0aGF0IHNvbWUgb3RoZXIgdGhyZWFkIAorCQkJLy8gcmVidWlsdCwgYnV0IHRoYXQncyB0aGUgYnJlYWtzLiAgVGhleSdyZSBib3RoIGdvb2QuCisJCQljYWNoZXJlZiA9IGNyZWY7CisJCSAgICB9CisKKwkJICAgIGlmIChhY3R1YWxSZXR1cm4gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgbnVsbCBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuYWN0dWFsRGVzY3JpcHRvci5pbmRleE9mKCIvIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbFJldHVyblswXSA9IHJlc3VsdC5hY3R1YWxEZXNjcmlwdG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsUmV0dXJuWzBdID0gcmVzdWx0LmFjdHVhbERlc2NyaXB0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisJCSAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4oImZvdW5kIGluIHNlcnZpY2U6ICIgKyBuYW1lKTsKKworCQkgICAgcmV0dXJuIHJlc3VsdC5zZXJ2aWNlOworCQl9CisJICAgIH0KKwkgICAgZmluYWxseSB7CisJCWZhY3RvcnlMb2NrLnJlbGVhc2VSZWFkKCk7CisJICAgIH0KKwl9CisKKyAgICAgICAgaWYgKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdCBmb3VuZCBpbiBzZXJ2aWNlOiAiICsgbmFtZSk7CisKKwlyZXR1cm4gaGFuZGxlRGVmYXVsdChrZXksIGFjdHVhbFJldHVybik7CisgICAgfQorICAgIHByaXZhdGUgU29mdFJlZmVyZW5jZSBjYWNoZXJlZjsKKyAgICAKKyAgICAvLyBSZWNvcmQgdGhlIGFjdHVhbCBpZCBmb3IgdGhpcyBzZXJ2aWNlIGluIHRoZSBjYWNoZSwgc28gd2UgY2FuIHJldHVybiBpdAorICAgIC8vIGV2ZW4gaWYgd2Ugc3VjY2VlZCBsYXRlciB3aXRoIGEgZGlmZmVyZW50IGlkLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIENhY2hlRW50cnkgeworCWZpbmFsIFN0cmluZyBhY3R1YWxEZXNjcmlwdG9yOworCWZpbmFsIE9iamVjdCBzZXJ2aWNlOworCUNhY2hlRW50cnkoU3RyaW5nIGFjdHVhbERlc2NyaXB0b3IsIE9iamVjdCBzZXJ2aWNlKSB7CisJICAgIHRoaXMuYWN0dWFsRGVzY3JpcHRvciA9IGFjdHVhbERlc2NyaXB0b3I7CisJICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7CisJfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBoYW5kbGVyIGZvciB0aGlzIHNlcnZpY2UgaWYgbm8gZmFjdG9yeSBpbiB0aGUgbGlzdAorICAgICAqIGhhbmRsZWQgdGhlIGtleS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgT2JqZWN0IGhhbmRsZURlZmF1bHQoS2V5IGtleSwgU3RyaW5nW10gYWN0dWFsSURSZXR1cm4pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2Ugb3ZlcnJpZGUgZm9yIGdldFZpc2libGVJRHMoU3RyaW5nKSB0aGF0IHBhc3NlcyBudWxsCisgICAgICogYXMgdGhlIGZhbGxiYWNrLCB0aHVzIHJldHVybmluZyBhbGwgdmlzaWJsZSBJRHMuCisgICAgICovCisgICAgcHVibGljIFNldCBnZXRWaXNpYmxlSURzKCkgeworICAgICAgICByZXR1cm4gZ2V0VmlzaWJsZUlEcyhudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD5SZXR1cm4gYSBzbmFwc2hvdCBvZiB0aGUgdmlzaWJsZSBJRHMgZm9yIHRoaXMgc2VydmljZS4gIFRoaXMKKyAgICAgKiBzZXQgd2lsbCBub3QgY2hhbmdlIGFzIEZhY3RvcmllcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZQorICAgICAqIHN1cHBvcnRlZCBpZHMgd2lsbCwgc28gdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYWxsIGFuZCBvbmx5CisgICAgICogdGhlIGlkcyBpbiB0aGUgcmV0dXJuZWQgc2V0IGFyZSB2aXNpYmxlIGFuZCBzdXBwb3J0ZWQgYnkgdGhlCisgICAgICogc2VydmljZSBpbiBzdWJzZXF1ZW50IGNhbGxzLjwvcD4KKyAgICAgKgorICAgICAqIDxwPm1hdGNoSUQgaXMgcGFzc2VkIHRvIGNyZWF0ZUtleSB0byBjcmVhdGUgYSBrZXkuICBJZiB0aGUKKyAgICAgKiBrZXkgaXMgbm90IG51bGwsIGl0IGlzIHVzZWQgdG8gZmlsdGVyIG91dCBpZHMgdGhhdCBkb24ndCBoYXZlCisgICAgICogdGhlIGtleSBhcyBhIGZhbGxiYWNrLgorICAgICAqLworICAgIHB1YmxpYyBTZXQgZ2V0VmlzaWJsZUlEcyhTdHJpbmcgbWF0Y2hJRCkgeworICAgICAgICBTZXQgcmVzdWx0ID0gZ2V0VmlzaWJsZUlETWFwKCkua2V5U2V0KCk7CisKKyAgICAgICAgS2V5IGZhbGxiYWNrS2V5ID0gY3JlYXRlS2V5KG1hdGNoSUQpOworCisgICAgICAgIGlmIChmYWxsYmFja0tleSAhPSBudWxsKSB7CisgICAgICAgICAgICBTZXQgdGVtcCA9IG5ldyBIYXNoU2V0KHJlc3VsdC5zaXplKCkpOworICAgICAgICAgICAgSXRlcmF0b3IgaXRlciA9IHJlc3VsdC5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGlkID0gKFN0cmluZylpdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2tLZXkuaXNGYWxsYmFja09mKGlkKSkgeworICAgICAgICAgICAgICAgICAgICB0ZW1wLmFkZChpZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gdGVtcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIG1hcCBmcm9tIHZpc2libGUgaWRzIHRvIGZhY3Rvcmllcy4gIAorICAgICAqLworICAgIHByaXZhdGUgTWFwIGdldFZpc2libGVJRE1hcCgpIHsKKyAgICAgICAgTWFwIGlkY2FjaGUgPSBudWxsOworCVNvZnRSZWZlcmVuY2UgcmVmID0gaWRyZWY7CisgICAgICAgIGlmIChyZWYgIT0gbnVsbCkgeworICAgICAgICAgICAgaWRjYWNoZSA9IChNYXApcmVmLmdldCgpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChpZGNhY2hlID09IG51bGwpIHsKKwkgICAgc3luY2hyb25pemVkICh0aGlzKSB7IC8vIG9yIGlkcmVmLW9ubHkgbG9jaz8KKwkJaWYgKHJlZiA9PSBpZHJlZiB8fCBpZHJlZiA9PSBudWxsKSB7CisJCSAgICAvLyBubyBvdGhlciB0aHJlYWQgdXBkYXRlZCBpZHJlZiBiZWZvcmUgd2UgZ290IHRoZSBsb2NrLCBzbworCQkgICAgLy8gZ3JhYiB0aGUgZmFjdG9yeSBsaXN0IGFuZCB1cGRhdGUgaXQgb3Vyc2VsdmVzCisJCSAgICB0cnkgeworCQkJZmFjdG9yeUxvY2suYWNxdWlyZVJlYWQoKTsKKwkJCWlkY2FjaGUgPSBuZXcgSGFzaE1hcCgpOworCQkJTGlzdEl0ZXJhdG9yIGxJdGVyID0gZmFjdG9yaWVzLmxpc3RJdGVyYXRvcihmYWN0b3JpZXMuc2l6ZSgpKTsKKwkJCXdoaWxlIChsSXRlci5oYXNQcmV2aW91cygpKSB7CisJCQkgICAgRmFjdG9yeSBmID0gKEZhY3RvcnkpbEl0ZXIucHJldmlvdXMoKTsKKwkJCSAgICBmLnVwZGF0ZVZpc2libGVJRHMoaWRjYWNoZSk7CisJCQl9CisJCQlpZGNhY2hlID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKGlkY2FjaGUpOworCQkJaWRyZWYgPSBuZXcgU29mdFJlZmVyZW5jZShpZGNhY2hlKTsKKwkJICAgIH0KKwkJICAgIGZpbmFsbHkgeworCQkJZmFjdG9yeUxvY2sucmVsZWFzZVJlYWQoKTsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIC8vIGFub3RoZXIgdGhyZWFkIHVwZGF0ZWQgaWRyZWYsIGJ1dCBnYyBtYXkgaGF2ZSBzdGVwcGVkCisJCSAgICAvLyBpbiBhbmQgdW5kb25lIGl0cyB3b3JrLCBsZWF2aW5nIGlkY2FjaGUgbnVsbC4gIElmIHNvLAorCQkgICAgLy8gcmV0cnkuCisJCSAgICByZWYgPSBpZHJlZjsKKwkJICAgIGlkY2FjaGUgPSAoTWFwKXJlZi5nZXQoKTsKKwkJfQorCSAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaWRjYWNoZTsKKyAgICB9CisgICAgcHJpdmF0ZSBTb2Z0UmVmZXJlbmNlIGlkcmVmOworCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2Ugb3ZlcnJpZGUgZm9yIGdldERpc3BsYXlOYW1lKFN0cmluZywgTG9jYWxlKSB0aGF0CisgICAgICogdXNlcyB0aGUgY3VycmVudCBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKFN0cmluZyBpZCkgeworCXJldHVybiBnZXREaXNwbGF5TmFtZShpZCwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSB2aXNpYmxlIGlkLCByZXR1cm4gdGhlIGRpc3BsYXkgbmFtZSBpbiB0aGUgcmVxdWVzdGVkIGxvY2FsZS4KKyAgICAgKiBJZiB0aGVyZSBpcyBubyBkaXJlY3RseSBzdXBwb3J0ZWQgaWQgY29ycmVzcG9uZGluZyB0byB0aGlzIGlkLCByZXR1cm4KKyAgICAgKiBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoU3RyaW5nIGlkLCBMb2NhbGUgbG9jYWxlKSB7CisJTWFwIG0gPSBnZXRWaXNpYmxlSURNYXAoKTsKKwlGYWN0b3J5IGYgPSAoRmFjdG9yeSltLmdldChpZCk7CisJcmV0dXJuIGYgIT0gbnVsbCA/IGYuZ2V0RGlzcGxheU5hbWUoaWQsIGxvY2FsZSkgOiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJyaWRlIG9mIGdldERpc3BsYXlOYW1lcyhMb2NhbGUsIENvbXBhcmF0b3IsIFN0cmluZykgdGhhdCAKKyAgICAgKiB1c2VzIHRoZSBjdXJyZW50IGRlZmF1bHQgTG9jYWxlIGFzIHRoZSBsb2NhbGUsIHRoZSBkZWZhdWx0IGNvbGxhdG9yIGZvcgorICAgICAqIHRoZSBsb2NhbGUgYXMgdGhlIGNvbXBhcmF0b3IgdG8gc29ydCB0aGUgZGlzcGxheSBuYW1lcywgYW5kIG51bGwgZm9yCisgICAgICogdGhlIG1hdGNoSUQuCisgICAgICovCisgICAgcHVibGljIE1hcCBnZXREaXNwbGF5TmFtZXMoKSB7CisgICAgICAgIExvY2FsZSBsb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICBDb2xsYXRvciBjb2wgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShsb2NhbGUpOworCXJldHVybiBnZXREaXNwbGF5TmFtZXMobG9jYWxlLCBjb2wsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJyaWRlIG9mIGdldERpc3BsYXlOYW1lcyhMb2NhbGUsIENvbXBhcmF0b3IsIFN0cmluZykgdGhhdAorICAgICAqIHVzZXMgdGhlIGRlZmF1bHQgY29sbGF0b3IgZm9yIHRoZSBsb2NhbGUgYXMgdGhlIGNvbXBhcmF0b3IgdG8KKyAgICAgKiBzb3J0IHRoZSBkaXNwbGF5IG5hbWVzLCBhbmQgbnVsbCBmb3IgdGhlIG1hdGNoSUQuCisgICAgICovCisgICAgcHVibGljIE1hcCBnZXREaXNwbGF5TmFtZXMoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICBDb2xsYXRvciBjb2wgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICByZXR1cm4gZ2V0RGlzcGxheU5hbWVzKGxvY2FsZSwgY29sLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBvdmVycmlkZSBvZiBnZXREaXNwbGF5TmFtZXMoTG9jYWxlLCBDb21wYXJhdG9yLCBTdHJpbmcpIHRoYXQKKyAgICAgKiB1c2VzIG51bGwgZm9yIHRoZSBtYXRjaElELCB0aHVzIHJldHVybmluZyBhbGwgZGlzcGxheSBuYW1lcy4KKyAgICAgKiAvCisgICAgcHVibGljIE1hcCBnZXREaXNwbGF5TmFtZXMoTG9jYWxlIGxvY2FsZSwgQ29tcGFyYXRvciBjb2wpIHsKKyAgICAgICAgcmV0dXJuIGdldERpc3BsYXlOYW1lcyhsb2NhbGUsIGNvbCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2Ugb3ZlcnJpZGUgb2YgZ2V0RGlzcGxheU5hbWVzKExvY2FsZSwgQ29tcGFyYXRvciwgU3RyaW5nKSB0aGF0CisgICAgICogdXNlcyB0aGUgZGVmYXVsdCBjb2xsYXRvciBmb3IgdGhlIGxvY2FsZSBhcyB0aGUgY29tcGFyYXRvciB0bworICAgICAqIHNvcnQgdGhlIGRpc3BsYXkgbmFtZXMuCisgICAgICovCisgICAgcHVibGljIE1hcCBnZXREaXNwbGF5TmFtZXMoTG9jYWxlIGxvY2FsZSwgU3RyaW5nIG1hdGNoSUQpIHsKKyAgICAgICAgQ29sbGF0b3IgY29sID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UobG9jYWxlKTsKKyAgICAgICAgcmV0dXJuIGdldERpc3BsYXlOYW1lcyhsb2NhbGUsIGNvbCwgbWF0Y2hJRCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgc25hcHNob3Qgb2YgdGhlIG1hcHBpbmcgZnJvbSBkaXNwbGF5IG5hbWVzIHRvIHZpc2libGUKKyAgICAgKiBJRHMgZm9yIHRoaXMgc2VydmljZS4gIFRoaXMgc2V0IHdpbGwgbm90IGNoYW5nZSBhcyBmYWN0b3JpZXMKKyAgICAgKiBhcmUgYWRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZSBzdXBwb3J0ZWQgaWRzIHdpbGwsIHNvIHRoZXJlIGlzCisgICAgICogbm8gZ3VhcmFudGVlIHRoYXQgYWxsIGFuZCBvbmx5IHRoZSBpZHMgaW4gdGhlIHJldHVybmVkIG1hcCB3aWxsCisgICAgICogYmUgdmlzaWJsZSBhbmQgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2aWNlIGluIHN1YnNlcXVlbnQgY2FsbHMsCisgICAgICogbm9yIGlzIHRoZXJlIGFueSBndWFyYW50ZWUgdGhhdCB0aGUgY3VycmVudCBkaXNwbGF5IG5hbWVzIG1hdGNoCisgICAgICogdGhvc2UgaW4gdGhlIHNldC4gIFRoZSBkaXNwbGF5IG5hbWVzIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlIAorICAgICAqIGNvbXBhcmF0b3IgcHJvdmlkZWQuCisgICAgICovCisgICAgcHVibGljIE1hcCBnZXREaXNwbGF5TmFtZXMoTG9jYWxlIGxvY2FsZSwgQ29tcGFyYXRvciBjb2wsIFN0cmluZyBtYXRjaElEKSB7CisgICAgICAgIE1hcCBkbmNhY2hlID0gbnVsbDsKKwlMb2NhbGVSZWYgcmVmID0gZG5yZWY7CisgICAgICAgIGlmIChyZWYgIT0gbnVsbCkgeworICAgICAgICAgICAgZG5jYWNoZSA9IHJlZi5nZXQobG9jYWxlLCBjb2wpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGRuY2FjaGUgPT0gbnVsbCkgeworCSAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKwkJaWYgKHJlZiA9PSBkbnJlZiB8fCBkbnJlZiA9PSBudWxsKSB7CisJCSAgICBkbmNhY2hlID0gbmV3IFRyZWVNYXAoY29sKTsgLy8gc29ydGVkCisJCSAgICAKKwkJICAgIE1hcCBtID0gZ2V0VmlzaWJsZUlETWFwKCk7CisJCSAgICBJdGVyYXRvciBlaSA9IG0uZW50cnlTZXQoKS5pdGVyYXRvcigpOworCQkgICAgd2hpbGUgKGVpLmhhc05leHQoKSkgeworCQkJRW50cnkgZSA9IChFbnRyeSllaS5uZXh0KCk7CisJCQlTdHJpbmcgaWQgPSAoU3RyaW5nKWUuZ2V0S2V5KCk7CisJCQlGYWN0b3J5IGYgPSAoRmFjdG9yeSllLmdldFZhbHVlKCk7CisJCQlkbmNhY2hlLnB1dChmLmdldERpc3BsYXlOYW1lKGlkLCBsb2NhbGUpLCBpZCk7CisJCSAgICB9CisKKwkJICAgIGRuY2FjaGUgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAoZG5jYWNoZSk7CisJCSAgICBkbnJlZiA9IG5ldyBMb2NhbGVSZWYoZG5jYWNoZSwgbG9jYWxlLCBjb2wpOworCQl9IGVsc2UgeworCQkgICAgcmVmID0gZG5yZWY7CisJCSAgICBkbmNhY2hlID0gcmVmLmdldChsb2NhbGUsIGNvbCk7CisJCX0KKwkgICAgfQorICAgICAgICB9CisKKyAgICAgICAgS2V5IG1hdGNoS2V5ID0gY3JlYXRlS2V5KG1hdGNoSUQpOworICAgICAgICBpZiAobWF0Y2hLZXkgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGRuY2FjaGU7CisgICAgICAgIH0KKworICAgICAgICBIYXNoTWFwIHJlc3VsdCA9IG5ldyBIYXNoTWFwKGRuY2FjaGUpOworICAgICAgICBJdGVyYXRvciBpdGVyID0gcmVzdWx0LmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBFbnRyeSBlID0gKEVudHJ5KWl0ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKCFtYXRjaEtleS5pc0ZhbGxiYWNrT2YoKFN0cmluZyllLmdldFZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgaXRlci5yZW1vdmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIHdlIGRlZmluZSBhIGNsYXNzIHNvIHdlIGdldCBhdG9taWMgc2ltdWx0YW5lb3VzIGFjY2VzcyB0byB0aGUgCisgICAgLy8gbG9jYWxlLCBjb21wYXJhdG9yLCBhbmQgY29ycmVzcG9uZGluZyBtYXAuCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTG9jYWxlUmVmIHsKKwlwcml2YXRlIGZpbmFsIExvY2FsZSBsb2NhbGU7CisJcHJpdmF0ZSBTb2Z0UmVmZXJlbmNlIHJlZjsKKyAgICAgICAgcHJpdmF0ZSBDb21wYXJhdG9yIGNvbDsKKworCUxvY2FsZVJlZihNYXAgZG5DYWNoZSwgTG9jYWxlIGxvY2FsZSwgQ29tcGFyYXRvciBjb2wpIHsKKwkgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7CisgICAgICAgICAgICB0aGlzLmNvbCA9IGNvbDsKKwkgICAgdGhpcy5yZWYgPSBuZXcgU29mdFJlZmVyZW5jZShkbkNhY2hlKTsKKwl9CisKKwlNYXAgZ2V0KExvY2FsZSBsb2NhbGUsIENvbXBhcmF0b3IgY29sKSB7CisgICAgICAgICAgICBNYXAgbSA9IChNYXApcmVmLmdldCgpOworCSAgICBpZiAobSAhPSBudWxsICYmIAorICAgICAgICAgICAgICAgIHRoaXMubG9jYWxlLmVxdWFscyhsb2NhbGUpICYmCisgICAgICAgICAgICAgICAgKHRoaXMuY29sID09IGNvbCB8fCAodGhpcy5jb2wgIT0gbnVsbCAmJiB0aGlzLmNvbC5lcXVhbHMoY29sKSkpKSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbTsKKwkgICAgfQorCSAgICByZXR1cm4gbnVsbDsKKwl9CisgICAgfQorICAgIHByaXZhdGUgTG9jYWxlUmVmIGRucmVmOworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGZhY3Rvcmllcy4gIFRoZXJlCisgICAgICogaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGxpc3Qgd2lsbCBzdGlsbCBtYXRjaCB0aGUgY3VycmVudAorICAgICAqIGZhY3RvcnkgbGlzdCBvZiB0aGUgc2VydmljZSBzdWJzZXF1ZW50IHRvIHRoaXMgY2FsbC4gIAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBMaXN0IGZhY3RvcmllcygpIHsKKwl0cnkgeworCSAgICBmYWN0b3J5TG9jay5hY3F1aXJlUmVhZCgpOworCSAgICByZXR1cm4gbmV3IEFycmF5TGlzdChmYWN0b3JpZXMpOworCX0KKwlmaW5hbGx5eworCSAgICBmYWN0b3J5TG9jay5yZWxlYXNlUmVhZCgpOworCX0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBIGNvbnZlbmllbmNlIG92ZXJyaWRlIG9mIHJlZ2lzdGVyT2JqZWN0KE9iamVjdCwgU3RyaW5nLCBib29sZWFuKQorICAgICAqIHRoYXQgZGVmYXVsdHMgdmlzaWJsZSB0byB0cnVlLgorICAgICAqLworICAgIHB1YmxpYyBGYWN0b3J5IHJlZ2lzdGVyT2JqZWN0KE9iamVjdCBvYmosIFN0cmluZyBpZCkgeworICAgICAgICByZXR1cm4gcmVnaXN0ZXJPYmplY3Qob2JqLCBpZCwgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYW4gb2JqZWN0IHdpdGggdGhlIHByb3ZpZGVkIGlkLiAgVGhlIGlkIHdpbGwgYmUgCisgICAgICogY2Fub25pY2FsaXplZC4gIFRoZSBjYW5vbmljYWxpemVkIElEIHdpbGwgYmUgcmV0dXJuZWQgYnkKKyAgICAgKiBnZXRWaXNpYmxlSURzIGlmIHZpc2libGUgaXMgdHJ1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgRmFjdG9yeSByZWdpc3Rlck9iamVjdChPYmplY3Qgb2JqLCBTdHJpbmcgaWQsIGJvb2xlYW4gdmlzaWJsZSkgeworICAgICAgICBTdHJpbmcgY2Fub25pY2FsSUQgPSBjcmVhdGVLZXkoaWQpLmNhbm9uaWNhbElEKCk7CisJcmV0dXJuIHJlZ2lzdGVyRmFjdG9yeShuZXcgU2ltcGxlRmFjdG9yeShvYmosIGNhbm9uaWNhbElELCB2aXNpYmxlKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIGEgRmFjdG9yeS4gIFJldHVybnMgdGhlIGZhY3RvcnkgaWYgdGhlIHNlcnZpY2UgYWNjZXB0cworICAgICAqIHRoZSBmYWN0b3J5LCBvdGhlcndpc2UgcmV0dXJucyBudWxsLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICAgKiBhY2NlcHRzIGFsbCBmYWN0b3JpZXMuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIEZhY3RvcnkgcmVnaXN0ZXJGYWN0b3J5KEZhY3RvcnkgZmFjdG9yeSkgeworICAgICAgICBpZiAoZmFjdG9yeSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCXRyeSB7CisJICAgIGZhY3RvcnlMb2NrLmFjcXVpcmVXcml0ZSgpOworCSAgICBmYWN0b3JpZXMuYWRkKDAsIGZhY3RvcnkpOworCSAgICBjbGVhckNhY2hlcygpOworCX0KKwlmaW5hbGx5IHsKKwkgICAgZmFjdG9yeUxvY2sucmVsZWFzZVdyaXRlKCk7CisJfQorCW5vdGlmeUNoYW5nZWQoKTsKKwlyZXR1cm4gZmFjdG9yeTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbnJlZ2lzdGVyIGEgZmFjdG9yeS4gIFRoZSBmaXJzdCBtYXRjaGluZyByZWdpc3RlcmVkIGZhY3Rvcnkgd2lsbAorICAgICAqIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gIFJldHVybnMgdHJ1ZSBpZiBhIG1hdGNoaW5nIGZhY3Rvcnkgd2FzCisgICAgICogcmVtb3ZlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB1bnJlZ2lzdGVyRmFjdG9yeShGYWN0b3J5IGZhY3RvcnkpIHsKKwlpZiAoZmFjdG9yeSA9PSBudWxsKSB7CisJICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOworCX0KKworCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJdHJ5IHsKKwkgICAgZmFjdG9yeUxvY2suYWNxdWlyZVdyaXRlKCk7CisJICAgIGlmIChmYWN0b3JpZXMucmVtb3ZlKGZhY3RvcnkpKSB7CisJCXJlc3VsdCA9IHRydWU7CisJCWNsZWFyQ2FjaGVzKCk7CisJICAgIH0KKwl9CisJZmluYWxseSB7CisJICAgIGZhY3RvcnlMb2NrLnJlbGVhc2VXcml0ZSgpOworCX0KKworCWlmIChyZXN1bHQpIHsKKwkgICAgbm90aWZ5Q2hhbmdlZCgpOworCX0KKwlyZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc2V0IHRoZSBzZXJ2aWNlIHRvIHRoZSBkZWZhdWx0IGZhY3Rvcmllcy4gIFRoZSBmYWN0b3J5CisgICAgICogbG9jayBpcyBhY3F1aXJlZCBhbmQgdGhlbiByZUluaXRpYWxpemVGYWN0b3JpZXMgaXMgY2FsbGVkLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlc2V0KCkgeworCXRyeSB7CisJICAgIGZhY3RvcnlMb2NrLmFjcXVpcmVXcml0ZSgpOworCSAgICByZUluaXRpYWxpemVGYWN0b3JpZXMoKTsKKwkgICAgY2xlYXJDYWNoZXMoKTsKKwl9CisJZmluYWxseSB7CisJICAgIGZhY3RvcnlMb2NrLnJlbGVhc2VXcml0ZSgpOworCX0KKwlub3RpZnlDaGFuZ2VkKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVpbml0aWFsaXplIHRoZSBmYWN0b3J5IGxpc3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUuICBCeSBkZWZhdWx0CisgICAgICogdGhpcyBjbGVhcnMgdGhlIGxpc3QuICBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0byBwcm92aWRlIG90aGVyCisgICAgICogZGVmYXVsdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmFjdG9yeSBsaXN0LiAgU3ViY2xhc3NlcyBtdXN0CisgICAgICogbm90IGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHksIGFzIGl0IG11c3Qgb25seSBiZSBjYWxsZWQgd2hpbGUKKyAgICAgKiBob2xkaW5nIHdyaXRlIGFjY2VzcyB0byB0aGUgZmFjdG9yeSBsaXN0LiAgCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgcmVJbml0aWFsaXplRmFjdG9yaWVzKCkgeworCWZhY3Rvcmllcy5jbGVhcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBzZXJ2aWNlIGlzIGluIGl0cyBkZWZhdWx0IHN0YXRlLiAgVGhlIGRlZmF1bHQKKyAgICAgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIGZhY3RvcmllcyByZWdpc3RlcmVkLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzRGVmYXVsdCgpIHsKKyAgICAgICAgcmV0dXJuIGZhY3Rvcmllcy5zaXplKCkgPT0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBrZXkgZnJvbSBhbiBpZC4gIFRoaXMgY3JlYXRlcyBhIEtleSBpbnN0YW5jZS4KKyAgICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0byBkZWZpbmUgbW9yZSB1c2VmdWwga2V5cyBhcHByb3ByaWF0ZQorICAgICAqIHRvIHRoZSBmYWN0b3JpZXMgdGhleSBhY2NlcHQuICBJZiBpZCBpcyBudWxsLCByZXR1cm5zIG51bGwuCisgICAgICovCisgICAgcHVibGljIEtleSBjcmVhdGVLZXkoU3RyaW5nIGlkKSB7CisgICAgICAgIHJldHVybiBpZCA9PSBudWxsID8gbnVsbCA6IG5ldyBLZXkoaWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFyIGNhY2hlcyBtYWludGFpbmVkIGJ5IHRoaXMgc2VydmljZS4gIFN1YmNsYXNzZXMgY2FuCisgICAgICogb3ZlcnJpZGUgaWYgdGhleSBpbXBsZW1lbnQgYWRkaXRpb25hbCB0aGF0IG5lZWQgdG8gYmUgY2xlYXJlZAorICAgICAqIHdoZW4gdGhlIHNlcnZpY2UgY2hhbmdlcy4gU3ViY2xhc3NlcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBjYWxsCisgICAgICogdGhpcyBtZXRob2QgZGlyZWN0bHksIGFzIGl0IG11c3Qgb25seSBiZSBjYWxsZWQgd2hpbGUKKyAgICAgKiBzeW5jaHJvbml6ZWQgb24gdGhpcy4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBjbGVhckNhY2hlcygpIHsKKwkvLyB3ZSBkb24ndCBzeW5jaHJvbml6ZSBvbiB0aGVzZSBiZWNhdXNlIG1ldGhvZHMgdGhhdCB1c2UgdGhlbQorCS8vIGNvcHkgYmVmb3JlIHVzZSwgYW5kIGNoZWNrIGZvciBjaGFuZ2VzIGlmIHRoZXkgbW9kaWZ5IHRoZQorCS8vIGNhY2hlcy4KKwljYWNoZXJlZiA9IG51bGw7CisJaWRyZWYgPSBudWxsOworCWRucmVmID0gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDbGVhcnMgb25seSB0aGUgc2VydmljZSBjYWNoZS4KKyAgICAgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYnkgc3ViY2xhc3NlcyB3aGVuIGEgY2hhbmdlIGFmZmVjdHMgdGhlIHNlcnZpY2UKKyAgICAgKiBjYWNoZSBidXQgbm90IHRoZSBpZCBjYWNoZXMsIGUuZy4sIHdoZW4gdGhlIGRlZmF1bHQgbG9jYWxlIGNoYW5nZXMKKyAgICAgKiB0aGUgcmVzb2x1dGlvbiBvZiBpZHMgY2hhbmdlcywgYnV0IG5vdCB0aGUgdmlzaWJsZSBpZHMgdGhlbXNlbHZlcy4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBjbGVhclNlcnZpY2VDYWNoZSgpIHsKKwljYWNoZXJlZiA9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VydmljZUxpc3RlbmVyIGlzIHRoZSBsaXN0ZW5lciB0aGF0IElDVVNlcnZpY2UgcHJvdmlkZXMgYnkgZGVmYXVsdC4KKyAgICAgKiBJQ1VTZXJ2aWNlIHdpbGwgbm90aWZpeSB0aGlzIGxpc3RlbmVyIHdoZW4gZmFjdG9yaWVzIGFyZSBhZGRlZCB0bworICAgICAqIG9yIHJlbW92ZWQgZnJvbSB0aGUgc2VydmljZS4gIFN1YmNsYXNzZXMgY2FuIHByb3ZpZGUKKyAgICAgKiBkaWZmZXJlbnQgbGlzdGVuZXIgaW50ZXJmYWNlcyB0aGF0IGV4dGVuZCBFdmVudExpc3RlbmVyLCBhbmQgbW9kaWZ5CisgICAgICogYWNjZXB0c0xpc3RlbmVyIGFuZCBub3RpZnlMaXN0ZW5lciBhcyBhcHByb3ByaWF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBTZXJ2aWNlTGlzdGVuZXIgZXh0ZW5kcyBFdmVudExpc3RlbmVyIHsKKwlwdWJsaWMgdm9pZCBzZXJ2aWNlQ2hhbmdlZChJQ1VTZXJ2aWNlIHNlcnZpY2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBsaXN0ZW5lciBpcyBhY2NlcHRlZDsgYnkgZGVmYXVsdCB0aGlzCisgICAgICogcmVxdWlyZXMgYSBTZXJ2aWNlTGlzdGVuZXIuICBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0byBhY2NlcHQKKyAgICAgKiBkaWZmZXJlbnQgbGlzdGVuZXJzLiAgCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gYWNjZXB0c0xpc3RlbmVyKEV2ZW50TGlzdGVuZXIgbCkgeworCXJldHVybiBsIGluc3RhbmNlb2YgU2VydmljZUxpc3RlbmVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGlmeSB0aGUgbGlzdGVuZXIsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgYSBTZXJ2aWNlTGlzdGVuZXIuCisgICAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdG8gdXNlIGEgZGlmZmVyZW50IGxpc3RlbmVyLiAgCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgbm90aWZ5TGlzdGVuZXIoRXZlbnRMaXN0ZW5lciBsKSB7CisJKChTZXJ2aWNlTGlzdGVuZXIpbCkuc2VydmljZUNoYW5nZWQodGhpcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgc2VydmljZS4KKyAgICAgKiBUaGlzIGFsc28gcmVzZXRzIHRoZSBzdGF0aXN0aWNzLiBVc2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBzdGF0cygpIHsKKwlJQ1VSV0xvY2suU3RhdHMgc3RhdHMgPSBmYWN0b3J5TG9jay5yZXNldFN0YXRzKCk7CisJaWYgKHN0YXRzICE9IG51bGwpIHsKKwkgICAgcmV0dXJuIHN0YXRzLnRvU3RyaW5nKCk7CisJfQorCXJldHVybiAibm8gc3RhdHMiOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHNlcnZpY2UuIFRoaXMgd2lsbCBiZSB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vbmUgd2FzIGFzc2lnbmVkLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHN1cGVyLnRvU3RyaW5nLCBhcHBlbmRpbmcgdGhlIG5hbWUgaW4gY3VybHkgYnJhY2VzLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpICsgInsiICsgbmFtZSArICJ9IjsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL0ludFRyaWUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0ludFRyaWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lOGU4YTczCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSW50VHJpZS5qYXZhCkBAIC0wLDAgKzEsMjgwIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL0ludFRyaWUuamF2YSx2ICQKKyogJERhdGU6IDIwMDIvMDkvMDYgMTk6MDQ6MDcgJAorKiAkUmV2aXNpb246IDEuOCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbDsKKworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVVRGMTY7CisKKy8qKgorICogVHJpZSBpbXBsZW1lbnRhdGlvbiB3aGljaCBzdG9yZXMgZGF0YSBpbiBpbnQsIDMyIGJpdHMuCisgKiBAYXV0aG9yIHN5bndlZQorICogQHNlZSBjb20uaWJtLmljdS51dGlsLlRyaWUKKyAqIEBzaW5jZSByZWxlYXNlIDIuMSwgSmFuIDAxIDIwMDIKKyAqLworcHVibGljIGNsYXNzIEludFRyaWUgZXh0ZW5kcyBUcmllCit7CisgICAgLy8gcHVibGljIGNvbnN0cnVjdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICogPHA+Q3JlYXRlcyBhIG5ldyBUcmllIHdpdGggdGhlIHNldHRpbmdzIGZvciB0aGUgdHJpZSBkYXRhLjwvcD4KKyAgICAqIDxwPlVuc2VyaWFsaXplIHRoZSAzMi1iaXQtYWxpZ25lZCBpbnB1dCBzdHJlYW0gYW5kIHVzZSB0aGUgZGF0YSBmb3IgdGhlIAorICAgICogdHJpZS48L3A+CisgICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0gZmlsZSBpbnB1dCBzdHJlYW0gdG8gYSBJQ1UgZGF0YSBmaWxlLCBjb250YWluaW5nIAorICAgICogICAgICAgICAgICAgICAgICAgIHRoZSB0cmllCisgICAgKiBAcGFyYW0gZGF0YU1hbmlwdWxhdGUsIG9iamVjdCB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIHBhcnNlIHRoZSBjaGFyIAorICAgICogICAgICAgICAgICAgICAgICAgICAgICBkYXRhCisgICAgKiBAZXhjZXB0aW9uIElPRXhjZXB0aW9uIHRocm93biB3aGVuIGRhdGEgcmVhZGluZyBmYWlscworICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHVibGljIEludFRyaWUoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIERhdGFNYW5pcHVsYXRlIGRhdGFtYW5pcHVsYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgc3VwZXIoaW5wdXRTdHJlYW0sIGRhdGFtYW5pcHVsYXRlKTsKKyAgICAgICAgaWYgKCFpc0ludFRyaWUoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0YSBnaXZlbiBkb2VzIG5vdCBiZWxvbmcgdG8gYSBpbnQgdHJpZS4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29kZXBvaW50LgorICAgICogSWYgbm8gdmFsdWUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2RlcG9pbnQsIGEgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlCisgICAgKiByZXR1cm5lZC4KKyAgICAqIEBwYXJhbSBjaCBjb2RlcG9pbnQKKyAgICAqIEByZXR1cm4gb2Zmc2V0IHRvIGRhdGEKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Q29kZVBvaW50VmFsdWUoaW50IGNoKQorICAgIHsKKyAgICAgICAgaW50IG9mZnNldCA9IGdldENvZGVQb2ludE9mZnNldChjaCk7CisgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhX1tvZmZzZXRdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2luaXRpYWxWYWx1ZV87CisgICAgfQorCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSB2YWx1ZSB0byB0aGUgZGF0YSB3aGljaCB0aGlzIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3RlciBwb2ludHMKKyAgICAqIHRvLgorICAgICogUmV0dXJuZWQgZGF0YSBtYXkgY29udGFpbiBmb2xkaW5nIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIG5leHQKKyAgICAqIHRyYWlsaW5nIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIuCisgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBndWFyYW50ZWUgY29ycmVjdCByZXN1bHRzIGZvciB0cmFpbCBzdXJyb2dhdGVzLgorICAgICogQHBhcmFtIGNoIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3RlcgorICAgICogQHJldHVybiBkYXRhIHZhbHVlCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldExlYWRWYWx1ZShjaGFyIGNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YV9bZ2V0TGVhZE9mZnNldChjaCldOworICAgIH0KKworICAgIC8qKgorICAgICogR2V0IHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIEJNUCBjb2RlIHBvaW50LgorICAgICogTGVhZCBzdXJyb2dhdGUgY29kZSBwb2ludHMgYXJlIHRyZWF0ZWQgYXMgbm9ybWFsIGNvZGUgcG9pbnRzLCB3aXRoCisgICAgKiB1bmZvbGRlZCB2YWx1ZXMgdGhhdCBtYXkgZGlmZmVyIGZyb20gZ2V0TGVhZFZhbHVlKCkgcmVzdWx0cy4KKyAgICAqIEBwYXJhbSBjaCB0aGUgaW5wdXQgQk1QIGNvZGUgcG9pbnQKKyAgICAqIEByZXR1cm4gdHJpZSBkYXRhIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgQk1QIGNvZGVwb2ludAorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBnZXRCTVBWYWx1ZShjaGFyIGNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YV9bZ2V0Qk1QT2Zmc2V0KGNoKV07CisgICAgfQorCisgICAgLyoqCisgICAgKiBHZXQgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHBhaXIgb2Ygc3Vycm9nYXRlcy4KKyAgICAqIEBwYXJhbSBsZWFkIGEgbGVhZCBzdXJyb2dhdGUKKyAgICAqIEBwYXJhbSB0cmFpbCBhIHRyYWlsIHN1cnJvZ2F0ZQorICAgICogQHBhcmFtIHRyaWUgZGF0YSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldFN1cnJvZ2F0ZVZhbHVlKGNoYXIgbGVhZCwgY2hhciB0cmFpbCkKKyAgICB7CisgICAgICAgIGlmICghVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGxlYWQpIHx8ICFVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKHRyYWlsKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiQXJndW1lbnQgY2hhcmFjdGVycyBkbyBub3QgZm9ybSBhIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gZ2V0IGZvbGQgcG9zaXRpb24gZm9yIHRoZSBuZXh0IHRyYWlsIHN1cnJvZ2F0ZQorICAgICAgICBpbnQgb2Zmc2V0ID0gZ2V0U3Vycm9nYXRlT2Zmc2V0KGxlYWQsIHRyYWlsKTsKKworICAgICAgICAvLyBnZXQgdGhlIHJlYWwgZGF0YSBmcm9tIHRoZSBmb2xkZWQgbGVhZC90cmFpbCB1bml0cworICAgICAgICBpZiAob2Zmc2V0ID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIG1fZGF0YV9bb2Zmc2V0XTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJldHVybiBtX2luaXRpYWxWYWx1ZV8gaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAgICAgcmV0dXJuIG1faW5pdGlhbFZhbHVlXzsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIEdldCBhIHZhbHVlIGZyb20gYSBmb2xkaW5nIG9mZnNldCAoZnJvbSB0aGUgdmFsdWUgb2YgYSBsZWFkIHN1cnJvZ2F0ZSkKKyAgICAqIGFuZCBhIHRyYWlsIHN1cnJvZ2F0ZS4KKyAgICAqIEBwYXJhbSBsZWFkdmFsdWUgdGhlIHZhbHVlIG9mIGEgbGVhZCBzdXJyb2dhdGUgdGhhdCBjb250YWlucyB0aGUKKyAgICAqICAgICAgICBmb2xkaW5nIG9mZnNldAorICAgICogQHBhcmFtIHRyYWlsIHN1cnJvZ2F0ZQorICAgICogQHJldHVybiB0cmllIGRhdGEgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0cmFpbCBjaGFyYWN0ZXIKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VHJhaWxWYWx1ZShpbnQgbGVhZHZhbHVlLCBjaGFyIHRyYWlsKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGF0YU1hbmlwdWxhdGVfID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBmaWVsZCBEYXRhTWFuaXB1bGF0ZSBpbiB0aGlzIFRyaWUgaXMgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGludCBvZmZzZXQgPSBtX2RhdGFNYW5pcHVsYXRlXy5nZXRGb2xkaW5nT2Zmc2V0KGxlYWR2YWx1ZSk7CisgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7CisJICAgICAgICByZXR1cm4gbV9kYXRhX1tnZXRSYXdPZmZzZXQob2Zmc2V0LAorIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcikodHJhaWwgJiBTVVJST0dBVEVfTUFTS18pKV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1faW5pdGlhbFZhbHVlXzsKKyAgICB9CisgICAgCisJLyoqCisgICAgICogPHA+R2V0cyB0aGUgbGF0aW4gMSBmYXN0IHBhdGggdmFsdWUuPC9wPgorICAgICAqIDxwPk5vdGUgdGhpcyBvbmx5IHdvcmtzIGlmIGxhdGluIDEgY2hhcmFjdGVycyBoYXZlIHRoZWlyIG93biBsaW5lYXIgCisgICAgICogYXJyYXkuPC9wPgorICAgICAqIEBwYXJhbSBjaCBsYXRpbiAxIGNoYXJhY3RlcnMKKyAgICAgKiBAcmV0dXJuIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBsYXRpbiBjaGFyYWN0ZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldExhdGluMUxpbmVhclZhbHVlKGNoYXIgY2gpIAorICAgIHsKKyAgICAJcmV0dXJuIG1fZGF0YV9bSU5ERVhfU1RBR0VfM19NQVNLXyArIDEgKyBjaF07CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBhcmd1bWVudCBUcmllIGhhcyB0aGUgc2FtZSBkYXRhIGFzIHRoaXMgVHJpZQorICAgICAqIEBwYXJhbSBvdGhlciBUcmllIHRvIGNoZWNrCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBUcmllIGhhcyB0aGUgc2FtZSBkYXRhIGFzIHRoaXMgVHJpZSwgZmFsc2UKKyAgICAgKiAgICAgICAgIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIAorICAgIHsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBzdXBlci5lcXVhbHMob3RoZXIpOworICAgICAgICBpZiAocmVzdWx0ICYmIG90aGVyIGluc3RhbmNlb2YgSW50VHJpZSkgeworICAgICAgICAgICAgSW50VHJpZSBvdGhlcnRyaWUgPSAoSW50VHJpZSlvdGhlcjsKKyAgICAgICAgICAgIGlmIChtX2luaXRpYWxWYWx1ZV8gIT0gb3RoZXJ0cmllLm1faW5pdGlhbFZhbHVlXworICAgICAgICAgICAgICAgIHx8ICFBcnJheXMuZXF1YWxzKG1fZGF0YV8sIG90aGVydHJpZS5tX2RhdGFfKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gcHJvdGVjdGVkIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICogPHA+UGFyc2VzIHRoZSBpbnB1dCBzdHJlYW0gYW5kIHN0b3JlcyBpdHMgdHJpZSBjb250ZW50IGludG8gYSBpbmRleCBhbmQKKyAgICAqIGRhdGEgYXJyYXk8L3A+CisgICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0gZGF0YSBpbnB1dCBzdHJlYW0gY29udGFpbmluZyB0cmllIGRhdGEKKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3duIHdoZW4gZGF0YSByZWFkaW5nIGZhaWxzCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCB1bnNlcmlhbGl6ZShJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBzdXBlci51bnNlcmlhbGl6ZShpbnB1dFN0cmVhbSk7CisgICAgICAgIC8vIG9uZSB1c2VkIGZvciBpbml0aWFsIHZhbHVlCisgICAgICAgIG1fZGF0YV8gICAgICAgICAgICAgICA9IG5ldyBpbnRbbV9kYXRhTGVuZ3RoX107CisgICAgICAgIERhdGFJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBEYXRhSW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fZGF0YUxlbmd0aF87IGkgKyspIHsKKyAgICAgICAgICAgIG1fZGF0YV9baV0gPSBpbnB1dC5yZWFkSW50KCk7CisgICAgICAgIH0KKyAgICAgICAgbV9pbml0aWFsVmFsdWVfID0gbV9kYXRhX1swXTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSBvZmZzZXQgdG8gdGhlIGRhdGEgd2hpY2ggdGhlIHN1cnJvZ2F0ZSBwYWlyIHBvaW50cyB0by4KKyAgICAqIEBwYXJhbSBsZWFkIGxlYWQgc3Vycm9nYXRlCisgICAgKiBAcGFyYW0gdHJhaWwgdHJhaWxpbmcgc3Vycm9nYXRlCisgICAgKiBAcmV0dXJuIG9mZnNldCB0byBkYXRhCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldFN1cnJvZ2F0ZU9mZnNldChjaGFyIGxlYWQsIGNoYXIgdHJhaWwpCisgICAgeworICAgICAgICBpZiAobV9kYXRhTWFuaXB1bGF0ZV8gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZpZWxkIERhdGFNYW5pcHVsYXRlIGluIHRoaXMgVHJpZSBpcyBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gZ2V0IGZvbGQgcG9zaXRpb24gZm9yIHRoZSBuZXh0IHRyYWlsIHN1cnJvZ2F0ZQorICAgICAgICBpbnQgb2Zmc2V0ID0gbV9kYXRhTWFuaXB1bGF0ZV8uZ2V0Rm9sZGluZ09mZnNldChnZXRMZWFkVmFsdWUobGVhZCkpOworCisgICAgICAgIC8vIGdldCB0aGUgcmVhbCBkYXRhIGZyb20gdGhlIGZvbGRlZCBsZWFkL3RyYWlsIHVuaXRzCisgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0UmF3T2Zmc2V0KG9mZnNldCwgKGNoYXIpKHRyYWlsICYgU1VSUk9HQVRFX01BU0tfKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyByZXR1cm4gLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3IsIGluIHRoaXMgY2FzZSB3ZSByZXR1cm4gdGhlIGRlZmF1bHQKKyAgICAgICAgLy8gdmFsdWU6IG1faW5pdGlhbFZhbHVlXworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogR2V0cyB0aGUgdmFsdWUgYXQgdGhlIGFyZ3VtZW50IGluZGV4LgorICAgICogRm9yIHVzZSBpbnRlcm5hbGx5IGluIGNvbS5pYm0uaWN1LnV0aWwuVHJpZUVudW1lcmF0aW9uLgorICAgICogQHBhcmFtIGluZGV4IHZhbHVlIGF0IGluZGV4IHdpbGwgYmUgcmV0cmlldmVkCisgICAgKiBAcmV0dXJuIDMyIGJpdCB2YWx1ZQorICAgICogQHNlZSBjb20uaWJtLmljdS51dGlsLlRyaWVFbnVtZXJhdGlvbgorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRWYWx1ZShpbnQgaW5kZXgpCisgICAgeworICAgICAgcmV0dXJuIG1fZGF0YV9baW5kZXhdOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZQorICAgICogQHJldHVybiAzMiBiaXQgdmFsdWUgCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldEluaXRpYWxWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbml0aWFsVmFsdWVfOworICAgIH0KKworICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogSW50ZXJuYWwgY29uc3RydWN0b3IgZm9yIGJ1aWxkZXIgdXNlCisgICAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBhcnJheSB0byBiZSBzbG90dGVkIGludG8gdGhpcyB0cmllCisgICAgICogQHBhcmFtIGRhdGEgdGhlIGRhdGEgYXJyYXkgdG8gYmUgc2xvdHRlZCBpbnRvIHRoaXMgdHJpZQorICAgICAqIEBwYXJhbSBpbml0aWFsdmFsdWUgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoaXMgdHJpZQorICAgICAqIEBwYXJhbSBvcHRpb25zIHRyaWUgb3B0aW9ucyB0byB1c2UKKyAgICAgKiBAcGFyYW0gZGF0YW1hbmlwdWxhdGUgZm9sZGluZyBpbXBsZW1lbnRhdGlvbgorICAgICAqLworICAgIEludFRyaWUoY2hhciBpbmRleFtdLCBpbnQgZGF0YVtdLCBpbnQgaW5pdGlhbHZhbHVlLCBpbnQgb3B0aW9ucywKKyAgICAgICAgICAgIERhdGFNYW5pcHVsYXRlIGRhdGFtYW5pcHVsYXRlKQorICAgIHsKKyAgICAgICAgc3VwZXIoaW5kZXgsIG9wdGlvbnMsIGRhdGFtYW5pcHVsYXRlKTsKKyAgICAgICAgbV9pbmRleF8gPSBpbmRleDsKKyAgICAgICAgbV9kYXRhXyA9IGRhdGE7CisgICAgICAgIG1fZGF0YUxlbmd0aF8gPSBtX2RhdGFfLmxlbmd0aDsKKyAgICAgICAgbV9pbml0aWFsVmFsdWVfID0gaW5pdGlhbHZhbHVlOworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgKiBEZWZhdWx0IHZhbHVlCisgICAgKi8KKyAgICBwcml2YXRlIGludCBtX2luaXRpYWxWYWx1ZV87CisgICAgLyoqCisgICAgKiBBcnJheSBvZiBjaGFyIGRhdGEKKyAgICAqLworICAgIHByaXZhdGUgaW50IG1fZGF0YV9bXTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9JbnRUcmllQnVpbGRlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSW50VHJpZUJ1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTA4ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvSW50VHJpZUJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDUwOSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9JbnRUcmllQnVpbGRlci5qYXZhLHYgJCAKKyogJERhdGU6IDIwMDIvMTAvMzEgMDE6MDk6MTggJCAKKyogJFJldmlzaW9uOiAxLjMgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworLyoqCisgKiBCdWlsZGVyIGxhc3MgdG8gbWFuaXB1bGF0ZSBhbmQgZ2VuZXJhdGUgYSB0cmllLgorICogVGhpcyBpcyB1c2VmdWwgZm9yIElDVSBkYXRhIGluIHByaW1pdGl2ZSB0eXBlcy4KKyAqIFByb3ZpZGVzIGEgY29tcGFjdCB3YXkgdG8gc3RvcmUgaW5mb3JtYXRpb24gdGhhdCBpcyBpbmRleGVkIGJ5IFVuaWNvZGUgCisgKiB2YWx1ZXMsIHN1Y2ggYXMgY2hhcmFjdGVyIHByb3BlcnRpZXMsIHR5cGVzLCBrZXlib2FyZCB2YWx1ZXMsIGV0Yy4gVGhpcyBpcyAKKyAqIHZlcnkgdXNlZnVsIHdoZW4geW91IGhhdmUgYSBibG9jayBvZiBVbmljb2RlIGRhdGEgdGhhdCBjb250YWlucyBzaWduaWZpY2FudCAKKyAqIHZhbHVlcyB3aGlsZSB0aGUgcmVzdCBvZiB0aGUgVW5pY29kZSBkYXRhIGlzIHVudXNlZCBpbiB0aGUgYXBwbGljYXRpb24gb3IgCisgKiB3aGVuIHlvdSBoYXZlIGEgbG90IG9mIHJlZHVuZGFuY2UsIHN1Y2ggYXMgd2hlcmUgYWxsIDIxLDAwMCBIYW4gaWRlb2dyYXBocyAKKyAqIGhhdmUgdGhlIHNhbWUgdmFsdWUuICBIb3dldmVyLCBsb29rdXAgaXMgbXVjaCBmYXN0ZXIgdGhhbiBhIGhhc2ggdGFibGUuCisgKiBBIHRyaWUgb2YgYW55IHByaW1pdGl2ZSBkYXRhIHR5cGUgc2VydmVzIHR3byBwdXJwb3NlczoKKyAqIDxVTCB0eXBlID0gcm91bmQ+CisgKiAgICAgPExJPkZhc3QgYWNjZXNzIG9mIHRoZSBpbmRleGVkIHZhbHVlcy4KKyAqICAgICA8TEk+U21hbGxlciBtZW1vcnkgZm9vdHByaW50LgorICogPC9VTD4KKyAqIFRoaXMgaXMgYSBkaXJlY3QgcG9ydCBmcm9tIHRoZSBJQ1U0QyB2ZXJzaW9uCisgKiBAdmVyc2lvbiAgICAgICAgICAgICRSZXZpc2lvbjogMS4zICQKKyAqIEBhdXRob3IgICAgICAgICAgICAgU3luIFdlZSBRdWVrCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRUcmllQnVpbGRlciBleHRlbmRzIFRyaWVCdWlsZGVyCit7CisJLy8gcHVibGljIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJLyoqCisJICogQ29weSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBJbnRUcmllQnVpbGRlcihJbnRUcmllQnVpbGRlciB0YWJsZSkKKyAgICB7CisgICAgCXN1cGVyKHRhYmxlKTsKKwkJbV9kYXRhXyA9IG5ldyBpbnRbbV9kYXRhQ2FwYWNpdHlfXTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0YWJsZS5tX2RhdGFfLCAwLCBtX2RhdGFfLCAwLCBtX2RhdGFMZW5ndGhfKTsKKyAgICAgICAgbV9pbml0aWFsVmFsdWVfID0gdGFibGUubV9pbml0aWFsVmFsdWVfOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgYnVpbGQgdGFibGUKKyAgICAgKiBAcGFyYW0gYWxpYXNkYXRhIGRhdGEgdG8gYmUgZmlsbGVkIGludG8gdGFibGUKKyAgICAgKiBAcGFyYW0gbWF4ZGF0YWxlbmd0aCBtYXhpbXVtIGRhdGEgbGVuZ3RoIGFsbG93ZWQgaW4gdGFibGUKKyAgICAgKiBAcGFyYW0gaW5pdGlhbHZhbHVlIGluaXRhbCBkYXRhIHZhbHVlCisgICAgICogQHBhcmFtIGxhdGluMWxpbmVhciBpcyBsYXRpbiAxIHRvIGJlIGxpbmVhcgorICAgICAqIEByZXR1cm4gdXBkYXRlZCB0YWJsZQorICAgICAqLworICAgIHB1YmxpYyBJbnRUcmllQnVpbGRlcihpbnQgYWxpYXNkYXRhW10sIGludCBtYXhkYXRhbGVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluaXRpYWx2YWx1ZSwgYm9vbGVhbiBsYXRpbjFsaW5lYXIpIAorICAgIHsKKyAgICAJc3VwZXIoKTsKKyAgICAJaWYgKG1heGRhdGFsZW5ndGggPCBEQVRBX0JMT0NLX0xFTkdUSF8gfHwgKGxhdGluMWxpbmVhciAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1heGRhdGFsZW5ndGggPCAxMDI0KSkgeworCSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCBtYXhkYXRhbGVuZ3RoIGlzIHRvbyBzbWFsbCIpOworCSAgICB9CisJICAgIAorCSAgICBpZiAoYWxpYXNkYXRhICE9IG51bGwpIHsKKwkgICAgICAgIG1fZGF0YV8gPSBhbGlhc2RhdGE7CisJICAgIH0gCisJICAgIGVsc2UgeworCSAgICAgICAgbV9kYXRhXyA9IG5ldyBpbnRbbWF4ZGF0YWxlbmd0aF07CisJICAgIH0KKwkKKwkgICAgLy8gcHJlYWxsb2NhdGUgYW5kIHJlc2V0IHRoZSBmaXJzdCBkYXRhIGJsb2NrIChibG9jayBpbmRleCAwKQorCSAgICBpbnQgaiA9IERBVEFfQkxPQ0tfTEVOR1RIXzsKKwkKKwkgICAgaWYgKGxhdGluMWxpbmVhcikgeworCSAgICAgICAgLy8gcHJlYWxsb2NhdGUgYW5kIHJlc2V0IHRoZSBmaXJzdCBibG9jayAobnVtYmVyIDApIGFuZCBMYXRpbi0xIAorCSAgICAgICAgLy8gKFUrMDAwMC4uVSswMGZmKSBhZnRlciB0aGF0IG1hZGUgc3VyZSBhYm92ZSB0aGF0IAorCSAgICAgICAgLy8gbWF4RGF0YUxlbmd0aCA+PSAxMDI0CisJICAgICAgICAvLyBzZXQgaW5kZXhlcyB0byBwb2ludCB0byBjb25zZWN1dGl2ZSBkYXRhIGJsb2NrcworCSAgICAgICAgaW50IGkgPSAwOworCSAgICAgICAgZG8geworCSAgICAgICAgICAgIC8vIGRvIHRoaXMgYXQgbGVhc3QgZm9yIHRyaWUtPmluZGV4WzBdIGV2ZW4gaWYgdGhhdCBibG9jayBpcyAKKwkgICAgICAgICAgICAvLyBvbmx5IHBhcnRseSB1c2VkIGZvciBMYXRpbi0xCisJICAgICAgICAgICAgbV9pbmRleF9baSArK10gPSBqOworCSAgICAgICAgICAgIGogKz0gREFUQV9CTE9DS19MRU5HVEhfOworCSAgICAgICAgfSB3aGlsZSAoaSA8ICgyNTYgPj4gU0hJRlRfKSk7CisJICAgIH0KKwkKKyAgICAgICAgbV9kYXRhTGVuZ3RoXyA9IGo7CisJICAgIC8vIHJlc2V0IHRoZSBpbml0aWFsbHkgYWxsb2NhdGVkIGJsb2NrcyB0byB0aGUgaW5pdGlhbCB2YWx1ZQorICAgICAgICBBcnJheXMuZmlsbChtX2RhdGFfLCAwLCBtX2RhdGFMZW5ndGhfLCBpbml0aWFsdmFsdWUpOworCSAgICBtX2luaXRpYWxWYWx1ZV8gPSBpbml0aWFsdmFsdWU7CisJICAgIG1fZGF0YUNhcGFjaXR5XyA9IG1heGRhdGFsZW5ndGg7CisJICAgIG1faXNMYXRpbjFMaW5lYXJfID0gbGF0aW4xbGluZWFyOworCSAgICBtX2lzQ29tcGFjdGVkXyA9IGZhbHNlOworCX0KKworCS8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgCisgICAgLypwdWJsaWMgZmluYWwgdm9pZCBwcmludCgpCisgICAgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGludCBvbGR2YWx1ZSA9IG1faW5kZXhfW2ldOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluZGV4IGxlbmd0aCAiICsgbV9pbmRleExlbmd0aF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgd2hpbGUgKGkgPCBtX2luZGV4TGVuZ3RoXykgeworICAgICAgICAgICAgaWYgKG1faW5kZXhfW2ldICE9IG9sZHZhbHVlKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbmRleCBoYXMgIiArIGNvdW50ICsgIiBjb3VudHMgb2YgIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKG9sZHZhbHVlKSk7CisgICAgICAgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgICAgICAgIG9sZHZhbHVlID0gbV9pbmRleF9baV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgIGkgKys7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbmRleCBoYXMgIiArIGNvdW50ICsgIiBjb3VudHMgb2YgIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhvbGR2YWx1ZSkpOworICAgICAgICBpID0gMDsKKyAgICAgICAgb2xkdmFsdWUgPSBtX2RhdGFfW2ldOworICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGF0YSBsZW5ndGggIiArIG1fZGF0YUxlbmd0aF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgd2hpbGUgKGkgPCBtX2RhdGFMZW5ndGhfKSB7CisgICAgICAgICAgICBpZiAobV9kYXRhX1tpXSAhPSBvbGR2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICgob2xkdmFsdWUgJiAweGYxMDAwMDAwKSA9PSAweGYxMDAwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0ZW1wID0gb2xkdmFsdWUgJiAweGZmZmZmZjsgCisgICAgICAgICAgICAgICAgICAgIHRlbXAgKz0gMHgzMjA7CisgICAgICAgICAgICAgICAgICAgIG9sZHZhbHVlID0gMHhmMTAwMDAwMCB8IHRlbXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgob2xkdmFsdWUgJiAweGYyMDAwMDAwKSA9PSAweGYyMDAwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0ZW1wID0gb2xkdmFsdWUgJiAweGZmZmZmZjsgCisgICAgICAgICAgICAgICAgICAgIHRlbXAgKz0gMHgxNGE7CisgICAgICAgICAgICAgICAgICAgIG9sZHZhbHVlID0gMHhmMjAwMDAwMCB8IHRlbXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGF0YSBoYXMgIiArIGNvdW50ICsgIiBjb3VudHMgb2YgIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKG9sZHZhbHVlKSk7CisgICAgICAgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgICAgICAgIG9sZHZhbHVlID0gbV9kYXRhX1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICAgICAgaSArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG9sZHZhbHVlICYgMHhmMTAwMDAwMCkgPT0gMHhmMTAwMDAwMCkgeworICAgICAgICAgICAgaW50IHRlbXAgPSBvbGR2YWx1ZSAmIDB4ZmZmZmZmOyAKKyAgICAgICAgICAgIHRlbXAgKz0gMHgzMjA7CisgICAgICAgICAgICBvbGR2YWx1ZSA9IDB4ZjEwMDAwMDAgfCB0ZW1wOworICAgICAgICB9CisgICAgICAgIGlmICgob2xkdmFsdWUgJiAweGYyMDAwMDAwKSA9PSAweGYyMDAwMDAwKSB7CisgICAgICAgICAgICBpbnQgdGVtcCA9IG9sZHZhbHVlICYgMHhmZmZmZmY7IAorICAgICAgICAgICAgdGVtcCArPSAweDE0YTsKKyAgICAgICAgICAgIG9sZHZhbHVlID0gMHhmMjAwMDAwMCB8IHRlbXA7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkYXRhIGhhcyAiICsgY291bnQgKyAiIGNvdW50cyBvZiAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKG9sZHZhbHVlKSk7CisgICAgfQorICAgICovICAgCisgICAgLyoqCisgICAgICogR2V0cyBhIDMyIGJpdCBkYXRhIGZyb20gdGhlIHRhYmxlIGRhdGEKKyAgICAgKiBAcGFyYW0gY2ggY29kZXBvaW50IHdoaWNoIGRhdGEgaXMgdG8gYmUgcmV0cmlldmVkCisgICAgICogQHJldHVybiB0aGUgMzIgYml0IGRhdGEKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFZhbHVlKGludCBjaCkgCisgICAgeworICAgICAgICAvLyB2YWxpZCwgdW5jb21wYWN0ZWQgdHJpZSBhbmQgdmFsaWQgYz8KKyAgICAgICAgaWYgKG1faXNDb21wYWN0ZWRfIHx8IGNoID4gVUNoYXJhY3Rlci5NQVhfVkFMVUUgfHwgY2ggPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpbnQgYmxvY2sgPSBtX2luZGV4X1tjaCA+PiBTSElGVF9dOworICAgICAgICByZXR1cm4gbV9kYXRhX1tNYXRoLmFicyhibG9jaykgKyAoY2ggJiBNQVNLXyldOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgMzIgYml0IGRhdGEgaW4gdGhlIHRhYmxlIGRhdGEKKyAgICAgKiBAcGFyYW0gY2ggY29kZXBvaW50IHdoaWNoIGRhdGEgaXMgdG8gYmUgc2V0CisgICAgICogQHBhcmFtIHZhbHVlIHRvIHNldAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc2V0IGlzIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAKKyAgICAgKiAgICAgICAgICAgICAgaWYgdGhlIHRhYmxlIGhhcyBiZWVuIGNvbXBhY3RlZCByZXR1cm4gZmFsc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRWYWx1ZShpbnQgY2gsIGludCB2YWx1ZSkgCisgICAgeworICAgICAgICAvLyB2YWxpZCwgdW5jb21wYWN0ZWQgdHJpZSBhbmQgdmFsaWQgYz8gCisgICAgICAgIGlmIChtX2lzQ29tcGFjdGVkXyB8fCBjaCA+IFVDaGFyYWN0ZXIuTUFYX1ZBTFVFIHx8IGNoIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgCisgICAgICAgIGludCBibG9jayA9IGdldERhdGFCbG9jayhjaCk7CisgICAgICAgIGlmIChibG9jayA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBtX2RhdGFfW2Jsb2NrICsgKGNoICYgTUFTS18pXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgYnVpbGQgdGFibGUgd2l0aCAzMiBiaXQgZGF0YQorICAgICAqIEBwYXJhbSBkYXRhbWFuaXB1bGF0ZSBidWlsZGVyIHJhdyBmb2xkIG1ldGhvZCBpbXBsZW1lbnRhdGlvbgorICAgICAqIEBwYXJhbSB0cmllZGF0YW1hbmlwdWxhdGUgcmVzdWx0IHRyaWUgZm9sZCBtZXRob2QKKyAgICAgKiBAcmV0dXJuIGEgbmV3IHRyaWUKKyAgICAgKi8KKyAgICBwdWJsaWMgSW50VHJpZSBzZXJpYWxpemUoVHJpZUJ1aWxkZXIuRGF0YU1hbmlwdWxhdGUgZGF0YW1hbmlwdWxhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmllLkRhdGFNYW5pcHVsYXRlIHRyaWVkYXRhbWFuaXB1bGF0ZSkKKyAgICB7CisgICAgICAgIGlmIChkYXRhbWFuaXB1bGF0ZSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXJhbWV0ZXJzIGNhbiBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIC8vIGZvbGQgYW5kIGNvbXBhY3QgaWYgbmVjZXNzYXJ5LCBhbHNvIGNoZWNrcyB0aGF0IGluZGV4TGVuZ3RoIGlzIAorICAgICAgICAvLyB3aXRoaW4gbGltaXRzIAorICAgICAgICBpZiAoIW1faXNDb21wYWN0ZWRfKSB7CisgICAgICAgICAgICAvLyBjb21wYWN0IG9uY2Ugd2l0aG91dCBvdmVybGFwIHRvIGltcHJvdmUgZm9sZGluZworICAgICAgICAgICAgY29tcGFjdChmYWxzZSk7CisgICAgICAgICAgICAvLyBmb2xkIHRoZSBzdXBwbGVtZW50YXJ5IHBhcnQgb2YgdGhlIGluZGV4IGFycmF5CisgICAgICAgICAgICBmb2xkKGRhdGFtYW5pcHVsYXRlKTsKKyAgICAgICAgICAgIC8vIGNvbXBhY3QgYWdhaW4gd2l0aCBvdmVybGFwIGZvciBtaW5pbXVtIGRhdGEgYXJyYXkgbGVuZ3RoCisgICAgICAgICAgICBjb21wYWN0KHRydWUpOworICAgICAgICAgICAgbV9pc0NvbXBhY3RlZF8gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIGlzIGRhdGFMZW5ndGggd2l0aGluIGxpbWl0cz8gCisgICAgICAgIGlmIChtX2RhdGFMZW5ndGhfID49IE1BWF9EQVRBX0xFTkdUSF8pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkRhdGEgbGVuZ3RoIHRvbyBzbWFsbCIpOworICAgICAgICB9CisgICAgCisgICAgICAgIGNoYXIgaW5kZXhbXSA9IG5ldyBjaGFyW21faW5kZXhMZW5ndGhfXTsKKyAgICAgICAgaW50IGRhdGFbXSA9IG5ldyBpbnRbbV9kYXRhTGVuZ3RoX107CisgICAgICAgIC8vIHdyaXRlIHRoZSBpbmRleCAoc3RhZ2UgMSkgYXJyYXkgYW5kIHRoZSAzMi1iaXQgZGF0YSAoc3RhZ2UgMikgYXJyYXkKKyAgICAgICAgLy8gd3JpdGUgMTYtYml0IGluZGV4IHZhbHVlcyBzaGlmdGVkIHJpZ2h0IGJ5IElOREVYX1NISUZUXyAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2luZGV4TGVuZ3RoXzsgaSArKykgeworICAgICAgICAgICAgaW5kZXhbaV0gPSAoY2hhcikobV9pbmRleF9baV0gPj4+IElOREVYX1NISUZUXyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gd3JpdGUgMzItYml0IGRhdGEgdmFsdWVzCisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobV9kYXRhXywgMCwgZGF0YSwgMCwgbV9kYXRhTGVuZ3RoXyk7CisgICAgICAgIAorICAgICAgICBpbnQgb3B0aW9ucyA9IFNISUZUXyB8IChJTkRFWF9TSElGVF8gPDwgT1BUSU9OU19JTkRFWF9TSElGVF8pOworICAgICAgICBvcHRpb25zIHw9IE9QVElPTlNfREFUQV9JU18zMl9CSVRfOworICAgICAgICBpZiAobV9pc0xhdGluMUxpbmVhcl8pIHsKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gT1BUSU9OU19MQVRJTjFfSVNfTElORUFSXzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IEludFRyaWUoaW5kZXgsIGRhdGEsIG1faW5pdGlhbFZhbHVlXywgb3B0aW9ucywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmllZGF0YW1hbmlwdWxhdGUpOworICAgIH0KKyAgICAKKwkvLyBwdWJsaWMgZGF0YSBtZW1iZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCXByb3RlY3RlZCBpbnQgbV9kYXRhX1tdOworCXByb3RlY3RlZCBpbnQgbV9pbml0aWFsVmFsdWVfOyAgCisJCisJLy8gcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgCisgICAgLyoqCisgICAgICogTm8gZXJyb3IgY2hlY2tpbmcgZm9yIGlsbGVnYWwgYXJndW1lbnRzLgorICAgICAqIEBwYXJhbSBjaCBjb2RlcG9pbnQgdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJuIC0xIGlmIG5vIG5ldyBkYXRhIGJsb2NrIGF2YWlsYWJsZSAob3V0IG9mIG1lbW9yeSBpbiBkYXRhIGFycmF5KQorICAgICAqLworICAgIHByaXZhdGUgaW50IGdldERhdGFCbG9jayhpbnQgY2gpIAorICAgIHsKKyAgICAgICAgY2ggPj49IFNISUZUXzsKKyAgICAgICAgaW50IGluZGV4VmFsdWUgPSBtX2luZGV4X1tjaF07CisgICAgICAgIGlmIChpbmRleFZhbHVlID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4VmFsdWU7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gYWxsb2NhdGUgYSBuZXcgZGF0YSBibG9jaworICAgICAgICBpbnQgbmV3QmxvY2sgPSBtX2RhdGFMZW5ndGhfOworICAgICAgICBpbnQgbmV3VG9wID0gbmV3QmxvY2sgKyBEQVRBX0JMT0NLX0xFTkdUSF87CisgICAgICAgIGlmIChuZXdUb3AgPiBtX2RhdGFDYXBhY2l0eV8pIHsKKyAgICAgICAgICAgIC8vIG91dCBvZiBtZW1vcnkgaW4gdGhlIGRhdGEgYXJyYXkgCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbV9kYXRhTGVuZ3RoXyA9IG5ld1RvcDsKKyAgICAgICAgbV9pbmRleF9bY2hdID0gbmV3QmxvY2s7CisgICAgCisgICAgICAgIC8vIGNvcHktb24td3JpdGUgZm9yIGEgYmxvY2sgZnJvbSBhIHNldFJhbmdlKCkKKyAgICAgICAgQXJyYXlzLmZpbGwobV9kYXRhXywgbmV3QmxvY2ssIG5ld0Jsb2NrICsgREFUQV9CTE9DS19MRU5HVEhfLCAKKyAgICAgICAgICAgICAgICAgICAgbV9pbml0aWFsVmFsdWVfKTsKKyAgICAgICAgcmV0dXJuIG5ld0Jsb2NrOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb21wYWN0IGEgZm9sZGVkIGJ1aWxkLXRpbWUgdHJpZS4KKyAgICAgKiBUaGUgY29tcGFjdGlvbgorICAgICAqIC0gcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmUgaWRlbnRpY2FsIHdpdGggZWFybGllciBvbmVzCisgICAgICogLSBvdmVybGFwcyBhZGphY2VudCBibG9ja3MgYXMgbXVjaCBhcyBwb3NzaWJsZSAoaWYgb3ZlcmxhcCA9PSB0cnVlKQorICAgICAqIC0gbW92ZXMgYmxvY2tzIGluIHN0ZXBzIG9mIHRoZSBkYXRhIGdyYW51bGFyaXR5CisgICAgICoKKyAgICAgKiBJdCBkb2VzIG5vdAorICAgICAqIC0gdHJ5IHRvIG1vdmUgYW5kIG92ZXJsYXAgYmxvY2tzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGFkamFjZW50CisgICAgICogLSB0cnkgdG8gbW92ZSBhbmQgb3ZlcmxhcCBibG9ja3MgdGhhdCBvdmVybGFwIHdpdGggbXVsdGlwbGUgdmFsdWVzIGluIAorICAgICAqIHRoZSBvdmVybGFwIHJlZ2lvbgorICAgICAqIEBwYXJhbSBvdmVybGFwIGZsYWcKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgY29tcGFjdChib29sZWFuIG92ZXJsYXApIAorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb21wYWN0ZWRfKSB7CisgICAgICAgICAgICByZXR1cm47IC8vIG5vdGhpbmcgbGVmdCB0byBkbworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIGNvbXBhY3Rpb24KKyAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgaW5kZXggbWFwIHdpdGggImJsb2NrIGlzIHVzZWQvdW51c2VkIiBmbGFncworICAgICAgICBmaW5kVW51c2VkQmxvY2tzKCk7CisgICAgICAgIAorICAgICAgICAvLyBpZiBMYXRpbi0xIGlzIHByZWFsbG9jYXRlZCBhbmQgbGluZWFyLCB0aGVuIGRvIG5vdCBjb21wYWN0IExhdGluLTEgCisgICAgICAgIC8vIGRhdGEKKyAgICAgICAgaW50IG92ZXJsYXBTdGFydCA9IERBVEFfQkxPQ0tfTEVOR1RIXzsKKyAgICAgICAgaWYgKG1faXNMYXRpbjFMaW5lYXJfICYmIFNISUZUXyA8PSA4KSB7CisgICAgICAgICAgICBvdmVybGFwU3RhcnQgKz0gMjU2OworICAgICAgICB9CisgICAgICAgCisgICAgICAgIGludCBuZXdTdGFydCA9IERBVEFfQkxPQ0tfTEVOR1RIXzsKKyAgICAgICAgaW50IHByZXZFbmQgPSBuZXdTdGFydCAtIDE7CisgICAgICAgIGZvciAoaW50IHN0YXJ0ID0gbmV3U3RhcnQ7IHN0YXJ0IDwgbV9kYXRhTGVuZ3RoXzspIHsKKyAgICAgICAgICAgIC8vIHN0YXJ0OiBpbmRleCBvZiBmaXJzdCBlbnRyeSBvZiBjdXJyZW50IGJsb2NrCisgICAgICAgICAgICAvLyBwcmV2RW5kOiBpbmRleCB0byBsYXN0IGVudHJ5IG9mIHByZXZpb3VzIGJsb2NrCisgICAgICAgICAgICAvLyBuZXdTdGFydDogaW5kZXggd2hlcmUgdGhlIGN1cnJlbnQgYmxvY2sgaXMgdG8gYmUgbW92ZWQKKyAgICAgICAgICAgIC8vIHNraXAgYmxvY2tzIHRoYXQgYXJlIG5vdCB1c2VkIAorICAgICAgICAgICAgaWYgKG1fbWFwX1tzdGFydCA+PiBTSElGVF9dIDwgMCkgeworICAgICAgICAgICAgICAgIC8vIGFkdmFuY2Ugc3RhcnQgdG8gdGhlIG5leHQgYmxvY2sgCisgICAgICAgICAgICAgICAgc3RhcnQgKz0gREFUQV9CTE9DS19MRU5HVEhfOworICAgICAgICAgICAgICAgIC8vIGxlYXZlIHByZXZFbmQgYW5kIG5ld1N0YXJ0IHdpdGggdGhlIHByZXZpb3VzIGJsb2NrIQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gc2VhcmNoIGZvciBhbiBpZGVudGljYWwgYmxvY2sKKyAgICAgICAgICAgIGlmIChzdGFydCA+PSBvdmVybGFwU3RhcnQpIHsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IGZpbmRTYW1lRGF0YUJsb2NrKG1fZGF0YV8sIG5ld1N0YXJ0LCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcCA/IERBVEFfR1JBTlVMQVJJVFlfIDogREFUQV9CTE9DS19MRU5HVEhfKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGFuIGlkZW50aWNhbCBibG9jaywgc2V0IHRoZSBvdGhlciBibG9jaydzIGluZGV4IAorICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBfW3N0YXJ0ID4+IFNISUZUX10gPSBpOworICAgICAgICAgICAgICAgICAgICAvLyBhZHZhbmNlIHN0YXJ0IHRvIHRoZSBuZXh0IGJsb2NrCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICs9IERBVEFfQkxPQ0tfTEVOR1RIXzsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgcHJldkVuZCBhbmQgbmV3U3RhcnQgd2l0aCB0aGUgcHJldmlvdXMgYmxvY2shCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHNlZSBpZiB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgYmxvY2sgY2FuIGJlIG92ZXJsYXBwZWQgd2l0aCB0aGUgCisgICAgICAgICAgICAvLyBlbmQgb2YgdGhlIHByZXZpb3VzIGJsb2NrCisgICAgICAgICAgICAvLyB4OiBmaXJzdCB2YWx1ZSBpbiB0aGUgY3VycmVudCBibG9jayAKKyAgICAgICAgICAgIGludCB4ID0gbV9kYXRhX1tzdGFydF07CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBpZiAoeCA9PSBtX2RhdGFfW3ByZXZFbmRdICYmIG92ZXJsYXAgJiYgc3RhcnQgPj0gb3ZlcmxhcFN0YXJ0KSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBvdmVybGFwIGJ5IGF0IGxlYXN0IG9uZQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBEQVRBX0JMT0NLX0xFTkdUSF8gCisgICAgICAgICAgICAgICAgICAgICAmJiB4ID09IG1fZGF0YV9bc3RhcnQgKyBpXSAKKyAgICAgICAgICAgICAgICAgICAgICYmIHggPT0gbV9kYXRhX1twcmV2RW5kIC0gaV07ICsrIGkpIAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgICAgLy8gb3ZlcmxhcCBieSBpLCByb3VuZGVkIGRvd24gZm9yIHRoZSBkYXRhIGJsb2NrIGdyYW51bGFyaXR5CisgICAgICAgICAgICAgICAgaSAmPSB+KERBVEFfR1JBTlVMQVJJVFlfIC0gMSk7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gc29tZSBvdmVybGFwCisgICAgICAgICAgICAgICAgbV9tYXBfW3N0YXJ0ID4+IFNISUZUX10gPSBuZXdTdGFydCAtIGk7CisgICAgICAgICAgICAgICAgLy8gbW92ZSB0aGUgbm9uLW92ZXJsYXBwaW5nIGluZGV4ZXMgdG8gdGhlaXIgbmV3IHBvc2l0aW9ucworICAgICAgICAgICAgICAgIHN0YXJ0ICs9IGk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gREFUQV9CTE9DS19MRU5HVEhfIC0gaTsgaSA+IDA7IC0tIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kYXRhX1tuZXdTdGFydCArK10gPSBtX2RhdGFfW3N0YXJ0ICsrXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAobmV3U3RhcnQgPCBzdGFydCkgeworICAgICAgICAgICAgICAgIC8vIG5vIG92ZXJsYXAsIGp1c3QgbW92ZSB0aGUgaW5kZXhlcyB0byB0aGVpciBuZXcgcG9zaXRpb25zCisgICAgICAgICAgICAgICAgbV9tYXBfW3N0YXJ0ID4+IFNISUZUX10gPSBuZXdTdGFydDsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSBEQVRBX0JMT0NLX0xFTkdUSF87IGkgPiAwOyAtLSBpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZGF0YV9bbmV3U3RhcnQgKytdID0gbV9kYXRhX1tzdGFydCArK107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeyAvLyBubyBvdmVybGFwICYmIG5ld1N0YXJ0PT1zdGFydAorICAgICAgICAgICAgICAgIG1fbWFwX1tzdGFydCA+PiBTSElGVF9dID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgbmV3U3RhcnQgKz0gREFUQV9CTE9DS19MRU5HVEhfOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gbmV3U3RhcnQ7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBwcmV2RW5kID0gbmV3U3RhcnQgLSAxOworICAgICAgICB9CisgICAgICAgIC8vIG5vdyBhZGp1c3QgdGhlIGluZGV4IChzdGFnZSAxKSB0YWJsZQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faW5kZXhMZW5ndGhfOyArKyBpKSB7CisgICAgICAgICAgICBtX2luZGV4X1tpXSA9IG1fbWFwX1ttX2luZGV4X1tpXSA+Pj4gU0hJRlRfXTsKKyAgICAgICAgfQorICAgICAgICBtX2RhdGFMZW5ndGhfID0gbmV3U3RhcnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZCB0aGUgc2FtZSBkYXRhIGJsb2NrCisgICAgICogQHBhcmFtIGRhdGEgYXJyYXkKKyAgICAgKiBAcGFyYW0gZGF0YUxlbmd0aAorICAgICAqIEBwYXJhbSBvdGhlckJsb2NrCisgICAgICogQHBhcmFtIHN0ZXAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZmluZFNhbWVEYXRhQmxvY2soaW50IGRhdGFbXSwgaW50IGRhdGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3RoZXJCbG9jaywgaW50IHN0ZXApIAorICAgIHsKKyAgICAgICAgLy8gZW5zdXJlIHRoYXQgd2UgZG8gbm90IGV2ZW4gcGFydGlhbGx5IGdldCBwYXN0IGRhdGFMZW5ndGgKKyAgICAgICAgZGF0YUxlbmd0aCAtPSBEQVRBX0JMT0NLX0xFTkdUSF87CisKKyAgICAgICAgZm9yIChpbnQgYmxvY2sgPSAwOyBibG9jayA8PSBkYXRhTGVuZ3RoOyBibG9jayArPSBzdGVwKSB7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgREFUQV9CTE9DS19MRU5HVEhfOyArKyBpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGFbYmxvY2sgKyBpXSAhPSBkYXRhW290aGVyQmxvY2sgKyBpXSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA9PSBEQVRBX0JMT0NLX0xFTkdUSF8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBGb2xkIHRoZSBub3JtYWxpemF0aW9uIGRhdGEgZm9yIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMgaW50bworICAgICAqIGEgY29tcGFjdCBhcmVhIG9uIHRvcCBvZiB0aGUgQk1QLXBhcnQgb2YgdGhlIHRyaWUgaW5kZXgsCisgICAgICogd2l0aCB0aGUgbGVhZCBzdXJyb2dhdGVzIGluZGV4aW5nIHRoaXMgY29tcGFjdCBhcmVhLgorICAgICAqCisgICAgICogRHVwbGljYXRlIHRoZSBpbmRleCB2YWx1ZXMgZm9yIGxlYWQgc3Vycm9nYXRlczoKKyAgICAgKiBGcm9tIGluc2lkZSB0aGUgQk1QIGFyZWEsIHdoZXJlIHNvbWUgbWF5IGJlIG92ZXJyaWRkZW4gd2l0aCBmb2xkZWQgdmFsdWVzLAorICAgICAqIHRvIGp1c3QgYWZ0ZXIgdGhlIEJNUCBhcmVhLCB3aGVyZSB0aGV5IGNhbiBiZSByZXRyaWV2ZWQgZm9yCisgICAgICogY29kZSBwb2ludCBsb29rdXBzLgorICAgICAqIEBwYXJhbSBtYW5pcHVsYXRlIGZvbGQgaW1wbGVtZW50YXRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIHZvaWQgZm9sZChEYXRhTWFuaXB1bGF0ZSBtYW5pcHVsYXRlKSAKKyAgICB7CisgICAgICAgIGludCBsZWFkSW5kZXhlc1tdID0gbmV3IGludFtTVVJST0dBVEVfQkxPQ0tfQ09VTlRfXTsKKyAgICAgICAgaW50IGluZGV4W10gPSBtX2luZGV4XzsKKyAgICAgICAgLy8gY29weSB0aGUgbGVhZCBzdXJyb2dhdGUgaW5kZXhlcyBpbnRvIGEgdGVtcG9yYXJ5IGFycmF5CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoaW5kZXgsIDB4ZDgwMCA+PiBTSElGVF8sIGxlYWRJbmRleGVzLCAwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBTVVJST0dBVEVfQkxPQ0tfQ09VTlRfKTsKKyAgICAgICAgCisgICAgICAgIC8vIHRvIHByb3RlY3QgdGhlIGNvcGllZCBsZWFkIHN1cnJvZ2F0ZSB2YWx1ZXMsCisgICAgICAgIC8vIG1hcmsgYWxsIHRoZWlyIGluZGV4ZXMgYXMgcmVwZWF0IGJsb2NrcworICAgICAgICAvLyAoY2F1c2VzIGNvcHktb24td3JpdGUpCisgICAgICAgIGZvciAoY2hhciBjID0gMHhkODAwOyBjIDw9IDB4ZGJmZjsgKysgYykgeworICAgICAgICAgICAgaW50IGJsb2NrID0gaW5kZXhbYyA+PiBTSElGVF9dOworICAgICAgICAgICAgaWYgKGJsb2NrID4gMCkgeworICAgICAgICAgICAgICAgIGluZGV4W2MgPj4gU0hJRlRfXSA9LSBibG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAKKyAgICAgICAgLy8gRm9sZCBzaWduaWZpY2FudCBpbmRleCB2YWx1ZXMgaW50byB0aGUgYXJlYSBqdXN0IGFmdGVyIHRoZSBCTVAgCisgICAgICAgIC8vIGluZGV4ZXMuCisgICAgICAgIC8vIEluIGNhc2UgdGhlIGZpcnN0IGxlYWQgc3Vycm9nYXRlIGhhcyBzaWduaWZpY2FudCBkYXRhLAorICAgICAgICAvLyBpdHMgaW5kZXggYmxvY2sgbXVzdCBiZSB1c2VkIGZpcnN0IChpbiB3aGljaCBjYXNlIHRoZSBmb2xkaW5nIGlzIGEgCisgICAgICAgIC8vIG5vLW9wKS4KKyAgICAgICAgLy8gTGF0ZXIgYWxsIGZvbGRlZCBpbmRleCBibG9ja3MgYXJlIG1vdmVkIHVwIG9uZSB0byBpbnNlcnQgdGhlIGNvcGllZAorICAgICAgICAvLyBsZWFkIHN1cnJvZ2F0ZSBpbmRleGVzLgorICAgICAgICBpbnQgaW5kZXhMZW5ndGggPSBCTVBfSU5ERVhfTEVOR1RIXzsKKyAgICAgICAgLy8gc2VhcmNoIGZvciBhbnkgaW5kZXggKHN0YWdlIDEpIGVudHJpZXMgZm9yIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMgCisgICAgICAgIGZvciAoaW50IGMgPSAweDEwMDAwOyBjIDwgMHgxMTAwMDA7KSB7CisgICAgICAgICAgICBpZiAoaW5kZXhbYyA+PiBTSElGVF9dICE9IDApIHsKKyAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBkYXRhLCB0cmVhdCB0aGUgZnVsbCBibG9jayBmb3IgYSBsZWFkIHN1cnJvZ2F0ZQorICAgICAgICAgICAgICAgIGMgJj0gfjB4M2ZmOworICAgICAgICAgICAgICAgIC8vIGlzIHRoZXJlIGFuIGlkZW50aWNhbCBpbmRleCBibG9jaz8KKyAgICAgICAgICAgICAgICBpbnQgYmxvY2sgPSBmaW5kU2FtZUluZGV4QmxvY2soaW5kZXgsIGluZGV4TGVuZ3RoLCBjID4+IFNISUZUXyk7CisgICAgICAgICAgICAgICAgLy8gZ2V0IGEgZm9sZGVkIHZhbHVlIGZvciBbYy4uYysweDQwMFsgYW5kLCBpZiAwLCBzZXQgaXQgZm9yIAorICAgICAgICAgICAgICAgIC8vIHRoZSBsZWFkIHN1cnJvZ2F0ZSAKKyAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBtYW5pcHVsYXRlLmdldEZvbGRlZFZhbHVlKGMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgKyBTVVJST0dBVEVfQkxPQ0tfQ09VTlRfKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFZhbHVlKDB4ZDdjMCArIChjID4+IDEwKSwgdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIHRhYmxlIG92ZXJmbG93IAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGEgdGFibGUgb3ZlcmZsb3ciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkaWQgbm90IGZpbmQgYW4gaWRlbnRpY2FsIGluZGV4IGJsb2NrLi4uCisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jayA9PSBpbmRleExlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW92ZSB0aGUgYWN0dWFsIGluZGV4IChzdGFnZSAxKSBlbnRyaWVzIGZyb20gdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VwcGxlbWVudGFyeSBwb3NpdGlvbiB0byB0aGUgbmV3IG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShpbmRleCwgYyA+PiBTSElGVF8sIGluZGV4LCBpbmRleExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VSUk9HQVRFX0JMT0NLX0NPVU5UXyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleExlbmd0aCArPSBTVVJST0dBVEVfQkxPQ0tfQ09VTlRfOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGMgKz0gMHg0MDA7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYyArPSBEQVRBX0JMT0NLX0xFTkdUSF87CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIGluZGV4IGFycmF5IG92ZXJmbG93PworICAgICAgICAvLyBUaGlzIGlzIHRvIGd1YXJhbnRlZSB0aGF0IGEgZm9sZGluZyBvZmZzZXQgaXMgb2YgdGhlIGZvcm0KKyAgICAgICAgLy8gVVRSSUVfQk1QX0lOREVYX0xFTkdUSCtuKlVUUklFX1NVUlJPR0FURV9CTE9DS19DT1VOVCB3aXRoIG49MC4uMTAyMy4KKyAgICAgICAgLy8gSWYgdGhlIGluZGV4IGlzIHRvbyBsYXJnZSwgdGhlbiBuPj0xMDI0IGFuZCBtb3JlIHRoYW4gMTAgYml0cyBhcmUgCisgICAgICAgIC8vIG5lY2Vzc2FyeS4KKyAgICAgICAgLy8gSW4gZmFjdCwgaXQgY2FuIG9ubHkgZXZlciBiZWNvbWUgbj09MTAyNCB3aXRoIGNvbXBsZXRlbHkgdW5mb2xkYWJsZSAKKyAgICAgICAgLy8gZGF0YSBhbmQgdGhlIGFkZGl0aW9uYWwgYmxvY2sgb2YgZHVwbGljYXRlZCB2YWx1ZXMgZm9yIGxlYWQgCisgICAgICAgIC8vIHN1cnJvZ2F0ZXMuCisgICAgICAgIGlmIChpbmRleExlbmd0aCA+PSBNQVhfSU5ERVhfTEVOR1RIXykgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXggdGFibGUgb3ZlcmZsb3ciKTsKKyAgICAgICAgfQorICAgICAgICAvLyBtYWtlIHNwYWNlIGZvciB0aGUgbGVhZCBzdXJyb2dhdGUgaW5kZXggYmxvY2sgYW5kIGluc2VydCBpdCBiZXR3ZWVuIAorICAgICAgICAvLyB0aGUgQk1QIGluZGV4ZXMgYW5kIHRoZSBmb2xkZWQgb25lcworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGluZGV4LCBCTVBfSU5ERVhfTEVOR1RIXywgaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgIEJNUF9JTkRFWF9MRU5HVEhfICsgU1VSUk9HQVRFX0JMT0NLX0NPVU5UXywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleExlbmd0aCAtIEJNUF9JTkRFWF9MRU5HVEhfKTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShsZWFkSW5kZXhlcywgMCwgaW5kZXgsIEJNUF9JTkRFWF9MRU5HVEhfLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNVUlJPR0FURV9CTE9DS19DT1VOVF8pOworICAgICAgICBpbmRleExlbmd0aCArPSBTVVJST0dBVEVfQkxPQ0tfQ09VTlRfOworICAgICAgICBtX2luZGV4TGVuZ3RoXyA9IGluZGV4TGVuZ3RoOworICAgIH0KK30KKyAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9Mb2NhbGVVdGlsaXR5LmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9Mb2NhbGVVdGlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyNmUzYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL0xvY2FsZVV0aWxpdHkuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvTG9jYWxlVXRpbGl0eS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTAvMDIgMjA6MjA6MjEgJAorICogJFJldmlzaW9uOiAxLjYgJAorICogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyAKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogQSBjbGFzcyB0byBob2xkIHV0aWxpdHkgZnVuY3Rpb25zIG1pc3NpbmcgZnJvbSBqYXZhLnV0aWwuTG9jYWxlLgorICovCitwdWJsaWMgY2xhc3MgTG9jYWxlVXRpbGl0eSB7CisKKyAgICAvKioKKyAgICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgc3RyaW5nIG9mIHRoZSBmb3JtCisgICAgICogYWFfQkJfQ0MgdG8gYSBsb2NhbGUgb2JqZWN0LiAgV2h5IGlzbid0IHRoaXMgaW4gTG9jYWxlPworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTG9jYWxlIGdldExvY2FsZUZyb21OYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9ICIiOworICAgICAgICBTdHJpbmcgY291bnRyeSA9ICIiOworICAgICAgICBTdHJpbmcgdmFyaWFudCA9ICIiOworCisgICAgICAgIGludCBpMSA9IG5hbWUuaW5kZXhPZignXycpOworICAgICAgICBpZiAoaTEgPCAwKSB7CisgICAgICAgICAgICBsYW5ndWFnZSA9IG5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsYW5ndWFnZSA9IG5hbWUuc3Vic3RyaW5nKDAsIGkxKTsKKyAgICAgICAgICAgICsraTE7CisgICAgICAgICAgICBpbnQgaTIgPSBuYW1lLmluZGV4T2YoJ18nLCBpMSk7CisgICAgICAgICAgICBpZiAoaTIgPCAwKSB7CisgICAgICAgICAgICAgICAgY291bnRyeSA9IG5hbWUuc3Vic3RyaW5nKGkxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY291bnRyeSA9IG5hbWUuc3Vic3RyaW5nKGkxLCBpMik7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9IG5hbWUuc3Vic3RyaW5nKGkyKzEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBhcmUgdHdvIGxvY2FsZSBzdHJpbmdzIG9mIHRoZSBmb3JtIGFhX0JCX0NDLCBhbmQKKyAgICAgKiByZXR1cm4gdHJ1ZSBpZiBwYXJlbnQgaXMgYSAnc3RyaWN0JyBmYWxsYmFjayBvZiBjaGlsZCwgdGhhdCBpcywKKyAgICAgKiBpZiBjaGlsZCA9fiAiXnBhcmVudChfLispKiIgKHJvdWdobHkpLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ZhbGxiYWNrT2YoU3RyaW5nIHBhcmVudCwgU3RyaW5nIGNoaWxkKSB7CisgICAgICAgIGlmICghY2hpbGQuc3RhcnRzV2l0aChwYXJlbnQpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaW50IGkgPSBwYXJlbnQubGVuZ3RoKCk7CisgICAgICAgIHJldHVybiAoaSA9PSBjaGlsZC5sZW5ndGgoKSB8fAorICAgICAgICAgICAgICAgIGNoaWxkLmNoYXJBdChpKSA9PSAnXycpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBhcmUgdHdvIGxvY2FsZXMsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyZW50IGlzIGEKKyAgICAgKiAnc3RyaWN0JyBmYWxsYmFjayBvZiB0aGUgY2hpbGQgKHBhcmVudCBzdHJpbmcgaXMgYSBmYWxsYmFjaworICAgICAqIG9mIGNoaWxkIHN0cmluZykuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRmFsbGJhY2tPZihMb2NhbGUgcGFyZW50LCBMb2NhbGUgY2hpbGQpIHsKKyAgICAgICAgcmV0dXJuIGlzRmFsbGJhY2tPZihwYXJlbnQudG9TdHJpbmcoKSwgY2hpbGQudG9TdHJpbmcoKSk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjYWxscyBjYW5vbmljYWxMb2NhbGVTdHJpbmcoU3RyaW5nKSB3aXRoCisgICAgICogbG9jYWxlLnRvU3RyaW5nKCk7CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2Fub25pY2FsTG9jYWxlU3RyaW5nKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIGNhbm9uaWNhbExvY2FsZVN0cmluZyhsb2NhbGUudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogWW91J2QgdGhpbmsgdGhhdCBMb2NhbGUgY2Fub25pY2FsaXplcywgc2luY2UgaXQgbXVuZ2VzIHRoZQorICAgICAqIHJlbmFtZWQgbGFuZ3VhZ2VzLCBidXQgaXQgZG9lc24ndCBxdWl0ZS4gIEl0IGZvcmNlcyB0aGUgcmVnaW9uCisgICAgICogdG8gYmUgdXBwZXIgY2FzZSBidXQgZG9lc24ndCBkbyBhbnl0aGluZyBhYm91dCB0aGUgbGFuZ3VhZ2Ugb3IKKyAgICAgKiB2YXJpYW50LiAgT3VyIGNhbm9uaWNhbCBmb3JtIGlzICdsb3dlcl9VUFBFUl9VUFBFUicuICAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBjYW5vbmljYWxMb2NhbGVTdHJpbmcoU3RyaW5nIGlkKSB7CisJaWYgKGlkICE9IG51bGwpIHsKKwkgICAgaW50IHggPSBpZC5pbmRleE9mKCJfIik7CisJICAgIGlmICh4ID09IC0xKSB7CisJCWlkID0gaWQudG9Mb3dlckNhc2UoTG9jYWxlLkVOR0xJU0gpOworCSAgICB9IGVsc2UgeworCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlidWYuYXBwZW5kKGlkLnN1YnN0cmluZygwLCB4KS50b0xvd2VyQ2FzZShMb2NhbGUuRU5HTElTSCkpOworCQlidWYuYXBwZW5kKGlkLnN1YnN0cmluZyh4KS50b1VwcGVyQ2FzZShMb2NhbGUuRU5HTElTSCkpOworCQkgICAgCisJCWludCBsZW4gPSBidWYubGVuZ3RoKCk7CisJCWludCBuID0gbGVuOworCQl3aGlsZSAoLS1uID49IDAgJiYgYnVmLmNoYXJBdChuKSA9PSAnXycpIHt9OworCQlpZiAoKytuICE9IGxlbikgeworCQkgICAgYnVmLmRlbGV0ZShuLCBsZW4pOworCQl9CisJCWlkID0gYnVmLnRvU3RyaW5nKCk7CisJICAgIH0KKwl9CisJcmV0dXJuIGlkOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL05vcm1hbGl6ZXJEYXRhUmVhZGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9Ob3JtYWxpemVyRGF0YVJlYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTc2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9Ob3JtYWxpemVyRGF0YVJlYWRlci5qYXZhCkBAIC0wLDAgKzEsNDMwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9Ob3JtYWxpemVyRGF0YVJlYWRlci5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTEvMTUgMjE6MDQ6MTkgJAorICogJFJldmlzaW9uOiAxLjkgJAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVURlYnVnOworCisvKioKKyAqIEB2ZXJzaW9uIAkxLjAKKyAqIEBhdXRob3IJCVJhbSBWaXN3YW5hZGhhCisgKi8KKworCS8qCisJICogRGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCBvZiB1bm9ybS5pY3UgdmVyc2lvbiAyLjEuCisJICoKKwkgKiBNYWluIGNoYW5nZSBmcm9tIHZlcnNpb24gMSB0byB2ZXJzaW9uIDI6CisJICogVXNlIG9mIG5ldywgY29tbW9uIFRyaWUgaW5zdGVhZCBvZiBub3JtYWxpemF0aW9uLXNwZWNpZmljIHRyaWVzLgorCSAqIENoYW5nZSB0byB2ZXJzaW9uIDIuMTogYWRkIHRoaXJkL2F1eGlsaWFyeSB0cmllIHdpdGggYXNzb2NpYXRlZCBkYXRhLgorCSAqCisJICogRm9yIG1vcmUgZGV0YWlscyBvZiBob3cgdG8gdXNlIHRoZSBkYXRhIHN0cnVjdHVyZXMgc2VlIHRoZSBjb2RlCisJICogaW4gdW5vcm0uY3BwIChydW50aW1lIG5vcm1hbGl6YXRpb24gY29kZSkgYW5kCisJICogaW4gZ2Vubm9ybS5jIGFuZCBnZW5ub3JtL3N0b3JlLmMgKGJ1aWxkLXRpbWUgZGF0YSBnZW5lcmF0aW9uKS4KKwkgKgorCSAqIEZvciB0aGUgc2VyaWFsaXplZCBmb3JtYXQgb2YgVHJpZSBzZWUgVHJpZS5jL1RyaWVIZWFkZXIuCisJICoKKwkgKiAtIE92ZXJhbGwgcGFydGl0aW9uCisJICoKKwkgKiB1bm9ybS5pY3UgY3VzdG9tYXJpbHkgYmVnaW5zIHdpdGggYSBVRGF0YUluZm8gc3RydWN0dXJlLCBzZWUgdWRhdGEuaCBhbmQgLmMuCisJICogQWZ0ZXIgdGhhdCB0aGVyZSBhcmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzOgorCSAqCisJICogY2hhciBpbmRleGVzW0lOREVYX1RPUF07ICAgICAgICAgICAJCS0tIElOREVYX1RPUD0zMiwgc2VlIGVudW0gaW4gdGhpcyBmaWxlCisJICoKKwkgKiBUcmllIG5vcm1UcmllOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHNpemUgaW4gYnl0ZXM9aW5kZXhlc1tJTkRFWF9UUklFX1NJWkVdCisJICogCisJICogY2hhciBleHRyYURhdGFbZXh0cmFEYXRhVG9wXTsgICAgICAgICAgICAtLSBleHRyYURhdGFUb3A9aW5kZXhlc1tJTkRFWF9VQ0hBUl9DT1VOVF0KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYURhdGFbMF0gY29udGFpbnMgdGhlIG51bWJlciBvZiB1bml0cyBmb3IKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQ19ORktDX0Nsb3N1cmUgKGZvcm1hdFZlcnNpb24+PTIuMSkKKwkgKgorCSAqIGNoYXIgY29tYmluaW5nVGFibGVbY29tYmluaW5nVGFibGVUb3BdOyAgLS0gY29tYmluaW5nVGFibGVUb3A9aW5kZXhlc1tJTkRFWF9DT01CSU5FX0RBVEFfQ09VTlRdCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluaW5nVGFibGVUb3AgbWF5IGluY2x1ZGUgb25lIDE2LWJpdCBwYWRkaW5nIHVuaXQKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBtYWtlIHN1cmUgdGhhdCBmY2RUcmllIGlzIDMyLWJpdC1hbGlnbmVkCisJICoKKwkgKiBUcmllIGZjZFRyaWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHNpemUgaW4gYnl0ZXM9aW5kZXhlc1tJTkRFWF9GQ0RfVFJJRV9TSVpFXQorCSAqCisJICogVHJpZSBhdXhUcmllOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBzaXplIGluIGJ5dGVzPWluZGV4ZXNbSU5ERVhfQVVYX1RSSUVfU0laRV0KKwkgKgorCSAqIGNoYXIgY2Fub25TdGFydFNldHNbY2Fub25TdGFydFNldHNUb3BdICAgLS0gY2Fub25TdGFydFNldHNUb3A9aW5kZXhlc1tJTkRFWF9DQU5PTl9TRVRfQ09VTlRdCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCBVU2V0cywgc2VlIHVzZXQuYworCSAqCisJICoKKwkgKiBUaGUgaW5kZXhlcyBhcnJheSBjb250YWlucyBsZW5ndGhzIGFuZCBzaXplcyBvZiB0aGUgZm9sbG93aW5nIGFycmF5cyBhbmQgc3RydWN0dXJlcworCSAqIGFzIHdlbGwgYXMgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisJICogIGluZGV4ZXNbSU5ERVhfQ09NQklORV9GV0RfQ09VTlRdPWNvbWJpbmVGd2RUb3AKKwkgKiAgICAgIC0tIG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3QgY29tYmluaW5nIGluZGV4IGNvbXB1dGVkIGZvciBmb3J3YXJkLW9ubHktY29tYmluaW5nIGNoYXJhY3RlcnMKKwkgKiAgaW5kZXhlc1tJTkRFWF9DT01CSU5FX0JPVEhfQ09VTlRdPWNvbWJpbmVCb3RoVG9wLWNvbWJpbmVGd2RUb3AKKwkgKiAgICAgIC0tIG51bWJlciBvZiBjb21iaW5pbmcgaW5kZXhlcyBjb21wdXRlZCBmb3IgYm90aC13YXlzLWNvbWJpbmluZyBjaGFyYWN0ZXJzCisJICogIGluZGV4ZXNbSU5ERVhfQ09NQklORV9CQUNLX0NPVU5UXT1jb21iaW5lQmFja1RvcC1jb21iaW5lQm90aFRvcAorCSAqICAgICAgLS0gbnVtYmVyIG9mIGNvbWJpbmluZyBpbmRleGVzIGNvbXB1dGVkIGZvciBiYWNrd2FyZC1vbmx5LWNvbWJpbmluZyBjaGFyYWN0ZXJzCisJICoKKwkgKiAgaW5kZXhlc1tJTkRFWF9NSU5fTkYqX05PX01BWUJFXSAod2hlcmUgKj17IEMsIEQsIEtDLCBLRCB9KQorCSAqICAgICAgLS0gZmlyc3QgY29kZSBwb2ludCB3aXRoIGEgcXVpY2sgY2hlY2sgTkYqIHZhbHVlIG9mIE5PL01BWUJFCisJICoKKwkgKgorCSAqIC0gVHJpZXMKKwkgKgorCSAqIFRoZSBtYWluIHN0cnVjdHVyZXMgYXJlIHR3byBUcmllIHRhYmxlcyAoImNvbXBhY3QgYXJyYXlzIiksCisJICogZWFjaCB3aXRoIG9uZSBpbmRleCBhcnJheSBhbmQgb25lIGRhdGEgYXJyYXkuCisJICogU2VlIFRyaWUuaCBhbmQgVHJpZS5jLgorCSAqCisJICoKKwkgKiAtIFRyaWVzIGluIHVub3JtLmljdQorCSAqCisJICogVGhlIGZpcnN0IHRyaWUgKG5vcm1UcmllIGFib3ZlKQorCSAqIHByb3ZpZGVzIGRhdGEgZm9yIHRoZSBORiogcXVpY2sgY2hlY2tzIGFuZCBub3JtYWxpemF0aW9uLgorCSAqIFRoZSBzZWNvbmQgdHJpZSAoZmNkVHJpZSBhYm92ZSkgcHJvdmlkZXMgZGF0YSBqdXN0IGZvciBGQ0QgY2hlY2tzLgorCSAqCisJICoKKwkgKiAtIG5vcm0zMiBkYXRhIHdvcmRzIGZyb20gdGhlIGZpcnN0IHRyaWUKKwkgKgorCSAqIFRoZSBub3JtMzJUYWJsZSBjb250YWlucyBvbmUgMzItYml0IHdvcmQgIm5vcm0zMiIgcGVyIGNvZGUgcG9pbnQuCisJICogSXQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBiaXQgZmllbGRzOgorCSAqIDMxLi4xNiAgIGV4dHJhIGRhdGEgaW5kZXgsIEVYVFJBX1NISUZUIGlzIHVzZWQgdG8gc2hpZnQgdGhpcyBmaWVsZCBkb3duCisJICogICAgICAgICAgaWYgdGhpcyBpbmRleCBpcyA8RVhUUkFfSU5ERVhfVE9QIHRoZW4gaXQgaXMgYW4gaW5kZXggaW50bworCSAqICAgICAgICAgICAgICBleHRyYURhdGFbXSB3aGVyZSB2YXJpYWJsZS1sZW5ndGggbm9ybWFsaXphdGlvbiBkYXRhIGZvciB0aGlzCisJICogICAgICAgICAgICAgIGNvZGUgcG9pbnQgaXMgZm91bmQKKwkgKiAgICAgICAgICBpZiB0aGlzIGluZGV4IGlzIDxFWFRSQV9JTkRFWF9UT1ArRVhUUkFfU1VSUk9HQVRFX1RPUAorCSAqICAgICAgICAgICAgICB0aGVuIHRoaXMgaXMgYSBub3JtMzIgZm9yIGEgbGVhZGluZyBzdXJyb2dhdGUsIGFuZCB0aGUgaW5kZXgKKwkgKiAgICAgICAgICAgICAgdmFsdWUgaXMgdXNlZCB0b2dldGhlciB3aXRoIHRoZSBmb2xsb3dpbmcgdHJhaWxpbmcgc3Vycm9nYXRlCisJICogICAgICAgICAgICAgIGNvZGUgdW5pdCBpbiB0aGUgc2Vjb25kIHRyaWUgYWNjZXNzCisJICogICAgICAgICAgaWYgdGhpcyBpbmRleCBpcyA+PUVYVFJBX0lOREVYX1RPUCtFWFRSQV9TVVJST0dBVEVfVE9QCisJICogICAgICAgICAgICAgIHRoZW4gdGhpcyBpcyBhIG5vcm0zMiBmb3IgYSAic3BlY2lhbCIgY2hhcmFjdGVyLAorCSAqICAgICAgICAgICAgICBpLmUuLCB0aGUgY2hhcmFjdGVyIGlzIGEgSGFuZ3VsIHN5bGxhYmxlIG9yIGEgSmFtbworCSAqICAgICAgICAgICAgICBzZWUgRVhUUkFfSEFOR1VMIGV0Yy4KKwkgKiAgICAgICAgICBnZW5lcmFsbHksIGluc3RlYWQgb2YgZXh0cmFjdGluZyB0aGlzIGluZGV4IGZyb20gdGhlIG5vcm0zMiBhbmQKKwkgKiAgICAgICAgICAgICAgY29tcGFyaW5nIGl0IHdpdGggdGhlIGFib3ZlIGNvbnN0YW50cywKKwkgKiAgICAgICAgICAgICAgdGhlIG5vcm1hbGl6YXRpb24gY29kZSBjb21wYXJlcyB0aGUgZW50aXJlIG5vcm0zMiB2YWx1ZQorCSAqICAgICAgICAgICAgICB3aXRoIE1JTl9TUEVDSUFMLCBTVVJST0dBVEVTX1RPUCwgTUlOX0hBTkdVTCBldGMuCisJICoKKwkgKiAxNS4uOCAgICBjb21iaW5pbmcgY2xhc3MgKGNjKSBhY2NvcmRpbmcgdG8gVW5pY29kZURhdGEudHh0CisJICoKKwkgKiAgNy4uNiAgICBDT01CSU5FU19BTlkgZmxhZ3MsIHVzZWQgaW4gY29tcG9zaXRpb24gdG8gc2VlIGlmIGEgY2hhcmFjdGVyCisJICogICAgICAgICAgICAgIGNvbWJpbmVzIHdpdGggYW55IGZvbGxvd2luZyBvciBwcmVjZWRpbmcgY2hhcmFjdGVyKHMpCisJICogICAgICAgICAgICAgIGF0IGFsbAorCSAqICAgICA3ICAgIENPTUJJTkVTX0JBQ0sKKwkgKiAgICAgNiAgICBDT01CSU5FU19GV0QKKwkgKgorCSAqICA1Li4wICAgIHF1aWNrIGNoZWNrIGZsYWdzLCBzZXQgZm9yICJubyIgb3IgIm1heWJlIiwgd2l0aCBzZXBhcmF0ZSBmbGFncyBmb3IKKwkgKiAgICAgICAgICAgICAgZWFjaCBub3JtYWxpemF0aW9uIGZvcm0KKwkgKiAgICAgICAgICAgICAgdGhlIGhpZ2hlciBiaXRzIGFyZSAibWF5YmUiIGZsYWdzOyBmb3IgTkYqRCB0aGVyZSBhcmUgbm8gc3VjaCBmbGFncworCSAqICAgICAgICAgICAgICB0aGUgbG93ZXIgYml0cyBhcmUgIm5vIiBmbGFncyBmb3IgYWxsIGZvcm1zLCBpbiB0aGUgc2FtZSBvcmRlcgorCSAqICAgICAgICAgICAgICBhcyB0aGUgIm1heWJlIiBmbGFncywKKwkgKiAgICAgICAgICAgICAgd2hpY2ggaXMgKE1TQiB0byBMU0IpOiBORktEIE5GRCBORktDIE5GQworCSAqICA1Li40ICAgIFFDX0FOWV9NQVlCRQorCSAqICAzLi4wICAgIFFDX0FOWV9OTworCSAqICAgICAgICAgICAgICBzZWUgZnVydGhlciByZWxhdGVkIGNvbnN0YW50cworCSAqCisJICoKKwkgKiAtIEV4dHJhIGRhdGEgcGVyIGNvZGUgcG9pbnQKKwkgKgorCSAqICJFeHRyYSBkYXRhIiBpcyByZWZlcmVuY2VkIGJ5IHRoZSBpbmRleCBpbiBub3JtMzIuCisJICogSXQgaXMgdmFyaWFibGUtbGVuZ3RoIGRhdGEuIEl0IGlzIG9ubHkgcHJlc2VudCwgYW5kIG9ubHkgdGhvc2UgcGFydHMKKwkgKiBvZiBpdCBhcmUsIGFzIG5lZWRlZCBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIuCisJICogVGhlIG5vcm0zMiBleHRyYSBkYXRhIGluZGV4IGlzIGFkZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgZXh0cmFEYXRhW10KKwkgKiB0byBnZXQgdG8gYSB2ZWN0b3Igb2YgMTYtYml0IHdvcmRzIHdpdGggZGF0YSBhdCB0aGUgZm9sbG93aW5nIG9mZnNldHM6CisJICoKKwkgKiBbLTFdICAgICBDb21iaW5pbmcgaW5kZXggZm9yIGNvbXBvc2l0aW9uLgorCSAqICAgICAgICAgICAgICBTdG9yZWQgb25seSBpZiBub3JtMzImQ09NQklORVNfQU5ZIC4KKwkgKiBbMF0gICAgICBMZW5ndGhzIG9mIHRoZSBjYW5vbmljYWwgYW5kIGNvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbiBzdHJpbmdzLgorCSAqICAgICAgICAgICAgICBTdG9yZWQgb25seSBpZiB0aGVyZSBhcmUgZGVjb21wb3NpdGlvbnMsIGkuZS4sCisJICogICAgICAgICAgICAgIGlmIG5vcm0zMiYoUUNfTkZEfFFDX05GS0QpCisJICogICAgICAgICAgSGlnaCBieXRlOiBsZW5ndGggb2YgTkZLRCwgb3IgMCBpZiBub25lCisJICogICAgICAgICAgTG93IGJ5dGU6IGxlbmd0aCBvZiBORkQsIG9yIDAgaWYgbm9uZQorCSAqICAgICAgICAgIEVhY2ggbGVuZ3RoIGJ5dGUgYWxzbyBoYXMgYW5vdGhlciBmbGFnOgorCSAqICAgICAgICAgICAgICBCaXQgNyBvZiBhIGxlbmd0aCBieXRlIGlzIHNldCBpZiB0aGVyZSBhcmUgbm9uLXplcm8KKwkgKiAgICAgICAgICAgICAgY29tYmluaW5nIGNsYXNzZXMgKGNjJ3MpIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZQorCSAqICAgICAgICAgICAgICBkZWNvbXBvc2l0aW9uLiBJZiB0aGlzIGZsYWcgaXMgc2V0LCB0aGVuIHRoZSBkZWNvbXBvc2l0aW9uCisJICogICAgICAgICAgICAgIGlzIHByZWNlZGVkIGJ5IGEgMTYtYml0IHdvcmQgdGhhdCBjb250YWlucyB0aGUKKwkgKiAgICAgICAgICAgICAgbGVhZGluZyBhbmQgdHJhaWxpbmcgY2Mncy4KKwkgKiAgICAgICAgICAgICAgQml0cyA2Li4wIG9mIGEgbGVuZ3RoIGJ5dGUgYXJlIHRoZSBsZW5ndGggb2YgdGhlCisJICogICAgICAgICAgICAgIGRlY29tcG9zaXRpb24gc3RyaW5nLCBub3QgY291bnRpbmcgdGhlIGNjIHdvcmQuCisJICogWzEuLm5dICAgTkZECisJICogW24rMS4uXSAgTkZLRAorCSAqCisJICogRWFjaCBvZiB0aGUgdHdvIGRlY29tcG9zaXRpb25zIGNvbnNpc3RzIG9mIHVwIHRvIHR3byBwYXJ0czoKKwkgKiAtIFRoZSAxNi1iaXQgd29yZHMgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgY2Mncy4KKwkgKiAgIFRoaXMgaXMgb25seSBzdG9yZWQgaWYgYml0IDcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbGVuZ3RoIGJ5dGUKKwkgKiAgIGlzIHNldC4gSW4gdGhpcyBjYXNlLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGNjJ3MgaXMgbm90IHplcm8uCisJICogICBIaWdoIGJ5dGU6IGxlYWRpbmcgY2M9PWNjIG9mIHRoZSBmaXJzdCBjb2RlIHBvaW50IGluIHRoZSBkZWNvbXBvc2l0aW9uIHN0cmluZworCSAqICAgTG93IGJ5dGU6IHRyYWlsaW5nIGNjPT1jYyBvZiB0aGUgbGFzdCBjb2RlIHBvaW50IGluIHRoZSBkZWNvbXBvc2l0aW9uIHN0cmluZworCSAqIC0gVGhlIGRlY29tcG9zaXRpb24gc3RyaW5nIGluIFVURi0xNiwgd2l0aCBsZW5ndGggY29kZSB1bml0cy4KKwkgKgorCSAqCisJICogLSBDb21iaW5pbmcgaW5kZXhlcyBhbmQgY29tYmluaW5nVGFibGVbXQorCSAqCisJICogQ29tYmluaW5nIGluZGV4ZXMgYXJlIHN0b3JlZCBhdCB0aGUgWy0xXSBvZmZzZXQgb2YgdGhlIGV4dHJhIGRhdGEKKwkgKiBpZiB0aGUgY2hhcmFjdGVyIGNvbWJpbmVzIGZvcndhcmQgb3IgYmFja3dhcmQgd2l0aCBhbnkgb3RoZXIgY2hhcmFjdGVycy4KKwkgKiBUaGV5IGFyZSB1c2VkIGZvciAocmUpY29tcG9zaXRpb24gaW4gTkYqQy4KKwkgKiBWYWx1ZXMgb2YgY29tYmluaW5nIGluZGV4ZXMgYXJlIGFycmFuZ2VkIGFjY29yZGluZyB0byB3aGV0aGVyIGEgY2hhcmFjdGVyCisJICogY29tYmluZXMgZm9yd2FyZCwgYmFja3dhcmQsIG9yIGJvdGggd2F5czoKKwkgKiAgICBmb3J3YXJkLW9ubHkgPCBib3RoIHdheXMgPCBiYWNrd2FyZC1vbmx5CisJICoKKwkgKiBUaGUgaW5kZXggdmFsdWVzIGZvciBmb3J3YXJkLW9ubHkgYW5kIGJvdGgtd2F5cyBjb21iaW5pbmcgY2hhcmFjdGVycworCSAqIGFyZSBpbmRleGVzIGludG8gdGhlIGNvbWJpbmluZ1RhYmxlW10uCisJICogVGhlIGluZGV4IHZhbHVlcyBmb3IgYmFja3dhcmQtb25seSBjb21iaW5pbmcgY2hhcmFjdGVycyBhcmUgc2ltcGx5CisJICogaW5jcmVtZW50ZWQgZnJvbSB0aGUgcHJlY2VkaW5nIGluZGV4IHZhbHVlcyB0byBiZSB1bmlxdWUuCisJICoKKwkgKiBJbiB0aGUgY29tYmluaW5nVGFibGVbXSwgYSB2YXJpYWJsZS1sZW5ndGggbGlzdAorCSAqIG9mIHZhcmlhYmxlLWxlbmd0aCAoYmFjay1pbmRleCwgY29kZSBwb2ludCkgcGFpciBlbnRyaWVzIGlzIHN0b3JlZAorCSAqIGZvciBlYWNoIGZvcndhcmQtY29tYmluaW5nIGNoYXJhY3Rlci4KKwkgKgorCSAqIFRoZXNlIGJhY2staW5kZXhlcyBhcmUgdGhlIGNvbWJpbmluZyBpbmRleGVzIG9mIGJvdGgtd2F5cyBvciBiYWNrd2FyZC1vbmx5CisJICogY29tYmluaW5nIGNoYXJhY3RlcnMgdGhhdCB0aGUgZm9yd2FyZC1jb21iaW5pbmcgY2hhcmFjdGVyIGNvbWJpbmVzIHdpdGguCisJICoKKwkgKiBFYWNoIGxpc3QgaXMgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBvZiBiYWNrLWluZGV4ZXMuCisJICogRWFjaCBsaXN0IGlzIHRlcm1pbmF0ZWQgd2l0aCB0aGUgbGFzdCBiYWNrLWluZGV4IGhhdmluZyBiaXQgMTUgc2V0LgorCSAqCisJICogRWFjaCBwYWlyIChiYWNrLWluZGV4LCBjb2RlIHBvaW50KSB0YWtlcyB1cCBlaXRoZXIgMiBvciAzCisJICogMTYtYml0IHdvcmRzLgorCSAqIFRoZSBmaXJzdCB3b3JkIG9mIGEgbGlzdCBlbnRyeSBpcyB0aGUgYmFjay1pbmRleCwgd2l0aCBpdHMgYml0IDE1IHNldCBpZgorCSAqIHRoaXMgaXMgdGhlIGxhc3QgcGFpciBpbiB0aGUgbGlzdC4KKwkgKgorCSAqIFRoZSBzZWNvbmQgd29yZCBjb250YWlucyBmbGFncyBpbiBiaXRzIDE1Li4xMyB0aGF0IGRldGVybWluZQorCSAqIGlmIHRoZXJlIGlzIGEgdGhpcmQgd29yZCBhbmQgaG93IHRoZSBjb21iaW5lZCBjaGFyYWN0ZXIgaXMgZW5jb2RlZDoKKwkgKiAxNSAgIHNldCBpZiB0aGVyZSBpcyBhIHRoaXJkIHdvcmQgaW4gdGhpcyBsaXN0IGVudHJ5CisJICogMTQgICBzZXQgaWYgdGhlIHJlc3VsdCBpcyBhIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyCisJICogMTMgICBzZXQgaWYgdGhlIHJlc3VsdCBpdHNlbGYgY29tYmluZXMgZm9yd2FyZAorCSAqCisJICogQWNjb3JkaW5nIHRvIHRoZXNlIGJpdHMgMTUuLjE0IG9mIHRoZSBzZWNvbmQgd29yZCwKKwkgKiB0aGUgcmVzdWx0IGNoYXJhY3RlciBpcyBlbmNvZGVkIGFzIGZvbGxvd3M6CisJICogMDAgb3IgMDEgVGhlIHJlc3VsdCBpcyA8PTB4MWZmZiBhbmQgc3RvcmVkIGluIGJpdHMgMTIuLjAgb2YKKwkgKiAgICAgICAgICB0aGUgc2Vjb25kIHdvcmQuCisJICogMTAgICAgICAgVGhlIHJlc3VsdCBpcyAweDIwMDAuLjB4ZmZmZiBhbmQgc3RvcmVkIGluIHRoZSB0aGlyZCB3b3JkLgorCSAqICAgICAgICAgIEJpdHMgMTIuLjAgb2YgdGhlIHNlY29uZCB3b3JkIGFyZSBub3QgdXNlZC4KKwkgKiAxMSAgICAgICBUaGUgcmVzdWx0IGlzIGEgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIuCisJICogICAgICAgICAgQml0cyA5Li4wIG9mIHRoZSBsZWFkaW5nIHN1cnJvZ2F0ZSBhcmUgaW4gYml0cyA5Li4wIG9mCisJICogICAgICAgICAgdGhlIHNlY29uZCB3b3JkLgorCSAqICAgICAgICAgIEFkZCAweGQ4MDAgdG8gdGhlc2UgYml0cyB0byBnZXQgdGhlIGNvbXBsZXRlIHN1cnJvZ2F0ZS4KKwkgKiAgICAgICAgICBCaXRzIDEyLi4xMCBvZiB0aGUgc2Vjb25kIHdvcmQgYXJlIG5vdCB1c2VkLgorCSAqICAgICAgICAgIFRoZSB0cmFpbGluZyBzdXJyb2dhdGUgaXMgc3RvcmVkIGluIHRoZSB0aGlyZCB3b3JkLgorCSAqCisJICoKKwkgKiAtIEZDRCB0cmllCisJICoKKwkgKiBUaGUgRkNEIHRyaWUgaXMgdmVyeSBzaW1wbGUuCisJICogSXQgaXMgYSBmb2xkZWQgdHJpZSB3aXRoIDE2LWJpdCBkYXRhIHdvcmRzLgorCSAqIEluIGVhY2ggd29yZCwgdGhlIGhpZ2ggYnl0ZSBjb250YWlucyB0aGUgbGVhZGluZyBjYyBvZiB0aGUgY2hhcmFjdGVyLAorCSAqIGFuZCB0aGUgbG93IGJ5dGUgY29udGFpbnMgdGhlIHRyYWlsaW5nIGNjIG9mIHRoZSBjaGFyYWN0ZXIuCisJICogVGhlc2UgY2MncyBhcmUgdGhlIGNjJ3Mgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGNvZGUgcG9pbnRzIGluIHRoZQorCSAqIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIuCisJICoKKwkgKiBTaW5jZSBhbGwgMTYgYml0cyBhcmUgdXNlZCBmb3IgY2MncywgbGVhZCBzdXJyb2dhdGVzIG11c3QgYmUgdGVzdGVkCisJICogYnkgY2hlY2tpbmcgdGhlIGNvZGUgdW5pdCBpbnN0ZWFkIG9mIHRoZSB0cmllIGRhdGEuCisJICogVGhpcyBpcyBkb25lIG9ubHkgaWYgdGhlIDE2LWJpdCBkYXRhIHdvcmQgaXMgbm90IHplcm8uCisJICogSWYgdGhlIGNvZGUgdW5pdCBpcyBhIGxlYWRpbmcgc3Vycm9nYXRlIGFuZCB0aGUgZGF0YSB3b3JkIGlzIG5vdCB6ZXJvLAorCSAqIHRoZW4gaW5zdGVhZCBvZiBjYydzIGl0IGNvbnRhaW5zIHRoZSBvZmZzZXQgZm9yIHRoZSBzZWNvbmQgdHJpZSBsb29rdXAuCisJICoKKwkgKgorCSAqIC0gQXV4aWxpYXJ5IHRyaWUgYW5kIGRhdGEKKwkgKgorCSAqCisJICogVGhlIGF1eGlsaWFyeSAxNi1iaXQgdHJpZSBjb250YWlucyBkYXRhIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMuCisJICogQml0cworICAgICAqIDE1Li4xMyAgIHJlc2VydmVkCisgICAgICogICAgIDEyICAgbm90IE5GQ19Ta2lwcGFibGUgKGYpIChmb3JtYXRWZXJzaW9uPj0yLjIpCisJICogICAgIDExICAgZmxhZzogbm90IGEgc2FmZSBzdGFydGVyIGZvciBjYW5vbmljYWwgY2xvc3VyZQorCSAqICAgICAxMCAgIGNvbXBvc2l0aW9uIGV4Y2x1c2lvbgorCSAqICA5Li4gMCAgIGluZGV4IGludG8gZXh0cmFEYXRhW10gdG8gRkNfTkZLQ19DbG9zdXJlIHN0cmluZworCSAqICAgICAgICAgIChub3QgZm9yIGxlYWQgc3Vycm9nYXRlKSwKKwkgKiAgICAgICAgICBvciBsZWFkIHN1cnJvZ2F0ZSBvZmZzZXQgKGZvciBsZWFkIHN1cnJvZ2F0ZSwgaWYgOS4uMCBub3QgemVybykKKwkgKiAKKyAgICAgKiBDb25kaXRpb25zIGZvciAiTkYqIFNraXBwYWJsZSIgZnJvbSBNYXJrIERhdmlzJyBjb20uaWJtLnRleHQuVUNELk5GU2tpcHBhYmxlOgorICAgICAqICh1c2VkIGluIE5vcm1hbGl6ZXJUcmFuc2xpdGVyYXRvcikKKyAgICAgKgorICAgICAqIEEgc2tpcHBhYmxlIGNoYXJhY3RlciBpcworICAgICAqIGEpIHVuYXNzaWduZWQsIG9yIEFMTCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAqIGIpIG9mIGNvbWJpbmluZyBjbGFzcyAwLgorICAgICAqIGMpIG5vdCBkZWNvbXBvc2VkIGJ5IHRoaXMgbm9ybWFsaXphdGlvbiBmb3JtLgorICAgICAqIEFORCBpZiBORkMgb3IgTkZLQywKKyAgICAgKiBkKSBjYW4gbmV2ZXIgY29tcG9zZSB3aXRoIGEgcHJldmlvdXMgY2hhcmFjdGVyLgorICAgICAqIGUpIGNhbiBuZXZlciBjb21wb3NlIHdpdGggYSBmb2xsb3dpbmcgY2hhcmFjdGVyLgorICAgICAqIGYpIGNhbiBuZXZlciBjaGFuZ2UgaWYgYW5vdGhlciBjaGFyYWN0ZXIgaXMgYWRkZWQuCisgICAgICogICAgRXhhbXBsZTogYS1icmV2ZSBtaWdodCBzYXRpc2Z5IGFsbCBidXQgZiwgYnV0IGlmIHlvdQorICAgICAqICAgIGFkZCBhbiBvZ29uZWsgaXQgY2hhbmdlcyB0byBhLW9nb25layArIGJyZXZlCisgICAgICoKKyAgICAgKiBhKS4uZSkgbXVzdCBiZSB0ZXN0ZWQgZnJvbSBub3JtMzIuCisgICAgICogU2luY2UgZikgaXMgbW9yZSBjb21wbGljYXRlZCwgdGhlIChub3QtKU5GQ19Ta2lwcGFibGUgZmxhZyAoZikgaXMgYnVpbHQKKyAgICAgKiBpbnRvIHRoZSBhdXhpbGlhcnkgdHJpZS4KKyAgICAgKiBUaGUgc2FtZSBiaXQgaXMgdXNlZCBmb3IgTkZDIGFuZCBORktDOyAoYykgZGlmZmVycyBmb3IgdGhlbS4KKyAgICAgKiBBcyB1c3VhbCwgd2UgYnVpbGQgdGhlICJub3Qgc2tpcHBhYmxlIiBmbGFncyBzbyB0aGF0IHVuYXNzaWduZWQKKyAgICAgKiBjb2RlIHBvaW50cyBnZXQgYSAwIGJpdC4KKyAgICAgKiBUaGlzIGJpdCBpcyBvbmx5IHZhbGlkIGFmdGVyIChhKS4uKGUpIHRlc3QgRkFMU0U7IHRlc3QgTkZEX05PIGJlZm9yZSAoZikgYXMgd2VsbC4KKyAgICAgKiBUZXN0IEhhbmd1bCBMViBzeWxsYWJsZXMgZW50aXJlbHkgaW4gY29kZS4KKyAgICAgKiAgIAorICAgICAqIAorCSAqIC0gRkNfTkZLQ19DbG9zdXJlIHN0cmluZ3MgaW4gZXh0cmFEYXRhW10KKwkgKgorCSAqIFN0cmluZ3MgYXJlIGVpdGhlciBzdG9yZWQgYXMgYSBzaW5nbGUgY29kZSB1bml0IG9yIGFzIHRoZSBsZW5ndGgKKwkgKiBmb2xsb3dlZCBieSB0aGF0IG1hbnkgdW5pdHMuCisJICogCisgICAgICogLSBzdHJ1Y3R1cmUgaW5zaWRlIGNhbm9uU3RhcnRTZXRzW10KKwkgKgorCSAqIFRoaXMgYXJyYXkgbWFwcyBmcm9tIGNvZGUgcG9pbnRzIGMgdG8gc2V0cyBvZiBjb2RlIHBvaW50cyAoVVNlcmlhbGl6ZWRTZXQpLgorCSAqIFRoZSByZXN1bHQgc2V0cyBhcmUgdGhlIGNvZGUgcG9pbnRzIHdob3NlIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9ucyBzdGFydAorCSAqIHdpdGggYy4KKwkgKgorCSAqIGNhbm9uU3RhcnRTZXRzW10gY29udGFpbnMgdGhlIGZvbGxvd2luZyBzdWItYXJyYXlzOgorCSAqCisJICogaW5kZXhlc1tfTk9STV9TRVRfSU5ERVhfVE9QXQorCSAqICAgLSBjb250YWlucyBsZW5ndGhzIG9mIHN1Yi1hcnJheXMgZXRjLgorCSAqCisJICogc3RhcnRTZXRzW2luZGV4ZXNbX05PUk1fU0VUX0lOREVYX0NBTk9OX1NFVFNfTEVOR1RIXS1fTk9STV9TRVRfSU5ERVhfVE9QXQorCSAqICAgLSBjb250YWlucyBzZXJpYWxpemVkIHNldHMgKFVTZXJpYWxpemVkU2V0KSBvZiBjYW5vbmljYWwgc3RhcnRlcnMgZm9yCisJICogICAgIGVudW1lcmF0aW5nIGNhbm9uaWNhbGx5IGVxdWl2YWxlbnQgc3RyaW5ncworCSAqICAgICBpbmRleGVzW19OT1JNX1NFVF9JTkRFWF9DQU5PTl9TRVRTX0xFTkdUSF0gaW5jbHVkZXMgX05PUk1fU0VUX0lOREVYX1RPUAorCSAqICAgICBmb3IgZGV0YWlscyBhYm91dCB0aGUgc3RydWN0dXJlIHNlZSB1c2V0LmMKKwkgKgorCSAqIGJtcFRhYmxlW2luZGV4ZXNbX05PUk1fU0VUX0lOREVYX0NBTk9OX0JNUF9UQUJMRV9MRU5HVEhdXQorCSAqICAgLSBhIHNvcnRlZCBzZWFyY2ggdGFibGUgZm9yIEJNUCBjb2RlIHBvaW50cyB3aG9zZSByZXN1bHRzIGFyZQorCSAqICAgICBlaXRoZXIgaW5kZXhlcyB0byBVU2VyaWFsaXplZFNldHMgb3Igc2luZ2xlIGNvZGUgcG9pbnRzIGZvcgorCSAqICAgICBzaW5nbGUtY29kZSBwb2ludCBzZXRzOworCSAqICAgICBlYWNoIGVudHJ5IGlzIGEgcGFpciBvZiB7IGNvZGUgcG9pbnQsIHJlc3VsdCB9IHdpdGggcmVzdWx0PShiaW5hcnkpIHl5IHh4eHh4eCB4eHh4eHh4eAorCSAqICAgICBpZiB5eT09MDEgdGhlbiB0aGVyZSBpcyBhIFVTZXJpYWxpemVkU2V0IGF0IGNhbm9uU3RhcnRTZXRzK3gKKwkgKiAgICAgZWxzZSBidWlsZCBhIFVTZXJpYWxpemVkU2V0IHdpdGggcmVzdWx0IGFzIHRoZSBzaW5nbGUgY29kZSBwb2ludAorCSAqCisJICogc3VwcFRhYmxlW2luZGV4ZXNbX05PUk1fU0VUX0lOREVYX0NBTk9OX1NVUFBfVEFCTEVfTEVOR1RIXV0KKwkgKiAgIC0gYSBzb3J0ZWQgc2VhcmNoIHRhYmxlIGZvciBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIHdob3NlIHJlc3VsdHMgYXJlCisJICogICAgIGVpdGhlciBpbmRleGVzIHRvIFVTZXJpYWxpemVkU2V0cyBvciBzaW5nbGUgY29kZSBwb2ludHMgZm9yCisJICogICAgIHNpbmdsZS1jb2RlIHBvaW50IHNldHM7CisJICogICAgIGVhY2ggZW50cnkgaXMgYSB0cmlwbGV0IG9mIHsgaGlnaDE2KGNwKSwgbG93MTYoY3ApLCByZXN1bHQgfQorCSAqICAgICBlYWNoIGNvZGUgcG9pbnQncyBoaWdoLXdvcmQgbWF5IGNvbnRhaW4gZXh0cmEgZGF0YSBpbiBiaXRzIDE1Li41OgorCSAqICAgICBpZiB0aGUgaGlnaCB3b3JkIGhhcyBiaXQgMTUgc2V0LCB0aGVuIGJ1aWxkIGEgc2V0IHdpdGggYSBzaW5nbGUgY29kZSBwb2ludAorCSAqICAgICB3aGljaCBpcyAoKChoaWdoMTYoY3ApJjB4MWYwMCk8PDgpfHJlc3VsdDsKKwkgKiAgICAgZWxzZSB0aGVyZSBpcyBhIFVTZXJpYWxpemVkU2V0IGF0IGNhbm9uU3RhcnRTZXRzK3Jlc3VsdAorCSAqLworZmluYWwgY2xhc3MgTm9ybWFsaXplckRhdGFSZWFkZXIgaW1wbGVtZW50cyBJQ1VCaW5hcnkuQXV0aGVudGljYXRlIHsKKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIGRlYnVnID0gSUNVRGVidWcuZW5hYmxlZCgiTm9ybWFsaXplckRhdGFSZWFkZXIiKTsKKwkKKyAgIC8qKgorICAgICogPHA+UHJvdGVjdGVkIGNvbnN0cnVjdG9yLjwvcD4KKyAgICAqIEBwYXJhbSBpbnB1dFN0cmVhbSBJQ1UgdXByb3AuZGF0IGZpbGUgaW5wdXQgc3RyZWFtCisgICAgKiBAZXhjZXB0aW9uIElPRXhjZXB0aW9uIHRocm93IGlmIGRhdGEgZmlsZSBmYWlscyBhdXRoZW50aWNhdGlvbiAKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBOb3JtYWxpemVyRGF0YVJlYWRlcihJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9ueworICAgICAgICBpZihkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKCJCeXRlcyBpbiBpbnB1dFN0cmVhbSAiICsgaW5wdXRTdHJlYW0uYXZhaWxhYmxlKCkpOworICAgICAgICAKKyAgICAgICAgSUNVQmluYXJ5LnJlYWRIZWFkZXIoaW5wdXRTdHJlYW0sIERBVEFfRk9STUFUX0lELCB0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGlmKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4oIkJ5dGVzIGxlZnQgaW4gaW5wdXRTdHJlYW0gIiAraW5wdXRTdHJlYW0uYXZhaWxhYmxlKCkpOworICAgICAgICAKKyAgICAgICAgZGF0YUlucHV0U3RyZWFtID0gbmV3IERhdGFJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7CisgICAgICAgIAorICAgICAgICBpZihkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKCJCeXRlcyBsZWZ0IGluIGRhdGFJbnB1dFN0cmVhbSAiICtkYXRhSW5wdXRTdHJlYW0uYXZhaWxhYmxlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBwcm90ZWN0ZWQgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHJvdGVjdGVkIGludFtdIHJlYWRJbmRleGVzKGludCBsZW5ndGgpdGhyb3dzIElPRXhjZXB0aW9ueworICAgICAgICBpbnRbXSBpbmRleGVzID0gbmV3IGludFtsZW5ndGhdOworICAgICAgICAvL1JlYWQgdGhlIGluZGV4ZXMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPGxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgIGluZGV4ZXNbaV0gPSBkYXRhSW5wdXRTdHJlYW0ucmVhZEludCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbmRleGVzOworICAgIH0gCisgICAgLyoqCisgICAgKiA8cD5SZWFkcyB1bm9ybS5pY3UsIHBhcnNlIGl0IGludG8gYmxvY2tzIG9mIGRhdGEgdG8gYmUgc3RvcmVkIGluCisgICAgKiBOb3JtYWxpemVySW1wbC48L1AKKyAgICAqIEBwYXJhbSBub3JtQnl0ZXMKKyAgICAqIEBwYXJhbSBmY2RCeXRlcworICAgICogQHBhcmFtIGF1eEJ5dGVzCisgICAgKiBAcGFyYW0gZXh0cmFEYXRhCisgICAgKiBAcGFyYW0gY29tYmluaW5nVGFibGUKKyAgICAqIEBwYXJhbSBjYW5vblN0YXJ0U2V0cworICAgICogQGV4Y2VwdGlvbiB0aHJvd24gd2hlbiBkYXRhIHJlYWRpbmcgZmFpbHMKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIHJlYWQoYnl0ZVtdIG5vcm1CeXRlcywgYnl0ZVtdIGZjZEJ5dGVzLCBieXRlW10gYXV4Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZXh0cmFEYXRhLCBjaGFyW10gY29tYmluaW5nVGFibGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gY2Fub25TdGFydFNldHMpIAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9ueworCisJIAkvL1JlYWQgdGhlIGJ5dGVzIHRoYXQgbWFrZSB1cCB0aGUgbm9ybVRyaWUgCQorCSAJZGF0YUlucHV0U3RyZWFtLnJlYWQobm9ybUJ5dGVzKTsKKyAgICAgICAgCisJIAkvL25vcm1UcmllU3RyZWFtPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obm9ybUJ5dGVzKTsKKworCSAJLy9SZWFkIHRoZSBleHRyYSBkYXRhCisJIAlmb3IoaW50IGk9MDtpPGV4dHJhRGF0YS5sZW5ndGg7aSsrKXsKKwkgCQlleHRyYURhdGFbaV09ZGF0YUlucHV0U3RyZWFtLnJlYWRDaGFyKCk7CisJIAl9CisJIAkKKwkgCS8vUmVhZCB0aGUgY29tYmluaW5nIGNsYXNzIHRhYmxlCisJIAlmb3IoaW50IGk9MDsgaTxjb21iaW5pbmdUYWJsZS5sZW5ndGg7IGkrKyl7CisJIAkJY29tYmluaW5nVGFibGVbaV09ZGF0YUlucHV0U3RyZWFtLnJlYWRDaGFyKCk7CisJIAl9CisJIAkKKwkgCS8vUmVhZCB0aGUgZmNkVHJpZQorCSAJZGF0YUlucHV0U3RyZWFtLnJlYWQoZmNkQnl0ZXMpOworCSAJCisJIAkKKwkgCS8vUmVhZCB0aGUgQXV4VHJpZQkgCQorICAgICAgICBkYXRhSW5wdXRTdHJlYW0ucmVhZChhdXhCeXRlcyk7CisJCQorCQkvL1JlYWQgdGhlIGNhbm9uaWNhbCBzdGFydCBzZXRzCisJCWludFtdIGNhbm9uU3RhcnRTZXRzSW5kZXhlcyA9IG5ldyBpbnRbTm9ybWFsaXplckltcGwuU0VUX0lOREVYX1RPUF07CisJCQorICAgICAgICBmb3IoaW50IGk9MDsgaTxjYW5vblN0YXJ0U2V0c0luZGV4ZXMubGVuZ3RoOyBpKyspeworCSAJCWNhbm9uU3RhcnRTZXRzSW5kZXhlc1tpXT1kYXRhSW5wdXRTdHJlYW0ucmVhZENoYXIoKTsKKwkgCX0KKwkJCisgICAgICAgIGNoYXJbXSBzdGFydFNldHMgPSBuZXcgY2hhcltjYW5vblN0YXJ0U2V0c0luZGV4ZXNbTm9ybWFsaXplckltcGwuU0VUX0lOREVYX0NBTk9OX1NFVFNfTEVOR1RIXS1Ob3JtYWxpemVySW1wbC5TRVRfSU5ERVhfVE9QXTsKKyAgICAgICAgCisgICAgICAgIGZvcihpbnQgaT0wOyBpPHN0YXJ0U2V0cy5sZW5ndGg7IGkrKyl7CisJIAkJc3RhcnRTZXRzW2ldPWRhdGFJbnB1dFN0cmVhbS5yZWFkQ2hhcigpOworCSAJfQorCSAJY2hhcltdIGJtcFRhYmxlICA9IG5ldyBjaGFyW2Nhbm9uU3RhcnRTZXRzSW5kZXhlc1tOb3JtYWxpemVySW1wbC5TRVRfSU5ERVhfQ0FOT05fQk1QX1RBQkxFX0xFTkdUSF1dOworICAgICAgICBmb3IoaW50IGk9MDsgaTxibXBUYWJsZS5sZW5ndGg7IGkrKyl7CisJIAkJYm1wVGFibGVbaV09ZGF0YUlucHV0U3RyZWFtLnJlYWRDaGFyKCk7CisJIAl9CQkKKwkJY2hhcltdIHN1cHBUYWJsZSA9IG5ldyBjaGFyW2Nhbm9uU3RhcnRTZXRzSW5kZXhlc1tOb3JtYWxpemVySW1wbC5TRVRfSU5ERVhfQ0FOT05fU1VQUF9UQUJMRV9MRU5HVEhdXTsKKyAgICAgICAgZm9yKGludCBpPTA7IGk8c3VwcFRhYmxlLmxlbmd0aDsgaSsrKXsKKwkgCQlzdXBwVGFibGVbaV09ZGF0YUlucHV0U3RyZWFtLnJlYWRDaGFyKCk7CisJIAl9CisJIAljYW5vblN0YXJ0U2V0c1tOb3JtYWxpemVySW1wbC5DQU5PTl9TRVRfSU5ESUNJRVNfSU5ERVggIF0gPSBjYW5vblN0YXJ0U2V0c0luZGV4ZXM7CisJIAljYW5vblN0YXJ0U2V0c1tOb3JtYWxpemVySW1wbC5DQU5PTl9TRVRfU1RBUlRfU0VUU19JTkRFWF0gPSBzdGFydFNldHM7CisJIAljYW5vblN0YXJ0U2V0c1tOb3JtYWxpemVySW1wbC5DQU5PTl9TRVRfQk1QX1RBQkxFX0lOREVYCV0gPSBibXBUYWJsZTsKKwkgCWNhbm9uU3RhcnRTZXRzW05vcm1hbGl6ZXJJbXBsLkNBTk9OX1NFVF9TVVBQX1RBQkxFX0lOREVYXSA9IHN1cHBUYWJsZTsJIAkKKyAgICB9CisgICAgCisgICAgcHVibGljIGJ5dGVbXSBnZXREYXRhRm9ybWF0VmVyc2lvbigpeworICAgICAgICByZXR1cm4gREFUQV9GT1JNQVRfVkVSU0lPTjsKKyAgICB9CisgICAgCisgICAgcHVibGljIGJvb2xlYW4gaXNEYXRhVmVyc2lvbkFjY2VwdGFibGUoYnl0ZSB2ZXJzaW9uW10pCisgICAgeworICAgICAgICByZXR1cm4gdmVyc2lvblswXSA9PSBEQVRBX0ZPUk1BVF9WRVJTSU9OWzBdIAorICAgICAgICAgICAgICAgJiYgdmVyc2lvblsyXSA9PSBEQVRBX0ZPUk1BVF9WRVJTSU9OWzJdIAorICAgICAgICAgICAgICAgJiYgdmVyc2lvblszXSA9PSBEQVRBX0ZPUk1BVF9WRVJTSU9OWzNdOworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAKKworICAgIC8qKgorICAgICogSUNVIGRhdGEgZmlsZSBpbnB1dCBzdHJlYW0KKyAgICAqLworICAgIHByaXZhdGUgRGF0YUlucHV0U3RyZWFtIGRhdGFJbnB1dFN0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qKgorICAgICogRmlsZSBmb3JtYXQgdmVyc2lvbiB0aGF0IHRoaXMgY2xhc3MgdW5kZXJzdGFuZHMuCisgICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGlmIGEgb2xkZXIgdmVyc2lvbiBpcyB1c2VkCisgICAgKiBzZWUgc3RvcmUuYyBvZiBnZW5ub3JtIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB2YWx1ZXMKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgREFUQV9GT1JNQVRfSURbXSA9IHsoYnl0ZSkweDRFLCAoYnl0ZSkweDZGLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSkweDcyLCAoYnl0ZSkweDZEfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIERBVEFfRk9STUFUX1ZFUlNJT05bXSA9IHsoYnl0ZSkweDIsIChieXRlKTB4MiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKTB4NSwgKGJ5dGUpMHgyfTsKKwkKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL05vcm1hbGl6ZXJJbXBsLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9Ob3JtYWxpemVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZTE5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9Ob3JtYWxpemVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMzU0NyBAQAorIC8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL05vcm1hbGl6ZXJJbXBsLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMS8yNiAyMzo0NzowNiAkCisgKiAkUmV2aXNpb246IDEuMTMgJAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplcjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlVURjE2OwkKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlVuaWNvZGVTZXQ7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5SYW5nZVZhbHVlSXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOworCisvKioKKyAqIEB2ZXJzaW9uIAkxLjAKKyAqIEBhdXRob3IgIFJhbSBWaXN3YW5hZGhhCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBOb3JtYWxpemVySW1wbCB7CisJLy8gU3RhdGljIGJsb2NrIGZvciB0aGUgY2xhc3MgdG8gaW5pdGlhbGl6ZSBpdHMgb3duIHNlbGYgCisJc3RhdGljIGZpbmFsIE5vcm1hbGl6ZXJJbXBsIElNUEw7CisJCisJc3RhdGljCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgSU1QTCA9IG5ldyBOb3JtYWxpemVySW1wbCgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCQorCXN0YXRpYyBmaW5hbCBpbnQgVU5TSUdORURfQllURV9NQVNLID0weEZGOworCXN0YXRpYyBmaW5hbCBsb25nIFVOU0lHTkVEX0lOVF9NQVNLID0gMHhmZmZmZmZmZkw7CisJLyoKKwkgKiBUaGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbm9ybWFsaXphdGlvbiBjb2RlIGxvYWRzIGl0cyBkYXRhIGZyb20KKwkgKiB1bm9ybS5pY3UsIHdoaWNoIGlzIGdlbmVyYXRlZCB3aXRoIHRoZSBnZW5ub3JtIHRvb2wuCisJICogVGhlIGZvcm1hdCBvZiB0aGF0IGZpbGUgaXMgZGVzY3JpYmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX0ZJTEVfTkFNRSA9ICJkYXRhL3Vub3JtLmljdSI7CisJCisJLy8gbm9ybTMyIHZhbHVlIGNvbnN0YW50cyAKKwkKKyAgICAvLyBxdWljayBjaGVjayBmbGFncyAwLi4zIHNldCBtZWFuICJubyIgZm9yIHRoZWlyIGZvcm1zIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFDX05GQz0weDExOyAgICAgICAgICAvKiBub3xtYXliZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFDX05GS0M9MHgyMjsgICAgICAgICAvKiBub3xtYXliZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFDX05GRD00OyAgICAgICAgICAgICAvKiBubyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFDX05GS0Q9ODsgICAgICAgICAgICAvKiBubyAqLworCQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFDX0FOWV9OTz0weGY7CisKKyAgICAvKiBxdWljayBjaGVjayBmbGFncyA0Li41IG1lYW4gIm1heWJlIiBmb3IgdGhlaXIgZm9ybXM7IAorICAgICAqIHRlc3QgZmxhZ3M+PVFDX01BWUJFIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFDX01BWUJFPTB4MTA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUUNfQU5ZX01BWUJFPTB4MzA7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRQ19NQVNLPTB4M2Y7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09NQklORVNfRldEPTB4NDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTUJJTkVTX0JBQ0s9MHg4MDsKKyAgICBwdWJsaWMgIHN0YXRpYyBmaW5hbCBpbnQgQ09NQklORVNfQU5ZPTB4YzA7CisgICAgLy8gVW5pY29kZURhdGEudHh0IGNvbWJpbmluZyBjbGFzcyBpbiBiaXRzIDE1LgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQ19TSElGVD04OyAgICAgICAgICAgCQkgIAorICAgIHB1YmxpYyAgc3RhdGljIGZpbmFsIGludCBDQ19NQVNLPTB4ZmYwMDsKKyAgICAvLyAxNiBiaXRzIGZvciB0aGUgaW5kZXggdG8gVUNoYXJzIGFuZCBvdGhlciBleHRyYSBkYXRhCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYVFJBX1NISUZUPTE2OworICAgIC8vIHN0YXJ0IG9mIHN1cnJvZ2F0ZSBzcGVjaWFscyBhZnRlciBzaGlmdCAgICAgICAgICAgICAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhUUkFfSU5ERVhfVE9QPTB4ZmMwMDsgICAgICAgCisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhUUkFfU1VSUk9HQVRFX01BU0s9MHgzZmY7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYVFJBX1NVUlJPR0FURV9UT1A9MHgzZjA7ICAgIC8qIGhhbmd1bCBldGMuICovCisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhUUkFfSEFOR1VMPUVYVFJBX1NVUlJPR0FURV9UT1A7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYVFJBX0pBTU9fTD1FWFRSQV9TVVJST0dBVEVfVE9QKzE7LyogIyMjIG5vdCB1c2VkICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYVFJBX0pBTU9fVj1FWFRSQV9TVVJST0dBVEVfVE9QKzI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYVFJBX0pBTU9fVD1FWFRSQV9TVVJST0dBVEVfVE9QKzM7CisJCisJLyogbm9ybTMyIHZhbHVlIGNvbnN0YW50cyB1c2luZyA+MTYgYml0cyAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgIE1JTl9TUEVDSUFMICAgID0gIChsb25nKSgweGZjMDAwMDAwICYgVU5TSUdORURfSU5UX01BU0spOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgIFNVUlJPR0FURVNfVE9QID0gIChsb25nKSgweGZmZjAwMDAwICYgVU5TSUdORURfSU5UX01BU0spOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgIE1JTl9IQU5HVUwgICAgID0gIChsb25nKSgweGZmZjAwMDAwICYgVU5TSUdORURfSU5UX01BU0spOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgIE1JTl9KQU1PX1YgICAgID0gIChsb25nKSgweGZmZjIwMDAwICYgVU5TSUdORURfSU5UX01BU0spOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgIEpBTU9fVl9UT1AgICAgID0gIChsb25nKSgweGZmZjMwMDAwICYgVU5TSUdORURfSU5UX01BU0spOworCQorCQorCS8qIGluZGV4ZXNbXSB2YWx1ZSBuYW1lcyAqLworCS8qIG51bWJlciBvZiBieXRlcyBpbiBub3JtYWxpemF0aW9uIHRyaWUgKi8KKwlzdGF0aWMgZmluYWwgaW50IElOREVYX1RSSUVfU0laRSAJCSAgPSAwOworICAgICAvKiBudW1iZXIgb2YgY2hhcnMgaW4gZXh0cmEgZGF0YSAqLyAgICAgCisJc3RhdGljIGZpbmFsIGludCBJTkRFWF9DSEFSX0NPVU5UIAkJICA9IDE7ICAgIAorCS8qIG51bWJlciBvZiB1aW50MTZfdCB3b3JkcyBmb3IgY29tYmluaW5nIGRhdGEgKi8KKwlzdGF0aWMgZmluYWwgaW50IElOREVYX0NPTUJJTkVfREFUQV9DT1VOVCA9IDI7CisgICAgLyogbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgY29tYmluZSBmb3J3YXJkICovICAgICAKKwlzdGF0aWMgZmluYWwgaW50IElOREVYX0NPTUJJTkVfRldEX0NPVU5UICA9IDM7CisgICAgLyogbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgY29tYmluZSBmb3J3YXJkIGFuZCBiYWNrd2FyZCAqLyAgICAgCisJc3RhdGljIGZpbmFsIGludCBJTkRFWF9DT01CSU5FX0JPVEhfQ09VTlQgPSA0OworICAgIC8qIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGNvbWJpbmUgYmFja3dhcmQgKi8gICAgIAorCXN0YXRpYyBmaW5hbCBpbnQgSU5ERVhfQ09NQklORV9CQUNLX0NPVU5UID0gNTsgICAgIAorCSAvKiBmaXJzdCBjb2RlIHBvaW50IHdpdGggcXVpY2sgY2hlY2sgTkZDIE5PL01BWUJFICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5ERVhfTUlOX05GQ19OT19NQVlCRSAgID0gNjsKKyAgICAvKiBmaXJzdCBjb2RlIHBvaW50IHdpdGggcXVpY2sgY2hlY2sgTkZLQyBOTy9NQVlCRSAqLyAgICAKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkRFWF9NSU5fTkZLQ19OT19NQVlCRSAgPSA3OworICAgICAvKiBmaXJzdCBjb2RlIHBvaW50IHdpdGggcXVpY2sgY2hlY2sgTkZEIE5PL01BWUJFICovICAgICAKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkRFWF9NSU5fTkZEX05PX01BWUJFICAgPSA4OworICAgIC8qIGZpcnN0IGNvZGUgcG9pbnQgd2l0aCBxdWljayBjaGVjayBORktEIE5PL01BWUJFICovICAgIAorCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOREVYX01JTl9ORktEX05PX01BWUJFICA9IDk7ICAgICAKKwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gRkNEIHRyaWUgKi8KKwlzdGF0aWMgZmluYWwgaW50IElOREVYX0ZDRF9UUklFX1NJWkUgICAgICA9IDEwOworICAgIC8qIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYXV4aWxpYXJ5IHRyaWUgKi8gICAgCisgICAgc3RhdGljIGZpbmFsIGludCBJTkRFWF9BVVhfVFJJRV9TSVpFICAgICAgPSAxMTsKKyAgICAvKiBudW1iZXIgb2YgdWludDE2X3QgaW4gdGhlIGFycmF5IG9mIHNlcmlhbGl6ZWQgVVNldCAqLyAgICAKKyAgICBzdGF0aWMgZmluYWwgaW50IElOREVYX0NBTk9OX1NFVF9DT1VOVCAgICA9IDEyOyAgICAKKyAgICAvKiBjaGFuZ2luZyB0aGlzIHJlcXVpcmVzIGEgbmV3IGZvcm1hdFZlcnNpb24gKi8KKwlzdGF0aWMgZmluYWwgaW50IElOREVYX1RPUCAgICAgICAgICAgICAgICA9IDMyOyAgICAKKwkKKwkKKwkvKiBBVVggY29uc3RhbnRzICovCisJLyogdmFsdWUgY29uc3RhbnRzIGZvciBhdXhUcmllICovCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVVhfVU5TQUZFX1NISUZUCSAgICAgICA9IDExOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVVhfQ09NUF9FWF9TSElGVAkgICAgICAgPSAxMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVVYX05GQ19TS0lQUEFCTEVfRl9TSElGVCA9IDEyOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVVhfTUFYX0ZOQyAgICAgICAgICA9ICAgKChpbnQpMTw8QVVYX0NPTVBfRVhfU0hJRlQpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVVhfVU5TQUZFX01BU0sgICAgICA9ICAgKGludCkoKDE8PEFVWF9VTlNBRkVfU0hJRlQpICYgVU5TSUdORURfSU5UX01BU0spOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVVhfRk5DX01BU0sgICAgICAgICA9ICAgKGludCkoKEFVWF9NQVhfRk5DLTEpICYgVU5TSUdORURfSU5UX01BU0spOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVVhfQ09NUF9FWF9NQVNLICAgICA9ICAgKGludCkoKDE8PEFVWF9DT01QX0VYX1NISUZUKSAmIFVOU0lHTkVEX0lOVF9NQVNLKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEFVWF9ORkNfU0tJUF9GX01BU0sgPSAgICgoVU5TSUdORURfSU5UX01BU0smMSk8PEFVWF9ORkNfU0tJUFBBQkxFX0ZfU0hJRlQpOworICAgIAorCS8qIGNhbm9uU3RhcnRTZXRzWzAuLjMxXSBjb250YWlucyBpbmRleGVzIGZvciB3aGF0IGlzIGluIHRoZSBhcnJheSAqLworICAgIC8qIG51bWJlciBvZiB1aW50MTZfdCBpbiBjYW5vbmljYWwgc3RhcnRlciBzZXRzICovCisgICAgc3RhdGljIGZpbmFsIGludCBTRVRfSU5ERVhfQ0FOT05fU0VUU19MRU5HVEgJCT0gMDsKKyAgICAvKiBudW1iZXIgb2YgdWludDE2X3QgaW4gdGhlIEJNUCBzZWFyY2ggdGFibGUgKGNvbnRhaW5zIHBhaXJzKSAqLyAKKyAgICBzdGF0aWMgZmluYWwgaW50IFNFVF9JTkRFWF9DQU5PTl9CTVBfVEFCTEVfTEVOR1RICT0gMTsKKyAgICAvKiBudW1iZXIgb2YgdWludDE2X3QgaW4gdGhlIHN1cHBsZW1lbnRhcnkgc2VhcmNoIHRhYmxlKGNvbnRhaW5zIHRyaXBsZXRzKSovIAorICAgIHN0YXRpYyBmaW5hbCBpbnQgU0VUX0lOREVYX0NBTk9OX1NVUFBfVEFCTEVfTEVOR1RIICA9IDI7CisgICAgLyogY2hhbmdpbmcgdGhpcyByZXF1aXJlcyBhIG5ldyBmb3JtYXRWZXJzaW9uICovIAorICAgIHN0YXRpYyBmaW5hbCBpbnQgU0VUX0lOREVYX1RPUAkJCQkJCT0gMzI7CisJCisJc3RhdGljIGZpbmFsIGludCBDQU5PTl9TRVRfSU5ESUNJRVNfSU5ERVggIAkJCT0gMDsKKwlzdGF0aWMgZmluYWwgaW50IENBTk9OX1NFVF9TVEFSVF9TRVRTX0lOREVYCQkJPSAxOworCXN0YXRpYyBmaW5hbCBpbnQgQ0FOT05fU0VUX0JNUF9UQUJMRV9JTkRFWAkJCT0gMjsKKwlzdGF0aWMgZmluYWwgaW50IENBTk9OX1NFVF9TVVBQX1RBQkxFX0lOREVYCQkJPSAzOworCS8qIDE0IGJpdCBpbmRleGVzIHRvIGNhbm9uaWNhbCBVU2VyaWFsaXplZFNldHMgKi8KKwlzdGF0aWMgZmluYWwgaW50IENBTk9OX1NFVF9NQVhfQ0FOT05fU0VUUyAgICAgCQk9IDB4NDAwMDsgCisJLyogc2luZ2xlLWNvZGUgcG9pbnQgQk1QIHNldHMgYXJlIGVuY29kZWQgZGlyZWN0bHkgaW4gdGhlIHNlYXJjaCB0YWJsZSAKKyAgICAgKiBleGNlcHQgaWYgcmVzdWx0PTB4NDAwMC4uMHg3ZmZmIAorICAgICAqLworCXN0YXRpYyBmaW5hbCBpbnQgQ0FOT05fU0VUX0JNUF9NQVNLICAgICAgICAJCQk9IDB4YzAwMDsKKwlzdGF0aWMgZmluYWwgaW50IENBTk9OX1NFVF9CTVBfSVNfSU5ERVggICAgCQkJPSAweDQwMDA7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgPSAyMDsKKwkKKyAgICAvKioKKwkgKiBJbnRlcm5hbCBvcHRpb24gZm9yIGNtcEVxdWl2Rm9sZCgpIGZvciBkZWNvbXBvc2luZy4KKwkgKiBJZiBub3Qgc2V0LCBqdXN0IGRvIHN0cmNhc2VjbXAoKS4KKwkgKiBAaW50ZXJuYWwKKwkgKi8KKwkgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTVBBUkVfRVFVSVYgPSAweDgwMDAwOworCQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogV3JhcHBlcnMgZm9yIFRyaWUgaW1wbGVtZW50YXRpb25zICovIAorCXN0YXRpYyBmaW5hbCBjbGFzcyBOb3JtVHJpZUltcGwgaW1wbGVtZW50cyBUcmllLkRhdGFNYW5pcHVsYXRleworCQlzdGF0aWMgSW50VHJpZSBub3JtVHJpZT0gbnVsbDsKKwkgICAvKioKKwkgICAgKiBDYWxsZWQgYnkgY29tLmlibS5pY3UudXRpbC5UcmllIHRvIGV4dHJhY3QgZnJvbSBhIGxlYWQgc3Vycm9nYXRlJ3MgCisJICAgICogZGF0YSB0aGUgaW5kZXggYXJyYXkgb2Zmc2V0IG9mIHRoZSBpbmRleGVzIGZvciB0aGF0IGxlYWQgc3Vycm9nYXRlLgorCSAgICAqIEBwYXJhbSBwcm9wZXJ0eSBkYXRhIHZhbHVlIGZvciBhIHN1cnJvZ2F0ZSBmcm9tIHRoZSB0cmllLCBpbmNsdWRpbmcgCisgICAgICAgICogICAgICAgICB0aGUgZm9sZGluZyBvZmZzZXQKKwkgICAgKiBAcmV0dXJuIGRhdGEgb2Zmc2V0IG9yIDAgaWYgdGhlcmUgaXMgbm8gZGF0YSBmb3IgdGhlIGxlYWQgc3Vycm9nYXRlCisJICAgICovCisgICAgICAgIC8qIG5vcm1UcmllOiAzMi1iaXQgdHJpZSByZXN1bHQgbWF5IGNvbnRhaW4gYSBzcGVjaWFsIGV4dHJhRGF0YSBpbmRleCB3aXRoIHRoZSBmb2xkaW5nIG9mZnNldCAqLworCSAgICBwdWJsaWMgaW50IGdldEZvbGRpbmdPZmZzZXQoaW50IHZhbHVlKXsKKyAgICAgICAgICAgIHJldHVybiAgQk1QX0lOREVYX0xFTkdUSCsKKyAgICAgICAgICAgICAgICAgICAgKCh2YWx1ZT4+KEVYVFJBX1NISUZULVNVUlJPR0FURV9CTE9DS19CSVRTKSkmCisgICAgICAgICAgICAgICAgICAgICgweDNmZjw8U1VSUk9HQVRFX0JMT0NLX0JJVFMpKTsgCisJICAgIH0KKwkJCisJfQorCXN0YXRpYyBmaW5hbCBjbGFzcyBGQ0RUcmllSW1wbCBpbXBsZW1lbnRzIFRyaWUuRGF0YU1hbmlwdWxhdGV7CisJCXN0YXRpYyBDaGFyVHJpZSBmY2RUcmllPW51bGw7CisJICAgLyoqCisJICAgICogQ2FsbGVkIGJ5IGNvbS5pYm0uaWN1LnV0aWwuVHJpZSB0byBleHRyYWN0IGZyb20gYSBsZWFkIHN1cnJvZ2F0ZSdzIAorCSAgICAqIGRhdGEgdGhlIGluZGV4IGFycmF5IG9mZnNldCBvZiB0aGUgaW5kZXhlcyBmb3IgdGhhdCBsZWFkIHN1cnJvZ2F0ZS4KKwkgICAgKiBAcGFyYW0gcHJvcGVydHkgZGF0YSB2YWx1ZSBmb3IgYSBzdXJyb2dhdGUgZnJvbSB0aGUgdHJpZSwgaW5jbHVkaW5nCisgICAgICAgICogICAgICAgICB0aGUgZm9sZGluZyBvZmZzZXQKKwkgICAgKiBAcmV0dXJuIGRhdGEgb2Zmc2V0IG9yIDAgaWYgdGhlcmUgaXMgbm8gZGF0YSBmb3IgdGhlIGxlYWQgc3Vycm9nYXRlCisJICAgICovCisgICAgICAgIC8qIGZjZFRyaWU6IHRoZSBmb2xkaW5nIG9mZnNldCBpcyB0aGUgbGVhZCBGQ0QgdmFsdWUgaXRzZWxmICovCisJICAgIHB1YmxpYyBpbnQgZ2V0Rm9sZGluZ09mZnNldChpbnQgdmFsdWUpeworCQkJcmV0dXJuIHZhbHVlOworCSAgICB9CisJfQorCQorCXN0YXRpYyBmaW5hbCBjbGFzcyBBdXhUcmllSW1wbCBpbXBsZW1lbnRzIFRyaWUuRGF0YU1hbmlwdWxhdGV7CisJCXN0YXRpYyBDaGFyVHJpZSBhdXhUcmllID0gbnVsbDsKKwkgICAvKioKKwkgICAgKiBDYWxsZWQgYnkgY29tLmlibS5pY3UudXRpbC5UcmllIHRvIGV4dHJhY3QgZnJvbSBhIGxlYWQgc3Vycm9nYXRlJ3MgCisJICAgICogZGF0YSB0aGUgaW5kZXggYXJyYXkgb2Zmc2V0IG9mIHRoZSBpbmRleGVzIGZvciB0aGF0IGxlYWQgc3Vycm9nYXRlLgorCSAgICAqIEBwYXJhbSBwcm9wZXJ0eSBkYXRhIHZhbHVlIGZvciBhIHN1cnJvZ2F0ZSBmcm9tIHRoZSB0cmllLCBpbmNsdWRpbmcgCisgICAgICAgICogICAgICAgIHRoZSBmb2xkaW5nIG9mZnNldAorCSAgICAqIEByZXR1cm4gZGF0YSBvZmZzZXQgb3IgMCBpZiB0aGVyZSBpcyBubyBkYXRhIGZvciB0aGUgbGVhZCBzdXJyb2dhdGUKKwkgICAgKi8KKyAgICAgICAgLyogYXV4VHJpZTogdGhlIGZvbGRpbmcgb2Zmc2V0IGlzIGluIGJpdHMgOS4uMCBvZiB0aGUgMTYtYml0IHRyaWUgcmVzdWx0ICovCisJICAgIHB1YmxpYyBpbnQgZ2V0Rm9sZGluZ09mZnNldChpbnQgdmFsdWUpeworCSAgICAgICAgcmV0dXJuIChpbnQpKHZhbHVlICZBVVhfRk5DX01BU0spPDxTVVJST0dBVEVfQkxPQ0tfQklUUzsKKwkgICAgfQorCX0KKwkJIAorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQorCQorCXN0YXRpYyBGQ0RUcmllSW1wbCBmY2RUcmllSW1wbDsKKwlzdGF0aWMgTm9ybVRyaWVJbXBsIG5vcm1UcmllSW1wbDsKKwlzdGF0aWMgQXV4VHJpZUltcGwgYXV4VHJpZUltcGw7CisJcHJpdmF0ZSBzdGF0aWMgaW50W10gaW5kZXhlczsKKwlzdGF0aWMgY2hhcltdIGNvbWJpbmluZ1RhYmxlOworCXN0YXRpYyBjaGFyW10gZXh0cmFEYXRhOworCXN0YXRpYyBPYmplY3RbXSBjYW5vblN0YXJ0U2V0czsKKwkKKwlzdGF0aWMgYm9vbGVhbiBpc0RhdGFMb2FkZWQ7CisJc3RhdGljIGJvb2xlYW4gaXNGb3JtYXRWZXJzaW9uXzJfMTsKKyAgICBzdGF0aWMgYm9vbGVhbiBpc0Zvcm1hdFZlcnNpb25fMl8yOworCS8qKgorICAgICAqIERlZmF1bHQgYnVmZmVyIHNpemUgb2YgZGF0YWZpbGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREFUQV9CVUZGRVJfU0laRSA9IDI1MDAwOworCQorCS8qKgorICAgICAqIEZDRCBjaGVjazogZXZlcnl0aGluZyBiZWxvdyB0aGlzIGNvZGUgcG9pbnQgaXMga25vd24gdG8gaGF2ZSBhIDAgCisgICAgICogbGVhZCBjb21iaW5pbmcgY2xhc3MgCisgICAgICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOX1dJVEhfTEVBRF9DQz0weDMwMDsKKworCisgICAgLyoqCisgICAgICogQml0IDcgb2YgdGhlIGxlbmd0aCBieXRlIGZvciBhIGRlY29tcG9zaXRpb24gc3RyaW5nIGluIGV4dHJhIGRhdGEgaXMKKyAgICAgKiBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBkZWNvbXBvc2l0aW9uIHN0cmluZyBpcworICAgICAqIHByZWNlZGVkIGJ5IGEgMTYtYml0IHdvcmQgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgY2MKKyAgICAgKiBvZiB0aGUgZGVjb21wb3NpdGlvbiAobGlrZSBmb3IgQS11bWxhdXQpOworICAgICAqIGlmIG5vdCwgdGhlbiBib3RoIGNjJ3MgYXJlIHplcm8gKGxpa2UgZm9yIGNvbXBhdGliaWxpdHkgaWRlb2dyYXBocykuCisgICAgICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFQ09NUF9GTEFHX0xFTkdUSF9IQVNfQ0M9MHg4MDsKKyAgICAvKioKKwkgKiBCaXRzIDYuLjAgb2YgdGhlIGxlbmd0aCBieXRlIGNvbnRhaW4gdGhlIGFjdHVhbCBsZW5ndGguCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFQ09NUF9MRU5HVEhfTUFTSz0weDdmOyAgIAorCQorCS8qKiBMZW5ndGggb2YgdGhlIEJNUCBwb3J0aW9uIG9mIHRoZSBpbmRleCAoc3RhZ2UgMSkgYXJyYXkuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJNUF9JTkRFWF9MRU5HVEg9MHgxMDAwMD4+VHJpZS5JTkRFWF9TVEFHRV8xX1NISUZUXzsKKyAgICAvKiogTnVtYmVyIG9mIGJpdHMgb2YgYSB0cmFpbCBzdXJyb2dhdGUgdGhhdCBhcmUgdXNlZCBpbiBpbmRleCB0YWJsZSAKKyAgICAgKiBsb29rdXBzLiAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VSUk9HQVRFX0JMT0NLX0JJVFM9MTAtVHJpZS5JTkRFWF9TVEFHRV8xX1NISUZUXzsKKworCisgICAvLyBwdWJsaWMgdXRpbGl0eQorICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0RnJvbUluZGV4ZXNBcnIoaW50IGluZGV4KXsKKyAgICAgICAgcmV0dXJuIGluZGV4ZXNbaW5kZXhdOworICAgfQorICAgCisgICAvLyBwcm90ZWN0ZWQgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiBDb25zdHJ1Y3RvcgorICAgICogQGV4Y2VwdGlvbiB0aHJvd24gd2hlbiBkYXRhIHJlYWRpbmcgZmFpbHMgb3IgZGF0YSBjb3JydXB0ZWQKKyAgICAqLworICAgIHByaXZhdGUgTm9ybWFsaXplckltcGwoKSB0aHJvd3MgSU9FeGNlcHRpb257CisgICAgICAgIC8vZGF0YSBzaG91bGQgYmUgbG9hZGVkIG9ubHkgb25jZQorICAgICAgICBpZighaXNEYXRhTG9hZGVkKXsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gamFyIGFjY2VzcworICAgICAgICAgICAgSW5wdXRTdHJlYW0gaSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShEQVRBX0ZJTEVfTkFNRSk7CisgICAgICAgICAgICBCdWZmZXJlZElucHV0U3RyZWFtIGIgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShpLERBVEFfQlVGRkVSX1NJWkUpOworICAgICAgICAgICAgTm9ybWFsaXplckRhdGFSZWFkZXIgcmVhZGVyID0gbmV3IE5vcm1hbGl6ZXJEYXRhUmVhZGVyKGIpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyByZWFkIHRoZSBpbmRleGVzICAgICAgICAgICAgCisgICAgICAgICAgICBpbmRleGVzID0gcmVhZGVyLnJlYWRJbmRleGVzKE5vcm1hbGl6ZXJJbXBsLklOREVYX1RPUCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ5dGVbXSBub3JtQnl0ZXMgPSBuZXcgYnl0ZVtpbmRleGVzW05vcm1hbGl6ZXJJbXBsLklOREVYX1RSSUVfU0laRV1dOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgY29tYmluaW5nVGFibGVUb3AgPSBpbmRleGVzW05vcm1hbGl6ZXJJbXBsLklOREVYX0NPTUJJTkVfREFUQV9DT1VOVF07CisgICAgICAgICAgICBjb21iaW5pbmdUYWJsZSA9IG5ldyBjaGFyW2NvbWJpbmluZ1RhYmxlVG9wXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGV4dHJhRGF0YVRvcCA9IGluZGV4ZXNbTm9ybWFsaXplckltcGwuSU5ERVhfQ0hBUl9DT1VOVF07CisgICAgICAgICAgICBleHRyYURhdGEgPSBuZXcgY2hhcltleHRyYURhdGFUb3BdOworCisgICAgICAgICAgICBieXRlW10gZmNkQnl0ZXMgPSBuZXcgYnl0ZVtpbmRleGVzW05vcm1hbGl6ZXJJbXBsLklOREVYX0ZDRF9UUklFX1NJWkVdXTsKKyAgICAgICAgICAgIGJ5dGVbXSBhdXhCeXRlcyA9IG5ldyBieXRlW2luZGV4ZXNbTm9ybWFsaXplckltcGwuSU5ERVhfQVVYX1RSSUVfU0laRV1dOworICAgICAgICAgICAgY2Fub25TdGFydFNldHM9bmV3IE9iamVjdFtOb3JtYWxpemVySW1wbC5DQU5PTl9TRVRfTUFYX0NBTk9OX1NFVFNdOworICAgICAgICAgICAgCisgICAgICAgICAgICBmY2RUcmllSW1wbCA9IG5ldyBGQ0RUcmllSW1wbCgpOworICAgICAgICAgICAgbm9ybVRyaWVJbXBsID0gbmV3IE5vcm1UcmllSW1wbCgpOworICAgICAgICAgICAgYXV4VHJpZUltcGwgPSBuZXcgQXV4VHJpZUltcGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAvLyBsb2FkIHRoZSByZXN0IG9mIHRoZSBkYXRhIGRhdGEgYW5kIGluaXRpYWxpemUgdGhlIGRhdGEgbWVtYmVycworICAgICAgICAgICAgcmVhZGVyLnJlYWQobm9ybUJ5dGVzLCBmY2RCeXRlcyxhdXhCeXRlcywgZXh0cmFEYXRhLCBjb21iaW5pbmdUYWJsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5vblN0YXJ0U2V0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vcm1UcmllSW1wbC5ub3JtVHJpZSA9IG5ldyBJbnRUcmllKCBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obm9ybUJ5dGVzKSxub3JtVHJpZUltcGwgKTsKKyAgICAgICAgICAgIGZjZFRyaWVJbXBsLmZjZFRyaWUgICA9IG5ldyBDaGFyVHJpZSggbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGZjZEJ5dGVzKSxmY2RUcmllSW1wbCAgKTsKKyAgICAgICAgICAgIGF1eFRyaWVJbXBsLmF1eFRyaWUgICA9IG5ldyBDaGFyVHJpZSggbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGF1eEJ5dGVzKSxhdXhUcmllSW1wbCAgKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gd2UgcmVhY2hlZCBoZXJlIHdpdGhvdXQgYW55IGV4Y2VwdGlvbnMgc28gdGhlIGRhdGEgaXMgZnVsbHkgCisgICAgICAgICAgICAvLyBsb2FkZWQgc2V0IHRoZSB2YXJpYWJsZSB0byB0cnVlCisgICAgICAgICAgICBpc0RhdGFMb2FkZWQgPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBnZXQgdGhlIGRhdGEgZm9ybWF0IHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ5dGVbXSBmb3JtYXRWZXJzaW9uID0gcmVhZGVyLmdldERhdGFGb3JtYXRWZXJzaW9uKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzRm9ybWF0VmVyc2lvbl8yXzEgPSggZm9ybWF0VmVyc2lvblswXT4yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdFZlcnNpb25bMF09PTIgJiYgZm9ybWF0VmVyc2lvblsxXT49MSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBpc0Zvcm1hdFZlcnNpb25fMl8yID0oIGZvcm1hdFZlcnNpb25bMF0+MiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXRWZXJzaW9uWzBdPT0yICYmIGZvcm1hdFZlcnNpb25bMV0+PTIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgCisgICAgICAgICAgICBiLmNsb3NlKCk7CisgICAgICAgICAgICBpLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkKKwkvKiBLb3JlYW4gSGFuZ3VsIGFuZCBKYW1vIGNvbnN0YW50cyAqLworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKQU1PX0xfQkFTRT0weDExMDA7ICAgICAvKiAibGVhZCIgamFtbyAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKQU1PX1ZfQkFTRT0weDExNjE7ICAgICAvKiAidm93ZWwiIGphbW8gKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSkFNT19UX0JBU0U9MHgxMWE3OyAgICAgLyogInRyYWlsIiBqYW1vICovCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBTkdVTF9CQVNFPTB4YWMwMDsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSkFNT19MX0NPVU5UPTE5OworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKQU1PX1ZfQ09VTlQ9MjE7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEpBTU9fVF9DT1VOVD0yODsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFOR1VMX0NPVU5UPUpBTU9fTF9DT1VOVCpKQU1PX1ZfQ09VTlQqSkFNT19UX0NPVU5UOworCQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNIYW5ndWxXaXRob3V0SmFtb1QoY2hhciBjKSB7CisJICAgIGMtPUhBTkdVTF9CQVNFOworCSAgICByZXR1cm4gYzxIQU5HVUxfQ09VTlQgJiYgYyVKQU1PX1RfQ09VTlQ9PTA7CisJfQorCQorCS8qIG5vcm0zMiBoZWxwZXJzICovCisJCisJLyogaXMgdGhpcyBhIG5vcm0zMiB3aXRoIGEgcmVndWxhciBpbmRleD8gKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzTm9ybTMyUmVndWxhcihsb25nIG5vcm0zMikgeworCSAgICByZXR1cm4gbm9ybTMyPE1JTl9TUEVDSUFMOworCX0KKwkKKwkvKiBpcyB0aGlzIGEgbm9ybTMyIHdpdGggYSBzcGVjaWFsIGluZGV4IGZvciBhIGxlYWQgc3Vycm9nYXRlPyAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOb3JtMzJMZWFkU3Vycm9nYXRlKGxvbmcgbm9ybTMyKSB7CisJICAgIHJldHVybiBNSU5fU1BFQ0lBTDw9bm9ybTMyICYmIG5vcm0zMjxTVVJST0dBVEVTX1RPUDsKKwl9CisJCisJLyogaXMgdGhpcyBhIG5vcm0zMiB3aXRoIGEgc3BlY2lhbCBpbmRleCBmb3IgYSBIYW5ndWwgc3lsbGFibGUgb3IgYSBKYW1vPyAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOb3JtMzJIYW5ndWxPckphbW8obG9uZyBub3JtMzIpIHsKKwkgICAgcmV0dXJuIG5vcm0zMj49TUlOX0hBTkdVTDsKKwl9CisJCisJLyoKKwkgKiBHaXZlbiBpc05vcm0zMkhhbmd1bE9ySmFtbygpLAorCSAqIGlzIHRoaXMgYSBIYW5ndWwgc3lsbGFibGUgb3IgYSBKYW1vPworCSAqLworCXByaXZhdGUgc3RhdGljICBib29sZWFuIGlzSGFuZ3VsSmFtb05vcm0zMkhhbmd1bE9ySmFtb0wobG9uZyBub3JtMzIpIHsKKwkgICAgcmV0dXJuIG5vcm0zMjxNSU5fSkFNT19WOworCX0KKwkKKwkvKgorCSAqIEdpdmVuIG5vcm0zMiBmb3IgSmFtbyBWIG9yIFQsCisJICogaXMgdGhpcyBhIEphbW8gVj8KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSmFtb1ZUTm9ybTMySmFtb1YobG9uZyBub3JtMzIpIHsKKwkgICAgcmV0dXJuIG5vcm0zMjxKQU1PX1ZfVE9QOworCX0KKwkKKwkvKiBkYXRhIGFjY2VzcyBwcmltaXRpdmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJCisJcHVibGljIHN0YXRpYyBsb25nLyp1bnNpZ25lZCovIGdldE5vcm0zMihjaGFyIGMpIHsKKyAgICAgICAgcmV0dXJuICgoVU5TSUdORURfSU5UX01BU0spICYgKG5vcm1UcmllSW1wbC5ub3JtVHJpZS5nZXRMZWFkVmFsdWUoYykpKTsKKwl9CisJCisJcHVibGljIHN0YXRpYyBsb25nLyp1bnNpZ25lZCovIGdldE5vcm0zMkZyb21TdXJyb2dhdGVQYWlyKGxvbmcgbm9ybTMyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYzIpIHsKKwkgICAgLyoKKwkgICAgICogdGhlIHN1cnJvZ2F0ZSBpbmRleCBpbiBub3JtMzIgc3RvcmVzIG9ubHkgdGhlIG51bWJlciBvZiB0aGUgc3Vycm9nYXRlCisgICAgICAgICAqIGluZGV4IGJsb2NrIHNlZSBnZW5ub3JtL3N0b3JlLmMvZ2V0Rm9sZGVkTm9ybVZhbHVlKCkKKwkgICAgICovCisJICAgIHJldHVybiAoKFVOU0lHTkVEX0lOVF9NQVNLKSAmIAorICAgICAgICAgICAgICAgICAgICBub3JtVHJpZUltcGwubm9ybVRyaWUuZ2V0VHJhaWxWYWx1ZSgoaW50KW5vcm0zMiwgYzIpKTsKKwl9CisJcHJpdmF0ZSBzdGF0aWMgbG9uZyBnZXROb3JtMzIoaW50IGMpeworICAgICAgICByZXR1cm4gKFVOU0lHTkVEX0lOVF9NQVNLJihub3JtVHJpZUltcGwubm9ybVRyaWUuZ2V0Q29kZVBvaW50VmFsdWUoYykpKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBnZXROb3JtMzIoaW50IGMsaW50IG1hc2speworICAgICAgICBsb25nLyp1bnNpZ25lZCovIG5vcm0zMj0gZ2V0Tm9ybTMyKFVURjE2LmdldExlYWRTdXJyb2dhdGUoYykpOworICAgICAgICBpZigoKG5vcm0zMiZtYXNrKT4wKSAmJiBpc05vcm0zMkxlYWRTdXJyb2dhdGUobm9ybTMyKSkgeworICAgICAgICAgICAgLyogYyBpcyBhIGxlYWQgc3Vycm9nYXRlLCBnZXQgdGhlIHJlYWwgbm9ybTMyICovCisgICAgICAgICAgICBub3JtMzI9Z2V0Tm9ybTMyRnJvbVN1cnJvZ2F0ZVBhaXIobm9ybTMyLFVURjE2LmdldFRyYWlsU3Vycm9nYXRlKGMpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9ybTMyOyAKKyAgICB9CisJCisgICAgLyoKKwkgKiBnZXQgYSBub3JtMzIgZnJvbSB0ZXh0IHdpdGggY29tcGxldGUgY29kZSBwb2ludHMKKwkgKiAobGlrZSBmcm9tIGRlY29tcG9zaXRpb25zKQorCSAqLworCXByaXZhdGUgc3RhdGljIGxvbmcvKnVuc2lnbmVkKi8gZ2V0Tm9ybTMyKGNoYXJbXSBwLGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWFzaykgeworCSAgICBsb25nLyp1bnNpZ25lZCovIG5vcm0zMj0gZ2V0Tm9ybTMyKHBbc3RhcnRdKTsKKwkgICAgaWYoKChub3JtMzImbWFzayk+MCkgJiYgaXNOb3JtMzJMZWFkU3Vycm9nYXRlKG5vcm0zMikpIHsKKwkgICAgICAgIC8qICpwIGlzIGEgbGVhZCBzdXJyb2dhdGUsIGdldCB0aGUgcmVhbCBub3JtMzIgKi8KKwkgICAgICAgIG5vcm0zMj1nZXROb3JtMzJGcm9tU3Vycm9nYXRlUGFpcihub3JtMzIsIHBbc3RhcnQrMV0pOworCSAgICB9CisJICAgIHJldHVybiBub3JtMzI7CisJfQorCisJcHVibGljIHN0YXRpYyBjaGFyCWdldEZDRDE2KGNoYXIgYykgeworCSAgICByZXR1cm4gIGZjZFRyaWVJbXBsLmZjZFRyaWUuZ2V0TGVhZFZhbHVlKGMpOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIGNoYXIgZ2V0RkNEMTZGcm9tU3Vycm9nYXRlUGFpcihjaGFyIGZjZDE2LCBjaGFyIGMyKSB7CisJICAgIC8qIHRoZSBzdXJyb2dhdGUgaW5kZXggaW4gZmNkMTYgaXMgYW4gYWJzb2x1dGUgb2Zmc2V0IG92ZXIgdGhlIAorICAgICAgICAgKiBzdGFydCBvZiBzdGFnZSAxIAorICAgICAgICAgKiAqLworCSAgICByZXR1cm4gZmNkVHJpZUltcGwuZmNkVHJpZS5nZXRUcmFpbFZhbHVlKGZjZDE2LCBjMik7CisJfQorICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldEZDRDE2KGludCBjKSB7CisgICAgICAgIHJldHVybiAgZmNkVHJpZUltcGwuZmNkVHJpZS5nZXRWYWx1ZShjKTsKKyAgICB9CisgICAgCQorCXByaXZhdGUgc3RhdGljIGludCBnZXRFeHRyYURhdGFJbmRleChsb25nIG5vcm0zMikgeworCSAgICByZXR1cm4gKGludCkobm9ybTMyPj5FWFRSQV9TSElGVCk7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIERlY29tcG9zZUFyZ3N7CisJCWludCAvKnVuc2lnbmVkIGJ5dGUqLyBjYzsKKwkJaW50IC8qdW5zaWduZWQgYnl0ZSovIHRyYWlsQ0M7CisJCWludCBsZW5ndGg7CisJfQorICAgIC8qKgorICAgICAqIAorICAgICAqIGdldCB0aGUgY2Fub25pY2FsIG9yIGNvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbiBmb3Igb25lIGNoYXJhY3RlciAKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIGluZGV4IGludG8gdGhlIGV4dHJhRGF0YSBhcnJheQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludC8qaW5kZXgqLyBkZWNvbXBvc2UobG9uZy8qdW5zaWduZWQqLyBub3JtMzIsIAorICAgIAkJCQkJCQkgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIHFjTWFzaywgCisgICAgCQkJCQkJCSAgICAgICAgICBEZWNvbXBvc2VBcmdzIGFyZ3MpIHsKKyAgICAgICAgaW50IHA9IGdldEV4dHJhRGF0YUluZGV4KG5vcm0zMik7CisgICAgICAgIGFyZ3MubGVuZ3RoPWV4dHJhRGF0YVtwKytdOworICAgIAorICAgICAgICBpZigobm9ybTMyJnFjTWFzayZRQ19ORktEKSE9MCAmJiBhcmdzLmxlbmd0aD49MHgxMDApIHsKKyAgICAgICAgICAgIC8qIHVzZSBjb21wYXRpYmlsaXR5IGRlY29tcG9zaXRpb24sIHNraXAgY2Fub25pY2FsIGRhdGEgKi8KKyAgICAgICAgICAgIHArPSgoYXJncy5sZW5ndGg+PjcpJjEpKyhhcmdzLmxlbmd0aCZERUNPTVBfTEVOR1RIX01BU0spOworICAgICAgICAgICAgYXJncy5sZW5ndGg+Pj04OworICAgICAgICB9CisgICAgCisgICAgICAgIGlmKChhcmdzLmxlbmd0aCZERUNPTVBfRkxBR19MRU5HVEhfSEFTX0NDKT4wKSB7CisgICAgICAgICAgICAvKiBnZXQgdGhlIGxlYWQgYW5kIHRyYWlsIGNjJ3MgKi8KKyAgICAgICAgICAgIGNoYXIgYm90aENDcz1leHRyYURhdGFbcCsrXTsKKyAgICAgICAgICAgIGFyZ3MuY2M9KFVOU0lHTkVEX0JZVEVfTUFTSykgJiAoYm90aENDcz4+OCk7CisgICAgICAgICAgICBhcmdzLnRyYWlsQ0M9KFVOU0lHTkVEX0JZVEVfTUFTSykgJiBib3RoQ0NzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogbGVhZCBhbmQgdHJhaWwgY2MncyBhcmUgYm90aCAwICovCisgICAgICAgICAgICBhcmdzLmNjPWFyZ3MudHJhaWxDQz0wOworICAgICAgICB9CisgICAgCisgICAgICAgIGFyZ3MubGVuZ3RoJj1ERUNPTVBfTEVOR1RIX01BU0s7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICAKKyAgICAgICAKKyAgICAvKioKKyAgICAgKiBnZXQgdGhlIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIGZvciBvbmUgY2hhcmFjdGVyIAorICAgICAqIEByZXR1cm4gaW5kZXggaW50byB0aGUgZXh0cmFEYXRhIGFycmF5CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGRlY29tcG9zZShsb25nLyp1bnNpZ25lZCovIG5vcm0zMiwgCisgICAgICAgICAgICAJCQkgICAgICAgICBEZWNvbXBvc2VBcmdzIGFyZ3MpIHsKKyAgICAgICAgICAgIAkJCSAJCisgICAgICAgIGludCBwPSBnZXRFeHRyYURhdGFJbmRleChub3JtMzIpOworICAgICAgICBhcmdzLmxlbmd0aD1leHRyYURhdGFbcCsrXTsKKyAgICAKKyAgICAgICAgaWYoKGFyZ3MubGVuZ3RoJkRFQ09NUF9GTEFHX0xFTkdUSF9IQVNfQ0MpPjApIHsKKyAgICAgICAgICAgIC8qIGdldCB0aGUgbGVhZCBhbmQgdHJhaWwgY2MncyAqLworICAgICAgICAgICAgY2hhciBib3RoQ0NzPWV4dHJhRGF0YVtwKytdOworICAgICAgICAgICAgYXJncy5jYz0oVU5TSUdORURfQllURV9NQVNLKSAmIChib3RoQ0NzPj44KTsKKyAgICAgICAgICAgIGFyZ3MudHJhaWxDQz0oVU5TSUdORURfQllURV9NQVNLKSAmIGJvdGhDQ3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBsZWFkIGFuZCB0cmFpbCBjYydzIGFyZSBib3RoIDAgKi8KKyAgICAgICAgICAgIGFyZ3MuY2M9YXJncy50cmFpbENDPTA7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgYXJncy5sZW5ndGgmPURFQ09NUF9MRU5HVEhfTUFTSzsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorICAgIAorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIE5leHRDQ0FyZ3N7CisgICAgCWNoYXJbXSBzb3VyY2U7CisgICAgCWludCBuZXh0OworICAgIAlpbnQgbGltaXQ7CisgICAgCWNoYXIgYzsKKyAgICAJY2hhciBjMjsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBnZXQgdGhlIGNvbWJpbmluZyBjbGFzcyBvZiAoYywgYzIpPSBhcmdzLnNvdXJjZVthcmdzLm5leHQrK10KKyAgICAgKiBiZWZvcmU6IGFyZ3MubmV4dDxhcmdzLmxpbWl0ICBhZnRlcjogYXJncy5uZXh0PD1hcmdzLmxpbWl0CisgICAgICogaWYgb25seSBvbmUgY29kZSB1bml0IGlzIHVzZWQsIHRoZW4gYzI9PTAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgLyp1bnNpZ25lZCBieXRlKi8gZ2V0TmV4dENDKE5leHRDQ0FyZ3MgYXJncykgeworICAgICAgICBsb25nIC8qdW5zaWduZWQqLyBub3JtMzI7CisgICAgCisgICAgICAgIGFyZ3MuYz1hcmdzLnNvdXJjZVthcmdzLm5leHQrK107CisgICAgICAgIAorICAgICAgICBub3JtMzI9IGdldE5vcm0zMihhcmdzLmMpOworICAgICAgICBpZigobm9ybTMyICYgQ0NfTUFTSyk9PTApIHsKKyAgICAgICAgICAgIGFyZ3MuYzI9MDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYoIWlzTm9ybTMyTGVhZFN1cnJvZ2F0ZShub3JtMzIpKSB7CisgICAgICAgICAgICAgICAgYXJncy5jMj0wOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBjIGlzIGEgbGVhZCBzdXJyb2dhdGUsIGdldCB0aGUgcmVhbCBub3JtMzIgKi8KKyAgICAgICAgICAgICAgICBpZihhcmdzLm5leHQhPWFyZ3MubGltaXQgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGFyZ3MuYzI9YXJncy5zb3VyY2VbYXJncy5uZXh0XSkpeworICAgICAgICAgICAgICAgICAgICArK2FyZ3MubmV4dDsKKyAgICAgICAgICAgICAgICAgICAgbm9ybTMyPWdldE5vcm0zMkZyb21TdXJyb2dhdGVQYWlyKG5vcm0zMiwgYXJncy5jMik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXJncy5jMj0wOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICByZXR1cm4gKGludCkoKFVOU0lHTkVEX0JZVEVfTUFTSykgJiAobm9ybTMyPj5DQ19TSElGVCkpOworICAgICAgICB9CisgICAgfQorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgUHJldkFyZ3N7CisJCWNoYXJbXSBzcmM7CisJCWludCBzdGFydDsKKwkJaW50IGN1cnJlbnQ7CisJCWNoYXIgYzsKKwkJY2hhciBjMjsKKwl9CisJCisgICAgLyoKKyAgICAgKiByZWFkIGJhY2t3YXJkcyBhbmQgZ2V0IG5vcm0zMgorICAgICAqIHJldHVybiAwIGlmIHRoZSBjaGFyYWN0ZXIgaXMgPG1pbkMKKyAgICAgKiBpZiBjMiE9MCB0aGVuIChjMiwgYykgaXMgYSBzdXJyb2dhdGUgcGFpciAocmV2ZXJzZWQgLSBjMiBpcyBmaXJzdCAKKyAgICAgKiBzdXJyb2dhdGUgYnV0IHJlYWQgc2Vjb25kISkKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBsb25nIC8qdW5zaWduZWQqLyBnZXRQcmV2Tm9ybTMyKFByZXZBcmdzIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWluQywgCisgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWFzaykgeworICAgICAgICBsb25nLyp1bnNpZ25lZCovIG5vcm0zMjsKKyAgICAKKyAgICAgICAgYXJncy5jPWFyZ3Muc3JjWy0tYXJncy5jdXJyZW50XTsKKyAgICAgICAgYXJncy5jMj0wOworICAgIAorICAgICAgICAvKiBjaGVjayBmb3IgYSBzdXJyb2dhdGUgYmVmb3JlIGdldHRpbmcgbm9ybTMyIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIAorICAgICAgICAgKiBwcmVkZWNyZW1lbnQgZnVydGhlciAKKyAgICAgICAgICovCisgICAgICAgIGlmKGFyZ3MuYzxtaW5DKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmKCFVVEYxNi5pc1N1cnJvZ2F0ZShhcmdzLmMpKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0Tm9ybTMyKGFyZ3MuYyk7CisgICAgICAgIH0gZWxzZSBpZihVVEYxNi5pc0xlYWRTdXJyb2dhdGUoYXJncy5jKSkgeworICAgICAgICAgICAgLyogdW5wYWlyZWQgZmlyc3Qgc3Vycm9nYXRlICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmKGFyZ3MuY3VycmVudCE9YXJncy5zdGFydCAmJiAKKyAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGFyZ3MuYzI9YXJncy5zcmNbYXJncy5jdXJyZW50LTFdKSkgeworICAgICAgICAgICAgLS1hcmdzLmN1cnJlbnQ7CisgICAgICAgICAgICBub3JtMzI9Z2V0Tm9ybTMyKGFyZ3MuYzIpOworICAgIAorICAgICAgICAgICAgaWYoKG5vcm0zMiZtYXNrKT09MCkgeworICAgICAgICAgICAgICAgIC8qIGFsbCBzdXJyb2dhdGUgcGFpcnMgd2l0aCB0aGlzIGxlYWQgc3Vycm9nYXRlIGhhdmUgCisgICAgICAgICAgICAgICAgICogb25seSBpcnJlbGV2YW50IGRhdGEgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIG5vcm0zMiBtdXN0IGJlIGEgc3Vycm9nYXRlIHNwZWNpYWwgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm9ybTMyRnJvbVN1cnJvZ2F0ZVBhaXIobm9ybTMyLCBhcmdzLmMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogdW5wYWlyZWQgc2Vjb25kIHN1cnJvZ2F0ZSAqLworICAgICAgICAgICAgYXJncy5jMj0wOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBnZXQgdGhlIGNvbWJpbmluZyBjbGFzcyBvZiAoYywgYzIpPSotLXAKKyAgICAgKiBiZWZvcmU6IHN0YXJ0PHAgIGFmdGVyOiBzdGFydDw9cAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCAvKnVuc2lnbmVkIGJ5dGUqLyBnZXRQcmV2Q0MoUHJldkFyZ3MgYXJncykgeworCisgICAgICAgIHJldHVybiAoaW50KSgoVU5TSUdORURfQllURV9NQVNLKSYoZ2V0UHJldk5vcm0zMihhcmdzLCBNSU5fV0lUSF9MRUFEX0NDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NfTUFTSyk+PkNDX1NISUZUKSk7CisgICAgfQorCisJLyoKKwkgKiBpcyB0aGlzIGEgc2FmZSBib3VuZGFyeSBjaGFyYWN0ZXIgZm9yIE5GKkQ/CisJICogKGxlYWQgY2M9PTApCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzTkZEU2FmZShsb25nLyp1bnNpZ25lZCovIG5vcm0zMiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovY2NPclFDTWFzaywgCisJCQkJCSAgICAgICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIGRlY29tcFFDTWFzaykgeworCSAgICBpZigobm9ybTMyJmNjT3JRQ01hc2spPT0wKSB7CisJICAgICAgICByZXR1cm4gdHJ1ZTsgLyogY2M9PTAgYW5kIG5vIGRlY29tcG9zaXRpb246IHRoaXMgaXMgTkYqRCBzYWZlICovCisJICAgIH0KKwkKKwkgICAgLyogaW5zcGVjdCBpdHMgZGVjb21wb3NpdGlvbiAtIG1heWJlIGEgSGFuZ3VsIGJ1dCBub3QgYSBzdXJyb2dhdGUgaGVyZSovCisJICAgIGlmKGlzTm9ybTMyUmVndWxhcihub3JtMzIpICYmIChub3JtMzImZGVjb21wUUNNYXNrKSE9MCkgeworCSAgICAgICAgRGVjb21wb3NlQXJncyBhcmdzPW5ldyBEZWNvbXBvc2VBcmdzKCk7CisJICAgICAgICAvKiBkZWNvbXBvc2VzLCBnZXQgZXZlcnl0aGluZyBmcm9tIHRoZSB2YXJpYWJsZS1sZW5ndGggZXh0cmEgZGF0YSAqLworCSAgICAgICAgZGVjb21wb3NlKG5vcm0zMiwgZGVjb21wUUNNYXNrLCBhcmdzKTsKKwkgICAgICAgIHJldHVybiBhcmdzLmNjPT0wOworCSAgICB9IGVsc2UgeworCSAgICAgICAgLyogbm8gZGVjb21wb3NpdGlvbiAob3IgSGFuZ3VsKSwgdGVzdCB0aGUgY2MgZGlyZWN0bHkgKi8KKwkgICAgICAgIHJldHVybiAobm9ybTMyJkNDX01BU0spPT0wOworCSAgICB9CisJfQorCQorCS8qCisJICogaXMgdGhpcyAob3IgZG9lcyBpdHMgZGVjb21wb3NpdGlvbiBiZWdpbiB3aXRoKSBhICJ0cnVlIHN0YXJ0ZXIiPworCSAqIChjYz09MCBhbmQgTkYqQ19ZRVMpCisJICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJ1ZVN0YXJ0ZXIobG9uZy8qdW5zaWduZWQqLyBub3JtMzIsIAorCQkJCQkJCQkgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIGNjT3JRQ01hc2ssIAorCQkJCQkJCQkgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIGRlY29tcFFDTWFzaykgeworCSAgICBpZigobm9ybTMyJmNjT3JRQ01hc2spPT0wKSB7CisJICAgICAgICByZXR1cm4gdHJ1ZTsgLyogdGhpcyBpcyBhIHRydWUgc3RhcnRlciAoY291bGQgYmUgSGFuZ3VsIG9yIEphbW8gTCkqLworCSAgICB9CisJCisJICAgIC8qIGluc3BlY3QgaXRzIGRlY29tcG9zaXRpb24gLSBub3QgYSBIYW5ndWwgb3IgYSBzdXJyb2dhdGUgaGVyZSAqLworCSAgICBpZigobm9ybTMyJmRlY29tcFFDTWFzaykhPTApIHsKKwkgICAgICAgIGludCBwOyAvKiBpbmRleCBpbnRvIGV4dHJhIGRhdGEgYXJyYXkgKi8KKwkgICAgICAgIERlY29tcG9zZUFyZ3MgYXJncz1uZXcgRGVjb21wb3NlQXJncygpOworCSAgICAgICAgLyogZGVjb21wb3NlcywgZ2V0IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgdmFyaWFibGUtbGVuZ3RoIGV4dHJhIGRhdGEgKi8KKwkgICAgICAgIHA9ZGVjb21wb3NlKG5vcm0zMiwgZGVjb21wUUNNYXNrLCBhcmdzKTsKKwkgICAgICAKKwkgICAgICAgIGlmKGFyZ3MuY2M9PTApIHsKKwkgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gcWNNYXNrPWNjT3JRQ01hc2smUUNfTUFTSzsKKwkKKwkgICAgICAgICAgICAvKiBkb2VzIGl0IGJlZ2luIHdpdGggTkZDX1lFUz8gKi8KKwkgICAgICAgICAgICBpZigoZ2V0Tm9ybTMyKGV4dHJhRGF0YSxwLCBxY01hc2spJnFjTWFzayk9PTApIHsKKwkgICAgICAgICAgICAgICAgLyogeWVzLCB0aGUgZGVjb21wb3NpdGlvbiBiZWdpbnMgd2l0aCBhIHRydWUgc3RhcnRlciAqLworCSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgIH0KKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKworCS8qIHJlb3JkZXIgVVRGLTE2IGluLXBsYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkKKwkvKioKKwkgKiBzaW1wbGVyLCBzaW5nbGUtY2hhcmFjdGVyIHZlcnNpb24gb2YgbWVyZ2VPcmRlcmVkKCkgLQorCSAqIGJ1YmJsZS1pbnNlcnQgb25lIHNpbmdsZSBjb2RlIHBvaW50IGludG8gdGhlIHByZWNlZGluZyBzdHJpbmcKKwkgKiB3aGljaCBpcyBhbHJlYWR5IGNhbm9uaWNhbGx5IG9yZGVyZWQKKwkgKiAoYywgYzIpIG1heSBvciBtYXkgbm90IHlldCBoYXZlIGJlZW4gaW5zZXJ0ZWQgYXQgc3JjW2N1cnJlbnRdLi5zcmNbcF0KKwkgKgorCSAqIGl0IG11c3QgYmUgcD1jdXJyZW50K2xlbmd0aG9mKGMsIGMyKSBpLmUuIHA9Y3VycmVudCsoYzI9PTAgPyAxIDogMikKKwkgKgorCSAqIGJlZm9yZTogc3JjW3N0YXJ0XS4uc3JjW2N1cnJlbnRdIGlzIGFscmVhZHkgb3JkZXJlZCwgYW5kCisJICogICAgICAgICBzcmNbY3VycmVudF0uLnNyY1twXSAgICAgbWF5IG9yIG1heSBub3QgaG9sZCAoYywgYzIpIGJ1dAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3RoIGFzIChjLCBjMikKKwkgKiBhZnRlcjogc3JjW3N0YXJ0XS4uc3JjW3BdIGlzIG9yZGVyZWQKKwkgKgorCSAqIEByZXR1cm4gdGhlIHRyYWlsaW5nIGNvbWJpbmluZyBjbGFzcworCSAqLworCXByaXZhdGUgc3RhdGljIGludC8qdW5zaWduZWQgYnl0ZSovIGluc2VydE9yZGVyZWQoY2hhcltdIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIAorCQkJCQkJCQkJCQkgICAgICAgICAgaW50IGN1cnJlbnQsIGludCBwLAorCSAgICAgICAgICAgICAgIAkJCQkJCQkgICAgICAgICAgY2hhciBjLCBjaGFyIGMyLCAKKwkgICAgICAgICAgICAgICAJCQkJCQkJICAgICAgICAgIGludC8qdW5zaWduZWQgYnl0ZSovIGNjKSB7CisJICAgIGludCBiYWNrLCBwcmVCYWNrOworCSAgICBpbnQgcjsKKwkgICAgaW50IHByZXZDQywgdHJhaWxDQz1jYzsKKwkKKwkgICAgaWYoc3RhcnQ8Y3VycmVudCAmJiBjYyE9MCkgeworCSAgICAgICAgLy8gc2VhcmNoIGZvciB0aGUgaW5zZXJ0aW9uIHBvaW50IHdoZXJlIGNjPj1wcmV2Q0MgCisJICAgICAgICBwcmVCYWNrPWJhY2s9Y3VycmVudDsKKwkgICAgICAgIFByZXZBcmdzIHByZXZBcmdzID0gbmV3IFByZXZBcmdzKCk7CisJICAgICAgICBwcmV2QXJncy5jdXJyZW50ICA9IGN1cnJlbnQ7CisJICAgICAgICBwcmV2QXJncy5zdGFydCAgICA9IHN0YXJ0OworCSAgICAgICAgcHJldkFyZ3Muc3JjCSAgPSBzb3VyY2U7CisJICAgICAgICAvLyBnZXQgdGhlIHByZXZDQyAKKwkgICAgICAgIHByZXZDQz1nZXRQcmV2Q0MocHJldkFyZ3MpOworCSAgICAgICAgcHJlQmFjayA9IHByZXZBcmdzLmN1cnJlbnQ7CisJICAgICAgICAKKwkgICAgICAgIGlmKGNjPHByZXZDQykgeworCSAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBiZSB0aGUgbGFzdCBjb2RlIHBvaW50LCBzbyBrZWVwIGl0cyBjYyAKKwkgICAgICAgICAgICB0cmFpbENDPXByZXZDQzsKKwkgICAgICAgICAgICBiYWNrPXByZUJhY2s7CisJICAgICAgICAgICAgd2hpbGUoc3RhcnQ8cHJlQmFjaykgeworCSAgICAgICAgICAgICAgICBwcmV2Q0M9Z2V0UHJldkNDKHByZXZBcmdzKTsKKwkgICAgICAgICAgICAgICAgcHJlQmFjaz1wcmV2QXJncy5jdXJyZW50OworCSAgICAgICAgICAgICAgICBpZihjYz49cHJldkNDKSB7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBiYWNrPXByZUJhY2s7CisJICAgICAgICAgICAgfQorCQorCSAgICAgICAgICAgIAorCSAgICAgICAgICAgIC8vIHRoaXMgaXMgd2hlcmUgd2UgYXJlIHJpZ2h0IG5vdyB3aXRoIGFsbCB0aGVzZSBpbmRpY2llczoKKwkgICAgICAgICAgICAvLyBbc3RhcnRdLi5bcFByZUJhY2tdIDAuLj8gY29kZSBwb2ludHMgdGhhdCB3ZSBjYW4gaWdub3JlCisJICAgICAgICAgICAgLy8gW3BQcmVCYWNrXS4uW3BCYWNrXSAwLi4xIGNvZGUgcG9pbnRzIHdpdGggcHJldkNDPD1jYworCSAgICAgICAgICAgIC8vIFtwQmFja10uLltjdXJyZW50XSAwLi5uIGNvZGUgcG9pbnRzIHdpdGggPmNjLCBtb3ZlIHVwIHRvIGluc2VydCAoYywgYzIpCisJICAgICAgICAgICAgLy8gW2N1cnJlbnRdLi5bcF0gICAgICAgICAxIGNvZGUgcG9pbnQgKGMsIGMyKSB3aXRoIGNjCisJICAgICAgICAgICAgIAorCSAgICAgICAgICAgIC8vIG1vdmUgdGhlIGNvZGUgdW5pdHMgaW4gYmV0d2VlbiB1cCAKKwkgICAgICAgICAgICByPXA7CisJICAgICAgICAgICAgZG8geworCSAgICAgICAgICAgICAgICBzb3VyY2VbLS1yXT1zb3VyY2VbLS1jdXJyZW50XTsKKwkgICAgICAgICAgICB9IHdoaWxlKGJhY2shPWN1cnJlbnQpOworCSAgICAgICAgfQorCSAgICB9CisJCisJICAgIC8vIGluc2VydCAoYywgYzIpIAorCSAgICBzb3VyY2VbY3VycmVudF09YzsKKwkgICAgaWYoYzIhPTApIHsKKwkgICAgICAgIHNvdXJjZVsoY3VycmVudCsxKV09YzI7CisJICAgIH0KKwkKKwkgICAgLy8gd2Uga25vdyB0aGUgY2Mgb2YgdGhlIGxhc3QgY29kZSBwb2ludCAKKwkgICAgcmV0dXJuIHRyYWlsQ0M7CisJfQorCQorCS8qKgorCSAqIG1lcmdlIHR3byBVVEYtMTYgc3RyaW5nIHBhcnRzIHRvZ2V0aGVyCisJICogdG8gY2Fub25pY2FsbHkgb3JkZXIgKG9yZGVyIGJ5IGNvbWJpbmluZyBjbGFzc2VzKSB0aGVpciBjb25jYXRlbmF0aW9uCisJICoKKwkgKiB0aGUgdHdvIHN0cmluZ3MgbWF5IGFscmVhZHkgYmUgYWRqYWNlbnQsIHNvIHRoYXQgdGhlIG1lcmdpbmcgaXMgZG9uZSAKKyAgICAgKiBpbi1wbGFjZSBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIG5vdCBhZGphY2VudCwgdGhlbiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlCisgICAgICogZmlyc3Qgb25lIG11c3QgYmUgbGFyZ2UgZW5vdWdoCisJICogdGhlIHNlY29uZCBzdHJpbmcgbWF5IG9yIG1heSBub3QgYmUgb3JkZXJlZCBpbiBpdHNlbGYKKwkgKgorCSAqIGJlZm9yZTogW3N0YXJ0XS4uW2N1cnJlbnRdIGlzIGFscmVhZHkgb3JkZXJlZCwgYW5kCisJICogICAgICAgICBbbmV4dF0uLltsaW1pdF0gICAgbWF5IGJlIG9yZGVyZWQgaW4gaXRzZWxmLCBidXQKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGluIHJlbGF0aW9uIHRvIFtzdGFydC4uY3VycmVudFsKKwkgKiBhZnRlcjogW3N0YXJ0Li5jdXJyZW50KyhsaW1pdC1uZXh0KVsgaXMgb3JkZXJlZAorCSAqCisJICogdGhlIGFsZ29yaXRobSBpcyBhIHNpbXBsZSBidWJibGUtc29ydCB0aGF0IHRha2VzIHRoZSBjaGFyYWN0ZXJzIGZyb20gCisgICAgICogc3JjW25leHQrK10gYW5kIGluc2VydHMgdGhlbSBpbiBjb3JyZWN0IGNvbWJpbmluZyBjbGFzcyBvcmRlciBpbnRvIHRoZSAKKyAgICAgKiBwcmVjZWRpbmcgcGFydCBvZiB0aGUgc3RyaW5nCisJICoKKwkgKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBtdWNoIGxlc3Mgb2Z0ZW4gdGhhbiB0aGUgc2luZ2xlLWNvZGUgcG9pbnQKKwkgKiBpbnNlcnRPcmRlcmVkKCksIGl0IGp1c3QgdXNlcyB0aGF0IGZvciBlYXNpZXIgbWFpbnRlbmFuY2UKKwkgKgorCSAqIEByZXR1cm4gdGhlIHRyYWlsaW5nIGNvbWJpbmluZyBjbGFzcworCSAqLworCXByaXZhdGUgc3RhdGljIGludCAvKnVuc2lnbmVkIGJ5dGUqLyBtZXJnZU9yZGVyZWQoY2hhcltdIHNvdXJjZSwKKwkJCQkJCQkJCQkJCQkgIGludCBzdGFydCwgCisJCQkJCQkJCQkJCQkJICBpbnQgY3VycmVudCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBkYXRhLAorCQkJICAgICAgICAgICAgICAJCQkJCQkJICBpbnQgbmV4dCwgCisJCQkgICAgICAgICAgICAgIAkJCQkJCQkgIGludCBsaW1pdCwgCisJCQkgICAgICAgICAgICAgIAkJCQkJCQkgIGJvb2xlYW4gaXNPcmRlcmVkKSB7CisgICAgICAgICAgICBpbnQgcjsKKyAgICAgICAgICAgIGludCAvKnVuc2lnbmVkIGJ5dGUqLyBjYywgdHJhaWxDQz0wOworICAgICAgICAgICAgYm9vbGVhbiBhZGphY2VudDsKKyAgICAgICAgCisgICAgICAgICAgICBhZGphY2VudD0gY3VycmVudD09bmV4dDsKKyAgICAgICAgICAgIE5leHRDQ0FyZ3MgbmNBcmdzID0gbmV3IE5leHRDQ0FyZ3MoKTsKKyAgICAgICAgICAgIG5jQXJncy5zb3VyY2UgPSBkYXRhOworICAgICAgICAgICAgbmNBcmdzLm5leHQgICA9IG5leHQ7CisgICAgICAgICAgICBuY0FyZ3MubGltaXQgID0gbGltaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmKHN0YXJ0IT1jdXJyZW50IHx8ICFpc09yZGVyZWQpIHsKKyAgICAgICAgICAgICAgICAJCisgICAgICAgICAgICAgICAgd2hpbGUobmNBcmdzLm5leHQ8bmNBcmdzLmxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIGNjPWdldE5leHRDQyhuY0FyZ3MpOworICAgICAgICAgICAgICAgICAgICBpZihjYz09MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgYnViYmxlIGJhY2sgCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbENDPTA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGphY2VudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQ9bmNBcmdzLm5leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbY3VycmVudCsrXT1uY0FyZ3MuYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuY0FyZ3MuYzIhPTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtjdXJyZW50KytdPW5jQXJncy5jMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZihpc09yZGVyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9Y3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHI9Y3VycmVudCsobmNBcmdzLmMyPT0wID8gMSA6IDIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxDQz1pbnNlcnRPcmRlcmVkKHNvdXJjZSxzdGFydCwgY3VycmVudCwgciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNBcmdzLmMsIG5jQXJncy5jMiwgY2MpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudD1yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGlmKG5jQXJncy5uZXh0PT1uY0FyZ3MubGltaXQpIHsKKyAgICAgICAgICAgICAgICAvLyB3ZSBrbm93IHRoZSBjYyBvZiB0aGUgbGFzdCBjb2RlIHBvaW50IAorICAgICAgICAgICAgICAgIHJldHVybiB0cmFpbENDOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZighYWRqYWNlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY29weSB0aGUgc2Vjb25kIHN0cmluZyBwYXJ0IAorICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VbY3VycmVudCsrXT1kYXRhW25jQXJncy5uZXh0KytdOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKG5jQXJncy5uZXh0IT1uY0FyZ3MubGltaXQpOworICAgICAgICAgICAgICAgICAgICBuY0FyZ3MubGltaXQ9Y3VycmVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHJldkFyZ3MgcHJldkFyZ3MgPSBuZXcgUHJldkFyZ3MoKTsKKyAgICAgICAgICAgICAgICBwcmV2QXJncy5zcmMgICA9IGRhdGE7CisgICAgICAgICAgICAgICAgcHJldkFyZ3Muc3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICBwcmV2QXJncy5jdXJyZW50ID0gIG5jQXJncy5saW1pdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJldkNDKHByZXZBcmdzKTsKKyAgICAgICAgICAgIH0KKworCX0KKwlwcml2YXRlIHN0YXRpYyBpbnQgLyp1bnNpZ25lZCBieXRlKi8gbWVyZ2VPcmRlcmVkKGNoYXJbXSBzb3VyY2UsCisJCQkJCQkJCQkJCQkJICBpbnQgc3RhcnQsIAorCQkJCQkJCQkJCQkJCSAgaW50IGN1cnJlbnQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGF0YSwKKwkJCSAgICAgICAgICAgICAgCQkJCQkJCSAgZmluYWwgaW50IG5leHQsIAorCQkJICAgICAgICAgICAgICAJCQkJCQkJICBmaW5hbCBpbnQgbGltaXQpIHsKKwkgICAgcmV0dXJuIG1lcmdlT3JkZXJlZChzb3VyY2Usc3RhcnQsY3VycmVudCxkYXRhLG5leHQsbGltaXQsdHJ1ZSk7CisJfSAKKworICAgIAorICAgICAgCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrRkNEKGNoYXJbXSBzcmMsaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQpIHsKKworCSAgICBjaGFyIGZjZDE2LGMsYzI7CisJICAgIGludCBwcmV2Q0M9MCwgY2M7CisJCWludCBpID1zcmNTdGFydCwgbGVuZ3RoID0gc3JjTGltaXQ7CisJCisJICAgIGZvcig7OykgeworICAgICAgICAgICAgZm9yKDs7KSB7CisgICAgICAgICAgICAgICAgaWYoaT09bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZigoYz1zcmNbaSsrXSk8TUlOX1dJVEhfTEVBRF9DQykgeworICAgICAgICAgICAgICAgICAgICBwcmV2Q0M9KGludCktYzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYoKGZjZDE2PWdldEZDRDE2KGMpKT09MCkgeworICAgICAgICAgICAgICAgICAgICBwcmV2Q0M9MDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKwkgICAgICAgIC8vIGNoZWNrIG9uZSBhYm92ZS1taW5pbXVtLCByZWxldmFudCBjb2RlIHVuaXQgCisJICAgICAgICBpZihVVEYxNi5pc0xlYWRTdXJyb2dhdGUoYykpIHsKKwkgICAgICAgICAgICAvLyBjIGlzIGEgbGVhZCBzdXJyb2dhdGUsIGdldCB0aGUgcmVhbCBmY2QxNiAKKwkgICAgICAgICAgICBpZihpIT1sZW5ndGggJiYgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjMj1zcmNbaV0pKSB7CisJICAgICAgICAgICAgICAgICsraTsKKwkgICAgICAgICAgICAgICAgZmNkMTY9Z2V0RkNEMTZGcm9tU3Vycm9nYXRlUGFpcihmY2QxNiwgYzIpOworCSAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgIGZjZDE2PTA7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCisJICAgICAgICAvLyBwcmV2Q0MgaGFzIHZhbHVlcyBmcm9tIHRoZSBmb2xsb3dpbmcgcmFuZ2VzOgorCSAgICAgICAgLy8gMC4uMHhmZiAtdGhlIHByZXZpb3VzIHRyYWlsIGNvbWJpbmluZyBjbGFzcworCSAgICAgICAgLy8gPDAgICAgICAtdGhlIG5lZ2F0aXZlIHZhbHVlIG9mIHRoZSBwcmV2aW91cyBjb2RlIHVuaXQ7CisJICAgICAgICAvLyAgICAgICAgICB0aGF0IGNvZGUgdW5pdCB3YXMgPE1JTl9XSVRIX0xFQURfQ0MgYW5kIGl0cyBnZXRGQ0QxNigpCisJICAgICAgICAvLyAgICAgICAgICB3YXMgZGVmZXJyZWQgc28gdGhhdCBhdmVyYWdlIHRleHQgaXMgY2hlY2tlZCBmYXN0ZXIKKwkgICAgICAgIC8vCisJCisJICAgICAgICAvLyBjaGVjayB0aGUgY29tYmluaW5nIG9yZGVyIAorCSAgICAgICAgY2M9KGludCkoZmNkMTY+PjgpOworCSAgICAgICAgaWYoY2MhPTApIHsKKwkgICAgICAgICAgICBpZihwcmV2Q0M8MCkgeworCSAgICAgICAgICAgICAgICAvLyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHdhcyA8X05PUk1fTUlOX1dJVEhfTEVBRF9DQywgCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZ2V0IGl0cyB0cmFpbCBjYyAKKyAgICAgICAgICAgICAgICAgICAgLy8KKwkgICAgICAgICAgICAgICAgcHJldkNDPShpbnQpKGZjZFRyaWVJbXBsLmZjZFRyaWUuZ2V0Qk1QVmFsdWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpLXByZXZDQykmMHhmZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJICAgICAgICAgICAgfQorCQorCSAgICAgICAgICAgIGlmKGNjPHByZXZDQykgeworCSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcHJldkNDPShpbnQpKGZjZDE2JjB4ZmYpOworCSAgICB9CisJfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgTm9ybWFsaXplci5RdWlja0NoZWNrUmVzdWx0IHF1aWNrQ2hlY2soY2hhcltdIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNTdGFydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWluTm9NYXliZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBxY01hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFsbG93TWF5YmUpeworICAgICAgICAKKyAgICAgICAgaW50IGNjT3JRQ01hc2s7CisgICAgICAgIGxvbmcgbm9ybTMyOworICAgICAgICBjaGFyIGMsIGMyOworICAgICAgICBjaGFyIGNjLCBwcmV2Q0M7CisgICAgICAgIGxvbmcgcWNOb3JtMzI7CisgICAgICAgIE5vcm1hbGl6ZXIuUXVpY2tDaGVja1Jlc3VsdCByZXN1bHQ7CisgICAgICAgIENvbXBvc2VQYXJ0QXJncyBhcmdzID0gbmV3IENvbXBvc2VQYXJ0QXJncygpOworICAgICAgICBjaGFyW10gYnVmZmVyIDsKKyAgICAgICAgaW50IHN0YXJ0ID0gc3JjU3RhcnQ7CisgICAgICAgIAorICAgICAgICBpZighaXNEYXRhTG9hZGVkKSB7CisgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplci5NQVlCRTsKKyAgICAgICAgfQorICAgICAgICAvLyBpbml0aWFsaXplIAorICAgICAgICBjY09yUUNNYXNrPUNDX01BU0t8cWNNYXNrOworICAgICAgICByZXN1bHQ9Tm9ybWFsaXplci5ZRVM7CisgICAgICAgIHByZXZDQz0wOworICAgICAgICAgICAgICAgIAorICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgICAgIGlmKHNyY1N0YXJ0PT1zcmNMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZigoYz1zcmNbc3JjU3RhcnQrK10pPj1taW5Ob01heWJlICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoIG5vcm0zMj1nZXROb3JtMzIoYykpICYgY2NPclFDTWFzaykhPTApIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByZXZDQz0wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgCisgICAgICAgICAgICAvLyBjaGVjayBvbmUgYWJvdmUtbWluaW11bSwgcmVsZXZhbnQgY29kZSB1bml0IAorICAgICAgICAgICAgaWYoaXNOb3JtMzJMZWFkU3Vycm9nYXRlKG5vcm0zMikpIHsKKyAgICAgICAgICAgICAgICAvLyBjIGlzIGEgbGVhZCBzdXJyb2dhdGUsIGdldCB0aGUgcmVhbCBub3JtMzIgCisgICAgICAgICAgICAgICAgaWYoc3JjU3RhcnQhPXNyY0xpbWl0JiYgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjMj1zcmNbc3JjU3RhcnRdKSkgeworICAgICAgICAgICAgICAgICAgICArK3NyY1N0YXJ0OworICAgICAgICAgICAgICAgICAgICBub3JtMzI9Z2V0Tm9ybTMyRnJvbVN1cnJvZ2F0ZVBhaXIobm9ybTMyLGMyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBub3JtMzI9MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAvLyBjaGVjayB0aGUgY29tYmluaW5nIG9yZGVyIAorICAgICAgICAgICAgY2M9KGNoYXIpKChub3JtMzI+PkNDX1NISUZUKSYweEZGKTsKKyAgICAgICAgICAgIGlmKGNjIT0wICYmIGNjPHByZXZDQykgeworICAgICAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVyLk5POworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldkNDPWNjOworICAgIAorICAgICAgICAgICAgLy8gY2hlY2sgZm9yICJubyIgb3IgIm1heWJlIiBxdWljayBjaGVjayBmbGFncyAKKyAgICAgICAgICAgIHFjTm9ybTMyID0gbm9ybTMyICYgcWNNYXNrOworICAgICAgICAgICAgaWYoKHFjTm9ybTMyJiBRQ19BTllfTk8pPj0xKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0PSBOb3JtYWxpemVyLk5POworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmKHFjTm9ybTMyIT0wKSB7CisgICAgICAgICAgICAgICAgLy8gIm1heWJlIiBjYW4gb25seSBvY2N1ciBmb3IgTkZDIGFuZCBORktDIAorICAgICAgICAgICAgICAgIGlmKGFsbG93TWF5YmUpeworICAgICAgICAgICAgICAgICAgICByZXN1bHQ9Tm9ybWFsaXplci5NQVlCRTsKKyAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIGEgc2VjdGlvbiBhcm91bmQgaGVyZSB0byBzZWUgaWYgaXQgaXMgcmVhbGx5IAorICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemVkIG9yIG5vdCAKKyAgICAgICAgICAgICAgICAgICAgaW50IHByZXZTdGFydGVyOworICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gZGVjb21wUUNNYXNrOworICAgIAorICAgICAgICAgICAgICAgICAgICBkZWNvbXBRQ01hc2s9KHFjTWFzazw8MikmMHhmOyAvLyBkZWNvbXBvc2l0aW9uIHF1aWNrIGNoZWNrIG1hc2sgCisgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIHByZXZpb3VzIHN0YXJ0ZXIgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBzZXQgcHJldlN0YXJ0ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgCisgICAgICAgICAgICAgICAgICAgIHByZXZTdGFydGVyPXNyY1N0YXJ0LTE7IAorICAgICAgICAgICAgICAgICAgICBpZihVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKHNyY1twcmV2U3RhcnRlcl0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYWZlIGJlY2F1c2UgdW5wYWlyZWQgc3Vycm9nYXRlcyBkbyBub3QgcmVzdWx0IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gIm1heWJlIgorICAgICAgICAgICAgICAgICAgICAgICAgLS1wcmV2U3RhcnRlcjsgCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJldlN0YXJ0ZXI9ZmluZFByZXZpb3VzU3RhcnRlcihzcmMsIHN0YXJ0LCBwcmV2U3RhcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY09yUUNNYXNrLCBkZWNvbXBRQ01hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpbWluTm9NYXliZSk7CisgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIG5leHQgdHJ1ZSBzdGFydGVyIGluIFtzcmMuLmxpbWl0WyAtIG1vZGlmaWVzIAorICAgICAgICAgICAgICAgICAgICAvLyBzcmMgdG8gcG9pbnQgdG8gdGhlIG5leHQgc3RhcnRlciAKKyAgICAgICAgICAgICAgICAgICAgc3JjU3RhcnQ9ZmluZE5leHRTdGFydGVyKHNyYyxzcmNTdGFydCwgc3JjTGltaXQsIHFjTWFzaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvbXBRQ01hc2ssKGNoYXIpIG1pbk5vTWF5YmUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy9zZXQgdGhlIGFyZ3MgZm9yIGNvbXBvc2UgcGFydAorICAgICAgICAgICAgICAgICAgICBhcmdzLnByZXZDQyA9IHByZXZDQzsKKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIGRlY29tcG9zZSBhbmQgcmVjb21wb3NlIFtwcmV2U3RhcnRlci4uc3JjWyAKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gY29tcG9zZVBhcnQoYXJncyxwcmV2U3RhcnRlcixzcmMsc3JjU3RhcnQsc3JjTGltaXQscWNNYXNrKTsKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGFyZSB0aGUgbm9ybWFsaXplZCB2ZXJzaW9uIHdpdGggdGhlIG9yaWdpbmFsIAorICAgICAgICAgICAgICAgICAgICBpZigwIT1zdHJDb21wYXJlKGJ1ZmZlciwwLGFyZ3MubGVuZ3RoLHNyYyxwcmV2U3RhcnRlciwoc3JjU3RhcnQtcHJldlN0YXJ0ZXIpLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1Ob3JtYWxpemVyLk5POyAvLyBub3JtYWxpemF0aW9uIGRpZmZlcnMgCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSBhZnRlciB0aGUgbmV4dCBzdGFydGVyIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0gCisgICAgCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgLy8gbWFrZSBORkQgJiBORktEIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0RGVjb21wb3NpdGlvbihpbnQgYyAvKlVURi0zMiovICwgCisJCQkJCQkJCQkJYm9vbGVhbiBjb21wYXQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgIAkJY2hhcltdIGRlc3QsCisJCQkgICAgICAgICAgICAgICAgICAgICAgIAkJaW50IGRlc3RTdGFydCwgCisJCQkgICAgICAgICAgICAgICAgICAgICAgIAkJaW50IGRlc3RDYXBhY2l0eSkgeworCSAgICAgICAgCisJICAgIGlmKCAoVU5TSUdORURfSU5UX01BU0sgJiBjKTw9MHgxMGZmZmYpIHsKKwkgICAgICAgIGxvbmcgLyp1bnNpZ25lZCovIG5vcm0zMjsKKyAgICAgICAgICAgIGludCBxY01hc2s7CisJICAgICAgICBpbnQgbWluTm9NYXliZTsKKwkgICAgICAgIGludCBsZW5ndGg7CisJCisJICAgICAgICAvLyBpbml0aWFsaXplIAorCSAgICAgICAgaWYoIWNvbXBhdCkgeworCSAgICAgICAgICAgIG1pbk5vTWF5YmU9KGludClpbmRleGVzW0lOREVYX01JTl9ORkRfTk9fTUFZQkVdOworCSAgICAgICAgICAgIHFjTWFzaz1RQ19ORkQ7CisJICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIG1pbk5vTWF5YmU9KGludClpbmRleGVzW0lOREVYX01JTl9ORktEX05PX01BWUJFXTsKKwkgICAgICAgICAgICBxY01hc2s9UUNfTkZLRDsKKwkgICAgICAgIH0KKwkKKwkgICAgICAgIGlmKGM8bWluTm9NYXliZSkgeworCSAgICAgICAgICAgIC8vIHRyaXZpYWwgY2FzZSAKKwkgICAgICAgICAgICBpZihkZXN0Q2FwYWNpdHk+MCkgeworCSAgICAgICAgICAgICAgICBkZXN0WzBdPShjaGFyKWM7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHJldHVybiAtMTsKKwkgICAgICAgIH0KKwkKKwkgICAgICAgIC8qIGRhdGEgbG9va3VwICovCisJICAgICAgICBub3JtMzI9Z2V0Tm9ybTMyKGMpOworCSAgICAgICAgaWYoKG5vcm0zMiZxY01hc2spPT0wKSB7CisJICAgICAgICAgICAgLyogc2ltcGxlIGNhc2U6IG5vIGRlY29tcG9zaXRpb24gKi8KKwkgICAgICAgICAgICBpZihjPD0weGZmZmYpIHsKKwkgICAgICAgICAgICAgICAgaWYoZGVzdENhcGFjaXR5PjApIHsKKwkgICAgICAgICAgICAgICAgICAgIGRlc3RbMF09KGNoYXIpYzsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisJICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgaWYoZGVzdENhcGFjaXR5Pj0yKSB7CisJICAgICAgICAgICAgICAgICAgICBkZXN0WzBdPVVURjE2LmdldExlYWRTdXJyb2dhdGUoYyk7CisJICAgICAgICAgICAgICAgICAgICBkZXN0WzFdPVVURjE2LmdldFRyYWlsU3Vycm9nYXRlKGMpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHJldHVybiAtMjsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9IGVsc2UgaWYoaXNOb3JtMzJIYW5ndWxPckphbW8obm9ybTMyKSkgeworCSAgICAgICAgICAgIC8qIEhhbmd1bCBzeWxsYWJsZTogZGVjb21wb3NlIGFsZ29yaXRobWljYWxseSAqLworCSAgICAgICAgICAgIGNoYXIgYzI7CisJCisJICAgICAgICAgICAgYy09SEFOR1VMX0JBU0U7CisJCisJICAgICAgICAgICAgYzI9KGNoYXIpKGMlSkFNT19UX0NPVU5UKTsKKwkgICAgICAgICAgICBjLz1KQU1PX1RfQ09VTlQ7CisJICAgICAgICAgICAgaWYoYzI+MCkgeworCSAgICAgICAgICAgICAgICBpZihkZXN0Q2FwYWNpdHk+PTMpIHsKKwkgICAgICAgICAgICAgICAgICAgIGRlc3RbMl09KGNoYXIpKEpBTU9fVF9CQVNFK2MyKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBsZW5ndGg9MzsKKwkgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICBsZW5ndGg9MjsKKwkgICAgICAgICAgICB9CisJCisJICAgICAgICAgICAgaWYoZGVzdENhcGFjaXR5Pj0yKSB7CisJICAgICAgICAgICAgICAgIGRlc3RbMV09KGNoYXIpKEpBTU9fVl9CQVNFK2MlSkFNT19WX0NPVU5UKTsKKwkgICAgICAgICAgICAgICAgZGVzdFswXT0oY2hhcikoSkFNT19MX0JBU0UrYy9KQU1PX1ZfQ09VTlQpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAvKiBjIGRlY29tcG9zZXMsIGdldCBldmVyeXRoaW5nIGZyb20gdGhlIHZhcmlhYmxlLWxlbmd0aCBleHRyYSAKKyAgICAgICAgICAgICAgICAgKiBkYXRhIAorICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgIGludCBwLCBsaW1pdDsKKwkgICAgICAgICAgICBEZWNvbXBvc2VBcmdzIGFyZ3MgPSBuZXcgRGVjb21wb3NlQXJncygpOworCSAgICAgICAgICAgIC8qIHRoZSBpbmRleCBpbnRvIGV4dHJhIGRhdGEgYXJyYXkqLyAJCQkJCisJICAgICAgICAgICAgcD1kZWNvbXBvc2Uobm9ybTMyLCBxY01hc2ssIGFyZ3MpOworCSAgICAgICAgICAgIGlmKGFyZ3MubGVuZ3RoPD1kZXN0Q2FwYWNpdHkpIHsKKwkgICAgICAgICAgICAgICAgbGltaXQ9cCthcmdzLmxlbmd0aDsKKwkgICAgICAgICAgICAgICAgZG8geworCSAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0U3RhcnQrK109ZXh0cmFEYXRhW3ArK107CisJICAgICAgICAgICAgICAgIH0gd2hpbGUocDxsaW1pdCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHJldHVybiBhcmdzLmxlbmd0aDsKKwkgICAgICAgIH0KKwkgICAgfSBlbHNlIHsKKwkgICAgICAgIHJldHVybiAwOworCSAgICB9CisJfQorCisJCisJcHVibGljIHN0YXRpYyBpbnQgZGVjb21wb3NlKGNoYXJbXSBzcmMsaW50IHNyY0luZGV4LGludCBzcmNMaW1pdCwKKwkJCQkJCQkJY2hhcltdIGRlc3QsaW50IGRlc3RJbmRleCxpbnQgZGVzdExpbWl0LAorCQkJCQkJIAkJYm9vbGVhbiBjb21wYXQsaW50W10gb3V0VHJhaWxDQykgeworCSAgICAgICAgICAgCQkJIAkKKwkgICAgY2hhcltdIGJ1ZmZlciA9IG5ldyBjaGFyWzNdOworCSAgICBpbnQgcHJldlNyYzsKKwkgICAgbG9uZyBub3JtMzI7CisgICAgICAgIGludCBjY09yUUNNYXNrLCBxY01hc2s7CisJICAgIGludCByZW9yZGVyU3RhcnRJbmRleCwgbGVuZ3RoOworCSAgICBjaGFyIGMsIGMyLCBtaW5Ob01heWJlOworCSAgICBpbnQvKnVuc2lnbmVkIGJ5dGUqLyBjYywgcHJldkNDLCB0cmFpbENDOworCQljaGFyW10gcDsKKwkJaW50IHBTdGFydDsKKwkgICAgaWYoIWNvbXBhdCkgeworCSAgICAgICAgbWluTm9NYXliZT0oY2hhcilpbmRleGVzW0lOREVYX01JTl9ORkRfTk9fTUFZQkVdOworCSAgICAgICAgcWNNYXNrPVFDX05GRDsKKwkgICAgfSBlbHNlIHsKKwkgICAgICAgIG1pbk5vTWF5YmU9KGNoYXIpaW5kZXhlc1tJTkRFWF9NSU5fTkZLRF9OT19NQVlCRV07CisJICAgICAgICBxY01hc2s9UUNfTkZLRDsKKwkgICAgfQorCQorCSAgICAvKiBpbml0aWFsaXplICovCisJICAgIGNjT3JRQ01hc2s9Q0NfTUFTS3xxY01hc2s7CisJICAgIHJlb3JkZXJTdGFydEluZGV4PTA7CisJICAgIHByZXZDQz0wOworCSAgICBub3JtMzI9MDsKKwkgICAgYz0wOworCQlwU3RhcnQ9MDsKKwkgICAgCisJICAgIGZvcig7OykgeworCSAgICAgICAgLyogY291bnQgY29kZSB1bml0cyBiZWxvdyB0aGUgbWluaW11bSBvciB3aXRoIGlycmVsZXZhbnQgZGF0YSBmb3IgCisgICAgICAgICAgICAgKiB0aGUgcXVpY2sgY2hlY2sgCisgICAgICAgICAgICAgKi8KKwkgICAgICAgIHByZXZTcmM9c3JjSW5kZXg7CisKKyAgICAgICAgICAgIHdoaWxlKHNyY0luZGV4IT1zcmNMaW1pdCAmJigoYz1zcmNbc3JjSW5kZXhdKTxtaW5Ob01heWJlIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm9ybTMyPWdldE5vcm0zMihjKSkmY2NPclFDTWFzayk9PTApKXsKKyAgICAgICAgICAgICAgICBwcmV2Q0M9MDsKKyAgICAgICAgICAgICAgICArK3NyY0luZGV4OworICAgICAgICAgICAgfQorCisJICAgICAgICAvKiBjb3B5IHRoZXNlIGNvZGUgdW5pdHMgYWxsIGF0IG9uY2UgKi8KKwkgICAgICAgIGlmKHNyY0luZGV4IT1wcmV2U3JjKSB7CisJICAgICAgICAgICAgbGVuZ3RoPShpbnQpKHNyY0luZGV4LXByZXZTcmMpOworCSAgICAgICAgICAgIGlmKChkZXN0SW5kZXgrbGVuZ3RoKTw9ZGVzdExpbWl0KSB7CisJICAgICAgICAgICAgCVN5c3RlbS5hcnJheWNvcHkoc3JjLHByZXZTcmMsZGVzdCxkZXN0SW5kZXgsbGVuZ3RoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgIAorCSAgICAgICAgICAgIGRlc3RJbmRleCs9bGVuZ3RoOworCSAgICAgICAgICAgIHJlb3JkZXJTdGFydEluZGV4PWRlc3RJbmRleDsKKwkgICAgICAgIH0KKwkKKwkgICAgICAgIC8qIGVuZCBvZiBzb3VyY2UgcmVhY2hlZD8gKi8KKwkgICAgICAgIGlmKHNyY0luZGV4PT1zcmNMaW1pdCkgeworCSAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgfQorCQorCSAgICAgICAgLyogYyBhbHJlYWR5IGNvbnRhaW5zICpzcmMgYW5kIG5vcm0zMiBpcyBzZXQgZm9yIGl0LCBpbmNyZW1lbnQgc3JjKi8KKwkgICAgICAgICsrc3JjSW5kZXg7CisJCisJICAgICAgICAvKiBjaGVjayBvbmUgYWJvdmUtbWluaW11bSwgcmVsZXZhbnQgY29kZSB1bml0ICovCisJICAgICAgICAvKgorCSAgICAgICAgICogZ2VuZXJhbGx5LCBzZXQgcCBhbmQgbGVuZ3RoIHRvIHRoZSBkZWNvbXBvc2l0aW9uIHN0cmluZworCSAgICAgICAgICogaW4gc2ltcGxlIGNhc2VzLCBwPT1OVUxMIGFuZCAoYywgYzIpIHdpbGwgaG9sZCB0aGUgbGVuZ3RoIGNvZGUgCisgICAgICAgICAgICAgKiB1bml0cyB0byBhcHBlbmQgaW4gYWxsIGNhc2VzLCBzZXQgY2MgdG8gdGhlIGxlYWQgYW5kIHRyYWlsQ0MgdG8gCisgICAgICAgICAgICAgKiB0aGUgdHJhaWwgY29tYmluaW5nIGNsYXNzCisJICAgICAgICAgKgorCSAgICAgICAgICogdGhlIGZvbGxvd2luZyBtZXJnZS1zb3J0IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpbnRvIHRoZSAKKyAgICAgICAgICAgICAqIHByZWNlZGluZywgY2Fub25pY2FsbHkgb3JkZXJlZCByZXN1bHQgdGV4dCB3aWxsIHVzZSB0aGUgCisgICAgICAgICAgICAgKiBvcHRpbWl6ZWQgaW5zZXJ0T3JkZXJlZCgpCisJICAgICAgICAgKiBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzaW5nbGUgY29kZSBwb2ludCB0byBwcm9jZXNzOworCSAgICAgICAgICogdGhpcyBpcyBpbmRpY2F0ZWQgd2l0aCBwPT1OVUxMLCBhbmQgKGMsIGMyKSBpcyB0aGUgY2hhcmFjdGVyIHRvIAorICAgICAgICAgICAgICogaW5zZXJ0CisJICAgICAgICAgKiAoKGMsIDApIGZvciBhIEJNUCBjaGFyYWN0ZXIgYW5kIChsZWFkIHN1cnJvZ2F0ZSwgdHJhaWwgc3Vycm9nYXRlKQorCSAgICAgICAgICogZm9yIGEgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIpCisJICAgICAgICAgKiBvdGhlcndpc2UsIHBbbGVuZ3RoXSBpcyBtZXJnZWQgaW4gd2l0aCBfbWVyZ2VPcmRlcmVkKCkKKwkgICAgICAgICAqLworCSAgICAgICAgaWYoaXNOb3JtMzJIYW5ndWxPckphbW8obm9ybTMyKSkgeworLy8JICAgICAgICAgICAgaWYoaWdub3JlSGFuZ3VsKSB7CisvLwkgICAgICAgICAgICAgICAgYzI9MDsKKy8vCSAgICAgICAgICAgICAgICBwPU5VTEw7CisvLwkgICAgICAgICAgICAgICAgbGVuZ3RoPTE7CisvLwkgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICAvLyBIYW5ndWwgc3lsbGFibGU6IGRlY29tcG9zZSBhbGdvcml0aG1pY2FsbHkgCisJICAgICAgICAgICAgICAgIHA9YnVmZmVyOworCSAgICAgICAgICAgICAgICBwU3RhcnQ9MDsKKwkgICAgICAgICAgICAgICAgY2M9dHJhaWxDQz0wOworCQorCSAgICAgICAgICAgICAgICBjLT1IQU5HVUxfQkFTRTsKKwkKKwkgICAgICAgICAgICAgICAgYzI9KGNoYXIpKGMlSkFNT19UX0NPVU5UKTsKKwkgICAgICAgICAgICAgICAgYy89SkFNT19UX0NPVU5UOworCSAgICAgICAgICAgICAgICBpZihjMj4wKSB7CisJICAgICAgICAgICAgICAgICAgICBidWZmZXJbMl09KGNoYXIpKEpBTU9fVF9CQVNFK2MyKTsKKwkgICAgICAgICAgICAgICAgICAgIGxlbmd0aD0zOworCSAgICAgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoPTI7CisJICAgICAgICAgICAgICAgIH0KKwkKKwkgICAgICAgICAgICAgICAgYnVmZmVyWzFdPShjaGFyKShKQU1PX1ZfQkFTRStjJUpBTU9fVl9DT1VOVCk7CisJICAgICAgICAgICAgICAgIGJ1ZmZlclswXT0oY2hhcikoSkFNT19MX0JBU0UrYy9KQU1PX1ZfQ09VTlQpOworLy8JICAgICAgICAgICAgfQorCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICBpZihpc05vcm0zMlJlZ3VsYXIobm9ybTMyKSkgeworCSAgICAgICAgICAgICAgICBjMj0wOworCSAgICAgICAgICAgICAgICBsZW5ndGg9MTsKKwkgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICAvLyBjIGlzIGEgbGVhZCBzdXJyb2dhdGUsIGdldCB0aGUgcmVhbCBub3JtMzIgCisJICAgICAgICAgICAgICAgIGlmKHNyY0luZGV4IT1zcmNMaW1pdCAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoYzI9c3JjW3NyY0luZGV4XSkpIHsKKwkgICAgICAgICAgICAgICAgICAgICsrc3JjSW5kZXg7CisJICAgICAgICAgICAgICAgICAgICBsZW5ndGg9MjsKKwkgICAgICAgICAgICAgICAgICAgIG5vcm0zMj1nZXROb3JtMzJGcm9tU3Vycm9nYXRlUGFpcihub3JtMzIsIGMyKTsKKwkgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIGMyPTA7CisJICAgICAgICAgICAgICAgICAgICBsZW5ndGg9MTsKKwkgICAgICAgICAgICAgICAgICAgIG5vcm0zMj0wOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCQorCSAgICAgICAgICAgIC8qIGdldCB0aGUgZGVjb21wb3NpdGlvbiBhbmQgdGhlIGxlYWQgYW5kIHRyYWlsIGNjJ3MgKi8KKwkgICAgICAgICAgICBpZigobm9ybTMyJnFjTWFzayk9PTApIHsKKwkgICAgICAgICAgICAgICAgLyogYyBkb2VzIG5vdCBkZWNvbXBvc2UgKi8KKwkgICAgICAgICAgICAgICAgY2M9dHJhaWxDQz0oaW50KSgoVU5TSUdORURfQllURV9NQVNLKSAmIChub3JtMzI+PkNDX1NISUZUKSk7CisJICAgICAgICAgICAgICAgIHA9bnVsbDsKKyAgICAgICAgICAgICAgICAgICAgcFN0YXJ0PS0xOworCSAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgCURlY29tcG9zZUFyZ3MgYXJnID0gbmV3IERlY29tcG9zZUFyZ3MoKTsKKwkgICAgICAgICAgICAJLyogYyBkZWNvbXBvc2VzLCBnZXQgZXZlcnl0aGluZyBmcm9tIHRoZSB2YXJpYWJsZS1sZW5ndGggCisgICAgICAgICAgICAgICAgICAgICAqIGV4dHJhIGRhdGEgCisgICAgICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICBwU3RhcnQ9ZGVjb21wb3NlKG5vcm0zMiwgcWNNYXNrLCBhcmcpOworCSAgICAgICAgICAgICAgICBwPWV4dHJhRGF0YTsKKwkgICAgICAgICAgICAgICAgbGVuZ3RoPWFyZy5sZW5ndGg7CisJICAgICAgICAgICAgICAgIGNjPWFyZy5jYzsKKwkgICAgICAgICAgICAgICAgdHJhaWxDQz1hcmcudHJhaWxDQzsKKwkgICAgICAgICAgICAgICAgaWYobGVuZ3RoPT0xKSB7CisJICAgICAgICAgICAgICAgICAgICAvKiBmYXN0cGF0aCBhIHNpbmdsZSBjb2RlIHVuaXQgZnJvbSBkZWNvbXBvc2l0aW9uICovCisJICAgICAgICAgICAgICAgICAgICBjPXBbcFN0YXJ0XTsKKwkgICAgICAgICAgICAgICAgICAgIGMyPTA7CisJICAgICAgICAgICAgICAgICAgICBwPW51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBwU3RhcnQ9LTE7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJCisJICAgICAgICAvKiBhcHBlbmQgdGhlIGRlY29tcG9zaXRpb24gdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgYXNzdW1lIAorICAgICAgICAgICAgICogbGVuZ3RoPjAgCisgICAgICAgICAgICAgKi8KKwkgICAgICAgIGlmKChkZXN0SW5kZXgrbGVuZ3RoKTw9ZGVzdExpbWl0KSB7CisJICAgICAgICAgICAgaW50IHJlb3JkZXJTcGxpdD1kZXN0SW5kZXg7CisJICAgICAgICAgICAgaWYocD09bnVsbCkgeworCSAgICAgICAgICAgICAgICAvKiBmYXN0cGF0aDogc2luZ2xlIGNvZGUgcG9pbnQgKi8KKwkgICAgICAgICAgICAgICAgaWYoY2MhPTAgJiYgY2M8cHJldkNDKSB7CisJICAgICAgICAgICAgICAgICAgICAvKiAoYywgYzIpIGlzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3QgdG8gdGhlIHByZWNlZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICogIHRleHQgCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkgICAgICAgICAgICAgICAgICAgIGRlc3RJbmRleCs9bGVuZ3RoOworCSAgICAgICAgICAgICAgICAgICAgdHJhaWxDQz1pbnNlcnRPcmRlcmVkKGRlc3QscmVvcmRlclN0YXJ0SW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW9yZGVyU3BsaXQsIGRlc3RJbmRleCwgYywgYzIsIGNjKTsKKwkgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIC8qIGp1c3QgYXBwZW5kIChjLCBjMikgKi8KKwkgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdEluZGV4KytdPWM7CisJICAgICAgICAgICAgICAgICAgICBpZihjMiE9MCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdEluZGV4KytdPWMyOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgLyogZ2VuZXJhbDogbXVsdGlwbGUgY29kZSBwb2ludHMgKG9yZGVyZWQgYnkgdGhlbXNlbHZlcykgCisgICAgICAgICAgICAgICAgICAgICAqIGZyb20gZGVjb21wb3NpdGlvbiAKKyAgICAgICAgICAgICAgICAgICAgICovCisJICAgICAgICAgICAgICAgIGlmKGNjIT0wICYmIGNjPHByZXZDQykgeworCSAgICAgICAgICAgICAgICAgICAgLyogdGhlIGRlY29tcG9zaXRpb24gaXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAqICBwcmVjZWRpbmcgdGV4dCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgZGVzdEluZGV4Kz1sZW5ndGg7CisJICAgICAgICAgICAgICAgICAgICB0cmFpbENDPW1lcmdlT3JkZXJlZChkZXN0LHJlb3JkZXJTdGFydEluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlb3JkZXJTcGxpdCxwLCBwU3RhcnQscFN0YXJ0K2xlbmd0aCk7CisJICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAvKiBqdXN0IGFwcGVuZCB0aGUgZGVjb21wb3NpdGlvbiAqLworCSAgICAgICAgICAgICAgICAgICAgZG8geworCSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdEluZGV4KytdPXBbcFN0YXJ0KytdOworCSAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgtLWxlbmd0aD4wKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgLyogYnVmZmVyIG92ZXJmbG93ICovCisJICAgICAgICAgICAgLyoga2VlcCBpbmNyZW1lbnRpbmcgdGhlIGRlc3RJbmRleCBmb3IgcHJlZmxpZ2h0aW5nICovCisJICAgICAgICAgICAgZGVzdEluZGV4Kz1sZW5ndGg7CisJICAgICAgICB9CisJCisJICAgICAgICBwcmV2Q0M9dHJhaWxDQzsKKwkgICAgICAgIGlmKHByZXZDQz09MCkgeworCSAgICAgICAgICAgIHJlb3JkZXJTdGFydEluZGV4PWRlc3RJbmRleDsKKwkgICAgICAgIH0KKwkgICAgfQorCQorCSAgICBvdXRUcmFpbENDWzBdPXByZXZDQzsKKworCSAgICByZXR1cm4gZGVzdEluZGV4OworCX0KKwkKKwkvKiBtYWtlIE5GQyAmIE5GS0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgTmV4dENvbWJpbmluZ0FyZ3N7CisJCWNoYXJbXSBzb3VyY2U7CisJCWludCBzdGFydDsKKwkJLy9pbnQgbGltaXQ7CisJCWNoYXIgYzsKKwkJY2hhciBjMjsKKwkJaW50Lyp1bnNpZ25lZCovIGNvbWJpbmluZ0luZGV4OworCQljaGFyIC8qdW5zaWduZWQgYnl0ZSovIGNjOworCX0KKwkKKwkvKiBnZXQgdGhlIGNvbXBvc2l0aW9uIHByb3BlcnRpZXMgb2YgdGhlIG5leHQgY2hhcmFjdGVyICovCisJcHJpdmF0ZSBzdGF0aWMgaW50IC8qdW5zaWduZWQqLwlnZXROZXh0Q29tYmluaW5nKE5leHRDb21iaW5pbmdBcmdzIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0KSB7CisJICAgIGxvbmcvKnVuc2lnbmVkKi8gbm9ybTMyOyAKKyAgICAgICAgaW50IGNvbWJpbmVGbGFnczsKKwkKKwkgICAgYXJncy5jPWFyZ3Muc291cmNlW2FyZ3Muc3RhcnQrK107CisJICAgIG5vcm0zMj1nZXROb3JtMzIoYXJncy5jKTsKKwkgICAgaWYoKG5vcm0zMiYoQ0NfTUFTS3xDT01CSU5FU19BTlkpKT09MCkgeworCSAgICAgICAgYXJncy5jMj0wOworCSAgICAgICAgYXJncy5jb21iaW5pbmdJbmRleD0wOworCSAgICAgICAgYXJncy5jYz0wOworCSAgICAgICAgcmV0dXJuIDA7CisJICAgIH0gZWxzZSB7CisJICAgICAgICBpZihpc05vcm0zMlJlZ3VsYXIobm9ybTMyKSkgeworCSAgICAgICAgICAgIGFyZ3MuYzI9MDsKKwkgICAgICAgIH0gZWxzZSBpZihpc05vcm0zMkhhbmd1bE9ySmFtbyhub3JtMzIpKSB7CisJICAgICAgICAgICAgLyogYSBjb21wYXRpYmlsaXR5IGRlY29tcG9zaXRpb24gY29udGFpbmVkIEphbW9zICovCisJICAgICAgICAgICAgYXJncy5jMj0wOworCSAgICAgICAgICAgIGFyZ3MuY29tYmluaW5nSW5kZXg9KGludCkoKFVOU0lHTkVEX0lOVF9NQVNLKSYoMHhmZmYwfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9ybTMyPj5FWFRSQV9TSElGVCkpKTsKKwkgICAgICAgICAgICBhcmdzLmNjPTA7CisJICAgICAgICAgICAgcmV0dXJuIChpbnQpKG5vcm0zMiZDT01CSU5FU19BTlkpOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAvKiBjIGlzIGEgbGVhZCBzdXJyb2dhdGUsIGdldCB0aGUgcmVhbCBub3JtMzIgKi8KKwkgICAgICAgICAgICBpZihhcmdzLnN0YXJ0IT1saW1pdCAmJiBVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGFyZ3MuYzI9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc291cmNlW2FyZ3Muc3RhcnRdKSkgeworCSAgICAgICAgICAgICAgICArK2FyZ3Muc3RhcnQ7CisJICAgICAgICAgICAgICAgIG5vcm0zMj1nZXROb3JtMzJGcm9tU3Vycm9nYXRlUGFpcihub3JtMzIsIGFyZ3MuYzIpOworCSAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgIGFyZ3MuYzI9MDsKKwkgICAgICAgICAgICAgICAgYXJncy5jb21iaW5pbmdJbmRleD0wOworCSAgICAgICAgICAgICAgICBhcmdzLmNjPTA7CisJICAgICAgICAgICAgICAgIHJldHVybiAwOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkKKwkgICAgICAgIGNvbWJpbmVGbGFncz0oaW50KShub3JtMzImQ09NQklORVNfQU5ZKTsKKwkgICAgICAgIGlmKGNvbWJpbmVGbGFncyE9MCkgeworICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGdldEV4dHJhRGF0YUluZGV4KG5vcm0zMik7CisJICAgICAgICAgICAgYXJncy5jb21iaW5pbmdJbmRleD1pbmRleD4wID8gZXh0cmFEYXRhWyhpbmRleC0xKV0gOjA7CisJICAgICAgICB9CisJCisJICAgICAgICBhcmdzLmNjPShjaGFyKSgoVU5TSUdORURfQllURV9NQVNLKSYobm9ybTMyPj5DQ19TSElGVCkpOworCSAgICAgICAgcmV0dXJuIGNvbWJpbmVGbGFnczsKKwkgICAgfQorCX0KKwkKKwkvKgorCSAqIGdpdmVuIGEgY29tcG9zaXRpb24tcmVzdWx0IHN0YXJ0ZXIgKGMsIGMyKSAtIHdoaWNoIG1lYW5zIGl0cyBjYz09MCwKKwkgKiBpdCBjb21iaW5lcyBmb3J3YXJkLCBpdCBoYXMgZXh0cmEgZGF0YSwgaXRzIG5vcm0zMiE9MCwKKwkgKiBpdCBpcyBub3QgYSBIYW5ndWwgb3IgSmFtbywKKwkgKiBnZXQganVzdCBpdHMgY29tYmluZUZ3ZEluZGV4CisJICoKKwkgKiBub3JtMzIoYykgaXMgc3BlY2lhbCBpZiBhbmQgb25seSBpZiBjMiE9MAorCSAqLworCXByaXZhdGUgc3RhdGljIGludC8qdW5zaWduZWQqLyBnZXRDb21iaW5pbmdJbmRleEZyb21TdGFydGVyKGNoYXIgYyxjaGFyIGMyKXsKKwkgICAgbG9uZy8qdW5zaWduZWQqLyBub3JtMzI7CisJCisJICAgIG5vcm0zMj1nZXROb3JtMzIoYyk7CisJICAgIGlmKGMyIT0wKSB7CisJICAgICAgICBub3JtMzI9Z2V0Tm9ybTMyRnJvbVN1cnJvZ2F0ZVBhaXIobm9ybTMyLCBjMik7CisJICAgIH0KKwkgICAgcmV0dXJuIGV4dHJhRGF0YVsoZ2V0RXh0cmFEYXRhSW5kZXgobm9ybTMyKS0xKV07CisJfQorCQorCS8qCisJICogRmluZCB0aGUgcmVjb21wb3NpdGlvbiByZXN1bHQgZm9yCisJICogYSBmb3J3YXJkLWNvbWJpbmluZyBjaGFyYWN0ZXIKKwkgKiAoc3BlY2lmaWVkIHdpdGggYSBwb2ludGVyIHRvIGl0cyBwYXJ0IG9mIHRoZSBjb21iaW5pbmdUYWJsZVtdKQorCSAqIGFuZCBhIGJhY2t3YXJkLWNvbWJpbmluZyBjaGFyYWN0ZXIKKwkgKiAoc3BlY2lmaWVkIHdpdGggaXRzIGNvbWJpbmVCYWNrSW5kZXgpLgorCSAqCisJICogSWYgdGhlc2UgdHdvIGNoYXJhY3RlcnMgY29tYmluZSwgdGhlbiBzZXQgKHZhbHVlLCB2YWx1ZTIpCisJICogd2l0aCB0aGUgY29kZSB1bml0KHMpIG9mIHRoZSBjb21wb3NpdGlvbiBjaGFyYWN0ZXIuCisJICoKKwkgKiBSZXR1cm4gdmFsdWU6CisJICogMCAgICBkbyBub3QgY29tYmluZQorCSAqIDEgICAgY29tYmluZQorCSAqID4xICAgY29tYmluZSwgYW5kIHRoZSBjb21wb3NpdGlvbiBpcyBhIGZvcndhcmQtY29tYmluaW5nIHN0YXJ0ZXIKKwkgKgorCSAqIFNlZSB1bm9ybWltcC5oIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb3NpdGlvbiB0YWJsZSBmb3JtYXQuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgaW50Lyp1bnNpZ25lZCovIGNvbWJpbmUoY2hhcltddGFibGUsaW50IHRhYmxlU3RhcnQsIAorCQkJCQkJCQkgICBpbnQvKnVuc2luZ2VkKi8gY29tYmluZUJhY2tJbmRleCwKKwkgICAgICAgICAJCQkJCSAgIGludFtdIG91dFZhbHVlcykgeworCSAgICBpbnQvKnVuc2lnbmVkKi8ga2V5OworCSAgICBpbnQgdmFsdWUsdmFsdWUyOworCSAgICAKKwkJaWYob3V0VmFsdWVzLmxlbmd0aDwyKXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKwkJfQorCQkKKwkgICAgLyogc2VhcmNoIGluIHRoZSBzdGFydGVyJ3MgY29tcG9zaXRpb24gdGFibGUgKi8KKwkgICAgZm9yKDs7KSB7CisJICAgICAgICBrZXk9dGFibGVbdGFibGVTdGFydCsrXTsKKwkgICAgICAgIGlmKGtleT49Y29tYmluZUJhY2tJbmRleCkgeworCSAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgfQorCSAgICAgICAgdGFibGVTdGFydCs9ICgodGFibGVbdGFibGVTdGFydF0mMHg4MDAwKSAhPSAwKT8gMiA6IDE7CisJICAgIH0KKwkKKwkgICAgLyogbWFzayBvZmYgYml0IDE1LCB0aGUgbGFzdC1lbnRyeS1pbi10aGUtbGlzdCBmbGFnICovCisJICAgIGlmKChrZXkmMHg3ZmZmKT09Y29tYmluZUJhY2tJbmRleCkgeworCSAgICAgICAgLyogZm91bmQhIGNvbWJpbmUhICovCisJICAgICAgICB2YWx1ZT10YWJsZVt0YWJsZVN0YXJ0XTsKKwkKKwkgICAgICAgIC8qIGlzIHRoZSBjb21wb3NpdGlvbiBhIHN0YXJ0ZXIgdGhhdCBjb21iaW5lcyBmb3J3YXJkPyAqLworCSAgICAgICAga2V5PShpbnQpKChVTlNJR05FRF9JTlRfTUFTSykmKCh2YWx1ZSYweDIwMDApKzEpKTsKKwkKKwkgICAgICAgIC8qIGdldCB0aGUgY29tcG9zaXRpb24gcmVzdWx0IGNvZGUgcG9pbnQgZnJvbSB0aGUgdmFyaWFibGUtbGVuZ3RoIAorICAgICAgICAgICAgICogcmVzdWx0IHZhbHVlIAorICAgICAgICAgICAgICovCisJICAgICAgICBpZigodmFsdWUmMHg4MDAwKSAhPSAwKSB7CisJICAgICAgICAgICAgaWYoKHZhbHVlJjB4NDAwMCkgIT0gMCkgeworCSAgICAgICAgICAgICAgICAvKiBzdXJyb2dhdGUgcGFpciBjb21wb3NpdGlvbiByZXN1bHQgKi8KKwkgICAgICAgICAgICAgICAgdmFsdWU9KGludCkoKFVOU0lHTkVEX0lOVF9NQVNLKSYoKHZhbHVlJjB4M2ZmKXwweGQ4MDApKTsKKwkgICAgICAgICAgICAgICAgdmFsdWUyPXRhYmxlW3RhYmxlU3RhcnQrMV07CisJICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgLyogQk1QIGNvbXBvc2l0aW9uIHJlc3VsdCBVKzIwMDAuLlUrZmZmZiAqLworCSAgICAgICAgICAgICAgICB2YWx1ZT10YWJsZVt0YWJsZVN0YXJ0KzFdOworCSAgICAgICAgICAgICAgICB2YWx1ZTI9MDsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIC8qIEJNUCBjb21wb3NpdGlvbiByZXN1bHQgVSswMDAwLi5VKzFmZmYgKi8KKwkgICAgICAgICAgICB2YWx1ZSY9MHgxZmZmOworCSAgICAgICAgICAgIHZhbHVlMj0wOworCSAgICAgICAgfQorICAgICAgICAgICAgb3V0VmFsdWVzWzBdPXZhbHVlOworICAgICAgICAgICAgb3V0VmFsdWVzWzFdPXZhbHVlMjsJCisJICAgICAgICByZXR1cm4ga2V5OworCSAgICB9IGVsc2UgeworCSAgICAgICAgLyogbm90IGZvdW5kICovCisJICAgICAgICByZXR1cm4gMDsKKwkgICAgfQorCX0KKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBSZWNvbXBvc2VBcmdzeworCQljaGFyW10gc291cmNlOworCQlpbnQgc3RhcnQ7CisJCWludCBsaW1pdDsKKwl9CisgICAgLyoKKyAgICAgKiByZWNvbXBvc2UgdGhlIGNoYXJhY3RlcnMgaW4gW3AuLmxpbWl0WworICAgICAqICh3aGljaCBpcyBpbiBORkQgLSBkZWNvbXBvc2VkIGFuZCBjYW5vbmljYWxseSBvcmRlcmVkKSwKKyAgICAgKiBhZGp1c3QgbGltaXQsIGFuZCByZXR1cm4gdGhlIHRyYWlsaW5nIGNjCisgICAgICoKKyAgICAgKiBzaW5jZSBmb3IgTkZLQyB3ZSBtYXkgZ2V0IEphbW9zIGluIGRlY29tcG9zaXRpb25zLCB3ZSBuZWVkIHRvCisgICAgICogcmVjb21wb3NlIHRob3NlIHRvbworICAgICAqCisgICAgICogbm90ZSB0aGF0IHJlY29tcG9zaXRpb24gbmV2ZXIgbGVuZ3RoZW5zIHRoZSB0ZXh0OgorICAgICAqIGFueSBjaGFyYWN0ZXIgY29uc2lzdHMgb2YgZWl0aGVyIG9uZSBvciB0d28gY29kZSB1bml0czsKKyAgICAgKiBhIGNvbXBvc2l0aW9uIG1heSBjb250YWluIGF0IG1vc3Qgb25lIG1vcmUgY29kZSB1bml0IHRoYW4gdGhlIG9yaWdpbmFsIAorICAgICAqIHN0YXJ0ZXIsIHdoaWxlIHRoZSBjb21iaW5pbmcgbWFyayB0aGF0IGlzIHJlbW92ZWQgaGFzIGF0IGxlYXN0IG9uZSBjb2RlIAorICAgICAqIHVuaXQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyLyp1bnNpZ25lZCBieXRlKi8gcmVjb21wb3NlKFJlY29tcG9zZUFyZ3MgYXJncykgeworICAgICAgICBpbnQgIHJlbW92ZSwgcSwgcjsKKyAgICAgICAgaW50IC8qdW5zaWduZWQqLyBjb21iaW5lRmxhZ3M7CisgICAgICAgIGludCAvKnVuc2lnbmVkKi8gY29tYmluZUZ3ZEluZGV4LCBjb21iaW5lQmFja0luZGV4OworICAgICAgICBpbnQgLyp1bnNpZ25lZCovIHJlc3VsdCwgdmFsdWUsIHZhbHVlMjsKKyAgICAgICAgaW50IC8qdW5zaWduZWQgYnl0ZSovICBwcmV2Q0M7CisgICAgICAgIGJvb2xlYW4gc3RhcnRlcklzU3VwcGxlbWVudGFyeTsKKyAgICAJaW50IHN0YXJ0ZXI7CisgICAgCWludFtdIG91dFZhbHVlcyA9IG5ldyBpbnRbMl07CisgICAgICAgIHN0YXJ0ZXI9LTE7ICAgICAgICAgICAgICAgICAgIC8qIG5vIHN0YXJ0ZXIgKi8KKyAgICAgICAgY29tYmluZUZ3ZEluZGV4PTA7ICAgICAgICAgICAgLyogd2lsbCBub3QgYmUgdXNlZCB1bnRpbCBzdGFydGVyIT1OVUxMICovCisgICAgICAgIHN0YXJ0ZXJJc1N1cHBsZW1lbnRhcnk9ZmFsc2U7IC8qIHdpbGwgbm90IGJlIHVzZWQgdW50aWwgc3RhcnRlciE9TlVMTCAqLworICAgICAgICBwcmV2Q0M9MDsKKyAgICAgICAgCisgICAgICAgIE5leHRDb21iaW5pbmdBcmdzIG5jQXJnID0gbmV3IE5leHRDb21iaW5pbmdBcmdzKCk7CisgICAgICAgIG5jQXJnLnNvdXJjZSAgPSBhcmdzLnNvdXJjZTsKKyAgICAgICAgCisgICAgICAgIG5jQXJnLmNjICAgICAgPTA7CisgICAgICAgIG5jQXJnLmMyICAgICAgPTA7ICAgIAorCisgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgbmNBcmcuc3RhcnQgPSBhcmdzLnN0YXJ0OworICAgICAgICAgICAgY29tYmluZUZsYWdzPWdldE5leHRDb21iaW5pbmcobmNBcmcsYXJncy5saW1pdCk7CisgICAgICAgICAgICBjb21iaW5lQmFja0luZGV4PW5jQXJnLmNvbWJpbmluZ0luZGV4OworICAgICAgICAgICAgYXJncy5zdGFydCA9IG5jQXJnLnN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZigoKGNvbWJpbmVGbGFncyZDT01CSU5FU19CQUNLKSE9MCkgJiYgc3RhcnRlciE9LTEpIHsKKyAgICAgICAgICAgICAgICBpZigoY29tYmluZUJhY2tJbmRleCYweDgwMDApIT0wKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGMgaXMgYSBKYW1vIFYvVCwgc2VlIGlmIHdlIGNhbiBjb21wb3NlIGl0IHdpdGggdGhlIAorICAgICAgICAgICAgICAgICAgICAgKiBwcmV2aW91cyBjaGFyYWN0ZXIgCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICByZW1vdmU9LTE7IC8qIE5VTEwgd2hpbGUgbm8gSGFuZ3VsIGNvbXBvc2l0aW9uICovCisgICAgICAgICAgICAgICAgICAgIG5jQXJnLmMyPWFyZ3Muc291cmNlW3N0YXJ0ZXJdOworICAgICAgICAgICAgICAgICAgICBpZihjb21iaW5lQmFja0luZGV4PT0weGZmZjIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEphbW8gViwgY29tcG9zZSB3aXRoIHByZXZpb3VzIEphbW8gTCBhbmQgZm9sbG93aW5nIAorICAgICAgICAgICAgICAgICAgICAgICAgICogSmFtbyBUIAorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBuY0FyZy5jMj0oY2hhcikobmNBcmcuYzItSkFNT19MX0JBU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYobmNBcmcuYzI8SkFNT19MX0NPVU5UKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlPWFyZ3Muc3RhcnQtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY0FyZy5jPShjaGFyKShIQU5HVUxfQkFTRSsobmNBcmcuYzIqSkFNT19WX0NPVU5UKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuY0FyZy5jLUpBTU9fVl9CQVNFKSkqSkFNT19UX0NPVU5UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhcmdzLnN0YXJ0IT1hcmdzLmxpbWl0ICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuY0FyZy5jMj0oY2hhcikoYXJncy5zb3VyY2VbYXJncy5zdGFydF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUpBTU9fVF9CQVNFKSk8SkFNT19UX0NPVU5UKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrYXJncy5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNBcmcuYys9bmNBcmcuYzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc291cmNlW3N0YXJ0ZXJdPW5jQXJnLmM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgICAgICAgICBpZihyZW1vdmUhPS0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiByZW1vdmUgdGhlIEphbW8ocykgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHE9cmVtb3ZlOworICAgICAgICAgICAgICAgICAgICAgICAgcj1hcmdzLnN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUocjxhcmdzLmxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zb3VyY2VbcSsrXT1hcmdzLnNvdXJjZVtyKytdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zdGFydD1yZW1vdmU7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmxpbWl0PXE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAgICAgbmNBcmcuYzI9MDsgLyogYzIgaGVsZCAqc3RhcnRlciB0ZW1wb3JhcmlseSAqLworICAgIAorICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBub3c6IGNjPT0wIGFuZCB0aGUgY29tYmluaW5nIGluZGV4IGRvZXMgbm90IGluY2x1ZGUgCisgICAgICAgICAgICAgICAgICAgICAqICJmb3J3YXJkIiAtPiB0aGUgcmVzdCBvZiB0aGUgbG9vcCBib2R5IHdpbGwgcmVzZXQgc3RhcnRlcgorICAgICAgICAgICAgICAgICAgICAgKiB0byBOVUxMOyB0ZWNobmljYWxseSwgYSBjb21wb3NlZCBIYW5ndWwgc3lsbGFibGUgaXMgYSAKKyAgICAgICAgICAgICAgICAgICAgICogc3RhcnRlciwgYnV0IGl0IGRvZXMgbm90IGNvbWJpbmUgZm9yd2FyZCBub3cgdGhhdCB3ZSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAqIGNvbnN1bWVkIGFsbCBlbGlnaWJsZSBKYW1vczsgZm9yIEphbW8gVi9ULCBjb21iaW5lRmxhZ3MgCisgICAgICAgICAgICAgICAgICAgICAqIGRvZXMgbm90IGNvbnRhaW4gX05PUk1fQ09NQklORVNfRldECisgICAgICAgICAgICAgICAgICAgICAqLworICAgIAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZigKKyAgICAgICAgICAgICAgICAgICAgLyogdGhlIHN0YXJ0ZXIgaXMgbm90IGEgSmFtbyBWL1QgYW5kICovCisgICAgICAgICAgICAgICAgICAgICEoKGNvbWJpbmVGd2RJbmRleCYweDgwMDApIT0wKSAmJgorICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tYmluaW5nIG1hcmsgaXMgbm90IGJsb2NrZWQgYW5kICovCisgICAgICAgICAgICAgICAgICAgIChwcmV2Q0M8bmNBcmcuY2MgfHwgcHJldkNDPT0wKSAmJgorICAgICAgICAgICAgICAgICAgICAvKiB0aGUgc3RhcnRlciBhbmQgdGhlIGNvbWJpbmluZyBtYXJrIChjLCBjMikgZG8gY29tYmluZSAqLworICAgICAgICAgICAgICAgICAgICAwIT0ocmVzdWx0PWNvbWJpbmUoY29tYmluaW5nVGFibGUsY29tYmluZUZ3ZEluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVCYWNrSW5kZXgsIG91dFZhbHVlcykpCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgCXZhbHVlPW91dFZhbHVlc1swXTsKKyAgICAgICAgICAgICAgICAJdmFsdWUyPW91dFZhbHVlc1sxXTsKKyAgICAgICAgICAgICAgICAgICAgLyogcmVwbGFjZSB0aGUgc3RhcnRlciB3aXRoIHRoZSBjb21wb3NpdGlvbiwgcmVtb3ZlIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICogY29tYmluaW5nIG1hcmsgCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICByZW1vdmU9IG5jQXJnLmMyPT0wID8gYXJncy5zdGFydC0xIDogYXJncy5zdGFydC0yOyAvKiBpbmRleCB0byB0aGUgY29tYmluaW5nIG1hcmsgKi8KKyAgICAKKyAgICAgICAgICAgICAgICAgICAgLyogcmVwbGFjZSB0aGUgc3RhcnRlciB3aXRoIHRoZSBjb21wb3NpdGlvbiAqLworICAgICAgICAgICAgICAgICAgICBhcmdzLnNvdXJjZVtzdGFydGVyXT0oY2hhcil2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYoc3RhcnRlcklzU3VwcGxlbWVudGFyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUyIT0wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYm90aCBhcmUgc3VwcGxlbWVudGFyeSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc291cmNlW3N0YXJ0ZXIrMV09KGNoYXIpdmFsdWUyOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tcG9zaXRpb24gaXMgc2hvcnRlciB0aGFuIHRoZSBzdGFydGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtb3ZlIHRoZSBpbnRlcm1lZGlhdGUgY2hhcmFjdGVycyBmb3J3YXJkIG9uZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZXJJc1N1cHBsZW1lbnRhcnk9ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcT1zdGFydGVyKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcj1xKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUocjxyZW1vdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zb3VyY2VbcSsrXT1hcmdzLnNvdXJjZVtyKytdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXJlbW92ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlMiE9MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBvc2l0aW9uIGlzIGxvbmdlciB0aGFuIHRoZSBzdGFydGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIG1vdmUgdGhlIGludGVybWVkaWF0ZSBjaGFyYWN0ZXJzIGJhY2sgb25lICovCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVySXNTdXBwbGVtZW50YXJ5PXRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcmlseSBpbmNyZW1lbnQgZm9yIHRoZSBsb29wIGJvdW5kYXJ5ICovCisgICAgICAgICAgICAgICAgICAgICAgICArK3N0YXJ0ZXI7IAorICAgICAgICAgICAgICAgICAgICAgICAgcT1yZW1vdmU7CisgICAgICAgICAgICAgICAgICAgICAgICByPSsrcmVtb3ZlOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoc3RhcnRlcjxxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zb3VyY2VbLS1yXT1hcmdzLnNvdXJjZVstLXFdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zb3VyY2Vbc3RhcnRlcl09KGNoYXIpdmFsdWUyOworICAgICAgICAgICAgICAgICAgICAgICAgLS1zdGFydGVyOyAvKiB1bmRvIHRoZSB0ZW1wb3JhcnkgaW5jcmVtZW50ICovCisgICAgICAgICAgICAgICAgICAgIC8qIH0gZWxzZSB7IGJvdGggYXJlIG9uIHRoZSBCTVAsIG5vdGhpbmcgbW9yZSB0byBkbyAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgICAgICAgIC8qIHJlbW92ZSB0aGUgY29tYmluaW5nIG1hcmsgYnkgbW92aW5nIHRoZSBmb2xsb3dpbmcgdGV4dCAKKyAgICAgICAgICAgICAgICAgICAgICogb3ZlciBpdCAqLworICAgICAgICAgICAgICAgICAgICBpZihyZW1vdmU8YXJncy5zdGFydCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcT1yZW1vdmU7CisgICAgICAgICAgICAgICAgICAgICAgICByPWFyZ3Muc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShyPGFyZ3MubGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNvdXJjZVtxKytdPWFyZ3Muc291cmNlW3IrK107CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnN0YXJ0PXJlbW92ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MubGltaXQ9cTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgICAgICAgICAvKiBrZWVwIHByZXZDQyBiZWNhdXNlIHdlIHJlbW92ZWQgdGhlIGNvbWJpbmluZyBtYXJrICovCisgICAgCisgICAgICAgICAgICAgICAgICAgIC8qIGRvbmU/ICovCisgICAgICAgICAgICAgICAgICAgIGlmKGFyZ3Muc3RhcnQ9PWFyZ3MubGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcilwcmV2Q0M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAgICAgLyogaXMgdGhlIGNvbXBvc2l0aW9uIGEgc3RhcnRlciB0aGF0IGNvbWJpbmVzIGZvcndhcmQ/ICovCisgICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdD4xKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVGd2RJbmRleD1nZXRDb21iaW5pbmdJbmRleEZyb21TdGFydGVyKChjaGFyKXZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpdmFsdWUyKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlcj0tMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgICAgICAgICAvKiB3ZSBjb21iaW5lZCBhbmQgc2V0IHByZXZDQywgY29udGludWUgd2l0aCBsb29raW5nIGZvciAKKyAgICAgICAgICAgICAgICAgICAgICogY29tcG9zaXRpb25zICovCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8qIG5vIGNvbWJpbmF0aW9uIHRoaXMgdGltZSAqLworICAgICAgICAgICAgcHJldkNDPW5jQXJnLmNjOworICAgICAgICAgICAgaWYoYXJncy5zdGFydD09YXJncy5saW1pdCkgeworICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcilwcmV2Q0M7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAvKiBpZiAoYywgYzIpIGRpZCBub3QgY29tYmluZSwgdGhlbiBjaGVjayBpZiBpdCBpcyBhIHN0YXJ0ZXIgKi8KKyAgICAgICAgICAgIGlmKG5jQXJnLmNjPT0wKSB7CisgICAgICAgICAgICAgICAgLyogZm91bmQgYSBuZXcgc3RhcnRlciAqLworICAgICAgICAgICAgICAgIGlmKChjb21iaW5lRmxhZ3MmQ09NQklORVNfRldEKSE9MCkgeworICAgICAgICAgICAgICAgICAgICAvKiBpdCBtYXkgY29tYmluZSB3aXRoIHNvbWV0aGluZywgcHJlcGFyZSBmb3IgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYobmNBcmcuYzI9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZXJJc1N1cHBsZW1lbnRhcnk9ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVyPWFyZ3Muc3RhcnQtMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZXJJc1N1cHBsZW1lbnRhcnk9ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVyPWFyZ3Muc3RhcnQtMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb21iaW5lRndkSW5kZXg9Y29tYmluZUJhY2tJbmRleDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBpdCB3aWxsIG5vdCBjb21iaW5lIHdpdGggYW55dGhpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRlcj0tMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAKKyAgICAvLyBmaW5kIHRoZSBsYXN0IHRydWUgc3RhcnRlciBiZXR3ZWVuIHNyY1tzdGFydF0uLi4uc3JjW2N1cnJlbnRdIGdvaW5nIAorICAgIC8vIGJhY2t3YXJkcyBhbmQgcmV0dXJuIGl0cyBpbmRleAorICAgIHByaXZhdGUgc3RhdGljIGludCBmaW5kUHJldmlvdXNTdGFydGVyKGNoYXJbXXNyYywgaW50IHNyY1N0YXJ0LCBpbnQgY3VycmVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gY2NPclFDTWFzaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gZGVjb21wUUNNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBtaW5Ob01heWJlKSB7IAorICAgICAgIGxvbmcgbm9ybTMyOyAKKyAgICAgICBQcmV2QXJncyBhcmdzID0gbmV3IFByZXZBcmdzKCk7CisgICAgICAgYXJncy5zcmMgPSBzcmM7CisgICAgICAgYXJncy5zdGFydCA9IHNyY1N0YXJ0OworICAgICAgIGFyZ3MuY3VycmVudCA9IGN1cnJlbnQ7CisgICAgICAgCisgICAgICAgd2hpbGUoYXJncy5zdGFydDxhcmdzLmN1cnJlbnQpIHsgCisgICAgICAgICAgIG5vcm0zMj0gZ2V0UHJldk5vcm0zMihhcmdzLCBtaW5Ob01heWJlLCBjY09yUUNNYXNrfGRlY29tcFFDTWFzayk7IAorICAgICAgICAgICBpZihpc1RydWVTdGFydGVyKG5vcm0zMiwgY2NPclFDTWFzaywgZGVjb21wUUNNYXNrKSkgeyAKKyAgICAgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgICAgfSAKKyAgICAgICB9IAorICAgICAgIHJldHVybiBhcmdzLmN1cnJlbnQ7IAorICAgIH0KKwkKKyAgICAvKiBmaW5kIHRoZSBmaXJzdCB0cnVlIHN0YXJ0ZXIgaW4gW3NyYy4ubGltaXRbIGFuZCByZXR1cm4gdGhlIAorICAgICAqIHBvaW50ZXIgdG8gaXQgCisgICAgICovCisJcHJpdmF0ZSBzdGF0aWMgaW50LyppbmRleCovCWZpbmROZXh0U3RhcnRlcihjaGFyW10gc3JjLGludCBzdGFydCxpbnQgbGltaXQsCisJICAgICAgICAgICAgICAgICAJCQkJICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIHFjTWFzaywgCisJICAgICAgICAgICAgICAgICAJCQkJICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIGRlY29tcFFDTWFzaywgCisJICAgICAgICAgICAgICAgICAJCQkJICAgICAgICAgICAgY2hhciBtaW5Ob01heWJlKSB7CisJICAgIGludCBwOworCSAgICBsb25nLyp1bnNpZ25lZCovIG5vcm0zMjsgCisgICAgICAgIGludCBjY09yUUNNYXNrOworCSAgICBjaGFyIGMsIGMyOworCQorCSAgICBjY09yUUNNYXNrPUNDX01BU0t8cWNNYXNrOworCSAgICAKKwkJRGVjb21wb3NlQXJncyBkZWNvbXBBcmdzID0gbmV3IERlY29tcG9zZUFyZ3MoKTsKKworCSAgICBmb3IoOzspIHsKKwkgICAgICAgIGlmKHN0YXJ0PT1saW1pdCkgeworCSAgICAgICAgICAgIGJyZWFrOyAvKiBlbmQgb2Ygc3RyaW5nICovCisJICAgICAgICB9CisJICAgICAgICBjPXNyY1tzdGFydF07CisJICAgICAgICBpZihjPG1pbk5vTWF5YmUpIHsKKwkgICAgICAgICAgICBicmVhazsgLyogY2F0Y2hlcyBOVUwgdGVybWluYXRlciwgdG9vICovCisJICAgICAgICB9CisJCisJICAgICAgICBub3JtMzI9Z2V0Tm9ybTMyKGMpOworCSAgICAgICAgaWYoKG5vcm0zMiZjY09yUUNNYXNrKT09MCkgeworCSAgICAgICAgICAgIGJyZWFrOyAvKiB0cnVlIHN0YXJ0ZXIgKi8KKwkgICAgICAgIH0KKwkKKwkgICAgICAgIGlmKGlzTm9ybTMyTGVhZFN1cnJvZ2F0ZShub3JtMzIpKSB7CisJICAgICAgICAgICAgLyogYyBpcyBhIGxlYWQgc3Vycm9nYXRlLCBnZXQgdGhlIHJlYWwgbm9ybTMyICovCisJICAgICAgICAgICAgaWYoKHN0YXJ0KzEpPT1saW1pdCB8fCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVVURjE2LmlzVHJhaWxTdXJyb2dhdGUoYzI9KHNyY1tzdGFydCsxXSkpKXsKKyAgICAgICAgICAgICAgICAgICAgLyogdW5tYXRjaGVkIGZpcnN0IHN1cnJvZ2F0ZTogY291bnRzIGFzIGEgdHJ1ZSBzdGFydGVyICovICAgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgICAgIGJyZWFrOyAKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgbm9ybTMyPWdldE5vcm0zMkZyb21TdXJyb2dhdGVQYWlyKG5vcm0zMiwgYzIpOworCQorCSAgICAgICAgICAgIGlmKChub3JtMzImY2NPclFDTWFzayk9PTApIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7IC8qIHRydWUgc3RhcnRlciAqLworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgYzI9MDsKKwkgICAgICAgIH0KKwkKKwkgICAgICAgIC8qIChjLCBjMikgaXMgbm90IGEgdHJ1ZSBzdGFydGVyIGJ1dCBpdHMgZGVjb21wb3NpdGlvbiBtYXkgYmUgKi8KKwkgICAgICAgIGlmKChub3JtMzImZGVjb21wUUNNYXNrKSE9MCkgeworCSAgICAgICAgICAgIC8qIChjLCBjMikgZGVjb21wb3NlcywgZ2V0IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgdmFyaWFibGUtbGVuZ3RoCisgICAgICAgICAgICAgICAgICogIGV4dHJhIGRhdGEgKi8KKwkgICAgICAgICAgICBwPWRlY29tcG9zZShub3JtMzIsIGRlY29tcFFDTWFzaywgZGVjb21wQXJncyk7CisJCisJICAgICAgICAgICAgLyogZ2V0IHRoZSBmaXJzdCBjaGFyYWN0ZXIncyBub3JtMzIgdG8gY2hlY2sgaWYgaXQgaXMgYSB0cnVlIAorICAgICAgICAgICAgICAgICAqIHN0YXJ0ZXIgKi8KKwkgICAgICAgICAgICBpZihkZWNvbXBBcmdzLmNjPT0wICYmIChnZXROb3JtMzIoZXh0cmFEYXRhLHAsIHFjTWFzaykmcWNNYXNrKT09MCkgeworCSAgICAgICAgICAgICAgICBicmVhazsgLyogdHJ1ZSBzdGFydGVyICovCisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCQorCSAgICAgICAgc3RhcnQrPSBjMj09MCA/IDEgOiAyOyAvKiBub3QgYSB0cnVlIHN0YXJ0ZXIsIGNvbnRpbnVlICovCisJICAgIH0KKwkKKwkgICAgcmV0dXJuIHN0YXJ0OworCX0KKwkKKyAgICAKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBDb21wb3NlUGFydEFyZ3N7CisJCWludCBwcmV2Q0M7CisgICAgICAgIGludCBsZW5ndGg7ICAgLyogbGVuZ3RoIG9mIGRlY29tcG9zZWQgcGFydCAqLworCX0KKwkgICAgCisgCisJcHJpdmF0ZSBzdGF0aWMgY2hhcltdIGNvbXBvc2VQYXJ0KENvbXBvc2VQYXJ0QXJncyBhcmdzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXZTdGFydGVyLCAKKwkJCQkgICAgICAgCSAgICAgICAgICAgICAgY2hhcltdIHNyYywgaW50IHN0YXJ0LCBpbnQgbGltaXQsCisJICAgICAgICAgICAgIAkJCSAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gcWNNYXNrKSB7CisJICAgIGludCByZWNvbXBvc2VMaW1pdDsKKyAgICAgICAgYm9vbGVhbiBjb21wYXQgPSgocWNNYXNrJlFDX05GS0MpIT0wKTsKKyAgICAgICAgCisJICAgIC8qIGRlY29tcG9zZSBbcHJldlN0YXJ0ZXIuLnNyY1sgKi8KKyAgICAgICAgaW50W10gb3V0VHJhaWxDQyA9IG5ldyBpbnRbMV07CisgICAgICAgIGNoYXJbXSBidWZmZXIgPSBuZXcgY2hhclsobGltaXQtcHJldlN0YXJ0ZXIpKk1BWF9CVUZGRVJfU0laRV07CisKKyAgICAgICAgZm9yKDs7KXsKKyAgICAgICAgICAgIGFyZ3MubGVuZ3RoPWRlY29tcG9zZShzcmMscHJldlN0YXJ0ZXIsKHN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLDAsYnVmZmVyLmxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdCxvdXRUcmFpbENDKTsKKyAgICAgICAgICAgIGlmKGFyZ3MubGVuZ3RoPD1idWZmZXIubGVuZ3RoKXsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBjaGFyW2FyZ3MubGVuZ3RoXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAKKwkKKwkgICAgLyogcmVjb21wb3NlIHRoZSBkZWNvbXBvc2l0aW9uICovCisJICAgIHJlY29tcG9zZUxpbWl0PWFyZ3MubGVuZ3RoOworCSAgCQorCSAgICBpZihhcmdzLmxlbmd0aD49MikgeworCSAgICAgICAgUmVjb21wb3NlQXJncyByY0FyZ3MgPSBuZXcgUmVjb21wb3NlQXJncygpOworCSAgICAgICAgcmNBcmdzLnNvdXJjZQk9IGJ1ZmZlcjsKKwkgICAgICAgIHJjQXJncy5zdGFydCAgICA9IDA7CisJICAgICAgICByY0FyZ3MubGltaXQJPSByZWNvbXBvc2VMaW1pdDsgCisJICAgICAgICBhcmdzLnByZXZDQz1yZWNvbXBvc2UocmNBcmdzKTsKKwkgICAgICAgIHJlY29tcG9zZUxpbWl0ID0gcmNBcmdzLmxpbWl0OworCSAgICB9CisgICAgICAgIAorCSAgICAvKiByZXR1cm4gd2l0aCBhIHBvaW50ZXIgdG8gdGhlIHJlY29tcG9zaXRpb24gYW5kIGl0cyBsZW5ndGggKi8KKwkgICAgYXJncy5sZW5ndGg9cmVjb21wb3NlTGltaXQ7CisJICAgIHJldHVybiBidWZmZXI7CisJfQorICAgIAorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29tcG9zZUhhbmd1bChjaGFyIHByZXYsIGNoYXIgYywKKwkJCQkJCQkJICAgICAgICAgbG9uZy8qdW5zaWduZWQqLyBub3JtMzIsIAorCQkJCQkJCQkgICAgICAgICBjaGFyW10gc3JjLGludFtdIHNyY0luZGV4LCBpbnQgbGltaXQsCisJICAgICAgICAgICAgICAgCQkJCSAgICAgICAgIGJvb2xlYW4gY29tcGF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGRlc3QsaW50IGRlc3RJbmRleCkgeworCSAgICBpbnQgc3RhcnQ9c3JjSW5kZXhbMF07CisJICAgIGlmKGlzSmFtb1ZUTm9ybTMySmFtb1Yobm9ybTMyKSkgeworCSAgICAgICAgLyogYyBpcyBhIEphbW8gViwgY29tcG9zZSB3aXRoIHByZXZpb3VzIEphbW8gTCBhbmQgCisgICAgICAgICAgICAgKiBmb2xsb3dpbmcgSmFtbyBUICovCisJICAgICAgICBwcmV2PShjaGFyKShwcmV2LUpBTU9fTF9CQVNFKTsKKwkgICAgICAgIGlmKHByZXY8SkFNT19MX0NPVU5UKSB7CisJICAgICAgICAgICAgYz0oY2hhcikoSEFOR1VMX0JBU0UrKHByZXYqSkFNT19WX0NPVU5UKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjLUpBTU9fVl9CQVNFKSkqSkFNT19UX0NPVU5UKTsKKwkKKwkgICAgICAgICAgICAvKiBjaGVjayBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSBKYW1vIFQgKG5vcm1hbCBvciAKKyAgICAgICAgICAgICAgICAgKiBjb21wYXRpYmlsaXR5KSAqLworCSAgICAgICAgICAgIGlmKHN0YXJ0IT1saW1pdCkgeworCSAgICAgICAgICAgICAgICBjaGFyIG5leHQsIHQ7CisJCisJICAgICAgICAgICAgICAgIG5leHQ9c3JjW3N0YXJ0XTsKKwkgICAgICAgICAgICAgICAgaWYoKHQ9KGNoYXIpKG5leHQtSkFNT19UX0JBU0UpKTxKQU1PX1RfQ09VTlQpIHsKKwkgICAgICAgICAgICAgICAgICAgIC8qIG5vcm1hbCBKYW1vIFQgKi8KKwkgICAgICAgICAgICAgICAgICAgICsrc3RhcnQ7CisJICAgICAgICAgICAgICAgICAgICBjKz10OworCSAgICAgICAgICAgICAgICB9IGVsc2UgaWYoY29tcGF0KSB7CisJICAgICAgICAgICAgICAgICAgICAvKiBpZiBORktDLCB0aGVuIGNoZWNrIGZvciBjb21wYXRpYmlsaXR5IEphbW8gVCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIChCTVAgb25seSkgKi8KKwkgICAgICAgICAgICAgICAgICAgIG5vcm0zMj1nZXROb3JtMzIobmV4dCk7CisJICAgICAgICAgICAgICAgICAgICBpZihpc05vcm0zMlJlZ3VsYXIobm9ybTMyKSAmJiAoKG5vcm0zMiZRQ19ORktEKSE9MCkpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcCAvKmluZGV4IGludG8gZXh0cmEgZGF0YSBhcnJheSovOworCSAgICAgICAgICAgICAgICAgICAgICAgIERlY29tcG9zZUFyZ3MgZGNBcmdzID0gbmV3IERlY29tcG9zZUFyZ3MoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBwPWRlY29tcG9zZShub3JtMzIsIFFDX05GS0QsIGRjQXJncyk7CisJICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGNBcmdzLmxlbmd0aD09MSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQ9KGNoYXIpKGV4dHJhRGF0YVtwXS1KQU1PX1RfQkFTRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SkFNT19UX0NPVU5UKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXBhdGliaWxpdHkgSmFtbyBUICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3RhcnQ7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMrPXQ7CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVzdFtkZXN0SW5kZXhdPWM7CisgICAgICAgICAgICAgICAgc3JjSW5kZXhbMF09c3RhcnQ7CisJICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICB9CisJICAgIH0gZWxzZSBpZihpc0hhbmd1bFdpdGhvdXRKYW1vVChwcmV2KSkgeworCSAgICAgICAgLyogYyBpcyBhIEphbW8gVCwgY29tcG9zZSB3aXRoIHByZXZpb3VzIEhhbmd1bCBMViB0aGF0IGRvZXMgbm90IAorICAgICAgICAgICAgICogY29udGFpbiBhIEphbW8gVCAqLworICAgICAgICAgICAgZGVzdFtkZXN0SW5kZXhdPShjaGFyKShwcmV2KyhjLUpBTU9fVF9CQVNFKSk7CisJICAgICAgICBzcmNJbmRleFswXT1zdGFydDsKKwkgICAgICAgIHJldHVybiB0cnVlOworCSAgICB9CisJICAgIHJldHVybiBmYWxzZTsKKwl9CisgICAgCisgICAgcHVibGljIHN0YXRpYyBpbnQgY29tcG9zZShjaGFyW10gc3JjLCBjaGFyW10gZGVzdCxib29sZWFuIGNvbXBhdCl7CisgICAgICAgIHJldHVybiBjb21wb3NlKHNyYywwLHNyYy5sZW5ndGgsZGVzdCwwLGRlc3QubGVuZ3RoLGNvbXBhdCk7CisgICAgfQorICAgIAorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvbXBvc2UoY2hhcltdIHNyYywgaW50IHNyY0luZGV4LCBpbnQgc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCxpbnQgZGVzdEluZGV4LGludCBkZXN0TGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbXBhdCkgeworICAgICAgICAKKyAgICAgICAgaW50IHByZXZTcmMsIHByZXZTdGFydGVyOworICAgICAgICBsb25nLyp1bnNpZ25lZCovIG5vcm0zMjsgCisgICAgICAgIGludCBjY09yUUNNYXNrLCBxY01hc2s7CisgICAgICAgIGludCAgcmVvcmRlclN0YXJ0SW5kZXgsIGxlbmd0aDsKKyAgICAgICAgY2hhciBjLCBjMiwgbWluTm9NYXliZTsKKyAgICAgICAgaW50Lyp1bnNpZ25lZCBieXRlKi8gY2MsIHByZXZDQzsKKyAgICAgICAgaW50W10gaW9JbmRleCA9IG5ldyBpbnRbMV07CisgICAgICAgIAorICAgICAgICBpZighY29tcGF0KSB7CisgICAgICAgICAgICBtaW5Ob01heWJlPShjaGFyKWluZGV4ZXNbSU5ERVhfTUlOX05GQ19OT19NQVlCRV07CisgICAgICAgICAgICBxY01hc2s9UUNfTkZDOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWluTm9NYXliZT0oY2hhcilpbmRleGVzW0lOREVYX01JTl9ORktDX05PX01BWUJFXTsKKyAgICAgICAgICAgIHFjTWFzaz1RQ19ORktDOworICAgICAgICB9CisgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIHByZXZTdGFydGVyIHBvaW50cyB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJyZW50IG9uZQorICAgICAgICAgKiB0aGF0IGlzIGEgInRydWUiIHN0YXJ0ZXIgd2l0aCBjYz09MCBhbmQgcXVpY2sgY2hlY2sgInllcyIuCisgICAgICAgICAqCisgICAgICAgICAqIHByZXZTdGFydGVyIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIGxvb2tpbmcgZm9yIGEgdHJ1ZSBzdGFydGVyCisgICAgICAgICAqIHdoaWxlIGluY3JlbWVudGFsbHkgZGVjb21wb3NpbmcgW3ByZXZTdGFydGVyLi5wcmV2U3JjWworICAgICAgICAgKiBpbiBfY29tcG9zZVBhcnQoKS4gSGF2aW5nIGEgZ29vZCBwcmV2U3RhcnRlciBhbGxvd3MgdG8ganVzdCBkZWNvbXBvc2UKKyAgICAgICAgICogdGhlIGVudGlyZSBbcHJldlN0YXJ0ZXIuLnByZXZTcmNbLgorICAgICAgICAgKgorICAgICAgICAgKiBXaGVuIF9jb21wb3NlUGFydCgpIGJhY2tzIG91dCBmcm9tIHByZXZTcmMgYmFjayB0byBwcmV2U3RhcnRlciwKKyAgICAgICAgICogdGhlbiBpdCBhbHNvIGJhY2tzIG91dCBkZXN0SW5kZXggYnkgdGhlIHNhbWUgYW1vdW50LgorICAgICAgICAgKiBUaGVyZWZvcmUsIGF0IGFsbCB0aW1lcywgdGhlIChwcmV2U3JjLXByZXZTdGFydGVyKSBzb3VyY2UgdW5pdHMKKyAgICAgICAgICogbXVzdCBjb3JyZXNwb25kIDE6MSB0byBkZXN0aW5hdGlvbiB1bml0cyBjb3VudGVkIHdpdGggZGVzdEluZGV4LAorICAgICAgICAgKiBleGNlcHQgZm9yIHJlb3JkZXJpbmcuCisgICAgICAgICAqIFRoaXMgaXMgdHJ1ZSBmb3IgdGhlIHFjICJ5ZXMiIGNoYXJhY3RlcnMgY29waWVkIGluIHRoZSBmYXN0IGxvb3AsCisgICAgICAgICAqIGFuZCBmb3IgcHVyZSByZW9yZGVyaW5nLgorICAgICAgICAgKiBwcmV2U3RhcnRlciBtdXN0IGJlIHNldCBmb3J3YXJkIHRvIHNyYyB3aGVuIHRoaXMgaXMgbm90IHRydWU6CisgICAgICAgICAqIEluIF9jb21wb3NlUGFydCgpIGFuZCBhZnRlciBjb21wb3NpbmcgYSBIYW5ndWwgc3lsbGFibGUuCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgbWVjaGFuaXNtIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBkZWNvbXBvc2l0aW9uIG9mIGEgCisgICAgICAgICAqIHRydWUgc3RhcnRlciBhbHNvIGJlZ2lucyB3aXRoIGEgdHJ1ZSBzdGFydGVyLiBnZW5ub3JtL3N0b3JlLmMgY2hlY2tzIAorICAgICAgICAgKiBmb3IgdGhpcy4KKyAgICAgICAgICovCisgICAgICAgIHByZXZTdGFydGVyPXNyY0luZGV4OworICAgIAorICAgICAgICBjY09yUUNNYXNrPUNDX01BU0t8cWNNYXNrOworICAgICAgICAvKmRlc3RJbmRleD0qL3Jlb3JkZXJTdGFydEluZGV4PTA7LyogIyMjI1RPRE8jIyMjIGNoZWNrIHRoaXMgKiovCisgICAgICAgIHByZXZDQz0wOworICAgIAorICAgICAgICAvKiBhdm9pZCBjb21waWxlciB3YXJuaW5ncyAqLworICAgICAgICBub3JtMzI9MDsKKyAgICAgICAgYz0wOworICAgIAorICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgIC8qIGNvdW50IGNvZGUgdW5pdHMgYmVsb3cgdGhlIG1pbmltdW0gb3Igd2l0aCBpcnJlbGV2YW50IGRhdGEgZm9yIAorICAgICAgICAgICAgICogdGhlIHF1aWNrIGNoZWNrICovCisgICAgICAgICAgICBwcmV2U3JjPXNyY0luZGV4OworCisgICAgICAgICAgICB3aGlsZShzcmNJbmRleCE9c3JjTGltaXQgJiYgKChjPXNyY1tzcmNJbmRleF0pPG1pbk5vTWF5YmUgfHwgCisgICAgICAgICAgICAgICAgICAgICAoKG5vcm0zMj1nZXROb3JtMzIoYykpJmNjT3JRQ01hc2spPT0wKSkgeworICAgICAgICAgICAgICAgIHByZXZDQz0wOworICAgICAgICAgICAgICAgICsrc3JjSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAKKyAgICAgICAgICAgIC8qIGNvcHkgdGhlc2UgY29kZSB1bml0cyBhbGwgYXQgb25jZSAqLworICAgICAgICAgICAgaWYoc3JjSW5kZXghPXByZXZTcmMpIHsKKyAgICAgICAgICAgICAgICBsZW5ndGg9KGludCkoc3JjSW5kZXgtcHJldlNyYyk7CisgICAgICAgICAgICAgICAgaWYoKGRlc3RJbmRleCtsZW5ndGgpPD1kZXN0TGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShzcmMscHJldlNyYyxkZXN0LGRlc3RJbmRleCxsZW5ndGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZXN0SW5kZXgrPWxlbmd0aDsKKyAgICAgICAgICAgICAgICByZW9yZGVyU3RhcnRJbmRleD1kZXN0SW5kZXg7CisgICAgCisgICAgICAgICAgICAgICAgLyogc2V0IHByZXZTdGFydGVyIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgcXVpY2sgY2hlY2sgCisgICAgICAgICAgICAgICAgICogbG9vcCAqLworICAgICAgICAgICAgICAgIHByZXZTdGFydGVyPXNyY0luZGV4LTE7CisgICAgICAgICAgICAgICAgaWYoVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShzcmNbcHJldlN0YXJ0ZXJdKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgcHJldlNyYzxwcmV2U3RhcnRlciAmJiAKKyAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNMZWFkU3Vycm9nYXRlKHNyY1socHJldlN0YXJ0ZXItMSldKSkgeworICAgICAgICAgICAgICAgICAgICAtLXByZXZTdGFydGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICBwcmV2U3JjPXNyY0luZGV4OworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgLyogZW5kIG9mIHNvdXJjZSByZWFjaGVkPyAqLworICAgICAgICAgICAgaWYoc3JjSW5kZXg9PXNyY0xpbWl0KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAvKiBjIGFscmVhZHkgY29udGFpbnMgKnNyYyBhbmQgbm9ybTMyIGlzIHNldCBmb3IgaXQsIGluY3JlbWVudCBzcmMqLworICAgICAgICAgICAgKytzcmNJbmRleDsKKyAgICAKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzb3VyY2UgYnVmZmVyIHBvaW50ZXJzOgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqICBhbGwgZG9uZSAgICAgIHF1aWNrIGNoZWNrICAgY3VycmVudCBjaGFyICBub3QgeWV0CisgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAieWVzIiBidXQgICAgIChjLCBjMikgICAgICAgcHJvY2Vzc2VkCisgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICBtYXkgY29tYmluZQorICAgICAgICAgICAgICogICAgICAgICAgICAgICAgZm9yd2FyZAorICAgICAgICAgICAgICogWy0tLS0tLS0tLS0tLS1bLS0tLS0tLS0tLS0tLVstLS0tLS0tLS0tLS0tWy0tLS0tLS0tLS0tLS1bCisgICAgICAgICAgICAgKiB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAqIHN0YXJ0ICAgICAgICAgcHJldlN0YXJ0ZXIgICBwcmV2U3JjICAgICAgIHNyYyAgICAgICAgICAgbGltaXQKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogZGVzdGluYXRpb24gYnVmZmVyIHBvaW50ZXJzIGFuZCBpbmRleGVzOgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqICBhbGwgZG9uZSAgICAgIG1pZ2h0IHRha2UgICAgbm90IGZpbGxlZCB5ZXQKKyAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgZm9yCisgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICByZW9yZGVyaW5nCisgICAgICAgICAgICAgKiBbLS0tLS0tLS0tLS0tLVstLS0tLS0tLS0tLS0tWy0tLS0tLS0tLS0tLS1bCisgICAgICAgICAgICAgKiB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICAgKiBkZXN0ICAgICAgcmVvcmRlclN0YXJ0SW5kZXggZGVzdEluZGV4ICAgICBkZXN0Q2FwYWNpdHkKKyAgICAgICAgICAgICAqLworICAgIAorICAgICAgICAgICAgLyogY2hlY2sgb25lIGFib3ZlLW1pbmltdW0sIHJlbGV2YW50IGNvZGUgdW5pdCAqLworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIG5vcm0zMiBpcyBmb3IgYz0qKHNyYy0xKSwgYW5kIHRoZSBxdWljayBjaGVjayBmbGFnIGlzICJubyIgb3IgCisgICAgICAgICAgICAgKiAibWF5YmUiLCBhbmQvb3IgY2MhPTAKKyAgICAgICAgICAgICAqIGNoZWNrIGZvciBKYW1vIFYvVCwgdGhlbiBmb3Igc3Vycm9nYXRlcyBhbmQgcmVndWxhciBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgKiBjIGlzIG5vdCBhIEhhbmd1bCBzeWxsYWJsZSBvciBKYW1vIEwgYmVjYXVzZQorICAgICAgICAgICAgICogdGhleSBhcmUgbm90IG1hcmtlZCB3aXRoIG5vL21heWJlIGZvciBORkMgJiBORktDKGFuZCB0aGVpciBjYz09MCkKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYoaXNOb3JtMzJIYW5ndWxPckphbW8obm9ybTMyKSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogYyBpcyBhIEphbW8gVi9UOgorICAgICAgICAgICAgICAgICAqIHRyeSB0byBjb21wb3NlIHdpdGggdGhlIHByZXZpb3VzIGNoYXJhY3RlciwgSmFtbyBWIGFsc28gd2l0aCAKKyAgICAgICAgICAgICAgICAgKiBhIGZvbGxvd2luZyBKYW1vIFQsIGFuZCBzZXQgdmFsdWVzIGhlcmUgcmlnaHQgbm93IGluIGNhc2Ugd2UgCisgICAgICAgICAgICAgICAgICoganVzdCBjb250aW51ZSB3aXRoIHRoZSBtYWluIGxvb3AKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBwcmV2Q0M9Y2M9MDsKKyAgICAgICAgICAgICAgICByZW9yZGVyU3RhcnRJbmRleD1kZXN0SW5kZXg7CisgICAgICAgICAgICAgICAgaW9JbmRleFswXT1zcmNJbmRleDsKKyAgICAgICAgICAgICAgICBpZiggLyogIyMjIFRPRE86IGRvIHdlIG5lZWQgdG8gZG8gdGhpcz8gIWlnbm9yZUhhbmd1bCAmJiAjIyMgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVzdEluZGV4PjAgJiYKKyAgICAgICAgICAgICAgICAgICAgY29tcG9zZUhhbmd1bChzcmNbKHByZXZTcmMtMSldLCBjLCBub3JtMzIsc3JjLCBpb0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xpbWl0LCBjb21wYXQsIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEluZGV4PD1kZXN0TGltaXQgPyBkZXN0SW5kZXgtMTogMCkKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjSW5kZXg9aW9JbmRleFswXTsKKyAgICAgICAgICAgICAgICAgICAgcHJldlN0YXJ0ZXI9c3JjSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzcmNJbmRleCA9IGlvSW5kZXhbMF07CisgICAgCisgICAgICAgICAgICAgICAgLyogdGhlIEphbW8gVi9UIGRpZCBub3QgY29tcG9zZSBpbnRvIGEgSGFuZ3VsIHN5bGxhYmxlLCBqdXN0IAorICAgICAgICAgICAgICAgICAqIGFwcGVuZCB0byBkZXN0ICovCisgICAgICAgICAgICAgICAgYzI9MDsKKyAgICAgICAgICAgICAgICBsZW5ndGg9MTsKKyAgICAgICAgICAgICAgICBwcmV2U3RhcnRlcj1wcmV2U3JjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZihpc05vcm0zMlJlZ3VsYXIobm9ybTMyKSkgeworICAgICAgICAgICAgICAgICAgICBjMj0wOworICAgICAgICAgICAgICAgICAgICBsZW5ndGg9MTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBjIGlzIGEgbGVhZCBzdXJyb2dhdGUsIGdldCB0aGUgcmVhbCBub3JtMzIgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYoc3JjSW5kZXghPXNyY0xpbWl0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjMj1zcmNbc3JjSW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKytzcmNJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aD0yOworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybTMyPWdldE5vcm0zMkZyb21TdXJyb2dhdGVQYWlyKG5vcm0zMiwgYzIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogYyBpcyBhbiB1bnBhaXJlZCBsZWFkIHN1cnJvZ2F0ZSwgbm90aGluZyB0byBkbyAqLworICAgICAgICAgICAgICAgICAgICAgICAgYzI9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aD0xOworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybTMyPTA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ29tcG9zZVBhcnRBcmdzIGFyZ3MgPW5ldyBDb21wb3NlUGFydEFyZ3MoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiB3ZSBhcmUgbG9va2luZyBhdCB0aGUgY2hhcmFjdGVyIChjLCBjMikgYXQgW3ByZXZTcmMuLnNyY1sgKi8KKyAgICAgICAgICAgICAgICBpZigobm9ybTMyJnFjTWFzayk9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgY2M9KGludCkoKFVOU0lHTkVEX0JZVEVfTUFTSykmKG5vcm0zMj4+Q0NfU0hJRlQpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjaGFyW10gcDsKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogZmluZCBhcHByb3ByaWF0ZSBib3VuZGFyaWVzIGFyb3VuZCB0aGlzIGNoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgICAgICogZGVjb21wb3NlIHRoZSBzb3VyY2UgdGV4dCBmcm9tIGJldHdlZW4gdGhlIGJvdW5kYXJpZXMsCisgICAgICAgICAgICAgICAgICAgICAqIGFuZCByZWNvbXBvc2UgaXQKKyAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICogdGhpcyBwdXRzIHRoZSBpbnRlcm1lZGlhdGUgdGV4dCBpbnRvIHRoZSBzaWRlIGJ1ZmZlciBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgICAqIGl0IG1pZ2h0IGJlIGxvbmdlciB0aGFuIHRoZSByZWNvbXBvc2l0aW9uIGVuZCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAqIG9yIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbWF5IGJlIHRvbyBzaG9ydCBvciBtaXNzaW5nCisgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAqIG5vdGUgdGhhdCBkZXN0SW5kZXggbWF5IGJlIGFkanVzdGVkIGJhY2t3YXJkcyB0byBhY2NvdW50CisgICAgICAgICAgICAgICAgICAgICAqIGZvciBzb3VyY2UgdGV4dCB0aGF0IHBhc3NlZCB0aGUgcXVpY2sgY2hlY2sgYnV0IG5lZWRlZCB0bworICAgICAgICAgICAgICAgICAgICAgKiB0YWtlIHBhcnQgaW4gdGhlIHJlY29tcG9zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGludCBkZWNvbXBRQ01hc2s9KHFjTWFzazw8MikmMHhmOyAvKiBkZWNvbXBvc2l0aW9uIHF1aWNrIGNoZWNrIG1hc2sgKi8KKyAgICAgICAgICAgICAgICAgICAgLyoKKwkJICAgICAgICAgICAgICogZmluZCB0aGUgbGFzdCB0cnVlIHN0YXJ0ZXIgaW4gW3ByZXZTdGFydGVyLi5zcmNbCisJCSAgICAgICAgICAgICAqIGl0IGlzIGVpdGhlciB0aGUgZGVjb21wb3NpdGlvbiBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGF0IHByZXZTcmMpLAorCQkgICAgICAgICAgICAgKiBvciBwcmV2U3RhcnRlcgorCQkgICAgICAgICAgICAgKi8KKwkJICAgICAgICAgICAgaWYoaXNUcnVlU3RhcnRlcihub3JtMzIsIENDX01BU0t8cWNNYXNrLCBkZWNvbXBRQ01hc2spKSB7CisJCSAgICAgICAgICAgICAgICBwcmV2U3RhcnRlcj1wcmV2U3JjOworCQkgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgICAgICAgICAgICAgLyogYWRqdXN0IGRlc3RJbmRleDogYmFjayBvdXQgd2hhdCBoYWQgYmVlbiBjb3BpZWQgd2l0aCBxYyAieWVzIiAqLworCQkgICAgICAgICAgICAgICAgZGVzdEluZGV4LT1wcmV2U3JjLXByZXZTdGFydGVyOworCQkgICAgICAgICAgICB9CisJCSAgICAgICAgCisJCSAgICAgICAgICAgIC8qIGZpbmQgdGhlIG5leHQgdHJ1ZSBzdGFydGVyIGluIFtzcmMuLmxpbWl0WyAqLworCQkgICAgICAgICAgICBzcmNJbmRleD1maW5kTmV4dFN0YXJ0ZXIoc3JjLCBzcmNJbmRleCxzcmNMaW1pdCwgcWNNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb21wUUNNYXNrLCBtaW5Ob01heWJlKTsKKyAgICAgICAgICAgICAgICAgICAgLy9hcmdzLnByZXZTdGFydGVyID0gcHJldlN0YXJ0ZXI7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MucHJldkNDCT0gcHJldkNDOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vYXJncy5kZXN0SW5kZXggPSBkZXN0SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MubGVuZ3RoID0gbGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBwPWNvbXBvc2VQYXJ0KGFyZ3MscHJldlN0YXJ0ZXIsc3JjLHNyY0luZGV4LHNyY0xpbWl0LHFjTWFzayk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYocD09bnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogYW4gZXJyb3Igb2NjdXJyZWQgKG91dCBvZiBtZW1vcnkpICovCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcHJldkNDICAgICAgPSBhcmdzLnByZXZDQzsKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICAgICAgPSBhcmdzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8qIGFwcGVuZCB0aGUgcmVjb21wb3NlZCBidWZmZXIgY29udGVudHMgdG8gdGhlIGRlc3RpbmF0aW9uIAorICAgICAgICAgICAgICAgICAgICAgKiBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYoKGRlc3RJbmRleCthcmdzLmxlbmd0aCk8PWRlc3RMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKGk8YXJncy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RJbmRleCsrXT1wW2krK107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBidWZmZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGtlZXAgaW5jcmVtZW50aW5nIHRoZSBkZXN0SW5kZXggZm9yIHByZWZsaWdodGluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEluZGV4Kz1sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAgICAgcHJldlN0YXJ0ZXI9c3JjSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8qIGFwcGVuZCB0aGUgc2luZ2xlIGNvZGUgcG9pbnQgKGMsIGMyKSB0byB0aGUgZGVzdGluYXRpb24gYnVmZmVyICovCisgICAgICAgICAgICBpZigoZGVzdEluZGV4K2xlbmd0aCk8PWRlc3RMaW1pdCkgeworICAgICAgICAgICAgICAgIGlmKGNjIT0wICYmIGNjPHByZXZDQykgeworICAgICAgICAgICAgICAgICAgICAvKiAoYywgYzIpIGlzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3QgdG8gdGhlIHByZWNlZGluZyAKKyAgICAgICAgICAgICAgICAgICAgICogdGV4dCAqLworICAgICAgICAgICAgICAgICAgICBpbnQgcmVvcmRlclNwbGl0PSBkZXN0SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGRlc3RJbmRleCs9bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBwcmV2Q0M9aW5zZXJ0T3JkZXJlZChkZXN0LHJlb3JkZXJTdGFydEluZGV4LCByZW9yZGVyU3BsaXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0SW5kZXgsIGMsIGMyLCBjYyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyoganVzdCBhcHBlbmQgKGMsIGMyKSAqLworICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RJbmRleCsrXT1jOworICAgICAgICAgICAgICAgICAgICBpZihjMiE9MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0SW5kZXgrK109YzI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJldkNDPWNjOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogYnVmZmVyIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgLyoga2VlcCBpbmNyZW1lbnRpbmcgdGhlIGRlc3RJbmRleCBmb3IgcHJlZmxpZ2h0aW5nICovCisgICAgICAgICAgICAgICAgZGVzdEluZGV4Kz1sZW5ndGg7CisgICAgICAgICAgICAgICAgcHJldkNDPWNjOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlc3RJbmRleDsKKyAgICB9CisJLyogbWFrZSBGQ0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQorCXByaXZhdGUgc3RhdGljIGludC8qaW5kZXgqLyBmaW5kU2FmZUZDRChjaGFyW10gc3JjLCBpbnQgc3RhcnQsIGludCBsaW1pdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZmNkMTYpIHsKKwkgICAgY2hhciBjLCBjMjsKKwkKKwkgICAgLyoKKwkgICAgICogZmluZCB0aGUgZmlyc3QgcG9zaXRpb24gaW4gW3NyYy4ubGltaXRbIGFmdGVyIHNvbWUgY2M9PTAgYWNjb3JkaW5nIAorICAgICAgICAgKiB0byBGQ0QgZGF0YQorCSAgICAgKgorCSAgICAgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLCB3ZSBoYXZlIGZjZDE2IGZyb20gYmVmb3JlIHNyYworCSAgICAgKgorCSAgICAgKiBzdG9wIGF0IHBvc2l0aW9uczoKKwkgICAgICogLSBhZnRlciB0cmFpbCBjYz09MAorCSAgICAgKiAtIGF0IHRoZSBlbmQgb2YgdGhlIHNvdXJjZQorCSAgICAgKiAtIGJlZm9yZSBsZWFkIGNjPT0wCisJICAgICAqLworCSAgICBmb3IoOzspIHsKKwkgICAgICAgIC8qIHN0b3AgaWYgdHJhaWwgY2M9PTAgZm9yIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgKi8KKwkgICAgICAgIGlmKChmY2QxNiYweGZmKT09MCkgeworCSAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgfQorCQorCSAgICAgICAgLyogZ2V0IGM9KnNyYyAtIHN0b3AgYXQgZW5kIG9mIHN0cmluZyAqLworCSAgICAgICAgaWYoc3RhcnQ9PWxpbWl0KSB7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICB9CisJICAgICAgICBjPXNyY1tzdGFydF07CisJCisJICAgICAgICAvKiBzdG9wIGlmIGxlYWQgY2M9PTAgZm9yIHRoaXMgY2hhcmFjdGVyICovCisJICAgICAgICBpZihjPE1JTl9XSVRIX0xFQURfQ0MgfHwgKGZjZDE2PWdldEZDRDE2KGMpKT09MCkgeworCSAgICAgICAgICAgIGJyZWFrOyAvKiBjYXRjaGVzIHRlcm1pbmF0aW5nIE5VTCwgdG9vICovCisJICAgICAgICB9CisJCisJICAgICAgICBpZighVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGMpKSB7CisJICAgICAgICAgICAgaWYoZmNkMTY8PTB4ZmYpIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgICsrc3RhcnQ7CisJICAgICAgICB9IGVsc2UgaWYoc3RhcnQrMSE9bGltaXQgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjMj1zcmNbc3RhcnQrMV0pKSkgeworCSAgICAgICAgICAgIC8qIGMgaXMgYSBsZWFkIHN1cnJvZ2F0ZSwgZ2V0IHRoZSByZWFsIGZjZDE2ICovCisJICAgICAgICAgICAgZmNkMTY9Z2V0RkNEMTZGcm9tU3Vycm9nYXRlUGFpcihmY2QxNiwgYzIpOworCSAgICAgICAgICAgIGlmKGZjZDE2PD0weGZmKSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBzdGFydCs9MjsKKwkgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgLyogYyBpcyBhbiB1bnBhaXJlZCBmaXJzdCBzdXJyb2dhdGUsIGxlYWQgY2M9PTAgKi8KKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIH0KKwkgICAgfQorCQorCSAgICByZXR1cm4gc3RhcnQ7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGludC8qdW5zaWduZWQgYnl0ZSovIGRlY29tcG9zZUZDRChjaGFyW10gc3JjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LGludCBkZWNvbXBMaW1pdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGRlc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBkZXN0SW5kZXhBcnIpIHsKKwkgICAgY2hhcltdIHA9bnVsbDsKKyAgICAgICAgaW50IHBTdGFydD0tMTsKKyAgICAgICAgCisJICAgIGxvbmcgLyp1bnNpZ25lZCBpbnQqLyBub3JtMzI7CisJICAgIGludCByZW9yZGVyU3RhcnRJbmRleDsKKwkgICAgY2hhciBjLCBjMjsKKyAgICAgICAgaW50Lyp1bnNpZ25lZCBieXRlKi8gcHJldkNDOworICAgICAgICBEZWNvbXBvc2VBcmdzIGFyZ3MgPSBuZXcgRGVjb21wb3NlQXJncygpOworICAgICAgICBpbnQgZGVzdEluZGV4ID0gZGVzdEluZGV4QXJyWzBdOworCSAgICAvKgorCSAgICAgKiBjYW5vbmljYWxseSBkZWNvbXBvc2UgW3NyYy4uZGVjb21wTGltaXRbCisJICAgICAqCisJICAgICAqIGFsbCBjaGFyYWN0ZXJzIGluIHRoaXMgcmFuZ2UgaGF2ZSBzb21lIG5vbi16ZXJvIGNjLAorCSAgICAgKiBkaXJlY3RseSBvciBpbiBkZWNvbXBvc2l0aW9uLAorCSAgICAgKiBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGluIHRoZSBmb2xsb3dpbmcgZm9yIHF1aWNrLWNoZWNrIAorICAgICAgICAgKiBsaW1pdHMgZXRjLgorCSAgICAgKgorCSAgICAgKiB0aGVyZSBfYXJlXyBfbm9fIEhhbmd1bCBzeWxsYWJsZXMgb3IgSmFtb3MgaW4gaGVyZSBiZWNhdXNlIHRoZXkgYXJlIAorICAgICAgICAgKiBGQ0Qtc2FmZSAoY2M9PTApIQorCSAgICAgKgorCSAgICAgKiB3ZSBhbHNvIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGZvciBjPT0wIGJlY2F1c2Ugd2UgaGF2ZSBhbiBlc3RhYmxpc2hlZCAKKyAgICAgICAgICogZGVjb21wTGltaXQKKwkgICAgICovCisJICAgIHJlb3JkZXJTdGFydEluZGV4PWRlc3RJbmRleDsKKwkgICAgcHJldkNDPTA7CisKKwkgICAgd2hpbGUoc3RhcnQ8ZGVjb21wTGltaXQpIHsKKwkgICAgICAgIGM9c3JjW3N0YXJ0KytdOworCSAgICAgICAgbm9ybTMyPWdldE5vcm0zMihjKTsKKwkgICAgICAgIGlmKGlzTm9ybTMyUmVndWxhcihub3JtMzIpKSB7CisJICAgICAgICAgICAgYzI9MDsKKwkgICAgICAgICAgICBhcmdzLmxlbmd0aD0xOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAvKgorCSAgICAgICAgICAgICAqIHJlbWluZGVyOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIFtzcmMuLmRlY29tcExpbWl0WworCSAgICAgICAgICAgICAqIG5vdCBjb250YWluaW5nIGFueSBIYW5ndWwvSmFtbyBjaGFyYWN0ZXJzLAorCSAgICAgICAgICAgICAqIHRoZXJlZm9yZSB0aGUgb25seSBzcGVjaWFscyBhcmUgbGVhZCBzdXJyb2dhdGVzCisJICAgICAgICAgICAgICovCisJICAgICAgICAgICAgLyogYyBpcyBhIGxlYWQgc3Vycm9nYXRlLCBnZXQgdGhlIHJlYWwgbm9ybTMyICovCisJICAgICAgICAgICAgaWYoc3RhcnQhPWRlY29tcExpbWl0ICYmIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoYzI9c3JjW3N0YXJ0XSkpeworCSAgICAgICAgICAgICAgICArK3N0YXJ0OworCSAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aD0yOworCSAgICAgICAgICAgICAgICBub3JtMzI9Z2V0Tm9ybTMyRnJvbVN1cnJvZ2F0ZVBhaXIobm9ybTMyLCBjMik7CisJICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgYzI9MDsKKwkgICAgICAgICAgICAgICAgYXJncy5sZW5ndGg9MTsKKwkgICAgICAgICAgICAgICAgbm9ybTMyPTA7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCQorCSAgICAgICAgLyogZ2V0IHRoZSBkZWNvbXBvc2l0aW9uIGFuZCB0aGUgbGVhZCBhbmQgdHJhaWwgY2MncyAqLworCSAgICAgICAgaWYoKG5vcm0zMiZRQ19ORkQpPT0wKSB7CisJICAgICAgICAgICAgLyogYyBkb2VzIG5vdCBkZWNvbXBvc2UgKi8KKwkgICAgICAgICAgICBhcmdzLmNjPWFyZ3MudHJhaWxDQz0oaW50KSgoVU5TSUdORURfQllURV9NQVNLKSYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3JtMzI+PkNDX1NISUZUKSk7CisJICAgICAgICAgICAgcD1udWxsOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAvKiBjIGRlY29tcG9zZXMsIGdldCBldmVyeXRoaW5nIGZyb20gdGhlIHZhcmlhYmxlLWxlbmd0aCBleHRyYSAKKyAgICAgICAgICAgICAgICAgKiBkYXRhICovCisJICAgICAgICAgICAgcFN0YXJ0PWRlY29tcG9zZShub3JtMzIsIGFyZ3MpOworCSAgICAgICAgICAgIHA9ZXh0cmFEYXRhOworICAgICAgICAgICAgICAgIGlmKGFyZ3MubGVuZ3RoPT0xKSB7CisJICAgICAgICAgICAgICAgIC8qIGZhc3RwYXRoIGEgc2luZ2xlIGNvZGUgdW5pdCBmcm9tIGRlY29tcG9zaXRpb24gKi8KKwkgICAgICAgICAgICAgICAgYz1wW3BTdGFydF07CisJICAgICAgICAgICAgICAgIGMyPTA7CisJICAgICAgICAgICAgICAgIHA9bnVsbDsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJCisJICAgICAgICAvKiBhcHBlbmQgdGhlIGRlY29tcG9zaXRpb24gdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgYXNzdW1lIAorICAgICAgICAgICAgICogbGVuZ3RoPjAgKi8KKwkgICAgICAgIGlmKChkZXN0SW5kZXgrYXJncy5sZW5ndGgpPD1kZXN0Lmxlbmd0aCkgeworCSAgICAgICAgICAgIGludCByZW9yZGVyU3BsaXQ9ZGVzdEluZGV4OworCSAgICAgICAgICAgIGlmKHA9PW51bGwpIHsKKwkgICAgICAgICAgICAgICAgLyogZmFzdHBhdGg6IHNpbmdsZSBjb2RlIHBvaW50ICovCisJICAgICAgICAgICAgICAgIGlmKGFyZ3MuY2MhPTAgJiYgYXJncy5jYzxwcmV2Q0MpIHsKKwkgICAgICAgICAgICAgICAgICAgIC8qIChjLCBjMikgaXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdCB0byB0aGUgcHJlY2VkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgKiAgdGV4dCAqLworCSAgICAgICAgICAgICAgICAgICAgZGVzdEluZGV4Kz1hcmdzLmxlbmd0aDsKKwkgICAgICAgICAgICAgICAgICAgIGFyZ3MudHJhaWxDQz1pbnNlcnRPcmRlcmVkKGRlc3QscmVvcmRlclN0YXJ0SW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVvcmRlclNwbGl0LCBkZXN0SW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYywgYzIsIGFyZ3MuY2MpOworCSAgICAgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgLyoganVzdCBhcHBlbmQgKGMsIGMyKSAqLworCSAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0SW5kZXgrK109YzsKKwkgICAgICAgICAgICAgICAgICAgIGlmKGMyIT0wKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0SW5kZXgrK109YzI7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICAvKiBnZW5lcmFsOiBtdWx0aXBsZSBjb2RlIHBvaW50cyAob3JkZXJlZCBieSB0aGVtc2VsdmVzKSAKKyAgICAgICAgICAgICAgICAgICAgICogZnJvbSBkZWNvbXBvc2l0aW9uICovCisJICAgICAgICAgICAgICAgIGlmKGFyZ3MuY2MhPTAgJiYgYXJncy5jYzxwcmV2Q0MpIHsKKwkgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBkZWNvbXBvc2l0aW9uIGlzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3QgdG8gCisgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgcHJlY2VkaW5nIHRleHQgKi8KKwkgICAgICAgICAgICAgICAgICAgIGRlc3RJbmRleCs9YXJncy5sZW5ndGg7CisJICAgICAgICAgICAgICAgICAgICBhcmdzLnRyYWlsQ0M9bWVyZ2VPcmRlcmVkKGRlc3QscmVvcmRlclN0YXJ0SW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW9yZGVyU3BsaXQsIHAsIHBTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFN0YXJ0K2FyZ3MubGVuZ3RoKTsKKwkgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIC8qIGp1c3QgYXBwZW5kIHRoZSBkZWNvbXBvc2l0aW9uICovCisJICAgICAgICAgICAgICAgICAgICBkbyB7CisJICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0SW5kZXgrK109cFtwU3RhcnQrK107CisJICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKC0tYXJncy5sZW5ndGg+MCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIC8qIGJ1ZmZlciBvdmVyZmxvdyAqLworCSAgICAgICAgICAgIC8qIGtlZXAgaW5jcmVtZW50aW5nIHRoZSBkZXN0SW5kZXggZm9yIHByZWZsaWdodGluZyAqLworCSAgICAgICAgICAgIGRlc3RJbmRleCs9YXJncy5sZW5ndGg7CisJICAgICAgICB9CisJCisJICAgICAgICBwcmV2Q0M9YXJncy50cmFpbENDOworCSAgICAgICAgaWYocHJldkNDPT0wKSB7CisJICAgICAgICAgICAgcmVvcmRlclN0YXJ0SW5kZXg9ZGVzdEluZGV4OworCSAgICAgICAgfQorCSAgICB9CisJICAgIGRlc3RJbmRleEFyclswXT1kZXN0SW5kZXg7CisJICAgIHJldHVybiBwcmV2Q0M7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgaW50IG1ha2VGQ0QoY2hhcltdIHNyYywgIGludCBzcmNTdGFydCwgIGludCBzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBkZXN0LCBpbnQgZGVzdFN0YXJ0LCBpbnQgZGVzdExpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkgICAgaW50IHByZXZTcmMsIGRlY29tcFN0YXJ0OworCSAgICBpbnQgZGVzdEluZGV4LCBsZW5ndGg7CisJICAgIGNoYXIgYywgYzI7CisJICAgIGludCAvKiB1bnNpZ25lZCBpbnQqLyBmY2QxNjsKKwkgICAgaW50IHByZXZDQywgY2M7CisJCisJICAgIC8qIGluaXRpYWxpemUgKi8KKwkgICAgZGVjb21wU3RhcnQ9c3JjU3RhcnQ7CisJICAgIGRlc3RJbmRleD1kZXN0U3RhcnQ7CisJICAgIHByZXZDQz0wOworCSAgICBjPTA7CisJICAgIGZjZDE2PTA7CisJCWludFtdIGRlc3RJbmRleEFyciA9IG5ldyBpbnRbMV07CisgICAgICAgIGRlc3RJbmRleEFyclswXT1kZXN0SW5kZXg7CisgICAgICAgIAorCSAgICBmb3IoOzspIHsKKwkgICAgICAgIC8qIHNraXAgYSBydW4gb2YgY29kZSB1bml0cyBiZWxvdyB0aGUgbWluaW11bSBvciB3aXRoIGlycmVsZXZhbnQgCisgICAgICAgICAgICAgKiBkYXRhIGZvciB0aGUgRkNEIGNoZWNrICovCisJICAgICAgICBwcmV2U3JjPXNyY1N0YXJ0OworCisgICAgICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgICAgICBpZihzcmNTdGFydD09c3JjTGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKChjPXNyY1tzcmNTdGFydF0pPE1JTl9XSVRIX0xFQURfQ0MpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldkNDPShpbnQpLWM7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKChmY2QxNj1nZXRGQ0QxNihjKSk9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldkNDPTA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrc3JjU3RhcnQ7CisgICAgICAgICAgICB9CisKKwkKKwkgICAgICAgIC8qCisJICAgICAgICAgKiBwcmV2Q0MgaGFzIHZhbHVlcyBmcm9tIHRoZSBmb2xsb3dpbmcgcmFuZ2VzOgorCSAgICAgICAgICogMC4uMHhmZiAtIHRoZSBwcmV2aW91cyB0cmFpbCBjb21iaW5pbmcgY2xhc3MKKwkgICAgICAgICAqIDwwICAgICAgLSB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhlIHByZXZpb3VzIGNvZGUgdW5pdDsKKwkgICAgICAgICAqICAgICAgICAgICB0aGF0IGNvZGUgdW5pdCB3YXMgPF9OT1JNX01JTl9XSVRIX0xFQURfQ0MgYW5kIGl0cyAKKyAgICAgICAgICAgICAqICAgICAgICAgICBnZXRGQ0QxNigpCisJICAgICAgICAgKiAgICAgICAgICAgd2FzIGRlZmVycmVkIHNvIHRoYXQgYXZlcmFnZSB0ZXh0IGlzIGNoZWNrZWQgZmFzdGVyCisJICAgICAgICAgKi8KKwkKKwkgICAgICAgIC8qIGNvcHkgdGhlc2UgY29kZSB1bml0cyBhbGwgYXQgb25jZSAqLworCSAgICAgICAgaWYoc3JjU3RhcnQhPXByZXZTcmMpIHsKKwkgICAgICAgICAgICBsZW5ndGg9KGludCkoc3JjU3RhcnQtcHJldlNyYyk7CisJICAgICAgICAgICAgaWYoKGRlc3RJbmRleCtsZW5ndGgpPD1kZXN0TGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShzcmMscHJldlNyYyxkZXN0LGRlc3RJbmRleCxsZW5ndGgpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBkZXN0SW5kZXgrPWxlbmd0aDsKKwkgICAgICAgICAgICBwcmV2U3JjPXNyY1N0YXJ0OworCQorCSAgICAgICAgICAgIC8qIHByZXZDQzwwIGlzIG9ubHkgcG9zc2libGUgZnJvbSB0aGUgYWJvdmUgbG9vcCwgaS5lLiwgb25seSBpZgorICAgICAgICAgICAgICAgICAqICBwcmV2U3JjPHNyYyAqLworCSAgICAgICAgICAgIGlmKHByZXZDQzwwKSB7CisJICAgICAgICAgICAgICAgIC8qIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgd2FzIDxfTk9STV9NSU5fV0lUSF9MRUFEX0NDLCB3ZSAKKyAgICAgICAgICAgICAgICAgICAgICogbmVlZCB0byBnZXQgaXRzIHRyYWlsIGNjICovCisJICAgICAgICAgICAgICAgIHByZXZDQz0oaW50KShnZXRGQ0QxNigoY2hhciktcHJldkNDKSYweGZmKTsKKwkKKwkgICAgICAgICAgICAgICAgLyoKKwkgICAgICAgICAgICAgICAgICogc2V0IGEgcG9pbnRlciB0byB0aGlzIGJlbG93LVUrMDMwMCBjaGFyYWN0ZXI7CisJICAgICAgICAgICAgICAgICAqIGlmIHByZXZDQz09MCB0aGVuIGl0IHdpbGwgbW92ZWQgdG8gYWZ0ZXIgdGhpcyBjaGFyYWN0ZXIgCisgICAgICAgICAgICAgICAgICAgICAqIGJlbG93CisJICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICBkZWNvbXBTdGFydD1wcmV2U3JjLTE7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgLyoKKwkgICAgICAgICAqIG5vdzoKKwkgICAgICAgICAqIHByZXZTcmM9PXNyYyAtIHVzZWQgbGF0ZXIgdG8gYWRqdXN0IGRlc3RJbmRleCBiZWZvcmUgCisgICAgICAgICAgICAgKiAgICAgICAgICBkZWNvbXBvc2l0aW9uCisJICAgICAgICAgKiBwcmV2Q0M+PTAKKwkgICAgICAgICAqLworCQorCSAgICAgICAgLyogZW5kIG9mIHNvdXJjZSByZWFjaGVkPyAqLworCSAgICAgICAgaWYoc3JjU3RhcnQ9PXNyY0xpbWl0KSB7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICB9CisJCisJICAgICAgICAvKiBzZXQgYSBwb2ludGVyIHRvIGFmdGVyIHRoZSBsYXN0IHNvdXJjZSBwb3NpdGlvbiB3aGVyZSBwcmV2Q0M9PTAqLworCSAgICAgICAgaWYocHJldkNDPT0wKSB7CisJICAgICAgICAgICAgZGVjb21wU3RhcnQ9cHJldlNyYzsKKwkgICAgICAgIH0KKwkKKwkgICAgICAgIC8qIGMgYWxyZWFkeSBjb250YWlucyAqc3JjIGFuZCBmY2QxNiBpcyBzZXQgZm9yIGl0LCBpbmNyZW1lbnQgc3JjICovCisJICAgICAgICArK3NyY1N0YXJ0OworCQorCSAgICAgICAgLyogY2hlY2sgb25lIGFib3ZlLW1pbmltdW0sIHJlbGV2YW50IGNvZGUgdW5pdCAqLworCSAgICAgICAgaWYoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGMpKSB7CisJICAgICAgICAgICAgLyogYyBpcyBhIGxlYWQgc3Vycm9nYXRlLCBnZXQgdGhlIHJlYWwgZmNkMTYgKi8KKwkgICAgICAgICAgICBpZihzcmNTdGFydCE9c3JjTGltaXQgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjMj1zcmNbc3JjU3RhcnRdKSkgeworCSAgICAgICAgICAgICAgICArK3NyY1N0YXJ0OworCSAgICAgICAgICAgICAgICBmY2QxNj1nZXRGQ0QxNkZyb21TdXJyb2dhdGVQYWlyKChjaGFyKWZjZDE2LCBjMik7CisJICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgYzI9MDsKKwkgICAgICAgICAgICAgICAgZmNkMTY9MDsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIGMyPTA7CisJICAgICAgICB9CisJCisJICAgICAgICAvKiB3ZSBhcmUgbG9va2luZyBhdCB0aGUgY2hhcmFjdGVyIChjLCBjMikgYXQgW3ByZXZTcmMuLnNyY1sgKi8KKwkKKwkgICAgICAgIC8qIGNoZWNrIHRoZSBjb21iaW5pbmcgb3JkZXIsIGdldCB0aGUgbGVhZCBjYyAqLworCSAgICAgICAgY2M9KGludCkoZmNkMTY+PjgpOworCSAgICAgICAgaWYoY2M9PTAgfHwgY2M+PXByZXZDQykgeworCSAgICAgICAgICAgIC8qIHRoZSBvcmRlciBpcyBvayAqLworCSAgICAgICAgICAgIGlmKGNjPT0wKSB7CisJICAgICAgICAgICAgICAgIGRlY29tcFN0YXJ0PXByZXZTcmM7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHByZXZDQz0oaW50KShmY2QxNiYweGZmKTsKKwkKKwkgICAgICAgICAgICAvKiBqdXN0IGFwcGVuZCAoYywgYzIpICovCisJICAgICAgICAgICAgbGVuZ3RoPSBjMj09MCA/IDEgOiAyOworCSAgICAgICAgICAgIGlmKChkZXN0SW5kZXgrbGVuZ3RoKTw9ZGVzdExpbWl0KSB7CisJICAgICAgICAgICAgICAgIGRlc3RbZGVzdEluZGV4KytdPWM7CisJICAgICAgICAgICAgICAgIGlmKGMyIT0wKSB7CisJICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RJbmRleCsrXT1jMjsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgIGRlc3RJbmRleCs9bGVuZ3RoOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgLyoKKwkgICAgICAgICAgICAgKiBiYWNrIG91dCB0aGUgcGFydCBvZiB0aGUgc291cmNlIHRoYXQgd2UgY29waWVkIGFscmVhZHkgYnV0CisJICAgICAgICAgICAgICogaXMgbm93IGdvaW5nIHRvIGJlIGRlY29tcG9zZWQ7CisJICAgICAgICAgICAgICogcHJldlNyYyBpcyBzZXQgdG8gYWZ0ZXIgd2hhdCB3YXMgY29waWVkCisJICAgICAgICAgICAgICovCisJICAgICAgICAgICAgZGVzdEluZGV4LT0oaW50KShwcmV2U3JjLWRlY29tcFN0YXJ0KTsKKwkKKwkgICAgICAgICAgICAvKgorCSAgICAgICAgICAgICAqIGZpbmQgdGhlIHBhcnQgb2YgdGhlIHNvdXJjZSB0aGF0IG5lZWRzIHRvIGJlIGRlY29tcG9zZWQ7CisJICAgICAgICAgICAgICogdG8gYmUgc2FmZSBhbmQgc2ltcGxlLCBkZWNvbXBvc2UgdG8gYmVmb3JlIHRoZSBuZXh0IGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAqIHdpdGggbGVhZCBjYz09MAorCSAgICAgICAgICAgICAqLworCSAgICAgICAgICAgIHNyY1N0YXJ0PWZpbmRTYWZlRkNEKHNyYyxzcmNTdGFydCwgc3JjTGltaXQsIChjaGFyKWZjZDE2KTsKKwkKKwkgICAgICAgICAgICAvKgorCSAgICAgICAgICAgICAqIHRoZSBzb3VyY2UgdGV4dCBkb2VzIG5vdCBmdWxmaWxsIHRoZSBjb25kaXRpb25zIGZvciBGQ0Q7CisJICAgICAgICAgICAgICogZGVjb21wb3NlIGFuZCByZW9yZGVyIGEgbGltaXRlZCBwaWVjZSBvZiB0aGUgdGV4dAorCSAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGRlc3RJbmRleEFyclswXSA9IGRlc3RJbmRleDsKKwkgICAgICAgICAgICBwcmV2Q0M9ZGVjb21wb3NlRkNEKHNyYyxkZWNvbXBTdGFydCwgc3JjU3RhcnQsZGVzdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0SW5kZXhBcnIpOworCSAgICAgICAgICAgIGRlY29tcFN0YXJ0PXNyY1N0YXJ0OworICAgICAgICAgICAgICAgIGRlc3RJbmRleD1kZXN0SW5kZXhBcnJbMF07CisJICAgICAgICB9CisJICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBkZXN0SW5kZXg7CisJCisJfQorCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0Q29tYmluaW5nQ2xhc3MoaW50IGMpIHsKKwkgICAgbG9uZyBub3JtMzI7CisgICAgICAgIGlmKGM8PTB4ZmZmZikgeworICAgICAgICAgICAgbm9ybTMyPWdldE5vcm0zMigoY2hhciljKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5vcm0zMj1nZXROb3JtMzIoVVRGMTYuZ2V0TGVhZFN1cnJvZ2F0ZShjKSk7CisgICAgICAgICAgICBpZigobm9ybTMyJkNDX01BU0spIT0wKSB7CisgICAgICAgICAgICAgICAgbm9ybTMyPWdldE5vcm0zMkZyb21TdXJyb2dhdGVQYWlyKG5vcm0zMixVVEYxNi5nZXRUcmFpbFN1cnJvZ2F0ZShjKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChjaGFyKSgobm9ybTMyPj5DQ19TSElGVCkmMHhGRik7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Z1bGxDb21wb3NpdGlvbkV4Y2x1c2lvbihpbnQgYykgeworCSAgICBpZihpc0Zvcm1hdFZlcnNpb25fMl8xKSB7CisJICAgICAgICBpbnQgYXV4ID1hdXhUcmllSW1wbC5hdXhUcmllLmdldENvZGVQb2ludFZhbHVlKGMpOworCSAgICAgICAgcmV0dXJuIChib29sZWFuKSgoYXV4ICYgQVVYX0NPTVBfRVhfTUFTSykhPTApOworCSAgICB9IGVsc2UgeworCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisJfQorCQorCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Nhbm9uU2FmZVN0YXJ0KGludCBjKSB7CisJICAgIGlmKGlzRm9ybWF0VmVyc2lvbl8yXzEpIHsKKwkgICAgICAgIGludCBhdXggPSBhdXhUcmllSW1wbC5hdXhUcmllLmdldENvZGVQb2ludFZhbHVlKGMpOworCSAgICAgICAgcmV0dXJuIChib29sZWFuKSgoYXV4ICYgQVVYX1VOU0FGRV9NQVNLKT09MCk7CisJICAgIH0gZWxzZSB7CisJICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisJCisJcHVibGljIHN0YXRpYyBib29sZWFuIGdldENhbm9uU3RhcnRTZXQoaW50IGMsIFVTZXJpYWxpemVkU2V0IGZpbGxTZXQpIHsKKworCSAgICBpZihmaWxsU2V0IT1udWxsICYmIGNhbm9uU3RhcnRTZXRzIT1udWxsKSB7CisJIAkJLyoKKwkgICAgICAgICAqIGJpbmFyeSBzZWFyY2ggZm9yIGMKKwkgICAgICAgICAqCisJICAgICAgICAgKiBUaGVyZSBhcmUgdHdvIHNlYXJjaCB0YWJsZXMsCisJICAgICAgICAgKiBvbmUgZm9yIEJNUCBjb2RlIHBvaW50cyBhbmQgb25lIGZvciBzdXBwbGVtZW50YXJ5IG9uZXMuCisJICAgICAgICAgKiBTZWUgdW5vcm1pbXAuaCBmb3IgZGV0YWlscy4KKwkgICAgICAgICAqLworCSAgICAgICAgY2hhcltdIHRhYmxlOworCSAgICAgICAgaW50IGk9MCwgc3RhcnQsIGxpbWl0OworCSAgICAgICAgCisgICAgICAgICAgICBpbnRbXSBpbmRleGVzID0gKGludFtdKSBjYW5vblN0YXJ0U2V0c1tDQU5PTl9TRVRfSU5ESUNJRVNfSU5ERVhdOworICAgICAgICAgICAgY2hhcltdIHN0YXJ0U2V0cyA9IChjaGFyW10pIGNhbm9uU3RhcnRTZXRzW0NBTk9OX1NFVF9TVEFSVF9TRVRTX0lOREVYXTsKKyAgICAgICAgICAgIAorCSAgICAgICAgaWYoYzw9MHhmZmZmKSB7CisJICAgICAgICAgICAgdGFibGU9KGNoYXJbXSkgY2Fub25TdGFydFNldHNbQ0FOT05fU0VUX0JNUF9UQUJMRV9JTkRFWF07CisJICAgICAgICAgICAgc3RhcnQ9MDsKKwkgICAgICAgICAgICBsaW1pdD10YWJsZS5sZW5ndGg7CisJCisJICAgICAgICAgICAgLyogZWFjaCBlbnRyeSBpcyBhIHBhaXIgeyBjLCByZXN1bHQgfSAqLworCSAgICAgICAgICAgIHdoaWxlKHN0YXJ0PGxpbWl0LTIpIHsKKwkgICAgICAgICAgICAgICAgaT0oY2hhcikoKChzdGFydCtsaW1pdCkvNCkqMik7IAorCSAgICAgICAgICAgICAgICBpZihjPHRhYmxlW2ldKSB7CisJICAgICAgICAgICAgICAgICAgICBsaW1pdD1pOworCSAgICAgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgc3RhcnQ9aTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihpKTsKKwkgICAgICAgICAgICAvKiBmb3VuZD8gKi8KKwkgICAgICAgICAgICBpZihjPT10YWJsZVtzdGFydF0pIHsKKwkgICAgICAgICAgICAgICAgaT10YWJsZVtzdGFydCsxXTsKKwkgICAgICAgICAgICAgICAgaWYoKGkgJiBDQU5PTl9TRVRfQk1QX01BU0spPT1DQU5PTl9TRVRfQk1QX0lTX0lOREVYKSB7CisJICAgICAgICAgICAgICAgICAgICAvKiByZXN1bHQgMDF4eHh4eHggeHh4eHh4IGNvbnRhaW5zIGluZGV4IHggdG8gYSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIFVTZXJpYWxpemVkU2V0ICovCisJICAgICAgICAgICAgICAgICAgICBpJj0oQ0FOT05fU0VUX01BWF9DQU5PTl9TRVRTLTEpOworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGxTZXQuZ2V0U2V0KHN0YXJ0U2V0cywoaS1pbmRleGVzLmxlbmd0aCkpOworCSAgICAgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgLyogb3RoZXIgcmVzdWx0IHZhbHVlcyBhcmUgQk1QIGNvZGUgcG9pbnRzIGZvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpbmdsZS1jb2RlIHBvaW50IHNldHMgKi8KKwkgICAgICAgICAgICAgICAgICAgIGZpbGxTZXQuc2V0U2VyaWFsaXplZFRvT25lKGkpOworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIGNoYXIgaGlnaCwgbG93LCBoLGo9MDsKKwkKKwkgICAgICAgICAgICB0YWJsZT0oY2hhcltdKSBjYW5vblN0YXJ0U2V0c1tDQU5PTl9TRVRfU1VQUF9UQUJMRV9JTkRFWF07CisJICAgICAgICAgICAgc3RhcnQ9MDsKKwkgICAgICAgICAgICBsaW1pdD10YWJsZS5sZW5ndGg7CisJCisJICAgICAgICAgICAgaGlnaD0oY2hhcikoYz4+MTYpOworCSAgICAgICAgICAgIGxvdz0oY2hhciljOworCQorCSAgICAgICAgICAgIC8qIGVhY2ggZW50cnkgaXMgYSB0cmlwbGV0IHsgaGlnaChjKSwgbG93KGMpLCByZXN1bHQgfSAqLworCSAgICAgICAgICAgIHdoaWxlKHN0YXJ0PGxpbWl0LTMpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogKHN0YXJ0K2xpbWl0KS8yIGFuZCBhZGRyZXNzIHRyaXBsZXRzICovCisJICAgICAgICAgICAgICAgIGk9KGNoYXIpKCgoc3RhcnQrbGltaXQpLzYpKjMpOworCSAgICAgICAgICAgICAgICBqPShjaGFyKSh0YWJsZVtpXSYweDFmKTsgLyogaGlnaCB3b3JkICovCisgICAgICAgICAgICAgICAgICAgIGludCB0YWJsZVZhbCA9IHRhYmxlW2krMV07CisgICAgICAgICAgICAgICAgICAgIGludCBsb3dJbnQgPSBsb3c7CisgICAgICAgICAgICAgICAgICAgIGlmKGhpZ2g8aiB8fCAoKHRhYmxlVmFsPmxvd0ludCkgJiYgKGhpZ2g9PWopKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ9aTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PWk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIlx0KChoaWdoPT1qKSAmJiAodGFibGVbaSsxXT5sb3cpKSA9PSAiICsgKChoaWdoPT1qKSAmJiAodGFibGVWYWw+bG93SW50KSkgKTsKKyAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIlx0XHQgaiA9ICIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGopICsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIlx0IGkgPSAiICsgSW50ZWdlci50b0hleFN0cmluZyhpKSArCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICJcdCBoaWdoID0gIisgSW50ZWdlci50b0hleFN0cmluZyhoaWdoKSAgKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIlx0IGxvdyA9ICIgICsgSW50ZWdlci50b0hleFN0cmluZyhsb3dJbnQpICAgKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAiXHQgdGFibGVbaSsxXTogIisgSW50ZWdlci50b0hleFN0cmluZyh0YWJsZVZhbCkgCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICB9CisKKwkgICAgICAgICAgICAvKiBmb3VuZD8gKi8KKwkgICAgICAgICAgICBoPXRhYmxlW3N0YXJ0XTsKKworICAgICAgICAgICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJjOiBcXFUiKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGMpKyIgaSA6ICIrSW50ZWdlci50b0hleFN0cmluZyhpKSArIiBoIDogIiArIEludGVnZXIudG9IZXhTdHJpbmcoaCkpOworICAgICAgICAgICAgICAgIGludCB0YWJsZVZhbDEgPSB0YWJsZVtzdGFydCsxXTsKKyAgICAgICAgICAgICAgICBpbnQgbG93SW50ID0gbG93OworCisJICAgICAgICAgICAgaWYoaGlnaD09KGgmMHgxZikgJiYgbG93SW50PT10YWJsZVZhbDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRhYmxlVmFsMiA9IHRhYmxlW3N0YXJ0KzJdOworCSAgICAgICAgICAgICAgICBpPXRhYmxlVmFsMjsKKwkgICAgICAgICAgICAgICAgaWYoKGgmMHg4MDAwKT09MCkgeworCSAgICAgICAgICAgICAgICAgICAgLyogdGhlIHJlc3VsdCBpcyBhbiBpbmRleCB0byBhIFVTZXJpYWxpemVkU2V0ICovCisJICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsbFNldC5nZXRTZXQoc3RhcnRTZXRzLChpLWluZGV4ZXMubGVuZ3RoKSk7CisJICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAvKgorCSAgICAgICAgICAgICAgICAgICAgICogc2luZ2xlLWNvZGUgcG9pbnQgc2V0IHt4fSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICogdHJpcGxldCB7IDEwMHh4eHh4IDAwMGhoaGhoICBsbGxsbGxsbCBsbGxsbGxsbCAgeHh4eHh4eHggeHh4eHh4eHggfQorCSAgICAgICAgICAgICAgICAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAvL2l8PSgoaW50KWggJiAweDFmMDApPDw4OyAvKiBhZGQgaGlnaCBiaXRzIGZyb20gaGlnaChjKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlbXAgPSAoKGludCloICYgMHgxZjAwKTw8ODsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl8PXRlbXA7IC8qIGFkZCBoaWdoIGJpdHMgZnJvbSBoaWdoKGMpICovCisJICAgICAgICAgICAgICAgICAgICBmaWxsU2V0LnNldFNlcmlhbGl6ZWRUb09uZSgoaW50KWkpOworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgIH0KKwkKKwkgICAgcmV0dXJuIGZhbHNlOyAvKiBub3QgZm91bmQgKi8KKwl9CisgICAgCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0RkNfTkZLQ19DbG9zdXJlKGludCBjLCBjaGFyW10gZGVzdCkgeworICAgICAgICAKKyAgICAgICAgaW50IGRlc3RDYXBhY2l0eTsKKyAgICAgICAgIAorICAgICAgICBpZihkZXN0PT1udWxsICkgeworICAgICAgICAgICAgZGVzdENhcGFjaXR5PTA7CisgICAgICAgIH1lbHNleworICAgICAgICAgICAgZGVzdENhcGFjaXR5ID0gZGVzdC5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBhdXggPWF1eFRyaWVJbXBsLmF1eFRyaWUuZ2V0Q29kZVBvaW50VmFsdWUoYyk7CisKKyAgICAgICAgYXV4Jj0gQVVYX0ZOQ19NQVNLOworICAgICAgICBpZihhdXghPTApIHsKKyAgICAgICAgICAgIGludCBzOworICAgICAgICAgICAgaW50IGluZGV4PWF1eDsgCisgICAgICAgICAgICBpbnQgbGVuZ3RoOworICAgICAgICAgICAgCisgICAgICAgICAgICBzID1leHRyYURhdGFbaW5kZXhdOworICAgICAgICAgICAgaWYoczwweGZmMDApIHsKKyAgICAgICAgICAgICAgICAvKiBzIHBvaW50cyB0byB0aGUgc2luZ2xlLXVuaXQgc3RyaW5nICovCisgICAgICAgICAgICAgICAgbGVuZ3RoPTE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxlbmd0aD1zJjB4ZmY7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKDA8bGVuZ3RoICYmIGxlbmd0aDw9ZGVzdENhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShleHRyYURhdGEsaW5kZXgsZGVzdCwwLGxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qIElzIGMgYW4gTkY8bW9kZT4tc2tpcHBhYmxlIGNvZGUgcG9pbnQ/IFNlZSB1bm9ybWltcC5oLiAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05GU2tpcHBhYmxlKGludCBjLCBOb3JtYWxpemVyLk1vZGUgbW9kZSwgbG9uZyBtYXNrKSB7CisgICAgICAgIGxvbmcgLyp1bnNpZ25lZCBpbnQqLyBub3JtMzI7CisgICAgICAgIG1hc2sgPSBtYXNrICYgVU5TSUdORURfSU5UX01BU0s7CisgICAgICAgIGNoYXIgYXV4LCBmY2Q7CisgICAKKyAgICAgICAgLyogY2hlY2sgY29uZGl0aW9ucyAoYSkuLihlKSwgc2VlIHVub3JtaW1wLmggKi8KKyAgICAgICAgbm9ybTMyID0gZ2V0Tm9ybTMyKGMpOworCisgICAgICAgIGlmKChub3JtMzImbWFzaykhPTApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLyogZmFpbHMgKGEpLi4oZSksIG5vdCBza2lwcGFibGUgKi8KKyAgICAgICAgfQorICAgIAorICAgICAgICBpZihtb2RlID09IE5vcm1hbGl6ZXIuTkZEIHx8IG1vZGUgPT0gTm9ybWFsaXplci5ORktEIHx8IG1vZGUgPT0gTm9ybWFsaXplci5OT05FKXsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBORipELCBwYXNzZWQgKGEpLi4oYyksIGlzIHNraXBwYWJsZSAqLworICAgICAgICB9CisgICAgICAgIC8qIGNoZWNrIGNvbmRpdGlvbnMgKGEpLi4oZSksIHNlZSB1bm9ybWltcC5oICovCisKKyAgICAgICAgLyogTkYqQy9GQ0MsIHBhc3NlZCAoYSkuLihlKSAqLworICAgICAgICBpZigobm9ybTMyJiBRQ19ORkQpPT0wKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLyogbm8gY2Fub25pY2FsIGRlY29tcG9zaXRpb24sIGlzIHNraXBwYWJsZSAqLworICAgICAgICB9CisgICAgCisgICAgICAgIC8qIGNoZWNrIEhhbmd1bCBzeWxsYWJsZXMgYWxnb3JpdGhtaWNhbGx5ICovCisgICAgICAgIGlmKGlzTm9ybTMySGFuZ3VsT3JKYW1vKG5vcm0zMikpIHsKKyAgICAgICAgICAgIC8qIEphbW8gcGFzc2VkIChhKS4uKGUpIGFib3ZlLCBtdXN0IGJlIEhhbmd1bCAqLworICAgICAgICAgICAgcmV0dXJuICFpc0hhbmd1bFdpdGhvdXRKYW1vVCgoY2hhciljKTsgLyogTFZUIGFyZSBza2lwcGFibGUsIExWIGFyZSBub3QgKi8KKyAgICAgICAgfQorICAgIAorICAgICAgICAvKiBpZihtb2RlPD1VTk9STV9ORktDKSB7IC0tIGVuYWJsZSB3aGVuIGltcGxlbWVudGluZyBGQ0MgKi8KKyAgICAgICAgLyogTkYqQywgdGVzdCAoZikgZmxhZyAqLworICAgICAgICBpZighaXNGb3JtYXRWZXJzaW9uXzJfMikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvKiBubyAoZikgZGF0YSwgc2F5IG5vdCBza2lwcGFibGUgdG8gYmUgc2FmZSAqLworICAgICAgICB9CisgICAgCisKKyAgICAgICAgYXV4ID0gYXV4VHJpZUltcGwuYXV4VHJpZS5nZXRDb2RlUG9pbnRWYWx1ZShjKTsKKyAgICAgICAgcmV0dXJuIChhdXgmQVVYX05GQ19TS0lQX0ZfTUFTSyk9PTA7IC8qIFRSVUU9c2tpcHBhYmxlIGlmIHRoZSAoZikgZmxhZyBpcyBub3Qgc2V0ICovCisgICAgCisgICAgICAgIC8qIH0gZWxzZSB7IEZDQywgdGVzdCBmY2Q8PTEgaW5zdGVhZCBvZiB0aGUgYWJvdmUgfSAqLworICAgIH0KKyAgICAvKgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4KKyAgICBfZW51bVByb3BlcnR5U3RhcnRzUmFuZ2UoY29uc3Qgdm9pZCAqY29udGV4dCwgVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBsaW1pdCwgdWludDMyX3QgdmFsdWUpIHsKKyAgICAgICAgLy8gYWRkIHRoZSBzdGFydCBjb2RlIHBvaW50IHRvIHRoZSBVU2V0IAorICAgICAgICB1c2V0X2FkZCgoVVNldCAqKWNvbnRleHQsIHN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgICovCisKKyAgICBwdWJsaWMgc3RhdGljIFVuaWNvZGVTZXQgYWRkUHJvcGVydHlTdGFydHMoVW5pY29kZVNldCBzZXQpIHsKKyAgICAgICAgaW50IGM7CisgICAgICAgCisgICAgICAgIC8qIGFkZCB0aGUgc3RhcnQgY29kZSBwb2ludCBvZiBlYWNoIHNhbWUtdmFsdWUgcmFuZ2Ugb2YgZWFjaCB0cmllICovCisgICAgICAgIC8vdXRyaWVfZW51bSgmbm9ybVRyaWUsIE5VTEwsIF9lbnVtUHJvcGVydHlTdGFydHNSYW5nZSwgc2V0KTsKKyAgICAgICAgVHJpZUl0ZXJhdG9yIG5vcm1JdGVyID0gbmV3IFRyaWVJdGVyYXRvcihub3JtVHJpZUltcGwubm9ybVRyaWUpOworICAgICAgICBSYW5nZVZhbHVlSXRlcmF0b3IuRWxlbWVudCByZXN1bHQgPSBuZXcgUmFuZ2VWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQoKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlKG5vcm1JdGVyLm5leHQocmVzdWx0KSl7CisgICAgICAgICAgICBzZXQuYWRkKHJlc3VsdC5zdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFRyaWVJdGVyYXRvciBmY2RJdGVyICA9IG5ldyBUcmllSXRlcmF0b3IoZmNkVHJpZUltcGwuZmNkVHJpZSk7CisgICAgICAgIC8vdXRyaWVfZW51bSgmZmNkVHJpZSwgTlVMTCwgX2VudW1Qcm9wZXJ0eVN0YXJ0c1JhbmdlLCBzZXQpOworICAgICAgICB3aGlsZShub3JtSXRlci5uZXh0KHJlc3VsdCkpeworICAgICAgICAgICAgc2V0LmFkZChyZXN1bHQuc3RhcnQpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8qIGFkZCBIYW5ndWwgTFYgc3lsbGFibGVzIGFuZCBMVisxIGJlY2F1c2Ugb2Ygc2tpcHBhYmxlcyAqLworICAgICAgICBmb3IoYz1IQU5HVUxfQkFTRTsgYzxIQU5HVUxfQkFTRStIQU5HVUxfQ09VTlQ7IGMrPUpBTU9fVF9DT1VOVCkgeworICAgICAgICAgICAgc2V0LmFkZChjKTsKKyAgICAgICAgICAgIHNldC5hZGQoYysxKTsKKyAgICAgICAgfQorICAgICAgICBzZXQuYWRkKEhBTkdVTF9CQVNFK0hBTkdVTF9DT1VOVCk7IC8qIGFkZCBIYW5ndWwrMSB0byBjb250aW51ZSB3aXRoIG90aGVyIHByb3BlcnRpZXMgKi8KKyAgICAgICAgcmV0dXJuIHNldDsgLy8gZm9yIGNoYWluaW5nCisgICAgfQorCisJLyoqCisJICogSW50ZXJuYWwgQVBJLCB1c2VkIGJ5IGNvbGxhdGlvbiBjb2RlLgorCSAqIEdldCBhY2Nlc3MgdG8gdGhlIGludGVybmFsIEZDRCB0cmllIHRhYmxlIHRvIGJlIGFibGUgdG8gcGVyZm9ybQorCSAqIGluY3JlbWVudGFsLCBwZXItY29kZSB1bml0LCBGQ0QgY2hlY2tzIGluIGNvbGxhdGlvbi4KKwkgKiBPbmUgcG9pbnRlciBpcyBzdWZmaWNpZW50IGJlY2F1c2UgdGhlIHRyaWUgaW5kZXggdmFsdWVzIGFyZSBvZmZzZXQKKwkgKiBieSB0aGUgaW5kZXggc2l6ZSwgc28gdGhhdCB0aGUgc2FtZSBwb2ludGVyIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSB0cmllIAorICAgICAqIGRhdGEuCisJICogQGludGVybmFsCisJICovCisJcHVibGljIENoYXJUcmllIGdldEZDRFRyaWUoKXsKKwkJcmV0dXJuIGZjZFRyaWVJbXBsLmZjZFRyaWU7CisJfQorCisKKyAgICAKKyAgIC8qIGNvbXBhcmUgY2Fub25pY2FsbHkgZXF1aXZhbGVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvKgorCSAqIENvbXBhcmUgdHdvIHN0cmluZ3MgZm9yIGNhbm9uaWNhbCBlcXVpdmFsZW5jZS4KKwkgKiBGdXJ0aGVyIG9wdGlvbnMgaW5jbHVkZSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24gYW5kCisJICogY29kZSBwb2ludCBvcmRlciAoYXMgb3Bwb3NlZCB0byBjb2RlIHVuaXQgb3JkZXIpLgorCSAqCisJICogSW4gdGhpcyBmdW5jdGlvbiwgY2Fub25pY2FsIGVxdWl2YWxlbmNlIGlzIG9wdGlvbmFsIGFzIHdlbGwuCisJICogSWYgY2Fub25pY2FsIGVxdWl2YWxlbmNlIGlzIHRlc3RlZCwgdGhlbiBib3RoIHN0cmluZ3MgbXVzdCBmdWxmaWxsCisJICogdGhlIEZDRCBjaGVjay4KKwkgKgorCSAqIFNlbWFudGljYWxseSwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisJICogICBzdHJjbXBbQ29kZVBvaW50T3JkZXJdKGZvbGRDYXNlKE5GRChzMSkpLCBmb2xkQ2FzZShORkQoczIpKSkKKwkgKiB3aGVyZSBjb2RlIHBvaW50IG9yZGVyLCBORkQgYW5kIGZvbGRDYXNlIGFyZSBhbGwgb3B0aW9uYWwuCisJICoKKwkgKiBTdHJpbmcgY29tcGFyaXNvbnMgYWxtb3N0IGFsd2F5cyB5aWVsZCByZXN1bHRzIGJlZm9yZSBwcm9jZXNzaW5nIGJvdGggCisgICAgICogc3RyaW5ncyBjb21wbGV0ZWx5LgorCSAqIFRoZXkgYXJlIGdlbmVyYWxseSBtb3JlIGVmZmljaWVudCB3b3JraW5nIGluY3JlbWVudGFsbHkgaW5zdGVhZCBvZgorCSAqIHBlcmZvcm1pbmcgdGhlIHN1Yi1wcm9jZXNzaW5nIChzdHJsZW4sIG5vcm1hbGl6YXRpb24sIGNhc2UtZm9sZGluZykKKwkgKiBvbiB0aGUgZW50aXJlIHN0cmluZ3MgZmlyc3QuCisJICoKKwkgKiBJdCBpcyBhbHNvIHVubmVjZXNzYXJ5IHRvIG5vdCBub3JtYWxpemUgaWRlbnRpY2FsIGNoYXJhY3RlcnMuCisJICoKKwkgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGluIHByaW5jaXBsZSBhcyBmb2xsb3dzOgorCSAqCisJICogbG9vcCB7CisJICogICBnZXQgb25lIGNvZGUgdW5pdCBjMSBmcm9tIHMxICgtMSBpZiBlbmQgb2Ygc291cmNlKQorCSAqICAgZ2V0IG9uZSBjb2RlIHVuaXQgYzIgZnJvbSBzMiAoLTEgaWYgZW5kIG9mIHNvdXJjZSkKKwkgKgorCSAqICAgaWYoZWl0aGVyIHN0cmluZyBmaW5pc2hlZCkgeworCSAqICAgICByZXR1cm4gcmVzdWx0OworCSAqICAgfQorCSAqICAgaWYoYzE9PWMyKSB7CisJICogICAgIGNvbnRpbnVlOworCSAqICAgfQorCSAqCisJICogICAvLyBjMSE9YzIKKwkgKiAgIHRyeSB0byBkZWNvbXBvc2UvY2FzZS1mb2xkIGMxL2MyLCBhbmQgY29udGludWUgaWYgb25lIGRvZXM7CisJICoKKwkgKiAgIC8vIHN0aWxsIGMxIT1jMiBhbmQgbmVpdGhlciBkZWNvbXBvc2VzL2Nhc2UtZm9sZHMsIHJldHVybiByZXN1bHQKKwkgKiAgIHJldHVybiBjMS1jMjsKKwkgKiB9CisJICoKKwkgKiBXaGVuIGEgY2hhcmFjdGVyIGRlY29tcG9zZXMsIHRoZW4gdGhlIHBvaW50ZXIgZm9yIHRoYXQgc291cmNlIGNoYW5nZXMgdG8KKwkgKiB0aGUgZGVjb21wb3NpdGlvbiwgcHVzaGluZyB0aGUgcHJldmlvdXMgcG9pbnRlciBvbnRvIGEgc3RhY2suCisJICogV2hlbiB0aGUgZW5kIG9mIHRoZSBkZWNvbXBvc2l0aW9uIGlzIHJlYWNoZWQsIHRoZW4gdGhlIGNvZGUgdW5pdCByZWFkZXIKKwkgKiBwb3BzIHRoZSBwcmV2aW91cyBzb3VyY2UgZnJvbSB0aGUgc3RhY2suCisJICogKFNhbWUgZm9yIGNhc2UtZm9sZGluZy4pCisJICoKKwkgKiBUaGlzIGlzIGNvbXBsaWNhdGVkIGZ1cnRoZXIgYnkgb3BlcmF0aW5nIG9uIHZhcmlhYmxlLXdpZHRoIFVURi0xNi4KKwkgKiBUaGUgdG9wIHBhcnQgb2YgdGhlIGxvb3Agd29ya3Mgb24gY29kZSB1bml0cywgd2hpbGUgbG9va3VwcyBmb3IgZGVjb21wb3NpdGlvbgorCSAqIGFuZCBjYXNlLWZvbGRpbmcgbmVlZCBjb2RlIHBvaW50cy4KKwkgKiBDb2RlIHBvaW50cyBhcmUgYXNzZW1ibGVkIGFmdGVyIHRoZSBlcXVhbGl0eS9lbmQtb2Ytc291cmNlIHBhcnQuCisJICogVGhlIHNvdXJjZSBwb2ludGVyIGlzIG9ubHkgYWR2YW5jZWQgYmV5b25kIGFsbCBjb2RlIHVuaXRzIHdoZW4gdGhlIGNvZGUgcG9pbnQKKwkgKiBhY3R1YWxseSBkZWNvbXBvc2VzL2Nhc2UtZm9sZHMuCisJICoKKwkgKiBJZiB3ZSB3ZXJlIG9uIGEgdHJhaWwgc3Vycm9nYXRlIHVuaXQgd2hlbiBhc3NlbWJsaW5nIGEgY29kZSBwb2ludCwKKwkgKiBhbmQgdGhlIGNvZGUgcG9pbnQgZGVjb21wb3Nlcy9jYXNlLWZvbGRzLCB0aGVuIHRoZSBkZWNvbXBvc2l0aW9uL2ZvbGRpbmcKKwkgKiByZXN1bHQgbXVzdCBiZSBjb21wYXJlZCB3aXRoIHRoZSBwYXJ0IG9mIHRoZSBvdGhlciBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0bworCSAqIHRoaXMgc3RyaW5nJ3MgbGVhZCBzdXJyb2dhdGUuCisJICogU2luY2Ugd2Ugb25seSBhc3NlbWJsZSBhIGNvZGUgcG9pbnQgd2hlbiBoaXR0aW5nIGEgdHJhaWwgdW5pdCB3aGVuIHRoZQorCSAqIHByZWNlZGluZyBsZWFkIHVuaXRzIHdlcmUgaWRlbnRpY2FsLCB3ZSBiYWNrIHVwIHRoZSBvdGhlciBzdHJpbmcgYnkgb25lIHVuaXQKKwkgKiBpbiBzdWNoIGEgY2FzZS4KKwkgKgorCSAqIFRoZSBvcHRpb25hbCBjb2RlIHBvaW50IG9yZGVyIGNvbXBhcmlzb24gYXQgdGhlIGVuZCB3b3JrcyB3aXRoCisJICogdGhlIHNhbWUgZml4LXVwIGFzIHRoZSBvdGhlciBjb2RlIHBvaW50IG9yZGVyIGNvbXBhcmlzb24gZnVuY3Rpb25zLgorCSAqIFNlZSB1c3RyaW5nLmMgYW5kIHRoZSBjb21tZW50IG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLgorCSAqCisJICogQXNzdW1wdGlvbjogQSBkZWNvbXBvc2l0aW9uIG9yIGNhc2UtZm9sZGluZyByZXN1bHQgc3RyaW5nIG5ldmVyIGNvbnRhaW5zCisJICogYSBzaW5nbGUgc3Vycm9nYXRlLiBUaGlzIGlzIGEgc2FmZSBhc3N1bXB0aW9uIGluIHRoZSBVbmljb2RlIFN0YW5kYXJkLgorCSAqIFRoZXJlZm9yZSwgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgZm9yIHN1cnJvZ2F0ZSBwYWlycyBhY3Jvc3MKKwkgKiBkZWNvbXBvc2l0aW9uL2Nhc2UtZm9sZGluZyBib3VuZGFyaWVzLgorCSAqIEZ1cnRoZXIgYXNzdW1wdGlvbnMgKHNlZSB2ZXJpZmljYXRpb25zIHRzdG5vcm0uY3BwKToKKwkgKiBUaGUgQVBJIGZ1bmN0aW9uIGNoZWNrcyBmb3IgRkNEIGZpcnN0LCB3aGlsZSB0aGUgY29yZSBmdW5jdGlvbgorCSAqIGZpcnN0IGNhc2UtZm9sZHMgYW5kIHRoZW4gZGVjb21wb3Nlcy4gVGhpcyByZXF1aXJlcyB0aGF0IGNhc2UtZm9sZGluZyBkb2VzIG5vdAorCSAqIHVuLUZDRCBhbnkgc3RyaW5ncy4KKwkgKgorCSAqIFRoZSBBUEkgZnVuY3Rpb24gbWF5IGFsc28gTkZEIHRoZSBpbnB1dCBhbmQgdHVybiBvZmYgZGVjb21wb3NpdGlvbi4KKwkgKiBUaGlzIHJlcXVpcmVzIHRoYXQgY2FzZS1mb2xkaW5nIGRvZXMgbm90IHVuLU5GRCBzdHJpbmdzIGVpdGhlci4KKwkgKgorCSAqIFRPRE8gSWYgYW55IG9mIHRoZSBhYm92ZSB0d28gYXNzdW1wdGlvbnMgaXMgdmlvbGF0ZWQsCisJICogdGhlbiB0aGlzIGVudGlyZSBjb2RlIG11c3QgYmUgcmUtdGhvdWdodC4KKwkgKiBJZiB0aGlzIGhhcHBlbnMsIHRoZW4gYSBzaW1wbGUgc29sdXRpb24gaXMgdG8gY2FzZS1mb2xkIGJvdGggc3RyaW5ncyB1cCBmcm9udAorCSAqIGFuZCB0byB0dXJuIG9mZiBVTk9STV9JTlBVVF9JU19GQ0QuCisJICogV2UgYWxyZWFkeSBkbyB0aGlzIHdoZW4gbm90IGJvdGggc3RyaW5ncyBhcmUgaW4gRkNEIGJlY2F1c2UgbWFrZUZDRAorCSAqIHdvdWxkIGJlIGEgcGFydGlhbCBORkQgYmVmb3JlIHRoZSBjYXNlIGZvbGRpbmcsIHdoaWNoIGRvZXMgbm90IHdvcmsuCisJICogTm90ZSB0aGF0IGFsbCBvZiB0aGlzIGlzIG9ubHkgYSBwcm9ibGVtIHdoZW4gY2FzZS1mb2xkaW5nIF9hbmRfCisJICogY2Fub25pY2FsIGVxdWl2YWxlbmNlIGNvbWUgdG9nZXRoZXIuCisgICAgICogCisJICogVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBzb3VyY2UgZmlsZSwgYXQgaW5jcmVhc2VkIGNvc3QKKwkgKiBmb3IgY2FsbGluZyB0aGUgZGVjb21wb3NpdGlvbiBhY2Nlc3MgZnVuY3Rpb24uCisJICovCisJCisJLy8gc3RhY2sgZWxlbWVudCBmb3IgcHJldmlvdXMtbGV2ZWwgc291cmNlL2RlY29tcG9zaXRpb24gcG9pbnRlcnMKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBDbXBFcXVpdkxldmVsIHsKKyAgICAgICAgY2hhcltdIHNvdXJjZTsKKwkgICAgaW50IHN0YXJ0OworICAgICAgICBpbnQgczsKKyAgICAgICAgaW50IGxpbWl0OworCX0KKyAgICAKKwkvKioKKwkgKiBHZXQgdGhlIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIGZvciBvbmUgY29kZSBwb2ludC4KKwkgKiBAcGFyYW0gYyBjb2RlIHBvaW50CisJICogQHBhcmFtIGJ1ZmZlciBvdXQtb25seSBidWZmZXIgZm9yIGFsZ29yaXRobWljIGRlY29tcG9zaXRpb25zIG9mIEhhbmd1bAorCSAqIEBwYXJhbSBsZW5ndGggb3V0LW9ubHksIHRha2VzIHRoZSBsZW5ndGggb2YgdGhlIGRlY29tcG9zaXRpb24sIGlmIGFueQorCSAqIEByZXR1cm4gaW5kZXggaW50byB0aGUgZXh0cmFEYXRhIGFycmF5LCBvciAwIGlmIG5vbmUKKwkgKiBAaW50ZXJuYWwKKwkgKi8KKwkgcHJpdmF0ZSBzdGF0aWMgaW50IGRlY29tcG9zZShpbnQgYywgY2hhcltdIGJ1ZmZlcikgeworCSAgICAKKyAgICAgICAgbG9uZyBub3JtMzI7CisJICAgIGludCBsZW5ndGg9MDsKKwkgICAgbm9ybTMyID0gKGxvbmcpICgoVU5TSUdORURfSU5UX01BU0spICYgbm9ybVRyaWVJbXBsLm5vcm1UcmllLmdldENvZGVQb2ludFZhbHVlKGMpKTsKKwkgICAgaWYoKG5vcm0zMiAmIFFDX05GRCkhPTApIHsKKwkgICAgICAgIGlmKGlzTm9ybTMySGFuZ3VsT3JKYW1vKG5vcm0zMikpIHsKKwkgICAgICAgICAgICAvKiBIYW5ndWwgc3lsbGFibGU6IGRlY29tcG9zZSBhbGdvcml0aG1pY2FsbHkgKi8KKwkgICAgICAgICAgICBjaGFyIGMyOworCQorCSAgICAgICAgICAgIGMtPUhBTkdVTF9CQVNFOworCQorCSAgICAgICAgICAgIGMyPShjaGFyKShjJUpBTU9fVF9DT1VOVCk7CisJICAgICAgICAgICAgYy89SkFNT19UX0NPVU5UOworCSAgICAgICAgICAgIGlmKGMyPjApIHsKKwkgICAgICAgICAgICAgICAgYnVmZmVyWzJdPShjaGFyKShKQU1PX1RfQkFTRStjMik7CisJICAgICAgICAgICAgICAgIGxlbmd0aD0zOworCSAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgIGxlbmd0aD0yOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBidWZmZXJbMV09KGNoYXIpKEpBTU9fVl9CQVNFK2MlSkFNT19WX0NPVU5UKTsKKwkgICAgICAgICAgICBidWZmZXJbMF09KGNoYXIpKEpBTU9fTF9CQVNFK2MvSkFNT19WX0NPVU5UKTsKKwkgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAvKiBub3JtYWwgZGVjb21wb3NpdGlvbiAqLworCSAgICAgICAgICAgIERlY29tcG9zZUFyZ3MgIGFyZ3MgPSBuZXcgRGVjb21wb3NlQXJncygpOworCSAgICAgICAgICAgIGludCBpbmRleCA9IGRlY29tcG9zZShub3JtMzIsIGFyZ3MpOworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZXh0cmFEYXRhLGluZGV4LGJ1ZmZlciwwLGFyZ3MubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggOworCSAgICAgICAgfQorCSAgICB9IGVsc2UgeworCSAgICAgICAgcmV0dXJuIDA7CisJICAgIH0KKwl9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZm9sZENhc2UoaW50IGMsIGNoYXJbXSBkZXN0LCBpbnQgZGVzdFN0YXJ0LCBpbnQgZGVzdExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZGVmYXVsdE1hcHBpbmcpeworICAgICAgICBTdHJpbmcgc3JjID0gVVRGMTYudmFsdWVPZihjKTsKKyAgICAgICAgU3RyaW5nIGZvbGRlZFN0ciA9IFVDaGFyYWN0ZXIuZm9sZENhc2Uoc3JjLGRlZmF1bHRNYXBwaW5nKTsKKyAgICAgICAgY2hhcltdIGZvbGRlZEMgPSBmb2xkZWRTdHIudG9DaGFyQXJyYXkoKTsKKyAgICAgICAgZm9yKGludCBpPTA7aTxmb2xkZWRDLmxlbmd0aDtpKyspeworICAgICAgICAgICAgaWYoZGVzdFN0YXJ0PGRlc3RMaW1pdCl7CisgICAgICAgICAgICAgICAgZGVzdFtkZXN0U3RhcnRdPWZvbGRlZENbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBhbHdheXMgaW5jcmVtZW50IGRlc3RTdGFydCBzbyB0aGF0IHdlIGNhbiByZXR1cm4gCisgICAgICAgICAgICAvLyB0aGUgcmVxdWlyZWQgbGVuZ3RoCisgICAgICAgICAgICBkZXN0U3RhcnQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGM9PVVURjE2LmNoYXJBdChmb2xkZWRTdHIsMCkpID8gLWRlc3RTdGFydCA6IGRlc3RTdGFydDsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGZvbGRDYXNlKGNoYXJbXSBzcmMsaW50IHNyY1N0YXJ0LGludCBzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGRlc3QsIGludCBkZXN0U3RhcnQsIGludCBkZXN0TGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZGVmYXVsdE1hcHBpbmcpeworICAgICAgICBTdHJpbmcgc291cmNlID1uZXcgU3RyaW5nKHNyYyxzcmNTdGFydCwoc3JjTGltaXQtc3JjU3RhcnQpKTsKKyAgICAgICAgU3RyaW5nIGZvbGRlZFN0ciA9IFVDaGFyYWN0ZXIuZm9sZENhc2Uoc291cmNlLGRlZmF1bHRNYXBwaW5nKTsKKyAgICAgICAgY2hhcltdIGZvbGRlZEMgPSBmb2xkZWRTdHIudG9DaGFyQXJyYXkoKTsKKyAgICAgICAgZm9yKGludCBpPTA7aTxmb2xkZWRDLmxlbmd0aDtpKyspeworICAgICAgICAgICAgaWYoZGVzdFN0YXJ0PGRlc3RMaW1pdCl7CisgICAgICAgICAgICAgICAgZGVzdFtkZXN0U3RhcnRdPWZvbGRlZENbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBhbHdheXMgaW5jcmVtZW50IGRlc3RTdGFydCBzbyB0aGF0IHdlIGNhbiByZXR1cm4gCisgICAgICAgICAgICAvLyB0aGUgcmVxdWlyZWQgbGVuZ3RoCisgICAgICAgICAgICBkZXN0U3RhcnQrKzsKKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIHJldHVybiBkZXN0U3RhcnQ7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgaW50IGNtcEVxdWl2Rm9sZChTdHJpbmcgczEsIFN0cmluZyBzMixpbnQgb3B0aW9ucyl7CisgICAgICAgIHJldHVybiBjbXBFcXVpdkZvbGQoczEudG9DaGFyQXJyYXkoKSwwLHMxLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMyLnRvQ2hhckFycmF5KCksMCxzMi5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKTsKKyAgICB9CisgICAgCisgICAgCisJLy8gaW50ZXJuYWwgZnVuY3Rpb24KKyAgICBwdWJsaWMgc3RhdGljIGludCBjbXBFcXVpdkZvbGQoY2hhcltdIHMxLCBpbnQgczFTdGFydCxpbnQgczFMaW1pdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIHMyLCBpbnQgczJTdGFydCxpbnQgczJMaW1pdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMpIHsKKwkgICAgLy8gY3VycmVudC1sZXZlbCBzdGFydC9saW1pdCAtIHMxL3MyIGFzIGN1cnJlbnQKKwkgICAgaW50IHN0YXJ0MSwgc3RhcnQyLCBsaW1pdDEsIGxpbWl0MjsKKwkgICAgY2hhcltdIGNTb3VyY2UxLCBjU291cmNlMjsKKyAgICAgICAgCisgICAgICAgIGNTb3VyY2UxID0gczE7CisgICAgICAgIGNTb3VyY2UyID0gczI7CisJICAgIC8vIGRlY29tcG9zaXRpb24gdmFyaWFibGVzCisJICAgIGludCBsZW5ndGg7CisJCisJICAgIC8vIHN0YWNrcyBvZiBwcmV2aW91cy1sZXZlbCBzdGFydC9jdXJyZW50L2xpbWl0CisJICAgIENtcEVxdWl2TGV2ZWxbXSBzdGFjazEgPSBuZXcgQ21wRXF1aXZMZXZlbFtdeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ21wRXF1aXZMZXZlbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDbXBFcXVpdkxldmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgQ21wRXF1aXZMZXZlbFtdIHN0YWNrMiA9IG5ldyBDbXBFcXVpdkxldmVsW117IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDbXBFcXVpdkxldmVsKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENtcEVxdWl2TGV2ZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQorCSAgICAvLyBkZWNvbXBvc2l0aW9uIGJ1ZmZlcnMgZm9yIEhhbmd1bAorCSAgICBjaGFyW10gZGVjb21wMSA9IG5ldyBjaGFyWzhdOworICAgICAgICBjaGFyW10gZGVjb21wMiA9IG5ldyBjaGFyWzhdOworCQorCSAgICAvLyBjYXNlIGZvbGRpbmcgYnVmZmVycywgb25seSB1c2UgY3VycmVudC1sZXZlbCBzdGFydC9saW1pdAorCSAgICBjaGFyW10gZm9sZDEgPSBuZXcgY2hhclszMl07CisgICAgICAgIGNoYXJbXSBmb2xkMiA9IG5ldyBjaGFyWzMyXTsKKwkKKwkgICAgLy8gdHJhY2sgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbGV2ZWwgcGVyIHN0cmluZworCSAgICBpbnQgbGV2ZWwxLCBsZXZlbDI7CisJCisJICAgIC8vIGN1cnJlbnQgY29kZSB1bml0cywgYW5kIGNvZGUgcG9pbnRzIGZvciBsb29rdXBzCisJICAgIGludCBjMSwgYzI7CisgICAgICAgIGludCBjcDEsIGNwMjsKKwkKKwkgICAgLy8gbm8gYXJndW1lbnQgZXJyb3IgY2hlY2tpbmcgYmVjYXVzZSB0aGlzIGl0c2VsZiBpcyBub3QgYW4gQVBJCisJCisJICAgIC8vIGFzc3VtZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgb3B0aW9ucyBDT01QQVJFX0VRVUlWIGFuZCAKKyAgICAgICAgLy8gQ09NUEFSRV9JR05PUkVfQ0FTRSBpcyBzZXQKKwkgICAgLy8gb3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gbXVzdCBiZWhhdmUgZXhhY3RseSBhcyB1cHJ2X3N0ckNvbXBhcmUoKQorCSAgICAvLyBub3QgY2hlY2tpbmcgZm9yIHRoYXQgaGVyZSBtYWtlcyB0ZXN0aW5nIHRoaXMgZnVuY3Rpb24gZWFzaWVyCisKKwkKKwkgICAgLy8gaW5pdGlhbGl6ZQorCSAgICBzdGFydDE9czFTdGFydDsKKwkgICAgbGltaXQxPXMxTGltaXQ7CisJICAgIAorCSAgICBzdGFydDI9czJTdGFydDsKKwkgICAgbGltaXQyPXMyTGltaXQ7CisJICAgIAorCSAgICBsZXZlbDE9bGV2ZWwyPTA7CisJICAgIGMxPWMyPS0xOworCSAgICBjcDE9Y3AyPS0xOworCSAgICAvLyBjb21wYXJpc29uIGxvb3AKKwkgICAgZm9yKDs7KSB7CisJICAgICAgICAvLyBoZXJlIGEgY29kZSB1bml0IHZhbHVlIG9mIC0xIG1lYW5zICJnZXQgYW5vdGhlciBjb2RlIHVuaXQiCisJICAgICAgICAvLyBiZWxvdyBpdCB3aWxsIG1lYW4gInRoaXMgc291cmNlIGlzIGZpbmlzaGVkIgorCQorCSAgICAgICAgaWYoYzE8MCkgeworCSAgICAgICAgICAgIC8vIGdldCBuZXh0IGNvZGUgdW5pdCBmcm9tIHN0cmluZyAxLCBwb3N0LWluY3JlbWVudAorCSAgICAgICAgICAgIGZvcig7OykgeworCSAgICAgICAgICAgICAgICBpZihzMVN0YXJ0Pj1saW1pdDEpIHsKKwkgICAgICAgICAgICAgICAgICAgIGlmKGxldmVsMT09MCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGMxPS0xOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYzE9Y1NvdXJjZTFbczFTdGFydF07CisJICAgICAgICAgICAgICAgICAgICArK3MxU3RhcnQ7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCQorCSAgICAgICAgICAgICAgICAvLyByZWFjaGVkIGVuZCBvZiBsZXZlbCBidWZmZXIsIHBvcCBvbmUgbGV2ZWwKKwkgICAgICAgICAgICAgICAgZG8geworCSAgICAgICAgICAgICAgICAgICAgLS1sZXZlbDE7CisJICAgICAgICAgICAgICAgICAgICBzdGFydDE9c3RhY2sxW2xldmVsMV0uc3RhcnQ7CisJICAgICAgICAgICAgICAgIH0gd2hpbGUoc3RhcnQxPT0tMSk7IC8vIyMjIyMjIGNoZWNrIHRoaXMKKwkgICAgICAgICAgICAgICAgczFTdGFydD1zdGFjazFbbGV2ZWwxXS5zOworCSAgICAgICAgICAgICAgICBsaW1pdDE9c3RhY2sxW2xldmVsMV0ubGltaXQ7CisgICAgICAgICAgICAgICAgICAgIGNTb3VyY2UxPXN0YWNrMVtsZXZlbDFdLnNvdXJjZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJCisJICAgICAgICBpZihjMjwwKSB7CisJICAgICAgICAgICAgLy8gZ2V0IG5leHQgY29kZSB1bml0IGZyb20gc3RyaW5nIDIsIHBvc3QtaW5jcmVtZW50CisJICAgICAgICAgICAgZm9yKDs7KSB7ICAgICAgICAgICAgICAgICAgICAKKwkgICAgICAgICAgICAgICAgaWYoczJTdGFydD49bGltaXQyKSB7CisJICAgICAgICAgICAgICAgICAgICBpZihsZXZlbDI9PTApIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjMj0tMTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyPWNTb3VyY2UyW3MyU3RhcnRdOworCSAgICAgICAgICAgICAgICAgICAgKytzMlN0YXJ0OworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0KKwkKKwkgICAgICAgICAgICAgICAgLy8gcmVhY2hlZCBlbmQgb2YgbGV2ZWwgYnVmZmVyLCBwb3Agb25lIGxldmVsCisJICAgICAgICAgICAgICAgIGRvIHsKKwkgICAgICAgICAgICAgICAgICAgIC0tbGV2ZWwyOworCSAgICAgICAgICAgICAgICAgICAgc3RhcnQyPXN0YWNrMltsZXZlbDJdLnN0YXJ0OworCSAgICAgICAgICAgICAgICB9IHdoaWxlKHN0YXJ0Mj09LTEpOworCSAgICAgICAgICAgICAgICBzMlN0YXJ0PXN0YWNrMltsZXZlbDJdLnM7CisJICAgICAgICAgICAgICAgIGxpbWl0Mj1zdGFjazJbbGV2ZWwyXS5saW1pdDsKKyAgICAgICAgICAgICAgICAgICAgY1NvdXJjZTI9c3RhY2syW2xldmVsMl0uc291cmNlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkKKwkgICAgICAgIC8vIGNvbXBhcmUgYzEgYW5kIGMyCisJICAgICAgICAvLyBlaXRoZXIgdmFyaWFibGUgYzEsIGMyIGlzIC0xIG9ubHkgaWYgdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nIAorICAgICAgICAgICAgLy8gaXMgZmluaXNoZWQKKwkgICAgICAgIGlmKGMxPT1jMikgeworCSAgICAgICAgICAgIGlmKGMxPDApIHsKKwkgICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgLy8gYzE9PWMyPT0tMSBpbmRpY2F0aW5nIGVuZCBvZiBzdHJpbmdzCisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGMxPWMyPS0xOyAgICAgICAvLyBtYWtlIHVzIGZldGNoIG5ldyBjb2RlIHVuaXRzCisJICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICB9IGVsc2UgaWYoYzE8MCkgeworCSAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAvLyBzdHJpbmcgMSBlbmRzIGJlZm9yZSBzdHJpbmcgMgorCSAgICAgICAgfSBlbHNlIGlmKGMyPDApIHsKKwkgICAgICAgICAgICByZXR1cm4gMTsgICAgICAgLy8gc3RyaW5nIDIgZW5kcyBiZWZvcmUgc3RyaW5nIDEKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIGMxIT1jMiAmJiBjMT49MCAmJiBjMj49MAorCQorCSAgICAgICAgLy8gZ2V0IGNvbXBsZXRlIGNvZGUgcG9pbnRzIGZvciBjMSwgYzIgZm9yIGxvb2t1cHMgaWYgZWl0aGVyIGlzIGEgCisgICAgICAgICAgICAvLyBzdXJyb2dhdGUKKyAgICAgICAgICAgIGNwMT1jMTsKKwkgICAgICAgIGlmKFVURjE2LmlzU3Vycm9nYXRlKChjaGFyKWMxKSkgeyAKKwkgICAgICAgICAgICBjaGFyIGM7CisJCisJICAgICAgICAgICAgaWYoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKChjaGFyKWMxKSkgeworCSAgICAgICAgICAgICAgICBpZiggICAgczFTdGFydCE9bGltaXQxICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjPWNTb3VyY2UxW3MxU3RhcnRdKQorICAgICAgICAgICAgICAgICAgICAgICkgeworCSAgICAgICAgICAgICAgICAgICAgLy8gYWR2YW5jZSArK3MxOyBvbmx5IGJlbG93IGlmIGNwMSBkZWNvbXBvc2VzL2Nhc2UtZm9sZHMKKwkgICAgICAgICAgICAgICAgICAgIGNwMT1VQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeSgoY2hhciljMSwgYyk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9IGVsc2UgLyogaXNUcmFpbChjMSkgKi8geworCSAgICAgICAgICAgICAgICBpZiggICAgc3RhcnQxPD0oczFTdGFydC0yKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5pc0xlYWRTdXJyb2dhdGUoYz1jU291cmNlMVsoczFTdGFydC0yKV0pCisgICAgICAgICAgICAgICAgICAgICAgKSB7CisJICAgICAgICAgICAgICAgICAgICBjcDE9VUNoYXJhY3RlclByb3BlcnR5LmdldFJhd1N1cHBsZW1lbnRhcnkoYywgKGNoYXIpYzEpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgY3AyPWMyOworCSAgICAgICAgaWYoVVRGMTYuaXNTdXJyb2dhdGUoKGNoYXIpYzIpKSB7CisJICAgICAgICAgICAgY2hhciBjOworCQorCSAgICAgICAgICAgIGlmKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZSgoY2hhciljMikpIHsKKwkgICAgICAgICAgICAgICAgaWYoICAgIHMyU3RhcnQhPWxpbWl0MiAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoYz1jU291cmNlMltzMlN0YXJ0XSkKKyAgICAgICAgICAgICAgICAgICAgICApIHsKKwkgICAgICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgKytzMjsgb25seSBiZWxvdyBpZiBjcDIgZGVjb21wb3Nlcy9jYXNlLWZvbGRzCisJICAgICAgICAgICAgICAgICAgICBjcDI9VUNoYXJhY3RlclByb3BlcnR5LmdldFJhd1N1cHBsZW1lbnRhcnkoKGNoYXIpYzIsIGMpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfSBlbHNlIC8qIGlzVHJhaWwoYzIpICovIHsKKwkgICAgICAgICAgICAgICAgaWYoICAgIHN0YXJ0Mjw9KHMyU3RhcnQtMikgJiYgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGM9Y1NvdXJjZTJbczJTdGFydC0yXSkKKyAgICAgICAgICAgICAgICAgICAgICApIHsKKwkgICAgICAgICAgICAgICAgICAgIGNwMj1VQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeShjLCAoY2hhciljMik7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJCisJICAgICAgICAvLyBnbyBkb3duIG9uZSBsZXZlbCBmb3IgZWFjaCBzdHJpbmcKKwkgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG1haW4gbG9vcCBhcyBzb29uIGFzIHRoZXJlIGlzIGEgcmVhbCBjaGFuZ2UKKwkgICAgICAgIGlmKCBsZXZlbDE8MiAmJiAoKG9wdGlvbnMgJiBOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UpIT0wKSYmCisgICAgICAgICAgICAgICAgKGxlbmd0aD1mb2xkQ2FzZShjcDEsIGZvbGQxLCAwLDMyLCAoKG9wdGlvbnMmTm9ybWFsaXplci5GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kpPT0wKSkpPj0wCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAvLyBjcDEgY2FzZS1mb2xkcyB0byBmb2xkMVtsZW5ndGhdCisgICAgICAgICAgICAgICAgaWYoVVRGMTYuaXNTdXJyb2dhdGUoKGNoYXIpYzEpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZSgoY2hhciljMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgYmV5b25kIHNvdXJjZSBzdXJyb2dhdGUgcGFpciBpZiBpdCAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UtZm9sZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICsrczFTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlzVHJhaWwoYzEpICovIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGdvdCBhIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludCB3aGVuIGhpdHRpbmcgaXRzIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhaWwgc3Vycm9nYXRlLCB0aGVyZWZvcmUgdGhlIGxlYWQgc3Vycm9nYXRlIG11c3QgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gdGhlIHNhbWUgYXMgaW4gdGhlIG90aGVyIHN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBhcmUgdGhpcyBkZWNvbXBvc2l0aW9uIHdpdGggdGhlIGxlYWQgc3Vycm9nYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgb3RoZXIgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAtLXMyU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjMj1jU291cmNlMlsoczJTdGFydC0xKV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgICAgLy8gcHVzaCBjdXJyZW50IGxldmVsIHBvaW50ZXJzCisgICAgICAgICAgICAgICAgc3RhY2sxWzBdLnN0YXJ0PXN0YXJ0MTsKKyAgICAgICAgICAgICAgICBzdGFjazFbMF0ucz1zMVN0YXJ0OworICAgICAgICAgICAgICAgIHN0YWNrMVswXS5saW1pdD1saW1pdDE7CisgICAgICAgICAgICAgICAgc3RhY2sxWzBdLnNvdXJjZT1jU291cmNlMTsKKyAgICAgICAgICAgICAgICArK2xldmVsMTsKKyAgICAKKyAgICAgICAgICAgICAgICBjU291cmNlMSA9IGZvbGQxOworICAgICAgICAgICAgICAgIHN0YXJ0MT1zMVN0YXJ0PTA7CisgICAgICAgICAgICAgICAgbGltaXQxPWxlbmd0aDsKKyAgICAKKyAgICAgICAgICAgICAgICAvLyBnZXQgcmVhZHkgdG8gcmVhZCBmcm9tIGRlY29tcG9zaXRpb24sIGNvbnRpbnVlIHdpdGggbG9vcAorICAgICAgICAgICAgICAgIGMxPS0xOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgaWYoIGxldmVsMjwyICYmICgob3B0aW9ucyYgTm9ybWFsaXplci5DT01QQVJFX0lHTk9SRV9DQVNFKSE9MCkgJiYKKyAgICAgICAgICAgICAgICAobGVuZ3RoPWZvbGRDYXNlKGNwMiwgZm9sZDIsMCwzMiwgKChvcHRpb25zJk5vcm1hbGl6ZXIuRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JKT09MCkpKT49MAorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgLy8gY3AyIGNhc2UtZm9sZHMgdG8gZm9sZDJbbGVuZ3RoXQorICAgICAgICAgICAgICAgIGlmKFVURjE2LmlzU3Vycm9nYXRlKChjaGFyKWMyKSkgeworICAgICAgICAgICAgICAgICAgICBpZihVVEYxNi5pc0xlYWRTdXJyb2dhdGUoKGNoYXIpYzIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZHZhbmNlIGJleW9uZCBzb3VyY2Ugc3Vycm9nYXRlIHBhaXIgaWYgaXQgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlLWZvbGRzCisgICAgICAgICAgICAgICAgICAgICAgICArK3MyU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpc1RyYWlsKGMyKSAqLyB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBnb3QgYSBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnQgd2hlbiBoaXR0aW5nIGl0cyAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYWlsIHN1cnJvZ2F0ZSwgdGhlcmVmb3JlIHRoZSBsZWFkIHN1cnJvZ2F0ZSBtdXN0IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIHRoZSBzYW1lIGFzIGluIHRoZSBvdGhlciBzdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wYXJlIHRoaXMgZGVjb21wb3NpdGlvbiB3aXRoIHRoZSBsZWFkIHN1cnJvZ2F0ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBvdGhlciBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tczFTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMxPWNTb3VyY2UxWyhzMVN0YXJ0LTEpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAvLyBwdXNoIGN1cnJlbnQgbGV2ZWwgcG9pbnRlcnMKKyAgICAgICAgICAgICAgICBzdGFjazJbMF0uc3RhcnQ9c3RhcnQyOworICAgICAgICAgICAgICAgIHN0YWNrMlswXS5zPXMyU3RhcnQ7CisgICAgICAgICAgICAgICAgc3RhY2syWzBdLmxpbWl0PWxpbWl0MjsKKyAgICAgICAgICAgICAgICBzdGFjazJbMF0uc291cmNlPWNTb3VyY2UyOworICAgICAgICAgICAgICAgICsrbGV2ZWwyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNTb3VyY2UyID0gZm9sZDI7CisgICAgICAgICAgICAgICAgc3RhcnQyPXMyU3RhcnQ9MDsKKyAgICAgICAgICAgICAgICBsaW1pdDI9bGVuZ3RoOworICAgIAorICAgICAgICAgICAgICAgIC8vIGdldCByZWFkeSB0byByZWFkIGZyb20gZGVjb21wb3NpdGlvbiwgY29udGludWUgd2l0aCBsb29wCisgICAgICAgICAgICAgICAgYzI9LTE7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKwkgICAgICAgIGlmKCBsZXZlbDE8MiAmJiAoKG9wdGlvbnMmQ09NUEFSRV9FUVVJVikhPTApICYmCisJICAgICAgICAgICAgMCE9KGxlbmd0aD1kZWNvbXBvc2UoY3AxLGRlY29tcDEpKQorCSAgICAgICAgKSB7CisJICAgICAgICAgICAgLy8gY3AxIGRlY29tcG9zZXMgaW50byBwW2xlbmd0aF0KKwkgICAgICAgICAgICBpZihVVEYxNi5pc1N1cnJvZ2F0ZSgoY2hhciljMSkpIHsKKwkgICAgICAgICAgICAgICAgaWYoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKChjaGFyKWMxKSkgeworCSAgICAgICAgICAgICAgICAgICAgLy8gYWR2YW5jZSBiZXlvbmQgc291cmNlIHN1cnJvZ2F0ZSBwYWlyIGlmIGl0IAorICAgICAgICAgICAgICAgICAgICAgICAgLy9kZWNvbXBvc2VzCisJICAgICAgICAgICAgICAgICAgICArK3MxU3RhcnQ7CisJICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpc1RyYWlsKGMxKSAqLyB7CisJICAgICAgICAgICAgICAgICAgICAvLyB3ZSBnb3QgYSBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnQgd2hlbiBoaXR0aW5nIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRzIHRyYWlsIHN1cnJvZ2F0ZSwgdGhlcmVmb3JlIHRoZSBsZWFkIHN1cnJvZ2F0ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSBiZWVuIHRoZSBzYW1lIGFzIGluIHRoZSBvdGhlciBzdHJpbmc7CisJICAgICAgICAgICAgICAgICAgICAvLyBjb21wYXJlIHRoaXMgZGVjb21wb3NpdGlvbiB3aXRoIHRoZSBsZWFkIHN1cnJvZ2F0ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBvdGhlciBzdHJpbmcKKwkgICAgICAgICAgICAgICAgICAgIC0tczJTdGFydDsKKwkgICAgICAgICAgICAgICAgICAgIGMyPWNTb3VyY2UyWyhzMlN0YXJ0LTEpXTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkKKwkgICAgICAgICAgICAvLyBwdXNoIGN1cnJlbnQgbGV2ZWwgcG9pbnRlcnMKKyAgICAgICAgICAgICAgICBzdGFjazFbbGV2ZWwxXS5zdGFydD1zdGFydDE7CisJICAgICAgICAgICAgc3RhY2sxW2xldmVsMV0ucz1zMVN0YXJ0OworCSAgICAgICAgICAgIHN0YWNrMVtsZXZlbDFdLmxpbWl0PWxpbWl0MTsKKyAgICAgICAgICAgICAgICBzdGFjazFbbGV2ZWwxXS5zb3VyY2U9Y1NvdXJjZTE7CisJICAgICAgICAgICAgKytsZXZlbDE7CisJCisJICAgICAgICAgICAgLy8gc2V0IG5leHQgbGV2ZWwgcG9pbnRlcnMgdG8gZGVjb21wb3NpdGlvbgorCSAgICAgICAgICAgIGNTb3VyY2UxID0gZGVjb21wMTsKKyAgICAgICAgICAgICAgICBzdGFydDE9czFTdGFydD0wOworCSAgICAgICAgICAgIGxpbWl0MT1sZW5ndGg7CisJICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gc2V0IGVtcHR5IGludGVybWVkaWF0ZSBsZXZlbCBpZiBza2lwcGVkCisgICAgICAgICAgICAgICAgaWYobGV2ZWwxPDIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sxW2xldmVsMSsrXS5zdGFydD0tMTsKKyAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgLy8gZ2V0IHJlYWR5IHRvIHJlYWQgZnJvbSBkZWNvbXBvc2l0aW9uLCBjb250aW51ZSB3aXRoIGxvb3AKKwkgICAgICAgICAgICBjMT0tMTsKKwkgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgIH0KKwkKKwkgICAgICAgIGlmKCBsZXZlbDI8MiAmJiAoKG9wdGlvbnMmQ09NUEFSRV9FUVVJVikhPTApICYmCisJICAgICAgICAgICAgMCE9KGxlbmd0aD1kZWNvbXBvc2UoY3AyLCBkZWNvbXAyKSkKKwkgICAgICAgICkgeworCSAgICAgICAgICAgIC8vIGNwMiBkZWNvbXBvc2VzIGludG8gcFtsZW5ndGhdCisJICAgICAgICAgICAgaWYoVVRGMTYuaXNTdXJyb2dhdGUoKGNoYXIpYzIpKSB7CisJICAgICAgICAgICAgICAgIGlmKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZSgoY2hhciljMikpIHsKKwkgICAgICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgYmV5b25kIHNvdXJjZSBzdXJyb2dhdGUgcGFpciBpZiBpdCAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY29tcG9zZXMKKwkgICAgICAgICAgICAgICAgICAgICsrczJTdGFydDsKKwkgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlzVHJhaWwoYzIpICovIHsKKwkgICAgICAgICAgICAgICAgICAgIC8vIHdlIGdvdCBhIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludCB3aGVuIGhpdHRpbmcgaXRzIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhaWwgc3Vycm9nYXRlLCB0aGVyZWZvcmUgdGhlIGxlYWQgc3Vycm9nYXRlIG11c3QgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gdGhlIHNhbWUgYXMgaW4gdGhlIG90aGVyIHN0cmluZzsKKwkgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBhcmUgdGhpcyBkZWNvbXBvc2l0aW9uIHdpdGggdGhlIGxlYWQgc3Vycm9nYXRlIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG90aGVyIHN0cmluZworCSAgICAgICAgICAgICAgICAgICAgLS1zMVN0YXJ0OworCSAgICAgICAgICAgICAgICAgICAgYzE9Y1NvdXJjZTFbKHMxU3RhcnQtMSldOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCQorCSAgICAgICAgICAgIC8vIHB1c2ggY3VycmVudCBsZXZlbCBwb2ludGVycworCSAgICAgICAgICAgIHN0YWNrMltsZXZlbDJdLnN0YXJ0PXN0YXJ0MjsKKwkgICAgICAgICAgICBzdGFjazJbbGV2ZWwyXS5zPXMyU3RhcnQ7CisJICAgICAgICAgICAgc3RhY2syW2xldmVsMl0ubGltaXQ9bGltaXQyOworICAgICAgICAgICAgICAgIHN0YWNrMltsZXZlbDJdLnNvdXJjZT1jU291cmNlMjsKKwkgICAgICAgICAgICArK2xldmVsMjsKKwkKKwkgICAgICAgICAgICAvLyBzZXQgbmV4dCBsZXZlbCBwb2ludGVycyB0byBkZWNvbXBvc2l0aW9uCisJICAgICAgICAgICAgY1NvdXJjZTI9ZGVjb21wMjsKKyAgICAgICAgICAgICAgICBzdGFydDI9czJTdGFydD0wOworCSAgICAgICAgICAgIGxpbWl0Mj1sZW5ndGg7CisJICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gc2V0IGVtcHR5IGludGVybWVkaWF0ZSBsZXZlbCBpZiBza2lwcGVkCisgICAgICAgICAgICAgICAgaWYobGV2ZWwyPDIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2syW2xldmVsMisrXS5zdGFydD0tMTsKKyAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gZ2V0IHJlYWR5IHRvIHJlYWQgZnJvbSBkZWNvbXBvc2l0aW9uLCBjb250aW51ZSB3aXRoIGxvb3AKKwkgICAgICAgICAgICBjMj0tMTsKKwkgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgIH0KKwkKKwkKKwkgICAgICAgIC8vIG5vIGRlY29tcG9zaXRpb24vY2FzZSBmb2xkaW5nLCBtYXggbGV2ZWwgZm9yIGJvdGggc2lkZXM6CisJICAgICAgICAvLyByZXR1cm4gZGlmZmVyZW5jZSByZXN1bHQKKwkKKwkgICAgICAgIC8vIGNvZGUgcG9pbnQgb3JkZXIgY29tcGFyaXNvbiBtdXN0IG5vdCBqdXN0IHJldHVybiBjcDEtY3AyCisJICAgICAgICAvLyBiZWNhdXNlIHdoZW4gc2luZ2xlIHN1cnJvZ2F0ZXMgYXJlIHByZXNlbnQgdGhlbiB0aGUgc3Vycm9nYXRlIAorCSAgICAgICAgLy8gcGFpcnMgdGhhdCBmb3JtZWQgY3AxIGFuZCBjcDIgbWF5IGJlIGZyb20gZGlmZmVyZW50IHN0cmluZyAKKyAgICAgICAgICAgIC8vIGluZGV4ZXMKKwkKKwkgICAgICAgIC8vIGV4YW1wbGU6IHsgZDgwMCBkODAwIGRjMDEgfSB2cy4geyBkODAwIGRjMDAgfSwgY29tcGFyZSBhdCAKKyAgICAgICAgICAgIC8vIHNlY29uZCBjb2RlIHVuaXRzCisJICAgICAgICAvLyBjMT1kODAwIGNwMT0xMDAwMSBjMj1kYzAwIGNwMj0xMDAwMAorCSAgICAgICAgLy8gY3AxLWNwMj4wIGJ1dCBjMS1jMjwwIGFuZCBpbiBmYWN0IGluIFVURi0zMiAKKyAgICAgICAgICAgIC8vIGl0IGlzIHsgZDgwMCAxMDAwMSB9IDwgeyAxMDAwMCB9CisJICAgICAgICAvLyB0aGVyZWZvcmUgZml4LXVwIAorCQorCSAgICAgICAgaWYoICAgICBjMT49MHhkODAwICYmIGMyPj0weGQ4MDAgJiYgCisgICAgICAgICAgICAgICAgICAgICgob3B0aW9ucyZOb3JtYWxpemVyLkNPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUikhPTApCisgICAgICAgICAgICAgICkgeworCSAgICAgICAgICAgIC8qIHN1YnRyYWN0IDB4MjgwMCBmcm9tIEJNUCBjb2RlIHBvaW50cyB0byBtYWtlIHRoZW0gc21hbGxlciAKKyAgICAgICAgICAgICAgICAgKiB0aGFuIHN1cHBsZW1lbnRhcnkgb25lcyAqLworCSAgICAgICAgICAgIGlmKAorCSAgICAgICAgICAgICAgICAoICAgIGMxPD0weGRiZmYgJiYgczFTdGFydCE9bGltaXQxIAorICAgICAgICAgICAgICAgICAgICAgICAgICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoY1NvdXJjZTFbczFTdGFydF0pCisgICAgICAgICAgICAgICAgICAgICkgCisgICAgICAgICAgICAgICAgICAgICB8fAorCSAgICAgICAgICAgICAgICAoICAgIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoKGNoYXIpYzEpICYmIHN0YXJ0MSE9KHMxU3RhcnQtMSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGNTb3VyY2UxWyhzMVN0YXJ0LTIpXSkKKyAgICAgICAgICAgICAgICAgICAgKQorCSAgICAgICAgICAgICkgeworCSAgICAgICAgICAgICAgICAvKiBwYXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIsIGxlYXZlID49ZDgwMCAqLworCSAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgIC8qIEJNUCBjb2RlIHBvaW50IC0gbWF5IGJlIHN1cnJvZ2F0ZSBjb2RlIHBvaW50IC0gCisgICAgICAgICAgICAgICAgICAgICAqIG1ha2UgPGQ4MDAgKi8KKwkgICAgICAgICAgICAgICAgYzEtPTB4MjgwMDsKKwkgICAgICAgICAgICB9CisJCisJICAgICAgICAgICAgaWYoCisJICAgICAgICAgICAgICAgICggICAgYzI8PTB4ZGJmZiAmJiBzMlN0YXJ0IT1saW1pdDIgCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjU291cmNlMltzMlN0YXJ0XSkKKyAgICAgICAgICAgICAgICAgICAgKSAKKyAgICAgICAgICAgICAgICAgICAgIHx8CisJICAgICAgICAgICAgICAgICggICAgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZSgoY2hhciljMikgJiYgc3RhcnQyIT0oczJTdGFydC0xKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5pc0xlYWRTdXJyb2dhdGUoY1NvdXJjZTJbKHMyU3RhcnQtMildKQorICAgICAgICAgICAgICAgICAgICApCisJICAgICAgICAgICAgKSB7CisJICAgICAgICAgICAgICAgIC8qIHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciwgbGVhdmUgPj1kODAwICovCisJICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgLyogQk1QIGNvZGUgcG9pbnQgLSBtYXkgYmUgc3Vycm9nYXRlIGNvZGUgcG9pbnQgLSAKKyAgICAgICAgICAgICAgICAgICAgICogbWFrZSA8ZDgwMCAqLworCSAgICAgICAgICAgICAgICBjMi09MHgyODAwOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkKKwkgICAgICAgIHJldHVybiBjMS1jMjsKKwkgICAgfQorCX0KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgc3RyQ29tcGFyZShjaGFyW10gczEsIGludCBzMVN0YXJ0LCBpbnQgczFMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gczIsIGludCBzMlN0YXJ0LCBpbnQgczJMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvZGVQb2ludE9yZGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgaW50IHN0YXJ0MSwgc3RhcnQyLCBsaW1pdDEsIGxpbWl0MjsKKyAKKyAgICAgICAgY2hhciBjMSwgYzI7CisgICAgCisgICAgICAgIC8qIHNldHVwIGZvciBmaXgtdXAgKi8KKyAgICAgICAgc3RhcnQxPXMxU3RhcnQ7CisgICAgICAgIHN0YXJ0Mj1zMlN0YXJ0OworICAgICAgICAKKyAgICAgICAgaW50IGxlbmd0aDEsIGxlbmd0aDI7CisgICAgICAgIAorICAgICAgICBsZW5ndGgxID0gczFMaW1pdCAtIHMxU3RhcnQ7CisgICAgICAgIGxlbmd0aDIgPSBzMkxpbWl0IC0gczJTdGFydDsKKyAgICAgICAgICAgIAorICAgICAgICBpbnQgbGVuZ3RoUmVzdWx0OworCisgICAgICAgIGlmKGxlbmd0aDE8bGVuZ3RoMikgeworICAgICAgICAgICAgbGVuZ3RoUmVzdWx0PS0xOworICAgICAgICAgICAgbGltaXQxPXN0YXJ0MStsZW5ndGgxOworICAgICAgICB9IGVsc2UgaWYobGVuZ3RoMT09bGVuZ3RoMikgeworICAgICAgICAgICAgbGVuZ3RoUmVzdWx0PTA7CisgICAgICAgICAgICBsaW1pdDE9c3RhcnQxK2xlbmd0aDE7CisgICAgICAgIH0gZWxzZSAvKiBsZW5ndGgxPmxlbmd0aDIgKi8geworICAgICAgICAgICAgbGVuZ3RoUmVzdWx0PTE7CisgICAgICAgICAgICBsaW1pdDE9c3RhcnQxK2xlbmd0aDI7CisgICAgICAgIH0KKworICAgICAgICBpZihzMT09czIpIHsKKyAgICAgICAgICAgIHJldHVybiBsZW5ndGhSZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgIC8qIGNoZWNrIHBzZXVkby1saW1pdCAqLworICAgICAgICAgICAgaWYoczFTdGFydD09bGltaXQxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aFJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYzE9czFbczFTdGFydF07CisgICAgICAgICAgICBjMj1zMltzMlN0YXJ0XTsKKyAgICAgICAgICAgIGlmKGMxIT1jMikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytzMVN0YXJ0OworICAgICAgICAgICAgKytzMlN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgLyogc2V0dXAgZm9yIGZpeC11cCAqLworICAgICAgICBsaW1pdDE9c3RhcnQxK2xlbmd0aDE7CisgICAgICAgIGxpbWl0Mj1zdGFydDIrbGVuZ3RoMjsKKworICAgIAorICAgICAgICAvKiBpZiBib3RoIHZhbHVlcyBhcmUgaW4gb3IgYWJvdmUgdGhlIHN1cnJvZ2F0ZSByYW5nZSwgZml4IHRoZW0gdXAgKi8KKyAgICAgICAgaWYoYzE+PTB4ZDgwMCAmJiBjMj49MHhkODAwICYmIGNvZGVQb2ludE9yZGVyKSB7CisgICAgICAgICAgICAvKiBzdWJ0cmFjdCAweDI4MDAgZnJvbSBCTVAgY29kZSBwb2ludHMgdG8gbWFrZSB0aGVtIHNtYWxsZXIgdGhhbgorICAgICAgICAgICAgICogIHN1cHBsZW1lbnRhcnkgb25lcyAqLworICAgICAgICAgICAgaWYoCisgICAgICAgICAgICAgICAgKCBjMTw9MHhkYmZmICYmIChzMVN0YXJ0KzEpIT1saW1pdDEgJiYgCisgICAgICAgICAgICAgICAgICBVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKHMxWyhzMVN0YXJ0KzEpXSkKKyAgICAgICAgICAgICAgICApIHx8CisgICAgICAgICAgICAgICAgKCBVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGMxKSAmJiBzdGFydDEhPXMxU3RhcnQgJiYgCisgICAgICAgICAgICAgICAgICBVVEYxNi5pc0xlYWRTdXJyb2dhdGUoczFbKHMxU3RhcnQtMSldKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIC8qIHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciwgbGVhdmUgPj1kODAwICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEJNUCBjb2RlIHBvaW50IC0gbWF5IGJlIHN1cnJvZ2F0ZSBjb2RlIHBvaW50IC0gbWFrZSA8ZDgwMCAqLworICAgICAgICAgICAgICAgIGMxLT0weDI4MDA7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBpZigKKyAgICAgICAgICAgICAgICAoIGMyPD0weGRiZmYgJiYgKHMyU3RhcnQrMSkhPWxpbWl0MiAmJiAKKyAgICAgICAgICAgICAgICAgIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoczJbKHMyU3RhcnQrMSldKQorICAgICAgICAgICAgICAgICkgfHwKKyAgICAgICAgICAgICAgICAoIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoYzIpICYmIHN0YXJ0MiE9czJTdGFydCAmJiAKKyAgICAgICAgICAgICAgICAgIFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShzMlsoczJTdGFydC0xKV0pCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgLyogcGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCBsZWF2ZSA+PWQ4MDAgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogQk1QIGNvZGUgcG9pbnQgLSBtYXkgYmUgc3Vycm9nYXRlIGNvZGUgcG9pbnQgLSBtYWtlIDxkODAwICovCisgICAgICAgICAgICAgICAgYzItPTB4MjgwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICAvKiBub3cgYzEgYW5kIGMyIGFyZSBpbiBVVEYtMzItY29tcGF0aWJsZSBvcmRlciAqLworICAgICAgICByZXR1cm4gKGludCljMS0oaW50KWMyOworICAgIH0KKworCXB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmUoY2hhcltdIHMxLCBpbnQgczFTdGFydCxpbnQgczFMaW1pdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBzMiwgaW50IHMyU3RhcnQsaW50IHMyTGltaXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICBjaGFyW10gZmNkMSAgPSBuZXcgY2hhclszMDBdOworICAgICAgICBjaGFyW10gZmNkMiAgPSBuZXcgY2hhclszMDBdOworCSAgICBjaGFyW10gZm9sZDEgPSBuZXcgY2hhclszMDBdOworICAgICAgICBjaGFyW10gZm9sZDIgPSBuZXcgY2hhclszMDBdOworICAgICAgICAKKyAgICAgICAgaW50IHJlc3VsdDsKKwkKKwkgICAgaWYoICAgIHMxPT1udWxsIHx8IHMxU3RhcnQ8MCB8fCBzMUxpbWl0PDAgfHwgCisgICAgICAgICAgICAgICBzMj09bnVsbCB8fCBzMlN0YXJ0PDAgfHwgczJMaW1pdDwwCisgICAgICAgICAgKSB7CisJICAgICAgICAKKwkgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKwkgICAgfQorCisJICAgIG9wdGlvbnN8PUNPTVBBUkVfRVFVSVY7CisJCisJICAgIGlmKChvcHRpb25zJiBOb3JtYWxpemVyLklOUFVUX0lTX0ZDRCk9PTApIHsKKwkgICAgICAgIGNoYXJbXSBkZXN0OworCSAgICAgICAgaW50IGZjZExlbjEsIGZjZExlbjI7CisgICAgICAgICAgICBpbnQgZm9sZExlbjEsIGZvbGRMZW4yOworCSAgICAgICAgYm9vbGVhbiBpc0ZDRDEsIGlzRkNEMjsKKwkKKwkgICAgICAgIC8vIGNoZWNrIGlmIHMxIGFuZC9vciBzMiBmdWxmaWxsIHRoZSBGQ0QgY29uZGl0aW9ucworCSAgICAgICAgaXNGQ0QxPWNoZWNrRkNEKHMxLCBzMVN0YXJ0LCBzMUxpbWl0KTsKKwkgICAgICAgIGlzRkNEMj1jaGVja0ZDRChzMiwgczJTdGFydCwgczJMaW1pdCk7CisJICAgICAgICAKKwkgICAgICAgIGlmKChvcHRpb25zJk5vcm1hbGl6ZXIuQ09NUEFSRV9JR05PUkVfQ0FTRSkhPTAgJiYgCisgICAgICAgICAgICAgICAgIShpc0ZDRDEgJiYgaXNGQ0QyKSkgeworCSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIGNhc2UtZm9sZCBmaXJzdCB0byBrZWVwIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFzIGluIFVBWCAyMSAyLjUKKwkgICAgICAgICAgICBmb2xkTGVuMT1mb2xkQ2FzZShzMSxzMVN0YXJ0LHMxTGltaXQsZm9sZDEsMCxmb2xkMS5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChvcHRpb25zJk5vcm1hbGl6ZXIuRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JKT09MCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICAgICAgICAgIGlmKGZvbGRMZW4xID4gZm9sZDEubGVuZ3RoKXsKKwkgICAgICAgICAgICAgICAgZGVzdCA9IG5ldyBjaGFyW2ZvbGRMZW4xXTsKKwkgICAgICAgICAgICAgICAgZm9sZExlbjE9Zm9sZENhc2UoczEsczFTdGFydCxzMUxpbWl0LGRlc3QsMCxmb2xkTGVuMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChvcHRpb25zJk5vcm1hbGl6ZXIuRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JKT09MCkpOworICAgICAgICAgICAgICAgICAgICAJCisJICAgICAgICAgICAgICAgIHMxPWRlc3Q7CisJICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgIHMxPWZvbGQxOworICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzMVN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICBzMUxpbWl0ID0gZm9sZExlbjE7CisJCisJICAgICAgICAgICAgZm9sZExlbjI9Zm9sZENhc2UoczIsczJTdGFydCxzMkxpbWl0LGZvbGQyLDAsZm9sZDIubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgob3B0aW9ucyZOb3JtYWxpemVyLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSk9PTApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZihmb2xkTGVuMiA+IGZvbGQyLmxlbmd0aCl7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBuZXcgY2hhcltmb2xkTGVuMl07CisgICAgICAgICAgICAgICAgICAgIGZvbGRMZW4yPWZvbGRDYXNlKHMyLHMyU3RhcnQsczJMaW1pdCxkZXN0LDAsZm9sZExlbjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgob3B0aW9ucyZOb3JtYWxpemVyLkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSk9PTApKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHMyPWRlc3Q7CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgIHMyPWZvbGQyOworICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAKKwkgICAgICAgICAgICBzMlN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICBzMkxpbWl0ID0gZm9sZExlbjI7CisJCisJICAgICAgICAgICAgLy8gdHVybiBvZmYgVV9DT01QQVJFX0lHTk9SRV9DQVNFIGFuZCByZS1jaGVjayBGQ0QKKwkgICAgICAgICAgICBvcHRpb25zJj1+IE5vcm1hbGl6ZXIuQ09NUEFSRV9JR05PUkVfQ0FTRTsKKwkgICAgICAgICAgICBpc0ZDRDE9Y2hlY2tGQ0QoczEsIHMxU3RhcnQsIHMxTGltaXQpOworCSAgICAgICAgICAgIGlzRkNEMj1jaGVja0ZDRChzMiwgczJTdGFydCwgczJMaW1pdCk7CisJICAgICAgICB9CisKKworCSAgICAgICAgaWYoIWlzRkNEMSAmJiAhaXNGQ0QyKSB7CisJICAgICAgICAgICAgLy8gaWYgYm90aCBzdHJpbmdzIG5lZWQgbm9ybWFsaXphdGlvbiB0aGVuIG1ha2UgdGhlbSBORkQgcmlnaHQgCisgICAgICAgICAgICAgICAgLy8gYXdheSBhbmQgdHVybiBvZmYgbm9ybWFsaXphdGlvbiBpbiB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgorCSAgICAgICAgICAgIGludFtdIHRyYWlsQ0MgPSBuZXcgaW50WzFdOzsKKwkKKwkgICAgICAgICAgICAvLyBmdWxseSBkZWNvbXBvc2UgKE5GRCkgczEgYW5kIHMyCisJCisJICAgICAgICAgICAgZmNkTGVuMT1kZWNvbXBvc2UoIHMxLHMxU3RhcnQsczFMaW1pdCxmY2QxLDAsZmNkMS5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0cmFpbENDKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgaWYoZmNkTGVuMTw9ZmNkMS5sZW5ndGgpIHsKKwkgICAgICAgICAgICAgICAgczE9ZmNkMTsKKwkgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICBkZXN0PW5ldyBjaGFyW2ZjZExlbjFdOworCSAgICAgICAgICAgICAgICBmY2RMZW4xPSBkZWNvbXBvc2UoIHMxLHMxU3RhcnQsczFMaW1pdCxkZXN0LDAsZGVzdC5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRyYWlsQ0MpOworCQorCSAgICAgICAgICAgICAgICBzMT1kZXN0OworCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKwkgICAgICAgICAgICBzMUxpbWl0PWZjZExlbjE7CisJICAgICAgICAgICAgczJTdGFydD0wOworCSAgICAgICAgICAgIGZjZExlbjI9ZGVjb21wb3NlKCBzMixzMlN0YXJ0LHMyTGltaXQsIGZjZDIsMCxmY2QyLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRyYWlsQ0MpOworCSAgICAgICAgICAgIGlmKGZjZExlbjI8PWZjZDIubGVuZ3RoKSB7CisJICAgICAgICAgICAgICAgIHMyPWZjZDI7CisJICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgZGVzdD1uZXcgY2hhcltmY2RMZW4yXTsKKwkgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgICAgIGZjZExlbjI9ZGVjb21wb3NlKCBzMixzMlN0YXJ0LHMyTGltaXQsZGVzdCwwLGRlc3QubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdHJhaWxDQyk7CisJCisJICAgICAgICAgICAgICAgIHMyPWRlc3Q7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHMyTGltaXQ9ZmNkTGVuMjsKKwkgICAgICAgICAgICBzMlN0YXJ0PTA7CisJICAgICAgICAgICAgLy8gY29tcGFyZSBORkQgc3RyaW5ncworCSAgICAgICAgICAgIG9wdGlvbnMmPX5DT01QQVJFX0VRVUlWOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAvLyBpZiBhdCBsZWFzdCBvbmUgc3RyaW5nIGlzIGFscmVhZHkgaW4gRkNEIHRoZW4gb25seSBtYWtlRkNEIAorICAgICAgICAgICAgICAgIC8vIHRoZSBvdGhlciBhbmQgY29tcGFyZSBmb3IgZXF1aXZhbGVuY2UKKwkgICAgICAgICAgICBpZighaXNGQ0QxKSB7CisJICAgICAgICAgICAgICAgIGZjZExlbjE9bWFrZUZDRChzMSxzMVN0YXJ0LHMxTGltaXQsZmNkMSwwLGZjZDEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgICAgIGlmKGZjZExlbjE+ZmNkMS5sZW5ndGgpeworCSAgICAgICAgICAgICAgICAgICAgZGVzdD1uZXcgY2hhcltmY2RMZW4xXTsKKwkgICAgICAgICAgICAgICAgICAgIGZjZExlbjE9bWFrZUZDRChzMSxzMVN0YXJ0LHMxTGltaXQsZGVzdCwwLGRlc3QubGVuZ3RoKTsKKwkgICAgICAgICAgICAgICAgICAgIHMxPWRlc3Q7CisJICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgczE9ZmNkMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBzMUxpbWl0PWZjZExlbjE7CisgICAgICAgICAgICAgICAgICAgIHMxU3RhcnQ9MDsKKwkgICAgICAgICAgICB9CisJCisJICAgICAgICAgICAgaWYoIWlzRkNEMikgeworCSAgICAgICAgICAgICAgICBmY2RMZW4yPW1ha2VGQ0QoczIsczJTdGFydCxzMkxpbWl0LGZjZDIsMCxmY2QyLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIAorCSAgICAgICAgICAgICAgICBpZihmY2RMZW4yPmZjZDIubGVuZ3RoKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9bmV3IGNoYXJbZmNkTGVuMl07CisgICAgICAgICAgICAgICAgICAgICAgICBmY2RMZW4yPW1ha2VGQ0QoczIsczJTdGFydCxzMkxpbWl0LGRlc3QsMCxkZXN0Lmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzMj1kZXN0OworICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMyPWZjZDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgczJMaW1pdD1mY2RMZW4yOworICAgICAgICAgICAgICAgICAgICBzMlN0YXJ0PTA7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICB9CisJCisgICAgICAgIGlmKChvcHRpb25zJihDT01QQVJFX0VRVUlWfE5vcm1hbGl6ZXIuQ09NUEFSRV9JR05PUkVfQ0FTRSkpPT0wKSB7CisJICAgICAgICAvLyBjb21wYXJlIE5GRCBzdHJpbmdzIGNhc2Utc2Vuc2l0aXZlOiBqdXN0IHVzZSBub3JtYWwgY29tcGFyaXNvbgorCSAgICAgICAgcmVzdWx0PXN0ckNvbXBhcmUoczEsIHMxU3RhcnQsIHMxTGltaXQsIHMyLHMyU3RhcnQsczJMaW1pdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCE9KG9wdGlvbnMgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLkNPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwkgICAgfSBlbHNlIHsKKwkgICAgICAgIHJlc3VsdD1jbXBFcXVpdkZvbGQoczEsIHMxU3RhcnQsIHMxTGltaXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMiwgczJTdGFydCwgczJMaW1pdCwgb3B0aW9ucyk7CisJICAgIH0KKwkgICAgcmV0dXJuIHJlc3VsdDsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1JlcGxhY2VhYmxlVUNoYXJhY3Rlckl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9SZXBsYWNlYWJsZVVDaGFyYWN0ZXJJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YmMwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9SZXBsYWNlYWJsZVVDaGFyYWN0ZXJJdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9SZXBsYWNlYWJsZVVDaGFyYWN0ZXJJdGVyYXRvci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEwLzMxIDIyOjM1OjIwICQgCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuUmVwbGFjZWFibGU7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5SZXBsYWNlYWJsZVN0cmluZzsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlVURjE2OyAgICAKKworLyoqCisgKiBETEYgZG9jcyBtdXN0IGRlZmluZSBiZWhhdmlvciB3aGVuIFJlcGxhY2VhYmxlIGlzIG11dGF0ZWQgdW5kZXJuZWF0aAorICogdGhlIGl0ZXJhdG9yLgorICoKKyAqIFRoaXMgYW5kIElDVUNoYXJhY3Rlckl0ZXJhdG9yIHNoYXJlIHNvbWUgY29kZSwgbWF5YmUgdGhleSBzaG91bGQgc2hhcmUKKyAqIGFuIGltcGxlbWVudGF0aW9uLCBvciB0aGUgY29tbW9uIHN0YXRlIGFuZCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUKKyAqIG1vdmVkIHVwIGludG8gVUNoYXJhY3Rlckl0ZXJhdG9yLgorICoKKyAqIFdoYXQgYXJlIGZpcnN0LCBsYXN0LCBhbmQgZ2V0QmVnaW5JbmRleCBkb2luZyBoZXJlPyE/IT8hCisgKi8KK3B1YmxpYyBjbGFzcyBSZXBsYWNlYWJsZVVDaGFyYWN0ZXJJdGVyYXRvciBleHRlbmRzIFVDaGFyYWN0ZXJJdGVyYXRvciB7CisKKyAgICAvLyBwdWJsaWMgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogUHVibGljIGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIHJlcGxhY2FibGUgdGV4dCB3aGljaCB0aGUgaXRlcmF0b3Igd2lsbCBiZSBiYXNlZCBvbgorICAgICAqLworICAgIHB1YmxpYyBSZXBsYWNlYWJsZVVDaGFyYWN0ZXJJdGVyYXRvcihSZXBsYWNlYWJsZSByZXBsYWNlYWJsZSl7CisgICAgICAgIGlmKHJlcGxhY2VhYmxlPT1udWxsKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnJlcGxhY2VhYmxlICA9IHJlcGxhY2VhYmxlOworICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFB1YmxpYyBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBzdHIgdGV4dCB3aGljaCB0aGUgaXRlcmF0b3Igd2lsbCBiZSBiYXNlZCBvbgorICAgICAqLworICAgIHB1YmxpYyBSZXBsYWNlYWJsZVVDaGFyYWN0ZXJJdGVyYXRvcihTdHJpbmcgc3RyKXsKKyAgICAgICAgaWYoc3RyPT1udWxsKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnJlcGxhY2VhYmxlICA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyhzdHIpOworICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFB1YmxpYyBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBidWYgYnVmZmVyIG9mIHRleHQgb24gd2hpY2ggdGhlIGl0ZXJhdG9yIHdpbGwgYmUgYmFzZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgUmVwbGFjZWFibGVVQ2hhcmFjdGVySXRlcmF0b3IoU3RyaW5nQnVmZmVyIGJ1Zil7CisgICAgICAgIGlmKGJ1Zj09bnVsbCl7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5yZXBsYWNlYWJsZSAgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoYnVmKTsKKyAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwOworICAgIH0KKyAgICAKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBpdGVyYXRvciwgZG9lcyBub3QgY2xvbmUgdGhlIHVuZGVybHlpbmcgCisgICAgICogPGNvZGU+UmVwbGFjZWFibGU8L2NvZGU+b2JqZWN0CisgICAgICogQHJldHVybiBjb3B5IG9mIHRoaXMgaXRlcmF0b3IKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCl7CisJCXRyeSB7CisJCSAgcmV0dXJuIHN1cGVyLmNsb25lKCk7CisJCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKKwkJICAgIHJldHVybiBudWxsOyAvLyBuZXZlciBpbnZva2VkCisJCX0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBVVEYxNiBjaGFyYWN0ZXIuCisgICAgICogQHJldHVybiBjdXJyZW50IFVURjE2IGNoYXJhY3RlcgorICAgICAqLworICAgIHB1YmxpYyBpbnQgY3VycmVudCgpeworICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgcmVwbGFjZWFibGUubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiByZXBsYWNlYWJsZS5jaGFyQXQoY3VycmVudEluZGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRE9ORTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBjb2RlcG9pbnQKKyAgICAgKiBAcmV0dXJuIGN1cnJlbnQgY29kZXBvaW50CisgICAgICovCisgICAgcHVibGljIGludCBjdXJyZW50Q29kZVBvaW50KCl7CisgICAgICAgIC8vIGNhbm5vdCB1c2UgY2hhckF0IGR1ZSB0byBpdCBkaWZmZXJlbnQgCisgICAgICAgIC8vIGJlaGF2aW91ciB3aGVuIGluZGV4IGlzIHBvaW50aW5nIGF0IGEKKyAgICAgICAgLy8gdHJhaWwgc3Vycm9nYXRlLCBjaGVjayBmb3Igc3Vycm9nYXRlcworICAgICAgICAgCisgICAgICAgIGludCBjaCA9IGN1cnJlbnQoKTsKKyAgICAgICAgaWYoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKChjaGFyKWNoKSl7CisgICAgICAgICAgICAvLyBhZHZhbmNlIHRoZSBpbmRleCB0byBnZXQgdGhlIG5leHQgY29kZSBwb2ludAorICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgLy8gZHVlIHRvIHBvc3QgaW5jcmVtZW50IHNlbWFudGljcyBjdXJyZW50KCkgYWZ0ZXIgbmV4dCgpIAorICAgICAgICAgICAgLy8gYWN0dWFsbHkgcmV0dXJucyB0aGUgbmV4dCBjaGFyIHdoaWNoIGlzIHdoYXQgd2Ugd2FudAorICAgICAgICAgICAgaW50IGNoMiA9IGN1cnJlbnQoKTsKKyAgICAgICAgICAgIC8vIGN1cnJlbnQgc2hvdWxkIG5ldmVyIGNoYW5nZSB0aGUgY3VycmVudCBpbmRleCBzbyBiYWNrIG9mZgorICAgICAgICAgICAgcHJldmlvdXMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYoVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZSgoY2hhciljaDIpKXsKKyAgICAgICAgICAgICAgICAvLyB3ZSBmb3VuZCBhIHN1cnJvZ2F0ZSBwYWlyCisgICAgICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRSYXdTdXBwbGVtZW50YXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpY2gsKGNoYXIpY2gyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2g7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dAorICAgICAqIEByZXR1cm4gbGVuZ3RoIG9mIHRoZSB0ZXh0CisgICAgICovCisgICAgcHVibGljIGludCBnZXRMZW5ndGgoKXsKKyAgICAgICAgcmV0dXJuIHJlcGxhY2VhYmxlLmxlbmd0aCgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGN1cnJlbnRJbmRleCBpbiB0ZXh0LgorICAgICAqIEByZXR1cm4gY3VycmVudCBjdXJyZW50SW5kZXggaW4gdGV4dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEluZGV4KCl7CisgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIG5leHQgVVRGMTYgY2hhcmFjdGVyIGFuZCBpbmNyZW1lbnRzIHRoZSBpdGVyYXRvcidzIGN1cnJlbnRJbmRleCBieSAxLiAKKyAgICAgKiBJZiB0aGUgcmVzdWx0aW5nIGN1cnJlbnRJbmRleCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSB0ZXh0IGxlbmd0aCwgdGhlIAorICAgICAqIGN1cnJlbnRJbmRleCBpcyByZXNldCB0byB0aGUgdGV4dCBsZW5ndGggYW5kIGEgdmFsdWUgb2YgRE9ORUNPREVQT0lOVCBpcyAKKyAgICAgKiByZXR1cm5lZC4gCisgICAgICogQHJldHVybiBuZXh0IFVURjE2IGNoYXJhY3RlciBpbiB0ZXh0IG9yIERPTkUgaWYgdGhlIG5ldyBjdXJyZW50SW5kZXggaXMgb2ZmIHRoZSAKKyAgICAgKiAgICAgICAgIGVuZCBvZiB0aGUgdGV4dCByYW5nZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG5leHQoKXsKKyAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IHJlcGxhY2VhYmxlLmxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gcmVwbGFjZWFibGUuY2hhckF0KGN1cnJlbnRJbmRleCsrKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRE9ORTsKKyAgICB9CisgICAgCisgICAgICAgICAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBwcmV2aW91cyBVVEYxNiBjaGFyYWN0ZXIgYW5kIGRlY3JlbWVudHMgdGhlIGl0ZXJhdG9yJ3MgY3VycmVudEluZGV4IGJ5IAorICAgICAqIDEuIAorICAgICAqIElmIHRoZSByZXN1bHRpbmcgY3VycmVudEluZGV4IGlzIGxlc3MgdGhhbiAwLCB0aGUgY3VycmVudEluZGV4IGlzIHJlc2V0IHRvIDAgYW5kIGEgCisgICAgICogdmFsdWUgb2YgRE9ORUNPREVQT0lOVCBpcyByZXR1cm5lZC4gCisgICAgICogQHJldHVybiBuZXh0IFVURjE2IGNoYXJhY3RlciBpbiB0ZXh0IG9yIERPTkUgaWYgdGhlIG5ldyBjdXJyZW50SW5kZXggaXMgb2ZmIHRoZSAKKyAgICAgKiAgICAgICAgIHN0YXJ0IG9mIHRoZSB0ZXh0IHJhbmdlLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgcHJldmlvdXMoKXsKKyAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiByZXBsYWNlYWJsZS5jaGFyQXQoLS1jdXJyZW50SW5kZXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBET05FOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPlNldHMgdGhlIGN1cnJlbnRJbmRleCB0byB0aGUgc3BlY2lmaWVkIGN1cnJlbnRJbmRleCBpbiB0aGUgdGV4dCBhbmQgcmV0dXJucyB0aGF0IAorICAgICAqIHNpbmdsZSBVVEYxNiBjaGFyYWN0ZXIgYXQgY3VycmVudEluZGV4LiAKKyAgICAgKiBUaGlzIGFzc3VtZXMgdGhlIHRleHQgaXMgc3RvcmVkIGFzIDE2LWJpdCBjb2RlIHVuaXRzLjwvcD4KKyAgICAgKiBAcGFyYW0gY3VycmVudEluZGV4IHRoZSBjdXJyZW50SW5kZXggd2l0aGluIHRoZSB0ZXh0LiAKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgYW4gaW52YWxpZCBjdXJyZW50SW5kZXggaXMgCisgICAgICogICAgICAgICAgICBzdXBwbGllZC4gaS5lLiBjdXJyZW50SW5kZXggaXMgb3V0IG9mIGJvdW5kcy4KKyAgICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNwZWNpZmllZCBjdXJyZW50SW5kZXggb3IgRE9ORSBpZiB0aGUgc3BlY2lmaWVkIAorICAgICAqICAgICAgICAgY3VycmVudEluZGV4IGlzIGVxdWFsIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SW5kZXgoaW50IGN1cnJlbnRJbmRleCkgdGhyb3dzIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb257CisgICAgICAgIGlmIChjdXJyZW50SW5kZXggPCAwIHx8IGN1cnJlbnRJbmRleCA+IHJlcGxhY2VhYmxlLmxlbmd0aCgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4OworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgaW50IGdldFRleHQoY2hhcltdIGZpbGxJbiwgaW50IG9mZnNldCl7CisgICAgCWludCBsZW5ndGggPSByZXBsYWNlYWJsZS5sZW5ndGgoKTsKKyAgICAgICAgaWYob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyBsZW5ndGggPiBmaWxsSW4ubGVuZ3RoKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKEludGVnZXIudG9TdHJpbmcobGVuZ3RoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVwbGFjZWFibGUuZ2V0Q2hhcnMoMCxsZW5ndGgsZmlsbEluLG9mZnNldCk7CisgICAgICAgIHJldHVybiBsZW5ndGg7CisgICAgfSAgICAgICAKKyAgICAgICAgCisgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFJlcGxhY2FibGUgb2JqZWN0CisgICAgICovCisgICAgcHJpdmF0ZSBSZXBsYWNlYWJsZSByZXBsYWNlYWJsZTsKKyAgICAvKioKKyAgICAgKiBDdXJyZW50IGN1cnJlbnRJbmRleAorICAgICAqLworICAgIHByaXZhdGUgaW50IGN1cnJlbnRJbmRleDsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvU29ydGVkU2V0UmVsYXRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1NvcnRlZFNldFJlbGF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4NTZlZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1NvcnRlZFNldFJlbGF0aW9uLmphdmEKQEAgLTAsMCArMSwxODAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoYykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQXV0aG9yOiBNLiBEYXZpcworKiBDcmVhdGVkOiBEZWNlbWJlciAyMDAyIChtb3ZlZCBmcm9tIFVuaWNvZGVTZXQpCisqIFNpbmNlOiBJQ1UgMi40CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLlNvcnRlZFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKKy8qKgorICogQ29tcHV0YXRpb25hbGx5IGVmZmljaWVudCBkZXRlcm1pbmF0aW9uIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorICogdHdvIFNvcnRlZFNldHMuCisgKi8KK3B1YmxpYyBjbGFzcyBTb3J0ZWRTZXRSZWxhdGlvbiB7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIHNldHMgQSBhbmQgQiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBsb29raW5nIGF0OgorICAgICAqIEEgLSBCCisgICAgICogQSAmIEIgKGludGVyc2VjdGlvbikKKyAgICAgKiBCIC0gQQorICAgICAqIFRoZXNlIGFyZSByZXByZXNlbnRlZCBieSBhIHNldCBvZiBiaXRzLgorICAgICAqIEJpdCAyIGlzIHRydWUgaWYgQSAtIEIgaXMgbm90IGVtcHR5CisgICAgICogQml0IDEgaXMgdHJ1ZSBpZiBBICYgQiBpcyBub3QgZW1wdHkKKyAgICAgKiBCSVQgMCBpcyB0cnVlIGlmIEIgLSBBIGlzIG5vdCBlbXB0eQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50CisgICAgICAgIEFfTk9UX0IgPSA0LAorICAgICAgICBBX0FORF9CID0gMiwKKyAgICAgICAgQl9OT1RfQSA9IDE7CisgICAgCisgICAgLyoqCisgICAgICogVGhlcmUgYXJlIDggY29tYmluYXRpb25zIG9mIHRoZSByZWxhdGlvbnNoaXAgYml0cy4gVGhlc2UgY29ycmVzcG9uZCB0bworICAgICAqIHRoZSBmaWx0ZXJzIChjb21iaW5hdGlvbnMgb2YgYWxsb3dlZCBiaXRzKSBpbiBoYXNSZWxhdGlvbi4gVGhleSBhbHNvCisgICAgICogY29ycmVzcG9uZCB0byB0aGUgbW9kaWZpY2F0aW9uIGZ1bmN0aW9ucywgbGlzdGVkIGluIGNvbW1lbnRzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IAorICAgICAgIEFOWSA9ICAgICAgICAgICAgQV9OT1RfQiB8ICAgQV9BTkRfQiB8ICAgQl9OT1RfQSwgICAgLy8gdW5pb24sICAgICAgICAgICBhZGRBbGwKKyAgICAgICBDT05UQUlOUyA9ICAgICAgIEFfTk9UX0IgfCAgIEFfQU5EX0IsICAgICAgICAgICAgICAgIC8vIEEgICAgICAgICAgICAgICAgKHVubmVjZXNzYXJ5KQorICAgICAgIERJU0pPSU5UID0gICAgICAgQV9OT1RfQiB8ICAgICAgICAgICAgICAgQl9OT1RfQSwgICAgLy8gQSB4b3IgQiwgICAgICAgICBtaXNzaW5nIEphdmEgZnVuY3Rpb24KKyAgICAgICBJU0NPTlRBSU5FRCA9ICAgICAgICAgICAgICAgIEFfQU5EX0IgfCAgIEJfTk9UX0EsICAgIC8vIEIgICAgICAgICAgICAgICAgKHVubmVjZXNzYXJ5KQorICAgICAgIE5PX0IgPSAgICAgICAgICAgQV9OT1RfQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBzZXREaWZmIEIsICAgICByZW1vdmVBbGwKKyAgICAgICBFUVVBTFMgPSAgICAgICAgICAgICAgICAgICAgIEFfQU5EX0IsICAgICAgICAgICAgICAgIC8vIEEgaW50ZXJzZWN0IEIsICAgcmV0YWluQWxsCisgICAgICAgTk9fQSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCX05PVF9BLCAgICAvLyBCIHNldERpZmYgQSwgICAgIHJlbW92ZUFsbAorICAgICAgIE5PTkUgPSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbnVsbCAgICAgICAgICAgICAodW5uZWNlc3NhcnkpCisgICAgICAgCisgICAgICAgQUREQUxMID0gQU5ZLCAgICAgICAgICAgICAgICAvLyB1bmlvbiwgICAgICAgICAgIGFkZEFsbAorICAgICAgIEEgPSBDT05UQUlOUywgICAgICAgICAgICAgICAgLy8gQSAgICAgICAgICAgICAgICAodW5uZWNlc3NhcnkpCisgICAgICAgQ09NUExFTUVOVEFMTCA9IERJU0pPSU5ULCAgICAvLyBBIHhvciBCLCAgICAgICAgIG1pc3NpbmcgSmF2YSBmdW5jdGlvbgorICAgICAgIEIgPSBJU0NPTlRBSU5FRCwgICAgICAgICAgICAgLy8gQiAgICAgICAgICAgICAgICAodW5uZWNlc3NhcnkpCisgICAgICAgUkVNT1ZFQUxMID0gTk9fQiwgICAgICAgICAgICAvLyBBIHNldERpZmYgQiwgICAgIHJlbW92ZUFsbAorICAgICAgIFJFVEFJTkFMTCA9IEVRVUFMUywgICAgICAgICAgLy8gQSBpbnRlcnNlY3QgQiwgICByZXRhaW5BbGwKKyAgICAgICBCX1JFTU9WRUFMTCA9IE5PX0E7ICAgICAgICAgIC8vIEIgc2V0RGlmZiBBLCAgICAgcmVtb3ZlQWxsCisgICAgICAgCisgIAorICAgIC8qKgorICAgICAqIFV0aWxpdHkgdGhhdCBjb3VsZCBiZSBvbiBTb3J0ZWRTZXQuIEZhc3RlciBpbXBsZW1lbnRhdGlvbiB0aGFuCisgICAgICogd2hhdCBpcyBpbiBKYXZhIGZvciBkb2luZyBjb250YWlucywgZXF1YWxzLCBldGMuCisgICAgICogQHBhcmFtIGEgZmlyc3Qgc2V0CisgICAgICogQHBhcmFtIGFsbG93IGZpbHRlciwgdXNpbmcgQU5ZLCBDT05UQUlOUywgZXRjLgorICAgICAqIEBwYXJhbSBiIHNlY29uZCBzZXQKKyAgICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGZpbHRlciByZWxhdGlvbnNoaXAgaXMgdHJ1ZSBvciBub3QuCisgICAgICovICAgIAorICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBoYXNSZWxhdGlvbihTb3J0ZWRTZXQgYSwgaW50IGFsbG93LCBTb3J0ZWRTZXQgYikgeworICAgICAgICBpZiAoYWxsb3cgPCBOT05FIHx8IGFsbG93ID4gQU5ZKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZWxhdGlvbiAiICsgYWxsb3cgKyAiIG91dCBvZiByYW5nZSIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBleHRyYWN0IGZpbHRlciBjb25kaXRpb25zCisgICAgICAgIC8vIHRoZXNlIGFyZSB0aGUgQUxMT1dFRCBjb25kaXRpb25zIFNldAorICAgICAgICAKKyAgICAgICAgYm9vbGVhbiBhbmIgPSAoYWxsb3cgJiBBX05PVF9CKSAhPSAwOworICAgICAgICBib29sZWFuIGFiID0gKGFsbG93ICYgQV9BTkRfQikgIT0gMDsKKyAgICAgICAgYm9vbGVhbiBibmEgPSAoYWxsb3cgJiBCX05PVF9BKSAhPSAwOworICAgICAgICAKKyAgICAgICAgLy8gcXVpY2sgY2hlY2sgb24gc2l6ZXMKKyAgICAgICAgc3dpdGNoKGFsbG93KSB7CisgICAgICAgICAgICBjYXNlIENPTlRBSU5TOiBpZiAoYS5zaXplKCkgPCBiLnNpemUoKSkgcmV0dXJuIGZhbHNlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSVNDT05UQUlORUQ6IGlmIChhLnNpemUoKSA+IGIuc2l6ZSgpKSByZXR1cm4gZmFsc2U7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFUVVBTFM6IGlmIChhLnNpemUoKSAhPSBiLnNpemUoKSkgcmV0dXJuIGZhbHNlOyBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gY2hlY2sgZm9yIG51bGwgc2V0cworICAgICAgICBpZiAoYS5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgaWYgKGIuc2l6ZSgpID09IDApIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGJuYTsKKyAgICAgICAgfSBlbHNlIGlmIChiLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gYW5iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBwaWNrIHVwIGZpcnN0IHN0cmluZ3MsIGFuZCBzdGFydCBjb21wYXJpbmcKKyAgICAgICAgSXRlcmF0b3IgYWl0ID0gYS5pdGVyYXRvcigpOworICAgICAgICBJdGVyYXRvciBiaXQgPSBiLml0ZXJhdG9yKCk7CisgICAgICAgIAorICAgICAgICBDb21wYXJhYmxlIGFhID0gKENvbXBhcmFibGUpIGFpdC5uZXh0KCk7CisgICAgICAgIENvbXBhcmFibGUgYmIgPSAoQ29tcGFyYWJsZSkgYml0Lm5leHQoKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpbnQgY29tcCA9IGFhLmNvbXBhcmVUbyhiYik7CisgICAgICAgICAgICBpZiAoY29tcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhYikgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghYWl0Lmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWJpdC5oYXNOZXh0KCkpIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm5hOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWJpdC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFuYjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWEgPSAoQ29tcGFyYWJsZSkgYWl0Lm5leHQoKTsKKyAgICAgICAgICAgICAgICBiYiA9IChDb21wYXJhYmxlKSBiaXQubmV4dCgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICghYW5iKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFhaXQuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBibmE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFhID0gKENvbXBhcmFibGUpIGFpdC5uZXh0KCk7IAorICAgICAgICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICAgICAgaWYgKCFibmEpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIWJpdC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFuYjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmIgPSAoQ29tcGFyYWJsZSkgYml0Lm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IHRoYXQgY291bGQgYmUgb24gU29ydGVkU2V0LiBBbGxvd3MgZmFzdGVyIGltcGxlbWVudGF0aW9uIHRoYW4KKyAgICAgKiB3aGF0IGlzIGluIEphdmEgZm9yIGRvaW5nIGFkZEFsbCwgcmVtb3ZlQWxsLCByZXRhaW5BbGwsIChjb21wbGVtZW50QWxsKS4KKyAgICAgKiBAcGFyYW0gYSBmaXJzdCBzZXQKKyAgICAgKiBAcGFyYW0gYWxsb3cgZmlsdGVyLCB1c2luZyBBTlksIENPTlRBSU5TLCBldGMuCisgICAgICogQHBhcmFtIGIgc2Vjb25kIHNldAorICAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgZmlsdGVyIHJlbGF0aW9uc2hpcCBpcyB0cnVlIG9yIG5vdC4KKyAgICAgKi8gICAgCisgICAgcHVibGljIHN0YXRpYyBTb3J0ZWRTZXQgZG9PcGVyYXRpb24oU29ydGVkU2V0IGEsIGludCByZWxhdGlvbiwgU29ydGVkU2V0IGIpIHsKKyAgICAgICAgLy8gVE9ETzogb3B0aW1pemUgdGhpcyBhcyBhYm92ZQorICAgICAgICBUcmVlU2V0IHRlbXA7CisgICAgICAgIHN3aXRjaCAocmVsYXRpb24pIHsKKyAgICAgICAgICAgIGNhc2UgQUREQUxMOgorICAgICAgICAgICAgICAgIGEuYWRkQWxsKGIpOyAKKyAgICAgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgICAgIGNhc2UgQToKKyAgICAgICAgICAgICAgICByZXR1cm4gYTsgLy8gbm8gYWN0aW9uCisgICAgICAgICAgICBjYXNlIEI6CisgICAgICAgICAgICAgICAgYS5jbGVhcigpOyAKKyAgICAgICAgICAgICAgICBhLmFkZEFsbChiKTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICBjYXNlIFJFTU9WRUFMTDogCisgICAgICAgICAgICAgICAgYS5yZW1vdmVBbGwoYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICBjYXNlIFJFVEFJTkFMTDogCisgICAgICAgICAgICAgICAgYS5yZXRhaW5BbGwoYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIGlzIHRoZSBvbmx5IGNhc2Ugbm90IHJlYWxseSBzdXBwb3J0ZWQgYnkgSmF2YQorICAgICAgICAgICAgLy8gYWx0aG91Z2ggYWxsIGNvdWxkIGJlIG9wdGltaXplZAorICAgICAgICAgICAgY2FzZSBDT01QTEVNRU5UQUxMOgorICAgICAgICAgICAgICAgIHRlbXAgPSBuZXcgVHJlZVNldChiKTsKKyAgICAgICAgICAgICAgICB0ZW1wLnJlbW92ZUFsbChhKTsKKyAgICAgICAgICAgICAgICBhLnJlbW92ZUFsbChiKTsKKyAgICAgICAgICAgICAgICBhLmFkZEFsbCh0ZW1wKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgICAgIGNhc2UgQl9SRU1PVkVBTEw6CisgICAgICAgICAgICAgICAgdGVtcCA9IG5ldyBUcmVlU2V0KGIpOworICAgICAgICAgICAgICAgIHRlbXAucmVtb3ZlQWxsKGEpOworICAgICAgICAgICAgICAgIGEuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBhLmFkZEFsbCh0ZW1wKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgICAgIGNhc2UgTk9ORToKKyAgICAgICAgICAgICAgICBhLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZWxhdGlvbiAiICsgcmVsYXRpb24gKyAiIG91dCBvZiByYW5nZSIpOworICAgICAgICB9CisgICAgfSAgICAKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1RyaWUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1RyaWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjAxMTFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVHJpZS5qYXZhCkBAIC0wLDAgKzEsNDQxIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL1RyaWUuamF2YSx2ICQKKyogJERhdGU6IDIwMDIvMDkvMDYgMTk6MDQ6MDcgJAorKiAkUmV2aXNpb246IDEuOCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbDsKKworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVVRGMTY7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOworCisvKioKKyAqIDxwPkEgdHJpZSBpcyBhIGtpbmQgb2YgY29tcHJlc3NlZCwgc2VyaWFsaXphYmxlIHRhYmxlIG9mIHZhbHVlcyAKKyAqIGFzc29jaWF0ZWQgd2l0aCBVbmljb2RlIGNvZGUgcG9pbnRzICgwLi4weDEwZmZmZikuPC9wPgorICogPHA+VGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2YgYSB0cmllIGFuZCBwcm92aWRlcyBtZXRob2RzIAorICogdG8gPGI+cmV0cmlldmUgdGhlIG9mZnNldHMgdG8gdGhlIGFjdHVhbCBkYXRhPC9iPi48L3A+CisgKiA8cD5EYXRhIHdpbGwgYmUgdGhlIGZvcm0gb2YgYW4gYXJyYXkgb2YgYmFzaWMgdHlwZXMsIGNoYXIgb3IgaW50LjwvcD4KKyAqIDxwPlRoZSBhY3R1YWwgZGF0YSBmb3JtYXQgd2lsbCBoYXZlIHRvIGJlIHNwZWNpZmllZCBieSB0aGUgdXNlciBpbiB0aGUKKyAqIGlubmVyIHN0YXRpYyBpbnRlcmZhY2UgY29tLmlibS5pY3UuaW1wbC5UcmllLkRhdGFNYW5pcHVsYXRlLjwvcD4KKyAqIDxwPlRoaXMgdHJpZSBpbXBsZW1lbnRhdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIGdldHRpbmcgb2Zmc2V0IHdoaWxlIHdhbGtpbmcKKyAqIGZvcndhcmQgdGhyb3VnaCBhIFVURi0xNiBzdHJpbmcuCisgKiBUaGVyZWZvcmUsIHRoZSBzaW1wbGVzdCBhbmQgZmFzdGVzdCBhY2Nlc3MgbWFjcm9zIGFyZSB0aGUKKyAqIGZyb21MZWFkKCkgYW5kIGZyb21PZmZzZXRUcmFpbCgpIG1ldGhvZHMuCisgKiBUaGUgZnJvbUJNUCgpIG1ldGhvZCBhcmUgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZDsgdGhleSBnZXQgb2Zmc2V0cyBldmVuCisgKiBmb3IgbGVhZCBzdXJyb2dhdGUgY29kZXBvaW50cywgd2hpbGUgdGhlIGZyb21MZWFkKCkgbWV0aG9kIGdldCBzcGVjaWFsCisgKiAiZm9sZGVkIiBvZmZzZXRzIGZvciBsZWFkIHN1cnJvZ2F0ZSBjb2RlIHVuaXRzIGlmIHRoZXJlIGlzIHJlbGV2YW50IGRhdGEKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICogRnJvbSBzdWNoIGEgZm9sZGVkIG9mZnNldHMsIGFuIG9mZnNldCBuZWVkcyB0byBiZSBleHRyYWN0ZWQgdG8gc3VwcGx5CisgKiB0byB0aGUgZnJvbU9mZnNldFRyYWlsKCkgbWV0aG9kcy4KKyAqIFRvIGhhbmRsZSBzdWNoIHN1cHBsZW1lbnRhcnkgY29kZXBvaW50cywgc29tZSBvZmZzZXQgaW5mb3JtYXRpb24gYXJlIGtlcHQKKyAqIGluIHRoZSBkYXRhLjwvcD4KKyAqIDxwPk1ldGhvZHMgaW4gY29tLmlibS5pY3UuaW1wbC5UcmllLkRhdGFNYW5pcHVsYXRlIGFyZSBjYWxsZWQgdG8gcmV0cmlldmUgCisgKiB0aGF0IG9mZnNldCBmcm9tIHRoZSBmb2xkZWQgdmFsdWUgZm9yIHRoZSBsZWFkIHN1cnJvZ2F0ZSB1bml0LjwvcD4KKyAqIDxwPkZvciBleGFtcGxlcyBvZiB1c2UsIHNlZSBjb20uaWJtLmljdS5pbXBsLkNoYXJUcmllIG9yIAorICogY29tLmlibS5pY3UuaW1wbC5JbnRUcmllLjwvcD4KKyAqIEBhdXRob3Igc3lud2VlCisgKiBAc2VlIGNvbS5pYm0uaWN1LmltcGwuQ2hhclRyaWUKKyAqIEBzZWUgY29tLmlibS5pY3UuaW1wbC5JbnRUcmllCisgKiBAc2luY2UgcmVsZWFzZSAyLjEsIEphbiAwMSAyMDAyCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUcmllCit7CisgICAgLy8gcHVibGljIGNsYXNzIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIENoYXJhY3RlciBkYXRhIGluIGNvbS5pYm0uaW1wbC5UcmllIGhhdmUgZGlmZmVyZW50IHVzZXItc3BlY2lmaWVkIGZvcm1hdAorICAgICogZm9yIGRpZmZlcmVudCBwdXJwb3Nlcy4KKyAgICAqIFRoaXMgaW50ZXJmYWNlIHNwZWNpZmllcyBtZXRob2RzIHRvIGJlIGltcGxlbWVudGVkIGluIG9yZGVyIGZvcgorICAgICogY29tLmlibS5pbXBsLlRyaWUsIHRvIHN1cnJvZ2F0ZSBvZmZzZXQgaW5mb3JtYXRpb24gZW5jYXBzdWxhdGVkIHdpdGhpbiAKKyAgICAqIHRoZSBkYXRhLgorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgRGF0YU1hbmlwdWxhdGUKKyAgICB7CisgICAgICAgIC8qKgorICAgICAgICAqIENhbGxlZCBieSBjb20uaWJtLmljdS5pbXBsLlRyaWUgdG8gZXh0cmFjdCBmcm9tIGEgbGVhZCBzdXJyb2dhdGUncyAKKyAgICAgICAgKiBkYXRhCisgICAgICAgICogdGhlIGluZGV4IGFycmF5IG9mZnNldCBvZiB0aGUgaW5kZXhlcyBmb3IgdGhhdCBsZWFkIHN1cnJvZ2F0ZS4KKyAgICAgICAgKiBAcGFyYW0gdmFsdWUgZGF0YSB2YWx1ZSBmb3IgYSBzdXJyb2dhdGUgZnJvbSB0aGUgdHJpZSwgaW5jbHVkaW5nIHRoZQorICAgICAgICAqICAgICAgICBmb2xkaW5nIG9mZnNldAorICAgICAgICAqIEByZXR1cm4gZGF0YSBvZmZzZXQgb3IgMCBpZiB0aGVyZSBpcyBubyBkYXRhIGZvciB0aGUgbGVhZCBzdXJyb2dhdGUKKyAgICAgICAgKiBAZHJhZnQgMi4xCisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Rm9sZGluZ09mZnNldChpbnQgdmFsdWUpOyAKKyAgICB9CisgICAgCisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgdHJpZSBoYXMgYSBsaW5lYXIgbGF0aW4gMSBhcnJheQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHRyaWUgaGFzIGEgbGluZWFyIGxhdGluIDEgYXJyYXksIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzTGF0aW4xTGluZWFyKCkKKyAgICB7CisgICAgCXJldHVybiBtX2lzTGF0aW4xTGluZWFyXzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBhcmd1bWVudCBUcmllIGhhcyB0aGUgc2FtZSBkYXRhIGFzIHRoaXMgVHJpZS4KKyAgICAgKiBBdHRyaWJ1dGVzIGFyZSBjaGVja2VkIGJ1dCBub3QgdGhlIGluZGV4IGRhdGEuCisgICAgICogQHBhcmFtIG90aGVyIFRyaWUgdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IFRyaWUgaGFzIHRoZSBzYW1lIGRhdGEgYXMgdGhpcyBUcmllLCBmYWxzZQorICAgICAqICAgICAgICAgb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikgCisgICAgeworICAgICAgICBpZiAob3RoZXIgPT0gdGhpcykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBUcmllKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIFRyaWUgb3RoZXJ0cmllID0gKFRyaWUpb3RoZXI7CisgICAgICAgIHJldHVybiBtX2lzTGF0aW4xTGluZWFyXyA9PSBvdGhlcnRyaWUubV9pc0xhdGluMUxpbmVhcl8KKyAgICAgICAgICAgICAgICYmIG1fb3B0aW9uc18gPT0gb3RoZXJ0cmllLm1fb3B0aW9uc18KKyAgICAgICAgICAgICAgICYmIG1fZGF0YUxlbmd0aF8gPT0gb3RoZXJ0cmllLm1fZGF0YUxlbmd0aF8KKyAgICAgICAgICAgICAgICYmIEFycmF5cy5lcXVhbHMobV9pbmRleF8sIG90aGVydHJpZS5tX2luZGV4Xyk7CisgICAgfQorCisgICAgLy8gcHJvdGVjdGVkIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICogVHJpZSBjb25zdHJ1Y3RvciBmb3IgQ2hhclRyaWUgdXNlLgorICAgICogQHBhcmFtIGlucHV0U3RyZWFtIElDVSBkYXRhIGZpbGUgaW5wdXQgc3RyZWFtIHdoaWNoIGNvbnRhaW5zIHRoZQorICAgICogICAgICAgICAgICAgICAgICAgICAgICB0cmllCisgICAgKiBAcGFyYW0gZGF0YW1hbmlwdWxhdGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIHRvIHBhcnNlIHRoZSAKKyAgICAqICAgICAgICAgICAgICAgICAgICAgICB0cmllIGRhdGEKKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3duIHdoZW4gaW5wdXQgc3RyZWFtIGRvZXMgbm90IGhhdmUgdGhlCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IGhlYWRlci4KKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBUcmllKElucHV0U3RyZWFtIGlucHV0U3RyZWFtLCAKKyAgICAgICAgICAgICAgICAgICBEYXRhTWFuaXB1bGF0ZSAgZGF0YU1hbmlwdWxhdGUpIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgRGF0YUlucHV0U3RyZWFtIGlucHV0ID0gbmV3IERhdGFJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7CisgICAgICAgIC8vIE1hZ2ljIG51bWJlciB0byBhdXRoZW50aWNhdGUgdGhlIGRhdGEuCisgICAgICAgIGludCBzaWduYXR1cmUgPSBpbnB1dC5yZWFkSW50KCk7CisgICAgICAgIG1fb3B0aW9uc18gICAgPSBpbnB1dC5yZWFkSW50KCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNoZWNrSGVhZGVyKHNpZ25hdHVyZSkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklDVSBkYXRhIGZpbGUgZXJyb3I6IFRyaWUgaGVhZGVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCwgcGxlYXNlIGNoZWNrIGlmIHlvdSBoYXZlIHRoZSBtb3N0IHVwZGF0ZWQgSUNVIGRhdGEgZmlsZSIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2RhdGFNYW5pcHVsYXRlXyA9IGRhdGFNYW5pcHVsYXRlOworICAgICAgICBtX2lzTGF0aW4xTGluZWFyXyA9IChtX29wdGlvbnNfICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEVBREVSX09QVElPTlNfTEFUSU4xX0lTX0xJTkVBUl9NQVNLXykgIT0gMDsKKyAgICAgICAgbV9kYXRhT2Zmc2V0XyAgICAgPSBpbnB1dC5yZWFkSW50KCk7CisgICAgICAgIG1fZGF0YUxlbmd0aF8gICAgID0gaW5wdXQucmVhZEludCgpOworICAgICAgICB1bnNlcmlhbGl6ZShpbnB1dFN0cmVhbSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogVHJpZSBjb25zdHJ1Y3RvcgorICAgICogQHBhcmFtIGluZGV4IGFycmF5IHRvIGJlIHVzZWQgZm9yIGluZGV4CisgICAgKiBAcGFyYW0gb3B0aW9ucyB1c2VkIGJ5IHRoZSB0cmllCisgICAgKiBAcGFyYW0gZGF0YW1hbmlwdWxhdGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIHRvIHBhcnNlIHRoZSAKKyAgICAqICAgICAgICAgICAgICAgICAgICAgICB0cmllIGRhdGEKKyAgICAqIEBkcmFmdCAyLjIKKyAgICAqLworICAgIHByb3RlY3RlZCBUcmllKGNoYXIgaW5kZXhbXSwgaW50IG9wdGlvbnMsIERhdGFNYW5pcHVsYXRlIGRhdGFNYW5pcHVsYXRlKQorICAgIHsKKyAgICAgICAgbV9vcHRpb25zXyA9IG9wdGlvbnM7CisgICAgICAgIG1fZGF0YU1hbmlwdWxhdGVfID0gZGF0YU1hbmlwdWxhdGU7CisgICAgICAgIG1faXNMYXRpbjFMaW5lYXJfID0gKG1fb3B0aW9uc18gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIRUFERVJfT1BUSU9OU19MQVRJTjFfSVNfTElORUFSX01BU0tfKSAhPSAwOworICAgICAgICBtX2luZGV4XyA9IGluZGV4OworICAgIH0KKworCisgICAgLy8gcHJvdGVjdGVkIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICogU2hpZnQgc2l6ZSBmb3Igc2hpZnRpbmcgcmlnaHQgdGhlIGlucHV0IGluZGV4LiAxLi45CisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBJTkRFWF9TVEFHRV8xX1NISUZUXyA9IDU7CisgICAgLyoqCisgICAgKiBTaGlmdCBzaXplIGZvciBzaGlmdGluZyBsZWZ0IHRoZSBpbmRleCBhcnJheSB2YWx1ZXMuCisgICAgKiBJbmNyZWFzZXMgcG9zc2libGUgZGF0YSBzaXplIHdpdGggMTYtYml0IGluZGV4IHZhbHVlcyBhdCB0aGUgY29zdAorICAgICogb2YgY29tcGFjdGFiaWxpdHkuCisgICAgKiBUaGlzIHJlcXVpcmVzIGJsb2NrcyBvZiBzdGFnZSAyIGRhdGEgdG8gYmUgYWxpZ25lZCBieQorICAgICogREFUQV9HUkFOVUxBUklUWS4KKyAgICAqIDAuLklOREVYX1NUQUdFXzFfU0hJRlQKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IElOREVYX1NUQUdFXzJfU0hJRlRfID0gMjsKKyAgICAvKioKKyAgICAqIE1hc2sgZm9yIGdldHRpbmcgdGhlIGxvd2VyIGJpdHMgZnJvbSB0aGUgaW5wdXQgaW5kZXguCisgICAgKiBEQVRBX0JMT0NLX0xFTkdUSF8gLSAxLgorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgSU5ERVhfU1RBR0VfM19NQVNLXyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgSU5ERVhfU1RBR0VfMV9TSElGVF8pIC0gMTsKKyAgICAvKioKKyAgICAqIFN1cnJvZ2F0ZSBtYXNrIHRvIHVzZSB3aGVuIHNoaWZ0aW5nIG9mZnNldCB0byByZXRyaWV2ZSBzdXBwbGVtZW50YXJ5CisgICAgKiB2YWx1ZXMKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFNVUlJPR0FURV9NQVNLXyA9IDB4M0ZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAqIEluZGV4IG9yIFVURjE2IGNoYXJhY3RlcnMKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBjaGFyIG1faW5kZXhfW107CisgICAgLyoqCisgICAgKiBJbnRlcm5hbCBUcmllVmFsdWUgd2hpY2ggaGFuZGxlcyB0aGUgcGFyc2luZyBvZiB0aGUgZGF0YSB2YWx1ZS4KKyAgICAqIFRoaXMgY2xhc3MgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgdGhlIHVzZXIKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBEYXRhTWFuaXB1bGF0ZSBtX2RhdGFNYW5pcHVsYXRlXzsKKyAgICAvKioKKyAgICAqIFN0YXJ0IGluZGV4IG9mIHRoZSBkYXRhIHBvcnRpb24gb2YgdGhlIHRyaWUuIENoYXJUcmllIGNvbWJpbmVzIAorICAgICogaW5kZXggYW5kIGRhdGEgaW50byBhIGNoYXIgYXJyYXksIHNvIHRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgCisgICAgKiBpbml0aWFsIG9mZnNldCB0byB0aGUgZGF0YSBwb3J0aW9uLgorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIGludCBtX2RhdGFPZmZzZXRfOworICAgIC8qKgorICAgICogTGVuZ3RoIG9mIHRoZSBkYXRhIGFycmF5IAorICAgICovCisgICAgcHJvdGVjdGVkIGludCBtX2RhdGFMZW5ndGhfOworICAgIAorICAgIC8vIHByb3RlY3RlZCBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIG9mZnNldCB0byB0aGUgZGF0YSB3aGljaCB0aGUgc3Vycm9nYXRlIHBhaXIgcG9pbnRzIHRvLgorICAgICogQHBhcmFtIGxlYWQgbGVhZCBzdXJyb2dhdGUKKyAgICAqIEBwYXJhbSB0cmFpbCB0cmFpbGluZyBzdXJyb2dhdGUKKyAgICAqIEByZXR1cm4gb2Zmc2V0IHRvIGRhdGEKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgZ2V0U3Vycm9nYXRlT2Zmc2V0KGNoYXIgbGVhZCwgY2hhciB0cmFpbCk7CisgICAgCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCB0aGUgYXJndW1lbnQgaW5kZXgKKyAgICAqIEBwYXJhbSBpbmRleCB2YWx1ZSBhdCBpbmRleCB3aWxsIGJlIHJldHJpZXZlZAorICAgICogQHJldHVybiAzMiBiaXQgdmFsdWUgCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGdldFZhbHVlKGludCBpbmRleCk7CisKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZQorICAgICogQHJldHVybiAzMiBiaXQgdmFsdWUgCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGdldEluaXRpYWxWYWx1ZSgpOworICAgIAorICAgIC8qKgorICAgICogR2V0cyB0aGUgb2Zmc2V0IHRvIHRoZSBkYXRhIHdoaWNoIHRoZSBpbmRleCBjaCBhZnRlciB2YXJpYWJsZSBvZmZzZXQKKyAgICAqIHBvaW50cyB0by4KKyAgICAqIE5vdGUgZm9yIGxvY2F0aW5nIGEgbm9uLXN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIGRhdGEgb2Zmc2V0LCBjYWxsaW5nCisgICAgKiA8cD4KKyAgICAqIGdldFJhd09mZnNldCgwLCBjaCk7CisgICAgKiA8L3A+CisgICAgKiB3aWxsIGRvLiBPdGhlcndpc2UgaWYgaXQgaXMgYSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlciBmb3JtZWQgYnkKKyAgICAqIHN1cnJvZ2F0ZXMgbGVhZCBhbmQgdHJhaWwuIFRoZW4gd2Ugd291bGQgaGF2ZSB0byBjYWxsIGdldFJhd09mZnNldCgpCisgICAgKiB3aXRoIGdldEZvbGRpbmdJbmRleE9mZnNldCgpLiBTZWUgZ2V0U3Vycm9nYXRlT2Zmc2V0KCkuCisgICAgKiBAcGFyYW0gb2Zmc2V0IGluZGV4IG9mZnNldCB3aGljaCBjaCBpcyB0byBzdGFydCBmcm9tCisgICAgKiBAcGFyYW0gY2ggaW5kZXggdG8gYmUgdXNlZCBhZnRlciBvZmZzZXQKKyAgICAqIEByZXR1cm4gb2Zmc2V0IHRvIHRoZSBkYXRhCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldFJhd09mZnNldChpbnQgb2Zmc2V0LCBjaGFyIGNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChtX2luZGV4X1tvZmZzZXQgKyAoY2ggPj4gSU5ERVhfU1RBR0VfMV9TSElGVF8pXSA8PAorICAgICAgICAgICAgICAgIElOREVYX1NUQUdFXzJfU0hJRlRfKSArIChjaCAmIElOREVYX1NUQUdFXzNfTUFTS18pOworICAgIH0KKworICAgIC8qKgorICAgICogR2V0cyB0aGUgb2Zmc2V0IHRvIGRhdGEgd2hpY2ggdGhlIEJNUCBjaGFyYWN0ZXIgcG9pbnRzIHRvCisgICAgKiBUcmVhdHMgYSBsZWFkIHN1cnJvZ2F0ZSBhcyBhIG5vcm1hbCBjb2RlIHBvaW50LgorICAgICogQHBhcmFtIGNoIEJNUCBjaGFyYWN0ZXIKKyAgICAqIEByZXR1cm4gb2Zmc2V0IHRvIGRhdGEKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0Qk1QT2Zmc2V0KGNoYXIgY2gpCisgICAgeworICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShjaCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IExFQURfSU5ERVhfT0ZGU0VUXzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2V0UmF3T2Zmc2V0KG9mZnNldCwgY2gpOworICAgIH0KKworICAgIC8qKgorICAgICogR2V0cyB0aGUgb2Zmc2V0IHRvIHRoZSBkYXRhIHdoaWNoIHRoaXMgbGVhZCBzdXJyb2dhdGUgY2hhcmFjdGVyIHBvaW50cworICAgICogdG8uCisgICAgKiBEYXRhIGF0IHRoZSByZXR1cm5lZCBvZmZzZXQgbWF5IGNvbnRhaW4gZm9sZGluZyBvZmZzZXQgaW5mb3JtYXRpb24gZm9yCisgICAgKiB0aGUgbmV4dCB0cmFpbGluZyBzdXJyb2dhdGUgY2hhcmFjdGVyLgorICAgICogQHBhcmFtIGNoIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3RlcgorICAgICogQHJldHVybiBvZmZzZXQgdG8gZGF0YQorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRMZWFkT2Zmc2V0KGNoYXIgY2gpCisgICAgeworICAgICAgIHJldHVybiBnZXRSYXdPZmZzZXQoMCwgY2gpOworICAgIH0KKworICAgIC8qKgorICAgICogSW50ZXJuYWwgdHJpZSBnZXR0ZXIgZnJvbSBhIGNvZGUgcG9pbnQuCisgICAgKiBDb3VsZCBiZSBmYXN0ZXIoPykgYnV0IGxvbmdlciB3aXRoCisgICAgKiAgIGlmKChjMzIpPD0weGQ3ZmYpIHsgKHJlc3VsdCk9X1RSSUVfR0VUX1JBVyh0cmllLCBkYXRhLCAwLCBjMzIpOyB9CisgICAgKiBHZXRzIHRoZSBvZmZzZXQgdG8gZGF0YSB3aGljaCB0aGUgY29kZXBvaW50IHBvaW50cyB0bworICAgICogQHBhcmFtIGNoIGNvZGVwb2ludAorICAgICogQHJldHVybiBvZmZzZXQgdG8gZGF0YQorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRDb2RlUG9pbnRPZmZzZXQoaW50IGNoKQorICAgIHsKKyAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNCTVAoY2gpKSB7CisgICAgICAgICAgICAvLyBCTVAgY29kZXBvaW50CisgICAgICAgICAgICByZXR1cm4gZ2V0Qk1QT2Zmc2V0KChjaGFyKWNoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2ggPD0gVUNoYXJhY3Rlci5NQVhfVkFMVUUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgbGVhZCA9IFVURjE2LmdldExlYWRTdXJyb2dhdGUoY2gpOworICAgICAgICAgICAgLy8gbG9vayBhdCB0aGUgY29uc3RydWN0aW9uIG9mIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycworICAgICAgICAgICAgLy8gdHJhaWwgZm9ybXMgdGhlIGVuZHMgb2YgaXQuCisgICAgICAgICAgICByZXR1cm4gZ2V0U3Vycm9nYXRlT2Zmc2V0KGxlYWQsIChjaGFyKShjaCAmIFNVUlJPR0FURV9NQVNLXykpOworICAgICAgICB9CisgICAgICAgIC8vIHJldHVybiAtMSBpZiB0aGVyZSBpcyBhbiBlcnJvciwgaW4gdGhpcyBjYXNlIHdlIHJldHVybiB0aGUgZGVmYXVsdAorICAgICAgICAvLyB2YWx1ZTogbV9pbml0aWFsVmFsdWVfCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIDxwPlBhcnNlcyB0aGUgaW5wdXRzdHJlYW0gYW5kIGNyZWF0ZXMgdGhlIHRyaWUgaW5kZXggd2l0aCBpdC48L3A+CisgICAgKiA8cD5UaGlzIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSBjaGlsZCBjbGFzc2VzLgorICAgICogQHBhcmFtIGlucHV0U3RyZWFtIGlucHV0IHN0cmVhbSBjb250YWluaW5nIHRoZSB0cmllIGluZm9ybWF0aW9uCisgICAgKiBAZXhjZXB0aW9uIElPRXhjZXB0aW9uIHRocm93biB3aGVuIGRhdGEgcmVhZGluZyBmYWlscy4KKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIHVuc2VyaWFsaXplKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIC8vaW5kZXhMZW5ndGggaXMgYSBtdWx0aXBsZSBvZiAxMDI0ID4+IElOREVYX1NUQUdFXzJfU0hJRlRfCisgICAgICAgIG1faW5kZXhfICAgICAgICAgICAgICA9IG5ldyBjaGFyW21fZGF0YU9mZnNldF9dOworICAgICAgICBEYXRhSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgRGF0YUlucHV0U3RyZWFtKGlucHV0U3RyZWFtKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2RhdGFPZmZzZXRfOyBpICsrKSB7CisgICAgICAgICAgICAgbV9pbmRleF9baV0gPSBpbnB1dC5yZWFkQ2hhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgaXMgYSAzMiBiaXQgdHJpZQorICAgICogQHJldHVybiB0cnVlIGlmIG9wdGlvbnMgc3BlY2lmaWVzIHRoaXMgaXMgYSAzMiBiaXQgdHJpZQorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gaXNJbnRUcmllKCkKKyAgICB7CisgICAgICAgIHJldHVybiAobV9vcHRpb25zXyAmIEhFQURFUl9PUFRJT05TX0RBVEFfSVNfMzJfQklUXykgIT0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIERldGVybWluZXMgaWYgdGhpcyBpcyBhIDE2IGJpdCB0cmllCisgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpcyBhIDE2IGJpdCB0cmllCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBpc0NoYXJUcmllKCkKKyAgICB7CisgICAgICAgIHJldHVybiAobV9vcHRpb25zXyAmIEhFQURFUl9PUFRJT05TX0RBVEFfSVNfMzJfQklUXykgPT0gMDsKKyAgICB9CisKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgKiBMZWFkIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cycgaW5kZXggZGlzcGxhY2VtZW50IGluIHRoZSBpbmRleCBhcnJheS4KKyAgICAqIDB4MTAwMDAtMHhkODAwPTB4MjgwMAorICAgICogMHgyODAwID4+IElOREVYX1NUQUdFXzFfU0hJRlRfCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEVBRF9JTkRFWF9PRkZTRVRfID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMCA+PiA1OworICAgIC8qKgorICAgICogU2lnbmF0dXJlIGluZGV4CisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVBREVSX1NJR05BVFVSRV9JTkRFWF8gPSAwOworICAgIC8qKgorICAgICogT3B0aW9ucyBpbmRleAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFQURFUl9PUFRJT05TX0lOREVYXyA9IDEgPDwgMTsKKyAgICAvKioKKyAgICAqIEluZGV4IGxlbmd0aCBpbmRleAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFQURFUl9JTkRFWF9MRU5HVEhfSU5ERVhfID0gMiA8PCAxOworICAgIC8qKgorICAgICogRGF0YSBsZW5ndGggaW5kZXgKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUFERVJfREFUQV9MRU5HVEhfSU5ERVhfID0gMyA8PCAxOworICAgIC8qKgorICAgICogU2l6ZSBvZiBoZWFkZXIKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUFERVJfTEVOR1RIXyA9IDQgPDwgMTsKKyAgICAvKioKKyAgICAqIExhdGluIDEgb3B0aW9uIG1hc2sKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUFERVJfT1BUSU9OU19MQVRJTjFfSVNfTElORUFSX01BU0tfID0gMHgyMDA7CisgICAgLyoqCisgICAgKiBDb25zdGFudCBudW1iZXIgdG8gYXV0aGVudGljYXRlIHRoZSBieXRlIGJsb2NrCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVBREVSX1NJR05BVFVSRV8gPSAweDU0NzI2OTY1OworICAgIC8qKgorICAgICogSGVhZGVyIG9wdGlvbiBmb3JtYXR0aW5nCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVBREVSX09QVElPTlNfU0hJRlRfTUFTS18gPSAweEY7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFQURFUl9PUFRJT05TX0lOREVYX1NISUZUXyA9IDQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFQURFUl9PUFRJT05TX0RBVEFfSVNfMzJfQklUXyA9IDB4MTAwOworICAgIAorICAgIC8qKgorICAgICogRmxhZyBpbmRpY2F0b3IgZm9yIExhdGluIHF1aWNrIGFjY2VzcyBkYXRhIGJsb2NrCisgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbV9pc0xhdGluMUxpbmVhcl87CisgICAgCisgICAgLyoqCisgICAgKiA8cD5UcmllIG9wdGlvbnMgZmllbGQuPC9wPgorICAgICogPHA+b3B0aW9ucyBiaXQgZmllbGQ6PGJyPgorICAgICogOSAgMSA9IExhdGluLTEgZGF0YSBpcyBzdG9yZWQgbGluZWFybHkgYXQgZGF0YSArIERBVEFfQkxPQ0tfTEVOR1RIPGJyPgorICAgICogOCAgMCA9IDE2LWJpdCBkYXRhLCAxPTMyLWJpdCBkYXRhPGJyPgorICAgICogNy4uNCAgSU5ERVhfU1RBR0VfMV9TSElGVCAgIC8vIDAuLklOREVYX1NUQUdFXzJfU0hJRlQ8YnI+CisgICAgKiAzLi4wICBJTkRFWF9TVEFHRV8yX1NISUZUICAgLy8gMS4uOTxicj4KKyAgICAqLworICAgIHByaXZhdGUgaW50IG1fb3B0aW9uc187CisgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIEF1dGhlbnRpY2F0ZXMgcmF3IGRhdGEgaGVhZGVyLgorICAgICogQ2hlY2tpbmcgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiwgc2lnbmF0dXJlIGFuZCBvcHRpb25zLgorICAgICogQHBhcmFtIHJhd2RhdGEgYXJyYXkgb2YgY2hhciBkYXRhIHRvIGJlIGNoZWNrZWQKKyAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgaGVhZGVyIGlzIGF1dGhlbnRpY2F0ZWQgdmFsaWQKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjaGVja0hlYWRlcihpbnQgc2lnbmF0dXJlKQorICAgIHsKKyAgICAgICAgLy8gY2hlY2sgdGhlIHNpZ25hdHVyZQorICAgICAgICAvLyBUcmllIGluIGJpZy1lbmRpYW4gVVMtQVNDSUkgKDB4NTQ3MjY5NjUpLgorICAgICAgICAvLyBNYWdpYyBudW1iZXIgdG8gYXV0aGVudGljYXRlIHRoZSBkYXRhLgorICAgICAgICBpZiAoc2lnbmF0dXJlICE9IEhFQURFUl9TSUdOQVRVUkVfKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG1fb3B0aW9uc18gJiBIRUFERVJfT1BUSU9OU19TSElGVF9NQVNLXykgIT0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5ERVhfU1RBR0VfMV9TSElGVF8gfHwKKyAgICAgICAgICAgICgobV9vcHRpb25zXyA+PiBIRUFERVJfT1BUSU9OU19JTkRFWF9TSElGVF8pICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhFQURFUl9PUFRJT05TX1NISUZUX01BU0tfKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IElOREVYX1NUQUdFXzJfU0hJRlRfKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1RyaWVCdWlsZGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9UcmllQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2ZmY4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9UcmllQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMjYyIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL1RyaWVCdWlsZGVyLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8wOS8wNiAwMTo1MDo0MyAkIAorKiAkUmV2aXNpb246IDEuOCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCisvKioKKyAqIEJ1aWxkZXIgbGFzcyB0byBtYW5pcHVsYXRlIGFuZCBnZW5lcmF0ZSBhIHRyaWUuCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgSUNVIGRhdGEgaW4gcHJpbWl0aXZlIHR5cGVzLgorICogUHJvdmlkZXMgYSBjb21wYWN0IHdheSB0byBzdG9yZSBpbmZvcm1hdGlvbiB0aGF0IGlzIGluZGV4ZWQgYnkgVW5pY29kZSAKKyAqIHZhbHVlcywgc3VjaCBhcyBjaGFyYWN0ZXIgcHJvcGVydGllcywgdHlwZXMsIGtleWJvYXJkIHZhbHVlcywgZXRjLiBUaGlzIGlzIAorICogdmVyeSB1c2VmdWwgd2hlbiB5b3UgaGF2ZSBhIGJsb2NrIG9mIFVuaWNvZGUgZGF0YSB0aGF0IGNvbnRhaW5zIHNpZ25pZmljYW50IAorICogdmFsdWVzIHdoaWxlIHRoZSByZXN0IG9mIHRoZSBVbmljb2RlIGRhdGEgaXMgdW51c2VkIGluIHRoZSBhcHBsaWNhdGlvbiBvciAKKyAqIHdoZW4geW91IGhhdmUgYSBsb3Qgb2YgcmVkdW5kYW5jZSwgc3VjaCBhcyB3aGVyZSBhbGwgMjEsMDAwIEhhbiBpZGVvZ3JhcGhzIAorICogaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gIEhvd2V2ZXIsIGxvb2t1cCBpcyBtdWNoIGZhc3RlciB0aGFuIGEgaGFzaCB0YWJsZS4KKyAqIEEgdHJpZSBvZiBhbnkgcHJpbWl0aXZlIGRhdGEgdHlwZSBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorICogPFVMIHR5cGUgPSByb3VuZD4KKyAqICAgICA8TEk+RmFzdCBhY2Nlc3Mgb2YgdGhlIGluZGV4ZWQgdmFsdWVzLgorICogICAgIDxMST5TbWFsbGVyIG1lbW9yeSBmb290cHJpbnQuCisgKiA8L1VMPgorICogVGhpcyBpcyBhIGRpcmVjdCBwb3J0IGZyb20gdGhlIElDVTRDIHZlcnNpb24KKyAqIEB2ZXJzaW9uICAgICAgICAgICAgJFJldmlzaW9uOiAxLjggJAorICogQGF1dGhvciAgICAgICAgICAgICBTeW4gV2VlIFF1ZWsKKyAqLworcHVibGljIGNsYXNzIFRyaWVCdWlsZGVyCit7CisJLy8gcHVibGljIGRhdGEgbWVtYmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKiogCisJICogTnVtYmVyIG9mIGRhdGEgdmFsdWVzIGluIGEgc3RhZ2UgMiAoZGF0YSBhcnJheSkgYmxvY2suIDIsIDQsIDgsIC4uLCAKKwkgKiAweDIwMCAKKwkgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBX0JMT0NLX0xFTkdUSF8gPSAxIDw8IFRyaWUuSU5ERVhfU1RBR0VfMV9TSElGVF87CisgICAgCisJLy8gcHVibGljIGNsYXNzIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIENoYXJhY3RlciBkYXRhIGluIGNvbS5pYm0uaW1wbC5UcmllIGhhdmUgZGlmZmVyZW50IHVzZXItc3BlY2lmaWVkIGZvcm1hdAorICAgICogZm9yIGRpZmZlcmVudCBwdXJwb3Nlcy4KKyAgICAqIFRoaXMgaW50ZXJmYWNlIHNwZWNpZmllcyBtZXRob2RzIHRvIGJlIGltcGxlbWVudGVkIGluIG9yZGVyIGZvcgorICAgICogY29tLmlibS5pbXBsLlRyaWUsIHRvIHN1cnJvZ2F0ZSBvZmZzZXQgaW5mb3JtYXRpb24gZW5jYXBzdWxhdGVkIHdpdGhpbiAKKyAgICAqIHRoZSBkYXRhLgorICAgICogQGRyYWZ0IDIuMgorICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgRGF0YU1hbmlwdWxhdGUKKyAgICB7CisgICAgICAgIC8qKgorIAkJICogQnVpbGQtdGltZSB0cmllIGNhbGxiYWNrIGZ1bmN0aW9uLCB1c2VkIHdpdGggc2VyaWFsaXplKCkuCisgCSAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSBsZWFkIHN1cnJvZ2F0ZSdzIHZhbHVlIGluY2x1ZGluZyBhIAorIAkgICAgICogZm9sZGluZyBvZmZzZXQgZnJvbSB0aGUgMTAyNCBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIAorIAkgICAgICogW3N0YXJ0Li5zdGFydCsxMDI0WyAuIAorIAkgICAgICogSXQgaXMgVSsxMDAwMCA8PSBzdGFydCA8PSBVKzEwZmMwMCBhbmQgKHN0YXJ0JjB4M2ZmKT09MC4KKyAJICAgICAqIFRoZSBmb2xkaW5nIG9mZnNldCBpcyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLiAKKyAJICAgICAqIEl0IGlzIG9mZnNldD1VVFJJRV9CTVBfSU5ERVhfTEVOR1RIK24qVVRSSUVfU1VSUk9HQVRFX0JMT0NLX0NPVU5UIAorIAkgICAgICogd2l0aCBuPTAuLjEwMjMuIAorIAkgICAgICogSW5zdGVhZCBvZiB0aGUgb2Zmc2V0IGl0c2VsZiwgbiBjYW4gYmUgc3RvcmVkIGluIDEwIGJpdHMgLSBvciBmZXdlciAKKyAJICAgICAqIGlmIGl0IGNhbiBiZSBhc3N1bWVkIHRoYXQgZmV3IGxlYWQgc3Vycm9nYXRlcyBoYXZlIGFzc29jaWF0ZWQgZGF0YS4KKyAJICAgICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlCisgCSAgICAgKiAgLSBub3QgemVybyBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyByZWxldmFudCBkYXRhIGZvciB0aGUgCisgCSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgMTAyNCBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzCisgCSAgICAgKiAgLSBzdWNoIHRoYXQgVVRyaWUuZ2V0Rm9sZGluZ09mZnNldChVTmV3VHJpZUdldEZvbGRlZFZhbHVlKC4uLiwgCisgCSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQpKT09b2Zmc2V0CisgICAgICAgICAqIEByZXR1cm4gYSBmb2xkZWQgdmFsdWUsIG9yIDAgaWYgdGhlcmUgaXMgbm8gcmVsZXZhbnQgZGF0YSBmb3IgdGhlIAorICAgICAgICAgKiAgICAgICAgIGxlYWQgc3Vycm9nYXRlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBnZXRGb2xkZWRWYWx1ZShpbnQgc3RhcnQsIGludCBvZmZzZXQpOyAKKyAgICB9CisgICAgCisJLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGNoYXJhY3RlciBiZWxvbmdzIHRvIGEgemVybyBibG9jayBpbiB0aGUgdHJpZQorICAgICAqIEBwYXJhbSBjaCBjb2RlcG9pbnQgd2hpY2ggZGF0YSBpcyB0byBiZSByZXRyaWV2ZWQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgY2ggaXMgaW4gdGhlIHplcm8gYmxvY2sKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0luWmVyb0Jsb2NrKGludCBjaCkgCisgICAgeworICAgICAgICAvLyB2YWxpZCwgdW5jb21wYWN0ZWQgdHJpZSBhbmQgdmFsaWQgYz8KKyAgICAgICAgaWYgKG1faXNDb21wYWN0ZWRfIHx8IGNoID4gVUNoYXJhY3Rlci5NQVhfVkFMVUUgCisgICAgICAgICAgICB8fCBjaCA8IFVDaGFyYWN0ZXIuTUlOX1ZBTFVFKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICByZXR1cm4gbV9pbmRleF9bY2ggPj4gU0hJRlRfXSA9PSAwOworICAgIH0KKyAgICAKKyAgICAvLyBwYWNrYWdlIHByaXZhdGUgbWV0aG9kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisJIC8vIHByb3RlY3RlZCBkYXRhIG1lbWJlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgCisJLyoqCisJICogSW5kZXggdmFsdWVzIGF0IGJ1aWxkLXRpbWUgYXJlIDMyIGJpdHMgd2lkZSBmb3IgZWFzaWVyIHByb2Nlc3NpbmcuCisJICogQml0IDMxIGlzIHNldCBpZiB0aGUgZGF0YSBibG9jayBpcyB1c2VkIGJ5IG11bHRpcGxlIGluZGV4IHZhbHVlcyAKKwkgKiAoZnJvbSBzZXRSYW5nZSgpKS4KKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG1faW5kZXhfW107CisJcHJvdGVjdGVkIGludCBtX2luZGV4TGVuZ3RoXzsKKwlwcm90ZWN0ZWQgaW50IG1fZGF0YUNhcGFjaXR5XzsgCisJcHJvdGVjdGVkIGludCBtX2RhdGFMZW5ndGhfOworCXByb3RlY3RlZCBib29sZWFuIG1faXNMYXRpbjFMaW5lYXJfOworCXByb3RlY3RlZCBib29sZWFuIG1faXNDb21wYWN0ZWRfOworICAgIC8qKgorCSAqIE1hcCBvZiBhZGp1c3RlZCBpbmRleGVzLCB1c2VkIGluIHV0cmllX2NvbXBhY3QoKS4KKwkgKiBNYXBzIGZyb20gb3JpZ2luYWwgaW5kZXhlcyB0byBuZXcgb25lcy4KKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG1fbWFwX1tdOworCQorCS8qKgorCSAqIFNoaWZ0IHNpemUgZm9yIHNoaWZ0aW5nIHJpZ2h0IHRoZSBpbnB1dCBpbmRleC4gMS4uOSAKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBTSElGVF8gPSBUcmllLklOREVYX1NUQUdFXzFfU0hJRlRfOworCS8qKgorICAgICAqIExlbmd0aCBvZiB0aGUgaW5kZXggKHN0YWdlIDEpIGFycmF5IGJlZm9yZSBmb2xkaW5nLgorICAgICAqIE1heGltdW0gbnVtYmVyIG9mIFVuaWNvZGUgY29kZSBwb2ludHMgKDB4MTEwMDAwKSBzaGlmdGVkIHJpZ2h0IGJ5IAorICAgICAqIFNISUZULgorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BWF9JTkRFWF9MRU5HVEhfID0gKDB4MTEwMDAwID4+IFNISUZUXyk7CisgICAgLyoqIAorICAgICAqIExlbmd0aCBvZiB0aGUgQk1QIHBvcnRpb24gb2YgdGhlIGluZGV4IChzdGFnZSAxKSBhcnJheS4gCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgQk1QX0lOREVYX0xFTkdUSF8gPSAweDEwMDAwID4+IFNISUZUXzsJCisgICAgLyoqCisgICAgICogTnVtYmVyIG9mIGluZGV4IChzdGFnZSAxKSBlbnRyaWVzIHBlciBsZWFkIHN1cnJvZ2F0ZS4KKyAgICAgKiBTYW1lIGFzIG51bWJlciBvZiBpbmRleGUgZW50cmllcyBmb3IgMTAyNCB0cmFpbCBzdXJyb2dhdGVzLAorICAgICAqID09MHg0MDA+PlVUUklFX1NISUZUCisgICAgICogMTAgLSBTSElGVCA9PSBOdW1iZXIgb2YgYml0cyBvZiBhIHRyYWlsIHN1cnJvZ2F0ZSB0aGF0IGFyZSB1c2VkIGluIAorICAgICAqICAgICAgICAgICAgICAgaW5kZXggdGFibGUgbG9va3Vwcy4gCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgU1VSUk9HQVRFX0JMT0NLX0NPVU5UXyA9IDEgPDwgKDEwIC0gU0hJRlRfKTsKKwkvKioKKyAgICAqIE1hc2sgZm9yIGdldHRpbmcgdGhlIGxvd2VyIGJpdHMgZnJvbSB0aGUgaW5wdXQgaW5kZXguCisgICAgKiBEQVRBX0JMT0NLX0xFTkdUSF8gLSAxLgorICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFTS18gPSBUcmllLklOREVYX1NUQUdFXzNfTUFTS187CisgICAgLyoqCisgICAgICogU2hpZnQgc2l6ZSBmb3Igc2hpZnRpbmcgbGVmdCB0aGUgaW5kZXggYXJyYXkgdmFsdWVzLgorICAgICAqIEluY3JlYXNlcyBwb3NzaWJsZSBkYXRhIHNpemUgd2l0aCAxNi1iaXQgaW5kZXggdmFsdWVzIGF0IHRoZSBjb3N0CisgICAgICogb2YgY29tcGFjdGFiaWxpdHkuCisgICAgICogVGhpcyByZXF1aXJlcyBibG9ja3Mgb2Ygc3RhZ2UgMiBkYXRhIHRvIGJlIGFsaWduZWQgYnkgVVRSSUVfREFUQV9HUkFOVUxBUklUWS4KKyAgICAgKiAwLi5VVFJJRV9TSElGVAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IElOREVYX1NISUZUXyA9IFRyaWUuSU5ERVhfU1RBR0VfMl9TSElGVF87CisgICAgLyoqCisJICogTWF4aW11bSBsZW5ndGggb2YgdGhlIHJ1bnRpbWUgZGF0YSAoc3RhZ2UgMikgYXJyYXkuCisJICogTGltaXRlZCBieSAxNi1iaXQgaW5kZXggdmFsdWVzIHRoYXQgYXJlIGxlZnQtc2hpZnRlZCBieSBJTkRFWF9TSElGVF8uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0RBVEFfTEVOR1RIXyA9ICgweDEwMDAwIDw8IElOREVYX1NISUZUXyk7CisJLyoqCisgICAgICogU2hpZnRpbmcgdG8gcG9zaXRpb24gdGhlIGluZGV4IHZhbHVlIGluIG9wdGlvbnMKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBPUFRJT05TX0lOREVYX1NISUZUXyA9IDQ7CisgICAgLyoqIAorICAgICAqIElmIHNldCwgdGhlbiB0aGUgZGF0YSAoc3RhZ2UgMikgYXJyYXkgaXMgMzIgYml0cyB3aWRlLiAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBPUFRJT05TX0RBVEFfSVNfMzJfQklUXyA9IDB4MTAwOworICAgIC8qKgorICAgICAqIElmIHNldCwgdGhlbiBMYXRpbi0xIGRhdGEgKGZvciBVKzAwMDAuLlUrMDBmZikgaXMgc3RvcmVkIGluIHRoZSBkYXRhIAorICAgICAqIChzdGFnZSAyKSBhcnJheSBhcyBhIHNpbXBsZSwgbGluZWFyIGFycmF5IGF0IGRhdGEgKyBEQVRBX0JMT0NLX0xFTkdUSC4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBPUFRJT05TX0xBVElOMV9JU19MSU5FQVJfID0gMHgyMDA7CisgICAgLyoqIAorICAgICAqIFRoZSBhbGlnbm1lbnQgc2l6ZSBvZiBhIHN0YWdlIDIgZGF0YSBibG9jay4gQWxzbyB0aGUgZ3JhbnVsYXJpdHkgZm9yIAorICAgICAqIGNvbXBhY3Rpb24uIAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IERBVEFfR1JBTlVMQVJJVFlfID0gMSA8PCBJTkRFWF9TSElGVF87CisgICAgCisgICAgLy8gcHJvdGVjdGVkIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICBwcm90ZWN0ZWQgVHJpZUJ1aWxkZXIoKQorCXsKKwkJbV9pbmRleF8gPSBuZXcgaW50W01BWF9JTkRFWF9MRU5HVEhfXTsKKwkJbV9tYXBfID0gbmV3IGludFtNQVhfQlVJTERfVElNRV9EQVRBX0xFTkdUSF8gPj4gU0hJRlRfXTsKKwkgICAgbV9pc0xhdGluMUxpbmVhcl8gPSBmYWxzZTsKKwkgICAgbV9pc0NvbXBhY3RlZF8gPSBmYWxzZTsKKwkgICAgbV9pbmRleExlbmd0aF8gPSBNQVhfSU5ERVhfTEVOR1RIXzsKKwl9CisgICAgICAgIAorICAgIHByb3RlY3RlZCBUcmllQnVpbGRlcihUcmllQnVpbGRlciB0YWJsZSkKKyAgICB7CisgICAgICAgIG1faW5kZXhfID0gbmV3IGludFtNQVhfSU5ERVhfTEVOR1RIX107CisgICAgICAgIG1faW5kZXhMZW5ndGhfID0gdGFibGUubV9pbmRleExlbmd0aF87CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGFibGUubV9pbmRleF8sIDAsIG1faW5kZXhfLCAwLCBtX2luZGV4TGVuZ3RoXyk7CisgICAgICAgIG1fZGF0YUNhcGFjaXR5XyA9IHRhYmxlLm1fZGF0YUNhcGFjaXR5XzsKKyAgICAgICAgbV9kYXRhTGVuZ3RoXyA9IHRhYmxlLm1fZGF0YUxlbmd0aF87CisgICAgICAgIG1fbWFwXyA9IG5ldyBpbnRbdGFibGUubV9tYXBfLmxlbmd0aF07CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGFibGUubV9tYXBfLCAwLCBtX21hcF8sIDAsIG1fbWFwXy5sZW5ndGgpOworICAgICAgICBtX2lzTGF0aW4xTGluZWFyXyA9IHRhYmxlLm1faXNMYXRpbjFMaW5lYXJfOworICAgICAgICBtX2lzQ29tcGFjdGVkXyA9IHRhYmxlLm1faXNDb21wYWN0ZWRfOworICAgIH0KKyAgICAgICAgCisgICAgLy8gcHJvdGVjdGVkIGRhdGEgbWVtYmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXQgYSB2YWx1ZSBpbiB0aGUgdHJpZSBpbmRleCBtYXAgdG8gaW5kaWNhdGUgd2hpY2ggZGF0YSBibG9jaworICAgICAqIGlzIHJlZmVyZW5jZWQgYW5kIHdoaWNoIG9uZSBpcyBub3QuCisgICAgICogdXRyaWVfY29tcGFjdCgpIHdpbGwgcmVtb3ZlIGRhdGEgYmxvY2tzIHRoYXQgYXJlIG5vdCB1c2VkIGF0IGFsbC4KKyAgICAgKiBTZXQKKyAgICAgKiAtIDAgaWYgaXQgaXMgdXNlZAorICAgICAqIC0gLTEgaWYgaXQgaXMgbm90IHVzZWQKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBmaW5kVW51c2VkQmxvY2tzKCkgCisgICAgeworICAgICAgICAvLyBmaWxsIHRoZSBlbnRpcmUgbWFwIHdpdGggIm5vdCB1c2VkIiAKKyAgICAgICAgQXJyYXlzLmZpbGwobV9tYXBfLCAweGZmKTsKKyAgICAKKyAgICAgICAgLy8gbWFyayBlYWNoIGJsb2NrIHRoYXQgX2lzXyB1c2VkIHdpdGggMAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faW5kZXhMZW5ndGhfOyArKyBpKSB7CisgICAgICAgICAgICBtX21hcF9bTWF0aC5hYnMobV9pbmRleF9baV0pID4+IFNISUZUX10gPSAwOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIG5ldmVyIG1vdmUgdGhlIGFsbC1pbml0aWFsLXZhbHVlIGJsb2NrIDAKKyAgICAgICAgbV9tYXBfWzBdID0gMDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRmluZHMgdGhlIHNhbWUgaW5kZXggYmxvY2sgYXMgdGhlIG90aGVyQmxvY2sKKyAgICAgKiBAcGFyYW0gaW5kZXggYXJyYXkKKyAgICAgKiBAcGFyYW0gaW5kZXhMZW5ndGggc2l6ZSBvZiBpbmRleAorICAgICAqIEBwYXJhbSBvdGhlckJsb2NrCisgICAgICogQHJldHVybiBzYW1lIGluZGV4IGJsb2NrCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgZmluZFNhbWVJbmRleEJsb2NrKGludCBpbmRleFtdLCBpbnQgaW5kZXhMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdGhlckJsb2NrKSAKKyAgICB7CisgICAgICAgIGZvciAoaW50IGJsb2NrID0gQk1QX0lOREVYX0xFTkdUSF87IGJsb2NrIDwgaW5kZXhMZW5ndGg7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgKz0gU1VSUk9HQVRFX0JMT0NLX0NPVU5UXykgeworICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgZm9yICg7IGkgPCBTVVJST0dBVEVfQkxPQ0tfQ09VTlRfOyArKyBpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4W2Jsb2NrICsgaV0gIT0gaW5kZXhbb3RoZXJCbG9jayArIGldKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID09IFNVUlJPR0FURV9CTE9DS19DT1VOVF8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGluZGV4TGVuZ3RoOworICAgIH0KKyAgICAKKwkvLyBwcml2YXRlIGRhdGEgbWVtYmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQorCS8qKgorCSAqIE1heGltdW0gbGVuZ3RoIG9mIHRoZSBidWlsZC10aW1lIGRhdGEgKHN0YWdlIDIpIGFycmF5LgorCSAqIFRoZSBtYXhpbXVtIGxlbmd0aCBpcyAweDExMDAwMCArIERBVEFfQkxPQ0tfTEVOR1RIXyArIDB4NDAwLgorCSAqIChOdW1iZXIgb2YgVW5pY29kZSBjb2RlIHBvaW50cyArIG9uZSBhbGwtaW5pdGlhbC12YWx1ZSBibG9jayArCisJICogIHBvc3NpYmxlIGR1cGxpY2F0ZSBlbnRyaWVzIGZvciAxMDI0IGxlYWQgc3Vycm9nYXRlcy4pCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9CVUlMRF9USU1FX0RBVEFfTEVOR1RIXyA9IAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMDAwICsgREFUQV9CTE9DS19MRU5HVEhfICsgMHg0MDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVHJpZUl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9UcmllSXRlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kN2I4OTZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVHJpZUl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSw1MzEgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvVHJpZUl0ZXJhdG9yLmphdmEsdiAkCisqICREYXRlOiAyMDAyLzExLzE2IDAxOjQ5OjI2ICQKKyogJFJldmlzaW9uOiAxLjggJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlJhbmdlVmFsdWVJdGVyYXRvcjsKKworLyoqCisgKiA8cD5DbGFzcyBlbmFibGluZyBpdGVyYXRpb24gb2YgdGhlIHZhbHVlcyBpbiBhIFRyaWUuPC9wPgorICogPHA+UmVzdWx0IG9mIGVhY2ggaXRlcmF0aW9uIGNvbnRhaW5zIHRoZSBpbnRlcnZhbCBvZiBjb2RlcG9pbnRzIHRoYXQgaGF2ZQorICogdGhlIHNhbWUgdmFsdWUgdHlwZSBhbmQgdGhlIHZhbHVlIHR5cGUgaXRzZWxmLjwvcD4KKyAqIDxwPlRoZSBjb21wYXJpc29uIG9mIGVhY2ggY29kZXBvaW50IHZhbHVlIGlzIGRvbmUgdmlhIGV4dHJhY3QoKSwgd2hpY2ggdGhlCisgKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHRvIHJldHVybiB0aGUgdmFsdWUgYXMgaXQgaXMuPC9wPiAKKyAqIDxwPk1ldGhvZCBleHRyYWN0KCkgY2FuIGJlIG92ZXJ3cml0dGVuIHRvIHBlcmZvcm0gbWFuaXB1bGF0aW9ucyBvbiAKKyAqIGNvZGVwb2ludCB2YWx1ZXMgaW4gb3JkZXIgdG8gcGVyZm9ybSBzcGVjaWFsaXplZCBjb21wYXJpc29uLjwvcD4KKyAqIDxwPlRyaWVJdGVyYXRvciBpcyBkZXNpZ25lZCB0byBiZSBhIGdlbmVyaWMgaXRlcmF0b3IgZm9yIHRoZSBDaGFyVHJpZQorICogYW5kIHRoZSBJbnRUcmllLCBoZW5jZSB0byBhY2NvbW1vZGF0ZSBib3RoIHR5cGVzIG9mIGRhdGEsIHRoZSByZXR1cm4gCisgKiByZXN1bHQgd2lsbCBiZSBpbiB0ZXJtcyBvZiBpbnQgKDMyIGJpdCkgdmFsdWVzLjwvcD4KKyAqIDxwPlNlZSBjb20uaWJtLmljdS50ZXh0LlVDaGFyYWN0ZXJUeXBlSXRlcmF0b3IgZm9yIGV4YW1wbGVzIG9mIHVzZS48L3A+CisgKiA8cD5Ob3RlcyBmb3IgcG9ydGluZyB1dHJpZV9lbnVtIGZyb20gaWN1NGMgdG8gaWN1NGo6PGJyPgorICogSW50ZXJuYWxseSwgaWN1NGMncyB1dHJpZV9lbnVtIHBlcmZvcm1zIGFsbCBpdGVyYXRpb25zIGluIGl0cyBib2R5LiBJbiBKYXZhCisgKiBzZW5zZSwgdGhlIGNhbGxlciB3aWxsIGhhdmUgdG8gcGFzcyBhIG9iamVjdCB3aXRoIGEgY2FsbGJhY2sgZnVuY3Rpb24gCisgKiBVVHJpZUVudW1SYW5nZShjb25zdCB2b2lkICpjb250ZXh0LCBVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGxpbWl0LCAKKyAqIHVpbnQzMl90IHZhbHVlKSBpbnRvIHV0cmllX2VudW0uIHV0cmllX2VudW0gd2lsbCB0aGVuIGZpbmQgcmFuZ2VzIG9mIAorICogY29kZXBvaW50cyB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIGRldGVybWluZWQgYnkgCisgKiBVVHJpZUVudW1WYWx1ZShjb25zdCB2b2lkICpjb250ZXh0LCB1aW50MzJfdCB2YWx1ZSkuIGZvciBlYWNoIHJhbmdlLCAKKyAqIHV0cmllX2VudW0gY2FsbHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYSB0YXNrLiBJbiB0aGlzIHdheSwKKyAqIGljdTRjIHBlcmZvcm1zIHRoZSBpdGVyYXRpb24gd2l0aGluIHV0cmllX2VudW0uCisgKiBUbyBmb2xsb3cgdGhlIEpESyBtb2RlbCwgaWN1NGogaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gaWN1NGMuCisgKiBJbnN0ZWFkIG9mIHJlcXVlc3RpbmcgdGhlIGNhbGxlciB0byBpbXBsZW1lbnQgYW4gb2JqZWN0IGZvciBhIGNhbGxiYWNrLgorICogVGhlIGNhbGxlciB3aWxsIGhhdmUgdG8gaW1wbGVtZW50IGEgc3ViY2xhc3Mgb2YgVHJpZUl0ZXJhdG9yLCBmbGVzaGluZyBvdXQKKyAqIHRoZSBtZXRob2QgZXh0cmFjdChpbnQpIChlcXVpdmFsZW50IHRvIFVUcmllRW51bVZhbHVlKS4gSW5kZXBlbmRlbnQgb2YgaWN1NGosIAorICogdGhlIGNhbGxlciB3aWxsIGhhdmUgdG8gY29kZSBoaXMgb3duIGl0ZXJhdGlvbiBhbmQgZmxlc2ggb3V0IHRoZSB0YXNrIAorICogKGVxdWl2YWxlbnQgdG8gVVRyaWVFbnVtUmFuZ2UpIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGUgaXRlcmF0aW9uIGxvb3AuCisgKiA8L3A+CisgKiA8cD5UaGVyZSBhcmUgYmFzaWNhbGx5IDMgdXNhZ2Ugc2NlbmFyaW9zIGZvciBwb3J0aW5nOjwvcD4KKyAqIDxwPjEpIFVUcmllRW51bVZhbHVlIGlzIHRoZSBvbmx5IGltcGxlbWVudGVkIGNhbGxiYWNrIHRoZW4ganVzdCBpbXBsZW1lbnQgYSAKKyAqIHN1YmNsYXNzIG9mIFRyaWVJdGVyYXRvciBhbmQgb3ZlcnJpZGUgdGhlIGV4dHJhY3QoaW50KSBtZXRob2QuIFRoZSAKKyAqIGV4dHJhY3QoaW50KSBtZXRob2QgaXMgYW5hbG9ndXMgdG8gVVRyaWVFbnVtVmFsdWUgY2FsbGJhY2suCisgKiA8L3A+CisgKiA8cD4yKSBVVHJpZUVudW1WYWx1ZSBhbmQgVVRyaWVFbnVtUmFuZ2UgYm90aCBhcmUgaW1wbGVtZW50ZWQgdGhlbiBpbXBsZW1lbnQgCisgKiBhIHN1YmNsYXNzIG9mIFRyaWVJdGVyYXRvciwgb3ZlcnJpZGUgdGhlIGV4dHJhY3QgbWV0aG9kIGFuZCBpdGVyYXRlLCBlLmcKKyAqIDwvcD4KKyAqIDxwPnV0cmllX2VudW0oJm5vcm1UcmllLCBfZW51bVByb3BlcnR5U3RhcnRzVmFsdWUsIF9lbnVtUHJvcGVydHlTdGFydHNSYW5nZSwgCisgKiAgICAgICAgICAgICAgIHNldCk7PGJyPgorICogSW4gSmF2YSA6PGJyPgorICogPHByZT4KKyAqIGNsYXNzIFRyaWVJdGVyYXRvckltcGwgZXh0ZW5kcyBUcmllSXRlcmF0b3J7CisgKiAgICAgcHVibGljIFRyaWVJdGVyYXRvckltcGwoVHJpZSBkYXRhKXsKKyAqICAgICAgICAgc3VwZXIoZGF0YSk7CisgKiAgICAgfQorICogICAgIHB1YmxpYyBpbnQgZXh0cmFjdChpbnQgdmFsdWUpeworICogICAgICAgICAvLyBwb3J0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBfZW51bVByb3BlcnR5U3RhcnRzVmFsdWUgaGVyZQorICogICAgIH0KKyAqIH0KKyAqIC4uLi4gCisgKiBUcmllSXRlcmF0b3IgZmNkSXRlciAgPSBuZXcgVHJpZUl0ZXJhdG9ySW1wbChmY2RUcmllSW1wbC5mY2RUcmllKTsKKyAqIHdoaWxlKGZjZEl0ZXIubmV4dChyZXN1bHQpKSB7CisgKiAgICAgLy8gcG9ydCB0aGUgaW1wbGVtZW50YXRpb24gb2YgX2VudW1Qcm9wZXJ0eVN0YXJ0c1JhbmdlCisgKiB9CisgKiA8L3ByZT4KKyAqIDwvcD4KKyAqIDxwPjMpIFVUcmllRW51bVJhbmdlIGlzIHRoZSBvbmx5IGltcGxlbWVudGVkIGNhbGxiYWNrIHRoZW4ganVzdCBpbXBsZW1lbnQgCisgKiB0aGUgd2hpbGUgbG9vcCwgd2hlbiB1dHJpZV9lbnVtIGlzIGNhbGxlZAorICogPHByZT4KKyAqIC8vIHV0cmllX2VudW0oJmZjZFRyaWUsIE5VTEwsIF9lbnVtUHJvcGVydHlTdGFydHNSYW5nZSwgc2V0KTsKKyAqIFRyaWVJdGVyYXRvciBmY2RJdGVyICA9IG5ldyBUcmllSXRlcmF0b3IoZmNkVHJpZUltcGwuZmNkVHJpZSk7CisgKiB3aGlsZShmY2RJdGVyLm5leHQocmVzdWx0KSl7CisgKiAgICAgc2V0LmFkZChyZXN1bHQuc3RhcnQpOworICogfQorICogPC9wPgorICogQGF1dGhvciBzeW53ZWUKKyAqIEBzZWUgY29tLmlibS5pY3UudXRpbC5UcmllCisgKiBAc2VlIGNvbS5pYm0uaWN1LnRleHQuVUNoYXJhY3RlclR5cGVJdGVyYXRvcgorICogQHNpbmNlIHJlbGVhc2UgMi4xLCBKYW4gMTcgMjAwMgorICovCitwdWJsaWMgY2xhc3MgVHJpZUl0ZXJhdG9yIGltcGxlbWVudHMgUmFuZ2VWYWx1ZUl0ZXJhdG9yCisKK3sKKyAgICAvLyBwdWJsaWMgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiBUcmllRW51bWVyYXRpb24gY29uc3RydWN0b3IKKyAgICAqIEBwYXJhbSB0cmllIHRvIGJlIHVzZWQKKyAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93IHdoZW4gYXJndW1lbnQgaXMgbnVsbC4KKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHB1YmxpYyBUcmllSXRlcmF0b3IoVHJpZSB0cmllKQorICAgIHsKKyAgICAgICAgaWYgKHRyaWUgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCB0cmllIGNhbm5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgbV90cmllXyAgICAgICAgICAgICA9IHRyaWU7CisgICAgICAgIC8vIHN5bndlZTogY2hlY2sgdGhhdCBleHRyYWN0IGJlbG9uZ3MgdG8gdGhlIGNoaWxkIGNsYXNzCisgICAgICAgIG1faW5pdGlhbFZhbHVlXyAgICAgPSBleHRyYWN0KG1fdHJpZV8uZ2V0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICByZXNldCgpOworICAgIH0KKyAgICAKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiA8cD5SZXR1cm5zIHRydWUgaWYgd2UgYXJlIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBpdGVyYXRpb24sIGZhbHNlIAorICAgICogb3RoZXJ3aXNlLjwvcD4KKyAgICAqIDxwPlRoZSBuZXh0IHNldCBvZiBjb2RlcG9pbnRzIHdpdGggdGhlIHNhbWUgdmFsdWUgdHlwZSB3aWxsIGJlIAorICAgICogY2FsY3VsYXRlZCBkdXJpbmcgdGhpcyBjYWxsIGFuZCByZXR1cm5lZCBpbiB0aGUgYXJndWVtZW50IGVsZW1lbnQuPC9wPgorICAgICogQHBhcmFtIGVsZW1lbnQgcmV0dXJuIHJlc3VsdCAKKyAgICAqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGl0ZXJhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICogQGV4Y2VwdGlvbiBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIC0gaWYgbm8gbW9yZSBlbGVtZW50cyBleGlzdC4KKyAgICAqIEBzZWUgI2dldFN0YXJ0KCkKKyAgICAqIEBzZWUgI2dldExpbWl0KCkKKyAgICAqIEBzZWUgI2dldFZhbHVlKCkKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIG5leHQoRWxlbWVudCBlbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKG1fbmV4dENvZGVwb2ludF8gPiBVQ2hhcmFjdGVyLk1BWF9WQUxVRSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChtX25leHRDb2RlcG9pbnRfIDwgVUNoYXJhY3Rlci5TVVBQTEVNRU5UQVJZX01JTl9WQUxVRSAmJgorICAgICAgICAgICAgY2FsY3VsYXRlTmV4dEJNUEVsZW1lbnQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSAgICAKKyAgICAgICAgY2FsY3VsYXRlTmV4dFN1cHBsZW1lbnRhcnlFbGVtZW50KGVsZW1lbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgIAorICAgIC8qKgorICAgICogUmVzZXRzIHRoZSBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpdGVyYXRpb24KKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudENvZGVwb2ludF8gPSAwOworICAgICAgICBtX25leHRDb2RlcG9pbnRfICAgID0gMDsKKyAgICAgICAgbV9uZXh0SW5kZXhfICAgICAgICA9IDA7CisgICAgICAgIG1fbmV4dEJsb2NrXyA9IG1fdHJpZV8ubV9pbmRleF9bMF0gPDwgVHJpZS5JTkRFWF9TVEFHRV8yX1NISUZUXzsKKyAgICAgICAgaWYgKG1fbmV4dEJsb2NrXyA9PSAwKSB7CisgICAgICAgICAgICBtX25leHRWYWx1ZV8gPSBtX2luaXRpYWxWYWx1ZV87CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX25leHRWYWx1ZV8gPSBleHRyYWN0KG1fdHJpZV8uZ2V0VmFsdWUobV9uZXh0QmxvY2tfKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9uZXh0QmxvY2tJbmRleF8gPSAwOworICAgICAgICBtX25leHRUcmFpbEluZGV4T2Zmc2V0XyA9IFRSQUlMX1NVUlJPR0FURV9JTkRFWF9CTE9DS19MRU5HVEhfOworICAgIH0KKyAgICAKKyAgICAvLyBwcm90ZWN0ZWQgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiBDYWxsZWQgYnkgbmV4dCgpIHRvIGV4dHJhY3RzIGEgMzIgYml0IHZhbHVlIGZyb20gYSB0cmllIHZhbHVlCisgICAgKiB1c2VkIGZvciBjb21wYXJpc29uLgorICAgICogVGhpcyBtZXRob2QgaXMgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgc3BlY2lhbCBtYW5pcHVsYXRpb24gaXMgdG8gYmUgZG9uZQorICAgICogdG8gcmV0cmlldmUgYSByZWxldmFudCBjb21wYXJpc29uLgorICAgICogVGhlIGRlZmF1bHQgZnVuY3Rpb24gaXMgdG8gcmV0dXJuIHRoZSB2YWx1ZSBhcyBpdCBpcy4KKyAgICAqIEBwYXJhbSB2YWx1ZSBhIHZhbHVlIGZyb20gdGhlIHRyaWUKKyAgICAqIEByZXR1cm4gZXh0cmFjdGVkIHZhbHVlCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGV4dHJhY3QoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiBTZXQgdGhlIHJlc3VsdCB2YWx1ZXMKKyAgICAqIEBwYXJhbSBlbGVtZW50IHJldHVybiByZXN1bHQgb2JqZWN0CisgICAgKiBAcGFyYW0gc3RhcnQgY29kZXBvaW50IG9mIHJhbmdlIAorICAgICogQHBhcmFtIGxpbWl0IChlbmQgKyAxKSBjb2RlcG9pbnQgb2YgcmFuZ2UKKyAgICAqIEBwYXJhbSB2YWx1ZSBjb21tb24gdmFsdWUgb2YgcmFuZ2UKKyAgICAqLworICAgIHByaXZhdGUgZmluYWwgdm9pZCBzZXRSZXN1bHQoRWxlbWVudCBlbGVtZW50LCBpbnQgc3RhcnQsIGludCBsaW1pdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpCisgICAgeworICAgICAgICBlbGVtZW50LnN0YXJ0ID0gc3RhcnQ7CisgICAgICAgIGVsZW1lbnQubGltaXQgPSBsaW1pdDsKKyAgICAgICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIEZpbmRpbmcgdGhlIG5leHQgZWxlbWVudC4KKyAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSByZXR1cm5pbmcgdGhlIHJlc3VsdCBvZiAKKyAgICAqIG5leHQoKS4KKyAgICAqIFdlIGFsd2F5cyBzdG9yZSB0aGUgbmV4dCBlbGVtZW50IGJlZm9yZSBpdCBpcyByZXF1ZXN0ZWQuCisgICAgKiBJbiB0aGUgY2FzZSB0aGF0IHdlIGhhdmUgdG8gY29udGludWUgY2FsY3VsYXRpb25zIGludG8gdGhlIAorICAgICogc3VwcGxlbWVudGFyeSBwbGFuZXMsIGEgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZC4KKyAgICAqIEBwYXJhbSBlbGVtZW50IHJldHVybiByZXN1bHQgb2JqZWN0CisgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5leHQgcmFuZ2UgaXMgZm91bmQsIGZhbHNlIGlmIHdlIGhhdmUgdG8gcHJvY2VlZCB0bworICAgICogICAgICAgICB0aGUgc3VwcGxlbWVudGFyeSByYW5nZS4KKyAgICAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjYWxjdWxhdGVOZXh0Qk1QRWxlbWVudChFbGVtZW50IGVsZW1lbnQpCisgICAgeworICAgICAgICBpbnQgY3VycmVudEJsb2NrICAgID0gbV9uZXh0QmxvY2tfOworICAgICAgICBpbnQgY3VycmVudFZhbHVlICAgID0gbV9uZXh0VmFsdWVfOworICAgICAgICBtX2N1cnJlbnRDb2RlcG9pbnRfID0gbV9uZXh0Q29kZXBvaW50XzsKKyAgICAgICAgbV9uZXh0Q29kZXBvaW50XyArKzsKKyAgICAgICAgbV9uZXh0QmxvY2tJbmRleF8gKys7CisgICAgICAgIGlmICghY2hlY2tCbG9ja0RldGFpbChjdXJyZW50VmFsdWUpKSB7CisgICAgICAgICAgICBzZXRSZXN1bHQoZWxlbWVudCwgbV9jdXJyZW50Q29kZXBvaW50XywgbV9uZXh0Q29kZXBvaW50XywgCisgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIHN5bndlZSBjaGVjayB0aGF0IG5leHQgYmxvY2sgaW5kZXggPT0gMCBoZXJlIAorICAgICAgICAvLyBlbnVtZXJhdGUgQk1QIC0gdGhlIG1haW4gbG9vcCBlbnVtZXJhdGVzIGRhdGEgYmxvY2tzCisgICAgICAgIHdoaWxlIChtX25leHRDb2RlcG9pbnRfIDwgVUNoYXJhY3Rlci5TVVBQTEVNRU5UQVJZX01JTl9WQUxVRSkgeworICAgICAgICAgICAgbV9uZXh0SW5kZXhfICsrOworICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBjaGFyYWN0ZXIgaXMgc3BsaXQgdG8gZm9ybSB0aGUgaW5kZXgKKyAgICAgICAgICAgIC8vIHRoZSBsZWFkIHN1cnJvZ2F0ZSBhbmQgdHJhaWwgc3Vycm9nYXRlIGNhbiBub3QgYmUgaW4gdGhlCisgICAgICAgICAgICAvLyBtaWQgb2YgYSBibG9jaworICAgICAgICAgICAgaWYgKG1fbmV4dENvZGVwb2ludF8gPT0gTEVBRF9TVVJST0dBVEVfTUlOX1ZBTFVFXykgeworICAgICAgICAgICAgICAgIC8vIHNraXAgbGVhZCBzdXJyb2dhdGUgY29kZSB1bml0cywKKyAgICAgICAgICAgICAgICAvLyBnbyB0byBsZWFkIHN1cnJvZ2F0ZSBjb2RlcG9pbnRzCisgICAgICAgICAgICAgICAgbV9uZXh0SW5kZXhfID0gQk1QX0lOREVYX0xFTkdUSF87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtX25leHRDb2RlcG9pbnRfID09IFRSQUlMX1NVUlJPR0FURV9NSU5fVkFMVUVfKSB7CisgICAgICAgICAgICAgICAgLy8gZ28gYmFjayB0byByZWd1bGFyIEJNUCBjb2RlIHBvaW50cworICAgICAgICAgICAgICAgIG1fbmV4dEluZGV4XyA9IG1fbmV4dENvZGVwb2ludF8gPj4gVHJpZS5JTkRFWF9TVEFHRV8xX1NISUZUXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9uZXh0QmxvY2tJbmRleF8gPSAwOworICAgICAgICAgICAgaWYgKCFjaGVja0Jsb2NrKGN1cnJlbnRCbG9jaywgY3VycmVudFZhbHVlKSkgeworICAgICAgICAgICAgICAgIHNldFJlc3VsdChlbGVtZW50LCBtX2N1cnJlbnRDb2RlcG9pbnRfLCBtX25leHRDb2RlcG9pbnRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX25leHRDb2RlcG9pbnRfIC0tOyAgIC8vIHN0ZXAgb25lIGJhY2sgc2luY2UgdGhpcyB2YWx1ZSBoYXMgbm90IGJlZW4KKyAgICAgICAgbV9uZXh0QmxvY2tJbmRleF8gLS07ICAvLyByZXRyaWV2ZWQgeWV0LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgKiBGaW5kcyB0aGUgbmV4dCBzdXBwbGVtZW50YXJ5IGVsZW1lbnQuCisgICAgKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgdHJpZSwgdGhlIHZhbHVlIHRvIGJlIGRlbGl2ZXJlZCBpcyBwYXNzZWQgdGhyb3VnaAorICAgICogZXh0cmFjdCgpLgorICAgICogV2UgYWx3YXlzIHN0b3JlIHRoZSBuZXh0IGVsZW1lbnQgYmVmb3JlIGl0IGlzIHJlcXVlc3RlZC4KKyAgICAqIENhbGxlZCBhZnRlciBjYWxjdWxhdGVOZXh0Qk1QKCkgY29tcGxldGVzIGl0cyByb3VuZCBvZiBCTVAgY2hhcmFjdGVycy4KKyAgICAqIFRoZXJlIGlzIGEgc2xpZ2h0IGRpZmZlcmVuY2UgaW4gdGhlIHVzYWdlIG9mIG1fY3VycmVudENvZGVwb2ludF8KKyAgICAqIGhlcmUgYXMgY29tcGFyZWQgdG8gY2FsY3VsYXRlTmV4dEJNUCgpLiBUaG91Z2ggYm90aCByZXByZXNlbnRzIHRoZQorICAgICogbG93ZXIgYm91bmQgb2YgdGhlIG5leHQgZWxlbWVudCwgaW4gY2FsY3VsYXRlTmV4dEJNUCgpIGl0IGdldHMgc2V0CisgICAgKiBhdCB0aGUgc3RhcnQgb2YgYW55IGxvb3AsIHdoZXJlLWVsc2UsIGluIGNhbGN1bGF0ZU5leHRTdXBwbGVtZW50YXJ5KCkKKyAgICAqIHNpbmNlIG1fY3VycmVudENvZGVwb2ludF8gYWxyZWFkeSBjb250YWlucyB0aGUgbG93ZXIgYm91bmQgb2YgdGhlCisgICAgKiBuZXh0IGVsZW1lbnQgKHBhc3NlZCBkb3duIGZyb20gY2FsY3VsYXRlTmV4dEJNUCgpKSwgd2Uga2VlcCBpdCB0aWxsIAorICAgICogdGhlIGVuZCBiZWZvcmUgcmVzZXR0aW5nIGl0IHRvIHRoZSBuZXcgdmFsdWUuCisgICAgKiBOb3RlLCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVyYXRpb25zLCBpdCB3aWxsIG5ldmVyIGdldCB0byBoZXJlLiAKKyAgICAqIEJsb2NrZWQgb3V0IGJ5IG5leHQoKS4KKyAgICAqIEBwYXJhbSBlbGVtZW50IHJldHVybiByZXN1bHQgb2JqZWN0CisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIHZvaWQgY2FsY3VsYXRlTmV4dFN1cHBsZW1lbnRhcnlFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKKyAgICB7CisgICAgICAgIGludCBjdXJyZW50VmFsdWUgPSBtX25leHRWYWx1ZV87CisgICAgICAgIGludCBjdXJyZW50QmxvY2sgPSBtX25leHRCbG9ja187CisgICAgICAgIG1fbmV4dENvZGVwb2ludF8gKys7CisgICAgICAgIG1fbmV4dEJsb2NrSW5kZXhfICsrOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGVja051bGxOZXh0VHJhaWxJbmRleCgpICYmICFjaGVja0Jsb2NrRGV0YWlsKGN1cnJlbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgIHNldFJlc3VsdChlbGVtZW50LCBtX2N1cnJlbnRDb2RlcG9pbnRfLCBtX25leHRDb2RlcG9pbnRfLCAKKyAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUpOworICAgICAgICAgICAgbV9jdXJyZW50Q29kZXBvaW50XyA9IG1fbmV4dENvZGVwb2ludF87CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwkJLy8gd2UgaGF2ZSBjbGVhcmVkIG9uZSBibG9jaworCQltX25leHRJbmRleF8gKys7CisJCW1fbmV4dFRyYWlsSW5kZXhPZmZzZXRfICsrOworCQlpZiAoIWNoZWNrVHJhaWxCbG9jayhjdXJyZW50QmxvY2ssIGN1cnJlbnRWYWx1ZSkpIHsKKwkJCXNldFJlc3VsdChlbGVtZW50LCBtX2N1cnJlbnRDb2RlcG9pbnRfLCBtX25leHRDb2RlcG9pbnRfLCAKKwkJCSAgICAgICAgICBjdXJyZW50VmFsdWUpOworICAgICAgICAgICAgbV9jdXJyZW50Q29kZXBvaW50XyA9IG1fbmV4dENvZGVwb2ludF87CisgICAgICAgICAgICByZXR1cm47CisJCX0KKwkJCisgICAgICAgIGludCBuZXh0TGVhZCAgPSBVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKG1fbmV4dENvZGVwb2ludF8pOworCQkvLyBlbnVtZXJhdGUgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50cworICAgICAgICB3aGlsZSAobmV4dExlYWQgPCBUUkFJTF9TVVJST0dBVEVfTUlOX1ZBTFVFXykgeworCQkgICAgLy8gbGVhZCBzdXJyb2dhdGUgYWNjZXNzCisgICAgICAgICAgICBpbnQgbGVhZEJsb2NrID0gCisgICAgICAgICAgICAgICAgICAgbV90cmllXy5tX2luZGV4X1tuZXh0TGVhZCA+PiBUcmllLklOREVYX1NUQUdFXzFfU0hJRlRfXSA8PCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyaWUuSU5ERVhfU1RBR0VfMl9TSElGVF87CisgICAgICAgICAgICBpZiAobGVhZEJsb2NrID09IG1fdHJpZV8ubV9kYXRhT2Zmc2V0XykgeworICAgICAgICAgICAgICAgIC8vIG5vIGVudHJpZXMgZm9yIGEgd2hvbGUgYmxvY2sgb2YgbGVhZCBzdXJyb2dhdGVzCisgICAgICAgICAgICAgICAgbmV4dExlYWQgKz0gREFUQV9CTE9DS19MRU5HVEhfOworICAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiB0b3RhbCBhZmZlY3RlZCBzdXBwbGVtZW50YXJ5IGNvZGVwb2ludHMgaW4gb25lCisgICAgICAgICAgICAgICAgLy8gYmxvY2sKKyAgICAgICAgICAgICAgICBtX25leHRDb2RlcG9pbnRfICs9IERBVEFfQkxPQ0tfU1VQUExFTUVOVEFSWV9MRU5HVEhfOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fdHJpZV8ubV9kYXRhTWFuaXB1bGF0ZV8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZpZWxkIERhdGFNYW5pcHVsYXRlIGluIHRoaXMgVHJpZSBpcyBudWxsIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBlbnVtZXJhdGUgdHJhaWwgc3Vycm9nYXRlcyBmb3IgdGhpcyBsZWFkIHN1cnJvZ2F0ZQorICAgICAgICAgICAgbV9uZXh0SW5kZXhfID0gbV90cmllXy5tX2RhdGFNYW5pcHVsYXRlXy5nZXRGb2xkaW5nT2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJpZV8uZ2V0VmFsdWUobGVhZEJsb2NrICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0TGVhZCAmIFRyaWUuSU5ERVhfU1RBR0VfM19NQVNLXykpKTsKKyAgICAgICAgICAgIGlmIChtX25leHRJbmRleF8gPD0gMCkgeworICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEgZm9yIHRoaXMgbGVhZCBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG1faW5pdGlhbFZhbHVlXykgeworICAgICAgICAgICAgICAgICAgICBtX25leHRWYWx1ZV8gICAgICA9IG1faW5pdGlhbFZhbHVlXzsKKyAgICAgICAgICAgICAgICAgICAgbV9uZXh0QmxvY2tfICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICBtX25leHRCbG9ja0luZGV4XyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChlbGVtZW50LCBtX2N1cnJlbnRDb2RlcG9pbnRfLCBtX25leHRDb2RlcG9pbnRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudENvZGVwb2ludF8gPSBtX25leHRDb2RlcG9pbnRfOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fbmV4dENvZGVwb2ludF8gKz0gVFJBSUxfU1VSUk9HQVRFX0NPVU5UXzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9uZXh0VHJhaWxJbmRleE9mZnNldF8gPSAwOworICAgICAgICAgICAgICAgIGlmICghY2hlY2tUcmFpbEJsb2NrKGN1cnJlbnRCbG9jaywgY3VycmVudFZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZWxlbWVudCwgbV9jdXJyZW50Q29kZXBvaW50XywgbV9uZXh0Q29kZXBvaW50XywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRDb2RlcG9pbnRfID0gbV9uZXh0Q29kZXBvaW50XzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gICAgCisgICAgICAgICAgICBuZXh0TGVhZCArKzsKKyAgICAgICAgIH0KKworICAgICAgICAgLy8gZGVsaXZlciBsYXN0IHJhbmdlCisgICAgICAgICBzZXRSZXN1bHQoZWxlbWVudCwgbV9jdXJyZW50Q29kZXBvaW50XywgVUNoYXJhY3Rlci5NQVhfVkFMVUUgKyAxLCAKKyAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUpOworICAgIH0gICAgCisgICAgCisgICAgLyoqCisgICAgKiBJbnRlcm5hbCBibG9jayB2YWx1ZSBjYWxjdWxhdGlvbnMKKyAgICAqIFBlcmZvcm1zIGNhbGN1bGF0aW9ucyBvbiBhIGRhdGEgYmxvY2sgdG8gZmluZCBjb2RlcG9pbnRzIGluIG1fbmV4dEJsb2NrXworICAgICogYWZ0ZXIgdGhlIGluZGV4IG1fbmV4dEJsb2NrSW5kZXhfIHRoYXQgaGFzIHRoZSBzYW1lIHZhbHVlLgorICAgICogTm90ZSBtXypfIHZhcmlhYmxlcyBhdCB0aGlzIHBvaW50IGlzIHRoZSBuZXh0IGNvZGVwb2ludCB3aG9zZSB2YWx1ZQorICAgICogaGFzIG5vdCBiZWVuIGNhbGN1bGF0ZWQuCisgICAgKiBCdXQgd2hlbiByZXR1cm5lZCB3aXRoIGZhbHNlLCBpdCB3aWxsIGJlIHRoZSBsYXN0IGNvZGVwb2ludCB3aG9zZQorICAgICogdmFsdWUgaGFzIGJlZW4gY2FsY3VsYXRlZC4KKyAgICAqIEBwYXJhbSBjdXJyZW50VmFsdWUgdGhlIHZhbHVlIHdoaWNoIG90aGVyIGNvZGVwb2ludHMgYXJlIHRlc3RlZCBhZ2FpbnN0CisgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHdob2xlIGJsb2NrIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyBjdXJyZW50VmFsdWUgb3IgaWYKKyAgICAqICAgICAgICAgICAgICB0aGUgd2hvbGUgYmxvY2sgaGFzIGJlZW4gY2FsY3VsYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNoZWNrQmxvY2tEZXRhaWwoaW50IGN1cnJlbnRWYWx1ZSkKKyAgICB7CisJICAgIHdoaWxlIChtX25leHRCbG9ja0luZGV4XyA8IERBVEFfQkxPQ0tfTEVOR1RIXykgeworICAgICAgICAgICAgbV9uZXh0VmFsdWVfID0gZXh0cmFjdChtX3RyaWVfLmdldFZhbHVlKG1fbmV4dEJsb2NrXyArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbmV4dEJsb2NrSW5kZXhfKSk7CisgICAgICAgICAgICBpZiAobV9uZXh0VmFsdWVfICE9IGN1cnJlbnRWYWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrIG1fbmV4dEJsb2NrSW5kZXhfOworICAgICAgICAgICAgKysgbV9uZXh0Q29kZXBvaW50XzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBJbnRlcm5hbCBibG9jayB2YWx1ZSBjYWxjdWxhdGlvbnMKKyAgICAqIFBlcmZvcm1zIGNhbGN1bGF0aW9ucyBvbiBhIGRhdGEgYmxvY2sgdG8gZmluZCBjb2RlcG9pbnRzIGluIG1fbmV4dEJsb2NrXworICAgICogdGhhdCBoYXMgdGhlIHNhbWUgdmFsdWUuIAorICAgICogV2lsbCBjYWxsIGNoZWNrQmxvY2tEZXRhaWwoKSBpZiBoaWdobGV2ZWwgY2hlY2sgZmFpbHMuCisgICAgKiBOb3RlIG1fKl8gdmFyaWFibGVzIGF0IHRoaXMgcG9pbnQgaXMgdGhlIG5leHQgY29kZXBvaW50IHdob3NlIHZhbHVlCisgICAgKiBoYXMgbm90IGJlZW4gY2FsY3VsYXRlZC4KKyAgICAqIEBwYXJhbSBjdXJyZW50QmxvY2sgdGhlIGluaXRpYWwgYmxvY2sgY29udGFpbmluZyBhbGwgY3VycmVudFZhbHVlCisgICAgKiBAcGFyYW0gY3VycmVudFZhbHVlIHRoZSB2YWx1ZSB3aGljaCBvdGhlciBjb2RlcG9pbnRzIGFyZSB0ZXN0ZWQgYWdhaW5zdAorICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB3aG9sZSBibG9jayBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgY3VycmVudFZhbHVlIG9yIGlmCisgICAgKiAgICAgICAgICAgICAgdGhlIHdob2xlIGJsb2NrIGhhcyBiZWVuIGNhbGN1bGF0ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjaGVja0Jsb2NrKGludCBjdXJyZW50QmxvY2ssIGludCBjdXJyZW50VmFsdWUpIAorICAgIHsKKyAgICAgICAgbV9uZXh0QmxvY2tfID0gbV90cmllXy5tX2luZGV4X1ttX25leHRJbmRleF9dIDw8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmllLklOREVYX1NUQUdFXzJfU0hJRlRfOworICAgICAgICBpZiAobV9uZXh0QmxvY2tfID09IGN1cnJlbnRCbG9jayAmJgorICAgICAgICAgICAgKG1fbmV4dENvZGVwb2ludF8gLSBtX2N1cnJlbnRDb2RlcG9pbnRfKSA+PSBEQVRBX0JMT0NLX0xFTkdUSF8pIHsKKyAgICAgICAgICAgIC8vIHRoZSBibG9jayBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgb25lLCBmaWxsZWQgd2l0aCAKKyAgICAgICAgICAgIC8vIGN1cnJlbnRWYWx1ZQorCQkJbV9uZXh0Q29kZXBvaW50XyArPSBEQVRBX0JMT0NLX0xFTkdUSF87CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobV9uZXh0QmxvY2tfID09IDApIHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGFsbC1pbml0aWFsLXZhbHVlIGJsb2NrCisgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG1faW5pdGlhbFZhbHVlXykgeworICAgICAgICAgICAgICAgIG1fbmV4dFZhbHVlXyAgICAgID0gbV9pbml0aWFsVmFsdWVfOworICAgICAgICAgICAgICAgIG1fbmV4dEJsb2NrSW5kZXhfID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX25leHRDb2RlcG9pbnRfICs9IERBVEFfQkxPQ0tfTEVOR1RIXzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tCbG9ja0RldGFpbChjdXJyZW50VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIEludGVybmFsIGJsb2NrIHZhbHVlIGNhbGN1bGF0aW9ucworICAgICogUGVyZm9ybXMgY2FsY3VsYXRpb25zIG9uIG11bHRpcGxlIGRhdGEgYmxvY2tzIGZvciBhIHNldCBvZiB0cmFpbCAKKyAgICAqIHN1cnJvZ2F0ZXMgdG8gZmluZCBjb2RlcG9pbnRzIGluIG1fbmV4dEJsb2NrXyB0aGF0IGhhcyB0aGUgc2FtZSB2YWx1ZS4gCisgICAgKiBXaWxsIGNhbGwgY2hlY2tCbG9jaygpIGZvciBpbnRlcm5hbCBibG9jayBjaGVja3MuCisgICAgKiBOb3RlIG1fKl8gdmFyaWFibGVzIGF0IHRoaXMgcG9pbnQgaXMgdGhlIG5leHQgY29kZXBvaW50IHdob3NlIHZhbHVlCisgICAgKiBoYXMgbm90IGJlZW4gY2FsY3VsYXRlZC4KKyAgICAqIEBwYXJhbSBjdXJyZW50QmxvY2sgdGhlIGluaXRpYWwgYmxvY2sgY29udGFpbmluZyBhbGwgY3VycmVudFZhbHVlCisgICAgKiBAcGFyYW0gY3VycmVudFZhbHVlIHRoZSB2YWx1ZSB3aGljaCBvdGhlciBjb2RlcG9pbnRzIGFyZSB0ZXN0ZWQgYWdhaW5zdAorICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB3aG9sZSBibG9jayBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgY3VycmVudFZhbHVlIG9yIGlmCisgICAgKiAgICAgICAgICAgICAgdGhlIHdob2xlIGJsb2NrIGhhcyBiZWVuIGNhbGN1bGF0ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjaGVja1RyYWlsQmxvY2soaW50IGN1cnJlbnRCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJyZW50VmFsdWUpCisgICAgeworCSAgICAvLyBlbnVtZXJhdGUgY29kZSBwb2ludHMgZm9yIHRoaXMgbGVhZCBzdXJyb2dhdGUKKyAgICAgICAgd2hpbGUgKG1fbmV4dFRyYWlsSW5kZXhPZmZzZXRfIDwgVFJBSUxfU1VSUk9HQVRFX0lOREVYX0JMT0NLX0xFTkdUSF8pIAorICAgICAgICB7CisJCSAgICAvLyBpZiB3ZSBldmVyIHJlYWNoIGhlcmUsIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBuZXcgYmxvY2sKKyAgICAgICAgICAgIG1fbmV4dEJsb2NrSW5kZXhfID0gMDsKKyAgICAgICAgICAgIC8vIGNvcHkgb2YgbW9zdCBvZiB0aGUgYm9keSBvZiB0aGUgQk1QIGxvb3AKKyAgICAgICAgICAgIGlmICghY2hlY2tCbG9jayhjdXJyZW50QmxvY2ssIGN1cnJlbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX25leHRUcmFpbEluZGV4T2Zmc2V0XyArKzsKKyAgICAgICAgICAgIG1fbmV4dEluZGV4XyArKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisJLyoqCisJKiBDaGVja3MgaWYgd2UgYXJlIGJlZ2lubmluZyBhdCB0aGUgc3RhcnQgb2YgYSBpbml0aWFsIGJsb2NrLgorCSogSWYgd2UgYXJlIHRoZW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGVwb2ludHMgaW4gdGhpcyBpbml0aWFsIGJsb2NrCisJKiBoYXMgdGhlIHNhbWUgdmFsdWVzLgorCSogV2UgaW5jcmVtZW50IG1fbmV4dENvZGVwb2ludF8gYW5kIHJlbGV2YW50IGRhdGEgbWVtYmVycyBpZiBzby4KKwkqIFRoaXMgaXMgdXNlZCBvbmx5IGluIGZvciB0aGUgc3VwcGxlbWVudGFyeSBjb2RlcG9pbnRzIGJlY2F1c2UKKwkqIHRoZSBvZmZzZXQgdG8gdGhlIHRyYWlsIGluZGV4ZXMgY291bGQgYmUgMC4KKwkqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgaW5pdGlhbCBibG9jay4KKwkqLworCXByaXZhdGUgZmluYWwgYm9vbGVhbiBjaGVja051bGxOZXh0VHJhaWxJbmRleCgpCisJeworCQlpZiAobV9uZXh0SW5kZXhfIDw9IDApIHsKKwkJICAgIG1fbmV4dENvZGVwb2ludF8gKz0gVFJBSUxfU1VSUk9HQVRFX0NPVU5UXyAtIDE7CisJCQlpbnQgbmV4dExlYWQgID0gVVRGMTYuZ2V0TGVhZFN1cnJvZ2F0ZShtX25leHRDb2RlcG9pbnRfKTsKKwkJCWludCBsZWFkQmxvY2sgPSAKKyAgICAgICAgICAgICAgICAgICBtX3RyaWVfLm1faW5kZXhfW25leHRMZWFkID4+IFRyaWUuSU5ERVhfU1RBR0VfMV9TSElGVF9dIDw8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJpZS5JTkRFWF9TVEFHRV8yX1NISUZUXzsKKyAgICAgICAgICAgIGlmIChtX3RyaWVfLm1fZGF0YU1hbmlwdWxhdGVfID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBmaWVsZCBEYXRhTWFuaXB1bGF0ZSBpbiB0aGlzIFRyaWUgaXMgbnVsbCIpOworICAgICAgICAgICAgfQorCQkJbV9uZXh0SW5kZXhfID0gbV90cmllXy5tX2RhdGFNYW5pcHVsYXRlXy5nZXRGb2xkaW5nT2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJpZV8uZ2V0VmFsdWUobGVhZEJsb2NrICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0TGVhZCAmIFRyaWUuSU5ERVhfU1RBR0VfM19NQVNLXykpKTsKKwkJCW1fbmV4dEluZGV4XyAtLTsKKwkJCW1fbmV4dEJsb2NrSW5kZXhfID0gIERBVEFfQkxPQ0tfTEVOR1RIXzsKKwkJCXJldHVybiB0cnVlOworCSAgICB9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgKiBTaXplIG9mIHRoZSBzdGFnZSAxIEJNUCBpbmRleGVzCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQk1QX0lOREVYX0xFTkdUSF8gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAgPj4gVHJpZS5JTkRFWF9TVEFHRV8xX1NISUZUXzsKKyAgICAvKioKKyAgICAqIExlYWQgc3Vycm9nYXRlIG1pbmltdW0gdmFsdWUKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUVfID0gMHhEODAwOworICAgIC8qKgorICAgICogVHJhaWwgc3Vycm9nYXRlIG1pbmltdW0gdmFsdWUKKyAgICAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUkFJTF9TVVJST0dBVEVfTUlOX1ZBTFVFXyA9IDB4REMwMDsKKwkvKioKKyAgICAqIFRyYWlsIHN1cnJvZ2F0ZSBtYXhpbXVtIHZhbHVlCisgICAgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBSUxfU1VSUk9HQVRFX01BWF9WQUxVRV8gPSAweERGRkY7CisJLyoqCisJKiBOdW1iZXIgb2YgdHJhaWwgc3Vycm9nYXRlCisJKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBSUxfU1VSUk9HQVRFX0NPVU5UXyA9IDB4NDAwOworICAgIC8qKgorCSogTnVtYmVyIG9mIHN0YWdlIDEgaW5kZXhlcyBmb3Igc3VwcGxlbWVudGFyeSBjYWxjdWxhdGlvbnMgdGhhdCBtYXBzIHRvCisJKiBlYWNoIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3Rlci4KKwkqIFNlZSBzZWNvbmQgcGFzcyBpbnRvIGdldFJhd09mZnNldCBmb3IgdGhlIHRyYWlsIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIuCisJKiAxMCBmb3Igc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGJpdHMgZm9yIHRyYWlsIHN1cnJvZ2F0ZXMsIDUgZm9yIHdoYXQgd2UKKwkqIGRpc2NhcmQgZHVyaW5nIHNoaWZ0aW5nLgorCSovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRSQUlMX1NVUlJPR0FURV9JTkRFWF9CTE9DS19MRU5HVEhfID0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKDEwIC0gVHJpZS5JTkRFWF9TVEFHRV8xX1NISUZUXyk7CisJLyoqCisJKiBOdW1iZXIgb2YgZGF0YSB2YWx1ZXMgaW4gYSBzdGFnZSAyIChkYXRhIGFycmF5KSBibG9jay4KKwkqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVRBX0JMT0NLX0xFTkdUSF8gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IFRyaWUuSU5ERVhfU1RBR0VfMV9TSElGVF87CisgICAgLyoqCisgICAgKiBOdW1iZXIgb2YgY29kZXBvaW50cyBpbiBhIHN0YWdlIDIgYmxvY2sKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVRBX0JMT0NLX1NVUFBMRU1FTlRBUllfTEVOR1RIXyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEFfQkxPQ0tfTEVOR1RIXyA8PCAxMDsKKyAgICAvKioKKyAgICAqIFRyaWUgaW5zdGFuY2UKKyAgICAqLworICAgIHByaXZhdGUgVHJpZSBtX3RyaWVfOworICAgIC8qKgorICAgICogSW5pdGlhbCB2YWx1ZSBmb3IgdHJpZSB2YWx1ZXMKKyAgICAqLworICAgIHByaXZhdGUgaW50IG1faW5pdGlhbFZhbHVlXzsKKyAgICAvKioKKyAgICAqIE5leHQgZWxlbWVudCByZXN1bHRzIGFuZCBkYXRhLgorICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9jdXJyZW50Q29kZXBvaW50XzsKKyAgICBwcml2YXRlIGludCBtX25leHRDb2RlcG9pbnRfOworICAgIHByaXZhdGUgaW50IG1fbmV4dFZhbHVlXzsKKyAgICBwcml2YXRlIGludCBtX25leHRJbmRleF87CisgICAgcHJpdmF0ZSBpbnQgbV9uZXh0QmxvY2tfOworICAgIHByaXZhdGUgaW50IG1fbmV4dEJsb2NrSW5kZXhfOworICAgIHByaXZhdGUgaW50IG1fbmV4dFRyYWlsSW5kZXhPZmZzZXRfOworICAgIC8qKgorICAgICogVGhpcyBpcyB0aGUgcmV0dXJuIHJlc3VsdCBlbGVtZW50CisgICAgKi8KKyAgICBwcml2YXRlIGludCBtX3N0YXJ0XzsKKyAgICBwcml2YXRlIGludCBtX2xpbWl0XzsKKyAgICBwcml2YXRlIGludCBtX3ZhbHVlXzsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhckFycmF5SXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyQXJyYXlJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGZjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhckFycmF5SXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDkwIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJBcnJheUl0ZXJhdG9yLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMC8zMSAyMjozNToyMCAkIAorKiAkUmV2aXNpb246IDEuMyAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CisKKworLyoqCisgKiBAYXV0aG9yIERvdWcgRmVsdAorICoKKyAqLworCitwdWJsaWMgZmluYWwgY2xhc3MgVUNoYXJBcnJheUl0ZXJhdG9yIGV4dGVuZHMgVUNoYXJhY3Rlckl0ZXJhdG9yIHsKKyAgICBwcml2YXRlIGZpbmFsIGNoYXJbXSB0ZXh0OworICAgIHByaXZhdGUgZmluYWwgaW50IHN0YXJ0OworICAgIHByaXZhdGUgZmluYWwgaW50IGxpbWl0OworICAgIHByaXZhdGUgaW50IHBvczsKKworICAgIHB1YmxpYyBVQ2hhckFycmF5SXRlcmF0b3IoY2hhcltdIHRleHQsIGludCBzdGFydCwgaW50IGxpbWl0KSB7CisgICAgICAgIGlmIChzdGFydCA8IDAgfHwgbGltaXQgPiB0ZXh0Lmxlbmd0aCB8fCBzdGFydCA+IGxpbWl0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzdGFydDogIiArIHN0YXJ0ICsgIiBvciBsaW1pdDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxpbWl0ICsgIiBvdXQgb2YgcmFuZ2UgWzAsICIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdGV4dC5sZW5ndGggKyAiKSIpOworICAgICAgICB9CisgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDsKKyAgICAgICAgdGhpcy5saW1pdCA9IGxpbWl0OworCisgICAgICAgIHRoaXMucG9zID0gc3RhcnQ7CisgICAgfQorCisgICAgcHVibGljIGludCBjdXJyZW50KCkgeworICAgICAgICByZXR1cm4gcG9zIDwgbGltaXQgPyB0ZXh0W3Bvc10gOiBET05FOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgeworICAgICAgICByZXR1cm4gbGltaXQgLSBzdGFydDsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEluZGV4KCkgeworICAgICAgICByZXR1cm4gcG9zIC0gc3RhcnQ7CisgICAgfQorCisgICAgcHVibGljIGludCBuZXh0KCkgeworICAgICAgICByZXR1cm4gcG9zIDwgbGltaXQgPyB0ZXh0W3BvcysrXSA6IERPTkU7CisgICAgfQorCisgICAgcHVibGljIGludCBwcmV2aW91cygpIHsKKyAgICAgICAgcmV0dXJuIHBvcyA+IHN0YXJ0ID8gdGV4dFstLXBvc10gOiBET05FOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEluZGV4KGludCBpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbGltaXQgLSBzdGFydCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oImluZGV4OiAiICsgaW5kZXggKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb3V0IG9mIHJhbmdlIFswLCAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAobGltaXQgLSBzdGFydCkgKyAiKSIpOworICAgICAgICB9CisgICAgICAgIHBvcyA9IHN0YXJ0ICsgaW5kZXg7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRUZXh0KGNoYXJbXSBmaWxsSW4sIGludCBvZmZzZXQpIHsKKyAgICAgICAgaW50IGxlbiA9IGxpbWl0IC0gc3RhcnQ7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGV4dCwgc3RhcnQsIGZpbGxJbiwgb2Zmc2V0LCBsZW4pOworICAgICAgICByZXR1cm4gbGVuOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgaXRlcmF0b3IsIGRvZXMgbm90IGNsb25lIHRoZSB1bmRlcmx5aW5nIAorICAgICAqIDxjb2RlPlJlcGxhY2VhYmxlPC9jb2RlPm9iamVjdAorICAgICAqIEByZXR1cm4gY29weSBvZiB0aGlzIGl0ZXJhdG9yCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpeworICAgICAgICB0cnkgeworICAgICAgICAgIHJldHVybiBzdXBlci5jbG9uZSgpOworICAgICAgICB9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gbmV2ZXIgaW52b2tlZAorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJJdGVyYXRvcldyYXBwZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJJdGVyYXRvcldyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDc1YjljCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAvdXNyL2N2cy9pY3U0ai9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9JQ1VDaGFyYWN0ZXJJdGVyYXRvci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA2LzIwIDAxOjE4OjA3ICQgCisgKiAkUmV2aXNpb246IDEuMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworIAorcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworCitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCBVQ2hhcmFjdGVySXRlcmF0b3IgYW5kIGltcGxlbWVudHMgdGhlIAorICogQ2hhcmFjdGVySXRlcmF0b3IgcHJvdG9jb2wKKyAqIEBhdXRob3IgcmFtCisgKi8KK3B1YmxpYyBjbGFzcyBVQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyIGltcGxlbWVudHMgQ2hhcmFjdGVySXRlcmF0b3J7CisgICAgCisgICAgcHVibGljIFVDaGFyYWN0ZXJJdGVyYXRvcldyYXBwZXIoVUNoYXJhY3Rlckl0ZXJhdG9yIGl0ZXIpeworICAgICAgICB0aGlzLml0ZXJhdG9yID0gaXRlcjsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBVQ2hhcmFjdGVySXRlcmF0b3IgaXRlcmF0b3I7CisKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIHRvIGdldEJlZ2luSW5kZXgoKSBhbmQgcmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHRoYXQKKyAgICAgKiBwb3NpdGlvbi4KKyAgICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQsIG9yIERPTkUgaWYgdGhlIHRleHQgaXMgZW1wdHkKKyAgICAgKiBAc2VlICNnZXRCZWdpbkluZGV4KCkKKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBmaXJzdCgpeworICAgIAkvL1VDaGFyYWN0ZXJJdGVyYXRvciBhbHdheXMgaXRlcmF0ZXMgZnJvbSAwIHRvIGxlbmd0aAorICAgICAgICBpdGVyYXRvci5zZXRUb1N0YXJ0KCk7CisgICAgICAgIHJldHVybiAoY2hhcilpdGVyYXRvci5jdXJyZW50KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcG9zaXRpb24gdG8gZ2V0RW5kSW5kZXgoKS0xIChnZXRFbmRJbmRleCgpIGlmIHRoZSB0ZXh0IGlzIGVtcHR5KQorICAgICAqIGFuZCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIgYXQgdGhhdCBwb3NpdGlvbi4KKyAgICAgKiBAcmV0dXJuIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgdGV4dCwgb3IgRE9ORSBpZiB0aGUgdGV4dCBpcyBlbXB0eQorICAgICAqIEBzZWUgI2dldEVuZEluZGV4KCkKKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBsYXN0KCl7CisgICAgICAgIGl0ZXJhdG9yLnNldFRvTGltaXQoKTsKKyAgICAgICAgcmV0dXJuIChjaGFyKWl0ZXJhdG9yLnByZXZpb3VzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIChhcyByZXR1cm5lZCBieSBnZXRJbmRleCgpKS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gb3IgRE9ORSBpZiB0aGUgY3VycmVudAorICAgICAqIHBvc2l0aW9uIGlzIG9mZiB0aGUgZW5kIG9mIHRoZSB0ZXh0LgorICAgICAqIEBzZWUgI2dldEluZGV4KCkKKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBjdXJyZW50KCl7CisgICAgICAgIHJldHVybiAoY2hhcikgaXRlcmF0b3IuY3VycmVudCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluY3JlbWVudHMgdGhlIGl0ZXJhdG9yJ3MgaW5kZXggYnkgb25lIGFuZCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIKKyAgICAgKiBhdCB0aGUgbmV3IGluZGV4LiAgSWYgdGhlIHJlc3VsdGluZyBpbmRleCBpcyBncmVhdGVyIG9yIGVxdWFsCisgICAgICogdG8gZ2V0RW5kSW5kZXgoKSwgdGhlIGN1cnJlbnQgaW5kZXggaXMgcmVzZXQgdG8gZ2V0RW5kSW5kZXgoKSBhbmQKKyAgICAgKiBhIHZhbHVlIG9mIERPTkUgaXMgcmV0dXJuZWQuCisgICAgICogQHJldHVybiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBuZXcgcG9zaXRpb24gb3IgRE9ORSBpZiB0aGUgbmV3CisgICAgICogcG9zaXRpb24gaXMgb2ZmIHRoZSBlbmQgb2YgdGhlIHRleHQgcmFuZ2UuCisgICAgICovCisgICAgcHVibGljIGNoYXIgbmV4dCgpeworICAgICAgICAvL3ByZS1pbmNyZW1lbnQKKyAgICAgICAgaXRlcmF0b3IubmV4dCgpOworICAgICAgICByZXR1cm4gKGNoYXIpIGl0ZXJhdG9yLmN1cnJlbnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNyZW1lbnRzIHRoZSBpdGVyYXRvcidzIGluZGV4IGJ5IG9uZSBhbmQgcmV0dXJucyB0aGUgY2hhcmFjdGVyCisgICAgICogYXQgdGhlIG5ldyBpbmRleC4gSWYgdGhlIGN1cnJlbnQgaW5kZXggaXMgZ2V0QmVnaW5JbmRleCgpLCB0aGUgaW5kZXgKKyAgICAgKiByZW1haW5zIGF0IGdldEJlZ2luSW5kZXgoKSBhbmQgYSB2YWx1ZSBvZiBET05FIGlzIHJldHVybmVkLgorICAgICAqIEByZXR1cm4gdGhlIGNoYXJhY3RlciBhdCB0aGUgbmV3IHBvc2l0aW9uIG9yIERPTkUgaWYgdGhlIGN1cnJlbnQKKyAgICAgKiBwb3NpdGlvbiBpcyBlcXVhbCB0byBnZXRCZWdpbkluZGV4KCkuCisgICAgICovCisgICAgcHVibGljIGNoYXIgcHJldmlvdXMoKXsKKyAgICAgICAgLy9wcmUtZGVjcmVtZW50CisgICAgICAgIHJldHVybiAoY2hhcikgaXRlcmF0b3IucHJldmlvdXMoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwb3NpdGlvbiB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoZSB0ZXh0IGFuZCByZXR1cm5zIHRoYXQKKyAgICAgKiBjaGFyYWN0ZXIuCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHRleHQuICBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbQorICAgICAqIGdldEJlZ2luSW5kZXgoKSB0byBnZXRFbmRJbmRleCgpLiAgQW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlzIHRocm93bgorICAgICAqIGlmIGFuIGludmFsaWQgdmFsdWUgaXMgc3VwcGxpZWQuCisgICAgICogQHJldHVybiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gb3IgRE9ORSBpZiB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGlzIGVxdWFsIHRvIGdldEVuZEluZGV4KCkKKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBzZXRJbmRleChpbnQgcG9zaXRpb24peworICAgICAgICBpdGVyYXRvci5zZXRJbmRleChwb3NpdGlvbik7CisgICAgICAgIHJldHVybiAoY2hhcikgaXRlcmF0b3IuY3VycmVudCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0YXJ0IGluZGV4IG9mIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gdGhlIGluZGV4IGF0IHdoaWNoIHRoZSB0ZXh0IGJlZ2lucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEJlZ2luSW5kZXgoKXsKKyAgICAJLy9VQ2hhcmFjdGVySXRlcmF0b3IgYWx3YXlzIHN0YXJ0cyBmcm9tIDAKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZW5kIGluZGV4IG9mIHRoZSB0ZXh0LiAgVGhpcyBpbmRleCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0CisgICAgICogY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgZW5kIG9mIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gdGhlIGluZGV4IGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgdGV4dAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0RW5kSW5kZXgoKXsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLmdldExlbmd0aCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaW5kZXguCisgICAgICogQHJldHVybiB0aGUgY3VycmVudCBpbmRleC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEluZGV4KCl7CisgICAgICAgIHJldHVybiBpdGVyYXRvci5nZXRJbmRleCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGNvcHkgb2YgdGhpcyBpdGVyYXRvcgorICAgICAqIEByZXR1cm4gQSBjb3B5IG9mIHRoaXMKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCl7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBVQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyIHJlc3VsdCA9IChVQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyKSBzdXBlci5jbG9uZSgpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yID0gKFVDaGFyYWN0ZXJJdGVyYXRvcil0aGlzLml0ZXJhdG9yLmNsb25lKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7ICAgICAgCisgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gb25seSBpbnZva2VkIGlmIGJhZCB1bmRlcmx5aW5nIGNoYXJhY3RlciBpdGVyYXRvcgorICAgICAgICB9CisgICAgfSAgIAorCit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJOYW1lLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhcmFjdGVyTmFtZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjU2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhcmFjdGVyTmFtZS5qYXZhCkBAIC0wLDAgKzEsMTcxMCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IAorKiAgICAgL3Vzci9jdnMvaWN1NGovaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVUNoYXJhY3Rlck5hbWUuamF2YSAkIAorKiAkRGF0ZTogMjAwMi8xMC8wMyAxOTozODo0NCAkIAorKiAkUmV2aXNpb246IDEuMiAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlVuaWNvZGVTZXQ7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlckNhdGVnb3J5OworCisvKioKKyogSW50ZXJuYWwgY2xhc3MgdG8gbWFuYWdlIGNoYXJhY3RlciBuYW1lcy4KKyogU2luY2UgZGF0YSBpbiA8YSBocmVmPVVDaGFyYWN0ZXJOYW1lREIuaHRtbD5VQ2hhcmFjdGVyTmFtZURCPC9hPiBpcyBzdG9yZWQKKyogaW4gYW4gYXJyYXkgb2YgY2hhciwgYnkgZGVmYXVsdCBpbmRleGVzIHVzZWQgaW4gdGhpcyBjbGFzcyBpcyByZWZlcmluZyB0byAKKyogYSAyIGJ5dGUgY291bnQsIHVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLiBDYXNlcyB3aGVyZSB0aGUgaW5kZXggaXMgcmVmZXJpbmcgCisqIHRvIGEgYnl0ZSBjb3VudCwgdGhlIGluZGV4IGlzIGhhbHZlZCBhbmQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGluZGV4IGlzIAorKiBldmVuIG9yIG9kZCwgdGhlIE1TQiBvciBMU0Igb2YgdGhlIHJlc3VsdCBjaGFyIGF0IHRoZSBoYWx2ZWQgaW5kZXggaXMgCisqIHJldHVybmVkLiBGb3IgaW5kZXhlcyB0byBhbiBhcnJheSBvZiBpbnQsIHRoZSBpbmRleCBpcyBtdWx0aXBsaWVkIGJ5IDIsIAorKiByZXN1bHQgY2hhciBhdCB0aGUgbXVsdGlwbGllZCBpbmRleCBhbmQgaXRzIGZvbGxvd2luZyBjaGFyIGlzIHJldHVybmVkIGFzIGFuIAorKiBpbnQuCisqIDxhIGhyZWY9VUNoYXJhY3Rlci5odG1sPlVDaGFyYWN0ZXI8L2E+IGFjdHMgYXMgYSBwdWJsaWMgZmFjYWRlIGZvciB0aGlzIGNsYXNzCisqIE5vdGUgOiAwIC0gMHgxRiBhcmUgY29udHJvbCBjaGFyYWN0ZXJzIHdpdGhvdXQgbmFtZXMgaW4gVW5pY29kZSAzLjAKKyogSW5mb3JtYXRpb24gb24gcGFyc2luZyBvZiB0aGUgYmluYXJ5IGRhdGEgaXMgbG9jYXRlZCBhdAorKiA8YSBocmVmPW9zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2ljdTRqaHRtbC9jb20vaWJtL2ljdS90ZXh0L3JlYWRtZS5odG1sPgorKiBSZWFkTWU8L2E+CisqIEBhdXRob3IgU3luIFdlZSBRdWVrCisqIEBzaW5jZSBub3YwNzAwCisqLworCitwdWJsaWMgZmluYWwgY2xhc3MgVUNoYXJhY3Rlck5hbWUKK3sgICAKKyAgICAvLyBwdWJsaWMgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIE51bWJlciBvZiBsaW5lcyBwZXIgZ3JvdXAgCisgICAgKiAxIDw8IEdST1VQX1NISUZUXworICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElORVNfUEVSX0dST1VQXyA9IDEgPDwgNTsKKyAgICAvKioKKyAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBncm91cHMKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG1fZ3JvdXBjb3VudF8gPSAwOworICAgIAorICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgVUNoYXJhY3Rlck5hbWUKKyAgICAgKiBAcmV0dXJuIG9ubHkgaW5zdGFuY2Ugb2YgVUNoYXJhY3Rlck5hbWUKKyAgICAgKiBAZXhjZXB0aW9uIFJ1bnRpbWVFeGNlcHRpb24gdGhyb3duIHdoZW4gcmVhZGluZyBvZiBuYW1lIGRhdGEgZmFpbHMKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFVDaGFyYWN0ZXJOYW1lIGdldEluc3RhbmNlKCkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGlmIChJTlNUQU5DRV8gPT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBJTlNUQU5DRV8gPSBuZXcgVUNoYXJhY3Rlck5hbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSU5TVEFOQ0VfOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIFJldHJpZXZlIHRoZSBuYW1lIG9mIGEgVW5pY29kZSBjb2RlIHBvaW50LgorICAgICogRGVwZW5kaW5nIG9uIDxjb2RlPmNob2ljZTwvY29kZT4sIHRoZSBjaGFyYWN0ZXIgbmFtZSB3cml0dGVuIGludG8gdGhlIAorICAgICogYnVmZmVyIGlzIHRoZSAibW9kZXJuIiBuYW1lIG9yIHRoZSBuYW1lIHRoYXQgd2FzIGRlZmluZWQgaW4gVW5pY29kZSAKKyAgICAqIHZlcnNpb24gMS4wLgorICAgICogVGhlIG5hbWUgY29udGFpbnMgb25seSAiaW52YXJpYW50IiBjaGFyYWN0ZXJzCisgICAgKiBsaWtlIEEtWiwgMC05LCBzcGFjZSwgYW5kICctJy4KKyAgICAqCisgICAgKiBAcGFyYW0gY2ggdGhlIGNvZGUgcG9pbnQgZm9yIHdoaWNoIHRvIGdldCB0aGUgbmFtZS4KKyAgICAqIEBwYXJhbSBjaG9pY2UgU2VsZWN0b3IgZm9yIHdoaWNoIG5hbWUgdG8gZ2V0LgorICAgICogQHJldHVybiBpZiBjb2RlIHBvaW50IGlzIGFib3ZlIDB4MWZmZiwgbnVsbCBpcyByZXR1cm5lZAorICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKGludCBjaCwgaW50IGNob2ljZSkKKyAgICB7CisgICAgICAgIGlmIChjaCA8IFVDaGFyYWN0ZXIuTUlOX1ZBTFVFIHx8IGNoID4gVUNoYXJhY3Rlci5NQVhfVkFMVUUgfHwgCisgICAgICAgICAgICBjaG9pY2UgPiBVQ2hhcmFjdGVyTmFtZUNob2ljZS5DSEFSX05BTUVfQ0hPSUNFX0NPVU5UKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBnZXRBbGdOYW1lKGNoLCBjaG9pY2UpOworICAgICAgICAgIAorICAgICAgICAvLyBnZXR0aW5nIG5vcm1hbCBjaGFyYWN0ZXIgbmFtZQorICAgICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgcmVzdWx0Lmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIGlmIChjaG9pY2UgPT0gVUNoYXJhY3Rlck5hbWVDaG9pY2UuRVhURU5ERURfQ0hBUl9OQU1FKSB7ICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0RXh0ZW5kZWROYW1lKGNoKTsgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0R3JvdXBOYW1lKGNoLCBjaG9pY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgKiBGaW5kIGEgY2hhcmFjdGVyIGJ5IGl0cyBuYW1lIGFuZCByZXR1cm4gaXRzIGNvZGUgcG9pbnQgdmFsdWUKKyAgICAqIEBwYXJhbSBjaGFyYWN0ZXIgbmFtZQorICAgICogQHBhcmFtIGNob2ljZSBzZWxlY3RvciB0byBpbmRpY2F0ZSBpZiBhcmd1bWVudCBuYW1lIGlzIGEgVW5pY29kZSAxLjAgCisgICAgKiAgICAgICAgb3IgdGhlIG1vc3QgY3VycmVudCB2ZXJzaW9uIAorICAgICogQHJldHVybiBjb2RlIHBvaW50CisgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldENoYXJGcm9tTmFtZShpbnQgY2hvaWNlLCBTdHJpbmcgbmFtZSkKKyAgICB7CisgICAgICAgIC8vIGNoZWNrcyBmb3IgaWxsZWdhbCBhcmd1bWVudHMKKyAgICAgICAgaWYgKGNob2ljZSA+PSBVQ2hhcmFjdGVyTmFtZUNob2ljZS5DSEFSX05BTUVfQ0hPSUNFX0NPVU5UIHx8IAorICAgICAgICAgICAgbmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyB0cnkgZXh0ZW5kZWQgbmFtZXMgZmlyc3QgIAorICAgICAgICBpbnQgcmVzdWx0ID0gZ2V0RXh0ZW5kZWRDaGFyKG5hbWUudG9Mb3dlckNhc2UoKSwgY2hvaWNlKTsKKyAgICAgICAgaWYgKHJlc3VsdCA+PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIHVwcGVyQ2FzZU5hbWUgPSBuYW1lLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIC8vIHRyeSBhbGdvcml0aG1pYyBuYW1lcyBmaXJzdCwgaWYgZmFpbHMgdGhlbiB0cnkgZ3JvdXAgbmFtZXMKKyAgICAgICAgLy8gaW50IHJlc3VsdCA9IGdldEFsZ29yaXRobUNoYXIoY2hvaWNlLCB1cHBlcmNhc2VuYW1lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjaG9pY2UgIT0gVUNoYXJhY3Rlck5hbWVDaG9pY2UuVU5JQ09ERV8xMF9DSEFSX05BTUUpIHsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICBpZiAobV9hbGdvcml0aG1fICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG1fYWxnb3JpdGhtXy5sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGNvdW50IC0tOyBjb3VudCA+PSAwOyBjb3VudCAtLSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fYWxnb3JpdGhtX1tjb3VudF0uZ2V0Q2hhcih1cHBlckNhc2VOYW1lKTsgCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKGNob2ljZSA9PSBVQ2hhcmFjdGVyTmFtZUNob2ljZS5FWFRFTkRFRF9DSEFSX05BTUUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldEdyb3VwQ2hhcih1cHBlckNhc2VOYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyTmFtZUNob2ljZS5VTklDT0RFX0NIQVJfTkFNRSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0R3JvdXBDaGFyKHVwcGVyQ2FzZU5hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLlVOSUNPREVfMTBfQ0hBUl9OQU1FKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldEdyb3VwQ2hhcih1cHBlckNhc2VOYW1lLCBjaG9pY2UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8vIHRoZXNlIGFyZSBhbGwgVUNoYXJhY3Rlck5hbWVJdGVyYXRvciB1c2UgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiBSZWFkcyBhIGJsb2NrIG9mIGNvbXByZXNzZWQgbGVuZ3RocyBvZiAzMiBzdHJpbmdzIGFuZCBleHBhbmRzIHRoZW0gaW50byAKKyAgICAqIG9mZnNldHMgYW5kIGxlbmd0aHMgZm9yIGVhY2ggc3RyaW5nLiBMZW5ndGhzIGFyZSBzdG9yZWQgd2l0aCBhIAorICAgICogdmFyaWFibGUtd2lkdGggZW5jb2RpbmcgaW4gY29uc2VjdXRpdmUgbmliYmxlczoKKyAgICAqIElmIGEgbmliYmxlPDB4YywgdGhlbiBpdCBpcyB0aGUgbGVuZ3RoIGl0c2VsZiAoMCA9IGVtcHR5IHN0cmluZykuCisgICAgKiBJZiBhIG5pYmJsZT49MHhjLCB0aGVuIGl0IGZvcm1zIGEgbGVuZ3RoIHZhbHVlIHdpdGggdGhlIGZvbGxvd2luZyAKKyAgICAqIG5pYmJsZS4KKyAgICAqIFRoZSBvZmZzZXRzIGFuZCBsZW5ndGhzIGFycmF5cyBtdXN0IGJlIGF0IGxlYXN0IDMzIChvbmUgbW9yZSkgbG9uZyAKKyAgICAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gY2hlY2sgaGVyZSBhdCB0aGUgZW5kIGlmIHRoZSBsYXN0IG5pYmJsZSBpcyBzdGlsbCAKKyAgICAqIHVzZWQuCisgICAgKiBAcGFyYW0gaW5kZXggb2YgZ3JvdXAgc3RyaW5nIG9iamVjdCBpbiBhcnJheQorICAgICogQHBhcmFtIG9mZnNldHMgYXJyYXkgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgb2Zmc2V0cworICAgICogQHBhcmFtIGxlbmd0aHMgYXJyYXkgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgbGVuZ3RoCisgICAgKiBAcmV0dXJuIG5leHQgaW5kZXggb2YgdGhlIGRhdGEgc3RyaW5nIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsZW5ndGhzIAorICAgICogICAgICAgICBpbiB0ZXJtcyBvZiBieXRlIGFkZHJlc3MKKyAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0R3JvdXBMZW5ndGhzKGludCBpbmRleCwgY2hhciBvZmZzZXRzW10sIGNoYXIgbGVuZ3Roc1tdKSAKKyAgICB7CisgICAgICAgIGNoYXIgbGVuZ3RoID0gMHhmZmZmOworICAgICAgICBieXRlIGIgPSAwLAorICAgICAgICAgICAgbiA9IDA7CisgICAgICAgIGludCBzaGlmdDsKKyAgICAgICAgaW5kZXggPSBpbmRleCAqIG1fZ3JvdXBzaXplXzsgLy8gYnl0ZSBjb3VudCBvZmZzZXRzIG9mIGdyb3VwIHN0cmluZ3MKKyAgICAgICAgaW50IHN0cmluZ29mZnNldCA9IFVDaGFyYWN0ZXJVdGlsaXR5LnRvSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncm91cGluZm9fW2luZGV4ICsgT0ZGU0VUX0hJR0hfT0ZGU0VUX10sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncm91cGluZm9fW2luZGV4ICsgT0ZGU0VUX0xPV19PRkZTRVRfXSk7CisgICAgICAgICAgICAKKyAgICAgICAgb2Zmc2V0c1swXSA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBhbGwgMzIgbGVuZ3RocyBtdXN0IGJlIHJlYWQgdG8gZ2V0IHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGdyb3VwIAorICAgICAgICAvLyBzdHJpbmcKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMSU5FU19QRVJfR1JPVVBfOyBzdHJpbmdvZmZzZXQgKyspIHsKKyAgICAgICAgICAgIGIgPSBtX2dyb3Vwc3RyaW5nX1tzdHJpbmdvZmZzZXRdOworICAgICAgICAgICAgc2hpZnQgPSA0OworICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChzaGlmdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gZ2V0dGluZyBuaWJibGUKKyAgICAgICAgICAgICAgICBuID0gKGJ5dGUpKChiID4+IHNoaWZ0KSAmIDB4MEYpOyAgIAorICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMHhmZmZmICYmIG4gPiBTSU5HTEVfTklCQkxFX01BWF8pIHsKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gKGNoYXIpKChuIC0gMTIpIDw8IDQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCAhPSAweGZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3Roc1tpXSA9IChjaGFyKSgobGVuZ3RoIHwgbikgKyAxMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aHNbaV0gPSAoY2hhciluOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IExJTkVTX1BFUl9HUk9VUF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0c1tpICsgMV0gPSAoY2hhcikob2Zmc2V0c1tpXSArIGxlbmd0aHNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAweGZmZmY7CisgICAgICAgICAgICAgICAgICAgIGkgKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNoaWZ0IC09IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cmluZ29mZnNldDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBhcmd1bWVudCBncm91cCBpbmRleC4KKyAgICAqIFVuaWNvZGVEYXRhLnR4dCB1c2VzICc7JyBhcyBhIGZpZWxkIHNlcGFyYXRvciwgc28gbm8gZmllbGQgY2FuIGNvbnRhaW4gCisgICAgKiAnOycgYXMgcGFydCBvZiBpdHMgY29udGVudHMuIEluIHVuYW1lcy5pY3UsIGl0IGlzIG1hcmtlZCBhcyAKKyAgICAqIHRva2VuWyc7J10gPT0gLTEgb25seSBpZiB0aGUgc2VtaWNvbG9uIGlzIHVzZWQgaW4gdGhlIGRhdGEgZmlsZSAtIHdoaWNoIAorICAgICogaXMgaWZmIHdlIGhhdmUgVW5pY29kZSAxLjAgbmFtZXMgb3IgSVNPIGNvbW1lbnRzLiAKKyAgICAqIFNvLCBpdCB3aWxsIGJlIHRva2VuWyc7J10gPT0gLTEgaWYgd2Ugc3RvcmUgVTEuMCBuYW1lcy9JU08gY29tbWVudHMgCisgICAgKiBhbHRob3VnaCB3ZSBrbm93IHRoYXQgaXQgd2lsbCBuZXZlciBiZSBwYXJ0IG9mIGEgbmFtZS4gCisgICAgKiBFcXVpdmFsZW50IHRvIElDVTRDJ3MgZXhwYW5kTmFtZS4KKyAgICAqIEBwYXJhbSBpbmRleCBvZiB0aGUgZ3JvdXAgbmFtZSBzdHJpbmcgaW4gYnl0ZSBjb3VudAorICAgICogQHBhcmFtIGxlbmd0aCBvZiB0aGUgZ3JvdXAgbmFtZSBzdHJpbmcKKyAgICAqIEBwYXJhbSBjaG9pY2Ugb2YgVW5pY29kZSAxLjAgbmFtZSBvciB0aGUgbW9zdCBjdXJyZW50IG5hbWUKKyAgICAqIEByZXR1cm4gbmFtZSBvZiB0aGUgZ3JvdXAgCisgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyb3VwTmFtZShpbnQgaW5kZXgsIGludCBsZW5ndGgsIGludCBjaG9pY2UpIAorICAgIHsKKyAgICAgICAgaWYgKGNob2ljZSA9PSBVQ2hhcmFjdGVyTmFtZUNob2ljZS5VTklDT0RFXzEwX0NIQVJfTkFNRQorICAgICAgICAgICAgfHwgY2hvaWNlID09IFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLklTT19DT01NRU5UXykgeworICAgICAgICAgICAgaWYgKCc7JyA+PSBtX3Rva2VudGFibGVfLmxlbmd0aCB8fCBtX3Rva2VudGFibGVfWyc7J10gPT0gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgbW9kZXJuIG5hbWUKKyAgICAgICAgICAgICAgICBpbnQgb2xkaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBpbmRleCArPSBVQ2hhcmFjdGVyVXRpbGl0eS5za2lwQnl0ZVN1YlN0cmluZyhtX2dyb3Vwc3RyaW5nXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgbGVuZ3RoLCAoYnl0ZSknOycpOyAgIAorICAgICAgICAgICAgICAgIGxlbmd0aCAtPSAoaW5kZXggLSBvbGRpbmRleCk7ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoY2hvaWNlID09IFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLklTT19DT01NRU5UXykgeworICAgICAgICAgICAgICAgICAgICAvLyBza2lwcyB0aGUgMS4wIE5hbWUgdG8gdGhlIGlzbyBjb21tZW50IHBhcnQKKyAgICAgICAgICAgICAgICAgICAgb2xkaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gVUNoYXJhY3RlclV0aWxpdHkuc2tpcEJ5dGVTdWJTdHJpbmcobV9ncm91cHN0cmluZ18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBsZW5ndGgsIChieXRlKSc7Jyk7ICAgCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAtPSAoaW5kZXggLSBvbGRpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gdGhlIHNlbWljb2xvbiBieXRlIGlzIGEgdG9rZW4gbnVtYmVyLCB0aGVyZWZvcmUgb25seSBtb2Rlcm4KKyAgICAgICAgICAgICAgICAvLyBuYW1lcyBhcmUgc3RvcmVkIGluIHVuYW1lcy5kYXQgYW5kIHRoZXJlIGlzIG5vIHN1Y2ggCisgICAgICAgICAgICAgICAgLy8gcmVxdWVzdGVkIFVuaWNvZGUgMS4wIG5hbWUgaGVyZQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN5bmNocm9uaXplZCAobV91dGlsU3RyaW5nQnVmZmVyXykgeworICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5kZWxldGUoMCwgbV91dGlsU3RyaW5nQnVmZmVyXy5sZW5ndGgoKSk7CisgICAgICAgICAgICBieXRlIGI7CisgICAgICAgICAgICBjaGFyIHRva2VuOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7KSB7CisgICAgICAgICAgICAgICAgYiA9IG1fZ3JvdXBzdHJpbmdfW2luZGV4ICsgaV07CisgICAgICAgICAgICAgICAgaSArKzsKKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChiID49IG1fdG9rZW50YWJsZV8ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiID09ICc7JykgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5hcHBlbmQoYik7IC8vIGltcGxpY2l0IGxldHRlcgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBtX3Rva2VudGFibGVfW2IgJiAweDAwZmZdOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gMHhGRkZFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgbGVhZCBieXRlIGZvciBhIGRvdWJsZS1ieXRlIHRva2VuCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IG1fdG9rZW50YWJsZV9bYiA8PCA4IHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9ncm91cHN0cmluZ19baW5kZXggKyBpXSAmIDB4MDBmZildOworICAgICAgICAgICAgICAgICAgICAgICAgaSArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYiA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lwIHRoZSBzZW1pY29sb24gaWYgd2UgYXJlIHNlZWtpbmcgZXh0ZW5kZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFtZXMgYW5kIHRoZXJlIHdhcyBubyAyLjAgbmFtZSBidXQgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBhIDEuMCBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3V0aWxTdHJpbmdCdWZmZXJfLmxlbmd0aCgpID09IDAgJiYgY2hvaWNlID09IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyTmFtZUNob2ljZS5FWFRFTkRFRF9DSEFSX05BTUUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGljaXQgbGV0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxTdHJpbmdCdWZmZXJfLmFwcGVuZCgoY2hhcikoYiAmIDB4MDBmZikpOyAKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gd3JpdGUgdG9rZW4gd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclV0aWxpdHkuZ2V0TnVsbFRlcm1CeXRlU3ViU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxTdHJpbmdCdWZmZXJfLCBtX3Rva2Vuc3RyaW5nXywgdG9rZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgaWYgKG1fdXRpbFN0cmluZ0J1ZmZlcl8ubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdXRpbFN0cmluZ0J1ZmZlcl8udG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBSZXRyaWV2ZXMgdGhlIGV4dGVuZGVkIG5hbWUKKyAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RXh0ZW5kZWROYW1lKGludCBjaCkgCisgICAgeyAgICAKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGdldE5hbWUoY2gsIFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLlVOSUNPREVfQ0hBUl9OQU1FKTsgICAgCisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgeyAgICAgICAgCisgICAgICAgICAgICBpZiAoZ2V0VHlwZShjaCkgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkNPTlRST0wpIHsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXROYW1lKGNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLlVOSUNPREVfMTBfQ0hBUl9OQU1FKTsgICAgICAgIAorICAgICAgICAgICAgfSAgICAgICAgCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRFeHRlbmRlZE9yMTBOYW1lKGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZ3JvdXAgaW5kZXggZm9yIHRoZSBjb2RlcG9pbnQsIG9yIHRoZSBncm91cCBiZWZvcmUgaXQuCisgICAgICogQHBhcmFtIGNvZGVwb2ludAorICAgICAqIEByZXR1cm4gZ3JvdXAgaW5kZXggY29udGFpbmluZyBjb2RlcG9pbnQgb3IgdGhlIGdyb3VwIGJlZm9yZSBpdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEdyb3VwKGludCBjb2RlcG9pbnQpCisgICAgeworICAgICAgICBpbnQgZW5kR3JvdXAgPSBtX2dyb3VwY291bnRfOworICAgICAgICBpbnQgbXNiICAgICAgPSBnZXRDb2RlcG9pbnRNU0IoY29kZXBvaW50KTsKKyAgICAgICAgaW50IHJlc3VsdCAgID0gMDsgICAgCisgICAgICAgIC8vIGJpbmFyeSBzZWFyY2ggZm9yIHRoZSBncm91cCBvZiBuYW1lcyB0aGF0IGNvbnRhaW5zIHRoZSBvbmUgZm9yIAorICAgICAgICAvLyBjb2RlCisgICAgICAgIC8vIGZpbmQgdGhlIGdyb3VwIHRoYXQgY29udGFpbnMgY29kZXBvaW50LCBvciB0aGUgaGlnaGVzdCBiZWZvcmUgaXQKKyAgICAgICAgd2hpbGUgKHJlc3VsdCA8IGVuZEdyb3VwIC0gMSkgeworICAgICAgICAgICAgaW50IGdpbmRleCA9IChyZXN1bHQgKyBlbmRHcm91cCkgPj4gMTsKKyAgICAgICAgICAgIGlmIChtc2IgPCBnZXRHcm91cE1TQihnaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgZW5kR3JvdXAgPSBnaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBnaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZXh0ZW5kZWQgYW5kIDEuMCBuYW1lIHdoZW4gdGhlIG1vc3QgY3VycmVudCB1bmljb2RlIG5hbWVzCisgICAgICogZmFpbAorICAgICAqIEBwYXJhbSBjaCBjb2RlcG9pbnQKKyAgICAgKiBAcmV0dXJuIG5hbWUgb2YgY29kZXBvaW50IGV4dGVuZGVkIG9yIDEuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RXh0ZW5kZWRPcjEwTmFtZShpbnQgY2gpCisgICAgeworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgaWYgKGdldFR5cGUoY2gpID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5DT05UUk9MKSB7ICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSBnZXROYW1lKGNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlck5hbWVDaG9pY2UuVU5JQ09ERV8xMF9DSEFSX05BTUUpOyAgICAgICAgCisgICAgICAgIH0gICAgICAgIAorICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCB0eXBlID0gZ2V0VHlwZShjaCk7ICAgIAorICAgICAgICAgICAgLy8gUmV0dXJuIHVua25vd24gaWYgdGhlIHRhYmxlIG9mIG5hbWVzIGFib3ZlIGlzIG5vdCB1cCB0byAKKyAgICAgICAgICAgIC8vIGRhdGUuCisgICAgICAgICAgICBpZiAodHlwZSA+PSBUWVBFX05BTUVTXy5sZW5ndGgpIHsgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9UWVBFX05BTUVfOyAgICAKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIHsgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRZUEVfTkFNRVNfW3R5cGVdOyAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobV91dGlsU3RyaW5nQnVmZmVyXykgeworICAgICAgICAgICAgICAgIG1fdXRpbFN0cmluZ0J1ZmZlcl8uZGVsZXRlKDAsIG1fdXRpbFN0cmluZ0J1ZmZlcl8ubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fdXRpbFN0cmluZ0J1ZmZlcl8uYXBwZW5kKCc8Jyk7CisgICAgICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBtX3V0aWxTdHJpbmdCdWZmZXJfLmFwcGVuZCgnLScpOworICAgICAgICAgICAgICAgIFN0cmluZyBjaFN0ciA9IEludGVnZXIudG9IZXhTdHJpbmcoY2gpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgaW50IHplcm9zID0gNCAtIGNoU3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHdoaWxlICh6ZXJvcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5hcHBlbmQoJzAnKTsKKyAgICAgICAgICAgICAgICAgICAgemVyb3MgLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fdXRpbFN0cmluZ0J1ZmZlcl8uYXBwZW5kKGNoU3RyKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxTdHJpbmdCdWZmZXJfLmFwcGVuZCgnPicpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fdXRpbFN0cmluZ0J1ZmZlcl8udG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBNU0IgZnJvbSB0aGUgZ3JvdXAgaW5kZXgKKyAgICAgKiBAcGFyYW0gZ2luZGV4IGdyb3VwIGluZGV4CisgICAgICogQHJldHVybiB0aGUgTVNCIG9mIHRoZSBncm91cCBpZiBnaW5kZXggaXMgdmFsaWQsIC0xIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0R3JvdXBNU0IoaW50IGdpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChnaW5kZXggPj0gbV9ncm91cGNvdW50XykgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2dyb3VwaW5mb19bZ2luZGV4ICogbV9ncm91cHNpemVfXTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgTVNCIG9mIHRoZSBjb2RlcG9pbnQKKyAgICAgKiBAcGFyYW0gY29kZXBvaW50IAorICAgICAqIEByZXR1cm4gdGhlIE1TQiBvZiB0aGUgY29kZXBvaW50CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0Q29kZXBvaW50TVNCKGludCBjb2RlcG9pbnQpCisgICAgeworICAgICAgICByZXR1cm4gY29kZXBvaW50ID4+IEdST1VQX1NISUZUXzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWF4aW11bSBjb2RlcG9pbnQgKyAxIG9mIHRoZSBncm91cAorICAgICAqIEBwYXJhbSBtc2IgbW9zdCBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBncm91cAorICAgICAqIEByZXR1cm4gbGltaXQgY29kZXBvaW50IG9mIHRoZSBncm91cAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldEdyb3VwTGltaXQoaW50IG1zYikKKyAgICB7CisgICAgICAgIHJldHVybiAobXNiIDw8IEdST1VQX1NISUZUXykgKyBMSU5FU19QRVJfR1JPVVBfOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIGNvZGVwb2ludCBvZiB0aGUgZ3JvdXAKKyAgICAgKiBAcGFyYW0gbXNiIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiB0aGUgZ3JvdXAKKyAgICAgKiBAcmV0dXJuIG1pbmltdW0gY29kZXBvaW50IG9mIHRoZSBncm91cAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldEdyb3VwTWluKGludCBtc2IpCisgICAgeworICAgICAgICByZXR1cm4gbXNiIDw8IEdST1VQX1NISUZUXzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgb2Zmc2V0IHRvIGEgZ3JvdXAKKyAgICAgKiBAcGFyYW0gY29kZXBvaW50IAorICAgICAqIEByZXR1cm4gb2Zmc2V0IHRvIGEgZ3JvdXAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRHcm91cE9mZnNldChpbnQgY29kZXBvaW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvZGVwb2ludCAmIEdST1VQX01BU0tfOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIG1pbmltdW0gY29kZXBvaW50IG9mIGEgZ3JvdXAKKyAgICAgKiBAcGFyYW0gY29kZXBvaW50CisgICAgICogQHJldHVybiBtaW5pbXVtIGNvZGVwb2ludCBpbiB0aGUgZ3JvdXAgd2hpY2ggY29kZXBvaW50IGJlbG9uZ3MgdG8KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRHcm91cE1pbkZyb21Db2RlcG9pbnQoaW50IGNvZGVwb2ludCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb2RlcG9pbnQgJiB+R1JPVVBfTUFTS187CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldCB0aGUgQWxnb3JpdGhtIHJhbmdlIGxlbmd0aCAKKyAgICAgKiBAcmV0dXJuIEFsZ29yaXRobSByYW5nZSBsZW5ndGgKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEFsZ29yaXRobUxlbmd0aCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9hbGdvcml0aG1fLmxlbmd0aDsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZQorICAgICAqIEBwYXJhbSBpbmRleCBhbGdvcml0aG0gaW5kZXgKKyAgICAgKiBAcmV0dXJuIGFsZ29yaXRobSByYW5nZSBzdGFydAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0QWxnb3JpdGhtU3RhcnQoaW50IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWxnb3JpdGhtX1tpbmRleF0ubV9yYW5nZXN0YXJ0XzsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGVuZCBvZiB0aGUgcmFuZ2UKKyAgICAgKiBAcGFyYW0gaW5kZXggYWxnb3JpdGhtIGluZGV4CisgICAgICogQHJldHVybiBhbGdvcml0aG0gcmFuZ2UgZW5kCisgICAgICovCisgICAgcHVibGljIGludCBnZXRBbGdvcml0aG1FbmQoaW50IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWxnb3JpdGhtX1tpbmRleF0ubV9yYW5nZWVuZF87CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIEFsZ29yaXRobWljIG5hbWUgb2YgdGhlIGNvZGVwb2ludAorICAgICAqIEBwYXJhbSBpbmRleCBhbGdvcml0aG1pYyByYW5nZSBpbmRleAorICAgICAqIEBwYXJhbSBjb2RlcG9pbnQgCisgICAgICogQHJldHVybiBhbGdvcml0aG1pYyBuYW1lIG9mIGNvZGVwb2ludAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWxnb3JpdGhtTmFtZShpbnQgaW5kZXgsIGludCBjb2RlcG9pbnQpIAorICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7CisgICAgICAgIHN5bmNocm9uaXplZCAobV91dGlsU3RyaW5nQnVmZmVyXykgeworICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5kZWxldGUoMCwgbV91dGlsU3RyaW5nQnVmZmVyXy5sZW5ndGgoKSk7CisgICAgICAgICAgICBtX2FsZ29yaXRobV9baW5kZXhdLmFwcGVuZE5hbWUoY29kZXBvaW50LCBtX3V0aWxTdHJpbmdCdWZmZXJfKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fdXRpbFN0cmluZ0J1ZmZlcl8udG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIGdyb3VwIG5hbWUgb2YgdGhlIGNoYXJhY3RlcgorICAgICogQHBhcmFtIGNoIGNoYXJhY3RlciB0byBnZXQgdGhlIGdyb3VwIG5hbWUgCisgICAgKiBAcGFyYW0gY2hvaWNlIG5hbWUgY2hvaWNlIHNlbGVjdG9yIHRvIGNob29zZSBhIHVuaWNvZGUgMS4wIG9yIG5ld2VyIG5hbWUKKyAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JvdXBOYW1lKGludCBjaCwgaW50IGNob2ljZSkgCisgICAgeyAgICAgICAgICAgIAorICAgICAgICAvLyBnZXRzIHRoZSBtc2IKKyAgICAgICAgaW50IG1zYiAgID0gZ2V0Q29kZXBvaW50TVNCKGNoKTsKKyAgICAgICAgaW50IGdyb3VwID0gZ2V0R3JvdXAoY2gpOworCisgICAgICAgIC8vIHJldHVybiB0aGlzIGlmIGl0IGlzIGFuIGV4YWN0IG1hdGNoCisgICAgICAgIGlmIChtc2IgPT0gbV9ncm91cGluZm9fW2dyb3VwICogbV9ncm91cHNpemVfXSkgeworICAgICAgICAgICAgaW50IGluZGV4ID0gZ2V0R3JvdXBMZW5ndGhzKGdyb3VwLCBtX2dyb3Vwb2Zmc2V0c18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JvdXBsZW5ndGhzXyk7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gY2ggJiBHUk9VUF9NQVNLXzsKKyAgICAgICAgICAgIHJldHVybiBnZXRHcm91cE5hbWUoaW5kZXggKyBtX2dyb3Vwb2Zmc2V0c19bb2Zmc2V0XSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JvdXBsZW5ndGhzX1tvZmZzZXRdLCBjaG9pY2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgCisgICAgLy8gdGhlc2UgYXJlIHRyYW5zbGl0ZXJhdG9yIHVzZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFueSBjb2RlcG9pbnQgbmFtZS4KKyAgICAgKiBFcXVpdmFsZW50IHRvIHVwcnZfZ2V0TWF4Q2hhck5hbWVMZW5ndGguCisgICAgICogQHJldHVybiB0aGUgbWF4aW11bSBsZW5ndGggb2YgYW55IGNvZGVwb2ludCBuYW1lCisgICAgICovCisgICAgcHVibGljIGludCBnZXRNYXhDaGFyTmFtZUxlbmd0aCgpIAorICAgIHsKKyAgICAgICAgaWYgKGluaXROYW1lU2V0c0xlbmd0aHMoKSkgeworICAgICAgICAgICAgcmV0dXJuIG1fbWF4TmFtZUxlbmd0aF87CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYW55IGlzbyBjb21tZW50cy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIHVwcnZfZ2V0TWF4SVNPQ29tbWVudExlbmd0aC4KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbnkgY29kZXBvaW50IG5hbWUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE1heElTT0NvbW1lbnRMZW5ndGgoKSAKKyAgICB7CisgICAgICAgIGlmIChpbml0TmFtZVNldHNMZW5ndGhzKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBtX21heElTT0NvbW1lbnRMZW5ndGhfOworICAgICAgICB9IAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEZpbGxzIHNldCB3aXRoIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCBpbiBVbmljb2RlIGNoYXJhY3RlciBuYW1lcy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIHVwcnZfZ2V0Q2hhck5hbWVDaGFyYWN0ZXJzLgorICAgICAqIEBwYXJhbSBzZXQgVVNldCB0byByZWNlaXZlIGNoYXJhY3RlcnMuIEV4aXN0aW5nIGNvbnRlbnRzIGFyZSBkZWxldGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGdldENoYXJOYW1lQ2hhcmFjdGVycyhVbmljb2RlU2V0IHNldCkgCisgICAgeworICAgICAgICBjb252ZXJ0KG1fbmFtZVNldF8sIHNldCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEZpbGxzIHNldCB3aXRoIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCBpbiBVbmljb2RlIGNoYXJhY3RlciBuYW1lcy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIHVwcnZfZ2V0SVNPQ29tbWVudENoYXJhY3RlcnMuCisgICAgICogQHBhcmFtIHNldCBVU2V0IHRvIHJlY2VpdmUgY2hhcmFjdGVycy4gRXhpc3RpbmcgY29udGVudHMgYXJlIGRlbGV0ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZ2V0SVNPQ29tbWVudENoYXJhY3RlcnMoVW5pY29kZVNldCBzZXQpIAorICAgIHsKKyAgICAgICAgY29udmVydChtX0lTT0NvbW1lbnRTZXRfLCBzZXQpOworICAgIH0KKyAgICAKKyAgICAvLyBwYWNrYWdlIHByaXZhdGUgaW5uZXIgY2xhc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIEFsZ29yaXRobWljIG5hbWUgY2xhc3MKKyAgICAqLworICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBBbGdvcml0aG1OYW1lCisgICAgeworICAgICAgICAvLyBwYWNrYWdlIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAqIENvbnN0YW50IHR5cGUgdmFsdWUgb2YgdGhlIGRpZmZlcmVudCBBbGdvcml0aG1OYW1lCisgICAgICAgICovCisgICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV8wXyA9IDA7CisgICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV8xXyA9IDE7CisgICAgICAgIAorICAgICAgICAvLyBwYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAqIENvbnN0cnVjdG9yCisgICAgICAgICovCisgICAgICAgIEFsZ29yaXRobU5hbWUoKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0cyB0aGUgaW5mb3JtYXRpb24gZm9yIGFjY2Vzc2luZyB0aGUgYWxnb3JpdGhtaWMgbmFtZXMKKyAgICAgICAgKiBAcGFyYW0gcmFuZ2VzdGFydCBzdGFydGluZyBjb2RlIHBvaW50IHRoYXQgbGllcyB3aXRoaW4gdGhpcyBuYW1lIGdyb3VwCisgICAgICAgICogQHBhcmFtIHJhbmdlZW5kIGVuZCBjb2RlIHBvaW50IHRoYXQgbGllcyB3aXRoaW4gdGhpcyBuYW1lIGdyb3VwCisgICAgICAgICogQHBhcmFtIHR5cGUgYWxnb3JpdGhtIHR5cGUuIFRoZXJlJ3MgMiBraW5kcyBvZiBhbGdvcml0aG1pYyB0eXBlLiBGaXJzdCAKKyAgICAgICAgKiAgICAgICAgd2hpY2ggdXNlcyBjb2RlIHBvaW50IGFzIHBhcnQgb2YgaXRzIG5hbWUgYW5kIHRoZSBvdGhlciB1c2VzIAorICAgICAgICAqICAgICAgICB2YXJpYW50IHBvc3RmaXggc3RyaW5ncworICAgICAgICAqIEBwYXJhbSB2YXJpYW50IGFsZ29yaXRobWljIHZhcmlhbnQKKyAgICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdmFsdWVzIGFyZSB2YWxpZAorICAgICAgICAqLyAKKyAgICAgICAgYm9vbGVhbiBzZXRJbmZvKGludCByYW5nZXN0YXJ0LCBpbnQgcmFuZ2VlbmQsIGJ5dGUgdHlwZSwgYnl0ZSB2YXJpYW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmFuZ2VzdGFydCA+PSBVQ2hhcmFjdGVyLk1JTl9WQUxVRSAmJiByYW5nZXN0YXJ0IDw9IHJhbmdlZW5kIAorICAgICAgICAgICAgICAgICYmIHJhbmdlZW5kIDw9IFVDaGFyYWN0ZXIuTUFYX1ZBTFVFICYmIAorICAgICAgICAgICAgICAgICh0eXBlID09IFRZUEVfMF8gfHwgdHlwZSA9PSBUWVBFXzFfKSkgeworICAgICAgICAgICAgICAgIG1fcmFuZ2VzdGFydF8gPSByYW5nZXN0YXJ0OworICAgICAgICAgICAgICAgIG1fcmFuZ2VlbmRfID0gcmFuZ2VlbmQ7CisgICAgICAgICAgICAgICAgbV90eXBlXyA9IHR5cGU7CisgICAgICAgICAgICAgICAgbV92YXJpYW50XyA9IHZhcmlhbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAqIFNldHMgdGhlIGZhY3RvciBkYXRhCisgICAgICAgICogQHBhcmFtIGFycmF5IG9mIGZhY3RvcgorICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBmYWN0b3JzIGFyZSB2YWxpZAorICAgICAgICAqLworICAgICAgICBib29sZWFuIHNldEZhY3RvcihjaGFyIGZhY3RvcltdKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFjdG9yLmxlbmd0aCA9PSBtX3ZhcmlhbnRfKSB7CisgICAgICAgICAgICAgICAgbV9mYWN0b3JfID0gZmFjdG9yOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgKiBTZXRzIHRoZSBuYW1lIHByZWZpeAorICAgICAgICAqIEBwYXJhbSBwcmVmaXgKKyAgICAgICAgKiBAcmV0dXJuIHRydWUgaWYgcHJlZml4IGlzIHNldAorICAgICAgICAqLworICAgICAgICBib29sZWFuIHNldFByZWZpeChTdHJpbmcgcHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4Lmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIG1fcHJlZml4XyA9IHByZWZpeDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0cyB0aGUgdmFyaWFudCBmYWN0b3JpemVkIG5hbWUgZGF0YSAKKyAgICAgICAgKiBAcGFyYW0gc3RyaW5nIHZhcmlhbnQgZmFjdG9yaXplZCBuYW1lIGRhdGEKKyAgICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdmFsdWVzIGFyZSBzZXQKKyAgICAgICAgKi8KKyAgICAgICAgYm9vbGVhbiBzZXRGYWN0b3JTdHJpbmcoYnl0ZSBzdHJpbmdbXSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZmFjdG9yIGFuZCB2YXJpYW50IHN0cmluZyBjYW4gYmUgZW1wdHkgZm9yIHRoaW5ncyBsaWtlIAorICAgICAgICAgICAgLy8gaGFuZ2d1bCBjb2RlIHBvaW50cworICAgICAgICAgICAgbV9mYWN0b3JzdHJpbmdfID0gc3RyaW5nOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgKiBDaGVja3MgaWYgY29kZSBwb2ludCBsaWVzIGluIEFsZ29yaXRobSBvYmplY3QgYXQgaW5kZXgKKyAgICAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCAKKyAgICAgICAgKi8KKyAgICAgICAgYm9vbGVhbiBjb250YWlucyhpbnQgY2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Jhbmdlc3RhcnRfIDw9IGNoICYmIGNoIDw9IG1fcmFuZ2VlbmRfOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgKiBBcHBlbmRzIGFsZ29yaXRobSBuYW1lIG9mIGNvZGUgcG9pbnQgaW50byBTdHJpbmdCdWZmZXIuCisgICAgICAgICogTm90ZSB0aGlzIG1ldGhvZCBkb2VzIG5vdCBjaGVjayBmb3IgdmFsaWRpdHkgb2YgY29kZSBwb2ludCBpbiBBbGdvcml0aG0sCisgICAgICAgICogcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiBjb2RlIHBvaW50IGRvZXMgbm90IGJlbG9uZyBpbiBBbGdvcml0aG0uCisgICAgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQKKyAgICAgICAgKiBAcGFyYW0gc3RyIFN0cmluZ0J1ZmZlciB0byBhcHBlbmQgdG8KKyAgICAgICAgKi8KKyAgICAgICAgdm9pZCBhcHBlbmROYW1lKGludCBjaCwgU3RyaW5nQnVmZmVyIHN0cikKKyAgICAgICAgeworICAgICAgICAgICAgc3RyLmFwcGVuZChtX3ByZWZpeF8pOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGVfKSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRZUEVfMF86IAorICAgICAgICAgICAgICAgICAgICAvLyBwcmVmaXggZm9sbG93ZWQgYnkgaGV4IGRpZ2l0cyBpbmRpY2F0aW5nIHZhcmlhbnRzCisgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuaGV4KGNoLCBtX3ZhcmlhbnRfLCBzdHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRZUEVfMV86IAorICAgICAgICAgICAgICAgICAgICAvLyBwcmVmaXggZm9sbG93ZWQgYnkgZmFjdG9yaXplZC1lbGVtZW50cworICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gY2ggLSBtX3Jhbmdlc3RhcnRfOworICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXhlc1tdID0gbV91dGlsSW50QnVmZmVyXzsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZhY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGUgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBmYWN0b3JzCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmYWN0b3JpemVkIGVsZW1lbnRzIGFyZSBkZXRlcm1pbmVkIGJ5IG1vZHVsbyAKKyAgICAgICAgICAgICAgICAgICAgLy8gYXJpdGhtZXRpYworICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1fdXRpbEludEJ1ZmZlcl8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtX3ZhcmlhbnRfIC0gMTsgaSA+IDA7IGkgLS0pIAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvciA9IG1fZmFjdG9yX1tpXSAmIDB4MDBGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVzW2ldID0gb2Zmc2V0ICUgZmFjdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAvPSBmYWN0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGxhc3QgbW9kdWx1cyBiZWNhdXNlIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgPD0gY29kZSA8PSBlbmQgZ3VhcmFudGVlcyBoZXJlIHRoYXQgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2RlIDw9IGZhY3RvcnNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ZXNbMF0gPSBvZmZzZXQ7CisgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBqb2luaW5nIHVwIHRoZSBmYWN0b3JpemVkIHN0cmluZ3MgCisgICAgICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKGdldEZhY3RvclN0cmluZyhpbmRleGVzLCBtX3ZhcmlhbnRfKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgdGhlIGNoYXJhY3RlciBmb3IgdGhlIGFyZ3VtZW50IGFsZ29yaXRobWljIG5hbWUKKyAgICAgICAgKiBAcmV0dXJuIHRoZSBhbGdvcml0aG1pYyBjaGFyIG9yIC0xIG90aGVyd2lzZS4KKyAgICAgICAgKi8KKyAgICAgICAgaW50IGdldENoYXIoU3RyaW5nIG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBwcmVmaXhsZW4gPSBtX3ByZWZpeF8ubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAobmFtZS5sZW5ndGgoKSA8IHByZWZpeGxlbiB8fCAKKyAgICAgICAgICAgICAgICAhbV9wcmVmaXhfLmVxdWFscyhuYW1lLnN1YnN0cmluZygwLCBwcmVmaXhsZW4pKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlXykgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBUWVBFXzBfIDogCisgICAgICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gSW50ZWdlci5wYXJzZUludChuYW1lLnN1YnN0cmluZyhwcmVmaXhsZW4pLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpOworICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIGl0IGZpdCBpbnRvIHRoZSByYW5nZT8KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fcmFuZ2VzdGFydF8gPD0gcmVzdWx0ICYmIHJlc3VsdCA8PSBtX3JhbmdlZW5kXykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFlQRV8xXyA6IAorICAgICAgICAgICAgICAgICAgICAvLyByZXBldGl0YXRpdmUgc3VmZml4IG5hbWUgY29tcGFyaXNvbiBkb25lIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0IGlzIHRoZSBjaGFyYWN0ZXIgY29kZSAtIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNoID0gbV9yYW5nZXN0YXJ0XzsgY2ggPD0gbV9yYW5nZWVuZF87IGNoICsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gY2ggLSBtX3Jhbmdlc3RhcnRfOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ZXNbXSA9IG1fdXRpbEludEJ1ZmZlcl87CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFjdG9yOworICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cml0ZSBlbGVtZW50cyBhY2NvcmRpbmcgdG8gdGhlIGZhY3RvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmYWN0b3JpemVkIGVsZW1lbnRzIGFyZSBkZXRlcm1pbmVkIGJ5IG1vZHVsbyAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyaXRobWV0aWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobV91dGlsSW50QnVmZmVyXykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtX3ZhcmlhbnRfIC0gMTsgaSA+IDA7IGkgLS0pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yID0gbV9mYWN0b3JfW2ldICYgMHgwMEZGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVzW2ldID0gb2Zmc2V0ICUgZmFjdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgLz0gZmFjdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgbGFzdCBtb2R1bHVzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugc3RhcnQgPD0gY29kZSA8PSBlbmQgZ3VhcmFudGVlcyBoZXJlIHRoYXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29kZSA8PSBmYWN0b3JzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhlc1swXSA9IG9mZnNldDsKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqb2luaW5nIHVwIHRoZSBmYWN0b3JpemVkIHN0cmluZ3MgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVGYWN0b3JTdHJpbmcoaW5kZXhlcywgbV92YXJpYW50XywgbmFtZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4bGVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFkZHMgYWxsIGNoYXJzIGluIHRoZSBzZXQgb2YgYWxnb3JpdGhtaWMgbmFtZXMgaW50byB0aGUgc2V0LgorICAgICAgICAgKiBFcXVpdmFsZW50IHRvIHBhcnQgb2YgY2FsY0FsZ05hbWVTZXRzTGVuZ3Rocy4KKyAgICAgICAgICogQHBhcmFtIHNldCBpbnQgc2V0IHRvIGFkZCB0aGUgY2hhcnMgb2YgdGhlIGFsZ29yaXRobSBuYW1lcyBpbnRvCisgICAgICAgICAqIEBwYXJhbSBtYXhsZW5ndGggbWF4aW11bSBsZW5ndGggdG8gY29tcGFyZSB0bworICAgICAgICAgKiBAcmV0dXJuIHRoZSBsZW5ndGggdGhhdCBpcyBlaXRoZXIgbWF4bGVuZ3RoIG9mIHRoZSBsZW5ndGggb2YgdGhpcworICAgICAgICAgKiAgICAgICAgIGFsZ29yaXRobSBuYW1lIGlmIGl0IGlzIGxvbmdlciB0aGFuIG1heGxlbmd0aAorICAgICAgICAgKi8KKyAgICAgICAgaW50IGFkZChpbnQgc2V0W10sIGludCBtYXhsZW5ndGgpIAorICAgICAgICB7CisgICAgICAgICAgICAvLyBwcmVmaXggbGVuZ3RoCisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gVUNoYXJhY3Rlck5hbWUuYWRkKHNldCwgbV9wcmVmaXhfKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlXykgeworICAgICAgICAgICAgICAgIGNhc2UgVFlQRV8wXyA6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbmFtZSA9IHByZWZpeCArIChyYW5nZS0+dmFyaWFudCB0aW1lcykgaGV4LWRpZ2l0cworICAgICAgICAgICAgICAgICAgICAvLyBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IG1fdmFyaWFudF87CisgICAgICAgICAgICAgICAgICAgIC8qIHN5bndlZSB0byBjaGVjayAKKyAgICAgICAgICAgICAgICAgICAgICogYWRkU3RyaW5nKHNldCwgKGNvbnN0IGNoYXIgKikocmFuZ2UgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcmFuZ2UtPnZhcmlhbnQ7Ki8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVFlQRV8xXyA6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbmFtZSA9IHByZWZpeCBmYWN0b3JpemVkLWVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgc2V0IGFuZCBtYXhpbXVtIGZhY3RvciBzdWZmaXggbGVuZ3RoIGZvciBlYWNoIAorICAgICAgICAgICAgICAgICAgICAvLyBmYWN0b3IKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1fdmFyaWFudF8gLSAxOyBpID4gMDsgaSAtLSkgCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhmYWN0b3JsZW5ndGggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGZhY3RvciA9IG1fZmFjdG9yX1tpXTsgZmFjdG9yID4gMDsgLS0gZmFjdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtX3V0aWxTdHJpbmdCdWZmZXJfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbFN0cmluZ0J1ZmZlcl8uZGVsZXRlKDAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVUNoYXJhY3RlclV0aWxpdHkuZ2V0TnVsbFRlcm1CeXRlU3ViU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZhY3RvcnN0cmluZ18sIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlck5hbWUuYWRkKHNldCwgbV91dGlsU3RyaW5nQnVmZmVyXyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3V0aWxTdHJpbmdCdWZmZXJfLmxlbmd0aCgpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiBtYXhmYWN0b3JsZW5ndGgpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhmYWN0b3JsZW5ndGggCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fdXRpbFN0cmluZ0J1ZmZlcl8ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gbWF4ZmFjdG9ybGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlbmd0aCA+IG1heGxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBsZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbWF4bGVuZ3RoOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAqIEFsZ29yaXRobWljIGRhdGEgaW5mb3JtYXRpb24KKyAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgbV9yYW5nZXN0YXJ0XzsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbV9yYW5nZWVuZF87CisgICAgICAgIHByaXZhdGUgYnl0ZSBtX3R5cGVfOworICAgICAgICBwcml2YXRlIGJ5dGUgbV92YXJpYW50XzsKKyAgICAgICAgcHJpdmF0ZSBjaGFyIG1fZmFjdG9yX1tdOworICAgICAgICBwcml2YXRlIFN0cmluZyBtX3ByZWZpeF87CisgICAgICAgIHByaXZhdGUgYnl0ZSBtX2ZhY3RvcnN0cmluZ19bXTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFV0aWxpdHkgU3RyaW5nQnVmZmVyCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtX3V0aWxTdHJpbmdCdWZmZXJfID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAvKioKKyAgICAgICAgICogVXRpbGl0eSBpbnQgYnVmZmVyCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtX3V0aWxJbnRCdWZmZXJfW10gPSBuZXcgaW50WzI1Nl07CisgICAgICAgIAorICAgICAgICAvLyBwcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyB0aGUgaW5kZXh0aCBzdHJpbmcgaW4gZWFjaCBvZiB0aGUgYXJndW1lbnQgZmFjdG9yIGJsb2NrCisgICAgICAgICogQHBhcmFtIGluZGV4IGFycmF5IHdpdGggZWFjaCBpbmRleCBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZmFjdG9yIGJsb2NrCisgICAgICAgICogQHBhcmFtIGxlbmd0aCBsZW5ndGggb2YgdGhlIGFycmF5IGluZGV4CisgICAgICAgICogQHJldHVybiB0aGUgY29tYmluZWQgc3RyaW5nIG9mIHRoZSBhcnJheSBvZiBpbmRleHRoIGZhY3RvciBzdHJpbmcgaW4gCisgICAgICAgICogICAgICAgICBmYWN0b3IgYmxvY2sKKyAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RmFjdG9yU3RyaW5nKGludCBpbmRleFtdLCBpbnQgbGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IG1fZmFjdG9yXy5sZW5ndGg7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gbnVsbCB8fCBsZW5ndGggIT0gc2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3luY2hyb25pemVkIChtX3V0aWxTdHJpbmdCdWZmZXJfKSB7CisgICAgICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5kZWxldGUoMCwgbV91dGlsU3RyaW5nQnVmZmVyXy5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgZmFjdG9yOworICAgICAgICAgICAgICAgIHNpemUgLS07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc2l6ZTsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBmYWN0b3IgPSBtX2ZhY3Rvcl9baV07CisgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gVUNoYXJhY3RlclV0aWxpdHkuc2tpcE51bGxUZXJtQnl0ZVN1YlN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmFjdG9yc3RyaW5nXywgY291bnQsIGluZGV4W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSBVQ2hhcmFjdGVyVXRpbGl0eS5nZXROdWxsVGVybUJ5dGVTdWJTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxTdHJpbmdCdWZmZXJfLCBtX2ZhY3RvcnN0cmluZ18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBzaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IFVDaGFyYWN0ZXJVdGlsaXR5LnNraXBOdWxsVGVybUJ5dGVTdWJTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWN0b3JzdHJpbmdfLCBjb3VudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yIC0gaW5kZXhbaV0gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbV91dGlsU3RyaW5nQnVmZmVyXy50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgKiBDb21wYXJlcyB0aGUgaW5kZXh0aCBzdHJpbmcgaW4gZWFjaCBvZiB0aGUgYXJndW1lbnQgZmFjdG9yIGJsb2NrIHdpdGgKKyAgICAgICAgKiB0aGUgYXJndW1lbnQgc3RyaW5nCisgICAgICAgICogQHBhcmFtIGluZGV4IGFycmF5IHdpdGggZWFjaCBpbmRleCBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZmFjdG9yIGJsb2NrCisgICAgICAgICogQHBhcmFtIGxlbmd0aCBpbmRleCBhcnJheSBsZW5ndGgKKyAgICAgICAgKiBAcGFyYW0gc3RyIHN0cmluZyB0byBjb21wYXJlIHdpdGgKKyAgICAgICAgKiBAcGFyYW0gb2Zmc2V0IG9mIHN0ciB0byBzdGFydCBjb21wYXJpc29uCisgICAgICAgICogQHJldHVybiB0cnVlIGlmIHN0cmluZyBtYXRjaGVzCisgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBjb21wYXJlRmFjdG9yU3RyaW5nKGludCBpbmRleFtdLCBpbnQgbGVuZ3RoLCBTdHJpbmcgc3RyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHNpemUgPSBtX2ZhY3Rvcl8ubGVuZ3RoOworICAgICAgICAgICAgaWYgKGluZGV4ID09IG51bGwgfHwgbGVuZ3RoICE9IHNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICAgIGludCBzdHJjb3VudCA9IG9mZnNldDsKKyAgICAgICAgICAgIGludCBmYWN0b3I7CisgICAgICAgICAgICBzaXplIC0tOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc2l6ZTsgaSArKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmYWN0b3IgPSBtX2ZhY3Rvcl9baV07CisgICAgICAgICAgICAgICAgY291bnQgPSBVQ2hhcmFjdGVyVXRpbGl0eS5za2lwTnVsbFRlcm1CeXRlU3ViU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWN0b3JzdHJpbmdfLCBjb3VudCwgaW5kZXhbaV0pOworICAgICAgICAgICAgICAgIHN0cmNvdW50ID0gVUNoYXJhY3RlclV0aWxpdHkuY29tcGFyZU51bGxUZXJtQnl0ZVN1YlN0cmluZyhzdHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWN0b3JzdHJpbmdfLCBzdHJjb3VudCwgY291bnQpOworICAgICAgICAgICAgICAgIGlmIChzdHJjb3VudCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpICE9IHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSBVQ2hhcmFjdGVyVXRpbGl0eS5za2lwTnVsbFRlcm1CeXRlU3ViU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmFjdG9yc3RyaW5nXywgY291bnQsIGZhY3RvciAtIGluZGV4W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RyY291bnQgIT0gc3RyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gcGFja2FnZSBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFNpemUgb2YgZWFjaCBncm91cHMKKyAgICAgKi8KKyAgICBpbnQgbV9ncm91cHNpemVfID0gMDsKKyAgICAKKyAgICAvLyBwYWNrYWdlIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICogU2V0cyB0aGUgdG9rZW4gZGF0YQorICAgICogQHBhcmFtIHRva2VuIGFycmF5IG9mIHRva2VucworICAgICogQHBhcmFtIHRva2Vuc3RyaW5nIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMgb2YgdGhlIHRva2VucworICAgICogQHJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBhIGRhdGEgZXJyb3IKKyAgICAqLworICAgIGJvb2xlYW4gc2V0VG9rZW4oY2hhciB0b2tlbltdLCBieXRlIHRva2Vuc3RyaW5nW10pCisgICAgeworICAgICAgICBpZiAodG9rZW4gIT0gbnVsbCAmJiB0b2tlbnN0cmluZyAhPSBudWxsICYmIHRva2VuLmxlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgIHRva2Vuc3RyaW5nLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIG1fdG9rZW50YWJsZV8gPSB0b2tlbjsKKyAgICAgICAgICAgIG1fdG9rZW5zdHJpbmdfID0gdG9rZW5zdHJpbmc7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgKiBTZXQgdGhlIGFsZ29yaXRobSBuYW1lIGluZm9ybWF0aW9uIGFycmF5CisgICAgKiBAcGFyYW0gYWxnb3JpdGhtIGluZm9ybWF0aW9uIGFycmF5CisgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGdyb3VwIHN0cmluZyBvZmZzZXQgaGFzIGJlZW4gc2V0IGNvcnJlY3RseQorICAgICovCisgICAgYm9vbGVhbiBzZXRBbGdvcml0aG0oQWxnb3JpdGhtTmFtZSBhbGdbXSkKKyAgICB7CisgICAgICAgIGlmIChhbGcgIT0gbnVsbCAmJiBhbGcubGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgIG1fYWxnb3JpdGhtXyA9IGFsZzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgZ3JvdXAgYW5kIHNpemUgb2YgZWFjaCBncm91cCBpbiBudW1iZXIgb2YgY2hhcgorICAgICogQHBhcmFtIGNvdW50IG51bWJlciBvZiBncm91cHMKKyAgICAqIEBwYXJhbSBzaXplIHNpemUgb2YgZ3JvdXAgaW4gY2hhcgorICAgICogQHJldHVybiB0cnVlIGlmIGdyb3VwIHNpemUgaXMgc2V0IGNvcnJlY3RseQorICAgICovCisgICAgYm9vbGVhbiBzZXRHcm91cENvdW50U2l6ZShpbnQgY291bnQsIGludCBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDw9IDAgfHwgc2l6ZSA8PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9ncm91cGNvdW50XyA9IGNvdW50OworICAgICAgICBtX2dyb3Vwc2l6ZV8gPSBzaXplOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAKKyAgICAvKioKKyAgICAqIFNldHMgdGhlIGdyb3VwIG5hbWUgZGF0YQorICAgICogQHBhcmFtIGdyb3VwIGluZGV4IGluZm9ybWF0aW9uIGFycmF5CisgICAgKiBAcGFyYW0gZ3JvdXBzdHJpbmcgbmFtZSBpbmZvcm1hdGlvbiBhcnJheQorICAgICogQHJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBhIGRhdGEgZXJyb3IKKyAgICAqLworICAgIGJvb2xlYW4gc2V0R3JvdXAoY2hhciBncm91cFtdLCBieXRlIGdyb3Vwc3RyaW5nW10pCisgICAgeworICAgICAgICBpZiAoZ3JvdXAgIT0gbnVsbCAmJiBncm91cHN0cmluZyAhPSBudWxsICYmIGdyb3VwLmxlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgIGdyb3Vwc3RyaW5nLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIG1fZ3JvdXBpbmZvXyA9IGdyb3VwOworICAgICAgICAgICAgbV9ncm91cHN0cmluZ18gPSBncm91cHN0cmluZzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsgCisgICAgfQorICAgIAorICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIERhdGEgdXNlZCBpbiB1bmFtZXMuaWN1CisgICAgKi8KKyAgICBwcml2YXRlIGNoYXIgbV90b2tlbnRhYmxlX1tdOworICAgIHByaXZhdGUgYnl0ZSBtX3Rva2Vuc3RyaW5nX1tdOworICAgIHByaXZhdGUgY2hhciBtX2dyb3VwaW5mb19bXTsKKyAgICBwcml2YXRlIGJ5dGUgbV9ncm91cHN0cmluZ19bXTsKKyAgICBwcml2YXRlIEFsZ29yaXRobU5hbWUgbV9hbGdvcml0aG1fW107CisgICAgICAKKyAgICAvKioKKyAgICAqIEdyb3VwIHVzZQorICAgICovCisgICAgcHJpdmF0ZSBjaGFyIG1fZ3JvdXBvZmZzZXRzX1tdID0gbmV3IGNoYXJbTElORVNfUEVSX0dST1VQXyArIDFdOworICAgIHByaXZhdGUgY2hhciBtX2dyb3VwbGVuZ3Roc19bXSA9IG5ldyBjaGFyW0xJTkVTX1BFUl9HUk9VUF8gKyAxXTsKKyAgICAgIAkgCisgICAgLyoqCisgICAgKiBEZWZhdWx0IG5hbWUgb2YgdGhlIG5hbWUgZGF0YWZpbGUKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0ZJTEVfTkFNRV8gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS91bmFtZXMuaWN1IjsKKyAgICAvKioKKyAgICAqIFNoaWZ0IGNvdW50IHRvIHJldHJpZXZlIGdyb3VwIGluZm9ybWF0aW9uCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR1JPVVBfU0hJRlRfID0gNTsKKyAgICAvKioKKyAgICAqIE1hc2sgdG8gcmV0cmlldmUgdGhlIG9mZnNldCBmb3IgYSBwYXJ0aWN1bGFyIGNoYXJhY3RlciB3aXRoaW4gYSBncm91cAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdST1VQX01BU0tfID0gTElORVNfUEVSX0dST1VQXyAtIDE7CisgICAgLyoqCisgICAgKiBEZWZhdWx0IGJ1ZmZlciBzaXplIG9mIGRhdGFmaWxlCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTkFNRV9CVUZGRVJfU0laRV8gPSAxMDAwMDA7CisgICAgICAKKyAgICAvKioKKyAgICAqIFBvc2l0aW9uIG9mIG9mZnNldGhpZ2ggaW4gZ3JvdXAgaW5mb3JtYXRpb24gYXJyYXkKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPRkZTRVRfSElHSF9PRkZTRVRfID0gMTsKKyAgICAgIAorICAgIC8qKgorICAgICogUG9zaXRpb24gb2Ygb2Zmc2V0bG93IGluIGdyb3VwIGluZm9ybWF0aW9uIGFycmF5CisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT0ZGU0VUX0xPV19PRkZTRVRfID0gMjsKKyAgICAvKioKKyAgICAqIERvdWJsZSBuaWJibGUgaW5kaWNhdG9yLCBhbnkgbmliYmxlID4gdGhpcyBudW1iZXIgaGFzIHRvIGJlIGNvbWJpbmVkCisgICAgKiB3aXRoIGl0cyBmb2xsb3dpbmcgbmliYmxlCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0lOR0xFX05JQkJMRV9NQVhfID0gMTE7CisgICAgIAorICAgIC8qKiAKKyAgICAgKiBNYXhpbXVtIGxlbmd0aCBvZiBjaGFyYWN0ZXIgbmFtZXMgKHJlZ3VsYXIgJiAxLjApLiAKKyAgICAgKi8gCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IE1BWF9OQU1FX0xFTkdUSF8gPSAwOyAKKyAgICAvKioKKyAgICAgKiBNYXhpbXVtIGxlbmd0aCBvZiBJU08gY29tbWVudHMuIAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBNQVhfSVNPX0NPTU1FTlRfTEVOR1RIXyA9IDA7IAorICAgIAorICAgIC8qKiAKKyAgICAgKiBTZXQgb2YgY2hhcnMgdXNlZCBpbiBjaGFyYWN0ZXIgbmFtZXMgKHJlZ3VsYXIgJiAxLjApLiAKKyAgICAgKiBDaGFycyBhcmUgcGxhdGZvcm0tZGVwZW5kZW50IChjYW4gYmUgRUJDRElDKS4gCisgICAgICovIAorICAgIHByaXZhdGUgaW50IG1fbmFtZVNldF9bXSA9IG5ldyBpbnRbOF07IAorICAgIC8qKgorICAgICAqIFNldCBvZiBjaGFycyB1c2VkIGluIElTTyBjb21tZW50cy4gKHJlZ3VsYXIgJiAxLjApLiAKKyAgICAgKiBDaGFycyBhcmUgcGxhdGZvcm0tZGVwZW5kZW50IChjYW4gYmUgRUJDRElDKS4gCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9JU09Db21tZW50U2V0X1tdID0gbmV3IGludFs4XTsgCisgICAgLyoqCisgICAgICogVXRpbGl0eSBTdHJpbmdCdWZmZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtX3V0aWxTdHJpbmdCdWZmZXJfID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIC8qKgorICAgICAqIFV0aWxpdHkgaW50IGJ1ZmZlcgorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fdXRpbEludEJ1ZmZlcl9bXSA9IG5ldyBpbnRbMl07CisgICAgLyoqCisgICAgICogTWF4aW11bSBJU08gY29tbWVudCBsZW5ndGgKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX21heElTT0NvbW1lbnRMZW5ndGhfOworICAgIC8qKgorICAgICAqIE1heGltdW0gbmFtZSBsZW5ndGgKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX21heE5hbWVMZW5ndGhfOworICAgIC8qKgorICAgICAqIFNpbmdsZXRvbiBpbnN0YW5jZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFVDaGFyYWN0ZXJOYW1lIElOU1RBTkNFXyA9IG51bGw7CisgICAgLyoqCisgICAgICogVHlwZSBuYW1lcyB1c2VkIGZvciBleHRlbmRlZCBuYW1lcworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX05BTUVTX1tdID0geyJ1bmFzc2lnbmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXBwZXJjYXNlIGxldHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvd2VyY2FzZSBsZXR0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aXRsZWNhc2UgbGV0dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kaWZpZXIgbGV0dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3RoZXIgbGV0dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uIHNwYWNpbmcgbWFyayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY2xvc2luZyBtYXJrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tYmluaW5nIHNwYWNpbmcgbWFyayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlY2ltYWwgZGlnaXQgbnVtYmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGV0dGVyIG51bWJlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm90aGVyIG51bWJlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYWNlIHNlcGFyYXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUgc2VwYXJhdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYWdyYXBoIHNlcGFyYXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRyb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcml2YXRlIHVzZSBhcmVhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFzaCBwdW5jdHVhdGlvbiIsICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0IHB1bmN0dWF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kIHB1bmN0dWF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdG9yIHB1bmN0dWF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3RoZXIgcHVuY3R1YXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRoIHN5bWJvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbmN5IHN5bWJvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZGlmaWVyIHN5bWJvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm90aGVyIHN5bWJvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWwgcHVuY3R1YXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaW5hbCBwdW5jdHVhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbmNoYXJhY3RlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlYWQgc3Vycm9nYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhaWwgc3Vycm9nYXRlIn07CisgICAgLyoqCisgICAgICogVW5rbm93biB0eXBlIG5hbWUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5LTk9XTl9UWVBFX05BTUVfID0gInVua25vd24iOworICAgIC8qKgorICAgICAqIE5vdCBhIGNoYXJhY3RlciB0eXBlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PTl9DSEFSQUNURVJfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuQ0hBUl9DQVRFR09SWV9DT1VOVDsKKyAgICAvKioKKyAgICAqIExlYWQgc3Vycm9nYXRlIHR5cGUKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMRUFEX1NVUlJPR0FURV8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuQ0hBUl9DQVRFR09SWV9DT1VOVCArIDE7CisgICAgLyoqCisgICAgKiBUcmFpbCBzdXJyb2dhdGUgdHlwZQorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRSQUlMX1NVUlJPR0FURV8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuQ0hBUl9DQVRFR09SWV9DT1VOVCArIDI7CisgICAgLyoqCisgICAgKiBFeHRlbmRlZCBjYXRlZ29yeSBjb3VudAorICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBFWFRFTkRFRF9DQVRFR09SWV8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFVDaGFyYWN0ZXJDYXRlZ29yeS5DSEFSX0NBVEVHT1JZX0NPVU5UICsgMzsKKyAgIAorICAgIC8vIHByaXZhdGUgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiA8cD5Qcm90ZWN0ZWQgY29uc3RydWN0b3IgZm9yIHVzZSBpbiBVQ2hhcmFjdGVyLjwvcD4KKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3duIHdoZW4gZGF0YSByZWFkaW5nIGZhaWxzCisgICAgKi8KKyAgICBwcml2YXRlIFVDaGFyYWN0ZXJOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBJbnB1dFN0cmVhbSBpID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKE5BTUVfRklMRV9OQU1FXyk7CisgICAgICAgIEJ1ZmZlcmVkSW5wdXRTdHJlYW0gYiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0JVRkZFUl9TSVpFXyk7CisgICAgICAgIFVDaGFyYWN0ZXJOYW1lUmVhZGVyIHJlYWRlciA9IG5ldyBVQ2hhcmFjdGVyTmFtZVJlYWRlcihiKTsKKyAgICAgICAgcmVhZGVyLnJlYWQodGhpcyk7CisgICAgICAgIGkuY2xvc2UoKTsKKyAgICB9CisgICAgCisgICAgLy8gcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSBhbGdvcml0aG1pYyBuYW1lIGZvciB0aGUgYXJndW1lbnQgY2hhcmFjdGVyCisgICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyIHRvIGRldGVybWluZSBuYW1lIGZvcgorICAgICogQHBhcmFtIGNob2ljZSBuYW1lIGNob2ljZQorICAgICogQHJldHVybiB0aGUgYWxnb3JpdGhtaWMgbmFtZSBvciBudWxsIGlmIG5vdCBmb3VuZAorICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0QWxnTmFtZShpbnQgY2gsIGludCBjaG9pY2UpIAorICAgIHsKKyAgICAJLy8gRG8gbm90IHdyaXRlIGFsZ29yaXRobWljIFVuaWNvZGUgMS4wIG5hbWVzIGJlY2F1c2UgVW5paGFuIG5hbWVzIGFyZSAKKyAgICAgICAgLy8gdGhlIHNhbWUgYXMgdGhlIG1vZGVybiBvbmVzLCBleHRlbnNpb24gQSB3YXMgb25seSBpbnRyb2R1Y2VkIHdpdGggCisgICAgICAgIC8vIFVuaWNvZGUgMy4wLCBhbmQgdGhlIEhhbmd1bCBzeWxsYWJsZSBibG9jayB3YXMgbW92ZWQgYW5kIGNoYW5nZWQgCisgICAgICAgIC8vIGFyb3VuZCBVbmljb2RlIDEuMS41LgorICAgICAgICBpZiAoY2hvaWNlICE9IFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLlVOSUNPREVfMTBfQ0hBUl9OQU1FKSB7CisgICAgICAgCSAJLy8gaW5kZXggaW4gdGVybXMgaW50ZWdlciBpbmRleAorICAgICAgICAgICAgc3luY2hyb25pemVkIChtX3V0aWxTdHJpbmdCdWZmZXJfKSB7CisgICAgICAgIAkgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5kZWxldGUoMCwgbV91dGlsU3RyaW5nQnVmZmVyXy5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICAgICAgCWZvciAoaW50IGluZGV4ID0gbV9hbGdvcml0aG1fLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC0tKSAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgCSAgIGlmIChtX2FsZ29yaXRobV9baW5kZXhdLmNvbnRhaW5zKGNoKSkgeworICAgICAgICAgICAgICAJICAgICAgbV9hbGdvcml0aG1fW2luZGV4XS5hcHBlbmROYW1lKGNoLCBtX3V0aWxTdHJpbmdCdWZmZXJfKTsKKyAgICAgICAgICAgICAgICAJICByZXR1cm4gbV91dGlsU3RyaW5nQnVmZmVyXy50b1N0cmluZygpOworICAgICAgICAgICAgIAkgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICogR2V0dGluZyB0aGUgY2hhcmFjdGVyIHdpdGggdGhlIHRva2VuaXplZCBhcmd1bWVudCBuYW1lCisgICAgKiBAcGFyYW0gbmFtZSBvZiB0aGUgY2hhcmFjdGVyCisgICAgKiBAcmV0dXJuIGNoYXJhY3RlciB3aXRoIHRoZSB0b2tlbml6ZWQgYXJndW1lbnQgbmFtZSBvciAtMSBpZiBjaGFyYWN0ZXIKKyAgICAqICAgICAgICAgaXMgbm90IGZvdW5kCisgICAgKi8KKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCBpbnQgZ2V0R3JvdXBDaGFyKFN0cmluZyBuYW1lLCBpbnQgY2hvaWNlKSAKKyAgICB7CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgbV9ncm91cGNvdW50XzsgaSArKykgeworICAgICAgICAJLy8gcG9wdWxhdGluZyB0aGUgZGF0YSBzZXQgb2YgZ3JvdXB0YWJsZQorICAgICAgICAJCisgICAgICAgIAlpbnQgc3RhcnRncHN0cmluZGV4ID0gZ2V0R3JvdXBMZW5ndGhzKGksIG1fZ3JvdXBvZmZzZXRzXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JvdXBsZW5ndGhzXyk7CisgICAgICAgICAgCisgICAgICAgIAkvLyBzaGlmdCBvdXQgdG8gZnVuY3Rpb24KKyAgICAgICAgCWludCByZXN1bHQgPSBnZXRHcm91cENoYXIoc3RhcnRncHN0cmluZGV4LCBtX2dyb3VwbGVuZ3Roc18sIG5hbWUsIAorICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2UpOworICAgICAgICAJaWYgKHJlc3VsdCAhPSAtMSkgeworICAgICAgICAgICAgCXJldHVybiAobV9ncm91cGluZm9fW2kgKiBtX2dyb3Vwc2l6ZV9dIDw8IEdST1VQX1NISUZUXykgCisgICAgICAgICAgICAJICAgICAgICAgfCByZXN1bHQ7CisgICAgICAgIAl9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICogQ29tcGFyZXMgYW5kIHJldHJpZXZlIGNoYXJhY3RlciBpZiBuYW1lIGlzIGZvdW5kIHdpdGhpbiB0aGUgYXJndW1lbnQgCisgICAgKiBncm91cAorICAgICogQHBhcmFtIGluZGV4IGluZGV4IHdoZXJlIHRoZSBzZXQgb2YgbmFtZXMgcmVzaWRlIGluIHRoZSBncm91cCBibG9jaworICAgICogQHBhcmFtIGxlbmd0aCBsaXN0IG9mIGxlbmd0aHMgb2YgdGhlIHN0cmluZ3MKKyAgICAqIEBwYXJhbSBuYW1lIGNoYXJhY3RlciBuYW1lIHRvIHNlYXJjaCBmb3IKKyAgICAqIEBwYXJhbSBjaG9pY2Ugb2YgZWl0aGVyIDEuMCBvciB0aGUgbW9zdCBjdXJyZW50IHVuaWNvZGUgbmFtZQorICAgICogQHJldHVybiByZWxhdGl2ZSBjaGFyYWN0ZXIgaW4gdGhlIGdyb3VwIHdoaWNoIG1hdGNoZXMgbmFtZSwgb3RoZXJ3aXNlIGlmICAgCisgICAgKiAgICAgICAgIG5vdCBmb3VuZCwgLTEgd2lsbCBiZSByZXR1cm5lZAorICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0R3JvdXBDaGFyKGludCBpbmRleCwgY2hhciBsZW5ndGhbXSwgU3RyaW5nIG5hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hvaWNlKQorICAgIHsgCisgICAgICAgIGJ5dGUgYiA9IDA7IAorICAgICAgICBjaGFyIHRva2VuOworICAgICAgICBpbnQgbGVuOworICAgICAgICBpbnQgbmFtZWxlbiA9IG5hbWUubGVuZ3RoKCk7CisgICAgICAgIGludCBuaW5kZXg7CisgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IHJlc3VsdCA9IDA7IHJlc3VsdCA8PSBMSU5FU19QRVJfR1JPVVBfOyByZXN1bHQgKyspIHsKKyAgICAgICAgICAgIG5pbmRleCA9IDA7CisgICAgICAgICAgICBsZW4gPSBsZW5ndGhbcmVzdWx0XTsKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY2hvaWNlID09IFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLlVOSUNPREVfMTBfQ0hBUl9OQU1FKSB7CisgICAgICAgICAgICAgICAgaW50IG9sZGluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgaW5kZXggKz0gVUNoYXJhY3RlclV0aWxpdHkuc2tpcEJ5dGVTdWJTdHJpbmcobV9ncm91cHN0cmluZ18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgbGVuLCAoYnl0ZSknOycpOworICAgICAgICAgICAgICAgIGxlbiAtPSAoaW5kZXggLSBvbGRpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBudW1iZXIgb2YgdG9rZW5zIGlzID4gdGhlIGxlbmd0aCBvZiB0aGUgbmFtZQorICAgICAgICAgICAgLy8gd3JpdGUgZWFjaCBsZXR0ZXIgZGlyZWN0bHksIGFuZCB3cml0ZSBhIHRva2VuIHdvcmQgcGVyIHRva2VuCisgICAgICAgICAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBsZW4gJiYgbmluZGV4ICE9IC0xICYmIG5pbmRleCA8IG5hbWVsZW47CisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgYiA9IG1fZ3JvdXBzdHJpbmdfW2luZGV4ICsgY291bnRdOworICAgICAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChiID49IG1fdG9rZW50YWJsZV8ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmNoYXJBdChuaW5kZXggKyspICE9IChiICYgMHhGRikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5pbmRleCA9IC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IG1fdG9rZW50YWJsZV9bYiAmIDB4RkZdOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gMHhGRkZFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgbGVhZCBieXRlIGZvciBhIGRvdWJsZS1ieXRlIHRva2VuCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IG1fdG9rZW50YWJsZV9bYiA8PCA4IHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2dyb3Vwc3RyaW5nX1tpbmRleCArIGNvdW50XSAmIDB4MDBmZildOworICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IDB4RkZGRikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KG5pbmRleCArKykgIT0gKGIgJiAweEZGKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbmRleCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcGFyZSB0b2tlbiB3aXRoIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5pbmRleCA9IFVDaGFyYWN0ZXJVdGlsaXR5LmNvbXBhcmVOdWxsVGVybUJ5dGVTdWJTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbV90b2tlbnN0cmluZ18sIG5pbmRleCwgdG9rZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobmFtZWxlbiA9PSBuaW5kZXggJiYgCisgICAgICAgICAgICAgICAgKGNvdW50ID09IGxlbiB8fCBtX2dyb3Vwc3RyaW5nX1tpbmRleCArIGNvdW50XSA9PSAnOycpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGluZGV4ICs9IGxlbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgICAgIAorICAgIC8qKgorICAgICogQmluYXJ5IHNlYXJjaCBmb3IgdGhlIGdyb3VwIHN0cmluZ3Mgc2V0IHRoYXQgY29udGFpbnMgdGhlIGFyZ3VtZW50IFVuaWNvZGUgCisgICAgKiBjb2RlIHBvaW50J3MgbW9zdCBzaWduaWZpY2FudCBiaXRzLgorICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgYSB2YWxpZCBncm91cCBzdHJpbmcgc2V0IHRoYXQgY29udGFpbiBtc2IuCisgICAgKiBJZiBncm91cCBzdHJpbmcgc2V0IGlzIG5vdCBmb3VuZCwgLTEgaXMgcmV0dXJuZWQKKyAgICAqIEBwYXJhbSBjaCB0aGUgY29kZSBwb2ludCB0byBsb29rIGZvcgorICAgICogQHJldHVybiBncm91cCBzdHJpbmcgc2V0IGluZGV4IGluIGRhdGF0YWJsZSBvdGhlcndpc2UgLTEgaXMgcmV0dXJuZWQgaWYgCisgICAgKiAgICAgICAgIGdyb3VwIHN0cmluZyBzZXQgaXMgbm90IGZvdW5kCisgICAgKi8KKyAgICBwcml2YXRlIGludCBnZXRHcm91cFN0cmluZ0luZGV4KGludCBjaCkKKyAgICB7CisgICAgICAgIC8vIGdldHMgdGhlIG1zYgorICAgICAgICBpbnQgbXNiID0gY2ggPj4gR1JPVVBfU0hJRlRfLAorICAgICAgICAgICAgZW5kID0gbV9ncm91cGNvdW50XywKKyAgICAgICAgICAgIHN0YXJ0LAorICAgICAgICAgICAgZ2luZGV4ID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIGZvciB0aGUgZ3JvdXAgb2YgbmFtZXMgdGhhdCBjb250YWlucyB0aGUgb25lIGZvciBjb2RlCisgICAgICAgIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IGVuZCAtIDE7KSB7CisgICAgICAgICAgICBnaW5kZXggPSAoc3RhcnQgKyBlbmQpID4+IDE7CisgICAgICAgICAgICBpZiAobXNiIDwgbV9ncm91cGluZm9fW2dpbmRleCAqIG1fZ3JvdXBzaXplX10pIHsKKyAgICAgICAgICAgICAgICBlbmQgPSBnaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGdpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIHJldHVybiB0aGlzIGlmIGl0IGlzIGFuIGV4YWN0IG1hdGNoCisgICAgICAgIGlmIChtc2IgPT0gbV9ncm91cGluZm9fW3N0YXJ0ICogbV9ncm91cHNpemVfXSkgeworICAgICAgICAgICAgc3RhcnQgPSBzdGFydCAqIG1fZ3JvdXBzaXplXzsKKyAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyVXRpbGl0eS50b0ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncm91cGluZm9fW3N0YXJ0ICsgT0ZGU0VUX0hJR0hfT0ZGU0VUX10sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyb3VwaW5mb19bc3RhcnQgKyBPRkZTRVRfTE9XX09GRlNFVF9dKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogR2V0cyB0aGUgY2hhcmFjdGVyIGV4dGVuZGVkIHR5cGUKKyAgICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIgdG8gYmUgdGVzdGVkCisgICAgKiBAcmV0dXJuIGV4dGVuZGVkIHR5cGUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0VHlwZShpbnQgY2gpCisgICAgeworICAgICAgICBpZiAoVUNoYXJhY3RlclV0aWxpdHkuaXNOb25DaGFyYWN0ZXIoY2gpKSB7ICAKKyAgICAgICAgICAgIC8vIG5vdCBhIGNoYXJhY3RlciB3ZSByZXR1cm4gYSBpbnZhbGlkIGNhdGVnb3J5IGNvdW50CisgICAgICAgICAgICByZXR1cm4gTk9OX0NIQVJBQ1RFUl87ICAgIAorICAgICAgICB9ICAgIAorICAgICAgICBpbnQgcmVzdWx0ID0gVUNoYXJhY3Rlci5nZXRUeXBlKGNoKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuU1VSUk9HQVRFKSB7ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY2ggPD0gVVRGMTYuTEVBRF9TVVJST0dBVEVfTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTEVBRF9TVVJST0dBVEVfOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVFJBSUxfU1VSUk9HQVRFXzsKKyAgICAgICAgICAgIH0gICAgCisgICAgICAgIH0gICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogR2V0dGluZyB0aGUgY2hhcmFjdGVyIHdpdGggZXh0ZW5kZWQgbmFtZSBvZiB0aGUgZm9ybSA8Li4uLj4uCisgICAgKiBAcGFyYW0gbmFtZSBvZiB0aGUgY2hhcmFjdGVyIHRvIGJlIGZvdW5kCisgICAgKiBAcGFyYW0gY2hvaWNlIG5hbWUgY2hvaWNlCisgICAgKiBAcmV0dXJuIGNoYXJhY3RlciBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWUsIC0xIGlmIHN1Y2ggY2hhcmFjdGVyIGlzIG5vdAorICAgICogICAgICAgICAgICAgICAgICAgZm91bmQgYW5kIC0yIGlmIHdlIHNob3VsZCBjb250aW51ZSB3aXRoIHRoZSBzZWFyY2guCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0RXh0ZW5kZWRDaGFyKFN0cmluZyBuYW1lLCBpbnQgY2hvaWNlKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09ICc8JykgeyAgICAgICAgCisgICAgICAgICAgICBpZiAoY2hvaWNlID09IFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLkVYVEVOREVEX0NIQVJfTkFNRSkgeyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBlbmRJbmRleCA9IG5hbWUubGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgICAgIGlmIChuYW1lLmNoYXJBdChlbmRJbmRleCkgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzdGFydEluZGV4ID0gbmFtZS5sYXN0SW5kZXhPZignLScpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRJbmRleCA+PSAwKSB7IC8vIFdlJ3ZlIGdvdCBhIGNhdGVnb3J5LiAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJbnRlZ2VyLnBhcnNlSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHZhbGlkYXRlIHRoZSBjYXRlZ29yeSBuYW1lLiBXZSBjb3VsZCB1c2UgYSAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpbmFyeSBzZWFyY2gsIG9yIGEgdHJpZSwgaWYgd2UgcmVhbGx5IHdhbnRlZCB0by4gCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdHlwZSA9IG5hbWUuc3Vic3RyaW5nKDEsIHN0YXJ0SW5kZXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGggPSBUWVBFX05BTUVTXy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKysgaSkgeyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZS5jb21wYXJlVG8oVFlQRV9OQU1FU19baV0pID09IDApIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKHJlc3VsdCkgPT0gaSkgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIC0xOyAKKyAgICAgICAgfSAgICAKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgICAKKyAgICAvLyBzZXRzIG9mIG5hbWUgY2hhcmFjdGVycywgbWF4aW11bSBuYW1lIGxlbmd0aHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEFkZHMgYSBjb2RlcG9pbnQgaW50byBhIHNldCBvZiBpbnRzLgorICAgICAqIEVxdWl2YWxlbnQgdG8gU0VUX0FERC4KKyAgICAgKiBAcGFyYW0gc2V0IHNldCB0byBhZGQgdG8KKyAgICAgKiBAcGFyYW0gY2ggMTYgYml0IGNoYXIgdG8gYWRkCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGQoaW50IHNldFtdLCBjaGFyIGNoKSAKKyAgICB7CisgICAgICAgIHNldFtjaCA+Pj4gNV0gfD0gMSA8PCAoY2ggJiAweDFmKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgYSBjb2RlcG9pbnQgaXMgYSBwYXJ0IG9mIGEgc2V0IG9mIGludHMuCisgICAgICogRXF1aXZhbGVudCB0byBTRVRfQ09OVEFJTlMuCisgICAgICogQHBhcmFtIHNldCBzZXQgdG8gY2hlY2sgaW4KKyAgICAgKiBAcGFyYW0gY2ggMTYgYml0IGNoYXIgdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgY29kZXBvaW50IGlzIHBhcnQgb2YgdGhlIHNldCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjb250YWlucyhpbnQgc2V0W10sIGNoYXIgY2gpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIChzZXRbY2ggPj4+IDVdICYgKDEgPDwgKGNoICYgMHgxZikpKSAhPSAwOyAKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIGFsbCBjaGFyYWN0ZXJzIG9mIHRoZSBhcmd1bWVudCBzdHIgYW5kIGdldHMgdGhlIGxlbmd0aCAKKyAgICAgKiBFcXVpdmFsZW50IHRvIGNhbGNTdHJpbmdTZXRMZW5ndGguCisgICAgICogQHBhcmFtIHNldCBzZXQgdG8gYWRkIGFsbCBjaGFycyBvZiBzdHIgdG8KKyAgICAgKiBAcGFyYW0gc3RyIHN0cmluZyB0byBhZGQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgYWRkKGludCBzZXRbXSwgU3RyaW5nIHN0cikgCisgICAgeworICAgICAgICBpbnQgcmVzdWx0ID0gc3RyLmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IHJlc3VsdCAtIDE7IGkgPj0gMDsgaSAtLSkgeworICAgICAgICAgICAgYWRkKHNldCwgc3RyLmNoYXJBdChpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkcyBhbGwgY2hhcmFjdGVycyBvZiB0aGUgYXJndW1lbnQgc3RyIGFuZCBnZXRzIHRoZSBsZW5ndGggCisgICAgICogRXF1aXZhbGVudCB0byBjYWxjU3RyaW5nU2V0TGVuZ3RoLgorICAgICAqIEBwYXJhbSBzZXQgc2V0IHRvIGFkZCBhbGwgY2hhcnMgb2Ygc3RyIHRvCisgICAgICogQHBhcmFtIHN0ciBzdHJpbmcgdG8gYWRkCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGFkZChpbnQgc2V0W10sIFN0cmluZ0J1ZmZlciBzdHIpIAorICAgIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSByZXN1bHQgLSAxOyBpID49IDA7IGkgLS0pIHsKKyAgICAgICAgICAgIGFkZChzZXQsIHN0ci5jaGFyQXQoaSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZHMgYWxsIGFsZ29yaXRobWljIG5hbWVzIGludG8gdGhlIG5hbWUgc2V0LgorICAgICAqIEVxdWl2YWxlbnQgdG8gcGFydCBvZiBjYWxjQWxnTmFtZVNldHNMZW5ndGhzLgorICAgICAqIEBwYXJhbSBtYXhsZW5ndGggbGVuZ3RoIHRvIGNvbXBhcmUgdG8gCisgICAgICogQHJldHVybiB0aGUgbWF4aW11bSBsZW5ndGggb2YgYW55IHBvc3NpYmxlIGFsZ29yaXRobWljIG5hbWUgaWYgaXQgaXMgPiAKKyAgICAgKiAgICAgICAgIG1heGxlbmd0aCwgb3RoZXJ3aXNlIG1heGxlbmd0aCBpcyByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBhZGRBbGdvcml0aG1OYW1lKGludCBtYXhsZW5ndGgpCisgICAgeworICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1fYWxnb3JpdGhtXy5sZW5ndGggLSAxOyBpID49IDA7IGkgLS0pIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fYWxnb3JpdGhtX1tpXS5hZGQobV9uYW1lU2V0XywgbWF4bGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPiBtYXhsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBtYXhsZW5ndGggPSByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1heGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkcyBhbGwgZXh0ZW5kZWQgbmFtZXMgaW50byB0aGUgbmFtZSBzZXQuCisgICAgICogRXF1aXZhbGVudCB0byBwYXJ0IG9mIGNhbGNFeHROYW1lU2V0c0xlbmd0aHMuCisgICAgICogQHBhcmFtIG1heGxlbmd0aCBsZW5ndGggdG8gY29tcGFyZSB0byAKKyAgICAgKiBAcmV0dXJuIHRoZSBtYXhsZW5ndGggb2YgYW55IHBvc3NpYmxlIGV4dGVuZGVkIG5hbWUuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgYWRkRXh0ZW5kZWROYW1lKGludCBtYXhsZW5ndGgpIAorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IFRZUEVfTkFNRVNfLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtLSkgeworICAgICAgICAgICAgLy8gZm9yIGVhY2ggY2F0ZWdvcnksIGNvdW50IHRoZSBsZW5ndGggb2YgdGhlIGNhdGVnb3J5IG5hbWUKKyAgICAgICAgICAgIC8vIHBsdXMgOSA9CisgICAgICAgICAgICAvLyAyIGZvciA8PgorICAgICAgICAgICAgLy8gMSBmb3IgLQorICAgICAgICAgICAgLy8gNiBmb3IgbW9zdCBoZXggZGlnaXRzIHBlciBjb2RlIHBvaW50CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gOSArIGFkZChtX25hbWVTZXRfLCBUWVBFX05BTUVTX1tpXSk7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gbWF4bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgbWF4bGVuZ3RoID0gbGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXhsZW5ndGg7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZHMgbmFtZXMgb2YgYSBncm91cCB0byB0aGUgYXJndW1lbnQgc2V0LgorICAgICAqIEVxdWl2YWxlbnQgdG8gY2FsY05hbWVTZXRMZW5ndGguCisgICAgICogQHBhcmFtIG9mZnNldCBvZiB0aGUgZ3JvdXAgbmFtZSBzdHJpbmcgaW4gYnl0ZSBjb3VudAorICAgICAqIEBwYXJhbSBsZW5ndGggb2YgdGhlIGdyb3VwIG5hbWUgc3RyaW5nCisgICAgICogQHBhcmFtIHRva2VubGVuZ3RoIGFycmF5IHRvIHN0b3JlIHRoZSBsZW5ndGggb2YgZWFjaCB0b2tlbgorICAgICAqIEBwYXJhbSBzZXQgdG8gYWRkIHRvCisgICAgICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIHN0cmluZyBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgZ3JvdXAgCisgICAgICogICAgICAgICBzdHJpbmcgcGFyc2VkCisgICAgICovCisgICAgcHJpdmF0ZSBpbnRbXSBhZGRHcm91cE5hbWUoaW50IG9mZnNldCwgaW50IGxlbmd0aCwgYnl0ZSB0b2tlbmxlbmd0aFtdLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2V0W10pIAorICAgIHsKKyAgICAgICAgaW50IHJlc3VsdG5sZW5ndGggPSAwOworICAgICAgICBpbnQgcmVzdWx0cGxlbmd0aCA9IDA7CisgICAgICAgIHdoaWxlIChyZXN1bHRwbGVuZ3RoIDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaGFyIGIgPSAoY2hhcikobV9ncm91cHN0cmluZ19bb2Zmc2V0ICsgcmVzdWx0cGxlbmd0aF0gJiAweGZmKTsKKyAgICAgICAgICAgIHJlc3VsdHBsZW5ndGggKys7CisgICAgICAgICAgICBpZiAoYiA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYiA+PSBtX3Rva2VudGFibGVfLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGFkZChzZXQsIGIpOyAvLyBpbXBsaWNpdCBsZXR0ZXIKKyAgICAgICAgICAgICAgICByZXN1bHRubGVuZ3RoICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY2hhciB0b2tlbiA9IG1fdG9rZW50YWJsZV9bYiAmIDB4MDBmZl07CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IDB4RkZGRSkgeworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgbGVhZCBieXRlIGZvciBhIGRvdWJsZS1ieXRlIHRva2VuCisgICAgICAgICAgICAgICAgICAgIGIgPSAoY2hhcikoYiA8PCA4IHwgKG1fZ3JvdXBzdHJpbmdfW29mZnNldCArIHJlc3VsdHBsZW5ndGhdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIDB4MDBmZikpOworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IG1fdG9rZW50YWJsZV9bYl07CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHBsZW5ndGggKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkKHNldCwgYik7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdG5sZW5ndGggKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICAgICAgLy8gY291bnQgdG9rZW4gd29yZAorICAgICAgICAgICAgICAgICAgICAvLyB1c2UgY2FjaGVkIHRva2VuIGxlbmd0aAorICAgICAgICAgICAgICAgICAgICBieXRlIHRsZW5ndGggPSB0b2tlbmxlbmd0aFtiXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRsZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtX3V0aWxTdHJpbmdCdWZmZXJfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5kZWxldGUoMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclV0aWxpdHkuZ2V0TnVsbFRlcm1CeXRlU3ViU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbFN0cmluZ0J1ZmZlcl8sIG1fdG9rZW5zdHJpbmdfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bGVuZ3RoID0gKGJ5dGUpYWRkKHNldCwgbV91dGlsU3RyaW5nQnVmZmVyXyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbmxlbmd0aFtiXSA9IHRsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0bmxlbmd0aCArPSB0bGVuZ3RoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3V0aWxJbnRCdWZmZXJfWzBdID0gcmVzdWx0bmxlbmd0aDsKKyAgICAgICAgbV91dGlsSW50QnVmZmVyX1sxXSA9IHJlc3VsdHBsZW5ndGg7CisgICAgICAgIHJldHVybiBtX3V0aWxJbnRCdWZmZXJfOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGRzIG5hbWVzIG9mIGFsbCBncm91cCB0byB0aGUgYXJndW1lbnQgc2V0LgorICAgICAqIFNldHMgdGhlIGRhdGEgbWVtYmVyIG1fbWF4Kkxlbmd0aF8uCisgICAgICogTWV0aG9kIGNhbGxlZCBvbmx5IG9uY2UuCisgICAgICogRXF1aXZhbGVudCB0byBjYWxjR3JvdXBOYW1lU2V0c0xlbmd0aC4KKyAgICAgKiBAcGFyYW0gbWF4bGVuZ3RoIGxlbmd0aCB0byBjb21wYXJlIHRvIAorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhZGRHcm91cE5hbWUoaW50IG1heGxlbmd0aCkgCisgICAgeworICAgICAgICBpbnQgbWF4aXNvbGVuZ3RoID0gMDsKKyAgICAgICAgY2hhciBvZmZzZXRzW10gPSBuZXcgY2hhcltMSU5FU19QRVJfR1JPVVBfICsgMl07CisgICAgICAgIGNoYXIgbGVuZ3Roc1tdID0gbmV3IGNoYXJbTElORVNfUEVSX0dST1VQXyArIDJdOworICAgICAgICBieXRlIHRva2VubGVuZ3Roc1tdID0gbmV3IGJ5dGVbbV90b2tlbnRhYmxlXy5sZW5ndGhdOworICAgICAgIAorICAgICAgICAvLyBlbnVtZXJhdGUgYWxsIGdyb3VwcworICAgICAgICAvLyBmb3IgKGludCBpID0gbV9ncm91cGNvdW50XyAtIDE7IGkgPj0gMDsgaSAtLSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fZ3JvdXBjb3VudF8gOyBpICsrKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gZ2V0R3JvdXBMZW5ndGhzKGksIG9mZnNldHMsIGxlbmd0aHMpOworICAgICAgICAgICAgLy8gZW51bWVyYXRlIGFsbCBsaW5lcyBpbiBlYWNoIGdyb3VwCisgICAgICAgICAgICAvLyBmb3IgKGludCBsaW5lbnVtYmVyID0gTElORVNfUEVSX0dST1VQXyAtIDE7IGxpbmVudW1iZXIgPj0gMDsKKyAgICAgICAgICAgIC8vICAgIGxpbmVudW1iZXIgLS0pIHsKKyAgICAgICAgICAgIGZvciAoaW50IGxpbmVudW1iZXIgPSAwOyBsaW5lbnVtYmVyIDwgTElORVNfUEVSX0dST1VQXzsKKyAgICAgICAgICAgICAgICBsaW5lbnVtYmVyICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGxpbmVvZmZzZXQgPSBvZmZzZXQgKyBvZmZzZXRzW2xpbmVudW1iZXJdOworICAgICAgICAgICAgICAgIGludCBsZW5ndGggPSBsZW5ndGhzW2xpbmVudW1iZXJdOworICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgICAgLy8gcmVhZCByZWd1bGFyIG5hbWUKKyAgICAgICAgICAgICAgICBpbnQgcGFyc2VkW10gPSBhZGRHcm91cE5hbWUobGluZW9mZnNldCwgbGVuZ3RoLCB0b2tlbmxlbmd0aHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVTZXRfKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkWzBdID4gbWF4bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIDAgZm9yIG5hbWUgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aCA9IHBhcnNlZFswXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZW9mZnNldCArPSBwYXJzZWRbMV07CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFsxXSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMSBmb3IgcGFyc2VkIGdyb3VwIHN0cmluZyBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxlbmd0aCAtPSBwYXJzZWRbMV07CisgICAgICAgICAgICAgICAgLy8gcmVhZCBVbmljb2RlIDEuMCBuYW1lCisgICAgICAgICAgICAgICAgcGFyc2VkID0gYWRkR3JvdXBOYW1lKGxpbmVvZmZzZXQsIGxlbmd0aCwgdG9rZW5sZW5ndGhzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9uYW1lU2V0Xyk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFswXSA+IG1heGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAvLyAwIGZvciBuYW1lIGxlbmd0aAorICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGggPSBwYXJzZWRbMF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVvZmZzZXQgKz0gcGFyc2VkWzFdOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRbMV0gPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIDEgZm9yIHBhcnNlZCBncm91cCBzdHJpbmcgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZW5ndGggLT0gcGFyc2VkWzFdOworICAgICAgICAgICAgICAgIC8vIHJlYWQgSVNPIGNvbW1lbnQKKyAgICAgICAgICAgICAgICBwYXJzZWQgPSBhZGRHcm91cE5hbWUobGluZW9mZnNldCwgbGVuZ3RoLCB0b2tlbmxlbmd0aHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lTT0NvbW1lbnRTZXRfKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkWzFdID4gbWF4aXNvbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIG1heGlzb2xlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gc2V0IGdNYXguLi4gLSBuYW1lIGxlbmd0aCBsYXN0IGZvciB0aHJlYWRpbmcKKyAgICAgICAgbV9tYXhJU09Db21tZW50TGVuZ3RoXyA9IG1heGlzb2xlbmd0aDsKKyAgICAgICAgbV9tYXhOYW1lTGVuZ3RoXyA9IG1heGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB1cCB0aGUgbmFtZSBzZXRzIGFuZCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIG1heGltdW0gbGVuZ3Rocy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGNhbGNOYW1lU2V0c0xlbmd0aHMuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGluaXROYW1lU2V0c0xlbmd0aHMoKSAKKyAgICB7CisgICAgICAgIGlmIChtX21heE5hbWVMZW5ndGhfID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgU3RyaW5nIGV4dHJhID0gIjAxMjM0NTY3ODlBQkNERUY8Pi0iOworICAgICAgICAvLyBzZXQgaGV4IGRpZ2l0cywgdXNlZCBpbiB2YXJpb3VzIG5hbWVzLCBhbmQgPD4tLCB1c2VkIGluIGV4dGVuZGVkIAorICAgICAgICAvLyBuYW1lcworICAgICAgICBmb3IgKGludCBpID0gZXh0cmEubGVuZ3RoKCkgLSAxOyBpID49IDA7IGkgLS0pIHsKKyAgICAgICAgICAgIGFkZChtX25hbWVTZXRfLCBleHRyYS5jaGFyQXQoaSkpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIHNldCBzZXRzIGFuZCBsZW5ndGhzIGZyb20gYWxnb3JpdGhtaWMgbmFtZXMKKyAgICAgICAgbV9tYXhOYW1lTGVuZ3RoXyA9IGFkZEFsZ29yaXRobU5hbWUoMCk7CisgICAgICAgIC8vIHNldCBzZXRzIGFuZCBsZW5ndGhzIGZyb20gZXh0ZW5kZWQgbmFtZXMKKyAgICAgICAgbV9tYXhOYW1lTGVuZ3RoXyA9IGFkZEV4dGVuZGVkTmFtZShtX21heE5hbWVMZW5ndGhfKTsKKyAgICAgICAgLy8gc2V0IHNldHMgYW5kIGxlbmd0aHMgZnJvbSBncm91cCBuYW1lcywgc2V0IGdsb2JhbCBtYXhpbXVtIHZhbHVlcworICAgICAgICBhZGRHcm91cE5hbWUobV9tYXhOYW1lTGVuZ3RoXyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgY2hhciBzZXQgY3NldCBpbnRvIGEgVW5pY29kZSBzZXQgdXNldC4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGNoYXJTZXRUb1VTZXQuCisgICAgICogQHBhcmFtIHNldCBTZXQgb2YgMjU2IGJpdCBmbGFncyBjb3JyZXNwb25kaW5nIHRvIGEgc2V0IG9mIGNoYXJzLgorICAgICAqIEBwYXJhbSB1c2V0IFVTZXQgdG8gcmVjZWl2ZSBjaGFyYWN0ZXJzLiBFeGlzdGluZyBjb250ZW50cyBhcmUgZGVsZXRlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgY29udmVydChpbnQgc2V0W10sIFVuaWNvZGVTZXQgdXNldCkgCisgICAgeworICAgICAgICB1c2V0LmNsZWFyKCk7CisgICAgICAgIGlmICghaW5pdE5hbWVTZXRzTGVuZ3RocygpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gYnVpbGQgYSBjaGFyIHN0cmluZyB3aXRoIGFsbCBjaGFycyB0aGF0IGFyZSB1c2VkIGluIGNoYXJhY3RlciBuYW1lcworICAgICAgICBmb3IgKGNoYXIgYyA9IDI1NTsgYyA+IDA7IGMgLS0pIHsKKyAgICAgICAgICAgIGlmIChjb250YWlucyhzZXQsIGMpKSB7CisgICAgICAgICAgICAgICAgdXNldC5hZGQoYyk7ICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJhY3Rlck5hbWVDaG9pY2UuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJOYW1lQ2hvaWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4MjAwZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJOYW1lQ2hvaWNlLmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IAorKiAgICAgL3Vzci9jdnMvaWN1NGovaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVUNoYXJhY3Rlck5hbWVDaG9pY2VFbnVtLmphdmEgJCAKKyogJERhdGU6IDIwMDIvMDkvMTkgMjE6MTk6MDQgJCAKKyogJFJldmlzaW9uOiAxLjEgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCisvKioKKyogSW50ZXJuYWwgY2xhc3MgY29udGFpbmluZyBzZWxlY3RvciBjb25zdGFudHMgZm9yIHRoZSB1bmljb2RlIGNoYXJhY3RlciBuYW1lcy4KKyogQ29uc3RhbnRzIHJlcHJlc2VudGluZyB0aGUgIm1vZGVybiIgbmFtZSBvZiBhIFVuaWNvZGUgY2hhcmFjdGVyIG9yIHRoZSBuYW1lIAorKiB0aGF0IHdhcyBkZWZpbmVkIGluIFVuaWNvZGUgdmVyc2lvbiAxLjAsIGJlZm9yZSB0aGUgVW5pY29kZSBzdGFuZGFyZCAKKyogbWVyZ2VkIHdpdGggSVNPLTEwNjQ2LgorKiBBcmd1bWVudHMgZm9yIDxhIGhyZWY9VUNoYXJhY3Rlck5hbWUuaHRtbD5VQ2hhcmFjdGVyTmFtZTwvYT4KKyogQGF1dGhvciBTeW4gV2VlIFF1ZWsKKyogQHNpbmNlIG9jdDA2MDAKKyovCisKK3B1YmxpYyBpbnRlcmZhY2UgVUNoYXJhY3Rlck5hbWVDaG9pY2UKK3sKKyAgLy8gcHVibGljIHZhcmlhYmxlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgCisgIHN0YXRpYyBmaW5hbCBpbnQgVU5JQ09ERV9DSEFSX05BTUUgPSAwOworICBzdGF0aWMgZmluYWwgaW50IFVOSUNPREVfMTBfQ0hBUl9OQU1FID0gMTsKKyAgc3RhdGljIGZpbmFsIGludCBFWFRFTkRFRF9DSEFSX05BTUUgPSAyOworICBzdGF0aWMgZmluYWwgaW50IENIQVJfTkFNRV9DSE9JQ0VfQ09VTlQgPSAzOworICBzdGF0aWMgZmluYWwgaW50IElTT19DT01NRU5UXyA9IENIQVJfTkFNRV9DSE9JQ0VfQ09VTlQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhcmFjdGVyTmFtZVJlYWRlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJhY3Rlck5hbWVSZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWIwNjcxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJhY3Rlck5hbWVSZWFkZXIuamF2YQpAQCAtMCwwICsxLDIyNSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJOYW1lUmVhZGVyLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMC8wOSAyMzo1MzoyNCAkIAorKiAkUmV2aXNpb246IDEuMiAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKKy8qKgorKiA8cD5JbnRlcm5hbCByZWFkZXIgY2xhc3MgZm9yIElDVSBkYXRhIGZpbGUgdW5hbWUuZGF0IGNvbnRhaW5pbmcgCisqIFVuaWNvZGUgY29kZXBvaW50IG5hbWUgZGF0YS48L3A+IAorKiA8cD5UaGlzIGNsYXNzIHNpbXBseSByZWFkcyB1bmFtZXMuaWN1LCBhdXRoZW50aWNhdGVzIHRoYXQgaXQgaXMgYSB2YWxpZAorKiBJQ1UgZGF0YSBmaWxlIGFuZCBzcGxpdCBpdHMgY29udGVudHMgdXAgaW50byBibG9ja3Mgb2YgZGF0YSBmb3IgdXNlIGluCisqIDxhIGhyZWY9VUNoYXJhY3Rlck5hbWUuaHRtbD5jb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXJOYW1lPC9hPi4KKyogPC9wPiAKKyogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm1hdCBvZiB1bmFtZXMuaWN1IHJlZmVyIHRvCisqIDxhIGhyZWY9b3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovaWN1NGpodG1sL2NvbS9pYm0vaWN1L2xhbmcvcmVhZG1lLmh0bWw+CisqIFJlYWRNZTwvYT4uPFxwPgorKiA8cD51bmFtZXMuaWN1IHdoaWNoIGlzIGluIGJpZy1lbmRpYW4gZm9ybWF0IGlzIGphcmVkIHRvZ2V0aGVyIHdpdGggdGhpcyAKKyogcGFja2FnZS48L3A+CisqIEBhdXRob3IgU3luIFdlZSBRdWVrCisqIEBzaW5jZSByZWxlYXNlIDIuMSwgRmVicnVhcnkgMXN0IDIwMDIKKyogQGRyYWZ0IDIuMQorKi8KKworZmluYWwgY2xhc3MgVUNoYXJhY3Rlck5hbWVSZWFkZXIgaW1wbGVtZW50cyBJQ1VCaW5hcnkuQXV0aGVudGljYXRlCit7ICAgICAgCisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIHB1YmxpYyBib29sZWFuIGlzRGF0YVZlcnNpb25BY2NlcHRhYmxlKGJ5dGUgdmVyc2lvbltdKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZlcnNpb25bMF0gPT0gREFUQV9GT1JNQVRfVkVSU0lPTl9bMF07CisgICAgfQorICAgIAorICAgIC8vIHByb3RlY3RlZCBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIDxwPlByb3RlY3RlZCBjb25zdHJ1Y3Rvci48L3A+CisgICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0gSUNVIHVwcm9wLmRhdCBmaWxlIGlucHV0IHN0cmVhbQorICAgICogQGV4Y2VwdGlvbiBJT0V4Y2VwdGlvbiB0aHJvdyBpZiBkYXRhIGZpbGUgZmFpbHMgYXV0aGVudGljYXRpb24gCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgVUNoYXJhY3Rlck5hbWVSZWFkZXIoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIElDVUJpbmFyeS5yZWFkSGVhZGVyKGlucHV0U3RyZWFtLCBEQVRBX0ZPUk1BVF9JRF8sIHRoaXMpOworICAgICAgICBtX2RhdGFJbnB1dFN0cmVhbV8gPSBuZXcgRGF0YUlucHV0U3RyZWFtKGlucHV0U3RyZWFtKTsKKyAgICB9CisgIAorICAgIC8vIHByb3RlY3RlZCBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAorICAgIC8qKgorICAgICogUmVhZCBhbmQgYnJlYWsgdXAgdGhlIHN0cmVhbSBvZiBkYXRhIHBhc3NlZCBpbiBhcyBhcmd1bWVudHMKKyAgICAqIGFuZCBmaWxscyB1cCBVQ2hhcmFjdGVyTmFtZS4KKyAgICAqIElmIHVuc3VjY2Vzc2Z1bCBmYWxzZSB3aWxsIGJlIHJldHVybmVkLgorICAgICogQHBhcmFtIGRhdGEgaW5zdGFuY2Ugb2YgZGF0YWJsb2NrCisgICAgKiBAZXhjZXB0aW9uIHRocm93biB3aGVuIHRoZXJlJ3MgYSBkYXRhIGVycm9yLgorICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgcmVhZChVQ2hhcmFjdGVyTmFtZSBkYXRhKSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIC8vIHJlYWRpbmcgaW5kZXgKKyAgICAgICAgbV90b2tlbnN0cmluZ2luZGV4XyA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgICAgIG1fZ3JvdXBpbmRleF8gICAgICAgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICBtX2dyb3Vwc3RyaW5naW5kZXhfID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgbV9hbGduYW1lc2luZGV4XyAgICA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgICAgIAorICAgICAgICAvLyByZWFkaW5nIHRva2VucworICAgICAgICBpbnQgY291bnQgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZENoYXIoKTsKKyAgICAgICAgY2hhciB0b2tlbltdID0gbmV3IGNoYXJbY291bnRdOworICAgICAgICBmb3IgKGNoYXIgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICAgICAgdG9rZW5baV0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZENoYXIoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc2l6ZSA9IG1fZ3JvdXBpbmRleF8gLSBtX3Rva2Vuc3RyaW5naW5kZXhfOworICAgICAgICBieXRlIHRva2Vuc3RyW10gPSBuZXcgYnl0ZVtzaXplXTsKKyAgICAgICAgbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRGdWxseSh0b2tlbnN0cik7CisgICAgICAgIGRhdGEuc2V0VG9rZW4odG9rZW4sIHRva2Vuc3RyKTsKKyAgICAgICAgCisgICAgICAgIC8vIHJlYWRpbmcgdGhlIGdyb3VwIGluZm9ybWF0aW9uIHJlY29yZHMKKyAgICAgICAgY291bnQgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZENoYXIoKTsKKyAgICAgICAgZGF0YS5zZXRHcm91cENvdW50U2l6ZShjb3VudCwgR1JPVVBfSU5GT19TSVpFXyk7CisgICAgICAgIGNvdW50ICo9IEdST1VQX0lORk9fU0laRV87CisgICAgICAgIGNoYXIgZ3JvdXBbXSA9IG5ldyBjaGFyW2NvdW50XTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICAgICAgZ3JvdXBbaV0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZENoYXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2l6ZSA9IG1fYWxnbmFtZXNpbmRleF8gLSBtX2dyb3Vwc3RyaW5naW5kZXhfOworICAgICAgICBieXRlIGdyb3Vwc3RyaW5nW10gPSBuZXcgYnl0ZVtzaXplXTsKKyAgICAgICAgbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRGdWxseShncm91cHN0cmluZyk7CisgICAgCisgICAgICAgIGRhdGEuc2V0R3JvdXAoZ3JvdXAsIGdyb3Vwc3RyaW5nKTsKKyAgICAgICAgCisgICAgICAgIGNvdW50ID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgVUNoYXJhY3Rlck5hbWUuQWxnb3JpdGhtTmFtZSBhbGdbXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVDaGFyYWN0ZXJOYW1lLkFsZ29yaXRobU5hbWVbY291bnRdOworICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykKKyAgICAgICAgeworICAgICAgICAgICAgVUNoYXJhY3Rlck5hbWUuQWxnb3JpdGhtTmFtZSBhbiA9IHJlYWRBbGcoKTsKKyAgICAgICAgICAgIGlmIChhbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJ1bmFtZXMuaWN1IHJlYWQgZXJyb3I6IEFsZ29yaXRobWljIG5hbWVzIGNyZWF0aW9uIGVycm9yIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhbGdbaV0gPSBhbjsKKyAgICAgICAgfQorICAgICAgICBkYXRhLnNldEFsZ29yaXRobShhbGcpOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICogPHA+Q2hlY2tpbmcgdGhlIGZpbGUgZm9yIHRoZSBjb3JyZWN0IGZvcm1hdC48L3A+CisgICAgKiBAcGFyYW0gZGF0YWZvcm1hdGlkCisgICAgKiBAcGFyYW0gZGF0YWZvcm1hdHZlcnNpbworICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBmaWxlIGZvcm1hdCB2ZXJzaW9uIGlzIGNvcnJlY3QKKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHByb3RlY3RlZCBib29sZWFuIGF1dGhlbnRpY2F0ZShieXRlIGRhdGFmb3JtYXRpZFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlIGRhdGFmb3JtYXR2ZXJzaW9uW10pCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlzLmVxdWFscyhEQVRBX0ZPUk1BVF9JRF8sIGRhdGFmb3JtYXRpZCkgJiYKKyAgICAgICAgICAgICAgIEFycmF5cy5lcXVhbHMoREFUQV9GT1JNQVRfVkVSU0lPTl8sIGRhdGFmb3JtYXR2ZXJzaW9uKTsKKyAgICB9CisgICAgCisgICAgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgICAvKioKKyAgICAqIERhdGEgaW5wdXQgc3RyZWFtIGZvciBuYW1lcyAKKyAgICAqLworICAgIHByaXZhdGUgRGF0YUlucHV0U3RyZWFtIG1fZGF0YUlucHV0U3RyZWFtXzsKKyAgICAvKioKKyAgICAqIFNpemUgb2YgdGhlIGdyb3VwIGluZm9ybWF0aW9uIGJsb2NrIGluIG51bWJlciBvZiBjaGFyCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR1JPVVBfSU5GT19TSVpFXyA9IDM7CisKKyAgICAvKioKKyAgICAqIEluZGV4IG9mIHRoZSBvZmZzZXQgaW5mb3JtYXRpb24KKyAgICAqLworICAgIHByaXZhdGUgaW50IG1fdG9rZW5zdHJpbmdpbmRleF87CisgICAgcHJpdmF0ZSBpbnQgbV9ncm91cGluZGV4XzsKKyAgICBwcml2YXRlIGludCBtX2dyb3Vwc3RyaW5naW5kZXhfOworICAgIHByaXZhdGUgaW50IG1fYWxnbmFtZXNpbmRleF87CisgICAgICAKKyAgICAvKioKKyAgICAqIFNpemUgb2YgYW4gYWxnb3JpdGhtaWMgbmFtZSBpbmZvcm1hdGlvbiBncm91cAorICAgICogc3RhcnQgY29kZSBwb2ludCBzaXplICsgZW5kIGNvZGUgcG9pbnQgc2l6ZSArIHR5cGUgc2l6ZSArIHZhcmlhbnQgc2l6ZSArIAorICAgICogc2l6ZSBvZiBkYXRhIHNpemUKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTEdfSU5GT19TSVpFXyA9IDEyOworICAgICAgCisgICAgLyoqCisgICAgKiBGaWxlIGZvcm1hdCB2ZXJzaW9uIGFuZCBpZCB0aGF0IHRoaXMgY2xhc3MgdW5kZXJzdGFuZHMuCisgICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGlmIGEgb2xkZXIgdmVyc2lvbiBpcyB1c2VkCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIERBVEFfRk9STUFUX1ZFUlNJT05fW10gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoYnl0ZSkweDEsIChieXRlKTB4MCwgKGJ5dGUpMHgwLCAoYnl0ZSkweDB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgREFUQV9GT1JNQVRfSURfW10gPSB7KGJ5dGUpMHg3NSwgKGJ5dGUpMHg2RSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpMHg2MSwgKGJ5dGUpMHg2RH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qKgorICAgICogQ29ycnVwdGVkIGVycm9yIHN0cmluZworICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPUlJVUFRFRF9EQVRBX0VSUk9SXyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRhIGNvcnJ1cHRlZCBpbiBjaGFyYWN0ZXIgbmFtZSBkYXRhIGZpbGUiOworICAgICAgCisgICAgLy8gcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgKiBSZWFkcyBhbiBpbmRpdmlkdWFsIHJlY29yZCBvZiBBbGdvcml0aG1OYW1lcworICAgICogQHJldHVybiBhbiBpbnN0YW5jZSBvZiBBbGdvcml0aE5hbWVzIGlmIHJlYWQgaXMgc3VjY2Vzc2Z1bCBvdGhlcndpc2UgbnVsbAorICAgICogQGV4Y2VwdGlvbiB0aHJvd24gd2hlbiBmaWxlIHJlYWQgZXJyb3Igb2NjdXJzIG9yIGRhdGEgaXMgY29ycnVwdGVkCisgICAgKi8KKyAgICBwcml2YXRlIFVDaGFyYWN0ZXJOYW1lLkFsZ29yaXRobU5hbWUgcmVhZEFsZygpIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgVUNoYXJhY3Rlck5hbWUuQWxnb3JpdGhtTmFtZSByZXN1bHQgPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVQ2hhcmFjdGVyTmFtZS5BbGdvcml0aG1OYW1lKCk7CisgICAgICAgIGludCByYW5nZXN0YXJ0ID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgaW50IHJhbmdlZW5kICAgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICBieXRlIHR5cGUgICAgICA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkQnl0ZSgpOworICAgICAgICBieXRlIHZhcmlhbnQgICA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkQnl0ZSgpOworICAgICAgICBpZiAoIXJlc3VsdC5zZXRJbmZvKHJhbmdlc3RhcnQsIHJhbmdlZW5kLCB0eXBlLCB2YXJpYW50KSkgeworICAgICAgICAJcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgaW50IHNpemUgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZENoYXIoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gVUNoYXJhY3Rlck5hbWUuQWxnb3JpdGhtTmFtZS5UWVBFXzFfKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIGZhY3RvcltdID0gbmV3IGNoYXJbdmFyaWFudF07CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZhcmlhbnQ7IGogKyspIHsKKyAgICAgICAgICAgICAgICBmYWN0b3Jbal0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZENoYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0LnNldEZhY3RvcihmYWN0b3IpOworICAgICAgICAgICAgc2l6ZSAtPSAodmFyaWFudCA8PCAxKTsKKyAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICBTdHJpbmdCdWZmZXIgcHJlZml4ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBjaGFyIGMgPSAoY2hhcikobV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRCeXRlKCkgJiAweDAwRkYpOworICAgICAgICB3aGlsZSAoYyAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwcmVmaXguYXBwZW5kKGMpOworICAgICAgICAgICAgYyA9IChjaGFyKShtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEJ5dGUoKSAmIDB4MDBGRik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5zZXRQcmVmaXgocHJlZml4LnRvU3RyaW5nKCkpOworICAgICAgICAKKyAgICAgICAgc2l6ZSAtPSAoQUxHX0lORk9fU0laRV8gKyBwcmVmaXgubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSBzdHJpbmdbXSA9IG5ldyBieXRlW3NpemVdOworICAgICAgICAgICAgbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRGdWxseShzdHJpbmcpOworICAgICAgICAgICAgcmVzdWx0LnNldEZhY3RvclN0cmluZyhzdHJpbmcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhcmFjdGVyUHJvcGVydHkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJQcm9wZXJ0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNzI1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhcmFjdGVyUHJvcGVydHkuamF2YQpAQCAtMCwwICsxLDE5MDMgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAKKyogICAgICAgICAvdXNyL2N2cy9pY3U0ai9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9VQ2hhcmFjdGVyUHJvcGVydHlEQi5qYXZhICQgCisqICREYXRlOiAyMDAyLzEwLzMxIDIyOjM1OjE5ICQgCisqICRSZXZpc2lvbjogMS4xOSAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5WZXJzaW9uSW5mbzsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXJDYXRlZ29yeTsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVQcm9wZXJ0eTsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkJyZWFrSXRlcmF0b3I7CisKKy8qKgorKiA8cD5JbnRlcm5hbCBjbGFzcyB1c2VkIGZvciBVbmljb2RlIGNoYXJhY3RlciBwcm9wZXJ0eSBkYXRhYmFzZS48L3A+CisqIDxwPlRoaXMgY2xhc3NlcyBzdG9yZSBiaW5hcnkgZGF0YSByZWFkIGZyb20gdXByb3BzLmljdS4gCisqIEl0IGRvZXMgbm90IGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgdGhlIGRhdGEgaW50byBtb3JlIGhpZ2gtbGV2ZWwgCisqIGluZm9ybWF0aW9uLiBJdCBvbmx5IHJldHVybnMgYnl0ZXMgb2YgaW5mb3JtYXRpb24gd2hlbiByZXF1aXJlZC48L3A+CisqIDxwPkR1ZSB0byB0aGUgZm9ybSBtb3N0IGNvbW1vbmx5IHVzZWQgZm9yIHJldHJpZXZhbCwgYXJyYXkgb2YgY2hhciBpcyB1c2VkCisqIHRvIHN0b3JlIHRoZSBiaW5hcnkgZGF0YS48L3A+CisqIDxwPlVDaGFyYWN0ZXJQcm9wZXJ0eURCIGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gb24gYWNjZXNzaW5nIGluZGV4ZXMgdG8gCisqIHNpZ25pZmljYW50IHBvaW50cyBpbiB0aGUgYmluYXJ5IGRhdGEuPC9wPgorKiA8cD5SZXNwb25zaWJpbGl0eSBmb3IgbW9sZGluZyB0aGUgYmluYXJ5IGRhdGEgaW50byBtb3JlIG1lYW5pbmcgZm9ybSBsaWVzIG9uIAorKiA8YSBocmVmPVVDaGFyYWN0ZXIuaHRtbD5VQ2hhcmFjdGVyPC9hPi48L3A+CisqIEBhdXRob3IgU3luIFdlZSBRdWVrCisqIEBzaW5jZSByZWxlYXNlIDIuMSwgZmVicnVhcnkgMXN0IDIwMDIKKyogQGRyYWZ0IDIuMQorKi8KKworcHVibGljIGZpbmFsIGNsYXNzIFVDaGFyYWN0ZXJQcm9wZXJ0eSBpbXBsZW1lbnRzIFRyaWUuRGF0YU1hbmlwdWxhdGUKK3sKKwkvLyBwdWJsaWMgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCisJLyoqCisgICAgKiBUcmllIGRhdGEKKyAgICAqLworICAgIHB1YmxpYyBDaGFyVHJpZSBtX3RyaWVfOyAgICAKKyAgICAvKioKKyAgICAqIENoYXJhY3RlciBwcm9wZXJ0eSB0YWJsZQorICAgICovCisgICAgcHVibGljIGludCBtX3Byb3BlcnR5X1tdOworICAgIC8qKgorICAgICogVW5pY29kZSB2ZXJzaW9uCisgICAgKi8KKyAgICBwdWJsaWMgVmVyc2lvbkluZm8gbV91bmljb2RlVmVyc2lvbl87CisgICAgLyoqCisgICAgICogRXhjZXB0aW9uIGluZGljYXRvciBmb3IgdXBwZXJjYXNlIHR5cGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWENfVVBQRVJDQVNFXyA9IDA7CisgICAgLyoqCisgICAgICogRXhjZXB0aW9uIGluZGljYXRvciBmb3IgbG93ZXJjYXNlIHR5cGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWENfTE9XRVJDQVNFXyA9IDE7CisgICAgLyoqCisgICAgICogRXhjZXB0aW9uIGluZGljYXRvciBmb3IgdGl0bGVjYXNlIHR5cGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWENfVElUTEVDQVNFXyA9IDI7CisgICAgLyoqCisgICAgICogRXhjZXB0aW9uIGluZGljYXRvciBmb3IgZGlnaXQgdHlwZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVYQ19VTlVTRURfID0gMzsKKyAgICAvKioKKyAgICAgKiBFeGNlcHRpb24gaW5kaWNhdG9yIGZvciBudW1lcmljIHR5cGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWENfTlVNRVJJQ19WQUxVRV8gPSA0OworICAgIC8qKgorICAgICAqIEV4Y2VwdGlvbiBpbmRpY2F0b3IgZm9yIGRlbm9taW5hdG9yIHR5cGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWENfREVOT01JTkFUT1JfVkFMVUVfID0gNTsKKyAgICAvKioKKyAgICAgKiBFeGNlcHRpb24gaW5kaWNhdG9yIGZvciBtaXJyb3IgdHlwZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVYQ19NSVJST1JfTUFQUElOR18gPSA2OworICAgIC8qKgorICAgICAqIEV4Y2VwdGlvbiBpbmRpY2F0b3IgZm9yIHNwZWNpYWwgY2FzaW5nIHR5cGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWENfU1BFQ0lBTF9DQVNJTkdfID0gNzsKKyAgICAvKioKKyAgICAgKiBFeGNlcHRpb24gaW5kaWNhdG9yIGZvciBjYXNlIGZvbGRpbmcgdHlwZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVYQ19DQVNFX0ZPTERJTkdfID0gODsKKyAgICAvKioKKyAgICAgKiBFWENfQ09NQklOSU5HX0NMQVNTXyBpcyBub3QgZm91bmQgaW4gSUNVLgorICAgICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIGNvbWJpbmluZyBjbGFzcyBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSBleGNlcHRpb24KKyAgICAgKiB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVYQ19DT01CSU5JTkdfQ0xBU1NfID0gOTsKKyAgICAvKioKKyAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBleHBhbnNpb24gZm9yIGEgY2FzZSBtYXBwaW5nCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NBU0VfTUFQX1NJWkUgPSAxMDsgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoqCisgICAgKiBUdXJraXNoIElTTyA2MzkgMiBjaGFyYWN0ZXIgY29kZQorICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFVSS0lTSF8gPSAidHIiOyAgCisgICAgLyoqCisgICAgKiBBemVyYmFpamFuaSBJU08gNjM5IDIgY2hhcmFjdGVyIGNvZGUKKyAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFaRVJCQUlKQU5JXyA9ICJheiI7ICAgIAorICAgIC8qKgorICAgICogTGl0aHVhbmlhbiBJU08gNjM5IDIgY2hhcmFjdGVyIGNvZGUKKyAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExJVEhVQU5JQU5fID0gImx0IjsgICAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAqIExhdGluIGNhcGl0YWwgbGV0dGVyIGkgd2l0aCBkb3QgYWJvdmUKKyAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgTEFUSU5fQ0FQSVRBTF9MRVRURVJfSV9XSVRIX0RPVF9BQk9WRV8gPSAweDEzMDsKKyAgICAvKioKKyAgICAqIExhdGluIHNtYWxsIGxldHRlciBpIHdpdGggZG90IGFib3ZlCisgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIExBVElOX1NNQUxMX0xFVFRFUl9ET1RMRVNTX0lfID0gMHgxMzE7CisgICAgLyoqCisgICAgKiBMYXRpbiBsb3dlcmNhc2UgaQorICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIExBVElOX1NNQUxMX0xFVFRFUl9JXyA9IDB4Njk7CisgICAgLyoqCisgICAgKiBDaGFyYWN0ZXIgdHlwZSBtYXNrCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX01BU0sgPSAweDFGOyAKKyAgICAvKioKKyAgICAqIEV4Y2VwdGlvbiB0ZXN0IG1hc2sKKyAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVYQ0VQVElPTl9NQVNLID0gMHgyMDsgCisgICAgLyoqCisgICAgKiBNaXJyb3IgdGVzdCBtYXNrCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSVJST1JfTUFTSyA9IDEgPDwgMTE7CisgICAgCisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgKiBDYWxsZWQgYnkgY29tLmlibS5pY3UudXRpbC5UcmllIHRvIGV4dHJhY3QgZnJvbSBhIGxlYWQgc3Vycm9nYXRlJ3MgCisgICAgKiBkYXRhIHRoZSBpbmRleCBhcnJheSBvZmZzZXQgb2YgdGhlIGluZGV4ZXMgZm9yIHRoYXQgbGVhZCBzdXJyb2dhdGUuCisgICAgKiBAcGFyYW0gcHJvcGVydHkgZGF0YSB2YWx1ZSBmb3IgYSBzdXJyb2dhdGUgZnJvbSB0aGUgdHJpZSwgaW5jbHVkaW5nIHRoZQorICAgICogICAgICAgIGZvbGRpbmcgb2Zmc2V0CisgICAgKiBAcmV0dXJuIGRhdGEgb2Zmc2V0IG9yIDAgaWYgdGhlcmUgaXMgbm8gZGF0YSBmb3IgdGhlIGxlYWQgc3Vycm9nYXRlCisgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZvbGRpbmdPZmZzZXQoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCh2YWx1ZSAmIFNVUFBMRU1FTlRBUllfRk9MRF9JTkRJQ0FUT1JfTUFTS18pICE9IDApIHsKKyAgICAgICAgICAgIHJldHVybiAodmFsdWUgJiBTVVBQTEVNRU5UQVJZX0ZPTERfT0ZGU0VUX01BU0tfKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogR2V0cyB0aGUgcHJvcGVydHkgdmFsdWUgYXQgdGhlIGluZGV4CisgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB3aG9zZSBwcm9wZXJ0eSB2YWx1ZSBpcyB0byBiZSByZXRyaWV2ZWQKKyAgICAqIEByZXR1cm4gcHJvcGVydHkgdmFsdWUgb2YgY29kZSBwb2ludAorICAgICovCisgICAgcHVibGljIGludCBnZXRQcm9wZXJ0eShpbnQgY2gpCisgICAgeworICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eV9bbV90cmllXy5nZXRDb2RlUG9pbnRWYWx1ZShjaCldOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIEdldHRpbmcgdGhlIHNpZ25lZCBudW1lcmljIHZhbHVlIG9mIGEgY2hhcmFjdGVyIGVtYmVkZGVkIGluIHRoZSBwcm9wZXJ0eQorICAgICogYXJndW1lbnQKKyAgICAqIEBwYXJhbSBwcm9wIHRoZSBjaGFyYWN0ZXIKKyAgICAqIEByZXR1cm4gc2lnbmVkIG51bWJlcmljIHZhbHVlCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRTaWduZWRWYWx1ZShpbnQgcHJvcCkKKyAgICB7CisgICAgICAgIHJldHVybiAocHJvcCA+PiBWQUxVRV9TSElGVF8pOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICogR2V0dGluZyB0aGUgZXhjZXB0aW9uIGluZGV4IGZvciBhcmd1bWVudCBwcm9wZXJ0eQorICAgICogQHBhcmFtIHByb3AgY2hhcmFjdGVyIHByb3BlcnR5IAorICAgICogQHJldHVybiBleGNlcHRpb24gaW5kZXggCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRFeGNlcHRpb25JbmRleChpbnQgcHJvcCkKKyAgICB7CisgICAgICAgIHJldHVybiAocHJvcCA+PiBWQUxVRV9TSElGVF8pICYgVU5TSUdORURfVkFMVUVfTUFTS19BRlRFUl9TSElGVF87CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogR2V0dGluZyB0aGUgdW5zaWduZWQgbnVtZXJpYyB2YWx1ZSBvZiBhIGNoYXJhY3RlciBlbWJlZGRlZCBpbiB0aGUgcHJvcGVydHkKKyAgICAqIGFyZ3VtZW50CisgICAgKiBAcGFyYW0gcHJvcCB0aGUgY2hhcmFjdGVyCisgICAgKiBAcmV0dXJuIHVuc2lnbmVkIG51bWJlcmljIHZhbHVlCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRVbnNpZ25lZFZhbHVlKGludCBwcm9wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChwcm9wID4+IFZBTFVFX1NISUZUXykgJiBVTlNJR05FRF9WQUxVRV9NQVNLX0FGVEVSX1NISUZUXzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBleGNlcHRpb24gdmFsdWUgcGFzc2VkIGluIGhhcyB0aGUga2luZCBvZiBpbmZvcm1hdGlvbgorICAgICogd2hpY2ggdGhlIGluZGljYXRvciB3YW50cywgZS5nIGlmIHRoZSBleGNlcHRpb24gdmFsdWUgY29udGFpbnMgdGhlIGRpZ2l0CisgICAgKiB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyCisgICAgKiBAcGFyYW0gaW5kZXggZXhjZXB0aW9uIGluZGV4CisgICAgKiBAcGFyYW0gaW5kaWNhdG9yIHR5cGUgaW5kaWNhdG9yCisgICAgKiBAcmV0dXJuIHRydWUgaWYgdHlwZSB2YWx1ZSBleGlzdAorICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaGFzRXhjZXB0aW9uVmFsdWUoaW50IGluZGV4LCBpbnQgaW5kaWNhdG9yKSAKKyAgICB7CisgICAgICAgIHJldHVybiAobV9leGNlcHRpb25fW2luZGV4XSAmICgxIDw8IGluZGljYXRvcikpICE9IDA7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSBleGNlcHRpb24gdmFsdWUgYXQgdGhlIGluZGV4LCBhc3N1bWluZyB0aGF0IGRhdGEgdHlwZSBpcyAKKyAgICAqIGF2YWlsYWJsZS4gUmVzdWx0IGlzIHVuZGVmaW5lZCBpZiBkYXRhIGlzIG5vdCBhdmFpbGFibGUuIFVzZSAKKyAgICAqIGhhc0V4Y2VwdGlvblZhbHVlKCkgdG8gZGV0ZXJtaW5lIGRhdGEncyBhdmFpbGFiaWxpdHkuCisgICAgKiBAcGFyYW0gaW5kZXggCisgICAgKiBAcGFyYW0gZXhjZXB0aW9uIGRhdGEgdHlwZQorICAgICogQHJldHVybiBleGNlcHRpb24gZGF0YSB0eXBlIHZhbHVlIGF0IGluZGV4CisgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEV4Y2VwdGlvbihpbnQgaW5kZXgsIGludCBldHlwZSkKKyAgICB7CisgICAgICAgIC8vIGNvbnRhaW5lZCBpbiBleGNlcHRpb24gZGF0YQorICAgICAgICBpbnQgZXZhbHVlID0gbV9leGNlcHRpb25fW2luZGV4XTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoZXR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRVhDX0NPTUJJTklOR19DTEFTU18gOgorICAgICAgICAgICAgICAgIHJldHVybiBldmFsdWU7CisgICAgICAgICAgICBkZWZhdWx0IDoKKyAgICAgICAgICAgICAgICBpbmRleCArKzsKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZWQgaW4gdGhlIGV4Y2VwdGlvbiBkaWdpdCBhZGRyZXNzCisgICAgICAgICAgICAgICAgaW5kZXggPSBhZGRFeGNlcHRpb25PZmZzZXQoZXZhbHVlLCBldHlwZSwgaW5kZXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2V4Y2VwdGlvbl9baW5kZXhdOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIGZvbGRlZCBjYXNlIHZhbHVlIGF0IHRoZSBpbmRleAorICAgICogQHBhcmFtIGluZGV4IG9mIHRoZSBjYXNlIHZhbHVlIHRvIGJlIHJldHJpZXZlZAorICAgICogQHJldHVybiBmb2xkZWQgY2FzZSB2YWx1ZSBhdCBpbmRleAorICAgICovCisgICAgcHVibGljIGludCBnZXRGb2xkQ2FzZShpbnQgaW5kZXgpCisgICAgeworICAgICAgICBjaGFyIHNpbmdsZSA9IG1fY2FzZV9baW5kZXhdOworICAgICAgICBpZiAoVVRGMTYuTEVBRF9TVVJST0dBVEVfTUlOX1ZBTFVFIDw9IHNpbmdsZSAmJiAKKyAgICAgICAgICAgIHNpbmdsZSA8PSBVVEYxNi5UUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFKSB7CisgICAgICAgIC8vIENvbnZlcnQgdGhlIFVURi0xNiBzdXJyb2dhdGUgcGFpciBpZiBuZWNlc3NhcnkuCisgICAgICAgIC8vIEZvciBzaW1wbGljaXR5IGluIHVzYWdlLCBhbmQgYmVjYXVzZSB0aGUgZnJlcXVlbmN5IG9mIHBhaXJzIGlzIGxvdywKKyAgICAgICAgLy8gbG9vayBib3RoIGRpcmVjdGlvbnMuCisgICAgICAgICAgICAgICAgICAKKwkgICAgICAgIGlmIChzaW5nbGUgPD0gVVRGMTYuTEVBRF9TVVJST0dBVEVfTUFYX1ZBTFVFKSB7CisJICAgICAgICAgICAgY2hhciB0cmFpbCA9IG1fY2FzZV9baW5kZXggKyAxXTsKKwkgICAgICAgICAgICBpZiAoVVRGMTYuTEVBRF9TVVJST0dBVEVfTUlOX1ZBTFVFIDw9IHRyYWlsICYmIAorCQkgICAgICAgICAgICB0cmFpbCA8PSBVVEYxNi5UUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFKSB7CisJICAgICAgICAgICAgICAgIHJldHVybiBnZXRSYXdTdXBwbGVtZW50YXJ5KHNpbmdsZSwgdHJhaWwpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0gCisJICAgICAgICBlbHNlIAorCSAgICAgICAgeyAKKwkgICAgICAgICAgICBjaGFyIGxlYWQgPSBtX2Nhc2VfW2luZGV4IC0gMV07CisJICAgICAgICAgICAgaWYgKFVURjE2LkxFQURfU1VSUk9HQVRFX01JTl9WQUxVRSA8PSBsZWFkICYmIAorCQkgICAgICAgICAgICBsZWFkIDw9IFVURjE2LkxFQURfU1VSUk9HQVRFX01BWF9WQUxVRSkgeworCSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UmF3U3VwcGxlbWVudGFyeShsZWFkLCBzaW5nbGUpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gc2luZ2xlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIEdldHMgdGhlIGZvbGRlZCBjYXNlIHZhbHVlIGF0IHRoZSBpbmRleAorICAgICogQHBhcmFtIGluZGV4IG9mIHRoZSBjYXNlIHZhbHVlIHRvIGJlIHJldHJpZXZlZAorICAgICogQHBhcmFtIGNvdW50IG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJldHJpZXZlCisgICAgKiBAcGFyYW0gYnVmZmVyIHN0cmluZyBidWZmZXIgdG8gYWRkIHJlc3VsdCB0bworICAgICovCisgICAgcHVibGljIHZvaWQgZ2V0Rm9sZENhc2UoaW50IGluZGV4LCBpbnQgY291bnQsIFN0cmluZ0J1ZmZlciBzdHIpIAorICAgIHsKKyAgICAgICAgLy8gZmlyc3QgMiBjaGFycyBhcmUgZm9yIHRoZSBzaW1wbGUgbWFwcGluZ3MKKyAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgICAgICAJc3RyLmFwcGVuZChtX2Nhc2VfW2luZGV4XSk7CisgICAgICAgIAlpbmRleCArKzsKKyAgICAgICAgCWNvdW50IC0tOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogR2V0cyB0aGUgdXBwZXIgY2FzZSB2YWx1ZSBhdCB0aGUgaW5kZXgKKyAgICAqIEBwYXJhbSBpbmRleCBvZiB0aGUgY2FzZSB2YWx1ZSB0byBiZSByZXRyaWV2ZWQKKyAgICAqIEBwYXJhbSBidWZmZXIgc3RyaW5nIGJ1ZmZlciB0byBhZGQgcmVzdWx0IHRvCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBnZXRVcHBlckNhc2UoaW50IGluZGV4LCBTdHJpbmdCdWZmZXIgYnVmZmVyKQorICAgIHsKKyAgICAJaW50IGNvdW50ID0gbV9jYXNlX1tpbmRleF07CisgICAgICAgIC8vIGxhc3QgNSBiaXRzIG9mIHRoZSBmaXJzdCBjaGFyIGluIG1fY2FzZV8gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSAKKyAgICAgICAgLy8gYWx0ZXJuYXRlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzCisgICAgICAgIGluZGV4ICs9IChjb3VudCAmIExBU1RfNV9CSVRfTUFTS18pICsgMTsKKyAgICAgICAgY291bnQgPSAoY291bnQgPj4gU0hJRlRfNV8pICYgTEFTVF81X0JJVF9NQVNLXzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgaiArKykgeworICAgICAgICAJYnVmZmVyLmFwcGVuZChtX2Nhc2VfW2luZGV4ICsgal0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogR2V0cyB0aGUgdXBwZXIgY2FzZSB2YWx1ZSBhdCB0aGUgaW5kZXgKKyAgICAqIEBwYXJhbSBpbmRleCBvZiB0aGUgY2FzZSB2YWx1ZSB0byBiZSByZXRyaWV2ZWQKKyAgICAqIEBwYXJhbSBidWZmZXIgc3RyaW5nIGJ1ZmZlciB0byBhZGQgcmVzdWx0IHRvCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBnZXRUaXRsZUNhc2UoaW50IGluZGV4LCBTdHJpbmdCdWZmZXIgYnVmZmVyKQorICAgIHsKKyAgICAgICAgaW50IGNvdW50ID0gbV9jYXNlX1tpbmRleF07CisgICAgICAgIC8vIGxhc3QgNSBiaXRzIG9mIHRoZSBmaXJzdCBjaGFyIGluIG1fY2FzZV8gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSAKKyAgICAgICAgLy8gYWx0ZXJuYXRlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzCisgICAgICAgIGluZGV4ICs9IChjb3VudCAmIExBU1RfNV9CSVRfTUFTS18pICsgMSArIAorICAgICAgICAgICAgICAgICAoKGNvdW50ID4+IFNISUZUXzVfKSAmIExBU1RfNV9CSVRfTUFTS18pOworICAgICAgICBjb3VudCA9IChjb3VudCA+PiBTSElGVF8xMF8pICYgTEFTVF81X0JJVF9NQVNLXzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgaiArKykgeworICAgICAgICAJYnVmZmVyLmFwcGVuZChtX2Nhc2VfW2luZGV4ICsgal0pOworICAgICAgICB9CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgKiBHZXRzIHRoZSBsb3dlciBjYXNlIHZhbHVlIGF0IHRoZSBpbmRleAorICAgICogQHBhcmFtIGluZGV4IG9mIHRoZSBjYXNlIHZhbHVlIHRvIGJlIHJldHJpZXZlZAorICAgICogQHBhcmFtIGJ1ZmZlciBzdHJpbmcgYnVmZmVyIHRvIGFkZCByZXN1bHQgdG8KKyAgICAqLworICAgIHB1YmxpYyB2b2lkIGdldExvd2VyQ2FzZShpbnQgaW5kZXgsIFN0cmluZ0J1ZmZlciBidWZmZXIpCisgICAgeworICAgICAgICBpbnQgY291bnQgPSBtX2Nhc2VfW2luZGV4XSAmIExBU1RfNV9CSVRfTUFTS187CisgICAgICAgIC8vIGxhc3QgNSBiaXRzIG9mIHRoZSBmaXJzdCBjaGFyIGluIG1fY2FzZV8gZ2l2ZXMgdGhlIHNpemUgb2YgdGhlIAorICAgICAgICAvLyBsb3dlcmNhc2UgY2hhcmFjdGVycworICAgICAgICBpbmRleCArKzsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgaiArKykgeworICAgICAgICAJYnVmZmVyLmFwcGVuZChtX2Nhc2VfW2luZGV4ICsgal0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIHVuaWNvZGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLgorICAgICAqIEMgdmVyc2lvbiBnZXRVbmljb2RlUHJvcGVydGllcy4KKyAgICAgKiBAcGFyYW0gY29kZXBvaW50IGNvZGVwb2ludCB3aG9zZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaXMgdG8gYmUgCisgICAgICogICAgICAgICAgICAgICAgICByZXRyaWV2ZWQKKyAgICAgKiBAcGFyYW0gY29sdW1uCisgICAgICogQHJldHVybiB1bmljb2RlIHByb3BlcnRpZXMKKyAgICAgKi8gCisgICAJcHVibGljIGludCBnZXRBZGRpdGlvbmFsKGludCBjb2RlcG9pbnQsIGludCBjb2x1bW4pIHsgCisgICAgICAgIGlmIChjb2x1bW4gPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0eShjb2RlcG9pbnQpOworICAgICAgICB9CisgICAJCWlmIChjb2x1bW4gPCAwIHx8IGNvbHVtbiA+PSBtX2FkZGl0aW9uYWxDb2x1bW5zQ291bnRfKSB7IAorICAgICAgICAgICByZXR1cm4gMDsgCisgICAgICAgfSAKKyAgICAgICByZXR1cm4gbV9hZGRpdGlvbmFsVmVjdG9yc19bCisgICAgICAgICAgICAgICAgICAgICBtX2FkZGl0aW9uYWxUcmllXy5nZXRDb2RlUG9pbnRWYWx1ZShjb2RlcG9pbnQpICsgY29sdW1uXTsgCisgICAJfSAKKyAgIAkKKyAgIAkvKioKKyAgICAgKiA8cD5HZXQgdGhlICJhZ2UiIG9mIHRoZSBjb2RlIHBvaW50LjwvcD4KKyAgICAgKiA8cD5UaGUgImFnZSIgaXMgdGhlIFVuaWNvZGUgdmVyc2lvbiB3aGVuIHRoZSBjb2RlIHBvaW50IHdhcyBmaXJzdAorICAgICAqIGRlc2lnbmF0ZWQgKGFzIGEgbm9uLWNoYXJhY3RlciBvciBmb3IgUHJpdmF0ZSBVc2UpIG9yIGFzc2lnbmVkIGEgCisgICAgICogY2hhcmFjdGVyLjwvcD4KKyAgICAgKiA8cD5UaGlzIGNhbiBiZSB1c2VmdWwgdG8gYXZvaWQgZW1pdHRpbmcgY29kZSBwb2ludHMgdG8gcmVjZWl2aW5nIAorICAgICAqIHByb2Nlc3NlcyB0aGF0IGRvIG5vdCBhY2NlcHQgbmV3ZXIgY2hhcmFjdGVycy48L3A+CisgICAgICogPHA+VGhlIGRhdGEgaXMgZnJvbSB0aGUgVUNEIGZpbGUgRGVyaXZlZEFnZS50eHQuPC9wPgorICAgICAqIDxwPlRoaXMgQVBJIGRvZXMgbm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29kZXBvaW50LjwvcD4KKyAgICAgKiBAcGFyYW0gY2ggVGhlIGNvZGUgcG9pbnQuCisgICAgICogQHJldHVybiB0aGUgVW5pY29kZSB2ZXJzaW9uIG51bWJlcgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIFZlcnNpb25JbmZvIGdldEFnZShpbnQgY29kZXBvaW50KSAKKyAgICB7CisgICAgCWludCB2ZXJzaW9uID0gZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDApID4+IEFHRV9TSElGVF87CisgICAgCXJldHVybiBWZXJzaW9uSW5mby5nZXRJbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uID4+IEZJUlNUX05JQkJMRV9TSElGVF8pICYgTEFTVF9OSUJCTEVfTUFTS18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uICYgTEFTVF9OSUJCTEVfTUFTS18sIDAsIDApOworICAgIH0KKworCS8qKgorCSAqIDxwPkNoZWNrIGEgYmluYXJ5IFVuaWNvZGUgcHJvcGVydHkgZm9yIGEgY29kZSBwb2ludC48L3A+IAorCSAqIDxwPlVuaWNvZGUsIGVzcGVjaWFsbHkgaW4gdmVyc2lvbiAzLjIsIGRlZmluZXMgbWFueSBtb3JlIHByb3BlcnRpZXMgCisJICogdGhhbiB0aGUgb3JpZ2luYWwgc2V0IGluIFVuaWNvZGVEYXRhLnR4dC48L3A+CisJICogPHA+VGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gcmVmbGVjdCBVbmljb2RlIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiAKKwkgKiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgKFVDRCkgYW5kIFVuaWNvZGUgVGVjaG5pY2FsIFJlcG9ydHMgCisJICogKFVUUikuPC9wPgorCSAqIDxwPkZvciBkZXRhaWxzIGFib3V0IHRoZSBwcm9wZXJ0aWVzIHNlZSAKKwkgKiA8YSBocmVmPWh0dHA6Ly93d3cudW5pY29kZS5vcmcvPmh0dHA6Ly93d3cudW5pY29kZS5vcmcvPC9hPi48L3A+CisJICogPHA+Rm9yIG5hbWVzIG9mIFVuaWNvZGUgcHJvcGVydGllcyBzZWUgdGhlIFVDRCBmaWxlIAorCSAqIFByb3BlcnR5QWxpYXNlcy50eHQuPC9wPgorCSAqIDxwPlRoaXMgQVBJIGRvZXMgbm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29kZXBvaW50LjwvcD4KKwkgKiA8cD5JbXBvcnRhbnQ6IElmIElDVSBpcyBidWlsdCB3aXRoIFVDRCBmaWxlcyBmcm9tIFVuaWNvZGUgdmVyc2lvbnMgCisJICogYmVsb3cgMy4yLCB0aGVuIHByb3BlcnRpZXMgbWFya2VkIHdpdGggIm5ldyIgYXJlIG5vdCBvciAKKwkgKiBub3QgZnVsbHkgYXZhaWxhYmxlLjwvcD4KKwkgKiBAcGFyYW0gY29kZXBvaW50IENvZGUgcG9pbnQgdG8gdGVzdC4KKwkgKiBAcGFyYW0gcHJvcGVydHkgc2VsZWN0b3IgY29uc3RhbnQgZnJvbSBjb20uaWJtLmljdS5sYW5nLlVQcm9wZXJ0eSwgCisJICogICAgICAgIGlkZW50aWZpZXMgd2hpY2ggYmluYXJ5IHByb3BlcnR5IHRvIGNoZWNrLgorCSAqIEByZXR1cm4gdHJ1ZSBvciBmYWxzZSBhY2NvcmRpbmcgdG8gdGhlIGJpbmFyeSBVbmljb2RlIHByb3BlcnR5IHZhbHVlIAorCSAqICAgICAgICAgZm9yIGNoLiBBbHNvIGZhbHNlIGlmIHByb3BlcnR5IGlzIG91dCBvZiBib3VuZHMgb3IgaWYgdGhlIAorCSAqICAgICAgICAgVW5pY29kZSB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgZGF0YSBmb3IgdGhlIHByb3BlcnR5IGF0IGFsbCwgb3IgCisJICogICAgICAgICBub3QgZm9yIHRoaXMgY29kZSBwb2ludC4KKwkgKiBAc2VlIGNvbS5pYm0uaWN1LmxhbmcuVVByb3BlcnR5CisJICogQGRyYWZ0IElDVSAyLjEKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBoYXNCaW5hcnlQcm9wZXJ0eShpbnQgY29kZXBvaW50LCBpbnQgcHJvcGVydHkpIAorCXsKKwkJc3dpdGNoKHByb3BlcnR5KSB7CisgICAgCQljYXNlIFVQcm9wZXJ0eS5BTFBIQUJFVElDOiB7CisgICAgICAgIAkJLy8gTHUrTGwrTHQrTG0rTG8rTmwrT3RoZXJfQWxwaGFiZXRpYworICAgICAgICAJCWludCBnZW5lcmFsdHlwZSA9IGdldFByb3BlcnR5KGNvZGVwb2ludCkgJiBUWVBFX01BU0s7CisgICAgICAgIAkJYm9vbGVhbiBnZW5lcmFsbWF0Y2ggPSAKKyAgICAgICAgCQkgICAgICAgIGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VUFBFUkNBU0VfTEVUVEVSIAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkxPV0VSQ0FTRV9MRVRURVIgCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBnZW5lcmFsdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVElUTEVDQVNFX0xFVFRFUiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5NT0RJRklFUl9MRVRURVIgCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBnZW5lcmFsdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTEVUVEVSX05VTUJFUgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk9USEVSX0xFVFRFUjsKKyAgICAgICAgCQlyZXR1cm4gZ2VuZXJhbG1hdGNoIHx8CisgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBZGRpdGlvbmFsVHlwZShnZXRBZGRpdGlvbmFsKGNvZGVwb2ludCwgMSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RIRVJfQUxQSEFCRVRJQ19QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuQVNDSUlfSEVYX0RJR0lUOiB7CisgICAgICAgIAkJcmV0dXJuIGNvbXBhcmVBZGRpdGlvbmFsVHlwZShnZXRBZGRpdGlvbmFsKGNvZGVwb2ludCwgMSksCisJCQkJCQkJCQkJCSBBU0NJSV9IRVhfRElHSVRfUFJPUEVSVFlfKTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LkJJRElfQ09OVFJPTDogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklESV9DT05UUk9MX1BST1BFUlRZXyk7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5CSURJX01JUlJPUkVEOiB7CisgICAgICAgIAkJcmV0dXJuIChnZXRQcm9wZXJ0eShjb2RlcG9pbnQpICYgTUlSUk9SX01BU0spICE9IDA7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5EQVNIOiB7CisgICAgICAgIAkJcmV0dXJuIGNvbXBhcmVBZGRpdGlvbmFsVHlwZShnZXRBZGRpdGlvbmFsKGNvZGVwb2ludCwgMSksCisgICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVNIX1BST1BFUlRZXyk7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5ERUZBVUxUX0lHTk9SQUJMRV9DT0RFX1BPSU5UOiB7CisgICAgICAgIAkJLy8gPDIwNjAuLjIwNkYsIEZGRjAuLkZGRkIsIEUwMDAwLi5FMEZGRj4KKyAgICAgICAgICAgICAgICAvLyArT3RoZXJfRGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludCsoQ2YrQ2MrQ3MtV2hpdGVfU3BhY2UpIAorICAgICAgICAgICAgICAgIGlmICgoMHgyMDYwIDw9IGNvZGVwb2ludCAmJiBjb2RlcG9pbnQgPD0gMHgyMDZmKSAKKyAgICAgICAgICAgICAgICAgICAgfHwgKDB4ZmZmMCA8PSBjb2RlcG9pbnQgJiYgY29kZXBvaW50IDw9IDB4ZmZmYikgCisgICAgICAgICAgICAgICAgICAgIHx8ICgweGUwMDAwIDw9IGNvZGVwb2ludCAmJiBjb2RlcG9pbnQgPD0gMHhlMGZmZikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAJCQorICAgICAgICAJCWludCBhZGRpdGlvbmFscHJvcGVydHkgPSBnZXRBZGRpdGlvbmFsKGNvZGVwb2ludCwgMSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVBZGRpdGlvbmFsVHlwZShhZGRpdGlvbmFscHJvcGVydHksIAorICAgICAgIAkJICAgICAgICAgICAgICAgICAgIE9USEVSX0RFRkFVTFRfSUdOT1JBQkxFX0NPREVfUE9JTlRfUFJPUEVSVFlfKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlQWRkaXRpb25hbFR5cGUoYWRkaXRpb25hbHByb3BlcnR5LCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdISVRFX1NQQUNFX1BST1BFUlRZXykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGdlbmVyYWx0eXBlID0gZ2V0UHJvcGVydHkoY29kZXBvaW50KSAmIFRZUEVfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5GT1JNQVQgCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBnZW5lcmFsdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuQ09OVFJPTCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5TVVJST0dBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LkRFUFJFQ0FURUQ6IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFUFJFQ0FURURfUFJPUEVSVFlfKTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LkRJQUNSSVRJQzogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElBQ1JJVElDX1BST1BFUlRZXyk7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5FWFRFTkRFUjogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICBFWFRFTkRFUl9QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuRlVMTF9DT01QT1NJVElPTl9FWENMVVNJT046IHsKKyAgICAgICAgCQlyZXR1cm4gTm9ybWFsaXplckltcGwuaXNGdWxsQ29tcG9zaXRpb25FeGNsdXNpb24oY29kZXBvaW50KTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LkdSQVBIRU1FX0JBU0U6IHsKKyAgICAJCQkvLyBbMC4uMTBGRkZGXS1DYy1DZi1Dcy1Dby1Dbi1abC1acC1HcmFwaGVtZV9MaW5rLUdyYXBoZW1lX0V4dGVuZC1DR0ogPT0KKyAgICAgICAgICAgICAgICAvLyBbMC4uMTBGRkZGXS1DYy1DZi1Dcy1Dby1Dbi1abC1acC1HcmFwaGVtZV9MaW5rLShNZStNbitNYytPdGhlcl9HcmFwaGVtZV9FeHRlbmQpLUNHSiA9PQorICAgICAgICAgICAgICAgIC8vIFswLi4xMEZGRkZdLUNjLUNmLUNzLUNvLUNuLVpsLVpwLU1lLU1uLU1jLUdyYXBoZW1lX0xpbmstT3RoZXJfR3JhcGhlbWVfRXh0ZW5kLUNHSgorICAgICAgICAgICAgICAgIGlmIChjb2RlcG9pbnQgIT0gMHgzNGYpIHsgLy8gQ0dKCisgICAgICAgICAgICAgICAgICAgIGludCBnZW5lcmFsdHlwZSA9IGdldFByb3BlcnR5KGNvZGVwb2ludCkgJiBUWVBFX01BU0s7CisgICAgICAgICAgICAgCQlpZiAoZ2VuZXJhbHR5cGUgIT0gVUNoYXJhY3RlckNhdGVnb3J5LkNPTlRST0wgCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBnZW5lcmFsdHlwZSAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuRk9STUFUIAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2VuZXJhbHR5cGUgIT0gVUNoYXJhY3RlckNhdGVnb3J5LlNVUlJPR0FURQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2VuZXJhbHR5cGUgIT0gVUNoYXJhY3RlckNhdGVnb3J5LlBSSVZBVEVfVVNFCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBnZW5lcmFsdHlwZSAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuR0VORVJBTF9PVEhFUl9UWVBFUworICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2VuZXJhbHR5cGUgIT0gVUNoYXJhY3RlckNhdGVnb3J5LkxJTkVfU0VQQVJBVE9SCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBnZW5lcmFsdHlwZSAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuUEFSQUdSQVBIX1NFUEFSQVRPUgorICAgICAgICAgICAgIAkJICAgICYmIGdlbmVyYWx0eXBlICE9IFVDaGFyYWN0ZXJDYXRlZ29yeS5FTkNMT1NJTkdfTUFSSworICAgICAgICAgICAgIAkJICAgICYmIGdlbmVyYWx0eXBlICE9IFVDaGFyYWN0ZXJDYXRlZ29yeS5OT05fU1BBQ0lOR19NQVJLIAorICAgICAgICAgICAgIAkJICAgICYmIGdlbmVyYWx0eXBlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuQ09NQklOSU5HX1NQQUNJTkdfTUFSSykgeworICAgICAgICAgICAgIAkJICAgIGludCBhZGRpdGlvbmFscHJvcGVydHkgPSBnZXRBZGRpdGlvbmFsKGNvZGVwb2ludCwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWNvbXBhcmVBZGRpdGlvbmFsVHlwZShhZGRpdGlvbmFscHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSEVNRV9MSU5LX1BST1BFUlRZXykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWNvbXBhcmVBZGRpdGlvbmFsVHlwZShhZGRpdGlvbmFscHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RIRVJfR1JBUEhFTUVfRVhURU5EX1BST1BFUlRZXyk7CisgICAgICAgICAgICAgCQl9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LkdSQVBIRU1FX0VYVEVORDogeworICAgICAgICAgICAgICAgIC8vIE1lK01uK01jK090aGVyX0dyYXBoZW1lX0V4dGVuZC1HcmFwaGVtZV9MaW5rLUNHSgorICAgICAgICAgICAgICAgIGlmIChjb2RlcG9pbnQgPT0gMHgzNGYpIHsgLy8gQ0dKCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZmFzdGVzdCBjaGVjayBmaXJzdAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IGFkZGl0aW9uYWxwcm9wZXJ0eSA9IGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmVBZGRpdGlvbmFsVHlwZShhZGRpdGlvbmFscHJvcGVydHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIRU1FX0xJTktfUFJPUEVSVFlfKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGFyZUFkZGl0aW9uYWxUeXBlKGFkZGl0aW9uYWxwcm9wZXJ0eSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVEhFUl9HUkFQSEVNRV9FWFRFTkRfUFJPUEVSVFlfKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGdlbmVyYWx0eXBlID0gZ2V0UHJvcGVydHkoY29kZXBvaW50KSAmIFRZUEVfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5FTkNMT1NJTkdfTUFSSyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk5PTl9TUEFDSU5HX01BUksgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYWx0eXBlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5DT01CSU5JTkdfU1BBQ0lOR19NQVJLKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LkdSQVBIRU1FX0xJTks6IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIRU1FX0xJTktfUFJPUEVSVFlfKTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LkhFWF9ESUdJVDogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEVYX0RJR0lUX1BST1BFUlRZXyk7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5IWVBIRU46IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhZUEhFTl9QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuSURfQ09OVElOVUU6IHsKKyAgICAgICAgCQkvLyBJRF9TdGFydCtNbitNYytOZCtQYyA9PSBMdStMbCtMdCtMbStMbytObCtNbitNYytOZCtQYworICAgICAgICAJCWludCBnZW5lcmFsdHlwZSA9IGdldFByb3BlcnR5KGNvZGVwb2ludCkgJiBUWVBFX01BU0s7CisgICAgICAgIAkJcmV0dXJuIGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VUFBFUkNBU0VfTEVUVEVSIHx8CisgICAgICAgIAkJICAgICAgIGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MT1dFUkNBU0VfTEVUVEVSIHx8IAorICAgICAgICAJCSAgICAgICBnZW5lcmFsdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVElUTEVDQVNFX0xFVFRFUiB8fAorICAgICAgICAJCSAgICAgICBnZW5lcmFsdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTU9ESUZJRVJfTEVUVEVSIHx8CisgICAgICAgIAkJICAgICAgIGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5PVEhFUl9MRVRURVIgfHwKKyAgICAgICAgCQkgICAgICAgZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkxFVFRFUl9OVU1CRVIgfHwKKyAgICAgICAgCQkgICAgICAgZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk5PTl9TUEFDSU5HX01BUksgfHwKKyAgICAgICAgCQkgICAgICAgZ2VuZXJhbHR5cGUgPT0gCisgICAgICAgIAkJICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlckNhdGVnb3J5LkNPTUJJTklOR19TUEFDSU5HX01BUksgfHwKKyAgICAgICAgCQkgICAgICAgZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkRFQ0lNQUxfRElHSVRfTlVNQkVSCisgICAgICAgIAkJICAgICAgIHx8IGdlbmVyYWx0eXBlID09IAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJDYXRlZ29yeS5DT05ORUNUT1JfUFVOQ1RVQVRJT047CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5JRF9TVEFSVDogeworICAgICAgICAJCS8vIEx1K0xsK0x0K0xtK0xvK05sCisgICAgICAgIAkJaW50IGdlbmVyYWx0eXBlID0gZ2V0UHJvcGVydHkoY29kZXBvaW50KSAmIFRZUEVfTUFTSzsKKyAgICAgICAgCQlyZXR1cm4gZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlVQUEVSQ0FTRV9MRVRURVIgfHwKKyAgICAgICAgCQkgICAgICAgZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkxPV0VSQ0FTRV9MRVRURVIgfHwgCisgICAgICAgIAkJICAgICAgIGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5USVRMRUNBU0VfTEVUVEVSIHx8CisgICAgICAgIAkJICAgICAgIGdlbmVyYWx0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5NT0RJRklFUl9MRVRURVIgfHwKKyAgICAgICAgCQkgICAgICAgZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk9USEVSX0xFVFRFUiB8fAorICAgICAgICAJCSAgICAgICBnZW5lcmFsdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTEVUVEVSX05VTUJFUjsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LklERU9HUkFQSElDOiB7CisgICAgICAgIAkJcmV0dXJuIGNvbXBhcmVBZGRpdGlvbmFsVHlwZShnZXRBZGRpdGlvbmFsKGNvZGVwb2ludCwgMSksCisgICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJREVPR1JBUEhJQ19QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuSURTX0JJTkFSWV9PUEVSQVRPUjogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURTX0JJTkFSWV9PUEVSQVRPUl9QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuSURTX1RSSU5BUllfT1BFUkFUT1I6IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEU19UUklOQVJZX09QRVJBVE9SX1BST1BFUlRZXyk7CisJCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5KT0lOX0NPTlRST0w6IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpPSU5fQ09OVFJPTF9QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuTE9HSUNBTF9PUkRFUl9FWENFUFRJT046IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ0FMX09SREVSX0VYQ0VQVElPTl9QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuTE9XRVJDQVNFOiB7CisgICAgICAgIAkJLy8gTGwrT3RoZXJfTG93ZXJjYXNlCisgICAgICAgIAkJaW50IGdlbmVyYWx0eXBlID0gZ2V0UHJvcGVydHkoY29kZXBvaW50KSAmIFRZUEVfTUFTSzsKKyAgICAgICAgCQlpZiAoZ2VuZXJhbHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkxPV0VSQ0FTRV9MRVRURVIpIHsKKyAgICAgICAgCQkJcmV0dXJuIHRydWU7CisgICAgICAgIAkJfQorICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RIRVJfTE9XRVJDQVNFX1BST1BFUlRZXyk7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5NQVRIOiB7CisgICAgICAgIAkJLy8gU20rT3RoZXJfTWF0aCAKKyAgICAgICAgCQlpbnQgZ2VuZXJhbHR5cGUgPSBnZXRQcm9wZXJ0eShjb2RlcG9pbnQpICYgVFlQRV9NQVNLOworICAgICAgICAJCWlmIChnZW5lcmFsdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTUFUSF9TWU1CT0wpIHsKKyAgICAgICAgCQkJcmV0dXJuIHRydWU7CisgICAgICAgIAkJfQorICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RIRVJfTUFUSF9QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuTk9OQ0hBUkFDVEVSX0NPREVfUE9JTlQ6IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgIE5PTkNIQVJBQ1RFUl9DT0RFX1BPSU5UX1BST1BFUlRZXyk7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5RVU9UQVRJT05fTUFSSzogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVPVEFUSU9OX01BUktfUFJPUEVSVFlfKTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LlJBRElDQUw6IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBRElDQUxfUFJPUEVSVFlfKTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LlNPRlRfRE9UVEVEOiB7CisgICAgICAgIAkJcmV0dXJuIGNvbXBhcmVBZGRpdGlvbmFsVHlwZShnZXRBZGRpdGlvbmFsKGNvZGVwb2ludCwgMSksCisgICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0ZUX0RPVFRFRF9QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJY2FzZSBVUHJvcGVydHkuVEVSTUlOQUxfUFVOQ1RVQVRJT046IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFUk1JTkFMX1BVTkNUVUFUSU9OX1BST1BFUlRZXyk7CisgICAgCQl9CisJCSAgICBjYXNlIFVQcm9wZXJ0eS5VTklGSUVEX0lERU9HUkFQSDogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JRklFRF9JREVPR1JBUEhfUFJPUEVSVFlfKTsKKwkJICAgIH0KKyAgICAJCWNhc2UgVVByb3BlcnR5LlVQUEVSQ0FTRTogeworICAgICAgICAJCS8vIEx1K090aGVyX1VwcGVyY2FzZSAKKyAgICAgICAgCQlpbnQgZ2VuZXJhbHR5cGUgPSBnZXRQcm9wZXJ0eShjb2RlcG9pbnQpICYgVFlQRV9NQVNLOworICAgICAgICAJCWlmIChnZW5lcmFsdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVVBQRVJDQVNFX0xFVFRFUikgeworICAgICAgICAJCQlyZXR1cm4gdHJ1ZTsKKyAgICAgICAgCQl9CisgICAgICAgIAkJcmV0dXJuIGNvbXBhcmVBZGRpdGlvbmFsVHlwZShnZXRBZGRpdGlvbmFsKGNvZGVwb2ludCwgMSksCisgICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgT1RIRVJfVVBQRVJDQVNFX1BST1BFUlRZXyk7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5XSElURV9TUEFDRTogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hJVEVfU1BBQ0VfUFJPUEVSVFlfKTsKKyAgICAJCX0KKyAgICAJCWNhc2UgVVByb3BlcnR5LlhJRF9DT05USU5VRTogeworICAgICAgICAJCXJldHVybiBjb21wYXJlQWRkaXRpb25hbFR5cGUoZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsIDEpLAorICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWElEX0NPTlRJTlVFX1BST1BFUlRZXyk7CisgICAgCQl9CisgICAgCQljYXNlIFVQcm9wZXJ0eS5YSURfU1RBUlQ6IHsKKyAgICAgICAgCQlyZXR1cm4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGdldEFkZGl0aW9uYWwoY29kZXBvaW50LCAxKSwKKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJRF9TVEFSVF9QUk9QRVJUWV8pOworICAgIAkJfQorICAgIAkJZGVmYXVsdDoKKyAgICAgICAgCQkvLyBub3QgYSBrbm93biBiaW5hcnkgcHJvcGVydHkKKyAgICAgICAgCQlyZXR1cm4gZmFsc2U7CisgICAgCX0KKwl9CisJCisJLyoqCisgICAgKiBGb3JtcyBhIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludCBmcm9tIHRoZSBhcmd1bWVudCBjaGFyYWN0ZXI8YnI+CisgICAgKiBOb3RlIHRoaXMgaXMgZm9yIGludGVybmFsIHVzZSBoZW5jZSBubyBjaGVja3MgZm9yIHRoZSB2YWxpZGl0eSBvZiB0aGUKKyAgICAqIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFyZSBkb25lCisgICAgKiBAcGFyYW0gbGVhZCBsZWFkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIKKyAgICAqIEBwYXJhbSB0cmFpbCB0cmFpbGluZyBzdXJyb2dhdGUgY2hhcmFjdGVyCisgICAgKiBAcmV0dXJuIGNvZGUgcG9pbnQgb2YgdGhlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRSYXdTdXBwbGVtZW50YXJ5KGNoYXIgbGVhZCwgY2hhciB0cmFpbCkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVhZCA8PCBMRUFEX1NVUlJPR0FURV9TSElGVF8pICsgdHJhaWwgKyBTVVJST0dBVEVfT0ZGU0VUXzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBMb2FkcyB0aGUgcHJvcGVydHkgZGF0YSBhbmQgaW5pdGlhbGl6ZSB0aGUgVUNoYXJhY3RlclByb3BlcnR5IGluc3RhbmNlLiAKKyAgICAqIEBFeGNlcHRpb24gdGhyb3duIHdoZW4gZGF0YSBpcyBtaXNzaW5nIG9yIGRhdGEgaGFzIGJlZW4gY29ycnVwdGVkLgorICAgICovICAgIAorICAgIHB1YmxpYyBzdGF0aWMgVUNoYXJhY3RlclByb3BlcnR5IGdldEluc3RhbmNlKCkgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KKyAgICB7CisgICAgCWlmIChJTlNUQU5DRV8gPT0gbnVsbCkgeworICAgIAkJdHJ5IHsKKyAgICAJCQlJTlNUQU5DRV8gPSBuZXcgVUNoYXJhY3RlclByb3BlcnR5KCk7CisgICAgCQl9CisgICAgICAgIAljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIAl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIAl9CisgICAgCX0KKyAgICAJcmV0dXJuIElOU1RBTkNFXzsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICogU3BlY2lhbCBjYXNpbmcgbG93ZXJjYXNlIG1hbmFnZW1lbnQKKyAgICAqIEBwYXJhbSBsb2NhbGUgY3VycmVudCBsb2NhbGUKKyAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHRvIGNvbnZlcnQKKyAgICAqIEBwYXJhbSBpbmRleCBvZiBleGNlcHRpb24gY29udGFpbmluZyBzcGVjaWFsIGNhc2UgaW5mb3JtYXRpb24KKyAgICAqIEBwYXJhbSB1Y2hhcml0ZXIgdGV4dCBpdGVyYXRvciB3aXRoIGluZGV4IGF0IHBvc2l0aW9uIG9mIGNoCisgICAgKiBAcGFyYW0gYnVmZmVyIHRvIGFkZCBsb3dlcmNhc2UKKyAgICAqIEByZXR1cm4gc2l6ZSBvZiB0aGUgbG93ZXIgY2FzZSBjaGFyYWN0ZXIgaW4gVVRGMTYgZm9ybWF0CisgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFNwZWNpYWxMb3dlckNhc2UoTG9jYWxlIGxvY2FsZSwgaW50IGluZGV4LCBpbnQgY2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVySXRlcmF0b3IgdWNoYXJpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKQorICAgIHsKKyAgICAJaW50IGV4Y2VwdGlvbiA9IGdldEV4Y2VwdGlvbihpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19TUEVDSUFMX0NBU0lOR18pOworICAgICAgICBpZiAoZXhjZXB0aW9uIDwgMCkgeworICAgICAgICAJaW50IG9mZnNldCA9IHVjaGFyaXRlci5nZXRJbmRleCgpOworICAgICAgICAgICAgLy8gZmlsbCB1IGFuZCBpIHdpdGggdGhlIGNhc2UgbWFwcGluZyByZXN1bHQgc3RyaW5nCisgICAgICAgICAgICAvLyB1c2UgaGFyZGNvZGVkIGNvbmRpdGlvbnMgYW5kIG1hcHBpbmdzCisgICAgICAgICAgICAvLyBUZXN0IGZvciBjb25kaXRpb25hbCBtYXBwaW5ncyBmaXJzdAorICAgICAgICAgICAgLy8gKG90aGVyd2lzZSB0aGUgdW5jb25kaXRpb25hbCBkZWZhdWx0IG1hcHBpbmdzIGFyZSBhbHdheXMgdGFrZW4pLAorICAgICAgICAgICAgLy8gdGhlbiB0ZXN0IGZvciBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB1bmNvbmRpdGlvbmFsIG1hcHBpbmdzIGluIAorICAgICAgICAgICAgLy8gU3BlY2lhbENhc2luZy50eHQsIHRoZW4gZ2V0IHRoZSBVbmljb2RlRGF0YS50eHQgbWFwcGluZ3MuCisgICAgICAgICAgICBpZiAobG9jYWxlLmdldExhbmd1YWdlKCkuZXF1YWxzKExJVEhVQU5JQU5fKSAmJgorICAgICAgICAgICAgICAgIC8vIGJhc2UgY2hhcmFjdGVycywgZmluZCBhY2NlbnRzIGFib3ZlCisgICAgICAgICAgICAgICAgKCgoY2ggPT0gTEFUSU5fQ0FQSVRBTF9MRVRURVJfSV8gfHwgCisgICAgICAgICAgICAgICAgICAgY2ggPT0gTEFUSU5fQ0FQSVRBTF9MRVRURVJfSl8gfHwKKyAgICAgICAgICAgICAgICAgICBjaCA9PSBMQVRJTl9DQVBJVEFMX0lfV0lUSF9PR09ORUtfKSAmJgorICAgICAgICAgICAgICAgICAgaXNGb2xsb3dlZEJ5TU9SRUFCT1ZFKHVjaGFyaXRlciwgb2Zmc2V0KSkgfHwKKyAgICAgICAgICAgICAgICAgIC8vIHByZWNvbXBvc2VkIHdpdGggYWNjZW50IGFib3ZlLCBubyBuZWVkIHRvIGZpbmQgb25lCisgICAgICAgICAgICAgICAgICAoY2ggPT0gTEFUSU5fQ0FQSVRBTF9JX1dJVEhfR1JBVkVfIHx8IAorICAgICAgICAgICAgICAgICAgIGNoID09IExBVElOX0NBUElUQUxfSV9XSVRIX0FDVVRFXyB8fCAKKyAgICAgICAgICAgICAgICAgICBjaCA9PSBMQVRJTl9DQVBJVEFMX0lfV0lUSF9USUxERV8pKSkgeworICAgICAgICAgICAgICAgICAgIC8vIGxpdGh1YW5pYW46IGFkZCBhIGRvdCBhYm92ZSBpZiB0aGVyZSBhcmUgbW9yZSBhY2NlbnRzIAorICAgICAgICAgICAgICAgICAgIC8vIGFib3ZlICh0byBhbHdheXMgaGF2ZSB0aGUgZG90KQorICAgICAgICAgICAgICAgICAgIC8vICMgTGl0aHVhbmlhbgorICAgICAgICAgICAgICAgICAgIC8vICMgTGl0aHVhbmlhbiByZXRhaW5zIHRoZSBkb3QgaW4gYSBsb3dlcmNhc2UgaSB3aGVuIAorICAgICAgICAgICAgICAgICAgIC8vICAgZm9sbG93ZWQgYnkgYWNjZW50cy4KKyAgICAgICAgICAgICAgICAgICAvLyAjIEludHJvZHVjZSBhbiBleHBsaWNpdCBkb3QgYWJvdmUgd2hlbiBsb3dlcmNhc2luZyAKKyAgICAgICAgICAgICAgICAgICAvLyBjYXBpdGFsIEkncyBhbmQgSidzCisgICAgICAgICAgICAgICAgICAgLy8gd2hlbmV2ZXIgdGhlcmUgYXJlIG1vcmUgYWNjZW50cyBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAvLyAob2YgdGhlIGFjY2VudHMgdXNlZCBpbiBMaXRodWFuaWFuOiBncmF2ZSwgYWN1dGUsIHRpbGRlIAorICAgICAgICAgICAgICAgICAgIC8vIGFib3ZlLCBhbmQgb2dvbmVrKQorICAgICAgICAgICAgICAgICAgIC8vIDAwNDk7IDAwNjkgMDMwNzsgMDA0OTsgMDA0OTsgbHQgTW9yZV9BYm92ZTsgCisgICAgICAgICAgICAgICAgICAgLy8gIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgICAgICAgICAgICAgICAgLy8gMDA0QTsgMDA2QSAwMzA3OyAwMDRBOyAwMDRBOyBsdCBNb3JlX0Fib3ZlOyAKKyAgICAgICAgICAgICAgICAgICAvLyAjIExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAgICAgICAgICAgICAgICAvLyAwMTJFOyAwMTJGIDAzMDc7IDAxMkU7IDAxMkU7IGx0IE1vcmVfQWJvdmU7IAorICAgICAgICAgICAgICAgICAgIC8vICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIE9HT05FSworICAgICAgICAgICAgICAgICAgIC8vIDAwQ0M7IDAwNjkgMDMwNyAwMzAwOyAwMENDOyAwMENDOyBsdDsgCisgICAgICAgICAgICAgICAgICAgLy8gIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAgICAgICAgICAgICAgICAvLyAwMENEOyAwMDY5IDAzMDcgMDMwMTsgMDBDRDsgMDBDRDsgbHQ7IAorICAgICAgICAgICAgICAgICAgIC8vICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgICAgICAgICAgICAgICAgLy8gMDEyODsgMDA2OSAwMzA3IDAzMDM7IDAxMjg7IDAxMjg7IGx0OyAKKyAgICAgICAgICAgICAgICAgICAvLyAjIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBUSUxERQorICAgICAgICAgICAgICAgICAgIHN3aXRjaChjaCkgeworICAgICAgICAgICAgICAgICAgIGNhc2UgTEFUSU5fQ0FQSVRBTF9MRVRURVJfSV86IAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilMQVRJTl9TTUFMTF9MRVRURVJfSV8pOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilDT01CSU5JTkdfRE9UX0FCT1ZFXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICAgICBjYXNlIExBVElOX0NBUElUQUxfTEVUVEVSX0pfOiAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpTEFUSU5fU01BTExfTEVUVEVSX0pfKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpQ09NQklOSU5HX0RPVF9BQk9WRV8pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICAgICAgICAgY2FzZSBMQVRJTl9DQVBJVEFMX0lfV0lUSF9PR09ORUtfOgorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilMQVRJTl9TTUFMTF9MRVRURVJfSV9XSVRIX09HT05FS18pOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilDT01CSU5JTkdfRE9UX0FCT1ZFXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICAgICBjYXNlIExBVElOX0NBUElUQUxfSV9XSVRIX0dSQVZFXzogCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKUxBVElOX1NNQUxMX0xFVFRFUl9JXyk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKUNPTUJJTklOR19ET1RfQUJPVkVfKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpQ09NQklOSU5HX0dSQVZFX0FDQ0VOVF8pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgICAgICAgICAgICAgY2FzZSBMQVRJTl9DQVBJVEFMX0lfV0lUSF9BQ1VURV86IAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilMQVRJTl9TTUFMTF9MRVRURVJfSV8pOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilDT01CSU5JTkdfRE9UX0FCT1ZFXyk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKUNPTUJJTklOR19BQ1VURV9BQ0NFTlRfKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAgICAgICAgICAgIGNhc2UgTEFUSU5fQ0FQSVRBTF9JX1dJVEhfVElMREVfOgorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilMQVRJTl9TTUFMTF9MRVRURVJfSV8pOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcilDT01CSU5JTkdfRE9UX0FCT1ZFXyk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKUNPTUJJTklOR19USUxERV8pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gbG9jYWxlLmdldExhbmd1YWdlKCk7CisgICAgICAgICAgICBpZiAobGFuZ3VhZ2UuZXF1YWxzKFRVUktJU0hfKSB8fCBsYW5ndWFnZS5lcXVhbHMoQVpFUkJBSUpBTklfKSkgeyAKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gMHgxMzApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gIyBJIGFuZCBpLWRvdGxlc3M7IEktZG90IGFuZCBpIGFyZSBjYXNlIHBhaXJzIGluIFR1cmtpc2ggCisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBBemVyaQorICAgICAgICAgICAgICAgICAgICAvLyAjIFRoZSBmb2xsb3dpbmcgcnVsZXMgaGFuZGxlIHRob3NlIGNhc2VzLgorICAgICAgICAgICAgICAgICAgICAvLyAwMTMwOyAwMDY5OyAwMTMwOyAwMTMwOyB0ciAKKyAgICAgICAgICAgICAgICAgICAgLy8gIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCisgICAgICAgICAgICAgICAgICAgIC8vIDAxMzA7IDAwNjk7IDAxMzA7IDAxMzA7IGF6IAorICAgICAgICAgICAgICAgICAgICAvLyAjIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBET1QgQUJPVkUKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChMQVRJTl9TTUFMTF9MRVRURVJfSV8pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGlmIChjaCA9PSAweDMwNyAmJiBpc1ByZWNlZGVkQnlTb2Z0RG90dGVkKHVjaGFyaXRlciwgb2Zmc2V0KSkgeworICAgICAgICAgICAgICAgICAgICAvLyAjIyMgVE9ETyBzZWUgY29tbWVudCBhYm92ZSBhYm91dCBpc0FmdGVyX0koKQorICAgICAgICAgICAgICAgICAgICAvLyAjIFdoZW4gbG93ZXJjYXNpbmcsIHJlbW92ZSBkb3RfYWJvdmUgaW4gdGhlIHNlcXVlbmNlIAorICAgICAgICAgICAgICAgICAgICAvLyBJICsgZG90X2Fib3ZlLCB3aGljaCB3aWxsIHR1cm4gaW50byBpLgorICAgICAgICAgICAgICAgICAgICAvLyAjIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNhbm9uaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIC8vIGVxdWl2YWxlbnQgSS1kb3RfYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgLy8gMDMwNzsgOyAwMzA3OyAwMzA3OyB0ciBBZnRlcl9Tb2Z0X0RvdHRlZDsgCisgICAgICAgICAgICAgICAgICAgIC8vICMgQ09NQklOSU5HIERPVCBBQk9WRQorICAgICAgICAgICAgICAgICAgICAvLyAwMzA3OyA7IDAzMDc7IDAzMDc7IGF6IEFmdGVyX1NvZnRfRG90dGVkOyAKKyAgICAgICAgICAgICAgICAgICAgLy8gIyBDT01CSU5JTkcgRE9UIEFCT1ZFCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAvLyByZW1vdmUgdGhlIGRvdCAoY29udGludWUgd2l0aG91dCBvdXRwdXQpCisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09IExBVElOX0NBUElUQUxfTEVUVEVSX0lfICYmIAorICAgICAgICAgICAgICAgICAgICAhaXNGb2xsb3dlZEJ5RG90QWJvdmUodWNoYXJpdGVyLCBvZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHR1cmtpc2g6IEkgbWFwcyB0byBkb3RsZXNzIGkKKyAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIgbGFuZ3VhZ2VzIG9yIHR1cmtpc2ggd2l0aCBkZWNvbXBvc2VkIEkrZG90IGFib3ZlOiAKKyAgICAgICAgICAgICAgICAgICAgLy8gSSBtYXBzIHRvIGkKKyAgICAgICAgICAgICAgICAgICAgLy8gIyBXaGVuIGxvd2VyY2FzaW5nLCB1bmxlc3MgYW4gSSBpcyBiZWZvcmUgYSBkb3RfYWJvdmUsIAorICAgICAgICAgICAgICAgICAgICAvLyBpdCB0dXJucyBpbnRvIGEgZG90bGVzcyBpLgorICAgICAgICAgICAgICAgICAgICAvLyAgMDA0OTsgMDEzMTsgMDA0OTsgMDA0OTsgdHIgTm90X0JlZm9yZV9Eb3Q7IAorICAgICAgICAgICAgICAgICAgICAvLyAjIExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICAgICAgICAgICAgICAgICAgLy8gMDA0OTsgMDEzMTsgMDA0OTsgMDA0OTsgYXogTm90X0JlZm9yZV9Eb3Q7IAorICAgICAgICAgICAgICAgICAgICAvLyAjIExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChMQVRJTl9TTUFMTF9MRVRURVJfRE9UTEVTU19JXyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAKKwkJCWlmIChjaCA9PSAweDEzMCkgeworICAgICAgICAgICAgICAgIC8vIGRlY29tcG9zZWQgSStkb3QgYWJvdmUgYmVjb21lcyBpIChzZWUgaGFuZGxpbmcgb2YgCisgICAgICAgICAgICAgICAgLy8gVSswMDQ5IGZvciB0dXJraXNoKSBhbmQgcmVtb3ZlcyB0aGUgZG90IGFib3ZlCisgICAgICAgICAgICAgICAgLy8gIyBQcmVzZXJ2ZSBjYW5vbmljYWwgZXF1aXZhbGVuY2UgZm9yIEkgd2l0aCBkb3QuIFR1cmtpYyBpcyAKKyAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGJlbG93LgorICAgICAgICAgICAgICAgIC8vIDAxMzA7IDAwNjkgMDMwNzsgMDEzMDsgMDEzMDsgCisgICAgICAgICAgICAgICAgLy8gIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChMQVRJTl9TTUFMTF9MRVRURVJfSV8pOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoQ09NQklOSU5HX0RPVF9BQk9WRV8pOworICAgICAgICAgICAgICAgIHJldHVybiAyOyAvLyByZW1vdmUgdGhlIGRvdCAoY29udGludWUgd2l0aG91dCBvdXRwdXQpCisgICAgICAgICAgICB9IAorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY2ggPT0gR1JFRUtfQ0FQSVRBTF9MRVRURVJfU0lHTUFfICYmIAorICAgICAgICAgICAgICAgIGlzQ0ZJTkFMKHVjaGFyaXRlciwgb2Zmc2V0KSAmJiAKKyAgICAgICAgICAgICAgICBpc05vdENJTklUSUFMKHVjaGFyaXRlciwgb2Zmc2V0KSkgeworICAgICAgICAgICAgICAgIC8vIGdyZWVrIGNhcGl0YWwgc2lnbWEgbWFwcyBkZXBlbmRpbmcgb24gc3Vycm91bmRpbmcgY2FzZWQgCisgICAgICAgICAgICAgICAgLy8gbGV0dGVycworICAgICAgICAgICAgICAgIC8vIGdyZWVrIGNhcGl0YWwgc2lnbWEgbWFwcyBkZXBlbmRpbmcgb24gc3Vycm91bmRpbmcgY2FzZWQgCisgICAgICAgICAgICAgICAgLy8gbGV0dGVycyAoc2VlIFNwZWNpYWxDYXNpbmcudHh0KSAqLworICAgICAgICAgICAgICAgIC8vICMgU3BlY2lhbCBjYXNlIGZvciBmaW5hbCBmb3JtIG9mIHNpZ21hCisgICAgICAgICAgICAgICAgLy8gMDNBMzsgMDNDMjsgMDNBMzsgMDNBMzsgRmluYWxfU2lnbWE7IAorICAgICAgICAgICAgICAgIC8vICMgR1JFRUsgQ0FQSVRBTCBMRVRURVIgU0lHTUEKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKEdSRUVLX1NNQUxMX0xFVFRFUl9SSE9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAKKwkJCS8vIG5vIGtub3duIGNvbmRpdGlvbmFsIHNwZWNpYWwgY2FzZSBtYXBwaW5nLCB1c2UgYSBub3JtYWwgbWFwcGluZworICAgICAgICAgICAgaWYgKGhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX0xPV0VSQ0FTRV8pKSB7CisgICAgICAgICAgICAgICAgaW50IG9sZGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBVVEYxNi5hcHBlbmQoYnVmZmVyLCBnZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX0xPV0VSQ0FTRV8pKTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5sZW5ndGgoKSAtIG9sZGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKwkJCVVURjE2LmFwcGVuZChidWZmZXIsIGNoKTsKKwkJCXJldHVybiBVVEYxNi5nZXRDaGFyQ291bnQoY2gpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gZ2V0IHRoZSBzcGVjaWFsIGNhc2UgbWFwcGluZyBzdHJpbmcgZnJvbSB0aGUgZGF0YSBmaWxlCisgICAgICAgICAgICBpbmRleCA9IGV4Y2VwdGlvbiAmIExBU1RfQ0hBUl9NQVNLXzsKKyAgICAgICAgICAgIGludCBvbGRsZW5ndGggPSBidWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICBnZXRMb3dlckNhc2UoaW5kZXgsIGJ1ZmZlcik7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyLmxlbmd0aCgpIC0gb2xkbGVuZ3RoOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxvd2VyIGNhc2UgbWFwIG9mIHRoZSBhcmd1bWVudCBjb2RlcG9pbnQKKyAgICAgKiBAcGFyYW0gbG9jYWxlIGxvY2FsZSB3aGljaCB0aGUgbG93ZXJjYXNlIGlzIGxvb2tlZCBmb3IKKyAgICAgKiBAcGFyYW0gY2ggY29kZXBvaW50IHdob3NlIGxvd2VyIGNhc2UgaXMgdG8gYmUgbWF0Y2hlZAorICAgICAqIEBwYXJhbSB1Y2hhcml0ZXIgdGV4dCBpdGVyYXRvciBwb3NpdGlvbmVkIGF0IHRoZSBjb2RlcG9pbnQgY2gKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGJ1ZmZlciB0byBzdG9yZSByZXN1bHQgc3RyaW5nCisgICAgICogQHJldHVybiBzaXplIG9mIHRoZSBsb3dlcmNhc2VkIGNvZGVwb2ludCBpbiBVVEYxNiBmb3JtYXQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHRvTG93ZXJDYXNlKExvY2FsZSBsb2NhbGUsIGludCBjaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciB1Y2hhcml0ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKQorICAgIHsKKyAgICAJaW50IHByb3BzID0gZ2V0UHJvcGVydHkoY2gpOworICAgICAgICBpZiAoKHByb3BzICYgRVhDRVBUSU9OX01BU0spID09IDApIHsKKyAgICAgICAgICAgIGludCB0eXBlID0gcHJvcHMgJiBUWVBFX01BU0s7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVVBQRVJDQVNFX0xFVFRFUiB8fAorICAgICAgICAgICAgICAgIHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlRJVExFQ0FTRV9MRVRURVIpIHsKKyAgICAgICAgICAgICAgICBjaCArPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0U2lnbmVkVmFsdWUocHJvcHMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGluZGV4ID0gVUNoYXJhY3RlclByb3BlcnR5LmdldEV4Y2VwdGlvbkluZGV4KHByb3BzKTsKKyAgICAgICAgICAgIGlmIChoYXNFeGNlcHRpb25WYWx1ZShpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfU1BFQ0lBTF9DQVNJTkdfKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBnZXRTcGVjaWFsTG93ZXJDYXNlKGxvY2FsZSwgaW5kZXgsIGNoLCB1Y2hhcml0ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcik7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgaWYgKGhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfTE9XRVJDQVNFXykpIHsKKyAgICAgICAgICAgICAgICBjaCA9IGdldEV4Y2VwdGlvbihpbmRleCwgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19MT1dFUkNBU0VfKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBVVEYxNi5hcHBlbmQoYnVmZmVyLCBjaCk7CisgICAgICAgIHJldHVybiBVVEYxNi5nZXRDaGFyQ291bnQoY2gpOworCX0KKworCS8qKgorICAgICAqIEdldHMgdGhlIGxvd2VyIGNhc2UgbWFwIG9mIHRoZSBhcmd1bWVudCBjb2RlcG9pbnQKKyAgICAgKiBAcGFyYW0gbG9jYWxlIGxvY2FsZSB3aGljaCB0aGUgbG93ZXJjYXNlIGlzIGxvb2tlZCBmb3IKKyAgICAgKiBAcGFyYW0gY2ggY29kZXBvaW50IHdob3NlIGxvd2VyIGNhc2UgaXMgdG8gYmUgbWF0Y2hlZAorICAgICAqIEBwYXJhbSB1Y2hhcml0ZXIgdGV4dCBpdGVyYXRvciBwb3NpdGlvbmVkIGF0IHRoZSBjb2RlcG9pbnQgY2gKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGFycmF5IG9mIGNoYXIgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm4gc2l6ZSBvZmxvd2VyY2FzZWQgY29kZXBvaW50IGluIFVURjE2IGZvcm1hdAorICAgICAqLworICAgIHB1YmxpYyBpbnQgdG9Mb3dlckNhc2UoTG9jYWxlIGxvY2FsZSwgaW50IGNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciB1Y2hhcml0ZXIsIGNoYXIgYnVmZmVyW10pCisgICAgeworICAgICAgICBpbnQgcHJvcHMgPSBnZXRQcm9wZXJ0eShjaCk7CisgICAgICAgIGlmICgocHJvcHMgJiBFWENFUFRJT05fTUFTSykgPT0gMCkgeworICAgICAgICAgICAgaW50IHR5cGUgPSBwcm9wcyAmIFRZUEVfTUFTSzsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VUFBFUkNBU0VfTEVUVEVSIHx8CisgICAgICAgICAgICAgICAgdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVElUTEVDQVNFX0xFVFRFUikgeworICAgICAgICAgICAgICAgIGNoICs9IFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRTaWduZWRWYWx1ZShwcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0RXhjZXB0aW9uSW5kZXgocHJvcHMpOworICAgICAgICAgICAgaWYgKGhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1NQRUNJQUxfQ0FTSU5HXykpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc3RyYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigxKTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gZ2V0U3BlY2lhbExvd2VyQ2FzZShsb2NhbGUsIGluZGV4LCBjaCwgdWNoYXJpdGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJidWZmZXIpOworICAgICAgICAgICAgICAgIHN0cmJ1ZmZlci5nZXRDaGFycygwLCByZXN1bHQsIGJ1ZmZlciwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBpZiAoaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfTE9XRVJDQVNFXykpIHsKKyAgICAgICAgICAgICAgICBjaCA9IGdldEV4Y2VwdGlvbihpbmRleCwgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19MT1dFUkNBU0VfKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY2ggPCBVVEYxNi5TVVBQTEVNRU5UQVJZX01JTl9WQUxVRSkgeworICAgICAgICAJYnVmZmVyWzBdID0gKGNoYXIpY2g7CisgICAgICAgIAlyZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXJbMF0gPSBVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKGNoKTsKKyAgICAgICAgYnVmZmVyWzFdID0gVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoY2gpOworICAgICAgICByZXR1cm4gMjsKKwl9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbG93ZXIgY2FzZSBtYXBwaW5ncyBvZiB0aGUgc3Vic3RyaW5nIGZyb20gaW5kZXggc3RhcnQgdG8gdGhlCisgICAgICogY2hhcmFjdGVyIGJlZm9yZSBlbmQuCisgICAgICogQHBhcmFtIGxvY2FsZSBsb2NhbGUgd2hpY2ggdGhlIG1hcHBpbmdzIHdpbGwgYmUgc2VhcmNoZWQKKyAgICAgKiBAcGFyYW0gc3RyIHN0cmluZyB0byBtYXAgCisgICAgICogQHBhcmFtIHN0YXJ0IHN0YXJ0IGluZGV4IG9mIHRoZSBzdWJzdHJpbmcgdG8gbWFwCisgICAgICogQHBhcmFtIGxpbWl0IG9uZSBpbmRleCBwYXNzIHRoZSBsYXN0IGNoYXJhY3RlciB0byBtYXAKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHN0cmluZyBidWZmZXIgdG8gc3RvcmUgbG93ZXIgY2FzZSBzdHJpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0b0xvd2VyQ2FzZShMb2NhbGUgbG9jYWxlLCBTdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBsaW1pdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCkgCisgICAgeworICAgICAgICBVQ2hhcmFjdGVySXRlcmF0b3IgdWNoYXJJdGVyID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHN0cik7CisgICAgICAgIGludCAgICAgICAgICAgICAgICBzdHJJbmRleCAgPSBzdGFydDsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChzdHJJbmRleCA8IGxpbWl0KSB7IAorICAgICAgICAJdWNoYXJJdGVyLnNldEluZGV4KHN0ckluZGV4KTsKKwkgICAgICAgIGludCBjaCA9IHVjaGFySXRlci5jdXJyZW50Q29kZVBvaW50KCk7CisJICAgICAgICAKKwkgICAgICAgIHRvTG93ZXJDYXNlKGxvY2FsZSwgY2gsIHVjaGFySXRlciwgcmVzdWx0KTsKKwkgICAgICAgIHN0ckluZGV4ICsrOworCSAgICAgICAgaWYgKGNoID49IFVURjE2LlNVUFBMRU1FTlRBUllfTUlOX1ZBTFVFKSB7CisJICAgICAgICAJc3RySW5kZXggKys7CisJICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBTcGVjaWFsIGNhc2luZyB1cHBlcmNhc2UgbWFuYWdlbWVudAorICAgICogQHBhcmFtIGxvY2FsZSBsb2NhbGUgd2hpY2ggdGhlIG1hcHBpbmdzIHdpbGwgYmUgYmFzZWQgb24KKyAgICAqIEBwYXJhbSBpbmRleCBvZiBleGNlcHRpb24gY29udGFpbmluZyBzcGVjaWFsIGNhc2UgaW5mb3JtYXRpb24KKyAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHRvIGNvbnZlcnQKKyAgICAqIEBwYXJhbSB1Y2hhcml0ZXIgdGV4dCBpdGVyYXRvciB3aGljaCBjaCBiZWxvbmdzIHRvCisgICAgKiBAcGFyYW0gdXBwZXJmbGFnIHRydWUgaWYgdXBwZXJjYXNlIG1hcHBpbmcgaXMgZGVzaXJlZCwgZmFsc2UgZm9yIHRpdGxlIAorICAgICogICAgICAgIGNhc2luZworICAgICogQHBhcmFtIGJ1ZmZlciB0byBhZGQgdXBwZXJjYXNlCisgICAgKiBAcmV0dXJuIHNpemUgb2YgdXBwZXJjYXNlZCBjb2RlcG9pbnQgaW4gVVRGMTYgZm9ybWF0CisgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFNwZWNpYWxVcHBlck9yVGl0bGVDYXNlKExvY2FsZSBsb2NhbGUsIGludCBpbmRleCwgaW50IGNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciB1Y2hhcml0ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1cHBlcmZsYWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGludCBleGNlcHRpb24gPSBnZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfU1BFQ0lBTF9DQVNJTkdfKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbiA8IDApIHsKKyAgICAgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGxvY2FsZS5nZXRMYW5ndWFnZSgpOworICAgICAgICAgICAgLy8gdXNlIGhhcmRjb2RlZCBjb25kaXRpb25zIGFuZCBtYXBwaW5ncworICAgICAgICAgICAgaWYgKChsYW5ndWFnZS5lcXVhbHMoVFVSS0lTSF8pIHx8IGxhbmd1YWdlLmVxdWFscyhBWkVSQkFJSkFOSV8pKQorICAgICAgICAgICAgICAgICYmIGNoID09IExBVElOX1NNQUxMX0xFVFRFUl9JXykgeworICAgICAgICAgICAgICAgIC8vIHR1cmtpc2g6IGkgbWFwcyB0byBkb3R0ZWQgSQorICAgICAgICAgICAgICAgIC8vICMgVHVya2lzaCBhbmQgQXplcmkKKyAgICAgICAgICAgICAgICAvLyAjIEkgYW5kIGktZG90bGVzczsgSS1kb3QgYW5kIGkgYXJlIGNhc2UgcGFpcnMgaW4gVHVya2lzaCBhbmQgQXplcmkKKyAgICAgICAgICAgICAgICAvLyAjIFRoZSBmb2xsb3dpbmcgcnVsZXMgaGFuZGxlIHRob3NlIGNhc2VzLgorICAgICAgICAgICAgICAgIC8vICMgV2hlbiB1cHBlcmNhc2luZywgaSB0dXJucyBpbnRvIGEgZG90dGVkIGNhcGl0YWwgSQorICAgICAgICAgICAgICAgIC8vIDAwNjk7IDAwNjk7IDAxMzA7IDAxMzA7IHRyOyAjIExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgICAgICAgICAgICAgLy8gMDA2OTsgMDA2OTsgMDEzMDsgMDEzMDsgYXo7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKExBVElOX0NBUElUQUxfTEVUVEVSX0lfV0lUSF9ET1RfQUJPVkVfKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChsYW5ndWFnZS5lcXVhbHMoTElUSFVBTklBTl8pICYmIGNoID09IENPTUJJTklOR19ET1RfQUJPVkVfIAorICAgICAgICAgICAgICAgICYmIGlzUHJlY2VkZWRCeVNvZnREb3R0ZWQodWNoYXJpdGVyLCB1Y2hhcml0ZXIuZ2V0SW5kZXgoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyAjIExpdGh1YW5pYW4KKyAgICAgICAgICAgICAgICAvLyAjIExpdGh1YW5pYW4gcmV0YWlucyB0aGUgZG90IGluIGEgbG93ZXJjYXNlIGkgd2hlbiBmb2xsb3dlZCAKKyAgICAgICAgICAgICAgICAvLyBieSBhY2NlbnRzLgorICAgICAgICAgICAgICAgIC8vICMgUmVtb3ZlIERPVCBBQk9WRSBhZnRlciAiaSIgd2l0aCB1cHBlciBvciB0aXRsZWNhc2UKKyAgICAgICAgICAgICAgICAvLyAwMzA3OyAwMzA3OyA7IDsgbHQgQWZ0ZXJfU29mdF9Eb3R0ZWQ7ICMgQ09NQklOSU5HIERPVCBBQk9WRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaXRodWFuaWFuOiByZW1vdmUgRE9UIEFCT1ZFIGFmdGVyIFUrMDA2OSAiaSIgd2l0aCAKKyAgICAgICAgICAgICAgICAvLyB1cHBlciBvciB0aXRsZWNhc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLy8gcmVtb3ZlIHRoZSBkb3QgKGNvbnRpbnVlIHdpdGhvdXQgb3V0cHV0KQorICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gbm8ga25vd24gY29uZGl0aW9uYWwgc3BlY2lhbCBjYXNlIG1hcHBpbmcsIHVzZSBhIG5vcm1hbCBtYXBwaW5nCisgICAgICAgICAgIGlmICghdXBwZXJmbGFnICYmIGhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfVElUTEVDQVNFXykpIHsKKyAgICAgICAgICAgICAgIGNoID0gZ2V0RXhjZXB0aW9uKGluZGV4LCBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1RJVExFQ0FTRV8pOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIH0KKyAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICBpZiAoaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfVVBQRVJDQVNFXykpIHsKKwkgICAgICAgICAgICAgICBjaCA9IGdldEV4Y2VwdGlvbihpbmRleCwgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19VUFBFUkNBU0VfKTsgCisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KKyAgICAgICAgICAgCisgICAgICAgICAgIFVURjE2LmFwcGVuZChidWZmZXIsIGNoKTsKKyAgICAgICAgICAgcmV0dXJuIFVURjE2LmdldENoYXJDb3VudChjaCk7CisgICAgICAgIH0KKyAgICAgICAgCisJCS8vIGdldCB0aGUgc3BlY2lhbCBjYXNlIG1hcHBpbmcgc3RyaW5nIGZyb20gdGhlIGRhdGEgZmlsZQorICAgICAgICBpbmRleCA9IGV4Y2VwdGlvbiAmIExBU1RfQ0hBUl9NQVNLXzsKKyAgICAgICAgaW50IG9sZGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHVwcGVyZmxhZykgeworCSAgICAgICAgZ2V0VXBwZXJDYXNlKGluZGV4LCBidWZmZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIAlnZXRUaXRsZUNhc2UoaW5kZXgsIGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ1ZmZlci5sZW5ndGgoKSAtIG9sZGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdXBwZXIgb3IgdGl0bGUgY2FzZSBtYXAgb2YgdGhlIGNvZGVwb2ludAorICAgICAqIEBwYXJhbSBsb2NhbGUgbG9jYWxlIHdoaWNoIHRoZSBtYXBwaW5ncyB3aWxsIGJlIHNlYXJjaGVkIAorICAgICAqIEBwYXJhbSBjaCBjb2RlcG9pbnQgd2hvc2UgdXBwZXIgb3IgdGl0bGUgY2FzZSB3aWxsIGJlIG1hcHBlZAorICAgICAqIEBwYXJhbSB1Y2hhcml0ZXIgdGV4dCBpdGVyYXRvciBwb3NpdGlvbmVkIGF0IHRoZSBjb2RlcG9pbnQKKyAgICAgKiBAcGFyYW0gdXBwZXJmbGFnIGZsYWcgdHJ1ZSBpZiB1cHBlcmNhc2UgaXMgZGVzaXJlZCwgZmFsc2UgZm9yIHRpdGxlIGNhc2UKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGJ1ZmZlciB0byBzdG9yZSByZXN1bHQgbWFwCisgICAgICogQHJldHVybiBzaXplIG9mIHVwcGVyY2FzZWQgY29kZXBvaW50IGluIFVURjE2IGZvcm1hdAorICAgICAqLworCXB1YmxpYyBpbnQgdG9VcHBlck9yVGl0bGVDYXNlKExvY2FsZSBsb2NhbGUsIGludCBjaCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIHVjaGFyaXRlciwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1cHBlcmZsYWcsIFN0cmluZ0J1ZmZlciBidWZmZXIpIAorICAgIHsKKyAgICAgICAgaW50IHByb3BzID0gZ2V0UHJvcGVydHkoY2gpOworICAgICAgICBpZiAoKHByb3BzICYgRVhDRVBUSU9OX01BU0spID09IDApIHsKKyAgICAgICAgICAgIGludCB0eXBlID0gcHJvcHMgJiBUWVBFX01BU0s7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTE9XRVJDQVNFX0xFVFRFUikgeworICAgICAgICAgICAgCWNoIC09IFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRTaWduZWRWYWx1ZShwcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0RXhjZXB0aW9uSW5kZXgocHJvcHMpOworICAgICAgICAgICAgaWYgKGhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1NQRUNJQUxfQ0FTSU5HXykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3BlY2lhbFVwcGVyT3JUaXRsZUNhc2UobG9jYWxlLCBpbmRleCwgY2gsIHVjaGFyaXRlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyZmxhZywgYnVmZmVyKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBpZiAoIXVwcGVyZmxhZyAmJiBoYXNFeGNlcHRpb25WYWx1ZShpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfVElUTEVDQVNFXykpIHsKKyAgICAgICAgICAgICAgICBjaCA9IGdldEV4Y2VwdGlvbihpbmRleCwgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19USVRMRUNBU0VfKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIAlpZiAoaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1VQUEVSQ0FTRV8pKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gZ2V0RXhjZXB0aW9uKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19VUFBFUkNBU0VfKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVVRGMTYuYXBwZW5kKGJ1ZmZlciwgY2gpOworICAgICAgICByZXR1cm4gVVRGMTYuZ2V0Q2hhckNvdW50KGNoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdXBwZXIgb3IgdGl0bGUgY2FzZSBtYXAgb2YgdGhlIGNvZGVwb2ludAorICAgICAqIEBwYXJhbSBsb2NhbGUgbG9jYWxlIHdoaWNoIHRoZSBtYXBwaW5ncyB3aWxsIGJlIHNlYXJjaGVkIAorICAgICAqIEBwYXJhbSBjaCBjb2RlcG9pbnQgd2hvc2UgdXBwZXIgb3IgdGl0bGUgY2FzZSB3aWxsIGJlIG1hcHBlZAorICAgICAqIEBwYXJhbSB1Y2hhcml0ZXIgdGV4dCBpdGVyYXRvciBwb3NpdGlvbmVkIGF0IHRoZSBjb2RlcG9pbnQKKyAgICAgKiBAcGFyYW0gdXBwZXJmbGFnIGZsYWcgdHJ1ZSBpZiB1cHBlcmNhc2UgaXMgZGVzaXJlZCwgZmFsc2UgZm9yIHRpdGxlIGNhc2UKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGJ1ZmZlciB0byBzdG9yZSByZXN1bHQgbWFwCisgICAgICogQHJldHVybiBzaXplIG9mIHVwcGVyY2FzZWQgY29kZXBvaW50IGluIFVURjE2IGZvcm1hdAorICAgICAqLworCXB1YmxpYyBpbnQgdG9VcHBlck9yVGl0bGVDYXNlKExvY2FsZSBsb2NhbGUsIGludCBjaCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIHVjaGFyaXRlciwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1cHBlcmZsYWcsIGNoYXIgYnVmZmVyW10pIAorICAgIHsKKyAgICAgICAgaW50IHByb3BzID0gZ2V0UHJvcGVydHkoY2gpOworICAgICAgICBpZiAoKHByb3BzICYgRVhDRVBUSU9OX01BU0spID09IDApIHsKKyAgICAgICAgICAgIGludCB0eXBlID0gcHJvcHMgJiBUWVBFX01BU0s7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTE9XRVJDQVNFX0xFVFRFUikgeworICAgICAgICAgICAgCWNoIC09IFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRTaWduZWRWYWx1ZShwcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0RXhjZXB0aW9uSW5kZXgocHJvcHMpOworICAgICAgICAgICAgaWYgKGhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1NQRUNJQUxfQ0FTSU5HXykpIHsKKyAgICAgICAgICAgICAgIAlTdHJpbmdCdWZmZXIgc3RyYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigxKTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gZ2V0U3BlY2lhbFVwcGVyT3JUaXRsZUNhc2UobG9jYWxlLCBpbmRleCwgY2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y2hhcml0ZXIsIHVwcGVyZmxhZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgc3RyYnVmZmVyLmdldENoYXJzKDAsIHJlc3VsdCwgYnVmZmVyLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGlmICghdXBwZXJmbGFnICYmIGhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19USVRMRUNBU0VfKSkgeworICAgICAgICAgICAgICAgIGNoID0gZ2V0RXhjZXB0aW9uKGluZGV4LCBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1RJVExFQ0FTRV8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgCWlmIChoYXNFeGNlcHRpb25WYWx1ZShpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfVVBQRVJDQVNFXykpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBnZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1VQUEVSQ0FTRV8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY2ggPCBVVEYxNi5TVVBQTEVNRU5UQVJZX01JTl9WQUxVRSkgeworICAgICAgICAJYnVmZmVyWzBdID0gKGNoYXIpY2g7CisgICAgICAgIAlyZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXJbMF0gPSBVVEYxNi5nZXRMZWFkU3Vycm9nYXRlKGNoKTsKKyAgICAgICAgYnVmZmVyWzFdID0gVVRGMTYuZ2V0VHJhaWxTdXJyb2dhdGUoY2gpOworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdXBwZXJjYXNpbmcgb2YgdGhlIGFyZ3VtZW50IHN0cmluZy4KKyAgICAgKiBAcGFyYW0gbG9jYWxlIGxvY2FsZSB3aGljaCB0aGUgbWFwcGluZ3Mgd2lsbCBiZSBzZWFyY2hlZAorICAgICAqIEBwYXJhbSBzdHIgc3RyaW5nIHRvIG1hcCAKKyAgICAgKiBAcGFyYW0gc3RhcnQgc3RhcnQgaW5kZXggb2YgdGhlIHN1YnN0cmluZyB0byBtYXAKKyAgICAgKiBAcGFyYW0gbGltaXQgb25lIGluZGV4IHBhc3MgdGhlIGxhc3QgY2hhcmFjdGVyIHRvIG1hcAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9VcHBlckNhc2UoTG9jYWxlIGxvY2FsZSwgU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgbGltaXQpIAorICAgIHsKKyAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIHVjaGFySXRlciA9IFVDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbnN0YW5jZShzdHIpOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgc3RySW5kZXggID0gc3RhcnQ7CisgICAgICAgIFN0cmluZ0J1ZmZlciAgICAgICByZXN1bHQgICAgPSBuZXcgU3RyaW5nQnVmZmVyKGxpbWl0IC0gc3RhcnQpOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHN0ckluZGV4IDwgbGltaXQpIHsgCisgICAgICAgIAl1Y2hhckl0ZXIuc2V0SW5kZXgoc3RySW5kZXgpOworCSAgICAgICAgaW50IGNoID0gdWNoYXJJdGVyLmN1cnJlbnRDb2RlUG9pbnQoKTsKKwkgICAgICAgIAorCSAgICAgICAgdG9VcHBlck9yVGl0bGVDYXNlKGxvY2FsZSwgY2gsIHVjaGFySXRlciwgdHJ1ZSwgcmVzdWx0KTsKKwkgICAgICAgIHN0ckluZGV4ICsrOworCSAgICAgICAgaWYgKGNoID49IFVURjE2LlNVUFBMRU1FTlRBUllfTUlOX1ZBTFVFKSB7CisJICAgICAgICAJc3RySW5kZXggKys7CisJICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIDxwPkdldHMgdGhlIHRpdGxlY2FzZSB2ZXJzaW9uIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcuPC9wPgorICAgICogPHA+UG9zaXRpb24gZm9yIHRpdGxlY2FzaW5nIGlzIGRldGVybWluZWQgYnkgdGhlIGFyZ3VtZW50IGJyZWFrIAorICAgICogaXRlcmF0b3IsIGhlbmNlIHRoZSB1c2VyIGNhbiBjdXN0b21pemVkIGhpcyBicmVhayBpdGVyYXRvciBmb3IgCisgICAgKiBhIHNwZWNpYWxpemVkIHRpdGxlY2FzaW5nLiBJbiB0aGlzIGNhc2Ugb25seSB0aGUgZm9yd2FyZCBpdGVyYXRpb24gCisgICAgKiBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZC4KKyAgICAqIElmIHRoZSBicmVhayBpdGVyYXRvciBwYXNzZWQgaW4gaXMgbnVsbCwgdGhlIGRlZmF1bHQgVW5pY29kZSBhbGdvcml0aG0KKyAgICAqIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpdGxlY2FzZSBwb3NpdGlvbnMuCisgICAgKiA8L3A+CisgICAgKiA8cD5Pbmx5IHBvc2l0aW9ucyByZXR1cm5lZCBieSB0aGUgYnJlYWsgaXRlcmF0b3Igd2lsbCBiZSB0aXRsZSBjYXNlZCwKKyAgICAqIGNoYXJhY3RlciBpbiBiZXR3ZWVuIHRoZSBwb3NpdGlvbnMgd2lsbCBhbGwgYmUgaW4gbG93ZXIgY2FzZS48L3A+CisgICAgKiA8cD5DYXNpbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBkZWZhdWx0IGxvY2FsZSBhbmQgY29udGV4dC1zZW5zaXRpdmU8L3A+CisgICAgKiBAcGFyYW0gc3RyIHNvdXJjZSBzdHJpbmcgdG8gYmUgcGVyZm9ybWVkIG9uCisgICAgKiBAcGFyYW0gYnJlYWtpdGVyIGJyZWFrIGl0ZXJhdG9yIHRvIGRldGVybWluZSB0aGUgcG9zaXRpb25zIGluIHdoaWNoCisgICAgKiAgICAgICAgdGhlIGNoYXJhY3RlciBzaG91bGQgYmUgdGl0bGUgY2FzZWQuCisgICAgKiBAcmV0dXJuIGxvd2VyY2FzZSB2ZXJzaW9uIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcKKyAgICAqLworIAlwdWJsaWMgU3RyaW5nIHRvVGl0bGVDYXNlKExvY2FsZSBsb2NhbGUsIFN0cmluZyBzdHIsIAorIAkgICAgICAgICAgICAgICAgICAgICAgICAgIEJyZWFrSXRlcmF0b3IgYnJlYWtpdGVyKQorIAl7CisgCQlVQ2hhcmFjdGVySXRlcmF0b3IgdWNoYXJJdGVyID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHN0cik7CisJCWludCAgICAgICAgICAgICAgICBsZW5ndGggICAgPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciAgICAgICByZXN1bHQgICAgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIAorICAgICAgICBicmVha2l0ZXIuc2V0VGV4dChzdHIpOworICAgICAgICAKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgIGluZGV4ICAgICA9IGJyZWFraXRlci5maXJzdCgpOworICAgICAgIAkvLyB0aXRsZWNhc2luZyBsb29wCisJICAgIHdoaWxlIChpbmRleCAhPSBCcmVha0l0ZXJhdG9yLkRPTkUgJiYgaW5kZXggPCBsZW5ndGgpIHsKKwkgICAgCS8vIHRpdGxlY2FzZSB0aGUgY2hhcmFjdGVyIGF0IHRoZSBmb3VuZCBpbmRleAorCSAgICAgICAgaW50IGNoID0gVVRGMTYuY2hhckF0KHN0ciwgaW5kZXgpOworCSAgICAgICAgdWNoYXJJdGVyLnNldEluZGV4KGluZGV4KTsKKwkgICAgICAgIGluZGV4ICs9IFVURjE2LmdldENoYXJDb3VudChjaCk7CisgICAgICAgIAl0b1VwcGVyT3JUaXRsZUNhc2UobG9jYWxlLCBjaCwgdWNoYXJJdGVyLCBmYWxzZSwgcmVzdWx0KTsKKyAgICAgICAgCWludCBuZXh0ID0gYnJlYWtpdGVyLm5leHQoKTsKKyAgICAgICAgCWlmIChpbmRleCAhPSBCcmVha0l0ZXJhdG9yLkRPTkUgJiYgaW5kZXggPCBuZXh0KSB7CisJICAgICAgICAJLy8gbG93ZXJjYXNlIFtwcmV2Li5pbmRleF0KKyAgICAgICAgCQl0b0xvd2VyQ2FzZShsb2NhbGUsIHN0ciwgaW5kZXgsIG5leHQsIHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworIAl9CisKKyAgICAvKioKKyAgICAgKiA8cD4KKyAgICAgKiBVbmljb2RlIHByb3BlcnR5IG5hbWVzIGFuZCBwcm9wZXJ0eSB2YWx1ZSBuYW1lcyBhcmUgY29tcGFyZWQKKyAgICAgKiAibG9vc2VseSIuIFByb3BlcnR5W1ZhbHVlXUFsaWFzZXMudHh0IHNheToKKyAgICAgKiA8cXVvdGU+CisgICAgICogICAiV2l0aCBsb29zZSBtYXRjaGluZyBvZiBwcm9wZXJ0eSBuYW1lcywgdGhlIGNhc2UgZGlzdGluY3Rpb25zLCAKKyAgICAgKiAgICB3aGl0ZXNwYWNlLCBhbmQgJ18nIGFyZSBpZ25vcmVkLiIKKyAgICAgKiA8L3F1b3RlPgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMganVzdCB0aGF0LCBmb3IgQVNDSUkgKGNoYXIgKikgbmFtZSBzdHJpbmdzLgorICAgICAqIEl0IGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdWNudl9jb21wYXJlTmFtZXMoKSBidXQgYWxzbyBpZ25vcmVzCisgICAgICogQVNDSUkgV2hpdGVfU3BhY2UgY2hhcmFjdGVycyAoVSswMDA5Li5VKzAwMGQpLgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gbmFtZTEgbmFtZSB0byBjb21wYXJlCisgICAgICogQHBhcmFtIG5hbWUyIG5hbWUgdG8gY29tcGFyZQorICAgICAqIEByZXR1cm4gMCBpZiBuYW1lcyBhcmUgZXF1YWwsIDwgMCBpZiBuYW1lMSBpcyBsZXNzIHRoYW4gbmFtZTIgYW5kID4gMAorICAgICAqICAgICAgICAgaWYgbmFtZTEgaXMgZ3JlYXRlciB0aGFuIG5hbWUyLgorICAgICAqLworICAgIC8qIHRvIGJlIGltcGxlbWVudGVkIGluIDIuNAorICAgICAqIHB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmVQcm9wZXJ0eU5hbWVzKFN0cmluZyBuYW1lMSwgU3RyaW5nIG5hbWUyKSAKKyAgICB7CisgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICBpbnQgaTEgPSAwOworICAgICAgICBpbnQgaTIgPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgY2hhciBjaDEgPSAwOworICAgICAgICAgICAgY2hhciBjaDIgPSAwOworICAgICAgICAgICAgLy8gSWdub3JlIGRlbGltaXRlcnMgJy0nLCAnXycsIGFuZCBBU0NJSSBXaGl0ZV9TcGFjZSAKKyAgICAgICAgICAgIGlmIChpMSA8IG5hbWUxLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgY2gxID0gbmFtZTEuY2hhckF0KGkxICsrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChjaDEgPT0gJy0nIHx8IGNoMSA9PSAnXycgfHwgY2gxID09ICcgJyB8fCBjaDEgPT0gJ1x0JyAKKyAgICAgICAgICAgICAgICAgICB8fCBjaDEgPT0gJ1xuJyAvLyBzeW53ZWUgd2hhdCBpcyB8fCBjaDEgPT0gJ1x2JworICAgICAgICAgICAgICAgICAgIHx8IGNoMSA9PSAnXGYnIHx8IGNoMT09J1xyJykgeworICAgICAgICAgICAgICAgIGlmIChpMSA8IG5hbWUxLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNoMSA9IG5hbWUxLmNoYXJBdChpMSArKyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjaDEgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpMiA8IG5hbWUyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgY2gyID0gbmFtZTIuY2hhckF0KGkyICsrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChjaDIgPT0gJy0nIHx8IGNoMiA9PSAnXycgfHwgY2gyID09ICcgJyB8fCBjaDIgPT0gJ1x0JyAKKyAgICAgICAgICAgICAgICAgICB8fCBjaDIgPT0gJ1xuJyAvLyBzeW53ZWUgd2hhdCBpcyB8fCBjaDEgPT0gJ1x2JyAKKyAgICAgICAgICAgICAgICAgICB8fCBjaDIgPT0gJ1xmJyB8fCBjaDI9PSdccicpIHsKKyAgICAgICAgICAgICAgICBpZiAoaTIgPCBuYW1lMi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBjaDIgPSBuYW1lMi5jaGFyQXQoaTIgKyspOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2gyID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSByZWFjaCB0aGUgZW5kcyBvZiBib3RoIHN0cmluZ3MgdGhlbiB0aGV5IG1hdGNoCisgICAgICAgICAgICBpZiAoY2gxID09IDAgJiYgY2gyID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uCisgICAgICAgICAgICBpZiAoY2gxICE9IGNoMikgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IENoYXJhY3Rlci50b0xvd2VyQ2FzZShjaDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIENoYXJhY3Rlci50b0xvd2VyQ2FzZShjaDIpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAqLworICAgIAorICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgYXJndW1lbnQgYyBpcyB0byBiZSB0cmVhdGVkIGFzIGEgd2hpdGUgc3BhY2UgaW4gSUNVCisgICAgICogcnVsZXMuIFVzdWFsbHkgSUNVIHJ1bGUgd2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkIHVubGVzcyBxdW90ZWQuCisgICAgICogQHBhcmFtIGMgY29kZXBvaW50IHRvIGNoZWNrCisgICAgICogQHJldHVybiB0cnVlIGlmIGMgaXMgYSBJQ1Ugd2hpdGUgc3BhY2UKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSdWxlV2hpdGVTcGFjZShpbnQgYykgCisgICAgeworICAgICAgICAvLyAid2hpdGUgc3BhY2UiIGluIHRoZSBzZW5zZSBvZiBJQ1UgcnVsZSBwYXJzZXJzOiBDZitXaGl0ZV9TcGFjZQorICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkgcHJvcGVydHkgPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgcmV0dXJuIChwcm9wZXJ0eS5nZXRQcm9wZXJ0eShjKSAmIFRZUEVfTUFTSykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuRk9STUFUIAorICAgICAgICAgICAgICAgfHwgcHJvcGVydHkuaGFzQmluYXJ5UHJvcGVydHkoYywgVVByb3BlcnR5LldISVRFX1NQQUNFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHRoZSBtYXhpbXVtIHZhbHVlcyBmb3Igc29tZSBlbnVtL2ludCBwcm9wZXJ0aWVzLgorICAgICAqIEByZXR1cm4gbWF4aW11bSB2YWx1ZXMgZm9yIHRoZSBpbnRlZ2VyIHByb3BlcnRpZXMuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRNYXhCbG9ja1NjcmlwdFZhbHVlcygpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4QmxvY2tTY3JpcHRWYWx1ZV87CisgICAgfQorICAgIAorICAgIC8vIHByb3RlY3RlZCB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgICAgLyoqCisgICAgKiBDYXNlIHRhYmxlCisgICAgKi8KKyAgICBjaGFyIG1fY2FzZV9bXTsKKyAgICAgIAorICAgIC8qKgorICAgICogRXhjZXB0aW9uIHByb3BlcnR5IHRhYmxlCisgICAgKi8KKyAgICBpbnQgbV9leGNlcHRpb25fW107CisgICAgLyoqCisgICAgICogRXh0cmEgcHJvcGVydHkgdHJpZQorICAgICAqLworICAgIENoYXJUcmllIG1fYWRkaXRpb25hbFRyaWVfOworICAgIC8qKgorICAgICAqIEV4dHJhIHByb3BlcnR5IHZlY3RvcnMsIDFzdCBjb2x1bW4gZm9yIGFnZSBhbmQgc2Vjb25kIGZvciBiaW5hcnkgCisgICAgICogcHJvcGVydGllcy4KKyAgICAgKi8KKyAgICBpbnQgbV9hZGRpdGlvbmFsVmVjdG9yc19bXTsKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgYWRkaXRpb25hbCBjb2x1bW5zCisgICAgICovCisgICAgaW50IG1fYWRkaXRpb25hbENvbHVtbnNDb3VudF87CisgICAgLyoqCisgICAgICogTWF4aW11bSB2YWx1ZXMgZm9yIGJsb2NrIGFuZCBzY3JpcHQgY29kZXMsIGJpdHMgdXNlZCBhcyBpbiB2ZWN0b3Igd29yZAorICAgICAqIDAKKyAgICAgKi8KKyAgICBpbnQgbV9tYXhCbG9ja1NjcmlwdFZhbHVlXzsKKyAgICAKKyAgICAvLyBwcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAorICAJLyoqCisgICAgICogVW5pY29kZURhdGEudHh0IHByb3BlcnR5IG9iamVjdAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFVDaGFyYWN0ZXJQcm9wZXJ0eSBJTlNUQU5DRV8gPSBudWxsOyAgIAorICAgICAgICAKKyAgICAvKioKKyAgICAqIERlZmF1bHQgbmFtZSBvZiB0aGUgZGF0YWZpbGUKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX0ZJTEVfTkFNRV8gPSAiZGF0YS91cHJvcHMuaWN1IjsKKyAgICAgIAorICAgIC8qKgorICAgICogRGVmYXVsdCBidWZmZXIgc2l6ZSBvZiBkYXRhZmlsZQorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERBVEFfQlVGRkVSX1NJWkVfID0gMjUwMDA7CisgICAgICAKKyAgICAvKioKKyAgICAqIFRoaXMsIGZyb20gd2hhdCBpIGluZmVyIGlzIHRoZSBtYXggc2l6ZSBvZiB0aGUgaW5kaWNhdG9ycyB1c2VkIGZvciB0aGUKKyAgICAqIGV4Y2VwdGlvbiB2YWx1ZXMuCisgICAgKiBOdW1iZXIgb2YgYml0cyBpbiBhbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYQ19HUk9VUF8gPSA4OworICAgICAgCisgICAgLyoqCisgICAgKiBNYXNrIHRvIGdldCB0aGUgZ3JvdXAgIAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYQ19HUk9VUF9NQVNLXyA9IDI1NTsKKyAgICAgIAorICAgIC8qKgorICAgICogTWFzayB0byBnZXQgdGhlIGRpZ2l0IHZhbHVlIGluIHRoZSBleGNlcHRpb24gcmVzdWx0CisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhDX0RJR0lUX01BU0tfID0gMHhGRkZGOworICAgICAgCisgICAgLyoqCisgICAgKiBPZmZzZXQgdGFibGUgZm9yIGRhdGEgaW4gZXhjZXB0aW9uIGJsb2NrLjxicj4KKyAgICAqIFRhYmxlIGZvcm1lZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBmb3IgdGhlIGluZGV4LCBlLmcuIDAgPSAwIGJpdHMsIAorICAgICogMSA9IDEgYml0cy4KKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgRkxBR1NfT0ZGU0VUX1tdID0gCisgICAgeworICAgICAgICAwLCAxLCAxLCAyLCAxLCAyLCAyLCAzLCAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LAorICAgICAgICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorICAgICAgICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorICAgICAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorICAgICAgICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorICAgICAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorICAgICAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorICAgICAgICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorICAgICAgICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorICAgICAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorICAgICAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorICAgICAgICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorICAgICAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorICAgICAgICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorICAgICAgICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorICAgICAgICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LCA1LCA2LCA2LCA3LCA2LCA3LCA3LCA4CisgICAgfTsKKyAgICAgIAorICAgIC8qKgorICAgICogTnVtZXJpYyB2YWx1ZSBzaGlmdAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZBTFVFX1NISUZUXyA9IDIwOworICAgICAgCisgICAgLyoqCisgICAgKiBNYXNrIHRvIGJlIGFwcGxpZWQgYWZ0ZXIgc2hpZnRpbmcgdG8gb2J0YWluIGFuIHVuc2lnbmVkIG51bWVyaWMgdmFsdWUKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNJR05FRF9WQUxVRV9NQVNLX0FGVEVSX1NISUZUXyA9IDB4N0ZGOworICAgIAorICAgIC8qKgorCSAqIFNoaWZ0IHRvIGdldCByZXNlcnZlZCB2YWx1ZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRVNFUlZFRF9TSElGVF8gPSAxNTsKKwkKKwkvKioKKwkgKiBCaXQgaW5kaWNhdGluZyBleGNlcHRpb24KKwkgKi8KKyAgCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFWENFUFRJT05fQklUID0gMSA8PCA1OworICAJCisgIAkvKiogCisgIAkgKiBCaXQgdG8gZ2V0IHRoZSBhY3R1YWwgcHJvcGVydHkgdmFsdWUKKyAgCSAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWQUxVRV9CSVRTXyA9IDB4MTAwMDAgLSBWQUxVRV9TSElGVF87CisKKwkvKioKKwkgKiBNaW5pbXVtIHZhbHVlIG9mIGEgcHJvcGVydHkKKwkgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX1ZBTFVFXyA9IC0oMSA8PCAoVkFMVUVfQklUU18gLSAxKSk7CisgICAgCisgICAgLyoqCisgICAgICogTWF4aW11bSB2YWx1ZSBvZiBhIHByb3BlcnR5CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9WQUxVRV8gPSAoMSA8PCAoVkFMVUVfQklUU18gLSAxKSkgLSAxOworICAgIC8qKgorICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGV4Y2VwdGlvbnMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgTUFYX0VYQ0VQVElPTlNfQ09VTlRfID0gMSA8PCBWQUxVRV9CSVRTXzsKKworICAgIC8qKgorICAgICogVG8gZ2V0IHRoZSBsYXN0IDUgYml0cyBvdXQgZnJvbSBhIGRhdGEgdHlwZQorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExBU1RfNV9CSVRfTUFTS18gPSAweDFGOworICAgICAgCisgICAgLyoqCisgICAgKiBTaGlmdCA1IGJpdHMKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTSElGVF81XyA9IDU7CisgICAgLyoqCisgICAgKiBTaGlmdCAxMCBiaXRzCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0hJRlRfMTBfID0gMTA7CisgICAgICAKKyAgICAvKioKKyAgICAqIEZvbGRpbmcgaW5kaWNhdG9yIG1hc2sKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVVBQTEVNRU5UQVJZX0ZPTERfSU5ESUNBVE9SX01BU0tfID0gMHg4MDAwOworICAgIC8qKgorICAgICogRm9sZGluZyBvZmZzZXQgbWFzaworICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVUFBMRU1FTlRBUllfRk9MRF9PRkZTRVRfTUFTS18gPSAweDdGRkY7CisgICAgLyoqCisgICAgKiBTaGlmdCB2YWx1ZSBmb3IgbGVhZCBzdXJyb2dhdGUgdG8gZm9ybSBhIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyLgorICAgICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExFQURfU1VSUk9HQVRFX1NISUZUXyA9IDEwOworCS8qKiAKKyAgICAqIE9mZnNldCB0byBhZGQgdG8gY29tYmluZWQgc3Vycm9nYXRlIHBhaXIgdG8gYXZvaWQgbXNraW5nLgorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVUlJPR0FURV9PRkZTRVRfID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5TVVBQTEVNRU5UQVJZX01JTl9WQUxVRSAtIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVURjE2LlNVUlJPR0FURV9NSU5fVkFMVUUgPDwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMRUFEX1NVUlJPR0FURV9TSElGVF8pIC0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5UUkFJTF9TVVJST0dBVEVfTUlOX1ZBTFVFOyAgIAorICAgIC8qKgorICAgICogTGF0aW4gdXBwZXJjYXNlIEkKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgTEFUSU5fQ0FQSVRBTF9MRVRURVJfSV8gPSAweDQ5OworICAgIC8qKgorICAgICogQ29tYmluaW5nIGRvdCBhYm92ZQorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBDT01CSU5JTkdfRE9UX0FCT1ZFXyA9IDB4MzA3OworICAgIC8qKgorICAgICogTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVRJTl9TTUFMTF9MRVRURVJfSl8gPSAweDZhOworICAgIC8qKgorICAgICogTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBPR09ORUsKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVRJTl9TTUFMTF9MRVRURVJfSV9XSVRIX09HT05FS18gPSAweDEyZjsKKyAgICAvKioKKyAgICAqIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggVElMREUgQkVMT1cKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVRJTl9TTUFMTF9MRVRURVJfSV9XSVRIX1RJTERFX0JFTE9XXyA9IDB4MWUyZDsKKyAgICAvKioKKyAgICAqIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRE9UIEJFTE9XCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFUSU5fU01BTExfTEVUVEVSX0lfV0lUSF9ET1RfQkVMT1dfID0gMHgxZWNiOworICAgIC8qKgorICAgICogQ29tYmluaW5nIGNsYXNzIGZvciBjb21iaW5pbmcgbWFyayBhYm92ZQorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTUJJTklOR19NQVJLX0FCT1ZFX0NMQVNTXyA9IDIzMDsKKyAgICAKKyAgICAvKioKKyAgICAqIExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVRJTl9DQVBJVEFMX0xFVFRFUl9KXyA9IDB4NGE7CisgICAgCisgICAgLyoqCisgICAgKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggT0dPTkVLCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFUSU5fQ0FQSVRBTF9JX1dJVEhfT0dPTkVLXyA9IDB4MTJlOworICAgIC8qKgorICAgICogTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIFRJTERFCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFUSU5fQ0FQSVRBTF9JX1dJVEhfVElMREVfID0gMHgxMjg7CisgICAgLyoqCisgICAgKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVRJTl9DQVBJVEFMX0lfV0lUSF9HUkFWRV8gPSAweGNjOworICAgIC8qKgorICAgICogTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFUSU5fQ0FQSVRBTF9JX1dJVEhfQUNVVEVfID0gMHhjZDsKKyAgICAvKioKKyAgICAqIENPTUJJTklORyBHUkFWRSBBQ0NFTlQKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT01CSU5JTkdfR1JBVkVfQUNDRU5UXyA9IDB4MzAwOworICAgIC8qKgorICAgICogQ09NQklOSU5HIEFDVVRFIEFDQ0VOVAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTUJJTklOR19BQ1VURV9BQ0NFTlRfID0gMHgzMDE7CisgICAgLyoqCisgICAgKiBDT01CSU5JTkcgVElMREUKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT01CSU5JTkdfVElMREVfID0gMHgzMDM7CisgICAgLyoqCisgICAgKiBHcmVlayBjYXBpdGFsIGxldHRlciBzaWdtYQorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBHUkVFS19DQVBJVEFMX0xFVFRFUl9TSUdNQV8gPSAweDNhMzsKKyAgICAvKioKKyAgICAqIEdyZWVrIHNtYWxsIGxldHRlciBzaWdtYQorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBHUkVFS19TTUFMTF9MRVRURVJfU0lHTUFfID0gMHgzYzM7CisgICAgLyoqCisgICAgKiBHcmVlayBzbWFsbCBsZXR0ZXIgcmhvCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEdSRUVLX1NNQUxMX0xFVFRFUl9SSE9fID0gMHgzYzI7CisgICAgLyoqCisgICAgKiBIeXBoZW5zCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSFlQSEVOXyAgICAgID0gMHgyMDEwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTT0ZUX0hZUEhFTl8gPSAweEFEOworICAgIC8qKgorICAgICogVG8gZ2V0IHRoZSBsYXN0IGNoYXJhY3RlciBvdXQgZnJvbSBhIGRhdGEgdHlwZQorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExBU1RfQ0hBUl9NQVNLXyA9IDB4RkZGRjsKKyAgICAvKioKKyAgICAqIFRvIGdldCB0aGUgbGFzdCBieXRlIG91dCBmcm9tIGEgZGF0YSB0eXBlCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFTVF9CWVRFX01BU0tfID0gMHhGRjsKKyAgICAvKioKKyAgICAqIFNoaWZ0IDE2IGJpdHMKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTSElGVF8xNl8gPSAxNjsKKyAgIAorICAgCS8vIGFkZGl0aW9uYWwgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAJIAorICAgCS8qKgorICAgCSAqIEFkZGl0aW9uYWwgcHJvcGVydGllcyB1c2VkIGluIGludGVybmFsIHRyaWUgZGF0YQorICAgCSAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSElURV9TUEFDRV9QUk9QRVJUWV8gPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCSURJX0NPTlRST0xfUFJPUEVSVFlfID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSk9JTl9DT05UUk9MX1BST1BFUlRZXyA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERBU0hfUFJPUEVSVFlfID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSFlQSEVOX1BST1BFUlRZXyA9IDQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFFVT1RBVElPTl9NQVJLX1BST1BFUlRZXyA9IDU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFUk1JTkFMX1BVTkNUVUFUSU9OX1BST1BFUlRZXyA9IDY7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9USEVSX01BVEhfUFJPUEVSVFlfID0gNzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVYX0RJR0lUX1BST1BFUlRZXyA9IDg7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFTQ0lJX0hFWF9ESUdJVF9QUk9QRVJUWV8gPSA5OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPVEhFUl9BTFBIQUJFVElDX1BST1BFUlRZXyA9IDEwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJREVPR1JBUEhJQ19QUk9QRVJUWV8gPSAxMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRElBQ1JJVElDX1BST1BFUlRZXyA9IDEyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFWFRFTkRFUl9QUk9QRVJUWV8gPSAxMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1RIRVJfTE9XRVJDQVNFX1BST1BFUlRZXyA9IDE0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPVEhFUl9VUFBFUkNBU0VfUFJPUEVSVFlfID0gMTU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PTkNIQVJBQ1RFUl9DT0RFX1BPSU5UX1BST1BFUlRZXyA9IDE2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPVEhFUl9HUkFQSEVNRV9FWFRFTkRfUFJPUEVSVFlfID0gMTc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdSQVBIRU1FX0xJTktfUFJPUEVSVFlfID0gMTg7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElEU19CSU5BUllfT1BFUkFUT1JfUFJPUEVSVFlfID0gMTk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElEU19UUklOQVJZX09QRVJBVE9SX1BST1BFUlRZXyA9IDIwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSQURJQ0FMX1BST1BFUlRZXyA9IDIxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTklGSUVEX0lERU9HUkFQSF9QUk9QRVJUWV8gPSAyMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1RIRVJfREVGQVVMVF9JR05PUkFCTEVfQ09ERV9QT0lOVF9QUk9QRVJUWV8gPSAyMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVQUkVDQVRFRF9QUk9QRVJUWV8gPSAyNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU09GVF9ET1RURURfUFJPUEVSVFlfID0gMjU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPR0lDQUxfT1JERVJfRVhDRVBUSU9OX1BST1BFUlRZXyA9IDI2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBYSURfU1RBUlRfUFJPUEVSVFlfID0gMjc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFhJRF9DT05USU5VRV9QUk9QRVJUWV8gPSAyODsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklOQVJZXzFfVE9QX1BST1BFUlRZXyA9IDI5OworICAgIAorICAgIC8qKgorICAgICAqIEZpcnN0IG5pYmJsZSBzaGlmdAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGSVJTVF9OSUJCTEVfU0hJRlRfID0gMHg0OworICAgIC8qKgorICAgICAqIFNlY29uZCBuaWJibGUgbWFzaworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVNUX05JQkJMRV9NQVNLXyA9IDB4RjsKKyAgICAvKioKKyAgICAgKiBBZ2UgdmFsdWUgc2hpZnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUdFX1NISUZUXyA9IDI0OworICAgIAorICAgIC8vIHByaXZhdGUgY29uc3RydWN0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiBDb25zdHJ1Y3RvcgorICAgICogQGV4Y2VwdGlvbiB0aHJvd24gd2hlbiBkYXRhIHJlYWRpbmcgZmFpbHMgb3IgZGF0YSBjb3JydXB0ZWQKKyAgICAqLworICAgIHByaXZhdGUgVUNoYXJhY3RlclByb3BlcnR5KCkgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICAvLyBqYXIgYWNjZXNzCisgICAgICAgIElucHV0U3RyZWFtIGkgPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oREFUQV9GSUxFX05BTUVfKTsKKyAgICAgICAgQnVmZmVyZWRJbnB1dFN0cmVhbSBiID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oaSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEFfQlVGRkVSX1NJWkVfKTsKKyAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5UmVhZGVyIHJlYWRlciA9IG5ldyBVQ2hhcmFjdGVyUHJvcGVydHlSZWFkZXIoYik7CisgICAgICAgIHJlYWRlci5yZWFkKHRoaXMpOworICAgICAgICBiLmNsb3NlKCk7CisgICAgICAgIGkuY2xvc2UoKTsKKyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJLy8gcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBVbmljb2RlIDMuMiBVQVggMjEgIkNhc2UgTWFwcGluZ3MiIGRlZmluZXMgdGhlIGNvbmRpdGlvbnMgYXMgZm9sbG93czoKKyAgICAgKgorICAgICAqIEZpbmFsX1NpZ21hCisgICAgICogICBDIGlzIHByZWNlZGVkIGJ5IGEgc2VxdWVuY2UgY29uc2lzdGluZyBvZgorICAgICAqICAgICBhIGNhc2VkIGxldHRlciBhbmQgYSBjYXNlLWlnbm9yYWJsZSBzZXF1ZW5jZSwKKyAgICAgKiAgIGFuZCBDIGlzIG5vdCBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YKKyAgICAgKiAgICAgYW4gaWdub3JhYmxlIHNlcXVlbmNlIGFuZCB0aGVuIGEgY2FzZWQgbGV0dGVyLgorICAgICAqCisgICAgICogTW9yZV9BYm92ZQorICAgICAqICAgQyBpcyBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIG9mIGNvbWJpbmluZyBjbGFzcyAyMzAgKEFCT1ZFKQorICAgICAqICAgaW4gdGhlIGNvbWJpbmluZyBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICoKKyAgICAgKiBBZnRlcl9Tb2Z0X0RvdHRlZAorICAgICAqICAgVGhlIGxhc3QgcHJlY2VkaW5nIGNoYXJhY3RlciB3aXRoIGNvbWJpbmluZyBjbGFzcyBvZiB6ZXJvIGJlZm9yZSBDCisgICAgICogICB3YXMgU29mdF9Eb3R0ZWQsCisgICAgICogICBhbmQgdGhlcmUgaXMgbm8gaW50ZXJ2ZW5pbmcgY29tYmluaW5nIGNoYXJhY3RlciBjbGFzcyAyMzAgKEFCT1ZFKS4KKyAgICAgKgorICAgICAqIEJlZm9yZV9Eb3QKKyAgICAgKiAgIEMgaXMgZm9sbG93ZWQgYnkgY29tYmluaW5nIGRvdCBhYm92ZSAoVSswMzA3KS4KKyAgICAgKiAgIEFueSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHdpdGggYSBjb21iaW5pbmcgY2xhc3MgdGhhdCBpcyBuZWl0aGVyIDAgCisgICAgICogICBub3IgMjMwIG1heSBpbnRlcnZlbmUgYmV0d2VlbiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYW5kIHRoZSBjb21iaW5pbmcgCisgICAgICogICBkb3QgYWJvdmUuCisgICAgICoKKyAgICAgKiBIZWxwZXIgZGVmaW5pdGlvbnMgaW4gVW5pY29kZSAzLjIgVUFYIDIxOgorICAgICAqCisgICAgICogRDEuIEEgY2hhcmFjdGVyIEMgaXMgZGVmaW5lZCB0byBiZSBjYXNlZAorICAgICAqICAgICBpZiBpdCBtZWV0cyBhbnkgb2YgdGhlIGZvbGxvd2luZyBjcml0ZXJpYToKKyAgICAgKgorICAgICAqICAgLSBUaGUgZ2VuZXJhbCBjYXRlZ29yeSBvZiBDIGlzIFRpdGxlY2FzZSBMZXR0ZXIgKEx0KQorICAgICAqICAgLSBJbiBbQ29yZVByb3BzXSwgQyBoYXMgb25lIG9mIHRoZSBwcm9wZXJ0aWVzIFVwcGVyY2FzZSwgb3IgTG93ZXJjYXNlCisgICAgICogICAtIEdpdmVuIEQgPSBORkQoQyksIHRoZW4gaXQgaXMgbm90IHRoZSBjYXNlIHRoYXQ6CisgICAgICogICAgIEQgPSBVQ0RfbG93ZXIoRCkgPSBVQ0RfdXBwZXIoRCkgPSBVQ0RfdGl0bGUoRCkKKyAgICAgKiAgICAgKFRoaXMgdGhpcmQgY3JpdGVyaXVtIGRvZXMgbm90IGFkZCBhbnkgY2hhcmFjdGVycyB0byB0aGUgbGlzdAorICAgICAqICAgICAgZm9yIFVuaWNvZGUgMy4yLiBJZ25vcmVkLikKKyAgICAgKgorICAgICAqIEQyLiBBIGNoYXJhY3RlciBDIGlzIGRlZmluZWQgdG8gYmUgY2FzZS1pZ25vcmFibGUKKyAgICAgKiAgICAgaWYgaXQgbWVldHMgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6CisgICAgICoKKyAgICAgKiAgIC0gVGhlIGdlbmVyYWwgY2F0ZWdvcnkgb2YgQyBpcworICAgICAqICAgICBOb25zcGFjaW5nIE1hcmsgKE1uKSwgb3IgRW5jbG9zaW5nIE1hcmsgKE1lKSwgb3IgRm9ybWF0IENvbnRyb2wgKENmKSwgb3IKKyAgICAgKiAgICAgTGV0dGVyIE1vZGlmaWVyIChMbSksIG9yIFN5bWJvbCBNb2RpZmllciAoU2spCisgICAgICogICAtIEMgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyAKKyAgICAgKiAgICAgVSswMDI3IEFQT1NUUk9QSEUKKyAgICAgKiAgICAgVSswMEFEIFNPRlQgSFlQSEVOIChTSFkpCisgICAgICogICAgIFUrMjAxOSBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAgKiAgICAgICAgICAgICh0aGUgcHJlZmVycmVkIGNoYXJhY3RlciBmb3IgYXBvc3Ryb3BoZSkKKyAgICAgKgorICAgICAqIEQzLiBBIGNhc2UtaWdub3JhYmxlIHNlcXVlbmNlIGlzIGEgc2VxdWVuY2Ugb2YKKyAgICAgKiAgICAgemVybyBvciBtb3JlIGNhc2UtaWdub3JhYmxlIGNoYXJhY3RlcnMuCisgICAgICovCisKKyAgICAvKioKKyAgICAqIERldGVybWluZXMgaWYgYSBzdHJpbmcgYXQgb2Zmc2V0IGlzIHByZWNlZGVkIGJ5IGFueSBzb2Z0IGRvdHRlZCBjaGFyYWN0ZXIKKyAgICAqIHdpdGggbm8gaW50ZXJ2ZW5pbmcgY2hhcmFjdGVyIHdpdGggY29tYmluaW5nIGNsYXNzID0gMjMwCisgICAgKiBAcGFyYW0gdWNoYXJpdGVyIHRleHQgaXRlcmF0b3IgdG8gYmUgZGV0ZXJtaW5lZAorICAgICogQHBhcmFtIG9mZnNldCBvZmZzZXQgaW4gc3RyaW5nIHRvIGNoZWNrCisgICAgKiBAcmV0dXJuIHRydWUgaWYgc29tZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgb2Zmc2V0IGluZGV4IGJlbG9uZ3MgdG8KKyAgICAqICAgICAgICAgdGhlIHNldCBvZiBzb2Z0IGRvdHRlZCBjaGFyYWN0ZXJzIHdpdGggbm8gaW50ZXJ2ZW5pbmcgY2hhcmFjdGVyCisgICAgKiBAc2VlIFNwZWNpYWxDYXNpbmcudHh0CisgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNQcmVjZWRlZEJ5U29mdERvdHRlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIHVjaGFyaXRlciwgaW50IG9mZnNldCkgCisgICAgeworICAgIAl1Y2hhcml0ZXIuc2V0SW5kZXgob2Zmc2V0KTsKKyAgICAJCisgICAgCWludCBjaCA9IHVjaGFyaXRlci5wcmV2aW91c0NvZGVQb2ludCgpOworICAgIAkKKyAgICAgICAgd2hpbGUgKGNoICE9IFVDaGFyYWN0ZXJJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICBpZiAoaXNTb2Z0RG90dGVkKGNoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBwcmVjZWRlZCBieSBUWVBFX2kKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGludCBjYyA9IE5vcm1hbGl6ZXJJbXBsLmdldENvbWJpbmluZ0NsYXNzKGNoKTsKKyAgICAgICAgICAgIGlmIChjYyA9PSAwIHx8IGNjID09IENPTUJJTklOR19NQVJLX0FCT1ZFX0NMQVNTXykgeworICAgICAgICAgICAgICAgIC8vIHByZWNlZGVkIGJ5IGRpZmZlcmVudCBiYXNlIGNoYXJhY3RlciBub3QgVFlQRV9pKSwgb3IgCisgICAgICAgICAgICAgICAgLy8gaW50ZXJ2ZW5pbmcgY2MgPT0gMjMwCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gdWNoYXJpdGVyLnByZXZpb3VzQ29kZVBvaW50KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG5vdCBwcmVjZWRlZCBieSBUWVBFX2kKKyAgICB9CisgICAgCisgICAgLyoqIAorICAgICogRGV0ZXJtaW5lcyBpZiBjb2RlcG9pbnQgYXQgb2Zmc2V0IGlzIG5vdCBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIAorICAgICogY29uc2lzdGluZyBvZiBhbiBpZ25vcmFibGUgc2VxdWVuY2UgYW5kIHRoZW4gYSBjYXNlZCBsZXR0ZXIgCisgICAgKiB7TGwsIEx1LCBMdH0uCisgICAgKiBAcGFyYW0gdWNoYXJpdGVyIFN0cmluZyBpdGVyYXRvciB0byBkZXRlcm1pbmUKKyAgICAqIEBwYXJhbSBvZmZzZXQgY29kZXBvaW50IG9mZnNldCBpbiBzdHJpbmcgdG8gY2hlY2sKKyAgICAqIEByZXR1cm4gZmFsc2UgaWYgYW55IGNoYXJhY3RlciBhZnRlciBvZmZzZXQgaW4gc3JjIGlzIGEgY2FzZWQgbGV0dGVyCisgICAgKiBAc2VlIFNwZWNpYWxDYXNpbmcudHh0CisgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNDRklOQUwoVUNoYXJhY3Rlckl0ZXJhdG9yIHVjaGFyaXRlciwgaW50IG9mZnNldCkgCisgICAgeworICAgIAkvLyBpdGVyYXRvciBzaG91bGQgaGF2ZSBiZWVuIGRldGVybWluZWQgdG8gYmUgbm90IG51bGwgYnkgY2FsbGVyCisgICAgICAgIHVjaGFyaXRlci5zZXRJbmRleChvZmZzZXQpOworICAgIAl1Y2hhcml0ZXIubmV4dENvZGVQb2ludCgpOyAvLyByaWQgb2YgY3VycmVudCBjb2RlcG9pbnQKKyAgICAgICAgaW50IGNoID0gdWNoYXJpdGVyLm5leHRDb2RlUG9pbnQoKTsgLy8gc3RhcnQgY2hlY2tpbmcKKyAgICAJCisgICAgCXdoaWxlIChjaCAhPSBVQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgaW50IGNhdCA9IGdldFByb3BlcnR5KGNoKSAmIFRZUEVfTUFTSzsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VkKGNoLCBjYXQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBmb2xsb3dlZCBieSBjYXNlZCBsZXR0ZXIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaXNDYXNlSWdub3JhYmxlKGNoLCBjYXQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIG5vdCBpZ25vcmFibGUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gdWNoYXJpdGVyLm5leHRDb2RlUG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICogRGV0ZXJtaW5lcyBpZiBjb2RlcG9pbnQgYXQgb2Zmc2V0IGlzIG5vdCBwcmVjZWRlZCBieSBhIHNlcXVlbmNlIAorICAgICogY29uc2lzdGluZyBvZiBhIGNhc2VkIGxldHRlciB7TGwsIEx1LCBMdH0gYW5kIGFuIGlnbm9yYWJsZSBzZXF1ZW5jZS4gCisgICAgKiBAcGFyYW0gdWNoYXJpdGVyIHN0cmluZyBpdGVyYXRvciB0byBkZXRlcm1pbmUKKyAgICAqIEBwYXJhbSBvZmZzZXQgY29kZXBvaW50IG9mZnNldCBpbiBzdHJpbmcgdG8gY2hlY2sKKyAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnkgY2hhcmFjdGVyIGJlZm9yZSBpbmRleCBpbiBzcmMgaXMgYSBjYXNlZCBsZXR0ZXIKKyAgICAqIEBzZWUgU3BlY2lhbENhc2luZy50eHQKKyAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc05vdENJTklUSUFMKFVDaGFyYWN0ZXJJdGVyYXRvciB1Y2hhcml0ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0KSAKKyAgICB7CisgICAgCXVjaGFyaXRlci5zZXRJbmRleChvZmZzZXQpOworICAgIAlpbnQgY2ggPSB1Y2hhcml0ZXIucHJldmlvdXNDb2RlUG9pbnQoKTsKKyAgICAJCisgICAgICAgIHdoaWxlIChjaCAhPSBVQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgaW50IGNhdCA9IGdldFByb3BlcnR5KGNoKSAmIFRZUEVfTUFTSzsKKyAgICAgICAgICAgIGlmIChpc0Nhc2VkKGNoLCBjYXQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIHByZWNlZGVkIGJ5IGNhc2VkIGxldHRlcgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFpc0Nhc2VJZ25vcmFibGUoY2gsIGNhdCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG5vdCBpZ25vcmFibGUKKyAgICAgICAgICAgIH0KKwkJCWNoID0gdWNoYXJpdGVyLnByZXZpb3VzQ29kZVBvaW50KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgIH0KKworICAgIC8qKiAKKyAgICAqIERldGVybWluZXMgaWYgYSBjb2RlcG9pbnQgYXQgb2Zmc2V0IGluIHN0cmluZyBpcyBmb2xsb3dlZCBieSBvbmUgb3IgCisgICAgKiBtb3JlIGNoYXJhY3RlcnMgb2YgY29tYmluaW5nIGNsYXNzID0gMjMwLgorICAgICogQHBhcmFtIHVjaGFyaXRlciB0ZXh0IGl0ZXJhdG9yIHRvIGJlIGRldGVybWluZWQKKyAgICAqIEBwYXJhbSBvZmZzZXQgY29kZXBvaW50IG9mZnNldCBpbiBzdHJpbmcgdG8gY2hlY2sKKyAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhIHN0cmluZyBhdCBvZmZzZXQgaXMgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgY2hhcmFjdGVycyAKKyAgICAqICAgICAgICAgb2YgY29tYmluaW5nIGNsYXNzID0gMjMwLgorICAgICogQHNlZSBTcGVjaWFsQ2FzaW5nLnR4dAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0ZvbGxvd2VkQnlNT1JFQUJPVkUoVUNoYXJhY3Rlckl0ZXJhdG9yIHVjaGFyaXRlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCkgCisgICAgeworICAgICAgICB1Y2hhcml0ZXIuc2V0SW5kZXgob2Zmc2V0KTsKKyAgICAgICAgdWNoYXJpdGVyLm5leHRDb2RlUG9pbnQoKTsgLy8gcmlkIG9mIGN1cnJlbnQgY29kZXBvaW50CisgICAgICAgIGludCBjaCA9IHVjaGFyaXRlci5uZXh0Q29kZVBvaW50KCk7IC8vIHN0YXJ0IGNoZWNraW5nCisgICAgICAgIAorICAgICAgICB3aGlsZSAoY2ggIT0gVUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgIGludCBjYyA9IE5vcm1hbGl6ZXJJbXBsLmdldENvbWJpbmluZ0NsYXNzKGNoKTsKKyAgICAgICAgICAgIGlmIChjYyA9PSBDT01CSU5JTkdfTUFSS19BQk9WRV9DTEFTU18pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gYXQgbGVhc3Qgb25lIGNjPT0yMzAgZm9sbG93aW5nIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNjID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG5leHQgYmFzZSBjaGFyYWN0ZXIsIG5vIG1vcmUgY2M9PTIzMCBmb2xsb3dpbmcKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gdWNoYXJpdGVyLm5leHRDb2RlUG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gbm8gbW9yZSBjYyA9PSAyMzAgZm9sbG93aW5nCisgICAgfQorCisgICAgLyoqIAorICAgICogRGV0ZXJtaW5lcyBpZiBhIGNvZGVwb2ludCBhdCBvZmZzZXQgaW4gc3RyaW5nIGlzIGZvbGxvd2VkIGJ5IGEgZG90IAorICAgICogYWJvdmUgd2l0aCBubyBjaGFyYWN0ZXJzIG9mIGNvbWJpbmluZyBjbGFzcyA9PSAyMzAgaW4gYmV0d2VlbiAKKyAgICAqIEBwYXJhbSB1Y2hhcml0ZXIgdGV4dCBpdGVyYXRvciB0byBiZSBkZXRlcm1pbmVkCisgICAgKiBAcGFyYW0gb2Zmc2V0IGNvZGVwb2ludCBvZmZzZXQgb2YgdGhlIGNoYXJhY3RlciBpbiBzdHJpbmcgdG8gY2hlY2sKKyAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhIHN0cmluZyBhdCBvZmZzZXQgaXMgZm9sbG93ZWQgYnkgb2EgZG90IGFib3ZlIAorICAgICogICAgICAgICB3aXRoIG5vIGNoYXJhY3RlcnMgb2YgY29tYmluaW5nIGNsYXNzID09IDIzMCBpbiBiZXR3ZWVuCisgICAgKiBAc2VlIFNwZWNpYWxDYXNpbmcudHh0CisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRm9sbG93ZWRCeURvdEFib3ZlKFVDaGFyYWN0ZXJJdGVyYXRvciB1Y2hhcml0ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCkgCisgICAgeworICAgICAgICB1Y2hhcml0ZXIuc2V0SW5kZXgob2Zmc2V0KTsKKyAgICAgICAgdWNoYXJpdGVyLm5leHRDb2RlUG9pbnQoKTsgLy8gcmlkIG9mZiBjdXJyZW50IGNoYXJhY3RlcgorICAgICAgICBpbnQgY2ggPSB1Y2hhcml0ZXIubmV4dENvZGVQb2ludCgpOyAvLyBzdGFydCBjaGVja2luZworICAgICAgICAKKyAgICAgICAgd2hpbGUgKGNoICE9IFVDaGFyYWN0ZXJJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICBpZiAoY2ggPT0gQ09NQklOSU5HX0RPVF9BQk9WRV8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBjYyA9IE5vcm1hbGl6ZXJJbXBsLmdldENvbWJpbmluZ0NsYXNzKGNoKTsKKyAgICAgICAgICAgIGlmIChjYyA9PSAwIHx8IGNjID09IENPTUJJTklOR19NQVJLX0FCT1ZFX0NMQVNTXykgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gbmV4dCBiYXNlIGNoYXJhY3RlciBvciBjYz09MjMwIGluIGJldHdlZW4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gdWNoYXJpdGVyLm5leHRDb2RlUG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gbm8gZG90IGFib3ZlIGZvbGxvd2luZworICAgIH0KKyAgICAKKyAgICAvKiogIAorICAgICogQ2hlY2tzIGlmIHRoZSBjYXNlIGlnbm9yYWJsZQorICAgICogQHBhcmFtIGNoIGNvZGVwb2ludAorICAgICogQHBhcmFtIGNhdCBjYXRlZ29yeSBvZiB0aGUgYXJndW1lbnQgY29kZXBvaW50CisgICAgKiBAcmV0dXJuIHRydWUgaWYgY2ggaXMgY2FzZSBpZ25vcmFibGUuCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQ2FzZUlnbm9yYWJsZShpbnQgY2gsIGludCBjYXQpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTk9OX1NQQUNJTkdfTUFSSyAKKyAgICAgICAgICAgICAgIHx8IGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuRU5DTE9TSU5HX01BUksgCisgICAgICAgICAgICAgICB8fCBjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkZPUk1BVAorICAgICAgICAgICAgICAgfHwgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5NT0RJRklFUl9MRVRURVIKKyAgICAgICAgICAgICAgIHx8IGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTU9ESUZJRVJfU1lNQk9MCisgICAgICAgICAgICAgICB8fCBjaCA9PSAweDI3IHx8IGNoID09IDB4YWQgfHwgY2ggPT0gMHgyMDE5OworICAgIH0KKworICAgIC8qKiAKKyAgICAgKiBJcyB0aGlzIGEgImNhc2VkIiBjaGFyYWN0ZXI/IAorICAgICAqIEBwYXJhbSBjaCBjb2RlcG9pbnQKKyAgICAgKiBAcGFyYW0gY2F0IGNhdGVnb3J5IG9mIHRoZSBhcmd1bWVudAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBjaCBpcyBhIGNhc2VkIGNoYXJhY3RlcgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nhc2VkKGludCBjaCwgaW50IGNhdCkgCisgICAgeworICAgICAgICAvLyBMdCArIFVwcGVyY2FzZSArIExvd2VyY2FzZSA9IEx0ICsgTHUgKyBMbCAKKyAgICAgICAgLy8gKyBPdGhlcl9VcHBlcmNhc2UrT3RoZXJfTG93ZXJjYXNlCisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVElUTEVDQVNFX0xFVFRFUiAKKyAgICAgICAgICAgICAgIHx8IGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVVBQRVJDQVNFX0xFVFRFUgorICAgICAgICAgICAgICAgfHwgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MT1dFUkNBU0VfTEVUVEVSKTsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSAKKyAgICAgICAgaW50IHByb3AgPSBnZXRBZGRpdGlvbmFsKGNoLCAxKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVBZGRpdGlvbmFsVHlwZShwcm9wLCBPVEhFUl9VUFBFUkNBU0VfUFJPUEVSVFlfKSAKKyAgICAgICAgICAgICAgIHx8IGNvbXBhcmVBZGRpdGlvbmFsVHlwZShwcm9wLCBPVEhFUl9MT1dFUkNBU0VfUFJPUEVSVFlfKTsKKyAgICB9CisgICAgCisgICAgLyoqIAorICAgICAqIElzIFNvZnRfRG90dGVkPyAKKyAgICAgKiBAcGFyYW0gY2ggY29kZXBvaW50CisgICAgICogQHJldHVybiB0cnVlIGlmIGNoIGlzIHNvZnQgZG90dGVkCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGlzU29mdERvdHRlZChpbnQgY2gpIHsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVBZGRpdGlvbmFsVHlwZShnZXRBZGRpdGlvbmFsKGNoLCAxKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09GVF9ET1RURURfUFJPUEVSVFlfKTsKKyAgICB9CisgICAgCisgICAgLyogSXMgZm9sbG93ZWQgYnkge2Nhc2UtaWdub3JhYmxlfSogY2FzZWQgID8gKi8KKyAgICAvKioKKyAgICAqIEdldHRpbmcgdGhlIGNvcnJlY3QgYWRkcmVzcyBmb3IgZGF0YSBpbiB0aGUgZXhjZXB0aW9uIHZhbHVlCisgICAgKiBAcGFyYW0gZXZhbHVlIGV4Y2VwdGlvbiB2YWx1ZQorICAgICogQHBhcmFtIGluZGljYXRvciB0eXBlIG9mIGRhdGEgdG8gcmV0cmlldmUKKyAgICAqIEBwYXJhbSBhZGRyZXNzIGN1cnJlbnQgYWRkcmVzcyB0byBtb3ZlIGZyb20KKyAgICAqIEByZXR1cm4gdGhlIGNvcnJlY3QgYWRkcmVzcworICAgICovCisgICAgcHJpdmF0ZSBpbnQgYWRkRXhjZXB0aW9uT2Zmc2V0KGludCBldmFsdWUsIGludCBpbmRpY2F0b3IsIGludCBhZGRyZXNzKSAKKyAgICB7IAorICAgICAgICBpbnQgcmVzdWx0ID0gYWRkcmVzczsKKyAgICAgICAgaWYgKGluZGljYXRvciA+PSBFWENfR1JPVVBfKSB7CisgICAgICAgIHJlc3VsdCArPSBGTEFHU19PRkZTRVRfW2V2YWx1ZSAmIEVYQ19HUk9VUF9NQVNLX107IAorICAgICAgICBldmFsdWUgPj49IEVYQ19HUk9VUF87IAorICAgICAgICBpbmRpY2F0b3IgLT0gRVhDX0dST1VQXzsgCisgICAgICAgIH0KKyAgICAgICAgaW50IG1hc2sgPSAoMSA8PCBpbmRpY2F0b3IpIC0gMTsKKyAgICAgICAgcmVzdWx0ICs9IEZMQUdTX09GRlNFVF9bZXZhbHVlICYgbWFza107IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb21wYXJlIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBzZWUgaWYgaXQgaGFzIGFyZ3VtZW50IHR5cGUgCisgICAgICogQHBhcmFtIHByb3BlcnR5IDMyIGJpdCBwcm9wZXJ0aWVzCisgICAgICogQHBhcmFtIHR5cGUgY2hhcmFjdGVyIHR5cGUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgcHJvcGVydHkgaGFzIHR5cGUKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZUFkZGl0aW9uYWxUeXBlKGludCBwcm9wZXJ0eSwgaW50IHR5cGUpIAorICAgIHsKKyAgICAJcmV0dXJuIChwcm9wZXJ0eSAmICgxIDw8IHR5cGUpKSAhPSAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJQcm9wZXJ0eVJlYWRlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJhY3RlclByb3BlcnR5UmVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwODQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJQcm9wZXJ0eVJlYWRlci5qYXZhCkBAIC0wLDAgKzEsMTczIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJhY3RlclByb3BlcnR5UmVhZGVyLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMC8wOSAyMzo1MzoyNCAkIAorKiAkUmV2aXNpb246IDEuOCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVmVyc2lvbkluZm87CisKKy8qKgorKiA8cD5JbnRlcm5hbCByZWFkZXIgY2xhc3MgZm9yIElDVSBkYXRhIGZpbGUgdXByb3BzLmljdSBjb250YWluaW5nIAorKiBVbmljb2RlIGNvZGVwb2ludCBkYXRhLjwvcD4gCisqIDxwPlRoaXMgY2xhc3Mgc2ltcGx5IHJlYWRzIHVwcm9wcy5pY3UsIGF1dGhlbnRpY2F0ZXMgdGhhdCBpdCBpcyBhIHZhbGlkCisqIElDVSBkYXRhIGZpbGUgYW5kIHNwbGl0IGl0cyBjb250ZW50cyB1cCBpbnRvIGJsb2NrcyBvZiBkYXRhIGZvciB1c2UgaW4KKyogPGEgaHJlZj1VQ2hhcmFjdGVyUHJvcGVydHkuaHRtbD5jb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTwvYT4uCisqIDwvcD4gCisqIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtYXQgb2YgdXByb3BzLmljdSByZWZlciB0bworKiA8YSBocmVmPW9zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2ljdTRqaHRtbC9jb20vaWJtL2ljdS9sYW5nL3JlYWRtZS5odG1sPgorKiBSZWFkTWU8L2E+LjxccD4KKyogPHA+dXByb3BzLmljdSB3aGljaCBpcyBpbiBiaWctZW5kaWFuIGZvcm1hdCBpcyBqYXJlZCB0b2dldGhlciB3aXRoIHRoaXMgCisqIHBhY2thZ2UuPC9wPgorKiBAYXV0aG9yIFN5biBXZWUgUXVlaworKiBAc2luY2UgcmVsZWFzZSAyLjEsIEZlYnJ1YXJ5IDFzdCAyMDAyCisqIEBkcmFmdCAyLjEKKyovCisKK2ZpbmFsIGNsYXNzIFVDaGFyYWN0ZXJQcm9wZXJ0eVJlYWRlciBpbXBsZW1lbnRzIElDVUJpbmFyeS5BdXRoZW50aWNhdGUKK3sKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHVibGljIGJvb2xlYW4gaXNEYXRhVmVyc2lvbkFjY2VwdGFibGUoYnl0ZSB2ZXJzaW9uW10pCisgICAgeworICAgICAgICByZXR1cm4gdmVyc2lvblswXSA9PSBEQVRBX0ZPUk1BVF9WRVJTSU9OX1swXSAKKyAgICAgICAgICAgICAgICYmIHZlcnNpb25bMl0gPT0gREFUQV9GT1JNQVRfVkVSU0lPTl9bMl0gCisgICAgICAgICAgICAgICAmJiB2ZXJzaW9uWzNdID09IERBVEFfRk9STUFUX1ZFUlNJT05fWzNdOworICAgIH0KKyAgICAKKyAgICAvLyBwcm90ZWN0ZWQgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiA8cD5Qcm90ZWN0ZWQgY29uc3RydWN0b3IuPC9wPgorICAgICogQHBhcmFtIGlucHV0U3RyZWFtIElDVSB1cHJvcC5kYXQgZmlsZSBpbnB1dCBzdHJlYW0KKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3cgaWYgZGF0YSBmaWxlIGZhaWxzIGF1dGhlbnRpY2F0aW9uIAorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIFVDaGFyYWN0ZXJQcm9wZXJ0eVJlYWRlcihJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgbV91bmljb2RlVmVyc2lvbl8gPSBJQ1VCaW5hcnkucmVhZEhlYWRlcihpbnB1dFN0cmVhbSwgREFUQV9GT1JNQVRfSURfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKTsKKyAgICAgICAgbV9kYXRhSW5wdXRTdHJlYW1fID0gbmV3IERhdGFJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7CisgICAgfQorICAgIAorICAgIC8vIHByb3RlY3RlZCBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAorICAgIC8qKgorICAgICogPHA+UmVhZHMgdXByb3BzLmljdSwgcGFyc2UgaXQgaW50byBibG9ja3Mgb2YgZGF0YSB0byBiZSBzdG9yZWQgaW4KKyAgICAqIFVDaGFyYWN0ZXJQcm9wZXJ0eS48L1AKKyAgICAqIEBwYXJhbSB1Y2hhcnBwdHkgVUNoYXJhY3RlclByb3BlcnR5IGluc3RhbmNlCisgICAgKiBAZXhjZXB0aW9uIHRocm93biB3aGVuIGRhdGEgcmVhZGluZyBmYWlscworICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgcmVhZChVQ2hhcmFjdGVyUHJvcGVydHkgdWNoYXJwcHR5KSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIC8vIHJlYWQgdGhlIGluZGV4ZXMKKyAgICAgICAgaW50IGNvdW50ID0gSU5ERVhfU0laRV87CisgICAgICAgIG1fcHJvcGVydHlPZmZzZXRfICAgICAgICAgID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgY291bnQgLS07CisgICAgICAgIG1fZXhjZXB0aW9uT2Zmc2V0XyAgICAgICAgID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgY291bnQgLS07CisgICAgICAgIG1fY2FzZU9mZnNldF8gICAgICAgICAgICAgID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgY291bnQgLS07CisgICAgICAgIG1fYWRkaXRpb25hbE9mZnNldF8gICAgICAgID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgY291bnQgLS07CisgICAgCW1fYWRkaXRpb25hbFZlY3RvcnNPZmZzZXRfID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAJY291bnQgLS07CisgICAgCW1fYWRkaXRpb25hbENvbHVtbnNDb3VudF8gID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAJY291bnQgLS07CisgICAgICAgIG1fcmVzZXJ2ZWRPZmZzZXRfICAgICAgICAgID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgY291bnQgLS07CisgICAgICAgIG1fZGF0YUlucHV0U3RyZWFtXy5za2lwQnl0ZXMoMyA8PCAyKTsKKyAgICAgICAgY291bnQgLT0gMzsKKyAgICAgICAgdWNoYXJwcHR5Lm1fbWF4QmxvY2tTY3JpcHRWYWx1ZV8gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICBjb3VudCAtLTsgLy8gMTAKKyAgICAgICAgbV9kYXRhSW5wdXRTdHJlYW1fLnNraXBCeXRlcyhjb3VudCA8PCAyKTsKKyAgICAgICAgCisgICAgICAgIC8vIHJlYWQgdGhlIHRyaWUgaW5kZXggYmxvY2sKKyAgICAgICAgLy8gbV9wcm9wc19pbmRleF8gaW4gdGVybXMgb2YgaW50cworICAgICAgICB1Y2hhcnBwdHkubV90cmllXyA9IG5ldyBDaGFyVHJpZShtX2RhdGFJbnB1dFN0cmVhbV8sIHVjaGFycHB0eSk7CisgICAgICAgIAorICAgICAgICAvLyByZWFkcyB0aGUgMzIgYml0IHByb3BlcnRpZXMgYmxvY2sKKyAgICAgICAgaW50IHNpemUgPSBtX2V4Y2VwdGlvbk9mZnNldF8gLSBtX3Byb3BlcnR5T2Zmc2V0XzsKKyAgICAgICAgdWNoYXJwcHR5Lm1fcHJvcGVydHlfID0gbmV3IGludFtzaXplXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICB1Y2hhcnBwdHkubV9wcm9wZXJ0eV9baV0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyByZWFkcyB0aGUgMzIgYml0IGV4Y2VwdGlvbnMgYmxvY2sKKyAgICAgICAgc2l6ZSA9IG1fY2FzZU9mZnNldF8gLSBtX2V4Y2VwdGlvbk9mZnNldF87CisgICAgICAgIHVjaGFycHB0eS5tX2V4Y2VwdGlvbl8gPSBuZXcgaW50W3NpemVdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgICAgIHVjaGFycHB0eS5tX2V4Y2VwdGlvbl9baV0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyByZWFkcyB0aGUgMzIgYml0IGNhc2UgYmxvY2sKKyAgICAgICAgc2l6ZSA9IChtX2FkZGl0aW9uYWxPZmZzZXRfIC0gbV9jYXNlT2Zmc2V0XykgPDwgMTsKKyAgICAgICAgdWNoYXJwcHR5Lm1fY2FzZV8gPSBuZXcgY2hhcltzaXplXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICB1Y2hhcnBwdHkubV9jYXNlX1tpXSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkQ2hhcigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyByZWFkcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSBibG9jaworICAgICAgICB1Y2hhcnBwdHkubV9hZGRpdGlvbmFsVHJpZV8gPSBuZXcgQ2hhclRyaWUobV9kYXRhSW5wdXRTdHJlYW1fLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjaGFycHB0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBhZGRpdGlvbmFsIHByb3BlcnRpZXMKKyAgICAgICAgc2l6ZSA9IG1fcmVzZXJ2ZWRPZmZzZXRfIC0gbV9hZGRpdGlvbmFsVmVjdG9yc09mZnNldF87CisgICAgICAgIHVjaGFycHB0eS5tX2FkZGl0aW9uYWxWZWN0b3JzXyA9IG5ldyBpbnRbc2l6ZV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICAgICAgdWNoYXJwcHR5Lm1fYWRkaXRpb25hbFZlY3RvcnNfW2ldID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9kYXRhSW5wdXRTdHJlYW1fLmNsb3NlKCk7CisgICAgICAgIHVjaGFycHB0eS5tX2FkZGl0aW9uYWxDb2x1bW5zQ291bnRfID0gbV9hZGRpdGlvbmFsQ29sdW1uc0NvdW50XzsKKyAgICAgICAgdWNoYXJwcHR5Lm1fdW5pY29kZVZlcnNpb25fID0gVmVyc2lvbkluZm8uZ2V0SW5zdGFuY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgKGludCltX3VuaWNvZGVWZXJzaW9uX1swXSwgKGludCltX3VuaWNvZGVWZXJzaW9uX1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW1fdW5pY29kZVZlcnNpb25fWzJdLCAoaW50KW1fdW5pY29kZVZlcnNpb25fWzNdKTsKKyAgICB9CisgICAgCisgICAgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgKiBJbmRleCBzaXplCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5ERVhfU0laRV8gPSAxNjsKKyAgICAKKyAgICAvKioKKyAgICAqIElDVSBkYXRhIGZpbGUgaW5wdXQgc3RyZWFtCisgICAgKi8KKyAgICBwcml2YXRlIERhdGFJbnB1dFN0cmVhbSBtX2RhdGFJbnB1dFN0cmVhbV87CisgICAgICAKKyAgICAvKioKKyAgICAqIE9mZnNldCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXhlcy4KKyAgICAqLworICAgIHByaXZhdGUgaW50IG1fcHJvcGVydHlPZmZzZXRfOworICAgIHByaXZhdGUgaW50IG1fZXhjZXB0aW9uT2Zmc2V0XzsKKyAgICBwcml2YXRlIGludCBtX2Nhc2VPZmZzZXRfOworICAgIHByaXZhdGUgaW50IG1fYWRkaXRpb25hbE9mZnNldF87CisgICAgcHJpdmF0ZSBpbnQgbV9hZGRpdGlvbmFsVmVjdG9yc09mZnNldF87CisgICAgcHJpdmF0ZSBpbnQgbV9hZGRpdGlvbmFsQ29sdW1uc0NvdW50XzsKKyAgICBwcml2YXRlIGludCBtX3Jlc2VydmVkT2Zmc2V0XzsKKyAgICBwcml2YXRlIGJ5dGUgbV91bmljb2RlVmVyc2lvbl9bXTsgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAqIEZpbGUgZm9ybWF0IHZlcnNpb24gdGhhdCB0aGlzIGNsYXNzIHVuZGVyc3RhbmRzLgorICAgICogTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBpZiBhIG9sZGVyIHZlcnNpb24gaXMgdXNlZAorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBEQVRBX0ZPUk1BVF9JRF9bXSA9IHsoYnl0ZSkweDU1LCAoYnl0ZSkweDUwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSkweDcyLCAoYnl0ZSkweDZGfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIERBVEFfRk9STUFUX1ZFUlNJT05fW10gPSB7KGJ5dGUpMHgzLCAoYnl0ZSkweDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpVHJpZS5JTkRFWF9TVEFHRV8xX1NISUZUXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSlUcmllLklOREVYX1NUQUdFXzJfU0hJRlRffTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VDaGFyYWN0ZXJVdGlsaXR5LmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhcmFjdGVyVXRpbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OGY0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9VQ2hhcmFjdGVyVXRpbGl0eS5qYXZhCkBAIC0wLDAgKzEsMjA5IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJhY3RlclV0aWxpdHkuamF2YSx2ICQgCisqICREYXRlOiAyMDAyLzA5LzE5IDIxOjE5OjA0ICQgCisqICRSZXZpc2lvbjogMS4xICQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CisKKy8qKgorKiBJbnRlcm5hbCBjaGFyYWN0ZXIgdXRpbGl0eSBjbGFzcyBmb3Igc2ltcGxlIGRhdGEgdHlwZSBjb252ZXJzaW9uIGFuZCBTdHJpbmcgCisqIHBhcnNpbmcgZnVuY3Rpb25zLiBEb2VzIG5vdCBoYXZlIGFuIGFuYWxvZyBpbiB0aGUgSkRLLgorKiBAYXV0aG9yIFN5biBXZWUgUXVlaworKiBAc2luY2Ugc2VwMjkwMAorKi8KKworcHVibGljIGZpbmFsIGNsYXNzIFVDaGFyYWN0ZXJVdGlsaXR5Cit7CisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIERldGVybWluZXMgaWYgY29kZXBvaW50IGlzIGEgbm9uIGNoYXJhY3RlcgorICAgICogQHBhcmFtIGNoIGNvZGVwb2ludAorICAgICogQHJldHVybiB0cnVlIGlmIGNvZGVwb2ludCBpcyBhIG5vbiBjaGFyYWN0ZXIgZmFsc2Ugb3RoZXJ3aXNlCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb25DaGFyYWN0ZXIoaW50IGNoKSAKKyAgICB7CisgICAgICAgIGlmICgoY2ggJiBOT05fQ0hBUkFDVEVSX1NVRkZJWF9NSU5fM18wXykgPT0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PTl9DSEFSQUNURVJfU1VGRklYX01JTl8zXzBfKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoID49IE5PTl9DSEFSQUNURVJfTUlOXzNfMV8gJiYgY2ggPD0gIE5PTl9DSEFSQUNURVJfTUFYXzNfMV87CisgICAgfQorICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgKiBqb2luaW5nIDIgY2hhcnMgdG8gZm9ybSBhbiBpbnQKKyAgICAqIEBwYXJhbSBtc2MgbW9zdCBzaWduaWZpY2FudCBjaGFyCisgICAgKiBAcGFyYW0gbHNjIGxlYXN0IHNpZ25pZmljYW50IGNoYXIKKyAgICAqIEByZXR1cm4gaW50IGZvcm0KKyAgICAqLworICAgIHN0YXRpYyBpbnQgdG9JbnQoY2hhciBtc2MsIGNoYXIgbHNjKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgobXNjIDw8IDE2KSB8IGxzYyk7CisgICAgfQorICAgICAgIAorICAgIC8qKgorICAgICogY29udmVydGluZyAyIGJ5dGVzIGludG8gYSBjaGFyCisgICAgKiBAcGFyYW0gbXNiIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUKKyAgICAqIEBwYXJhbSBsc2IgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUKKyAgICAqIEByZXR1cm4gY2hhciBmb3JtCisgICAgKi8KKyAgICBzdGF0aWMgY2hhciB0b0NoYXIoYnl0ZSBtc2IsIGJ5dGUgbHNiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChjaGFyKSgobXNiIDw8IDgpIHwgKGxzYiAmIDB4RkYpKTsKKyAgICB9CisgICAgICAgCisgICAgLyoqCisgICAgKiBSZXRyaWV2ZXMgYSBudWxsIHRlcm1pbmF0ZWQgc3Vic3RyaW5nIGZyb20gYW4gYXJyYXkgb2YgYnl0ZXMuCisgICAgKiBTdWJzdHJpbmcgaXMgYSBzZXQgb2Ygbm9uLXplcm8gYnl0ZXMgc3RhcnRpbmcgZnJvbSBhcmd1bWVudCBzdGFydCB0byB0aGUgCisgICAgKiBuZXh0IHplcm8gYnl0ZS4gSWYgdGhlIGZpcnN0IGJ5dGUgaXMgYSB6ZXJvLCB0aGUgbmV4dCBieXRlIHdpbGwgYmUgdGFrZW4gYXMKKyAgICAqIHRoZSBmaXJzdCBieXRlLgorICAgICogQHBhcmFtIHN0ciBzdHJpbmdidWZmZXIgdG8gc3RvcmUgZGF0YSBpbiwgZGF0YSB3aWxsIGJlIHN0b3JlIHdpdGggZWFjaAorICAgICogICAgICAgICAgICBieXRlIGFzIGEgY2hhcgorICAgICogQHBhcmFtIGFycmF5IGJ5dGUgYXJyYXkKKyAgICAqIEBwYXJhbSBpbmRleCB0byBzdGFydCBzdWJzdHJpbmcgaW4gYnl0ZSBjb3VudAorICAgICogQHJldHVybiB0aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBzdWJzdHJpbmcgd2l0aGluIHRoZSBjaGFyYWN0ZXIgYXJyYXkKKyAgICAqLworICAgIHN0YXRpYyBpbnQgZ2V0TnVsbFRlcm1CeXRlU3ViU3RyaW5nKFN0cmluZ0J1ZmZlciBzdHIsIGJ5dGVbXSBhcnJheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCkKKyAgICB7CisgICAgICAgIGJ5dGUgYiA9IDE7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoYiAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBiID0gYXJyYXlbaW5kZXhdOworICAgICAgICAgICAgaWYgKGIgIT0gMCkgeworICAgICAgICAgICAgICAgIHN0ci5hcHBlbmQoKGNoYXIpKGIgJiAweDAwRkYpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ICsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgICAgCisgICAgLyoqCisgICAgKiBDb21wYXJlcyBhIG51bGwgdGVybWluYXRlZCBzdWJzdHJpbmcgZnJvbSBhbiBhcnJheSBvZiBieXRlcy4KKyAgICAqIFN1YnN0cmluZyBpcyBhIHNldCBvZiBub24temVybyBieXRlcyBzdGFydGluZyBmcm9tIGFyZ3VtZW50IHN0YXJ0IHRvIHRoZSAKKyAgICAqIG5leHQgemVybyBieXRlLiBpZiB0aGUgZmlyc3QgYnl0ZSBpcyBhIHplcm8sIHRoZSBuZXh0IGJ5dGUgd2lsbCBiZSB0YWtlbiBhcworICAgICogdGhlIGZpcnN0IGJ5dGUuCisgICAgKiBAcGFyYW0gc3RyIHN0cmluZyB0byBjb21wYXJlCisgICAgKiBAcGFyYW0gYXJyYXkgYnl0ZSBhcnJheQorICAgICogQHBhcmFtIHN0cmluZGV4IGluZGV4IHdpdGhpbiBzdHIgdG8gc3RhcnQgY29tcGFyaW5nCisgICAgKiBAcGFyYW0gYWluZGV4IGFycmF5IGluZGV4IHRvIHN0YXJ0IGluIGJ5dGUgY291bnQKKyAgICAqIEByZXR1cm4gdGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgc3Vic3RyaW5nIHdpdGhpbiBzdHIgaWYgbWF0Y2hlcyBvdGhlcndpc2UgCisgICAgKiAgICAgICAgIGEgLTEKKyAgICAqLworICAgIHN0YXRpYyBpbnQgY29tcGFyZU51bGxUZXJtQnl0ZVN1YlN0cmluZyhTdHJpbmcgc3RyLCBieXRlW10gYXJyYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmluZGV4LCBpbnQgYWluZGV4KQorICAgIHsKKyAgICAgICAgYnl0ZSBiID0gMTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChiICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBhcnJheVthaW5kZXhdOyAgCisgICAgICAgICAgICBhaW5kZXggKys7CisgICAgICAgICAgICBpZiAoYiA9PSAwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGFuZCB5ZXQgdGhlIGFycmF5IGhhcyBub3QgCisgICAgICAgICAgICAvLyByZWFjaGVkIHRoZSBlbmQgb2YgdGhlaXIgc3Vic3RyaW5nIHlldCwgYWJvcnQKKyAgICAgICAgICAgIGlmIChzdHJpbmRleCA9PSBsZW5ndGggCisgICAgICAgICAgICAgICAgfHwgKHN0ci5jaGFyQXQoc3RyaW5kZXgpICE9IChjaGFyKShiICYgMHhGRikpKSB7CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZGV4ICsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJpbmRleDsKKyAgICB9CisgICAgICAgCisgICAgLyoqCisgICAgKiBTa2lwIG51bGwgdGVybWluYXRlZCBzdWJzdHJpbmdzIGZyb20gYW4gYXJyYXkgb2YgYnl0ZXMuCisgICAgKiBTdWJzdHJpbmcgaXMgYSBzZXQgb2Ygbm9uLXplcm8gYnl0ZXMgc3RhcnRpbmcgZnJvbSBhcmd1bWVudCBzdGFydCB0byB0aGUgCisgICAgKiBuZXh0IHplcm8gYnl0ZS4gSWYgdGhlIGZpcnN0IGJ5dGUgaXMgYSB6ZXJvLCB0aGUgbmV4dCBieXRlIHdpbGwgYmUgdGFrZW4gYXMKKyAgICAqIHRoZSBmaXJzdCBieXRlLgorICAgICogQHBhcmFtIGFycmF5IGJ5dGUgYXJyYXkKKyAgICAqIEBwYXJhbSBpbmRleCB0byBzdGFydCBzdWJzdHJpbmdzIGluIGJ5dGUgY291bnQKKyAgICAqIEBwYXJhbSBza2lwY291bnQgbnVtYmVyIG9mIG51bGwgdGVybWluYXRlZCBzdWJzdHJpbmdzIHRvIHNraXAKKyAgICAqIEByZXR1cm4gdGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgc3Vic3RyaW5ncyB3aXRoaW4gdGhlIGNoYXJhY3RlciBhcnJheQorICAgICovCisgICAgc3RhdGljIGludCBza2lwTnVsbFRlcm1CeXRlU3ViU3RyaW5nKGJ5dGVbXSBhcnJheSwgaW50IGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBza2lwY291bnQpCisgICAgeworICAgICAgICBieXRlIGI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2tpcGNvdW50OyBpICsrKQorICAgICAgICB7CisgICAgICAgICAgICBiID0gMTsKKyAgICAgICAgICAgIHdoaWxlIChiICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYiA9IGFycmF5W2luZGV4XTsKKyAgICAgICAgICAgICAgICBpbmRleCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgICAgIAorICAgIC8qKgorICAgICAqIHNraXAgc3Vic3RyaW5ncyBmcm9tIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMsIHdoZXJlIGVhY2ggY2hhcmFjdGVyIGlzIGEgc2V0IAorICAgICAqIG9mIDIgYnl0ZXMuIHN1YnN0cmluZyBpcyBhIHNldCBvZiBub24temVybyBieXRlcyBzdGFydGluZyBmcm9tIGFyZ3VtZW50IAorICAgICAqIHN0YXJ0IHRvIHRoZSBieXRlIG9mIHRoZSBhcmd1bWVudCB2YWx1ZS4gc2tpcHMgdXAgdG8gYSBtYXggbnVtYmVyIG9mIAorICAgICAqIGNoYXJhY3RlcnMKKyAgICAgKiBAcGFyYW0gYXJyYXkgYnl0ZSBhcnJheSB0byBwYXJzZQorICAgICAqIEBwYXJhbSBpbmRleCB0byBzdGFydCBzdWJzdHJpbmdzIGluIGJ5dGUgY291bnQKKyAgICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBtYXggbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAKKyAgICAgKiBAcGFyYW0gc2tpcGVuZCB2YWx1ZSBvZiBieXRlIHRvIHNraXAgdG8KKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2tpcHBlZAorICAgICAqLworICAgIHN0YXRpYyBpbnQgc2tpcEJ5dGVTdWJTdHJpbmcoYnl0ZVtdIGFycmF5LCBpbnQgaW5kZXgsIGludCBsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgc2tpcGVuZCkKKyAgICB7CisgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgIGJ5dGUgYjsKKyAgICAgICAgCisgICAgICAgIGZvciAocmVzdWx0ID0gMDsgcmVzdWx0IDwgbGVuZ3RoOyByZXN1bHQgKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBhcnJheVtpbmRleCArIHJlc3VsdF07CisgICAgICAgICAgICBpZiAoYiA9PSBza2lwZW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCArKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICogTWluaW11bSBzdWZmaXggdmFsdWUgdGhhdCBpbmRpY2F0ZXMgaWYgYSBjaGFyYWN0ZXIgaXMgbm9uIGNoYXJhY3Rlci4KKyAgICAqIFVuaWNvZGUgMy4wIG5vbiBjaGFyYWN0ZXJzCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9OX0NIQVJBQ1RFUl9TVUZGSVhfTUlOXzNfMF8gPSAweEZGRkU7CisgICAgLyoqCisgICAgKiBOZXcgbWluaW11bSBub24gY2hhcmFjdGVyIGluIFVuaWNvZGUgMy4xCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9OX0NIQVJBQ1RFUl9NSU5fM18xXyA9IDB4RkREMDsKKyAgICAvKioKKyAgICAqIE5ldyBub24gY2hhcmFjdGVyIHJhbmdlIGluIFVuaWNvZGUgMy4xCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9OX0NIQVJBQ1RFUl9NQVhfM18xXyA9IDB4RkRFRjsKKyAgICAKKyAgICAvLyBwcml2YXRlIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAKKyAgICAvKioKKyAgICAqIHByaXZhdGUgY29uc3RydWN0b3IgdG8gYXZvaWQgaW5pdGlhbGlzYXRpb24KKyAgICAqLworICAgIHByaXZhdGUgVUNoYXJhY3RlclV0aWxpdHkoKQorICAgIHsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VQcm9wZXJ0eUFsaWFzZXMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VQcm9wZXJ0eUFsaWFzZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDUxZGFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVVByb3BlcnR5QWxpYXNlcy5qYXZhCkBAIC0wLDAgKzEsNjUwIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKGMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEF1dGhvcjogQWxhbiBMaXUKKyogQ3JlYXRlZDogTm92ZW1iZXIgNSAyMDAyCisqIFNpbmNlOiBJQ1UgMi40CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKKworLyoqCisgKiBXcmFwcGVyIGZvciB0aGUgcG5hbWVzLmljdSBiaW5hcnkgZGF0YSBmaWxlLiAgVGhpcyBkYXRhIGZpbGUgaXMKKyAqIGltcG9ydGVkIGZyb20gaWN1NGMuICBJdCBjb250YWlucyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgdmFsdWUKKyAqIGFsaWFzZXMgZnJvbSB0aGUgVUNEIGZpbGVzIFByb3BlcnR5QWxpYXNlcy50eHQgYW5kCisgKiBQcm9wZXJ0eVZhbHVlQWxpYXNlcy50eHQuICBUaGUgZmlsZSBpcyBidWlsdCBieSB0aGUgaWN1NGMgdG9vbAorICogZ2VucG5hbWUuICBJdCBtdXN0IGJlIGJ1aWx0IG9uIGFuIEFTQ0lJIGJpZy1lbmRpYW4gcGxhdGZvcm0gdG8gYmUKKyAqIHVzYWJsZSBpbiBpY3U0ai4KKyAqCisgKiBUaGlzIGNsYXNzIHBlcmZvcm1zIHR3byBmdW5jdGlvbnMuCisgKgorICogKDEpIEl0IGNhbiBpbXBvcnQgdGhlIGZsYXQgYmluYXJ5IGRhdGEgaW50byBhIHRyZWUgb2YgdXNhYmxlCisgKiBvYmplY3RzLgorICoKKyAqICgyKSBJdCBwcm92aWRlcyBhbiBBUEkgdG8gYWNjZXNzIHRoZSB0cmVlIG9mIG9iamVjdHMuCisgKgorICogTmVlZGxlc3MgdG8gc2F5LCB0aGlzIGNsYXNzIGlzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgYmluYXJ5IGZvcm1hdAorICogb2YgaWN1NGMncyBwbmFtZXMuaWN1IGZpbGUuCisgKgorICogRWFjaCB0aW1lIGEgVVByb3BlcnR5QWxpYXNlcyBpcyBjb25zdHJ1Y3RlZCwgdGhlIHBuYW1lcy5pY3UgZmlsZSBpcworICogcmVhZCwgcGFyc2VkLCBhbmQgYSBkYXRhIHRyZWUgYXNzZW1ibGVkLiAgQ2xpZW50cyBzaG91bGQgY3JlYXRlIG9uZQorICogc2luZ2xldG9uIGluc3RhbmNlIGFuZCBjYWNoZSBpdC4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAc2luY2UgSUNVIDIuNAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgVVByb3BlcnR5QWxpYXNlcyBpbXBsZW1lbnRzIElDVUJpbmFyeS5BdXRoZW50aWNhdGUgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUnVudGltZSBkYXRhLiAgVGhpcyBpcyBhbiB1bmZsYXR0ZW5lZCByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgICAvLyBkYXRhIGluIHBuYW1lcy5pY3UuCisKKyAgICAvKioKKyAgICAgKiBNYXAgZnJvbSBwcm9wZXJ0eSBlbnVtIHZhbHVlIHRvIG5hbWVHcm91cFBvb2xbXSBpbmRleAorICAgICAqLworICAgIHByaXZhdGUgTm9uQ29udGlndW91c0VudW1Ub1Nob3J0IGVudW1Ub05hbWU7CisKKyAgICAvKioKKyAgICAgKiBNYXAgZnJvbSBwcm9wZXJ0eSBhbGlhcyB0byBwcm9wZXJ0eSBlbnVtIHZhbHVlCisgICAgICovCisgICAgcHJpdmF0ZSBOYW1lVG9FbnVtIG5hbWVUb0VudW07CisKKyAgICAvKioKKyAgICAgKiBNYXAgZnJvbSBwcm9wZXJ0eSBlbnVtIHZhbHVlIHRvIHZhbHVlTWFwQXJyYXlbXSBpbmRleAorICAgICAqLworICAgIHByaXZhdGUgTm9uQ29udGlndW91c0VudW1Ub1Nob3J0IGVudW1Ub1ZhbHVlOworCisgICAgLyoqCisgICAgICogRWFjaCBlbnRyeSByZXByZXNlbnRzIGEgYmluYXJ5IG9yIGVudW1lcmF0ZWQgcHJvcGVydHkKKyAgICAgKi8KKyAgICBwcml2YXRlIFZhbHVlTWFwIHZhbHVlTWFwQXJyYXlbXTsKKworICAgIC8qKgorICAgICAqIFBvb2wgb2YgY29uY2F0ZW5hdGVkIGludGVnZXIgcnVucy4gIEVhY2ggcnVuIGNvbnRhaW5zIG9uZQorICAgICAqIG9yIG1vcmUgZW50cmllcy4gIFRoZSBsYXN0IGVudHJ5IG9mIHRoZSBydW4gaXMgbmVnYXRpdmUuCisgICAgICogQSB6ZXJvIGVudHJ5IGluZGljYXRlcyAibi9hIiBpbiB0aGUgUHJvcGVydHkqQWxpYXNlcy50eHQuCisgICAgICogRWFjaCBlbnRyeSBpcyBhIHN0cmluZ1Bvb2xbXSBpbmRleC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHNob3J0IG5hbWVHcm91cFBvb2xbXTsKKworICAgIC8qKgorICAgICAqIFBvb2wgb2Ygc3RyaW5ncy4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBzdHJpbmdQb29sW107CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDb25zdGFudHMKKworICAgIC8qKgorICAgICAqIERlYnVnIGZsYWcgKG5vdCByZWFsbHkgY29uc3RhbnQpCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IElDVURlYnVnLmVuYWJsZWQoInBuYW1lcyIpOworCisgICAgLyoqCisgICAgICogRmlsZSBmb3JtYXQgdGhhdCB0aGlzIGNsYXNzIHVuZGVyc3RhbmRzLgorICAgICAqIFNlZSBpY3U0Yy9zcmMvY29tbW9uL3Byb3BuYW1lLmguCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBEQVRBX0ZPUk1BVF9JRFtdID0geydwJywgJ24nLCAnYScsICdtJ307CisgICAgCisgICAgLyoqCisgICAgICogRmlsZSB2ZXJzaW9uIHRoYXQgdGhpcyBjbGFzcyB1bmRlcnN0YW5kcy4KKyAgICAgKiBTZWUgaWN1NGMvc3JjL2NvbW1vbi9wcm9wbmFtZS5oLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgREFUQV9GT1JNQVRfVkVSU0lPTiA9IDE7CisgICAgCisgICAgLyoqCisgICAgICogTmFtZSBvZiB0aGUgZGF0YWZpbGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9GSUxFX05BTUUgPSAiZGF0YS9wbmFtZXMuaWN1IjsKKyAgICAKKyAgICAvKioKKyAgICAgKiBCdWZmZXIgc2l6ZSBvZiBkYXRhZmlsZS4gIFRoZSB3aG9sZSBmaWxlIGlzIDwgMTZrLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVRBX0JVRkZFUl9TSVpFID0gODE5MjsKKyAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDb25zdHJ1Y3RvcgorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIFVQcm9wZXJ0eUFsaWFzZXMgb2JqZWN0LiAgVGhlIGJpbmFyeSBmaWxlCisgICAgICogREFUQV9GSUxFX05BTUUgaXMgcmVhZCBmcm9tIHRoZSBqYXIvY2xhc3NwYXRoIGFuZCB1bmZsYXR0ZW5lZAorICAgICAqIGludG8gbWVtYmVyIHZhcmlhYmxlcyBvZiB0aGlzIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgVVByb3BlcnR5QWxpYXNlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgLy8gT3BlbiB0aGUgLmljdSBmaWxlIGZyb20gdGhlIGphci9jbGFzc3BhdGgKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oREFUQV9GSUxFX05BTUUpOworICAgICAgICBCdWZmZXJlZElucHV0U3RyZWFtIGIgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShpcywgREFUQV9CVUZGRVJfU0laRSk7CisgICAgICAgIC8vIFJlYWQgYW5kIGRpc2NhcmQgVW5pY29kZSB2ZXJzaW9uLi4uCisgICAgICAgIGJ5dGUgdW5pY29kZVZlcnNpb25bXSA9IElDVUJpbmFyeS5yZWFkSGVhZGVyKGIsIERBVEFfRk9STUFUX0lELCB0aGlzKTsKKyAgICAgICAgRGF0YUlucHV0U3RyZWFtIGQgPSBuZXcgRGF0YUlucHV0U3RyZWFtKGIpOworCisgICAgICAgIC8vIFJlY29yZCB0aGUgb3JpZ2luIHBvc2l0aW9uIG9mIHRoZSBmaWxlLiAgS2VlcCBlbm91Z2ggYXJvdW5kCisgICAgICAgIC8vIHRvIHNlZWsgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlci4KKyAgICAgICAgZC5tYXJrKDI1Nik7CisKKyAgICAgICAgc2hvcnQgZW51bVRvTmFtZV9vZmZzZXQgPSBkLnJlYWRTaG9ydCgpOworICAgICAgICBzaG9ydCBuYW1lVG9FbnVtX29mZnNldCA9IGQucmVhZFNob3J0KCk7CisgICAgICAgIHNob3J0IGVudW1Ub1ZhbHVlX29mZnNldCA9IGQucmVhZFNob3J0KCk7CisgICAgICAgIHNob3J0IHRvdGFsX3NpemUgPSBkLnJlYWRTaG9ydCgpOworICAgICAgICBzaG9ydCB2YWx1ZU1hcF9vZmZzZXQgPSBkLnJlYWRTaG9ydCgpOworICAgICAgICBzaG9ydCB2YWx1ZU1hcF9jb3VudCA9IGQucmVhZFNob3J0KCk7CisgICAgICAgIHNob3J0IG5hbWVHcm91cFBvb2xfb2Zmc2V0ID0gZC5yZWFkU2hvcnQoKTsKKyAgICAgICAgc2hvcnQgbmFtZUdyb3VwUG9vbF9jb3VudCA9IGQucmVhZFNob3J0KCk7CisgICAgICAgIHNob3J0IHN0cmluZ1Bvb2xfb2Zmc2V0ID0gZC5yZWFkU2hvcnQoKTsKKyAgICAgICAgc2hvcnQgc3RyaW5nUG9vbF9jb3VudCA9IGQucmVhZFNob3J0KCk7CisKKyAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCisgICAgICAgICAgICAgICAiZW51bVRvTmFtZV9vZmZzZXQ9IiArIGVudW1Ub05hbWVfb2Zmc2V0ICsgIlxuIiArCisgICAgICAgICAgICAgICAibmFtZVRvRW51bV9vZmZzZXQ9IiArIG5hbWVUb0VudW1fb2Zmc2V0ICsgIlxuIiArCisgICAgICAgICAgICAgICAiZW51bVRvVmFsdWVfb2Zmc2V0PSIgKyBlbnVtVG9WYWx1ZV9vZmZzZXQgKyAiXG4iICsKKyAgICAgICAgICAgICAgICJ0b3RhbF9zaXplPSIgKyB0b3RhbF9zaXplICsgIlxuIiArCisgICAgICAgICAgICAgICAidmFsdWVNYXBfb2Zmc2V0PSIgKyB2YWx1ZU1hcF9vZmZzZXQgKyAiXG4iICsKKyAgICAgICAgICAgICAgICJ2YWx1ZU1hcF9jb3VudD0iICsgdmFsdWVNYXBfY291bnQgKyAiXG4iICsKKyAgICAgICAgICAgICAgICJuYW1lR3JvdXBQb29sX29mZnNldD0iICsgbmFtZUdyb3VwUG9vbF9vZmZzZXQgKyAiXG4iICsKKyAgICAgICAgICAgICAgICJuYW1lR3JvdXBQb29sX2NvdW50PSIgKyBuYW1lR3JvdXBQb29sX2NvdW50ICsgIlxuIiArCisgICAgICAgICAgICAgICAic3RyaW5nUG9vbF9vZmZzZXQ9IiArIHN0cmluZ1Bvb2xfb2Zmc2V0ICsgIlxuIiArCisgICAgICAgICAgICAgICAic3RyaW5nUG9vbF9jb3VudD0iICsgc3RyaW5nUG9vbF9jb3VudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZWFkIGl0IGFsbCAobGVzcyB0aGFuIDMyaykuICBTZWVraW5nIGFyb3VuZCAodXNpbmcKKyAgICAgICAgLy8gbWFyay9yZXNldC9za2lwQnl0ZXMpIGRvZXNuJ3Qgd29yayBkaXJlY3RseSBvbiB0aGUgZmlsZSwKKyAgICAgICAgLy8gYnV0IGl0IHdvcmtzIGZpbmUgaWYgd2UgcmVhZCBldmVyeXRoaW5nIGludG8gYSBieXRlW10gYXJyYXkKKyAgICAgICAgLy8gZmlyc3QuCisgICAgICAgIGJ5dGUgcmF3W10gPSBuZXcgYnl0ZVt0b3RhbF9zaXplXTsKKyAgICAgICAgZC5yZXNldCgpOworICAgICAgICBkLnJlYWQocmF3KTsKKyAgICAgICAgZC5jbG9zZSgpOworCisgICAgICAgIEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBCdWlsZGVyKHJhdyk7CisKKyAgICAgICAgc3RyaW5nUG9vbCA9IGJ1aWxkZXIucmVhZFN0cmluZ1Bvb2woc3RyaW5nUG9vbF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1Bvb2xfY291bnQpOworCisgICAgICAgIG5hbWVHcm91cFBvb2wgPSBidWlsZGVyLnJlYWROYW1lR3JvdXBQb29sKG5hbWVHcm91cFBvb2xfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lR3JvdXBQb29sX2NvdW50KTsKKworICAgICAgICBidWlsZGVyLnNldHVwVmFsdWVNYXBfbWFwKHZhbHVlTWFwX29mZnNldCwgdmFsdWVNYXBfY291bnQpOworCisgICAgICAgIC8vIFNvbWUgb2YgdGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXMgaGF2ZSB0byBiZSBzZXQgdXAKKyAgICAgICAgLy8gaGVyZSwgX25vdF8gaW4gQnVpbGRlci4gIFRoYXQncyBiZWNhdXNlIHRoZXkgYXJlIGluc3RhbmNlcworICAgICAgICAvLyBvZiBub24tc3RhdGljIGlubmVyIGNsYXNzZXMsIGFuZCB0aGV5IGNvbnRhaW4gaW1wbGljaXQKKyAgICAgICAgLy8gcmVmZXJlbmNlcyB0byB0aGlzLgorCisgICAgICAgIGJ1aWxkZXIuc2VlayhlbnVtVG9OYW1lX29mZnNldCk7CisgICAgICAgIGVudW1Ub05hbWUgPSBuZXcgTm9uQ29udGlndW91c0VudW1Ub1Nob3J0KGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLm5hbWVHcm91cE9mZnNldFRvSW5kZXgoZW51bVRvTmFtZS5vZmZzZXRBcnJheSk7CisKKyAgICAgICAgYnVpbGRlci5zZWVrKG5hbWVUb0VudW1fb2Zmc2V0KTsKKyAgICAgICAgbmFtZVRvRW51bSA9IG5ldyBOYW1lVG9FbnVtKGJ1aWxkZXIpOworCisgICAgICAgIGJ1aWxkZXIuc2VlayhlbnVtVG9WYWx1ZV9vZmZzZXQpOworICAgICAgICBlbnVtVG9WYWx1ZSA9IG5ldyBOb25Db250aWd1b3VzRW51bVRvU2hvcnQoYnVpbGRlcik7CisgICAgICAgIGJ1aWxkZXIudmFsdWVNYXBPZmZzZXRUb0luZGV4KGVudW1Ub1ZhbHVlLm9mZnNldEFycmF5KTsKKworICAgICAgICB2YWx1ZU1hcEFycmF5ID0gbmV3IFZhbHVlTWFwW3ZhbHVlTWFwX2NvdW50XTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHZhbHVlTWFwX2NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIC8vIE11c3Qgc2VlayB0byB0aGUgc3RhcnQgb2YgZWFjaCBlbnRyeS4KKyAgICAgICAgICAgIGJ1aWxkZXIuc2VlayhidWlsZGVyLnZhbHVlTWFwX21hcFtpXSk7CisgICAgICAgICAgICB2YWx1ZU1hcEFycmF5W2ldID0gbmV3IFZhbHVlTWFwKGJ1aWxkZXIpOworICAgICAgICB9CisKKyAgICAgICAgYnVpbGRlci5jbG9zZSgpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHByb3BlcnR5IG5hbWUgZ2l2ZW4gYSBwcm9wZXJ0eSBlbnVtLiAgTXVsdGlwbGUKKyAgICAgKiBuYW1lcyBtYXkgYmUgYXZhaWxhYmxlIGZvciBlYWNoIHByb3BlcnR5OyB0aGUgbmFtZUNob2ljZQorICAgICAqIHNlbGVjdHMgYW1vbmcgdGhlbS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShpbnQgcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hbWVDaG9pY2UpIHsKKyAgICAgICAgc2hvcnQgbmFtZUdyb3VwSW5kZXggPSBlbnVtVG9OYW1lLmdldFNob3J0KHByb3BlcnR5KTsKKyAgICAgICAgcmV0dXJuIGNob29zZU5hbWVJbkdyb3VwKG5hbWVHcm91cEluZGV4LCBuYW1lQ2hvaWNlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBwcm9wZXJ0eSBlbnVtIGdpdmVuIG9uZSBvZiBpdHMgcHJvcGVydHkgbmFtZXMuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRQcm9wZXJ0eUVudW0oU3RyaW5nIHByb3BlcnR5QWxpYXMpIHsKKyAgICAgICAgcmV0dXJuIG5hbWVUb0VudW0uZ2V0RW51bShwcm9wZXJ0eUFsaWFzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSB2YWx1ZSBuYW1lIGdpdmVuIGEgcHJvcGVydHkgZW51bSBhbmQgYSB2YWx1ZSBlbnVtLgorICAgICAqIE11bHRpcGxlIG5hbWVzIG1heSBiZSBhdmFpbGFibGUgZm9yIGVhY2ggdmFsdWU7IHRoZSBuYW1lQ2hvaWNlCisgICAgICogc2VsZWN0cyBhbW9uZyB0aGVtLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZU5hbWUoaW50IHByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hbWVDaG9pY2UpIHsKKyAgICAgICAgVmFsdWVNYXAgdm0gPSBnZXRWYWx1ZU1hcChwcm9wZXJ0eSk7CisgICAgICAgIHNob3J0IG5hbWVHcm91cEluZGV4ID0gdm0uZW51bVRvTmFtZS5nZXRTaG9ydCh2YWx1ZSk7CisgICAgICAgIHJldHVybiBjaG9vc2VOYW1lSW5Hcm91cChuYW1lR3JvdXBJbmRleCwgbmFtZUNob2ljZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgdmFsdWUgZW51bSBnaXZlbiBvbmUgb2YgaXRzIHZhbHVlIG5hbWVzIGFuZCB0aGUKKyAgICAgKiBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGFsaWFzLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0UHJvcGVydHlWYWx1ZUVudW0oaW50IHByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlQWxpYXMpIHsKKyAgICAgICAgVmFsdWVNYXAgdm0gPSBnZXRWYWx1ZU1hcChwcm9wZXJ0eSk7CisgICAgICAgIHJldHVybiB2bS5uYW1lVG9FbnVtLmdldEVudW0odmFsdWVBbGlhcyk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRGF0YSBzdHJ1Y3R1cmVzCisKKyAgICAvKioKKyAgICAgKiBBIG1hcCBmb3IgdGhlIGxlZ2FsIHZhbHVlcyBvZiBhIGJpbmFyeSBvciBlbnVtZXJhdGVkIHByb3BlcnRpZXMuCisgICAgICovCisgICAgcHJpdmF0ZSBjbGFzcyBWYWx1ZU1hcCB7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1hcHMgdmFsdWUgZW51bSB0byBpbmRleCBpbnRvIHRoZSBuYW1lR3JvdXBQb29sW10KKyAgICAgICAgICovCisgICAgICAgIEVudW1Ub1Nob3J0IGVudW1Ub05hbWU7IC8vIHBvbHltb3JwaGljCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1hcHMgdmFsdWUgbmFtZSB0byB2YWx1ZSBlbnVtLgorICAgICAgICAgKi8KKyAgICAgICAgTmFtZVRvRW51bSBuYW1lVG9FbnVtOworCisgICAgICAgIFZhbHVlTWFwKEJ1aWxkZXIgYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHNob3J0IGVudW1Ub05hbWVfb2Zmc2V0ID0gYi5yZWFkU2hvcnQoKTsKKyAgICAgICAgICAgIHNob3J0IG5jRW51bVRvTmFtZV9vZmZzZXQgPSBiLnJlYWRTaG9ydCgpOworICAgICAgICAgICAgc2hvcnQgbmFtZVRvRW51bV9vZmZzZXQgPSBiLnJlYWRTaG9ydCgpOworICAgICAgICAgICAgaWYgKGVudW1Ub05hbWVfb2Zmc2V0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBiLnNlZWsoZW51bVRvTmFtZV9vZmZzZXQpOworICAgICAgICAgICAgICAgIENvbnRpZ3VvdXNFbnVtVG9TaG9ydCB4ID0gbmV3IENvbnRpZ3VvdXNFbnVtVG9TaG9ydChiKTsKKyAgICAgICAgICAgICAgICBiLm5hbWVHcm91cE9mZnNldFRvSW5kZXgoeC5vZmZzZXRBcnJheSk7CisgICAgICAgICAgICAgICAgZW51bVRvTmFtZSA9IHg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGIuc2VlayhuY0VudW1Ub05hbWVfb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBOb25Db250aWd1b3VzRW51bVRvU2hvcnQgeCA9IG5ldyBOb25Db250aWd1b3VzRW51bVRvU2hvcnQoYik7CisgICAgICAgICAgICAgICAgYi5uYW1lR3JvdXBPZmZzZXRUb0luZGV4KHgub2Zmc2V0QXJyYXkpOworICAgICAgICAgICAgICAgIGVudW1Ub05hbWUgPSB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYi5zZWVrKG5hbWVUb0VudW1fb2Zmc2V0KTsKKyAgICAgICAgICAgIG5hbWVUb0VudW0gPSBuZXcgTmFtZVRvRW51bShiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFic3RyYWN0IG1hcCBmcm9tIGVudW0gdmFsdWVzIHRvIGludGVnZXJzLgorICAgICAqLworICAgIHByaXZhdGUgaW50ZXJmYWNlIEVudW1Ub1Nob3J0IHsKKyAgICAgICAgc2hvcnQgZ2V0U2hvcnQoaW50IGVudW1Qcm9iZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2VuZXJpYyBtYXAgZnJvbSBlbnVtIHZhbHVlcyB0byBvZmZzZXRzLiAgRW51bSB2YWx1ZXMgYXJlCisgICAgICogY29udGlndW91cy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb250aWd1b3VzRW51bVRvU2hvcnQgaW1wbGVtZW50cyBFbnVtVG9TaG9ydCB7CisgICAgICAgIGludCBlbnVtU3RhcnQ7CisgICAgICAgIGludCBlbnVtTGltaXQ7CisgICAgICAgIHNob3J0IG9mZnNldEFycmF5W107CisKKyAgICAgICAgcHVibGljIHNob3J0IGdldFNob3J0KGludCBlbnVtUHJvYmUpIHsKKyAgICAgICAgICAgIGlmIChlbnVtUHJvYmUgPCBlbnVtU3RhcnQgfHwgZW51bVByb2JlID49IGVudW1MaW1pdCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZW51bSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG9mZnNldEFycmF5W2VudW1Qcm9iZSAtIGVudW1TdGFydF07CisgICAgICAgIH0KKworICAgICAgICBDb250aWd1b3VzRW51bVRvU2hvcnQoSUNVQmluYXJ5U3RyZWFtIHMpIHRocm93cyBJT0V4Y2VwdGlvbiAgeworICAgICAgICAgICAgZW51bVN0YXJ0ID0gcy5yZWFkSW50KCk7CisgICAgICAgICAgICBlbnVtTGltaXQgPSBzLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGludCBjb3VudCA9IGVudW1MaW1pdCAtIGVudW1TdGFydDsKKyAgICAgICAgICAgIG9mZnNldEFycmF5ID0gbmV3IHNob3J0W2NvdW50XTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0QXJyYXlbaV0gPSBzLnJlYWRTaG9ydCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2VuZXJpYyBtYXAgZnJvbSBlbnVtIHZhbHVlcyB0byBvZmZzZXRzLiAgRW51bSB2YWx1ZXMgbmVlZCBub3QKKyAgICAgKiBiZSBjb250aWd1b3VzLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE5vbkNvbnRpZ3VvdXNFbnVtVG9TaG9ydCBpbXBsZW1lbnRzIEVudW1Ub1Nob3J0IHsKKyAgICAgICAgaW50IGVudW1BcnJheVtdOworICAgICAgICBzaG9ydCBvZmZzZXRBcnJheVtdOworCisgICAgICAgIHB1YmxpYyBzaG9ydCBnZXRTaG9ydChpbnQgZW51bVByb2JlKSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8ZW51bUFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGVudW1BcnJheVtpXSA8IGVudW1Qcm9iZSkgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGVudW1BcnJheVtpXSA+IGVudW1Qcm9iZSkgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldEFycmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBlbnVtIik7CisgICAgICAgIH0KKworICAgICAgICBOb25Db250aWd1b3VzRW51bVRvU2hvcnQoSUNVQmluYXJ5U3RyZWFtIHMpIHRocm93cyBJT0V4Y2VwdGlvbiAgeworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBpbnQgY291bnQgPSBzLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGVudW1BcnJheSA9IG5ldyBpbnRbY291bnRdOworICAgICAgICAgICAgb2Zmc2V0QXJyYXkgPSBuZXcgc2hvcnRbY291bnRdOworICAgICAgICAgICAgZm9yIChpPTA7IGk8Y291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGVudW1BcnJheVtpXSA9IHMucmVhZEludCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpPTA7IGk8Y291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIG9mZnNldEFycmF5W2ldID0gcy5yZWFkU2hvcnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE1hcCBmcm9tIG5hbWVzIHRvIGVudW0gdmFsdWVzLgorICAgICAqLworICAgIHByaXZhdGUgY2xhc3MgTmFtZVRvRW51bSB7CisgICAgICAgIGludCBlbnVtQXJyYXlbXTsKKyAgICAgICAgc2hvcnQgbmFtZUFycmF5W107CisKKyAgICAgICAgaW50IGdldEVudW0oU3RyaW5nIG5hbWVQcm9iZSkgeworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG5hbWVBcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGludCBjID0gVVByb3BlcnR5QWxpYXNlcy5jb21wYXJlKG5hbWVQcm9iZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdQb29sW25hbWVBcnJheVtpXV0pOworICAgICAgICAgICAgICAgIGlmIChjID4gMCkgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGMgPCAwKSBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW51bUFycmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBuYW1lOiAiICsgbmFtZVByb2JlKTsKKyAgICAgICAgfQorCisgICAgICAgIE5hbWVUb0VudW0oQnVpbGRlciBiKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBpbnQgY291bnQgPSBiLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGVudW1BcnJheSA9IG5ldyBpbnRbY291bnRdOworICAgICAgICAgICAgbmFtZUFycmF5ID0gbmV3IHNob3J0W2NvdW50XTsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBlbnVtQXJyYXlbaV0gPSBiLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBuYW1lQXJyYXlbaV0gPSBiLnN0cmluZ09mZnNldFRvSW5kZXgoYi5yZWFkU2hvcnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBSdW50aW1lIGltcGxlbWVudGF0aW9uCisKKyAgICAvKioKKyAgICAgKiBDb21wYXJlIHR3byBwcm9wZXJ0eSBuYW1lcywgcmV0dXJuaW5nIDwwLCAwLCBvciA+MC4gIFRoZQorICAgICAqIGNvbXBhcmlzb24gaXMgdGhhdCBkZXNjcmliZWQgYXMgImxvb3NlIiBtYXRjaGluZyBpbiB0aGUKKyAgICAgKiBQcm9wZXJ0eSpBbGlhc2VzLnR4dCBmaWxlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBjb21wYXJlKFN0cmluZyBzdHJhLCBTdHJpbmcgc3RyYikgeworICAgICAgICAvLyBOb3RlOiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGEgbGl0ZXJhbCBjb3B5IG9mCisgICAgICAgIC8vIHVwcnZfY29tcGFyZVByb3BlcnR5TmFtZXMuICBJdCBjYW4gcHJvYmFibHkgYmUgaW1wcm92ZWQuCisgICAgICAgIGludCBpc3RyYT0wLCBpc3RyYj0wLCByYzsKKyAgICAgICAgaW50IGNzdHJhPTAsIGNzdHJiPTA7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIC8qIElnbm9yZSBkZWxpbWl0ZXJzICctJywgJ18nLCBhbmQgQVNDSUkgV2hpdGVfU3BhY2UgKi8KKyAgICAgICAgICAgIHdoaWxlIChpc3RyYTxzdHJhLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgY3N0cmEgPSBzdHJhLmNoYXJBdChpc3RyYSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjc3RyYSkgeworICAgICAgICAgICAgICAgIGNhc2UgJy0nOiAgY2FzZSAnXyc6ICBjYXNlICcgJzogIGNhc2UgJ1x0JzoKKyAgICAgICAgICAgICAgICBjYXNlICdcbic6IGNhc2UgMHhiLypcdiovOiBjYXNlICdcZic6IGNhc2UgJ1xyJzoKKyAgICAgICAgICAgICAgICAgICAgKytpc3RyYTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoaXN0cmI8c3RyYi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGNzdHJiID0gc3RyYi5jaGFyQXQoaXN0cmIpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoY3N0cmIpIHsKKyAgICAgICAgICAgICAgICBjYXNlICctJzogIGNhc2UgJ18nOiAgY2FzZSAnICc6ICBjYXNlICdcdCc6CisgICAgICAgICAgICAgICAgY2FzZSAnXG4nOiBjYXNlIDB4Yi8qXHYqLzogY2FzZSAnXGYnOiBjYXNlICdccic6CisgICAgICAgICAgICAgICAgICAgICsraXN0cmI7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSWYgd2UgcmVhY2ggdGhlIGVuZHMgb2YgYm90aCBzdHJpbmdzIHRoZW4gdGhleSBtYXRjaCAqLworICAgICAgICAgICAgYm9vbGVhbiBlbmRzdHJhID0gaXN0cmE9PXN0cmEubGVuZ3RoKCk7CisgICAgICAgICAgICBib29sZWFuIGVuZHN0cmIgPSBpc3RyYj09c3RyYi5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChlbmRzdHJhKSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZHN0cmIpIHJldHVybiAwOworICAgICAgICAgICAgICAgIGNzdHJhID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kc3RyYikgeworICAgICAgICAgICAgICAgIGNzdHJiID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmMgPSBVQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGNzdHJhKSAtIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY3N0cmIpOworICAgICAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICsraXN0cmE7CisgICAgICAgICAgICArK2lzdHJiOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYW4gaW5kZXggdG8gYSBydW4gd2l0aGluIHRoZSBuYW1lR3JvdXBQb29sW10sIGFuZCBhCisgICAgICogbmFtZUNob2ljZSAoMCwxLC4uLiksIHNlbGVjdCB0aGUgbmFtZUNob2ljZS10aCBlbnRyeSBvZiB0aGUgcnVuLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGNob29zZU5hbWVJbkdyb3VwKHNob3J0IG5hbWVHcm91cEluZGV4LCBpbnQgbmFtZUNob2ljZSkgeworICAgICAgICBpZiAobmFtZUNob2ljZSA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgbmFtZSBjaG9pY2UiKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAobmFtZUNob2ljZS0tID4gMCkgeworICAgICAgICAgICAgaWYgKG5hbWVHcm91cFBvb2xbbmFtZUdyb3VwSW5kZXgrK10gPCAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBuYW1lIGNob2ljZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNob3J0IGEgPSBuYW1lR3JvdXBQb29sW25hbWVHcm91cEluZGV4XTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ1Bvb2xbKGEgPCAwKSA/IC1hIDogYV07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSB2YWx1ZU1hcFtdIGVudHJ5IGZvciBhIGdpdmVuIHByb3BlcnR5LgorICAgICAqLworICAgIHByaXZhdGUgVmFsdWVNYXAgZ2V0VmFsdWVNYXAoaW50IHByb3BlcnR5KSB7CisgICAgICAgIGludCB2YWx1ZU1hcEluZGV4ID0gZW51bVRvVmFsdWUuZ2V0U2hvcnQocHJvcGVydHkpOworICAgICAgICByZXR1cm4gdmFsdWVNYXBBcnJheVt2YWx1ZU1hcEluZGV4XTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBJQ1VCaW5hcnkgQVBJCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGF0YSB2ZXJzaW9uIGNhbiBiZSB1c2VkLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzRGF0YVZlcnNpb25BY2NlcHRhYmxlKGJ5dGUgdmVyc2lvbltdKSAgIHsKKyAgICAgICAgcmV0dXJuIHZlcnNpb25bMF0gPT0gREFUQV9GT1JNQVRfVkVSU0lPTjsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBCdWlsZGVyCisKKyAgICAvKioKKyAgICAgKiBBIHNwZWNpYWxpemVkIElDVUJpbmFyeVN0cmVhbSB0aGF0IGNhbiBtYXAgYmV0d2VlbiBvZmZzZXRzIGFuZAorICAgICAqIGluZGV4IHZhbHVlcyBpbnRvIHZhcmlvdXMgYXJyYXlzIChzdHJpbmdQb29sLCBuYW1lR3JvdXBQb29sLAorICAgICAqIGFuZCB2YWx1ZU1hcCkuICBJdCBhbHNvIGtub3dzIGhvdyB0byByZWFkIHZhcmlvdXMgc3RydWN0dXJlcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgY2xhc3MgQnVpbGRlciBleHRlbmRzIElDVUJpbmFyeVN0cmVhbSB7CisgICAgICAgIAorICAgICAgICAvLyBtYXBbaV0gPSBvZmZzZXQgb2Ygb2JqZWN0IGkuICBXZSBuZWVkIG1hcHMgZm9yIGFsbCBvZiBvdXIKKyAgICAgICAgLy8gYXJyYXlzLiAgVGhlIGFycmF5cyBhcmUgaW5kZXhlZCBieSBvZmZzZXQgaW4gdGhlIHJhdyBiaW5hcnkKKyAgICAgICAgLy8gZmlsZTsgd2UgbmVlZCB0byB0cmFuc2xhdGUgdGhhdCB0byBpbmRleC4KKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgc2hvcnQgc3RyaW5nUG9vbF9tYXBbXTsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgc2hvcnQgdmFsdWVNYXBfbWFwW107CisgICAgICAgIAorICAgICAgICBwcml2YXRlIHNob3J0IG5hbWVHcm91cF9tYXBbXTsKKworICAgICAgICBwdWJsaWMgQnVpbGRlcihieXRlIHJhd1tdKSB7CisgICAgICAgICAgICBzdXBlcihyYXcpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB2YWx1ZU1hcF9tYXBbXSBtdXN0IGJlIHNldHVwIGluIGFkdmFuY2UuICBUaGlzIG1ldGhvZAorICAgICAgICAgKiBkb2VzIHRoYXQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXR1cFZhbHVlTWFwX21hcChzaG9ydCBvZmZzZXQsIHNob3J0IGNvdW50KSB7CisgICAgICAgICAgICB2YWx1ZU1hcF9tYXAgPSBuZXcgc2hvcnRbY291bnRdOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCBvZiBlYWNoIGVudHJ5LiAgRWFjaCBlbnRyeSBpcyA2IGJ5dGVzIGxvbmcuCisgICAgICAgICAgICAgICAgdmFsdWVNYXBfbWFwW2ldID0gKHNob3J0KSAob2Zmc2V0ICsgaSAqIDYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlYWQgc3RyaW5nUG9vbFtdLiAgQnVpbGQgdXAgdHJhbnNsYXRpb24gdGFibGUgZnJvbSBvZmZzZXRzCisgICAgICAgICAqIHRvIHN0cmluZyBpbmRpY2VzIChzdHJpbmdQb29sX21hcFtdKS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmdbXSByZWFkU3RyaW5nUG9vbChzaG9ydCBvZmZzZXQsIHNob3J0IGNvdW50KQorICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHNlZWsob2Zmc2V0KTsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIG9uZSBtb3JlIHN0cmluZ1Bvb2wgZW50cnkgdGhhbiBuZWVkZWQuICBVc2UgdGhpcworICAgICAgICAgICAgLy8gdG8gc3RvcmUgYSAibm8gc3RyaW5nIiBlbnRyeSBpbiB0aGUgcG9vbCwgYXQgaW5kZXggMC4gIFRoaXMKKyAgICAgICAgICAgIC8vIG1hcHMgdG8gb2Zmc2V0IDAsIHNvIGxldCBzdHJpbmdQb29sX21hcFswXSA9IDAuCisgICAgICAgICAgICBTdHJpbmcgc3RyaW5nUG9vbFtdID0gbmV3IFN0cmluZ1tjb3VudCArIDFdOworICAgICAgICAgICAgc3RyaW5nUG9vbF9tYXAgPSBuZXcgc2hvcnRbY291bnQgKyAxXTsKKyAgICAgICAgICAgIHNob3J0IHBvcyA9IG9mZnNldDsKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBzdHJpbmdQb29sX21hcFswXSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpPTE7IGk8PWNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBuYW1lIGlzIGludmFyaWFudC1BU0NJSQorICAgICAgICAgICAgICAgICAgICBjaGFyIGMgPSAoY2hhcikgcmVhZFVuc2lnbmVkQnl0ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAwKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RyaW5nUG9vbF9tYXBbaV0gPSBwb3M7CisgICAgICAgICAgICAgICAgc3RyaW5nUG9vbFtpXSA9IGJ1Zi50b1N0cmluZygpOworICAgICAgICAgICAgICAgIHBvcyArPSBzdHJpbmdQb29sW2ldLmxlbmd0aCgpICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVhZCBzdHJpbmdQb29sIHggIiArIGNvdW50ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogIiArIHN0cmluZ1Bvb2xbMV0gKyAiLCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nUG9vbFsyXSArICIsICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdQb29sWzNdICsgIiwuLi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdHJpbmdQb29sOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlYWQgdGhlIG5hbWVHcm91cFBvb2xbXSwgYW5kIGJ1aWxkIHVwIHRoZSBvZmZzZXQtPmluZGV4CisgICAgICAgICAqIG1hcCAobmFtZUdyb3VwUG9vbF9tYXBbXSkuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc2hvcnRbXSByZWFkTmFtZUdyb3VwUG9vbChzaG9ydCBvZmZzZXQsIHNob3J0IGNvdW50KQorICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIC8vIFJlYWQgbmFtZUdyb3VwUG9vbFtdLiAgVGhpcyBjb250YWlucyBvZmZzZXRzIGZyb20gc3RhcnQgb2YKKyAgICAgICAgICAgIC8vIGhlYWRlci4gIFdlIHRyYW5zbGF0ZSB0aGVzZSBpbnRvIGluZGljZXMgaW50byBzdHJpbmdQb29sW10KKyAgICAgICAgICAgIC8vIG9uIHRoZSBmbHkuICBUaGUgb2Zmc2V0IDAsIHdoaWNoIGluZGljYXRlcyAibm8gZW50cnkiLCB3ZQorICAgICAgICAgICAgLy8gdHJhbnNsYXRlIGludG8gaW5kZXggMCwgd2hpY2ggY29udGFpbnMgYSBudWxsIFN0cmluZworICAgICAgICAgICAgLy8gcG9pbnRlci4KKyAgICAgICAgICAgIHNlZWsob2Zmc2V0KTsKKyAgICAgICAgICAgIHNob3J0IHBvcyA9IG9mZnNldDsKKyAgICAgICAgICAgIHNob3J0IG5hbWVHcm91cFBvb2xbXSA9IG5ldyBzaG9ydFtjb3VudF07CisgICAgICAgICAgICBuYW1lR3JvdXBfbWFwID0gbmV3IHNob3J0W2NvdW50XTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgbmFtZUdyb3VwX21hcFtpXSA9IHBvczsKKyAgICAgICAgICAgICAgICBuYW1lR3JvdXBQb29sW2ldID0gc3RyaW5nT2Zmc2V0VG9JbmRleChyZWFkU2hvcnQoKSk7CisgICAgICAgICAgICAgICAgcG9zICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlYWQgbmFtZUdyb3VwUG9vbCB4ICIgKyBjb3VudCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6ICIgKyBuYW1lR3JvdXBQb29sWzBdICsgIiwgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVHcm91cFBvb2xbMV0gKyAiLCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUdyb3VwUG9vbFsyXSArICIsLi4uIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmFtZUdyb3VwUG9vbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb252ZXJ0IGFuIG9mZnNldCBpbnRvIHRoZSBzdHJpbmcgcG9vbCBpbnRvIGEgc3RyaW5nUG9vbFtdCisgICAgICAgICAqIGluZGV4LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzaG9ydCBzdHJpbmdPZmZzZXRUb0luZGV4KHNob3J0IG9mZnNldCkgeworICAgICAgICAgICAgaW50IHByb2JlID0gb2Zmc2V0OworICAgICAgICAgICAgaWYgKHByb2JlIDwgMCkgcHJvYmUgPSAtcHJvYmU7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8c3RyaW5nUG9vbF9tYXAubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaW5nUG9vbF9tYXBbaV0gPT0gcHJvYmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzaG9ydCkgKChvZmZzZXQgPCAwKSA/IC1pIDogaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbid0IG1hcCBzdHJpbmcgcG9vbCBvZmZzZXQgIiArIG9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvIGluZGV4Iik7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ29udmVydCBhbiBhcnJheSBvZiBvZmZzZXRzIGludG8gdGhlIHN0cmluZyBwb29sIGludG8gYW4KKyAgICAgICAgICogYXJyYXkgb2Ygc3RyaW5nUG9vbFtdIGluZGljZXMuICBNT0RJRklFUyBUSEUgQVJSQVkgSU4KKyAgICAgICAgICogUExBQ0UuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgc3RyaW5nT2Zmc2V0VG9JbmRleChzaG9ydCBhcnJheVtdKSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8YXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0cmluZ09mZnNldFRvSW5kZXgoYXJyYXlbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnZlcnQgYW4gb2Zmc2V0IGludG8gdGhlIHZhbHVlIG1hcCBpbnRvIGEgdmFsdWVNYXBbXQorICAgICAgICAgKiBpbmRleC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc2hvcnQgdmFsdWVNYXBPZmZzZXRUb0luZGV4KHNob3J0IG9mZnNldCkgeworICAgICAgICAgICAgZm9yIChzaG9ydCBpPTA7IGk8dmFsdWVNYXBfbWFwLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlTWFwX21hcFtpXSA9PSBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbid0IG1hcCB2YWx1ZSBtYXAgb2Zmc2V0ICIgKyBvZmZzZXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byBpbmRleCIpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnZlcnQgYW4gYXJyYXkgb2Ygb2Zmc2V0cyBpbnRvIHRoZSB2YWx1ZSBtYXAgYXJyYXkgaW50bworICAgICAgICAgKiBhbiBhcnJheSBvZiB2YWx1ZU1hcFtdIGluZGljZXMuICBNT0RJRklFUyBUSEUgQVJSQVkgSU4KKyAgICAgICAgICogUExBQ0UuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgdmFsdWVNYXBPZmZzZXRUb0luZGV4KHNob3J0IGFycmF5W10pIHsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxhcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gdmFsdWVNYXBPZmZzZXRUb0luZGV4KGFycmF5W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb252ZXJ0IGFuIG9mZnNldCBpbnRvIHRoZSBuYW1lIGdyb3VwIHBvb2wgaW50byBhCisgICAgICAgICAqIG5hbWVHcm91cFBvb2xbXSBpbmRleC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc2hvcnQgbmFtZUdyb3VwT2Zmc2V0VG9JbmRleChzaG9ydCBvZmZzZXQpIHsKKyAgICAgICAgICAgIGZvciAoc2hvcnQgaT0wOyBpPG5hbWVHcm91cF9tYXAubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZUdyb3VwX21hcFtpXSA9PSBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbid0IG1hcCBuYW1lIGdyb3VwIG9mZnNldCAiICsgb2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gaW5kZXgiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb252ZXJ0IGFuIGFycmF5IG9mIG9mZnNldHMgaW50byB0aGUgbmFtZSBncm91cCBwb29sIGludG8gYW4KKyAgICAgICAgICogYXJyYXkgb2YgbmFtZUdyb3VwUG9vbFtdIGluZGljZXMuICBNT0RJRklFUyBUSEUgQVJSQVkgSU4KKyAgICAgICAgICogUExBQ0UuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgbmFtZUdyb3VwT2Zmc2V0VG9JbmRleChzaG9ydCBhcnJheVtdKSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8YXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IG5hbWVHcm91cE9mZnNldFRvSW5kZXgoYXJyYXlbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVVNlcmlhbGl6ZWRTZXQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VTZXJpYWxpemVkU2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmZmExNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VTZXJpYWxpemVkU2V0LmphdmEKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VTZXJpYWxpemVkU2V0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDYvMjAgMDE6MTg6MDkgJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbDsKKy8qKgorICogQHZlcnNpb24gCTEuMAorICogQGF1dGhvciAgICAgTWFya3VzIFcuIFNjaGVyZXIKKyAqLworCisvKioKKyAqIFNpbXBsZSBjbGFzcyBmb3IgaGFuZGxpbmcgc2VyaWFsaXplZCBVU2V0L1VuaWNvZGVTZXQgc3RydWN0dXJlcworICogd2l0aG91dCBvYmplY3QgY3JlYXRpb24uIFNlZSBJQ1U0QyBpY3Uvc291cmNlL2NvbW1vbi91c2V0LmMuCisgKgorICogQGludGVybmFsCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBVU2VyaWFsaXplZFNldCB7CisJCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gZ2V0U2V0KGNoYXIgc3JjW10sIGludCBzcmNTdGFydCkgeworICAgICAgICAvLyBsZWF2ZSBtb3N0IGFyZ3VtZW50IGNoZWNraW5nIHVwIHRvIEphdmEgZXhjZXB0aW9ucworICAgICAgICBhcnJheT1udWxsOworICAgICAgICBhcnJheU9mZnNldD1ibXBMZW5ndGg9bGVuZ3RoPTA7CisKKyAgICAgICAgbGVuZ3RoPXNyY1tzcmNTdGFydCsrXTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBpZigobGVuZ3RoJjB4ODAwMCkgPjApIHsKKyAgICAgICAgICAgIC8qIHRoZXJlIGFyZSBzdXBwbGVtZW50YXJ5IHZhbHVlcyAqLworICAgICAgICAgICAgbGVuZ3RoJj0weDdmZmY7CisgICAgICAgICAgICBpZihzcmMubGVuZ3RoPChzcmNTdGFydCsxK2xlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBsZW5ndGg9MDsKKyAgICAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBibXBMZW5ndGg9c3JjW3NyY1N0YXJ0KytdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogb25seSBCTVAgdmFsdWVzICovCisgICAgICAgICAgICBpZihzcmMubGVuZ3RoPChzcmNTdGFydCtsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgbGVuZ3RoPTA7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJtcExlbmd0aD1sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgYXJyYXkgPSBuZXcgY2hhcltsZW5ndGhdOworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHNyYyxzcmNTdGFydCxhcnJheSwwLGxlbmd0aCk7CisgICAgICAgIC8vYXJyYXlPZmZzZXQ9c3JjU3RhcnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCAgYm9vbGVhbiAgY29udGFpbnMoaW50IGMpIHsKKyAgICAgICAgaWYoYzwwIHx8IDB4MTBmZmZmPGMpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGM8PTB4ZmZmZikgeworICAgICAgICAgICAgLyogZmluZCBjIGluIHRoZSBCTVAgcGFydCAqLworICAgICAgICAgICAgaW50IGksIGJtcExpbWl0PWFycmF5T2Zmc2V0K2JtcExlbmd0aDsKKyAgICAgICAgICAgIGZvcihpPWFycmF5T2Zmc2V0OyBpPGJtcExpbWl0ICYmIGM+PWFycmF5W2ldOyArK2kpIHt9CisgICAgICAgICAgICByZXR1cm4gKCgoaS1hcnJheU9mZnNldCkmMSk+MCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBmaW5kIGMgaW4gdGhlIHN1cHBsZW1lbnRhcnkgcGFydCAqLworICAgICAgICAgICAgaW50IGksIGxpbWl0PWFycmF5T2Zmc2V0K2xlbmd0aDsKKyAgICAgICAgICAgIGNoYXIgaGlnaD0oY2hhcikoYz4+MTYpLCBsb3c9KGNoYXIpYzsKKyAgICAgICAgICAgIGZvcihpPWFycmF5T2Zmc2V0K2JtcExlbmd0aDsKKyAgICAgICAgICAgICAgICBpPGxpbWl0ICYmIChoaWdoPmFycmF5W2ldIHx8IChoaWdoPT1hcnJheVtpXSAmJiBsb3c+PWFycmF5W2krMV0pKTsKKyAgICAgICAgICAgICAgICBpKz0yKSB7fQorCisgICAgICAgICAgICAvKiBjb3VudCBwYWlycyBvZiAxNi1iaXQgdW5pdHMgZXZlbiBwZXIgQk1QIGFuZCBjaGVjayBpZiB0aGUgbnVtYmVyIG9mIHBhaXJzIGlzIG9kZCAqLworICAgICAgICAgICAgcmV0dXJuICgoaStibXBMZW5ndGgtYXJyYXlPZmZzZXQpJjIpIT0wOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGZpbmFsICBib29sZWFuIGNvdW50UmFuZ2VzKCkgeworICAgICAgICByZXR1cm4gKChibXBMZW5ndGgrKGxlbmd0aC1ibXBMZW5ndGgpLzIrMSkvMik+MDsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgIGJvb2xlYW4gZ2V0UmFuZ2UoaW50IHJhbmdlSW5kZXgsIGludCByYW5nZVtdKSB7CisgICAgICAgIGlmKHJhbmdlSW5kZXg8MCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKwkJcmFuZ2U9bmV3IGludFsyXTsKKwkJCisgICAgICAgIHJhbmdlSW5kZXgqPTI7IC8qIGFkZHJlc3Mgc3RhcnQvbGltaXQgcGFpcnMgKi8KKyAgICAgICAgaWYocmFuZ2VJbmRleDxibXBMZW5ndGgpIHsKKyAgICAgICAgICAgIHJhbmdlWzBdPWFycmF5W2FycmF5T2Zmc2V0K3JhbmdlSW5kZXgrK107CisgICAgICAgICAgICBpZihyYW5nZUluZGV4PGJtcExlbmd0aCkgeworICAgICAgICAgICAgICAgIHJhbmdlWzFdPWFycmF5W2FycmF5T2Zmc2V0K3JhbmdlSW5kZXhdOworICAgICAgICAgICAgfSBlbHNlIGlmKHJhbmdlSW5kZXg8bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmFuZ2VbMV09KCgoaW50KWFycmF5W2FycmF5T2Zmc2V0K3JhbmdlSW5kZXhdKTw8MTYpfGFycmF5W2FycmF5T2Zmc2V0K3JhbmdlSW5kZXgrMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJhbmdlWzFdPTB4MTEwMDAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYW5nZUluZGV4LT1ibXBMZW5ndGg7CisgICAgICAgICAgICByYW5nZUluZGV4Kj0yOyAvKiBhZGRyZXNzIHBhaXJzIG9mIHBhaXJzIG9mIHVuaXRzICovCisgICAgICAgICAgICBpbnQgc3VwcExlbmd0aD1sZW5ndGgtYm1wTGVuZ3RoOworICAgICAgICAgICAgaWYocmFuZ2VJbmRleDxzdXBwTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaW50IG9mZnNldD1hcnJheU9mZnNldCtibXBMZW5ndGg7CisgICAgICAgICAgICAgICAgcmFuZ2VbMF09KCgoaW50KWFycmF5W29mZnNldCtyYW5nZUluZGV4XSk8PDE2KXxhcnJheVtvZmZzZXQrcmFuZ2VJbmRleCsxXTsKKyAgICAgICAgICAgICAgICByYW5nZUluZGV4Kz0yOworICAgICAgICAgICAgICAgIGlmKHJhbmdlSW5kZXg8c3VwcExlbmd0aCkgeworICAgICAgICAgICAgICAgIHJhbmdlWzFdPSgoKGludClhcnJheVtvZmZzZXQrcmFuZ2VJbmRleF0pPDwxNil8YXJyYXlbb2Zmc2V0K3JhbmdlSW5kZXgrMV07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VbMV09MHgxMTAwMDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisJcHVibGljIGZpbmFsIHZvaWQgc2V0U2VyaWFsaXplZFRvT25lKGludCBjKSB7CisJICAgIGlmKCAweDEwZmZmZjxjKSB7CisJICAgICAgICByZXR1cm47CisJICAgIH0KKworCSAgICBpZihjPDB4ZmZmZikgeworCSAgICAgICAgYm1wTGVuZ3RoPWxlbmd0aD0yOworCSAgICAgICAgYXJyYXlbMF09KGNoYXIpYzsKKwkgICAgICAgIGFycmF5WzFdPShjaGFyKShjKzEpOworCSAgICB9IGVsc2UgaWYoYz09MHhmZmZmKSB7CisJICAgICAgICBibXBMZW5ndGg9MTsKKwkgICAgICAgIGxlbmd0aD0zOworCSAgICAgICAgYXJyYXlbMF09MHhmZmZmOworCSAgICAgICAgYXJyYXlbMV09MTsKKwkgICAgICAgIGFycmF5WzJdPTA7CisJICAgIH0gZWxzZSBpZihjPDB4MTBmZmZmKSB7CisJICAgICAgICBibXBMZW5ndGg9MDsKKwkgICAgICAgIGxlbmd0aD00OworCSAgICAgICAgYXJyYXlbMF09KGNoYXIpKGM+PjE2KTsKKwkgICAgICAgIGFycmF5WzFdPShjaGFyKWM7CisJICAgICAgICArK2M7CisJICAgICAgICBhcnJheVsyXT0oY2hhcikoYz4+MTYpOworCSAgICAgICAgYXJyYXlbM109KGNoYXIpYzsKKwkgICAgfSBlbHNlIC8qIGM9PTB4MTBmZmZmICovIHsKKwkgICAgICAgIGJtcExlbmd0aD0wOworCSAgICAgICAgbGVuZ3RoPTI7CisJICAgICAgICBhcnJheVswXT0weDEwOworCSAgICAgICAgYXJyYXlbMV09MHhmZmZmOworCSAgICB9CisJfQorCQorCQorCXB1YmxpYyBmaW5hbCBib29sZWFuIGdldFNlcmlhbGl6ZWRSYW5nZSggaW50IHJhbmdlSW5kZXgsaW50W10gcmFuZ2UpIHsKKwkgICAgaWYoIHJhbmdlSW5kZXg8MCkgeworCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisJICAgIGlmKGFycmF5PT1udWxsKXsKKwkJCWFycmF5ID0gbmV3IGNoYXJbOF07CisJCX0KKyAgICAgICAgaWYocmFuZ2U9PW51bGwgfHwgcmFuZ2UubGVuZ3RoIDwyKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICByYW5nZUluZGV4Kj0yOyAvKiBhZGRyZXNzIHN0YXJ0L2xpbWl0IHBhaXJzICovCisJICAgIGlmKHJhbmdlSW5kZXg8Ym1wTGVuZ3RoKSB7CisJICAgICAgICByYW5nZVswXT1hcnJheVtyYW5nZUluZGV4KytdOworCSAgICAgICAgaWYocmFuZ2VJbmRleDxibXBMZW5ndGgpIHsKKwkgICAgICAgICAgICByYW5nZVsxXT1hcnJheVtyYW5nZUluZGV4XTsKKwkgICAgICAgIH0gZWxzZSBpZihyYW5nZUluZGV4PGxlbmd0aCkgeworCSAgICAgICAgICAgIHJhbmdlWzFdPSgoKGludClhcnJheVtyYW5nZUluZGV4XSk8PDE2KXxhcnJheVtyYW5nZUluZGV4KzFdOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICByYW5nZVsxXT0weDExMDAwMDsKKwkgICAgICAgIH0KKyAgICAgICAgICAgIHJhbmdlWzFdLT0xOworCSAgICAgICAgcmV0dXJuIHRydWU7CisJICAgIH0gZWxzZSB7CisJICAgICAgICByYW5nZUluZGV4LT1ibXBMZW5ndGg7CisJICAgICAgICByYW5nZUluZGV4Kj0yOyAvKiBhZGRyZXNzIHBhaXJzIG9mIHBhaXJzIG9mIHVuaXRzICovCisJICAgICAgICBsZW5ndGgtPWJtcExlbmd0aDsKKwkgICAgICAgIGlmKHJhbmdlSW5kZXg8bGVuZ3RoKSB7CisJICAgICAgICAgICAgaW50IG9mZnNldD1hcnJheU9mZnNldCtibXBMZW5ndGg7CisJICAgICAgICAgICAgcmFuZ2VbMF09KCgoaW50KWFycmF5W29mZnNldCtyYW5nZUluZGV4XSk8PDE2KXxhcnJheVtvZmZzZXQrcmFuZ2VJbmRleCsxXTsKKwkgICAgICAgICAgICByYW5nZUluZGV4Kz0yOworCSAgICAgICAgICAgIGlmKHJhbmdlSW5kZXg8bGVuZ3RoKSB7CisJICAgICAgICAgICAgICAgIHJhbmdlWzFdPSgoKGludClhcnJheVtvZmZzZXQrcmFuZ2VJbmRleF0pPDwxNil8YXJyYXlbb2Zmc2V0K3JhbmdlSW5kZXgrMV07CisJICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgcmFuZ2VbMV09MHgxMTAwMDA7CisJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJhbmdlWzFdLT0xOworCSAgICAgICAgICAgIHJldHVybiB0cnVlOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICB9CisJICAgIH0KKwl9CisJcHVibGljIGZpbmFsIGJvb2xlYW4gc2VyaWFsaXplZENvbnRhaW5zKGludCBjKSB7CisJCisJICAgIGlmKGM+MHgxMGZmZmYpIHsKKwkgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCSAgICAKKwkgICAgaWYoYzw9MHhmZmZmKSB7CisJICAgIAlpbnQgaTsKKwkgICAgICAgIC8qIGZpbmQgYyBpbiB0aGUgQk1QIHBhcnQgKi8KKwkgICAgICAgIGZvcihpPTA7IGk8Ym1wTGVuZ3RoICYmIChjaGFyKWM+PWFycmF5W2ldOyArK2kpIHt9CisJICAgICAgICByZXR1cm4gKGJvb2xlYW4pKChpJjEpICE9IDApOworCSAgICB9IGVsc2UgeworCSAgICAJaW50IGk7CisJICAgICAgICAvKiBmaW5kIGMgaW4gdGhlIHN1cHBsZW1lbnRhcnkgcGFydCAqLworCSAgICAgICAgY2hhciBoaWdoPShjaGFyKShjPj4xNiksIGxvdz0oY2hhciljOworCSAgICAgICAgZm9yKGk9Ym1wTGVuZ3RoOworCSAgICAgICAgICAgIGk8bGVuZ3RoICYmIChoaWdoPmFycmF5W2ldIHx8IChoaWdoPT1hcnJheVtpXSAmJiBsb3c+PWFycmF5W2krMV0pKTsKKwkgICAgICAgICAgICBpKz0yKSB7fQorCQorCSAgICAgICAgLyogY291bnQgcGFpcnMgb2YgMTYtYml0IHVuaXRzIGV2ZW4gcGVyIEJNUCBhbmQgY2hlY2sgaWYgdGhlIG51bWJlciBvZiBwYWlycyBpcyBvZGQgKi8KKwkgICAgICAgIHJldHVybiAoYm9vbGVhbikoKChpK2JtcExlbmd0aCkmMikhPTApOworCSAgICB9CisJfQorCQorCXB1YmxpYyBmaW5hbCBpbnQgY291bnRTZXJpYWxpemVkUmFuZ2VzKCkgeworCSAgICByZXR1cm4gKGJtcExlbmd0aCsobGVuZ3RoLWJtcExlbmd0aCkvMisxKS8yOworCX0KKworICAgIHByaXZhdGUgY2hhciBhcnJheVtdID0gbmV3IGNoYXJbOF07CisgICAgcHJpdmF0ZSBpbnQgYXJyYXlPZmZzZXQsIGJtcExlbmd0aCwgbGVuZ3RoOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VuaWNvZGVDaGFyYWN0ZXJJdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVW5pY29kZUNoYXJhY3Rlckl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiZmE0MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL1VuaWNvZGVDaGFyYWN0ZXJJdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9BdHRpYy9Vbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOC8wNyAxNzo1NTowMyAkIAorICogJFJldmlzaW9uOiAxLjIgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuUmVwbGFjZWFibGU7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5SZXBsYWNlYWJsZVN0cmluZzsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlVURjE2OworaW1wb3J0IGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvcjsKKworLyoqCisgKiBJbnRlcm5hbCBjbGFzcyB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggYSBjb20uaWJtLnRleHQuUmVwbGFjYWJsZSB0ZXh0IG9iamVjdCAKKyAqIHRvIHJldHVybiBlaXRoZXIgVW5pY29kZSBjaGFyYWN0ZXJzLgorICogQGF1dGhvciBzeW53ZWUKKyAqIEB2ZXJzaW9uIHJlbGVhc2UgMi4xLCBGZWJydWFyeSAyMDAyCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IgaW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvcgoreworCS8vIHB1YmxpYyBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKioKKwkgKiBJbmRpY2F0b3IgdGhhdCB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZHMgb2YgdGhlIFVURjE2IHRleHQgd2hlbiByZXR1cm5pbmcKKwkgKiAxNiBiaXQgY2hhcmFjdGVyLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPTkUgPSAweEZGRkY7CisJLyoqCisJICogSW5kaWNhdG9yIHRoYXQgd2UgaGF2ZSByZWFjaGVkIHRoZSBlbmRzIG9mIHRoZSBVVEYxNiB0ZXh0IHdoZW4gcmV0dXJuaW5nCisJICogY29kZXBvaW50cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET05FX0NPREVQT0lOVCA9IC0xOworCQorCS8vIHB1YmxpYyBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKioKKwkgKiBQdWJsaWMgY29uc3RydWN0b3IuCisJICogQnkgZGVmYXVsdCB0aGUgaXRlcmF0aW9uIHJhbmdlIHdpbGwgYmUgZnJvbSAwIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuCisJICogQHBhcmFtIHJlcGxhY2FibGUgdGV4dCB3aGljaCB0aGUgaXRlcmF0b3Igd2lsbCBiZSBiYXNlZCBvbgorCSAqLworCXB1YmxpYyBVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IoUmVwbGFjZWFibGUgcmVwbGFjZWFibGUpCisJeworCQltX3JlcGxhY2VhYmxlXyAgPSByZXBsYWNlYWJsZTsKKwkJbV9pbmRleF8gICAgICAgID0gMDsKKwkJbV9zdGFydF8gICAgICAgID0gMDsKKwkJbV9saW1pdF8gICAgICAgID0gcmVwbGFjZWFibGUubGVuZ3RoKCk7CisJfQorCQorCS8qKgorCSAqIFB1YmxpYyBjb25zdHJ1Y3RvcgorCSAqIEJ5IGRlZmF1bHQgdGhlIGl0ZXJhdGlvbiByYW5nZSB3aWxsIGJlIGZyb20gMCB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0LgorCSAqIEBwYXJhbSBzdHIgdGV4dCB3aGljaCB0aGUgaXRlcmF0b3Igd2lsbCBiZSBiYXNlZCBvbgorCSAqLworCXB1YmxpYyBVbmljb2RlQ2hhcmFjdGVySXRlcmF0b3IoU3RyaW5nIHN0cikKKwl7CisJCW1fcmVwbGFjZWFibGVfICA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyhzdHIpOworCQltX2luZGV4XyAgICAgICAgPSAwOworCQltX3N0YXJ0XyAgICAgICAgPSAwOworCQltX2xpbWl0XyAgICAgICAgPSBtX3JlcGxhY2VhYmxlXy5sZW5ndGgoKTsKKwl9CisJCisJLyoqCisgICAgICogQ29uc3RydWN0cyBhbiBpdGVyYXRvciBvdmVyIHRoZSBnaXZlbiByYW5nZSBvZiB0aGUgZ2l2ZW4gc3RyaW5nLgorICAgICAqIEBwYXJhbSAgdGV4dCAgdGV4dCB0byBiZSBpdGVyYXRlZCBvdmVyCisgICAgICogQHBhcmFtICBzdGFydCBvZmZzZXQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBpdGVyYXRlCisgICAgICogQHBhcmFtICBsaW1pdCBvZmZzZXQgb2YgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIHRvCisgICAgICogCQkJCQlpdGVyYXRlCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVDaGFyYWN0ZXJJdGVyYXRvcihTdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBsaW1pdCkgCisgICAgeworICAgIAltX3JlcGxhY2VhYmxlXyAgPSBuZXcgUmVwbGFjZWFibGVTdHJpbmcoc3RyKTsKKwkJbV9zdGFydF8gICAgICAgID0gc3RhcnQ7CisJCW1fbGltaXRfICAgICAgICA9IGxpbWl0OworCQltX2luZGV4XyAgICAgICAgPSBtX3N0YXJ0XzsKKyAgICB9ICAgCisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiBpdGVyYXRvciBvdmVyIHRoZSBnaXZlbiByYW5nZSBvZiB0aGUgZ2l2ZW4gcmVwbGFjZWFibGUgCisgICAgICogc3RyaW5nLgorICAgICAqIEBwYXJhbSAgdGV4dCAgdGV4dCB0byBiZSBpdGVyYXRlZCBvdmVyCisgICAgICogQHBhcmFtICBzdGFydCBvZmZzZXQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBpdGVyYXRlCisgICAgICogQHBhcmFtICBsaW1pdCBvZmZzZXQgb2YgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIHRvCisgICAgICogCQkJCQlpdGVyYXRlCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVDaGFyYWN0ZXJJdGVyYXRvcihSZXBsYWNlYWJsZSByZXBsYWNlYWJsZSwgaW50IHN0YXJ0LCBpbnQgbGltaXQpIAorICAgIHsKKyAgICAJbV9yZXBsYWNlYWJsZV8gID0gcmVwbGFjZWFibGU7CisJCW1fc3RhcnRfICAgICAgICA9IHN0YXJ0OworCQltX2xpbWl0XyAgICAgICAgPSBsaW1pdDsKKwkJbV9pbmRleF8gICAgICAgID0gbV9zdGFydF87CisgICAgfSAgIAorCQorCS8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKioKKyAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGl0ZXJhdG9yLgorICAgICAqIENsb25pbmcgd2lsbCBub3QgZHVwbGljYXRlIGEgbmV3IFJlcGxhY2VhYmxlIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuIGNvcHkgb2YgdGhpcyBpdGVyYXRvcgorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBzdXBlci5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigKKyAgICAgICAgICAgICJDbG9uaW5nIGJ5IHRoZSBzdXBlciBjbGFzcyBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3IgaXMgbm90ICIgKworICAgICAgICAgICAgInN1cHBvcnRlZCIpOworICAgICAgICB9CisgICAgfQorICAgIAorCS8qKgorICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgVVRGMTYgY2hhcmFjdGVyLgorICAgICAqIEByZXR1cm4gY3VycmVudCBVVEYxNiBjaGFyYWN0ZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBjdXJyZW50KCkKKyAgICB7CisgICAgICAgIGlmIChtX2luZGV4XyA+PSBtX3N0YXJ0XyAmJiBtX2luZGV4XyA8IG1fbGltaXRfKSB7CisgICAgICAgICAgICByZXR1cm4gbV9yZXBsYWNlYWJsZV8uY2hhckF0KG1faW5kZXhfKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRE9ORTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBjb2RlcG9pbnQKKyAgICAgKiBAcmV0dXJuIGN1cnJlbnQgY29kZXBvaW50CisgICAgICovCisgICAgcHVibGljIGludCBjdXJyZW50Q29kZVBvaW50KCkKKyAgICB7CisgICAgICAgIGlmIChtX2luZGV4XyA+PSBtX3N0YXJ0XyAmJiBtX2luZGV4XyA8IG1fbGltaXRfKSB7CisgICAgICAgICAgICByZXR1cm4gbV9yZXBsYWNlYWJsZV8uY2hhcjMyQXQobV9pbmRleF8pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBET05FX0NPREVQT0lOVDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZmlyc3QgVVRGMTYgY2hhcmFjdGVyIGluIHRleHQuCisgICAgICogQHJldHVybiB0aGUgZmlyc3QgVVRGMTYgaW4gdGV4dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBmaXJzdCgpCisgICAgeworICAgICAgICBtX2luZGV4XyA9IG1fc3RhcnRfOworICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdGFydCBvZiB0aGUgdGV4dCB0byBpdGVyYXRlLgorICAgICAqIEByZXR1cm4gYnkgZGVmYXVsdCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiAwLCB1bmxlc3MgYSByYW5nZSBmb3IgCisgICAgICogaXRlcmF0aW9uIGhhZCBiZWVuIHNwZWNpZmllZCBkdXJpbmcgY29uc3RydWN0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0QmVnaW5JbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydF87CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbGltaXQgb2Zmc2V0IG9mIHRoZSB0ZXh0IHRvIGl0ZXJhdGUKKyAgICAgKiBAcmV0dXJuIGJ5IGRlZmF1bHQgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0LCB1bmxlc3MgYSAKKyAgICAgKiByYW5nZSBmb3IgaXRlcmF0aW9uIGhhZCBiZWVuIHNwZWNpZmllZCBkdXJpbmcgY29uc3RydWN0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0RW5kSW5kZXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGltaXRfOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGluZGV4IGluIHRleHQuCisgICAgICogQHJldHVybiBjdXJyZW50IGluZGV4IGluIHRleHQuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleF87CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxhc3QgVVRGMTYgaXRlcmF0ZWFibGUgY2hhcmFjdGVyIGZyb20gdGhlIHRleHQgYW5kIHNoaWZ0cyB0aGUgCisgICAgICogaW5kZXggdG8gdGhlIGVuZCBvZiB0aGUgdGV4dCBhY2NvcmRpbmdseS4KKyAgICAgKiBAcmV0dXJuIHRoZSBsYXN0IFVURjE2IGl0ZXJhdGVhYmxlIGNoYXJhY3RlcgorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGxhc3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGltaXRfICE9IG1fc3RhcnRfKSB7CisgICAgICAgICAgICBtX2luZGV4XyA9IG1fbGltaXRfIC0gMTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlcGxhY2VhYmxlXy5jaGFyQXQobV9pbmRleF8pOworICAgICAgICB9IAorCQltX2luZGV4XyA9IG1fbGltaXRfOworICAgICAgICByZXR1cm4gRE9ORTsKKyAgICB9CisgICAgCisJLyoqCisgICAgICogUmV0dXJucyBuZXh0IFVURjE2IGNoYXJhY3RlciBhbmQgaW5jcmVtZW50cyB0aGUgaXRlcmF0b3IncyBpbmRleCBieSAxLiAKKwkgKiBJZiB0aGUgcmVzdWx0aW5nIGluZGV4IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIGl0ZXJhdGlvbiBsaW1pdCwgdGhlIAorCSAqIGluZGV4IGlzIHJlc2V0IHRvIHRoZSB0ZXh0IGl0ZXJhdGlvbiBsaW1pdCBhbmQgYSB2YWx1ZSBvZiBET05FX0NPREVQT0lOVCBpcyAKKwkgKiByZXR1cm5lZC4gCisJICogQHJldHVybiBuZXh0IFVURjE2IGNoYXJhY3RlciBpbiB0ZXh0IG9yIERPTkUgaWYgdGhlIG5ldyBpbmRleCBpcyBvZmYgdGhlIAorCSAqICAgICAgICAgZW5kIG9mIHRoZSB0ZXh0IGl0ZXJhdGlvbiBsaW1pdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBuZXh0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2luZGV4XyA8IG1fbGltaXRfKSB7CisgICAgICAgIAljaGFyIHJlc3VsdCA9IG1fcmVwbGFjZWFibGVfLmNoYXJBdChtX2luZGV4Xyk7CisgICAgICAgICAgICBtX2luZGV4XyArKzsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIERPTkU7CisgICAgfQorCisJLyoqCisJICogUmV0dXJucyBuZXh0IGNvZGVwb2ludCBhZnRlciBjdXJyZW50IGluZGV4IGFuZCBpbmNyZW1lbnRzIHRoZSBpdGVyYXRvcidzIAorCSAqIGluZGV4IGJ5IGEgbnVtYmVyIGRlcGVuZGluZyBvbiB0aGUgcmV0dXJuZWQgY29kZXBvaW50LiAKKwkgKiBUaGlzIGFzc3VtZXMgdGhlIHRleHQgaXMgc3RvcmVkIGFzIDE2LWJpdCBjb2RlIHVuaXRzCisgICAgICogd2l0aCBzdXJyb2dhdGUgcGFpcnMgaW50ZXJtaXhlZC4gSWYgdGhlIGluZGV4IG9mIGEgbGVhZGluZyBvciB0cmFpbGluZyAKKyAgICAgKiBjb2RlIHVuaXQgb2YgYSBzdXJyb2dhdGUgcGFpciBpcyBnaXZlbiwgcmV0dXJuIHRoZSBjb2RlIHBvaW50IGFmdGVyIHRoZSAKKyAgICAgKiBzdXJyb2dhdGUgcGFpci4KKwkgKiBJZiB0aGUgcmVzdWx0aW5nIGluZGV4IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIHRleHQgaXRlcmF0ZWFibGUgbGltaXQsCisJICogdGhlIGN1cnJlbnQgaW5kZXggaXMgcmVzZXQgdG8gdGhlIHRleHQgaXRlcmF0ZWFibGUgbGltaXQgYW5kIGEgdmFsdWUgb2YgCisJICogRE9ORV9DT0RFUE9JTlQgaXMgcmV0dXJuZWQuIAorCSAqIEByZXR1cm4gbmV4dCBjb2RlcG9pbnQgaW4gdGV4dCBvciBET05FX0NPREVQT0lOVCBpZiB0aGUgbmV3IGluZGV4IGlzIG9mZiB0aGUgCisJICogICAgICAgICBlbmQgb2YgdGhlIHRleHQgaXRlcmF0ZWFibGUgbGltaXQuCisJICovCQorCXB1YmxpYyBpbnQgbmV4dENvZGVQb2ludCgpCisJeworICAgICAgICBpZiAobV9pbmRleF8gPCBtX2xpbWl0XykgeworICAgICAgICAgICAgY2hhciBjaCA9IG1fcmVwbGFjZWFibGVfLmNoYXJBdChtX2luZGV4Xyk7CisgICAgICAgICAgICBtX2luZGV4XyArKzsKKyAgICAgICAgICAgIGlmIChjaCA+PSBVVEYxNi5MRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgJiYKKyAgICAgICAgICAgICAgICBjaCA8PSBVVEYxNi5MRUFEX1NVUlJPR0FURV9NQVhfVkFMVUUgJiYKKyAgICAgICAgICAgICAgICBtX2luZGV4XyA8IG1fbGltaXRfKSB7CisgICAgICAgICAgICAgICAgY2hhciB0cmFpbCA9IG1fcmVwbGFjZWFibGVfLmNoYXJBdChtX2luZGV4Xyk7CisgICAgICAgICAgICAgICAgaWYgKHRyYWlsID49IFVURjE2LlRSQUlMX1NVUlJPR0FURV9NSU5fVkFMVUUgJiYKKyAgICAgICAgICAgICAgICAgICAgdHJhaWwgPD0gVVRGMTYuVFJBSUxfU1VSUk9HQVRFX01BWF9WQUxVRSkgeworICAgICAgICAgICAgICAgICAgICBtX2luZGV4XyArKzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRSYXdTdXBwbGVtZW50YXJ5KGNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY2g7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIERPTkVfQ09ERVBPSU5UOworCX0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgcHJldmlvdXMgVVRGMTYgY2hhcmFjdGVyIGFuZCBkZWNyZW1lbnRzIHRoZSBpdGVyYXRvcidzIGluZGV4IGJ5IAorICAgICAqIDEuIAorCSAqIElmIHRoZSByZXN1bHRpbmcgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSB0ZXh0IGl0ZXJhdGVhYmxlIGxpbWl0LCB0aGUgCisJICogaW5kZXggaXMgcmVzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IGl0ZXJhdGlvbiBhbmQgYSB2YWx1ZSBvZiAKKwkgKiBET05FX0NPREVQT0lOVCBpcyByZXR1cm5lZC4gCisJICogQHJldHVybiBuZXh0IFVURjE2IGNoYXJhY3RlciBpbiB0ZXh0IG9yIERPTkUgaWYgdGhlIG5ldyBpbmRleCBpcyBvZmYgdGhlIAorCSAqICAgICAgICAgc3RhcnQgb2YgdGhlIHRleHQgaXRlcmF0aW9uIHJhbmdlLgorICAgICAqLworICAgIHB1YmxpYyBjaGFyIHByZXZpb3VzKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luZGV4XyA+IG1fc3RhcnRfKSB7CisgICAgICAgICAgICBtX2luZGV4XyAtLTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlcGxhY2VhYmxlXy5jaGFyQXQobV9pbmRleF8pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBET05FOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHByZXZpb3VzIGNvZGVwb2ludCBiZWZvcmUgY3VycmVudCBpbmRleCBhbmQgZGVjcmVtZW50cyB0aGUgCisgICAgICogaXRlcmF0b3IncyBpbmRleCBieSBhIG51bWJlciBkZXBlbmRpbmcgb24gdGhlIHJldHVybmVkIGNvZGVwb2ludC4gCisJICogVGhpcyBhc3N1bWVzIHRoZSB0ZXh0IGlzIHN0b3JlZCBhcyAxNi1iaXQgY29kZSB1bml0cworICAgICAqIHdpdGggc3Vycm9nYXRlIHBhaXJzIGludGVybWl4ZWQuIElmIHRoZSBpbmRleCBvZiBhIGxlYWRpbmcgb3IgdHJhaWxpbmcgCisgICAgICogY29kZSB1bml0IG9mIGEgc3Vycm9nYXRlIHBhaXIgaXMgZ2l2ZW4sIHJldHVybiB0aGUgY29kZSBwb2ludCBiZWZvcmUgdGhlIAorICAgICAqIHN1cnJvZ2F0ZSBwYWlyLgorCSAqIElmIHRoZSByZXN1bHRpbmcgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSB0ZXh0IGl0ZXJhdGVhYmxlIHJhbmdlLCB0aGUgCisJICogY3VycmVudCBpbmRleCBpcyByZXNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIGFuZCBhIHZhbHVlIG9mIAorCSAqIERPTkVfQ09ERVBPSU5UIGlzIHJldHVybmVkLiAKKwkgKiBAcmV0dXJuIHByZXZpb3VzIGNvZGVwb2ludCBpbiB0ZXh0IG9yIERPTkVfQ09ERVBPSU5UIGlmIHRoZSBuZXcgaW5kZXggaXMgCisJICogICAgICAgICBvZmYgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IGl0ZXJhdGlvbiByYW5nZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHByZXZpb3VzQ29kZVBvaW50KCkKKyAgICB7CisgICAgICAgIGlmIChtX2luZGV4XyA+IG1fc3RhcnRfKSB7CisgICAgICAgICAgICBtX2luZGV4XyAtLTsKKyAgICAgICAgICAgIGNoYXIgY2ggPSBtX3JlcGxhY2VhYmxlXy5jaGFyQXQobV9pbmRleF8pOworICAgICAgICAgICAgaWYgKGNoID49IFVURjE2LlRSQUlMX1NVUlJPR0FURV9NSU5fVkFMVUUgJiYKKyAgICAgICAgICAgICAgICBjaCA8PSBVVEYxNi5UUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFICYmCisgICAgICAgICAgICAgICAgbV9pbmRleF8gPiBtX3N0YXJ0XykgeworICAgICAgICAgICAgICAgIG1faW5kZXhfIC0tOworICAgICAgICAgICAgICAgIGNoYXIgbGVhZCA9IG1fcmVwbGFjZWFibGVfLmNoYXJBdChtX2luZGV4Xyk7CisgICAgICAgICAgICAgICAgaWYgKGxlYWQgPj0gVVRGMTYuTEVBRF9TVVJST0dBVEVfTUlOX1ZBTFVFICYmCisgICAgICAgICAgICAgICAgICAgIGxlYWQgPD0gVVRGMTYuTEVBRF9TVVJST0dBVEVfTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeShsZWFkLGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY2g7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIERPTkVfQ09ERVBPSU5UOworICAgIH0KKworCS8qKgorCSAqIDxwPlNldHMgdGhlIGluZGV4IHRvIHRoZSBzcGVjaWZpZWQgaW5kZXggaW4gdGhlIHRleHQgYW5kIHJldHVybnMgdGhhdCAKKwkgKiBzaW5nbGUgVVRGMTYgY2hhcmFjdGVyIGF0IGluZGV4LiAKKwkgKiBUaGlzIGFzc3VtZXMgdGhlIHRleHQgaXMgc3RvcmVkIGFzIDE2LWJpdCBjb2RlIHVuaXRzLjwvcD4KKwkgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IHdpdGhpbiB0aGUgdGV4dC4gCisJICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaXMgdGhyb3duIGlmIGFuIGludmFsaWQgaW5kZXggaXMgCisJICogICAgICAgICAgICBzdXBwbGllZC4gaS5lLiBpbmRleCBpcyBvdXQgb2YgYm91bmRzLgorCSAqIEByZXR1cm4gdGhlIGNoYXJhY3RlciBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IG9yIERPTkUgaWYgdGhlIHNwZWNpZmllZCAKKwkgKiAgICAgICAgIGluZGV4IGlzIGVxdWFsIHRvIHRoZSBsaW1pdCBvZiB0aGUgdGV4dCBpdGVyYXRpb24gcmFuZ2UuCisJICovCisJcHVibGljIGNoYXIgc2V0SW5kZXgoaW50IGluZGV4KQorCXsKKwkJaWYgKGluZGV4IDwgbV9zdGFydF8gfHwgaW5kZXggPiBtX2xpbWl0XykgeworCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW5kZXggaW5kZXggb3V0IG9mIGJvdW5kcyIpOworCQl9CisJCW1faW5kZXhfID0gaW5kZXg7CisJCXJldHVybiBjdXJyZW50KCk7CisJfQorCQorCS8vIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKioKKwkgKiBSZXBsYWNhYmxlIG9iamVjdAorCSAqLworCXByaXZhdGUgUmVwbGFjZWFibGUgbV9yZXBsYWNlYWJsZV87CisJLyoqCisJICogQ3VycmVudCBpbmRleAorCSAqLworCXByaXZhdGUgaW50IG1faW5kZXhfOworCS8qKgorCSAqIFN0YXJ0IG9mZnNldCBvZiBpdGVyYXRlYWJsZSByYW5nZSwgYnkgZGVmYXVsdCB0aGlzIGlzIDAKKwkgKi8KKwlwcml2YXRlIGludCBtX3N0YXJ0XzsKKwkvKioKKwkgKiBMaW1pdCBvZmZzZXQgb2YgaXRlcmF0ZWFibGUgcmFuZ2UsIGJ5IGRlZmF1bHQgdGhpcyBpcyB0aGUgbGVuZ3RoIG9mIHRoZQorCSAqIHN0cmluZworCSAqLworCXByaXZhdGUgaW50IG1fbGltaXRfOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVXRpbGl0eS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvVXRpbGl0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkMDA2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9VdGlsaXR5LmphdmEKQEAgLTAsMCArMSwxNjUwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9VdGlsaXR5LmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMS8wNyAyMzoxNDo0NiAkCisgKiAkUmV2aXNpb246IDEuMzMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGw7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKKworcHVibGljIGZpbmFsIGNsYXNzIFV0aWxpdHkgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBBUE9TVFJPUEhFID0gJ1wnJzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEJBQ0tTTEFTSCAgPSAnXFwnOworICAgIAorICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIHV0aWxpdHkgdG8gY29tcGFyZSB0d28gT2JqZWN0W11zLgorICAgICAqIE91Z2h0IHRvIGJlIGluIFN5c3RlbQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBhcnJheUVxdWFscyhPYmplY3RbXSBzb3VyY2UsIE9iamVjdCB0YXJnZXQpIHsKKyAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4gKHRhcmdldCA9PSBudWxsKTsKKyAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgT2JqZWN0W10pKSByZXR1cm4gZmFsc2U7CisgICAgICAgIE9iamVjdFtdIHRhcmcgPSAoT2JqZWN0W10pIHRhcmdldDsKKyAgICAgICAgcmV0dXJuIChzb3VyY2UubGVuZ3RoID09IHRhcmcubGVuZ3RoCisgICAgICAgICAgICAgICAgJiYgYXJyYXlSZWdpb25NYXRjaGVzKHNvdXJjZSwgMCwgdGFyZywgMCwgc291cmNlLmxlbmd0aCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIHV0aWxpdHkgdG8gY29tcGFyZSB0d28gaW50W11zCisgICAgICogT3VnaHQgdG8gYmUgaW4gU3lzdGVtCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGFycmF5RXF1YWxzKGludFtdIHNvdXJjZSwgT2JqZWN0IHRhcmdldCkgeworICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiAodGFyZ2V0ID09IG51bGwpOworICAgICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBpbnRbXSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW50W10gdGFyZyA9IChpbnRbXSkgdGFyZ2V0OworICAgICAgICByZXR1cm4gKHNvdXJjZS5sZW5ndGggPT0gdGFyZy5sZW5ndGgKKyAgICAgICAgICAgICAgICAmJiBhcnJheVJlZ2lvbk1hdGNoZXMoc291cmNlLCAwLCB0YXJnLCAwLCBzb3VyY2UubGVuZ3RoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgdXRpbGl0eSB0byBjb21wYXJlIHR3byBkb3VibGVbXXMKKyAgICAgKiBPdWdodCB0byBiZSBpbiBTeXN0ZW0KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGJvb2xlYW4gYXJyYXlFcXVhbHMoZG91YmxlW10gc291cmNlLCBPYmplY3QgdGFyZ2V0KSB7CisgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuICh0YXJnZXQgPT0gbnVsbCk7CisgICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIGRvdWJsZVtdKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBkb3VibGVbXSB0YXJnID0gKGRvdWJsZVtdKSB0YXJnZXQ7CisgICAgICAgIHJldHVybiAoc291cmNlLmxlbmd0aCA9PSB0YXJnLmxlbmd0aAorICAgICAgICAgICAgICAgICYmIGFycmF5UmVnaW9uTWF0Y2hlcyhzb3VyY2UsIDAsIHRhcmcsIDAsIHNvdXJjZS5sZW5ndGgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSB1dGlsaXR5IHRvIGNvbXBhcmUgdHdvIE9iamVjdFtdcworICAgICAqIE91Z2h0IHRvIGJlIGluIFN5c3RlbQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBhcnJheUVxdWFscyhPYmplY3Qgc291cmNlLCBPYmplY3QgdGFyZ2V0KSB7CisgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuICh0YXJnZXQgPT0gbnVsbCk7CisgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiwgdGhlIGNvcnJlY3QgYXJyYXlFcXVhbHMgaXMgbm90IGJlaW5nIGNhbGxlZAorICAgICAgICAvLyBzbyBkbyBpdCBieSBoYW5kIGZvciBub3cuCisgICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBPYmplY3RbXSkKKyAgICAgICAgICAgIHJldHVybihhcnJheUVxdWFscygoT2JqZWN0W10pIHNvdXJjZSx0YXJnZXQpKTsKKyAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIGludFtdKQorICAgICAgICAgICAgcmV0dXJuKGFycmF5RXF1YWxzKChpbnRbXSkgc291cmNlLHRhcmdldCkpOworICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgZG91YmxlW10pCisgICAgICAgICAgICByZXR1cm4oYXJyYXlFcXVhbHMoKGludFtdKSBzb3VyY2UsdGFyZ2V0KSk7CisgICAgICAgIHJldHVybiBzb3VyY2UuZXF1YWxzKHRhcmdldCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgdXRpbGl0eSB0byBjb21wYXJlIHR3byBPYmplY3RbXXMKKyAgICAgKiBPdWdodCB0byBiZSBpbiBTeXN0ZW0uCisgICAgICogQHBhcmFtIGxlbiB0aGUgbGVuZ3RoIHRvIGNvbXBhcmUuCisgICAgICogVGhlIHN0YXJ0IGluZGljZXMgYW5kIHN0YXJ0K2xlbiBtdXN0IGJlIHZhbGlkLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBhcnJheVJlZ2lvbk1hdGNoZXMoT2JqZWN0W10gc291cmNlLCBpbnQgc291cmNlU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFtdIHRhcmdldCwgaW50IHRhcmdldFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKQorICAgIHsKKyAgICAgICAgaW50IHNvdXJjZUVuZCA9IHNvdXJjZVN0YXJ0ICsgbGVuOworICAgICAgICBpbnQgZGVsdGEgPSB0YXJnZXRTdGFydCAtIHNvdXJjZVN0YXJ0OworICAgICAgICBmb3IgKGludCBpID0gc291cmNlU3RhcnQ7IGkgPCBzb3VyY2VFbmQ7IGkrKykgeworICAgICAgICAgICAgaWYgKCFhcnJheUVxdWFscyhzb3VyY2VbaV0sdGFyZ2V0W2kgKyBkZWx0YV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIHV0aWxpdHkgdG8gY29tcGFyZSB0d28gT2JqZWN0W11zCisgICAgICogT3VnaHQgdG8gYmUgaW4gU3lzdGVtLgorICAgICAqIEBwYXJhbSBsZW4gdGhlIGxlbmd0aCB0byBjb21wYXJlLgorICAgICAqIFRoZSBzdGFydCBpbmRpY2VzIGFuZCBzdGFydCtsZW4gbXVzdCBiZSB2YWxpZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGJvb2xlYW4gYXJyYXlSZWdpb25NYXRjaGVzKGNoYXJbXSBzb3VyY2UsIGludCBzb3VyY2VTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIHRhcmdldCwgaW50IHRhcmdldFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKQorICAgIHsKKyAgICAgICAgaW50IHNvdXJjZUVuZCA9IHNvdXJjZVN0YXJ0ICsgbGVuOworICAgICAgICBpbnQgZGVsdGEgPSB0YXJnZXRTdGFydCAtIHNvdXJjZVN0YXJ0OworICAgICAgICBmb3IgKGludCBpID0gc291cmNlU3RhcnQ7IGkgPCBzb3VyY2VFbmQ7IGkrKykgeworICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSE9dGFyZ2V0W2kgKyBkZWx0YV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIHV0aWxpdHkgdG8gY29tcGFyZSB0d28gaW50W11zLgorICAgICAqIEBwYXJhbSBsZW4gdGhlIGxlbmd0aCB0byBjb21wYXJlLgorICAgICAqIFRoZSBzdGFydCBpbmRpY2VzIGFuZCBzdGFydCtsZW4gbXVzdCBiZSB2YWxpZC4KKyAgICAgKiBPdWdodCB0byBiZSBpbiBTeXN0ZW0KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGJvb2xlYW4gYXJyYXlSZWdpb25NYXRjaGVzKGludFtdIHNvdXJjZSwgaW50IHNvdXJjZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSB0YXJnZXQsIGludCB0YXJnZXRTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbikKKyAgICB7CisgICAgICAgIGludCBzb3VyY2VFbmQgPSBzb3VyY2VTdGFydCArIGxlbjsKKyAgICAgICAgaW50IGRlbHRhID0gdGFyZ2V0U3RhcnQgLSBzb3VyY2VTdGFydDsKKyAgICAgICAgZm9yIChpbnQgaSA9IHNvdXJjZVN0YXJ0OyBpIDwgc291cmNlRW5kOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChzb3VyY2VbaV0gIT0gdGFyZ2V0W2kgKyBkZWx0YV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgdXRpbGl0eSB0byBjb21wYXJlIHR3byBhcnJheXMgb2YgZG91Ymxlcy4KKyAgICAgKiBAcGFyYW0gbGVuIHRoZSBsZW5ndGggdG8gY29tcGFyZS4KKyAgICAgKiBUaGUgc3RhcnQgaW5kaWNlcyBhbmQgc3RhcnQrbGVuIG11c3QgYmUgdmFsaWQuCisgICAgICogT3VnaHQgdG8gYmUgaW4gU3lzdGVtCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIGFycmF5UmVnaW9uTWF0Y2hlcyhkb3VibGVbXSBzb3VyY2UsIGludCBzb3VyY2VTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlW10gdGFyZ2V0LCBpbnQgdGFyZ2V0U3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pCisgICAgeworICAgICAgICBpbnQgc291cmNlRW5kID0gc291cmNlU3RhcnQgKyBsZW47CisgICAgICAgIGludCBkZWx0YSA9IHRhcmdldFN0YXJ0IC0gc291cmNlU3RhcnQ7CisgICAgICAgIGZvciAoaW50IGkgPSBzb3VyY2VTdGFydDsgaSA8IHNvdXJjZUVuZDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc291cmNlW2ldICE9IHRhcmdldFtpICsgZGVsdGFdKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIHV0aWxpdHkuIERvZXMgbnVsbCBjaGVja3Mgb24gb2JqZWN0cywgdGhlbiBjYWxscyBlcXVhbHMuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIG9iamVjdEVxdWFscyhPYmplY3Qgc291cmNlLCBPYmplY3QgdGFyZ2V0KSB7CisgICAgaWYgKHNvdXJjZSA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuICh0YXJnZXQgPT0gbnVsbCk7CisgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5lcXVhbHModGFyZ2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgRVNDQVBFIGNoYXJhY3RlciBpcyB1c2VkIGR1cmluZyBydW4tbGVuZ3RoIGVuY29kaW5nLiAgSXQgc2lnbmFscworICAgICAqIGEgcnVuIG9mIGlkZW50aWNhbCBjaGFycy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEVTQ0FQRSA9ICdcdUE1QTUnOworCisgICAgLyoqCisgICAgICogVGhlIEVTQ0FQRV9CWVRFIGNoYXJhY3RlciBpcyB1c2VkIGR1cmluZyBydW4tbGVuZ3RoIGVuY29kaW5nLiAgSXQgc2lnbmFscworICAgICAqIGEgcnVuIG9mIGlkZW50aWNhbCBieXRlcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgYnl0ZSBFU0NBUEVfQllURSA9IChieXRlKTB4QTU7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIGludCBhcnJheS4gIFVzZSBydW4tbGVuZ3RoIGVuY29kaW5nLgorICAgICAqIEEgY2hhcmFjdGVyIHJlcHJlc2VudHMgaXRzZWxmLCB1bmxlc3MgaXQgaXMgdGhlIEVTQ0FQRSBjaGFyYWN0ZXIuICBUaGVuCisgICAgICogdGhlIGZvbGxvd2luZyBub3RhdGlvbnMgYXJlIHBvc3NpYmxlOgorICAgICAqICAgRVNDQVBFIEVTQ0FQRSAgIEVTQ0FQRSBsaXRlcmFsCisgICAgICogICBFU0NBUEUgbiBjICAgICAgbiBpbnN0YW5jZXMgb2YgY2hhcmFjdGVyIGMKKyAgICAgKiBTaW5jZSBhbiBlbmNvZGVkIHJ1biBvY2N1cGllcyAzIGNoYXJhY3RlcnMsIHdlIG9ubHkgZW5jb2RlIHJ1bnMgb2YgNCBvcgorICAgICAqIG1vcmUgY2hhcmFjdGVycy4gIFRodXMgd2UgaGF2ZSBuID4gMCBhbmQgbiAhPSBFU0NBUEUgYW5kIG4gPD0gMHhGRkZGLgorICAgICAqIElmIHdlIGVuY291bnRlciBhIHJ1biB3aGVyZSBuID09IEVTQ0FQRSwgd2UgcmVwcmVzZW50IHRoaXMgYXM6CisgICAgICogICBjIEVTQ0FQRSBuLTEgYworICAgICAqIFRoZSBFU0NBUEUgdmFsdWUgaXMgY2hvc2VuIHNvIGFzIG5vdCB0byBjb2xsaWRlIHdpdGggY29tbW9ubHkKKyAgICAgKiBzZWVuIHZhbHVlcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIFN0cmluZyBhcnJheVRvUkxFU3RyaW5nKGludFtdIGEpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgICAgICBhcHBlbmRJbnQoYnVmZmVyLCBhLmxlbmd0aCk7CisgICAgICAgIGludCBydW5WYWx1ZSA9IGFbMF07CisgICAgICAgIGludCBydW5MZW5ndGggPSAxOworICAgICAgICBmb3IgKGludCBpPTE7IGk8YS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaW50IHMgPSBhW2ldOworICAgICAgICAgICAgaWYgKHMgPT0gcnVuVmFsdWUgJiYgcnVuTGVuZ3RoIDwgMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgKytydW5MZW5ndGg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVuY29kZVJ1bihidWZmZXIsIHJ1blZhbHVlLCBydW5MZW5ndGgpOworICAgICAgICAgICAgICAgIHJ1blZhbHVlID0gczsKKyAgICAgICAgICAgICAgICBydW5MZW5ndGggPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVuY29kZVJ1bihidWZmZXIsIHJ1blZhbHVlLCBydW5MZW5ndGgpOworICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHNob3J0IGFycmF5LiAgVXNlIHJ1bi1sZW5ndGggZW5jb2RpbmcuCisgICAgICogQSBjaGFyYWN0ZXIgcmVwcmVzZW50cyBpdHNlbGYsIHVubGVzcyBpdCBpcyB0aGUgRVNDQVBFIGNoYXJhY3Rlci4gIFRoZW4KKyAgICAgKiB0aGUgZm9sbG93aW5nIG5vdGF0aW9ucyBhcmUgcG9zc2libGU6CisgICAgICogICBFU0NBUEUgRVNDQVBFICAgRVNDQVBFIGxpdGVyYWwKKyAgICAgKiAgIEVTQ0FQRSBuIGMgICAgICBuIGluc3RhbmNlcyBvZiBjaGFyYWN0ZXIgYworICAgICAqIFNpbmNlIGFuIGVuY29kZWQgcnVuIG9jY3VwaWVzIDMgY2hhcmFjdGVycywgd2Ugb25seSBlbmNvZGUgcnVucyBvZiA0IG9yCisgICAgICogbW9yZSBjaGFyYWN0ZXJzLiAgVGh1cyB3ZSBoYXZlIG4gPiAwIGFuZCBuICE9IEVTQ0FQRSBhbmQgbiA8PSAweEZGRkYuCisgICAgICogSWYgd2UgZW5jb3VudGVyIGEgcnVuIHdoZXJlIG4gPT0gRVNDQVBFLCB3ZSByZXByZXNlbnQgdGhpcyBhczoKKyAgICAgKiAgIGMgRVNDQVBFIG4tMSBjCisgICAgICogVGhlIEVTQ0FQRSB2YWx1ZSBpcyBjaG9zZW4gc28gYXMgbm90IHRvIGNvbGxpZGUgd2l0aCBjb21tb25seQorICAgICAqIHNlZW4gdmFsdWVzLgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgZmluYWwgU3RyaW5nIGFycmF5VG9STEVTdHJpbmcoc2hvcnRbXSBhKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIC8vIGZvciAoaW50IGk9MDsgaTxhLmxlbmd0aDsgKytpKSBidWZmZXIuYXBwZW5kKChjaGFyKSBhW2ldKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcikgKGEubGVuZ3RoID4+IDE2KSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpIGEubGVuZ3RoKTsKKyAgICAgICAgc2hvcnQgcnVuVmFsdWUgPSBhWzBdOworICAgICAgICBpbnQgcnVuTGVuZ3RoID0gMTsKKyAgICAgICAgZm9yIChpbnQgaT0xOyBpPGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHNob3J0IHMgPSBhW2ldOworICAgICAgICAgICAgaWYgKHMgPT0gcnVuVmFsdWUgJiYgcnVuTGVuZ3RoIDwgMHhGRkZGKSArK3J1bkxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5jb2RlUnVuKGJ1ZmZlciwgcnVuVmFsdWUsIHJ1bkxlbmd0aCk7CisgICAgICAgICAgICBydW5WYWx1ZSA9IHM7CisgICAgICAgICAgICBydW5MZW5ndGggPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVuY29kZVJ1bihidWZmZXIsIHJ1blZhbHVlLCBydW5MZW5ndGgpOworICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNoYXIgYXJyYXkuICBVc2UgcnVuLWxlbmd0aCBlbmNvZGluZy4KKyAgICAgKiBBIGNoYXJhY3RlciByZXByZXNlbnRzIGl0c2VsZiwgdW5sZXNzIGl0IGlzIHRoZSBFU0NBUEUgY2hhcmFjdGVyLiAgVGhlbgorICAgICAqIHRoZSBmb2xsb3dpbmcgbm90YXRpb25zIGFyZSBwb3NzaWJsZToKKyAgICAgKiAgIEVTQ0FQRSBFU0NBUEUgICBFU0NBUEUgbGl0ZXJhbAorICAgICAqICAgRVNDQVBFIG4gYyAgICAgIG4gaW5zdGFuY2VzIG9mIGNoYXJhY3RlciBjCisgICAgICogU2luY2UgYW4gZW5jb2RlZCBydW4gb2NjdXBpZXMgMyBjaGFyYWN0ZXJzLCB3ZSBvbmx5IGVuY29kZSBydW5zIG9mIDQgb3IKKyAgICAgKiBtb3JlIGNoYXJhY3RlcnMuICBUaHVzIHdlIGhhdmUgbiA+IDAgYW5kIG4gIT0gRVNDQVBFIGFuZCBuIDw9IDB4RkZGRi4KKyAgICAgKiBJZiB3ZSBlbmNvdW50ZXIgYSBydW4gd2hlcmUgbiA9PSBFU0NBUEUsIHdlIHJlcHJlc2VudCB0aGlzIGFzOgorICAgICAqICAgYyBFU0NBUEUgbi0xIGMKKyAgICAgKiBUaGUgRVNDQVBFIHZhbHVlIGlzIGNob3NlbiBzbyBhcyBub3QgdG8gY29sbGlkZSB3aXRoIGNvbW1vbmx5CisgICAgICogc2VlbiB2YWx1ZXMuCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXJyYXlUb1JMRVN0cmluZyhjaGFyW10gYSkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKSAoYS5sZW5ndGggPj4gMTYpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcikgYS5sZW5ndGgpOworICAgICAgICBjaGFyIHJ1blZhbHVlID0gYVswXTsKKyAgICAgICAgaW50IHJ1bkxlbmd0aCA9IDE7CisgICAgICAgIGZvciAoaW50IGk9MTsgaTxhLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjaGFyIHMgPSBhW2ldOworICAgICAgICAgICAgaWYgKHMgPT0gcnVuVmFsdWUgJiYgcnVuTGVuZ3RoIDwgMHhGRkZGKSArK3J1bkxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5jb2RlUnVuKGJ1ZmZlciwgKHNob3J0KXJ1blZhbHVlLCBydW5MZW5ndGgpOworICAgICAgICAgICAgcnVuVmFsdWUgPSBzOworICAgICAgICAgICAgcnVuTGVuZ3RoID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbmNvZGVSdW4oYnVmZmVyLCAoc2hvcnQpcnVuVmFsdWUsIHJ1bkxlbmd0aCk7CisgICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgYnl0ZSBhcnJheS4gIFVzZSBydW4tbGVuZ3RoIGVuY29kaW5nLgorICAgICAqIFR3byBieXRlcyBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUgY2hhciwgd2l0aCBhIHNpbmdsZSBleHRyYSB6ZXJvIGJ5dGUgYXQKKyAgICAgKiB0aGUgZW5kIGlmIG5lZWRlZC4gIEEgYnl0ZSByZXByZXNlbnRzIGl0c2VsZiwgdW5sZXNzIGl0IGlzIHRoZQorICAgICAqIEVTQ0FQRV9CWVRFLiAgVGhlbiB0aGUgZm9sbG93aW5nIG5vdGF0aW9ucyBhcmUgcG9zc2libGU6CisgICAgICogICBFU0NBUEVfQllURSBFU0NBUEVfQllURSAgIEVTQ0FQRV9CWVRFIGxpdGVyYWwKKyAgICAgKiAgIEVTQ0FQRV9CWVRFIG4gYiAgICAgICAgICAgbiBpbnN0YW5jZXMgb2YgYnl0ZSBiCisgICAgICogU2luY2UgYW4gZW5jb2RlZCBydW4gb2NjdXBpZXMgMyBieXRlcywgd2Ugb25seSBlbmNvZGUgcnVucyBvZiA0IG9yCisgICAgICogbW9yZSBieXRlcy4gIFRodXMgd2UgaGF2ZSBuID4gMCBhbmQgbiAhPSBFU0NBUEVfQllURSBhbmQgbiA8PSAweEZGLgorICAgICAqIElmIHdlIGVuY291bnRlciBhIHJ1biB3aGVyZSBuID09IEVTQ0FQRV9CWVRFLCB3ZSByZXByZXNlbnQgdGhpcyBhczoKKyAgICAgKiAgIGIgRVNDQVBFX0JZVEUgbi0xIGIKKyAgICAgKiBUaGUgRVNDQVBFX0JZVEUgdmFsdWUgaXMgY2hvc2VuIHNvIGFzIG5vdCB0byBjb2xsaWRlIHdpdGggY29tbW9ubHkKKyAgICAgKiBzZWVuIHZhbHVlcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIFN0cmluZyBhcnJheVRvUkxFU3RyaW5nKGJ5dGVbXSBhKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpIChhLmxlbmd0aCA+PiAxNikpOworICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKSBhLmxlbmd0aCk7CisgICAgICAgIGJ5dGUgcnVuVmFsdWUgPSBhWzBdOworICAgICAgICBpbnQgcnVuTGVuZ3RoID0gMTsKKyAgICAgICAgYnl0ZVtdIHN0YXRlID0gbmV3IGJ5dGVbMl07CisgICAgICAgIGZvciAoaW50IGk9MTsgaTxhLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBieXRlIGIgPSBhW2ldOworICAgICAgICAgICAgaWYgKGIgPT0gcnVuVmFsdWUgJiYgcnVuTGVuZ3RoIDwgMHhGRikgKytydW5MZW5ndGg7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbmNvZGVSdW4oYnVmZmVyLCBydW5WYWx1ZSwgcnVuTGVuZ3RoLCBzdGF0ZSk7CisgICAgICAgICAgICAgICAgcnVuVmFsdWUgPSBiOworICAgICAgICAgICAgICAgIHJ1bkxlbmd0aCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZW5jb2RlUnVuKGJ1ZmZlciwgcnVuVmFsdWUsIHJ1bkxlbmd0aCwgc3RhdGUpOworCisgICAgICAgIC8vIFdlIG11c3Qgc2F2ZSB0aGUgZmluYWwgYnl0ZSwgaWYgdGhlcmUgaXMgb25lLCBieSBwYWRkaW5nCisgICAgICAgIC8vIGFuIGV4dHJhIHplcm8uCisgICAgICAgIGlmIChzdGF0ZVswXSAhPSAwKSBhcHBlbmRFbmNvZGVkQnl0ZShidWZmZXIsIChieXRlKTAsIHN0YXRlKTsKKworICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5jb2RlIGEgcnVuLCBwb3NzaWJseSBhIGRlZ2VuZXJhdGUgcnVuIChvZiA8IDQgdmFsdWVzKS4KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJ1bjsgbXVzdCBiZSA+IDAgJiYgPD0gMHhGRkZGLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgZW5jb2RlUnVuKFN0cmluZ0J1ZmZlciBidWZmZXIsIGludCB2YWx1ZSwgaW50IGxlbmd0aCkgeworICAgICAgICBpZiAobGVuZ3RoIDwgNCkgeworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IEVTQ0FQRSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJbnQoYnVmZmVyLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFwcGVuZEludChidWZmZXIsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gKGludCkgRVNDQVBFKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IChpbnQpIEVTQ0FQRSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJbnQoYnVmZmVyLCBFU0NBUEUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcHBlbmRJbnQoYnVmZmVyLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgLS1sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmRJbnQoYnVmZmVyLCBFU0NBUEUpOworICAgICAgICAgICAgYXBwZW5kSW50KGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGFwcGVuZEludChidWZmZXIsIHZhbHVlKTsgLy8gRG9uJ3QgbmVlZCB0byBlc2NhcGUgdGhpcyB2YWx1ZQorICAgICAgICB9CisgICAgfQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgYXBwZW5kSW50KFN0cmluZ0J1ZmZlciBidWZmZXIsIGludCB2YWx1ZSkgeworICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKSh2YWx1ZSA+Pj4gMTYpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhcikodmFsdWUgJiAweEZGRkYpKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIEVuY29kZSBhIHJ1biwgcG9zc2libHkgYSBkZWdlbmVyYXRlIHJ1biAob2YgPCA0IHZhbHVlcykuCisgICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBydW47IG11c3QgYmUgPiAwICYmIDw9IDB4RkZGRi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCB2b2lkIGVuY29kZVJ1bihTdHJpbmdCdWZmZXIgYnVmZmVyLCBzaG9ydCB2YWx1ZSwgaW50IGxlbmd0aCkgeworICAgICAgICBpZiAobGVuZ3RoIDwgNCkgeworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IChpbnQpIEVTQ0FQRSkgYnVmZmVyLmFwcGVuZChFU0NBUEUpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gKGludCkgRVNDQVBFKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IChpbnQpIEVTQ0FQRSkgYnVmZmVyLmFwcGVuZChFU0NBUEUpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoRVNDQVBFKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpIGxlbmd0aCk7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKSB2YWx1ZSk7IC8vIERvbid0IG5lZWQgdG8gZXNjYXBlIHRoaXMgdmFsdWUKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEVuY29kZSBhIHJ1biwgcG9zc2libHkgYSBkZWdlbmVyYXRlIHJ1biAob2YgPCA0IHZhbHVlcykuCisgICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBydW47IG11c3QgYmUgPiAwICYmIDw9IDB4RkYuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgdm9pZCBlbmNvZGVSdW4oU3RyaW5nQnVmZmVyIGJ1ZmZlciwgYnl0ZSB2YWx1ZSwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIHN0YXRlKSB7CisgICAgICAgIGlmIChsZW5ndGggPCA0KSB7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8bGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gRVNDQVBFX0JZVEUpIGFwcGVuZEVuY29kZWRCeXRlKGJ1ZmZlciwgRVNDQVBFX0JZVEUsIHN0YXRlKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRFbmNvZGVkQnl0ZShidWZmZXIsIHZhbHVlLCBzdGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID09IEVTQ0FQRV9CWVRFKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gRVNDQVBFX0JZVEUpIGFwcGVuZEVuY29kZWRCeXRlKGJ1ZmZlciwgRVNDQVBFX0JZVEUsIHN0YXRlKTsKKyAgICAgICAgICAgIGFwcGVuZEVuY29kZWRCeXRlKGJ1ZmZlciwgdmFsdWUsIHN0YXRlKTsKKyAgICAgICAgICAgIC0tbGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kRW5jb2RlZEJ5dGUoYnVmZmVyLCBFU0NBUEVfQllURSwgc3RhdGUpOworICAgICAgICAgICAgYXBwZW5kRW5jb2RlZEJ5dGUoYnVmZmVyLCAoYnl0ZSlsZW5ndGgsIHN0YXRlKTsKKyAgICAgICAgICAgIGFwcGVuZEVuY29kZWRCeXRlKGJ1ZmZlciwgdmFsdWUsIHN0YXRlKTsgLy8gRG9uJ3QgbmVlZCB0byBlc2NhcGUgdGhpcyB2YWx1ZQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwZW5kIGEgYnl0ZSB0byB0aGUgZ2l2ZW4gU3RyaW5nQnVmZmVyLCBwYWNraW5nIHR3byBieXRlcyBpbnRvIGVhY2gKKyAgICAgKiBjaGFyYWN0ZXIuICBUaGUgc3RhdGUgcGFyYW1ldGVyIG1haW50YWlucyBpbnRlcm1lZGlhcnkgZGF0YSBiZXR3ZWVuCisgICAgICogY2FsbHMuCisgICAgICogQHBhcmFtIHN0YXRlIEEgdHdvLWVsZW1lbnQgYXJyYXksIHdpdGggc3RhdGVbMF0gPT0gMCBpZiB0aGlzIGlzIHRoZQorICAgICAqIGZpcnN0IGJ5dGUgb2YgYSBwYWlyLCBvciBzdGF0ZVswXSAhPSAwIGlmIHRoaXMgaXMgdGhlIHNlY29uZCBieXRlCisgICAgICogb2YgYSBwYWlyLCBpbiB3aGljaCBjYXNlIHN0YXRlWzFdIGlzIHRoZSBmaXJzdCBieXRlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgYXBwZW5kRW5jb2RlZEJ5dGUoU3RyaW5nQnVmZmVyIGJ1ZmZlciwgYnl0ZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBzdGF0ZSkgeworICAgICAgICBpZiAoc3RhdGVbMF0gIT0gMCkgeworICAgICAgICAgICAgY2hhciBjID0gKGNoYXIpICgoc3RhdGVbMV0gPDwgOCkgfCAoKChpbnQpIHZhbHVlKSAmIDB4RkYpKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7CisgICAgICAgICAgICBzdGF0ZVswXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0ZVswXSA9IDE7CisgICAgICAgICAgICBzdGF0ZVsxXSA9IHZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGFuIGFycmF5IG9mIGludHMgZnJvbSBhIHJ1bi1sZW5ndGggZW5jb2RlZCBzdHJpbmcuCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBpbnRbXSBSTEVTdHJpbmdUb0ludEFycmF5KFN0cmluZyBzKSB7CisgICAgICAgIGludCBsZW5ndGggPSBnZXRJbnQocywgMCk7CisgICAgICAgIGludFtdIGFycmF5ID0gbmV3IGludFtsZW5ndGhdOworICAgICAgICBpbnQgYWkgPSAwLCBpID0gMTsKKworICAgICAgICBpbnQgbWF4SSA9IHMubGVuZ3RoKCkgLyAyOworICAgICAgICB3aGlsZSAoYWkgPCBsZW5ndGggJiYgaSA8IG1heEkpIHsKKyAgICAgICAgICAgIGludCBjID0gZ2V0SW50KHMsIGkrKyk7CisKKyAgICAgICAgICAgIGlmIChjID09IEVTQ0FQRSkgeworICAgICAgICAgICAgICAgIGMgPSBnZXRJbnQocywgaSsrKTsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBFU0NBUEUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlbYWkrK10gPSBjOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCBydW5MZW5ndGggPSBjOworICAgICAgICAgICAgICAgICAgICBpbnQgcnVuVmFsdWUgPSBnZXRJbnQocywgaSsrKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPHJ1bkxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVthaSsrXSA9IHJ1blZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXJyYXlbYWkrK10gPSBjOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGFpICE9IGxlbmd0aCB8fCBpICE9IG1heEkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJCYWQgcnVuLWxlbmd0aCBlbmNvZGVkIGludCBhcnJheSIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKyAgICBzdGF0aWMgZmluYWwgaW50IGdldEludChTdHJpbmcgcywgaW50IGkpIHsKKyAgICAgICAgcmV0dXJuICgoKGludCkgcy5jaGFyQXQoMippKSkgPDwgMTYpIHwgKGludCkgcy5jaGFyQXQoMippKzEpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGFuIGFycmF5IG9mIHNob3J0cyBmcm9tIGEgcnVuLWxlbmd0aCBlbmNvZGVkIHN0cmluZy4KKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIHNob3J0W10gUkxFU3RyaW5nVG9TaG9ydEFycmF5KFN0cmluZyBzKSB7CisgICAgICAgIGludCBsZW5ndGggPSAoKChpbnQpIHMuY2hhckF0KDApKSA8PCAxNikgfCAoKGludCkgcy5jaGFyQXQoMSkpOworICAgICAgICBzaG9ydFtdIGFycmF5ID0gbmV3IHNob3J0W2xlbmd0aF07CisgICAgICAgIGludCBhaSA9IDA7CisgICAgICAgIGZvciAoaW50IGk9MjsgaTxzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHMuY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGMgPT0gRVNDQVBFKSB7CisgICAgICAgICAgICAgICAgYyA9IHMuY2hhckF0KCsraSk7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gRVNDQVBFKSB7CisgICAgICAgICAgICAgICAgICAgIGFycmF5W2FpKytdID0gKHNob3J0KSBjOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCBydW5MZW5ndGggPSAoaW50KSBjOworICAgICAgICAgICAgICAgICAgICBzaG9ydCBydW5WYWx1ZSA9IChzaG9ydCkgcy5jaGFyQXQoKytpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPHJ1bkxlbmd0aDsgKytqKSBhcnJheVthaSsrXSA9IHJ1blZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGFycmF5W2FpKytdID0gKHNob3J0KSBjOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGFpICE9IGxlbmd0aCkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJCYWQgcnVuLWxlbmd0aCBlbmNvZGVkIHNob3J0IGFycmF5Iik7CisKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhbiBhcnJheSBvZiBzaG9ydHMgZnJvbSBhIHJ1bi1sZW5ndGggZW5jb2RlZCBzdHJpbmcuCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBjaGFyW10gUkxFU3RyaW5nVG9DaGFyQXJyYXkoU3RyaW5nIHMpIHsKKyAgICAgICAgaW50IGxlbmd0aCA9ICgoKGludCkgcy5jaGFyQXQoMCkpIDw8IDE2KSB8ICgoaW50KSBzLmNoYXJBdCgxKSk7CisgICAgICAgIGNoYXJbXSBhcnJheSA9IG5ldyBjaGFyW2xlbmd0aF07CisgICAgICAgIGludCBhaSA9IDA7CisgICAgICAgIGZvciAoaW50IGk9MjsgaTxzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHMuY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGMgPT0gRVNDQVBFKSB7CisgICAgICAgICAgICAgICAgYyA9IHMuY2hhckF0KCsraSk7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gRVNDQVBFKSB7CisgICAgICAgICAgICAgICAgICAgIGFycmF5W2FpKytdID0gYzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnQgcnVuTGVuZ3RoID0gKGludCkgYzsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBydW5WYWx1ZSA9IHMuY2hhckF0KCsraSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxydW5MZW5ndGg7ICsraikgYXJyYXlbYWkrK10gPSBydW5WYWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhcnJheVthaSsrXSA9IGM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWkgIT0gbGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkJhZCBydW4tbGVuZ3RoIGVuY29kZWQgc2hvcnQgYXJyYXkiKTsKKworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGFuIGFycmF5IG9mIGJ5dGVzIGZyb20gYSBydW4tbGVuZ3RoIGVuY29kZWQgc3RyaW5nLgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgZmluYWwgYnl0ZVtdIFJMRVN0cmluZ1RvQnl0ZUFycmF5KFN0cmluZyBzKSB7CisgICAgICAgIGludCBsZW5ndGggPSAoKChpbnQpIHMuY2hhckF0KDApKSA8PCAxNikgfCAoKGludCkgcy5jaGFyQXQoMSkpOworICAgICAgICBieXRlW10gYXJyYXkgPSBuZXcgYnl0ZVtsZW5ndGhdOworICAgICAgICBib29sZWFuIG5leHRDaGFyID0gdHJ1ZTsKKyAgICAgICAgY2hhciBjID0gMDsKKyAgICAgICAgaW50IG5vZGUgPSAwOworICAgICAgICBpbnQgcnVuTGVuZ3RoID0gMDsKKyAgICAgICAgaW50IGkgPSAyOworICAgICAgICBmb3IgKGludCBhaT0wOyBhaTxsZW5ndGg7ICkgeworICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IG9mIHRoZSBsb29wIHBsYWNlcyB0aGUgbmV4dCBieXRlIGludG8gdGhlIGxvY2FsCisgICAgICAgICAgICAvLyB2YXJpYWJsZSAnYicgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuICBJdCBrZWVwcyB0aGUKKyAgICAgICAgICAgIC8vIGN1cnJlbnQgY2hhcmFjdGVyIGluICdjJyBhbmQgdXNlcyB0aGUgYm9vbGVhbiAnbmV4dENoYXInCisgICAgICAgICAgICAvLyB0byBzZWUgaWYgd2UndmUgdGFrZW4gYm90aCBieXRlcyBvdXQgb2YgJ2MnIHlldC4KKyAgICAgICAgICAgIGJ5dGUgYjsKKyAgICAgICAgICAgIGlmIChuZXh0Q2hhcikgeworICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChpKyspOworICAgICAgICAgICAgICAgIGIgPSAoYnl0ZSkgKGMgPj4gOCk7CisgICAgICAgICAgICAgICAgbmV4dENoYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGIgPSAoYnl0ZSkgKGMgJiAweEZGKTsKKyAgICAgICAgICAgICAgICBuZXh0Q2hhciA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoaXMgcGFydCBvZiB0aGUgbG9vcCBpcyBhIHRpbnkgc3RhdGUgbWFjaGluZSB3aGljaCBoYW5kbGVzCisgICAgICAgICAgICAvLyB0aGUgcGFyc2luZyBvZiB0aGUgcnVuLWxlbmd0aCBlbmNvZGluZy4gIFRoaXMgd291bGQgYmUgc2ltcGxlcgorICAgICAgICAgICAgLy8gaWYgd2UgY291bGQgbG9vayBhaGVhZCwgYnV0IHdlIGNhbid0LCBzbyB3ZSB1c2UgJ25vZGUnIHRvCisgICAgICAgICAgICAvLyBtb3ZlIGJldHdlZW4gdGhyZWUgbm9kZXMgaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAvLyBOb3JtYWwgaWRsZSBub2RlCisgICAgICAgICAgICAgICAgaWYgKGIgPT0gRVNDQVBFX0JZVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhcnJheVthaSsrXSA9IGI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgc2VlbiBvbmUgRVNDQVBFX0JZVEU7IHdlIGV4cGVjdCBlaXRoZXIgYSBzZWNvbmQKKyAgICAgICAgICAgICAgICAvLyBvbmUsIG9yIGEgcnVuIGxlbmd0aCBhbmQgdmFsdWUuCisgICAgICAgICAgICAgICAgaWYgKGIgPT0gRVNDQVBFX0JZVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlbYWkrK10gPSBFU0NBUEVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBydW5MZW5ndGggPSBiOworICAgICAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgc2lnbmVkIGJ5dGUgYXMgdW5zaWduZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bkxlbmd0aCA8IDApIHJ1bkxlbmd0aCArPSAweDEwMDsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgc2VlbiBhbiBFU0NBUEVfQllURSBhbmQgbGVuZ3RoIGJ5dGUuICBXZSBpbnRlcnByZXQKKyAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCBieXRlIGFzIHRoZSB2YWx1ZSB0byBiZSByZXBlYXRlZC4KKyAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8cnVuTGVuZ3RoOyArK2opIGFycmF5W2FpKytdID0gYjsKKyAgICAgICAgICAgICAgICBub2RlID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlICE9IDApCisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiQmFkIHJ1bi1sZW5ndGggZW5jb2RlZCBieXRlIGFycmF5Iik7CisKKyAgICAgICAgaWYgKGkgIT0gcy5sZW5ndGgoKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJFeGNlc3MgZGF0YSBpbiBSTEUgYnl0ZSBhcnJheSBzdHJpbmciKTsKKworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCisgICAgc3RhdGljIHB1YmxpYyBTdHJpbmcgTElORV9TRVBBUkFUT1IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXQgYSBTdHJpbmcgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgc291cmNlIGZpbGUuICBUaGlzIGluY2x1ZGVzCisgICAgICogYnJlYWtpbmcgaXQgaW50byBsaW5lcyBhbmQgZXNjYXBpbmcgY2hhcmFjdGVycyB1c2luZyBvY3RhbCBub3RhdGlvbgorICAgICAqIHdoZW4gbmVjZXNzYXJ5IChjb250cm9sIGNoYXJhY3RlcnMgYW5kIGRvdWJsZSBxdW90ZXMpLgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgZmluYWwgU3RyaW5nIGZvcm1hdEZvclNvdXJjZShTdHJpbmcgcykgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8cy5sZW5ndGgoKTspIHsKKyAgICAgICAgICAgIGlmIChpID4gMCkgYnVmZmVyLmFwcGVuZCgnKycpLmFwcGVuZChMSU5FX1NFUEFSQVRPUik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCIgICAgICAgIFwiIik7CisgICAgICAgICAgICBpbnQgY291bnQgPSAxMTsKKyAgICAgICAgICAgIHdoaWxlIChpPHMubGVuZ3RoKCkgJiYgY291bnQ8ODApIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHMuY2hhckF0KGkrKyk7CisgICAgICAgICAgICBpZiAoYyA8ICdcdTAwMjAnIHx8IGMgPT0gJyInIHx8IGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIC8vIFJlcHJlc2VudCBjb250cm9sIGNoYXJhY3RlcnMsIGJhY2tzbGFzaCBhbmQgZG91YmxlIHF1b3RlCisgICAgICAgICAgICAgICAgLy8gdXNpbmcgb2N0YWwgbm90YXRpb247IG90aGVyd2lzZSB0aGUgc3RyaW5nIHdlIGZvcm0KKyAgICAgICAgICAgICAgICAvLyB3b24ndCBjb21waWxlLCBzaW5jZSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXMgYXJlCisgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2VkIGJlZm9yZSB0b2tlbml6YXRpb24uCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKEhFWF9ESUdJVFsoYyAmIDA3MDApID4+IDZdKTsgLy8gSEVYX0RJR0lUIHdvcmtzIGZvciBvY3RhbAorICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoSEVYX0RJR0lUWyhjICYgMDA3MCkgPj4gM10pOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoSEVYX0RJR0lUWyhjICYgMDAwNyldKTsKKyAgICAgICAgICAgICAgICBjb3VudCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYyA8PSAnXHUwMDdFJykgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlxcdSIpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoSEVYX0RJR0lUWyhjICYgMHhGMDAwKSA+PiAxMl0pOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoSEVYX0RJR0lUWyhjICYgMHgwRjAwKSA+PiA4XSk7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChIRVhfRElHSVRbKGMgJiAweDAwRjApID4+IDRdKTsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKEhFWF9ESUdJVFsoYyAmIDB4MDAwRildKTsKKyAgICAgICAgICAgICAgICBjb3VudCArPSA2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnIicpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgY2hhcltdIEhFWF9ESUdJVCA9IHsnMCcsJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLAorICAgICAgICAgICAgICAgICAgICAgJzgnLCc5JywnQScsJ0InLCdDJywnRCcsJ0UnLCdGJ307CisKKworICAgIC8qKgorICAgICAqIENvbnZlcnQgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdGIHRvCisgICAgICogVW5pY29kZSBlc2NhcGVzLCBhbmQgY29udmVydCBiYWNrc2xhc2ggdG8gYSBkb3VibGUgYmFja3NsYXNoLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGVzY2FwZShTdHJpbmcgcykgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8cy5sZW5ndGgoKTsgKSB7CisgICAgICAgICAgICBpbnQgYyA9IFVURjE2LmNoYXJBdChzLCBpKTsKKyAgICAgICAgICAgIGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgaWYgKGMgPj0gJyAnICYmIGMgPD0gMHgwMDdGKSB7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJcXFxcIik7IC8vIFRoYXQgaXMsICJcXCIKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKChjaGFyKWMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBmb3VyID0gYyA8PSAweEZGRkY7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChmb3VyID8gIlxcdSIgOiAiXFxVIik7CisgICAgICAgICAgICAgICAgaGV4KGMsIGZvdXIgPyA0IDogOCwgYnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyogVGhpcyBtYXAgbXVzdCBiZSBpbiBBU0NFTkRJTkcgT1JERVIgT0YgVEhFIEVTQ0FQRSBDT0RFICovCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgY2hhcltdIFVORVNDQVBFX01BUCA9IHsKKyAgICAgICAgLyoiICAgMHgyMiwgMHgyMiAqLworICAgICAgICAvKicgICAweDI3LCAweDI3ICovCisgICAgICAgIC8qPyAgIDB4M0YsIDB4M0YgKi8KKyAgICAgICAgLypcICAgMHg1QywgMHg1QyAqLworICAgICAgICAvKmEqLyAweDYxLCAweDA3LAorICAgICAgICAvKmIqLyAweDYyLCAweDA4LAorICAgICAgICAvKmUqLyAweDY1LCAweDFiLAorICAgICAgICAvKmYqLyAweDY2LCAweDBjLAorICAgICAgICAvKm4qLyAweDZFLCAweDBhLAorICAgICAgICAvKnIqLyAweDcyLCAweDBkLAorICAgICAgICAvKnQqLyAweDc0LCAweDA5LAorICAgICAgICAvKnYqLyAweDc2LCAweDBiCisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYW4gZXNjYXBlIHRvIGEgMzItYml0IGNvZGUgcG9pbnQgdmFsdWUuICBXZSBhdHRlbXB0CisgICAgICogdG8gcGFyYWxsZWwgdGhlIGljdTRjIHVuZXNhY3BlQXQoKSBmdW5jdGlvbi4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgYW4gYXJyYXkgY29udGFpbmluZyBvZmZzZXQgdG8gdGhlIGNoYXJhY3RlcgorICAgICAqIDxlbT5hZnRlcjwvZW0+IHRoZSBiYWNrc2xhc2guICBVcG9uIHJldHVybiBvZmZzZXQxNlswXSB3aWxsCisgICAgICogYmUgdXBkYXRlZCB0byBwb2ludCBhZnRlciB0aGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAqIEByZXR1cm4gY2hhcmFjdGVyIHZhbHVlIGZyb20gMCB0byAxMEZGRkYsIG9yIC0xIG9uIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IHVuZXNjYXBlQXQoU3RyaW5nIHMsIGludFtdIG9mZnNldDE2KSB7CisgICAgICAgIGludCBjOworICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgaW50IG4gPSAwOworICAgICAgICBpbnQgbWluRGlnID0gMDsKKyAgICAgICAgaW50IG1heERpZyA9IDA7CisgICAgICAgIGludCBiaXRzUGVyRGlnaXQgPSA0OworICAgICAgICBpbnQgZGlnOworICAgICAgICBpbnQgaTsKKworICAgICAgICAvKiBDaGVjayB0aGF0IG9mZnNldCBpcyBpbiByYW5nZSAqLworICAgICAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0MTZbMF07CisgICAgICAgIGludCBsZW5ndGggPSBzLmxlbmd0aCgpOworICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICAvKiBGZXRjaCBmaXJzdCBVQ2hhciBhZnRlciAnXFwnICovCisgICAgICAgIGMgPSBVVEYxNi5jaGFyQXQocywgb2Zmc2V0KTsKKyAgICAgICAgb2Zmc2V0ICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKworICAgICAgICAvKiBDb252ZXJ0IGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgIG1pbkRpZyA9IG1heERpZyA9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVSc6CisgICAgICAgICAgICBtaW5EaWcgPSBtYXhEaWcgPSA4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgbWluRGlnID0gMTsKKyAgICAgICAgICAgIG1heERpZyA9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRpZyA9IFVDaGFyYWN0ZXIuZGlnaXQoYywgOCk7CisgICAgICAgICAgICBpZiAoZGlnID49IDApIHsKKyAgICAgICAgICAgICAgICBtaW5EaWcgPSAxOworICAgICAgICAgICAgICAgIG1heERpZyA9IDM7CisgICAgICAgICAgICAgICAgbiA9IDE7IC8qIEFscmVhZHkgaGF2ZSBmaXJzdCBvY3RhbCBkaWdpdCAqLworICAgICAgICAgICAgICAgIGJpdHNQZXJEaWdpdCA9IDM7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGlnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1pbkRpZyAhPSAwKSB7CisgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuZ3RoICYmIG4gPCBtYXhEaWcpIHsKKyAgICAgICAgICAgICAgICAvLyBURU1QT1JBUlkKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBSZXN0b3JlIHRoZSBjaGFyMzItYmFzZWQgY29kZSB3aGVuIFVDaGFyYWN0ZXIuZGlnaXQKKyAgICAgICAgICAgICAgICAvLyBpcyB3b3JraW5nIChCdWcgNjYpLgorCisgICAgICAgICAgICAgICAgLy9jID0gVVRGMTYuY2hhckF0KHMsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgLy9kaWcgPSBVQ2hhcmFjdGVyLmRpZ2l0KGMsIChiaXRzUGVyRGlnaXQgPT0gMykgPyA4IDogMTYpOworICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChvZmZzZXQpOworICAgICAgICAgICAgICAgIGRpZyA9IENoYXJhY3Rlci5kaWdpdCgoY2hhciljLCAoYml0c1BlckRpZ2l0ID09IDMpID8gOCA6IDE2KTsKKyAgICAgICAgICAgICAgICBpZiAoZGlnIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCBiaXRzUGVyRGlnaXQpIHwgZGlnOworICAgICAgICAgICAgICAgIC8vb2Zmc2V0ICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKyAgICAgICAgICAgICAgICArK29mZnNldDsKKyAgICAgICAgICAgICAgICArK247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobiA8IG1pbkRpZykgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldDE2WzBdID0gb2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENvbnZlcnQgQy1zdHlsZSBlc2NhcGVzIGluIHRhYmxlICovCisgICAgICAgIGZvciAoaT0wOyBpPFVORVNDQVBFX01BUC5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgIGlmIChjID09IFVORVNDQVBFX01BUFtpXSkgeworICAgICAgICAgICAgICAgIG9mZnNldDE2WzBdID0gb2Zmc2V0OworICAgICAgICAgICAgICAgIHJldHVybiBVTkVTQ0FQRV9NQVBbaSsxXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA8IFVORVNDQVBFX01BUFtpXSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogTWFwIFxjWCB0byBjb250cm9sLVg6IFggJiAweDFGICovCisgICAgICAgIGlmIChjID09ICdjJyAmJiBvZmZzZXQgPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGMgPSBVVEYxNi5jaGFyQXQocywgb2Zmc2V0KTsKKyAgICAgICAgICAgIG9mZnNldDE2WzBdID0gb2Zmc2V0ICsgVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgcmV0dXJuIDB4MUYgJiBjOworICAgICAgICB9CisKKyAgICAgICAgLyogSWYgbm8gc3BlY2lhbCBmb3JtcyBhcmUgcmVjb2duaXplZCwgdGhlbiBjb25zaWRlcgorICAgICAgICAgKiB0aGUgYmFja3NsYXNoIHRvIGdlbmVyaWNhbGx5IGVzY2FwZSB0aGUgbmV4dCBjaGFyYWN0ZXIuICovCisgICAgICAgIG9mZnNldDE2WzBdID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGFsbCBlc2NhcGVzIGluIGEgZ2l2ZW4gc3RyaW5nIHVzaW5nIHVuZXNjYXBlQXQoKS4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBhbiBpbnZhbGlkIGVzY2FwZSBpcworICAgICAqIHNlZW4uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdW5lc2NhcGUoU3RyaW5nIHMpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgaW50W10gcG9zID0gbmV3IGludFsxXTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHMubGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgY2hhciBjID0gcy5jaGFyQXQoaSsrKTsKKyAgICAgICAgICAgIGlmIChjID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICBwb3NbMF0gPSBpOworICAgICAgICAgICAgICAgIGludCBlID0gdW5lc2NhcGVBdChzLCBwb3MpOworICAgICAgICAgICAgICAgIGlmIChlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN1YnN0cmluZyhpLTEsIE1hdGgubWluKGkrOCwgcy5sZW5ndGgoKSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVVRGMTYuYXBwZW5kKGJ1ZiwgZSk7CisgICAgICAgICAgICAgICAgaSA9IHBvc1swXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBhbGwgZXNjYXBlcyBpbiBhIGdpdmVuIHN0cmluZyB1c2luZyB1bmVzY2FwZUF0KCkuCisgICAgICogTGVhdmUgaW52YWxpZCBlc2NhcGUgc2VxdWVuY2VzIHVuY2hhbmdlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB1bmVzY2FwZUxlbmllbnRseShTdHJpbmcgcykgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpbnRbXSBwb3MgPSBuZXcgaW50WzFdOworICAgICAgICBmb3IgKGludCBpPTA7IGk8cy5sZW5ndGgoKTsgKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBzLmNoYXJBdChpKyspOworICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIHBvc1swXSA9IGk7CisgICAgICAgICAgICAgICAgaW50IGUgPSB1bmVzY2FwZUF0KHMsIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKGUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgVVRGMTYuYXBwZW5kKGJ1ZiwgZSk7CisgICAgICAgICAgICAgICAgICAgIGkgPSBwb3NbMF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgY2hhciB0byA0IGhleCB1cHBlcmNhc2UgZGlnaXRzLiAgRS5nLiwgaGV4KCdhJykgPT4KKyAgICAgKiAiMDA0MSIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaGV4KGNoYXIgY2gpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHRlbXAgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHJldHVybiBoZXgoY2gsIHRlbXApLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBhIHN0cmluZyB0byBjb21tYS1zZXBhcmF0ZWQgZ3JvdXBzIG9mIDQgaGV4IHVwcGVyY2FzZQorICAgICAqIGRpZ2l0cy4gIEUuZy4sIGhleCgnYWInKSA9PiAiMDA0MSwwMDQyIi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBoZXgoU3RyaW5nIHMpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHRlbXAgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHJldHVybiBoZXgocywgdGVtcCkudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGNvbW1hLXNlcGFyYXRlZCBncm91cHMgb2YgNCBoZXggdXBwZXJjYXNlCisgICAgICogZGlnaXRzLiAgRS5nLiwgaGV4KCdhYicpID0+ICIwMDQxLDAwNDIiLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGhleChTdHJpbmdCdWZmZXIgcykgeworICAgICAgICByZXR1cm4gaGV4KHMudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBhIGNoYXIgdG8gNCBoZXggdXBwZXJjYXNlIGRpZ2l0cy4gIEUuZy4sIGhleCgnYScpID0+CisgICAgICogIjAwNDEiLiAgQXBwZW5kIHRoZSBvdXRwdXQgdG8gdGhlIGdpdmVuIFN0cmluZ0J1ZmZlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1ZmZlciBoZXgoY2hhciBjaCwgU3RyaW5nQnVmZmVyIG91dHB1dCkgeworICAgICAgICByZXR1cm4gYXBwZW5kTnVtYmVyKG91dHB1dCwgY2gsIDE2LCA0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgaW50ZWdlciB0byBzaXplIHdpZHRoIGhleCB1cHBlcmNhc2UgZGlnaXRzLgorICAgICAqIEUuZy4sIGhleCgnYScsIDQsIHN0cikgPT4gIjAwNDEiLgorICAgICAqIEFwcGVuZCB0aGUgb3V0cHV0IHRvIHRoZSBnaXZlbiBTdHJpbmdCdWZmZXIuCisgICAgICogSWYgd2lkdGggaXMgdG9vIHNtYWxsIHRvIGZpdCwgbm90aGluZyB3aWxsIGJlIGFwcGVuZGVkIHRvIG91dHB1dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1ZmZlciBoZXgoaW50IGNoLCBpbnQgd2lkdGgsIFN0cmluZ0J1ZmZlciBvdXRwdXQpIHsKKyAgICAgICAgcmV0dXJuIGFwcGVuZE51bWJlcihvdXRwdXQsIGNoLCAxNiwgd2lkdGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBpbnRlZ2VyIHRvIHNpemUgd2lkdGggKG1pbmltdW0pIGhleCB1cHBlcmNhc2UgZGlnaXRzLgorICAgICAqIEUuZy4sIGhleCgnYScsIDQsIHN0cikgPT4gIjAwNDEiLiAgSWYgdGhlIGludGVnZXIgcmVxdWlyZXMgbW9yZQorICAgICAqIHRoYW4gd2lkdGggZGlnaXRzLCBtb3JlIHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBoZXgoaW50IGNoLCBpbnQgd2lkdGgpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZE51bWJlcihidWYsIGNoLCAxNiwgd2lkdGgpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBhIHN0cmluZyB0byBjb21tYS1zZXBhcmF0ZWQgZ3JvdXBzIG9mIDQgaGV4IHVwcGVyY2FzZQorICAgICAqIGRpZ2l0cy4gIEUuZy4sIGhleCgnYWInKSA9PiAiMDA0MSwwMDQyIi4gIEFwcGVuZCB0aGUgb3V0cHV0CisgICAgICogdG8gdGhlIGdpdmVuIFN0cmluZ0J1ZmZlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1ZmZlciBoZXgoU3RyaW5nIHMsIFN0cmluZ0J1ZmZlciByZXN1bHQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICE9IDApIHJlc3VsdC5hcHBlbmQoJywnKTsKKyAgICAgICAgICAgIGhleChzLmNoYXJBdChpKSwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNwbGl0IGEgc3RyaW5nIGludG8gcGllY2VzIGJhc2VkIG9uIHRoZSBnaXZlbiBkaXZpZGVyIGNoYXJhY3RlcgorICAgICAqIEBwYXJhbSBzIHRoZSBzdHJpbmcgdG8gc3BsaXQKKyAgICAgKiBAcGFyYW0gZGl2aWRlciB0aGUgY2hhcmFjdGVyIG9uIHdoaWNoIHRvIHNwbGl0LiAgT2NjdXJyZW5jZXMgb2YKKyAgICAgKiB0aGlzIGNoYXJhY3RlciBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBvdXRwdXQKKyAgICAgKiBAcGFyYW0gb3V0cHV0IGFuIGFycmF5IHRvIHJlY2VpdmUgdGhlIHN1YnN0cmluZ3MgYmV0d2VlbgorICAgICAqIGluc3RhbmNlcyBvZiBkaXZpZGVyLiAgSXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggb24gZW50cnkgdG8KKyAgICAgKiBhY2NvbW9kYXRlIGFsbCBvdXRwdXQuICBBZGphY2VudCBpbnN0YW5jZXMgb2YgdGhlIGRpdmlkZXIKKyAgICAgKiBjaGFyYWN0ZXIgd2lsbCBwbGFjZSBlbXB0eSBzdHJpbmdzIGludG8gb3V0cHV0LiAgQmVmb3JlCisgICAgICogcmV0dXJuaW5nLCBvdXRwdXQgaXMgcGFkZGVkIG91dCB3aXRoIGVtcHR5IHN0cmluZ3MuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNwbGl0KFN0cmluZyBzLCBjaGFyIGRpdmlkZXIsIFN0cmluZ1tdIG91dHB1dCkgeworICAgICAgICBpbnQgbGFzdCA9IDA7CisgICAgICAgIGludCBjdXJyZW50ID0gMDsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSBkaXZpZGVyKSB7CisgICAgICAgICAgICAgICAgb3V0cHV0W2N1cnJlbnQrK10gPSBzLnN1YnN0cmluZyhsYXN0LGkpOworICAgICAgICAgICAgICAgIGxhc3QgPSBpKzE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgb3V0cHV0W2N1cnJlbnQrK10gPSBzLnN1YnN0cmluZyhsYXN0LGkpOworICAgICAgICB3aGlsZSAoY3VycmVudCA8IG91dHB1dC5sZW5ndGgpIHsKKyAgICAgICAgICAgIG91dHB1dFtjdXJyZW50KytdID0gIiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb29rIHVwIGEgZ2l2ZW4gc3RyaW5nIGluIGEgc3RyaW5nIGFycmF5LiAgUmV0dXJucyB0aGUgaW5kZXggYXQKKyAgICAgKiB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIHdhcyBmb3VuZCBpbiB0aGUKKyAgICAgKiBhcnJheSwgb3IgLTEgaWYgaXQgd2FzIG5vdCBmb3VuZC4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvcgorICAgICAqIEBwYXJhbSB0YXJnZXQgdGhlIGFycmF5IG9mIHplcm8gb3IgbW9yZSBzdHJpbmdzIGluIHdoaWNoIHRvCisgICAgICogbG9vayBmb3Igc291cmNlCisgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGFyZ2V0IGF0IHdoaWNoIHNvdXJjZSBmaXJzdCBvY2N1cnMsIG9yIC0xCisgICAgICogaWYgbm90IGZvdW5kCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgbG9va3VwKFN0cmluZyBzb3VyY2UsIFN0cmluZ1tdIHRhcmdldCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHNvdXJjZS5lcXVhbHModGFyZ2V0W2ldKSkgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNraXAgb3ZlciBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzCisgICAgICogYXQgcG9zLiAgUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgbm9uLXdoaXRlLXNwYWNlIGNoYXJhY3RlcgorICAgICAqIGF0IG9yIGFmdGVyIHBvcywgb3Igc3RyLmxlbmd0aCgpLCBpZiB0aGVyZSBpcyBub25lLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IHNraXBXaGl0ZXNwYWNlKFN0cmluZyBzdHIsIGludCBwb3MpIHsKKyAgICAgICAgd2hpbGUgKHBvcyA8IHN0ci5sZW5ndGgoKSkgeworICAgICAgICAgICAgaW50IGMgPSBVVEYxNi5jaGFyQXQoc3RyLCBwb3MpOworICAgICAgICAgICAgaWYgKCFVQ2hhcmFjdGVyUHJvcGVydHkuaXNSdWxlV2hpdGVTcGFjZShjKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9zICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNraXAgb3ZlciBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzCisgICAgICogYXQgcG9zWzBdLCBhZHZhbmNpbmcgaXQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNraXBXaGl0ZXNwYWNlKFN0cmluZyBzdHIsIGludFtdIHBvcykgeworICAgICAgICBwb3NbMF0gPSBza2lwV2hpdGVzcGFjZShzdHIsIHBvc1swXSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFsbCBydWxlIHdoaXRlIHNwYWNlIGZyb20gYSBzdHJpbmcuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZGVsZXRlUnVsZVdoaXRlU3BhY2UoU3RyaW5nIHN0cikgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8c3RyLmxlbmd0aCgpOyApIHsKKyAgICAgICAgICAgIGludCBjaCA9IFVURjE2LmNoYXJBdChzdHIsIGkpOworICAgICAgICAgICAgaSArPSBVVEYxNi5nZXRDaGFyQ291bnQoY2gpOworICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVVRGMTYuYXBwZW5kKGJ1ZiwgY2gpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIHNpbmdsZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgJ2NoJywgb3B0aW9uYWxseQorICAgICAqIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UuCisgICAgICogQHBhcmFtIGlkIHRoZSBzdHJpbmcgdG8gYmUgcGFyc2VkCisgICAgICogQHBhcmFtIHBvcyBJTlBVVC1PVVRQVVQgcGFyYW1ldGVyLiAgT24gaW5wdXQsIHBvc1swXSBpcyB0aGUKKyAgICAgKiBvZmZzZXQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBiZSBwYXJzZWQuICBPbiBvdXRwdXQsIHBvc1swXQorICAgICAqIGlzIHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCBwYXJzZWQgY2hhcmFjdGVyLiAgSWYgdGhlIHBhcnNlCisgICAgICogZmFpbHMsIHBvc1swXSB3aWxsIGJlIHVuY2hhbmdlZC4KKyAgICAgKiBAcGFyYW0gY2ggdGhlIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB0byBiZSBwYXJzZWQuCisgICAgICogQHJldHVybiB0cnVlIGlmICdjaCcgaXMgc2VlbiBwcmVjZWRlZCBieSB6ZXJvIG9yIG1vcmUKKyAgICAgKiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHBhcnNlQ2hhcihTdHJpbmcgaWQsIGludFtdIHBvcywgY2hhciBjaCkgeworICAgICAgICBpbnQgc3RhcnQgPSBwb3NbMF07CisgICAgICAgIHNraXBXaGl0ZXNwYWNlKGlkLCBwb3MpOworICAgICAgICBpZiAocG9zWzBdID09IGlkLmxlbmd0aCgpIHx8CisgICAgICAgICAgICBpZC5jaGFyQXQocG9zWzBdKSAhPSBjaCkgeworICAgICAgICAgICAgcG9zWzBdID0gc3RhcnQ7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgKytwb3NbMF07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBhcnNlIGEgcGF0dGVybiBzdHJpbmcgc3RhcnRpbmcgYXQgb2Zmc2V0IHBvcy4gIEtleXdvcmRzIGFyZQorICAgICAqIG1hdGNoZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LiAgU3BhY2VzIG1heSBiZSBza2lwcGVkIGFuZCBtYXkgYmUKKyAgICAgKiBvcHRpb25hbCBvciByZXF1aXJlZC4gIEludGVnZXIgdmFsdWVzIG1heSBiZSBwYXJzZWQsIGFuZCBpZgorICAgICAqIHRoZXkgYXJlLCB0aGV5IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIGdpdmVuIGFycmF5LiAgSWYKKyAgICAgKiBzdWNjZXNzZnVsLCB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IG5vbi1zcGFjZSBjaGFyYWN0ZXIgaXMKKyAgICAgKiByZXR1cm5lZC4gIE9uIGZhaWx1cmUsIC0xIGlzIHJldHVybmVkLgorICAgICAqIEBwYXJhbSBwYXR0ZXJuIG11c3Qgb25seSBjb250YWluIGxvd2VyY2FzZSBjaGFyYWN0ZXJzLCB3aGljaAorICAgICAqIHdpbGwgbWF0Y2ggdGhlaXIgdXBwZXJjYXNlIGVxdWl2YWxlbnRzIGFzIHdlbGwuICBBIHNwYWNlCisgICAgICogY2hhcmFjdGVyIG1hdGNoZXMgb25lIG9yIG1vcmUgcmVxdWlyZWQgc3BhY2VzLiAgQSAnficgY2hhcmFjdGVyCisgICAgICogbWF0Y2hlcyB6ZXJvIG9yIG1vcmUgb3B0aW9uYWwgc3BhY2VzLiAgQSAnIycgY2hhcmFjdGVyIG1hdGNoZXMKKyAgICAgKiBhbiBpbnRlZ2VyIGFuZCBzdG9yZXMgaXQgaW4gcGFyc2VkSW50cywgd2hpY2ggdGhlIGNhbGxlciBtdXN0CisgICAgICogZW5zdXJlIGhhcyBlbm91Z2ggY2FwYWNpdHkuCisgICAgICogQHBhcmFtIHBhcnNlZEludHMgYXJyYXkgdG8gcmVjZWl2ZSBwYXJzZWQgaW50ZWdlcnMuICBDYWxsZXIKKyAgICAgKiBtdXN0IGVuc3VyZSB0aGF0IHBhcnNlZEludHMubGVuZ3RoIGlzID49IHRoZSBudW1iZXIgb2YgJyMnCisgICAgICogc2lnbnMgaW4gJ3BhdHRlcm4nLgorICAgICAqIEByZXR1cm4gdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBwYXJzZWQsIG9yIC0xIGlmCisgICAgICogdGhlIHBhcnNlIGZhaWxlZAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IHBhcnNlUGF0dGVybihTdHJpbmcgcnVsZSwgaW50IHBvcywgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGF0dGVybiwgaW50W10gcGFyc2VkSW50cykgeworICAgICAgICAvLyBUT0RPIFVwZGF0ZSB0aGlzIHRvIGhhbmRsZSBzdXJyb2dhdGVzCisgICAgICAgIGludFtdIHAgPSBuZXcgaW50WzFdOworICAgICAgICBpbnQgaW50Q291bnQgPSAwOyAvLyBudW1iZXIgb2YgaW50ZWdlcnMgcGFyc2VkCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxwYXR0ZXJuLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNoYXIgY3BhdCA9IHBhdHRlcm4uY2hhckF0KGkpOworICAgICAgICAgICAgY2hhciBjOworICAgICAgICAgICAgc3dpdGNoIChjcGF0KSB7CisgICAgICAgICAgICBjYXNlICcgJzoKKyAgICAgICAgICAgICAgICBpZiAocG9zID49IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYyA9IHJ1bGUuY2hhckF0KHBvcysrKTsKKyAgICAgICAgICAgICAgICBpZiAoIVVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRkFMTCBUSFJPVUdIIHRvIHNraXBXaGl0ZXNwYWNlCisgICAgICAgICAgICBjYXNlICd+JzoKKyAgICAgICAgICAgICAgICBwb3MgPSBza2lwV2hpdGVzcGFjZShydWxlLCBwb3MpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICAgICAgcFswXSA9IHBvczsKKyAgICAgICAgICAgICAgICBwYXJzZWRJbnRzW2ludENvdW50KytdID0gcGFyc2VJbnRlZ2VyKHJ1bGUsIHAsIGxpbWl0KTsKKyAgICAgICAgICAgICAgICBpZiAocFswXSA9PSBwb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3ludGF4IGVycm9yOyBmYWlsZWQgdG8gcGFyc2UgaW50ZWdlcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBvcyA9IHBbMF07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChwb3MgPj0gbGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjID0gKGNoYXIpIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UocnVsZS5jaGFyQXQocG9zKyspKTsKKyAgICAgICAgICAgICAgICBpZiAoYyAhPSBjcGF0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIHBhdHRlcm4gc3RyaW5nIHdpdGhpbiB0aGUgZ2l2ZW4gUmVwbGFjZWFibGUgYW5kIGEgcGFyc2luZworICAgICAqIHBhdHRlcm4uICBDaGFyYWN0ZXJzIGFyZSBtYXRjaGVkIGxpdGVyYWxseSBhbmQgY2FzZS1zZW5zaXRpdmVseQorICAgICAqIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNoYXJhY3RlcnM6CisgICAgICoKKyAgICAgKiB+ICB6ZXJvIG9yIG1vcmUgdXBydl9pc1J1bGVXaGl0ZVNwYWNlIGNoYXJzCisgICAgICoKKyAgICAgKiBJZiBlbmQgb2YgcGF0dGVybiBpcyByZWFjaGVkIHdpdGggYWxsIG1hdGNoZXMgYWxvbmcgdGhlIHdheSwKKyAgICAgKiBwb3MgaXMgYWR2YW5jZWQgdG8gdGhlIGZpcnN0IHVucGFyc2VkIGluZGV4IGFuZCByZXR1cm5lZC4KKyAgICAgKiBPdGhlcndpc2UgLTEgaXMgcmV0dXJuZWQuCisgICAgICogQHBhcmFtIHBhdCBwYXR0ZXJuIHRoYXQgY29udHJvbHMgcGFyc2luZworICAgICAqIEBwYXJhbSB0ZXh0IHRleHQgdG8gYmUgcGFyc2VkLCBzdGFydGluZyBhdCBpbmRleAorICAgICAqIEBwYXJhbSBpbmRleCBvZmZzZXQgdG8gZmlyc3QgY2hhcmFjdGVyIHRvIHBhcnNlCisgICAgICogQHBhcmFtIGxpbWl0IG9mZnNldCBhZnRlciBsYXN0IGNoYXJhY3RlciB0byBwYXJzZQorICAgICAqIEByZXR1cm4gaW5kZXggYWZ0ZXIgbGFzdCBwYXJzZWQgY2hhcmFjdGVyLCBvciAtMSBvbiBwYXJzZSBmYWlsdXJlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IHBhcnNlUGF0dGVybihTdHJpbmcgcGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW1pdCkgeworICAgICAgICBpbnQgaXBhdCA9IDA7CisKKyAgICAgICAgLy8gZW1wdHkgcGF0dGVybiBtYXRjaGVzIGltbWVkaWF0ZWx5CisgICAgICAgIGlmIChpcGF0ID09IHBhdC5sZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgaW50IGNwYXQgPSBVVEYxNi5jaGFyQXQocGF0LCBpcGF0KTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsaW1pdCkgeworICAgICAgICAgICAgaW50IGMgPSB0ZXh0LmNoYXIzMkF0KGluZGV4KTsKKworICAgICAgICAgICAgLy8gcGFyc2UgXHMqCisgICAgICAgICAgICBpZiAoY3BhdCA9PSAnficpIHsKKyAgICAgICAgICAgICAgICBpZiAoVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoKytpcGF0ID09IHBhdC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OyAvLyBzdWNjZXNzOyBjIHVucGFyc2VkCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJ1OyBwcm9jZXNzIGMgYWdhaW4gd2l0aCBuZXh0IGNwYXQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHBhcnNlIGxpdGVyYWwKKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gY3BhdCkgeworICAgICAgICAgICAgICAgIGludCBuID0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgICAgIGluZGV4ICs9IG47CisgICAgICAgICAgICAgICAgaXBhdCArPSBuOworICAgICAgICAgICAgICAgIGlmIChpcGF0ID09IHBhdC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7IC8vIHN1Y2Nlc3M7IGMgcGFyc2VkCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGZhbGwgdGhydTsgZ2V0IG5leHQgY3BhdAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBtYXRjaCBmYWlsdXJlIG9mIGxpdGVyYWwKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3BhdCA9IFVURjE2LmNoYXJBdChwYXQsIGlwYXQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIC0xOyAvLyB0ZXh0IGVuZGVkIGJlZm9yZSBlbmQgb2YgcGF0CisgICAgfSAgICAKKworICAgIC8qKgorICAgICAqIFBhcnNlIGFuIGludGVnZXIgYXQgcG9zLCBlaXRoZXIgb2YgdGhlIGZvcm0gXGQrIG9yIG9mIHRoZSBmb3JtCisgICAgICogMHhbMC05QS1GYS1mXSsgb3IgMFswLTddKywgdGhhdCBpcywgaW4gc3RhbmRhcmQgZGVjaW1hbCwgaGV4LAorICAgICAqIG9yIG9jdGFsIGZvcm1hdC4KKyAgICAgKiBAcGFyYW0gcG9zIElOUFVULU9VVFBVVCBwYXJhbWV0ZXIuICBPbiBpbnB1dCwgdGhlIGZpcnN0CisgICAgICogY2hhcmFjdGVyIHRvIHBhcnNlLiAgT24gb3V0cHV0LCB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYXN0CisgICAgICogcGFyc2VkIGNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBwYXJzZUludGVnZXIoU3RyaW5nIHJ1bGUsIGludFtdIHBvcywgaW50IGxpbWl0KSB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGludCB2YWx1ZSA9IDA7CisgICAgICAgIGludCBwID0gcG9zWzBdOworICAgICAgICBpbnQgcmFkaXggPSAxMDsKKworICAgICAgICBpZiAocnVsZS5yZWdpb25NYXRjaGVzKHRydWUsIHAsICIweCIsIDAsIDIpKSB7CisgICAgICAgICAgICBwICs9IDI7CisgICAgICAgICAgICByYWRpeCA9IDE2OworICAgICAgICB9IGVsc2UgaWYgKHAgPCBsaW1pdCAmJiBydWxlLmNoYXJBdChwKSA9PSAnMCcpIHsKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgICAgIHJhZGl4ID0gODsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChwIDwgbGltaXQpIHsKKyAgICAgICAgICAgIGludCBkID0gVUNoYXJhY3Rlci5kaWdpdChydWxlLmNoYXJBdChwKyspLCByYWRpeCk7CisgICAgICAgICAgICBpZiAoZCA8IDApIHsKKyAgICAgICAgICAgICAgICAtLXA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgaW50IHYgPSAodmFsdWUgKiByYWRpeCkgKyBkOworICAgICAgICAgICAgaWYgKHYgPD0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5wdXQgZGlnaXRzLCBhdCBzb21lIHBvaW50CisgICAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIHdpbGwgZ28gbmVnYXRpdmUsIGUuZy4sIGlmIHdlIGhhdmUgc2VlbgorICAgICAgICAgICAgICAgIC8vICIweDgwMDAwMDAiIGFscmVhZHkgYW5kIHRoZXJlIGlzIGFub3RoZXIgJzAnLCB3aGVuCisgICAgICAgICAgICAgICAgLy8gd2UgcGFyc2UgdGhlIG5leHQgMCB0aGUgdmFsdWUgd2lsbCBnbyBuZWdhdGl2ZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlID0gdjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgICAgICBwb3NbMF0gPSBwOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIFVuaWNvZGUgaWRlbnRpZmllciBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYXQgdGhlIGdpdmVuCisgICAgICogcG9zaXRpb24uICBSZXR1cm4gdGhlIGlkZW50aWZpZXIsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8KKyAgICAgKiBpZGVudGlmaWVyLgorICAgICAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBwYXJzZQorICAgICAqIEBwYXJhbSBwb3MgSU5QVVQtT1VQVVQgcGFyYW1ldGVyLiAgT24gSU5QVVQsIHBvc1swXSBpcyB0aGUKKyAgICAgKiBmaXJzdCBjaGFyYWN0ZXIgdG8gZXhhbWluZS4gIEl0IG11c3QgYmUgbGVzcyB0aGFuIHN0ci5sZW5ndGgoKSwKKyAgICAgKiBhbmQgaXQgbXVzdCBub3QgcG9pbnQgdG8gYSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4gIFRoYXQgaXMsIG11c3QKKyAgICAgKiBoYXZlIHBvc1swXSA8IHN0ci5sZW5ndGgoKSBhbmQKKyAgICAgKiAhVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoVVRGMTYuY2hhckF0KHN0ciwgcG9zWzBdKSkuICBPbgorICAgICAqIE9VVFBVVCwgdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IHBhcnNlZCBjaGFyYWN0ZXIuCisgICAgICogQHJldHVybiB0aGUgVW5pY29kZSBpZGVudGlmaWVyLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHZhbGlkCisgICAgICogaWRlbnRpZmllciBhdCBwb3NbMF0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VVbmljb2RlSWRlbnRpZmllcihTdHJpbmcgc3RyLCBpbnRbXSBwb3MpIHsKKyAgICAgICAgLy8gYXNzZXJ0KHBvc1swXSA8IHN0ci5sZW5ndGgoKSk7CisgICAgICAgIC8vIGFzc2VydCghVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoVVRGMTYuY2hhckF0KHN0ciwgcG9zWzBdKSkpOworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpbnQgcCA9IHBvc1swXTsKKyAgICAgICAgd2hpbGUgKHAgPCBzdHIubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGludCBjaCA9IFVURjE2LmNoYXJBdChzdHIsIHApOworICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmllclN0YXJ0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICBVVEYxNi5hcHBlbmQoYnVmLCBjaCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoVUNoYXJhY3Rlci5pc1VuaWNvZGVJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVVRGMTYuYXBwZW5kKGJ1ZiwgY2gpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHAgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGNoKTsKKyAgICAgICAgfQorICAgICAgICBwb3NbMF0gPSBwOworICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJpbSB3aGl0ZXNwYWNlIGZyb20gZW5kcyBvZiBhIFN0cmluZ0J1ZmZlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1ZmZlciB0cmltKFN0cmluZ0J1ZmZlciBiKSB7CisgICAgICAgIC8vIFRPRE8gdXBkYXRlIHRvIGhhbmRsZSBzdXJyb2dhdGVzCisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGk9MDsgaTxiLmxlbmd0aCgpICYmIENoYXJhY3Rlci5pc1doaXRlc3BhY2UoYi5jaGFyQXQoaSkpOyArK2kpIHt9CisgICAgICAgIGIuZGVsZXRlKDAsIGkpOworICAgICAgICBmb3IgKGk9Yi5sZW5ndGgoKS0xOyBpPj0wICYmIENoYXJhY3Rlci5pc1doaXRlc3BhY2UoYi5jaGFyQXQoaSkpOyAtLWkpIHt9CisgICAgICAgIHJldHVybiBiLmRlbGV0ZShpKzEsIGIubGVuZ3RoKCkpOworICAgIH0KKworICAgIC8vICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgc3RhdGljIGZpbmFsIGNoYXIgRElHSVRTW10gPSB7CisgICAgICAgIDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LAorICAgICAgICA2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCwKKyAgICAgICAgNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsCisgICAgICAgIDg1LDg2LDg3LDg4LDg5LDkwCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEFwcGVuZCBhIG51bWJlciB0byB0aGUgZ2l2ZW4gU3RyaW5nQnVmZmVyIGluIHRoZSByYWRpeCAxMAorICAgICAqIGdlbmVyYXRpbmcgYXQgbGVhc3Qgb25lIGRpZ2l0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nQnVmZmVyIGFwcGVuZE51bWJlcihTdHJpbmdCdWZmZXIgcmVzdWx0LCBpbnQgbikgeworICAgICAgICByZXR1cm4gYXBwZW5kTnVtYmVyKHJlc3VsdCwgbiwgMTAsIDEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGVuZCBhIG51bWJlciB0byB0aGUgZ2l2ZW4gU3RyaW5nQnVmZmVyIGluIHRoZSBnaXZlbiByYWRpeC4KKyAgICAgKiBTdGFuZGFyZCBkaWdpdHMgJzAnLSc5JyBhcmUgdXNlZCBhbmQgbGV0dGVycyAnQSctJ1onIGZvcgorICAgICAqIHJhZGljZXMgMTEgdGhyb3VnaCAzNi4KKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSBkaWdpdHMgb2YgdGhlIG51bWJlciBhcmUgYXBwZW5kZWQgaGVyZQorICAgICAqIEBwYXJhbSBuIHRoZSBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGRpZ2l0czsgbWF5IGJlIG5lZ2F0aXZlLgorICAgICAqIElmIG5lZ2F0aXZlLCBhICctJyBpcyBwcmVwZW5kZWQgdG8gdGhlIGRpZ2l0cy4KKyAgICAgKiBAcGFyYW0gcmFkaXggYSByYWRpeCBmcm9tIDIgdG8gMzYgaW5jbHVzaXZlLgorICAgICAqIEBwYXJhbSBtaW5EaWdpdHMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cywgbm90IGluY2x1ZGluZworICAgICAqIGFueSAnLScsIHRvIHByb2R1Y2UuICBWYWx1ZXMgbGVzcyB0aGFuIDIgaGF2ZSBubyBlZmZlY3QuICBPbmUKKyAgICAgKiBkaWdpdCBpcyBhbHdheXMgZW1pdHRlZCByZWdhcmRsZXNzIG9mIHRoaXMgcGFyYW1ldGVyLgorICAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gcmVzdWx0CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdCdWZmZXIgYXBwZW5kTnVtYmVyKFN0cmluZ0J1ZmZlciByZXN1bHQsIGludCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXgsIGludCBtaW5EaWdpdHMpIHsKKyAgICAgICAgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDM2KSB7CisgICAgICAgICAgICAvLyBCb2d1cyByYWRpeAorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCByYWRpeCAiICsgcmFkaXgpOworICAgICAgICB9CisgICAgICAgIC8vIEhhbmRsZSBuZWdhdGl2ZXMKKyAgICAgICAgaWYgKG4gPCAwKSB7CisgICAgICAgICAgICBuID0gLW47CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCctJyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZGlnaXRzCisgICAgICAgIGludCBubiA9IG47CisgICAgICAgIGludCByID0gMTsKKyAgICAgICAgd2hpbGUgKG5uID49IHJhZGl4KSB7CisgICAgICAgICAgICBubiAvPSByYWRpeDsKKyAgICAgICAgICAgIHIgKj0gcmFkaXg7CisgICAgICAgICAgICAtLW1pbkRpZ2l0czsKKyAgICAgICAgfQorICAgICAgICAvLyBOb3cgZ2VuZXJhdGUgdGhlIGRpZ2l0cworICAgICAgICB3aGlsZSAoLS1taW5EaWdpdHMgPiAwKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKERJR0lUU1swXSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHIgPiAwKSB7CisgICAgICAgICAgICBpbnQgZGlnaXQgPSBuIC8gcjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoRElHSVRTW2RpZ2l0XSk7CisgICAgICAgICAgICBuIC09IGRpZ2l0ICogcjsKKyAgICAgICAgICAgIHIgLz0gcmFkaXg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhbiB1bnNpZ25lZCAzMS1iaXQgaW50ZWdlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LiAgVXNlCisgICAgICogVUNoYXJhY3Rlci5kaWdpdCgpIHRvIHBhcnNlIGluZGl2aWR1YWwgY2hhcmFjdGVycyBpbnRvIGRpZ2l0cy4KKyAgICAgKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBiZSBwYXJzZWQKKyAgICAgKiBAcGFyYW0gcG9zIElOUFVULU9VVFBVVCBwYXJhbWV0ZXIuICBPbiBlbnRyeSwgcG9zWzBdIGlzIHRoZQorICAgICAqIG9mZnNldCB3aXRoaW4gdGV4dCBhdCB3aGljaCB0byBzdGFydCBwYXJzaW5nOyBpdCBzaG91bGQgcG9pbnQKKyAgICAgKiB0byBhIHZhbGlkIGRpZ2l0LiAgT24gZXhpdCwgcG9zWzBdIGlzIHRoZSBvZmZzZXQgYWZ0ZXIgdGhlIGxhc3QKKyAgICAgKiBwYXJzZWQgY2hhcmFjdGVyLiAgSWYgdGhlIHBhcnNlIGZhaWxlZCwgaXQgd2lsbCBiZSB1bmNoYW5nZWQgb24KKyAgICAgKiBleGl0LiAgTXVzdCBiZSA+PSAwIG9uIGVudHJ5LgorICAgICAqIEBwYXJhbSByYWRpeCB0aGUgcmFkaXggaW4gd2hpY2ggdG8gcGFyc2U7IG11c3QgYmUgPj0gMiBhbmQgPD0KKyAgICAgKiAzNi4KKyAgICAgKiBAcmV0dXJuIGEgbm9uLW5lZ2F0aXZlIHBhcnNlZCBudW1iZXIsIG9yIC0xIHVwb24gcGFyc2UgZmFpbHVyZS4KKyAgICAgKiBQYXJzZSBmYWlscyBpZiB0aGVyZSBhcmUgbm8gZGlnaXRzLCB0aGF0IGlzLCBpZiBwb3NbMF0gZG9lcyBub3QKKyAgICAgKiBwb2ludCB0byBhIHZhbGlkIGRpZ2l0IG9uIGVudHJ5LCBvciBpZiB0aGUgbnVtYmVyIHRvIGJlIHBhcnNlZAorICAgICAqIGRvZXMgbm90IGZpdCBpbnRvIGEgMzEtYml0IHVuc2lnbmVkIGludGVnZXIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgcGFyc2VOdW1iZXIoU3RyaW5nIHRleHQsIGludFtdIHBvcywgaW50IHJhZGl4KSB7CisgICAgICAgIC8vIGFzc2VydChwb3NbMF0gPj0gMCk7CisgICAgICAgIC8vIGFzc2VydChyYWRpeCA+PSAyKTsKKyAgICAgICAgLy8gYXNzZXJ0KHJhZGl4IDw9IDM2KTsKKyAgICAgICAgaW50IG4gPSAwOworICAgICAgICBpbnQgcCA9IHBvc1swXTsKKyAgICAgICAgd2hpbGUgKHAgPCB0ZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICBpbnQgY2ggPSBVVEYxNi5jaGFyQXQodGV4dCwgcCk7CisgICAgICAgICAgICBpbnQgZCA9IFVDaGFyYWN0ZXIuZGlnaXQoY2gsIHJhZGl4KTsKKyAgICAgICAgICAgIGlmIChkIDwgMCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbiA9IHJhZGl4Km4gKyBkOworICAgICAgICAgICAgLy8gQVNTVU1FIHRoYXQgd2hlbiBhIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBpdCBiZWNvbWVzCisgICAgICAgICAgICAvLyBuZWdhdGl2ZS4gIEUuZy4sIDIxNDc0ODM2NCAqIDEwICsgOCA9PiBuZWdhdGl2ZSB2YWx1ZS4KKyAgICAgICAgICAgIGlmIChuIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrcDsKKyAgICAgICAgfQorICAgICAgICBpZiAocCA9PSBwb3NbMF0pIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBwb3NbMF0gPSBwOworICAgICAgICByZXR1cm4gbjsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gSEVYID0geycwJywnMScsJzInLCczJywnNCcsJzUnLCc2JywnNycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOCcsJzknLCdBJywnQicsJ0MnLCdEJywnRScsJ0YnfTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgTk9UIHByaW50YWJsZSBBU0NJSS4gIFRoZSB0YWIsCisgICAgICogbmV3bGluZSBhbmQgbGluZWZlZWQgY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZCB1bnByaW50YWJsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNVbnByaW50YWJsZShpbnQgYykgeworICAgICAgICByZXR1cm4gIShjID49IDB4MjAgJiYgYyA8PSAweDdFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFc2NhcGUgdW5wcmludGFibGUgY2hhcmFjdGVycyB1c2luZyA8YmFja3NsYXNoPnV4eHh4IG5vdGF0aW9uCisgICAgICogZm9yIFUrMDAwMCB0byBVK0ZGRkYgYW5kIDxiYWNrc2xhc2g+VXh4eHh4eHh4IGZvciBVKzEwMDAwIGFuZAorICAgICAqIGFib3ZlLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBwcmludGFibGUgQVNDSUksIHRoZW4gZG8gbm90aGluZworICAgICAqIGFuZCByZXR1cm4gRkFMU0UuICBPdGhlcndpc2UsIGFwcGVuZCB0aGUgZXNjYXBlZCBub3RhdGlvbiBhbmQKKyAgICAgKiByZXR1cm4gVFJVRS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUoU3RyaW5nQnVmZmVyIHJlc3VsdCwgaW50IGMpIHsKKyAgICAgICAgaWYgKGlzVW5wcmludGFibGUoYykpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAgICBpZiAoKGMgJiB+MHhGRkZGKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnVScpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSEVYWzB4RiYoYz4+MjgpXSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChIRVhbMHhGJihjPj4yNCldKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEhFWFsweEYmKGM+PjIwKV0pOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSEVYWzB4RiYoYz4+MTYpXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3UnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSEVYWzB4RiYoYz4+MTIpXSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEhFWFsweEYmKGM+PjgpXSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEhFWFsweEYmKGM+PjQpXSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEhFWFsweEYmY10pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBzZXQsIGlnbm9yaW5nIHF1b3RlZCB0ZXh0LgorICAgICAqIEZvciBleGFtcGxlLCBpbiB0aGUgc3RyaW5nICJhYmMnaGlkZSdoIiwgdGhlICdoJyBpbiAiaGlkZSIgd2lsbCBub3QgYmUKKyAgICAgKiBmb3VuZCBieSBhIHNlYXJjaCBmb3IgImgiLiAgVW5saWtlIFN0cmluZy5pbmRleE9mKCksIHRoaXMgbWV0aG9kIHNlYXJjaGVzCisgICAgICogbm90IGZvciBhIHNpbmdsZSBjaGFyYWN0ZXIsIGJ1dCBmb3IgYW55IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nCisgICAgICogPGNvZGU+c2V0T2ZDaGFyczwvY29kZT4uCisgICAgICogQHBhcmFtIHRleHQgdGV4dCB0byBiZSBzZWFyY2hlZAorICAgICAqIEBwYXJhbSBzdGFydCB0aGUgYmVnaW5uaW5nIGluZGV4LCBpbmNsdXNpdmU7IDxjb2RlPjAgPD0gc3RhcnQKKyAgICAgKiA8PSBsaW1pdDwvY29kZT4uCisgICAgICogQHBhcmFtIGxpbWl0IHRoZSBlbmRpbmcgaW5kZXgsIGV4Y2x1c2l2ZTsgPGNvZGU+c3RhcnQgPD0gbGltaXQKKyAgICAgKiA8PSB0ZXh0Lmxlbmd0aCgpPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gc2V0T2ZDaGFycyBzdHJpbmcgd2l0aCBvbmUgb3IgbW9yZSBkaXN0aW5jdCBjaGFyYWN0ZXJzCisgICAgICogQHJldHVybiBPZmZzZXQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiA8Y29kZT5zZXRPZkNoYXJzPC9jb2RlPgorICAgICAqIGZvdW5kLCBvciAtMSBpZiBub3QgZm91bmQuCisgICAgICogQHNlZSBTdHJpbmcjaW5kZXhPZgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IHF1b3RlZEluZGV4T2YoU3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNldE9mQ2hhcnMpIHsKKyAgICAgICAgZm9yIChpbnQgaT1zdGFydDsgaTxsaW1pdDsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGMgPSB0ZXh0LmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChjID09IEJBQ0tTTEFTSCkgeworICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBBUE9TVFJPUEhFKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGxpbWl0CisgICAgICAgICAgICAgICAgICAgICAgICYmIHRleHQuY2hhckF0KGkpICE9IEFQT1NUUk9QSEUpIHt9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNldE9mQ2hhcnMuaW5kZXhPZihjKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXM7IGZvcm1hdCB0aGUgZ2l2ZW4gdGV4dCBpbiB0aGUgZm9ybQorICAgICAqIGFhYXtiYmJ8Y2NjfGRkZH1lZWUsIHdoZXJlIHRoZSB7fSBpbmRpY2F0ZSB0aGUgY29udGV4dCBzdGFydAorICAgICAqIGFuZCBsaW1pdCwgYW5kIHRoZSB8fCBpbmRpY2F0ZSB0aGUgc3RhcnQgYW5kIGxpbWl0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdElucHV0KFJlcGxhY2VhYmxlU3RyaW5nIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIHBvcykgeworICAgICAgICBTdHJpbmdCdWZmZXIgYXBwZW5kVG8gPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvcm1hdElucHV0KGFwcGVuZFRvLCBpbnB1dCwgcG9zKTsKKyAgICAgICAgcmV0dXJuIGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eS5lc2NhcGUoYXBwZW5kVG8udG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRm9yIGRlYnVnZ2luZyBwdXJwb3NlczsgZm9ybWF0IHRoZSBnaXZlbiB0ZXh0IGluIHRoZSBmb3JtCisgICAgICogYWFhe2JiYnxjY2N8ZGRkfWVlZSwgd2hlcmUgdGhlIHt9IGluZGljYXRlIHRoZSBjb250ZXh0IHN0YXJ0CisgICAgICogYW5kIGxpbWl0LCBhbmQgdGhlIHx8IGluZGljYXRlIHRoZSBzdGFydCBhbmQgbGltaXQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdCdWZmZXIgZm9ybWF0SW5wdXQoU3RyaW5nQnVmZmVyIGFwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIHBvcykgeworICAgICAgICBpZiAoMCA8PSBwb3MuY29udGV4dFN0YXJ0ICYmCisgICAgICAgICAgICBwb3MuY29udGV4dFN0YXJ0IDw9IHBvcy5zdGFydCAmJgorICAgICAgICAgICAgcG9zLnN0YXJ0IDw9IHBvcy5saW1pdCAmJgorICAgICAgICAgICAgcG9zLmxpbWl0IDw9IHBvcy5jb250ZXh0TGltaXQgJiYKKyAgICAgICAgICAgIHBvcy5jb250ZXh0TGltaXQgPD0gaW5wdXQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIGEsIGIsIGMsIGQsIGU7CisgICAgICAgICAgICAvL2EgPSBpbnB1dC5zdWJzdHJpbmcoMCwgcG9zLmNvbnRleHRTdGFydCk7CisgICAgICAgICAgICBiID0gaW5wdXQuc3Vic3RyaW5nKHBvcy5jb250ZXh0U3RhcnQsIHBvcy5zdGFydCk7CisgICAgICAgICAgICBjID0gaW5wdXQuc3Vic3RyaW5nKHBvcy5zdGFydCwgcG9zLmxpbWl0KTsKKyAgICAgICAgICAgIGQgPSBpbnB1dC5zdWJzdHJpbmcocG9zLmxpbWl0LCBwb3MuY29udGV4dExpbWl0KTsKKyAgICAgICAgICAgIC8vZSA9IGlucHV0LnN1YnN0cmluZyhwb3MuY29udGV4dExpbWl0LCBpbnB1dC5sZW5ndGgoKSk7CisgICAgICAgICAgICBhcHBlbmRUby4vL2FwcGVuZChhKS4KKyAgICAgICAgICAgICAgICBhcHBlbmQoJ3snKS5hcHBlbmQoYikuCisgICAgICAgICAgICAgICAgYXBwZW5kKCd8JykuYXBwZW5kKGMpLmFwcGVuZCgnfCcpLmFwcGVuZChkKS4KKyAgICAgICAgICAgICAgICBhcHBlbmQoJ30nKQorICAgICAgICAgICAgICAgIC8vLmFwcGVuZChlKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFwcGVuZFRvLmFwcGVuZCgiSU5WQUxJRCBQb3NpdGlvbiB7Y3M9IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zLmNvbnRleHRTdGFydCArICIsIHM9IiArIHBvcy5zdGFydCArICIsIGw9IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zLmxpbWl0ICsgIiwgY2w9IiArIHBvcy5jb250ZXh0TGltaXQgKyAifSBvbiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRJbnB1dChSZXBsYWNlYWJsZSBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBwb3MpIHsKKyAgICAgICAgcmV0dXJuIGZvcm1hdElucHV0KChSZXBsYWNlYWJsZVN0cmluZykgaW5wdXQsIHBvcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nQnVmZmVyIGZvcm1hdElucHV0KFN0cmluZ0J1ZmZlciBhcHBlbmRUbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlYWJsZSBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiBwb3MpIHsgCisgICAgICAgIHJldHVybiBmb3JtYXRJbnB1dChhcHBlbmRUbywgKFJlcGxhY2VhYmxlU3RyaW5nKSBpbnB1dCwgcG9zKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNpbWlsYXIgdG8gU3RyaW5nQnVmZmVyLmdldENoYXJzLCB2ZXJzaW9uIDEuMy4KKyAgICAqIFNpbmNlIEpESyAxLjIgaW1wbGVtZW50cyBTdHJpbmdCdWZmZXIuZ2V0Q2hhcnMgZGlmZmVyZW50bHksIHRoaXMgbWV0aG9kIAorICAgICogaXMgaGVyZSB0byBwcm92aWRlIGNvbnNpc3RlbnQgcmVzdWx0cy4KKyAgICAqIFRvIGJlIHJlbW92ZWQgYWZ0ZXIgSkRLIDEuMiBjZWFzZWQgdG8gYmUgdGhlIHJlZmVyZW5jZSBwbGF0Zm9ybS4KKyAgICAqIEBwYXJhbSBzcmMgc291cmNlIHN0cmluZyBidWZmZXIKKyAgICAqIEBwYXJhbSBzcmNCZWdpbiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzcmMgdG8gcmV0cmlldmUgZnJvbQorICAgICogQHBhcmFtIHNyY0VuZCBvZmZzZXQgdG8gdGhlIGVuZCBvZiB0aGUgc3JjIHRvIHJldHJpZXZlIGZyb20KKyAgICAqIEBwYXJhbSBkc3QgY2hhciBhcnJheSB0byBzdG9yZSB0aGUgcmV0cmlldmVkIGNoYXJzCisgICAgKiBAcGFyYW0gZHN0QmVnaW4gb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgZGVzdGluYXRpb24gY2hhciBhcnJheSB0byAKKyAgICAqICAgICAgICAgICAgICAgICBzdG9yZSB0aGUgcmV0cmlldmVkIGNoYXJzCisgICAgKiBAZHJhZnQgc2luY2UgSUNVNEogMi4wCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZ2V0Q2hhcnMoU3RyaW5nQnVmZmVyIHNyYywgaW50IHNyY0JlZ2luLCBpbnQgc3JjRW5kLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkc3RbXSwgaW50IGRzdEJlZ2luKSAKKyAgICB7CQorICAgICAgICBpZiAoc3JjQmVnaW4gPT0gc3JjRW5kKSB7CSAgICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQkKKyAgICAgICAgc3JjLmdldENoYXJzKHNyY0JlZ2luLCBzcmNFbmQsIGRzdCwgZHN0QmVnaW4pOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgYSBjaGFyYWN0ZXIgdG8gYSBydWxlIHRoYXQgaXMgYmVpbmcgYnVpbHQgdXAuICBUbyBmbHVzaAorICAgICAqIHRoZSBxdW90ZUJ1ZiB0byBydWxlLCBtYWtlIG9uZSBmaW5hbCBjYWxsIHdpdGggaXNMaXRlcmFsID09IHRydWUuCisgICAgICogSWYgdGhlcmUgaXMgbm8gZmluYWwgY2hhcmFjdGVyLCBwYXNzIGluIChpbnQpLTEgYXMgYy4KKyAgICAgKiBAcGFyYW0gcnVsZSB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0aGUgY2hhcmFjdGVyIHRvCisgICAgICogQHBhcmFtIGMgdGhlIGNoYXJhY3RlciB0byBhcHBlbmQsIG9yIChpbnQpLTEgaWYgbm9uZS4KKyAgICAgKiBAcGFyYW0gaXNMaXRlcmFsIGlmIHRydWUsIHRoZW4gdGhlIGdpdmVuIGNoYXJhY3RlciBzaG91bGQgbm90IGJlCisgICAgICogcXVvdGVkIG9yIGVzY2FwZWQuICBVc3VhbGx5IHRoaXMgbWVhbnMgaXQgaXMgYSBzeW50YWN0aWMgZWxlbWVudAorICAgICAqIHN1Y2ggYXMgPiBvciAkCisgICAgICogQHBhcmFtIGVzY2FwZVVucHJpbnRhYmxlIGlmIHRydWUsIHRoZW4gdW5wcmludGFibGUgY2hhcmFjdGVycworICAgICAqIHNob3VsZCBiZSBlc2NhcGVkIHVzaW5nIGVzY2FwZVVucHJpbnRhYmxlKCkuICBUaGVzZSBlc2NhcGVzIHdpbGwKKyAgICAgKiBhcHBlYXIgb3V0c2lkZSBvZiBxdW90ZXMuCisgICAgICogQHBhcmFtIHF1b3RlQnVmIGEgYnVmZmVyIHdoaWNoIGlzIHVzZWQgdG8gYnVpbGQgdXAgcXVvdGVkCisgICAgICogc3Vic3RyaW5ncy4gIFRoZSBjYWxsZXIgc2hvdWxkIGluaXRpYWxseSBzdXBwbHkgYW4gZW1wdHkgYnVmZmVyLAorICAgICAqIGFuZCB0aGVyZWFmdGVyIHNob3VsZCBub3QgbW9kaWZ5IHRoZSBidWZmZXIuICBUaGUgYnVmZmVyIHNob3VsZCBiZQorICAgICAqIGNsZWFyZWQgb3V0IGJ5LCBhdCB0aGUgZW5kLCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpdGggYSBsaXRlcmFsCisgICAgICogY2hhcmFjdGVyICh3aGljaCBtYXkgYmUgLTEpLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhcHBlbmRUb1J1bGUoU3RyaW5nQnVmZmVyIHJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNMaXRlcmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBlc2NhcGVVbnByaW50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBxdW90ZUJ1ZikgeworICAgICAgICAvLyBJZiB3ZSBhcmUgZXNjYXBpbmcgdW5wcmludGFibGVzLCB0aGVuIGVzY2FwZSB0aGVtIG91dHNpZGUKKyAgICAgICAgLy8gcXVvdGVzLiAgXFx1IGFuZCBcXFUgYXJlIG5vdCByZWNvZ25pemVkIHdpdGhpbiBxdW90ZXMuICBUaGUgc2FtZQorICAgICAgICAvLyBsb2dpYyBhcHBsaWVzIHRvIGxpdGVyYWxzLCBidXQgbGl0ZXJhbHMgYXJlIG5ldmVyIGVzY2FwZWQuCisgICAgICAgIGlmIChpc0xpdGVyYWwgfHwKKyAgICAgICAgICAgIChlc2NhcGVVbnByaW50YWJsZSAmJiBVdGlsaXR5LmlzVW5wcmludGFibGUoYykpKSB7CisgICAgICAgICAgICBpZiAocXVvdGVCdWYubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgcHJlZmVyIGJhY2tzbGFzaCBBUE9TVFJPUEhFIHRvIGRvdWJsZSBBUE9TVFJPUEhFCisgICAgICAgICAgICAgICAgLy8gKG1vcmUgcmVhZGFibGUsIGxlc3Mgc2ltaWxhciB0byAiKSBzbyBpZiB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgICAvLyBkb3VibGUgQVBPU1RST1BIRXMgYXQgdGhlIGVuZHMsIHdlIHB1bGwgdGhlbSBvdXRzaWRlCisgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHF1b3RlLgorCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBxdW90ZUJ1ZiBpcyBBUE9TVFJPUEhFCisgICAgICAgICAgICAgICAgLy8gKGRvdWJsZWQpIHRoZW4gcHVsbCBpdCBvdXQuCisgICAgICAgICAgICAgICAgd2hpbGUgKHF1b3RlQnVmLmxlbmd0aCgpID49IDIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVCdWYuY2hhckF0KDApID09IEFQT1NUUk9QSEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVCdWYuY2hhckF0KDEpID09IEFQT1NUUk9QSEUpIHsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS5hcHBlbmQoQkFDS1NMQVNIKS5hcHBlbmQoQVBPU1RST1BIRSk7CisgICAgICAgICAgICAgICAgICAgIHF1b3RlQnVmLmRlbGV0ZSgwLCAyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgdGhpbmcgaW4gdGhlIHF1b3RlQnVmIGlzIEFQT1NUUk9QSEUKKyAgICAgICAgICAgICAgICAvLyAoZG91YmxlZCkgdGhlbiByZW1vdmUgYW5kIGNvdW50IGl0IGFuZCBhZGQgaXQgYWZ0ZXIuCisgICAgICAgICAgICAgICAgaW50IHRyYWlsaW5nQ291bnQgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChxdW90ZUJ1Zi5sZW5ndGgoKSA+PSAyICYmCisgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlQnVmLmNoYXJBdChxdW90ZUJ1Zi5sZW5ndGgoKS0yKSA9PSBBUE9TVFJPUEhFICYmCisgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlQnVmLmNoYXJBdChxdW90ZUJ1Zi5sZW5ndGgoKS0xKSA9PSBBUE9TVFJPUEhFKSB7CisgICAgICAgICAgICAgICAgICAgIHF1b3RlQnVmLnNldExlbmd0aChxdW90ZUJ1Zi5sZW5ndGgoKS0yKTsKKyAgICAgICAgICAgICAgICAgICAgKyt0cmFpbGluZ0NvdW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocXVvdGVCdWYubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGUuYXBwZW5kKEFQT1NUUk9QSEUpOworICAgICAgICAgICAgICAgICAgICAvLyBqZGsgMS4zLjEgZG9lcyBub3QgaGF2ZSBhcHBlbmQoU3RyaW5nQnVmZmVyKSB5ZXQKKyAgICAgICAgICAgICAgICAgICAgaWYoSUNVRGVidWcuaXNKREsxNE9ySGlnaGVyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUuYXBwZW5kKHF1b3RlQnVmKTsKKyAgICAgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICBydWxlLmFwcGVuZChxdW90ZUJ1Zi50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBydWxlLmFwcGVuZChBUE9TVFJPUEhFKTsKKyAgICAgICAgICAgICAgICAgICAgcXVvdGVCdWYuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAodHJhaWxpbmdDb3VudC0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICBydWxlLmFwcGVuZChCQUNLU0xBU0gpLmFwcGVuZChBUE9TVFJPUEhFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8qIFNpbmNlIHNwYWNlcyBhcmUgaWdub3JlZCBkdXJpbmcgcGFyc2luZywgdGhleSBhcmUKKyAgICAgICAgICAgICAgICAgKiBlbWl0dGVkIG9ubHkgZm9yIHJlYWRhYmlsaXR5LiAgV2UgZW1pdCBvbmUgaGVyZQorICAgICAgICAgICAgICAgICAqIG9ubHkgaWYgdGhlcmUgaXNuJ3QgYWxyZWFkeSBvbmUgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgKiBydWxlLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChjID09ICcgJykgeworICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gcnVsZS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDAgJiYgcnVsZS5jaGFyQXQobGVuLTEpICE9ICcgJykgeworICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWVzY2FwZVVucHJpbnRhYmxlIHx8ICFVdGlsaXR5LmVzY2FwZVVucHJpbnRhYmxlKHJ1bGUsIGMpKSB7CisgICAgICAgICAgICAgICAgICAgIFVURjE2LmFwcGVuZChydWxlLCBjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBFc2NhcGUgJyBhbmQgJ1wnIGFuZCBkb24ndCBiZWdpbiBhIHF1b3RlIGp1c3QgZm9yIHRoZW0KKyAgICAgICAgZWxzZSBpZiAocXVvdGVCdWYubGVuZ3RoKCkgPT0gMCAmJgorICAgICAgICAgICAgICAgICAoYyA9PSBBUE9TVFJPUEhFIHx8IGMgPT0gQkFDS1NMQVNIKSkgeworICAgICAgICAgICAgcnVsZS5hcHBlbmQoQkFDS1NMQVNIKS5hcHBlbmQoKGNoYXIpYyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTcGVjaWFscyAocHJpbnRhYmxlIGFzY2lpIHRoYXQgaXNuJ3QgWzAtOWEtekEtWl0pIGFuZAorICAgICAgICAvLyB3aGl0ZXNwYWNlIG5lZWQgcXVvdGluZy4gIEFsc28gYXBwZW5kIHN0dWZmIHRvIHF1b3RlcyBpZiB3ZSBhcmUKKyAgICAgICAgLy8gYnVpbGRpbmcgdXAgYSBxdW90ZWQgc3Vic3RyaW5nIGFscmVhZHkuCisgICAgICAgIGVsc2UgaWYgKHF1b3RlQnVmLmxlbmd0aCgpID4gMCB8fAorICAgICAgICAgICAgICAgICAoYyA+PSAweDAwMjEgJiYgYyA8PSAweDAwN0UgJiYKKyAgICAgICAgICAgICAgICAgICEoKGMgPj0gMHgwMDMwLyonMCcqLyAmJiBjIDw9IDB4MDAzOS8qJzknKi8pIHx8CisgICAgICAgICAgICAgICAgICAgIChjID49IDB4MDA0MS8qJ0EnKi8gJiYgYyA8PSAweDAwNUEvKidaJyovKSB8fAorICAgICAgICAgICAgICAgICAgICAoYyA+PSAweDAwNjEvKidhJyovICYmIGMgPD0gMHgwMDdBLyoneicqLykpKSB8fAorICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuaXNSdWxlV2hpdGVTcGFjZShjKSkgeworICAgICAgICAgICAgVVRGMTYuYXBwZW5kKHF1b3RlQnVmLCBjKTsKKyAgICAgICAgICAgIC8vIERvdWJsZSAnIHdpdGhpbiBhIHF1b3RlCisgICAgICAgICAgICBpZiAoYyA9PSBBUE9TVFJPUEhFKSB7CisgICAgICAgICAgICAgICAgcXVvdGVCdWYuYXBwZW5kKChjaGFyKWMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgYXBwZW5kCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVVRGMTYuYXBwZW5kKHJ1bGUsIGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwZW5kIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIHJ1bGUuICBDYWxscyB0aGUgc2luZ2xlLWNoYXJhY3RlcgorICAgICAqIHZlcnNpb24gb2YgYXBwZW5kVG9SdWxlIGZvciBlYWNoIGNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXBwZW5kVG9SdWxlKFN0cmluZ0J1ZmZlciBydWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzTGl0ZXJhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgcXVvdGVCdWYpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRleHQubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgLy8gT2theSB0byBwcm9jZXNzIGluIDE2LWJpdCBjb2RlIHVuaXRzIGhlcmUKKyAgICAgICAgICAgIGFwcGVuZFRvUnVsZShydWxlLCB0ZXh0LmNoYXJBdChpKSwgaXNMaXRlcmFsLCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBtYXRjaGVyIHJlZmVyZW5jZSwgd2hpY2ggbWF5IGJlIG51bGwsIGFwcGVuZCBpdHMKKyAgICAgKiBwYXR0ZXJuIGFzIGEgbGl0ZXJhbCB0byB0aGUgZ2l2ZW4gcnVsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXBwZW5kVG9SdWxlKFN0cmluZ0J1ZmZlciBydWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZU1hdGNoZXIgbWF0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgcXVvdGVCdWYpIHsKKyAgICAgICAgaWYgKG1hdGNoZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgYXBwZW5kVG9SdWxlKHJ1bGUsIG1hdGNoZXIudG9QYXR0ZXJuKGVzY2FwZVVucHJpbnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbXBhcmVzIDIgdW5zaWduZWQgaW50ZWdlcnMKKyAgICAgKiBAcGFyYW0gc291cmNlIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyCisgICAgICogQHBhcmFtIHRhcmdldCAzMiBiaXQgdW5zaWduZWQgaW50ZWdlcgorICAgICAqIEByZXR1cm4gMCBpZiBlcXVhbHMsIDEgaWYgc291cmNlIGlzIGdyZWF0ZXIgdGhhbiB0YXJnZXQgYW5kIC0xIAorICAgICAqICAgICAgICAgb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY29tcGFyZVVuc2lnbmVkKGludCBzb3VyY2UsIGludCB0YXJnZXQpIAorICAgIHsKKyAgICAgICAgaWYgKHNvdXJjZSA9PSB0YXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChzb3VyY2UgPj0gMCkgeworICAgICAgICAgICAgaWYgKHNvdXJjZSA8IHRhcmdldCB8fCB0YXJnZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfSAKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzb3VyY2UgPCB0YXJnZXQgJiYgdGFyZ2V0IDwgMCkgeworICAgICAgICAgICAgLy8gc291cmNlIDwgMCwgc28KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0JyZWFrSXRlcmF0b3JSdWxlcy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9CcmVha0l0ZXJhdG9yUnVsZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NzU4OWZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9CcmVha0l0ZXJhdG9yUnVsZXMuamF2YQpAQCAtMCwwICsxLDM5MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9CcmVha0l0ZXJhdG9yUnVsZXMuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzAzLzAxIDAyOjM3OjQ3ICQKKyAqICRSZXZpc2lvbjogMS4xMCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBEZWZhdWx0IGJyZWFrLWl0ZXJhdG9yIHJ1bGVzLiAgVGhlc2UgcnVsZXMgYXJlIG1vcmUgb3IgbGVzcyBnZW5lcmFsIGZvcgorICogYWxsIGxvY2FsZXMsIGFsdGhvdWdoIHRoZXJlIGFyZSBwcm9iYWJseSBhIGZldyB3ZSdyZSBtaXNzaW5nLiAgVGhlCisgKiBiZWhhdmlvciBjdXJyZW50bHkgbWltaWNzIHRoZSBiZWhhdmlvciBvZiBCcmVha0l0ZXJhdG9yIGluIEpESyAxLjIuCisgKiBUaGVyZSBhcmUga25vd24gZGVmaWNpZW5jaWVzIGluIHRoaXMgYmVoYXZpb3IsIGluY2x1ZGluZyB0aGUgZmFjdCB0aGF0CisgKiB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIENKSyBjaGFyYWN0ZXJzIHdvcmtzIGZvciBKYXBhbmVzZSBidXQgbm90IGZvcgorICogQ2hpbmVzZSwgYW5kIHRoYXQgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYW4gYXBwcm9wcmlhdGUgbG9jYWxlIGZvcgorICogVGhhaS4gIFRoZSByZXNvdXJjZXMgd2lsbCBldmVudHVhbGx5IGJlIHVwZGF0ZWQgdG8gZml4IHRoZXNlIHByb2JsZW1zLgorICovCisKKyAvKiBNb2RpZmllZCBmb3IgSGluZGkgMy8xLzk5LiAqLworCitwdWJsaWMgY2xhc3MgQnJlYWtJdGVyYXRvclJ1bGVzIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRzOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGNvbnRlbnRzID0geworICAgICAgICAvLyBCcmVha0l0ZXJhdG9yQ2xhc3NlcyBsaXN0cyB0aGUgY2xhc3MgbmFtZXMgdG8gaW5zdGFudGlhdGUgZm9yIGVhY2gKKyAgICAgICAgLy8gYnVpbHQtaW4gdHlwZSBvZiBCcmVha0l0ZXJhdG9yCisgICAgICAgIHsgIkJyZWFrSXRlcmF0b3JDbGFzc2VzIiwKKyAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7ICJSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIiwgICAgIC8vIGNoYXJhY3Rlci1icmVhayBpdGVyYXRvciBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IiLCAgICAgLy8gd29yZC1icmVhayBpdGVyYXRvciBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IiLCAgICAgLy8gbGluZS1icmVhayBpdGVyYXRvciBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IiLCAgICAgLy8gc2VudGVuY2UtYnJlYWsgaXRlcmF0b3IgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIn0gICAgIC8vIFRpdGxlLUNhc2UgYnJlYWsgaXRlcmF0b3IgY2xhc3MKKyAgICAgICAgfSwKKworICAgICAgICAvLyBydWxlcyBkZXNjcmliaW5nIGhvdyB0byBicmVhayBiZXR3ZWVuIGxvZ2ljYWwgY2hhcmFjdGVycworICAgICAgICB7ICJDaGFyYWN0ZXJCcmVha1J1bGVzIiwKKyAgICAgICAgICAgIC8vIGlnbm9yZSBub24tc3BhY2luZyBtYXJrcyBhbmQgZW5jbG9zaW5nIG1hcmtzIChzaW5jZSB3ZSBuZXZlcgorICAgICAgICAgICAgLy8gcHV0IGEgYnJlYWsgYmVmb3JlIGlnbm9yZSBjaGFyYWN0ZXJzLCB0aGlzIGtlZXBzIGNvbWJpbmluZworICAgICAgICAgICAgLy8gYWNjZW50cyB3aXRoIHRoZSBiYXNlIGNoYXJhY3RlcnMgdGhleSBtb2RpZnkpCisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIHZpcmFtYSB0aGluZyBpcyBwcm9iYWJseSBhIGhhY2suLi4KKyAgICAgICAgICAgICAgIiRkZXZhVmlyYW1hPVtcdTA5NGRdOyIKKyAgICAgICAgICAgICsgIiRfaWdub3JlXz1bW1s6TW46XS0kZGV2YVZpcmFtYV1bOk1lOl1dOyIKKworICAgICAgICAgICAgLy8gb3RoZXIgY2F0ZWdvcnkgZGVmaW5pdGlvbnMKKyAgICAgICAgICAgICsgIiRjaG9zZW9uZz1bXHUxMTAwLVx1MTE1Zl07IgorICAgICAgICAgICAgKyAiJGp1bmdzZW9uZz1bXHUxMTYwLVx1MTFhN107IgorICAgICAgICAgICAgKyAiJGpvbmdzZW9uZz1bXHUxMWE4LVx1MTFmZl07IgorICAgICAgICAgICAgKyAiJHN1cnJfaGk9W1x1ZDgwMC1cdWRiZmZdOyIKKyAgICAgICAgICAgICsgIiRzdXJyX2xvPVtcdWRjMDAtXHVkZmZmXTsiCisKKyAgICAgICAgICAgIC8vIGJyZWFrIGFmdGVyIGV2ZXJ5IGNoYXJhY3RlciwgZXhjZXB0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICArICIuOyIKKworICAgICAgICAgICAgLy8ga2VlcCBDUkxGIHNlcXVlbmNlcyB0b2dldGhlcgorICAgICAgICAgICAgKyAiXHJcbjsiCisKKyAgICAgICAgICAgIC8vIGtlZXAgc3Vycm9nYXRlIHBhaXJzIHRvZ2V0aGVyCisgICAgICAgICAgICArICIkc3Vycl9oaSRzdXJyX2xvOyIKKworICAgICAgICAgICAgLy8ga2VlcCBIYW5ndWwgc3lsbGFibGVzIHNwZWxsZWQgb3V0IHVzaW5nIGNvbmpvaW5pbmcgamFtbyB0b2dldGhlcgorICAgICAgICAgICAgKyAiJGNob3Nlb25nKiRqdW5nc2VvbmcqJGpvbmdzZW9uZyo7IgorCisgICAgICAgICAgICAvLyByZXZpc2VkIERldmFuYWdhcmkgc3VwcG9ydCAtIGZ1bGwgc3lsbGFibGVzCisgICAgICAgICAgICAvLyBzaW1wbGlmaWVkIGJ5IGFsbG93aW5nIHNvbWUgbm9uc2Vuc2Ugc3lsbGFibGVzCisgICAgICAgICAgICAvLyBGSVhNRTogbnVrdGEsIG5vbi1zcGFjaW5nIG1hdHJhcywgYW5kIHRoZSBtb2RpZmllcnMKKyAgICAgICAgICAgIC8vIGFyZSBhbGwgaWdub3JhYmxlLCBzbyB0aGV5IGRvbid0IG5lZWQgdG8gYmUgbWVudGlvbmVkCisgICAgICAgICAgICAvLyBoZXJlLi4uIChidXQgdGhlIHJ1bGVzIHJlYWQgYmV0dGVyIGlmIHRoZXkgYXJlLi4uKQorICAgICAgICAgICAgKyAiJGRldmFOdWt0YT1bXHUwOTNjXTsiCisgICAgICAgICAgICArICIkZGV2YVZvd2VsPVtcdTA5MDUtXHUwOTE0XTsiCisgICAgICAgICAgICArICIkZGV2YU1hdHJhPVtcdTA5M2UtXHUwOTRjXHUwOTYyXHUwOTYzXTsiCisgICAgICAgICAgICArICIkZGV2YUNvbnNvbmFudD1bXHUwOTE1LVx1MDkzOVx1MDk1OC1cdTA5NWZdOyIKKyAgICAgICAgICAgICsgIiRkZXZhTW9kaWZpZXI9W1x1MDkwMS1cdTA5MDNcdTA5NTEtXHUwOTU0XTsiCisgICAgICAgICAgICArICIkenduaj1bXHUyMDBjXTsiCisgICAgICAgICAgICArICIkendqPVtcdTIwMGRdOyIKKworICAgICAgICAgICAgLy8gY29uc29uYW50IGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgYSBudWt0YQorICAgICAgICAgICAgKyAiJGRldmFDTj0oJGRldmFDb25zb25hbnQkZGV2YU51a3RhPyk7IgorCisgICAgICAgICAgICAvLyBhIHZpcmFtYSBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCB6d2ogb3IgenduagorICAgICAgICAgICAgKyAiJGRldmFKb2luPSgkZGV2YVZpcmFtYVskendqJHp3bmpdPyk7IgorCisgICAgICAgICAgICAvLyBhIHN5bGxhYmxlIHdpdGggYXQgbGVhc3Qgb25lIGNvbnNvbmFudAorICAgICAgICAgICAgKyAiKCRkZXZhQ04kZGV2YUpvaW4pKiRkZXZhQ04oJGRldmFKb2lufCRkZXZhTWF0cmE/JGRldmFNb2RpZmllciopOyIKKworICAgICAgICAgICAgLy8gYSBzeWxsYWJsZSB3aXRob3V0IGNvbnNvbmFudHMKKyAgICAgICAgICAgICsgIiRkZXZhVm93ZWwkZGV2YU1vZGlmaWVyKjsiCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gZGVmYXVsdCBydWxlcyBmb3IgZmluZGluZyB3b3JkIGJvdW5kYXJpZXMKKyAgICAgICAgeyAiV29yZEJyZWFrUnVsZXMiLAorCisgICAgICAgICAgICAvLyBTdXJyb2dhdGVzLiAgVW50aWwgYmV0dGVyIHN1cHBvcnQgaXMgYXZhaWxhYmxlLCBpZ25vcmUgbG93IHN1cnJvZ2F0ZXMKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbmQgY2xhc3NpZnkgaGlnaCBzdXJyb2dhdGVzIGFjY29yZGluZyB0byB0aGUgY2hhcmFjdGVycyB3aXRoaW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgICAiJHN1cnJfbG89W1x1ZGMwMC1cdWRmZmZdOyIKKyAgICAgICAgICAgICsgIiRzdXJyX2hpX2xldD1bXHVkODAwXHVkODAxXHVkODM0XHVkODM1XTsiICAgLy8gSGkgU3Vycm9nYXRlcyBmb3IgT2xkIEl0YWxpYywgR290aGljLCBEZXNlcmV0LCBNdXNpYywgTWF0aAorICAgICAgICAgICAgKyAiJHN1cnJfaGlfaWRlbz1bXHVkODQwLVx1ZDg4MF07IiAgICAgICAgICAgICAvLyBIaSBTdXJyb2dhdGVzIGZvciBDSksKKwkJCSsgIiRzdXJyX2hpX3RhZz1bXHVkYjQwXTsiICAgICAgICAgICAgICAgICAgICAgLy8gSGkgU3Vycm9nYXRlcyBmb3IgVGFncworICAgICAgICAgICAgKyAiJHN1cnJfaGlfcHVhPVtcdWRiODAtXHVkYmZmXTsiICAgICAgICAgICAgICAvLyBIaSBTdXJyb2dhdGVzIGZvciBQcml2YXRlIFVzZS4KKworICAgICAgICAgICAgLy8gUHJpdmF0ZSBVc2UgQXJlYS4gIFRyZWF0IGxpa2UgaWRlb2dyYXBocy4KKwkJCSsgIiRwdWE9W1x1ZTAwMC1cdWY4ZmYkc3Vycl9oaV9wdWFdOyIKKworICAgICAgICAgICAgLy8gaWdub3JlIG5vbi1zcGFjaW5nIG1hcmtzLCBlbmNsb3NpbmcgbWFya3MsIGFuZCBmb3JtYXQgY2hhcmFjdGVycywKKyAgICAgICAgICAgIC8vIGFsbCBvZiB3aGljaCBzaG91bGQgbm90IGluZmx1ZW5jZSB0aGUgYWxnb3JpdGhtCisgICAgICAgICAgICArICIkX2lnbm9yZV89W1s6TW46XVs6TWU6XVs6Q2Y6XSRzdXJyX2xvJHN1cnJfaGlfdGFnXTsiCisKKyAgICAgICAgICAgIC8vIEhpbmRpIHBocmFzZSBzZXBhcmF0b3IsIGthbmppLCBrYXRha2FuYSwgaGlyYWdhbmEsIENKSyBkaWFjcml0aWNhbHMsCisgICAgICAgICAgICAvLyBvdGhlciBsZXR0ZXJzLCBhbmQgZGlnaXRzCisgICAgICAgICAgICArICIkZGFuZGE9W1x1MDk2NFx1MDk2NV07IgorICAgICAgICAgICAgKyAiJGthbmppPVtcdTMwMDVcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZhNVx1ZjkwMC1cdWZhNmEkc3Vycl9oaV9pZGVvJHB1YV07IgorICAgICAgICAgICAgKyAiJGthdGE9W1x1MzA5OS1cdTMwOWNcdTMwYTEtXHUzMGZlXTsiCisgICAgICAgICAgICArICIkaGlyYT1bXHUzMDQxLVx1MzA5ZVx1MzBmY107IgorICAgICAgICAgICAgKyAiJGxldD1bW1s6TDpdWzpNYzpdJHN1cnJfaGlfbGV0XS1bJGthbmppJGthdGEkaGlyYV1dOyIKKyAgICAgICAgICAgICsgIiRkZ3Q9WzpOOl07IgorCisgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZDogY3VycmVudGx5CisgICAgICAgICAgICAvLyBkYXNoZXMsIGFwb3N0cm9waGVzLCBxdW90YXRpb24gbWFya3MsIGFuZCBwZXJpb2RzCisgICAgICAgICAgICArICIkbWlkX3dvcmQ9W1s6UGQ6XVx1MDBhZFx1MjAyN1xcXCJcXFwnXFwuXTsiCisKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uIHRoYXQgY2FuIG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgYSBudW1iZXI6IGN1cnJlbnRseQorICAgICAgICAgICAgLy8gYXBvc3Ryb3BoZXMsIHFvdXRhdGlvbiBtYXJrcywgcGVyaW9kcywgY29tbWFzLCBhbmQgdGhlIEFyYWJpYworICAgICAgICAgICAgLy8gZGVjaW1hbCBwb2ludAorICAgICAgICAgICAgKyAiJG1pZF9udW09W1xcXCJcXFwnXFwsXHUwNjZiXFwuXTsiCisKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uIHRoYXQgY2FuIG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBudW1iZXI6IGN1cnJlbnRseQorICAgICAgICAgICAgLy8gdGhlIHBlcmlvZCwgdGhlIG51bWJlciBzaWduLCBhbmQgYWxsIGN1cnJlbmN5IHN5bWJvbHMgZXhjZXB0IHRoZSBjZW50cyBzaWduCisgICAgICAgICAgICArICIkcHJlX251bT1bW1s6U2M6XS1bXHUwMGEyXV1cXCNcXC5dOyIKKworICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24gdGhhdCBjYW4gb2NjdXIgYXQgdGhlIGVuZCBvZiBhIG51bWJlcjogY3VycmVudGx5CisgICAgICAgICAgICAvLyB0aGUgcGVyY2VudCwgcGVyLXRob3VzYW5kLCBwZXItdGVuLXRob3VzYW5kLCBhbmQgQXJhYmljIHBlcmNlbnQKKyAgICAgICAgICAgIC8vIHNpZ25zLCB0aGUgY2VudHMgc2lnbiwgYW5kIHRoZSBhbXBlcnNhbmQKKyAgICAgICAgICAgICsgIiRwb3N0X251bT1bXFwlXFwmXHUwMGEyXHUwNjZhXHUyMDMwXHUyMDMxXTsiCisKKyAgICAgICAgICAgIC8vIGxpbmUgc2VwYXJhdG9yczogY3VycmVudGx5IExGLCBGRiwgUFMsIGFuZCBMUworICAgICAgICAgICAgKyAiJGxzPVtcblx1MDAwY1x1MjAyOFx1MjAyOV07IgorCisgICAgICAgICAgICAvLyB3aGl0ZXNwYWNlOiBhbGwgc3BhY2Ugc2VwYXJhdG9ycyBhbmQgdGhlIHRhYiBjaGFyYWN0ZXIKKyAgICAgICAgICAgICsgIiR3cz1bWzpaczpdXHRdOyIKKworICAgICAgICAgICAgLy8gYSB3b3JkIGlzIGEgc2VxdWVuY2Ugb2YgbGV0dGVycyB0aGF0IG1heSBjb250YWluIGludGVybmFsCisgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiwgYXMgbG9uZyBhcyBpdCBiZWdpbnMgYW5kIGVuZHMgd2l0aCBhIGxldHRlciBhbmQKKyAgICAgICAgICAgIC8vIG5ldmVyIGNvbnRhaW5zIHR3byBwdW5jdHVhdGlvbiBtYXJrcyBpbiBhIHJvdworICAgICAgICAgICAgKyAiJHdvcmQ9KCRsZXQrKCRtaWRfd29yZCRsZXQrKSokZGFuZGE/KTsiCisKKyAgICAgICAgICAgIC8vIGEgbnVtYmVyIGlzIGEgc2VxdWVuY2Ugb2YgZGlnaXRzIHRoYXQgbWF5IGNvbnRhaW4gaW50ZXJuYWwKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uLCBhcyBsb25nIGFzIGl0IGJlZ2lucyBhbmQgZW5kcyB3aXRoIGEgZGlnaXQgYW5kCisgICAgICAgICAgICAvLyBuZXZlciBjb250YWlucyB0d28gcHVuY3R1YXRpb24gbWFya3MgaW4gYSByb3cuCisgICAgICAgICAgICArICIkbnVtYmVyPSgkZGd0KygkbWlkX251bSRkZ3QrKSopOyIKKworICAgICAgICAgICAgLy8gYnJlYWsgYWZ0ZXIgZXZlcnkgY2hhcmFjdGVyLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucworICAgICAgICAgICAgLy8gKHRoaXMgd2lsbCBjYXVzZSBwdW5jdHVhdGlvbiBtYXJrcyB0aGF0IGFyZW4ndCBjb25zaWRlcmVkCisgICAgICAgICAgICAvLyBwYXJ0IG9mIHdvcmRzIG9yIG51bWJlcnMgdG8gYmUgdHJlYXRlZCBhcyB3b3JkcyB1bnRvIHRoZW1zZWx2ZXMpCisgICAgICAgICAgICArICIuOyIKKworICAgICAgICAgICAgLy8ga2VlcCB0b2dldGhlciBhbnkgc2VxdWVuY2Ugb2YgY29udGlndW91cyB3b3JkcyBhbmQgbnVtYmVycworICAgICAgICAgICAgLy8gKGluY2x1ZGluZyBqdXN0IG9uZSBvZiBlaXRoZXIpLCBwbHVzIGFuIG9wdGlvbmFsIHRyYWlsaW5nCisgICAgICAgICAgICAvLyBudW1iZXItc3VmZml4IGNoYXJhY3RlcgorICAgICAgICAgICAgKyAiJHdvcmQ/KCRudW1iZXIkd29yZCkqKCRudW1iZXIkcG9zdF9udW0/KT87IgorCisgICAgICAgICAgICAvLyBrZWVwIHRvZ2V0aGVyIGFuZCBzZXF1ZW5jZSBvZiBjb250aWd1b3VzIHdvcmRzIGFuZCBudW1iZXJzCisgICAgICAgICAgICAvLyB0aGF0IHN0YXJ0cyB3aXRoIGEgbnVtYmVyLXByZWZpeCBjaGFyYWN0ZXIgYW5kIGEgbnVtYmVyLAorICAgICAgICAgICAgLy8gYW5kIG1heSBlbmQgd2l0aCBhIG51bWJlci1zdWZmaXggY2hhcmFjdGVyCisgICAgICAgICAgICArICIkcHJlX251bSgkbnVtYmVyJHdvcmQpKigkbnVtYmVyJHBvc3RfbnVtPyk/OyIKKworICAgICAgICAgICAgLy8ga2VlcCB0b2dldGhlciBydW5zIG9mIHdoaXRlc3BhY2UgKG9wdGlvbmFsbHkgd2l0aCBhIHNpbmdsZSB0cmFpbGluZworICAgICAgICAgICAgLy8gbGluZSBzZXBhcmF0b3Igb3IgQ1JMRiBzZXF1ZW5jZSkKKyAgICAgICAgICAgICsgIiR3cypccj8kbHM/OyIKKworICAgICAgICAgICAgLy8ga2VlcCB0b2dldGhlciBydW5zIG9mIEthdGFrYW5hCisgICAgICAgICAgICArICIka2F0YSo7IgorCisgICAgICAgICAgICAvLyBrZWVwIHRvZ2V0aGVyIHJ1bnMgb2YgSGlyYWdhbmEKKyAgICAgICAgICAgICsgIiRoaXJhKjsiCisKKyAgICAgICAgICAgIC8vIGtlZXAgdG9nZXRoZXIgcnVucyBvZiBLYW5qaQorICAgICAgICAgICAgKyAiJGthbmppKjsiCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gZGVmYXVsdCBydWxlcyBmb3IgZGV0ZXJtaW5pbmcgbGVnYWwgbGluZS1icmVha2luZyBwb3NpdGlvbnMKKyAgICAgICAgeyAiTGluZUJyZWFrUnVsZXMiLAorICAgICAgICAgICAgLy8gU3Vycm9nYXRlcy4gIFVudGlsIGJldHRlciBzdXBwb3J0IGlzIGF2YWlsYWJsZSwgaWdub3JlIGxvdyBzdXJyb2dhdGVzCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgYW5kIGNsYXNzaWZ5IGhpZ2ggc3Vycm9nYXRlcyBhY2NvcmRpbmcgdG8gdGhlIGNoYXJhY3RlcnMgd2l0aGluIHRoZSBibG9jay4KKyAgICAgICAgICAgICAgIiRzdXJyX2xvPVtcdWRjMDAtXHVkZmZmXTsiCisgICAgICAgICAgICArICIkc3Vycl9oaV9sZXQ9W1x1ZDgwMFx1ZDgwMVx1ZDgzNFx1ZDgzNV07IiAgIC8vIEhpIFN1cnJvZ2F0ZXMgZm9yIE9sZCBJdGFsaWMsIEdvdGhpYywgRGVzZXJldCwgTXVzaWMsIE1hdGgKKyAgICAgICAgICAgICsgIiRzdXJyX2hpX2lkZW89W1x1ZDg0MC1cdWQ4ODBdOyIgICAgICAgICAgICAgLy8gSGkgU3Vycm9nYXRlcyBmb3IgQ0pLCisJCQkrICIkc3Vycl9oaV90YWc9W1x1ZGI0MF07IiAgICAgICAgICAgICAgICAgICAgIC8vIEhpIFN1cnJvZ2F0ZXMgZm9yIFRhZ3MKKyAgICAgICAgICAgICsgIiRzdXJyX2hpX3B1YT1bXHVkYjgwLVx1ZGJmZl07IiAgICAgICAgICAgICAgLy8gSGkgU3Vycm9nYXRlcyBmb3IgUHJpdmF0ZSBVc2UuCisKKyAgICAgICAgICAgIC8vIFByaXZhdGUgVXNlIEFyZWEuICBUcmVhdCBsaWtlIGlkZW9ncmFwaHMuCisgCQkJKyAiJHB1YT1bXHVlMDAwLVx1ZjhmZiRzdXJyX2hpX3B1YV07IgorCisgICAgICAgICAgICAvLyBpZ25vcmUgbm9uLXNwYWNpbmcgbWFya3MsIGVuY2xvc2luZyBtYXJrcywgYW5kIGZvcm1hdCBjaGFyYWN0ZXJzCisgICAgICAgICAgICArICIkX2lnbm9yZV89W1s6TW46XVs6TWU6XVs6Q2Y6XSRzdXJyX2xvJHN1cnJfaGlfdGFnXTsiCisKKyAgICAgICAgICAgIC8vIEhpbmRpIHBocmFzZSBzZXBhcmF0b3JzCisgICAgICAgICAgICArICIkZGFuZGE9W1x1MDk2NFx1MDk2NV07IgorCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgYWx3YXlzIGNhdXNlIGEgYnJlYWs6IEVUWCwgdGFiLCBMRiwgRkYsIExTLCBhbmQgUFMKKyAgICAgICAgICAgICsgIiRicmVhaz1bXHUwMDAzXHRcblxmXHUyMDI4XHUyMDI5XTsiCisKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgdGhhdCBhbHdheXMgcHJldmVudCBhIGJyZWFrOiB0aGUgbm9uLWJyZWFraW5nIHNwYWNlCisgICAgICAgICAgICAvLyBhbmQgc2ltaWxhciBjaGFyYWN0ZXJzCisgICAgICAgICAgICArICIkbmJzcD1bXHUwMGEwXHUyMDA3XHUyMDExXHVmZWZmXTsiCisKKyAgICAgICAgICAgIC8vIHdoaXRlc3BhY2U6IHNwYWNlIHNlcGFyYXRvcnMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycywgZXhjZXB0IGZvcgorICAgICAgICAgICAgLy8gQ1IgYW5kIHRoZSBvdGhlciBjaGFyYWN0ZXJzIG1lbnRpb25lZCBhYm92ZQorICAgICAgICAgICAgKyAiJHNwYWNlPVtbWzpaczpdWzpDYzpdXS1bJG5ic3AkYnJlYWtccl1dOyIKKworICAgICAgICAgICAgLy8gZGFzaGVzOiBkYXNoIHB1bmN0dWF0aW9uIGFuZCB0aGUgZGlzY3JldGlvbmFyeSBoeXBoZW4sIGV4Y2VwdCBmb3IKKyAgICAgICAgICAgIC8vIG5vbi1icmVha2luZyBoeXBoZW5zCisgICAgICAgICAgICArICIkZGFzaD1bW1s6UGQ6XVx1MDBhZF0tWyRuYnNwXV07IgorCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgc3RpY2sgdG8gYSB3b3JkIGlmIHRoZXkgcHJlY2VkZSBpdDogY3VycmVuY3kgc3ltYm9scworICAgICAgICAgICAgLy8gKGV4Y2VwdCB0aGUgY2VudHMgc2lnbikgYW5kIHN0YXJ0aW5nIHB1bmN0dWF0aW9uCisgICAgICAgICAgICArICIkcHJlX3dvcmQ9W1tbOlNjOl0tW1x1MDBhMl1dWzpQczpdWzpQaTpdXFxcIlxcXCddOyIKKworICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB0aGF0IHN0aWNrIHRvIGEgd29yZCBpZiB0aGV5IGZvbGxvdyBpdDogZW5kaW5nIHB1bmN0dWF0aW9uLAorICAgICAgICAgICAgLy8gb3RoZXIgcHVuY3R1YXRpb24gdGhhdCB1c3VhbGx5IG9jY3VycyBhdCB0aGUgZW5kIG9mIGEgc2VudGVuY2UsCisgICAgICAgICAgICAvLyBzbWFsbCBLYW5hIGNoYXJhY3RlcnMsIHNvbWUgQ0pLIGRpYWNyaXRpY3MsIGV0Yy4KKyAgICAgICAgICAgICsgIiRwb3N0X3dvcmQ9W1s6UGU6XVs6UGY6XVxcIVxcXCJcXFwnXFwlXFwuXFwsXFw6XFw7XFw/XHUwMGEyXHUwMGIwXHUwNjZhXHUyMDMwLVx1MjAzNCIKKyAgICAgICAgICAgICAgICAgICAgKyAiXHUyMTAzXHUyMTA1XHUyMTA5XHUzMDAxXHUzMDAyXHUzMDA1XHUzMDQxXHUzMDQzXHUzMDQ1XHUzMDQ3XHUzMDQ5XHUzMDYzIgorICAgICAgICAgICAgICAgICAgICArICJcdTMwODNcdTMwODVcdTMwODdcdTMwOGVcdTMwOTktXHUzMDllXHUzMGExXHUzMGEzXHUzMGE1XHUzMGE3XHUzMGE5IgorICAgICAgICAgICAgICAgICAgICArICJcdTMwYzNcdTMwZTNcdTMwZTVcdTMwZTdcdTMwZWVcdTMwZjVcdTMwZjZcdTMwZmMtXHUzMGZlXHVmZjAxXHVmZjBjIgorICAgICAgICAgICAgICAgICAgICArICJcdWZmMGVcdWZmMWZdOyIKKworICAgICAgICAgICAgLy8gS2Fuamk6IGFjdHVhbGx5IGluY2x1ZGVzIGJvdGggS2FuamkgYW5kIEthbmEsIGV4Y2VwdCBmb3Igc21hbGwgS2FuYSBhbmQKKyAgICAgICAgICAgIC8vIENKSyBkaWFjcml0aWNzCisgICAgICAgICAgICArICIka2Fuamk9W1skc3Vycl9oaV9pZGVvJHB1YVx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmE1XHVmOTAwLVx1ZmE2YVx1MzA0MS1cdTMwOTRcdTMwYTEtXHUzMGZhXS1bJHBvc3Rfd29yZCRfaWdub3JlX11dOyIKKworICAgICAgICAgICAgLy8gZGlnaXRzCisgICAgICAgICAgICArICIkZGlnaXQ9W1s6TmQ6XVs6Tm86XV07IgorCisgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyOiBwZXJpb2RzIGFuZCBjb21tYXMKKyAgICAgICAgICAgICsgIiRtaWRfbnVtPVtcXC5cXCxdOyIKKworICAgICAgICAgICAgLy8gZXZlcnl0aGluZyBub3QgbWVudGlvbmVkIGFib3ZlLCBwbHVzIHRoZSBxdW90ZSBtYXJrcyAod2hpY2ggYXJlIGJvdGgKKyAgICAgICAgICAgIC8vIDxwcmUtd29yZD4sIDxwb3N0LXdvcmQ+LCBhbmQgPGNoYXI+KQorICAgICAgICAgICAgKyAiJGNoYXI9W14kYnJlYWskc3BhY2UkZGFzaCRrYW5qaSRuYnNwJF9pZ25vcmVfJHByZV93b3JkJHBvc3Rfd29yZCRtaWRfbnVtJGRhbmRhXHJcXFwiXFxcJ107IgorCisgICAgICAgICAgICAvLyBhICJudW1iZXIiIGlzIGEgcnVuIG9mIHByZWZpeCBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMsIGZvbGxvd2VkIGJ5IG9uZSBvcgorICAgICAgICAgICAgLy8gbW9yZSBkaWdpdHMgd2l0aCBpc29sYXRlZCBudW1iZXItcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbnRlcnNwZXJzZWQKKyAgICAgICAgICAgICsgIiRudW1iZXI9KFskcHJlX3dvcmQkZGFzaF0qJGRpZ2l0KygkbWlkX251bSRkaWdpdCspKik7IgorCisgICAgICAgICAgICAvLyB0aGUgYmFzaWMgY29yZSBvZiBhIHdvcmQgY2FuIGJlIGVpdGhlciBhICJudW1iZXIiIGFzIGRlZmluZWQgYWJvdmUsIGEgc2luZ2xlCisgICAgICAgICAgICAvLyAiS2FuamkiIGNoYXJhY3Rlciwgb3IgYSBydW4gb2YgYW55IG51bWJlciBvZiBub3QtZXhwbGljaXRseS1tZW50aW9uZWQKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgKHRoaXMgaW5jbHVkZXMgTGF0aW4gbGV0dGVycykKKyAgICAgICAgICAgICsgIiR3b3JkX2NvcmU9KFskcHJlX3dvcmQkY2hhcl0qfCRrYW5qaXwkbnVtYmVyKTsiCisKKyAgICAgICAgICAgIC8vIGEgd29yZCBtYXkgZW5kIHdpdGggYW4gb3B0aW9uYWwgc3VmZml4IHRoYXQgYmUgZWl0aGVyIGEgcnVuIG9mIG9uZSBvcgorICAgICAgICAgICAgLy8gbW9yZSBkYXNoZXMgb3IgYSBydW4gb2Ygd29yZC1zdWZmaXggY2hhcmFjdGVycywgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwKKyAgICAgICAgICAgIC8vIHJ1biBvZiB3aGl0ZXNwYWNlCisgICAgICAgICAgICArICIkd29yZF9zdWZmaXg9KCgkZGFzaCt8JHBvc3Rfd29yZCopJHNwYWNlKik7IgorCisgICAgICAgICAgICAvLyBhIHdvcmQsIHRodXMsIGlzIGFuIG9wdGlvbmFsIHJ1biBvZiB3b3JkLXByZWZpeCBjaGFyYWN0ZXJzLCBmb2xsb3dlZCBieQorICAgICAgICAgICAgLy8gYSB3b3JkIGNvcmUgYW5kIGEgd29yZCBzdWZmaXggKHRoZSBzeW50YXggb2YgPHdvcmQtY29yZT4gYW5kIDx3b3JkLXN1ZmZpeD4KKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IGFsbG93cyBlaXRoZXIgb2YgdGhlbSB0byBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLCBwdXR0aW5nIGEgYnJlYWsKKyAgICAgICAgICAgIC8vIGJldHdlZW4gdGhpbmdzIGxpa2UgIikoIiBvciAiYWFhKGFhYSIKKyAgICAgICAgICAgICsgIiR3b3JkPSgkcHJlX3dvcmQqJHdvcmRfY29yZSR3b3JkX3N1ZmZpeCk7IgorCisgICAgICAgICAgICAvLyBmaW5hbGx5LCB0aGUgcnVsZSB0aGF0IGRvZXMgdGhlIHdvcms6IEtlZXAgdG9nZXRoZXIgYW55IHJ1biBvZiB3b3JkcyB0aGF0CisgICAgICAgICAgICAvLyBhcmUgam9pbmVkIGJ5IHJ1bnMgb2Ygb25lIG9mIG1vcmUgbm9uLXNwYWNpbmcgbWFyay4gIEFsc28ga2VlcCBhIHRyYWlsaW5nCisgICAgICAgICAgICAvLyBsaW5lLWJyZWFrIGNoYXJhY3RlciBvciBDUkxGIGNvbWJpbmF0aW9uIHdpdGggdGhlIHdvcmQuICAobGluZSBzZXBhcmF0b3JzCisgICAgICAgICAgICAvLyAid2luIiBvdmVyIG5ic3AncykKKyAgICAgICAgICAgICsgIiR3b3JkKCRuYnNwKyR3b3JkKSpccj8kYnJlYWs/OyIKKyAgICAgICAgfSwKKworICAgICAgICAvLyBkZWZhdWx0IHJ1bGVzIGZvciBmaW5kaW5nIHNlbnRlbmNlIGJvdW5kYXJpZXMKKyAgICAgICAgeyAiU2VudGVuY2VCcmVha1J1bGVzIiwKKyAgICAgICAgICAgIC8vIFN1cnJvZ2F0ZXMuICBVbnRpbCBiZXR0ZXIgc3VwcG9ydCBpcyBhdmFpbGFibGUsIGlnbm9yZSBsb3cgc3Vycm9nYXRlcworICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuZCBjbGFzc2lmeSBoaWdoIHN1cnJvZ2F0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAgICIkc3Vycl9sbz1bXHVkYzAwLVx1ZGZmZl07IgorCisgICAgICAgICAgICAvLyBpZ25vcmUgbm9uLXNwYWNpbmcgbWFya3MsIGVuY2xvc2luZyBtYXJrcywgYW5kIGZvcm1hdCBjaGFyYWN0ZXJzCisgICAgICAgICAgICArICIkX2lnbm9yZV89W1s6TW46XVs6TWU6XVs6Q2Y6XSRzdXJyX2xvXTsiCisKKyAgICAgICAgICAgIC8vIGxvd2VyY2FzZSBsZXR0ZXJzCisgICAgICAgICAgICArICIkbGM9WzpMbDpdOyIKKworICAgICAgICAgICAgLy8gdXBwZXJjYXNlIExhdGluIGxldHRlcnMKKyAgICAgICAgICAgICsgIiR1Y0xhdGluPVtBLVpdOyIKKworICAgICAgICAgICAgLy8gd2hpdGVzcGFjZSAobGluZSBzZXBhcmF0b3JzIGFyZSB0cmVhdGVkIGFzIHdoaXRlc3BhY2UpCisgICAgICAgICAgICArICIkc3BhY2U9W1x0XHJcZlxuXHUyMDI4WzpaczpdXTsiCisKKyAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uIHdoaWNoIG1heSBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc2VudGVuY2U6ICJzdGFydGluZworICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24iIGFuZCBxdW90YXRpb24gbWFya3MKKyAgICAgICAgICAgICsgIiRzdGFydD1bWzpQczpdWzpQaTpdXFxcIlxcXCddOyIKKworICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24gd2l0aCBtYXkgb2NjdXIgYXQgdGhlIGVuZCBvZiBhIHNlbnRlbmNlOiAiZW5kaW5nIHB1bmN0dWF0aW9uIgorICAgICAgICAgICAgLy8gYW5kIHF1b3RhdGlvbiBtYXJrcworICAgICAgICAgICAgKyAiJGVuZD1bWzpQZTpdWzpQZjpdXFxcIlxcXCddOyIKKworICAgICAgICAgICAgLy8gZGlnaXRzCisgICAgICAgICAgICArICIkZGlnaXQ9WzpOOl07IgorCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgdW5hbWJpZ3VvdXNseSBzaWduYWwgdGhlIGVuZCBvZiBhIHNlbnRlbmNlCisgICAgICAgICAgICArICIkdGVybT1bXFwhXFw/XHUzMDAyXHVmZjAxXHVmZjFmXTsiCisKKyAgICAgICAgICAgIC8vIHBlcmlvZHMsIHdoaWNoIE1BWSBzaWduYWwgdGhlIGVuZCBvZiBhIHNlbnRlbmNlCisgICAgICAgICAgICArICIkcGVyaW9kPVtcXC5cdWZmMGVdOyIKKworICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB0aGF0IG1heSBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc2VudGVuY2U6IGJhc2ljYWxseSBhbnl0aGluZworICAgICAgICAgICAgLy8gbm90IG1lbnRpb25lZCBhYm92ZSAobG93ZXJjYXNlIGxldHRlcnMgYW5kIGRpZ2l0cyBhcmUgc3BlY2lmaWNhbGx5IGV4Y2x1ZGVkKQorICAgICAgICAgICAgKyAiJHNlbnRfc3RhcnQ9W14kbGMkdWNMYXRpbiRzcGFjZSRzdGFydCRlbmQkZGlnaXQkdGVybSRwZXJpb2RcdTIwMjkkX2lnbm9yZV9dOyIKKworICAgICAgICAgICAgLy8gSGluZGkgcGhyYXNlIHNlcGFyYXRvcgorICAgICAgICAgICAgKyAiJGRhbmRhPVtcdTA5NjRcdTA5NjVdOyIKKworICAgICAgICAgICAgLy8gYWx3YXlzIGJyZWFrIHNlbnRlbmNlcyBhZnRlciBwYXJhZ3JhcGggc2VwYXJhdG9ycworICAgICAgICAgICAgKyAiLio/XHUyMDI5PzsiCisKKyAgICAgICAgICAgIC8vIGFsd2F5cyBicmVhayBhZnRlciBhIGRhbmRhLCBpZiBpdCdzIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UKKyAgICAgICAgICAgICsgIi4qPyRkYW5kYSRzcGFjZSo7IgorCisgICAgICAgICAgICAvLyBpZiB5b3Ugc2VlIGEgcGVyaW9kLCBza2lwIG92ZXIgYWRkaXRpb25hbCBwZXJpb2RzIGFuZCBlbmRpbmcgcHVuY3R1YXRpb24KKyAgICAgICAgICAgIC8vIGFuZCBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSBwYXJhZ3JhcGggc2VwYXJhdG9yLCBicmVhayBhZnRlciB0aGUKKyAgICAgICAgICAgIC8vIHBhcmFncmFwaCBzZXBhcmF0b3IKKyAgICAgICAgICAgICsgIi4qPyRwZXJpb2RbJHBlcmlvZCRlbmRdKiRzcGFjZSpcdTIwMjk7IgorCisgICAgICAgICAgICAvLyBpZiB5b3Ugc2VlIGEgcGVyaW9kLCBza2lwIG92ZXIgYWRkaXRpb25hbCBwZXJpb2RzIGFuZCBlbmRpbmcgcHVuY3R1YXRpb24sCisgICAgICAgICAgICAvLyBmb2xsb3dlZCBieSBvcHRpb25hbCB3aGl0ZXNwYWNlLCBmb2xsb3dlZCBieSBvcHRpb25hbCBzdGFydGluZyBwdW5jdHVhdGlvbiwKKyAgICAgICAgICAgIC8vIGFuZCBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgc29tZXRoaW5nIHRoYXQgY2FuIHN0YXJ0IGEgc2VudGVuY2UKKyAgICAgICAgICAgIC8vIChiYXNpY2FsbHksIGEgY2FwaXRhbCBsZXR0ZXIpLCB0aGVuIHB1dCB0aGUgc2VudGVuY2UgYnJlYWsgYmV0d2VlbiB0aGUKKyAgICAgICAgICAgIC8vIHdoaXRlc3BhY2UgYW5kIHRoZSBvcGVuaW5nIHB1bmN0dWF0aW9uCisgICAgICAgICAgICArICIuKj8kcGVyaW9kWyRwZXJpb2QkZW5kXSokc3BhY2UqLygkc3RhcnQqJHNlbnRfc3RhcnR8JHN0YXJ0KyR1Y0xhdGluKTsiCisKKyAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUsIGV4Y2VwdCB0aGF0IHRoZXJlJ3MgYSBzZW50ZW5jZSBicmVhayBiZWZvcmUgYSBMYXRpbiBjYXBpdGFsCisgICAgICAgICAgICAvLyBsZXR0ZXIgb25seSBpZiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBzcGFjZSBhZnRlciB0aGUgcGVyaW9kCisgICAgICAgICAgICArICIuKj8kcGVyaW9kWyRwZXJpb2QkZW5kXSokc3BhY2UrLyR1Y0xhdGluOyIKKworICAgICAgICAgICAgLy8gaWYgeW91IHNlZSBhIHNlbnRlbmNlLXRlcm1pbmF0aW5nIGNoYXJhY3Rlciwgc2tpcCBvdmVyIGFueSBhZGRpdGlvbmFsCisgICAgICAgICAgICAvLyB0ZXJtaW5hdG9ycywgcGVyaW9kcywgb3IgZW5kaW5nIHB1bmN0dWF0aW9uLCBmb2xsb3dlZCBieSBhbnkgd2hpdGVzcGFjZSwKKyAgICAgICAgICAgIC8vIGZvbGxvd2VkIGJ5IGEgU0lOR0xFIG9wdGlvbmFsIHBhcmFncmFwaCBzZXBhcmF0b3IsIGFuZCBwdXQgdGhlIGJyZWFrIHRoZXJlCisgICAgICAgICAgICArICIuKj8kdGVybVskdGVybSRwZXJpb2QkZW5kXSokc3BhY2UqXHUyMDI5PzsiCisKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgcnVsZXMgYXJlIGhlcmUgdG8gYWlkIGluIGJhY2t3YXJkcyBpdGVyYXRpb24uICBUaGUgYXV0b21hdGljYWxseQorICAgICAgICAgICAgLy8gZ2VuZXJhdGVkIGJhY2t3YXJkcyBzdGF0ZSB0YWJsZSB3aWxsIHJld2luZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICAgICAgICAgLy8gcGFyYWdyYXBoIGFsbCB0aGUgdGltZSAob3IgYWxsIHRoZSB3YXkgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQKKyAgICAgICAgICAgIC8vIGlmIHRoZSBkb2N1bWVudCBkb2Vzbid0IHVzZSB0aGUgVW5pY29kZSBQUyBjaGFyYWN0ZXIpIGJlY2F1c2UgdGhlIG9ubHkKKyAgICAgICAgICAgIC8vIHVuYW1iaWd1b3VzIGNoYXJhY3RlciBwYWlycyBhcmUgdGhvc2UgaW52b2x2aW5nIHBhcmFncmFwaCBzZXBhcmF0b3JzLgorICAgICAgICAgICAgLy8gVGhlc2Ugc3BlY2lmeSBhIGZldyBtb3JlIHVuYW1iaWd1b3VzIGJyZWFraW5nIHNpdHVhdGlvbnMuCisKKyAgICAgICAgICAgIC8vIGlmIHlvdSBzZWUgYSBzZW50ZW5jZS1zdGFydGluZyBjaGFyYWN0ZXIsIGZvbGxvd2VkIGJ5IHN0YXJ0aW5nIHB1bmN0dWF0aW9uCisgICAgICAgICAgICAvLyAocmVtZW1iZXIsIHdlJ3JlIGl0ZXJhdGluZyBiYWNrd2FyZHMpLCBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBydW4gb2YKKyAgICAgICAgICAgIC8vIHdoaXRlc3BhY2UsIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIHJ1biBvZiBlbmRpbmcgcHVuY3R1YXRpb24sIGZvbGxvd2VkCisgICAgICAgICAgICAvLyBieSBhIHBlcmlvZCwgdGhpcyBpcyBhIHNhZmUgcGxhY2UgdG8gdHVybiBhcm91bmQKKyAgICAgICAgICAgICsgIiFbJHNlbnRfc3RhcnQkdWNMYXRpbl0kc3RhcnQqJHNwYWNlKyRlbmQqJHBlcmlvZDsiCisKKyAgICAgICAgICAgIC8vIGlmIHlvdSBzZWUgYSBsZXR0ZXIgb3IgYSBkaWdpdCwgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgcnVuIG9mCisgICAgICAgICAgICAvLyBzdGFydGluZyBwdW5jdHVhdGlvbiwgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgcnVuIG9mIHdoaXRlc3BhY2UsCisgICAgICAgICAgICAvLyBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBydW4gb2YgZW5kaW5nIHB1bmN0dWF0aW9uLCBmb2xsb3dlZCBieQorICAgICAgICAgICAgLy8gYSBzZW50ZW5jZSB0ZXJtaW5hdG9yLCB0aGlzIGlzIGEgc2FmZSBwbGFjZSB0byB0dXJuIGFyb3VuZAorICAgICAgICAgICAgKyAiIVskc2VudF9zdGFydCRsYyRkaWdpdF0kc3RhcnQqJHNwYWNlKiRlbmQqJHRlcm07IgorICAgICAgICB9LAorCisJCS8vIGRlZmF1bHQgcnVsZXMgZm9yIGZpbmRpbmcgVGl0bGUgQ2FzZSBib3VuZGFyaWVzLgorCQkvLyAgIFNlZSAgVW5pY29kZSBUZWNobmljYWwgUmVwb3J0ICMyMSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIHJ1bGVzLgorCQl7ICJUaXRsZUJyZWFrUnVsZXMiLAorICAgICAgICAgICAgICAgIiRjYXNlX2lnbm9yYWJsZT1bWzpNbjpdWzpNZTpdWzpDZjpdWzpMbTpdWzpTazpdXFx1MDAyN1x1MDBBRFx1MjAxOV07IgorICAgICAgICAgICAgICsgIiRjYXNlZD1bW1s6THU6XVs6THQ6XVs6TGw6XSIKKyAgICAgICAgICAgICArICAgICAiXHUyMTYwLVx1MjE2ZiIgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIFVwcGVyY2FzZQorICAgICAgICAgICAgICsgICAgICJcdTI0YjYtXHUyNGNmIgorICAgICAgICAgICAgICsgICAgICJcdTAyYjAtXHUwMmI4IiAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXIgTG93ZXIgY2FzZQorICAgICAgICAgICAgICsgICAgICJcdTAyYzAtXHUwMmMxIgorICAgICAgICAgICAgICsgICAgICJcdTAyZTAtXHUwMmU0IgorICAgICAgICAgICAgICsgICAgICJcdTAzNDVcdTAzN2EiCisgICAgICAgICAgICAgKyAgICAgIlx1MjE3MC1cdTIxN2YiCisgICAgICAgICAgICAgKyAgICAgIlx1MjRkMC1cdTI0ZTldIgorICAgICAgICAgICAgICsgICAgICItJGNhc2VfaWdub3JhYmxlXTsiICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgY2FzZV9pZ25vcmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZnJvbSAkY2FzZWQuCisJCSAgICAgKyAiJG5vdF9jYXNlZD1bXiRjYXNlZCRjYXNlX2lnbm9yYWJsZV07IgorICAgICAgICAgICAgIC8vIEZpcnN0IHRpbWUgb25seSwgZWF0IHRocm91Z2ggYW55IGxlYWRpbmcgbm9uLXdvcmQtbGlrZSBzdHVmZi4KKwkJICAgICArICJbJG5vdF9jYXNlZCRjYXNlX2lnbm9yYWJsZV0qOyIKKyAgICAgICAgICAgICAvLyAgTWF0Y2ggYSB3b3JkIChhIGNhc2VkIGl0ZW0pLCBwbHVzIGFueSBmb2xsb3dpbmcgc3BhY2VzIG9yIG90aGVyIG5vbi1jYXNlZCBqdW5rLAorICAgICAgICAgICAgIC8vICAgIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjYXNlZCBpdGVtLgorICAgICAgICAgICAgICsgIiRjYXNlZFskY2FzZWQkY2FzZV9pZ25vcmFibGVdKlskbm90X2Nhc2VkXSo7IgorICAgICAgICAgICAgICsgIiEkbm90X2Nhc2VkKlskY2FzZWQkY2FzZV9pZ25vcmFibGVdKiRub3RfY2FzZWQqOyIgICAvLyBCYWNrd2FyZHMgcnVsZS4KKwkgICAgfQorCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQnJlYWtJdGVyYXRvclJ1bGVzX3RoLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0JyZWFrSXRlcmF0b3JSdWxlc190aC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjZDZiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0JyZWFrSXRlcmF0b3JSdWxlc190aC5qYXZhCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0JyZWFrSXRlcmF0b3JSdWxlc190aC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6MzkgJAorICogJFJldmlzaW9uOiAxLjcgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CisKK3B1YmxpYyBjbGFzcyBCcmVha0l0ZXJhdG9yUnVsZXNfdGggZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIHB1YmxpYyBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworCisgICAgICAgIFVSTCB1cmwgPSBnZXRDbGFzcygpLmdldFJlc291cmNlKCJ0aGFpX2RpY3QiKTsKKworICAgICAgICAvLyBpZiBkaWN0aW9uYXJ5IHdhc24ndCBmb3VuZCwgdGhlbiB0aGlzIHJlc291cmNlIGJ1bmRsZSBkb2Vzbid0IGhhdmUKKyAgICAgICAgLy8gbXVjaCB0byBjb250cmlidXRlLi4uCisgICAgICAgIGlmICh1cmwgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbMF1bMF07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgLy8gbmFtZXMgb2YgY2xhc3NlcyB0byBpbnN0YW50aWF0ZSBmb3IgdGhlIGRpZmZlcmVudCBraW5kcyBvZiBicmVhaworICAgICAgICAgICAgLy8gaXRlcmF0b3IuICBOb3RpY2Ugd2UncmUgbm93IHVzaW5nIERpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IKKyAgICAgICAgICAgIC8vIGZvciB3b3JkIGFuZCBsaW5lIGJyZWFraW5nLgorICAgICAgICAgICAgeyAiQnJlYWtJdGVyYXRvckNsYXNzZXMiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7ICJSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIiwgICAgICAgICAgIC8vIGNoYXJhY3Rlci1icmVhayBpdGVyYXRvciBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yIiwgICAgIC8vIHdvcmQtYnJlYWsgaXRlcmF0b3IgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGljdGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvciIsICAgICAvLyBsaW5lLWJyZWFrIGl0ZXJhdG9yIGNsYXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IiIH0gICAgICAgICAgLy8gc2VudGVuY2UtYnJlYWsgaXRlcmF0b3IgY2xhc3MKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgIldvcmRCcmVha1J1bGVzIiwKKyAgICAgICAgICAgICAgICAiJF9kaWN0aW9uYXJ5Xz1bXHUwZTAxLVx1MGUyZVx1MGUzMC1cdTBlM2FcdTBlNDAtXHUwZTQ0XHUwZTQ3LVx1MGU0ZV07IiAvLyB0aGlzIHJ1bGUgYnJlYWtzIHRoZSBpdGVyYXRvciB3aXRoIG1peGVkIFRoYWkgYW5kIEVuZ2xpc2gKKworICAgICAgICAgICAgICAgIC8vIFN1cnJvZ2F0ZXMuICBVbnRpbCBiZXR0ZXIgc3VwcG9ydCBpcyBhdmFpbGFibGUsIGlnbm9yZSBsb3cgc3Vycm9nYXRlcworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhbmQgY2xhc3NpZnkgaGlnaCBzdXJyb2dhdGVzIGFjY29yZGluZyB0byB0aGUgY2hhcmFjdGVycyB3aXRoaW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgICAgICsgIiRzdXJyX2xvPVtcdWRjMDAtXHVkZmZmXTsiCisgICAgICAgICAgICAgICAgKyAiJHN1cnJfaGlfbGV0PVtcdWQ4MDBcdWQ4MDFcdWQ4MzRcdWQ4MzVdOyIgICAvLyBIaSBTdXJyb2dhdGVzIGZvciBPbGQgSXRhbGljLCBHb3RoaWMsIERlc2VyZXQsIE11c2ljLCBNYXRoCisgICAgICAgICAgICAgICAgKyAiJHN1cnJfaGlfaWRlbz1bXHVkODQwLVx1ZDg4MF07IiAgICAgICAgICAgICAvLyBIaSBTdXJyb2dhdGVzIGZvciBDSksKKyAgICAgICAgICAgICAgICArICIkc3Vycl9oaV90YWc9W1x1ZGI0MF07IiAgICAgICAgICAgICAgICAgICAgIC8vIEhpIFN1cnJvZ2F0ZXMgZm9yIFRhZ3MKKyAgICAgICAgICAgICAgICArICIkc3Vycl9oaV9wdWE9W1x1ZGI4MC1cdWRiZmZdOyIgICAgICAgICAgICAgIC8vIEhpIFN1cnJvZ2F0ZXMgZm9yIFByaXZhdGUgVXNlLgorCisgICAgICAgICAgICAgICAgLy8gUHJpdmF0ZSBVc2UgQXJlYS4gIFRyZWF0IGxpa2UgaWRlb2dyYXBocy4KKyAgICAgICAgICAgICAgICArICIkcHVhPVtcdWUwMDAtXHVmOGZmJHN1cnJfaGlfcHVhXTsiCisKKyAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbm9uLXNwYWNpbmcgbWFya3MsIGVuY2xvc2luZyBtYXJrcywgYW5kIGZvcm1hdCBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgICAgIC8vIGFsbCBvZiB3aGljaCBzaG91bGQgbm90IGluZmx1ZW5jZSB0aGUgYWxnb3JpdGhtCisgICAgICAgICAgICAgICAgKyAiJF9pZ25vcmVfPVtbWzpNbjpdWzpNZTpdWzpDZjpdJHN1cnJfbG8kc3Vycl9oaV90YWddLSRfZGljdGlvbmFyeV9dOyIKKworICAgICAgICAgICAgICAgICsgIiRwYWl5YW5ub2k9W1x1MGUyZl07IgorICAgICAgICAgICAgICAgICsgIiRtYWl5YW1vaz1bXHUwZTQ2XTsiCisKKworICAgICAgICAgICAgICAgIC8vIEhpbmRpIHBocmFzZSBzZXBhcmF0b3IsIGthbmppLCBrYXRha2FuYSwgaGlyYWdhbmEsIENKSyBkaWFjcml0aWNhbHMsCisgICAgICAgICAgICAgICAgLy8gb3RoZXIgbGV0dGVycywgYW5kIGRpZ2l0cworICAgICAgICAgICAgICAgICsgIiRkYW5kYT1bXHUwOTY0XHUwOTY1XTsiCisgICAgICAgICAgICAgICAgKyAiJGthbmppPVtcdTMwMDVcdTRlMDAtXHU5ZmE1XHVmOTAwLVx1ZmEyZCRzdXJyX2hpX2lkZW8kcHVhXTsiCisgICAgICAgICAgICAgICAgKyAiJGthdGE9W1x1MzBhMS1cdTMwZmFdOyIKKyAgICAgICAgICAgICAgICArICIkaGlyYT1bXHUzMDQxLVx1MzA5NF07IgorICAgICAgICAgICAgICAgICsgIiRjamtfZGlhY3JpdD1bXHUzMDk5LVx1MzA5Y107IgorICAgICAgICAgICAgICAgICsgIiRsZXQ9W1tbOkw6XVs6TWM6XSRzdXJyX2hpX2xldF0tWyRrYW5qaSRrYXRhJGhpcmEkY2prX2RpYWNyaXQkX2RpY3Rpb25hcnlfXV07IgorICAgICAgICAgICAgICAgICsgIiRkZ3Q9WzpOOl07IgorCisgICAgICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24gdGhhdCBjYW4gb2NjdXIgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQ6IGN1cnJlbnRseQorICAgICAgICAgICAgICAgIC8vIGRhc2hlcywgYXBvc3Ryb3BoZXMsIHF1b3RhdGlvbiBtYXJrcywgYW5kIHBlcmlvZHMKKyAgICAgICAgICAgICAgICArICIkbWlkX3dvcmQ9W1s6UGQ6XVx1MDBhZFx1MjAyN1xcXCJcXFwnXFwuXTsiCisKKyAgICAgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyOiBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAvLyBhcG9zdHJvcGhlcywgcW91dGF0aW9uIG1hcmtzLCBwZXJpb2RzLCBjb21tYXMsIGFuZCB0aGUgQXJhYmljCisgICAgICAgICAgICAgICAgLy8gZGVjaW1hbCBwb2ludAorICAgICAgICAgICAgICAgICsgIiRtaWRfbnVtPVtcXFwiXFxcJ1xcLFx1MDY2YlxcLl07IgorCisgICAgICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24gdGhhdCBjYW4gb2NjdXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG51bWJlcjogY3VycmVudGx5CisgICAgICAgICAgICAgICAgLy8gdGhlIHBlcmlvZCwgdGhlIG51bWJlciBzaWduLCBhbmQgYWxsIGN1cnJlbmN5IHN5bWJvbHMgZXhjZXB0IHRoZSBjZW50cyBzaWduCisgICAgICAgICAgICAgICAgKyAiJHByZV9udW09W1tbOlNjOl0tW1x1MDBhMl1dXFwjXFwuXTsiCisKKyAgICAgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBhdCB0aGUgZW5kIG9mIGEgbnVtYmVyOiBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAvLyB0aGUgcGVyY2VudCwgcGVyLXRob3VzYW5kLCBwZXItdGVuLXRob3VzYW5kLCBhbmQgQXJhYmljIHBlcmNlbnQKKyAgICAgICAgICAgICAgICAvLyBzaWducywgdGhlIGNlbnRzIHNpZ24sIGFuZCB0aGUgYW1wZXJzYW5kCisgICAgICAgICAgICAgICAgKyAiJHBvc3RfbnVtPVtcXCVcXCZcdTAwYTJcdTA2NmFcdTIwMzBcdTIwMzFdOyIKKworICAgICAgICAgICAgICAgIC8vIGxpbmUgc2VwYXJhdG9yczogY3VycmVudGx5IExGLCBGRiwgUFMsIGFuZCBMUworICAgICAgICAgICAgICAgICsgIiRscz1bXG5cdTAwMGNcdTIwMjhcdTIwMjldOyIKKworICAgICAgICAgICAgICAgIC8vIHdoaXRlc3BhY2U6IGFsbCBzcGFjZSBzZXBhcmF0b3JzIGFuZCB0aGUgdGFiIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICsgIiR3cz1bWzpaczpdXHRdOyIKKworICAgICAgICAgICAgICAgIC8vIGEgd29yZCBpcyBhIHNlcXVlbmNlIG9mIGxldHRlcnMgdGhhdCBtYXkgY29udGFpbiBpbnRlcm5hbAorICAgICAgICAgICAgICAgIC8vIHB1bmN0dWF0aW9uLCBhcyBsb25nIGFzIGl0IGJlZ2lucyBhbmQgZW5kcyB3aXRoIGEgbGV0dGVyIGFuZAorICAgICAgICAgICAgICAgIC8vIG5ldmVyIGNvbnRhaW5zIHR3byBwdW5jdHVhdGlvbiBtYXJrcyBpbiBhIHJvdworICAgICAgICAgICAgICAgICsgIiR3b3JkPSgoJGxldCsoJG1pZF93b3JkJGxldCspKikkZGFuZGE/KTsiCisKKyAgICAgICAgICAgICAgICAvLyBhIG51bWJlciBpcyBhIHNlcXVlbmNlIG9mIGRpZ2l0cyB0aGF0IG1heSBjb250YWluIGludGVybmFsCisgICAgICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24sIGFzIGxvbmcgYXMgaXQgYmVnaW5zIGFuZCBlbmRzIHdpdGggYSBkaWdpdCBhbmQKKyAgICAgICAgICAgICAgICAvLyBuZXZlciBjb250YWlucyB0d28gcHVuY3R1YXRpb24gbWFya3MgaW4gYSByb3cuCisgICAgICAgICAgICAgICAgKyAiJG51bWJlcj0oJGRndCsoJG1pZF9udW0kZGd0KykqKTsiCisKKyAgICAgICAgICAgICAgICArICIkdGhhaV9ldGM9KCRwYWl5YW5ub2lcdTBlMjUkcGFpeWFubm9pKTsiCisKKworICAgICAgICAgICAgICAgIC8vIGJyZWFrIGFmdGVyIGV2ZXJ5IGNoYXJhY3Rlciwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICAvLyAodGhpcyB3aWxsIGNhdXNlIHB1bmN0dWF0aW9uIG1hcmtzIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICAvLyBwYXJ0IG9mIHdvcmRzIG9yIG51bWJlcnMgdG8gYmUgdHJlYXRlZCBhcyB3b3JkcyB1bnRvIHRoZW1zZWx2ZXMpCisgICAgICAgICAgICAgICAgKyAiLjsiCisKKyAgICAgICAgICAgICAgICAvLyBrZWVwIHRvZ2V0aGVyIGFueSBzZXF1ZW5jZSBvZiBjb250aWd1b3VzIHdvcmRzIGFuZCBudW1iZXJzCisgICAgICAgICAgICAgICAgLy8gKGluY2x1ZGluZyBqdXN0IG9uZSBvZiBlaXRoZXIpLCBwbHVzIGFuIG9wdGlvbmFsIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgLy8gbnVtYmVyLXN1ZmZpeCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICArICIkd29yZD8oJG51bWJlciR3b3JkKSooJG51bWJlciRwb3N0X251bT8pPzsiCisgICAgICAgICAgICAgICAgKyAiJHByZV9udW0oJG51bWJlciR3b3JkKSooJG51bWJlciRwb3N0X251bT8pPzsiCisKKyAgICAgICAgICAgICAgICAvLysgIiRfZGljdGlvbmFyeV8rKCRwYWl5YW5ub2kkbWFpeWFtb2s/KT87IgorICAgICAgICAgICAgICAgICsgIiRfZGljdGlvbmFyeV8rKCRwYWl5YW5ub2k/JG1haXlhbW9rKT87IgorCisgICAgICAgICAgICAgICAgKyAiJF9kaWN0aW9uYXJ5XyskcGFpeWFubm9pLyhbXlx1MGUyNSRtYWl5YW1vayRfaWdub3JlX10iCisgICAgICAgICAgICAgICAgICAgICAgICArICJ8XHUwZTI1W14kcGFpeWFubm9pJF9pZ25vcmVfXSk7IgorCisgICAgICAgICAgICAgICAgKyAiJHRoYWlfZXRjOyIKKworICAgICAgICAgICAgICAgIC8vIGtlZXAgdG9nZXRoZXIgcnVucyBvZiB3aGl0ZXNwYWNlIChvcHRpb25hbGx5IHdpdGggYSBzaW5nbGUgdHJhaWxpbmcKKyAgICAgICAgICAgICAgICAvLyBsaW5lIHNlcGFyYXRvciBvciBDUkxGIHNlcXVlbmNlKQorICAgICAgICAgICAgICAgICsgIiR3cypccj8kbHM/OyIKKworICAgICAgICAgICAgICAgIC8vIGtlZXAgdG9nZXRoZXIgcnVucyBvZiBLYXRha2FuYQorICAgICAgICAgICAgICAgICsgIlska2F0YSRjamtfZGlhY3JpdF0qOyIKKworICAgICAgICAgICAgICAgIC8vIGtlZXAgdG9nZXRoZXIgcnVucyBvZiBIaXJhZ2FuYQorICAgICAgICAgICAgICAgICsgIlskaGlyYSRjamtfZGlhY3JpdF0qOyIKKworICAgICAgICAgICAgICAgIC8vIGtlZXAgdG9nZXRoZXIgcnVucyBvZiBLYW5qaQorICAgICAgICAgICAgICAgICsgIiRrYW5qaSo7IgorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgeyAiTGluZUJyZWFrUnVsZXMiLAorICAgICAgICAgICAgICAgICIkX2RpY3Rpb25hcnlfPVtcdTBlMDEtXHUwZTJlXHUwZTMwLVx1MGUzYVx1MGU0MC1cdTBlNDRcdTBlNDctXHUwZTRlXTsiIC8vIHRoaXMgcnVsZSBicmVha3MgdGhlIGl0ZXJhdG9yIHdpdGggbWl4ZWQgVGhhaSBhbmQgRW5nbGlzaAorCisgICAgICAgICAgICAgICAgLy8gU3Vycm9nYXRlcy4gIFVudGlsIGJldHRlciBzdXBwb3J0IGlzIGF2YWlsYWJsZSwgaWdub3JlIGxvdyBzdXJyb2dhdGVzCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGFuZCBjbGFzc2lmeSBoaWdoIHN1cnJvZ2F0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAgICAgKyAiJHN1cnJfbG89W1x1ZGMwMC1cdWRmZmZdOyIKKyAgICAgICAgICAgICAgICArICIkc3Vycl9oaV9sZXQ9W1x1ZDgwMFx1ZDgwMVx1ZDgzNFx1ZDgzNV07IiAgIC8vIEhpIFN1cnJvZ2F0ZXMgZm9yIE9sZCBJdGFsaWMsIEdvdGhpYywgRGVzZXJldCwgTXVzaWMsIE1hdGgKKyAgICAgICAgICAgICAgICArICIkc3Vycl9oaV9pZGVvPVtcdWQ4NDAtXHVkODgwXTsiICAgICAgICAgICAgIC8vIEhpIFN1cnJvZ2F0ZXMgZm9yIENKSworICAgICAgICAgICAgICAgICsgIiRzdXJyX2hpX3RhZz1bXHVkYjQwXTsiICAgICAgICAgICAgICAgICAgICAgLy8gSGkgU3Vycm9nYXRlcyBmb3IgVGFncworICAgICAgICAgICAgICAgICsgIiRzdXJyX2hpX3B1YT1bXHVkYjgwLVx1ZGJmZl07IiAgICAgICAgICAgICAgLy8gSGkgU3Vycm9nYXRlcyBmb3IgUHJpdmF0ZSBVc2UuCisKKyAgICAgICAgICAgICAgICAvLyBQcml2YXRlIFVzZSBBcmVhLiAgVHJlYXQgbGlrZSBpZGVvZ3JhcGhzLgorICAgICAgICAgICAgICAgICsgIiRwdWE9W1x1ZTAwMC1cdWY4ZmYkc3Vycl9oaV9wdWFdOyIKKworICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBub24tc3BhY2luZyBtYXJrcywgZW5jbG9zaW5nIG1hcmtzLCBhbmQgZm9ybWF0IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICArICIkX2lnbm9yZV89W1tbOk1uOl1bOk1lOl1bOkNmOl0kc3Vycl9sbyRzdXJyX2hpX3RhZ10tWyRfZGljdGlvbmFyeV9dXTsiCisKKyAgICAgICAgICAgICAgICAvLyBIaW5kaSBwaHJhc2Ugc2VwYXJhdG9ycworICAgICAgICAgICAgICAgICsgIiRkYW5kYT1bXHUwOTY0XHUwOTY1XTsiCisKKyAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgYWx3YXlzIGNhdXNlIGEgYnJlYWs6IEVUWCwgdGFiLCBMRiwgRkYsIExTLCBhbmQgUFMKKyAgICAgICAgICAgICAgICArICIkYnJlYWs9W1x1MDAwM1x0XG5cZlx1MjAyOFx1MjAyOV07IgorCisgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB0aGF0IGFsd2F5cyBwcmV2ZW50IGEgYnJlYWs6IHRoZSBub24tYnJlYWtpbmcgc3BhY2UKKyAgICAgICAgICAgICAgICAvLyBhbmQgc2ltaWxhciBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgKyAiJG5ic3A9W1x1MDBhMFx1MjAwN1x1MjAxMVx1ZmVmZl07IgorCisgICAgICAgICAgICAgICAgLy8gd2hpdGVzcGFjZTogc3BhY2Ugc2VwYXJhdG9ycyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLCBleGNlcHQgZm9yCisgICAgICAgICAgICAgICAgLy8gQ1IgYW5kIHRoZSBvdGhlciBjaGFyYWN0ZXJzIG1lbnRpb25lZCBhYm92ZQorICAgICAgICAgICAgICAgICsgIiRzcGFjZT1bW1s6WnM6XVs6Q2M6XV0tWyRuYnNwJGJyZWFrXHJdXTsiCisKKyAgICAgICAgICAgICAgICAvLyBkYXNoZXM6IGRhc2ggcHVuY3R1YXRpb24gYW5kIHRoZSBkaXNjcmV0aW9uYXJ5IGh5cGhlbiwgZXhjZXB0IGZvcgorICAgICAgICAgICAgICAgIC8vIG5vbi1icmVha2luZyBoeXBoZW5zCisgICAgICAgICAgICAgICAgKyAiJGRhc2g9W1tbOlBkOl1cdTAwYWRdLSRuYnNwXTsiCisKKyAgICAgICAgICAgICAgICArICIkcGFpeWFubm9pPVtcdTBlMmZdOyIKKyAgICAgICAgICAgICAgICArICIkbWFpeWFtb2s9W1x1MGU0Nl07IgorICAgICAgICAgICAgICAgICsgIiR0aGFpX2V0Yz0oJHBhaXlhbm5vaVx1MGUyNSRwYWl5YW5ub2kpOyIKKworICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgdGhhdCBzdGljayB0byBhIHdvcmQgaWYgdGhleSBwcmVjZWRlIGl0OiBjdXJyZW5jeSBzeW1ib2xzCisgICAgICAgICAgICAgICAgLy8gKGV4Y2VwdCB0aGUgY2VudHMgc2lnbikgYW5kIHN0YXJ0aW5nIHB1bmN0dWF0aW9uCisgICAgICAgICAgICAgICAgKyAiJHByZV93b3JkPVtbWzpTYzpdLVtcdTAwYTJdXVs6UHM6XVs6UGk6XVxcXCJdOyIKKworICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgdGhhdCBzdGljayB0byBhIHdvcmQgaWYgdGhleSBmb2xsb3cgaXQ6IGVuZGluZyBwdW5jdHVhdGlvbiwKKyAgICAgICAgICAgICAgICAvLyBvdGhlciBwdW5jdHVhdGlvbiB0aGF0IHVzdWFsbHkgb2NjdXJzIGF0IHRoZSBlbmQgb2YgYSBzZW50ZW5jZSwKKyAgICAgICAgICAgICAgICAvLyBzbWFsbCBLYW5hIGNoYXJhY3RlcnMsIHNvbWUgQ0pLIGRpYWNyaXRpY3MsIGV0Yy4KKyAgICAgICAgICAgICAgICArICIkcG9zdF93b3JkPVtbOlBlOl1bOlBmOl1cXCFcXCVcXC5cXCxcXDpcXDtcXD9cXFwiXHUwMGEyXHUwMGIwXHUwNjZhXHUyMDMwLVx1MjAzNFx1MjEwMyIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIlx1MjEwNVx1MjEwOVx1MzAwMVx1MzAwMlx1MzAwNVx1MzA0MVx1MzA0M1x1MzA0NVx1MzA0N1x1MzA0OVx1MzA2MyIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIlx1MzA4M1x1MzA4NVx1MzA4N1x1MzA4ZVx1MzA5OS1cdTMwOWVcdTMwYTFcdTMwYTNcdTMwYTVcdTMwYTdcdTMwYTkiCisgICAgICAgICAgICAgICAgICAgICAgICArICJcdTMwYzNcdTMwZTNcdTMwZTVcdTMwZTdcdTMwZWVcdTMwZjVcdTMwZjZcdTMwZmMtXHUzMGZlXHVmZjAxXHVmZjBlIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiXHVmZjFmJG1haXlhbW9rXTsiCisKKyAgICAgICAgICAgICAgICAvLyBLYW5qaTogYWN0dWFsbHkgaW5jbHVkZXMgYm90aCBLYW5qaSBhbmQgS2FuYSwgZXhjZXB0IGZvciBzbWFsbCBLYW5hIGFuZAorICAgICAgICAgICAgICAgIC8vIENKSyBkaWFjcml0aWNzCisgICAgICAgICAgICAgICAgKyAiJGthbmppPVtbJHN1cnJfaGlfaWRlbyRwdWFcdTRlMDAtXHU5ZmE1XHVmOTAwLVx1ZmEyZFx1MzA0MS1cdTMwOTRcdTMwYTEtXHUzMGZhXS1bJHBvc3Rfd29yZCRfaWdub3JlX11dOyIKKworICAgICAgICAgICAgICAgIC8vIGRpZ2l0cworICAgICAgICAgICAgICAgICsgIiRkaWdpdD1bWzpOZDpdWzpObzpdXTsiCisKKyAgICAgICAgICAgICAgICAvLyBwdW5jdHVhdGlvbiB0aGF0IGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyOiBwZXJpb2RzIGFuZCBjb21tYXMKKyAgICAgICAgICAgICAgICArICIkbWlkX251bT1bXFwuXFwsXTsiCisKKyAgICAgICAgICAgICAgICAvLyBldmVyeXRoaW5nIG5vdCBtZW50aW9uZWQgYWJvdmUsIHBsdXMgdGhlIHF1b3RlIG1hcmtzICh3aGljaCBhcmUgYm90aAorICAgICAgICAgICAgICAgIC8vIDxwcmUtd29yZD4sIDxwb3N0LXdvcmQ+LCBhbmQgPGNoYXI+KQorICAgICAgICAgICAgICAgICsgIiRjaGFyPVteJGJyZWFrJHNwYWNlJGRhc2gka2FuamkkbmJzcCRfaWdub3JlXyRwcmVfd29yZCRwb3N0X3dvcmQiCisgICAgICAgICAgICAgICAgICAgICAgICArICIkbWlkX251bVxyJGRhbmRhJF9kaWN0aW9uYXJ5XyRwYWl5YW5ub2kkbWFpeWFtb2tdOyIKKworICAgICAgICAgICAgICAgIC8vIGEgIm51bWJlciIgaXMgYSBydW4gb2YgcHJlZml4IGNoYXJhY3RlcnMgYW5kIGRhc2hlcywgZm9sbG93ZWQgYnkgb25lIG9yCisgICAgICAgICAgICAgICAgLy8gbW9yZSBkaWdpdHMgd2l0aCBpc29sYXRlZCBudW1iZXItcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbnRlcnNwZXJzZWQKKyAgICAgICAgICAgICAgICArICIkbnVtYmVyPShbJHByZV93b3JkJGRhc2hdKiRkaWdpdCsoJG1pZF9udW0kZGlnaXQrKSopOyIKKworICAgICAgICAgICAgICAgIC8vIHRoZSBiYXNpYyBjb3JlIG9mIGEgd29yZCBjYW4gYmUgZWl0aGVyIGEgIm51bWJlciIgYXMgZGVmaW5lZCBhYm92ZSwgYSBzaW5nbGUKKyAgICAgICAgICAgICAgICAvLyAiS2FuamkiIGNoYXJhY3Rlciwgb3IgYSBydW4gb2YgYW55IG51bWJlciBvZiBub3QtZXhwbGljaXRseS1tZW50aW9uZWQKKyAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzICh0aGlzIGluY2x1ZGVzIExhdGluIGxldHRlcnMpCisgICAgICAgICAgICAgICAgKyAiJHdvcmRfY29yZT0oJGNoYXIqfCRrYW5qaXwkbnVtYmVyfCRfZGljdGlvbmFyeV8rfCR0aGFpX2V0Yyk7IgorCisgICAgICAgICAgICAgICAgLy8gYSB3b3JkIG1heSBlbmQgd2l0aCBhbiBvcHRpb25hbCBzdWZmaXggdGhhdCBiZSBlaXRoZXIgYSBydW4gb2Ygb25lIG9yCisgICAgICAgICAgICAgICAgLy8gbW9yZSBkYXNoZXMgb3IgYSBydW4gb2Ygd29yZC1zdWZmaXggY2hhcmFjdGVycywgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwKKyAgICAgICAgICAgICAgICAvLyBydW4gb2Ygd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICsgIiR3b3JkX3N1ZmZpeD0oKCRkYXNoK3wkcG9zdF93b3JkKikkc3BhY2UqKTsiCisKKyAgICAgICAgICAgICAgICAvLyBhIHdvcmQsIHRodXMsIGlzIGFuIG9wdGlvbmFsIHJ1biBvZiB3b3JkLXByZWZpeCBjaGFyYWN0ZXJzLCBmb2xsb3dlZCBieQorICAgICAgICAgICAgICAgIC8vIGEgd29yZCBjb3JlIGFuZCBhIHdvcmQgc3VmZml4ICh0aGUgc3ludGF4IG9mIDx3b3JkLWNvcmU+IGFuZCA8d29yZC1zdWZmaXg+CisgICAgICAgICAgICAgICAgLy8gYWN0dWFsbHkgYWxsb3dzIGVpdGhlciBvZiB0aGVtIHRvIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsIHB1dHRpbmcgYSBicmVhaworICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhpbmdzIGxpa2UgIikoIiBvciAiYWFhKGFhYSIKKyAgICAgICAgICAgICAgICArICIkd29yZD0oJHByZV93b3JkKiR3b3JkX2NvcmUkd29yZF9zdWZmaXgpOyIKKworICAgICAgICAgICAgICAgIC8vIGZpbmFsbHksIHRoZSBydWxlIHRoYXQgZG9lcyB0aGUgd29yazogS2VlcCB0b2dldGhlciBhbnkgcnVuIG9mIHdvcmRzIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBhcmUgam9pbmVkIGJ5IHJ1bnMgb2Ygb25lIG9mIG1vcmUgbm9uLXNwYWNpbmcgbWFyay4gIEFsc28ga2VlcCBhIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgLy8gbGluZS1icmVhayBjaGFyYWN0ZXIgb3IgQ1JMRiBjb21iaW5hdGlvbiB3aXRoIHRoZSB3b3JkLiAgKGxpbmUgc2VwYXJhdG9ycworICAgICAgICAgICAgICAgIC8vICJ3aW4iIG92ZXIgbmJzcCdzKQorICAgICAgICAgICAgICAgICsgIiR3b3JkKCRuYnNwKyR3b3JkKSooXHI/JGJyZWFrP3wkcGFpeWFubm9pXHIkYnJlYWt8JHBhaXlhbm5vaSRicmVhayk/OyIKKyAgICAgICAgICAgICAgICArICIkd29yZCgkbmJzcCskd29yZCkqJHBhaXlhbm5vaS8oW15bXHUwZTI1JF9pZ25vcmVfXV18IgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiXHUwZTI1W14kcGFpeWFubm9pJF9pZ25vcmVfXSk7IgorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgeyAiV29yZEJyZWFrRGljdGlvbmFyeSIsIHVybCB9LAorICAgICAgICAgICAgeyAiTGluZUJyZWFrRGljdGlvbmFyeSIsIHVybCB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9CdWRkaGlzdENhbGVuZGFyU3ltYm9scy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9CdWRkaGlzdENhbGVuZGFyU3ltYm9scy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1NTEyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0J1ZGRoaXN0Q2FsZW5kYXJTeW1ib2xzLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9CdWRkaGlzdENhbGVuZGFyU3ltYm9scy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjM5ICQgCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBEZWZhdWx0IERhdGUgRm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBCdWRkaGlzdCBDYWxlbmRhcgorICovCitwdWJsaWMgY2xhc3MgQnVkZGhpc3RDYWxlbmRhclN5bWJvbHMgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvcHlyaWdodCA9ICJDb3B5cmlnaHQgXHUwMGE5IDE5OTggSUJNIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIjsKKworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiRXJhcyIsIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgIkJFIgorICAgICAgICAgICAgfSB9LAorICAgIH07CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBmQ29udGVudHM7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfYXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNDhjZWFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9CdWRkaGlzdENhbGVuZGFyU3ltYm9sc19hci5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfYXIuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozOSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogRGVmYXVsdCBEYXRlIEZvcm1hdCBzeW1ib2xzIGZvciB0aGUgQnVkZGhpc3QgQ2FsZW5kYXIKKyAqLworcHVibGljIGNsYXNzIEJ1ZGRoaXN0Q2FsZW5kYXJTeW1ib2xzX2FyIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk5IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIkVyYXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgICAgICJcdTA2MjdcdTA2NDRcdTA2MkFcdTA2NDJcdTA2NDhcdTA2NEFcdTA2NDUgXHUwNjI3XHUwNjQ0XHUwNjI4XHUwNjQ4XHUwNjMwXHUwNjRBIgorICAgICAgICAgICAgfSB9LAorICAgIH07CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBmQ29udGVudHM7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfaHUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfaHUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YTczZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9CdWRkaGlzdENhbGVuZGFyU3ltYm9sc19odS5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfaHUuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozOSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogSHVuZ2FyaWFuIERhdGUgRm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBCdWRkaGlzdCBDYWxlbmRhcgorICovCitwdWJsaWMgY2xhc3MgQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfaHUgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvcHlyaWdodCA9ICJDb3B5cmlnaHQgXHUwMGE5IDE5OTggSUJNIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIjsKKworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiRXJhcyIsIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgIkJLIgorICAgICAgICAgICAgfSB9LAorICAgIH07CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBmQ29udGVudHM7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfdGguamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfdGguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NTI2OWJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9CdWRkaGlzdENhbGVuZGFyU3ltYm9sc190aC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvQnVkZGhpc3RDYWxlbmRhclN5bWJvbHNfdGguamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTozOSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogVGhhaSB2ZXJzaW9uIG9mIHRoZSBEYXRlIEZvcm1hdCBzeW1ib2xzIGZvciB0aGUgQnVkZGhpc3QgY2FsZW5kYXIKKyAqLworcHVibGljIGNsYXNzIEJ1ZGRoaXN0Q2FsZW5kYXJTeW1ib2xzX3RoIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIkVyYXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgICAgICJcdTBlMWUuXHUwZTI4LiIKKyAgICAgICAgICAgIH0gfSwKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gZkNvbnRlbnRzOworICAgIH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZGNlYTRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGEuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9DYWxlbmRhckRhdGEuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjM2OjE5ICQKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8vIERlZmF1bHQKK3B1YmxpYyBjbGFzcyBDYWxlbmRhckRhdGEgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBMaXN0UmVzb3VyY2VCdW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsKKyAgICAgICAgICAgIHsgIldlZWtlbmQiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IC8vIFNhdHVyZGF5OlN1bmRheQorICAgICAgICAgICAgICAgICAgICAiNyIsICIwIiwgLy8gb25zZXQgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgICAgICIyIiwgIjAiICAvLyBjZWFzZSBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX0FFLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9BRS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkMjZjODIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9BRS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0NhbGVuZGFyRGF0YV9hcl9BRS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6MzY6MTkgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLy8gQXJhYmljLCBVbml0ZWQgQXJhYiBFbWlyYXRlcworcHVibGljIGNsYXNzIENhbGVuZGFyRGF0YV9hcl9BRSBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIExpc3RSZXNvdXJjZUJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgeyAiV2Vla2VuZCIsCisgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgLy8gVGh1cnNkYXk6RnJpZGF5CisgICAgICAgICAgICAgICAgICAgICI1IiwgIjAiLCAvLyBvbnNldCBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICAgICAgIjciLCAiMCIgIC8vIGNlYXNlIGRvdywgbWlsbGlzIGluIGRheQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfYXJfQkguamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX0JILmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzUxMjIzMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX0JILmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvQ2FsZW5kYXJEYXRhX2FyX0JILmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMzozNjoxOSAkCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvLyBBcmFiaWMsIEJhaHJhaW4KK3B1YmxpYyBjbGFzcyBDYWxlbmRhckRhdGFfYXJfQkggZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBMaXN0UmVzb3VyY2VCdW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsKKyAgICAgICAgICAgIHsgIldlZWtlbmQiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IC8vIFRodXJzZGF5OkZyaWRheQorICAgICAgICAgICAgICAgICAgICAiNSIsICIwIiwgLy8gb25zZXQgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgICAgICI3IiwgIjAiICAvLyBjZWFzZSBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX0RaLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9EWi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0MTc5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9EWi5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0NhbGVuZGFyRGF0YV9hcl9EWi5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6MzY6MTkgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLy8gQXJhYmljLCBBbGdlcmlhCitwdWJsaWMgY2xhc3MgQ2FsZW5kYXJEYXRhX2FyX0RaIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgTGlzdFJlc291cmNlQnVuZGxlCisgICAgICovCisgICAgcHVibGljIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W11bXSB7CisgICAgICAgICAgICB7ICJXZWVrZW5kIiwKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAvLyBUaHVyc2RheTpGcmlkYXkKKyAgICAgICAgICAgICAgICAgICAgIjUiLCAiMCIsIC8vIG9uc2V0IGRvdywgbWlsbGlzIGluIGRheQorICAgICAgICAgICAgICAgICAgICAiNyIsICIwIiAgLy8gY2Vhc2UgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9FRy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfYXJfRUcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMGNlODllCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfYXJfRUcuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9DYWxlbmRhckRhdGFfYXJfRUcuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjM2OjE5ICQKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8vIEFyYWJpYywgRWd5cHQKK3B1YmxpYyBjbGFzcyBDYWxlbmRhckRhdGFfYXJfRUcgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBMaXN0UmVzb3VyY2VCdW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsKKyAgICAgICAgICAgIHsgIldlZWtlbmQiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IC8vIEZyaWRheTpTYXR1cmRheQorICAgICAgICAgICAgICAgICAgICAiNiIsICIwIiwgLy8gb25zZXQgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgICAgICIxIiwgIjAiICAvLyBjZWFzZSBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX0pPLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9KTy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxNTcxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9KTy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0NhbGVuZGFyRGF0YV9hcl9KTy5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6MzY6MTkgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLy8gQXJhYmljLCBKb3JkYW4KK3B1YmxpYyBjbGFzcyBDYWxlbmRhckRhdGFfYXJfSk8gZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBMaXN0UmVzb3VyY2VCdW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsKKyAgICAgICAgICAgIHsgIldlZWtlbmQiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IC8vIFRodXJzZGF5OkZyaWRheQorICAgICAgICAgICAgICAgICAgICAiNSIsICIwIiwgLy8gb25zZXQgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgICAgICI3IiwgIjAiICAvLyBjZWFzZSBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX0tXLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9LVy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwNTBiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9LVy5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0NhbGVuZGFyRGF0YV9hcl9LVy5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6MzY6MTkgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLy8gQXJhYmljLCBLdXdhaXQKK3B1YmxpYyBjbGFzcyBDYWxlbmRhckRhdGFfYXJfS1cgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBMaXN0UmVzb3VyY2VCdW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsKKyAgICAgICAgICAgIHsgIldlZWtlbmQiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IC8vIFRodXJzZGF5OkZyaWRheQorICAgICAgICAgICAgICAgICAgICAiNSIsICIwIiwgLy8gb25zZXQgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgICAgICI3IiwgIjAiICAvLyBjZWFzZSBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX09NLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9PTS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkNjc3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9PTS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0NhbGVuZGFyRGF0YV9hcl9PTS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6MzY6MTkgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLy8gQXJhYmljLCBPbWFuCitwdWJsaWMgY2xhc3MgQ2FsZW5kYXJEYXRhX2FyX09NIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgTGlzdFJlc291cmNlQnVuZGxlCisgICAgICovCisgICAgcHVibGljIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W11bXSB7CisgICAgICAgICAgICB7ICJXZWVrZW5kIiwKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAvLyBUaHVyc2RheTpGcmlkYXkKKyAgICAgICAgICAgICAgICAgICAgIjUiLCAiMCIsIC8vIG9uc2V0IGRvdywgbWlsbGlzIGluIGRheQorICAgICAgICAgICAgICAgICAgICAiNyIsICIwIiAgLy8gY2Vhc2UgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9RQS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfYXJfUUEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZGQ0ZGRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfYXJfUUEuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9DYWxlbmRhckRhdGFfYXJfUUEuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjM2OjE5ICQKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8vIEFyYWJpYywgUWF0YXIKK3B1YmxpYyBjbGFzcyBDYWxlbmRhckRhdGFfYXJfUUEgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBMaXN0UmVzb3VyY2VCdW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsKKyAgICAgICAgICAgIHsgIldlZWtlbmQiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IC8vIFRodXJzZGF5OkZyaWRheQorICAgICAgICAgICAgICAgICAgICAiNSIsICIwIiwgLy8gb25zZXQgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgICAgICI3IiwgIjAiICAvLyBjZWFzZSBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX1NBLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9TQS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzYTkxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9TQS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0NhbGVuZGFyRGF0YV9hcl9TQS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6MzY6MTkgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLy8gQXJhYmljLCBTYXVkaSBBcmFiaWEKK3B1YmxpYyBjbGFzcyBDYWxlbmRhckRhdGFfYXJfU0EgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBMaXN0UmVzb3VyY2VCdW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsKKyAgICAgICAgICAgIHsgIldlZWtlbmQiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IC8vIFRodXJzZGF5OkZyaWRheQorICAgICAgICAgICAgICAgICAgICAiNSIsICIwIiwgLy8gb25zZXQgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgICAgICI3IiwgIjAiICAvLyBjZWFzZSBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX1NZLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9TWS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhZjE5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9hcl9TWS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0NhbGVuZGFyRGF0YV9hcl9TWS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6MzY6MTkgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLy8gQXJhYmljLCBTeXJpYQorcHVibGljIGNsYXNzIENhbGVuZGFyRGF0YV9hcl9TWSBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIExpc3RSZXNvdXJjZUJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgeyAiV2Vla2VuZCIsCisgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgLy8gRnJpZGF5OlNhdHVyZGF5CisgICAgICAgICAgICAgICAgICAgICI2IiwgIjAiLCAvLyBvbnNldCBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICAgICAgIjEiLCAiMCIgIC8vIGNlYXNlIGRvdywgbWlsbGlzIGluIGRheQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfYXJfWUUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX1lFLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTMxZjUxZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX2FyX1lFLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvQ2FsZW5kYXJEYXRhX2FyX1lFLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8wOC8xMyAyMzozNjoxOSAkCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvLyBBcmFiaWMsIFllbWVuCitwdWJsaWMgY2xhc3MgQ2FsZW5kYXJEYXRhX2FyX1lFIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgTGlzdFJlc291cmNlQnVuZGxlCisgICAgICovCisgICAgcHVibGljIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W11bXSB7CisgICAgICAgICAgICB7ICJXZWVrZW5kIiwKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAvLyBUaHVyc2RheTpGcmlkYXkKKyAgICAgICAgICAgICAgICAgICAgIjUiLCAiMCIsIC8vIG9uc2V0IGRvdywgbWlsbGlzIGluIGRheQorICAgICAgICAgICAgICAgICAgICAiNyIsICIwIiAgLy8gY2Vhc2UgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9pd19JTC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfaXdfSUwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZTJiZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfaXdfSUwuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9DYWxlbmRhckRhdGFfaXdfSUwuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjM2OjE5ICQKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8vIEhlYnJldywgSXNyYWVsCitwdWJsaWMgY2xhc3MgQ2FsZW5kYXJEYXRhX2l3X0lMIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgTGlzdFJlc291cmNlQnVuZGxlCisgICAgICovCisgICAgcHVibGljIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W11bXSB7CisgICAgICAgICAgICB7ICJXZWVrZW5kIiwKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAvLyBGcmlkYXk6U2F0dXJkYXkKKyAgICAgICAgICAgICAgICAgICAgIjYiLCAiMCIsIC8vIG9uc2V0IGRvdywgbWlsbGlzIGluIGRheQorICAgICAgICAgICAgICAgICAgICAiMSIsICIwIiAgLy8gY2Vhc2UgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV9tc19NWS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfbXNfTVkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTBiN2FiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DYWxlbmRhckRhdGFfbXNfTVkuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9DYWxlbmRhckRhdGFfbXNfTVkuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjM2OjE5ICQKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8vIEJhaGFzYSBNYWxheXNpYSwgTWFsYXlzaWEKK3B1YmxpYyBjbGFzcyBDYWxlbmRhckRhdGFfbXNfTVkgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBMaXN0UmVzb3VyY2VCdW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXVtdIHsKKyAgICAgICAgICAgIHsgIldlZWtlbmQiLAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IC8vIFNhdHVyZGF5IC0gaGFsZiBkYXkgaW4gc29tZSBvZmZpY2VzOlN1bmRheQorICAgICAgICAgICAgICAgICAgICAiMCIsICIwIiwgLy8gb25zZXQgZG93LCBtaWxsaXMgaW4gZGF5CisgICAgICAgICAgICAgICAgICAgICIwIiwgIjAiICAvLyBjZWFzZSBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQ2FsZW5kYXJEYXRhX3RlX0lOLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV90ZV9JTi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlNWI1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NhbGVuZGFyRGF0YV90ZV9JTi5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0NhbGVuZGFyRGF0YV90ZV9JTi5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6MzY6MTkgJAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLy8gVGVsdWd1LCBJbmRpYQorcHVibGljIGNsYXNzIENhbGVuZGFyRGF0YV90ZV9JTiBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIExpc3RSZXNvdXJjZUJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgeyAiV2Vla2VuZCIsCisgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgLy8gU3VuZGF5CisgICAgICAgICAgICAgICAgICAgICIxIiwgIjAiLCAvLyBvbnNldCBkb3csIG1pbGxpcyBpbiBkYXkKKyAgICAgICAgICAgICAgICAgICAgIjIiLCAiMCIgIC8vIGNlYXNlIGRvdywgbWlsbGlzIGluIGRheQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DaGluZXNlQ2FsZW5kYXJTeW1ib2xzLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0NoaW5lc2VDYWxlbmRhclN5bWJvbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNzY2YjM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9DaGluZXNlQ2FsZW5kYXJTeW1ib2xzLmphdmEKQEAgLTAsMCArMSw0OCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvQ2hpbmVzZUNhbGVuZGFyU3ltYm9scy5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDgvMTMgMjM6Mzc6NDggJAorICogJFJldmlzaW9uOiAxLjYgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBEZWZhdWx0IERhdGUgRm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBDaGluZXNlIGNhbGVuZGFyLgorICovCitwdWJsaWMgY2xhc3MgQ2hpbmVzZUNhbGVuZGFyU3ltYm9scyBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIklzTGVhcE1vbnRoIiwKKyAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgIioiCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICB7ICJEYXRlVGltZVBhdHRlcm5zIiwKKyAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgImg6bW06c3MgYSB6IiwgLy8gZnVsbCB0aW1lIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAiaDptbTpzcyBhIHoiLCAvLyBsb25nIHRpbWUgcGF0dGVybgorICAgICAgICAgICAgICAgICJoOm1tOnNzIGEiLCAvLyBtZWRpdW0gdGltZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgImg6bW0gYSIsIC8vIHNob3J0IHRpbWUgcGF0dGVybgorICAgICAgICAgICAgICAgIC8vIFRPRE8gRml4IHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAiRUVFRSB5J3gnRy1NbC1kIiwgLy8gZnVsbCBkYXRlIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAieSd4J0ctTWwtZCIsIC8vIGxvbmcgZGF0ZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgInkneCdHLU1sLWQiLCAvLyBtZWRpdW0gZGF0ZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgInkneCdHLU1sLWQiLCAvLyBzaG9ydCBkYXRlIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAiezF9IHswfSIgLy8gZGF0ZS10aW1lIHBhdHRlcm4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gZkNvbnRlbnRzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSGVicmV3Q2FsZW5kYXJTeW1ib2xzLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hlYnJld0NhbGVuZGFyU3ltYm9scy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2MGMxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hlYnJld0NhbGVuZGFyU3ltYm9scy5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvSGVicmV3Q2FsZW5kYXJTeW1ib2xzLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDMgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIERlZmF1bHQgRGF0ZSBGb3JtYXQgc3ltYm9scyBmb3IgdGhlIEhlYnJldyBDYWxlbmRhcgorICovCitwdWJsaWMgY2xhc3MgSGVicmV3Q2FsZW5kYXJTeW1ib2xzIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIk1vbnRoTmFtZXMiLCBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICAgICAiVGlzaHJpIiwKKyAgICAgICAgICAgICAgICAiSGVzaHZhbiIsCisgICAgICAgICAgICAgICAgIktpc2xldiIsCisgICAgICAgICAgICAgICAgIlRldmV0IiwKKyAgICAgICAgICAgICAgICAiU2hldmF0IiwKKyAgICAgICAgICAgICAgICAiQWRhciBJIiwgICAgICAgLy8gTGVhcCB5ZWFycyBvbmx5CisgICAgICAgICAgICAgICAgIkFkYXIiLAorICAgICAgICAgICAgICAgICJOaXNhbiIsCisgICAgICAgICAgICAgICAgIkl5YXIiLAorICAgICAgICAgICAgICAgICJTaXZhbiIsCisgICAgICAgICAgICAgICAgIlRhbXV6IiwKKyAgICAgICAgICAgICAgICAiQXYiLAorICAgICAgICAgICAgICAgICJFbHVsIiwKKyAgICAgICAgICAgIH0gfSwKKyAgICAgICAgeyAiRXJhcyIsIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICJBTSIKKyAgICAgICAgICAgIH0gfSwKKyAgICB9OworICAgICAgICAKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBmQ29udGVudHM7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSGVicmV3Q2FsZW5kYXJTeW1ib2xzX2ZpLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hlYnJld0NhbGVuZGFyU3ltYm9sc19maS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmNWRjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hlYnJld0NhbGVuZGFyU3ltYm9sc19maS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvSGVicmV3Q2FsZW5kYXJTeW1ib2xzX2ZpLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDMgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIEZpbm5pc2ggZGF0ZSBmb3JtYXQgc3ltYm9scyBmb3IgdGhlIEhlYnJldyBDYWxlbmRhcgorICovCitwdWJsaWMgY2xhc3MgSGVicmV3Q2FsZW5kYXJTeW1ib2xzX2ZpIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIk5hbWUiLCAgICAgICAiSnV1dGFsYWluZW4ga2FsZW50ZXJpIiB9LAorICAgICAgICAKKyAgICAgICAgeyAiTW9udGhOYW1lcyIsIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgIlRpXHUwMTYxclx1MDBFQ2t1dSIsICAgICAgIC8vIFRpc2hyaQorICAgICAgICAgICAgICAgICJIZVx1MDE2MXZcdTAwRTFua3V1IiwgICAgICAvLyBIZXNodmFuCisgICAgICAgICAgICAgICAgIktpc2xcdTAwRTl2a3V1IiwgICAgICAgICAgIC8vIEtpc2xldgorICAgICAgICAgICAgICAgICJUZXZcdTAwRTl0a3V1IiwgICAgICAgICAgICAvLyBUZXZldAorICAgICAgICAgICAgICAgICJcdTAxNjBldmF0a3V1IiwgICAgICAgICAgICAvLyBTaGV2YXQKKyAgICAgICAgICAgICAgICAiQWRcdTAwRTFya3V1IiwgICAgICAgICAgICAgLy8gQWRhciBJCisgICAgICAgICAgICAgICAgIkFkXHUwMEUxcmt1dSBJSSIsICAgICAgICAgIC8vIEFkYXIKKyAgICAgICAgICAgICAgICAiTmlzXHUwMEUxbmt1dSIsICAgICAgICAgICAgLy8gTmlzYW4KKyAgICAgICAgICAgICAgICAiSWpqXHUwMEUxcmt1dSIsICAgICAgICAgICAgLy8gSXlhcgorICAgICAgICAgICAgICAgICJTaXZcdTAwRTFua3V1IiwgICAgICAgICAgICAvLyBTaXZhbgorICAgICAgICAgICAgICAgICJUYW1tXHUwMEZBemt1dSIsICAgICAgICAgICAvLyBUYW11egorICAgICAgICAgICAgICAgICJBYmt1dSIsICAgICAgICAgICAgICAgICAgICAvLyBBdgorICAgICAgICAgICAgICAgICJFbFx1MDBGQWxrdXUiLCAgICAgICAgICAgICAvLyBFbHVsCisgICAgICAgICAgICB9IH0sCisKKyAgICAgICAgeyAiRXJhcyIsIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICJBTSIgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbm5vIE11bmRpCisgICAgICAgICAgICB9IH0sCisgICAgfTsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIGZDb250ZW50czsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9IZWJyZXdDYWxlbmRhclN5bWJvbHNfZnIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSGVicmV3Q2FsZW5kYXJTeW1ib2xzX2ZyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTEwMjRiZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSGVicmV3Q2FsZW5kYXJTeW1ib2xzX2ZyLmphdmEKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9IZWJyZXdDYWxlbmRhclN5bWJvbHNfZnIuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0MyAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogRnJlbmNoIGRhdGUgZm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBIZWJyZXcgQ2FsZW5kYXIuCisgKiBUaGlzIGRhdGEgYWN0dWFsbHkgYXBwbGllcyB0byBGcmVuY2ggQ2FuYWRpYW4uICBJZiB3ZSByZWNlaXZlCisgKiBvZmZpY2lhbCBGcmVuY2ggZGF0YSBmcm9tIG91ciBGcmFuY2Ugb2ZmaWNlLCB3ZSBzaG91bGQgbW92ZSB0aGUgCisgKiBGcmVuY2ggQ2FuYWRpYW4gZGF0YSAoaWYgaXQncyBkaWZmZXJlbnQpIGRvd24gaW50byBfZnJfQ0EKKyAqLworcHVibGljIGNsYXNzIEhlYnJld0NhbGVuZGFyU3ltYm9sc19mciBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29weXJpZ2h0ID0gIkNvcHlyaWdodCBcdTAwYTkgMTk5OCBJQk0gQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4iOworCisgICAgc3RhdGljIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICJNb250aE5hbWVzIiwgbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICAgICAiVGlzc2VyaSIsICAgICAgLy8gVGlzaHJpCisgICAgICAgICAgICAgICAgIkhlc3ZhbiIsICAgICAgIC8vIEhlc2h2YW4KKyAgICAgICAgICAgICAgICAiS2lzbGV2IiwgICAgICAgLy8gS2lzbGV2CisgICAgICAgICAgICAgICAgIlRcdTAwZTliZXRoIiwgIC8vIFRldmV0CisgICAgICAgICAgICAgICAgIlNjaFx1MDBlOWJhdCIsIC8vIFNoZXZhdAorICAgICAgICAgICAgICAgICJBZGFyIiwgICAgICAgICAvLyBBZGFyIEkKKyAgICAgICAgICAgICAgICAiQWRhciBJSSIsICAgICAgLy8gQWRhcgorICAgICAgICAgICAgICAgICJOaXNzYW4iLCAgICAgICAvLyBOaXNhbgorICAgICAgICAgICAgICAgICJJeWFyIiwgICAgICAgICAvLyBJeWFyCisgICAgICAgICAgICAgICAgIlNpdmFuIiwgICAgICAgIC8vIFNpdmFuCisgICAgICAgICAgICAgICAgIlRhbW91eiIsICAgICAgIC8vIFRhbXV6CisgICAgICAgICAgICAgICAgIkFiIiwgICAgICAgICAgIC8vIEF2CisgICAgICAgICAgICAgICAgIkVsbG91bCIsICAgICAgIC8vIEVsdWwKKyAgICAgICAgICAgIH0gfSwKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gZkNvbnRlbnRzOworICAgIH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hlYnJld0NhbGVuZGFyU3ltYm9sc19odS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9IZWJyZXdDYWxlbmRhclN5bWJvbHNfaHUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNjU0ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9IZWJyZXdDYWxlbmRhclN5bWJvbHNfaHUuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0hlYnJld0NhbGVuZGFyU3ltYm9sc19odS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQzICQgCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBIdW5nYXJpYW4gZGF0ZSBmb3JtYXQgc3ltYm9scyBmb3IgdGhlIEhlYnJldyBDYWxlbmRhcgorICovCitwdWJsaWMgY2xhc3MgSGVicmV3Q2FsZW5kYXJTeW1ib2xzX2h1IGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIk1vbnRoTmFtZXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgICAgICJUaXNyaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGlzaHJpCisgICAgICAgICAgICAgICAgIkhlc3ZcdTAwRTFuIiwgICAgICAgICAgICAgICAgICAvLyBIZXNodmFuCisgICAgICAgICAgICAgICAgIktpc3psXHUwMEU5diIsICAgICAgICAgICAgICAgICAvLyBLaXNsZXYKKyAgICAgICAgICAgICAgICAiVFx1MDBFOXZcdTAwRTlzeiIsICAgICAgICAgICAgIC8vIFRldmV0CisgICAgICAgICAgICAgICAgIlN2XHUwMEUxdCIsICAgICAgICAgICAgICAgICAgICAvLyBTaGV2YXQKKyAgICAgICAgICAgICAgICAiXHUwMEMxZFx1MDBFMXIgcmlzXHUwMEYzbiIsICAgIC8vIEFkYXIgSQorICAgICAgICAgICAgICAgICJcdTAwQzFkXHUwMEUxciBzXHUwMEU5bmkiLCAgICAgLy8gQWRhcgorICAgICAgICAgICAgICAgICJOaXN6XHUwMEUxbiIsICAgICAgICAgICAgICAgICAgLy8gTmlzYW4KKyAgICAgICAgICAgICAgICAiSWpcdTAwRTFyIiwgICAgICAgICAgICAgICAgICAgIC8vIEl5YXIKKyAgICAgICAgICAgICAgICAiU3ppdlx1MDBFMW4iLCAgICAgICAgICAgICAgICAgIC8vIFNpdmFuCisgICAgICAgICAgICAgICAgIlRhbXV6IiwgICAgICAgICAgICAgICAgICAgICAgICAvLyBUYW11egorICAgICAgICAgICAgICAgICJcdTAwQzF2IiwgICAgICAgICAgICAgICAgICAgICAgLy8gQXYKKyAgICAgICAgICAgICAgICAiRWx1bCIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVsdWwKKyAgICAgICAgICAgIH0gfSwKKyAgICAgICAgeyAiRXJhcyIsIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgIlRcdTAwQzkiCisgICAgICAgICAgICB9IH0sCisgICAgfTsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIGZDb250ZW50czsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9IZWJyZXdDYWxlbmRhclN5bWJvbHNfaXcuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSGVicmV3Q2FsZW5kYXJTeW1ib2xzX2l3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGI0NTI4NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSGVicmV3Q2FsZW5kYXJTeW1ib2xzX2l3LmphdmEKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9IZWJyZXdDYWxlbmRhclN5bWJvbHNfaXcuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0MyAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogSGVicmV3LWxhbmd1YWdlIGRhdGUgZm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBIZWJyZXcgQ2FsZW5kYXIKKyAqLworcHVibGljIGNsYXNzIEhlYnJld0NhbGVuZGFyU3ltYm9sc19pdyBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29weXJpZ2h0ID0gIkNvcHlyaWdodCBcdTAwYTkgMTk5OCBJQk0gQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4iOworCisgICAgc3RhdGljIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICJNb250aE5hbWVzIiwgbmV3IFN0cmluZ1tdIHsgCisgICAgICAgICAgICAgICAgIlx1MDVFQVx1MDVFOVx1MDVFOFx1MDVEOSIsICAgICAgICAgICAgICAgICAvLyBUaXNocmkKKyAgICAgICAgICAgICAgICAiXHUwNUQ3XHUwNUU5XHUwNUQ1XHUwNURGIiwgICAgICAgICAgICAgICAgIC8vIEhlc2h2YW4KKyAgICAgICAgICAgICAgICAiXHUwNURCXHUwNUUxXHUwNURDXHUwNUQ1IiwgICAgICAgICAgICAgICAgIC8vIEtpc2xldgorICAgICAgICAgICAgICAgICJcdTA1RDhcdTA1RDFcdTA1RUEiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV2ZXQKKyAgICAgICAgICAgICAgICAiXHUwNUU5XHUwNUQxXHUwNUQ4IiwgICAgICAgICAgICAgICAgICAgICAgIC8vIFNoZXZhdAorICAgICAgICAgICAgICAgICJcdTA1RTlcdTA1RDFcdTA1RDgiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRhciBJCisgICAgICAgICAgICAgICAgIlx1MDVEMFx1MDVEM1x1MDVFOCBcdTA1RTlcdTA1RTBcdTA1RDkiLCAgICAvLyBBZGFyCisgICAgICAgICAgICAgICAgIlx1MDVFMFx1MDVEOVx1MDVFMVx1MDVERiIsICAgICAgICAgICAgICAgICAvLyBOaXNhbgorICAgICAgICAgICAgICAgICJcdTA1RDBcdTA1RDlcdTA1RDlcdTA1RTgiLCAgICAgICAgICAgICAgICAgLy8gSXlhcgorICAgICAgICAgICAgICAgICJcdTA1RTFcdTA1RDlcdTA1RDVcdTA1REYiLCAgICAgICAgICAgICAgICAgLy8gU2l2YW4KKyAgICAgICAgICAgICAgICAiXHUwNUVBXHUwNURFXHUwNUQ1XHUwNUQ2IiwgICAgICAgICAgICAgICAgIC8vIFRhbXV6CisgICAgICAgICAgICAgICAgIlx1MDVEMFx1MDVEMSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdgorICAgICAgICAgICAgICAgICJcdTA1RDBcdTA1RENcdTA1RDVcdTA1REMiLCAgICAgICAgICAgICAgICAgLy8gRWx1bAorICAgICAgICAgICAgfSB9LAorICAgICAgICB7ICJFcmFzIiwgbmV3IFN0cmluZ1tdIHsgCisgICAgICAgICAgICAgICAgIlx1MDVEQ1x1MDVEMVx1MDVENFwwNDJcdTA1RTIiCisgICAgICAgICAgICB9IH0sCisgICAgfTsKKyAgICAgICAgCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gZkNvbnRlbnRzOworICAgIH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hlYnJld0NhbGVuZGFyU3ltYm9sc19ubC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9IZWJyZXdDYWxlbmRhclN5bWJvbHNfbmwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMmM1Y2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9IZWJyZXdDYWxlbmRhclN5bWJvbHNfbmwuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0hlYnJld0NhbGVuZGFyU3ltYm9sc19ubC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ0ICQgCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBEdXRjaCBkYXRlIGZvcm1hdCBzeW1ib2xzIGZvciB0aGUgSGVicmV3IENhbGVuZGFyCisgKi8KK3B1YmxpYyBjbGFzcyBIZWJyZXdDYWxlbmRhclN5bWJvbHNfbmwgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvcHlyaWdodCA9ICJDb3B5cmlnaHQgXHUwMGE5IDE5OTggSUJNIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIjsKKworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiTW9udGhOYW1lcyIsIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgIlRpc2pyaWUiLCAgICAgIC8vIFRpc2hyaQorICAgICAgICAgICAgICAgICJDaGVzandhbiIsICAgICAvLyBIZXNodmFuCisgICAgICAgICAgICAgICAgIktpc2xldiIsICAgICAgIC8vIEtpc2xldgorICAgICAgICAgICAgICAgICJUZXZldCIsICAgICAgICAvLyBUZXZldAorICAgICAgICAgICAgICAgICJTamV2YXQiLCAgICAgICAvLyBTaGV2YXQKKyAgICAgICAgICAgICAgICAiQWRhciIsICAgICAgICAgLy8gQWRhciBJCisgICAgICAgICAgICAgICAgIkFkYXIgQiIsICAgICAgIC8vIEFkYXIKKyAgICAgICAgICAgICAgICAiTmlzYW4iLCAgICAgICAgLy8gTmlzYW4KKyAgICAgICAgICAgICAgICAiSWphciIsICAgICAgICAgLy8gSXlhcgorICAgICAgICAgICAgICAgICJTaXZhbiIsICAgICAgICAvLyBTaXZhbgorICAgICAgICAgICAgICAgICJUYW1tb2V6IiwgICAgICAvLyBUYW11egorICAgICAgICAgICAgICAgICJBdiIsICAgICAgICAgICAvLyBBdgorICAgICAgICAgICAgICAgICJFbGxvZWwiLCAgICAgICAvLyBFbHVsCisgICAgICAgICAgICB9IH0sCisgICAgfTsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIGZDb250ZW50czsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODkxMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDQgJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCitwdWJsaWMgY2xhc3MgSG9saWRheUJ1bmRsZSBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisKKyAgICAvLyBOb3JtYWxseSwgZWFjaCBIb2xpZGF5QnVuZGxlIHVzZXMgdGhlIGhvbGlkYXkncyBVUyBFbmdsaXNoIG5hbWUKKyAgICAvLyBhcyB0aGUgc3RyaW5nIGtleSBmb3IgbG9va2luZyB1cCB0aGUgbG9jYWxpemVkIG5hbWUuICBUaGlzIG1lYW5zCisgICAgLy8gdGhhdCB0aGUga2V5IGl0c2VsZiBjYW4gYmUgdXNlZCBpZiBubyBuYW1lIGlzIGZvdW5kIGZvciB0aGUgcmVxdWVzdGVkCisgICAgLy8gbG9jYWxlLgorICAgIC8vCisgICAgLy8gRm9yIGhvbGlkYXlzIHdoZXJlIHRoZSBrZXkgaXMgX25vdF8gdGhlIEVuZ2xpc2ggbmFtZSwgZS5nLiBpbiB0aGUKKyAgICAvLyBjYXNlIG9mIGNvbmZsaWN0cywgdGhlIEVuZ2xpc2ggbmFtZSBtdXN0IGJlIGdpdmVuIGhlcmUuCisgICAgLy8KKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAgICIiLCAiIiAgfSwgICAgICAvLyBDYW4ndCBiZSBlbXB0eSEKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeyByZXR1cm4gZkNvbnRlbnRzOyB9OworCit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2RhLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YTYxZWJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2RhLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2RhLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDQgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIEhvbGlkYXlCdW5kbGVfZGEgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUKK3sKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9CisgICAgeworICAgICAgICB7ICAgIkFybWlzdGljZSBEYXkiLCAgICAgICAgInZcdTAwZTViZW5odmlsZSIgfSwKKyAgICAgICAgeyAgICJBc2NlbnNpb24iLCAgICAgICAgICAgICJoaW1tZWxmYXJ0IiB9LAorICAgICAgICB7ICAgIkJveGluZyBEYXkiLCAgICAgICAgICAgImFuZGVuIGp1bGVkYWciIH0sCisgICAgICAgIHsgICAiQ2hyaXN0bWFzIEV2ZSIsICAgICAgICAianVsZWFmdGVuIiB9LAorICAgICAgICB7ICAgIkVhc3RlciIsICAgICAgICAgICAgICAgInBcdTAwZTVza2UiIH0sCisgICAgICAgIHsgICAiRXBpcGhhbnkiLCAgICAgICAgICAgICAiaGVsbGlndHJla29uZ2Vyc2RhZyIgfSwKKyAgICAgICAgeyAgICJHb29kIEZyaWRheSIsICAgICAgICAgICJsYW5nZnJlZGFnIiB9LAorICAgICAgICB7ICAgIkhhbGxvd2VlbiIsICAgICAgICAgICAgImFsbGVoZWxnZW5zYWZ0ZW4iIH0sCisgICAgICAgIHsgICAiTWF1bmR5IFRodXJzZGF5IiwgICAgICAic2tcdTAwZTZydG9yc2RhZyIgfSwKKyAgICAgICAgeyAgICJQYWxtIFN1bmRheSIsICAgICAgICAgICJwYWxtZXNcdTAwZjhuZGFnIiB9LAorICAgICAgICB7ICAgIlBlbnRlY29zdCIsICAgICAgICAgICAgInBpbnNlIiB9LAorICAgICAgICB7ICAgIlNocm92ZSBUdWVzZGF5IiwgICAgICAgImh2aWRldGlyc2RhZyIgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9kYV9ESy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2RhX0RLLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWViYzBiZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9kYV9ESy5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9kYV9ESy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ0ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2RhX0RLIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlCit7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgSG9saWRheVtdIGZIb2xpZGF5cyA9IHsKKyAgICAgICAgU2ltcGxlSG9saWRheS5ORVdfWUVBUlNfREFZLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5BUFJJTCwgICAzMCwgLUNhbGVuZGFyLkZSSURBWSwgIkdlbmVyYWwgUHJheWVyIERheSIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5KVU5FLCAgICA1LCAgICAgICAgICAgICAgICAgICAgIkNvbnN0aXR1dGlvbiBEYXkiKSwKKyAgICAgICAgU2ltcGxlSG9saWRheS5DSFJJU1RNQVNfRVZFLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkNIUklTVE1BUywKKyAgICAgICAgU2ltcGxlSG9saWRheS5CT1hJTkdfREFZLAorICAgICAgICBTaW1wbGVIb2xpZGF5Lk5FV19ZRUFSU19FVkUsCisKKyAgICAgICAgLy8gRWFzdGVyIGFuZCByZWxhdGVkIGhvbGlkYXlzCisgICAgICAgIEVhc3RlckhvbGlkYXkuTUFVTkRZX1RIVVJTREFZLAorICAgICAgICBFYXN0ZXJIb2xpZGF5LkdPT0RfRlJJREFZLAorICAgICAgICBFYXN0ZXJIb2xpZGF5LkVBU1RFUl9TVU5EQVksCisgICAgICAgIEVhc3RlckhvbGlkYXkuRUFTVEVSX01PTkRBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5BU0NFTlNJT04sCisgICAgICAgIEVhc3RlckhvbGlkYXkuV0hJVF9NT05EQVksCisgICAgfTsKKworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICAgImhvbGlkYXlzIiwgICAgICAgICAgICAgZkhvbGlkYXlzIH0sCisgICAgfTsKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7IHJldHVybiBmQ29udGVudHM7IH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzNThjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGUuamF2YQpAQCAtMCwwICsxLDczIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGUuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0NCAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIEhvbGlkYXlCdW5kbGVfZGUgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICAgIkFsbCBTYWludHMnIERheSIsICAgICAgICAgICAgICAiQWxsZXJoZWlsaWdlbiIgfSwKKyAgICAgICAgeyAgICJBbGwgU291bHMnIERheSIsICAgICAgICAgICAgICAgIkFsbGVyc2VlbGVuIiB9LAorICAgICAgICB7ICAgIkFybWlzdGljZSBEYXkiLCAgICAgICAgICAgICAgICAiV2FmZmVuc3RpbGxzdGFuZHN0YWciIH0sCisgICAgICAgIHsgICAiQXNjZW5zaW9uIiwgICAgICAgICAgICAgICAgICAgICJDaHJpc3RpIEhpbW1lbGZhaHJ0IiB9LAorICAgICAgICB7ICAgIkFzaCBXZWRuZXNkYXkiLCAgICAgICAgICAgICAgICAiQXNjaGVybWl0dHdvY2giIH0sCisgICAgICAgIHsgICAiQXNzdW1wdGlvbiIsICAgICAgICAgICAgICAgICAgICJNYXJpXHUwMGU0IEhpbW1lbGZhaHJ0IiB9LAorICAgICAgICB7ICAgIkJveGluZyBEYXkiLCAgICAgICAgICAgICAgICAgICAiMi4gV2VpaG5hY2h0c3RhZyIgfSwKKyAgICAgICAgeyAgICJDYXJuaXZhbCIsICAgICAgICAgICAgICAgICAgICAgIkthcm5ldmFsIiB9LAorICAgICAgICB7ICAgIkNocmlzdG1hcyIsICAgICAgICAgICAgICAgICAgICAiV2VpaG5hY2h0c3RhZyIgfSwKKyAgICAgICAgeyAgICJDaXZpYyBIb2xpZGF5IiwgICAgICAgICAgICAgICAgIkJcdTAwZmNyZ2VyZmVpZXJ0YWciIH0sCisgICAgICAgIHsgICAiQ29uc3RpdHV0aW9uIERheSIsICAgICAgICAgICAgICJWZXJmYXNzdW5nc3RhZyIgfSwKKyAgICAgICAgeyAgICJDb3JwdXMgQ2hyaXN0aSIsICAgICAgICAgICAgICAgIkZyb25sZWljaG5hbSIgfSwKKyAgICAgICAgeyAgICJEYXkgb2YgUHJheWVyIGFuZCBSZXBlbnRhbmNlIiwgIkJ1XHUwMGRmLSB1bmQgQmV0dGFnIiB9LAorICAgICAgICB7ICAgIkVhc3RlciBNb25kYXkiLCAgICAgICAgICAgICAgICAiT3N0ZXJtb25udGFnIiB9LAorICAgICAgICB7ICAgIkVhc3RlciBTdW5kYXkiLCAgICAgICAgICAgICAgICAiT3N0ZXJzb25udGFnIiB9LAorICAgICAgICB7ICAgIkVwaXBoYW55IiwgICAgICAgICAgICAgICAgICAgICAiSGVpbGlnZSAzIEtcdTAwZjZuaWdlIiB9LAorICAgICAgICB7ICAgIkZhdGhlcidzIERheSIsICAgICAgICAgICAgICAgICAiVmF0ZXJ0YWciIH0sCisgICAgICAgIHsgICAiRmxhZyBEYXkiLCAgICAgICAgICAgICAgICAgICAgICJKYWhyZXN0YWcgZGVyIE5hdGlvbmFsZmxhZ2dlIiB9LAorICAgICAgICB7ICAgIkdlcm1hbiBVbml0eSBEYXkiLCAgICAgICAgICAgICAiVGFnIGRlciBkZXV0c2NoZW4gRWluaGVpdCIgfSwKKyAgICAgICAgeyAgICJHb29kIEZyaWRheSIsICAgICAgICAgICAgICAgICAgIkthcmZyZWl0YWciIH0sCisgICAgICAgIHsgICAiSGFsbG93ZWVuIiwgICAgICAgICAgICAgICAgICAgICJBYmVuZCB2b3IgQWxsZXJoZWlsaWdlbiIgfSwKKyAgICAgICAgeyAgICJJbW1hY3VsYXRlIENvbmNlcHRpb24iLCAgICAgICAgIk1hcmlcdTAwZTQgRW1wZlx1MDBlNG5nbmlzIiB9LAorICAgICAgICB7ICAgIkluZGVwZW5kZW5jZSBEYXkiLCAgICAgICAgICAgICAiVW5hYmhcdTAwZTRuZ2lna2VpdHN0YWciIH0sCisgICAgICAgIHsgICAiTGFib3IgRGF5IiwgICAgICAgICAgICAgICAgICAgICJUYWcgZGVyIEFyYmVpdCIgfSwKKyAgICAgICAgeyAgICJMaWJlcmF0aW9uIERheSIsICAgICAgICAgICAgICAgIkJlZnJlaXVuZ3N0YWciIH0sCisgICAgICAgIHsgICAiTWFyZGkgR3JhcyIsICAgICAgICAgICAgICAgICAgICJGYXNjaGluZ3NkaWVuc3RhZyIgfSwKKyAgICAgICAgeyAgICJNYXVuZHkgVGh1cnNkYXkiLCAgICAgICAgICAgICAgIkdyXHUwMGZjbmRvbm5lcnN0YWciIH0sCisgICAgICAgIHsgICAiTWF5IERheSIsICAgICAgICAgICAgICAgICAgICAgICJNYWlmZWllcnRhZyIgfSwKKyAgICAgICAgeyAgICJNZW1vcmlhbCBEYXkiLCAgICAgICAgICAgICAgICAgIlRhZyBkZXMgR2VkZW5rZW5zIiB9LAorICAgICAgICB7ICAgIk1vdGhlcidzIERheSIsICAgICAgICAgICAgICAgICAiTXV0dGVydGFnIiB9LAorICAgICAgICB7ICAgIk5hdGlvbmFsIEhvbGlkYXkiLCAgICAgICAgICAgICAiTmF0aW9uYWxmZWllcnRhZyIgfSwKKyAgICAgICAgeyAgICJOZXcgWWVhcidzIERheSIsICAgICAgICAgICAgICAgIk5ldWphaHIiIH0sCisgICAgICAgIHsgICAiTmV3IFllYXIncyBFdmUiLCAgICAgICAgICAgICAgICJTaWx2ZXN0ZXJhYmVuZCIgfSwKKyAgICAgICAgeyAgICJQYWxtIFN1bmRheSIsICAgICAgICAgICAgICAgICAgIlBhbG1zb25udGFnIiB9LAorICAgICAgICB7ICAgIlBlbnRlY29zdCIsICAgICAgICAgICAgICAgICAgICAiUGZpbmdzdGVuIiB9LAorICAgICAgICB7ICAgIlByZXNpZGVudHMnIERheSIsICAgICAgICAgICAgICAiUHJcdTAwZTRzaWRlbnRzdGFnIiB9LAorICAgICAgICB7ICAgIlJlbWVtYnJhbmNlIERheSIsICAgICAgICAgICAgICAiVm9sa3N0cmF1ZXJ0YWciIH0sCisgICAgICAgIHsgICAiUmV2b2x1dGlvbiBEYXkiLCAgICAgICAgICAgICAgICJKYWhyZXN0YWcgZGVyIFJldm9sdXRpb24iIH0sCisgICAgICAgIHsgICAiUm9zZSBNb25kYXkiLCAgICAgICAgICAgICAgICAgICJSb3Nlbm1vbnRhZyIgfSwKKyAgICAgICAgeyAgICJTdC4gU3RlcGhlbidzIERheSIsICAgICAgICAgICAgIlN0ZXBoYW5pdGFnIiB9LAorICAgICAgICB7ICAgIlNocm92ZSBUdWVzZGF5IiwgICAgICAgICAgICAgICAiRmFzY2hpbmdzZGllbnN0YWciIH0sCisgICAgICAgIHsgICAiU3ByaW5nIEhvbGlkYXkiLCAgICAgICAgICAgICAgICJUYWcgZGVzIEZyXHUwMGZjaGxpbmdzIiB9LAorICAgICAgICB7ICAgIlN1bW1lciBCYW5rIEhvbGlkYXkiLCAgICAgICAgICAiQmFua2ZlaWVydGFnIiB9LAorICAgICAgICB7ICAgIlRoYW5rc2dpdmluZyIsICAgICAgICAgICAgICAgICAiRGFua2Zlc3QiIH0sCisgICAgICAgIHsgICAiVW5pdHkgRGF5IiwgICAgICAgICAgICAgICAgICAgICJFaW5oZWl0c3RhZyIgfSwKKyAgICAgICAgeyAgICJWZXRlcmFucycgRGF5IiwgICAgICAgICAgICAgICAgIlZldGVyYW5zdGFnIiB9LAorICAgICAgICB7ICAgIlZpY3RvcnkgRGF5IiwgICAgICAgICAgICAgICAgICAiVGFnIGRlciBCZWZyZWl1bmciIH0sCisgICAgICAgIHsgICAiV2FzaGluZ3RvbidzIEJpcnRoZGF5IiwgICAgICAgICJXYXNoaW5ndG9ucyBHZWJ1cnRzdGFnIiB9LAorICAgICAgICB7ICAgIldoaXQgTW9uZGF5IiwgICAgICAgICAgICAgICAgICAiUGZpbmdzdG1vbnRhZyIgfSwKKyAgICAgICAgeyAgICJXaGl0IFN1bmRheSIsICAgICAgICAgICAgICAgICAgIlBmaW5nc3Rzb25udGFnIiB9LAorICAgIH07CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7IHJldHVybiBmQ29udGVudHM7IH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGVfQVQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9kZV9BVC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjZjYzNzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGVfQVQuamF2YQpAQCAtMCwwICsxLDQ5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGVfQVQuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0NSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCitwdWJsaWMgY2xhc3MgSG9saWRheUJ1bmRsZV9kZV9BVCBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgSG9saWRheVtdIGZIb2xpZGF5cyA9IHsKKyAgICAgICAgU2ltcGxlSG9saWRheS5ORVdfWUVBUlNfREFZLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkVQSVBIQU5ZLAorICAgICAgICBFYXN0ZXJIb2xpZGF5LkdPT0RfRlJJREFZLAorICAgICAgICBFYXN0ZXJIb2xpZGF5LkVBU1RFUl9TVU5EQVksCisgICAgICAgIEVhc3RlckhvbGlkYXkuRUFTVEVSX01PTkRBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5BU0NFTlNJT04sCisgICAgICAgIEVhc3RlckhvbGlkYXkuV0hJVF9TVU5EQVksCisgICAgICAgIEVhc3RlckhvbGlkYXkuV0hJVF9NT05EQVksCisgICAgICAgIEVhc3RlckhvbGlkYXkuQ09SUFVTX0NIUklTVEksCisgICAgICAgIFNpbXBsZUhvbGlkYXkuQVNTVU1QVElPTiwKKyAgICAgICAgU2ltcGxlSG9saWRheS5BTExfU0FJTlRTX0RBWSwKKyAgICAgICAgU2ltcGxlSG9saWRheS5JTU1BQ1VMQVRFX0NPTkNFUFRJT04sCisgICAgICAgIFNpbXBsZUhvbGlkYXkuQ0hSSVNUTUFTLAorICAgICAgICBTaW1wbGVIb2xpZGF5LlNUX1NURVBIRU5TX0RBWSwKKworICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5NQVksICAgICAgICAxLCAgMCwgICAgICAgICAgICAgICAiTmF0aW9uYWwgSG9saWRheSIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5PQ1RPQkVSLCAgIDMxLCAtQ2FsZW5kYXIuTU9OREFZLCAiTmF0aW9uYWwgSG9saWRheSIpLAorICAgIH07CisKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiaG9saWRheXMiLCAgIGZIb2xpZGF5cyB9LAorCisgICAgICAgIC8vIE9ubHkgaG9saWRheXMgbmFtZXMgZGlmZmVyZW50IGZyb20gdGhvc2UgdXNlZCBpbiBHZXJtYW55IGFyZSBsaXN0ZWQgaGVyZQorICAgICAgICB7ICAgIkNocmlzdG1hcyIsICAgICAgICAiQ2hyaXN0dGFnIiB9LAorICAgICAgICB7ICAgIk5ldyBZZWFyJ3MgRGF5IiwgICAiTmV1amFocnN0YWciIH0sCisgICAgfTsKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7IHJldHVybiBmQ29udGVudHM7IH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGVfREUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9kZV9ERS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3ODQ5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGVfREUuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZGVfREUuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0NSAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCitwdWJsaWMgY2xhc3MgSG9saWRheUJ1bmRsZV9kZV9ERSBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgSG9saWRheVtdIGZIb2xpZGF5cyA9IHsKKyAgICAgICAgU2ltcGxlSG9saWRheS5ORVdfWUVBUlNfREFZLAorICAgICAgICBTaW1wbGVIb2xpZGF5Lk1BWV9EQVksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkpVTkUsICAgICAgMTUsICBDYWxlbmRhci5XRURORVNEQVksICAiTWVtb3JpYWwgRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk9DVE9CRVIsICAgIDMsICAwLCAgICAgICAgICAgICAgICAgICAiVW5pdHkgRGF5IiksCisgICAgICAgIFNpbXBsZUhvbGlkYXkuQUxMX1NBSU5UU19EQVksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk5PVkVNQkVSLCAgMTgsICAwLCAgICAgICAgICAgICAgICAgICAiRGF5IG9mIFByYXllciBhbmQgUmVwZW50YW5jZSIpLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkNIUklTVE1BUywKKyAgICAgICAgU2ltcGxlSG9saWRheS5CT1hJTkdfREFZLAorCisgICAgICAgIC8vIEVhc3RlciBhbmQgcmVsYXRlZCBob2xpZGF5cworICAgICAgICBFYXN0ZXJIb2xpZGF5LkdPT0RfRlJJREFZLAorICAgICAgICBFYXN0ZXJIb2xpZGF5LkVBU1RFUl9TVU5EQVksCisgICAgICAgIEVhc3RlckhvbGlkYXkuRUFTVEVSX01PTkRBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5BU0NFTlNJT04sCisgICAgICAgIEVhc3RlckhvbGlkYXkuV0hJVF9TVU5EQVksCisgICAgICAgIEVhc3RlckhvbGlkYXkuV0hJVF9NT05EQVksCisgICAgfTsKKworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICJob2xpZGF5cyIsICAgZkhvbGlkYXlzIH0sCisgICAgfTsKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7IHJldHVybiBmQ29udGVudHM7IH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZWwuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiYzU2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZWwuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZWwuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0NSAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCitwdWJsaWMgY2xhc3MgSG9saWRheUJ1bmRsZV9lbCBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPQorICAgIHsKKyAgICAgICAgeyAgICJBc3N1bXB0aW9uIiwgICAgICAgICAgICIxNSBcdTAzOTFcdTAzY2RcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYzNcdTAzYzRcdTAzYmZcdTAzYzUiIH0sCisgICAgICAgIHsgICAiQm94aW5nIERheSIsICAgICAgICAgICAiXHUwMzk0XHUwM2I1XHUwM2NkXHUwM2M0XHUwM2I1XHUwM2MxXHUwM2I3IFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiMSBcdTAzYzRcdTAzY2VcdTAzYmQgXHUwM2E3XHUwM2MxXHUwM2I5XHUwM2MzXHUwM2M0XHUwM2JmXHUwM2M1XHUwM2IzXHUwM2FkXHUwM2JkXHUwM2JkXHUwM2M5XHUwM2JkIiB9LAorICAgICAgICB7ICAgIkNocmlzdG1hcyIsICAgICAgICAgICAgIlx1MDNhN1x1MDNjMVx1MDNiOVx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjZFx1MDNiM1x1MDNiNVx1MDNiZFx1MDNiZFx1MDNiMSIgfSwKKyAgICAgICAgeyAgICJDbGVhbiBNb25kYXkiLCAgICAgICAgICJcdTAzOWFcdTAzYjFcdTAzYjhcdTAzYjFcdTAzYzFcdTAzYWUgXHUwMzk0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2FkXHUwM2MxXHUwM2IxIiB9LAorICAgICAgICB7ICAgIkVhc3RlciBNb25kYXkiLCAgICAgICAgIlx1MDM5NFx1MDNiNVx1MDNjZFx1MDNjNFx1MDNiNVx1MDNjMVx1MDNiNyBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjEgXHUwM2M0XHUwM2JmXHUwM2NkIFx1MDNhMFx1MDNhY1x1MDNjM1x1MDNjN1x1MDNiMSIgfSwKKyAgICAgICAgeyAgICJFcGlwaGFueSIsICAgICAgICAgICAgICJcdTAzODhcdTAzYzBcdTAzYjlcdTAzYzZcdTAzYWNcdTAzYmRcdTAzYjVcdTAzYjlcdTAzYjEiIH0sCisgICAgICAgIHsgICAiR29vZCBGcmlkYXkiLCAgICAgICAgICAiXHUwMzljXHUwM2I1XHUwM2IzXHUwM2FjXHUwM2JiXHUwM2I3IFx1MDNhMFx1MDNiMVx1MDNjMVx1MDNiMVx1MDNjM1x1MDNiYVx1MDNiNVx1MDNjNVx1MDNhZSIgfSwKKyAgICAgICAgeyAgICJNYXkgRGF5IiwgICAgICAgICAgICAgICJcdTAzYTBcdTAzYzFcdTAzYzlcdTAzYzRcdTAzYmZcdTAzYmNcdTAzYjFcdTAzYjNcdTAzYjlcdTAzYWMiIH0sCisgICAgICAgIHsgICAiTmV3IFllYXIncyBEYXkiLCAgICAgICAiXHUwM2EwXHUwM2MxXHUwM2M5XHUwM2M0XHUwM2JmXHUwM2M3XHUwM2MxXHUwM2JmXHUwM2JkXHUwM2I5XHUwM2FjIiB9LAorICAgICAgICB7ICAgIk9jaGkgRGF5IiwgICAgICAgICAgICAgIjI4IFx1MDM4Y1x1MDNiYVx1MDNjNFx1MDNjOVx1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIgfSwKKyAgICAgICAgeyAgICJXaGl0IE1vbmRheSIsICAgICAgICAgICJcdTAzOTRcdTAzYjVcdTAzY2RcdTAzYzRcdTAzYjVcdTAzYzFcdTAzYjcgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2IxIFx1MDNjNFx1MDNiZlx1MDNjZCBcdTAzYTBcdTAzYjVcdTAzYmRcdTAzYzRcdTAzYjdcdTAzYmFcdTAzYmZcdTAzYzNcdTAzYzRcdTAzYWUiIH0sCisKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbF9HUi5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VsX0dSLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWFhYzgzYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbF9HUi5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbF9HUi5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ1ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2VsX0dSIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBIb2xpZGF5W10gZkhvbGlkYXlzID0geworICAgICAgICBTaW1wbGVIb2xpZGF5Lk5FV19ZRUFSU19EQVksCisgICAgICAgIFNpbXBsZUhvbGlkYXkuRVBJUEhBTlksCisKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuTUFSQ0gsICAgICAyNSwgIDAsICAgICJJbmRlcGVuZGVuY2UgRGF5IiksCisKKyAgICAgICAgU2ltcGxlSG9saWRheS5NQVlfREFZLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkFTU1VNUFRJT04sCisKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuT0NUT0JFUiwgICAyOCwgIDAsICAgICJPY2hpIERheSIpLAorCisgICAgICAgIFNpbXBsZUhvbGlkYXkuQ0hSSVNUTUFTLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkJPWElOR19EQVksCisKKyAgICAgICAgLy8gRWFzdGVyIGFuZCByZWxhdGVkIGhvbGlkYXlzIGluIHRoZSBPcnRob2RveCBjYWxlbmRhcgorICAgICAgICBuZXcgRWFzdGVySG9saWRheSgtMiwgICB0cnVlLCAiR29vZCBGcmlkYXkiKSwKKyAgICAgICAgbmV3IEVhc3RlckhvbGlkYXkoIDAsICAgdHJ1ZSwgIkVhc3RlciBTdW5kYXkiKSwKKyAgICAgICAgbmV3IEVhc3RlckhvbGlkYXkoIDEsICAgdHJ1ZSwgIkVhc3RlciBNb25kYXkiKSwKKyAgICAgICAgbmV3IEVhc3RlckhvbGlkYXkoNTAsICAgdHJ1ZSwgIldoaXQgTW9uZGF5IiksCisgICAgfTsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAgICJob2xpZGF5cyIsICAgICAgICAgZkhvbGlkYXlzICAgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbi5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzJmNDVjMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbi5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbi5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ1ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIEhvbGlkYXlCdW5kbGVfZW4gZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworCisgICAgLy8gTm9ybWFsbHksIGVhY2ggSG9saWRheUJ1bmRsZSB1c2VzIHRoZSBob2xpZGF5J3MgVVMgRW5nbGlzaCBuYW1lCisgICAgLy8gYXMgdGhlIHN0cmluZyBrZXkgZm9yIGxvb2tpbmcgdXAgdGhlIGxvY2FsaXplZCBuYW1lLiAgVGhpcyBtZWFucworICAgIC8vIHRoYXQgdGhlIGtleSBpdHNlbGYgY2FuIGJlIHVzZWQgaWYgbm8gbmFtZSBpcyBmb3VuZCBmb3IgdGhlIHJlcXVlc3RlZAorICAgIC8vIGxvY2FsZS4KKyAgICAvLworICAgIC8vIEZvciBob2xpZGF5cyB3aGVyZSB0aGUga2V5IGlzIF9ub3RfIHRoZSBFbmdsaXNoIG5hbWUsIGUuZy4gaW4gdGhlCisgICAgLy8gY2FzZSBvZiBjb25mbGljdHMsIHRoZSBFbmdsaXNoIG5hbWUgbXVzdCBiZSBnaXZlbiBoZXJlLgorICAgIC8vCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgICAiIiwgIiIgIH0sICAgICAgLy8gQ2FuJ3QgYmUgZW1wdHkhCisgICAgfTsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfTsKKworfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9DQS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VuX0NBLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc0OGM4MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9DQS5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9DQS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ2ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2VuX0NBIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBIb2xpZGF5W10gZkhvbGlkYXlzID0geworICAgICAgICBTaW1wbGVIb2xpZGF5Lk5FV19ZRUFSU19EQVksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk1BWSwgICAgICAgMTksIDAsICAgICAgICAgICAgICAgICAgIlZpY3RvcmlhIERheSIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5KVUxZLCAgICAgICAxLCAwLCAgICAgICAgICAgICAgICAgICJDYW5hZGEgRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkFVR1VTVCwgICAgIDEsIENhbGVuZGFyLk1PTkRBWSwgICAgIkNpdmljIEhvbGlkYXkiKSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuU0VQVEVNQkVSLCAgMSwgQ2FsZW5kYXIuTU9OREFZLCAgICAiTGFib3IgRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk9DVE9CRVIsICAgIDgsIENhbGVuZGFyLk1PTkRBWSwgICAgIlRoYW5rc2dpdmluZyIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5OT1ZFTUJFUiwgIDExLCAwLCAgICAgICAgICAgICAgICAgICJSZW1lbWJyYW5jZSBEYXkiKSwKKyAgICAgICAgU2ltcGxlSG9saWRheS5DSFJJU1RNQVMsCisgICAgICAgIFNpbXBsZUhvbGlkYXkuQk9YSU5HX0RBWSwKKyAgICAgICAgU2ltcGxlSG9saWRheS5ORVdfWUVBUlNfRVZFLAorCisgICAgICAgIC8vIEVhc3RlciBhbmQgcmVsYXRlZCBob2xpZGF5cworICAgICAgICAvL2hleSB7amZ9IC0gd2hlcmUgYXJlIHRoZXNlIGZyb20/CisvLyAgICAgICAgRWFzdGVySG9saWRheS5HT09EX0ZSSURBWSwKKy8vICAgICAgICBFYXN0ZXJIb2xpZGF5LkVBU1RFUl9TVU5EQVksCisvLyAgICAgICAgRWFzdGVySG9saWRheS5FQVNURVJfTU9OREFZLAorICAgIH07CisKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiaG9saWRheXMiLCAgIGZIb2xpZGF5cyB9LAorCisgICAgICAgIHsgIkxhYm9yIERheSIsICAiTGFib3VyIERheSIgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9HQi5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VuX0dCLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjlkYmU3YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9HQi5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9HQi5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ2ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2VuX0dCIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlCit7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgSG9saWRheVtdIGZIb2xpZGF5cyA9IHsKKyAgICAgICAgU2ltcGxlSG9saWRheS5ORVdfWUVBUlNfREFZLAorICAgICAgICBTaW1wbGVIb2xpZGF5Lk1BWV9EQVksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk1BWSwgICAgICAgIDMxLCAtQ2FsZW5kYXIuTU9OREFZLCAgICAiU3ByaW5nIEhvbGlkYXkiKSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuQVVHVVNULCAgICAgMzEsIC1DYWxlbmRhci5NT05EQVksICAgICJTdW1tZXIgQmFuayBIb2xpZGF5IiksCisgICAgICAgIFNpbXBsZUhvbGlkYXkuQ0hSSVNUTUFTLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkJPWElOR19EQVksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkRFQ0VNQkVSLCAgIDMxLCAtQ2FsZW5kYXIuTU9OREFZLCAgICAiQ2hyaXN0bWFzIEhvbGlkYXkiKSwKKworICAgICAgICAvLyBFYXN0ZXIgYW5kIHJlbGF0ZWQgaG9saWRheXMKKyAgICAgICAgRWFzdGVySG9saWRheS5HT09EX0ZSSURBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5FQVNURVJfU1VOREFZLAorICAgICAgICBFYXN0ZXJIb2xpZGF5LkVBU1RFUl9NT05EQVksCisgICAgfTsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiaG9saWRheXMiLCAgIGZIb2xpZGF5cyB9LAorCisgICAgICAgIHsgIkxhYm9yIERheSIsICAiTGFib3VyIERheSIgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9VUy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VuX1VTLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGVkYzE4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9VUy5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lbl9VUy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ2ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2VuX1VTIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlCit7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgSG9saWRheVtdIGZIb2xpZGF5cyA9IHsKKyAgICAgICAgU2ltcGxlSG9saWRheS5ORVdfWUVBUlNfREFZLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5KQU5VQVJZLCAgIDE1LCBDYWxlbmRhci5NT05EQVksICAgICAgIk1hcnRpbiBMdXRoZXIgS2luZyBEYXkiLCAgIDE5ODYpLAorCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkZFQlJVQVJZLCAgMTUsIENhbGVuZGFyLk1PTkRBWSwgICAgICAiUHJlc2lkZW50cycgRGF5IiwgICAgICAgICAgMTk3NiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkZFQlJVQVJZLCAgMjIsICAgICAgICAgICAgICAgICAgICAgICAiV2FzaGluZ3RvbidzIEJpcnRoZGF5IiwgICAgMTc3NiwgMTk3NSksCisKKyAgICAgICAgRWFzdGVySG9saWRheS5HT09EX0ZSSURBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5FQVNURVJfU1VOREFZLAorCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk1BWSwgICAgICAgIDgsIENhbGVuZGFyLlNVTkRBWSwgICAgICAiTW90aGVyJ3MgRGF5IiwgICAgICAgICAgICAgMTkxNCksCisKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuTUFZLCAgICAgICAzMSwgLUNhbGVuZGFyLk1PTkRBWSwgICAgICJNZW1vcmlhbCBEYXkiLCAgICAgICAgICAgICAxOTcxKSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuTUFZLCAgICAgICAzMCwgICAgICAgICAgICAgICAgICAgICAgICJNZW1vcmlhbCBEYXkiLCAgICAgICAgICAgICAxODY4LCAxOTcwKSwKKworICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5KVU5FLCAgICAgIDE1LCBDYWxlbmRhci5TVU5EQVksICAgICAgIkZhdGhlcidzIERheSIsICAgICAgICAgICAgIDE5NTYpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5KVUxZLCAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgIkluZGVwZW5kZW5jZSBEYXkiLCAgICAgICAgIDE3NzYpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5TRVBURU1CRVIsICAxLCBDYWxlbmRhci5NT05EQVksICAgICAgIkxhYm9yIERheSIsICAgICAgICAgICAgICAgIDE4OTQpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5OT1ZFTUJFUiwgICAyLCBDYWxlbmRhci5UVUVTREFZLCAgICAgIkVsZWN0aW9uIERheSIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5PQ1RPQkVSLCAgICA4LCBDYWxlbmRhci5NT05EQVksICAgICAgIkNvbHVtYnVzIERheSIsICAgICAgICAgICAgIDE5NzEpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5PQ1RPQkVSICwgIDMxLCAgICAgICAgICAgICAgICAgICAgICAgIkhhbGxvd2VlbiIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5OT1ZFTUJFUiwgIDExLCAgICAgICAgICAgICAgICAgICAgICAgIlZldGVyYW5zJyBEYXkiLCAgICAgICAgICAgIDE5MTgpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5OT1ZFTUJFUiwgIDIyLCBDYWxlbmRhci5USFVSU0RBWSwgICAgIlRoYW5rc2dpdmluZyIsICAgICAgICAgICAgIDE4NjMpLAorCisgICAgICAgIFNpbXBsZUhvbGlkYXkuQ0hSSVNUTUFTLAorICAgIH07CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgImhvbGlkYXlzIiwgICBmSG9saWRheXMgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lcy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjc3NDE4MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lcy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9lcy5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ2ICQgCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIEhvbGlkYXlCdW5kbGVfZXMgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICAgIkFsbCBTYWludHMnIERheSIsICAgICAgICAgICJUb2RvcyBsb3MgU2FudG9zIiB9LAorICAgICAgICB7ICAgIkFybWlzdGljZSBEYXkiLCAgICAgICAgICAgICJEXHUwMGVkYSBkZWwgQXJtaXN0aWNpbyIgfSwKKyAgICAgICAgeyAgICJBc2NlbnNpb24iLCAgICAgICAgICAgICAgICAiQXNjZW5zaVx1MDBmM24iIH0sCisgICAgICAgIHsgICAiQmVuaXRvIEp1XHUwMGUxcmV6IERheSIsICAgICAgICAiRFx1MDBlZGEgZGUgbGEgQmVuaXRvIEp1XHUwMGUxcmV6IiB9LAorICAgICAgICB7ICAgIkJveGluZyBEYXkiLCAgICAgICAgICAgICAgICJEXHUwMGVkYSBlbiBxdWUgc2UgZGFuIEFndWluYWxkb3MgTmF2aWRlXHUwMGYxb3MiIH0sCisgICAgICAgIHsgICAiQ2FuYWRhIERheSIsICAgICAgICAgICAgICAgIkRcdTAwZWRhIGRlbCBDYW5hZFx1MDBlMSIgfSwKKyAgICAgICAgeyAgICJDaHJpc3RtYXMgRXZlIiwgICAgICAgICAgICAiVlx1MDBFRHNwZXJhIGRlIE5hdmlkYWQiIH0sCisgICAgICAgIHsgICAiQ2hyaXN0bWFzIiwgICAgICAgICAgICAgICAgIk5hdmlkYWQiIH0sCisgICAgICAgIHsgICAiQ29uc3RpdHV0aW9uIERheSIsICAgICAgICAgIkRcdTAwZWRhIGRlIGxhIENvbnN0aXR1Y2lcdTAwZjNuIiB9LAorICAgICAgICB7ICAgIkRheSBvZiB0aGUgRGVhZCIsICAgICAgICAgICJEXHUwMGVkYSBkZSBsb3MgTXVlcnRvcyIgfSwKKyAgICAgICAgeyAgICJFYXN0ZXIgU3VuZGF5IiwgICAgICAgICAgICAiUGFzY3VhIiB9LAorICAgICAgICB7ICAgIkVhc3RlciBNb25kYXkiLCAgICAgICAgICAgICJQYXNjdWEgTHVuZXMiIH0sCisgICAgICAgIHsgICAiRXBpcGhhbnkiLCAgICAgICAgICAgICAgICAgIkVwaWZhblx1MDBlZGEiIH0sCisgICAgICAgIHsgICAiRmF0aGVyJ3MgRGF5IiwgICAgICAgICAgICAgIkRcdTAwZWRhIGRlbCBQYWRyZSIgfSwKKyAgICAgICAgeyAgICJGbGFnIERheSIsICAgICAgICAgICAgICAgICAiRFx1MDBlZGEgZGUgbGEgQmFuZGVyYSIgfSwKKyAgICAgICAgeyAgICJHb29kIEZyaWRheSIsICAgICAgICAgICAgICAiVmllcm5lcyBTYW50byIgfSwKKyAgICAgICAgeyAgICJIYWxsb3dlZW4iLCAgICAgICAgICAgICAgICAidlx1MDBlZHNwZXJhIGRlIFRvZG9zIGxvcyBTYW50b3MiIH0sCisgICAgICAgIHsgICAiSW5kZXBlbmRlbmNlIERheSIsICAgICAgICAgIkRcdTAwZWRhIGRlIGxhIEluZGVwZW5kZW5jaWEiIH0sCisgICAgICAgIHsgICAiTGFib3IgRGF5IiwgICAgICAgICAgICAgICAgIkRcdTAwZWRhIGRlIFRyYWJhamFkb3JlcyIgfSwKKyAgICAgICAgeyAgICJNYXVuZHkgVGh1cnNkYXkiLCAgICAgICAgICAiSnVldmVzIFNhbnRvIiB9LAorICAgICAgICB7ICAgIk1heSBEYXkiLCAgICAgICAgICAgICAgICAgICJQcmltZXJvIGRlIE1heW8iIH0sCisgICAgICAgIHsgICAiTWVtb3JpYWwgRGF5IiwgICAgICAgICAgICAgIkRcdTAwZWRhIGRlIGxhIFJlbWVtb3JhY2lcdTAwZjNuIiB9LAorICAgICAgICB7ICAgIk1vdGhlcidzIERheSIsICAgICAgICAgICAgICJEXHUwMGVkYSBkZSBsYSBNYWRyZSIgfSwKKyAgICAgICAgeyAgICJOZXcgWWVhcidzIERheSIsICAgICAgICAgICAiQVx1MDBmMW8gTnVldm8iIH0sCisgICAgICAgIHsgICAiUGFsbSBTdW5kYXkiLCAgICAgICAgICAgICAgIkRvbWluZ28gZGUgUmFtb3MiIH0sCisgICAgICAgIHsgICAiUGVudGVjb3N0IiwgICAgICAgICAgICAgICAgIlBlbnRlY29zdFx1MDBlOXMiIH0sCisgICAgICAgIHsgICAiUHJlc2lkZW50cycgRGF5IiwgICAgICAgICAgIkRcdTAwZWRhIGRlIFByZXNpZGVudGVzIiB9LAorICAgICAgICB7ICAgIlJldm9sdXRpb24gRGF5IiwgICAgICAgICAgICJEXHUwMGVkYSBkZSBsYSBSZXZvbHVjaVx1MDBmM24iIH0sCisgICAgICAgIHsgICAiU2hyb3ZlIFR1ZXNkYXkiLCAgICAgICAgICAgIk1hcnRlcyBkZSBDYXJuYXZhbCIgfSwKKyAgICAgICAgeyAgICJUaGFua3NnaXZpbmciLCAgICAgICAgICAgICAiRFx1MDBlZGEgZGUgQWNjaVx1MDBmM24gZGUgR3JhY2lhcyIgfSwKKyAgICAgICAgeyAgICJWZXRlcmFucycgRGF5IiwgICAgICAgICAgICAiRFx1MDBlZGEgZGUgVmV0ZXJhbm9zIiB9LAorICAgICAgICB7ICAgIlZpY3RvcmlhIERheSIsICAgICAgICAgICAgICJEXHUwMGVkYSBkZSBWaWN0b3JpYSIgfSwKKyAgICAgICAgeyAgICJXaGl0IFN1bmRheSIsICAgICAgICAgICAgICAiUGVudGVjb3N0XHUwMGU5cyIgfSwKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeyByZXR1cm4gZkNvbnRlbnRzOyB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VzX01YLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfZXNfTVguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDgyYjhkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VzX01YLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2VzX01YLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDYgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIEhvbGlkYXlCdW5kbGVfZXNfTVggZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIEhvbGlkYXlbXSBmSG9saWRheXMgPSB7CisgICAgICAgIFNpbXBsZUhvbGlkYXkuTkVXX1lFQVJTX0RBWSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuRkVCUlVBUlksICAgNSwgIDAsICAgICJDb25zdGl0dXRpb24gRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk1BUkNILCAgICAgMjEsICAwLCAgICAiQmVuaXRvIEp1XHUwMEUxcmV6IERheSIpLAorICAgICAgICBTaW1wbGVIb2xpZGF5Lk1BWV9EQVksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk1BWSwgICAgICAgIDUsICAwLCAgICAiQ2luY28gZGUgTWF5byIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5KVU5FLCAgICAgICAxLCAgMCwgICAgIk5hdnkgRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLlNFUFRFTUJFUiwgMTYsICAwLCAgICAiSW5kZXBlbmRlbmNlIERheSIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5PQ1RPQkVSLCAgIDEyLCAgMCwgICAgIkRcdTAwRURhIGRlIGxhIFJhemEiKSwKKyAgICAgICAgU2ltcGxlSG9saWRheS5BTExfU0FJTlRTX0RBWSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuTk9WRU1CRVIsICAgMiwgIDAsICAgICJEYXkgb2YgdGhlIERlYWQiKSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuTk9WRU1CRVIsICAyMCwgIDAsICAgICJSZXZvbHV0aW9uIERheSIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5ERUNFTUJFUiwgIDEyLCAgMCwgICAgIkZsYWcgRGF5IiksCisgICAgICAgIFNpbXBsZUhvbGlkYXkuQ0hSSVNUTUFTLAorICAgIH07CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgImhvbGlkYXlzIiwgICBmSG9saWRheXMgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2ZyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTZlMTIxOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mci5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ3ICQgCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIEhvbGlkYXlCdW5kbGVfZnIgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICAgIkFsbCBTYWludHMnIERheSIsICAgICAgIlRvdXNzYWludCIgfSwKKyAgICAgICAgeyAgICJBcm1pc3RpY2UgRGF5IiwgICAgICAgICJKb3VyIGRlIGwnQXJtaXN0aWNlIiB9LAorICAgICAgICB7ICAgIkFzY2Vuc2lvbiIsICAgICAgICAgICAgIkFzY2Vuc2lvbiIgfSwKKyAgICAgICAgeyAgICJCYXN0aWxsZSBEYXkiLCAgICAgICAgICJGXHUwMEVBdGUgZGUgbGEgQmFzdGlsbGUiIH0sCisgICAgICAgIHsgICAiQmVuaXRvIEp1XHUwMEUxcmV6IERheSIsICAgICJGXHUwMEVBdGUgZGUgQmVuaXRvIEp1XHUwMEUxcmV6IiB9LAorICAgICAgICB7ICAgIkJveGluZyBEYXkiLCAgICAgICAgICAgIkxlbmRlbWFpbiBkZSBOb1x1MDBFQmwiIH0sCisgICAgICAgIHsgICAiQ2hyaXN0bWFzIEV2ZSIsICAgICAgICAiVmVpbGxlIGRlIE5vXHUwMEVCbCIgfSwKKyAgICAgICAgeyAgICJDaHJpc3RtYXMiLCAgICAgICAgICAgICJOb1x1MDBFQmwiIH0sCisgICAgICAgIHsgICAiRWFzdGVyIE1vbmRheSIsICAgICAgICAiUFx1MDBFMnF1ZXMgbHVuZGkiIH0sCisgICAgICAgIHsgICAiRWFzdGVyIFN1bmRheSIsICAgICAgICAiUFx1MDBFMnF1ZXMiIH0sCisgICAgICAgIHsgICAiRXBpcGhhbnkiLCAgICAgICAgICAgICAibCdcdTAwQzlwaXBoYW5pZSIgfSwKKyAgICAgICAgeyAgICJGbGFnIERheSIsICAgICAgICAgICAgICJGXHUwMEVBdGUgZHUgRHJhcGVhdSIgfSwKKyAgICAgICAgeyAgICJHb29kIEZyaWRheSIsICAgICAgICAgICJWZW5kcmVkaSBTYWludCIgfSwKKyAgICAgICAgeyAgICJIYWxsb3dlZW4iLCAgICAgICAgICAgICJWZWlsbGUgZGUgbGEgVG91c3NhaW50IiB9LAorICAgICAgICB7ICAgIkFsbCBTYWludHMnIERheSIsICAgICAgIlRvdXNzYWludCIgfSwKKyAgICAgICAgeyAgICJJbmRlcGVuZGVuY2UgRGF5IiwgICAgICJGXHUwMEVBdGUgSW5kXHUwMEU5cGVuZGFuY2UiIH0sCisgICAgICAgIHsgICAiTWF1bmR5IFRodXJzZGF5IiwgICAgICAiSmV1ZGkgU2FpbnQiIH0sCisgICAgICAgIHsgICAiTW90aGVyJ3MgRGF5IiwgICAgICAgICAiRlx1MDBFQXRlIGRlcyBtXHUwMEU4cmVzIiB9LAorICAgICAgICB7ICAgIk5hdGlvbmFsIERheSIsICAgICAgICAgIkZcdTAwRUF0ZSBOYXRpb25hbGUiIH0sCisgICAgICAgIHsgICAiTmV3IFllYXIncyBEYXkiLCAgICAgICAiSm91ciBkZSBsJ2FuIiB9LAorICAgICAgICB7ICAgIlBhbG0gU3VuZGF5IiwgICAgICAgICAgImxlcyBSYW1lYXV4IiB9LAorICAgICAgICB7ICAgIlBlbnRlY29zdCIsICAgICAgICAgICAgIlBlbnRlY1x1MDBGNHRlIiB9LAorICAgICAgICB7ICAgIlNocm92ZSBUdWVzZGF5IiwgICAgICAgIk1hcmRpIEdyYXMiIH0sCisgICAgICAgIHsgICAiU3QuIFN0ZXBoZW4ncyBEYXkiLCAgICAiU2FpbnQtXHUwMEM5dGllbm5lIiB9LAorICAgICAgICB7ICAgIlZpY3RvcmlhIERheSIsICAgICAgICAgIkZcdTAwRUF0ZSBkZSBsYSBWaWN0b3JpYSIgfSwKKyAgICAgICAgeyAgICJWaWN0b3J5IERheSIsICAgICAgICAgICJGXHUwMEVBdGUgZGUgbGEgVmljdG9pcmUiIH0sCisgICAgfTsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mcl9DQS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2ZyX0NBLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2MyMGEzMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mcl9DQS5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mcl9DQS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ3ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2ZyX0NBIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBIb2xpZGF5W10gZkhvbGlkYXlzID0geworICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5KQU5VQVJZLCAgICAxLCAgMCwgICAgICAgICAgICAgICAgICAiTmV3IFllYXIncyBEYXkiKSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuTUFZLCAgICAgICAxOSwgIDAsICAgICAgICAgICAgICAgICAgIlZpY3RvcmlhIERheSIpLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5KVU5FLCAgICAgIDI0LCAgMCwgICAgICAgICAgICAgICAgICAiTmF0aW9uYWwgRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkpVTFksICAgICAgIDEsICAwLCAgICAgICAgICAgICAgICAgICJDYW5hZGEgRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkFVR1VTVCwgICAgIDEsICBDYWxlbmRhci5NT05EQVksICAgICJDaXZpYyBIb2xpZGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLlNFUFRFTUJFUiwgIDEsICBDYWxlbmRhci5NT05EQVksICAgICJMYWJvdXIgRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk9DVE9CRVIsICAgIDgsICBDYWxlbmRhci5NT05EQVksICAgICJUaGFua3NnaXZpbmciKSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuTk9WRU1CRVIsICAxMSwgIDAsICAgICAgICAgICAgICAgICAgIlJlbWVtYnJhbmNlIERheSIpLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkNIUklTVE1BUywKKyAgICAgICAgU2ltcGxlSG9saWRheS5CT1hJTkdfREFZLAorICAgICAgICBTaW1wbGVIb2xpZGF5Lk5FV19ZRUFSU19FVkUsCisKKyAgICAgICAgLy8gRWFzdGVyIGFuZCByZWxhdGVkIGhvbGlkYXlzCisgICAgICAgIEVhc3RlckhvbGlkYXkuR09PRF9GUklEQVksCisgICAgICAgIEVhc3RlckhvbGlkYXkuRUFTVEVSX1NVTkRBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5FQVNURVJfTU9OREFZLAorICAgIH07CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgImhvbGlkYXlzIiwgICBmSG9saWRheXMgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mcl9GUi5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2ZyX0ZSLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2JlODdiNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mcl9GUi5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9mcl9GUi5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ3ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2ZyX0ZSIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBIb2xpZGF5W10gZkhvbGlkYXlzID0geworICAgICAgICBTaW1wbGVIb2xpZGF5Lk5FV19ZRUFSU19EQVksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk1BWSwgICAgICAgIDEsICAwLCAiTGFib3IgRGF5IiksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk1BWSwgICAgICAgIDgsICAwLCAiVmljdG9yeSBEYXkiKSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuSlVMWSwgICAgICAxNCwgIDAsICJCYXN0aWxsZSBEYXkiKSwKKyAgICAgICAgU2ltcGxlSG9saWRheS5BU1NVTVBUSU9OLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkFMTF9TQUlOVFNfREFZLAorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5OT1ZFTUJFUiwgIDExLCAgMCwgIkFybWlzdGljZSBEYXkiKSwKKyAgICAgICAgU2ltcGxlSG9saWRheS5DSFJJU1RNQVMsCisKKyAgICAgICAgLy8gRWFzdGVyIGFuZCByZWxhdGVkIGhvbGlkYXlzCisgICAgICAgIEVhc3RlckhvbGlkYXkuRUFTVEVSX1NVTkRBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5FQVNURVJfTU9OREFZLAorICAgICAgICBFYXN0ZXJIb2xpZGF5LkFTQ0VOU0lPTiwKKyAgICAgICAgRWFzdGVySG9saWRheS5XSElUX1NVTkRBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5XSElUX01PTkRBWSwKKyAgICB9OworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICJob2xpZGF5cyIsICAgZkhvbGlkYXlzIH0sCisgICAgfTsKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7IHJldHVybiBmQ29udGVudHM7IH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfaXQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9pdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmZTFlNjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfaXQuamF2YQpAQCAtMCwwICsxLDQzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfaXQuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0NyAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCitwdWJsaWMgY2xhc3MgSG9saWRheUJ1bmRsZV9pdCBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPQorICAgIHsKKyAgICAgICAgeyAgICJBbGwgU2FpbnRzJyBEYXkiLCAgICAgICJPZ25pc3NhbnRpIiB9LAorICAgICAgICB7ICAgIkFybWlzdGljZSBEYXkiLCAgICAgICAgImFybWlzdGl6aW8iIH0sCisgICAgICAgIHsgICAiQXNjZW5zaW9uIiwgICAgICAgICAgICAiYXNjZW5zaW9uZSIgfSwKKyAgICAgICAgeyAgICJBc2ggV2VkbmVzZGF5IiwgICAgICAgICJtZXJjb2xlZFx1MDBlYyBkZWxsZSBjZW5lcmkiIH0sCisgICAgICAgIHsgICAiQm94aW5nIERheSIsICAgICAgICAgICAiU2FudG8gU3RlZmFubyIgfSwKKyAgICAgICAgeyAgICJDaHJpc3RtYXMiLCAgICAgICAgICAgICJuYXRhbGUiIH0sCisgICAgICAgIHsgICAiRWFzdGVyIFN1bmRheSIsICAgICAgICAicGFzcXVhIiB9LAorICAgICAgICB7ICAgIkVwaXBoYW55IiwgICAgICAgICAgICAgIkVwaWZhbmlhIiB9LAorICAgICAgICB7ICAgIkdvb2QgRnJpZGF5IiwgICAgICAgICAgInZlbmVyZFx1MDBlYyBzYW50byIgfSwKKyAgICAgICAgeyAgICJIYWxsb3dlZW4iLCAgICAgICAgICAgICJ2aWdpbGlhIGRpIE9nbmlzc2FudGkiIH0sCisgICAgICAgIHsgICAiTWF1bmR5IFRodXJzZGF5IiwgICAgICAiZ2lvdmVkXHUwMGVjIHNhbnRvIiB9LAorICAgICAgICB7ICAgIk5ldyBZZWFyJ3MgRGF5IiwgICAgICAgImFubm8gbnVvdm8iIH0sCisgICAgICAgIHsgICAiUGFsbSBTdW5kYXkiLCAgICAgICAgICAiZG9tZW5pY2EgZGVsbGUgcGFsbWUiIH0sCisgICAgICAgIHsgICAiUGVudGVjb3N0IiwgICAgICAgICAgICAiZGkgUGVudGVjb3N0ZSIgfSwKKyAgICAgICAgeyAgICJTaHJvdmUgVHVlc2RheSIsICAgICAgICJtYXJ0ZWRpIGdyYXNzbyIgfSwKKyAgICAgICAgeyAgICJTdC4gU3RlcGhlbidzIERheSIsICAgICJTYW50byBTdGVmYW5vIiB9LAorICAgICAgICB7ICAgIlRoYW5rc2dpdmluZyIsICAgICAgICAgIkdpb3JubyBkZWwgUmluZ3JhemlhbWVudG8iIH0sCisKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9pdF9JVC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2l0X0lULmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmM0NTNmYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9pdF9JVC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9pdF9JVC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ3ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2l0X0lUIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBIb2xpZGF5W10gZkhvbGlkYXlzID0geworICAgICAgICBTaW1wbGVIb2xpZGF5Lk5FV19ZRUFSU19EQVksCisgICAgICAgIFNpbXBsZUhvbGlkYXkuRVBJUEhBTlksCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkFQUklMLCAgICAgIDEsICAwLCAgICAiTGliZXJhdGlvbiBEYXkiKSwKKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuTUFZLCAgICAgICAgMSwgIDAsICAgICJMYWJvciBEYXkiKSwKKyAgICAgICAgU2ltcGxlSG9saWRheS5BU1NVTVBUSU9OLAorICAgICAgICBTaW1wbGVIb2xpZGF5LkFMTF9TQUlOVFNfREFZLAorICAgICAgICBTaW1wbGVIb2xpZGF5LklNTUFDVUxBVEVfQ09OQ0VQVElPTiwKKyAgICAgICAgU2ltcGxlSG9saWRheS5DSFJJU1RNQVMsCisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkRFQ0VNQkVSLCAgMjYsICAwLCAgICAiU3QuIFN0ZXBoZW5zIERheSIpLAorICAgICAgICBTaW1wbGVIb2xpZGF5Lk5FV19ZRUFSU19FVkUsCisKKyAgICAgICAgLy8gRWFzdGVyIGFuZCByZWxhdGVkIGhvbGlkYXlzCisgICAgICAgIEVhc3RlckhvbGlkYXkuRUFTVEVSX1NVTkRBWSwKKyAgICAgICAgRWFzdGVySG9saWRheS5FQVNURVJfTU9OREFZLAorICAgIH07CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgImhvbGlkYXlzIiwgICAgICAgICAgIGZIb2xpZGF5cyB9LAorICAgIH07CisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeyByZXR1cm4gZkNvbnRlbnRzOyB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2l3LmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfaXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDczYzRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2l3LmphdmEKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2l3LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDggJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCitwdWJsaWMgY2xhc3MgSG9saWRheUJ1bmRsZV9pdyBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAgICIiLCAiIiAgfSwgICAgICAvLyBDYW4ndCBiZSBlbXB0eSEKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeyByZXR1cm4gZkNvbnRlbnRzOyB9OworCit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2l3X0lMLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0hvbGlkYXlCdW5kbGVfaXdfSUwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZmVjYmUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2l3X0lMLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2l3X0lMLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDggJCAKKyAqICRSZXZpc2lvbjogMS4zICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuKjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGNsYXNzIEhvbGlkYXlCdW5kbGVfaXdfSUwgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIEhvbGlkYXlbXSBmSG9saWRheXMgPSB7CisgICAgICAgIEhlYnJld0hvbGlkYXkuUk9TSF9IQVNIQU5BSCwKKyAgICAgICAgSGVicmV3SG9saWRheS5ZT01fS0lQUFVSLAorICAgICAgICBIZWJyZXdIb2xpZGF5LkhBTlVLS0FILAorICAgICAgICBIZWJyZXdIb2xpZGF5LlBVUklNLAorICAgICAgICBIZWJyZXdIb2xpZGF5LlBBU1NPVkVSLAorICAgICAgICBIZWJyZXdIb2xpZGF5LlNIQVZVT1QsCisgICAgICAgIEhlYnJld0hvbGlkYXkuU0VMSUhPVCwKKyAgICB9OworCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgImhvbGlkYXlzIiwgICBmSG9saWRheXMgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9qYV9KUC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Ib2xpZGF5QnVuZGxlX2phX0pQLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjZjM2ZjNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9qYV9KUC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSG9saWRheUJ1bmRsZV9qYV9KUC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ4ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKK3B1YmxpYyBjbGFzcyBIb2xpZGF5QnVuZGxlX2phX0pQIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBIb2xpZGF5W10gZkhvbGlkYXlzID0geworICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5GRUJSVUFSWSwgIDExLCAgMCwgICAgIk5hdGlvbmFsIEZvdW5kYXRpb24gRGF5IiksCisgICAgfTsKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAgICJob2xpZGF5cyIsICAgICAgICAgZkhvbGlkYXlzICAgfSwKKyAgICB9OworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgcmV0dXJuIGZDb250ZW50czsgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSUNVTG9jYWxlRGF0YS5qYXIgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lDVUxvY2FsZURhdGEuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTNjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lDVUxvY2FsZURhdGEuamFyCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjliZjc2ZDQzZWRjYmNiYzcwOWQ5OWQzZDhhYjBmYmJiOGRhOTY0MGJlMGQ2ZmFiNTg2MGZhMWY3ODUyYzE1MDcKK3NpemUgMTAxODUwMgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lzbGFtaWNDYWxlbmRhclN5bWJvbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lN2NjZDdjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDggJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIERlZmF1bHQgRGF0ZSBGb3JtYXQgc3ltYm9scyBmb3IgdGhlIElzbGFtaWMgQ2FsZW5kYXIKKyAqLworcHVibGljIGNsYXNzIElzbGFtaWNDYWxlbmRhclN5bWJvbHMgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworICAgIAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4LTE5OTkgSUJNIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIjsKKworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiTW9udGhOYW1lcyIsIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICJNdWhhcnJhbSIsCisgICAgICAgICAgICAgICAgIlNhZmFyIiwKKyAgICAgICAgICAgICAgICAiUmFiaScgSSIsCisgICAgICAgICAgICAgICAgIlJhYmknIElJIiwKKyAgICAgICAgICAgICAgICAiSnVtYWRhIEkiLAorICAgICAgICAgICAgICAgICJKdW1hZGEgSSIsCisgICAgICAgICAgICAgICAgIlJhamFiIiwKKyAgICAgICAgICAgICAgICAiU2hhJ2JhbiIsCisgICAgICAgICAgICAgICAgIlJhbWFkYW4iLAorICAgICAgICAgICAgICAgICJTaGF3d2FsIiwKKyAgICAgICAgICAgICAgICAiRGh1J2wtUWknZGFoIiwKKyAgICAgICAgICAgICAgICAiRGh1J2wtSGlqamFoIiwKKyAgICAgICAgICAgIH0gfSwKKyAgICAgICAgeyAiRXJhcyIsIG5ldyBTdHJpbmdbXSB7IAorICAgICAgICAgICAgICAgICJBSCIKKyAgICAgICAgICAgIH0gfSwKKyAgICB9OworICAgICAgICAKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBmQ29udGVudHM7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSXNsYW1pY0NhbGVuZGFyU3ltYm9sc19hci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2FyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTBiY2FjNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSXNsYW1pY0NhbGVuZGFyU3ltYm9sc19hci5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvSXNsYW1pY0NhbGVuZGFyU3ltYm9sc19hci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA1OjQ4ICQgCisgKiAkUmV2aXNpb246IDEuNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBEZWZhdWx0IERhdGUgRm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBJc2xhbWljIENhbGVuZGFyCisgKi8KK3B1YmxpYyBjbGFzcyBJc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2FyIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29weXJpZ2h0ID0gIkNvcHlyaWdodCBcdTAwYTkgMTk5OSBJQk0gQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4iOworCisgICAgc3RhdGljIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICJNb250aE5hbWVzIiwgbmV3IFN0cmluZ1tdIHsgCisgICAgICAgICAgICAiXHUwNjQ1XHUwNjJEXHUwNjMxXHUwNjQ1IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNdWhhcnJhbQorICAgICAgICAgICAgIlx1MDYzNVx1MDY0MVx1MDYzMSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXIKKyAgICAgICAgICAgICJcdTA2MzFcdTA2MjhcdTA2NEFcdTA2MzkgXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjQ4XHUwNjQ0IiwgICAgICAgICAgICAgIC8vIFJhYmknIEkKKyAgICAgICAgICAgICJcdTA2MzFcdTA2MjhcdTA2NEFcdTA2MzkgXHUwNjI3XHUwNjQ0XHUwNjIyXHUwNjJFXHUwNjMxIiwgICAgICAgICAgICAgIC8vIFJhYmknIElJCisgICAgICAgICAgICAiXHUwNjJDXHUwNjQ1XHUwNjI3XHUwNjJGXHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY0NFx1MDY0OSIsICAvLyBKdW1hZGEgSQorICAgICAgICAgICAgIlx1MDYyQ1x1MDY0NVx1MDYyN1x1MDYyRlx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MjJcdTA2MkVcdTA2MzFcdTA2MjkiLCAgLy8gSnVtYWRhIEkKKyAgICAgICAgICAgICJcdTA2MzFcdTA2MkNcdTA2MjgiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhamFiCisgICAgICAgICAgICAiXHUwNjM0XHUwNjM5XHUwNjI4XHUwNjI3XHUwNjQ2IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGEnYmFuCisgICAgICAgICAgICAiXHUwNjMxXHUwNjQ1XHUwNjM2XHUwNjI3XHUwNjQ2IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYW1hZGFuCisgICAgICAgICAgICAiXHUwNjM0XHUwNjQ4XHUwNjI3XHUwNjQ0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGF3d2FsCisgICAgICAgICAgICAiXHUwNjMwXHUwNjQ4IFx1MDYyN1x1MDY0NFx1MDY0Mlx1MDYzOVx1MDYyRlx1MDYyOSIsICAgICAgICAgICAgICAgICAgICAvLyBEaHUnbC1RaSdkYWgKKyAgICAgICAgICAgICJcdTA2MzBcdTA2NDggXHUwNjI3XHUwNjQ0XHUwNjJEXHUwNjJDXHUwNjI5IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERodSdsLUhpamphaAorICAgICAgICB9IH0sCisgICAgICAgIHsgIkVyYXMiLCBuZXcgU3RyaW5nW10geyAKKyAgICAgICAgICAgICJcdTA2NDdcdTIwMEQiLCAgLy8gQUgKKyAgICAgICAgfSB9LAorICAgIH07CisgICAgICAgIAorICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIGZDb250ZW50czsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2ZpLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfZmkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYWI2MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2ZpLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2ZpLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDkgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIEZpbm5pc2ggZGF0ZSBmb3JtYXQgc3ltYm9scyBmb3IgdGhlIElzbGFtaWMgQ2FsZW5kYXIKKyAqLworcHVibGljIGNsYXNzIElzbGFtaWNDYWxlbmRhclN5bWJvbHNfZmkgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvcHlyaWdodCA9ICJDb3B5cmlnaHQgXHUwMGE5IDE5OTggSUJNIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIjsKKworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiTW9udGhOYW1lcyIsIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiTXVoXHUwMEUxcnJhbSIsICAgICAgICAgICAgICAgIC8vIE11aGFycmFtCisgICAgICAgICAgICAiU1x1MDBFMWZhciIsICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyCisgICAgICAgICAgICAiUmFiXHUwMEVEJyBhbC1cdTAwRTF3d2FsIiwgICAgIC8vIFJhYmknIGFsLWF3d2FsCisgICAgICAgICAgICAiUmFiXHUwMEVEJyBhbC1cdTAwRTFraGlyIiwgICAgIC8vIFJhYmknIGFsLXRoYW5pCisgICAgICAgICAgICAiRFx1MDE3RXVtYWRhLWwtXHUwMEZBbGEiLCAgICAgIC8vIEp1bWFkYSBhbC1hd3dhbAorICAgICAgICAgICAgIkRcdTAxN0V1bWFkYS1sLVx1MDBFMWtoaXJhIiwgICAvLyBKdW1hZGEgYWwtdGhhbmkKKyAgICAgICAgICAgICJSYWRcdTAxN0VhYiIsICAgICAgICAgICAgICAgICAgLy8gUmFqYWIKKyAgICAgICAgICAgICJcdTAxNjBhJ2JcdTAwRTFuIiwgICAgICAgICAgICAgLy8gU2hhJ2JhbgorICAgICAgICAgICAgIlJhbWFkXHUwMEUxbiIsICAgICAgICAgICAgICAgICAvLyBSYW1hZGFuCisgICAgICAgICAgICAiXHUwMTYwYXd3YWwiLCAgICAgICAgICAgICAgICAgIC8vIFNoYXd3YWwKKyAgICAgICAgICAgICJEaHUtbC1xYWRhIiwgICAgICAgICAgICAgICAgICAgLy8gRGh1IGFsLVFpJ2RhaAorICAgICAgICAgICAgIkRodS1sLWhpZGRcdTAxN0VhIiwgICAgICAgICAgICAvLyBEaHUgYWwtSGlqamFoCisgICAgICAgICAgICB9IH0sCisgICAgICAgIHsgIkVyYXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIkFIIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbm5vIEhpZFx1MDE3RXJhCisgICAgICAgICAgICB9IH0sCisgICAgfTsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIGZDb250ZW50czsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2ZyLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfZnIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YTk2ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2ZyLmphdmEKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2ZyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDkgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIEZyZW5jaCBkYXRlIGZvcm1hdCBzeW1ib2xzIGZvciB0aGUgSXNsYW1pYyBDYWxlbmRhcgorICogVGhpcyBkYXRhIGFjdHVhbGx5IGFwcGxpZXMgdG8gRnJlbmNoIENhbmFkaWFuLiAgSWYgd2UgcmVjZWl2ZQorICogb2ZmaWNpYWwgRnJlbmNoIGRhdGEgZnJvbSBvdXIgRnJhbmNlIG9mZmljZSwgd2Ugc2hvdWxkIG1vdmUgdGhlIAorICogRnJlbmNoIENhbmFkaWFuIGRhdGEgKGlmIGl0J3MgZGlmZmVyZW50KSBkb3duIGludG8gX2ZyX0NBCisgKi8KK3B1YmxpYyBjbGFzcyBJc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2ZyIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIk1vbnRoTmFtZXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIk1vdWhhcnJhbSIsICAgICAgICAgICAgLy8gTXVoYXJyYW0KKyAgICAgICAgICAgICJTYWZhciIsICAgICAgICAgICAgICAgIC8vIFNhZmFyCisgICAgICAgICAgICAiUmFiaSctb3VsLUFvdW91YWwiLCAgICAvLyBSYWJpJyBhbC1hd3dhbAorICAgICAgICAgICAgIlJhYmknLW91dC1UYW5pIiwgICAgICAgLy8gUmFiaScgYWwtdGhhbmkKKyAgICAgICAgICAgICJEam91bWFkYS1sLU91bGEiLCAgICAgIC8vIEp1bWFkYSBhbC1hd3dhbAorICAgICAgICAgICAgIkRqb3VtYWRhLXQtVGFuaWEiLCAgICAgLy8gSnVtYWRhIGFsLXRoYW5pCisgICAgICAgICAgICAiUmFkamFiIiwgICAgICAgICAgICAgICAvLyBSYWphYgorICAgICAgICAgICAgIkNoYSdiYW4iLCAgICAgICAgICAgICAgLy8gU2hhJ2JhbgorICAgICAgICAgICAgIlJhbWFkYW4iLCAgICAgICAgICAgICAgLy8gUmFtYWRhbgorICAgICAgICAgICAgIkNoYW91b3VhbCIsICAgICAgICAgICAgLy8gU2hhd3dhbAorICAgICAgICAgICAgIkRvdS1sLVFhJ2RhIiwgICAgICAgICAgLy8gRGh1IGFsLVFpJ2RhaAorICAgICAgICAgICAgIkRvdS1sLUhpZGpqYSIsICAgICAgICAgLy8gRGh1IGFsLUhpamphaAorICAgICAgICAgICAgfSB9LAorICAgICAgICB7ICJFcmFzIiwgbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICJBSCIgICAgICAgIC8vIEFubm8gSGlqcmkKKyAgICAgICAgICAgIH0gfSwKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gZkNvbnRlbnRzOworICAgIH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfaHUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSXNsYW1pY0NhbGVuZGFyU3ltYm9sc19odS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMWIwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfaHUuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfaHUuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0OSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogSHVuZ2FyaWFuIGRhdGUgZm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBJc2xhbWljIENhbGVuZGFyCisgKi8KK3B1YmxpYyBjbGFzcyBJc2xhbWljQ2FsZW5kYXJTeW1ib2xzX2h1IGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIk1vbnRoTmFtZXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIk1vaGFycmVtIiwgICAgICAgICAgICAgICAgIC8vIE11aGFycmFtCisgICAgICAgICAgICAiU2FmYXIiLCAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXIKKyAgICAgICAgICAgICJSXHUwMEU5YmkgZWwgYXZ2ZWwiLCAgICAgICAvLyBSYWJpJyBhbC1hd3dhbAorICAgICAgICAgICAgIlJcdTAwRTliaSBlbCBhY2NoZXIiLCAgICAgIC8vIFJhYmknIGFsLXRoYW5pCisgICAgICAgICAgICAiRHNlbVx1MDBFMWRpIGVsIGF2dmVsIiwgICAgLy8gSnVtYWRhIGFsLWF3d2FsCisgICAgICAgICAgICAiRHNlbVx1MDBFMWRpIGVsIGFjY2hlciIsICAgLy8gSnVtYWRhIGFsLXRoYW5pCisgICAgICAgICAgICAiUmVkc2ViIiwgICAgICAgICAgICAgICAgICAgLy8gUmFqYWIKKyAgICAgICAgICAgICJTYWJcdTAwRTFuIiwgICAgICAgICAgICAgICAvLyBTaGEnYmFuCisgICAgICAgICAgICAiUmFtYWRcdTAwRTFuIiwgICAgICAgICAgICAgLy8gUmFtYWRhbgorICAgICAgICAgICAgIlNldnZcdTAwRTFsIiwgICAgICAgICAgICAgIC8vIFNoYXd3YWwKKyAgICAgICAgICAgICJEc1x1MDBGQ2wga2FkZSIsICAgICAgICAgICAvLyBEaHUgYWwtUWknZGFoCisgICAgICAgICAgICAiRHNcdTAwRkNsIGhlZHNlIiwgICAgICAgICAgLy8gRGh1IGFsLUhpamphaAorICAgICAgICAgICAgfSB9LAorICAgICAgICB7ICJFcmFzIiwgbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICJNRiIKKyAgICAgICAgICAgIH0gfSwKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gZkNvbnRlbnRzOworICAgIH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfaXcuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSXNsYW1pY0NhbGVuZGFyU3ltYm9sc19pdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjZjUyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfaXcuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfaXcuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNTo0OSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogRGVmYXVsdCBEYXRlIEZvcm1hdCBzeW1ib2xzIGZvciB0aGUgSXNsYW1pYyBDYWxlbmRhcgorICovCitwdWJsaWMgY2xhc3MgSXNsYW1pY0NhbGVuZGFyU3ltYm9sc19pdyBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29weXJpZ2h0ID0gIkNvcHlyaWdodCBcdTAwYTkgMTk5OCBJQk0gQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4iOworCisgICAgc3RhdGljIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICJNb250aE5hbWVzIiwgbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICJcdTA1REVcdTA1RDVcdTA1RDdcdTA1RThcdTA1REQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVoYXJyYW0KKyAgICAgICAgICAgICJcdTA1RTFcdTA1RTRcdTA1RTgiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXIKKyAgICAgICAgICAgICJcdTA1RThcdTA1RDFcdTA1RDlcdTA1RTIgXHUwNUQwXHUwNURDLVx1MDVEMFx1MDVENVx1MDVENVx1MDVEMFx1MDVEQyIsICAgICAgICAgLy8gUmFiaScgYWwtYXd3YWwKKyAgICAgICAgICAgICJcdTA1RThcdTA1RDFcdTA1RDlcdTA1RTIgXHUwNUQwXHUwNURDLVx1MDVFQVx1MDVFMFx1MDVEOSIsICAgICAgICAgICAgICAgICAgICAgLy8gUmFiaScgYWwtdGhhbmkKKyAgICAgICAgICAgICJcdTA1RDInXHUwNUQ1XHUwNURFXHUwNUQzXHUwNUQ0IFx1MDVEMFx1MDVEQy1cdTA1RDBcdTA1RDVcdTA1RDVcdTA1RDBcdTA1REMiLCAgLy8gSnVtYWRhIGFsLWF3d2FsCisgICAgICAgICAgICAiXHUwNUQyJ1x1MDVENVx1MDVERVx1MDVEM1x1MDVENCBcdTA1RDBcdTA1REMtXHUwNUVBXHUwNUUwXHUwNUQ5IiwgICAgICAgICAgICAgIC8vIEp1bWFkYSBhbC10aGFuaQorICAgICAgICAgICAgIlx1MDVFOFx1MDVEMidcdTA1RDBcdTA1RDEiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYWphYgorICAgICAgICAgICAgIlx1MDVFOVx1MDVFMlx1MDVEMVx1MDVEMFx1MDVERiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGEnYmFuCisgICAgICAgICAgICAiXHUwNUU4XHUwNUQwXHUwNURFXHUwNUQzXHUwNURGIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhbWFkYW4KKyAgICAgICAgICAgICJcdTA1RTlcdTA1RDVcdTA1RDVcdTA1RDBcdTA1REMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hhd3dhbAorICAgICAgICAgICAgIlx1MDVFOVx1MDVENVx1MDVENVx1MDVEMFx1MDVEQyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaHUgYWwtUWknZGFoCisgICAgICAgICAgICAiXHUwNUQ2XHUwNUQ1IFx1MDVEMFx1MDVEQy1cdTA1RDdcdTA1RDlcdTA1RDInXHUwNUQ0IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERodSBhbC1IaWpqYWgKKyAgICAgICAgICAgIH0gfSwKKyAgICAgICAgeyAiRXJhcyIsIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiXHUwNUU5XHUwNUUwXHUwNUVBIFx1MDVENFx1MDVEOVx1MDVEMidcdTA1RThcdTA1RDQiCisgICAgICAgICAgICB9IH0sCisgICAgfTsKKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIGZDb250ZW50czsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX25sLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0lzbGFtaWNDYWxlbmRhclN5bWJvbHNfbmwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYjU4OGZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX25sLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9Jc2xhbWljQ2FsZW5kYXJTeW1ib2xzX25sLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NDkgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIER1dGNoIGRhdGUgZm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBJc2xhbWljIENhbGVuZGFyCisgKi8KK3B1YmxpYyBjbGFzcyBJc2xhbWljQ2FsZW5kYXJTeW1ib2xzX25sIGV4dGVuZHMgTGlzdFJlc291cmNlQnVuZGxlIHsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CisgICAgICAgIHsgIk1vbnRoTmFtZXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIk1vZWhhcnJhbSIsICAgICAgICAgICAgLy8gTXVoYXJyYW0KKyAgICAgICAgICAgICJTYWZhciIsICAgICAgICAgICAgICAgIC8vIFNhZmFyCisgICAgICAgICAgICAiUmFiaSdhIGFsIGF3YWwgIiwgICAgICAvLyBSYWJpJyBhbC1hd3dhbAorICAgICAgICAgICAgIlJhYmknYSBhbCB0aGFuaSIsICAgICAgLy8gUmFiaScgYWwtdGhhbmkKKyAgICAgICAgICAgICJKb2VtYWQnYWwgYXdhbCIsICAgICAgIC8vIEp1bWFkYSBhbC1hd3dhbAorICAgICAgICAgICAgIkpvZW1hZCdhbCB0aGFuaSIsICAgICAgLy8gSnVtYWRhIGFsLXRoYW5pCisgICAgICAgICAgICAiUmFqYWIiLCAgICAgICAgICAgICAgICAvLyBSYWphYgorICAgICAgICAgICAgIlNqYSdhYmFuIiwgICAgICAgICAgICAgLy8gU2hhJ2JhbgorICAgICAgICAgICAgIlJhbWFkYW4iLCAgICAgICAgICAgICAgLy8gUmFtYWRhbgorICAgICAgICAgICAgIlNqYXdhbCIsICAgICAgICAgICAgICAgLy8gU2hhd3dhbAorICAgICAgICAgICAgIkRvZSBhbCBrYSdhYmEiLCAgICAgICAgLy8gRGh1IGFsLVFpJ2RhaAorICAgICAgICAgICAgIkRvZSBhbCBoaXpqYSIsICAgICAgICAgLy8gRGh1IGFsLUhpamphaAorICAgICAgICAgICAgfSB9LAorICAgICAgICB7ICJFcmFzIiwgbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICJTYSduYSBIaXpqcmlhIgorICAgICAgICAgICAgfSB9LAorICAgIH07CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBmQ29udGVudHM7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSmFwYW5lc2VDYWxlbmRhclN5bWJvbHMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSmFwYW5lc2VDYWxlbmRhclN5bWJvbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYjY0OGYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9KYXBhbmVzZUNhbGVuZGFyU3ltYm9scy5qYXZhCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0phcGFuZXNlQ2FsZW5kYXJTeW1ib2xzLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NTAgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIERlZmF1bHQgRGF0ZSBGb3JtYXQgc3ltYm9scyBmb3IgdGhlIEphcGFuZXNlIENhbGVuZGFyCisgKi8KK3B1YmxpYyBjbGFzcyBKYXBhbmVzZUNhbGVuZGFyU3ltYm9scyBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29weXJpZ2h0ID0gIkNvcHlyaWdodCBcdTAwYTkgMTk5OCBJQk0gQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4iOworCisgICAgc3RhdGljIGZpbmFsIE9iamVjdFtdW10gZkNvbnRlbnRzID0geworICAgICAgICB7ICJEYXRlVGltZVBhdHRlcm5zIiwKKyAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgImg6bW06c3MgYSB6IiwgLy8gZnVsbCB0aW1lIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAiaDptbTpzcyBhIHoiLCAvLyBsb25nIHRpbWUgcGF0dGVybgorICAgICAgICAgICAgICAgICJoOm1tOnNzIGEiLCAvLyBtZWRpdW0gdGltZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgImg6bW0gYSIsIC8vIHNob3J0IHRpbWUgcGF0dGVybgorICAgICAgICAgICAgICAgICJFRUVFLCBNTU1NIGQsIHl5IEciLCAvLyBmdWxsIGRhdGUgcGF0dGVybgorICAgICAgICAgICAgICAgICJNTU1NIGQsIHl5IEciLCAvLyBsb25nIGRhdGUgcGF0dGVybgorICAgICAgICAgICAgICAgICJNTU0gZCwgeXkgRyIsIC8vIG1lZGl1bSBkYXRlIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAiTS9kL3l5IiwgLy8gc2hvcnQgZGF0ZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgInsxfSB7MH0iIC8vIGRhdGUtdGltZSBwYXR0ZXJuCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIHsgIkVyYXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICBHcmVnb3JpYW4gWWVhcgorICAgICAgICAgICAgIlRhaWthIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAgNjQ1CisgICAgICAgICAgICAiSGFrdWNoaSIsICAgICAgICAgICAgICAgICAgICAgIC8vICA2NTAKKyAgICAgICAgICAgICJIYWt1aFx1MDE0RCIsICAgICAgICAgICAgICAgICAgLy8gIDY3MgorICAgICAgICAgICAgIlNodWNoXHUwMTREIiwgICAgICAgICAgICAgICAgICAvLyAgNjg2CisgICAgICAgICAgICAiVGFpaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vICA3MDEKKyAgICAgICAgICAgICJLZWl1biIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDcwNAorICAgICAgICAgICAgIldhZFx1MDE0RCIsICAgICAgICAgICAgICAgICAgICAvLyAgNzA4CisgICAgICAgICAgICAiUmVpa2kiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vICA3MTUKKyAgICAgICAgICAgICJZXHUwMTREclx1MDE0RCIsICAgICAgICAgICAgICAgLy8gIDcxNworICAgICAgICAgICAgIkppbmtpIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAgNzI0CisgICAgICAgICAgICAiVGVtcHlcdTAxNEQiLCAgICAgICAgICAgICAgICAgIC8vICA3MjkKKyAgICAgICAgICAgICJUZW1weVx1MDE0RC1rYW1wXHUwMTREIiwgICAgICAgLy8gIDc0OQorICAgICAgICAgICAgIlRlbXB5XHUwMTRELXNoXHUwMTREaFx1MDE0RCIsICAvLyAgNzQ5CisgICAgICAgICAgICAiVGVtcHlcdTAxNEQtaFx1MDE0RGppIiwgICAgICAgIC8vICA3NTcKKyAgICAgICAgICAgICJUZW1waFx1MDE0RC1qaW5nbyIsICAgICAgICAgICAgLy8gIDc2NQorICAgICAgICAgICAgIkppbmdvLWtlaXVuIiwgICAgICAgICAgICAgICAgICAvLyAgNzY3CisgICAgICAgICAgICAiSFx1MDE0RGtpIiwgICAgICAgICAgICAgICAgICAgIC8vICA3NzAKKyAgICAgICAgICAgICJUZW4tXHUwMTREIiwgICAgICAgICAgICAgICAgICAgLy8gIDc4MQorICAgICAgICAgICAgIkVucnlha3UiLCAgICAgICAgICAgICAgICAgICAgICAvLyAgNzgyCisgICAgICAgICAgICAiRGFpZFx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vICA4MDYKKyAgICAgICAgICAgICJLXHUwMTREbmluIiwgICAgICAgICAgICAgICAgICAgLy8gIDgxMAorICAgICAgICAgICAgIlRlbmNoXHUwMTREIiwgICAgICAgICAgICAgICAgICAvLyAgODI0CisgICAgICAgICAgICAiU2hcdTAxNER3YSIsICAgICAgICAgICAgICAgICAgIC8vICA4MzQKKyAgICAgICAgICAgICJLYWpcdTAxNEQiLCAgICAgICAgICAgICAgICAgICAgLy8gIDg0OAorICAgICAgICAgICAgIk5pbmp1IiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAgODUxCisgICAgICAgICAgICAiU2Fpa28iLCAgICAgICAgICAgICAgICAgICAgICAgIC8vICA4NTQKKyAgICAgICAgICAgICJUZW5uYW4iLCAgICAgICAgICAgICAgICAgICAgICAgLy8gIDg1NworICAgICAgICAgICAgIkpcdTAxNERnYW4iLCAgICAgICAgICAgICAgICAgICAvLyAgODU5CisgICAgICAgICAgICAiR2Vua2VpIiwgICAgICAgICAgICAgICAgICAgICAgIC8vICA4NzcKKyAgICAgICAgICAgICJOaW5uYSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDg4NQorICAgICAgICAgICAgIkthbXB5XHUwMTREIiwgICAgICAgICAgICAgICAgICAvLyAgODg5CisgICAgICAgICAgICAiU2hcdTAxNER0YWkiLCAgICAgICAgICAgICAgICAgIC8vICA4OTgKKyAgICAgICAgICAgICJFbmdpIiwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDkwMQorICAgICAgICAgICAgIkVuY2hcdTAxNEQiLCAgICAgICAgICAgICAgICAgICAvLyAgOTIzCisgICAgICAgICAgICAiU2hcdTAxNERoZWkiLCAgICAgICAgICAgICAgICAgIC8vICA5MzEKKyAgICAgICAgICAgICJUZW5neVx1MDE0RCIsICAgICAgICAgICAgICAgICAgLy8gIDkzOAorICAgICAgICAgICAgIlRlbnJ5YWt1IiwgICAgICAgICAgICAgICAgICAgICAvLyAgOTQ3CisgICAgICAgICAgICAiVGVudG9rdSIsICAgICAgICAgICAgICAgICAgICAgIC8vICA5NTcKKyAgICAgICAgICAgICJcdTAxNEN3YSIsICAgICAgICAgICAgICAgICAgICAgLy8gIDk2MQorICAgICAgICAgICAgIktcdTAxNERoXHUwMTREIiwgICAgICAgICAgICAgICAvLyAgOTY0CisgICAgICAgICAgICAiQW5uYSIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA5NjgKKyAgICAgICAgICAgICJUZW5yb2t1IiwgICAgICAgICAgICAgICAgICAgICAgLy8gIDk3MAorICAgICAgICAgICAgIlRlbi1lbiIsICAgICAgICAgICAgICAgICAgICAgICAvLyAgOTczCisgICAgICAgICAgICAiSlx1MDE0RGdlbiIsICAgICAgICAgICAgICAgICAgIC8vICA5NzYKKyAgICAgICAgICAgICJUZW5nZW4iLCAgICAgICAgICAgICAgICAgICAgICAgLy8gIDk3OAorICAgICAgICAgICAgIkVpa2FuIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAgOTgzCisgICAgICAgICAgICAiS2FubmEiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vICA5ODUKKyAgICAgICAgICAgICJFaS1lbiIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDk4NworICAgICAgICAgICAgIkVpc28iLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgOTg5CisgICAgICAgICAgICAiU2hcdTAxNERyeWFrdSIsICAgICAgICAgICAgICAgIC8vICA5OTAKKyAgICAgICAgICAgICJDaFx1MDE0RHRva3UiLCAgICAgICAgICAgICAgICAgLy8gIDk5NQorICAgICAgICAgICAgIkNoXHUwMTREaFx1MDE0RCIsICAgICAgICAgICAgICAvLyAgOTk5CisgICAgICAgICAgICAiS2Fua1x1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vIDEwMDQKKyAgICAgICAgICAgICJDaFx1MDE0RHdhIiwgICAgICAgICAgICAgICAgICAgLy8gMTAxMgorICAgICAgICAgICAgIkthbm5pbiIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxMDE3CisgICAgICAgICAgICAiSmlhbiIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwMjEKKyAgICAgICAgICAgICJNYW5qdSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTAyNAorICAgICAgICAgICAgIkNoXHUwMTREZ2VuIiwgICAgICAgICAgICAgICAgICAvLyAxMDI4CisgICAgICAgICAgICAiQ2hcdTAxNERyeWFrdSIsICAgICAgICAgICAgICAgIC8vIDEwMzcKKyAgICAgICAgICAgICJDaFx1MDE0RGt5XHUwMTZCIiwgICAgICAgICAgICAgLy8gMTA0MAorICAgICAgICAgICAgIkthbnRva3UiLCAgICAgICAgICAgICAgICAgICAgICAvLyAxMDQ0CisgICAgICAgICAgICAiRWlzaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vIDEwNDYKKyAgICAgICAgICAgICJUZW5naSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTA1MworICAgICAgICAgICAgIktcdTAxNERoZWkiLCAgICAgICAgICAgICAgICAgICAvLyAxMDU4CisgICAgICAgICAgICAiSmlyeWFrdSIsICAgICAgICAgICAgICAgICAgICAgIC8vIDEwNjUKKyAgICAgICAgICAgICJFbmt5XHUwMTZCIiwgICAgICAgICAgICAgICAgICAgLy8gMTA2OQorICAgICAgICAgICAgIlNoXHUwMTREaG8iLCAgICAgICAgICAgICAgICAgICAvLyAxMDc0CisgICAgICAgICAgICAiU2hcdTAxNERyeWFrdSIsICAgICAgICAgICAgICAgIC8vIDEwNzcKKyAgICAgICAgICAgICJFaWhvIiwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTA4MQorICAgICAgICAgICAgIlx1MDE0Q3Rva3UiLCAgICAgICAgICAgICAgICAgICAvLyAxMDg0CisgICAgICAgICAgICAiS2FuamkiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwODcKKyAgICAgICAgICAgICJLYWhvIiwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTA5NAorICAgICAgICAgICAgIkVpY2hcdTAxNEQiLCAgICAgICAgICAgICAgICAgICAvLyAxMDk2CisgICAgICAgICAgICAiU2hcdTAxNER0b2t1IiwgICAgICAgICAgICAgICAgIC8vIDEwOTcKKyAgICAgICAgICAgICJLXHUwMTREd2EiLCAgICAgICAgICAgICAgICAgICAgLy8gMTA5OQorICAgICAgICAgICAgIkNoXHUwMTREamkiLCAgICAgICAgICAgICAgICAgICAvLyAxMTA0CisgICAgICAgICAgICAiS2FzaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vIDExMDYKKyAgICAgICAgICAgICJUZW5uaW4iLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTEwOAorICAgICAgICAgICAgIlRlbi1laSIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTEwCisgICAgICAgICAgICAiRWlreVx1MDE2QiIsICAgICAgICAgICAgICAgICAgIC8vIDExMTMKKyAgICAgICAgICAgICJHZW4tZWkiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTExOAorICAgICAgICAgICAgIkhvYW4iLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTIwCisgICAgICAgICAgICAiVGVuamkiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExMjQKKyAgICAgICAgICAgICJEYWlqaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTEyNgorICAgICAgICAgICAgIlRlbnNoXHUwMTREIiwgICAgICAgICAgICAgICAgICAvLyAxMTMxCisgICAgICAgICAgICAiQ2hcdTAxNERzaFx1MDE0RCIsICAgICAgICAgICAgIC8vIDExMzIKKyAgICAgICAgICAgICJIb2VuIiwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTEzNQorICAgICAgICAgICAgIkVpamkiLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTQxCisgICAgICAgICAgICAiS1x1MDE0RGppIiwgICAgICAgICAgICAgICAgICAgIC8vIDExNDIKKyAgICAgICAgICAgICJUZW55XHUwMTREIiwgICAgICAgICAgICAgICAgICAgLy8gMTE0NAorICAgICAgICAgICAgIkt5XHUwMTZCYW4iLCAgICAgICAgICAgICAgICAgICAvLyAxMTQ1CisgICAgICAgICAgICAiTmlucGVpIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDExNTEKKyAgICAgICAgICAgICJLeVx1MDE2Qmp1IiwgICAgICAgICAgICAgICAgICAgLy8gMTE1NAorICAgICAgICAgICAgIkhvZ2VuIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTU2CisgICAgICAgICAgICAiSGVpamkiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExNTkKKyAgICAgICAgICAgICJFaXJ5YWt1IiwgICAgICAgICAgICAgICAgICAgICAgLy8gMTE2MAorICAgICAgICAgICAgIlx1MDE0Q2hvIiwgICAgICAgICAgICAgICAgICAgICAvLyAxMTYxCisgICAgICAgICAgICAiQ2hcdTAxNERrYW4iLCAgICAgICAgICAgICAgICAgIC8vIDExNjMKKyAgICAgICAgICAgICJFaW1hbiIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTE2NQorICAgICAgICAgICAgIk5pbi1hbiIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTY2CisgICAgICAgICAgICAiS2FcdTAxNEQiLCAgICAgICAgICAgICAgICAgICAgIC8vIDExNjkKKyAgICAgICAgICAgICJTaFx1MDE0RGFuIiwgICAgICAgICAgICAgICAgICAgLy8gMTE3MQorICAgICAgICAgICAgIkFuZ2VuIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTc1CisgICAgICAgICAgICAiSmlzaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vIDExNzcKKyAgICAgICAgICAgICJZXHUwMTREd2EiLCAgICAgICAgICAgICAgICAgICAgLy8gMTE4MQorICAgICAgICAgICAgIkp1ZWkiLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTgyCisgICAgICAgICAgICAiR2Vucnl1a3UiLCAgICAgICAgICAgICAgICAgICAgIC8vIDExODQKKyAgICAgICAgICAgICJCdW5qaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTE4NQorICAgICAgICAgICAgIktlbmt5XHUwMTZCIiwgICAgICAgICAgICAgICAgICAvLyAxMTkwCisgICAgICAgICAgICAiU2hcdTAxNERqaSIsICAgICAgICAgICAgICAgICAgIC8vIDExOTkKKyAgICAgICAgICAgICJLZW5uaW4iLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTIwMQorICAgICAgICAgICAgIkdlbmt5XHUwMTZCIiwgICAgICAgICAgICAgICAgICAvLyAxMjA0CisgICAgICAgICAgICAiS2VuLWVpIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDEyMDYKKyAgICAgICAgICAgICJTaFx1MDE0RGdlbiIsICAgICAgICAgICAgICAgICAgLy8gMTIwNworICAgICAgICAgICAgIktlbnJ5YWt1IiwgICAgICAgICAgICAgICAgICAgICAvLyAxMjExCisgICAgICAgICAgICAiS2VucFx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vIDEyMTMKKyAgICAgICAgICAgICJTaFx1MDE0RGt5XHUwMTZCIiwgICAgICAgICAgICAgLy8gMTIxOQorICAgICAgICAgICAgIkpcdTAxNERcdTAxNEQiLCAgICAgICAgICAgICAgICAvLyAxMjIyCisgICAgICAgICAgICAiR2VubmluIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDEyMjQKKyAgICAgICAgICAgICJLYXJva3UiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTIyNQorICAgICAgICAgICAgIkFudGVpIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMjI3CisgICAgICAgICAgICAiS2Fua2kiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEyMjkKKyAgICAgICAgICAgICJKXHUwMTREZWkiLCAgICAgICAgICAgICAgICAgICAgLy8gMTIzMgorICAgICAgICAgICAgIlRlbXB1a3UiLCAgICAgICAgICAgICAgICAgICAgICAvLyAxMjMzCisgICAgICAgICAgICAiQnVucnlha3UiLCAgICAgICAgICAgICAgICAgICAgIC8vIDEyMzQKKyAgICAgICAgICAgICJLYXRlaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTIzNQorICAgICAgICAgICAgIlJ5YWt1bmluIiwgICAgICAgICAgICAgICAgICAgICAvLyAxMjM4CisgICAgICAgICAgICAiRW4tXHUwMTREIiwgICAgICAgICAgICAgICAgICAgIC8vIDEyMzkKKyAgICAgICAgICAgICJOaW5qaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTI0MAorICAgICAgICAgICAgIkthbmdlbiIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxMjQzCisgICAgICAgICAgICAiSFx1MDE0RGppIiwgICAgICAgICAgICAgICAgICAgIC8vIDEyNDcKKyAgICAgICAgICAgICJLZW5jaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgLy8gMTI0OQorICAgICAgICAgICAgIktcdTAxNERnZW4iLCAgICAgICAgICAgICAgICAgICAvLyAxMjU2CisgICAgICAgICAgICAiU2hcdTAxNERrYSIsICAgICAgICAgICAgICAgICAgIC8vIDEyNTcKKyAgICAgICAgICAgICJTaFx1MDE0RGdlbiIsICAgICAgICAgICAgICAgICAgLy8gMTI1OQorICAgICAgICAgICAgIkJ1bi1cdTAxNEQiLCAgICAgICAgICAgICAgICAgICAvLyAxMjYwCisgICAgICAgICAgICAiS1x1MDE0RGNoXHUwMTREIiwgICAgICAgICAgICAgIC8vIDEyNjEKKyAgICAgICAgICAgICJCdW4tZWkiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTI2NAorICAgICAgICAgICAgIktlbmppIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMjc1CisgICAgICAgICAgICAiS1x1MDE0RGFuIiwgICAgICAgICAgICAgICAgICAgIC8vIDEyNzgKKyAgICAgICAgICAgICJTaFx1MDE0RFx1MDE0RCIsICAgICAgICAgICAgICAgLy8gMTI4OAorICAgICAgICAgICAgIkVpbmluIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMjkzCisgICAgICAgICAgICAiU2hcdTAxNERhbiIsICAgICAgICAgICAgICAgICAgIC8vIDEyOTkKKyAgICAgICAgICAgICJLZW5nZW4iLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTMwMgorICAgICAgICAgICAgIkthZ2VuIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMzAzCisgICAgICAgICAgICAiVG9rdWppIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzMDYKKyAgICAgICAgICAgICJFbmtlaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTMwOAorICAgICAgICAgICAgIlx1MDE0Q2NoXHUwMTREIiwgICAgICAgICAgICAgICAvLyAxMzExCisgICAgICAgICAgICAiU2hcdTAxNER3YSIsICAgICAgICAgICAgICAgICAgIC8vIDEzMTIKKyAgICAgICAgICAgICJCdW5wXHUwMTREIiwgICAgICAgICAgICAgICAgICAgLy8gMTMxNworICAgICAgICAgICAgIkdlblx1MDE0RCIsICAgICAgICAgICAgICAgICAgICAvLyAxMzE5CisgICAgICAgICAgICAiR2Vua3lcdTAxNEQiLCAgICAgICAgICAgICAgICAgIC8vIDEzMjEKKyAgICAgICAgICAgICJTaFx1MDE0RGNoXHUwMTZCIiwgICAgICAgICAgICAgLy8gMTMyNAorICAgICAgICAgICAgIkthcmVraSIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxMzI2CisgICAgICAgICAgICAiR2VudG9rdSIsICAgICAgICAgICAgICAgICAgICAgIC8vIDEzMjkKKyAgICAgICAgICAgICJHZW5rXHUwMTREIiwgICAgICAgICAgICAgICAgICAgLy8gMTMzMQorICAgICAgICAgICAgIktlbW11IiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMzM0CisgICAgICAgICAgICAiRW5nZW4iLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzMzYKKyAgICAgICAgICAgICJLXHUwMTREa29rdSIsICAgICAgICAgICAgICAgICAgLy8gMTM0MAorICAgICAgICAgICAgIlNoXHUwMTREaGVpIiwgICAgICAgICAgICAgICAgICAvLyAxMzQ2CisgICAgICAgICAgICAiS2VudG9rdSIsICAgICAgICAgICAgICAgICAgICAgIC8vIDEzNzAKKyAgICAgICAgICAgICJCdW5jaFx1MDE2OSIsICAgICAgICAgICAgICAgICAgLy8gMTM3MgorICAgICAgICAgICAgIlRlbmp1IiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMzc1CisgICAgICAgICAgICAiS1x1MDE0RHdhIiwgICAgICAgICAgICAgICAgICAgIC8vIDEzODEKKyAgICAgICAgICAgICJHZW5jaFx1MDE2OSIsICAgICAgICAgICAgICAgICAgLy8gMTM4NAorICAgICAgICAgICAgIk1laXRva3UiLCAgICAgICAgICAgICAgICAgICAgICAvLyAxMzg0CisgICAgICAgICAgICAiS1x1MDE0RHJ5YWt1IiwgICAgICAgICAgICAgICAgIC8vIDEzNzkKKyAgICAgICAgICAgICJLYWtlaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTM4NworICAgICAgICAgICAgIktcdTAxNERcdTAxNEQiLCAgICAgICAgICAgICAgICAvLyAxMzg5CisgICAgICAgICAgICAiTWVpdG9rdSIsICAgICAgICAgICAgICAgICAgICAgIC8vIDEzOTAKKyAgICAgICAgICAgICJcdTAxNENlaSIsICAgICAgICAgICAgICAgICAgICAgLy8gMTM5NAorICAgICAgICAgICAgIlNoXHUwMTREY2hcdTAxNEQiLCAgICAgICAgICAgICAvLyAxNDI4CisgICAgICAgICAgICAiRWlreVx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vIDE0MjkKKyAgICAgICAgICAgICJLYWtpdHN1IiwgICAgICAgICAgICAgICAgICAgICAgLy8gMTQ0MQorICAgICAgICAgICAgIkJ1bi1hbiIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxNDQ0CisgICAgICAgICAgICAiSFx1MDE0RHRva3UiLCAgICAgICAgICAgICAgICAgIC8vIDE0NDkKKyAgICAgICAgICAgICJLeVx1MDE0RHRva3UiLCAgICAgICAgICAgICAgICAgLy8gMTQ1MgorICAgICAgICAgICAgIktcdTAxNERzaFx1MDE0RCIsICAgICAgICAgICAgICAvLyAxNDU1CisgICAgICAgICAgICAiQ2hcdTAxNERyb2t1IiwgICAgICAgICAgICAgICAgIC8vIDE0NTcKKyAgICAgICAgICAgICJLYW5zaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgLy8gMTQ2MAorICAgICAgICAgICAgIkJ1bnNoXHUwMTREIiwgICAgICAgICAgICAgICAgICAvLyAxNDY2CisgICAgICAgICAgICAiXHUwMTRDbmluIiwgICAgICAgICAgICAgICAgICAgIC8vIDE0NjcKKyAgICAgICAgICAgICJCdW5tZWkiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTQ2OQorICAgICAgICAgICAgIkNoXHUwMTREa3lcdTAxNEQiLCAgICAgICAgICAgICAvLyAxNDg3CisgICAgICAgICAgICAiRW50b2t1IiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDE0ODkKKyAgICAgICAgICAgICJNZWlcdTAxNEQiLCAgICAgICAgICAgICAgICAgICAgLy8gMTQ5MgorICAgICAgICAgICAgIkJ1bmtpIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxNTAxCisgICAgICAgICAgICAiRWlzaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vIDE1MDQKKyAgICAgICAgICAgICJUYWllaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTUyMQorICAgICAgICAgICAgIkt5XHUwMTREcm9rdSIsICAgICAgICAgICAgICAgICAvLyAxNTI4CisgICAgICAgICAgICAiVGVubW9uIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1MzIKKyAgICAgICAgICAgICJLXHUwMTREamkiLCAgICAgICAgICAgICAgICAgICAgLy8gMTU1NQorICAgICAgICAgICAgIkVpcm9rdSIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxNTU4CisgICAgICAgICAgICAiR2Vua2kiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1NzAKKyAgICAgICAgICAgICJUZW5zaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgLy8gMTU3MworICAgICAgICAgICAgIkJ1bnJva3UiLCAgICAgICAgICAgICAgICAgICAgICAvLyAxNTkyCisgICAgICAgICAgICAiS2VpY2hcdTAxNEQiLCAgICAgICAgICAgICAgICAgIC8vIDE1OTYKKyAgICAgICAgICAgICJHZW53YSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTYxNQorICAgICAgICAgICAgIkthbi1laSIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxNjI0CisgICAgICAgICAgICAiU2hcdTAxNERobyIsICAgICAgICAgICAgICAgICAgIC8vIDE2NDQKKyAgICAgICAgICAgICJLZWlhbiIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTY0OAorICAgICAgICAgICAgIlNoXHUwMTREXHUwMTREIiwgICAgICAgICAgICAgICAvLyAxNjUyCisgICAgICAgICAgICAiTWVpcnlha3UiLCAgICAgICAgICAgICAgICAgICAgIC8vIDE2NTUKKyAgICAgICAgICAgICJNYW5qaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTY1OAorICAgICAgICAgICAgIkthbmJ1biIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxNjYxCisgICAgICAgICAgICAiRW5wXHUwMTREIiwgICAgICAgICAgICAgICAgICAgIC8vIDE2NzMKKyAgICAgICAgICAgICJUZW53YSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTY4MQorICAgICAgICAgICAgIkpcdTAxNERreVx1MDE0RCIsICAgICAgICAgICAgICAvLyAxNjg0CisgICAgICAgICAgICAiR2Vucm9rdSIsICAgICAgICAgICAgICAgICAgICAgIC8vIDE2ODgKKyAgICAgICAgICAgICJIXHUwMTREZWkiLCAgICAgICAgICAgICAgICAgICAgLy8gMTcwNAorICAgICAgICAgICAgIlNoXHUwMTREdG9rdSIsICAgICAgICAgICAgICAgICAvLyAxNzExCisgICAgICAgICAgICAiS3lcdTAxNERoXHUwMTREIiwgICAgICAgICAgICAgIC8vIDE3MTYKKyAgICAgICAgICAgICJHZW5idW4iLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTczNgorICAgICAgICAgICAgIkthbnBcdTAxNEQiLCAgICAgICAgICAgICAgICAgICAvLyAxNzQxCisgICAgICAgICAgICAiRW5reVx1MDE0RCIsICAgICAgICAgICAgICAgICAgIC8vIDE3NDQKKyAgICAgICAgICAgICJLYW4tZW4iLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMTc0OAorICAgICAgICAgICAgIkhcdTAxNERyeWFrdSIsICAgICAgICAgICAgICAgICAvLyAxNzUxCisgICAgICAgICAgICAiTWVpd2EiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE3NjQKKyAgICAgICAgICAgICJBbi1laSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTc3MgorICAgICAgICAgICAgIlRlbm1laSIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxNzgxCisgICAgICAgICAgICAiS2Fuc2VpIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDE3ODkKKyAgICAgICAgICAgICJLeVx1MDE0RHdhIiwgICAgICAgICAgICAgICAgICAgLy8gMTgwMQorICAgICAgICAgICAgIkJ1bmthIiwgICAgICAgICAgICAgICAgICAgICAgICAvLyAxODA0CisgICAgICAgICAgICAiQnVuc2VpIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDE4MTgKKyAgICAgICAgICAgICJUZW5wXHUwMTREIiwgICAgICAgICAgICAgICAgICAgLy8gMTgzMAorICAgICAgICAgICAgIktcdTAxNERrYSIsICAgICAgICAgICAgICAgICAgICAvLyAxODQ0CisgICAgICAgICAgICAiS2FlaSIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE4NDgKKyAgICAgICAgICAgICJBbnNlaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTg1NAorICAgICAgICAgICAgIk1hbi1lbiIsICAgICAgICAgICAgICAgICAgICAgICAvLyAxODYwCisgICAgICAgICAgICAiQnVua3lcdTAxNkIiLCAgICAgICAgICAgICAgICAgIC8vIDE4NjEKKyAgICAgICAgICAgICJHZW5qaSIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTg2NAorICAgICAgICAgICAgIktlaVx1MDE0RCIsICAgICAgICAgICAgICAgICAgICAvLyAxODY1CisgICAgICAgICAgICAiTWVpamkiLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE4NjgKKyAgICAgICAgICAgICJUYWlzaFx1MDE0RCIsICAgICAgICAgICAgICAgICAgLy8gMTkxMgorICAgICAgICAgICAgIlNoXHUwMTREd2EiLCAgICAgICAgICAgICAgICAgICAvLyAxOTI2CisgICAgICAgICAgICAiSGVpc2VpIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIDE5ODkKKyAgICAgICAgfSB9LAorICAgIH07CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIHJldHVybiBmQ29udGVudHM7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSmFwYW5lc2VDYWxlbmRhclN5bWJvbHNfamEuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvSmFwYW5lc2VDYWxlbmRhclN5bWJvbHNfamEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MTk2ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9KYXBhbmVzZUNhbGVuZGFyU3ltYm9sc19qYS5qYXZhCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL0phcGFuZXNlQ2FsZW5kYXJTeW1ib2xzX2phLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDU6NTAgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5pbXBsLmRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworCisvKioKKyAqIEphcGFuZXNlIEthbmppIHZlcnNpb24gb2YgdGhlIERhdGUgRm9ybWF0IHN5bWJvbHMgZm9yIHRoZSBKYXBhbmVzZSBjYWxlbmRhcgorICovCitwdWJsaWMgY2xhc3MgSmFwYW5lc2VDYWxlbmRhclN5bWJvbHNfamEgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvcHlyaWdodCA9ICJDb3B5cmlnaHQgXHUwMGE5IDE5OTggSUJNIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIjsKKworICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGZDb250ZW50cyA9IHsKKyAgICAgICAgeyAiRGF0ZVRpbWVQYXR0ZXJucyIsCisgICAgICAgICAgICBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgICAgICJIJ1x1NjY0MidtbSdcdTUyMDYnc3MnXHU3OWQyJ3oiLCAvLyBmdWxsIHRpbWUgcGF0dGVybgorICAgICAgICAgICAgICAgICJIOm1tOnNzOnoiLCAvLyBsb25nIHRpbWUgcGF0dGVybgorICAgICAgICAgICAgICAgICJIOm1tOnNzIiwgLy8gbWVkaXVtIHRpbWUgcGF0dGVybgorICAgICAgICAgICAgICAgICJIOm1tIiwgLy8gc2hvcnQgdGltZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgIkcgeXknXHU1ZTc0J00nXHU2NzA4J2QnXHU2NWU1JyIsIC8vIGZ1bGwgZGF0ZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgIkcgeXkvTU0vZGQiLCAvLyBsb25nIGRhdGUgcGF0dGVybgorICAgICAgICAgICAgICAgICJHIHl5L01NL2RkIiwgLy8gbWVkaXVtIGRhdGUgcGF0dGVybgorICAgICAgICAgICAgICAgICJHIHl5L01NL2RkIiwgLy8gc2hvcnQgZGF0ZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgInsxfSB7MH0iIC8vIGRhdGUtdGltZSBwYXR0ZXJuCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIHsgIkVyYXMiLCBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIlx1NTkyN1x1NTMxNiIsICAgICAgICAgICAgIC8vICA2NDUgVGFpa2EKKyAgICAgICAgICAgICJcdTc2N0RcdTk2QzkiLCAgICAgICAgICAgICAvLyAgNjUwIEhha3VjaGkKKyAgICAgICAgICAgICJcdTc2N0RcdTlDRUYiLCAgICAgICAgICAgICAvLyAgNjcyIEhha3VobworICAgICAgICAgICAgIlx1NjczMVx1OUNFNSIsICAgICAgICAgICAgIC8vICA2ODYgU2h1Y2hvCisgICAgICAgICAgICAiXHU1OTI3XHU1QjlEIiwgICAgICAgICAgICAgLy8gIDcwMSBUYWlobworICAgICAgICAgICAgIlx1NjE3Nlx1OTZGMiIsICAgICAgICAgICAgIC8vICA3MDQgS2VpdW4KKyAgICAgICAgICAgICJcdTU0OENcdTkyODUiLCAgICAgICAgICAgICAvLyAgNzA4IFdhZG8KKyAgICAgICAgICAgICJcdTk3MEFcdTRFODAiLCAgICAgICAgICAgICAvLyAgNzE1IFJlaWtpCisgICAgICAgICAgICAiXHU5OTBBXHU4MDAxIiwgICAgICAgICAgICAgLy8gIDcxNyBZb3JvCisgICAgICAgICAgICAiXHU3OTVFXHU0RTgwIiwgICAgICAgICAgICAgLy8gIDcyNCBKaW5raQorICAgICAgICAgICAgIlx1NTkyOVx1NUU3MyIsICAgICAgICAgICAgIC8vICA3MjkgVGVtcHlvCisgICAgICAgICAgICAiXHU1OTI5XHU1RTczXHU2MTFGXHU1QjlEIiwgLy8gIDc0OSBUZW1weW8ta2FtcG8KKyAgICAgICAgICAgICJcdTU5MjlcdTVFNzNcdTUyRERcdTVCOUQiLCAvLyAgNzQ5IFRlbXB5by1zaG9obworICAgICAgICAgICAgIlx1NTkyOVx1NUU3M1x1NUI5RFx1NUI1NyIsIC8vICA3NTcgVGVtcHlvLWhvamkKKyAgICAgICAgICAgICJcdTU5MjlcdTVFNzNcdTc5NUVcdThCNzciLCAvLyAgNzY1IFRlbXBoby1qaW5nbworICAgICAgICAgICAgIlx1Nzk1RVx1OEI3N1x1NjY2Rlx1OTZGMiIsIC8vICA3NjcgSmluZ28ta2VpdW4KKyAgICAgICAgICAgICJcdTVCOURcdTRFODAiLCAgICAgICAgICAgICAvLyAgNzcwIEhva2kKKyAgICAgICAgICAgICJcdTU5MjlcdTVGREMiLCAgICAgICAgICAgICAvLyAgNzgxIFRlbi1vCisgICAgICAgICAgICAiXHU1RUY2XHU2NkE2IiwgICAgICAgICAgICAgLy8gIDc4MiBFbnJ5YWt1CisgICAgICAgICAgICAiXHU1OTI3XHU1NDBDIiwgICAgICAgICAgICAgLy8gIDgwNiBEYWlkbworICAgICAgICAgICAgIlx1NUYxOFx1NEVDMSIsICAgICAgICAgICAgIC8vICA4MTAgS29uaW4KKyAgICAgICAgICAgICJcdTU5MjlcdTk1NzciLCAgICAgICAgICAgICAvLyAgODI0IFRlbmNobworICAgICAgICAgICAgIlx1NjI3Rlx1NTQ4QyIsICAgICAgICAgICAgIC8vICA4MzQgU2hvd2EKKyAgICAgICAgICAgICJcdTU2MDlcdTc5NjUiLCAgICAgICAgICAgICAvLyAgODQ4IEtham8KKyAgICAgICAgICAgICJcdTRFQzFcdTVCRkYiLCAgICAgICAgICAgICAvLyAgODUxIE5pbmp1CisgICAgICAgICAgICAiXHU2NTg5XHU4ODYxIiwgICAgICAgICAgICAgLy8gIDg1NCBTYWlrbworICAgICAgICAgICAgIlx1NTkyOVx1NUI4OSIsICAgICAgICAgICAgIC8vICA4NTcgVGVubmFuCisgICAgICAgICAgICAiXHU4QzlFXHU4OUIzIiwgICAgICAgICAgICAgLy8gIDg1OSBKb2dhbgorICAgICAgICAgICAgIlx1NTE0M1x1NjE3NiIsICAgICAgICAgICAgIC8vICA4NzcgR2Vua2VpCisgICAgICAgICAgICAiXHU0RUMxXHU1NDhDIiwgICAgICAgICAgICAgLy8gIDg4NSBOaW5uYQorICAgICAgICAgICAgIlx1NUJEQlx1NUU3MyIsICAgICAgICAgICAgIC8vICA4ODkgS2FtcHlvCisgICAgICAgICAgICAiXHU2NjBDXHU2Q0YwIiwgICAgICAgICAgICAgLy8gIDg5OCBTaG90YWkKKyAgICAgICAgICAgICJcdTVFRjZcdTU1OUMiLCAgICAgICAgICAgICAvLyAgOTAxIEVuZ2kKKyAgICAgICAgICAgICJcdTVFRjZcdTk1NzciLCAgICAgICAgICAgICAvLyAgOTIzIEVuY2hvCisgICAgICAgICAgICAiXHU2MjdGXHU1RTczIiwgICAgICAgICAgICAgLy8gIDkzMSBTaG9oZWkKKyAgICAgICAgICAgICJcdTU5MjlcdTYxNzYiLCAgICAgICAgICAgICAvLyAgOTM4IFRlbmd5bworICAgICAgICAgICAgIlx1NTkyOVx1NjZBNiIsICAgICAgICAgICAgIC8vICA5NDcgVGVucnlha3UKKyAgICAgICAgICAgICJcdTU5MjlcdTVGQjMiLCAgICAgICAgICAgICAvLyAgOTU3IFRlbnRva3UKKyAgICAgICAgICAgICJcdTVGRENcdTU0OEMiLCAgICAgICAgICAgICAvLyAgOTYxIE93YQorICAgICAgICAgICAgIlx1NUVCN1x1NEZERCIsICAgICAgICAgICAgIC8vICA5NjQgS29obworICAgICAgICAgICAgIlx1NUI4OVx1NTQ4QyIsICAgICAgICAgICAgIC8vICA5NjggQW5uYQorICAgICAgICAgICAgIlx1NTkyOVx1Nzk4NCIsICAgICAgICAgICAgIC8vICA5NzAgVGVucm9rdQorICAgICAgICAgICAgIlx1NTkyOVx1NUVGNiIsICAgICAgICAgICAgIC8vICA5NzMgVGVuLWVuCisgICAgICAgICAgICAiXHU4QzlFXHU1MTQzIiwgICAgICAgICAgICAgLy8gIDk3NiBKb2dlbgorICAgICAgICAgICAgIlx1NTkyOVx1NTE0MyIsICAgICAgICAgICAgIC8vICA5NzggVGVuZ2VuCisgICAgICAgICAgICAiXHU2QzM4XHU4OUIzIiwgICAgICAgICAgICAgLy8gIDk4MyBFaWthbgorICAgICAgICAgICAgIlx1NUJEQlx1NTQ4QyIsICAgICAgICAgICAgIC8vICA5ODUgS2FubmEKKyAgICAgICAgICAgICJcdTZDMzhcdTVFRjYiLCAgICAgICAgICAgICAvLyAgOTg3IEVpLWVuCisgICAgICAgICAgICAiXHU2QzM4XHU3OTVBIiwgICAgICAgICAgICAgLy8gIDk4OSBFaXNvCisgICAgICAgICAgICAiXHU2QjYzXHU2NkE2IiwgICAgICAgICAgICAgLy8gIDk5MCBTaG9yeWFrdQorICAgICAgICAgICAgIlx1OTU3N1x1NUZCMyIsICAgICAgICAgICAgIC8vICA5OTUgQ2hvdG9rdQorICAgICAgICAgICAgIlx1OTU3N1x1NEZERCIsICAgICAgICAgICAgIC8vICA5OTkgQ2hvaG8KKyAgICAgICAgICAgICJcdTVCREJcdTVGMTgiLCAgICAgICAgICAgICAvLyAxMDA0IEthbmtvCisgICAgICAgICAgICAiXHU5NTc3XHU1NDhDIiwgICAgICAgICAgICAgLy8gMTAxMiBDaG93YQorICAgICAgICAgICAgIlx1NUJEQlx1NEVDMSIsICAgICAgICAgICAgIC8vIDEwMTcgS2FubmluCisgICAgICAgICAgICAiXHU2Q0JCXHU1Qjg5IiwgICAgICAgICAgICAgLy8gMTAyMSBKaWFuCisgICAgICAgICAgICAiXHU0RTA3XHU1QkZGIiwgICAgICAgICAgICAgLy8gMTAyNCBNYW5qdQorICAgICAgICAgICAgIlx1OTU3N1x1NTE0MyIsICAgICAgICAgICAgIC8vIDEwMjggQ2hvZ2VuCisgICAgICAgICAgICAiXHU5NTc3XHU2NkE2IiwgICAgICAgICAgICAgLy8gMTAzNyBDaG9yeWFrdQorICAgICAgICAgICAgIlx1OTU3N1x1NEU0NSIsICAgICAgICAgICAgIC8vIDEwNDAgQ2hva3l1CisgICAgICAgICAgICAiXHU1QkRCXHU1RkIzIiwgICAgICAgICAgICAgLy8gMTA0NCBLYW50b2t1CisgICAgICAgICAgICAiXHU2QzM4XHU2MjdGIiwgICAgICAgICAgICAgLy8gMTA0NiBFaXNobworICAgICAgICAgICAgIlx1NTkyOVx1NTU5QyIsICAgICAgICAgICAgIC8vIDEwNTMgVGVuZ2kKKyAgICAgICAgICAgICJcdTVFQjdcdTVFNzMiLCAgICAgICAgICAgICAvLyAxMDU4IEtvaGVpCisgICAgICAgICAgICAiXHU2Q0JCXHU2NkE2IiwgICAgICAgICAgICAgLy8gMTA2NSBKaXJ5YWt1CisgICAgICAgICAgICAiXHU1RUY2XHU0RTQ1IiwgICAgICAgICAgICAgLy8gMTA2OSBFbmt5dQorICAgICAgICAgICAgIlx1NjI3Rlx1NEZERCIsICAgICAgICAgICAgIC8vIDEwNzQgU2hvaG8KKyAgICAgICAgICAgICJcdTYyN0ZcdTY2QTYiLCAgICAgICAgICAgICAvLyAxMDc3IFNob3J5YWt1CisgICAgICAgICAgICAiXHU2QzM4XHU0RkREIiwgICAgICAgICAgICAgLy8gMTA4MSBFaWhvCisgICAgICAgICAgICAiXHU1RkRDXHU1RkIzIiwgICAgICAgICAgICAgLy8gMTA4NCBPdG9rdQorICAgICAgICAgICAgIlx1NUJEQlx1NkNCQiIsICAgICAgICAgICAgIC8vIDEwODcgS2FuamkKKyAgICAgICAgICAgICJcdTU2MDlcdTRGREQiLCAgICAgICAgICAgICAvLyAxMDk0IEthaG8KKyAgICAgICAgICAgICJcdTZDMzhcdTk1NzciLCAgICAgICAgICAgICAvLyAxMDk2IEVpY2hvCisgICAgICAgICAgICAiXHU2MjdGXHU1RkIzIiwgICAgICAgICAgICAgLy8gMTA5NyBTaG90b2t1CisgICAgICAgICAgICAiXHU1RUI3XHU1NDhDIiwgICAgICAgICAgICAgLy8gMTA5OSBLb3dhCisgICAgICAgICAgICAiXHU5NTc3XHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTEwNCBDaG9qaQorICAgICAgICAgICAgIlx1NTYwOVx1NjI3RiIsICAgICAgICAgICAgIC8vIDExMDYgS2FzaG8KKyAgICAgICAgICAgICJcdTU5MjlcdTRFQzEiLCAgICAgICAgICAgICAvLyAxMTA4IFRlbm5pbgorICAgICAgICAgICAgIlx1NTkyOVx1NkMzOCIsICAgICAgICAgICAgIC8vIDExMTAgVGVuLWVpCisgICAgICAgICAgICAiXHU2QzM4XHU0RTQ1IiwgICAgICAgICAgICAgLy8gMTExMyBFaWt5dQorICAgICAgICAgICAgIlx1NTE0M1x1NkMzOCIsICAgICAgICAgICAgIC8vIDExMTggR2VuLWVpCisgICAgICAgICAgICAiXHU0RkREXHU1Qjg5IiwgICAgICAgICAgICAgLy8gMTEyMCBIb2FuCisgICAgICAgICAgICAiXHU1OTI5XHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTEyNCBUZW5qaQorICAgICAgICAgICAgIlx1NTkyN1x1NkNCQiIsICAgICAgICAgICAgIC8vIDExMjYgRGFpamkKKyAgICAgICAgICAgICJcdTU5MjlcdTYyN0YiLCAgICAgICAgICAgICAvLyAxMTMxIFRlbnNobworICAgICAgICAgICAgIlx1OTU3N1x1NjI3RiIsICAgICAgICAgICAgIC8vIDExMzIgQ2hvc2hvCisgICAgICAgICAgICAiXHU0RkREXHU1RUY2IiwgICAgICAgICAgICAgLy8gMTEzNSBIb2VuCisgICAgICAgICAgICAiXHU2QzM4XHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTE0MSBFaWppCisgICAgICAgICAgICAiXHU1RUI3XHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTE0MiBLb2ppCisgICAgICAgICAgICAiXHU1OTI5XHU5OTBBIiwgICAgICAgICAgICAgLy8gMTE0NCBUZW55bworICAgICAgICAgICAgIlx1NEU0NVx1NUI4OSIsICAgICAgICAgICAgIC8vIDExNDUgS3l1YW4KKyAgICAgICAgICAgICJcdTRFQzFcdTVFNzMiLCAgICAgICAgICAgICAvLyAxMTUxIE5pbnBlaQorICAgICAgICAgICAgIlx1NEU0NVx1NUJGRiIsICAgICAgICAgICAgIC8vIDExNTQgS3l1anUKKyAgICAgICAgICAgICJcdTRGRERcdTUxNDMiLCAgICAgICAgICAgICAvLyAxMTU2IEhvZ2VuCisgICAgICAgICAgICAiXHU1RTczXHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTE1OSBIZWlqaQorICAgICAgICAgICAgIlx1NkMzOFx1NjZBNiIsICAgICAgICAgICAgIC8vIDExNjAgRWlyeWFrdQorICAgICAgICAgICAgIlx1NUZEQ1x1NEZERCIsICAgICAgICAgICAgIC8vIDExNjEgT2hvCisgICAgICAgICAgICAiXHU5NTc3XHU1QkRCIiwgICAgICAgICAgICAgLy8gMTE2MyBDaG9rYW4KKyAgICAgICAgICAgICJcdTZDMzhcdTRFMDciLCAgICAgICAgICAgICAvLyAxMTY1IEVpbWFuCisgICAgICAgICAgICAiXHU0RUMxXHU1Qjg5IiwgICAgICAgICAgICAgLy8gMTE2NiBOaW4tYW4KKyAgICAgICAgICAgICJcdTU2MDlcdTVGREMiLCAgICAgICAgICAgICAvLyAxMTY5IEthbworICAgICAgICAgICAgIlx1NjI3Rlx1NUI4OSIsICAgICAgICAgICAgIC8vIDExNzEgU2hvYW4KKyAgICAgICAgICAgICJcdTVCODlcdTUxNDMiLCAgICAgICAgICAgICAvLyAxMTc1IEFuZ2VuCisgICAgICAgICAgICAiXHU2Q0JCXHU2MjdGIiwgICAgICAgICAgICAgLy8gMTE3NyBKaXNobworICAgICAgICAgICAgIlx1OTkwQVx1NTQ4QyIsICAgICAgICAgICAgIC8vIDExODEgWW93YQorICAgICAgICAgICAgIlx1NUJGRlx1NkMzOCIsICAgICAgICAgICAgIC8vIDExODIgSnVlaQorICAgICAgICAgICAgIlx1NTE0M1x1NjZBNiIsICAgICAgICAgICAgIC8vIDExODQgR2Vucnl1a3UKKyAgICAgICAgICAgICJcdTY1ODdcdTZDQkIiLCAgICAgICAgICAgICAvLyAxMTg1IEJ1bmppCisgICAgICAgICAgICAiXHU1RUZBXHU0RTQ1IiwgICAgICAgICAgICAgLy8gMTE5MCBLZW5reXUKKyAgICAgICAgICAgICJcdTZCNjNcdTZDQkIiLCAgICAgICAgICAgICAvLyAxMTk5IFNob2ppCisgICAgICAgICAgICAiXHU1RUZBXHU0RUMxIiwgICAgICAgICAgICAgLy8gMTIwMSBLZW5uaW4KKyAgICAgICAgICAgICJcdTUxNDNcdTRFNDUiLCAgICAgICAgICAgICAvLyAxMjA0IEdlbmt5dQorICAgICAgICAgICAgIlx1NUVGQVx1NkMzOCIsICAgICAgICAgICAgIC8vIDEyMDYgS2VuLWVpCisgICAgICAgICAgICAiXHU2MjdGXHU1MTQzIiwgICAgICAgICAgICAgLy8gMTIwNyBTaG9nZW4KKyAgICAgICAgICAgICJcdTVFRkFcdTY2QTYiLCAgICAgICAgICAgICAvLyAxMjExIEtlbnJ5YWt1CisgICAgICAgICAgICAiXHU1RUZBXHU0RkREIiwgICAgICAgICAgICAgLy8gMTIxMyBLZW5wbworICAgICAgICAgICAgIlx1NjI3Rlx1NEU0NSIsICAgICAgICAgICAgIC8vIDEyMTkgU2hva3l1CisgICAgICAgICAgICAiXHU4QzlFXHU1RkRDIiwgICAgICAgICAgICAgLy8gMTIyMiBKb28KKyAgICAgICAgICAgICJcdTUxNDNcdTRFQzEiLCAgICAgICAgICAgICAvLyAxMjI0IEdlbm5pbgorICAgICAgICAgICAgIlx1NTYwOVx1Nzk4NCIsICAgICAgICAgICAgIC8vIDEyMjUgS2Fyb2t1CisgICAgICAgICAgICAiXHU1Qjg5XHU4QzlFIiwgICAgICAgICAgICAgLy8gMTIyNyBBbnRlaQorICAgICAgICAgICAgIlx1NUJEQlx1NTU5QyIsICAgICAgICAgICAgIC8vIDEyMjkgS2Fua2kKKyAgICAgICAgICAgICJcdThDOUVcdTZDMzgiLCAgICAgICAgICAgICAvLyAxMjMyIEpvZWkKKyAgICAgICAgICAgICJcdTU5MjlcdTc5OEYiLCAgICAgICAgICAgICAvLyAxMjMzIFRlbXB1a3UKKyAgICAgICAgICAgICJcdTY1ODdcdTY2QTYiLCAgICAgICAgICAgICAvLyAxMjM0IEJ1bnJ5YWt1CisgICAgICAgICAgICAiXHU1NjA5XHU3OThFIiwgICAgICAgICAgICAgLy8gMTIzNSBLYXRlaQorICAgICAgICAgICAgIlx1NjZBNlx1NEVDMSIsICAgICAgICAgICAgIC8vIDEyMzggUnlha3VuaW4KKyAgICAgICAgICAgICJcdTVFRjZcdTVGREMiLCAgICAgICAgICAgICAvLyAxMjM5IEVuLW8KKyAgICAgICAgICAgICJcdTRFQzFcdTZDQkIiLCAgICAgICAgICAgICAvLyAxMjQwIE5pbmppCisgICAgICAgICAgICAiXHU1QkRCXHU1MTQzIiwgICAgICAgICAgICAgLy8gMTI0MyBLYW5nZW4KKyAgICAgICAgICAgICJcdTVCOURcdTZDQkIiLCAgICAgICAgICAgICAvLyAxMjQ3IEhvamkKKyAgICAgICAgICAgICJcdTVFRkFcdTk1NzciLCAgICAgICAgICAgICAvLyAxMjQ5IEtlbmNobworICAgICAgICAgICAgIlx1NUVCN1x1NTE0MyIsICAgICAgICAgICAgIC8vIDEyNTYgS29nZW4KKyAgICAgICAgICAgICJcdTZCNjNcdTU2MDkiLCAgICAgICAgICAgICAvLyAxMjU3IFNob2thCisgICAgICAgICAgICAiXHU2QjYzXHU1MTQzIiwgICAgICAgICAgICAgLy8gMTI1OSBTaG9nZW4KKyAgICAgICAgICAgICJcdTY1ODdcdTVGREMiLCAgICAgICAgICAgICAvLyAxMjYwIEJ1bi1vCisgICAgICAgICAgICAiXHU1RjE4XHU5NTc3IiwgICAgICAgICAgICAgLy8gMTI2MSBLb2NobworICAgICAgICAgICAgIlx1NjU4N1x1NkMzOCIsICAgICAgICAgICAgIC8vIDEyNjQgQnVuLWVpCisgICAgICAgICAgICAiXHU1RUZBXHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTI3NSBLZW5qaQorICAgICAgICAgICAgIlx1NUYxOFx1NUI4OSIsICAgICAgICAgICAgIC8vIDEyNzggS29hbgorICAgICAgICAgICAgIlx1NkI2M1x1NUZEQyIsICAgICAgICAgICAgIC8vIDEyODggU2hvbworICAgICAgICAgICAgIlx1NkMzOFx1NEVDMSIsICAgICAgICAgICAgIC8vIDEyOTMgRWluaW4KKyAgICAgICAgICAgICJcdTZCNjNcdTVCODkiLCAgICAgICAgICAgICAvLyAxMjk5IFNob2FuCisgICAgICAgICAgICAiXHU0RTdFXHU1MTQzIiwgICAgICAgICAgICAgLy8gMTMwMiBLZW5nZW4KKyAgICAgICAgICAgICJcdTU2MDlcdTUxNDMiLCAgICAgICAgICAgICAvLyAxMzAzIEthZ2VuCisgICAgICAgICAgICAiXHU1RkIzXHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTMwNiBUb2t1amkKKyAgICAgICAgICAgICJcdTVFRjZcdTYxNzYiLCAgICAgICAgICAgICAvLyAxMzA4IEVua2VpCisgICAgICAgICAgICAiXHU1RkRDXHU5NTc3IiwgICAgICAgICAgICAgLy8gMTMxMSBPY2hvCisgICAgICAgICAgICAiXHU2QjYzXHU1NDhDIiwgICAgICAgICAgICAgLy8gMTMxMiBTaG93YQorICAgICAgICAgICAgIlx1NjU4N1x1NEZERCIsICAgICAgICAgICAgIC8vIDEzMTcgQnVucG8KKyAgICAgICAgICAgICJcdTUxNDNcdTVGREMiLCAgICAgICAgICAgICAvLyAxMzE5IEdlbm8KKyAgICAgICAgICAgICJcdTUxNDNcdTRFQTgiLCAgICAgICAgICAgICAvLyAxMzIxIEdlbmt5bworICAgICAgICAgICAgIlx1NkI2M1x1NEUyRCIsICAgICAgICAgICAgIC8vIDEzMjQgU2hvY2h1CisgICAgICAgICAgICAiXHU1NjA5XHU2NkE2IiwgICAgICAgICAgICAgLy8gMTMyNiBLYXJla2kKKyAgICAgICAgICAgICJcdTUxNDNcdTVGQjMiLCAgICAgICAgICAgICAvLyAxMzI5IEdlbnRva3UKKyAgICAgICAgICAgICJcdTUxNDNcdTVGMTgiLCAgICAgICAgICAgICAvLyAxMzMxIEdlbmtvCisgICAgICAgICAgICAiXHU1RUZBXHU2QjY2IiwgICAgICAgICAgICAgLy8gMTMzNCBLZW1tdQorICAgICAgICAgICAgIlx1NUVGNlx1NTE0MyIsICAgICAgICAgICAgIC8vIDEzMzYgRW5nZW4KKyAgICAgICAgICAgICJcdTgyMDhcdTU2RkQiLCAgICAgICAgICAgICAvLyAxMzQwIEtva29rdQorICAgICAgICAgICAgIlx1NkI2M1x1NUU3MyIsICAgICAgICAgICAgIC8vIDEzNDYgU2hvaGVpCisgICAgICAgICAgICAiXHU1RUZBXHU1RkIzIiwgICAgICAgICAgICAgLy8gMTM3MCBLZW50b2t1CisgICAgICAgICAgICAiXHU2NTg3XHU0RTJEIiwgICAgICAgICAgICAgLy8gMTM3MiBCdW5jaHUKKyAgICAgICAgICAgICJcdTU5MjlcdTYzODgiLCAgICAgICAgICAgICAvLyAxMzc1IFRlbmp1CisgICAgICAgICAgICAiXHU1RjE4XHU1NDhDIiwgICAgICAgICAgICAgLy8gMTM4MSBLb3dhCisgICAgICAgICAgICAiXHU1MTQzXHU0RTJEIiwgICAgICAgICAgICAgLy8gMTM4NCBHZW5jaHUKKyAgICAgICAgICAgICJcdTgxRjNcdTVGQjMiLCAgICAgICAgICAgICAvLyAxMzg0IE1laXRva3UKKyAgICAgICAgICAgICJcdTVFQjdcdTY2QTYiLCAgICAgICAgICAgICAvLyAxMzc5IEtvcnlha3UKKyAgICAgICAgICAgICJcdTU2MDlcdTYxNzYiLCAgICAgICAgICAgICAvLyAxMzg3IEtha2VpCisgICAgICAgICAgICAiXHU1RUI3XHU1RkRDIiwgICAgICAgICAgICAgLy8gMTM4OSBLb28KKyAgICAgICAgICAgICJcdTY2MEVcdTVGQjMiLCAgICAgICAgICAgICAvLyAxMzkwIE1laXRva3UKKyAgICAgICAgICAgICJcdTVGRENcdTZDMzgiLCAgICAgICAgICAgICAvLyAxMzk0IE9laQorICAgICAgICAgICAgIlx1NkI2M1x1OTU3NyIsICAgICAgICAgICAgIC8vIDE0MjggU2hvY2hvCisgICAgICAgICAgICAiXHU2QzM4XHU0RUFCIiwgICAgICAgICAgICAgLy8gMTQyOSBFaWt5bworICAgICAgICAgICAgIlx1NTYwOVx1NTQwOSIsICAgICAgICAgICAgIC8vIDE0NDEgS2FraXRzdQorICAgICAgICAgICAgIlx1NjU4N1x1NUI4OSIsICAgICAgICAgICAgIC8vIDE0NDQgQnVuLWFuCisgICAgICAgICAgICAiXHU1QjlEXHU1RkIzIiwgICAgICAgICAgICAgLy8gMTQ0OSBIb3Rva3UKKyAgICAgICAgICAgICJcdTRFQUJcdTVGQjMiLCAgICAgICAgICAgICAvLyAxNDUyIEt5b3Rva3UKKyAgICAgICAgICAgICJcdTVFQjdcdTZCNjMiLCAgICAgICAgICAgICAvLyAxNDU1IEtvc2hvCisgICAgICAgICAgICAiXHU5NTc3XHU3OTg0IiwgICAgICAgICAgICAgLy8gMTQ1NyBDaG9yb2t1CisgICAgICAgICAgICAiXHU1QkRCXHU2QjYzIiwgICAgICAgICAgICAgLy8gMTQ2MCBLYW5zaG8KKyAgICAgICAgICAgICJcdTY1ODdcdTZCNjMiLCAgICAgICAgICAgICAvLyAxNDY2IEJ1bnNobworICAgICAgICAgICAgIlx1NUZEQ1x1NEVDMSIsICAgICAgICAgICAgIC8vIDE0NjcgT25pbgorICAgICAgICAgICAgIlx1NjU4N1x1NjYwRSIsICAgICAgICAgICAgIC8vIDE0NjkgQnVubWVpCisgICAgICAgICAgICAiXHU5NTc3XHU0RUFCIiwgICAgICAgICAgICAgLy8gMTQ4NyBDaG9reW8KKyAgICAgICAgICAgICJcdTVFRjZcdTVGQjMiLCAgICAgICAgICAgICAvLyAxNDg5IEVudG9rdQorICAgICAgICAgICAgIlx1NjYwRVx1NUZEQyIsICAgICAgICAgICAgIC8vIDE0OTIgTWVpbworICAgICAgICAgICAgIlx1NjU4N1x1NEU4MCIsICAgICAgICAgICAgIC8vIDE1MDEgQnVua2kKKyAgICAgICAgICAgICJcdTZDMzhcdTZCNjMiLCAgICAgICAgICAgICAvLyAxNTA0IEVpc2hvCisgICAgICAgICAgICAiXHU1OTI3XHU2QzM4IiwgICAgICAgICAgICAgLy8gMTUyMSBUYWllaQorICAgICAgICAgICAgIlx1NEVBQlx1Nzk4NCIsICAgICAgICAgICAgIC8vIDE1MjggS3lvcm9rdQorICAgICAgICAgICAgIlx1NTkyOVx1NjU4NyIsICAgICAgICAgICAgIC8vIDE1MzIgVGVubW9uCisgICAgICAgICAgICAiXHU1RjE4XHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTU1NSBLb2ppCisgICAgICAgICAgICAiXHU2QzM4XHU3OTg0IiwgICAgICAgICAgICAgLy8gMTU1OCBFaXJva3UKKyAgICAgICAgICAgICJcdTUxNDNcdTRFODAiLCAgICAgICAgICAgICAvLyAxNTcwIEdlbmtpCisgICAgICAgICAgICAiXHU1OTI5XHU2QjYzIiwgICAgICAgICAgICAgLy8gMTU3MyBUZW5zaG8KKyAgICAgICAgICAgICJcdTY1ODdcdTc5ODQiLCAgICAgICAgICAgICAvLyAxNTkyIEJ1bnJva3UKKyAgICAgICAgICAgICJcdTYxNzZcdTk1NzciLCAgICAgICAgICAgICAvLyAxNTk2IEtlaWNobworICAgICAgICAgICAgIlx1NTE0M1x1NTQ4QyIsICAgICAgICAgICAgIC8vIDE2MTUgR2Vud2EKKyAgICAgICAgICAgICJcdTVCREJcdTZDMzgiLCAgICAgICAgICAgICAvLyAxNjI0IEthbi1laQorICAgICAgICAgICAgIlx1NkI2M1x1NEZERCIsICAgICAgICAgICAgIC8vIDE2NDQgU2hvaG8KKyAgICAgICAgICAgICJcdTYxNzZcdTVCODkiLCAgICAgICAgICAgICAvLyAxNjQ4IEtlaWFuCisgICAgICAgICAgICAiXHU2MjdGXHU1RkRDIiwgICAgICAgICAgICAgLy8gMTY1MiBTaG9vCisgICAgICAgICAgICAiXHU2NjBFXHU2NkE2IiwgICAgICAgICAgICAgLy8gMTY1NSBNZWlyeWFrdQorICAgICAgICAgICAgIlx1NEUwN1x1NkNCQiIsICAgICAgICAgICAgIC8vIDE2NTggTWFuamkKKyAgICAgICAgICAgICJcdTVCREJcdTY1ODciLCAgICAgICAgICAgICAvLyAxNjYxIEthbmJ1bgorICAgICAgICAgICAgIlx1NUVGNlx1NUI5RCIsICAgICAgICAgICAgIC8vIDE2NzMgRW5wbworICAgICAgICAgICAgIlx1NTkyOVx1NTQ4QyIsICAgICAgICAgICAgIC8vIDE2ODEgVGVud2EKKyAgICAgICAgICAgICJcdThDOUVcdTRFQUIiLCAgICAgICAgICAgICAvLyAxNjg0IEpva3lvCisgICAgICAgICAgICAiXHU1MTQzXHU3OTg0IiwgICAgICAgICAgICAgLy8gMTY4OCBHZW5yb2t1CisgICAgICAgICAgICAiXHU1QjlEXHU2QzM4IiwgICAgICAgICAgICAgLy8gMTcwNCBIb2VpCisgICAgICAgICAgICAiXHU2QjYzXHU1RkIzIiwgICAgICAgICAgICAgLy8gMTcxMSBTaG90b2t1CisgICAgICAgICAgICAiXHU0RUFCXHU0RkREIiwgICAgICAgICAgICAgLy8gMTcxNiBLeW9obworICAgICAgICAgICAgIlx1NTE0M1x1NjU4NyIsICAgICAgICAgICAgIC8vIDE3MzYgR2VuYnVuCisgICAgICAgICAgICAiXHU1QkRCXHU0RkREIiwgICAgICAgICAgICAgLy8gMTc0MSBLYW5wbworICAgICAgICAgICAgIlx1NUVGNlx1NEVBQiIsICAgICAgICAgICAgIC8vIDE3NDQgRW5reW8KKyAgICAgICAgICAgICJcdTVCREJcdTVFRjYiLCAgICAgICAgICAgICAvLyAxNzQ4IEthbi1lbgorICAgICAgICAgICAgIlx1NUI5RFx1NjZBNiIsICAgICAgICAgICAgIC8vIDE3NTEgSG9yeWFrdQorICAgICAgICAgICAgIlx1NjYwRVx1NTQ4QyIsICAgICAgICAgICAgIC8vIDE3NjQgTWVpd2EKKyAgICAgICAgICAgICJcdTVCODlcdTZDMzgiLCAgICAgICAgICAgICAvLyAxNzcyIEFuLWVpCisgICAgICAgICAgICAiXHU1OTI5XHU2NjBFIiwgICAgICAgICAgICAgLy8gMTc4MSBUZW5tZWkKKyAgICAgICAgICAgICJcdTVCREJcdTY1M0YiLCAgICAgICAgICAgICAvLyAxNzg5IEthbnNlaQorICAgICAgICAgICAgIlx1NEVBQlx1NTQ4QyIsICAgICAgICAgICAgIC8vIDE4MDEgS3lvd2EKKyAgICAgICAgICAgICJcdTY1ODdcdTUzMTYiLCAgICAgICAgICAgICAvLyAxODA0IEJ1bmthCisgICAgICAgICAgICAiXHU2NTg3XHU2NTNGIiwgICAgICAgICAgICAgLy8gMTgxOCBCdW5zZWkKKyAgICAgICAgICAgICJcdTU5MjlcdTRGREQiLCAgICAgICAgICAgICAvLyAxODMwIFRlbnBvCisgICAgICAgICAgICAiXHU1RjE4XHU1MzE2IiwgICAgICAgICAgICAgLy8gMTg0NCBLb2thCisgICAgICAgICAgICAiXHU1NjA5XHU2QzM4IiwgICAgICAgICAgICAgLy8gMTg0OCBLYWVpCisgICAgICAgICAgICAiXHU1Qjg5XHU2NTNGIiwgICAgICAgICAgICAgLy8gMTg1NCBBbnNlaQorICAgICAgICAgICAgIlx1NEUwN1x1NUVGNiIsICAgICAgICAgICAgIC8vIDE4NjAgTWFuLWVuCisgICAgICAgICAgICAiXHU2NTg3XHU0RTQ1IiwgICAgICAgICAgICAgLy8gMTg2MSBCdW5reXUKKyAgICAgICAgICAgICJcdTUxNDNcdTZDQkIiLCAgICAgICAgICAgICAvLyAxODY0IEdlbmppCisgICAgICAgICAgICAiXHU2MTc2XHU1RkRDIiwgICAgICAgICAgICAgLy8gMTg2NSBLZWlvCisgICAgICAgICAgICAiXHU2NjBFXHU2Q0JCIiwgICAgICAgICAgICAgLy8gMTg2OCBNZWlqaQorICAgICAgICAgICAgIlx1NTkyN1x1NkI2MyIsICAgICAgICAgICAgIC8vIDE5MTIgVGFpc2hvCisgICAgICAgICAgICAiXHU2NjJEXHU1NDhDIiwgICAgICAgICAgICAgLy8gMTkyNiBTaG93YQorICAgICAgICAgICAgIlx1NUU3M1x1NjIxMCIsICAgICAgICAgICAgIC8vIDE5ODkgSGVpc2VpCisgICAgICAgIH0gfSwKKyAgICB9OworCisgICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gZkNvbnRlbnRzOworICAgIH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0xvY2FsZVNjcmlwdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Mb2NhbGVTY3JpcHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMTg0ZTkxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9Mb2NhbGVTY3JpcHQuamF2YQpAQCAtMCwwICsxLDQyNCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7IAoraW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVVNjcmlwdDsKKworcHVibGljIGNsYXNzIExvY2FsZVNjcmlwdCBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7IAorCisgICAgICBwdWJsaWMgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsgCisgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZVNjcmlwdDsKKyAgICAgIH0KKworICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBsb2NhbGVTY3JpcHQgPSBuZXcgT2JqZWN0W11bXSB7CisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJhZiIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJhbSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5FVEhJT1BJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJhciIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5BUkFCSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAiYXoiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuQ1lSSUxMSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAiYmUiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuQ1lSSUxMSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAiYmciLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuQ1lSSUxMSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAiYm4iLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuQkVOR0FMSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJjYSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJjcyIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJkYSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJkZSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJkaXYiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuVEhBQU5BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgImVsIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkdSRUVLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgImVuIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgImVvIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgImVzIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgImV0IiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgImV1IiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgImZhIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkFSQUJJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJmaSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJmbyIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJmciIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJnYSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJnbCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJndSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5HVUpBUkFUSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJndiIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJoZSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5IRUJSRVcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAiaGkiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuREVWQU5BR0FSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJociIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJodSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJoeSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5BUk1FTklBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJpZCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJpcyIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJpdCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJpdyIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5IRUJSRVcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAiamEiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuS0FUQUtBTkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5ISVJBR0FOQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkhBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJrYSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5HRU9SR0lBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJrayIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5DWVJJTExJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJrbCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJrbiIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5LQU5OQURBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgImtvIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkhBTkdVTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkhBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJrb2siLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuREVWQU5BR0FSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJrdyIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJreSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJsdCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJsdiIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJtayIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5DWVJJTExJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJtbiIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5DWVJJTExJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJtciIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5ERVZBTkFHQVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgIm1zIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgIm10IiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgIm5iIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgIm5sIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgIm5uIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInBhIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkdVUk1VS0hJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInBsIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInB0IiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInJvIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInJvb3QiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuTEFUSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAicnUiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuQ1lSSUxMSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAic2EiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuREVWQU5BR0FSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJzaCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJzayIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJzbCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJzcSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJzciIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5DWVJJTExJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJzdiIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJzdyIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJzeXIiLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuU1lSSUFDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInRhIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LlRBTUlMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInRlIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LlRFTFVHVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJ0aCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5USEFJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInRyIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkxBVElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInR0IiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkNZUklMTElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInVrIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkNZUklMTElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgInVyIiwgbmV3IGludFtdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0LkFSQUJJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJ1eiIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5DWVJJTExJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJ2aSIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5MQVRJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0sCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICJ6aCIsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdC5IQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgICAgICB7CisgICAgICAgICAgICAgICAiemhfVFciLCBuZXcgaW50W10geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuSEFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTY3JpcHQuQk9QT01PRk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9LAorICAgICAgfTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1Jlc291cmNlUmVhZGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1Jlc291cmNlUmVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjkxM2MzZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvUmVzb3VyY2VSZWFkZXIuamF2YQpAQCAtMCwwICsxLDEyNyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvUmVzb3VyY2VSZWFkZXIuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjM3OjQ4ICQKKyAqICRSZXZpc2lvbjogMS41ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmltcGwuZGF0YTsKKworaW1wb3J0IGphdmEuaW8uKjsKKworLyoqCisgKiBBIHJlYWRlciBmb3IgdGV4dCByZXNvdXJjZSBkYXRhIGluIHRoZSBjdXJyZW50IHBhY2thZ2UuICBUaGUKKyAqIHJlc291cmNlIGRhdGEgaXMgbG9hZGVkIHRocm91Z2ggdGhlIGNsYXNzIGxvYWRlciwgc28gaXQgd2lsbAorICogdHlwaWNhbGx5IGJlIGEgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlICouY2xhc3MgZmlsZXMsIG9yCisgKiBhIGZpbGUgd2l0aGluIGEgSkFSIGZpbGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgc3ViZGlyZWN0b3J5LiAgVGhlCisgKiBmaWxlIG11c3QgYmUgYSB0ZXh0IGZpbGUgaW4gb25lIG9mIHRoZSBzdXBwb3J0ZWQgZW5jb2RpbmdzOyB3aGVuIHRoZQorICogcmVzb3VyY2UgaXMgb3BlbmVkIGJ5IGNvbnN0cnVjdGluZyBhIDxjb2RlPlJlc291cmNlUmVhZGVyPC9jb2RlPgorICogb2JqZWN0IHRoZSBlbmNvZGluZyBpcyBzcGVjaWZpZWQuCisgKgorICogPHA+QWx0aG91Z2ggdGhpcyBjbGFzcyBoYXMgYSBwdWJsaWMgQVBJLCBpdCBpcyBkZXNpZ25lZCBmb3IKKyAqIGludGVybmFsIHVzZSBieSBjbGFzc2VzIGluIHRoZSA8Y29kZT5jb20uaWJtLmljdS50ZXh0PC9jb2RlPiBwYWNrYWdlLgorICoKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqLworcHVibGljIGNsYXNzIFJlc291cmNlUmVhZGVyIHsKKyAgICBwcml2YXRlIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlcjsKKyAgICBwcml2YXRlIFN0cmluZyByZXNvdXJjZU5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgZW5jb2Rpbmc7IC8vIG51bGwgZm9yIGRlZmF1bHQgZW5jb2RpbmcKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNSZXNldDsgLy8gVFJVRSBpZiB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSByZWFkZXIgb2JqZWN0IGZvciB0aGUgdGV4dCBmaWxlIG9mIHRoZSBnaXZlbiBuYW1lCisgICAgICogaW4gdGhpcyBwYWNrYWdlLCB1c2luZyB0aGUgZ2l2ZW4gZW5jb2RpbmcuCisgICAgICogQHBhcmFtIHJlc291cmNlTmFtZSB0aGUgbmFtZSBvZiB0aGUgdGV4dCBmaWxlIGxvY2F0ZWQgaW4gdGhpcworICAgICAqIHBhY2thZ2UKKyAgICAgKiBAcGFyYW0gZW5jb2RpbmcgdGhlIGVuY29kaW5nIG9mIHRoZSB0ZXh0IGZpbGU7IGlmIHVuc3VwcG9ydGVkCisgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bgorICAgICAqIEBleGNlcHRpb24gVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBpZgorICAgICAqIDxjb2RlPmVuY29kaW5nPC9jb2RlPiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBKREsuCisgICAgICovCisgICAgcHVibGljIFJlc291cmNlUmVhZGVyKFN0cmluZyByZXNvdXJjZU5hbWUsIFN0cmluZyBlbmNvZGluZykKKyAgICAgICAgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24geworCisgICAgICAgIHRoaXMucmVzb3VyY2VOYW1lID0gcmVzb3VyY2VOYW1lOworICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7CisgICAgICAgIGlzUmVzZXQgPSBmYWxzZTsKKyAgICAgICAgX3Jlc2V0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgcmVhZGVyIG9iamVjdCBmb3IgdGhlIHRleHQgZmlsZSBvZiB0aGUgZ2l2ZW4gbmFtZQorICAgICAqIGluIHRoaXMgcGFja2FnZSwgdXNpbmcgdGhlIGRlZmF1bHQgZW5jb2RpbmcuCisgICAgICogQHBhcmFtIHJlc291cmNlTmFtZSB0aGUgbmFtZSBvZiB0aGUgdGV4dCBmaWxlIGxvY2F0ZWQgaW4gdGhpcworICAgICAqIHBhY2thZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgUmVzb3VyY2VSZWFkZXIoU3RyaW5nIHJlc291cmNlTmFtZSkgeworICAgICAgICB0aGlzLnJlc291cmNlTmFtZSA9IHJlc291cmNlTmFtZTsKKyAgICAgICAgdGhpcy5lbmNvZGluZyA9IG51bGw7CisgICAgICAgIGlzUmVzZXQgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIF9yZXNldCgpOworICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHt9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVhZCBhbmQgcmV0dXJuIHRoZSBuZXh0IGxpbmUgb2YgdGhlIGZpbGUgb3IgPGNvZGU+bnVsbDwvY29kZT4KKyAgICAgKiBpZiB0aGUgZW5kIG9mIHRoZSBmaWxlIGhhcyBiZWVuIHJlYWNoZWQuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyByZWFkTGluZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChpc1Jlc2V0KSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgQk9NcworICAgICAgICAgICAgaXNSZXNldCA9IGZhbHNlOworICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PSAnXHVGRkVGJyB8fAorICAgICAgICAgICAgICAgIGxpbmUuY2hhckF0KDApID09ICdcdUZFRkYnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxpbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkTGluZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc2V0IHRoaXMgcmVhZGVyIHNvIHRoYXQgdGhlIG5leHQgY2FsbCB0bworICAgICAqIDxjb2RlPnJlYWRMaW5lKCk8L2NvZGU+IHJldHVybnMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUKKyAgICAgKiBhZ2Fpbi4gIFRoaXMgaXMgYSBzb21ld2hhdCBleHBlbnNpdmUgY2FsbCwgaG93ZXZlciwgY2FsbGluZworICAgICAqIDxjb2RlPnJlc2V0KCk8L2NvZGU+IGFmdGVyIGNhbGxpbmcgaXQgdGhlIGZpcnN0IHRpbWUgZG9lcworICAgICAqIG5vdGhpbmcgaWYgPGNvZGU+cmVhZExpbmUoKTwvY29kZT4gaGFzIG5vdCBiZWVuIGNhbGxlZCBpbgorICAgICAqIGJldHdlZW4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVzZXQoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBfcmVzZXQoKTsKKyAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7fQorICAgICAgICAvLyBXZSBzd2FsbG93IHRoaXMgZXhjZXB0aW9uLCBpZiB0aGVyZSBpcyBvbmUuICBJZiB0aGUgZW5jb2RpbmcgaXMKKyAgICAgICAgLy8gaW52YWxpZCwgdGhlIGNvbnN0cnVjdG9yIHdpbGwgaGF2ZSB0aHJvd24gdGhpcyBleGNlcHRpb24gYWxyZWFkeSBhbmQKKyAgICAgICAgLy8gdGhlIGNhbGxlciBzaG91bGRuJ3QgdXNlIHRoZSBvYmplY3QgYWZ0ZXJ3YXJkcy4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXNldCB0byB0aGUgc3RhcnQgYnkgcmVjb25zdHJ1Y3RpbmcgdGhlIHN0cmVhbSBhbmQgcmVhZGVycy4KKyAgICAgKiBXZSBjb3VsZCBhbHNvIHVzZSBtYXJrKCkgYW5kIHJlc2V0KCkgb24gdGhlIHN0cmVhbSBvciByZWFkZXIsCisgICAgICogYnV0IHRoYXQgd291bGQgY2F1c2UgdGhlbSB0byBrZWVwIHRoZSBzdHJlYW0gZGF0YSBhcm91bmQgaW4KKyAgICAgKiBtZW1vcnkuICBXZSBkb24ndCB3YW50IHRoYXQgYmVjYXVzZSBzb21lIG9mIHRoZSByZXNvdXJjZSBmaWxlcworICAgICAqIGFyZSBsYXJnZSwgZS5nLiwgNDAway4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgX3Jlc2V0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24geworICAgICAgICBpZiAoaXNSZXNldCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHJlc291cmNlTmFtZSk7CisgICAgICAgIGlmIChpcyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW4ndCBvcGVuICIgKyByZXNvdXJjZU5hbWUpOworICAgICAgICB9CisgICAgICAgIElucHV0U3RyZWFtUmVhZGVyIGlzciA9CisgICAgICAgICAgICAoZW5jb2RpbmcgPT0gbnVsbCkgPyBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcywgZW5jb2RpbmcpOworICAgICAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoaXNyKTsKKyAgICAgICAgaXNSZXNldCA9IHRydWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9BbnlfQWNjZW50cy50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0FueV9BY2NlbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OTg3Mzg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9BbnlfQWNjZW50cy50eHQKQEAgLTAsMCArMSwyOTQgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfQW55X0FjY2VudHMudHh0LHYgJAorIyAkRGF0ZTogMjAwMS8wOS8yNSAyMjo1ODo1NSAkCisjICRSZXZpc2lvbjogMS4zICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6OiBORkQgKE5GQykgOworCisjIHRvIGRvOiBtYWtlIHJldmVyc2libGUKKworIyBkZWZpbmUgc3BlY2lhbCBjb252ZXJzaW9uIGNoYXJhY3RlcnMuCisjIHZhcmllbnRzIG9mIHRoaXMgY291bGQgdXNlIGRpZmZlcmVudCBjaGFyYWN0ZXJzLCBvciBzZXQgb25lIG9yIHRoZSBvdGhlciB0byBudWxsLgorCiskcHJlID0gXDwgOworJHBvc3QgPSBcPiA7CisKKyMgUHJvdmlkZSBrZXlib2FyZCBlcXVpdmFsZW50cyBmb3IgY29tbW9uIGRpYWNyaXRpY3MgdXNlZCBpbiB0cmFuc2xpdGVyYXRpb24KKworJHByZSBcYCAkcG9zdCA8PiBcdTAzMDAgOyAjIENPTUJJTklORyBHUkFWRSBBQ0NFTlQKKyRwcmUgXCcgJHBvc3QgPD4gXHUwMzAxIDsgIyBDT01CSU5JTkcgQUNVVEUgQUNDRU5UCiskcHJlIFxeICRwb3N0IDw+IFx1MDMwMiA7ICMgQ09NQklOSU5HIENJUkNVTUZMRVggQUNDRU5UCiskcHJlIFx+ICRwb3N0IDw+IFx1MDMwMyA7ICMgQ09NQklOSU5HIFRJTERFCiskcHJlIFwtICRwb3N0IDw+IFx1MDMwNCA7ICMgQ09NQklOSU5HIE1BQ1JPTgorJHByZSBcIiAkcG9zdCA8PiBcdTAzMDggOyAjIENPTUJJTklORyBESUFFUkVTSVMKKyRwcmUgXCogJHBvc3QgPD4gXHUwMzBBIDsgIyBDT01CSU5JTkcgUklORyBBQk9WRQorJHByZSBcLCAkcG9zdCA8PiBcdTAzMjcgOyAjIENPTUJJTklORyBDRURJTExBCiskcHJlICcvJyAkcG9zdCA8PiBcdTAzMzggOyAjIENPTUJJTklORyBMT05HIFNPTElEVVMgT1ZFUkxBWQorJHByZSBcLiAkcG9zdCA8PiBcdTAzMjMgOyAjIENPTUJJTklORyBET1QgQkVMT1cKKworIyBDb21iaW5lIGNvbW1vbiBjaGFyYWN0ZXJzCisKKyRwcmUgQUUgJHBvc3QgPD4gXHUwMEM2IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBBRQorJHByZSBhZSAkcG9zdCA8PiBcdTAwRTYgOyAjIExBVElOIFNNQUxMIExFVFRFUiBBRQorJHByZSBEICRwb3N0IDw+IFx1MDBEMCA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRICiskcHJlIGQgJHBvc3QgPD4gXHUwMEYwIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRVRICiskcHJlIE8nLycgJHBvc3QgPD4gXHUwMEQ4IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCiskcHJlIG8nLycgJHBvc3QgPD4gXHUwMEY4IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorJHByZSBUSCAkcG9zdCA8PiBcdTAwREUgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOCiskcHJlIHRoICRwb3N0IDw+IFx1MDBGRSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOCiskcHJlIE9FICRwb3N0IDw+IFx1MDE1MiA7ICMgTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRQorJHByZSBvZSAkcG9zdCA8PiBcdTAxNTMgOyAjIExBVElOIFNNQUxMIExJR0FUVVJFIE9FCisKKyRwcmUgc3MgJHBvc3QgPD4gXHUwMERGIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgUworCiskcHJlIE5HICRwb3N0IDw+IFx1MDE0QSA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRU5HCiskcHJlIG5nICRwb3N0IDw+IFx1MDE0QiA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEVORworCiskcHJlIFQgJHBvc3QgPD4gXHUwMzk4IDsgIyBUSEVUQQorJHByZSB0ICRwb3N0IDw+IFx1MDNCOCA7ICMgVEhFVEEKKyRwcmUgU0ggJHBvc3QgPD4gXHUwMUE5IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBFU0gKKyRwcmUgc2ggJHBvc3QgPD4gXHUwMjgzIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRVNICiskcHJlIFpIICRwb3N0IDw+IFx1MDFCNyA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVpICiskcHJlIHpoICRwb3N0IDw+IFx1MDI5MiA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEVaSAorCiskcHJlIFUgJHBvc3QgPD4gXHUwMUIxIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBVUFNJTE9OCiskcHJlIHUgJHBvc3QgPD4gXHUwMjhBIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVVBTSUxPTgorJHByZSBBICRwb3N0IDw+IFx1MDE4RiA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgU0NIV0EKKyRwcmUgYSAkcG9zdCA8PiBcdTAyNTkgOyAjIExBVElOIFNNQUxMIExFVFRFUiBTQ0hXQQorJHByZSBPICRwb3N0IDw+IFx1MDE4NiA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgT1BFTiBPCiskcHJlIG8gJHBvc3QgPD4gXHUwMjU0IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgT1BFTiBPCiskcHJlIEUgJHBvc3QgPD4gXHUwMTkwIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBPUEVOIEUKKyRwcmUgZSAkcG9zdCA8PiBcdTAyNUIgOyAjIExBVElOIFNNQUxMIExFVFRFUiBPUEVOIEUKKworIyB0aHJlZSB0aGF0IGRvbid0IGhhdmUgdXBwZXJjYXNlcworCiskcHJlICc/JyAkcG9zdCA8PiBcdTAyOTQgOyAjIExBVElOIExFVFRFUiBHTE9UVEFMIFNUT1AKKyRwcmUgaSAkcG9zdCA8PiBcdTAyNkEgOyAjIExBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIEkKKyRwcmUgdiAkcG9zdCA8PiBcdTAyOEMgOyAjIExBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgVgorCisjIEFkZGl0aW9uYWwgQ2hhcmFjdGVycyB0aGF0IG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlCisKKyMgJHByZSBYWFggJHBvc3QgPD4gXHUwMzA2IDsgIyBDT01CSU5JTkcgQlJFVkUKKyMgJHByZSBYWFggJHBvc3QgPD4gXHUwMzA3IDsgIyBDT01CSU5JTkcgRE9UIEFCT1ZFCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMwOSA7ICMgQ09NQklOSU5HIEhPT0sgQUJPVkUKKyMgJHByZSBYWFggJHBvc3QgPD4gXHUwMzBCIDsgIyBDT01CSU5JTkcgRE9VQkxFIEFDVVRFIEFDQ0VOVAorIyAkcHJlIFhYWCAkcG9zdCA8PiBcdTAzMEMgOyAjIENPTUJJTklORyBDQVJPTgorIyAkcHJlIFhYWCAkcG9zdCA8PiBcdTAzMEYgOyAjIENPTUJJTklORyBET1VCTEUgR1JBVkUgQUNDRU5UCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMxMSA7ICMgQ09NQklOSU5HIElOVkVSVEVEIEJSRVZFCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMxMyA7ICMgQ09NQklOSU5HIENPTU1BIEFCT1ZFCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMxNCA7ICMgQ09NQklOSU5HIFJFVkVSU0VEIENPTU1BIEFCT1ZFCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMxQiA7ICMgQ09NQklOSU5HIEhPUk4KKyMgJHByZSBYWFggJHBvc3QgPD4gXHUwMzI0IDsgIyBDT01CSU5JTkcgRElBRVJFU0lTIEJFTE9XCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMyNSA7ICMgQ09NQklOSU5HIFJJTkcgQkVMT1cKKyMgJHByZSBYWFggJHBvc3QgPD4gXHUwMzI2IDsgIyBDT01CSU5JTkcgQ09NTUEgQkVMT1cKKyMgJHByZSBYWFggJHBvc3QgPD4gXHUwMzI4IDsgIyBDT01CSU5JTkcgT0dPTkVLCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMyRCA7ICMgQ09NQklOSU5HIENJUkNVTUZMRVggQUNDRU5UIEJFTE9XCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMyRSA7ICMgQ09NQklOSU5HIEJSRVZFIEJFTE9XCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMzMCA7ICMgQ09NQklOSU5HIFRJTERFIEJFTE9XCisjICRwcmUgWFhYICRwb3N0IDw+IFx1MDMzMSA7ICMgQ09NQklOSU5HIE1BQ1JPTiBCRUxPVworCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDBBQSA7ICMgRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMEJBIDsgIyBNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTEwIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggU1RST0tFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDExMSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEQgV0lUSCBTVFJPS0UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTI2IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBIIFdJVEggU1RST0tFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDEyNyA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEggV0lUSCBTVFJPS0UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTMxIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRE9UTEVTUyBJCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDEzOCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEtSQQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxM0YgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEwgV0lUSCBNSURETEUgRE9UCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE0MCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBNSURETEUgRE9UCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE0MSA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTCBXSVRIIFNUUk9LRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxNDIgOyAjIExBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggU1RST0tFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE0OSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIE4gUFJFQ0VERUQgQlkgQVBPU1RST1BIRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxNjYgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBTVFJPS0UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTY3IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIFNUUk9LRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxN0YgOyAjIExBVElOIFNNQUxMIExFVFRFUiBMT05HIFMKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTgwIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgQiBXSVRIIFNUUk9LRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxODEgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEIgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE4MiA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQiBXSVRIIFRPUEJBUgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxODMgOyAjIExBVElOIFNNQUxMIExFVFRFUiBCIFdJVEggVE9QQkFSCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE4NCA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVE9ORSBTSVgKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTg1IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVE9ORSBTSVgKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTg3IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxODggOyAjIExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxODkgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEFGUklDQU4gRAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxOEEgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE4QiA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIFRPUEJBUgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxOEMgOyAjIExBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggVE9QQkFSCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE4RCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBERUxUQQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxOEUgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIFJFVkVSU0VEIEUKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTkxIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBGIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxOTIgOyAjIExBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxOTMgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE5NCA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgR0FNTUEKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTk1IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgSFYKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTk2IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJT1RBCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE5NyA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIFNUUk9LRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxOTggOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEsgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE5OSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEsgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE5QSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEwgV0lUSCBCQVIKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTlCIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgTEFNQkRBIFdJVEggU1RST0tFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE5QyA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVFVSTkVEIE0KKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMTlEIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggTEVGVCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDE5RSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBMT05HIFJJR0hUIExFRworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxOUYgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBNSURETEUgVElMREUKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUEyIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBPSQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQTMgOyAjIExBVElOIFNNQUxMIExFVFRFUiBPSQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQTQgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIFAgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFBNSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFAgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFBNiA7ICMgTEFUSU4gTEVUVEVSIFlSCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFBNyA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVE9ORSBUV08KKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUE4IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVE9ORSBUV08KKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUFBIDsgIyBMQVRJTiBMRVRURVIgUkVWRVJTRUQgRVNIIExPT1AKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUFCIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIFBBTEFUQUwgSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQUMgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIFQgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFBRCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFQgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFBRSA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCBXSVRIIFJFVFJPRkxFWCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFCMiA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgViBXSVRIIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUIzIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQjQgOyAjIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQjUgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBTVFJPS0UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUI2IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIFNUUk9LRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQjggOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEVaSCBSRVZFUlNFRAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQjkgOyAjIExBVElOIFNNQUxMIExFVFRFUiBFWkggUkVWRVJTRUQKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUJBIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRVpIIFdJVEggVEFJTAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQkIgOyAjIExBVElOIExFVFRFUiBUV08gV0lUSCBTVFJPS0UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUJDIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBUT05FIEZJVkUKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUJEIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVE9ORSBGSVZFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFCRSA7ICMgTEFUSU4gTEVUVEVSIElOVkVSVEVEIEdMT1RUQUwgU1RPUCBXSVRIIFNUUk9LRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQkYgOyAjIExBVElOIExFVFRFUiBXWU5OCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFDMCA7ICMgTEFUSU4gTEVUVEVSIERFTlRBTCBDTElDSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQzEgOyAjIExBVElOIExFVFRFUiBMQVRFUkFMIENMSUNLCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFDMiA7ICMgTEFUSU4gTEVUVEVSIEFMVkVPTEFSIENMSUNLCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFDMyA7ICMgTEFUSU4gTEVUVEVSIFJFVFJPRkxFWCBDTElDSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQzQgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIERaIFdJVEggQ0FST04KKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUM1IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBEIFdJVEggU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQzYgOyAjIExBVElOIFNNQUxMIExFVFRFUiBEWiBXSVRIIENBUk9OCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFDNyA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTEoKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUM4IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBMIFdJVEggU01BTEwgTEVUVEVSIEoKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUM5IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgTEoKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUNBIDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBOSgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQ0IgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBTTUFMTCBMRVRURVIgSgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxQ0MgOyAjIExBVElOIFNNQUxMIExFVFRFUiBOSgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxREQgOyAjIExBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxRTQgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIEcgV0lUSCBTVFJPS0UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUU1IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIFNUUk9LRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAxRjEgOyAjIExBVElOIENBUElUQUwgTEVUVEVSIERaCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFGMiA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRCBXSVRIIFNNQUxMIExFVFRFUiBaCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFGMyA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIERaCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDFGNiA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSFdBSVIKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMUY3IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBXWU5OCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDIxQyA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWU9HSAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyMUQgOyAjIExBVElOIFNNQUxMIExFVFRFUiBZT0dICisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDIyMiA7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgT1UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjIzIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgT1UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjI0IDsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyMjUgOyAjIExBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNTAgOyAjIExBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgQQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNTEgOyAjIExBVElOIFNNQUxMIExFVFRFUiBBTFBIQQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNTIgOyAjIExBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgQUxQSEEKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjUzIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgQiBXSVRIIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjU1IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENVUkwKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjU2IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRCBXSVRIIFRBSUwKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjU3IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRCBXSVRIIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjU4IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgUkVWRVJTRUQgRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNUEgOyAjIExBVElOIFNNQUxMIExFVFRFUiBTQ0hXQSBXSVRIIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjVDIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgUkVWRVJTRUQgT1BFTiBFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI1RCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFJFVkVSU0VEIE9QRU4gRSBXSVRIIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjVFIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgQ0xPU0VEIFJFVkVSU0VEIE9QRU4gRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNUYgOyAjIExBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEogV0lUSCBTVFJPS0UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjYwIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjYxIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgU0NSSVBUIEcKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjYyIDsgIyBMQVRJTiBMRVRURVIgU01BTEwgQ0FQSVRBTCBHCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI2MyA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEdBTU1BCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI2NCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFJBTVMgSE9STgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNjUgOyAjIExBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgSAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNjYgOyAjIExBVElOIFNNQUxMIExFVFRFUiBIIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNjcgOyAjIExBVElOIFNNQUxMIExFVFRFUiBIRU5HIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNjggOyAjIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggU1RST0tFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI2OSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIElPVEEKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjZCIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgTCBXSVRIIE1JRERMRSBUSUxERQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNkMgOyAjIExBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggQkVMVAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNkQgOyAjIExBVElOIFNNQUxMIExFVFRFUiBMIFdJVEggUkVUUk9GTEVYIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjZFIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgTEVaSAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNkYgOyAjIExBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgTQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNzAgOyAjIExBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgTSBXSVRIIExPTkcgTEVHCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI3MSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIE0gV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI3MiA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBMRUZUIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjczIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFJFVFJPRkxFWCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI3NCA7ICMgTEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgTgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNzUgOyAjIExBVElOIFNNQUxMIExFVFRFUiBCQVJSRUQgTworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNzYgOyAjIExBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIE9FCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI3NyA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIENMT1NFRCBPTUVHQQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyNzggOyAjIExBVElOIFNNQUxMIExFVFRFUiBQSEkKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjc5IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVFVSTkVEIFIKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjdBIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVFVSTkVEIFIgV0lUSCBMT05HIExFRworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyN0IgOyAjIExBVElOIFNNQUxMIExFVFRFUiBUVVJORUQgUiBXSVRIIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjdDIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgUiBXSVRIIExPTkcgTEVHCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI3RCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBUQUlMCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI3RSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFIgV0lUSCBGSVNISE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyN0YgOyAjIExBVElOIFNNQUxMIExFVFRFUiBSRVZFUlNFRCBSIFdJVEggRklTSEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjgwIDsgIyBMQVRJTiBMRVRURVIgU01BTEwgQ0FQSVRBTCBSCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI4MSA7ICMgTEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgSU5WRVJURUQgUgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyODIgOyAjIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyODQgOyAjIExBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEogV0lUSCBTVFJPS0UgQU5EIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjg1IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgU1FVQVQgUkVWRVJTRUQgRVNICisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI4NiA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEVTSCBXSVRIIENVUkwKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjg3IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVFVSTkVEIFQKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjg4IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVCBXSVRIIFJFVFJPRkxFWCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI4OSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFUgQkFSCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI4QiA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFYgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI4RCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBXCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI4RSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBZCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI4RiA7ICMgTEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgWQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyOTAgOyAjIExBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggUkVUUk9GTEVYIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjkxIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENVUkwKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjkzIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgRVpIIFdJVEggQ1VSTAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyOTQgOyAjIExBVElOIExFVFRFUiBHTE9UVEFMIFNUT1AKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjk1IDsgIyBMQVRJTiBMRVRURVIgUEhBUllOR0VBTCBWT0lDRUQgRlJJQ0FUSVZFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI5NiA7ICMgTEFUSU4gTEVUVEVSIElOVkVSVEVEIEdMT1RUQUwgU1RPUAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyOTcgOyAjIExBVElOIExFVFRFUiBTVFJFVENIRUQgQworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyOTggOyAjIExBVElOIExFVFRFUiBCSUxBQklBTCBDTElDSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyOTkgOyAjIExBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIEIKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMjlBIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgQ0xPU0VEIE9QRU4gRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyOUIgOyAjIExBVElOIExFVFRFUiBTTUFMTCBDQVBJVEFMIEcgV0lUSCBIT09LCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI5QyA7ICMgTEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgSAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyOUQgOyAjIExBVElOIFNNQUxMIExFVFRFUiBKIFdJVEggQ1JPU1NFRC1UQUlMCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI5RSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFRVUk5FRCBLCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDI5RiA7ICMgTEFUSU4gTEVUVEVSIFNNQUxMIENBUElUQUwgTAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyQTAgOyAjIExBVElOIFNNQUxMIExFVFRFUiBRIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyQTEgOyAjIExBVElOIExFVFRFUiBHTE9UVEFMIFNUT1AgV0lUSCBTVFJPS0UKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMkEyIDsgIyBMQVRJTiBMRVRURVIgUkVWRVJTRUQgR0xPVFRBTCBTVE9QIFdJVEggU1RST0tFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJBMyA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIERaIERJR1JBUEgKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMkE0IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgREVaSCBESUdSQVBICisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJBNSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIERaIERJR1JBUEggV0lUSCBDVVJMCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJBNiA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFRTIERJR1JBUEgKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMkE3IDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVEVTSCBESUdSQVBICisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJBOCA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIFRDIERJR1JBUEggV0lUSCBDVVJMCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJBOSA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIEZFTkcgRElHUkFQSAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyQUEgOyAjIExBVElOIFNNQUxMIExFVFRFUiBMUyBESUdSQVBICisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJBQiA7ICMgTEFUSU4gU01BTEwgTEVUVEVSIExaIERJR1JBUEgKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMkFDIDsgIyBMQVRJTiBMRVRURVIgQklMQUJJQUwgUEVSQ1VTU0lWRQorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyQUQgOyAjIExBVElOIExFVFRFUiBCSURFTlRBTCBQRVJDVVNTSVZFCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJCMCA7ICMgTU9ESUZJRVIgTEVUVEVSIFNNQUxMIEgKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMkIxIDsgIyBNT0RJRklFUiBMRVRURVIgU01BTEwgSCBXSVRIIEhPT0sKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMkIyIDsgIyBNT0RJRklFUiBMRVRURVIgU01BTEwgSgorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyQjMgOyAjIE1PRElGSUVSIExFVFRFUiBTTUFMTCBSCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJCNCA7ICMgTU9ESUZJRVIgTEVUVEVSIFNNQUxMIFRVUk5FRCBSCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJCNSA7ICMgTU9ESUZJRVIgTEVUVEVSIFNNQUxMIFRVUk5FRCBSIFdJVEggSE9PSworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyQjYgOyAjIE1PRElGSUVSIExFVFRFUiBTTUFMTCBDQVBJVEFMIElOVkVSVEVEIFIKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMkI3IDsgIyBNT0RJRklFUiBMRVRURVIgU01BTEwgVworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyQjggOyAjIE1PRElGSUVSIExFVFRFUiBTTUFMTCBZCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJFMCA7ICMgTU9ESUZJRVIgTEVUVEVSIFNNQUxMIEdBTU1BCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJFMSA7ICMgTU9ESUZJRVIgTEVUVEVSIFNNQUxMIEwKKyMgJHByZSBZWVkgJHBvc3QgPD4gXHUwMkUyIDsgIyBNT0RJRklFUiBMRVRURVIgU01BTEwgUworIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTAyRTMgOyAjIE1PRElGSUVSIExFVFRFUiBTTUFMTCBYCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MDJFNCA7ICMgTU9ESUZJRVIgTEVUVEVSIFNNQUxMIFJFVkVSU0VEIEdMT1RUQUwgU1RPUAorIyAkcHJlIFlZWSAkcG9zdCA8PiBcdTFFOUEgOyAjIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklHSFQgSEFMRiBSSU5HCisjICRwcmUgWVlZICRwb3N0IDw+IFx1MjA3RiA7ICMgU1VQRVJTQ1JJUFQgTEFUSU4gU01BTEwgTEVUVEVSIE4KKworOjogTkZDIChORkQpIDsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0FueV9QdWJsaXNoaW5nLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfQW55X1B1Ymxpc2hpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhZjkxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0FueV9QdWJsaXNoaW5nLnR4dApAQCAtMCwwICsxLDM4IEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0FueV9QdWJsaXNoaW5nLnR4dCx2ICQKKyMgJERhdGU6IDIwMDEvMTAvMjMgMDA6MjM6NDYgJAorIyAkUmV2aXNpb246IDEuNCAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUZXN0IGNhc2UKKyMgIlRoZSIgIihxdWljaykiICgnYnJvd24nKSBgZm94JyBgIGp1bXBlZCAtLSAgICAgIm92ZXI/IgorCisjIFZhcmlhYmxlcworCiskc2luZ2xlID0gXCcgOworJHNwYWNlID0gJyAnIDsKKyRkb3VibGUgPSBcIiA7CiskYmFjayA9IFxgIDsKKyR0YWIgPSAnXHUwMDA4JyA7CiskbWFrZVJpZ2h0ID0gW1s6WjpdWzpQczpdWzpQaTpdJF0gOworCisjIGZpeCBVTklYIHF1b3RlcworCiskYmFjayAkYmFjayA+IOKAnCA7CiskYmFjayA+IOKAmCA7CisKKyMgZml4IHR5cGV3cml0ZXIgcXVvdGVzLCBieSBjb250ZXh0CisKKyRtYWtlUmlnaHQgeyRkb3VibGV9IDw+IOKAnCA7CiskZG91YmxlIDw+IOKAnSA7CisKKyRtYWtlUmlnaHQgeyRzaW5nbGV9IDw+IOKAmCA7Ciskc2luZ2xlIDw+IOKAmTsKKworIyBmaXggbXVsdGlwbGUgc3BhY2VzIGFuZCBoeXBoZW5zCisKKyRzcGFjZSB7JHNwYWNlfSA+IDsKKyctLScgPD4g4oCUIDsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfQXJhYmljX0xhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfQXJhYmljX0xhdGluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzRjMGNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9BcmFiaWNfTGF0aW4udHh0CkBAIC0wLDAgKzEsMTUwIEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0FyYWJpY19MYXRpbi50eHQsdiAkCisjICREYXRlOiAyMDAyLzA3LzE1IDIzOjI2OjI2ICQKKyMgJFJldmlzaW9uOiAxLjMgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgR2VuZXJhbGx5IGZvbGxvd3MgVU5HRUdOIDxodHRwOi8vd3d3LmVraS5lZS93Z3JzL3JvbTFfYXIucGRmPgorIyBPY2Nhc2lvbmFsbHkgZGV2aWF0ZXMgaW4gdGhlIGRpcmVjdGlvbiBvZiBJU08gMjMzIDxodHRwOi8vaG9tZXBhZ2UubWFjLmNvbS9zaXJiaW5rcy9wZGYvQXJhYmljLnBkZj4KKyMgYSkgd2hlcmUgcmVxdWlyZWQgZm9yIGRpc2FtYmlndWF0aW9uLgorIyBiKSB3aXRoIHVuZGVyZG90IGluc3RlYWQgb2YgY2VkaWxsYSBmb3IgbGV0dGVyIGxpa2UgU0FELCBzaW5jZQorIyAgICAgdGhvc2UgYXJlIGV4cGxpY2l0bHkgaW4gVW5pY29kZSBmb3IgdHJhbnNsaXRlcmF0aW9uLgorIyBjKSB3aXRoIGV4dHJhIG5vbi1BcmFiaWMtbGFuZ3VhZ2UgbGV0dGVycywgbGlrZSBQRUgKKworIyBEb2VzICpub3QqIGRvIGFzc2ltaWxhdGlvbiBvZiAiYWwiLCBub3IgaHlwaGVuYXRpb24uCisjIFdoaWxlIGl0IGNvdWxkIGJlIGRvbmUsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwcmVmaXggImFsIiBjb3VsZAorIyBvY2N1ciBvdGhlciB0aGFuIGFzIHRoZSBkZWZpbml0ZSBhcnRpY2xlIChzaW5jZSBubyBzcGFjZSBpcyB1c2VkKS4KKworOjogW1s6QXJhYmljOl0gW+KAjuKBv1x1MDYwQ1x1MDYxQlx1MDYxRlx1MDY0MFx1MDY0Qi1cdTA2NTVcdTA2NjAtXHUwNjZDXHUwNkYwLVx1MDZGOVx1RkRGQ11dIDsKKzo6IE5GS0QgKE5GQyk7CiskZGlzYW1iaWcgPSAgzLEgOyAKKyRkaXNhbWJpZzIgPSAgzLAgOworJHVuZGVyID0gIMyjIDsKKworJG5vdEFib3ZlID0gW1s6XmNjYz0wOl0mWzpeY2NjPTIzMDpdXTsKKworIyBub24tbGV0dGVycworCisg2asgPD4gJy4nICRkaXNhbWJpZyA7ICMgQVJBQklDIERFQ0lNQUwgU0VQQVJBVE9SCisg2awgPD4gJywnICRkaXNhbWJpZyA7ICMgQVJBQklDIFRIT1VTQU5EUyBTRVBBUkFUT1IKKyMgINmtIDw+IDsgIyBBUkFCSUMgRklWRSBQT0lOVEVEIFNUQVIgLy8gbm8gbmVlZCB0byB0cmFuc2xpdGVyYXRlCisKK9iMIDw+ICcsJyA7ICMgQVJBQklDIENPTU1BCisg2JsgPD4gJzsnIDsgIyBBUkFCSUMgU0VNSUNPTE9OCisg2J8gPD4gJz8nIDsgIyBBUkFCSUMgUVVFU1RJT04gTUFSSworINmqIDw+ICclJyA7ICMgQVJBQklDIFBFUkNFTlQgU0lHTgorCisg27AgPD4gMCAkZGlzYW1iaWcgOyAjIEVYVEVOREVEIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPCisg27EgPD4gMSAkZGlzYW1iaWcgOyAjIEVYVEVOREVEIEFSQUJJQy1JTkRJQyBESUdJVCBPTkUKKyDbsiA8PiAyICRkaXNhbWJpZyA7ICMgRVhURU5ERUQgQVJBQklDLUlORElDIERJR0lUIFRXTworINuzIDw+IDMgJGRpc2FtYmlnIDsgIyBFWFRFTkRFRCBBUkFCSUMtSU5ESUMgRElHSVQgVEhSRUUKKyDbtCA8PiA0ICRkaXNhbWJpZyA7ICMgRVhURU5ERUQgQVJBQklDLUlORElDIERJR0lUIEZPVVIKKyDbtSA8PiA1ICRkaXNhbWJpZyA7ICMgRVhURU5ERUQgQVJBQklDLUlORElDIERJR0lUIEZJVkUKKyDbtiA8PiA2ICRkaXNhbWJpZyA7ICMgRVhURU5ERUQgQVJBQklDLUlORElDIERJR0lUIFNJWAorINu3IDw+IDcgJGRpc2FtYmlnIDsgIyBFWFRFTkRFRCBBUkFCSUMtSU5ESUMgRElHSVQgU0VWRU4KKyDbuCA8PiA4ICRkaXNhbWJpZyA7ICMgRVhURU5ERUQgQVJBQklDLUlORElDIERJR0lUIEVJR0hUCisg27kgPD4gOSAkZGlzYW1iaWcgOyAjIEVYVEVOREVEIEFSQUJJQy1JTkRJQyBESUdJVCBOSU5FCisKKyDZoCA8PiAwIDsgIyBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTworINmhIDw+IDEgOyAjIEFSQUJJQy1JTkRJQyBESUdJVCBPTkUKKyDZoiA8PiAyIDsgIyBBUkFCSUMtSU5ESUMgRElHSVQgVFdPCisg2aMgPD4gMyA7ICMgQVJBQklDLUlORElDIERJR0lUIFRIUkVFCisg2aQgPD4gNCA7ICMgQVJBQklDLUlORElDIERJR0lUIEZPVVIKKyDZpSA8PiA1IDsgIyBBUkFCSUMtSU5ESUMgRElHSVQgRklWRQorINmmIDw+IDYgOyAjIEFSQUJJQy1JTkRJQyBESUdJVCBTSVgKKyDZpyA8PiA3IDsgIyBBUkFCSUMtSU5ESUMgRElHSVQgU0VWRU4KKyDZqCA8PiA4IDsgIyBBUkFCSUMtSU5ESUMgRElHSVQgRUlHSFQKKyDZqSA8PiA5IDsgIyBBUkFCSUMtSU5ESUMgRElHSVQgTklORQorCisjIGxldHRlcnMKKworIyBsb25nIHZvd2VscworICDZjtinPD4gYcyEIDsgIyBBUkFCSUMgRkFUSEEsIEFSQUJJQyBMRVRURVIgQUxFRgorICDZj9mIIDw+IHXMhCA7ICMgQVJBQklDIERBTU1BLCBBUkFCSUMgTEVUVEVSIFdBVworINmQ2YogPD4gacyEIDsgIyBBUkFCSUMgS0FTUkEsIEFSQUJJQyBMRVRURVIgWUVICisKKyMgbG9uZ2VyIGl0ZW1zIG1vdmVkIGhlcmUgdG8gcHJldmVudCBtYXNraW5nCisg2KsgPD4gdCBoICRkaXNhbWJpZyA7ICMgQVJBQklDIExFVFRFUiBUSEVICisg2LAgPD4gZCBoICRkaXNhbWJpZyA7ICMgQVJBQklDIExFVFRFUiBUSEFMCisg2LQgPD4gcyBoICRkaXNhbWJpZyA7ICMgQVJBQklDIExFVFRFUiBTSEVFTgorINi1IDw+IHMgJHVuZGVyIDsgIyBBUkFCSUMgTEVUVEVSIFNBRAorINi2IDw+IGQgJHVuZGVyIDsgIyBBUkFCSUMgTEVUVEVSIERBRAorINi3IDw+IHQgJHVuZGVyIDsgIyBBUkFCSUMgTEVUVEVSIFRBSAorINi4IDw+IHogJHVuZGVyIDsgIyBBUkFCSUMgTEVUVEVSIFpBSAorINi6IDw+IGcgaCAkZGlzYW1iaWcgOyAjIEFSQUJJQyBMRVRURVIgR0hBSU4KKworIyBXQVJOSU5HOiBzcGVjaWFsIGNhc2UKKyMgPHQsIHVtbGF1dCwgaGFsZi1yaW5nIGJlbG93PiB3aWxsIGJlIGNhbm9uaWNhbGx5IG9yZGVyZWQgYXMgPHQsIGhhbGYtcmluZyBiZWxvdywgdW1sYXV0PgorIyBzbyBvbiB0aGUgcmV0dXJuLCB3ZSBoYXZlIHRvIHNraXAgb3ZlciAoYnV0IHByZXNlcnZlKSB0aGUgaGFsZi1yaW5nIGJlbG93IChvciBvdGhlcnMgbGlrZSBpdCkKKyMg2KnZlSA8IHTMucyIIDsgIyBMQVRJTiBTTUFMTCBMRVRURVIgVCwgQ09NQklOSU5HIFJJR0hUIEhBTEYgUklORyBCRUxPVywgQ09NQklOSU5HIERJQUVSRVNJUworCisg2KkgPD4gdCBcdTAzMDggOyAjIEFSQUJJQyBMRVRURVIgVEVIIE1BUkJVVEEKKyDYqSB8ICQxIDwgdCAoJG5vdEFib3ZlKykgXHUwMzA4IDsgIyBBUkFCSUMgTEVUVEVSIFRFSCBNQVJCVVRBCisKKyMgbm9uLUFyYWJpYyBsYW5ndWFnZQorINqYIDw+IHogaCAkZGlzYW1iaWcgOyAjIEFSQUJJQyBMRVRURVIgSkVICisg2q0gPD4gbiAkZGlzYW1iaWcgZyA7ICMgQVJBQklDIExFVFRFUiBORworINuLIDw+IHYgJGRpc2FtYmlnIDsgIyBBUkFCSUMgTEVUVEVSIFZFCisg24wgPD4geSAkZGlzYW1iaWcyIDsgIyBBUkFCSUMgTEVUVEVSIEZBUlNJIFlFSAorCisjIEFyYWJpYyBsYW5ndWFnZQorCisg2KEgPD4gyr4gOyAjIEFSQUJJQyBMRVRURVIgSEFNWkEKKyDYpyA8PiBhICR1bmRlcjsgIyBBUkFCSUMgTEVUVEVSIEFMRUYKKyDYqCA8PiBiIDsgIyBBUkFCSUMgTEVUVEVSIEJFSAorINiqIDw+IHQgOyAjIEFSQUJJQyBMRVRURVIgVEVICisg2KwgPD4gaiA7ICMgQVJBQklDIExFVFRFUiBKRUVNCisg2K0gPD4gaCAkdW5kZXIgOyAjIEFSQUJJQyBMRVRURVIgSEFICisg2K4gPD4gayBoICRkaXNhbWJpZyA7ICMgQVJBQklDIExFVFRFUiBLSEFICisg2K8gPD4gZCA7ICMgQVJBQklDIExFVFRFUiBEQUwKKyDYsSA8PiByIDsgIyBBUkFCSUMgTEVUVEVSIFJFSAorINiyIDw+IHogOyAjIEFSQUJJQyBMRVRURVIgWkFJTgorINizIDw+IHMgOyAjIEFSQUJJQyBMRVRURVIgU0VFTgorINi5IDw+IMq/IDsgIyBBUkFCSUMgTEVUVEVSIEFJTgorICDZgCA+IDsgIyBBUkFCSUMgVEFUV0VFTAorINmBIDw+IGYgOyAjIEFSQUJJQyBMRVRURVIgRkVICisg2YIgPD4gcSA7ICMgQVJBQklDIExFVFRFUiBRQUYKKyDZgyA8PiBrIDsgIyBBUkFCSUMgTEVUVEVSIEtBRgorINmEIDw+IGwgOyAjIEFSQUJJQyBMRVRURVIgTEFNCisg2YUgPD4gbSA7ICMgQVJBQklDIExFVFRFUiBNRUVNCisg2YYgPD4gbiA7ICMgQVJBQklDIExFVFRFUiBOT09OCisg2YcgPD4gaCA7ICMgQVJBQklDIExFVFRFUiBIRUgKKyDZiCA8PiB3IDsgIyBBUkFCSUMgTEVUVEVSIFdBVworINmJIDw+IHkgJGRpc2FtYmlnIDsgIyBBUkFCSUMgTEVUVEVSIEFMRUYgTUFLU1VSQQorINmKIDw+IHkgOyAjIEFSQUJJQyBMRVRURVIgWUVICisg2YsgPD4gYeKBvyA7ICMgQVJBQklDIEZBVEhBVEFOCisg2YwgPD4gdeKBvyA7ICMgQVJBQklDIERBTU1BVEFOCisg2Y0gPD4gaeKBvyA7ICMgQVJBQklDIEtBU1JBVEFOCisg2Y4gPD4gYSA7ICMgQVJBQklDIEZBVEhBCisg2Y8gPD4gdSA7ICMgQVJBQklDIERBTU1BCisg2ZAgPD4gaSA7ICMgQVJBQklDIEtBU1JBCisg2ZEgPD4gICDMgyA7ICMgQVJBQklDIFNIQUREQQorINmSIDw+ICAgzIogOyAjIEFSQUJJQyBTVUtVTgorCisjIHNwZWNpYWwgY29tYmluaW5nIG1hcmtzCisg2ZMgPD4gIMyCIDsgIyBBUkFCSUMgTUFEREFIIEFCT1ZFCisg2ZQgPD4gIMyJIDsgIyBBUkFCSUMgSEFNWkEgQUJPVkUKKyDZlSA8PiAgzLkgOyAjIEFSQUJJQyBIQU1aQSBCRUxPVworCisjIFNvbWUgbm9uLUFyYWJpYyBsYW5ndWFnZSAobm90IGluIFVOR0VHTikKKyDZviA8PiBwIDsgIyBBUkFCSUMgTEVUVEVSIFBFSAorINqGIDw+IGMgaCAkZGlzYW1iaWcgOyAjIEFSQUJJQyBMRVRURVIgVENIRUgKKyDapCA8PiB2IDsgIyBBUkFCSUMgTEVUVEVSIFZFSAorIyDapSA8PiB2ICRkaXNhbWJpZyA7ICMgQVJBQklDIExFVFRFUiBGRUggV0lUSCBUSFJFRSBET1RTIEJFTE9XCisjINqiIDw+IGYgJGRpc2FtYmlnIDsgIyBBUkFCSUMgTEVUVEVSIEZFSCBXSVRIIERPVCBNT1ZFRCBCRUxPVworINqvIDw+IGcgOyAjIEFSQUJJQyBMRVRURVIgR0FGCisKKyMgZmFsbGJhY2tzCit8IHMgPCBjIH0gW2VpeV07Cit8IGsgPCBjIDsKK3wgaSA8IGUgOworfCB1IDwgbyA7Cit8IGtzIDwgeCA7Cit8IG4gPCDigI7igb87CisKKzo6IChsb3dlcikgOworOjpORkMgKE5GRCk7Cis6OiAoIFtbOkxhdGluOl0gWyUsLjAtOTs/XHUwMkJFLVx1MDJCRlx1MDMwMi1cdTAzMDRcdTAzMDgtXHUwMzBBXHUwMzIzXHUwMzMwLVx1MDMzMVx1MDMzOVx1MDM3RV1dICk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9CZW5nYWxpX0ludGVySW5kaWMudHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9CZW5nYWxpX0ludGVySW5kaWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4M2Q4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0JlbmdhbGlfSW50ZXJJbmRpYy50eHQKQEAgLTAsMCArMSwxMDYgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfQmVuZ2FsaV9JbnRlckluZGljLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDkvMTkgMTg6MTE6MjMgJAorIyAkUmV2aXNpb246IDEuMTEgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgQmVuZ2FsaS1JbnRlckluZGljCisKK1x1MDlDN1x1MDlCRT5cdUUwNEI7ICMgVk9XRUwgU0lHTiBPCitcdTA5QzdcdTA5RDc+XHVFMDRDOyAjIFZPV0VMIFNJR04gQVUKK1x1MDk4MT5cdUUwMDE7ICMgU0lHTiBDQU5EUkFCSU5EVQorXHUwOTgyPlx1RTAwMjsgIyBTSUdOIEFOVVNWQVJBCitcdTA5ODM+XHVFMDAzOyAjIFNJR04gVklTQVJHQQorXHUwOTg1Plx1RTAwNTsgIyBMRVRURVIgQQorXHUwOTg2Plx1RTAwNjsgIyBMRVRURVIgQUEKK1x1MDk4Nz5cdUUwMDc7ICMgTEVUVEVSIEkKK1x1MDk4OD5cdUUwMDg7ICMgTEVUVEVSIElJCitcdTA5ODk+XHVFMDA5OyAjIExFVFRFUiBVCitcdTA5OEE+XHVFMDBBOyAjIExFVFRFUiBVVQorXHUwOThCPlx1RTAwQjsgIyBMRVRURVIgVk9DQUxJQyBSCitcdTA5OEM+XHVFMDBDOyAjIExFVFRFUiBWT0NBTElDIEwKK1x1MDk4Rj5cdUUwMEY7ICMgTEVUVEVSIEUKK1x1MDk5MD5cdUUwMTA7ICMgTEVUVEVSIEFJCitcdTA5OTM+XHVFMDEzOyAjIExFVFRFUiBPCitcdTA5OTQ+XHVFMDE0OyAjIExFVFRFUiBBVQorXHUwOTk1Plx1RTAxNTsgIyBMRVRURVIgS0EKK1x1MDk5Nj5cdUUwMTY7ICMgTEVUVEVSIEtIQQorXHUwOTk3Plx1RTAxNzsgIyBMRVRURVIgR0EKK1x1MDk5OD5cdUUwMTg7ICMgTEVUVEVSIEdIQQorXHUwOTk5Plx1RTAxOTsgIyBMRVRURVIgTkdBCitcdTA5OUE+XHVFMDFBOyAjIExFVFRFUiBDQQorXHUwOTlCPlx1RTAxQjsgIyBMRVRURVIgQ0hBCitcdTA5OUM+XHVFMDFDOyAjIExFVFRFUiBKQQorXHUwOTlEPlx1RTAxRDsgIyBMRVRURVIgSkhBCitcdTA5OUU+XHVFMDFFOyAjIExFVFRFUiBOWUEKK1x1MDk5Rj5cdUUwMUY7ICMgTEVUVEVSIFRUQQorXHUwOUEwPlx1RTAyMDsgIyBMRVRURVIgVFRIQQorXHUwOUExPlx1RTAyMTsgIyBMRVRURVIgRERBCitcdTA5QTI+XHVFMDIyOyAjIExFVFRFUiBEREhBCitcdTA5QTM+XHVFMDIzOyAjIExFVFRFUiBOTkEKK1x1MDlBND5cdUUwMjQ7ICMgTEVUVEVSIFRBCitcdTA5QTU+XHVFMDI1OyAjIExFVFRFUiBUSEEKK1x1MDlBNj5cdUUwMjY7ICMgTEVUVEVSIERBCitcdTA5QTc+XHVFMDI3OyAjIExFVFRFUiBESEEKK1x1MDlBOD5cdUUwMjg7ICMgTEVUVEVSIE5BCitcdTA5QUE+XHVFMDJBOyAjIExFVFRFUiBQQQorXHUwOUFCPlx1RTAyQjsgIyBMRVRURVIgUEhBCitcdTA5QUM+XHVFMDJDOyAjIExFVFRFUiBCQQorXHUwOUFEPlx1RTAyRDsgIyBMRVRURVIgQkhBCitcdTA5QUU+XHVFMDJFOyAjIExFVFRFUiBNQQorXHUwOUFGPlx1RTAyRjsgIyBMRVRURVIgWUEKK1x1MDlCMD5cdUUwMzA7ICMgTEVUVEVSIFJBCitcdTA5QjI+XHVFMDMyOyAjIExFVFRFUiBMQQorXHUwOUI2Plx1RTAzNjsgIyBMRVRURVIgU0hBCitcdTA5Qjc+XHVFMDM3OyAjIExFVFRFUiBTU0EKK1x1MDlCOD5cdUUwMzg7ICMgTEVUVEVSIFNBCitcdTA5Qjk+XHVFMDM5OyAjIExFVFRFUiBIQQorXHUwOUJDPlx1RTAzQzsgIyBTSUdOIE5VS1RBCitcdTA5QkU+XHVFMDNFOyAjIFZPV0VMIFNJR04gQUEKK1x1MDlCRj5cdUUwM0Y7ICMgVk9XRUwgU0lHTiBJCitcdTA5QzA+XHVFMDQwOyAjIFZPV0VMIFNJR04gSUkKK1x1MDlDMT5cdUUwNDE7ICMgVk9XRUwgU0lHTiBVCitcdTA5QzI+XHVFMDQyOyAjIFZPV0VMIFNJR04gVVUKK1x1MDlDMz5cdUUwNDM7ICMgVk9XRUwgU0lHTiBWT0NBTElDIFIKK1x1MDlDND5cdUUwNDQ7ICMgVk9XRUwgU0lHTiBWT0NBTElDIFJSCitcdTA5Qzc+XHVFMDQ3OyAjIFZPV0VMIFNJR04gRQorXHUwOUM4Plx1RTA0ODsgIyBWT1dFTCBTSUdOIEFJCitcdTA5Q0I+XHVFMDRCOworXHUwOUNDPlx1RTA0QzsKKyMKK1x1MDlDRD5cdUUwNEQ7ICMgU0lHTiBWSVJBTUEKK1x1MDlENz5cdUUwNTc7ICMgQVUgTEVOR1RIIE1BUksKKyMKK1x1MDlFMD5cdUUwNjA7ICMgTEVUVEVSIFZPQ0FMSUMgUlIKK1x1MDlFMT5cdUUwNjE7ICMgTEVUVEVSIFZPQ0FMSUMgTEwKK1x1MDlFMj5cdUUwNjI7ICMgVk9XRUwgU0lHTiBWT0NBTElDIEwKK1x1MDlFMz5cdUUwNjM7ICMgVk9XRUwgU0lHTiBWT0NBTElDIExMCitcdTA5RTY+XHVFMDY2OyAjIERJR0lUIFpFUk8KK1x1MDlFNz5cdUUwNjc7ICMgRElHSVQgT05FCitcdTA5RTg+XHVFMDY4OyAjIERJR0lUIFRXTworXHUwOUU5Plx1RTA2OTsgIyBESUdJVCBUSFJFRQorXHUwOUVBPlx1RTA2QTsgIyBESUdJVCBGT1VSCitcdTA5RUI+XHVFMDZCOyAjIERJR0lUIEZJVkUKK1x1MDlFQz5cdUUwNkM7ICMgRElHSVQgU0lYCitcdTA5RUQ+XHVFMDZEOyAjIERJR0lUIFNFVkVOCitcdTA5RUU+XHVFMDZFOyAjIERJR0lUIEVJR0hUCitcdTA5RUY+XHVFMDZGOyAjIERJR0lUIE5JTkUKK1x1MDlGMD5cdWUwNzE7ICMgQmVuZ2FsaS1JbnRlckluZGljOiBMRVRURVIgUkEgV0lUSCBNSURETEUgRElBR09OQUwKK1x1MDlGMT5cdWUwNzI7ICMgQmVuZ2FsaS1JbnRlckluZGljOiBMRVRURVIgUkEgV0lUSCBMT1dFUiBESUFHT05BTAorXHUwOUYyPlx1ZTA3MzsgIyBCZW5nYWxpLUludGVySW5kaWM6IFJVUEVFIE1BUksKK1x1MDlGMz5cdWUwNzQ7ICMgQmVuZ2FsaS1JbnRlckluZGljOiBSVVBFRSBTSUdOCitcdTA5RjQ+XHVlMDc1OyAjIEJlbmdhbGktSW50ZXJJbmRpYzogQ1VSUkVOQ1kgTlVNRVJBVE9SIE9ORQorXHUwOUY1Plx1ZTA3NjsgIyBCZW5nYWxpLUludGVySW5kaWM6IENVUlJFTkNZIE5VTUVSQVRPUiBUV08KK1x1MDlGNj5cdWUwNzc7ICMgQmVuZ2FsaS1JbnRlckluZGljOiBDVVJSRU5DWSBOVU1FUkFUT1IgVEhSRUUKK1x1MDlGNz5cdWUwNzg7ICMgQmVuZ2FsaS1JbnRlckluZGljOiBDVVJSRU5DWSBOVU1FUkFUT1IgRk9VUgorXHUwOUY4Plx1ZTA3OTsgIyBCZW5nYWxpLUludGVySW5kaWM6IENVUlJFTkNZIE5VTUVSQVRPUiBPTkUgTEVTUyBUSEFOIFRIRSBERU5PTUlOQVRPUgorXHUwOUY5Plx1ZTA3QTsgIyBCZW5nYWxpLUludGVySW5kaWM6IENVUlJFTkNZIERFTk9NSU5BVE9SIFNJWFRFRU4KK1x1MDlGQT5cdWUwN0I7ICMgSVNTSEFSCisKK1x1MDk2ND5cdWUwNjQ7ICAgICAgICAjIERBTkRBCitcdTA5NjU+XHVlMDY1OyAgICAgICAgIyBET1VCTEUgREFOREEKKyMgICAgOjogTkZDIChORkQpIDsKKyMgZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0N5cmlsbGljX0xhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfQ3lyaWxsaWNfTGF0aW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1M2VjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0N5cmlsbGljX0xhdGluLnR4dApAQCAtMCwwICsxLDMxMCBAQAor77u/Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9DeXJpbGxpY19MYXRpbi50eHQsdiAkCisjICREYXRlOiAyMDAxLzEyLzAxIDAwOjE0OjU1ICQKKyMgJFJldmlzaW9uOiAxLjkgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRPRE86IGFkZCByZW1haW5pbmcgY2hhcmFjdGVycworIyBTaG91bGQgYWRkIHZhcmlhbnRzIGZvciBSdXNzaWFuLUVuZ2xpc2gsIFJ1c3NpYW4tR2VybWFuCisjIFRob3NlIGNhbiB1c2UgdGhpcyBhcyBhIGJhc2UsIGFuZCB0aGVuIHJlbWFwIGNhc2VzCisjIGxpa2UgYSAkaGF0IHRvIHlhIG9yIGphLgorCisjIDo6IFtcdTAwMDAtXHUwMDdFIFx1MDJCOSBcdTAyQkEgWzpDeXJpbGxpYzpdIFs6TGF0aW46XSBbOm5vbnNwYWNpbmcgbWFyazpdXSA7CisjIyMgV0FSTklORywgXHUwMzA4IG11c3QgYmUgYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBmaWx0ZXJzLCBpbiBib3RoIGRpcmVjdGlvbnMgIyMjCisjIE1JTklNQUwgRklMVEVSCis6OiBbXHUwMzA4XHUwMTAyLVx1MDEwM1x1MDExNC1cdTAxMTVcdTAxMUUtXHUwMTFGXHUwMTJDLVx1MDEyRFx1MDE0RS1cdTAxNEZcdTAxNkMtXHUwMTZEXHUwMzA2XHUwNDAwLVx1MDQ1Rlx1MDQ5MC1cdTA0OTVcdTA0OTgtXHUwNDk5XHUwNEMxLVx1MDRDMlx1MDREMC1cdTA0REZcdTA0RTItXHUwNEU3XHUwNEVDLVx1MDRGNVx1MDRGOC1cdTA0RjlcdTFFMUMtXHUxRTFEXHUxRUFFLVx1MUVCN1x1MUZCMFx1MUZCOFx1MUZEMFx1MUZEOFx1MUZFMFx1MUZFOF0gOworOjogTkZEIChORkMpIDsKKworJG1vZHByaW1lID0gXHUwMkI5OworJG1vZHByaW1lMiA9IFx1MDJCQTsKKworJGdyYXZlID0gXHUwMzAwOworJGFjdXRlID0gXHUwMzAxOworJGhhdCA9IFx1MDMwMjsKKyRicmV2ZSA9IFx1MDMwNiA7CiskZG90ID0gXHUwMzA3IDsKKyRjYXJvbiA9IFx1MDMwQyA7CiskY29tbWEgPSBcdTAzMjYgOworJHVuZGVyID0gXHUwMzMxIDsKKworIyBtb3ZlIHVwIHNvIG5vdCBtYXNrZWQKKwor0Y8gPD4gYSAgJGhhdCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCivQryA8PiAgQSAkaGF0IDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorCivRhyA8PiBjICRjYXJvbiA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQor0KcgPD4gQyAkY2Fyb247ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisjINK3IDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRSBXSVRIIERFU0NFTkRFUgorIyDStiA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRSBXSVRIIERFU0NFTkRFUgorIyDTjCA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBLSEFLQVNTSUFOIENIRQorIyDTiyA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtIQUtBU1NJQU4gQ0hFCisjINK5IDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRSBXSVRIIFZFUlRJQ0FMIFNUUk9LRQorIyDSuCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRSBXSVRIIFZFUlRJQ0FMIFNUUk9LRQorCivRjSA8PiBlICRhY3V0ZTsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRQor0K0gPD4gRSAkYWN1dGU7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQor0ZQgPD4gZSAkaGF0OyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUUKK9CEIDw+IEUgJGhhdDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVS1JBSU5JQU4gSUUKKwor0YggPD4gcyAkY2Fyb24gOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKK9CoIDw+IFMgJGNhcm9uIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEEKK9GJIDw+IHMgJGhhdCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBCivQqSA8PiBTICRoYXQ7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKwor0ZUgPD4geiAkaGF0IDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRFpFCivQhSA8PiBaICRoYXQ7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRFpFCisjINOhIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEFCS0hBU0lBTiBEWkUKKyMg06AgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBQktIQVNJQU4gRFpFCisKK9GOIDw+IHUgJGhhdCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCivQriA8PiAgVSAkaGF0IDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorCivRliA8PiBpICRhY3V0ZTsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCivQhiA8PiBJICRhY3V0ZTsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKK9GYIDw+IGogJGNhcm9uOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBKRQor0IggPD4gSiAkY2Fyb247ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSkUKKwor0ZkgPD4gbCAkaGF0IDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgTEpFCivQiSA8PiBMICRoYXQgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIExKRQor0ZogPD4gbiAkaGF0IDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgTkpFCivQiiA8PiBOICRoYXQgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIE5KRQorCivRmyA8PiBjICRhY3V0ZSA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTSEUKK9CLIDw+IEMgJGFjdXRlIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0hFCisKK9GfIDw+IGQgJGhhdCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERaSEUKK9CPIDw+IEQgJGhhdCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRFpIRQorCisjIE5vcm1hbCBvcmRlcgorCivQsCA8PiBhIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgQQor0JAgPD4gQSA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQor05kgPD4gIFx1MDI1OSA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNDSFdBCivTmCA8PiBcdTAxOEYgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNDSFdBCivTlSA8PiBcdTAwRTYgOyAjIENZUklMTElDIFNNQUxMIExJR0FUVVJFIEEgSUUKK9OUIDw+IFx1MDBDNiA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMSUdBVFVSRSBBIElFCivQsSA8PiBiIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgQkUKK9CRIDw+IEIgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCivQsiA8PiB2IDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgVkUKK9CSIDw+IFYgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCisKK9KRIDw+IGcgJGdyYXZlIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCivSkCA8PiBHICRncmF2ZSA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCivSkyA8PiBnICRkb3QgOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBTVFJPS0UKK9KSIDw+IEcgJGRvdDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBTVFJPS0UKK9KVIDw+IGcgJGJyZXZlOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBNSURETEUgSE9PSwor0pQgPD4gRyAkYnJldmU7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggTUlERExFIEhPT0sKK9CzIDw+IGcgOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKK9CTIDw+IEcgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorCivQtCA8PiBkOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBERQor0JQgPD4gRDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQor0ZIgPD4gxJEgOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBESkUKK9CCIDw+IMSQIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBESkUKK9KZIDw+IHogJGNvbW1hIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUgV0lUSCBERVNDRU5ERVIKK9KYIDw+IFogJGNvbW1hIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRSBXSVRIIERFU0NFTkRFUgor0LUgPD4gZSA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFCivQlSA8PiBFOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIElFCisKK9C2IDw+IHogJGNhcm9uOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKK9CWIDw+IFogJGNhcm9uOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorCisjINKXIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRSBXSVRIIERFU0NFTkRFUgorIyDSliA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRSBXSVRIIERFU0NFTkRFUgorCivQtyA8PiB6IDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKK9CXIDw+IFo7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKwor0LjMhiA8PiBqIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQor0JjMhiA8PiBKIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCivQuCA8PiBpIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQor0JggPD4gSSA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorCivQuiA8PiBrIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EKK9CaIDw+IEs7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EKKworIyDSmyA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBLQSBXSVRIIERFU0NFTkRFUgorIyDSmiA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBIFdJVEggREVTQ0VOREVSCisjINOEIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBIFdJVEggSE9PSworIyDTgyA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBIFdJVEggSE9PSworIyDSoSA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBCQVNIS0lSIEtBCisjINKgIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkFTSEtJUiBLQQorIyDSnyA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBLQSBXSVRIIFNUUk9LRQorIyDSniA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBIFdJVEggU1RST0tFCisjINKdIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBIFdJVEggVkVSVElDQUwgU1RST0tFCisjINKcIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EgV0lUSCBWRVJUSUNBTCBTVFJPS0UKK9C7IDw+IGwgOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBFTAor0JsgPD4gTDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorCivQvCA8PiBtIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KK9CcIDw+IE0gOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCivQvSA8PiBuIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4KK9CdIDw+IE47ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KKyMg0qMgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4gV0lUSCBERVNDRU5ERVIKKyMg0qIgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTiBXSVRIIERFU0NFTkRFUgorIyDTiCA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBFTiBXSVRIIEhPT0sKKyMg04cgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTiBXSVRIIEhPT0sKKyMg0qUgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMSUdBVFVSRSBFTiBHSEUKKyMg0qQgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExJR0FUVVJFIEVOIEdIRQorCivQviA8PiBvIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgTwor0J4gPD4gTyA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTworIyDTqSA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBCQVJSRUQgTworIyDTqCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJBUlJFRCBPCivQvyA8PiBwIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKK9CfIDw+IFAgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFBFCisjINKnIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFIFdJVEggTUlERExFIEhPT0sKKyMg0qYgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRSBXSVRIIE1JRERMRSBIT09LCisjINKBIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtPUFBBCisjINKAIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS09QUEEKK9GAIDw+IHIgOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBFUgor0KAgPD4gUiA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyMg0o8gPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIgV0lUSCBUSUNLCisjINKOIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIgV0lUSCBUSUNLCivRgSA8PiBzIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKK9ChIDw+IFMgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCisjINKrIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTIFdJVEggREVTQ0VOREVSCisjINKqIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMgV0lUSCBERVNDRU5ERVIKK9GCIDw+IHQgOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBURQor0KIgPD4gVCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKKyMg0q0gPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUgV0lUSCBERVNDRU5ERVIKKyMg0qwgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURSBXSVRIIERFU0NFTkRFUgorCivRgyA8PiB1IDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQor0KMgPD4gVSA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorIyDSryA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBTVFJBSUdIVCBVCisjINKuIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU1RSQUlHSFQgVQorIyDSsSA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBTVFJBSUdIVCBVIFdJVEggU1RST0tFCisjINKwIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU1RSQUlHSFQgVSBXSVRIIFNUUk9LRQorIyDRuSA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBVSworIyDRuCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFVLCivRhCA8PiBmIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKK9CkIDw+IEYgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVGCivRhSA8PiBoIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEKK9ClIDw+IEg7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKKyMg0rMgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEgV0lUSCBERVNDRU5ERVIKKyMg0rIgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQSBXSVRIIERFU0NFTkRFUgorIyDSuyA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBTSEhBCisjINK6IDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hIQQorIyDRoSA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBPTUVHQQorIyDRoCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIE9NRUdBCisjING/IDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE9UCisjING+IDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgT1QKKyMg0b0gPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBUSVRMTworIyDRvCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggVElUTE8KKyMg0bsgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgUk9VTkQgT01FR0EKKyMg0bogPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBST1VORCBPTUVHQQor0YYgPD4gYyA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRQor0KYgPD4gQzsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKKyMg0rUgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMSUdBVFVSRSBURSBUU0UKKyMg0rQgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExJR0FUVVJFIFRFIFRTRQorCisjINK9IDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEFCS0hBU0lBTiBDSEUKKyMg0rwgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBQktIQVNJQU4gQ0hFCisjINK/IDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEFCS0hBU0lBTiBDSEUgV0lUSCBERVNDRU5ERVIKKyMg0r4gPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBQktIQVNJQU4gQ0hFIFdJVEggREVTQ0VOREVSCisKKwor0KogPD4gJG1vZHByaW1lMiAkdW5kZXIgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBUkQgU0lHTgor0YogPD4gICRtb2RwcmltZTIgOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KK9CsIDw+ICRtb2RwcmltZSAkdW5kZXIgOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNPRlQgU0lHTgor0YwgPD4gICRtb2RwcmltZSA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTgorCivRiyA8PiB5IDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQor0KsgPD4gWSA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorCisjINKNIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNFTUlTT0ZUIFNJR04KKyMg0owgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTRU1JU09GVCBTSUdOCisjINGjIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBVAorIyDRoiA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlBVAorCisjINGlIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPVElGSUVEIEUKKyMg0aQgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJT1RJRklFRCBFCisjINGnIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIExJVFRMRSBZVVMKKyMg0aYgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBMSVRUTEUgWVVTCisjINGrIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJJRyBZVVMKKyMg0aogPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCSUcgWVVTCisjINGpIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPVElGSUVEIExJVFRMRSBZVVMKKyMg0aggPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJT1RJRklFRCBMSVRUTEUgWVVTCisjINGtIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPVElGSUVEIEJJRyBZVVMKKyMg0awgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJT1RJRklFRCBCSUcgWVVTCisjINGvIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtTSQorIyDRriA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtTSQorIyDRsSA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBQU0kKKyMg0bAgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQU0kKKyMg0bMgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgRklUQQorIyDRsiA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEZJVEEKKyMg0bUgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgSVpISVRTQQorIyDRtCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIElaSElUU0EKKyMg0qkgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgQUJLSEFTSUFOIEhBCisjINKoIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQUJLSEFTSUFOIEhBCisjINOAIDw+IFhYWCA7ICMgQ1lSSUxMSUMgTEVUVEVSIFBBTE9DSEtBCisjIyMg0LDMhiA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBBCisjIyMg0JDMhiA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKyMjIyDQsMyIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKyMjIyDQkMyIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQorIyMjINOZzIggPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0NIV0EKKyMjIyDTmMyIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0NIV0EKKyMjIyDQs8yBIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRQorIyMjINCTzIEgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKKyMjIyDQtcyAIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFCisjIyMg0JXMgCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIElFCisjIyMg0LXMiCA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBJRQorIyMjINCVzIggPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorIyMjINC1zIYgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKyMjIyDQlcyGIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyMjIyDQtsyGIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorIyMjINCWzIYgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyMjIyDQtsyIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorIyMjINCWzIggPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyMjIyDQt8yIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisjIyMg0JfMiCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCisjIyMg0LjMgCA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBJCisjIyMg0JjMgCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEkKKyMjIyDQuMyEIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKKyMjIyDQmMyEIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorIyMjINC4zIggPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorIyMjINCYzIggPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCisjIyMg0ZbMiCA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyMjIyDQhsyIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisjIyMg0L7MiCA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBPCisjIyMg0J7MiCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIE8KKyMjIyDTqcyIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJBUlJFRCBPCisjIyMg06jMiCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJBUlJFRCBPCisjIyMg0LrMgSA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorIyMjINCazIEgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorIyMjINGDzIQgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorIyMjINCjzIQgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCisjIyMg0YPMhiA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBVCisjIyMg0KPMhiA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFUKKyMjIyDRg8yIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKKyMjIyDQo8yIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorIyMjINGDzIsgPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorIyMjINCjzIsgPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCisjIyMg0YfMiCA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKKyMjIyDQp8yIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisjIyMg0YvMiCA8PiBYWFggOyAjIENZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCisjIyMg0KvMiCA8PiBYWFggOyAjIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKKyMjIyDRjcyIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKyMjIyDQrcyIIDw+IFhYWCA7ICMgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQorIyMjING1zI8gPD4gWFhYIDsgIyBDWVJJTExJQyBTTUFMTCBMRVRURVIgSVpISVRTQQorIyMjING0zI8gPD4gWFhYIDsgIyBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJWkhJVFNBCisKKyMgQ29tcGxldGVuZXNzCiskaWdub3JlID0gW1s6TWFyazpdJyddICogOworfCBrIDwgcSA7Cit8IEsgPCBRIDsKK3wgdSA8IHcgOworfCBVIDwgVyA7Cit8IEtTIDwgWCB9ICRpZ25vcmUgWzpVcHBlcmNhc2VMZXR0ZXI6XSA7Cit8IEtTIDwgWzpVcHBlcmNhc2VMZXR0ZXI6XSAkaWdub3JlIHsgWCA7Cit8IEtzIDwgWCA7Cit8IGtzIDwgeCA7CisKKzo6IE5GQyAoTkZEKSA7CisjIG5vdGU6IGEgZ2xvYmFsIGZpbHRlciBpcyBtb3JlIGVmZmljaWVudCwgYnV0IE1VU1QgaW5jbHVkZSBhbGwgc291cmNlIGNoYXJzISEKKyMgOjogKFtcdTAwMDAtXHUwMDdFIFx1MDJCOSBcdTAyQkEgWzpDeXJpbGxpYzpdIFs6TGF0aW46XSBbOm5vbnNwYWNpbmcgbWFyazpdXSk7CisjIE1JTklNQUwgRklMVEVSOiBMYXRpbi1DeXJpbGxpYworOjogKCBbXHUwMzA4QS1aYS16XHUwMEMwLVx1MDBDRlx1MDBEMS1cdTAwRDZcdTAwRDktXHUwMEREXHUwMEUwLVx1MDBFRlx1MDBGMS1cdTAwRjZcdTAwRjktXHUwMEZEXHUwMEZGLVx1MDEyNVx1MDEyOC1cdTAxMzBcdTAxMzQtXHUwMTM3XHUwMTM5LVx1MDEzRVx1MDE0My1cdTAxNDhcdTAxNEMtXHUwMTUxXHUwMTU0LVx1MDE2NVx1MDE2OC1cdTAxN0VcdTAxOEZcdTAxQTAtXHUwMUExXHUwMUFGLVx1MDFCMFx1MDFDRC1cdTAxRENcdTAxREUtXHUwMUUzXHUwMUU2LVx1MDFGMFx1MDFGNC1cdTAxRjVcdTAxRjgtXHUwMjFCXHUwMjFFLVx1MDIxRlx1MDIyNi1cdTAyMzNcdTAyNTlcdTAyQjktXHUwMkJBXHUwMzAwLVx1MDMwMlx1MDMwNi1cdTAzMDdcdTAzMENcdTAzMjZcdTAzMzFcdTAzNDAtXHUwMzQxXHUwMzQ0XHUwMzc0XHUwMzg1LVx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwMzkwXHUwM0FDLVx1MDNCMFx1MDNDQy1cdTAzQ0VcdTAzRDNcdTA0MDBcdTA0MDNcdTA0MEMtXHUwNDBFXHUwNDE5XHUwNDM5XHUwNDUwXHUwNDUzXHUwNDVDLVx1MDQ1RVx1MDRDMS1cdTA0QzJcdTA0RDAtXHUwNEQxXHUwNEQ2LVx1MDREN1x1MUUwMC1cdTFFOTlcdTFFOUJcdTFFQTAtXHUxRUY5XHUxRjAyLVx1MUYwNVx1MUYwQS1cdTFGMERcdTFGMTItXHUxRjE1XHUxRjFBLVx1MUYxRFx1MUYyMi1cdTFGMjVcdTFGMkEtXHUxRjJEXHUxRjMyLVx1MUYzNVx1MUYzQS1cdTFGM0RcdTFGNDItXHUxRjQ1XHUxRjRBLVx1MUY0RFx1MUY1Mi1cdTFGNTVcdTFGNUJcdTFGNURcdTFGNjItXHUxRjY1XHUxRjZBLVx1MUY2RFx1MUY3MC1cdTFGN0RcdTFGODItXHUxRjg1XHUxRjhBLVx1MUY4RFx1MUY5Mi1cdTFGOTVcdTFGOUEtXHUxRjlEXHUxRkEyLVx1MUZBNVx1MUZBQS1cdTFGQURcdTFGQjBcdTFGQjJcdTFGQjRcdTFGQjhcdTFGQkEtXHUxRkJCXHUxRkMyXHUxRkM0XHUxRkM4LVx1MUZDQlx1MUZDRC1cdTFGQ0VcdTFGRDBcdTFGRDItXHUxRkQzXHUxRkQ4XHUxRkRBLVx1MUZEQlx1MUZERC1cdTFGREVcdTFGRTBcdTFGRTItXHUxRkUzXHUxRkU4XHUxRkVBLVx1MUZFQlx1MUZFRC1cdTFGRUVcdTFGRjJcdTFGRjRcdTFGRjgtXHUxRkZCXHUyMTJBLVx1MjEyQl0gKSA7CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0RldmFuYWdhcmlfSW50ZXJJbmRpYy50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0RldmFuYWdhcmlfSW50ZXJJbmRpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODFiZWNkNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfRGV2YW5hZ2FyaV9JbnRlckluZGljLnR4dApAQCAtMCwwICsxLDEyMCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9EZXZhbmFnYXJpX0ludGVySW5kaWMudHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wOS8xOSAxODoxMToyMyAkCisjICRSZXZpc2lvbjogMS4xMCAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBEZXZhbmFnYXJpLUludGVySW5kaWMKKyMgOjogTkZEOworI1J1bGVzIGZvciBEZWNvbXBvc2VkIGNoYXJhY3RlcnMKKworCisgXHUwOTAxPlx1RTAwMTsgICMgU0lHTiBDQU5EUkFCSU5EVQorIFx1MDkwMj5cdUUwMDI7ICAjIFNJR04gQU5VU1ZBUkEKKyBcdTA5MDM+XHVFMDAzOyAgIyBTSUdOIFZJU0FSR0EKKyBcdTA5MDU+XHVFMDA1OyAgIyBMRVRURVIgQQorIFx1MDkwNj5cdUUwMDY7ICAjIExFVFRFUiBBQQorIFx1MDkwNz5cdUUwMDc7ICAjIExFVFRFUiBJCisgXHUwOTA4Plx1RTAwODsgICMgTEVUVEVSIElJCisgXHUwOTA5Plx1RTAwOTsgICMgTEVUVEVSIFUKKyBcdTA5MEE+XHVFMDBBOyAgIyBMRVRURVIgVVUKKyBcdTA5MEI+XHVFMDBCOyAgIyBMRVRURVIgVk9DQUxJQyBSCisgXHUwOTBDPlx1RTAwQzsgICMgTEVUVEVSIFZPQ0FMSUMgTAorIFx1MDkwRD5cdUUwMEQ7ICAjIExFVFRFUiBDQU5EUkEgRSAoRm9yIHJlcHJlc2VudGluZyBFbmdsaXNoIHNvdW5kcykKKyBcdTA5MEU+XHVFMDBFOyAjIFVOTUFQUEVEIExFVFRFUiBTSE9SVCBFKEZvciBTb3V0aGVybiBTY3JpcHRzKQorIFx1MDkwRj5cdUUwMEY7ICAjIExFVFRFUiBFCisgXHUwOTEwPlx1RTAxMDsgICMgTEVUVEVSIEFJCisgXHUwOTExPlx1RTAxMTsgICMgTEVUVEVSIENBTkRSQSBPIChGb3IgcmVwcmVzZW50aW5nIEVuZ2xpc2ggc291bmRzKQorIFx1MDkxMj5cdUUwMTI7ICMgVU5NQVBQRUQgTEVUVEVSIFNIT1JUIE8gKEZvciBTb3V0aGVybiBTY3JpcHRzKQorIFx1MDkxMz5cdUUwMTM7ICAjIExFVFRFUiBPCisgXHUwOTE0Plx1RTAxNDsgICMgTEVUVEVSIEFVCisgXHUwOTE1Plx1RTAxNTsgICMgTEVUVEVSIEtBCisgXHUwOTE2Plx1RTAxNjsgICMgTEVUVEVSIEtIQQorIFx1MDkxNz5cdUUwMTc7ICAjIExFVFRFUiBHQQorIFx1MDkxOD5cdUUwMTg7ICAjIExFVFRFUiBHSEEKKyBcdTA5MTk+XHVFMDE5OyAgIyBMRVRURVIgTkdBCisgXHUwOTFBPlx1RTAxQTsgICMgTEVUVEVSIENBCisgXHUwOTFCPlx1RTAxQjsgICMgTEVUVEVSIENIQQorIFx1MDkxQz5cdUUwMUM7ICAjIExFVFRFUiBKQQorIFx1MDkxRD5cdUUwMUQ7ICAjIExFVFRFUiBKSEEKKyBcdTA5MUU+XHVFMDFFOyAgIyBMRVRURVIgTllBCisgXHUwOTFGPlx1RTAxRjsgICMgTEVUVEVSIFRUQQorIFx1MDkyMD5cdUUwMjA7ICAjIExFVFRFUiBUVEhBCisgXHUwOTIxPlx1RTAyMTsgICMgTEVUVEVSIEREQQorIFx1MDkyMj5cdUUwMjI7ICAjIExFVFRFUiBEREhBCisgXHUwOTIzPlx1RTAyMzsgICMgTEVUVEVSIE5OQQorIFx1MDkyND5cdUUwMjQ7ICAjIExFVFRFUiBUQQorIFx1MDkyNT5cdUUwMjU7ICAjIExFVFRFUiBUSEEKKyBcdTA5MjY+XHVFMDI2OyAgIyBMRVRURVIgREEKKyBcdTA5Mjc+XHVFMDI3OyAgIyBMRVRURVIgREhBCisgXHUwOTI4Plx1RTAyODsgICMgTEVUVEVSIE5BCisgXHUwOTI5Plx1RTAyOTsgIAorIFx1MDkyQT5cdUUwMkE7ICAjIExFVFRFUiBQQQorIFx1MDkyQj5cdUUwMkI7ICAjIExFVFRFUiBQSEEKKyBcdTA5MkM+XHVFMDJDOyAgIyBMRVRURVIgQkEKKyBcdTA5MkQ+XHVFMDJEOyAgIyBMRVRURVIgQkhBCisgXHUwOTJFPlx1RTAyRTsgICMgTEVUVEVSIE1BCisgXHUwOTJGPlx1RTAyRjsgICMgTEVUVEVSIFlBCisgXHUwOTMwPlx1RTAzMDsgICMgTEVUVEVSIFJBCisgXHUwOTMxPlx1RTAzMTsKKyBcdTA5MzI+XHVFMDMyOyAgIyBMRVRURVIgTEEKKyBcdTA5MzM+XHVFMDMzOyAgIyBMRVRURVIgTExBCisgXHUwOTM0Plx1RTAzNDsKKworIFx1MDkzNT5cdUUwMzU7ICAjIExFVFRFUiBWQQorIFx1MDkzNj5cdUUwMzY7ICAjIExFVFRFUiBTSEEKKyBcdTA5Mzc+XHVFMDM3OyAgIyBMRVRURVIgU1NBCisgXHUwOTM4Plx1RTAzODsgICMgTEVUVEVSIFNBCisgXHUwOTM5Plx1RTAzOTsgICMgTEVUVEVSIEhBCisgXHUwOTNDPlx1RTAzQzsgICMgU0lHTiBOVUtUQQorIFx1MDkzRD5cdUUwM0Q7ICAjIFNJR04gQVZBR1JBSEEKKyBcdTA5M0U+XHVFMDNFOyAgIyBWT1dFTCBTSUdOIEFBCisgXHUwOTNGPlx1RTAzRjsgICMgVk9XRUwgU0lHTiBJCisgXHUwOTQwPlx1RTA0MDsgICMgVk9XRUwgU0lHTiBJSQorIFx1MDk0MT5cdUUwNDE7ICAjIFZPV0VMIFNJR04gVQorIFx1MDk0Mj5cdUUwNDI7ICAjIFZPV0VMIFNJR04gVVUKKyBcdTA5NDM+XHVFMDQzOyAgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorIFx1MDk0ND5cdUUwNDQ7ICAjIFZPV0VMIFNJR04gVk9DQUxJQyBSUgorIFx1MDk0NT5cdUUwNDU7ICAjIFZPV0VMIFNJR04gQ0FORFJBIEUKKyBcdTA5NDY+XHVFMDQ2OyAjIFVOTUFQUEVEIFZPV0VMIFNJR04gU0hPUlQgRQorIFx1MDk0Nz5cdUUwNDc7ICAjIFZPV0VMIFNJR04gRQorIFx1MDk0OD5cdUUwNDg7ICAjIFZPV0VMIFNJR04gQUkKKyBcdTA5NDk+XHVFMDQ5OyAgIyBWT1dFTCBTSUdOIENBTkRSQSBPCisgXHUwOTRBPlx1RTA0QTsgIyBVTk1BUFBFRCBWT1dFTCBTSUdOIFNIT1JUIE8KKyBcdTA5NEI+XHVFMDRCOyAgIyBWT1dFTCBTSUdOIE8KKyBcdTA5NEM+XHVFMDRDOyAgIyBWT1dFTCBTSUdOIEFVCisgXHUwOTREPlx1RTA0RDsgICMgU0lHTiBWSVJBTUEKKyBcdTA5NTA+XHVFMDUwOyAgIyBPTQorIFx1MDk1MT5cdUUwNTE7ICAgICAgICMgVU5NQVBQRUQgU1RSRVNTIFNJR04gVURBVFRBCisgXHUwOTUyPlx1RTA1MjsgICAgICAgIyBVTk1BUFBFRCBTVFJFU1MgU0lHTiBBTlVEQVRUQQorIFx1MDk1Mz5cdUUwNTM7ICAgICAgICMgVU5NQVBQRUQgR1JBVkUgQUNDRU5UCisgXHUwOTU0Plx1RTA1NDsgICAgICAgIyBVTk1BUFBFRCBBQ1VURSBBQ0NFTlQKKyBcdTA5NTg+XHVFMDU4OworIFx1MDk1OT5cdUUwNTk7CisgXHUwOTVBPlx1RTA1YTsKKyBcdTA5NUI+XHVFMDViOworIFx1MDk1Qz5cdUUwNWM7CisgXHUwOTVEPlx1RTA1ZDsKKyBcdTA5NUU+XHVFMDVlOworIFx1MDk1Rj5cdUUwNWY7CisgXHUwOTYwPlx1RTA2MDsgICMgTEVUVEVSIFZPQ0FMSUMgUlIKKyBcdTA5NjE+XHVFMDYxOyAgIyBMRVRURVIgVk9DQUxJQyBMTAorIFx1MDk2Mj5cdUUwNjI7ICAjIFZPV0VMIFNJR04gVk9DQUxJQyBMCisgXHUwOTYzPlx1RTA2MzsgICMgVk9XRUwgU0lHTiBWT0NBTElDIExMCisgXHUwOTY0Plx1ZTA2NDsgICMgREFOREEKKyBcdTA5NjU+XHVlMDY1OyAgIyBET1VCTEUgREFOREEKKyBcdTA5NjY+XHVFMDY2OyAgIyBESUdJVCBaRVJPCisgXHUwOTY3Plx1RTA2NzsgICMgRElHSVQgT05FCisgXHUwOTY4Plx1RTA2ODsgICMgRElHSVQgVFdPCisgXHUwOTY5Plx1RTA2OTsgICMgRElHSVQgVEhSRUUKKyBcdTA5NkE+XHVFMDZBOyAgIyBESUdJVCBGT1VSCisgXHUwOTZCPlx1RTA2QjsgICMgRElHSVQgRklWRQorIFx1MDk2Qz5cdUUwNkM7ICAjIERJR0lUIFNJWAorIFx1MDk2RD5cdUUwNkQ7ICAjIERJR0lUIFNFVkVOCisgXHUwOTZFPlx1RTA2RTsgICMgRElHSVQgRUlHSFQKKyBcdTA5NkY+XHVFMDZGOyAgIyBESUdJVCBOSU5FCisgXHUwOTcwPlx1RTA3MDsgICMgRGV2YW5hZ2FyaS1JbnRlckluZGljOiBBQkJSRVZJQVRJT04gU0lHTgorIyAgICA6OiBORkMgKE5GRCkgOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9GdWxsd2lkdGhfSGFsZndpZHRoLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfRnVsbHdpZHRoX0hhbGZ3aWR0aC50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzMzYmJjYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfRnVsbHdpZHRoX0hhbGZ3aWR0aC50eHQKQEAgLTAsMCArMSwyNzUgQEAKK++7vyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfRnVsbHdpZHRoX0hhbGZ3aWR0aC50eHQsdiAkCisjICREYXRlOiAyMDAyLzAzLzAyIDAwOjI3OjI3ICQKKyMgJFJldmlzaW9uOiAxLjMgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgRnVsbHdpZHRoLUhhbGZ3aWR0aAorCisjIE1lY2hhbmljYWxseSBnZW5lcmF0ZWQgZnJvbSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZQorIyBJREVPR1JBUEhJQyBTUEFDRSB0aGVuIGFkZGVkLCBhbmQKKyMgRlVMTFdJRFRIIE1BQ1JPTiBjaGFuZ2VkIHRvIG1hcCB0byBNQUNST04sIG5vdCBTUEFDRSArIENPTUJJTklORyBNQUNST04KKworIyBtdWx0aWNoYXJhY3RlcgorCivjgqw8Pu+9tu++njsgIyB0byBLQVRBS0FOQSBMRVRURVIgR0EKK+OCrjw+7723776eOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBHSQor44KwPD7vvbjvvp47ICMgdG8gS0FUQUtBTkEgTEVUVEVSIEdVCivjgrI8Pu+9ue++njsgIyB0byBLQVRBS0FOQSBMRVRURVIgR0UKK+OCtDw+7726776eOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBHTwor44K2PD7vvbvvvp47ICMgdG8gS0FUQUtBTkEgTEVUVEVSIFpBCivjgrg8Pu+9vO++njsgIyB0byBLQVRBS0FOQSBMRVRURVIgWkkKK+OCujw+7729776eOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBaVQor44K8PD7vvb7vvp47ICMgdG8gS0FUQUtBTkEgTEVUVEVSIFpFCivjgr48Pu+9v+++njsgIyB0byBLQVRBS0FOQSBMRVRURVIgWk8KK+ODgDw+776A776eOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBEQQor44OCPD7vvoHvvp47ICMgdG8gS0FUQUtBTkEgTEVUVEVSIERJCivjg4U8Pu++gu++njsgIyB0byBLQVRBS0FOQSBMRVRURVIgRFUKK+ODhzw+776D776eOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBERQor44OJPD7vvoTvvp47ICMgdG8gS0FUQUtBTkEgTEVUVEVSIERPCivjg5A8Pu++iu++njsgIyB0byBLQVRBS0FOQSBMRVRURVIgQkEKK+ODkTw+776K776fOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBQQQor44OTPD7vvovvvp47ICMgdG8gS0FUQUtBTkEgTEVUVEVSIEJJCivjg5Q8Pu++i+++nzsgIyB0byBLQVRBS0FOQSBMRVRURVIgUEkKK+ODljw+776M776eOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBCVQor44OXPD7vvozvvp87ICMgdG8gS0FUQUtBTkEgTEVUVEVSIFBVCivjg5k8Pu++je++njsgIyB0byBLQVRBS0FOQSBMRVRURVIgQkUKK+ODmjw+776N776fOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBQRQor44OcPD7vvo7vvp47ICMgdG8gS0FUQUtBTkEgTEVUVEVSIEJPCivjg508Pu++ju++nzsgIyB0byBLQVRBS0FOQSBMRVRURVIgUE8KK+ODtDw+772z776eOyAjIHRvIEtBVEFLQU5BIExFVFRFUiBWVQor44O3PD7vvpzvvp47ICMgdG8gS0FUQUtBTkEgTEVUVEVSIFZBCivjg7o8Pu+9pu++njsgIyB0byBLQVRBS0FOQSBMRVRURVIgVk8KKworIyBzaW5nbGUgY2hhcmFjdGVyCisKK++8gTw+JyEnOyAjIGZyb20gRlVMTFdJRFRIIEVYQ0xBTUFUSU9OIE1BUksKK++8gjw+J1wiJzsgIyBmcm9tIEZVTExXSURUSCBRVU9UQVRJT04gTUFSSwor77yDPD4nIyc7ICMgZnJvbSBGVUxMV0lEVEggTlVNQkVSIFNJR04KK++8hDw+JyQnOyAjIGZyb20gRlVMTFdJRFRIIERPTExBUiBTSUdOCivvvIU8PiclJzsgIyBmcm9tIEZVTExXSURUSCBQRVJDRU5UIFNJR04KK++8hjw+JyYnOyAjIGZyb20gRlVMTFdJRFRIIEFNUEVSU0FORAor77yHPD4nJzsgIyBmcm9tIEZVTExXSURUSCBBUE9TVFJPUEhFCivvvIg8PicoJzsgIyBmcm9tIEZVTExXSURUSCBMRUZUIFBBUkVOVEhFU0lTCivvvIk8PicpJzsgIyBmcm9tIEZVTExXSURUSCBSSUdIVCBQQVJFTlRIRVNJUwor77yKPD4nKic7ICMgZnJvbSBGVUxMV0lEVEggQVNURVJJU0sKK++8izw+JysnOyAjIGZyb20gRlVMTFdJRFRIIFBMVVMgU0lHTgor77yMPD4nLCc7ICMgZnJvbSBGVUxMV0lEVEggQ09NTUEKK++8jTw+Jy0nOyAjIGZyb20gRlVMTFdJRFRIIEhZUEhFTi1NSU5VUwor77yOPD4nLic7ICMgZnJvbSBGVUxMV0lEVEggRlVMTCBTVE9QCivvvI88PicvJzsgIyBmcm9tIEZVTExXSURUSCBTT0xJRFVTCivvvJA8PicwJzsgIyBmcm9tIEZVTExXSURUSCBESUdJVCBaRVJPCivvvJE8PicxJzsgIyBmcm9tIEZVTExXSURUSCBESUdJVCBPTkUKK++8kjw+JzInOyAjIGZyb20gRlVMTFdJRFRIIERJR0lUIFRXTwor77yTPD4nMyc7ICMgZnJvbSBGVUxMV0lEVEggRElHSVQgVEhSRUUKK++8lDw+JzQnOyAjIGZyb20gRlVMTFdJRFRIIERJR0lUIEZPVVIKK++8lTw+JzUnOyAjIGZyb20gRlVMTFdJRFRIIERJR0lUIEZJVkUKK++8ljw+JzYnOyAjIGZyb20gRlVMTFdJRFRIIERJR0lUIFNJWAor77yXPD4nNyc7ICMgZnJvbSBGVUxMV0lEVEggRElHSVQgU0VWRU4KK++8mDw+JzgnOyAjIGZyb20gRlVMTFdJRFRIIERJR0lUIEVJR0hUCivvvJk8Pic5JzsgIyBmcm9tIEZVTExXSURUSCBESUdJVCBOSU5FCivvvJo8Pic6JzsgIyBmcm9tIEZVTExXSURUSCBDT0xPTgor77ybPD4nOyc7ICMgZnJvbSBGVUxMV0lEVEggU0VNSUNPTE9OCivvvJw8Pic8JzsgIyBmcm9tIEZVTExXSURUSCBMRVNTLVRIQU4gU0lHTgor77ydPD4nPSc7ICMgZnJvbSBGVUxMV0lEVEggRVFVQUxTIFNJR04KK++8njw+Jz4nOyAjIGZyb20gRlVMTFdJRFRIIEdSRUFURVItVEhBTiBTSUdOCivvvJ88Pic/JzsgIyBmcm9tIEZVTExXSURUSCBRVUVTVElPTiBNQVJLCivvvKA8PidAJzsgIyBmcm9tIEZVTExXSURUSCBDT01NRVJDSUFMIEFUCivvvKE8PkE7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQor77yiPD5COyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIEIKK++8ozw+QzsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCivvvKQ8PkQ7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAor77ylPD5FOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIEUKK++8pjw+RjsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCivvvKc8Pkc7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgRwor77yoPD5IOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIEgKK++8qTw+STsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCivvvKo8Pko7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgor77yrPD5LOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIEsKK++8rDw+TDsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCivvvK08Pk07ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQor77yuPD5OOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIE4KK++8rzw+TzsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCivvvLA8PlA7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAor77yxPD5ROyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIFEKK++8sjw+UjsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCivvvLM8PlM7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgUwor77y0PD5UOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIFQKK++8tTw+VTsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCivvvLY8PlY7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgor77y3PD5XOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIFcKK++8uDw+WDsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCivvvLk8Plk7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQor77y6PD5aOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIENBUElUQUwgTEVUVEVSIFoKK++8uzw+J1snOyAjIGZyb20gRlVMTFdJRFRIIExFRlQgU1FVQVJFIEJSQUNLRVQKK++8vDw+J1xcJzsgIyBmcm9tIEZVTExXSURUSCBSRVZFUlNFIFNPTElEVVMge2RvdWJsZSBlc2NhcGUgLSBhbGl1fQor77y9PD4nXSc7ICMgZnJvbSBGVUxMV0lEVEggUklHSFQgU1FVQVJFIEJSQUNLRVQKK++8vjw+J14nOyAjIGZyb20gRlVMTFdJRFRIIENJUkNVTUZMRVggQUNDRU5UCivvvL88PidfJzsgIyBmcm9tIEZVTExXSURUSCBMT1cgTElORQor772APD4nYCc7ICMgZnJvbSBGVUxMV0lEVEggR1JBVkUgQUNDRU5UCivvvYE8PmE7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEEKK++9gjw+YjsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgQgor772DPD5jOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBDCivvvYQ8PmQ7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEQKK++9hTw+ZTsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgRQor772GPD5mOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBGCivvvYc8Pmc7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEcKK++9iDw+aDsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgSAor772JPD5pOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBJCivvvYo8Pmo7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEoKK++9izw+azsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgSwor772MPD5sOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBMCivvvY08Pm07ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIE0KK++9jjw+bjsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgTgor772PPD5vOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBPCivvvZA8PnA7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFAKK++9kTw+cTsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgUQor772SPD5yOyAjIGZyb20gRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBSCivvvZM8PnM7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFMKK++9lDw+dDsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgVAor772VPD51OyAjIGZyb20gRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBVCivvvZY8PnY7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFYKK++9lzw+dzsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgVwor772YPD54OyAjIGZyb20gRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBYCivvvZk8Pnk7ICMgZnJvbSBGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIFkKK++9mjw+ejsgIyBmcm9tIEZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgWgor772bPD4neyc7ICMgZnJvbSBGVUxMV0lEVEggTEVGVCBDVVJMWSBCUkFDS0VUCivvvZw8Pid8JzsgIyBmcm9tIEZVTExXSURUSCBWRVJUSUNBTCBMSU5FCivvvZ08Pid9JzsgIyBmcm9tIEZVTExXSURUSCBSSUdIVCBDVVJMWSBCUkFDS0VUCivvvZ48Pid+JzsgIyBmcm9tIEZVTExXSURUSCBUSUxERQor44CCPD7vvaE7ICMgdG8gSEFMRldJRFRIIElERU9HUkFQSElDIEZVTEwgU1RPUAor44CMPD7vvaI7ICMgdG8gSEFMRldJRFRIIExFRlQgQ09STkVSIEJSQUNLRVQKK+OAjTw+772jOyAjIHRvIEhBTEZXSURUSCBSSUdIVCBDT1JORVIgQlJBQ0tFVAor44CBPD7vvaQ7ICMgdG8gSEFMRldJRFRIIElERU9HUkFQSElDIENPTU1BCivjg7s8Pu+9pTsgIyB0byBIQUxGV0lEVEggS0FUQUtBTkEgTUlERExFIERPVAor44OyPD7vvaY7ICMgdG8gSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBXTwor44KhPD7vvac7ICMgdG8gSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBBCivjgqM8Pu+9qDsgIyB0byBIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIEkKK+OCpTw+772pOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgVQor44KnPD7vvao7ICMgdG8gSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBTTUFMTCBFCivjgqk8Pu+9qzsgIyB0byBIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIFNNQUxMIE8KK+ODozw+772sOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgWUEKK+ODpTw+772tOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgWVUKK+ODpzw+772uOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgWU8KK+ODgzw+772vOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU01BTEwgVFUKK+ODvDw+772wOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQS1ISVJBR0FOQSBQUk9MT05HRUQgU09VTkQgTUFSSwor44KiPD7vvbE7ICMgdG8gSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBBCivjgqQ8Pu+9sjsgIyB0byBIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIEkKK+OCpjw+772zOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVQor44KoPD7vvbQ7ICMgdG8gSEFMRldJRFRIIEtBVEFLQU5BIExFVFRFUiBFCivjgqo8Pu+9tTsgIyB0byBIQUxGV0lEVEggS0FUQUtBTkEgTEVUVEVSIE8KK+OCqzw+7722OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS0EKK+OCrTw+7723OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS0kKK+OCrzw+7724OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS1UKK+OCsTw+7725OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS0UKK+OCszw+7726OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgS08KK+OCtTw+7727OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU0EKK+OCtzw+7728OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU0kKK+OCuTw+7729OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU1UKK+OCuzw+772+OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU0UKK+OCvTw+772/OyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgU08KK+OCvzw+776AOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVEEKK+ODgTw+776BOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVEkKK+ODhDw+776COyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVFUKK+ODhjw+776DOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVEUKK+ODiDw+776EOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgVE8KK+ODijw+776FOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTkEKK+ODizw+776GOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTkkKK+ODjDw+776HOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTlUKK+ODjTw+776IOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTkUKK+ODjjw+776JOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTk8KK+ODjzw+776KOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSEEKK+ODkjw+776LOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSEkKK+ODlTw+776MOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSFUKK+ODmDw+776NOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSEUKK+ODmzw+776OOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgSE8KK+ODnjw+776POyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTUEKK+ODnzw+776QOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTUkKK+ODoDw+776ROyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTVUKK+ODoTw+776SOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTUUKK+ODojw+776TOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTU8KK+ODpDw+776UOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgWUEKK+ODpjw+776VOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgWVUKK+ODqDw+776WOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgWU8KK+ODqTw+776XOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUkEKK+ODqjw+776YOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUkkKK+ODqzw+776ZOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUlUKK+ODrDw+776aOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUkUKK+ODrTw+776bOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgUk8KK+ODrzw+776cOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgV0EKK+ODszw+776dOyAjIHRvIEhBTEZXSURUSCBLQVRBS0FOQSBMRVRURVIgTgor44KZPD7vvp47ICMgdG8gSEFMRldJRFRIIEtBVEFLQU5BIFZPSUNFRCBTT1VORCBNQVJLCivjgpo8Pu++nzsgIyB0byBIQUxGV0lEVEggS0FUQUtBTkEgU0VNSS1WT0lDRUQgU09VTkQgTUFSSwor4YWgPD7vvqA7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBGSUxMRVIKK+GEgDw+776hOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEtJWUVPSwor4YSBPD7vvqI7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgU1NBTkdLSVlFT0sKK+GGqjw+776jOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEtJWUVPSy1TSU9TCivhhII8Pu++pDsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBOSUVVTgor4YasPD7vvqU7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgTklFVU4tQ0lFVUMKK+GGrTw+776mOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIE5JRVVOLUhJRVVICivhhIM8Pu++pzsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBUSUtFVVQKK+GEhDw+776oOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HVElLRVVUCivhhIU8Pu++qTsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBSSUVVTAor4YawPD7vvqo7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUklFVUwtS0lZRU9LCivhhrE8Pu++qzsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBSSUVVTC1NSUVVTQor4YayPD7vvqw7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUklFVUwtUElFVVAKK+GGszw+776tOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLVNJT1MKK+GGtDw+776uOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLVRISUVVVEgKK+GGtTw+776vOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLVBISUVVUEgKK+GEmjw+776wOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFJJRVVMLUhJRVVICivhhIY8Pu++sTsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBNSUVVTQor4YSHPD7vvrI7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgUElFVVAKK+GEiDw+776zOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HUElFVVAKK+GEoTw+7760OyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFBJRVVQLVNJT1MKK+GEiTw+7761OyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNJT1MKK+GEijw+7762OyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFNTQU5HU0lPUwor4YSLPD7vvrc7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgSUVVTkcKK+GEjDw+7764OyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIENJRVVDCivhhI08Pu++uTsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBTU0FOR0NJRVVDCivhhI48Pu++ujsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBDSElFVUNICivhhI88Pu++uzsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBLSElFVUtICivhhJA8Pu++vDsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBUSElFVVRICivhhJE8Pu++vTsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBQSElFVVBICivhhJI8Pu++vjsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBISUVVSAor4YWhPD7vv4I7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgQQor4YWiPD7vv4M7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgQUUKK+GFozw+77+EOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFlBCivhhaQ8Pu+/hTsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZQUUKK+GFpTw+77+GOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIEVPCivhhaY8Pu+/hzsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBFCivhhac8Pu+/ijsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZRU8KK+GFqDw+77+LOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFlFCivhhak8Pu+/jDsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBPCivhhao8Pu+/jTsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBXQQor4YWrPD7vv447ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgV0FFCivhhaw8Pu+/jzsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBPRQor4YWtPD7vv5I7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgWU8KK+GFrjw+77+TOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFUKK+GFrzw+77+UOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFdFTwor4YWwPD7vv5U7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgV0UKK+GFsTw+77+WOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFdJCivhhbI8Pu+/lzsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBZVQor4YWzPD7vv5o7ICMgdG8gSEFMRldJRFRIIEhBTkdVTCBMRVRURVIgRVUKK+GFtDw+77+bOyAjIHRvIEhBTEZXSURUSCBIQU5HVUwgTEVUVEVSIFlJCivhhbU8Pu+/nDsgIyB0byBIQUxGV0lEVEggSEFOR1VMIExFVFRFUiBJCivvv6A8PifCoic7ICMgZnJvbSBGVUxMV0lEVEggQ0VOVCBTSUdOCivvv6E8PifCoyc7ICMgZnJvbSBGVUxMV0lEVEggUE9VTkQgU0lHTgor77+iPD4nwqwnOyAjIGZyb20gRlVMTFdJRFRIIE5PVCBTSUdOCivvv6M8PifCryc7ICMgZnJvbSBGVUxMV0lEVEggTUFDUk9OCisn44CAJzw+JyAnOyAjIGlkZW9ncmFwaGljIHNwYWNlIChwbGFjZSB0aGlzIGFmdGVyIE1BQ1JPTikKK++/pDw+J8KmJzsgIyBmcm9tIEZVTExXSURUSCBCUk9LRU4gQkFSCivvv6U8PifCpSc7ICMgZnJvbSBGVUxMV0lEVEggWUVOIFNJR04KK++/pjw+4oKpOyAjIGZyb20gRlVMTFdJRFRIIFdPTiBTSUdOCivilII8Pu+/qDsgIyB0byBIQUxGV0lEVEggRk9STVMgTElHSFQgVkVSVElDQUwKK+KGkDw+77+pOyAjIHRvIEhBTEZXSURUSCBMRUZUV0FSRFMgQVJST1cKK+KGkTw+77+qOyAjIHRvIEhBTEZXSURUSCBVUFdBUkRTIEFSUk9XCivihpI8Pu+/qzsgIyB0byBIQUxGV0lEVEggUklHSFRXQVJEUyBBUlJPVwor4oaTPD7vv6w7ICMgdG8gSEFMRldJRFRIIERPV05XQVJEUyBBUlJPVwor4pagPD7vv607ICMgdG8gSEFMRldJRFRIIEJMQUNLIFNRVUFSRQor4peLPD7vv647ICMgdG8gSEFMRldJRFRIIFdISVRFIENJUkNMRQorCisjIGVvZgorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0dyZWVrX0xhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfR3JlZWtfTGF0aW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyNDAxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0dyZWVrX0xhdGluLnR4dApAQCAtMCwwICsxLDM0MiBAQAor77u/Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9HcmVla19MYXRpbi50eHQsdiAkCisjICREYXRlOiAyMDAyLzA3LzIxIDA4OjM5OjIzICQKKyMgJFJldmlzaW9uOiAxLjIxICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFJ1bGVzIGFyZSBwcmVkaWNhdGVkIG9uIHJ1bm5pbmcgTkZEIGZpcnN0LCBhbmQgTkZDIGFmdGVyd2FyZHMKKyMgOjogW1x1MDAwMC1cdTAwN0YgXHUwMzcwLVx1MDNGRiBbOkdyZWVrOl0gWzpub25zcGFjaW5nIG1hcms6XV0gOworIyBNSU5JTUFMIEZJTFRFUiBHRU5FUkFURUQgRk9SOiBHcmVlay1MYXRpbgorOjogWztcdTAwQjVcdTAwQjdcdTAwQzRcdTAwQ0JcdTAwQ0ZcdTAwRDZcdTAwRENcdTAwRTRcdTAwRUJcdTAwRUZcdTAwRjZcdTAwRkNcdTAwRkYtXHUwMTAxXHUwMTEyLVx1MDExM1x1MDEyQS1cdTAxMkJcdTAxNEMtXHUwMTREXHUwMTZBLVx1MDE2Qlx1MDE3OFx1MDFENS1cdTAxRENcdTAxREUtXHUwMUUzXHUwMUVDLVx1MDFFRFx1MDIyQS1cdTAyMkRcdTAyMzAtXHUwMjMzXHUwMzA0XHUwMzA4XHUwMzEzLVx1MDMxNFx1MDM0Mi1cdTAzNDVcdTAzN0FcdTAzN0VcdTAzODYtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzQ0VcdTAzRDAtXHUwM0Q3XHUwM0RCXHUwM0REXHUwM0RGXHUwM0UxXHUwM0UzXHUwM0U1XHUwM0U3XHUwM0U5XHUwM0VCXHUwM0VEXHUwM0VGLVx1MDNGNVx1MDQwMVx1MDQwN1x1MDQ1MVx1MDQ1N1x1MDREMi1cdTA0RDNcdTA0REEtXHUwNERGXHUwNEUyLVx1MDRFN1x1MDRFQS1cdTA0RjFcdTA0RjQtXHUwNEY1XHUwNEY4LVx1MDRGOVx1MUUxNC1cdTFFMTdcdTFFMjAtXHUxRTIxXHUxRTI2LVx1MUUyN1x1MUUyRS1cdTFFMkZcdTFFMzgtXHUxRTM5XHUxRTRFLVx1MUU1M1x1MUU1Qy1cdTFFNURcdTFFN0EtXHUxRTdCXHUxRTg0LVx1MUU4NVx1MUU4Qy1cdTFFOERcdTFFOTdcdTFGMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMS1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkNGLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGREYtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIxMjZdIDsKKworOjogTkZEIChORkMpIDsgCisKKyMgVEVTVCBDQVNFUworCisjIOG9iM67zq/Os86/zrkg4byUzrzPhs6/zr3Otc+CIM+Azr/Ou8674b+2zr0g4byAz4bPgc+Mzr3Pic69IM+Gzr/Oss61z4HPjs+EzrXPgc6/zrkg4oCUIM6gzrvOrM+Ez4nOvc6/z4IKKyMg4b6CIOG+kiDhvqIg4b6DIOG+kyDhvqMKKyMg4b6zIOG/gyDhv7Mg4b2DIOG9hAorIyDhvaDPgiDhvaHPgiDhvaLPgiDhvaPPggorIyDhvajPgiDhvanPgiDhvarPgiDhvavPggorIyDhvajOoyDhvanOoyDhvarOoyDhvavOoworIyDhuqAsIOG6oSwg4bq4LCDhurksIOG7jCwg4buNCisKKyMgVXNlZnVsIHZhcmlhYmxlcworCiskbG93ZXIgPSBbWzpsYXRpbjpdWzpncmVlazpdICYgWzpMbDpdXTsgCiskZ2xvd2VyID0gW1s6Z3JlZWs6XSAmIFs6TGw6XV07IAorJHVwcGVyID0gW1s6bGF0aW46XVs6Z3JlZWs6XSAmIFs6THU6XV0gOyAKKyRhY2NlbnQgPSBbOk06XSA7CisKKyMgTk9URTogcmVzdHJpY3QgdG8ganVzdCB0aGUgR3JlZWsgJiBMYXRpbiBhY2NlbnRzIHRoYXQgd2UgY2FyZSBhYm91dAorIyBUT0RPOiBicm9hZGVuIG91dCBvbmNlIGludGVyYXRpb24gaXMgZml4ZWQKKyRhY2NlbnRNaW51cyA9IFsgW1x1MDMwMC1cdTAzNDVdICYgWzpNOl0gLSBbXHUwMzM4XV0gOworCiskbWFjcm9uID0gXHUwMzA0IDsKKyRkZG90ID0gXHUwMzA4IDsKKyRkZG90bWFjID0gWyRkZG90JG1hY3Jvbl07CisKKyRsY2d2b3dlbCA9IFvOsc61zrfOuc6/z4XPiV0gOyAKKyR1Y2d2b3dlbCA9IFvOkc6VzpfOmc6fzqXOqV0gOyAKKyRndm93ZWwgPSBbJGxjZ3Zvd2VsICR1Y2d2b3dlbF0gOyAKKyRsY2d2b3dlbEMgPSBbJGxjZ3Zvd2VsICRhY2NlbnRdIDsgCisKKyRldm93ZWwgPSBbYWVpb3V5QUVJT1VZXTsKKyRldm93ZWwyID0gW2l1eUlVWV07Ciskdm93ZWwgPSBbICRldm93ZWwgJGd2b3dlbF0gOyAKKworJGdhbW1hTGlrZSA9IFvOk86azp7Op86zzrrOvs+Hz7BdIDsgCiskZWdhbW1hTGlrZSA9IFtHS1hDZ2t4Y10gOyAKKyRzbW9vdGggPSDMkyA7IAorJHJvdWdoID0gzJQgOyAKKyRpb3Rhc3ViID0gzYUgOyAKKworJGV2b3dlbF9pID0gWyRldm93ZWwtW2lJXV0gOworJGV2b3dlbDJfaSA9IFt1eVVZXTsKKworJHVuZGVyYmFyID0gXHUwMzMxOworCiskYWZ0ZXJMZXR0ZXIgPSBbOkw6XSBbWzpNOl1cJ10qIDsKKyRiZWZvcmVMZXR0ZXIgPSBbWzpNOl1cJ10qIFs6TDpdIDsKKyRiZWZvcmVMb3dlciA9ICRhY2NlbnQgKiAkbG93ZXIgOyAKKworJG5vdExldHRlciA9IFteWzpMOl1bOk06XV0gOworJHVuZGVyID0gzLE7CisKKyMgRml4IHB1bmN0dWF0aW9uCisjIHByZXNlcnZlIG9yaWdpbmFsCitcOiA8PiBcOiAkdW5kZXIgOworXD8gPD4gXD8gJHVuZGVyIDsKKworXDsgPD4gXD8gOworwrcgPD4gXDogOworCisjIENJUkNVTUZMRVg6IGNvbnZlcnQgZ3JlZWsgY2lyY3VtZmxleCB0byBub3JtYWwgb25lLiBDb3VsZCB1c2UgdGlsZGUgb3IgaW52ZXJ0ZWQgYnJldmUKKworXHUwMzQyIDw+IFx1MDMwMiA7IAorCisjIElPVEE6IGNvbnZlcnQgaW90YSBzdWJzY3JpcHQgdG8gaW90YQorIyBmaXJzdCBtYWtlIHByZXZpb3VzIGFscGhhIGxvbmchCisKKyRhY2NlbnRfbWludXMgPSBbWyRhY2NlbnRdLVskaW90YXN1YiRtYWNyb25dXTsKKworzpEgfSAkYWNjZW50X21pbnVzICogJGlvdGFzdWIgPiB8IM6RICRtYWNyb24gOyAgCivOsSB9ICRhY2NlbnRfbWludXMgKiAkaW90YXN1YiA+IHwgzrEgJG1hY3JvbiA7IAorCisjIG5vdyBjb252ZXJ0IHRvIHVwcGVyY2FzZSBpZiBhZnRlciB1cHBlcmNhc2UsIG93IHRvIGxvd2VyY2FzZQorCiskdXBwZXIgJGFjY2VudCAqIHsgJGlvdGFzdWIgPiBJIDsgCiskaW90YXN1YiA+IGkgOyAKKworfCAkMSAkaW90YXN1YiA8ICgkZXZvd2VsICRtYWNyb24gJGFjY2VudE1pbnVzICopIGkgOworfCAkMSAkaW90YXN1YiA8ICgkZXZvd2VsICRtYWNyb24gJGFjY2VudE1pbnVzICopIEkgOworCisjIEJSRUFUSElORworCisjIENvbnZlcnQgcm91Z2ggYnJlYXRoaW5nIHRvIGgsIGFuZCBtb3ZlIGJlZm9yZSBsZXR0ZXJzLgorCisjIE1ha2UgQSBgIHggPSA+IEggYSB4CisKKyDOkSAoJG1hY3Jvbj8pICRyb3VnaCB9ICRiZWZvcmVMb3dlciA+IEggfCDOsSAkMTsgCisgzpUgJHJvdWdoIH0gJGJlZm9yZUxvd2VyID4gSCB8IM61OyAKKyDOlyAkcm91Z2ggfSAkYmVmb3JlTG93ZXIgPiBIIHwgzrcgOyAKKyDOmSAoJGRkb3Q/KSAkcm91Z2ggfSAkYmVmb3JlTG93ZXIgPiBIIHwgzrkgICQxOyAKKyDOnyAkcm91Z2ggfSAkYmVmb3JlTG93ZXIgPiBIIHwgzr8gOyAKKyDOpSAkcm91Z2ggfSAkYmVmb3JlTG93ZXIgPiBIIHwgz4UgOyAKKyDOqSAoJGRkb3Q/KSAkcm91Z2ggfSAkYmVmb3JlTG93ZXIgPiBIIHwgz4kgJDE7IAorCisjIE1ha2UgQSB4IGAgPSA+IEggYSB4CisKK86RICgkZ2xvd2VyICRtYWNyb24/KSAkcm91Z2ggPiBIIHwgzrEgJDEgOyAKK86VICgkZ2xvd2VyKSAkcm91Z2ggPiBIIHwgzrUgJDEgOyAKK86XICgkZ2xvd2VyKSAkcm91Z2ggPiBIIHwgzrcgJDEgOyAKK86ZICgkZ2xvd2VyICRkZG90PykgJHJvdWdoID4gSCB8IM65ICQxIDsgCivOnyAoJGdsb3dlcikgJHJvdWdoID4gSCB8IM6/ICQxIDsgCivOpSAoJGdsb3dlcikgJHJvdWdoID4gSCB8IM+FICQxIDsgCivOqSAoJGdsb3dlciAgJGRkb3Q/KSAkcm91Z2ggPiBIIHwgz4kgJDEgOyAKKworI090aGVyd2lzZSwgbWFrZSB4IGAgaW50byBoIHggYW5kIFggYCBpbnRvIEggWAorCisoJGxjZ3Zvd2VsICsgJGRkb3RtYWM/ICkgJHJvdWdoID4gaCB8ICQxIDsgCisoJGd2b3dlbCArICRkZG90bWFjPyApICRyb3VnaCA+IEggfCAkMSA7IAorCisjIEdvIGJhY2t3YXJkcyB3aXRoIEgKKworfCAkMSAkcm91Z2ggPCBoICgkZXZvd2VsICRtYWNyb24gJGRkb3Q/ICRldm93ZWwyX2kgJG1hY3Jvbj8pIDsKK3wgJDEgJHJvdWdoIDwgaCAoJGV2b3dlbCAkZGRvdD8gJGV2b3dlbDIgJG1hY3Jvbj8pIDsKK3wgJDEgJHJvdWdoIDwgaCAoJGV2b3dlbCAkbWFjcm9uPyAkZGRvdD8pIDsKKworfCAkMSAkcm91Z2ggPCBIIChbQUVJT1VZXSAkbWFjcm9uICRkZG90PyAkZXZvd2VsMl9pICRtYWNyb24/KSA7Cit8ICQxICRyb3VnaCA8IEggKFtBRUlPVVldICRkZG90PyAkZXZvd2VsMiAkbWFjcm9uPykgOworfCAkMSAkcm91Z2ggPCBIIChbQUVJT1VZXSAkbWFjcm9uPyAkZGRvdD8pIDsKKworIyB0aXRsZWNhc2UsIGhhdmUgdG8gZml4IGluZGl2aWR1YWxseQorIyBpbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgYWRkICZ1cHBlcmNhc2UoKSB0byBtYWtlIHRoaXMgZWFzaWVyCisKK3wgQSAkMSAkcm91Z2ggPCBIIGEgKCRtYWNyb24gICRkZG90PyAkZXZvd2VsMl9pICRtYWNyb24/KSA7Cit8IEUgJDEgJHJvdWdoIDwgSCBlICgkbWFjcm9uICAkZGRvdD8gJGV2b3dlbDJfaSAkbWFjcm9uPykgOworfCBJICQxICRyb3VnaCA8IEggaSAoJG1hY3JvbiAgJGRkb3Q/ICRldm93ZWwyX2kgJG1hY3Jvbj8pIDsKK3wgTyAkMSAkcm91Z2ggPCBIIG8gKCRtYWNyb24gICRkZG90PyAkZXZvd2VsMl9pICRtYWNyb24/KSA7Cit8IFUgJDEgJHJvdWdoIDwgSCB1ICgkbWFjcm9uICRkZG90PyAkZXZvd2VsMl9pICRtYWNyb24/KSA7Cit8IFkgJDEgJHJvdWdoIDwgSCB5ICgkbWFjcm9uICRkZG90PyAkZXZvd2VsMl9pICRtYWNyb24/KSA7CisKK3wgQSAkMSAkcm91Z2ggPCBIIGEgKCRkZG90PyAkZXZvd2VsMiAkbWFjcm9uPykgOworfCBFICQxICRyb3VnaCA8IEggZSAoJGRkb3Q/ICRldm93ZWwyICRtYWNyb24/KSA7Cit8IEkgJDEgJHJvdWdoIDwgSCBpICgkZGRvdD8gJGV2b3dlbDIgJG1hY3Jvbj8pIDsKK3wgTyAkMSAkcm91Z2ggPCBIIG8gKCRkZG90PyAkZXZvd2VsMiAkbWFjcm9uPykgOworfCBVICQxICRyb3VnaCA8IEggdSAoJGRkb3Q/ICRldm93ZWwyICRtYWNyb24/KSA7Cit8IFkgJDEgJHJvdWdoIDwgSCB5ICgkZGRvdD8gJGV2b3dlbDIgJG1hY3Jvbj8pIDsKKworfCBBICQxICRyb3VnaCA8IEggYSAoJG1hY3Jvbj8gJGRkb3Q/ICkgOworfCBFICQxICRyb3VnaCA8IEggZSAoJG1hY3Jvbj8gJGRkb3Q/ICkgOworfCBJICQxICRyb3VnaCA8IEggaSAoJG1hY3Jvbj8gJGRkb3Q/ICkgOworfCBPICQxICRyb3VnaCA8IEggbyAoJG1hY3Jvbj8gJGRkb3Q/ICkgOworfCBVICQxICRyb3VnaCA8IEggdSAoJG1hY3Jvbj8gJGRkb3Q/ICkgOworfCBZICQxICRyb3VnaCA8IEggeSAoJG1hY3Jvbj8gJGRkb3Q/ICkgOworCisjIE5vdyBkbyBzbW9vdGgKKworI2RlbGV0ZSBzbW9vdGggYnJlYXRoaW5nIGZvciBMYXRpbgorJHNtb290aCA+IDsgCisKKyMgaW5zZXJ0IGluIEdyZWVrCisjIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgYWxsIE1hcmtzIGFyZSBvbiBsZXR0ZXJzLgorCisgfCAkMSAkc21vb3RoIDwgJG5vdExldHRlciB7IChbclJdKSB9IFteaEgkc21vb3RoJHJvdWdoXSA7CisgfCAkMSAkc21vb3RoIDwgJG5vdExldHRlciB7ICgkZXZvd2VsICRtYWNyb24/ICRldm93ZWwyICRtYWNyb24/KSB9IFteJHNtb290aCRyb3VnaF0gOworIHwgJDEgJHNtb290aCA8ICRub3RMZXR0ZXIgeyAoJGV2b3dlbCAkbWFjcm9uPykgfSBbXiRldm93ZWwyJHNtb290aCRyb3VnaF0gOworCisjIFRPRE86IHByZXNlcnZlIHNtb290aC9yb3VnaCBicmVhdGhpbmcgaWYgbm90IAorIyBvbiBpbml0aWFsIHZvd2VsIHNlcXVlbmNlCisKKyMgbmVlZCB0byBoYXZlIHRoZXNlIHVwIGhlcmUgc28gdGhlIHJ1bGVzIGRvbid0IG1hc2sKKworIyByZW1vdmUgbm93IHN1cGVyZmx1b3VzIG1hY3JvbiB3aGVuIHJldHVybmluZworCivOkSA8IEEgJG1hY3JvbiA7ICAKK86xIDwgYSAkbWFjcm9uIDsgCisKK863IDw+IGUgJG1hY3JvbiA7CivOlyA8PiBFICRtYWNyb24gOworCivPhiA8PiBwaCA7IAorzqggfSAkYmVmb3JlTG93ZXIgPD4gUHMgOyAKK86oIDw+IFBTIDsgCisKK86mIH0gJGJlZm9yZUxvd2VyIDw+IFBoIDsgCivOpiA8PiBQSCA7CivPiCA8PiBwcyA7IAorCivPiSA8PiBvICRtYWNyb24gOworzqkgPD4gIE8gJG1hY3JvbjsKKworIyBOT1JNQUwKKworzrEgPD4gYSA7IAorzpEgPD4gQSA7IAorCivOsiA8PiBiIDsgCivOkiA8PiBCIDsgCisKK86zIH0gJGdhbW1hTGlrZSA8PiBuIH0gJGVnYW1tYUxpa2UgOyAKK86zIDw+IGcgOyAKK86TIH0gJGdhbW1hTGlrZSA8PiBOIH0gJGVnYW1tYUxpa2UgOyAKK86TIDw+IEcgOyAKKworzrQgPD4gZCA7IAorzpQgPD4gRCA7IAorCivOtSA8PiBlIDsgCivOlSA8PiBFIDsgCisKK862IDw+IHogOyAKK86WIDw+IFogOyAKKworzrggPD4gdGggOyAKK86YIH0gJGJlZm9yZUxvd2VyIDw+IFRoIDsgCivOmCA8PiBUSCA7IAorCivOuSA8PiBpIDsgCivOmSA8PiBJIDsgCisKK866IDw+IGsgOworzpogPD4gSyA7IAorCivOuyA8PiBsIDsgCivOmyA8PiBMIDsgCisKK868IDw+IG0gOyAKK86cIDw+IE0gOyAKKworzr0gfSAkZ2FtbWFMaWtlID4gblwnIDsgCivOvSA8PiBuIDsgCivOnSB9ICRnYW1tYUxpa2UgPD4gTlwnIDsgCivOnSA8PiBOIDsgCisKK86+IDw+IHggOyAKK86eIDw+IFggOyAKKworzr8gPD4gbyA7IAorzp8gPD4gTyA7IAorCivPgCA8PiBwIDsgCivOoCA8PiBQIDsgCisKK8+BICRyb3VnaCA8PiByaDsgCivOoSAkcm91Z2ggfSAkYmVmb3JlTG93ZXIgPD4gUmggOyAKK86hICRyb3VnaCA8PiBSSCA7IAorz4EgPD4gciA7IAorzqEgPD4gUiA7IAorCisjIGluc2VydCBzZXBhcmF0b3IKKworW1BwXSB7IH0gz4IgPiBcJyA7IAorW1BwXSB7IH0gz4MgPiBcJyA7CisKKyMgdW5kZXJiYXIgbWVhbnMgZXhjZXB0aW9uCisKKyMgYmVmb3JlIGEgbGV0dGVyLCBpbml0aWFsCivPgiB9ICRiZWZvcmVMZXR0ZXIgPD4gcyAkdW5kZXJiYXIgfSAkYmVmb3JlTGV0dGVyOworz4MgfSAkYmVmb3JlTGV0dGVyIDw+IHMgfSAkYmVmb3JlTGV0dGVyOworCisjIG90aGVyd2lzZSwgYWZ0ZXIgYSBsZXR0ZXIgPSBmaW5hbCAKKyRhZnRlckxldHRlciB7IM+DIDw+ICRhZnRlckxldHRlciB7IHMgJHVuZGVyYmFyOworJGFmdGVyTGV0dGVyIHsgz4IgPD4gJGFmdGVyTGV0dGVyIHsgcyA7CisKKyMgb3RoZXJ3aXNlIChpc29sYXRlZCkgPSBpbml0aWFsCivPgiA8PiBzICR1bmRlcmJhcjsKK8+DIDw+IHMgOworCitbUHBdIHsgzqMgPD4gXCdTIDsgCivOoyA8PiBTIDsgCisKK8+EIDw+IHQgOyAKK86kIDw+IFQgOyAKKworJHZvd2VsIHvPhSB9IDw+IHUgOyAKK8+FIDw+IHkgOyAKKyR2b3dlbCB7IM6lIDw+IFUgOyAKK86lIDw+IFkgOyAKKworz4cgPD4gY2ggOyAKK86nIH0gJGJlZm9yZUxvd2VyIDw+IENoIDsgCivOpyA8PiBDSCA7IAorCisjIENvbXBsZXRlbmVzcyBmb3IgQVNDSUkKKworJGlnbm9yZSA9IFtbOk1hcms6XScnXSAqIDsKKworfCBrICA8IGMgOworfCBwaCA8IGYgOworfCBpICA8IGogOworfCBrIDwgcSA7Cit8IGIgPCB2IH0gJHZvd2VsIDsKK3wgYiA8IHcgfSAkdm93ZWw7Cit8IHUgPCB2IDsKK3wgdSA8IHc7Cit8IEsgPCBDIDsKK3wgUGggPCBGIDsKK3wgSSA8IEogOworfCBLIDwgUSA7Cit8IEIgPCBWICB9ICR2b3dlbCA7Cit8IEIgPCBXICB9ICR2b3dlbCA7Cit8IFUgPCBWIDsKK3wgVSA8IFcgOworCiskcm91Z2ggfSAkaWdub3JlIFs6VXBwZXJjYXNlTGV0dGVyOl0gPiBIIDsKKyRpZ25vcmUgWzpVcHBlcmNhc2VMZXR0ZXI6XSB7ICRyb3VnaCA+IEggOworJHJvdWdoIDwgSCA7Ciskcm91Z2ggPD4gaCA7CisKKyMgQ29tcGxldGVuZXNzIGZvciBHcmVlaworCivPkCA+IHwgzrIgOworz5EgPiB8IM64IDsKK8+SID4gfCDOpSA7CivPlSA+IHwgz4YgOworz5YgPiB8IM+AIDsKKworz7AgPiB8IM66IDsKK8+xID4gfCDPgSA7CivPsiA+IHwgz4MgOworz7MgPiBqIDsKK8+0ID4gfCDOmCA7CivPtSA+IHwgzrUgOworCivCtSA+IHwgzrwgOworCisgzbogPiBpOworCisjIGRlbGV0ZSBhbnkgdHJhaWxpbmcgJyBtYXJrcyB1c2VkIGZvciByb3VuZHRyaXBwaW5nCisKKyA8IFvOoM+AXSB7IFwnIH0gW1NzXSA7CisgPCBbzp3OvV0geyBcJyB9ICRlZ2FtbWFMaWtlIDsKKworOjpORkMgKE5GRCkgOworIyAoW1x1MDAwMC1cdTAwN0YgWzpMYXRpbjpdIFs6R3JlZWs6XSBbOm5vbnNwYWNpbmcgbWFyazpdXSkgOworIyAoW1x1MDAwMC1cdTAwN0YgXHUwMEI3IFs6TGF0aW46XSBbOm5vbnNwYWNpbmcgbWFyazpdXSkgOworIyBNSU5JTUFMIEZJTFRFUiBHRU5FUkFURUQgRk9SOiBMYXRpbi1HcmVlayBCQUNLV0FSRAorOjogKCBbJzo/QS1aYS16XHUwMEMwLVx1MDBDNVx1MDBDNy1cdTAwQ0ZcdTAwRDEtXHUwMEQ2XHUwMEQ5LVx1MDBERFx1MDBFMC1cdTAwRTVcdTAwRTctXHUwMEVGXHUwMEYxLVx1MDBGNlx1MDBGOS1cdTAwRkRcdTAwRkYtXHUwMTBGXHUwMTEyLVx1MDEyNVx1MDEyOC1cdTAxMzBcdTAxMzQtXHUwMTM3XHUwMTM5LVx1MDEzRVx1MDE0My1cdTAxNDhcdTAxNEMtXHUwMTUxXHUwMTU0LVx1MDE2NVx1MDE2OC1cdTAxN0VcdTAxQTAtXHUwMUExXHUwMUFGLVx1MDFCMFx1MDFDRC1cdTAxRENcdTAxREUtXHUwMUUzXHUwMUU2LVx1MDFGMFx1MDFGNC1cdTAxRjVcdTAxRjgtXHUwMjFCXHUwMjFFLVx1MDIxRlx1MDIyNi1cdTAyMzNcdTAzMDAtXHUwMzM3XHUwMzM5LVx1MDM0NVx1MDM4NS1cdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDM5MFx1MDNBQS1cdTAzQjBcdTAzQ0EtXHUwM0NFXHUwM0QzLVx1MDNENFx1MDQwMC1cdTA0MDFcdTA0MDNcdTA0MDdcdTA0MEMtXHUwNDBFXHUwNDE5XHUwNDM5XHUwNDUwLVx1MDQ1MVx1MDQ1M1x1MDQ1N1x1MDQ1Qy1cdTA0NUVcdTA0NzYtXHUwNDc3XHUwNEMxLVx1MDRDMlx1MDREMC1cdTA0RDNcdTA0RDYtXHUwNEQ3XHUwNERBLVx1MDRERlx1MDRFMi1cdTA0RTdcdTA0RUEtXHUwNEY1XHUwNEY4LVx1MDRGOVx1MUUwMC1cdTFFOTlcdTFFOUJcdTFFQTAtXHUxRUY5XHUxRjAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQzEtXHUxRkM0XHUxRkM2LVx1MUZEM1x1MUZENi1cdTFGREJcdTFGREQtXHUxRkVFXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIxMkEtXHUyMTJCXSApIDsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfR3JlZWtfTGF0aW5fVU5HRUdOLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfR3JlZWtfTGF0aW5fVU5HRUdOLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTg3NjhmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9HcmVla19MYXRpbl9VTkdFR04udHh0CkBAIC0wLDAgKzEsMjQ4IEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0dyZWVrX0xhdGluX1VOR0VHTi50eHQsdiAkCisjICREYXRlOiAyMDAyLzA3LzI2IDE2OjA5OjA0ICQKKyMgJFJldmlzaW9uOiAxLjIgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciBtb2Rlcm4gR3JlZWssIGJhc2VkIG9uIFVOR0VHTiBydWxlcy4KKworIyBSdWxlcyBhcmUgcHJlZGljYXRlZCBvbiBydW5uaW5nIE5GRCBmaXJzdCwgYW5kIE5GQyBhZnRlcndhcmRzCisjIE1JTklNQUwgRklMVEVSIEdFTkVSQVRFRCBGT1I6IEdyZWVrLUxhdGluL1VOR0VHTgorIyBXQVJOSU5HOiBuZWVkIHRvIGFkZCBhY2NlbnRzIHRvIGJvdGggZmlsdGVycyAjIyMKKyMgOjogW8yBzITMhsyIO8K1wrfDgMOCw4jDisOMw47DksOUw5nDm8Ogw6LDqMOqw6zDrsOyw7TDucO7xIgtxInEnC3EncSkLcSlxLQtxLXFnC3FncW0LcW3x5stx5zHuC3HucyAzILMky3MlM2AzYItzYPNhc26zb7Ohi3Ois6Mzo4tzqHOoy3Pjs+QLc+Wz7Atz7XQgNCN0ZDRneG4lC3huJXhuZAt4bmR4bqALeG6geG6kC3hupHhuqQt4bqt4bqwLeG6seG6vi3hu4fhu5At4buZ4bucLeG7neG7qi3hu6vhu7It4buz4byALeG8leG8mC3hvJ3hvKAt4b2F4b2ILeG9jeG9kC3hvZfhvZnhvZvhvZ3hvZ8t4b294b6ALeG+tOG+ti3hvrzhvr7hv4Et4b+E4b+GLeG/jeG/jy3hv5Phv5Yt4b+b4b+d4b+fLeG/reG/si3hv7Thv7Yt4b+84oSmXSA7CisKKzo6IFtbWzpHcmVlazpdWzpNbjpdWzpNZTpdXSBbXDotOz9cdTAwQjdcdTAzN0VcdTAzODddXSA7Cis6Ok5GRCAoTkZDKSA7CisKKyMgVXNlZnVsIHZhcmlhYmxlcworCiskbG93ZXIgPSBbWzpsYXRpbjpdWzpncmVlazpdICYgWzpMbDpdXSA7CiskdXBwZXIgPSBbWzpsYXRpbjpdWzpncmVlazpdICYgWzpMdTpdXSA7CiskYWNjZW50ID0gW1s6TW46XVs6TWU6XV0gOworCiskbWFjcm9uID0gzIQgOworJGRkb3QgPSDMiCA7CisKKyRsY2d2b3dlbCA9IFvOsc61zrfOuc6/z4XPiV0gOworJHVjZ3Zvd2VsID0gW86RzpXOl86Zzp/Opc6pXSA7CiskZ3Zvd2VsID0gWyRsY2d2b3dlbCAkdWNndm93ZWxdIDsKKyRsY2d2b3dlbEMgPSBbJGxjZ3Zvd2VsICRhY2NlbnRdIDsKKworJGV2b3dlbCA9IFthZWlvdXlBRUlPVVldOworJHZvd2VsID0gWyAkZXZvd2VsICRndm93ZWxdIDsKKworJGJlZm9yZUxvd2VyID0gJGFjY2VudCAqICRsb3dlciA7CisKKyRnYW1tYUxpa2UgPSBbzpPOms6ezqfOs866zr7Ph8+wXSA7CiskZWdhbW1hTGlrZSA9IFtHS1hDZ2t4Y10gOworJHNtb290aCA9IMyTIDsKKyRyb3VnaCA9IMyUIDsKKyRpb3Rhc3ViID0gzYUgOworCiskc29mdGVuZXIgPSBbzrLOks6zzpPOtM6UzrbOls67zpvOvM6czr3Onc+BzqEkZ3Zvd2VsXSA7CisKKyR1bmRlciA9IMyxOworCiskY2Fyb24gPSDMjDsKKworJGFmdGVyTGV0dGVyID0gWzpMOl0gW1wnJGFjY2VudF0qIDsKKyRiZWZvcmVMZXR0ZXIgPSBbXCckYWNjZW50XSogWzpMOl0gOworCisjIEZpeCBwdW5jdHVhdGlvbgorCisjIHByZXNlcnZlIG9yZ2luYWwKK1w6IDw+IFw6ICR1bmRlciA7CitcPyA8PiBcPyAkdW5kZXIgOworCitcOyA8PiBcPyA7CivCtyA8PiBcOiA7CisKKyMgRml4IGFueSBhbmNpZW50IGNoYXJhY3RlcnMgdGhhdCBjcmVlcCBpbgorCivNgiA+IMyBIDsKK8yCID4gzIEgOworzIAgPiDMgSA7Ciskc21vb3RoID4gOworJHJvdWdoID4gOworJGlvdGFzdWIgPiA7CivNuiA+IDsKKworIyBuZWVkIHRvIGhhdmUgdGhlc2UgdXAgaGVyZSBzbyB0aGUgcnVsZXMgZG9uJ3QgbWFzaworCivOtyA8PiBpICR1bmRlciA7CivOlyA8PiBJICR1bmRlciA7CisKK86oIH0gJGJlZm9yZUxvd2VyIDw+IFBzIDsKK86oIDw+IFBTIDsKK8+IIDw+IHBzIDsKKworz4kgPD4gbyAkdW5kZXIgOworzqkgPD4gIE8gJHVuZGVyOworCisjIGF0IGJlZ2luaW5nIG9yIGVuZCBvZiB3b3JkLCBjb252ZXJ0IG1wIHRvIGIKKworW15bOkw6XSRhY2NlbnRdIHsgzrzPgCA+IGIgOworzrzPgCB9IFteWzpMOl0kYWNjZW50XSA+IGIgOworW15bOkw6XSRhY2NlbnRdIHsgW86czrxdW86gz4BdID4gQiA7CitbzpzOvF1bzqDPgF0gfSBbXls6TDpdJGFjY2VudF0gPiBCIDsKKworzrzPgCA8IGIgOworzpzPgCA8IEIgfSAkYmVmb3JlTG93ZXIgOworzpzOoCA8IEIgOworCisjIGhhbmRsZSBkaXBodGhvbmdzIGVuZGluZyB3aXRoIHVwc2lsb24KKworzr/PhSA8PiBvdSA7CivOn86lIDw+IE9VIDsKK86fz4UgPD4gT3UgOworzr/OpSA8PiBvVSA7CisKKyRmbWFrZXIgPSBbYWVpQUVJXSAkdW5kZXIgPyA7Ciskc2hpZnRGb3J3YXJkVm93ZWxzID0gW1s6TW46XS1bXHUwMzA4XV07ICMgbm90ZTogYSBkaWFlcmVzaXMga2VlcHMgdGhlIGl0ZW1zIHNlcGFyYXRlCisKKyRmbWFrZXIgeyDPhSAoICRzaGlmdEZvcndhcmRWb3dlbHMgKSogfSAkc29mdGVuZXIgPiAkMSB2ICR1bmRlciA7CivPhSAkMSA8ICggJHNoaWZ0Rm9yd2FyZFZvd2VscyApKiB2ICR1bmRlciA7CisKKyRmbWFrZXIgeyDPhSAoICRzaGlmdEZvcndhcmRWb3dlbHMgKSogfSA+ICQxIGYgJHVuZGVyOworz4UgJDEgPCAoICRzaGlmdEZvcndhcmRWb3dlbHMgKSogZiAkdW5kZXIgOworCiskZm1ha2VyIHsgzqUgfSAkc29mdGVuZXIgPD4gViAkdW5kZXIgOworJGZtYWtlciB7IM6lIDw+IFUgJHVuZGVyIDsKKworz4UgPD4geSA7CivOpSA8PiBZIDsKKworIyBOT1JNQUwKKworzrEgPD4gYSA7CivOkSA8PiBBIDsKKworzrIgPD4gdiA7CivOkiA8PiBWIDsKKworzrMgfSAkZ2FtbWFMaWtlIDw+IG4gfSAkZWdhbW1hTGlrZSA7CivOsyA8PiBnIDsKK86TIH0gJGdhbW1hTGlrZSA8PiBOIH0gJGVnYW1tYUxpa2UgOworzpMgPD4gRyA7CisKK860IDw+IGQgOworzpQgPD4gRCA7CisKK861IDw+IGUgOworzpUgPD4gRSA7CisKK862IDw+IHogOworzpYgPD4gWiA7CisKK864IDw+IHRoIDsKK86YIH0gJGJlZm9yZUxvd2VyIDw+IFRoIDsKK86YIDw+IFRIIDsKKworzrkgPD4gaSA7CivOmSA8PiBJIDsKKworzrogPD4gayA7CivOmiA8PiBLIDsKKworzrsgPD4gbCA7CivOmyA8PiBMIDsKKworzrwgPD4gbSA7CivOnCA8PiBNIDsKKworzr0gfSAkZ2FtbWFMaWtlID4gblwnIDsKK869IDw+IG4gOworzp0gfSAkZ2FtbWFMaWtlIDw+IE5cJyA7CivOnSA8PiBOIDsKKworzr4gPD4geCA7CivOniA8PiBYIDsKKworzr8gPD4gbyA7CivOnyA8PiBPIDsKKworz4AgPD4gcCA7CivOoCA8PiBQIDsKKworz4EgPD4gciA7CivOoSA8PiBSIDsKKworW1BwXSB7IH0gz4IgPiBcJyA7CitbUHBdIHsgfSDPgyA+IFwnIDsKKworIyBDYXJvbiBtZWFucyBleGNlcHRpb24KKworIyBiZWZvcmUgYSBsZXR0ZXIsIGluaXRpYWwKK8+CIH0gJGJlZm9yZUxldHRlciA8PiBzICR1bmRlciB9ICRiZWZvcmVMZXR0ZXI7CivPgyB9ICRiZWZvcmVMZXR0ZXIgPD4gcyB9ICRiZWZvcmVMZXR0ZXI7CisKKyMgb3RoZXJ3aXNlLCBhZnRlciBhIGxldHRlciA9IGZpbmFsCiskYWZ0ZXJMZXR0ZXIgeyDPgyA8PiAkYWZ0ZXJMZXR0ZXIgeyBzICR1bmRlcjsKKyRhZnRlckxldHRlciB7IM+CIDw+ICRhZnRlckxldHRlciB7IHMgOworCisjIG90aGVyd2lzZSAoaXNvbGF0ZWQpID0gaW5pdGlhbAorz4IgPD4gcyAkdW5kZXI7CivPgyA8PiBzIDsKKworW1BwXSB7IM6jIDw+IFwnUyA7CivOoyA8PiBTIDsKKworz4QgPD4gdCA7CivOpCA8PiBUIDsKKworz4YgPD4gZiA7CivOpiA8PiBGIDsKKworz4cgPD4gY2ggOworzqcgfSAkYmVmb3JlTG93ZXIgPD4gQ2ggOworzqcgPD4gQ0ggOworCisjIENvbXBsZXRlbmVzcyBmb3IgQVNDSUkKKworIyAkaWdub3JlID0gW1s6TWFyazpdJyddICogOworCit8IGNoIDwgaCA7Cit8IGsgIDwgYyA7Cit8IGkgIDwgaiA7Cit8IGsgPCBxIDsKK3wgYiA8IHUgfSAkdm93ZWwgOworfCBiIDwgdyB9ICR2b3dlbCA7Cit8IHkgPCB1IDsKK3wgeSA8IHcgOworCit8IENoIDwgSCA7Cit8IEsgPCBDIDsKK3wgSSA8IEogOworfCBLIDwgUSA7Cit8IEIgPCBXIH0gJHZvd2VsIDsKK3wgQiA8IFUgfSAkdm93ZWwgOworfCBZIDwgVyA7Cit8IFkgPCBVIDsKKworIyBDb21wbGV0ZW5lc3MgZm9yIEdyZWVrCisKK8+QID4gfCDOsiA7CivPkSA+IHwgzrggOworz5IgPiB8IM6lIDsKK8+VID4gfCDPhiA7CivPliA+IHwgz4AgOworCivPsCA+IHwgzrogOworz7EgPiB8IM+BIDsKK8+yID4gfCDPgyA7CivPsyA+IGogOworz7QgPiB8IM6YIDsKK8+1ID4gfCDOtSA7CivCtSA+IHwgzrwgOworCisjIGRlbGV0ZSBhbnkgdHJhaWxpbmcgJyBtYXJrcyB1c2VkIGZvciByb3VuZHRyaXBwaW5nCisKKyA8IFvOoM+AXSB7IFwnIH0gW1NzXSA7CisgPCBbzp3OvV0geyBcJyB9ICRlZ2FtbWFMaWtlIDsKKworOjpORkMgKE5GRCkgOworCisjIE1JTklNQUwgRklMVEVSIEdFTkVSQVRFRCBGT1I6IExhdGluLUdyZWVrL1VOR0VHTiBCQUNLV0FSRAorOjogKFtbWzpMYXRpbjpdWzpNbjpdWzpNZTpdXSBbJ1w6P11dKSA7CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0d1amFyYXRpX0ludGVySW5kaWMudHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9HdWphcmF0aV9JbnRlckluZGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZjI2OGRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9HdWphcmF0aV9JbnRlckluZGljLnR4dApAQCAtMCwwICsxLDkzIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0d1amFyYXRpX0ludGVySW5kaWMudHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wOS8xOSAxODoxMToyMyAkCisjICRSZXZpc2lvbjogMS42ICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEd1amFyYXRpLUludGVySW5kaWMKKyM6OiBORkQgKE5GQykgOworXHUwYTgxPlx1ZTAwMTsgIyBTSUdOIENBTkRSQUJJTkRVCitcdTBhODI+XHVlMDAyOyAjIFNJR04gQU5VU1ZBUkEKK1x1MGE4Mz5cdWUwMDM7ICMgU0lHTiBWSVNBUkdBCitcdTBhODU+XHVlMDA1OyAjIExFVFRFUiBBCitcdTBhODY+XHVlMDA2OyAjIExFVFRFUiBBQQorXHUwYTg3Plx1ZTAwNzsgIyBMRVRURVIgSQorXHUwYTg4Plx1ZTAwODsgIyBMRVRURVIgSUkKK1x1MGE4OT5cdWUwMDk7ICMgTEVUVEVSIFUKK1x1MGE4YT5cdWUwMGE7ICMgTEVUVEVSIFVVCitcdTBhOGI+XHVlMDBiOyAjIExFVFRFUiBWT0NBTElDIFIKK1x1MGE4ZD5cdWUwMGQ7ICMgVk9XRUwgQ0FORFJBIEUKK1x1MGE4Zj5cdWUwMGY7ICMgTEVUVEVSIEUKK1x1MGE5MD5cdWUwMTA7ICMgTEVUVEVSIEFJCitcdTBhOTE+XHVlMDExOyAjIFZPV0VMIENBTkRSQSBPCitcdTBhOTM+XHVlMDEzOyAjIExFVFRFUiBPCitcdTBhOTQ+XHVlMDE0OyAjIExFVFRFUiBBVQorXHUwYTk1Plx1ZTAxNTsgIyBMRVRURVIgS0EKK1x1MGE5Nj5cdWUwMTY7ICMgTEVUVEVSIEtIQQorXHUwYTk3Plx1ZTAxNzsgIyBMRVRURVIgR0EKK1x1MGE5OD5cdWUwMTg7ICMgTEVUVEVSIEdIQQorXHUwYTk5Plx1ZTAxOTsgIyBMRVRURVIgTkdBCitcdTBhOWE+XHVlMDFhOyAjIExFVFRFUiBDQQorXHUwYTliPlx1ZTAxYjsgIyBMRVRURVIgQ0hBCitcdTBhOWM+XHVlMDFjOyAjIExFVFRFUiBKQQorXHUwYTlkPlx1ZTAxZDsgIyBMRVRURVIgSkhBCitcdTBhOWU+XHVlMDFlOyAjIExFVFRFUiBOWUEKK1x1MGE5Zj5cdWUwMWY7ICMgTEVUVEVSIFRUQQorXHUwYWEwPlx1ZTAyMDsgIyBMRVRURVIgVFRIQQorXHUwYWExPlx1ZTAyMTsgIyBMRVRURVIgRERBCitcdTBhYTI+XHVlMDIyOyAjIExFVFRFUiBEREhBCitcdTBhYTM+XHVlMDIzOyAjIExFVFRFUiBOTkEKK1x1MGFhND5cdWUwMjQ7ICMgTEVUVEVSIFRBCitcdTBhYTU+XHVlMDI1OyAjIExFVFRFUiBUSEEKK1x1MGFhNj5cdWUwMjY7ICMgTEVUVEVSIERBCitcdTBhYTc+XHVlMDI3OyAjIExFVFRFUiBESEEKK1x1MGFhOD5cdWUwMjg7ICMgTEVUVEVSIE5BCitcdTBhYWE+XHVlMDJhOyAjIExFVFRFUiBQQQorXHUwYWFiPlx1ZTAyYjsgIyBMRVRURVIgUEhBCitcdTBhYWM+XHVlMDJjOyAjIExFVFRFUiBCQQorXHUwYWFkPlx1ZTAyZDsgIyBMRVRURVIgQkhBCitcdTBhYWU+XHVlMDJlOyAjIExFVFRFUiBNQQorXHUwYWFmPlx1ZTAyZjsgIyBMRVRURVIgWUEKK1x1MGFiMD5cdWUwMzA7ICMgTEVUVEVSIFJBCitcdTBhYjI+XHVlMDMyOyAjIExFVFRFUiBMQQorXHUwYWIzPlx1ZTAzMzsgIyBMRVRURVIgTExBCitcdTBhYjU+XHVlMDM1OyAjIExFVFRFUiBWQQorXHUwYWI2Plx1ZTAzNjsgIyBMRVRURVIgU0hBCitcdTBhYjc+XHVlMDM3OyAjIExFVFRFUiBTU0EKK1x1MGFiOD5cdWUwMzg7ICMgTEVUVEVSIFNBCitcdTBhYjk+XHVlMDM5OyAjIExFVFRFUiBIQQorXHUwYWJjPlx1ZTAzYzsgIyBTSUdOIE5VS1RBCitcdTBhYmQ+XHVlMDNkOyAjIFNJR04gQVZBR1JBSEEKK1x1MGFiZT5cdWUwM2U7ICMgVk9XRUwgU0lHTiBBQQorXHUwYWJmPlx1ZTAzZjsgIyBWT1dFTCBTSUdOIEkKK1x1MGFjMD5cdWUwNDA7ICMgVk9XRUwgU0lHTiBJSQorXHUwYWMxPlx1ZTA0MTsgIyBWT1dFTCBTSUdOIFUKK1x1MGFjMj5cdWUwNDI7ICMgVk9XRUwgU0lHTiBVVQorXHUwYWMzPlx1ZTA0MzsgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorXHUwYWM0Plx1ZTA0NDsgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUlIKK1x1MGFjNT5cdWUwNDU7ICMgVk9XRUwgU0lHTiBDQU5EUkEgRQorXHUwYWM3Plx1ZTA0NzsgIyBWT1dFTCBTSUdOIEUKK1x1MGFjOD5cdWUwNDg7ICMgVk9XRUwgU0lHTiBBSQorXHUwYWM5Plx1ZTA0OTsgIyBWT1dFTCBTSUdOIENBTkRSQSBPCitcdTBhY2I+XHVlMDRiOyAjIFZPV0VMIFNJR04gTworXHUwYWNjPlx1ZTA0YzsgIyBWT1dFTCBTSUdOIEFVCitcdTBhY2Q+XHVlMDRkOyAjIFNJR04gVklSQU1BCitcdTBhZDA+XHVlMDUwOyAjIE9NCitcdTBhZTA+XHVlMDYwOyAjIExFVFRFUiBWT0NBTElDIFJSCitcdTBhZTY+XHVlMDY2OyAjIERJR0lUIFpFUk8KK1x1MGFlNz5cdWUwNjc7ICMgRElHSVQgT05FCitcdTBhZTg+XHVlMDY4OyAjIERJR0lUIFRXTworXHUwYWU5Plx1ZTA2OTsgIyBESUdJVCBUSFJFRQorXHUwYWVhPlx1ZTA2YTsgIyBESUdJVCBGT1VSCitcdTBhZWI+XHVlMDZiOyAjIERJR0lUIEZJVkUKK1x1MGFlYz5cdWUwNmM7ICMgRElHSVQgU0lYCitcdTBhZWQ+XHVlMDZkOyAjIERJR0lUIFNFVkVOCitcdTBhZWU+XHVlMDZlOyAjIERJR0lUIEVJR0hUCitcdTBhZWY+XHVlMDZmOyAjIERJR0lUIE5JTkUKK1x1MDk2ND5cdWUwNjQ7ICAgICAgICAjIERBTkRBCitcdTA5NjU+XHVlMDY1OyAgICAgICAgIyBET1VCTEUgREFOREEKKyMgICAgOjogTkZDIChORkQpIDsKKyMgZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0d1cm11a2hpX0ludGVySW5kaWMudHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9HdXJtdWtoaV9JbnRlckluZGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZmU0ZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9HdXJtdWtoaV9JbnRlckluZGljLnR4dApAQCAtMCwwICsxLDk5IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0d1cm11a2hpX0ludGVySW5kaWMudHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wOS8xOSAxODoxMToyMyAkCisjICRSZXZpc2lvbjogMS4xMiAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBHdXJtdWtoaS1JbnRlckluZGljCisjOjogTkZEIChORkMpIDsKKworI1x1MEExNlx1MEEzQz5cdUUwNTk7ICMgTEVUVEVSIEtISEEKKyNcdTBBMTdcdTBBM0M+XHVFMDVBOyAjIExFVFRFUiBHSEhBCisjXHUwQTFDXHUwQTNDPlx1RTA1QjsgIyBMRVRURVIgWkEKKyNcdTBBMzhcdTBBM0M+XHVFMDM2OyAjIExFVFRFUiBTSEEKKyNcdTBBMzJcdTBBM0M+XHVFMDMzOyAjIExFVFRFUiBMTEEKKyNcdTBBMkJcdTBBM0M+XHVFMDVFOyAjIExFVFRFUiBGQQorCitcdTBBMDI+XHVFMDAyOyAgIyBTSUdOIEJJTkRJCitcdTBBMDU+XHVFMDA1OyAgIyBMRVRURVIgQQorXHUwQTA2Plx1RTAwNjsgICMgTEVUVEVSIEFBCitcdTBBMDc+XHVFMDA3OyAgIyBMRVRURVIgSQorXHUwQTA4Plx1RTAwODsgICMgTEVUVEVSIElJCitcdTBBMDk+XHVFMDA5OyAgIyBMRVRURVIgVQorXHUwQTBBPlx1RTAwQTsgICMgTEVUVEVSIFVVCitcdTBBMEM+XHVFMDMyOyAgIyBGQUxMQkFDSyA6IFZPQ0FMTElDIExBIAorXHUwQTBGPlx1RTAwRjsgICMgTEVUVEVSIEVFCitcdTBBMTA+XHVFMDEwOyAgIyBMRVRURVIgQUkKK1x1MEExMz5cdUUwMTM7ICAjIExFVFRFUiBPTworXHUwQTE0Plx1RTAxNDsgICMgTEVUVEVSIEFVCitcdTBBMTU+XHVFMDE1OyAgIyBMRVRURVIgS0EKK1x1MEExNj5cdUUwMTY7ICAjIExFVFRFUiBLSEEKK1x1MEExNz5cdUUwMTc7ICAjIExFVFRFUiBHQQorXHUwQTE4Plx1RTAxODsgICMgTEVUVEVSIEdIQQorXHUwQTE5Plx1RTAxOTsgICMgTEVUVEVSIE5HQQorXHUwQTFBPlx1RTAxQTsgICMgTEVUVEVSIENBCitcdTBBMUI+XHVFMDFCOyAgIyBMRVRURVIgQ0hBCitcdTBBMUM+XHVFMDFDOyAgIyBMRVRURVIgSkEKK1x1MEExRD5cdUUwMUQ7ICAjIExFVFRFUiBKSEEKK1x1MEExRT5cdUUwMUU7ICAjIExFVFRFUiBOWUEKK1x1MEExRj5cdUUwMUY7ICAjIExFVFRFUiBUVEEKK1x1MEEyMD5cdUUwMjA7ICAjIExFVFRFUiBUVEhBCitcdTBBMjE+XHVFMDIxOyAgIyBMRVRURVIgRERBCitcdTBBMjI+XHVFMDIyOyAgIyBMRVRURVIgRERIQQorXHUwQTIzPlx1RTAyMzsgICMgTEVUVEVSIE5OQQorXHUwQTI0Plx1RTAyNDsgICMgTEVUVEVSIFRBCitcdTBBMjU+XHVFMDI1OyAgIyBMRVRURVIgVEhBCitcdTBBMjY+XHVFMDI2OyAgIyBMRVRURVIgREEKK1x1MEEyNz5cdUUwMjc7ICAjIExFVFRFUiBESEEKK1x1MEEyOD5cdUUwMjg7ICAjIExFVFRFUiBOQQorXHUwQTJBPlx1RTAyQTsgICMgTEVUVEVSIFBBCitcdTBBMkI+XHVFMDJCOyAgIyBMRVRURVIgUEhBCitcdTBBMkM+XHVFMDJDOyAgIyBMRVRURVIgQkEKK1x1MEEyRD5cdUUwMkQ7ICAjIExFVFRFUiBCSEEKK1x1MEEyRT5cdUUwMkU7ICAjIExFVFRFUiBNQQorXHUwQTJGPlx1RTAyRjsgICMgTEVUVEVSIFlBCitcdTBBMzA+XHVFMDMwOyAgIyBMRVRURVIgUkEKK1x1MEEzMj5cdUUwMzI7ICAjIExFVFRFUiBMQQorXHUwYTMzPlx1RTAzMzsgIyBGQUxMQkFDSworXHUwQTM1Plx1RTAzNTsgICMgTEVUVEVSIFZBCitcdTBhMzY+XHVlMDM2OworXHUwQTM4XDBhM2M+XHVlMDM2OyAjIEZBTExCQUNLCitcdTBBMzg+XHVFMDM4OyAgIyBMRVRURVIgU0EKK1x1MEEzOT5cdUUwMzk7ICAjIExFVFRFUiBIQQorXHUwQTNDPlx1RTAzQzsgICMgU0lHTiBOVUtUQQorXHUwQTNFPlx1RTAzRTsgICMgVk9XRUwgU0lHTiBBQQorXHUwQTNGPlx1RTAzRjsgICMgVk9XRUwgU0lHTiBJCitcdTBBNDA+XHVFMDQwOyAgIyBWT1dFTCBTSUdOIElJCitcdTBBNDE+XHVFMDQxOyAgIyBWT1dFTCBTSUdOIFUKK1x1MEE0Mj5cdUUwNDI7ICAjIFZPV0VMIFNJR04gVVUKK1x1MEE0Nz5cdUUwNDc7ICAjIFZPV0VMIFNJR04gRUUKK1x1MEE0OD5cdUUwNDg7ICAjIFZPV0VMIFNJR04gQUkKK1x1MEE0Qj5cdUUwNEI7ICAjIFZPV0VMIFNJR04gT08KK1x1MEE0Qz5cdUUwNEM7ICAjIFZPV0VMIFNJR04gQVUKK1x1MEE0RD5cdUUwNEQ7ICAjIFNJR04gVklSQU1BCisKK1x1MEE1Qz5cdUUwNUM7ICAjIExFVFRFUiBSUkEKKworXHUwQTY2Plx1RTA2NjsgICMgRElHSVQgWkVSTworXHUwQTY3Plx1RTA2NzsgICMgRElHSVQgT05FCitcdTBBNjg+XHVFMDY4OyAgIyBESUdJVCBUV08KK1x1MEE2OT5cdUUwNjk7ICAjIERJR0lUIFRIUkVFCitcdTBBNkE+XHVFMDZBOyAgIyBESUdJVCBGT1VSCitcdTBBNkI+XHVFMDZCOyAgIyBESUdJVCBGSVZFCitcdTBBNkM+XHVFMDZDOyAgIyBESUdJVCBTSVgKK1x1MEE2RD5cdUUwNkQ7ICAjIERJR0lUIFNFVkVOCitcdTBBNkU+XHVFMDZFOyAgIyBESUdJVCBFSUdIVAorXHUwQTZGPlx1RTA2RjsgICMgRElHSVQgTklORQorXHUwQTcwPlx1RTA3QzsgICMgVElQUEkKK1x1MEE3MT5cdUUwN0Q7ICAjIEFEREFLCitcdTBBNzI+XHVFMDdFOyAgIyBJUkkKK1x1MEE3Mz5cdUUwN0Y7ICAjIFVSQQorXHUwQTc0Plx1RTA4MDsgICMgRUsgT05LQVIKK1x1MDk2ND5cdWUwNjQ7ICAgICAgICAjIERBTkRBCitcdTA5NjU+XHVlMDY1OyAgICAgICAgIyBET1VCTEUgREFOREEKKyMgICAgOjogTkZDIChORkQpIDsKKyMgZW9mCisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSGFuX0xhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSGFuX0xhdGluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGI4MTZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9IYW5fTGF0aW4udHh0CkBAIC0wLDAgKzEsMjU0MjkgQEAKK++7vyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfSGFuX0xhdGluLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDcvMjkgMjE6MDE6MDcgJAorIyAkUmV2aXNpb246IDEuNSAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBXYXJuaW5nOiBkb2VzIG5vdCBkbyByb3VuZC10cmlwIG1hcHBpbmchIQorCisjIENvbnZlcnQgQ0pLIGNoYXJhY3RlcnMKKyMjIDo6IChoYWxmd2lkdGgtZnVsbHdpZHRoKTsKKworJHRlcm1pbmFsUHVuY3QgPSBbXC5cLFw6XDtcP1wh77yO77yM77ya77yf77yB44CC44CB77ybWzpQZTpdWzpQZjpdXTsKKyRpbml0aWFsUHVuY3QgPSBbOlBzOl1bOlBpOl07CisKKyMgYWRkIHNwYWNlIGJldHdlZW4gYW55IHRlcm1pbmFsIHB1bmN0dWF0aW9uIGFuZCBsZXR0ZXJzLCBhbmQKKyMgYmV0d2VlbiBsZXR0ZXJzIGFuZCBIYW4gb3IgaW5pdGlhbCBwdW5jdAorCiskdGVybWluYWxQdW5jdCB7IH0gWzpMOl0gPiAnICc7CitbOkw6XSB7IH0gW1s6SGFuOl0gJGluaXRpYWxQdW5jdF0gPiAnICc7CisKKyMgYmVsb3csIHRoZSBydWxlcyBhZGQgc3BhY2UgYWZ0ZXIgaWRlb2dyYXBocy4gUmVtb3ZlIHRoYXQgc3BhY2UgYmVmb3JlIHRlcm1pbmFscworeyAnICcgfSAkdGVybWluYWxQdW5jdCA+IDsKKworIyByZW1vdmUgYWxsIHNwYWNlcyBnb2luZyBiYWNrd2FyZHMKKyMjIDwgJyAnOworCisjIFN0YXJ0IFJBVyBkYXRhIGZvciBjb252ZXJ0aW5nIENKSyBjaGFyYWN0ZXJzCivlj4w+c2h1YW5nfFwgOwor5YibPmNodcOgbmd8XCA7Civnqpc+Y2h1YW5nfFwgOwor54q2PnpodcOgbmd8XCA7Civluoo+Y2h1w6FuZ3xcIDsKK+W6hD56aHVhbmd8XCA7Civmkp4+emh1w6BuZ3xcIDsKK+Wjrj56aHXDoG5nfFwgOwor6ZevPmNodcSDbmd8XCA7CivniL0+c2h1xINuZ3xcIDsKK+Wmhj56aHVhbmd8XCA7Civmoak+emh1YW5nfFwgOwor6ZycPnNodWFuZ3xcIDsKK+W5oj5jaHXDoW5nfFwgOwor6JGxPmNodWFuZ3xcIDsKK+eWrj5jaHVhbmd8XCA7CivmgIY+Y2h1w6BuZ3xcIDsKK+WJkD5jaHVhbmd8XCA7CivlrYA+c2h1YW5nfFwgOwor5rO2PnNodWFuZ3xcIDsKK+eWkj5jaHXDoW5nfFwgOwor6bm0PnNodWFuZ3xcIDsKK+m4mD5zaHVhbmd8XCA7Civpt54+c2h1YW5nfFwgOwor6aqmPnNodWFuZ3xcIDsKK+mppj5zaHVhbmd8XCA7CivpqLs+c2h1xINuZ3xcIDsKK+mouj5zaHVhbmd8XCA7Civpm5k+c2h1YW5nfFwgOwor6ZeWPmNodcSDbmd8XCA7Civoo50+emh1YW5nfFwgOwor6I6KPnpodWFuZ3xcIDsKK+iNmD56aHVhbmd8XCA7Civoia0+c2h1YW5nfFwgOwor57iUPnNodcSDbmd8XCA7Civns5o+emh1YW5nfFwgOwor56q7PmNodWFuZ3xcIDsKK+eqkz5jaHVhbmd8XCA7CivnpLU+c2h1YW5nfFwgOwor55ihPmNodWFuZ3xcIDsKK+eNij5jaHXDoG5nfFwgOwor54uAPnpodcOgbmd8XCA7CivniZU+Y2h1YW5nfFwgOwor54mOPmNodWFuZ3xcIDsKK+eJgD5jaHXDoW5nfFwgOwor54i8PnNodWFuZ3xcIDsKK+eEiz56aHXDoG5nfFwgOwor54GAPnNodcOgbmd8XCA7CivmvLo+Y2h1xINuZ3xcIDsKK+ashj5zaHVhbmd8XCA7CivmqaY+Y2h1w6FuZ3xcIDsKK+aoiT5zaHXEg25nfFwgOwor5qiBPnpodWFuZ3xcIDsKK+aiiT56aHVhbmd8XCA7Civmkp0+Y2h1w6FuZ3xcIDsKK+aRpD5jaHXEg25nfFwgOwor5pGQPmNodWFuZ3xcIDsKK+aIpz5jaHVhbmd8XCA7CivmiIc+emh1w6BuZ3xcIDsKK+aFoT5zaHXEg25nfFwgOwor5oS0PmNodcOgbmd8XCA7CivlrYc+c2h1YW5nfFwgOwor5aikPnpodWFuZ3xcIDsKK+WmnT56aHVhbmd8XCA7Civlo7U+emh1w6BuZ3xcIDsKK+Wjrz56aHXDoG5nfFwgOwor5aG9PnNodcSDbmd8XCA7Civlm68+Y2h1YW5nfFwgOwor5ZmHPmNodcOhbmd8XCA7CivlibU+Y2h1YW5nfFwgOwor5YmtPmNodWFuZ3xcIDsKK+WJmT5jaHXDoG5nfFwgOwor5YmPPmNodWFuZ3xcIDsKK+WIsT5jaHXDoG5nfFwgOwor5YiTPmNodWFuZ3xcIDsKK+WIhT5jaHVhbmd8XCA7CivkrZo+Y2h1w6FuZ3xcIDsKK+Srqj5zaHXEg25nfFwgOwor5KG0PmNodcOhbmd8XCA7Civkoa8+c2h1w6BuZ3xcIDsKK+Sakj5jaHXDoW5nfFwgOwor5JeuPnNodcSDbmd8XCA7Civkjqs+Y2h1w6BuZ3xcIDsKK+SHrD5jaHXEg25nfFwgOwor5IOlPmNodcOhbmd8XCA7CivjvL0+c2h1xINuZ3xcIDsKK+O1gj5jaHXEg25nfFwgOwor46a8PnNodcOgbmd8XCA7CivjoZY+Y2h1w6FuZ3xcIDsKK+S4rT56aG9uZ3xcIDsKK+S4ij5zaMOgbmd8XCA7CivnlJ8+c2hlbmd8XCA7CivmiJA+Y2jDqW5nfFwgOwor5oOzPnhpxINuZ3xcIDsKK+S4pD5sacSDbmd8XCA7Civplb8+Y2jDoW5nfFwgOwor5bCGPmppYW5nfFwgOwor56eNPnpoxY9uZ3xcIDsKK+WjsD5zaGVuZ3xcIDsKK+WQkT54acOgbmd8XCA7CivmraM+emhlbmd8XCA7Civph40+Y2jDs25nfFwgOwor55u4PnhpYW5nfFwgOwor5pS/PnpoZW5nfFwgOwor5Zy6PmNow6FuZ3xcIDsKK+W8oD56aGFuZ3xcIDsKK+W4uD5jaMOhbmd8XCA7CivlhYk+Z3Vhbmd8XCA7CivosaE+eGnDoG5nfFwgOwor5LygPmNodcOhbnxcIDsKK+Wfjj5jaMOpbmd8XCA7CivlvLo+amnDoG5nfFwgOwor6L2sPnpodcSDbnxcIDsKK+mHjz5sacOhbmd8XCA7CivkvJc+emjDsm5nfFwgOwor56iLPmNow6luZ3xcIDsKK+axnz5qaWFuZ3xcIDsKK+m7hD5odcOhbmd8XCA7CivllYY+c2hhbmd8XCA7Civlg48+eGnDoG5nfFwgOwor6aaZPnhpYW5nfFwgOwor5LiTPnpodWFufFwgOwor5LqJPnpoZW5nfFwgOwor6K6yPmppxINuZ3xcIDsKK+WGsj5jaG9uZ3xcIDsKK+ivgT56aMOobmd8XCA7Civlk40+eGnEg25nfFwgOwor56ewPmNoZW5nfFwgOwor5pW0PnpoxJVuZ3xcIDsKK+S8pD5zaGFuZ3xcIDsKK+aOjD56aMSDbmd8XCA7CivnnIE+c2jElW5nfFwgOwor6KOFPmNoxJVuZ3xcIDsKK+WGtT5rdcOgbmd8XCA7CivlqJg+bmnDoW5nfFwgOwor6aG5Pnhpw6BuZ3xcIDsKK+eroD56aGFuZ3xcIDsKK+WFhD54aW9uZ3xcIDsKK+aJvz5jaMOpbmd8XCA7CivkuaE+eGlhbmd8XCA7Civnqb8+Y2h1YW58XCA7Civog5w+c2hlbmd8XCA7Civnmoc+aHXDoW5nfFwgOwor5LquPmxpw6BuZ3xcIDsKK+mbhD54acOzbmd8XCA7CivlpZY+amnEg25nfFwgOwor6Ii5PmNodcOhbnxcIDsKK+Wwmj5zaMOgbmd8XCA7CivljoI+Y2jEg25nfFwgOwor5YWFPmNob25nfFwgOwor6ImvPmxpw6FuZ3xcIDsKK+S4iD56aMOgbmd8XCA7Civmnqo+cWlhbmd8XCA7CivpmY0+amnDoG5nfFwgOwor5Y2HPnNoZW5nfFwgOwor5ZSxPmNow6BuZ3xcIDsKK+W+gT56aGVuZ3xcIDsKK+WimT5xacOhbmd8XCA7Civot4M+cWnDoG5nfFwgOwor5oqiPmNoZW5nfFwgOwor6IO4Pnhpb25nfFwgOwor5LmYPmNow6luZ3xcIDsKK+ebmz5jaMOpbmd8XCA7Civor5o+Y2jDqW5nfFwgOwor54uCPmt1w6FuZ3xcIDsKK+W3nT5jaHVhbnxcIDsKK+eyrj5sacOhbmd8XCA7CivovoY+bGnDoG5nfFwgOwor5LqrPnhpxINuZ3xcIDsKK+eptz5xacOzbmd8XCA7CivmooE+bGnDoW5nfFwgOwor6LWPPnNoxINuZ3xcIDsKK+WHiT5sacOhbmd8XCA7CivojZI+aHVhbmd8XCA7Civlv6A+emhvbmd8XCA7CivnrrE+eGlhbmd8XCA7CivluJA+emjDoG5nfFwgOwor6YORPnpow6huZ3xcIDsKK+WJqT5zaMOobmd8XCA7CivmmYM+aHXEg25nfFwgOwor5Ye2Pnhpb25nfFwgOwor5bSHPmNow7NuZ3xcIDsKK+ivpj54acOhbmd8XCA7CivmsaQ+c2hhbmd8XCA7CivmjKM+emhlbmd8XCA7Civokos+amlhbmd8XCA7CivnpaU+eGnDoW5nfFwgOwor5pGUPnNodWFpfFwgOwor5LuXPnpow6BuZ3xcIDsKK+manD56aMOgbmd8XCA7Civnhoo+eGnDs25nfFwgOwor5bCdPmNow6FuZ3xcIDsKK+eblz5jaMOpbmd8XCA7CivmhYw+aHVhbmd8XCA7CivnibI+c2hlbmd8XCA7CivkuLI+Y2h1w6BufFwgOwor5YG/PmNow6FuZ3xcIDsKK+aYjD5jaGFuZ3xcIDsKK+aAlD56aGVuZ3xcIDsKK+eWhj5qaWFuZ3xcIDsKK+iZqz5jaMOzbmd8XCA7Civnu7M+c2jDqW5nfFwgOwor5raoPnpoxINuZ3xcIDsKK+efvz5rdcOgbmd8XCA7CivnlYU+Y2jDoG5nfFwgOwor5LuyPnpow7JuZ3xcIDsKK+aSkT5jaGVuZ3xcIDsKK+iwhT5sacOgbmd8XCA7CivogqA+Y2jDoW5nfFwgOwor6LWaPnpodcOgbnxcIDsKK+i/iD5ndcSDbmd8XCA7CivlkYg+Y2jDqW5nfFwgOwor6KG3Pnpob25nfFwgOwor55eHPnpoZW5nfFwgOwor56CWPnpodWFufFwgOwor6KWEPnhpYW5nfFwgOwor5biFPnNodcOgaXxcIDsKK+aDtj5odcOhbmd8XCA7Civllpg+Y2h1xINufFwgOwor6IWUPnFpYW5nfFwgOwor5YygPmppw6BuZ3xcIDsKK+a5mD54aWFuZ3xcIDsKK+eFjD5odcOhbmd8XCA7Civlt7c+eGnDoG5nfFwgOwor6LCOPmh1xINuZ3xcIDsKK+WOoj54aWFuZ3xcIDsKK+iCvz56aMWPbmd8XCA7Civog4A+emjDoG5nfFwgOwor55C8PnFpw7NuZ3xcIDsKK+WnnD5qaWFuZ3xcIDsKK+WAoT5jaMOgbmd8XCA7CivmmYw+c2jEg25nfFwgOwor5YO1PmppYW5nfFwgOwor5oGNPmh1xINuZ3xcIDsKK+aDqT5jaMOpbmd8XCA7CivlrqA+Y2jFj25nfFwgOwor55SpPnNodcSDaXxcIDsKK+a+hD5jaMOpbmd8XCA7CivphbE+amnDoG5nfFwgOwor6LSmPnpow6BuZ3xcIDsKK+aSsD56aHXDoG58XCA7Civokrg+emhlbmd8XCA7Civml7c+a3XDoG5nfFwgOwor5qGGPmt1w6BuZ3xcIDsKK+mAmz5ndcOgbmd8XCA7CivljIg+eGlvbmd8XCA7Civpk64+emhlbmd8XCA7CivmtYY+amlhbmd8XCA7Civphb8+bmnDoW5nfFwgOwor5pWePmNoxINuZ3xcIDsKK+iNhj5jaHXEg258XCA7Civnv5Q+eGnDoW5nfFwgOwor5o+jPmNodWFpfFwgOwor5rG5Pnhpb25nfFwgOwor6KOzPmNow6FuZ3xcIDsKK+esmT5zaGVuZ3xcIDsKK+ectj5rdcOgbmd8XCA7CivplLo+emhvbmd8XCA7CivnrZ0+emhlbmd8XCA7CivplbY+eGlhbmd8XCA7CivmgIU+Y2jDoG5nfFwgOwor56qYPmppxY9uZ3xcIDsKK+W9sD56aGFuZ3xcIDsKK+apoT54acOgbmd8XCA7CivlkZs+cWlhbmd8XCA7Civngq8+amnFj25nfFwgOwor5YewPmh1w6FuZ3xcIDsKK+mAnj5jaMSVbmd8XCA7Civnkos+emhhbmd8XCA7CivnrZA+a3Vhbmd8XCA7CivouIk+bGnDoW5nfFwgOwor6LeEPnFpYW5nfFwgOwor5qGoPmNob25nfFwgOwor5bmMPmh1xINuZ3xcIDsKK+eysT5sacOhbmd8XCA7Civmi7Q+c2h1YW58XCA7Civnkpw+aHXDoW5nfFwgOwor57ywPmppYW5nfFwgOwor5b+hPmNob25nfFwgOwor5ai8PmNoYW5nfFwgOwor5ouvPnpoxJVuZ3xcIDsKK+eMlj5jaGFuZ3xcIDsKK+ivjz5rdcOhbmd8XCA7Civpl6k+c2h1YW58XCA7Civmhqc+Y2hvbmd8XCA7CivlvrU+emhlbmd8XCA7CivnlKU+c2hlbmd8XCA7Civnp6Q+Y2jElW5nfFwgOwor5rauPnNodcOgbnxcIDsKK+aZvj5sacOgbmd8XCA7CivouLk+Y2h1w6BpfFwgOwor5q6HPnNoYW5nfFwgOwor5binPnpow6huZ3xcIDsKK+mqiz5jaMSVbmd8XCA7CivljKE+a3Vhbmd8XCA7CivouLU+emjFj25nfFwgOwor56m5PnFpw7NuZ3xcIDsKK+evhj56aHXDoG58XCA7CivmqZk+Y2jDqW5nfFwgOwor57CnPmh1w6FuZ3xcIDsKK+W+qD5odcOhbmd8XCA7CivkuJ4+Y2jDqW5nfFwgOwor5qCTPnNodWFufFwgOwor6L+lPmppxY9uZ3xcIDsKK+ebhT56aG9uZ3xcIDsKK+idlz5odcOhbmd8XCA7CivplLU+cWlhbmd8XCA7Civnu5s+amnDoG5nfFwgOwor6IynPmNow7NuZ3xcIDsKK+a8sz56aGFuZ3xcIDsKK+eeoD5jaGVuZ3xcIDsKK+e+jD5xaWFuZ3xcIDsKK+mltz54acSDbmd8XCA7Civon4A+c2h1w6BpfFwgOwor5bmbPnpow6BuZ3xcIDsKK+mjqD54acSDbmd8XCA7CivmvaI+aHXDoW5nfFwgOwor5YaiPnpoxY9uZ3xcIDsKK+eYtD56aMOgbmd8XCA7Civpk44+Y2hlbmd8XCA7CivolLc+cWnDoW5nfFwgOwor5oiVPnFpYW5nfFwgOwor56O6Pmh1w6FuZ3xcIDsKK+eKnz5qacOgbmd8XCA7Civnirc+Z3XEg25nfFwgOwor5ZKjPmd1YW5nfFwgOwor5b+qPnpob25nfFwgOwor5qifPnpoYW5nfFwgOwor6YKdPmt1w6BuZ3xcIDsKK+Wrpj5jaMOhbmd8XCA7CivplIM+emjDqG5nfFwgOwor6YGRPmh1w6FuZ3xcIDsKK+eNkD56aGFuZ3xcIDsKK+W+nD5jaMOhbmd8XCA7CivmuZ8+aHXDoW5nfFwgOwor6ZqNPmh1w6FuZ3xcIDsKK+W2gj56aMOgbmd8XCA7CivmpL0+Y2h1w6FufFwgOwor6IOxPmd1YW5nfFwgOwor54i/PnFpw6FuZ3xcIDsKK+ivsz5rdcOhbmd8XCA7Civon5E+emhhbmd8XCA7CivopYE+cWnEg25nfFwgOwor6IKTPmh1YW5nfFwgOwor6ZOzPmNow7JuZ3xcIDsKK+S8pT5jaGFuZ3xcIDsKK+innj5zaGFuZ3xcIDsKK+iIgj5jaG9uZ3xcIDsKK+ivpD56aGVuZ3xcIDsKK+eGtT5zaGFuZ3xcIDsKK+awhT5jaMSDbmd8XCA7Civpqqc+eGlhbmd8XCA7Civor64+a3XDoG5nfFwgOwor56+BPmh1w6FuZ3xcIDsKK+WYrD5jaHXDoGl8XCA7CivoiJs+Y2h1xINufFwgOwor5ZWtPnpodcOgbnxcIDsKK+mmlD56aHXDoG58XCA7Civpko8+Y2h1w6BufFwgOwor5oiXPnFpYW5nfFwgOwor5aKSPnNoYW5nfFwgOwor6K+TPmt1YW5nfFwgOwor6IyVPnFpw7NuZ3xcIDsKK+ifpT5odcOhbmd8XCA7CivmmZ8+c2jDqG5nfFwgOwor5Zy5Pmt1w6BuZ3xcIDsKK+eCnT5xacOgbmd8XCA7CivltYo+c2jDqG5nfFwgOwor57yDPnhpYW5nfFwgOwor6YGEPmNodcOhbnxcIDsKK+mynj54acSDbmd8XCA7CivosYc+amlhbmd8XCA7Civplao+cWlhbmd8XCA7CivprYk+bGnEg25nfFwgOwor6JupPnFpw7NuZ3xcIDsKK+iPlj5jaGFuZ3xcIDsKK+WrsT5xacOhbmd8XCA7Civpgps+cWnDs25nfFwgOwor6aKbPnpodWFufFwgOwor6KOOPmNow6luZ3xcIDsKK+aYtj5jaMSDbmd8XCA7CivonKM+cWlhbmd8XCA7Civom48+Y2hlbmd8XCA7CivogKk+amnEg25nfFwgOwor6bKzPmNoYW5nfFwgOwor6LS2Pmt1w6BuZ3xcIDsKK+W6oD54acOhbmd8XCA7Civoipc+eGlhbmd8XCA7Civln5U+Y2jDqW5nfFwgOwor6J69Pnpob25nfFwgOwor6ZSWPnFpYW5nfFwgOwor5qSLPmxpw6FuZ3xcIDsKK+msrz5jaMOgbmd8XCA7Civot6s+cWnDs25nfFwgOwor5aGNPmNow6luZ3xcIDsKK+awmj5jaHVhbnxcIDsKK+aDnT5jaMSDbmd8XCA7Civlnqc+amlvbmd8XCA7CivphKM+emhhbmd8XCA7CivnnJo+c2jElW5nfFwgOwor5rWIPmNow6luZ3xcIDsKK+mYij5jaGFuZ3xcIDsKK+iKjj5xaW9uZ3xcIDsKK+mKjj5xaW9uZ3xcIDsKK+ekkz5qaWFuZ3xcIDsKK+aJgz5qaW9uZ3xcIDsKK+ahhD5ndWFuZ3xcIDsKK+WrnD56aGFuZ3xcIDsKK+S7iT56aMSDbmd8XCA7CivpvKo+c2hlbmd8XCA7CivpvJo+Y2hhbmd8XCA7Civpu4s+a3XEg25nfFwgOwor6buKPmt1w6BuZ3xcIDsKK+m7hj5ndWFuZ3xcIDsKK+m7gz5odcOhbmd8XCA7Civpup4+emhhbmd8XCA7Civpt6w+aHXDoW5nfFwgOwor6beSPnpodWFufFwgOwor6bW/PnNoZW5nfFwgOwor6bWfPmt1w6FuZ3xcIDsKK+m0pD56aG9uZ3xcIDsKK+mziT5qaWFuZ3xcIDsKK+mzhz5odcOhbmd8XCA7Civpsr8+Y2jDoW5nfFwgOwor6bG2PnhpxINuZ3xcIDsKK+mxqD5jaMOhbmd8XCA7CivpsaY+c2jDqW5nfFwgOwor6bGRPmh1w6FuZ3xcIDsKK+mxjD54acOgbmd8XCA7CivpsYY+emhhbmd8XCA7CivpsYQ+emh1YW58XCA7CivpsYI+amlhbmd8XCA7CivpsIk+aHXDoW5nfFwgOwor6a+nPmNoYW5nfFwgOwor6a+XPnhpxINuZ3xcIDsKK+munT54acSDbmd8XCA7CivprY4+bGnEg25nfFwgOwor6ay6PnNoYW5nfFwgOwor6ayHPnpoZW5nfFwgOwor6amkPnhpYW5nfFwgOwor6ai/PnpoYW5nfFwgOwor6aisPmNow6luZ3xcIDsKK+monD5odcOhbmd8XCA7CivpqIE+Y2jElW5nfFwgOwor6ae6Pmxpw6FuZ3xcIDsKK+mnqz5qaW9uZ3xcIDsKK+mniT5qacWPbmd8XCA7CivppZ8+eGnEg25nfFwgOwor6aWXPnhpxINuZ3xcIDsKK+mlkz5jaGVuZ3xcIDsKK+mljD56aHXDoG58XCA7CivppK0+aHXDoW5nfFwgOwor6aSmPnpoYW5nfFwgOwor6aSJPnhpxINuZ3xcIDsKK+mijj5qacWPbmd8XCA7CivpoZw+amnEg25nfFwgOwor6aGTPnpodWFufFwgOwor6aGIPmppxY9uZ3xcIDsKK+mgsz5jaGVuZ3xcIDsKK+mghT54acOgbmd8XCA7Civpn78+eGnEg25nfFwgOwor6Z+5Pmh1w6FuZ3xcIDsKK+mflD5jaMOgbmd8XCA7Civpn4E+amlhbmd8XCA7Civpnp0+emjEg25nfFwgOwor6Z2XPmNow6huZ3xcIDsKK+mZnj5zaGVuZ3xcIDsKK+mYtz5jaGVuZ3xcIDsKK+mXmz5jaGFuZ3xcIDsKK+mXgj54acOgbmd8XCA7Civpl4A+eGnDoG5nfFwgOwor6Za2PmNoYW5nfFwgOwor6ZaCPnNodWFufFwgOwor6ZW3PmNow6FuZ3xcIDsKK+mUvT5odcOhbmd8XCA7CivplKA+Y2hhbmd8XCA7Civpk5Y+Y2jDqW5nfFwgOwor6ZGyPnhpYW5nfFwgOwor6ZGcPnNow6BuZ3xcIDsKK+mRmz5rdcOgbmd8XCA7CivpkLo+Y2hlbmd8XCA7CivpkJg+emhvbmd8XCA7Civpj78+Y2hlbmd8XCA7Civpj7k+cWlhbmd8XCA7Civpj7M+emhlbmd8XCA7Civpj5s+Y2jDoW5nfFwgOwor6Y+YPnFpYW5nfFwgOwor6Y6kPmh1xINuZ3xcIDsKK+mOoz5qacWPbmd8XCA7Civpjpc+cWlhbmd8XCA7CivpjpE+Y2hlbmd8XCA7Civpjb4+emhvbmd8XCA7CivpjaA+aHXDoW5nfFwgOwor6YypPmNoYW5nfFwgOwor6YyaPnpoZW5nfFwgOwor6YyGPnFpYW5nfFwgOwor6Yu/PmNow6FuZ3xcIDsKK+mLuT5jaMSDbmd8XCA7Civpi64+Y2jDqW5nfFwgOwor6Yq/Pnpob25nfFwgOwor6YqnPmd1YW5nfFwgOwor6YqEPnNow6BuZ3xcIDsKK+mKgz5jaMOybmd8XCA7CivpibE+a3XDoG5nfFwgOwor6YmmPnpoZW5nfFwgOwor6YihPnpob25nfFwgOwor6YenPmNodcOgbnxcIDsKK+mHgD5uacOgbmd8XCA7Civphrg+bmnDoG5nfFwgOwor6YasPmppw6BuZ3xcIDsKK+mGpD5qacOgbmd8XCA7Civpho4+Y2jDqW5nfFwgOwor6YWyPmNow6luZ3xcIDsKK+mFqz5jaMOzbmd8XCA7CivphLo+a3XDoG5nfFwgOwor6YStPnpow6huZ3xcIDsKK+mEnz56aHVhbnxcIDsKK+mElT54aWFuZ3xcIDsKK+mEiT54aWFuZ3xcIDsKK+mDtz54aWFuZ3xcIDsKK+mDlT5jaMOpbmd8XCA7Civpgrw+a3Vhbmd8XCA7Civpgac+emhhbmd8XCA7CivpgIg+amnFj25nfFwgOwor6L6MPmxpw6FuZ3xcIDsKK+i9iT56aHXEg2l8XCA7CivovLI+Y2h1w6FufFwgOwor6LysPmxpw6FuZ3xcIDsKK+i8mz5sacOgbmd8XCA7CivovIw+bGnDoG5nfFwgOwor6LyEPmd1YW5nfFwgOwor6LyBPnFpw7NuZ3xcIDsKK+i7rT5rdWFuZ3xcIDsKK+i7oj56aHXEg258XCA7Civou5Y+cWnDoW5nfFwgOwor6LqAPmt1w6BuZ3xcIDsKK+i5sT56aG9uZ3xcIDsKK+i5oT5xaWFuZ3xcIDsKK+i5lj5jaG9uZ3xcIDsKK+i5jD5xaWFuZ3xcIDsKK+i4rT56aGVuZ3xcIDsKK+i3qT56aHXEg2l8XCA7Civotqo+aHXDoW5nfFwgOwor6LaaPmNoZW5nfFwgOwor6LW5PnFpw7NuZ3xcIDsKK+i1rD5jaGVuZ3xcIDsKK+i1qj5jaGVuZ3xcIDsKK+i1qD54acOzbmd8XCA7CivotIM+emh1w6BufFwgOwor6LO6PnpodcOgbnxcIDsKK+izuD5zaMOobmd8XCA7Civos68+eGlvbmd8XCA7Civos6w+emjDoG5nfFwgOwor6LOePnNoxINuZ3xcIDsKK+izlz5jaHXDoG58XCA7Civosro+a3XDoG5nfFwgOwor6K+HPnhpw7JuZ3xcIDsKK+itnT5zaMOpbmd8XCA7CivorZQ+emh1w6BufFwgOwor6K2JPnpow6huZ3xcIDsKK+isvT5qacOgbmd8XCA7CivorKo+c2hhbmd8XCA7CivorJs+amnEg25nfFwgOwor6KySPnFpYW5nfFwgOwor6KyKPmh1xINuZ3xcIDsKK+irrz5jaHXDoW58XCA7Civoq6U+emjDsm5nfFwgOwor6KuSPmxpw6BuZ3xcIDsKK+irkD5sacOhbmd8XCA7Civoq40+emhlbmd8XCA7Civoqq8+Y2jDoG5nfFwgOwor6KqgPmNow6luZ3xcIDsKK+iqkT5rdcOhbmd8XCA7CivoqoY+a3Vhbmd8XCA7Civoqb4+eGlvbmd8XCA7CivoqbM+eGnDoW5nfFwgOwor6KmkPmh1xINuZ3xcIDsKK+iplz54acOybmd8XCA7CivoqLw+emjDqG5nfFwgOwor6KipPnhpb25nfFwgOwor6Ke0PnNoYW5nfFwgOwor6KWQPnhpw6BuZ3xcIDsKK+iliD56aHXDoG58XCA7CivopLw+cWnEg25nfFwgOwor6KSnPmppxY9uZ3xcIDsKK+ikiD5jaMOzbmd8XCA7Civoo78+Y2hvbmd8XCA7Civoo7I+bGnEg25nfFwgOwor6KOuPmNoYW5nfFwgOwor6KK2Pmppw6BuZ3xcIDsKK+ihtj5jaG9uZ3xcIDsKK+ihsz56aG9uZ3xcIDsKK+ihnT5jaG9uZ3xcIDsKK+ihhj56aMOybmd8XCA7CivooYE+aHVhbmd8XCA7CivooLA+c2jDoG5nfFwgOwor6KCBPnhpw6BuZ3xcIDsKK+iftj5jaGVuZ3xcIDsKK+ifsj5jaMOzbmd8XCA7Civonr8+amlhbmd8XCA7Civonqo+c2hhbmd8XCA7CivonoA+amlhbmd8XCA7Civonak+Y2jDs25nfFwgOwor6Jy9PmxpxINuZ3xcIDsKK+iamz56aMOybmd8XCA7CivomoM+eGnEg25nfFwgOwor6JmwPmNow6luZ3xcIDsKK+iYoD5xacOhbmd8XCA7CivomJQ+amlvbmd8XCA7CivomI8+amlvbmd8XCA7CivomIw+amnFj25nfFwgOwor6JetPnFpw7NuZ3xcIDsKK+iWlD5xacOhbmd8XCA7CivolpE+amlhbmd8XCA7Civolow+eGlhbmd8XCA7CivolKM+amnEg25nfFwgOwor6JSiPmppYW5nfFwgOwor6JSPPnNoYW5nfFwgOwor6JSDPmppw6BuZ3xcIDsKK+iSgz56aHXDoG58XCA7CivokZ8+aHXDoW5nfFwgOwor6JGZPnhpYW5nfFwgOwor6JGBPmppYW5nfFwgOwor6JCrPnhpw6BuZ3xcIDsKK+iQhz5jaMOhbmd8XCA7Civojb8+Y2jDqW5nfFwgOwor6I2IPmNodcSDbnxcIDsKK+iMvT56aMOybmd8XCA7CivojLo+Y2hvbmd8XCA7CivojLM+amlhbmd8XCA7CivojKo+Z3Vhbmd8XCA7Civoi5g+cWnFj25nfFwgOwor6IqWPnhpxINuZ3xcIDsKK+iJjj5odcOhbmd8XCA7CivoiK8+emhvbmd8XCA7CivoiKk+Y2h1w6FufFwgOwor6IepPmd1w6BuZ3xcIDsKK+iHpj5ndcOgbmd8XCA7Civohrc+eGlhbmd8XCA7Civohp4+emh1YW58XCA7Civohpk+amnEg25nfFwgOwor6IaXPmNodcOhaXxcIDsKK+iGkz5jaMOhbmd8XCA7Civohbg+Y2jDoW5nfFwgOwor6IWrPnpoxY9uZ3xcIDsKK+iFqD5jaHXEg258XCA7CivohYQ+Y2h1w6FpfFwgOwor6IS8PmxpxINuZ3xcIDsKK+iEuT56aMOgbmd8XCA7CivohLc+Y2jDoW5nfFwgOwor6IStPmNow6luZ3xcIDsKK+iEgD5jaMOpbmd8XCA7Civog5g+c2hlbmd8XCA7CivogbI+c2hlbmd8XCA7CivogZY+c2jDqG5nfFwgOwor6IGHPnpoZW5nfFwgOwor6ICRPnpodWFufFwgOwor57+ePmppYW5nfFwgOwor57+APmNob25nfFwgOwor576+PmNob25nfFwgOwor5767PnFpw6BuZ3xcIDsKK+e+qz5xaWFuZ3xcIDsKK+e+pT5xacSDbmd8XCA7Civnvpc+cWlhbmd8XCA7Civnuqk+a3XDoG5nfFwgOwor57qVPnhpYW5nfFwgOwor57qKPmt1w6BuZ3xcIDsKK+e5rj5qaWFuZ3xcIDsKK+e5qT5zaMOpbmd8XCA7CivnuaY+cWnEg25nfFwgOwor57mIPnFpxINuZ3xcIDsKK+e4sz56aHXDoG58XCA7Civnt70+Y2hlbmd8XCA7Civnt58+emjDsm5nfFwgOwor57eXPnhpYW5nfFwgOwor57eUPnpow6BuZ3xcIDsKK+e3iT5sacSDbmd8XCA7Civntpc+amnFj25nfFwgOwor57W+PmNow6luZ3xcIDsKK+e1tD54acOhbmd8XCA7CivntbM+amnDoG5nfFwgOwor57WWPmt1w6BuZ3xcIDsKK+e1hT5qacWPbmd8XCA7CivntYI+emhvbmd8XCA7Civns70+emjElW5nfFwgOwor57OoPmppw6BuZ3xcIDsKK+ezpz5sacOhbmd8XCA7Civns6E+amnDoG5nfFwgOwor57K7PnpoYW5nfFwgOwor57GmPnpob25nfFwgOwor57GRPnpodcOgbnxcIDsKK+evvz56aHVhbnxcIDsKK+evuT56aHXDoG58XCA7Civnr6w+cWlhbmd8XCA7Civnr5w+emhlbmd8XCA7CivnrrU+c2jElW5nfFwgOwor566PPnpoZW5nfFwgOwor562sPmNow6luZ3xcIDsKK+etlz56aMOybmd8XCA7CivnrYc+cWnDs25nfFwgOwor56y7PnFpw7NuZ3xcIDsKK+ersT56aHXEg258XCA7Civnq4Y+cWnDs25nfFwgOwor56uAPmNoZW5nfFwgOwor56quPnFpw7NuZ3xcIDsKK+eqmj5jaMOpbmd8XCA7Civnqao+Y2hlbmd8XCA7CivnqZ4+a3XDoG5nfFwgOwor56mUPmh1w6FuZ3xcIDsKK+eorj56aMWPbmd8XCA7CivnqKY+Y2jDs25nfFwgOwor56WMPnpow7JuZ3xcIDsKK+ekpj5rdcOgbmd8XCA7CivnpIM+emjEg25nfFwgOwor56OiPnFpxINuZ3xcIDsKK+ejmj56aHVhbnxcIDsKK+ehhD5rdWFuZ3xcIDsKK+efvD5qaWFuZ3xcIDsKK+efjD5rdcOgbmd8XCA7CivnnpU+emjDoG5nfFwgOwor556PPnFpw7NuZ3xcIDsKK+ednD56aGVuZ3xcIDsKK+edmD5xacOzbmd8XCA7CivnnYg+Y2jElW5nfFwgOwor55y+Pnpow7JuZ3xcIDsKK+eclj5rdcOgbmd8XCA7CivnnJA+emhlbmd8XCA7Civnmqk+aHXDoG5nfFwgOwor55qbPmppxY9uZ3xcIDsKK+eZpT56aGVuZ3xcIDsKK+eZgD5odcOhbmd8XCA7CivnmKw+emjDoG5nfFwgOwor55iHPnpoxa1uZ3xcIDsKK+eXrj56aMOgbmd8XCA7Civnl4s+Y2jDs25nfFwgOwor55aFPmppYW5nfFwgOwor55W8PmNow6BuZ3xcIDsKK+eVuz5zaMOpbmd8XCA7Civnlbo+amlhbmd8XCA7CivnlZU+amlhbmd8XCA7CivnlJ4+Y2jDoW5nfFwgOwor55SOPnpodWFufFwgOwor55O6PmNow6FuZ3xcIDsKK+eTlj54aWFuZ3xcIDsKK+eTij5xacOzbmd8XCA7Civnkbw+emh1YW58XCA7Civnkbo+Y2jDoW5nfFwgOwor55GyPnFpYW5nfFwgOwor55GdPmh1w6FuZ3xcIDsKK+eRkT56aHXDoG58XCA7CivnkY8+Y2h1YW58XCA7CivnkKk+Y2hhbmd8XCA7CivnkKQ+Y2hlbmd8XCA7CivnkJ4+c2jDqG5nfFwgOwor54+5PmNow6luZ3xcIDsKK+ePtT5jaMOpbmd8XCA7Civnj6s+Y2hvbmd8XCA7Civnj6Y+eGnDoG5nfFwgOwor54+WPmd1YW5nfFwgOwor54+EPnNoZW5nfFwgOwor546xPnFpYW5nfFwgOwor546ZPmNow6BuZ3xcIDsKK+eOlD5jaHXDoG58XCA7Civnjow+Y2h1w6BufFwgOwor5423Pmd1xINuZ3xcIDsKK+eNmj5odcOhbmd8XCA7CivnjY4+amnEg25nfFwgOwor54yZPnpoZW5nfFwgOwor54yQPnFpYW5nfFwgOwor54uMPnNoZW5nfFwgOwor54uGPnpow7JuZ3xcIDsKK+eJmj5jaGVuZ3xcIDsKK+eJhj5xacOhbmd8XCA7CivniYQ+cWlhbmd8XCA7CivniK8+Y2hlbmd8XCA7CivniK0+emhlbmd8XCA7CivniJ4+Y2jDs25nfFwgOwor54iMPmh1w6BuZ3xcIDsKK+eGvz5odcOhbmd8XCA7CivnhrI+amnFj25nfFwgOwor54aXPnFpw6BuZ3xcIDsKK+eGkD5qacWPbmd8XCA7Civnho0+cWlvbmd8XCA7CivnhoA+aHXEg25nfFwgOwor54WiPnFpw7NuZ3xcIDsKK+eFmz5qacWPbmd8XCA7CivnhZo+amnFj25nfFwgOwor54WEPnpob25nfFwgOwor54S7PmNow6BuZ3xcIDsKK+eEuj5zaGVuZ3xcIDsKK+eErT5xacOzbmd8XCA7CivnhKo+cWlvbmd8XCA7Civng7E+amnFj25nfFwgOwor54OhPmd1YW5nfFwgOwor54OdPnpoZW5nfFwgOwor54K+Pmh1xINuZ3xcIDsKK+eCoT56aGVuZ3xcIDsKK+eCmz5ndWFuZ3xcIDsKK+eCmj5ndWFuZ3xcIDsKK+eClz5ndWFuZ3xcIDsKK+eCgj56aG9uZ3xcIDsKK+eBtz56aHXDoG58XCA7Civnga4+Z3Vhbmd8XCA7CivngJM+Y2jDqW5nfFwgOwor54CCPmppb25nfFwgOwor5r6gPnNow6luZ3xcIDsKK+a+gz5qacOybmd8XCA7CivmvoI+Y2jDqW5nfFwgOwor5r2oPnpob25nfFwgOwor5ry/PmppYW5nfFwgOwor5ry0PmNow7NuZ3xcIDsKK+a8sj56aMSDbmd8XCA7CivmvKE+c2hhbmd8XCA7CivmvJI+cWnDoW5nfFwgOwor5ruzPnNoYW5nfFwgOwor5ruwPmppxINuZ3xcIDsKK+a7iT5odcSDbmd8XCA7Civmuqw+cWlhbmd8XCA7Civmupc+c2jDqW5nfFwgOwor5rm4Pmxpw6BuZ3xcIDsKK+a5pj5zaGVuZ3xcIDsKK+a5nj5jaMOpbmd8XCA7Civmt5A+Y2hhbmd8XCA7Civmtrw+bGnDoW5nfFwgOwor5ra5Pmxpw6BuZ3xcIDsKK+a2sT56aMOgbmd8XCA7Civmtos+Y2hvbmd8XCA7Civmtb4+Y2hlbmd8XCA7Civmtbo+Y2hvbmd8XCA7CivmtYQ+amnDoG5nfFwgOwor5rS4Pmd1YW5nfFwgOwor5rS2Pnhpb25nfFwgOwor5rStPmt1YW5nfFwgOwor5rSaPmppw6BuZ3xcIDsKK+a0hj5jaMOpbmd8XCA7Civms6k+c2hlbmd8XCA7Civms58+Y2hlbmd8XCA7Civms4g+emhvbmd8XCA7Civms4I+amnFj25nfFwgOwor5rOBPmt1w6BuZ3xcIDsKK+aylj5jaG9uZ3xcIDsKK+axkT5zaHXDoG58XCA7CivmsYw+Y2h1w6BufFwgOwor5rC2PnpoxJVuZ3xcIDsKK+aurT5qaWFuZ3xcIDsKK+aupD5zaGFuZ3xcIDsKK+auhT5zaGVuZ3xcIDsKK+atgj5jaHXDoW58XCA7CivmrIA+eGlhbmd8XCA7Civmq44+Z3XDoG5nfFwgOwor5qq+PmppxY9uZ3xcIDsKK+aqoz5xacOhbmd8XCA7Civmqok+Y2hlbmd8XCA7Civmqb8+amlhbmd8XCA7Civmqak+cWnDs25nfFwgOwor5qmjPmNob25nfFwgOwor5qmVPmNoZW5nfFwgOwor5qikPmd1YW5nfFwgOwor5qiVPmNoZW5nfFwgOwor5qiRPmxpw6FuZ3xcIDsKK+aogD5jaG9uZ3xcIDsKK+ansz5qacSDbmd8XCA7Civmp40+cWlhbmd8XCA7Civmpro+c2jDqG5nfFwgOwor5qalPmh1xINuZ3xcIDsKK+amnT5odcOgbmd8XCA7CivmpIw+cWlhbmd8XCA7CivmpIk+Y2jDqW5nfFwgOwor5qO+PnFpw7NuZ3xcIDsKK+ajpj5jaGVuZ3xcIDsKK+ajlj5jaMOpbmd8XCA7Civmoqw+Y2jElW5nfFwgOwor5p+8PmNoZW5nfFwgOwor5p+KPnpob25nfFwgOwor5p6oPmNoZW5nfFwgOwor5pyaPmh1YW5nfFwgOwor5pugPmt1w6BuZ3xcIDsKK+abjz54acOgbmd8XCA7Civmm4I+aHXDoG5nfFwgOwor5pq3PmNodcOhbnxcIDsKK+aasj56aGFuZ3xcIDsKK+aaoj5jaMOgbmd8XCA7Civmmb8+Y2hhbmd8XCA7CivmmaA+c2jDqW5nfFwgOwor5pmRPnhpxINuZ3xcIDsKK+aZhD5odcSDbmd8XCA7CivmmL8+a3XDoG5nfFwgOwor5piHPnNoZW5nfFwgOwor5paoPnFpYW5nfFwgOwor5pW7Pnhpw7JuZ3xcIDsKK+aSnD56aMSVbmd8XCA7Civmkpc+Y2jDqW5nfFwgOwor5pKQPmNoZW5nfFwgOwor5pG+Pmppw6BuZ3xcIDsKK+aRqj5qaWFuZ3xcIDsKK+aRjz5jaG9uZ3xcIDsKK+aQtj5xaWFuZ3xcIDsKK+aPsD5jaMOybmd8XCA7Civmj6g+Y2jDqW5nfFwgOwor5o+XPmNodWFpfFwgOwor5o6aPmxpxINuZ3xcIDsKK+aOmT56aGVuZ3xcIDsKK+aOgT5jaMOpbmd8XCA7CivmjLA+Y2jDqW5nfFwgOwor5oqCPmt1w6FuZ3xcIDsKK+aJmT56aMOgbmd8XCA7Civmh7I+Y2jDqW5nfFwgOwor5oetPmt1w6BuZ3xcIDsKK+aHrD5rdcOgbmd8XCA7CivmhrQ+c2jDqW5nfFwgOwor5oaVPmNow6luZ3xcIDsKK+aGhj5jaGVuZ3xcIDsKK+aGgz5jaG9uZ3xcIDsKK+aFrz5zaGFuZ3xcIDsKK+aEuD56aMSVbmd8XCA7CivmhLA+aHXEg25nfFwgOwor5oO4PnFpw7NuZ3xcIDsKK+aCtT5jaMOgbmd8XCA7CivmgqI+bGnDoG5nfFwgOwor5oKcPmNoxJVuZ3xcIDsKK+aBpj54acOgbmd8XCA7CivmgZ8+eGlvbmd8XCA7CivmgYc+a3Vhbmd8XCA7CivmgLM+aHXEg25nfFwgOwor5b+3Pnhpb25nfFwgOwor5b+APnhpYW5nfFwgOwor5b64PmNob25nfFwgOwor5b60PnpoZW5nfFwgOwor5b6OPmNoxJVuZ3xcIDsKK+W9ij5qacOgbmd8XCA7CivlvYk+amlhbmd8XCA7CivlvLc+cWnDoW5nfFwgOwor5by2Pmppw6BuZ3xcIDsKK+W8tT56aGFuZ3xcIDsKK+W8nD5qacOgbmd8XCA7Civlu6c+cWnDoW5nfFwgOwor5bujPmd1xINuZ3xcIDsKK+W7oD5jaMSDbmd8XCA7Civlu4I+eGlhbmd8XCA7CivlurE+Y2jElW5nfFwgOwor5bqDPmd1xINuZ3xcIDsKK+W5nD5qacWPbmd8XCA7CivluZI+emhvbmd8XCA7CivluYA+emjDqG5nfFwgOwor5bizPnpow6BuZ3xcIDsKK+W4pT5zaHXDoGl8XCA7Civlt58+aHVhbmd8XCA7Civlt5s+Y2h1YW58XCA7CivltpE+eGnEg25nfFwgOwor5baIPnFpYW5nfFwgOwor5bW5Pmppw6BuZ3xcIDsKK+W0sj5odcOhbmd8XCA7CivltKI+emhlbmd8XCA7CivltJ0+emhlbmd8XCA7CivltIg+Y2jDs25nfFwgOwor5bO4PmNow6luZ3xcIDsKK+Wysj5rdcOgbmd8XCA7CivlsJk+c2jDoG5nfFwgOwor5bCIPnpodWFufFwgOwor5bCHPmppYW5nfFwgOwor5bCFPmppw6BuZ3xcIDsKK+Wwgj56aHVhbnxcIDsKK+WvtT5jaMWPbmd8XCA7Civlrro+aHXEg25nfFwgOwor5a6sPmNow6luZ3xcIDsKK+Wuhj5xacOzbmd8XCA7Civlrag+emh1xINufFwgOwor5a2IPnNodWFpfFwgOwor5a2DPm5pw6FuZ3xcIDsKK+Wsoj5uacOhbmd8XCA7CivlrJk+cWnDoW5nfFwgOwor5aulPnpodWFufFwgOwor5aqTPmh1w6FuZ3xcIDsKK+WqkT56aMOybmd8XCA7CivlqI0+Y2jDqW5nfFwgOwor5aevPmd1YW5nfFwgOwor5aegPnNow6BuZ3xcIDsKK+Wngz56aGVuZ3xcIDsKK+WmlT56aMOybmd8XCA7CivlppA+emhvbmd8XCA7Civlpaw+amnEg25nfFwgOwor5aWoPmppxINuZ3xcIDsKK+WkvD5rdcSDbmd8XCA7Civlo5k+a3XDoG5nfFwgOwor5aODPmppYW5nfFwgOwor5aK0Pmh1w6FuZ3xcIDsKK+Wimj5sacOhbmd8XCA7Civlobw+emh1YW58XCA7CivlobI+Y2jDoW5nfFwgOwor5aGjPmNoxJVuZ3xcIDsKK+Whmj56aMWPbmd8XCA7CivloZY+Y2jDqW5nfFwgOwor5aGDPmh1YW5nfFwgOwor5aGCPnhpw6BuZ3xcIDsKK+Wgvj5jaHXEg258XCA7CivloLk+emjDsm5nfFwgOwor5aC0PmNoxINuZ3xcIDsKK+WgrT5odcOhbmd8XCA7CivloKk+Y2jEg25nfFwgOwor5aCfPnpodcOgbnxcIDsKK+WgmD5jaMOpbmd8XCA7Civln6s+Y2jFj25nfFwgOwor5Z+lPmNoZW5nfFwgOwor5Z+bPmppb25nfFwgOwor5Z6ZPmd1YW5nfFwgOwor5Z2wPmppb25nfFwgOwor5ZyxPmNoxINuZ3xcIDsKK+Wbpz5qacWPbmd8XCA7Civlm4A+emh1w6BufFwgOwor5ZquPnhpw6BuZ3xcIDsKK+WanT5odWFuZ3xcIDsKK+WakD5jaMOhbmd8XCA7CivlmKo+Y2h1w6BpfFwgOwor5ZiXPmNow6FuZ3xcIDsKK+WYgz5jaG9uZ3xcIDsKK+WXhj5xaWFuZ3xcIDsKK+WWqD5sacOgbmd8XCA7CivllqQ+aHXDoW5nfFwgOwor5ZagPnpoxY9uZ3xcIDsKK+WVoj5sacSDbmd8XCA7CivllYw+eGlhbmd8XCA7CivllLQ+cWnDoG5nfFwgOwor5ZShPmxpxINuZ3xcIDsKK+WTtD5sacOgbmd8XCA7CivlkrA+c2h1w6BpfFwgOwor5ZGPPnNoZW5nfFwgOwor5Y6wPmNoxINuZ3xcIDsKK+WNrT5xacOzbmd8XCA7CivljZ0+a3XDoG5nfFwgOwor5Y2bPnNodcOgaXxcIDsKK+WMnj5qacOgbmd8XCA7CivljJQ+cWlvbmd8XCA7Civli6U+cWnEg25nfFwgOwor5YudPnNoZW5nfFwgOwor5Yq7Pmt1YW5nfFwgOwor5YmwPnNow6huZ3xcIDsKK+WIoz56aG9uZ3xcIDsKK+WHlj56aHXElW58XCA7Civlho8+amnFj25nfFwgOwor5YaLPmppb25nfFwgOwor5YaCPmppb25nfFwgOwor5YWpPmxpxINuZ3xcIDsKK+WFpD5odcOhbmd8XCA7CivlhY8+Y2jDoW5nfFwgOwor5YWHPnhpb25nfFwgOwor5YSjPmt1w6BuZ3xcIDsKK+WEnz5jaMOhbmd8XCA7CivlhJ0+cWnDs25nfFwgOwor5YOiPmNodcSDbnxcIDsKK+WDmT5ndWFuZ3xcIDsKK+WDmD5jaMSDbmd8XCA7Civlg5I+amnFj25nfFwgOwor5YOOPnpodcOgbnxcIDsKK+WCvT56aGFuZ3xcIDsKK+WCuD5xacSDbmd8XCA7Civlgrc+c2hhbmd8XCA7CivlgrM+Y2h1w6FufFwgOwor5YKTPmNow6luZ3xcIDsKK+WBnz5odcOhbmd8XCA7CivlgZc+c2jElW5nfFwgOwor5YGFPnpow7JuZ3xcIDsKK+WBgT5jaGVuZ3xcIDsKK+WAlT5jaMOhbmd8XCA7CivlgIQ+bGnEg25nfFwgOwor5YCAPmNoYW5nfFwgOwor5L+iPmxpxINuZ3xcIDsKK+S/hz5ndcOgbmd8XCA7CivkvrE+Y2jElW5nfFwgOwor5L6KPmd1YW5nfFwgOwor5L2tPnhpw6FuZ3xcIDsKK+S8nT5jaHXDoW58XCA7CivkvIA+emhvbmd8XCA7Civku6c+Y2jDoW5nfFwgOwor5LqvPnhpxINuZ3xcIDsKK+S5lz5jaMOpbmd8XCA7CivkuZE+c2jDqG5nfFwgOwor5LisPnFpw6FuZ3xcIDsKK+S4oT5sacSDbmd8XCA7CivkuIQ+c2jDoG5nfFwgOwor5LWDPmt1w6BuZ3xcIDsKK+S1gT5xacOgbmd8XCA7Civks68+Y2jDs25nfFwgOwor5LOoPmh1w6FuZ3xcIDsKK+SxsD56aMOybmd8XCA7CivksYY+c2jDqW5nfFwgOwor5K+0PmNow6FuZ3xcIDsKK+Susj5odcOhbmd8XCA7Civkrqo+Y2jDqW5nfFwgOwor5K2qPmxpw6FuZ3xcIDsKK+SslT5zaMSDbmd8XCA7Civkq4Y+Y2jDqW5nfFwgOwor5Kq/PnNoxJVuZ3xcIDsKK+SqhD5odcOhbmd8XCA7Civkqas+bGnEg25nfFwgOwor5KmoPmNow6BuZ3xcIDsKK+Snuj54acOzbmd8XCA7Civkp6A+c2h1w6BufFwgOwor5KeVPmNow6luZ3xcIDsKK+Smtz5jaHXDoGl8XCA7CivkprY+emjDqG5nfFwgOwor5KakPmNodcOgaXxcIDsKK+Smnz5jaHXDoGl8XCA7Civkpps+emjDqG5nfFwgOwor5KWtPnpow6huZ3xcIDsKK+SljD56aMOobmd8XCA7Civko7w+bGnDoW5nfFwgOwor5KK9Pnhpw6BuZ3xcIDsKK+Sipj5zaHXDoGl8XCA7Civkops+amnFj25nfFwgOwor5KGxPnpodcSDbnxcIDsKK+ShlT56aMSVbmd8XCA7CivkoLs+cWnDs25nfFwgOwor5KCGPmNow6FuZ3xcIDsKK+Sggz5sacSDbmd8XCA7CivkoIA+Y2jEg25nfFwgOwor5J65Pmh1w6FuZ3xcIDsKK+Seqj5qacOgbmd8XCA7Civknok+c2jDqG5nfFwgOwor5J22Pmxpw6FuZ3xcIDsKK+Sctj54acOhbmd8XCA7Civkm6s+emjDqG5nfFwgOwor5JuqPnFpw7NuZ3xcIDsKK+Sahz5zaMSVbmd8XCA7Civkmbk+amnEg25nfFwgOwor5JeKPmNow6luZ3xcIDsKK+SXhT5jaMOhbmd8XCA7Civklq4+eGnEg25nfFwgOwor5JadPmNow7NuZ3xcIDsKK+SWhj5uacOgbmd8XCA7CivklYs+Y2jEg25nfFwgOwor5JSyPmNow6luZ3xcIDsKK+SUlz54acOhbmd8XCA7Civkk6M+bGnEg25nfFwgOwor5JOWPnFpw7NuZ3xcIDsKK+SSgj5qacSDbmd8XCA7CivkkZ8+aHXDoW5nfFwgOwor5JC1Pmh1w6FuZ3xcIDsKK+SQoD5odcSDbmd8XCA7CivkkJ8+eGnDoG5nfFwgOwor5JCDPmppxY9uZ3xcIDsKK+SOtD5zaMOobmd8XCA7Civkjb8+aHXDoW5nfFwgOwor5Iy5PmppxY9uZ3xcIDsKK+SMrD5jaMOzbmd8XCA7CivkjJk+aHXEg25nfFwgOwor5IuMPmppxINuZ3xcIDsKK+SKrz5rdcOgbmd8XCA7CivkiqM+aHXDoW5nfFwgOwor5IqXPmh1w6FuZ3xcIDsKK+SKkT54acSDbmd8XCA7CivkioQ+cWnDs25nfFwgOwor5Im1PnpodcOgbnxcIDsKK+SJgz5qacSDbmd8XCA7CivkiKM+emjDqG5nfFwgOwor5Ie4PmNow6luZ3xcIDsKK+SGuD5jaMOpbmd8XCA7CivkhrU+Y2jDqW5nfFwgOwor5IazPnFpw7NuZ3xcIDsKK+SGkT5jaMOpbmd8XCA7CivkhaM+aHXDoW5nfFwgOwor5IWaPnFpxINuZ3xcIDsKK+SFgz5xacOzbmd8XCA7CivkhIc+Y2jDqW5nfFwgOwor5IK7Pnpow6huZ3xcIDsKK+SBsD5qacSDbmd8XCA7CivkgaM+Y2h1w6FufFwgOwor5IGePnNoxJVuZ3xcIDsKK+SBnD5odcSDbmd8XCA7CivkgY4+Y2jDqW5nfFwgOwor5ICVPmNow6huZ3xcIDsKK+O+rj5odcOhbmd8XCA7Civjvqo+c2jElW5nfFwgOwor476gPmh1w6FuZ3xcIDsKK+O9tD56aMOgbmd8XCA7CivjvYA+emjDqG5nfFwgOwor47y3PmNodcOhbnxcIDsKK+O8sz5zaMSVbmd8XCA7CivjvKk+Y2jDqW5nfFwgOwor47yHPnFpw7NuZ3xcIDsKK+O5kD5jaMOzbmd8XCA7CivjuYE+bGnDoW5nfFwgOwor47ehPmppxY9uZ3xcIDsKK+O3lz5qacWPbmd8XCA7Civjt4A+cWnDs25nfFwgOwor47aIPmxpxY9uZ3xcIDsKK+OytD56aMOybmd8XCA7CivjsoI+Y2jDqW5nfFwgOwor47GbPmNodcSDbnxcIDsKK+Oxjz56aMOobmd8XCA7Civjr40+amnEg25nfFwgOwor46+MPmNodcOhbnxcIDsKK+Ouqj5xacOzbmd8XCA7CivjrLs+aHXEg25nfFwgOwor46ukPmNoxINuZ3xcIDsKK+Ormz5ndcOgbmd8XCA7Civjqpw+Y2h1xINpfFwgOwor46qTPmNodcOhaXxcIDsKK+Oplj5xacOhbmd8XCA7CivjqKo+aHXDoG5nfFwgOwor46iDPmNow6luZ3xcIDsKK+OnrT5xacOzbmd8XCA7Civjp6Q+Y2jDsm5nfFwgOwor46aCPmNow6FuZ3xcIDsKK+Okuj5odcSDbmd8XCA7CivjpK8+amnFj25nfFwgOwor46SuPmt1w6FuZ3xcIDsKK+Ojqz56aMWPbmd8XCA7CivjoqE+amnEg25nfFwgOwor46KgPmppxY9uZ3xcIDsKK+Ohpz56aMOobmd8XCA7CivjoaA+emjDqG5nfFwgOwor45+fPnhpw6BuZ3xcIDsKK+OfhD54acOhbmd8XCA7Civjnrw+Y2jDqW5nfFwgOwor4563Pmh1w6FuZ3xcIDsKK+ObqD5xacSDbmd8XCA7CivjmaM+emjDoG5nfFwgOwor45mKPmNow6FuZ3xcIDsKK+OXvT54acSDbmd8XCA7Civjl4I+c2jElW5nfFwgOwor45alPmppxY9uZ3xcIDsKK+OVqT56aMOgbmd8XCA7CivjlJ0+bGnEg25nfFwgOwor45O9PmNow7NuZ3xcIDsKK+OTjz5qacWPbmd8XCA7CivjkrM+bGnEg25nfFwgOwor45KMPnFpw7NuZ3xcIDsKK+ORiz5qacOybmd8XCA7CivjkLw+Y2jDqG5nfFwgOwor45C6Pnpow7JuZ3xcIDsKK/CimLg+amnDoG5nfFwgOwor8KKlnj5jaG9uZ3xcIDsKK+ivtD5zaHXDrHxcIDsKK+W5tD5uacOhbnxcIDsKK+edgD56aMOhb3xcIDsKK+Wwjz54acSDb3xcIDsKK+WkqT50aWFufFwgOwor6IO9Pm7DqW5nfFwgOwor6L+YPmh1w6FufFwgOwor5b2TPmRhbmd8XCA7CivmiYs+c2jFj3V8XCA7CivnlKg+ecOybmd8XCA7CivooYw+aMOhbmd8XCA7Civmlrk+ZmFuZ3xcIDsKK+WJjT5xacOhbnxcIDsKK+ingT5qacOgbnxcIDsKK+e7jz5qaW5nfFwgOwor6Z2iPm1pw6BufFwgOwor5YWsPmdvbmd8XCA7CivlkIw+dMOzbmd8XCA7Civku44+Y8Ozbmd8XCA7Civliqg+ZMOybmd8XCA7CivmoLc+ecOhbmd8XCA7CivnjrA+eGnDoG58XCA7Civouqs+c2hlbnxcIDsKK+eCuT5kacSDbnxcIDsKK+aYjj5tw61uZ3xcIDsKK+WFqD5xdcOhbnxcIDsKK+W3pT5nb25nfFwgOwor5oOFPnHDrW5nfFwgOwor5ZCNPm3DrW5nfFwgOwor5a6aPmTDrG5nfFwgOwor5aWzPm51XDrMhnxcIDsKK+etiT5kxJVuZ3xcIDsKK+mXtD5qaWFufFwgOwor5L6/PmJpw6BufFwgOwor55S1PmRpw6BufFwgOwor5LicPmRvbmd8XCA7CivmlZk+amlhb3xcIDsKK+W5sz5ww61uZ3xcIDsKK+ecnz56aGVufFwgOwor5ZCsPnRpbmd8XCA7CivlsJE+c2jEg298XCA7CivlhbM+Z3VhbnxcIDsKK+W5tj5iw6xuZ3xcIDsKK+S6pz5jaMSDbnxcIDsKK+WFiD54aWFufFwgOwor5bGxPnNoYW58XCA7CivmsLQ+c2h1xK18XCA7CivmgLs+esWPbmd8XCA7CivkuaY+cWnDoW58XCA7CivlkZg+eXXDoW58XCA7CivnrJE+eGnDoG98XCA7CivmgKc+eMOsbmd8XCA7CivpgJo+dG9uZ3xcIDsKK+WRvT5tw6xuZ3xcIDsKK+elnj5zaMOpbnxcIDsKK+S7tj5qacOgbnxcIDsKK+ihqD5iacSDb3xcIDsKK+WOnz55dcOhbnxcIDsKK+W6lD55w6xuZ3xcIDsKK+WPqz5qacOgb3xcIDsKK+abtD5nZW5nfFwgOwor5pS+PmbDoG5nfFwgOwor5Y+XPnNow7J1fFwgOwor546LPnfDoW5nfFwgOwor5LqsPmppbmd8XCA7CivmuIU+cWluZ3xcIDsKK+i+uT5iaWFufFwgOwor5YWxPmfDsm5nfFwgOwor6aOOPmZlbmd8XCA7CivmnJs+d8Ogbmd8XCA7Civlu7o+amnDoG58XCA7Civnu58+dMWPbmd8XCA7Civor7c+cWluZ3xcIDsKK+S6pD5qaWFvfFwgOwor6K6pPnLDoG5nfFwgOwor566XPnN1w6BufFwgOwor5YWDPnl1w6FufFwgOwor5YqfPmdvbmd8XCA7CivpnZI+cWluZ3xcIDsKK+euoT5ndcSDbnxcIDsKK+i/nj5sacOhbnxcIDsKK+i/nD55dcSDbnxcIDsKK+W/qz5rdcOgaXxcIDsKK+mZoj55dcOgbnxcIDsKK+WPmD5iacOgbnxcIDsKK+iBlD5sacOhbnxcIDsKK+adgz5xdcOhbnxcIDsKK+W+gD53xINuZ3xcIDsKK+WxlT56aMSDbnxcIDsKK+mihj5sxK1uZ3xcIDsKK+e6oj5nb25nfFwgOwor5ZGoPnpob3V8XCA7Civmt7E+c2hlbnxcIDsKK+epuj5rb25nfFwgOwor55SaPnNow6hufFwgOwor6L27PnFpbmd8XCA7Civoi7E+eWluZ3xcIDsKK+WGmT5ndcOgbnxcIDsKK+S7pD5sw6xuZ3xcIDsKK+aUtj5zaG91fFwgOwor6IS4PmxpxINufFwgOwor6ZKxPnFpw6FufFwgOwor5YWaPmTEg25nfFwgOwor5Y2DPnFpYW58XCA7CivniYc+cGlhbnxcIDsKK+WuuT5yw7NuZ3xcIDsKK+aJvj56aMSDb3xcIDsKK+ermT56aMOgbnxcIDsKK+W9oj54w61uZ3xcIDsKK+aIvz5mw6FuZ3xcIDsKK+mmlj5zaMWPdXxcIDsKK+W9sT55xK1uZ3xcIDsKK+e9kT53xINuZ3xcIDsKK+WFtT5iaW5nfFwgOwor6LCBPnNodcOtfFwgOwor5qChPmppw6BvfFwgOwor6KeCPmd1YW58XCA7CivnvJY+YmlhbnxcIDsKK+WJkT5qacOgbnxcIDsKK+iwgz5kacOgb3xcIDsKK+abvj5jw6luZ3xcIDsKK+WHhj56aMWtbnxcIDsKK+Wboj50dcOhbnxcIDsKK+autT5kdcOgbnxcIDsKK+eyvj5qaW5nfFwgOwor5a6YPmd1YW58XCA7Civnq58+asOsbmd8XCA7Civnhac+emjDoG98XCA7Civmi5s+emhhb3xcIDsKK+WFtD54aW5nfFwgOwor6ZizPnnDoW5nfFwgOwor5oOKPmppbmd8XCA7CivpgIk+eHXEg258XCA7CivmrKI+aHVhbnxcIDsKK+WPpj5sw6xuZ3xcIDsKK+a4rz5nxINuZ3xcIDsKK+aYnz54aW5nfFwgOwor5patPmR1w6BufFwgOwor6ZmIPmNow6lufFwgOwor5YacPm7Ds25nfFwgOwor5b+1Pm5pw6BufFwgOwor5YiaPmdhbmd8XCA7CivmmL4+eGnEg258XCA7Civmtog+eGlhb3xcIDsKK+mAgT5zw7JuZ3xcIDsKK+e0pz5jaG91fFwgOwor5biuPmJhbmd8XCA7Civnur8+eGnDoG58XCA7CivmhL8+eXXDoG58XCA7Civlop4+emVuZ3xcIDsKK+adqD55w6FuZ3xcIDsKK+aWmT5sacOgb3xcIDsKK+W3nj56aG91fFwgOwor6JGXPnpoYW98XCA7CivkuKU+YsOgbmd8XCA7Civku40+csOpbmd8XCA7CivohJo+amnEg298XCA7CivmoIc+Ymlhb3xcIDsKK+eXhT5iw6xuZ3xcIDsKK+Wigz5qw6xuZ3xcIDsKK+i9rz5ydcSDbnxcIDsKK+acnT5jaMOhb3xcIDsKK+aKpD5iZW5nfFwgOwor5pyLPnDDqW5nfFwgOwor5L6bPmdvbmd8XCA7CivkubE+bHXDoG58XCA7CivniLc+eGnDoG98XCA7Civpvpk+bMOzbmd8XCA7CivmmKU+Y2h1bnxcIDsKK+W/mT5tw6FuZ3xcIDsKK+eXmz50w7JuZ3xcIDsKK+ayiT5jaMOpbnxcIDsKK+eBtT5sw61uZ3xcIDsKK+WBnD50w61uZ3xcIDsKK+Wdlz5rdcOgaXxcIDsKK+WGtz5sxJVuZ3xcIDsKK+aAqj5ndcOgaXxcIDsKK+mdmT5qw6xuZ3xcIDsKK+aXgT5ww6FuZ3xcIDsKK+WbrT55dcOhbnxcIDsKK+eZuz5kZW5nfFwgOwor6L6DPmppw6BvfFwgOwor5a6jPnh1YW58XCA7CivloII+dMOhbmd8XCA7CivlpK4+eWFuZ3xcIDsKK+aAgD5odcOhaXxcIDsKK+iQpT55w61uZ3xcIDsKK+Wnkz54w6xuZ3xcIDsKK+WFuz55xINuZ3xcIDsKK+aZrz5qxK1uZ3xcIDsKK+e7tD5ixJVuZ3xcIDsKK+a4kD5jaMOhbnxcIDsKK+iXjz5jw6FuZ3xcIDsKK+aRmD56aGFpfFwgOwor6KeSPmppxINvfFwgOwor556nPnFpw6FvfFwgOwor5bGCPmPDqW5nfFwgOwor6aaGPmd1xINufFwgOwor5b6LPmx1XDrMgHxcIDsKK+eUsD50acOhbnxcIDsKK+eugD5qacSDbnxcIDsKK+WFjT5tacSDbnxcIDsKK+Weiz54w61uZ3xcIDsKK+aNoj5odcOgbnxcIDsKK+a0iz55w6FuZ3xcIDsKK+edoT5zaHXDrHxcIDsKK+W6tz5rYW5nfFwgOwor6K+EPnDDrW5nfFwgOwor6L+9PnpodWl8XCA7Civlupc+ZGnDoG58XCA7Civnjq8+aHXDoW58XCA7CivotoU+Y2hhb3xcIDsKK+WNoD56aGFufFwgOwor5rC4PnnFj25nfFwgOwor5rqQPnl1w6FufFwgOwor5Lq/PnNow6lufFwgOwor6ZmpPnhpxINufFwgOwor6ZKfPmfDoG5nfFwgOwor6K6/PmbEg25nfFwgOwor5Ly4PnNoZW58XCA7CivpmZA+eGnDoG58XCA7Civot7M+dGnDoG98XCA7Civnu4M+bGnDoG58XCA7Civlubg+eMOsbmd8XCA7CivmlYg+eGnDoG98XCA7CivlsIE+ZmVuZ3xcIDsKK+aUuz5nb25nfFwgOwor6aG2PmTErW5nfFwgOwor5a6BPm7DrW5nfFwgOwor6ZiyPmbDoW5nfFwgOwor5oqTPnpodWF8XCA7Civpobo+c2jDuW58XCA7CivoraY+asStbmd8XCA7CivmoqY+bcOobmd8XCA7CivlloQ+c2jDoG58XCA7Civokpk+bWVuZ3xcIDsKK+elqD5wacOgb3xcIDsKK+Wdmj5qaWFufFwgOwor56uvPmR1YW58XCA7Civnjoc+bHVcOsyAfFwgOwor5o6JPmRpw6BvfFwgOwor5o6IPnNow7J1fFwgOwor5a6IPnNoxY91fFwgOwor56evPmNow6hufFwgOwor5Y6/Pnhpw6BufFwgOwor5bqtPnTDrW5nfFwgOwor5b+YPnfDoG5nfFwgOwor5rSyPnpob3V8XCA7Civmnb4+c29uZ3xcIDsKK+Wdjz5odcOgaXxcIDsKK+mCkz5kw6huZ3xcIDsKK+mynD54aWFufFwgOwor55+tPmR1xINufFwgOwor55WlPmx1XDrDqHxcIDsKK+aKlz5rw6BuZ3xcIDsKK+edmz5qaW5nfFwgOwor57q3PmLEg25nfFwgOwor6ZSAPnhpYW98XCA7Civlrpc+em9uZ3xcIDsKK+i1tT56aMOgb3xcIDsKK+eBrz5kZW5nfFwgOwor5bOwPmZlbmd8XCA7CivmrL4+a3XEg258XCA7CivmtKo+aMOzbmd8XCA7CivorqI+ZMOsbmd8XCA7CivplYc+emjDqG58XCA7Civml4U+bHVcOsyGfFwgOwor6Z2WPmrDrG5nfFwgOwor55SzPnNoZW58XCA7Civov44+ecOtbmd8XCA7CivkuIE+ZGluZ3xcIDsKK+WuoT5zaMSVbnxcIDsKK+mBjT5iacOgbnxcIDsKK+ahjD56aHVvfFwgOwor5pmTPnhpxINvfFwgOwor5byEPmzDsm5nfFwgOwor5LqhPnfDoW5nfFwgOwor5qGlPnFpw6FvfFwgOwor6ZeqPnNoxINufFwgOwor5YqyPmrDrG5nfFwgOwor5oGQPmvFj25nfFwgOwor5pWsPmrDrG5nfFwgOwor55uRPmppYW58XCA7CivljoU+dGluZ3xcIDsKK+mchz56aMOobnxcIDsKK+WGsD5iaW5nfFwgOwor6YaSPnjErW5nfFwgOwor5bqGPnHDrG5nfFwgOwor56GsPnnDrG5nfFwgOwor5ZSuPnNow7J1fFwgOwor56ulPnTDs25nfFwgOwor57yTPmh1xINufFwgOwor54OnPnNoYW98XCA7Civmjqc+a8Oybmd8XCA7Civnr4c+cGlhbnxcIDsKK+a0nj5kw7JuZ3xcIDsKK+iNoz5yw7NuZ3xcIDsKK+aHgj5kxY9uZ3xcIDsKK+aLpT55xY9uZ3xcIDsKK+eMrj54acOgbnxcIDsKK+aoqj5ow6luZ3xcIDsKK+WBpT5qacOgbnxcIDsKK+etvj5xaWFufFwgOwor6JOJPnLDs25nfFwgOwor5r2uPmNow6FvfFwgOwor5ZyGPnl1w6FufFwgOwor5Y23Pmp1xINufFwgOwor5aaZPm1pw6BvfFwgOwor5rWqPmzDoG5nfFwgOwor5oq9PmNob3V8XCA7CivlgY8+cGlhbnxcIDsKK+e6tT5zxY9uZ3xcIDsKK+iIqj5ow6FuZ3xcIDsKK+aLsz5xdcOhbnxcIDsKK+WUkD50w6FuZ3xcIDsKK+ajgD5qacSDbnxcIDsKK+Wuqz5nb25nfFwgOwor6KKBPnl1w6FufFwgOwor54GtPmzDrG5nfFwgOwor5Y+sPnNow6BvfFwgOwor54ybPm3ElW5nfFwgOwor5a69Pmt1YW58XCA7Civnu40+asOsbmd8XCA7Civlhbg+ZGnEg258XCA7CivlnIg+anVhbnxcIDsKK+S4sD5mZW5nfFwgOwor5oyRPnRpYW98XCA7Civogqk+amlhbnxcIDsKK+WHjz5qacSDbnxcIDsKK+mSiD56aGVufFwgOwor56uePmrDrG5nfFwgOwor5oy6PnTErW5nfFwgOwor5a6LPnPDsm5nfFwgOwor6ZKiPmdhbmd8XCA7CivmgoQ+cWnEg298XCA7CivkuZQ+cWnDoW98XCA7Civku4c+Y2jDs3V8XCA7CivlkLk+Y2h1aXxcIDsKK+iejT5yw7NuZ3xcIDsKK+WHgD5qw6xuZ3xcIDsKK+S7mT54aWFufFwgOwor5benPnFpxINvfFwgOwor6Zu2PmzDrW5nfFwgOwor6I2hPmTDoG5nfFwgOwor54+NPnpoZW58XCA7Civli4c+ecWPbmd8XCA7CivnqI4+c2h1w6x8XCA7Civlg6c+c2VuZ3xcIDsKK+mUiz5mZW5nfFwgOwor5oOvPmd1w6BufFwgOwor5YetPnDDrW5nfFwgOwor5YagPmd1YW58XCA7CivnorA+cMOobmd8XCA7CivlgL4+cWluZ3xcIDsKK+Wwlj5qaWFufFwgOwor5Lu/PmbEg25nfFwgOwor6aOYPnBpYW98XCA7Civmmag+Y2jDqW58XCA7Civnuq8+Y2jDum58XCA7CivnvJg+eXXDoW58XCA7Civlhqw+ZG9uZ3xcIDsKK+mDjj5sw6FuZ3xcIDsKK+mXsj54acOhbnxcIDsKK+mVnD5qw6xuZ3xcIDsKK+e+ij55w6FuZ3xcIDsKK+mpuz54aWFvfFwgOwor6JCNPnDDrW5nfFwgOwor5YiRPnjDrW5nfFwgOwor5YekPmbDqG5nfFwgOwor5a2UPmvFj25nfFwgOwor6KemPmjDs25nfFwgOwor5oGLPmxpw6BufFwgOwor6ZqGPmxvbmd8XCA7CivokKc+eGlhb3xcIDsKK+aAqD55dcOgbnxcIDsKK+m+hD5sw61uZ3xcIDsKK+S7sD55xINuZ3xcIDsKK+aYoD55w6xuZ3xcIDsKK+iFvj50w6luZ3xcIDsKK+eojT5zaGFvfFwgOwor5bKXPmfEg25nfFwgOwor5oyhPmTEg25nfFwgOwor5aWJPmbDqG5nfFwgOwor5pyXPmzEg25nfFwgOwor5YW8PmppYW58XCA7Civlip0+cXXDoG58XCA7Civnm4g+ecOtbmd8XCA7Civpmbc+eGnDoG58XCA7CivpuKM+bcOtbmd8XCA7CivlgJg+dMSDbmd8XCA7CivmjK8+emjDqG58XCA7CivkuKc+c2FuZ3xcIDsKK+eEpj5qaWFvfFwgOwor5YeMPmzDrW5nfFwgOwor6aqXPnBpw6BufFwgOwor55aXPmxpw6FvfFwgOwor5bCYPmNow6lufFwgOwor6Lq6PnTEg25nfFwgOwor5b2qPmJpYW98XCA7CivkupU+asStbmd8XCA7Civmsao+d2FuZ3xcIDsKK+a8gj5waWFvfFwgOwor6IGKPmxpw6FvfFwgOwor5YedPm7DrW5nfFwgOwor5b2tPnDDqW5nfFwgOwor5YyGPmNvbmd8XCA7Civmj48+bWnDoW98XCA7CivmhIE+Y2jDs3V8XCA7Civmtow+ecWPbmd8XCA7CivnjoQ+eHXDoW58XCA7CivovbA+aG9uZ3xcIDsKK+WluD5qaWFufFwgOwor5oCcPmxpw6FufFwgOwor6bifPm5pxINvfFwgOwor6YKmPmJhbmd8XCA7Civogao+Y29uZ3xcIDsKK+i+qT5iacOgbnxcIDsKK+eTtj5ww61uZ3xcIDsKK+ayiD5jaMOpbnxcIDsKK+aeqz5mZW5nfFwgOwor6IejPmNow6lufFwgOwor5o+0Pnl1w6FufFwgOwor6YW4PnN1YW58XCA7Civnm58+bcOpbmd8XCA7Civog5Y+cMOgbmd8XCA7Civlk7w+aGVuZ3xcIDsKK+eYpj5zaMOydXxcIDsKK+eurT5qacOgbnxcIDsKK+a9nD5xacOhbnxcIDsKK+m4vz5ow7NuZ3xcIDsKK+e7qT5jaGFvfFwgOwor5LqtPnTDrW5nfFwgOwor54u8PmzDoW5nfFwgOwor6IiwPmppw6BufFwgOwor54m1PnFpYW58XCA7Civnlq8+ZmVuZ3xcIDsKK+mipD56aMOgbnxcIDsKK+ihqz5zaGFufFwgOwor6ImwPmppYW58XCA7Civoi40+Y2FuZ3xcIDsKK+aXiz54dcOhbnxcIDsKK+ahkT5zYW5nfFwgOwor6I6yPmxpw6FufFwgOwor6ZK7Pnp1YW58XCA7Civlro8+aMOzbmd8XCA7Civlubs+aHXDoG58XCA7Civovr0+bGnDoW98XCA7CivmgqM+aHXDoG58XCA7CivooaE+aMOpbmd8XCA7CivkuJE+Y2jFj3V8XCA7CivmmpY+bnXEg258XCA7CivmtZM+bsOzbmd8XCA7CivplK4+amnDoG58XCA7Civoh60+Y2jDsnV8XCA7CivoirM+ZmFuZ3xcIDsKK+Wegj5jaHXDrXxcIDsKK+aNiT56aHVvfFwgOwor5oGtPmdvbmd8XCA7Civms4k+cXXDoW58XCA7Civop4g+amnDoG98XCA7CivohI8+emFuZ3xcIDsKK+eWvD50w6luZ3xcIDsKK+mTnD50w7NuZ3xcIDsKK+ahoz5kxINuZ3xcIDsKK+iLlz5tacOhb3xcIDsKK+afhD5ixK1uZ3xcIDsKK+iInz56aG91fFwgOwor56aFPnNow6BufFwgOwor5pWyPnFpYW98XCA7Civnrbk+Y2jDs3V8XCA7CivmtYU+cWnEg258XCA7Civmn7Q+Y2jDoWl8XCA7Civpm5U+ZGlhb3xcIDsKK+Wvvz5zaMOydXxcIDsKK+iRoz5kxY9uZ3xcIDsKK+mJtD5qacOgbnxcIDsKK+WItz5zaHVhfFwgOwor5o2QPmp1YW58XCA7CivotK8+Z3XDoG58XCA7Civmrr8+ZGnDoG58XCA7Civov4E+cWlhbnxcIDsKK+merT5iaWFufFwgOwor6IyrPm3DoW5nfFwgOwor6YCiPmbDqW5nfFwgOwor5ZyzPnpow6hufFwgOwor6LiqPmNodcOyfFwgOwor5LibPmPDs25nfFwgOwor5ZC1PmNoxINvfFwgOwor6LShPmfDsm5nfFwgOwor6LWiPmfDsm5nfFwgOwor5qOSPmLDoG5nfFwgOwor5oGSPmjDqW5nfFwgOwor6LSkPnhpw6FufFwgOwor5ouGPmNoYWl8XCA7CivnvKA+Y2jDoW58XCA7CivnvJ0+ZsOpbmd8XCA7CivogpY+eGnDoG98XCA7Civngrw+bGnDoG58XCA7Civlrqo+eGnDoG58XCA7Civlupk+bWnDoG98XCA7Civlhq8+ZsOpbmd8XCA7CivllKQ+aHXDoG58XCA7CivnlJw+dGnDoW58XCA7Civlurg+eW9uZ3xcIDsKK+m5jz5ww6luZ3xcIDsKK+eOsj5sw61uZ3xcIDsKK+e7vD56w7JuZ3xcIDsKK+WrjD54acOhbnxcIDsKK+WJij54aWFvfFwgOwor5omUPnJlbmd8XCA7Civmgqw+eHXDoW58XCA7Civlu7c+dMOtbmd8XCA7CivnrLw+bMOzbmd8XCA7CivpoqA+ZGlhbnxcIDsKK+aJhz5zaGFufFwgOwor5ZSHPmNow7pufFwgOwor5o2nPnDElW5nfFwgOwor5YakPnl1YW58XCA7CivnmrE+emjDsnV8XCA7CivpgaM+cWnEg258XCA7Civnv4E+d2VuZ3xcIDsKK+mVlj5iaWFvfFwgOwor5bGPPmLErW5nfFwgOwor5qOJPm1pw6FufFwgOwor5a2fPm3DqG5nfFwgOwor6JGsPnrDoG5nfFwgOwor5re7PnRpYW58XCA7CivlhYY+emjDoG98XCA7CivmrKA+cWnDoG58XCA7CivpkpM+ZGnDoG98XCA7CivlkIo+ZGnDoG98XCA7Civloas+dGnDoW58XCA7CivmioQ+Y2hhb3xcIDsKK+eeqj5kw6huZ3xcIDsKK+WJqj5qacSDbnxcIDsKK+WAuj56aMOgaXxcIDsKK+aZtj5qaW5nfFwgOwor5Y2TPnpodcOzfFwgOwor57OWPnTDoW5nfFwgOwor57u1Pm1pw6FufFwgOwor5aaoPmbDoW5nfFwgOwor54+KPnNoYW58XCA7Civlmrc+csSDbmd8XCA7Civnm7I+bcOhbmd8XCA7Civovqg+YmnDoG58XCA7Civms7M+ecWPbmd8XCA7CivlroU+emjDoWl8XCA7CivohoA+YsSDbmd8XCA7Civpoog+Z8SVbmd8XCA7Civot7U+amnDoG58XCA7Civovb8+amnDoG98XCA7CivlqIc+amlhb3xcIDsKK+a9hz54aWFvfFwgOwor6aKCPnLDs25nfFwgOwor5p2tPmjDoW5nfFwgOwor556sPnNow7lufFwgOwor5LmWPmd1YWl8XCA7CivngpI+Y2jEg298XCA7Civppbw+YsStbmd8XCA7Civpkok+ZGluZ3xcIDsKK+i1oD56w6huZ3xcIDsKK+WThD5ob25nfFwgOwor6ZODPmzDrW5nfFwgOwor6bmwPnlpbmd8XCA7CivmrYk+cWnDoG58XCA7Civnm68+ZGluZ3xcIDsKK+WFvT5zaMOydXxcIDsKK+e9qT56aMOgb3xcIDsKK+W1qT5zb25nfFwgOwor6Zm1PmzDrW5nfFwgOwor6JyCPmZlbmd8XCA7Civlu4k+bGnDoW58XCA7CivpqoQ+amlhb3xcIDsKK+i+sD5jaMOpbnxcIDsKK+WdkT5rZW5nfFwgOwor55ygPm1pw6FufFwgOwor5a2dPnhpw6BvfFwgOwor6Jm5PmjDs25nfFwgOwor5YuJPm1pxINufFwgOwor5oWOPnNow6hufFwgOwor5papPnpoxINufFwgOwor5o6gPmx1XDrDqHxcIDsKK+mDij5qaWFvfFwgOwor6byOPmTErW5nfFwgOwor5Ya7PmTDsm5nfFwgOwor5qGQPnTDs25nfFwgOwor6ImHPnTErW5nfFwgOwor6LCmPnFpYW58XCA7Civlsq0+bMOtbmd8XCA7CivmobY+dMWPbmd8XCA7Civll5M+c8SDbmd8XCA7CivluJg+bGnDoW58XCA7Civku5M+Y2FuZ3xcIDsKK+aLkD5ndcSDaXxcIDsKK+e7kT5ixINuZ3xcIDsKK+iNkD5qacOgbnxcIDsKK+W7ij5sw6FuZ3xcIDsKK+ivij56aMSVbnxcIDsKK+ajmj5ww6luZ3xcIDsKK+aOgD54aWFufFwgOwor562SPnTFj25nfFwgOwor56eSPm1pxINvfFwgOwor5rK+PnpoYW58XCA7Civlup4+cMOhbmd8XCA7CivliLg+cXXDoG58XCA7Civotp8+dMOgbmd8XCA7CivngYw+Z3XDoG58XCA7CivlpoQ+d8Ogbmd8XCA7Civlrpk+emjDsnV8XCA7CivnvZA+Z3XDoG58XCA7CivotoE+Y2jDqG58XCA7CivlqbQ+eWluZ3xcIDsKK+i6rD5nb25nfFwgOwor5Y+uPmRpbmd8XCA7CivmmbQ+ccOtbmd8XCA7Civmt64+aHXDoWl8XCA7Civml7o+d8Ogbmd8XCA7Civnqpw+Y3XDoG58XCA7Civlr6g+emjDoGl8XCA7CivmmK0+emhhb3xcIDsKK+Wbij5uw6FuZ3xcIDsKK+iTrD5ww6luZ3xcIDsKK+i0sT5qacOgbnxcIDsKK+WYsj5jaMOhb3xcIDsKK+WCjT5iYW5nfFwgOwor57qyPmdhbmd8XCA7CivogJU+Z2VuZ3xcIDsKK+iIsT5jYW5nfFwgOwor56CwPnBlbmd8XCA7CivloZg+dMOhbmd8XCA7CivnuqQ+eGlhbnxcIDsKK+mTvj5sacOgbnxcIDsKK+aLsT5nxY9uZ3xcIDsKK+mTrT5tw61uZ3xcIDsKK+a3sz5jaMO6bnxcIDsKK+amnD5ixINuZ3xcIDsKK+e+oT54acOgbnxcIDsKK+WNvz5xaW5nfFwgOwor5ZanPnh1YW58XCA7CivlsaU+bHVcOsyGfFwgOwor5p6JPnfEg25nfFwgOwor6KGsPmNow6hufFwgOwor5YezPmTDqG5nfFwgOwor57yFPm1pxINufFwgOwor5bymPnhpw6FufFwgOwor5YCmPmp1w6BufFwgOwor6YWsPmNow7N1fFwgOwor5ZKSPnpow7J1fFwgOwor5bSpPmJlbmd8XCA7Civpobc+ccStbmd8XCA7CivkvqY+emhlbnxcIDsKK+mZlT5zaMSDbnxcIDsKK+iAuD5zxY9uZ3xcIDsKK+eqhD56aMSDaXxcIDsKK+eXkj55xINuZ3xcIDsKK+aypz5jYW5nfFwgOwor6LSePnpoZW58XCA7CivooKI+Y2jFrW58XCA7CivpgI0+eGlhb3xcIDsKK+WDmj5sacOhb3xcIDsKK+mbgD5xaWFvfFwgOwor6ICNPnNodcSDfFwgOwor5p6VPnpoxJVufFwgOwor5o2hPmppxINufFwgOwor5pymPm3DqW5nfFwgOwor5623Pmt1w6BpfFwgOwor57y4Pmdhbmd8XCA7CivlvJM+Z29uZ3xcIDsKK+eIqj56aHXEg3xcIDsKK+iKkj5tw6FuZ3xcIDsKK+e8tD5qacSDb3xcIDsKK+WTqD5zaMOgb3xcIDsKK+milj55xK1uZ3xcIDsKK+a3gD5kacOgbnxcIDsKK+WavD5qacOhb3xcIDsKK+mqpD56aMOydXxcIDsKK+iLuT5ww61uZ3xcIDsKK+aZkj5zaMOgaXxcIDsKK+aLoj5sxY9uZ3xcIDsKK+iDpz5sw7NuZ3xcIDsKK+iDtj5qaWFvfFwgOwor5LmSPnBpbmd8XCA7Civorr0+ZmVuZ3xcIDsKK+aIsz5jaHVvfFwgOwor5oujPmppxINufFwgOwor6IC/PmfElW5nfFwgOwor5bu/Pm5pw6BufFwgOwor5qO6Pmd1YW58XCA7CivlnaA+emh1w6x8XCA7Civlhog+Z2FuZ3xcIDsKK+iOuT55w61uZ3xcIDsKK+ihlD54acOhbnxcIDsKK+eUuD5kacOgbnxcIDsKK+i0rD5iacSDbnxcIDsKK+aEoz5sw6huZ3xcIDsKK+aQhT5qacSDb3xcIDsKK+eClT5rw6BuZ3xcIDsKK+iFpT54aW5nfFwgOwor6JekPnTDqW5nfFwgOwor5q28PmppYW58XCA7Civojr0+bcSDbmd8XCA7Civng6s+dMOgbmd8XCA7Civpkp4+Y2hhb3xcIDsKK+Wdij5mYW5nfFwgOwor566rPnhpYW98XCA7Civll6E+d2VuZ3xcIDsKK+a6hT5qacOgbnxcIDsKK+agiz5kw7JuZ3xcIDsKK+emgD5ixK1uZ3xcIDsKK+eDgT5zaHXDsnxcIDsKK+WOrj5xaWFufFwgOwor57KYPm5pw6FufFwgOwor5pyUPnNodcOyfFwgOwor5ZK4Pnhpw6FufFwgOwor57q6PmbEg25nfFwgOwor6JmQPm51XDrDqHxcIDsKK+mUpD5jaHXDrXxcIDsKK+WotD54acOhbnxcIDsKK+eKrD5xdcSDbnxcIDsKK+WGpT5tw61uZ3xcIDsKK+ebjz56aMSDbnxcIDsKK+eElT5odcOgbnxcIDsKK+W8mD5ow7NuZ3xcIDsKK+aThT5zaMOgbnxcIDsKK+inhT5jaGFufFwgOwor5rCTPm3DoW5nfFwgOwor5oCmPnBlbmd8XCA7Civoqbk+emhhbnxcIDsKK+aJgT5waWFufFwgOwor5oW3Pmthbmd8XCA7Civnr7c+cMOpbmd8XCA7Civnu7g+Y2jDs3V8XCA7Civlr6U+bGnDoW98XCA7Civlnqs+ZGnDoG58XCA7CivkuZM+cGFuZ3xcIDsKK+iGmz50w6FuZ3xcIDsKK+mXtT5rYW5nfFwgOwor55CiPnpodcOzfFwgOwor6ZiuPnJ1xINufFwgOwor5L+PPnFpw6BvfFwgOwor5qWePmzDqW5nfFwgOwor5ouZPnpodW98XCA7CivlpaA+ZGnDoG58XCA7Civogpg+emjFj3V8XCA7Civohqg+cMOpbmd8XCA7Civlo6Q+csSDbmd8XCA7CivmuJc+c2jDqG58XCA7Civovak+eHVhbnxcIDsKK+iLkT55dcOgbnxcIDsKK+W3qT5nxY9uZ3xcIDsKK+eypT56aG91fFwgOwor5paLPnpoYWl8XCA7Civmlp8+emhlbnxcIDsKK+aioj5zaGFvfFwgOwor6ZOFPnFpYW58XCA7Civnu5I+csOzbmd8XCA7CivplLs+ZHXDoG58XCA7CivosLQ+cWnEg258XCA7CivmsoU+eXXDoW58XCA7CivlrrU+eGlhb3xcIDsKK+ePkT5sw7NuZ3xcIDsKK+WSmj5kb25nfFwgOwor5LqoPmhlbmd8XCA7Civmt4w+dMSDbmd8XCA7CivmiZs+Z2FuZ3xcIDsKK+W9pD50w7NuZ3xcIDsKK+awpz55xINuZ3xcIDsKK+eQkD5ixK1uZ3xcIDsKK+eLoT5qacSDb3xcIDsKK+Wptz50w61uZ3xcIDsKK+a4uj5tacSDb3xcIDsKK+W1jD5xacOgbnxcIDsKK+memD5xacOgb3xcIDsKK+WQrT5ow6FuZ3xcIDsKK+e7sD5jaHXDsnxcIDsKK+e7nj5qacSDb3xcIDsKK+i9tD56aMOzdXxcIDsKK+mCtT5zaMOgb3xcIDsKK+aGjj56ZW5nfFwgOwor56qNPnFpw6BvfFwgOwor5Z2qPnDDrW5nfFwgOwor55irPnNow6hufFwgOwor5L2jPnlvbmd8XCA7CivljbU+bHXEg258XCA7CivnkIU+bMOhbmd8XCA7CivmmLw+emjDsnV8XCA7CivlhaI+amluZ3xcIDsKK+eFjj5qaWFufFwgOwor556FPmNoxY91fFwgOwor54aUPnLDs25nfFwgOwor57uFPnNoZW58XCA7CivouaY+YsOobmd8XCA7CivogYs+bMOzbmd8XCA7Civnhb0+c2hhbnxcIDsKK+WRuz5zaGVufFwgOwor57+YPnFpw6FvfFwgOwor5p2PPnjDrG5nfFwgOwor6JmUPnFpw6FufFwgOwor5ounPm7DrW5nfFwgOwor54OYPmhvbmd8XCA7CivliKA+c2hhbnxcIDsKK+mchD54aWFvfFwgOwor55y3Pmp1w6BufFwgOwor6ZiQPmNoxINufFwgOwor6K68PnPDsm5nfFwgOwor5bStPnpoxINufFwgOwor5Ly2PmzDrW5nfFwgOwor5beiPmNow6FvfFwgOwor5ZW3Pmxhbmd8XCA7Civkv60+amnEg258XCA7CivmurY+csOzbmd8XCA7CivmuZs+emjDoG58XCA7Civnv6k+cGlhbnxcIDsKK+Waoz54aWFvfFwgOwor55CbPmNoZW58XCA7CivmtYo+emh1w7N8XCA7CivmnaA+Z2FuZ3xcIDsKK+eehD5tacOhb3xcIDsKK+aSqT5saWFvfFwgOwor54y/Pnl1w6FufFwgOwor5oygPmTDoG5nfFwgOwor54G8PnpodcOzfFwgOwor6ZKwPmppxINufFwgOwor5qSSPmppYW98XCA7Civlu5Y+bGnDoG98XCA7CivnlK0+YsOpbmd8XCA7Civov6I+dGnDoW98XCA7CivmlJg+csSDbmd8XCA7CivnvI4+ZHXDoG58XCA7Civnn6s+amnEg298XCA7CivnkZs+eWluZ3xcIDsKK+eMqT54aW5nfFwgOwor5ZKZPmzDs25nfFwgOwor5ZeUPmNoZW58XCA7CivouIw+Y2jDs3V8XCA7Civnu7c+YmVuZ3xcIDsKK+e8gD5jaHXDsnxcIDsKK+Wptj5zaMSVbnxcIDsKK+i5rD5kw6huZ3xcIDsKK+WLuj5zaMOhb3xcIDsKK+eeuz56aGFufFwgOwor6LiKPnnFj25nfFwgOwor55ypPnh1w6BufFwgOwor6L+4PmLDqG5nfFwgOwor5LiZPmLErW5nfFwgOwor6aW6PmppxINvfFwgOwor6ZOyPmNoxINufFwgOwor5pWbPmxpw6BufFwgOwor5o2FPnTFj25nfFwgOwor5ruVPnTDqW5nfFwgOwor55y6PnRpw6BvfFwgOwor5qOVPnpvbmd8XCA7Civnu6I+anXDoG58XCA7CivlqJ8+anVhbnxcIDsKK+iQjD5tw6luZ3xcIDsKK+WTvT5nxJVuZ3xcIDsKK+eDuT5wZW5nfFwgOwor54KKPmNodWl8XCA7Civlib8+Y2hhb3xcIDsKK+eCqz54dcOgbnxcIDsKK+mUpT56aHVpfFwgOwor6ZSIPmppw6BufFwgOwor5YiBPmRpYW98XCA7CivkuqI+a8Ogbmd8XCA7CivlhpU+bWnEg258XCA7CivngJs+ecOtbmd8XCA7Civlupo+Z2VuZ3xcIDsKK+WzrT5xacOgb3xcIDsKK+ejhT5iw6BuZ3xcIDsKK+mbjT55b25nfFwgOwor5YCpPnFpw6BufFwgOwor6JKcPnN1w6BufFwgOwor54KzPmLErW5nfFwgOwor5oOYPnfEg25nfFwgOwor6LWDPnphbmd8XCA7Civmp5A+aHXDoWl8XCA7CivlqYo+YmnEg298XCA7Civovpc+emjEg258XCA7Civnp4k+YsStbmd8XCA7CivkvqU+amnEg298XCA7CivppoU+eGnDoG58XCA7CivoooU+bmnEg298XCA7Civlvbc+ZsSDbmd8XCA7Civoh7s+emhlbnxcIDsKK+aosT55aW5nfFwgOwor5b+PPmNow6BufFwgOwor56qWPmppw6BvfFwgOwor56K+Pm5pxINufFwgOwor6aaLPmNow6FufFwgOwor5ry+PnnDoG5nfFwgOwor56enPnlhbmd8XCA7Civorqo+c2jDoG58XCA7Civphoc+Y2jDum58XCA7CivmhpQ+cWnDoW98XCA7CivnoZ0+eGlhb3xcIDsKK+i5rT5jw6luZ3xcIDsKK+m+mj5nb25nfFwgOwor54uePmjEg25nfFwgOwor57ytPmxpw6FvfFwgOwor5pCAPmNoYW58XCA7Civnpa8+emhlbnxcIDsKK+iInD5zaMO5bnxcIDsKK+mCoj54w61uZ3xcIDsKK+anmz5qacOgbnxcIDsKK+eVtD5jaMOzdXxcIDsKK+iIlD50acSDbnxcIDsKK+aDuj54aW5nfFwgOwor556fPnBpxINvfFwgOwor6J2JPmNow6FufFwgOwor5q+hPnpoYW58XCA7Civmiqg+cGVuZ3xcIDsKK+aDtD56aHXDrHxcIDsKK+aTjj5xw61uZ3xcIDsKK+iViT5qaWFvfFwgOwor5rOTPmjDs25nfFwgOwor5o2OPnNoYW98XCA7Civmvo4+cMOpbmd8XCA7CivmjbY+Y2h1w618XCA7Civmu4c+ZGlhbnxcIDsKK+iCvj5zaMOobnxcIDsKK+m4sz55dWFufFwgOwor5oiOPnLDs25nfFwgOwor6ZStPmTDrG5nfFwgOwor5pSlPnp1w6BufFwgOwor5ouIPm5pw6FufFwgOwor5p+sPmppxINufFwgOwor55eqPmh1w6BufFwgOwor5oGZPnnDoG5nfFwgOwor6LKCPmRpYW98XCA7CivojLg+csOzbmd8XCA7CivlnqM+eXXDoW58XCA7Civmo7E+bMOpbmd8XCA7CivogYY+bMOtbmd8XCA7Civnmas+ZGlhbnxcIDsKK+ailz5nxJVuZ3xcIDsKK+aDhj5jaMOzdXxcIDsKK+iChz56aMOgb3xcIDsKK+iPsT5sw61uZ3xcIDsKK+ekgT5qaWFvfFwgOwor5biaPnpoxY91fFwgOwor5pK1Pm5pxINufFwgOwor5q6DPnlhbmd8XCA7Civmgaw+dGnDoW58XCA7Civmtp8+bGnDoW58XCA7CivplZE+YsOgbmd8XCA7CivpuK8+eWFuZ3xcIDsKK+Wrlj5wacOhb3xcIDsKK+iItz54acOhbnxcIDsKK+ahkz5odcOhbnxcIDsKK+akjj5jaHXDrXxcIDsKK+mVoz5sacOhb3xcIDsKK+mFjD56aHXDs3xcIDsKK+iNpz55w61uZ3xcIDsKK+e+uT5nZW5nfFwgOwor6Ji4Pnpow6BufFwgOwor5oOmPmRpw6BufFwgOwor5rKlPmZlbmd8XCA7CivosKQ+YsOgbmd8XCA7CivnrZs+c2hhaXxcIDsKK+aSgj5sacOgb3xcIDsKK+iGuj55aW5nfFwgOwor5oasPmrErW5nfFwgOwor6ZKzPnFpw6FufFwgOwor56+hPmN1w6BufFwgOwor55eKPnF1w6FufFwgOwor6ZixPmrErW5nfFwgOwor5oKaPnPFj25nfFwgOwor6Le3PnFpYW98XCA7Civlp5c+c2hhbnxcIDsKK+mSlz5jaGFpfFwgOwor5qOgPnTDoW5nfFwgOwor5ZCuPnNoxa1ufFwgOwor5riyPnh1w6BufFwgOwor5Yy+PmJpxINufFwgOwor546uPmRpYW58XCA7Civlm5Q+bmFuZ3xcIDsKK+iXkD5tacSDb3xcIDsKK+W3hT5kaWFufFwgOwor5YeLPmRpYW98XCA7Civot6Q+amlhb3xcIDsKK+i+hD5uacSDbnxcIDsKK+aHtT5txJVuZ3xcIDsKK+myuD5qaW5nfFwgOwor56y6PmppYW58XCA7CivmsYA+dGluZ3xcIDsKK+iGsz5zaMOgbnxcIDsKK+eyvT56w7JuZ3xcIDsKK+mFtT5qacOgb3xcIDsKK+ictz5xdcOhbnxcIDsKK+eooD5jaMOzdXxcIDsKK+i3mj5zaGFufFwgOwor5rK8PnpoxINvfFwgOwor56KxPmppxINufFwgOwor6ZWwPmxpw6FufFwgOwor5oK7PnjDrG5nfFwgOwor6IWGPnRpxINufFwgOwor5raOPnhpw6FufFwgOwor55OiPnBpw6FvfFwgOwor56q/PmzDs25nfFwgOwor6I6ePmd1YW58XCA7CivojYM+cXXDoW58XCA7CivmjoI+ZGlhbnxcIDsKK+iQpj55w61uZ3xcIDsKK+WPvD5kaWFvfFwgOwor55SsPnnFj25nfFwgOwor6I66Pnlpbmd8XCA7CivmqLU+cWnDoW98XCA7CivotZM+Z2VuZ3xcIDsKK+aerT54aWFvfFwgOwor5YOuPnTDs25nfFwgOwor6LWYPnpodcOsfFwgOwor5qS/PmNodW58XCA7Civpkoo+bGnEg298XCA7Civmtqc+amnDoG58XCA7Civohbo+eGnDoG58XCA7Civng6g+dGluZ3xcIDsKK+awoj5xaW5nfFwgOwor5rGVPnNow6BufFwgOwor6J2ZPmJpYW58XCA7Civlk64+eGlhb3xcIDsKK+Wzkj50w7NuZ3xcIDsKK+iEkz5uw7NuZ3xcIDsKK+W0hj5rb25nfFwgOwor6LCPPmppw6BufFwgOwor5o2LPmx1XDrMhnxcIDsKK+S9rz55w6FuZ3xcIDsKK+Wupj5odcOgbnxcIDsKK+eShz54dcOhbnxcIDsKK+a9uj5jaMOhbnxcIDsKK+S/kT55xY9uZ3xcIDsKK+W/sT5jaMOpbnxcIDsKK+iFvD5tacSDbnxcIDsKK+iQpD55w61uZ3xcIDsKK+eTrj53w6huZ3xcIDsKK+agiD56aMOgbnxcIDsKK+iZuz5tw6luZ3xcIDsKK+iajD5iw6BuZ3xcIDsKK+aNuz5uacSDbnxcIDsKK+S9vD5qacSDb3xcIDsKK+iwhj56aHVufFwgOwor5ZOdPm7Ds25nfFwgOwor6Z+2PnNow6FvfFwgOwor6JqjPmdvbmd8XCA7CivmmoQ+eHVhbnxcIDsKK+iegz5ww6FuZ3xcIDsKK+WvsD5odcOhbnxcIDsKK+aclT56aMOobnxcIDsKK+aQqj50w6FuZ3xcIDsKK+Wzpj5sdcOhbnxcIDsKK+mqgT54aWFvfFwgOwor6IyXPm3DrW5nfFwgOwor6J++PmNow6FufFwgOwor6ZWvPnpodcOzfFwgOwor6ayfPmh1w6FufFwgOwor572CPnlpbmd8XCA7Civms54+bsOsbmd8XCA7CivpmYc+bMWPbmd8XCA7CivpnIY+dMOtbmd8XCA7CivnhJg+Y2jDs3V8XCA7CivnvIg+bWnEg298XCA7Civmkqw+cWnDoG98XCA7CivllYQ+emh1w7N8XCA7Civoub8+Y3VhbnxcIDsKK+mTvz5rZW5nfFwgOwor57ylPnBpxINvfFwgOwor5L6sPm7Ds25nfFwgOwor5YaXPnLFj25nfFwgOwor5qaVPnLDs25nfFwgOwor6ZewPmppw6BufFwgOwor6IKqPmbDoW5nfFwgOwor55SEPnpoZW58XCA7Civns6A+a2FuZ3xcIDsKK+WVnD5jaHXDsnxcIDsKK+aihj5iYW5nfFwgOwor57+OPmzDrW5nfFwgOwor6LidPmh1w6FpfFwgOwor6KOGPmRhbmd8XCA7Civnjrc+ZGnDoG58XCA7CivmsK8+bHVcOsyAfFwgOwor54eOPmxpw6FvfFwgOwor6J+SPm3Eg25nfFwgOwor6L6VPnl1w6FufFwgOwor6bmDPmp1YW58XCA7Civpk5s+ZGFuZ3xcIDsKK+i/sz5qw6xuZ3xcIDsKK+iMjj5qaW5nfFwgOwor5Z+CPmfElW5nfFwgOwor5ZitPnBlbmd8XCA7Civmgbg+anXDoG58XCA7CivnnrM+dMOzbmd8XCA7Civpuao+amlhb3xcIDsKK+iGuz5zaGFufFwgOwor5oCCPnPFj25nfFwgOwor556RPm3DrW5nfFwgOwor6LWIPnpow6hufFwgOwor6K+gPnF1w6FufFwgOwor5oG/PnnFj25nfFwgOwor54O9PmZlbmd8XCA7Civokq8+a3XEg2l8XCA7CivnvKg+eWluZ3xcIDsKK+iIqz5mxINuZ3xcIDsKK+iOmD5zaGVufFwgOwor5o64PmNow6FufFwgOwor5ZikPnlpbmd8XCA7CivonJU+c2h1w6x8XCA7Civom58+amlhb3xcIDsKK+ahoj56aGVufFwgOwor5raTPmp1YW58XCA7CivkvYM+ZGnDoG58XCA7Civlm7E+Y29uZ3xcIDsKK+mznT5zaMOgbnxcIDsKK+m7jz5uacOhbnxcIDsKK+S9nz50w7NuZ3xcIDsKK+e8hD5qaWFufFwgOwor6Zq9Pmp1w6BufFwgOwor5rypPnh1w6FufFwgOwor54upPnNow7J1fFwgOwor6IycPnFpw6BufFwgOwor6buUPnFpw6FufFwgOwor5qeMPmNodcOtfFwgOwor5parPnpodcOzfFwgOwor57qrPnF1w6FufFwgOwor54KAPnnDoW5nfFwgOwor6L6NPmNodcOyfFwgOwor5ZKbPm7DrW5nfFwgOwor5qStPnNoZW58XCA7CivmgI8+ecOgbmd8XCA7Civog4Q+emjDsnV8XCA7Civlib0+cGlhb3xcIDsKK+ickz50w61uZ3xcIDsKK+eajj5qacSDb3xcIDsKK+eQjz5sacOhbnxcIDsKK+WYuT5sacOhb3xcIDsKK+eXiT5qw6xuZ3xcIDsKK+aQoT5zxINuZ3xcIDsKK+Wtqj5sdcOhbnxcIDsKK+aMmz5sdcOhbnxcIDsKK+aXjD5qaW5nfFwgOwor576aPmzDrW5nfFwgOwor5rWcPmJhbmd8XCA7Civms7E+eWFuZ3xcIDsKK+azvj5qaW5nfFwgOwor6Jy7PnFpbmd8XCA7CivltZg+csOzbmd8XCA7CivlgIw+Z3VhbnxcIDsKK+iegj5sw6FuZ3xcIDsKK+iLkz5sw61uZ3xcIDsKK+iUqz5uaWFufFwgOwor6IaCPmx1XDrMhnxcIDsKK+axtD5iacOgbnxcIDsKK+aRkj5iw6xuZ3xcIDsKK+aBqz5kw7JuZ3xcIDsKK+e7jD56aHXDs3xcIDsKK+i4rj5kacSDbnxcIDsKK+Wqmz55dcOhbnxcIDsKK+ixuj5jaMOhaXxcIDsKK+eutD56aGVufFwgOwor5L+4PmbDqG5nfFwgOwor572UPnfEg25nfFwgOwor5rmNPnR1YW58XCA7Civku4M+ZGluZ3xcIDsKK+e6tj5ndWFufFwgOwor6bmmPnlpbmd8XCA7CivohI0+a3XDoGl8XCA7Civog6s+asOsbmd8XCA7Civnobc+amnEg258XCA7Civnu4k+emjDsnV8XCA7CivmtqM+aHXDoG58XCA7Civpl7M+aMOzbmd8XCA7Civoh4M+eW9uZ3xcIDsKK+Wvrj5sacOhb3xcIDsKK+e8rj5zaMOgbnxcIDsKK+mipz5xdcOhbnxcIDsKK+eiiT5kaWFvfFwgOwor5rO1PmLDqG5nfFwgOwor6LWhPnNow6BufFwgOwor5a6VPmTDoG5nfFwgOwor5rKUPm1pxINufFwgOwor5aCRPnFpw6BufFwgOwor572hPmdhbmd8XCA7Civoio0+c2jDoW98XCA7CivprYc+Y2h1w618XCA7CivpnZM+amluZ3xcIDsKK+mVjD5qdWFufFwgOwor5r28PnTDs25nfFwgOwor5Z64Pmh1w6BufFwgOwor6LCEPmNoxINufFwgOwor5o68Pmd1w6BufFwgOwor5YSGPmrErW5nfFwgOwor57qCPnp1xINufFwgOwor546OPmRpbmd8XCA7Civmqqw+bcOpbmd8XCA7Civnm6U+Z3XDoG58XCA7CivlmZQ+ZGVuZ3xcIDsKK+eWuT56aMSVbnxcIDsKK+a3mT5jw7NuZ3xcIDsKK+aphz5xaWFvfFwgOwor5p+gPm7DrW5nfFwgOwor6ImEPnNoYW98XCA7CivpmIY+bMSDbmd8XCA7CivnlqE+ecOhbmd8XCA7Civppa8+amnDoG58XCA7CivprIM+em9uZ3xcIDsKK+aukz5sacOgbnxcIDsKK+iPgT5qaW5nfFwgOwor5r+vPnpodcOzfFwgOwor6Zq8Pnpoxa1ufFwgOwor57+mPmppxINufFwgOwor5reePnNvbmd8XCA7Civmoac+a3XDoGl8XCA7Civmvbg+c2hhbnxcIDsKK+m+ij5jaHXDsnxcIDsKK+aEhj5xaWFufFwgOwor5aejPmppYW98XCA7Civohpg+Ymlhb3xcIDsKK+WNnj5iacOgbnxcIDsKK+m4vj5sdcOhbnxcIDsKK+mVlz50YW5nfFwgOwor5aipPm1pxINufFwgOwor562xPnhpxINvfFwgOwor6KOxPmJpxINvfFwgOwor5rqfPm3DrW5nfFwgOwor6ZmyPmNodcOtfFwgOwor56qVPnRpxINvfFwgOwor6ZSPPmppxINufFwgOwor55S6PnTErW5nfFwgOwor57qjPmppYW58XCA7CivosLY+Y2jDqG58XCA7Civlraw+aHXDoGl8XCA7CivplbM+Ymlhb3xcIDsKK+W+iT55w6FuZ3xcIDsKK+iwqj5qacOgbnxcIDsKK+S9uz50aWFvfFwgOwor6aOZPmJpYW98XCA7Civmjq4+cWnDoW58XCA7CivkvIk+a8Ogbmd8XCA7CivplKg+eGlhbnxcIDsKK+ejrD5xw6xuZ3xcIDsKK+eRrT50w6FuZ3xcIDsKK+mqnj5xaWFufFwgOwor6ZWrPmRlbmd8XCA7Civoh6c+emFuZ3xcIDsKK+WCpT50xINuZ3xcIDsKK+aFtT55b25nfFwgOwor5r+CPmxpw6FufFwgOwor5Zu5PmzDrW5nfFwgOwor5ay0PnnDrW5nfFwgOwor5L6pPmt1w6BpfFwgOwor5p6wPnDDrW5nfFwgOwor5ruCPnBhbmd8XCA7Civoiqs+eXXDoW58XCA7Civmo4I+bMOtbmd8XCA7CivkvKc+Y2FuZ3xcIDsKK+iwlz5jaMOhbnxcIDsKK+iesz50w6FuZ3xcIDsKK+mUtz5jaGFpfFwgOwor57urPmzDrW5nfFwgOwor6IyBPnpodcOzfFwgOwor6JyDPnNow6hufFwgOwor6ZOEPnNodcOyfFwgOwor57ycPnpoZW58XCA7CivpgIQ+cMOhbmd8XCA7CivovrY+Y2h1w7J8XCA7CivoiKI+c2hhbnxcIDsKK+a3vD5tacSDb3xcIDsKK+e9hD5xw6xuZ3xcIDsKK+einD5jaMSVbnxcIDsKK+eUjz5ww6huZ3xcIDsKK+azoD5sw61uZ3xcIDsKK+WDrT5qacOgbnxcIDsKK+eimD5kacSDbnxcIDsKK+aujT5wacSDb3xcIDsKK+aTpD54xK1uZ3xcIDsKK+iNnj5qaWFvfFwgOwor6ZihPnFpYW58XCA7CivmsZ4+Z8WPbmd8XCA7CivlqbU+Y2jDoW58XCA7CivlmKM+YmVuZ3xcIDsKK+WoiT5waW5nfFwgOwor6K6nPmjDs25nfFwgOwor56CnPnpoZW58XCA7Civpqog+cGnDoW58XCA7Civpgog+bWnEg298XCA7Civogps+Z2FuZ3xcIDsKK+eNoD5sacOhb3xcIDsKK+WWgT55w7NuZ3xcIDsKK+WTgj5zaMSVbnxcIDsKK+amlD5sw6FuZ3xcIDsKK+e7tj5zaMOydXxcIDsKK+WZjD5jZW5nfFwgOwor6KqKPnTDqW5nfFwgOwor5a64PmNow6lufFwgOwor5L2ePm7DrG5nfFwgOwor6YKVPnlvbmd8XCA7Civkv6Y+Y2jDs3V8XCA7CivpuKI+eXVhbnxcIDsKK+a5jj5tacSDbnxcIDsKK+WWtT5taWFvfFwgOwor5oydPnpodWF8XCA7Civpo5o+Ymlhb3xcIDsKK+eQrj5jw7NuZ3xcIDsKK+ayrT5qaWFufFwgOwor6Z6FPnnEg25nfFwgOwor6ZWbPnlvbmd8XCA7Civpkr8+ZGnDoG58XCA7Civmirs+c2jDqG58XCA7Civmu6Y+bHXDoW58XCA7Civmpbk+ecOtbmd8XCA7Civmtr8+emh1b3xcIDsKK+awsD5xaW5nfFwgOwor6ayIPnF1w6FufFwgOwor54+pPmjDqW5nfFwgOwor5ZGkPmzDrW5nfFwgOwor5aSvPmhhbmd8XCA7Civot7k+eGlhbnxcIDsKK+edkT5qacSDbnxcIDsKK+aZgT5jaMOhb3xcIDsKK+Wslz5zaMOgbnxcIDsKK+W/nT50acSDbnxcIDsKK+WiiT55b25nfFwgOwor5YeHPnPDsm5nfFwgOwor6bKgPmfElW5nfFwgOwor6YauPmppw6BvfFwgOwor56mwPnLDoW5nfFwgOwor5qWdPmxpw6BufFwgOwor5qC+PmjDoG5nfFwgOwor5pq5PnhpYW58XCA7CivmsqM+ZmVuZ3xcIDsKK+iMjz5sw7NuZ3xcIDsKK+iKoT5xacOgbnxcIDsKK+mzjz5ndWFufFwgOwor5q6EPnRpxINufFwgOwor5qGBPmjDqW5nfFwgOwor57ySPnpodcOsfFwgOwor6aqgPnBpw6BvfFwgOwor6I+FPmppYW58XCA7CivojJQ+ecOtbmd8XCA7Civonbw+YsSDbmd8XCA7Civng4o+ecOhbmd8XCA7Civnu7s+cXXEg258XCA7Civliq0+c2jDoG98XCA7Civom7k+ecWPbmd8XCA7CivosaI+aHXDoG58XCA7Civkvpc+ZMOybmd8XCA7Civphak+bcOtbmd8XCA7Civmkro+Y3VhbnxcIDsKK+eZoz54acSDbnxcIDsKK+echz5tacSDb3xcIDsKK+Wmrz56aMOzdXxcIDsKK+WlmD56w6BuZ3xcIDsKK+iQsT54dWFufFwgOwor6ZOJPnh1w6BufFwgOwor6LmHPmppxINufFwgOwor5oKtPnFpYW58XCA7CivlvIE+YmnDoG58XCA7Civpha4+dMOzbmd8XCA7Civpko4+cWlhbnxcIDsKK+m4qT56aMOobnxcIDsKK+iFmj5kw6xuZ3xcIDsKK+iDtD5kw7JuZ3xcIDsKK+mqoj5jb25nfFwgOwor5YuQPm3ElW5nfFwgOwor6KiHPmhvbmd8XCA7Civkvqo+Y2jDoWl8XCA7Civng4M+asStbmd8XCA7CivphYo+ZMStbmd8XCA7Civpk6g+cXXDoW58XCA7CivnoK0+YmlhbnxcIDsKK+mqkz56aHVpfFwgOwor6JeTPnhpxINufFwgOwor6YquPmx1w6FufFwgOwor6byLPnl1w6FufFwgOwor57yxPnFpxINufFwgOwor5rOrPnh1w6BufFwgOwor5Ze1PnBpw6BvfFwgOwor5aWCPmh1w6BufFwgOwor5L2lPnFpYW58XCA7CivohbE+amnDoG58XCA7CivltKc+c29uZ3xcIDsKK+WcnD55dcOhbnxcIDsKK+WjhT55b25nfFwgOwor5Ya8PnhpxINufFwgOwor57KzPmdlbmd8XCA7Civpg7Q+Y2hlbnxcIDsKK+m+iT5sxY9uZ3xcIDsKK+esij56aMOgb3xcIDsKK+mUkj5sw6FuZ3xcIDsKK+aanT5tw61uZ3xcIDsKK+a+tj5jaMOhbnxcIDsKK+aQoD5zaHXDsnxcIDsKK+iMrT5qaWFvfFwgOwor6IuVPnRpw6FvfFwgOwor5aigPnNoZW58XCA7CivnoLc+c2hlbnxcIDsKK+inpT5nb25nfFwgOwor5oiGPmfDoG5nfFwgOwor54WKPmppxINufFwgOwor5p2TPmJpYW98XCA7CivosIw+Y2jDqW58XCA7Civnk6Q+csOhbmd8XCA7CivniKg+Y3XDoG58XCA7CivnvLU+Z3XDoG58XCA7CivmuJY+c2jElW58XCA7Civlm50+amnEg258XCA7CivnrKQ+dGnDoW98XCA7Civnl6s+eGnDoW58XCA7CivpuZE+Y2jDum58XCA7Civmo7k+emh1b3xcIDsKK+iLiz54acOgbnxcIDsKK+WehT5sxY9uZ3xcIDsKK+m5sz5ndcOgbnxcIDsKK+mSpD5xacOhbnxcIDsKK+aorz5jw7NuZ3xcIDsKK+mqnz5zaMOgbnxcIDsKK+aMoj5qacSDb3xcIDsKK+aKnz50dcOhbnxcIDsKK+eHuT54acSDbnxcIDsKK+a5qz5qacSDb3xcIDsKK+WVgT56aG91fFwgOwor5aGsPnl1w6FufFwgOwor6bKHPm5pw6FufFwgOwor566dPnFpw6FufFwgOwor55O0PmzDrW5nfFwgOwor5rKGPmjDoW5nfFwgOwor5oSAPnFpxINvfFwgOwor5pOiPnpodcOzfFwgOwor6I60Pmxpw6FufFwgOwor6ZOjPnhpxINufFwgOwor5LufPnFpYW58XCA7Civnio0+amlhbnxcIDsKK+WoiD5sdcOhbnxcIDsKK+WmgT5zaHXDsnxcIDsKK+e+vD5jaMOgbnxcIDsKK+WApT5rb25nfFwgOwor57G8PmxpYW58XCA7CivonKI+bcSVbmd8XCA7Civoo6I+bGnDoW58XCA7Civnq6Y+c8WPbmd8XCA7Civnu6E+eGlhb3xcIDsKK+a0uT5odcOhbnxcIDsKK+W7mz5jaMOhbnxcIDsKK+aShD55aW5nfFwgOwor5bClPmxpw6BvfFwgOwor6LCvPnFpw6FvfFwgOwor6ZOwPmppxINvfFwgOwor6auLPmt1YW58XCA7CivpsqY+dGnDoW98XCA7CivogrE+Z29uZ3xcIDsKK+W2nT5kw6huZ3xcIDsKK+iKij5xaWFufFwgOwor5YGsPnrFj25nfFwgOwor5YCsPnpodW98XCA7Civnobw+cMOpbmd8XCA7CivpnZs+ZGnDoG58XCA7CivpnLA+eGnDoG58XCA7CivnsJ8+ZGnDoG58XCA7CivnlpQ+ZGluZ3xcIDsKK+eouT56aMSVbnxcIDsKK+eihz5kw6xuZ3xcIDsKK+eFhT5kdcOgbnxcIDsKK+aXgz56aGFufFwgOwor6IKrPnpodW58XCA7CivnlJE+esOobmd8XCA7CivnkZc+eXXDoG58XCA7CivnjIM+eGnEg258XCA7Civlk5k+a3XDoGl8XCA7Civok4o+d8SVbmd8XCA7CivojaU+cWnDoW58XCA7CivphbA+eGlhbnxcIDsKK+e+nz5xaWFufFwgOwor6KCTPm3ElW5nfFwgOwor6KOjPmxpw6BufFwgOwor5q+9Pmppw6BufFwgOwor5oiLPmppYW58XCA7Civmqbw+eXXDoW58XCA7Civmpps+emhlbnxcIDsKK+ePmT5nxY9uZ3xcIDsKK+a6jz50w6FuZ3xcIDsKK+mDoj55xK1uZ3xcIDsKK+iwtT56aGFufFwgOwor6IurPnNoYW58XCA7CivmiaY+cWlhbnxcIDsKK+mtjT53xINuZ3xcIDsKK+eFuD5iaWFufFwgOwor54SvPmNoYW98XCA7Civog7w+cGnDoW58XCA7CivniLA+eXXDoW58XCA7Civnio8+cGlhbnxcIDsKK+ajsD5jaHXDrXxcIDsKK+e7oD5nxJVuZ3xcIDsKK+a1nj56aHXDs3xcIDsKK+aCmz5xdWFufFwgOwor54u3Pmp1w6BufFwgOwor5bOkPmppw6BvfFwgOwor5ZiMPnBpYW98XCA7Civlk5M+eGlhb3xcIDsKK+iSuT5qaWFufFwgOwor5aGEPmzDqW5nfFwgOwor6YSEPmp1w6BufFwgOwor6Z6vPmppYW58XCA7CivpsqI+bGnDoW58XCA7Civoupw+enVhbnxcIDsKK+i5gT5wacOhbnxcIDsKK+eguz5sw7NuZ3xcIDsKK+eggD5kw6BuZ3xcIDsKK+iFiD5qaW5nfFwgOwor6ISYPmd1xINufFwgOwor6L6HPm5pxINufFwgOwor5qS5PnNow6hufFwgOwor55KOPnlpbmd8XCA7CivosKA+ZMSDbmd8XCA7CivlioE+cWlhb3xcIDsKK+ienz5tw61uZ3xcIDsKK+i3oz54acSDbnxcIDsKK+exgD56aMOydXxcIDsKK+eZnD5kacOgbnxcIDsKK+egpj56aMOgaXxcIDsKK+aeiz5mYW5nfFwgOwor5r2LPmxpw6BufFwgOwor6aWnPnjDrW5nfFwgOwor5o6+Pnl1w6BufFwgOwor6JW7PmjDsm5nfFwgOwor6I68PmNow7pufFwgOwor6I6oPmzDoG5nfFwgOwor6LCdPnBpw6FufFwgOwor6bKbPmppxINvfFwgOwor6KymPnHDrG5nfFwgOwor6ImPPnNoxY91fFwgOwor56yVPmppxINufFwgOwor6JuJPmzDrW5nfFwgOwor6ZOrPnRpw6FvfFwgOwor6KCyPmp1YW58XCA7CivnnIQ+bWnEg258XCA7Civno7Q+ZMOobmd8XCA7CivlqrU+ecOsbmd8XCA7Civog5c+emhlbnxcIDsKK+i9uD56aMSVbnxcIDsKK+aigz50xK1uZ3xcIDsKK+mmlT5uw6FuZ3xcIDsKK+eNvj5odWFufFwgOwor6a2IPnhpYW98XCA7Civpsq4+bMOtbmd8XCA7Civpu74+bcOpbmd8XCA7Civnlp0+c2jDoG58XCA7CivmiKw+amnEg258XCA7Civpqp0+Ymlhb3xcIDsKK+ishz5qacSDbnxcIDsKK+a8tj5odcOgbnxcIDsKK+W4kT50xINuZ3xcIDsKK+aPjj54dWFufFwgOwor6JKXPmzDoG5nfFwgOwor6YWDPmzDrW5nfFwgOwor6ZmJPmrDrG5nfFwgOwor5YmhPnNow6BufFwgOwor6bKCPmbDoW5nfFwgOwor57KcPnRpw6BvfFwgOwor562yPnNoYW98XCA7Civonog+eXXDoW58XCA7CivpooM+Z2FuZ3xcIDsKK+ikij5iacSDbnxcIDsKK+mSjT5zaGFufFwgOwor55WbPnpoxJVufFwgOwor5pupPm7Eg25nfFwgOwor6L6LPnfEg25nfFwgOwor5rqxPnpoZW58XCA7Civlv60+YmnDoG58XCA7CivmlK4+bsSDbmd8XCA7CivojYc+eMOsbmd8XCA7Civoi44+bcOpbmd8XCA7CivpgqE+ZmFuZ3xcIDsKK+iwlj54dWFufFwgOwor6YabPnF1w6FufFwgOwor6ICqPnDEg25nfFwgOwor6bulPnHDrW5nfFwgOwor6aurPnRpw6FvfFwgOwor6Z6SPnFpYW98XCA7Civps5Q+YmnDoG98XCA7CivouJQ+emh1w7N8XCA7Civnrpw+a29uZ3xcIDsKK+etjD5xdcOhbnxcIDsKK+ifrj5zaMOgbnxcIDsKK+mioT5jaMOgbnxcIDsKK+iBjT5uw61uZ3xcIDsKK+iAtT50aW5nfFwgOwor6KOlPmppxINufFwgOwor56C8PnTDs25nfFwgOwor56azPnLDoW5nfFwgOwor6KeHPnpoYW58XCA7Civmp4o+c2h1w7J8XCA7CivnvLM+aHXDoW58XCA7Civlqac+asOsbmd8XCA7CivmvbI+c2jDoG98XCA7Civmu6I+ecOtbmd8XCA7CivmtY0+a3XDoGl8XCA7CivllbY+ZMOsbmd8XCA7Civolqg+aG9uZ3xcIDsKK+eeoj5tw6luZ3xcIDsKK+iTvD5sacSDb3xcIDsKK+iTgT56aGVufFwgOwor6I+YPnNvbmd8XCA7CivojJE+bmnEg298XCA7Civpgpk+bcOhbmd8XCA7CivppZQ+eW9uZ3xcIDsKK+mytz5kaWFvfFwgOwor6Zq5PnpodWl8XCA7Civoiag+bcOpbmd8XCA7CivoiZ8+dMOzbmd8XCA7CivoiKE+Z2FuZ3xcIDsKK+m5hz54acOhbnxcIDsKK+mUtj5zb25nfFwgOwor6ZKHPmTDrG5nfFwgOwor56GOPnjDrW5nfFwgOwor56WnPnRpYW98XCA7Civmlas+amnDoG98XCA7CivmpaY+eHXDoG58XCA7CivmpLQ+ZHXDoG58XCA7CivnvK8+emVuZ3xcIDsKK+Wssj5uacSDb3xcIDsKK+WZjT5qaWFvfFwgOwor5ZSqPmbElW5nfFwgOwor6JCRPmh1w6FufFwgOwor6IqfPnNoYW58XCA7Civoi4w+Y8SDbmd8XCA7Civln50+bmnDoG58XCA7CivphK8+c2jDoG58XCA7CivohJQ+bHXDoW58XCA7CivmsYY+Y3VhbnxcIDsKK+WEhz54dWFufFwgOwor5YitPmrErW5nfFwgOwor6bK2Pm5pw6FufFwgOwor6bKjPmppYW58XCA7CivpvoA+Y2jDqG58XCA7CivnvrA+dGFuZ3xcIDsKK+iJiz5txJVuZ3xcIDsKK+ewpj5kZW5nfFwgOwor6KCKPmxpw6FufFwgOwor6J61PnBpYW98XCA7Civonpc+dMOhbmd8XCA7Civonb4+csOzbmd8XCA7CivonKk+dGnDoW98XCA7Civom7g+c2hhb3xcIDsKK+iarD54acOgbnxcIDsKK+eYvz55xK1uZ3xcIDsKK+eYpT5jaMOgaXxcIDsKK+m4qz5kb25nfFwgOwor56iCPmzDoW5nfFwgOwor6ZS+Pmh1w6FufFwgOwor6ZSpPmp1w6BufFwgOwor56GQPnTDs25nfFwgOwor6IKcPnLDs25nfFwgOwor5rChPmRvbmd8XCA7Civmpoc+Y2jDqG58XCA7CivmnrU+eGlhb3xcIDsKK+aenj5jb25nfFwgOwor5p2qPm1pxINvfFwgOwor57ysPmPDqW5nfFwgOwor5b2WPnR1w6BufFwgOwor5rmUPmppYW58XCA7CivmuJE+bWnEg258XCA7Civms7c+bMOzbmd8XCA7CivmhYo+cWnDoG58XCA7CivlnIk+Y2h1w618XCA7CivlsKI+d2FuZ3xcIDsKK+iYhT5ow6luZ3xcIDsKK+iSoT5iw6BuZ3xcIDsKK+iLhD5iacOgbnxcIDsKK+mDkD5rdcOgaXxcIDsKK+ivvD5zaMOpaXxcIDsKK+mrnz5iaWFvfFwgOwor6bOZPnnDs25nfFwgOwor6bOKPmJpYW58XCA7Civpsq0+cWluZ3xcIDsKK+m+hj50acOhb3xcIDsKK+i2vD5qacSDbnxcIDsKK+mGoz50w6FuZ3xcIDsKK+ihhD5udVw6zIB8XCA7CivnsJY+ZHXDoG58XCA7CivnrpA+amluZ3xcIDsKK+ibmD55w6FuZ3xcIDsKK+iZvz5jaMOgaXxcIDsKK+mipT5mxJVuZ3xcIDsKK+eYsz5jaG91fFwgOwor6bmpPmxpw6FvfFwgOwor55+nPnNoxJVufFwgOwor6ZOePmRpw6BvfFwgOwor6ZKqPmvDoG5nfFwgOwor6ZKrPmZhbmd8XCA7CivpkpA+c2jDoG58XCA7Civnvb4+emVuZ3xcIDsKK+eVjj5xdcSDbnxcIDsKK+ejiT5zxINuZ3xcIDsKK+ehlz5xaWFvfFwgOwor56GtPm3DoW5nfFwgOwor5oGnPm51XDrMgHxcIDsKK+elhj54aWFufFwgOwor6IOCPnNow6hufFwgOwor6IOoPmTDsm5nfFwgOwor5rCZPnhpYW58XCA7CivovoE+cXXDoW58XCA7CivmqqA+ccOtbmd8XCA7CivmpZc+amnDoG58XCA7CivmpKA+cWnDoG58XCA7CivnkoE+Y29uZ3xcIDsKK+e8oz5qaWFufFwgOwor57yPPmJpw6BufFwgOwor57uXPmjDqG5nfFwgOwor6YCtPmh1w6BufFwgOwor5pC0PnFpYW58XCA7CivlroA+bWnDoW58XCA7Civpl7Y+a8Ogbmd8XCA7CivnjY0+asOsbmd8XCA7Civlvrw+amnEg298XCA7CivlkLI+c2jElW58XCA7Civolbk+eW9uZ3xcIDsKK+eUjT5tw6luZ3xcIDsKK+iTpT55w6xuZ3xcIDsKK+iJvT5qaWFvfFwgOwor5Z+PPnNoYW58XCA7Civlnow+ZMOybmd8XCA7CivphYY+ZmVuZ3xcIDsKK+mYvT5kacOgbnxcIDsKK+ivnD5zaGVufFwgOwor5LudPnTDs25nfFwgOwor5YCuPmzDqG5nfFwgOwor5L+cPnBpbmd8XCA7CivpvqE+Y2h1w6x8XCA7Civpvpc+bMOtbmd8XCA7CivpvpY+bMWPbmd8XCA7CivpvpQ+Z29uZ3xcIDsKK+m+kz5sw7NuZ3xcIDsKK+m+kj5sw7NuZ3xcIDsKK+m+kD5ww6FuZ3xcIDsKK+m+jz5nb25nfFwgOwor6b6NPmzDs25nfFwgOwor6b27PmRpYW58XCA7Civpvbk+Y2h1b3xcIDsKK+m9tD54acSDbnxcIDsKK+m9sT5jaHXDsnxcIDsKK+m9qj5jaHXDsnxcIDsKK+m9pD5xdcOhbnxcIDsKK+m9oj5sw61uZ3xcIDsKK+m9oT5sw61uZ3xcIDsKK+m9oD50acOhb3xcIDsKK+m9nj5uacOgbnxcIDsKK+m9mz5jaMOhaXxcIDsKK+m9lD5jaMOobnxcIDsKK+m9kz5jaMOobnxcIDsKK+m9iz56aGFpfFwgOwor6b2JPm7DoG5nfFwgOwor6b2IPm7Ds25nfFwgOwor6b2GPnfDqG5nfFwgOwor6byxPmppbmd8XCA7CivpvLA+bmnDoG58XCA7CivpvK4+dMOtbmd8XCA7CivpvKg+dMOzbmd8XCA7CivpvKY+ZGlhb3xcIDsKK+m8nz50ZW5nfFwgOwor6byePnRhbmd8XCA7CivpvJ0+eXVhbnxcIDsKK+m8mD55dWFufFwgOwor6byVPmRvbmd8XCA7CivpvJE+ZMStbmd8XCA7CivpvIw+Y2jDoW98XCA7CivpvIY+bcOhbmd8XCA7CivpvIM+bcSVbmd8XCA7CivpvII+Y2jDoW98XCA7Civpu78+eXXDoW58XCA7Civpu7A+emjElW58XCA7Civpu6g+ZMSDbmd8XCA7Civpu54+ZGnEg258XCA7Civpu5o+cWnDoW58XCA7Civpu5c+dHXEg258XCA7Civpu4w+aMOpbmd8XCA7Civpu4k+aMOpbmd8XCA7Civpu4c+dGlhbnxcIDsKK+m6uj5tacOgbnxcIDsKK+m6tz5mZW5nfFwgOwor6bq1Pm1pw6BufFwgOwor6bqyPnhpw6BufFwgOwor6bqrPm1pxINufFwgOwor6bqqPm1pxINufFwgOwor6bqoPmNoxINvfFwgOwor6bqiPmzDrW5nfFwgOwor6bqgPmppbmd8XCA7CivpupY+amluZ3xcIDsKK+m6jj5jaMOpbnxcIDsKK+m6iT5qaWFufFwgOwor6bqFPmJpYW98XCA7CivpuoM+Ymlhb3xcIDsKK+m5vD5qacSDbnxcIDsKK+m5uz5qacSDbnxcIDsKK+m5uT54acOhbnxcIDsKK+m5uD5qacSDbnxcIDsKK+m5tz5sw61uZ3xcIDsKK+m5sj5tw6luZ3xcIDsKK+m5rz56aGFufFwgOwor6bmuPnh1w6FufFwgOwor6bmoPmxpw6FvfFwgOwor6bmfPndlbmd8XCA7CivpuZM+eXVhbnxcIDsKK+m5kj5nZW5nfFwgOwor6bmQPnFpYW58XCA7CivpuYs+bWnDoW98XCA7CivpuLw+emhhb3xcIDsKK+m4uz5ow6luZ3xcIDsKK+m4sD5sw61uZ3xcIDsKK+m4rj54aWFvfFwgOwor6binPmNhbmd8XCA7CivpuJ4+bHXDoW58XCA7CivpuJw+ZGnEg298XCA7CivpuJs+Z3XDoG58XCA7CivpuJo+eWluZ3xcIDsKK+m4lz5sw7NuZ3xcIDsKK+m4jz5tw6luZ3xcIDsKK+m4jj55aW5nfFwgOwor6biJPnnDoW5nfFwgOwor6biHPnpoYW58XCA7Civpt7w+eGnDoW58XCA7Civpt7s+dHXDoW58XCA7Civpt7k+eWluZ3xcIDsKK+m3tD54acOhbnxcIDsKK+m3sz54acOhbnxcIDsKK+m3rz5sacOhb3xcIDsKK+m3rj5qaWFvfFwgOwor6bemPmppYW98XCA7Civpt6Q+cXXDoW58XCA7Civpt58+emh1w7N8XCA7Civpt5s+csOzbmd8XCA7Civpt5o+bGnDoW98XCA7Civpt5A+Y2jDqW58XCA7Civpt48+dGnDoW58XCA7Civpt40+amlhb3xcIDsKK+m3hj50acOhbnxcIDsKK+m2vD5qaWFufFwgOwor6ba2PnTDoW5nfFwgOwor6bayPndlbmd8XCA7CivptrE+eHVhbnxcIDsKK+m2sD55dcOhbnxcIDsKK+m2rz55aW5nfFwgOwor6batPmbEg25nfFwgOwor6basPmNhbmd8XCA7Civptqc+eWluZ3xcIDsKK+m2oz5waWFufFwgOwor6baePmNodW58XCA7CivptpM+bWnDoW98XCA7Civptoo+Z2VuZ3xcIDsKK+m2iT5jaMO6bnxcIDsKK+m2hz5kb25nfFwgOwor6baEPmppbmd8XCA7CivptoE+amluZ3xcIDsKK+m1vT56aHXDrHxcIDsKK+m1vD5rb25nfFwgOwor6bW7PnpodWl8XCA7Civptbc+eXVhbnxcIDsKK+m1sz5qaWFufFwgOwor6bWwPmRpYW98XCA7Civpta4+cWlhbnxcIDsKK+m1rD5ww6luZ3xcIDsKK+m1qz5mw6huZ3xcIDsKK+m1pz5ww61uZ3xcIDsKK+m1pj5iw6xuZ3xcIDsKK+m1oj5zaGVufFwgOwor6bWbPmppbmd8XCA7CivptZE+anVhbnxcIDsKK+m1iT5sdcOhbnxcIDsKK+m1gz56aG91fFwgOwor6bWBPmppYW98XCA7CivptLs+aMOzbmd8XCA7CivptLU+aMOybmd8XCA7CivptLQ+aMOpbmd8XCA7CivptK0+emh1aXxcIDsKK+m0rD55aW5nfFwgOwor6bSqPmjDoW5nfFwgOwor6bSnPnLDsm5nfFwgOwor6bSmPnlhbmd8XCA7CivptJ4+eGlhb3xcIDsKK+m0mz55dWFufFwgOwor6bSYPmJpw6BufFwgOwor6bSSPmzDrW5nfFwgOwor6bSMPmbDqG5nfFwgOwor6bSLPmZhbmd8XCA7CivptIY+emjDqG58XCA7CivptIU+aHVhbnxcIDsKK+mzvT5qaWFufFwgOwor6bO2Pnl1YW58XCA7Civps7Q+bcOtbmd8XCA7Civps7M+ZsOobmd8XCA7Civps68+ZsOobmd8XCA7Civps60+ZGlhb3xcIDsKK+mzpT5uacSDb3xcIDsKK+mzoz56aGFufFwgOwor6bOSPmppYW58XCA7Civps5E+ZsOhbmd8XCA7Civps5A+cMOhbmd8XCA7Civps4g+cXXDoW58XCA7Civpsqw+ecWPbmd8XCA7Civpsp0+aHXDoG58XCA7Civpspk+a3XDoGl8XCA7Civpspc+amlhb3xcIDsKK+mylj50w7NuZ3xcIDsKK+myhj5ww61uZ3xcIDsKK+mxuT5ndcOgbnxcIDsKK+mxtT56aGVufFwgOwor6bGjPnpoYW58XCA7CivpsaA+a3XDoGl8XCA7CivpsZ4+Z3VhbnxcIDsKK+mxmT5tacOhb3xcIDsKK+mxlD5zaMOgbnxcIDsKK+mxkz5zaMOgbnxcIDsKK+mxjj5qacSDb3xcIDsKK+mxhz5rYW5nfFwgOwor6bGFPnlvbmd8XCA7CivpsL4+YmnDoG98XCA7CivpsLk+amlhbnxcIDsKK+mwtz50acOhb3xcIDsKK+mwsT5sacOhbnxcIDsKK+mwqz5yw7NuZ3xcIDsKK+mwpT5ndWFufFwgOwor6bCgPmd1YW58XCA7CivpsJ8+ZsOhbmd8XCA7CivpsJw+amlhbnxcIDsKK+mwlD5qacSDbnxcIDsKK+mwkT55w6FuZ3xcIDsKK+mwjj5qacOgbnxcIDsKK+mwij5sacOgbnxcIDsKK+mwhj5jaHVufFwgOwor6bCBPnF1w6FufFwgOwor6bCAPmh1w6BufFwgOwor6a+/PmJpYW58XCA7Civpr74+YmlhbnxcIDsKK+mvvD56b25nfFwgOwor6a+5Pnhpbmd8XCA7Civpr7U+c2hlbnxcIDsKK+mvsD5uacOhbnxcIDsKK+mvrj56b25nfFwgOwor6a+tPm3ElW5nfFwgOwor6a+qPmzDrW5nfFwgOwor6a+pPmh1w6BufFwgOwor6a+oPmppbmd8XCA7Civpr58+ZG9uZ3xcIDsKK+mvnj56aMWPdXxcIDsKK+mvmz5kaWFvfFwgOwor6a+ZPmNow7pufFwgOwor6a+WPnFpbmd8XCA7Civpr5I+ecWPbmd8XCA7Civpr40+bcOpbmd8XCA7Civpr4g+Y2jDs3V8XCA7Civpr4c+aHXDoG58XCA7Civpr4U+dMOtbmd8XCA7Civpr4E+Z8SVbmd8XCA7Civprrk+c2hhbnxcIDsKK+muuD5tacSDbnxcIDsKK+murj54aWFufFwgOwor6a6rPmppYW98XCA7Civprqk+YsOsbmd8XCA7CivprqY+dMOzbmd8XCA7CivprqI+emjDsnV8XCA7CivprqE+dGlhb3xcIDsKK+mujz54aW5nfFwgOwor6a6JPmRpYW98XCA7CivproM+cMOtbmd8XCA7CivprbQ+ZsOhbmd8XCA7Civpras+c2jElW58XCA7Civprac+aMOhbmd8XCA7CivpraE+ZGnDoG98XCA7CivprZ8+Z29uZ3xcIDsKK+mtmT56aMSDbnxcIDsKK+mtlz5jaMWPdXxcIDsKK+mtkj5waWFvfFwgOwor6a2QPmNow7N1fFwgOwor6ay3Pnpvbmd8XCA7CivprLU+cWnDoW58XCA7CivprLM+anXDoG58XCA7CivprKg+aMOybmd8XCA7CivprKQ+csOhbmd8XCA7CivprKE+aMWPbmd8XCA7CivprKA+a3XDoGl8XCA7CivprJ4+bsOzbmd8XCA7CivprJ0+cWlhbnxcIDsKK+msnD5xaWFufFwgOwor6ayZPnNlbmd8XCA7CivprJQ+cMOpbmd8XCA7CivprJI+emjElW58XCA7CivprJE+bGnDoW58XCA7CivprIs+amlhbnxcIDsKK+msij5zaMO5bnxcIDsKK+msiT56b25nfFwgOwor6ayGPnNvbmd8XCA7CivprIU+cMOpbmd8XCA7Civpq74+c2hhb3xcIDsKK+mrvT56aHVhfFwgOwor6au8PnDDqW5nfFwgOwor6au4Pmdvbmd8XCA7Civpq7Y+csOzbmd8XCA7Civpq6w+cGVuZ3xcIDsKK+mroz5mxINuZ3xcIDsKK+mrnD5xaWFvfFwgOwor6auaPnFpw6BvfFwgOwor6auWPmt1YW58XCA7Civpq5I+emFuZ3xcIDsKK+mrjj5sacOhb3xcIDsKK+mriD5ww6FuZ3xcIDsKK+mrhz54aWFvfFwgOwor6auDPmLEg25nfFwgOwor6aq/PnBpw6FufFwgOwor6aq+PmfElW5nfFwgOwor6aq5PnFpYW98XCA7Civpqqk+a8SDbmd8XCA7CivpqqM+Y2jEg258XCA7CivpqpQ+em9uZ3xcIDsKK+mqiT5iaWFvfFwgOwor6am1PnrEg25nfFwgOwor6amrPmJpYW98XCA7Civpqak+aHVhbnxcIDsKK+mpoz50w6luZ3xcIDsKK+mpoj5sdVw6zIF8XCA7CivpqaE+cMOpbmd8XCA7CivpqZo+amluZ3xcIDsKK+mpmT56aGFufFwgOwor6amVPmppYW98XCA7CivpqZM+emVuZ3xcIDsKK+mpkD5kacOgbnxcIDsKK+mpjz5jaMSDbnxcIDsKK+mpjT54aWFvfFwgOwor6amEPmNvbmd8XCA7CivpqYM+cGnDoG98XCA7CivpqLg+c2jDoG58XCA7CivpqLU+eXXDoW58XCA7CivpqLA+dMOpbmd8XCA7CivpqK8+cMOhbmd8XCA7CivpqKs+cWlhbnxcIDsKK+moqj5qacSDbnxcIDsKK+mooz56b25nfFwgOwor6aihPnF1w6FufFwgOwor6aidPmppYW58XCA7CivpqJo+cWnDoW58XCA7CivpqJk+cGnDoG58XCA7CivpqJg+Y29uZ3xcIDsKK+molz5wacOgbnxcIDsKK+mojD56b25nfFwgOwor6aiGPnpob3V8XCA7CivpqIU+emh1aXxcIDsKK+mogj54aW5nfFwgOwor6ae9Pnh1w6BufFwgOwor6ae5Pm3DoW5nfFwgOwor6ae3PnPFj25nfFwgOwor6aeqPnNoZW58XCA7Civpp6k+cXXDoW58XCA7Civpp6c+ZMOybmd8XCA7Civpp6U+csOzbmd8XCA7Civpp6I+cGnDoW58XCA7Civpp5o+ecSDbmd8XCA7Civpp5c+emhlbnxcIDsKK+mnlD56xINuZ3xcIDsKK+mnjj56aMOydXxcIDsKK+mnjT5wZW5nfFwgOwor6aeMPnl1YW58XCA7Civpp4s+emhhb3xcIDsKK+mngz5rdcOgaXxcIDsKK+mmrj5mw6luZ3xcIDsKK+mmqz54aW5nfFwgOwor6aamPnhpYW58XCA7CivppqI+amlhbnxcIDsKK+mlpD5kw6xuZ3xcIDsKK+mloj5uw6FuZ3xcIDsKK+mloT56dcOgbnxcIDsKK+mlnj5jaMOhbnxcIDsKK+mlmz5tw6luZ3xcIDsKK+mlmD56aGFufFwgOwor6aWNPnNow6BufFwgOwor6aWEPnTDoW5nfFwgOwor6aS5PnTDoW5nfFwgOwor6aS4PnPDsm5nfFwgOwor6aSzPnTDoW5nfFwgOwor6aSwPmppYW58XCA7CivppKo+bnXEg258XCA7CivppKg+Z3XEg258XCA7CivppKE+eGnDoG58XCA7CivppKA+YsStbmd8XCA7CivppJ8+emh1w6x8XCA7CivppJ4+amnDoG58XCA7CivppIo+ecSDbmd8XCA7CivppIc+dMOzbmd8XCA7CivppIU+YsStbmd8XCA7CivppIM+amnEg298XCA7CivppII+dGnEg258XCA7Civpo7U+emjEg2l8XCA7Civpo6w+anXDoG58XCA7Civpo6Y+emhhbnxcIDsKK+mjoz5kw6xuZ3xcIDsKK+mjkT5iaWFvfFwgOwor6aOQPnpoxINufFwgOwor6aONPmJpYW98XCA7Civpo4w+ZmVuZ3xcIDsKK+mjiT5sacOhb3xcIDsKK+mjiD5iacSDb3xcIDsKK+mjhz5iaWFvfFwgOwor6aOGPmJpYW98XCA7Civpo4Q+cGlhb3xcIDsKK+mjgz5iaWFvfFwgOwor6aOCPmxpw6FvfFwgOwor6aK6PnnDoW5nfFwgOwor6aK1PnNow6BvfFwgOwor6aK0Pnh1w6BufFwgOwor6aKuPmJpYW98XCA7Civpoq0+emjEg258XCA7Civpoqk+Ymlhb3xcIDsKK+miqD5mZW5nfFwgOwor6aKVPnnErW5nfFwgOwor6aKLPnRpxIFufFwgOwor6aG0PnF1w6FufFwgOwor6aGvPnhpxINufFwgOwor6aGtPmhvbmd8XCA7Civpoas+emjDoG58XCA7Civpoak+cWlhbnxcIDsKK+mhpj5xacOhb3xcIDsKK+mhoD5wacOgb3xcIDsKK+mhnz5sacOhb3xcIDsKK+mhmz5kaWFufFwgOwor6aGaPmRpYW58XCA7CivpoZk+c8SDbmd8XCA7CivpoZg+eXXDoG58XCA7CivpoZU+dGnDoW58XCA7CivpoZI+ecOzbmd8XCA7CivpoYU+amlhbnxcIDsKK+mhgT5kw6xuZ3xcIDsKK+mhgD5jaHXDrXxcIDsKK+mguD5nxJVuZ3xcIDsKK+mgtj5nxJVuZ3xcIDsKK+mgtD55xK1uZ3xcIDsKK+mgsj50xK1uZ3xcIDsKK+mgqT5waW5nfFwgOwor6aCoPnBpYW58XCA7CivpoKU+c2jElW58XCA7CivpoKM+c2jElW58XCA7CivpoJo+asStbmd8XCA7CivpoJg+bMStbmd8XCA7CivpoI8+aMOhbmd8XCA7CivpoIw+c8Oybmd8XCA7CivpoIY+c2jDuW58XCA7CivpoIM+ccStbmd8XCA7CivpoII+ZMStbmd8XCA7Civpn7w+cMOpbmd8XCA7Civpn7o+eWluZ3xcIDsKK+mfuD5ww6luZ3xcIDsKK+mfsT54aWFufFwgOwor6Z+vPnhpYW58XCA7Civpn5I+cWnDoG98XCA7Civpn48+anXDoG58XCA7Civpn4k+amlhbnxcIDsKK+mfhj5xaWFufFwgOwor6Z+FPnhpxINufFwgOwor6Z+CPmNow6BufFwgOwor6Z+APmppYW58XCA7Civpnr0+cWnDoW98XCA7Civpnro+dGFuZ3xcIDsKK+merD5qaWFufFwgOwor6Z6kPmJhbmd8XCA7Civpnp4+YsStbmd8XCA7Civpnps+YsSVbmd8XCA7Civpnpo+a8Oybmd8XCA7Civpnpk+anVhbnxcIDsKK+melz50acOhb3xcIDsKK+melT5zaGFvfFwgOwor6Z6TPnRpbmd8XCA7Civpno8+Z8WPbmd8XCA7CivpnoM+aMOzbmd8XCA7Civpnaw+amlhbnxcIDsKK+mdqj5jaGFpfFwgOwor6Z2mPm1pxINufFwgOwor6Z2jPm1pw6BufFwgOwor6Z2dPnRpYW58XCA7CivpnZw+asOsbmd8XCA7CivpnZo+asOsbmd8XCA7CivpnZg+ccOsbmd8XCA7CivpnZU+emhlbnxcIDsKK+mdlD50aWFufFwgOwor6Z2RPnFpbmd8XCA7CivpnZA+YsOsbmd8XCA7CivpnYo+ZmVuZ3xcIDsKK+mdiD5sw61uZ3xcIDsKK+mdhz5sw7NuZ3xcIDsKK+mcvz5tw6luZ3xcIDsKK+mctj5ww6FuZ3xcIDsKK+mcsz5sw7NuZ3xcIDsKK+mcrz5kw6huZ3xcIDsKK+mcpT5tw6huZ3xcIDsKK+mcnz5ow7NuZ3xcIDsKK+mcnT5sw61uZ3xcIDsKK+mcmz5sw61uZ3xcIDsKK+mcmT55aW5nfFwgOwor6ZyYPmTDsm5nfFwgOwor6ZyUPmNow7J1fFwgOwor6ZyRPnpoYW58XCA7CivpnJA+d2VuZ3xcIDsKK+mcjD5jaG91fFwgOwor6ZyKPmzDrW5nfFwgOwor6ZyDPmNow6lufFwgOwor6Zu/Pnpow6BvfFwgOwor6Zu9PnjDrW5nfFwgOwor6Zu8PmTDoG5nfFwgOwor6Zu7PmRpw6BufFwgOwor6Zu6Pm3DqW5nfFwgOwor6ZuxPnDDoW5nfFwgOwor6ZudPnlvbmd8XCA7Civpm5o+Z3XDoG58XCA7Civpm5Q+Y2jDs3V8XCA7Civpm4g+aHXDoW58XCA7Civpmr8+cWlhb3xcIDsKK+matD5sxY9uZ3xcIDsKK+maqj54acSDbnxcIDsKK+mapT5kw6huZ3xcIDsKK+mamj50w6FuZ3xcIDsKK+mZvz5zaMSDbnxcIDsKK+mZvj5yw6luZ3xcIDsKK+mZvT55w6FuZ3xcIDsKK+mZuj54acSDbnxcIDsKK+mZsz5jaMOpbnxcIDsKK+mZpT54acOgbnxcIDsKK+mZoz56aMOobnxcIDsKK+mZnT5zaMSDbnxcIDsKK+mZnD5zaMSDbnxcIDsKK+mZmT5jaMO6bnxcIDsKK+mZmD54w61uZ3xcIDsKK+mZlz5qw6xuZ3xcIDsKK+mZgz5ixK1uZ3xcIDsKK+mYrT5qdcOgbnxcIDsKK+mYrD5rZW5nfFwgOwor6ZibPmh1w6FufFwgOwor6ZekPmh1w6FufFwgOwor6ZejPmTDoG5nfFwgOwor6ZehPmNoxINufFwgOwor6ZedPnBpw6FvfFwgOwor6ZecPmd1YW58XCA7Civpl5c+Z3VhbnxcIDsKK+mXkD50acOhbnxcIDsKK+mWsz5jaMSDbnxcIDsKK+mWrj50w61uZ3xcIDsKK+mWrT5sdVw6zIF8XCA7Civplqw+bMSDbmd8XCA7Civplqc+aMOybmd8XCA7CivplqI+Z3VhbnxcIDsKK+mWnj5iacOgbnxcIDsKK+mWmz5wZW5nfFwgOwor6ZaaPmppYW58XCA7CivplpM+amlhbnxcIDsKK+mWkj5qacOgbnxcIDsKK+mWkT54acOhbnxcIDsKK+mWjj5ow7NuZ3xcIDsKK+mWjT5iZW5nfFwgOwor6ZaMPmvDoG5nfFwgOwor6ZaDPnNoxINufFwgOwor6ZW9PmxpxINvfFwgOwor6ZW1PmNow6FufFwgOwor6ZWuPmh1w6FufFwgOwor6ZWpPmN1w6BufFwgOwor6ZWoPmN1YW58XCA7CivplZ8+eHXDoG58XCA7CivplZo+YsOobmd8XCA7CivplZU+csOzbmd8XCA7CivplYs+dMSDbmd8XCA7CivplLM+eWluZ3xcIDsKK+mUkz5xaWFufFwgOwor6ZO0PnTDoG5nfFwgOwor6ZOmPnhpYW58XCA7Civpk5M+bcOhbmd8XCA7Civpk48+eMOtbmd8XCA7Civpkpg+eMOtbmd8XCA7Civpkow+ZGnEg298XCA7CivpkoI+dMSDbmd8XCA7Civpkb4+bHXDoW58XCA7Civpkb0+enVhbnxcIDsKK+mRuT5jdcOgbnxcIDsKK+mRtj5jw6FuZ3xcIDsKK+mRtT5ndcOgbnxcIDsKK+mRsT5jaMOhbnxcIDsKK+mRrz5qaWFufFwgOwor6ZGsPmppw6BufFwgOwor6ZGoPmzDs25nfFwgOwor6ZGjPmJpYW98XCA7CivpkaI+bHVcOsyAfFwgOwor6ZGhPmNodcOyfFwgOwor6ZGgPnNodcOyfFwgOwor6ZGdPnDDqW5nfFwgOwor6ZGaPnp1w6BufFwgOwor6ZGSPmppw6BufFwgOwor6ZGRPmppw6BufFwgOwor6ZGPPm7DrW5nfFwgOwor6ZGNPnlpbmd8XCA7CivpkYs+ccOsbmd8XCA7CivpkYY+emh1w6x8XCA7CivpkYU+aMOpbmd8XCA7CivpkYM+ZGnDoG98XCA7CivpkYE+em9uZ3xcIDsKK+mQtj5odcOhbnxcIDsKK+mQsj56aHXDs3xcIDsKK+mQsT5xaWFufFwgOwor6ZCwPnFpYW98XCA7CivpkK8+emh1w7N8XCA7CivpkK4+bGnDoW58XCA7CivpkKs+anVhbnxcIDsKK+mQpz5qacSDbnxcIDsKK+mQpT5qaWFufFwgOwor6ZCkPmTErW5nfFwgOwor6ZCbPnnDrG5nfFwgOwor6ZCZPmTDqG5nfFwgOwor6ZCXPmppxINufFwgOwor6ZCVPmTDqG5nfFwgOwor6ZCQPmxpw6FvfFwgOwor6ZCOPmppYW98XCA7CivpkIw+bGnDoG98XCA7CivpkIs+dMOgbmd8XCA7CivpkIo+ecOhbmd8XCA7CivpkIk+cXVhbnxcIDsKK+mQiD5xacOhb3xcIDsKK+mQhD5ow6luZ3xcIDsKK+mPsD5iw6huZ3xcIDsKK+mPrj5rYW5nfFwgOwor6Y+pPmppw6BufFwgOwor6Y+nPmzDs25nfFwgOwor6Y+mPmNvbmd8XCA7Civpj6U+amnDoG58XCA7Civpj6I+Ymlhb3xcIDsKK+mPoT5qw6xuZ3xcIDsKK+mPoD5mZW5nfFwgOwor6Y+fPmNoxINufFwgOwor6Y+ePnlvbmd8XCA7Civpj5w+dGFuZ3xcIDsKK+mPlz5rZW5nfFwgOwor6Y+UPmJpYW98XCA7Civpj5M+Y29uZ3xcIDsKK+mPkj5xaWFvfFwgOwor6Y+IPmxpw6BufFwgOwor6Y+HPnh1w6BufFwgOwor6Y+GPmd1w6BufFwgOwor6Y+EPnR1w6FufFwgOwor6Y64Pmp1YW58XCA7CivpjrI+dMSDbmd8XCA7CivpjrE+eXXDoW58XCA7Civpjq8+bMOhbmd8XCA7Civpjq4+emjDqG58XCA7Civpjq0+dGnDoW58XCA7Civpjqo+amnEg258XCA7CivpjqU+dGnDoW98XCA7CivpjqA+Z2FuZ3xcIDsKK+mOnz5zxINuZ3xcIDsKK+mOmj5jaHXDrXxcIDsKK+mOlT50w6FuZ3xcIDsKK+mOlD5yw7NuZ3xcIDsKK+mOkz53ZW5nfFwgOwor6Y6MPmxpw6FufFwgOwor6Y6KPmLDoG5nfFwgOwor6Y6IPmNodW98XCA7Civpjb0+YmlhbnxcIDsKK+mNvD56aGVufFwgOwor6Y25Pnh1YW58XCA7CivpjbU+amnDoG58XCA7CivpjbQ+ZHVhbnxcIDsKK+mNsz5qacOgbnxcIDsKK+mNsD5odcOhbnxcIDsKK+mNrz5jb25nfFwgOwor6Y2sPnFpYW98XCA7Civpjas+cWlhb3xcIDsKK+mNqT50acSDbnxcIDsKK+mNpz5ob25nfFwgOwor6Y2jPnpoYW98XCA7CivpjZ8+eGluZ3xcIDsKK+mNnj5rZW5nfFwgOwor6Y2bPmR1w6BufFwgOwor6Y2aPnnDoW5nfFwgOwor6Y2ZPmjDsm5nfFwgOwor6Y2WPmNoxJVufFwgOwor6Y2QPmNvbmd8XCA7CivpjYw+eGnEg258XCA7CivpjYo+bGnDoG58XCA7CivpjYE+eGlhbnxcIDsKK+mMtj5iacSDb3xcIDsKK+mMsz5txJVuZ3xcIDsKK+mMsT56aGVufFwgOwor6YysPmRpYW98XCA7CivpjKo+dGnEg258XCA7CivpjKc+Z3XEg258XCA7CivpjKM+emh1w6x8XCA7CivpjKI+cWnDoW58XCA7CivpjKA+ZMOsbmd8XCA7CivpjJ4+Y2jDum58XCA7CivpjJ0+Y2jDum58XCA7CivpjJg+Y2h1w618XCA7CivpjJA+emh1aXxcIDsKK+mMiz5ww6luZ3xcIDsKK+mMiD5iw6huZ3xcIDsKK+mLvT5kacOgb3xcIDsKK+mLvD5nYW5nfFwgOwor6Yu7Pmppw6BufFwgOwor6Yu6Pnl1YW58XCA7Civpi6k+bcOhbmd8XCA7Civpi6U+esOobmd8XCA7Civpi6A+c2jDqG58XCA7Civpi58+cWlhbnxcIDsKK+mLnj54w61uZ3xcIDsKK+mLnT5sdVw6w6h8XCA7Civpi5w+emh1w7N8XCA7Civpi5s+Z8WPbmd8XCA7Civpi5c+eHVhbnxcIDsKK+mLkz5jaGFufFwgOwor6YuSPmZlbmd8XCA7Civpi5E+Y3VhbnxcIDsKK+mLkD5ow7NuZ3xcIDsKK+mLjD5kw6xuZ3xcIDsKK+mLiz5jaMOhbnxcIDsKK+mLgz5sw6FuZ3xcIDsKK+mLgT5sdVw6zIZ8XCA7Civpir4+Z8WPbmd8XCA7Civpiro+esOgbmd8XCA7Civpirc+eGlhb3xcIDsKK+mKtT5rZW5nfFwgOwor6YqxPmRpw6BvfFwgOwor6YqtPnFpw6FufFwgOwor6YqcPnhpw6FufFwgOwor6YqbPnhpYW58XCA7Civpipo+ZGnDoG98XCA7Civpipg+bcOtbmd8XCA7CivpipM+cXXDoW58XCA7CivpipI+amlhbnxcIDsKK+mKkT54acSDbnxcIDsKK+mKjz5zaMOgbnxcIDsKK+mKhT50w7NuZ3xcIDsKK+mKgj56aG91fFwgOwor6Ym8PmLErW5nfFwgOwor6Ym4PmppxINvfFwgOwor6Ym3PmjDs25nfFwgOwor6Ym2PnjDrW5nfFwgOwor6Ym1PnTDs25nfFwgOwor6YmuPnNoZW58XCA7CivpiaA+eWFuZ3xcIDsKK+mJmz5xaWFufFwgOwor6YmZPnpoxINpfFwgOwor6YmXPnFpw6FufFwgOwor6YmKPnpoYW98XCA7CivpiYY+emhlbnxcIDsKK+mIvz5kacOgbnxcIDsKK+mItT5iw6xuZ3xcIDsKK+mItD5sw61uZ3xcIDsKK+mIpz5rw6BuZ3xcIDsKK+mInD5ow7NuZ3xcIDsKK+mIlD5jaGFvfFwgOwor6YiTPmNoxINvfFwgOwor6YiQPnFpw6FufFwgOwor6YiEPnFpYW58XCA7CivpiIM+eMOtbmd8XCA7CivpiII+Y2jDqW58XCA7CivpiIE+ZmFuZ3xcIDsKK+mHvD5qacOgbnxcIDsKK+mHuj5xaWFufFwgOwor6Ye5Pm51XDrMhnxcIDsKK+mHtT5jaGFpfFwgOwor6YevPm3DoW5nfFwgOwor6YetPmdhbmd8XCA7Civph6Q+c2hhbnxcIDsKK+mHoz5kacOgb3xcIDsKK+mHoD5sdcOgbnxcIDsKK+mHnT56aGVufFwgOwor6YeYPmRpbmd8XCA7Civph5c+emhhb3xcIDsKK+mHlT5sacSDb3xcIDsKK+mHhj5iacOgbnxcIDsKK+mHgj5qacOgb3xcIDsKK+mGvT5sw61uZ3xcIDsKK+mGuz5jaMOzdXxcIDsKK+mGtj5qacOgb3xcIDsKK+mGsj5uw7NuZ3xcIDsKK+mGpj5zaMSDbnxcIDsKK+mGpT5wacSDb3xcIDsKK+mGnz55w7JuZ3xcIDsKK+mGnD5jaMWPdXxcIDsKK+mGlT5jaMO6bnxcIDsKK+mGij5jaHXDsnxcIDsKK+mGhj56aMSDbnxcIDsKK+mFpz5jaMOzdXxcIDsKK+mFnz50aWFufFwgOwor6YWZPnpoZW58XCA7CivphY4+emjDsnV8XCA7CivphYQ+aHVhbnxcIDsKK+mFgT5jaMOhbnxcIDsKK+mEvT5jaMOhbnxcIDsKK+mEuz5sacSDbnxcIDsKK+mEuD5tw6luZ3xcIDsKK+mEtz5mZW5nfFwgOwor6YS2Pmt1w6BpfFwgOwor6YSrPmPDqW5nfFwgOwor6YSnPmTDqG5nfFwgOwor6YSlPnFpYW98XCA7CivphKE+cWlhb3xcIDsKK+mEnT5sacSDb3xcIDsKK+mEmz5jaMOhb3xcIDsKK+mEmD55b25nfFwgOwor6YSNPm3DrW5nfFwgOwor6YSMPnTDoW5nfFwgOwor6YO7PnFpYW98XCA7Civpg7o+eW9uZ3xcIDsKK+mDsT5ww61uZ3xcIDsKK+mDrD5xaW5nfFwgOwor6YOgPmfElW5nfFwgOwor6YOePmzDoW5nfFwgOwor6YOJPnjDrW5nfFwgOwor6YOGPmh1w6FufFwgOwor6YK0PmLErW5nfFwgOwor6YKrPmJhbmd8XCA7Civpgqc+eXXDoW58XCA7CivpgqU+c2jElW58XCA7Civpgp8+a8Ogbmd8XCA7CivpgpY+a8Ohbmd8XCA7Civpgo0+eXXDoW58XCA7Civpgoo+YmlhbnxcIDsKK+mCiT5iaWFufFwgOwor6YKGPnTDqW5nfFwgOwor6YKFPnpoYW58XCA7Civpgbw+bGnDoW98XCA7Civpgbg+eHXEg258XCA7Civpgbc+cWlhbnxcIDsKK+mBpj5ndcOgbnxcIDsKK+mBoT5xacOgbnxcIDsKK+mBoD55dcSDbnxcIDsKK+mBiT56aGVufFwgOwor6YC/PmTDoG5nfFwgOwor6YC6Pnl1xINufFwgOwor6YC0PmNodcOyfFwgOwor6YCxPnpob3V8XCA7CivpgKw+YsOobmd8XCA7CivpgKM+bGnDoW58XCA7CivpgJU+asOsbmd8XCA7Civov7U+dMOzbmd8XCA7Civov6w+d8SDbmd8XCA7Civov6c+Y2jDqW58XCA7Civov5I+aMOhbmd8XCA7Civov40+emh1bnxcIDsKK+i/iz53w6BuZ3xcIDsKK+i+vz5jaGFufFwgOwor6L66PmJpYW58XCA7Civovrg+csOpbmd8XCA7CivovrU+Y2h1w7J8XCA7CivovrQ+emjElW58XCA7CivovrM+bsOzbmd8XCA7CivovrI+bsOzbmd8XCA7Civovq8+YmnDoG58XCA7Civovq4+YmnDoG58XCA7Civovqc+YmnDoG58XCA7CivovqE+YmnDoG58XCA7CivovoA+emhvdXxcIDsKK+i9nz5ob25nfFwgOwor6L2ePnhpw6BufFwgOwor6L2YPmh1w6BufFwgOwor6L2PPnpow6BufFwgOwor6L2OPmppw6BvfFwgOwor6L2IPmNow6FvfFwgOwor6L2FPnl1w6FufFwgOwor6Ly+PnpoxINufFwgOwor6Ly3Pmhvbmd8XCA7CivovLQ+Y2h1bnxcIDsKK+i8sT54acOhbnxcIDsKK+i8sD55w6FuZ3xcIDsKK+i8rz5jaHVufFwgOwor6LytPnJ1xINufFwgOwor6LyoPmd1xINufFwgOwor6LynPnBpw6FufFwgOwor6LymPm5pxINufFwgOwor6LykPnFpw6BufFwgOwor6LyjPnDDqW5nfFwgOwor6LyfPmNodcOyfFwgOwor6LyePnfEg25nfFwgOwor6LyaPnpow6BufFwgOwor6LyYPmzDrW5nfFwgOwor6LyWPmzDqW5nfFwgOwor6LyVPnFpbmd8XCA7CivovJE+ccOsbmd8XCA7CivovJA+aHXEg258XCA7CivovI4+c2hhb3xcIDsKK+i8iD56aG91fFwgOwor6LyHPnF1w6FufFwgOwor6LyGPmNodW58XCA7CivovIM+amnDoG98XCA7Civou78+cMOtbmd8XCA7Civou70+cGVuZ3xcIDsKK+i7uD56aMOzdXxcIDsKK+i7tT5yxY9uZ3xcIDsKK+i7qz56aMSVbnxcIDsKK+i7qD5sw61uZ3xcIDsKK+i7oz5ob25nfFwgOwor6LufPnJ1xINufFwgOwor6LuZPmNow6lufFwgOwor6LuVPnNoYW58XCA7Civou5I+eHVhbnxcIDsKK+i6vz5rYW5nfFwgOwor6Lq0PmzDoW5nfFwgOwor6LqzPmdvbmd8XCA7CivouqY+enVhbnxcIDsKK+i6pT5jdWFufFwgOwor6LqfPnLDoW5nfFwgOwor6LqaPnhpYW58XCA7Civoupg+bMOzbmd8XCA7CivoupY+ZHXDoG58XCA7CivoupQ+Y2jDoW58XCA7Civouoo+Y2jDs3V8XCA7Civouog+cWnDoG98XCA7CivouoY+Y2h1w7J8XCA7Civoubs+cWlhb3xcIDsKK+i5uj5xaWFvfFwgOwor6LmoPm5pxINufFwgOwor6LmlPmxpw6FufFwgOwor6LmkPnpvbmd8XCA7CivouZo+dGFuZ3xcIDsKK+i5mD5sacOhb3xcIDsKK+i5jT5uacSDbnxcIDsKK+i4vD50w6FuZ3xcIDsKK+i4uj5qacOgbnxcIDsKK+i4uD5jaMSVbnxcIDsKK+i4tz5kdcOgbnxcIDsKK+i4tD55xY9uZ3xcIDsKK+i4sz5jaMWtbnxcIDsKK+i4qz5ww6huZ3xcIDsKK+i4oT5xdcOhbnxcIDsKK+i4nD5sw6huZ3xcIDsKK+i4kj5jaHVvfFwgOwor6LiQPmppw6BufFwgOwor6LiNPnFpYW98XCA7CivouIs+amnEg298XCA7CivouIc+bMOgbmd8XCA7CivouIM+eGlhb3xcIDsKK+i4gT5qw6xuZ3xcIDsKK+i3sD5iw6huZ3xcIDsKK+i3pz5xdcOhbnxcIDsKK+i3iD5uacSDbnxcIDsKK+i2vT5mw6BuZ3xcIDsKK+i2uz5jaMSVbnxcIDsKK+i2rT5qacOgb3xcIDsKK+i2rD5xacOhb3xcIDsKK+i2qz5xacOhb3xcIDsKK+i2oD5jaMOgb3xcIDsKK+i2nT5qacOgbnxcIDsKK+i2mT56aMOgb3xcIDsKK+i2kj5kacOgb3xcIDsKK+i2iD56aGFufFwgOwor6LaCPmNow6hufFwgOwor6LaAPmNow6lufFwgOwor6LW7PnhpxINufFwgOwor6LW4PnNow6BufFwgOwor6LWvPnTDoW5nfFwgOwor6LWXPmbDqG5nfFwgOwor6LWSPnpob3V8XCA7CivotKA+eXXDoW58XCA7CivotJo+bMOybmd8XCA7CivotJk+eHXDoG58XCA7CivotJM+emFuZ3xcIDsKK+i0jz55w61uZ3xcIDsKK+i0jT5zaMOgbnxcIDsKK+i0iD56w6huZ3xcIDsKK+i0hj5iaWFvfFwgOwor6LSFPnpodcOsfFwgOwor6LSCPmNoxJVufFwgOwor6LO/Pmxpw6FvfFwgOwor6LO2PmPDoG5nfFwgOwor6LO1PmbDqG5nfFwgOwor6LOpPmPDs25nfFwgOwor6LOoPmPDs25nfFwgOwor6LOkPmppw6BufFwgOwor6LOiPnhpw6FufFwgOwor6LOhPmdlbmd8XCA7Civos58+dGnEg258XCA7Civos50+Y2hlbnxcIDsKK+izmT56aG91fFwgOwor6LOYPnphbmd8XCA7Civos5E+emjDqG58XCA7Civos48+ecOsbmd8XCA7Civos44+amnDoG58XCA7Civos4Y+cGnDoW58XCA7CivosrY+YmnEg258XCA7CivosrU+cGnEg258XCA7Civosqs+Z3XDoG58XCA7CivosqU+aMOhbmd8XCA7CivosqI+Z8Oybmd8XCA7Civosp8+eXXDoW58XCA7Civosp4+emhlbnxcIDsKK+iymz5odWFufFwgOwor6LKSPnR1YW58XCA7CivosoY+aHXDoW58XCA7Civosbw+aHVhbnxcIDsKK+ixtT56b25nfFwgOwor6LGyPmh1w6FufFwgOwor6LGjPmppYW58XCA7CivosZw+amlhbnxcIDsKK+ixkD5mZW5nfFwgOwor6LGPPnhpw6BufFwgOwor6LGLPmRlbmd8XCA7CivosYo+ZmVuZ3xcIDsKK+ixhT5sw7NuZ3xcIDsKK+iwvj5ob25nfFwgOwor6LC8PmjDs25nfFwgOwor6LC5PmjDs25nfFwgOwor6LCrPmppxINufFwgOwor6LCePnFpw6BufFwgOwor6LCJPnNoxJVufFwgOwor6LCCPnNoxJVufFwgOwor6K+qPnpob3V8XCA7Civorrs+csOzbmd8XCA7Civorp0+aMOybmd8XCA7Civorpw+ZMSDbmd8XCA7Civorpk+aHVhbnxcIDsKK+iulj5jaMOobnxcIDsKK+iukz5yw6BuZ3xcIDsKK+iukj5jaMOhbnxcIDsKK+iukD5jaMOzdXxcIDsKK+iujj5jaMOzdXxcIDsKK+iuij5iacOgbnxcIDsKK+iuhz5jaMSDbnxcIDsKK+iuhT5zaMSVbnxcIDsKK+iugj54dcOgbnxcIDsKK+itvj5qacSDbnxcIDsKK+itvD5qacOgbnxcIDsKK+ituz55aW5nfFwgOwor6K26PmppYW58XCA7Civorbg+emhvdXxcIDsKK+ittT56aHXDrHxcIDsKK+ittD5xacSDbnxcIDsKK+itsj5yw6BuZ3xcIDsKK+itsT5zaMOgbnxcIDsKK+itqz56aGFufFwgOwor6K2nPmxpw6FufFwgOwor6K2lPmppw6BvfFwgOwor6K2jPnFpYW58XCA7CivoraE+ZMSDbmd8XCA7CivorZ4+eHVhbnxcIDsKK+itmT5xacOhb3xcIDsKK+itkT5qacSDb3xcIDsKK+itjT55w6xuZ3xcIDsKK+ithD56ZW5nfFwgOwor6K2CPmNoxINufFwgOwor6Ky/PmNow6FvfFwgOwor6Ky2PnpodcOzfFwgOwor6KywPmxpw6FufFwgOwor6KytPmppxINufFwgOwor6KylPmPDsm5nfFwgOwor6KykPmJpYW98XCA7CivorJ8+ccStbmd8XCA7CivorJw+eXXDoG58XCA7CivorJk+cWlhbnxcIDsKK+islz5iw6BuZ3xcIDsKK+islT5xacOgbnxcIDsKK+iskz5jaGVufFwgOwor6KyNPnnDrW5nfFwgOwor6KyGPnNow6BufFwgOwor6KyEPnTDqW5nfFwgOwor6Ku8Pnh1YW58XCA7Civoq7s+aGVuZ3xcIDsKK+iruT5jaMSDb3xcIDsKK+irtz5mw6huZ3xcIDsKK+irtj5jaMOpbnxcIDsKK+irtD54acOhbnxcIDsKK+irqz5qacOgbnxcIDsKK+irqj50w61uZ3xcIDsKK+iroD54dWFufFwgOwor6KuePnBpxINufFwgOwor6KuaPnBpw6FufFwgOwor6KuZPmh1w6BpfFwgOwor6KuYPmJpxINvfFwgOwor6KuXPnNoxJVufFwgOwor6KuTPmppw6BufFwgOwor6KuRPnpodcOzfFwgOwor6KuMPmTFj25nfFwgOwor6KuLPnHErW5nfFwgOwor6KuIPnpodcOsfFwgOwor6KuEPnpodW58XCA7Civoq4M+Y2hlbnxcIDsKK+irgj5jaMSDbnxcIDsKK+irgT5jaHXDsnxcIDsKK+iqvz5kacOgb3xcIDsKK+iquD54dcOhbnxcIDsKK+iqtz53xINuZ3xcIDsKK+iqtT54acOhb3xcIDsKK+iqtD5jw7NuZ3xcIDsKK+iqsD5zaMOpaXxcIDsKK+iqrD5zaHVvfFwgOwor6KqrPnNodcOsfFwgOwor6KqqPnNodcOsfFwgOwor6KqpPmrDrG5nfFwgOwor6KqmPnPDsm5nfFwgOwor6KqiPnhpw6BufFwgOwor6KqcPnNodcOgfFwgOwor6KqaPnFpw6BvfFwgOwor6KqZPmjDqW5nfFwgOwor6KqXPmNow6FufFwgOwor6KqUPnTErW5nfFwgOwor6KqPPmzEg25nfFwgOwor6KqCPnRpxINvfFwgOwor6KqBPmLElW5nfFwgOwor6Km2PmNow7N1fFwgOwor6Km1PnNoZW58XCA7Civoqa4+cXXDoW58XCA7Civoqag+amlhb3xcIDsKK+ipoD55xY9uZ3xcIDsKK+iplT5ww61uZ3xcIDsKK+iplD56aMOgb3xcIDsKK+ipiz56aMOydXxcIDsKK+iphT5sw61uZ3xcIDsKK+ipgz5xdcSDbnxcIDsKK+iouj56aMSVbnxcIDsKK+iotz5zaGVufFwgOwor6KiuPnhpYW58XCA7CivoqKw+Y2hhb3xcIDsKK+ioqj5mxINuZ3xcIDsKK+iopj5jaMOpbnxcIDsKK+iopD54acOhb3xcIDsKK+ionz5zw7JuZ3xcIDsKK+iolT5zaMOgbnxcIDsKK+iojD5ow7NuZ3xcIDsKK+ioiz5kacOgb3xcIDsKK+iohj5qacOgb3xcIDsKK+iogj5kw6xuZ3xcIDsKK+iogT5oZW5nfFwgOwor6Ke1Pmdvbmd8XCA7Civop7I+eGluZ3xcIDsKK+inqj54aW5nfFwgOwor6KeYPmNow6BvfFwgOwor6KeNPnRpxINufFwgOwor6KeAPmd1YW58XCA7Civopro+amnDoG98XCA7Civoprk+amnDoG98XCA7Civoprg+amnDoG58XCA7CivoprU+amnDoG58XCA7CivoprQ+ZGVuZ3xcIDsKK+imsz5ndWFufFwgOwor6KaxPnpow6BufFwgOwor6KauPnnDrW5nfFwgOwor6KatPm3DrW5nfFwgOwor6KalPnRpxINufFwgOwor6KaiPnNoxINufFwgOwor6KadPmxpw6FufFwgOwor6KacPnRpw6BvfFwgOwor6KaYPnpoYW58XCA7CivoppE+cGnEg258XCA7CivoppA+amnDoG98XCA7Civopo0+YmnDoG58XCA7Civopow+Z3VhbnxcIDsKK+imiz5qacOgbnxcIDsKK+imhT5iacOgb3xcIDsKK+imgj5mxJVuZ3xcIDsKK+iluj5qacSDbnxcIDsKK+ilsz54aWFufFwgOwor6KWxPmzDs25nfFwgOwor6KWvPmNow6hufFwgOwor6KWgPmRhbmd8XCA7CivopZ0+bGnDoG58XCA7CivopZw+Y2hhbnxcIDsKK+ilmz5uw7NuZ3xcIDsKK+ilmD5jaGFufFwgOwor6KWJPmppw6BufFwgOwor6KWHPmppxINufFwgOwor6KS+PmJpxINvfFwgOwor6KS4Pmx1XDrMhnxcIDsKK+iksz5sacOhbnxcIDsKK+iksT5odcOhaXxcIDsKK+iksD5xaWFufFwgOwor6KSuPnlpbmd8XCA7CivopK0+bmnEg298XCA7CivopKw+c8SDbmd8XCA7CivopKQ+eXXDoG58XCA7CivopKM+csOzbmd8XCA7CivopKI+aHXDoWl8XCA7CivopJY+dHXDoG58XCA7CivopJE+eXXDoG58XCA7CivopI0+ZHVhbnxcIDsKK+ikiT5waWFufFwgOwor6KO3Pnl1YW58XCA7Civoo68+Y2jDs3V8XCA7Civoo6w+bMOtbmd8XCA7Civoo6s+eXXDoG58XCA7Civoo6c+Y2hhbnxcIDsKK+ijnj5zaHXDrHxcIDsKK+ijlz5sacSDbnxcIDsKK+ijlj56aMSVbnxcIDsKK+ijkT5zaGVufFwgOwor6KOQPmp1YW58XCA7Civoo4o+bmnEg298XCA7Civooqg+eGnDoG58XCA7Civoopc+emjElW58XCA7CivoopE+c2jDoG98XCA7Civoooo+bMStbmd8XCA7CivooaA+emh1bnxcIDsKK+ihmD54acOhbnxcIDsKK+ihlj5sw7JuZ3xcIDsKK+ihlT50w7JuZ3xcIDsKK+ihkj54dcOgbnxcIDsKK+ihkT5sw61uZ3xcIDsKK+ihjz55dcOgbnxcIDsKK+ihiT5ow6FuZ3xcIDsKK+iguD5xdcOhbnxcIDsKK+igsz55aW5nfFwgOwor6KCvPmLDqG5nfFwgOwor6KCtPmZlbmd8XCA7CivooKw+bMOzbmd8XCA7CivooKo+bMOzbmd8XCA7CivooKg+eGlhb3xcIDsKK+iglz56aHXDs3xcIDsKK+igkj5qacSDbnxcIDsKK+igkT5yw7NuZ3xcIDsKK+igjj5txINuZ3xcIDsKK+igiT54dWFufFwgOwor6KCGPmNow6BpfFwgOwor6KCFPnnDrW5nfFwgOwor6KCEPm3ElW5nfFwgOwor6J+6PnNow6BufFwgOwor6J+3PmRhbmd8XCA7Civon60+amlhb3xcIDsKK+ifrD5jaMOhbnxcIDsKK+ifnz5sacOhb3xcIDsKK+ifnD5qacSDb3xcIDsKK+ifmz5ww6luZ3xcIDsKK+ifmj5ww6luZ3xcIDsKK+ifjz54aWFvfFwgOwor6J+MPmNvbmd8XCA7Civon4k+bGnDoG98XCA7Civon4I+amlhb3xcIDsKK+ieuT5qacOgbnxcIDsKK+ieuD5jaMOhbnxcIDsKK+ietj5iw6huZ3xcIDsKK+ietD5jaMOpbnxcIDsKK+iepT5jYW5nfFwgOwor6J6jPnTDqW5nfFwgOwor6J6iPnnDrW5nfFwgOwor6J6OPnLDs25nfFwgOwor6J6KPmxpw6FufFwgOwor6J6JPndlbmd8XCA7Civonb8+ecOtbmd8XCA7Civona8+eXXDoW58XCA7Civonaw+em9uZ3xcIDsKK+idqj50YW5nfFwgOwor6J2hPnJ1xINufFwgOwor6J2dPnl1w6FufFwgOwor6J2WPnh1YW58XCA7CivonZI+bWnDoW58XCA7CivonY8+dMOtbmd8XCA7CivonYY+ecSDbmd8XCA7CivonYQ+d8SDbmd8XCA7CivonYA+ZG9uZ3xcIDsKK+icuD5qaW5nfFwgOwor6Jy1Pmp1xINufFwgOwor6JyvPmLDoG5nfFwgOwor6JyZPnNvbmd8XCA7CivonJQ+ZGnDoG58XCA7CivonI4+eXVhbnxcIDsKK+iciz5sw6FuZ3xcIDsKK+ichj54acSDbnxcIDsKK+ichD56aMOobnxcIDsKK+icgT54dcOhbnxcIDsKK+ibtT54aW5nfFwgOwor6JusPmfFj25nfFwgOwor6JunPnfEg25nfFwgOwor6JulPmfFj25nfFwgOwor6JuiPnDDrW5nfFwgOwor6JudPnhpw6FufFwgOwor6JuWPm3DoW5nfFwgOwor6JuNPnnDrW5nfFwgOwor6JuDPmLErW5nfFwgOwor6JuBPmRpYW98XCA7Civomr8+eGnDoW58XCA7CivomrI+cMOtbmd8XCA7Civomqs+cGnDoW98XCA7CivomqI+aMOhbmd8XCA7Civomp8+d8Ohbmd8XCA7Civomog+cWlhbnxcIDsKK+iahD5iw6huZ3xcIDsKK+iZuD5nw7JuZ3xcIDsKK+iZrT5kaWFvfFwgOwor6JmmPnpow6BufFwgOwor6JmlPnpow6BufFwgOwor6JmgPmppxINvfFwgOwor6JmTPnhpYW98XCA7CivomYo+bHXDoW58XCA7CivomYg+eGlhb3xcIDsKK+iZhz5xdcSDbnxcIDsKK+iZgz5qaWFufFwgOwor6Ji+Pmh1w6BpfFwgOwor6Ji5Pmh1w6BpfFwgOwor6Ji0PmZlbmd8XCA7CivomK8+ZMOgbmd8XCA7CivomKg+aHXDoWl8XCA7CivomKY+bMOtbmd8XCA7CivomKI+bMOzbmd8XCA7CivomKE+eWluZ3xcIDsKK+iYnz5sxY9uZ3xcIDsKK+iYnj5sacOhbnxcIDsKK+iYnT5sacOgbnxcIDsKK+iYmj54acSDbnxcIDsKK+iYmD5yw6FuZ3xcIDsKK+iYkD54aWFufFwgOwor6JiJPm3DoW5nfFwgOwor6Je9PmNow6hufFwgOwor6Je8Pnh1YW58XCA7Civol64+cWnDoW98XCA7Civol6g+Ymlhb3xcIDsKK+iXpz5iaWFvfFwgOwor6JegPnhpw6BvfFwgOwor6JeYPmx1XDrMgXxcIDsKK+iXlj54acOhbnxcIDsKK+iXkT5qacOgb3xcIDsKK+iXiz5kacOgb3xcIDsKK+iXij5iacSDbnxcIDsKK+iXhj5qacSDbnxcIDsKK+iXgj5jw7JuZ3xcIDsKK+iXgD55w61uZ3xcIDsKK+iWvT56aGVufFwgOwor6Ja8PmNow6lufFwgOwor6Ja7PmPDs25nfFwgOwor6Ja4PnBpYW98XCA7CivolrU+Y2jDs3V8XCA7CivolrQ+bsOpbmd8XCA7CivolqY+amnDoG58XCA7CivolqE+ZMStbmd8XCA7Civolp8+bGnEg258XCA7Civolpo+dMOhbmd8XCA7Civolpc+eXXDoW58XCA7CivolpU+bGnDoW58XCA7CivolpM+c2hlbnxcIDsKK+iWkD5sw6luZ3xcIDsKK+iWjT5sdcOgbnxcIDsKK+iVvz54dWFufFwgOwor6JW9Pm7Ds25nfFwgOwor6JW2PmzDrW5nfFwgOwor6JWzPmppYW58XCA7Civola8+bMOzbmd8XCA7Civola0+eGlhb3xcIDsKK+iVqz5kxY9uZ3xcIDsKK+iVqT5kw6BuZ3xcIDsKK+iVoz5zaMO5bnxcIDsKK+iVoD5rdcOgaXxcIDsKK+iVmz50w6luZ3xcIDsKK+iVkT5qaWFufFwgOwor6JWOPnFpw6FvfFwgOwor6JWLPmppYW98XCA7CivolYc+ZGnEg258XCA7CivolYY+Y2jEg258XCA7CivolYQ+bcOpbmd8XCA7CivolLk+bGnDoG58XCA7CivolLU+emFuZ3xcIDsKK+iUsz5xacOgbnxcIDsKK+iUrz5jaMOpbnxcIDsKK+iUrj5jw6FuZ3xcIDsKK+iUqj5qacOgbnxcIDsKK+iUpj5uacSDb3xcIDsKK+iUpT5jb25nfFwgOwor6JSZPnh1w6BufFwgOwor6JSIPmJpYW98XCA7CivolIY+bMOtbmd8XCA7Civok7Q+Y2jDum58XCA7Civok7E+cMOtbmd8XCA7Civok68+Y29uZ3xcIDsKK+iTrj5sacOhbnxcIDsKK+iTqj50b25nfFwgOwor6JOoPnRpYW98XCA7Civok6c+ZGnDoG98XCA7Civok6I+bMOhbmd8XCA7Civok44+dMOhbmd8XCA7Civok4g+bMOhbmd8XCA7Civokrw+Y2FuZ3xcIDsKK+iStj5jxINuZ3xcIDsKK+iStD5zaHXDsnxcIDsKK+iSrD55dWFufFwgOwor6JKoPnFpw6BufFwgOwor6JKnPmRpxINufFwgOwor6JKdPnl1w6FufFwgOwor6JKWPnpoZW58XCA7CivokpU+bcOhbmd8XCA7CivokpM+Y2jDum58XCA7Civokoc+Y2jEg258XCA7CivokoQ+Z3VhbnxcIDsKK+iRvj55dWFufFwgOwor6JG8Pnpvbmd8XCA7CivokbY+dMOtbmd8XCA7CivokbQ+emhlbnxcIDsKK+iRsj5xdcOhbnxcIDsKK+iRrj5kdcOgbnxcIDsKK+iRpT5xacOhbnxcIDsKK+iRoD5zaGVufFwgOwor6JGTPmjDs25nfFwgOwor6JGSPmjDs25nfFwgOwor6JGRPmZlbmd8XCA7CivokY8+amluZ3xcIDsKK+iRjj5sdVw6zIB8XCA7CivokYw+amlhbnxcIDsKK+iRgj5tacSDbnxcIDsKK+iQvj55w61uZ3xcIDsKK+iQuT5waWFufFwgOwor6JC3PnhpYW98XCA7CivokLY+Y2jFrW58XCA7CivokLI+eXXDoW58XCA7CivokLA+bGnDoG58XCA7CivokK4+eHVhbnxcIDsKK+iQoD5tw6luZ3xcIDsKK+iQlD50acOhb3xcIDsKK+iQiD5odcOhbnxcIDsKK+iQhT5jaHVufFwgOwor6JCCPmNoxa1ufFwgOwor6I++PnRpw6FufFwgOwor6I+6PmppYW58XCA7Civoj7Y+YsSVbmd8XCA7Civoj7U+cMOpbmd8XCA7Civoj64+Z2VuZ3xcIDsKK+iPqj5kw6BuZ3xcIDsKK+iPpD5qdcSDbnxcIDsKK+iPmj56aMOgbnxcIDsKK+iPmT5jaHXDrXxcIDsKK+iPlz5jaMOzdXxcIDsKK+iPhD5kb25nfFwgOwor6I+DPmd1YW58XCA7Civojr4+bcSDbmd8XCA7CivojrY+bGnEg258XCA7Civojqw+bWnEg258XCA7Civojqc+eGnDoG58XCA7CivojqY+c2hhb3xcIDsKK+iOoz53w6FuZ3xcIDsKK+iOmz50w61uZ3xcIDsKK+iOlj5qaW5nfFwgOwor6I6VPnjDrG5nfFwgOwor6I6UPm3DqW5nfFwgOwor6I6RPmZlbmd8XCA7CivojpA+Y2jDqW58XCA7CivojoQ+Z8SVbmd8XCA7CivojoA+Y2jDqW58XCA7Civoja4+emjDsnV8XCA7Civoja0+aMOzbmd8XCA7CivojZM+cGluZ3xcIDsKK+iNjT5zaG91fFwgOwor6I2KPmppbmd8XCA7CivojYE+aHXDoW58XCA7CivojLw+dMOzbmd8XCA7CivojLs+bcSDbmd8XCA7CivojJ4+Y2jDqW58XCA7CivojJ0+Y2jEg2l8XCA7CivojJk+csOzbmd8XCA7CivojJg+amnDoG58XCA7Civoi7M+ZG9uZ3xcIDsKK+iLsD5ow7NuZ3xcIDsKK+iLrj54aWFufFwgOwor6IuqPmLErW5nfFwgOwor6IuoPmNoYW58XCA7Civoi5o+ecOybmd8XCA7Civoi4E+Y29uZ3xcIDsKK+iLgD5ow6FuZ3xcIDsKK+iKvz5odcOhbnxcIDsKK+iKhj5jaGFpfFwgOwor6IqDPnDDqW5nfFwgOwor6IqBPmppYW98XCA7Civoibw+ZMStbmd8XCA7CivoibU+cMOtbmd8XCA7CivoibE+amlhbnxcIDsKK+iJrD5jaMOhbnxcIDsKK+iJpj5qacOgbnxcIDsKK+iJoT5kYW5nfFwgOwor6ImZPmNhbmd8XCA7CivoiZU+YsOgbmd8XCA7CivoiZE+YmnDoG58XCA7CivoiZA+em9uZ3xcIDsKK+iJjD5uacOgbnxcIDsKK+iJhj5sw6FuZ3xcIDsKK+iJgj5mw6luZ3xcIDsKK+iIvT5ww6FuZ3xcIDsKK+iIvD5ow7NuZ3xcIDsKK+iIsj5sw61uZ3xcIDsKK+iImD5ndcSDbnxcIDsKK+iIiD54aW5nfFwgOwor6IiDPnFpxINvfFwgOwor6Ie9Pnhpw6BufFwgOwor6Ie2Pmppw6BufFwgOwor6IexPm1pw6FufFwgOwor6IewPmNow7J1fFwgOwor6IerPmppxINvfFwgOwor6IekPnFpYW58XCA7Civoh6I+emFuZ3xcIDsKK+iHoD5sdcOhbnxcIDsKK+iHnz56w6BuZ3xcIDsKK+iHnD56YW5nfFwgOwor6IeXPmt1YW58XCA7Civoh5U+Ymlhb3xcIDsKK+iHlD54acOgbnxcIDsKK+iHkz56w6BuZ3xcIDsKK+iHiT5sacSDbnxcIDsKK+iHhz5qdcSDbnxcIDsKK+iHgT5sacOhbnxcIDsKK+iGvz5uw7NuZ3xcIDsKK+iGvj5rdcOgaXxcIDsKK+iGrz50ZW5nfFwgOwor6IauPnhpYW98XCA7Civohqs+bGnDoW98XCA7Civohqc+cMOobmd8XCA7CivohqU+Y2h1bnxcIDsKK+iGoD5qaWFvfFwgOwor6IafPmx1XDrMgHxcIDsKK+iGlj5wYW5nfFwgOwor6IaQPmJpYW98XCA7Civohos+bGnDoW98XCA7Civohoc+emh1w6x8XCA7CivohoU+dMOhbmd8XCA7CivohoE+bGnDoW58XCA7CivohbY+ZHXDoG58XCA7CivohbM+amnEg298XCA7CivohZ0+cnXEg258XCA7CivohZk+em9uZ3xcIDsKK+iFlj5kw7JuZ3xcIDsKK+iFjz5jaHXDsnxcIDsKK+iFjj5zaMOobnxcIDsKK+iFgT5wacOhbnxcIDsKK+iFgD5qdcOgbnxcIDsKK+iEvz5iaWFvfFwgOwor6IS9Pnpob3V8XCA7CivohLI+bmnDoG98XCA7CivohKc+anVhbnxcIDsKK+iEpT5xacSDbnxcIDsKK+iEpD5zaMOobnxcIDsKK+iEoz5jaMO6bnxcIDsKK+iEoT50xK1uZ3xcIDsKK+iEoD5jaGFufFwgOwor6ISdPmhlbmd8XCA7CivohJs+asOsbmd8XCA7CivohIE+dGnEg298XCA7Civog7s+aMOpbmd8XCA7Civog64+cMOhbmd8XCA7Civog6Y+a2VuZ3xcIDsKK+iDkz5ww61uZ3xcIDsKK+iDiz50acOhbnxcIDsKK+iCvD5qxK1uZ3xcIDsKK+iCuz5jaGVufFwgOwor6IK3PnFpYW58XCA7Civogqg+cMOgbmd8XCA7Civogpk+eXVhbnxcIDsKK+iCkj5odcOhbnxcIDsKK+iCiD56aMOgb3xcIDsKK+iCgT56aMOgb3xcIDsKK+iBvj5sw7NuZ3xcIDsKK+iBvT50aW5nfFwgOwor6IG8PnRpbmd8XCA7Civogbk+bsOtbmd8XCA7CivogbQ+dGluZ3xcIDsKK+iBsz5zxY9uZ3xcIDsKK+iBsD5jb25nfFwgOwor6IGvPmxpw6FufFwgOwor6IGuPmxpw6FufFwgOwor6IGsPnfElW5nfFwgOwor6IGrPmxpw6FufFwgOwor6IGmPmNvbmd8XCA7CivogaQ+dMOtbmd8XCA7CivogaE+Y29uZ3xcIDsKK+iBoD5ww61uZ3xcIDsKK+iBmT5qaW5nfFwgOwor6IGEPnpoxJVufFwgOwor6IC+PmjDs25nfFwgOwor6IC0PmRpbmd8XCA7CivogLI+aHXDoWl8XCA7CivogJY+Y2jDoG98XCA7CivogJM+dGluZ3xcIDsKK+iAjj5ydcSDbnxcIDsKK+e/vj54dWFufFwgOwor57+5PnFpw6FvfFwgOwor57+0Pmxpw6FufFwgOwor57+yPnBpYW98XCA7Civnv6o+em9uZ3xcIDsKK+e/pz54dWFufFwgOwor57+dPmjDs25nfFwgOwor57+QPnFpw6BvfFwgOwor57+DPmjDs25nfFwgOwor5763PmxpxINufFwgOwor5762PnNoYW58XCA7CivnvrQ+c2hhbnxcIDsKK+e+sT55dcOhbnxcIDsKK+e+rj5nZW5nfFwgOwor576sPnhpw6FufFwgOwor576oPnhpw6BufFwgOwor576mPmh1w6FufFwgOwor576iPnLDs25nfFwgOwor576gPnhpw6BufFwgOwor576YPnphbmd8XCA7CivnvpU+ecOgbmd8XCA7Civnvo8+ecOhbmd8XCA7Civnvok+bHXDoW58XCA7CivnvoQ+emjDoG98XCA7CivnvoI+anXDoG58XCA7Civnvb8+dMOzbmd8XCA7Civnvbo+Y2hhb3xcIDsKK+e9pT5qdcOgbnxcIDsKK+e9kz5nYW5nfFwgOwor572SPnfEg25nfFwgOwor572MPnlpbmd8XCA7CivnvYs+d8Oobmd8XCA7CivnvYY+Z3XDoG58XCA7CivnvYM+eWluZ3xcIDsKK+e9gT5nYW5nfFwgOwor57y+PnDDrW5nfFwgOwor57y3PmjDs25nfFwgOwor57yQPmJpw6BufFwgOwor57q7Pnpow6hufFwgOwor57quPmjDs25nfFwgOwor57qePmxpw6BufFwgOwor57qcPmppxINvfFwgOwor57qYPnp1xINufFwgOwor57qWPnhpYW58XCA7CivnupM+eWluZ3xcIDsKK+e6kj5jaMOhbnxcIDsKK+e6jz5jaMOhbnxcIDsKK+e6jj5yw6FuZ3xcIDsKK+e6iT56dcSDbnxcIDsKK+e6hD5ww6luZ3xcIDsKK+e5vj5xacSDbnxcIDsKK+e5tT5jaMOhbnxcIDsKK+e5sz5qacSDb3xcIDsKK+e5sT5jb25nfFwgOwor57mwPnFpYW98XCA7Civnua8+aHXDoW58XCA7Civnua0+amnEg258XCA7Civnuaw+aHXDoG58XCA7CivnuaQ+enXEg258XCA7CivnuZ8+Y2jEg258XCA7CivnuZ0+amnDoG58XCA7CivnuZs+Y2hhb3xcIDsKK+e5mj5sacOhb3xcIDsKK+e5lT5zaMOgbnxcIDsKK+e5kj56ZW5nfFwgOwor57mRPmPDqW5nfFwgOwor57mPPnh1w6BufFwgOwor57mGPm1pw6BvfFwgOwor57mDPmJlbmd8XCA7CivnuYI+YsSVbmd8XCA7CivnuL8+c2hhbnxcIDsKK+e4vT56xY9uZ3xcIDsKK+e4vD54dcOgbnxcIDsKK+e4uj5sacOhbnxcIDsKK+e4uT5wacSDb3xcIDsKK+e4tz5sdVw6zIZ8XCA7CivnuLQ+cWnDoG58XCA7CivnuLE+em9uZ3xcIDsKK+e4sD5jw7NuZ3xcIDsKK+e4qz5mw6luZ3xcIDsKK+e4pz5mw6huZ3xcIDsKK+e4pj56w7JuZ3xcIDsKK+e4pT56aMSVbnxcIDsKK+e4pD5jw7NuZ3xcIDsKK+e4oz54acOgbnxcIDsKK+e4oj50w6luZ3xcIDsKK+e4nT56aMSVbnxcIDsKK+e4mT5yw7NuZ3xcIDsKK+e4mD5jaGVufFwgOwor57iTPnF1xINufFwgOwor57iRPmppYW58XCA7CivnuJA+emjDsnV8XCA7CivnuI0+YmFuZ3xcIDsKK+e4iz56aHXDrHxcIDsKK+e4iD55w61uZ3xcIDsKK+e4hj5nZW5nfFwgOwor57iCPnrFj25nfFwgOwor57iBPnl1w6FufFwgOwor57e+PmNow6FufFwgOwor57e2PmJpw6BufFwgOwor57e1Pnpvbmd8XCA7Civnt7Q+bGnDoG58XCA7Civnt7I+bWnEg298XCA7Civnt6w+bWnEg258XCA7Civnt6s+Y29uZ3xcIDsKK+e3qj5nZW5nfFwgOwor57epPmh1xINufFwgOwor57eoPmJpYW58XCA7Civnt6Q+YmnEg258XCA7Civnt6M+eXXDoW58XCA7Civnt6I+bWnDoW98XCA7Civnt54+ZHXDoG58XCA7Civnt5w+bWnDoW58XCA7Civnt5s+cnXEg258XCA7Civnt5o+eGnDoG58XCA7Civnt5g+amlhbnxcIDsKK+e3kz55aW5nfFwgOwor57ePPnrFj25nfFwgOwor57eIPnjDrG5nfFwgOwor57a/Pm1pw6FufFwgOwor57a+PmzDrW5nfFwgOwor57a9PmNodcOyfFwgOwor57a7Pnpow6BufFwgOwor57a0PmNodcOyfFwgOwor57azPmJlbmd8XCA7CivntrI+d8SDbmd8XCA7CivntrE+Z2FuZ3xcIDsKK+e2rD5zaMOydXxcIDsKK+e2qz54acOgbnxcIDsKK+e2qj5xacOgbnxcIDsKK+e2pz56aMWtbnxcIDsKK+e2pD5zaMOgb3xcIDsKK+e2oz5xdcSDbnxcIDsKK+e2oj5jaMOzdXxcIDsKK+e2oT5kacOgb3xcIDsKK+e2oD5sdVw6zIB8XCA7Civntp0+Y2hlbnxcIDsKK+e2nD56b25nfFwgOwor57aYPmbDqW5nfFwgOwor57aTPmppbmd8XCA7Civnto4+dGluZ3xcIDsKK+e2iz5ow7NuZ3xcIDsKK+e2ij50w61uZ3xcIDsKK+e2hj5nxJVuZ3xcIDsKK+e2hD5odcSDbnxcIDsKK+e2gz54aWFvfFwgOwor57aCPnTFj25nfFwgOwor57aBPmLEg25nfFwgOwor57W8PnpoxJVufFwgOwor57W7Pm1pxINufFwgOwor57W5Pmp1w6BufFwgOwor57W4PmppxINufFwgOwor57WxPnTFj25nfFwgOwor57WtPnF1w6BufFwgOwor57WpPnRpw6BvfFwgOwor57WoPnLDs25nfFwgOwor57WnPmp1w6BufFwgOwor57WjPmJlbmd8XCA7CivntaI+eHXDoG58XCA7CivntZ4+amnEg298XCA7CivntZ0+amnDoG98XCA7CivntZo+Z2VuZ3xcIDsKK+e1mT5nZW5nfFwgOwor57WSPmNow7N1fFwgOwor57WRPmfDqG5nfFwgOwor57WOPmjDoW5nfFwgOwor57WMPmppbmd8XCA7CivntYM+eGnDoW58XCA7CivntL4+emjElW58XCA7CivntLs+eWFuZ3xcIDsKK+e0uT5zaMOgb3xcIDsKK+e0tz5sw61uZ3xcIDsKK+e0sz5zaGVufFwgOwor57StPmjDs25nfFwgOwor57SsPmNow7N1fFwgOwor57ShPmbEg25nfFwgOwor57SYPmjDs25nfFwgOwor57SUPmNow7pufFwgOwor57SFPmjDs25nfFwgOwor57SCPnpow7J1fFwgOwor57O8Pmdvbmd8XCA7Civns7Y+dGnDoG98XCA7Civns7A+dHXDoW58XCA7Civns64+eGnDoG58XCA7Civns60+esOybmd8XCA7Civns6s+aHXDoW58XCA7Civns6k+a3XDoGl8XCA7Civns5s+dMOhbmd8XCA7Civns4s+amnDoG58XCA7Civns4k+esOybmd8XCA7Civns4Q+YmlhbnxcIDsKK+ezgz50w6FuZ3xcIDsKK+eyrz54acOgbnxcIDsKK+eyoT50w7NuZ3xcIDsKK+eyoD5ow7NuZ3xcIDsKK+eyhz5rYW5nfFwgOwor57KBPnFpYW58XCA7Civnsbk+bnVcOsyGfFwgOwor57G4PnNoZW58XCA7CivnsbY+c2hlbnxcIDsKK+exsT56aHXDs3xcIDsKK+exrz55w61uZ3xcIDsKK+exqz56dcSDbnxcIDsKK+exqj5kdcOgbnxcIDsKK+exqT5iaWFufFwgOwor57GoPmxpw6FufFwgOwor57GkPnFpYW58XCA7CivnsaA+bMOzbmd8XCA7CivnsZ0+ecOtbmd8XCA7CivnsZs+amlhbnxcIDsKK+exmD50w6luZ3xcIDsKK+exlz56aHXDs3xcIDsKK+exlT5sxY9uZ3xcIDsKK+exkD50w6luZ3xcIDsKK+exjD5jaMOzdXxcIDsKK+exiD56aGVufFwgOwor57C+Pmxpw6FufFwgOwor57C9PnFpYW58XCA7CivnsLk+ZGFuZ3xcIDsKK+ewqz54aWFvfFwgOwor57ClPmppYW98XCA7CivnsKE+amnEg258XCA7CivnsJ0+bGnDoW98XCA7CivnsJw+ZMOgbmd8XCA7CivnsJg+eGlhb3xcIDsKK+ewkj5jdcOgbnxcIDsKK+ewkD5uacSDbnxcIDsKK+ewjj54acSDb3xcIDsKK+ewiT5jaMOydXxcIDsKK+ewiD5ww61uZ3xcIDsKK+ewhT5jaMSDbnxcIDsKK+ewgT5jaHXDsnxcIDsKK+evuz5wacOgb3xcIDsKK+evtT5jb25nfFwgOwor56+vPmppYW58XCA7Civnr60+bMOzbmd8XCA7Civnr6k+c2hhaXxcIDsKK+evpz56aHXDs3xcIDsKK+evoz5ww6FuZ3xcIDsKK+evoj5nb25nfFwgOwor56+gPnhpxINvfFwgOwor56+fPnFpw6BufFwgOwor56+YPmNob3V8XCA7Civnr5Y+dMOhbmd8XCA7Civnr48+cWnDoG58XCA7Civnr44+bWnEg298XCA7Civnr4o+aMOzbmd8XCA7Civnr4g+ZmVuZ3xcIDsKK+evhT5jaHXDrXxcIDsKK+evgj54aW5nfFwgOwor566+PnNodcOyfFwgOwor5669PmTFj25nfFwgOwor5666PmNoxa1ufFwgOwor5665PnNodcOyfFwgOwor566zPnDDrW5nfFwgOwor566yPnhpxINufFwgOwor566vPmJpYW58XCA7Civnrq4+eHVhbnxcIDsKK+euoj55dWFufFwgOwor566gPmNodcOtfFwgOwor566ePnF1YW58XCA7Civnrow+emjDoG98XCA7Civnros+amlhbnxcIDsKK+euiT5ndcSDaXxcIDsKK+etvz54acSDb3xcIDsKK+etuz5nw6BuZ3xcIDsKK+etsz50w61uZ3xcIDsKK+etrT5zdcOgbnxcIDsKK+etqT50xY9uZ3xcIDsKK+etpz5qacSDbnxcIDsKK+etpj5ndcSDbnxcIDsKK+etpD5sw6FuZ3xcIDsKK+etoT5qacOgbnxcIDsKK+etnD5kYW5nfFwgOwor562VPmjDoW5nfFwgOwor562KPmppxINvfFwgOwor562FPnhpxINufFwgOwor56y+PmJpYW58XCA7CivnrK0+bMOtbmd8XCA7CivnrJg+c2hhbnxcIDsKK+eslz5kb25nfFwgOwor56yQPmdhbmd8XCA7CivnrI4+eXXDoW58XCA7CivnrI0+emh1w6x8XCA7CivnrIk+emjElW58XCA7CivnrIc+c3XDoG58XCA7CivnrIU+eGnDoW98XCA7CivnrIA+bcOhbmd8XCA7Civnq7w+cMOpbmd8XCA7Civnq7g+asOsbmd8XCA7Civnq7Y+asOsbmd8XCA7Civnq7U+aHVhaXxcIDsKK+ersz5kZW5nfFwgOwor56uyPmPDqW5nfFwgOwor56uwPnNow6FvfFwgOwor56uuPnDDrW5nfFwgOwor56urPmrDrG5nfFwgOwor56uoPmRpw6BvfFwgOwor56unPmrDrG5nfFwgOwor56ukPmjDs25nfFwgOwor56udPmLDrG5nfFwgOwor56ucPmzDs25nfFwgOwor56ubPmzDrW5nfFwgOwor56uaPmLDoG5nfFwgOwor56uXPm1pw6BvfFwgOwor56uUPmdvbmd8XCA7Civnq5M+cWlhbnxcIDsKK+erkT5ow7NuZ3xcIDsKK+erjz5xaWFufFwgOwor56uJPmzFj25nfFwgOwor56uFPnFpw6BvfFwgOwor56uEPmN1w6BufFwgOwor56uCPnBpw6FvfFwgOwor56q+Pmt1xINufFwgOwor56q8PnpoYW98XCA7CivnqrU+ZGnDoG98XCA7CivnqrQ+dGnDoW58XCA7CivnqrI+Y2jDoW98XCA7CivnqrE+dGnDoG98XCA7CivnqqQ+Z3VhbnxcIDsKK+eqoT56aHXDrHxcIDsKK+eqmT54aWFvfFwgOwor56qOPmRpw6BvfFwgOwor56qMPmppw6BvfFwgOwor56qJPmLErW5nfFwgOwor56qGPmJpxINufFwgOwor56qAPnpodW58XCA7Civnqb0+asStbmd8XCA7Civnqa4+Ymlhb3xcIDsKK+eprD5nxY9uZ3xcIDsKK+epoz5yw6FuZ3xcIDsKK+epoD5uw7NuZ3xcIDsKK+epnD50w7NuZ3xcIDsKK+epmz56aHVvfFwgOwor56maPmppYW98XCA7CivnqZg+eGlhb3xcIDsKK+epjj55xK1uZ3xcIDsKK+ephz5zaGFufFwgOwor56mFPmthbmd8XCA7CivnqLg+YmlhbnxcIDsKK+eotD5sacOhbnxcIDsKK+eosT5jaMOobnxcIDsKK+eorz5jaMOobnxcIDsKK+eoqD5iaWFufFwgOwor56ifPmLErW5nfFwgOwor56icPmzDqW5nfFwgOwor56iWPmLDoG5nfFwgOwor56iVPnpow7lufFwgOwor56iPPmzDqG5nfFwgOwor56iJPmdlbmd8XCA7CivnqIY+amluZ3xcIDsKK+eohT5zaHXDrHxcIDsKK+eohD50dcOgbnxcIDsKK+envj5uw7NuZ3xcIDsKK+enpT5uacOhbnxcIDsKK+enoj5sw61uZ3xcIDsKK+enlD5nZW5nfFwgOwor56eKPm5pw6FufFwgOwor56eIPnhpYW58XCA7Civnpq8+bsOzbmd8XCA7Civnpqo+Y2jDoW58XCA7Civnpqk+c2jDoG58XCA7CivnpqQ+eHVhbnxcIDsKK+emnz50w6FuZ3xcIDsKK+emnD55xY9uZ3xcIDsKK+emmz56aGVufFwgOwor56aaPnpodcOzfFwgOwor56aTPnnDoW5nfFwgOwor56aSPnhpxINufFwgOwor56aQPnl1w6BufFwgOwor56aOPnpoZW58XCA7Civnpog+Y2jEg298XCA7CivnpoI+Y2jDoW58XCA7Civnpb4+bMOtbmd8XCA7Civnpbw+Z3XDoG58XCA7CivnpbM+Y2jElW58XCA7CivnpbE+c2h1w6x8XCA7Civnpak+emjDoGl8XCA7CivnpaE+Y2jDoWl8XCA7CivnpZg+c3XDoG58XCA7CivnpZI+dGnDoW98XCA7CivnpYo+YmVuZ3xcIDsKK+ekvT5yw6luZ3xcIDsKK+ektj5ndcOgbnxcIDsKK+eksj5sw7NuZ3xcIDsKK+eksT5sw7NuZ3xcIDsKK+ekrz55aW5nfFwgOwor56SlPnhpw6FufFwgOwor56SePm3DqW5nfFwgOwor56SdPnJ1xINufFwgOwor56SbPmppYW58XCA7CivnpJE+ZMOgbmd8XCA7CivnpIs+emjDoWl8XCA7CivnpIg+emh1w6x8XCA7CivnpIY+eGnEg258XCA7CivnpIQ+cWnDoW98XCA7Civno70+cWlhb3xcIDsKK+ejuT5kacOgbnxcIDsKK+ejuD5kw6xuZ3xcIDsKK+ejtT5qacOgbnxcIDsKK+ejsz56ZW5nfFwgOwor56OwPnNow6BufFwgOwor56OtPmNodcOyfFwgOwor56OrPnpvbmd8XCA7Civno6Y+Ymlhb3xcIDsKK+ejnj5wZW5nfFwgOwor56ObPmNow6FufFwgOwor56OYPnHDrG5nfFwgOwor56OMPnpoZW58XCA7Civno4Q+dMOhbmd8XCA7Civnor8+cGFuZ3xcIDsKK+eivT5nb25nfFwgOwor56K5Pnh1w6BufFwgOwor56K4PmZlbmd8XCA7Civnoq0+ZMOgbmd8XCA7Civnoqs+ZHXDoG58XCA7Civnoqo+emhlbnxcIDsKK+eiqT5zaHXDsnxcIDsKK+eipT5iacSDbnxcIDsKK+eioD5kw6xuZ3xcIDsKK+einT5ydcSDbnxcIDsKK+eimT5nYW5nfFwgOwor56KQPmzDrW5nfFwgOwor56KKPmppYW58XCA7CivnooM+ccOsbmd8XCA7CivnooI+esOybmd8XCA7CivnooA+Y8Opbmd8XCA7Civnob8+a29uZ3xcIDsKK+ehvj56aHXDrHxcIDsKK+ehuz5rZW5nfFwgOwor56G6PnpodcOzfFwgOwor56G5PnNvbmd8XCA7CivnobY+Y2jElW58XCA7Civnoac+acWPbmd8XCA7CivnoaY+bMOybmd8XCA7CivnoaU+bcSDbmd8XCA7CivnoaM+eGlhb3xcIDsKK+ehoT5ob25nfFwgOwor56GgPmzEg25nfFwgOwor56GfPmNow6BufFwgOwor56GePmzDoW5nfFwgOwor56GcPmtlbmd8XCA7CivnoZo+cWnDoW98XCA7CivnoZQ+aMOzbmd8XCA7CivnoZE+cGVuZ3xcIDsKK+ehjz5kxY9uZ3xcIDsKK+ehgj5xdcOhbnxcIDsKK+ehgT5rZW5nfFwgOwor56CvPnBpbmd8XCA7CivnoJw+ZmVuZ3xcIDsKK+egij5rYW5nfFwgOwor55+0PmRpYW98XCA7Civnn7A+emVuZ3xcIDsKK+efrz5qacSDb3xcIDsKK+efqj56aG91fFwgOwor55+oPnnErW5nfFwgOwor55+kPnNoxJVufFwgOwor55+fPnNodcOyfFwgOwor55+YPnTEg25nfFwgOwor55+UPmd1w6BufFwgOwor55+TPmzDs25nfFwgOwor55+SPm3DqW5nfFwgOwor55+PPm1pw6FufFwgOwor55+OPnh1YW58XCA7Civnn4o+bcOhbmd8XCA7Civnn4g+bWnDoW58XCA7Civnn4c+bWVuZ3xcIDsKK+efgz5uxK1uZ3xcIDsKK+efgT5jaMWPdXxcIDsKK+eevj56aMOgb3xcIDsKK+eevD5qacSDbnxcIDsKK+eetz5qacOgbnxcIDsKK+eerz54acOhbnxcIDsKK+eerT5sacSDb3xcIDsKK+eeqz5zaMSVbnxcIDsKK+eepj5sacOgb3xcIDsKK+eemz5jb25nfFwgOwor556aPnNow7lufFwgOwor556XPmRpYW98XCA7Civnnos+Y2hlbnxcIDsKK+eeij5kw6BuZ3xcIDsKK+eeiD53xJVuZ3xcIDsKK+eduz54dWFufFwgOwor5523PmppYW58XCA7CivnnbY+Y2jFrW58XCA7Civnna0+emjFj3V8XCA7CivnnaA+anXDoG58XCA7CivnnZY+bMOobmd8XCA7CivnnZM+dGnEg258XCA7CivnnZI+c2jEg258XCA7CivnnY0+eGnDoG58XCA7CivnnYo+anXDoG58XCA7CivnnYY+aHXEg258XCA7CivnnYQ+cWnDoW98XCA7CivnnLs+ecOhbmd8XCA7CivnnLk+emjDqG58XCA7CivnnLQ+eHXDoG58XCA7CivnnLM+bcOtbmd8XCA7CivnnK4+ZMOybmd8XCA7CivnnKw+bMOzbmd8XCA7CivnnKo+YsStbmd8XCA7CivnnKc+Y2jEg298XCA7CivnnKI+eXVhbnxcIDsKK+ecnj56aGVufFwgOwor55ydPm1pxINufFwgOwor55yYPnNow6hufFwgOwor55yVPnpoxJVufFwgOwor55ySPnNow6hufFwgOwor55yPPnlhbmd8XCA7CivnnIw+ZMOobmd8XCA7CivnnIY+ZsSDbmd8XCA7CivnnII+bWnDoG98XCA7CivnnIA+bcOtbmd8XCA7Civnm70+ZmVuZ3xcIDsKK+ebtz50acOhbnxcIDsKK+ebtj5ydcSDbnxcIDsKK+ebsz5tw6FuZ3xcIDsKK+ebqj5kw6BuZ3xcIDsKK+ebqT56aG91fFwgOwor55ujPmppYW58XCA7Civnm6I+amnDoG58XCA7Civnm54+emjEg258XCA7Civnm4Q+emhhb3xcIDsKK+ebgT55w61uZ3xcIDsKK+ebgD5kacOgb3xcIDsKK+eavT56aMSDbnxcIDsKK+eauz5txK1uZ3xcIDsKK+eauj56aMOydXxcIDsKK+earT5qacOgb3xcIDsKK+eaqz5wacSDb3xcIDsKK+eaqD54aW5nfFwgOwor55qmPmppxINvfFwgOwor55qiPnhpxINvfFwgOwor55qYPnFpw6BufFwgOwor55qXPmNow7N1fFwgOwor55qPPnDElW5nfFwgOwor55qKPmzDrW5nfFwgOwor55m1Pmx1w6FufFwgOwor55m0PmzDvMOhbnxcIDsKK+eZsj5kaWFufFwgOwor55mwPnlvbmd8XCA7Civnma0+ecStbmd8XCA7Civnmaw+eHXEg258XCA7CivnmaI+ecSDbmd8XCA7CivnmZU+eW9uZ3xcIDsKK+eZkT5uw7NuZ3xcIDsKK+eZkD5ndcOgaXxcIDsKK+eZjz5ndWFufFwgOwor55mOPnhpw6FufFwgOwor55mHPnhpw6FufFwgOwor55mEPnFpw6FvfFwgOwor55mDPmzDs25nfFwgOwor55mCPmxpw6FvfFwgOwor55i5PmRpw6BvfFwgOwor55i1Pnpow6BpfFwgOwor55iyPnrDsm5nfFwgOwor55iuPnNoZW58XCA7CivnmK0+Ymlhb3xcIDsKK+eYqD5kaWFufFwgOwor55inPm51XDrDqHxcIDsKK+eYnT5ndWFufFwgOwor55iTPmh1w6BufFwgOwor55iOPnNow6hufFwgOwor55iNPnnDoW5nfFwgOwor55iLPmZlbmd8XCA7CivnmIY+c2jDqG58XCA7Civnl7Y+ZGnEg258XCA7Civnl68+Z3XEg258XCA7Civnl60+cMOpbmd8XCA7Civnl6k+c2jDsnV8XCA7Civnl6A+c3VhbnxcIDsKK+eXnz54aWFvfFwgOwor55edPm3DoW5nfFwgOwor55eaPnhpYW98XCA7Civnl5k+asOsbmd8XCA7Civnl4w+dG9uZ3xcIDsKK+eXgz54acOhbnxcIDsKK+eXgT5kacOgbnxcIDsKK+eWrT56w7JuZ3xcIDsKK+eWoj5jaMOobnxcIDsKK+eWmz56aMWPdXxcIDsKK+eWmD5nYW5nfFwgOwor55aHPmNow7N1fFwgOwor55aDPnR1xINufFwgOwor55W9PnR1xINufFwgOwor55W3PmNodcOyfFwgOwor55W2PmRhbmd8XCA7CivnlbM+ZMOgbmd8XCA7CivnlZE+dGnDoW58XCA7CivnlYs+dGnDoW58XCA7CivnlYo+Z2VuZ3xcIDsKK+eUvz5tw6luZ3xcIDsKK+eUvT5xdcSDbnxcIDsKK+eUvD50xK1uZ3xcIDsKK+eUuT5waW5nfFwgOwor55SvPm7DrW5nfFwgOwor55SuPmbDqG5nfFwgOwor55SjPmNoxINufFwgOwor55SiPmNoxINufFwgOwor55ShPnNoZW58XCA7CivnlKA+ccOtbmd8XCA7CivnlJY+eWluZ3xcIDsKK+eUlT53w6huZ3xcIDsKK+eUiT54acOhbnxcIDsKK+eUhz55aW5nfFwgOwor55SDPnpow7J1fFwgOwor55SCPmJpYW58XCA7CivnlIE+cMOtbmd8XCA7CivnlIA+emh1w6x8XCA7Civnk74+bcSVbmd8XCA7Civnk70+ZMOgbmd8XCA7Civnk7k+anXDoG58XCA7Civnk6w+ZsSDbmd8XCA7Civnk6k+cWlhbnxcIDsKK+eTqD5ow7NuZ3xcIDsKK+eTmz5odcOhbnxcIDsKK+eTmD5ndcOgbnxcIDsKK+eTlD55aW5nfFwgOwor55OPPmzDs25nfFwgOwor55OAPnJ1xINufFwgOwor55K/Pnh1w6FufFwgOwor55K5PnNow7J1fFwgOwor55KzPnRpw6FufFwgOwor55KwPmh1w6FufFwgOwor55KsPmppxINvfFwgOwor55KrPmRhbmd8XCA7CivnkqU+asStbmd8XCA7CivnkqI+aHXDoG58XCA7Civnkp8+asStbmd8XCA7Civnkpk+bGnDoW98XCA7Civnkpc+ZMOgbmd8XCA7CivnkpQ+emVuZ3xcIDsKK+eSkz54acOydXxcIDsKK+eSkj5kZW5nfFwgOwor55KJPmxpw6FufFwgOwor55KEPmxpxINufFwgOwor55G9PmNvbmd8XCA7CivnkbU+emjEg298XCA7CivnkbE+dGnDoG58XCA7Civnka8+bMOhbmd8XCA7Civnkak+ecOtbmd8XCA7CivnkaI+csOzbmd8XCA7CivnkZY+ZHXDoG58XCA7CivnkZQ+cXXDoW58XCA7CivnkZM+aHXDoW58XCA7CivnkZI+ecOhbmd8XCA7CivnkZA+amnEg258XCA7CivnkY0+aHXDoG58XCA7CivnkYw+cnXEg258XCA7CivnkYo+emhlbnxcIDsKK+eRhj54aW5nfFwgOwor55GEPnh1YW58XCA7CivnkYM+Y2h1bnxcIDsKK+eQuD56aHXDs3xcIDsKK+eQsT5kaWFvfFwgOwor55CvPmd1xINufFwgOwor55CrPmLElW5nfFwgOwor55CgPmRpxINufFwgOwor55CWPnpoxINufFwgOwor55CUPmRpw6BufFwgOwor55CMPmzDrW5nfFwgOwor55CEPnF1xINufFwgOwor55CCPmp1YW58XCA7CivnkIE+eHVhbnxcIDsKK+ePvz5jaHXDsnxcIDsKK+ePvj54acOgbnxcIDsKK+ePvT50xK1uZ3xcIDsKK+ePsD5kYW5nfFwgOwor54+cPnnDoW5nfFwgOwor54+YPnpob3V8XCA7Civnj5c+eGlhbnxcIDsKK+ePlD5qacOgbnxcIDsKK+ePkz5qacOgb3xcIDsKK+ePjj56aGVufFwgOwor54+FPnNoZW58XCA7Civnjr8+c2jDoW98XCA7Civnjrk+eHXDoW58XCA7CivnjrY+cMOtbmd8XCA7Civnjqo+amlhbnxcIDsKK+eOpD5iw6BuZ3xcIDsKK+eOoz5iw6BuZ3xcIDsKK+eOnD5nb25nfFwgOwor546aPnnDoW5nfFwgOwor546SPmjDs25nfFwgOwor546FPm1pw6BvfFwgOwor546BPnhpxINufFwgOwor5429PnLDoW5nfFwgOwor5427Pnhpw6BufFwgOwor5424PnNow7J1fFwgOwor5420Pm3DqW5nfFwgOwor542wPm7DrW5nfFwgOwor542uPnhpxINufFwgOwor542rPnhpxINufFwgOwor542qPmt1w6BpfFwgOwor542nPmp1w6BufFwgOwor542ePnTDs25nfFwgOwor542RPmNow6FufFwgOwor542JPnpoZW58XCA7CivnjYI+aHXDoW58XCA7CivnjLU+YmlhbnxcIDsKK+eMrz50dWFufFwgOwor54ytPnl1w6FufFwgOwor54yoPnl1w6FufFwgOwor54ymPmZlbmd8XCA7CivnjKM+em9uZ3xcIDsKK+eMjz5qaWFufFwgOwor54yLPmJpYW98XCA7CivnjIQ+amluZ3xcIDsKK+eLuz5zdWFufFwgOwor54u1Pm3DoW5nfFwgOwor54uqPnRvbmd8XCA7Civni6g+csOzbmd8XCA7Civni6Y+a3XDoGl8XCA7Civni6M+emjDoG98XCA7Civni58+aHXDoW58XCA7Civni50+eGnEg258XCA7Civni5E+bMOtbmd8XCA7Civni4U+cWluZ3xcIDsKK+eKvz5odWFufFwgOwor54q6PmvDoG5nfFwgOwor54qrPmNob3V8XCA7Civniqo+Y2jDoWl8XCA7Civniqg+Y2hvdXxcIDsKK+eKnT50w7NuZ3xcIDsKK+eKjj5mZW5nfFwgOwor54qIPnF1w6FufFwgOwor54qFPmdhbmd8XCA7Civnib0+cWlhbnxcIDsKK+eJvD5rZW5nfFwgOwor54m7Pm3DoW5nfFwgOwor54m3PnF1w6FufFwgOwor54m2PnF1w6BufFwgOwor54muPmppw6BufFwgOwor54moPmdhbmd8XCA7CivniaU+ZmFuZ3xcIDsKK+eJpD5tw6FuZ3xcIDsKK+eJkz5ixINuZ3xcIDsKK+eJkT5iaWFufFwgOwor54mQPmNvbmd8XCA7CivniYs+amlhbnxcIDsKK+eJij5zaMOhb3xcIDsKK+eJhT55w7NuZ3xcIDsKK+eJgj56YW5nfFwgOwor54inPmzDrW5nfFwgOwor54ijPnTEg25nfFwgOwor54ifPmd1w6BufFwgOwor54icPmPDs25nfFwgOwor54iZPnLEg25nfFwgOwor54iWPmzDs25nfFwgOwor54iUPnNodcOyfFwgOwor54iSPmxpw6BvfFwgOwor54iNPnNodcOyfFwgOwor54iDPnLDs25nfFwgOwor54iCPmJpYW98XCA7Civnh70+Y2jDs3V8XCA7Civnh7M+emjDoG98XCA7Civnh68+bMOtbmd8XCA7Civnh6s+bGnDoW58XCA7Civnh6o+Y29uZ3xcIDsKK+eHnz55w61uZ3xcIDsKK+eHmz5qxK1uZ3xcIDsKK+eHmT50w6BuZ3xcIDsKK+eHlz5kw6BuZ3xcIDsKK+eHkj5zaGFvfFwgOwor54eRPnTDs25nfFwgOwor54eNPmxpw6FvfFwgOwor54eLPmppYW98XCA7Civnh4o+c2hlbnxcIDsKK+eHiD5kZW5nfFwgOwor54eFPnhpw6FufFwgOwor54eCPnFpw6FufFwgOwor54eAPmNoxINufFwgOwor54a9Pnhpw6BvfFwgOwor54a4PmppYW58XCA7Civnhrc+emVuZ3xcIDsKK+eGtj5jdcOgbnxcIDsKK+eGrj5sacOhb3xcIDsKK+eGpz56b25nfFwgOwor54alPnRvbmd8XCA7CivnhqI+ZmVuZ3xcIDsKK+eGnj5qaWFufFwgOwor54acPnrFj25nfFwgOwor54abPmJpYW98XCA7CivnhpI+ecOtbmd8XCA7CivnhpE+bGnDoW58XCA7Civnhow+c2jDoG58XCA7Civnhbw+Y2jEg298XCA7Civnhbs+dMOhbmd8XCA7CivnhbU+c2jDoG58XCA7Civnhaw+ecOhbmd8XCA7CivnhaU+aHXDoG58XCA7CivnhZg+Y2jDoW58XCA7CivnhZY+bnXEg258XCA7CivnhZQ+dGnDoG58XCA7CivnhZM+cWnDoW58XCA7CivnhZA+eWluZ3xcIDsKK+eFjT5qacSDb3xcIDsKK+eFiz54aW5nfFwgOwor54WJPmxpw6BufFwgOwor54WIPmbDqG5nfFwgOwor54WBPmNow6lufFwgOwor54S8PnNoYW98XCA7CivnhLU+Z8Ogbmd8XCA7CivnhLQ+c2jDqW58XCA7CivnhLI+amlhb3xcIDsKK+eEqT5waW5nfFwgOwor54SoPmbDqG5nfFwgOwor54SnPmNvbmd8XCA7CivnhKI+aG9uZ3xcIDsKK+eEhz54aWFvfFwgOwor54O/PnLDs25nfFwgOwor54O7PnNoYW58XCA7Civng7o+bMSDbmd8XCA7Civng7Y+dMStbmd8XCA7Civng7U+c2jDoW58XCA7Civng7Q+dGluZ3xcIDsKK+eDnD54dcSDbnxcIDsKK+eDlD50w7NuZ3xcIDsKK+eDjT54acSDbnxcIDsKK+eDiz54aWFvfFwgOwor54OJPmh1w6BufFwgOwor54OHPnF1w6BufFwgOwor54OGPnjDrW5nfFwgOwor54OEPmppxINvfFwgOwor54K1PnRvbmd8XCA7CivngrQ+ecSDbmd8XCA7Civngqo+emh1w7N8XCA7Civngqk+bMOsbmd8XCA7CivngqQ+emjDoG98XCA7CivngpM+bGnDoG98XCA7CivngpA+cMOgbmd8XCA7Civngo8+Z8SVbmd8XCA7CivngoE+Z8SVbmd8XCA7CivngbQ+aMOzbmd8XCA7CivngbI+eGlhb3xcIDsKK+eBsT54aWFvfFwgOwor54GmPnhpxINufFwgOwor54GkPmx1w6FufFwgOwor54GiPm7Eg25nfFwgOwor54GbPmNoxINufFwgOwor54GaPmppxINvfFwgOwor54GZPmTEg25nfFwgOwor54GXPnNow6BufFwgOwor54GTPmx1w6FufFwgOwor54GKPnFpw6FufFwgOwor54GJPnlvbmd8XCA7CivngYc+Y8Ozbmd8XCA7CivngYU+aHXDoG58XCA7CivngYM+ZmVuZ3xcIDsKK+eBgj56aHXDs3xcIDsKK+eBgT55dWFufFwgOwor54C9PmppxINufFwgOwor54C8PnLDoW5nfFwgOwor54C6PmNow6FufFwgOwor54C4PmppYW58XCA7CivngLQ+ecStbmd8XCA7CivngLM+amnDoG58XCA7CivngLI+bGnDoG58XCA7CivngK8+ecOtbmd8XCA7CivngKc+bMOzbmd8XCA7CivngKQ+aHXDoWl8XCA7CivngKA+ecOtbmd8XCA7CivngJ8+eGlhb3xcIDsKK+eAnj5qw6xuZ3xcIDsKK+eAnD55b25nfFwgOwor54CXPnhpw6BufFwgOwor54CNPmNow6FufFwgOwor54CMPmJpYW98XCA7CivngIs+c2jElW58XCA7CivngIc+Y2jDqG58XCA7CivngIU+ecOtbmd8XCA7CivngIE+ecOgbmd8XCA7Civmv74+bHVcOsyAfFwgOwor5r+9PmN1w6FufFwgOwor5r+6Pmppw6BufFwgOwor5r+2PmppYW58XCA7Civmv7Q+eMOtbmd8XCA7Civmv7M+cWnDoW58XCA7Civmv6o+amnDoG58XCA7Civmv6I+Y2jDoW98XCA7Civmv5s+bcOpbmd8XCA7Civmv5k+ecOtbmd8XCA7Civmv5g+bsOsbmd8XCA7Civmv5M+bGnDoW58XCA7Civmv44+ZMStbmd8XCA7Civmv40+c29uZ3xcIDsKK+a/gz5uw7NuZ3xcIDsKK+a/gT56aHXDs3xcIDsKK+a+uj5qaWFvfFwgOwor5r61PnpoZW58XCA7CivmvrQ+aHXDoW58XCA7CivmvrE+ZGnDoG58XCA7CivmvrA+bGnDoG58XCA7Civmvq4+a3XDoGl8XCA7Civmvq0+eW9uZ3xcIDsKK+a+oz5odcSDbnxcIDsKK+a+oj5kYW5nfFwgOwor5r6YPnNoYW58XCA7Civmvpc+amnDoG58XCA7CivmvpY+eGlhbnxcIDsKK+a+kj5ow7JuZ3xcIDsKK+a+iz5ow6huZ3xcIDsKK+a+hj5qaWFvfFwgOwor5r29PmTDqG5nfFwgOwor5r25PmNow6FufFwgOwor5r2nPnNow6BufFwgOwor5r2bPnFpw6FufFwgOwor5r2aPnhpYW98XCA7CivmvYU+Z3XDoG58XCA7CivmvYI+aMOzbmd8XCA7CivmvYE+ecStbmd8XCA7CivmvYA+Y8Ozbmd8XCA7CivmvLs+bGnDoW98XCA7CivmvLg+amlhbnxcIDsKK+a8sD5wZW5nfFwgOwor5ryuPmthbmd8XCA7CivmvK0+bcSDbmd8XCA7CivmvKg+ZsOpbmd8XCA7CivmvKc+cWnDoW58XCA7CivmvKM+bGnDoW58XCA7CivmvJ8+dMOhbmd8XCA7CivmvJk+dHXDoW58XCA7CivmvJg+Y2jDum58XCA7CivmvJc+Y29uZ3xcIDsKK+a8lj5jaMO6bnxcIDsKK+a8jj5jw7NuZ3xcIDsKK+a8iz5sw7NuZ3xcIDsKK+a8ij5sdVw6zIZ8XCA7CivmvIU+amnEg298XCA7CivmvIA+Ymlhb3xcIDsKK+a7vT55w7NuZ3xcIDsKK+a7uz5jaMSDbnxcIDsKK+a7sj5zaMOobnxcIDsKK+a7rj5iaWFvfFwgOwor5rujPmNow7pufFwgOwor5rudPmzDs25nfFwgOwor5ruYPmppw6BvfFwgOwor5ruOPnjDrW5nfFwgOwor5ruEPmNhbmd8XCA7Civmu4M+d8SVbmd8XCA7CivmupY+emjFrW58XCA7CivmupU+bcOobmd8XCA7CivmupM+bGnDoW58XCA7CivmupI+eXXDoW58XCA7Civmuow+bGnEg258XCA7CivmuoE+ecOtbmd8XCA7CivmuoA+amlhbnxcIDsKK+a5uz5jaMO6bnxcIDsKK+a5uT5jaMOhbnxcIDsKK+a5tz5jaHXDrXxcIDsKK+a5tj5xdcOhbnxcIDsKK+a5sj55dcOhbnxcIDsKK+a5sD5sw7NuZ3xcIDsKK+a5rz50YW5nfFwgOwor5rmtPnFpw7N1fFwgOwor5rmsPmppxINvfFwgOwor5rmqPmppxINvfFwgOwor5rmpPmTDsm5nfFwgOwor5rmnPnnFj25nfFwgOwor5rmXPmbDqG5nfFwgOwor5rmVPmNow6lufFwgOwor5rmJPnRpw6FufFwgOwor5rmFPmxpw6BufFwgOwor5ri7PnjErW5nfFwgOwor5ri5Pmhvbmd8XCA7CivmuLY+eWluZ3xcIDsKK+a4oj5mw6luZ3xcIDsKK+a4nz50w61uZ3xcIDsKK+a4nD5udcSDbnxcIDsKK+a4mz5qacSDbnxcIDsKK+a4mT5odcOgbnxcIDsKK+a4lT55dWFufFwgOwor5riBPnl1YW58XCA7Civmt7o+cWlhbnxcIDsKK+a3uD5xaW5nfFwgOwor5re1Pnl1YW58XCA7Civmt7I+cGnDoW98XCA7Civmt7A+bmnEg258XCA7Civmt60+bGnEg258XCA7Civmt6k+bMOtbmd8XCA7Civmt6g+asOsbmd8XCA7Civmt6M+Z3VhbnxcIDsKK+a3nz50acSDbnxcIDsKK+a3nD5ww6luZ3xcIDsKK+a3kz5mYW5nfFwgOwor5reOPnDElW5nfFwgOwor5reDPmp1w6BufFwgOwor5ra3PmRvbmd8XCA7CivmtrY+ZMOybmd8XCA7CivmtrM+a29uZ3xcIDsKK+a2sD5jaHXDsnxcIDsKK+a2rT5zaMOydXxcIDsKK+a2rD54w6xuZ3xcIDsKK+a2qz5ndcOgbnxcIDsKK+a2mj5zaHXDrHxcIDsKK+a2lz5zaHXDrHxcIDsKK+a2jT5kacOgbnxcIDsKK+a2ij5uacSDbnxcIDsKK+a2hz5qaW5nfFwgOwor5raBPnNow6hufFwgOwor5raAPnhpw6BufFwgOwor5rW7PnfElW5nfFwgOwor5rW1PnTDs25nfFwgOwor5rWyPmbDqW5nfFwgOwor5rWxPmNow7pufFwgOwor5rWtPmdlbmd8XCA7Civmtac+ecStbmd8XCA7CivmtaQ+aMOzbmd8XCA7CivmtZA+Y2jEg258XCA7CivmtLo+bcOtbmd8XCA7CivmtLQ+cMOtbmd8XCA7CivmtKg+eGnDoW98XCA7CivmtKQ+cXXDoW58XCA7CivmtJg+aMOzbmd8XCA7CivmtJA+eMOtbmd8XCA7CivmtIo+amnDoG58XCA7CivmtIA+emhvdXxcIDsKK+aztD5ndcOgbnxcIDsKK+azmT5ww61uZ3xcIDsKK+azjj56aHXDs3xcIDsKK+ayqD5mw6luZ3xcIDsKK+aynT56aHXErXxcIDsKK+aylz50aWFufFwgOwor5rG8Pm5pb3V8XCA7Civmsbs+aMSDbmd8XCA7Civmsbg+ZmFuZ3xcIDsKK+axsz5iacOgbnxcIDsKK+axsT5xdcSDbnxcIDsKK+axrz5ow7NuZ3xcIDsKK+axrD5qxK1uZ3xcIDsKK+axpz5xaWFufFwgOwor5rGYPnFpYW58XCA7CivmsZI+bcOhbmd8XCA7CivmsYs+emh1w7N8XCA7CivmsYg+ZGlhb3xcIDsKK+axhT5tacSDbnxcIDsKK+awuT5kw6BuZ3xcIDsKK+awtz5iaW5nfFwgOwor5rCxPm5pw6BvfFwgOwor5rCtPmRvbmd8XCA7CivmsKs+cWluZ3xcIDsKK+awoD5zaGVufFwgOwor5rCLPm3DqW5nfFwgOwor5rCKPnpoYW58XCA7CivmsIg+emhhbnxcIDsKK+awhD5yxY9uZ3xcIDsKK+awgz5ixINuZ3xcIDsKK+avqD54acSDbnxcIDsKK+avpz5yw7NuZ3xcIDsKK+avmj5jaMOhbnxcIDsKK+avjD5ndcOgbnxcIDsKK+avij54aWFvfFwgOwor5q+IPmR1w6BufFwgOwor5q64PnHDrG5nfFwgOwor5q6yPmppYW58XCA7Civmrq4+bGnDoG58XCA7Civmrqk+Y3XDoG58XCA7CivmrqY+ZGlhb3xcIDsKK+auoD5jaMOydXxcIDsKK+aukT5xw61uZ3xcIDsKK+aujj5qw6xuZ3xcIDsKK+atrD5xacOhbnxcIDsKK+atoT5odWFufFwgOwor5q2gPmNodcOyfFwgOwor5q2bPmxpxINufFwgOwor5q2XPnhpw6BvfFwgOwor5q2WPmNodWF8XCA7CivmrZM+aHVhbnxcIDsKK+atij54aWFvfFwgOwor5q2APmt1xINufFwgOwor5qy7PmNodWF8XCA7CivmrLY+c2h1w7J8XCA7CivmrLU+a3XEg258XCA7CivmrLQ+bMOhbmd8XCA7CivmrLM+a3XDoGl8XCA7CivmrKk+Y2hhb3xcIDsKK+aspj5xaWFufFwgOwor5qyePmzDrW5nfFwgOwor5qycPm7DoW5nfFwgOwor5qyTPmTEg25nfFwgOwor5qySPmx1w6FufFwgOwor5qyKPnF1w6FufFwgOwor5qyJPmPDsm5nfFwgOwor5qyDPmNow6FufFwgOwor5qyBPm7Ds25nfFwgOwor5qu/Pmxpw6BufFwgOwor5qu8PmppYW58XCA7Civmq7s+eWluZ3xcIDsKK+aruj5sw61uZ3xcIDsKK+aruT54aWFvfFwgOwor5qu2PnhpxINufFwgOwor5quzPmzDs25nfFwgOwor5quwPmh1w6FpfFwgOwor5qusPmNow6hufFwgOwor5qujPmxpw6FufFwgOwor5quiPmd1w6BufFwgOwor5quhPnpodcOzfFwgOwor5quePnl1w6FufFwgOwor5quaPmx1XDrMgXxcIDsKK+arlT5jdcOhbnxcIDsKK+ariz5tacOhbnxcIDsKK+ariD5kw6huZ3xcIDsKK+arhD5jaHVufFwgOwor5quCPnpow6BvfFwgOwor5qq7Pmppw6BufFwgOwor5qq4Pm7DrW5nfFwgOwor5qqyPmJpbmd8XCA7CivmqrA+bWnDoW58XCA7Civmqqc+c29uZ3xcIDsKK+aqpj5iacSDb3xcIDsKK+aqoj5qacSDbnxcIDsKK+aqmz56aHVhfFwgOwor5qqZPmTErW5nfFwgOwor5qqUPmTDoG5nfFwgOwor5qqSPmTDoG5nfFwgOwor5qqIPnh1w6FufFwgOwor5qqGPnNoYW58XCA7CivmqoI+bsOzbmd8XCA7Civmqas+aMOpbmd8XCA7Civmqac+emVuZ3xcIDsKK+aplz5tw6luZ3xcIDsKK+aplj50w6FuZ3xcIDsKK+apkz5zaMO5bnxcIDsKK+apkj5jaMOpbnxcIDsKK+apjz56aMSDbnxcIDsKK+apjD54acOgbnxcIDsKK+apiz5xacOhb3xcIDsKK+apgj5kacOgbnxcIDsKK+apgD5jaHVufFwgOwor5qi/PnpoxINufFwgOwor5qi8PnpoZW58XCA7CivmqLc+Y29uZ3xcIDsKK+aorD5jb25nfFwgOwor5qirPmppYW58XCA7CivmqKk+cXXDoW58XCA7CivmqKU+cMOpbmd8XCA7CivmqKM+ecOgbmd8XCA7CivmqKI+bmnEg298XCA7CivmqJk+Ymlhb3xcIDsKK+aomD50w6FuZ3xcIDsKK+aolD5jaMOhb3xcIDsKK+aojD5ndcOgbnxcIDsKK+aoiD5xw61uZ3xcIDsKK+aohT5jb25nfFwgOwor5qiEPmNow6lufFwgOwor5qiDPmzDoW5nfFwgOwor5qe6Pmthbmd8XCA7Civmp7U+aHXDoG58XCA7Civmp7A+YsOobmd8XCA7Civmp6s+dHXDoW58XCA7Civmp6c+cWnDoG58XCA7Civmp6Y+ecOzbmd8XCA7Civmp6Q+bGnDoW58XCA7Civmp5w+YmluZ3xcIDsKK+anmT5kaWFufFwgOwor5qeVPnpodcOzfFwgOwor5qeTPmfDoG5nfFwgOwor5qeHPmRpYW58XCA7Civmprg+emhhaXxcIDsKK+amtj50w6FuZ3xcIDsKK+amtT5yw7NuZ3xcIDsKK+amsz50w61uZ3xcIDsKK+amrj5yw7NuZ3xcIDsKK+amrD55dcOhbnxcIDsKK+amqT5xacOhbnxcIDsKK+amoD5tw61uZ3xcIDsKK+amnj55dcOhbnxcIDsKK+amlz5qacOgbnxcIDsKK+amkj5sxINuZ3xcIDsKK+amkD56aMSDbnxcIDsKK+aluz5ow6luZ3xcIDsKK+alrz5zaMWtbnxcIDsKK+alqT5wacOhbnxcIDsKK+alqD56aGVufFwgOwor5qWnPnlpbmd8XCA7CivmpaU+eHXDoG58XCA7CivmpaQ+c8WPbmd8XCA7CivmpZ8+dMOtbmd8XCA7CivmpZM+ZmVuZ3xcIDsKK+alij55w6FuZ3xcIDsKK+alhD5wacOhbnxcIDsKK+akvj56aMOgbnxcIDsKK+akuj5qaWFufFwgOwor5qS3PmppYW58XCA7CivmpKs+emjEg258XCA7CivmpKo+cMOobmd8XCA7CivmpJw+amnEg258XCA7CivmpJc+ZMOsbmd8XCA7CivmpJY+cMOpbmd8XCA7CivmpJM+emh1w7N8XCA7CivmpIo+Y2h1w618XCA7CivmpIY+Y2jDs3V8XCA7Civmo70+Y2hlbnxcIDsKK+ajrT5uacOgbnxcIDsKK+ajrD5xdWFufFwgOwor5qOpPnl1YW58XCA7Civmo6c+emjDoG58XCA7Civmo6Q+cXXDoG58XCA7Civmo6I+d8SDbmd8XCA7Civmo6E+Z2FuZ3xcIDsKK+ajnz5kw7JuZ3xcIDsKK+ajiD5xacOgbnxcIDsKK+ajhz5jb25nfFwgOwor5qOGPnpodW58XCA7Civmo4U+YsOsbmd8XCA7Civmo4E+emh1w7N8XCA7Civmor8+bGnDoW58XCA7Civmork+YmluZ3xcIDsKK+aitz5qw6xuZ3xcIDsKK+aitD5jaGFufFwgOwor5qKyPnpodcOzfFwgOwor5qKlPnNvbmd8XCA7CivmoqE+a3XEg258XCA7CivmoqA+bHVcOsyGfFwgOwor5qKfPnhpYW98XCA7Civmop0+dGnDoW98XCA7Civmopk+aHXDoG58XCA7Civmopg+amnDoG58XCA7Civmoos+eHVhbnxcIDsKK+aiiD5wZW5nfFwgOwor5qKHPmzDsm5nfFwgOwor5qG7PmZlbmd8XCA7Civmobk+bMOhbmd8XCA7CivmobE+asOsbmd8XCA7Civmoa8+dGluZ3xcIDsKK+ahrT56aGVufFwgOwor5qGfPnpow6BufFwgOwor5qGcPnlpbmd8XCA7CivmoZg+Y2h1w618XCA7CivmoZI+c2FuZ3xcIDsKK+ahij5qdcOgbnxcIDsKK+agtD56aGFufFwgOwor5qCxPmfFj25nfFwgOwor5qCrPmppw6BufFwgOwor5qCmPmNow7N1fFwgOwor5qCkPmLDrG5nfFwgOwor5qCgPmppxINvfFwgOwor5qCfPmJpbmd8XCA7CivmoJo+emjDqG58XCA7CivmoJU+emhlbnxcIDsKK+aghD5yw7NuZ3xcIDsKK+afuj5ndcSDaXxcIDsKK+afoT55xY9uZ3xcIDsKK+aflz5zb25nfFwgOwor5p+WPnpoYW98XCA7Civmn40+eWFuZ3xcIDsKK+afgz5sw61uZ3xcIDsKK+aerj54aWFufFwgOwor5p6nPmppw6BufFwgOwor5p6bPnpow6BvfFwgOwor5p6APnNvbmd8XCA7Civmnb0+Y2jFj3V8XCA7Civmnbs+Y2jFj3V8XCA7CivmnbY+Y2h1bnxcIDsKK+adtD54aWFufFwgOwor5p2xPmRvbmd8XCA7Civmnaw+eXXDoW58XCA7CivmnZs+Z29uZ3xcIDsKK+adlz5tw6FuZ3xcIDsKK+adij5iaWFvfFwgOwor5p2EPnFpYW58XCA7CivmnL4+dMOtbmd8XCA7CivmnLI+cGnDoW98XCA7CivmnKk+ZMSVbmd8XCA7CivmnKc+bMOzbmd8XCA7CivmnKQ+bMSDbmd8XCA7CivmnKM+dMOzbmd8XCA7CivmnKI+d8Ogbmd8XCA7CivmnKE+em9uZ3xcIDsKK+acoD5sxY9uZ3xcIDsKK+acmT5tw61uZ3xcIDsKK+acmD5qdWFufFwgOwor5pyWPmzEg25nfFwgOwor5pyTPnRpw6BvfFwgOwor5pyOPmzDrW5nfFwgOwor5pyKPnJ1xINufFwgOwor5pu9PmNlbmd8XCA7Civmm60+dMSDbmd8XCA7Civmm6w+c2jDoGl8XCA7Civmm6s+bHXDoW58XCA7Civmm6g+bMOzbmd8XCA7Civmm6c+csOzbmd8XCA7Civmm58+Y2jDqW58XCA7Civmm5o+bcOpbmd8XCA7Civmm5U+eWnDoG58XCA7Civmm5Q+asOsbmd8XCA7Civmm5I+amnEg298XCA7Civmm4w+emjDoG98XCA7Civmm4k+eGnEg298XCA7Civmm4g+dMOzbmd8XCA7Civmmrs+asStbmd8XCA7Civmmrg+bGnDoW98XCA7CivmmrY+eHXDoW58XCA7CivmmrA+Y29uZ3xcIDsKK+aamT5jaHVufFwgOwor5pqYPnnDoW5nfFwgOwor5pqVPmppxINufFwgOwor5pqSPnHDrW5nfFwgOwor5pqFPnh1xINufFwgOwor5pqBPmfElW5nfFwgOwor5pqAPnfEg25nfFwgOwor5pm4PnpoxJVufFwgOwor5pmxPnNoxINufFwgOwor5pmtPnpoxY91fFwgOwor5pmrPnpodcOzfFwgOwor5pmqPnRpxINufFwgOwor5pmdPnpow7J1fFwgOwor5pmbPnhpw6BufFwgOwor5pmOPmjFj25nfFwgOwor5pmNPnTDs25nfFwgOwor5pmIPmppxINvfFwgOwor5pmFPnh1YW58XCA7CivmmYA+dGnEg298XCA7CivmmL0+bMOzbmd8XCA7CivmmLo+YsStbmd8XCA7CivmmLg+ZG9uZ3xcIDsKK+aYrj56w7JuZ3xcIDsKK+aYqj5iacOgbnxcIDsKK+aYpD5saW5nfFwgOwor5pijPmNoxa1ufFwgOwor5pihPnh1w6BufFwgOwor5piePmLErW5nfFwgOwor5picPnnDoW5nfFwgOwor5piaPnNow6hufFwgOwor5piYPmbEg25nfFwgOwor5piNPnh1YW58XCA7CivmmIk+ZsSDbmd8XCA7Civml74+Y2h1bnxcIDsKK+aXuD55w6FuZ3xcIDsKK+aXtT5jaMSDbnxcIDsKK+aXqz50aWFvfFwgOwor5pedPmd1w6BpfFwgOwor5pecPnpoYW58XCA7Civml5o+cGlhb3xcIDsKK+aXlD5qacOgbnxcIDsKK+aXkz5zaGFvfFwgOwor5peQPnpow6BvfFwgOwor5peNPmppbmd8XCA7Civml4o+ZsSDbmd8XCA7Civmlrs+aMOhbmd8XCA7Civmlrc+ZHXDoG58XCA7CivmlrU+emh1w7N8XCA7CivmlrI+emh1w7N8XCA7CivmlrE+emh1w7N8XCA7Civmlq4+emh1w7N8XCA7Civmlqw+emjEg258XCA7CivmlqA+amnDoG98XCA7Civmlpg+bGnDoW98XCA7Civmlo4+emhhaXxcIDsKK+aWhj5qacSDb3xcIDsKK+aWhT5qacSDb3xcIDsKK+aWgj5sacSDbnxcIDsKK+aWgD56aHXDs3xcIDsKK+aVvz5qacSDb3xcIDsKK+aVvT5qacSDb3xcIDsKK+aVuT5sacOhb3xcIDsKK+aVtj56aMOobnxcIDsKK+aVrT55w6FuZ3xcIDsKK+aVqT54acOgb3xcIDsKK+aVpz5qacSDb3xcIDsKK+aVpD5kaWFvfFwgOwor5pWfPmRpxINufFwgOwor5pWSPnpow6hufFwgOwor5pWQPmNow6lufFwgOwor5pWOPmppw6BvfFwgOwor5pWBPmRpYW58XCA7CivmlKo+amnEg298XCA7CivmlKk+ZMSDbmd8XCA7CivmlKg+dMSDbmd8XCA7CivmlKc+ZGlhbnxcIDsKK+aUoz5sdcOhbnxcIDsKK+aUoj5jdcOhbnxcIDsKK+aUmz5jdWFufFwgOwor5pSZPmNoYW58XCA7CivmlJY+eWluZ3xcIDsKK+aUkz5xaWFufFwgOwor5pSRPnFpYW58XCA7CivmlJA+cWlhbnxcIDsKK+aUjz5sxY9uZ3xcIDsKK+aUjT54aWFufFwgOwor5pSKPmh1xINufFwgOwor5pSHPnhpxINufFwgOwor5pSGPm5pxINufFwgOwor5pSBPnnEg25nfFwgOwor5pO2Pmppw6BufFwgOwor5pOwPm7DrW5nfFwgOwor5pOTPmt1xINpfFwgOwor5pOQPmh1w6BufFwgOwor5pOPPmrDrG5nfFwgOwor5pOLPmTEg25nfFwgOwor5pOJPmNodW98XCA7Civmk4Y+emh1w7N8XCA7Civmk4E+eW9uZ3xcIDsKK+aSvz5qacSDbnxcIDsKK+aSvj56aHVhfFwgOwor5pK9PnFpw6BvfFwgOwor5pK5PmppxINvfFwgOwor5pKvPnN1w6BufFwgOwor5pKoPmxpYW98XCA7Civmkp8+amnEg298XCA7Civmkpo+bmnEg258XCA7CivmkpQ+aMOobmd8XCA7Civmko0+eGnDoW58XCA7Civmkos+cnXDoW58XCA7Civmkoo+eGnDoG58XCA7CivmkoE+cWlhbnxcIDsKK+aRvT5iaWFvfFwgOwor5pG8PmJpYW98XCA7Civmkbs+Y2hhbnxcIDsKK+aRtz5qacSDb3xcIDsKK+aRtj50dcOhbnxcIDsKK+aRsj5zaMOgbnxcIDsKK+aRrD55w6xuZ3xcIDsKK+aRpT50w6BuZ3xcIDsKK+aRoD56xY9uZ3xcIDsKK+aRnD5ndcOgbnxcIDsKK+aRmj50w6FuZ3xcIDsKK+aRkz5mw6luZ3xcIDsKK+aRjj5sacOhb3xcIDsKK+aRjD5jaMSDbnxcIDsKK+aRgz5nYW5nfFwgOwor5pC8PnF1w6FufFwgOwor5pC3PnNoZW58XCA7CivmkKc+c2hhbnxcIDsKK+aQpT5jaHXDrXxcIDsKK+aQnz54acSDbnxcIDsKK+aQkj5iw6huZ3xcIDsKK+aQkT5iw6BuZ3xcIDsKK+aQjD56aMSDbnxcIDsKK+aQij5jaG91fFwgOwor5pCIPnnFj25nfFwgOwor5pCEPmdlbmd8XCA7Civmj7U+cWnDoW58XCA7Civmj7E+c2h1w7J8XCA7Civmj68+Z2VuZ3xcIDsKK+aPnT56dcOgbnxcIDsKK+aPmz5odcOgbnxcIDsKK+aPmj55w6FuZ3xcIDsKK+aPmT5iacOgbnxcIDsKK+aPmD5ow6luZ3xcIDsKK+aPlT56aMOobnxcIDsKK+aPlD56xY9uZ3xcIDsKK+aPiD5ob25nfFwgOwor5o+DPmppYW58XCA7Civmj4E+emhlbnxcIDsKK+aPgD5qacSDbnxcIDsKK+aOvT5ww6huZ3xcIDsKK+aOuz5qacSDbnxcIDsKK+aOsT5zaMWPdXxcIDsKK+aOpD5iaW5nfFwgOwor5o6ePnNow6BufFwgOwor5o6VPmzDrG5nfFwgOwor5o6UPnFpYW58XCA7CivmjoY+Z2FuZ3xcIDsKK+aNtT5jaMSVbnxcIDsKK+aNtD56xY9uZ3xcIDsKK+aNsz5jaGVufFwgOwor5o2yPmp1xINufFwgOwor5o2wPnF1w6FufFwgOwor5o2gPmJhbmd8XCA7CivmjZo+emhhaXxcIDsKK+aNlj5odcOhbnxcIDsKK+aNkj5zxY9uZ3xcIDsKK+aNgT5qacSDb3xcIDsKK+aNgD5mZW5nfFwgOwor5oy7PnNoYW58XCA7CivmjLg+amnEg258XCA7CivmjLc+cMOpbmd8XCA7CivmjLU+bMOybmd8XCA7CivmjLM+a2VuZ3xcIDsKK+aMrT5nxJVuZ3xcIDsKK+aMqT5zaHXDrHxcIDsKK+aMjz5kw7JuZ3xcIDsKK+aMjT5qacOgb3xcIDsKK+aMiz56aMOobnxcIDsKK+aMij5uw7JuZ3xcIDsKK+aLsj5nxY9uZ3xcIDsKK+aLkT5xacOhbnxcIDsKK+aKuj5jaGVufFwgOwor5oqwPnnEg25nfFwgOwor5oqmPmLErW5nfFwgOwor5oqMPnpoxJVufFwgOwor5oqDPmJpw6BufFwgOwor5omfPnNoZW58XCA7CivmiZo+ZGlhb3xcIDsKK+aJhD5zaGFufFwgOwor5omCPmRpw6BufFwgOwor5oiwPnpow6BufFwgOwor5oipPmppxINufFwgOwor5oimPnpow6BufFwgOwor5oilPmTElW5nfFwgOwor5oiZPmTDsm5nfFwgOwor5oiUPmppYW58XCA7CivmiIU+Z8Ogbmd8XCA7CivmiIM+dMSDbmd8XCA7CivmiIA+bGnDoG58XCA7Civmh70+aHVhbnxcIDsKK+aHuj5jaMOgbnxcIDsKK+aHuT5yw6BuZ3xcIDsKK+aHuD54dcOhbnxcIDsKK+aHtz5odcOhaXxcIDsKK+aHtD5jaMOgbnxcIDsKK+aHqT55xINuZ3xcIDsKK+aHpD5jaMOzdXxcIDsKK+aHnj5tw6luZ3xcIDsKK+aHnD5tw6huZ3xcIDsKK+aHkD5odcOhaXxcIDsKK+aHiT55aW5nfFwgOwor5oeBPmh1w6FufFwgOwor5oa/PmppYW98XCA7Civmhr0+c29uZ3xcIDsKK+aGvD5qxK1uZ3xcIDsKK+aGuD54aWFufFwgOwor5oayPnhpw6BufFwgOwor5oatPmxpxINvfFwgOwor5oaqPnhpw6FufFwgOwor5oaiPnhpYW98XCA7CivmhpE+cMOtbmd8XCA7CivmhpA+bGnDoW58XCA7Civmho0+amlhb3xcIDsKK+aGjD5jaMO6bnxcIDsKK+aGiT5ww6luZ3xcIDsKK+aGhT50w7JuZ3xcIDsKK+aGgT5jb25nfFwgOwor5oaAPmxpw6FvfFwgOwor5oW/PnDDrW5nfFwgOwor5oW7Pmp1w6BufFwgOwor5oW2PnHDrG5nfFwgOwor5oWzPnFpYW58XCA7CivmhbE+dHXDoW58XCA7Civmha4+bHVcOsyAfFwgOwor5oWrPnPFj25nfFwgOwor5oWpPmxpw6FufFwgOwor5oWjPmd1w6BufFwgOwor5oWfPnTDsm5nfFwgOwor5oWTPnBpw6BvfFwgOwor5oWSPmPDs25nfFwgOwor5oWPPm3ErW5nfFwgOwor5oWDPnnEg25nfFwgOwor5oWCPnnFj25nfFwgOwor5oS5PnnFj25nfFwgOwor5oSvPnPFj25nfFwgOwor5oSpPmdvbmd8XCA7CivmhKE+bMOobmd8XCA7CivmhJY+Y2jDqW58XCA7CivmhJM+ZMOgbmd8XCA7CivmhJE+ecWPbmd8XCA7CivmhJA+bWnEg258XCA7CivmhIw+aHXDoG58XCA7CivmhIs+eHVhbnxcIDsKK+aEgz54dWFufFwgOwor5oO+Pnpvbmd8XCA7Civmg7w+YmnEg258XCA7Civmg7c+Y2jFrW58XCA7Civmg6U+ecWPbmd8XCA7Civmg6Q+amlhbnxcIDsKK+aDmT5jaHXDsnxcIDsKK+aDkz5xdcOhbnxcIDsKK+aDjD55dWFufFwgOwor5oOJPmNoYW58XCA7Civmgr8+dGnEg258XCA7Civmgr4+a29uZ3xcIDsKK+aCuj5ndcOgbnxcIDsKK+aCuT5ndcOgbnxcIDsKK+aCsD5jw7NuZ3xcIDsKK+aCpD5jb25nfFwgOwor5oKZPmhlbmd8XCA7CivmgpM+cWnDoG58XCA7CivmgoE+anVhbnxcIDsKK+aCgD55xY9uZ3xcIDsKK+aBvj5tw6FuZ3xcIDsKK+aBsj5wZW5nfFwgOwor5oGuPnF1w6FufFwgOwor5oGgPmd1w6BpfFwgOwor5oGUPnhpw6BvfFwgOwor5oGMPnRpYW98XCA7CivmgYY+aMOpbmd8XCA7CivmgLI+YsStbmd8XCA7CivmgLE+Y29uZ3xcIDsKK+aAsD54dcOgbnxcIDsKK+aAnj5jaG91fFwgOwor5oCKPmNoYW98XCA7Civlv7w+a2FuZ3xcIDsKK+W/uj54aWFufFwgOwor5b+pPmNvbmd8XCA7Civlv5w+eWluZ3xcIDsKK+W/ij5kw6xuZ3xcIDsKK+W+vz5sw7JuZ3xcIDsKK+W+uj5qacSDb3xcIDsKK+W+sT5wacOgb3xcIDsKK+W+sD5iaWFvfFwgOwor5b6sPnDDoW5nfFwgOwor5b6nPmJpw6BufFwgOwor5b6kPmppw6BufFwgOwor5b6ePmNvbmd8XCA7CivlvpY+Y8Ozbmd8XCA7CivlvpM+Y8Ozbmd8XCA7CivlvpE+asOsbmd8XCA7CivlvoM+d8SDbmd8XCA7Civlvb4+bMStbmd8XCA7Civlvbo+d8Ohbmd8XCA7Civlvbg+d8Ogbmd8XCA7CivlvbQ+emh1w7N8XCA7Civlva8+cGlhb3xcIDsKK+W9rj55xY9uZ3xcIDsKK+W9qz5kaWFvfFwgOwor5b2hPnNoYW58XCA7CivlvYs+aMOzbmd8XCA7CivlvYc+eGlhb3xcIDsKK+W8vz5qacSDbnxcIDsKK+W8uD5iZW5nfFwgOwor5byzPmrDrG5nfFwgOwor5byyPnh1YW58XCA7CivlvLA+c2hhb3xcIDsKK+W8rj5xdWFufFwgOwor5byrPnpoxJVufFwgOwor5byqPmrDrG5nfFwgOwor5byoPmNoYW98XCA7CivlvJ4+c2jElW58XCA7CivlvJQ+ZGnDoG98XCA7CivlvIk+esOgbmd8XCA7Civlu74+Z8WPbmd8XCA7Civlu7M+dGluZ3xcIDsKK+W7sT55b25nfFwgOwor5buwPnRpbmd8XCA7Civlu68+eGlhbnxcIDsKK+W7rj55w61uZ3xcIDsKK+W7qz5sacOhb3xcIDsKK+W7pT5rdcOgaXxcIDsKK+W7nz5tacOgb3xcIDsKK+W7jj5xxK1uZ3xcIDsKK+W7jD5qacOgbnxcIDsKK+W6vz5tacOgb3xcIDsKK+W6uj5zb25nfFwgOwor5bqwPmRpbmd8XCA7Civluqw+cMOhbmd8XCA7Civluqg+eGlhb3xcIDsKK+W6oz50aWFvfFwgOwor5bqdPnTDs25nfFwgOwor5bqBPnRpbmd8XCA7Civlubc+YmluZ3xcIDsKK+W5tT5xaWFufFwgOwor5bmwPnhpxINufFwgOwor5bmsPmNow7N1fFwgOwor5bmrPmJhbmd8XCA7Civluao+bcOpbmd8XCA7Civluag+Y2hhbnxcIDsKK+W5pz5xaWFvfFwgOwor5bmdPmNoxINufFwgOwor5bmaPmJhbmd8XCA7CivluZY+Ymlhb3xcIDsKK+W5kz5zaGFufFwgOwor5bmQPmrErW5nfFwgOwor5bmKPmdvbmd8XCA7CivluYg+cMOtbmd8XCA7CivluYc+YmFuZ3xcIDsKK+W4sj5qaWFufFwgOwor5bixPmNow7N1fFwgOwor5biqPnpoZW58XCA7CivluKk+cWnDoG98XCA7CivluKg+c2h1w6x8XCA7CivluKM+anXDoG58XCA7CivluKE+cMOtbmd8XCA7CivluIQ+ZGluZ3xcIDsKK+W3uz5qdcOgbnxcIDsKK+W3uD5qdcSDbnxcIDsKK+W3tj56aGFvfFwgOwor5bejPmNow6FvfFwgOwor5begPmppbmd8XCA7Civlt5Q+ZGlhbnxcIDsKK+W3kz5kaWFufFwgOwor5beSPmx1w6FufFwgOwor5beRPmN1w6FufFwgOwor5beQPmNoxINvfFwgOwor5bePPnF1w6FufFwgOwor5beKPnnErW5nfFwgOwor5beJPmNow6FufFwgOwor5beGPnnDrW5nfFwgOwor5beEPmzDs25nfFwgOwor5beDPmzDs25nfFwgOwor5ba6PmzErW5nfFwgOwor5ba4PnLDs25nfFwgOwor5bauPnhpxINufFwgOwor5bamPnpoYW58XCA7CivltqM+cWnDoW98XCA7CivltqA+amnDoG98XCA7Civltps+bGnDoW98XCA7Civltpo+bGnDoW98XCA7Civltpg+emjDoG58XCA7CivltpU+amlhb3xcIDsKK+W2kj5jw6luZ3xcIDsKK+W2kD5sw7NuZ3xcIDsKK+W2hD56aMSDbnxcIDsKK+W2gz56aMSDbnxcIDsKK+W1vz5kxK1uZ3xcIDsKK+W1vD5jaMSDbnxcIDsKK+W1uz5rYW5nfFwgOwor5bW4Pnpvbmd8XCA7Civltbc+c8WPbmd8XCA7CivltbE+ecWPbmd8XCA7Civlta4+ZGlhbnxcIDsKK+W1rT5iZW5nfFwgOwor5bWqPnFpYW98XCA7CivltaQ+aMOzbmd8XCA7CivltaM+ZGFuZ3xcIDsKK+W1oj5jYW5nfFwgOwor5bWPPnpvbmd8XCA7CivltYk+dMOtbmd8XCA7CivltYg+aHXEg258XCA7CivltYI+bHVcOsyAfFwgOwor5bS2PmZlbmd8XCA7CivltLU+ecOhbmd8XCA7CivltKw+ZG9uZ3xcIDsKK+W0oD5kb25nfFwgOwor5bSaPmzDqW5nfFwgOwor5bSYPmTDsm5nfFwgOwor5bSXPmfEg25nfFwgOwor5bSEPnhpxINufFwgOwor5bSAPmzDoG5nfFwgOwor5bO6PmfElW5nfFwgOwor5bO3PnNoZW58XCA7Civls7U+aMOzbmd8XCA7Civls7Q+eGnDoG58XCA7Civls68+ZmVuZ3xcIDsKK+Wzpz5qaWFvfFwgOwor5bOePnFpw6FvfFwgOwor5bOdPnTDs25nfFwgOwor5bOaPmTDsm5nfFwgOwor5bORPnF1w6FufFwgOwor5bOCPnTDs25nfFwgOwor5bK9PmRvbmd8XCA7Civlsro+bMOtbmd8XCA7Civlsrk+dGnDoW98XCA7Civlsqc+dGnDoW98XCA7CivlsqE+Z2FuZ3xcIDsKK+Wynz55xINuZ3xcIDsKK+Wykj5xacOhbnxcIDsKK+Wyjz55dcOhbnxcIDsKK+WyjT5xaWFufFwgOwor5bKEPmdhbmd8XCA7Civlsb4+c2hlbnxcIDsKK+WxuD5sw7NuZ3xcIDsKK+Wxsz54aWFufFwgOwor5bGqPmxpw6FvfFwgOwor5bGkPmPDqW5nfFwgOwor5bGiPmx1XDrMhnxcIDsKK+Wxmz5ww61uZ3xcIDsKK+Wxkj5jaMOpbnxcIDsKK+WxjD5kacSDb3xcIDsKK+Wxhz50acOhbnxcIDsKK+Wwqz53YW5nfFwgOwor5bCqPndhbmd8XCA7CivlsKg+bcOhbmd8XCA7CivlsKY+bGnDoG98XCA7CivlsKM+bcOpbmd8XCA7CivlsKA+eGnEg258XCA7CivlsJ8+eGnEg258XCA7CivlsJ4+bGnDoG98XCA7CivlsJs+bGnDoW98XCA7Civlr7c+ZmVuZ3xcIDsKK+WvrD5rdWFufFwgOwor5a+pPnNoxJVufFwgOwor5a+nPm7DrW5nfFwgOwor5a+cPm7DrW5nfFwgOwor5a+bPmt1YW58XCA7Civlr5g+bsOsbmd8XCA7Civlr5c+bsOtbmd8XCA7Civlr5U+bsOtbmd8XCA7Civlr48+aHXDoW58XCA7Civlr44+YsOsbmd8XCA7Civlr40+bsOtbmd8XCA7Civlr4s+amnEg258XCA7Civlr4o+emhlbnxcIDsKK+WviD5xaW5nfFwgOwor5a+DPnl1YW58XCA7Civlrq8+eGlhb3xcIDsKK+Wurj5nb25nfFwgOwor5a6oPnRpxINvfFwgOwor5a6WPmjDs25nfFwgOwor5a6UPnl1YW58XCA7CivlrpI+emh1bnxcIDsKK+WukT5qxK1uZ3xcIDsKK+Wugj5yxY9uZ3xcIDsKK+Wtvz5sdcOhbnxcIDsKK+Wtvj55aW5nfFwgOwor5a2vPnFpYW58XCA7Civlra4+Y8Ozbmd8XCA7CivlrYw+bHXDoW58XCA7CivlrYk+cXXDoW58XCA7CivlrYY+bGnDoG58XCA7CivlrYU+eGlhbnxcIDsKK+Wtgj5qacSDb3xcIDsKK+WtgT5sw61uZ3xcIDsKK+WsvT55dWFufFwgOwor5ay5PnjDrG5nfFwgOwor5ay4PnNoxJVufFwgOwor5ay1Pm1pw6FufFwgOwor5ayzPnFpYW58XCA7CivlrLA+eWluZ3xcIDsKK+Wsrz5uacSDb3xcIDsKK+Wsqz55b25nfFwgOwor5aymPmNow7N1fFwgOwor5aylPnRpxINvfFwgOwor5ayjPm7DqW5nfFwgOwor5ayePmTFj25nfFwgOwor5aydPm5pxINvfFwgOwor5aycPnRpw6FvfFwgOwor5aybPmh1w6FufFwgOwor5ayaPmxpxINufFwgOwor5ayTPmppw6BvfFwgOwor5ayQPnhpYW58XCA7CivlrIw+amlhb3xcIDsKK+Wsiz5jaMOhbnxcIDsKK+WsgT5kZW5nfFwgOwor5au+Pmxpw6FufFwgOwor5au9Pmxpw6FvfFwgOwor5au7Pnhpw6FufFwgOwor5au6Pnhpw6FufFwgOwor5au4PnpoxINufFwgOwor5au2Pmppw6FvfFwgOwor5auePnnDs25nfFwgOwor5audPmthbmd8XCA7Civlq5k+eHXDoW58XCA7Civlq48+bMOhbmd8XCA7Civlq44+cMOhbmd8XCA7Civlq4s+bmnEg298XCA7Civlq4g+eWluZ3xcIDsKK+Wrhz5tw61uZ3xcIDsKK+Wrhj55w7NuZ3xcIDsKK+WrhD55dcOhbnxcIDsKK+Wrgz56aGVufFwgOwor5auAPnBpYW98XCA7CivlqrY+csOzbmd8XCA7CivlqrQ+eXXDoW58XCA7CivlqqU+cGlhbnxcIDsKK+WqoT5sacOgbnxcIDsKK+Wqlz54dWFufFwgOwor5aqWPnlpbmd8XCA7CivlqpQ+bWnDoW58XCA7Civlqo8+ZHVhbnxcIDsKK+Wqiz5jaHVufFwgOwor5aqKPnFpw6FufFwgOwor5aqGPnJ1xINufFwgOwor5am8PmNodcOyfFwgOwor5am4PmTDoG5nfFwgOwor5amxPnhpw6FufFwgOwor5amwPmRpxINufFwgOwor5amlPmNodcOyfFwgOwor5amkPnpob3V8XCA7CivlqaE+Y2h1w7J8XCA7CivlqZ4+eMOsbmd8XCA7CivlqZ0+ZGnDoG58XCA7CivlqZw+cWlhbnxcIDsKK+Wpmz5qaW5nfFwgOwor5amZPmrDrG5nfFwgOwor5amYPnF1w6FufFwgOwor5amWPnRpYW58XCA7CivlqZE+anXDoG58XCA7CivlqYs+eGlhb3xcIDsKK+WpiD5kw61uZ3xcIDsKK+Wpgz5jw7NuZ3xcIDsKK+Wpgj5tacOhbnxcIDsKK+Wouz5kb25nfFwgOwor5ai6PnpodWl8XCA7CivlqLk+eGnDoW58XCA7CivlqLc+c2h1w6x8XCA7CivlqJk+eMOtbmd8XCA7CivlqJc+ZMOsbmd8XCA7CivlqJY+Y2h1w7J8XCA7CivlqI8+bcOhbmd8XCA7CivlqI4+eGnDoG98XCA7CivlqIs+c2jDoG98XCA7CivlqIo+eGnDoG58XCA7CivlqII+aMOzbmd8XCA7CivlqIA+c29uZ3xcIDsKK+Wnvj5xdWFufFwgOwor5ae6PnhpxINufFwgOwor5aezPm3ErW5nfFwgOwor5aeuPmjDqW5nfFwgOwor5aetPnhpw6BufFwgOwor5aepPm5pw6BufFwgOwor5aenPmppYW58XCA7Civlp6Y+amlhbnxcIDsKK+Wnoj5qdWFufFwgOwor5aebPnTFj25nfFwgOwor5aeVPmppxINvfFwgOwor5aeOPnlhbmd8XCA7Civlp40+c2hhbnxcIDsKK+WniD5sw61uZ3xcIDsKK+WmvT5zaGVufFwgOwor5aa2Pnh1w6FufFwgOwor5aaxPnpoYW98XCA7Civlpqc+eXXDoW58XCA7CivlpqY+ZmVuZ3xcIDsKK+WmlD5rZW5nfFwgOwor5aaMPmrDrG5nfFwgOwor5aaFPmjDs25nfFwgOwor5aW3PnFpYW58XCA7CivlpbU+ZGluZ3xcIDsKK+WlsT5sacOhbnxcIDsKK+WlqT5sacOhbnxcIDsKK+Wloz53xJVuZ3xcIDsKK+Wlnz5rZW5nfFwgOwor5aWdPmRpYW98XCA7CivlpZA+aHXDoG58XCA7CivlpYw+ZGnEg258XCA7CivlpYY+cXXEg258XCA7CivlpKw+Z3XDoGl8XCA7CivlpKY+Y2jDqG58XCA7CivlpKI+bcOobmd8XCA7CivlpJ0+ccOtbmd8XCA7CivlpJc+eXXDoG58XCA7CivlpIw+bMOtbmd8XCA7CivlpIk+YmnDoG58XCA7CivlpIY+ZsOpbmd8XCA7CivlpIA+c2jDsnV8XCA7Civlo74+bcSDbmd8XCA7Civlo70+c2jDsnV8XCA7Civlo6c+cWnDoG98XCA7Civlo6A+bMWPbmd8XCA7Civlo58+bMWPbmd8XCA7Civlo54+aHXDoGl8XCA7Civlo5Y+cnXDoW58XCA7Civlo40+cWnDoG58XCA7Civlo4w+csSDbmd8XCA7Civlo4s+ZMOgbmd8XCA7Civlo4o+aHXDoGl8XCA7Civlo4I+ZGnDoG58XCA7Civlor0+cWlhb3xcIDsKK+WisT5kw6huZ3xcIDsKK+WipT5kxY9uZ3xcIDsKK+WipD5rdcOgaXxcIDsKK+WioT5zaMOgbnxcIDsKK+WioD5zaMOgbnxcIDsKK+WinT5xaWFvfFwgOwor5aKcPnpodcOsfFwgOwor5aKXPnplbmd8XCA7Civloos+Y2jElW58XCA7Civlooo+ZGnDoG58XCA7Civlooc+ecOzbmd8XCA7CivlooI+Ymlhb3xcIDsKK+WhuT5xacOgbnxcIDsKK+WhtT5jaMOpbnxcIDsKK+WhtD5iw6huZ3xcIDsKK+WhsT5sxINuZ3xcIDsKK+WhqD5nb25nfFwgOwor5aGmPnpow6hufFwgOwor5aGhPnRpw6FufFwgOwor5aGdPmLDoG5nfFwgOwor5aGcPnDDqW5nfFwgOwor5aGVPnfElW5nfFwgOwor5aGOPnnFj25nfFwgOwor5aGLPnnDrW5nfFwgOwor5aGKPmt1YWl8XCA7CivloYc+eHVhbnxcIDsKK+WhhT5kdcOgbnxcIDsKK+Wgvz5qacSDbnxcIDsKK+WgvT5nYW5nfFwgOwor5aC8PmZlbmd8XCA7CivloLs+emhlbnxcIDsKK+WguD5jaHVufFwgOwor5aCrPnpvbmd8XCA7CivloKc+cnXDoW58XCA7CivloJw+bGnDoG58XCA7CivloI4+bMOtbmd8XCA7CivloIs+cMOpbmd8XCA7CivloIg+Z2FuZ3xcIDsKK+WghT5qaWFufFwgOwor5Z+7Pnpoxa1ufFwgOwor5Z+yPmLElW5nfFwgOwor5Z+sPmRvbmd8XCA7Civln6o+a29uZ3xcIDsKK+WfqT5iw6BuZ3xcIDsKK+Wfoj5qdcSDbnxcIDsKK+WfjT54dcOgbnxcIDsKK+WfjD5sw6BuZ3xcIDsKK+Wfhz55xY9uZ3xcIDsKK+WfhT5mw6FuZ3xcIDsKK+WfhD5ww6luZ3xcIDsKK+WfgD5jaHXDrXxcIDsKK+WeuT5iYW5nfFwgOwor5Z63Pnhpw6BufFwgOwor5Z62Pnhpbmd8XCA7CivlnrE+ZMOgbmd8XCA7Civlnqw+aMOzbmd8XCA7Civlnqg+ZGnDoG58XCA7Civlnp8+ecOhbmd8XCA7Civlnpc+emjDoG98XCA7Civlnb0+bMOtbmd8XCA7CivlnbE+eWFuZ3xcIDsKK+Wdqz5kacOgbnxcIDsKK+WdmT5qaW5nfFwgOwor5Z2VPmppbmd8XCA7CivlnZM+eMOtbmd8XCA7CivlnYg+ZsOhbmd8XCA7CivlnLU+ZMOgbmd8XCA7CivlnLQ+emh1w7N8XCA7CivlnLI+cWlhbnxcIDsKK+Wcoj50aW5nfFwgOwor5ZyePmx1w6FufFwgOwor5ZydPmx1w6FufFwgOwor5ZyYPnR1w6FufFwgOwor5ZyTPnl1w6FufFwgOwor5ZySPnl1w6FufFwgOwor5ZyPPnF1YW58XCA7CivlnI4+eXXDoW58XCA7CivlnIw+Y2h1w618XCA7CivlnIo+cWluZ3xcIDsKK+Wbsz5qdcOgbnxcIDsKK+Wbsj50b25nfFwgOwor5ZuqPmNvbmd8XCA7Civlm6g+cGlhbnxcIDsKK+Wbpj55dWFufFwgOwor5ZulPmvDoG5nfFwgOwor5ZujPnR1w6FufFwgOwor5ZuPPmppYW58XCA7Civlm4Y+Y2jDoGl8XCA7Civlm4U+Y2jEg258XCA7Civlm4I+eGlhb3xcIDsKK+Wavj5odWFufFwgOwor5Zq9PmNodcOyfFwgOwor5Zq7PnhpYW98XCA7Civlmrg+ZGnEg258XCA7CivlmrY+eWluZ3xcIDsKK+WatT5jaMOhbnxcIDsKK+Waqz5jaMOobnxcIDsKK+WaqD5sw7NuZ3xcIDsKK+Waiz5jaMOzdXxcIDsKK+WagD5uw61uZ3xcIDsKK+WZuT5kYW5nfFwgOwor5ZmyPmt1w6BpfFwgOwor5ZmuPnl1YW58XCA7Civlma0+amnDoG98XCA7CivlmaU+bsOzbmd8XCA7CivlmaM+emjDsnV8XCA7CivlmZ8+ecOsbmd8XCA7CivlmZI+bGnDoW58XCA7CivlmLo+Y2jEg258XCA7CivlmLU+eGlhb3xcIDsKK+WYrz54acOgb3xcIDsKK+WYqD54acOgb3xcIDsKK+WYpj5qacOgb3xcIDsKK+WYkD54aWFvfFwgOwor5ZiLPnhpYW98XCA7CivlmIQ+amlhb3xcIDsKK+WYgj5qacOgb3xcIDsKK+WXuT5sacOhbnxcIDsKK+WXmz54acOhbnxcIDsKK+WXmT5wxINuZ3xcIDsKK+WXlT5xacSDbnxcIDsKK+WXij5oxY9uZ3xcIDsKK+WXiD55b25nfFwgOwor5Za2PnnDrW5nfFwgOwor5ZauPmNow6FufFwgOwor5ZasPnFpw6FvfFwgOwor5ZaqPnNhbmd8XCA7Civllps+aHXDoG58XCA7Civllpo+aHXDoG58XCA7Civllo0+Y2jDoWl8XCA7Civllbo+dMOhbmd8XCA7CivllbQ+Y2jEg258XCA7CivllbM+cXXDoW58XCA7Civllag+cWluZ3xcIDsKK+WVoz54acOhbnxcIDsKK+WViz54aWFvfFwgOwor5ZWIPmjDqG5nfFwgOwor5ZS4Pm5pw6BufFwgOwor5ZSpPmLElW5nfFwgOwor5ZSdPmjFj25nfFwgOwor5ZSVPmfDsm5nfFwgOwor5ZSNPmh1xINufFwgOwor5ZSMPnhpw6FufFwgOwor5ZO+PnNodW98XCA7Civlk68+eGnDoG58XCA7Civlk6s+bMOhbmd8XCA7Civlk6Q+bcOhbmd8XCA7Civlk6I+bMOybmd8XCA7Civlk6E+eXXDoW58XCA7Civlk4M+dMOzbmd8XCA7Civlkr4+aMWPbmd8XCA7Civlkro+eHXEg258XCA7CivlkrY+aHXDoGl8XCA7Civlkq4+emjDsnV8XCA7Civlkp4+eGnDoG58XCA7Civlkpc+eGnDoW58XCA7Civlkok+eWFuZ3xcIDsKK+WRuj54aWFvfFwgOwor5ZGvPnDDrW5nfFwgOwor5ZGqPnpow7J1fFwgOwor5ZGNPmhvbmd8XCA7CivlkYw+amnDoG98XCA7CivlkYI+bHVcOsyGfFwgOwor5ZC9Pmhvbmd8XCA7CivlkLc+Y2h1aXxcIDsKK+WQsD5ow7NuZ3xcIDsKK+WQnD5jaMWPdXxcIDsKK+WQhT54dWFufFwgOwor5Y+/Pmhvbmd8XCA7Civlj6I+Y8Ozbmd8XCA7Civlj5U+emh1w7N8XCA7Civlj48+Z3XDoGl8XCA7Civljrc+Z29uZ3xcIDsKK+WOtT55dcOhbnxcIDsKK+WOpz5kaWFufFwgOwor5Y6bPnRpbmd8XCA7CivljpY+cMOhbmd8XCA7CivljpA+cMOhbmd8XCA7CivljbI+c2jDoG98XCA7CivljYQ+bmnDoG58XCA7CivljLQ+c3XEg258XCA7CivljLM+bGnDoW58XCA7CivljLI+bGnDoW58XCA7CivljKg+emFuZ3xcIDsKK+WMpT5iacOgbnxcIDsKK+WMnz5rw6BuZ3xcIDsKK+WMmj5mYW5nfFwgOwor5YyRPmdvbmd8XCA7CivljIk+cGVuZ3xcIDsKK+WLuD5xdcOgbnxcIDsKK+WLtz5yw6FuZ3xcIDsKK+WLrT50w7NuZ3xcIDsKK+WLrD5qdcOgbnxcIDsKK+WLqD55xINuZ3xcIDsKK+WLpz5xdcOgbnxcIDsKK+WLpj5jaGFvfFwgOwor5YuhPnBpw6BvfFwgOwor5YucPnfElW5nfFwgOwor5YuVPmTDsm5nfFwgOwor5YuUPm1pxINufFwgOwor5YuNPnHDrW5nfFwgOwor5YuMPmp1w6BufFwgOwor5YuIPnnFj25nfFwgOwor5YuGPmzDoW5nfFwgOwor5Yq5Pnhpw6BvfFwgOwor5Yq3PnnDoW5nfFwgOwor5Yq1Pmp1w6BufFwgOwor5YqwPm1pxINvfFwgOwor5YqlPmtlbmd8XCA7Civlipc+Y3XDoW58XCA7CivlipY+Y2jDoW58XCA7CivlipQ+amnDoG58XCA7CivlipI+amnDoG58XCA7Civlio8+dGFuZ3xcIDsKK+WKjj5qacOgbnxcIDsKK+WKjT5qacOgbnxcIDsKK+WKiz5qacSDb3xcIDsKK+WKhj5sacOhbnxcIDsKK+WJvD5zaGFufFwgOwor5Ym5PmNoYW98XCA7Civlibg+dHXDoW58XCA7Civlibc+Y2jEg258XCA7CivlibY+anVhbnxcIDsKK+WJsT5qacOgbnxcIDsKK+WJrD5kdWFufFwgOwor5YmmPnR1w6FufFwgOwor5YmjPmppw6BufFwgOwor5YmgPnHDrW5nfFwgOwor5YmbPmdhbmd8XCA7CivliZc+Y2jEg258XCA7CivliYg+eXVhbnxcIDsKK+WJhD5qxK1uZ3xcIDsKK+WIrD5jaMSDbnxcIDsKK+WIqj5zaGFufFwgOwor5YiiPmzDrW5nfFwgOwor5YiLPnFpw6BufFwgOwor5Ye8PmTDoG5nfFwgOwor5Ye3Pmt1w6BpfFwgOwor5Ye0PnDDrW5nfFwgOwor5YeuPmZlbmd8XCA7Civlh6w+ZmVuZ3xcIDsKK+WHqD5mZW5nfFwgOwor5YeVPm3ErW5nfFwgOwor5YeUPmNhbmd8XCA7Civlh40+ZMOybmd8XCA7Civlh4o+asOsbmd8XCA7Civlh4g+asOsbmd8XCA7Civlhr8+amlhbnxcIDsKK+WGrj5nYW5nfFwgOwor5YarPmJpbmd8XCA7CivlhqE+bcOpbmd8XCA7CivlhpE+emjDsnV8XCA7CivlhoY+eXVhbnxcIDsKK+WGgT5jaMSDbnxcIDsKK+WFsj50aWFufFwgOwor5YWmPnfDoW5nfFwgOwor5YWfPnNoZW58XCA7CivlhZs+cWlhbnxcIDsKK+WEvj5uw6BuZ3xcIDsKK+WEuz50xINuZ3xcIDsKK+WEtD5yw6FuZ3xcIDsKK+WEsz5jaMOgbnxcIDsKK+WEsT5sxY9uZ3xcIDsKK+WErz50w6luZ3xcIDsKK+WErT5jaMOobnxcIDsKK+WErD5jaMOobnxcIDsKK+WEpj5iaWFvfFwgOwor5YScPm7DrW5nfFwgOwor5YSaPm3DqW5nfFwgOwor5YSZPnFpw6BufFwgOwor5YSVPmNow6FpfFwgOwor5YSUPmNow7N1fFwgOwor5YSMPmppxINvfFwgOwor5YSJPmppxINufFwgOwor5YSIPmt1w6BpfFwgOwor5YSFPmRhbmd8XCA7CivlhIM+Y2jDoW58XCA7CivlhII+bsOzbmd8XCA7Civlg70+emjDsnV8XCA7Civlg7w+ZmVuZ3xcIDsKK+WDuj5xacOgb3xcIDsKK+WDtD54acOgbnxcIDsKK+WDrD5qaWFvfFwgOwor5YOpPnhpw6BufFwgOwor5YOlPmppxINvfFwgOwor5YOjPmppw6BufFwgOwor5YOdPmNow6FufFwgOwor5YOcPmTDqG5nfFwgOwor5YORPnFpw6FvfFwgOwor5YOQPnNow6BufFwgOwor5YONPmTDsm5nfFwgOwor5YOMPnnDrW5nfFwgOwor5YOKPnhpYW58XCA7Civlg4k+cWlhbnxcIDsKK+WDhj5sacOhbnxcIDsKK+WDhD5wacOgb3xcIDsKK+WCvj5xaW5nfFwgOwor5YK5PmrDrG5nfFwgOwor5YK1Pnpow6BpfFwgOwor5YKxPnPFj25nfFwgOwor5YKwPnDDqW5nfFwgOwor5YKvPnrFj25nfFwgOwor5YKtPnlvbmd8XCA7CivlgqE+YsOsbmd8XCA7Civlgp8+ecSDbmd8XCA7Civlgps+ecWPbmd8XCA7Civlgpo+eGnDoG98XCA7CivlgpY+Y2FuZ3xcIDsKK+WClD5xacOgbnxcIDsKK+WCjz50w6FuZ3xcIDsKK+WCjj5kaWFufFwgOwor5YKHPnLFj25nfFwgOwor5YKGPnDDoW5nfFwgOwor5YG1PnpoZW58XCA7CivlgbM+ZHVhbnxcIDsKK+WBrT5tacSDbnxcIDsKK+WBoj5jaMWPdXxcIDsKK+WBoT56aMOgbnxcIDsKK+WBkj50xINuZ3xcIDsKK+WBkT5mZW5nfFwgOwor5YGLPmLErW5nfFwgOwor5YGGPmNoxa1ufFwgOwor5YGEPm51w6BufFwgOwor5YGCPmppYW58XCA7CivlgYA+eWluZ3xcIDsKK+WAuT5qacSDbnxcIDsKK+WAsj5kb25nfFwgOwor5YCwPmzDqW5nfFwgOwor5YCvPnNvbmd8XCA7CivlgKc+em9uZ3xcIDsKK+WApD5rxY9uZ3xcIDsKK+WAoz5mxINuZ3xcIDsKK+WAnj5qw6xuZ3xcIDsKK+WAlz5ww6luZ3xcIDsKK+WAlj54w6xuZ3xcIDsKK+WAjj50aWFufFwgOwor5YCKPnrDsm5nfFwgOwor5YCJPmNhbmd8XCA7CivlgII+YsOsbmd8XCA7Civkv78+amnDoG58XCA7Civkv7U+YmnEg298XCA7Civkv7Q+amnDoG58XCA7Civkv7I+eGnDoG98XCA7Civkv5s+bWnEg258XCA7Civkv5Q+eGnDoG58XCA7Civkv5M+asOsbmd8XCA7Civkv40+bMOhbmd8XCA7Civkvro+c2jDqG58XCA7Civkvrk+dMStbmd8XCA7CivkvrY+bHVcOsyGfFwgOwor5L60PmNoxY91fFwgOwor5L6yPnpow6hufFwgOwor5L6rPm7DrG5nfFwgOwor5L6fPmppw6BufFwgOwor5L6cPnpob3V8XCA7CivkvoE+c2hlbnxcIDsKK+S+gD54w61uZ3xcIDsKK+S9uj5xdcOhbnxcIDsKK+S9tT5iw6xuZ3xcIDsKK+S9sj5tw61uZ3xcIDsKK+S9oT54dWFufFwgOwor5L2UPnpoYW58XCA7CivkvZI+eWFuZ3xcIDsKK+S9iz5zaMOgb3xcIDsKK+S9gj50acOhbnxcIDsKK+S8uz5iZW5nfFwgOwor5Ly3Pnpow7J1fFwgOwor5LytPnh1w6FufFwgOwor5LyjPnhpw6BufFwgOwor5LyWPnTEg25nfFwgOwor5LyEPmRpw6BvfFwgOwor5Lu6PmNhbmd8XCA7Civku7k+ZmVuZ3xcIDsKK+S7pj5jaMOgb3xcIDsKK+S7nD5ow7NuZ3xcIDsKK+S7mj54aWFufFwgOwor5LuMPmJpbmd8XCA7Civkur4+d8Ohbmd8XCA7Civkurc+bGnDoW58XCA7CivkurA+amluZ3xcIDsKK+S6oz5wZW5nfFwgOwor5LqQPmfDqG5nfFwgOwor5LqCPmx1w6BufFwgOwor5LmqPm5hbmd8XCA7CivkuLw+asStbmd8XCA7CivkuLM+Y2jEg258XCA7CivkuLE+Z3XDoG58XCA7CivkuK4+Z3XDoG58XCA7CivkuKY+YsOsbmd8XCA7CivkuJI+Y2jFj3V8XCA7CivkuI8+bWnEg258XCA7CivktrE+dMOzbmd8XCA7CivktqI+eGnDoW58XCA7CivktqA+amnEg258XCA7Civktp8+eGnDoG58XCA7CivktpA+a3XDoGl8XCA7Civktoc+emjDsnV8XCA7CivktoQ+cMOtbmd8XCA7CivktoI+emh1w7N8XCA7Civktbo+dMStbmd8XCA7CivktbI+ZGnDoG98XCA7Civkta8+dHXEg258XCA7Civkta4+ecOgbmd8XCA7Civktag+bcOhbmd8XCA7CivktaQ+amnEg258XCA7CivktaE+amnEg258XCA7CivktZ4+asOsbmd8XCA7CivktZw+bsWPbmd8XCA7CivktZs+amnDoG58XCA7CivktZY+amnDoG58XCA7CivktZQ+ZMWPbmd8XCA7CivktZA+Y2jEg258XCA7CivktYc+eGnDoG58XCA7CivktYY+bcOpbmd8XCA7CivktL8+bcOpbmd8XCA7CivktLw+Y2jEg258XCA7CivktLY+cMOpbmd8XCA7CivktLU+YsStbmd8XCA7CivktK4+c2jDoG58XCA7CivktKs+bMOtbmd8XCA7CivktKk+cGnDoW98XCA7CivktJ8+aHXDoW58XCA7CivktJw+aHXDoWl8XCA7CivktJs+amnEg298XCA7CivktJo+Z8SDbmd8XCA7CivktJI+bMOtbmd8XCA7CivktIw+bcOpbmd8XCA7CivktIs+eHXDoW58XCA7CivktIk+eHXDoW58XCA7CivktIc+bMOtbmd8XCA7CivktII+aMOgbmd8XCA7CivktIA+dMOzbmd8XCA7Civks7c+Y8Ozbmd8XCA7Civks7I+emjDqG58XCA7Civks6o+anXDoG58XCA7Civks6M+eXXDoW58XCA7Civks6A+Y2h1w618XCA7Civks54+YsSVbmd8XCA7Civks5k+eMStbmd8XCA7Civks5I+eXXDoW58XCA7Civks4s+dMOzbmd8XCA7Civks4I+dGnDoW98XCA7Civksr4+cWnEg298XCA7Civksrs+eHXDoW58XCA7CivksrQ+emjDqG58XCA7CivksrM+aMOhbmd8XCA7CivksrE+ZsSDbmd8XCA7Civksq4+eXXDoW58XCA7Civksqg+aMOzbmd8XCA7CivksqI+dMOpbmd8XCA7Civksps+bcOpbmd8XCA7Civkspg+Z3XEg258XCA7Civkspc+eGnDoW58XCA7CivkspY+Y2jDs3V8XCA7CivkspQ+ccOtbmd8XCA7Civkso0+dMOpbmd8XCA7Civksow+a3XEg258XCA7CivksoI+eHXDoW58XCA7Civksb8+Y2jDoG58XCA7Civksbw+emjEg258XCA7CivksbY+bMOhbmd8XCA7CivksbQ+Z8Oobmd8XCA7Civksa0+Z8Oobmd8XCA7CivksaQ+eGnDoG58XCA7CivksaA+emjDoG58XCA7CivksZQ+dGnDoW98XCA7CivksZM+dMOtbmd8XCA7CivksY4+Z8Oobmd8XCA7CivksY0+Z8Oobmd8XCA7CivksYk+c2jDoG58XCA7CivksYc+c2jDoG58XCA7CivksYE+cWnDoW98XCA7CivksLc+YsOgbmd8XCA7CivksLE+bMOtbmd8XCA7CivksKs+Y2jDoW98XCA7CivksKM+d8SDbmd8XCA7CivksKI+eMOsbmd8XCA7CivksKA+c2jDqW58XCA7CivksJ0+esOobmd8XCA7CivksJY+Y3XDoW58XCA7CivksJM+bWnDoW58XCA7CivksJI+bcOpbmd8XCA7CivksIw+esWPbmd8XCA7CivksIM+cMOpbmd8XCA7Civkr74+dGnDoW98XCA7Civkr6c+ccStbmd8XCA7Civkr6Q+a3XDoGl8XCA7Civkr6E+amnEg258XCA7Civkr5s+amnEg258XCA7Civkr5g+aHXDoG58XCA7Civkr5Y+bMOhbmd8XCA7Civkr5I+aMOpbmd8XCA7Civkr40+bMOtbmd8XCA7Civkrr8+amnEg258XCA7Civkrr4+cMOhbmd8XCA7CivkrrU+dMOzbmd8XCA7CivkrrQ+ZMOobmd8XCA7Civkrp0+aHXDoW58XCA7Civkrpo+bMOobmd8XCA7CivkrpU+Y2h1w7J8XCA7CivkrpM+emjDoG98XCA7Civkro0+bmnEg298XCA7CivkroQ+eHXDoW58XCA7CivkroE+cGnDoW58XCA7CivkrbQ+aHXDoW58XCA7CivkrbA+YsSVbmd8XCA7Civkra0+c2jFj3V8XCA7Civkrag+c2h1w6x8XCA7CivkraQ+cWnEg258XCA7CivkraI+bsOtbmd8XCA7CivkraA+amnEg258XCA7CivkrZ0+a3XDoGl8XCA7CivkrZc+ecStbmd8XCA7CivkrZU+amnDoG58XCA7CivkrZE+bGnDoW58XCA7CivkrZA+ecOgbmd8XCA7CivkrYo+ecStbmd8XCA7CivkrYg+amnDoG58XCA7CivkrLw+eXXDoG58XCA7CivkrLs+amnDoG58XCA7CivkrLo+ecOgbmd8XCA7CivkrLA+c2jDoG98XCA7CivkrK8+bmnDoW58XCA7CivkrKw+ecSDbmd8XCA7CivkrKc+eXXDoW58XCA7CivkrKQ+Y2jDoW98XCA7CivkrJ0+aMOpbmd8XCA7CivkrJc+ecOhbmd8XCA7CivkrJY+aMOpbmd8XCA7CivkrIs+bMOpbmd8XCA7CivkrIc+eXXDoG58XCA7Civkq7o+aMOzbmd8XCA7Civkq7k+aMOzbmd8XCA7Civkq7U+bWnDoW58XCA7Civkq6w+emjElW58XCA7Civkq6Q+bcOtbmd8XCA7Civkq6E+cWnDoG58XCA7Civkq5k+c8SDbmd8XCA7Civkq5Y+Y2jElW58XCA7Civkq4Q+Y2h1w6B8XCA7Civkq4M+Y2jDum58XCA7Civkqrs+YmnDoG58XCA7CivkqrQ+emjElW58XCA7Civkqq8+ecOtbmd8XCA7Civkqq4+Y2jFj3V8XCA7Civkqq0+cnXEg258XCA7CivkqqY+aMOzbmd8XCA7Civkqpw+Y2jDoG58XCA7CivkqpI+amnDoG98XCA7Civkqow+emjDoG58XCA7Civkqoo+bMOzbmd8XCA7Civkqog+cWnEg258XCA7CivkqoA+Z3XEg258XCA7Civkqbw+ZsOpbmd8XCA7Civkqbg+csOzbmd8XCA7CivkqbY+Y2jEg258XCA7CivkqbA+eHXDoG58XCA7Civkqaw+YsSVbmd8XCA7Civkqao+Z3XEg258XCA7Civkqak+eXXEg258XCA7CivkqaY+dGnDoW98XCA7CivkqZ4+bmnDoW58XCA7CivkqZw+emjDsnV8XCA7CivkqZk+eHXDoG58XCA7CivkqZE+aMOzbmd8XCA7CivkqY0+bGnEg298XCA7CivkqYw+cWnDoW98XCA7CivkqYY+amnEg258XCA7CivkqYU+emjEg258XCA7CivkqYQ+dGnEg258XCA7CivkqL8+cWnDoW58XCA7CivkqLs+YsOobmd8XCA7CivkqLc+eGnDoG58XCA7CivkqK8+emjDqG58XCA7CivkqKw+bGnDoW58XCA7CivkqKk+bMOtbmd8XCA7CivkqKY+cMOhbmd8XCA7CivkqJg+eGnDoG58XCA7CivkqI4+aMOzbmd8XCA7CivkqI0+ecStbmd8XCA7CivkqIs+bnl1w6h8XCA7CivkqIU+bGnDoW98XCA7Civkp68+Y2jDoW58XCA7Civkp64+eGnEg258XCA7Civkp58+eGnDoG58XCA7Civkp5w+dMOhbmd8XCA7Civkp5s+YsOgbmd8XCA7Civkp5k+bMOtbmd8XCA7Civkp5Y+amnDoG58XCA7Civkp44+eHXDoG58XCA7Civkp4s+eGnEg258XCA7Civkp4Y+aMOzbmd8XCA7Civkp4M+ZGnDoG58XCA7CivkprM+aMOgbmd8XCA7CivkprI+cWnDoG58XCA7Civkpq4+Y2jFrW58XCA7CivkpqU+eGnDoW58XCA7CivkpqE+aHXDoW58XCA7CivkppI+ZMOgbmd8XCA7CivkppA+dMStbmd8XCA7Civkpo4+Z3XEg258XCA7Civkpoo+bmnEg298XCA7Civkpog+ZsSDbmd8XCA7CivkpoU+c2jDoG58XCA7CivkpoI+c2jDoG58XCA7CivkpbU+eGnEg298XCA7CivkpbA+bcOobmd8XCA7Civkpao+eGnEg258XCA7Civkpac+aHXDoW58XCA7CivkpaU+bGnDoW58XCA7CivkpaI+bMOzbmd8XCA7CivkpZ4+amnEg298XCA7CivkpZw+amnDoG58XCA7CivkpZc+a3XEg258XCA7CivkpZY+dGnDoW58XCA7CivkpZI+Y2jDs3V8XCA7CivkpY4+Y2jDum58XCA7CivkpYc+c2jDoG58XCA7CivkpYU+cWnDoG58XCA7CivkpYI+bcOobmd8XCA7CivkpYA+Y2jEg258XCA7CivkpLw+eGnDoG58XCA7CivkpLg+enXDoG58XCA7CivkpLA+d8SVbmd8XCA7CivkpK8+eMOtbmd8XCA7CivkpK0+a3XDoG58XCA7CivkpKs+Y2jDoW58XCA7CivkpKM+bHl1w6h8XCA7CivkpJ8+Y2jDqW58XCA7CivkpJ0+ecOsbmd8XCA7CivkpJg+Y2jEg258XCA7CivkpJQ+amnDoG58XCA7CivkpJM+bcOpbmd8XCA7CivkpJE+d8Ogbmd8XCA7CivkpIo+csOzbmd8XCA7CivkpIQ+bWnEg258XCA7Civko6k+Y2jDum58XCA7Civko6g+Y2jDum58XCA7Civko6Q+amnDoG98XCA7Civko6M+ZMSDbmd8XCA7Civko5g+dMOhbmd8XCA7Civko5E+Y2jDoW58XCA7Civko4o+ZMSDbmd8XCA7Civko4g+aMOgbmd8XCA7Civko4Y+eMOtbmd8XCA7Civko4U+Y2jDqW58XCA7Civkor4+eGnEg258XCA7Civkors+Y2jDqW58XCA7Civkoqc+bGnDoG98XCA7CivkoqI+Y8Ogbmd8XCA7CivkoqA+c8Oybmd8XCA7Civkopo+Z8Oybmd8XCA7Civkoo0+ZsSDbmd8XCA7Civkook+bsOzbmd8XCA7Civkoog+Y2jDqW58XCA7Civkooc+csWPbmd8XCA7CivkooU+Y2jDqW58XCA7Civkob8+bMOtbmd8XCA7Civkobw+bMOtbmd8XCA7CivkobI+Y2jDoW58XCA7CivkobA+a8SVbmd8XCA7Civkoas+cMOpbmd8XCA7Civkoao+Y2jDoW58XCA7CivkoaY+c8SDbmd8XCA7CivkoaU+csOzbmd8XCA7CivkoaI+YmnDoG58XCA7CivkoZk+bMOhbmd8XCA7CivkoZg+dGnDoW58XCA7CivkoZc+Z8WPbmd8XCA7CivkoZY+asOsbmd8XCA7CivkoZM+anXDoG58XCA7CivkoZI+dGnDoW58XCA7CivkoY8+aMOzbmd8XCA7CivkoYw+aMOzbmd8XCA7CivkoYk+a8SDbmd8XCA7CivkoYY+csOzbmd8XCA7CivkoYE+bMWPbmd8XCA7CivkoYA+emjEg258XCA7CivkoL4+c2jEg258XCA7CivkoLw+ZGnDoG98XCA7CivkoLc+dGnEg298XCA7CivkoLI+bMOtbmd8XCA7CivkoLA+cXXDoW58XCA7CivkoK4+dMOpbmd8XCA7CivkoKw+ZMOobmd8XCA7CivkoKo+ZHXDoG58XCA7CivkoKg+Y2jDoG58XCA7CivkoKM+eHXEg258XCA7CivkoKI+bcOobmd8XCA7CivkoJw+csOzbmd8XCA7CivkoJs+amnEg298XCA7CivkoIQ+dGnEg258XCA7Civkn7o+YsSDbmd8XCA7Civkn7Q+emjDqG58XCA7Civkn7A+amnEg258XCA7Civkn60+dGnDoW98XCA7Civkn6o+ZsSVbmd8XCA7Civkn6c+dGnDoW58XCA7Civkn6U+bcOhbmd8XCA7Civkn6I+Y2jDqW58XCA7Civkn5g+aMOgbmd8XCA7Civkn5Y+dMOgbmd8XCA7Civkn5I+cXXDoW58XCA7Civkn40+ZGnDoW58XCA7Civkn4s+emjEg258XCA7Civkn4U+amnDoG58XCA7Civknrw+Y2h1xK18XCA7Civknrs+ecWPbmd8XCA7CivknpI+ZMOybmd8XCA7CivknpE+aMOzbmd8XCA7CivknpA+Y2jFrW58XCA7Civkno0+ccOtbmd8XCA7Civknos+Y2jDqG58XCA7CivknoQ+YmnDoG98XCA7CivknoI+cnXEg258XCA7CivknoE+eGnDoG58XCA7Civknbw+ccOtbmd8XCA7Civknbo+Z3XDoG58XCA7Civkna4+eHXDoG58XCA7Civknak+emjDqG58XCA7Civknag+eGnDoW58XCA7CivknaA+aHXDoW58XCA7CivknZY+emjEg298XCA7CivknYs+esOybmd8XCA7CivknYA+bGnDoW98XCA7CivknK4+bGnDoW98XCA7CivknKw+c8WPbmd8XCA7CivknKs+aMOzbmd8XCA7CivknKI+eGnEg258XCA7CivknJ8+Y2jDqW58XCA7CivknJ0+dHXEg258XCA7CivknJs+Y2jDoW58XCA7CivknJg+asStbmd8XCA7CivknI0+bGnDoW98XCA7CivknIw+bHXDoW58XCA7Civkm7U+c2jDsnV8XCA7Civkm7M+amnEg258XCA7Civkm60+eMOsbmd8XCA7Civkm6w+Y2jDs3V8XCA7Civkm6Y+c8Oybmd8XCA7Civkm5o+bHl1w6h8XCA7Civkm5I+YmnDoG58XCA7Civkm4c+eXXEg258XCA7Civkm4Y+emjDsnV8XCA7Civkm4Q+eXXEg258XCA7Civkm4M+d8Ogbmd8XCA7CivkmrI+c2jDoG58XCA7Civkmq4+csOpbmd8XCA7Civkmqk+amnEg298XCA7Civkmpo+eGnEg258XCA7Civkmpg+Y2jDqW58XCA7CivkmpY+bMOtbmd8XCA7CivkmpM+bmnEg258XCA7Civkmo8+bMOobmd8XCA7Civkmog+anXDoG58XCA7Civkmbw+c2jDoG98XCA7Civkmbo+bGnDoW58XCA7Civkma4+Z3XDoG58XCA7Civkmaw+ecOsbmd8XCA7Civkmao+bMOzbmd8XCA7Civkmak+bcOpbmd8XCA7CivkmaY+bcOpbmd8XCA7CivkmaU+bMOtbmd8XCA7CivkmaI+esOobmd8XCA7CivkmZw+ZsOpbmd8XCA7CivkmZs+Z3XDoG58XCA7CivkmZo+bmnEg298XCA7CivkmYc+bnXEg258XCA7CivkmYA+YsSVbmd8XCA7CivkmL4+Z3XEg258XCA7CivkmLo+emjDoG58XCA7CivkmKw+csOzbmd8XCA7CivkmKk+eHXDoG58XCA7CivkmKg+amnEg298XCA7CivkmJU+aMOhbmd8XCA7CivkmI0+Y2jDoGl8XCA7CivkmIY+eGnEg258XCA7Civkl78+bsOtbmd8XCA7Civkl74+eGnEg258XCA7Civkl7Q+dMOtbmd8XCA7Civkl7A+Z3XDoG58XCA7Civkl6Q+ecOzbmd8XCA7Civkl6A+eHXDoW58XCA7Civkl5I+YsOsbmd8XCA7Civkl4g+bcOpbmd8XCA7Civkl4Y+Z3XEg258XCA7Civkl4M+emjDoG58XCA7Civklro+dGnDoW98XCA7Civklrk+ecOhbmd8XCA7Civklq0+anXDoG58XCA7Civklqs+YsOgbmd8XCA7CivklqI+bWnDoW98XCA7CivklqA+eXXDoW58XCA7Civklp8+bcSDbmd8XCA7Civklp4+emjFj3V8XCA7Civklo0+cWnDoW58XCA7CivkloU+bMOtbmd8XCA7CivkloI+bHXDoW58XCA7Civklbo+Y8Ozbmd8XCA7CivklbQ+emh1w7N8XCA7Civkla8+cGnDoW98XCA7Civkla0+cWnDoW58XCA7Civklag+dMOpbmd8XCA7Civklac+eGnDoG98XCA7CivklaY+ecOtbmd8XCA7CivklZ4+bMOgbmd8XCA7CivklZg+bMOtbmd8XCA7CivklZQ+eGnDoW58XCA7CivklYA+a3XEg258XCA7CivklLg+YmnEg298XCA7CivklK0+bsOsbmd8XCA7CivklKA+c2jEg298XCA7CivklJs+ccStbmd8XCA7CivklJo+Y2jDum58XCA7CivklJk+ZGnDoG98XCA7CivklJY+bMOtbmd8XCA7CivklJQ+asOsbmd8XCA7CivklI8+Y2jDsnV8XCA7Civkk7c+eMOsbmd8XCA7Civkk7Q+cnXDoW58XCA7Civkk7E+Y2jDoWl8XCA7Civkk6Y+ZGnEg258XCA7Civkk50+bcOpbmd8XCA7Civkk5M+Y2jDs3V8XCA7Civkk5I+a3XEg2l8XCA7Civkk5E+YsStbmd8XCA7Civkk5A+Y2jDum58XCA7Civkk44+Y2h1w7J8XCA7Civkkrg+eGnDoW58XCA7Civkkq0+ZMSVbmd8XCA7Civkkqo+YmnDoG58XCA7Civkkp4+Y2jDqW58XCA7Civkkp0+eGnDoW98XCA7Civkkps+aMOpbmd8XCA7Civkkpo+c2jEg298XCA7CivkkpU+eGnEg298XCA7CivkkpI+dGnDoW98XCA7CivkkpA+bcOpbmd8XCA7Civkko4+bcSDbmd8XCA7Civkko0+cMSDbmd8XCA7Civkkow+bcOsbmd8XCA7Civkkos+ecSDbmd8XCA7CivkkoU+dMOpbmd8XCA7CivkkaA+bGnEg298XCA7CivkkZ4+c2jDuW58XCA7CivkkZo+dGnDoW58XCA7CivkkZc+ZMOgbmd8XCA7CivkkZA+emjElW58XCA7CivkkY8+cXXDoW58XCA7CivkkY4+Y2jEg258XCA7CivkkYk+ecOtbmd8XCA7CivkkYY+ecSDbmd8XCA7CivkkYU+bcOpbmd8XCA7CivkkYM+bcOpbmd8XCA7CivkkK4+Y2jEg258XCA7CivkkKU+d8SVbmd8XCA7CivkkI8+Y2jFrW58XCA7CivkkI0+emjDsnV8XCA7CivkkIw+dGnEg258XCA7CivkkIc+Y2jDum58XCA7CivkkIE+bmnEg298XCA7Civkj7s+bsOpbmd8XCA7Civkj7k+eGnDoG58XCA7Civkj7U+bcSVbmd8XCA7Civkj7Q+c2jDoG98XCA7Civkj50+Y2jDum58XCA7Civkj5s+Y2jFrW58XCA7Civkj5o+Y2jEg298XCA7Civkj5Y+emjDqG58XCA7Civkj5M+Z3XEg258XCA7Civkj5I+cGnDoG58XCA7Civkj44+ZsOpbmd8XCA7Civkj40+eXXDoG58XCA7Civkj4o+bMOzbmd8XCA7Civkj4g+bGnDoW58XCA7Civkj4c+cGnDoG98XCA7Civkj4M+bWnDoW58XCA7Civkjrs+emjFj3V8XCA7Civkjqc+YsOgbmd8XCA7CivkjqE+bnXEg258XCA7Civkjpo+Z3XDoG58XCA7Civkjpc+cWnDoW98XCA7CivkjpI+emjEg258XCA7CivkjpA+Y2jEg298XCA7CivkjoY+bGnDoG98XCA7CivkjoQ+dGnDoW98XCA7Civkjbs+eHXEg258XCA7Civkjbo+aHXDoW58XCA7CivkjbY+ZMOybmd8XCA7CivkjbM+Y2h1w7J8XCA7Civkja4+emjDoG98XCA7CivkjaE+bGnDoG98XCA7CivkjZ8+esOybmd8XCA7CivkjZw+emjDoG98XCA7CivkjZo+bMOgbmd8XCA7CivkjZc+eHXDoG58XCA7CivkjZQ+aMOzbmd8XCA7CivkjYs+Y2h1w618XCA7CivkjYk+cWnDoW58XCA7CivkjYg+cMOtbmd8XCA7CivkjYU+bMOtbmd8XCA7CivkjYQ+ZGnEg258XCA7CivkjLg+anXDoG58XCA7CivkjK8+Z3XDoG58XCA7CivkjKc+Y2jDs3V8XCA7CivkjKM+enXEg258XCA7CivkjKI+bMOtbmd8XCA7CivkjKA+ccOsbmd8XCA7CivkjJ4+bGnEg258XCA7CivkjI4+bHl1w6h8XCA7CivkjIU+dMOhbmd8XCA7CivkjIQ+Z8SVbmd8XCA7CivkjIM+c2h1w7J8XCA7Civki70+YsSVbmd8XCA7Civki7w+dMStbmd8XCA7Civki54+d8SDbmd8XCA7Civki5w+ccOsbmd8XCA7Civki5g+Y2h1w7J8XCA7Civki5M+emjDsnV8XCA7Civki5E+YsStbmd8XCA7Civki44+emjDoG58XCA7Civki4Q+d8SDbmd8XCA7Civki4E+Z8SVbmd8XCA7Civkir0+Z3XDoGl8XCA7CivkirY+emjDqG58XCA7CivkirQ+cWnDoG58XCA7CivkirI+Y2jEg258XCA7Civkiq0+Y2jDs3V8XCA7CivkiqU+eGnDoG98XCA7Civkipw+dHXDoW58XCA7Civkio4+cXXEg258XCA7CivkioU+bcOtbmd8XCA7Civkibw+bGnDoG98XCA7Civkibo+aMOzbmd8XCA7Civkibk+bMOtbmd8XCA7Civkibg+YmnDoG58XCA7CivkibQ+csOhbmd8XCA7CivkibM+eGnEg258XCA7Civkia8+eGnDoG58XCA7CivkiaU+c8WPbmd8XCA7CivkiZo+bcOpbmd8XCA7CivkiZg+Y8Ozbmd8XCA7CivkiZY+bMOtbmd8XCA7CivkiZU+Y8Opbmd8XCA7CivkiY4+dMOhbmd8XCA7CivkiY0+amnEg258XCA7CivkiYY+ZGnEg298XCA7CivkiYQ+bMOpbmd8XCA7CivkiYE+bMOtbmd8XCA7CivkiL4+c2h1w7J8XCA7CivkiLY+csOzbmd8XCA7CivkiLQ+cWnDoG58XCA7CivkiK0+aHXDoWl8XCA7CivkiKQ+cWnDoW58XCA7CivkiKA+aHXEg258XCA7CivkiJs+a3XDoGl8XCA7CivkiJk+emjDsnV8XCA7CivkiI0+bcOhbmd8XCA7CivkiIo+bMOtbmd8XCA7CivkiIc+emjDoG98XCA7CivkiIM+emjEg298XCA7CivkiII+YsOsbmd8XCA7Civkh7o+Y2jDs3V8XCA7Civkh68+csOzbmd8XCA7Civkh6g+Z8Oybmd8XCA7Civkh6Y+ecSDbmd8XCA7Civkh6A+emjDsnV8XCA7Civkh58+amnDoG58XCA7Civkh5w+bGnEg258XCA7Civkh40+Y2h1w7J8XCA7Civkh4w+cWnDoG98XCA7Civkh4c+bcOpbmd8XCA7Civkh4A+csOzbmd8XCA7Civkhrs+cWnDoG98XCA7Civkhrk+dMWPbmd8XCA7Civkhq8+Y2h1w7J8XCA7Civkhqk+bcOtbmd8XCA7Civkhqg+bcOtbmd8XCA7CivkhqY+c2jDqG58XCA7CivkhqM+Y2jDqW58XCA7CivkhqE+bMOhbmd8XCA7CivkhqA+aHXDoG58XCA7Civkhpo+dMOzbmd8XCA7Civkhpg+Y3XDoW58XCA7Civkhpc+amnDoG98XCA7CivkhpY+aMOzbmd8XCA7Civkho0+bMOzbmd8XCA7CivkhoQ+c2jDoG58XCA7CivkhoI+bGnDoW58XCA7Civkhbo+bWnEg298XCA7CivkhbU+emh1w7N8XCA7Civkha8+dMOhbmd8XCA7Civkha4+Y8Ogbmd8XCA7Civkha0+cMOhbmd8XCA7CivkhZI+bcOhbmd8XCA7CivkhZA+amnEg258XCA7CivkhY0+ZMOybmd8XCA7CivkhYg+eXXDoG58XCA7CivkhL0+dGnEg258XCA7CivkhLw+dGnEg258XCA7CivkhLs+Y2jDoW98XCA7CivkhLk+bmnDoW58XCA7CivkhLI+Y2h1w618XCA7CivkhK8+amnEg258XCA7CivkhK0+bmnDoW58XCA7CivkhKo+Y2h1w7J8XCA7CivkhKc+csOpbmd8XCA7CivkhKY+bGnEg298XCA7CivkhKU+bMOtbmd8XCA7CivkhKA+c2jDoG58XCA7CivkhJ0+Y2jFrW58XCA7CivkhJk+bcOtbmd8XCA7CivkhJg+cMOpbmd8XCA7CivkhJM+aMOpbmd8XCA7CivkhJA+cXXDoG58XCA7CivkhIw+emh1w6x8XCA7CivkhIU+anXDoG58XCA7Civkg7g+eGnDoG58XCA7Civkg7c+ecOtbmd8XCA7Civkg7Y+aHXDoWl8XCA7Civkg7U+bmnEg298XCA7Civkg7E+eGnDoG58XCA7Civkg6c+bMOzbmd8XCA7Civkg50+cWnDoG98XCA7Civkg5s+bGnDoW58XCA7Civkg5c+Y2h1w7J8XCA7Civkg5Q+aMOzbmd8XCA7Civkg40+emjDoG98XCA7Civkg4c+bWnDoW58XCA7Civkgr0+ZGnDoG98XCA7Civkgq8+Z3XDoGl8XCA7Civkgq4+bHl1w6h8XCA7Civkgqw+Z8WPbmd8XCA7Civkgqs+aMOzbmd8XCA7Civkgqo+ZGnDoG98XCA7Civkgqc+emjElW58XCA7CivkgqY+emjElW58XCA7CivkgqI+ZMWPbmd8XCA7Civkgpw+YsOgbmd8XCA7CivkgpQ+eMOsbmd8XCA7CivkgpA+Y2h1w7J8XCA7Civkgo4+enXEg258XCA7Civkgog+dMOzbmd8XCA7Civkgoc+bsOhbmd8XCA7CivkgoM+amnDoG98XCA7CivkgoE+Y2jDoW58XCA7Civkgbg+bsOzbmd8XCA7CivkgbY+amnEg298XCA7CivkgbU+YmnEg258XCA7CivkgbQ+emjEg258XCA7CivkgbM+bcSDbmd8XCA7Civkga4+cWnDoW58XCA7Civkgaw+Y8Opbmd8XCA7Civkgac+bWnDoW98XCA7CivkgaI+eHXDoW58XCA7CivkgaA+bGnDoW58XCA7CivkgZ0+ecOtbmd8XCA7CivkgZE+ecOhbmd8XCA7CivkgZA+ecOsbmd8XCA7CivkgYQ+eMOsbmd8XCA7CivkgYI+eGnDoG58XCA7CivkgYE+bMSDbmd8XCA7CivkgLY+bMSDbmd8XCA7CivkgLU+c2jDuW58XCA7CivkgLQ+ecStbmd8XCA7CivkgK4+bcOhbmd8XCA7CivkgKw+cXXDoW58XCA7CivkgKo+aMOhbmd8XCA7CivkgKg+aHXDoG58XCA7CivkgKc+aMWPbmd8XCA7CivkgKU+c2h1w7J8XCA7CivkgKI+c2jDuW58XCA7CivkgKE+Y2jDoG58XCA7CivkgJM+aHXDoG58XCA7CivkgI8+eGnDoG58XCA7CivkgI4+bWnEg258XCA7CivkgIo+amnEg298XCA7CivkgIk+cWnDoW98XCA7CivkgIQ+bcOpbmd8XCA7Civjv64+ecOgbmd8XCA7Civjv6o+aHXDoW58XCA7Civjv6k+dMSDbmd8XCA7Civjv6c+Y2jDs3V8XCA7Civjv6Y+bsOsbmd8XCA7Civjv6Q+Y2jFrW58XCA7Civjv5g+ecOtbmd8XCA7Civjv4U+eGnEg258XCA7Civjvr8+bMOhbmd8XCA7Civjvr4+bGnDoW58XCA7Civjvrk+Y2jDoWl8XCA7Civjvq0+emjDsnV8XCA7CivjvqY+YsOgbmd8XCA7Civjvpg+Z8SVbmd8XCA7Civjvpc+bMSDbmd8XCA7CivjvpU+c2jElW58XCA7Civjvow+eHXEg258XCA7Civjvok+bMOtbmd8XCA7Civjvbg+Y2jDqW58XCA7Civjvbc+c2h1w6x8XCA7CivjvbI+amnEg298XCA7CivjvbE+amnEg298XCA7Civjva0+cnXEg258XCA7Civjvas+ecWPbmd8XCA7Civjvao+esSVbmd8XCA7CivjvZg+Z8SDbmd8XCA7CivjvYc+Z3XDoGl8XCA7CivjvL8+dMOzbmd8XCA7CivjvLw+cGnDoW98XCA7CivjvLs+Y8Ozbmd8XCA7CivjvLo+dMOhbmd8XCA7CivjvLg+csOzbmd8XCA7CivjvLE+cnXEg258XCA7CivjvK8+ZMOybmd8XCA7CivjvK0+ZGnDoG58XCA7CivjvKw+eMOsbmd8XCA7CivjvKs+aHXDoG58XCA7CivjvKc+dMOzbmd8XCA7CivjvKY+Z8WPbmd8XCA7CivjvJ4+cMOobmd8XCA7CivjvJs+eMOtbmd8XCA7CivjvJk+emjDsnV8XCA7CivjvJc+ZMStbmd8XCA7CivjvJM+bGnDoW58XCA7CivjvJE+bGnDoG58XCA7CivjvJA+cGnDoW58XCA7Civju7U+emjDoG58XCA7Civju7A+bWnEg258XCA7Civju54+YmnDoG58XCA7Civju48+bMOtbmd8XCA7Civju4o+bcOhbmd8XCA7Civju4I+cMOtbmd8XCA7Civjurk+YmnDoG58XCA7Civjurg+cMOtbmd8XCA7CivjurE+csOpbmd8XCA7Civjuqw+Z8WPbmd8XCA7CivjuqY+bGnDoW58XCA7CivjuqU+Y2jDoW58XCA7Civjup8+emh1w7N8XCA7Civjup0+amnDoG58XCA7Civjupg+emjDoG58XCA7CivjupM+cGnDoG98XCA7CivjupI+bGnDoG98XCA7CivjupA+emjEg298XCA7Civjuo4+csOzbmd8XCA7Civjuow+eGnDoG58XCA7Civjuoo+ecOgbmd8XCA7Civjub8+ZGnEg298XCA7Civjub4+cGnEg298XCA7Civjub0+Y2jEg258XCA7CivjubY+dMOtbmd8XCA7CivjubU+asOsbmd8XCA7CivjubI+eGnDoG98XCA7CivjuaE+eHXDoW58XCA7CivjuZo+ecOtbmd8XCA7CivjuZk+ecOtbmd8XCA7CivjuZY+aHXDoG58XCA7CivjuYw+Y2jEg258XCA7CivjuYk+eXXDoW58XCA7CivjuYU+esWPbmd8XCA7CivjuLM+bMOtbmd8XCA7CivjuKs+cWnDoW58XCA7CivjuKo+Y2jDum58XCA7CivjuKU+Y2jDoW58XCA7CivjuKQ+cGnDoG58XCA7CivjuKA+dGnEg298XCA7CivjuJw+a8Oybmd8XCA7CivjuJs+c2jDoW98XCA7CivjuJc+dMOzbmd8XCA7CivjuJE+Y3XDoG58XCA7CivjuIM+ZGnEg258XCA7Civjt7k+c2jDoG98XCA7Civjt7c+anXEg258XCA7Civjt68+YsOobmd8XCA7Civjt6s+ccStbmd8XCA7Civjt5Y+emjDoG98XCA7Civjt5M+esWPbmd8XCA7Civjt48+ecWPbmd8XCA7Civjt4c+Z3XDoGl8XCA7Civjt4U+Y2jEg298XCA7Civjtro+dGnDoG58XCA7Civjtrk+aMOybmd8XCA7CivjtrY+bsOzbmd8XCA7CivjtrI+ecOybmd8XCA7Civjtqs+bGnEg298XCA7CivjtqQ+Y2jEg298XCA7CivjtqM+Y2jDoW58XCA7Civjtp4+bsSDbmd8XCA7Civjtpg+ZGnDoG58XCA7CivjtpU+amnEg258XCA7CivjtpM+Y8Ohbmd8XCA7CivjtpI+c2jEg258XCA7CivjtpE+bGnDoG58XCA7Civjto4+aHXDoW58XCA7Civjto0+eGnEg258XCA7Civjtow+bGnDoW58XCA7Civjtoc+aMOpbmd8XCA7Civjtb4+asOsbmd8XCA7Civjtbk+aHXDoW58XCA7Civjtbc+YmnDoG58XCA7CivjtbQ+Y8Ohbmd8XCA7CivjtbM+bGnDoW98XCA7CivjtbE+cGnEg298XCA7Civjta8+ZsOpbmd8XCA7Civjta4+Y2jDum58XCA7Civjtaw+ecOtbmd8XCA7Civjtao+eGnDoW58XCA7CivjtaQ+ZGnDoG58XCA7CivjtZ4+Y2jDs3V8XCA7CivjtZU+c2jDqG58XCA7CivjtYw+Y2jDoG58XCA7CivjtYo+c2jElW58XCA7CivjtYA+Y3XDoG58XCA7CivjtL8+ZMStbmd8XCA7CivjtLQ+Y2jDqW58XCA7CivjtLM+bMWPbmd8XCA7CivjtLA+bsOpbmd8XCA7CivjtKg+emjDqG58XCA7CivjtKY+Z3XDoG58XCA7CivjtKU+cWnDoG98XCA7CivjtJw+YmnDoG58XCA7CivjtJA+bWnDoG58XCA7CivjtI8+d8SDbmd8XCA7CivjtIQ+ecOtbmd8XCA7Civjs7k+d8SDbmd8XCA7Civjs64+bmnDoG98XCA7Civjs60+eGnDoW58XCA7Civjs6w+eHXDoW58XCA7Civjs6g+amnEg258XCA7Civjs5k+eHXDoG58XCA7Civjs5c+Y2jDoGl8XCA7Civjs5I+YmnDoG58XCA7Civjs44+YmnDoG58XCA7Civjs4U+amnEg298XCA7Civjs4Q+eGnDoW58XCA7Civjsr8+d8SDbmd8XCA7Civjsr0+bmnDoG58XCA7CivjsrA+bsOtbmd8XCA7Civjsqg+csOzbmd8XCA7CivjsqU+dMOhbmd8XCA7CivjsqI+YmnDoG58XCA7Civjsp8+ecStbmd8XCA7Civjsp0+csWPbmd8XCA7CivjspM+csOzbmd8XCA7Civjsow+bsOobmd8XCA7Civjsos+Y2h1w7J8XCA7Civjsog+c2jDoW98XCA7CivjsoY+bMOtbmd8XCA7CivjsoA+Y2jDqW58XCA7CivjsbY+YsOobmd8XCA7Civjsa4+a3XDoGl8XCA7Civjsa0+ZHXDoG58XCA7Civjsag+bGnDoG58XCA7CivjsaU+bMOtbmd8XCA7CivjsaI+bMOhbmd8XCA7CivjsY0+bHXDoW58XCA7CivjsL4+amnDoG98XCA7CivjsLg+bGnEg258XCA7CivjsK4+c2jDqG58XCA7CivjsKA+a8Ogbmd8XCA7CivjsI0+bMOzbmd8XCA7CivjsIg+bGnEg258XCA7CivjsIQ+amnDoG58XCA7CivjsIM+bWnDoW58XCA7CivjsII+c2jElW58XCA7Civjr7o+amnDoG58XCA7Civjr7k+YmnEg298XCA7Civjr7M+ccOtbmd8XCA7Civjr7E+YmnEg298XCA7Civjr68+Z8Oybmd8XCA7Civjr6w+bGnEg258XCA7Civjr6o+bMOtbmd8XCA7Civjr6I+emjDqG58XCA7Civjr6A+cWnDoG58XCA7Civjr54+anXDoG58XCA7Civjr5g+a3XEg258XCA7Civjr5A+ZsSDbmd8XCA7Civjr4s+ecStbmd8XCA7Civjr4Y+Y2jEg258XCA7Civjr4E+YsOgbmd8XCA7Civjr4A+eGnEg258XCA7Civjrr4+bMSDbmd8XCA7Civjrrg+c8Oybmd8XCA7CivjrrM+emjDqG58XCA7Civjrq0+eGnDoW58XCA7CivjrqE+Z3XDoG58XCA7CivjrpQ+dMOzbmd8XCA7CivjrpA+eMStbmd8XCA7Civjrow+bWnDoW58XCA7Civjroc+dGnDoG58XCA7CivjroQ+YsSDbmd8XCA7Civjrbs+dMOhbmd8XCA7Civjrbk+eGnDoW58XCA7Civjraw+emh1w7N8XCA7Civjras+Y3XDoW58XCA7CivjraQ+bmnEg298XCA7CivjraA+eGnEg258XCA7CivjrZ8+Z8WPbmd8XCA7CivjrZw+csOzbmd8XCA7CivjrZM+YmnDoG58XCA7CivjrYs+YsOgbmd8XCA7CivjrYc+eXXDoG58XCA7CivjrYI+amnEg298XCA7CivjrYE+csOpbmd8XCA7CivjrLU+eGnDoW98XCA7CivjrLQ+aMWPbmd8XCA7CivjrK4+a3XDoGl8XCA7CivjrK0+amnDoG98XCA7CivjrKE+bMOtbmd8XCA7CivjrKA+c2jDoGl8XCA7CivjrJ0+Y8Opbmd8XCA7CivjrJc+eGnDoG58XCA7CivjrJU+ecOhbmd8XCA7CivjrJM+cGnDoG98XCA7CivjrJI+bcSDbmd8XCA7CivjrI4+eGnEg258XCA7CivjrIw+asOsbmd8XCA7CivjrIo+aHXEg258XCA7CivjrIk+bnXEg258XCA7CivjrIc+aHXDoG58XCA7CivjrIY+bWnDoW58XCA7CivjrIQ+Y2jDoG58XCA7Civjq7M+Y2jDqW58XCA7Civjq7A+bMSDbmd8XCA7Civjq6s+eGnEg258XCA7Civjq6U+bcStbmd8XCA7Civjq5I+Z8WPbmd8XCA7Civjq4Q+cMOhbmd8XCA7Civjq4E+ZHXDoG58XCA7Civjq4A+ZMStbmd8XCA7Civjqrs+anXDoG58XCA7CivjqrE+aHXDoG58XCA7Civjqq4+bMOtbmd8XCA7Civjqqw+emh1w7N8XCA7Civjqqg+c2jDoG58XCA7CivjqqM+cWnDoG98XCA7CivjqqI+c2jEg298XCA7CivjqqA+cWnDoG58XCA7Civjqp0+bGnDoG58XCA7Civjqps+emjElW58XCA7Civjqpg+bGnEg258XCA7CivjqpU+ZGnDoG98XCA7Civjqo4+c2jEg258XCA7Civjqow+dMWPbmd8XCA7Civjqoc+eGnDoG58XCA7Civjqb4+Y2h1w618XCA7CivjqbM+c8WPbmd8XCA7CivjqbA+amnEg298XCA7Civjqa4+cWnDoW58XCA7CivjqaA+cGnEg298XCA7CivjqZ8+emjDoGl8XCA7CivjqZs+dHXDoW58XCA7CivjqZo+bcOpbmd8XCA7CivjqYg+eGnDoG58XCA7CivjqL4+ecOgbmd8XCA7CivjqLY+Y2jDs3V8XCA7CivjqLU+amnEg258XCA7CivjqLQ+amnDoG58XCA7CivjqKY+c8WPbmd8XCA7CivjqJw+cWnDoW58XCA7CivjqJs+c2jEg258XCA7CivjqJg+eMStbmd8XCA7CivjqJU+ecOtbmd8XCA7CivjqIQ+emjDoG98XCA7CivjqII+ZMWPbmd8XCA7CivjqIA+YsStbmd8XCA7Civjp7w+YmnDoG98XCA7Civjp7E+Y2jDqG58XCA7Civjp6w+Z8WPbmd8XCA7Civjp6Y+eHXDoG58XCA7Civjp6U+eGnEg258XCA7Civjp58+a3XEg2l8XCA7Civjp5Q+Z3XDoGl8XCA7Civjp5A+c8WPbmd8XCA7Civjp40+ZsSDbmd8XCA7Civjp4s+eGnEg258XCA7Civjp4Q+cWnEg258XCA7Civjp4I+dGnDoW58XCA7Civjprc+ecWPbmd8XCA7Civjpq4+cWnDoW58XCA7Civjpq0+bMOtbmd8XCA7CivjpqU+aHXDoW58XCA7Civjpp4+Y2jDs3V8XCA7Civjpp0+bWnEg298XCA7Civjppo+YmnEg258XCA7Civjppc+amnDoG58XCA7CivjppU+bMOzbmd8XCA7CivjppM+eGnDoG58XCA7CivjppE+bGnEg258XCA7CivjpoM+Y2jEg258XCA7CivjpoE+bGnDoW58XCA7CivjpoA+ZsOpbmd8XCA7CivjpbM+eXXDoW58XCA7CivjpbI+c2jDqG58XCA7Civjpa4+emjDsnV8XCA7Civjpaw+cMOhbmd8XCA7Civjpag+Y2h1w618XCA7Civjpac+c2jDuW58XCA7CivjpZU+bGnDoW58XCA7CivjpZA+eXXDoG58XCA7CivjpY8+dGnEg258XCA7CivjpYo+cMOpbmd8XCA7CivjpYY+ZGnDoG58XCA7CivjpYU+c2jDsnV8XCA7CivjpYQ+bMOtbmd8XCA7CivjpL0+Y2jDs3V8XCA7CivjpLY+cMOhbmd8XCA7CivjpKo+eXXDoG58XCA7CivjpKg+Z8WPbmd8XCA7CivjpJ8+a8WPbmd8XCA7CivjpJo+aMOhbmd8XCA7CivjpI8+dMOzbmd8XCA7CivjpI0+cWnEg298XCA7CivjpIo+eGnDoG98XCA7CivjpIM+ZsOhbmd8XCA7CivjpIE+bWnEg258XCA7Civjo78+emh1w7N8XCA7Civjo7c+bsOsbmd8XCA7Civjo6o+aHXEg258XCA7Civjo6Q+amnDoG58XCA7Civjo6M+c2jEg258XCA7Civjo6A+dMOzbmd8XCA7Civjo5w+eMOtbmd8XCA7Civjo5o+dMOzbmd8XCA7Civjo5I+Y8Oobmd8XCA7Civjo5E+csOzbmd8XCA7Civjo5A+YmnDoG58XCA7Civjo48+asOsbmd8XCA7Civjo4w+c2jDoG58XCA7Civjo4A+emjDqG58XCA7Civjor4+anXDoG58XCA7Civjoro+eGnDoW58XCA7Civjoqw+aMOzbmd8XCA7Civjoqc+anXDoG58XCA7CivjoqU+ZMOybmd8XCA7CivjoqM+asOsbmd8XCA7Civjop8+Y2jEg258XCA7Civjopg+bGnDoW58XCA7Civjopc+cWnDoG98XCA7CivjopQ+esWPbmd8XCA7Civjoo0+ecOtbmd8XCA7CivjooY+Y2jDoW58XCA7CivjooU+bMOybmd8XCA7CivjooM+bMOhbmd8XCA7Civjob4+eGnDoG58XCA7Civjob0+emjDoG98XCA7Civjobs+bGnDoG98XCA7CivjobU+bMOtbmd8XCA7CivjobI+aHXDoW58XCA7Civjoa8+emjDoWl8XCA7Civjoak+bHXDoW58XCA7Civjoag+cWlhbnxcIDsKK+Ohoz5sw7NuZ3xcIDsKK+OhnT5mw6huZ3xcIDsKK+Ohmz5tw6FuZ3xcIDsKK+OhmD5sacOhbnxcIDsKK+OhkT5xacSDb3xcIDsKK+OhiT54acOhbnxcIDsKK+OgvT50w7NuZ3xcIDsKK+Oguj5tacOhb3xcIDsKK+OgrT56aMSDbnxcIDsKK+OgoT5uacSDb3xcIDsKK+OgnT5jdcOhbnxcIDsKK+Ogkz5tw6luZ3xcIDsKK+Ogkj5iacSDb3xcIDsKK+OgkD5qacOgb3xcIDsKK+OgiT50w7NuZ3xcIDsKK+Ofvz5tw6FuZ3xcIDsKK+OfvT5iacSDb3xcIDsKK+Ofuz5xacOgbnxcIDsKK+Oftj55dcOhbnxcIDsKK+OftT5nxINuZ3xcIDsKK+OftD5rdcOgaXxcIDsKK+OfsD5txK1uZ3xcIDsKK+Ofqz5xdcOhbnxcIDsKK+OfqD5xdcOhbnxcIDsKK+OfoD5nxINuZ3xcIDsKK+Ofnj56aMOgbnxcIDsKK+OfmD50acOhb3xcIDsKK+Oflj5sw7JuZ3xcIDsKK+OfkD5txINuZ3xcIDsKK+OfjT5sw6FuZ3xcIDsKK+OfjD5tw6FuZ3xcIDsKK+OfhT55w6FuZ3xcIDsKK+OfgD5sacOhbnxcIDsKK+Oesj55w7JuZ3xcIDsKK+OeoT56aMSDbnxcIDsKK+Oenz5kacOgbnxcIDsKK+OemT5uacOgb3xcIDsKK+Oeiz5uacSDbnxcIDsKK+OdvT5jaHXDrXxcIDsKK+Oduj5sacOhbnxcIDsKK+OduD5iacOgbnxcIDsKK+OdsT5tw6huZ3xcIDsKK+OdsD5tacOhbnxcIDsKK+Odrz5xacOhb3xcIDsKK+OdrT54xK1uZ3xcIDsKK+Odqz5sw7NuZ3xcIDsKK+Odqj5kacOgbnxcIDsKK+OdoD5tw61uZ3xcIDsKK+OdmD55w7NuZ3xcIDsKK+Odlz5sw6FuZ3xcIDsKK+OdlT5uw61uZ3xcIDsKK+OdkT5tw6FuZ3xcIDsKK+OdkD5yw7NuZ3xcIDsKK+Odjj5kw6xuZ3xcIDsKK+Odiz5sacOhb3xcIDsKK+Odij5zaMWPdXxcIDsKK+OdiD5sdcOhbnxcIDsKK+Odhz5jaMO6bnxcIDsKK+OdhD5jaMO6bnxcIDsKK+Ocuz5sacOgbnxcIDsKK+OctT5uacSDb3xcIDsKK+OctD5tw6huZ3xcIDsKK+Ocsz5odcOhaXxcIDsKK+Ocsj53xJVuZ3xcIDsKK+OcsT5kw7JuZ3xcIDsKK+Ocqj54acSDbnxcIDsKK+OcpD5zaMSVbnxcIDsKK+Ocnj5xacOgbnxcIDsKK+OclT5sacOhbnxcIDsKK+OcjT50w6FuZ3xcIDsKK+Ocij5ww6BuZ3xcIDsKK+Ocgz5sacOgbnxcIDsKK+Obvj54acOhbnxcIDsKK+ObuT5wacOhbnxcIDsKK+Obtj5jaMOzdXxcIDsKK+Obrz5tacSDbnxcIDsKK+ObqT56aMOzdXxcIDsKK+Obnj5sw7JuZ3xcIDsKK+Obmj50xY9uZ3xcIDsKK+OblD5ww6luZ3xcIDsKK+OavT5xacSDb3xcIDsKK+Oasj5kacSDbnxcIDsKK+Oaoz54acOhb3xcIDsKK+Oanz5jaHXDsnxcIDsKK+Oanj5txJVuZ3xcIDsKK+Oakj5zaMSDbnxcIDsKK+OahT5sw7NuZ3xcIDsKK+Oagj5yw6FuZ3xcIDsKK+OagT5xacOhb3xcIDsKK+OZuz5jaMOhbnxcIDsKK+OZuT5tw6luZ3xcIDsKK+OZtj50w6FuZ3xcIDsKK+OZtD5jaMOgbnxcIDsKK+OZsj55xY9uZ3xcIDsKK+OZqT5sacOhb3xcIDsKK+OZnz5sxINuZ3xcIDsKK+OZmT5sxY9uZ3xcIDsKK+OZlz5rdcOgaXxcIDsKK+OZlT5rdcOgaXxcIDsKK+OZiT50acSDbnxcIDsKK+OZgT5txINuZ3xcIDsKK+OYuD56w6BuZ3xcIDsKK+OYqz5qxK1uZ3xcIDsKK+OYoz54dcOhbnxcIDsKK+OYoj53xJVuZ3xcIDsKK+OYnT5uacSDbnxcIDsKK+OYiz54acOhbnxcIDsKK+OYhz5yw7NuZ3xcIDsKK+OYhT54acOhbnxcIDsKK+OXoj5kw7JuZ3xcIDsKK+OXmz54acOgb3xcIDsKK+OWuj5jaMWtbnxcIDsKK+OWrT50acSDbnxcIDsKK+OWqz5sw61uZ3xcIDsKK+OWpj5kxY9uZ3xcIDsKK+OWnz5zaMOydXxcIDsKK+OWkz5ow7NuZ3xcIDsKK+OVtD5jaMOpbnxcIDsKK+OVrD5zw7JuZ3xcIDsKK+OVqz5mxINuZ3xcIDsKK+OVmj56aMSDb3xcIDsKK+OVlT5odcOgbnxcIDsKK+OViz5qw6xuZ3xcIDsKK+OUtj5nw7JuZ3xcIDsKK+OUtT54acOgbnxcIDsKK+OUsD5ow6luZ3xcIDsKK+OUrz5zdcSDbnxcIDsKK+OUpj55xINuZ3xcIDsKK+OUpD5zaMSVbnxcIDsKK+OUnj5rdcOgaXxcIDsKK+OUmT5ixINuZ3xcIDsKK+OUkz5qacSDbnxcIDsKK+OUjD56aMOydXxcIDsKK+OUiz5qacOgbnxcIDsKK+OUhj5jaMOhbnxcIDsKK+OUhT54acOgb3xcIDsKK+OTuj5qacOgbnxcIDsKK+OTsj5wacOgbnxcIDsKK+OTqj5sxINuZ3xcIDsKK+OToD5kacOgbnxcIDsKK+OTnT54w61uZ3xcIDsKK+OTkT54w6xuZ3xcIDsKK+OTjj5sacOhbnxcIDsKK+OTiz5nw7JuZ3xcIDsKK+OTij5kw7JuZ3xcIDsKK+OTiT5odcOgbnxcIDsKK+OThD56aMOobnxcIDsKK+OTgz5jaHXDrXxcIDsKK+OTgT53xINuZ3xcIDsKK+OSsD5xdcOhbnxcIDsKK+OSnz5uacSDb3xcIDsKK+OSmz5kacOgb3xcIDsKK+OSmT5tacOhbnxcIDsKK+OSiT50xINuZ3xcIDsKK+OShD5uw6BuZ3xcIDsKK+ORvz50acOhb3xcIDsKK+ORvj54acOhb3xcIDsKK+ORvT50w6FuZ3xcIDsKK+ORvD5seXXDqHxcIDsKK+ORsz56aMOydXxcIDsKK+ORqj5jaMOhaXxcIDsKK+ORpD5tacOhb3xcIDsKK+ORnz5ixJVuZ3xcIDsKK+ORnj55w6xuZ3xcIDsKK+ORnT5sw7JuZ3xcIDsKK+ORiD5kw7JuZ3xcIDsKK+ORhz56aMOydXxcIDsKK+ORgj5mxINuZ3xcIDsKK+OQuD5xacOgbnxcIDsKK+OQsT56aMSVbnxcIDsKK+OQqT54w61uZ3xcIDsKK+OQnD5jaMOzdXxcIDsKK+OQgT50acSDbnxcIDsKK/Courk+amlhb3xcIDsKK+aYrz5zaMOsfFwgOwor5Lq6PnLDqW58XCA7CivlnKg+esOgaXxcIDsKK+aciT55xY91fFwgOwor6L+ZPnpow6h8XCA7CivmnaU+bMOhaXxcIDsKK+WbvT5ndcOzfFwgOwor5YiwPmTDoG98XCA7Civku6w+bcSTbnxcIDsKK+S4uj53w6hpfFwgOwor5Ye6PmNodXxcIDsKK+mBkz5kw6BvfFwgOwor5pe2PnNow618XCA7CivlsLE+amnDuXxcIDsKK+imgT55YW98XCA7CivkuIs+eGnDoHxcIDsKK+S8mj5ndcOsfFwgOwor5LmLPnpoaXxcIDsKK+i/hz5ndW98XCA7CivlrrY+amlhfFwgOwor5a2mPnh1w6l8XCA7Civlr7k+ZHXDrHxcIDsKK+WQjj5ow7J1fFwgOwor5b+DPnhpbnxcIDsKK+Wkmj5kdW98XCA7Civlpb0+aMSDb3xcIDsKK+mDvT5kb3V8XCA7CivnhLY+csOhbnxcIDsKK+ayoT5tw6lpfFwgOwor5LqLPnNow6x8XCA7Civlj6o+emhpfFwgOwor5L2cPnp1w7J8XCA7CivnnIs+a2FufFwgOwor5paHPnfDqW58XCA7CivlvIA+a2FpfFwgOwor5Y2BPnNow618XCA7CivkuLs+emjFrXxcIDsKK+WPiD55w7J1fFwgOwor5omAPnN1xY98XCA7CivmnKw+YsSVbnxcIDsKK+WktD50w7N1fFwgOwor5LiJPnNhbnxcIDsKK+iAgT5sxINvfFwgOwor55+lPnpoaXxcIDsKK+awkT5tw61ufFwgOwor5YiGPmZlbnxcIDsKK+Wklj53w6BpfFwgOwor5L2GPmTDoG58XCA7Civkups+eGllfFwgOwor6auYPmdhb3xcIDsKK+i/mz5qw6xufFwgOwor5a6ePnNow618XCA7Civlm54+aHXDrXxcIDsKK+e+jj5txJVpfFwgOwor5pyIPnl1w6h8XCA7Civor50+aHXDoHxcIDsKK+iAhT56aMSVfFwgOwor6ZeuPnfDqG58XCA7Civnu5k+Z8SVaXxcIDsKK+W+iD5oxJVufFwgOwor5pyAPnp1w6x8XCA7CivmlrA+eGlufFwgOwor5LuAPnNow618XCA7CivkvY0+d8OoaXxcIDsKK+WboD55aW58XCA7Civooqs+YsOoaXxcIDsKK+i1sD56xY91fFwgOwor6ZeoPm3DqW58XCA7Civmtbc+aMSDaXxcIDsKK+WPoz5rxY91fFwgOwor5L2/PnNoxK18XCA7Civlho0+esOgaXxcIDsKK+S4lj5zaMOsfFwgOwor5L+hPnjDrG58XCA7CivljJc+YsSVaXxcIDsKK+WGhT5uw6hpfFwgOwor5YqgPmppYXxcIDsKK+WMlj5odcOgfFwgOwor55SxPnnDs3V8XCA7CivljbQ+cXXDqHxcIDsKK+S7oz5kw6BpfFwgOwor5YabPmp1bnxcIDsKK+Wkqj50w6BpfFwgOwor5LiHPnfDoG58XCA7CivluII+c2jDrHxcIDsKK+ecvD55xINufFwgOwor5YirPmJpw6l8XCA7CivlpIQ+Y2jDuXxcIDsKK+aJjT5jw6FpfFwgOwor5biIPnNoaXxcIDsKK+S9jz56aMO5fFwgOwor5LmdPmppxa18XCA7CivljY4+aHXDoXxcIDsKK+aKpT5iw6BvfFwgOwor5rS7Pmh1w7N8XCA7Civpmr4+bsOhbnxcIDsKK+i9pj5jaGV8XCA7Civnmb0+YsOhaXxcIDsKK+aEnz5nxINufFwgOwor6YeRPmppbnxcIDsKK+WPjT5mxINufFwgOwor5YGaPnp1w7J8XCA7CivmiJY+aHXDsnxcIDsKK+aenD5ndcWPfFwgOwor5LqyPnFpbnxcIDsKK+eVjD5qacOofFwgOwor5LuKPmppbnxcIDsKK+WItj56aMOsfFwgOwor6KejPmppxJV8XCA7Civku7s+csOobnxcIDsKK+iHsz56aMOsfFwgOwor5Y+wPnTDoWl8XCA7CivlubI+Z2FufFwgOwor5o6lPmppZXxcIDsKK+iniT5qdcOpfFwgOwor55u0Pnpow618XCA7Civmr5s+bcOhb3xcIDsKK+aelz5sw61ufFwgOwor5Y2XPm7DoW58XCA7CivorqQ+csOobnxcIDsKK+iuuj5sw7lufFwgOwor55m+PmLEg2l8XCA7CivlkIM+Y2hpfFwgOwor5oCOPnrElW58XCA7CivnpL4+c2jDqHxcIDsKK+acrz5zaMO5fFwgOwor57uTPmppw6l8XCA7Civlha0+bGnDuXxcIDsKK+aMhz56aMStfFwgOwor6Z2ePmZlaXxcIDsKK+a1gT5sacO6fFwgOwor5q+PPm3ElWl8XCA7CivpmJ8+ZHXDrHxcIDsKK+i3nz5nZW58XCA7CivluKY+ZMOgaXxcIDsKK+iKsT5odWF8XCA7CivmnaE+bMOgaXxcIDsKK+iogD55w6FufFwgOwor6K+lPmdhaXxcIDsKK+i/kT5qw6xufFwgOwor55WZPmxpw7p8XCA7Civmsrs+emjDrHxcIDsKK+WGsz5qdcOpfFwgOwor5L+dPmLEg298XCA7Civlip4+YsOgbnxcIDsKK+i/kD55w7lufFwgOwor5Y2KPmLDoG58XCA7CivlgJk+aMOydXxcIDsKK+WujD53w6FufFwgOwor5rGCPnFpw7p8XCA7Civlk4E+cMStbnxcIDsKK+Wjqz5zaMOsfFwgOwor5ZGKPmfDoG98XCA7CivmtL4+cMOgaXxcIDsKK+a7oT5txINufFwgOwor5byPPnNow6x8XCA7Civor4Y+c2jDrHxcIDsKK+WAkj5kxINvfFwgOwor5pyqPnfDqGl8XCA7CivmjIE+Y2jDrXxcIDsKK+iuvj5zaMOofFwgOwor5aeLPnNoxK18XCA7CivniYg+YsSDbnxcIDsKK+i2ij55dcOofFwgOwor5Y+yPnNoxK18XCA7CivnoJQ+ecOhbnxcIDsKK+WPiz55xY91fFwgOwor5a2pPmjDoWl8XCA7CivmlLk+Z8SDaXxcIDsKK+WnlD53ZWl8XCA7Civml6k+esSDb3xcIDsKK+mfsz55aW58XCA7Civngas+aHXFj3xcIDsKK+WNlT5kYW58XCA7Civlr7w+ZMSDb3xcIDsKK+WksT5zaGl8XCA7Civnn7M+ZMOgbnxcIDsKK+iLpT5ydcOyfFwgOwor5b+XPnpow6x8XCA7Civpo54+ZmVpfFwgOwor56m2PmppdXxcIDsKK+WMhT5iYW98XCA7CivpgKA+esOgb3xcIDsKK+inhj5zaMOsfFwgOwor6Jm9PnN1aXxcIDsKK+WdkD56dcOyfFwgOwor5a6dPmLEg298XCA7CivosIg+dMOhbnxcIDsKK+m7kT5oZWl8XCA7CivkuJQ+cWnElXxcIDsKK+majz5zdcOtfFwgOwor5bC9PmrErW58XCA7CivmnYA+c2hhfFwgOwor5b6uPndlaXxcIDsKK+aguT5nZW58XCA7Civnu4g+Y2jDuXxcIDsKK+WIhz5xaWV8XCA7CivnpLo+c2jDrHxcIDsKK+eUtz5uw6FufFwgOwor5rOoPnpow7l8XCA7CivotLk+ZsOoaXxcIDsKK+e+pD5xw7pufFwgOwor5o6oPnR1aXxcIDsKK+aZmj53xINufFwgOwor5b6FPmRhaXxcIDsKK+aUrz56aGl8XCA7Civlj7c+aMOhb3xcIDsKK+e7nT5qdcOpfFwgOwor5Y+CPmNhbnxcIDsKK+WIij5rYW58XCA7Civnsbs+bMOoaXxcIDsKK+Wkhz5iw6hpfFwgOwor5Yq/PnNow6x8XCA7CivoiKw+YmFufFwgOwor5Lu3Pmppw6B8XCA7CivohJE+bsSDb3xcIDsKK+inhD5ndWl8XCA7Civnoa4+cXXDqHxcIDsKK+azvT5kdcOzfFwgOwor5a2YPmPDum58XCA7CivlrrM+aMOgaXxcIDsKK+iKgj5qacOpfFwgOwor5bemPnp1xY98XCA7CivkuYU+amnFrXxcIDsKK+WygT5zdcOsfFwgOwor6YWSPmppxa18XCA7CivliJ0+Y2h1fFwgOwor5ri4PnnDs3V8XCA7Civpk4E+dGnElXxcIDsKK+mZpD5jaMO6fFwgOwor5Lu9PmbDqG58XCA7CivmlaI+Z8SDbnxcIDsKK+ihgD54acSVfFwgOwor5oqVPnTDs3V8XCA7Civpl7s+d8OpbnxcIDsKK+aWlz5kxY91fFwgOwor5Y+zPnnDsnV8XCA7Civppa0+ZsOgbnxcIDsKK+S6kT55w7pufFwgOwor6ICDPmvEg298XCA7CivmnZE+Y3VufFwgOwor5YiAPmRhb3xcIDsKK+S7hT5qxK1ufFwgOwor5p+lPmNow6F8XCA7CivlvJU+ecStbnxcIDsKK+e9lz5sdW98XCA7CivkubA+bcSDaXxcIDsKK+iDjD5iZWl8XCA7Civljas+d8OoaXxcIDsKK+WIlz5sacOofFwgOwor5a6kPnNow6x8XCA7CivliJg+bGnDunxcIDsKK+aOkj5ww6FpfFwgOwor5qCRPnNow7l8XCA7CivogYw+emjDrXxcIDsKK+aAgT50w6BpfFwgOwor5Y2wPnnDrG58XCA7CivlpI8+eGnDoHxcIDsKK+WKqT56aMO5fFwgOwor55CDPnFpw7p8XCA7CivliJI+aHXDoXxcIDsKK+i0qD56aMOtfFwgOwor6Ie0Pnpow6x8XCA7Civmub4+d2FufFwgOwor5ryUPnnEg258XCA7Civpn6Y+d8OpaXxcIDsKK+WbtD53w6lpfFwgOwor5ZCmPmbFj3V8XCA7Civph4c+Y8SDaXxcIDsKK+mjnz5zaMOtfFwgOwor5aSfPmfDsnV8XCA7CivotZs+c8OgaXxcIDsKK+WBhz5qacSDfFwgOwor5aeQPmppxJV8XCA7Civmpbw+bMOzdXxcIDsKK+iOtz5odcOyfFwgOwor5a2ZPnN1bnxcIDsKK+ivlz5zaGl8XCA7Civor5U+c2jDrHxcIDsKK+iwoj54acOofFwgOwor6aqMPnnDoG58XCA7CivmraI+emjErXxcIDsKK+Wxnj5zaMWtfFwgOwor6YOtPmd1b3xcIDsKK+WogT53ZWl8XCA7CivmhaI+bcOgbnxcIDsKK+W6pz56dcOyfFwgOwor572qPnp1w6x8XCA7CivooZc+amllfFwgOwor5pa9PnNoaXxcIDsKK+iNiT5jxINvfFwgOwor5p+QPm3Fj3V8XCA7Civpk7Y+ecOtbnxcIDsKK+WAvD56aMOtfFwgOwor54+tPmJhbnxcIDsKK+S/rj54aXV8XCA7Civlt64+Y2hhfFwgOwor5ZGzPnfDqGl8XCA7Civnu4c+emhpfFwgOwor6I2vPnnDoG98XCA7CivlvZI+Z3VpfFwgOwor5pWRPmppw7l8XCA7CivpgIA+dHXDrHxcIDsKK+WKsz5sw6FvfFwgOwor5amaPmh1bnxcIDsKK+e7nD5sdcOyfFwgOwor57+7PmZhbnxcIDsKK+i3kT5wxINvfFwgOwor5Y+2Pnhpw6l8XCA7CivlnYc+anVufFwgOwor54OIPmxpw6h8XCA7CivotbY+Z8SDbnxcIDsKK+WFsD5sw6FufFwgOwor55S7Pmh1w6B8XCA7Civpob8+ZMO5bnxcIDsKK+WIpD5ww6BufFwgOwor5Zi0Pnp1xK18XCA7Civlr58+Y2jDoXxcIDsKK+S8mD55b3V8XCA7Civmgqg+bsOtbnxcIDsKK+eDnz55YW58XCA7CivpmLY+amllfFwgOwor5ouFPmTDoG58XCA7CivmlaM+c8SDbnxcIDsKK+advz5ixINufFwgOwor5aa5Pm3DqGl8XCA7CivkuLQ+bMOtbnxcIDsKK+aRhz55w6FvfFwgOwor5p6EPmdvdXxcIDsKK+eOqT53w6FufFwgOwor54qvPmbDoG58XCA7Civogq8+a8SVbnxcIDsKK+aMpT5odWl8XCA7CivmuKk+d2VufFwgOwor6IKJPnLDsnV8XCA7Civnurg+emjErXxcIDsKK+Wvuz54w7pufFwgOwor5rKZPnNoYXxcIDsKK+WNlj5tw6BpfFwgOwor6IyDPmbDoG58XCA7CivpnaA+a8Ogb3xcIDsKK+adgj5nxINufFwgOwor6LS1Pmd1w6x8XCA7CivnqL8+Z8SDb3xcIDsKK+aLjT5wYWl8XCA7Civml6c+amnDuXxcIDsKK+ayuT55w7N1fFwgOwor5omsPnLDs3V8XCA7Civpm6o+eHXElXxcIDsKK+iPnD5jw6BpfFwgOwor54mMPnDDoWl8XCA7CivniZs+bmnDunxcIDsKK+iEsT50dW98XCA7CivlvLk+ZMOgbnxcIDsKK+e9rj56aMOsfFwgOwor5qWaPmNoxa18XCA7Civmmbo+emjDrHxcIDsKK+Wymz5kxINvfFwgOwor5oqxPmLDoG98XCA7Civovb0+esOgaXxcIDsKK+i0pT5iw6BpfFwgOwor6YCCPnNow6x8XCA7CivniLk+ZGllfFwgOwor5LuLPmppw6h8XCA7Civmi6w+a3XDsnxcIDsKK+WllD5iZW58XCA7Civlv40+csSVbnxcIDsKK+ebmD5ww6FufFwgOwor6K6vPnjDuW58XCA7CivphY0+cMOoaXxcIDsKK+emgT5qaW58XCA7CivntKI+c3XFj3xcIDsKK+aetj5qacOgfFwgOwor5omYPnR1b3xcIDsKK+S8mT5odcWPfFwgOwor5q+rPmjDoW98XCA7CivlpZc+dMOgb3xcIDsKK+mAgz50w6FvfFwgOwor6L6TPnNodXxcIDsKK+WbsD5rw7lufFwgOwor5rOqPmzDqGl8XCA7Civnhp8+c2jDunxcIDsKK+i0oj5jw6FpfFwgOwor6ay8Pmd1xK18XCA7Civnp4s+cWl1fFwgOwor56eAPnhpw7l8XCA7CivmkJ4+Z8SDb3xcIDsKK+acsT56aHV8XCA7Civmiac+emjDrXxcIDsKK+aCsj5iZWl8XCA7Civovog+YsOoaXxcIDsKK+makD55xK1ufFwgOwor6Ze5Pm7DoG98XCA7CivmnZA+Y8OhaXxcIDsKK+iFvz50dcStfFwgOwor6L+wPnNow7l8XCA7CivlsIo+enVufFwgOwor5YCfPmppw6h8XCA7Civmipg+c2jDqXxcIDsKK+mBlz53w6hpfFwgOwor5pq0PmLDoG98XCA7CivnvLo+cXVlfFwgOwor5o6iPnTDoG58XCA7CivotKc+aHXDsnxcIDsKK+S8nz53xJVpfFwgOwor5ZCbPmp1bnxcIDsKK+WHoT5mw6FufFwgOwor5Y2xPndlaXxcIDsKK+W9qT5jxINpfFwgOwor5p2fPnNow7l8XCA7CivosJM+d8OoaXxcIDsKK+amgj5nw6BpfFwgOwor5bCEPnNow6h8XCA7Civmna8+YmVpfFwgOwor6YCPPnTDsnV8XCA7Civpgq4+ecOzdXxcIDsKK+S8kT54aXV8XCA7Civlj7k+dMOgbnxcIDsKK+eLlz5nxY91fFwgOwor5YG3PnRvdXxcIDsKK+mYtD55aW58XCA7Civmi5w+YsOgaXxcIDsKK+WOmj5ow7J1fFwgOwor5Li5PmRhbnxcIDsKK+a0mz5sdcOyfFwgOwor5ZaKPmjEg258XCA7Civova4+bMO6bnxcIDsKK+Wltj5uxINpfFwgOwor5rehPmTDoG58XCA7Civorq0+eMO5bnxcIDsKK+mHij5zaMOsfFwgOwor6K+4PmTDsnV8XCA7CivllK8+d8OpaXxcIDsKK+Wkuj5kdcOzfFwgOwor6YCQPnpow7p8XCA7Civnh5U+eWFufFwgOwor5ZGGPmRhaXxcIDsKK+eblj5nw6BpfFwgOwor6ZiFPnl1w6h8XCA7CivotK0+Z8OydXxcIDsKK+aMgj5ndcOgfFwgOwor5oGoPmjDqG58XCA7CivoiI0+c2jElXxcIDsKK+eruT56aMO6fFwgOwor5byxPnJ1w7J8XCA7CivlkKs+aMOhbnxcIDsKK+WdgD56aMStfFwgOwor5pGGPmLEg2l8XCA7Civnlao+ZmFufFwgOwor5re3PmjDum58XCA7Civooos+ZMOgaXxcIDsKK+i1nj56w6BufFwgOwor6Iy2PmNow6F8XCA7CivnqLM+d8SVbnxcIDsKK+axhz5odcOsfFwgOwor5bGKPmppw6h8XCA7Civov7k+ZHVpfFwgOwor6Zu3PmzDqWl8XCA7Civlr5I+aMOhbnxcIDsKK+mBrT56YW98XCA7Civmn5Q+csOzdXxcIDsKK+aItD5kw6BpfFwgOwor6LGqPmjDoW98XCA7CivnkZ4+cnXDrHxcIDsKK+aTjT5jYW98XCA7CivohbA+eWFvfFwgOwor5qKFPm3DqWl8XCA7CivkvKY+bMO6bnxcIDsKK+ivuj5udcOyfFwgOwor5q6LPmPDoW58XCA7Civlu7Y+ecOhbnxcIDsKK+i/hT54w7lufFwgOwor54G+PnphaXxcIDsKK+Wysz55dcOofFwgOwor54+gPnpodXxcIDsKK+WPlD5zaHV8XCA7CivosIs+bcOzdXxcIDsKK+ehgD5jaMWtfFwgOwor5LuBPnLDqW58XCA7CivmjZ8+c8WtbnxcIDsKK+aVjz5txK1ufFwgOwor57SvPmzDqWl8XCA7CivkvLQ+YsOgbnxcIDsKK+Wliz5mw6hufFwgOwor6IOGPmTEg258XCA7Civng6Y+ZsOhbnxcIDsKK+eKuT5mYW58XCA7Civln7k+cMOpaXxcIDsKK+S5gz5uxINpfFwgOwor5Z2mPnTEg258XCA7Civlvow+aMOydXxcIDsKK+eciT5tw6lpfFwgOwor6aSQPmNhbnxcIDsKK+aKrD50w6FpfFwgOwor5YaSPm3DoG98XCA7CivmsZc+aMOgbnxcIDsKK+eBsD5odWl8XCA7Civpn6k+aMOhbnxcIDsKK+a8qz5tw6BufFwgOwor5rK/PnnDoW58XCA7CivoopY+eGnDuXxcIDsKK+aXpj5kw6BufFwgOwor5omrPnPEg298XCA7CivlsKQ+ecOzdXxcIDsKK+eCrj5ww6BvfFwgOwor56KXPnfEg258XCA7CivotLQ+dGllfFwgOwor5o+SPmNoYXxcIDsKK+a7mj5nxa1ufFwgOwor6LSdPmLDqGl8XCA7CivmtqY+csO5bnxcIDsKK+awjz5zaMOsfFwgOwor5ompPmt1w7J8XCA7CivmoI8+bMOhbnxcIDsKK+WTsj56aMOpfFwgOwor5aCGPmR1aXxcIDsKK+S/qT5sacSDfFwgOwor6JOdPmzDoW58XCA7Civovps+eGlufFwgOwor6ZmqPnDDqWl8XCA7Civom4s+ZMOgbnxcIDsKK+minD55w6FufFwgOwor6LSrPnDDrW58XCA7CivmnbA+amnDqXxcIDsKK+W/pz55b3V8XCA7Civosow+bcOgb3xcIDsKK+Whnj5zYWl8XCA7Civmo64+c2VufFwgOwor57mBPmbDoW58XCA7Civnoo4+c3XDrHxcIDsKK+a0pT5qaW58XCA7CivkvqA+eGnDoXxcIDsKK+i/nz5jaMOtfFwgOwor6L6JPmh1aXxcIDsKK+eLoD5oxJVufFwgOwor57ypPnN1b3xcIDsKK+eptD54dcOpfFwgOwor5b6EPmRhaXxcIDsKK+i1lj5kw6BufFwgOwor5oSkPmbDqG58XCA7Civor6I+eMO6bnxcIDsKK+aDqD5jxINufFwgOwor6bqmPm3DoGl8XCA7CivlgI0+YsOoaXxcIDsKK+aIqj5qacOpfFwgOwor5p+TPnLEg258XCA7Civmn7M+bGnFrXxcIDsKK+a2iT5zaMOofFwgOwor6LqyPmR1xY98XCA7Civoo4E+Y8OhaXxcIDsKK+mcnj54acOhfFwgOwor54yqPnpodXxcIDsKK+etkT56aMO6fFwgOwor5L+KPmrDuW58XCA7Civpnos+eGnDqXxcIDsKK+S+tT5xaW58XCA7CivmrKM+eGlufFwgOwor5aqSPm3DqWl8XCA7CivprYI+aMO6bnxcIDsKK+aenT56aGl8XCA7CivnlLI+amnEg3xcIDsKK+aLlj50dW98XCA7CivoiJI+c2h1fFwgOwor5oOgPmh1w6x8XCA7CivmmI8+aHVufFwgOwor5oiSPmppw6h8XCA7Civmhac+aHXDrHxcIDsKK+ahgz50w6FvfFwgOwor6LWkPmNow6x8XCA7Civng4I+bMOgbnxcIDsKK+aOqj5jdcOyfFwgOwor5rOwPnTDoGl8XCA7CivlsLg+c2hpfFwgOwor5q6KPnNodXxcIDsKK+aFsD53w6hpfFwgOwor5Z2bPnTDoW58XCA7CivnlJg+Z2FufFwgOwor5ZKsPnnEg298XCA7Civngrg+emjDoXxcIDsKK+mlrj55xK1ufFwgOwor56WdPnpow7l8XCA7CivniaI+bMOhb3xcIDsKK+ahgj5ndcOsfFwgOwor5bC+PnfElWl8XCA7CivmgbA+cWnDoHxcIDsKK+efmz5tw6FvfFwgOwor5a6+PmJpbnxcIDsKK+eyiT5mxJVufFwgOwor6LS8PnrDqWl8XCA7Civnm74+ZMO5bnxcIDsKK+aWnD54acOpfFwgOwor6KOCPmxpw6h8XCA7CivmlpA+ZsSVaXxcIDsKK+W6nz5mw6hpfFwgOwor5b27PmNow6h8XCA7CivmlqQ+amlufFwgOwor5py1PmR1xY98XCA7CivkvbM+amlhfFwgOwor55qGPmppZXxcIDsKK+avgT5odcStfFwgOwor6JuHPnNow6l8XCA7CivmkKw+YmFufFwgOwor6IiFPmppw7l8XCA7Civlub0+eW91fFwgOwor55C0PnHDrW58XCA7CivogZg+cMOsbnxcIDsKK+W8rz53YW58XCA7Civov5Q+ZsSDbnxcIDsKK+i/nT53w6lpfFwgOwor5LqPPmt1aXxcIDsKK+S4oj5kaXV8XCA7CivprY8+d8OoaXxcIDsKK+iAkD5uw6BpfFwgOwor5L2pPnDDqGl8XCA7Civlgrs+c2jEg3xcIDsKK+e7lT5yw6BvfFwgOwor56emPnHDrW58XCA7CivmmKg+enXDs3xcIDsKK+aagj56w6BufFwgOwor572yPnNoxa18XCA7CivnjJw+Y2FpfFwgOwor6ICAPnnDoG98XCA7CivosYY+ZMOydXxcIDsKK+mXtz5tZW58XCA7Civms5s+ZsOgbnxcIDsKK+aClD5odcStfFwgOwor54iGPmLDoG98XCA7Civlubw+ecOydXxcIDsKK+WkuT5qaWF8XCA7CivpgoA+eWFvfFwgOwor5YWBPnnFrW58XCA7Civmgbw+bsSDb3xcIDsKK+Wwuj5jaMSVfFwgOwor5L6NPnNow6x8XCA7Civmia0+bmnFrXxcIDsKK+iPsj5mZWl8XCA7CivlpY8+esOydXxcIDsKK+autz55YW58XCA7Civln4s+bcOhaXxcIDsKK+ebvD5ww6BufFwgOwor5ZCfPnnDrW58XCA7Civot6g+a3XDoHxcIDsKK+mGiT56dcOsfFwgOwor5o6pPnnEg258XCA7Civmj60+amllfFwgOwor5YiDPnLDqG58XCA7Civls6E+eGnDoXxcIDsKK+WHrz5rxINpfFwgOwor5LiQPmfDoGl8XCA7CivnjKs+bWFvfFwgOwor5rabPnRhb3xcIDsKK+a6nD5saXV8XCA7CivplIU+Z3VvfFwgOwor5aWIPm7DoGl8XCA7Civmi74+c2jDrXxcIDsKK+iEiT5tw6BpfFwgOwor6ZSBPnN1xY98XCA7Civpgrs+bMOtbnxcIDsKK+aBoj5odWl8XCA7CivnoI0+a8SDbnxcIDsKK+mpvj5qacOgfFwgOwor56W4Pmh1w7J8XCA7Civmm7k+Y8Ohb3xcIDsKK+aKlj5kxY91fFwgOwor576ePnhpdXxcIDsKK+aKmz5uacO5fFwgOwor5oORPmh1w7J8XCA7CivogqU+ZsOpaXxcIDsKK+iDnj5iYW98XCA7CivpmJQ+a3XDsnxcIDsKK+WLpD5xw61ufFwgOwor5bi9Pm3DoG98XCA7CivmkqQ+Y2jDqHxcIDsKK+mikT5ww61ufFwgOwor6I6xPmzDoWl8XCA7CivloKo+a2FufFwgOwor5a+4PmPDuW58XCA7Civlt6E+eMO6bnxcIDsKK+aJoz5rw7J1fFwgOwor5rGgPmNow618XCA7Civlq4E+amnDoHxcIDsKK+aemj5tw6lpfFwgOwor55OcPmd1YXxcIDsKK+i3jD5kaWV8XCA7Civmia8+Y2jElXxcIDsKK+mUpj5qxK1ufFwgOwor6YCKPnNodXxcIDsKK+i1lD5ww6lpfFwgOwor5piGPmt1bnxcIDsKK+afjz5ixINpfFwgOwor6am2PnNoxK18XCA7CivmpI0+emjDrXxcIDsKK+e6vT5uacWtfFwgOwor5o23Pmppw6l8XCA7CivplJA+ZHXDrHxcIDsKK+S5vj5nYW58XCA7CivpnI0+aHXDsnxcIDsKK+a5vz5zaGl8XCA7CivnnYE+c3VvfFwgOwor5oKgPnlvdXxcIDsKK+aynz5nb3V8XCA7CivpmbY+dMOhb3xcIDsKK+a1kT5ow7pufFwgOwor6amwPmNow618XCA7Civmi7w+cGlufFwgOwor6YKqPnhpw6l8XCA7CivohIY+Y3XDrHxcIDsKK+eznz56YW98XCA7Civmia4+YsOgbnxcIDsKK+mlsD5zaMOsfFwgOwor5pGEPm5pw6h8XCA7CivlmL8+aGVpfFwgOwor5peoPnpoxK18XCA7Civnv6A+Y3XDrHxcIDsKK+mlsT5ixINvfFwgOwor5YqrPmppw6l8XCA7Civlj5s+cMOgbnxcIDsKK+WCqD5jaMWtfFwgOwor6LSqPnRhbnxcIDsKK+aJsD5yxINvfFwgOwor6IOBPnhpw6l8XCA7Civot6o+Z3XDrHxcIDsKK+eikT5iZWl8XCA7Civojo4+c2hhfFwgOwor5aicPm51w7N8XCA7Civkvq8+aMOzdXxcIDsKK+S4mD5xaXV8XCA7CivmmZU+eXVufFwgOwor5oumPmzDoW58XCA7Civnh4M+csOhbnxcIDsKK+WQnj50dW58XCA7CivoiIw+c2jDqXxcIDsKK+eQsz5sw61ufFwgOwor5pu8Pm3DoG58XCA7CivogLs+Y2jErXxcIDsKK+afnD5ndcOsfFwgOwor5pGKPnRhbnxcIDsKK+adhj5nYW58XCA7Civlsqk+ecOhbnxcIDsKK+WWgj53w6hpfFwgOwor6YCdPnNow6x8XCA7Civor54+ZMOgbnxcIDsKK+W0lD5jdWl8XCA7Civlh5E+Y8OydXxcIDsKK+eXtD5jaGl8XCA7Civnm4Y+cMOpbnxcIDsKK+WnpT5sxINvfFwgOwor5ae7PnlpbnxcIDsKK+aEpz5rdcOsfFwgOwor6IqsPmZlbnxcIDsKK+aOtz56aMOtfFwgOwor6IqvPnhpbnxcIDsKK+m8oD5zaMWtfFwgOwor57qgPmppdXxcIDsKK+absD55dWV8XCA7Civooo0+cMOhb3xcIDsKK+WLvj5nb3V8XCA7Civmhag+a8SDaXxcIDsKK+etiz5qaW58XCA7Civmn7E+emjDuXxcIDsKK+WNkT5iZWl8XCA7Civlkr0+eWFufFwgOwor5ZCoPmR1bnxcIDsKK+WOqD5jaMO6fFwgOwor6aW2PnLDoW98XCA7CivnhaQ+bcOpaXxcIDsKK+iFlT53w6BufFwgOwor5Za3PnBlbnxcIDsKK+a1qT5ow6BvfFwgOwor5ZCpPmZlbnxcIDsKK+azhD54acOofFwgOwor5pCcPnNvdXxcIDsKK+mBtT56dW58XCA7CivkvKo+d8SVaXxcIDsKK+eCjj55w6FufFwgOwor5rCbPmZlbnxcIDsKK+adlj5jaGl8XCA7Civnno4+eGlhfFwgOwor6KqTPnNow6x8XCA7Civms6E+cGFvfFwgOwor5ZiJPmppYXxcIDsKK+eDmz56aMO6fFwgOwor5Y6mPnNow6B8XCA7CivoobA+Y3VpfFwgOwor6JabPnh1ZXxcIDsKK+m9vz5jaMStfFwgOwor6LCoPmrErW58XCA7CivmmII+w6FuZ3xcIDsKK+eWjz5zaHV8XCA7CivogJc+aMOgb3xcIDsKK+aWpT5jaMOsfFwgOwor5aS4Pmt1YXxcIDsKK+eXlT5ow6lufFwgOwor5aeaPnnDoW98XCA7CivlpqU+dHXFj3xcIDsKK+aOjz50YW98XCA7CivliLk+Y2jDoHxcIDsKK+mSpj5xaW58XCA7Civor7E+ecOydXxcIDsKK+athz54aWV8XCA7Civmo40+Z8O5bnxcIDsKK+aZiz5qw6xufFwgOwor5reLPmzDrG58XCA7CivmgqY+bWVufFwgOwor5pWmPmR1bnxcIDsKK+e9lT5oxINufFwgOwor6LS3PmTDoGl8XCA7CivmjY8+bmllfFwgOwor6LS+PmppxIN8XCA7CivloKE+YsSDb3xcIDsKK+a1mT56aMOofFwgOwor5YqjPmxpw6h8XCA7CivpmYA+dHXDs3xcIDsKK+Wdnz5mw6lufFwgOwor5ryPPmzDsnV8XCA7CivojIU+bcOhb3xcIDsKK+a7qT50YW58XCA7Civpob0+d8OhbnxcIDsKK+aulj56aMOtfFwgOwor6JShPmPDoGl8XCA7Civlgqw+Y3VpfFwgOwor5b2sPmJpbnxcIDsKK+aLmj5ww6BufFwgOwor6L2oPmTDoGl8XCA7CivnoZU+c2jDrXxcIDsKK+aGvj5ow6BufFwgOwor5oeSPmzEg258XCA7Civnm5A+ecOhbnxcIDsKK+WWiT5ow7N1fFwgOwor5a60PnnDoG58XCA7Civnv7A+aMOgbnxcIDsKK+mAuz5sdcOzfFwgOwor6KO5Pmd1xY98XCA7CivotKk+ZsOgbnxcIDsKK+e7mD5odcOsfFwgOwor5bSWPnnDoWl8XCA7Civpga4+emhlfFwgOwor5pOSPnHDrW58XCA7Civom64+bcOhbnxcIDsKK+iKtz56aMStfFwgOwor5oy9PnfEg258XCA7CivlkLs+d8SVbnxcIDsKK+eyuT5jdcOsfFwgOwor56utPmppw6l8XCA7Civmrao+d2FpfFwgOwor5qKwPnhpw6h8XCA7CivmlpE+YmFufFwgOwor5a+hPmd1xIN8XCA7Civlvqo+eMO6bnxcIDsKK+WQlT5sw7zMhnxcIDsKK+eItT5qdcOpfFwgOwor5b69Pmh1aXxcIDsKK+iwrT50w6FufFwgOwor5auCPnPEg298XCA7CivlqYk+d8SDbnxcIDsKK+mqhj5sdcOyfFwgOwor55WPPnfDqGl8XCA7Civpso0+YsOgb3xcIDsKK+WVpT5zaMOgfFwgOwor57q5PnfDqW58XCA7CivoubI+ZHVufFwgOwor6aqaPnNhb3xcIDsKK+iJmD5zYW98XCA7Civoip0+emhpfFwgOwor5ZOXPmh1YXxcIDsKK+W3vj5qaW58XCA7Civmt6s+ecOtbnxcIDsKK+evrj5sw6FufFwgOwor5L6EPnpow618XCA7Civlj4k+Y2hhfFwgOwor5a6wPnrEg2l8XCA7CivnnpI+bcOhbnxcIDsKK+WQvD5oxY91fFwgOwor5L6oPmjDsnV8XCA7Civlj6A+ZGnDqXxcIDsKK+ijmT5xw7pufFwgOwor5ZKzPmhhaXxcIDsKK+aBsz5rxJVufFwgOwor6LCcPm3DqGl8XCA7CivlkZw+Y2hpfFwgOwor6aKBPmJhbnxcIDsKK+iWqj54aW58XCA7CivlsL8+c3VpfFwgOwor6aKKPmppw6F8XCA7CivpgK4+ZMSDaXxcIDsKK+a1uD5qw6xufFwgOwor5YiuPmd1YXxcIDsKK+Wumz53xINufFwgOwor5ZixPnpoxa18XCA7CivmjKo+bnXDs3xcIDsKK+WFnD5kb3V8XCA7CivlloM+bsOhbnxcIDsKK+iItT5kdcOyfFwgOwor57OVPmdhb3xcIDsKK+enqT56aMOsfFwgOwor6ZKpPmdvdXxcIDsKK+eFrj56aMWtfFwgOwor56uWPnNow7l8XCA7CivmoKo+emh1fFwgOwor57ujPnhpw7l8XCA7CivlppY+eWFvfFwgOwor6IOOPnRhaXxcIDsKK+a7qD5iaW58XCA7Civll6Q+Y2hpfFwgOwor5YyqPmbElWl8XCA7Civog4M+d8OoaXxcIDsKK+i6gT56w6BvfFwgOwor54uuPnNoaXxcIDsKK+WHmz5sxK1ufFwgOwor6b6fPmd1aXxcIDsKK+Wroz55YW58XCA7CivnqpE+ZGnDqXxcIDsKK+WwuT55xK1ufFwgOwor5o6YPmp1w6l8XCA7Civni60+eGnDoXxcIDsKK+mmqD54aW58XCA7CivmvZg+cGFufFwgOwor5riKPmTDsnV8XCA7CivnjLQ+aMOzdXxcIDsKK+eVlD5ww6BufFwgOwor55WcPmNow7l8XCA7CivmkII+bG91fFwgOwor5pesPnjDum58XCA7Civpqoc+aMOgaXxcIDsKK+eBvz5jw6BufFwgOwor6ZuBPnnDoG58XCA7Civpn7U+ecO5bnxcIDsKK+Wqmj5tw6hpfFwgOwor5pSAPnBhbnxcIDsKK+eqgz5xacOofFwgOwor6KOYPnFpw7p8XCA7Civlq6k+bsOobnxcIDsKK+mBgj5zdcOsfFwgOwor6ZmLPmzDsnV8XCA7CivnrKg+YsOobnxcIDsKK+WMmT5jaMOtfFwgOwor6LipPmPEg2l8XCA7CivllaE+ZmVpfFwgOwor6bubPmTDoGl8XCA7CivpnIk+bcOpaXxcIDsKK+WdpD5rdW58XCA7CivluJY+dGllfFwgOwor54SwPnnDoG58XCA7Civlm5o+cWnDunxcIDsKK+S+gz5rxINufFwgOwor5L2QPnp1xY98XCA7CivluIY+ZmFufFwgOwor5oOtPmPDoW58XCA7CivmtrU+aMOhbnxcIDsKK+mAlz5kw7J1fFwgOwor5r6hPnrEg298XCA7Civnsqo+ZsOobnxcIDsKK+mtgT5rdcOtfFwgOwor5o2GPmvFrW58XCA7Civogp0+Z2FufFwgOwor5rulPmzDoG58XCA7Civpqbw+dHXDs3xcIDsKK+a6gz5rdcOsfFwgOwor54OkPmvEg298XCA7Civmva0+dMOhbnxcIDsKK+ivgD5qdcOpfFwgOwor5bO7PmrDuW58XCA7Civpg6E+asO5bnxcIDsKK+aArz5xacOofFwgOwor6IyCPm3DoG98XCA7CivogqI+emhpfFwgOwor5bC0PmdhbnxcIDsKK+eouz5kw6BvfFwgOwor5qC9PnphaXxcIDsKK+ixuT5iw6BvfFwgOwor6LmIPmTEg298XCA7CivkvZE+ecOydXxcIDsKK+a3uT55YW58XCA7CivlsaE+bMO8zIZ8XCA7CivogL0+ZGFufFwgOwor5pqRPnNoxa18XCA7CivopZ8+amlufFwgOwor6K+nPmNow6B8XCA7Civmj6o+aml1fFwgOwor57+FPmNow6x8XCA7CivovpY+eGnDoXxcIDsKK+aCvD5kw6BvfFwgOwor6ZiOPnnDoW58XCA7CivmmKc+bcOoaXxcIDsKK+WHvT5ow6FufFwgOwor5ZOJPnphaXxcIDsKK+eltz5kxINvfFwgOwor5oqSPnNodXxcIDsKK+atuT5kxINpfFwgOwor5pexPmjDoG58XCA7Civmg58+d8OpaXxcIDsKK+iwoz55w6FvfFwgOwor5ruePm3DqG58XCA7CivlrZU+ecO5bnxcIDsKK+aisz5zaHV8XCA7Civogro+ZsOoaXxcIDsKK+S4uD53w6FufFwgOwor5rGBPnpoaXxcIDsKK+e6sT5yw6hufFwgOwor6K+hPmd1xK18XCA7CivlnY4+a8SDbnxcIDsKK+eovD5qacOgfFwgOwor6ISCPnpoaXxcIDsKK+iQhD50w6FvfFwgOwor5o2ePmxhb3xcIDsKK+WxkT54acOofFwgOwor5LyePnPEg258XCA7CivonbY+ZGnDqXxcIDsKK+eomj56aMOsfFwgOwor6IGCPm5pw6h8XCA7CivpmaE+ZMWPdXxcIDsKK+S7kT5sw7pufFwgOwor54SJPnlhbnxcIDsKK+a3mD50w6FvfFwgOwor5Z6uPmt1xIN8XCA7CivlsIk+d8OoaXxcIDsKK+a7lD50YW98XCA7CivmjaM+ZMSDb3xcIDsKK+a2qT5ww7N1fFwgOwor55GwPmd1aXxcIDsKK+e8hj5sw6BufFwgOwor5rWPPmfFrW58XCA7Civnjqs+bcOpaXxcIDsKK+aloz5tw6lpfFwgOwor6K+IPnpow6B8XCA7CivmjJ8+eGnDqXxcIDsKK+eFnj5zaGF8XCA7CivnhJo+ZsOpbnxcIDsKK+mcjj5zaMOgfFwgOwor5pGnPmN1aXxcIDsKK+avrz50xINufFwgOwor5oyrPmN1w7J8XCA7Civov6Y+amlhfFwgOwor5py9Pnhpxa18XCA7CivlhZE+ZHXDrHxcIDsKK+mthT5tw6hpfFwgOwor6L6rPmLDoG58XCA7Civll70+c8OydXxcIDsKK+mzhD5kacOpfFwgOwor5aCVPmR1w7J8XCA7CivosJA+eGnDqXxcIDsKK+iUkT5tacOofFwgOwor6LGBPmh1w6F8XCA7Civmsrg+ZsOoaXxcIDsKK+Wxjj5zaMStfFwgOwor5Y24Pnhpw6h8XCA7CivpkqU+ecOgb3xcIDsKK+eCrT50w6BufFwgOwor55yoPnpoxIN8XCA7CivnnqU+cGllfFwgOwor5Y+oPmRhb3xcIDsKK+iUrD5zaHV8XCA7CivnmL4+ecStbnxcIDsKK+mCsT5xaXV8XCA7Civoho8+Z2FvfFwgOwor6JCDPmN1w6x8XCA7Civlpp4+bml1fFwgOwor5a29Pm5pw6h8XCA7Civmt5E+c2jDunxcIDsKK+eBtj56w6BvfFwgOwor5paMPmJpbnxcIDsKK+Wvhz5rw7J1fFwgOwor5rKbPnDDqGl8XCA7Civlsa8+dMO6bnxcIDsKK+aBlT5zaMO5fFwgOwor5aaDPmZlaXxcIDsKK+m4oD5qaXV8XCA7CivmsqY+bMO6bnxcIDsKK+e8lT5sw7zMhnxcIDsKK+aahz54acOhfFwgOwor5o+JPnLDs3V8XCA7CivokJ0+bHXDs3xcIDsKK+a+nD5sw6FufFwgOwor6JubPnpodXxcIDsKK+aPvT5sxINufFwgOwor6I2rPnnDrG58XCA7CivlsrE+ZMOgaXxcIDsKK+edrD5jxINpfFwgOwor5p6jPnrEg298XCA7Civmkoc+cGllfFwgOwor5aWiPnNoZXxcIDsKK+W4nD56aMOsfFwgOwor6I+MPmp1bnxcIDsKK+WvhT55w61ufFwgOwor6JW+PmzElWl8XCA7CivotL8+aHXDrHxcIDsKK+S+oz5sw7zMhnxcIDsKK+mSpz5qdW58XCA7CivorrM+aHXDrHxcIDsKK+eqpT5rdWl8XCA7CivooY0+ecSDbnxcIDsKK+mUoz5sdcOzfFwgOwor5pK8PmjDoG58XCA7CivlspQ+Y2jDoHxcIDsKK+eGjz54dW58XCA7Civnu6U+c3VpfFwgOwor5ZKnPmxpZXxcIDsKK+adiT5zaGF8XCA7CivlgI8+c2h1fFwgOwor54elPnrDoG98XCA7Civpq6Y+bcOhb3xcIDsKK+WMgD55w7pufFwgOwor56KfPmRpw6l8XCA7CivliZY+cG91fFwgOwor5pCTPmN1b3xcIDsKK+W1iz5tw6lpfFwgOwor6J2HPnhpZXxcIDsKK+WXpj5zdW98XCA7CivlnpI+bMSVaXxcIDsKK+WZqj56w6BvfFwgOwor6JW0PnnDuW58XCA7Civov60+ZGnDqXxcIDsKK+WHvz56w6FvfFwgOwor5LuePnLDqG58XCA7CivmibM+YmFufFwgOwor5ZKmPmxpxJN8XCA7CivlooU+c2jDuXxcIDsKK+aGiz5iaWV8XCA7CivlpY4+a3XDrXxcIDsKK+envT5odcOsfFwgOwor5Y2mPmd1w6B8XCA7Civkvaw+bMSDb3xcIDsKK+iUmj53w6hpfFwgOwor5rS9PnFpw6B8XCA7CivomoA+c2jDrXxcIDsKK+WQhj55YW98XCA7Civomb4+eGlhfFwgOwor5ZS+PnR1w7J8XCA7CivosKw+bWnDuXxcIDsKK+ialT5jw6FufFwgOwor6LWmPnNow6h8XCA7Civni4g+YsOoaXxcIDsKK+mCuT56b3V8XCA7Civlr50+bMOzdXxcIDsKK+iLnz5nxY91fFwgOwor55G2PnnDoW98XCA7Civmoq0+c3VvfFwgOwor5b2mPnnDoG58XCA7Civmgo0+aMOgbnxcIDsKK+aMmj56aMOsfFwgOwor5oKvPm3ErW58XCA7Civoloc+d8OpaXxcIDsKK+WOpT5qdcOpfFwgOwor556pPnpoxa18XCA7Civpg50+aMSDb3xcIDsKK+mikD5iaW58XCA7CivmqpA+ecOhbnxcIDsKK+eJnz5tw7N1fFwgOwor5ZeFPnhpw7l8XCA7CivltJs+anXDqXxcIDsKK+aeoj5zaHV8XCA7Civno4o+bMSVaXxcIDsKK+W/vz5mw6hufFwgOwor5LmNPnpow6B8XCA7CivngJE+YsOgb3xcIDsKK+eWmj5qacO5fFwgOwor6ZqLPnN1w618XCA7Civli5g+a2FufFwgOwor5pmmPmh1w6x8XCA7Civor6s+amnDqHxcIDsKK+ieuj5sdcOzfFwgOwor5aKpPmR1bnxcIDsKK+anvT5jw6FvfFwgOwor5oOrPmLDqGl8XCA7Civnpr0+ccOtbnxcIDsKK+iaij53w6lufFwgOwor5beNPndlaXxcIDsKK+aUkj56xINufFwgOwor56WfPnN1w6x8XCA7CivlsKc+ecOhb3xcIDsKK+e7ij5iw6BufFwgOwor5oeIPnhpw6h8XCA7CivltL0+esSDaXxcIDsKK+iUkz5tw6FufFwgOwor6JepPmZhbnxcIDsKK+WLiz54dW58XCA7CivokI4+d2VpfFwgOwor5Y+pPmvDsnV8XCA7CivpnbQ+eHVlfFwgOwor55qCPnrDoG98XCA7Civon7k+eGnDqHxcIDsKK+aDrj5kw6BufFwgOwor5pCUPnNhb3xcIDsKK+W+ij5odcOtfFwgOwor5YaJPnLEg258XCA7CivpppI+bcOhbnxcIDsKK+mXuj5ndWl8XCA7Civlmo4+aMOhb3xcIDsKK+mqjz5qw7lufFwgOwor55+2PmfDoG58XCA7Civnk6M+YsOgbnxcIDsKK+iFrj5zYWl8XCA7CivmtoU+bmnDqHxcIDsKK+mTkD5rw6BvfFwgOwor5qmxPmNow7p8XCA7CivlnK0+Z3VpfFwgOwor6budPnnFj3V8XCA7Civmkq4+Y3VvfFwgOwor6LqHPmNow7p8XCA7CivouLE+ZHXDsnxcIDsKK+WThj5kdW98XCA7CivlpK0+eWFvfFwgOwor5qiKPmbDoW58XCA7Civlvpg+cMOhaXxcIDsKK+S6pT5ow6BpfFwgOwor6KSaPmNoxa18XCA7Civoi5Q+dGFpfFwgOwor5oGDPnNow6x8XCA7CivphaM+aGFufFwgOwor5oCgPmTDoGl8XCA7Civmrok+eMO5bnxcIDsKK+aPjT56w7J1fFwgOwor5pOCPmzDqWl8XCA7CivpnJY+bMOtbnxcIDsKK+mUhD5jaMO6fFwgOwor6bqfPmzDrW58XCA7CivojLU+eWlufFwgOwor6IK0PnnDoW98XCA7CivpqrA+dMOzdXxcIDsKK+ikgj5ndcOgfFwgOwor6Iq4PnnDum58XCA7Civnq78+Z2FufFwgOwor57OZPmNhb3xcIDsKK+egmj55w6BufFwgOwor56CCPnNoYXxcIDsKK+mXuD53w6hufFwgOwor5o2NPmjDoG58XCA7Civogq4+YW5nfFwgOwor5ZKEPmR1b3xcIDsKK+WUoD5sw6FvfFwgOwor6aKTPnR1w618XCA7CivmprQ+bGnDunxcIDsKK+axsD50w6BpfFwgOwor6L6ZPmNow6h8XCA7Civoi4c+d8SVaXxcIDsKK+W4tz53w6lpfFwgOwor6LCNPmRpw6l8XCA7Civoh4A+dMO6bnxcIDsKK+WVgz5rxJVufFwgOwor576UPmdhb3xcIDsKK+iKuT5xw61ufFwgOwor5ouMPmLDoG58XCA7CivonIA+c2jFrXxcIDsKK+ivmz56aHV8XCA7Civpkp0+ZMO5bnxcIDsKK+aghT56aMOgfFwgOwor5bOZPnpow6x8XCA7Civpn6c+csOobnxcIDsKK+abmT5zaMO5fFwgOwor5buTPmt1w7J8XCA7CivojIQ+cWnDqXxcIDsKK+WRuD5wZWl8XCA7Civku5U+c2jDrHxcIDsKK+a4rT53w6hpfFwgOwor5aa+PnFpw6h8XCA7Civogos+bMOoaXxcIDsKK+eMvj5odcOhfFwgOwor56qSPnpow6x8XCA7Civlko8+anXDqXxcIDsKK+eakz5ow6BvfFwgOwor5o6QPnFpYXxcIDsKK+aHpj5udcOyfFwgOwor5YCUPmp1w6l8XCA7CivlpYQ+eWFufFwgOwor6IWTPmbDqWl8XCA7CivmuKM+emhhfFwgOwor55ikPmxpw7p8XCA7Civolq8+c2jFrXxcIDsKK+altz5rxINpfFwgOwor5oWRPnNow6h8XCA7Civpl70+bcStbnxcIDsKK+axmz54w7lufFwgOwor5ZWnPmx1w7N8XCA7CivlmIg+Y8Ohb3xcIDsKK+aitT5mw6BufFwgOwor6bOePmzDrW58XCA7Civmi7c+a8SDb3xcIDsKK+iTkz5iw6hpfFwgOwor5outPnNow6x8XCA7CivmmZY+aHVpfFwgOwor55G+PmrErW58XCA7Civpqrg+aMOhaXxcIDsKK+mqoT5sdcOzfFwgOwor56GFPmd1aXxcIDsKK+S+iD5jaMStfFwgOwor5aSlPmh1xY98XCA7CivnqZc+c3XDrHxcIDsKK+aygT5xw6xufFwgOwor5oK0PmN1w6x8XCA7CivnkIk+bGnDunxcIDsKK+mprz54w7pufFwgOwor57qsPnfElWl8XCA7Civll5w+c2jDrHxcIDsKK+mapz5zdcOsfFwgOwor5qGUPmppw6l8XCA7Civmvog+Y2jDqHxcIDsKK+mSrj5uacWtfFwgOwor5ZOnPmNoaXxcIDsKK+aOuj5jw6BufFwgOwor5b+WPmPFrW58XCA7CivmvLE+c2jDuXxcIDsKK+eDmT5sw6BvfFwgOwor55uUPmt1aXxcIDsKK+eYqj5iaWV8XCA7CivnnLg+bcOzdXxcIDsKK+iVgz5mw6FufFwgOwor5ZSGPnN1b3xcIDsKK+ejiz5jdW98XCA7CivkvL0+cWnDqXxcIDsKK+Weoj5nw7J1fFwgOwor6KSqPnTDuW58XCA7CivnmLg+cXXDqXxcIDsKK+Wymj5sw6FufFwgOwor5ZazPmNoYXxcIDsKK+afvz5zaMOsfFwgOwor5Y+xPmNow6x8XCA7CivljKM+eGnDoXxcIDsKK+aDiz53xINufFwgOwor55ewPnTDoW58XCA7CivmoaY+aHXDoHxcIDsKK+WSjj5qacO5fFwgOwor5oaoPmhhbnxcIDsKK+mrkz5zdcStfFwgOwor6La+PnpoxK18XCA7Civngr0+Y2jDrHxcIDsKK+WtsD5zaMO6fFwgOwor5o+pPmthaXxcIDsKK+eqpj5kw7J1fFwgOwor55+iPnNoxK18XCA7CivphZ0+ecO5bnxcIDsKK+a9pj5sxINvfFwgOwor5YioPmLDoG98XCA7CivprJM+YsOsbnxcIDsKK+acrT56aMOhfFwgOwor5Lq1Pnhpw6h8XCA7Civkv6g+ecSDbnxcIDsKK+i3uj5kdcOyfFwgOwor6LSuPnpoxa18XCA7CivmgpY+YsOoaXxcIDsKK+iMrD5jaMOhfFwgOwor54KZPnpow6x8XCA7Civmv5I+YmlufFwgOwor552QPmzDoGl8XCA7CivlgY4+d2VpfFwgOwor6J2OPnhpZXxcIDsKK+adtT5jaMWtfFwgOwor6KGFPnjDrG58XCA7CivmpaA+bsOhbnxcIDsKK+mfrD50YW98XCA7Civmir8+bcStbnxcIDsKK+Wepj5rxJVufFwgOwor5621PnnDoW58XCA7CivnmJ8+d2VufFwgOwor5amqPmzDoW58XCA7CivmtZI+Y8O6bnxcIDsKK+iRtT5rdcOtfFwgOwor6aOVPnNvdXxcIDsKK+i5kT5uacOofFwgOwor56u6Pnpow7p8XCA7CivlkJ0+bMOsbnxcIDsKK+edqz5qacOpfFwgOwor6bmKPnF1w6h8XCA7CivljYk+aHXDrHxcIDsKK+mBgT5kw7lufFwgOwor5bq2PnNow7l8XCA7CivolYo+cnXErXxcIDsKK+ivsj5odcOsfFwgOwor57yqPmppdXxcIDsKK+mRqz54aW58XCA7Civnnb0+a3XDrXxcIDsKK+i1oz5nw6BufFwgOwor5Za9PmzFjXV8XCA7Civnq6M+asO5bnxcIDsKK+mmiD5rdcOsfFwgOwor5ZaLPmRpw6l8XCA7CivlgYw+cnXDsnxcIDsKK+eisz50w6BufFwgOwor5qqAPnTDoW58XCA7CivmroY+ZMOgaXxcIDsKK+ikkj5iYW98XCA7Civll6g+aGFpfFwgOwor6K+YPmppw6l8XCA7CivmiqE+bMO6bnxcIDsKK+m5qz5qacO5fFwgOwor5pmXPmjDoW58XCA7Civmsow+ZMO5bnxcIDsKK+iNpD5odW58XCA7Civnoas+bGnDunxcIDsKK+WvkD5tw6hpfFwgOwor5qmEPmfEg258XCA7CivmpoQ+bMSDbnxcIDsKK+esiz5zxa1ufFwgOwor6by+PmhhbnxcIDsKK+WZrD5zaMOsfFwgOwor6ZuvPnfDqW58XCA7Civon6A+cMOhbnxcIDsKK+mYiT55YW58XCA7CivmoYU+d8OpaXxcIDsKK+WjlT5ow6FvfFwgOwor6ZSaPm3DoW98XCA7CivotYE+csOobnxcIDsKK+WJgT5kdcOyfFwgOwor6IWMPnlhbnxcIDsKK+e8pD5iaW58XCA7Civll5Y+c291fFwgOwor6JySPnnDoW58XCA7Civmt4Y+ecOhb3xcIDsKK+edvz5ydcOsfFwgOwor6LGaPnTDum58XCA7Civpm48+Y2jDunxcIDsKK+mBkD54acOhfFwgOwor6JawPnh1bnxcIDsKK+evkz5sxY91fFwgOwor6JGGPmLEg298XCA7CivlvJs+Y2jDrXxcIDsKK+Wemz5kdcWPfFwgOwor5pKFPmp1ZXxcIDsKK+WQoD5mw6hpfFwgOwor57uaPmzDoG98XCA7CivppoQ+aMO6bnxcIDsKK+mlqD50w7pufFwgOwor5p63PmppYXxcIDsKK+iDrz5rdcOgfFwgOwor5ZGXPmLDoGl8XCA7Civpk50+bMO8zIZ8XCA7Civnn5w+amlufFwgOwor54KWPmTDuW58XCA7Civpl6s+ecOgbnxcIDsKK+i5kj5tw6FufFwgOwor5rOvPm3ErW58XCA7CivoopI+dMSDbnxcIDsKK+icmD56aGl8XCA7CivmiqA+a291fFwgOwor55+XPmNow7l8XCA7Civps5Y+YmllfFwgOwor6ICYPnnDum58XCA7Civphro+eHVufFwgOwor54OsPmrDrG58XCA7CivlmaQ+asOsbnxcIDsKK+mrrz5yw6FufFwgOwor6Jy/PndhbnxcIDsKK+aKiT5qdcOpfFwgOwor57GBPmzDoGl8XCA7Civlja8+bcSDb3xcIDsKK+ijtD5ww6lpfFwgOwor55uOPsOgbmd8XCA7CivmjrA+YmFpfFwgOwor6ZiqPmLEg258XCA7CivpmJE+bMOhbnxcIDsKK+WVkD5jdcOsfFwgOwor5rmDPnDDoGl8XCA7CivllZU+dMOhb3xcIDsKK+ivvT5mxJVpfFwgOwor5paTPmzDoW58XCA7CivlqJM+d8SVaXxcIDsKK+aRnj5sdcOyfFwgOwor5YiOPnfElW58XCA7CivliL0+Z3XDrHxcIDsKK+amqD56aMOgfFwgOwor6IOtPnlhbnxcIDsKK+iXuz56xINvfFwgOwor6amuPnR1w7N8XCA7Civog5o+cGVpfFwgOwor5oOwPmR1w7J8XCA7Civpq4U+bMOzdXxcIDsKK+WXqz5uacOofFwgOwor54eUPmbDoW58XCA7Civoh4o+c2FvfFwgOwor5radPmzDoG98XCA7CivoiIA+ecSDb3xcIDsKK+WShj5ww6FvfFwgOwor5ouEPnpoxa18XCA7CivmmIo+aMOgb3xcIDsKK+WBlT5qaWV8XCA7CivkvZc+dHXDs3xcIDsKK+i1sz5qacWtfFwgOwor5L6PPnpodXxcIDsKK+i6jz5sw6xufFwgOwor57SKPnfDqG58XCA7Civnrqk+bHXDs3xcIDsKK+WSqz56aMStfFwgOwor6Z2zPmrDrG58XCA7Civpsqg+c2hhfFwgOwor6YKDPnN1w6x8XCA7CivopLQ+YsSDb3xcIDsKK+WdjT50YW58XCA7CivmiYk+ZmVpfFwgOwor6ZiZPnF1w6h8XCA7CivmtpQ+Y8OpbnxcIDsKK+eavz5txK1ufFwgOwor5YKjPmTEg2l8XCA7CivouYI+csOzdXxcIDsKK+eAmj5ow6BufFwgOwor55qWPnfEg258XCA7CivnnIg+ZGFufFwgOwor6YWLPnFpw7p8XCA7Civpm7k+YsOhb3xcIDsKK+W/kD50xINufFwgOwor5q6hPmLDrG58XCA7CivnjKU+d8SVaXxcIDsKK+S6mD5nw6hufFwgOwor55iBPmN1w6x8XCA7CivnkZU+eGnDoXxcIDsKK+ejtz5sw61ufFwgOwor542XPmp1w6l8XCA7CivphYk+ecWPdXxcIDsKK+mVkD5nxINvfFwgOwor5aCwPnnDoG58XCA7CivoiqU+amnDqHxcIDsKK+e/oT5mxJVpfFwgOwor55u5PmTFrW58XCA7CivnsKo+emFufFwgOwor5oOsPnFpw6h8XCA7Civns68+bnXDsnxcIDsKK+WUgT55w6BufFwgOwor6LCaPnnDoG58XCA7Civlubo+eWFvfFwgOwor6JmxPnNoaXxcIDsKK+eCnD53xJVpfFwgOwor55GZPm7Eg298XCA7Civnuq0+ecO6bnxcIDsKK+mBmz5sacO5fFwgOwor6aqFPmh1w6F8XCA7CivosKc+bcOgbnxcIDsKK+ikmz5sw7zMhnxcIDsKK+aBuj5rxINpfFwgOwor5YyuPmd1w6x8XCA7Civmk54+c8WPdXxcIDsKK+W5oT5mYW58XCA7Civlob4+c2jDunxcIDsKK+ejkD5ww6FufFwgOwor54SKPmjDoG58XCA7CivmlZU+Y2jDrHxcIDsKK+mmgT5uxJVpfFwgOwor5rG+PmbDqW58XCA7CivmmY8+ecOgbnxcIDsKK+mAhT5ow7J1fFwgOwor5bSCPmzDoW98XCA7CivlqIQ+bMOzdXxcIDsKK+aOoz5jaMOofFwgOwor6YKCPnhpw6h8XCA7Civlj58+c8WPdXxcIDsKK+iHvD5qacO5fFwgOwor56++Pm1pw6h8XCA7CivmkJA+Y2jDuXxcIDsKK+iaqj5kxY91fFwgOwor5remPmfDoG58XCA7Civnl5g+ZMOydXxcIDsKK+iLnj5iYW98XCA7CivmiJs+amnDoXxcIDsKK+annz5iaW58XCA7CivmlKs+anXDqXxcIDsKK+eBuD5qacWtfFwgOwor5rqJPmfDoGl8XCA7CivosJE+bsO8w6h8XCA7Civlhr0+bGnDqHxcIDsKK+ivjD56b3V8XCA7Civpn60+amnFrXxcIDsKK+m6vj5odWl8XCA7Civoo58+c2hhfFwgOwor5oGBPm3Ds3V8XCA7CivmsbY+d8OobnxcIDsKK+aIjT5zaMO5fFwgOwor56e4PmppZXxcIDsKK+eitD5jaMOhfFwgOwor5qatPnhpw6h8XCA7Civnuqg+d8OhbnxcIDsKK+mFqj5sw6BvfFwgOwor57K8PmzDrW58XCA7CivnkoA+Y3XErXxcIDsKK+WEoT5sxJVpfFwgOwor5YKAPmd1aXxcIDsKK+eaiD5ndWl8XCA7Civpk4A+ecOhbnxcIDsKK+aRuj56aMOpfFwgOwor6KKIPmppYXxcIDsKK+WPgT5jZW58XCA7CivplYE+bcSVaXxcIDsKK+W/uD5uacWtfFwgOwor556wPmvDoG58XCA7Civnj54+bHXDsnxcIDsKK+WCqT5udcOzfFwgOwor5bOlPnnDrW58XCA7CivpkoU+amlufFwgOwor5qGAPmppw6l8XCA7Civnu68+ZmVpfFwgOwor5rmuPnlhbnxcIDsKK+mijz5ow6FpfFwgOwor5pS4PmJpbnxcIDsKK+m4qD5ixINvfFwgOwor5Z6gPnnDrW58XCA7CivonJc+Z3VhfFwgOwor56C6Pmd1aXxcIDsKK+iapD56xINvfFwgOwor56+ZPmdhb3xcIDsKK+awrj5kw6BufFwgOwor6bugPnhpw6F8XCA7Civnl6M+emjDrHxcIDsKK+amtz5xdcOofFwgOwor6LCpPm3DoW58XCA7Civoia4+Z8OobnxcIDsKK+i9vD5zaMOsfFwgOwor6aaRPmrErW58XCA7Civppoo+c291fFwgOwor6aWqPnLDqG58XCA7Civooak+Y2jEg3xcIDsKK+WJnD53YW58XCA7CivmtZo+asO5bnxcIDsKK+mSmT5nw6BpfFwgOwor6ZWsPmh1w7J8XCA7CivmhKA+ecO5bnxcIDsKK+WZmT5xw61ufFwgOwor5bKRPmPDqW58XCA7CivmkL0+Y2jDoXxcIDsKK+eioz5qacOpfFwgOwor5omqPm3DqW58XCA7Civllb4+aml1fFwgOwor5ZG3PnhpYXxcIDsKK+ihrj5nxa1ufFwgOwor5b++PmvDoGl8XCA7Civokr8+aGFvfFwgOwor6JqvPnFpdXxcIDsKK+adsz55xINvfFwgOwor6IquPnJ1w6x8XCA7Civpmag+ecWtbnxcIDsKK+evnT5nb3V8XCA7Civnkqg+Y8OgbnxcIDsKK+W2mT5sw61ufFwgOwor6JyaPmbElWl8XCA7CivojpM+bcOpaXxcIDsKK+ixjD53YW58XCA7Civok5E+c3VvfFwgOwor5aiRPnN1b3xcIDsKK+S7qD5mxINufFwgOwor6Lm2Pmp1w6l8XCA7CivompM+ecStbnxcIDsKK+iktj56aMOpfFwgOwor6JuwPnpow618XCA7Civouak+YmnDqXxcIDsKK+aAtT5jaMO5fFwgOwor5Lq7PnLDqW58XCA7Civnmbg+Z3XErXxcIDsKK+iIkD5zaMOsfFwgOwor6KKCPm3DqGl8XCA7Civmi64+amnDqXxcIDsKK+eJkj5kacOpfFwgOwor5ZefPmppZXxcIDsKK+eWnz5uw7zDqHxcIDsKK+WnmD5waW58XCA7CivmtaM+d8SDbnxcIDsKK+aysT50dcOzfFwgOwor5ZelPmjDoW98XCA7Civll7I+ZGnEg3xcIDsKK+WSpD56aMOgfFwgOwor5Y6pPmppw7l8XCA7CivmmJk+dMOhbnxcIDsKK+algj5jaMOhfFwgOwor5pOAPmfEg258XCA7CivlnpM+Z2FpfFwgOwor6JSXPnpow6h8XCA7Civnqog+ecSDb3xcIDsKK+W+lT5sw6FpfFwgOwor5bmUPm3DoG58XCA7Civllbs+Y2jDrHxcIDsKK+angT5nxINvfFwgOwor5aaNPnnDoW58XCA7Civpgq8+aMOhbnxcIDsKK+aMsj5zdW98XCA7CivpgbQ+bMOtbnxcIDsKK+Wziz54w7pufFwgOwor6K+ZPmh1aXxcIDsKK+WBgz55xINufFwgOwor5aOsPnLDqW58XCA7Civmjoc+ZHXDs3xcIDsKK+WbpD5kw7lufFwgOwor6ICoPm7DsnV8XCA7Civnu7o+bGnFrXxcIDsKK+aPvz5xw6xufFwgOwor6KKkPm3DoG98XCA7Civph4k+ecOydXxcIDsKK+m6nT5zaMOofFwgOwor5b2XPmh1w6x8XCA7Civlm6E+bmFufFwgOwor6L6UPnDDqGl8XCA7CivojZ8+aHXDrHxcIDsKK+mcjz5mZWl8XCA7Civog6Q+ecOsbnxcIDsKK+m4tT50dcOzfFwgOwor55qLPmdhb3xcIDsKK+ellz56aGl8XCA7CivmoIk+amnDqXxcIDsKK+WnnT5zaHV8XCA7CivkvZg+c2jDqXxcIDsKK+ibgD56aMO5fFwgOwor6LaUPmxpw6h8XCA7CivpopQ+aMOgbnxcIDsKK+aHkT5tw6hufFwgOwor5a2bPmLDqGl8XCA7Civlla4+bmnDqHxcIDsKK+a8lT5jw6FvfFwgOwor6JS7PmvDsnV8XCA7Civlgbs+bMOzdXxcIDsKK+mDuD5kYW58XCA7CivkvbA+YsSDaXxcIDsKK+m+mz5rYW58XCA7CivnkKg+a3VufFwgOwor546zPmTDoGl8XCA7CivpgrA+dMOhaXxcIDsKK+mypT5zaMOtfFwgOwor5a2RPmppw6l8XCA7CivpgLU+a3XDrXxcIDsKK+WWnz5rdcOsfFwgOwor57qbPmTDoG98XCA7Civngrc+emjDuXxcIDsKK+eKkj5rw6BvfFwgOwor54+IPmppYXxcIDsKK+WRpj55b3V8XCA7CivplYI+bMOydXxcIDsKK+eFsj5iYW98XCA7Civlsrc+bcOtbnxcIDsKK+WWkT55aW58XCA7Civpsb8+ecOzdXxcIDsKK+WtsT5jw6BufFwgOwor5L+qPmzDoGl8XCA7CivmjJ4+amlhfFwgOwor5664Pnpow7l8XCA7Civpk6A+a8SDaXxcIDsKK+Wohj5yxINvfFwgOwor5L2dPmdvdXxcIDsKK+mzhT5xaXV8XCA7CivomrE+emjDoHxcIDsKK+eXqD5sw6FvfFwgOwor6ZSyPnFpw6h8XCA7CivnpZo+enXDsnxcIDsKK+afmj55w7J1fFwgOwor54uvPmh1w6F8XCA7CivotYo+c2hlfFwgOwor56eGPmfEg258XCA7Civpu5w+Y2jDuXxcIDsKK+ikkz5ixINvfFwgOwor5p+pPmppw7l8XCA7CivpgZI+cWnDunxcIDsKK+W8kT5zaMOsfFwgOwor6LCyPmp1w6l8XCA7Civpu40+c2jFrXxcIDsKK+eDqT5odcOsfFwgOwor6K+/PnfElWl8XCA7CivmkYg+YsOsbnxcIDsKK+ieqz5zaMOsfFwgOwor6aKmPnDDrW58XCA7CivopoM+dMOhbnxcIDsKK+aYlT54aW58XCA7Civmt5Y+bsOgb3xcIDsKK+i0sD5iZW58XCA7CivnraA+ecO6bnxcIDsKK+aBmj5odcOsfFwgOwor6I6gPnnFj3V8XCA7Civnnb4+Z2FvfFwgOwor6I2aPmppw6F8XCA7CivplIk+Y3XDsnxcIDsKK+apmz5qdcOpfFwgOwor6ZiVPnF1w6h8XCA7CivpmIQ+aml1fFwgOwor5bOBPm3Eg298XCA7Civlkrs+eGl1fFwgOwor5ZGyPmhvdXxcIDsKK+mUjD54aW58XCA7CivmvY0+d8OpaXxcIDsKK+mmjz5sacO5fFwgOwor6IuvPmLElW58XCA7CivmoY4+emjDrHxcIDsKK+iKvj5mw6hpfFwgOwor55+NPmp1w6l8XCA7Civlv7s+eGlufFwgOwor56+RPmt1w6x8XCA7CivplaI+anXDqXxcIDsKK+mSmz50w6BpfFwgOwor56WJPnpoxK18XCA7CivmsKQ+eWlufFwgOwor54uyPnN1bnxcIDsKK+WklD5rdcOtfFwgOwor6ZWUPmJpbnxcIDsKK+awsj55dW58XCA7CivmnYg+Y2hhfFwgOwor6I2APnjDum58XCA7Civpkro+aHXDrHxcIDsKK+a1gz5qacOhfFwgOwor55eUPnpow6x8XCA7Civoob0+csOobnxcIDsKK+eHpz5zdcOsfFwgOwor5Zu/PnnDsnV8XCA7Civllpk+aHXDrHxcIDsKK+afkT5nYW58XCA7CivonI0+Y2jDunxcIDsKK+e8mT5qw6xufFwgOwor5ZKpPm1pZXxcIDsKK+mcvj5tw6FpfFwgOwor56iUPnLElW58XCA7CivplJs+YmVufFwgOwor56CjPnR1w7N8XCA7Civnj4k+bcOtbnxcIDsKK+WrlD5ww61ufFwgOwor5Zu1PmzDum58XCA7CivouYk+Y3VvfFwgOwor56yePmNoaXxcIDsKK+miiT5qacOhfFwgOwor6ZOiPnpodXxcIDsKK+aHiz5tw6BvfFwgOwor54yxPm7DoW98XCA7CivlmbE+anXDqXxcIDsKK+mVjT5uacOofFwgOwor6KG+PnFpbnxcIDsKK+iDmz5qacSDfFwgOwor6ICEPm3DoG98XCA7CivmqZA+dHXDs3xcIDsKK+a0mT56aHV8XCA7Civmgbk+ecOgbnxcIDsKK+S5nD5taWV8XCA7Civom60+emjDrHxcIDsKK+mfqj53xJVpfFwgOwor6K+oPmjDuW58XCA7CivotZ0+ecOgbnxcIDsKK+Wyvz5rdWl8XCA7Civnlbk+d8SDbnxcIDsKK+W9gD5nw7J1fFwgOwor5oCrPmbDqGl8XCA7CivojY8+csSVbnxcIDsKK+iblD5odcOtfFwgOwor6LeOPnR1w7N8XCA7CivogZI+Z3VhfFwgOwor6bmePnnDoW98XCA7CivpgKE+cXVufFwgOwor5qWUPnhpZXxcIDsKK+eOlj5qacWtfFwgOwor6LWtPnpoxJV8XCA7Civnvq8+amnDqXxcIDsKK+idiD5ndW98XCA7Civogak+a3XDrHxcIDsKK+eXgj5qaWF8XCA7CivmrpI+c2jDrHxcIDsKK+mAtj53ZWl8XCA7CivlrqU+ecOydXxcIDsKK+WVlj5kw6BufFwgOwor54euPnhpw6h8XCA7CivnsrI+Y8OgbnxcIDsKK+inkD5qxK1ufFwgOwor5bi8Pmd1w7N8XCA7Civnhag+d2VpfFwgOwor6IaRPmLDrG58XCA7Civovpo+bMOtbnxcIDsKK+aovT56dW58XCA7Civlqr4+Z8OydXxcIDsKK+WnuT5jaMOgfFwgOwor5b6HPnjDuW58XCA7Civolq4+c8WPdXxcIDsKK+Wdgj5ixINufFwgOwor5bqWPnDDoW98XCA7Civpsp8+eMO6bnxcIDsKK+mTpz5odcOhfFwgOwor54SWPm3DqG58XCA7Civogr0+dMOgaXxcIDsKK+eJpj5tw6FvfFwgOwor54y3PnnDs3V8XCA7CivlqZU+amnDqXxcIDsKK+WTnj5tb3V8XCA7CivlkJI+emjDoHxcIDsKK+iwpT5zaMOsfFwgOwor6ZOhPnpow6F8XCA7CivnhJk+YsOoaXxcIDsKK+amqz5zxa1ufFwgOwor5rSHPnlpbnxcIDsKK+mllT50YW98XCA7Civmrpo+ZGFufFwgOwor57u+PnfEg258XCA7Civpl7E+d8OpaXxcIDsKK+WZmD5qdWV8XCA7CivllKM+esOgb3xcIDsKK+iRsz53ZWl8XCA7Civor58+Z8OydXxcIDsKK+mVrT5sw6lpfFwgOwor56SFPmR1bnxcIDsKK+a5hD5tw6lpfFwgOwor54uOPnhpw6F8XCA7Civmkrc+eGnDqXxcIDsKK+ivsD5nw6BvfFwgOwor6LG4Pnpow6x8XCA7Civotac+bsSDbnxcIDsKK+iIqD5ixINufFwgOwor6JyHPnpoZXxcIDsKK+ehjD5sdcOyfFwgOwor5qGkPmd1w6x8XCA7Civmu58+ecOgbnxcIDsKK+a0tT54w7pufFwgOwor5YiNPmNow7p8XCA7CivlhZY+ecSDbnxcIDsKK+W3vT54w7lufFwgOwor6ZOGPmxpxa18XCA7CivomaI+Z3XDs3xcIDsKK+a/oD5ow6FvfFwgOwor5riaPnpoxa18XCA7CivmsLU+c2FufFwgOwor5ZG2Pm7DoW98XCA7Civojao+c3VufFwgOwor5ZypPnfDqWl8XCA7Civnvrg+bMOpaXxcIDsKK+e7pj50YW98XCA7CivnlqU+amnDqHxcIDsKK+mypz5nxa1ufFwgOwor55iiPmJhbnxcIDsKK+atgz5zaMOgfFwgOwor6KePPmfDsnV8XCA7CivnkYE+bcOgb3xcIDsKK+ePsj5ow7pufFwgOwor5r65PmTDoG58XCA7CivpmJc+anXDqXxcIDsKK+eMoT5sdcOzfFwgOwor6aaXPmt1w618XCA7Civms4U+cWnDunxcIDsKK+mUsD5qaWV8XCA7Civnn74+ZsOhbnxcIDsKK+a3rD5jdcOsfFwgOwor56iXPmLDoGl8XCA7CivouoU+emjDunxcIDsKK+i4rz56aMOtfFwgOwor6JqpPmNoaXxcIDsKK+migD5rxJVufFwgOwor55a4PmTEg258XCA7CivpuLc+emjDrHxcIDsKK+afmD56aMOofFwgOwor5p28Pnpow7l8XCA7CivnvJ8+Z8SDb3xcIDsKK+Wtoj5iYW98XCA7CivmtK4+dMOhb3xcIDsKK+WyrD5qacSDfFwgOwor6bKyPmt1bnxcIDsKK+iAiz5kacOofFwgOwor6ZOKPnNow6l8XCA7Civoi5I+csSDbnxcIDsKK+afnj56dcOyfFwgOwor54O3PnfDoW58XCA7Civnp6s+c2jDunxcIDsKK+mbiT56aMOsfFwgOwor55+4PmdhbnxcIDsKK+eEsT55w6BufFwgOwor6LWFPmdhaXxcIDsKK+aZtz5ndcStfFwgOwor5qSBPmd1xY98XCA7Civmvo0+c2jDuXxcIDsKK+iKqT5xw61ufFwgOwor5aaKPnLDqG58XCA7Civphb0+ecOgbnxcIDsKK+mioj5ow6BvfFwgOwor55exPmbDqGl8XCA7CivniZ0+cMOsbnxcIDsKK+abnD55w6BvfFwgOwor6YCRPnFpw7p8XCA7Civppaw+Y2jDrHxcIDsKK+Wyqz54acO5fFwgOwor5biPPnfDqWl8XCA7Civlk48+aMSVbnxcIDsKK+WdqD50dcOzfFwgOwor6K6mPmppw6l8XCA7Civnl4g+bGllfFwgOwor6LiFPmNow6x8XCA7CivosZU+c2jErXxcIDsKK+eWsT5ww6BvfFwgOwor56OUPnpow6l8XCA7CivmgrE+ZsSVaXxcIDsKK+aPhj5rdcOtfFwgOwor6JWoPmp1w6l8XCA7CivphZo+ZmVufFwgOwor6bOXPm3DoW58XCA7CivnvYU+eGnDoHxcIDsKK+m5pz56aMOofFwgOwor55WIPmbDoG58XCA7Civnk5I+esOgbnxcIDsKK+WkpD55w61ufFwgOwor5ZuXPnfDqWl8XCA7CivojLE+emh1fFwgOwor6aSuPnRpw6h8XCA7CivphaE+dHXDs3xcIDsKK+aajD5rdcOtfFwgOwor5qCAPnpoaXxcIDsKK+a/kT5sw6BpfFwgOwor5bqlPnhpdXxcIDsKK+aOtD5ndcOzfFwgOwor6YOXPmNoaXxcIDsKK+WOnT5jdcOyfFwgOwor56yzPmppYXxcIDsKK+eXpz5zaGF8XCA7Civpk6k+c2hhfFwgOwor552DPmrDuW58XCA7Civnj48+anXDqXxcIDsKK+axij5jaMOgfFwgOwor5oG9PnnDuW58XCA7CivmgYI+eMO6bnxcIDsKK+W/hD5zaMO5fFwgOwor5rCmPmjDoGl8XCA7CivprKM+bGnDqHxcIDsKK+meoz5yw7N1fFwgOwor6aKfPm3DoW58XCA7CivmgLw+ZHXDrHxcIDsKK+eEkD50YW98XCA7Civpn6s+ecO5bnxcIDsKK+W0tD53ZWl8XCA7CivppI0+ecOgbnxcIDsKK+i4nz5jaMOtfFwgOwor55q0PmN1bnxcIDsKK+ihpD5jaMSDfFwgOwor5peEPm3DoW98XCA7CivnvKY+bcOgbnxcIDsKK+e8lz5tw61ufFwgOwor5buqPmzErW58XCA7Civotrg+ZMWtbnxcIDsKK+ixiT5jaMStfFwgOwor55e/PnfElWl8XCA7CivnnaI+c3VpfFwgOwor54CjPnhpw6h8XCA7Civmt50+ZsOpaXxcIDsKK+aAjT56dcOyfFwgOwor6aaQPnhpdXxcIDsKK+W+rT55w6FvfFwgOwor5ZqvPmh1w7J8XCA7CivlkZY+YsSTaXxcIDsKK+aUiT5odcOyfFwgOwor6JWZPmh1w6x8XCA7CivpgrM+cMOpaXxcIDsKK+iyiT5ow6FvfFwgOwor5ruBPmNow7p8XCA7Civpvog+a8SVbnxcIDsKK+e5hz55w6FvfFwgOwor55aWPmppw6l8XCA7CivmrYY+eGlufFwgOwor6LWJPmzDoGl8XCA7CivnkLA+ecSDbnxcIDsKK+e6vj5zaHV8XCA7Civov6g+ZMOgaXxcIDsKK+eLuj55w61ufFwgOwor5biUPnDDqGl8XCA7CivluJk+emjDrHxcIDsKK+WStD5odcOhfFwgOwor6JaFPmhhb3xcIDsKK+m6iD56aMWtfFwgOwor6bKRPmd1aXxcIDsKK+i5sD5jaMO6fFwgOwor57OMPnrDoW58XCA7CivopKs+Y2jErXxcIDsKK+alrj5jaMWtfFwgOwor54GPPmjDoG98XCA7Civmja0+YsSDaXxcIDsKK+iVpD5ydcOtfFwgOwor6JGtPmppYXxcIDsKK+iRmj5yw6hufFwgOwor6I2oPnjDum58XCA7Civpg4U+emjDrHxcIDsKK+mUlz5kdcWPfFwgOwor6bODPnNhaXxcIDsKK+mVij5sacO5fFwgOwor6Y6PPmxpw7p8XCA7CivotrU+YsOgb3xcIDsKK+mFuT5sw6hpfFwgOwor566qPmRhbnxcIDsKK+iatj5oYW58XCA7CivplYU+bcOpaXxcIDsKK+eVsj5zaGV8XCA7CivmoaE+bsOhb3xcIDsKK+aeuD5nb3V8XCA7CivmurQ+eGnDuXxcIDsKK+a1lD54w7pufFwgOwor54uSPmbDqGl8XCA7Civni4E+ecWtbnxcIDsKK+aPuD56aGF8XCA7CivojLQ+aHXDrXxcIDsKK+WCpz5iw6xufFwgOwor6YOnPnDFj3V8XCA7Civovoo+Z8WtbnxcIDsKK+mSkj5mw6FufFwgOwor6bqHPmp1bnxcIDsKK+mFoj56dcOyfFwgOwor6IesPm5pw6h8XCA7Civoob8+amlufFwgOwor55iZPnNhb3xcIDsKK+avtT5zYW58XCA7Civovas+csOobnxcIDsKK+eQrD53xINufFwgOwor5a2TPmp1w6l8XCA7CivmtIw+bGnDqHxcIDsKK+mYmj5rw6BufFwgOwor6Ze8PmthaXxcIDsKK+iLtz5nYW58XCA7CivloJ4+ZGnDqXxcIDsKK+WdjD5iw6hufFwgOwor5YuwPnhpw6l8XCA7CivogJI+bMSVaXxcIDsKK+edmj55w6FpfFwgOwor5piAPnnDum58XCA7CivmpKQ+bHXDs3xcIDsKK+e7gD5nw6BufFwgOwor5aaXPmrDrG58XCA7Civmgp0+a3VpfFwgOwor5bWvPmN1w7N8XCA7CivlmJ4+bMSTaXxcIDsKK+awvT50xa1ufFwgOwor6Yy+Pmh1w7J8XCA7Civpha8+emjErXxcIDsKK+eupz5xacOofFwgOwor55ajPnnDs3V8XCA7CivplZM+amlhfFwgOwor6ZS4PmNow6F8XCA7Civog50+emhpfFwgOwor5qqpPmzErW58XCA7Civmp44+Y2jDoXxcIDsKK+aesz56aMStfFwgOwor5bC7Pmthb3xcIDsKK+ayqT5odcOsfFwgOwor5oKDPmvFrW58XCA7CivolZ4+enXDrHxcIDsKK+iNvT5zdWl8XCA7CivlooE+bcOgbnxcIDsKK+eVmj5ixJVufFwgOwor5L+FPnFpw7p8XCA7CivplY8+bGnDunxcIDsKK+eikz5kdcOsfFwgOwor56S7PnNow6x8XCA7CivmjIg+cWnDqHxcIDsKK+adsj5nxINvfFwgOwor5qW4PnFpdXxcIDsKK+ahlT5nYW98XCA7Civmurc+aMO5bnxcIDsKK+azlD5nYW58XCA7CivmhKY+a3XDrHxcIDsKK+W0pD55w6FvfFwgOwor6I+9PnNow7p8XCA7Civkv7M+cMOhaXxcIDsKK+mboD5jaGl8XCA7CivotrE+esSDbnxcIDsKK+e/pT56aMO5fFwgOwor562uPnNow6x8XCA7Civpop4+bmnDqHxcIDsKK+m4sT56aGl8XCA7CivplLQ+a8SDaXxcIDsKK+iErD5wYW98XCA7CivmiKE+a2FufFwgOwor57yrPnNhb3xcIDsKK+mqlj5jYW58XCA7Civlpqs+Z3VpfFwgOwor5raePmd1b3xcIDsKK+a0hD5odcOtfFwgOwor6ZiIPnnDoG58XCA7Civnja8+eHVufFwgOwor54uNPnDDoW98XCA7Civltaw+d8OpaXxcIDsKK+WRlD5kYWl8XCA7CivlooA+Y2jDrXxcIDsKK+mEoj55YW58XCA7Civpg68+dMOhbnxcIDsKK+m8kD5uw6BpfFwgOwor6LCwPmzDoW58XCA7CivpvLk+ecSDbnxcIDsKK+mtkT5jaGl8XCA7Civps5U+eHXElXxcIDsKK+i3hj50w6FpfFwgOwor6KKiPnDDoG58XCA7Civnn6w+Y3XDs3xcIDsKK+mVnj54w61ufFwgOwor56KaPmLDqGl8XCA7CivmhI0+bcStbnxcIDsKK+atmT5zaMOofFwgOwor5pq+PnR1bnxcIDsKK+a/iT5zdWl8XCA7CivmurI+c291fFwgOwor6aOnPnN1bnxcIDsKK+eKrT5mxINufFwgOwor5ZaIPmppZXxcIDsKK+aNqT5sacOofFwgOwor6I+APnfEg258XCA7CivojaY+bHXDsnxcIDsKK+WfmT54dW58XCA7CivpmZ8+emjDrHxcIDsKK+S+iT5rdWF8XCA7CivmsJY+bsSDaXxcIDsKK+mqsT54acOofFwgOwor6bOfPnrDuW58XCA7CivpnIg+cMOoaXxcIDsKK+iglj5odcOyfFwgOwor55qyPmp1bnxcIDsKK+eYij5ow7N1fFwgOwor6bi5Pmd1YXxcIDsKK+mTmT5uw6FvfFwgOwor6IWpPm7Eg258XCA7CivliJY+eXXDqHxcIDsKK+awmD5kYW98XCA7Civmm5s+eHVufFwgOwor5qe/PmrErW58XCA7Civmpqc+ZsSVaXxcIDsKK+mqmD56aMOsfFwgOwor5r20PnpodXxcIDsKK+azrj5ww6BufFwgOwor5pCmPm51w7J8XCA7CivloIc+asStbnxcIDsKK+iOsz5zaMOtfFwgOwor5aCZPnlpbnxcIDsKK+WetD5uxINvfFwgOwor5Z27PmNow618XCA7Civpmpc+d8SVaXxcIDsKK+WOoz55xINufFwgOwor5ZufPnjDrG58XCA7CivkuL8+cGnElXxcIDsKK+m8rD55w7J1fFwgOwor6aq6PmfDsnV8XCA7Civpjao+bcOzdXxcIDsKK+i3jz5qaWF8XCA7Civot5Y+emjDrXxcIDsKK+mGqj5sw6FvfFwgOwor57OFPnLFj3V8XCA7Civomos+cnXDrHxcIDsKK+iitz5qacOhfFwgOwor55mNPmJhbnxcIDsKK+mVpz5sw6BufFwgOwor6ZOXPmppw6F8XCA7Civovo8+Y8OydXxcIDsKK+appT56aHV8XCA7Civmoas+c3VvfFwgOwor6aqAPnTDoWl8XCA7Civlq5g+bMOpaXxcIDsKK+aHlD5sxK1ufFwgOwor5oa3PmNoxa18XCA7CivnjJ4+c2jDqHxcIDsKK+W1nT5sxY91fFwgOwor5pGtPnpow618XCA7Civol78+aHXDsnxcIDsKK+iSjD5sacWtfFwgOwor5Z+SPmzDqGl8XCA7CivphJ4+ecOtbnxcIDsKK+mDnD5nw6BvfFwgOwor5YSLPmRhbnxcIDsKK+WNoz55xY91fFwgOwor54i7PnnDoW98XCA7CivngpQ+cXVlfFwgOwor6ZuSPmx1w7J8XCA7CivpnKo+ecOtbnxcIDsKK+ezlz5xacWtfFwgOwor566sPnJ1w7J8XCA7Civnl6Q+Y3XDs3xcIDsKK+mVsj5jaMSDfFwgOwor6ZSfPmt1bnxcIDsKK+mSlT5uw7zMhnxcIDsKK+ecrT5zdWl8XCA7Civml5I+bGnDunxcIDsKK+aXhj5ww6hpfFwgOwor5pewPmfDoG58XCA7CivmqL4+eXXDqHxcIDsKK+aemD5ydcOsfFwgOwor6ZiNPmh1bnxcIDsKK+W/iT5kYW98XCA7Civlu6g+eGnDqHxcIDsKK+W9sz5jaMOsfFwgOwor5bKjPmfFj3V8XCA7Civll74+c8WPdXxcIDsKK+WTmj5kdcWPfFwgOwor5o6KPnDDs3V8XCA7Civmi7Y+esSDbnxcIDsKK+iTjT5zaGl8XCA7Civoiqo+Y2jDrXxcIDsKK+iJuT5jxINvfFwgOwor5Z2pPmdhbnxcIDsKK+mDhz54w7pufFwgOwor6ZqIPndlaXxcIDsKK+iwsz55w6BufFwgOwor6K6gPnnDoW58XCA7CivkvpE+ecOydXxcIDsKK+S6jT5jaMO5fFwgOwor6LqQPmxpw6h8XCA7Civoua8+ZsOhbnxcIDsKK+i4rD56aMOsfFwgOwor57OBPnNhbnxcIDsKK+evmj5mxJVpfFwgOwor56+MPmjDs3V8XCA7Civom7E+amnDoXxcIDsKK+ijsD5kdW98XCA7CivplZk+bHXDs3xcIDsKK+mUhz50acSVfFwgOwor6ZK9PmTDoG58XCA7CivpkqM+YsSDbnxcIDsKK+egmD5kw7lufFwgOwor56CXPmNoZXxcIDsKK+eGmD5saXV8XCA7Civog5k+enXDsnxcIDsKK+avsz5jdcOsfFwgOwor5qiXPmNodXxcIDsKK+afsD5uw6BpfFwgOwor546iPmJpbnxcIDsKK+e8pz5sw6lpfFwgOwor57uQPmTDoGl8XCA7Civnu4E+eGnDqHxcIDsKK+a9hj5waWV8XCA7CivmuoY+bMOzdXxcIDsKK+mYgz5rxa1ufFwgOwor5bSDPmzDoWl8XCA7Civlmbs+c8SBaXxcIDsKK+aSmT56xa1ufFwgOwor6JS4PmRvdXxcIDsKK+iPoT5ow6BufFwgOwor6YOTPnnDuW58XCA7Civpmac+bmnDqHxcIDsKK+ivlD5sxJVpfFwgOwor6b6gPnl1w6h8XCA7Civlgb4+ZsOobnxcIDsKK+WJgD5rxINpfFwgOwor5Y2uPnpoaXxcIDsKK+mSoT5iw6hpfFwgOwor6auhPmt1bnxcIDsKK+mznD5qdcOpfFwgOwor6byNPnR1w7N8XCA7CivouYA+ZGnDqXxcIDsKK+ierT5jaGl8XCA7CivonaQ+cWnDunxcIDsKK+idoz55w7N1fFwgOwor6JqnPmppw6h8XCA7Civombo+aHVpfFwgOwor6KW7PnDDoG58XCA7CivopJk+YsOoaXxcIDsKK+eqqD54dW58XCA7CivplI4+a2FpfFwgOwor6ZOIPnNow6x8XCA7CivpkpQ+bcOpbnxcIDsKK+egiT5odcOyfFwgOwor54W6PnR1w6x8XCA7CivmoLI+a8SDb3xcIDsKK+afnT50dcOyfFwgOwor55S+PnphaXxcIDsKK+a1vD5txJVpfFwgOwor5ZSRPnp1w7J8XCA7CivolYg+eMO5bnxcIDsKK+iPuD55YW58XCA7Civln60+ZMOgaXxcIDsKK+WfvT5zw6BvfFwgOwor5Z+0Pnpow618XCA7Civlnbw+Y2jDqHxcIDsKK+WKoj5tw6BpfFwgOwor6YOPPmTDsnV8XCA7Civor5Y+Z3XDoHxcIDsKK+iggz5sdcWPfFwgOwor5Y6NPnNow6h8XCA7CivprI8+aml1fFwgOwor6au5PnhpdXxcIDsKK+mysT5mZWl8XCA7Civpsqk+d8SDbnxcIDsKK+mykj5qacOpfFwgOwor6KeWPmp1w6l8XCA7CivosoU+eGl1fFwgOwor6LqePnhpw6h8XCA7CivphqI+aMSDaXxcIDsKK+mGhT5wZWl8XCA7CivoiYk+d8SVaXxcIDsKK+iIsz56aMO6fFwgOwor562YPmvDsnV8XCA7CivnrLE+Z8WPdXxcIDsKK+e8tj5mxY91fFwgOwor6J+qPmh1w6x8XCA7Civon4o+bcOhb3xcIDsKK+iekz5xw61ufFwgOwor6Jy+Pmd1xY98XCA7CivomrA+ecOzdXxcIDsKK+iBgz5kYW58XCA7Civnk54+ZGnDqXxcIDsKK+mUnj5rdcSDfFwgOwor6ZOfPnlpbnxcIDsKK+mTlT55xY91fFwgOwor556APm3DoG98XCA7CivnnLU+Y2hpfFwgOwor5oadPmR1w6x8XCA7CivniJ0+anXDqXxcIDsKK+eGsz5tw6BufFwgOwor54STPmjDoW58XCA7CivmrrM+c2h1fFwgOwor6IWnPnNow7l8XCA7Civog40+Z3VhfFwgOwor54mWPnnFj3V8XCA7CivotYY+asOsbnxcIDsKK+aYtD5txINvfFwgOwor5pidPnrEg258XCA7CivngoU+Z3XDrHxcIDsKK+eTvz5wxY91fFwgOwor5qG3Pmp1w6l8XCA7Civmn70+anXDqXxcIDsKK+afmT54acOhfFwgOwor57yRPmdvdXxcIDsKK+mpuj56b3V8XCA7CivlvZg+emjDrHxcIDsKK+mBmD5nw7J1fFwgOwor6ZqzPmh1aXxcIDsKK+W7kT5qxK1ufFwgOwor5bq5PnR1xY98XCA7CivpppM+c8SDbnxcIDsKK+eLgz5uacWtfFwgOwor6LGzPmJpbnxcIDsKK+W0nj5ndW98XCA7CivllLw+c2jDoHxcIDsKK+WTsz56aGF8XCA7CivmkYU+aml1fFwgOwor5o+yPnNow6l8XCA7CivljI8+cMOhb3xcIDsKK+iYqT5mw6FufFwgOwor6JeBPmfEg298XCA7Civojaw+bcSDaXxcIDsKK+iNqT5qw6xufFwgOwor6IybPmfDqG58XCA7CivojIw+Y2jDrXxcIDsKK+iJvz5uxINpfFwgOwor5Z6yPmvEg2l8XCA7CivlnqQ+ZGnDqXxcIDsKK+mClz5ow6FufFwgOwor6ZmUPmdhaXxcIDsKK+WNuj5qxK1ufFwgOwor5L6UPm3Ds3V8XCA7CivliL8+Z3XDrHxcIDsKK+m8oj5mw6lufFwgOwor6auMPmLDrG58XCA7Civps5g+bcStbnxcIDsKK+myvT5kacOpfFwgOwor6bKUPnfElWl8XCA7CivpspA+dMOhaXxcIDsKK+m+hT5ww6FvfFwgOwor6KevPnpow6x8XCA7CivphZA+Z2FufFwgOwor57W3Pnpow618XCA7Civns4c+aMOzdXxcIDsKK+iJmj5jw6FvfFwgOwor57CLPmd1xK18XCA7Civnr7w+ZG91fFwgOwor6J6oPm3Eg258XCA7Civom5E+bcOzdXxcIDsKK+ibnj5rdcOyfFwgOwor6JuyPnLDoW98XCA7Civomro+csOhbnxcIDsKK+ijiT5rw6hufFwgOwor6KK8Pmx1w7J8XCA7CivnmJU+amnEg3xcIDsKK+eWsz5nYW58XCA7CivplaQ+bMOhbnxcIDsKK+mVmD5tw6BufFwgOwor6ZWEPmbDqGl8XCA7Civpk7k+bMOhb3xcIDsKK+mShj5xacO6fFwgOwor572oPnnEg258XCA7Civno5k+Z8WtbnxcIDsKK+ehhz5uw6FvfFwgOwor56CpPmbDqGl8XCA7Civmgqs+cXXDqHxcIDsKK+eCsT50w6FpfFwgOwor54K7Pmx1w7J8XCA7CivohqY+bMOsbnxcIDsKK+iGqj56aMOgfFwgOwor6ISePmN1xY98XCA7Civmr7k+c2h1fFwgOwor6LWHPnFpw7p8XCA7Civovbo+ecOhb3xcIDsKK+i9tT5kacOpfFwgOwor5qqrPmNow6F8XCA7Civmpo0+eGnDqHxcIDsKK+amgD5wxK1ufFwgOwor5qO8PmbDqW58XCA7CivmoJ0+Z3VhfFwgOwor5qCzPmzEg298XCA7CivmoIo+bMOhb3xcIDsKK+e7sj5nxa1ufFwgOwor5aq4PmNoaXxcIDsKK+WuhD5ndcStfFwgOwor5rykPmdhbnxcIDsKK+a7oD5zaMOofFwgOwor6ZiMPnfDqW58XCA7Civluos+Z3XErXxcIDsKK+mmhz5jaGF8XCA7CivppaM+c2jDrXxcIDsKK+Wkgj5jaMWtfFwgOwor542sPnhpw6h8XCA7CivltKY+eWFufFwgOwor5ZqGPmhhb3xcIDsKK+eUmT5kw6BpfFwgOwor5pKWPmjDoG58XCA7Civolrk+dMOhaXxcIDsKK+iWpD54acOofFwgOwor6JCPPmTDoG58XCA7CivojrA+a8SDbnxcIDsKK+iMhj5txINvfFwgOwor5aCgPmjDsnV8XCA7Civln5g+c2jDrXxcIDsKK+mDvj55xINufFwgOwor6YOEPnF1w6h8XCA7Civljak+amnDqXxcIDsKK+iwrj56w6hufFwgOwor6LCHPnN1w6x8XCA7Civlg6Y+amnDuXxcIDsKK+WMpj5ndcStfFwgOwor5LmHPnpow6l8XCA7CivphZ4+dMOgaXxcIDsKK+m+pD54acOpfFwgOwor6b6jPmRvdXxcIDsKK+m+nj5iaWV8XCA7Civpvp0+anVufFwgOwor6b6cPmd1aXxcIDsKK+m+lT5rYW58XCA7CivpvpE+ecSDbnxcIDsKK+m+gj5rxJVufFwgOwor6b29PmrDrG58XCA7Civpvbw+Y2jFrXxcIDsKK+m9uj56b3V8XCA7CivpvbM+bsSVbnxcIDsKK+m9sD5jdcOyfFwgOwor6b2tPmNoxa18XCA7Civpvas+a8WtbnxcIDsKK+m9qT55xINvfFwgOwor6b2oPmppw7l8XCA7Civpvac+bmnDqHxcIDsKK+m9pj5rxJVufFwgOwor6b2lPnhpw6h8XCA7CivpvaM+Y2h1fFwgOwor6b2dPmNoaXxcIDsKK+m9mj5jdcOyfFwgOwor6b2ZPnDDoW98XCA7CivpvZg+eGnDqHxcIDsKK+m9lz5rxJVufFwgOwor6b2SPmNoxK18XCA7CivpvYc+emhhfFwgOwor6b2FPnhpw7l8XCA7CivpvYE+aG91fFwgOwor6by9PnFpw7p8XCA7CivpvLw+ecSDb3xcIDsKK+m8uj5sw6lpfFwgOwor6by4PmhvdXxcIDsKK+m8tD55xINufFwgOwor6byyPmjDum58XCA7CivpvK0+c2jDrXxcIDsKK+m8qz5zaMOtfFwgOwor6bynPnR1w7N8XCA7CivpvKQ+d8OpbnxcIDsKK+m8oz5mw6hpfFwgOwor6byhPnNoxa18XCA7CivpvJs+Z2FvfFwgOwor6byXPnTDoW98XCA7CivpvJY+ZsOpbnxcIDsKK+m8iT50dcOzfFwgOwor6byIPmJpZXxcIDsKK+m8hT56aGl8XCA7CivpvIQ+emh1fFwgOwor6bu9Pm3ErW58XCA7Civpu7o+ZsSVbnxcIDsKK+m7uT56aMStfFwgOwor6bu2PnnEg258XCA7Civpu7U+ZMSDbnxcIDsKK+m7tD5tw6lpfFwgOwor6buyPmPEg258XCA7Civpu7E+ZMOgaXxcIDsKK+m7rj5kxINufFwgOwor6butPnlhbnxcIDsKK+m7qz55aW58XCA7Civpu6o+Y8SDbnxcIDsKK+m7pD55xINufFwgOwor6bujPm3ElWl8XCA7Civpu6E+ecSDbnxcIDsKK+m7lT5kYW58XCA7Civpu5I+ZMSDbnxcIDsKK+m7kD5jaGl8XCA7Civpu4g+dMWPdXxcIDsKK+m7hT5qaW58XCA7Civpu4I+ZsOpbnxcIDsKK+m7gT5uZW58XCA7Civpu4A+em91fFwgOwor6bqzPmzDoWl8XCA7CivpurA+bcOzdXxcIDsKK+m6rT5ww6BvfFwgOwor6bqlPm3DoGl8XCA7CivpuqM+ecOhbnxcIDsKK+m6mj5qaWF8XCA7Civpupk+ecOhbnxcIDsKK+m6lT5qdW58XCA7CivpupQ+amnDuXxcIDsKK+m6kD5sw61ufFwgOwor6bqPPmp1bnxcIDsKK+m6jT5sacO6fFwgOwor6bqGPmNow7p8XCA7CivpuoA+eW91fFwgOwor6bm+PmN1w7N8XCA7Civpub0+ecOhbnxcIDsKK+m5uj5jdcOzfFwgOwor6bm2PmppbnxcIDsKK+m5sT5odcOyfFwgOwor6bmgPmxpw7p8XCA7CivpuZs+bcOpaXxcIDsKK+m5jj5iZWl8XCA7CivpuY0+a3VufFwgOwor6bi6PnhpdXxcIDsKK+m4tD54dcOpfFwgOwor6bikPnNoaXxcIDsKK+m4mT55dcOofFwgOwor6biUPmLDoG98XCA7CivpuJM+bMSVaXxcIDsKK+m4kT55dcOofFwgOwor6biMPmh1w7J8XCA7CivpuIU+emjDqXxcIDsKK+m4gT5sdcOzfFwgOwor6biAPnNow7p8XCA7Civpt70+eHXDqXxcIDsKK+m3tz56dW58XCA7Civpt7Y+bcSDaXxcIDsKK+m3sj5qacO5fFwgOwor6bexPmthb3xcIDsKK+m3sD55w6BufFwgOwor6betPmbDoW58XCA7Civpt6o+eWFufFwgOwor6beoPmh1YXxcIDsKK+m3oz55w61ufFwgOwor6beiPmp1w6l8XCA7Civpt5w+bMOzdXxcIDsKK+m3mT56aMOsfFwgOwor6beYPmNow6x8XCA7Civpt5U+ecSDb3xcIDsKK+m3kz56aMOofFwgOwor6beOPmdhb3xcIDsKK+m3hz5rw7J1fFwgOwor6beDPnnDoG58XCA7Civpt4I+ecOgb3xcIDsKK+m2vT5zxa1ufFwgOwor6ba5Pmxpw7p8XCA7Civptrg+cnXDsnxcIDsKK+m2tz54acOgfFwgOwor6ba1PmNow7p8XCA7CivptrM+c2hpfFwgOwor6baoPmTDuW58XCA7CivptqU+bcOpaXxcIDsKK+m2pD55w7lufFwgOwor6baiPmt1bnxcIDsKK+m2oD55xINufFwgOwor6bacPm3DoW98XCA7Civptps+amllfFwgOwor6baWPnFpdXxcIDsKK+m2lD5yw7N1fFwgOwor6baSPmNow6x8XCA7CivptpA+c2jDuXxcIDsKK+m2hj5sw6FpfFwgOwor6bW+Pmt1bnxcIDsKK+m1sj5xdcOofFwgOwor6bWvPmJlaXxcIDsKK+m1rT5kdcOyfFwgOwor6bWoPnNodXxcIDsKK+m1oz5sw6BpfFwgOwor6bWYPmrDuW58XCA7CivptZQ+eMO5bnxcIDsKK+m1kD5qw7lufFwgOwor6bWOPnR1xY98XCA7CivptYo+amnDoXxcIDsKK+m1hT5sdcOyfFwgOwor6bWEPmNoaXxcIDsKK+m1gj54aXV8XCA7CivptYA+csOobnxcIDsKK+m0vj5tw7N1fFwgOwor6bS8Pmx1w7J8XCA7CivptLk+csOpbnxcIDsKK+m0uD56aHV8XCA7CivptLc+bGnDqHxcIDsKK+m0sz55w6BufFwgOwor6bSyPnpoaXxcIDsKK+m0sD5ndWF8XCA7CivptKk+dGnElXxcIDsKK+m0oj55w7J1fFwgOwor6bSgPmTDoG58XCA7CivptJ8+Y2hpfFwgOwor6bSZPnpow6x8XCA7CivptJY+d8OpbnxcIDsKK+m0lT50dcOzfFwgOwor6bSTPm1pw6h8XCA7CivptJA+amlhfFwgOwor6bSNPnfDqW58XCA7CivptIo+amlhfFwgOwor6bSIPnnDoG58XCA7CivptIc+YsSDb3xcIDsKK+m0gz5qdcOpfFwgOwor6bSCPmp1w6h8XCA7CivptIE+anXDqXxcIDsKK+m0gD5mxY91fFwgOwor6bO+PnNoaXxcIDsKK+mzvD53w6lufFwgOwor6bO7PmZlbnxcIDsKK+mzuT5xw61ufFwgOwor6bO3PnpoaXxcIDsKK+mztT5ixINvfFwgOwor6bOyPnNoaXxcIDsKK+mzsT5nYW58XCA7Civps64+aMOgbnxcIDsKK+mzqz55w6BufFwgOwor6bOpPmppdXxcIDsKK+mzpD5kxINvfFwgOwor6bOhPmfEg258XCA7Civps5o+Z3XDrHxcIDsKK+mziz5zYW98XCA7Civps4I+d2VpfFwgOwor6bOBPndlbnxcIDsKK+mzgD5zaMOsfFwgOwor6bK8PmbDqG58XCA7Civpsro+c2hpfFwgOwor6bKwPnpvdXxcIDsKK+myqj5qdW58XCA7Civpspg+aMOydXxcIDsKK+mykz5rxINvfFwgOwor6bKOPmjDsnV8XCA7Civpsoo+emjEg3xcIDsKK+myiT55w7N1fFwgOwor6bKAPnTDum58XCA7Civpsb0+ZGFvfFwgOwor6bG0Pm1pw6h8XCA7CivpsbI+bGnDqHxcIDsKK+mxrz5odcOyfFwgOwor6bGlPmd1w6x8XCA7CivpsaQ+Z8SDbnxcIDsKK+mxoj5zYW98XCA7CivpsaE+esOpaXxcIDsKK+mxnz5ow7J1fFwgOwor6bGdPmbDqG58XCA7CivpsZg+eMO6bnxcIDsKK+mxlz5sw61ufFwgOwor6bGWPmd1w6x8XCA7CivpsZU+ZmFufFwgOwor6bGSPnrDuW58XCA7CivpsY8+eMO6bnxcIDsKK+mxij5qdcOpfFwgOwor6bGJPmJpZXxcIDsKK+mxiD54dcSVfFwgOwor6bGDPnFpdXxcIDsKK+mxgT56aMO6fFwgOwor6bC9PnFpw7p8XCA7CivpsLs+bcOhbnxcIDsKK+mwuj5zYW98XCA7CivpsLU+bcStbnxcIDsKK+mwtD5odWl8XCA7CivpsK8+cnXDsnxcIDsKK+mwrj53ZW58XCA7CivpsKw+Y2FufFwgOwor6bCpPnnDoW98XCA7CivpsKc+ZGnDqXxcIDsKK+mwpD5zaGl8XCA7CivpsKM+c2jDrXxcIDsKK+mwoT5sacO6fFwgOwor6bCdPmjDoG98XCA7CivpsJs+d2VufFwgOwor6bCZPnJ1w7J8XCA7CivpsJY+dHXFj3xcIDsKK+mwlT54acOhfFwgOwor6bCTPnNhaXxcIDsKK+mwjT5xaXV8XCA7CivpsIw+cWnDunxcIDsKK+mwiz55xINufFwgOwor6bCIPmRpw6l8XCA7CivpsIc+cWnDqHxcIDsKK+mwhD53ZWl8XCA7CivpsIM+d2VpfFwgOwor6a+6PnrDqWl8XCA7Civpr7g+aMOzdXxcIDsKK+mvtz5zaMOsfFwgOwor6a+2PmjFrW58XCA7Civpr7Q+c2hpfFwgOwor6a+vPnpow6x8XCA7Civpr6s+em91fFwgOwor6a+mPmppw7l8XCA7Civpr6Q+a3VufFwgOwor6a+hPmZlaXxcIDsKK+mvoD5sw6FpfFwgOwor6a+cPnFpw6h8XCA7Civpr5g+bsSVaXxcIDsKK+mvjD5nw6BvfFwgOwor6a+LPnNoYXxcIDsKK+mvij5zaGF8XCA7Civpr4Q+cWnDunxcIDsKK+mvgD5nxa1ufFwgOwor6a6/Pnpow6l8XCA7Civprr4+bsSVaXxcIDsKK+muvD5xaW58XCA7Civprrs+c2hhfFwgOwor6a62Pmp1bnxcIDsKK+mutT5kdcOzfFwgOwor6a6zPmvEg298XCA7CivprrA+aHXDrXxcIDsKK+murT5ndWl8XCA7Civprqo+d8SVaXxcIDsKK+mupT5sdcOyfFwgOwor6a6kPmxpw6h8XCA7CivprqM+ecOsbnxcIDsKK+muoD53w6lpfFwgOwor6a6cPmjDsnV8XCA7Civprps+c2h1fFwgOwor6a6aPmppw6l8XCA7CivprpM+emjEg3xcIDsKK+mukT5iw6BvfFwgOwor6a6QPnTDoWl8XCA7Civpro4+YmFvfFwgOwor6a6MPmfFrW58XCA7Civproc+d8OoaXxcIDsKK+mugD50dcOzfFwgOwor6a29PmhhbnxcIDsKK+mtuz54acOhfFwgOwor6a23PnnDs3V8XCA7CivprbU+ZsOpbnxcIDsKK+mtrT53xINufFwgOwor6a2sPmbEg258XCA7Civprao+amnDqHxcIDsKK+mtqD50w7pufFwgOwor6a2mPnNoYXxcIDsKK+mtpD5ixINufFwgOwor6a2gPnR1b3xcIDsKK+mtnD5yw6lufFwgOwor6a2bPmRhb3xcIDsKK+mtmD55xINufFwgOwor6a2LPnR1w618XCA7CivprYA+amnDqHxcIDsKK+msvT5tw6hpfFwgOwor6ay5Pmd1aXxcIDsKK+msuD5sacO5fFwgOwor6ay2Pmd1aXxcIDsKK+msrj5qaXV8XCA7CivprK0+ZMOydXxcIDsKK+msrD5kw7J1fFwgOwor6ayrPmjEg258XCA7CivprKo+ZMOydXxcIDsKK+mspz5uw6BvfFwgOwor6aymPmTDsnV8XCA7CivprKU+ZMOydXxcIDsKK+msoj5iw6xufFwgOwor6aybPmxpw6h8XCA7CivprJg+bcOhbnxcIDsKK+mslz5tw6BufFwgOwor6ayWPnNhbnxcIDsKK+msjD5kdcWPfFwgOwor6ayCPmLDrG58XCA7Civpq78+c2hhfFwgOwor6au6Pmd1w6B8XCA7Civpq7M+bcOhb3xcIDsKK+mrsT5ww6BvfFwgOwor6aupPmLDrG58XCA7Civpq6g+a3VufFwgOwor6aunPmTDoG58XCA7Civpq6U+csOhbnxcIDsKK+mrpD54aXV8XCA7Civpq54+esOgb3xcIDsKK+mrnT5sw6BvfFwgOwor6aubPmthb3xcIDsKK+mrmT5nYW98XCA7Civpq5U+YsOsbnxcIDsKK+mrkD5uw6FvfFwgOwor6auPPmzDs3V8XCA7Civpq4Q+c3XErXxcIDsKK+mqvT50dcStfFwgOwor6aq7Pmt1w6B8XCA7CivpqrQ+Y2hpfFwgOwor6aqyPmJhb3xcIDsKK+mqrz5hbmd8XCA7Civpqq0+Z8OgbnxcIDsKK+mqqz53xJVpfFwgOwor6aqqPnfElWl8XCA7Civpqpk+a3XDrXxcIDsKK+mqjj5xaW58XCA7Civpqo0+eGlufFwgOwor6aqDPnlpbnxcIDsKK+mpoD5jaMOtfFwgOwor6amfPnrDsnV8XCA7CivpqZ4+YmlufFwgOwor6amdPnR1b3xcIDsKK+mpmD5sdcOzfFwgOwor6amXPnnDoG58XCA7CivpqZY+dGnElXxcIDsKK+mplD50w6FufFwgOwor6amSPnR1w7N8XCA7CivpqZE+bGnDunxcIDsKK+mpjj5sw61ufFwgOwor6amKPmh1w6F8XCA7CivpqYc+emjDrHxcIDsKK+mpgj5jYW58XCA7CivpqL4+bHXDs3xcIDsKK+motz5zYW98XCA7CivpqLY+em91fFwgOwor6ai0PnnDoG58XCA7CivpqLI+Y8SDb3xcIDsKK+morj5sacO6fFwgOwor6aitPnpow6x8XCA7CivpqKk+a3XDrHxcIDsKK+moqD50dcOzfFwgOwor6ainPmd1YXxcIDsKK+mopT5yw7N1fFwgOwor6aikPmt1w618XCA7CivpqKI+eGnDoXxcIDsKK+monz5ndWl8XCA7CivpqJ4+aHXDsnxcIDsKK+momz5mZWl8XCA7CivpqJU+ecSDb3xcIDsKK+molD5qacOpfFwgOwor6aiTPnnEg258XCA7CivpqJI+c2FvfFwgOwor6aiRPmZlaXxcIDsKK+mokD55w6BufFwgOwor6aiLPmzDoWl8XCA7CivpqIo+dMOhb3xcIDsKK+moiT5rdW58XCA7CivpqIc+c2jElXxcIDsKK+mnvz5qw7lufFwgOwor6ae+PnR1w6x8XCA7Civpp7s+aMOgbnxcIDsKK+mnuD5xaW58XCA7Civpp7U+bGnDunxcIDsKK+mntD54acOofFwgOwor6aezPmTDoG58XCA7Civpp7E+bHXDsnxcIDsKK+mnsD55aW58XCA7Civpp68+emh1fFwgOwor6aetPmjDoGl8XCA7Civpp6g+eMO6bnxcIDsKK+mnpj5qacOgfFwgOwor6aekPnpow6x8XCA7Civpp6M+dMOhb3xcIDsKK+mnoD5sacO6fFwgOwor6aeePnR1w7N8XCA7Civpp50+dHXDs3xcIDsKK+mnmz5zaMStfFwgOwor6aeYPnTDoWl8XCA7Civpp5Y+ZMOgaXxcIDsKK+mnlT5qacOgfFwgOwor6aeQPnpow7l8XCA7Civpp4I+YsSDb3xcIDsKK+mngD55w7N1fFwgOwor6aa+PmTDoG58XCA7Civppr0+emjDrXxcIDsKK+mmvD53w6lufFwgOwor6aa7PnnErW58XCA7Civpprg+eMOsbnxcIDsKK+mmtz5ww6hpfFwgOwor6aa2PnpoaXxcIDsKK+mmtT56aMO5fFwgOwor6aa0PnjDum58XCA7CivpprM+Y2jDrXxcIDsKK+mmsj50dW98XCA7CivpprE+ZHXDsnxcIDsKK+mmsD5kw6BpfFwgOwor6aavPmjDoW58XCA7Civppqo+YmlufFwgOwor6aapPmbDqW58XCA7Civppqc+d2VufFwgOwor6aajPnnEg258XCA7CivppqE+ZmVpfFwgOwor6aagPmhhbnxcIDsKK+mmmj5mw6lufFwgOwor6aaYPmd1w7N8XCA7CivppoM+Z3XFj3xcIDsKK+mmgj5qw7lufFwgOwor6aW+PmTDsnV8XCA7Civppbg+amnDoXxcIDsKK+mlsz5kdcOyfFwgOwor6aWmPnR1b3xcIDsKK+mloD5sdcOzfFwgOwor6aWcPnnDoG58XCA7CivppZo+aMOgaXxcIDsKK+mlmT5mZW58XCA7CivppZY+aHXDrHxcIDsKK+mlkj5yw6FvfFwgOwor6aWPPmTDoG58XCA7CivppY4+Y2jDrHxcIDsKK+mliz5rdcOsfFwgOwor6aWKPnPEg258XCA7CivppYk+asStbnxcIDsKK+mliD54aXV8XCA7CivppYU+bcOhbnxcIDsKK+mlgj55w7pufFwgOwor6aWAPnTDoW98XCA7CivppL8+c291fFwgOwor6aS+Pmxpw7l8XCA7CivppL0+a3XDrHxcIDsKK+mkuz5nYW98XCA7CivppLc+Y2hhfFwgOwor6aS1PnfDqGl8XCA7CivppLQ+ZmVufFwgOwor6aSxPmjDs3V8XCA7CivppK8+aHXDrHxcIDsKK+mkqz5ow7pufFwgOwor6aSnPnfDqGl8XCA7CivppKU+ZsSVaXxcIDsKK+mkpD50w6FufFwgOwor6aSdPnNow6x8XCA7CivppJw+Z3XFj3xcIDsKK+mkmz5ow7pufFwgOwor6aSaPnnDoW98XCA7CivppJk+a3VufFwgOwor6aSWPmTDsnV8XCA7CivppJU+asO5bnxcIDsKK+mkkj5uxJVpfFwgOwor6aSLPnPDuW58XCA7CivppIY+ecOhb3xcIDsKK+mkgT5yw6hufFwgOwor6aSAPmjDoGl8XCA7Civpo78+ZHXDsnxcIDsKK+mjvj5zaMOsfFwgOwor6aO9PmLEg298XCA7Civpo7s+dGnDqHxcIDsKK+mjuT5sacWtfFwgOwor6aO4PnRhb3xcIDsKK+mjtz5qacSVfFwgOwor6aOyPnnErW58XCA7Civpo7E+c3VufFwgOwor6aOwPmbDoG58XCA7Civpo68+ZsOgbnxcIDsKK+mjrj55xK1ufFwgOwor6aOtPmNow6x8XCA7Civpo6o+csOobnxcIDsKK+mjqT50w7pufFwgOwor6aOlPnR1b3xcIDsKK+mjoT5jYW58XCA7Civpo6A+c2jDrXxcIDsKK+mjnT5mZWl8XCA7Civpo5w+ZmFufFwgOwor6aObPmZlaXxcIDsKK+mjlz5sacO6fFwgOwor6aOWPnnDoW98XCA7Civpo4U+bGnDunxcIDsKK+mjgD5sacO6fFwgOwor6aK/PmbDoW58XCA7Civpor4+c2FvfFwgOwor6aK9PmvEg2l8XCA7Civporw+c291fFwgOwor6aK7PnnDoW98XCA7Civpork+d8SVaXxcIDsKK+misz5ndWF8XCA7CivporI+bGnDqHxcIDsKK+misT50w6FpfFwgOwor6aKsPnhpYXxcIDsKK+mioz5sw6hpfFwgOwor6aKZPm1hbnxcIDsKK+mikj5odcOsfFwgOwor6aGzPm5pw6h8XCA7CivpobI+bMSDbnxcIDsKK+mhsD5ww61ufFwgOwor6aGuPmJpbnxcIDsKK+mhrD5rdcStfFwgOwor6aGqPmh1aXxcIDsKK+mhqD54w7lufFwgOwor6aGlPmjDoG98XCA7CivpoaQ+cWlufFwgOwor6aGiPm1hbnxcIDsKK+mhoT5tYW58XCA7CivpoZ4+bMOoaXxcIDsKK+mhlj54w6xufFwgOwor6aGUPnnDoW58XCA7CivpoZE+a8SDbnxcIDsKK+mhkD5ow7pufFwgOwor6aGPPnnDoW58XCA7CivpoYs+c2FpfFwgOwor6aGJPnFpbnxcIDsKK+mhhz5jdcOsfFwgOwor6aGEPmjDoG58XCA7CivpoYM+ecOhbnxcIDsKK+mhgj5sw6BpfFwgOwor6aC9PnR1w618XCA7CivpoLs+cMOtbnxcIDsKK+mguj50dcOtfFwgOwor6aC5PnR1w618XCA7CivpoLc+aMOgbnxcIDsKK+mgtT5qdW58XCA7CivpoLA+amnDoXxcIDsKK+mgrz5rdcOtfFwgOwor6aCuPmh1w6x8XCA7CivpoK0+dMOzdXxcIDsKK+mgrD5qacOhfFwgOwor6aCqPmzDqGl8XCA7CivpoKc+ZHVpfFwgOwor6aCiPmd1YXxcIDsKK+mgoT54acOpfFwgOwor6aCgPnfElWl8XCA7CivpoJ0+amnDoXxcIDsKK+mgmz5sxJVpfFwgOwor6aCWPnDDoG58XCA7CivpoJU+ZGFufFwgOwor6aCTPmTDuW58XCA7CivpoJI+YmFufFwgOwor6aCRPnfDoW58XCA7CivpoI0+a3XErXxcIDsKK+mghz5oYW58XCA7CivpoIQ+cWnDunxcIDsKK+mfvj5odcOyfFwgOwor6Z+9PnlpbnxcIDsKK+mfuz55w7lufFwgOwor6Z+wPnhpw6h8XCA7Civpn64+amnFrXxcIDsKK+mfoj5odcOsfFwgOwor6Z+hPnfElWl8XCA7Civpn54+ecO5bnxcIDsKK+mfnT5nb3V8XCA7Civpn5w+dGFvfFwgOwor6Z+bPmLDqGl8XCA7Civpn5k+d8SVaXxcIDsKK+mfmD5zaMOofFwgOwor6Z+XPnjDuW58XCA7Civpn5Y+csOzdXxcIDsKK+mfkz5ow6FufFwgOwor6Z+RPnfElWl8XCA7Civpn44+bcOoaXxcIDsKK+mfjD5yw6hufFwgOwor6Z+LPnfDqWl8XCA7Civpn4o+bMOhbnxcIDsKK+mevj54dWV8XCA7Civpnrw+Z3XDrHxcIDsKK+meuz5sw7N1fFwgOwor6Z65Pmt1w7J8XCA7CivpnrY+cMOhbnxcIDsKK+metT5sw7zMhnxcIDsKK+metD5iw6hpfFwgOwor6Z6yPmdvdXxcIDsKK+mesT50YW98XCA7Civpnqk+bcOzdXxcIDsKK+mepz5xaXV8XCA7CivpnqY+cWl1fFwgOwor6Z6iPnhpw6h8XCA7CivpnqE+ZW5nfFwgOwor6Z6WPnN1aXxcIDsKK+melD53xINufFwgOwor6Z6OPmjDqW58XCA7Civpnok+dMOhb3xcIDsKK+meiD5qacOhfFwgOwor6Z6EPnDDoW98XCA7CivpnoI+YsOgb3xcIDsKK+megT50dcOzfFwgOwor6Z6APnTDoW98XCA7Civpnb8+YsOoaXxcIDsKK+mdvT5iw6BufFwgOwor6Z23PnnErW58XCA7CivpnbU+bmnFrXxcIDsKK+mdsj5xw61ufFwgOwor6Z2xPnLDqG58XCA7Civpna0+csOobnxcIDsKK+mdqz5jaGF8XCA7Civpnac+aHXDrHxcIDsKK+mdpD5ww6BvfFwgOwor6Z2fPmZlaXxcIDsKK+mdjD5ixINvfFwgOwor6Z2GPmTDoGl8XCA7CivpnYU+ZsOoaXxcIDsKK+mdgz5odcOyfFwgOwor6Z2BPmzDqWl8XCA7CivpnYA+bMOoaXxcIDsKK+mcuj53w6lpfFwgOwor6Zy0PmTDoGl8XCA7CivpnK4+ZMOgbnxcIDsKK+mcqT5odcOyfFwgOwor6ZyoPnfDqGl8XCA7CivpnKY+YmlufFwgOwor6ZykPmxpw7l8XCA7CivpnKM+ecWtbnxcIDsKK+mcoD55aW58XCA7CivpnJU+dMO6bnxcIDsKK+mckj55aW58XCA7CivpnIU+emjDoXxcIDsKK+mbtT7Eg25nfFwgOwor6ZuyPnnDum58XCA7Civpm7A+ZmVufFwgOwor6ZusPmbFj3V8XCA7Civpm6Q+eHXDqXxcIDsKK+mboz5uw6FufFwgOwor6ZuhPmxpw7l8XCA7Civpm5s+Y2jDunxcIDsKK+mbmD5odcOyfFwgOwor6ZuXPmjDoG58XCA7Civpm5Y+c3VpfFwgOwor6ZuLPmrDuW58XCA7Civpm4o+Z8OydXxcIDsKK+mbgj5xw61ufFwgOwor6Zq7PnpoaXxcIDsKK+matz5jdWl8XCA7CivpmrI+ZMOgaXxcIDsKK+masT55xK1ufFwgOwor6ZqvPmTEg298XCA7Civpmqs+ZmVufFwgOwor6ZqoPnN1w618XCA7CivpmqQ+dHXDrXxcIDsKK+maoz5sw61ufFwgOwor6ZqiPnLDoG98XCA7CivpmqA+ecStbnxcIDsKK+manT5kxINvfFwgOwor6ZqWPmd1aXxcIDsKK+malT55xa1ufFwgOwor6ZqTPmh1aXxcIDsKK+makT5nYWl8XCA7Civpmo4+amllfFwgOwor6ZqKPmR1w6x8XCA7Civpmok+bmnDqHxcIDsKK+mahz5zdcOsfFwgOwor6ZqCPnlpbnxcIDsKK+magT55w6BufFwgOwor6Zm8Pnpoxa18XCA7Civpmbs+eWlufFwgOwor6Zm4Pmxpw7l8XCA7CivpmbA+eWlufFwgOwor6ZmvPmzDum58XCA7Civpmaw+em91fFwgOwor6ZmrPnDDqWl8XCA7CivpmZY+eMO5bnxcIDsKK+mZkj5ndcStfFwgOwor6ZmPPmR1w7J8XCA7CivpmY4+c2h1fFwgOwor6ZmKPmR1w7J8XCA7CivpmYE+dHXDs3xcIDsKK+mYvD56dcOyfFwgOwor6ZivPnpoxK18XCA7CivpmKs+cMOpaXxcIDsKK+mYqT5wZWl8XCA7CivpmKc+ZMWPdXxcIDsKK+mYpD50dcOzfFwgOwor6ZigPnfDqGl8XCA7CivpmJM+aHXDrHxcIDsKK+mXvz5rxINpfFwgOwor6ZesPmjDoG58XCA7Civpl6Y+d8OpbnxcIDsKK+mXoD5odcOsfFwgOwor6ZeePmvDoG58XCA7Civpl5o+a3VpfFwgOwor6ZeYPmTDsnV8XCA7Civpl5U+cXVlfFwgOwor6ZeTPmvEg2l8XCA7Civpl5E+bmnDqHxcIDsKK+mXjD5sw6FufFwgOwor6ZeLPnF1w6h8XCA7Civpl4o+a3XDsnxcIDsKK+mXiT55aW58XCA7Civpl4g+d8OpaXxcIDsKK+mXhj5ixINufFwgOwor6ZeFPnfDqW58XCA7Civpl4Q+ecSDb3xcIDsKK+mXgT5iYW98XCA7Civplr8+d8OpbnxcIDsKK+mWvT5odW58XCA7Civplrs+ecOhbnxcIDsKK+mWuj53w6lufFwgOwor6Za5PnlhbnxcIDsKK+mWuD5rxa1ufFwgOwor6Za3PnNoYXxcIDsKK+mWtT5sw6xufFwgOwor6ZayPnl1w6h8XCA7CivplrE+eXXDqHxcIDsKK+mWrz5zaMOgfFwgOwor6ZarPmvFrW58XCA7Civplqk+bcStbnxcIDsKK+mWqD5ndWl8XCA7CivplqY+Y2jDuXxcIDsKK+mWoD5yw7lufFwgOwor6ZacPnhpxIN8XCA7Civplpg+emjDoXxcIDsKK+mWlz5kw7J1fFwgOwor6ZaVPnhpYXxcIDsKK+mWlD5txK1ufFwgOwor6ZaQPnPDoG58XCA7Civplo8+csO5bnxcIDsKK+mWiz5rYWl8XCA7Civplog+aMOgbnxcIDsKK+mWhj55w6FufFwgOwor6ZaFPm3DqW58XCA7CivploQ+aHXDsnxcIDsKK+mWgD5tw6lufFwgOwor6ZW7PmRpw6l8XCA7Civplbk+amnFrXxcIDsKK+mVpj5kdcOsfFwgOwor6ZWhPnTDoW58XCA7CivplaA+bGnDunxcIDsKK+mUvD5zb3V8XCA7CivplKw+dMOhbnxcIDsKK+mUqz5ww6lpfFwgOwor6ZSqPmh1b3xcIDsKK+mUpz56aMOsfFwgOwor6ZSYPm51w7J8XCA7CivplI0+bGnFrXxcIDsKK+mUij5sw7zDqHxcIDsKK+mUhj5nw6BvfFwgOwor6ZO8PmzDoWl8XCA7Civpk6o+amnDoXxcIDsKK+mTpT5kaXV8XCA7Civpk5o+emjDrHxcIDsKK+mTkT5sxINvfFwgOwor6ZOHPmLDoG98XCA7Civpkqw+aHXDs3xcIDsKK+mSgz5zaMWtfFwgOwor6ZKBPmp1w6l8XCA7CivpkoA+bmnDqHxcIDsKK+mRvz56w6FvfFwgOwor6ZG8Pmx1w7N8XCA7Civpkbs+cMOgbnxcIDsKK+mRuD5sxJVpfFwgOwor6ZG3Pm5pw6h8XCA7CivpkbM+aHVpfFwgOwor6ZGwPnnDoG98XCA7Civpka0+bMOhbnxcIDsKK+mRpD5iw6BvfFwgOwor6ZGYPmzDqWl8XCA7CivpkZY+bWnDqHxcIDsKK+mRlT56aMOsfFwgOwor6ZGUPmNoxIN8XCA7CivpkY4+a3XDrHxcIDsKK+mRjD5iaW58XCA7CivpkYo+aHXDsnxcIDsKK+mRiD5uaWV8XCA7CivpkYQ+emjDuXxcIDsKK+mRgj54w7lufFwgOwor6ZC+PmLDqGl8XCA7CivpkLw+YmVufFwgOwor6ZC5Pmd1xY98XCA7CivpkLg+ZHXDs3xcIDsKK+mQtT50acSVfFwgOwor6ZCzPmzDqWl8XCA7CivpkKw+aHXDrHxcIDsKK+mQqT5zdcOsfFwgOwor6ZCoPmbDqGl8XCA7CivpkKY+a2FpfFwgOwor6ZChPnRpxJV8XCA7CivpkJ4+bsOydXxcIDsKK+mQnT5qdcOpfFwgOwor6ZCcPmR1w6x8XCA7CivpkJQ+dMOhbnxcIDsKK+mQkz5kdW58XCA7CivpkJI+bMOhb3xcIDsKK+mQkT5kdWl8XCA7CivpkI8+enVufFwgOwor6ZCNPmp1w6l8XCA7CivpkIc+ZsOhbnxcIDsKK+mQhj5zdcOsfFwgOwor6ZCFPnBpxJV8XCA7CivpkIM+bsOhb3xcIDsKK+mQgj5sacO5fFwgOwor6ZCBPmxpw7p8XCA7CivpkIA+a3XDrHxcIDsKK+mPvj5zxINufFwgOwor6Y+9Pnhpw7l8XCA7Civpj7w+c3XFj3xcIDsKK+mPuz5sw61ufFwgOwor6Y+4Pmh1w6x8XCA7Civpj7U+aHXDoXxcIDsKK+mPrD54acOgfFwgOwor6Y+qPmPDoW98XCA7Civpj6g+esOgbnxcIDsKK+mPpD5sw7J1fFwgOwor6Y+jPnNow7l8XCA7Civpj50+bcOgbnxcIDsKK+mPmT5jdWl8XCA7Civpj5A+bGnDunxcIDsKK+mPjz53w6hpfFwgOwor6Y+NPmx1w7N8XCA7Civpj4U+eGl1fFwgOwor6Y+BPnN1xY98XCA7Civpjrs+c3XFj3xcIDsKK+mOtT5qaWF8XCA7CivpjrM+bmnDqHxcIDsKK+mOrD5nxINvfFwgOwor6Y6rPnfDoG58XCA7Civpjqk+c2hhfFwgOwor6Y6oPnPFrW58XCA7Civpjqc+a8SDaXxcIDsKK+mOpj5sacO6fFwgOwor6Y6cPnDDoW58XCA7CivpjpY+c3XFj3xcIDsKK+mOkj5uw7J1fFwgOwor6Y6NPnN1xY98XCA7Civpjos+eGnDoXxcIDsKK+mOhz5tw6lpfFwgOwor6Y6FPmppw6h8XCA7CivpjoM+cMOgaXxcIDsKK+mOgj5txJVpfFwgOwor6Y6APnhpdXxcIDsKK+mNuz5qacOpfFwgOwor6Y26PnpoxJV8XCA7CivpjbI+bcOtbnxcIDsKK+mNrj50b3V8XCA7Civpja0+aMOzdXxcIDsKK+mNqD5rdcOtfFwgOwor6Y2mPnNow6l8XCA7CivpjaU+cWnDqHxcIDsKK+mNpD5jaMOhfFwgOwor6Y2hPnfElWl8XCA7CivpjZ0+Y2hhfFwgOwor6Y2cPnhpYXxcIDsKK+mNmD56aMOhfFwgOwor6Y2VPnLDs3V8XCA7CivpjZI+csOzdXxcIDsKK+mNjz53w6lpfFwgOwor6Y2LPmd1b3xcIDsKK+mNiD5jaMOtfFwgOwor6Y2HPmvEg2l8XCA7CivpjYY+bcOpbnxcIDsKK+mNhD5qaWV8XCA7CivpjYM+aHVvfFwgOwor6Yy9PnfEg258XCA7CivpjLw+bsOgaXxcIDsKK+mMuT5rxJVufFwgOwor6Yy4PmzDoWl8XCA7CivpjLU+aHVhfFwgOwor6YyvPmN1w7J8XCA7CivpjK0+dMOhb3xcIDsKK+mMqD5tw6FvfFwgOwor6YymPmrErW58XCA7CivpjJ8+dMOhbnxcIDsKK+mMnD5uaWV8XCA7CivpjJs+YmVufFwgOwor6YyXPnfDqGl8XCA7CivpjJU+a3VufFwgOwor6YyTPmfFrW58XCA7CivpjJE+bMOoaXxcIDsKK+mMij56dcOsfFwgOwor6YyJPm3DrW58XCA7CivpjIc+cMOzdXxcIDsKK+mMgz5iZWl8XCA7CivpjIA+bMO6bnxcIDsKK+mLvj50w6FvfFwgOwor6Yu3Pnp1w6x8XCA7Civpi7Y+bGnFrXxcIDsKK+mLsz56aMO5fFwgOwor6YuvPmfDoG98XCA7Civpi60+cnXDrHxcIDsKK+mLrD5ww6BufFwgOwor6YurPmR1w6x8XCA7Civpi6Q+Y2jDunxcIDsKK+mLoz54acOpfFwgOwor6YuiPmzDvMOofFwgOwor6YuhPmjDoW58XCA7Civpi5o+asOsbnxcIDsKK+mLlT56aMOsfFwgOwor6YuUPnfEg258XCA7Civpi48+amnDoXxcIDsKK+mLjj5ow6BufFwgOwor6YuHPmLDqGl8XCA7Civpi4Y+ecO6bnxcIDsKK+mLhT54aW58XCA7Civpi4Q+d8SDbnxcIDsKK+mLgj5tw6lpfFwgOwor6YuAPmTDsnV8XCA7Civpir0+Z3VhfFwgOwor6Yq8PmN1w7J8XCA7Civpirk+eGnDuXxcIDsKK+mKuD56aMOpfFwgOwor6Yq2PnFpw7p8XCA7CivpirQ+c2jDrHxcIDsKK+mKsz5ydcOsfFwgOwor6YqyPmjDoG58XCA7Civpiqw+a8Ogb3xcIDsKK+mKqj55xY91fFwgOwor6YqpPmRpdXxcIDsKK+mKpj55aW58XCA7CivpiqA+bMSDb3xcIDsKK+mKnz5jaGF8XCA7Civpip4+anVufFwgOwor6YqdPnhpdXxcIDsKK+mKmT5rdcSDfFwgOwor6YqXPmjDs3V8XCA7CivpipY+emh1fFwgOwor6YqVPnRpxJV8XCA7CivpipA+Y2jDrHxcIDsKK+mKjT56aMOsfFwgOwor6YqMPnrDuW58XCA7Civpios+csOpbnxcIDsKK+mKhz5sw6hpfFwgOwor6YqBPmp1bnxcIDsKK+mKgD55w61ufFwgOwor6Ym+Pm3Ds3V8XCA7Civpib0+c2jDrHxcIDsKK+mJuT5jaMStfFwgOwor6YmzPmLElWl8XCA7Civpia0+ZMOgbnxcIDsKK+mJqz5qaWF8XCA7Civpiak+bmllfFwgOwor6YmlPnNow7l8XCA7CivpiaQ+Z291fFwgOwor6YmjPmppw6l8XCA7CivpiaE+YsOgbnxcIDsKK+mJnz5nw7J1fFwgOwor6YmePnl1w6h8XCA7CivpiZo+bcSDb3xcIDsKK+mJkz5jaMOsfFwgOwor6YmSPnpow7l8XCA7CivpiY8+Y2jDunxcIDsKK+mJiz5iw6BvfFwgOwor6YmJPnDDoW98XCA7CivpiYc+c2hpfFwgOwor6YmEPnRpxJV8XCA7CivpiYM+c2jDrHxcIDsKK+mJgj5zaMStfFwgOwor6YmBPnNow6l8XCA7CivpiYA+amnEg3xcIDsKK+mIvj55w7N1fFwgOwor6Yi8Pnp1w7N8XCA7CivpiLE+bcOtbnxcIDsKK+mIsD5zaMOsfFwgOwor6YisPmR1w7N8XCA7CivpiKY+dMOgaXxcIDsKK+mIpT5odcWPfFwgOwor6YijPmfDoGl8XCA7CivpiKI+bmllfFwgOwor6YifPnNoaXxcIDsKK+mInj5qdW58XCA7CivpiJ0+ecOtbnxcIDsKK+mImz5ndW98XCA7CivpiJk+ccOtbnxcIDsKK+mIlz55xa1ufFwgOwor6YiWPmZlbnxcIDsKK+mIlT5uacWtfFwgOwor6YiRPmLEg258XCA7CivpiI8+ecStbnxcIDsKK+mIjj5nb3V8XCA7CivpiI0+ZMO5bnxcIDsKK+mIjD5qdcOpfFwgOwor6YiKPnhpbnxcIDsKK+mIhj55w6FufFwgOwor6YiFPnl1w6h8XCA7Civph78+ecOtbnxcIDsKK+mHvj5qaW58XCA7Civph7Y+c2jDqXxcIDsKK+mHsj5jaGF8XCA7Civph64+ZMOgaXxcIDsKK+mHrD5ow6BufFwgOwor6YerPmh1w6F8XCA7Civph6o+Z2FufFwgOwor6YepPmbDoW58XCA7Civph6Y+a8OydXxcIDsKK+mHpT5mxINufFwgOwor6YeiPm7DoWl8XCA7Civph54+emjDrXxcIDsKK+mHmj5xacO6fFwgOwor6YeWPmRhb3xcIDsKK+mHiz5zaMOsfFwgOwor6YeIPnNow6x8XCA7Civph4U+ecOgbnxcIDsKK+mHhD5jxINpfFwgOwor6YeBPnjDrG58XCA7Civphrw+ecOgbnxcIDsKK+mGsD50w6FufFwgOwor6YapPnrDoW98XCA7CivphqE+emjDoHxcIDsKK+mGoD7DoG5nfFwgOwor6YaePnnDuW58XCA7Civphp0+Y3XDs3xcIDsKK+mGmT5zb3V8XCA7CivphpY+ecO5bnxcIDsKK+mGlD5qaXV8XCA7CivphpM+dMSDbnxcIDsKK+mGjD5rdW58XCA7Civphog+dMOhbnxcIDsKK+mGhD50w6FvfFwgOwor6YaDPnlhbnxcIDsKK+mGgj5sxINufFwgOwor6YaAPnfDqWl8XCA7Civphbw+aMSDaXxcIDsKK+mFuz56dcOsfFwgOwor6YWzPnnDrG58XCA7Civpha0+ecOydXxcIDsKK+mFqD56w6BpfFwgOwor6YWgPnFpxIN8XCA7CivphZg+dMOzdXxcIDsKK+mFlj5kYW58XCA7CivphZU+bcOhb3xcIDsKK+mFlD56dcOsfFwgOwor6YWTPnnEg258XCA7CivphYc+esOgbnxcIDsKK+mFgj56w6BufFwgOwor6YWAPnlhbnxcIDsKK+mEvj55b3V8XCA7CivphLw+esOgbnxcIDsKK+mEuT56b3V8XCA7CivphLU+Y2FvfFwgOwor6YSzPmPDoG98XCA7CivphLI+ZGFufFwgOwor6YSwPmzDrW58XCA7CivphK4+bcOgb3xcIDsKK+mErD5sw6xufFwgOwor6YSpPnjDrW58XCA7CivphKQ+bcOgbnxcIDsKK+mElz5ow6BvfFwgOwor6YSWPnnDum58XCA7CivphJI+em91fFwgOwor6YSQPmNow7l8XCA7CivphIs+c291fFwgOwor6YSIPmt1w618XCA7CivphIc+aMOydXxcIDsKK+mEhj55w7lufFwgOwor6YSBPmLDqGl8XCA7CivphIA+cnXDsnxcIDsKK+mDvz5tw6lpfFwgOwor6YO1PnnDs3V8XCA7Civpg7I+bMOhaXxcIDsKK+mDsD56b3V8XCA7Civpg64+bMOhbnxcIDsKK+mDpT5iw6hpfFwgOwor6YOfPmppw6F8XCA7Civpg5g+bMO8zIZ8XCA7Civpg5Y+ZG91fFwgOwor6YOUPnnDoW58XCA7Civpg40+bnXDs3xcIDsKK+mDjD5ndWl8XCA7Civpg4g+aMOydXxcIDsKK+mDgj5nYWl8XCA7Civpgr8+c2hpfFwgOwor6YK+PnpodXxcIDsKK+mCvT5ndWl8XCA7CivpgrY+YsOoaXxcIDsKK+mCqT5odcWPfFwgOwor6YKoPmN1bnxcIDsKK+mCpD5zaMOpfFwgOwor6YKgPmJpbnxcIDsKK+mCjz5sdcOzfFwgOwor6YKOPnnDoW98XCA7CivpgoQ+aMOhaXxcIDsKK+mCgT5tw6BpfFwgOwor6YG+PmjDoWl8XCA7CivpgbY+csOgb3xcIDsKK+mBsz5jdW98XCA7CivpgbI+Y2jDrXxcIDsKK+mBsT5sw7N1fFwgOwor6YGvPmTDuW58XCA7Civpgak+c2jDrHxcIDsKK+mBnz5jaMOtfFwgOwor6YGcPnjDuW58XCA7CivpgZo+Y2jDuXxcIDsKK+mBmT55w6FvfFwgOwor6YGVPnfDqWl8XCA7CivpgY4+Z3XDsnxcIDsKK+mBiz55w7lufFwgOwor6YGKPnnDs3V8XCA7CivpgYg+c2jDrXxcIDsKK+mBhT5jaMOtfFwgOwor6YGDPnnEg258XCA7CivpgYA+cXVufFwgOwor6YC9Pm51w7J8XCA7CivpgLI+asOsbnxcIDsKK+mAsD55w7N1fFwgOwor6YCrPmp1w6l8XCA7CivpgKo+Y3XDsnxcIDsKK+mAqT5iw6hufFwgOwor6YCoPmzDoWl8XCA7CivpgKU+aHXDrXxcIDsKK+mApD5iZW58XCA7CivpgJk+emjDqHxcIDsKK+mAmD55w6BufFwgOwor6YCOPnFpw7p8XCA7CivpgIw+ecOzdXxcIDsKK+mAhz5kw7lufFwgOwor6L+/PnjDuW58XCA7Civov74+a3XDsnxcIDsKK+i/vD5qacOpfFwgOwor6L+6Pm7Eg2l8XCA7Civov7Y+ecOydXxcIDsKK+i/tD5odcOtfFwgOwor6L+xPnR1w7N8XCA7Civov68+bcOoaXxcIDsKK+i/oz56aMOsfFwgOwor6L+gPmNow6h8XCA7Civov4w+amlhfFwgOwor6L+APmdhbnxcIDsKK+i+rD5iYW58XCA7CivovqY+YsOgbnxcIDsKK+i+pT54dWV8XCA7CivovqA+YmFufFwgOwor6L6SPndlbnxcIDsKK+i9pT5sw6xufFwgOwor6L2hPnDDqGl8XCA7CivovaA+bMSVaXxcIDsKK+i9mz5kdcOsfFwgOwor6L2ZPmzDqWl8XCA7CivovZc+a8SDbnxcIDsKK+i9lD5sw61ufFwgOwor6L2TPmZhbnxcIDsKK+i9kj5mw6lufFwgOwor6L2RPmzEg298XCA7CivovY0+Y2jDqHxcIDsKK+i9iz5ow7pufFwgOwor6L2KPnfDqGl8XCA7CivovYc+aml1fFwgOwor6L2EPnhpw6F8XCA7CivovYE+dGFvfFwgOwor6L2APndlbnxcIDsKK+i8vT5iw6hufFwgOwor6Ly8PndlbnxcIDsKK+i8uD5zaHV8XCA7CivovLY+ecOzdXxcIDsKK+i8sz5jw7J1fFwgOwor6LyuPnLDs3V8XCA7CivovKs+cMOhaXxcIDsKK+i8qj5sw7pufFwgOwor6LypPmLDqGl8XCA7CivovKU+Z8WtbnxcIDsKK+i8oT5rxINufFwgOwor6LygPmd1xY98XCA7CivovJ0+aHVpfFwgOwor6LyZPnpow6l8XCA7CivovJM+d8SDbnxcIDsKK+i8kj56aMOpfFwgOwor6LyPPnnDs3V8XCA7CivovIs+c2hlfFwgOwor6LyKPnpow6x8XCA7CivovIk+esSDaXxcIDsKK+i7vj5zaMOsfFwgOwor6Lu6PnnDoW98XCA7Civou7k+emjErXxcIDsKK+i7tD56aMO5fFwgOwor6LuzPnDDoW98XCA7Civou7A+YsOoaXxcIDsKK+i7rj7Eg25nfFwgOwor6LusPmbDoG58XCA7Civou6k+ZMOgaXxcIDsKK+i7pj5iw6hufFwgOwor6LuhPmbEg258XCA7Civou6A+csOobnxcIDsKK+i7nj5tw6FvfFwgOwor6LuaPmTDoGl8XCA7Civou5g+dMO6bnxcIDsKK+i7lz5zaHV8XCA7Civou5Q+csOobnxcIDsKK+i7kz5mw6BufFwgOwor6LuRPmTDoGl8XCA7Civou5A+eMOsbnxcIDsKK+i7jz55dcOofFwgOwor6LuOPnfDqGl8XCA7Civou40+anVufFwgOwor6LuMPmd1xK18XCA7Civou4o+Y2hlfFwgOwor6LuHPmTDoG98XCA7Civou4M+dHXFj3xcIDsKK+i7gj5sw6BvfFwgOwor6LuBPmzDs3V8XCA7Civour0+ecSDbnxcIDsKK+i6tj5sdcWPfFwgOwor6LqxPmR1xY98XCA7Civouq0+ZGFufFwgOwor6LqqPmzDrG58XCA7Civouqk+anXDqXxcIDsKK+i6qD5rdcOtfFwgOwor6LqnPmzDrG58XCA7CivouqQ+amnDqHxcIDsKK+i6oT5uacOofFwgOwor6LqgPnhpxJV8XCA7Civoup0+bMOhbnxcIDsKK+i6mz53w6hpfFwgOwor6LqZPmzDrG58XCA7Civoupc+d8OoaXxcIDsKK+i6lT5jaMO6fFwgOwor6LqTPnpow6x8XCA7CivoupE+emjDrXxcIDsKK+i6jj5sdcOyfFwgOwor6LqNPnl1w6h8XCA7Civouok+ZMWtbnxcIDsKK+i5vj5kdW58XCA7Civoubg+bMOsbnxcIDsKK+i5tz5qdcOpfFwgOwor6LmuPmZhbnxcIDsKK+i5qj50dcOtfFwgOwor6LmnPnphb3xcIDsKK+i5oz5ww6FufFwgOwor6LmgPnpow618XCA7CivouZ4+a3XErXxcIDsKK+i5mz5kw6BpfFwgOwor6LmUPnrDoG58XCA7CivouZM+bGnDuXxcIDsKK+i5hj50dcStfFwgOwor6LmFPmNoxIN8XCA7CivouLs+Z3VhfFwgOwor6LiyPmTDuW58XCA7CivouKg+a3XDrXxcIDsKK+i4oD53xINufFwgOwor6LiaPmzDum58XCA7CivouJk+aHXDoHxcIDsKK+i4lz5uaWV8XCA7CivouJU+amnDqXxcIDsKK+i4kz53xJVpfFwgOwor6LiIPnNodXxcIDsKK+i4hj5jdW58XCA7CivouII+bmnDqHxcIDsKK+i4gD5jaMO5fFwgOwor6Le+PnNow7p8XCA7Civot7Q+Y8SDaXxcIDsKK+i3sj5qacOhfFwgOwor6LexPnpow6x8XCA7Civot64+Y2jDrHxcIDsKK+i3rT5kacOpfFwgOwor6LesPmt1xK18XCA7Civot6Y+emh1fFwgOwor6LelPmR1w7J8XCA7Civot6I+ZMOgaXxcIDsKK+i3nD5sdcOyfFwgOwor6LeYPnDDoW58XCA7Civot5U+ZGnDqXxcIDsKK+i3kz56aMO5fFwgOwor6LeSPnFpxIN8XCA7Civot40+Y8SDaXxcIDsKK+i3ij5tw6hpfFwgOwor6LeJPmLDqGl8XCA7Civot4U+dHXDsnxcIDsKK+i2uT5qdcOpfFwgOwor6La2Pmd1w6x8XCA7CivotrI+esSDbnxcIDsKK+i2rj55dcOofFwgOwor6LapPmNow6x8XCA7CivotqU+cWl1fFwgOwor6LakPmPFj3V8XCA7CivotqE+Y3XErXxcIDsKK+i2nj5xdcOofFwgOwor6LabPnnErW58XCA7CivotpY+c3VvfFwgOwor6LaVPmfEg258XCA7CivotpM+ZHXFj3xcIDsKK+i2kD54dcOofFwgOwor6LaPPmd1YXxcIDsKK+i2jj5jaMO6fFwgOwor6LaNPmNow618XCA7Civotow+amnDqXxcIDsKK+i2iT56aMO6fFwgOwor6LaDPmRpw6l8XCA7Civotb8+Y2jDrXxcIDsKK+i1vj5xxK1ufFwgOwor6LW9Pmp1w6l8XCA7Civotbo+ccOtbnxcIDsKK+i1sT56xY91fFwgOwor6LWuPnhpw6F8XCA7Civotak+c2jDrHxcIDsKK+i1nz55dW58XCA7CivotZU+dMOgbnxcIDsKK+i0sz5zaMOsfFwgOwor6LScPnnDum58XCA7CivotJs+Z8OgbnxcIDsKK+i0lz55w6BufFwgOwor6LSWPnNow7p8XCA7CivotJI+c2jDuXxcIDsKK+i0kT5nxINufFwgOwor6LSQPmrDrG58XCA7CivotI4+Z8OgbnxcIDsKK+i0iz55w6BufFwgOwor6LSKPnrDoG58XCA7CivotIk+dMSDbnxcIDsKK+i0hz55dW58XCA7CivotIQ+emjDrHxcIDsKK+i0gT5iw6BpfFwgOwor6LSAPnfDqGl8XCA7Civos70+c8OgaXxcIDsKK+izvD5nw7J1fFwgOwor6LO0PmzDoGl8XCA7Civos7M+emFpfFwgOwor6LOyPmLEg298XCA7Civos7E+ecWtbnxcIDsKK+izrj5qw6xufFwgOwor6LOqPnpow6x8XCA7Civos6c+dMOgbnxcIDsKK+izpT5zdcOsfFwgOwor6LOjPm3DoGl8XCA7Civos6A+cMOpaXxcIDsKK+izmz56w6BufFwgOwor6LOaPmzDoGl8XCA7Civos5Y+c2hlfFwgOwor6LOVPnFpw7p8XCA7Civos5Q+YmlufFwgOwor6LOTPmJpbnxcIDsKK+izkj5zaGV8XCA7Civos5A+eMO5bnxcIDsKK+izjT5zaGF8XCA7Civos4w+Z8OgaXxcIDsKK+iziz5nYWl8XCA7Civos4o+esOpaXxcIDsKK+izhT5nYWl8XCA7Civos4Q+aHXDrHxcIDsKK+izgz5sw6xufFwgOwor6LOBPmJlbnxcIDsKK+iyvz5tw6BvfFwgOwor6LK+PmNow618XCA7Civosrw+dGllfFwgOwor6LK7PmbDqGl8XCA7Civosrg+ZMOgaXxcIDsKK+iytz5txINpfFwgOwor6LK0Pmd1w6x8XCA7CivosrA+c2jDrHxcIDsKK+iyrz56aMWtfFwgOwor6LKtPnpow618XCA7Civosqo+dGFufFwgOwor6LKpPmbDoG58XCA7Civosqg+aHXDsnxcIDsKK+iypz5ww61ufFwgOwor6LKmPnfDoG58XCA7CivosqE+Y8OhaXxcIDsKK+iynT5iw6hpfFwgOwor6LKcPmp1w6l8XCA7Civospo+dMOhbnxcIDsKK+iymT5jaHV8XCA7CivospM+bWFvfFwgOwor6LKRPmppYXxcIDsKK+iyiz5ow6BufFwgOwor6LKHPmjDoW98XCA7CivosoE+ecOydXxcIDsKK+ixvz5nxY91fFwgOwor6LG2PmbDqW58XCA7CivosbE+d2VufFwgOwor6LGtPmppYXxcIDsKK+ixrD56aHV8XCA7Civosak+YmlufFwgOwor6LGlPmdhaXxcIDsKK+ixpD5rxJVufFwgOwor6LGePmjDsnV8XCA7CivosZs+ecOgbnxcIDsKK+ixmD50w7pufFwgOwor6LGXPmh1aXxcIDsKK+ixlj5jaMO5fFwgOwor6LGUPnnDoG58XCA7CivosZM+ecOgbnxcIDsKK+ixkj56aMOsfFwgOwor6LGRPnpow6x8XCA7CivosY4+c2jDuXxcIDsKK+ixgz5oxINufFwgOwor6LGCPmvEg2l8XCA7CivosL0+aGFufFwgOwor6LC7Pmp1w6l8XCA7CivosLo+eGlhfFwgOwor6K+5PnpvdXxcIDsKK+iusT5yw6hufFwgOwor6K6sPnR1b3xcIDsKK+iunj55w6BufFwgOwor6K6aPnrDoG58XCA7Civorpg+emjDqXxcIDsKK+iulz5odcOyfFwgOwor6K6VPmzDoW58XCA7CivorpQ+ecStbnxcIDsKK+iukT55w6BvfFwgOwor6K6PPnfDqGl8XCA7Civorow+ecOgbnxcIDsKK+iuiz56aMOpfFwgOwor6K6GPnfDqGl8XCA7CivoroQ+bMSVaXxcIDsKK+iugz56w6BufFwgOwor6K6BPnNow6h8XCA7CivoroA+ZMOydXxcIDsKK+itvz5odcOsfFwgOwor6K25PmjDoW98XCA7CivorbM+bsOydXxcIDsKK+itrj5odcOgfFwgOwor6K2tPmh1xK18XCA7Civorak+eGnDoHxcIDsKK+itqD5uw7N1fFwgOwor6K2iPnN1w6x8XCA7CivoraA+dGFufFwgOwor6K2fPnrDoG98XCA7CivorZs+esOobnxcIDsKK+itmj50w6FufFwgOwor6K2YPnNow618XCA7CivorZc+c2jDrXxcIDsKK+itlj56w6hufFwgOwor6K2TPmh1w6x8XCA7CivorZA+esWtbnxcIDsKK+itjj5qdcOpfFwgOwor6K2LPmzDoW58XCA7CivorYo+bsOhb3xcIDsKK+itiD5kdcOsfFwgOwor6K2HPnNoZXxcIDsKK+itgT5odcOhfFwgOwor6K2APmjDoG58XCA7CivorL4+bcOhbnxcIDsKK+isuj56aMOpfFwgOwor6Ky5PmrErW58XCA7CivorLI+Y2FufFwgOwor6KyxPmzDs3V8XCA7CivorK8+amllfFwgOwor6KysPm1pw7l8XCA7CivorKs+emjDqXxcIDsKK+isoT55w6FvfFwgOwor6KygPnnDoW98XCA7CivorJ4+eHXDqHxcIDsKK+isnT54acOofFwgOwor6KyaPnNow6x8XCA7CivorJg+Y2jDrXxcIDsKK+islD5uw7zDqHxcIDsKK+isjz5zxY91fFwgOwor6KyLPmh1w7J8XCA7CivorIk+a3XDrHxcIDsKK+ishT56b3V8XCA7CivorII+d8OoaXxcIDsKK+isgD5tw7N1fFwgOwor6Ku+Pm51w7J8XCA7Civoq7o+ecOgbnxcIDsKK+iruD56aHV8XCA7Civoq7U+bsOhbnxcIDsKK+irsj55aW58XCA7Civoq7E+aHXDrHxcIDsKK+irpz54acOpfFwgOwor6KujPmh1w6B8XCA7Civoq6I+aMO5bnxcIDsKK+iroT5zaMOsfFwgOwor6KufPnNow6x8XCA7Civoq5w+ZGnDqXxcIDsKK+irlj5sw7pufFwgOwor6KuVPmjDoW98XCA7Civoq5Q+emjDuXxcIDsKK+irjz56b3V8XCA7Civoq4k+d8SVaXxcIDsKK+irhz50w6FufFwgOwor6Kq+PnnDrW58XCA7Civoqro+Y2hpfFwgOwor6Kq5PmbElWl8XCA7CivoqrY+c3XDrHxcIDsKK+iqsT5qacOpfFwgOwor6KqoPmh1w6x8XCA7CivoqqU+Z8Ogb3xcIDsKK+iqoT5qacOofFwgOwor6KqbPnFpbnxcIDsKK+iqmD55w7J1fFwgOwor6KqVPmTDoG58XCA7Civoqo0+csOobnxcIDsKK+iqjD56aMOsfFwgOwor6KqHPmt1YXxcIDsKK+iqhT56aHV8XCA7CivoqoQ+bMSVaXxcIDsKK+iqgz5jaMStfFwgOwor6Km/Pmd1w6B8XCA7Civoqb0+ecOhbnxcIDsKK+ipvD5odWl8XCA7Civoqbo+bHXDsnxcIDsKK+iptz5kw6BufFwgOwor6Km0PndlaXxcIDsKK+ipsj5nYWl8XCA7CivoqbE+aHXDoHxcIDsKK+ipsD5qacOpfFwgOwor6KmvPmh1w6x8XCA7Civoqa0+Z3XErXxcIDsKK+iprD5nw7J1fFwgOwor6KmrPmNow6B8XCA7Civoqao+aMSVbnxcIDsKK+ipqT5zaGl8XCA7Civoqac+Y2jDoXxcIDsKK+ippj5zaMOsfFwgOwor6KmiPnjDum58XCA7CivoqZ8+emjDqXxcIDsKK+ipnT56aMWtfFwgOwor6KmcPnRhb3xcIDsKK+ipkT50dcOzfFwgOwor6KmQPnpow6B8XCA7CivoqYw+Z8OgbnxcIDsKK+ipij5ww6BufFwgOwor6KmJPm7DoW98XCA7CivoqYc+ZMOgaXxcIDsKK+iphD5kacOpfFwgOwor6KmAPmNow6h8XCA7CivoqL0+Z8OydXxcIDsKK+iouz56aMO5fFwgOwor6Ki1PmNoaXxcIDsKK+iosD50w7pufFwgOwor6KivPnNoxIN8XCA7CivoqK0+c2jDqHxcIDsKK+ioqz54w6xufFwgOwor6KioPnpoxK18XCA7CivoqKc+ecOzdXxcIDsKK+iooz5qdcOpfFwgOwor6KiiPnhpbnxcIDsKK+iooT55w61ufFwgOwor6KigPmrDrG58XCA7CivoqJ4+eWFvfFwgOwor6KicPmZlbnxcIDsKK+iomj55w61ufFwgOwor6KiZPnjDuW58XCA7CivoqJc+dHVvfFwgOwor6KiUPnnDrW58XCA7CivoqJM+eMO5bnxcIDsKK+iokj5yw6hufFwgOwor6KiQPmppw6l8XCA7CivoqI4+dMSDb3xcIDsKK+iojT5jaMOgfFwgOwor6KiKPnjDuW58XCA7CivoqIk+ZsOgbnxcIDsKK+iohT5xacO6fFwgOwor6KiEPnFpw7p8XCA7Civop74+ecOgbnxcIDsKK+invD5qdcOpfFwgOwor6Ke6PnnDoG58XCA7Civop7g+Y2jDuXxcIDsKK+intz54dcOpfFwgOwor6Ke2Pnpow6x8XCA7Civop6k+cWnDunxcIDsKK+inqD5ow7lufFwgOwor6KenPmppxJV8XCA7Civop6Q+Y2jDuXxcIDsKK+inoj5jaMOsfFwgOwor6KegPmppw6h8XCA7Civop58+aHXDoHxcIDsKK+inmz5kw6BufFwgOwor6KeXPmbDoW58XCA7Civop5Q+amlufFwgOwor6KeTPmppdXxcIDsKK+ingz5rdWl8XCA7Civopr0+bMSDbnxcIDsKK+imvD5sdcOzfFwgOwor6Ka7PmzDoG58XCA7CivoprY+bHXDs3xcIDsKK+imsj5qxK1ufFwgOwor6KavPmfDsnV8XCA7Civopqs+asOsbnxcIDsKK+imqj5xaW58XCA7Civopqc+bMSDbnxcIDsKK+imoz53ZWl8XCA7CivopqA+anVufFwgOwor6KafPnpow6x8XCA7Civopp4+ecOgb3xcIDsKK+immj5qdcOpfFwgOwor6KaZPmx1w7N8XCA7CivoppY+c2jDrHxcIDsKK+imlT5tacOofFwgOwor6KaSPm3DoW98XCA7Civopo8+Z3VpfFwgOwor6KaOPmd1w6x8XCA7Civopbk+c2hpfFwgOwor6KW4PnrDoG58XCA7CivopbY+ZMOgaXxcIDsKK+iltT56aMOpfFwgOwor6KW0PmzDoW58XCA7CivopbA+bMOgaXxcIDsKK+ilrT54acOpfFwgOwor6KWsPmLEg2l8XCA7Civopas+c2jDrHxcIDsKK+ilqT5zaMWtfFwgOwor6KWnPnpoxK18XCA7CivopaQ+bMOhbnxcIDsKK+iloj50xINufFwgOwor6KWhPnNow7p8XCA7CivopZo+c3XDrHxcIDsKK+ilmT5jw6BvfFwgOwor6KWXPmR1w7N8XCA7CivopZU+bMOhbnxcIDsKK+illD5txINufFwgOwor6KWTPnLDoW98XCA7CivopZI+YmnDqXxcIDsKK+ilkT54w61ufFwgOwor6KWOPmbDoW58XCA7CivopYw+ZGFufFwgOwor6KWKPnp1w6x8XCA7CivopYM+YmFvfFwgOwor6KWCPnNlbnxcIDsKK+ikvz5jw6FvfFwgOwor6KS9PnfDqGl8XCA7CivopLs+eGnDqHxcIDsKK+ikuj5kacOpfFwgOwor6KS3PmRpw6l8XCA7CivopK8+amnDqHxcIDsKK+ikqT5iYW58XCA7CivopKg+c3XFj3xcIDsKK+ikpj5uw6BpfFwgOwor6KSgPmdvdXxcIDsKK+iknj55xa1ufFwgOwor6KSYPmh1aXxcIDsKK+iklz55xINufFwgOwor6KSPPnhpw7l8XCA7CivopI4+eGnDuXxcIDsKK+ikjD5odWl8XCA7CivopIs+ZGnDqXxcIDsKK+ikgz5rw6hufFwgOwor6KSBPnpow618XCA7Civoo70+emjDrHxcIDsKK+ijuj55xINufFwgOwor6KO2PmZlaXxcIDsKK+ijtT5nxa1ufFwgOwor6KOtPmNoxK18XCA7Civoo6o+dMOhb3xcIDsKK+ijqT5kYW98XCA7Civoo6Y+ZsOzdXxcIDsKK+ijoD5xw7pufFwgOwor6KOSPnDDs3V8XCA7Civoo48+YmFvfFwgOwor6KONPmvFrW58XCA7Civoo4w+amnDoXxcIDsKK+ijiz5zaMO5fFwgOwor6KOIPmt1bnxcIDsKK+ijgD55aW58XCA7Civoor8+Z3VpfFwgOwor6KK+PnpodXxcIDsKK+iiuj5qacOpfFwgOwor6KK4PmPDum58XCA7CivoorU+csOobnxcIDsKK+iitD5qacOpfFwgOwor6KKzPmNoxK18XCA7Civooqw+ZHXFj3xcIDsKK+iipz5rb3V8XCA7CivooqU+dHVvfFwgOwor6KKjPm3Ds3V8XCA7CivooqE+csOhbnxcIDsKK+iioD56aMOsfFwgOwor6KKfPnpow6x8XCA7Civoop4+Z8WtbnxcIDsKK+iinT5mw6FufFwgOwor6KKVPnNow7l8XCA7Civooo8+enXDsnxcIDsKK+iijj55w6BvfFwgOwor6KKMPmLDoG98XCA7Civoook+dHXDs3xcIDsKK+iihz5yw6FufFwgOwor6KKGPmh1aXxcIDsKK+iigz5iw6BvfFwgOwor6KKAPmp1bnxcIDsKK+ihvD56aGl8XCA7Civoobs+csOhbnxcIDsKK+ihuj5xw6xufFwgOwor6KG4Pnhpw6h8XCA7CivoobQ+ZMSDbnxcIDsKK+ihsT5qacOpfFwgOwor6KGvPmZlbnxcIDsKK+ihpj5nxINufFwgOwor6KGfPmTDoG98XCA7CivooZ4+d8OoaXxcIDsKK+ihnD5kw6BvfFwgOwor6KGbPnfDqGl8XCA7CivooZM+c2jDuXxcIDsKK+ihjj5rw6BufFwgOwor6KGKPm1pw6h8XCA7CivooYM+bcOgaXxcIDsKK+ihgj5uacO5fFwgOwor6KC/Pnpow6F8XCA7CivooL4+emjDunxcIDsKK+igvT5qacOpfFwgOwor6KC8Pmp1w6l8XCA7CivooLs+bcOhbnxcIDsKK+iguj5jw6FufFwgOwor6KC2PmPDoW58XCA7CivooKk+emh1fFwgOwor6KClPm5pw6h8XCA7CivooKQ+cWl1fFwgOwor6KCePmppw6l8XCA7CivooJ0+bMOpaXxcIDsKK+ignD5mw6FufFwgOwor6KCbPm1pw6h8XCA7CivooJk+YmlufFwgOwor6KCYPmppw6l8XCA7CivooJQ+aMOhb3xcIDsKK+igjT54aWV8XCA7CivooIs+emjDunxcIDsKK+iggj5zaMOofFwgOwor6J+zPnjDum58XCA7Civon7E+bcOzdXxcIDsKK+ifrz5yw6FvfFwgOwor6J+rPnnDrW58XCA7Civon6k+anXDqXxcIDsKK+ifqD5qdcOpfFwgOwor6J+nPmzDoW98XCA7Civon6Y+ZsOoaXxcIDsKK+ifpD5iZW58XCA7Civon6E+Z3XErXxcIDsKK+ifnj5iacOpfFwgOwor6J+ZPnpow618XCA7Civon5c+cWl1fFwgOwor6J+VPnp1aXxcIDsKK+ifkz5mw6FufFwgOwor6J+OPm3Eg258XCA7Civon4g+Z3VvfFwgOwor6J+EPnpow6l8XCA7Civon4M+d8OgbnxcIDsKK+ifgT53w6lufFwgOwor6J6+PnnErW58XCA7Civonrw+ccStbnxcIDsKK+ieuz5sw7N1fFwgOwor6J6yPnpow6x8XCA7CivonrE+d8OoaXxcIDsKK+ierD5jw6FvfFwgOwor6J6kPnNow6x8XCA7CivonqE+d8OpbnxcIDsKK+ienT5odcOsfFwgOwor6J6aPm7DoGl8XCA7CivonpY+aHXDoXxcIDsKK+iekj5ow6BufFwgOwor6J6RPnFpw7l8XCA7Civonow+YmFufFwgOwor6J6LPnDDoW58XCA7Civonb0+ccWtbnxcIDsKK+iduz5uxINufFwgOwor6J24Pmd1YXxcIDsKK+idtz5ndcWPfFwgOwor6J21PnFpdXxcIDsKK+idsT5kw6BpfFwgOwor6J2wPmh1xK18XCA7Civonas+emh1fFwgOwor6J2oPnNoaXxcIDsKK+idpz5rdcOtfFwgOwor6J2lPm3DoW98XCA7CivonaI+aml1fFwgOwor6J2fPnfDqGl8XCA7CivonZ4+bcOoaXxcIDsKK+idmz53ZWl8XCA7CivonZo+csOzdXxcIDsKK+idmD55xINufFwgOwor6J2VPnNow618XCA7CivonZQ+amllfFwgOwor6J2QPm3DoGl8XCA7CivonYU+Y8OhbnxcIDsKK+idgj5ixINufFwgOwor6Jy8PnfElWl8XCA7CivonLk+cnXDrHxcIDsKK+icsz5kdW58XCA7CivonLI+d8SVaXxcIDsKK+icsD5mw6lpfFwgOwor6JytPmjDoG58XCA7CivonKw+Z2FufFwgOwor6JyrPmt1bnxcIDsKK+icqj5ndW98XCA7CivonKg+ZGnDqXxcIDsKK+icpj5sw7pufFwgOwor6JygPmrFrW58XCA7CivonJY+aHXDrXxcIDsKK+ickT5kw6BufFwgOwor6JyQPmppw6l8XCA7CivonI8+ZMOgbnxcIDsKK+ibvz5ow6BufFwgOwor6Ju9PmLDoGl8XCA7Civom7w+Y2hlfFwgOwor6Ju7PnR1w6x8XCA7Civom7o+amnDoXxcIDsKK+ibtz5xacO6fFwgOwor6Ju2Pmxpw6h8XCA7Civom6s+Z3XErXxcIDsKK+ibqj5xacOofFwgOwor6JujPmppw6l8XCA7Civom5o+bGnDqHxcIDsKK+iblT5odcOtfFwgOwor6JuIPnRpw6h8XCA7Civom4U+csOhbnxcIDsKK+ibgj5iacSVfFwgOwor6Jq8PmfFj3V8XCA7Civomrs+emjDoXxcIDsKK+iatD55w7J1fFwgOwor6JqzPmNow618XCA7CivomqY+csOhbnxcIDsKK+iaoT5mw6lufFwgOwor6JqgPmbDqW58XCA7Civompk+ccOtbnxcIDsKK+iamD5odcOtfFwgOwor6JqXPmp1w6l8XCA7CivompY+aMOhb3xcIDsKK+iakj5yw6FufFwgOwor6JqQPmp1bnxcIDsKK+iajz55dcOofFwgOwor6JqOPmPDoW58XCA7Civomok+d8OpbnxcIDsKK+iahz5jaMStfFwgOwor6Jm3PmdhbnxcIDsKK+iZtj5ow6FufFwgOwor6Jm1PnNow6l8XCA7CivombQ+emjDqXxcIDsKK+iZrz5xacO6fFwgOwor6JmqPnNow7p8XCA7Civomag+YmFufFwgOwor6JmnPmt1aXxcIDsKK+iZpD55w6FufFwgOwor6JmjPmLDoG98XCA7CivomZ8+aMOhb3xcIDsKK+iZmD5jdcOzfFwgOwor6JmVPmNoxa18XCA7CivomYw+YmllfFwgOwor6JmLPm3DqW58XCA7CivomYY+bMOpaXxcIDsKK+iZgT5rdcOtfFwgOwor6Ji/Pmx1w7N8XCA7CivomL0+bMSVaXxcIDsKK+iYtz5rdcOtfFwgOwor6Ji2PnfDqGl8XCA7CivomLU+emjDrXxcIDsKK+iYsz5odcSDfFwgOwor6JiyPmzDqWl8XCA7CivomLE+bMOoaXxcIDsKK+iYrT5sw6FufFwgOwor6JisPmt1aXxcIDsKK+iYqz5sw6FufFwgOwor6JikPnfElWl8XCA7CivomKM+aHVhfFwgOwor6JiXPm5pw6h8XCA7CivomI0+eHVufFwgOwor6JiLPnDDrW58XCA7CivomIo+ecO5bnxcIDsKK+iYiD50dcOtfFwgOwor6JiDPnJ1xK18XCA7CivomIA+dHXDsnxcIDsKK+iXvj5sw6BpfFwgOwor6Je6PmzDrG58XCA7Civol7g+Y2jDunxcIDsKK+iXtz5zaMWtfFwgOwor6JezPmfEg298XCA7Civol7E+aHXDrHxcIDsKK+iXsD5sacO6fFwgOwor6JevPnfDqGl8XCA7Civol6w+dHVpfFwgOwor6JerPmh1w618XCA7Civol6o+c8WPdXxcIDsKK+iXpT55w6BvfFwgOwor6JejPmJlaXxcIDsKK+iXoj56aMStfFwgOwor6JefPmzElWl8XCA7Civol5s+eGnElXxcIDsKK+iXkj5xacOofFwgOwor6JeOPmrDrG58XCA7Civol40+bMOhbnxcIDsKK+iXgz5ow6BvfFwgOwor6JazPnfElWl8XCA7CivolrI+cMOtbnxcIDsKK+iWsT5kdcOsfFwgOwor6JasPnnDoG98XCA7Civolqs+eHVufFwgOwor6JanPmvEg298XCA7CivolqU+c2jFrXxcIDsKK+iWoj5qaWV8XCA7CivolqA+ZsOhbnxcIDsKK+iWnj5zdW58XCA7Civolp0+a8OgbnxcIDsKK+iWkj5jw6BufFwgOwor6JaOPm1pw6h8XCA7Civolok+d8OoaXxcIDsKK+iWiD5odcOsfFwgOwor6JaDPmjDoG98XCA7CivoloA+ecO5bnxcIDsKK+iVvD5oxINvfFwgOwor6JW4Pnhpw6F8XCA7CivolbU+c3VufFwgOwor6JWwPnnDuW58XCA7CivolaI+a3XDrHxcIDsKK+iVoT5mw6lufFwgOwor6JWdPmp1w6l8XCA7CivolZw+ZsSVaXxcIDsKK+iVmD5yw6FvfFwgOwor6JWVPnnDs3V8XCA7CivolZQ+YmFvfFwgOwor6JWTPnnDum58XCA7CivolZI+bcSDaXxcIDsKK+iVkD5odcOhfFwgOwor6JWPPmNow7p8XCA7CivolYw+bMSVaXxcIDsKK+iVgT54w7pufFwgOwor6JS/PnfDqWl8XCA7CivolLI+a8OydXxcIDsKK+iUsT5zaGF8XCA7CivolK0+ecOsbnxcIDsKK+iUqT55w61ufFwgOwor6JSoPmrDuW58XCA7CivolKc+aHXDrHxcIDsKK+iUnj5sw7N1fFwgOwor6JSYPnNlbnxcIDsKK+iUlj5jdcOzfFwgOwor6JSSPnh1bnxcIDsKK+iUjj5zaMOofFwgOwor6JSKPmjEg258XCA7CivolIk+Z8WtbnxcIDsKK+iUhT55w6FufFwgOwor6JSEPm3DoG58XCA7CivolII+bHXDs3xcIDsKK+iTuD5jw6FvfFwgOwor6JO3PnR1aXxcIDsKK+iTtj53xJVpfFwgOwor6JO1Pmppw6l8XCA7Civok7M+asOsbnxcIDsKK+iTsj5xaXV8XCA7Civok6s+emjDunxcIDsKK+iTqT5tw6BvfFwgOwor6JOhPmNhbnxcIDsKK+iTmj54aXV8XCA7Civok5g+Z8WtbnxcIDsKK+iTlT5ndcOsfFwgOwor6JOUPnnEg298XCA7Civok48+bHXFj3xcIDsKK+iTjD5jdcOyfFwgOwor6JOLPmfDoGl8XCA7Civok4U+bGnDunxcIDsKK+iTgz5zb3V8XCA7Civok4I+aHXDsnxcIDsKK+iTgD5zdW58XCA7Civokrs+cnXDsnxcIDsKK+iStz55w7pufFwgOwor6JKtPmNow7p8XCA7Civokqs+Y3VvfFwgOwor6JKlPmxpw7p8XCA7CivokqI+Y2jDunxcIDsKK+iSmz5xdWV8XCA7CivokpQ+c2jDrXxcIDsKK+iSkj5zaGl8XCA7CivokpE+eWlufFwgOwor6JKQPnNvdXxcIDsKK+iSjj5ww6BpfFwgOwor6JKNPnfDqWl8XCA7Civokok+a3XDrHxcIDsKK+iSiD5rxINpfFwgOwor6JKGPnh1ZXxcIDsKK+iSgT5zaMO5fFwgOwor6JKAPnl1bnxcIDsKK+iRvz5tw6lpfFwgOwor6JG9Pnlhb3xcIDsKK+iRuz5sw6FufFwgOwor6JG5PnNoaXxcIDsKK+iRtz5odW58XCA7CivokbA+asO5bnxcIDsKK+iRrz55w6BvfFwgOwor6JGoPndlaXxcIDsKK+iRpj53xJVpfFwgOwor6JGkPmppw6h8XCA7CivokaI+Z8OgaXxcIDsKK+iRnT5iw6hpfFwgOwor6JGcPmppw6l8XCA7CivokZg+csOobnxcIDsKK+iRlT55w6FufFwgOwor6JGUPmjDs3V8XCA7CivokZA+cMOpbnxcIDsKK+iRhz5yw7N1fFwgOwor6JGEPnp1w7J8XCA7CivokYM+enXDs3xcIDsKK+iRgD5ndWF8XCA7CivokL8+aHXDs3xcIDsKK+iQrD53w6BufFwgOwor6JCpPnFpdXxcIDsKK+iQnD50aWV8XCA7CivokJs+aml1fFwgOwor6JCaPnR1w7J8XCA7CivokJg+bsOgaXxcIDsKK+iQlj53xINufFwgOwor6JCQPnNow6B8XCA7CivokIo+bMOhaXxcIDsKK+iQiT5mw6lpfFwgOwor6I+/PmTDoG98XCA7Civoj7w+dMSDbnxcIDsKK+iPuz5sxK1ufFwgOwor6I+vPmh1YXxcIDsKK+iPrT50w6FpfFwgOwor6I+sPmh1YXxcIDsKK+iPqz5qxK1ufFwgOwor6I+oPmppZXxcIDsKK+iPpj5iw6hpfFwgOwor6I+jPnHDrG58XCA7Civoj6I+YsOgb3xcIDsKK+iPmz5tw6lufFwgOwor6I+VPmzDum58XCA7Civoj5M+Z3XFj3xcIDsKK+iPjj5rdW58XCA7Civoj40+asO5bnxcIDsKK+iPiz53w6hpfFwgOwor6I+GPnpvdXxcIDsKK+iOuD55w7N1fFwgOwor6I6uPm7DoW58XCA7Civojq0+amnDqXxcIDsKK+iOpT5uacWtfFwgOwor6I6kPnnDs3V8XCA7CivojqI+amnDoXxcIDsKK+iOoT5jdcOyfFwgOwor6I6fPmjDoG58XCA7Civojp0+Y3XDsnxcIDsKK+iOmj55w6FufFwgOwor6I6ZPmp1bnxcIDsKK+iOlz5jaGV8XCA7Civojo8+bcOoaXxcIDsKK+iOjT5xacO6fFwgOwor6I6MPmR1w7N8XCA7Civojoc+Y2jDrXxcIDsKK+iOgj5iacOpfFwgOwor6I26PnnDum58XCA7CivojbY+ecOtbnxcIDsKK+iNtT5yxJVufFwgOwor6I2zPmTDsnV8XCA7CivojbI+Y2jDuXxcIDsKK+iNsT53xJVpfFwgOwor6I2bPnLDoW98XCA7CivojZc+c2jDuXxcIDsKK+iNlj5sxINvfFwgOwor6I2VPmppbnxcIDsKK+iNjj5jaMOtfFwgOwor6I2EPmdhaXxcIDsKK+iNgj5rdWF8XCA7CivojL8+emjDunxcIDsKK+iMqT5nxY91fFwgOwor6IylPmd1aXxcIDsKK+iMoj5sacOofFwgOwor6IyhPmR1b3xcIDsKK+iMoD54aXV8XCA7CivojJo+ecOsbnxcIDsKK+iMkz54dcOpfFwgOwor6IyNPmfFj3V8XCA7Civoi78+d8OoaXxcIDsKK+iLuj5tw6lpfFwgOwor6Iu2Pm5pw6l8XCA7Civoi7U+ZGnDqXxcIDsKK+iLsj56aMSDfFwgOwor6IutPnnEg298XCA7Civoi6w+cWnDunxcIDsKK+iLpz56aMO5fFwgOwor6IukPnBpxJV8XCA7Civoi6A+bcOtbnxcIDsKK+iLnT5ww6hpfFwgOwor6IuDPnnFj3V8XCA7Civoi4I+ecOtbnxcIDsKK+iKvD5tw6BvfFwgOwor6Iq7PmNow7p8XCA7CivoirY+Z291fFwgOwor6Iq1Pmp1w6l8XCA7CivoirI+aHVhfFwgOwor6IqkPmtvdXxcIDsKK+iKoz5mw7N1fFwgOwor6IqiPnLDqW58XCA7CivoiqA+ZsOzdXxcIDsKK+iKmz53xJVpfFwgOwor6IqaPnTDum58XCA7CivoipU+c3VpfFwgOwor6IqUPmh1xK18XCA7Civoiok+Z2FufFwgOwor6IqIPm1pZXxcIDsKK+iKhD53w6FufFwgOwor6IqAPmppZXxcIDsKK+iJuD5jxINvfFwgOwor6Im3PnnDoG58XCA7CivoibY+ecOgbnxcIDsKK+iJpz5odcOyfFwgOwor6ImlPmppw6h8XCA7CivoiaI+dMOhbnxcIDsKK+iJnj55w6BvfFwgOwor6ImcPmTDoGl8XCA7CivoiZs+bMOzdXxcIDsKK+iJlj5jaGF8XCA7CivoiZM+ZGnDqXxcIDsKK+iJkj5tw6BvfFwgOwor6ImBPnrDoG98XCA7CivoiLo+eGnDoXxcIDsKK+iIpz5mw6FufFwgOwor6IimPnTDoGl8XCA7CivoiKA+ZGFvfFwgOwor6IidPnhpw6F8XCA7CivoiJo+dGFufFwgOwor6IiZPmh1w6B8XCA7CivoiJU+ZMOgbnxcIDsKK+iIkz5zaMOsfFwgOwor6IiRPnRhbnxcIDsKK+iIjz5qacWtfFwgOwor6IiLPnjDrG58XCA7CivoiIo+amnDuXxcIDsKK+iHvz5jaGF8XCA7Civoh7o+dMOhaXxcIDsKK+iHuT54aXV8XCA7Civoh7g+emjDrHxcIDsKK+iHtz5kacOpfFwgOwor6IeyPm5pw6h8XCA7Civoh68+Z2FvfFwgOwor6IeuPmRpw6l8XCA7Civoh6g+bMOtbnxcIDsKK+iHnT5sdcWPfFwgOwor6IebPmh1w7J8XCA7Civoh5k+eWFufFwgOwor6IeWPmzDvMyGfFwgOwor6IeSPmh1w7J8XCA7Civoh5A+eHVufFwgOwor6IePPmLDrG58XCA7Civoh44+Y3XDrHxcIDsKK+iHhT5jaMO5fFwgOwor6IeEPmp1w6l8XCA7Civohr0+ZMSDbnxcIDsKK+iGvD5iw6hpfFwgOwor6Ia5PmbDqG58XCA7Civohrg+c3XErXxcIDsKK+iGtj5yw7lufFwgOwor6Ia1PmN1w6x8XCA7CivohrE+emjDrXxcIDsKK+iGsD5mw6FufFwgOwor6IatPmd1aXxcIDsKK+iGrD5jdcOsfFwgOwor6IajPmzDrG58XCA7CivohqE+bGnDunxcIDsKK+iGlT5ndcOzfFwgOwor6IaOPnhpw6l8XCA7CivohoQ+c8OydXxcIDsKK+iFtT5qaWF8XCA7CivohbI+anXDqXxcIDsKK+iFrD5yw7N1fFwgOwor6IWqPnnDuW58XCA7CivohaY+bsSDb3xcIDsKK+iFoj5uw6BvfFwgOwor6IWhPmd1YXxcIDsKK+iFoD5jw7J1fFwgOwor6IWfPmx1w7N8XCA7CivohZ4+ZMO5bnxcIDsKK+iFnD5tw6lpfFwgOwor6IWNPnLElW58XCA7CivohYk+amllfFwgOwor6IWHPm7ElWl8XCA7CivohYU+ZMOgbnxcIDsKK+iFgz5rdcOsfFwgOwor6IWCPmd1w7J8XCA7CivohLs+amnDqXxcIDsKK+iEuj5jdcOsfFwgOwor6IS2Pmd1YXxcIDsKK+iEsD5kw7J1fFwgOwor6ISuPm7ElWl8XCA7CivohKs+dHVvfFwgOwor6ISqPnR1w6x8XCA7CivohKk+eGl1fFwgOwor6ISiPm3DqWl8XCA7CivohJw+cWllfFwgOwor6ISZPmp1w6l8XCA7CivohJc+d8SVbnxcIDsKK+iElT53xINufFwgOwor6ISIPm3DoGl8XCA7CivohIc+eGnDqXxcIDsKK+iEhT54acOpfFwgOwor6ISEPm3DqWl8XCA7CivohIM+Y3XDrHxcIDsKK+iDvz5ndWl8XCA7Civog7U+emjDrHxcIDsKK+iDsj5oxINpfFwgOwor6IOfPmNoxK18XCA7Civog5E+emhpfFwgOwor6IOHPmJlaXxcIDsKK+iDhT5kacOpfFwgOwor6IK1PmrDrG58XCA7CivogrA+csOhbnxcIDsKK+iCpz5wZWl8XCA7CivogqY+YmFufFwgOwor6IKePmNoYXxcIDsKK+iClT5yw6hufFwgOwor6IKPPmPDoG98XCA7Civogo4+a8SVbnxcIDsKK+iCjT5xacO6fFwgOwor6IKKPmppbnxcIDsKK+iBuD5kYW58XCA7Civogbc+emjDrXxcIDsKK+iBtj5uacOofFwgOwor6IG1Pmt1w6x8XCA7Civoga0+a3XDrHxcIDsKK+iBpz5rdcOtfFwgOwor6IGePnfDqW58XCA7CivogZ0+Z3XDs3xcIDsKK+iBlz5sacOofFwgOwor6IGVPmjDoG98XCA7CivogZE+ZGnDqXxcIDsKK+iBjj5ndW98XCA7CivogYg+ecWPdXxcIDsKK+iBhT5jaMOofFwgOwor6IGAPnpow618XCA7CivogLw+ZGFufFwgOwor6IC6PnnDum58XCA7CivogLk+ccOtbnxcIDsKK+iAsD55b3V8XCA7CivogK8+aHXDsnxcIDsKK+iArj5sw6BvfFwgOwor6ICsPmzDs3V8XCA7CivogKc+bMOzdXxcIDsKK+iApT5sxY91fFwgOwor6ICjPmzFrW58XCA7CivogKI+bMOgb3xcIDsKK+iAoT5jaMO6fFwgOwor6ICePmppYXxcIDsKK+iAnT5jaMO6fFwgOwor6ICbPmNow618XCA7CivogJo+aHVvfFwgOwor6ICKPmRpw6h8XCA7CivogIk+Z8WPdXxcIDsKK+iAiD5nxY91fFwgOwor6ICHPmfFj3V8XCA7Civnv78+ZMOgb3xcIDsKK+e/vT5odcOsfFwgOwor57+4PnDElW58XCA7Civnv7c+bMOtbnxcIDsKK+e/rT5ow7N1fFwgOwor57+sPmh1aXxcIDsKK+e/qz53w6BufFwgOwor57+oPnNow6x8XCA7Civnv6Q+Y2jDrHxcIDsKK+e/oz5zaMOgfFwgOwor57+iPnRhb3xcIDsKK+e/mz5zaMO5fFwgOwor57+aPmh1aXxcIDsKK+e/mT5odcOsfFwgOwor57+TPnhpw6l8XCA7Civnv48+bGnDuXxcIDsKK+e/iT5wxJVufFwgOwor57+IPnhpw6F8XCA7Civnv4Y+Y3XDrHxcIDsKK+e/hD5jaMOsfFwgOwor57+CPmZlbnxcIDsKK+e+tT5mxJVufFwgOwor576zPmbDoW58XCA7Civnvqc+c3VvfFwgOwor576jPnHDum58XCA7Civnvpw+emjDuXxcIDsKK+e+mT5nYW98XCA7CivnvpI+ZsOpbnxcIDsKK+e+kT55xY91fFwgOwor576QPnnFj3V8XCA7CivnvoU+bHXDs3xcIDsKK+e+gD5sacWtfFwgOwor5727PnfDqGl8XCA7CivnvbY+bGnFrXxcIDsKK+e9sT5uxINufFwgOwor572sPmzEg258XCA7Civnvas+Z3XDoHxcIDsKK+e9pz5sw61ufFwgOwor572jPmd1w6B8XCA7CivnvaA+bcOtbnxcIDsKK+e9nD5qaWV8XCA7CivnvY4+dMOhbnxcIDsKK+e9jT5sw6lpfFwgOwor572IPnTDoW58XCA7CivnvYc+enVufFwgOwor57y/PmjDsnV8XCA7CivnvLs+ZsWPdXxcIDsKK+e8uT5mxY91fFwgOwor57yyPnrEg298XCA7CivnvJ4+Y3VpfFwgOwor57yNPmR1xY98XCA7CivnvIs+aHXDrHxcIDsKK+e8ij53ZW58XCA7Civnu7E+bcStbnxcIDsKK+e7lj5kacOpfFwgOwor57q8PnnErW58XCA7CivnurQ+csOpbnxcIDsKK+e6nT5sw6lpfFwgOwor57qZPmx1w7J8XCA7CivnupQ+Y8OhaXxcIDsKK+e6jT5sw6lpfFwgOwor57qLPnlvdXxcIDsKK+e6iD54acOpfFwgOwor57qHPmzDqGl8XCA7CivnuoM+bMSVaXxcIDsKK+e6gT54dW58XCA7Civnub8+bMOhbnxcIDsKK+e5vT5iaW58XCA7Civnubg+c3XDrHxcIDsKK+e5tz5uw6FvfFwgOwor57myPmppw6h8XCA7Civnuao+aHXDrHxcIDsKK+e5oz5odcOgfFwgOwor57miPmh1w6x8XCA7CivnuaE+eGnDuXxcIDsKK+e5oD5ydcStfFwgOwor57mePnLDoG98XCA7CivnuZw+enVufFwgOwor57mZPmZhbnxcIDsKK+e5lz5sw61ufFwgOwor57mWPnPEg258XCA7CivnuZQ+emhpfFwgOwor57mTPnpow6x8XCA7CivnuZA+c3XDrHxcIDsKK+e5jj5yw6FufFwgOwor57mNPnhpw7l8XCA7CivnuYk+aMO6bnxcIDsKK+e5hT5zYW98XCA7CivnuYA+c3XDrHxcIDsKK+e4tj56aMOtfFwgOwor57i1Pm3DoG58XCA7CivnuLI+bMOpaXxcIDsKK+e4rz55xINufFwgOwor57iuPnN1b3xcIDsKK+e4qT5jw6BpfFwgOwor57ihPnrEg2l8XCA7CivnuJ4+Z8SDb3xcIDsKK+e4nD55w7pufFwgOwor57iaPnRhb3xcIDsKK+e4lz5jdWl8XCA7CivnuJY+Y3VpfFwgOwor57iVPnl1bnxcIDsKK+e4kj5jdcWPfFwgOwor57iPPnDDoW58XCA7CivnuIk+asOsbnxcIDsKK+e4gD54acOhfFwgOwor57e/PmTDoGl8XCA7Civnt7w+eXVufFwgOwor57e7Pnpow6x8XCA7Civnt7o+Z3VhfFwgOwor57e4PnlpbnxcIDsKK+e3tz5ndW98XCA7Civnt7M+eGnDqXxcIDsKK+e3sT5nb3V8XCA7Civnt68+d8SVaXxcIDsKK+e3rT53w6hpfFwgOwor57enPnFpdXxcIDsKK+e3pT5ixINvfFwgOwor57ehPm3DrW58XCA7Civnt5A+ZsOhbnxcIDsKK+e3jT5tw61ufFwgOwor57eMPnJ1w618XCA7Civnt4s+ZmVpfFwgOwor57eKPmrErW58XCA7Civnt4U+em91fFwgOwor57eEPmfFrW58XCA7Civnt4M+aMO6bnxcIDsKK+e3gj50YW58XCA7Civnt4E+cWnDqHxcIDsKK+e2vD5iZWl8XCA7Civntrk+bGnFrXxcIDsKK+e2uD5sw7pufFwgOwor57a3PmN1w6x8XCA7CivntrY+Z3XFj3xcIDsKK+e2tT5jxINpfFwgOwor57awPnfEg258XCA7Civntq8+dMOhb3xcIDsKK+e2rT53w6lpfFwgOwor57apPnfEg258XCA7Civntp4+ZHXFj3xcIDsKK+e2lj55w6FufFwgOwor57aVPnpoaXxcIDsKK+e2kT5rxa1ufFwgOwor57aQPmR1w6x8XCA7Civnto8+c3XDrXxcIDsKK+e2iT50w7J1fFwgOwor57aFPnFpbnxcIDsKK+e2gD5zaHV8XCA7Civntb8+cWnDunxcIDsKK+e1vT5sw7zMhnxcIDsKK+e1uj5jaGl8XCA7CivntbY+anXDqXxcIDsKK+e1tT5odcOsfFwgOwor57WwPmRpw6l8XCA7Civnta8+Z2FpfFwgOwor57WsPnhpw6h8XCA7Civntas+bMSVaXxcIDsKK+e1qj55aW58XCA7CivntaY+Z8SVaXxcIDsKK+e1pD5iw6hpfFwgOwor57WhPmzDoG98XCA7CivntaA+Z8SDaXxcIDsKK+e1nz5sw6BvfFwgOwor57WcPmppw6l8XCA7CivntZs+dGFvfFwgOwor57WVPmp1w6l8XCA7CivntZQ+YsSDaXxcIDsKK+e1kz5ndcOgfFwgOwor57WQPmppZXxcIDsKK+e1jz54acOofFwgOwor57WNPnLDqW58XCA7CivntYo+enXDrHxcIDsKK+e1iT5zaMO5fFwgOwor57WGPmLDoG58XCA7CivntYA+Y2jDuXxcIDsKK+e0vz5kw6BpfFwgOwor57S9PnR1w7N8XCA7CivntLo+Z8OgbnxcIDsKK+e0uD56aMO5fFwgOwor57S1Pnpow7l8XCA7CivntLQ+YsOoaXxcIDsKK+e0sj54acOofFwgOwor57SpPnpow6x8XCA7CivntKU+emjDoXxcIDsKK+e0pD5qacWtfFwgOwor57SjPmN1w6x8XCA7CivntJ8+amlufFwgOwor57SePmTEg258XCA7CivntJ0+csOobnxcIDsKK+e0nD55w7pufFwgOwor57SbPmZlbnxcIDsKK+e0mT56aMStfFwgOwor57SXPnNoYXxcIDsKK+e0lj55xK1ufFwgOwor57STPnNodXxcIDsKK+e0kj5qacOofFwgOwor57SRPmbDs3V8XCA7CivntJA+bmnFrXxcIDsKK+e0jz50xY91fFwgOwor57SLPnfDqW58XCA7CivntIk+csOobnxcIDsKK+e0iD53w6FufFwgOwor57SEPnlhb3xcIDsKK+e0gz54w7pufFwgOwor57SBPmNow6B8XCA7Civns74+aml1fFwgOwor57O6PmppdXxcIDsKK+eztz5sw6FufFwgOwor57O1Pm5pw6h8XCA7Civns7M+enXDsnxcIDsKK+ezsT5uacOofFwgOwor57OlPm51w7J8XCA7Civns6Q+Y2jDrHxcIDsKK+ezoz5zxINufFwgOwor57OePmbDqG58XCA7Civns50+c8SDbnxcIDsKK+ezlD54acWtfFwgOwor57OSPmLDqGl8XCA7Civns48+eGnDqHxcIDsKK+ezgj5yw7N1fFwgOwor57K/Pmd1xY98XCA7Civnsro+YsOgaXxcIDsKK+eytT55dcOofFwgOwor57KoPmLEg2l8XCA7CivnsqY+bMOtbnxcIDsKK+eykz5nYW58XCA7Civnso4+Y2jErXxcIDsKK+eyiz5jdcOsfFwgOwor57KIPnLFj3V8XCA7CivnsoY+c2hhfFwgOwor57KEPmLEg258XCA7Civnsb8+Y8O5bnxcIDsKK+exuj54acOpfFwgOwor57G3Pnpow6l8XCA7CivnsbU+ZsOhbnxcIDsKK+exsD55dcOofFwgOwor57GuPmx1w7N8XCA7CivnsaU+eXXDqHxcIDsKK+exoz5sw6FufFwgOwor57GfPmzDoGl8XCA7CivnsZw+dHXDsnxcIDsKK+exlD5zxY91fFwgOwor57GTPmZhbnxcIDsKK+exkj5mw6FufFwgOwor57GJPnTDoWl8XCA7CivnsYc+aMOhb3xcIDsKK+exhj55dcOofFwgOwor57GEPmt1w6x8XCA7CivnsYM+bMOhbnxcIDsKK+ewuj5zw6BpfFwgOwor57C3PnnDoW58XCA7CivnsLM+Z8OgbnxcIDsKK+ewsj5nxINufFwgOwor57CwPnDDoWl8XCA7CivnsK4+emFufFwgOwor57CtPnNow6x8XCA7CivnsKk+bMOhb3xcIDsKK+ewqD5zxa1ufFwgOwor57CkPmTDoGl8XCA7CivnsKM+a3XDrHxcIDsKK+ewoj5txK1ufFwgOwor57CePmRhbnxcIDsKK+ewlD5zdW98XCA7CivnsJE+c3VvfFwgOwor57CNPmzFj3V8XCA7CivnsIY+a8OydXxcIDsKK+ewgj5ndcOzfFwgOwor56+6PnDDoWl8XCA7Civnr7g+c2VufFwgOwor56+2PnlhbnxcIDsKK+evsj5odcOsfFwgOwor56+rPnpow7p8XCA7Civnr6o+Y2jDrXxcIDsKK+evqD5jaMO6fFwgOwor56+ePm5pw6h8XCA7Civnr5s+cnXDsnxcIDsKK+evlz55dcOofFwgOwor56+UPnnDum58XCA7Civnr40+cWl1fFwgOwor56+LPnFpw6h8XCA7Civnr4k+emjDunxcIDsKK+evhD5mw6BufFwgOwor56+DPm3DqWl8XCA7Civnr4A+amnDqXxcIDsKK+eutz5zaGl8XCA7CivnrrA+c8WtbnxcIDsKK+euqD50dcOyfFwgOwor566fPmrDuW58XCA7Civnrpo+emjDoXxcIDsKK+eumD5qw7lufFwgOwor566WPmzDrW58XCA7CivnrpE+c2jDoHxcIDsKK+eujj5jaMOtfFwgOwor566IPmNow618XCA7CivnroM+em91fFwgOwor566CPmzDoWl8XCA7Civnrbw+ecO6bnxcIDsKK+etuD5nYW58XCA7CivnrbY+Z8SDb3xcIDsKK+etsD56dcOzfFwgOwor562vPnpow7l8XCA7Civnras+emjDrHxcIDsKK+etqj5qaWF8XCA7Civnrag+aMOhbnxcIDsKK+etmT5sw6FpfFwgOwor562NPnPFrW58XCA7CivnrYg+Z3VhfFwgOwor562EPnnDoG98XCA7CivnrYM+eWlufFwgOwor562CPmNow618XCA7CivnrYA+Z3XDrHxcIDsKK+esvz5sdcOyfFwgOwor56y3Pm3Eg298XCA7CivnrLY+c2jErXxcIDsKK+estT5mw6BufFwgOwor56yyPmbDoW58XCA7CivnrK8+ZsOhbnxcIDsKK+esqT5ww6hpfFwgOwor56yjPmJhb3xcIDsKK+esoj5txK1ufFwgOwor56yhPnFpw6h8XCA7CivnrJw+emjDunxcIDsKK+esmj54acOhfFwgOwor56ySPmPDqW58XCA7CivnrIE+emjDunxcIDsKK+ervj5jaMOtfFwgOwor56u7PmfEg258XCA7Civnq7c+a8OgbnxcIDsKK+ertD5jdWl8XCA7Civnq6o+c2jDuXxcIDsKK+erlT5zaMOtfFwgOwor56uQPmNow7l8XCA7Civnq44+ZsOydXxcIDsKK+erjT5zaMOtfFwgOwor56uMPmNow7l8XCA7Civnq4o+cWnDqHxcIDsKK+eriD53w6hpfFwgOwor56uHPmTDsnV8XCA7Civnq4M+esOgb3xcIDsKK+ergT5jdcOsfFwgOwor56q6Pmt1aXxcIDsKK+eqtz5rdcStfFwgOwor56qwPnnDoW98XCA7Civnqq8+ecOhb3xcIDsKK+eqnj5kw6BufFwgOwor56qbPmvDsnV8XCA7CivnqpQ+ecSDb3xcIDsKK+eqkD5ndWl8XCA7Civnqos+emjDunxcIDsKK+eqhz5iw6FvfFwgOwor56qFPnnEg298XCA7CivnqoI+bMOhb3xcIDsKK+epvj55w6BvfFwgOwor56m8PnNlbnxcIDsKK+epuz50w7pufFwgOwor56mzPnrDoG58XCA7CivnqbE+anXDqXxcIDsKK+eprT5sw7zMhnxcIDsKK+epqz5odcOyfFwgOwor56mpPnfElW58XCA7Civnqag+dHXDrXxcIDsKK+eppj5iaW58XCA7CivnqaQ+bnXDsnxcIDsKK+epoj5odcOsfFwgOwor56mfPnN1w6x8XCA7CivnqZU+cWnDqHxcIDsKK+epkD5xaXV8XCA7CivnqY8+d8SVbnxcIDsKK+epiT56aMOsfFwgOwor56mIPm3DqW58XCA7CivnqYI+c3XDrHxcIDsKK+epgT5jxINufFwgOwor56i+PmfEg298XCA7CivnqLI+ZMOgb3xcIDsKK+eorT5qaWV8XCA7CivnqKw+bnXDsnxcIDsKK+eopD5sw7zDqHxcIDsKK+eooT5sw7zElXxcIDsKK+eonT5odcOgfFwgOwor56ibPmvFrW58XCA7CivnqJk+emjDrXxcIDsKK+eokz56dcOzfFwgOwor56iQPmzFrW58XCA7CivnqIg+Z8SDbnxcIDsKK+eohz5rxa1ufFwgOwor56iBPmvEg298XCA7Civnp7w+Z8Ogb3xcIDsKK+enuT5jaMStfFwgOwor56e3Pnpow618XCA7Civnp7U+eWlufFwgOwor56ezPmh1w7N8XCA7Civnp7I+emjDrHxcIDsKK+enrj5odcOzfFwgOwor56eqPnpoaXxcIDsKK+enqD56dcOzfFwgOwor56eePnnDs3V8XCA7Civnp5o+YsOgbnxcIDsKK+enlj56aGl8XCA7Civnp5M+emhpfFwgOwor56eQPnnDum58XCA7Civnp48+aMOgb3xcIDsKK+enjj5mw6lufFwgOwor56eMPnFpdXxcIDsKK+enhT5jaMOhfFwgOwor56eCPnLDqW58XCA7Civnprw+eGnDqHxcIDsKK+emuD5yw7N1fFwgOwor56a3PmzDqGl8XCA7CivnprY+esSDbnxcIDsKK+emtD55dcOofFwgOwor56axPmTEg298XCA7Civnpqw+Z3XDrHxcIDsKK+emqz50xINufFwgOwor56aePmfDoG98XCA7CivnppY+bcOpaXxcIDsKK+emjT5odcOyfFwgOwor56aLPnlpbnxcIDsKK+emiT55xY91fFwgOwor56aHPnpoxJV8XCA7CivnpoY+YmVpfFwgOwor56aDPnpow618XCA7Civnpb0+enXDrHxcIDsKK+eluT50w6FvfFwgOwor56W2PmLErW58XCA7CivnpbU+a8WtbnxcIDsKK+eltD5nYWl8XCA7CivnpbI+amlufFwgOwor56WwPmfDoG98XCA7Civnpa4+Z8Ogb3xcIDsKK+elrD56aGl8XCA7Civnpas+eGnDoXxcIDsKK+elqj5ndcStfFwgOwor56WjPmzDvMyGfFwgOwor56WZPm3DqGl8XCA7CivnpZE+emjDrHxcIDsKK+elkD55w7J1fFwgOwor56WPPnNow618XCA7CivnpY4+ZsOoaXxcIDsKK+eliz5kdcOsfFwgOwor56WFPnlhb3xcIDsKK+elhD54acOofFwgOwor56S/Pnl1w6h8XCA7CivnpLk+ecOhbnxcIDsKK+ekuD56xINufFwgOwor56S3PmzDoW58XCA7CivnpK4+cMOgb3xcIDsKK+ekrT5xdcOofFwgOwor56SsPmbDoW58XCA7CivnpKk+emjDrHxcIDsKK+ekqD5sxJVpfFwgOwor56SnPmzDqGl8XCA7CivnpKM+bWnDqHxcIDsKK+eknz5ww6BvfFwgOwor56ScPmzDqWl8XCA7CivnpJo+a8OgaXxcIDsKK+eklz5waW58XCA7CivnpJA+cXXDqHxcIDsKK+ekjj5jaMWtfFwgOwor56SMPmzDqWl8XCA7CivnpIo+aHXDsnxcIDsKK+ejuz5ww6FufFwgOwor56OxPmzDoW98XCA7Civno6o+Y3VpfFwgOwor56OlPmzElWl8XCA7Civno6Q+eWlufFwgOwor56OhPmvDoG58XCA7Civno5M+ZHVpfFwgOwor56ORPnfDqGl8XCA7Civno4g+d8SVaXxcIDsKK+ejhj5odcOhfFwgOwor56OCPmxpw7l8XCA7Civnors+cXXDqHxcIDsKK+eiuj5xdcOofFwgOwor56KvPm7Eg298XCA7Civnoqw+eGnDoXxcIDsKK+eiqD53ZWl8XCA7CivnoqQ+d8SVaXxcIDsKK+einj55w6FufFwgOwor56KWPmzDuW58XCA7CivnopI+ecOtbnxcIDsKK+eijz5xdcOofFwgOwor56KIPm3DrW58XCA7CivnooU+anVufFwgOwor56KEPmzDrW58XCA7Civnob0+bGnDuXxcIDsKK+ehuD5udcOofFwgOwor56GxPmvFrW58XCA7CivnobA+c2hhfFwgOwor56GvPnnDoG58XCA7Civnoak+Y2jDqHxcIDsKK+ehqD5jaGV8XCA7CivnoaQ+eGnDoXxcIDsKK+ehmT53w6hpfFwgOwor56GNPmvDqG58XCA7CivnoYo+d8SVaXxcIDsKK+ehiD5qacOhfFwgOwor56GDPnpodXxcIDsKK+eguT5udcWPfFwgOwor56CyPnDDoG98XCA7CivnoKs+emjFrXxcIDsKK+egpD50dcOzfFwgOwor56CiPmx1xY98XCA7CivnoJ8+emjEg3xcIDsKK+egmT5wYW58XCA7CivnoJU+c3XDrHxcIDsKK+egkz56aMOpfFwgOwor56CPPmZlbnxcIDsKK+egjj5qacOofFwgOwor56CLPnFpw6h8XCA7CivnoIg+bnXFj3xcIDsKK+eghz5tw61ufFwgOwor56CEPmp1w6l8XCA7CivnoIM+ZGFufFwgOwor55+6PnR1b3xcIDsKK+efsj5ixINpfFwgOwor55+xPmh1w7J8XCA7Civnn6Y+aMOzdXxcIDsKK+efoT5qdcOpfFwgOwor55+dPmp1w6l8XCA7Civnn5o+emjFrXxcIDsKK+efmT5rw6BufFwgOwor55+VPm3Eg258XCA7Civnn5A+aHXDsnxcIDsKK+efiT5iaW58XCA7Civnn4Y+aHXDsnxcIDsKK+efhT55w6BvfFwgOwor55+EPnh1bnxcIDsKK+efgj5zw6BvfFwgOwor55+APnfDqWl8XCA7Civnnro+aHXDrHxcIDsKK+eetj5ndcOsfFwgOwor5561PmzDrW58XCA7CivnnrQ+bcOzdXxcIDsKK+eerj5jaMOofFwgOwor556ePm3DoW58XCA7Civnnp0+Y2hpfFwgOwor556cPmxvdXxcIDsKK+eekz5tw6lufFwgOwor556QPm3DoG98XCA7Civnno0+c8WPdXxcIDsKK+eeiT5rw7J1fFwgOwor556GPmt1w6x8XCA7CivnnoM+Z3XDrHxcIDsKK+eduj5ow7N1fFwgOwor5524Pm3DqGl8XCA7CivnnbU+Y2FpfFwgOwor5520PmfDuW58XCA7CivnnbE+eGnDoHxcIDsKK+edrz5odW58XCA7Civnnac+aHVufFwgOwor552fPnN1w6x8XCA7CivnnZ4+bMOgaXxcIDsKK+edmT5sacOofFwgOwor552XPnNow6x8XCA7CivnnZU+d2FufFwgOwor552UPmjFrW58XCA7CivnnY8+a8O5bnxcIDsKK+edjD53xINufFwgOwor552JPmN1b3xcIDsKK+edhT5ow6BufFwgOwor552CPm3DqWl8XCA7CivnnL8+bcOgaXxcIDsKK+ecsD5kacOpfFwgOwor55yjPmRpw6l8XCA7CivnnJs+bcOoaXxcIDsKK+eckz5odcOyfFwgOwor55yRPnnEg298XCA7CivnnI4+c2jDrHxcIDsKK+ecij5tw6BvfFwgOwor55yFPnBhbnxcIDsKK+ecgz55w7pufFwgOwor55u/Pm3DrW58XCA7Civnm7o+ZsOpbnxcIDsKK+ebsD5nxINufFwgOwor55uoPnNoxa18XCA7Civnm6Q+cMOhbnxcIDsKK+eboT5qw6xufFwgOwor55ugPmrErW58XCA7Civnm5w+ZMOgb3xcIDsKK+ebmj5xacO6fFwgOwor55uVPmbDoG58XCA7Civnm4w+d8SDbnxcIDsKK+ebgz5iZWl8XCA7Civnmrk+anVufFwgOwor55q4Pmp1bnxcIDsKK+eatj56aGF8XCA7CivnmrU+cXXDqHxcIDsKK+easz5xacO6fFwgOwor55qwPnDDoG98XCA7Civnmq8+Z8SDbnxcIDsKK+eapT5ow6BvfFwgOwor55qhPmjDoG98XCA7CivnmqA+Y3XErXxcIDsKK+eanj5ow6BvfFwgOwor55qdPmN1w6x8XCA7Civnmpw+aMOgb3xcIDsKK+ealD5ow6BufFwgOwor55qQPmdhb3xcIDsKK+eajD5odWl8XCA7CivnmoM+bcOgb3xcIDsKK+eZsz5sdcWPfFwgOwor55mxPnRhbnxcIDsKK+eZrj55xK1ufFwgOwor55mpPmzDoGl8XCA7Civnmag+aHXDsnxcIDsKK+eZpD5qacOpfFwgOwor55mhPmNoaXxcIDsKK+eZnz5iacSVfFwgOwor55mdPmzErW58XCA7CivnmZs+bMStbnxcIDsKK+eZmj5kw6BufFwgOwor55mZPnNoxa18XCA7CivnmZc+bMSVaXxcIDsKK+eZkz53w6lpfFwgOwor55mJPmRhbnxcIDsKK+eZiD5mw6hpfFwgOwor55mGPmzDoW98XCA7CivnmYU+bGnDunxcIDsKK+eYvT5qw6xufFwgOwor55i6PmzDsnV8XCA7CivnmLc+c3XFj3xcIDsKK+eYtj5sw7J1fFwgOwor55iwPmx1xY98XCA7CivnmKM+bMSVaXxcIDsKK+eYmz5jaMOsfFwgOwor55iaPmp1w6l8XCA7CivnmJY+eWlufFwgOwor55iSPnfDqW58XCA7CivnmJE+Z3VhfFwgOwor55iFPmTDoG58XCA7CivnmIM+emjDunxcIDsKK+eXvT5kdWl8XCA7Civnl7s+bcOtbnxcIDsKK+eXuD5jaMOsfFwgOwor55ezPmzDrW58XCA7Civnl6U+ZHXDs3xcIDsKK+eXlz5tw6hpfFwgOwor55eTPmNow6x8XCA7Civnl5E+ZHXFj3xcIDsKK+eXkD5odcOtfFwgOwor55ePPnfElWl8XCA7Civnl44+a2FpfFwgOwor55eEPnpow6B8XCA7Civnl4A+Z291fFwgOwor55a/PmbDqGl8XCA7Civnlrs+emjErXxcIDsKK+eWtj54acOofFwgOwor55awPnpow7l8XCA7Civnlqk+Y3XDrHxcIDsKK+eWqD54aWF8XCA7Civnlqc+emhpfFwgOwor55amPmp1w6l8XCA7Civnlpw+eGnDoHxcIDsKK+eWkz5uxINpfFwgOwor55aQPnpow6x8XCA7Civnlo4+c2h1fFwgOwor55aNPmTDoG58XCA7Civnlow+bmnDqHxcIDsKK+eWij5kacOpfFwgOwor55aJPmRpw6l8XCA7CivnloQ+bMOtbnxcIDsKK+eWgT5sacO6fFwgOwor55aAPmNoYXxcIDsKK+eVvj5sw6lpfFwgOwor55W1Pmh1w6B8XCA7CivnlbE+bGnDunxcIDsKK+eVrz5qw7lufFwgOwor55WtPmxpxa18XCA7Civnlas+aHXDoHxcIDsKK+eVqD5wYW58XCA7Civnlac+ZmFufFwgOwor55WkPnpow6x8XCA7CivnlaE+Z2FpfFwgOwor55WYPmxpxa18XCA7CivnlY0+amnDqHxcIDsKK+eVhz55w7pufFwgOwor55WEPmxpw7p8XCA7CivnlYM+d2VpfFwgOwor55WCPmppw7l8XCA7CivnlLQ+emjDoXxcIDsKK+eUpz5zZW58XCA7CivnlKQ+cnXDrXxcIDsKK+eUnT5oYW58XCA7CivnlJs+aMOhbnxcIDsKK+eUlz55xINufFwgOwor55SUPmRhbnxcIDsKK+eUkD5sw61ufFwgOwor55SKPmzFj3V8XCA7Civnk7s+Y2hpfFwgOwor55OtPmTEg258XCA7Civnk6s+cMOpbnxcIDsKK+eTnz5iw6FvfFwgOwor55OaPnrDoG58XCA7Civnk5k+ZMOgb3xcIDsKK+eTkz5sw6BufFwgOwor55ONPnN1w6x8XCA7Civnk4w+Z3VpfFwgOwor55OJPnrDoG58XCA7Civnk4c+csOzdXxcIDsKK+eThj56aMOtfFwgOwor55ODPmzDqWl8XCA7Civnk4I+Z8OgaXxcIDsKK+eTgT5odcOyfFwgOwor55K8PmzDoW58XCA7Civnkrs+enXErXxcIDsKK+eSuj53w6hufFwgOwor55K4PmJpbnxcIDsKK+eStj5qw6xufFwgOwor55KyPnN1w6x8XCA7Civnkq8+aHXDrHxcIDsKK+eSrj50xINufFwgOwor55KtPmfDuW58XCA7Civnkqo+esSDb3xcIDsKK+eSoT5qw6xufFwgOwor55KgPmbDoW58XCA7Civnkp0+Z3VpfFwgOwor55KbPmppbnxcIDsKK+eSmj5qdcOpfFwgOwor55KYPmzDrW58XCA7CivnkpU+eMO6bnxcIDsKK+eSjz56aMOsfFwgOwor55KMPnnDrW58XCA7Civnkoo+bcOpbnxcIDsKK+eShj5xacO6fFwgOwor55KFPnN1xY98XCA7Civnkbs+a3VufFwgOwor55G4PmJpbnxcIDsKK+eRtD5qw6xufFwgOwor55GzPmN1xY98XCA7Civnkaw+bGnDunxcIDsKK+eRqz50YW98XCA7Civnkag+asOsbnxcIDsKK+eRpz5qaW58XCA7CivnkaU+d2VufFwgOwor55GkPnnDoW98XCA7CivnkaM+c3XFj3xcIDsKK+eRoT5zaGl8XCA7CivnkaA+bGnDunxcIDsKK+eRjj5qaWV8XCA7CivnkYs+d8SVaXxcIDsKK+eRiT5tw61ufFwgOwor55GIPnLDs3V8XCA7CivnkYc+ZMOgaXxcIDsKK+eRgj5tw6lpfFwgOwor55C/PmjDum58XCA7CivnkL4+amnDqHxcIDsKK+eQuT5xw61ufFwgOwor55C3PnF1w6h8XCA7CivnkLI+YsOoaXxcIDsKK+eQoz5odWl8XCA7CivnkKE+Y2jDuXxcIDsKK+eQnz53w6lpfFwgOwor55CdPnfDqW58XCA7CivnkJw+bMOhaXxcIDsKK+eQmD5tw61ufFwgOwor55CXPmN1w6x8XCA7CivnkJU+cMOtbnxcIDsKK+eQkz53w6FufFwgOwor55COPmppbnxcIDsKK+eQhz54acO5fFwgOwor55CAPmjDoW58XCA7Civnj7w+YsOoaXxcIDsKK+ePuz5tw6lpfFwgOwor54+6PmrDuW58XCA7Civnj7M+aMOgbnxcIDsKK+ePrj5ww6hpfFwgOwor54+qPmd1aXxcIDsKK+ePqD54acOhfFwgOwor54+nPnnDoW98XCA7Civnj6Q+YsSDb3xcIDsKK+ePoz54w7pufFwgOwor54+iPmvDqG58XCA7Civnj6E+ccOtbnxcIDsKK+ePmz54acO5fFwgOwor54+aPnlhbnxcIDsKK+ePkj5qaW58XCA7Civnj4s+bGnFrXxcIDsKK+ePgz5yxINufFwgOwor546+PmppxIN8XCA7Civnjr0+Z8WPdXxcIDsKK+eOrD5kxINufFwgOwor546oPmp1w6l8XCA7Civnjqc+ecWtbnxcIDsKK+eOpj5qdcOpfFwgOwor546lPnl1w6h8XCA7CivnjqA+amnDqHxcIDsKK+eOnz5tw61ufFwgOwor546VPmdhbnxcIDsKK+eOgz5qdcOpfFwgOwor546APmx1w7N8XCA7CivnjbY+bsOhb3xcIDsKK+eNtT5sacOofFwgOwor542zPm7DsnV8XCA7CivnjbI+aHXDsnxcIDsKK+eNsT5ww61ufFwgOwor542pPmh1w6x8XCA7CivnjaI+aHXDoXxcIDsKK+eNoT5xdcOofFwgOwor542fPnnDoG98XCA7CivnjZw+bMOtbnxcIDsKK+eNlj5mw6lufFwgOwor542VPmN1aXxcIDsKK+eNlD5ow6FvfFwgOwor542MPm3DoG58XCA7CivnjYs+aMOhb3xcIDsKK+eNhj5ow6FvfFwgOwor542FPnNoaXxcIDsKK+eNgz5kYWl8XCA7CivnjYA+c291fFwgOwor54y7PnN1bnxcIDsKK+eMuj55w6FvfFwgOwor54y5PnpoYXxcIDsKK+eMuD5tw6lpfFwgOwor54y2PnnDs3V8XCA7CivnjLM+amlhfFwgOwor54yYPnpow6x8XCA7CivnjJM+Z3XFj3xcIDsKK+eMkj55YW58XCA7CivnjJE+a3VufFwgOwor54yNPmzDoWl8XCA7CivnjIw+ecOsbnxcIDsKK+eMhz55w6FvfFwgOwor54yGPmZlaXxcIDsKK+eMhT5ww6FpfFwgOwor54yCPmjDoG58XCA7CivnjIA+c2hhfFwgOwor54u/PnnDoW58XCA7Civni74+emjDrHxcIDsKK+eLvT5iw6hpfFwgOwor54u5Pnhpw6F8XCA7Civni6s+bMSDb3xcIDsKK+eLpT54w7lufFwgOwor54uaPmTDoG58XCA7Civni5g+eXXDqHxcIDsKK+eLlj55w7J1fFwgOwor54uPPnR1w7N8XCA7Civnir4+ecOtbnxcIDsKK+eKvD5oxY91fFwgOwor54qyPmPDoWl8XCA7CivnirA+cWnDunxcIDsKK+eKqT53w6hpfFwgOwor54qmPmLDoG98XCA7CivniqM+bGnDqHxcIDsKK+eKnD5iZWl8XCA7Civnipo+d8OoaXxcIDsKK+eKmT5zYW58XCA7Civnipc+amnDqHxcIDsKK+eKlj5sdcOyfFwgOwor54qVPmLDqGl8XCA7CivnipM+Y2jDunxcIDsKK+eKjD5qaWF8XCA7Civniok+csO6bnxcIDsKK+eKhz5iZW58XCA7CivnioM+cMWPdXxcIDsKK+eJsD55w7J1fFwgOwor54msPmLDqGl8XCA7Civniao+ecOgbnxcIDsKK+eJoz5yw6hufFwgOwor54mePmppdXxcIDsKK+eJjz50w7N1fFwgOwor54mJPnDDoG58XCA7CivniYM+ZGnDqXxcIDsKK+eIsj53w6hpfFwgOwor54iuPnDDoW98XCA7CivniKU+emjDunxcIDsKK+eIpD5sw6BufFwgOwor54ihPmNow6h8XCA7CivniJs+bMOgbnxcIDsKK+eImj55dcOofFwgOwor54iVPnhpw6h8XCA7CivniJM+ecOgbnxcIDsKK+eIkT5qdcOpfFwgOwor54iLPnh1bnxcIDsKK+eIiD5sacOofFwgOwor54iBPmzDoG58XCA7Civnh78+ecOgb3xcIDsKK+eHvj5kw6BvfFwgOwor54e8PmrDrG58XCA7Civnh7s+eHVufFwgOwor54e6PmTDoG98XCA7Civnh7c+bMOhbnxcIDsKK+eHtD5odcOsfFwgOwor54eyPnhpw6l8XCA7Civnh7A+d2VpfFwgOwor54etPnpow7p8XCA7Civnh6w+aHXErXxcIDsKK+eHqT5xdcOofFwgOwor54emPmPDoG58XCA7Civnh6Q+dMOgaXxcIDsKK+eHoz5sw6FufFwgOwor54eiPnh1w6l8XCA7Civnh5w+bcOobnxcIDsKK+eHmj5jdW98XCA7Civnh5g+bcSVaXxcIDsKK+eHlj54w7pufFwgOwor54eTPmZlbnxcIDsKK+eHkD5sw61ufFwgOwor54eMPmLDqG58XCA7Civnh4k+ZMO5bnxcIDsKK+eHhz56w7lufFwgOwor54eGPmR1bnxcIDsKK+eHhD55w6BufFwgOwor54a+PmNow6x8XCA7Civnhq8+aMOgbnxcIDsKK+eGrT5kxINufFwgOwor54arPnpow6x8XCA7CivnhqY+anXDqXxcIDsKK+eGoz5zdWl8XCA7CivnhqE+bMOzdXxcIDsKK+eGkz5sacO5fFwgOwor54aOPnnDoG98XCA7Civnhos+bsOhaXxcIDsKK+eGiT55w7pufFwgOwor54aHPmvEg298XCA7CivnhoU+ecO5bnxcIDsKK+eGgT54acOpfFwgOwor54W5PmfDsnV8XCA7CivnhbQ+eXVufFwgOwor54WxPmd1YXxcIDsKK+eFsD5nw6BvfFwgOwor54WvPmppZXxcIDsKK+eFrT5iYW98XCA7Civnhas+c3XDrHxcIDsKK+eFqj5xacO6fFwgOwor54WpPmbDoW58XCA7CivnhaM+csWPdXxcIDsKK+eFoT54w6xufFwgOwor54WfPnfDqGl8XCA7CivnhZ0+bcOoaXxcIDsKK+eFmT55YW58XCA7CivnhZc+bcOpaXxcIDsKK+eFkj53xJVpfFwgOwor54WRPnpoxa18XCA7CivnhYc+aHVpfFwgOwor54WGPnhpYXxcIDsKK+eFgz5rdcStfFwgOwor54SzPmp1w6l8XCA7CivnhK4+eMOsbnxcIDsKK+eEqz5ydcOyfFwgOwor54SgPmN1w6x8XCA7CivnhJ4+dHVufFwgOwor54SdPmjDuW58XCA7CivnhJw+a3VufFwgOwor54SbPmjFrW58XCA7CivnhJQ+ecOgbnxcIDsKK+eEjj54acOofFwgOwor54SMPmrDuW58XCA7CivnhIY+anXDqXxcIDsKK+eEhD54dW58XCA7CivnhII+c2jDunxcIDsKK+eDvj5jaMOsfFwgOwor54O4PmjEg2l8XCA7Civng7I+Y2jDqHxcIDsKK+eDoz5odWl8XCA7Civng6I+emjDqHxcIDsKK+eDoD5odcStfFwgOwor54OaPmh1xK18XCA7Civng5c+a8OgaXxcIDsKK+eDlT54dcOofFwgOwor54OTPndlaXxcIDsKK+eDkj5zaMOsfFwgOwor54ORPnnDoW98XCA7Civng5A+bWnDqHxcIDsKK+eDjj55w61ufFwgOwor54K6PnfDqWl8XCA7CivngrY+aGFufFwgOwor54KyPnTDoWl8XCA7CivngrA+cMOhb3xcIDsKK+eCqD5iYW98XCA7Civngqc+ZHXDsnxcIDsKK+eCoj56aMO6fFwgOwor54KgPnhpw6F8XCA7Civngpg+eGlufFwgOwor54KNPnDDoG58XCA7Civngow+a8OgaXxcIDsKK+eChD5uacWtfFwgOwor54KDPmbDqW58XCA7Civngb0+emFpfFwgOwor54G7PmNow6x8XCA7Civngbo+eGnDqHxcIDsKK+eBuT56aMOgfFwgOwor54GzPmh1aXxcIDsKK+eBqT55w6BufFwgOwor54GoPmfEg258XCA7Civngac+ecOgbnxcIDsKK+eBpT54w7pufFwgOwor54GjPndhbnxcIDsKK+eBoT5sw6FufFwgOwor54GgPmzEg258XCA7CivngZ8+emjDunxcIDsKK+eBnT5ow6BvfFwgOwor54GYPnRhbnxcIDsKK+eBlD55w6BufFwgOwor54GSPmjDoG58XCA7CivngY4+ecOgbnxcIDsKK+eBhj5sw6FufFwgOwor54GEPnNow6h8XCA7CivngL8+ZsOhbnxcIDsKK+eAvj5sw6FufFwgOwor54C7PmTDoGl8XCA7CivngLk+eXXDqHxcIDsKK+eAtj5sw61ufFwgOwor54C1PmbDqG58XCA7CivngKw+bMOgaXxcIDsKK+eAqj5mw6FufFwgOwor54CpPmR1w6x8XCA7CivngKg+bMOgaXxcIDsKK+eApj56aHV8XCA7CivngKU+aMOgb3xcIDsKK+eAoj53w6lpfFwgOwor54ChPnN1xK18XCA7CivngJk+cWlufFwgOwor54CWPmh1w7J8XCA7CivngJU+YmlufFwgOwor54CSPnHDrG58XCA7CivngJA+YsOgb3xcIDsKK+eAjz5sacO6fFwgOwor54CKPnDDoW58XCA7CivngIk+eGnDqHxcIDsKK+eAiD5odWl8XCA7CivngIQ+amnDqXxcIDsKK+eAgD55b3V8XCA7Civmv7w+bHXDsnxcIDsKK+a/uz5kdcOsfFwgOwor5r+3PmbDqGl8XCA7Civmv7E+YmlufFwgOwor5r+wPnfDqWl8XCA7Civmv6w+asO5bnxcIDsKK+a/qz5sw6BufFwgOwor5r+pPmh1w7J8XCA7Civmv6c+ZHXDrHxcIDsKK+a/pj55xK1ufFwgOwor5r+kPnRhb3xcIDsKK+a/nD5qw6xufFwgOwor5r+VPnNoaXxcIDsKK+a/iz5jaMWtfFwgOwor5r+KPmh1w6x8XCA7Civmv4Y+ZsOpbnxcIDsKK+a/hT5mw6hufFwgOwor5r+EPmd1b3xcIDsKK+a+vz5xw61ufFwgOwor5r67PnN1w6x8XCA7Civmvrg+ZMSDbnxcIDsKK+a+tz5kYW58XCA7Civmvq8+Y8OgbnxcIDsKK+a+qz5tw6BufFwgOwor5r6qPmh1w6F8XCA7Civmvqk+eHXDqXxcIDsKK+a+qD5zaMOsfFwgOwor5r6lPnhpw6h8XCA7Civmvp8+bMStbnxcIDsKK+a+lD5ow6BvfFwgOwor5r6RPmxpw7l8XCA7CivmvpA+ecO6bnxcIDsKK+a+jz5ow6BufFwgOwor5r6KPmN1bnxcIDsKK+a+iT5nxINufFwgOwor5r6HPmzDoG98XCA7Civmvb8+d8OpaXxcIDsKK+a9vj5sw61ufFwgOwor5r27PnNoxa18XCA7CivmvbU+c8OgbnxcIDsKK+a9sD5rdcOsfFwgOwor5r2vPnjDum58XCA7Civmvaw+ZMOgbnxcIDsKK+a9qz53YW58XCA7CivmvaQ+csO5bnxcIDsKK+a9oz5sw6FvfFwgOwor5r2hPmTDuW58XCA7CivmvaA+eMO5bnxcIDsKK+a9mT5ndWl8XCA7CivmvZQ+amnDqXxcIDsKK+a9kz5odcOsfFwgOwor5r2PPmp1w6l8XCA7CivmvYw+emjDrHxcIDsKK+a9hD5zaMO5fFwgOwor5r2DPnjDum58XCA7CivmvLw+Y3XErXxcIDsKK+a8uT5sacO6fFwgOwor5ry3Pmt1w7J8XCA7CivmvKI+aMOgbnxcIDsKK+a8mz50YW58XCA7CivmvJE+Z8OgaXxcIDsKK+a8kD55w6BufFwgOwor5ryNPmd1w7N8XCA7CivmvIw+asStbnxcIDsKK+a7vz5txINufFwgOwor5ru+PmfFrW58XCA7Civmu7w+ZsOgbnxcIDsKK+a7sT5rw7J1fFwgOwor5ruvPnpow6x8XCA7Civmu6s+eGl1fFwgOwor5rucPmdhb3xcIDsKK+a7mz55w61ufFwgOwor5ruZPmh1w6x8XCA7Civmu5Y+c3VpfFwgOwor5ruQPmppw6l8XCA7Civmu40+emjErXxcIDsKK+a7iD5ow6BvfFwgOwor5ruFPm1pw6h8XCA7Civmu4A+Y2jDuXxcIDsKK+a6vz5ww6BufFwgOwor5rq+PndlaXxcIDsKK+a6vD5zaGl8XCA7CivmurU+eWlufFwgOwor5rqzPmjDum58XCA7CivmurA+ccOtbnxcIDsKK+a6rj5zaGl8XCA7Civmuqs+d2VufFwgOwor5rqoPmPDoWl8XCA7CivmuqM+bMO6bnxcIDsKK+a6oD56aMOgfFwgOwor5rqdPmdvdXxcIDsKK+a6mT5sacO6fFwgOwor5rqUPmvDoGl8XCA7CivmupE+c3XFj3xcIDsKK+a6jj5ndcOsfFwgOwor5rqNPmrDrG58XCA7Civmuog+Z3VpfFwgOwor5rqHPmzDvMyGfFwgOwor5rm8Pm5pw6h8XCA7Civmubo+ecOhbnxcIDsKK+a5tT55xY91fFwgOwor5rm0PmLDoG58XCA7CivmubM+bsSDbnxcIDsKK+a5sT5odcOyfFwgOwor5rmjPm3ErW58XCA7CivmuaA+aHVufFwgOwor5rmdPmppZXxcIDsKK+a5nD5zaMOtfFwgOwor5rmaPnnDrG58XCA7CivmuZM+cMOpbnxcIDsKK+a5jz5odcOsfFwgOwor5rmMPmNhbnxcIDsKK+a5iz53w6lpfFwgOwor5rmKPmPDsnV8XCA7CivmuYg+bcOpaXxcIDsKK+a5gT5zaMOtfFwgOwor5rmAPmt1w618XCA7CivmuL4+aMO6bnxcIDsKK+a4vT56YWl8XCA7CivmuLw+bcSVaXxcIDsKK+a4tz55xINufFwgOwor5ri1Pmxpw7p8XCA7CivmuLA+eWFufFwgOwor5rirPnhpw6h8XCA7CivmuKo+ZGnDqXxcIDsKK+a4qD53ZWl8XCA7CivmuKY+Z3VvfFwgOwor5riePnFpw7p8XCA7CivmuJg+aHXDrHxcIDsKK+a4iT5zaMOofFwgOwor5riGPmRpw6l8XCA7CivmuIQ+ZmVpfFwgOwor5riCPnfDqG58XCA7CivmuIA+YmVufFwgOwor5re+PnnErW58XCA7Civmt70+emjErXxcIDsKK+a3tj5sw6FpfFwgOwor5reqPmzDum58XCA7Civmt5s+emjDqHxcIDsKK+a3mj5sw6hpfFwgOwor5reUPmNow6x8XCA7Civmt48+aMOgb3xcIDsKK+a3jT5jaMO5fFwgOwor5reKPnlhbnxcIDsKK+a3iT5ndcWPfFwgOwor5reBPnFpw6h8XCA7Civmtr0+aHVufFwgOwor5ra7PmfDoG58XCA7CivmtqI+ecO6bnxcIDsKK+a2oD53w6lpfFwgOwor5raZPmzDqGl8XCA7CivmtpI+dHVufFwgOwor5raPPnNow7l8XCA7CivmtoY+aMOgbnxcIDsKK+a2hD5waW58XCA7CivmtoM+a8O5bnxcIDsKK+a1vz5ww6hpfFwgOwor5rW9PnN1aXxcIDsKK+a1uT5qaWF8XCA7CivmtbY+bMOhb3xcIDsKK+a1qz5oxINpfFwgOwor5rWoPmzEg258XCA7CivmtaI+ZMOydXxcIDsKK+a1nz55w7N1fFwgOwor5rWbPmjDoW58XCA7CivmtZg+d8SVaXxcIDsKK+a1lz5xacO6fFwgOwor5rWWPmxpw6h8XCA7CivmtZU+asOsbnxcIDsKK+a0tz56aMOsfFwgOwor5rSvPmppw6l8XCA7CivmtKw+ZMOgb3xcIDsKK+a0qT54acOofFwgOwor5rSnPnfElWl8XCA7CivmtKE+bMSVaXxcIDsKK+a0oD5tw7N1fFwgOwor5rSVPnlpbnxcIDsKK+a0lD56aMStfFwgOwor5rSTPnN1xY98XCA7CivmtIk+aMOydXxcIDsKK+a0iD53w6lpfFwgOwor5rSFPnlhbnxcIDsKK+a0gz5odWl8XCA7CivmtII+aHXDrHxcIDsKK+azvz55w61ufFwgOwor5rOsPmp1w6l8XCA7Civms6c+eXXDqHxcIDsKK+aznD5jaMOtfFwgOwor5rOWPm3Eg298XCA7Civms5E+ecWPdXxcIDsKK+azjz5jaMO5fFwgOwor5rONPmJlbnxcIDsKK+azhz5qaWF8XCA7Civmsro+Y2jDrXxcIDsKK+aysj5kdcOyfFwgOwor5rKwPnR1b3xcIDsKK+ayrz5jaMOtfFwgOwor5rKsPm3DqGl8XCA7CivmsqA+bGnDunxcIDsKK+aynD5ww6BufFwgOwor5rKaPnpoxK18XCA7CivmspI+bcOpaXxcIDsKK+aykT5yw7N1fFwgOwor5rKOPmh1w7J8XCA7Civmsos+ecOzdXxcIDsKK+ayij5kw6BufFwgOwor5rKHPnnEg258XCA7CivmsoQ+ecO6bnxcIDsKK+axuj5qdcOpfFwgOwor5rG3PmdhaXxcIDsKK+axtT5nw6BufFwgOwor5rGuPmp1bnxcIDsKK+axrT5ydcOsfFwgOwor5rGrPm3DqW58XCA7CivmsaY+Y2jDrXxcIDsKK+axlj5nYW58XCA7CivmsZM+cWnDunxcIDsKK+axjj5mw6BufFwgOwor5rGNPnfDoW58XCA7CivmsYQ+aMOgbnxcIDsKK+axgz5iaW58XCA7CivmsL8+Z3XErXxcIDsKK+awvj5mw6BufFwgOwor5rCzPnl1bnxcIDsKK+awnT5uw6hpfFwgOwor5rCVPnBpZXxcIDsKK+awkj5qdcOpfFwgOwor5rCOPmRpw6l8XCA7CivmsIw+bHXDs3xcIDsKK+awiT5zw6BvfFwgOwor5rCCPm3DoW98XCA7Civmr78+c2FufFwgOwor5q+7PnR1w7J8XCA7Civmr7o+bcOhb3xcIDsKK+avuD5zdWl8XCA7Civmr7c+bcOgb3xcIDsKK+avsj5kdcOzfFwgOwor5q+wPnDDqWl8XCA7Civmr60+ZMOydXxcIDsKK+avrD5xacO6fFwgOwor5q+lPnjDum58XCA7Civmr6I+c2FpfFwgOwor5q+gPmppYXxcIDsKK+avnj5tw6BvfFwgOwor5q+RPnp1xY98XCA7Civmr44+bcSVaXxcIDsKK+avhz5odcStfFwgOwor5q+DPnF1w6h8XCA7Civmr4A+aHXErXxcIDsKK+auvj5odcOsfFwgOwor5q69PnnDoW98XCA7Civmrro+c2hhfFwgOwor5q62Pnpow7l8XCA7Civmrq8+YsOsbnxcIDsKK+auqz5kYW58XCA7Civmrqg+aHXDrHxcIDsKK+aupT55w61ufFwgOwor5q6jPmrDrG58XCA7Civmrp8+d2VufFwgOwor5q6ePnnFrW58XCA7Civmrpk+aHVufFwgOwor5q6YPmPDoW58XCA7Civmrpc+ZGnDqXxcIDsKK+aulT5mxY91fFwgOwor5q6PPnFpw7l8XCA7Civmrow+anXDqXxcIDsKK+augD55xINvfFwgOwor5q29Pnpow6l8XCA7Civmrbo+ZMSDaXxcIDsKK+atuD5ndWl8XCA7CivmrbU+Y3XDsnxcIDsKK+atsz5zdcOsfFwgOwor5q2yPnN1w6x8XCA7CivmrbE+a3XDrHxcIDsKK+atrz5jaMStfFwgOwor5q2tPmNow618XCA7CivmrZ4+a8SDbnxcIDsKK+atnD5jaMO5fFwgOwor5q2VPnBlbnxcIDsKK+atjz5qw6xufFwgOwor5q2OPnTDoG58XCA7CivmrYU+eWlufFwgOwor5q2EPmd1YXxcIDsKK+atgT5rxINufFwgOwor5qy/PmvEg258XCA7CivmrL0+cWlufFwgOwor5qy8PmNoxK18XCA7CivmrLE+eGnDoHxcIDsKK+asrj5qdcOpfFwgOwor5qysPmvDoGl8XCA7CivmrKs+Y2hpfFwgOwor5qyqPmNow7l8XCA7CivmrJk+bMOpaXxcIDsKK+asmD56aMWtfFwgOwor5qyXPmzDoW58XCA7CivmrJY+bMSDbnxcIDsKK+aslD5qdcOpfFwgOwor5qyRPnrDoG58XCA7CivmrI8+bHXDs3xcIDsKK+asiD53w6lpfFwgOwor5qyHPnNow6h8XCA7CivmrIQ+bMOhbnxcIDsKK+arvj55w7N1fFwgOwor5qu9PnnErW58XCA7Civmq7Q+bMOgaXxcIDsKK+arsT5uacOofFwgOwor5qurPnpodXxcIDsKK+arqT55w6FufFwgOwor5qunPnpodXxcIDsKK+arpT5jaMO6fFwgOwor5qugPmbDqGl8XCA7Civmq5w+Z2FvfFwgOwor5qubPmppw6l8XCA7Civmq5g+aHXDrHxcIDsKK+arlz5tacOofFwgOwor5quRPmzElWl8XCA7Civmq5A+bMSVaXxcIDsKK+arjz5sw6lpfFwgOwor5quNPnpow6x8XCA7Civmq4w+eW91fFwgOwor5quJPmNow7p8XCA7Civmq4Y+a3XDrXxcIDsKK+argz5ndcOsfFwgOwor5qq/PnnEg258XCA7Civmqrw+ecStbnxcIDsKK+aquj5nxINvfFwgOwor5qq2PmvEg258XCA7CivmqrQ+aHXDsnxcIDsKK+aqsz5iaW58XCA7Civmqq8+dMOhaXxcIDsKK+aqrj50w6FvfFwgOwor5qqtPnnDrW58XCA7Civmqqg+c2hlfFwgOwor5qqkPmTDoG98XCA7CivmqqE+c2jDrHxcIDsKK+aqnz5qacSDfFwgOwor5qqePmppxJV8XCA7Civmqpw+Z3XDrHxcIDsKK+aqmj5jaMWtfFwgOwor5qqWPnN1w6x8XCA7CivmqpM+aHXErXxcIDsKK+aqkT5sw6lpfFwgOwor5qqOPnHDrW58XCA7Civmqoo+Z8OgbnxcIDsKK+aqhz56dcOsfFwgOwor5qqFPnN1w6x8XCA7CivmqoM+ecStbnxcIDsKK+aqgT5sxK1ufFwgOwor5qm+PnNodXxcIDsKK+aptz5kb3V8XCA7CivmqbA+Z2FvfFwgOwor5qmvPmzDoG98XCA7Civmqa4+bGnFrXxcIDsKK+aprD5jw6lufFwgOwor5qmqPnLEg258XCA7Civmqag+ZsOpbnxcIDsKK+appD5ydcStfFwgOwor5qmiPnR1xY98XCA7CivmqaA+bnXFj3xcIDsKK+apnj5kdcWPfFwgOwor5qmdPnRhbnxcIDsKK+apnD5qdcOpfFwgOwor5qmUPnR1w618XCA7CivmqZE+bMSDb3xcIDsKK+apjj5mw6FufFwgOwor5qmNPnLDuW58XCA7CivmqYo+bGnDunxcIDsKK+apiT5sw6xufFwgOwor5qmIPm7DoW98XCA7CivmqYY+Y3XDrHxcIDsKK+apgT54w7pufFwgOwor5qi7Pmt1w6x8XCA7CivmqLo+aHXDoHxcIDsKK+aouT5zaMO5fFwgOwor5qi2Pnp1aXxcIDsKK+aotD56aMOtfFwgOwor5qizPnjDrW58XCA7CivmqKc+c2hhfFwgOwor5qimPnpow7l8XCA7CivmqKA+bcOpbnxcIDsKK+aonj5zaHV8XCA7CivmqJ0+emhhfFwgOwor5qicPnNow7l8XCA7CivmqJs+aml1fFwgOwor5qiTPmzDs3V8XCA7CivmqI8+bMSVaXxcIDsKK+aojj5zdW98XCA7CivmqIs+bMOpaXxcIDsKK+aohz54aXV8XCA7CivmqIY+ZsOgbnxcIDsKK+anvj5tw6FufFwgOwor5qe8Pmd1aXxcIDsKK+anuz5ndWl8XCA7Civmp7k+Z2FvfFwgOwor5qe4Pm5pw6h8XCA7Civmp7Y+a3XDrHxcIDsKK+ansT55xY91fFwgOwor5qevPmN1aXxcIDsKK+anrj5zZW58XCA7Civmp6w+aHXDoHxcIDsKK+anqj5nw6BpfFwgOwor5qepPmfDoGl8XCA7Civmp6g+Z3XFj3xcIDsKK+anpT5odcOsfFwgOwor5qeaPmppxIN8XCA7Civmp5g+a8SDbnxcIDsKK+anlj50dcOzfFwgOwor5qeUPmdhb3xcIDsKK+ankT5tw6lpfFwgOwor5qePPmNow7l8XCA7Civmp4s+Z8OydXxcIDsKK+aniD5uw7J1fFwgOwor5qeGPmR1aXxcIDsKK+anhD50YW98XCA7Civmp4M+cMOhbnxcIDsKK+angD5rxINvfFwgOwor5qa/PmfEg298XCA7CivmprI+ecO6bnxcIDsKK+amsT5jdWl8XCA7CivmprA+emhpfFwgOwor5qavPnNow618XCA7CivmpqY+Z8OgbnxcIDsKK+ampD5qacOpfFwgOwor5qajPnnDoW98XCA7CivmpqI+amnDoHxcIDsKK+ammj55xINvfFwgOwor5qaOPmppxIN8XCA7CivmpoU+ecO6bnxcIDsKK+aluj5yw7N1fFwgOwor5qW2Pmppw6l8XCA7CivmpbM+bcOpaXxcIDsKK+alsj5qaWV8XCA7CivmpbE+Y8OydXxcIDsKK+alrD5qacOpfFwgOwor5qWiPnnDs3V8XCA7CivmpZk+bcOgb3xcIDsKK+allj56aMOsfFwgOwor5qWRPmt1w618XCA7CivmpZA+amnDqHxcIDsKK+aljz5rdcOtfFwgOwor5qWOPmjDum58XCA7CivmpY0+YsSVbnxcIDsKK+aljD55w6FufFwgOwor5qWJPnJ1w7J8XCA7CivmpYc+aHXDsnxcIDsKK+alhj55YW98XCA7CivmpYM+aHVpfFwgOwor5qWBPmNoYXxcIDsKK+akvD55xINufFwgOwor5qS7PnnDoG58XCA7CivmpLY+aMOhbnxcIDsKK+aktT5qacSDfFwgOwor5qSzPndlaXxcIDsKK+aksj53xJVpfFwgOwor5qSxPmbDsnV8XCA7CivmpK8+ZHXDs3xcIDsKK+akrj5zZW58XCA7CivmpKU+emhpfFwgOwor5qSdPmd1aXxcIDsKK+akmD5jaMWtfFwgOwor5qSVPmJpbnxcIDsKK+akkT5iZWl8XCA7CivmpIQ+amllfFwgOwor5qSDPmjDoW98XCA7CivmpIA+d8SDbnxcIDsKK+ajvz5uacOofFwgOwor5qO7PmZlbnxcIDsKK+ajuD56b3V8XCA7Civmo7c+em91fFwgOwor5qO2PmzDoWl8XCA7Civmo68+csSVbnxcIDsKK+ajqj55xINufFwgOwor5qOlPmbDoW58XCA7Civmo54+aMO6bnxcIDsKK+ajlz56xINvfFwgOwor5qOUPmTDoGl8XCA7Civmo5M+cMWPdXxcIDsKK+ajkT5ww6FpfFwgOwor5qOQPmbElWl8XCA7Civmo44+YsOgaXxcIDsKK+aivj5sw6FpfFwgOwor5qK9PnR1b3xcIDsKK+aivD5kxINvfFwgOwor5qK2PnfElWl8XCA7CivmorE+a8WtbnxcIDsKK+aiqz5jZW58XCA7Civmoqo+ZMOydXxcIDsKK+aipD5mw6lufFwgOwor5qKjPmPDqW58XCA7Civmopw+amnDoXxcIDsKK+aimz5udcOzfFwgOwor5qKaPnfEg258XCA7CivmopY+YsOoaXxcIDsKK+ailT5yw6hufFwgOwor5qKUPnpoaXxcIDsKK+aikj5ow6FufFwgOwor5qKNPnrDoG98XCA7CivmooQ+ecWPdXxcIDsKK+aigj5xacO6fFwgOwor5qG/PmfEg258XCA7Civmob4+anVufFwgOwor5qG9PnfElW58XCA7Civmobo+bGnFrXxcIDsKK+ahtT5ydcStfFwgOwor5qGzPmLDqG58XCA7CivmobA+Z3VhfFwgOwor5qGuPmJlaXxcIDsKK+ahrD5zaGF8XCA7Civmoao+eMOtbnxcIDsKK+ahmj5yw6FvfFwgOwor5qGZPm3Ds3V8XCA7CivmoZc+ZHXDsnxcIDsKK+ahlj5kdcWPfFwgOwor5qC7PnNow6x8XCA7CivmoLo+emjErXxcIDsKK+agtj55aW58XCA7CivmoK8+ecWPdXxcIDsKK+agrD56dcOsfFwgOwor5qCoPmppw6l8XCA7CivmoKM+csSVbnxcIDsKK+agoj5ixINpfFwgOwor5qCePmJlbnxcIDsKK+agmT5zaMOofFwgOwor5qCSPnjDum58XCA7CivmoJA+c8WtbnxcIDsKK+aggj5tw6lpfFwgOwor5qCBPmxpxa18XCA7Civmn7s+Y2jDoXxcIDsKK+afuT5zaMOsfFwgOwor5p+4PnBlaXxcIDsKK+aftz56aMO5fFwgOwor5p+1Pnpow6B8XCA7Civmn64+ZHXDsnxcIDsKK+afpj5kw6BufFwgOwor5p+kPnpoYXxcIDsKK+afoz56aMOtfFwgOwor5p+fPm7DoW58XCA7Civmn5s+Z3XDrHxcIDsKK+aflT5tw6BvfFwgOwor5p+LPmTDoGl8XCA7Civmn4k+ZsOhbnxcIDsKK+afiD5ww6FufFwgOwor5p+BPnR1w7N8XCA7Civmnr8+bmnDqHxcIDsKK+aevj5zaMOsfFwgOwor5p66PmR1w7J8XCA7CivmnrQ+Z291fFwgOwor5p6sPm7DoW58XCA7CivmnqE+ZMWPdXxcIDsKK+aenz55w7pufFwgOwor5p6UPnjDum58XCA7CivmnpM+ZMWPdXxcIDsKK+aejz5uw6FufFwgOwor5p6MPmbDqW58XCA7Civmnoo+w6BuZ3xcIDsKK+aegz5qw6xufFwgOwor5p6CPnl1w6h8XCA7Civmnbo+eGlufFwgOwor5p25Pmh1w6B8XCA7Civmnbg+bmnFrXxcIDsKK+adrj5iw6hpfFwgOwor5p2YPmNow6x8XCA7CivmnZQ+ZHXDsnxcIDsKK+adkj5yw6hufFwgOwor5p2LPmZhbnxcIDsKK+acuz5qaXV8XCA7CivmnLk+Z3XErXxcIDsKK+actz5kYW98XCA7CivmnLY+ZHXFj3xcIDsKK+acrj5zaMO5fFwgOwor5pycPnR1bnxcIDsKK+acjz5mxJVpfFwgOwor5pyMPmJhbnxcIDsKK+achj5mZW58XCA7CivmnIU+cWnDqHxcIDsKK+achD55xK1ufFwgOwor5pyDPmh1w6x8XCA7CivmnIE+Y8SDbnxcIDsKK+abuj5jw6FvfFwgOwor5pu4PnNodXxcIDsKK+abtT5tw6FufFwgOwor5puxPnl1ZXxcIDsKK+abrz5jaMO6fFwgOwor5puuPnnEg258XCA7Civmm6o+bHXFj3xcIDsKK+abpD5odcOyfFwgOwor5pujPnnDoG58XCA7Civmm6E+ZGnDqXxcIDsKK+abkz5iw6BvfFwgOwor5puRPnNlbnxcIDsKK+abjT5ow6BvfFwgOwor5puLPnHErW58XCA7Civmm4o+ZsOoaXxcIDsKK+abhz50w6FufFwgOwor5puDPnTDoGl8XCA7Civmmr0+bMOtbnxcIDsKK+aavD5waWV8XCA7Civmmro+ZMOgbnxcIDsKK+aatT5ow6BufFwgOwor5pqzPmh1w6x8XCA7Civmmq0+aMOgb3xcIDsKK+aarD54acOofFwgOwor5pqrPnrDoG58XCA7Civmmqo+bcSVbnxcIDsKK+aaqT5ndcOsfFwgOwor5pqlPnnDoG58XCA7CivmmqQ+aMOgb3xcIDsKK+aaoD5nxINvfFwgOwor5pqfPmvEg2l8XCA7Civmmp4+aMOgb3xcIDsKK+aanD5qw6xufFwgOwor5pqbPnN1xY98XCA7Civmmpo+ecOhb3xcIDsKK+aalD5uw6FufFwgOwor5pqTPm3DoG98XCA7CivmmpA+d8SVaXxcIDsKK+aajj5sw6FufFwgOwor5pqLPm3ErW58XCA7Civmmok+aHVpfFwgOwor5pqIPnl1bnxcIDsKK+aahj54acOgfFwgOwor5pm9PmzDrW58XCA7Civmmbw+d8SDbnxcIDsKK+aZrD56dcOsfFwgOwor5pmpPnfEg258XCA7Civmmac+aMOgb3xcIDsKK+aZpT5ow6BufFwgOwor5pmjPnpoZXxcIDsKK+aZoj56aMOpfFwgOwor5pmcPmt1bnxcIDsKK+aZmT5qw7lufFwgOwor5pmYPmjDoG58XCA7CivmmZA+Z2FpfFwgOwor5pmKPnpoxK18XCA7CivmmYk+asOsbnxcIDsKK+aZhj5rdWF8XCA7CivmmYI+c2jDrXxcIDsKK+aYuz7DoW5nfFwgOwor5pi3PndlbnxcIDsKK+aYsz5kacOpfFwgOwor5piyPmbDqGl8XCA7CivmmLA+c2jDrHxcIDsKK+aYrD5odW58XCA7CivmmKY+aMOgb3xcIDsKK+aYoj5wxJVpfFwgOwor5piWPnnDoW58XCA7CivmmJE+ccStbnxcIDsKK+aYkD5jdcOyfFwgOwor5piLPmd1w6x8XCA7CivmmIU+amnDqXxcIDsKK+aYhD5ixINufFwgOwor5piBPmLDqGl8XCA7Civml78+aMO5bnxcIDsKK+aXvT50dW58XCA7Civml7w+bcOtbnxcIDsKK+aXuz5tw61ufFwgOwor5pe5PnNow618XCA7Civml7I+dMOhaXxcIDsKK+aXqj54acOpfFwgOwor5pekPmh1w7J8XCA7Civml5s+ZmFufFwgOwor5peZPmZhbnxcIDsKK+aXmD56aMOsfFwgOwor5peIPmxpw7p8XCA7Civmlr8+ecOzdXxcIDsKK+aWvj5sacO6fFwgOwor5pa4Pnpoxa18XCA7CivmlrY+Y2jDuXxcIDsKK+aWtD5sw61ufFwgOwor5pazPnHDrW58XCA7CivmlqY+ecOtbnxcIDsKK+aWoz5jaMO5fFwgOwor5paiPnTFj3V8XCA7Civmlp0+amnEg3xcIDsKK+aWmj5qacSDfFwgOwor5paWPnfElWl8XCA7CivmlpU+bMOhbnxcIDsKK+aWkj5iYW58XCA7Civmlo0+anXDqXxcIDsKK+aWiD5mZWl8XCA7Civmlbg+c2jFrXxcIDsKK+aVrz5odW58XCA7Civmla4+eGnDoXxcIDsKK+aVqj5kdcOzfFwgOwor5pWoPmTFj3V8XCA7CivmlaU+ecOgbnxcIDsKK+aVoD5kdcOzfFwgOwor5pWcPm5pw6h8XCA7CivmlZo+ZHXDs3xcIDsKK+aVlz5iw6BpfFwgOwor5pWTPmR1w7N8XCA7CivmlYo+Y2jDuXxcIDsKK+aVhj5ndcOzfFwgOwor5pWDPm3ErW58XCA7CivmlYI+a8OydXxcIDsKK+aUvT5iYW58XCA7CivmlLw+Z2FufFwgOwor5pS3PmvEg298XCA7CivmlLU+a8SDb3xcIDsKK+aUsT5ndcStfFwgOwor5pSwPmd1w6x8XCA7CivmlKw+bMSDbnxcIDsKK+aUpD50YW58XCA7CivmlKE+Y2hpfFwgOwor5pSfPmrDuW58XCA7CivmlJ4+bHVvfFwgOwor5pSdPnNow6h8XCA7CivmlJw+eGnDqXxcIDsKK+aUlz5tw6lpfFwgOwor5pSVPnNhbnxcIDsKK+aUlD5sw6FufFwgOwor5pSMPmjDoG58XCA7CivmlIg+asO5bnxcIDsKK+aUhT56xINufFwgOwor5pSEPnNodXxcIDsKK+aUgz5odW98XCA7CivmlII+bMOoaXxcIDsKK+aTvj5yxINvfFwgOwor5pO9PmzDvMOofFwgOwor5pO7PnPFj3V8XCA7Civmk7o+YsSDaXxcIDsKK+aTuT5zw7J1fFwgOwor5pO4Pmxpw6h8XCA7Civmk7c+eGnDqXxcIDsKK+aTtD5rdcOyfFwgOwor5pOzPmppw6l8XCA7Civmk7I+emjDrHxcIDsKK+aTrz5iw6xufFwgOwor5pOtPmh1w7J8XCA7Civmk6o+aHXDsnxcIDsKK+aTpT5sxINufFwgOwor5pOjPmTEg298XCA7Civmk6E+dMOhaXxcIDsKK+aTlD5kYW58XCA7Civmk5E+Y2hhfFwgOwor5pOMPmPDoG98XCA7Civmk4M+a3XFj3xcIDsKK+aStD5kdW58XCA7CivmkrM+ccOsbnxcIDsKK+aSsT50dcWPfFwgOwor5pKqPmLDqG58XCA7Civmkqc+anXDqXxcIDsKK+aSpj5jaMSVfFwgOwor5pKjPmTEg258XCA7CivmkqI+ZMSDbnxcIDsKK+aSoT5jYW98XCA7Civmkps+bMStbnxcIDsKK+aSkz5uw6FvfFwgOwor5pKPPnjDum58XCA7Civmkow+Z3XDrHxcIDsKK+aSiT5kdW58XCA7Civmkog+bGFvfFwgOwor5pKGPnBpZXxcIDsKK+aSgz5ndcOsfFwgOwor5pKAPmfDsnV8XCA7Civmkb8+eWlufFwgOwor5pG1PnN1xY98XCA7CivmkbQ+c2h1fFwgOwor5pGzPmtvdXxcIDsKK+aRsT5tw6FufFwgOwor5pGwPm5pw6h8XCA7Civmka8+emjDrHxcIDsKK+aRqz5ndWl8XCA7CivmkaY+aHXDoHxcIDsKK+aRoz56aGF8XCA7CivmkaE+Z8OgaXxcIDsKK+aRnz5sb3V8XCA7CivmkZs+Y2hpfFwgOwor5pGXPnNvdXxcIDsKK+aRkT5ndcOzfFwgOwor5pGNPnN1b3xcIDsKK+aRiT5zb3V8XCA7CivmkYI+c2jDqHxcIDsKK+aQvj56aMOgfFwgOwor5pC7Pm5pw6h8XCA7CivmkLU+d8OobnxcIDsKK+aQsz54acOhfFwgOwor5pCxPmh1w6F8XCA7CivmkK8+dGFvfFwgOwor5pCrPnDDoW58XCA7CivmkKk+amnDqXxcIDsKK+aQoz5tacOofFwgOwor5pCiPmrDrG58XCA7CivmkJ0+cWnFrXxcIDsKK+aQmj54acOpfFwgOwor5pCYPnpoaXxcIDsKK+aQlz5kxINvfFwgOwor5pCWPnnDoW98XCA7CivmkI4+c3VufFwgOwor5pCNPnPFrW58XCA7CivmkIs+Y2jErXxcIDsKK+aQiT5xdcOofFwgOwor5pCHPnHDrG58XCA7CivmkIY+Z8OydXxcIDsKK+aQgz5jaGF8XCA7Civmj74+d8OobnxcIDsKK+aPuj55w6FvfFwgOwor5o+5PmJlaXxcIDsKK+aPtz5jaGF8XCA7Civmj7M+amnDoXxcIDsKK+aPrj5odWl8XCA7Civmj6s+aml1fFwgOwor5o+cPnnEg258XCA7Civmj5M+c2jDrHxcIDsKK+aPkT5uaWV8XCA7Civmj4w+c2FpfFwgOwor5o+LPndlaXxcIDsKK+aPhz5uxINufFwgOwor5o+FPnnDoW58XCA7Civmj4I+aml1fFwgOwor5o6/Pm51w7J8XCA7CivmjrI+amllfFwgOwor5o6vPmvDqG58XCA7Civmjqs+em91fFwgOwor5o6hPmPEg2l8XCA7Civmjp8+bHXElXxcIDsKK+aOnT5odcOyfFwgOwor5o6bPmd1w6B8XCA7CivmjpM+c2jDunxcIDsKK+aOjT5nxa1ufFwgOwor5o6FPmR1b3xcIDsKK+aOhD5sdW58XCA7CivmjoM+c8SDb3xcIDsKK+aNvj5zw6BvfFwgOwor5o28Pm51w7N8XCA7Civmjbk+YsOobnxcIDsKK+aNuD5uaWV8XCA7Civmja8+ZMOhb3xcIDsKK+aNqz5tw6lufFwgOwor5o2oPnNoxJV8XCA7CivmjaY+ccOtbnxcIDsKK+aNpT53w6BufFwgOwor5o2dPnR1b3xcIDsKK+aNnD5zb3V8XCA7CivmjZs+bMO8zIZ8XCA7CivmjZg+esO5bnxcIDsKK+aNlD5qdcOpfFwgOwor5o2RPmd1YXxcIDsKK+aNij5ww7N1fFwgOwor5o2HPmh1w7J8XCA7CivmjYQ+amnDuXxcIDsKK+aNgz5qw7lufFwgOwor5oy/PmNoYXxcIDsKK+aMvj5qaWF8XCA7CivmjLw+bnXDsnxcIDsKK+aMtD5txJVpfFwgOwor5oyxPnN1b3xcIDsKK+aMpj54w7pufFwgOwor5oyXPmp1w6l8XCA7CivmjJU+ZGnDqXxcIDsKK+aMlD5sw7zMhnxcIDsKK+aMkz56aGF8XCA7CivmjJI+bGnDqHxcIDsKK+aMhj5kdcWPfFwgOwor5oyFPmR1xY98XCA7CivmjIQ+a3XDsnxcIDsKK+aMgz56aMOsfFwgOwor5ou7Pmh1aXxcIDsKK+aLuT54acOpfFwgOwor5ou4PmNoxK18XCA7Civmi7U+Y8O6bnxcIDsKK+aLsD5uxK1ufFwgOwor5ourPmjDqW58XCA7Civmi6o+a3XDsnxcIDsKK+aLoT5rdcOyfFwgOwor5oudPmLDoGl8XCA7Civmi4s+cGFvfFwgOwor5ouDPnpow6B8XCA7Civmi4E+amlhfFwgOwor5ouAPmNow7l8XCA7CivmirY+Y2jDrHxcIDsKK+aKrz56aGF8XCA7Civmiq0+ecSDb3xcIDsKK+aKqT50YW58XCA7Civmiqc+emjErXxcIDsKK+aKlD5ww7N1fFwgOwor5oqPPnfDoW58XCA7Civmio4+ecWtbnxcIDsKK+aKjT53w6BufFwgOwor5oqLPnHDrG58XCA7CivmioY+d8OobnxcIDsKK+aKgT55xINufFwgOwor5om9PmTDuW58XCA7Civmibo+emjErXxcIDsKK+aJtD5qacOhfFwgOwor5omyPnBhbnxcIDsKK+aJqD5yw6hufFwgOwor5omlPnR1b3xcIDsKK+aJoT5jaMStfFwgOwor5omgPmNoYXxcIDsKK+aJnj5nxINufFwgOwor5omXPnrDoGl8XCA7CivmiYo+ecSDbnxcIDsKK+aIvD5txINvfFwgOwor5oi6PnNow6x8XCA7CivmiK0+ecSDbnxcIDsKK+aIpD5nw6BpfFwgOwor5oijPmt1w618XCA7CivmiKA+c2jDrHxcIDsKK+aInj5qacOhfFwgOwor5oidPnrDqWl8XCA7CivmiJw+ZGnDqXxcIDsKK+aIiT55dcOofFwgOwor5oiEPmp1w6l8XCA7CivmiIE+bsSDbnxcIDsKK+aHvj5zaMOofFwgOwor5oe2PmzEg258XCA7Civmh7E+bWnDqHxcIDsKK+aHsD5sacO6fFwgOwor5oeuPnnFj3V8XCA7Civmh6s+emjDrXxcIDsKK+aHqD55YW58XCA7Civmh6c+bnXDsnxcIDsKK+aHpT56aMOsfFwgOwor5oejPm3DqG58XCA7Civmh6I+bMOhbnxcIDsKK+aHnz5kdcOsfFwgOwor5oebPmRhaXxcIDsKK+aHmj55w6xufFwgOwor5oeYPmNow6x8XCA7Civmh5c+eGnDoHxcIDsKK+aHlj5ndWF8XCA7Civmh5U+eWFufFwgOwor5oePPmrDuW58XCA7Civmh40+bMStbnxcIDsKK+aHhz5rxJVufFwgOwor5oeGPmPEg298XCA7Civmh4Q+ccOtbnxcIDsKK+aHgz5xw61ufFwgOwor5oeAPnfDoGl8XCA7Civmhrs+dMSDbnxcIDsKK+aGuj5kw6BufFwgOwor5oa5Pm7DoW98XCA7CivmhrM+dMSDbnxcIDsKK+aGsD5qdcOpfFwgOwor5oavPmPEg258XCA7Civmhqs+bcStbnxcIDsKK+aGpj5sw6BvfFwgOwor5oalPmzDoW98XCA7CivmhqQ+ZsOobnxcIDsKK+aGoz5mw6FufFwgOwor5oagPmp1w6l8XCA7Civmhp4+ZHXDrHxcIDsKK+aGnD5kdcWPfFwgOwor5oabPnTDoW58XCA7Civmhpo+ZMOgbnxcIDsKK+aGlz55w6xufFwgOwor5oaWPnnDrG58XCA7CivmhpM+aHXDrHxcIDsKK+aGkj5rdcOsfFwgOwor5oaPPmNow6x8XCA7Civmhoo+YsOoaXxcIDsKK+aGhz5mYW58XCA7CivmhoQ+emjDrHxcIDsKK+aGgj55b3V8XCA7Civmhbo+bMOzdXxcIDsKK+aFuT56aMOtfFwgOwor5oW0Pnpow6l8XCA7CivmhbI+bcOhbnxcIDsKK+aFrT55w6xufFwgOwor5oWsPmrErW58XCA7CivmhaY+asOsbnxcIDsKK+aFpT56w6BvfFwgOwor5oWkPnF1w6h8XCA7CivmhZ4+Y8Ogb3xcIDsKK+aFnD5txK1ufFwgOwor5oWbPmN1w618XCA7CivmhZo+Y8OhbnxcIDsKK+aFmT5jw6FufFwgOwor5oWYPmPEg258XCA7CivmhZc+Y2jDrHxcIDsKK+aFlj5ndcOzfFwgOwor5oWNPnnDuW58XCA7CivmhYs+dMOgaXxcIDsKK+aFhz55aW58XCA7CivmhYY+dGFvfFwgOwor5oWFPnNhb3xcIDsKK+aFgT5ow7lufFwgOwor5oWAPnhpw6l8XCA7CivmhL4+a8OgaXxcIDsKK+aEvD5jxINvfFwgOwor5oS7PnPDuW58XCA7CivmhLo+Y8SDb3xcIDsKK+aEtz5rxINpfFwgOwor5oS2Pnhpw6l8XCA7CivmhK4+ecOhb3xcIDsKK+aEqj55w7pufFwgOwor5oSoPnF1w6h8XCA7CivmhKI+c2FpfFwgOwor5oSePm51w7J8XCA7CivmhJ0+ecSDbnxcIDsKK+aEnD5xacOofFwgOwor5oSXPm3DsnV8XCA7CivmhJQ+eWlufFwgOwor5oSSPmvDoGl8XCA7CivmhIc+d8SVaXxcIDsKK+aEhD50b3V8XCA7CivmhII+YsOoaXxcIDsKK+aDvT5odW58XCA7Civmg7U+ZGnDqHxcIDsKK+aDsj55w7lufFwgOwor5oOxPm7Eg298XCA7Civmg6M+YsSVaXxcIDsKK+aDoj5ydcStfFwgOwor5oObPmh1bnxcIDsKK+aDlz5uaWV8XCA7Civmg5Q+dMOhbnxcIDsKK+aDkD5kw6BufFwgOwor5oOPPmzDrW58XCA7Civmg40+amlufFwgOwor5oOIPmd1xY98XCA7Civmg4c+ZHVufFwgOwor5oODPmt1bnxcIDsKK+aDgj5rxINufFwgOwor5oOAPmzDum58XCA7CivmgrY+bWVufFwgOwor5oKzPmR1w7N8XCA7Civmgqk+bsSDb3xcIDsKK+aCmD5odWl8XCA7Civmgpc+bcOhbnxcIDsKK+aCjz5xacOofFwgOwor5oKOPmjDoG98XCA7Civmgos+bMOsbnxcIDsKK+aCij56aMOpfFwgOwor5oKIPmppw6h8XCA7CivmgoU+eXXDqHxcIDsKK+aBtT5odcOsfFwgOwor5oGxPnl1w6h8XCA7CivmgaU+Y2jErXxcIDsKK+aBoT5sw6xufFwgOwor5oGdPmppw6F8XCA7CivmgZw+Y2jDrHxcIDsKK+aBmz5odcOtfFwgOwor5oGYPnFpdXxcIDsKK+aBlz5rdcSDfFwgOwor5oGRPmd1xK18XCA7CivmgY8+aMSDb3xcIDsKK+aBjj5kacOpfFwgOwor5oGKPnhpw6l8XCA7CivmgYk+emjErXxcIDsKK+aBhT5sxINvfFwgOwor5oGAPmNoxK18XCA7CivmgLk+dGFufFwgOwor5oCuPnlvdXxcIDsKK+aAoz55w7N1fFwgOwor5oCXPnRpZXxcIDsKK+aAkz5uw6FvfFwgOwor5oCRPmLDoG58XCA7CivmgJA+a8OydXxcIDsKK+aAjD5wZWl8XCA7CivmgIs+bcOtbnxcIDsKK+aAiT5ixINvfFwgOwor5b+5PnNhaXxcIDsKK+W/tj5ow7pufFwgOwor5b+0Pm5pxa18XCA7Civlv7M+dMO6bnxcIDsKK+W/sj50w6BpfFwgOwor5b+wPmN1w6x8XCA7Civlv64+emjDrHxcIDsKK+W/qD53w6BufFwgOwor5b+fPm3DrW58XCA7Civlv54+bcOtbnxcIDsKK+W/mz5mw6FufFwgOwor5b+VPnNow6x8XCA7Civlv5M+Z2FufFwgOwor5b+OPnLDqW58XCA7Civlv4s+Z8SDaXxcIDsKK+W/iD5yw6lufFwgOwor5b+BPmLDoG98XCA7Civlvr4+bcOpaXxcIDsKK+W+uz53w6hpfFwgOwor5b65PmNow6h8XCA7CivlvrY+YmnDqHxcIDsKK+W+sj5jaMOtfFwgOwor5b6rPnfElWl8XCA7CivlvqY+amnEg3xcIDsKK+W+pT5jaMOtfFwgOwor5b6jPmppw6h8XCA7CivlvqI+ZsOydXxcIDsKK+W+oD5sw6FpfFwgOwor5b6fPmzDoWl8XCA7Civlvp0+emjDrHxcIDsKK+W+jz56aMOsfFwgOwor5b29PmNow618XCA7CivlvbU+dHXFj3xcIDsKK+W9sj5jaGl8XCA7Civlvag+Y2hpfFwgOwor5b2lPnnDoG58XCA7CivlvaM+d8OpbnxcIDsKK+W9oD5odcOyfFwgOwor5b2fPmh1w7J8XCA7CivlvZo+aHXDrHxcIDsKK+W9mT5odcOsfFwgOwor5b2PPmp1w6l8XCA7CivlvY4+d2FufFwgOwor5b2NPmt1w7J8XCA7CivlvYg+ZMOgbnxcIDsKK+W9hj5iacOofFwgOwor5b2EPmtvdXxcIDsKK+W8vj5kw6BufFwgOwor5by9PnNow6h8XCA7CivlvLQ+ZHVufFwgOwor5byiPnRhb3xcIDsKK+W8oT5qdcOpfFwgOwor5byaPnR1w618XCA7CivlvJI+c2jDrHxcIDsKK+W8jj5zYW58XCA7CivlvIc+ecSDbnxcIDsKK+W8hT5mw6lufFwgOwor5bu9Pmh1w618XCA7Civlu7w+bsSDaXxcIDsKK+W7uz5odcOtfFwgOwor5bu1PnjDum58XCA7Civlu7Q+ecStbnxcIDsKK+W7qT5sxK1ufFwgOwor5buiPmbDqGl8XCA7Civlu54+eGlufFwgOwor5buaPmNow7p8XCA7Civlu5c+ZMOgaXxcIDsKK+W7lT55w6xufFwgOwor5buUPmzDs3V8XCA7Civlu5A+amnDuXxcIDsKK+W7jz5qacO5fFwgOwor5buNPmrErW58XCA7Civlu4s+c291fFwgOwor5buIPnNow6B8XCA7Civlu4c+bGnDuXxcIDsKK+W7hj5odcOsfFwgOwor5buEPmppw7l8XCA7Civlu4M+ZsOoaXxcIDsKK+W7gD5zb3V8XCA7Civlurs+c2jDuXxcIDsKK+W6sj5sw6FpfFwgOwor5bquPnnDs3V8XCA7Civluqo+Z3XErXxcIDsKK+W6pD56aMOsfFwgOwor5bqiPnpow6x8XCA7Civluo4+amnDqHxcIDsKK+W6jT5iw6BpfFwgOwor5bqJPmTDuW58XCA7Civluog+ccOtbnxcIDsKK+W5uT5nw6BufFwgOwor5bmxPmzDoW58XCA7Civlua8+amnDqXxcIDsKK+W5rj5jaMO6fFwgOwor5bmtPm1pw6h8XCA7Civluak+ZsOpbnxcIDsKK+W5nz56aMOsfFwgOwor5bmXPmd1w7N8XCA7CivluZE+aHVpfFwgOwor5bmPPmppYXxcIDsKK+W5jT5kYW98XCA7CivluYs+cMOhbnxcIDsKK+W5gz53w6lpfFwgOwor5bi/PmjDs3V8XCA7CivluLk+c2jDoHxcIDsKK+W4tj5kw6BpfFwgOwor5bi1Pmppw6B8XCA7CivluLQ+c2hhfFwgOwor5biwPmd1aXxcIDsKK+W4rz5kw6BpfFwgOwor5bisPnHDum58XCA7CivluKs+c2hpfFwgOwor5biiPnFpw6B8XCA7CivluJI+ZMOgaXxcIDsKK+W4jj5kw6BufFwgOwor5biLPnpoxK18XCA7CivluIk+ZmVufFwgOwor5biHPm5pw6h8XCA7Civlt7o+eMO5bnxcIDsKK+W3uT5qxK1ufFwgOwor5be1PnpoaXxcIDsKK+W3sD5xacO6fFwgOwor5bevPnFpw7p8XCA7Civlt6Q+bGllfFwgOwor5becPmd1w6x8XCA7Civlt5o+ecSDbnxcIDsKK+W3mT5uw6FvfFwgOwor5beYPnnEg258XCA7Civlt5c+ecOhbnxcIDsKK+W3lj55w6FufFwgOwor5beOPmt1bnxcIDsKK+W3jD55w6FufFwgOwor5beLPmt1aXxcIDsKK+W3gj5zdcStfFwgOwor5beAPmppZXxcIDsKK+W2vj55xK1ufFwgOwor5ba9Pnl1w6h8XCA7Civltrk+ZMSDb3xcIDsKK+W2tT56dcStfFwgOwor5bawPnhpw6h8XCA7Civltqk+bsOhb3xcIDsKK+W2qD54dcOpfFwgOwor5balPmp1w6l8XCA7CivltqQ+ecOhb3xcIDsKK+W2oj55w6FvfFwgOwor5bahPmd1w6x8XCA7Civltp8+enVufFwgOwor5baePmR1w7J8XCA7Civltpw+amlufFwgOwor5baXPmzDoW98XCA7CivltpY+ecSDbnxcIDsKK+W2lD5xaW58XCA7Civltow+ZMSDb3xcIDsKK+W2iz5kxINvfFwgOwor5baKPnp1xK18XCA7Civltok+enVpfFwgOwor5baGPmPDoW98XCA7CivltoE+bMWPdXxcIDsKK+W1vj5jZW58XCA7Civltb0+ZGnDqXxcIDsKK+W1sz5jdcOzfFwgOwor5bWyPm5pw6h8XCA7Civltac+bGnDunxcIDsKK+W1pT5qacOpfFwgOwor5bWfPmR1aXxcIDsKK+W1mj5xaW58XCA7CivltZc+c3XDrHxcIDsKK+W1lj5jaMOhfFwgOwor5bWVPmzDvMyGfFwgOwor5bWUPnfElWl8XCA7CivltZM+ecOhbnxcIDsKK+W1kj55w6FufFwgOwor5bWRPmp1w6l8XCA7CivltZA+bMOhbnxcIDsKK+W1hT5nYW58XCA7CivltYQ+bcSVaXxcIDsKK+W1gz55xINufFwgOwor5bWBPmthbnxcIDsKK+W1gD56aMO5fFwgOwor5bS+PnnEg298XCA7CivltLw+c2jDrHxcIDsKK+W0uz56aMOsfFwgOwor5bS4PmTDuW58XCA7CivltLc+cWnDunxcIDsKK+W0rz55w61ufFwgOwor5bSrPmp1w6l8XCA7CivltKg+amnDqXxcIDsKK+W0oz53xJVpfFwgOwor5bShPmN1w6x8XCA7CivltJ8+ecOtbnxcIDsKK+W0nD5kdW98XCA7CivltJk+bMO6bnxcIDsKK+W0kT5rdW58XCA7CivltJA+a3VufFwgOwor5bSPPm3DrW58XCA7CivltI0+bMOhaXxcIDsKK+W0iz5odcOhfFwgOwor5bSKPmxpbnxcIDsKK+W0hT5xdcOofFwgOwor5bSBPmvEg258XCA7Civls74+eWlufFwgOwor5bO9Pnhpw6F8XCA7Civls7w+aMOgb3xcIDsKK+Wztj5kxINvfFwgOwor5bOzPnnDs3V8XCA7Civls7E+bsOhb3xcIDsKK+Wzrj5xdW58XCA7Civls6M+ecOhb3xcIDsKK+Wznz55w7J1fFwgOwor5bOXPnfDqWl8XCA7Civls5U+c2jDrXxcIDsKK+WzkD5nYWl8XCA7Civls4w+ZGnDqXxcIDsKK+Wzgz54dcOpfFwgOwor5bOAPnhpw7l8XCA7Civlsrs+Y2jDrXxcIDsKK+Wyrz5wZWl8XCA7Civlsq4+cMOpaXxcIDsKK+WypT5iZWl8XCA7CivlsqQ+eHXDqHxcIDsKK+Wynj56dcOyfFwgOwor5bKdPnp1w7J8XCA7CivlspU+amnDqHxcIDsKK+Wyjj5mZW58XCA7Civlsoo+amnDqXxcIDsKK+Wyhz7DoW5nfFwgOwor5bKGPnnEg298XCA7CivlsoU+YsSDbnxcIDsKK+WygD5jaHV8XCA7Civlsb0+aMOgbnxcIDsKK+Wxuz5yw6hufFwgOwor5bGuPmNow6h8XCA7Civlsaw+c2jFrXxcIDsKK+Wxqz5qdcOpfFwgOwor5bGpPmp1w6l8XCA7Civlsac+eGnDqHxcIDsKK+Wxnz54acOofFwgOwor5bGdPmbDqGl8XCA7CivlsZo+bMOydXxcIDsKK+WxmD5txINufFwgOwor5bGNPnNoaXxcIDsKK+Wxhj5qacOofFwgOwor5bC3PmdhbnxcIDsKK+Wwtj5nYW58XCA7CivlsLU+dHXDrXxcIDsKK+Wwsj5nYW58XCA7CivlsLA+Y2jElXxcIDsKK+Wwrz5rdcOsfFwgOwor5bCuPmR1w7J8XCA7CivlsK0+ecOhb3xcIDsKK+WwqT5rdcStfFwgOwor5bCXPnNow7p8XCA7CivlsI4+ZMSDb3xcIDsKK+WwjT5kdcOsfFwgOwor5bCMPmTDoG98XCA7CivlsIs+eMO6bnxcIDsKK+Wvvj5kdcOsfFwgOwor5a+2PmLEg298XCA7Civlr7Q+ccOsbnxcIDsKK+Wvsz5ixINvfFwgOwor5a+vPmrDuW58XCA7Civlr60+aHXDrHxcIDsKK+Wvqz54acSVfFwgOwor5a+qPnfElWl8XCA7Civlr6Y+c2jDrXxcIDsKK+Wvoj5xxK1ufFwgOwor5a+aPmLEg298XCA7Civlr5Y+asOsbnxcIDsKK+WvlD5zaMOtfFwgOwor5a+RPnHErW58XCA7Civlr4k+cXXDqHxcIDsKK+WvgT56xINufFwgOwor5a+APmPDoGl8XCA7Civlrrw+a8OydXxcIDsKK+Wutz5iw6xufFwgOwor5a6yPmLEg298XCA7CivlrrE+emjDoHxcIDsKK+WurT5xw7pufFwgOwor5a6pPnNoxK18XCA7Civlrp8+c2jDrXxcIDsKK+Wujj55xINvfFwgOwor5a6NPnLDsnV8XCA7Civlrbw+bmnDqHxcIDsKK+Wtuz5sw6FpfFwgOwor5a24Pnh1w6l8XCA7Civlra0+Y8OgbnxcIDsKK+Wtqz5zdW58XCA7CivlraE+dGFpfFwgOwor5a2ePnjDrG58XCA7CivlrZI+anXDqXxcIDsKK+Wtjz5sxINufFwgOwor5a2OPnpoxa18XCA7CivlrY0+ecOhbnxcIDsKK+WthD5sxINufFwgOwor5ay/PnnDoG58XCA7CivlrL4+bMSDbnxcIDsKK+WsvD5sacWtfFwgOwor5ayxPmPDoW58XCA7CivlrK4+eWFufFwgOwor5aytPm7Eg2l8XCA7CivlrKo+cMOtbnxcIDsKK+Wspz5qw6xufFwgOwor5aygPmPDoW58XCA7CivlrJg+c3XDrHxcIDsKK+WslT5zaMOsfFwgOwor5aySPnfDqGl8XCA7CivlrI8+ZmFufFwgOwor5ayOPmbDoG58XCA7CivlrI0+bcSVaXxcIDsKK+Wsij55w6BufFwgOwor5ayIPnLDoW98XCA7CivlrIc+aHXDrHxcIDsKK+WshT5odcOhfFwgOwor5ayCPnpoaXxcIDsKK+WsgD5ndWl8XCA7Civlq78+aHXDoHxcIDsKK+WruT5tw6FvfFwgOwor5au3PnR1xY98XCA7Civlq7M+cGnDqHxcIDsKK+WrsD5uw6hufFwgOwor5ausPnpoZXxcIDsKK+Wrqj5sw6BvfFwgOwor5auoPmhhbnxcIDsKK+WrpD5qw6xufFwgOwor5auiPmd1aXxcIDsKK+Wrmj5tw6BufFwgOwor5auRPmLDoW98XCA7Civlq5A+bsSDb3xcIDsKK+WrjT50YW98XCA7Civlq4U+Y2hhfFwgOwor5aq/Pmt1w6x8XCA7Civlqrs+cMOhbnxcIDsKK+Wquj5txJVpfFwgOwor5aq5Pmxpw7p8XCA7CivlqrE+ecOhb3xcIDsKK+WqsD56b3V8XCA7Civlqq8+Z3VpfFwgOwor5aquPnRvdXxcIDsKK+WqrD5ixINvfFwgOwor5aqoPmppw7l8XCA7CivlqqY+d8OoaXxcIDsKK+Wqoz5yxINufFwgOwor5aqiPm3DoG98XCA7CivlqqA+dHXFj3xcIDsKK+Wqnz54acOofFwgOwor5aqdPnFpdXxcIDsKK+WqmT53ZWl8XCA7Civlqpg+amllfFwgOwor5aqOPmppxJV8XCA7Civlqow+bcOhb3xcIDsKK+WqiD5odWl8XCA7Civlqoc+cWlufFwgOwor5aqFPmRhbnxcIDsKK+WqhD5txJVpfFwgOwor5aqDPnLDs3V8XCA7CivlqoE+d2VpfFwgOwor5am+PnRvdXxcIDsKK+WpvT5qacSDfFwgOwor5am7Pm7DoG58XCA7Civlqbk+ecSDb3xcIDsKK+Wpsz5odcOgfFwgOwor5amsPnnDrW58XCA7Civlqas+a3VufFwgOwor5ampPnnDoG58XCA7Civlqag+bMO6bnxcIDsKK+Wpoz55aW58XCA7CivlqZQ+d2VpfFwgOwor5amTPmZlaXxcIDsKK+Wpkj50w6FufFwgOwor5amOPmh1aXxcIDsKK+WpjD5zaMWtfFwgOwor5amHPmPEg2l8XCA7CivlqYQ+cMWPdXxcIDsKK+WpgT5sw7N1fFwgOwor5airPnnDoW58XCA7CivlqKg+aMOgbnxcIDsKK+Wopz50dcOsfFwgOwor5aimPnDDrW58XCA7CivlqKI+aMOhbnxcIDsKK+WooT56aMOsfFwgOwor5aiePm7ElWl8XCA7CivlqJ0+cGVpfFwgOwor5aiaPm7DoW58XCA7CivlqJU+bMOgaXxcIDsKK+WnvT5ndcStfFwgOwor5ae8PmNoxK18XCA7Civlp7g+ecOhbnxcIDsKK+Wntz55w7J1fFwgOwor5ae2PnnEg258XCA7Civlp7U+cMOoaXxcIDsKK+WntD5sacOofFwgOwor5aeyPnnDoG58XCA7Civlp7E+a3VhfFwgOwor5aewPmp1bnxcIDsKK+Wnqj56aMOtfFwgOwor5aekPmfDsnV8XCA7Civlp6E+a3XDsnxcIDsKK+Wnnz5nYWl8XCA7Civlp5k+csOobnxcIDsKK+Wnjz5tw6FufFwgOwor5aeMPnLEg258XCA7Civlp4U+YsOgbnxcIDsKK+WnhD5tw61ufFwgOwor5aa3Pnpow618XCA7CivlprU+dMWPdXxcIDsKK+Wmsz5uxINpfFwgOwor5aaiPmbDqW58XCA7CivlpqE+eGlufFwgOwor5aafPnnDoG58XCA7Civlppw+eXXDqHxcIDsKK+Wmmj5wZWl8XCA7Civlppg+ecO6bnxcIDsKK+Wmjz53w6hufFwgOwor5aaOPnhpw6h8XCA7Civlpok+ZGFufFwgOwor5aW/PmbDoG58XCA7Civlpb4+cMOoaXxcIDsKK+WlvD5jaMOgfFwgOwor5aW7Pm7DoW58XCA7Civlpbo+amnFrXxcIDsKK+Wlsj5kdcWPfFwgOwor5aWvPmh1w7J8XCA7Civlpa4+ZsOobnxcIDsKK+WlrT5zaMOsfFwgOwor5aWrPnl1bnxcIDsKK+Wlqj5kdcOzfFwgOwor5aWkPnDEg258XCA7CivlpZ4+eMO5bnxcIDsKK+WlnD5mxJVpfFwgOwor5aWZPmLElW58XCA7CivlpZM+c2hlfFwgOwor5aWSPmthaXxcIDsKK+Wlij54acOpfFwgOwor5aS+PmppYXxcIDsKK+WkvT55w7lufFwgOwor5aS1Pmppw6F8XCA7CivlpLM+dMOgaXxcIDsKK+Wksj5ixJVufFwgOwor5aSwPmfEg298XCA7CivlpKM+ZMOgaXxcIDsKK+WkoD5nw7J1fFwgOwor5aSbPmR1b3xcIDsKK+WkmD5txINvfFwgOwor5aSTPnhpw6B8XCA7CivlpJI+bsOhb3xcIDsKK+Wkjj5qacSDfFwgOwor5aSLPnF1bnxcIDsKK+Wkij5zdWl8XCA7Civlo78+enVufFwgOwor5aO8PmvFrW58XCA7Civlo7g+a8WtbnxcIDsKK+Wjsj5tw6BpfFwgOwor5aOoPmzDqWl8XCA7Civlo6Y+eHVufFwgOwor5aOjPmzDrW58XCA7Civlo6E+cnXDrHxcIDsKK+WjnT53w6lpfFwgOwor5aOcPnTDoW58XCA7Civlo5s+ecOhbnxcIDsKK+WjmD5sxJVpfFwgOwor5aOUPmTEg298XCA7Civlo5A+aHXDsnxcIDsKK+Wjjz5oxINufFwgOwor5aOOPnh1bnxcIDsKK+WjiD5sxINufFwgOwor5aOHPnTDoW58XCA7Civlor4+a8SVbnxcIDsKK+Wiuz5iZWl8XCA7CivlorU+dMOhbnxcIDsKK+Wisz5mw6lufFwgOwor5aKvPmR1w7J8XCA7Civloq4+ZHXDsnxcIDsKK+WirT5odWl8XCA7Civloqs+enVufFwgOwor5aKqPmR1bnxcIDsKK+Wipz5xdcOofFwgOwor5aKmPmbDoW58XCA7CivlopU+ecOgbnxcIDsKK+WilD5jdWl8XCA7CivlopA+asStbnxcIDsKK+Wijj5ndW98XCA7Civloow+emhpfFwgOwor5aKIPmvDoG58XCA7Civlob8+bMWPdXxcIDsKK+Whuz5kacOpfFwgOwor5aG6Pm3DqWl8XCA7Civloa8+bGnDuXxcIDsKK+Whrj54acOofFwgOwor5aGtPndlbnxcIDsKK+Whqj5rxINufFwgOwor5aGpPnnDoW58XCA7CivloaQ+eHVufFwgOwor5aGgPmR1aXxcIDsKK+WhmT5xdcOofFwgOwor5aGSPnNow618XCA7CivloY8+a8SDaXxcIDsKK+Wguj5qacOofFwgOwor5aC3PnnDrG58XCA7CivloLY+dHXDs3xcIDsKK+Wgsz5tw6lpfFwgOwor5aCxPmLDoG98XCA7CivloK8+ecOhb3xcIDsKK+Wgpj5qaWV8XCA7CivloKI+YsSDb3xcIDsKK+WgnT5ndW98XCA7CivloJo+aMO6bnxcIDsKK+Wggz5rdW58XCA7Civln74+YsOgbnxcIDsKK+Wftz56aMOtfFwgOwor5Z+1PmR1xY98XCA7Civln7M+a8SDbnxcIDsKK+WfsT5zaMO6fFwgOwor5Z+wPmPDoGl8XCA7Civln64+dMOgbnxcIDsKK+WfqD5sxa1ufFwgOwor5Z+mPnfEg258XCA7Civln6M+c3XDrHxcIDsKK+WfoT5iZWl8XCA7Civln5M+bGnDqHxcIDsKK+WfkT56aMOpfFwgOwor5Z+QPmppbnxcIDsKK+WfiT5qacOhfFwgOwor5Z+IPnjDuW58XCA7Civln4Y+bcOhaXxcIDsKK+WfgT5jw6lufFwgOwor5Z6+PmjDoG58XCA7Civlnr0+ecOsbnxcIDsKK+Weuj5wZWl8XCA7CivlnqU+eGnDqXxcIDsKK+Wenj5jaMOhfFwgOwor5Z6dPmd1xK18XCA7Civlnpw+ZHXFj3xcIDsKK+Wemj55w6FvfFwgOwor5Z6WPmR1aXxcIDsKK+WelT5ow7J1fFwgOwor5Z6UPnlpbnxcIDsKK+WekT5jaMStfFwgOwor5Z6JPnDDoW98XCA7CivlnoE+emjDrHxcIDsKK+Wdvj56aMO5fFwgOwor5Z25Pnh1w6h8XCA7CivlnbU+cWl1fFwgOwor5Z2sPmd1w6B8XCA7Civlnac+emhpfFwgOwor5Z2iPnDEg258XCA7CivlnYs+ZsOobnxcIDsKK+WdiT50w7pufFwgOwor5Z2GPmbDqW58XCA7CivlnYU+ccStbnxcIDsKK+WdhD50w7N1fFwgOwor5Z2DPnh1bnxcIDsKK+WdgT56aMStfFwgOwor5Zy/Pmppw6F8XCA7CivlnLY+cWnDoHxcIDsKK+Wcmj5odcOsfFwgOwor5ZyZPmzDvMOofFwgOwor5ZyNPnfDqWl8XCA7CivlnIs+Z3XDs3xcIDsKK+Wchz5sw7pufFwgOwor5ZyFPmjDoW58XCA7CivlnII+aMO5bnxcIDsKK+WcgT55w61ufFwgOwor5ZyAPmd1w7N8XCA7Civlm7w+dGFpfFwgOwor5Zu7Pmd1w7N8XCA7Civlm7c+anVufFwgOwor5Zu2Pmd1w7N8XCA7Civlm6w+aHXDrXxcIDsKK+WbqT55w7lufFwgOwor5ZucPm7DrW58XCA7Civlm5k+eWlufFwgOwor5ZuYPmh1w618XCA7Civlm5M+bmnDqHxcIDsKK+Wbkj5sw6FufFwgOwor5ZuRPnpoxa18XCA7Civlm4s+esOgbnxcIDsKK+WbiT5sdW98XCA7Civlm4E+bmnDqHxcIDsKK+Wavz5odcOyfFwgOwor5Zq0PnnDoW58XCA7CivlmrI+ZHXFj3xcIDsKK+WarD5ww61ufFwgOwor5ZqqPmTDoG58XCA7CivlmqU+ecOgbnxcIDsKK+WaoD5sacO6fFwgOwor5ZqePnpow6l8XCA7Civlmpo+ecOtbnxcIDsKK+WamT5uacOofFwgOwor5ZqYPnlvdXxcIDsKK+Walj5odcOsfFwgOwor5ZqNPmrDrG58XCA7Civlmok+ZHVvfFwgOwor5ZqHPnhpw6B8XCA7CivlmoQ+aHXDsnxcIDsKK+Wagj5sw6BufFwgOwor5Zm/Pnp1xK18XCA7Civlmb4+eWlufFwgOwor5Zm4PmR1bnxcIDsKK+WZtz5oZW58XCA7CivlmbU+ZMOgb3xcIDsKK+WZtD5wZW58XCA7CivlmbA+eHXDqXxcIDsKK+WZpj55dcSVfFwgOwor5ZmhPmRhbnxcIDsKK+WZnj55xINufFwgOwor5ZmbPm5pw6h8XCA7CivlmZo+eMO6bnxcIDsKK+WZlj55w61ufFwgOwor5ZmVPmh1aXxcIDsKK+WZkT5ow6FvfFwgOwor5ZmLPnR1bnxcIDsKK+WZiT5kw6BufFwgOwor5ZmGPnrEg258XCA7CivlmYU+aHVpfFwgOwor5ZmEPmNoaXxcIDsKK+WZgz5mYW58XCA7CivlmYI+esWtbnxcIDsKK+WZgD54w7lufFwgOwor5Zi+PmhlaXxcIDsKK+WYvT50YW58XCA7CivlmLw+eGnDuXxcIDsKK+WYtz5ow6FvfFwgOwor5ZizPmt1w6x8XCA7CivlmK4+bMOhb3xcIDsKK+WYqz5yw6FufFwgOwor5ZipPmh1YXxcIDsKK+WYoT5jaMOsfFwgOwor5ZiVPmRhaXxcIDsKK+WYkz5ndW98XCA7CivlmJI+aHXDrHxcIDsKK+WYjT5sw7N1fFwgOwor5ZiHPnNhbnxcIDsKK+WYhj50w6BufFwgOwor5ZiFPmvEg2l8XCA7Civll78+dMSDbnxcIDsKK+WXuz56aGV8XCA7Civll7o+Y3VpfFwgOwor5ZeuPnPDoGl8XCA7Civll6o+ccOtbnxcIDsKK+WXqT5zdcWPfFwgOwor5ZenPmppYXxcIDsKK+WXoD5sdcOyfFwgOwor5ZeQPmjDoGl8XCA7Civll48+Y2hhfFwgOwor5ZeCPnnDoW98XCA7Civll4A+aHXDsnxcIDsKK+WWvz5zw6BvfFwgOwor5Za8Pmppw6l8XCA7Civllrk+a3XDrXxcIDsKK+WWtD5ww6hufFwgOwor5ZawPmNhbnxcIDsKK+WWrz5jaGF8XCA7Civllq0+ecOgbnxcIDsKK+WWqz5jaGl8XCA7CivllqY+bmnDqHxcIDsKK+WWoj5zaMOgfFwgOwor5ZahPnfElWl8XCA7Civllpc+ecWtbnxcIDsKK+WWkz55YW98XCA7CivllpA+ecOsbnxcIDsKK+WWjj53YWl8XCA7Civllow+bnXDsnxcIDsKK+WWhj56aMOpfFwgOwor5ZW/PmTDoG58XCA7CivllbE+anXDqXxcIDsKK+WVsD5sdW98XCA7Civlla8+Z3XFjXxcIDsKK+WVqz56aMSVfFwgOwor5ZWpPmd1w6B8XCA7CivllaA+emjDqXxcIDsKK+WVmz5jdcOsfFwgOwor5ZWXPmTDoG58XCA7CivllZE+c2jDoHxcIDsKK+WVjz53w6hufFwgOwor5ZWNPnR1bnxcIDsKK+WViT5sw6FufFwgOwor5ZWFPmzDrW58XCA7CivllYI+bsOydXxcIDsKK+WUuz5sxINpfFwgOwor5ZS6PnFpw6h8XCA7CivllLY+amnDqHxcIDsKK+WUqz53xJVpfFwgOwor5ZSmPnNoYXxcIDsKK+WUnj5kxY91fFwgOwor5ZSaPnHDrG58XCA7CivllJc+ZG91fFwgOwor5ZSTPmNoZXxcIDsKK+WUkj5xacO6fFwgOwor5ZSLPmTDoG58XCA7CivllIo+amnDoXxcIDsKK+WUhT5oYW58XCA7CivllIQ+YsOgaXxcIDsKK+WUgD5ixJNpfFwgOwor5ZO7PmjDoG58XCA7Civlk7k+ZsOzdXxcIDsKK+WTuD5zdWl8XCA7Civlk7Y+bWllfFwgOwor5ZOwPmzDoW98XCA7Civlk6M+cMWPdXxcIDsKK+WToD5ow6BvfFwgOwor5ZOVPnl1xJV8XCA7Civlk4w+Z8OpbnxcIDsKK+WThT5kdW98XCA7Civlkrw+Z3VvfFwgOwor5ZK3PnTDoW98XCA7CivlkrU+a3VhfFwgOwor5ZKyPmhhaXxcIDsKK+WSpT5kacOpfFwgOwor5ZKfPmNow6B8XCA7CivlkpE+cXXDqHxcIDsKK+WSjT5oYWl8XCA7CivlkoU+cMOydXxcIDsKK+WSgz50dW98XCA7CivlkoE+Z8OobXxcIDsKK+WRrD5ndWF8XCA7Civlkas+dGllfFwgOwor5ZGpPnNow6x8XCA7CivlkaU+csSDbnxcIDsKK+WRoT53xJVufFwgOwor5ZGgPnBlbnxcIDsKK+WRnj5zaGl8XCA7CivlkZk+Z3VvfFwgOwor5ZGOPmNoxK18XCA7CivlkYU+bcOpaXxcIDsKK+WRgT5kYWl8XCA7CivlkL8+Z8Ogb3xcIDsKK+WQuj5kb3V8XCA7CivlkKQ+amnDqHxcIDsKK+WQoz5xw6xufFwgOwor5ZCiPnHDrG58XCA7CivlkJk+eHVlfFwgOwor5ZCLPmPDuW58XCA7CivlkII+Y2hpfFwgOwor5ZCAPm1pZXxcIDsKK+WPuj5jaMStfFwgOwor5Y+0PnFpw7p8XCA7Civlj6c+Z3XEg3xcIDsKK+WPoT5ydcOsfFwgOwor5Y+ePnfDqGl8XCA7Civlj50+Z8Ogb3xcIDsKK+WPnD5zxY91fFwgOwor5Y+aPmppxIN8XCA7Civlj5M+c2jDrHxcIDsKK+WPhz5kw6BpfFwgOwor5Y+FPmNhbnxcIDsKK+WPhD5jYW58XCA7Civlj4M+Y2FufFwgOwor5Y+APmh1w6x8XCA7Civljr0+bMSVaXxcIDsKK+WOuT5xacO6fFwgOwor5Y64PmzDrW58XCA7CivljrQ+ecSDbnxcIDsKK+WOsz55w6FufFwgOwor5Y6xPmzDoW58XCA7Civljq0+ecOgbnxcIDsKK+WOrD5ndcStfFwgOwor5Y6qPnHDrW58XCA7CivljqE+eGnDoHxcIDsKK+WOnj5mw6hpfFwgOwor5Y6cPnp1aXxcIDsKK+WOmT5zaMOofFwgOwor5Y6UPnpow6x8XCA7Civljo8+emjEg3xcIDsKK+WOjj56aMStfFwgOwor5Y6IPmjEg258XCA7Civljoc+emjDqXxcIDsKK+WNuz5xdcOofFwgOwor5Y22PnNow6x8XCA7Civljaw+w6FuZ3xcIDsKK+WNqj5qacOpfFwgOwor5Y2oPnhpw6h8XCA7CivljZg+ZGFufFwgOwor5Y2UPnhpw6l8XCA7CivljZA+d8OgbnxcIDsKK+WNjT53w6BufFwgOwor5Y2LPnNow6x8XCA7CivljYI+eMOsbnxcIDsKK+WMtj5qacO5fFwgOwor5YyxPmt1w6x8XCA7CivljLA+ZGFufFwgOwor5YyvPmh1w6x8XCA7CivljK0+Z3XErXxcIDsKK+WMrD50w7N1fFwgOwor5YypPmZlaXxcIDsKK+WMpz5xacOofFwgOwor5YybPmppw7l8XCA7CivljJg+bsSDb3xcIDsKK+WMkz5qacO5fFwgOwor5YyLPnTDoW98XCA7CivljIQ+Z8OgaXxcIDsKK+WMgz5nw6BpfFwgOwor5Yu9PmLDoG98XCA7Civli7w+aml1fFwgOwor5Yu7PnnDum58XCA7Civli7k+YmFvfFwgOwor5Yu2PmNow6h8XCA7Civli7M+eHVufFwgOwor5YuyPnh1bnxcIDsKK+WLsT5tw6BpfFwgOwor5YuvPmRhbnxcIDsKK+WLqz5mw6FufFwgOwor5YuqPmp1w6l8XCA7Civli6I+c2jDrHxcIDsKK+WLnj5sw6FvfFwgOwor5YubPnh1bnxcIDsKK+WLkz5rw6BpfFwgOwor5YuRPmzDoGl8XCA7Civli48+cMWPdXxcIDsKK+WLhT5jaMOsfFwgOwor5YuEPm3ErW58XCA7Civli4I+Y2jDrHxcIDsKK+WLgT5qw6xufFwgOwor5Yq9Pmxpw6h8XCA7Civlirw+amnDqXxcIDsKK+WKuj5tw7N1fFwgOwor5Yq2PmrDrG58XCA7CivlirQ+bMOhb3xcIDsKK+WKrz56aHV8XCA7Civliqc+emjErXxcIDsKK+WKpj54acOpfFwgOwor5YqkPmrDrG58XCA7Civlipo+emjDunxcIDsKK+WKlT56aMOtfFwgOwor5YqQPmh1b3xcIDsKK+WKjD5ndcOsfFwgOwor5YqKPmd1w6x8XCA7Civliok+bGnDunxcIDsKK+WKhD56aMOhfFwgOwor5YqDPmh1w6B8XCA7CivlioI+anXDqXxcIDsKK+WKgD5ndWF8XCA7Civlib4+a291fFwgOwor5Ym7PmbDs3V8XCA7CivlibQ+a8SDaXxcIDsKK+WJsz56aGF8XCA7Civlia4+Z3XEg3xcIDsKK+WJqz5kdcOzfFwgOwor5YmoPmh1w7J8XCA7CivliaI+YmFvfFwgOwor5YmfPmR1b3xcIDsKK+WJlT5mw6hpfFwgOwor5YmSPmN1w7J8XCA7CivliY4+Y2jDoHxcIDsKK+WJiT5jdcOyfFwgOwor5YmGPmdlbnxcIDsKK+WJhT5sw7N1fFwgOwor5Yi8Pmppw6l8XCA7CivliLQ+ZHXDsnxcIDsKK+WIsj5rdWl8XCA7CivliK8+Z2VufFwgOwor5YinPmppw6l8XCA7CivliKY+amnDqXxcIDsKK+WIpT5iacOpfFwgOwor5YihPm3ErW58XCA7CivliJQ+anXDqXxcIDsKK+WIkD5kxINufFwgOwor5YiMPmPFrW58XCA7CivliIQ+csOobnxcIDsKK+WIgj5kYW98XCA7Civlh74+aMOhbnxcIDsKK+WHsj5nYW58XCA7Civlh7E+a8SDaXxcIDsKK+WHpj5jaMWtfFwgOwor5YejPmbDoW58XCA7Civlh6I+ZsOhbnxcIDsKK+WHnD5sxK1ufFwgOwor5YeaPmrDrG58XCA7Civlh5k+ZHXDs3xcIDsKK+WHlz5jdcOtfFwgOwor5YeQPnlpbnxcIDsKK+WHjj5nw6BufFwgOwor5YeCPm3ElWl8XCA7Civlh4E+c2jDuXxcIDsKK+WGvj54acOhfFwgOwor5Ya6Pm3ErW58XCA7Civlhrg+cMOgbnxcIDsKK+WGrT50w6FpfFwgOwor5YapPnhpxJV8XCA7CivlhqY+a8OydXxcIDsKK+WGnz5zaMOsfFwgOwor5YaaPmvEg258XCA7Civlhpg+ecOtbnxcIDsKK+WGkz5nw7J1fFwgOwor5YaQPm3DoG98XCA7Civlho4+Z3XEg3xcIDsKK+WGhz5txINvfFwgOwor5YaEPnLEg258XCA7CivlhoM+bWFvfFwgOwor5YWqPnNow7l8XCA7Civlhac+bsOoaXxcIDsKK+WFoT5ixINpfFwgOwor5YWgPmRvdXxcIDsKK+WFnj5tw6FvfFwgOwor5YWdPmZlbnxcIDsKK+WFmT5zaMOtfFwgOwor5YWYPnNoxK18XCA7CivlhZc+ecSDbnxcIDsKK+WFjD5kdcOsfFwgOwor5YWKPmR1w6x8XCA7CivlhYI+emFufFwgOwor5YS9PmzElWl8XCA7CivlhLw+ecSDbnxcIDsKK+WEuj5udcOzfFwgOwor5YS5PnrEg258XCA7CivlhLg+bHXDs3xcIDsKK+WEtj5odcOsfFwgOwor5YS1PnNodXxcIDsKK+WEsj5jaMWtfFwgOwor5YSwPnfElWl8XCA7CivlhKs+aMOhb3xcIDsKK+WEqj55b3V8XCA7CivlhKg+emjDrXxcIDsKK+WEpz56xINufFwgOwor5YSkPmLDoG98XCA7CivlhKI+bMO8zIZ8XCA7CivlhKA+bGnDqHxcIDsKK+WEmD5qxK1ufFwgOwor5YSWPmzDoW58XCA7CivlhJM+dMOhaXxcIDsKK+WEkD5iaW58XCA7CivlhI4+esOgaXxcIDsKK+WEij5jaMO5fFwgOwor5YSBPmrDuW58XCA7Civlg78+c8OgaXxcIDsKK+WDuT5qacOgfFwgOwor5YO4PmrDrG58XCA7Civlg7Y+bcStbnxcIDsKK+WDrz5qacSTfFwgOwor5YOqPmp1w6l8XCA7Civlg6g+ZsOobnxcIDsKK+WDpD5kw6BufFwgOwor5YOhPmh1w6x8XCA7Civlg6A+ZmFufFwgOwor5YOePnfElWl8XCA7Civlg5c+bMOhb3xcIDsKK+WDlD53w6hpfFwgOwor5YOTPnR1xK18XCA7Civlg4s+dMOgbnxcIDsKK+WDiD5tw6BufFwgOwor5YOFPmrErW58XCA7Civlg4M+YsOoaXxcIDsKK+WDgj5sw7N1fFwgOwor5YK/PnnDoG58XCA7Civlgrw+aMOgbnxcIDsKK+WCuj5jaMOsfFwgOwor5YK2PmPDsnV8XCA7Civlgq4+Y8Ohb3xcIDsKK+WCqz5sxJVpfFwgOwor5YKqPmNhbnxcIDsKK+WCpD56w6BpfFwgOwor5YKiPmppYXxcIDsKK+WCnj5zdW98XCA7Civlgp0+dMOgbnxcIDsKK+WCnD55w6FvfFwgOwor5YKZPmLDqGl8XCA7Civlgpg+c8SDbnxcIDsKK+WClz5jaMO5fFwgOwor5YKVPmp1w6l8XCA7CivlgpE+amnDqXxcIDsKK+WCkD5ow6BvfFwgOwor5YKLPmfDsnV8XCA7Civlgoo+ecWtbnxcIDsKK+WChD54aWF8XCA7CivlgoI+emjDrHxcIDsKK+WBvT53xJVpfFwgOwor5YG8Pmppw6l8XCA7Civlgbk+YsOoaXxcIDsKK+WBuD50b3V8XCA7CivlgbE+eMO6bnxcIDsKK+WBsD54acOofFwgOwor5YGrPnpow6x8XCA7Civlgac+emhhfFwgOwor5YGkPnnFj3V8XCA7CivlgaM+eWFufFwgOwor5YGgPnnEg298XCA7CivlgZ0+YsOoaXxcIDsKK+WBmz5jaGF8XCA7CivlgZg+a8SDbnxcIDsKK+WBlj5jaMSVfFwgOwor5YGTPmppZXxcIDsKK+WBkD55w6BufFwgOwor5YGJPnfElWl8XCA7CivlgL0+amnDoHxcIDsKK+WAuD5jxINpfFwgOwor5YC3Pm7DoGl8XCA7CivlgLQ+YsOobnxcIDsKK+WAsT5ow7lufFwgOwor5YCrPmzDum58XCA7CivlgKI+amnDqXxcIDsKK+WAoD5zdWl8XCA7CivlgJ0+Z8OgbnxcIDsKK+WAkz5qdcOofFwgOwor5YCRPm3Ek258XCA7CivlgJA+c2h1fFwgOwor5YCIPmzDoWl8XCA7CivlgIc+bMOgaXxcIDsKK+WAhj5sacSDfFwgOwor5YCFPmN1w6x8XCA7CivlgIM+esOhbnxcIDsKK+WAgT5jaMOtfFwgOwor5L+9PnhpbnxcIDsKK+S/uz5iw6hpfFwgOwor5L+3PmbDqGl8XCA7Civkv7Y+Y2jDuXxcIDsKK+S/qz5sw6FpfFwgOwor5L+lPmNoZXxcIDsKK+S/oD54acOhfFwgOwor5L+WPnDEg2l8XCA7Civkv5U+c8OgbnxcIDsKK+S/kj5ow7lufFwgOwor5L+APnNodXxcIDsKK+S+vj5oYW98XCA7Civkvr0+bsOhbnxcIDsKK+S+uz50dW98XCA7Civkvrg+c2jDuXxcIDsKK+S+sz56dcOyfFwgOwor5L6wPmN1w7J8XCA7Civkvq0+asStbnxcIDsKK+S+oj56w6BpfFwgOwor5L6hPmppw6B8XCA7Civkvpo+eMO5bnxcIDsKK+S+mT5jaMOsfFwgOwor5L6YPmNow6B8XCA7CivkvpY+bMO6bnxcIDsKK+S+jD55aW58XCA7Civkvoc+a3XEg3xcIDsKK+S+hj5sw6FpfFwgOwor5L6FPmdhaXxcIDsKK+S+gj50dW98XCA7Civkvbk+Z3XErXxcIDsKK+S9uD5odcOzfFwgOwor5L23PmjElW58XCA7Civkvao+aHXDrXxcIDsKK+S9hz56aMO5fFwgOwor5L2FPm3DoGl8XCA7CivkvYQ+YsOobnxcIDsKK+S8sz5ww6BufFwgOwor5LypPnjDrG58XCA7CivkvKg+d8OoaXxcIDsKK+S8oT5jaGV8XCA7CivkvJw+Y3XDrHxcIDsKK+S8lD5kxINufFwgOwor5LyTPmJlaXxcIDsKK+S8kj5qw6xufFwgOwor5LyIPnjErW58XCA7CivkvIY+d8OobnxcIDsKK+S8hT5kw7lufFwgOwor5LyCPnDDqGl8XCA7Civku7w+YmlufFwgOwor5Lu4PnLDqW58XCA7Civku7Q+amnDoHxcIDsKK+S7rz7DoW5nfFwgOwor5LuuPmppxIN8XCA7Civku60+csOobnxcIDsKK+S7oD5nw6FufFwgOwor5LubPnR1b3xcIDsKK+S7kD5zxINufFwgOwor5Lq5PnfElWl8XCA7Civkurg+ZHXFj3xcIDsKK+S6tj5kxINufFwgOwor5Lq0PnnDsnV8XCA7CivkuqA+dMOzdXxcIDsKK+S6mT5nw6hufFwgOwor5LqXPnN1w6x8XCA7Civkuoo+c2jDrHxcIDsKK+S6hT5qdcOpfFwgOwor5LqDPmzDrW58XCA7CivkuoE+Z2FufFwgOwor5LqAPmd1aXxcIDsKK+S5vz5jaMOsfFwgOwor5Lm5PmdhbnxcIDsKK+S5tz5zaGF8XCA7CivkubU+ecSDbnxcIDsKK+S5tD54dcOpfFwgOwor5LmtPnNow618XCA7Civkuas+amlhfFwgOwor5LmoPnNoxK18XCA7CivkuaM+ZGl1fFwgOwor5LmiPmfDoGl8XCA7CivkuZo+ecStbnxcIDsKK+S5hj5qacWtfFwgOwor5Li2Pnpoxa18XCA7CivkuLU+d8OpaXxcIDsKK+S4rz5qacOofFwgOwor5LipPmppdXxcIDsKK+S4oz55xY91fFwgOwor5LigPnFpdXxcIDsKK+S4nz5kaXV8XCA7CivkuJc+c2jDrHxcIDsKK+S4hT53w6BufFwgOwor5LiCPmvEg298XCA7CivktrU+Y2jDrXxcIDsKK+S2sz55dcOofFwgOwor5LayPm7DoW58XCA7Civktq4+ecOhbnxcIDsKK+S2qz5rxINufFwgOwor5LaqPmNow6F8XCA7Civktqc+ecSDb3xcIDsKK+S2pD5odcOhfFwgOwor5LahPnNow618XCA7Civktp0+cWnDoHxcIDsKK+S2lj5qw6xufFwgOwor5LaUPmNow618XCA7Civkto4+c2jDoHxcIDsKK+S2jD5ww6BvfFwgOwor5LaKPm55w7l8XCA7Civktok+bGnDunxcIDsKK+S2gz5ow6FufFwgOwor5LW/PnRpw6h8XCA7CivktbU+emjDoXxcIDsKK+S1tD55w7lufFwgOwor5LWzPnfDqGl8XCA7Civkta0+emjDqHxcIDsKK+S1qj5nw7lufFwgOwor5LWnPnrDoGl8XCA7CivktaY+eGnDqHxcIDsKK+S1pT5zaMOofFwgOwor5LWiPm3DqGl8XCA7CivktZ8+Z8SDbnxcIDsKK+S1mj50xINvfFwgOwor5LWZPnpoxIN8XCA7CivktZg+c2jDoHxcIDsKK+S1jz5sxINvfFwgOwor5LWLPnfElWl8XCA7CivktYk+dMOzdXxcIDsKK+S1gj56aMOtfFwgOwor5LWAPnN1xY98XCA7CivktL4+Y3XDs3xcIDsKK+S0vT5iw6BpfFwgOwor5LS5Pmd1xY98XCA7CivktLc+aMO6bnxcIDsKK+S0tD50acOofFwgOwor5LSxPnR1w7N8XCA7CivktLA+c2jDunxcIDsKK+S0rT5jw6FpfFwgOwor5LSmPnLDqW58XCA7CivktKA+ecSDb3xcIDsKK+S0lT5sacOofFwgOwor5LSRPmRpw6l8XCA7CivktJA+YsSDb3xcIDsKK+S0jz55w6BufFwgOwor5LSOPmzElWl8XCA7CivktIU+ZsOpbnxcIDsKK+S0gz5uw6FvfFwgOwor5LO/PmzDoW58XCA7Civks7s+Y8OhbnxcIDsKK+Szuj55w6BufFwgOwor5LO5PmvDsnV8XCA7Civks7U+Y2jDrHxcIDsKK+SzsD5ixINvfFwgOwor5LOrPmt1w618XCA7Civks6c+aMOzdXxcIDsKK+Sznz5rw7J1fFwgOwor5LObPnnDoG58XCA7Civks5Y+bsOoaXxcIDsKK+SzlT5mw7N1fFwgOwor5LOUPmppw7l8XCA7Civks5M+bMSDb3xcIDsKK+SzkT55xY91fFwgOwor5LOPPmd1w6x8XCA7Civks44+amnDuXxcIDsKK+SziT5kw6BufFwgOwor5LOIPmLEg298XCA7Civks4Y+YsOhaXxcIDsKK+SzhT56aMStfFwgOwor5LODPnfEg258XCA7Civks4A+ZGnDqXxcIDsKK+SyvT5kxINvfFwgOwor5LK6PmfDoG58XCA7Civksrk+cMOpaXxcIDsKK+SyuD5qacOofFwgOwor5LKwPnnDuW58XCA7CivksqY+Y2jDoXxcIDsKK+Synz55w6xufFwgOwor5LKaPmzDoGl8XCA7Civkspk+amnDqXxcIDsKK+Sykz55xINufFwgOwor5LKSPnhpw6h8XCA7Civkso8+bMOhb3xcIDsKK+Syjj5uxJVpfFwgOwor5LKLPmPDqW58XCA7Civksoo+dHXFj3xcIDsKK+SyhD5tw61ufFwgOwor5LKDPnrEg298XCA7CivksoE+d8OoaXxcIDsKK+SygD5kacOpfFwgOwor5LG+PmzDs3V8XCA7Civksbs+aHXDoXxcIDsKK+Sxuj5ow6FpfFwgOwor5LGyPnnDoW58XCA7Civksag+emjDrHxcIDsKK+SxpT56aMOtfFwgOwor5LGePmxpw7p8XCA7CivksZw+Y3XDsnxcIDsKK+Sxlj5sacO6fFwgOwor5LGVPm3Ds3V8XCA7CivksZE+eHXDqXxcIDsKK+Sxjz50xY91fFwgOwor5LGLPmTEg258XCA7CivksYQ+amnDqHxcIDsKK+Sxgj55xY91fFwgOwor5LC/PnR1w7N8XCA7CivksL0+YsOoaXxcIDsKK+SwvD54w61ufFwgOwor5LC6Pmppw6h8XCA7CivksK0+bsOydXxcIDsKK+Swqj5tw6hpfFwgOwor5LCpPmNoxJV8XCA7CivksKg+bcOoaXxcIDsKK+SwpT5odcOyfFwgOwor5LChPmNow6x8XCA7CivksJ8+aMO6bnxcIDsKK+Swnj56aMWtfFwgOwor5LCaPnfDqW58XCA7CivksJg+bGnDunxcIDsKK+SwlD5ww6FufFwgOwor5LCQPmzDoW58XCA7CivksI4+Z3XDrHxcIDsKK+Swiz5tw6FufFwgOwor5LCJPnDDoW58XCA7CivksIg+Y2jEg3xcIDsKK+Swhj5yw7N1fFwgOwor5LCEPnNow6x8XCA7CivksII+Y8OgaXxcIDsKK+SwgT5mw6hpfFwgOwor5K+6Pmt1w7J8XCA7Civkr7Y+bcOhbnxcIDsKK+SvtT5uacOofFwgOwor5K+wPmppw6h8XCA7Civkr64+bsOhaXxcIDsKK+SvrD5kdcWPfFwgOwor5K+rPmjDoG98XCA7Civkr6o+a8SDb3xcIDsKK+SvqD5mw6lufFwgOwor5K+jPmd1w6x8XCA7Civkr58+ZHXDrHxcIDsKK+SvnT5zdcStfFwgOwor5K+UPmPDqW58XCA7Civkr5M+a3XDrXxcIDsKK+SvkD5ow6FpfFwgOwor5K+PPmh1w7N8XCA7Civkr44+Z8OgbnxcIDsKK+Svij5xacOgfFwgOwor5K+IPnfDoW58XCA7Civkr4U+bmnDqHxcIDsKK+SvgT5sdcOzfFwgOwor5K+APm5pw6h8XCA7Civkrrw+bMOtbnxcIDsKK+Suuz5jaMOsfFwgOwor5K65PnfDqGl8XCA7CivkrrM+ZsOhbnxcIDsKK+SusT56aMO6fFwgOwor5K6wPmTEg258XCA7Civkrq4+bcOgaXxcIDsKK+Suqz5sw7N1fFwgOwor5K6oPnrEg2l8XCA7Civkrqc+aMOhbnxcIDsKK+Suoj5kacOpfFwgOwor5K6fPnPFj3V8XCA7Civkrp4+Y2jDuXxcIDsKK+SunD5zaMOgfFwgOwor5K6UPnp1xK18XCA7CivkrpE+bMOoaXxcIDsKK+SuiD5jaMOtfFwgOwor5K2+PnR1w7N8XCA7Civkrb0+ccO6bnxcIDsKK+Stuj7DoW5nfFwgOwor5K25PsOhbmd8XCA7Civkrbc+bGnDunxcIDsKK+SttT5mw6FufFwgOwor5K2zPnfDqGl8XCA7CivkrbE+YmnDqXxcIDsKK+StpT54dcOofFwgOwor5K2bPmTDoG58XCA7CivkrZk+asStbnxcIDsKK+StmD55w6BufFwgOwor5K2WPnpow7l8XCA7CivkrY4+eGnDqXxcIDsKK+Stiz5ixINvfFwgOwor5K2JPnN1xK18XCA7CivkrYQ+c2jDrHxcIDsKK+Stgz5yxJVufFwgOwor5K2BPnpow6x8XCA7CivkrYA+eMO5bnxcIDsKK+Ssvz53xJVpfFwgOwor5Ky9PmR1w6x8XCA7CivkrLk+emjDrHxcIDsKK+Sstz5zaMSVfFwgOwor5KyzPmLEg258XCA7CivkrLE+YsOobnxcIDsKK+Ssqz5jxINufFwgOwor5KymPmTDsnV8XCA7CivkrKE+emjDuXxcIDsKK+Ssnz5sacO6fFwgOwor5KyePnTDoW98XCA7CivkrJk+ecOhb3xcIDsKK+SskT53w6hpfFwgOwor5KyQPnfElWl8XCA7CivkrI4+Z3XDs3xcIDsKK+Ssij5xacOofFwgOwor5KyJPmjDoG98XCA7CivkrIg+ZHXDrHxcIDsKK+Ssgj54dcOofFwgOwor5KyAPnnFj3V8XCA7Civkq7w+eHXDqHxcIDsKK+Sruz54dcOpfFwgOwor5Ku4Pm7DoW98XCA7Civkq7Y+ZsOhbnxcIDsKK+SrtD5qw6xufFwgOwor5KuyPmjDoG58XCA7Civkq7A+bMOsbnxcIDsKK+Srrj5jw6FufFwgOwor5KutPmh1w6x8XCA7Civkq6s+bMOzdXxcIDsKK+SrqT5zxINufFwgOwor5KulPmt1xK18XCA7Civkq6A+cMOpaXxcIDsKK+Srnz5ow7pufFwgOwor5KuePnLDoW98XCA7Civkq5s+aMOzdXxcIDsKK+Srlz54acOhfFwgOwor5KuVPnpow6x8XCA7Civkq5I+bcOpbnxcIDsKK+SrkD5sw61ufFwgOwor5KuLPnR1w618XCA7Civkq4k+bcOgb3xcIDsKK+SriD56w6hufFwgOwor5KuHPnLDoW58XCA7Civkq4U+c8OgbnxcIDsKK+Srgj5kdcWPfFwgOwor5KuAPmfElW58XCA7Civkqr0+aMOgb3xcIDsKK+SquT5ww6lpfFwgOwor5Kq4Pm3DrW58XCA7Civkqrc+aMOydXxcIDsKK+Sqsz55xa1ufFwgOwor5KqxPmfEg2l8XCA7Civkqqk+ecOtbnxcIDsKK+SqqD5iw6FvfFwgOwor5KqnPmNow618XCA7CivkqqU+ZGnDqXxcIDsKK+SqpD5mw6FufFwgOwor5KqbPmbDoW58XCA7Civkqpg+d8SVaXxcIDsKK+Sqlz54acOhfFwgOwor5KqRPnR1w7N8XCA7Civkqo0+bMOhbnxcIDsKK+Sqiz53w6hpfFwgOwor5Km/PmbDqW58XCA7Civkqb4+emjDqHxcIDsKK+SptT55w7lufFwgOwor5KmzPnNoxa18XCA7CivkqbE+c2jDuXxcIDsKK+Sppz54acOofFwgOwor5KmlPmTDoG58XCA7CivkqaM+ZHXFj3xcIDsKK+SpoT5qacOhfFwgOwor5KmdPnDDoW98XCA7CivkqZU+w6FuZ3xcIDsKK+SplD5kdcOyfFwgOwor5KmPPm1pw6h8XCA7CivkqYo+d8SDbnxcIDsKK+SpiD5odcOsfFwgOwor5KmDPnNow6x8XCA7CivkqYA+YsOoaXxcIDsKK+Sovj5mxJVpfFwgOwor5Ki9PmbElWl8XCA7CivkqLo+ZHXDrHxcIDsKK+SouD55xK1ufFwgOwor5Ki2PnnFrW58XCA7CivkqLU+ZMOgbnxcIDsKK+SotD5kdcOsfFwgOwor5KiyPm7Ds3V8XCA7CivkqK4+eHXElXxcIDsKK+Soqz5tw6BpfFwgOwor5KiqPm3DoWl8XCA7CivkqKI+ZMOgbnxcIDsKK+SooT5ow6FufFwgOwor5KiZPmPDqW58XCA7CivkqJQ+YsOhb3xcIDsKK+Sokz5sw6lpfFwgOwor5KiQPnFpw6B8XCA7CivkqIw+YsOhb3xcIDsKK+SohD55w6BufFwgOwor5KiBPmNow6h8XCA7Civkp78+cXXDqHxcIDsKK+SnvT5jdcStfFwgOwor5Ke3PnLDs3V8XCA7Civkp7Y+a3XDrXxcIDsKK+Snsj5ow6BufFwgOwor5KewPmjDuW58XCA7Civkp6s+aMOhb3xcIDsKK+Snqj5jaMOofFwgOwor5KemPnfDqWl8XCA7Civkp6U+aHXDrHxcIDsKK+Snmj5ow6BvfFwgOwor5KeSPmzDoWl8XCA7Civkp4I+ZMOgb3xcIDsKK+SngT5jaMO5fFwgOwor5Ka+PnnFrW58XCA7Civkprw+anXDqXxcIDsKK+SmuT5zaMOtfFwgOwor5KaxPmt1xK18XCA7Civkpq8+emjDrHxcIDsKK+SmrD5xdcOofFwgOwor5KaoPmzDoW58XCA7Civkpqc+cWnDqXxcIDsKK+Smpj5xw61ufFwgOwor5KaiPmt1w7J8XCA7CivkpqA+c2jErXxcIDsKK+Smnj5yw7lufFwgOwor5KaaPmh1w7J8XCA7CivkppY+eGnDoXxcIDsKK+SmlD50xINufFwgOwor5KaRPnhpw6h8XCA7Civkpo8+eGnDqHxcIDsKK+SmjD5jaMO5fFwgOwor5KaGPmp1w6l8XCA7Civkpb4+eGnElXxcIDsKK+Sltz56aMOhfFwgOwor5KWxPnhpxJV8XCA7Civkpa4+emjDunxcIDsKK+Slqz50acSVfFwgOwor5KWpPnfDqWl8XCA7Civkpag+bHnDuXxcIDsKK+SlpD5iw6FvfFwgOwor5KWjPnrDoW98XCA7CivkpZs+amnDqXxcIDsKK+SlmT5zdcOsfFwgOwor5KWVPnBpxJV8XCA7CivkpZE+d8OgbnxcIDsKK+SlkD5tw7N1fFwgOwor5KWNPnpow6x8XCA7CivkpYY+asStbnxcIDsKK+Slgz55dcOofFwgOwor5KWBPmjDoW58XCA7CivkpL8+cWnDqHxcIDsKK+Skuz5kdcOyfFwgOwor5KS6PnnErW58XCA7CivkpLc+ecOhbnxcIDsKK+SktT5mw6hpfFwgOwor5KS0PmjDoW58XCA7CivkpLI+Y2jDrHxcIDsKK+SksT5zaMOsfFwgOwor5KSuPnNow6h8XCA7CivkpKo+ZHXFj3xcIDsKK+SkqT5jaMOhfFwgOwor5KSnPmh1w6x8XCA7CivkpKY+eXXDqHxcIDsKK+SkpT5ndcStfFwgOwor5KShPnLEg258XCA7CivkpJ4+ecWtbnxcIDsKK+SknD5kw7lufFwgOwor5KSbPnFpw7p8XCA7CivkpJc+Z8SDbnxcIDsKK+Sklj5iw6BvfFwgOwor5KSVPnh1w6h8XCA7CivkpJA+asStbnxcIDsKK+Skiz5ndcOzfFwgOwor5KSGPmt1w618XCA7CivkpIM+ecOsbnxcIDsKK+Skgj5tw6lpfFwgOwor5KSBPmPDqW58XCA7Civko7g+csSDbnxcIDsKK+Sjtj5odcOzfFwgOwor5KOyPmbDoG58XCA7Civko60+dMOgaXxcIDsKK+SjrD56xINpfFwgOwor5KOmPmzDqGl8XCA7Civko6A+amnDqXxcIDsKK+Sjnz5jw6FufFwgOwor5KOcPmN1w7N8XCA7Civko5o+bMOzdXxcIDsKK+SjmT5ww6lpfFwgOwor5KOUPnN1xY98XCA7Civko40+ecSDbnxcIDsKK+Sjiz5jxINpfFwgOwor5KOHPnFpw7p8XCA7Civko4I+bMSVaXxcIDsKK+SjgD5ndcStfFwgOwor5KK1PnnDum58XCA7CivkorI+eXXDqHxcIDsKK+SisD50w6FpfFwgOwor5KKvPmzDrW58XCA7Civkoq4+bMOoaXxcIDsKK+SirT55w6BufFwgOwor5KKrPnN1w618XCA7CivkoqU+ecOhbnxcIDsKK+SipD5zaMO5fFwgOwor5KKjPnnDoW98XCA7CivkoqE+eGnDqHxcIDsKK+Sinz55w7N1fFwgOwor5KKZPmLDoGl8XCA7CivkopY+bHnDuXxcIDsKK+Siij55w7N1fFwgOwor5KKBPnl1w6h8XCA7Civkob4+bsOoaXxcIDsKK+Shuz5tw61ufFwgOwor5KG6PnfDqGl8XCA7Civkobk+emjDrHxcIDsKK+Shtz5rw6BpfFwgOwor5KG2PmLDqGl8XCA7CivkobU+c3XDrHxcIDsKK+ShrD5tw6BufFwgOwor5KGoPmNow6B8XCA7CivkoaE+eGnDqXxcIDsKK+ShnT55xa1ufFwgOwor5KGbPnnDrG58XCA7CivkoZo+bcOgb3xcIDsKK+ShkT5tw61ufFwgOwor5KGQPnR1w7N8XCA7CivkoYo+ZsOhbnxcIDsKK+ShiD5qdcOpfFwgOwor5KGHPnl1w6h8XCA7CivkoYU+bcStbnxcIDsKK+Shgj5qacO5fFwgOwor5KC/PnfDoGl8XCA7CivkoL0+aMOhaXxcIDsKK+Sgtj5zaMOofFwgOwor5KC0PnHErW58XCA7CivkoLE+c2jFrXxcIDsKK+Sgrz55dcOofFwgOwor5KCtPmzDoWl8XCA7CivkoKs+esOydXxcIDsKK+SgqT5ndcOsfFwgOwor5KCnPmNow7p8XCA7CivkoKY+emjDqHxcIDsKK+SgpT5iacOpfFwgOwor5KCkPmR1xY98XCA7CivkoKE+Y3XDs3xcIDsKK+SgoD5jaMOsfFwgOwor5KCfPmRpw6l8XCA7CivkoJk+YsOoaXxcIDsKK+Sglz5xacO5fFwgOwor5KCUPnN1w6x8XCA7CivkoJE+a3XErXxcIDsKK+SgjT5xacOhfFwgOwor5KCKPmbDqGl8XCA7CivkoIk+aHXDoHxcIDsKK+Sghz5qdcOpfFwgOwor5KCFPmvFrW58XCA7CivkoII+Y2jDunxcIDsKK+Sfvj5qdcSVfFwgOwor5J+5Pmxpw6h8XCA7Civkn7g+a3XDrXxcIDsKK+Sftz5jaMOsfFwgOwor5J+2PmN1w7J8XCA7Civkn7U+cWnDunxcIDsKK+Sfrz5rdcOyfFwgOwor5J+sPnFpw7l8XCA7Civkn6k+bGnElXxcIDsKK+SfqD5tw61ufFwgOwor5J+jPmNow7l8XCA7Civkn6A+eXXDqHxcIDsKK+Sfnj5jaMO6fFwgOwor5J+dPnTDsnV8XCA7Civkn5k+cWnDqHxcIDsKK+Sflz5zaMOsfFwgOwor5J+VPmNow6B8XCA7Civkn4k+emjDunxcIDsKK+SfiD56aMOtfFwgOwor5J+CPm3DoW58XCA7Civknr4+Y2jDrXxcIDsKK+SevT5zdcWPfFwgOwor5J63Pmp1w6l8XCA7CivknrU+anXElXxcIDsKK+SesD56dcOzfFwgOwor5J6tPnFpxa18XCA7Civknqw+dMOydXxcIDsKK+Seqz55xa1ufFwgOwor5J6oPmd1xK18XCA7Civknqc+aMOydXxcIDsKK+SepT55w7J1fFwgOwor5J6jPmNoxJV8XCA7CivknqI+emjDoHxcIDsKK+SeoT50xINufFwgOwor5J6WPnNoxa18XCA7CivknpU+ZGnDqXxcIDsKK+SelD53xJVpfFwgOwor5J6MPnNow6l8XCA7Civknoo+eMO5bnxcIDsKK+SeiD5ndcStfFwgOwor5J6HPmRpw6l8XCA7CivknoY+c3XFj3xcIDsKK+Segz56aMOsfFwgOwor5J6APmfDsnV8XCA7Civknb8+Z3XDrHxcIDsKK+SduT53xINufFwgOwor5J23Pnpow6x8XCA7CivknbM+Y8OhbnxcIDsKK+Sdsj5qw6xufFwgOwor5J2tPmfDsnV8XCA7Civknaw+emjDuXxcIDsKK+Sdqz56dcOzfFwgOwor5J2qPnNow7p8XCA7Civknac+bcOpbnxcIDsKK+SdpT5ow6FvfFwgOwor5J2kPmzEg298XCA7CivknaI+bcOgbnxcIDsKK+SdoT5tw6BufFwgOwor5J2ePmjDoG98XCA7CivknZU+emjDqXxcIDsKK+Sdkj56aMO5fFwgOwor5J2QPnfDqWl8XCA7CivknY8+bMOzdXxcIDsKK+SdjT5qw7lufFwgOwor5J2MPmp1w6l8XCA7CivknYo+c2jDoHxcIDsKK+Sdgz56aMOpfFwgOwor5J2CPnNow7l8XCA7CivknYE+bMOhb3xcIDsKK+Scuz5jaMStfFwgOwor5Jy5PnNow7l8XCA7CivknLg+bcSVaXxcIDsKK+SctT5jaMStfFwgOwor5Jy0PmNow7l8XCA7CivknLI+bGnDqHxcIDsKK+ScsT5txINufFwgOwor5JytPmrDuW58XCA7CivknKo+cWnDunxcIDsKK+ScqT55w6BufFwgOwor5JynPm7Eg298XCA7CivknKA+Y2jDqHxcIDsKK+ScnD53w6hpfFwgOwor5JyXPnjDrG58XCA7CivknJY+dMOgbnxcIDsKK+SclT5tw6BpfFwgOwor5JyUPnN1w618XCA7CivknJM+bmnDqHxcIDsKK+SckT5xacOgfFwgOwor5JyOPmzDoW98XCA7CivknIs+aHXDrHxcIDsKK+Scij56w6BvfFwgOwor5JyHPmfFrW58XCA7CivknIU+d8OpaXxcIDsKK+SchD5jaMOtfFwgOwor5JyAPm7Eg298XCA7Civkm70+emjEg3xcIDsKK+SbvD5odcStfFwgOwor5Ju7PnnDsnV8XCA7Civkm7o+amnDqHxcIDsKK+SbuT5jw6BufFwgOwor5Ju4PmNow6h8XCA7Civkm7c+d8SDbnxcIDsKK+Sbtj5sxJVpfFwgOwor5JuyPm3DoW58XCA7Civkm7A+aMO6bnxcIDsKK+Sbrj5qacO5fFwgOwor5JuoPnjDrG58XCA7Civkm6E+aHXDoHxcIDsKK+SboD5kw7J1fFwgOwor5JufPmppw6F8XCA7Civkm54+aMSDbnxcIDsKK+SbnT5uw6FvfFwgOwor5JucPnjDuW58XCA7Civkm5s+aHXDrHxcIDsKK+SbmD5uw61ufFwgOwor5JuXPnpoxK18XCA7Civkm40+ZsOoaXxcIDsKK+SbjD5ww6FvfFwgOwor5JuIPnNow6x8XCA7Civkm4U+eGnDoXxcIDsKK+Sbgj5jaMOtfFwgOwor5JuBPm7DoW58XCA7Civkm4A+ZsSDbnxcIDsKK+Savz55w6xufFwgOwor5Jq+Pm7DrW58XCA7Civkmr0+aMOgb3xcIDsKK+SavD5uecO5fFwgOwor5Jq7PnnDoW98XCA7Civkmro+ecOhb3xcIDsKK+SauD54acOofFwgOwor5Jq1PnTEg298XCA7CivkmrM+eGnDqHxcIDsKK+SasT54w6xufFwgOwor5JqvPnTEg298XCA7Civkmqw+bMOtbnxcIDsKK+SaqD5mw6hpfFwgOwor5JqnPmxpw7p8XCA7CivkmqY+emjDrHxcIDsKK+SapT5udcOyfFwgOwor5JqiPmNow6h8XCA7CivkmqA+aMO5bnxcIDsKK+Sanz5kxINpfFwgOwor5JqePmTEg2l8XCA7CivkmpE+bcOhaXxcIDsKK+Saiz55w7lufFwgOwor5JqFPmzDoWl8XCA7CivkmoM+ecOzdXxcIDsKK+SZvz53w6hpfFwgOwor5JmoPmd1xY98XCA7CivkmaQ+ZHXFj3xcIDsKK+SZoT5odcOsfFwgOwor5JmgPmp1w6l8XCA7CivkmZ8+ZHXDsnxcIDsKK+SZnT54acOofFwgOwor5JmZPmNow618XCA7CivkmZg+Y2jFrXxcIDsKK+SZlT5jaMO5fFwgOwor5JmTPmLEg2l8XCA7CivkmY4+eGnDqXxcIDsKK+SZjD5odcOsfFwgOwor5JmKPnhpw6h8XCA7CivkmYk+eMO6bnxcIDsKK+SZiD5ow7N1fFwgOwor5JmGPmd1w6x8XCA7CivkmYU+ecOgb3xcIDsKK+SZgz5kdcOyfFwgOwor5JmBPmPDoW58XCA7CivkmL8+anXDqXxcIDsKK+SYvD53xINufFwgOwor5Ji5Pnp1w6x8XCA7CivkmLY+aMOgbnxcIDsKK+SYrT5kacOpfFwgOwor5JirPm7DsnV8XCA7CivkmKU+eGnDoXxcIDsKK+SYpD5zaMO5fFwgOwor5JiiPnpoxa18XCA7CivkmJo+emjDunxcIDsKK+SYmT53w6hpfFwgOwor5JiTPmvDoG58XCA7CivkmJE+bcOgaXxcIDsKK+SYkD5uecO5fFwgOwor5JiKPm1pw6h8XCA7CivkmIk+Y8OhbnxcIDsKK+SYhz53w6lufFwgOwor5JiFPm7DoWl8XCA7Civkl70+d8OoaXxcIDsKK+SXuz5qacOpfFwgOwor5Je6PnnEg258XCA7Civkl7I+bMOsbnxcIDsKK+SXrz5qw6xufFwgOwor5JeqPnpow6h8XCA7Civkl6M+Z8SDb3xcIDsKK+SXoj5zdcWPfFwgOwor5JehPnnDoW58XCA7Civkl54+Y8OhbnxcIDsKK+SXnT5jw6FufFwgOwor5JecPmxpw7p8XCA7Civkl5k+aMOhbnxcIDsKK+SXlj5jaMOsfFwgOwor5JeVPnfEg258XCA7Civkl5Q+aMOzdXxcIDsKK+SXiz5tw7N1fFwgOwor5Ja8Pmp1w6l8XCA7Civklrs+ecOzdXxcIDsKK+SWtD55w6FvfFwgOwor5JazPnpow6B8XCA7CivklrI+eMO6bnxcIDsKK+SWsD5ww6BpfFwgOwor5JavPmd1w6x8XCA7Civklqg+c2jDrXxcIDsKK+SWpD53xINufFwgOwor5JajPnPDoG98XCA7CivklqE+bnnDuXxcIDsKK+SWnD55w61ufFwgOwor5JabPnN1xY98XCA7Civklpc+ecOhbnxcIDsKK+SWlj54acOhfFwgOwor5JaUPmjDoG58XCA7CivklpA+asOsbnxcIDsKK+SWjz5jaMWtfFwgOwor5JaOPnhpw6F8XCA7Civklow+ccOtbnxcIDsKK+SWiz5udcOofFwgOwor5JaIPm51w6h8XCA7CivkloQ+csOhbnxcIDsKK+SWgz55dcOofFwgOwor5JW/PmjDoG58XCA7Civklb4+ecOhbnxcIDsKK+SVvT56aMO6fFwgOwor5JW8Pm7DoW58XCA7CivklbU+eGnDqXxcIDsKK+SVsj5sxK1ufFwgOwor5JWxPmTFj3V8XCA7CivklbA+YsOgbnxcIDsKK+SVqz5rdcOtfFwgOwor5JWpPmzEg298XCA7CivklaI+emjEg3xcIDsKK+SVoD5mw6hpfFwgOwor5JWbPmppw6F8XCA7CivklZo+a3XDrHxcIDsKK+SVmT5qacOpfFwgOwor5JWVPm3DoG58XCA7CivklZM+Y2jDoXxcIDsKK+SVkT5qw7lufFwgOwor5JWMPnpow6x8XCA7CivklYo+dMOhbnxcIDsKK+SViD54acOofFwgOwor5JWHPmh1w6x8XCA7CivklYY+ZMOydXxcIDsKK+SVhT5zxINvfFwgOwor5JWDPnnDrG58XCA7CivklYE+ZsSVaXxcIDsKK+SUvz5qacOofFwgOwor5JS6PnfDqWl8XCA7CivklLk+c3XDrHxcIDsKK+SUtz5xw61ufFwgOwor5JSzPm7Eg258XCA7CivklKo+ZHXDrHxcIDsKK+SUoj5odcOhfFwgOwor5JSfPmNow618XCA7CivklJ4+bHnDuXxcIDsKK+SUnD5uw6FufFwgOwor5JSYPnp1w7J8XCA7CivklJI+YsOoaXxcIDsKK+SUkT54acOpfFwgOwor5JSIPmfEg258XCA7CivklIQ+ecOhb3xcIDsKK+STvz5oxINufFwgOwor5JO6Pm3ElWl8XCA7Civkk7Y+bMOgaXxcIDsKK+STsz5oxJVufFwgOwor5JOyPnJ1w6x8XCA7Civkk64+bcOgb3xcIDsKK+STrT5jaMOgfFwgOwor5JOfPmxpw6h8XCA7Civkk5g+amnDuXxcIDsKK+STlT50dcWPfFwgOwor5JONPmjEg258XCA7Civkk4w+emjDrHxcIDsKK+SThj56aMOpfFwgOwor5JOEPnnDrW58XCA7Civkk4I+ecOhbnxcIDsKK+SSvT5tw6lpfFwgOwor5JK6PmrErW58XCA7Civkkrk+bMOoaXxcIDsKK+SStT5ow6BvfFwgOwor5JK0PnnFj3V8XCA7CivkkrM+ZHXFj3xcIDsKK+SSsj5jaMOgfFwgOwor5JKrPmTDoGl8XCA7Civkkqg+c2jErXxcIDsKK+SSpj5mw6BufFwgOwor5JKjPnLEg258XCA7CivkkqI+w6FuZ3xcIDsKK+SSoT55xK1ufFwgOwor5JKgPmbEg258XCA7Civkkpw+bmnDunxcIDsKK+SSlj54w6xufFwgOwor5JKUPmLDoGl8XCA7CivkkpM+a8SDaXxcIDsKK+SSkT5jxINvfFwgOwor5JKGPmNow6h8XCA7CivkkoM+Y8Ogb3xcIDsKK+SRuz55w7N1fFwgOwor5JG2PmPDoW58XCA7CivkkbM+bMO6bnxcIDsKK+SRsj5jaMOofFwgOwor5JGxPm3DoW58XCA7Civkkaw+ecOgb3xcIDsKK+SRqD5kdcOyfFwgOwor5JGkPmrDrG58XCA7CivkkZ0+amnEg3xcIDsKK+SRmz5jaMStfFwgOwor5JGZPnLDoW58XCA7CivkkZg+Y2jDoXxcIDsKK+SRlT5zaMWtfFwgOwor5JGUPmbDqGl8XCA7CivkkZM+dMOhaXxcIDsKK+SRjT55w6BufFwgOwor5JGMPmzDoW58XCA7CivkkYs+bsOhb3xcIDsKK+SRij53w6lpfFwgOwor5JGHPnpow6x8XCA7CivkkL4+ZHXDs3xcIDsKK+SQvT5tw6FufFwgOwor5JC6PnTDoG58XCA7CivkkLk+c8Ogb3xcIDsKK+SQuD5ndcOzfFwgOwor5JC2PmrErW58XCA7CivkkLQ+Z3XDrHxcIDsKK+SQsj56aMOpfFwgOwor5JCvPmzDqWl8XCA7CivkkK0+emjDrHxcIDsKK+SQrD5jw6FvfFwgOwor5JCqPmbDoG58XCA7CivkkKk+a8SDaXxcIDsKK+SQpz5rw6BvfFwgOwor5JCkPmNow618XCA7CivkkKM+Y3XDsnxcIDsKK+SQoj56aMO5fFwgOwor5JCePnJ1w7J8XCA7CivkkJ0+c3XFj3xcIDsKK+SQmD5qdcOpfFwgOwor5JCUPmLDrG58XCA7CivkkJM+csOzdXxcIDsKK+SQkT56aMOpfFwgOwor5JCIPnpow618XCA7CivkkIY+Y8SDaXxcIDsKK+SQhD5ow6BufFwgOwor5I+8PmPDoW58XCA7Civkj7c+aMOgbnxcIDsKK+SPsz56aMOofFwgOwor5I+yPmRpw6l8XCA7Civkj7A+csSVbnxcIDsKK+SPrz56aMOsfFwgOwor5I+sPm3Ds3V8XCA7Civkj6g+aHXErXxcIDsKK+SPpj5odcOhfFwgOwor5I+jPmp1w6l8XCA7Civkj6E+c2jDrHxcIDsKK+SPnz5iacOofFwgOwor5I+ZPnTEg258XCA7Civkj5c+Z8OgaXxcIDsKK+SPlT5yxJVufFwgOwor5I+UPm5pxa18XCA7Civkj5A+anXDqXxcIDsKK+SPhj5jw6FvfFwgOwor5I+EPnpow6x8XCA7Civkj4I+c8WPdXxcIDsKK+SPgT56xINpfFwgOwor5I6/PnFpw7p8XCA7Civkjr4+Z8WtbnxcIDsKK+SOvT53w6lufFwgOwor5I66PnpoxK18XCA7Civkjrk+d8OpbnxcIDsKK+SOtz56aMO5fFwgOwor5I6yPnpow6l8XCA7CivkjrA+enXDs3xcIDsKK+SOrz5ow6BufFwgOwor5I6mPnnEg258XCA7CivkjqQ+Y2jDunxcIDsKK+SOnT5jaMO6fFwgOwor5I6JPnNow7l8XCA7CivkjoM+csSDbnxcIDsKK+SOgj5ixINvfFwgOwor5I6APnh1w6h8XCA7Civkjb4+dHXDrXxcIDsKK+SNvD5jw6FufFwgOwor5I23Pmd1w6x8XCA7CivkjbQ+ZHXDsnxcIDsKK+SNsj5uw6FpfFwgOwor5I2vPmd1xK18XCA7Civkjas+dHXDs3xcIDsKK+SNqj5rdcOsfFwgOwor5I2pPsSDbmd8XCA7CivkjaU+bMOoaXxcIDsKK+SNoz5sw6lpfFwgOwor5I2ZPm3DqWl8XCA7CivkjZI+bcWPdXxcIDsKK+SNkT5oxINufFwgOwor5I2QPmjEg258XCA7CivkjY4+Y8O5bnxcIDsKK+SNij5qdcOpfFwgOwor5I2GPnpow7l8XCA7CivkjYM+ecOhb3xcIDsKK+SNgT5zdcOsfFwgOwor5I2APmzDoW58XCA7CivkjL4+csOpbnxcIDsKK+SMvT5jxINpfFwgOwor5Iy8PnJ1w6x8XCA7CivkjLU+emjDunxcIDsKK+SMtD5sdcOyfFwgOwor5IyxPmx1w7J8XCA7CivkjLA+c2jDqHxcIDsKK+SMqz5sxINufFwgOwor5IyqPnnDoW58XCA7CivkjKg+Y8OgaXxcIDsKK+SMpj5kxINvfFwgOwor5IylPnnErW58XCA7CivkjKQ+emjErXxcIDsKK+SMnT5qw6xufFwgOwor5IycPm5pw6h8XCA7CivkjJs+ecOhb3xcIDsKK+SMlj5qacOpfFwgOwor5IyTPmbDoW58XCA7CivkjI0+aMOgbnxcIDsKK+SMij55w6FvfFwgOwor5IyHPmh1w6x8XCA7CivkjIY+Z3XDrHxcIDsKK+SLvj56aMSDfFwgOwor5Iu7Pm7DrW58XCA7Civki7g+eMO6bnxcIDsKK+SLtz5sacO6fFwgOwor5Iu0Pm5pw7l8XCA7Civki7M+YsOoaXxcIDsKK+SLsj5jaMSVfFwgOwor5IuxPmzDoWl8XCA7Civki64+asOsbnxcIDsKK+SLrT5odcOyfFwgOwor5IumPmbDoW58XCA7Civki6Q+ecOgb3xcIDsKK+SLoz5mw6FufFwgOwor5IuiPmJpw6h8XCA7Civki5U+csOobnxcIDsKK+SLkD55dcOofFwgOwor5IuPPnp1w7J8XCA7Civki4s+bcOtbnxcIDsKK+SLiT5qdcOpfFwgOwor5IuDPm3DoG98XCA7Civki4I+ecOhb3xcIDsKK+SLgD5rdcOgfFwgOwor5Iq8PmNoxK18XCA7Civkirs+ecSDbnxcIDsKK+SKtT5xacO6fFwgOwor5IqwPmNoxa18XCA7Civkiqw+Y2jDoHxcIDsKK+SKqz5jdcStfFwgOwor5IqpPmbDoW58XCA7Civkiqg+bHXDs3xcIDsKK+SKpD50w6FufFwgOwor5IqhPm3DoW58XCA7Civkip8+bcOpbnxcIDsKK+SKnj56aMOpfFwgOwor5IqdPnhpw6h8XCA7Civkipk+ecOhbnxcIDsKK+SKmD5qacO5fFwgOwor5IqWPmzEg258XCA7CivkipM+c2jDrHxcIDsKK+SKij5tw6hpfFwgOwor5IqJPnPEg258XCA7Civkiog+bcOpaXxcIDsKK+SKhj5qacO5fFwgOwor5IqDPnDDqGl8XCA7Civkib0+YsSDbnxcIDsKK+SJtz5kw6BufFwgOwor5ImyPmJpw6h8XCA7CivkibA+ecOhb3xcIDsKK+SJrj5sw6xufFwgOwor5ImtPmxpw6h8XCA7Civkiaw+ZsOoaXxcIDsKK+SJqj5sw6hpfFwgOwor5ImnPmxpw7p8XCA7CivkiaQ+c8WPdXxcIDsKK+SJoz54acOofFwgOwor5ImhPnTDoW58XCA7CivkiaA+d8OpaXxcIDsKK+SJnz5odcOyfFwgOwor5ImePmTEg258XCA7CivkiZw+emjDrHxcIDsKK+SJmT55w7pufFwgOwor5ImTPmzDqWl8XCA7CivkiZI+ZsOhbnxcIDsKK+SJjz54acOofFwgOwor5ImMPnN1w6x8XCA7CivkiYs+bcOoaXxcIDsKK+SJij5mw6BufFwgOwor5ImIPnPEg258XCA7CivkiYU+emjDrHxcIDsKK+SJgj5sxJVpfFwgOwor5ImAPnNow7l8XCA7CivkiL8+bcOgaXxcIDsKK+SIvD5tacOofFwgOwor5Ii5PnPFj3V8XCA7CivkiLc+bHXDsnxcIDsKK+SIsj5ww6FufFwgOwor5IinPnfElWl8XCA7CivkiKI+c8SDaXxcIDsKK+SInD5xw6xufFwgOwor5IiaPnTDoWl8XCA7CivkiJc+c3XFj3xcIDsKK+SIlT5jaMOtfFwgOwor5IiSPm7Eg258XCA7CivkiJE+Z3XEg3xcIDsKK+SIkD5rdcOsfFwgOwor5IiPPmLDoW98XCA7CivkiIk+c2jDoHxcIDsKK+SIiD5mw6lpfFwgOwor5IiGPmTDoGl8XCA7CivkiIQ+aMOhbnxcIDsKK+SIgT5sw7pufFwgOwor5Ie+PnnDoW58XCA7Civkh70+emjDrHxcIDsKK+SHvD5jaMOsfFwgOwor5Ie7Pmh1w6x8XCA7Civkh7k+asO5bnxcIDsKK+SHtj5qdcOpfFwgOwor5IeuPnLDqG58XCA7Civkh60+bMSDb3xcIDsKK+SHpz56aMO5fFwgOwor5IekPmR1w6x8XCA7Civkh6E+emjDuXxcIDsKK+SHnj5nxINufFwgOwor5IebPnpoxK18XCA7Civkh5k+ecStbnxcIDsKK+SHlj55xa1ufFwgOwor5IeUPmx1w7J8XCA7Civkh5I+amnDqHxcIDsKK+SHjz5kdcOsfFwgOwor5IeOPnF1w6h8XCA7Civkh4s+aMOgaXxcIDsKK+SHiD5ndcOsfFwgOwor5Ia+PmzDoW58XCA7CivkhrE+dMSDbnxcIDsKK+SGrj5qw6xufFwgOwor5IasPnnFrW58XCA7CivkhqI+anXDqXxcIDsKK+SGnj55xINvfFwgOwor5IadPnNow7l8XCA7Civkhpw+ecOydXxcIDsKK+SGmz5jaMOhfFwgOwor5IaZPnnDoW98XCA7CivkhpU+anXDqXxcIDsKK+SGkj5qacO5fFwgOwor5IaQPmd1w7N8XCA7Civkho8+ZsOoaXxcIDsKK+SGij5jdcOsfFwgOwor5IaIPnpow6x8XCA7CivkhoM+ZMSDb3xcIDsKK+SGgD5txJVpfFwgOwor5IW/Pmh1w6F8XCA7Civkhb4+Y8OpbnxcIDsKK+SFvD5tw6FufFwgOwor5IW5PmzDs3V8XCA7CivkhbY+bsOydXxcIDsKK+SFtD5zdcWPfFwgOwor5IWzPmNow7p8XCA7CivkhbE+aMO5bnxcIDsKK+SFqj50dcOtfFwgOwor5IWpPnpoxK18XCA7Civkhac+ecOgbnxcIDsKK+SFpj5tw6FvfFwgOwor5IWlPmppw6l8XCA7CivkhaI+amnDuXxcIDsKK+SFnz5jxINufFwgOwor5IWcPmR1w7J8XCA7CivkhZk+aMO5bnxcIDsKK+SFmD5sw6FpfFwgOwor5IWXPnN1w6x8XCA7CivkhZE+cnXDrXxcIDsKK+SFjz5odcOsfFwgOwor5IWOPnnFj3V8XCA7CivkhYs+d8SDbnxcIDsKK+SFgD5sacOofFwgOwor5IS+PnLDsnV8XCA7CivkhLo+emjDrHxcIDsKK+SEtz5kw6BufFwgOwor5ISpPm7DoW98XCA7CivkhKQ+bMOgaXxcIDsKK+SEnz5jdcOsfFwgOwor5ISbPmzDs3V8XCA7CivkhJo+Y8Ohb3xcIDsKK+SElT5zaMOofFwgOwor5ISSPm5pw6h8XCA7CivkhJE+aHXDs3xcIDsKK+SEiz55xINufFwgOwor5ISIPmTDsnV8XCA7CivkhIY+aHXDs3xcIDsKK+SEgj5sacO5fFwgOwor5ISAPmh1w7J8XCA7Civkg7k+bMOgbnxcIDsKK+SDsj5ww6FufFwgOwor5IOtPmfEg258XCA7Civkg6w+d8SVaXxcIDsKK+SDqz5kxINufFwgOwor5IOqPnTDoW58XCA7Civkg6k+bsOhb3xcIDsKK+SDoz5odcStfFwgOwor5IOhPmPDqW58XCA7Civkg54+c2jDunxcIDsKK+SDlT5sw6FvfFwgOwor5IOTPmfDsnV8XCA7Civkg5E+cMOhbnxcIDsKK+SDiT5tw61ufFwgOwor5IOCPmfFrW58XCA7Civkg4A+Y3XDrHxcIDsKK+SCvj5sxINpfFwgOwor5IK8Pm5pw6h8XCA7Civkgro+d8SDbnxcIDsKK+SCuT5zdcWPfFwgOwor5IK4Pmd1w7N8XCA7CivkgrY+amnDqXxcIDsKK+SCtD55w6FufFwgOwor5IKzPmN1xY98XCA7CivkgrE+Y3XDrHxcIDsKK+SCqT55w6BufFwgOwor5IKlPm3DrW58XCA7CivkgqA+c2jDqXxcIDsKK+SCnj56aMOofFwgOwor5IKdPmppw6l8XCA7Civkgpo+ecOhb3xcIDsKK+SClj5zaMOtfFwgOwor5IKVPmh1w6x8XCA7CivkgpI+amnDqXxcIDsKK+SCiT5ow7N1fFwgOwor5IKEPmh1w7J8XCA7Civkgb4+bWnDqHxcIDsKK+SBvT5sacOofFwgOwor5IG6PnNow6x8XCA7Civkgbc+anXDqXxcIDsKK+SBsj5tw6FpfFwgOwor5IGvPnNow6h8XCA7Civkgao+bsSDbnxcIDsKK+SBqD5odcOyfFwgOwor5IGkPmNow6h8XCA7CivkgZ8+Y2jDoXxcIDsKK+SBmz5ndcStfFwgOwor5IGaPnPFrW58XCA7CivkgZk+ecSDbnxcIDsKK+SBmD55xINvfFwgOwor5IGXPmvEg2l8XCA7CivkgZU+bcOtbnxcIDsKK+SBlD5ow6BufFwgOwor5IGTPmppw6h8XCA7CivkgY8+ecSDb3xcIDsKK+SBjT5qacOgfFwgOwor5IGLPnNow6l8XCA7CivkgYU+YsOoaXxcIDsKK+SAvT55w6FufFwgOwor5IC8PnLDqG58XCA7CivkgLs+cMOsbnxcIDsKK+SAuT5qacOhfFwgOwor5IC3Pmppw6l8XCA7CivkgKs+amnDoXxcIDsKK+SAqT5sdcOyfFwgOwor5ICkPm3DoG98XCA7CivkgJ8+ZsOhbnxcIDsKK+SAmz5tw6hpfFwgOwor5ICaPsOhbmd8XCA7CivkgJc+anXDqXxcIDsKK+SAlD5uacO6fFwgOwor5ICQPnPEg258XCA7CivkgI0+a8OgbnxcIDsKK+SAiz55w6FufFwgOwor5ICGPmrDrG58XCA7CivkgIU+c2jDqHxcIDsKK+SAgz50dcOtfFwgOwor5ICBPnnDsnV8XCA7CivkgIA+ZsOhbnxcIDsKK+O/vj56aMO5fFwgOwor47+8PnnDoW58XCA7Civjv7o+YsOhb3xcIDsKK+O/uD53xINufFwgOwor47+3PnrDoG98XCA7Civjv7U+csSDbnxcIDsKK+O/sT54dcOpfFwgOwor47+tPmNow6h8XCA7Civjv6I+ecOgb3xcIDsKK+O/nz5iw6FpfFwgOwor47+ePm3DoG98XCA7Civjv5w+YmnElXxcIDsKK+O/mj5sdcOyfFwgOwor47+XPnR1w618XCA7Civjv5U+ecOhbnxcIDsKK+O/lD5sxJVpfFwgOwor47+TPmppw6F8XCA7Civjv5I+ZMSDb3xcIDsKK+O/kT55w6BvfFwgOwor47+PPnHDum58XCA7Civjv44+ZsOobnxcIDsKK+O/jT5qacOofFwgOwor47+LPnPDoG98XCA7Civjv4o+Y8SDbnxcIDsKK+O/iT50dcOtfFwgOwor47+DPmTDoGl8XCA7Civjvr0+dHXDrXxcIDsKK+O+vD50dcStfFwgOwor4767Pnpow7l8XCA7Civjvrg+Z8SDb3xcIDsKK+O+sT5iw6hpfFwgOwor476vPnR1w618XCA7CivjvqI+bMOgaXxcIDsKK+O+oT5xdcOofFwgOwor476ePnnFj3V8XCA7Civjvp0+Y2jDqHxcIDsKK+O+nD5xacOofFwgOwor476bPnHErW58XCA7Civjvpk+ecStbnxcIDsKK+O+lD5secWtfFwgOwor476PPmppw6h8XCA7Civjvo0+bsOhaXxcIDsKK+O+iz54acO5fFwgOwor476GPnLDoW58XCA7CivjvoM+dHXDs3xcIDsKK+O+gT5zaMO5fFwgOwor476APnFpw6h8XCA7Civjvbk+ZsOgbnxcIDsKK+O9sz5ow6BufFwgOwor472wPnNow7l8XCA7Civjvak+Y8OgbnxcIDsKK+O9qD5jdcOzfFwgOwor472mPnjDum58XCA7CivjvaU+csOzdXxcIDsKK+O9oD54acOhfFwgOwor472fPmxpw6h8XCA7CivjvZ4+bGnDunxcIDsKK+O9nD53xINufFwgOwor472bPmvDsnV8XCA7CivjvZo+Y2jDrHxcIDsKK+O9mT5qw7lufFwgOwor472WPm7DoW58XCA7CivjvZU+ecOzdXxcIDsKK+O9kT50w6FufFwgOwor472OPmTEg258XCA7CivjvYw+bGnDuXxcIDsKK+O9iz5sdcOzfFwgOwor472KPnhpw6h8XCA7CivjvYk+aMSDbnxcIDsKK+O8sj5sacOofFwgOwor47yuPm3DoWl8XCA7CivjvKo+amnDoXxcIDsKK+O8qD5ow6FufFwgOwor47ylPmNow7p8XCA7CivjvKM+YsSDaXxcIDsKK+O8oD50dcOzfFwgOwor47yfPmLDoWl8XCA7CivjvJ0+ZsOgbnxcIDsKK+O8nD7DoG5nfFwgOwor47ySPnFpxa18XCA7CivjvI8+bsSVaXxcIDsKK+O8jj5iw6hpfFwgOwor47yNPmzElWl8XCA7CivjvIo+dMO6bnxcIDsKK+O8iT55w6xufFwgOwor47yIPmx1w7N8XCA7Civju78+c2jFrXxcIDsKK+O7vT5zdcOsfFwgOwor47u4PmPDqW58XCA7Civju7I+bHnFrXxcIDsKK+O7rj5jw6BufFwgOwor47uqPnN1w6x8XCA7Civju6c+ZHXDsnxcIDsKK+O7oT5kacOpfFwgOwor47ufPnN1w618XCA7Civju5c+YsOoaXxcIDsKK+O7lj5kw6BpfFwgOwor47uVPmp1w6l8XCA7Civju5Q+ZHXFj3xcIDsKK+O7kj5qw7lufFwgOwor47uFPmh1w6x8XCA7Civju4Q+YsSDb3xcIDsKK+O7gD55w7N1fFwgOwor47q6Pm3DoG98XCA7CivjurU+amnDunxcIDsKK+O6sz5tw6lpfFwgOwor47qyPm5pxa18XCA7Civjuqs+cWnDunxcIDsKK+O6qT5qacO5fFwgOwor47qgPnnDsnV8XCA7Civjupw+YsSDbnxcIDsKK+O6mz56aMO5fFwgOwor47qXPmTDoG58XCA7CivjupY+aMSDbnxcIDsKK+O6lT5mw6FufFwgOwor47qUPmjDoGl8XCA7CivjupE+Y8OhbnxcIDsKK+O6jz5sw7N1fFwgOwor47qFPmjDs3V8XCA7CivjuoM+Z8WPdXxcIDsKK+O6gj5nxINufFwgOwor47qBPm7Eg298XCA7CivjuoA+bsOhb3xcIDsKK+O5vD5jaMWtfFwgOwor47m3PnNoxK18XCA7Civjuaw+c2jErXxcIDsKK+O5qD55w7J1fFwgOwor47mlPnpow7l8XCA7CivjuaQ+cWnDqHxcIDsKK+O5oD50w7pufFwgOwor47mfPmp1w6l8XCA7CivjuZ4+ecOtbnxcIDsKK+O5nT5zaMOsfFwgOwor47mcPnnDrW58XCA7CivjuZs+csOhb3xcIDsKK+O5lz50w6FvfFwgOwor47mPPmrErW58XCA7CivjuY4+bMOpaXxcIDsKK+O5ij55dcOofFwgOwor47i+PnLDqG58XCA7CivjuL0+YsOoaXxcIDsKK+O4uT5sacOofFwgOwor47i4PmjFj3V8XCA7CivjuLc+c2jDrHxcIDsKK+O4tT5ndcStfFwgOwor47iyPnp1w7N8XCA7CivjuLE+dHXDs3xcIDsKK+O4sD50dcOzfFwgOwor47iuPmbDqW58XCA7CivjuKw+YsOoaXxcIDsKK+O4pz5rw6hufFwgOwor47iiPmLDqGl8XCA7CivjuJ4+YsSDbnxcIDsKK+O4nT5rxINufFwgOwor47iYPnfDoG58XCA7CivjuJU+anXDqXxcIDsKK+O4kj55w61ufFwgOwor47iQPnLDoW58XCA7CivjuI4+bmnDqHxcIDsKK+O4jD5odcOyfFwgOwor47iLPmbDoW58XCA7CivjuIk+eGnDqHxcIDsKK+O4hT5qacOpfFwgOwor47iBPmjEg258XCA7CivjuIA+dMOhaXxcIDsKK+O3vj5qdcOpfFwgOwor47e8PnnDoG58XCA7Civjt7g+ZGnDqXxcIDsKK+O3tj5iw6hpfFwgOwor47ezPnnDoG58XCA7Civjt6o+Y3XDrHxcIDsKK+O3oj56aMSDfFwgOwor47egPmzDrW58XCA7Civjt58+dHXDrHxcIDsKK+O3mD50w6FpfFwgOwor47eVPnFpw7p8XCA7Civjt5Q+ecOgbnxcIDsKK+O3kD5odcStfFwgOwor47eNPmzDum58XCA7Civjt4s+dMOhbnxcIDsKK+O3ij5mw6lufFwgOwor47eJPnfDqGl8XCA7Civjt4Y+ZMOydXxcIDsKK+O3hD5odcOsfFwgOwor47eDPmN1xK18XCA7Civjt4I+c2jDuXxcIDsKK+O2tT5yw6hufFwgOwor47a0PmNoxK18XCA7CivjtrM+asOsbnxcIDsKK+O2sD5ow6FufFwgOwor47avPmxpw7l8XCA7Civjtq0+amnDuXxcIDsKK+O2rD5tw6lpfFwgOwor47anPm7DqG58XCA7CivjtqY+asOsbnxcIDsKK+O2oT5kw6BpfFwgOwor47afPmzElWl8XCA7Civjtpc+ZsOgbnxcIDsKK+O2lj5zaMO5fFwgOwor47aUPmLDqGl8XCA7CivjtoY+Y2jDunxcIDsKK+O2hT54dcOpfFwgOwor47aEPnnDoW58XCA7CivjtoE+Z3XDs3xcIDsKK+O1vT5kdcOsfFwgOwor47W7PnPDsnV8XCA7Civjtbo+cMOhaXxcIDsKK+O1uD55w6BvfFwgOwor47W1PnrDsnV8XCA7Civjta0+emjFrXxcIDsKK+O1pj5zdcOtfFwgOwor47WiPmzDqWl8XCA7CivjtaE+YsOhb3xcIDsKK+O1mD5tw6BufFwgOwor47WWPm55w7l8XCA7CivjtZQ+Y2jElXxcIDsKK+O1kz5zaMOtfFwgOwor47WSPmbDqGl8XCA7CivjtZA+anXDqXxcIDsKK+O1jz5jdcStfFwgOwor47WOPmjEg258XCA7CivjtY0+bcOobnxcIDsKK+O1hj5ow6BvfFwgOwor47WFPmTDoG58XCA7CivjtYQ+aMOgbnxcIDsKK+O1gz5jaMOofFwgOwor47S9Pnhpw6h8XCA7CivjtLY+cXXDqHxcIDsKK+O0rj54acOofFwgOwor47StPnnEg298XCA7CivjtKw+eGnDqHxcIDsKK+O0qz5qw7lufFwgOwor47SqPm5pw6h8XCA7CivjtJs+emjDrHxcIDsKK+O0mj5zdcOsfFwgOwor47SZPnpow6F8XCA7CivjtJg+bcOgb3xcIDsKK+O0lj5sdcOyfFwgOwor47STPnrEg2l8XCA7CivjtIg+ecOsbnxcIDsKK+O0hz5zaMOofFwgOwor47SGPmrDrG58XCA7CivjtIM+bMOoaXxcIDsKK+O0gD5mw6BufFwgOwor47O/Pnhpw6h8XCA7Civjs7o+ecOzdXxcIDsKK+Oztz53xJVufFwgOwor47O2PmfDsnV8XCA7Civjs6o+cMOgbnxcIDsKK+Ozpj54acOofFwgOwor47OVPmzDoW58XCA7Civjs5Q+ZHXDrHxcIDsKK+Ozjz5jaMStfFwgOwor47OIPnDDqGl8XCA7Civjs4Y+c2jFrXxcIDsKK+Ozgz5jdcOsfFwgOwor47OCPnnDoW58XCA7Civjs4A+Z3XDsnxcIDsKK+OyuT5ndcStfFwgOwor47K3PmTDoG58XCA7CivjsrY+bHbMgHxcIDsKK+Oysz5kacOpfFwgOwor47KyPmRpw6l8XCA7CivjsrE+bGnDqHxcIDsKK+Oyrz5yw6FufFwgOwor47KtPnTEg258XCA7Civjsqc+esOgb3xcIDsKK+Oypj5ow6BufFwgOwor47KhPm7DoGl8XCA7CivjsqA+bcOhb3xcIDsKK+OynD50w6FufFwgOwor47KbPnpoxK18XCA7CivjspU+bMOoaXxcIDsKK+Oykj5iw6BvfFwgOwor47KPPmLEg298XCA7Civjso4+bMOzdXxcIDsKK+Oyij5ydcOsfFwgOwor47KJPmvDoGl8XCA7CivjsoQ+a8OydXxcIDsKK+Oygz5qacO5fFwgOwor47G/PnF1w6h8XCA7Civjsb0+ZMOgbnxcIDsKK+Oxuz5sdcWPfFwgOwor47G1PmLDqG58XCA7CivjsbE+aHXDrHxcIDsKK+OxsD56xINpfFwgOwor47GsPnfElWl8XCA7Civjsas+bMOgbnxcIDsKK+Oxqj5tw6hufFwgOwor47GjPnR1xK18XCA7CivjsZw+emjDoXxcIDsKK+Oxmj5jw6FufFwgOwor47GZPnhpxa18XCA7CivjsZY+Y3XDrHxcIDsKK+OxjD5jaMOofFwgOwor47GLPnF1w6h8XCA7CivjsYg+asOsbnxcIDsKK+Oxgz55xK1ufFwgOwor47GBPnNow6x8XCA7CivjsYA+Y2jErXxcIDsKK+OwvD5xacOofFwgOwor47C6Pnhpw6F8XCA7CivjsLk+asOsbnxcIDsKK+Owtj55xY91fFwgOwor47CxPnNow6B8XCA7CivjsLA+cWnDqHxcIDsKK+Owrz5rw7J1fFwgOwor47CsPnjDum58XCA7CivjsKU+aHXDrHxcIDsKK+OwoT54acOofFwgOwor47CbPnl1w6h8XCA7CivjsJk+bnXDs3xcIDsKK+Owlj5sxINufFwgOwor47CUPnhpw6h8XCA7CivjsJI+c2jDqXxcIDsKK+OwkD5qdcOpfFwgOwor47COPnp1w6x8XCA7CivjsIw+cXXDqHxcIDsKK+Owiz5ww61ufFwgOwor47CKPnjDum58XCA7CivjsIY+YsOoaXxcIDsKK+OwgT5sdcWPfFwgOwor46+/Pmxpw6h8XCA7Civjr7s+Z8WtbnxcIDsKK+OvuD5qxK1ufFwgOwor46+yPmrDrG58XCA7Civjr7A+emjDqXxcIDsKK+Ovrj5zaMWtfFwgOwor46+lPmPDoW98XCA7Civjr6E+cMOgb3xcIDsKK+OvnD5jdcOsfFwgOwor46+ZPmNow6h8XCA7Civjr5c+csSDbnxcIDsKK+OvlD5jdcOsfFwgOwor46+OPm7DqG58XCA7Civjr4o+aMOpbnxcIDsKK+OviT5odcOyfFwgOwor46+CPmTDoGl8XCA7Civjrro+YsSVbnxcIDsKK+OuuT56aMStfFwgOwor4662PnNow6x8XCA7Civjrq8+aHXDoXxcIDsKK+Ourj5qacOpfFwgOwor466lPmbDqG58XCA7CivjrqM+Z8OgaXxcIDsKK+Ouoj5ow7N1fFwgOwor466ePmppw6l8XCA7Civjrps+Y2jDrXxcIDsKK+OumD5tw6BvfFwgOwor466XPnHDrW58XCA7CivjrpY+amnDoXxcIDsKK+Oukz5nw6hufFwgOwor466PPm7DoGl8XCA7Civjros+ecWPdXxcIDsKK+OuiD5uw6BpfFwgOwor466GPm5pw6h8XCA7CivjroM+cnXDrXxcIDsKK+OugT55w6FvfFwgOwor466APmjDoW58XCA7Civjrb8+w6FuZ3xcIDsKK+Otvj5qdcOpfFwgOwor4626PnnEg258XCA7Civjra8+ZGnDqXxcIDsKK+Otrj56dcOyfFwgOwor462tPmbDqGl8XCA7Civjrak+bMOoaXxcIDsKK+OtqD54acOpfFwgOwor462ePmxpw6h8XCA7CivjrZ0+cWnDunxcIDsKK+Otmz5ww6BpfFwgOwor462aPmx5xa18XCA7CivjrZk+c2jDqXxcIDsKK+OtkT5tw6hpfFwgOwor462PPnfElWl8XCA7CivjrYw+bcOzdXxcIDsKK+OtiT5odcOhfFwgOwor462IPmp1w6l8XCA7CivjrYQ+eMOsbnxcIDsKK+Osvz5kw7lufFwgOwor46y2PmjDoG98XCA7CivjrK8+bGnDqHxcIDsKK+Osqz55w6BufFwgOwor46yqPmRpw6l8XCA7CivjrKk+aHXDrHxcIDsKK+Ospj55dcOofFwgOwor46yjPmR1w6x8XCA7CivjrJw+asOsbnxcIDsKK+Osmj5jaMOofFwgOwor46yZPnfElWl8XCA7CivjrJQ+aMOhb3xcIDsKK+OskD5qxK1ufFwgOwor46yLPmjDs3V8XCA7CivjrIU+bcOgbnxcIDsKK+Osgz50w6FpfFwgOwor46u8PmRpw6l8XCA7Civjq7s+a8O5bnxcIDsKK+OruT5kw6BpfFwgOwor46u4PnFpw6h8XCA7Civjq7Y+Y8WPdXxcIDsKK+Orsj5ww6hpfFwgOwor46uxPm7Eg258XCA7Civjq68+bcOgb3xcIDsKK+Orpz5iw6BvfFwgOwor46ufPnnDoW58XCA7Civjq5w+ZMOgbnxcIDsKK+Orlz5ow7J1fFwgOwor46uUPmfDqG58XCA7Civjq5E+c2jDrXxcIDsKK+OrkD55xINvfFwgOwor46uPPnnEg298XCA7Civjq44+Z8WtbnxcIDsKK+OrjT55w7N1fFwgOwor46uFPmNow6F8XCA7Civjq4M+ecSDbnxcIDsKK+Orgj56aMO5fFwgOwor46q/Pnpow6l8XCA7Civjqr0+c3XFj3xcIDsKK+OquT5sxY91fFwgOwor46q3PmTFj3V8XCA7CivjqrU+YsOgbnxcIDsKK+OqtD5qacOhfFwgOwor46qvPmNow6F8XCA7Civjqqs+cnXDrHxcIDsKK+Oqpj55w6xufFwgOwor46qePm3DoG98XCA7Civjqpo+c8OgbnxcIDsKK+Oqlz50xY91fFwgOwor46qUPnPDoG58XCA7Civjqos+aMOgbnxcIDsKK+Oqij5xw7pufFwgOwor46qIPmd1w6x8XCA7CivjqoE+ccOtbnxcIDsKK+Opuz5ndcStfFwgOwor46m5PmRpw6l8XCA7Civjqbg+ZGnDqXxcIDsKK+Optj5uacOofFwgOwor46myPmvFrW58XCA7CivjqbE+anXDqXxcIDsKK+Oprz5ixINufFwgOwor46mqPnhpw6l8XCA7Civjqag+aHXDrHxcIDsKK+Oppj54acOpfFwgOwor46mhPmx1xY98XCA7CivjqZ0+aMOhb3xcIDsKK+OpnD5sxINufFwgOwor46mUPnTDum58XCA7CivjqZM+aHXErXxcIDsKK+Opkj5xw61ufFwgOwor46mMPmbDqGl8XCA7CivjqYk+eGnDqXxcIDsKK+Ophz5odcOgfFwgOwor46mGPmppw7l8XCA7CivjqYE+cXXDqHxcIDsKK+OovD5sdcOofFwgOwor46i7PmPDoW58XCA7CivjqLo+bcOpbnxcIDsKK+OouT5odcOsfFwgOwor46i3PmrDrG58XCA7CivjqLM+Z3XErXxcIDsKK+OosT55w6FvfFwgOwor46ivPmh1w7J8XCA7CivjqKs+bMSDbnxcIDsKK+OoqT5qacOpfFwgOwor46ioPmxpw7l8XCA7CivjqKc+YsOobnxcIDsKK+OopD5odcOsfFwgOwor46ihPmjDum58XCA7CivjqJ8+aMOhaXxcIDsKK+OonT54acOofFwgOwor46iaPnjDum58XCA7CivjqJk+eGnDqXxcIDsKK+Oolz5qacOpfFwgOwor46iWPnpow6x8XCA7CivjqJQ+aMOgbnxcIDsKK+Ookz5sw6FvfFwgOwor46iSPmt1w618XCA7CivjqIw+Z8OydXxcIDsKK+Ooiz5jaMSVfFwgOwor46iKPnfElWl8XCA7CivjqIk+bcStbnxcIDsKK+Oohj5sxK1ufFwgOwor46iFPm7DqGl8XCA7CivjqIE+emjDrXxcIDsKK+Onuz56aMStfFwgOwor46e3PmR1w7J8XCA7Civjp7U+cMOzdXxcIDsKK+Onsj5zxINufFwgOwor46evPmzEg298XCA7Civjp6o+Z3XErXxcIDsKK+OnqT5ww6hpfFwgOwor46eoPnFpw7p8XCA7Civjp6M+emjDuXxcIDsKK+OnoT5ow6BpfFwgOwor46ecPmxpw6h8XCA7Civjp5g+Y3XDrHxcIDsKK+OnlT5qacO5fFwgOwor46eSPnh1w6l8XCA7Civjp5E+d8OpaXxcIDsKK+OnjD5tw6BvfFwgOwor46eJPmfDoGl8XCA7Civjp4g+ecStbnxcIDsKK+Onhz5txINvfFwgOwor46a5PsOgbmd8XCA7CivjprY+ZGnDqXxcIDsKK+Omrz5odcOyfFwgOwor46asPmx1xY98XCA7Civjpqo+eGnDqHxcIDsKK+OmqT55xK1ufFwgOwor46aoPmzDoW58XCA7Civjpqc+Y8SDbnxcIDsKK+Omoz53w6hpfFwgOwor46aiPmppw6l8XCA7Civjpp8+aMOgaXxcIDsKK+OmnD5odcOyfFwgOwor46aWPm3DqG58XCA7CivjppQ+ecOgbnxcIDsKK+Omjz5zxa1ufFwgOwor46aOPmh1w6B8XCA7Civjpow+dHXDrHxcIDsKK+Omij5odcOhfFwgOwor46W8PnnErW58XCA7Civjpbk+ZsSVbnxcIDsKK+OluD5txK1ufFwgOwor46W1PmjDuW58XCA7CivjpbE+ZsSVaXxcIDsKK+Olrz55xK1ufFwgOwor46WtPnTDoGl8XCA7Civjpao+bMOzdXxcIDsKK+OlqT5kdcWPfFwgOwor46WmPnFpw6h8XCA7CivjpaM+aHXDrHxcIDsKK+Oloj5xacO6fFwgOwor46WfPnhpw6l8XCA7CivjpZ4+Y3XDrHxcIDsKK+OlnD53w6hpfFwgOwor46WSPmPEg2l8XCA7CivjpY4+bMOhaXxcIDsKK+OliT5jaMOofFwgOwor46WIPmRpw6l8XCA7CivjpYc+Y8OhbnxcIDsKK+Olgz5tw6hufFwgOwor46S+PnPDoG58XCA7CivjpLk+cWnDunxcIDsKK+Oksz5ixJVpfFwgOwor46SyPnFpw6h8XCA7CivjpLA+esSDbnxcIDsKK+OkrD5odcOsfFwgOwor46SnPmjDs3V8XCA7CivjpKU+aMOgaXxcIDsKK+OkoD5sacOofFwgOwor46SePmNow6B8XCA7CivjpJw+anXDqXxcIDsKK+Okmz5uw61ufFwgOwor46SYPmNow7l8XCA7CivjpJY+emjDuXxcIDsKK+OklT5jaMO5fFwgOwor46STPmLDqG58XCA7CivjpJE+ecOydXxcIDsKK+OkiT5xacOgfFwgOwor46SIPnHDrG58XCA7CivjpIY+ZsOgbnxcIDsKK+OkhD5ww6hpfFwgOwor46O+PmNow6B8XCA7Civjo70+c2jDuXxcIDsKK+OjvD5yxJVufFwgOwor46OyPnfDqWl8XCA7Civjo7A+eGnDqHxcIDsKK+Ojrz54acOofFwgOwor46OnPnnDrG58XCA7Civjo6U+emjDrHxcIDsKK+Ojnj5kdcOzfFwgOwor46OTPmPDoG58XCA7Civjo40+dMOhaXxcIDsKK+OjhT56w6BufFwgOwor46OBPmLDqGl8XCA7Civjorw+YmnDqHxcIDsKK+Oiuz53xJVpfFwgOwor46K1PnNow6h8XCA7CivjorI+eMO5bnxcIDsKK+Oirz5tw61ufFwgOwor46KuPmNow618XCA7Civjoqg+aMOgbnxcIDsKK+Oimz55w6BufFwgOwor46KZPnHDrW58XCA7CivjopM+ecSDb3xcIDsKK+Oikj5jaMOhfFwgOwor46KRPnR1w618XCA7Civjoo8+dMOzdXxcIDsKK+Oijj5jaMOgfFwgOwor46KLPmNoxK18XCA7Civjook+Y2jDoXxcIDsKK+OiiD50dcOtfFwgOwor46KEPmTDsnV8XCA7CivjooI+ecSDbnxcIDsKK+OigT5jaMStfFwgOwor46G/PmNow6x8XCA7Civjobo+ZMOgbnxcIDsKK+OhuD56aMSDfFwgOwor46G3PmLElW58XCA7CivjobE+amnFrXxcIDsKK+Ohqj5uacOpfFwgOwor46GlPnnErW58XCA7CivjoaI+bcOgbnxcIDsKK+OhoT5jaMO6fFwgOwor46GePmzElWl8XCA7CivjoZw+eHXElXxcIDsKK+Ohjz50w7N1fFwgOwor46GMPm3DoG98XCA7CivjoYo+cWnDoHxcIDsKK+OhiD5tw6lufFwgOwor46GFPm51xY98XCA7CivjoYQ+c8WtbnxcIDsKK+OhgT5rxINpfFwgOwor46C5Pmppw6h8XCA7CivjoLY+ZsOhbnxcIDsKK+OgtD5yw6hufFwgOwor46ClPmx2zIB8XCA7CivjoKM+bMOgaXxcIDsKK+Ogoj5odcOgfFwgOwor46CaPmR1w6x8XCA7CivjoJk+aMOhb3xcIDsKK+OglT53xJVpfFwgOwor46CUPmLDoGl8XCA7CivjoJE+enXDrHxcIDsKK+Ogjz5odcOhfFwgOwor46COPmpqw618XCA7CivjoIg+csO5bnxcIDsKK+Oghz5qacO5fFwgOwor46CAPmTEg298XCA7Civjn7o+bMOzdXxcIDsKK+OfuT5sw6FvfFwgOwor45+yPmp1w6l8XCA7Civjn7E+ecSDb3xcIDsKK+OfrT5tw61ufFwgOwor45+sPnNoxa18XCA7Civjn6o+d8SVaXxcIDsKK+OfqT5tw61ufFwgOwor45+mPnnDuW58XCA7Civjn50+cMOpaXxcIDsKK+Ofmz56w6BufFwgOwor45+ZPmzEg298XCA7Civjn5Q+aMOhbnxcIDsKK+Ofjz5ow6FufFwgOwor45+OPnR1xY98XCA7Civjn4s+ZHXDrHxcIDsKK+OfiT5sw6FvfFwgOwor45+IPnFpw7p8XCA7Civjn4c+Y3XDs3xcIDsKK+Ofhj5odcOhfFwgOwor45+CPmNoxK18XCA7Civjnr8+Y2jDrHxcIDsKK+OevT54dcOofFwgOwor4567PmjDoG98XCA7Civjnrg+c3XDrHxcIDsKK+Oetj5txK1ufFwgOwor4560PmNow618XCA7CivjnrM+ZMWPdXxcIDsKK+Oerz5qacOpfFwgOwor456tPmTDoGl8XCA7Civjnqw+ccOsbnxcIDsKK+Oeqj5uw6FvfFwgOwor456pPmzDoW58XCA7Civjnqg+esSDaXxcIDsKK+Oepz5odcOsfFwgOwor456lPmPDqW58XCA7CivjnqQ+ecOtbnxcIDsKK+OeoD5sw6FvfFwgOwor456YPnTDum58XCA7Civjnpc+cWnDunxcIDsKK+OelT54acOofFwgOwor456RPnfElWl8XCA7Civjno8+emjDqXxcIDsKK+OejD55w7lufFwgOwor456HPnfElWl8XCA7CivjnoU+Z3XFj3xcIDsKK+Oegj50dcStfFwgOwor456BPnnDoG98XCA7Civjnb4+enXFj3xcIDsKK+Oduz5qxK1ufFwgOwor4525Pm7Ds3V8XCA7CivjnbQ+d8OhbnxcIDsKK+Odsj5xxK1ufFwgOwor452uPmN1w6x8XCA7Civjnac+d8SVbnxcIDsKK+Odpj5qw7lufFwgOwor452kPmfDsnV8XCA7CivjnaE+enXDrHxcIDsKK+Odnz5tw6FvfFwgOwor452dPmzDrW58XCA7CivjnZk+ecOtbnxcIDsKK+OdlD55w6BvfFwgOwor452PPmppw6h8XCA7CivjnY0+eGnElXxcIDsKK+OdjD5qacOpfFwgOwor452JPnpow7l8XCA7CivjnYU+Z8OydXxcIDsKK+Odgz5mw6BufFwgOwor452CPnpow6x8XCA7CivjnYE+eMO6bnxcIDsKK+OdgD5ow6BvfFwgOwor45y+PmjDoWl8XCA7CivjnLw+emjDrXxcIDsKK+Ocuj56w6BufFwgOwor45y4Pm5pw6h8XCA7CivjnLY+d8SDbnxcIDsKK+OcsD55dcOofFwgOwor45yuPmzDoG58XCA7CivjnKc+eXXDqHxcIDsKK+Ocpj5ow6BufFwgOwor45ylPm3DoWl8XCA7CivjnKM+csOhbnxcIDsKK+Ocmz5uw6hufFwgOwor45yXPmPEg258XCA7CivjnJY+Y8Ohb3xcIDsKK+OckD5zaMO5fFwgOwor45yPPnnDum58XCA7CivjnIw+Z8OydXxcIDsKK+Ochz5odcOsfFwgOwor45yEPnjDum58XCA7Civjm78+emjDrHxcIDsKK+ObvD5zaMOgfFwgOwor45u7Pmt1xK18XCA7Civjm7g+c2jDuXxcIDsKK+ObtD5uxINvfFwgOwor45uzPmNow6B8XCA7Civjm7E+cnXDrHxcIDsKK+Obrj5zxINvfFwgOwor45uqPnnDoG58XCA7Civjm6c+bcSDbnxcIDsKK+Obpj5sxINufFwgOwor45udPmLDqGl8XCA7Civjm5w+ecOzdXxcIDsKK+Obmz54w6xufFwgOwor45uZPnFpw6h8XCA7Civjm5c+enXDsnxcIDsKK+Obkj5kw7J1fFwgOwor45uRPmPDoG58XCA7Civjm5A+c8WPdXxcIDsKK+ObjT5xacOofFwgOwor45uKPmR1xY98XCA7Civjm4Y+ZHXFj3xcIDsKK+Obgz5qacOpfFwgOwor45uCPm51xY98XCA7Civjmr8+cMOhb3xcIDsKK+Oauj55w7lufFwgOwor45q5Pm3Eg298XCA7Civjmq8+eMOtbnxcIDsKK+OarT55w7N1fFwgOwor45qrPnNow6B8XCA7Civjmqo+aMOgb3xcIDsKK+OaqT5yxINufFwgOwor45qnPnnEg258XCA7Civjmp0+a3XDrXxcIDsKK+OamD5iw6BufFwgOwor45qXPnFpw6l8XCA7CivjmpY+Z8SDb3xcIDsKK+OalD5uacOofFwgOwor45qTPmzDoWl8XCA7CivjmpA+dMOgb3xcIDsKK+Oajz5nxINvfFwgOwor45qNPmd1w7N8XCA7Civjmow+aHXDoHxcIDsKK+Oagz55w7pufFwgOwor45m8PmzElWl8XCA7Civjmbo+Z3XDrHxcIDsKK+OZuD5iw6BvfFwgOwor45m3Pnpow618XCA7CivjmbU+dMOhaXxcIDsKK+OZsz5oxINufFwgOwor45mxPmjDoG98XCA7CivjmbA+eGnDqHxcIDsKK+OZrD55w61ufFwgOwor45mlPmfFrW58XCA7CivjmaQ+eGnDoHxcIDsKK+OZoj5tw6FufFwgOwor45mePm5pw6h8XCA7CivjmZ0+eGnDqXxcIDsKK+OZnD5jaMOtfFwgOwor45mUPmjDoW58XCA7CivjmZM+a3XDrXxcIDsKK+OZkD5kdcWPfFwgOwor45mIPmjDoW58XCA7CivjmYc+Y2jDuXxcIDsKK+OZhT5ixINvfFwgOwor45mCPmR1w6x8XCA7CivjmYA+bGnDuXxcIDsKK+OYvz5uacOofFwgOwor45i2Pmppw6l8XCA7CivjmLQ+enXDsnxcIDsKK+OYqj5ow6BvfFwgOwor45ioPm7DqGl8XCA7CivjmKY+ccOtbnxcIDsKK+OYpT55w7N1fFwgOwor45ihPnhpw6F8XCA7CivjmJ4+aHXDsnxcIDsKK+OYnD5jaMStfFwgOwor45iaPmjEg258XCA7CivjmJk+ecOhbnxcIDsKK+OYlj55w6FufFwgOwor45iVPmjEg258XCA7CivjmJQ+Y8SDbnxcIDsKK+OYkz5sw6FufFwgOwor45iQPnDDoG98XCA7CivjmI4+aMSDbnxcIDsKK+OYiT56aMOsfFwgOwor45iGPnTDoWl8XCA7CivjmIA+enXDsnxcIDsKK+OXvz54acOgfFwgOwor45e3PnPEg2l8XCA7Civjl7Q+ecOhbnxcIDsKK+OXsj5odcOyfFwgOwor45ewPmNow7l8XCA7Civjl6s+cWnDqHxcIDsKK+OXpz56aMOsfFwgOwor45emPmzDoW98XCA7Civjl6U+a3XDsnxcIDsKK+OXnD54acO5fFwgOwor45eXPmLEg2l8XCA7Civjl5Y+ZMOgbnxcIDsKK+OXlT5nw7J1fFwgOwor45eRPmLDoGl8XCA7Civjl4w+emjDrHxcIDsKK+OXiz5ow7N1fFwgOwor45eIPm3DoG58XCA7Civjl4c+eGnDoXxcIDsKK+OXhD5tw6FufFwgOwor45eDPnfElW58XCA7Civjlr8+eGnDqXxcIDsKK+OWvD5kdcWPfFwgOwor45a7PnLDs3V8XCA7Civjlrk+ZsOobnxcIDsKK+OWuD54dcOpfFwgOwor45a3PnNow618XCA7Civjlq4+bMO6bnxcIDsKK+OWqj5ndcOzfFwgOwor45apPnPFj3V8XCA7Civjlqc+d8SVbnxcIDsKK+OWpD5ow6FufFwgOwor45ajPnTDsnV8XCA7Civjlpc+ecOtbnxcIDsKK+OWlj5uacOofFwgOwor45aUPnTFrW58XCA7CivjlpE+eGnDqHxcIDsKK+OWkD53xJVpfFwgOwor45aPPm7DqGl8XCA7CivjloM+aMWPdXxcIDsKK+OWgT5sw6xufFwgOwor45W7PnDFj3V8XCA7Civjlbo+aMOhb3xcIDsKK+OVtz5odcOgfFwgOwor45W2Pm5nzIB8XCA7CivjlbU+Z3XDs3xcIDsKK+OVsj5odcOhfFwgOwor45WxPnnDs3V8XCA7Civjla8+bsOoaXxcIDsKK+OVqj5kxINufFwgOwor45WoPmbDoG58XCA7CivjlaY+aHXDoHxcIDsKK+OVpD5xacO6fFwgOwor45WjPnnEg258XCA7CivjlaI+Z8OgaXxcIDsKK+OVnz5rdcOsfFwgOwor45WcPnNoxK18XCA7CivjlZk+asO5bnxcIDsKK+OVlz55w7J1fFwgOwor45WSPnfDqWl8XCA7CivjlZE+Y2jDunxcIDsKK+OVkD54acSVfFwgOwor45WPPmNow7p8XCA7CivjlYg+aMOydXxcIDsKK+OVhT5qacSDfFwgOwor45WEPnpow6x8XCA7CivjlYI+ecOtbnxcIDsKK+OVgT5xdcOofFwgOwor45S/PnrDsnV8XCA7CivjlL4+amnDqXxcIDsKK+OUvT55w6BvfFwgOwor45S8PnPFrW58XCA7CivjlLo+c2jDrHxcIDsKK+OUtz5sw7J1fFwgOwor45SzPmd1xK18XCA7CivjlK4+bnXDs3xcIDsKK+OUrT5jaMOofFwgOwor45SoPmLDqGl8XCA7CivjlKc+bHnDuXxcIDsKK+OUoz5sw6lpfFwgOwor45SiPmp1w6l8XCA7CivjlJo+a8WPdXxcIDsKK+OUmD5jaMO5fFwgOwor45SXPmbDqGl8XCA7CivjlJE+Y2jDrHxcIDsKK+OUjj54acOofFwgOwor45SNPmR1xY98XCA7CivjlIo+ZMSDbnxcIDsKK+OUiT56aMO6fFwgOwor45SDPmp1w6l8XCA7CivjlII+bMOtbnxcIDsKK+OUgD5sdsOofFwgOwor45O+PmNow618XCA7Civjk7w+Y2jDrHxcIDsKK+OTuT5ydcOsfFwgOwor45O4Pmp1w6l8XCA7Civjk7Y+cWnDqHxcIDsKK+OTtD5qw7lufFwgOwor45OxPnTDs3V8XCA7Civjk7A+aHXDoHxcIDsKK+OTpz55xINufFwgOwor45OkPmppw6l8XCA7Civjk6M+cWnDoHxcIDsKK+OToj5sdcOyfFwgOwor45OcPnnDsnV8XCA7Civjk5c+amnDqXxcIDsKK+OTlD54acOofFwgOwor45OTPm7DoW58XCA7Civjk4g+YsOoaXxcIDsKK+OTgj5rw7J1fFwgOwor45K+PnNow6x8XCA7Civjkrw+bcOhbnxcIDsKK+OSuz5tw6BvfFwgOwor45K4PnN1w6x8XCA7Civjkrc+Z3XEg3xcIDsKK+OStT5tw6BvfFwgOwor45KyPmPDoWl8XCA7Civjkqk+bHXFj3xcIDsKK+OSpj5sxJVpfFwgOwor45KkPnNow6h8XCA7CivjkqE+ecOzdXxcIDsKK+OSoD54acOofFwgOwor45KePmrDuW58XCA7Civjkp0+bWnDqHxcIDsKK+OSmj53xJVufFwgOwor45KXPnTDoWl8XCA7CivjkpQ+c2jFrXxcIDsKK+OSkT5odcOsfFwgOwor45KNPmzDqWl8XCA7Civjkog+aMOgbnxcIDsKK+OShj5jaMOsfFwgOwor45KAPnpoxIN8XCA7Civjkbo+asO5bnxcIDsKK+ORuT5odcOsfFwgOwor45G3PnTDoGl8XCA7CivjkbU+aMOgbnxcIDsKK+ORsT5yxINvfFwgOwor45GwPmh1w6x8XCA7Civjka4+aMO6bnxcIDsKK+ORqT5sdcOzfFwgOwor45GjPmzDoW58XCA7CivjkZo+bnXDs3xcIDsKK+ORmT5kacOpfFwgOwor45GYPmppw6h8XCA7CivjkY8+emjDuXxcIDsKK+ORjj5uxINvfFwgOwor45GNPmzElWl8XCA7CivjkYU+enXDsnxcIDsKK+OQsj5kw6BpfFwgOwor45CwPnjDrG58XCA7CivjkK0+bMStbnxcIDsKK+OQrD5sacO6fFwgOwor45CkPnFpw7p8XCA7CivjkKE+bnXDsnxcIDsKK+OQhj55xK1ufFwgOwor8KaJhj5jaMOhfFwgOwor8KOOtD5kxa1ufFwgOwor8KG9sT5qacOofFwgOwor8KKmjz56YWl8XCA7CivwoICNPnNow6x8XCA7CivwoICJPnFpdXxcIDsKK/CggIU+aMOgaXxcIDsKK+eahD5kxJN8XCA7CivkuIA+eWl8XCA7CivkuI0+YsO5fFwgOwor5LqGPmzEk3xcIDsKK+aIkT53xY98XCA7Civku5Y+dGF8XCA7CivlpKc+ZMOgfFwgOwor5LiqPmfDqHxcIDsKK+WtkD56xK18XCA7Civlkow+aMOpfFwgOwor5L2gPm7ErXxcIDsKK+WcsD5kxJN8XCA7CivkuZ8+ecSVfFwgOwor5b6XPmTDqXxcIDsKK+mCoz5uxIN8XCA7Civku6U+ecStfFwgOwor6IeqPnrDrHxcIDsKK+WOuz5xw7l8XCA7Civlj68+a8SVfFwgOwor5aW5PnRhfFwgOwor6YeMPmzErXxcIDsKK+S5iD5txIF8XCA7CivogIw+w6lyfFwgOwor5pelPnLDrHxcIDsKK+S6jj55w7p8XCA7Civotbc+ccStfFwgOwor5Y+RPmZhfFwgOwor5pegPnfDunxcIDsKK+Wmgj5yw7p8XCA7Civlt7I+ecStfFwgOwor5LiOPnnDunxcIDsKK+aEjz55w6x8XCA7Civmioo+YsSDfFwgOwor5rOVPmbEg3xcIDsKK+atpD5jxK18XCA7Civkuow+w6hyfFwgOwor55CGPmzErXxcIDsKK+WFtj5xw618XCA7Civlt7E+asStfFwgOwor5YS/PsOpcnxcIDsKK+mDqD5iw7l8XCA7Civlips+bMOsfFwgOwor5py6PmppfFwgOwor5YegPmppfFwgOwor5LiaPnnDqHxcIDsKK+aJkz5kw6F8XCA7Civlm5s+c8OsfFwgOwor56ysPmTDrHxcIDsKK+asoT5jw6x8XCA7Civopb8+eGl8XCA7CivmsJQ+ccOsfFwgOwor5YWlPnLDuXxcIDsKK+S6lD53xa18XCA7CivkvZM+dMStfFwgOwor5q+UPmLErXxcIDsKK+ebrj5tw7l8XCA7Civnq4s+bMOsfFwgOwor6amsPm3Eg3xcIDsKK+aVsD5jw7l8XCA7Civlrok+YW58XCA7Civot68+bMO5fFwgOwor5pyfPnFpfFwgOwor5q27PnPErXxcIDsKK+aPkD5kaXxcIDsKK+S9lT5ow6l8XCA7CivlkIg+Z8SVfFwgOwor57O7PnjDrHxcIDsKK+iuoT5qw6x8XCA7Civlj7g+c2l8XCA7CivliKk+bMOsfFwgOwor5Y+KPmrDrXxcIDsKK+WKoT53w7l8XCA7CivlkIQ+Z8OofFwgOwor54mpPnfDuXxcIDsKK+iusD5qw6x8XCA7CivmiJg+esOpfFwgOwor5a6DPnRhfFwgOwor6K64PmjFrXxcIDsKK+WFqz5iYXxcIDsKK+eJuT50w6h8XCA7CivmnI0+ZsO6fFwgOwor6aKYPmTDrHxcIDsKK+W6pj5kw7l8XCA7CivoibI+c8OofFwgOwor5a2XPnrDrHxcIDsKK+eIsT7DoGl8XCA7CivkuYk+d8O5fFwgOwor56eRPmtlfFwgOwor5oCdPnNpfFwgOwor5aSrPmZ1fFwgOwor6LWEPnppfFwgOwor6L6+PmTDoXxcIDsKK+atpj53xa18XCA7CivkuIM+cWl8XCA7Civlv4U+YsOsfFwgOwor54i2PmbDuXxcIDsKK+atpT5iw7l8XCA7Civpnak+Z8OpfFwgOwor5Yy6PnF1fFwgOwor5Y2zPmrDrXxcIDsKK+aKgD5qw6x8XCA7Civor60+ecWtfFwgOwor5Z+6PmppfFwgOwor5p2OPmzErXxcIDsKK+aBrz54aXxcIDsKK+WRoj5uxJN8XCA7CivmnoE+asOtfFwgOwor5b63PmTDqXxcIDsKK+WPlj5xxa18XCA7CivljoY+bMOsfFwgOwor5bm/PmFufFwgOwor6K6uPnnDrHxcIDsKK+mZhT5qw6x8XCA7CivliJk+esOpfFwgOwor5o2uPmp1fFwgOwor5ou/Pm7DoXxcIDsKK+S8vD5zw6x8XCA7Civmlq8+c2l8XCA7CivlvJ8+ZMOsfFwgOwor6K+7PmTDunxcIDsKK+e7hD56xa18XCA7CivokL0+bMOgfFwgOwor5rWOPmrDrHxcIDsKK+WWnD54xK18XCA7Civnprs+bMOtfFwgOwor6ZuGPmrDrXxcIDsKK+W6nD5mxa18XCA7Civmi4k+bGF8XCA7CivmoLw+Z8OpfFwgOwor5biDPmLDuXxcIDsKK+aAlT5ww6B8XCA7Civmr40+bcWtfFwgOwor5bGAPmrDunxcIDsKK+S5kD5sw6h8XCA7Civnuqc+asOtfFwgOwor5YWLPmvDqHxcIDsKK+WTqj5uxIN8XCA7CivkuY4+aHV8XCA7CivkuL4+asWtfFwgOwor5a6iPmvDqHxcIDsKK+iLpj5rxa18XCA7CivotrM+esO6fFwgOwor5bCUPsSVcnxcIDsKK+eDrT5yw6h8XCA7CivnuqY+asStfFwgOwor5ZOlPmdlfFwgOwor5ZCXPm3EgXxcIDsKK+WPpD5nxa18XCA7CivmsYk+ecOsfFwgOwor56qBPnR1fFwgOwor5ZCnPmJhfFwgOwor5LqaPnlhfFwgOwor5aSNPmbDuXxcIDsKK+WIuz5rw6h8XCA7CivlpJw+ecOofFwgOwor5bqVPmTEk3xcIDsKK+aVhT5nw7l8XCA7Civlpog+bWF8XCA7Civlj6U+asO5fFwgOwor6KGjPnlpfFwgOwor6ZmGPmzDuXxcIDsKK+WZqD5xw6x8XCA7CivnoLQ+cMOyfFwgOwor5YW3PmrDuXxcIDsKK+WxhT5qdXxcIDsKK+aJuT5waXxcIDsKK+Wlhz5qaXxcIDsKK+aYkz55w6x8XCA7CivmgKU+asOtfFwgOwor5L2OPmRpfFwgOwor6ZyAPnh1fFwgOwor5rKzPmjDqXxcIDsKK+aXjz56w7p8XCA7Civog6E+aMO6fFwgOwor5LyBPnHErXxcIDsKK+e6qj5qw6x8XCA7Civoi48+ZMOsfFwgOwor5Yy7PnlpfFwgOwor562UPmRhfFwgOwor5ZyfPnTFrXxcIDsKK+WHuz5qw618XCA7CivogrI+ecO5fFwgOwor57utPnjDuXxcIDsKK+eLrD5kw7p8XCA7CivmiLc+aMO5fFwgOwor5ZadPmhlfFwgOwor6LSjPnrDqXxcIDsKK+S9mT55w7p8XCA7CivluIw+eGl8XCA7Civlm74+dMO6fFwgOwor5ZKxPnrDoXxcIDsKK+W4rT54w618XCA7CivplJk+Y8O5fFwgOwor5pqXPsOgbnxcIDsKK+mhuz54dXxcIDsKK+ahiD7DoG58XCA7Civlkbw+aHV8XCA7Civnu4Y+eMOsfFwgOwor6K+JPnPDuXxcIDsKK+eslD5ixK18XCA7Civnpo8+ZsO6fFwgOwor5aeRPmd1fFwgOwor5peiPmrDrHxcIDsKK+W3tD5iYXxcIDsKK+acqD5tw7l8XCA7Civlia8+ZsO5fFwgOwor6L6RPmrDrXxcIDsKK+exsz5txK18XCA7CivmrYw+Z2V8XCA7CivpgJ8+c8O5fFwgOwor5b+9Pmh1fFwgOwor5pWMPmTDrXxcIDsKK+mhvj5nw7l8XCA7CivkuL0+bMOsfFwgOwor5L6dPnlpfFwgOwor5oyJPsOgbnxcIDsKK+a/gD5qaXxcIDsKK+W8gj55w6x8XCA7CivotJ8+ZsO5fFwgOwor5qihPm3Ds3xcIDsKK+mcsj5sw7l8XCA7CivpmLU+w6BpfFwgOwor5a+GPm3DrHxcIDsKK+S5oD54w618XCA7Civmr5I+ZMO6fFwgOwor5rOiPmJvfFwgOwor5bGLPnd1fFwgOwor5a+EPmrDrHxcIDsKK+W4nT5kw6x8XCA7CivkuJ0+c2l8XCA7CivmuZY+aMO6fFwgOwor5aaHPmbDuXxcIDsKK+S8rz5iw7N8XCA7CivlsLw+bsOtfFwgOwor55quPnDDrXxcIDsKK+ellj56xa18XCA7Civlk4g+aGF8XCA7CivnpLw+bMStfFwgOwor5Y6LPnlhfFwgOwor5amGPnDDs3xcIDsKK+WvjD5mw7l8XCA7CivlvZU+bMO5fFwgOwor6YGHPnnDuXxcIDsKK+iJuj55w6x8XCA7Civmma4+cMWtfFwgOwor57SgPnPDuXxcIDsKK+e7pz5qw6x8XCA7Civpm6g+ecWtfFwgOwor5L2bPmbDs3xcIDsKK+iuqD5uw6B8XCA7CivlkLQ+d8O6fFwgOwor5puyPnF1fFwgOwor546JPnnDuXxcIDsKK+WNjz5jw7l8XCA7CivpvZA+ccOtfFwgOwor55aRPnnDrXxcIDsKK+etlj5jw6h8XCA7Civkvos+bMOsfFwgOwor6IKhPmfFrXxcIDsKK+WJpz5qw7l8XCA7CivmgJI+bsO5fFwgOwor5ZWmPmxhfFwgOwor6I6rPm3DsnxcIDsKK+aBqT5lbnxcIDsKK+ebij55w6x8XCA7Civlk60+a3V8XCA7CivnvaI+YsOgfFwgOwor5Y2IPnfFrXxcIDsKK+WNoT5rxIN8XCA7CivljZo+YsOzfFwgOwor5q+VPmLDrHxcIDsKK+aspz5vdXxcIDsKK+Wmuz5xaXxcIDsKK+iZmj54dXxcIDsKK+mihD5wb3xcIDsKK+WIuj5jw6x8XCA7Civpsbw+ecO6fFwgOwor6ICzPsSVcnxcIDsKK+mHjj55xJV8XCA7Civpu5g+bcOyfFwgOwor5b6SPnTDunxcIDsKK+enuz55w618XCA7CivniLg+YsOgfFwgOwor54uQPmjDunxcIDsKK+S6kj5ow7l8XCA7CivpqoI+bcOgfFwgOwor56eYPm3DrHxcIDsKK+ivjT5jw618XCA7Civpqqg+Z8O6fFwgOwor5qyyPnnDuXxcIDsKK+engT5zaXxcIDsKK+iInj53xa18XCA7Civlt6g+asO5fFwgOwor5ZC4PnhpfFwgOwor5ZyjPmt1fFwgOwor6YG/PmLDrHxcIDsKK+W/jD5qw6x8XCA7Civln58+ecO5fFwgOwor5ZGAPnnEgXxcIDsKK+S7mD5mw7l8XCA7CivlupM+a8O5fFwgOwor57u/PmzHnHxcIDsKK+W+kD54w7p8XCA7Civor68+d8O5fFwgOwor57qzPm7DoHxcIDsKK+i/tz5tw618XCA7CivpsoE+bMWtfFwgOwor5oiPPnjDrHxcIDsKK+i2oz5xw7l8XCA7Civor74+a8OofFwgOwor6bq7Pm3DoXxcIDsKK+a0lz54xK18XCA7Civov6s+cMOyfFwgOwor5rG9PnHDrHxcIDsKK+m8kz5nxa18XCA7Civlsrg+w6BufFwgOwor5rWLPmPDqHxcIDsKK+mAlD50w7p8XCA7CivogLY+eWV8XCA7Civmkbg+bW98XCA7Civmi6k+esOpfFwgOwor6KqJPnnDuXxcIDsKK+S7qj55w618XCA7Civml5c+ccOtfFwgOwor5aWlPsOgb3xcIDsKK+aPoT53w7J8XCA7CivniZk+ecOhfFwgOwor6JmRPmzHnHxcIDsKK+aguD5ow6l8XCA7CivooaU+YsWtfFwgOwor6ZuFPnnEg3xcIDsKK+WQiT5qw618XCA7CivkuqY+ecOsfFwgOwor6LC3PmfFrXxcIDsKK+WOiT5sw6x8XCA7Civluo8+eMO5fFwgOwor6ZmEPmbDuXxcIDsKK+m4oT5qaXxcIDsKK+W/hj55w6x8XCA7Civmg5w+eGl8XCA7CivpmpQ+Z8OpfFwgOwor5pKtPmJvfFwgOwor6bq9Pm3EgXxcIDsKK+ajiz5xw618XCA7Civoh4I+YsOsfFwgOwor5pu/PnTDrHxcIDsKK+Wbuj5nw7l8XCA7CivomY4+aMWtfFwgOwor5a2jPmrDrHxcIDsKK+iBmj5qw7l8XCA7Civor5E+ecOsfFwgOwor5LyKPnlpfFwgOwor5pyrPm3DsnxcIDsKK+W8gz5xw6x8XCA7Civns4o+aMO6fFwgOwor5oq1PmTErXxcIDsKK+mBpT5kw618XCA7Civmkak+bcOzfFwgOwor5biBPmLDrHxcIDsKK+WQrz5xxK18XCA7CivnoIE+bcSDfFwgOwor5L+XPnPDunxcIDsKK+edoz5kdXxcIDsKK+mihz5wxY98XCA7CivotLg+YsOsfFwgOwor5a2kPmd1fFwgOwor5LqIPnnDunxcIDsKK+e0qz56xK18XCA7Civkvqc+Y8OofFwgOwor5ouUPmLDoXxcIDsKK+W5lT5tw7l8XCA7Civlo4E+YsOsfFwgOwor6ZetPmLDrHxcIDsKK+Wvuj5zw6x8XCA7CivpgLw+Yml8XCA7CivlkJM+aMOofFwgOwor6aqRPnHDrXxcIDsKK+S/gz5jw7l8XCA7Civlrpw+ecOtfFwgOwor5ZibPm3EgXxcIDsKK+W5hT5mw7p8XCA7CivmsaE+d3V8XCA7CivmiZE+cHV8XCA7CivokKg+c8OgfFwgOwor54uxPnnDuXxcIDsKK+Wygj5xxK18XCA7CivmnpA+eGl8XCA7Civno6g+bcOzfFwgOwor5LyPPmbDunxcIDsKK+i+nj5jw618XCA7Civms6U+bsOtfFwgOwor6by7PmLDrXxcIDsKK+aFlT5tw7l8XCA7Civlrr8+c8O5fFwgOwor57KXPmN1fFwgOwor5LmMPnd1fFwgOwor5oSIPnnDuXxcIDsKK+mTuj5wdXxcIDsKK+eWvj5qw618XCA7CivouI8+dMOgfFwgOwor5LyNPnfFrXxcIDsKK+exjT5qw618XCA7Civliqo+bsWtfFwgOwor5b28PmLErXxcIDsKK+aCiT54aXxcIDsKK+aJjj56YXxcIDsKK+iWhD5iw7N8XCA7Civot50+asO5fFwgOwor5oykPmrErXxcIDsKK+WQkD50xa18XCA7CivmtIE+asOtfFwgOwor6Zi7PnrFrXxcIDsKK+milz5rZXxcIDsKK+eIrD5ww6F8XCA7CivlgbY+xY91fFwgOwor6aG1PnnDqHxcIDsKK+WdoT5wb3xcIDsKK+WLkj5sw6h8XCA7CivloZQ+dMSDfFwgOwor5ouSPmrDuXxcIDsKK+aSkj5zYXxcIDsKK+aWvD55w7p8XCA7Civnu6o+eMO5fFwgOwor6IKaPmTFrXxcIDsKK+S5jz5mw6F8XCA7Civmu5E+Z8WtfFwgOwor5a+CPmrDrHxcIDsKK+aJtj5mw7p8XCA7CivmjZU+YsWtfFwgOwor6a2UPm3Ds3xcIDsKK+Wikz5tw7l8XCA7CivmrLo+cWl8XCA7Civmgp8+d8O5fFwgOwor6LWrPmjDqHxcIDsKK+WxiD5xdXxcIDsKK+i+sT5yxa18XCA7CivotbQ+ZsO5fFwgOwor6YCSPmTDrHxcIDsKK+a2gj50w7p8XCA7CivlibI+Z2V8XCA7CivlirE+bMOsfFwgOwor5a6HPnnFrXxcIDsKK+aQrT5kYXxcIDsKK+a1rj5mw7p8XCA7CivnrKY+ZsO6fFwgOwor6IKDPnPDuXxcIDsKK+WltD5uw7p8XCA7Civlp4o+esStfFwgOwor56efPnp1fFwgOwor5qSFPnnErXxcIDsKK+iFkD5mxa18XCA7Civnk6Y+d8SDfFwgOwor5pOmPmNhfFwgOwor6L6jPmzDoHxcIDsKK+a4oT5kw7l8XCA7Civojbc+aMOpfFwgOwor5aiDPnfDoXxcIDsKK+e9mj5mw6F8XCA7Civlp4Y+bcWtfFwgOwor5oyoPmFpfFwgOwor5oWIPmPDrXxcIDsKK+a+sz7DoG98XCA7CivpqbE+cXV8XCA7Civnqp0+d298XCA7Civoo6Q+a8O5fFwgOwor5LywPmd1fFwgOwor5p2cPmTDuXxcIDsKK+eOmz5txIN8XCA7Civmn68+a2V8XCA7Civlk4A+YWl8XCA7Civohbk+ZsO5fFwgOwor5YuDPmLDs3xcIDsKK+Wfgz5haXxcIDsKK+eogD54aXxcIDsKK+WOjD55YXxcIDsKK+i2iz5jw7l8XCA7CivlgrI+w6BvfFwgOwor5ouoPmJvfFwgOwor6LiiPnRpfFwgOwor5ae/PnppfFwgOwor6buOPmzDrXxcIDsKK+elrT5qw6x8XCA7Civmu7Q+ZGl8XCA7Civooq0+eMOtfFwgOwor5bGgPnTDunxcIDsKK+WSkD5mw7l8XCA7Civmg6c+asO5fFwgOwor5rygPm3DsnxcIDsKK+WWhz5sYXxcIDsKK+S7lD56aXxcIDsKK+WiqD5tw7J8XCA7Civkv7E+anV8XCA7CivlsYE+cMOsfFwgOwor5Yy5PnBpfFwgOwor5oufPm7ErXxcIDsKK+a7iz56aXxcIDsKK+i0uj5ow6h8XCA7Civmipo+ZsWtfFwgOwor5oyWPndhfFwgOwor5YaMPmPDqHxcIDsKK+eGmT54aXxcIDsKK+eipz5iw6x8XCA7Civnm5I+aMOpfFwgOwor6LCKPnnDrXxcIDsKK+WNpz53w7J8XCA7Civnv7w+ecOsfFwgOwor5rSSPnPEg3xcIDsKK+iwsT5wxa18XCA7CivpmIE+Z8OpfFwgOwor6KaGPmbDuXxcIDsKK+aKuT5txY98XCA7CivljaI+YsO5fFwgOwor56KNPsOgaXxcIDsKK+eLhD5kw618XCA7Civmirw+eWF8XCA7Civpm74+d8O5fFwgOwor5oiaPnFpfFwgOwor5b6hPnnDuXxcIDsKK+mFtz5rw7l8XCA7Civoib4+w6BpfFwgOwor5ZSJPmFpfFwgOwor5pC6PnhpfFwgOwor56mGPm3DuXxcIDsKK+mDgT55w7l8XCA7CivlgoU+ZsO5fFwgOwor56ijPnN1fFwgOwor54mnPm3DuXxcIDsKK+WEkj5yw7p8XCA7CivnlrI+cMOtfFwgOwor6LWMPmTFrXxcIDsKK+WSqD56aXxcIDsKK+WYuz54aXxcIDsKK+eCiT5sw7p8XCA7Civov6o+ZMOtfFwgOwor5oqrPnBpfFwgOwor5YmlPmJvfFwgOwor5b25PnnDrHxcIDsKK+mAhj5uw6x8XCA7Civnn64+xINpfFwgOwor5aSVPnhpfFwgOwor5rayPnnDqHxcIDsKK+S7hj5wdXxcIDsKK+W8pT5tw618XCA7CivmuLQ+a8SVfFwgOwor5qKvPnRpfFwgOwor6JKCPmTDrHxcIDsKK+Wotj5xxa18XCA7CivlvJc+ZsO6fFwgOwor55KDPmzDrXxcIDsKK+iCpD5mdXxcIDsKK+m5vz5sw7l8XCA7Civmi5M+dMOgfFwgOwor5ZOpPmxpfFwgOwor5p6vPmt1fFwgOwor5aGRPnPDuXxcIDsKK+ixqz55w7l8XCA7CivmipE+ecOsfFwgOwor6ImzPmLDs3xcIDsKK+eOuz5ib3xcIDsKK+eguD56w6F8XCA7CivokZs+Z8OpfFwgOwor55+pPmrFrXxcIDsKK+iElj5iw7N8XCA7CivohL4+cMOtfFwgOwor6LWQPnPDrHxcIDsKK+iThD54w7l8XCA7CivpuaQ+aMOofFwgOwor6L6fPmLDrHxcIDsKK+a4lD55w7p8XCA7CivpnLg+YsOgfFwgOwor5ZORPnnEg3xcIDsKK+a1pj5wxa18XCA7Civnibo+eGl8XCA7CivlkIE+eHV8XCA7CivplKE+eMOtfFwgOwor6IqZPmbDunxcIDsKK+WTnz55xY18XCA7Civmg7k+csSVfFwgOwor5aWRPnHDrHxcIDsKK+aEmj55w7p8XCA7Civlp6g+ecOtfFwgOwor6ZmMPm3DsnxcIDsKK+eMjj54w618XCA7CivppaU+aml8XCA7Civlh4Q+cWl8XCA7Civohp0+eGl8XCA7Civliog+cGl8XCA7Civmtq8+ecOhfFwgOwor5oiIPmdlfFwgOwor5aC1PmTFrXxcIDsKK+mbhz5nw7l8XCA7Civms4o+YsOzfFwgOwor5pKVPnNpfFwgOwor5Y+ZPnjDuXxcIDsKK+ajtT5rZXxcIDsKK+actD5ww7J8XCA7Civmuqo+cWl8XCA7Civojok+bMOsfFwgOwor56OVPmtlfFwgOwor5piUPnhpfFwgOwor56OBPmPDrXxcIDsKK+S/rz5mxa18XCA7Civmi4I+ZsO6fFwgOwor5L+6PsSDbnxcIDsKK+W4lT5ww6B8XCA7Civll68+ZW58XCA7Civms7w+cG98XCA7CivlppM+asOsfFwgOwor6I+pPnDDunxcIDsKK+WOlT5jw6h8XCA7Civkv5g+ZsO6fFwgOwor5q+FPnnDrHxcIDsKK+S4qz55YXxcIDsKK+eykj5sw6x8XCA7Civnp4M+dHV8XCA7CivohYo+bMOgfFwgOwor5YCqPm7DrXxcIDsKK+eRnz5zw6h8XCA7CivpuK0+eWF8XCA7CivonJw+bcOsfFwgOwor5aqzPnjDrXxcIDsKK+atpz5xw618XCA7Civkuqk+bcWtfFwgOwor5a+ePm3DsnxcIDsKK+aQgT5nZXxcIDsKK+S/nj55w7p8XCA7CivkvJA+ZsOhfFwgOwor5ryGPnFpfFwgOwor5oCWPmLDuXxcIDsKK+WQvj53w7p8XCA7Civllbg+a2F8XCA7CivogoY+c8OsfFwgOwor5rOjPnHDrHxcIDsKK+i1iz5mw7l8XCA7Civnhqw+YW98XCA7CivmhIk+ecO6fFwgOwor6L6cPmd1fFwgOwor6IKMPmppfFwgOwor5769PnnFrXxcIDsKK+avmT5iw6x8XCA7Civmi5g+anV8XCA7Civlk4c+d2F8XCA7CivpgLg+ecOsfFwgOwor5Y2cPmLFjXxcIDsKK+Wvkz55w7l8XCA7CivpqbM+YsOzfFwgOwor5rW0PnnDuXxcIDsKK+WSlT5ndXxcIDsKK+aQjz5iw7N8XCA7CivmuKA+ccO6fFwgOwor5aS3PnnDrXxcIDsKK+ayqj5ow7l8XCA7CivprYQ+cMOyfFwgOwor5pmwPnhpfFwgOwor6KOUPnnDrHxcIDsKK+WAmj55xK18XCA7CivloYw+dGF8XCA7Civoo5U+ecO5fFwgOwor5LmzPnLFrXxcIDsKK+WLvz53w7l8XCA7Civnnbk+ZMWtfFwgOwor6K62PnnDoHxcIDsKK+WSlj5rYXxcIDsKK+WosT55w7p8XCA7CivpuKY+eWF8XCA7Civlpq4+bml8XCA7Civoo7g+a8OofFwgOwor55SrPmbFrXxcIDsKK+WdnT5iw6B8XCA7CivmspA+bcO5fFwgOwor5L6uPnfFrXxcIDsKK+WFgD53w7l8XCA7Civnsp4+eGl8XCA7CivmuqI+ecOsfFwgOwor5LmePnHErXxcIDsKK+e8mj5mw7p8XCA7CivoiIY+ecO6fFwgOwor5aCkPmRpfFwgOwor6LmEPnTDrXxcIDsKK+ayqz5tw7J8XCA7Civlo7Y+aMO6fFwgOwor56KMPmzDuXxcIDsKK+mptD5sx5h8XCA7CivphJk+YsStfFwgOwor5aOzPmvDqXxcIDsKK+iKpj5sw7p8XCA7Civog7M+Z2V8XCA7Civnn6M+ecStfFwgOwor6ISKPmrErXxcIDsKK+i+hT5mxa18XCA7Civohoo+YsOzfFwgOwor5Z6DPmxhfFwgOwor6Zq2PmzDrHxcIDsKK+WTjj5haXxcIDsKK+WFlD50w7l8XCA7CivlnL4+asOtfFwgOwor5Za7PnnDuXxcIDsKK+WwrD5nw6B8XCA7CivlkZA+bsOofFwgOwor6I+KPmrDunxcIDsKK+WWgD5rYXxcIDsKK+eTtz5jw618XCA7CivonKE+bMOgfFwgOwor5YmCPmrDrHxcIDsKK+W6kD5sw7p8XCA7CivlpZo+eGl8XCA7CivokaE+cMO6fFwgOwor6JOmPm3DsnxcIDsKK+S5mT55xK18XCA7Civor7U+ZWl8XCA7CivnpYE+ccOtfFwgOwor5pquPm3DuXxcIDsKK+iFuz5uw6x8XCA7CivllaQ+cMOtfFwgOwor56a+PmjDqXxcIDsKK+mTuD5ww7l8XCA7Civouq8+cXV8XCA7CivppoA+ecO6fFwgOwor5qKoPmzDrXxcIDsKK+eQqj5xw618XCA7Civlg7s+cMOsfFwgOwor5YyVPmJpfFwgOwor6ZqZPnjDrHxcIDsKK+WFuT56aXxcIDsKK+aAoT55w618XCA7Civnj4I+a2V8XCA7CivnmYw+w6FpfFwgOwor6IacPm3Ds3xcIDsKK+iMqD5jw618XCA7Civnlqs+ecOsfFwgOwor5rGdPnLFrXxcIDsKK+mekT5kw6F8XCA7Civnqp8+a3V8XCA7CivnrJs+ZMOtfFwgOwor6JS9PmLDrHxcIDsKK+WNkj5jw7l8XCA7Civol4k+asOtfFwgOwor54aEPnjDrXxcIDsKK+e7rj5xxK18XCA7CivlkI8+bMOsfFwgOwor6K2sPnDDrHxcIDsKK+Wpvz54w7l8XCA7CivpgL4+ecO6fFwgOwor5aaSPmTDuXxcIDsKK+a1hz7DoG98XCA7Civlkqo+bWl8XCA7CivnpYg+ccOtfFwgOwor6buvPsOgbnxcIDsKK+emuT55xa18XCA7Civpno0+YW58XCA7Civllao+cGF8XCA7Civnu70+bMO5fFwgOwor5Y+tPmJhfFwgOwor5Zi2PnNpfFwgOwor5byKPmLDrHxcIDsKK+WVvD50w618XCA7Civphos+Y8O5fFwgOwor55yvPm3ErXxcIDsKK+eovT5qaXxcIDsKK+WYnz5kdXxcIDsKK+iinD53w6B8XCA7CivlhrY+ecSVfFwgOwor5ZCxPnppfFwgOwor5oOVPnTDrHxcIDsKK+aglz5sw6x8XCA7Civmlqc+ZsWtfFwgOwor6K6lPmppfFwgOwor6L+EPnHDrHxcIDsKK+a8kz5sw618XCA7Civlha4+eGl8XCA7Civmlbc+ZnV8XCA7Civmr5M+ecO5fFwgOwor55GcPnnDunxcIDsKK+aikz56xK18XCA7CivmlZ0+YsOsfFwgOwor6KKxPmbDunxcIDsKK+i1jj5jw6x8XCA7CivomY8+bMWtfFwgOwor5YmDPnTDrHxcIDsKK+mzjD7DoW98XCA7CivmsoM+d8OyfFwgOwor5qKnPnfDunxcIDsKK+WnrD5qaXxcIDsKK+mckz5uw618XCA7Civokas+aMO6fFwgOwor5raVPnTDrHxcIDsKK+esgz5kxa18XCA7Civlkos+esOpfFwgOwor5ZGVPm91fFwgOwor5petPnjDuXxcIDsKK+aNgj53xa18XCA7Civlt6s+d3V8XCA7CivlnZ4+d8O5fFwgOwor5auJPmrDrXxcIDsKK+emhD5sw7l8XCA7CivlmJg+eHV8XCA7Civor6w+d8O6fFwgOwor5YufPm3DuXxcIDsKK+WehD5hb3xcIDsKK+iKrT5iYXxcIDsKK+WPvT5qaXxcIDsKK+i2tD5wYXxcIDsKK+a8qj55aXxcIDsKK+eWpD5iYXxcIDsKK+iagT55xK18XCA7CivlqIU+ecOgfFwgOwor57KfPnPDuXxcIDsKK+S8uj5jw6x8XCA7Civop5E+ccO5fFwgOwor5ouOPmrFrXxcIDsKK+WZnD5sdXxcIDsKK+iSsj5ww7p8XCA7Civms7s+Ym98XCA7Civlh7g+dHV8XCA7CivlrIk+eGl8XCA7CivmoJY+cWl8XCA7Civot4s+YsOhfFwgOwor5rKuPmrFrXxcIDsKK+WYjj5nw6F8XCA7Civlkq8+Z2V8XCA7CivmiZI+YmF8XCA7CivlnKo+Z2V8XCA7Civpqbk+anV8XCA7Civmmqg+asOsfFwgOwor57WuPnjDuXxcIDsKK+idtD5ow7p8XCA7CivpuL0+Z2V8XCA7Civlh7k+YW98XCA7Civmg5o+aHV8XCA7CivmuJ0+ecO6fFwgOwor6Z2hPm3DrXxcIDsKK+aPlj55aXxcIDsKK+autD5vdXxcIDsKK+WYgD5kw618XCA7CivlmZc+cHV8XCA7CivnvIk+ccOsfFwgOwor57CHPmPDuXxcIDsKK+iKvT55w6F8XCA7Civmh4o+w6BvfFwgOwor6aWyPnPDrHxcIDsKK+mYgD5mw6F8XCA7CivosJU+ecO5fFwgOwor57yUPmTDrHxcIDsKK+W6hz5iw6x8XCA7Civmi4c+bcWtfFwgOwor5Yy/Pm7DrHxcIDsKK+WOmD5sw618XCA7CivoooQ+xINvfFwgOwor6JqCPm3Eg3xcIDsKK+eMrD5ow6h8XCA7CivliZQ+dGl8XCA7Civlsb8+ecWtfFwgOwor5bq1PmFufFwgOwor5L+QPmzDrHxcIDsKK+aLlz7Eg298XCA7CivlrZw+eml8XCA7Civmuq8+c8O5fFwgOwor56anPnjErXxcIDsKK+ihmT55w6F8XCA7CivpnqA+anV8XCA7CivlhoA+asOsfFwgOwor5pmkPnfDuXxcIDsKK+WllT55w6x8XCA7CivlsYk+dMOsfFwgOwor5ou9PnnDqHxcIDsKK+ivoz55w6x8XCA7CivnpaA+Y8OtfFwgOwor57CMPnPDuXxcIDsKK+ajmD5qw618XCA7CivmjrM+bMWtfFwgOwor54u4PmzDrXxcIDsKK+iLmz5rZXxcIDsKK+ewvz5iw7l8XCA7Civlsbk+ecOsfFwgOwor56CMPnHDrHxcIDsKK+ihsj5uw6B8XCA7CivmtLw+d2F8XCA7Civmprs+dMOgfFwgOwor6JmePnnDunxcIDsKK+ibmT53YXxcIDsKK+mUrz5qw7l8XCA7Civnnr8+asO5fFwgOwor5ZSsPmjFrXxcIDsKK+iErz5mxa18XCA7Civor4U+esWtfFwgOwor54mhPm3FrXxcIDsKK+WXkj50w6B8XCA7CivovpA+ZsO6fFwgOwor5aKfPnh1fFwgOwor5oGkPnjDuXxcIDsKK+ikpT5yw7l8XCA7Civnlpk+Z2V8XCA7CivmtqE+d298XCA7CivlqaI+YsOsfFwgOwor5ryJPmzDuXxcIDsKK+mmjT5tw7N8XCA7CivnsqQ+ecO5fFwgOwor54qBPmzDrXxcIDsKK+aygj55w618XCA7Civmm7M+ecOofFwgOwor6YWlPnN1fFwgOwor6aKFPmzDunxcIDsKK+mStT5ib3xcIDsKK+ibpD5nw6l8XCA7Civpmpg+w6BpfFwgOwor55ipPmTDoXxcIDsKK+aIrj5sw7l8XCA7CivmuKU+d8OyfFwgOwor6LmLPnTDoHxcIDsKK+edpj5tw7l8XCA7Civpm4w+Y8OtfFwgOwor6L2nPmfDoXxcIDsKK+WflD5wxa18XCA7Civmuro+bsOsfFwgOwor6J2gPmbDunxcIDsKK+WZjj55ZXxcIDsKK+iKnD53w7p8XCA7CivnvoE+aml8XCA7CivlkoA+asWtfFwgOwor6ZicPmbDuXxcIDsKK+mdtj5ixIN8XCA7CivlkbE+Z3V8XCA7CivlvKc+aMO6fFwgOwor6IWRPmbFrXxcIDsKK+iwmz5kw6x8XCA7Civngqw+asO5fFwgOwor5Zm2PmfDoXxcIDsKK+iUvD7Eg2l8XCA7CivoiLY+YsOzfFwgOwor5riOPmTDunxcIDsKK+eXnj5wxK18XCA7Civmjbo+bsOgfFwgOwor5q+LPnfDunxcIDsKK+ewuD5ixY98XCA7CivmiIo+d8O5fFwgOwor6Iy5PnLDunxcIDsKK+ibkD5xdXxcIDsKK+mZmz5iw6x8XCA7Civnkqc+YsOsfFwgOwor5ZSUPnfDunxcIDsKK+evsT5sw618XCA7Civov4I+eXV8XCA7CivohYs+ecOofFwgOwor5bSOPnHDrXxcIDsKK+aBqj5rw6h8XCA7CivovbY+ecOsfFwgOwor55C2PnDDoXxcIDsKK+WJjD5sw6F8XCA7CivotYI+bMO5fFwgOwor5pWWPsOhb3xcIDsKK+eQtT5ww618XCA7Civku4Q+esOofFwgOwor5rakPmTDrXxcIDsKK+mCrD53dXxcIDsKK+Wdtz5rxJV8XCA7CivpupM+bMO5fFwgOwor6KSQPmjDqXxcIDsKK+Wakz5jYXxcIDsKK+e7jj55w6x8XCA7Civlk7o+YsWtfFwgOwor5Y2FPnPDoHxcIDsKK+a4jT56w6x8XCA7CivmiJ8+asStfFwgOwor6LebPmLFj3xcIDsKK+ifhj5tw6F8XCA7CivpgpE+ecOsfFwgOwor55KQPmzDuXxcIDsKK+W/kj50w6h8XCA7CivpmoU+ecO6fFwgOwor5Z+gPmLDuXxcIDsKK+esiD5qw618XCA7CivmoKk+eMWtfFwgOwor5oK4PmrDrHxcIDsKK+axsj5qw618XCA7Civnnag+bsOsfFwgOwor5rekPnl1fFwgOwor566NPmd1fFwgOwor5ZejPnPDrHxcIDsKK+aMjj5rdXxcIDsKK+i4nj5qw7l8XCA7Civmgbs+Y8OofFwgOwor5ZS3PnlvfFwgOwor6KCVPnLDunxcIDsKK+mcuT5waXxcIDsKK+i5ij54aXxcIDsKK+eSnj5ww7p8XCA7CivnrKA+bMOsfFwgOwor5ZSnPmppfFwgOwor56W6PnHDrXxcIDsKK+mSoD5uw6B8XCA7Civoj4c+Z3V8XCA7CivpuKU+b3V8XCA7Civpm7M+bMOsfFwgOwor5qaGPnnDunxcIDsKK+aRuT5tw7N8XCA7CivmspM+dMOgfFwgOwor54ydPmPDuXxcIDsKK+W8qT5uxa18XCA7Civmm50+cMO5fFwgOwor5LyOPmrDrHxcIDsKK+eKgD54aXxcIDsKK+abpj54aXxcIDsKK+ibij5nxa18XCA7Civpqbg+ZsO5fFwgOwor55mWPnDErXxcIDsKK+iutz5uw6h8XCA7CivmuKQ+YsOzfFwgOwor6L6YPmzDuXxcIDsKK+eQpj5xw618XCA7Civol5U+xY91fFwgOwor5Ze3PsOhb3xcIDsKK+i3uz5qaXxcIDsKK+WTkj5kYXxcIDsKK+aIjD54dXxcIDsKK+mHnD5mxa18XCA7Civojbw+dMO6fFwgOwor54uwPnhpfFwgOwor55W4PmppfFwgOwor576yPnhpfFwgOwor5pqnPsOgaXxcIDsKK+e/jD55w6x8XCA7CivonIg+d8O6fFwgOwor5byIPnnDrHxcIDsKK+i0uz55w618XCA7CivnpYA+c8OsfFwgOwor556MPmtlfFwgOwor5a2aPmbDunxcIDsKK+S6nz5qw618XCA7CivmhKs+c8O5fFwgOwor6LCZPmFufFwgOwor6IG/PnnDuXxcIDsKK+eGuT54aXxcIDsKK+WahT5yw7p8XCA7CivplYA+ZMO5fFwgOwor5Y2kPmzFrXxcIDsKK+eakT7DoWl8XCA7CivlqKM+ZMOsfFwgOwor5ZKUPmvEg3xcIDsKK+etjz5mw6F8XCA7CivnmZ4+bMOgfFwgOwor6aOSPnPDoHxcIDsKK+aoqD54aXxcIDsKK+a7pD5sx5x8XCA7CivouZk+Y8O5fFwgOwor6IOlPnh1fFwgOwor5LyrPmLDoHxcIDsKK+exvT56xK18XCA7Civlvpk+eMStfFwgOwor5ZSPPnhpfFwgOwor6I2UPmzDrHxcIDsKK+eKij5kw7p8XCA7CivnhaY+eMWtfFwgOwor5rGpPmfFrXxcIDsKK+avlz5ww618XCA7CivlnbM+w6BvfFwgOwor6ISQPmppfFwgOwor5ZyDPnDFrXxcIDsKK+eGoD55w6x8XCA7CivpsqQ+bMStfFwgOwor5bibPmLDs3xcIDsKK+mqtz5rdXxcIDsKK+mruz5qw6x8XCA7CivooKE+bMOtfFwgOwor5LiVPnBpfFwgOwor5Z2vPnBpfFwgOwor5aapPnfFrXxcIDsKK+WroT5kw618XCA7Civmsr0+Z3V8XCA7Civpqa0+ecO5fFwgOwor5pahPnfDsnxcIDsKK+WVrD5zw6h8XCA7Civoios+ecO5fFwgOwor6JiRPm3Ds3xcIDsKK+W/kT50w6h8XCA7Civnj6U+xJVyfFwgOwor5ZaPPnLElXxcIDsKK+WSgj56YXxcIDsKK+mCuD5kxK18XCA7Civmjqw+asO6fFwgOwor56yGPmJhfFwgOwor5YCtPndvfFwgOwor6JmsPmrErXxcIDsKK+WjkT5ow6h8XCA7Civoh4Y+ecOsfFwgOwor5a26PnLDunxcIDsKK+mmpT5mw7l8XCA7Civlkr8+eWl8XCA7Civkv74+YsStfFwgOwor5rOMPmLDrHxcIDsKK+mcrT7Eg2l8XCA7CivpqqU+Z3V8XCA7CivmmLU+bsOsfFwgOwor6am/PnnDrHxcIDsKK+W1hz5qaXxcIDsKK+mYgj5ow6l8XCA7Civpqrw+Z8OpfFwgOwor54mvPmfFrXxcIDsKK+mEsT5ww7N8XCA7Civmso8+cWl8XCA7CivnqLc+asOsfFwgOwor5Yq+PmjDqXxcIDsKK+eOkT5qaXxcIDsKK+S/nz5zw6x8XCA7Civls6o+ecO5fFwgOwor5ZqPPnTDrHxcIDsKK+egvj5sw6x8XCA7CivnrpU+aml8XCA7CivlvLw+YsOsfFwgOwor6ICZPmLDoHxcIDsKK+mUoj5nw7l8XCA7Civlspw+YmF8XCA7CivllLA+asOtfFwgOwor6IC3PmRhfFwgOwor6I+gPmJvfFwgOwor5Zm8PnBpfFwgOwor6K+DPmhlfFwgOwor5a21PmZ1fFwgOwor6aW1PsSVcnxcIDsKK+a/oT5yw7p8XCA7Civnpro+ecO6fFwgOwor6J2MPmtlfFwgOwor5ra4PmjDqXxcIDsKK+eXuT5iw6x8XCA7CivmsKg+YW58XCA7CivmiYg+aMO5fFwgOwor5reFPnhpfFwgOwor6ZiWPmfDqXxcIDsKK+W3sz5zw6x8XCA7CivlqrI+cMOsfFwgOwor6Ze+PmzHmHxcIDsKK+azlz5zw6x8XCA7Civpqbc+c8OsfFwgOwor6ZS5PmzDrHxcIDsKK+aAqT5uw618XCA7CivlvZ0+ecOtfFwgOwor5o6WPnllfFwgOwor5reHPnHDrXxcIDsKK+iviz5kxK18XCA7CivlspY+cXV8XCA7Civmhqk+ccOsfFwgOwor5oi+PmzDrHxcIDsKK+WXrD5oZXxcIDsKK+ifiz54aXxcIDsKK+eYoD5qw618XCA7CivmqZg+asO6fFwgOwor5rqlPnDFrXxcIDsKK+iwkj50w618XCA7CivmgaM+esOsfFwgOwor6KeOPnnDunxcIDsKK+apuT5sxa18XCA7CivlkZM+ecOsfFwgOwor5qSwPnnDqXxcIDsKK+inij5nxa18XCA7Civll50+Z8OpfFwgOwor5ZSiPmppfFwgOwor5YydPnphfFwgOwor6LCAPnnDunxcIDsKK+eXoj5sw6x8XCA7CivnnYc+ZMOsfFwgOwor54aoPnnDuXxcIDsKK+eJjT5kw7p8XCA7Civlj7U+cMWPfFwgOwor57OcPm3DrXxcIDsKK+WXkT5rw6h8XCA7Civll7M+w6BpfFwgOwor55GaPmjDunxcIDsKK+eamT54aXxcIDsKK+aNsT7DoWl8XCA7Civnm4I+ecO6fFwgOwor5aO5PnlpfFwgOwor6YW2PmzDrXxcIDsKK+ihoj5xw7p8XCA7CivmnZ4+ccStfFwgOwor57+xPsOhb3xcIDsKK+ePgD5ww7J8XCA7Civlsow+asOtfFwgOwor5YGIPmrDrHxcIDsKK+ivqT54xa18XCA7CivogIY+ccOtfFwgOwor5466PnjErXxcIDsKK+eWtT5jaXxcIDsKK+i/pD55w618XCA7Civnv58+ZMOtfFwgOwor5qaIPmzHmHxcIDsKK+mBoj50w6B8XCA7CivojIk+bcOyfFwgOwor6YWXPnjDuXxcIDsKK+ajoz5kw6x8XCA7CivnuqU+Z2V8XCA7Civol5w+bMOtfFwgOwor56S0PmLDs3xcIDsKK+a7kz56xK18XCA7CivpnIE+asOsfFwgOwor6bmCPmzDrXxcIDsKK+e9uT5sw618XCA7Civlpqo+ecO5fFwgOwor5aSZPnPDuXxcIDsKK+WykD5xw618XCA7CivllL8+aHV8XCA7Civlkp0+c2l8XCA7CivpnaU+ecOofFwgOwor6bmYPmfDunxcIDsKK+aPhD55w7p8XCA7CivpuYk+d8WtfFwgOwor54uZPmp1fFwgOwor57KRPmJhfFwgOwor5Zy7PnHDrXxcIDsKK+Wmsj5kw6F8XCA7Civpg6Y+bMOsfFwgOwor6K60Pm91fFwgOwor5b+kPnfFrXxcIDsKK+m+jD53w7J8XCA7Civpua0+bMO5fFwgOwor5ZKtPmppfFwgOwor5L2aPnnDrHxcIDsKK+i5tD5jw7l8XCA7CivotoQ+anV8XCA7Civpgos+bMOhfFwgOwor5a6TPm3DrHxcIDsKK+aPtj55w6l8XCA7CivnspU+cMOyfFwgOwor6YGoPsOhb3xcIDsKK+WMjT5ww7p8XCA7Civov6k+xJVyfFwgOwor5ZmrPnlpfFwgOwor5byLPnnDrHxcIDsKK+S/jj56xa18XCA7Civpk4I+YsOzfFwgOwor6aqbPsOgb3xcIDsKK+mSvj5ow6l8XCA7CivlmIE+cWl8XCA7CivovbI+a2V8XCA7Civkv5o+bMStfFwgOwor6ZK5PmLDoXxcIDsKK+mdvD5kw6F8XCA7CivohbQ+ecO6fFwgOwor5qqEPnjDrXxcIDsKK+iOhj5ww7p8XCA7Civmsag+bcOsfFwgOwor5oe/PnnDrHxcIDsKK+WAnD50w6x8XCA7Civom4Y+cXV8XCA7Civpk6w+Z8OpfFwgOwor6aKMPmfDqXxcIDsKK+i0sj5iw6x8XCA7Civok58+asOsfFwgOwor6bmcPm3DuXxcIDsKK+i+jj56aXxcIDsKK+iDsD55w618XCA7Civoh74+ecO6fFwgOwor5rO4PmzDunxcIDsKK+mPlj7DoW98XCA7CivlnIQ+ecWtfFwgOwor6ZOkPmhhfFwgOwor6aOTPmrDuXxcIDsKK+mBvT5qw7l8XCA7CivmsZA+eGl8XCA7Civppb0+YsOzfFwgOwor5YCoPmrDuXxcIDsKK+iuoz5mw7l8XCA7Civmoo8+Z8O5fFwgOwor56WbPnF1fFwgOwor5peOPm7ErXxcIDsKK+ahoD55w6F8XCA7Civmt4Q+eml8XCA7CivnlaY+ccOtfFwgOwor6KO+Pmp1fFwgOwor5bGQPmppfFwgOwor5pGBPsOobnxcIDsKK+iNuz5kw618XCA7CivmtLE+xJVyfFwgOwor6KOoPmLDrHxcIDsKK+eMoj5ow7p8XCA7Civokro+asOtfFwgOwor54OvPnhpfFwgOwor6La/PnPDoHxcIDsKK+aXlj55xK18XCA7CivojaA+ccOtfFwgOwor5YyQPmbDunxcIDsKK+myqz5qw6x8XCA7Civnv5U+eMOsfFwgOwor57yiPnnDrHxcIDsKK+mqij5sw618XCA7Civlm6s+aMO6fFwgOwor5p+iPmTErXxcIDsKK+eVvz5qaXxcIDsKK+mTsT55xK18XCA7CivnuLs+bcOtfFwgOwor6b6HPnppfFwgOwor6Li9PmrFrXxcIDsKK+ikoT5kYXxcIDsKK+eqoD5rZXxcIDsKK+iPjz5nZXxcIDsKK+iIuD5nxJV8XCA7CivnnJk+ecOtfFwgOwor55uxPnh1fFwgOwor54WcPnnDuXxcIDsKK+adtz5ww6F8XCA7Civokak+cGF8XCA7Civog7o+w6BufFwgOwor6autPnppfFwgOwor6biqPmd1fFwgOwor5pevPmzDoXxcIDsKK+aXrj54w7l8XCA7CivnkKU+aMWtfFwgOwor6bqSPnHDrXxcIDsKK+egpT5kxK18XCA7Civona4+ZsO5fFwgOwor55iAPnl1fFwgOwor6JC4PnnDunxcIDsKK+ianT5jw6x8XCA7Civmnoc+cMOtfFwgOwor5ZOUPmLDrHxcIDsKK+aMuT55w6x8XCA7Civmlps+aMO6fFwgOwor56ejPm3DsnxcIDsKK+elnD5ow7l8XCA7Civmk5g+YsOyfFwgOwor54qEPmppfFwgOwor6L2xPmt1fFwgOwor5oSOPmLDrHxcIDsKK+WUsz5sw6x8XCA7CivmsJA+ZGl8XCA7CivnoJI+cGl8XCA7CivmsqQ+w7J1fFwgOwor5rCfPmbDunxcIDsKK+m6iz5tw618XCA7Civnl40+ecOtfFwgOwor6YK6PnnDqHxcIDsKK+eNrT50xIN8XCA7Civpu6I+cXV8XCA7CivmvZ4+bMO5fFwgOwor5pixPnnDuXxcIDsKK+i9sz5sw7p8XCA7CivlqLI+d2F8XCA7CivokIs+cWl8XCA7CivosJg+eml8XCA7CivnsbQ+ZMOtfFwgOwor55a9Pmp1fFwgOwor6aKNPmtlfFwgOwor56GSPnhpfFwgOwor6bONPnHDrXxcIDsKK+a2qj5mw7p8XCA7CivnrpQ+YsOzfFwgOwor6bmEPmjDunxcIDsKK+iDqj5sw7p8XCA7CivlvK0+bcStfFwgOwor5oCEPsOydXxcIDsKK+iMrz5mw7p8XCA7Civpho0+dMOtfFwgOwor6ZSCPmzErXxcIDsKK+edpT5iw6x8XCA7Civnk68+b3V8XCA7CivojoU+bMOsfFwgOwor6LCfPm3Ds3xcIDsKK+iuqz5xw6x8XCA7Civnv7M+ecOsfFwgOwor55mvPnHDunxcIDsKK+mSuD5iw7N8XCA7CivnnKY+esOsfFwgOwor5qWrPmrDrXxcIDsKK+WojD5sxK18XCA7CivpgKY+bMStfFwgOwor5bmEPnfDsnxcIDsKK+S6sz5iw7N8XCA7CivogoQ+ecOsfFwgOwor56CdPmbDoXxcIDsKK+mqnD7DoW98XCA7CivljZ8+YsWtfFwgOwor5L22PmrDrXxcIDsKK+m+gz5qxa18XCA7CivonK4+ecO5fFwgOwor5qy5PnlpfFwgOwor5pmUPnllfFwgOwor57ybPnLDuXxcIDsKK+iUuj5mw7l8XCA7Civor4I+Z8WtfFwgOwor576/PnnDrHxcIDsKK+ibjj5sw6x8XCA7Civmppg+asWtfFwgOwor57qwPmLErXxcIDsKK+mAiz5idXxcIDsKK+WHqz5mw7p8XCA7Civpvos+ccWtfFwgOwor6JylPnhpfFwgOwor55e8PmfDuXxcIDsKK+msuz55w7l8XCA7Civmv64+cMO6fFwgOwor5rqnPmzDrHxcIDsKK+mYkj5xw7l8XCA7Civpu6k+ZMO6fFwgOwor6YaQPmjDunxcIDsKK+iguT5kw7l8XCA7Civmgow+dMOsfFwgOwor6aW0PnnDrXxcIDsKK+aSuD5sxa18XCA7CivonLQ+ecOsfFwgOwor6ZKcPmrDuXxcIDsKK+a+pz5sxK18XCA7CivmgpI+ecOsfFwgOwor54yVPm3DrXxcIDsKK+iRuj5xw6x8XCA7Civns40+Y8OtfFwgOwor55a0PmtlfFwgOwor57uUPmvDuXxcIDsKK+aAgz53xa18XCA7CivlkZI+ZsWtfFwgOwor6Ki+PnppfFwgOwor6aG4PmTDunxcIDsKK+Wstz5tYXxcIDsKK+a8rz50w6B8XCA7Civmupg+a8OofFwgOwor6JO/PnPDuXxcIDsKK+iLuz5mw7p8XCA7CivlnK4+cMStfFwgOwor6K+SPnnDrXxcIDsKK+S8oj55w6F8XCA7Civpsog+bMO6fFwgOwor56u9PnnDunxcIDsKK+ibsz5zaXxcIDsKK+abtz5ow6l8XCA7CivlsJU+Z8SDfFwgOwor5oCbPmTDoXxcIDsKK+aAmT5ow7l8XCA7Civmi4o+ZsWtfFwgOwor6ZmCPnDDrXxcIDsKK+eYjD5sw6B8XCA7CivpuYw+YW58XCA7Civpkpo+YsO5fFwgOwor55G3PsOgaXxcIDsKK+W6vj55xa18XCA7CivllrE+bMOtfFwgOwor6JOWPmLDrHxcIDsKK+iApj7Fj3V8XCA7CivpuLY+c2l8XCA7CivpkrQ+Z3V8XCA7CivlpqM+YsStfFwgOwor5bSuPmfDuXxcIDsKK+WymT7DoG98XCA7Civphpo+bcOtfFwgOwor56+mPmLDrHxcIDsKK+ierz7DoW98XCA7CivonIk+ZsO6fFwgOwor6JyKPmzDrXxcIDsKK+eXlj5waXxcIDsKK+iGiD5nw6l8XCA7Civovb4+ecOgfFwgOwor5q6BPm3DsnxcIDsKK+eNkj7DoW98XCA7CivmnqU+bMOsfFwgOwor6KeaPmd1fFwgOwor57amPnHDrXxcIDsKK+m5rD55w7l8XCA7CivnqJ4+a2V8XCA7Civnnr0+Z8WtfFwgOwor6LWAPnppfFwgOwor6LS9PmfFrXxcIDsKK+WmpD55w7p8XCA7Civlgog+bMOsfFwgOwor5q+WPmLDrHxcIDsKK+m6gj5qxK18XCA7CivphrQ+bMStfFwgOwor6ZSxPnppfFwgOwor6L6CPmzDuXxcIDsKK+mpvT5uw7p8XCA7Civlqqo+xINvfFwgOwor6L+TPnnDoHxcIDsKK+eBnj5iw6B8XCA7CivomLw+bcOtfFwgOwor5Lu1PnfFrXxcIDsKK+eToD5ow7l8XCA7CivmrKQ+ecO6fFwgOwor5bGjPnjErXxcIDsKK+a4jD5sw7l8XCA7Civlspg+cMOtfFwgOwor6JaPPnnDrHxcIDsKK+iLnD5tw7l8XCA7Civoiqg+aml8XCA7CivljrY+c2l8XCA7Civnj5A+ZsOgfFwgOwor6bunPmzDrXxcIDsKK+i5vD5ww7p8XCA7Civot7g+YsOsfFwgOwor56y4PnDFj3xcIDsKK+esjz5ow7l8XCA7Civom4Q+Z3V8XCA7Civomo0+YsStfFwgOwor6KmIPmzDrHxcIDsKK+eioT5kw7p8XCA7CivnpaI+bcOtfFwgOwor54WzPmjDunxcIDsKK+m9kT5qaXxcIDsKK+avgj5nxa18XCA7Civnib4+d8O6fFwgOwor57yBPmppfFwgOwor5a2zPnppfFwgOwor6ZiLPnjDrHxcIDsKK+iWnD5iw6x8XCA7Civoi6M+asO5fFwgOwor6K61PmrDuXxcIDsKK+S5qT5qaXxcIDsKK+mSqD53w7l8XCA7Civotro+ZnV8XCA7CivnmJc+ecOsfFwgOwor56mRPnPDqHxcIDsKK+mTiz5iw6x8XCA7Civnops+ccOsfFwgOwor5oi9PmjDuXxcIDsKK+ahtD5mw7p8XCA7CivmoYk+YW58XCA7Civlr6Q+d8O5fFwgOwor5rWgPnhpfFwgOwor5aWBPmRpfFwgOwor6I24PmLDrXxcIDsKK+Wcrz55w618XCA7Civnn70+eGl8XCA7Civnv4o+ecOsfFwgOwor5720PnDDrXxcIDsKK+i1jT5qaXxcIDsKK+aumz5qw618XCA7CivmpJA+anV8XCA7CivnjJc+eWl8XCA7Civltrc+ecOtfFwgOwor5ZW1PmLFjXxcIDsKK+iOkj5qxa18XCA7CivpvJk+cMOtfFwgOwor5Z+4PnnDrHxcIDsKK+WDlj54aXxcIDsKK+S9pD53xIN8XCA7CivprLI+Z8OpfFwgOwor5YOzPnPDuXxcIDsKK+mrgD5iw6x8XCA7Civpj4o+w6FvfFwgOwor6bq4PmZ1fFwgOwor6JyePnHDrXxcIDsKK+eYkD55xa18XCA7CivnuqE+eXV8XCA7Civlq5I+w6BpfFwgOwor6JiWPmLDrHxcIDsKK+iToD5sw618XCA7Civli5Y+eMO5fFwgOwor5LybPnnFrXxcIDsKK+m6tD5xw7p8XCA7CivnqrM+ecWtfFwgOwor55mUPnnDrHxcIDsKK+m5mj56aXxcIDsKK+enrT56xK18XCA7CivplZI+ecOsfFwgOwor6bu7PmbDunxcIDsKK+mhvD54w7l8XCA7CivmtI4+asOsfFwgOwor5bKIPnnDoXxcIDsKK+WQoT5ixK18XCA7Civoj7A+Z3V8XCA7CivokIE+ccOtfFwgOwor6I6cPmTDrXxcIDsKK+WcrD53dXxcIDsKK+WIsz5rdXxcIDsKK+aNjD5iYXxcIDsKK+mbjj5qdXxcIDsKK+e+nT5kaXxcIDsKK+espT5zw6x8XCA7CivpuYg+dMOtfFwgOwor54egPnnDuXxcIDsKK+aIoj5qw618XCA7CivmroI+Y8O6fFwgOwor5qSfPmTDunxcIDsKK+mqkD5xw618XCA7Civlqbo+d8O5fFwgOwor5bqRPnfFrXxcIDsKK+WgjT50w7l8XCA7Civliqw+ccO6fFwgOwor6YOrPnDDrXxcIDsKK+mYnT5mw7l8XCA7CivliIg+ecOsfFwgOwor6KerPnPDuXxcIDsKK+etmj5iw6x8XCA7CivnrIQ+aml8XCA7Civnl6Y+d8O5fFwgOwor6ZWJPmfDqXxcIDsKK+mTtT5hbnxcIDsKK+awqT55w6B8XCA7CivpqpI+a8OofFwgOwor5ayWPmLDrHxcIDsKK+Wnkj5zw6x8XCA7Civmv54+cMOsfFwgOwor5rGUPnHDrHxcIDsKK+W+gj5jw7p8XCA7Civll4k+c8O5fFwgOwor5o+gPnnDoHxcIDsKK+iTsD54xK18XCA7Civokbg+eMStfFwgOwor6I+fPnTDuXxcIDsKK+WerT53w7l8XCA7CivlnqE+ZsOhfFwgOwor6LChPnPDuXxcIDsKK+ianD55w6F8XCA7CivotpE+Y2l8XCA7Civns7g+bcOsfFwgOwor55aLPnDErXxcIDsKK+eWoD5sw6x8XCA7CivpuZU+aMO6fFwgOwor6bisPmzDunxcIDsKK+mVsT55w6x8XCA7CivnoZY+w6FpfFwgOwor5rCqPmvDqHxcIDsKK+agjD5sw7p8XCA7CivnkIo+ecOpfFwgOwor57qfPnNpfFwgOwor5a2lPm7DunxcIDsKK+i/rj56w6l8XCA7Civmu7k+aHV8XCA7Civmur0+csO5fFwgOwor5oC/PnnDrHxcIDsKK+iOqT5mw7p8XCA7CivojZw+YsOsfFwgOwor6Iu0Pmp1fFwgOwor5Z6GPmzDunxcIDsKK+WKkz55w6x8XCA7CivplJE+dGl8XCA7Civpq5E+ZMO6fFwgOwor6KecPnppfFwgOwor6Le9PmrDrHxcIDsKK+mGrz54aXxcIDsKK+mFpD5ndXxcIDsKK+eynT5sw6x8XCA7CivmlYk+bcStfFwgOwor57CPPmzDuXxcIDsKK+etoj5ww6F8XCA7Civomqg+ZsO6fFwgOwor6JmuPmppfFwgOwor56eVPmLErXxcIDsKK+mVnT5kw618XCA7Civpkq8+YsSDfFwgOwor55uNPmjDqXxcIDsKK+eisj5kw6x8XCA7Civng4A+aHV8XCA7CivmrLc+eGl8XCA7Civoh4w+Z8WtfFwgOwor5pyQPnHDunxcIDsKK+aqlz5iw7J8XCA7Civmpok+asWtfFwgOwor5qCOPmzDrHxcIDsKK+eSqT5xw7p8XCA7CivnkJo+anV8XCA7Civnu4I+ZsO6fFwgOwor5aurPm3Ds3xcIDsKK+a1rz53w7p8XCA7Civppas+ecO5fFwgOwor54yBPmzDrHxcIDsKK+WXjT5tw6F8XCA7CivolbI+ccOtfFwgOwor6JSMPnPDuXxcIDsKK+iNkT50w618XCA7CivloIA+a3V8XCA7Civor7Y+YWl8XCA7CivpsrU+bsOtfFwgOwor6LKUPnDDrXxcIDsKK+i3lz5mdXxcIDsKK+e2rj5xxK18XCA7Civnv64+aMOpfFwgOwor56yrPnrErXxcIDsKK+iehT54aXxcIDsKK+iBsT7DoW98XCA7Civnqqw+ecO6fFwgOwor55asPmzDrHxcIDsKK+mTkj7DqHJ8XCA7CivnvZg+ZsO6fFwgOwor56OyPnHDunxcIDsKK+insz5ow7p8XCA7CivmsIY+cMWtfFwgOwor5rCHPmzFrXxcIDsKK+eKiz5qw7l8XCA7Civop4w+ZMOtfFwgOwor5piDPnrDqHxcIDsKK+anoD5xaXxcIDsKK+adjD53w7l8XCA7CivnvKE+bMOtfFwgOwor57uoPnTDrXxcIDsKK+a6uz50YXxcIDsKK+a2kT5zw7l8XCA7Civms7o+YsOzfFwgOwor5rGcPnPDrHxcIDsKK+eKuD5tw6B8XCA7Civltas+eml8XCA7Civll4w+ecOsfFwgOwor5pOXPnDErXxcIDsKK+iUnz5jw7l8XCA7Civoi6E+ecStfFwgOwor6IqwPmrDrHxcIDsKK+mDmz5mw7p8XCA7Civkv6M+ecWtfFwgOwor5LyyPm7ErXxcIDsKK+S7sz5wxK18XCA7CivpvK8+d8O6fFwgOwor6a2DPmLDoXxcIDsKK+mrgj5nw6l8XCA7CivpsrQ+Z8O5fFwgOwor6bKFPmJvfFwgOwor6ZupPnnDunxcIDsKK+iyij5tw7J8XCA7CivouKM+YsOzfFwgOwor6Ya1PmrDuXxcIDsKK+eyoj56aXxcIDsKK+ilnj5iw6x8XCA7CivoiIQ+eMOsfFwgOwor6IiBPnnDunxcIDsKK+esqj5kw6F8XCA7Civom7Q+ccOtfFwgOwor6ICcPnPDrHxcIDsKK+ijvD50w6x8XCA7Civnqbg+eMOsfFwgOwor55qkPnDDs3xcIDsKK+mVhj5tw7J8XCA7CivplJQ+anV8XCA7Civpk7c+csWtfFwgOwor6ZONPnBpfFwgOwor6ZOMPm7ErXxcIDsKK+mSvD5tw7l8XCA7Civpkos+cMOyfFwgOwor55WAPmLDrHxcIDsKK+ecjT5vdXxcIDsKK+m7vD5mxa18XCA7CivnoJE+ecOgfFwgOwor5oWdPnTDqHxcIDsKK+iEkj5txK18XCA7Civnib8+Z8O5fFwgOwor55STPnDDrHxcIDsKK+anrT5jw7l8XCA7CivlsaY+asO5fFwgOwor6YCWPnTDrHxcIDsKK+i/lT53w7l8XCA7Civmu5c+YsStfFwgOwor5rSzPnLDuXxcIDsKK+a0qz54w7l8XCA7CivlurM+YsOsfFwgOwor5bG6PnHErXxcIDsKK+W5nj5mw7p8XCA7CivluLs+esOpfFwgOwor5ZOcPmrDrHxcIDsKK+aPnj7Eg258XCA7CivolZY+ccO6fFwgOwor6JOQPnLDuXxcIDsKK+iPuT5qdXxcIDsKK+Wfrz7Eg258XCA7Civln5o+YsO5fFwgOwor6ZqwPnjDrXxcIDsKK+mYoj53w7l8XCA7Civkvb4+ecOsfFwgOwor5ZiPPmfFrXxcIDsKK+afkj5xaXxcIDsKK+W5gj5tw6x8XCA7CivpqrY+ZMStfFwgOwor6bOOPnTDoHxcIDsKK+mzhj5mw7l8XCA7Civpsrs+eml8XCA7CivpsqE+bMOtfFwgOwor6YuIPnfDuXxcIDsKK+iIvj54aXxcIDsKK+iIrT5ixK18XCA7CivoiKM+ecStfFwgOwor566mPnrDqXxcIDsKK+iZvD5nw6h8XCA7CivomY0+aHV8XCA7CivogLE+bcOyfFwgOwor55iYPmzHmHxcIDsKK+m4uD7DqXJ8XCA7CivplY4+bsOhfFwgOwor6ZKyPmfDunxcIDsKK+mSrT5ww6F8XCA7CivnpZM+ZsO6fFwgOwor6KeLPnjDrXxcIDsKK+aZoT5idXxcIDsKK+i9uT5sw6x8XCA7Civmrqo+ecOsfFwgOwor57yCPmvDqHxcIDsKK+WroD5sw618XCA7CivoibQ+ZsO6fFwgOwor6YCvPmzDuXxcIDsKK+a+jD5zaXxcIDsKK+a7jz5mxa18XCA7Civlu5I+w6FvfFwgOwor5bqAPnDErXxcIDsKK+eMij5uw618XCA7Civni7Q+YsOsfFwgOwor54q0PsOgbnxcIDsKK+WzhD55w6x8XCA7CivlsrU+aMO5fFwgOwor5ZinPm3DrHxcIDsKK+WRiz5mdXxcIDsKK+iYpz5xw7p8XCA7Civoj5Q+ZsO6fFwgOwor6Iq0PnfDuXxcIDsKK+WhpT5nw6l8XCA7Civln6Q+cMOtfFwgOwor5Z2tPm7DrXxcIDsKK+WHtT5xdXxcIDsKK+WTvz5nxJV8XCA7Civor44+ccO5fFwgOwor5YWVPnPDrHxcIDsKK+S7oT55w6x8XCA7CivotZw+esOpfFwgOwor6b6lPnnDuXxcIDsKK+m+oj5ow6l8XCA7Civpvpg+dMOgfFwgOwor6b6OPmvDqHxcIDsKK+m+gT5ow6l8XCA7Civpvb4+ecOgfFwgOwor6b24PnnDrHxcIDsKK+m9tz53w7J8XCA7CivpvbU+w7N1fFwgOwor6b2yPnHFrXxcIDsKK+m9rz5uw618XCA7Civpva4+ecStfFwgOwor6b2sPnnFrXxcIDsKK+m9nz5qxa18XCA7CivpvZw+eml8XCA7CivpvZY+ecOhfFwgOwor6b2VPmjDqXxcIDsKK+m9jz5qaXxcIDsKK+m9jj5qaXxcIDsKK+m9jT5xw618XCA7CivpvYw+asOsfFwgOwor6b2KPnHDrXxcIDsKK+m9hD5qaXxcIDsKK+m9gz5nw6l8XCA7CivpvYA+d8O5fFwgOwor6by/Pnd1fFwgOwor6by3PnhpfFwgOwor6by2PnNpfFwgOwor6by1PnTDunxcIDsKK+m8sz5qw7p8XCA7CivpvKk+ccO6fFwgOwor6bylPmLDoXxcIDsKK+m8nD5xw6x8XCA7CivpvJQ+Z8WtfFwgOwor6bySPnppfFwgOwor6byPPm3DrHxcIDsKK+m8ij5iw6x8XCA7CivpvIc+w6FvfFwgOwor6byBPnHDuXxcIDsKK+m8gD5jw7l8XCA7Civpu7g+bMO6fFwgOwor6bu3PmTDunxcIDsKK+m7sz55aXxcIDsKK+m7rD7DoG58XCA7Civpu6Y+ecO5fFwgOwor6bufPnlpfFwgOwor6buZPm3DsnxcIDsKK+m7lj54w6x8XCA7Civpu5M+ecOsfFwgOwor6bq8Pm3Ek3xcIDsKK+m6uT5xw7p8XCA7CivpurE+ZnV8XCA7Civpuq8+ccO6fFwgOwor6bquPnHDuXxcIDsKK+m6rD5mdXxcIDsKK+m6qT5mdXxcIDsKK+m6pz5nZXxcIDsKK+m6pD5jdXxcIDsKK+m6oT5qaXxcIDsKK+m6nD5sw6x8XCA7Civpups+bcOtfFwgOwor6bqYPmjDqXxcIDsKK+m6lz5sw618XCA7CivpupE+bsOtfFwgOwor6bqMPnfDunxcIDsKK+m6ij5tw618XCA7CivpuoQ+Y3V8XCA7CivpuoE+Y3V8XCA7CivpubU+bMWtfFwgOwor6bmlPnlpfFwgOwor6bmjPmjDuXxcIDsKK+m5oj5uw6x8XCA7CivpuaE+asOtfFwgOwor6bmdPm7DrHxcIDsKK+m5mT5jw618XCA7CivpuZY+aMOpfFwgOwor6bmUPnPDuXxcIDsKK+m5hj55w7l8XCA7CivpuYE+YsOzfFwgOwor6bmAPnfDunxcIDsKK+m4sj5xw7p8XCA7CivpuJ0+bMOtfFwgOwor6biWPmjDqHxcIDsKK+m4lT5sw7p8XCA7CivpuJI+ecO6fFwgOwor6biQPmTDrXxcIDsKK+m4jT5tw618XCA7CivpuIs+aMO5fFwgOwor6biKPnDDrHxcIDsKK+m4iD55w6h8XCA7CivpuIY+ecO6fFwgOwor6biEPmrDrXxcIDsKK+m4gz5iw6x8XCA7CivpuII+cWl8XCA7Civpt78+cMOsfFwgOwor6be+PnnDrHxcIDsKK+m3uj5sw7l8XCA7Civpt7g+ecO5fFwgOwor6be1PnTDunxcIDsKK+m3qz5zw7l8XCA7Civpt6k+YsOsfFwgOwor6benPnnDrHxcIDsKK+m3pT5zaXxcIDsKK+m3oT53w7p8XCA7Civpt6A+ecO6fFwgOwor6bedPmLDrHxcIDsKK+m3lz5vdXxcIDsKK+m3lj55aXxcIDsKK+m3lD7DoW98XCA7Civpt5E+bMOsfFwgOwor6beMPm3Eg3xcIDsKK+m3iz50w7p8XCA7Civpt4o+bsOsfFwgOwor6beJPnRpfFwgOwor6beIPnRpfFwgOwor6beFPmzDrHxcIDsKK+m3hD5qaXxcIDsKK+m3gT5uw6x8XCA7Civpt4A+Y8OtfFwgOwor6ba/PnppfFwgOwor6ba+PmPDrXxcIDsKK+m2uz5ow7p8XCA7Civptro+asOtfFwgOwor6ba0PmjDqHxcIDsKK+m2rj5nw7l8XCA7Civptqo+asO6fFwgOwor6bapPnfDuXxcIDsKK+m2pj5ow7p8XCA7CivptqE+aMOpfFwgOwor6bafPnTDunxcIDsKK+m2nT5mw7p8XCA7Civptpk+dMOtfFwgOwor6baYPmjDunxcIDsKK+m2lz50w618XCA7CivptpU+YW58XCA7Civpto8+aml8XCA7Civptow+cXV8XCA7Civptos+anV8XCA7Civptog+cWl8XCA7CivptoU+eml8XCA7CivptoM+ecOsfFwgOwor6baCPnnDrHxcIDsKK+m2gD5xw618XCA7Civptbo+ecOofFwgOwor6bW5PmzDrXxcIDsKK+m1uD5xw618XCA7CivptbY+eWF8XCA7CivptbU+dMO5fFwgOwor6bW0PmrDunxcIDsKK+m1sT5sw7l8XCA7Civptao+YW58XCA7Civptak+ZsO6fFwgOwor6bWhPnfFrXxcIDsKK+m1oD5nxa18XCA7CivptZw+dMOtfFwgOwor6bWaPnTDunxcIDsKK+m1mT5qw7p8XCA7CivptZc+dGl8XCA7CivptZY+YsOsfFwgOwor6bWVPmJpfFwgOwor6bWTPmLDs3xcIDsKK+m1kj55w7l8XCA7CivptY8+YnV8XCA7CivptY0+YsWtfFwgOwor6bWMPnnDunxcIDsKK+m1iz5qw6x8XCA7CivptL8+Z2V8XCA7CivptL0+csO6fFwgOwor6bS6PnnDrXxcIDsKK+m0tj5qw618XCA7CivptLE+w6BpfFwgOwor6bSvPsOpcnxcIDsKK+m0rj53dXxcIDsKK+m0qD55YXxcIDsKK+m0pT55w7l8XCA7CivptKM+Z3V8XCA7CivptKE+anV8XCA7CivptJ0+ccO6fFwgOwor6bScPnppfFwgOwor6bSaPmdlfFwgOwor6bSXPmzDrHxcIDsKK+m0lD5mw7p8XCA7CivptJE+bsO6fFwgOwor6bSPPnTDqHxcIDsKK+m0jj5vdXxcIDsKK+m0iT55YXxcIDsKK+m0hD5waXxcIDsKK+mzvz55w7l8XCA7Civps7o+ZnV8XCA7Civps7g+aMO5fFwgOwor6bOsPmbDunxcIDsKK+mzqj5ixa18XCA7Civps6g+bMOsfFwgOwor6bOnPmbDunxcIDsKK+mzpj55xK18XCA7Civps6I+bMStfFwgOwor6bOgPmjDuXxcIDsKK+mzmz54w618XCA7Civps5M+bMOofFwgOwor6bK+PmLDrHxcIDsKK+myuT5iaXxcIDsKK+myrz5xw618XCA7Civpspo+asOsfFwgOwor6bKVPsOpcnxcIDsKK+myjz5waXxcIDsKK+myjD5iw7N8XCA7Civpsos+YsOgfFwgOwor6bKEPmLDoHxcIDsKK+mygz5iYXxcIDsKK+mxvj5qxK18XCA7Civpsbs+YsOgfFwgOwor6bG6PmzDrXxcIDsKK+mxuD5sw7p8XCA7CivpsbM+bMOsfFwgOwor6bGxPmzErXxcIDsKK+mxrj54w7l8XCA7Civpsa0+asOsfFwgOwor6bGsPnLDunxcIDsKK+mxpz5sxK18XCA7CivpsZo+eMStfFwgOwor6bGQPnPDuXxcIDsKK+mxjT5ib3xcIDsKK+mxiz5xdXxcIDsKK+mxgD5qw6x8XCA7CivpsL8+aml8XCA7CivpsLw+eMOtfFwgOwor6bC4PnF1fFwgOwor6bC2PmrDrHxcIDsKK+mwsz5sw6h8XCA7CivpsLI+w6FvfFwgOwor6bCtPnHDrXxcIDsKK+mwqj5nw6l8XCA7CivpsKg+dMOgfFwgOwor6bCiPm3Eg3xcIDsKK+mwnj53dXxcIDsKK+mwlz5ow7p8XCA7CivpsJI+ZsO5fFwgOwor6bCPPmLDrHxcIDsKK+mwhT55w7p8XCA7CivpsII+esOpfFwgOwor6a+9PmrDrHxcIDsKK+mvuz5sw6B8XCA7Civpr6w+bMOtfFwgOwor6a+lPmzDuXxcIDsKK+mvoz55w6x8XCA7Civpr6I+bsOtfFwgOwor6a+dPmfDuXxcIDsKK+mvmj5qw6x8XCA7Civpr5U+ccOtfFwgOwor6a+UPnppfFwgOwor6a+TPm7DrXxcIDsKK+mviT5sxK18XCA7Civpr4Y+ZsWtfFwgOwor6a+DPnfDunxcIDsKK+mvgj5zdXxcIDsKK+muvT55w7p8XCA7Civprro+esSDfFwgOwor6a63PnTDrXxcIDsKK+murz5nw6l8XCA7Civprqw+YsO5fFwgOwor6a6oPnHDrXxcIDsKK+mupz50w618XCA7Civprp8+w6BufFwgOwor6a6ePsOpcnxcIDsKK+mumT50w6B8XCA7CivprpU+Z3V8XCA7CivprpQ+asO5fFwgOwor6a6SPmbDuXxcIDsKK+mujT5waXxcIDsKK+muiz5ww618XCA7Civproo+YsOzfFwgOwor6a6IPmp1fFwgOwor6a6GPmrDrHxcIDsKK+muhT5iw6x8XCA7CivproQ+ZsO6fFwgOwor6a6CPmLDoHxcIDsKK+mugT5ib3xcIDsKK+mtvz5iw6B8XCA7Civprb4+cMOtfFwgOwor6a28PnF1fFwgOwor6a26PmjDqXxcIDsKK+mttj5uw6B8XCA7CivprbM+esOhfFwgOwor6a2yPmzDunxcIDsKK+mtsT5ow7p8XCA7CivprbA+cGl8XCA7Civpra8+bMWtfFwgOwor6a2uPmLDrXxcIDsKK+mtqT5tw7J8XCA7CivpraM+eMO5fFwgOwor6a2iPmrErXxcIDsKK+mtnT5qw6x8XCA7CivprZo+ecO6fFwgOwor6a2WPnh1fFwgOwor6a2VPmrErXxcIDsKK+mtkz5iw6x8XCA7CivprYw+cWl8XCA7CivprYo+ecO5fFwgOwor6a2GPnjDuXxcIDsKK+msvz5xw618XCA7CivprL4+asOsfFwgOwor6ay0PmbFrXxcIDsKK+mssT55w7l8XCA7CivprLA+ecO5fFwgOwor6aypPmjDqHxcIDsKK+msmj54dXxcIDsKK+mslT5tw7J8XCA7CivprJA+ccOtfFwgOwor6ayOPmzDoHxcIDsKK+msjT5ow7p8XCA7CivprIQ+dMOsfFwgOwor6ayBPmzDrHxcIDsKK+msgD5kw618XCA7Civpq7c+cXV8XCA7Civpq7U+w6lyfFwgOwor6au0PmbDunxcIDsKK+mrsj5waXxcIDsKK+mrsD50w6x8XCA7Civpq64+ZsOgfFwgOwor6auqPmbDoHxcIDsKK+mroj50w6x8XCA7Civpq6A+ZMOtfFwgOwor6auXPmzDunxcIDsKK+mrlD50xK18XCA7Civpq40+bcOzfFwgOwor6auKPmNpfFwgOwor6auJPmJvfFwgOwor6auGPmLDs3xcIDsKK+mrgT5rZXxcIDsKK+mqtT50aXxcIDsKK+mqsz5iw6x8XCA7Civpqq4+ecOsfFwgOwor6aqsPnnDunxcIDsKK+mqlT5zw7l8XCA7CivpqbI+csOsfFwgOwor6amqPmzDrXxcIDsKK+mpqD54aXxcIDsKK+mppz5qw7p8XCA7CivpqaU+asOsfFwgOwor6amcPnnDqHxcIDsKK+mpmz55w6x8XCA7CivpqYw+c8O5fFwgOwor6amLPmJvfFwgOwor6amJPnh1fFwgOwor6amIPnnDuXxcIDsKK+mphj5iw6x8XCA7CivpqYU+cXV8XCA7CivpqYE+w6BvfFwgOwor6amAPm3DsnxcIDsKK+movT54w618XCA7CivpqLw+bMO5fFwgOwor6ai5PmzDrXxcIDsKK+mosz5kw7p8XCA7CivpqLE+eGl8XCA7CivpqKY+c2l8XCA7CivpqKA+dMOtfFwgOwor6aiWPnfDuXxcIDsKK+mojz5xw618XCA7CivpqI4+ccOtfFwgOwor6aiNPmvDqHxcIDsKK+moiD5qw6x8XCA7CivpqIQ+bMO5fFwgOwor6aiDPsOhaXxcIDsKK+mnvD50w7p8XCA7Civpp7Y+asO6fFwgOwor6aeuPmLDs3xcIDsKK+mnrD7ElXJ8XCA7Civpp6E+bcOgfFwgOwor6aefPnPDrHxcIDsKK+mnnD5iw6x8XCA7Civpp5k+ZsO5fFwgOwor6aeTPnBpfFwgOwor6aeSPmp1fFwgOwor6aeRPm7DunxcIDsKK+mnjz5qw7l8XCA7Civpp4o+YsWPfFwgOwor6aeIPnF1fFwgOwor6aeGPnF1fFwgOwor6aeFPnnDrHxcIDsKK+mnhD5wxY98XCA7Civpp4E+YsOzfFwgOwor6aa/PmzHmHxcIDsKK+mmuj5zw6B8XCA7Civpprk+csOsfFwgOwor6aatPnnDuXxcIDsKK+mmrD5txIN8XCA7CivppqQ+xINpfFwgOwor6aafPnTDunxcIDsKK+mmnj5iw7N8XCA7Civppp0+YsOsfFwgOwor6aacPm7ErXxcIDsKK+mmmz5iw6F8XCA7Civppo4+YsOzfFwgOwor6aaMPnnDqHxcIDsKK+mmiT5nxa18XCA7Civppbs+eWl8XCA7Civppbk+Ym98XCA7Civppak+eMOsfFwgOwor6aWdPm3Ds3xcIDsKK+mlkT5qaXxcIDsKK+mlkD55w6x8XCA7CivppYc+ecO5fFwgOwor6aWGPmLDrHxcIDsKK+mlgz5tw7N8XCA7CivppYE+ecOofFwgOwor6aS8PnjDrHxcIDsKK+mkuj5iw7N8XCA7CivppLY+Z8WtfFwgOwor6aSyPmjDqXxcIDsKK+mkrD5ow7p8XCA7CivppKM+ecOofFwgOwor6aSiPmLDuXxcIDsKK+mkmD55w7p8XCA7CivppJc+c8O5fFwgOwor6aSUPmJ1fFwgOwor6aSRPmJvfFwgOwor6aSPPnlpfFwgOwor6aSOPmzEk3xcIDsKK+mkjD7ElXJ8XCA7CivppIg+Y8OtfFwgOwor6aSEPmjDqXxcIDsKK+mjvD5zw6x8XCA7Civpo7o+Y8OtfFwgOwor6aO2PmLDrHxcIDsKK+mjtD55w618XCA7Civpo7M+c8OsfFwgOwor6aOrPnnDuXxcIDsKK+mjpD5zw6x8XCA7Civpo6I+aml8XCA7Civpo5Q+c2l8XCA7Civpo48+c8OsfFwgOwor6aOLPnPDqHxcIDsKK+mjgT54w618XCA7Civporg+c2l8XCA7Civporc+Yml8XCA7CivporY+asO5fFwgOwor6aKwPmLDoXxcIDsKK+mirz5zw6B8XCA7Civpoqs+ZsO6fFwgOwor6aGxPmzDunxcIDsKK+mhpz5nw7l8XCA7CivpoaM+Y8O5fFwgOwor6aGdPmt1fFwgOwor6aGXPnnErXxcIDsKK+mhjD50w618XCA7CivpoYo+ZMOsfFwgOwor6aGGPmtlfFwgOwor6aC/PnppfFwgOwor6aC+PnppfFwgOwor6aC8PmvElXxcIDsKK+mgsT5sw6h8XCA7CivpoKs+ZsWtfFwgOwor6aCmPmtlfFwgOwor6aCkPnnDrXxcIDsKK+mgnD5ow6l8XCA7CivpoJk+Y8OofFwgOwor6aCXPnBvfFwgOwor6aCUPmTDrXxcIDsKK+mgkD55w7l8XCA7CivpoI4+ccOtfFwgOwor6aCLPmfDuXxcIDsKK+mgij54w7l8XCA7CivpoIk+ecOtfFwgOwor6aCIPnh1fFwgOwor6aCBPnnDqHxcIDsKK+mggD5ow7l8XCA7Civpn7c+bMOofFwgOwor6Z+0PmFufFwgOwor6Z+yPmppfFwgOwor6Z+oPmbDunxcIDsKK+mfpT5kw7p8XCA7Civpn6Q+d8OgfFwgOwor6Z+jPmTDunxcIDsKK+mfoD5iw6x8XCA7Civpn5o+Z8OpfFwgOwor6Z+QPmfDqXxcIDsKK+mfjT5mw7p8XCA7Civpn4g+d8OgfFwgOwor6Z+HPmTDunxcIDsKK+mfhD5ow7l8XCA7Civpn4M+ZMOhfFwgOwor6Z6/PmppfFwgOwor6Z64PmLDrHxcIDsKK+metz5nw6l8XCA7CivpnrM+dMOgfFwgOwor6Z6uPmRpfFwgOwor6Z6rPmp1fFwgOwor6Z6qPm3DuXxcIDsKK+meqD5ow6l8XCA7CivpnqU+ecOsfFwgOwor6Z6fPmp1fFwgOwor6Z6cPnTDoHxcIDsKK+mejD5hbnxcIDsKK+meij5qw618XCA7Civpnoc+Z8OpfFwgOwor6Z2+PnnDrHxcIDsKK+mduz56xa18XCA7Civpnbo+bcOyfFwgOwor6Z25Pm7DoHxcIDsKK+mduD5zxIN8XCA7CivpnbA+d8O5fFwgOwor6Z2vPmTDuXxcIDsKK+mdrj5kw618XCA7Civpnag+ecOofFwgOwor6Z2PPmjDqHxcIDsKK+mdjj5ow6h8XCA7CivpnYs+bMOsfFwgOwor6Z2JPsOgaXxcIDsKK+mdhD7Eg2l8XCA7CivpnYI+bMOsfFwgOwor6Zy9PmrDrHxcIDsKK+mcvD54xK18XCA7CivpnLc+cMOyfFwgOwor6Zy1PmrDrXxcIDsKK+mcsT55w7l8XCA7CivpnKw+ecOsfFwgOwor6ZyrPnjDrXxcIDsKK+mcpz53w7l8XCA7CivpnKI+bcOyfFwgOwor6ZyhPm3DsnxcIDsKK+mcmj53w7l8XCA7CivpnIs+cWl8XCA7CivpnII+bcO5fFwgOwor6Zu4PsOhbnxcIDsKK+mbtD5sw6x8XCA7Civpm64+bcO5fFwgOwor6ZutPnPDqHxcIDsKK+mbqz5uxIN8XCA7Civpm6c+asOtfFwgOwor6ZumPmrDrXxcIDsKK+mbpT56w6F8XCA7Civpm6I+bMOtfFwgOwor6ZufPnhpfFwgOwor6ZuePmppfFwgOwor6ZucPnrDoXxcIDsKK+mbkz55w7p8XCA7Civpm5E+esOhfFwgOwor6ZuQPmh1fFwgOwor6ZuDPnnEg3xcIDsKK+mauj5ow6h8XCA7Civpmrg+bMOsfFwgOwor6Zq1PnhpfFwgOwor6ZquPmppfFwgOwor6ZqtPsOpcnxcIDsKK+marD5uxK18XCA7Civpmqk+ecO5fFwgOwor6ZqmPnDErXxcIDsKK+manz54w6x8XCA7Civpmp4+w6FvfFwgOwor6ZqbPmrDrHxcIDsKK+makj5qaXxcIDsKK+majD7Eg258XCA7CivpmoQ+ZGl8XCA7CivpmoM+ecO6fFwgOwor6ZqAPmFufFwgOwor6Zm5PmTFrXxcIDsKK+mZtD5ww618XCA7CivpmbE+anV8XCA7Civpma4+YW58XCA7Civpma0+cWl8XCA7CivpmaA+cHV8XCA7CivpmZo+ZsO5fFwgOwor6ZmTPnl1fFwgOwor6ZmRPsOpcnxcIDsKK+mYuj5kxK18XCA7CivpmLk+cXV8XCA7CivpmLA+cMOtfFwgOwor6ZimPsOgaXxcIDsKK+mYpT5hbnxcIDsKK+mYoz55xK18XCA7CivpmJ4+bMOofFwgOwor6ZiYPnTDoHxcIDsKK+mYhz5kdXxcIDsKK+mXpT50w6B8XCA7Civpl6I+YsOsfFwgOwor6ZefPnPDoHxcIDsKK+mXmT5xxK18XCA7Civpl5Q+aMOpfFwgOwor6ZeSPnTDoHxcIDsKK+mXjT5kdXxcIDsKK+mXhz7DoG58XCA7Civpl4M+ccO5fFwgOwor6Za+PnnDuXxcIDsKK+mWtD5xw7l8XCA7CivplrA+asO6fFwgOwor6ZalPmbDoXxcIDsKK+mWpD5nw6l8XCA7CivplqM+Z8OpfFwgOwor6ZahPmjDqXxcIDsKK+mWnz5iw6x8XCA7Civplp0+w6BpfFwgOwor6ZaZPmvElXxcIDsKK+mWiT5iw6x8XCA7Civploc+YsOsfFwgOwor6ZaBPm3DoHxcIDsKK+mVvj5tw618XCA7Civplbw+cXV8XCA7Civplbo+xINvfFwgOwor6ZW4PsOgb3xcIDsKK+mVtD5sw6B8XCA7CivplaU+bMWtfFwgOwor6ZWIPmLDs3xcIDsKK+mVgz56aXxcIDsKK+mUvz5haXxcIDsKK+mUnT5kw6l8XCA7CivplJw+ccOtfFwgOwor6ZO9PnTDqHxcIDsKK+mTuz53w7p8XCA7Civpk68+c8OofFwgOwor6ZOYPnnDqXxcIDsKK+mTlD55w6B8XCA7Civpkrc+cG98XCA7CivpkpY+eMOtfFwgOwor6ZKRPmrDrXxcIDsKK+mShD5nw6F8XCA7Civpkbo+ccO6fFwgOwor6ZG0PnhpfFwgOwor6ZGuPmLDs3xcIDsKK+mRqj5sw7p8XCA7CivpkaU+bMWtfFwgOwor6ZGfPmTDunxcIDsKK+mRnj5sw6B8XCA7CivpkZk+aml8XCA7CivpkZc+bMOtfFwgOwor6ZGQPnh1fFwgOwor6ZGJPnTDoHxcIDsKK+mRhz5qaXxcIDsKK+mRgD7DoGl8XCA7CivpkL8+ecOsfFwgOwor6ZC9PmLDrHxcIDsKK+mQuz5qw7l8XCA7CivpkLc+ecOofFwgOwor6ZC0PmLDrHxcIDsKK+mQrT55w7l8XCA7CivpkKo+bMWtfFwgOwor6ZCgPnDFrXxcIDsKK+mQnz50w6x8XCA7CivpkJo+ecOgfFwgOwor6ZCWPmppfFwgOwor6Y+6PnBvfFwgOwor6Y+3PnDDunxcIDsKK+mPtj5qw618XCA7Civpj7Q+bMO5fFwgOwor6Y+tPnhpfFwgOwor6Y+rPmzDrXxcIDsKK+mPmj5xw6x8XCA7Civpj5U+bMO5fFwgOwor6Y+RPmRpfFwgOwor6Y+OPmLDrHxcIDsKK+mPjD5tw7J8XCA7Civpj4s+ZGl8XCA7Civpj4k+w6BvfFwgOwor6Y+DPnrDunxcIDsKK+mPgj5vdXxcIDsKK+mPgD5sxa18XCA7Civpjr8+bsOhfFwgOwor6Y63Pm3Eg3xcIDsKK+mOtj5nZXxcIDsKK+mOtD54w618XCA7CivpjrA+ecOsfFwgOwor6Y6iPnd1fFwgOwor6Y6hPnppfFwgOwor6Y6ePmJpfFwgOwor6Y6dPnPDoHxcIDsKK+mOmz5iw7N8XCA7Civpjpk+ZGF8XCA7Civpjpg+Z8OpfFwgOwor6Y6QPnrDunxcIDsKK+mOjj54w6x8XCA7Civpjok+dMOgfFwgOwor6Y6EPmFpfFwgOwor6Y6BPnnDqXxcIDsKK+mNvz56aXxcIDsKK+mNuD5ow7p8XCA7Civpjbc+ZMWtfFwgOwor6Y22PnNpfFwgOwor6Y2xPnnDqHxcIDsKK+mNoj5mw7l8XCA7CivpjZc+dMOtfFwgOwor6Y2TPmrDrXxcIDsKK+mNkT5mw7l8XCA7CivpjY4+dMO6fFwgOwor6Y2NPmTDuXxcIDsKK+mNiT5kaXxcIDsKK+mNgD5kw6l8XCA7CivpjLc+Z8OhfFwgOwor6Yy0PmzDuXxcIDsKK+mMsj5sw7l8XCA7CivpjLA+bMecfFwgOwor6YyuPmfDuXxcIDsKK+mMqz54w618XCA7CivpjKU+dMOsfFwgOwor6YykPmppfFwgOwor6YyhPnHDrXxcIDsKK+mMmT56aXxcIDsKK+mMlj5kxa18XCA7CivpjJQ+dMOgfFwgOwor6YyPPnnDoHxcIDsKK+mMjj5rZXxcIDsKK+mMjT5ww618XCA7CivpjIw+w6BufFwgOwor6YyFPmzDrXxcIDsKK+mMhD5sw7l8XCA7CivpjII+ZsO6fFwgOwor6YyBPmvDqHxcIDsKK+mLuD5qdXxcIDsKK+mLtT50dXxcIDsKK+mLsT50w6h8XCA7Civpi7A+bMStfFwgOwor6YuqPnB1fFwgOwor6YumPmp1fFwgOwor6YuZPnfDunxcIDsKK+mLmD53w7p8XCA7Civpi5Y+c2l8XCA7Civpi40+YsOzfFwgOwor6YuKPnnDuXxcIDsKK+mLiT5zw7l8XCA7Civpirs+dGl8XCA7CivpirA+YWl8XCA7Civpiqs+c8OofFwgOwor6YqoPsSDbnxcIDsKK+mKpT55aXxcIDsKK+mKpD5txK18XCA7CivpiqM+csO6fFwgOwor6YqiPnDErXxcIDsKK+mKoT5qw618XCA7CivpipQ+cGl8XCA7Civpioo+eMO5fFwgOwor6YqJPnnDuXxcIDsKK+mKiD5qaXxcIDsKK+mKhj5tw7J8XCA7Civpib8+aGF8XCA7Civpibs+Z8OofFwgOwor6Ym6PsSVcnxcIDsKK+mJsj5rxIN8XCA7CivpibA+c2l8XCA7Civpia8+xJVyfFwgOwor6YmsPm3DuXxcIDsKK+mJqj5kw6x8XCA7Civpiag+bsStfFwgOwor6YmnPm3FrXxcIDsKK+mJoj5ib3xcIDsKK+mJnT5sw6x8XCA7CivpiZw+ZsO6fFwgOwor6YmYPmbDunxcIDsKK+mJlj5hbnxcIDsKK+mJlT5wb3xcIDsKK+mJlD56YXxcIDsKK+mJkT5iw7N8XCA7CivpiZA+cMWPfFwgOwor6YmOPmrFrXxcIDsKK+mJjT5iw6x8XCA7CivpiYw+aMOpfFwgOwor6YmIPnRhfFwgOwor6YmFPmrDuXxcIDsKK+mIvT5iw7l8XCA7CivpiLs+c8OsfFwgOwor6Yi6PnnDuXxcIDsKK+mIuT5ww618XCA7CivpiLg+YsOzfFwgOwor6Yi3PmfFrXxcIDsKK+mItj55w618XCA7CivpiLM+a2V8XCA7CivpiLI+Z3V8XCA7CivpiK8+a2V8XCA7CivpiK4+bsOtfFwgOwor6YitPnppfFwgOwor6YikPnLDrHxcIDsKK+mIoD55w6x8XCA7CivpiJo+cMOtfFwgOwor6YiYPmrErXxcIDsKK+mIkj5qw618XCA7CivpiIk+bsOgfFwgOwor6YiIPmLDuXxcIDsKK+mIhz5mdXxcIDsKK+mIgD5ixIN8XCA7Civph70+cGl8XCA7Civph7g+eMOsfFwgOwor6Ye3PnTFrXxcIDsKK+mHtD55w6x8XCA7Civph7M+eMOsfFwgOwor6YexPmTDrHxcIDsKK+mHsD5yw6x8XCA7Civph6g+esStfFwgOwor6YehPmbFrXxcIDsKK+mHnz5iYXxcIDsKK+mHmz5ow6l8XCA7Civph5k+cG98XCA7Civph5Q+ecStfFwgOwor6YeTPmfDoXxcIDsKK+mHkj5nw6F8XCA7Civph5A+bMOtfFwgOwor6YeDPnjErXxcIDsKK+mGvz5tw618XCA7Civphr4+bcOtfFwgOwor6Ya5PnLDunxcIDsKK+mGtz55w6x8XCA7CivphrM+ecOsfFwgOwor6YaxPnDDsnxcIDsKK+mGrT5iw7p8XCA7Civphqs+eWl8XCA7Civphqg+bMOtfFwgOwor6YanPnnDuXxcIDsKK+mGmD5rw6h8XCA7Civphpc+cMOyfFwgOwor6YaRPnjFrXxcIDsKK+mGjz5kdXxcIDsKK+mGgT5sw7l8XCA7Civphb4+eMStfFwgOwor6YW6PnDDunxcIDsKK+mFtD50w7p8XCA7CivphaY+cMOyfFwgOwor6YWRPnnFrXxcIDsKK+mFjz55w618XCA7CivphYg+bMOsfFwgOwor6YWFPnhpfFwgOwor6YS/PnHDrXxcIDsKK+mEtD55w6h8XCA7CivphKo+YsOsfFwgOwor6YSoPmLDrHxcIDsKK+mEpj54xa18XCA7CivphKA+aMO5fFwgOwor6YScPmZ1fFwgOwor6YSaPm3DsnxcIDsKK+mElD53dXxcIDsKK+mEkz5qw7p8XCA7CivphJE+eml8XCA7CivphI8+csO5fFwgOwor6YSOPnjDrHxcIDsKK+mEij5yxa18XCA7CivphIU+ecWtfFwgOwor6YSDPnnDunxcIDsKK+mDvD55aXxcIDsKK+mDuT5qw7p8XCA7Civpg7Y+YsO5fFwgOwor6YOzPm7DrXxcIDsKK+mDqj5xaXxcIDsKK+mDqT5jaXxcIDsKK+mDpD54w6x8XCA7Civpg6M+YsOzfFwgOwor6YOaPnfDunxcIDsKK+mDmT5mxa18XCA7Civpg4s+eMOtfFwgOwor6YODPmjDqXxcIDsKK+mDgD5rdXxcIDsKK+mCtz53xIN8XCA7CivpgrI+YsOsfFwgOwor6YKtPmrDuXxcIDsKK+mCnj5mdXxcIDsKK+mCmj5yw7p8XCA7Civpgpg+ecO6fFwgOwor6YKUPnHErXxcIDsKK+mCkj5qw6x8XCA7CivpgpA+bMStfFwgOwor6YKMPmzDrXxcIDsKK+mChz7ElXJ8XCA7Civpgbs+d8O5fFwgOwor6YG6PnnDrXxcIDsKK+mBuT55w7l8XCA7CivpgbA+ZMOsfFwgOwor6YGsPnPDuXxcIDsKK+mBqz5zw7l8XCA7Civpgao+Y8OofFwgOwor6YGePmTDrHxcIDsKK+mBnT50w6B8XCA7CivpgZQ+ZMOhfFwgOwor6YGGPnTDrXxcIDsKK+mAuT5kw6F8XCA7CivpgLc+dMOsfFwgOwor6YCzPnnDuXxcIDsKK+mAnD53w7l8XCA7CivpgJM+ZMOsfFwgOwor6L+7PnnDrXxcIDsKK+i/oT5uw6x8XCA7Civov5Y+ZMOhfFwgOwor6L+PPmrDrHxcIDsKK+i/ij56YXxcIDsKK+i/iT5xw618XCA7Civov4Y+ecStfFwgOwor6L+DPnnDrXxcIDsKK+i+rT5jw618XCA7CivovqQ+Y8OtfFwgOwor6L6iPmzDoHxcIDsKK+i+nT5jw618XCA7Civovbc+aHV8XCA7Civovao+ZMOsfFwgOwor6L2kPmzDunxcIDsKK+i9oz5sw6x8XCA7CivovaI+bMOsfFwgOwor6L2dPnnDunxcIDsKK+i9nD7DqXJ8XCA7CivovZo+asOtfFwgOwor6L2WPnPDqHxcIDsKK+i9lT5nw6l8XCA7CivovZA+cMO6fFwgOwor6L2GPmzDuXxcIDsKK+i9gz5ow6l8XCA7CivovYI+Z3V8XCA7CivovL8+ecO6fFwgOwor6Ly7PmbDunxcIDsKK+i8uj56aXxcIDsKK+i8uT5mw7l8XCA7CivovLU+Z8OpfFwgOwor6LyiPnnErXxcIDsKK+i8nD56aXxcIDsKK+i8lz5uw618XCA7CivovJQ+ZsWtfFwgOwor6LyNPnnDuXxcIDsKK+i8hT5sw7l8XCA7CivovII+asO6fFwgOwor6LyAPsOpcnxcIDsKK+i7vD55w6x8XCA7Civou7s+a2V8XCA7Civou7c+YsOhfFwgOwor6LuyPmt1fFwgOwor6LuxPmd1fFwgOwor6LuvPmbFrXxcIDsKK+i7qj5hb3xcIDsKK+i7pz5kxK18XCA7Civou6U+ccO6fFwgOwor6LukPmh1fFwgOwor6LudPnHDrXxcIDsKK+i7nD5uw6B8XCA7Civou4s+ecOgfFwgOwor6LuJPnnDuXxcIDsKK+i7hj50xK18XCA7Civou4Q+anV8XCA7Civou4A+cXV8XCA7Civourk+asO6fFwgOwor6Lq4PmppfFwgOwor6Lq3PsSDaXxcIDsKK+i6sD50xK18XCA7CivouqM+ccO6fFwgOwor6LqiPnTDoHxcIDsKK+i6kj5sw6x8XCA7Civouow+d8WtfFwgOwor6LqLPmppfFwgOwor6LqEPmLDrHxcIDsKK+i6gz5iw6x8XCA7CivouoI+dMOgfFwgOwor6Lm9PmTEgXxcIDsKK+i5uT50w6B8XCA7CivoubU+Y8O5fFwgOwor6LmzPmJvfFwgOwor6LmrPmrDunxcIDsKK+i5oj5kw618XCA7CivouZ8+aml8XCA7CivouZ0+eMStfFwgOwor6LmcPnPDuXxcIDsKK+i5lz5sw7l8XCA7CivouZU+YsOsfFwgOwor6LmQPmrDrXxcIDsKK+i5jz50w618XCA7CivouY4+ZMOsfFwgOwor6LmDPmTDrHxcIDsKK+i4vz56w7p8XCA7CivouL4+ZsO6fFwgOwor6Li2PmTDrHxcIDsKK+i4sD55w7p8XCA7CivouKc+Y8O5fFwgOwor6LimPmrErXxcIDsKK+i4pT5qaXxcIDsKK+i4pD5jw7l8XCA7CivouJs+bMO5fFwgOwor6LiYPmrDunxcIDsKK+i4lj5qw618XCA7CivouJE+ccOtfFwgOwor6LiEPmLDs3xcIDsKK+i3vz50w7p8XCA7Civot7w+asO6fFwgOwor6Le2PnTDoHxcIDsKK+i3oT5qaXxcIDsKK+i3oD55w618XCA7Civot54+bMOsfFwgOwor6LeZPmrFrXxcIDsKK+i3lD5qdXxcIDsKK+i3kD5jxK18XCA7Civot4c+ecOsfFwgOwor6LeCPnHDrXxcIDsKK+i3gT5ww6F8XCA7Civot4A+ccStfFwgOwor6La3PmtlfFwgOwor6LavPnTDrHxcIDsKK+i2qD5xdXxcIDsKK+i2pz50w618XCA7CivotqY+eml8XCA7CivotqI+bMO5fFwgOwor6LacPmrDunxcIDsKK+i2mD54w618XCA7Civotpc+Y8O5fFwgOwor6LaHPnPDqHxcIDsKK+i2hj5kaXxcIDsKK+i1vD5jaXxcIDsKK+i1sj5sw6x8XCA7CivotaU+eMOsfFwgOwor6LWZPmbDuXxcIDsKK+i1kT5iw6x8XCA7CivotJU+ZMO6fFwgOwor6LSUPmLDrHxcIDsKK+izvj56w6l8XCA7Civos7s+ZsO5fFwgOwor6LO5PsOgaXxcIDsKK+iztz5qaXxcIDsKK+izsD5xw618XCA7Civos60+ZMWtfFwgOwor6LOrPmppfFwgOwor6LOmPmbDuXxcIDsKK+iznD5jw6x8XCA7Civos4k+eMO5fFwgOwor6LOIPmfFrXxcIDsKK+izhz56aXxcIDsKK+izgj5sw7l8XCA7Civos4A+aMOofFwgOwor6LK9PnnDrXxcIDsKK+iyuT5iw6x8XCA7CivosrM+w6hyfFwgOwor6LKyPnppfFwgOwor6LKxPmLDrHxcIDsKK+iyrj7DqHJ8XCA7Civosqw+esOpfFwgOwor6LKkPnnDrXxcIDsKK+iyoz50w6h8XCA7CivosqA+ZsO5fFwgOwor6LKYPm3DsnxcIDsKK+iylz5qw7l8XCA7CivospU+eGl8XCA7CivospA+ecWtfFwgOwor6LKPPmLErXxcIDsKK+iyjj5uw618XCA7Civoso0+bMOtfFwgOwor6LKIPmjDqXxcIDsKK+iyhD5zw6x8XCA7CivosoM+bcOyfFwgOwor6LKAPm7DoHxcIDsKK+ixvj5waXxcIDsKK+ixvT5uw6B8XCA7Civosbs+w6BufFwgOwor6LG3PnnDrHxcIDsKK+ixtD5kw618XCA7CivosbA+YsOzfFwgOwor6LGvPnhpfFwgOwor6LGoPnhpfFwgOwor6LGnPmZ1fFwgOwor6LGmPnHDunxcIDsKK+ixoD5jw7p8XCA7CivosZ0+YmF8XCA7CivosZk+ecOsfFwgOwor6LGNPmJpfFwgOwor6LGIPnHErXxcIDsKK+ixhD5kw7p8XCA7CivosYA+eGl8XCA7CivosL8+cWl8XCA7CivosLg+cWl8XCA7Civor5A+YsOsfFwgOwor6K6fPmTDunxcIDsKK+iumz55w6x8XCA7Civorok+ecOtfFwgOwor6K6IPmzDrHxcIDsKK+itvT55w7l8XCA7Civorbc+aMO5fFwgOwor6K22PnTDoHxcIDsKK+itsD55w6x8XCA7Civora8+ecOsfFwgOwor6K2qPsOgaXxcIDsKK+itpD5qaXxcIDsKK+itnD5wxa18XCA7CivorZU+bcO6fFwgOwor6K2SPmLDsnxcIDsKK+itjz5qaXxcIDsKK+ithj54aXxcIDsKK+ithT5zw6h8XCA7CivorYM+eHV8XCA7CivorLw+aHV8XCA7CivorLs+ecOtfFwgOwor6Ky4PsOhb3xcIDsKK+istz7DoW98XCA7CivorLU+eMOtfFwgOwor6Ky0PsOgb3xcIDsKK+issz5vdXxcIDsKK+isrj56w6l8XCA7CivorKk+bcOyfFwgOwor6KyoPm3Ds3xcIDsKK+ispz5sw618XCA7CivorKM+ecO6fFwgOwor6KyWPnPDuXxcIDsKK+iskT54w6x8XCA7CivorJA+bcOsfFwgOwor6KyOPm3DrXxcIDsKK+isjD5nZXxcIDsKK+isiD5iw7N8XCA7CivorIE+ecOofFwgOwor6Ku/PnHDrHxcIDsKK+irvT5nw6l8XCA7Civoq7M+YW58XCA7Civoq7A+eMStfFwgOwor6KuuPnppfFwgOwor6KutPnnDuXxcIDsKK+irrD5xxK18XCA7Civoq6k+cMWtfFwgOwor6KuoPmbDunxcIDsKK+irpj5kw6x8XCA7Civoq50+eMWtfFwgOwor6KubPnnDunxcIDsKK+irjj56w6l8XCA7Civoq4o+asO6fFwgOwor6KuGPnFpfFwgOwor6KuFPmppfFwgOwor6KuAPnDErXxcIDsKK+iqvT5uw6F8XCA7Civoqrw+ecOsfFwgOwor6Kq7PnTDoHxcIDsKK+iqsz5xdXxcIDsKK+iqsj5rw6h8XCA7Civoqq0+ZMO6fFwgOwor6KqnPnDFrXxcIDsKK+iqpD53w7l8XCA7CivoqqM+d3V8XCA7Civoqp8+d3V8XCA7Civoqp4+ecWtfFwgOwor6KqdPmFufFwgOwor6KqWPmLDs3xcIDsKK+iqkj5haXxcIDsKK+iqjj5zw7l8XCA7Civoqos+asOsfFwgOwor6KqIPnfDunxcIDsKK+iqgD7DqHJ8XCA7Civoqbg+bcOtfFwgOwor6KmlPmjDqXxcIDsKK+ipoz55w6x8XCA7CivoqaE+eMWtfFwgOwor6KmePmPDrXxcIDsKK+ipmz56xa18XCA7CivoqZo+ZMOhfFwgOwor6KmZPmLDoXxcIDsKK+ipmD5xdXxcIDsKK+iplj5iw6x8XCA7CivoqZM+ccWtfFwgOwor6KmSPnnDrXxcIDsKK+ipjz7DoG98XCA7CivoqY4+asO5fFwgOwor6KmNPnnDrHxcIDsKK+iphj5kxK18XCA7CivoqYI+ZsO5fFwgOwor6KmBPmfFrXxcIDsKK+iovz56aXxcIDsKK+iouT54w7l8XCA7CivoqLg+aMOpfFwgOwor6Ki2PmhlfFwgOwor6Ki0PnPDuXxcIDsKK+iosz55w6x8XCA7CivoqLI+Y2l8XCA7CivoqLE+eMWtfFwgOwor6KilPm7DqHxcIDsKK+ionT55w6B8XCA7CivoqJg+asOsfFwgOwor6KiWPnHDrHxcIDsKK+iokT55w618XCA7CivoqI8+eHV8XCA7CivoqIg+asOsfFwgOwor6KiDPmbDuXxcIDsKK+invz54aXxcIDsKK+invT54aXxcIDsKK+inuz5sw7l8XCA7Civop7k+eGl8XCA7Civop7E+YsOsfFwgOwor6KewPmTEg3xcIDsKK+inrj5sw7l8XCA7Civop60+aml8XCA7Civop6w+bsOtfFwgOwor6KehPmfDqXxcIDsKK+innT5kxK18XCA7Civop5k+asOtfFwgOwor6KeVPmN1fFwgOwor6Ka/PmTDrXxcIDsKK+imvj5qw618XCA7Civoprc+ccO5fFwgOwor6KawPnHDuXxcIDsKK+imrD5qw6x8XCA7Civopqk+ZMWtfFwgOwor6KamPnnDunxcIDsKK+impD54w6x8XCA7CivopqE+eMOtfFwgOwor6KabPm3DrHxcIDsKK+imlz5zaXxcIDsKK+imlD5tw6x8XCA7CivoppM+bcOsfFwgOwor6KaKPmppfFwgOwor6KaJPmppfFwgOwor6KaIPmjDqXxcIDsKK+imhz5iw6B8XCA7CivopoA+eGl8XCA7Civopb4+ecOgfFwgOwor6KW8PnnDrHxcIDsKK+ilsj54w618XCA7Civopa4+YsOzfFwgOwor6KWqPnfDoHxcIDsKK+ilpj5yw7p8XCA7CivopaU+cMO6fFwgOwor6KWjPmLDrXxcIDsKK+illj7Eg298XCA7CivopY8+YsOzfFwgOwor6KWNPnrDoXxcIDsKK+iliz5qw618XCA7CivopYY+cMO6fFwgOwor6KWAPmppfFwgOwor6KS5PnnDrHxcIDsKK+iktT5sw618XCA7CivopLI+a8O5fFwgOwor6KSfPmTDoXxcIDsKK+iklT55w7p8XCA7CivopJQ+ZsO5fFwgOwor6KSHPmbDuXxcIDsKK+ikhj50w618XCA7CivopIU+dMOsfFwgOwor6KSAPmrDrHxcIDsKK+ijuz5kxa18XCA7Civoo6E+bMStfFwgOwor6KOcPmLFrXxcIDsKK+ijmz55w6x8XCA7Civoo5o+asOsfFwgOwor6KOTPmfDqXxcIDsKK+iivT5yw7p8XCA7Civoors+w6lyfFwgOwor6KK5Pm3DsnxcIDsKK+iisj55w618XCA7Civooq8+YsOzfFwgOwor6KKqPnF1fFwgOwor6KKpPmLDrHxcIDsKK+iipj5uw6B8XCA7Civoops+ZGl8XCA7Civoopo+ZsO6fFwgOwor6KKZPm3DsnxcIDsKK+iimD55w618XCA7CivoopQ+aMOofFwgOwor6KKTPmrFrXxcIDsKK+iikD5iw6x8XCA7Civoobk+ccOtfFwgOwor6KG1Pm7DrHxcIDsKK+ihrT5mdXxcIDsKK+ihqj55xK18XCA7Civooac+ecO6fFwgOwor6KGaPmjDunxcIDsKK+ihiz54w6x8XCA7CivooYg+xJVyfFwgOwor6KGHPm3DsnxcIDsKK+igtz5xw7p8XCA7CivooLU+eGl8XCA7CivooLE+Z8WtfFwgOwor6KCuPnllfFwgOwor6KCrPmzDrHxcIDsKK+igpz5kw7l8XCA7CivooKY+bMO6fFwgOwor6KCjPmzDrHxcIDsKK+igoD5tw6x8XCA7CivooJ8+bMOgfFwgOwor6KCaPmhlfFwgOwor6KCQPnHDrXxcIDsKK+igjz5yw7p8XCA7CivooIw+esOpfFwgOwor6KCIPnrDqXxcIDsKK+ighz5sw6x8XCA7CivooIA+Y2l8XCA7Civon78+ccOsfFwgOwor6J+9PmTDoXxcIDsKK+ifvD5qw6x8XCA7Civon7s+ecStfFwgOwor6J+4PmzErXxcIDsKK+iftD5zaXxcIDsKK+ifsD5sw618XCA7Civon6M+asStfFwgOwor6J+iPnjErXxcIDsKK+ifnT5xw7p8XCA7Civon5g+dMOofFwgOwor6J+WPnNpfFwgOwor6J+UPm3DsnxcIDsKK+ifjT5sw618XCA7Civon4c+bcOhfFwgOwor6J+FPm3DsnxcIDsKK+ietz5ww618XCA7CivonrA+bMO5fFwgOwor6J6uPmTDrHxcIDsKK+ieoD55w6x8XCA7Civonp4+bWF8XCA7Civonpw+aMO6fFwgOwor6J6bPmjDqXxcIDsKK+iemT5kw7l8XCA7Civonpg+ecStfFwgOwor6J6VPmJpfFwgOwor6J6UPnnDrXxcIDsKK+iekD53dXxcIDsKK+iejz5qw618XCA7Civonoc+eGl8XCA7CivonoY+Y8OsfFwgOwor6J6EPnNpfFwgOwor6J26PmrFrXxcIDsKK+iduT7DoW58XCA7CivonbM+ZMO6fFwgOwor6J2yPmzDoHxcIDsKK+idrT50w618XCA7CivonaY+aMOhfFwgOwor6J2cPmbDuXxcIDsKK+idkz55w7p8XCA7CivonZE+bMOsfFwgOwor6J2NPmrDrXxcIDsKK+idiz5sw6B8XCA7CivonYM+ZMOsfFwgOwor6Jy6Pm7DrXxcIDsKK+ictj5zw7l8XCA7CivonLE+cMOtfFwgOwor6JynPmzDrHxcIDsKK+icpD5zaXxcIDsKK+icnz55w7l8XCA7CivonJ0+ccOtfFwgOwor6JybPmp1fFwgOwor6JyMPmLDrHxcIDsKK+ichT5mxa18XCA7Civom6g+bcOyfFwgOwor6JumPnnDrXxcIDsKK+iboT55w6x8XCA7Civom6A+bMOsfFwgOwor6JucPnlpfFwgOwor6JuXPmbDuXxcIDsKK+ibkz5jw6x8XCA7Civom5I+Z8OpfFwgOwor6JuMPmfFrXxcIDsKK+iavj5ixY98XCA7Civomr0+cMOtfFwgOwor6Jq5PmbDuXxcIDsKK+iauD5sw6x8XCA7Civomrc+asO5fFwgOwor6JquPnTDqHxcIDsKK+iarT5uw618XCA7CivomqU+ZsWtfFwgOwor6JqePm3DuXxcIDsKK+iamj5xw618XCA7CivompQ+ccOtfFwgOwor6JqRPnHDrXxcIDsKK+iahj5wYXxcIDsKK+iZsz5kw6x8XCA7Civomak+eMOsfFwgOwor6JmhPmrDuXxcIDsKK+iZnT5oxa18XCA7CivomZw+bMWtfFwgOwor6JmbPnh1fFwgOwor6JmZPmbDunxcIDsKK+iZlz5xdXxcIDsKK+iZlj5odXxcIDsKK+iZkj5zaXxcIDsKK+iZiT55w6x8XCA7CivomYI+bMO5fFwgOwor6JmAPmppfFwgOwor6Ji7PmrDrHxcIDsKK+iYuj5sw618XCA7CivomK4+asOsfFwgOwor6JiqPm3DrXxcIDsKK+iYpT5xw7l8XCA7CivomJw+asO6fFwgOwor6JibPnnDunxcIDsKK+iYmT55w6x8XCA7CivomJM+c3V8XCA7CivomI4+asOsfFwgOwor6JiHPnN1fFwgOwor6JiGPmzDunxcIDsKK+iYhD5xw618XCA7CivomII+aml8XCA7CivomIE+d8O5fFwgOwor6Je5PsSDaXxcIDsKK+iXtj5sw6x8XCA7Civol7Q+aMOpfFwgOwor6JemPm3Ds3xcIDsKK+iXoT5kw618XCA7Civol54+bMSDfFwgOwor6JedPnnDrHxcIDsKK+iXmj54w7l8XCA7Civol5k+ecOsfFwgOwor6JeXPnPDuXxcIDsKK+iXjD5sxIF8XCA7Civol4g+asOtfFwgOwor6JeHPnjDuXxcIDsKK+iXhT5mw6F8XCA7Civol4Q+ccOtfFwgOwor6Ja/Pm7ErXxcIDsKK+iWvj7ElXJ8XCA7Civolro+asOsfFwgOwor6Ja3PnLDunxcIDsKK+iWtj5sw618XCA7Civolqk+c8OgfFwgOwor6JajPmfFrXxcIDsKK+iWmT50w6x8XCA7Civolpg+ZMOhfFwgOwor6JaWPmtlfFwgOwor6JaLPmNpfFwgOwor6JaKPmrDrHxcIDsKK+iWhj7DoGl8XCA7CivoloI+eMOtfFwgOwor6JaBPnnDuXxcIDsKK+iVuj5qw618XCA7Civolbc+ecO5fFwgOwor6JWuPnjDrHxcIDsKK+iVrD5zaXxcIDsKK+iVqj53w7p8XCA7Civolac+ZsO5fFwgOwor6JWmPnh1fFwgOwor6JWlPnnEg3xcIDsKK+iVnz5mw6B8XCA7CivolZc+bMO5fFwgOwor6JWNPnnDunxcIDsKK+iVhT7Fj3V8XCA7CivolYI+Ym98XCA7CivolYA+asOtfFwgOwor6JS+PmzDrXxcIDsKK+iUtD5tw6F8XCA7CivolLA+aMO5fFwgOwor6JSkPm3DrHxcIDsKK+iUoD5jYXxcIDsKK+iUnT5txK18XCA7CivolJw+w6FvfFwgOwor6JSbPmjDunxcIDsKK+iUlT5kw6x8XCA7CivolJQ+YsWNfFwgOwor6JSQPmTDrXxcIDsKK+iUjT5sw7l8XCA7CivolIs+ZMOtfFwgOwor6JSHPmrDrHxcIDsKK+iUgT54w6x8XCA7CivolIA+YsO5fFwgOwor6JO+PmzFrXxcIDsKK+iTvT5iw6x8XCA7Civok7s+asOtfFwgOwor6JO6PnnDrHxcIDsKK+iTuT55xa18XCA7Civok60+YW58XCA7Civok6M+ecO5fFwgOwor6JObPmPDqHxcIDsKK+iTlz5sxIF8XCA7Civok5I+YsOsfFwgOwor6JOHPmfFrXxcIDsKK+iThj54w618XCA7Civokr4+bcOtfFwgOwor6JK9PmVufFwgOwor6JK1PnhpfFwgOwor6JKzPm7DoHxcIDsKK+iSsT5ww7p8XCA7CivokrA+YsOzfFwgOwor6JKuPnnDuXxcIDsKK+iSqj5ww7J8XCA7Civokqk+enV8XCA7CivokqY+d8OyfFwgOwor6JKkPnTDunxcIDsKK+iSoz54w7p8XCA7CivokqA+eMOtfFwgOwor6JKfPmrFrXxcIDsKK+iSnj5sw6x8XCA7Civokpo+aMOpfFwgOwor6JKYPm7DunxcIDsKK+iRqj5qw6x8XCA7Civokac+YsOzfFwgOwor6JGePm3ErXxcIDsKK+iRlj50w7p8XCA7CivokY0+ZsO6fFwgOwor6JGLPnHDunxcIDsKK+iRij5hbnxcIDsKK+iRiT55w6h8XCA7CivokYg+eMStfFwgOwor6JGFPmp1fFwgOwor6JC7PmFufFwgOwor6JC6PmzDoHxcIDsKK+iQtT53b3xcIDsKK+iQtD56w6l8XCA7CivokLM+Y8OofFwgOwor6JCvPmbDuXxcIDsKK+iQrT55xa18XCA7CivokKo+a2V8XCA7CivokJc+Y8OofFwgOwor6JCVPnHDrXxcIDsKK+iQkz55w618XCA7CivokJI+asWtfFwgOwor6JCGPmLDrHxcIDsKK+iQgD5oxa18XCA7Civoj7c+eXV8XCA7Civoj7Q+YW58XCA7Civoj7M+xINufFwgOwor6I+nPmTErXxcIDsKK+iPpT54aXxcIDsKK+iPnj5sw618XCA7Civoj50+YsOhfFwgOwor6I+SPmLDs3xcIDsKK+iPkT56aXxcIDsKK+iPkD5ww7p8XCA7Civoj4k+bMO5fFwgOwor6I+IPmxhfFwgOwor6I+CPmRpfFwgOwor6I6/PmPDrHxcIDsKK+iOrz5tw7l8XCA7Civojos+asOtfFwgOwor6I6IPm3DsnxcIDsKK+iOgz54aXxcIDsKK+iOgT53w7p8XCA7Civojb4+cMO6fFwgOwor6I25PmLDuXxcIDsKK+iNtD5mdXxcIDsKK+iNsD5kw7l8XCA7CivojZ0+esOpfFwgOwor6I2ZPmTDoXxcIDsKK+iNjD7DoG58XCA7CivojYs+w6lyfFwgOwor6I2FPmRhfFwgOwor6Iy3PmbDoXxcIDsKK+iMsj56aXxcIDsKK+iMsD55w7p8XCA7CivojK4+Y2l8XCA7CivojKY+Y8OofFwgOwor6IykPmrDrHxcIDsKK+iMoz53w7p8XCA7CivojJ8+ecO5fFwgOwor6IyWPmfDqXxcIDsKK+iMiz5kxK18XCA7CivojIo+eml8XCA7CivojIg+Y8OtfFwgOwor6IyHPmLDoXxcIDsKK+iMgD5mw7p8XCA7Civoi74+YsOsfFwgOwor6Iu9Pmd1fFwgOwor6Iu8PmLDs3xcIDsKK+iLuD5odXxcIDsKK+iLqT5iw7N8XCA7Civoi6I+ccWtfFwgOwor6IuZPmzDrHxcIDsKK+iLlj5kxK18XCA7Civoi5A+ecOtfFwgOwor6IuJPnDErXxcIDsKK+iLiD5sw6x8XCA7Civoi4U+ecOsfFwgOwor6Iq6PsSDb3xcIDsKK+iKpz54w7l8XCA7Civoip4+ccStfFwgOwor6IqYPnDDrXxcIDsKK+iKkz56xK18XCA7CivoipE+ccStfFwgOwor6IqQPmjDuXxcIDsKK+iKjz5kw7l8XCA7Civoiow+eHV8XCA7Civoioc+bcStfFwgOwor6IqFPnnDrHxcIDsKK+iJuz5sw6h8XCA7Civoias+bMO6fFwgOwor6ImqPmzFrXxcIDsKK+iJqT5xw618XCA7CivoiaQ+ecStfFwgOwor6ImjPmzFrXxcIDsKK+iJlz55w6x8XCA7CivoiY0+anV8XCA7CivoiYo+YsOzfFwgOwor6ImFPm3DuXxcIDsKK+iJgz5sw618XCA7CivoiYA+ZsO6fFwgOwor6Ii7PmzDunxcIDsKK+iItD56w6l8XCA7CivoiKU+cGF8XCA7CivoiJc+cHV8XCA7CivoiJY+cMO5fFwgOwor6IiJPmrFrXxcIDsKK+iIhz55w7p8XCA7Civoh7U+Z8OpfFwgOwor6IelPnfDsnxcIDsKK+iHoT5uw618XCA7Civoh54+ccO6fFwgOwor6IeaPmzDunxcIDsKK+iHmD5sw6B8XCA7Civoh5E+csO6fFwgOwor6IeNPnHDrXxcIDsKK+iHiz7DqXJ8XCA7Civoh4g+bMOgfFwgOwor6Ia0Pmh1fFwgOwor6IayPmh1fFwgOwor6IapPm7DrHxcIDsKK+iGoj5sx5h8XCA7Civohpo+ZnV8XCA7CivohpQ+bMO5fFwgOwor6IaSPm91fFwgOwor6IaNPnDDrXxcIDsKK+iGjD5qw618XCA7Civohok+ecOsfFwgOwor6IaGPnPDuXxcIDsKK+iGgz53w6B8XCA7Civohb0+d8OgfFwgOwor6IW3PmLDrHxcIDsKK+iFrz50w7p8XCA7CivohaQ+YW58XCA7CivohaM+ZMOsfFwgOwor6IWbPnd1fFwgOwor6IWYPsOpcnxcIDsKK+iFlz5ww618XCA7CivohZI+anV8XCA7CivohLU+Z8WtfFwgOwor6IS0PnDErXxcIDsKK+iEqD5jw7l8XCA7CivohKY+ZGV8XCA7CivohJ8+bMOofFwgOwor6ISOPnPDoHxcIDsKK+iDvj56w6x8XCA7Civog7k+w6lyfFwgOwor6IO3PsOgbnxcIDsKK+iDrD5uw7p8XCA7Civog6k+a8SDfFwgOwor6IOjPnnErXxcIDsKK+iDoj5rZXxcIDsKK+iDoD5xdXxcIDsKK+iDlT5mw7l8XCA7Civog5Q+esOsfFwgOwor6IOSPmZ1fFwgOwor6IOQPmt1fFwgOwor6IOPPnrErXxcIDsKK+iDij5xw7p8XCA7Civog4k+YsOzfFwgOwor6IOIPmLDoXxcIDsKK+iCuT5iw6x8XCA7Civogrg+eMOsfFwgOwor6IK2PnDDrXxcIDsKK+iCsz5xw618XCA7Civogq0+bsOgfFwgOwor6IKsPm7HnHxcIDsKK+iCoz5ixK18XCA7Civogp8+d8OyfFwgOwor6IKXPmTFrXxcIDsKK+iClD55xK18XCA7CivogpE+ZMOsfFwgOwor6IKQPmdlfFwgOwor6IKFPnPDuXxcIDsKK+iCgj5zw6x8XCA7CivogoA+ecO5fFwgOwor6IG7PmppfFwgOwor6IG6PmrDrXxcIDsKK+iBpT55xa18XCA7CivogZ8+eMO5fFwgOwor6IGcPmTErXxcIDsKK+iBmz5iw6x8XCA7CivogZA+ecOgfFwgOwor6IGPPsOpcnxcIDsKK+iBiT53YXxcIDsKK+iArT5qaXxcIDsKK+iAqz56w6l8XCA7CivogKQ+asOtfFwgOwor6ICgPmjDqXxcIDsKK+iAnz5qw7l8XCA7CivogJQ+esStfFwgOwor6ICPPsOpcnxcIDsKK+e/uj7DoW98XCA7Civnv7U+ccO6fFwgOwor57+vPmjDqHxcIDsKK+e/nD5zw6h8XCA7Civnv5c+ccOtfFwgOwor57+WPnjDrHxcIDsKK+e/kj54w618XCA7Civnv5E+ccO6fFwgOwor57+NPnBpfFwgOwor57+LPmxhfFwgOwor57+HPmbDunxcIDsKK+e+uj5ow7l8XCA7Civnvq0+ecO6fFwgOwor576pPnnDrHxcIDsKK+e+mz55w6x8XCA7CivnvpY+Z8WtfFwgOwor576TPmJhfFwgOwor576NPnTDoHxcIDsKK+e+iz5txK18XCA7Civnvog+aml8XCA7Civnvoc+aml8XCA7CivnvoY+cMOtfFwgOwor576DPm3DrHxcIDsKK+e9vT5qw6x8XCA7Civnvbw+YsOsfFwgOwor5724PmbDoXxcIDsKK+e9tz5iw6B8XCA7CivnvbU+bcOgfFwgOwor572zPnNpfFwgOwor572wPmbDoXxcIDsKK+e9rz7Eg258XCA7Civnva0+ecO5fFwgOwor572mPmbDunxcIDsKK+e9pD50w618XCA7CivnvZ8+Z8WtfFwgOwor572ePmLEgXxcIDsKK+e9nT5qdXxcIDsKK+e9mz5ndXxcIDsKK+e9mT5tw618XCA7CivnvY8+bMO6fFwgOwor572KPnHDrHxcIDsKK+e8vT5ib3xcIDsKK+e8jD5zaXxcIDsKK+e8hz50w618XCA7Civnu7k+a8O5fFwgOwor57ukPnjDrHxcIDsKK+e7iz5mw7p8XCA7Civnupo+eMStfFwgOwor57qXPmzDrXxcIDsKK+e6kT5sw7p8XCA7Civnuow+eMO5fFwgOwor57qGPm3DsnxcIDsKK+e6hT5sw6x8XCA7CivnuoA+cMO6fFwgOwor57m8PmrDrHxcIDsKK+e5uz54dXxcIDsKK+e5uj5yw7p8XCA7Civnubk+ecOsfFwgOwor57m2PnnDrHxcIDsKK+e5tD5iw6x8XCA7Civnuas+eMOsfFwgOwor57moPmTDoXxcIDsKK+e5pT54aXxcIDsKK+e5mD55w7l8XCA7CivnuYs+eMOsfFwgOwor57mEPnlpfFwgOwor57i+PmppfFwgOwor57i4Pm3DsnxcIDsKK+e4rT5sw618XCA7CivnuKw+Y8O5fFwgOwor57iqPmLDrHxcIDsKK+e4oD5ow7p8XCA7CivnuJ8+csO5fFwgOwor57ibPmbDunxcIDsKK+e4jj5nxa18XCA7CivnuIw+bsOsfFwgOwor57iKPnnDrHxcIDsKK+e4gz54dXxcIDsKK+e3uT50w618XCA7Civnt7A+ecO6fFwgOwor57euPmbDuXxcIDsKK+e3pj5zaXxcIDsKK+e3oD5kw6x8XCA7Civnt50+cWl8XCA7Civnt5k+a8OofFwgOwor57eWPnjDuXxcIDsKK+e3kj54w7l8XCA7Civnt5E+aml8XCA7Civnt44+ecO5fFwgOwor57eHPnppfFwgOwor57eGPnnDrHxcIDsKK+e3gD5xaXxcIDsKK+e2uj5xxK18XCA7Civntqg+ccOtfFwgOwor57alPnHDrHxcIDsKK+e2nz5sw6x8XCA7Civntpk+asOsfFwgOwor57aUPmjDuXxcIDsKK+e2kj5mdXxcIDsKK+e2jT5mw7p8XCA7Civntow+eMOsfFwgOwor57aIPnTDrXxcIDsKK+e2hz50w6x8XCA7CivntbI+c2l8XCA7CivntaU+ZsO6fFwgOwor57WYPmPDrHxcIDsKK+e1lz5ow7p8XCA7CivntYg+bcOyfFwgOwor57WHPmrDuXxcIDsKK+e1hD56xa18XCA7CivntYE+cXV8XCA7CivntLw+ZsO6fFwgOwor57S2PnHFrXxcIDsKK+e0sT5mw7p8XCA7CivntLA+eMOsfFwgOwor57SuPnphfFwgOwor57SqPmPErXxcIDsKK+e0qD5mw7l8XCA7CivntJo+asOtfFwgOwor57SVPnBpfFwgOwor57SOPnppfFwgOwor57SNPm7DoHxcIDsKK+e0jD5qw6x8XCA7CivntIc+Z2V8XCA7CivntIY+eXV8XCA7CivntIA+asOsfFwgOwor57O/PmrErXxcIDsKK+ezuT5zaXxcIDsKK+eztD5kw618XCA7Civns7I+bMOsfFwgOwor57OqPmLDs3xcIDsKK+ezpj54aXxcIDsKK+ezoj5tw7N8XCA7Civns5M+Z8WtfFwgOwor57ORPm7DrHxcIDsKK+ezkD5mdXxcIDsKK+ezjj5sw618XCA7Civns4g+eMWtfFwgOwor57OGPmh1fFwgOwor57K4PnHDrXxcIDsKK+eytz5qw7p8XCA7CivnsrY+bMO5fFwgOwor57K0PmzErXxcIDsKK+eysD5mw7p8XCA7Civnsqc+ZnV8XCA7CivnsqM+Y8OofFwgOwor57KbPnPDuXxcIDsKK+eymj5sw618XCA7Civnspk+eGl8XCA7CivnspY+bcOyfFwgOwor57KUPmrDuXxcIDsKK+eyjT5sw618XCA7Civnsoo+YsOsfFwgOwor57KFPnfDuXxcIDsKK+eygz5ixK18XCA7Civnsb4+bsOtfFwgOwor57GyPnnDuXxcIDsKK+exrT5zaXxcIDsKK+exrD5sw618XCA7Civnsac+ccO6fFwgOwor57GiPmrFrXxcIDsKK+exnj55w7l8XCA7CivnsZo+bMO6fFwgOwor57GZPmzDuXxcIDsKK+exiz5tw618XCA7CivnsYo+dMOsfFwgOwor57GFPnnDunxcIDsKK+ewvD5iw7l8XCA7CivnsLs+a2V8XCA7CivnsLY+YsWPfFwgOwor57C1PmTDuXxcIDsKK+ewtD5qw7l8XCA7CivnsKw+bMO5fFwgOwor57CgPmbFrXxcIDsKK+ewmz5zaXxcIDsKK+ewmj5tw6x8XCA7CivnsJk+YsOzfFwgOwor57CVPmzDqHxcIDsKK+ewij5qaXxcIDsKK+ewhD5ow7l8XCA7CivnsIM+ecOtfFwgOwor57CAPnrDqXxcIDsKK+evvT55xa18XCA7Civnr7Q+ZMOtfFwgOwor56+zPmLDrHxcIDsKK+evsD5iw7l8XCA7Civnr6U+bMOsfFwgOwor56+kPmTFrXxcIDsKK+evlT5ow6l8XCA7Civnrr8+asOtfFwgOwor5668Pnd1fFwgOwor5667PmzHnHxcIDsKK+eutj5ow7p8XCA7CivnrqU+YsWPfFwgOwor566kPmrDunxcIDsKK+euoz5jw6h8XCA7Civnrps+Z3V8XCA7Civnrpk+ZsO6fFwgOwor566TPmzDuXxcIDsKK+eukj5kw6F8XCA7Civnroo+eXV8XCA7Civnroc+Z8OofFwgOwor566GPmLDrHxcIDsKK+euhT5iw6x8XCA7CivnroQ+YsOsfFwgOwor566BPnDDunxcIDsKK+ettD5jw6h8XCA7CivnraU+asWtfFwgOwor562jPmzDrHxcIDsKK+etnz5mdXxcIDsKK+etnj5jw6h8XCA7CivnrZM+ZGF8XCA7CivnrY4+csO6fFwgOwor562GPmLErXxcIDsKK+etgT5xxa18XCA7CivnrLQ+Z8SVfFwgOwor56ywPmbDunxcIDsKK+esrj56w6l8XCA7CivnrKc+Y8OofFwgOwor56yfPmd1fFwgOwor56ydPm7DoHxcIDsKK+eslj55xK18XCA7CivnrJM+cMOtfFwgOwor56yMPnnDoXxcIDsKK+errD5xxa18XCA7Civnq6k+ecOsfFwgOwor56uiPnPDrHxcIDsKK+eroT55aXxcIDsKK+ermD5qxa18XCA7Civnq5I+ccOtfFwgOwor56q5PnfDuXxcIDsKK+equD54aXxcIDsKK+eqtj5qw7l8XCA7Civnqq0+asO5fFwgOwor56qrPnnDoHxcIDsKK+eqqj53YXxcIDsKK+eqqT53b3xcIDsKK+eqoz5zw7l8XCA7CivnqqI+eMO5fFwgOwor56qPPnd1fFwgOwor56qKPndhfFwgOwor56m1PndhfFwgOwor56myPmzDrXxcIDsKK+eppz5qw6x8XCA7CivnqaU+ecO5fFwgOwor56mhPnPDqHxcIDsKK+epmT5ww7p8XCA7CivnqZY+asStfFwgOwor56mTPnnDrHxcIDsKK+epjT5qaXxcIDsKK+epjD5zdXxcIDsKK+epiz5sw7l8XCA7CivnqYo+asOsfFwgOwor56mEPmrDrHxcIDsKK+epgD5nxa18XCA7CivnqLo+ccStfFwgOwor56i2PnnDuXxcIDsKK+eotT56aXxcIDsKK+eosD54dXxcIDsKK+eoqz5iaXxcIDsKK+eoqj5mw7l8XCA7CivnqKk+asOsfFwgOwor56inPnjDrHxcIDsKK+eooj55w7l8XCA7CivnqJg+aml8XCA7CivnqJI+Z8O5fFwgOwor56iRPmzDuXxcIDsKK+eojD50w7p8XCA7CivnqIo+dMOtfFwgOwor56iDPmZ1fFwgOwor56e/PmbFrXxcIDsKK+enuj5kw7l8XCA7Civnp7Y+eml8XCA7Civnp7Q+aMOpfFwgOwor56exPmPDrXxcIDsKK+enrD5qw7l8XCA7Civnp6E+YsOhfFwgOwor56egPnBpfFwgOwor56edPmp1fFwgOwor56ecPm7DrXxcIDsKK+enmz5waXxcIDsKK+enmT5rw7l8XCA7Civnp5c+YsOsfFwgOwor56eHPnnDrHxcIDsKK+enhD56xK18XCA7Civnpr8+dHV8XCA7CivnprU+dMOtfFwgOwor56ayPmzDrHxcIDsKK+emsD5tw618XCA7Civnpq4+bMStfFwgOwor56atPm3DrXxcIDsKK+emqD5qaXxcIDsKK+empj55w7l8XCA7CivnpqU+ccOtfFwgOwor56aiPnRhfFwgOwor56ahPm3DoHxcIDsKK+emoD5zaXxcIDsKK+emnT5qw618XCA7Civnppg+ZMOsfFwgOwor56aXPnNpfFwgOwor56aVPnlpfFwgOwor56aUPnTDrXxcIDsKK+emkT53w7p8XCA7Civnpow+eml8XCA7Civnpoo+eMOsfFwgOwor56W/PmzDuXxcIDsKK+eluz5nw7l8XCA7CivnpaY+d8O6fFwgOwor56WkPnnFrXxcIDsKK+ellT5tw6x8XCA7CivnpZQ+ZsO5fFwgOwor56WHPnHDrXxcIDsKK+elgz5tw6B8XCA7CivnpYI+dGF8XCA7CivnpLM+bcOyfFwgOwor56SwPmzDrHxcIDsKK+ekqz5sw6x8XCA7CivnpKo+bMOsfFwgOwor56SkPmPEg3xcIDsKK+ekoT5iw7N8XCA7CivnpKA+Y8OtfFwgOwor56SZPsOgaXxcIDsKK+ekmD5xw6x8XCA7CivnpJY+ecO5fFwgOwor56SVPnBpfFwgOwor56SUPnDDrHxcIDsKK+ekkj55xK18XCA7CivnpI8+asOtfFwgOwor56SNPmtlfFwgOwor56SJPmjDqXxcIDsKK+ekhz55w7l8XCA7Civno78+bMOsfFwgOwor56O+PmRpfFwgOwor56O8PsOhb3xcIDsKK+ejtj54w6x8XCA7Civno68+aml8XCA7Civno6k+cWl8XCA7Civno6c+ccOsfFwgOwor56OjPmPDoHxcIDsKK+ejoD5sxa18XCA7Civno58+bMO5fFwgOwor56OdPsOhb3xcIDsKK+ejnD5xw6x8XCA7Civno5Y+bGF8XCA7Civno5I+a8SVfFwgOwor56OPPsOhaXxcIDsKK+ejjj5xaXxcIDsKK+ejjT54aXxcIDsKK+ejhz5waXxcIDsKK+ejgz5zaXxcIDsKK+eivD5txIN8XCA7CivnorY+ccOsfFwgOwor56KuPnTDrXxcIDsKK+eipj5rw6h8XCA7CivnoqI+a8OofFwgOwor56KVPnHDrXxcIDsKK+eilD53xa18XCA7Civnoos+aMOofFwgOwor56KGPmJvfFwgOwor56KBPnHDrXxcIDsKK+ehtT5sxa18XCA7CivnobI+ecO5fFwgOwor56GiPnfDsnxcIDsKK+ehiz7DoGl8XCA7CivnoYk+bMO5fFwgOwor56C2PnDDsnxcIDsKK+egtT5ib3xcIDsKK+egsz5sw6h8XCA7CivnoLE+w6BpfFwgOwor56CuPm7FrXxcIDsKK+egrD5sw6F8XCA7CivnoKo+bcWtfFwgOwor56CoPsOgaXxcIDsKK+egoT5rZXxcIDsKK+egoD5xdXxcIDsKK+egnj5tw7J8XCA7CivnoIY+ZnV8XCA7CivnoIU+bMOsfFwgOwor55+7PmvDuXxcIDsKK+efuT5rdXxcIDsKK+eftz56xK18XCA7Civnn7U+ccOsfFwgOwor55+gPmPDqHxcIDsKK+efnj55w7l8XCA7Civnn5Y+eMStfFwgOwor55+RPmzDunxcIDsKK+efiz5sw6x8XCA7Civnnrk+w6BpfFwgOwor5564PmrDrXxcIDsKK+eesj54w7l8XCA7CivnnrE+ecOofFwgOwor556oPnDDunxcIDsKK+eepD5iw6x8XCA7CivnnqE+asOsfFwgOwor556ZPm3DsnxcIDsKK+eemD5vdXxcIDsKK+eelj55w6x8XCA7CivnnpQ+esOpfFwgOwor556HPm1pfFwgOwor556CPmZhfFwgOwor556BPmbDoXxcIDsKK+edvD50w6x8XCA7CivnnbM+eGl8XCA7CivnnbI+asOsfFwgOwor552wPm3DoHxcIDsKK+edrj55w7p8XCA7Civnnao+ecOsfFwgOwor552pPmzDuXxcIDsKK+edpD5iw6x8XCA7CivnnZ0+bMOtfFwgOwor552OPnhpfFwgOwor55y9Pm3DsnxcIDsKK+ecsj7DqHJ8XCA7CivnnLE+ecOtfFwgOwor55yrPm3ErXxcIDsKK+ecpT56w6x8XCA7CivnnKQ+ecOtfFwgOwor55yhPmRpfFwgOwor55ycPm3DsnxcIDsKK+eclz5qdXxcIDsKK+eclD5kw6B8XCA7Civnm7s+eMOsfFwgOwor55u1PnHDrHxcIDsKK+ebrT5sw6x8XCA7Civnm6w+Z8WtfFwgOwor55urPmFufFwgOwor55unPmzDunxcIDsKK+ebpj5hbnxcIDsKK+ebnT5sw7l8XCA7Civnm5k+ZsWtfFwgOwor55uTPmfElXxcIDsKK+ebiz5ib3xcIDsKK+ebiT5ow6l8XCA7Civnm4c+aMOpfFwgOwor55q+PmTDunxcIDsKK+eavD5nxa18XCA7Civnmrc+Z8WtfFwgOwor55qsPmjDqHxcIDsKK+eaqj5sw6x8XCA7Civnmqc+w6BpfFwgOwor55qjPnnDqHxcIDsKK+eanz56w6l8XCA7Civnmpo+w6FpfFwgOwor55qVPmJpfFwgOwor55qNPmrDrXxcIDsKK+eaiT5jxK18XCA7CivnmoU+cGF8XCA7CivnmoE+ZMOtfFwgOwor55qAPmJpfFwgOwor55m/PmrDrXxcIDsKK+eZvD5mYXxcIDsKK+eZuj5mYXxcIDsKK+eZuT5wb3xcIDsKK+eZtj5ib3xcIDsKK+eZpz5sw6x8XCA7CivnmaA+asOsfFwgOwor55mYPmzDrHxcIDsKK+eZkj55w7l8XCA7CivnmYs+aMOofFwgOwor55mKPsOhaXxcIDsKK+eZgT5mw7p8XCA7CivnmLw+bcOyfFwgOwor55i7PmzHmHxcIDsKK+eYsT55w6x8XCA7CivnmK8+Y8O5fFwgOwor55iePnnDrHxcIDsKK+eYnD54w618XCA7CivnmJQ+a8O5fFwgOwor55iPPnTDunxcIDsKK+eYiT55w7l8XCA7CivnmIg+asOsfFwgOwor55iEPmPDuXxcIDsKK+eYgj55xIN8XCA7Civnl7o+YsOsfFwgOwor55e3PmFufFwgOwor55e1PmrDrHxcIDsKK+eXsj5tw6F8XCA7Civnl6w+ecOsfFwgOwor55ehPnB1fFwgOwor55ecPnR1fFwgOwor55eGPm7DrHxcIDsKK+eWuj5mw6F8XCA7Civnlrc+ccOtfFwgOwor55aqPmLDrHxcIDsKK+eWnj54dXxcIDsKK+eWlT5ixK18XCA7Civnlog+YsOyfFwgOwor55WwPnnDrHxcIDsKK+eVrj5txa18XCA7Civnlaw+ecO6fFwgOwor55WjPmTDoXxcIDsKK+eVoj5iw6x8XCA7CivnlZ8+Y8OofFwgOwor55WePm3FrXxcIDsKK+eVnT5txa18XCA7CivnlZc+ZMOhfFwgOwor55WWPndhfFwgOwor55WSPm3FrXxcIDsKK+eVkD5mw7p8XCA7CivnlYk+ZsO6fFwgOwor55WGPm3FrXxcIDsKK+eVgT5xw618XCA7CivnlLY+ZsO6fFwgOwor55SqPmzDuXxcIDsKK+eUpj5zdXxcIDsKK+eUkj53xa18XCA7CivnlIw+b3V8XCA7CivnlIs+ZMOsfFwgOwor55SIPnHDrHxcIDsKK+eUhj5jw618XCA7Civnk7U+ecOtfFwgOwor55OzPmjDunxcIDsKK+eTqj5iw7l8XCA7Civnk6U+bMOsfFwgOwor55OhPnfDoHxcIDsKK+eTnT5iw7N8XCA7Civnk5c+eGl8XCA7Civnk5U+bcOtfFwgOwor55ORPmzDrHxcIDsKK+eTkD5sw7p8XCA7Civnk44+bMOgfFwgOwor55OLPmLDs3xcIDsKK+eTiD5sw618XCA7Civnk4U+bMOsfFwgOwor55OEPmTDunxcIDsKK+eSvj5qw6x8XCA7Civnkr0+eMStfFwgOwor55K3PmzDunxcIDsKK+eStT55w7p8XCA7CivnkrE+c8OofFwgOwor55KmPsOgaXxcIDsKK+eSoz5qaXxcIDsKK+eSlj5xw7p8XCA7CivnkpE+d8O6fFwgOwor55KIPsOhb3xcIDsKK+eSgj5xw618XCA7Civnkb8+bMSrfFwgOwor55G5PnTDunxcIDsKK+eRrj5sw6x8XCA7Civnkao+bcSDfFwgOwor55GmPnd1fFwgOwor55GYPnnDqXxcIDsKK+eRhT50w618XCA7CivnkYA+ecWtfFwgOwor55C9PmTFrXxcIDsKK+eQuj5mw6B8XCA7CivnkK0+bMO5fFwgOwor55CZPnnDuXxcIDsKK+eQjT5sw6x8XCA7CivnkIs+bMOtfFwgOwor55CIPmbDunxcIDsKK+ePuD53w7p8XCA7Civnj7c+d8WtfFwgOwor54+2PmTDrHxcIDsKK+ePrD54w7l8XCA7Civnj58+c8O5fFwgOwor54+dPnjFrXxcIDsKK+ePlT5sw6x8XCA7Civnj4w+YsOsfFwgOwor54+HPnrFrXxcIDsKK+ePhj55w618XCA7Civnj4E+Y8OtfFwgOwor5468PmPErXxcIDsKK+eOuD5jaXxcIDsKK+eOtT7DoW58XCA7CivnjrQ+ecOsfFwgOwor546tPnDDrXxcIDsKK+eOoT55w6B8XCA7Civnjp4+ZnV8XCA7Civnjp0+d8WtfFwgOwor546YPmrErXxcIDsKK+eOlz55w7p8XCA7CivnjpM+ZMOsfFwgOwor546QPmJhfFwgOwor546PPmzDqHxcIDsKK+eOjT5nxIN8XCA7Civnjoo+c8O5fFwgOwor546IPmzDunxcIDsKK+eOhj56aXxcIDsKK+eOgj5xw618XCA7Civnjbw+bcOtfFwgOwor5426PnTEg3xcIDsKK+eNuT5sw7p8XCA7Civnjag+ZMO6fFwgOwor542mPmfDqXxcIDsKK+eNpT54w618XCA7CivnjZ0+ecO5fFwgOwor542bPnDDunxcIDsKK+eNmT5iw6x8XCA7CivnjZg+YsOsfFwgOwor542TPsOhb3xcIDsKK+eNjz5tw7p8XCA7CivnjYg+ecOsfFwgOwor542EPnnDuXxcIDsKK+eNgT5tw6B8XCA7CivnjL0+bcSDfFwgOwor54y8PmLDs3xcIDsKK+eMsj5ow6h8XCA7CivnjLA+ecOgfFwgOwor54ynPndvfFwgOwor54ykPmrDrHxcIDsKK+eMmj55w6F8XCA7CivnjIk+ccOtfFwgOwor54yIPmLDoHxcIDsKK+eLtj54xK18XCA7Civni7M+ecO6fFwgOwor54unPnTDoHxcIDsKK+eLpD5qw618XCA7Civni6I+aMOpfFwgOwor54ucPmfFrXxcIDsKK+eLmz5ww7J8XCA7Civni5U+xINvfFwgOwor54uUPm7ErXxcIDsKK+eLkz5waXxcIDsKK+eLiz5uw618XCA7Civni4o+asO6fFwgOwor54uJPnBpfFwgOwor54uHPm3DuXxcIDsKK+eKvT55w6F8XCA7Civnirs+YsOzfFwgOwor54q1PnHDrHxcIDsKK+eKsz7DoW58XCA7CivnirE+asStfFwgOwor54quPmLDoXxcIDsKK+eKpz54aXxcIDsKK+eKpT5iw7N8XCA7CivniqQ+cMOtfFwgOwor54qiPmTDunxcIDsKK+eKoT5sw6x8XCA7Civnips+bMOtfFwgOwor54qYPm3DoXxcIDsKK+eKlD54w6x8XCA7CivnipE+asO6fFwgOwor54qQPmtlfFwgOwor54qGPnTDqHxcIDsKK+eKgj5sw618XCA7Civnibg+esOsfFwgOwor54m0PmTErXxcIDsKK+eJsz5txa18XCA7CivnibE+Z2V8XCA7Civnia0+c8OsfFwgOwor54mrPmdlfFwgOwor54mgPnRhfFwgOwor54mYPmTDunxcIDsKK+eJlD5iw7N8XCA7CivniYE+Z2V8XCA7CivniL4+xJVyfFwgOwor54i6PnnDqXxcIDsKK+eItD5mxa18XCA7CivniKk+ecO5fFwgOwor54iiPm3DrXxcIDsKK+eIlz55w6h8XCA7CivniJA+bMO6fFwgOwor54iPPmzDrHxcIDsKK+eIij5hb3xcIDsKK+eIiT5sw6B8XCA7CivniIc+csOofFwgOwor54iFPm3DsnxcIDsKK+eIhD5sw6x8XCA7CivniIA+YsOzfFwgOwor54e4PnLDunxcIDsKK+eHsT55w6x8XCA7Civnh6g+eGl8XCA7Civnh6E+ecOsfFwgOwor54ePPnnDuXxcIDsKK+eHgT55w6h8XCA7Civnhrw+ecOsfFwgOwor54a7PnhpfFwgOwor54a6PnhpfFwgOwor54axPnLDqHxcIDsKK+eGsD5vdXxcIDsKK+eGqj55w618XCA7Civnhqk+YW98XCA7CivnhqQ+ecOsfFwgOwor54adPmzDuXxcIDsKK+eGmj5iw6x8XCA7Civnhog+eGl8XCA7CivnhoY+aMOpfFwgOwor54aDPnfDuXxcIDsKK+eGgj54w6x8XCA7Civnhb8+YsOzfFwgOwor54WgPnnDqHxcIDsKK+eFlT54aXxcIDsKK+eFjz5iw6x8XCA7CivnhYI+aMOofFwgOwor54S4PmfFrXxcIDsKK+eEtz5ww618XCA7CivnhKw+eMOtfFwgOwor54SlPnfDsnxcIDsKK+eEpD5mxa18XCA7CivnhKM+asO5fFwgOwor54ShPnfDunxcIDsKK+eEnz54w618XCA7CivnhJc+asO6fFwgOwor54SPPmrDrXxcIDsKK+eEjT5kw6x8XCA7CivnhIg+eGl8XCA7CivnhIU+a8O5fFwgOwor54SDPmjDqHxcIDsKK+eEgT54aXxcIDsKK+eEgD5ow7p8XCA7Civng7w+aHV8XCA7Civng7M+cMWtfFwgOwor54OwPmbDunxcIDsKK+eDnj5ww7J8XCA7Civng5Y+Z8OpfFwgOwor54OPPnd1fFwgOwor54OMPnfDuXxcIDsKK+eDhT54w7l8XCA7CivngqY+YsOhfFwgOwor54KlPmbDunxcIDsKK+eCoz5rxJV8XCA7Civngp8+ZMOhfFwgOwor54KRPm3DuXxcIDsKK+eCiz5waXxcIDsKK+eCiD55w6x8XCA7Civngoc+cMOyfFwgOwor54KGPmzDunxcIDsKK+eBqj55w7l8XCA7CivngZY+bcStfFwgOwor54GVPmzDrXxcIDsKK+eBkT5zxIN8XCA7CivngY0+bMOtfFwgOwor54GLPmbEg3xcIDsKK+eBiD5xw7p8XCA7CivngLc+ecOsfFwgOwor54CxPmrDrHxcIDsKK+eAsD5tw618XCA7CivngKs+aMO6fFwgOwor54CdPmzDrHxcIDsKK+eAmD5sw7p8XCA7CivngJQ+Z8WtfFwgOwor54COPm3DsnxcIDsKK+eAhj5kw7p8XCA7CivngIM+c8OsfFwgOwor5r+/PmzDrHxcIDsKK+a/sj5nxa18XCA7Civmv60+w6BpfFwgOwor5r+oPmPDrXxcIDsKK+a/pT54aXxcIDsKK+a/oz53w7J8XCA7Civmv58+asOsfFwgOwor5r+dPnHDrXxcIDsKK+a/mj5iw6x8XCA7Civmv5c+bcOsfFwgOwor5r+WPm7DrHxcIDsKK+a/lD5txK18XCA7Civmv5A+bcOtfFwgOwor5r+MPnTDoHxcIDsKK+a/iD5qw618XCA7Civmv4c+c8OofFwgOwor5r6+PnTDoHxcIDsKK+a+vT5qw7l8XCA7Civmvrw+cMOsfFwgOwor5r6yPnnDqHxcIDsKK+a+rD56aXxcIDsKK+a+pj55w7l8XCA7CivmvqQ+esOpfFwgOwor5r6ePnnDunxcIDsKK+a+mT54w6x8XCA7CivmvpU+aMOpfFwgOwor5r6TPmbDunxcIDsKK+a+hT7DoG98XCA7CivmvoE+c8OofFwgOwor5r6APnPDqHxcIDsKK+a9tz5ixK18XCA7CivmvbY+YsOsfFwgOwor5r2zPnTDunxcIDsKK+a9sT5zxIN8XCA7Civmvao+ZMOtfFwgOwor5r2pPnnDrHxcIDsKK+a9pT5zw7l8XCA7CivmvZ8+eMOsfFwgOwor5r2dPnhpfFwgOwor5r2XPmrDrXxcIDsKK+a9lj5ww6F8XCA7CivmvZU+d8WtfFwgOwor5r2SPmJvfFwgOwor5r2RPnBvfFwgOwor5r2QPmJvfFwgOwor5r2OPnDDrHxcIDsKK+a9ij54w7l8XCA7CivmvL0+dMOtfFwgOwor5ry1PnjDuXxcIDsKK+a8rD56w6x8XCA7CivmvKY+bMOtfFwgOwor5rylPndhfFwgOwor5ryePm3DrHxcIDsKK+a8nT54w618XCA7CivmvJw+ecSVfFwgOwor5ryaPm91fFwgOwor5ryIPmrDrHxcIDsKK+a8hz54xK18XCA7CivmvIQ+ecOhfFwgOwor5ryDPmrDrXxcIDsKK+a8gT55w7p8XCA7Civmu7o+ZMOtfFwgOwor5ru4PmjFrXxcIDsKK+a7tz5sxa18XCA7Civmu7Y+w6FvfFwgOwor5ru1Pm3DrHxcIDsKK+a7rT5iw6x8XCA7Civmu6w+aMO5fFwgOwor5ruqPnnDuXxcIDsKK+a7kj5iw6x8XCA7Civmu4w+ZMOtfFwgOwor5ruKPmPDrXxcIDsKK+a7hj5ow6l8XCA7Civmurk+c8O5fFwgOwor5rq4PnPDuXxcIDsKK+a6rT56w6l8XCA7Civmuqk+d8O5fFwgOwor5rqmPnFpfFwgOwor5rqkPm3Eg3xcIDsKK+a6oT5iw7N8XCA7Civmup4+bcOsfFwgOwor5rqbPndhfFwgOwor5rqaPmTDoXxcIDsKK+a5vT56aXxcIDsKK+a5qD5xw7l8XCA7CivmuaU+dMO6fFwgOwor5rmkPmrDunxcIDsKK+a5oj5iw6x8XCA7CivmuaE+ecO6fFwgOwor5rmZPnnDrHxcIDsKK+a5kj5qw618XCA7CivmuZE+eMWtfFwgOwor5rmQPm3DsnxcIDsKK+a5hz5xw6x8XCA7CivmuYY+ccOsfFwgOwor5ri/PmLDoXxcIDsKK+a4sz5txK18XCA7CivmuLE+xJVyfFwgOwor5riuPmdlfFwgOwor5risPmPDqHxcIDsKK+a4pz5kw6x8XCA7CivmuJI+cMOsfFwgOwor5riIPmrDrHxcIDsKK+a4hz5rxJV8XCA7CivmuIM+csOofFwgOwor5re/Pm3DrHxcIDsKK+a3tD5odXxcIDsKK+a3rz55w7l8XCA7Civmt6c+bcOsfFwgOwor5relPmzDuXxcIDsKK+a3oj55w7l8XCA7Civmt6A+cMOsfFwgOwor5reXPmrDunxcIDsKK+a3lT5sw7l8XCA7Civmt5I+cWl8XCA7Civmt4g+Z8WtfFwgOwor5reCPmTDqXxcIDsKK+a2vj50w6B8XCA7Civmtro+anV8XCA7CivmtrQ+d8OyfFwgOwor5racPmTDunxcIDsKK+a2mD5zw6x8XCA7CivmtpY+bMOsfFwgOwor5rWzPnnDrHxcIDsKK+a1sD5sw6x8XCA7Civmtaw+bMStfFwgOwor5rWlPnnDrHxcIDsKK+a1oT5iw7N8XCA7CivmtZ0+ZMOtfFwgOwor5rWJPmrErXxcIDsKK+a1gj55w6x8XCA7CivmtYA+ccWtfFwgOwor5rS/Pnd1fFwgOwor5rSwPmrDuXxcIDsKK+a0pj5tw7J8XCA7CivmtKM+bcStfFwgOwor5rSiPnlpfFwgOwor5rSfPnnDrXxcIDsKK+a0nT7DoG58XCA7CivmtJY+d8O6fFwgOwor5rSRPmbDunxcIDsKK+a0jz7DqXJ8XCA7CivmtI0+c8OsfFwgOwor5rOyPmrErXxcIDsKK+azrT5mdXxcIDsKK+azpj5qw7p8XCA7Civms6Q+bsStfFwgOwor5rOdPnPDuXxcIDsKK+azmj5jxK18XCA7Civms5g+aHV8XCA7Civms5I+Z3V8XCA7Civms5A+bMOofFwgOwor5rOLPmLDrHxcIDsKK+azhj55aXxcIDsKK+azgz5qw7l8XCA7Civms4A+anV8XCA7Civmsrc+ZmF8XCA7CivmsrY+ZsO6fFwgOwor5rK1Pm3ErXxcIDsKK+aytD5sw6x8XCA7CivmsqI+b3V8XCA7Civmsp4+emF8XCA7Civmspg+YsStfFwgOwor5rKVPnfDuXxcIDsKK+ayjT5ow7l8XCA7CivmsoA+eMO5fFwgOwor5rG/PnjDuXxcIDsKK+axpT5nxa18XCA7CivmsZo+d2F8XCA7CivmsZk+d3V8XCA7CivmsY8+ZMOgfFwgOwor5rC8Pm7DrHxcIDsKK+awuz5sw6h8XCA7CivmsKw+ecOgfFwgOwor5rClPnhpfFwgOwor5rCjPnHDrHxcIDsKK+awnD5yw6x8XCA7CivmsJc+ccOsfFwgOwor5rCNPnHDunxcIDsKK+awgT5tw7p8XCA7CivmsIA+bMeYfFwgOwor5q++PnTDoHxcIDsKK+avvD5ow6l8XCA7Civmr7Q+Yml8XCA7Civmr7E+asO6fFwgOwor5q+qPm3DunxcIDsKK+avqT5qw7p8XCA7Civmr6Y+w6hyfFwgOwor5q+kPsSVcnxcIDsKK+avoz5tw7l8XCA7Civmr5g+cMOtfFwgOwor5q+QPsSDaXxcIDsKK+aviT55aXxcIDsKK+avhj5vdXxcIDsKK+avhD5qaXxcIDsKK+auvD5rw6l8XCA7Civmrrs+a8OpfFwgOwor5q65PnnDrHxcIDsKK+ausD5kw7p8XCA7Civmrqw+ZMO5fFwgOwor5q6nPmPDuXxcIDsKK+auoj50w6x8XCA7Civmrp0+bsOsfFwgOwor5q6cPnnDqHxcIDsKK+aulD55w6x8XCA7CivmrpA+c8O5fFwgOwor5q6IPnjDuXxcIDsKK+atvz5tw7J8XCA7Civmrb4+bcOyfFwgOwor5q23PmzDrHxcIDsKK+attj55w7p8XCA7CivmrbQ+bMOsfFwgOwor5q2wPnPDqHxcIDsKK+atrj5zw6h8XCA7Civmras+asO5fFwgOwor5q2pPmLDuXxcIDsKK+atqD5iw7l8XCA7CivmrZ8+ecO6fFwgOwor5q2dPnnDrHxcIDsKK+atmD54dXxcIDsKK+atlD54dXxcIDsKK+atkj50w6x8XCA7CivmrZE+aHV8XCA7CivmrZA+b3V8XCA7CivmrY0+d3V8XCA7CivmrYs+ecOtfFwgOwor5q2IPsWPdXxcIDsKK+asuD7Eg2l8XCA7CivmrLA+eHV8XCA7CivmrK8+eMOtfFwgOwor5qytPmhlfFwgOwor5qyoPmvDqXxcIDsKK+aspT55w7l8XCA7CivmrJ0+ecO5fFwgOwor5qybPmLDoHxcIDsKK+asmj5sxK18XCA7CivmrJA+bMStfFwgOwor5qyOPnnDuXxcIDsKK+asiz5xw7p8XCA7CivmrIU+asWtfFwgOwor5qyCPmLDs3xcIDsKK+aruD5qxa18XCA7Civmq7I+ecO5fFwgOwor5quvPnN1fFwgOwor5qutPmrDrHxcIDsKK+arqj5sw6x8XCA7Civmq6g+bMO6fFwgOwor5qufPmzDrHxcIDsKK+arnT5kw7p8XCA7Civmq5k+b3V8XCA7Civmq5Y+bMeYfFwgOwor5quUPmzDrHxcIDsKK+arkz5sxa18XCA7Civmq5I+c8OgfFwgOwor5quHPnDDs3xcIDsKK+arhT5qaXxcIDsKK+argT5tw6x8XCA7Civmq4A+ccOtfFwgOwor5qq9PsOpcnxcIDsKK+aquT55aXxcIDsKK+aqtz5tw618XCA7CivmqrU+asOsfFwgOwor5qqxPnHDrXxcIDsKK+aqpT55xK18XCA7Civmqp0+asOtfFwgOwor5qqYPmLDrHxcIDsKK+aqlT5qw6x8XCA7Civmqo8+cMWtfFwgOwor5qqNPnnDrHxcIDsKK+aqjD5ww7p8XCA7Civmqos+anV8XCA7Civmqb0+dMOgfFwgOwor5qm2PmrDrXxcIDsKK+aprT5ndXxcIDsKK+apnz5qaXxcIDsKK+apmj5zw7l8XCA7CivmqYU+bcOzfFwgOwor5qmDPmZhfFwgOwor5qi4PnDDunxcIDsKK+aosj7DqHJ8XCA7CivmqJo+bMO5fFwgOwor5qiWPmtlfFwgOwor5qiSPm3DrHxcIDsKK+aokD5sxa18XCA7CivmqI0+aml8XCA7CivmqII+bMOofFwgOwor5qe3PnnDrHxcIDsKK+antD5ow7l8XCA7Civmp7I+aMO6fFwgOwor5qejPnHErXxcIDsKK+anoj54w618XCA7Civmp5I+eMO5fFwgOwor5qeJPmrDrXxcIDsKK+anhT5nw6l8XCA7Civmp4I+aMOpfFwgOwor5qa+PmfFrXxcIDsKK+amvT54aXxcIDsKK+amvD5rw6h8XCA7Civmprk+c2l8XCA7Civmpqo+bcOgfFwgOwor5qahPnPDuXxcIDsKK+amnz56xK18XCA7Civmppk+dMSDfFwgOwor5qaWPmfFrXxcIDsKK+amkz5tw6x8XCA7CivmppE+ZsO5fFwgOwor5qaPPnnDrHxcIDsKK+amgz5mw7p8XCA7Civmpb0+bMOofFwgOwor5qW1PmrDrXxcIDsKK+altD5kw6x8XCA7CivmpbA+ecO6fFwgOwor5qWtPnnDqHxcIDsKK+alqj55w6h8XCA7CivmpaE+ecO6fFwgOwor5qWcPmjDunxcIDsKK+almz5ow7l8XCA7CivmpZg+bcO5fFwgOwor5qWVPmrDrXxcIDsKK+alkj5zaXxcIDsKK+aliz5sw6B8XCA7CivmpYg+eHV8XCA7CivmpYU+YsOsfFwgOwor5qWAPnnFrXxcIDsKK+akuD55w618XCA7CivmpJ4+eMOsfFwgOwor5qSUPnppfFwgOwor5qSPPnlhfFwgOwor5qSIPmrDunxcIDsKK+akhz5qxa18XCA7CivmpII+bMO5fFwgOwor5qO0PmbDunxcIDsKK+ajsz5rxJV8XCA7Civmo7I+cWl8XCA7Civmo6s+ecO5fFwgOwor5qOoPnHErXxcIDsKK+ajnT5nw7l8XCA7Civmo5w+ecO5fFwgOwor5qObPnnDuXxcIDsKK+ajmT5sw6x8XCA7Civmo48+dMOofFwgOwor5qOMPmFvfFwgOwor5qOKPnHDrXxcIDsKK+ajhD5xw6x8XCA7Civmo4M+bMOtfFwgOwor5qK4PmzDrXxcIDsKK+airj5qw7p8XCA7Civmoqk+bMOtfFwgOwor5qKePmrDrHxcIDsKK+aikT5kw618XCA7CivmopA+YsOsfFwgOwor5qKOPmFvfFwgOwor5qKMPnTDunxcIDsKK+aiij5kw6x8XCA7CivmooA+Y8O5fFwgOwor5qG8PnFpfFwgOwor5qG4PnhpfFwgOwor5qGyPmLDs3xcIDsKK+ahjz5qw7p8XCA7CivmoY0+a3V8XCA7CivmoYs+ecOtfFwgOwor5qGHPmFufFwgOwor5qC/PmbDunxcIDsKK+agtT5sw6x8XCA7CivmoLA+ZsOhfFwgOwor5qCuPsSVcnxcIDsKK+agrT7DqXJ8XCA7CivmoKc+ecOsfFwgOwor5qClPnppfFwgOwor5qCcPnPDuXxcIDsKK+agmz5sw6x8XCA7CivmoJg+ecStfFwgOwor5qCUPnHDrHxcIDsKK+afvj5jw6h8XCA7Civmn7Y+c8OsfFwgOwor5p+yPmLDrHxcIDsKK+afrT5ib3xcIDsKK+afqz5mw7p8XCA7Civmn6o+YW98XCA7Civmn6g+cHV8XCA7Civmn6c+Z3V8XCA7Civmn44+ZnV8XCA7Civmn4w+Y8OtfFwgOwor5p+HPmjDqXxcIDsKK+afhj5sYXxcIDsKK+afhT5uxK18XCA7Civmn4I+ecOtfFwgOwor5p+APmLErXxcIDsKK+aevT55w6h8XCA7Civmnrw+ecOofFwgOwor5p67PnnDrHxcIDsKK+aeuT5mdXxcIDsKK+aesj54xK18XCA7CivmnrE+ecOtfFwgOwor5p6WPmvDqHxcIDsKK+aekj55w6F8XCA7CivmnpE+aMO5fFwgOwor5p6OPmbDunxcIDsKK+aejT55w6x8XCA7Civmnog+YsOsfFwgOwor5p6GPmLErXxcIDsKK+aehT5qaXxcIDsKK+adqz5zw6x8XCA7Civmnak+bcOgfFwgOwor5p2nPm3Eg3xcIDsKK+adnT55w618XCA7CivmnZo+Z8WtfFwgOwor5p2ZPnnDrHxcIDsKK+adlT5kw6x8XCA7CivmnY0+esStfFwgOwor5p2HPnd1fFwgOwor5p2FPnnDunxcIDsKK+acvz5jw6x8XCA7CivmnLw+YsStfFwgOwor5py4PmzDrHxcIDsKK+acsz5iYXxcIDsKK+acnj5qaXxcIDsKK+ackj5ux5x8XCA7CivmnIc+cMOtfFwgOwor5pyCPnjDuXxcIDsKK+abtj5odXxcIDsKK+abpT5sw7p8XCA7Civmm54+bMOsfFwgOwor5puYPnLDunxcIDsKK+ablz55w6h8XCA7Civmm5Y+w6BpfFwgOwor5puQPmLDs3xcIDsKK+abjj55w6x8XCA7Civmm4Y+bMOsfFwgOwor5puFPnnDqHxcIDsKK+abhD55w6h8XCA7Civmm4E+asOsfFwgOwor5puAPnnDrHxcIDsKK+aavz54xK18XCA7CivmmrE+bsOsfFwgOwor5pqvPm3DsnxcIDsKK+aapj5sw6x8XCA7CivmmqM+ccOsfFwgOwor5pqhPmLDs3xcIDsKK+aajz5kxa18XCA7Civmmo0+aMOofFwgOwor5pqKPmbFrXxcIDsKK+aZuz7Eg258XCA7Civmmbk+ecOsfFwgOwor5pm1PnHErXxcIDsKK+aZsz54aXxcIDsKK+aZsj55xK18XCA7CivmmZ4+eGl8XCA7CivmmYc+eHV8XCA7CivmmLk+xINpfFwgOwor5pirPnjFrXxcIDsKK+aYqT5tw7J8XCA7CivmmJs+asO5fFwgOwor5piXPnrDqHxcIDsKK+aYkj5odXxcIDsKK+aYiD5ow7l8XCA7Civml7Q+eHV8XCA7Civml7M+ZMOsfFwgOwor5pejPmrDrHxcIDsKK+aXoT5qw6x8XCA7Civml58+ecO6fFwgOwor5peePm3Ds3xcIDsKK+aXkT55xK18XCA7Civml4k+ZnV8XCA7Civml4c+cGl8XCA7Civml4I+ccOtfFwgOwor5pa6Pnd1fFwgOwor5paqPnHDunxcIDsKK+aWnj55xa18XCA7CivmlpQ+ecWtfFwgOwor5paKPnHDrXxcIDsKK+aWiT5xw618XCA7CivmloQ+bMOsfFwgOwor5paDPmLDrHxcIDsKK+aWgT55w6x8XCA7Civmlbw+eMStfFwgOwor5pW6PnF1fFwgOwor5pW1PmTDrXxcIDsKK+aVsz7DoWl8XCA7CivmlbE+w6FpfFwgOwor5pWhPnnDrHxcIDsKK+aVmD54w7l8XCA7CivmlZQ+ecWtfFwgOwor5pWNPnjDuXxcIDsKK+aViz5nw6l8XCA7CivmlYc+Y8OofFwgOwor5pWEPnfDuXxcIDsKK+aVgD5iw7N8XCA7CivmlLo+ecStfFwgOwor5pS0PnB1fFwgOwor5pSzPnBvfFwgOwor5pSyPnFpfFwgOwor5pStPmzDrHxcIDsKK+aUpj5sw6x8XCA7CivmlKA+bcOtfFwgOwor5pSOPmzDunxcIDsKK+aUiz5sw6B8XCA7Civmk78+dMOsfFwgOwor5pO8PmzDrHxcIDsKK+aTtT5tw7N8XCA7Civmk7E+Z2V8XCA7Civmk64+asOtfFwgOwor5pOsPm7ErXxcIDsKK+aTqz55w6h8XCA7Civmk6k+csWtfFwgOwor5pOoPnnDqXxcIDsKK+aTpz5qxa18XCA7Civmk6A+asStfFwgOwor5pOfPm3DrXxcIDsKK+aTmz55w6h8XCA7Civmk5o+asO5fFwgOwor5pOZPsOgb3xcIDsKK+aTlj5nxJV8XCA7Civmk5U+eGl8XCA7Civmk4o+aml8XCA7Civmk4g+YsWtfFwgOwor5pOHPnrDqXxcIDsKK+aThD5sxa18XCA7Civmkrs+dMOgfFwgOwor5pKyPnB1fFwgOwor5pKrPmbFrXxcIDsKK+aSpT5ib3xcIDsKK+aSoD5qxK18XCA7Civmkpg+ZGF8XCA7Civmko4+ecOsfFwgOwor5pGuPsOhb3xcIDsKK+aRqD5tYXxcIDsKK+aRoj5ow7l8XCA7CivmkZ0+bMO5fFwgOwor5pGZPmzDrXxcIDsKK+aRlj5xw6x8XCA7CivmkZU+ZMOsfFwgOwor5pGLPnPDoHxcIDsKK+aRgD53xa18XCA7CivmkL8+Z8OpfFwgOwor5pC4PnjDrXxcIDsKK+aQsj53YXxcIDsKK+aQsD5ow7p8XCA7CivmkK4+Z8WtfFwgOwor5pCoPnTDoHxcIDsKK+aQmz5kYXxcIDsKK+aQmT5uw7l8XCA7CivmkJU+a8OofFwgOwor5o+sPnTDunxcIDsKK+aPpz5sw6B8XCA7Civmj6Y+bMOhfFwgOwor5o+lPnTDrHxcIDsKK+aPpD5kw6x8XCA7Civmj6I+a8OofFwgOwor5o+fPnh1fFwgOwor5o+KPnDDrHxcIDsKK+aOrT5ww6F8XCA7CivmjqY+dMOsfFwgOwor5o6cPnnErXxcIDsKK+aOlz55w6B8XCA7CivmjpE+ccOtfFwgOwor5o6OPmrErXxcIDsKK+aOiz5kxK18XCA7Civmjb8+eGl8XCA7Civmjb0+esO6fFwgOwor5o2sPmbFrXxcIDsKK+aNqj5qdXxcIDsKK+aNmT55w6x8XCA7CivmjZc+YsO5fFwgOwor5o2TPnnDqXxcIDsKK+aNiD50w7p8XCA7CivmjLY+asO6fFwgOwor5oyuPnTErXxcIDsKK+aMrD5iw7N8XCA7CivmjJw+ecOgfFwgOwor5oyZPmrFrXxcIDsKK+aMkD5uw6F8XCA7CivmjIw+Z8OpfFwgOwor5oyAPmLDsnxcIDsKK+aLuj5jw6h8XCA7Civmi6A+asO5fFwgOwor5ouePmTErXxcIDsKK+aLlT7DoG98XCA7Civmi48+bsOhfFwgOwor5oq+PnF1fFwgOwor5oq4PnphfFwgOwor5oq3PnBpfFwgOwor5oq0PnnDrHxcIDsKK+aKsz5uxK18XCA7CivmirI+aGV8XCA7Civmiq4+ecOofFwgOwor5oqqPnB1fFwgOwor5oqePnrDqXxcIDsKK+aKnT7Eg298XCA7Civmipw+YsOhfFwgOwor5oqZPmZ1fFwgOwor5oqQPm7DuXxcIDsKK+aKiD5iw6B8XCA7Civmioc+Z8WtfFwgOwor5oqFPmp1fFwgOwor5om7PnrDrHxcIDsKK+aJuD54aXxcIDsKK+aJtz7DoG98XCA7CivmibU+ecO6fFwgOwor5omxPnhpfFwgOwor5omkPnfDuXxcIDsKK+aJoj5nxa18XCA7CivmiZ0+a3V8XCA7CivmiZw+d3V8XCA7CivmiZU+ZsO6fFwgOwor5omQPmzDqHxcIDsKK+aJjz5wdXxcIDsKK+aJhj55xK18XCA7CivmiYU+ecOtfFwgOwor5oi7PmzDrHxcIDsKK+aIuD5ow7l8XCA7CivmiLY+aMO5fFwgOwor5oi1PnHDunxcIDsKK+aIsj54w6x8XCA7CivmiLE+eMOsfFwgOwor5oivPnjDrHxcIDsKK+aIqz55w7l8XCA7CivmiKg+Z2V8XCA7CivmiJM+Z2V8XCA7CivmiII+bcOtfFwgOwor5oe8PmrDuXxcIDsKK+aHuz5qw6x8XCA7Civmh68+ZnV8XCA7Civmh6o+YsOzfFwgOwor5oehPm3Fj3xcIDsKK+aHoD5xw618XCA7Civmh50+w6BpfFwgOwor5oeZPnnFrXxcIDsKK+aHkz7DoGl8XCA7Civmh44+c8OofFwgOwor5oeMPnnDrHxcIDsKK+aHhT5xw7p8XCA7CivmhrY+ecOsfFwgOwor5oa1PnBpfFwgOwor5oaxPmPDuXxcIDsKK+aGrj53xa18XCA7CivmhqE+Y8OofFwgOwor5oafPnPDuXxcIDsKK+aGmT54xK18XCA7Civmhpg+eMStfFwgOwor5oaIPnF1fFwgOwor5oW+PnnDuXxcIDsKK+aFvT5xaXxcIDsKK+aFvD5xaXxcIDsKK+aFuD5kw6x8XCA7Civmhao+w7J1fFwgOwor5oWgPsOgb3xcIDsKK+aFlD5tw7J8XCA7CivmhYk+eMO5fFwgOwor5oWEPmzDrHxcIDsKK+aEvT5iw7N8XCA7CivmhLU+bsOsfFwgOwor5oSzPmrDuXxcIDsKK+aEsj5nxa18XCA7CivmhLE+asOtfFwgOwor5oStPnHDrXxcIDsKK+aErD5zw7l8XCA7CivmhJs+w6BpfFwgOwor5oSZPmvDqHxcIDsKK+aEmD5rw6h8XCA7CivmhIo+YsOsfFwgOwor5oSFPmfDqXxcIDsKK+aDvz50w618XCA7Civmg7s+Y8OofFwgOwor5oOqPmTDqXxcIDsKK+aDnj53dXxcIDsKK+aDlj50w6x8XCA7Civmg5I+aMOpfFwgOwor5oOOPmrDrHxcIDsKK+aDhD5uw6x8XCA7Civmg4E+eGl8XCA7Civmgr0+cWl8XCA7Civmgrc+bMOsfFwgOwor5oKuPnfDuXxcIDsKK+aCpz5sw6x8XCA7CivmgqU+ecOsfFwgOwor5oKhPmzDrXxcIDsKK+aCnj53w7l8XCA7CivmgpU+eGl8XCA7CivmgpE+YsO5fFwgOwor5oKQPnTDrHxcIDsKK+aChz55w7l8XCA7CivmgoY+ecO5fFwgOwor5oKCPnBpfFwgOwor5oG0PmTDqXxcIDsKK+aBnj55w618XCA7CivmgZY+c2l8XCA7CivmgZM+eGl8XCA7CivmgYg+bcO6fFwgOwor5oGEPnjDrHxcIDsKK+aAuD54aXxcIDsKK+aAtz54aXxcIDsKK+aAtj5waXxcIDsKK+aAtD54w7l8XCA7CivmgK0+YsOsfFwgOwor5oCsPnjDrHxcIDsKK+aApD5mdXxcIDsKK+aAoj50w7p8XCA7CivmgJ8+ZMOsfFwgOwor5oCaPmrDuXxcIDsKK+aAmD5nw7l8XCA7CivmgIg+ecOsfFwgOwor5oCHPmrDuXxcIDsKK+W/rz5xw618XCA7Civlv6w+ecO5fFwgOwor5b+mPnnDqHxcIDsKK+W/pT54w6x8XCA7Civlv6M+asOtfFwgOwor5b+iPnfDuXxcIDsKK+W/mj54aXxcIDsKK+W/lD5xw6x8XCA7Civlv4c+bMOofFwgOwor5b+CPnHDunxcIDsKK+W+sz5kw6l8XCA7Civlvq8+eGl8XCA7Civlvqk+ZsO5fFwgOwor5b6bPnHDrHxcIDsKK+W+jT53YXxcIDsKK+W+hj54aXxcIDsKK+W9vz5mw7p8XCA7CivlvbY+asOtfFwgOwor5b2nPnnDuXxcIDsKK+W9nj55w618XCA7CivlvZw+ecOtfFwgOwor5b2bPnnDrXxcIDsKK+W9lD5sw7l8XCA7CivlvZE+asOsfFwgOwor5b2QPmrDrHxcIDsKK+W9jD5tw618XCA7CivlvYM+YsOsfFwgOwor5b2CPmZhfFwgOwor5by7PmLDrHxcIDsKK+W8rD55w618XCA7CivlvKQ+ZMStfFwgOwor5byjPmbFrXxcIDsKK+W8nT5iw6B8XCA7CivlvJk+d3V8XCA7CivlvJY+aMO5fFwgOwor5byQPsOocnxcIDsKK+W8jT7DqHJ8XCA7CivlvIw+eWl8XCA7CivlvIY+asWtfFwgOwor5bu5PnDDsnxcIDsKK+W7uD5kw618XCA7Civlu7I+bMOtfFwgOwor5busPmzDunxcIDsKK+W7pj5iw6x8XCA7Civlu6E+d8WtfFwgOwor5budPnNpfFwgOwor5bucPnR1fFwgOwor5buZPnnDrHxcIDsKK+W7mD5sw7l8XCA7Civlu4U+aMOpfFwgOwor5buBPmPDqHxcIDsKK+W6vT55w7l8XCA7Civlurw+Y8OofFwgOwor5bq0PmrDrXxcIDsKK+W6rz5ixK18XCA7Civluqs+a8O5fFwgOwor5bqpPnTDunxcIDsKK+W6oT55xK18XCA7Civlups+Y2l8XCA7Civlupg+eWF8XCA7Civluow+ecSDfFwgOwor5bqFPm3FjXxcIDsKK+W6gj56w6h8XCA7Civlub4+aml8XCA7CivluaY+bcOsfFwgOwor5bmjPmLDrHxcIDsKK+W5oD5odXxcIDsKK+W5mT5tw7l8XCA7CivluZg+esOpfFwgOwor5bmOPm3DrHxcIDsKK+W5hj55w6x8XCA7CivluYE+eHV8XCA7CivluL4+ZMWtfFwgOwor5bi6PnHDrXxcIDsKK+W4pD5yw7p8XCA7CivluKA+ecOsfFwgOwor5bifPnnDrHxcIDsKK+W4nj5tw7J8XCA7CivluJc+ZsO6fFwgOwor5biTPm3DoHxcIDsKK+W4jT5ow7l8XCA7CivluIo+cMOgfFwgOwor5biAPnphfFwgOwor5be/PmbDunxcIDsKK+W3iD5qw7p8XCA7Civlt4c+eGl8XCA7Civlt4E+bMOsfFwgOwor5ba8PnnFrXxcIDsKK+W2uz56w6F8XCA7CivltrQ+w6BvfFwgOwor5bazPmTDrHxcIDsKK+W2sj54aXxcIDsKK+W2sT5rxJV8XCA7Civltq8+asOtfFwgOwor5basPnnDrXxcIDsKK+W2qz55w6h8XCA7Civltqo+ecOofFwgOwor5banPnnDrHxcIDsKK+W2kz5ib3xcIDsKK+W2jz5iw7N8XCA7Civlto4+ecO5fFwgOwor5baNPnjDrXxcIDsKK+W2hz5xdXxcIDsKK+W2hT7DoW98XCA7CivltoA+dHV8XCA7Civltbo+ZMOsfFwgOwor5bW0PmrDrXxcIDsKK+W1sD5jaXxcIDsKK+W1qD53xa18XCA7CivltaY+w6FpfFwgOwor5bWhPmNpfFwgOwor5bWgPnhpfFwgOwor5bWePmppfFwgOwor5bWbPnnDunxcIDsKK+W1jj55w7p8XCA7CivltY0+aMOpfFwgOwor5bWGPmppfFwgOwor5bS6PnnErXxcIDsKK+W0uT50w618XCA7CivltLM+ecO6fFwgOwor5bSxPnrDqXxcIDsKK+W0qj56w7p8XCA7CivltKU+cMStfFwgOwor5bSVPnnDoXxcIDsKK+W0kz5nw7l8XCA7CivltJI+esO6fFwgOwor5bSMPmp1fFwgOwor5bSJPnTDoHxcIDsKK+Wzvz53w7p8XCA7Civls7k+dMO6fFwgOwor5bOyPmzErXxcIDsKK+WzrD5idXxcIDsKK+Wzqz55w6l8XCA7Civls6I+bMStfFwgOwor5bOcPmppfFwgOwor5bObPmzErXxcIDsKK+WzmD5odXxcIDsKK+Wzlj5hbnxcIDsKK+WzlD5txa18XCA7Civls5M+ecOtfFwgOwor5bOPPsSVcnxcIDsKK+Wzjj5hbnxcIDsKK+WzjT5sw7l8XCA7Civls4o+ZsO5fFwgOwor5bOHPmtlfFwgOwor5bOGPmhlfFwgOwor5bK2PnDDsnxcIDsKK+WytD5xdXxcIDsKK+WysD5iYXxcIDsKK+Wyqj5mw7p8XCA7Civlsqg+cXV8XCA7CivlsqY+asWtfFwgOwor5bKiPmvElXxcIDsKK+WyoD5qw7l8XCA7CivlspM+ccOtfFwgOwor5bKJPnfDuXxcIDsKK+WxvD53w7l8XCA7CivlsbU+eMO5fFwgOwor5bG0PmzDrHxcIDsKK+WxsD5sw6h8XCA7Civlsa0+eMOsfFwgOwor5bGoPmrDuXxcIDsKK+WxnD50w6x8XCA7CivlsZY+eGl8XCA7CivlsZQ+bsOtfFwgOwor5bGTPnjDrHxcIDsKK+WxhD5iaXxcIDsKK+Wxgz54w6x8XCA7CivlsLM+Z8WtfFwgOwor5bCcPmfDoXxcIDsKK+Wwkz7ElXJ8XCA7CivlsJI+xJVyfFwgOwor5bCQPmppfFwgOwor5bCDPmZ1fFwgOwor5bCAPnDFj3xcIDsKK+WvvT5sx5x8XCA7Civlr7I+ecOtfFwgOwor5a+xPnnDrHxcIDsKK+Wvoz5odXxcIDsKK+WvoD5qw7l8XCA7Civlr5k+ecWtfFwgOwor5a67Pm3DrHxcIDsKK+Wupz55w618XCA7CivlrpA+ecOtfFwgOwor5a6KPnTDunxcIDsKK+WtuT5iw7J8XCA7Civlrbc+bMOtfFwgOwor5a22PnppfFwgOwor5a20Pm7ErXxcIDsKK+Wtsj55YXxcIDsKK+WtoD5zw6x8XCA7CivlrZY+eml8XCA7CivlrYs+bMOtfFwgOwor5a2KPm3ErXxcIDsKK+Wsuz5kw7p8XCA7CivlrLo+bsOsfFwgOwor5aysPnh1fFwgOwor5aypPnnDunxcIDsKK+WsqD5jw618XCA7CivlrKQ+bWF8XCA7CivlrKE+w6BpfFwgOwor5ayfPnnDrHxcIDsKK+WslD5mw7l8XCA7CivlrJE+ecOsfFwgOwor5ayGPnhpfFwgOwor5ayEPnlpfFwgOwor5ayDPnh1fFwgOwor5au8Pm3DsnxcIDsKK+WrtT53xa18XCA7Civlq7Q+Z3V8XCA7Civlq68+w6BvfFwgOwor5auuPmjDuXxcIDsKK+WrrT5ow7l8XCA7Civlq6c+Y8OofFwgOwor5aufPm7DrHxcIDsKK+Wrmz55aXxcIDsKK+Wrlz55w7l8XCA7Civlq5U+ecOsfFwgOwor5auTPnDDrHxcIDsKK+Wrij5zw7l8XCA7Civlqr0+bWF8XCA7Civlqrw+xINvfFwgOwor5aq3PnLDuXxcIDsKK+WqrT54dXxcIDsKK+WqqT5ow7p8XCA7Civlqqc+d2F8XCA7CivlqqQ+c2l8XCA7Civlqp4+dMOtfFwgOwor5aqcPmTDrHxcIDsKK+WqlT5hbnxcIDsKK+WqkD54aXxcIDsKK+WqjT5mw7l8XCA7Civlqok+d3V8XCA7CivlqoI+dMOtfFwgOwor5aqAPnnDunxcIDsKK+Wprz5sw6x8XCA7Civlqa4+anV8XCA7Civlqa0+ecOgfFwgOwor5ammPmbDuXxcIDsKK+WpoD53w6B8XCA7CivlqZ8+aMO5fFwgOwor5amXPm7DrXxcIDsKK+Wpjz5mw7l8XCA7CivlqY0+ccStfFwgOwor5amFPmrDunxcIDsKK+Wovj7Eg2l8XCA7CivlqL0+bMO5fFwgOwor5ai4PnHDrXxcIDsKK+WotT5qdXxcIDsKK+WosD5zw6x8XCA7CivlqK8+ecO6fFwgOwor5aiuPnfFj3xcIDsKK+WorT54aXxcIDsKK+WorD53xa18XCA7CivlqKo+YWl8XCA7CivlqJs+ecO6fFwgOwor5aiUPmvDqHxcIDsKK+Wokj53xa18XCA7CivlqJA+ZnV8XCA7Civlp6s+aml8XCA7Civlp54+asOtfFwgOwor5aeWPmrDuXxcIDsKK+WniT56xK18XCA7Civlp4c+ZnV8XCA7Civlp4I+ZsOhfFwgOwor5aeBPnjFrXxcIDsKK+WngD5ow6l8XCA7Civlprw+YsOsfFwgOwor5aa6Pm3DsnxcIDsKK+WmtD5xw6x8XCA7CivlprA+bsStfFwgOwor5aatPmLDoXxcIDsKK+WmrD5kw7l8XCA7CivlpqA+bsOgfFwgOwor5aaRPnBhfFwgOwor5aaLPmZ1fFwgOwor5aaAPmrErXxcIDsKK+WlsD5iw6x8XCA7Civlpac+w6BvfFwgOwor5aWmPnfDuXxcIDsKK+WloT7DoG98XCA7CivlpZs+aMSDfFwgOwor5aWFPmppfFwgOwor5aWDPmTDrHxcIDsKK+WlgD5lbnxcIDsKK+Wkvz5iYXxcIDsKK+Wktj5ixK18XCA7CivlpKg+ZsO6fFwgOwor5aShPnHDrHxcIDsKK+WkkD54w6x8XCA7CivlpIU+ZsO5fFwgOwor5aSDPmd1fFwgOwor5aSBPnlpfFwgOwor5aO7PnjDuXxcIDsKK+Wjuj5ow7p8XCA7Civlo7c+aMO6fFwgOwor5aO0PnnDrHxcIDsKK+WjsT55aXxcIDsKK+WjqT5iw6B8XCA7Civlo6I+bMOsfFwgOwor5aOaPmzDunxcIDsKK+Wjkz55YXxcIDsKK+Wjkj7DoGl8XCA7Civlo4k+asO5fFwgOwor5aOGPmLDs3xcIDsKK+WjhD55xJV8XCA7Civlo4A+cMOtfFwgOwor5aK/PnnDrHxcIDsKK+WivD5qaXxcIDsKK+Wiuj7DoG98XCA7Civlorc+w6BvfFwgOwor5aK2PmRhfFwgOwor5aKyPnfFrXxcIDsKK+WisD5kxIF8XCA7Civloqw+ZMSTfFwgOwor5aKjPnB1fFwgOwor5aKiPmLDoXxcIDsKK+WimD5xw618XCA7CivlopY+dMSDfFwgOwor5aKRPmRpfFwgOwor5aKPPmJvfFwgOwor5aKNPnjDrHxcIDsKK+Wihj5kw6x8XCA7CivlooQ+cWl8XCA7Civlobg+xY91fFwgOwor5aG3PmzFrXxcIDsKK+Whtj5jw7l8XCA7CivlobM+b3V8XCA7Civloac+w6BpfFwgOwor5aGiPnfDuXxcIDsKK+Whnz53w7l8XCA7CivloZs+bMOsfFwgOwor5aGXPnTDunxcIDsKK+Whkz5tw6x8XCA7CivloZA+c8O5fFwgOwor5aGJPmrDrXxcIDsKK+WhiD5qw6x8XCA7CivloLI+asOtfFwgOwor5aCsPnnDunxcIDsKK+WgpT7DoGl8XCA7CivloKM+ecO6fFwgOwor5aCbPmLDrHxcIDsKK+Wglz50dXxcIDsKK+Wglj5ixa18XCA7CivloJM+w6BufFwgOwor5aCQPnnDoXxcIDsKK+WgjD5nw7l8XCA7CivloIk+ecO5fFwgOwor5aCEPm7DrHxcIDsKK+WggT5rw6h8XCA7Civln78+bsOtfFwgOwor5Z+8PnHDrXxcIDsKK+Wftj55w6x8XCA7Civln6c+asO5fFwgOwor5Z+ePmTErXxcIDsKK+WfnD55xJV8XCA7Civln5c+YsO5fFwgOwor5Z+KPmTDrHxcIDsKK+Wevz54w7l8XCA7Civlnrw+ecOsfFwgOwor5Z67PmLDoHxcIDsKK+WetT7Eg258XCA7Civlnpg+ZsO6fFwgOwor5Z6QPmPDrXxcIDsKK+Wejz5sw7l8XCA7Civlno4+a8OofFwgOwor5Z6NPmrDrHxcIDsKK+Wehz7DoG98XCA7CivlnoA+aHV8XCA7Civlnb8+ZsO5fFwgOwor5Z26PmLDoXxcIDsKK+WduD5ib3xcIDsKK+Wdtj5tw7l8XCA7CivlnbQ+a2V8XCA7CivlnbI+ZsOzfFwgOwor5Z2uPmFvfFwgOwor5Z2lPnF1fFwgOwor5Z2jPm7DrHxcIDsKK+WdnD5sw6x8XCA7CivlnZg+ZMStfFwgOwor5Z2WPmrDrHxcIDsKK+WdlD5kw6x8XCA7CivlnZI+YsOsfFwgOwor5Zy9Pm3DsnxcIDsKK+WcvD5qaXxcIDsKK+Wcqz55w7l8XCA7CivlnKc+eWF8XCA7CivlnKU+bMO5fFwgOwor5ZykPnDDunxcIDsKK+WcoT50xa18XCA7CivlnKA+ecOgfFwgOwor5ZybPnnDrHxcIDsKK+Wclz50w7p8XCA7CivlnJY+dMO6fFwgOwor5ZyVPnTDunxcIDsKK+WckT5mw7l8XCA7CivlnJA+a3V8XCA7Civlm7g+csOsfFwgOwor5ZuQPnrDoXxcIDsKK+WbjT54xK18XCA7Civlm4w+c3V8XCA7Civlm4g+ecOsfFwgOwor5ZuHPmzDrHxcIDsKK+WbhD5sw618XCA7Civlm4M+Y8OgfFwgOwor5Zq6PnTDoHxcIDsKK+WauT5sYXxcIDsKK+Wasz5rw7l8XCA7CivlmrE+eMOsfFwgOwor5ZqwPm3Ds3xcIDsKK+WarT5wxK18XCA7Civlmqk+ZsO6fFwgOwor5ZqnPmzDunxcIDsKK+Wapj5sw6x8XCA7CivlmqQ+bcOzfFwgOwor5ZqiPsOhb3xcIDsKK+Wanz5sw618XCA7Civlmpw+bcOyfFwgOwor5ZqbPmjDuXxcIDsKK+Walz5iw7N8XCA7CivlmpU+bHV8XCA7CivlmpQ+dMOsfFwgOwor5ZqMPmrDrHxcIDsKK+Waij54w6x8XCA7Civlmog+bcSBfFwgOwor5ZqDPnTDoHxcIDsKK+WagT5kw618XCA7Civlmb0+cMStfFwgOwor5ZmzPnnFrXxcIDsKK+WZrz7Eg2l8XCA7Civlmac+YWl8XCA7CivlmaA+ZGF8XCA7CivlmZ0+c2l8XCA7CivlmZM+eHV8XCA7CivlmZA+ccOsfFwgOwor5ZmPPnhpfFwgOwor5ZmKPnnDuXxcIDsKK+WZiD5jw7l8XCA7CivlmLg+ZsWtfFwgOwor5ZiwPmppfFwgOwor5ZiiPnnElXxcIDsKK+WYoD5nYXxcIDsKK+WYnT5ow7p8XCA7CivlmJw+Z8SDfFwgOwor5ZiaPmTDqXxcIDsKK+WYmT5ww7N8XCA7CivlmJY+esOpfFwgOwor5ZiUPsWPdXxcIDsKK+WYkT5odXxcIDsKK+WYij7DoWl8XCA7Civll7w+bcOyfFwgOwor5Ze4PsOhb3xcIDsKK+WXtj5iw6x8XCA7Civll7E+bsOhfFwgOwor5ZewPmFpfFwgOwor5ZeiPnfDoHxcIDsKK+WXnj56aXxcIDsKK+WXmj53dXxcIDsKK+WXmD5qaXxcIDsKK+WXlz53YXxcIDsKK+WXjj5txIN8XCA7Civll4s+w6BpfFwgOwor5ZeHPnPDqHxcIDsKK+WXgz5ow6h8XCA7Civll4E+dMOtfFwgOwor5Za+PmvDuXxcIDsKK+WWuj54w6x8XCA7CivllrI+ecWNfFwgOwor5ZapPnnDuXxcIDsKK+WWpT5kw7l8XCA7CivllqM+eMWtfFwgOwor5ZaePmppfFwgOwor5ZaWPmjDunxcIDsKK+WWlT5ow6l8XCA7CivlloU+ecO5fFwgOwor5ZW9PsOhbnxcIDsKK+WVsj5kw6x8XCA7CivllZ8+ccStfFwgOwor5ZWePnlhfFwgOwor5ZWdPmjDqXxcIDsKK+WVmj5ixK18XCA7CivllZk+dMO6fFwgOwor5ZWYPnnDqHxcIDsKK+WVlD5xxK18XCA7CivllZM+ccStfFwgOwor5ZWSPmh1fFwgOwor5ZWOPnfFrXxcIDsKK+WVhz5kw618XCA7CivllYA+w6FpfFwgOwor5ZS9PnhpfFwgOwor5ZS5Pnl1fFwgOwor5ZS1PsSDbnxcIDsKK+WUsj7DqXJ8XCA7CivllK0+cWl8XCA7CivllKg+esWtfFwgOwor5ZSbPm3DoHxcIDsKK+WUmT5kw618XCA7CivllJg+ccStfFwgOwor5ZSWPnnEg3xcIDsKK+WUjj5sw6x8XCA7CivllIg+ecOsfFwgOwor5ZSDPmfFrXxcIDsKK+WUgj5nxa18XCA7Civlk7c+bMOofFwgOwor5ZO1PmJhfFwgOwor5ZOxPmJvfFwgOwor5ZOsPmjDqXxcIDsKK+WTiz5kw6x8XCA7Civlk4o+ecO5fFwgOwor5ZKhPsOocnxcIDsKK+WSoD5xw6x8XCA7Civlkpg+YsO5fFwgOwor5ZKTPnfEg3xcIDsKK+WSij5ow6l8XCA7Civlkog+ZsO6fFwgOwor5ZKHPmLDrHxcIDsKK+WRvz5xdXxcIDsKK+WRvj5kw6F8XCA7Civlkbk+ecOsfFwgOwor5ZG0Pnh1fFwgOwor5ZGwPnrErXxcIDsKK+WRrj5xw6x8XCA7Civlka0+ecOsfFwgOwor5ZGnPmTErXxcIDsKK+WRnz5uxJN8XCA7CivlkZE+xY91fFwgOwor5ZGJPnfDunxcIDsKK+WRhz5uw6B8XCA7CivlkYQ+Z8OpfFwgOwor5ZC2Pm7DoHxcIDsKK+WQsz53w7p8XCA7CivlkKU+YsO5fFwgOwor5ZCaPnlpfFwgOwor5ZCYPsWPdXxcIDsKK+WQlD5tw6F8XCA7CivlkIc+esStfFwgOwor5Y+7PmzDqHxcIDsKK+WPkj5sw6x8XCA7Civlj5A+YsOhfFwgOwor5Y+OPmJvfFwgOwor5Y+GPsOgaXxcIDsKK+WOvj5kdXxcIDsKK+WOuj5xw7l8XCA7CivljrI+bMOsfFwgOwor5Y6vPmzDrHxcIDsKK+WOqz7DoW98XCA7CivljqQ+bMOsfFwgOwor5Y6gPmPDqHxcIDsKK+WOlz50w618XCA7CivljpM+ecOhfFwgOwor5Y6SPmjDqXxcIDsKK+WOij55xIN8XCA7CivljoM+w6BufFwgOwor5Y6APnhpfFwgOwor5Y29PmrDrXxcIDsKK+WNvD53w7l8XCA7Civljbk+eMO5fFwgOwor5Y2lPnhpfFwgOwor5Y2ZPmrDrXxcIDsKK+WNjD54w6x8XCA7CivljYY+esO6fFwgOwor5Y2APm91fFwgOwor5Yy9Pm91fFwgOwor5Yy8PsSDbnxcIDsKK+WMuD54xK18XCA7CivljLc+ccO6fFwgOwor5Yy1PmTDunxcIDsKK+WMqz5odXxcIDsKK+WMpD5xdXxcIDsKK+WMoj5odXxcIDsKK+WMnD55w618XCA7CivljJI+ZMOhfFwgOwor5YyOPsOgbnxcIDsKK+WMjD5nw6l8XCA7CivljIo+asO6fFwgOwor5Yu1PmzDrHxcIDsKK+WLtD5sx5x8XCA7Civli64+asO5fFwgOwor5YupPnnDrHxcIDsKK+WLoz5qaXxcIDsKK+WLoD5sw7l8XCA7Civli5o+ecOsfFwgOwor5YuZPnfDuXxcIDsKK+WLlz54w7l8XCA7Civli44+bMO5fFwgOwor5YuKPmvDqHxcIDsKK+WLgD5rw6h8XCA7Civlirg+d2F8XCA7Civliq4+ecOsfFwgOwor5YqcPnlhfFwgOwor5YqZPmzDrXxcIDsKK+WKmD5tw7N8XCA7CivlipE+asOsfFwgOwor5YqHPmrDuXxcIDsKK+WKhT5wxK18XCA7Civlibo+bMOtfFwgOwor5YmkPmrDrHxcIDsKK+WJnj5qaXxcIDsKK+WJnT5ib3xcIDsKK+WJmj56w6x8XCA7CivliZg+ccOtfFwgOwor5YmTPmzDrXxcIDsKK+WJiz5rw6h8XCA7CivliYc+esOpfFwgOwor5Yi+PmPDrHxcIDsKK+WItT7DqHJ8XCA7CivliJ8+anV8XCA7CivliJ4+ccO5fFwgOwor5YicPmbDunxcIDsKK+WIlT5sw618XCA7CivliI8+aml8XCA7CivliIk+aml8XCA7Civlh6U+anV8XCA7Civlh58+ZMO6fFwgOwor5YeePnhpfFwgOwor5YeYPnNpfFwgOwor5YeTPmzDrHxcIDsKK+WHkj55w618XCA7Civlh4U+Z8O5fFwgOwor5YeDPnTDunxcIDsKK+WGuT5mw7p8XCA7CivlhrQ+aMO5fFwgOwor5YaxPmjDuXxcIDsKK+WGqj5tw6x8XCA7Civlhqg+ZsO5fFwgOwor5YajPmrDuXxcIDsKK+WGnj5tw618XCA7Civlhp0+ecOtfFwgOwor5YaWPm3DrHxcIDsKK+WGlD54xa18XCA7Civlhoo+Y8OofFwgOwor5YW/PnnDrHxcIDsKK+WFvj5qw6x8XCA7CivlhaM+bMStfFwgOwor5YWTPmvDqHxcIDsKK+WFkj7DqXJ8XCA7CivlhZA+w6lyfFwgOwor5YWOPnTDuXxcIDsKK+WEtz5sw6x8XCA7CivlhK4+bMOsfFwgOwor5YSpPnPDrHxcIDsKK+WEpT5kw7p8XCA7CivlhJ4+bsStfFwgOwor5YSbPnfFrXxcIDsKK+WElz5uxK18XCA7CivlhJE+w6BufFwgOwor5YSEPnnDrHxcIDsKK+WEgD55w618XCA7Civlg74+w6BpfFwgOwor5YO3PnnDqHxcIDsKK+WDsT5nw7l8XCA7Civlg7A+YsOzfFwgOwor5YOfPmppfFwgOwor5YObPnFpfFwgOwor5YOVPnDDunxcIDsKK+WDhz5sw7l8XCA7Civlg4E+eGl8XCA7Civlg4A+ZMOsfFwgOwor5YK0PnnFrXxcIDsKK+WCoD5mYXxcIDsKK+WCkj54aXxcIDsKK+WCjD5tw6B8XCA7Civlgok+csO5fFwgOwor5YKDPnPDuXxcIDsKK+WCgT5mdXxcIDsKK+WBuj56w6F8XCA7CivlgbQ+Y8OofFwgOwor5YGyPnNpfFwgOwor5YGvPnnErXxcIDsKK+WBrj5qw618XCA7Civlgao+Yml8XCA7Civlgak+ZsO5fFwgOwor5YGoPmNpfFwgOwor5YGmPnh1fFwgOwor5YGePnnDqHxcIDsKK+WBmT5kw6x8XCA7CivlgY0+dMOtfFwgOwor5YGKPnnFrXxcIDsKK+WAuz55ZXxcIDsKK+WAtj5qw7l8XCA7CivlgLU+d8WtfFwgOwor5YCzPnrDrHxcIDsKK+WAmz5xaXxcIDsKK+WAiz5nw6h8XCA7Civkv7w+ecO5fFwgOwor5L+5PnnDoHxcIDsKK+S/sD5ow6h8XCA7Civkv6Q+dMOsfFwgOwor5L+ZPnhpfFwgOwor5L+MPmbFrXxcIDsKK+S/iz55w6x8XCA7Civkv4k+d8O5fFwgOwor5L+IPmvDuXxcIDsKK+S/hj54w7p8XCA7Civkv4I+eMOsfFwgOwor5L+BPnnFrXxcIDsKK+S+vD5iw7N8XCA7Civkvrc+asO6fFwgOwor5L6ePnLFrXxcIDsKK+S+lT7DqXJ8XCA7CivkvpM+bMO5fFwgOwor5L6SPmFufFwgOwor5L6QPnjDuXxcIDsKK+S+jj5txK18XCA7Civkvb0+Y8OsfFwgOwor5L20PsOocnxcIDsKK+S9sT5mxIN8XCA7Civkva4+Z8OpfFwgOwor5L2rPmjDqHxcIDsKK+S9pz5rxIN8XCA7CivkvaI+ccO6fFwgOwor5L2WPmLDrHxcIDsKK+S9jD5jxK18XCA7CivkvYo+YsStfFwgOwor5L2JPnF1fFwgOwor5L2IPmLDuXxcIDsKK+S9gT7Eg2l8XCA7CivkvYA+c8OsfFwgOwor5Ly/PnnDrHxcIDsKK+S8vj5waXxcIDsKK+S8uT5xdXxcIDsKK+S8tT5jw6x8XCA7CivkvLE+bsStfFwgOwor5LyuPm7DunxcIDsKK+S8lT5mdXxcIDsKK+S8jD7DoGl8XCA7CivkvIs+asOtfFwgOwor5LyHPnnDrHxcIDsKK+S8gz55w7p8XCA7Civku74+ZGl8XCA7Civku7E+cMOtfFwgOwor5LurPm3DuXxcIDsKK+S7oj5kw618XCA7Civku48+ZsOzfFwgOwor5LuIPmJhfFwgOwor5LuCPmzDqHxcIDsKK+S6vD5qw618XCA7CivkurE+ecOofFwgOwor5LqePnnDoHxcIDsKK+S6nT5xw618XCA7Civkupw+ecOgfFwgOwor5LqWPnPDrHxcIDsKK+S6kz5xw618XCA7CivkuoQ+ecOsfFwgOwor5Lm4Pm7Eg3xcIDsKK+S5tj5mxa18XCA7CivkuZU+aMWtfFwgOwor5LmCPsOgaXxcIDsKK+S5gT55w618XCA7CivkuYA+ZsO6fFwgOwor5LioPmfElXxcIDsKK+S4jD5qaXxcIDsKK+S2qT5qw6x8XCA7CivktqY+esOpfFwgOwor5LalPmrFrXxcIDsKK+S2oz7DoWl8XCA7Civktp4+ccOtfFwgOwor5LacPmfDuXxcIDsKK+S2mz5sw6B8XCA7Civktpo+ccWtfFwgOwor5LaZPmrDuXxcIDsKK+S2mD5sw6x8XCA7Civktpc+a8OofFwgOwor5LaVPnDDoXxcIDsKK+S2kz5qw6x8XCA7CivktpI+ccOtfFwgOwor5LaRPnTDrHxcIDsKK+S2jz50xK18XCA7Civkto0+ZMOsfFwgOwor5LaIPmLDs3xcIDsKK+S2hT5ow6l8XCA7CivktoE+dMOgfFwgOwor5LaAPnTDoHxcIDsKK+S1vj5mw7p8XCA7Civktb0+Y8OgfFwgOwor5LW7PmfFrXxcIDsKK+S1tj5xw7p8XCA7CivktbE+aMOofFwgOwor5LWsPnTDoHxcIDsKK+S1qz55w7l8XCA7Civktak+bMOtfFwgOwor5LWjPmTDoXxcIDsKK+S1oD5kw618XCA7CivktZ0+ecOgfFwgOwor5LWXPmbDunxcIDsKK+S1lT5qw7l8XCA7CivktZM+bMOtfFwgOwor5LWSPm7DrHxcIDsKK+S1kT5uw6x8XCA7CivktYU+w6FvfFwgOwor5LWEPmLDrXxcIDsKK+S0uz5sw618XCA7CivktLo+YsO5fFwgOwor5LSzPmjDqHxcIDsKK+S0sj5tw7J8XCA7CivktKw+ecOsfFwgOwor5LSqPmzDuXxcIDsKK+S0oj5tw618XCA7CivktKE+bMOsfFwgOwor5LSePmTDrXxcIDsKK+S0nT5iw7l8XCA7CivktJk+cMOsfFwgOwor5LSXPmrDunxcIDsKK+S0ij55w618XCA7CivktIg+xIN1fFwgOwor5LSGPnDDunxcIDsKK+S0hD5sw6x8XCA7CivktIE+ecO5fFwgOwor5LO9PmjDqHxcIDsKK+SzuD5tw6F8XCA7Civks7Q+ZMOhfFwgOwor5LOzPnjDuXxcIDsKK+SzsT53w7l8XCA7Civks64+bcOyfFwgOwor5LOtPmrDrXxcIDsKK+Szoj5xw618XCA7Civks50+YsO5fFwgOwor5LOcPnTDunxcIDsKK+Szmj5ow6l8XCA7Civks5A+Y8OsfFwgOwor5LOKPmLDoXxcIDsKK+Szhz53xa18XCA7Civks4Q+Y8OtfFwgOwor5LOBPmLDoXxcIDsKK+Syvz5jw618XCA7CivksrU+aMO5fFwgOwor5LKvPmrDrXxcIDsKK+SyrD5xw618XCA7Civksqo+eMOsfFwgOwor5LKnPmTDuXxcIDsKK+Syoz55w7p8XCA7Civksp4+bMOsfFwgOwor5LKcPnnDqHxcIDsKK+SylT5wxa18XCA7CivkspE+ecOtfFwgOwor5LKQPmzFrXxcIDsKK+SxuT5uw6B8XCA7Civksbc+ecO6fFwgOwor5LGxPmTDrHxcIDsKK+Sxrz5tw7p8XCA7Civksas+bMOgfFwgOwor5LGjPnrDunxcIDsKK+SxoT5qw7p8XCA7CivksZ8+asO5fFwgOwor5LGdPmLDoHxcIDsKK+Sxmz54w7l8XCA7CivksZo+bMO5fFwgOwor5LGYPmzDrXxcIDsKK+Sxkj55w6x8XCA7CivksYw+ecOtfFwgOwor5LGKPm3ErXxcIDsKK+SxiD5xw618XCA7CivksYU+bcOyfFwgOwor5LGDPmTErXxcIDsKK+Swvj5iw6B8XCA7CivksLs+ecO6fFwgOwor5LC5PnrDqXxcIDsKK+SwtD5xw6x8XCA7CivksLI+ecOgfFwgOwor5LCwPnLDunxcIDsKK+Swrz5uxK18XCA7CivksKw+asO6fFwgOwor5LCmPnDErXxcIDsKK+SwnD5sw6x8XCA7CivksJs+bMOsfFwgOwor5LCZPnnErXxcIDsKK+SwlT5sw7p8XCA7CivksI8+asOsfFwgOwor5LCNPmPDrHxcIDsKK+Swij5iw7N8XCA7CivksIc+ccOtfFwgOwor5LCAPnfFj3xcIDsKK+Svvz56w7p8XCA7Civkr70+ZsWtfFwgOwor5K+8PmTDrXxcIDsKK+SvuD5jw6x8XCA7Civkr7I+cMOhfFwgOwor5K+xPmbDuXxcIDsKK+Svpj5tw6B8XCA7Civkr6U+w6BufFwgOwor5K+iPm3Ds3xcIDsKK+SvoD7Eg298XCA7Civkr5w+dMOsfFwgOwor5K+aPsWPdXxcIDsKK+SvmT5ww7J8XCA7Civkr5c+YsOsfFwgOwor5K+LPmLDs3xcIDsKK+SviT55w6B8XCA7Civkr4Y+ecOsfFwgOwor5K+CPmrDrXxcIDsKK+Suuj5qw6x8XCA7Civkrrg+aMO6fFwgOwor5K63PmTDunxcIDsKK+Surz7DoG98XCA7Civkrq0+bcOsfFwgOwor5K6sPm3DsnxcIDsKK+SuqT5nw7p8XCA7CivkrqU+bMOsfFwgOwor5K6kPmTDrXxcIDsKK+SuoT5iw6x8XCA7Civkrps+ZsO5fFwgOwor5K6ZPnnDuXxcIDsKK+SumD7DqXJ8XCA7Civkrpc+w6BufFwgOwor5K6PPnfDunxcIDsKK+Sujj54w6x8XCA7Civkros+bMOsfFwgOwor5K6KPnnDrXxcIDsKK+SuiT5sw7p8XCA7Civkroc+ecO5fFwgOwor5K6CPmLDs3xcIDsKK+SugD5iw7N8XCA7Civkrb8+ecOsfFwgOwor5K28PnHDrXxcIDsKK+StuD5mw7l8XCA7CivkrbY+ccOtfFwgOwor5K2yPm7ErXxcIDsKK+Strz5iw7N8XCA7Civkra4+YsOsfFwgOwor5K2sPnHErXxcIDsKK+Stqz5xxK18XCA7Civkrak+bcOsfFwgOwor5K2nPm3ErXxcIDsKK+Stpj5iw7N8XCA7CivkraM+Y8OtfFwgOwor5K2hPsOobnxcIDsKK+Stnz55w6h8XCA7CivkrZ4+ecOsfFwgOwor5K2TPsOobnxcIDsKK+StjT5ow7p8XCA7CivkrYw+aMO6fFwgOwor5K2HPnnDrHxcIDsKK+Sthj5uw6h8XCA7CivkrYU+aMO6fFwgOwor5K2CPnnDrHxcIDsKK+Ssvj50w618XCA7CivkrLY+w6hufFwgOwor5Ky1PsOgaXxcIDsKK+SstD5tw7J8XCA7CivkrK4+ecOtfFwgOwor5KyqPmLDs3xcIDsKK+SsqD5jw7l8XCA7CivkrKU+ecOsfFwgOwor5KyjPnHDrHxcIDsKK+Ssmz5iw6x8XCA7CivkrJQ+eMO5fFwgOwor5KyTPsOgbnxcIDsKK+Ssjz5iw7l8XCA7CivkrIY+bMOsfFwgOwor5KyFPmzDrHxcIDsKK+SshD55w7l8XCA7CivkrIM+c8OgfFwgOwor5KyBPnnDrXxcIDsKK+Srvj5iw6x8XCA7Civkq7M+ZMO6fFwgOwor5KuxPm7DoXxcIDsKK+SrqD7DoG98XCA7Civkq6Y+Z8OpfFwgOwor5KujPnjDrXxcIDsKK+SrnT5mxa18XCA7Civkq5g+aMOpfFwgOwor5KuUPnHDrHxcIDsKK+Srkz53w7p8XCA7Civkq40+ZsWtfFwgOwor5KuMPnDErXxcIDsKK+Srij5iw7N8XCA7Civkq4E+YsOsfFwgOwor5Kq+Pm3DrXxcIDsKK+Squj5nw6l8XCA7CivkqrU+ecSDfFwgOwor5KqsPmLDs3xcIDsKK+Sqnj56w6F8XCA7Civkqp0+aMO5fFwgOwor5KqaPmjDqHxcIDsKK+SqmT5mw7p8XCA7CivkqpY+cMOyfFwgOwor5KqVPmrDunxcIDsKK+SqlD5ixa18XCA7CivkqpA+YsOsfFwgOwor5KqPPm7DoHxcIDsKK+SqiT5sw6B8XCA7Civkqoc+YsOzfFwgOwor5KqGPnTErXxcIDsKK+SqhT5kw7p8XCA7CivkqoI+Z8OpfFwgOwor5KqBPmLFrXxcIDsKK+Spuz5iw6B8XCA7CivkqbQ+aMO6fFwgOwor5KmvPmrDrXxcIDsKK+Sprj5sw7l8XCA7CivkqaQ+eMOsfFwgOwor5KmiPmTDoXxcIDsKK+Spnz55w618XCA7CivkqZs+YsOsfFwgOwor5KmaPmTDrHxcIDsKK+SpmD5kw6x8XCA7CivkqZc+YsOgfFwgOwor5KmTPnHDrXxcIDsKK+Spkj55w7p8XCA7CivkqZA+Z8OpfFwgOwor5KmLPm3Fj3xcIDsKK+SpiT5mxa18XCA7CivkqLw+aMO5fFwgOwor5KizPnjDrHxcIDsKK+SosT5mw7l8XCA7CivkqLA+cMOyfFwgOwor5KilPmjDuXxcIDsKK+SopD5kw618XCA7CivkqKM+Z8OpfFwgOwor5KigPsSDaXxcIDsKK+Sonj55xa18XCA7CivkqJs+c8OofFwgOwor5KiXPmbDunxcIDsKK+Solj5qw6x8XCA7CivkqJI+ecO5fFwgOwor5KiRPnTDrXxcIDsKK+Sojz5jw618XCA7CivkqIY+YsOtfFwgOwor5KiAPmTDrXxcIDsKK+SnvD5ow7p8XCA7Civkp7U+ccOtfFwgOwor5KezPmPDrXxcIDsKK+SnqD55w6h8XCA7Civkp6c+ecStfFwgOwor5KekPnDDunxcIDsKK+Snnj5mw7l8XCA7Civkp50+ZMOsfFwgOwor5KeYPnHDrXxcIDsKK+Snlz5iw6x8XCA7Civkp5Q+bcO5fFwgOwor5KeNPnjDrHxcIDsKK+SniT5sxK18XCA7Civkp4c+bsStfFwgOwor5KeFPnTDrHxcIDsKK+SnhD5nw6h8XCA7Civkpr0+eMO5fFwgOwor5Ka7PmPDrHxcIDsKK+SmtT5uxK18XCA7CivkprQ+ecOsfFwgOwor5KaqPnnDoHxcIDsKK+Smoz5mw7l8XCA7Civkppw+d8O6fFwgOwor5KaZPnPDrHxcIDsKK+SmmD5iw6x8XCA7Civkppc+eMO5fFwgOwor5KaNPnfDuXxcIDsKK+Smiz7DoW98XCA7Civkpoc+asOsfFwgOwor5KW6PnnDqXxcIDsKK+SluD5tw618XCA7CivkpbY+bMOsfFwgOwor5KWvPmLDoHxcIDsKK+SlrD5iw7N8XCA7CivkpaE+ecOofFwgOwor5KWfPnnDqHxcIDsKK+SlnT7DoW98XCA7CivkpZg+Y8O5fFwgOwor5KWUPnPDuXxcIDsKK+Sljz55xa18XCA7CivkpYg+bcWtfFwgOwor5KWEPmPDuXxcIDsKK+Sktj55w6h8XCA7CivkpLM+ecOofFwgOwor5KSoPnDDrHxcIDsKK+SkoD5qaXxcIDsKK+Skmj5sxK18XCA7CivkpJk+bMOsfFwgOwor5KSSPmrErXxcIDsKK+Skjz5wxK18XCA7CivkpI4+asO6fFwgOwor5KSNPm3DrXxcIDsKK+SkiT5tw6x8XCA7CivkpIU+dMO6fFwgOwor5KO+Pm3DrHxcIDsKK+SjvT50xK18XCA7Civko7k+ZsOhfFwgOwor5KO1PsOocnxcIDsKK+SjtD54w7l8XCA7Civko7E+eMO5fFwgOwor5KOwPmrDuXxcIDsKK+Sjrj5ww7J8XCA7Civko6s+bMOtfFwgOwor5KOqPnDDsnxcIDsKK+Sjpz55w6x8XCA7Civko6U+YsStfFwgOwor5KOiPmrDrXxcIDsKK+SjoT50w618XCA7Civko50+dMO6fFwgOwor5KOWPm3Eg3xcIDsKK+SjlT5txIN8XCA7Civko5M+bMOtfFwgOwor5KOMPmTErXxcIDsKK+SjhD50w7p8XCA7Civko4E+ecWtfFwgOwor5KK5PmrFrXxcIDsKK+Sisz5qxK18XCA7CivkorE+ZMO6fFwgOwor5KKqPmLDs3xcIDsKK+SiqT55w7l8XCA7Civkop4+bsO5fFwgOwor5KKdPnnDoHxcIDsKK+Silz5ow6l8XCA7CivkopU+eMO5fFwgOwor5KKUPmfDqXxcIDsKK+Sikz55w7p8XCA7CivkopE+ZMStfFwgOwor5KKQPmPDunxcIDsKK+SijD5iw7N8XCA7Civkoos+asOsfFwgOwor5KKEPnjErXxcIDsKK+Sigz55w6x8XCA7CivkooA+ccOsfFwgOwor5KGpPmfFrXxcIDsKK+Shpz53xa18XCA7CivkoZ8+cMOsfFwgOwor5KGePmrDunxcIDsKK+ShnD5sw7l8XCA7CivkoZQ+ccStfFwgOwor5KGOPmzDunxcIDsKK+ShjT5mw7p8XCA7CivkoYs+ccOtfFwgOwor5KGDPmzDrHxcIDsKK+SguT7DoWl8XCA7CivkoLU+ZsO5fFwgOwor5KCePmPDuXxcIDsKK+Sgmj53w6B8XCA7CivkoJg+cMOsfFwgOwor5KCTPmPDuXxcIDsKK+Sgkj5ow7p8XCA7CivkoJA+ccO5fFwgOwor5KCPPmrDrHxcIDsKK+Sgjj53w7J8XCA7CivkoIs+YsStfFwgOwor5KCIPnTDunxcIDsKK+Sfvz5sw7l8XCA7Civkn7w+d8WtfFwgOwor5J+7PmTDuXxcIDsKK+Sfrj5mw7p8XCA7Civkn6Y+YsOhfFwgOwor5J+kPmLDrHxcIDsKK+SfoT5kw6x8XCA7Civkn58+Y8O5fFwgOwor5J+cPm7DoHxcIDsKK+Sfmz5iw7N8XCA7Civkn5o+ccOtfFwgOwor5J+UPmbDuXxcIDsKK+SfkT5sxIN8XCA7Civkn5A+bMOsfFwgOwor5J+PPmzDrHxcIDsKK+SfjD5qw618XCA7Civkn4o+ccO6fFwgOwor5J+GPmLDrHxcIDsKK+SfhD5xw6x8XCA7Civkn4M+Y8OgfFwgOwor5J64PmbDuXxcIDsKK+Setj5kw6x8XCA7CivknrM+YsOzfFwgOwor5J6xPmjDunxcIDsKK+Serz5mw7l8XCA7CivknqY+aMOpfFwgOwor5J6kPnHDunxcIDsKK+Senz5ww7J8XCA7Civknp4+ZsO6fFwgOwor5J6dPsSDb3xcIDsKK+SenD5mw7l8XCA7Civknpo+ccOtfFwgOwor5J6ZPnrDoXxcIDsKK+SemD5qw618XCA7CivknoU+ecOtfFwgOwor5J2+PmbDuXxcIDsKK+SdvT7DoGl8XCA7Civknbg+asOsfFwgOwor5J21PmLDuXxcIDsKK+SdsD50w618XCA7Civkna8+ecOsfFwgOwor5J2jPnHDunxcIDsKK+Sdnz55w6B8XCA7CivknZ0+ecStfFwgOwor5J2aPm7DrXxcIDsKK+SdmD55w6x8XCA7CivknZM+bMOgfFwgOwor5Jy9PnnDunxcIDsKK+ScvD5nw7p8XCA7CivknLo+Y8OofFwgOwor5JyvPmrDunxcIDsKK+ScoT54w7l8XCA7CivknJ4+asOsfFwgOwor5JyaPnTDoHxcIDsKK+ScmT7DoW58XCA7CivknJI+w6BvfFwgOwor5JyGPm3DsnxcIDsKK+ScgT54w6x8XCA7Civkm78+Z8OpfFwgOwor5Ju+PnPDuXxcIDsKK+SbtD5xxK18XCA7Civkm7E+dMOtfFwgOwor5JuvPmrDuXxcIDsKK+SbqT53w7l8XCA7Civkm6c+bcOtfFwgOwor5JulPnjDrHxcIDsKK+SbpD5jw7l8XCA7Civkm5k+eMO5fFwgOwor5JuVPnnDuXxcIDsKK+SblD5uw6F8XCA7Civkm5E+bcOsfFwgOwor5JuQPmPDrXxcIDsKK+Sbjz5uw618XCA7Civkm44+aMO5fFwgOwor5JuLPmfDqXxcIDsKK+SbiT5tw6x8XCA7Civkmrk+cMStfFwgOwor5Jq3PnjDrHxcIDsKK+SatD53w6B8XCA7CivkmrA+cMStfFwgOwor5JqrPsOhb3xcIDsKK+Saoz50w618XCA7Civkmp0+esO6fFwgOwor5JqbPmjDunxcIDsKK+SalT5sw6x8XCA7CivkmpA+asOtfFwgOwor5JqNPnHDrHxcIDsKK+SaiT5xw6x8XCA7CivkmoY+xY91fFwgOwor5JqEPmzDuXxcIDsKK+Sagj5ow6h8XCA7Civkmb0+eMOsfFwgOwor5Jm4PmTDqXxcIDsKK+SZtz5kw6l8XCA7CivkmbE+ZMO6fFwgOwor5JmwPmzDrXxcIDsKK+SZrz5jw7l8XCA7CivkmaM+c8OgfFwgOwor5JmXPnTDrHxcIDsKK+SZkj54w7l8XCA7CivkmZA+a8OofFwgOwor5JmPPmLDs3xcIDsKK+SZhD5xw6x8XCA7CivkmL0+bsOtfFwgOwor5Ji7PnPDuXxcIDsKK+SYuD55w6x8XCA7CivkmLU+bMO5fFwgOwor5JixPnnDuXxcIDsKK+SYrj5zw6B8XCA7CivkmKY+bsOtfFwgOwor5JijPnrErXxcIDsKK+SYoT5ixK18XCA7CivkmKA+ZsO6fFwgOwor5JidPnnDrHxcIDsKK+SYmD55w7l8XCA7CivkmI8+eMO5fFwgOwor5JiMPm7DrHxcIDsKK+SYiD5sw6x8XCA7CivkmIQ+ZsO5fFwgOwor5JiDPm3DsnxcIDsKK+SYgT5nw6l8XCA7CivkmIA+ZsO5fFwgOwor5Je5PmPDrHxcIDsKK+SXtz55w6x8XCA7Civkl7Y+bMOgfFwgOwor5JexPnDDunxcIDsKK+SXqz5tw6F8XCA7Civkl6g+ecO6fFwgOwor5JefPnnDrHxcIDsKK+SXmj5iw7N8XCA7Civkl5g+Z8OpfFwgOwor5JeRPnnDrHxcIDsKK+SXjT5sxK18XCA7Civkl4c+asO6fFwgOwor5JeEPmbFrXxcIDsKK+SXgj5oxa18XCA7Civkl4E+asOsfFwgOwor5Ja/PmzDrXxcIDsKK+SWvT5sw618XCA7Civklqo+Y8OtfFwgOwor5JapPmLDrHxcIDsKK+SWpz5uw6B8XCA7CivklqU+bMOtfFwgOwor5JaYPnTDunxcIDsKK+SWlT56xa18XCA7CivklpM+bsOgfFwgOwor5JaRPm3DrHxcIDsKK+SWij55w618XCA7Civkloc+ecO5fFwgOwor5JaBPnnDrHxcIDsKK+SVuz5nw6l8XCA7Civklbk+esOhfFwgOwor5JW3Pm3DrXxcIDsKK+SVtj5ow7l8XCA7CivklbM+bcOtfFwgOwor5JWuPmrDunxcIDsKK+SVqj56w6l8XCA7CivklaU+bsStfFwgOwor5JWjPmjDqXxcIDsKK+SVoT5sxa18XCA7CivklZc+YsOsfFwgOwor5JWOPmbDunxcIDsKK+SVjT55w6x8XCA7CivklYk+esOpfFwgOwor5JS9PsOgaXxcIDsKK+SUvD5zw6h8XCA7CivklLY+dMOtfFwgOwor5JS0PmPDqHxcIDsKK+SUsD5mw7p8XCA7CivklK8+aMO6fFwgOwor5JSsPnnDrHxcIDsKK+SUpz5sw618XCA7CivklKM+bMOtfFwgOwor5JShPnnDunxcIDsKK+SUlT5ww7p8XCA7CivklJM+eMWtfFwgOwor5JSOPnPDuXxcIDsKK+SUiT5sw6x8XCA7CivklIc+ccStfFwgOwor5JSGPmzDrXxcIDsKK+SUgz56xa18XCA7CivklII+esStfFwgOwor5JSBPmzDrHxcIDsKK+STvT5qw6x8XCA7Civkk7w+aMOofFwgOwor5JO5PnnDrHxcIDsKK+STrz5kw7p8XCA7Civkk6s+asOsfFwgOwor5JOnPmPDrHxcIDsKK+STpT5sw6B8XCA7Civkk6I+Z8O5fFwgOwor5JOgPnTDoHxcIDsKK+STnj5sw6x8XCA7Civkk5s+ZsWtfFwgOwor5JOaPmPDunxcIDsKK+STiT55w6l8XCA7Civkk4g+ecOsfFwgOwor5JOHPnjDrHxcIDsKK+SThT5xw618XCA7Civkk4M+ecOsfFwgOwor5JK7PnHErXxcIDsKK+SSrD5tw7J8XCA7Civkkqk+aMOpfFwgOwor5JKnPnHDuXxcIDsKK+SSpT5mw6B8XCA7CivkkqQ+csOsfFwgOwor5JKXPnHDrHxcIDsKK+SSiT53xa18XCA7Civkkog+YsWtfFwgOwor5JKHPmbDuXxcIDsKK+SShD5iw7N8XCA7CivkkoE+asOsfFwgOwor5JKAPmbDunxcIDsKK+SRvz5zw7l8XCA7Civkkb0+ZMOhfFwgOwor5JG1Pm3DuXxcIDsKK+SRtD5xw618XCA7CivkkbA+YsO5fFwgOwor5JGvPmTDrHxcIDsKK+SRrT5kw6x8XCA7Civkkac+ZsO6fFwgOwor5JGcPnTDoHxcIDsKK+SRkT5ww7p8XCA7CivkkYg+YsOzfFwgOwor5JGEPnDDrHxcIDsKK+SRgj7Eg2l8XCA7CivkkYE+d8O5fFwgOwor5JGAPnDDrHxcIDsKK+SQvz7DoW98XCA7CivkkLw+eMOsfFwgOwor5JCzPnnDunxcIDsKK+SQqD5nxa18XCA7CivkkKE+ccOtfFwgOwor5JCaPmrDrXxcIDsKK+SQmT5nw6l8XCA7CivkkJc+ZMWtfFwgOwor5JCWPnnDrXxcIDsKK+SQlT5qw618XCA7CivkkIo+ZMOhfFwgOwor5JCJPnrDrHxcIDsKK+SQhT55w618XCA7CivkkII+bMO5fFwgOwor5JCAPmrDrHxcIDsKK+SPvz5xxK18XCA7Civkj70+YsO5fFwgOwor5I+4PnnDunxcIDsKK+SPtj5iw6x8XCA7Civkj7E+asO6fFwgOwor5I+uPnjDrXxcIDsKK+SPqj7DqHJ8XCA7Civkj6c+bsOhfFwgOwor5I+kPnPDrHxcIDsKK+SPoj5ixK18XCA7Civkj6A+ccOsfFwgOwor5I+ePm3DsnxcIDsKK+SPmD5wxK18XCA7Civkj5E+ZMOsfFwgOwor5I+MPnHDrHxcIDsKK+SPiz5zw7l8XCA7Civkj4U+ccOsfFwgOwor5I+APmzDoHxcIDsKK+SOvD5sw7l8XCA7Civkjrg+d8O5fFwgOwor5I62PsOocnxcIDsKK+SOtT5iw6x8XCA7CivkjrM+d8OgfFwgOwor5I6xPmLDoHxcIDsKK+SOrj50w6x8XCA7Civkjqw+YsOgfFwgOwor5I6qPm7DqHxcIDsKK+SOqD7DoG58XCA7CivkjqM+c8OsfFwgOwor5I6iPnHErXxcIDsKK+SOoD7DqXJ8XCA7Civkjp8+w6lyfFwgOwor5I6YPnPDuXxcIDsKK+SOkz50w6B8XCA7CivkjpE+bMO5fFwgOwor5I6PPsOgbnxcIDsKK+SOjj5uw6B8XCA7Civkjow+Y8O5fFwgOwor5I6LPmjDqHxcIDsKK+SOij5ww7J8XCA7Civkjog+ecOsfFwgOwor5I6FPmbDuXxcIDsKK+SOgT5ow7p8XCA7Civkjb0+bMOsfFwgOwor5I24PmLDs3xcIDsKK+SNsT54w7p8XCA7Civkjag+YsOzfFwgOwor5I2mPmzDrXxcIDsKK+SNpD5qxK18XCA7CivkjaI+d8O6fFwgOwor5I2gPmzDrXxcIDsKK+SNnj55w7l8XCA7CivkjZ0+dMOgfFwgOwor5I2bPmfDuXxcIDsKK+SNmD5tw618XCA7CivkjZY+ZsO6fFwgOwor5I2VPmTErXxcIDsKK+SNkz5ow7l8XCA7CivkjY0+Z8WtfFwgOwor5I2MPmLDuXxcIDsKK+SNhz50w6B8XCA7CivkjYI+ecO6fFwgOwor5Iy/PmbDunxcIDsKK+SMuz55w6x8XCA7CivkjLo+xJVyfFwgOwor5IypPm3DrHxcIDsKK+SMoT50xK18XCA7CivkjJ8+YsOsfFwgOwor5IyaPnPDuXxcIDsKK+SMmD5tw618XCA7CivkjJc+ZsWtfFwgOwor5IyVPm3DrXxcIDsKK+SMlD7DsnV8XCA7CivkjJI+bMO5fFwgOwor5IyQPm3DrHxcIDsKK+SMjz5tw6x8XCA7CivkjIw+ccOsfFwgOwor5IyIPnTDoHxcIDsKK+SMgj7DsnV8XCA7Civki7k+ZsO6fFwgOwor5Iu2PnjDuXxcIDsKK+SLtT55w6x8XCA7Civki7A+asO6fFwgOwor5IuvPnHErXxcIDsKK+SLqT7DqXJ8XCA7Civki6g+ZsWtfFwgOwor5IunPnHDunxcIDsKK+SLpT5sw618XCA7Civki6A+YsWtfFwgOwor5IufPmrDrHxcIDsKK+SLmz5tw618XCA7Civki5o+ecOsfFwgOwor5IuZPsSVcnxcIDsKK+SLlj55w7l8XCA7Civki5Q+YsOsfFwgOwor5IuIPnLDunxcIDsKK+SKvz5iw7N8XCA7Civkir4+bcO5fFwgOwor5Iq6PmfFrXxcIDsKK+SKsz5tw618XCA7Civkiq4+ZMOtfFwgOwor5IqqPmzDrHxcIDsKK+SKpz5iw6x8XCA7CivkiqY+ecOhfFwgOwor5IqgPnjDrHxcIDsKK+SKmz5zxIN8XCA7CivkipA+w6hufFwgOwor5IqNPmzDrXxcIDsKK+SKhz5iw7l8XCA7CivkioI+Y8OofFwgOwor5IqAPmjDunxcIDsKK+SJvz5ow7p8XCA7Civkib4+bcOsfFwgOwor5Im7PnHDrXxcIDsKK+SJqz5sw618XCA7Civkiag+ecOsfFwgOwor5ImiPnPDqHxcIDsKK+SJnT5xxK18XCA7CivkiZs+ecO5fFwgOwor5ImRPm3Ds3xcIDsKK+SJiT5ow7p8XCA7CivkiLs+cMO6fFwgOwor5Ii4PmjDunxcIDsKK+SIsz50w6B8XCA7CivkiK4+asWtfFwgOwor5IisPnDDunxcIDsKK+SIqz5uw6B8XCA7CivkiKo+eMOsfFwgOwor5IifPmPDqHxcIDsKK+SInj5kxa18XCA7CivkiJg+Y8OtfFwgOwor5IiTPmfDqXxcIDsKK+SIjj55w6h8XCA7CivkiIs+dMOgfFwgOwor5IiFPnnDuXxcIDsKK+SHtz5ixK18XCA7Civkh7U+ecOtfFwgOwor5IexPm7DoHxcIDsKK+SHqT55w6x8XCA7Civkh6U+esOpfFwgOwor5IejPm7DoHxcIDsKK+SHoj5rxa18XCA7Civkh5g+aMO5fFwgOwor5IeRPmLDoHxcIDsKK+SHkD5sw6x8XCA7Civkh4U+ZsOhfFwgOwor5IeDPnPDrHxcIDsKK+SGvz55w6x8XCA7Civkhr0+asO5fFwgOwor5Ia3PnnDuXxcIDsKK+SGnz5nw6l8XCA7Civkhok+YsOgfFwgOwor5IaFPmPDrXxcIDsKK+SFvT5nxa18XCA7Civkhbs+bMOtfFwgOwor5IW4PnrDunxcIDsKK+SFtz50w7p8XCA7CivkhbI+ccOtfFwgOwor5IWwPsSVbnxcIDsKK+SFrD7DoGl8XCA7CivkhaQ+ccOsfFwgOwor5IWhPnjFrXxcIDsKK+SFoD50w618XCA7CivkhZ4+bsOgfFwgOwor5IWWPsSDbnxcIDsKK+SFkz5qxa18XCA7CivkhYo+ZMO5fFwgOwor5IWJPnnDoHxcIDsKK+SFhz5zw7l8XCA7CivkhYY+esOsfFwgOwor5IWEPmzDrHxcIDsKK+SFgj5ow6l8XCA7CivkhYE+w6BufFwgOwor5IS/PnnDrHxcIDsKK+SEuD5ww7J8XCA7CivkhLY+YsOsfFwgOwor5ISwPnnDoXxcIDsKK+SErD55w618XCA7CivkhKs+ccStfFwgOwor5ISoPnnDunxcIDsKK+SEoj5xw618XCA7CivkhJw+bMOtfFwgOwor5ISUPmrFrXxcIDsKK+SEjz55w7p8XCA7CivkhI4+ccStfFwgOwor5ISNPmTDuXxcIDsKK+SEgT55w6x8XCA7Civkg74+YsStfFwgOwor5IO9PmbDunxcIDsKK+SDuz5iw6B8XCA7Civkg7o+bcOzfFwgOwor5IOzPmzDoHxcIDsKK+SDrz5sw6x8XCA7Civkg64+ZMOhfFwgOwor5IOkPnPDuXxcIDsKK+SDmj5jw7l8XCA7Civkg5k+bMO5fFwgOwor5IOWPnfDuXxcIDsKK+SDkj5ow6l8XCA7Civkg44+esOpfFwgOwor5IOLPnnDunxcIDsKK+SDij5qxa18XCA7Civkgr8+dMOgfFwgOwor5IKyPmbEg3xcIDsKK+SCsD5sw6B8XCA7CivkgqQ+ZsO5fFwgOwor5IKjPmPDrXxcIDsKK+SCoT5kxK18XCA7Civkgps+ecO6fFwgOwor5IKNPmLDs3xcIDsKK+SCij55w7l8XCA7CivkgoY+eMO5fFwgOwor5IKCPnHDunxcIDsKK+SBvz5tw7J8XCA7Civkgbw+bcOyfFwgOwor5IG7PmzDrHxcIDsKK+SBuT5iw6x8XCA7CivkgbE+w6B1fFwgOwor5IGrPmjDunxcIDsKK+SBqT55w7p8XCA7CivkgaY+ccO5fFwgOwor5IGlPm7DrHxcIDsKK+SBkj5qw618XCA7CivkgYw+ecO5fFwgOwor5IGKPnfDsnxcIDsKK+SBiT5xw6x8XCA7CivkgYg+ccOsfFwgOwor5IGHPm3DrHxcIDsKK+SBhj7Eg258XCA7CivkgL8+ZMOsfFwgOwor5IC+PmTFrXxcIDsKK+SAuD5kw6x8XCA7CivkgLM+w6BpfFwgOwor5ICyPm3DuXxcIDsKK+SAsD5nxa18XCA7CivkgK8+YsWtfFwgOwor5ICmPmfFrXxcIDsKK+SAoz5iw6x8XCA7CivkgKA+ccO6fFwgOwor5ICcPmfFrXxcIDsKK+SAmT5xw6x8XCA7CivkgJg+eMOtfFwgOwor5ICRPm7DoHxcIDsKK+SAiD5xw6x8XCA7CivkgIc+Z8WtfFwgOwor47+/PnnEg3xcIDsKK+O/uT50w6B8XCA7Civjv7A+w6FvfFwgOwor47+vPmTDoXxcIDsKK+O/qz5iw6x8XCA7Civjv6g+bMOsfFwgOwor47+lPmjDunxcIDsKK+O/oz5ow6l8XCA7Civjv5s+bMOtfFwgOwor47+ZPnDDrHxcIDsKK+O/lj5sw7p8XCA7Civjv4c+eMOtfFwgOwor47+EPsOgaXxcIDsKK+O+uj5tw6B8XCA7CivjvrY+Z8WtfFwgOwor4761PmrDrHxcIDsKK+O+sD5ow7p8XCA7Civjvqg+ccStfFwgOwor476nPmvDqHxcIDsKK+O+pT54w7l8XCA7Civjvp8+YsO5fFwgOwor476WPmzErXxcIDsKK+O+kj5qw6x8XCA7CivjvpE+ZMOhfFwgOwor476QPmzDrHxcIDsKK+O+ij5qw618XCA7Civjvog+ZsO5fFwgOwor476HPm3DuXxcIDsKK+O+hT5zw6x8XCA7CivjvoQ+ZMO6fFwgOwor472+PnfDuXxcIDsKK+O9vT5nw7l8XCA7Civjvbo+asOtfFwgOwor472vPnjDrXxcIDsKK+O9rD5mw7l8XCA7CivjvaQ+asO6fFwgOwor472jPnnDuXxcIDsKK+O9oj7Eg258XCA7CivjvZ0+bMOsfFwgOwor472IPnnDrHxcIDsKK+O9gj5zw6B8XCA7CivjvYE+bMOsfFwgOwor47y+PmzDuXxcIDsKK+O8tj55w7p8XCA7CivjvLU+ZMOsfFwgOwor47y0PsWPdXxcIDsKK+O8pD5xw6x8XCA7CivjvJg+d8SDfFwgOwor47yWPmzDrHxcIDsKK+O8jD55xa18XCA7CivjvIs+Z8WtfFwgOwor47u6PmzDrHxcIDsKK+O7tz5qw618XCA7Civju7Y+YsStfFwgOwor47uvPnTDunxcIDsKK+O7rT5zw6h8XCA7Civju6w+dMO6fFwgOwor47urPmLDrHxcIDsKK+O7oD50w7p8XCA7Civju50+bMOgfFwgOwor47uRPmrDrHxcIDsKK+O7jj5sw6x8XCA7Civju40+d8O6fFwgOwor47uMPnTDunxcIDsKK+O7iz5sw6B8XCA7Civju4k+YsO5fFwgOwor47q/PnnDrXxcIDsKK+O6tz54w7l8XCA7Civjuq4+ecO6fFwgOwor47qtPnrErXxcIDsKK+O6qj5ww7p8XCA7CivjuqE+bMOsfFwgOwor47qePnnDunxcIDsKK+O6mj50xIN8XCA7Civjuok+aMO5fFwgOwor47qEPnnFrXxcIDsKK+O5uj50w6B8XCA7Civjubg+bsOtfFwgOwor47mzPnfDunxcIDsKK+O5sT5ow7p8XCA7Civjua4+bcOyfFwgOwor47mtPnnDrHxcIDsKK+O5qz54w6x8XCA7CivjuZg+csO6fFwgOwor47mTPnnDrHxcIDsKK+O5kj5wxa18XCA7CivjuZE+c8OsfFwgOwor47mNPmTDrXxcIDsKK+O5iD5sw618XCA7CivjuYc+aMOpfFwgOwor47mEPmrDrHxcIDsKK+O5gz5iw6x8XCA7CivjuYI+Y8OsfFwgOwor47mAPmLDs3xcIDsKK+O4vz5kw7p8XCA7CivjuLs+c8OsfFwgOwor47ipPsOgbnxcIDsKK+O4pj5ow7l8XCA7CivjuKM+ecOofFwgOwor47iaPmzErXxcIDsKK+O4kz5tw6x8XCA7CivjuI8+bcOtfFwgOwor47iNPnjDrHxcIDsKK+O4ij5sw6B8XCA7CivjuIQ+asOsfFwgOwor47e7PnfDunxcIDsKK+O3tT5tw7J8XCA7Civjt7Q+Z8OpfFwgOwor47ewPmzDrXxcIDsKK+O3rD5tw7J8XCA7Civjt6Y+eMO5fFwgOwor47ekPmjDqHxcIDsKK+O3kj55w7p8XCA7Civjt44+aMOofFwgOwor47a/PmLDs3xcIDsKK+O2oD55w6x8XCA7Civjtps+ecO6fFwgOwor47aaPmLDoHxcIDsKK+O1vz54w618XCA7CivjtbI+d8WtfFwgOwor47WwPnjDuXxcIDsKK+O1qz5uxK18XCA7Civjtak+ecOsfFwgOwor47WoPmLDrHxcIDsKK+O1pz5nw6l8XCA7CivjtaU+YsOsfFwgOwor47WjPmvElXxcIDsKK+O1nT55w6x8XCA7CivjtZc+ZsO5fFwgOwor47WRPmjDqHxcIDsKK+O1iz5tw6x8XCA7CivjtL4+YsOzfFwgOwor47S8PnPDuXxcIDsKK+O0uD5uw6B8XCA7CivjtLU+bcOsfFwgOwor47SdPmzDrXxcIDsKK+O0lT5qw618XCA7CivjtJQ+c8OofFwgOwor47SSPnnDrHxcIDsKK+O0kT5zw7l8XCA7CivjtIs+c8O5fFwgOwor47SJPmrErXxcIDsKK+O0gT55w6x8XCA7Civjs70+bcStfFwgOwor47O8PmLDrHxcIDsKK+Ozuz56w6l8XCA7Civjs7U+asOsfFwgOwor47O0Pm3DrHxcIDsKK+Ozqz50w6B8XCA7Civjs6c+eMOtfFwgOwor47OlPmrDuXxcIDsKK+OzoD50w6B8XCA7Civjs5s+ecO6fFwgOwor47OaPnnDuXxcIDsKK+OzkT55w6x8XCA7Civjs5A+c8OgfFwgOwor47ONPmLDuXxcIDsKK+Ozhz5mw7l8XCA7Civjs4E+esOofFwgOwor47K+PnnFrXxcIDsKK+OyvD55w6x8XCA7Civjsrs+bsOsfFwgOwor47K6PmrDrXxcIDsKK+Oyqz5ww7p8XCA7Civjsp4+esO6fFwgOwor47KYPnHDunxcIDsKK+OyhT5qw6x8XCA7Civjsbo+bMO6fFwgOwor47G5PmzDrHxcIDsKK+OxuD5iw6x8XCA7CivjsbQ+esOsfFwgOwor47GzPm3DsnxcIDsKK+Oxsj55w6x8XCA7Civjsa8+w6FpfFwgOwor47GpPmTDunxcIDsKK+Oxpz53w7J8XCA7CivjsZ8+YsOzfFwgOwor47GePmrDrXxcIDsKK+OxmD7DoG58XCA7CivjsYk+ecOofFwgOwor47GHPnPDqHxcIDsKK+OxhT55w6x8XCA7CivjsYQ+bcOyfFwgOwor47C9Pm3ErXxcIDsKK+Owuz55xK18XCA7CivjsLc+esOsfFwgOwor47C1PnrDunxcIDsKK+OwtD5ww7N8XCA7CivjsLM+ecOgfFwgOwor47CyPnjDuXxcIDsKK+Owqj53w6F8XCA7CivjsKY+ccO5fFwgOwor47CkPmvElXxcIDsKK+Owoz56w6x8XCA7CivjsJ8+asOsfFwgOwor47CdPnnErXxcIDsKK+Owmj5sw618XCA7CivjsJg+ecOtfFwgOwor47CXPmPDuXxcIDsKK+OwhT5kw618XCA7CivjsIA+bMOtfFwgOwor46+3PnDDunxcIDsKK+OvrT5sxa18XCA7Civjr6s+ccO6fFwgOwor46+pPnTDrHxcIDsKK+Ovpj5xw618XCA7Civjr6Q+bMOsfFwgOwor46+fPmzDuXxcIDsKK+OvnT5sw7l8XCA7Civjr5s+aMO6fFwgOwor46+aPmTDoXxcIDsKK+Ovlj5kw6l8XCA7Civjr5M+dMOgfFwgOwor46+PPmfFrXxcIDsKK+OviD5zw7l8XCA7Civjr4c+YsOsfFwgOwor46+FPnDDrXxcIDsKK+Ouvz5iw6x8XCA7CivjrrA+YsOtfFwgOwor466rPmjDqXxcIDsKK+OuqD5qw618XCA7CivjrqY+c8OofFwgOwor466fPmrDrXxcIDsKK+OunT5ow6l8XCA7Civjrpo+bMOsfFwgOwor466VPsOpcnxcIDsKK+OukT5xw6x8XCA7CivjroI+asO6fFwgOwor4629PmTErXxcIDsKK+OtvD50w6B8XCA7Civjrbg+dMO6fFwgOwor462yPmrDrXxcIDsKK+OtsT5ow6l8XCA7CivjrbA+asOsfFwgOwor462hPnjDrHxcIDsKK+OtmD5ow6l8XCA7CivjrZQ+bMO6fFwgOwor462SPnPDrHxcIDsKK+OsvD5mw7l8XCA7CivjrLM+d8WtfFwgOwor46yxPnTDrHxcIDsKK+OssD55w7p8XCA7CivjrKw+asO5fFwgOwor46ynPmLDs3xcIDsKK+OspT5ww7l8XCA7CivjrJ4+aMOofFwgOwor46yYPnPDuXxcIDsKK+Osjz5sw6x8XCA7CivjrI0+YsOzfFwgOwor46yCPnnDunxcIDsKK+OrvT5sw7l8XCA7Civjq6I+ccO5fFwgOwor46uZPmbDunxcIDsKK+OrmD5tw6x8XCA7Civjq5M+ccStfFwgOwor46uKPnnErXxcIDsKK+Oqvj5nw6l8XCA7Civjqrw+a8SVfFwgOwor46q2PmjDunxcIDsKK+OqrT5sw7p8XCA7Civjqqo+c8OgfFwgOwor46qpPnPDuXxcIDsKK+OqpD5iw6x8XCA7CivjqqE+a8SVfFwgOwor46qZPmvElXxcIDsKK+Oqlj5sw7l8XCA7CivjqpI+bsOtfFwgOwor46qRPnnDqHxcIDsKK+OqkD5sw7l8XCA7Civjqo8+YsStfFwgOwor46qNPmLDs3xcIDsKK+OqiT5ow6l8XCA7CivjqoY+ZMStfFwgOwor46qEPmbDunxcIDsKK+Oqgz5rxJV8XCA7CivjqoA+ecO6fFwgOwor46m9PnHDrXxcIDsKK+OptD5qw7p8XCA7Civjqa0+YsOzfFwgOwor46mpPnHErXxcIDsKK+Oppz5iw7N8XCA7CivjqaI+bcOtfFwgOwor46mePmPDrHxcIDsKK+OpmD55xK18XCA7CivjqZc+eMOtfFwgOwor46mOPnnDqHxcIDsKK+OpjT5jw6h8XCA7CivjqYs+c8O5fFwgOwor46mAPmrDuXxcIDsKK+Oovz5qw7l8XCA7CivjqL0+cMStfFwgOwor46i4Pm3DoHxcIDsKK+Oosj5jw6h8XCA7CivjqLA+Z8OpfFwgOwor46itPmjDuXxcIDsKK+OopT5uw6B8XCA7CivjqKA+bcOsfFwgOwor46iePnPDuXxcIDsKK+OokD5ixa18XCA7CivjqI4+csO6fFwgOwor46iIPmrErXxcIDsKK+Oohz5ww7N8XCA7Civjp70+Z8O5fFwgOwor46e6PnTDoHxcIDsKK+OnuT50w6h8XCA7Civjp7Q+d8WPfFwgOwor46ezPmLDs3xcIDsKK+OnsD5sw6x8XCA7Civjp6s+w6lyfFwgOwor46eaPnfEg3xcIDsKK+OnmT5iw6x8XCA7Civjp5c+esStfFwgOwor46eOPnnDoXxcIDsKK+Onij5iw6F8XCA7Civjp4U+bcO5fFwgOwor46eBPnHDuXxcIDsKK+OngD5qw618XCA7Civjpr8+aMO5fFwgOwor46a+PnnDrXxcIDsKK+OmvT54w7l8XCA7Civjprs+eMOtfFwgOwor46a6PnLFrXxcIDsKK+OmuD5qxK18XCA7CivjprQ+Z8OpfFwgOwor46axPnfFj3xcIDsKK+Ompj5ow6h8XCA7CivjpqQ+ecOsfFwgOwor46ahPmzDqHxcIDsKK+Ommz55w7p8XCA7CivjppI+bMOtfFwgOwor46aQPm7DrHxcIDsKK+OmiT55w6x8XCA7Civjpoc+bMO5fFwgOwor46aFPmTDrHxcIDsKK+OmhD5tw6F8XCA7Civjpb8+w6BvfFwgOwor46W+Pm7DrHxcIDsKK+OlvT5jw6h8XCA7Civjpbo+aMOpfFwgOwor46W3PnnDqHxcIDsKK+Oltj5zw6h8XCA7CivjpbQ+ecOtfFwgOwor46WlPnnDunxcIDsKK+OloT54w6x8XCA7CivjpaA+eMWtfFwgOwor46WdPm3ErXxcIDsKK+Olmz5qw618XCA7CivjpZo+ecO6fFwgOwor46WUPnnDunxcIDsKK+Olkz5xxK18XCA7CivjpY0+asOsfFwgOwor46WMPmrDunxcIDsKK+Olgj50w6h8XCA7CivjpYE+ZMOpfFwgOwor46WAPmTDqXxcIDsKK+OkuD54w6x8XCA7CivjpLU+Y8OtfFwgOwor46S0PnjDrXxcIDsKK+OksT5mw7l8XCA7CivjpKs+ZMOpfFwgOwor46SpPmvDqHxcIDsKK+Okpj5sw6x8XCA7CivjpKQ+ecO6fFwgOwor46SiPnjDuXxcIDsKK+OkoT5sw6x8XCA7CivjpJQ+ZsO6fFwgOwor46SHPsSDb3xcIDsKK+OkhT7DoGl8XCA7CivjpII+asOtfFwgOwor46O7PnnDrHxcIDsKK+OjtT50w6B8XCA7Civjo7E+esOpfFwgOwor46OsPnHDrHxcIDsKK+Ojoj50w618XCA7Civjo58+eMOsfFwgOwor46ObPnTDoHxcIDsKK+OjmT5kw618XCA7Civjo44+bcO5fFwgOwor46OIPnPDrHxcIDsKK+Ojhz5uxK18XCA7Civjo4Y+bcOtfFwgOwor46OEPnHDunxcIDsKK+Ojgz55xa18XCA7Civjo4I+ecOsfFwgOwor46K9PsSVcnxcIDsKK+OiuD5iw6x8XCA7CivjorY+YsOsfFwgOwor46KzPmzDunxcIDsKK+OisD5iw6x8XCA7Civjoqk+ZMOsfFwgOwor46KePnnDrHxcIDsKK+Oimj5sxa18XCA7Civjooo+xINpfFwgOwor46KAPmPDrHxcIDsKK+OhvD55w6x8XCA7Civjobk+Y8OsfFwgOwor46G2PmrDrHxcIDsKK+Ohsz5kxK18XCA7CivjobA+ecWtfFwgOwor46GuPmrDrXxcIDsKK+OhrT5qw6x8XCA7Civjoas+ecOsfFwgOwor46GZPmLDrHxcIDsKK+Ohlz50w618XCA7CivjoZQ+d8O5fFwgOwor46GHPmrDrXxcIDsKK+Ohgj5sw6x8XCA7CivjoYA+YsOsfFwgOwor46C/PmPErXxcIDsKK+OguD5rw7l8XCA7CivjoLc+Z8OpfFwgOwor46CyPmLErXxcIDsKK+OgsT5qw6x8XCA7CivjoK8+ecStfFwgOwor46CqPmrDuXxcIDsKK+OgqD55w7l8XCA7CivjoKc+bcOtfFwgOwor46CgPmzDunxcIDsKK+Ognz5sw618XCA7CivjoJw+bsOsfFwgOwor46CbPnfDsnxcIDsKK+OgmD55xa18XCA7CivjoJc+w6BvfFwgOwor46CWPmrDrHxcIDsKK+OgjT5qw618XCA7CivjoIU+ZsO6fFwgOwor46CEPnjDrXxcIDsKK+Oggj7DoW98XCA7Civjn7w+w6FvfFwgOwor45+3PmTEgXxcIDsKK+Ofsz5sw6x8XCA7Civjn6Q+bMO5fFwgOwor45+iPnHDrXxcIDsKK+OfnD5tw618XCA7Civjn5o+ccOtfFwgOwor45+TPnHDrXxcIDsKK+OfkT5iw7N8XCA7Civjn4o+ZsO6fFwgOwor45+BPsOgbnxcIDsKK+Oevj5uw618XCA7Civjnro+esO6fFwgOwor4565PmvElXxcIDsKK+OesD54xa18XCA7Civjnqs+asO5fFwgOwor456mPmrErXxcIDsKK+Oemz5qxK18XCA7Civjnpo+ccOsfFwgOwor456WPmPDrHxcIDsKK+OelD55w618XCA7CivjnpM+ccStfFwgOwor456SPnjDrHxcIDsKK+OekD5qdXxcIDsKK+Oejj5ixIN8XCA7Civjnoo+eMO5fFwgOwor456GPmrErXxcIDsKK+Oegz5qw618XCA7Civjnb8+YsOzfFwgOwor4522PsOgaXxcIDsKK+OdtT5kw6l8XCA7CivjnaU+bcStfFwgOwor452jPnnDqHxcIDsKK+Odoj55xa18XCA7CivjnZ4+ecOgfFwgOwor452bPnPDuXxcIDsKK+Odlj55w618XCA7CivjnZM+Z8OpfFwgOwor45y/PnjDuXxcIDsKK+OcvT56xK18XCA7CivjnLk+ccO6fFwgOwor45y3Pm3DrXxcIDsKK+Ocqz5tw6B8XCA7CivjnKk+w6B1fFwgOwor45yoPsOpcnxcIDsKK+OcnT7Eg258XCA7CivjnJw+w6BvfFwgOwor45yaPnPDuXxcIDsKK+OcmT5sw7l8XCA7CivjnJg+asO5fFwgOwor45yTPmTDoXxcIDsKK+Ockj55w6x8XCA7CivjnJE+ZsO6fFwgOwor45yOPnHDrXxcIDsKK+Ociz55w6x8XCA7CivjnIg+bcO5fFwgOwor45yGPm3DrHxcIDsKK+OchT54w7l8XCA7Civjm7I+ZsOgfFwgOwor45usPmzDuXxcIDsKK+ObpT50w6B8XCA7Civjm5g+cMOyfFwgOwor45uVPnnDrHxcIDsKK+Objz7DsnV8XCA7Civjm4U+w6hyfFwgOwor45q3PsSVcnxcIDsKK+Oatj5zw6x8XCA7CivjmrQ+YsO5fFwgOwor45qwPmLErXxcIDsKK+Oapj55w618XCA7CivjmqU+ecO6fFwgOwor45qkPnnDrHxcIDsKK+Oaoj5uw7p8XCA7CivjmqE+asStfFwgOwor45qcPnjDuXxcIDsKK+Oamz54w6x8XCA7CivjmpU+ZsO6fFwgOwor45qJPmfFrXxcIDsKK+Oahj5mw7l8XCA7Civjmb4+eMOsfFwgOwor45mvPnnDrHxcIDsKK+OZqz5qw618XCA7Civjmao+ecOofFwgOwor45moPmrDrHxcIDsKK+OZoD55w6x8XCA7CivjmZs+YsWtfFwgOwor45mSPnnElXxcIDsKK+OZkT55xa18XCA7CivjmY8+ZsO5fFwgOwor45mEPmLDrHxcIDsKK+OYuj5mw6F8XCA7CivjmLk+Y8OtfFwgOwor45i3PsOgaXxcIDsKK+OYtT5iw7l8XCA7CivjmLI+asO6fFwgOwor45itPsOgb3xcIDsKK+OYrD7DoG98XCA7CivjmKk+YsOsfFwgOwor45inPnjDuXxcIDsKK+OYoD5iw6x8XCA7CivjmJE+bMOsfFwgOwor45iNPmrDrXxcIDsKK+OYjD5qw7l8XCA7CivjmIo+ecOsfFwgOwor45iIPnlpfFwgOwor45iCPmPDrXxcIDsKK+OYgT55w6x8XCA7Civjl7w+ecOofFwgOwor45e1PnjDuXxcIDsKK+OXsz50xIN8XCA7Civjl7E+asOtfFwgOwor45eoPsSDaXxcIDsKK+OXpD5jw7l8XCA7Civjl6M+dMOsfFwgOwor45eaPmzDrHxcIDsKK+OXmT5uw6B8XCA7Civjl5g+YsOzfFwgOwor45eSPsOgaXxcIDsKK+OXij5qw618XCA7Civjl4k+YsOsfFwgOwor45eGPmfDqXxcIDsKK+OXhT5ow7p8XCA7Civjlr0+esOpfFwgOwor45a2PnnDqHxcIDsKK+OWqD5sw7l8XCA7CivjlqI+asOtfFwgOwor45ahPnnDqHxcIDsKK+OWoD5iw6B8XCA7CivjlpU+YsOyfFwgOwor45aSPnTDrXxcIDsKK+OWhz7DqXJ8XCA7CivjloY+ccO6fFwgOwor45aFPnjDuXxcIDsKK+OWgj55w6x8XCA7CivjloA+bMOofFwgOwor45W9PnPDrHxcIDsKK+OVuT5mw6F8XCA7Civjlbg+bMOsfFwgOwor45WwPmjDqHxcIDsKK+OVrj5mxa18XCA7Civjla0+w6BvfFwgOwor45WlPnnErXxcIDsKK+OVoT5ow6l8XCA7CivjlZs+eMO5fFwgOwor45WWPnPDuXxcIDsKK+OVjD7DoGl8XCA7CivjlYk+a8OofFwgOwor45WHPmzDoXxcIDsKK+OVhj5ow7l8XCA7CivjlLk+bMOofFwgOwor45S0PnnDrHxcIDsKK+OUsT55xa18XCA7CivjlKo+bMWtfFwgOwor45SlPnDDrXxcIDsKK+OUoD5ow6l8XCA7CivjlJw+YsOhfFwgOwor45SVPmrDrXxcIDsKK+OUkj54w618XCA7CivjlI8+bMOsfFwgOwor45SEPnPDuXxcIDsKK+OTtz55w6x8XCA7Civjk68+bMOtfFwgOwor45OtPmjDqXxcIDsKK+OTqD5jw618XCA7Civjk6E+ZsWtfFwgOwor45OePnHDrHxcIDsKK+OTmD5zw7l8XCA7Civjk5Y+YsOsfFwgOwor45OQPmzDuXxcIDsKK+OSvz5sw618XCA7CivjkrQ+Z8WtfFwgOwor45KrPmrDrHxcIDsKK+OSpz5sw6x8XCA7Civjkpw+ecO6fFwgOwor45KWPsWPdXxcIDsKK+OSkz50w6B8XCA7CivjkpI+cMO6fFwgOwor45KOPnPEg3xcIDsKK+OSij5zw6h8XCA7Civjkoc+bcO5fFwgOwor45KFPnHErXxcIDsKK+OSgz7DqHJ8XCA7CivjkoI+a8O5fFwgOwor45KBPnnFrXxcIDsKK+ORuz5tw6B8XCA7Civjkbg+xINpfFwgOwor45G2PnjDrHxcIDsKK+ORrz54xa18XCA7Civjkag+ecWtfFwgOwor45GnPmrDrHxcIDsKK+ORpj5sw6x8XCA7CivjkaU+ecOsfFwgOwor45GcPnnDrHxcIDsKK+ORmz5zw7l8XCA7CivjkZQ+eMWtfFwgOwor45GKPnnDrHxcIDsKK+ORiT5zw7l8XCA7CivjkYQ+d8WtfFwgOwor45GDPsSDb3xcIDsKK+OQuz5uzIZ8XCA7CivjkLk+ecOsfFwgOwor45C3Pm3Eg3xcIDsKK+OQsz53w7l8XCA7CivjkKg+eMO5fFwgOwor45CWPnnDqHxcIDsKK+OQjD5zw6x8XCA7CivjkIU+d8WtfFwgOwor8KWcjD7Eg298XCA7CivwoZyxPmrDrHxcIDsKK/CgvLs+aml8XCA7CivwoIGlPmfEg3xcIDsKK/CggIE+cWl8XCA7CivwoICAPmhhfFwgOwor6Zi/PmF8XCA7CivllYo+YXxcIDsKK+aBtj7DqHxcIDsKK+minT7DqXxcIDsKK+S/hD7DqXxcIDsKK+mlvz7DqHxcIDsKK+WRtT5hfFwgOwor5ZOmPsOpfFwgOwor6bmFPsOpfFwgOwor5ailPsOpfFwgOwor5ZmiPm98XCA7Civls6g+w6l8XCA7CivmhJU+w6h8XCA7CivpgY8+w6h8XCA7CivljoQ+w6h8XCA7Civmibw+w6h8XCA7CivokLw+w6h8XCA7Civlmak+w6h8XCA7CivphII+w6h8XCA7Civom74+w6l8XCA7CivllpQ+b3xcIDsKK+iuuT7DqXxcIDsKK+WRgz7DqHxcIDsKK+m5lz7DqHxcIDsKK+WpgD5lfFwgOwor5ZOQPsOofFwgOwor6aKaPsOofFwgOwor5bGZPmV8XCA7Civova0+w6h8XCA7Civll4Q+w6F8XCA7CivosJQ+w6h8XCA7Civlnqk+w6h8XCA7Civoha0+w6h8XCA7CivpmI8+w6h8XCA7Civojqo+w6l8XCA7CivomrU+w6l8XCA7CivpvbY+w6h8XCA7CivpvYI+w6h8XCA7Civptpo+w6h8XCA7CivptZ4+w6l8XCA7CivptZ0+w6l8XCA7Civpsbc+w6h8XCA7CivpsJA+w6h8XCA7CivpraU+w6h8XCA7CivpqIA+w6l8XCA7CivppKk+w6h8XCA7CivppJM+w6h8XCA7CivpoY4+w6h8XCA7CivpoY0+w6l8XCA7CivpoJ8+w6l8XCA7CivpoJ4+w6h8XCA7CivpmL4+xIN8XCA7CivpmLg+w6h8XCA7CivpmKg+w6h8XCA7Civplrw+w6h8XCA7CivplJU+YXxcIDsKK+mStj5lfFwgOwor6ZGpPsOofFwgOwor6Y2UPsOofFwgOwor6YySPmF8XCA7Civpi6g+w6l8XCA7Civpi6c+w6l8XCA7CivpiIs+w6l8XCA7CivpgYw+w6h8XCA7Civov5c+w6l8XCA7Civou7Y+w6h8XCA7Civou5s+w6h8XCA7CivospY+w6h8XCA7CivosZ8+w6h8XCA7Civoro0+w6h8XCA7CivorYw+w6l8XCA7Civoq6Q+w6h8XCA7CivoqpA+w6l8XCA7Civoqbs+w6h8XCA7CivoqJs+w6l8XCA7Civopqg+w6h8XCA7CivonYE+w6h8XCA7CivomoU+w6h8XCA7CivolZo+w6h8XCA7Civoi4o+w6h8XCA7Civno4A+w6l8XCA7Civnoao+w6l8XCA7CivnoYY+w6h8XCA7CivnoJA+w6h8XCA7CivnnYs+w6l8XCA7CivnmpI+w6l8XCA7Civnl74+ZXxcIDsKK+eQpz7DqHxcIDsKK+ePtD7DqXxcIDsKK+eNvz7ElXxcIDsKK+eMlD5lfFwgOwor54W+Pm58XCA7CivmuYI+w6h8XCA7CivmtpA+w6l8XCA7Civmq64+w6h8XCA7Civmnpk+w6h8XCA7CivmkLk+w6h8XCA7CivmkKQ+w6h8XCA7CivmiLk+w6h8XCA7Civmg6E+xJV8XCA7Civmgqo+w6h8XCA7Civltq0+w6h8XCA7CivltL8+w6h8XCA7Civls6k+w6l8XCA7Civls4k+ZXxcIDsKK+WziD7DqHxcIDsKK+Wyiz7DqHxcIDsKK+WpkD5lfFwgOwor5ai/PmV8XCA7Civlpr8+ZXxcIDsKK+WmuD5lfFwgOwor5aCuPsOofFwgOwor5aCoPsOofFwgOwor5aCKPsOofFwgOwor5ZyUPsOofFwgOwor5ZuuPsOpfFwgOwor5ZmBPsSVfFwgOwor5ZaSPm98XCA7Civlkrk+w6h8XCA7CivlkqI+w6h8XCA7CivlkaM+4bi/fFwgOwor5ZGdPsOofFwgOwor5ZCqPsOpfFwgOwor5ZCWPmF8XCA7Civljb4+w6h8XCA7CivlhI0+w6h8XCA7Civlg6s+w6h8XCA7CivlgZQ+w6h8XCA7Civks6w+w6h8XCA7Civks5g+w6l8XCA7Civks5c+w6l8XCA7Civksa4+w6l8XCA7Civkq7c+w6h8XCA7Civkqbk+w6l8XCA7Civko54+w6h8XCA7Civknqk+w6h8XCA7CivknYg+w6h8XCA7Civkm5Y+w6h8XCA7CivkmbM+w6h8XCA7Civklrg+w6l8XCA7CivklY8+w6l8XCA7CivklL4+w6h8XCA7Civkk4o+w6h8XCA7Civkkao+w6h8XCA7CivkkaU+w6h8XCA7CivkhpM+w6h8XCA7CivkhIk+w6l8XCA7CivjvLA+w6l8XCA7CivjvKI+xJV8XCA7CivjvII+w6l8XCA7Civjt4g+w6h8XCA7CivjsaY+w6h8XCA7Civjrpk+w6h8XCA7CivjqbU+w6h8XCA7Civjp5Y+w6h8XCA7Civjpo0+w6h8XCA7CivjoYs+w6h8XCA7CivjoIs+w6h8XCA7Civjn6c+w6h8XCA7Civjl4E+w6h8XCA7Civjlr4+w6h8XCA7CivjlY4+w6h8XCA7CivjlKk+w6h8XCA7Civjk7U+w6h8XCA7CivjgIIgPD4gJy4nOworIyBFbmQgUkFXIGRhdGEgZm9yIGNvbnZlcnRpbmcgQ0pLIGNoYXJhY3RlcnMKKworCisKKyMgZmFsbGJhY2tzCisKKyMjIHwgeWkgPCBpOworIyMgfCB3dSA8IHU7CisjIyB8IGJpIDwgYjsKKyMjIHwgY2kgPCBjOworIyMgfCBkaSA8IGQ7CisjIyB8IGZ1IDwgZjsKKyMjIHwgZ3UgPCBnOworIyMgfCBoZSA8IGg7CisjIyB8IGppIDwgajsKKyMjIHwga3UgPCBrOworIyMgfCBsaSA8IGw7CisjIyB8IG1pIDwgbTsKKyMjIHwgcGkgPCBwOworIyMgfCBxaSA8IHE7CisjIyB8IGwgPCByOworIyMgfCBzaSA8IHM7CisjIyB8IHRpIDwgdDsKKyMjIHwgZiA8IHY7CisjIyB8IHdhIDwgdzsKKyMjIHwgeGkgPCB4OworIyMgfCB5aSA8IHk7CisjIyB8IHppIDwgejsKKworIyBmaWx0ZXIgb3V0IHRoZSBoYWxmLXdpZHRoIGhhbmd1bAorOjogW15cdUZGQkUtXHVGRkVFXSBmdWxsd2lkdGgtaGFsZndpZHRoICgpOworIyMgOjogKGxvd2VyKSA7CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hhbl9MYXRpbl9EZWZpbml0aW9uLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSGFuX0xhdGluX0RlZmluaXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzk5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hhbl9MYXRpbl9EZWZpbml0aW9uLnR4dApAQCAtMCwwICsxLDU1ODAyIEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hhbl9MYXRpbl9EZWZpbml0aW9uLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDcvMTQgMjE6NTk6MTUgJAorIyAkUmV2aXNpb246IDEuMiAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29udmVydCBDSksgY2hhcmFjdGVycywgYWNjb3JkaW5nIHRvIHRoZSBkZWZpbnRpb25zIGluIENFRElDVCBhbmQgVW5paGFuLnR4dAorIyBOb3RlOiBhZGRzIHNwYWNlIGJldHdlZW4gdGhlbSBhbmQgbGV0dGVycy4KK3sgKFs6SGFuOl0pIH0gWzpMOl0gPiB8ICQxICcgJzsKK1tcLlwsXD9cIe+8ju+8jO+8n++8geOAgeOAgls6UGU6XVs6UGY6XV0geyB9IFs6TDpdID4gJyAnOworWzpMOl0geyB9IFtbOkhhbjpdWzpQczpdWzpQaTpdXT4gJyAnOworCivorormlocgPCBhXC1wb3B1bGFyXC1mb3JtXC1vZlwtbmFycmF0aXZlXC1saXRlcmF0dXJlXC1mbG91cmlzaGluZ1wtaW5cLXRoZVwtdGFuZ1wtZHluYXN0eVwtXCg2MThcLTkwN1wpXC13aXRoXC1hbHRlcm5hdGVcLXByb3NlXC1hbmRcLXJoeW1lZFwtcGFydHNcLWZvclwtcmVjaXRhdGlvblwtYW5kXC1zaW5naW5nXC1cKG9mdGVuXC1vblwtYnVkZGhpc3RpY1wtdGhlbWVzXCk7CivpgorluaMgPCBib3JkZXJcLXJlZ2lvblwtY3VycmVuY3lcLVwoY29uc2lzdGluZ1wtb2ZcLXRoZVwtY3VycmVuY3lcLW5vdGVzXC1pc3N1ZWRcLWJ5XC10aGVcLWJvcmRlclwtcmVnaW9uXC1nb3Zlcm5tZW50c1wtZHVyaW5nXC10aGVcLXdhclwtb2ZcLXJlc2lzdGFuY2VcLWFnYWluc3RcLWphcGFuXC1hbmRcLXRoZVwtd2FyXC1vZlwtbGliZXJhdGlvblwpOwor55u06YCa6LuKIDwgXCJ0aHJvdWdoXC10cmFpblwiXC1cKHJlZmVyc1wtdG9cLXRoZVwtaWRlYVwtb2ZcLXJldGFpbmluZ1wtcHJldmlvdXNcLWxlZ2lzbGF0dXJlXC1hZnRlclwtdHJhbnNpdGlvblwtdG9cLWNoaW5lc2VcLXJ1bGVcLWluXC1ob25nXC1rb25nXC1vclwtbWFjYXVcKTsKK+Wwj+iHn+msvCA8IGRpcnR5XC1saXR0bGVcLW1vbnN0ZXJcLVwoc3Bva2VuXC1hZmZlY3Rpb25hdGVseVwtdG9cLWFcLWNoaWxkXC13aG9cLWhhc1wtZ290dGVuXC1oaW1cKGhlclwpc2VsZlwtZGlydHlcO1wtbGl0ZXJhbGx5XC1cImxpdHRsZVwtZGlydHlcLWdob3N0XCJcKTsKK+auuumbnue1pueMtOeciyA8IFwia2lsbFwtYVwtY2hpY2tlblwtaW5cLWZyb250XC1vZlwtYVwtbW9ua2V5XCJcLVwtXC1cLW1ha2VcLWFuXC1leGFtcGxlXC1vdXRcLW9mXC1zb21lb25lXC1cKGJ5XC1wdW5pc2hpbmdcLXRoZW1cKVwtdG9cLWZyaWdodGVuXC1vdGhlcnM7CivmirHolqrmlZHngasgPCBjYXJyeVwtZmFnZ290c1wtdG9cLXB1dFwtb3V0XC1hXC1maXJlXC1cLVwtYWRvcHRcLWFcLXdyb25nXC1tZXRob2RcLXRvXC1zYXZlXC1hXC1zaXR1YXRpb25cLWFuZFwtZW5kXC11cFwtYnlcLW1ha2luZ1wtaXRcLXdvcnNlOwor5LiN6KaL5qO65p2Q5LiN6JC95reaIDwgbm90XC1zaGVkXC1hXC10ZWFyXC11bnRpbFwtb25lXC1zZWVzXC10aGVcLWNvZmZpblwtXC1cLXJlZnVzZVwtdG9cLWJlXC1jb252aW5jZWRcLXVudGlsXC1vbmVcLWlzXC1mYWNlZFwtd2l0aFwtZ3JpbVwtcmVhbGl0eTsKK+WQjOacnyA8IHRoZVwtY29ycmVzcG9uZGluZ1wtdGltZVwtcGVyaW9kXC1cKGVnXCxcLWNvbXBhcmVcLWluZmxhdGlvblwtbm93XC13aXRoXC10aGVcLXJhdGVcLWR1cmluZ1wtdGhlXC1zYW1lXC1tb250aFwtbGFzdFwteWVhclwpOwor46GOIDwgdGhlXC1sb25nXC1iYW5kc1wtb3JcLXJpYmJvbnNcLWF0dHJhY2hlZFwtdG9cLWZsYWdzXC1hbmRcLWJhbm5lcnNcLXRoZVwtZmVhdGhlclwtZGVjb3JlY3RlZFwtY2FycmlhZ2VzXC1vclwtZHJlc3NlczsKK+mDryA8IG5hbWVcLW9mXC1hXC1zbWFsbFwtYW5jaWVudFwtcHJpbmNpcGFsaXR5XC13aGljaFwtd2FzXC1zaXR1YXRlZFwtaW5cLXdoYXRcLWlzXC1ub3dcLXBhcnRcLW9mXC1zaGFudHVuZ1wtYW5kXC1raWFuZ3N1Owor5p2v5rC06LuK6JaqIDwgdHJ5aW5nXC10b1wtcHV0XC1vdXRcLWFcLWJ1cm5pbmdcLWNhcnRsb2FkXC1vZlwtZmFnZ290c1wtd2l0aFwtYVwtY3VwXC1vZlwtd2F0ZXJcLVwtXC1hblwtdXR0ZXJseVwtaW5hZGVxdWF0ZVwtbWVhc3VyZTsKK+SQniA8IHRoZVwtdGhpblwtbWVtYnJhbmVcLWJldHdlZW5cLXNraW5cLWFuZFwtZmxlc2hcLXRoYXRcLXByb3RlY3RzXC1pbnRlcm5hbFwtb3JnYW5zXC1vclwtdGlzc3Vlc1wtaW5cLXRoZVwtaHVtYW5cLWJvZHk7CivlgY/lgY8gPCBcKGluZGljYXRlc1wtdGhhdFwtc3RoXC5cLXR1cm5zXC1vdXRcLWp1c3RcLXRoZVwtb3Bwb3NpdGVcLW9mXC13aGF0XC1vbmVcLXdvdWxkXC1leHBlY3RcLW9yXC13aGF0XC13b3VsZFwtYmVcLW5vcm1hbFwpOwor5pWs56WdIDwgdG9cLXJlc3BlY3RmdWxseVwtb2ZmZXJcLVwod3JpdHRlblwtYXRcLXRoZVwtZW5kXC1vZlwtbGV0dGVyXC1mcm9tXC1zb21lb25lXC1vZlwtbG93ZXJcLXN0YXR1c1wtdG9cLWhpZ2hlclwtc3RhdHVzXCk7CivljZzovq0gPCBvcmFjbGVcLWluc2NyaXB0aW9uc1wtb2ZcLXRoZVwtc2hhbmdcLWR5bmFzdHlcLVwoMTZ0aFwtMTF0aFwtY2VudHVyeVwtYmNcKVwtb25cLXRvcnRvaXNlc2hlbGxzXC1vclwtYW5pbWFsXC1ib25lczsKK+eXheaApeS6guaKlemGqyA8IHR1cm5cLXRvXC1hbnlcLWRvY3Rvclwtb25lXC1jYW5cLWZpbmRcLXdoZW5cLWNyaXRpY2FsbHlcLWlsbFwtXC1cLXRyeVwtYW55dGhpbmdcLXdoZW5cLWluXC1hXC1kZXNwZXJhdGVcLXNpdHVhdGlvbjsKK+i+r+iovOaWveayuyA8IGRpYWdub3Npc1wtYW5kXC10cmVhdG1lbnRcLWJhc2VkXC1vblwtYW5cLW92ZXJhbGxcLWFuYWx5c2lzXC1vZlwtdGhlXC1pbGxuZXNzXC1hbmRcLXRoZVwtcGF0aWVudCcnc1wtY29uZGl0aW9uOwor54+qIDwgYVwtamFkZVwtdGFibGVcLWNvbmZlcnJlZFwtdXBvblwtZmV1ZGFsXC1wcmluY2VzXC1ieVwtdGhlXC1lbXBlcm9yXC1hc1wtYVwtc3ltYm9sXC1vZlwtZGlnbml0eVwtYW5kXC1hdXRob3JpdHk7CivmlZ3luJroh6rnj40gPCB2YWx1ZVwtb25lJydzXC1vd25cLW9sZFwtYnJvb21cLVwtXC1jaGVyaXNoXC1zb21ldGhpbmdcLW9mXC1saXR0bGVcLXZhbHVlXC1zaW1wbHlcLWJlY2F1c2VcLWl0XC1pc1wtb25lJydzXC1vd247CivkuI3nn6XlpKnpq5jlnLDljpogPCBub3RcLWtub3dcLXRoZVwtaW1tZW5zaXR5XC1vZlwtaGVhdmVuXC1hbmRcLWVhcnRoXC1cLVwtaGF2ZVwtYW5cLWV4YWdnZXJhdGVkXC1vcGluaW9uXC1vZlwtb25lJydzXC1hYmlsaXRpZXM7CivjurogPCBhXC12ZXJ5XC1wcmVjaW91c1wtcGllY2VcLW9mXC1qYWRlXC13b3JuXC1ieVwtYW5jaWVudFwtZW1wZXJvcnNcLXRvXC1tYXRjaFwtdGFibGVzXC1ib3JuZVwtYnlcLXRoZVwtbm9ibGVzOwor5ICYIDwgdG9cLWNvdmVyXC10aGVcLWxpbmVcLW9mXC12aXNpb25cLW9yXC1zaWdodFwtXC1cLXRoZVwtc3RyYWlnaHRcLWxpbmVcLWJldHdlZW5cLWFuXC1vYmplY3RcLWFuZFwtb25lJydzXC1leWVzOwor5YW15LiN6KGA5YiDIDwgdGhlXC1lZGdlc1wtb2ZcLXRoZVwtc3dvcmRzXC1ub3RcLWJlaW5nXC1zdGFpbmVkXC13aXRoXC1ibG9vZFwtXC1cLXdpblwtdmljdG9yeVwtd2l0aG91dFwtZmlyaW5nXC1hXC1zaG90Owor46inIDwgd29vZGVuXC1zdGlja1wtb3JcLWJhbWJvb1wtY2FuZVwtdXNlZFwtdG9cLXN1cHBvcnRcLXRoZVwtY292ZXJpbmdcLW9mXC1hXC1jYXJyaWFnZVwtaW5cLWFuY2llbnRcLXRpbWVzOwor45SjIDwgaW5cLWFuY2llbnRcLXRpbWVzXC10b1wtZmlnaHRcLWFnYWluc3RcLXRoZVwtZW5lbXlcLWJ5XC1wdXNoaW5nXC1kb3duXC10aGVcLWJpZ1wtcm9ja3NcLWZyb21cLXVwXC1oaWdoOwor5rSb5b63IDwgXCh3aW5zdG9uXClcLWxvcmRcLVwoZm9ybWVyXC1hc3Npc3RhbnRcLXNlY3JldGFyeVwtb2ZcLXN0YXRlXC1mb3JcLWVhc3RcLWFzaWFcLWFuZFwtcGFjaWZpY1wtYWZmYWlyc1wpOwor5LiN5Yiw6buD5rKz5b+D5LiN5q27IDwgbm90XC1zdG9wXC11bnRpbFwtb25lXC1yZWFjaGVzXC10aGVcLWh1YW5naGVcLXJpdmVyXC1cLVwtbm90XC1zdG9wXC11bnRpbFwtb25lXC1yZWFjaGVzXC1vbmUnJ3NcLWdvYWw7CivlvbflvqggPCBuYW1lXC1vZlwtYVwtY29sbGVjdGlvblwtb2ZcLXNob3J0XC1zdG9yaWVzXCxcLXBhbmdcLWh1YW5nXCxcLVwid2FuZGVyaW5nXC1hYm91dFwiXCxcLWJ5XC1sdTNcLXh1bjRcLemtr+i/hTsKK+SaqyA8IG9ybmFtZW50YWxcLWFydGljbGVzXC1tYWRlXC1vZlwtaG9ybnNcLXVzZWRcLXRvXC1kZWNvcmF0ZVwtdGhlXC10b3BcLW9mXC1hXC1zdGlja1wtb3JcLWhvcnNld2hpcDsKK+mkiuWFkumYsuiAgSA8IFwob2ZcLXBhcmVudHNcKVwtdG9cLWJyaW5nXC11cFwtY2lobGRyZW5cLWZvclwtdGhlXC1wdXJwb3NlXC1vZlwtYmVpbmdcLWxvb2tlZFwtYWZ0ZXJcLWluXC1vbGRcLWFnZTsKK+mZs+avhSA8IGNoZW5cLXlpXCxcLWZvcm1lclwtbWF5b3JcLW9mXC1zaGFuZ2hhaVwtYW5kXC1oaWdoZXN0XC1yYW5raW5nXC1taWxpdGFyeVwtY29tbWFuZGVyXC1pblwtY2hpbmE7CivntrroibLkvbMgPCBpdGhhY2FcLFwtbnlcLVwoYnV0XC1wcm9ub3VuY2VkXC15aTNcLXNlNFwtamlhMVwsXC1mb2xsb3dpbmdcLWFcLW1pc3Rha2VcLW1hZGVcLWJ5XC1odTJcLXNoaTRcLeiDoemBqVwpOwor56yQIDwgYmFtYm9vc1wtcGxhY2VkXC1hY3Jvc3NcLXdvb2RlblwtZnJhbWVzXC1vblwtd2hpY2hcLWdyYWluXC1tYXlcLWJlXC1zdG9yZWRcLWluXC1kYW1wXC1jbGltYXRlczsKK+SjniA8IG5hbWVcLW9mXC1hblwtYW5jaWVudFwtc3RhdGVcLXdoaWNoXC1vY2N1cGllZFwtdGhlXC1zaXRlXC1vZlwtdGhlXC1wcmVzZW50XC1wcm92aW5jZVwtb2ZcLWh1YmVpOwor5Ie2IDwgYVwtc21hbGxcLXJhZnRlcnNcLW1hZGVcLW9mXC1iYW1ib29cLXdoaWNoXC1wcm9qZWN0XC1mb3JtXC10aGVcLWVhdmVzXC1hbmRcLXN1cHBvcnRcLXRoZVwtdGlsZXM7Civpm7fls7DloZQgPCBsZWlmZW5nXC1wYWdvZGFcLFwtYnlcLXdlc3RcLWxha2VcLXVudGlsXC1pdFwtd2FzXC1kZXN0cm95ZWRcLVwoYWxzb1wtZnJvbVwtbWFkYW1cLXdoaXRlXC1zbmFrZVwpOwor6LOoIDwgdHJpYnV0ZVwtcGFpZFwtaW5cLWNsb3RoXC1ieVwtdGhlXC10cmliZXNcLWluXC1zemVjaHdhblwtYW5kXC15dW5uYW5cLXVuZGVyXC10aGVcLWhhblwtZHluYXN0eTsKK+S4jeWFseaItOWkqSA8IHdpbGxcLW5vdFwtbGl2ZVwtdW5kZXJcLXRoZVwtc2FtZVwtc2t5XC1cKHdpdGhcLW9uZScnc1wtZW5lbXlcKVwtXC1cLWFic29sdXRlbHlcLWlycmVjb25jaWxhYmxlOwor56arIDwgc2FjcmlmaWNlXC1vZmZlcmVkXC1hdFwtdGhlXC1lbmRcLW9mXC10aGVcLXRocmVlXC15ZWFycycnXC1tb3VybmluZ1wtdGhlXC1kZWF0aFwtb2ZcLWFcLXBhcmVudDsKK+SCqSA8IGFuXC1pblwtc2xhYlwtb3JcLWlua1wtc3RvbmVcLXNvdW5kXC1vZlwtcGViYmxlc1wtb3JcLXN0b25lc1wtcnViYmluZ1wtb3JcLWtub2NraW5nXC10b2dldGhlcjsKK+SCjSA8IGFcLWtpbmRcLW9mXC13ZWFwb25cLWNhcnJpZWRcLWJ5XC10aGVcLWhvbm9yXC1ndWFyZFwtYmVmb3JlXC10aGVcLWVtcGVyb3JcLWluXC1hbmNpZW50XC10aW1lczsKK+aTiuWFtuaDsOatuCA8IGF2b2lkXC10aGVcLWVuZW15XC13aGVuXC1oZVwtaXNcLWZyZXNoXC1hbmRcLXN0cmlrZVwtaGltXC13aGVuXC1oZVwtaXNcLXRpcmVkXC1hbmRcLXdpdGhkcmF3czsKK+S/neeUsuWItuW6piA8IHRoZVwtYmFvXC1qaWFcLXN5c3RlbVwtXChhblwtYWRtaW5pc3RyYXRpdmVcLXN5c3RlbVwtb3JnYW5pemVkXC1vblwtYmFzaXNcLW9mXC1ob3VzZWhvbGRzXCk7CivljIXlt6UgPCB1bmRlcnRha2VcLXRvXC1wZXJmb3JtXC13b3JrXC13aXRoaW5cLWFcLXRpbWVcLWxpbWl0XC1hbmRcLWFjY29yZGluZ1wtdG9cLXNwZWNpZmljYXRpb25zOwor6YOo6aaWIDwgcmFkaWNhbHNcLWJ5XC13aGljaFwtY2hhcmFjdGVyc1wtYXJlXC1hcnJhbmdlZFwtaW5cLXRyYWRpdGlvbmFsXC1jaGluZXNlXC1kaWN0aW9uYXJpZXM7CivpnLjkuLsgPCBhXC1wb3dlcmZ1bFwtY2hpZWZcLW9mXC10aGVcLXByaW5jZXNcLW9mXC10aGVcLXNwcmluZ1wtYW5kXC1hdXR1bW5cLXBlcmlvZFwtXCg3NzBcLTQ3NlwtYmNcKTsKK+ihiCA8IHRoZVwtYmxvb2RcLW9mXC1hXC1zYWNyaWZpY2lhbFwtZm93bFwtd2hpY2hcLXdhc1wtc3ByaW5rbGVkXC1vblwtdGhlXC1kb29yc1wtYW5kXC12ZXNzZWxzOwor46+pIDwgdG9cLXB1dFwtdGhlXC1ncm93aW5nXC11cFwtc2lsa3dvcm1zXC1pblwtZGlmZmVyZW50XC1mcmFtZXNcLWFjY29yZGluZ1wtdG9cLXRoZWlyXC1zaXplczsKK+OasyA8IGFcLWxhZHlcLXRlYWNoZXJcLXRvXC10ZWFjaFwtdGhlXC1wcm9wZXJcLXJ1bGVzXC1vZlwtZmVtYWxlXC1iZWhhdmlvclwtaW5cLWFuY2llbnRcLXRpbWVzOwor5LiN6L6o6I+96bqlIDwgYmVcLXVuYWJsZVwtdG9cLXRlbGxcLWJlYW5zXC1mcm9tXC13aGVhdFwtXC1cLWhhdmVcLW5vXC1rbm93bGVkZ2VcLW9mXC1wcmFjdGljYWxcLW1hdHRlcnM7CivntaUgPCB0b1wtaGFybmVzc1wtYVwtaG9yc2VcLWFcLWJvYXJkXC1pblwtZnJvbnRcLW9mXC1hXC1jYXJyaWFnZVwtZm9yXC10aGVcLWRyaXZlclwtdG9cLWxlYW5cLW9uOwor5IutIDwgdG9cLXdlYXZlXC1zaWxrXC1mYWJyaWNzXC13aXRoXC1ncmVlblwtY29sb3JcLWZvclwtbG9uZ2l0dWRlXC1hbmRcLXdoaXRlXC1mb3JcLWxhdGl0dWRlOwor4628IDwgYVwtcmVjdGFuZ2xlXC1zaGFwZWRcLXBlZ1wtb3JcLXNob3J0XC1wb3N0XC1iZXR3ZWVuXC10aGVcLWJlYW5zXC1hbmRcLXRoZVwtcm9vZlwtdGltYmVyczsKK+aBreWWnOeZvOiyoSA8IGNvbmdyYXR1bGF0aW9uc1wtZm9yXC1nZXR0aW5nXC1yaWNoXC1cKHRyYWRpdGlvbmFsXC1jaGluZXNlXC1uZXdcLXllYXInJ3NcLWZ1dHVyZVwtdXNlOwor55GEIDwgYVwtb3JuYW1lbnRhbFwtcGllY2VcLW9mXC1qYWRlXC1zZXZlcmFsXC1pbmNoZXNcLWFjcm9zc1wtd2l0aFwtYVwtaG9sZVwtaW5cLXRoZVwtY2VudGVyOwor54mh5Li55Y2hIDwgcGVvbnlcLWNhcmRcLVwoY3JlZGl0XC1jYXJkXC1pc3N1ZWRcLWJ5XC1pbmR1c3RyaWFsXC1hbmRcLWNvbW1lcmNpYWxcLWJhbmtcLW9mXC1jaGluYVwpOwor5KykIDwgdG9cLXB1dFwtdGhlXC10aGlja1wtc291cFwtb3JcLWJyb3RoXC1vblwtdG9wXC1vZlwtdGhlXC1yaWNlXC10aGlja1wtY29uZ2VlXC1vclwtcG9ycmlkZ2U7CivlnKjmlrwgPCBcKHRoZVwtcHJvYmxlbVwtb3JcLWV4cGxhbmF0aW9uXC1vclwtYWR2YW50YWdlXC1ldGNcLlwpXC1saWVzXC1pblwtXCh0aGVcLWZhY3RcLXRoYXRcLlwuXC5cKTsKK+SlryA8IGFcLWZhcm1cLXRvb2xcLXRvXC1jcnVzaFwtdGhlXC1jbG9kXC1vZlwtZWFydGhcLWludG9cLXBpZWNlc1wtYW5kXC1tYWtlXC10aGVcLWxhbmRcLWZsYXQ7CivkjZYgPCBhXC1raW5kXC1vZlwtbmV0XC1lcXVpcHRlZFwtd2l0aFwtdHJpY2t5XC1tYWNoaW5lXC11c2VkXC10b1wtY2F0Y2hcLWJpcmRzXC1hbmRcLWJlYXN0czsKK+Whnumfi+ijoeirviA8IFxbamVhblwtbWljaGVsXF1cLXNldmVyaW5vXC1cW3dvcmxkXC1iYW5rXC12aWNlXC1wcmVzaWRlbnRcLFwtZWFzdFwtYXNpYVwtYW5kXC1wYWNpZmljXF07Civkjq0gPCBhXC1raW5kXC1vZlwtZmFybVwtdG9vbFwtbWFkZVwtb2ZcLXR3aXN0ZWRcLXRocm9uXC1zdHJpcHNcLXVzZWRcLXRvXC1mbGF0ZW5cLXRoZVwtbGFuZDsKK+aVmeiokyA8IFwodGVhY2hcLXNvbWVvbmVcLW9yXC1sZWFyblwtYVwpXC1sZXNzb25cLVwoaWVcLFwtb2J0YWluXC13aXNkb21cLWZyb21cLWFuXC1leHBlcmllbmNlXCk7CivkuInlspTlj6MgPCBhdFwtdGhlXC1jcm9zc3JvYWRzXCxcLXRoZVwtbmFtZVwtb2ZcLWFcLWZhbW91c1wtb3BlcmFcLFwtc3RvcnlcLWZyb21cLXNodWlcLWh1XC16aHVhbjsKK+etkyA8IGFcLWhhaXJwaW5cLW9uXC13aGljaFwtdGhlXC1oYWlyXC1pc1wtYm91bmRcLWF0XC10aGVcLWJhY2tcLW9mXC10aGVcLWhlYWRcLlwtMTVcLW9mXC1hZ2U7CivmnY7oh6rmiJAgPCBuYW1lXC1vZlwtYVwtcGVyc29uXCxcLWxpXC16aVwtY2hlbmdcLFwtbGVhZGVyXC1vZlwtbWluZ1wtZHluYXN0eVwtcGVhc2FudFwtcmViZWxsaW9uOwor5pyJ5pyf5b6S5YiRIDwgbGltaXRlZFwtdGVybVwtb2ZcLWltcHJpc29ubWVudFwtXChpZVwsXC1hbnl0aGluZ1wtbGVzc1wtdGhhblwtbGlmZVwtaW1wcmlzb25tZW50XCk7CivmsZ/lhavpu54gPCBcImppYW5nXC16ZW1pbicnc1wtZWlnaHRcLXBvaW50XC1mb3JtdWxhXCJcLVwoZm9yXC1yZXN1bWluZ1wtYVwtZGlhbG9nXC13aXRoXC10YWl3YW5cKTsKK+mEp+S6rua0qiA8IHRhbmdcLWxpYW5nXC1ob25nXC1cKG9wcG9zaXRpb25cLWNhbmRpZGF0ZVwtaW5cLWphblwtMTk5Nlwtc2luZ2Fwb3JlXC1lbGVjdGlvbnNcKTsKK+mWieebruWhnuiBvSA8IHNodXRzXC1vbmUnJ3NcLWV5ZXNcLWFuZFwtc3RvcFwtdXBcLW9uZScnc1wtZWFyc1wtXC1cLWJlXC1vdXRcLW9mXC10b3VjaFwtd2l0aFwtcmVhbGl0eTsKK+esqOmzpeWFiOmjmyA8IGNsdW1zeVwtYmlyZHNcLWhhdmVcLXRvXC1zdGFydFwtZmx5aW5nXC1lYXJseVwtXC1cLXRoZVwtc2xvd1wtbmVlZFwtdG9cLXN0YXJ0XC1lYXJseTsKK+OusiA8IGFcLXNtYWxsXC1yaW5nXC1vclwtYVwtc21hbGxcLXBpZWNlXC1vZlwtYm9hcmRcLWF0dGFjaGVkXC10b1wtdGhlXC1tdXp6bGVcLW9mXC1hblwtb3g7Civpp4HlsrggPCBhXC1sb3dcLXN0b25lXC13YWxsXC1idWlsdFwtYWxvbmdcLXRoZVwtd2F0ZXInJ3NcLWVkZ2VcLXRvXC1wcm90ZWN0XC1hblwtZW1iYW5rbWVudDsKK+eZvuiBnuS4jeWmguS4gOimiyA8IHNlZWluZ1wtZm9yXC1vbmVzZWxmXC1pc1wtYVwtaHVuZHJlZFwtdGltZXNcLWJldHRlclwtdGhhblwtaGVhcmluZ1wtZnJvbVwtb3RoZXJzOwor6KOc5rOVIDwgdHJlYXRtZW50XC1pbnZvbHZpbmdcLXRoZVwtdXNlXC1vZlwtdG9uaWNzXC10b1wtcmVzdG9yZVwtdGhlXC1wYXRpZW50JydzXC1oZWFsdGg7CivktbsgPCBhXC1zbWFsbFwtdHJpcG9kXC1vZlwtYnJvbnplXC13aXRoXC10d29cLWVhcnNcLXRyaXBvZFwtb2ZcLWJyb256ZVwtd2l0aFwtdHdvXC1lYXJzOwor5LiJ5LiNIDwgXCJ0aGVcLXRocmVlXC1ubycnc1wiXC1cKGFuXC1leGFtcGxlXC1vZlwtYW5cLWFiYnJldmlhdGVkXC1zbG9nYW5cLW9yXC1jYXRjaHBocmFzZVwpOwor55m95pyuIDwgdGhlXC1yaGl6b21lXC1vZlwtbGFyZ2VcLWhlYWRlZFwtYXRyYWN0eWxvZGVzXC1cKGF0cmFjdHlsb2Rlc1wtbWFjcm9jZXBoYWlhXCk7CivmnKzojYnntrHnm64gPCBhblwtb3V0bGluZVwtdHJlYXRpc2VcLW9mXC1tZWRpY2FsXC1oZXJic1wsXC1jb21waWxlZFwtYnlcLWxpM1wtc2hpMlwtemhlbjFcLeadjuaZguePjTsKK+eOoCA8IGxhcmdlXC1qYWRlXC10YWJsZXRcLXVzZWRcLWJ5XC1vZmZpY2lhbHNcLWF0XC1jb3VydFwtdG9cLWluZGljYXRlXC10aGVpclwtcmFua3M7CivlkIPlpKfmiLYgPCBtYXNzXC1zZWl6dXJlXC1vZlwtZm9vZFwtZnJvbVwtbGFuZGxvcmRzXC1kdXJpbmdcLWZhbWluZXNcLWJlZm9yZVwtbGliZXJhdGlvbjsKK+SCnCA8IHJvY2t5XC1maW5lXC1zdG9uZVwtd2hpY2hcLWlzXC1saXR0bGVcLWxlc3NcLXZhbHVhYmxlXC10aGFuXC1qYWRlXC10b1wtY29sbGFwc2U7CivjoYYgPCBhblwtYXJ0aXNhblwtdG9cLXNvZnRlblwtcmF3XC1zaWxrXC1ieVwtYm9pbGluZ1wtYW5kXC10b1wtZHllXC10aGVcLWRyZXNzZWRcLXNpbGs7CivmnY7mmYLnj40gPCBsaVwtc2hpXC16aGVuXC1cKDE1MThcLTE1OTNcLFwtZmFtb3VzXC1kb2N0b3JcLFwtYXV0aG9yXC1vZlwtYmVuM1wtY2FvM1wtZ2FuZzFcLW11NDsKK+WFteW8t+mmrOWjryA8IHN0cm9uZ1wtc29sZGllcnNcLWFuZFwtc3R1cmR5XC1ob3JzZXNcLVwtXC1hXC13ZWxsXC10cmFpbmVkXC1hbmRcLXBvd2VyZnVsXC1hcm15Owor6KOOIDwgdG9cLXRha2VcLW9mZlwtdGhlXC1jbG90aGVzXC1hbmRcLWV4cG9zZVwtdGhlXC1ib2R5XC5cLXRvXC1jYXJyeVwtaW5cLXRoZVwtZ2lyZGxlOwor6Y6LIDwgdGhlXC1saW5jaFwtcGluXC1vZlwtYVwtd2hlZWxcLXRvXC1nb3Zlcm5cLW9yXC1jb250cm9sXC10aGVcLW5vaXNlXC1vZlwtYVwtYmFycm93Owor56a95rWB5oSfIDwgXCJiaXJkXC1mbHVcIlwtXChmbHVcLWNhcnJpZWRcLWJ5XC1iaXJkc1wtXC1cLWZvdW5kXC1pblwtaG9uZ1wta29uZ1wtaW5cLWxhdGVcLTE5OTdcKTsKK+SqkCA8IHNvbWV0aGluZ1wtbWFkZVwtb2ZcLWJhbWJvb1wtcHV0XC1pblwtdGhlXC1ib3dcLWNhc2VcLXRvXC1wcmV0ZWN0XC1mcm9tXC1kYW1hZ2U7Civmpa3kvZnlpKflrbggPCBjb2xsZWdlXC1mb3JcLXBlb3BsZVwtd2hvXC1hdHRlbmRcLWFmdGVyXC13b3JrXC1cKGxpdFwuXDpcLXNwYXJlXC10aW1lXC1jb2xsZWdlXCk7Civkh60gPCBjb250YWluZXJzXC1tYWRlXC1vZlwtdGhpblwtYW5kXC1sb25nXC1zdHJpcFwtb2ZcLWJhbWJvb1wtb3JcLXdpbGxvd1wtYnJhbmNoZXM7Civjn6wgPCBhXC1tb3VudGFpblwtaW5cLXRvZGF5JydzXC1zaGFuZG9uZ1wtcHJvdmluY2VcLXNvdXRod2VzdFwtb2ZcLW1lbmd5aW5cLWNvdW50eTsKK+OapSA8IHRvXC1iZWNvbWVcLWFzc29jaWF0ZWRcLXdpdGhcLWVhY2hcLW90aGVyXC1pblwtZ29vZFwtbWFubmVyc1wtYW5kXC1wb2xpdGVuZXNzOwor5a6j5YikIDwgcHJvbm91bmNlXC1hXC1cKGp1ZGljaWFsXClcLXNlbnRlbmNlXC1cKGFmdGVyXC1hXC12ZXJkaWN0XC1pblwtYVwtY291cnRcLW9mXC1sYXdcKTsKK+iSmeS7o+eIviA8IFwod2FsdGVyXClcLW1vbmRhbGVcLVwodXNcLWFtYmFzc2Fkb3JcLXRvXC1qYXBhblwsXC1mb3JtZXJcLXVzXC12aWNlXC1wcmVzaWRlbnRcKTsKK+mZs+e0jeW+tyA8IFwoY2xhaXJlXClcLWNoZW5uYXVsdFwsXC1jb21tYW5kZXJcLW9mXC1mbHlpbmdcLXRpZ2Vyc1wtZHVyaW5nXC13b3JsZFwtd2FyXC1paTsKK+eXheWPiyA8IGFcLWZyaWVuZFwtbWFkZVwtaW5cLWhvc3BpdGFsXC1vclwtcGVvcGxlXC13aG9cLWJlY29tZVwtZnJpZW5kc1wtaW5cLWhvc3BpdGFsOwor5o2V6aKo5o2J5b2xIDwgY2hhc2VcLXRoZVwtd2luZFwtYW5kXC1jbHV0Y2hcLWF0XC1zaGFkb3dzXC1cLVwtbWFrZVwtZ3JvdW5kbGVzc1wtYWNjdXNhdGlvbnM7CivlsLHmmK8gPCBcKGVtcGhhc2l6ZXNcLXRoYXRcLXNvbWV0aGluZ1wtaXNcLXByZWNpc2VseVwtb3JcLWV4YWN0bHlcLXdoYXRcLWlzXC1zdGF0ZWRcKTsKK+SkniA8IGFcLWtpbmRcLW9mXC13ZWFwb25zXC1oZWxkXC1ieVwtdGhlXC1vZmZpY2lhbHNcLWluXC1hdHRlbmRhbmNlXC1pblwtb2xkXC10aW1lczsKK+O5qyA8IGFcLWtpbmRcLW9mXC1hbmltYWxcLWdlbmVyYWxseVwtY2FsbGVkXC1mb3JcLW1pbm9yaXR5XC1ncm91cHNcLWluXC1vbGRcLWNoaW5hOwor47O7IDwgYVwtYmFua1wtb2ZcLWVhcnRoXC1vclwtYW5cLWVtYmFua21lbnRcLXRvXC1ibG9ja1wtdGhlXC1jdXJyZW50XC1vZlwtdGhlXC13YXRlcjsKK+OvoiA8IGFcLXBpZWNlXC1vZlwtY3Jvc3NcLXdpc2VcLWJvYXJkXC11c2VkXC1mb3JcLWZyYW1lXC1vblwtd2hpY2hcLXNpbGt3b3Jtc1wtc3BpbjsKK+e2reeIvuWuuSA8IFwoam9oYW5uZXNcLWxvZGV3aWt1c1wpXC12aWxqb2VuXC1cKHNvdXRoXC1hZnJpY2FuXC1hbWJhc3NhZG9yXC10b1wtdGFpd2FuXCk7CivokZvmtLLlo6kgPCBuYW1lXC1vZlwtYVwtcGxhY2VcLFwtZ2V6aG91YmFcLWRhbVwtb25cLXRoZVwtY2hhbmdqaWFuZ1wtcml2ZXJcLFwtaW5cLXNpY2h1YW47Civkg5ggPCBzaW1wbGVcLWFuZFwtY3J1ZGVcLXRoZVwtc291bmRcLW9mXC1wZWJibGVzXC1vclwtc3RvbmVzXC1rbm9ja2luZ1wtdG9nZXRoZXI7CivjsLEgPCB0b1wtc21lYXJcLXRoZVwtbW91dGhcLXdpdGhcLXRoZVwtYmxvb2RcLW9mXC1hXC12aWN0aW1cLXdoZW5cLXRha2luZ1wtYW5cLW9hdGg7CivkuI3liIblvbzmraQgPCBtYWtlXC1ub1wtZGlzdGluY3Rpb25cLWJldHdlZW5cLXdoYXQnJ3NcLW9uZScnc1wtb3duXC1hbmRcLXdoYXQnJ3NcLWFub3RoZXInJ3M7CivogIHpqaXkvI/mq6rlv5flnKjljYPph4wgPCBcKGxpdFwuXClcLWFuXC1vbGRcLXN0ZWVkXC1pblwtdGhlXC1zdGFibGVcLXN0aWxsXC1hc3BpcmVzXC10b1wtZ2FsbG9wXC0xMDAwXC1saTsKK+Wkp+emuSA8IGRhXC15dVwsXC1uYW1lXC1vZlwtYW5cLWFuY2llbnRcLWhlcm9cLXdob1wtc3VjY2Vzc2Z1bGx5XC1jb250cm9sbGVkXC1mbG9vZHM7Civnja8gPCBhXC10cmliZVwtb2ZcLXNjeXRoaWFuc1wtd2hpY2hcLWludmFkZWRcLWNoaW5hXC1kdXJpbmdcLXRoZVwtaHNpYVwtZHluYXN0eTsKK+melCA8IHNpZGVzXC1vclwtdXBwZXJzXC1vZlwtc2hvZXNcLXRvXC1zdHJldGNoXC1hXC1za2luXC1vblwtYVwtZnJhbWVcLWZvclwtYVwtZHJ1bTsKK+ihqOitiSA8IGlsbG5lc3NcLXRoYXRcLWhhc1wtbm90XC1hdHRhY2tlZFwtdGhlXC12aXRhbFwtb3JnYW5zXC1vZlwtdGhlXC1odW1hblwtYm9keTsKK+Wci+mam+mbu+ipsembu+WgseirruipouWnlOWToeacgyA8IGludGVybmF0aW9uYWxcLWNvbnN1bHRhdGl2ZVwtY29tbWl0dGVlXC1mb3JcLXRlbGVwaG9uZVwtYW5kXC10ZWxlZ3JhcGg7CivkuI3nn6Xlh6Hlub4gPCBjYW4nJ3RcLXRlbGxcLWhvd1wtbWFueVwtdGhlcmVcLWFyZVwtXC1cLXRoZXJlXC1hcmVcLW51bWVyb3VzXC1zaW1pbGFyXC1jYXNlczsKK+SVvSA8IHRoZVwtcmhvZG9kZW5kcm9uXC1cLVwtXC1pdFwtaXNcLXNhaWRcLXRvXC1jYXVzZVwtc2hlZXBcLXRvXC1zdGFnZ2VyXC1hbmRcLWRpZTsKK+m8u+mfu+avjSA8IFwob2ZcLWNoaW5lc2VcLXByb251bmNpYXRpb25cKVwtYVwtdm93ZWxcLWZvbGxvd2VkXC1ieVwtYVwtbmFzYWxcLWNvbnNvbmFudDsKK+W5q+mWkSA8IGhhbmdcLW9uXC10b1wtYW5kXC1zZXJ2ZVwtdGhlXC1yaWNoXC1hbmRcLXBvd2VyZnVsXC1ieVwtbGl0ZXJhcnlcLWhhY2tcLXdvcms7Civpg5wgPCBuYW1lXC1vZlwtZmllZlwtaW5cLXNoYW50b25nXC1iZXN0b3dlZFwtb25cLXRoZVwtZWxkZXN0XC1zb25cLW9mXC13ZW5cLXdhbmc7Civmj4/ntIUgPCB0b1wtdHJhY2VcLW92ZXJcLXJlZFwtY2hhcmFjdGVyc1wtXChhc1wtYVwtbWV0aG9kXC1vZlwtbGVhcm5pbmdcLXRvXC13cml0ZVwpOwor6YeR5rC45Y2XIDwga2ltXC15b25nXC1uYW1cLVwobm9ydGhcLWtvcmVhblwtZGVwdXR5XC1wcmVtaWVyXC1hbmRcLWZvcmVpZ25cLW1pbmlzdGVyXCk7CivmipfmiLAgPCB3YXJcLW9mXC1yZXNpc3RhbmNlXCxcLWVzcGVjaWFsbHlcLXRoZVwtd2FyXC1hZ2FpbnN0XC1qYXBhblwtXCgxOTM3XC0xOTQ1XCk7CivmirHmrpjlrojnvLogPCBjaGVyaXNoXC10aGVcLW91dG1vZGVkXC1hbmRcLXByZXNlcnZlXC10aGVcLW91dHdvcm5cLVwtXC1iZVwtY29uc2VydmF0aXZlOwor6ZaJ5aGe55y8552b5o2J6bq76ZuAIDwgdHJ5XC10b1wtY2F0Y2hcLXNwYXJyb3dzXC13aXRoXC1vbmUnJ3NcLWV5ZXNcLWJsaW5kZm9sZGVkXC1cLVwtYWN0XC1ibGluZGx5Owor5I2/IDwgYVwta2luZFwtb2ZcLWRhbmNlXC1hY2NvbXBhbmllZFwtYnlcLW11c2ljXC1wZXJmb3JtZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+SMniA8IGFcLWtub3RcLXRvXC1oYW5nXC10aGVcLWFwcGFyYXR1c1wtbWFkZVwtb2ZcLXJlZWRcLWZvclwtcmFpc2luZ1wtc2lsa3dvcm1zOwor5IeJIDwgY2FwYWNpdHlcLXVuaXRcLWluXC1mcmFuY2VcLWVxdWFsXC10b1wtb25lXC1odW5kcmVkXC10aW1lc1wtb2ZcLW9uZVwtbGl0cmU7CivjvYggPCBhXC1sYXJnZVwtZWFydGhlbndhcmVcLWphclwtd2l0aFwtYVwtc21hbGxcLW1vdXRoXC1hbmRcLXR3b1wtb3JcLWZvdXJcLWVhcnM7CivjuZAgPCB0b1wtdG93XC1hXC1ib2F0XC1hZ2FpbnN0XC10aGVcLWN1cnJlbnRcLWluXC1zd2lmdFwtc3RyZWFtXC1mcm9tXC10aGVcLWJhbms7CivmsoUgPCBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC13ZXN0ZXJuXC1odW5hblwtdGhhdFwtZmxvd3NcLWludG9cLWRvbmd0aW5nXC1sYWtlOwor57CLIDwgYVwtc3F1YXJlXC1iYXNrZXRcLW9mXC1iYW1ib29cLWZvclwtaG9sZGluZ1wtZ3JhaW5cLXVzZWRcLWF0XC1zYWNyaWZpY2VzOwor5LiN6LK75ZC554Gw5LmL5YqbIDwgYXNcLWVhc3lcLWFzXC1ibG93aW5nXC1vZmZcLWR1c3RcLVwtXC1ub3RcLW5lZWRpbmdcLXRoZVwtc2xpZ2h0ZXN0XC1lZmZvcnQ7CivmlpfmibnmlLkgPCBzdHJ1Z2dsZVwtY3JpdGljaXNtXC10cmFuc2Zvcm1hdGlvblwtXChjdWx0dXJhbFwtcmV2b2x1dGlvblwtc2xvZ2FuXCk7CivpmL/kuI3kvobmj5BcLumYv+S4jemDveeGseilv+aPkCA8IGFiZHVsYWlkaVwtYW11ZHVyZXhpdGlcLVwoY2hhaXJtYW5cLW9mXC14aW5qaWFuZ1wtYXV0b25vbW91c1wtcmVnaW9uXCk7Civpt7QgPCBzaWx2ZXJcLXBoZWFzYW50XC1iYWRnZVwtd29yblwtYnlcLWNpdmlsXC1vZmZpY2lhbHNcLW9mXC10aGVcLTV0aFwtZ3JhZGU7CivljZrlj6TpgJrku4ogPCBjb252ZXJzYW50XC13aXRoXC10aGluZ3NcLXBhc3RcLWFuZFwtcHJlc2VudFwtXC1cLWVydWRpdGVcLWFuZFwtaW5mb3JtZWQ7Civon5UgPCBhXC1zcGVjaWVzXC1vZlwtdG9ydG9pc2VcLWZvdW5kXC1uZWFyXC10aGVcLW1vdXRoXC1vZlwtdGhlXC15ZWxsb3dcLXJpdmVyOwor5LuK6Z+zIDwgbW9kZXJuXC1cKGlcLmVcLlwtbm90XC1hbmNpZW50XClcLXByb251bmNpYXRpb25cLW9mXC1hXC1jaGluZXNlXC1jaGFyYWN0ZXI7Civmlq/nibnlh6Hoq77mma7mtJvmlq8gPCBzdGVwaGFub3BvdWxvc1wtXChlZ1wsXC1mb3JtZXJcLWNsaW50b25cLWFpZGVcLWdlb3JnZVwtc3RlcGhhbm9wb3Vsb3NcKTsKK+OshiA8IHBvc3RodW1vdXNcLXRpdGxlXC1jb25mZXJyZWRcLXVwb25cLWVtcGVyb3JzXC1hbmRcLWVtaW5lbnRcLW9mZmljaWFsczsKK+S4jeWFpeiZjueptOeEieW+l+iZjuWtkCA8IGhvd1wtY2FuXC15b3VcLWNhdGNoXC10aWdlclwtY3Vic1wtd2l0aG91dFwtZW50ZXJpbmdcLXRoZVwtdGlnZXInJ3NcLWxhaXI7Civpnp0gPCB0aGVcLXBpZWNlXC1vZlwtbGVhdGhlclwtdXNlZFwtZm9yXC1zb2xlc1wtb25cLWNoaW5lc2VcLXNob2VzXC5cLWFcLXBhdGNoOwor5aSn6ayn5aSp5a6uIDwgXCJ0aGVcLW1vbmtleVwtY3JlYXRlc1wtaGF2b2NcLWluXC1oZWF2ZW5cIlwsXC1zdG9yeVwtYWJvdXRcLXN1blwtd3VcLWtvbmc7CivolJsgPCBhXC1zbWFsbFwtb3JjaGlkXC1saWtlXC1wbGFudFwtaXRcLWJlYXJzXC13aGl0ZVwtZmxvd2Vyc1wtYVwtZGVuZHJvYml1bTsKK+err+WNiOevgCA8IHRoZVwtZHJhZ29uXC1ib2F0XC1mZXN0aXZhbFwtXCh0aGVcLTV0aFwtZGF5XC1vZlwtdGhlXC01dGhcLWx1bmFyXC1tb250aFwpOwor5LCZIDwgYW5cLWFuY2llbnRcLXVuaXRcLW9mXC1jYXBhY2l0eVwtd2l0aFwtdGhyZWVcLWZlZXRcLWFuZFwtYVwtYmlnXC1vcGVuaW5nOwor5JS5IDwgYVwtZnVuZ3VzXC13aGljaFwtZ3Jvd3NcLW9uXC1yb3R0ZW5cLXBsYW50c1wtYW5kXC1pc1wtZWF0ZW5cLXdoZW5cLWZyZXNoOwor46+jIDwgYVwta2luZFwtb2ZcLWZyYWdyYW50XC10cmVlXC11c2VkXC10b1wtcHJvZHVjZVwtcGVyZnVtZVwtYnlcLWJ1cm5pbmdcLWl0Owor46+hIDwgdG9cLWxhY3F1ZXJcLXNvbWVcLWtpbmRcLW9mXC1hc2hlc1wtb25cLXdvb2RlblwtYXJ0aWNhbHNcLW9yXC1mdXJuaXR1cmU7CivmgrLlpKnmhqvkurogPCBiZW1vYW5cLXRoZVwtc3RhdGVcLW9mXC10aGVcLXVuaXZlcnNlXC1hbmRcLXBpdHlcLXRoZVwtZmF0ZVwtb2ZcLW1hbmtpbmQ7Civmg4vmg5wgPCB0b1wtZmVlbFwtc29ycnlcLWZvclwtYVwtcGVyc29uXC1vdmVyXC1zdGhcLXRoYXRcLXNob3VsZFwtaGF2ZVwtaGFwcGVuZWQ7Civls4sgPCByYW5nZXNcLW9mXC1oaWxsc1wtc3RyZXRjaGluZ1wtb25cLWJleW9uZFwtYW5vdGhlclwtaXJyZWd1bGFyXC1wZWFrczsKK+atgyA8IHNtZWFyXC1vbmUnJ3NcLW1vdXRoXC13aXRoXC1ibG9vZFwtb2ZcLWFcLXZpY3RpbVwtd2hlblwtdGFraW5nXC1hblwtb2F0aDsKK+eZveiMq+iMqyA8IFwob2ZcLW1pc3RcLFwtc25vd1wsXC1mbG9vZHdhdGVyXCxcLWV0Y1wpXC1hXC12YXN0XC1leHBhbnNlXC1vZlwtd2hpdGVuZXNzOwor552l552oIDwgbG9va1wtYXRcLXNvbWVib2R5XC1kaXNkYWluZnVsbHlcLW91dFwtb2ZcLXRoZVwtY29ybmVyXC1vZlwtb25lJydzXC1leWU7CivnvpcgPCB0cmliZXNcLWluXC13ZXN0XC1jaGluYVwtc3Ryb25nXC5cLWVkdWNhdGVkXC5cLW9ic3RpbmF0ZVwuXC1hXC1wYXJ0aWNsZTsKK+iDoemBqSA8IGh1XC1zaGlcLVwoMTg5MVwtMTk2MlwpXCxcLW9yaWdpbmFsXC1wcm9wb25lbnRcLW9mXC1iYWkyXC1odWE0XC13ZW4yXC3nmb3oqbHmloc7Civou43lp5QgPCBtaWxpdGFyeVwtY29tbWlzc2lvblwtb2ZcLXRoZVwtY29tbXVuaXN0XC1wYXJ0eVwtY2VudHJhbFwtY29tbWl0dGVlOwor5LiN5pyN5rC05ZyfIDwgXChvZlwtYVwtc3RyYW5nZXJcKVwtbm90XC1hY2N1c3RvbWVkXC10b1wtdGhlXC1jbGltYXRlXC1vZlwtYVwtbmV3XC1wbGFjZTsKK+aWr+S9qee+hSA8IFwoam9hblwpXC1zcGVyb1wtXCh1bmRlclwtc2VjcmV0YXJ5XC1vZlwtc3RhdGVcLWZvclwtZWNvbm9taWNcLWFmZmFpcnNcKTsKK+S4oyA8IGFuY2llbnRcLWZvcm1cLW9mXC10aGVcLXRlbnRoXC1vZlwtdGhlXC10d2VsdmVcLXRlcnJlc3RyaWFsXC1icmFuY2hlczsKK+ShhSA8IHNvbWV0aGluZ1wtdXNlZFwtdG9cLWJpbmRcLXRoZVwtZnJhbWVcLXdvcmtcLWluXC1hXC1jYXJ0XC1vZlwtb2xkXC10aW1lczsKK+SaqCA8IGFcLXN0cmluZ1wtZmFzdGVuZWRcLXRvXC1hblwtYXJyb3dcLXRvXC1kcmF3XC1pdFwtYmFja1wtYWZ0ZXJcLXNob290aW5nOwor5I6gIDwgdG9cLXR3aXN0XC1vclwtdG9cLWNydW1wbGVcLWJldHdlZW5cLWhhbmRzXC1hbmRcLW1ha2VcLXNvbWV0aGluZ1wtdHVybjsKK+OfuSA8IHRoZVwtYXBwZWFyYW5jZVwtb2ZcLWFcLW1vdW50YWluXC1pc1wtbG9mdHlcLWFuZFwtc3RlZXBcLWFuZFwtcHJvZm91bmQ7CivjnbggPCBhXC1jb25pY2FsXC1jYXBcLXdvcm5cLW9uXC1jZXJlbW9uaW91c1wtb2NjYXNpb25zXC1pblwtYW5jaWVudFwtdGltZXM7CivjmaggPCB0aGVcLXJveWFsXC1kb21haW5zXC1zZXRcLWFwYXJ0XC1pblwtYW5jaWVudFwtdGltZXNcLWZvclwtdGhlXC1lbXBlcm9yOwor54eI56+AIDwgdGhlXC1sYW50ZXJuXC1mZXN0aXZhbFwtXCgxNXRoXC1vZlwtZmlyc3RcLW1vbnRoXC1vZlwtbHVuYXJcLWNhbGVuZGFyXCk7CivooakgPCB0aGVcLW9wZW5cLXNlYW1cLW9mXC1hXC1nYXJtZW50XC13aGljaFwtYWxsb3dzXC1mcmVlZG9tXC1vZlwtbW92ZW1lbnQ7CivlsbogPCBhXC1oaWxsXC13aXRoXC10cmVlc1wtb3JcLWdyYXNzXC1cLVwtc29tZVwtZ2l2ZVwtdGhlXC1vcHBvc2l0ZVwtbWVhbmluZzsKK+WMl+a0iyA8IHRoZVwtcWluZ1wtZHluYXN0eVwtbmFtZVwtZm9yXC10aGVcLWNvYXN0YWxcLXByb3ZpbmNlc1wtb2ZcLWxpYW9uaW5nOwor5YWr5peXIDwgdGhlXC1cImVpZ2h0XC1iYW5uZXJzXCJcLVwobWlsaXRhcnlcLW9yZ2FuaXNhdGlvblwtaW5cLXFpbmdcLWR5bmFzdHlcKTsKK+S2piA8IHVwcGVyXC1hbmRcLWxvd2VyXC10ZWV0aFwtaW5cLW9yZGVyXC1hbmRcLWNvcnJlc3BvbmRpbmdcLWVhY2hcLW90aGVyOwor5KeCIDwgdG9cLXR1cm5cLW92ZXJcLXRoZVwtY2xvZFwtb2ZcLXRoZVwtZWFydGhcLXdpdGhcLWFcLXNob3ZlbFwtb3JcLWFcLXNwYWRlOwor6Jek6YeOIDwgbmFtZVwtb2ZcLWFcLXBlcnNvblwsXC10ZW5nXC15ZVwsXC1hXC1qYXBhbmVzZVwtZnJpZW5kXC1vZlwtbHUzXC14dW40XC3pra/ov4U7Civoj6/ooaggPCBtYXJibGVcLXBpbGxhclwtXChvcm5hbWVudGFsXC1jb2x1bW5cLWluXC1mcm9udFwtb2ZcLXBsYWNlc1wsXC10b21ic1wpOwor5b6F5qWtIDwgdG9cLWF3YWl0XC1qb2JcLWFzc2lnbm1lbnRcLVwodGVybVwtdXNlZFwtb25seVwtaW5cLW1haW5sYW5kXC1jaGluYVwpOwor5aSq5qW15ouzIDwgYVwta2luZFwtb2ZcLXRyYWRpdGlvbmFsXC1jaGluZXNlXC1zaGFkb3dib3hpbmdcLVwodGFpXC1jaGlcLWNodWFuXCk7Civlk4DlhbXlv4Xli50gPCBhblwtYXJteVwtYnVybmluZ1wtd2l0aFwtcmlnaHRlb3VzXC1pbmRpZ25hdGlvblwtaXNcLWJvdW5kXC10b1wtd2luOwor5pyD5LiN5pyDIDwgXChwb3NpbmdcLWFcLXF1ZXN0aW9uXDpcLXdoZXRoZXJcLXNvbWVvbmVcLFwtc29tZXRoaW5nXClcLWNhblwtb3JcLW5vdDsKK+aJruebuCA8IHRoZVwtYXBwZWFyYW5jZVwtb2ZcLWFuXC1hY3Rvclwtb3JcLWFjdHJlc3NcLWluXC1jb3N0dW1lXC1vclwtbWFrZXVwOwor5oqx5L2b6IWzIDwgY2xhc3BcLWJ1ZGRhJydzXC1mZWV0XC1cLVwtcHJvZmVzc1wtZGV2b3Rpb25cLW9ubHlcLXdoZW5cLWluXC10cm91YmxlOwor5ZmeIDwgdGhlXC1tb3ZlbWVudFwtb2ZcLWFcLWZpc2gnJ3NcLW1vdXRoXC1hdFwtdGhlXC1zdXJmYWNlXC1vZlwtdGhlXC13YXRlcjsKK+WUtSA8IHVzZWRcLWluXC1idWRkaGlzdFwtdGV4dHNcLXRvXC10cmFuc2xpdGVyYXRlXC1ub25cLWNoaW5lc2VcLXNvdW5kczsKK+SggiA8IG5hbWVcLW9mXC1hXC1wb3dlcmZ1bFwtZmV1ZGFsXC1zdGF0ZVwtd2hpY2hcLWV4aXN0ZWRcLTc0MFwtMzMwXC1iXC5jXC47CivklrYgPCB0b1wtcmFpc2VcLXVwXC10aGVcLW5vc2VcLWluXC1vcmRlclwtdG9cLWdldFwtdGhlXC1idWdzXC1pblwtdGhlXC1lYXJ0aDsKK+ibi+iKsea5ryA8IGNsZWFyXC1zb3VwXC1jb250YWluaW5nXC1iZWF0ZW5cLWVnZ1wtYW5kXC1ncmVlblwtbGVhZnlcLXZlZ2V0YWJsZTsKK+SEmyA8IHNlcnZpY2VcLW9yXC1yaXRlc1wtb2ZcLW9mZmVyaW5nXC1zYWNyaWZpY2VzXC1mb3JcLWRyaW5rXC1hbmRcLWZvb2Q7CivjvLAgPCBhblwtZWFydGhlbndhcmVcLWphclwtd2l0aFwtYVwtc21hbGxcLW1vdXRoXC1hbmRcLXR3b1wtb3JcLWZvdXJcLWVhcnM7CivjuJYgPCBoaWRlXC1vclwtdG9cLWtlZXBcLWluXC1zdG9yZVwtdGhlXC12ZWdldGFibGVcLWluXC1jb2xkXC13aW50ZXJcLWRheXM7Civjt58gPCB0b1wtc2NhbGRcLXRoZVwtYnJpc3RsZXNcLW9mZlwtYVwtcGlnXC1vclwtdGhlXC1mZWF0aGVyc1wtb2ZmXC1hXC1iaXJkOwor47CHIDwgdGhlXC1zcXVhcmVcLXBlY2tcLXNoYXBlZFwtYm94XC1oYWxmXC13YXlcLXVwXC1hXC1jaGluZXNlXC1mbGFnc3RhZmY7CivjprwgPCBhXC13b29kZW5cLXBpbGVzXC11c2VkXC1hc1wtYVwtY2FibGVcLXRvXC1tYWtlXC1pbW1vdmFibGVcLW9mXC1hXC1ib2F0Owor46KnIDwgYVwtYm9va1wtb3JcLXBhaW50aW5nXC13aGljaFwtY2FuXC1iZVwtZWFzaWx5XC1mb2xkZWRcLW9yXC1yb2xsZWRcLXVwOwor6YeR5bGx5a+6IDwgamluc2hhblwtdGVtcGxlXCxcLXdoZXJlXC1mYWhhaVwtbGl2ZXNcLVwoZnJvbVwtbWFkYW1cLXdoaXRlXC1zbmFrZVwpOwor5Lim6JKC6JOuIDwgdHdpblwtbG90dXNcLWZsb3dlcnNcLW9uXC1vbmVcLXN0YWxrXC1cLVwtYVwtZGV2b3RlZFwtbWFycmllZFwtY291cGxlOwor5q2m6KGTIDwgd3VzaHVcLFwtbWFydGlhbFwtYXJ0c1wtc3VjaFwtYXNcLXNoYWRvd1wtYm94aW5nXCxcLXN3b3JkcGxheVwsXC1ldGNcLjsKK+S4reWFsSA8IFwoYWJicmV2aWF0aW9uXC1mb3JcKVwtY2hpbmVzZVwtY29tbXVuaXN0XC1cKHBhcnR5XCxcLXJlZ2ltZVwsXC1ldGNcLlwpOwor6ZKyIDwga2luZFwtb2ZcLWdvbmdcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lc1wtYnlcLXRyb29wc1wtb25cLXRoZVwtbWFyY2g7CivmlL/ljZQgPCBjcHBjY1wtXChjaGluZXNlXC1wZW9wbGUnJ3NcLXBvbGl0aWNhbFwtY29uc3VsdGF0aXZlXC1jb21taXR0ZWVcKTsKK+aOoeWPliA8IGFkb3B0XC1vclwtY2FycnlcLW91dFwtXChtZWFzdXJlc1wsXC1wb2xpY2llc1wsXC1jb3Vyc2VcLW9mXC1hY3Rpb25cKTsKK+eZn+S4iSA8IGFcLXdyZXRjaGVkXC1sb29raW5nXC10cmFtcFwtd2hvXC1saXZlc1wtYnlcLWJlZ2dpbmdcLW9yXC1zdGVhbGluZzsKK+ihqOWFhCA8IG1hbGVcLWNvdXNpblwtd2l0aFwtYVwtZGlmZmVyZW50XC1zdXJuYW1lXC1cKG9sZGVyXC10aGFuXC1vbmVzZWxmXCk7Civnn5vpoK3mjIflkJEgPCB0YXJnZXRcLXNvbWVvbmVcLW9yXC1zb21ldGhpbmdcLVwoZm9yXC1hdHRhY2tcLFwtY3JpdGljaXNtXCxcLWV0Y1wuXCk7Civku5nojYkgPCBhXC1raW5kXC1vZlwtcGxhbnRcLXVzZWRcLWFzXC1hXC1tZWRpY2luYWxcLWhlcmJcLWluXC1hbmNpZW50XC10aW1lczsKK+SqsyA8IHNsYW50ZWRcLWZhY2VcLWNhdXNpbmdcLWJ5XC10aGVcLXBhcmFseXplZFwtb2ZcLXRoZVwtZmFjaWFsXC1uZXJ2ZTsKK+adv+iDoSA8IGFcLWJvd2VkXC1zdHJpbmdlZFwtaW5zdHJ1bWVudFwtd2l0aFwtYVwtdGhpblwtd29vZGVuXC1zb3VuZGJvYXJkOwor5J6LIDwgdG9cLWRvXC1hbG1zXC1mb3JcLXRoZVwtYnVkZGhpc3RcLXByaWVzdHNcLW9yXC1tb25rc1wtaW5cLW9sZFwtdGltZXM7CivkmYYgPCBzbGl0c1wtb25cLXRoZVwtbG93ZXJcLXBhcnRcLW9mXC1hXC1nb3duXC1mb3JcLWZyZWVkb21cLW9mXC1tb3ZlbWVudDsKK+SAjyA8IHRvXC1tb3ZlXC1vbmUnJ3NcLWV5ZXNcLXRvXC1leHByZXNzXC1vclwtaW5kaWNhdGVcLXdpdGhcLWV5ZXNcLWRpenp5Owor47+EIDwgdGhlXC1ncm9hbnNcLW9yXC1tb2Fuc1wtZnJvbVwtYVwtcGVyc29uXC1pblwtYVwtY3JpdGljYWxcLWNvbmRpdGlvbjsKK+O2jyA8IGFuXC1hbmNpZW50XC1uYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1oZW5hblwtcHJvdmluY2VcLWRlbmdmZW5neGlhbjsKK+OzhyA8IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLXRvZGF5JydzXC1qaWFuZ3N1XC1wcm92aW5jZVwteWl4aW5nXC1jb3VudHk7Civjq4sgPCBhXC1zaWxrZW5cLWJhbm5lclwtaGFuZ2luZ1wtZnJvbVwtYVwtc3RhZmZcLWJlbnRcLW92ZXJcLWF0XC10aGVcLXRvcDsKK+aWr+WNoeS8r+WLkuekgSA8IHNjYXJib3JvdWdoXC1zaG9hbFwtXChwaGlsaXBwaW5lcycnXC1uYW1lXC1mb3JcLWh1YW5neWFuXC1pc2xhbmRcKTsKK+S4jeaBpeS4i+WVjyA8IG5vdFwtZmVlbFwtYXNoYW1lZFwtdG9cLWFza1wtYW5kXC1sZWFyblwtZnJvbVwtb25lJydzXC1zdWJvcmRpbmF0ZXM7Civni70gPCBhXC1sZWdlbmRhcnlcLWFuaW1hbFwtd2l0aFwtc2hvcnRcLWZvcmVsZWdzXC13aGljaFwtcm9kZVwtYVwtd29sZjsKK+atkCA8IHVzZWRcLWluXC10cmFuc2xpdGVyYXRpbmdcLW5vblwtY2hpbmVzZVwtd29yZHNcLXN1Y2hcLWFzXC1ldXJvcGU7CivmsaggPCBtaVwtcml2ZXJcLWluXC1odW5hblwtcHJvdmluY2VcLXdoZXJlXC1xdVwteXVhblwtZHJvd25lZFwtaGltc2VsZjsKK+axnCA8IGFcLXN0cmVhbVwtd2hpY2hcLWxlYXZlc1wtdGhlXC1tYWluXC1icmFuY2hcLXRoZW5cLWxhdGVyXC1yZXR1cm5zOwor5Y2h5ouJT0sgPCBrYXJhb2tlXC1cKHNpbmdpbmdcLXRvXC1yZWNvcmRlZFwtaW5zdHJ1bWVudGFsXC1hY2NvbXBhbmltZW50XCk7CivkuK3lnIvmsJHoiKogPCBnZW5lcmFsXC1hZG1pbmlzdHJhdGlvblwtb2ZcLWNpdmlsXC1hdmlhdGlvblwtb2ZcLWNoaW5hXC1cKGNhYWNcKTsKK+ijnOmkiiA8IHRha2VcLWFcLXRvbmljXC1vclwtbm91cmlzaGluZ1wtZm9vZFwtdG9cLWJ1aWxkXC11cFwtb25lJydzXC1oZWFsdGg7CivmspnliKnnp5Hku4Dntq3liKkgPCBnZW5lcmFsXC1zaGFsaWthc2h2aWxpXC1cKGhlYWRcLW9mXC11c1wtam9pbnRcLWNoaWVmc1wtb2ZcLXN0YWZmXCk7CivnsIggPCBiYW1ib29cLW1hdFwtdXNlZFwtdG9cLXByb3RlY3RcLWNhcnJpYWdlXC1wYXNzZW5nZXJzXC1mcm9tXC1kdXN0Owor54i8IDwgYVwtc21hbGxcLXRhYmxlXC1vclwtdGllcmVkXC1zdGFuZFwtZmlsbGVkXC13aXRoXC1tZWF0XC1vZmZlcmluZ3M7CivkuInlnIvmvJTnvqkgPCBuYW1lXC1vZlwtYVwtY2xhc3NpY1wtbm92ZWxcLFwtXCJyb21hbmNlXC1vZlwtdGhlXC10aHJlZVwta2luZ2RvbXNcIjsKK+aLvOWRvSA8IHRvXC1iZVwtcmVhZHlcLXRvXC1yaXNrXC1vbmUnJ3NcLWxpZmVcLVwoaW5cLWZpZ2h0aW5nXCxcLXdvcmtcLFwtZXRjXC5cKTsKK+iDjOawtOS4gOaIsCA8IGZpZ2h0XC13aXRoXC1vbmUnJ3NcLWJhY2tcLXRvXC10aGVcLXJpdmVyXC1cLVwtZmlnaHRcLXRvXC13aW5cLW9yXC1kaWU7Civks5ogPCBhXC1zb3J0XC1vZlwtbmlnaHRpbmdhbGVcLXdoaWNoXC1pc1wtc2FpZFwtdG9cLXNpbmdcLWZvclwtdGhlXC1kYXduOwor5KGCIDwgdGhlXC1sb25nXC13b29kZW5cLWJ1bXBlclwtYXRcLXRoZVwtcmVhclwtb2ZcLWFcLWNhcnRcLW9yXC1jYXJyaWFnZTsKK+adr+W8k+ibh+W9sSA8IG1pc3Rha2luZ1wtdGhlXC1yZWZsZWN0aW9uXC1vZlwtYVwtYm93XC1pblwtdGhlXC1jdXBcLWZvclwtYVwtc25ha2U7Civkg74gPCB0b1wtb2ZmZXJcLXNtYWxsXC1waWdcLWFzXC1zYWNyaWZpY2VcLXdoZW5cLXdhcnNoaXBcLWdvZFwtb2ZcLWxpZmU7CivjvKogPCBmcmFnbWVudHNcLW9mXC1hXC10aWxlXC1oYXZlbicndFwtdFwtYmVlblwta2lsblwtZHJpZWRcLWNvbXBsZXRlbHk7CivjtJYgPCBuYW1lXC1vZlwtYVwtc3RyZWFtXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlXC1zb3V0aHdlc3RcLW9mXC1qaW5hbjsKK+OdiSA8IHNwYWNlXC1iZXR3ZWVuXC10aGVcLXRocm9uZVwtYW5kXC10aGVcLXJldGlyaW5nXC1yb29tXC1iZWhpbmRcLWl0Owor45arIDwgdXNlZFwtaW5cLW5hbWVzXC1mb3JcLW1pbm9yaXR5XC1ldGhuaWNcLWdyb3VwXC1pblwtYW5jaWVudFwtY2hpbmE7Civog4zkupXpm6LphIkgPCBsZWF2ZVwtb25lJydzXC1uYXRpdmVcLXBsYWNlXC1cKGVzcGVjaWFsbHlcLWFnYWluc3RcLW9uZScnc1wtd2lsbFwpOwor54KdIDwgc3RpclwtZnJ5XC1vclwtYm9pbFwtaW5cLXdhdGVyXC1vclwtb2lsXC10aGVuXC1jb29rXC13aXRoXC1hXC1zYXVjZTsKK+mBt+aAkiA8IHRvXC10YWtlXC1vbmUnJ3NcLWFuZ2VyXC1vdXRcLW9uXC1zYlwtXCh3aG9cLWRvZXNcLW5vdFwtZGVzZXJ2ZVwtaXRcKTsKK+azoueAvui1t+S8jyA8IG9mXC1hXC1waWVjZVwtb2ZcLXdyaXRpbmdcLXdpdGhcLW9uZVwtY2xpbWF4XC1mb2xsb3dpbmdcLWFub3RoZXI7CivkuI3ngrrlt7LnlJogPCByZWZyYWluXC1mcm9tXC1nb2luZ1wtdG9cLWV4dHJlbWVzXC1pblwtbWV0aW5nXC1vdXRcLXB1bmlzaG1lbnQ7CivkuI3ntITogIzlkIwgPCB0YWtlXC10aGVcLXNhbWVcLWFjdGlvblwtb3JcLXZpZXdcLXdpdGhvdXRcLXByaW9yXC1jb25zdWx0YXRpb247Civpo5vomY7pmoogPCBmbHlpbmdcLXRpZ2Vyc1wtXCh1c1wtYWlybWVuXC1pblwtY2hpbmFcLWR1cmluZ1wtd29ybGRcLXdhclwtdHdvXCk7Civmjpvlpb0gPCB0b1wtaGFuZ1wtdXBcLXByb3Blcmx5XC1cKHRlbGVwaG9uZVwsXC1waWN0dXJlXCxcLWNsb3RoZXNcLFwtZXRjXC5cKTsKK+aLlOavkiA8IGRyYXdcLW91dFwtcHVzXC1ieVwtYXBwbHlpbmdcLWFcLXBsYXN0ZXJcLXRvXC10aGVcLWFmZmVjdGVkXC1hcmVhOwor5byuIDwgYVwtY3Jvd3dib3dcLXdoaWNoXC1kaXNjaGFyZ2VkXC1zZXZlcmFsXC1ib2x0c1wtaW5cLXN1Y2Nlc3Npb247CivkqpkgPCBsZWF0aGVyXC13cmFwcGVkXC1jb2xsYXJcLWZvclwtYVwtZHJhZnRcLWFuaW1hbFwtb2ZcLWFcLWNhcnJpYWdlOwor5KeaIDwgdGhlXC1uYW1lXC1vZlwtYVwtcGxhY2VcLWluXC10aGVcLXNvdXRoXC13ZXN0XC1vZlwtaGViZWlcLXByb3ZpbmNlOwor55Wc5YqbIDwgYW5pbWFsXC1wb3dlcmVkXC1cKGFzXC1vcHBvc2VkXC10b1wtaHVtYW5cLW9yXC1tYWNoaW5lXC1wb3dlcmVkXCk7CivkoZ4gPCBsZWF0aGVyXC10aGF0XC13aW5kXC1yb3VuZFwtb25cLXRoZVwtc2hhZnRzXC1vZlwtYVwtYmlnXC1jYXJyaWFnZTsKK+SNnCA8IGFcLWJhc2tldFwtb3JcLWFcLWNhZ2VcLXVzZWRcLXRvXC1rZWVwXC13aWxkXC1hbmRcLWRvbWVzdGljXC1mb3dsczsKK+SHhiA8IGNhcGFjaXR5XC11bml0XC1pblwtZnJhbmNlXC1lcXVhbFwtdG9cLXRlblwtdGltZXNcLW9mXC1vbmVcLWxpdHJlOwor5IKFIDwgdG9cLWhhdmVcLWluc2lnaHRcLW9yXC12aXNpb25cLW9mXC1hXC1zaW1wbGVcLWFuZFwtaG9uZXN0XC1wZXJzb247Civjsr0gPCBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC10b2RheScnc1wtc291dGh3ZXN0XC1vZlwtc2hhbnhpXC1wcm92aW5jZTsKK+OukCA8IGFcLXJhY2tcLW9yXC1hXC1zdGFuZFwtd2l0aFwtdGhyZWVcLXN0aWNrc1wtdG9cLWNyb3NzXC1lYWNoXC1vdGhlcjsKK+OsuCA8IGFcLWtpbmRcLW9mXC1zZXJ2aWNlc1wtb3JcLWNlcmVtb25pZXNcLW9mXC1vZmZlcmluZ1wtc2FjcmlmaWNlczsKK+aal+iKseWFkiA8IGFcLXZlaWxlZFwtZGVzaWduXC1pbmNpc2VkXC1pblwtcG9yY2VsYWluXC1vclwtd292ZW5cLWluXC1mYWJyaWM7CivlhrDngq3kuI3nm7jlrrkgPCBhc1wtaW5jb21wYXRpYmxlXC1vclwtaXJyZWNvbmNpbGFibGVcLWFzXC1pY2VcLWFuZFwtaG90XC1jb2FsczsKK+W5q+iFlCA8IHZvY2FsXC1hY2NvbXBhbmltZW50XC1pblwtc29tZVwtdHJhZGl0aW9uYWxcLWNoaW5lc2VcLW9wZXJhczsKK+WllOWWqiA8IGhhc3RlblwtaG9tZVwtZm9yXC10aGVcLWZ1bmVyYWxcLW9mXC1hXC1wYXJlbnRcLW9yXC1ncmFuZHBhcmVudDsKK+eZveiKjSA8IFwocGVlbGVkXClcLXJvb3RcLW9mXC1oZXJiYWNlb3VzXC1wZW9ueVwtXChwYWVvbmlhXC1sYWN0aWZsb3JhXCk7Civpg4wgPCBuYW1lXC1vZlwtYW5cLWFuY2llbnRcLWhzaWVuXC1pblwtbW9kZXJuXC1nYW5zdVwvc2hhYW54aVwtYXJlYVwuOwor6IiI6LajIDwgaW50ZXJlc3RcLVwoZGlyZWN0ZWRcLXRvd2FyZHNcLFwtbm90XC1pbmhlcmVudFwtaW5cLXNvbWV0aGluZ1wpOwor5ouU572Q5a2QIDwgY3VwcGluZ1wtdGVjaG5pcXVlXC11c2VkXC1pblwtdHJhZGl0aW9uYWxcLWNoaW5lc2VcLW1lZGljaW5lOwor6ICwIDwgdG9vdGhsZXNzXC1yYWtlXC1mb3JcLWRyYXdpbmdcLWVhcnRoXC1vdmVyXC1uZXdseVwtc293blwtZ3JhaW47CivnkIAgPCBnZW1zXC1vZlwtcGVhcmxzXC1mb3JtZXJseVwtcHV0XC1pbnRvXC10aGVcLW1vdXRoXC1vZlwtYVwtY29ycHNlOwor5qiZ5YW1IDwgcGFyYWRlXC1ndWFyZHNcLVwodXN1YWxseVwtc3BhY2VkXC1vdXRcLWFsb25nXC1wYXJhZGVcLXJvdXRlc1wpOwor5KqDIDwgd2luZVwtY29udGFpbmVyXC11c2VkXC1ieVwtbWlub3JpdHlcLXRyaWJlXC1pblwtYW5jaWVudFwtdGltZXM7CivkpbcgPCBhXC1oaW5nZWRcLXNoZWFyXC1vclwtbG9uZ1wta25pZmVcLWZvclwtY3V0dGluZ1wtZm9kZGVyXC1vclwtaGF5Owor5KSpIDwgYW5cLW9ybmFtZW50XC1hdFwtdGhlXC1lbmRcLW9mXC1hXC1iZWx0XC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivknaogPCB0b1wtcHJvdmlkZVwtbW9uZXlcLW9yXC1naWZ0XC1hbmRcLXRvXC1jb25zdWx0XC1mb3J0dW5lXC10ZWxsZXI7CivkmZsgPCBjZXJlbW9uaWFsXC1kcmVzc1wtb2ZcLXRoZVwtZW1wZXJvclwtb3JcLXZlcnlcLWhpZ2hcLW9mZmljaWFsczsKK+SYpiA8IGFcLWtpbmRcLW9mXC1oZWFkXC1kcmVzc1wtd29yZVwtaW5cLWZ1bmVyYWxcLXJpdGVzXC1pblwtb2xkXC1kYXlzOwor5JifIDwga2luZFwtb2ZcLXNpbGtcLXdvdmVuXC13aXRoXC1kb3VibGVcLXRocmVhZHNcLWFuZFwtd2F0ZXJcLXByb29mOwor5JSRIDwgYVwtd2hpdGVcLWNvbG9yZWRcLWNsdXN0ZXJcLWdyb3duXC1hdFwtdGhlXC10aXBcLW9mXC1jb2dvbmdyYXNzOwor5ImyIDwgdGhpblwtYW5kXC1mbGF0XC1zbGlwc1wtb2ZcLWJhbWJvb1wtdXNlZFwtZm9yXC13ZWF2aW5nXC1wdXJwb3NlOwor47y9IDwgZnJhZ21lbnRzXC1vZlwtYVwtdGlsZVwtaGF2ZW4nJ3RcLWJlZW5cLWtpbG5cLWRyaWVkXC1jb21wbGV0ZWx5Owor47aBIDwgYWZ0ZXJcLWJsb2NraW5nXC10aGVcLXdhdGVyXC1mbG93XC10YWtlc1wtZGlmZmVyZW50XC13YXRlcndheTsKK+OvgCA8IGJvbmRzXC1hbmRcLWZldHRlcnNcLWZvclwtZmFsY29uc1wtYW5kXC1kb2dzXC11c2VkXC1pblwtaHVudGluZzsKK+OSviA8IGFcLWtpbmRcLW9mXC13cmFwcGVyXC11c2VkXC10b1wtY292ZXJcLW92ZXJcLXRoZVwtZmFjZVwtYW5kXC1oZWFkOwor5YWr6Z2i546y55OPIDwgYmVcLXNtb290aFwtYW5kXC1zbGlja1wtXChpblwtZXN0YWJsaXNoaW5nXC1zb2NpYWxcLXJlbGF0aW9uc1wpOwor5YWD5a6156+AIDwgdGhlXC1sYW50ZXJuXC1mZXN0aXZhbFwsXC1qYW51YXJ5XC0xNVwtb25cLXRoZVwtbHVuYXJcLWNhbGVuZGFyOwor55y+5b+X5oiQ5Z+OIDwgXCJ1bml0eVwtb2ZcLXdpbGxcLWlzXC1hblwtaW1wcmVnbmFibGVcLXN0cm9uZ2hvbGRcIlwtXChwcm92ZXJiXCk7CivlgIvpq5TmiLYgPCBhXC1zbWFsbFwtcHJpdmF0ZVwtYnVzaW5lc3NcLVwodXNlZFwtaW5cLW1haW5sYW5kXC1jaGluYVwtb25seVwpOwor5rOV5rW3IDwgbmFtZVwtb2ZcLWFcLWJ1ZGRoaXN0XC1tb25rXCxcLWZhaGFpXCxcLWZyb21cLW1hZGFtXC13aGl0ZVwtc25ha2U7CivooLIgPCB0aGVcLW1pbGxpcGVkZVwtc29tZXRpbWVzXC1jb25mb3VuZGVkXC13aXRoXC10aGVcLWdyb3dcLXdvcm07CivomKcgPCBhXC1wbGFudFwtd2hpY2hcLXJlc2VtYmxlc1wtd2hlYXRcLWJ1dFwtaGFzXC1ub1wtZWRpYmxlXC1ncmFpbjsKK+aZr+W+t+mOriA8IGppbmdcLWRlXC16aGVuXC1cKGFcLWNoaW5lc2VcLWNpdHlcLWluXC1qaWFuZ1wteGlcLeaxn+ilv1wtcHJvdmluY2VcKTsKK+mfi+eIvuW8l+mbt+iMsiA8IFwoZ2VvcmdlXClcLXdlaHJmcml0elwtXChiZWlqaW5nXC1idXJlYXVcLWNoaWVmXC1vZlwtbmV3c3dlZWtcKTsKK+mVt+WfjuWNoSA8IGdyZWF0XC13YWxsXC1jYXJkXC1cKGNyZWRpdFwtY2FyZFwtaXNzdWVkXC1ieVwtYmFua1wtb2ZcLWNoaW5hXCk7Civlk4josp3niL4gPCBcKHdlYnN0ZXJcKVwtaHViYmVsbFwtXChmb3JtZXJcLWFzc29jaWF0ZVwtYXR0b3JuZXlcLWdlbmVyYWxcKTsKK+iQrOWjveWxsSA8IG5hbWVcLW9mXC1hXC1wbGFjZVwsXC1sb25nZXZpdHlcLWhpbGxcLFwtaW5cLXN1bW1lclwtcGFsYWNlXC3poKTlkozlnJI7Civmi4npgqPng4ggPCBcKHByaW5jZVwpXC1yYW5hcmlkZGhcLVwoc29uXC1vZlwta2luZ1wtc2loYW5vdWtcLW9mXC1jYW1ib2RpYVwpOwor5KG0IDwgY2FycmlhZ2VcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lc1wtdG9cLXRha2VcLWVuZW15XC1wb3NpdGlvbjsKK+SfuiA8IHdhbGtcLXNsb3dseVwtYmVjYXVzZVwtb2ZcLXRoZVwtd3JvbmdcLXBvc2l0aW9uXC1vZlwtdGhlXC1mZWV0Owor5ImjIDwgc2xpcHNcLW9mXC1iYW1ib29cLXByb3ZpZGVkXC1mb3JcLXdyaXRpbmdcLWluXC1hbmNpZW50XC10aW1lczsKK+SBuSA8IHRvXC1sb29rXC1hc2thbmNlXC1cLVwtXC1hXC1leHByZXNzaW9uXC1vZlwtZGlzZGFpblwtb3JcLWRlc3Bpc2U7CivjvIwgPCBsb3RcLW9mXC1tZWxvbnNcLWdyb3dpbmdcLWJ1dFwtdGhlXC1yb290XC1pc1wtd2Vha1wtYW5kXC1mZWVibGU7Civju6AgPCBqYWRlXC1oYW5naW5nXC1vblwtdGhlXC1zaWRlc1wtb2ZcLXRoZVwtY2FwXC1pblwtYW5jaWVudFwtdGltZXM7CivjrqMgPCBhXC1waWVjZVwtb2ZcLXdvb2RcLXVzZWRcLXRvXC1zdHJpa2VcLW9mZlwtZ3JhaW5cLWluXC1hXC1tZWFzdXJlOwor45OkIDwgdG9cLXN0cmlwXC10aGVcLXNraW5cLW9mXC10aGVcLWZhY2VcLVwtXC1cLWFuXC1pbW1pbmVudFwtY2FsYW1pdHk7CivljIXlubLliLYgPCBhXC1zeXN0ZW1cLW9mXC1wYXltZW50XC1wYXJ0bHlcLWluXC1raW5kXC1hbmRcLXBhcnRseVwtaW5cLWNhc2g7Civmipfml6XmiLDniK0gPCBcKGNoaW5hJydzXClcLXdhclwtb2ZcLXJlc2lzdGFuY2VcLWFnYWluc3RcLWphcGFuXC1cKDE5MzdcLTE5NDVcKTsKK+mhj+ecn+WNvyA8IG5hbWVcLW9mXC1hXC1wZXJzb25cLFwteWFuXC16aGVucWluZ1wsXC1hXC1mYW1vdXNcLWNhbGxpZ3JhcGhlcjsKK+eZvee0oOiyniA8IFwobmFtZVwtb2ZcLWFcLXBlcnNvblwpXC1iYWlcLXN1emhlblwsXC1mcm9tXC1tYWRhbVwtd2hpdGVcLXNuYWtlOwor56CAIDwgYnJpbGxpYW50bHlcLWNvbG9yZWRcLXN0b25lXC13aXRoXC12ZWluZWRcLXBhdHRlcm5zXC1pblwtaXQ7CivlvYjnkLQgPCB0b1wtcGxheVwtb3JcLXN0cnVtXC1hXC1sdXRlXC1vclwtb3RoZXJcLXN0cmluZ2VkXC1pbnN0cnVtZW50Owor55m96Zm2IDwgd2hpdGVcLXBvdHRlcnlcLVwob2ZcLXNoYW5nXC1keW5hc3RyeVwtMTZcLTExdGhcLWNlbnR1cnlcLWJjXCk7CivljIXlubIgPCBiZVwtcmVzcG9uc2libGVcLWZvclwtYVwtdGFza1wtdW5pdFwtdW50aWxcLWl0XC1pc1wtY29tcGxldGVkOwor5aSn5p2Q5bCP55SoIDwgdXNpbmdcLWFcLXRhbGVudGVkXC1wZXJzb25cLWluXC1hblwtaW5zaWduaWZpY2FudFwtcG9zaXRpb247CivnkLNcLuaItOe2reaWryA8IGx5bm5cLWRhdmlzXC1cKHVzXC1zdGF0ZVwtZGVwYXJ0bWVudFwtYXJtc1wtY29udHJvbFwtZXhwZXJ0XCk7CivlubPmlrkgPCBzcXVhcmVcLVwoYXNcLWluXC1zcXVhcmVcLWZvb3RcLFwtc3F1YXJlXC1taWxlXCxcLXNxdWFyZVwtcm9vdFwpOwor6JmSIDwgYW5cLWFtcGhpYmlvdXNcLWJlYXN0XC1yZXNlbWJsaW5nXC1hXC10aWdlclwtd2l0aFwtb25lXC1ob3JuOwor562BIDwgYVwtYmFtYm9vXC1mcmFtZVwtb25cLXdoaWNoXC1zaWxrd29ybXNcLXNwaW5cLXRoZWlyXC1jb2Nvb25zOwor5Lq65rCR6Iux6ZuE57SA5b+156KRIDwgbW9udW1lbnRcLXRvXC10aGVcLXBlb3BsZScnc1wtaGVyb2VzXCxcLWF0XC10aWFuYW5tZW5cLXNxdWFyZTsKK+WGiyA8IGFcLWRlc2VydFwtYVwtYm9yZGVyXC1wcmFpcmllXC10aGVcLTFzdFwtZm9ybVwtaXNcLXJhZGljYWxcLTEzOwor5LS3IDwgdXNlXC10aGVcLXdob2xlXC1waWVjZVwtb2ZcLWJhcmxleVwtdG9cLWZlcm1lbnRcLWZvclwtYnJld2luZzsKK+StniA8IGFcLWtpbmRcLW9mXC1zYWNyaWZpY2VzXC1vZmZlcmVkXC10b1wtZ29kc1wtb3JcLXRoZVwtZGVjZWFzZWQ7Civkp6AgPCBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC13aGF0XC1pc1wtdG9kYXknJ3NcLXNoYW5kb25nXC1wcm92aW5jZTsKK+SRqSA8IGFcLWtpbmRcLW9mXC1pbmxhbmRcLXJpdmVyc1wtd2Fyc2hpcFwtdXNlZFwtaW5cLXFpbmdcLWR5bmFzdHk7CivkjbggPCBhXC1sZWdlbmRhcnlcLWdvYXRcLWxpa2VcLWFuaW1hbFwtd2l0aFwtNFwtZWFyc1wtYW5kXC05XC10YWlsczsKK+SDqyA8IGFcLXNpbGljYXRlXC1zdWJzdGFuY2VcLWZyb21cLXRoZVwtc2FsdFwtd2VsbHNcLWluXC1zemVjaHdhbjsKK+O4nCA8IHRvXC1nZXRcLXRocm91Z2hcLXRoZVwtc3BhY2VcLWVuY2xvc2VkXC1ieVwtYVwtY29uc3RlbGxhdGlvbjsKK+O3rSA8IGFcLWNvbmljYWxcLWJyaWNrXC1zdHJ1Y3R1cmVcLWluXC13aGljaFwtdG9cLWxpZ2h0XC1hXC1iZWFjb247CivkuI3ogZ7kuI3llY8gPCBub3RcLWJvdGhlclwtdG9cLWFza1wtcXVlc3Rpb25zXC1vclwtbGlzdGVuXC10b1wtd2hhdCcnc1wtc2FpZDsKK+S4puihjOS4jeaCliA8IGJvdGhcLWNhblwtYmVcLWltcGxlbWVudGVkXC13aXRob3V0XC1jb21pbmdcLWludG9cLWNvbmZsaWN0Owor5q2l5q2l54K654efIDwgYWR2YW5jZVwtZ3JhZHVhbGx5XC1hbmRcLWVudHJlbmNoXC1vbmVzZWxmXC1hdFwtZXZlcnlcLXN0ZXA7CivnlL4gPCBncm91bmRcLXRoYXRcLWhhc1wtYmVlblwtdW5kZXJcLWN1bHRpdmF0aW9uXC1mb3JcLW9uZVwteWVhcjsKK+S4gOacm+eEoemamyA8IGFzXC1mYXJcLWFzXC10aGVcLWV5ZVwtY2FuXC1zZWVcLVwobGl0XDpcLWxvb2tcLWFmYXJcLW5vXC1ib3VuZFwpOwor5LiN6KaL57aT5YKzIDwgbm90XC10b1wtYmVcLWZvdW5kXC1pblwtdGhlXC1jbGFzc2ljc1wtXC1cLW5vdFwtYXV0aG9yaXRhdGl2ZTsKK+aSpembsuimi+aXpSA8IGRpc3BlbFwtdGhlXC1jbG91ZHNcLWFuZFwtc2VlXC10aGVcLXN1blwtXC1cLXJlc3RvcmVcLWp1c3RpY2U7Civmr5TkuIrkuI3otrPmr5TkuIvmnInkvZkgPCBmYWxsXC1zaG9ydFwtb2ZcLXRoZVwtYmVzdFwtYnV0XC1iZVwtYmV0dGVyXC10aGFuXC10aGVcLXdvcnN0Owor55m95Yaw5YawIDwgcGFpXC1waW5nXC1waW5nXC1cKHdlbGxcLWtub3duXC10YWl3YW5cLXBlcmZvcm1pbmdcLWFydGlzdFwpOwor5ouJ6LKdIDwgXChqb2huXClcLXJhYmVcLVwoZ2VybWFuXC1leWV3aXRuZXNzXC10b1wtbmFuamluZ1wtbWFzc2FjcmVcKTsKK+W3q+WxsSA8IG10XC5cLXd1XCxcLW9uXC10aGVcLWNoYW5namlhbmdcLXJpdmVyXC1ieVwtdGhlXC10aHJlZVwtZ29yZ2VzOwor56ahIDwgYVwtc2FjcmlmaWNlXC1hdFwtdGhlXC1iZWdpbm5pbmdcLW9mXC1hXC1taWxpdGFyeVwtY2FtcGFpZ247CivnpK4gPCBhbmNpZW50XC1iYWxsaXN0YVwtZm9yXC10aHJvd2luZ1wtaGVhdnlcLXN0b25lc1wtYVwtY2Fubm9uOwor5o2V5L+YIDwgY2FwdHVyZVwtZW5lbXlcLXBlcnNvbm5lbFwtXChmb3JcLWludGVsbGlnZW5jZVwtcHVycG9zZXNcKTsKK+S8r+aBqeaWryA8IFwobmljaG9sYXNcKVwtYnVybnNcLVwodXNcLXN0YXRlXC1kZXBhcnRtZW50XC1zcG9rZXNwZXJzb25cKTsKK+SvoCA8IHRoZVwtZml2ZVwtbG93ZXN0XC1waWVjZXNcLW9mXC1ib25lXC1vZlwtdGhlXC1zcGluYWxcLWNvbHVtbjsKK+SspiA8IGZvb2RcLWl0ZW1zXC1tZXJlbHlcLWFycmFuZ2VkXC1mb3JcLWRpc3BsYXlcLXB1cnBvc2VcLW9ubHk7CivkmZEgPCBhXC1waWVjZVwtb2ZcLXNhY2tjbG90aFwtd29yblwtb25cLXRoZVwtYnJlYXN0XC1pblwtbW91cm5pbmc7Civpj6LlrqIgPCBhcm1lZFwtZXNjb3J0XC1cKG9mXC10cmF2ZWxsZXJzXC1vclwtbWVyY2hhbnRzJydcLWNhcmF2YW5zXCk7CivkiLEgPCBhblwtb3BlblwtYmFtYm9vXC1iYXNrZXRcLXVzZWRcLXRvXC1mZWVkXC1kb21lc3RpY1wtYW5pbWFsczsKK+OqtSA8IGhhbGZcLW9mXC1hXC11bml0XC1vZlwtbWVhc3VyZW1lbnRcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+OhiCA8IHRoZVwtcm9wZXNcLWF0dGFjaGVkXC10b1wtdGhlXC1iaWVyXC1hbmRcLWhlbGRcLWJ5XC1tb3VybmVyczsKK+OapCA8IGFcLWxhZHlcLW9mZmljZXJcLW9mXC10aGVcLW1vbmFyY2gnJ3NcLXBhbGFjZVwtaW5cLW9sZFwtdGltZXM7CivlronmraXnlbbou4ogPCB3YWxrXC1vdmVyXC1sZWlzdXJlbHlcLWluc3RlYWRcLW9mXC1yaWRpbmdcLWluXC1hXC1jYXJyaWFnZTsKK+iyneavjSA8IHRoZVwtYnVsYlwtb2ZcLXRoZVwtZnJpdGlsbGFyeVwtXChmcml0aWxsYXJpYVwtdGh1bmJlcmdpaVwpOwor5ZCN5YudIDwgYVwtcGxhY2VcLWZhbW91c1wtZm9yXC1pdHNcLXNjZW5lcnlcLW9yXC1oaXN0b3JpY2FsXC1yZWxpY3M7CivmsJHmqIIgPCBtdXNpY1wsXC1lc3BcLlwtZm9sa1wtbXVzaWNcLFwtZm9yXC10cmFkaXRpb25hbFwtaW5zdHJ1bWVudHM7CivlkYAgPCBwYXJ0aWNsZVwtdXNlZFwtdG9cLWV4cHJlc3NcLXN1cnByaXNlXC1vclwtbWlsZFwtZW1waGFzaXM7CivpmZ3opb8gPCBzaGFhbnhpXC1wcm92aW5jZVwsXC1jaGluYVwtXChjYXBpdG9sXC1jaXR5XC1pc1wteGknJ2FuXC3opb/lrolcKTsKK+aXpeaWuSA8IHRoZVwtamFwYW5lc2VcLXNpZGVcLW9yXC1wYXJ0eVwtXChpblwtbmVnb3RpYXRpb25zXCxcLWV0Y1wuXCk7CivkuI3li53mnproiIkgPCB0b29cLW51bWVyb3VzXC10b1wtbWVudGlvblwtaW5kaXZpZHVhbGx5XC1vclwtb25lXC1ieVwtb25lOwor6Z23IDwgdGhlXC1sZWF0aGVyXC1iZWx0XC10aGF0XC1jb25uZWN0c1wtYVwtaG9yc2VcLXdpdGhcLWFcLWNhcnQ7CivorbwgPCB0b1wtc3VwZXJ2aXNlXC10b1wtY29uZmluZVwtYVwtZ292ZXJubWVudFwtZXN0YWJsaXNobWVudDsKK+apq+aKmCA8IFwoaG9yaXpvbnRhbFwtc3RhcnRpbmdcLXJpZ2h0XC1hbmdsZVwtY2hhcmFjdGVyXC1zdHJva2VcKTsKK+ilv+WuiSA8IHhpJydhblwtXChjaXR5XClcLFwtdGhlXC1jYXBpdG9sXC1jaXR5XC1vZlwtc2hhYW54aVwtcHJvdmluY2U7CivlsI/pnZIgPCBuYW1lXC1vZlwtYVwtcGVyc29uXCxcLXhpYW9xaW5nXCxcLWZyb21cLW1hZGFtXC13aGl0ZVwtc25ha2U7Civoh6jmkbkgPCB0b1wtY29weVwtXChhXC1tb2RlbFwtb2ZcLWNhbGxpZ3JhcGh5XC1vclwtcGFpbnRpbmdcLFwtZXRjXC5cKTsKK+WdqyA8IGFcLXN0YW5kXC1vblwtd2hpY2hcLXRvXC1yZXBsYWNlXC1nb2JsZXRzXC1hZnRlclwtZHJpbmtpbmc7Civlgpnlj5YgPCBiZVwtb25cLXRoZVwtd2FpdGluZ1wtbGlzdFwtXChmb3JcLWFkbWlzc2lvblwtdG9cLWFcLXNjaG9vbFwpOwor5LS9IDwgYVwtc21hbGxcLXJvdW5kXC1waWVjZVwtb2ZcLWRpc3RpbGxlcicnc1wtZ3JhaW5zXC1vclwteWVhc3Q7CivksI4gPCB0b1wtdHdpc3RcLXRoZVwtaGFpclwtaW5cLWFcLWtub3RcLW9uXC10aGVcLXRvcFwtb2ZcLXRoZVwtaGVhZDsKK+SqnSA8IGxlYXRoZXJcLWNvcmRcLXRoYXRcLXdpbmRpbmdcLW9uXC10aGVcLWhhbmRsZVwtb2ZcLWFcLWtuaWZlOwor6LOT6Iez5aaC5q24IDwgZ3Vlc3RzXC1mZWVsXC1hdFwtaG9tZVwtXChpblwtYVwtaG90ZWxcLFwtZ3Vlc3Rob3VzZVwsXC1ldGNcLlwpOwor5KGHIDwgdGhlXC1jcm9zc1wtYmFyXC1hdFwtdGhlXC1lbmRcLW9mXC10aGVcLXBvbGVcLW9mXC1hXC1jYXJyaWFnZTsKK+SegCA8IHRvXC1kZXNpcmVcLWZvclwtbW9yZVwtbW9uZXlcLXRoYW5cLW9uZScnc1wtcmlnaHRmdWxcLXNoYXJlOwor5JitIDwgdGhlXC1wbGVhdGVzXC1vblwtdGhlXC1sYXBlbFwtb2ZcLWFcLWdhcm1lbnRcLW9mXC10aGluXC1zaWxrOwor5JCIIDwgYVwtcGllY2VcLW9mXC1vbmVcLWZvb3RcLXR3b1wtaW5jaGVzXC1kcmllZFwtc2Vhc29uZWRcLW1lYXQ7CivkjYUgPCBjb250YWluZXJzXC1mb3JcLXdhdGVyXC1vclwtd2luZVwtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor5Iu+IDwgY290dG9uXC1hbmRcLXNpbGtcLXRvXC1iZVwtbGFpZFwtYW5kXC1hdHRhY2hlZFwtZWFjaFwtb3RoZXI7CivkiZAgPCBhXC10aGluXC1hbmRcLWxvbmdcLXN0cmlwXC1vZlwtYmFtYm9vXC1mb3JcLW1ha2luZ1wtYmFza2V0czsKK+SIuyA8IGFcLWhlYXZ5XC1tYXRzXC1vZlwtYmFtYm9vXC11c2VkXC1mb3JcLWRlZXBcLXdhdGVyXC1maXNoaW5nOwor5IegIDwgd3JlbmNoXC10b1wtYWRqdXN0XC10aGVcLXN0cmluZ1wtb25cLXN0cmluZ2VkXC1pbnN0cnVtZW50Owor5ISMIDwgdG9cLXBlcmZvcm1cLXJpdGllc1wtaW5cLWhvbm9yXC1vZlwtdGhlXC1hbmNlc3RyYWxcLXRlbXBsZTsKK+SDpiA8IGFcLWZsYXRcLWFuZFwtZ3JlYXRcLXJvY2tcLXBlb3BsZVwtc3F1YXRcLW9yXC1jcm91Y2hcLW9uXC1pdDsKK+O7gCA8IGZpbmVcLXN0b25lXC13aGljaFwtaXNcLWxpdHRsZVwtbGVzc1wtdmFsdWFibGVcLXRoYW5cLWphZGU7CivjsqwgPCBoYWlyXC1kZWNvcmF0aW9uc1wtb25cLWFcLWhlbG1ldFwtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor47GvIDwgZ2V0XC10aGVcLXVuYm9yblwtYmFieVwtZ29hdFwtYnlcLWtpbGxuZ1wtdGhlXC1tb3RoZXJcLWdvYXQ7CivjrrAgPCB0aGVcLXNtYWxsXC1iZWFtXC1zdXBwb3J0aW5nXC10aGVcLXJhZnRlcnNcLWF0XC10aGVcLWVhdmVzOwor46q2IDwgYVwtZHJ5XC1tZWFzdXJlXC0xMFwtb3JcLTVcLXRpbWVzXC10aGF0XC1vZlwtYVwtY2hpbmVzZVwtcGVjazsKK+WwvOi1q+mtryA8IFwoamF3YWhhcmxhbFwpXC1uZWhydVwtXChmaXJzdFwtcHJpbWVcLW1pbmlzdGVyXC1vZlwtaW5kaWFcKTsKK+OflyA8IG5hbWVcLW9mXC1hXC1zbWFsbFwtcHJpbmNpcGFsaXR5XC1pblwtd2hhdFwtaXNcLW5vd1wtc2hhbnhpOwor5pKl5rWq6byTIDwgYVwtZHJ1bVwtc2hhcGVkXC1yYXR0bGVcLVwodXNlZFwtYnlcLXBlZGxhcnNcLW9yXC1hc1wtYVwtdG95XCk7CivlsJbplqPliJfls7YgPCBzZW5rYWt1XC1pc2xhbmRzXC1cKGphcGFuZXNlXC1uYW1lXC1mb3JcLWRpYW95dVwtaXNsYW5kc1wpOwor5pys5pyrIDwgdGhlXC13aG9sZVwtY291cnNlXC1vZlwtYW5cLWV2ZW50XC1mcm9tXC1iZWdpbm5pbmdcLXRvXC1lbmQ7CivpoJPmjKsgPCB3aXRoXC1zeW5jb3BhdGVkXC1jYWRlbmNlXC1cKGJydXNoXC1zdHJva2VcLWluXC1wYWludGluZ1wpOwor57at5ZC+54i+5pePIDwgdGhlXC11eWd1clwtXCh1aWdodXJcKVwtbmF0aW9uYWxpdHlcLFwtbGl2aW5nXC1pblwteGluamlhbmc7CivniYjnlasgPCBhXC1waWN0dXJlXC1wcmludGVkXC1mcm9tXC1hblwtZW5ncmF2ZWRcLW9yXC1ldGNoZWRcLXBsYXRlOwor6YG/6KuxIDwgdGFib29cLWFnYWluc3RcLXVzaW5nXC10aGVcLXBlcnNvbmFsXC1uYW1lc1wtb2ZcLWVtcGVyb3JzOwor5oyJ5LiL6JGr6JiG5rWu6LW355OiIDwgc29sdmVcLW9uZVwtcHJvYmxlbVwtb25seVwtdG9cLWZpbmRcLWFub3RoZXJcLWNyb3BwaW5nXC11cDsKK+S8vSA8IHRyYW5zY3JpcHRpb25cLW9mXC1zYW5za3JpdFwtJydnaGEnJ1wtaW5cLWJ1ZGRoaXN0XC10ZXh0czsKK+WxoyA8IHN0cmF3XC1zYW5kYWxzXC1vclwtc2xpcHBlcnNcLXRoYXRcLWhhdmVcLW5vXC1oZWVsXC1iYWNrczsKK+WMl+Wkp+iNkiA8IHRoZVwtZ3JlYXRcLW5vcnRoZXJuXC13aWxkZXJuZXNzXC1cKGluXC1ub3J0aGVyblwtY2hpbmFcKTsKK+atpuadviA8IHd1c29uZ1wsXC1uYW1lXC1vZlwtYVwtcGVyc29uXCxcLWFcLWhlcm9cLWluXC1zaHVpXC1odVwtemh1YW47CivljYHkupTlpKcgPCAxXC01dGhcLXBhcnR5XC1jb25ncmVzc1wtXChvZlwtY2hpbmVzZVwtY29tbXVuaXN0XC1wYXJ0eVwpOwor5p2O5YWJ6ICAIDwgbGVlXC1rdWFuXC15ZXdcLVwoZm9ybWVyXC1wcmltZVwtbWluaXN0ZXJcLW9mXC1zaW5nYXBvcmVcKTsKK+ioseS7mSA8IG5hbWVcLW9mXC1hXC1wZXJzb25cLFwteHVcLXhpYW5cLFwtZnJvbVwtbWFkYW1cLXdoaXRlXC1zbmFrZTsKK+WEkOebuCA8IGF0dGVuZGFudFwtb2ZcLXRoZVwtYnJpZGVcLW9yXC1icmlkZWdyb29tXC1hdFwtYVwtd2VkZGluZzsKK+ijnOeAiSA8IHJlaW5mb3JjaW5nXC1hbmRcLXJlZHVjaW5nXC1tZXRob2RzXC1cKGluXC1hY3VwdW5jdHVyZVwpOwor5Y2X6I+v5pep5aCxIDwgc291dGhcLWNoaW5hXC1tb3JuaW5nXC1wb3N0XC1cKG5ld3NwYXBlclwtaW5cLWhvbmdcLWtvbmdcKTsKK+W5ueS6iyA8IGFkbWluaXN0cmF0aXZlXC1zZWNyZXRhcnlcLVwoaW5cLWNoYXJnZVwtb2ZcLXNvbWV0aGluZ1wpOwor55eF5YWl6IaP6IKTIDwgdGhlXC1kaXNlYXNlXC1oYXNcLWF0dGFja2VkXC10aGVcLXZpdGFsc1wtXC1cLWJleW9uZFwtY3VyZTsKK+W3q+WzvSA8IHd1eGlhXC1nb3JnZVwsXC1pblwtdGhlXC1jaGFuZ2ppYW5nXC1yaXZlclwtdGhyZWVcLWdvcmdlczsKK+a8jiA8IGFcLXBsYWNlXC13aGVyZVwtc21hbGxcLXN0cmVhbXNcLWZsb3dcLWludG9cLWFcLWxhcmdlXC1vbmU7CivmipjnrYYgPCBhZ2FpbnN0XC10aGVcLWJyaXN0bGVzXC1cKGJydXNoXC1tb3ZlbWVudFwtaW5cLXBhaW50aW5nXCk7Civmqr4gPCBncmFzc3lcLXBsYW50XC13aXRoXC1maWJyZXNcLWZyb21cLXdoaWNoXC1jbG90aFwtaXNcLW1hZGU7CivlsIjnt5ogPCBzcGVjaWFsXC1wdXJwb3NlXC1waG9uZVwtbGluZVwtb3JcLWNvbW11bmljYXRpb25zXC1saW5rOwor5ZyW5YWLIDwgXChnYXJ5XC1sXC5cKVwtdG9va2VyXC1cKG1vdG9yb2xhXC1jaGFpcm1hblwtb2ZcLXRoZVwtYm9hcmRcKTsKK+SwjCA8IHRvXC1iaW5kXC10aGVcLWhhaXJcLWluXC1hXC1rbm90XC1vblwtdGhlXC10b3BcLW9mXC10aGVcLWhlYWQ7CivkqbUgPCB0YW5uZXJcLXdob1wtbWFkZVwtdGhlXC1sZWF0aGVyXC1kcnVtXC1pblwtYW5jaWVudFwtdGltZXM7CivkurrmsJHooYzli5Xpu6ggPCBwZW9wbGUnJ3NcLWFjdGlvblwtcGFydHlcLVwocnVsaW5nXC1wYXJ0eVwtaW5cLXNpbmdhcG9yZVwpOwor5JqZIDwgYVwtc3Bvb25cLWZvclwtY29va2VkXC1yaWNlXC1tYWRlXC1vZlwtaG9yblwtb2ZcLWFuXC1hbmltYWw7CivkjLMgPCBhXC1raW5kXC1vZlwtdW5yZWZpbmVkXC1vclwtdW5wb2xpc2hlZFwtc2lsa2VuXC10ZXh0aWxlczsKK+SKuiA8IGFuXC1pbXBsZW1lbnRcLXRvXC1kcmF3XC1vclwtdG9cLWNvbGxlY3RcLXJvcGVzXC1vclwtY29yZHM7CivkiYMgPCBzbGlwZWRcLW9wZW5cLWJhbWJvb1wtd2l0aFwtdGhlXC1qb2ludHNcLXVzZWRcLWFzXC1hblwtb2FyOwor5ImAIDwgcmVjdGFuZ3VsYXJcLWNoZXN0XC1vclwtYm94XC13b3ZlblwtZnJvbVwtYmFtYm9vXC1zdHJpcHM7CivkhIsgPCB0b1wtcHJheVwtZm9yXC1wcmV2ZW50aW5nXC1vclwtZm9yZXN0YWxsaW5nXC1jYWxhbWl0aWVzOwor5IOuIDwgYVwtc3RvbmVcLWJ1aWxkXC1oeWRyYXVsaWNcLW1lYXN1cmVzXC1pblwtYW5jaWVudFwtdGltZXM7Civjvr8gPCByb2FyXC1vZlwtYXN0aG1hXC1vclwtZXhwZWN0b3JhdGVcLWZyb21cLWFcLWR5aW5nXC1wZXJzb247Civju6ggPCBpbmVcLXN0b25lXC13aGljaFwtaXNcLWxpdHRsZVwtbGVzc1wtdmFsdWFibGVcLXRoYW5cLWphZGU7CivjupAgPCBnZW5lcmFsbHlcLWNhbGxlZFwtZm9yXC1taW5vcml0eVwtZ3JvdXBzXC1pblwtb2xkXC1jaGluYTsKK+OvgiA8IHBpbGxhclwtb3JcLXBvc3RcLW9mXC1hXC1mcmFtZVwtb25cLXdoaWNoXC1zaWxrd29ybXNcLXNwaW47Civjn4sgPCBkZWVwXC1hbmRcLWxldmVsXC1ncm91bmRcLWd1bGx5XC1hdFwtdGhlXC1mb290XC1vZlwtYVwtaGlsbDsKK+OeqiA8IHRoZVwtYXBwZWFyYW5jZVwtb2ZcLXRoZVwtbW91bnRhaW5cLWlzXC1mbGF0XC1hbmRcLXNtb290aDsKK+aWnOmJpCA8IFwoZG93bndhcmRzXC1yaWdodFwtY29uY2F2ZVwtaG9va2VkXC1jaGFyYWN0ZXJcLXN0cm9rZVwpOwor6LGO5oqYIDwgXChkb3dud2FyZHNcLXN0YXJ0aW5nXC1yaWdodFwtYW5nbGVcLWNoYXJhY3Rlclwtc3Ryb2tlXCk7CivogIHlhYQgPCAnJ29sZFwtY2hhcCcnXC1cKGZvcm1cLW9mXC1hZGRyZXNzXC1iZXR3ZWVuXC1tYWxlXC1mcmllbmRzXCk7CivntITnv7Dmi4nosp0gPCBqb2huXC1yYWJlXC1cKGdlcm1hblwtZXlld2l0bmVzc1wtdG9cLW5hbmppbmdcLW1hc3NhY3JlXCk7CivooYUgPCBjb25zZWNyYXRlXC1zYWNyaWZpY2lhbFwtdmVzc2Vsc1wtYnlcLXNtZWFyaW5nXC1ibG9vZDsKK+iZoiA8IG5hbWVcLW9mXC1hbmNpZW50XC1mZXVkYWxcLXN0YXRlXC1pblwtc2hlbnhpXC1hbmRcLWh1bmFuOwor6LeR5rGf5rmWIDwgdG9cLW1ha2VcLWFcLWxpdmluZ1wtYXNcLWFcLXRyYXZlbGxpbmdcLXBlcmZvcm1lclwsXC1ldGNcLjsKK+S6pOaYk+mhjSA8IHN1bVwtb3JcLXZvbHVtZVwtb3JcLWFtb3VudFwtb2ZcLWJ1c2luZXNzXC10cmFuc2FjdGlvbnM7CivpvYkgPCBzdG9wcGFnZVwtb2ZcLXRoZVwtbm9zZVwtdG9cLXNwZWFrXC13aXRoXC1hXC1uYXNhbFwtdHdhbmc7CivmqavnrYYgPCBicmlzdGxlc1wtbHlpbmdcLWRvd25cLVwoYnJ1c2hcLW1vdmVtZW50XC1pblwtcGFpbnRpbmdcKTsKK+S4jeaVoui2iumbt+axoOS4gOatpSA8IGRhcmVcLW5vdFwtZ29cLW9uZVwtc3RlcFwtYmV5b25kXC10aGVcLXByZXNjcmliZWRcLWxpbWl0Owor5o6h6LO8IDwgbWFrZVwtcHVyY2hhc2VzXC1mb3JcLWFuXC1vcmdhbml6YXRpb25cLW9yXC1lbnRlcnByaXNlOwor5q2j5ZyoIDwgaW5cLXRoZVwtcHJvY2Vzc1wtb2ZcLVwoZG9pbmdcLXNvbWV0aGluZ1wtb3JcLWhhcHBlbmluZ1wpOwor6KSvIDwgY2hpbGRyZW4nJ3NcLWdhcm1lbnRzXC5cLWFcLW1hdFwtZm9yXC13cmFwcGluZ1wtZ2FybWVudHM7CivmnpfosZDmraMgPCBsaW5cLWZlbmdcLWNoZW5nXC1cKHRhaXdhblwtbWluaXN0ZXJcLW9mXC10aGVcLWludGVyaW9yXCk7CivloLHlnIsgPCBkZWRpY2F0ZVwtb25lc2VsZlwtdG9cLXRoZVwtc2VydmljZVwtb2ZcLW9uZScnc1wtY291bnRyeTsKK+iRo+W7uuiPryA8IHR1bmdcLWNoZWVcLWh3YVwtXChob25nXC1rb25nXC1sZWFkZXJcLWFmdGVyXC1qdWx5XC0xOTk3XCk7CivnrYbop7ggPCBicnVzaFwtc3Ryb2tlXC1pblwtY2hpbmVzZVwtcGFpbnRpbmdcLWFuZFwtY2FsbGlncmFwaHk7CivkuI3noLTkuI3nq4sgPCB3aXRob3V0XC1kZXN0cnVjdGlvblwtdGhlcmVcLWNhblwtYmVcLW5vXC1jb25zdHJ1Y3Rpb247CivljZfkuqzot68gPCBuYW5qaW5nXC1zdFwuXCxcLWxhcmdlXC1jb21tZXJjaWFsXC1zdHJlZXRcLWluXC1zaGFuZ2hhaTsKK+aioCA8IGFcLXNtYWxsXC1iZWFtXC1zdXBwb3J0aW5nXC10aGVcLXJhZnRlcnNcLWF0XC10aGVcLWVhdmVzOwor5pGjIDwgYVwtaGFuZGZ1bFwuXC10b1wtcGlja1wtdXBcLXdpdGhcLXRoZVwtZmluZ2Vyc1wuXC10b1wtc2VpemU7CivloJggPCBhXC1yYWlzZWRcLXBhdGhcLWJldHdlZW5cLWZpZWxkXC13aGljaFwtYWN0c1wtYXNcLWFcLWR5a2U7CivktpwgPCB0aGVcLXByb2Nlc3NcLXRvXC13aGl0ZW5cLXRoZVwtaXZvcnlcLW9yXC1lbGVwaGFudFwtdHVzazsKK+SuiSA8IGhvcnNlc1wta2VwdFwtYXRcLWFcLWNvdXJpZXJcLXN0YXRpb25cLWluXC1mb3JtZXJcLXRpbWVzOwor5KK1IDwgbmFtZVwtb2ZcLWFuXC1vbGRcLWNvdW50cnlcLWluXC10b2RheScnc1wtaHViZWlcLXByb3ZpbmNlOwor5KGfIDwgYVwtcmluZ1wtb2ZcLXRoZVwtaG9yaXpvbnRhbFwtZnJvbnRcLWJhclwtb25cLWFcLWNhcnJpYWdlOwor5J6bIDwgZGFuY2luZ1wtb2ZcLWFcLWVhc3Rlcm5cLW1pbm9yaXR5XC1ncm91cFwtaW5cLW9sZFwtY2hpbmE7CivknYwgPCBhXC1waWdcLXNlZWtcLWZvclwtZm9vZFwtdGhyb3VnaFwtZGlnZ2luZ1wtb25cLXRoZVwtZWFydGg7CivkkoEgPCBhXC1zbWFsbFwtYm9hdFwtY29ubmVjdGVkXC10b1wtdGhlXC1iYWNrXC1vZlwtYVwtYmlnXC1ib2F0Owor5ImLIDwgYVwtdmFyaWV0eVwtb2ZcLWJhbWJvb1wtc2hvb3RzXC10aGF0XC1zcHJvdXRcLWluXC13aW50ZXI7CivkiJQgPCB3aGlzdGxlXC1tYWRlXC1vZlwtcmVlZFwtd2l0aG91dFwtaG9sZXNcLWZvclwtZmluZ2VyaW5nOwor472ZIDwgb2ZmaWNpYWxcLWluXC1jaGFyZ2VcLW9mXC1mYXJtbGFuZHNcLWluXC1hbmNpZW50XC10aW1lczsKK+OzjiA8IGd1aWRlXC1vclwtbGVhZFwtdG9cLW1ha2VcLXRoZVwtd2F0ZXJcLWZsb3dpbmdcLXNtb290aGx5Owor47KqIDwgd29vbGVuXC1ibGFua2V0XC13aXRoXC1kZWNvcmF0aXZlXC1kZXNpZ25cLW9yXC1wYXR0ZXJuOwor47KoIDwgYVwtZGVjb3JhdGl2ZVwtZmluZVwtYmxhbmtldFwtb25cLXRoZVwtdG9wXC1vZlwtYVwtc2FkZGxlOwor46eLIDwgdG9cLWxlbmd0aGVuXC1hbmRcLWV4dGVudWF0ZVwtXC1cLVwtYXNcLWluXC1tYWtpbmdcLW5vb2RsZTsKK+OgnCA8IHlvdW5nXC1raWRzXC1zbWFydFwtYW5kXC1mYW1pbGlhclwtd2l0aFwtaHVtYW5cLWFmZmFpcnM7Civkvr/kurogPCBzb21lYm9keVwtd2hvXC1oYXBwZW5zXC10b1wtYmVcLW9uXC1oYW5kXC1mb3JcLWFuXC1lcnJhbmQ7CivjmbEgPCBlYXJ0aGVud2FyZVwtdXNlZFwtdG9cLWJha2VcLWNha2VzXC1pblwtbm9ydGhlcm5cLWNoaW5hOwor6Kyd6L6bIDwgY2hlYVwtc2ltXC1cKGNhbWJvZGlhblwtbmF0aW9uYWxcLWFzc2VtYmx5XC1wcmVzaWRlbnRcKTsKK+WklumbuyA8IHJlcG9ydHNcLWZyb21cLWZvcmVpZ25cLVwobm9uXC1jaGluZXNlXClcLW5ld3NcLWFnYW5jaWVzOwor5ZaBIDwgdGhlXC1tb3V0aFwtb2ZcLWFcLWZpc2hcLWF0XC10aGVcLXN1cmZhY2VcLW9mXC10aGVcLXdhdGVyOwor5o+OIDwgdG9cLXB1bGxcLXVwXC10aGVcLXNsZWV2ZXNcLWFuZFwtc3RyZXRjaFwtb3V0XC10aGVcLWFybXM7CivnrqwgPCB0aGVcLWN1dGljbGVcLW9mXC10aGVcLWJhbWJvb1wtYVwtYnJvYWRcLWxlYXZlZFwtYmFtYm9vOwor57235LqGIDwgYVwtbW9kYWxcLXBhcnRpY2xlXC1pbmRpY2F0aW5nXC1cKGRvbicndFwtbWluZFwtaXRcLFwtb2tcKTsKK+mdnOWxsSA8IGNoZW5nXC1zYW5cLVwoZWxlY3RvcmFsXC1jb25zdGl0dWVuY3lcLWluXC1zaW5nYXBvcmVcKTsKK+WFq+S7meahjCA8IG9sZFwtZmFzaGlvbmVkXC1zcXVhcmVcLXRhYmxlXC10b1wtc2VhdFwtZWlnaHRcLXBlb3BsZTsKK+WMheeUouWIsOaItiA8IGZpeGluZ1wtb2ZcLWZhcm1cLW91dHB1dFwtcXVvdGFzXC1mb3JcLWVhY2hcLWhvdXNlaG9sZDsKK+i7viA8IGhvcml6b250YWxcLXdvb2RlblwtYmFyXC1pblwtZnJvbnRcLW9mXC1hXC1zZWRhblwtY2hhaXI7CivmipPpo68gPCBhXC1raW5kXC1vZlwtZm9vZFwtcG9wdWxhclwtYW1vbmdcLWJlbGlldmVyc1wtaW5cLWlzbGFtOwor6JCGIDwgdGhlXC1jYXN0b3JcLW9pbFwtcGxhbnRcLWFsc29cLXVzZWRcLWZvclwtb3RoZXJcLXBsYW50czsKK+WhnuaLieWHoSA8IFwoc29ubnlcKVwtc2VyYXBoaW5cLVwoaGFpdGlhblwtYW1iYXNzYWRvclwtdG9cLXRhaXdhblwpOwor6YeR5aSn5LitIDwga2ltXC1kYWVcLWp1bmdcLVwobmV3bHlcLWVsZWN0ZWRcLXByZXNpZGVudFwtb2ZcLWtvcmVhXCk7Civnmb3mj48gPCBsaW5lXC1kcmF3aW5nXC1pblwtdHJhZGl0aW9uYWxcLWlua1wtYW5kXC1icnVzaFwtc3R5bGU7CivnsKAgPCBhblwtYW5jaWVudFwtdmVzc2VsXC11c2VkXC1mb3JcLWhvbGRpbmdcLWJvaWxlZFwtZ3JhaW47CivojIPmlq/lnaYgPCBcKGRpYW5uZVwpXC1mZWluc3RlaW5cLVwodXNcLXNlbmF0b3JcLWZyb21cLWNhbGlmb3JuaWFcKTsKK+mnsemnneelpeWtkCA8IG5hbWVcLW9mXC1hXC1ub3ZlbFwsXC1sdW9cLXR1b1wteGlhbmd6aVwsXC1ieVwtbGFvXC1zaGVcLeiAgeiIjTsKK+SysCA8IGFcLXNlY29uZFwtbmFtZVwtZm9yXC10aGVcLXBpZ2Vvblwtb3JcLXRoZVwtdHVydGxlXC1kb3ZlOwor6IC256mM5Z+6552j5pyr5LiW6IGW5b6S5pWZ5pyDIDwgdGhlXC1jaHVyY2hcLW9mXC1qZXN1c1wtY2hyaXN0XC1vZlwtbGF0dGVyXC1kYXlcLXNhaW50czsKK+SdpSA8IHRvXC1yb2FyXC1vclwtaG93bFwtZnJhbnRpY1wtYmFya3NcLW9mXC1kb2dzXC1vclwtd29sdmVzOwor5JSkIDwgdGhlXC1sdXNoXC1hbmRcLWx1eHVyaWFudFwtb2ZcLXRoZVwtZ3Jhc3NcLWFuZFwtZmxvd2VyczsKK+a2suaFi+awtCA8IGxpcXVpZFwtd2F0ZXJcLVwoYXNcLW9wcG9zZWRcLXRvXC1zdGVhbVwtb3JcLWljZVwsXC1lXC5nXC5cKTsKK+OvriA8IGFcLWtpbmRcLW9mXC10cmVlXC13aXRoXC1iaWdcLWxlYXZlc1wtYW5kXC1pblwtcmVkXC1jb2xvcjsKK+mAvOS4iuaokeWxsSA8IGJlXC1kcml2ZW5cLXRvXC1qb2luXC10aGVcLWxpYW5nc2hhblwtbW91bnRhaW5cLXJlYmVsczsKK+OUjSA8IGFcLWhpbmdlZFwtc2hlYXJcLW9yXC1sb25nXC1rbmlmZVwtZm9yXC1jdXR0aW5nXC1mb2RkZXI7Civop6PmlL7ou40gPCBwZW9wbGUnJ3NcLWxpYmVyYXRpb25cLWFybXlcLVwoaWVcLFwtdGhlXC1jaGluZXNlXC1hcm15XCk7CivllJDlsbEgPCB0YW5nXC1zaGFuXC1cKGFcLWNoaW5lc2VcLWNpdHlcLWluXC1oZWJlaVwt5rKz5YyXXC1wcm92aW5jZVwpOwor5bi45Lu755CG5LqL5ZyLIDwgcGVybWFuZW50XC1tZW1iZXJcLXN0YXRlXC1cKG9mXC11blwtc2VjdXJpdHlcLWNvdW5jaWxcKTsKK+eSnCA8IGFcLXNlbWljaXJjdWxhclwtamFkZVwtb3JuYW1lbnRcLXVzZWRcLWFzXC1hXC1wZW5kYW50Owor6YG/5auMIDwgYXZvaWRcLWRvaW5nXC1hbnl0aGluZ1wtdGhhdFwtbWF5XC1hcm91c2VcLXN1c3BpY2lvbjsKK+i2mee0q+mZvSA8IHpoYW9cLXppeWFuZ1wtXChmb3JtZXJcLWNoaW5lc2VcLWxlYWRlcnNoaXBcLWZpZ3VyZVwpOwor5aCx5bmVIDwgYW5ub3VuY2VcLXRoZVwtaXRlbXNcLW9uXC1hXC1cKHRoZWF0cmljYWxcKVwtcHJvZ3JhbW1lOwor6KusIDwgdG9cLW9wZW5cLXRvXC1iZWdpblwtdG9cLWV4cGxhaW5cLXRvXC1pbmZvcm1cLWFcLWxldHRlcjsKK+imquWutiA8IHBhcmVudHNcLW9mXC1vbmUnJ3NcLWRhdWdodGVyXC1pblwtbGF3XC1vclwtc29uXC1pblwtbGF3Owor5Y2X6L2F5YyX6L2NIDwgXChmaWdcLlwpXC1hY3RcLWluXC1hXC13YXlcLXRoYXRcLWRlZmVhdHNcLW9uZScnc1wtcHVycG9zZTsKK+eMuSA8IHdpbGRcLWFuaW1hbFwtbWVudGlvbmVkXC1pblwtc2hvcnRcLXN0b3J5XC1ieVwtbHVcLXh1bjsKK+eKvCA8IGFcLWZpZXJjZVwtbW9uZ29saWFuXC13b2xmXC1kcmFnb24nJ3NcLWhlYWRcLW9uXC1yb29mczsKK+a5kyA8IGFuXC1hZmZsdWVudFwtb2ZcLXRoZVwtcml2ZXJcLXlhbmd0emVcLW5lYXJcLWtpdWtpYW5nOwor5q2aIDwgdXNlZFwtaW5cLW5hbWVcLW9mXC1mYW1vdXNcLWtvcmVhblwtcGFpbnRlclwtY2VuZ1wtc2VuOwor5L+d5aSW5bCx6YarIDwgXChvZlwtYVwtcHJpc29uZXJcKVwtcmVsZWFzZWRcLWZvclwtbWVkaWNhbFwtdHJlYXRtZW50Owor5Zac57OWIDwgc3dlZXRcLWdpdmVuXC1vblwtYVwtaGFwcHlcLW9jY2FzaW9uXC1cKGVzcFwuXC13ZWRkaW5nXCk7Civmi5zlo70gPCBjb25ncmF0dWxhdGVcLWFuXC1lbGRlcmx5XC1wZXJzb25cLW9uXC1oaXNcLWJpcnRoZGF5Owor6JK46JK45pel5LiKIDwgYmVjb21pbmdcLW1vcmVcLXByb3NwZXJvdXNcLXdpdGhcLWVhY2hcLXBhc3NpbmdcLWRheTsKK+S2myA8IHRvXC1zZXBhcmF0ZVwtdGhlXC1tZWF0XC1mcm9tXC10aGVcLWJvbmVzXC13aXRoXC10ZWV0aDsKK+SznCA8IGFcLWtpbmRcLW9mXC1iaXJkXC13aGljaFwtc2hhcmVzXC1pdHNcLW5lc3RcLXdpdGhcLXJhdHM7Civkso0gPCBhXC1wZXJjaFwtbGlrZVwtZmlzaFwtd2l0aFwtd2hpdGVcLWJvZHlcLWFuZFwtcmVkXC10YWlsOwor5Km2IDwgc2FkZGxlXC1hbmRcLXJlaW5cLWV0Y1wuXC1mb3JcLXRoZVwtaW1wZXJpYWxcLWNhcnJpYWdlOwor54OP6a2v5pyo6b2KIDwgdXJ1bXFpXC1cKGNhcGl0YWxcLW9mXC14aW5qaWFuZ1wtYXV0b25vbW91c1wtcmVnaW9uXCk7CivlronlnJ/ph43pgbcgPCBoYXRlXC10b1wtbGVhdmVcLWFcLXBsYWNlXC13aGVyZVwtb25lXC1oYXNcLWxpdmVkXC1sb25nOwor5Je9IDwgYVwtc21hbGxcLWdhZGZseVwtdGhhdFwtc3Vja1wtYmxvb2RcLW9mXC1ob3JzZVwtb3JcLWNvdzsKK+SJtCA8IGFcLWJhbWJvb1wtd2FyZVwtdG9cLWNvbGxlY3RcLWFuZFwta2VlcFwtc29tZXRoaW5nXC1pbjsKK+SJhSA8IHNtYWxsXC1iYW1ib29cLXdob3NlXC1qb2ludHNcLWFyZVwtdGhyZWVcLWZlZXRcLWFwYXJ0Owor5ISmIDwgdG9cLXB1dFwtZm9ydGhcLWVhcnNcLWFuZFwtdG9cLWJsb3Nzb21cLW9mXC10aGVcLWdyYWluczsKK+aUv+W6nOapn+mXnOmWi+aUvuezu+e1seS6kumAo+e4veWJhyA8IGdvdmVybm1lbnRcLW9wZW5cLXN5c3RlbVwtaW50ZXJjb25uZWN0aW9uXC1wcm9maWxlOwor472pIDwgY29ubmVjdGVkXC1iYW5rc1wtb2ZcLWVhcnRoXC1vclwtcGF0aHNcLWluXC10aGVcLWZpZWxkOwor5Lim6KGMIDwgaW5cLXBhcmFsbGVsXC1cW2RldmVsb3BtZW50XCxcLWltcGxlbWVudGF0aW9uXCxcLWV0Y1xdOwor47mDIDwgdHdvXC1icmluZGxlZFwtY293c1wtdG9cLXBsb3VnaFwtZmFjZVwtdG9cLWVhY2hcLW90aGVyOwor5Lyv5p2wIDwgXChzYW11ZWxcKVwtYmVyZ2VyXC1cKHVzXC1uYXRpb25hbFwtc2VjdXJpdHlcLWFkdmlzb3JcKTsKK+O2nyA8IGFuXC1hbmNpZW50XC1uZW1lXC1vZlwtYVwtcml2ZXJcLWluXC1zaGFueGlcLWFuZFwtaGViZWk7CivmnbHnm58gPCBhc2VhblwtXChhc3NvY2lhdGlvblwtb2ZcLXNvdXRoZWFzdFwtYXNpYW5cLW5hdGlvbnNcKTsKK+OyiCA8IHRoZVwtbmFtZVwtb2ZcLXRoZVwtbXVzaWNcLW9mXC10aGVcLWxlZ2VuZGFyeVwtZW1wZXJvcjsKK+OskCA8IGFcLXN0YXRlXC1kdXJpbmdcLXRoZVwtcGVyaW9kXC1vZlwtc3ByaW5nXC1hbmRcLWF1dHVtbjsKK+OhmyA8IG5hbWVcLWZvclwtYVwtd29ya21hblwtd2hvXC1hcHBseVwtY29sb3JcLWluXC1wYWludGluZzsKK+W3peWVhumKgOihjCA8IGluZHVzdHJpYWxcLWFuZFwtY29tbWVyY2lhbFwtYmFua1wtb2ZcLWNoaW5hXC1cKGljYmNcKTsKK+OfoiA8IHRoZVwtcm9ja3NcLW9uXC10aGVcLWhpbGxzXC1hcmVcLW9mXC1kaWZmZXJlbnRcLXNoYXBlczsKK+OcvCA8IGNoaWxkcmVuXC1vZlwtb25lJydzXC1icm90aGVyXC1cLVwtXC1uZXBoZXdzXC1vclwtbmllY2VzOwor5pu+57aTIDwgXChyZWZlcnNcLXRvXC1zb21ldGhpbmdcLXRoYXRcLWhhcHBlbmVkXC1wcmV2aW91c2x5XCk7CivjlL0gPCBhXC1raW5kXC1vZlwtd2luZVwtcG90XC1vclwtamFyXC11c2VkXC1pblwtYW5jaWVudFwtdGltZTsKK+OTgyA8IHRvXC1zYWNyaWZpY2VcLWJ5XC1wb3VyaW5nXC1vdXRcLWFcLWxpYmF0aW9uXC1vZlwtd2luZTsKK+ORniA8IGFcLW1haWRcLXdob1wtYWNjb21wYW5pZXNcLWFcLWJyaWRlXC10b1wtaGVyXC1uZXdcLWhvbWU7Civlj6/oposgPCBpdFwtY2FuXC1jbGVhcmx5XC1iZVwtc2VlblwtXCh0aGF0XC10aGlzXC1pc1wtdGhlXC1jYXNlXCk7CivkuovoiIfpoZjpgZUgPCB0aGluZ3NcLWRvbicndFwtdHVyblwtb3V0XC10aGVcLXdheVwteW91XC13YW50XC1vclwtcGxhbjsKK+aFsOWVjyA8IGV4cHJlc3NcLXN5bXBhdGh5XCxcLWdyZWV0aW5nc1wsXC1jb25zb2xhdGlvblwsXC1ldGNcLjsKK+a1t+W+tyA8IGh5ZGVcLVwoZWdcLFwtaG91c2VcLWp1ZGljaWFyeVwtY2hhaXJtYW5cLWhlbnJ5XC1oeWRlXCk7CivlvLXnh4jntZDntrUgPCBiZVwtZGVjb3JhdGVkXC13aXRoXC1sYW50ZXJuc1wtYW5kXC1jb2xvcmVkXC1iYW5uZXJzOwor6ZaJ6ZaA5oCd6YGOIDwgc2h1dFwtb25lc2VsZlwtdXBcLWFuZFwtcG9uZGVyXC1vdmVyXC1vbmUnJ3NcLW1pc3Rha2VzOwor576F5pavIDwgcm90aFwtXChlZ1wsXC1ocndcLWV4ZWN1dGl2ZVwtZGlyZWN0b3JcLWtlbm5ldGhcLXJvdGhcKTsKK+mWiemXnOiHquWuiCA8IGNsb3NlXC10aGVcLWNvdW50cnlcLXRvXC1pbnRlcm5hdGlvbmFsXC1pbnRlcmNvdXJzZTsKK+aXgeiBvSA8IGJlXC1hXC12aXNpdG9yXC1cKGF0XC1hXC1tZWV0aW5nXCxcLWNsYXNzXCxcLXRyaWFsXCxcLWV0Y1wpOwor5LqS6YCa5oCnIDwgaW50ZXJvcGVyYWJpbGl0eVwtXChvZlwtY29tbXVuaWNhdGlvbnNcLWVxdWlwbWVudFwpOwor55WyIDwgdG9cLWN1bHRpdmF0ZVwtbGFuZFwtYnlcLWZpcnN0XC1zZXR0aW5nXC1maXJlXC10b1wtaXQ7Civnr5ogPCByb3VuZFwtb3JcLW92YWxcLWNvdmVyZWRcLWJhc2tldHNcLXdpdGhcLXNob3J0XC1sZWdzOwor5o6o6L6tIDwgdG9cLWRlY2xpbmVcLVwoYW5cLWFwcG9pbnRtZW50XCxcLWludml0YXRpb25cLFwtZXRjXC5cKTsKK+S4jemBv+iJsemaqiA8IHNocmlua1wtb3JcLWZsaW5jaFwtZnJvbVwtbm9cLWRpZmZpY3VsdHlcLW9yXC1kYW5nZXI7Civnmb3nl6IgPCBkeXNlbnRlcnlcLWNoYXJhY3Rlcml6ZWRcLWJ5XC13aGl0ZVwtbXVjb3VzXC1zdG9vbDsKK+iPr+S9lyA8IG5hbWVcLW9mXC1hXC1mYW1vdXNcLWRvY3RvclwtaW5cLW9sZFwtdGltZXNcLFwtaHVhXC10dW87CivnspQgPCBjYWtlc1wtbWFkZVwtZnJvbVwtcmljZVwtZmxvdXJcLXR3aXN0ZWRcLWludG9cLXJpbmdzOwor5oikIDwgdG9cLWluZnJpbmdlXC1hXC10cmFkZVwtbWFya1wtdG9cLXBsZWRnZVwtYW5cLWFydGljbGU7CivpmL/ml7rmm7LmspsgPCBuZ2F3YW5nXC1jaG9lcGVsXC1cKHRpYmV0YW5cLFwtZnVsbGJyaWdodFwtc2Nob2xhclwpOwor5qOS5qeMIDwgd29vZGVuXC1jbHViXC1cKHVzZWRcLXRvXC1iZWF0XC1jbG90aGVzXC1pblwtd2FzaGluZ1wpOwor5YWo5paX54WlIDwgY2h1blwtZG9vXC1od2FuXC1cKGZvcm1lclwtc291dGhcLWtvcmVhblwtcHJlc2lkZW50XCk7CivkuaQgPCBmaXJzdFwtY2hhcmFjdGVyXC1vZlwta29yZWFuXC1wbGFjZVwtbmFtZVwtJydoYWxwaG8nJzsKK+S2qCA8IGluXC10aGVcLW1hbm5lclwtYVwtdG9vdGhsZXNzXC1wZXJzb25cLWNoZXdpbmdcLWZvb2Q7CivkrpsgPCBleHRyYVwtaG9yc2VcLWhhcm5lc3NlZFwtYnlcLXRoZVwtc2lkZVwtb2ZcLXRoZVwtdGVhbTsKK+SjoCA8IG5hbWVcLW9mXC1hXC12aWxsYWdlXC1pblwtdG9kYXknJ3NcLXNpY2h1YW5cLXByb3ZpbmNlOwor5KOfIDwgbmFtZVwtb2ZcLXBhdmlsaW9uXC1pblwtdG9kYXknJ3NcLXNoYW5kb25nXC1wcm92aW5jZTsKK+SgkiA8IGNvdXJ0ZXN5XC1vZlwtYVwtbWlub3JpdHlcLWdyb3VwXC1pblwtYW5jaWVudFwtdGltZXM7CivknbAgPCB0b1wtc3RvcmVcLW9yXC10b1wtYWNjdW11bGF0ZVwtcmljaGVzXC1vclwtdmFsdWFibGVzOwor5JyxIDwgbmFtZVwtb2ZcLWFcLXBhdmlsaW9uXC1pblwtdG9kYXknJ3NcLXNoYW54aVwtcHJvdmluY2U7Civkk50gPCBjaGluZXNlXC1wZW5uaXNldHVtXClcLXBlbm5pc2V0dW1cLWFsb3BlY3Vyb2lkZXNcKTsKK+SLiSA8IGFcLW51bWVyYXJ5XC1hZGp1bmN0XC1mb3JcLXByYWN0aWNhbGx5XC1ldmVyeXRoaW5nOwor5IqjIDwgbGlnaHRcLXllbGxvd1wtZHVzdFwtbGlrZVwtZnVuZ29pZFwtZ3Jvd3RoXC1vblwtd2luZTsKK+SHkiA8IG51bWVyYXJ5XC1hZGp1bmN0XC1mb3JcLXBlcmlvZGljXC10ZXJtc1wtb3JcLWV2ZW50czsKK+O/lyA8IGRpc2Vhc2VcLW9mXC10aGVcLXByaXZhdGVcLXBhcnRcLW9mXC10aGVcLWh1bWFuXC1ib2R5Owor476rIDwgaGVtaXBsZWdpYVwtXC1cLVwtcGFyYWx5c2lzXC1vZlwtaGFsZlwtb2ZcLW9uZScnc1wtYm9keTsKK+O7niA8IGZsb3VyaXNoaW5nXC1hbmRcLXJhZGlhbnRcLW9mXC10aGVcLWNvbG9yZnVsXC1qYWRlczsKK+O5sSA8IG5hbWVcLW9mXC1hXC1kb2dcLWluXC10aGVcLXBlcmlvZFwtb2ZcLXdhcnJpbmdcLXN0YXRlczsKK+OypSA8IGFcLWtpbmRcLW9mXC13b29sZW5cLXRleHRpbGVzXC13aXRoXC1jdXJ2ZWRcLXBhdHRlcm47CivjrbkgPCBuYW1lXC1vZlwtYVwtY291bnR5XC1pblwtdG9kYXknJ3NcLXNoYW5kb25nXC1wcm92aW5jZTsKK+OjryA8IHRoZVwtZHJlc3Nlc1wtdG9zc1wtYW5kXC1mbHlpbmdcLWFib3V0XC1pblwtdGhlXC13aW5kOwor46KvIDwgYm93c1wtdXNlZFwtYnlcLXRoZVwtc29uXC1vZlwtaGVhdmVuXC1cLVwtXC10aGVcLWVtcGVyb3I7CivjoYogPCBhXC1raW5kXC1vZlwtY2FwXC13b3JuXC1ieVwtYW5cLW9mZmljZXJcLWluXC1vbGRcLWNoaW5hOwor5Lq65rCR5aSn5pyD5aCCIDwgZ3JlYXRcLWhhbGxcLW9mXC10aGVcLXBlb3BsZVwsXC1hdFwtdGlhbmFubWVuXC1zcXVhcmU7CivjmasgPCBhXC1mb3VudGFpblwtb3JcLXNwcmluZ1wtb3V0XC1mcm9tXC10aGVcLXVuZGVyZ3JvdW5kOwor45mNIDwgbmFtZVwtb2ZcLWFcLXBsYWNlXC1pblwtdG9kYXknJ3NcLWd1YW5nZG9uZ1wtcHJvdmluY2U7CivmjqLot6/ogIUgPCBwYXRoZmluZGVyXC1cKHNwYWNlXC1jcmFmdFwtc2VudFwtdG9cLW1hcnNcLWJ5XC1uYXNhXCk7Civnlavom4fmt7votrMgPCBydWluXC10aGVcLWVmZmVjdFwtYnlcLWFkZGluZ1wtd2hhdFwtaXNcLXN1cGVyZmx1b3VzOwor5bSU5Lqe55CzIDwgY2hhcmxlc1wteWFoXC1saW5cLXRyaWVcLVwoYXJrYW5zYXNcLXJlc3RhdXJhbnRldXJcKTsKK+WMl+Wkp+ilv+a0i+WFrOe0hOe1hOe5lCA8IHRoZVwtbm9ydGhcLWF0bGFudGljXC10cmVhdHlcLW9yZ2FuaXphdGlvblwtXChuYXRvXCk7CivlsIjmoYjntYQgPCBzcGVjaWFsXC1cKGxlZ2FsXHxqdWRpY2lhbFwpXC1pbnZlc3RpZ2F0aW9uc1wtZ3JvdXA7Civku5fnvqnln7foqIAgPCBzcGVha1wtb3V0XC1vblwtYVwtbWF0dGVyXC1vZlwtcHJpbmNpcGxlXC1vclwtanVzdGljZTsKK+WFteiHqOWfjuS4iyA8IHRoZVwtYXR0YWNraW5nXC1hcm15XC1oYXNcLXJlYWNoZWRcLXRoZVwtY2l0eVwtZ2F0ZXM7CivlkJ7lkJAgPCB0b1wtdGFrZVwtaW5cLWFuZFwtc2VuZFwtb3V0XC1cKGluXC1sYXJnZVwtcXVhbnRpdGllc1wpOwor6ZKnIDwgdW5pdFwtb2ZcLW1lYXN1cmVcLWVxdWl2YWxlbnRcLXRvXC10aGlydHlcLWNhdHRpZXM7CivlprIgPCBjb25jdWJpbmVcLW9mXC1sYXN0XC1ydWxlclwtb2ZcLXRoZVwtc2hhbmdcLWR5bmFzdHk7Civnk7QgPCBjb25jYXZlXC1jaGFubmVsc1wtb2ZcLXRpbGluZ1wtYVwtbG9uZ1wtbmVja2VkXC1qYXI7CivlqrUgPCBhXC1tYWlkXC13aG9cLWFjY29tcGFuaWVzXC1icmlkZVwtdG9cLWhlclwtbmV3XC1ob21lOwor6IOZIDwgbWVhdFwtb2ZmZXJlZFwtaW5cLXNhY3JpZmljZVwtdG9cLW9uZScnc1wtYW5jZXN0b3JzOwor6J+KIDwgYVwtZmx5XC13aGljaFwtaXNcLXVzZWRcLXNpbWlsYXJseVwtdG9cLWNhbnRoYXJpZGVzOwor5pa35qmLIDwgdGhlXC1icm9rZW5cLWJyaWRnZVwtXChhdFwtd2VzdFwtbGFrZVwtaW5cLWhhbmd6aG91XCk7CivlpLHmlZfmmK/miJDlip/kuYvmr40gPCBcImZhaWx1cmVcLWlzXC10aGVcLW1vdGhlclwtb2ZcLXN1Y2Nlc3NcIlwtXChwcm92ZXJiXCk7CivmsKPlip8gPCBxaWdvbmdcLFwtYVwtc3lzdGVtXC1vZlwtZGVlcFwtYnJlYXRoaW5nXC1leGVyY2lzZXM7CivnnIHntJogPCBwcm92aW5jaWFsXC1sZXZlbFwtXChlZ1wsXC1wcm92aW5jaWFsXC1nb3Zlcm5tZW50XCk7CivmrabmiZMgPCBhY3JvYmF0aWNcLWZpZ2h0aW5nXC1pblwtY2hpbmVzZVwtb3BlcmFcLW9yXC1kYW5jZTsKK+api+acrOm+jeWkqumDjiA8IGhhc2hpbW90b1wsXC1yeXV0YXJvXC1cKHByaW1lXC1taW5pc3Rlclwtb2ZcLWphcGFuXCk7CivpqLIgPCB0aGVcLWZlbWFsZVwtb2ZcLWNlcnRhaW5cLWFuaW1hbHNcLXN1Y2hcLWFzXC1ob3JzZXM7CivloLHlpLEgPCByZXBvcnRcLXRoZVwtbG9zc1wtdG9cLXRoZVwtYXV0aG9yaXRpZXNcLWNvbmNlcm5lZDsKK+S/nemkiiA8IHRha2VcLWdvb2RcLWNhcmVcLW9mXC1cKG9yXC1jb25zZXJ2ZVwpXC1vbmUnJ3NcLWhlYWx0aDsKK+W5s+S/oSA8IG9yZGluYXJ5XC1tYWlsXC1cKGFzXC1vcHBvc2VkXC10b1wtYWlyXC1tYWlsXCxcLWV0Y1wuXCk7CivliIbkuqsgPCBvYnRhaW5cLW9uZScnc1wtc2hhcmVcLVwob2ZcLXdlYWx0aFwsXC1yaWdodHNcLFwtZXRjXC5cKTsKK+e0heWgoSA8IHJlZFwtZm9ydFwtXChoaXN0b3JpY1wtYnVpbGRpbmdcLWluXC1kZWxoaVwsXC1pbmRpYVwpOwor54+TIDwgdHdvXC1oZW1pc3BoZXJpY2FsXC1vYmplY3RzXC11c2VkXC1pblwtZGl2aW5hdGlvbjsKK+WFg+WutSA8IHN3ZWV0XC1kdW1wbGluZ3NcLW1hZGVcLW9mXC1nbHV0aW5vdXNcLXJpY2VcLWZsb3VyOwor6IOM5Z+O5YCf5LiAIDwgbWFrZVwtYVwtbGFzdFwtZGl0Y2hcLXN0YW5kXC1iZWZvcmVcLXRoZVwtY2l0eVwtd2FsbDsKK+aVpyA8IHRvXC1waWNrXC11cFwtdGhpbmdcLXdpdGhcLWNob3BzdGlja3NcLW9yXC1waW5jZXJzXC47CivmiYQgPCBsYXJnZVwtcmluZ1wtb25cLWFcLWZyb250XC1kb29yXC11c2VkXC1hc1wtYVwta25vY2tlcjsKK+WrjyA8IHRoZVwtcGxhY2VcLXdoZXJlXC10aGVcLXN1cHJlbWVcLXN0b3Jlc1wtaGlzXC1ib29rczsKK+iHqOWvqyA8IHRvXC1jb3B5XC1cKGFcLW1vZGVsXC1vZlwtY2FsbGlncmFwaHlcLW9yXC1wYWludGluZ1wpOwor5pyI6aSFIDwgbW9vblwtY2FrZVwtXChlc3BcLlwtZm9yXC10aGVcLW1pZFwtYXV0dW1uXC1mZXN0aXZhbFwpOwor55m+5oSf5Lqk6ZuGIDwgYWxsXC1zb3J0c1wtb2ZcLWZlZWxpbmdzXC13ZWxsXC11cFwtaW5cLW9uZScnc1wtaGVhcnQ7CivksYEgPCBhXC1raW5kXC1vZlwtbWVkaXVtXC1zaXplZFwtZmlzaFwtZ3Jvd25cLWluXC10aGVcLXNlYTsKK+SwjyA8IHNwYXJzZVwtaGFpclwtb25cLWFcLWtub3RcLW9uXC10aGVcLXRvcFwtb2ZcLXRoZVwtaGVhZDsKK+SuhiA8IGFcLWhvcnNlXC13aXRoXC1taXhlZFwtY29sb3JcLW9mXC15ZWxsb3dcLWFuZFwtd2hpdGU7CivkqZsgPCBsZWF0aGVyXC1iZWx0XC11c2VkXC10b1wtYmluZFwtb3JcLXJlc3RyYWluXC1hXC1jYXJ0Owor5oqE5a62IDwgdG9cLXNlYXJjaFwtYVwtaG91c2VcLWFuZFwtY29uZmlzY2F0ZVwtcG9zc2Vzc2lvbnM7CivkprkgPCBuYW1lXC1vZlwtYVwtY291bnR5XC1pblwtdG9kYXknJ3NcLXNpY2h1YW5cLXByb3ZpbmNlOwor5KOUIDwgbmFtZVwtb2ZcLWFcLXBhdmlsaW9uXC1pblwtdG9kYXknJ3NcLWhlbmFuXC1wcm92aW5jZTsKK+SjkSA8IGxpdmluZ1wtc3BhY2VcLWZvclwtb25lXC1mYW1pbHlcLWluXC1hbmNpZW50XC10aW1lczsKK+SjhCA8IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLXRvZGF5JydzXC1zaGFuZG9uZ1wtcHJvdmluY2U7CivkorkgPCBuYW1lXC1vZlwtYVwtcGF2aWxpb25cLWluXC10b2RheScnc1wtaHVuYW5cLXByb3ZpbmNlOwor5KKqIDwgYVwtc2xlZGdlXC1mb3JcLXRyYW5zcG9ydGF0aW9uXC1vdmVyXC1tdWRcLW9yXC1zbm93Owor5J+GIDwgdG9cLWtlZXBcLXBlcnNvbnNcLW9mZlwtdGhlXC1yb3V0ZVwtb2ZcLXRoZVwtZW1wZXJvcjsKK+acg+imiyA8IHRvXC1tZWV0XC13aXRoXC1cKHNvbWVvbmVcLXdob1wtaXNcLXBheWluZ1wtYVwtdmlzaXRcKTsKK+SIkCA8IGFuXC1hcmNoZWRcLWZyYW1lXC1tYWRlXC1vZlwtYmFtYm9vXC1vZlwtd29vZFwtYm9hcmQ7Civkhb8gPCBsdXh1cmlhbnRcLW9yXC1leHViZXJhbnRcLW9mXC10aGVcLWdyYWluc1wtZmxvd2VyeTsKK+SDiCA8IG1vdW50YWluXC1yb2Nrc1wtYVwtYmxhY2tcLXN0b25lXC1yZXNlbWJsaW5nXC1qYWRlOwor5IKsIDwgYmlnXC1yb2Nrc1wtb25cLXRoZVwtcml2ZXJzaWRlXC1hblwtYXJjaGVkXC1vcGVuaW5nOwor5IGdIDwgZGVsdWRpbmdcLWFuZFwtY2F1c2luZ1wtZGlzb3JkZXJcLWxpZ2h0c1wtc2hpbmluZzsKK+O9nyA8IHRvXC10aWxsXC1vclwtdG9cLXBsb3VnaFwtdGhlXC1maWVsZHNcLWFuXC1lbmNsb3N1cmU7CivjroQgPCBwdWJsaWNseVwtcG9zdGVkXC1yb2xsXC1vZlwtc3VjY2Vzc2Z1bFwtZXhhbWluZWVzOwor4624IDwgdGhlXC1icmFuY2hlc1wtdG9cLXNwcmVhZFwtb3V0XC1pblwtYWxsXC1kaXJlY3Rpb25zOwor46mJIDwgdG9cLXRha2VcLWFcLXJ1YmJpbmdcLW9mXC1hblwtaW5zY3JpcHRpb25cLW9uXC1zdG9uZTsKK+OjgSA8IHRvXC1lcXVpcHRcLWFcLWJvd1wtd2l0aFwtc2lsa1wtYW5kXC1tdXNjdWxhclwtZmlicmU7CivjnZkgPCB0aGVcLXRoaXJkXC1vZlwtdGhlXC10d2VsdmVcLXRlcnJlc3RyaWFsXC1icmFuY2hlczsKK+mVt+aymeeBoyA8IGNoZXVuZ1wtc2hhXC13YW5cLVwocG91bHRyeVwtbWFya2V0XC1pblwtaG9uZ1wta29uZ1wpOwor5aWn54i+5biD6LO054m5IDwgXChtYWRlbGVpbmVcKVwtYWxicmlnaHRcLVwodXNcLXNlY3JldGFyeVwtb2ZcLXN0YXRlXCk7CivmraPluLjljJYgPCBub3JtYWxpemF0aW9uXC1cKG9mXC1kaXBsb21hdGljXC1yZWxhdGlvbnNcLFwtZXRjXCk7CivlhbXkuI3ljq3oqZAgPCB0aGVyZVwtY2FuXC1uZXZlclwtYmVcLXRvb1wtbXVjaFwtZGVjZXB0aW9uXC1pblwtd2FyOwor5LqU5YWt5Y2B5q2yIDwgXChpblwtb25lJydzXClcLWZpZnRpZXNcLW9yXC1zaXh0aWVzXC1cKHllYXJzXC1vZlwtYWdlXCk7Civpgb/ph43lsLHovJUgPCBhdm9pZFwtdGhlXC1pbXBvcnRhbnRcLWFuZFwtZHdlbGxcLW9uXC10aGVcLXRyaXZpYWw7CivlpKfoiIkgPCBjYXJyeVwtb3V0XC1hXC1sYXJnZVwtc2NhbGVcLVwobWlsaXRhcnlcKVwtb3BlcmF0aW9uOwor5pel5ry4IDwgXChrZWVwXC1pbmNyZWFzaW5nXCxcLWNoYW5naW5nXCxcLWV0Y1wuXClcLWRheVwtYnlcLWRheTsKK+aomeaWsOeri+eVsCA8IHN0YXJ0XC1zb21ldGhpbmdcLW5ld1wtaW5cLW9yZGVyXC10b1wtYmVcLWRpZmZlcmVudDsKK+itsOW4rSA8IHNlYXRcLWluXC1hXC1wYXJsaWFtZW50XC1vclwtbGVnaXNsYXRpdmVcLWFzc2VtYmx5Owor5LmOIDwgaW50ZXJyb2dhdGl2ZVwtb3JcLWV4Y2xhbWF0b3J5XC1maW5hbFwtcGFydGljbGU7CivmvoQgPCBwdXJpZnlcLXdhdGVyXC1ieVwtYWxsb3dpbmdcLXNlZGltZW50XC10b1wtc2V0dGxlOwor5q2fIDwgYVwtZmluYWxcLXBhcnRpY2xlXC11c2VkXC10b1wtZXhwcmVzc1wtYWRtaXJhdGlvbjsKK+aioiA8IHBvaW50ZWRcLXRpcFwtb2ZcLXNvbWV0aGluZ1wtbG9uZ1wtbGlrZVwtYVwtYnJhbmNoOwor5ZOSIDwgYVwtc291bmRcLW1hZGVcLXRvXC1nZXRcLWFcLWhvcnNlXC10b1wtbW92ZVwtZm9yd2FyZDsKK+eQriA8IG9jdGFnb25hbFwtcGllY2VcLW9mXC1qYWRlXC13aXRoXC1ob2xlXC1pblwtbWlkZGxlOwor5ZS8IDwgc3BlYWtpbmdcLWV2aWxcLlwtZ29iYmxpbmdcLXNvdW5kXC1tYWRlXC1ieVwtZHVja3M7CivlpKflip/lkYrmiJAgPCBzdWNjZXNzZnVsbHlcLWFjY29tcGxpc2hlZFwtXChwcm9qZWN0XC1vclwtZ29hbFwpOwor6YCa57edIDwgd2FudGVkXC1ieVwtdGhlXC1wb2xpY2VcLVwoZnVnaXRpdmVcLW9yXC1jcmltaW5hbFwpOwor55yf57SNIDwgXChtb2hhbW1hZFwtYWxpXClcLWppbm5haFwtXChmb3VuZGVyXC1vZlwtcGFraXN0YW5cKTsKK+isneijoeWkqyA8IFwobmF3YXpcKVwtc2hhcmlmXC1cKHByaW1lXC1taW5pc3Rlclwtb2ZcLXBha2lzdGFuXCk7Civpra/os5MgPCBydWJpblwtXChlZ1wsXC10cmVhc3VyeVwtc2VjcmV0YXJ5XC1yb2JlcnRcLXJ1YmluXCk7Civlipvlr7YgPCBsaXBwb1wtXChncm91cFwpXC1cKGluZG9uZXNpYW5cLWJ1c2luZXNzXC1jb25jZXJuXCk7CivlkLPkvZzmo58gPCBnb2hcLWNob2tcLXRvbmdcLVwocHJpbWVcLW1pbmlzdGVyXC1vZlwtc2luZ2Fwb3JlXCk7CivnhKHmiYDnlKjlv4MgPCBlYXRcLXRocmVlXC1zcXVhcmVcLW1lYWxzXC1hXC1kYXlcLWFuZFwtZG9cLW5vXC13b3JrOwor5YG06YuSIDwgb2JsaXF1ZVwtYXR0YWNrXC1cKGJydXNoXC1tb3ZlbWVudFwtaW5cLXBhaW50aW5nXCk7CivpgrQgPCBuYW1lXC1vZlwtYVwtY2l0eVwtaW5cLXRoZVwtYW5jaWVudFwtc3RhdGVcLW9mXC1zb25nOwor54+t6ZaA5byE5panIDwgZGlzcGxheVwtb25lJydzXC1zbGlnaHRcLXNraWxsXC1iZWZvcmVcLWFuXC1leHBlcnQ7CivkuK3lnIvml6XloLEgPCBjaGluYVwtZGFpbHlcLVwoYW5cLWVuZ2xpc2hcLWxhbmd1YWdlXC1uZXdzcGFwZXJcKTsKK+W0h+emjiA8IGNob25nemhlblwsXC1sYXN0XC1lbXBlcm9yXC1vZlwtdGhlXC1taW5nXC1keW5hc3R5Owor55m95a2XIDwgd3JvbmdseVwtd3JpdHRlblwtYW5kXC1taXNwcm9ub3VuY2VkXC1jaGFyYWN0ZXI7CivkuI3lj6/ntYLml6UgPCBiZVwtdW5hYmxlXC10b1wtY2FycnlcLW9uXC1ldmVuXC1mb3JcLWFcLXNpbmdsZVwtZGF5Owor5a+E5LqI5b6I5aSn5pyf5pybIDwgdG9cLXBsYWNlXC1ncmVhdFwtaG9wZVwtb3JcLWV4cGVjdGF0aW9uXC1vblwtXChzdGhcKTsKK+W3peS6uum7qCA8IHdvcmtlcnMnJ1wtcGFydHlcLVwoc2luZ2Fwb3JlXC1vcHBvc2l0aW9uXC1wYXJ0eVwpOwor5bCN562WIDwgY291bnRlcm1lYXN1cmVcLWZvclwtZGVhbGluZ1wtd2l0aFwtYVwtc2l0dWF0aW9uOwor5LaYIDwgdGhlXC1zb3VuZFwtb2ZcLWNoZXdpbmdcLXNvbWV0aGluZ1wtZHJ5XC1hbmRcLWhhcmQ7CivkrrIgPCBob3JzZVwtd2l0aFwtbWl4ZWRcLWNvbG9yc1wtb2ZcLXllbGxvd1wtYW5kXC13aGl0ZTsKK+SmvCA8IHRvXC1kaWdcLWFcLXBhc3NhZ2VcLXRocm91Z2hcLWFcLW1vdW50YWluXC1vclwtaGlsbDsKK+SlkSA8IGFcLWtpbmRcLW9mXC1kZWNvcmF0aW9uXC1vblwtdGhlXC1oZWFkXC1vZlwtYVwtaG9yc2U7Civko68gPCB3aW5lXC1vclwtYW55XC10aGlja1wtZmx1aWRcLW9mXC10aGVcLWJlc3RcLXF1YWxpdHk7Civko5ogPCBuYW1lXC1vZlwtYVwtdmlsbGFnZVwtaW5cLXRvZGF5JydzXC1oZW5hblwtcHJvdmluY2U7Civko5kgPCBuYW1lXC1vZlwtYVwtY291bnR5XC1pblwtdG9kYXknJ3NcLXNoYW54aVwtcHJvdmluY2U7CivkorogPCBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC10b2RheScnc1wtc2ljaHVhblwtcHJvdmluY2U7Civkob8gPCBmcmFtZXNcLW9uXC10aGVcLXNpZGVzXC1hbmRcLWZyb250XC1vZlwtYVwtY2FycmlhZ2U7CivknK8gPCBuYW1lXC1vZlwtYVwtdmFsbGV5XC1pblwtdG9kYXknJ3NcLXNoYW54aVwtcHJvdmluY2U7CivkmL8gPCBzaGlydFwtb3JcLWFcLWphY2tldFwtd2l0aG91dFwtYW55XC1kZWNvcmF0ZWRcLWhlbTsKK+SWgiA8IGFuXC1lZGliXC1sZVwtd2F0ZXJcLXBsYW50XC1cLVwtXC1icmFzZW5pYVwtcHVycHVyY2E7Civkj64gPCB0aGVcLXNpZGVzXC1vZlwtdGhlXC10cnVua1wtZnJvbVwtYXJtcGl0c1wtdG9cLXJpYnM7CivkhY0gPCBzdHJhaWdodFwtdXB3YXJkXC1vZlwtdGhlXC13aGVhdFwtYW5kXC1yaWNlXC1wbGFudDsKK+SCuCA8IHRvXC1zbWFzaFwtb3JcLXRvXC1rbm9ja1wtdG9cLXBpZWNlc1wtb2ZcLXRoZVwtc3RvbmU7CivnrYblipsgPCB2aWdvdXJcLW9mXC1zdHJva2VzXC1pblwtY2FsbGlncmFwaHlcLW9yXC1kcmF3aW5nOwor572w6YWSIDwgdG9cLWRyaW5rXC1hc1wtdGhlXC1yZXN1bHRcLW9mXC1oYXZpbmdcLWxvc3RcLWFcLWJldDsKK+O+vCA8IHRvXC1zdWZmZXJcLWFcLXN0cm9rZVwtb2ZcLXBhcmFseXNpc1wtb3JcLWFwb3BsZXh5Owor472rIDwgc2VlZHNcLW9mXC10aGVcLXBsYW50XC1hbGxpZWRcLXRvXC10aGVcLXdhdGVyXC1saWx5Owor47i3IDwgYVwta2luZFwtb2ZcLWNhdHRsZVwtd2l0aFwtdHdvXC1ob3Juc1wtc3RyYWlnaHRcLXVwOwor47asIDwgYnJpZ2h0XC1saWdodHNcLWFuZFwtaWxsdW1pbmF0aW9uc1wtb2ZcLXRoZVwtZmlyZTsKK+O2hiA8IG5hbWVcLW9mXC1hXC1zdHJlYW1cLWluXC1oZWJlaVwtcHJvdmluY2VcLWhlbmdzaGFuOwor5pav5L2p5p6XIDwgc3BlbGxpbmdcLVwoZWdcLFwtc3BlbGxpbmdcLWVudGVydGFpbm1lbnRcLWdyb3VwXCk7CivjrqsgPCBhXC13b29kZW5cLWFydGljYWxcLXRvXC1iZVwtdXNlZFwtdG9cLWFkanVzdFwtYVwtYm93Owor46uNIDwgdGhlXC1zY2FsbG9wc1wtYWxvbmdcLXRoZVwtbG93ZXJcLWVkZ2VcLW9mXC1hXC1mbGFnOwor46ePIDwgdG9cLWNhcnJ5XC1vblwtdGhlXC1zaG91bGRlcnNvZlwtdHdvXC1vclwtbW9yZVwtbWVuOwor5pif6auUIDwgY2VsZXN0aWFsXC1ib2R5XC1cKGVnXCxcLXBsYW5ldFwsXC1zYXRlbGxpdGVcLFwtZXRjXCk7Civjm7YgPCBkb1wtbm90XC1jYXJlXC1hYm91dFwtYXBwZWFyYW5jZVwtYW5kXC1kZXBvcnRtZW50Owor45qUIDwgaW5zdHJ1bWVudFwtb2ZcLXRvcnR1cmVcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+OZhyA8IHRoZVwtY2F0dGxlXC1hbmRcLWhvcnNlc1wtdHJhbXBsZWRcLW9uXC10aGVcLWZpZWxkOwor5Li7566hIDwgXChiZVwpXC1wZXJzb25cLWluXC1jaGFyZ2VcLW9mXC1cKGFcLXBvc2l0aW9uXCxcLWV0Y1wuXCk7Civllq7mp43ljLnppqwgPCBzaW5nbGVcLWhhbmRlZFwtXChsaXRcOlwtc2luZ2xlXC1zcGVhclwtb25lXC1ob3JzZVwpOwor55un5rOw5oSaIDwgcm9oXC10YWVcLXdvb1wtXChmb3JtZXJcLXNvdXRoXC1rb3JlYW5cLXByZXNpZGVudFwpOwor5q2l6Z+7IDwgdG9cLXdyaXRlXC1hXC1wb2VtXC11c2luZ1wtYW5vdGhlclwtcG9lbScnc1wtcmh5bWVzOwor5Y+j5rCjIDwgXChmcmllbmRseVwtb3JcLXVuZnJpZW5kbHlcKVwtdG9uZVwtXChvZlwtY29tbWVudHNcKTsKK+ato+mLkiA8IGZyb250YWxcLWF0dGFja1wtXChicnVzaFwtbW92ZW1lbnRcLWluXC1wYWludGluZ1wpOwor6b2K55m955+zIDwgbmFtZVwtb2ZcLWFcLWZhbW91c1wtY2hpbmVzZVwtYXJ0aXN0XCxcLXFpXC1iYWlcLXNoaTsKK+S4i+S+hiA8IFwodmVyYlwtc3VmZml4XC1pbmRpY2F0aW5nXC1jb250aW51YXRpb25cLFwtZXRjXC5cKTsKK+W5uemDqCA8IGFcLWNhZHJlXC1cKGllXCxcLW1hbmFnZXJcLFwtc3RhZmZcLFwtb2ZmaWNlclwsXC1ldGNcLlwpOwor5aiFIDwgbXV0dWFsXC10ZXJtXC1vZlwtYWRkcmVzc1wtdXNlZFwtYnlcLXNvbnNcLWluXC1sYXc7CivllYbli5npg6ggPCBjb21tZXJjZVwtZGVwYXJ0bWVudFwtXChvZlwtdGhlXC11c1wtZ292ZXJubWVudFwpOwor5ZCN5Ymv5YW25a+mIDwgbm90XC1qdXN0XC1pblwtbmFtZVwtb25seVwsXC1idXRcLWFsc29cLWluXC1yZWFsaXR5Owor5LiN55W25LiA5Zue5LqLIDwgbm90XC1yZWdhcmRcLWFzXC1hXC1tYXR0ZXJcLVwob2ZcLWFueVwtaW1wb3J0YW5jZVwpOwor6ICB5Ly05YWSIDwgXChvZlwtYW5cLW9sZFwtbWFycmllZFwtY291cGxlXClcLWh1c2JhbmRcLW9yXC13aWZlOwor5LiN5omT5LiN55u46K2YIDwgZnJvbVwtYW5cLWV4Y2hhbmdlXC1vZlwtYmxvd3NcLWZyaWVuZHNoaXBcLWdyb3dzOwor5be054i+6IiN5aSr5pav5Z+6IDwgXChjaGFybGVuZVwpXC1iYXJzaGVmc2t5XCxcLXVzXC10cmFkZVwtbmVnb3RpYXRvcjsKK+muoCA8IGFcLWtpbmRcLW9mXC1zaGFkXC13aXRoXC1hXC1oZWFkXC1saWtlXC1hXC1zdHVyZ2VvbjsKK+aOpee0jSA8IGFkbWl0XC1cKGludG9cLW1lbWJlcnNoaXBcLW9mXC1hblwtb3JnYW5pemF0aW9uXCk7CivllpzmlrDljq3oiIogPCBsaXRlcmFsXDpcLXRvXC1saWtlXC10aGVcLW5ld1wsXC1hbmRcLWhhdGVcLXRoZVwtb2xkOwor5oqK6aKoIDwga2VlcFwtd2F0Y2hcLVwoZHVyaW5nXC1hXC1jbGFuZGVzdGluZVwtYWN0aXZpdHlcKTsKK+WCmeiAlSA8IG1ha2VcLXByZXBhcmF0aW9uc1wtZm9yXC1wbG91Z2hpbmdcLWFuZFwtc293aW5nOwor5pKl5YaXIDwgZmluZFwtdGltZVwtaW5cLXRoZVwtbWlkc3RcLW9mXC1wcmVzc2luZ1wtYWZmYWlyczsKK+iDkSA8IHRoZVwtbGltYnNcLlwtd2luZ3NcLW9mXC1iaXJkc1wuXC1sZWdzXC1vZlwtYW5pbWFsczsKK+etrSA8IGFuXC1hbmNpZW50XC1kZXZpY2VcLWZvclwtd29ya2luZ1wtd2l0aFwtbnVtYmVyczsKK+aihuWtkOiFlCA8IGFcLWdlbmVyYWxcLXRlcm1cLWZvclwtbG9jYWxcLW9wZXJhc1wtaW5cLXNoYW5neGk7Civmu50gPCBvbm9tYXRvcG9laWNcLWZvclwtdGhlXC1zb3VuZFwtb2ZcLWZhbGxpbmdcLXJhaW47CivmoL3otJMgPCB0b1wtZnJhbWVcLXNvbWVvbmVcLVwoYnlcLXBsYW50aW5nXC1zdGhcLW9uXC10aGVtXCk7Civmj5vlj5YgPCBnaXZlXC1zb21ldGhpbmdcLWFuZFwtZ2V0XC1zb21ldGhpbmdcLWluXC1yZXR1cm47Civmi43moYjlj6vntZUgPCBsaXRcLlw6XC1zbGFwXC10aGVcLXRhYmxlXC1hbmRcLXNob3V0XC13aXRoXC1wcmFpc2U7Civlgb3mm7ggPCBcKGZvcmdlZFwsXC1kdWJpb3VzXCxcLW1pc2NsYXNzaWZpZWRcKVwtb2xkXC1ib29rczsKK+aiheiYreiKsyA8IG5hbWVcLW9mXC1hXC12ZXJ5XC1mYW1vdXNcLWJlaWppbmdcLW9wZXJhXC1hcnRpc3Q7CivnsL/lhoogPCBib29rc1wtZm9yXC10YWtpbmdcLW5vdGVzXC1vclwta2VlcGluZ1wtYWNjb3VudHM7Civks7UgPCBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmRcLXdpdGhcLWNvbG9yZnVsXC1mZWF0aGVyOwor5LObIDwgYVwtc21hbGxcLWJyb3duXC1zcGVja2xlZFwtYmlyZFwtbGlrZVwtdGhlXC1xdWFpbDsKK+SpkSA8IGhvcml6b250YWxcLWZyb250XC1iYXJcLW9uXC1hXC1jYXJ0XC1vclwtY2FycmlhZ2U7CivkppMgPCB0b1wtd2FpdFwtZm9yXC1zb21ldGhpbmdcLXRvaGFwcGVuXC1pbW1lZGlhdGVseTsKK+SjpCA8IG5hbWVcLW9mXC12aWxsYWdlXC1pblwtdG9kYXknJ3NcLXNoYW54aVwtcHJvdmluY2U7Civko50gPCBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC10b2RheScnc1wtc2hhbnhpXC1wcm92aW5jZTsKK+SjgiA8IG5hbWVcLW9mXC1hXC1jb3VudHlcLWluXC10b2RheScnc1wtaHVuYW5cLXByb3ZpbmNlOwor5KGpIDwgc291bmRcLW9mXC1jYXJ0c1wtb3JcLXN0b25lc1wta25vY2tpbmdcLXRvZ2V0aGVyOwor5KCAIDwgdG9cLXNpdFwtY3Jvc3NcLWxlZ2dlZFwtbGlrZVwtYVwtYnVkZGhpc3RcLXByaWVzdDsKK+ScqyA8IG5hbWVcLW9mXC1hXC12YWxsZXlcLWluXC10b2RheScnc1wtaG9iZWlcLXByb3ZpbmNlOwor5JyaIDwgdG9cLXNwZWFrXC1yZWNrbGVzc2x5XC1vclwtd2l0aG91dFwtZm9yZXRob3VnaHQ7Civkk6UgPCBzb3VuZFwtb2ZcLXRoZVwtd3JpZ2dsZWRcLWluc2VjdHNcLW9uXC10aGVcLWdyYXNzOwor5JCEIDwgdGhlXC11bnNhdGlzZmFjdGlvblwtb2ZcLWh1bmdlclwtcmVxdWlyZXNcLW1lYXQ7CivkjbQgPCB0b1wtc3F1ZWV6ZVwtYW5kXC10b1wtY3Jvd2RcLWFnYWluc3RcLWVhY2hcLW90aGVyOwor5I2GIDwgY29udGFpbmVyXC1mb3JcLWdyYWluc1wtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor5LiK6LuKIDwgdG9cLWdldFwtb25cLW9yXC1pbnRvXC1cKGFcLWJ1c1wsXC10cmFpblwsXC1jYXJcLWV0Y1wuXCk7Civkh68gPCBhXC1raW5kXC1vZlwtYmFtYm9vXC13aXRoXC1wYXR0ZXJuc1wtb25cLXRoZVwtaGVhZDsKK+ihjOaUv+mZoiA8IGV4ZWN1dGl2ZVwteXVhblwtXChnb3Zlcm5tZW50XC1ib2R5XC1pblwtdGFpd2FuXCk7CivjvLEgPCB0b1wtbWFuYWdlXC1vclwtcmVndWxhdGVcLXRoZVwtbGVhdGhlclwtbWF0ZXJpYWw7Civjr4ogPCBldmVuXC1tZWFzdXJpbmdcLWJvYXJkXC1mb3JcLXBlY2tzXC1hbmRcLWJ1c2hlbHM7CivnrYbkuIsgPCB0aGVcLXdvcmRpbmdcLWFuZFwtcHVycG9ydFwtb2ZcLXdoYXRcLW9uZVwtd3JpdGVzOwor5L6/5Ye9IDwgYW5cLWluZm9ybWFsXC1sZXR0ZXJcLXNlbnRcLWJ5XC1hblwtb3JnYW5pemF0aW9uOwor46iQIDwgdG9cLXNsYXBcLWxpZ2h0bHlcLW9uXC10aGVcLWNsb3RoZXNcLW9yXC1jb3ZlcmxldDsKK+OipSA8IGFcLWJpZ1wtcGllY2VcLW9mXC1sb2dcLXRvXC1qb2luXC10aGVcLXRoaWNrXC1yb3BlczsKK+mmluW4rSA8IGNoaWVmXC1cKHJlcHJlc2VudGF0aXZlXCxcLWNvcnJlc3BvbmRlbnRcLFwtZXRjXCk7CivotIXlqb8gPCBzb25cLWluXC1sYXdcLWxpdmluZ1wtYXRcLXdpZmUnJ3NcLXBhcmVudCcnc1wtaG91c2U7CivmnbDkvZvojLIgPCBcKGphbWVzXClcLWplZmZvcmRzXC1cKHVzXC1zZW5hdG9yXC1mcm9tXC12ZXJtb250XCk7CivomZXmlrwgPCBiZVwtXChpblwtc29tZVwtc3RhdGVcLFwtcG9zaXRpb25cLFwtb3JcLWNvbmRpdGlvblwpOwor6aKo5Zyf5Lq65oOFIDwgbG9jYWxcLWNvbmRpdGlvbnNcLVwoaHVtYW5cLWFuZFwtZW52aXJvbm1lbnRhbFwpOwor6Zi/5ouJ5aGU5pavIDwgXChhbGlcKVwtYWxhdGFzXC1cKGluZG9uZXNpYW5cLWZvcmVpZ25cLW1pbmlzdGVyXCk7CivnvoXluIPms4ogPCBsb3BcLW5vclwtXChudWNsZWFyXC10ZXN0aW5nXC1zaXRlXC1pblwteGluamlhbmdcKTsKK+awkemAsum7qCA8IGRwcFwtXChkZW1vY3JhdGljXC1wcm9ncmVzc2l2ZVwtcGFydHlcLFwtdGFpd2FuXCk7CivmlZfnrYYgPCBhXC1mYXVsdHlcLXN0cm9rZVwtaW5cLWNhbGxpZ3JhcGh5XC1vclwtcGFpbnRpbmc7Civnj4ggPCBhblwtb3JuYW1lbnRcLWF0dGFjaGVkXC10b1wtYVwtd29tYW4nJ3NcLWhhaXJwaW47CivonIMgPCBtYXJpbmVcLW1vbnN0ZXJcLXdoaWNoXC1jYW5cLWNoYW5nZVwtaXRzXC1zaGFwZTsKK+aWmyA8IGRyeVwtbWVhc3VyZVwtZXF1YWxcLXRvXC1zb21lXC1maXZlXC1vclwtdGVuXC1kb3U7CivphK8gPCBkaXN0cmljdFwtaW5cLWdhbnN1XC1kdXJpbmdcLXRoZVwtdGFuZ1wtZHluYXN0eTsKK+W6uSA8IHRoZVwtbGVuZ3RoXC1vZlwtb25lJydzXC10d29cLW91dHN0cmV0Y2hlZFwtYXJtczsKK+aPsiA8IHRvXC1zb3J0XC1vdXRcLXRoZVwtc3RhbGtzXC11c2VkXC1pblwtZGl2aW5hdGlvbjsKK+WHuui3ryA8IGFcLXdheVwtb3V0XC1cKG9mXC1hXC1kaWZmaWN1bHRcLXNpdHVhdGlvblwsXC1ldGNcKTsKK+e0hOWumuizh+ioiumAn+eOhyA8IGNvbW1pdHRlZFwtaW5mb3JybWF0aW9uXC1yYXRlXC1cKGZyYW1lXC1yZWxheVwpOwor55m96Iqx6JuHIDwgbG9uZ1wtbm9zZWRcLXBpdFwtdmlwZXJcLVwoYWdraXN0cm9kb25cLWFjdXR1c1wpOwor5Lit5YWx5Lit5aSuIDwgY2hpbmVzZVwtY29tbXVuaXN0XC1wYXJ0eVwtY2VudHJhbFwtY29tbWl0dGVlOwor5Y2a6IGe5by36KiYIDwgaGF2ZVwtd2lkZVwtbGVhcm5pbmdcLWFuZFwtYVwtcmV0ZW50aXZlXC1tZW1vcnk7Civluqbml6UgPCBzY3JhdGNoXC1vdXRcLWFcLWRpZmZpY3VsdFwsXC1tZWFnZXJcLWV4aXN0ZW5jZTsKK+ecvuitsOWToSA8IG1lbWJlclwtb2ZcLXRoZVwtdXNcLWhvdXNlXC1vZlwtcmVwcmVzZW50YXRpdmVzOwor6Z+NIDwgYVwtbGVhdGhlclwta25lZVwtcGFkXC13b3JuXC1kdXJpbmdcLXNhY3JpZmljZXM7CivloLHmoYggPCByZXBvcnRcLWFcLWNhc2VcLXRvXC10aGVcLXNlY3VyaXR5XC1hdXRob3JpdGllczsKK+mPniA8IGFcLWxhcmdlXC1iZWxsXC11c2VkXC1hc1wtYVwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+i7jiA8IGFcLWJyYXNzXC1wYXJ0c1wtZm9yXC1hXC1jYXJ0XC1pblwtYW5jaWVudFwtY2hpbmE7CivlhbXmupAgPCBtYW5wb3dlclwtcmVzb3VyY2VzXC1cKGZvclwtbWlsaXRhcnlcLXNlcnZpY2VcKTsKK+iZiyA8IGFzcGFyYWd1c1wtYVwtdmFyaWV0eVwtb2ZcLXJlZFwtc3RhbGtlZFwtbWlsbGV0Owor55m+5bm05aSn6KiIIDwgYVwtcHJvamVjdFwtb2ZcLXZpdGFsXC1hbmRcLWxhc3RpbmdcLWltcG9ydGFuY2U7CivpgoHnp5Hoo6EgPCBcKG1pa2VcKVwtbWNjdXJyeVwtXCh3aGl0ZVwtaG91c2VcLXNwb2tlc3BlcnNvblwpOwor5ouU6IuX5Yqp6ZW3IDwgc3BvaWxcLXRoaW5nc1wtdGhyb3VnaFwtZXhjZXNzaXZlXC1lbnRodXNpYXNtOwor5aCx5ZGK5pyDIDwgcHVibGljXC1sZWN0dXJlXC1cKHdpdGhcLWd1ZXN0XC1zcGVha2Vyc1wsXC1ldGNcKTsKK+WIqeS8r+abvCA8IFwoY29ubmVjdGljdXRcLXNlbmF0b3JcLWpvc2VwaFwtaVwuXClcLWxpZWJlcm1hbjsKK+iCr+aZrue0ouaBqSA8IFwoZGlya1wpXC1rZW1wdGhvcm5lXC1cKHVzXC1zZW5hdG9yXC1mcm9tXC1pZGFob1wpOwor5bueIDwgdG9cLXByZXBhcmVcLWhvcnNlc1wtYW5kXC1jaGFyaW90c1wtZm9yXC1iYXR0bGU7CivlqZcgPCBhXC1uZXdcLWJvcm5cLWNoaWxkXC10aGVcLXdoaW1wZXJcLW9mXC1hblwtaW5mYW50Owor5aa6IDwgd2lmZVwtb2ZcLXRoZVwtbGFzdFwtcnVsZXJcLW9mXC10aGVcLXhpYVwtZHluYXN0eTsKK+WZoCA8IHNvdW5kXC1tYWRlXC10b1wtZ2V0XC1hXC1ob3JzZVwtdG9cLW1vdmVcLWZvcndhcmQ7CivlpJblravlpbPlhZIgPCBncmFuZGRhdWdodGVyXC1cKGRhdWdodGVyXC1vZlwtb25lJydzXC1kYXVnaGVyXCk7CivmnInpm7sgPCBcKG9mXC1hXC1kd2VsbGluZ1wpXC1zdXBwbGllZFwtd2l0aFwtZWxlY3RyaWNpdHk7Civnmb7mipjkuI3mkpMgPCBrZWVwXC1vblwtZmlnaHRpbmdcLWluXC1zcGl0ZVwtb2ZcLWFsbFwtc2V0YmFja3M7CivnpZ7lpbPls7AgPCBuYW1lXC1vZlwtYVwtcGVha1wtYnlcLWNoYW5namlhbmdcLXRocmVlXC1nb3JnZXM7CivkuIIgPCBvYnN0cnVjdGlvblwtb2ZcLWJyZWF0aFwtYXNcLWl0XC1zZWVrc1wtcmVsZWFzZTsKK+izgeiHqCA8IFwob2ZcLWRpc3Rpbmd1aXNoZWRcLWd1ZXN0c1wpXC1ob25vdXJcLW15XC1ob3VzZTsKK+SwvyA8IGFcLWtpbmRcLW9mXC1zbWFsbFwtZmlzaFwtZ3Jvd25cLWluXC1mcmVzaFwtd2F0ZXI7Civlronouqvnq4vlkb0gPCBzZXR0bGVcLWRvd25cLWFuZFwtZ2V0XC1vblwtd2l0aFwtb25lJydzXC1wdXJzdWl0Owor5KK/IDwgbmFtZVwtb2ZcLWFcLXBsYWNlXC1pblwtdG9kYXknJ3NcLWhvYmVpXC1wcm92aW5jZTsKK+ShiCA8IHRoZVwtY3Jvc3NcLWJhclwtYXRcLXRoZVwtc2lkZXNcLW9mXC1hXC1jYXJyaXRhZ2U7CivklIkgPCBzY2F0dGVyZWRcLW9yXC1kaXNwZXJzZWRcLW9mXC1ncmFzc1wtYW5kXC10cmVlczsKK+SRkiA8IGFcLWtpbmRcLW9mXC1mYXJtXC10b29sXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivkkKMgPCBzb3VwXC1tYWRlXC1vZlwtY3V0dGVkXC1tZWF0XC1taXhlZFwtd2l0aFwtYmxvb2Q7CivkjK4gPCBzaWxrXC1mYWJyaWNzXC13aXRoXC10aGVcLWNvbG9yXC1vZlwtbmV3XC1sZWF2ZXM7CivkhKggPCBncmFpbnNcLXByb2R1Y2luZ1wtbmVpdGhlclwtZmxvd2VyXC1ub3JcLWZydWl0Owor5ISdIDwgc2hvd1wtbm9cLXJlc3BlY3RcLXRvXC10aGVcLXNlcnZpY2VcLW9mXC13b3JzaGlwOwor47ytIDwgdG9cLXN0ZWFkeVwtYnlcLXB1dHRpbmdcLXNvbWV0aGluZ1wtdW5kZXJuZWF0aDsKK+O7siA8IGFcLXJpdGVcLW9yXC1zZXJ2aWNlXC1mb3JcLWJlZ2lubmluZ1wtb2ZcLWF1dHVtbjsKK+mAhuWQkeaTgeWhnumAmuefpSA8IGJhY2t3YXJkXC1leHBsaWNpdFwtY29uZ2VzdGlvblwtbm90aWZpY2F0aW9uOwor57aT54ef566h55CG5ZKM57at6K23IDwgb3BlcmF0aW9uc1wtYWRtaW5pc3RyYXRpb25cLWFuZFwtbWFpbnRlbmFuY2U7CivjqqogPCB0b1wtdXNlXC1hXC13b29kZW5cLXBvbGVcLXRvXC1zdXBwb3J0XC1zb21ldGhpbmc7CivjoqYgPCB3b29kZW5cLXBvc3RcLW9yXC1waWxlXC1mb3JcLXRldGhlcmluZ1wtYW5pbWFsczsKK+OcoiA8IGFcLWJhZFwtdGVybVwtYnlcLXdoaWNoXC1vbmVcLWFkZHJlc3Nlc1wtYVwtd29tYW47CivjmpIgPCBjb25jZWFsZWRcLXRoZVwtc3RvbGVuXC1nb29kc1wtaW5cLW9uZScnc1wtZHJlc3M7Civnmb3mm4nnh5UgPCBwYWlcLWhzaWFvXC15ZW5cLVwoZGF1Z2h0ZXJcLW9mXC1wYWlcLXBpbmdcLXBpbmdcKTsKK+S4jee2k+S4gOS6i+S4jemVt+S4gOaZuiA8IHlvdVwtY2FuJyd0XC1nYWluXC1rbm93bGVkZ2VcLXdpdGhvdXRcLXByYWN0aWNlOwor5p2+5LiLIDwgbWF0c3VzaGl0YVwtXChqYXBhbmVzZVwtZWxlY3Ryb25pY3NcLWNvbXBhbnlcKTsKK+S4jeWmmSA8IFwob2ZcLWFcLXR1cm5cLW9mXC1ldmVudHNcKVwtbm90XC10b29cLWVuY291cmFnaW5nOwor6LijIDwgdG9cLXN0dW1ibGVcLWFuZFwtZmFsbFwtcHJvbmVcLXN0aWZmXC1pblwtZGVhdGg7Civpu7wgPCBlbWJyb2lkZXJlZFwtb2ZmaWNpYWxcLW9yXC1zYWNyaWZpY2lhbFwtcm9iZTsKK+WzhCA8IGFcLXJhbmdlXC1vZlwtcGVha3NcLWluXC1zaGFuZG9uZ1wtYW5kXC1qaWFuZ3N1Owor5YuJ5by3IDwgbWFuYWdlXC1cKHRvXC1kb1wtc29tZXRoaW5nXClcLXdpdGhcLWRpZmZpY3VsdHk7CivliKXnhKEgPCBoYXZlXC1ub1wtb3RoZXJcLVwoY2hvaWNlXCxcLWFsdGVybmF0aXZlXCxcLWV0Y1wpOwor5LiN5Y+v5LiA5LiWIDwgY29uc2lkZXJcLW9uZXNlbGZcLXVuZXhjZWxsZWRcLWluXC10aGVcLXdvcmxkOwor6YeR5pel5oiQIDwga2ltXC1pbFwtc3VuZ1wtXChmb3JtZXJcLW5vcnRoXC1rb3JlYW5cLWxlYWRlclwpOwor5YWs57SEIDwgY29udmVudGlvblwtXChpZVwsXC1pbnRlcm5hdGlvbmFsXC1hZ3JlZW1lbnRcKTsKK+mXlyA8IGFcLWZyb250aWVyXC1wYXNzXC1vclwtZ2F0ZVwtdG9cLXNodXRcLW9yXC1jbG9zZTsKK+mCviA8IGFcLWZldWRhbFwtc3RhdGVcLXdoaWNoXC1leGlzdGVkXC1iXC5jXC43MDBcLTQ2OTsKK+WkqualteWKjSA8IGFcLWtpbmRcLW9mXC10cmFkaXRpb25hbFwtY2hpbmVzZVwtc3dvcmRcLXBsYXk7CivlubTluqYgPCB5ZWFyXC1cKGVnXCxcLXNjaG9vbFwteWVhclwsXC1maXNjYWxcLXllYXJcLFwtZXRjXCk7CivntZXlsI3mlbjlrZcgPCBhYnNvbHV0ZVwtXChhc1wtb3Bwb3NlZFwtdG9cLXJlbGF0aXZlXClcLW51bWJlcjsKK+iWqSA8IHRyYW5zbGl0ZXJhdGlvblwtb2ZcLScnc2F0JydcLWluXC0nJ2JvZGhpc2F0dHZhOwor562G6aCGIDwgb3JkZXJcLW9mXC1zdHJva2VzXC1vYnNlcnZlZFwtaW5cLWNhbGxpZ3JhcGh5Owor6IawIDwgdG9cLWNvb2tcLW1lYXRcLWZvclwtYVwtc2FjcmlmaWNlXC1vclwtb2ZmZXJpbmc7CivmiY7ph50gPCB0b1wtZ2l2ZVwtb3JcLWhhdmVcLWFuXC1hY3VwdW5jdHVyZVwtdHJlYXRtZW50Owor5Y+45rOV6YOoIDwganVzdGljZVwtZGVwYXJtZW50XC1cKG9mXC10aGVcLXVzXC1nb3Zlcm5tZW50XCk7CivnkYwgPCBhXC13aGl0ZVwtb3BhcXVlXC1xdWFydHpcLXVzZWRcLWZvclwtb3JuYW1lbnRzOwor5r2fIDwgbGFuZFwtaW1wcmVnbmF0ZWRcLXdpdGhcLXNhbHRcLWZyb21cLXRoZVwtdGlkZTsKK+ijveWKkSA8IFwoY2hlbWljYWxcLW9yXC1waGFybWFjZXV0aWNhbFwpXC1wcmVwYXJhdGlvbjsKK+mrlOacgyA8IGtub3dcLVwodGhyb3VnaFwtbGVhcm5pbmdcLW9yXC1ieVwtZXhwZXJpZW5jZVwpOwor5YG95omYIDwgZmFraW5nXC1hXC1tb2Rlcm5cLW9iamVjdFwtYXNcLWFuXC1hbmNpZW50XC1vbmU7CivluqvntI3ljZcgPCBcKGFuZHJld1wpXC1jdW5hbmFuXC1cKGFsbGVnZWRcLXNlcmlhbFwta2lsbGVyXCk7Civmtbfpl5wgPCBjdXN0b21zXC1cKGllXCxcLWJvcmRlclwtY3Jvc3NpbmdcLWluc3BlY3Rpb25cKTsKK+aKsemgrem8oOerhCA8IGNvdmVyXC10aGVcLWhlYWRcLWFuZFwtc25lYWtcLWF3YXlcLWxpa2VcLWFcLXJhdDsKK+m7g+W7uuWNlyA8IGpvaG5cLWh1YW5nXC1cKGRlbW9jcmF0aWNcLXBhcnR5XC1mdW5kcmFpc2VyXCk7CivktZ4gPCBhbmNpZW50XC1wdW5pc2htZW50XC1vZlwtdGF0dG9vaW5nXC10aGVcLWZhY2U7CivksbkgPCBhXC1jb25kaW1lbnRcLW1hZGVcLWZyb21cLW1pbmNlZFwtZmlzaFwtc2FsdGVkOwor5K+wIDwgdXNlXC1hXC1oYWlyXC1waW5cLXRvXC1zZXRcLWFuZFwtZHJlc3NcLXRoZVwtaGFpcjsKK+SsryA8IHRvXC1oYXZlXC1jb25nZWVcLXdpdGhcLWZyaWVuZHNcLWluXC1vbGRcLXRpbWVzOwor5KGLIDwgZGVjb3JhdGlvblwtb25cLXRoZVwtbmF2ZVwtb3JcLWh1Ylwtb2ZcLWFcLXdoZWVsOwor5J6DIDwgdG9cLXJlbGlldmVcLW9yXC1naXZlXC1haWRcLXRvXC10aGVcLWRpc3RyZXNzZWQ7CivkmK8gPCB0aGVcLWxhcGVsXC1vclwtY29sbGFyXC1vZlwtYVwtZ2FybWVudFwtb3JcLXJvYmU7CivkmKQgPCBhXC1zd29yZFwtY292ZXJpbmdcLXRvXC1wcm90ZWN0XC10aGVcLXNjYWJiYXJkOwor5JGMIDwgbHdoYXRcLWlzXC1sZWZ0XC1vdmVyXC1vZlwtdGhlXC1mb29kXC1cLW92ZXJyaXBlOwor5IunIDwgb3JuYW1lbm50c1wtZm9yXC10aGVcLWZyb250YWxcLXBhcnRcLW9mXC1zaG9lczsKK+SLoyA8IGRlY29yYXRpb25zXC1wdXRcLW9uXC10aGVcLW1hbmVcLW9yXC1ob3JzZWhhaXI7CivkiJUgPCB0aGVcLW1ldGFsXC10b25ndWVcLWluXC10aGVcLXJlZWRcLWluc3RydW1lbnRzOwor5IO0IDwgYVwtd2hldHN0b25lXC11c2VkXC10b1wtZ3JpbmRcLXByZWNpb3VzXC1zdG9uZTsKK+SBvCA8IHRvXC1sb29rXC1idXRcLXNlZVwtbm90aGluZ1wtXC1cLVwtYWJzZW50XC1taW5kZWQ7Civjv4YgPCBkYW1hZ2VcLWJ5XC10aGVcLXBlc3RzXC10b1wtdGhlXC1yaWNlXC1zZWVkbGluZzsKK+O7tiA8IGFcLWphZGVcLXR1YmVcLXdpdGhcLXdoaXRlXC1hbmRcLW5hdHVyZVwtY29sb3JzOwor47uwIDwgZGVjb3JhdGVkXC1qYWRlXC1vclwtb3JuYW1lbnRcLW9uXC1hXC1zY2FiYmFyZDsKK+O7oSA8IGFcLWphZGVcLXJpbmdcLXdpdGhcLWFcLXNtYWxsXC1zZWdtZW50XC1jdXRcLW9mZjsKK+OuhiA8IGVhdmVzXC1zcHJvdXRpbmdcLWZyb21cLXRoZVwtc3R1bXBcLW9mXC1hXC10cmVlOwor46uUIDwgb25lXC1vZlwtdGhlXC1laWdodFwtZGlhZ3JhbXNcLWZvclwtZGl2aW5hdGlvbjsKK+OquyA8IGFcLWtpbmRcLW9mXC11dGVuc2lsXC11c2VkXC10b1wtbGFkbGVcLW91dFwtd2luZTsKK+OpiiA8IHRvXC1wdWxsXC11cFwtdGhlXC1zbGVldmVzXC1hbmRcLXNob3dcLXRoZVwtYXJtczsKK+OnrSA8IHRvXC1nZXRcLXNvbWV0aGluZ1wtd2l0aFwtYm90aFwtcmFpc2luZ1wtaGFuZHM7Civjp5ogPCB0aGVcLWdlc3R1cmVcLW9mXC11c2luZ1wtYW5cLWluZGVudGVkXC1jb250YWluOwor46eGIDwgdG9cLWNvdmVyXC1zb21ldGhpbmdcLXdpdGhcLWFcLXBpZWNlXC1vZlwtY2xvdGg7Civnmb7lu6Lkv7HoiIggPCBhbGxcLW5lZ2xlY3RlZFwtdGFza3NcLWFyZVwtYmVpbmdcLXVuZGVydGFrZW47CivjoYsgPCBhXC1raW5kXC1vZlwtaGVhZGRyZXNzXC1mb3JcLW1hblwtaW5cLW9sZFwtY2hpbmE7CivjoLggPCB0aGVcLWxhcGVsXC1vclwtY29sbG9yXC1vZlwtYVwtZ2FybWVudFwtb3JcLXJvYmU7CivjnJogPCBhXC1sb2NhbFwtZ292ZXJubWVudFwtcG9zdFwtaW5cLWFuY2llbnRcLXRpbWVzOwor45mfIDwgbG93XC1seWluZ1wtb25cLXRoZVwtc2lkZVwtb2ZcLWFcLXJpdmVyXC1vclwtbGFrZTsKK+mBv+WvpuWwseiZmyA8IHN0YXlcLWNsZWFyXC1vZlwtdGhlXC1lbmVteScnc1wtbWFpblwtZm9yY2VcLWFuZDsKK+S4jeaxgueUmuinoyA8IG5vdFwtc2Vla1wtdG9cLXVuZGVyc3RhbmRcLXRoaW5nc1wtdGhvcm91Z2hseTsKK+eikeiomCA8IGFcLXJlY29yZFwtb2ZcLWV2ZW50c1wtaW5zY3JpYmVkXC1vblwtYVwtdGFibGV0Owor5Lit5aSu5YWo5pyDIDwgcGxlbmFyeVwtc2Vzc2lvblwtb2ZcLXRoZVwtY2VudHJhbFwtY29tbWl0dGVlOwor5YyF6L6mIDwgdGFrZVwtY2FyZVwtb2ZcLWV2ZXJ5dGhpbmdcLWNvbmNlcm5pbmdcLWFcLWpvYjsKK+WPpOadsOaLieeIviA8IFwoaVwuXC1rXC5cKVwtZ3VqcmFsXC1cKHByaW1lXC1taW5pc3Rlclwtb2ZcLWluZGlhXCk7Civpu4Plsqnls7YgPCBodWFuZ3lhblwtaXNsYW5kXC1cKGluXC10aGVcLXNvdXRoXC1jaGluYVwtc2VhXCk7CivmqZ/pl5zloLEgPCBvZmZpY2lhbFwtXChnb3Zlcm5tZW50XC1vcGVyYXRlZFwpXC1uZXdzcGFwZXI7CivliY3lkJHmk4HloZ7pgJrnn6UgPCBmb3J3YXJkXC1leHBsaWNpdFwtY29uZ2VzdGlvblwtbm90aWZpY2F0aW9uOwor5Ye66Z2iIDwgYWN0XC1pblwtYVwtXChvZmZpY2lhbFwtb3JcLXBlcnNvbmFsXClcLWNhcGFjaXR5Owor5ZaPIDwgcmVzcGVjdGZ1bFwtcmVwbHlcLW9mXC1hc3NlbnRcLXRvXC1zdXBlcmlvcnM7CivnrI8gPCB0YWJsZXRcLWhlbGRcLWJ5XC1zb21lb25lXC1oYXZpbmdcLWF1dGhvcml0eTsKK+i2vCA8IGNhbGxvdXNcLXNraW5cLW9uXC1oYW5kc1wtb3JcLWZlZXRcLlwtYmxpc3RlcnM7Civnm7jpmpQgPCBiZVwtc2VwYXJhdGVkXC1ieVwtXChkaXN0YW5jZVwtb3JcLXRpbWVcLFwtZXRjXCk7Civnvo7lnIvlu6Pmkq3lhazlj7ggPCBhYmNcLVwoYW1lcmljYW5cLWJyb2FkY2FzdGluZ1wtY29ycG9yYXRpb25cKTsKK+aZguWgsSA8IFwidGltZXNcIlwtXChuZXdzcGFwZXJcLFwtZWdcLFwtbmV3XC15b3JrXC10aW1lc1wpOwor6YCa6IiqIDwgY29ubmVjdGVkXC1ieVwtYWlyXHxzZWFcLXRyYWZmaWNcLW9yXC1zZXJ2aWNlOwor5qC45q2m5Zmo56CU6KO96KiI5YqDIDwgbnVjbGVhclwtd2VhcG9uc1wtXChtYW51ZmFjdHVyaW5nXClcLXByb2dyYW07Civlhrfmt6Hpl5zkv4IgPCBjb2xkXC1yZWxhdGlvbnNcLVwoZVwuZ1wuXC1iZXR3ZWVuXC1jb3VudHJpZXNcKTsKK+S4jeS6huS6huS5iyA8IHNldHRsZVwtYVwtbWF0dGVyXC1ieVwtbGVhdmluZ1wtaXRcLXVuc2V0dGxlZDsKK+mBt+WxhSA8IHRvXC1tb3ZlXC1cKGZyb21cLW9uZVwtcmVzaWRlbmNlXC10b1wtYW5vdGhlclwpOwor6aWdIDwgdG9cLWZlZWRcLWFuXC1pbmZhbnRcLWJ5XC1oYW5kXC1zdGVhbWVkXC1icmVhZDsKK+S4jeWNs+S4jemboiA8IGJlXC1uZWl0aGVyXC10b29cLWZhbWlsaWFyXC1ub3JcLXRvb1wtZGlzdGFudDsKK+e4veaUv+ayu+mDqCA8IFwobWlsaXRhcnlcKVwtZ2VuZXJhbFwtcG9saXRpY2FsXC1kZXBhcnRtZW50Owor5ZOI6KOh5qOu5Y+y5a+G54m5IDwgaGFycmlzb25cLXNjaG1pdHRcLVwoYXBvbGxvXC0xXC03XC1hc3Ryb25hdXRcKTsKK+WFpeWtuOeOhyA8IHBlcmNlbnRhZ2VcLW9mXC1jaGlsZHJlblwtd2hvXC1lbnRlclwtc2Nob29sOwor6KONIDwgYVwtYm9yZGVyXC1vclwtYmFuZFwtb25cLXRoZVwtZWRnZVwtb2ZcLWFcLWRyZXNzOwor5bm05LujIDwgYVwtZGVjYWRlXC1vZlwtYVwtY2VudHVyeVwtXChlZ1wsXC10aGVcLXNpeHRpZXNcKTsKK+eVouWFtuWKn+S6juS4gOW9uSA8IGFjY29tcGxpc2hcLXRoZVwtd2hvbGVcLXRhc2tcLWF0XC1vbmVcLXN0cm9rZTsKK+WNiui3r+WHuuWutiA8IHN3aXRjaFwtdG9cLWFcLWpvYlwtb25lXC13YXNcLW5vdFwtdHJhaW5lZFwtZm9yOwor57GqIDwgYVwtd2Vpclwtb2ZcLWJhbWJvb1wtdG9cLWNhdGNoXC1maXNoXC1vclwtY3JhYnM7CivnmLIgPCBzcGFzbXNcLW9yXC1jb252dWxzaW9uc1wtaW5cLXlvdW5nXC1jaGlsZHJlbjsKK+eRsiA8IHRpbmtsaW5nXC1zb3VuZFwtdGlua2xpbmdcLW9mXC1wZW5kYW50XC1nZW1zOwor55eF5q+S5a245a62IDwgdmlyb2xvZ2lzdFwtXChwZXJzb25cLXdob1wtc3R1ZGllc1wtdmlydXNlc1wpOwor5bu656uL5q2j5byP5aSW5Lqk6Zec5L+CIDwgZm9ybWFsbHlcLWVzdGFibGlzaFwtZGlwbG9tYXRpY1wtcmVsYXRpb25zOwor6IyF6Ie66YWSIDwgbWFvdGFpXC1vclwtbWFpdGFpXC1cKGNoaW5lc2VcLXN0cm9uZ1wtZHJpbmtcKTsKK+e1kOekvuiHqueUsSA8IFwoY29uc3RpdHV0aW9uYWxcKVwtZnJlZWRvbVwtb2ZcLWFzc29jaWF0aW9uOwor5bydIDwgdGhlXC1wYXJ0XC1vZlwtYVwtYm93XC1ncmFzcGVkXC13aGVuXC1zaG9vdGluZzsKK+WWrOefsyA8IHFpYW9cLXNoaVwtXChjaGluZXNlXC1sZWFkZXJzaGlwXC1jb250ZW5kZXJcKTsKK+ixjumJpCA8IFwoc3RyYWlnaHRcLWRvd25cLWhvb2tlZFwtY2hhcmFjdGVyXC1zdHJva2VcKTsKK+SlnCA8IHByb3RlY3RpdmVcLW1ldGFsXC1vblwtdGhlXC1heGlzXC1vZlwtYVwtd2hlZWw7CivmiJDmnKwgPCBcKG1hbnVmYWN0dXJpbmdcLFwtcHJvZHVjdGlvblwsXC1ldGNcLlwpXC1jb3N0czsKK+SZliA8IGFcLWNsb3RoXC10b1wtY2FycnlcLWFuXC1paW5mYW50XC1vblwtdGhlXC1iYWNrOwor546L576y5LmLIDwgbmFtZVwtb2ZcLWFcLXBlcnNvblwsXC1hXC1mYW1vdXNcLWNhbGxpZ3JhcGhlcjsKK+SPqyA8IGluXC1iZXR3ZWVuXC1vZlwtdGhlXC1hYmRvbWVuXC1hbmRcLXRoZVwtc3BpbmU7CivkjYkgPCB0cmFjZXNcLW9yXC1tYXJrc1wtb2ZcLWluY29tcGxldGVcLW9yXC1kYW1hZ2U7CivkjLggPCBmaW5lXC1zaWxrXC1mYWJyaWNcLW9mXC1icmlnaHRcLXdoaXRlXC1jb2xvdXI7Civpgorop5Lnp5EgPCBsZWZ0b3ZlclwtYml0c1wtYW5kXC1waWVjZXNcLVwob2ZcLWluZHVzdHJpYWw7Civki78gPCBhXC1kZWNvcmF0aXZlXC1rbm90XC1tYWRlXC1vZlwtY29sb3JmdWxcLXNpbGs7CivkiJwgPCBhXC10aHJlYWRcLXVzZWRcLWJ5XC1jYXJwZW50ZXJzXC1mb3JcLW1hcmtpbmc7CivkiIYgPCBhXC1zaGFsbG93XC1hbmRcLWxvbmdcLXNoYXBlZFwtYmFtYm9vXC1iYXNrZXQ7Civku6PnkIYgPCBhY3RpbmdcLVwodGVtcG9yYXJpbHlcLWZpbGxpbmdcLWFcLXBvc2l0aW9uXCk7Civjv7kgPCBqdXR0aW5nXC1vblwtdGhlXC1lcGlkZXJtaXNcLW9yXC10aGVcLWN1dGljbGU7CivjvKsgPCBlYXJ0aGVud2FyZVwtb3JcLXBvdHRlcnlcLXdpdGhcLWJpZ1wtb3BlbmluZzsKK+O1uyA8IHRvXC1wZXJzcGlyZVwtZnJvbVwtZW1iYXJyYXNzbWVudFwtb3JcLXNoYW1lOwor6JST5bu25YWo5ZyLIDwgdG9cLXNwcmVhZFwtdGhyb3VnaG91dFwtdGhlXC1lbnRpcmVcLWNvdW50cnk7CivjrakgPCBhXC1raW5kXC1vZlwtdHJlZVwtY2FuXC1iZVwtdXNlZFwtYXNcLWR5ZVwtc3R1ZmY7Civjo5kgPCB0b1wtd2Fsa1wtaW5cLWFuXC1lYXN5XC1hbmRcLWxlaXN1cmVseVwtbWFubmVyOwor46KqIDwgdG9cLWRyYXdcLWFcLWZ1bGxcLWJvd1wtdG9cLWFpbVwtYXRcLXRoZVwtdGFyZ2V0Owor5a6i5buzIDwgZHJhd2luZ1wtcm9vbVwtXChyb29tXC1mb3JcLWFycml2aW5nXC1ndWVzdHNcKTsKK+OYiiA8IHRoZVwtYWJydXB0XC1hbmRcLWhhc3R5XC1zb3VuZFwtb2ZcLXRoZVwtY3Jvd2Q7Civjlq4gPCBhblwtaW50ZXJqZWN0aW9uXC11c2VkXC1pblwtcG9lbXNcLWFuZFwtc29uZ3M7CivjlK4gPCBhXC1raW5kXC1vZlwtYW5pbWFsXC13aGljaFwtbG9va3NcLWxpa2VcLWFcLXJhdDsKK+iTrumcpyA8IHdheFwtYXBwbGVcLVwoYVwtcmVkZGlzaFwtcGVhclwtc2hhcGVkXC1mcnVpdFwpOwor6aGM57C9IDwgdG9cLXdyaXRlXC10aGVcLXRpdGxlXC1vZlwtYVwtYm9va1wtb25cLWFcLWxhYmVsOwor55m+5oCd5LiN6KejIDwgcmVtYWluXC1wdXp6bGVkXC1hZnRlclwtcG9uZGVyaW5nXC1vdmVyXC1zdGg7CivljYrli57li5XlipsgPCBvbmVcLWFibGVcLXRvXC1kb1wtbGlnaHRcLW1hbnVhbFwtbGFib3VyXC1vbmx5Owor57i95b6M5Yuk6YOoIDwgXChtaWxpdGFyeVwpXC1nZW5lcmFsXC1sb2dpc3RpY3NcLWRlcGFydG1lbnQ7CivkuIDlnIvlhanliLYgPCBvbmVcLWNvdW50cnlcLFwtdHdvXC1zeXN0ZW1zXC1cKGNoaW5hXC10YWl3YW5cKTsKK+aTuuS6i+Wvpuism+mBk+eQhiA8IHByZXNlbnRcLXRoZVwtZmFjdHNcLWFuZFwtcmVhc29uXC10aGluZ3NcLW91dDsKK+iAgeS6jCA8IHRoZVwtc2Vjb25kXC1jaGlsZFwtb3JcLWJyb3RoZXJcLVwob3JcLXNpc3RlclwpOwor5Lit5Y2XIDwgXChhYmJyZXZpYXRpb25cLWZvclwpXC1jaGluYVwtXC1cLXNvdXRoXC1hZnJpY2E7CivpmL/mmIzml48gPCB0aGVcLWFjaGFuZ1wtbmF0aW9uYWxpdHlcLWxpdmluZ1wtaW5cLXl1bm5hbjsKK+eJiOasoSA8IHRoZVwtb3JkZXJcLWluXC13aGljaFwtZWRpdGlvbnNcLWFyZVwtcHJpbnRlZDsKK+WVpyA8IGludGVyamVjdGlvblwtb2ZcLWFwcHJvdmFsXC1vclwtYWRtaXJhdGlvbjsKK+aNuiA8IHRvXC1wcmVzc1wtZG93blwtaGVhdmlseVwtd2l0aFwtdGhlXC1maW5nZXJzOwor5YKjIDwgdGhlXC1kYWlcLW1pbm9yaXR5XC1saXZpbmdcLWluXC1zb3V0aFwtY2hpbmE7CivpuKkgPCBhXC1iaXJkXC1yZXNlbWJsaW5nXC10aGVcLXNlY3JldGFyeVwtZmFsY29uOwor5redIDwgbmFtZVwtb2ZcLWFuXC1hZmZsdWVudFwtb2ZcLXRoZVwtcG95YW5nXC1sYWtlOwor6YOFIDwgdG9cLWdvXC11cFwtdG9cLlwtZmxvdXJpc2hpbmdcLWFcLXN1cGVybGF0aXZlOwor6L2rIDwgYVwtYmxvY2tcLXRoYXRcLWtlZXBzXC1hXC13aGVlbFwtZnJvbVwtbW92aW5nOwor5ba3IDwgYVwtcmFuZ2VcLW9mXC1tb3VudGFpbnNcLWluXC1odW5hblwtcHJvdmluY2U7CivprLIgPCB0eXBlXC1vZlwtY2FsZHJvblwtd2l0aFwtdGhyZWVcLWhvbGxvd1wtbGVnczsKK+WIliA8IGN1dHRpbmdcLW9mZlwtZmVldFwtYXNcLWZvcm1cLW9mXC1wdW5pc2htZW50Owor56m4IDwgdGhlXC1nbG9vbVwtb2ZcLXRoZVwtZ3JhdmVcLWFcLXRvbWJcLW9yXC1ncmF2ZTsKK+iYhSA8IGFcLWZyYWdyYW50XC1wbGFudFwtdGhlXC1yb290XC1pc1wtbWVkaWNpbmFsOwor55m96aCt6Kun6ICBIDwgbGl2ZVwtdG9cLXJpcGVcLW9sZFwtYWdlXC1pblwtY29uanVnYWxcLWJsaXNzOwor5Y+X5YK3IDwgc3VmZmVyXC1pbmp1cmllc1wtXChpblwtYW5cLWFjY2lkZW50XCxcLWV0Y1wuXCk7CivoqILnq4sgPCBhZ3JlZVwtdG9cLVwodHJlYXR5XCxcLWNvbnRyYWN0XCxcLWFncmVlbWVudFwpOwor5aSP5puGIDwgdGhlXC10cmFkaXRpb25hbFwtY2hpbmVzZVwtbHVuYXJcLWNhbGVuZGFyOwor5oiQ5Y2D5LiK6JCsIDwgYnlcLXRoZVwtdGhvdXNhbmRzXC1hbmRcLXRlbnNcLW9mXC10aG91c2FuZHM7CivluKvnr4QgPCBub3JtYWxcLVwoZWdcLFwtYmVpamluZ1wtbm9ybWFsXC11bml2ZXJzaXR5XCk7CivkvanmtJvopb8gPCBcKG5hbmN5XClcLXBlbG9zaVwtXChtZW1iZXJcLW9mXC11c1wtY29uZ3Jlc3NcKTsKK+mphiA8IHVzZWRcLWluXC10cmFuc2xpdGVyYXRpbmdcLWJ1ZGRoaXN0XC1ib29rczsKK+mnjyA8IG9mZnNwcmluZ1wtb2ZcLWFcLXN0YWxsaW9uXC1hbmRcLWFcLXNoZVwtbXVsZTsKK+W7o+WgtCA8IGFcLXB1YmxpY1wtc3F1YXJlXC1cKGVnXCxcLXRpYW5hbm1lblwtc3F1YXJlXCk7CivpiYwgPCB0aGVcLWJlbGxzXC1vblwtdGhlXC1jYXJ0XC1pblwtYW5jaWVudFwtY2hpbmE7Civoo5znpaggPCBidXlcLW9uZScnc1wtdGlja2V0XC1hZnRlclwtdGhlXC1ub3JtYWxcLXRpbWU7Civnmbznh5IgPCBoYXZlXC1hXC1oaWdoXC10ZW1wZXJhdHVyZVwtXChmcm9tXC1pbGxuZXNzXCk7CivoqacgPCB0b1wtZXhhbWluZVwtaW50b1wtanVkaWNpYWxseVwtdG9cLWZpbmRcLW91dDsKK+e2syA8IGFcLWNsb3RoXC10b1wtY2FycnlcLWFuXC1pbmZhbnRcLW9uXC10aGVcLWJhY2s7CivntpYgPCB0aGVcLWhhbmdpbmdcLWZsYXBcLWluXC10aGVcLWZyb250XC1vZlwtYVwtaGF0Owor56WrIDwgdHJpZW5uaWFsXC1zYWNyaWZpY2VcLXRvXC1vbmUnJ3NcLWFuY2VzdG9yczsKK+ebhuWcsCA8IGJhc2luXC1cKGxvd1wtbHlpbmdcLWdlb2dyYXBoaWNhbFwtZmVhdHVyZVwpOwor56O7IDwgYVwtdHJpYnV0YXJ5XC1vZlwtdGhlXC13ZWlcLXJpdmVyXC1pblwtc2hhbnhpOwor5omL6LehIDwgc2JcLicnc1wtb3JpZ2luYWxcLWhhbmR3cml0aW5nXC1vclwtcGFpbnRpbmc7CivnkqfpgoQgPCByZXR1cm5cLVwoYVwtYm9ycm93ZWRcLW9iamVjdFwpXC13aXRoXC10aGFua3M7CivkuI3lrqPogIzmiLAgPCBvcGVuXC1ob3N0aWxpdGllc1wtd2l0aG91dFwtZGVjbGFyaW5nXC13YXI7CivlnIvpmpvpm7vkv6Hoga/nm58gPCBpbnRlcm5hdGlvbmFsXC10ZWxlY29tbXVuaWNhdGlvbnNcLXVuaW9uOwor5LiN6YGg5Y2D6YeMIDwgbWFrZVwtbGlnaHRcLW9mXC10cmF2ZWxsaW5nXC1hXC10aG91c2FuZFwtbGk7CivmlrQgPCB0aGVcLXNvdW5kXC1vZlwtd2F0ZXJcLWZsb3dpbmdcLWFtb25nXC1yb2NrczsKK+WuieWxheaogualrSA8IGxpdmVcLWFuZFwtd29ya1wtaW5cLXBlYWNlXC1hbmRcLWNvbnRlbnRtZW50Owor6KGo5aa5IDwgZmVtYWxlXC1jb3VzaW5cLXdpdGhcLWFcLWRpZmZlcmVudFwtc3VybmFtZTsKK+W0kSA8IGt1bmx1blwtbW91bnRhaW5zXC1pblwtamlhbmdcLXN1XC1wcm92aW5jZVwuOwor5ouG5pWjIDwgdG9cLWJyZWFrXC11cFwtXChhXC1tYXJyaWFnZVwsXC1mYW1pbHlcLFwtZXRjXC5cKTsKK+WQkOmtr+eVqiA8IHRoZVwtdHVyZmFuXC1iYXNpblwsXC1pblwteGluamlhbmdcLXByb3ZpbmNlOwor5YKZ5ZOBIDwgbWFjaGluZVwtcGFydHNcLW9yXC10b29sc1wta2VwdFwtaW5cLXJlc2VydmU7CivksJggPCB0b1wta2lsbFwtYnlcLWhhbmdpbmdcLW9yXC10b1wtc3RyYW5ndWxhdGlvbjsKK+SulyA8IHdoaXRlXC1mcm9tXC1mb3JlaGVhZFwtdG9cLWxpcHNcLW9mXC1hXC1ob3JzZTsKK+SqsiA8IGFuY2llbnRcLXB1bmlzaG1lbnRcLW9mXC1zaGF2aW5nXC10aGVcLWhlYWQ7CivkqbggPCBmaW5lXC13b29sZW5cLWJsYW5rZXRcLW9uXC10b3BcLW9mXC1hXC1zYWRkbGU7CivkqasgPCBhXC11bml0XC10b1wtY291bnRcLXNob2VzXC1pblwtYW5jaWVudFwtdGltZXM7CivkpoUgPCBhXC1raW5kXC1vZlwtd2VhcG9uXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivkpZAgPCBjb29raW5nXC11dGVuc2lsc1wtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor5KKHIDwgYVwtc29uXC13aG9cLWlzXC1ub3RcLXNvXC1nb29kXC1hc1wtaGlzXC1mYXRoZXI7Civkm5cgPCB0b1wtcHJ5XC1pbnRvXC1vclwtZXhwb3NlXC1hbm90aGVyJydzXC1zZWNyZXQ7CivkmoUgPCB0b1wtbG9va1wtYWZ0ZXJcLWhvbWVcLW9yXC1kb21lc3RpY1wtYWZmYWlyczsKK+SYqCA8IHNob3J0XC1sZWdnaW5nc1wtZHJhd25cLW92ZXJcLXRoZVwtdHJvdXNlcnM7Civklr8gPCBhXC1raW5kXC1vZlwtY2xhbVwtd2l0aFwtdGhpY2tcLXdoaXRlXC1zaGVsbHM7CivklbAgPCBhXC1zZWNvbmRcLW5hbWVcLWZvclwtcmhpem9tZVwtb2ZcLXdpbmRcLXdlZWQ7Civkk60gPCB3ZWVkXC1vclwtZ3Jhc3NcLXdpdGhcLW5hcnJvd1wtdGhpY2tcLWdsYWRlczsKK+WNiuiEq+eUoiA8IHBhcnRseVwtcmVsZWFzZWRcLWZyb21cLXByb2R1Y3RpdmVcLWxhYm91cjsKK+SNuyA8IHlvdW5nXC1nb2F0XC1vZlwtc2hlZXBcLXVuZGVyXC1vbmVcLXllYXJcLW9sZDsKK+SNpiA8IGFcLWtpbmRcLW9mXC10dXJiYW5cLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+SMuSA8IGFcLWdhcm1lbnRcLW9mXC1vbmVcLWNvbG91clwtd2l0aFwtbm9cLWxpbmluZzsKK+S4jeWPr+WQjOaXpeiAjOiqniA8IGNhbm5vdFwtYmVcLW1lbnRpb25lZFwtaW5cLXRoZVwtc2FtZVwtYnJlYXRoOwor5ISqIDwgaGFuZ2luZ1wtZG93blwtb2ZcLXRoZVwtZWFyc1wtb2ZcLXRoZVwtZ3JhaW5zOwor5ISNIDwgeWVhclwtZW5kXC1zYWNyaWZpY2VcLW9mXC10aGVcLXpob3VcLWR5bmFzdHk7CivjvaAgPCBjb25uZWN0aW9uXC1vZlwtdGhlXC1kaXRjaGVzXC1vclwtd2F0ZXJ3YXlzOwor47yuIDwgdG9cLXJ1Ylwtb3V0XC10aGVcLWZpbHRoXC13aXRoXC1icm9rZW5cLXRpbGVzOwor46upIDwgdGhlXC1maXJzdFwtb2ZcLXRoZVwtZm91clwtc2Vhc29uXC1cLVwtXC1zcHJpbmc7CivjpJ0gPCBwYWxwaXRhdGlvblwtb3JcLWZsdXR0ZXJpbmdcLW9mXC10aGVcLWhlYXJ0Owor45+MIDwgYVwtbW91bnRhaW5cLWluXC10b2RheScnc1wtc2ljaHVhblwtcHJvdmluY2U7CivjlK8gPCBhXC1sYXJnZVwtYmFza2V0XC1mb3JcLWhvbGRpbmdcLWNvb2tlZFwtcmljZTsKK+mmluS7uyA8IGZpcnN0XC1wZXJzb25cLXRvXC1iZVwtYXBwb2ludGVkXC10b1wtYVwtcG9zdDsKK+e4veabuOiomCA8IGdlbmVyYWxcLXNlY3JldGFyeVwtXChvZlwtY29tbXVuaXN0XC1wYXJ0eVwpOwor6YOo6ZW3IDwgaGVhZFwtb2ZcLWFcLVwoZ292ZXJubWVudFwsXC1ldGNcKVwtZGVwYXJ0bWVudDsKK+avlOmHjyA8IHRha2VcLXJvdWdoXC1tZWFzdXJlbWVudHNcLVwod2l0aFwtdGhlXC1oYW5kOwor6YGN6auU6bGX5YK3IDwgY292ZXJlZFwtYWxsXC1vdmVyXC13aXRoXC1jdXRzXC1hbmRcLWJydWlzZXM7CivnrJkgPCBzbWFsbFwtZ291cmRcLXNoYXBlZFwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+a7lSA8IGFuXC1hbmNpZW50XC1zdGF0ZVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+mVmyA8IGxhcmdlXC1iZWxsXC11c2VkXC1hc1wtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+iutSA8IGFuXC1pbnRlcmplY3Rpb25cLXVzZWRcLWV4cHJlc3NcLXN1cnByaXNlOwor5rOUIDwgd2F0ZXJcLWZyb21cLXdhc2hpbmdcLXJpY2VcLXRvXC1ib2lsXC10aGljazsKK+eYkCA8IHRvXC1kaWVcLWluXC1wcmlzb25cLWZyb21cLWNvbGRcLWFuZFwtaHVuZ2VyOwor5qO8IDwgYmVhbXNcLWluXC10aGVcLXJvb2ZcLW9mXC1hXC1ob3VzZVwtY29uZnVzZWQ7CivmlZnmjojnlaLnq5/mmK/mlZnmjoggPCBwcm9mZXNzb3JzXC1hcmVcLVwoYWZ0ZXJcLWFsbFwpXC1wcm9mZXNzb3JzOwor55m+6Laz5LmL6J+y5q276ICM5LiN5YO1IDwgYVwtY2VudGlwZWRlXC1kaWVzXC1idXRcLW5ldmVyXC1mYWxsc1wtZG93bjsKK+WNmuaEmyA8IHVuaXZlcnNhbFwtZnJhdGVybml0eVwtXChvclwtYnJvdGhlcmhvb2RcKTsKK+aVl+eBqyA8IHJlbGlldmVcLWluZmxhbW1hdGlvblwtb3JcLWludGVybmFsXC1oZWF0Owor57aT54efIDwgZW5nYWdlXC1pblwtXChhXC1idXNpbmVzc1wtYWN0aXZpdHlcLFwtZXRjXC5cKTsKK+mbhuaIkCA8IGludGVncmF0ZWRcLVwoYXNcLWluXC1pbnRlZ3JhdGVkXC1jaXJjdWl0XCk7CivpuoUgPCBhXC1zbWFsbFwtc3BvdHRlZFwtZGVlclwtZm91bmRcLWluXC1uXC5jaGluYTsKK+WFp+aHruWkluaCoyA8IGRvbWVzdGljXC1zdHJpZmVcLWFuZFwtZm9yZWlnblwtYWdyZXNzaW9uOwor5a6J5YWo6IiH5Lqk5o+b5aeU5ZOh5pyDIDwgc2VjdXJpdGllc1wtYW5kXC1leGNoYW5nZVwtY29tbXVuaWNhdGlvbjsKK+aUv+WnlCA8IHBvbGl0aWNhbFwtY29tbWlzc2FyXC1cKHdpdGhpblwtdGhlXC1hcm15XCk7CivmsojlnIvmlL4gPCBjaGluZXNlXC1mb3JlaWduXC1taW5pc3RyeVwtc3Bva2VzcGVyc29uOwor57eo5bCOIDwgd3JpdGVcLWFuZFwtZGlyZWN0XC1cKGFcLXBsYXlcLFwtZmlsbVwsXC1ldGNcLlwpOwor6KGM6aebIDwgXCh2ZWhpY2xlc1wsXC1ldGNcLlwpXC10cmF2ZWxcLWFsb25nXC1hXC1yb3V0ZTsKK+WFteeoriA8IFwobWlsaXRhcnlcKVwtYnJhbmNoXC1vZlwtdGhlXC1hcm1lZFwtZm9yY2VzOwor6Zi8IDwgdGhlXC1zdGVwc1wtbGVhZGluZ1wtdG9cLXRoZVwtZWFzdGVyblwtZG9vcjsKK+mAvOWuriA8IGZvcmNlXC10aGVcLWtpbmdcLW9yXC1lbXBlcm9yXC10b1wtYWJkaWNhdGU7CivovJcgPCBhXC1jcm9zc1wtYmFyXC1hdFwtZW5kXC1vZlwtYVwtY2FycmlhZ2VcLXBvbGU7CivoiKrooYwgPCBzYWlsXC1vclwtZmx5XC1cKGluXC1haXJcLFwtd2F0ZXJcLFwtb3JcLXNwYWNlXCk7CivoqY4gPCBpbnRlcmplY3Rpb25cLXVzZWRcLXRvXC1leHByZXNzXC1zdXJwcmlzZTsKK+e8jCA8IGNvYXJzZVwtY290dG9uXC1jbG90aFwtdXNlZFwtZm9yXC1tb3VybmluZzsKK+ehnCA8IHRoZVwtc291bmRcLW9mXC1zdG9uZXNcLWtub2NraW5nXC10b2dldGhlcjsKK+ebuOS/oSA8IGJlXC1jb252aW5jZWRcLVwodGhhdFwtc29tZXRoaW5nXC1pc1wtdHJ1ZVwpOwor54qJIDwgYW5cLW94XC13aXRoXC15ZWxsb3dcLWhhaXJcLWFuZFwtYmxhY2tcLWxpcHM7Civmi5Tnp6cgPCBwdWxsXC11cFwtc2VlZGxpbmdzXC1cKGZvclwtdHJhbnNwbGFudGluZ1wpOwor54WdIDwgdHdpc3RlZFwtcGFwZXJcLWZvclwtbGlnaHRpbmdcLWNpZ2FyZXR0ZXM7CivmiYvoo6EgPCBcKGFcLXNpdHVhdGlvblwtaXNcKVwtaW5cLVwoc29tZW9uZScnc1wpXC1oYW5kczsKK+aNleaSiCA8IGZpc2hcLWZvclwtXChhcXVhdGljXC1hbmltYWxzXC1hbmRcLXBsYW50c1wpOwor56mG5qGC6IuxIDwgbXVcLWd1aVwteWluZ1wtXChuYW1lXC1vZlwtYVwtd29tYW5cLXdhcnJpb3JcKTsKK+ewveWQjSA8IHRvXC1zaWduXC1cKG9uZScnc1wtbmFtZVwtd2l0aFwtYVwtcGVuXCxcLWV0Y1wuXCk7Civmv5/ljZcgPCBqaScnbmFuXC1cKGNhcGl0YWxcLW9mXC1zaGFuZG9uZ1wtcHJvdmluY2VcKTsKK+W4rCA8IHRoZVwtc2tpcnRcLW9mXC1hXC1sYWR5JydzXC1kcmVzc1wtcGV0dGljb2F0Owor5bWgIDwgYVwtdmFsbGV5XC13aXRoXC1hXC1zdHJlYW1cLWluXC1pdFwuXC1hXC1nb3JnZTsKK+iZm+aTrOmAmumBk+aomeiqjOespiA8IHZpcnR1YWxcLWNoYW5uZWxcLWNvbm5lY3Rpb25cLWlkZW50aWZpZXI7CivlsY/mop0gPCBzZXRcLW9mXC1cKHVzdWFsbHlcLWZvdXJcKVwtaGFuZ2luZ1wtc2Nyb2xsczsKK+Wtq+Wls+WFkiA8IGdyYW5kZGF1Z2h0ZXJcLVwoZGF1Z2h0ZXJcLW9mXC1vbmUnJ3NcLXNvblwpOwor56m256ufIDwgYWZ0ZXJcLWFsbFwtXCh3aGVuXC1hbGxcLWlzXC1zYWlkXC1hbmRcLWRvbmVcKTsKK+mOruaxnyA8IHpoZW5qaWFuZ1wtXChjaXR5XClcLFwtaW5cLWppYW5nc3VcLXByb3ZpbmNlOwor5LGXIDwgYVwtbG9uZ1wtbmFycm93XC1maXNoXC10cmljaGl1cnVzXC1hcm1hdHVzOwor5LGUIDwgYVwtbG9uZ1wtbmFycm93XC1hbmRcLXNpbHZlclwtY29sb3JlZFwtZmlzaDsKK+SqkyA8IGFcLW1ldGFsXC1vcm5hbWVudFwtb25cLXNvbWVcLWtpbmRcLW9mXC1iZWx0Owor5KiZIDwgdG9cLXJhaW5cLWNhdHNcLWFuZFwtZG9nc1wtZm9yXC1hXC1sb25nXC10aW1lOwor5KaKIDwgYW5cLWFwcGxpYW5jZVwtZm9yXC13YWxraW5nXC1vblwtdGhlXC1zYW5kczsKK+SlgiA8IHRoZVwtc2hhcnBcLWVkZ2VcLW9mXC1hXC1zaG92ZWxcLW9yXC1hXC1zcGFkZTsKK+ShlSA8IHRoZVwtcmVhclwtcGxhdGZvcm1cLW9mXC1hXC1saWdodFwtY2FycmlhZ2U7CivknJQgPCB0b1wtc3BlYWtcLW9uXC10aGVcLWlkZWFzXC1vZlwtc29tZW9uZVwtZWxzZTsKK+ayu+eXheaVkeS6uiA8IGN1cmVcLXRoZVwtc2lja25lc3NcLXRvXC1zYXZlXC10aGVcLXBhdGllbnQ7CivklqAgPCBhXC1raW5kXC1vZlwtbGl6YXJkXC1mb3VuZFwtaW5cLWRhbXBcLXBsYWNlczsKK+SWnCA8IHRoZVwtZmlnaHRpbmdcLXNvdW5kXC1tYWRlXC1ieVwtdHdvXC10aWdlcnM7CivmnInlv5fogIXkuovnq5/miJAgPCB3aGVyZVwtdGhlcmVcLWlzXC1hXC13aWxsXCxcLXRoZXJlXC1pc1wtYVwtd2F5Owor5I6SIDwgZmx5aW5nXC1xdWlja2x5XC1hbmRcLXRvXC1hdHRhY2tcLXN1ZGRlbmx5Owor5IuKIDwgZGVjb3JhdGlvbnNcLW9mXC10aGVcLWVtcGVyb3InJ3NcLWNhcnJpYWdlOwor5ICbIDwgdG9cLWxvb2tcLWZhclwtd2l0aFwtdGhlXC1leWVzXC1oYWxmXC1jbG9zZWQ7CivjvKggPCBhXC13YXRlclwtamFyXC13aXRoXC1lYXJzXC1mb3JcLWNhcnJ5aW5nXC1pdDsKK+O7jiA8IGFcLWxhcmdlXC1ob3Jpem9udGFsXC1tdXNpY2FsXC1pbnN0cnVtZW50Owor47qqIDwgYW5cLXVuY2FydmVkXC1vZlwtdW5wb2xpc2hlZFwtamFkZVwtb3JcLWdlbTsKK+O1vyA8IGVuZGxlc3NseVwtbG9uZ1wtb3JcLXZhc3RcLXdhdGVyXC1jdXJyZW50czsKK+O0qSA8IG5hbWVcLW9mXC1hXC1zdHJlYW1cLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civjr5ggPCBhXC1zbWFsbFwtd29vZGVuXC1zdGFuZFwtaGF2aW5nXC1mb3VyXC1sZWdzOwor46SNIDwgbmV2ZXJcLXJldmVhbFwtb25lJydzXC1mZWVsaW5nXC1vclwtZW1vdGlvbjsKK+OjoCA8IGFcLXJvcGVcLWRlY29yYXRlZFwtd2l0aFwtYnJvbnplXC1vcm5hbWVudDsKK+OhkSA8IGFuY2llbnRcLW1vdXJuaW5nXC10dXJiYW5cLXdvcm5cLWJ5XC13b21lbjsKK+OgkSA8IGhpZ2hcLW1vdW50YWluXC1zdGVlcFwtcnVnZ2VkXC1hbmRcLXVuZXZlbjsKK+OghCA8IG5hbWVcLW9mXC1hXC1tb3VudGFpblwtaW5cLXl1bm5hblwtcHJvdmluY2U7CivjoIEgPCBpcnJlZ3VsYXJcLW91dGxpbmVcLW9mXC1hXC1yYW5nZVwtb2ZcLWhpbGxzOwor45+aIDwgbmFtZVwtb2ZcLWFcLW1vdW50YWluXC1pblwtc2hhbnhpXC1wcm92aW5jZTsKK+OatiA8IHdpZmVcLW9mXC1vbmUnJ3NcLWh1c2JhbmQnJ3NcLWVsZGVyXC1icm90aGVyOwor45iIIDwgYWJsZVwtdG9cLXRha2VcLWFcLWNvcnJlY3RcLXZpZXdcLW9mXC10aGluZ3M7Civjl7AgPCB0aGVcLWNoYXJhY3RlclwtdXNlZFwtaW5cLXRyYW5zbGl0ZXJhdGlvbjsKK+OSvyA8IGFcLWtpbmRcLW9mXC10dXJiYW5cLXVzZWRcLWluXC1hbmNpZW50XC10aW1lOwor5Li756eRIDwgcmVxdWlyZWRcLWNvdXJzZXNcLWluXC10aGVcLW1ham9yXC1zdWJqZWN0Owor5bCa5oWV5p2wIDwgamFtZXNcLXNhc3NlclwtXCh1c1wtYW1iYXNzYWRvclwtdG9cLWNoaW5hXCk7Civlk4DptLvpgY3ph44gPCBhXC1sYW5kXC1zd2FybWluZ1wtd2l0aFwtZGlzYXN0ZXJcLXZpY3RpbXM7Civnl4Xlvp7lj6PlhaUgPCBpbGxuZXNzXC1maW5kc1wtaXRzXC13YXlcLWluXC1ieVwtdGhlXC1tb3V0aDsKK+ePreW6lSA8IG9yZGluYXJ5XC1tZW1iZXJzXC1vZlwtdGhlYXRyaWNhbFwtdHJvdXBlOwor6YeR57y9IDwgXChnb2xkXClcLWFsbXNcLWJvd2xcLVwob2ZcLWFcLWJ1ZGRoaXN0XC1tb25rXCk7CivloZ7niL7ljZcgPCBcKGV1Z2VuZVwpXC1jZXJuYW5cLVwoYXBvbGxvXC0xN1wtYXN0cm9uYXV0XCk7Civoga/lkI0gPCBqb2ludGx5XC1cKHNpZ25lZFwsXC1kZWNsYXJlZFwsXC1zcG9uc29yZWRcKTsKK+e4veWPg+isgOmDqCA8IFwobWlsaXRhcnlcKVwtZ2VuZXJhbFwtc3RhZmZcLWhlYWRxdWFydGVyczsKK+S4i+amuyA8IHN0YXlcLWF0XC1cKGFcLWhvdGVsXCxcLWV0Y1wuXC1kdXJpbmdcLWFcLXRyaXBcKTsKK+W5tOeVq+WFkiA8IG5ld1wteWVhclwtXChvclwtc3ByaW5nXC1mZXN0aXZhbFwpXC1waWN0dXJlOwor6ZC16aOv56KXIDwgXCJpcm9uXC1yaWNlXC1ib3dsXCJcLVwtXC1cLXNlY3VyZVwtZW1wbG95bWVudDsKK+iBr+mCpuiqv+afpeWxgCA8IGZiaVwtXChmZWRlcmFsXC1idXJlYXVcLW9mXC1pbnZlc3RpZ2F0aW9uXCk7Civog6Hlv5fmmI4gPCBob1wtY2hpXC1taW5oXC1cKHZpZXRuYW1lc2VcLWxlYWRlclwsXC1jaXR5XCk7CivoqJjov7AgPCBtYWtlXC1hXC1kZXNjcmlwdGl2ZVwtcmVjb3JkXC1cKG9mXC1ldmVudHNcKTsKK+aSpee1g+aoguWZqCA8IHBsdWNrZWRcLXN0cmluZ1wtb3JcLXN0cmluZ2VkXC1pbnN0cnVtZW50Owor5byBIDwgY29uaWNhbFwtY2FwXC13b3JuXC1kdXJpbmdcLXpob3VcLWR5bmFzdHk7CivphYkgPCB0ZW50aFwtb2ZcLXRoZVwtdHdlbHZlXC1lYXJ0aGx5XC1icmFuY2hlczsKK+aXjCA8IGJhbm5lclwtb3JcLWZsYWdcLWFkb3JuZWRcLXdpdGhcLWZlYXRoZXJzOwor6KGuIDwgY2VyZW1vbmlhbFwtZHJlc3NcLXdvcm5cLWJ5XC10aGVcLWVtcGVyb3I7CivmuqcgPCByaXZlclwtaW5cLWFuaHVpXC1hbmRcLWppYW5nc3VcLXByb3ZpbmNlczsKK+ezjSA8IGZvb2RcLW1hZGVcLW9mXC1jcnVzaGVkXC1hbmRcLWNvb2tlZFwtcmljZTsKK+aumyA8IHRvXC1wdXRcLXRvXC1kZWF0aFwtdG9cLWltcHJpc29uXC1mb3JcLWxpZmU7Civni40gPCBzcGVjaWVzXC1vZlwtZGVlclwtZm91bmRcLWluXC1ub3J0aFwtY2hpbmE7Civnu4IgPCByaWJib25cLW9yXC1jb3JkXC11c2VkXC1hdHRhY2hcLW9ybmFtZW50czsKK+ejiSA8IHRoZVwtc3RvbmVcLWJhc2VcLW9yXC1wbGludGhcLW9mXC1hXC1waWxsYXI7CivolbkgPCBpcG9tb2VhXC1hcXVhdGljYVwtdXNlZFwtYXNcLWFcLXZlZ2V0YWJsZTsKK+aal+WCtyA8IGludGVybmFsXC1cKGludmlzaWJsZVwpXC1pbmp1cnlcLVwoZGFtYWdlXCk7CivmqpTmoYjovYnpgIHlrZjlj5blj4rnrqHnkIYgPCBmaWxlXC10cmFuc2ZlclwsXC1hY2Nlc3NcLWFuZFwtbWFuYWdlbWVudDsKK+Wkqua5liA8IHRhaVwtaHVcLWxha2VcLFwtYVwtYmlnXC1sYWtlXC1ieVwtd3V4aVwtY2l0eTsKK+apq+mJpCA8IFwoaG9yaXpvbnRhbFwtaG9va2VkXC1jaGFyYWN0ZXJcLXN0cm9rZVwpOwor5YyX5a6LIDwgdGhlXC1ub3J0aGVyblwtc29uZ1wtZHluYXN0eVwtXCg5NjBcLTExMjdcKTsKK+m9iCA8IGNvbGRcLWluXC10aGVcLWhlYWRcLWNhdGFycmhcLW9mXC10aGVcLW5vc2U7CivpubsgPCBpbXB1cmVcLWNhcmJvbmF0ZVwtb2ZcLXNvZGl1bVwtb2ZcLW5hdHJvbjsKK+mEieS4iyA8IGNvdW50cnlcLVwoYXNcLW9wcG9zZWRcLXRvXC10b3duXC1vclwtY2l0eVwpOwor6baiIDwgYVwtYmlyZFwtd2hpY2hcLWZyZXF1ZW50c1wtdGhlXC1zZWFcLXNob3JlOwor5Yil5YW35LiA5qC8IDwgaGF2aW5nXC1hXC11bmlxdWVcLW9yXC1kaXN0aW5jdGl2ZVwtc3R5bGU7CivnsL3oqIIgPCB0b1wtYWdyZWVcLXRvXC1hbmRcLXNpZ25cLVwoYVwtdHJlYXR5XCxcLWV0Y1wpOwor6YOqIDwgbmFtZVwtb2ZcLWFcLXN0cmVhbVwtaW5cLXNpY2h1YW5cLXByb3ZpbmNlOwor5b6Q5oKy6bS7IDwgbmFtZVwtb2ZcLWFcLWZhbW91c1wtcGFpbnRlclwsXC14dVwtYmVpaG9uZzsKK+i9niA8IGFcLXZlaGljbGVcLWZvclwtdHJhbnNwb3J0aW5nXC1wcmlzb25lcnM7CivovLkgPCB0d29cLXBpZWNlc1wtb2ZcLXdvb2RcLXVuZGVybmVhdGhcLWFcLWNhcnQ7CivoroDos6PmlrDogZ4gPCB5b21pdXJpXC1zaGltYnVuXC1cKGphcGFuZXNlXC1uZXdzcGFwZXJcKTsKK+WinuWAvCA8IGFwcHJlY2lhdGlvblwtXChvZlwtYVwtY2FyXCxcLWhvdXNlXCxcLWV0Y1wuXCk7CivkuIDkuZ3lm5vkuZ3lubQgPCB0aGVcLXllYXJcLTE5NDlcLVwoY29tbXVuaXN0XC1yZXZvbHV0aW9uXCk7Civoir8gPCBncmFzc1wtd2hpY2hcLWhhc1wtYmVlblwtY3V0XC1hbmRcLXJlZ3Jvd247Civog6wgPCBhXC1kaXNlYXNlJydzXC1uYW1lXC1pblwtY2hpbmVzZVwtbWVkaWNpbmU7CivnpoogPCBzZW1pXC1hbm51YWxcLWNlcmVtb255XC1vZlwtcHVyaWZpY2F0aW9uOwor5YW15a62IDwgbWlsaXRhcnlcLXN0cmF0ZWdpc3RcLWluXC1hbmNpZW50XC1jaGluYTsKK+iLseWwuiA8IFwoZW5nbGlzaFwpXC1mb290XC1cKHVuaXRcLW9mXC1tZWFzdXJlbWVudFwpOwor5ZyL6Zqb5qiZ5rqW57WE57mUIDwgaW50ZXJuYXRpb25hbFwtc3RhbmRhcmRzXC1vcmdhbml6YXRpb247CivmiY3nlo/lrbjmt7ogPCBoYXZlXC1saXR0bGVcLXRhbGVudFwtYW5kXC1sZXNzXC1sZWFybmluZzsKK+a3qumZtyA8IFwodGVycml0b3J5XClcLWZhbGxcLXRvXC1lbmVteVwtb2NjdXBhdGlvbjsKK+aIpSA8IGFcLXNtYWxsXC1zdGVlbHlhcmRcLWZvclwtd2VpZ2hpbmdcLW1vbmV5Owor6Iqx5pyo6JitIDwgaHVhXC1tdVwtbGFuXC1cKG5hbWVcLW9mXC1hXC13b21hblwtd2FycmlvclwpOwor5omT5LiN6YGOIDwgbm90XC10b1wtYmVcLWFibGVcLXRvXC1iZWF0XC1vclwtZGVmZWF0XC1zYlwuOwor5LiW55WM5oCn5Y+k6ICB5ZWP6aGMIDwgYVwtcHJvYmxlbVwtYXNcLW9sZFwtYXNcLXRoZVwtd29ybGRcLWl0c2VsZjsKK+mBv+WdkeiQveS6lSA8IGRvZGdlXC1hXC1waXRcLW9ubHlcLXRvXC1mYWxsXC1pbnRvXC1hXC13ZWxsOwor5a+NIDwgdXNlZFwtYXNcLWFcLXRlcm1cLW9mXC1jb21wYXJpc29uXDpcLXJhdGhlcjsKK+S6uumBuCA8IHBlcnNvblwoc1wpXC1zZWxlY3RlZFwtXChmb3JcLWFcLWpvYlwsXC1ldGNcLlwpOwor55m85LqG6KiAIDwgXChcInBhc3RcLXRlbnNlXCJcLW9mXC1cOueZvOiogFwpXC1zcG9rZVwtcHVibGljbHk7CivlkpcgPCB2ZXJiYWxcLXBhcnRpY2xlXC1vZlwtcGVyZmVjdGl2ZVwtYXNwZWN0Owor6K6K5rqr5YuV54mpIDwgcG9pa2lsb3RoZXJtYWxcLVwoY29sZFwtYmxvb2RlZFwpXC1hbmltYWw7CivmnIPplbcgPCBwcmVzaWRlbnRcLW9mXC1hXC1jbHViXCxcLWNvbW1pdHRlZVwsXC1ldGNcLjsKK+S4sSA8IGNoaWxkJydzXC1oYWlyc3R5bGVcLWJvdW5kXC1pblwtdHdvXC10dWZ0czsKK+S4jeiHqumHjyA8IG5vdFwtdGFrZVwtYVwtcHJvcGVyXC1tZWFzdXJlXC1vZlwtb25lc2VsZjsKK+SupCA8IG9uZVwtb2ZcLXRoZVwtMzZcLWdhcmRlbnNcLWluXC1oYW5cLWR5bmFzdHk7CivkrK0gPCBuYW1lXC1vZlwtYVwtbGVnZW5kYXJ5XC1mZXJvY2lvdXNcLWFuaW1hbDsKK+SqlCA8IGNyb3NzXC1iYXJcLW9mXC13b29kXC11bmRlclwtdGhlXC1jYXJyaWFnZTsKK+SnpCA8IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+SkjCA8IGFcLWtpbmRcLW9mXC13aW5lXC1iZVwtYnJld2VkXC1mcm9tXC1ncmFpbnM7CivkoLcgPCB0aGVcLWFwcGVhcmFuY2VcLW9mXC1oZWlnaHRcLWluXC1hXC1wZXJzb247CivkoIUgPCBoYW5kc1wtYW5kXC1mZWV0XC1jaGFwcGVkXC1mcm9tXC10aGVcLWNvbGQ7CivknaQgPCBhXC1wcmltaXRpdmVcLXRyaWJlXC1pblwtc291dGh3ZXN0XC1jaGluYTsKK+SdnyA8IGFcLWZpZXJjZVwtbWFuXC1lYXRpbmdcLWFuaW1hbFwtaW5cLWxlZ2VuZDsKK+SdnSA8IGFuXC1leGNsYW1hdGlvblwtaW5kaWNhdGluZ1wtYWRtaXJhdGlvbjsKK+SbkyA8IGFuXC1vZmZpY2lhbFwtcG9zaXRpb25cLWluXC1mb3JtZXJcLXRpbWVzOwor5JqYIDwgdGhlXC1sb25nXC1hbmRcLXVwcmlnaHRcLWhvcm5zXC1vZlwtY2F0dGxlOwor5JaSIDwgZWFydGhlbndhcmVcLXdpdGhcLXRoZVwtc2hhcGVcLW9mXC1hXC1iZWFuOwor5JWOIDwgbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzc1wtcGVyZW5uaWFsOwor5JORIDwgbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzc1wtZHVja3dlZWRzOwor5JGXIDwgdG9cLXBvdW5kXC1pblwtb3JkZXJcLXRvXC1yZW1vdmVcLXRoZVwtaHVzazsKK+SQsSA8IHRvXC1waWNrXC10aGVcLW1lYXRcLWluXC1iZXR3ZWVuXC1vZlwtYm9uZXM7Civkj4EgPCB1bmFibGVcLXRvXC1oZWFyXC1kaXN0aW5jdGx5XC1vclwtY2xlYXJseTsKK+Wvq+aIkCA8IHRvXC1jb21waWxlXC1cKGZhc2hpb25cLXRocm91Z2hcLXdyaXRpbmdcKTsKK+SKoCA8IHRvXC1naXZlXC1hXC1zdXBwbHlcLWZcLWdyYWluXC1mb3JcLXJhdGlvbnM7CivkiZ8gPCBhXC1iYW1ib29cLWJhc2tldFwtdXNlZFwtdG9cLWNhdGNoXC1maXNoZXM7CivkiLAgPCBhXC1icnVzaFwtZm9yXC13YXNoaW5nXC1raXRjaGVuXC11dGVuc2lsczsKK+SHvCA8IGFcLWJhbWJvb1wtdmVzc2VsXC11c2VkXC10b1wtY2F0Y2hcLWZpc2hlczsKK+WQnumHkSA8IHRvXC1jb21taXRcLXN1aWNpZGVcLWJ5XC1zd2FsbG93aW5nXC1nb2xkOwor5ISrIDwgYVwta2luZFwtb2ZcLXNvcmdodW1cLXdpdGhcLXdoaXRlXC1zcHJvdXRzOwor5ISIIDwgc2FjcmlmaWNlXC10b1wtaGFwcGluZXNzXC1hbmRcLWdvb2RcLWx1Y2s7Civkg6QgPCBibGFja1wtY29sb3JlZFwtZ3JpbmRzdG9uZVwtb3JcLXdoZXN0b25lOwor5IOOIDwgbmFtZVwtb2ZcLWFcLXBsYWNlXC1cLXNtYWxsXC1waWVjZVwtb2ZcLWNvYWw7CivkgrkgPCBzb3VuZFwtb2ZcLXRoZVwtZmFsbGluZ1wtcGllY2VzXC1vZlwtcm9ja3M7CivkgbYgPCB0b1wtbG9va1wtYXRcLXNvbWV0aGluZ1wtd2l0aG91dFwtd2lua2luZzsKK+SBtSA8IG5ld2Jvcm5cLWJhYnlcLXdpdGhcLXRoZVwtZXllbGlkc1wtY2xvc2VkOwor5p2/55y8IDwgbWVhc3VyZVwtaW5cLXRyYWRpdGlvbmFsXC1jaGluZXNlXC1tdXNpYzsKK+O9hSA8IHZlc3NlbFwtZm9yXC1jZXJlbW9ueVwtaW5cLWFuY2llbnRcLXRpbWVzOwor47i5IDwgY2F0dGxlXC13aXRoXC13aGl0ZVwtc3RyaXBlXC1vblwtdGhlXC1iYWNrOwor47iXIDwgbm90XC1hXC1yZWFsXC1mYXRoZXJcLW9yXC1hXC1uYXR1cmVcLWZhdGhlcjsKK+OzmCA8IGFcLWZvdW50YWluXC1vclwtc3ByaW5nXC1mbG93c1wtZG93bndhcmRzOwor466vIDwgd2hvbGVcLXBpZWNlXC1vZlwtb3JcLXVuYnJva2VuXC1maXJld29vZHM7CivjrpwgPCBhXC1ibG9ja3NcLWVuZ3JhdmVkXC1mb3JcLWhvbGRpbmdcLXRoaW5nczsKK+OfvCA8IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+mmluW6nCA8IGNhcGl0YWxcLWNpdHlcLW9mXC1hblwtYXV0b25vbW91c1wtcmVnaW9uOwor456UIDwgdGhlXC11cHJpZ2h0XC1iYXJcLWZvclwtZmFzdGVuaW5nXC1hXC1kb29yOwor452eIDwgcHJldGVuZFwtdG9cLWJlXC1kZWxpY2F0ZVwtYW5kXC1iZWF1dGlmdWw7CivjnLkgPCBuYW1lXC1vZlwtYVwtZm9sa1wtc29uZ1wtaW5cLWFuY2llbnRcLXRpbWVzOwor45qBIDwgdGhlXC1sb25nXC10YWlsXC1mZWF0aGVyc1wtd2hpY2hcLWN1cmxcLXVwOwor54+t5qyhIDwgb3JkZXJcLW9mXC1jbGFzc2VzXC1vclwtZ3JhZGVzXC1hdFwtc2Nob29sOwor5oqE5b6M6LevIDwgdG9cLW91dGZsYW5rXC1hbmRcLWF0dGFja1wtZnJvbVwtdGhlXC1yZWFyOwor57eo5bm06auUIDwgYW5uYWxpc3RpY1wtc3R5bGVcLVwoaW5cLWhpc3RvcmlvZ3JhcGh5XCk7CivlrrbphInpm54gPCAnJ2hvbWVcLXRvd25cLWNoaWNrZW4nJ1wtXChhXC10eXBlXC1vZlwtZGlzaFwpOwor56ug5a2d5Zq0IDwgam9oblwtY2hhbmdcLVwodGFpd2FuXC1mb3JlaWduXC1taW5pc3RlclwpOwor6LK05beeIDwgbmFtZVwtb2ZcLWFcLXByb3ZpbmNlXC1pblwtY2hpbmFcLFwtZ3VpemhvdTsKK+iTi+iMqCA8IFwoYmlsbFwpXC1nYXRlc1wtXChjaGFpcm1hblwtb2ZcLW1pY3Jvc29mdFwpOwor5ZC45byVIDwgYXR0cmFjdFwtXChpbnRlcmVzdFwsXC1pbnZlc3RtZW50XCxcLWV0Y1wuXCk7CivkvobkuI3lj4ogPCB0aGVyZScnc1wtbm90XC1lbm91Z2hcLXRpbWVcLVwodG9cLWRvXC1zdGhcLlwpOwor5pqX5ai8IDwgdW5saWNlbnNlZFwtXCh1bnJlZ2lzdGVyZWRcKVwtcHJvc3RpdHV0ZTsKK+mdnuWwjeeoseW8j+aVuOaTmueUqOaItue3miA8IGFzeW1tZXRyaWNhbFwtZGlnaXRhbFwtc3Vic2NyaWJlclwtbGluZTsKK+mcuOeOiyA8IHhpYW5nNHl1M1wtXCgyMzJcLTIwMlwtYmNcKVwtdGhlXC1jb25xdWVyb3I7Civlo73npq4gPCBiaXJ0aGRheVwtcHJlc2VudFwtXChmb3JcLWFuXC1vbGRcLXBlcnNvblwpOwor6ZiuIDwgYW5jaWVudFwtbXVzaWNhbFwtaW5zdHJ1bWVudFw6XC1zdXJuYW1lOwor5ZaUIDwgZGVzY3JpcHRpdmVcLW9mXC1jcnlpbmdcLW9yXC1vZlwtY3Jvd2luZzsKK+eQjyA8IHZlc3NlbFwtdXNlZFwtdG9cLWhvbGRcLWdyYWluXC1vZmZlcmluZ3M7CivpgpUgPCBmb3JtZXJcLW9yXC1saXRlcmFyeVwtbmFtZVwtZm9yXC1uYW5uaW5nOwor6a2RIDwgYVwtbW91bnRhaW5cLWRlbW9uXC1yZXNlbWJsaW5nXC1hXC10aWdlcjsKK+aYtiA8IGFcLWxvbmdcLWRheVwuXC1icmlnaHRcLlwtZXh0ZW5kZWRcLlwtY2xlYXI7CivnvKcgPCBhXC1jaGFpblwtb3JcLXJvcGVcLXVzZWRcLWJpbmRcLWNyaW1pbmFsczsKK+ierSA8IGFcLWRyYWdvblwtd2hvc2VcLWhvcm5zXC1oYXZlXC1ub3RcLWdyb3duOwor6b6AIDwgbG9zZVwtYmFieVwtdGVldGhcLWFuZFwtZ2V0XC1hZHVsdFwtdGVldGg7CivogpwgPCB0b1wtc2FjcmlmaWNlXC1vblwtdHdvXC1zdWNjZXNzaXZlXC1kYXlzOwor6YKXIDwgYW5cLWFuY2llbnRcLXBsYWNlXC1pblwtdGhlXC1zdGF0ZVwtb2ZcLXd1Owor6JCs57ijIDwgd2FueGlhblwtY291bnR5XCxcLWluXC1zaWNodWFuXC1wcm92aW5jZTsKK+atu+S4jeS6hiA8IHBvcnR1bGFjYVwtc3VuZGlhbFwtXChhXC10eXBlXC1vZlwtcGxhbnRcKTsKK+Wkp+S4reWtuOeUnyA8IHVuaXZlcnNpdHlcLWFuZFwtaGlnaFwtc2Nob29sXC1zdHVkZW50czsKK+i/juaYpeiKsSA8IHdpbnRlclwtamFzbWluZVwsXC1qYXNtaW51bVwtbnVkaWZsb3J1bTsKK+e0hOe/sOWFp+aWr+WgoSA8IGpvaGFubmVzYnVyZ1wtXChjaXR5XC1pblwtc291dGhcLWFmcmljYVwpOwor5Li75Lq657+BIDwgbWFzdGVyXC1cKG9mXC1vbmUnJ3NcLW93blwtZGVzdGlueVwsXC1ldGNcLlwpOwor5YiG5L2I5byP55Kw5aKDIDwgZGlzdHJpYnV0ZWRcLVwoY29tcHV0aW5nXClcLWVudmlyb25tZW50Owor5YW16YOoIDwgdGhlXC1taW5pc3RyeVwtb2ZcLXdhclwtaW5cLWZldWRhbFwtY2hpbmE7CivljJflkaggPCB0aGVcLW5vcnRoZXJuXC16aG91XC1keW5hc3R5XC1cKDU1N1wtNTgxXCk7CivlronliIblrojlt7EgPCBhYmlkZVwtYnlcLXRoZVwtbGF3XC1hbmRcLWJlaGF2ZVwtb25lc2VsZjsKK+WMl+S6rCA8IGJlaWppbmdcLVwoY2FwaXRhbFwtb2ZcLW1haW5sYW5kXC1jaGluYVwpOwor5aSn6aGv6Lqr5omLIDwgZnVsbHlcLWRpc3BsYXlpbmdcLW9uZScnc1wtY2FwYWJpbGl0aWVzOwor6Zu75L+h5pyN5YuZ5L6b5oeJ5ZWGIDwgdGVsZWNvbW11bmljYXRpb25zXC1zZXJ2aWNlXC1wcm92aWRlcjsKK+WTiOWvhueTnCA8IGhhbWlcLW1lbG9uXC1cKGFcLXZhcmlldHlcLW9mXC1tdXNrbWVsb25cKTsKK+mQpCA8IGh1Z2VcLXRyaXBvZFwtb2ZcLWJyb256ZVwtd2l0aFwtdHdvXC1lYXJzOwor6LK/5piT6aGNIDwgdm9sdW1lXC1vZlwtdHJhZGVcLVwoYmV0d2VlblwtY291bnRyaWVzXCk7CivojYnmoYggPCBkcmFmdFwtXChsZWdpc2xhdGlvblwsXC1wcm9wb3NhbFwsXC1ldGNcLlwpOwor6Kaq5oSbIDwgZGVhclwtXC5cLlwuXC1cKHdheVwtb2ZcLXN0YXJ0aW5nXC1hXC1sZXR0ZXJcKTsKK+inrSA8IG9uZVwtdHVybmluZ1wtdXBcLWFuZFwtb25lXC10dXJuaW5nXC1kb3duOwor6KOc55m9IDwgZmlsbGVyXC1cKGluXC1hXC1uZXdzcGFwZXJcLW9yXC1tYWdhemluZVwpOwor6KSxIDwgdG9cLWNhcnJ5XC1pblwtdGhlXC1ib3NvbVwtb3JcLXRoZVwtc2xlZXZlOwor5rOi54C+5aOv6ZeKIDwgc3VyZ2luZ1wtZm9yd2FyZFwtd2l0aFwtZ3JlYXRcLW1vbWVudHVtOwor6IiJ6KGMIDwgdG9cLWhvbGRcLVwoYVwtbWVldGluZ1wsXC1jZXJlbW9ueVwsXC1ldGNcLlwpOwor5Zue5q245Lit5ZyLIDwgdG9cLXJldHVyblwtdG9cLWNoaW5hXC1cKGVcLmdcLlwtaG9uZ1wta29uZ1wpOwor6ImcIDwgYVwtbG9uZ1wtbmFycm93XC12ZXNzZWxcLXdpdGhcLXR3b1wtbWFzdHM7CivnuL3li5Xlk6EgPCBnZW5lcmFsXC1tb2JpbGl6YXRpb25cLVwoZm9yXC13YXJcLFwtZXRjXCk7Civoh78gPCB0b1wtc2VwYXJhdGVcLXRoZVwtZ3JhaW5cLWZyb21cLXRoZVwtaHVzazsKK+e1sCA8IHdoaXRlXC1oZW1wZW5cLWNsb3RoXC13b3JuXC1ieVwtbW91cm5lcnM7Civkv53pgIEgPCByZWNvbW1lbmRcLVwoZm9yXC1hZG1pc3Npb25cLXRvXC1zY2hvb2xcKTsKK+aEm+iOq+iDveWKqSA8IHdpbGxpbmdcLXRvXC1oZWxwXC1idXRcLXVuYWJsZVwtdG9cLWRvXC1zbzsKK+eiqiA8IHN0b25lXC1zbGFiXC11c2VkXC1mb3JcLXdhc2hpbmdcLWNsb3RoZXM7CivovYnluLMgPCB0cmFuc2ZlclwtbW9uZXlcLWZyb21cfGludG9cLWFuXC1hY2NvdW50Owor5bit5L2NIDwgcGFybGlhbWVudGFyeVwtb3JcLWNvbmdyZXNzaW9uYWxcLXNlYXQ7Civnm4cgPCB3aHlcLW5vdFw/XC13b3VsZFwtaXRcLW5vdFwtYmVcLWJldHRlclwtdG9cPzsKK+W4g+S7gCA8IFwoZ2VvcmdlXClcLWJ1c2hcLVwoZm9ybWVyXC11c1wtcHJlc2lkZW50XCk7CivltKnpvo3ml48gPCB0aGVcLWJlbmdsb25nXC1cKHBlbmdsdW5nXClcLW5hdGlvbmFsaXR5Owor5rurIDwgd2F0ZXJcLWluXC13aGljaFwtcmljZVwtaGFzXC1iZWVuXC1ib2lsZWQ7CivpnZ7mlL/lupzntYTnuZQgPCBub25cLWdvdmVybm1lbnRhbFwtb3JnYW5pemF0aW9uXC1cKG5nb1wpOwor5a+p6KiKIDwgYVwtXChqdWRpY2lhbFwpXC10cmlhbFwtXChpblwtYVwtY291cnRyb29tXCk7CivmqpEgPCBsb2dzXC1yb2xsZWRcLWRvd25cLWluXC1kZWZlbnNlXC1vZlwtY2l0eTsKK+ajsyA8IHNtYWxsXC1waWxsYXJzXC10aGF0XC1zdXBwb3J0XC10aGVcLXJvb2Y7CivluJcgPCBhXC1tdWx0aWNvbG9yZWRcLXByb3BcLXVzZWRcLWluXC1kYW5jaW5nOwor57ac5ZCI5pyN5YuZ5pW45L2N57ay57WhIDwgaW50ZWdyYXRlZFwtc2VydmljZXNcLWRpZ2l0YWxcLW5ldHdvcms7CivlmKAgPCB0aGVcLWNoaXJwaW5nXC1vZlwtYmlyZHNcLWxvdWRcLWxhdWdodGVyOwor562G5qG/IDwgdGhlXC1zaGFmdFwtb2ZcLWFcLXBlblwtb3JcLXdyaXRpbmdcLWJydXNoOwor55eF5YuiIDwgZGVncmVlXC1vZlwtc2VyaW91c25lc3NcLW9mXC1hblwtaWxsbmVzczsKK+WUhCA8IGZpbmFsXC1wYXJ0aWNsZVwtb2ZcLWFzc2VydGlvblwtcGF0aGFrYTsKK+WAuyA8IHBob25ldGljXC11c2VkXC1pblwta29yZWFuXC1wbGFjZVwtbmFtZXM7CivktbogPCBib3VuZGFyeVwtYmV0d2VlblwtYWdyaWN1bHR1cmFsXC1sYW5kczsKK+S1uSA8IGluc2VjdHNcLXRoYXRcLWFyZVwtaW5qdXJpb3VzXC10b1wtY3JvcHM7CivkrY0gPCB0b1wtbGl2ZVwtd2l0aFwtYW5vdGhlclwtYXRcLWhpc1wtZXhwZW5zZTsKK+SspSA8IGNvb2tlZFwtZm9vZFwtd2hpY2hcLWhhc1wtYmVjb21lXC1tb3VsZHk7CivkrJkgPCB0b1wtZGFuY2VcLWFuZFwtdG9zc1wtYWJvdXRcLWluXC10aGVcLXdpbmQ7CivkuLvovqYgPCBob3N0XC1cKGFcLWNvbmZlcmVuY2VcLW9yXC1zcG9ydHNcLWV2ZW50XCk7CivkoKsgPCB0b1wtc3VjY3VtYlwtdG9cLXRoZVwtZWZmZWN0XC1vZlwtYWxjb2hvbDsKK+SdpiA8IGFcLWtpbmRcLW9mXC1hbmltYWxcLWxvb2tzXC1saWtlXC1sZW9wYXJkOwor5JygIDwgbGFuZ3VhZ2VcLW9mXC10aGVcLXNhdmFnZVwtb3JcLWJhcmJhcmlhbjsKK+SWuiA8IGFcLWxlZ2VuZGFyeVwtYW5pbWFsXC1pblwtYW5jaWVudFwtdGltZXM7CivkkrwgPCBhXC1iYW1ib29cLXRyYXlcLWZvclwtcmFpc2luZ1wtc2lsa3dvcm1zOwor5JGzIDwgYVwtaG9yaXpvbnRhbFwtYmFyXC1pblwtZnJvbnRcLW9mXC1hXC1ib2F0Owor5JCnIDwgdG9cLXJld2FyZFwtb3JcLWNoZWVyXC10cm9vcHNcLXdpdGhcLWZvb2Q7CivkjrAgPCBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC1zaWNodWFuXC1wcm92aW5jZTsKK+SNnyA8IGFcLWtpbmRcLW9mXC1maXNoXC1uZXRcLXdpdGhcLWZpbmVcLW1lc2hlczsKK+SHqCA8IGFcLWJhbWJvb1wtYmFza2V0XC1mb3JcLWZvb2RcLWNvbnRhaW5lcnM7CivpnLjnjovpnq0gPCBhXC1yYXR0bGVcLXN0aWNrXC11c2VkXC1pblwtZm9sa1wtZGFuY2luZzsKK+acrOiNiSA8IGFcLWJvb2tcLW9uXC1jaGluZXNlXC1cKGhlcmJhbFwpXC1tZWRpY2luZTsKK+SGjiA8IGdyYXNzXC1hbmRcLWdyYWluc1wtcHJvZHVjaW5nXC1ub1wtZnJ1aXQ7CivkhLsgPCBhXC1zZWNvbmRcLXRpbWVcLWdyb3dpbmdcLW9mXC1yaWNlXC1wbGFudDsKK+SAmiA8IHRvXC1saWZ0XC11cFwtdGhlXC1leWVzXC1hbmRcLWxvb2tcLWFyb3VuZDsKK+O/liA8IGNhcmJ1bmNsZVwtdXNlZFwtaW5cLW5hbWluZ1wtb2ZcLWFcLXBsYWNlOwor47qbIDwgbmFtZVwtb2ZcLWFcLXZpbGxhZ2VcLWluXC1oZW5hblwtcHJvdmluY2U7Civjt4ggPCBlbWJlcnNcLWtlcHRcLWZvclwtc3RhcnRpbmdcLWFcLW5ld1wtZmlyZTsKK+O1gSA8IHZhc3RcLWFuZFwtYm91bmRsZXNzXC1vZlwtZmxvd2luZ1wtd2F0ZXI7Civjs5UgPCB3YXRlclwtaW5cLXdoaWNoXC1yaWNlXC1oYXNcLWJlZW5cLXdhc2hlZDsKK+OvqiA8IGNhcnZlZFwtb3JcLXBhdHRlcm5lZFwtd2luZG93XC1yYWlsaW5nczsKK+S6uueJqSA8IGNoYXJhY3RlcnNcLVwoaW5cLWFcLXBsYXlcLFwtbm92ZWxcLFwtZXRjXC5cKTsKK+itsOmVtyA8IHNwZWFrZXJcLVwob2ZcLWFcLWxlZ2lzbGF0aXZlXC1hc3NlbWJseVwpOwor46CZIDwgYVwtbW91bnRhaW5cLXBhdGhzXC1uYW1lXC1vZlwtYVwtbW91bnRhaW47Civoqr/mn6XntZDmnpwgPCByZXN1bHRzXC1cKG9mXC1hblwtaW52ZXN0aWdhdGlvblwsXC1wb2xsXCk7Civjk60gPCB0b1wtbWFrZVwtcmVhZHlcLXRoZVwtbGVhdGhlclwtZm9yXC1zaG9lczsKK+OQtyA8IGFcLWtpbmRcLW9mXC1wdW5pc2htZW50XC1pblwtaGFuXC1keW5hc3R5Owor55m+56uv5b6F6IiJIDwgYVwtdGhvdXNhbmRcLXRoaW5nc1wtcmVtYWluXC10b1wtYmVcLWRvbmU7CivlronljZcgPCBcW2tvZmlcXVwtYW5uYW5cLVxbdW5cLXNlY3JldGFyeVwtZ2VuZXJhbFxdOwor5YyF6aOvIDwgZ2V0XC1vclwtc3VwcGx5XC1tZWFsc1wtYXRcLWFcLWZpeGVkXC1yYXRlOwor5pyJ5rC0IDwgXChvZlwtYVwtZHdlbGxpbmdcKVwtc3VwcGxpZWRcLXdpdGhcLXdhdGVyOwor55m95q6t6KC2IDwgdGhlXC1sYXJ2YVwtb2ZcLXNpbGt3b3JtXC13aXRoXC1iYXRyeXRpczsKK+ipsemhjCA8IHN1YmplY3RcLVwob2ZcLWFcLXRhbGtcLW9yXC1jb252ZXJzYXRpb25cKTsKK+S6i+WLmSA8IFwocG9saXRpY2FsXCxcLWVjb25vbWljXCxcLWV0Y1wuXClcLWFmZmFpcnM7CivlkrHlgJEgPCB3ZVwtXChpbmNsdWRpbmdcLXRoZVwtcGVyc29uXC1zcG9rZW5cLXRvXCk7CivlsKTph5HloZ7niL7ljZcgPCBldWdlbmVcLWNlcm5hblwtXChhcG9sbG9cLTE3XC1hc3Ryb25hdXRcKTsKK+eOh+WFiCA8IHRha2VcLXRoZVwtbGVhZFwtXChzaG93aW5nXC1pbml0aXRhdGl2ZVwpOwor55uu5YmN6YKE5LiN5riF5qWaIDwgYXRcLXByZXNlbnRcLWl0XC1pc1wtc3RpbGxcLXVuY2xlYXJcLVwuXC5cLlwuOwor56eL6auY5rCj54i9IDwgY2xlYXJcLWFuZFwtcmVmcmVzaGluZ1wtYXV0dW1uXC13ZWF0aGVyOwor5YyF56efIDwgcmVudFwtbGFuZFwtb3JcLWFcLWhvdXNlXC1mb3JcLXN1YmxldHRpbmc7CivmmI7mlocgPCBcKGxhd3NcLFwtcnVsZXNcLFwtZXRjXClcLXN0YXRlXC1pblwtd3JpdGluZzsKK+iisSA8IGFcLXBpZWNlXC1vZlwtY2xvdGhcLXVzZWRcLXdyYXBcLWJ1bmRsZXM7CivmjLIgPCB0b1wtZmVlbFwtb3JcLWZvbmRsZVwtd2l0aFwtdGhlXC1maW5nZXJzOwor56+RIDwgYVwtYmFtYm9vXC1iYXNrZXRcLWZvclwtY2FycnlpbmdcLWVhcnRoOwor6IKTIDwgcmVnaW9uXC1iZXR3ZWVuXC1oZWFydFwtYW5kXC1kaWFwaHJhZ207Civmu6YgPCByaXZlclwtYW5kXC1jb3VudHlcLWluXC1oZWJlaVwtcHJvdmluY2U7Civpg5cgPCBjaXR5XC11bmRlclwtdGhlXC1jaG91XC1keW5cLlwtYVwtc3VybmFtZTsKK+ePjyA8IHR3b1wtcGllY2VzXC1vZlwtamFkZVwtam9pbmVkXC10b2dldGhlcjsKK+e2piA8IGRhcmtcLWdyZXlcLlwtdmFyaWVnYXRlZFwuXC1zdXBlcmxhdGl2ZTsKK+m6hyA8IGdlbmVyYWxcLW5hbWVcLWZvclwtdGhlXC1ob3JubGVzc1wtZGVlcjsKK+eSjiA8IGFcLW5lY2tsYWNlXC1tYWRlXC1vZlwtcHJlY2lvdXNcLXN0b25lczsKK+aOviA8IGFcLWdlbmVyYWxcLWRlc2lnbmF0aW9uXC1vZlwtb2ZmaWNpYWxzOwor6YOHIDwgYW5cLWFuY2llbnRcLWZldWRhbFwtc3RhdGVcLWluXC1zaGFhbnhpOwor6YCP6KaWIDwgdG9cLWV4YW1pbmVcLWJ5XC1mbHVvcm9zY29wZVwtb3JcLXhcLXJheTsKK+WgseitpiA8IHJlcG9ydFwtXChhblwtaW5jaWRlbnRcKVwtdG9cLXRoZVwtcG9saWNlOwor56KR5biWIDwgYVwtcnViYmluZ1wtZnJvbVwtYVwtc3RvbmVcLWluc2NyaXB0aW9uOwor54mb5bm0IDwgeWVhclwtb2ZcLXRoZVwtb3hcLVwoaW5cLWNoaW5lc2VcLXpvZGlhY1wpOwor57Ch5Zau57ay57Wh566h55CG5Y2U6K2wIDwgc2ltcGxlXC1uZXR3b3JrXC1tYW5hZ2VtZW50XC1wcm90b2NvbDsKK+iHqOaZgueahOacrOWcsOeuoeeQhuaOpeWPoyA8IGludGVyaW1cLWxvY2FsXC1tYW5hZ2VtZW50XC1pbnRlcmZhY2U7CivljIXlu4IgPCBib3hcLVwoaW5cLWFcLXRoZWF0cmVcLW9yXC1jb25jZXJ0XC1oYWxsXCk7CivovYnorpMgPCB0cmFuc2ZlclwtXCh0ZWNobm9sb2d5XCxcLWdvb2RzXCxcLWV0Y1wuXCk7CivlhrDmtojnk6bop6MgPCBtZWx0XC1saWtlXC1pY2VcLWFuZFwtYnJlYWtcLWxpa2VcLXRpbGVzOwor6b6YIDwgdGhlXC1hcHBlYXJhbmNlXC1vZlwtYVwtZHJhZ29uXC13YWxraW5nOwor5Y2K5pak5YWr5YWpIDwgbm90XC1tdWNoXC10b1wtY2hvb3NlXC1iZXR3ZWVuXC10aGVcLXR3bzsKK+m0vSA8IGFcLXNwZWNpZXNcLW9mXC1iaXJkXC1yZXNlbWJsaW5nXC1xdWFpbDsKK+ebnOeJiCA8IHBpcmF0ZVwtdmVyc2lvblwtXChvZlwtc29mdHdhcmVcLFwtZVwuZ1wuXCk7CivmraXkurrlvozlobUgPCBmb2xsb3dcLWluXC1vdGhlclwtcGVvcGxlJydzXC1mb290c3RlcHM7CivphKsgPCBzdGF0ZVwtaW5cLXRvZGF5JydzXC1zaGFuZG9uZ1wtcHJvdmluY2U7CivphIcgPCBhXC1uYW1lXC1vZlwtYVwtdG93blwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+i/vyA8IHRvXC1iZVwtdGhlXC1maXJzdFwtdG9cLWJlZ2luXC1hXC1xdWFycmVsOwor6L2VIDwgZ3JlYXRcLWFycmF5XC1vZlwtc3BlYXJzXC1hbmRcLWNoYXJpb3RzOwor6LygIDwgZ3JlYXNlXC1wb3RcLWh1bmdcLXVuZGVyXC1heGxlXC1vZlwtY2FydDsKK+m+jemjm+mzs+iIniA8IGxpdFwuXDpcLWRyYWdvblwtZmxpZXNcLFwtcGhvZW5peFwtZGFuY2VzOwor57ej5Lu9IDwgZmF0ZVwtXCh3aGljaFwtYnJpbmdzXC1wZW9wbGVcLXRvZ2V0aGVyOwor5bmz5aOkIDwgcHlvbmd5YW5nXC1cKGNhcGl0YWxcLW9mXC1ub3J0aFwta29yZWFcKTsKK+Wci+mam+imi+iBniA8IGludGVybmF0aW9uYWxcLWJhY2tncm91bmRcLWtub3dsZWRnZTsKK+aTlOS7uyA8IGhvbGRcLWFcLWdvdmVybm1lbnRhbFwtb2ZmaWNlXC1vclwtcG9zdDsKK+iGsiA8IHRoZVwtdGhyZWVcLWRpdmlzaW9uc1wtb2ZcLXRoZVwtdmlzY2VyYTsKK+WFi+acjSA8IFwodHJ5XC10b1wpXC1vdmVyY29tZVwtXChoYXJkc2hpcHNcLFwtZXRjXCk7CivmioTpgIEgPCB0b1wtbWFrZVwtYVwtY29weVwtXChhbmRcLXNlbmRcLWl0XC10b1wtc2JcKTsKK+S4jeWkseeCuiA8IGNhblwtc3RpbGxcLWJlXC1jb25zaWRlcmVkXC1cKHRvXC1iZVwuXC5cLlwpOwor57SWIDwgYVwtcm9wZVwtZm9yXC1sZWFkaW5nXC1jYXR0bGVcLW9yXC1ob3JzZTsKK+acgOaDoOWciyA8IG1vc3RcLWZhdm9yZWRcLW5hdGlvblwtXCh0cmFkZVwtc3RhdHVzXCk7CivnrK4gPCBib2FyZHNcLXdoaWNoXC1zdXBwb3J0XC10aWxlc1wtb25cLXJvb2Y7CivmoYjpqZcgPCBpbnZlc3RpZ2F0ZVwtdGhlXC1ldmlkZW5jZVwtb2ZcLWFcLWNhc2U7CivmiZjpgYsgPCB0b1wtYm9va1wtb3JcLWNoZWNrXC10aHJvdWdoXC1cKGJhZ2dhZ2VcKTsKK+eghSA8IGNyb3NzXC1zdHJlYW1cLWJ5XC1zdGVwcGluZ1wtb25cLXN0b25lczsKK+Wci+WLmeWnlOWToSA8IG1lbWJlclwtb2ZcLXN0YXRlXC1jb3VuY2lsXC1cKGluXC1jaGluYVwpOwor5oi26YOoIDwgZmV1ZGFsXC1jaGluZXNlXC1taW5pc3RyeVwtb2ZcLXJldmVudWU7CivnkokgPCBhXC12ZXNzZWxcLXVzZWRcLWhvbGRcLWdyYWluXC1vZmZlcmluZ3M7CivmoqEgPCB0cmF5XC1mb3JcLWNhcnJ5aW5nXC1zYWNyaWZpY2lhbFwtbWVhdDsKK+WPr+enu+akjeaApyA8IHBvcnRhYmlsaXR5XC1cKHByb2dyYW1taW5nXC1sYW5ndWFnZVwpOwor5o6o5YuVIDwgdG9cLXB1c2hcLVwoZm9yXC1hY2NlcHRhbmNlXC1vZlwtYVwtcGxhblwpOwor5bm1IDwgZXZlblwtbGV2ZWxcLlwtdG9cLXJhaXNlXC1pblwtYm90aFwtaGFuZHM7Civlq4QgPCBhblwtYW5jaWVudFwtZW1wZXJvcicnc1wtbW90aGVyJydzXC1uYW1lOwor5pW06auU5pW45L2N5pyN5YuZ57ay6LevIDwgaW50ZWdyYXRlZFwtc2VydmljZVwtZGlnaXRhbFwtbmV0d29yazsKK+WbtyA8IHJvdW5kXC1zaGFwZWRcLXN0b3JhZ2VcLWJpblwtZm9yXC1ncmFpbjsKK+S6nui7jSA8IHNlY29uZFwtcGxhY2VcLVwoaW5cLWFcLXNwb3J0c1wtY29udGVzdFwpOwor5ZG85ZKM5rWp54m5IDwgaG9oaG90XC1cKGNhcGl0YWxcLW9mXC1pbm5lclwtbW9uZ29saWFcKTsKK+WfuumHkeacgyA8IGFcLWZvdW5kYXRpb25cLVwoaWVcLFwtYW5cLW9yZ2FuaXphdGlvblwpOwor5LSZIDwgYVwta2luZFwtb2ZcLWJpcmRcLXJlc2VtYmxpbmdcLXRoZVwtZHVjazsKK+SygyA8IGFcLWNhcnBcLWxpa2VcLWZpc2hcLXdpdGhcLWNoaWNrZW5cLWZlZXQ7CivpoY/pq5QgPCB5YW5cLXN0eWxlXC1cKGluXC1jaGluZXNlXC1jYWxsaWdyYXBoeVwpOwor5LmF6YGVIDwgXChoYXZlbicndFwtZG9uZVwtc3RoXClcLWZvclwtYVwtbG9uZ1wtdGltZTsKK+SplyA8IHRvXC1ydWxlXC1ieVwtbWlnaHRcLXJhdGhlclwtdGhhblwtcmlnaHQ7CivkopUgPCBhXC1ncm91cFwtb2ZcLXBlb3BsZVwtd2Fsa2luZ1wtdG9nZXRoZXI7CivkmqEgPCBib25lc1wtaW5cLWFcLWhvcm5cLW9mXC1jYXR0bGVcLWFuZFwtZ29hdDsKK+SZrCA8IHBsYWl0c1wtb25cLXRoZVwtc2lkZXNcLW9mXC1hXC1wZXR0aWNvYXQ7CivkkIAgPCB0b1wtZGlzbWVtYmVyXC1ib2R5XC1vZlwtdGhlXC1saXZlc3RvY2s7Civkjo4gPCB0b1wtZ2xpZGVcLW9yXC10b1wtaG92ZXJcLXVwXC1pblwtdGhlXC1haXI7CivkjYogPCBjbGF5XC1tYWRlXC1ibG93aW5nXC13aW5kXC1pbnN0cnVtZW50czsKK+SIvyA8IGJlbHRcLW9mXC10aGVcLWNhbnZhc1wtdG9wXC1vblwtdmVoaWNsZXM7Civkh64gPCBhXC1iYW1ib29cLW1hdFwtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor5bCP6aGM5aSn5YGaIDwgbWFrZVwtYVwtYmlnXC1mdXNzXC1vdmVyXC1hXC1taW5vclwtaXNzdWU7CivkhZogPCBjbG9zZWx5XC1ncm93aW5nXC1vZlwtdGhlXC1yaWNlXC1wbGFudHM7CivkhLYgPCByaWNlXC1wbGFudFwtZ3Jvd2luZ1wtdGhlXC1zZWNvbmRcLXRpbWU7Civkgb4gPCByZWRcLWFuZFwtc3dlbGxpbmdcLW9mXC10aGVcLWV5ZVwtc29ja2V0Owor5IGoIDwgdG9cLW9wZW5cLXRoZVwtZXllc1wtd2l0aFwtYXN0b25pc2htZW50Owor472bIDwgbmFycm93XC10cmFpbFwtb2ZcLXBhdGhcLWluXC10aGVcLWZpZWxkczsKK+O6kSA8IGRvZ3NcLXdvcm1lZFwtdGhyb3VnaFwtYVwtbmFycm93XC1wbGFjZTsKK+O5oiA8IGFcLWxhcmdlXC1hcGVcLWZvdW5kXC1pblwtd2VzdGVyblwtY2hpbmE7CivjuZwgPCB0d29cLWRvZ3NcLWFyZVwtYmFya2luZ1wtdG9cLWVhY2hcLW90aGVyOwor47mJIDwgYVwtbGVnZW5kYXJ5XC1hbmltYWxcLXdpdGhcLXRocmVlXC1mZWV0Owor47aAIDwgZGVlcFwtYW5kXC12YXN0XC1vZlwtdGhlXC1mbG93aW5nXC13YXRlcjsKK+aJk+mMr+S6hiA8IFwieW91XC1oYXZlXC1kaWFsZWRcLXRoZVwtd3JvbmdcLW51bWJlclwiOwor47C2IDwgdG9cLXdyaW5rbGVcLXRoZVwtbm9zZVwtd2l0aFwtc29ycm93ZnVsOwor462yIDwgYVwtd29vZGVuXC1mcmFtZVwtZm9yXC1jYXJyeWluZ1wtdGhpbmdzOwor55eF5YyF5YWSIDwgYVwtcGVyc29uXC13aG9cLWlzXC1hbHdheXNcLWZhbGxpbmdcLWlsbDsKK+OhoSA8IHNjcmVlblwtdG9cLW1ha2VcLWFcLXRlbXBvcmFyeVwta2l0Y2hlbjsKK+OgvyA8IGFcLWtpbmRcLW9mXC1kZWxpY2F0ZVwtYW5kXC1maW5lXC1mYWJyaWM7CivjnLogPCBuaWNlXC13aGl0ZVwtY29sb3JcLWFuZFwtbG9va3NcLXNvXC1nb29kOwor45y1IDwgd2l0aFwtYVwtY2hhcm1pbmdcLXNwcmlnaHRseVwtY2FycmlhZ2U7CivjmYggPCBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC1zaGFueGlcLXByb3ZpbmNlOwor6aaZ5bGxIDwgZnJhZ3JhbmNlXC1oaWxsXC1cKGFcLXBhcmtcLWluXC1iZWlqaW5nXCk7CivjlqEgPCB0aGVcLWJpcmRzXC1zaW5naW5nXC1kdXJpbmdcLXRoZVwtbmlnaHQ7CivjlbogPCBsb29rc1wtYmlnXC1vdXRzaWRlXC1idXRcLWVtcHR5XC1pbnNpZGU7CivjlYQgPCB0b1wtYXBwbHlcLWtub3dsZWRnZVwtdG9cLWZpbmFsXC1jYXVzZXM7CivkuI3omZvmraTooYwgPCB0aGVcLXRyaXBcLWhhc1wtbm90XC1iZWVuXC1tYWRlXC1pblwtdmFpbjsKK+mKt+avgCA8IHRvXC1kZXN0cm95XC1cKGJ5XC1tZWx0aW5nXC1vclwtYnVybmluZ1wpOwor5ouJ6I6r5pavIDwgXChwaGlsaXBwaW5lXC1wcmVzaWRlbnRcLWZpZGVsXClcLXJhbW9zOwor5q+U5YuS6ZmA5Yip5LqeIDwgcHJldG9yaWFcLVwoY2FwaXRhbFwtb2ZcLXNvdXRoXC1hZnJpY2FcKTsKK+WMl+mtjyA8IHRoZVwtbm9ydGhlcm5cLXdlaVwtZHluYXN0eVwtXCgzODZcLTUzNFwpOwor6KiA6KuW6Ieq55SxIDwgXChjb25zdGl0dXRpb25hbFwpXC1mcmVlZG9tXC1vZlwtc3BlZWNoOwor5pq055eFIDwgc3VkZGVuXC1hdHRhY2tcLW9mXC1hXC1zZXJpb3VzXC1pbGxuZXNzOwor5Lq65aSnIDwgXChjaGluYVwpXC1uYXRpb25hbFwtcGVvcGxlJydzXC1jb25ncmVzczsKK+eGsemspyA8IGJ1c3RsaW5nXC13aXRoXC1ub2lzZVwtYW5kXC1leGNpdGVtZW50Owor5ZGI5paHIDwgcGV0aXRpb25cLVwoc3VibWl0dGVkXC10b1wtYVwtc3VwZXJpb3JcKTsKK+aYpeevgCA8IHNwcmluZ1wtZmVzdGl2YWxcLVwoY2hpbmVzZVwtbmV3XC15ZWFyXCk7CivplovnmbznkrDlooMgPCBkZXZlbG9wbWVudFwtZW52aXJvbm1lbnRcLVwoY29tcHV0ZXJcKTsKK+S4jeitmOaZguWLmSA8IHNob3dcLW5vXC11bmRlcnN0YW5kaW5nXC1vZlwtdGhlXC10aW1lczsKK/CgvLsgPCBhXC1wYXJ0aWNsZVwtdXNlZFwtaW5cLXRyYW5zbGl0ZXJhdGlvbjsKK+iDoeW/l+W8tyA8IGphc29uXC1odVwtXCh0YWl3YW5cLWZvcmVpZ25cLW1pbmlzdGVyXCk7CivmlrDnloYgPCB4aW5qaWFuZ1wtXCh1eWd1clwtYXV0b25vbW91c1wtcmVnaW9uXCk7CivluavlgJLlv5kgPCBiZVwtbW9yZVwtb2ZcLWFcLWhpbmRyYW5jZVwtdGhhblwtYVwtaGVscDsKK+S/seaogumDqCA8IGNsdWJcLVwoaWVcLFwtYVwtZ3JvdXBcLW9yXC1vcmdhbml6YXRpb25cKTsKK+ekviA8IGdvZFwtb2ZcLXRoZVwtc29pbFwtYW5kXC1hbHRhcnNcLXRvXC1oaW07CivnkZ8gPCBsYXJnZVwtc3RyaW5nZWRcLW11c2ljYWxcLWluc3RydW1lbnQ7CivmpZ4gPCB1c2VkXC1mb3JcLWNleWxvblwtaW5cLWJ1ZGRoaXN0XC10ZXh0czsKK+WWvSA8IHVzZWRcLWluXC1vbm9tYXRvcG9ldGljXC1leHByZXNzaW9uczsKK+WahSA8IHRhbGtcLWluZGlzdGluY3RseVwtYW5kXC1mYWx0ZXJpbmdseTsKK+ijsSA8IHRvXC1tb3VudFwtbWFwc1wtb3JcLXNjcm9sbHNcLXRvXC1wYXN0ZTsKK+eMoiA8IGFcLWtpbmRcLW9mXC1tb25rZXlcLWZvdW5kXC1pblwtd1wuY2hpbmE7CivonK4gPCBhXC1mYWJ1bG91c1wtY3JlYXR1cmVcLWxpa2VcLWFcLXR1cnRsZTsKK+eioSA8IHN0b25lXC1yb2xsZXJcLXVzZWRcLXRvXC1sZXZlbFwtZmllbGRzOwor6YSjIDwgbmFtZVwtb2ZcLWFuY2llbnRcLWNpdHlcLWluXC1uXC5qaWFuZ3N1Owor57KiIDwgZ3JhaW5cLW9mZmVyZWRcLWluXC1yaXR1YWxcLXNhY3JpZmljZTsKK+ewpiA8IGxhcmdlXC11bWJyZWxsYVwtd2l0aFwtYVwtbG9uZ1wtaGFuZGxlOwor6J6TIDwgYVwtc21hbGxcLWNpY2FkYVwtd2l0aFwtYVwtc3F1YXJlXC1oZWFkOwor5LiN5pmC5LmL6ZyAIDwgYVwtcG9zc2libGVcLXBlcmlvZFwtb2ZcLXdhbnRcLW9yXC1uZWVkOwor5YWs5YWx5Lqk5o+b6Zu76Kmx57ay6LevIDwgcHVibGljXC1zd2l0Y2hlZFwtdGVsZXBob25lXC1uZXR3b3JrOwor57ay57WhIDwgXChjb21wdXRlclwsXC10ZWxlY29tXCxcLWV0Y1wuXClcLW5ldHdvcms7Civku6XniZnpgoTniZkgPCBhXC10b290aFwtZm9yXC1hXC10b290aFwtXChyZXRhbGlhdGlvblwpOwor5aOB5q+vIDwgdGFwZXN0cnlcLVwodXNlZFwtYXNcLWFcLXdhbGxcLWhhbmdpbmdcKTsKK+aTpua+oSA8IHJ1Ylwtb25lc2VsZlwtZG93blwtd2l0aFwtYVwtd2V0XC10b3dlbDsKK+iqjeWumiA8IG1haW50YWluXC1cKHRoYXRcLXNvbWV0aGluZ1wtaXNcLXRydWVcKTsKK+eZvuaIsOeZvuWLnSA8IGVtZXJnZVwtdmljdG9yaW91c1wtaW5cLWV2ZXJ5XC1iYXR0bGU7CivprYogPCBhXC1teXRoaWNhbFwtY3JlYXR1cmVcLXNhaWRcLWh1cmxcLXNhbjsKK+WIhuatpyA8IGRpZmZlcmVuY2VcLVwob2ZcLW9waW5pb25cLFwtcG9zaXRpb25cKTsKK+WLnuWLleevgCA8IGludGVybmF0aW9uYWxcLWxhYm9yXC1kYXlcLVwobWF5XC1kYXlcKTsKK+mfkCA8IGtuZWVcLXBhZFwtbWFkZVwtb2ZcLXJlZFwtZHllZFwtbGVhdGhlcjsKK+mAo+aIsCA8IGxpZW5cLWNoYW5cLVwodGFpd2FuXC12aWNlXC1wcmVzaWRlbnRcKTsKK+aKseeyl+iFvyA8IGxhdGNoXC1vblwtdG9cLXRoZVwtcmljaFwtYW5kXC1wb3dlcmZ1bDsKK+WItuW6piA8IFwocG9saXRpY2FsXClcLXN5c3RlbVwtb3JcLWluc3RpdHV0aW9uOwor6KOc57+SIDwgdGFrZVwtbGVzc29uc1wtYWZ0ZXJcLXNjaG9vbFwtb3JcLXdvcms7CivnlLHmraTlj6/oposgPCBmcm9tXC10aGlzXCxcLWl0XC1jYW5cLWJlXC1zZWVuXC10aGF0XC5cLlwuOwor6IGv6YKm6Zu75L+h5Lqk6YCa5aeU5ZOh5pyDIDwgZmVkZXJhbFwtY29tbXVuaWNhdGlvbnNcLWNvbW1pc3Npb247Civlu7rkuqQgPCB0b1wtZXN0YWJsaXNoXC1kaXBsb21hdGljXC1yZWxhdGlvbnM7Civou48gPCBjcm9zc1wtYmFyXC1hdFwtZW5kXC1vZlwtcG9sZXNcLW9mXC1jYXJ0Owor54Gr54G9IDwgZmlyZVwtXCh0aGF0XC1idXJuc1wtYnVpbGRpbmdzXCxcLWV0Y1wuXCk7CivlgpnoqrIgPCBcKG9mXC1hXC10ZWFjaGVyXClcLXRvXC1wcmVwYXJlXC1sZXNzb25zOwor6YeR5q2j5pelIDwga2ltXC1qb25nXC1pbFwtXChub3J0aFwta29yZWFuXC1sZWFkZXJcKTsKK+mWi+a8lCA8IFwob2ZcLWFcLXBsYXlcLFwtbW92aWVcLFwtZXRjXC5cKVwtdG9cLWJlZ2luOwor5YKZ6I2SIDwgcHJlcGFyZVwtYWdhaW5zdFwtbmF0dXJhbFwtZGlzYXN0ZXJzOwor6JaAIDwgdGhlXC1oaXBwdXJpc1wtb3JcLW1hcmUnJ3NcLXRhaWxcLXBsYW50Owor5LiN5pG46aCtIDwgbm90XC1hY3F1YWludGVkXC13aXRoXC10aGVcLXNpdHVhdGlvbjsKK+WFqOacgyA8IHBsZW5hcnlcLXNlc3Npb25cLVwoYXRcLWFcLWNvbmZlcmVuY2VcKTsKK+mtj+S6rOeUnyA8IHdlaVwtamluZ3NoZW5nXC1cKGNoaW5lc2VcLWRpc3NpZGVudFwpOwor6IGdIDwgdG9cLWN1dFwtdGhlXC1sZWZ0XC1lYXJzXC1vZlwtdGhlXC1zbGFpbjsKK+iAlCA8IHRvXC1ob2VcLXVwXC10aGVcLWVhcnRoXC1hcm91bmRcLXBsYW50czsKK+S+v+mboyA8IHJldG9ydFwtd2l0aFwtY2hhbGxlbmdpbmdcLXF1ZXN0aW9uczsKK+etlOi+ryA8IHRvXC1yZXBseVwtXCh0b1wtYW5cLWFjY3VzYXRpb25cLFwtZVwuZ1wuXCk7CivnsKsgPCBtdXNpY2FsXC1pbnN0cnVtZW50XC1saWtlXC1wYW5cLXBpcGVzOwor57CoIDwgYVwtYmVhbVwtZm9yXC1oYW5naW5nXC1iZWxsc1wtb3JcLWRydW1zOwor56SzIDwgbmFtZVwtb2ZcLXBsYWNlXC1pblwtc2hhblwteGlcLXByb3ZpbmNlOwor5a+46I2J5LiN55SfIDwgXCJub3RcLWV2ZW5cLWFcLWJsYWRlXC1vZlwtZ3Jhc3NcLWdyb3dzXCI7CivnoqsgPCBjb2Fyc2VcLXN0b25lXC1cKHVzZWRcLWZvclwtd2hldHN0b25lXCk7Civnkq8gPCBqYWRlXC1vcm5hbWVudFwtaW5cLXRoZVwtc2VhbXNcLW9mXC1jYXA7CivnkK8gPCBhXC1qYWRlXC10dWJlXC11c2VkXC1hc1wtYW5cLWluc3RydW1lbnQ7CivnjoEgPCBhXC1kb2dcLXdpdGhcLWFcLWxvbmdcLXNub3V0XC1vclwtbXV6emxlOwor5ZyW5pu4IDwgYm9va3NcLVwoaW5cLWFcLWxpYnJhcnlcLW9yXC1ib29rc3RvcmVcKTsKK+WutumVtyA8IHRoZVwtcGFyZW50XC1vclwtZ3VhcmRpYW5cLW9mXC1hXC1jaGlsZDsKK+WbnuatuCA8IHRvXC1yZXR1cm5cLVwodG9cLXByZXZpb3VzXC1jb25kaXRpb25cKTsKK+aTpuS6ruecvOedmyA8IHJlbW92ZVwtdGhlXC1zY2FsZXNcLWZyb21cLW9uZScnc1wtZXllczsKK+ijnOWBj+aVkeW8iiA8IHJlbWVkeVwtZGVmZWN0c1wtYW5kXC1yZWN0aWZ5XC1lcnJvcnM7Civmo58gPCB0aGVcLW1haW5cLWJlYW1zXC1zdXBwb3J0aW5nXC1hXC1ob3VzZTsKK+mqqOazlSA8IGJvbmVcLVwocHJvcGVydHlcLW9mXC1hXC1icnVzaFwtc3Ryb2tlXCk7Civnmb7lt53mrbjmtbcgPCBhbGxcLXRoaW5nc1wtdGVuZHNcLWluXC1vbmVcLWRpcmVjdGlvbjsKK+iqk+S4jeWPjeaClCA8IHRvXC12b3dcLW5vdFwtdG9cLWJyZWFrXC1vbmUnJ3NcLXByb21pc2U7CivlkIPkuI3kuIogPCBiZVwtdW5hYmxlXC10b1wtZ2V0XC1zb21ldGhpbmdcLXRvXC1lYXQ7CivmiKAgPCBhXC1zd29yZFwuXC1wb3R0ZXInJ3NcLWNsYXlcLlwtdG9cLWdhdGhlcjsKK+enkeWtuOe3qOi8ryA8IHNjaWVuY2VcLWVkaXRvclwtXChvZlwtYVwtcHVibGljYXRpb25cKTsKK+aYgummlumXiuatpSA8IHN0cmlkZVwtZm9yd2FyZFwtd2l0aFwtb25lJydzXC1jaGluXC11cDsKK+aXpee2k+aMh+aVuCA8IG5pa2tlaVwtaW5kZXhcLVwob2ZcLWphcGFuZXNlXC1zdG9ja3NcKTsKK+enkemahiA8IGNvbG9nbmVcLFwtZ2VybWFueVwtb3JcLWNvbG9uXCxcLXBhbmFtYTsKK+aJk+a2iCA8IGRpc3BlbFwtXChkb3VidHNcLFwtbWlzZ2l2aW5nc1wsXC1ldGNcLlwpOwor5ZGtIDwgZmluYWxcLXBhcnRpY2xlXC1leHByZXNzaW5nXC1jb25zZW50Owor5ZGhIDwgdGhlXC1jb3JuZXJzXC1vZlwtdGhlXC1tb3V0aFwtdGhlXC1saXBzOwor55a+55eF6aCQ6Ziy5Lit5b+DIDwgXCh1XC5zXC5cKVwtY2VudGVyXC1mb3JcLWRpc2Vhc2VcLWNvbnRyb2w7CivktqwgPCBoYXJkXC1maW5zXC1vblwtdGhlXC1iYWNrXC1vZlwtYVwtZHJhZ29uOwor5LaFIDwgYVwtbWFybW90XC1saWtlXC1yYXRcLXdpdGhcLWFcLWJpZ1wtaGVhZDsKK+S0kyA8IGdlbmVyYWxcLXRlcm1cLWZvclwtc21hbGxcLWJpcmRcLWdyb3VwOwor5KyXIDwgYmxvd25cLW9yXC10b3NzZWRcLWFib3V0XC1ieVwtdGhlXC13aW5kOwor5KeJIDwgbmFtZVwtb2ZcLWFcLXBhdmlsaW9uXC1pblwtaGFuXC1keW5hc3R5Owor5KW2IDwgY29va2luZ1wtdXRlbnNpbFwtdXNlZFwtaW5cLW9sZFwtdGltZXM7CivkpawgPCBhXC1tdXNpY2FsXC1pbnN0cnVtZW50XC1pblwtb2xkXC10aW1lczsKK+SjnCA8IG5hbWVcLW9mXC1hXC1jb3VudHlcLWluXC1hbmNpZW50XC10aW1lczsKK+SjjCA8IHJlc2lkZW5jZVwtb2ZcLWFcLXByaW5jZVwtb3JcLW5vYmlsaXR5Owor5KGdIDwgYVwtcmVhclwtY292ZXJpbmdcLW9mXC1hXC1iaWdcLWNhcnJpYWdlOwor5KGKIDwgdGhlXC1wcm90cnVkZWRcLXNpZGVzXC1vZlwtYVwtY2FycmlhZ2U7CivkoJogPCB0b1wtc3RlcFwtb25cLXRoZVwtZ3JvdW5kXC13aXRoXC1hXC1iYW5nOwor5JaDIDwgdGhlXC13YXRlclwtaXNcLXdhdmluZ1wtaW5cLXRoZVwtYnJlZXplOwor5JKnIDwgYVwtdmVzc2VsXC1vclwtdXRlbnNpbFwtbWFkZVwtb2ZcLXN0cmF3Owor5I2yIDwgYVwta2luZFwtb2ZcLXNoZWVwXC13aXRoXC1jdXJsZWRcLWhhaXJzOwor5Iu4IDwgYmFja1wtY2VudGVyXC1zdXR1cmVcLW9mXC10aGVcLWNsb3RoZXM7Civki5sgPCB0aGVcLWNsdXN0ZXJlZFwtZW1icm9pZGVyeVwtcGF0dGVybnM7CivkipYgPCB0b1wtZWF0XC1yaWNlXC1ncnVlbFwtbWl4ZWRcLXdpdGhcLW1lYXQ7CivkhoUgPCB0b1wtYWNjdW11bGF0ZVwtb3JcLXRvXC1zdG9yZVwtdXBcLXJpY2U7CivkgqcgPCByb2Nrc1wtY2x1c3RlcmVkXC1waWxlXC11cFwtdG9nZXRoZXJzOwor5IC/IDwgdG9cLWhhdmVcLWFcLWNhc3VhbFwtYW5kXC1zaG9ydFwtZ2xhbmNlOwor5om+5YiwIDwgZmluZFwtXCh3aGF0XC1vbmVcLXdhc1wtc2VhcmNoaW5nXC1mb3JcKTsKK+WPrOmWiyA8IGNvbnZlbmVcLVwoYVwtY29uZmVyZW5jZVwtb3JcLW1lZXRpbmdcKTsKK+O5lyA8IGNhdHRsZVwtYW5kXC1zaGVlcFwtaGF2ZVwtbm9cLWNoaWxkcmVuOwor47ayIDwgbWVhc3VyaW5nXC11bml0XC1mb3JcLXRoZXJtb2R5bmFtaWNzOwor47W6IDwgbmFtZVwtb2ZcLWFcLXN0cmVhbVwtaW5cLWFuY2llbnRcLXRpbWVzOwor47WQIDwgbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtaHViZWlcLXByb3ZpbmNlOwor47WLIDwgbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtaHVuYW5cLXByb3ZpbmNlOwor47GSIDwgdG9cLXNjb2xkXC1vclwtYmxhbWVcLWluXC1hXC1sb3VkXC12b2ljZTsKK+OuviA8IGFcLXBsYWNlXC1pblwtdG9kYXknJ3NcLWh1bmFuXC1wcm92aW5jZTsKK+OsiCA8IHRoZVwtc3VuXC13YXNcLXNoaW5pbmdcLWFuZFwtaXQnJ3NcLXdhcm07CivjqoogPCBpbmZlc3RlZFwtd2l0aFwtYmFuZGl0c1wtYW5kXC1yb2JiZXJzOwor46iYIDwgdG9cLWJsb3dcLXRoZVwtbm9zZVwtd2l0aFwtdGhlXC1maW5nZXJzOwor45++IDwgbmFtZVwtb2ZcLWFcLW1vdW50YWluXC1pblwtY291bnR5XC1qaWFuOwor45+4IDwgbmFtZVwtb2ZcLXBhdmlsaW9uXC1pblwtYW5jaWVudFwtY2hpbmE7Civjn4IgPCBuYW1lXC1vZlwtY2FwZVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+WRvOexsiA8IGNhbGxcLW9uXC1cKHNvbWVvbmVcLXRvXC1kb1wtc29tZXRoaW5nXCk7CivjmqogPCB0b1wtbWFrZVwtYVwtZGVjZXB0aXZlXC1zaG93XC1vZlwtcG93ZXI7Civpm7vohabovJTliqnoqK3oqIjoiIfnuarlnJYgPCBjb21wdXRlclwtYWlkZWRcLWRlc2lnblwtYW5kXC1kcmF3aW5nOwor45KNIDwgdXR0ZXJseVwtd2VhcnlcLWluXC1ib2R5XC1hbmRcLXNwaXJpdHM7CivjkIwgPCBhXC10cmliZVwtb2ZcLXNhdmFnZXNcLWluXC1zb3V0aFwtY2hpbmE7Civnp5HniL4gPCBcKGhlbG11dFwpXC1rb2hsXC1cKGdlcm1hblwtY2hhbmNlbGxvclwpOwor6b2L5pyIIDwgcmFtYWRhblwtXChtdXNsaW1cLW1vbnRoXC1vZlwtZmFzdGluZ1wpOwor5b6X5a+46YCy5bC6IDwgbGl0ZXJhbFw6XC1nZXRcLWFuXC1pbmNoXCxcLXdhbnRcLWFcLWZvb3Q7CivotbfkvoYgPCBiZWdpbm5pbmdcLW9yXC1jb250aW51aW5nXC1hblwtYWN0aW9uOwor5YyX6b2KIDwgdGhlXC1ub3J0aGVyblwtcWlcLWR5bmFzdHlcLVwoNTUwXC01NTdcKTsKK+WMl+a0i+i7jemWpSA8IHRoZVwtbm9ydGhlcm5cLXdhcmxvcmRzXC1cKDE5MTJcLTE5MjdcKTsKK+WQkOeplyA8IHRvXC1oYXZlXC10aGVcLWVhcnNcLW9mXC1ncmFpblwtY29tZVwtdXA7CivlpKfmg5HkuI3op6MgPCBkb1wtbm90XC11bmRlcnN0YW5kXC1hXC1jZXJ0YWluXC10aGluZzsKK+iri+mhmCA8IHBldGl0aW9uXC1cKGZvclwtYWN0aW9uXC10b1wtYmVcLXRha2VuXCk7CivljYrml6XliLblrbjmoKEgPCBoYWxmXC1kYXlcLVwob3JcLWRvdWJsZVwtc2hpZnRcLXNjaG9vbFwpOwor5piO5paH6KaP5a6aIDwgZXhwcmVzc2x5XC1zdGlwdWxhdGVkXC1cKGluXC13cml0aW5nXCk7Civkuqvlj5cgPCB0b1wtZW5qb3lcLVwocmlnaHRzXCxcLWJlbmVmaXRzXCxcLWV0Y1wuXCk7CivlpKfluq3lu6PnnL4gPCBwdWJsaWNcLXBsYWNlXC13aXRoXC1udW1lcm91c1wtcGVvcGxlOwor55m+54Sh5LiA5aSxIDwgbm9cLWRhbmdlclwtb2ZcLWFueXRoaW5nXC1nb2luZ1wtd3Jvbmc7CivkuInls70gPCB0aGVcLXRocmVlXC1jaGFuZ2ppYW5nXC1yaXZlclwtZ29yZ2VzOwor5Y+W5pqWIDwgdG9cLXdhcm1cLW9uZXNlbGZcLVwoYnlcLWFcLWZpcmVcLFwtZXRjXC5cKTsKK+S6uuasiuingOWvnyA8IGh1bWFuXC1yaWdodHNcLXdhdGNoXC1cKG9yZ2FuaXphdGlvblwpOwor6Zmi6ZW3IDwgcHJlc2lkZW50XC1cKG9mXC1hXC11bml2ZXJzaXR5XCxcLWV0Y1wuXCk7CivmqqLlr5/lrpggPCB0aGVcLXByb3NlY3V0aW9uXC1cKGluXC1hXC1jb3VydFwtY2FzZVwpOwor5YKZ6ICM5LiN55SoIDwgaGF2ZVwtc29tZXRoaW5nXC1yZWFkeVwtanVzdFwtaW5cLWNhc2U7CivoqIDoq5YgPCBleHByZXNzaW9uXC1vZlwtXChwb2xpdGljYWxcKVwtb3BpbmlvbjsKK+aHieeUqOeoi+W8j+S7i+mdoiA8IGFwcGxpY2F0aW9uXC1wcm9ncmFtbWluZ1wtaW50ZXJmYWNlOwor5o27IDwgdG9cLXR3aXN0XC1vclwtbmlwXC13aXRoXC10aGVcLWZpbmdlcnM7CivmiIwgPCBlbGV2ZW50aFwtb2ZcLXRlcnJlc3RyaWFsXC1icmFuY2hlczsKK+aQkyA8IHRvXC1ydWJcLW9yXC1yb2xsXC1iZXR3ZWVuXC10aGVcLWhhbmRzOwor5bCnIDwgYVwtbGVnZW5kYXJ5XC1hbmNpZW50XC1lbXBlcm9yXC1zYWdlOwor5am2IDwgd2lmZVwtb2ZcLWZhdGhlcicnc1wteW91bmdlclwtYnJvdGhlcjsKK+aOrCA8IHRvXC1ncmFzcFwtb3JcLWhvbGRcLXdpdGhcLWJvdGhcLWhhbmRzOwor5bmbIDwgc2Nyb2xsXC1vZlwtc2lsa1wtb3JcLWNsb3RoXC1wcmVzZW50ZTsKK+ajgiA8IGNhcnZlZFwtb3JcLXBhdHRlcm5lZFwtd2luZG93XC1zaWxsczsKK+awsiA8IGxpZmVcLWdpdmluZ1wtaW5mbHVlbmNlc1wtb2ZcLW5hdHVyZTsKK+ianSA8IGhhaXJ5XC1hbmRcLXBvaXNvbm91c1wtY2F0ZXJwaWxsYXJzOwor5r6nIDwgcml2ZXJcLWluXC1ub3J0aGVyblwtaHVuYW5cLXByb3ZpbmNlOwor562uIDwgZGl2aW5hdGlvblwtd2l0aFwtc3RhbGtzXC1vZlwtcGxhbnRzOwor56yqIDwgYVwtY29hcnNlXC1tYXRcLW9mXC1ydXNoZXNcLW9yXC1iYW1ib287CivpppMgPCBmcmllZFwtcm91bmRcLWNha2VzXC1vZlwtd2hlYXRcLWZsb3VyOwor566QIDwgdG9cLWRyYXdcLWFcLWJhbWJvb1wtYm93XC1vclwtY3Jvc3Nib3c7CivmiYMgPCBhXC1kb29yXC1iYXJcLXBsYWNlZFwtb3V0c2lkZVwtYVwtZG9vcjsKK+S7iSA8IHN1cm5hbWVcLW9mXC10aGVcLW1vdGhlclwtb2ZcLW1lbmNpdXM7Civnr4DlpJbnlJ/mnp0gPCBuZXdcLXByb2JsZW1zXC1jb21wbGljYXRlXC1hblwtaXNzdWU7CivpvLvpnZLoh4nohasgPCBhXC1ibG9vZHlcLW5vc2VcLWFuZFwtYVwtc3dvbGxlblwtZmFjZTsKK+aUv+eVjCA8IHBvbGl0aWNhbFwtYW5kXC1nb3Zlcm5tZW50XC1jaXJjbGVzOwor5oCn5YilIDwgZGlzdGluZ3Vpc2hpbmdcLWJldHdlZW5cLXRoZVwtc2V4ZXM7CivpgZXnpoEgPCB0b1wtdmlvbGF0ZVwtYVwtcHJvaGlidGl0aW9uXC1vclwtYmFuOwor6YWs5ZKMIDwgdG9cLXJlc3BvbmRcLXRvXC1hXC1wb2VtXC13aXRoXC1hXC1wb2VtOwor5aCx6ICDIDwgZW50ZXJcLW9uZXNlbGZcLWZvclwtYW5cLWV4YW1pbmF0aW9uOwor5YyX5ZyLIDwgdGhlXC1ub3J0aGVyblwtcGFydFwtb2ZcLXRoZVwtY291bnRyeTsKK+S8gealreeuoeeQhiA8IGJ1c2luZXNzXC1tYW5hZ2VtZW50XC1cKGFzXC1hXC1zdHVkeVwpOwor5aSW5a2rIDwgZ3JhbmRzb25cLVwoc29uXC1vZlwtb25lJydzXC1kYXVnaHRlclwpOwor5YWJ57qW5YiG5L2I5byP5pW45pOa5LuL6Z2iIDwgZmliZXJcLWRpc3RyaWJ1dGVkXC1kYXRhXC1pbnRlcmZhY2U7CivlnoPlnL7ou4ogPCBnYXJiYWdlXC10cnVja1wtXChvclwtb3RoZXJcLXZlaGljbGVcKTsKK+Wkp+WciyA8IGFcLXBvd2VyXC1cKGllXCxcLWFcLWRvbWluYW50XC1jb3VudHJ5XCk7Civpqr4gPCBhbnlcLW9iamVjdFwtdGhhdFwtc3RpY2tzXC1pblwtdGhyb2F0Owor5o6i6KaqIDwgdG9cLWdvXC1ob21lXC10b1wtdmlzaXRcLW9uZScnc1wtZmFtaWx5Owor5biD5rOV576FIDwgYnVmZmFsb1wtXChjaXR5XC1pblwtbmV3XC15b3JrXC1zdGF0ZVwpOwor5YWr5pyD56m0IDwgdGhlXC1laWdodFwtc3RyYXRlZ2ljXC1uZXJ2ZVwtcG9pbnRzOwor6Zuj5LulIDwgaGFyZFwtdG9cLVwocHJlZGljdFwsXC1pbWFnaW5lXCxcLWV0Y1wuXCk7CivloLHmlYggPCByZW5kZXJcLXNlcnZpY2VcLXRvXC1yZXBheVwta2luZG5lc3M7CivphrwgPCBvZmZlclwtZm9vZFwtYW5kXC13aW5lXC1vbmUnJ3NcLWd1ZXN0czsKK+i8pyA8IGN1cnRhaW5lZFwtY2FycmlhZ2VcLXVzZWRcLWJ5XC13b21lbjsKK+i7mSA8IGFcLWNoaW5lc2VcLWZhbWlseVwtbmFtZVwtdG9cLWFycmFuZ2U7CivopqrmiJogPCBcKGFcKVwtcmVsYXRpdmVcLVwoaWVcLFwtZmFtaWx5XC1tZW1iZXJcKTsKK+eCuuacnyA8IFwodG9cLWJlXC1kb25lXClcLWJ5XC1cKGFcLWNlcnRhaW5cLWRhdGVcKTsKK+i+suabhiA8IHRoZVwtdHJhZGl0aW9uYWxcLWNoaW5lc2VcLWNhbGVuZGFyOwor6LSBIDwgdG9cLWRlZmVhdFwtdG9cLXNwb2lsXC1vclwtYmVcLXNwb2lsZWQ7Civos48gPCBwZWFybHNcLW9yXC1zaGVsbHNcLXN0cnVuZ1wtdG9nZXRoZXI7Civoq4ogPCB0b1wtbWFrZVwtYVwtanVkaWNpYWxcLWludmVzdGlnYXRpb247CivmjInoqqogPCBpblwtdGhlXC1vcmRpbmFyeVwtY291cnNlXC1vZlwtZXZlbnRzOwor6YCj5Lu7IDwgY29udGludWVcLWluXC1cKGFcLXBvbGl0aWNhbFwpXC1vZmZpY2U7Civnn67lrZDoo6Hmi5TlsIfou40gPCBjaG9vc2VcLXRoZVwtYmVzdFwtcGVyc29uXC1hdmFpbGFibGU7Civoh4norZwgPCB0eXBlc1wtb2ZcLWZhY2lhbFwtbWFrZXVwXC1pblwtb3BlcmFzOwor57qZIDwgc3RyaW5nXC1vblwtd2hpY2hcLWNvaW5zXC1hcmVcLXN0cnVuZzsKK+ettCA8IHR5cGVcLW9mXC1ncmFzc1wtdXNlZFwtaW5cLWRpdmluYXRpb247Civplovluq0gPCBiZWdpblwtYVwtXChqdWRpY2lhbFwpXC1jb3VydFwtc2Vzc2lvbjsKK+WFrOWvqSA8IHB1YmxpY1wtdHJpYWxcLVwoaW5cLWFcLWNvdXJ0XC1vZlwtbGF3XCk7CivnkIcgPCBjb2Fyc2VcLXZhcmlldHlcLW9mXC1qYXNwZXJcLW9yXC1qYWRlOwor5L2G6aGYIDwgaWZcLW9ubHlcLVwoaXRcLXdlcmVcLXBvc3NpYmxlXC10b1wuXC5cLlwpOwor6ZaL5pmu5pWmIDwgY2FwZVwtdG93blwtXChjaXR5XC1pblwtc291dGhcLWFmcmljYVwpOwor6LaK5L6G6LaK5Zq06YeNIDwgdG9cLWJlY29tZVwtbW9yZVwtc2VyaW91c1wtZXZlcnlcLWRheTsKK+S4jeisgOiAjOWQiCA8IGFncmVlXC13aXRob3V0XC1wcmlvclwtY29uc3VsdGF0aW9uOwor5o2o5b6XIDwgdG9cLWJlXC13aWxsaW5nXC10b1wtcGFydFwtd2l0aFwtXChzdGhcKTsKK+ajqyA8IHRob3JueVwtc2hydWJcLXdpdGhcLXllbGxvd1wtZmxvd2VyczsKK+imi+S4jeW+lyA8IG1heVwtbm90XC1iZVwtc2VlblwtYnlcLW9yXC1leHBvc2VkXC10bzsKK+aXkyA8IHNlcnJhdGVkXC1lZGdlc1wtb25cLWFcLWNoaW5lc2VcLWZsYWc7CivmjIHmnIkgPCBob2xkXC1cKGVnXCxcLXBhc3Nwb3J0XCxcLXZpZXdzXCxcLWV0Y1wuXCk7CivmipfniK0gPCBtYWtlXC1hXC1zdGFuZFwtYW5kXC1maWdodFwtXChhZ2FpbnN0XCk7Civov5HkuY7lkIzmraXmlbjkvY3pmo7lsaQgPCBwbGVzaW9jaHJvbm91c1wtZGlnaXRhbFwtaGllcmFyY2h5Owor5oyJ5YW15LiN5YuVIDwgbm90XC10aHJvd1wtdGhlXC10cm9vcHNcLWludG9cLWJhdHRsZTsKK+W2siA8IGFcLW5hbWVcLW9mXC1hblwtb2xkXC10b3duXC1pblwtc2ljaHVhbjsKK+evpuWtkCA8IGFcLWRvdWJsZVwtZWRnZWRcLWZpbmVcLXRvb3RoZWRcLWNvbWI7CivmipXmqZ8gPCBiZVwtYVwtc3BlY3VsYXRvclwtXChwcm9maXRcLXNlZWtpbmdcKTsKK+WhsSA8IHBsYWNlXC1uYW1lXC1pblwtZ3Vhbmdkb25nXC1wcm92aW5jZTsKK+WJqCA8IHNvdW5kXC1vZlwtc29tZXRoaW5nXC1iZWluZ1wtc21hc2hlZDsKK+aMquWAnyA8IHRvXC1ib3Jyb3dcLW1vbmV5XC1mb3JcLWFcLXNob3J0XC10aW1lOwor5a6w55u4IDwgcHJpbWVcLW1pbmlzdGVyXC1cKGluXC1mZXVkYWxcLWNoaW5hXCk7CivkuIDkuK3kuIDoh7ogPCBcIm9uZVwtY2hpbmFcLFwtb25lXC10YWl3YW5cIlwtXChwb2xpY3lcKTsKK+S1rCA8IGJsYWNrXC1zb3VuZFwtb2ZcLXRoZVwtZmxvd2luZ1wtd2F0ZXI7CivktI0gPCBhXC1raW5kXC1vZlwtc3RyYW5nZVwtYW5kXC13ZWlyZFwtYmlyZDsKK+S0iSA8IGdlbmVyYWxcLXRlcm1cLWZvclwtYVwtZ3JvdXBcLW9mXC1iaXJkOwor5LOwIDwgYVwtYmlyZFwtcmVzZW1ibGluZ1wtdGhlXC13aWxkXC1nb29zZTsKK+SxmSA8IGFcLXNtYWxsXC1raW5kXC1vZlwtdHVuYVwtb3JcLXN0dXJnZW9uOwor5LCUIDwgZHJlc3NlZFwtaGFpclwtaW5cLWFcLWhvcml6b250YWxcLXdheTsKK+SqrCA8IHNvdW5kXC1vZlwtcHJlc3NpbmdcLXNvbWV0aGluZ1wtZG93bjsKK+SprCA8IGFuXC1vcm5hbWVudGFsXC1pdGVtXC1vblwtYVwtc2NhYmJhcmQ7Civkp7UgPCBhXC1iaXJkXC1saWtlXC10aGVcLXNlY3JldGFyeVwtZmFsY29uOwor5KaOIDwgYVwtbWVjaGFuaWNhbFwtZGV2aWNlXC1mb3JcLWxlYWRcLW9yZTsKK+SlviA8IHRvXC1tZWx0XC1vclwtY2FzdFwtYnlcLXVzaW5nXC1hXC1tb3VsZDsKK+SlmSA8IGFcLXNwZWN1bHVtXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivkpLcgPCBhXC1sYW5jZVwtd2l0aFwtdGhyZWVcLW9yXC10d29cLXBvaW50czsKK+S4reaXpemfk+i2iiA8IGNoaW5hXCxcLWphcGFuXCxcLWtvcmVhXCxcLWFuZFwtdmlldG5hbTsKK+SjoiA8IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLWFuY2llbnRcLXRpbWVzOwor5J2BIDwgYVwta2luZFwtb2ZcLXdpbGRcLWxlZ3VtaW5vdXNcLXBsYW50czsKK+SbtiA8IHdyaXRpbmdzXC1ldWxvZ2l6aW5nXC1hZGVhZFwtcGVyc29uOwor6Jmb6IWVIDwgZW1wdHlcLXdyaXN0XC1cKG1ldGhvZFwtb2ZcLXBhaW50aW5nXCk7Civkl6QgPCBhXC1raW5kXC1vZlwtd29ybVwtcHJvZHVjZWRcLWluXC13YXRlcjsKK+WPluW+l+Wkp+WtuOWtuOS9jSA8IHRvXC1vYnRhaW5cLWFcLXVuaXZlcnNpdHlcLWVkdWNhdGlvbjsKK+SNsCA8IGFcLXBsYWd1ZVwtb3JcLWFcLXBlc3RpbGVuY2VcLW9mXC1nb2F0Owor5IqKIDwgd2VsbFwtYm9pbGVkXC1jb25nZWVcLW9yXC1yaWNlXC1ncnVlbDsKK+SJiCA8IGFcLWtpbmRcLW9mXC1iYW1ib29cLXdpdGhcLWFcLXJlZFwtc2tpbjsKK+SHiCA8IHRvXC1wdXRcLWludG9cLWFcLWN1cGJvYXJkXC1vclwtY2xvc2V0Owor5IeAIDwgb3JuYW1lbnRzXC1vZlwtZmluZVwtZmVhdGhlclwtb3JcLWZ1cjsKK+SFuSA8IGFcLWtpbmRcLW9mXC1kcmlsbFwtZm9yXC1zb3dpbmdcLWdyYWluOwor5IWpIDwgY3Jvb2tlZFwtYW5kXC13aW5kaW5nXC1vZlwtdGhlXC1ncmFzczsKK+SEtyA8IGFcLW1lYXN1cmVtZW50XC1lcXVhbFwtdG9cLTEyMFwtY2F0dHk7Civkg6ogPCBhXC1wbGF0Zm9ybVwtZm9yXC1zYWNyaWZpY2lhbFwtcml0ZXM7Civkgp4gPCBhXC10aG9ybnlcLXRyZWVcLWFib3V0XC0xNVwtZmVldFwtaGlnaDsKK+WJtei+puS6uiA8IGZvdW5kZXJcLVwob2ZcLWFuXC1pbnN0aXR1dGlvblwsXC1ldGNcKTsKK+O6nCA8IGZpZXJjZVwtZG9nXC13aXRoXC1sb25nXC1zaGFnZ3lcLWhhaXI7CivjuokgPCBhXC1maWVyY2VcLWFuaW1hbFwtb2ZcLXRoZVwtZG9nXC10cmliZTsKK+S4jeirliA8IG5vXC1tYXR0ZXJcLVwod2hhdFwsXC13aG9cLFwtaG93XCxcLWV0Y1wuXCk7CivjuaEgPCBhXC1ydXNoXC1hbmRcLWltcGF0aWVudFwtZGlzcG9zaXRpb247CivjuKEgPCBib2FyZFwtdG9cLWJsb2NrXC10aGVcLXdhdGVyXC1jdXJyZW50Owor47iaIDwgc2NhdHRlcmVkXC1vclwtZGlzcGVyc2VkXC1hbmRcLWNsZWFyOwor47StIDwgaW1tZWFzdXJhYmxlXC1kZXB0aFwtb3JcLXByb2Z1bmRpdHk7CivjsaggPCB0b1wtcHJlcGFyZVwtYVwtYm9keVwtZm9yXC10aGVcLWNvZmZpbjsKK+S/neS/riA8IGd1YXJhbnRlZVwtdG9cLWtlZXBcLWluXC1nb29kXC1yZXBhaXI7CivjrIcgPCBuYW1lXC1vZlwtYVwtc3RhdGVcLWluXC1hbmNpZW50XC1jaGluYTsKK+OpvSA8IGJyYW5jaGVzXC10b1wtYmVcLWFcLXBhcmFzaXRlXC1hXC10cmVlOwor46iSIDwgdG9cLWN1dFwtb3BlblwtYW5kXC1jbGVhblwtXC1cLVwtYXNcLWZpc2g7Civph5HpgoogPCBwaG5vbVwtcGVuaFwtXChjYXBpdGFsXC1vZlwtY2FtYm9kaWFcKTsKK+OisiA8IHRoZVwtNXRoXC1vZlwtdGhlXC1laWdodFwtZGlhZ3JhbXNcLeWFq+WNpjsKK+OfqCA8IGFcLWZvdW50YWluXC1pblwtdGhlXC1zaWRlXC1vZlwtYVwtaGlsbDsKK+ObjSA8IHRvXC1oYXZlXC1vbmUnJ3NcLWFtYml0aW9uXC1mdWxmaWxsZWQ7CivjmqEgPCBzdGFuZGluZ1wtd2l0aG91dFwtYVwtc3RyYWlnaHRcLWJhY2s7CivjmokgPCB0b1wtbWFrZVwtYVwtcHJvZml0XC1vblwtc2VsbFwtYW5kXC1idXk7CivkvrXkvZQgPCB0b1wtaW52YWRlXC1hbmRcLW9jY3VweVwtXCh0ZXJyaXRvcnlcKTsKK+OVoyA8IGFcLW1hcnNoXC1hdFwtdGhlXC1mb290XC1vZlwtdGhlXC1oaWxsczsKK+afr+WvhiA8IGtlcm1pdFwtXChjb21tdW5pY2F0aW9uc1wtcHJvdG9jb2xcKTsKK+S6q+aciSA8IGVuam95XC1cKHJpZ2h0c1wsXC1wcml2aWxlZ2VzXCxcLWV0Y1wuXCk7Civnpq7ngq4gPCBhXC1ndW5cLXNhbHV0ZVwtXChlZ1wsXC0yMVwtZ3VuXC1zYWx1dGVcKTsKK+eqgeWOpSA8IHR1cmtpY1wtXChtaW5vcml0eVwtZ3JvdXBcLWluXC1jaGluYVwpOwor5oiI54i+5be05Zas5aSrIDwgXChmb3JtZXJcLXNvdmlldFwtbGVhZGVyXClcLWdvcmJhY2hldjsKK+mAvOS+m+S/oSA8IG9idGFpblwtY29uZmVzc2lvbnNcLWJ5XC1jb21wdWxzaW9uOwor5a6J5L+dIDwgXChhYmJyZXZpYXRpb25cKVwtbWFpbnRhaW5cLXNlY3VyaXR5Owor5aO96bq1IDwgYmlydGhkYXlcLW5vb2RsZXNcLVwoZm9yXC1sb25nZXZpdHlcKTsKK+a1tOWupCA8IGJhdGhyb29tXC1cKHJvb21cLXVzZWRcLWZvclwtYmF0aGluZ1wpOwor5Luk5Lq6IDwgY2F1c2VcLXNvbWVvbmVcLXRvXC1cKGJlXCxcLWZlZWxcLFwtZXRjXCk7CivlvaLlvbHkuI3pm6IgPCBpbnNlcGFyYWJsZVwtXChhc1wtZm9ybVwtYW5kXC1zaGFkb3dcKTsKK+WVhualreeJiOacrCA8IGNvbW1lcmNpYWxcLXZlcnNpb25cLVwob2ZcLXNvZnR3YXJlXCk7Civnmb7oroDkuI3ljq0gPCBiZVwtd29ydGhcLXJlYWRpbmdcLWFcLWh1bmRyZWRcLXRpbWVzOwor6Zmk6Z2eIDwgb25seVwtaWZcLVwoXC5cLlwuXCxcLW9yXC1vdGhlcndpc2VcLFwtXC5cLlwuXCk7CivmrafoppYgPCBkaXNjcmltaW5hdGlvblwtXChhZ2FpbnN0XC1zb21lb25lXCk7CivmlZfokL0gPCBkZWNsaW5lXC1cKGluXC13ZWFsdGhcLWFuZFwtcG9zaXRpb25cKTsKK+eEoemMqyA8IHd1eGlcLVwoY2l0eVwpXCxcLWluXC1qaWFuZ3N1XC1wcm92aW5jZTsKK+WIhuazouWkmuW3pSA8IHdhdmVsZW5ndGhcLWRpdmlzaW9uXC1tdWx0aXBsZXhpbmc7Civlv4XnlLHkuYvot68gPCB0aGVcLXJvYWRcLW9uZVwtbXVzdFwtZm9sbG93XC1vclwtdGFrZTsKK+S7rCA8IGFkanVuY3RcLXByb25vdW5cLWluZGljYXRlXC1wbHVyYWw7CivlkaIgPCBpbnRlcnJvZ2F0aXZlXC1vclwtZW1waGF0aWNcLWZpbmFsOwor5qW8IDwgYnVpbGRpbmdcLW9mXC10d29cLW9yXC1tb3JlXC1zdG9yaWVzOwor6I2vIDwgbGVhZlwtb2ZcLWRhaHVyaWFuXC1hbmdlbGljYVwtcGxhbnQ7CivpvY4gPCB0YWtlXC1pblwtYm90aFwtaGFuZHNcLWFuZFwtb2ZmZXJcLXRvOwor5LiIIDwgdW5pdFwtb2ZcLWxlbmd0aFwtZXF1YWxcLTNcLjNcLW1ldGVyczsKK+aMkSA8IGFcLWxvYWRcLWNhcnJpZWRcLW9uXC10aGVcLXNob3VsZGVyczsKK+elnSA8IHByYXlcLWZvclwtaGFwcGluZXNzXC1vclwtYmxlc3NpbmdzOwor5p2JIDwgdmFyaW91c1wtc3BlY2llc1wtb2ZcLXBpbmVcLWFuZFwtZmlyOwor5pynIDwgY29uZGl0aW9uXC1vclwtYXBwZWFyYW5jZVwtb2ZcLW1vb247CivpnLggPCBydWxlXC1ieVwtbWlnaHRcLXJhdGhlclwtdGhhblwtcmlnaHQ7CivnrqogPCBzbWFsbFwtYmFtYm9vXC1iYXNrZXRcLWZvclwtaG9sZGluZzsKK+mGpCA8IGFueVwtamFtXC1saWtlXC1vclwtcGFzdGVcLWxpa2VcLWZvb2Q7CivngpUgPCB0aGVcLWJyaWNrXC1iZWRcLWluXC1ub3J0aGVyblwtY2hpbmE7CivkuqUgPCBsYXN0XC1vZlwtdHdlbHZlXC1lYXJ0aGx5XC1icmFuY2hlczsKK+eypCA8IGd1YW5nZG9uZ1wtYW5kXC1ndWFuZ3hpXC1wcm92aW5jZXM7Civnsr0gPCBkdW1wbGluZ1wtbWFkZVwtb2ZcLWdsdXRpbm91c1wtcmljZTsKK+mZhyA8IG1vdW50YWluXC1sb2NhdGVkXC1iZXR3ZWVuXC1zaGFueGk7Civpl74gPCB2aWxsYWdlXC1vZlwtdHdlbnR5XC1maXZlXC1mYW1pbGllczsKK+mDpiA8IHBsYWNlXC1pblwtdG9kYXknJ3NcLWhlbmFuXC1wcm92aW5jZTsKK+mehSA8IGxlYXRoZXJcLXN0cmFwXC1vdmVyXC1ob3JzZScnc1wtbmVjazsKK+mToSA8IHNpY2tsZVwtZm9yXC1jdXR0aW5nXC1ncmFzc1wtb3JcLWhheTsKK+mqpyA8IGdhbGxvcFwtYWJvdXRcLXdpdGhcLWhlYWRcLXVwbGlmdGVkOwor6aqiIDwgaG9yc2VcLXdpdGhcLWFcLWJsdWlzaFwtd2hpdGVcLWNvbG9yOwor6JuzIDwga2luZFwtb2ZcLXNuYWlsXC13aXRoXC1zcGlyYWxcLXNoZWxsOwor6YKzIDwgYVwtZGVwYXJ0bWVudFwtaW5cLXRoZVwtc3RhdGVcLW9mXC1sdTsKK+mDoiA8IHN0YXRlXC1pblwtdG9kYXknJ3NcLWh1YmVpXC1wcm92aW5jZTsKK+mqliA8IHR3b1wtb3V0c2lkZVwtb25lc1wtaW5cLXRocmVlXC1ob3JzZTsKK+i9uCA8IGNyb3NzXC1ib2FyZFwtYXRcLXJlYXJcLW9mXC1jYXJyaWFnZTsKK+eunCA8IGFuY2llbnRcLXN0cmluZ1wtbXVzaWNcLWluc3RydW1lbnQ7Civpg5AgPCBzdGF0ZVwtaW5cLXRvZGF5JydzXC1oZW5hblwtcHJvdmluY2U7CivovbkgPCBydW5cLW92ZXJcLXNvbWV0aGluZ1wtd2l0aFwtdmVoaWNsZTsKK+agnSA8IGFcLWJ1aWxkZXInJ3NcLWZyYW1lXC1mb3JcLW1lYXN1cmluZzsKK+eNjSA8IGFuXC1hbmltYWxcLXdoaWNoXC1lYXRzXC1pdHNcLW1vdGhlcjsKK+iyoOiyrOS6uiA8IHBlcnNvblwtaW5cLWNoYXJnZVwtXChvZlwtc29tZXRoaW5nXCk7Civlp5DlpKsgPCBicm90aGVyXC1pblwtbGF3XC1cKGh1c2JhbmQnJ3NcLXNpZGVcKTsKK+WNgeS4iee2kyA8IHRoZVwtdGhpcnRlZW5cLWNvbmZ1Y2lhblwtY2xhc3NpY3M7Civlr6bmmYLmk43kvZznkrDlooMgPCByZWFsXC10aW1lXC1vcGVyYXRpbmdcLWVudmlyb25tZW50Owor54m55Y2AIDwgc3BlY2lhbFwtXChhZG1pbmlzdHJhdGl2ZVwpXC1yZWdpb247Civml6XlnJMgPCBqYXBhbmVzZVwteWVuXC1cKHVuaXRcLW9mXC1jdXJyZW5jeVwpOwor55eF6J+y5a6zIDwgcGxhbnRcLWRpc2Vhc2VzXC1hbmRcLWluc2VjdFwtcGVzdHM7Civkuqjnibnms7DnvoUgPCBodW50ZXJcLXR5bG9cLVwoaG9sbHl3b29kXC1hY3RyZXNzXCk7Civlo4Hmq6UgPCBhXC1idWlsdFwtaW5cLXdhcmRyb2JlXC1vclwtY3VwYm9hcmQ7CivplonploDpgKDou4ogPCBtYWtlXC1hXC1jYXJ0XC1iZWhpbmRcLWNsb3NlZFwtZG9vcnM7Civpgb/mmpEgPCBiZVwtYXdheVwtZm9yXC10aGVcLXN1bW1lclwtaG9saWRheXM7CivmraXmkJYgPCBkYW5nbGluZ1wtb3JuYW1lbnRcLXdvcm5cLWJ5XC13b21lbjsKK+Wci+mam+WVhualreapn+WZqCA8IGludGVybmF0aW9uYWxcLWJ1c2luZXNzXC1tYWNoaW5lczsKK+m8lyA8IHNtYWxsXC1yZXZvbHZpbmdcLWRydW1cLXdpdGhcLWtub2JzOwor6bySIDwgbGFyZ2VcLXRyaXBvZFwtY2FsZHJvblwtd2l0aFwtc21hbGw7CivptpYgPCBsYXJnZVwtd2F0ZXJmb3dsXC13aXRoXC1uYWtlZFwtaGVhZDsKK+mohCA8IG5hbWVcLW9mXC1hXC1sZWdlbmRhcnlcLXN3aWZ0XC1ob3JzZTsKK+mkliA8IGZvb2RcLWl0ZW1cLXNldFwtb3V0XC1mb3JcLXNob3dcLW9ubHk7CivpoKMgPCB0b1wtdmlld1wtb3RoZXJzXC13aXRoXC1yYWlzZWRcLWV5ZXM7CivpgqbkuqQgPCByZWxhdGlvbnNcLWJldHdlZW5cLXR3b1wtY291bnRyaWVzOwor6YS0IDwgcGxhY2VcLWluXC10b2RheScnc1wtaG9uYW5cLXByb3ZpbmNlOwor6YSaIDwgcGxhY2VcLWluXC10b2RheScnc1wtaGViZWlcLXByb3ZpbmNlOwor6YOUIDwgcGxhY2VcLW5hbWVcLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civpgr0gPCBuYW1lXC1vZlwtYVwtY291bnR5XC1pblwtaGFuXC1keW5hc3R5Owor6LuoIDwgbGF0dGljZVwtd29ya1wtb25cLWZyb250XC1hbmRcLXNpZGVzOwor6LiLIDwgdGhlXC1mb290XC1vclwtZmVldFwtY2FzdFwtb2ZcLWFcLXBsYXk7Civmlbjmk5rpj4jot6/pgKPmjqXorZjliKXnorwgPCBkYXRhXC1saW5rXC1jb25uZWN0aW9uXC1pZGVudGlmaWVyOwor6KWtIDwgdHVja1wtdXBcLWhlbVwtb2ZcLWdhcm1lbnRcLWFuZFwtd3JhcDsKK+ijiyA8IGNvdHRvblwtY2xvdGhlc1wtb2ZcLWFcLWJveVwtc2VydmFudDsKK+ihuiA8IHNsaXRcLWluXC1nYXJtZW50XC10b1wtYWlkXC1tb3ZlbWVudDsKK+igqCA8IGFcLWtpbmRcLW9mXC1zcGlkZXJcLXdpdGhcLWxvbmdcLWxlZ3M7CivonqMgPCBteXRob2xvZ2ljYWxcLXdpbmdsZXNzXC1kcmFnb25cLW9mOwor5o+Q54WJIDwgdG9cLWV4dHJhY3RcLVwob3JlXCxcLW1pbmVyYWxzXCxcLWV0Y1wpOwor6IukIDwgYnJhc3NpY2FcLWNhbXBlc3RyaXNcLXN1YnNwXC5cLXJhcGE7CivmqYvmjqUgPCBicmlkZ2luZ1wtXChpblwtY29tcHV0ZXJcLW5ldHdvcmtzXCk7CivoiZUgPCB0d29cLWJvYXRzXC1mYXN0ZW5lZFwtc2lkZVwtYnlcLXNpZGU7CivlhavmlrkgPCB0aGVcLWVpZ2h0XC1wb2ludHNcLW9mXC10aGVcLWNvbXBhc3M7CivohqsgPCB0aGVcLWZhdFwtY292ZXJpbmdcLXRoZVwtaW50ZXN0aW5lczsKK+aCsuWWnOS6pOmbhiA8IG1peGVkXC1mZWVsaW5nc1wtb2ZcLWdyaWVmXC1hbmRcLWpveTsKK+WFp+aUvyA8IGludGVybmFsXC1hZmZhaXJzXC1cKG9mXC1hXC1jb3VudHJ5XCk7CivnuJcgPCBzYWNrY2xvdGhcLXdvcm5cLW9uXC1icmVhc3RcLWR1cmluZzsKK+i/q+S9vyA8IGZvcmNlXC1cKHNvbWVvbmVcLXRvXC1kb1wtc29tZXRoaW5nXCk7Civnr6ogPCBhXC1iYW1ib29cLWZsdXRlXC13aXRoXC1zZXZlblwtaG9sZXM7CivlkIPkuI3mnI0gPCBub3RcLWJlXC1hY2N1c3RvbWVkXC10b1wtZWF0aW5nXC1zdGg7Civplbflu4ogPCB0aGVcLWxvbmdcLWNvcnJpZG9yXC1hdFwteWlcLWhlXC15dWFuOwor556WIDwgYVwtY2F0YXJhY3RcLW9yXC1maWxtXC1vdmVyXC10aGVcLWV5ZTsKK+S4jeS/rumCiuW5hSA8IG5vdFwtY2FyZVwtYWJvdXRcLW9uZScnc1wtYXBwZWFyYW5jZTsKK+eVpCA8IHBsYWNlXC1mb3JcLXdvcnNoaXBwaW5nXC10aGVcLWhhdmVuOwor5YWD5bilIDwgYVwtbWFyc2hhbFwtXChpblwtdGhlXC1hcm1lZFwtZm9yY2VzXCk7CivnlJcgPCBlYXJ0aGVud2FyZVwtdmVzc2VsXC1pblwtdHdvXC1wYXJ0czsKK+espuWQiOe+juWci+WIqeebiiA8IGluXC1saW5lXC13aXRoXC1hbWVyaWNhblwtaW50ZXJlc3RzOwor5aSn5b+r5Lq65b+DIDwgdG9cLXRoZVwtc2F0aXNmYWN0aW9uXC1vZlwtZXZlcnlvbmU7CivmoKHplbcgPCBcKGNvbGxlZ2VcLFwtdW5pdmVyc2l0eVwpXC1wcmVzaWRlbnQ7Civng7MgPCB0b1wtdHJhdmVsXC1ieVwtdGhlXC1saWdodFwtb2ZcLXRvcmNoOwor54GVIDwgc2hvcnRcLW5hbWVcLWZvclwtZ3Vhbmd4aVwtcHJvdmluY2U7CivppqzlsLzmi4kgPCBtYW5pbGFcLVwoY2FwaXRhbFwtb2ZcLXBoaWxpcHBpbmVzXCk7CivplovliIAgPCB0b1wtcGVyZm9ybVwtb3JcLWhhdmVcLWFuXC1vcGVyYXRpb247CivmsrQgPCBmb3VsXC1hbmRcLXBvaXNvbm91c1wtaW5cLWNvbmZ1c2lvbjsKK+aokCA8IGFcLWxvb2tvdXRcLXR1cnJldFwtb25cLWFcLWNpdHlcLXdhbGw7Civmo7sgPCBraW5kXC1vZlwtd29vZFwtZnJvbVwtd2hpY2hcLXBlcmZ1bWU7CivovKnliIYgPCBzZW5pb3JpdHlcLWluXC10aGVcLWZhbWlseVwtb3JcLWNsYW47CivmnowgPCB2YXJpZXR5XC1vZlwtZWxtXC13aXRoXC1zbWFsbFwtc2VlZHM7Civpnq3plbfojqvlj4ogPCBiZXlvbmRcLXRoZVwtcmVhY2hcLW9mXC1vbmUnJ3NcLXBvd2VyOwor5LiN5a2454Sh6KGTIDwgaGF2ZVwtbmVpdGhlclwtbGVhcm5pbmdcLW5vclwtc2tpbGw7Civmh4noqbLoqqogPCBpdFwtc2hvdWxkXC1iZVwtbWVudGlvbmVkXC10aGF0XC1cLlwuXC47CivkuI3lvpfkuI0gPCBoYXZlXC1ub1wtY2hvaWNlXC1vclwtb3B0aW9uXC1idXRcLXRvOwor5LiN5a+S6ICM5oWEIDwgc2hpdmVyXC1hbGxcLW92ZXJcLXRob3VnaFwtbm90XC1jb2xkOwor5bC+54mZIDwgYVwteWVhclwtZW5kXC1kaW5uZXJcLWZvclwtZW1wbG95ZWVzOwor54+t6LyqIDwgcmVndWxhclwtcGFzc2VuZ2VyXC1vclwtY2FyZ29cLXNoaXA7Civlnp8gPCBjbGF5XC1zaGVlcFwtYnVyaWVkXC13aXRoXC10aGVcLWRlYWQ7Civmiqjmk4ogPCBhdHRhY2tcLVwodmVyYmFsbHlcLW9yXC1pblwtd3JpdGluZ1wpOwor6Iie5Y+wIDwgXCh0aGVhdHJpY2FsXC1vclwtcG9saXRpY2FsXClcLXN0YWdlOwor5ZKgIDwgdG9cLXdoaXNwZXJcLlwtdG9cLWJsYW1lXC10b1wtc2xhbmRlcjsKK+WPpyA8IHRvXC1jdXRcLW1lYXRcLW9mZlwtYXdheVwtZnJvbVwtYm9uZXM7CivlhpQgPCBjYXBcLXdvcm5cLWR1cmluZ1wtdGhlXC15aW5cLWR5bmFzdHk7CivkurwgPCB0b1wtYXNzZW1ibGVcLlwtdG9cLWdhdGhlclwtdG9nZXRoZXI7CivkuYQgPCBzaGltZVw6XC10b1wtZmluZFwtYVwtcGxhY2VcLXRvXC1kd2VsbDsKK+S1uCA8IHRoZVwtdG9hZFwtdGhhdFwtbGl2ZXNcLWluXC10aGVcLW1vb247Civks6EgPCBhXC1raW5kXC1vZlwtYmlyZFwtaW5cLWFuY2llbnRcLWJvb2tzOwor5YyX5LyQ6LuNIDwgdGhlXC1ub3J0aGVyblwtZXhwZWRpdGlvbmFyeVwtYXJteTsKK+SyniA8IGFcLXNlY29uZFwtZ2VuZXJhbFwtbmFtZVwtZm9yXC1wZXJjaDsKK+SxjCA8IGFcLXNlY29uZFwtbmFtZVwtZm9yXC10aGVcLWdsb2JlZmlzaDsKK+SwnSA8IGFcLWxhcmdlXC1lYXJ0aGVuXC1wb3RcLWZvclwtY29va2luZzsKK+SwgCA8IGRyZXNzZWRcLWhhaXJcLW9mXC1hXC1jaGluZXNlXC13b21hbjsKK+SuuCA8IHRvXC1tb3ZlXC1zbG93bHlcLWFuZFwtdGhlblwtc3dpZnRseTsKK+SsuyA8IHRvXC1lbnRlcnRhaW5cLWFcLWRlcGFydGluZ1wtZnJpZW5kOwor5Kq+IDwgdG9cLWRlYWxcLXdpdGhcLWFmZmFpcnNcLWNhdXRpb3VzbHk7Civkqo0gPCBhXC1jb250YWluZXJcLWZvclwtYm93c1wtYW5kXC1hcnJvd3M7CivkqKMgPCBsZWF0aGVyXC10b1wtYmVcLW1vaXN0ZW5lZFwtYnlcLXJhaW47Civou5/pq5Tlh7rniYjljZTmnIMgPCBzb2Z0d2FyZVwtcHVibGlzaGVyc1wtYXNzb2NpYXRpb247Civko6MgPCBuYW1lXC1vZlwtYVwtcGxhY2VcLW5hbWVcLW9mXC1hXC1wbGFjZTsKK+SfmiA8IHRvXC1zaXRcLXdpdGhcLXRoZVwtbGVnc1wtc3ByZWFkXC1vdXQ7CivknLcgPCBmZXJtZW50ZWRcLWFuZFwtc2Vhc29uZWRcLXNveWJlYW5zOwor5JyqIDwgbmFtZVwtb2ZcLWFcLXBhdmlsaW9uXC1pblwtb2xkXC10aW1lczsKK+SbgCA8IHJlYXNvbmFibGVcLWF1dGhvcml0eVwtc3RhdGVtZW50czsKK+SYhSA8IGFcLXNtYWxsXC1nYWRmbGllc1wtYW5kXC1tb3NxdWl0b2VzOwor5Y+v56e75qSNIDwgcG9ydGFibGVcLVwocHJvZ3JhbW1pbmdcLWxhbmd1YWdlXCk7CivkkIMgPCBmYXRcLWluXC10aGVcLWFiZG9tZW5cLW9yXC1pbnRlc3RpbmU7CivkjZsgPCBhXC1raW5kXC1vZlwtdG9vbFwtdXNlZFwtdG9cLWdldFwtZmlzaDsKK+SKpCA8IHZlZ2V0YWJsZVwtbWl4ZWRcLXdpdGhcLXRoaWNrXC1zb3VwOwor5IKyIDwgc3RhbmRhcmRcLXdlaWdodHNcLXVzZWRcLWluXC1zY2FsZXM7CivkgbAgPCB0b1wtbG9va1wtaW5cLWFcLWV2aWxcLW9yXC13aWNrZWRcLXdheTsKK+O8liA8IGdvdXJkXC11c2VkXC1hc1wtYVwtbGFkbGVcLW9yXC1kaXBwZXI7Civju6sgPCBhXC1nZW1cLW9yXC1vcm5hbWVudFwtb25cLWFcLXNjYWJiYXJkOwor54yb6LeMIDwgZHJvcFwtc2hhcnBseVwtXChlZ1wsXC1zdG9ja1wtcHJpY2VzXCk7CivlsaTlh7rkuI3nqq4gPCB0b1wtY29tZVwtb3V0XC1vbmVcLWFmdGVyXC10aGVcLW90aGVyOwor5L+h5Lu2IDwgYVwtbGV0dGVyXC1cKGllXCxcLXNlbnRcLWluXC10aGVcLW1haWxcKTsKK+OsuSA8IHRlbmRvbnNcLW9mXC10aGVcLWhlZWxcLW9mXC10aGVcLWZvb3Q7CivjrIEgPCB0aGVcLXN1blwtaXNcLXNoaW5pbmdcLW9uXC10aGVcLXdhdGVyOwor46WGIDwgaW5kdWxnZW50XC1hbmRcLXdpdGhvdXRcLXJlc3RyYWludDsKK+WFq+e0muW3peizh+WItiA8IGVpZ2h0XC1ncmFkZVwtd2FnZVwtc2NhbGVcLVwoc3lzdGVtXCk7Civjl5ggPCB0b1wtYml0ZVwtdGhlXC1oYXJkXC1hbmRcLXNvbGlkXC1mb29kOwor5L2/5ZG9IDwgYVwtXChkaXBsb21hdGljXC1vclwtb3RoZXJcKVwtbWlzc2lvbjsKK+OToiA8IHRvXC1jdXRcLXRoZVwtZmxlc2hcLWZyb21cLXRoZVwtYm9uZXM7Civjk5QgPCBmYWRlZFwtYW5kXC1mYWxsZW5cLVwtXC1cLWFzXC1ibG9zc29tczsKK+OSuyA8IHRvXC1nb1wtZm9yd2FyZFwtd2l0aFwtZXllc1wtY292ZXJlZDsKK+S4ueeariA8IHRoZVwtcm9vdFwtYmFya1wtb2ZcLXRoZVwtcGVvbnlcLXRyZWU7CivlrprlgZogPCB0b1wtaGF2ZVwtc29tZXRoaW5nXC1tYWRlXC10b1wtb3JkZXI7CivlnKjlr4bliIfms6jmhI8gPCB0b1wtcGF5XC1jbG9zZVwtYXR0ZW50aW9uXC1cKHRvXC1zdGhcKTsKK+WuieawkeWRiuekuiA8IGFcLW5vdGljZVwtdG9cLXJlYXNzdXJlXC10aGVcLXB1YmxpYzsKK+advuS4i+mbu+awo+W3pealrSA8IG1hdHN1c2hpdGFcLWVsZWN0cm9uaWNzXC1pbmR1c3RyeTsKK+mHjeeUqCA8IHRvXC1wdXRcLWluXC1hblwtaW1wb3J0YW50XC1wb3NpdGlvbjsKK+e0sOiPjOatpuWZqCA8IGJpb2xvZ2ljYWxcLXdlYXBvblwtXCh1c2luZ1wtZ2VybXNcKTsKK+avlOizvSA8IFxbYXRobGV0aWNcLW9yXC1vdGhlclxdXC1jb21wZXRpdGlvbjsKK+WIpemWi+eUn+mdoiA8IHN0YXJ0XC1zb21ldGhpbmdcLW5ld1wtb3JcLW9yaWdpbmFsOwor5pWY6L+wIDwgcmVsYXRlXC1cKGFcLXN0b3J5XC1vclwtaW5mb3JtYXRpb25cKTsKK+WKoOmHjSA8IGJlY29tZVx8bWFrZVwtbW9yZVwtc2VyaW91c1x8Z3JhdmVyOwor6JSa54K6IDwgdG9cLWFmZm9yZFwtXChhXC12aWV3XC1vZlwtc3RoXCxcLWVcLmdcLlwpOwor57aT5r+f5a24IDwgZWNvbm9taWNzXC1cKGFzXC1hXC1maWVsZFwtb2ZcLXN0dWR5XCk7Civpm7voh7ogPCByYWRpb1wtXChvclwtYnJvYWRjYXN0aW5nXClcLXN0YXRpb247CivlpoLpo6LkvLzmuLQgPCB0aGlyc3RpbmdcLW9yXC1odW5nZXJpbmdcLWZvclwtc3RoXC47CivplovlnIvlhYPli5sgPCBmb3VuZGluZ1wtZmF0aGVyc1wtXChvZlwtYVwtY291bnRyeVwpOwor56KR5p6XIDwgdGhlXC1mb3Jlc3RcLW9mXC1zdGVsZXNcLVwoaW5cLXhpJydhblwpOwor5bm5IDwgdHJ1bmtcLW9mXC10cmVlXC1vclwtb2ZcLWh1bWFuXC1ib2R5Owor5bC6IDwgY2hpbmVzZVwtbWVhc3VyZVwtYXBwcm94XC5cLScnZm9vdCcnOwor57GzIDwgaHVsbGVkXC1vclwtaHVza2VkXC11bmNvb2tlZFwtcmljZTsKK+m5jyA8IGZhYnVsb3VzXC1iaXJkXC1vZlwtZW5vcm1vdXNcLXNpemU7CivlloIgPCBpbnRlcmplY3Rpb25cLXRvXC1jYWxsXC1hdHRlbnRpb247CivmvYcgPCBzb3VuZFwtb2ZcLWJlYXRpbmdcLXdpbmRcLWFuZFwtcmFpbjsKK+emuSA8IGxlZ2VuZGFyeVwtaHNpYVwtZHluYXN0eVwtZm91bmRlcjsKK+aWnyA8IHRvXC1wb3VyXC13aW5lXC1vclwtdGVhXC1pbnRvXC1hXC1jdXA7CivokLwgPCB0aGVcLXN0ZW1cLWFuZFwtY2FseXhcLW9mXC1hXC1mbG93ZXI7CivpmIAgPCBwb3dlcmZ1bFwtYW5kXC1pbmZsdWVudGlhbFwtZ3JvdXA7CivmpbcgPCBtb2RlbFwtc3R5bGVcLW9mXC1jaGluZXNlXC13cml0aW5nOwor6L6EIDwgc2lkZXNcLW9mXC1jaGFyaW90XC13aGVyZVwtd2VhcG9uczsKK+S/kSA8IHdvb2RlblwtZmlndXJlXC1idXJpZWRcLXdpdGhcLWRlYWQ7CivlmLkgPCB1c2VkXC1kZXNjcmliZVwtY2xhcml0eVwtb2ZcLXZvaWNlOwor6L28IDwgaG9yaXpvbnRhbFwtd29vZGVuXC1iYXJcLWluXC1mcm9udDsKK+mmkSA8IHRpbWVcLW9mXC1mYW1pbmVcLW9yXC1jcm9wXC1mYWlsdXJlOwor5LylIDwgZ2hvc3RcLW9mXC1vbmVcLWRldm91cmVkXC1ieVwtdGlnZXI7Civnu7YgPCBzaWxrXC1yaWJib25cLWF0dGFjaGVkXC1hc1wtYVwtc2VhbDsKK+msiCA8IGZpbmVcLWdyb3d0aFwtb2ZcLWhhaXJcLWN1cmx5XC1oYWlyOwor56OUIDwgZG93bndhcmRcLXN0cm9rZVwtc2xhbnRpbmdcLXJpZ2h0Owor6KOiIDwgZm9sZGluZ1wtcHVyc2VcLWluc2VydGVkXC1pblwtYmVsdDsKK+aeuCA8IGtpbmRcLW9mXC1hc3BlblwtZm91bmRcLWluXC1zaWNodWFuOwor6IqKIDwgZXh1YmVyYW50XC1hbmRcLXZpZ29yb3VzXC1mb2xpYWdlOwor6YSEIDwgbmFtZVwtb2ZcLWFcLWRpc3RyaWN0XC1pblwtc2hhbmRvbmc7CivpvLkgPCBhXC1raW5kXC1vZlwtaW5zZWN0aXZvcm91c1wtcm9kZW50Owor6I68IDwgYW5cLWVkaWJsZVwtd2F0ZXJcLXBsYW50XC1icmFzZW5pYTsKK+WcrCA8IHBsYXN0ZXJcLW92ZXJcLXdpdGhcLWxheWVyXC1vZlwtbXVkOwor6I6pIDwgbWVtYnJhbmVcLWxpbmluZ1wtaW5zaWRlXC1vZlwtcmVlZDsKK+ivtiA8IGFuXC1leGNsYW1hdGlvblwtb2ZcLWNvbmZpcm1hdGlvbjsKK+ikmSA8IHBhcGVyXC1vclwtY2xvdGhcLXBhc3RlZFwtdG9nZXRoZXI7Civnm7TmjqXmlbjmk5ogPCBkYXRhXC1kaXJlY3RcLVwoaW5cLWxhblwtZW11bGF0aW9uXCk7CivlpJbngZggPCB3YWl0YW5cLVwodGhlXC1idW5kXClcLFwtaW5cLXNoYW5naGFpOwor6K2J5a+mIDwgY29uZmlybVwtXChzb21ldGhpbmdcLXRvXC1iZVwtdHJ1ZVwpOwor5oSb6Z2i5a2QIDwgYmVcLWNvbmNlcm5lZFwtYWJvdXRcLWZhY2VcLXNhdmluZzsKK+itsOWToSA8IG1lbWJlclwtXChvZlwtYVwtbGVnaXNsYXRpdmVcLWJvZHlcKTsKK+WgseihqCA8IGZvcm1zXC1mb3JcLXJlcG9ydGluZ1wtc3RhdGlzdGljczsKK+aYjuWgsSA8IG1pbmdcLXBhb1wtbmV3c3BhcGVyXC1cKGhvbmdcLWtvbmdcKTsKK+WJjeeoiyA8IGZ1dHVyZVwtXChjYXJlZXJcLFwtZXRjXClcLXByb3NwZWN0czsKK+eZu+mWgCA8IHBheVwtYVwtdmlzaXRcLXRvXC1zb21lb25lJydzXC1ob3VzZTsKK+mCiuawkSA8IHBlb3BsZVwtbGl2aW5nXC1vblwtdGhlXC1mcm9udGllcnM7CivpgqPmnKsgPCBpZlwtdGhhdCcnc1wtdGhlXC1jYXNlXCxcLXRoZW5cLVwoXC5cLlwuXCk7CivmlYjmh4kgPCBlZmZlY3RcLVwoZWdcLFwtZ3JlZW5ob3VzZVwtZWZmZWN0XCk7CivloqjniL7nvL0gPCBtZWxib3VybmVcLVwoYW5cLWF1c3RyYWxpYW5cLWNpdHlcKTsKK+atueW+kiA8IGV2aWxcLXBlcnNvblwtd2hvXC1jb21taXRzXC1jcmltZXM7CivmlLblvqkgPCByZWNvdmVyXC1cKGxvc3RcLXRlcnJpdG9yeVwsXC1ldGNcLlwpOwor5YKy6aqoIDwgbG9mdHlcLWFuZFwtdW55aWVsZGluZ1wtY2hhcmFjdGVyOwor5pa35LqkIDwgYnJlYWtcLW9mZlwtZGlwbG9tYXRpY1wtcmVsYXRpb25zOwor6Zu76IWm6IiH6Zu76Kmx57O757Wx5pW05ZCIIDwgY29tcHV0ZXJcLXRlbGVwaG9ueVwtaW50ZWdyYXRpb247CivptosgPCBhXC1zZWFcLWJpcmRcLXdpdGhcLWFcLXdoaXRlXC1icmVhc3Q7Civpr48gPCBhXC1kaWFsZWN0XC5cLlwuXC5cLlwuXC5cLlwtbmFtZVwtb2ZcLWZpc2g7CivppYEgPCBjYXJyeVwtbWVhbFwtdG9cLXdvcmtlcnNcLWluXC1maWVsZDsKK+aXpeacrOmbu+Wgsembu+ipseWFrOWPuCA8IG5pcHBvblwtdGVsZWdyYXBoXC1hbmRcLXRlbGVwaG9uZTsKK+mOqyA8IG9ybmFtZW50XC1vdmVyXC10aGVcLWhvcnNlJydzXC1oZWFkOwor5YKz57Wx6Yar6JelIDwgXChjaGluZXNlXClcLXRyYWRpdGlvbmFsXC1tZWRpY2luZTsKK+i1mSA8IGdpZnRcLW9mXC1tb25leVwtaGVscFwtcGF5XC1mdW5lcmFsOwor5pyJ5Y+y5Lul5L6GIDwgc2luY2VcLXRoZVwtYmVnaW5uaW5nXC1vZlwtaGlzdG9yeTsKK+W4s+aItiA8IFwoYmFua1wsXC1jb21wdXRlclwsXC1ldGNcLlwpXC1hY2NvdW50Owor6KmkIDwgdG9cLW1ha2VcLXdpbGRcLXN0YXRlbWVudHNcLXRvXC1saWU7CivmoLjlqIHmh77mlL/nrZYgPCBwb2xpY3lcLW9mXC1udWNsZWFyXC1pbnRpbWlkYXRpb247CivomLQgPCB5b3VuZ1wtc2hvb3RzXC1vZlwtdGhlXC1yYXBldHVybmlwOwor6I6dIDwgdG9cLWNob3BcLXN0cmF3XC1maW5lXC1mb3JcLWFuaW1hbHM7CivntKLmnbDntI0gPCBzb2pvdXJuZXJcLVwobWFydGlhblwtbGFuZFwtcm92ZXJcKTsKK+iFoCA8IGJldHdlZW5cLXRoZVwtc2tpblwtYW5kXC10aGVcLWZsZXNoOwor5YyF5rK755m+55eFIDwgZ3VhcmFudGVlXC10b1wtY3VyZVwtYWxsXC1kaXNlYXNlczsKK+e/vyA8IHN0cmVhbWVyXC1hZG9ybmVkXC13aXRoXC1mZWF0aGVyczsKK+etpSA8IHJvdW5kXC1zaGFwZWRcLWJhbWJvb1wtYmFza2V0XC1mb3I7Civlm7rnhLYgPCBhZG1pdHRlZGx5XC1cKGl0JydzXC10cnVlXC10aGF0XC5cLlwuXCk7Civnl4QgPCBzY3JvZnVsb3VzXC1zd2VsbGluZ3NcLWFuZFwtc29yZXM7CivkuK3oj6/kurrmsJHlhbHlkozlnIsgPCB0aGVcLXBlb3BsZScnc1wtcmVwdWJsaWNcLW9mXC1jaGluYTsKK+eOpCA8IGFcLWtpbmRcLW9mXC1nZW1cLWluZmVyaW9yXC10b1wtamFkZTsKK+acjeWLmeW7o+WRiuWNlOitsCA8IHNlcnZpY2VcLWFkdmVydGlzZW1lbnRcLXByb3RvY29sOwor54WgIDwgdG9cLWZyeVwtaW5cLWZhdFwtb3JcLW9pbFwuXC10b1wtc2NhbGQ7Civoh7rnjaggPCB0YWl3YW5cLWluZGVwZW5kZW5jZVwtXChtb3ZlbWVudFwpOwor5r2PIDwgZmFyZXNoYXJlXC1yZWNsYWltZWRcLWZyb21cLXJpdmVyOwor5ry8IDwgaGF2aW5nXC10aGVcLWFwcGVhcmFuY2VcLW9mXC1kZXB0aDsKK+S/neiLlyA8IGtlZXBcLWFcLWZ1bGxcLXN0YW5kXC1vZlwtc2VlZGxpbmdzOwor5qyeIDwgdGhlXC1sYXR0aWNlXC1vZlwtYVwtd2luZG93XC1hXC1zaWxsOwor5oyJ6ZyA5YiG6YWNIDwgZGlzdHJpYnV0aW9uXC1hY2NvcmRpbmdcLXRvXC1uZWVkOwor5LiW6LK/57WE57mUIDwgd3RvXC1cKHdvcmxkXC10cmFkZVwtb3JnYW5pemF0aW9uXCk7Civmm5ogPCB0d2lsaWdodFwtanVzdFwtYmVmb3JlXC1zdW5cLXJpc2VzOwor5rKS5pyJ5LuA6bq8IDwgdGhlcmUnJ3NcLW5vdGhpbmdcLVwoXC5cLlwuXC1hYm91dFwtaXRcKTsKK+aWmiA8IGFcLXNtYWxsXC1jdXBcLW9mXC1zdG9uZVwtd2l0aFwtZWFyczsKK+aMieWLnuWIhumFjSA8IGRpc3RyaWJ1dGlvblwtYWNjb3JkaW5nXC10b1wtd29yazsKK+i3r+eUsSA8IHJvdXRpbmdcLVwoaW5cLWNvbXB1dGVyXC1uZXR3b3Jrc1wpOwor5bCN576OIDwgXChwb2xpY3lcLFwtZXRjXC5cKVwtdG93YXJkc1wtYW1lcmljYTsKK+aMh+aVuCA8IFwobnVtZXJpY2FsXCxcLXN0YXRpc3RpY2FsXClcLWluZGV4Owor562G55WrIDwgc3Ryb2tlc1wtb2ZcLWFcLWNoaW5lc2VcLWNoYXJhY3RlcjsKK+aJiiA8IHVwcmlnaHRcLWJhclwtZm9yXC1mYXN0ZW5pbmdcLWRvb3I7CivmhZwgPCBuYW1lXC1vZlwtYVwtbW9ua1wtaW5cLXRhbmdcLWR5bmFzdHk7CivnqbropbIgPCBcKG1pbGl0YXJ5XClcLWF0dGFja1wtZnJvbVwtdGhlXC1haXI7CivltKAgPCBwbGFjZVwtbmFtZVwtaW5cLWd1YW5neGlcLXByb3ZpbmNlOwor6KGo5aCxIDwgc3RhdGlzdGljYWxcLXRhYmxlc1wtYW5kXC1yZXBvcnRzOwor5bKdIDwgbmFtZVwtb2ZcLWFcLW1vdW50YWluXC1pblwtc2hhbmRvbmc7Civmi5jmirwgPCBcKGFycmVzdFwtYW5kXClcLXRha2VcLWludG9cLWN1c3RvZHk7Civoq4flvpfkvoYgPCBhYmxlXC10b1wtdGFsa1wtdG9cLW9yXC1nZXRcLW9uXC13aXRoOwor5aCtIDwgYVwtZHJ5XC1tb2F0XC1vdXRzaWRlXC1hXC1jaXR5XC13YWxsOwor5aCOIDwgY2hhcmFjdGVyXC11c2VkXC1mb3JcLXBsYWNlXC1uYW1lczsKK+WauSA8IGFcLXBhcnRpY2xlXC1pbXBseWluZ1wtY29tcGxldGlvbjsKK+mYv+aLieacqOWcliA8IGFsbWF0eVwtXChjYXBpdGFsXC1vZlwta2F6YWtoc3RhblwpOwor5YyzIDwgbGFkaWVzXC10b2lsZXRcLWNhc2VcLXdpdGhcLW1pcnJvcjsKK+WItSA8IHB1bmlzaG1lbnRcLWJ5XC1jdXR0aW5nXC1vZmZcLWVhcnM7CivlsJrmm7ggPCBoaWdoXC1vZmZpY2lhbFwtaW5cLWFuY2llbnRcLWNoaW5hOwor5LKBIDwgZ2VuZXJhbFwtdGVybVwtb2ZcLWFcLWtpbmRcLW9mXC1maXNoOwor5LiD5bGk5p625qeLIDwgc2V2ZW5cLWxheWVyXC1hcmNoaXRlY3R1cmVcLVwob3NpXCk7CivksJogPCB0aGVcLXRvcFwtcGFydFwtb2ZcLXRoZVwtcmljZVwtZ3J1ZWw7Civkr7UgPCBoYWlyXC1zdHlsZVwtZm9yXC1saXR0bGVcLWNoaWxkcmVuOwor5K+kIDwgYm9uZXdhcmVcLXVzZWRcLXRvXC1jb21iXC10aGVcLWhhaXI7Civkr5IgPCB0aGVcLXVwcGVyXC1wYXJ0XC1vZlwtdGhlXC1zaGluYm9uZTsKK+SulCA8IGFcLXlvdW5nXC1hbmRcLWZsZWV0XC1mb290ZWRcLWhvcnNlOwor5K26IDwgYVwtaG9yc2VcLXRvXC1yYWlzZVwtaXRzXC1oZWFkXC1oaWdoOwor5KuuIDwgdG9cLWJlbmRcLW9yXC1sb3dlclwtb2ZcLW9uZScnc1wtaGVhZDsKK+SrhiA8IHRoZVwtZnJvbnRcLWFuZFwtYmFja1wtb2ZcLXRoZVwtbmVjazsKK+SnkiA8IHN0ZXBzXC1sZWFkaW5nXC11cFwtdG9cLWFcLWJ1aWxkaW5nOwor5KSbIDwgY29tcG9uZW50XC1wYXJ0c1wtb2ZcLWFcLWNyb3NzXC1ib3c7Civko7kgPCB0b1wtYnJld1wtMTBcLXBlcmNlbnRcLW9mXC10aGVcLXdpbmU7Civko7UgPCB0b1wtYnJld1wtdGhlXC13aW5lXC1hXC1zZWNvbmRcLXRpbWU7Civko6wgPCB0aGVcLXNoaW55XC1jb2xvcmZ1bFwtb2ZcLXRoZVwtd2luZTsKK+iBs+eriyA8IHRvXC10b3dlclwtYWJvdmVcLVwob25cLXRvcFwtb2ZcLXN0aFwpOwor5KK+IDwgbmFtZVwtb2ZcLWFuXC1hbmNpZW50XC1zbWFsbFwtc3RhdGU7CivkoYMgPCBhXC10b29sXC1mb3JcLWJydXNoaW5nXC10aGVcLXRocmVhZDsKK+ScsiA8IG5hbWVcLW9mXC1hXC12aWxsYWdlXC1pblwtb2xkXC1jaGluYTsKK+ePree1hCA8IHRlYW1zXC1hbmRcLWdyb3Vwc1wtXChpblwtZmFjdG9yaWVzOwor5JiTIDwgdGhpY2tcLWJsb29kXC1vZlwtY2F0dGxlXC1hbmRcLWdvYXQ7Civkk78gPCBhXC1zZWNvbmRcLW5hbWVcLWZvclwtbG90dXNcLWZsb3dlcjsKK+STuSA8IHRvXC1zdHVmZlwtZnVsbFwtYW5kXC10b1wtZ3VscFwtZG93bjsKK+SNgSA8IHRoZVwtaGVtXC1vclwtYm9yZGVyXC1vZlwtYVwtZ2FybWVudDsKK+SLtCA8IHNpbGtcLWZhYnJpY3NcLXdpdGhcLW1peGVkXC1jb2xvcnM7Civki7MgPCBjbG90aFwtb3JcLXBhcGVyXC1wYXN0ZWRcLXRvZ2V0aGVyOwor5Lyv5q+NIDwgd2lmZVwtb2ZcLWZhdGhlcicnc1wtZWxkZXJcLWJyb3RoZXI7CivkiaQgPCBhXC1iYW1ib29cLXdhcmVcLWZvclwtd2FzaGluZ1wtcmljZTsKK+SJmyA8IGJhbWJvb1wtYmFza2V0XC1mb3JcLXdhc2hpbmdcLXJpY2U7CivkiZMgPCBtYXR0cmVzc1wtbWFkZVwtb2ZcLWJhbWJvb1wtc3RyaXBzOwor5IesIDwgdGhpblwtYmFtYm9vXC1sYXRoc1wta25pdHRlZFwtc2FpbDsKK+SHpyA8IHRvXC1maWxsXC1hblwtb3BlbmluZ1wtd2l0aFwtYmFtYm9vOwor5IShIDwgbm9ydGhlcm5cLW1pbm9yaXR5XC1ldGhuaWNcLWdyb3VwOwor5IO2IDwgcnVnZ2VkXC1hbmRcLXVuZXZlblwtb2ZcLXRoZVwtcm9ja3M7Civkg5ogPCBydWdnZWRcLWxhbmRcLW9mXC1zYW5kXC1hbmRcLXBlYmJsZTsKK+SDgiA8IGR1bGxcLXNvdW5kXC1vZlwtdGhlXC10b2xsaW5nXC1iZWxsOwor47yhIDwgYVwtc21hbGxcLWphclwtd2l0aFwtYVwtc21hbGxcLW1vdXRoOwor47W3IDwgdHVyYnVsZW50XC1mbG93aW5nXC1vZlwtdGhlXC13YXRlcjsKK+S4reiXpSA8IFwodHJhZGl0aW9uYWxcKVwtY2hpbmVzZVwtbWVkaWNpbmU7Civoqp7pn7PpgJroqIrpgJrpgZMgPCB2b2ljZVwtXChjb21tdW5pY2F0aW9uc1wpXC1jaGFubmVsOwor47K5IDwgdGhlXC1kcnlcLXNvaWxcLW9uXC10aGVcLXJpdmVyXC1zaWRlOwor47KdIDwgZmluZVwtaGFpclwtb2ZcLWJpcmRzXC1hbmRcLWFuaW1hbHM7Civjr4UgPCB0aGVcLWJyYW5jaGVzXC1ncm93aW5nXC1kb3dud2FyZHM7CivjroIgPCBhblwtYXBwbGlhbmNlXC11c2VkXC10b1wtbGlmdFwtZm9vZDsKK+OspCA8IHdldFwtY2xvdGhlc1wtbm90XC1jb21wbGV0ZWx5XC1kcnk7Civjqr4gPCB0b1wtY3V0XC10aGVcLWZsZXNoXC1mcm9tXC10aGVcLWJvbmU7CivjqJkgPCB0b1wtY2xhc3BcLW9yXC1ob2xkXC11bmRlclwtdGhlXC1hcm07CivjprIgPCBhXC1wYXJ0aWNsZVwtZXhwcmVzc2luZ1wtc3VycHJpc2U7CivjpYsgPCBzb3VuZFwtb2ZcLXRoZVwtYW5ndWlzaFwtb2ZcLXNvcnJvdzsKK+OkryA8IGNsZXZlclwtb3JcLXNtYXJ0XC1pblwtYVwtc21hbGxcLXdheTsKK+OklCA8IHRvXC1jb25jZWRlXC1vclwtc3VibWl0XC13aWxsaW5nbHk7Civjo4cgPCBhXC1raW5kXC1vZlwtYmVhc3RcLXdpdGhcLWxvbmdcLWhhaXI7CivjoZ4gPCBhXC1zYWNrXC11c2VkXC10b1wtZmVlZFwtdGhlXC1ob3JzZXM7CivjoKMgPCBhXC1tb3VudGFpblwtaW5cLWppYW5neGlcLXByb3ZpbmNlOwor456vIDwgdGhlXC10dXJuaW5nXC1hcmVhXC1vZlwtYVwtbW91bnRhaW47Civnj63kuLvku7sgPCBhXC10ZWFjaGVyXC1pblwtY2hhcmdlXC1vZlwtYVwtY2xhc3M7CivjnIYgPCBjb21tb25seVwta25vd25cLWFzXC1tb3RoZXJcLWluXC13dTsKK+OZmiA8IHJlZFwtY29sb3JlZFwtaGFyZFwtYW5kXC1zb2xpZFwtbXVkOwor45ieIDwgeWVsbGluZ1wtc291bmRcLW9mXC10b3dpbmdcLWFcLWJvYXQ7CivjlKkgPCBoYWlyXC1vcm5tZW50c1wtdXNlZFwtaW5cLW9sZFwtdGltZTsKK+OUgCA8IHRvXC1icmFuZFwtY3JpbWluYWxzXC1vblwtdGhlXC1mYWNlOwor5pqX6KKLIDwgY2FtZXJhXC1iYWdcLVwoZm9yXC1jaGFuZ2luZ1wtZmlsbVwpOwor5Y+v6YG45pOH5Lif5qOEIDwgZGlzY2FyZFwtZWxpZ2libGVcLVwoZnJhbWVcLXJlbGF5XCk7CivomZXmsbogPCBleGVjdXRlXC1cKGFcLWNvbmRlbW5lZFwtY3JpbWluYWxcKTsKK+aHieacieeboeaciSA8IGV2ZXJ5dGhpbmdcLVwob25lXC1jb3VsZFwtaW1hZ2luZVwpOwor5paw6a6uIDwgZnJlc2hcLVwoZXhwZXJpZW5jZVwsXC1mb29kXCxcLWV0Y1wuXCk7CivlsI7oiKrlk6EgPCBuYXZpZ2F0b3JcLVwob25cLWFcLXBsYW5lXC1vclwtYm9hdFwpOwor5Y+r6IGyIDwgeWVsbGluZ1wtXChzb3VuZFwtbWFkZVwtYnlcLXBlcnNvblwpOwor54+t5birIDwgd2l0aGRyYXdcLXRyb29wc1wtZnJvbVwtdGhlXC1mcm9udDsKK+WTgOaCvCA8IGdyaWV2ZVwtXChtb3VyblwpXC1vdmVyXC1zYicnc1wtZGVhdGg7Civnp5HmgakgPCBjb2hlblwtXCh1XC5zXC5cLWRlZmVuY2VcLXNlY3JldGFyeVwpOwor5pWX6ZmjIDwgYmVcLWRlZmVhdGVkXC1vblwtdGhlXC1iYXR0bGVmaWVsZDsKK+ecvuitsOmZoiA8IGhvdXNlXC1vZlwtcmVwcmVzZW50YXRpdmVzXC1cKHVzYVwpOwor5YyF6LOgIDwgZ3VhcmFudGVlXC10b1wtcGF5XC1jb21wZW5zYXRpb25zOwor5ZCN5qyhIDwgcG9zaXRpb25cLWluXC1hXC1yYW5raW5nXC1vZlwtbmFtZXM7Civlq4Llq4IgPCBzaXN0ZXJcLWluXC1sYXdcLVwoaHVzYmFuZCcnc1wtc2lkZVwpOwor5aWJ6KGMIDwgdG9cLXB1cnN1ZVwtXChhXC1jb3Vyc2VcLFwtYVwtcG9saWN5XCk7CivpnZLlsbHntqDmsLQgPCB2ZXJkYW50XC1oaWxsc1wtYW5kXC1ncmVlblwtd2F0ZXJzOwor5ZG85ZaaIDwgY2FsbFwtb3V0XC1cKHNvbWVvbmUnJ3NcLW5hbWVcLFwtZXRjXCk7CivwoICBIDwgdGhlXC1vcmlnaW5hbFwtZm9ybVwtZm9yXC3kuINcLXVcKzRlMDM7CivwoICAIDwgdGhlXC1zb3VuZFwtbWFkZVwtYnlcLWJyZWF0aGluZ1wtaW47CivombnmqYvmqZ/loLQgPCBob25ncWlhb1wtYWlycG9ydFwtXChpblwtc2hhbmdoYWlcKTsKK+e1seS4gOaLm+eUnyA8IG5hdGlvbmFsXC11bmlmaWVkXC1lbnRyYW5jZVwtZXhhbTsKK+ekuuWogSA8IGhvbGRcLWFcLVwocHJvdGVzdFwpXC1kZW1vbnN0cmF0aW9uOwor5p2x6YOo5pmC6ZaTIDwgXCh1XC5zXC5cKVwtZWFzdGVyblwtXChzdGFuZGFyZFwpXC10aW1lOwor55W25LqL5Lq6IDwgcGVyc29uc1wtaW52b2x2ZWRcLW9yXC1pbXBsaWNhdGVkOwor5pmC5aSn5pmC5bCPIDwgc29tZXRpbWVzXC1iaWdcLFwtc29tZXRpbWVzXC1zbWFsbDsKK+W4uOimj+mKhembu+ipsee3miA8IG9yZGluYXJ5XC1jb3BwZXJcLXRlbGVwaG9uZVwtbGluZTsKK+i/piA8IGNoYXJhY3RlclwtZm9yXC10cmFuc2xpdGVyYXRpb247CivlurUgPCBidWRkaGlzdFwtbW9uYXN0ZXJ5XC1vclwtbnVubmVyeTsKK+W6miA8IHNldmVudGhcLW9mXC10ZW5cLWN5Y2xpY2FsXC1zdGVtczsKK+i2oyA8IHdoYXRcLWF0dHJhY3RzXC1vbmUnJ3NcLWF0dGVudGlvbjsKK+eVlCA8IGJvdW5kYXJ5XC1wYXRoXC1kaXZpZGluZ1wtZmllbGRzOwor5aS+IDwgYmVcLXdlZGdlZFwtb3JcLWluc2VydGVkXC1iZXR3ZWVuOwor6L6GIDwgbnVtZXJhcnlcLWFkanVuY3RcLWZvclwtdmVoaWNsZXM7CivmgJQgPCBhXC1kaXNlYXNlXC1yZXNlbWJsaW5nXC1uZXVyb3NpczsKK+mZjCA8IGZvb3RcLXBhdGhcLWJldHdlZW5cLXJpY2VcLWZpZWxkczsKK+mqhiA8IGFcLXdoaXRlXC1ob3JzZVwtd2l0aFwtYmxhY2tcLW1hbmU7CivmpaMgPCBjcm9zc2JlYW1cLWFib3ZlXC1vclwtdW5kZXJcLWdhdGU7CivnkqcgPCBwaWVjZVwtb2ZcLWphZGVcLXdpdGhcLWhvbGVcLWluXC1pdDsKK+iGuyA8IHJhbmtcLW9kb3JcLVwob2ZcLXNoZWVwXC1vclwtZ29hdHNcKTsKK+eOkSA8IHBlYXJsXC10aGF0XC1pc1wtbm90XC1xdWl0ZVwtcm91bmQ7CivllKIgPCBmbHV0ZVwtbGlrZVwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+algiA8IGFcLXJhZnRcLlwtdG9cLWhld1wuXC10b1wtZmVsbFwtdHJlZXM7CivnipIgPCBlbnRlcnRhaW5cLXZpY3RvcmlvdXNcLXNvbGRpZXJzOwor55+NIDwgbG9va1wtYWJvdXRcLWluXC1mcmlnaHRcLW9yXC1hbGFybTsKK+aTpCA8IHRvXC1ibG93XC10aGVcLW5vc2VcLXdpdGhcLWZpbmdlcnM7CivoiqEgPCBwbGFudFwtYWxsaWVkXC10b1wtdGhlXC13YXRlcmxpbHk7CivnsbwgPCBub25cLWdsdXRpbm91c1wtbG9uZ1wtZ3JhaW5cLXJpY2U7CivmoaEgPCBiZW50XC1vclwtdHdpc3RlZFwtcGllY2VcLW9mXC13b29kOwor6bu7IDwgc3BlY2lhbFwtcGF0dGVyblwtb2ZcLWVtYnJvaWRlcnk7CivltZ0gPCBnb3Vsb3VcLW1vdW50YWluXC1wZWFrXC1pblwtaHVuYW47Civlnq0gPCBjaGFyYWN0ZXJcLXVzZWRcLWluXC1wbGFjZVwtbmFtZXM7CivnoZYgPCBcPGFyY2hcPlwtdG93blwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+mCoSA8IG5hbWVcLW9mXC1hXC1kaXN0cmljdFwtaW5cLXNpY2h1YW47CivorqAgPCBzaW1wbGlmaWVkXC1rYW5neGlcLXJhZGljYWxcLTE0OTsKK+WZuyA8IGNoYXJhY3RlclwtdXNlZFwtaW5cLXRyYW5zbGF0aW9uOwor55asIDwgc2Nyb2Z1bG91c1wtbHVtcHNcLW9yXC1zd2VsbGluZ3M7CivolJ8gPCBmcmFtZVwtb25cLXdoaWNoXC1zaWxrd29ybXNcLXNwaW47CivlnqcgPCB2YXJpYWJsZVwtdW5pdFwtb2ZcLWxhbmRcLW1lYXN1cmU7CivprI8gPCBhXC1jb2lmZnVyZVwtb25cLXRvcFwtb2ZcLXRoZVwtaGVhZDsKK+etmCA8IFwoYVwtbWVhc3VyZVwtb2ZcLXdpZHRoXC1vZlwtY2xvdGhcKTsKK+e8kSA8IGNvcmRcLWJpbmRpbmdcLW9uXC1oaWx0XC1vZlwtc3dvcmQ7CivnsJYgPCBiYW1ib29cLXRyYXBcLWZvclwtY2F0Y2hpbmdcLWZpc2g7CivluosgPCBhXC1jdXBib2FyZFwtb3JcLXBhbnRyeVwtdG9cLXN0b3JlOwor55SNIDwgcmFmdGVyc1wtc3VwcG9ydGluZ1wtcm9vZlwtdGlsZXM7CivlkIPliIAgPCBwZW5ldHJhdGlvblwtb2ZcLWFcLWN1dHRpbmdcLXRvb2w7CivlkITkvY0gPCBldmVyeWJvZHlcLVwoYVwtdGVybVwtb2ZcLWFkZHJlc3NcKTsKK+mfk+WckyA8IGtvcmVhblwtd29uXC1cKHVuaXRcLW9mXC1jdXJyZW5jeVwpOwor5LiN6L6t6ICM5YilIDwgbGVhdmVcLXdpdGhvdXRcLXNheWluZ1wtZ29vZFwtYnllOwor55m+6IG95LiN5Y6tIDwgd29ydGhcLWhlYXJpbmdcLWFcLWh1bmRyZWRcLXRpbWVzOwor5L2O6ZqO6Kqe6KiAIDwgbG93XC1sZXZlbFwtXChjb21wdXRlclwpXC1sYW5ndWFnZTsKK+S4jei2s+eCuuiokyA8IG5vdFwtdG9cLWJlXC10YWtlblwtYXNcLWFuXC1leGFtcGxlOwor5aCx56S+IDwgZ2VuZXJhbFwtb2ZmaWNlXC1vZlwtYVwtbmV3c3BhcGVyOwor55m86LehIDwgdG9cLXJpc2VcLXRvXC1wb3dlclwtYW5kXC1wb3NpdGlvbjsKK+aUr+aPtCA8IHByb3ZpZGVcLWFzc2lzdGFuY2VcLW9yXC1iYWNraW5nOwor6KeA5risIDwgXChzY2llbnRpZmljXCxcLWV0Y1wpXC1vYnNlcnZhdGlvbjsKK+mBleW/gyA8IGFnYWluc3RcLW9uZXNcLXdpbGxcLW9yXC1mZWVsaW5nczsKK+mnuSA8IGJsYWNrXC1ob3JzZVwtd2l0aFwtYVwtd2hpdGVcLWZhY2U7CivppY4gPCB3aW5lXC1hbmRcLWZvb2RcLWVhdGVuXC13aXRoXC13aW5lOwor5ZCM5q2l5pW45L2N6ZqO5bGkIDwgc3luY2hyb25vdXNcLWRpZ2l0YWxcLWhpZXJhcmNoeTsKK+aLvOmfsyA8IHBpbnlpblwtXChjaGluZXNlXC1yb21hbml6YXRpb25cKTsKK+Wkp+WQueWkp+aTgiA8IG1ha2VcLWFuXC1leGhpYml0aW9uXC1vZlwtb25lc2VsZjsKK+mHhCA8IHdpbmVcLWJyZXdcLWZvclwtdGhlXC1zZWNvbmRcLXRpbWU7Civph4EgPCBzbWVhclwtd2l0aFwtYmxvb2RcLWluXC1zYWNyaWZpY2U7CivlooPlpJYgPCBvdXRzaWRlXC1cKGFcLWNvdW50cnknJ3NcKVwtYm9yZGVyczsKK+S4iua1t+aIsuWKh+WtuOmZoiA8IHNoYW5naGFpXC10aGVhdHJpY2FsXC1pbnN0aXR1dGU7Civov6cgPCBhXC1jaGluZXNlXC1mYW1pbHlcLW5hbWVcLWFycmFuZ2U7CivovZggPCB0ZWFyXC1hc3VuZGVyXC1iZXR3ZWVuXC1jaGFyaW90czsKK+i8mSA8IHNpZGVzXC1vZlwtY2hhcmlvdFwtd2VyZVwtd2VhcG9uczsKK+aLjOmdoiA8IG5vb2RsZXNcLXNlcnZlZFwtd2l0aFwtc295XC1zYXVjZTsKK+ebtOaOpSA8IGRpcmVjdFwtXChvcHBvc2l0ZVwtb2ZcLWluZGlyZWN0XCk7CivoqYAgPCBnYXJydWxvdXNcLXRvXC13aGlzcGVyXC5cLXRvXC1qb2tlOwor6Ki5IDwgdG9cLWJlZ3VpbGVcLXdpdGhcLWZhbHNlXC1zdG9yaWVzOwor6JeKIDwgYVwta2luZFwtb2ZcLWJlYW5cLXdpdGhcLWZsYXRcLXBvZHM7CivlronkuYvoi6XntKAgPCBiZWFyXC1oYXJkc2hpcFwtd2l0aFwtZXF1YW5pbWl0eTsKK+iIoCA8IGxvbmdcLW5hcnJvd1wta25pZmVcLXNoYXBlZFwtYm9hdDsKK+mPoemgrSA8IGNhbWVyYVwtc2hvdFwtXChpblwtYVwtbW92aWVcLFwtZXRjXCk7Civnv6MgPCBmZWF0aGVyc1wtdXNlZFwtZGVjb3JhdGVcLWNvZmZpbjsKK+iOq+S4jSA8IHRoZXJlXC1pc1wtbm9cLW9uZVwtXCh3aG9cLWRvZXNuJyd0XCk7CivpgIHkurogPCB0b1wtc2VlXC1cKG9yXC13YWxrXClcLXNvbWVvbmVcLWhvbWU7Civnmb3mlocgPCB0aGVcLXRleHRcLW9mXC1hblwtYW5ub3RhdGVkXC1ib29rOwor57iTIDwgb3JhbmdlXC1vclwtcmVkZGlzaFwteWVsbG93XC1zaWxrOwor6KW/5ZOI5Yqq5YWLIDwgXChraW5nXClcLXNpaGFub3VrXC1cKG9mXC1jYW1ib2RpYVwpOwor5bCH6aCYIDwgaGlnaFwtcmFua2luZ1wtbWlsaXRhcnlcLW9mZmljZXI7CivmrrrkurrmoYjku7YgPCBcKGNhc2VcLW9mXCxcLWluY2lkZW50XC1vZlwpXC1tdXJkZXI7Civns48gPCByaWNlXC1ncml0c1wtbGVmdFwtYWZ0ZXJcLWh1bGxpbmc7Civnr5ggPCBhXC11dGVuc2lsXC11c2VkXC10b1wtZmlsdGVyXC13aW5lOwor57SF57ag54eIIDwgXChyZWRcLWFuZFwtZ3JlZW5cKVwtdHJhZmZpY1wtbGlnaHQ7CivmjozmrIogPCB3aWVsZFwtXChwb2xpdGljYWxcLFwtZXRjXC5cKVwtcG93ZXI7Civkv4PpgLIgPCB0b1wtcHJvbW90ZVwtXChhblwtaWRlYVwtb3JcLWNhdXNlXCk7Civnn7AgPCBhcnJvd1wtd2l0aFwtYXR0YWNoZWRcLXNpbGtcLWNvcmQ7CivlhazlrokgPCBcKG1pbmlzdHJ5XC1vZlwpXC1wdWJsaWNcLXNlY3VyaXR5Owor546DIDwgYVwtbGFyZ2VcLWFwZVwtZm91bmRcLWluXC13XC5cLWNoaW5hOwor54yHIDwgdGhlXC1zY3JlYW1cLW9yXC1yb2FyXC1vZlwtYVwtdGlnZXI7CivnibggPCB0aGVcLWZlbWFsZVwtb2ZcLWNlcnRhaW5cLWFuaW1hbHM7Civog4zpgZPogIzpprMgPCBydW5cLWluXC10aGVcLW9wcG9zaXRlXC1kaXJlY3Rpb247Civmu5kgPCB3YXRlcnNcLWNvbnZlcmdpbmdcLXRvXC1vbmVcLXNwb3Q7CivlgrPovLjmjqfliLbljZTlrpogPCB0cmFuc21pc3Npb25cLWNvbnRyb2xcLXByb3RvY29sOwor55eF5qC5IDwgYW5cLWluY29tcGxldGVseVwtY3VyZWRcLWlsbG5lc3M7Civoo5zloLEgPCBtYWtlXC1hXC1yZXBvcnRcLWFmdGVyXC10aGVcLWV2ZW50Owor6YeN6KSH56+AIDwgcmVwZWF0ZWRcLXNlZ21lbnRcLVwobmV0d29ya2luZ1wpOwor5qSKIDwgdG9cLWZpdFwtYVwtaGFuZGxlXC1pbnRvXC1hXC1zb2NrZXQ7CivkuI3lkI3kuIDmlocgPCB3aXRob3V0XC1hXC1wZW5ueVwtdG9cLW9uZScnc1wtbmFtZTsKK+S4jeeEoeWwj+ijnCA8IG5vdFwtYmVcLXdpdGhvdXRcLXNvbWVcLWFkdmFudGFnZTsKK+WwjeiHuiA8IFwocG9saWN5XCxcLWV0Y1wuXClcLXRvd2FyZHNcLXRhaXdhbjsKK+adv+m8kyA8IGFcLXNtYWxsXC1kcnVtXC1mb3JcLW1hcmtpbmdcLXRpbWU7CivmmpAgPCB0aGVcLWJyaWdodFwtc2hpbmluZ1wtb2ZcLXRoZVwtc3VuOwor5pizIDwgdGhlXC1kZWNsaW5pbmdcLXN1blwtaW5cLXRoZVwtd2VzdDsKK+eJueWIpeihjOaUv+WNgCA8IHNwZWNpYWxcLWFkbWluaXN0cmF0aXZlXC1yZWdpb247CivotIXov7AgPCB0b1wtc2F5XC1tb3JlXC10aGFuXC1pc1wtbmVjZXNzYXJ5Owor5o2sIDwgcHJlc3NcLWRvd25cLWhlYXZpbHlcLXdpdGhcLWhhbmRzOwor5oqUIDwgdGFrZVwtb3JcLWhvbGRcLXVwXC1pblwtYm90aFwtaGFuZHM7Civlr6bogpggPCBmdWxsXC1hcm1cLVwobWV0aG9kXC1vZlwtcGFpbnRpbmdcKTsKK+a3mOmHkSA8IHBhbm5pbmdcLVwoZm9yXC1wcmVjaW91c1wtbWV0YWxzXCk7CivltL4gPCBwbGFjZVwtbmFtZVwtaW5cLXNoYW54aVwtcHJvdmluY2U7Civls6sgPCBtb3VudGFpblwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+WnhSA8IHdvbWFuXC1hdFwtdGltZVwtb2ZcLW1lbnN0cnVhdGlvbjsKK+WjvCA8IHBhbGFjZVwtY29ycmlkb3JcLW9yXC1wYXNzYWdld2F5Owor5aONIDwgbW9hdFwtYXJvdW5kXC1hXC1jaXR5XC5cLWFcLWNoYW5uZWw7CivliqDlvLfnrqHliLYgPCB0b1wtdGlnaHRlblwtY29udHJvbFwtXChvdmVyXC1zdGhcKTsKK+WVqSA8IHBhcnRpY2xlXC1pbXBseWluZ1wtcHJvYmFiaWxpdHk7Civlj5AgPCB0b1wtcHJpY2tcLWFcLWRvZ1wtdG9cLW1ha2VcLWhpbVwtZ287CivljZAgPCBzd2FzdGlrYVwtZm91cnRoXC1vZlwtYXVzcGljaW91czsKK+aIiOeIviA8IFwoYWxcKVwtZ29yZVwtXCh1c1wtdmljZVwtcHJlc2lkZW50XCk7CivktpUgPCBpcnJlZ3VsYXJcLWFuZFwtcHJvbWluZW50XC10ZWV0aDsKK+S1mCA8IGRvc2VuJyd0XC10XC1zdGlja1wtdG9cLWVhY2hcLW90aGVyOwor5LK1IDwgYVwtZ2VuZXJhbFwtbmFtZVwtb2ZcLXNtYWxsXC1iaXJkczsKK+S6guiqqiA8IHRvXC1tYWtlXC1pcnJlc3BvbnNpYmxlXC1yZW1hcmtzOwor5K+GIDwgc21hbGxcLWFuZFwtdGhpblwtcGllY2VcLW9mXC1ib25lczsKK+S6uuawkeaXpeWgsSA8IHJlbm1pblwtcmliYW9cLVwocGVvcGxlJydzXC1kYWlseVwpOwor5KuyIDwgdGhpblwtYW5kXC1zaWNrbHlcLWluXC1hcHBlYXJhbmNlOwor5KukIDwgYmV0d2VlblwtdGhlXC1leWVicm93c1wtYW5kXC1leWVzOwor5KuhIDwgYVwtbG9uZ1wtc2hhcGVcLW9mXC1oZWFkXC1hbmRcLWZhY2U7Civkq4sgPCBmZW1hbGVcLWF0dGVuZGFudHNcLW9yXC1zZXJ2YW50czsKK+mWi+Wni+S7peWJjSA8IGJlZm9yZVwtdGhlXC1iZWdpbm5pbmdcLVwob2ZcLXN0aFwpOwor5KeQIDwgYVwtbW91bnRhaW5cLWluXC1zaGFueGlcLXByb3ZpbmNlOwor5KWjIDwgYW5cLWluc3RydW1lbnRcLWZvclwtYm9yaW5nXC13b29kOwor5KWJIDwgdGhlXC1jdXJ2ZWRcLWlyb25cLXBhcnRcLW9mXC1hXC1ob2U7CivkpJIgPCB3aW5lXC1tYWRlXC1mcm9tXC1nbHV0aW5vdXNcLXJpY2U7CivkpI0gPCByb3R0ZW5cLXBhc3RlXC1vclwtc295YmVhblwtc2F1Y2U7CivkuI3orZjlpKfpq5QgPCBmYWlsXC10b1wtc2VlXC10aGVcLWxhcmdlclwtaXNzdWVzOwor5KC9IDwgaGVpZ2h0XC1vclwtc3RhdHVyZVwtb2ZcLWFcLXBlcnNvbjsKK+SgsSA8IHRvXC13YWxrXC1zbG93bHlcLWFuZFwtY2F1dGlvdXNseTsKK+SfpyA8IHNvdW5kXC1vZlwtdHJlYWRpbmdcLW9yXC1zdGVwcGluZzsKK+SehyA8IGdpZnRzXC10b1wtc3VwZXJpb3JzXC1vclwtZnJpZW5kczsKK+SdvSA8IG5hbWVcLW9mXC1hXC1wZXJzb25cLWluXC1vbGRcLWNoaW5hOwor5YW15bel5bugIDwgbXVuaXRpb25zXC1vclwtb3JkbmFuY2VcLWZhY3Rvcnk7CivknZkgPCBhXC1raW5kXC1vZlwtYW5pbWFsXC1saWtlXC1hXC10aWdlcjsKK+SciCA8IHRvXC1zcGVha1wtb25cLWJlaGFsZlwtb2ZcLWFub3RoZXI7CivkmLMgPCBhXC1nYXJtZW50XC1vZlwtc2luZ2xlXC10aGlja25lc3M7Civkj7wgPCB3aGF0XC1pc1wtbGVmdFwtb3Zlclwtb2ZcLXRoZVwtZm9vZDsKK+S4jeaJk+iHquaLmyA8IGNvbmZlc3NcLXdpdGhvdXRcLWJlaW5nXC1wcmVzc2VkOwor5I6iIDwgdG9cLW1lYXN1cmVcLWJ5XC1waW50c1wtYW5kXC1wZWNrczsKK+SOkSA8IGZseWluZ1wtb3ZlclwtdGhlXC13YXRlclwtc3VyZmFjZTsKK+SNriA8IHlvdW5nXC1nb2F0XC11bmRlclwtb25lXC15ZWFyXC1vbGQ7CivkjYIgPCB0b29sc1wtdG9cLWRyYXdcLXdhdGVyXC1vclwtbGlxdWlkOwor5Iy/IDwgdGhlXC1icmVhZHRoXC1vZlwtY2xvdGhcLW9yXC1wYXBlcjsKK+SMlyA8IHRoZVwtbGVmdFwtb3Zlclwtb2ZcLWRyYXdpbmdcLXNpbGs7CivkjIggPCB0b1wtZ2V0XC1zb21ldGhpbmdcLXdpdGhcLWFcLWxhc3NvOwor5LiA6IiJ5YWp5b6XIDwga2lsbFwtdHdvXC1iaXJkc1wtd2l0aFwtb25lXC1zdG9uZTsKK+S4jei7jCA8IGFnYWluc3RcLXRoZVwtbGF3XC1vclwtZGlzY2lwbGluZTsKK+SJpSA8IGFcLXNtYWxsXC1iYXNrZXRcLWZvclwtY2hvcHN0aWNrczsKK+WNiui6q+WDjyA8IGhhbGZcLWxlbmd0aFwtcGhvdG9cLW9yXC1wb3J0cmFpdDsKK+SGuiA8IHdoaXJsaW5nXC1vZlwtdGhlXC1mbG93aW5nXC13YXRlcjsKK+SFoiA8IG1hdHVyZVwtb3JcLXJpcGVuXC1vZlwtdGhlXC1ncmFpbnM7Civkv53llYYgPCBwcmVzZXJ2YXRpb25cLW9mXC1zb2lsXC1tb2lzdHVyZTsKK+O/tiA8IHRoZVwtc2lkZXNcLW9mXC1hXC1zaG9lXC1vclwtZ3V0dGVyOwor472wIDwgY2FydmVkXC13aW5kb3dcLWZyYW1lXC1vblwtYVwtZG9vcjsKK+S9nOaIsCA8IGNvbmR1Y3RcLVwobWlsaXRhcnlcLW9wZXJhdGlvbnNcKTsKK+O5giA8IHVudGFtZWRcLWFuZFwtaW5kb2NpbGl0eVwtY2F0dGxlOwor47SEIDwgdGhlXC13YXRlclwtZmxvd2luZ1wtaW5cLWFcLXR1cm5lZDsKK+S4luihjCA8IFxbYWJicmV2aWF0aW9uXC1mb3JcXVwtd29ybGRcLWJhbms7CivjsIkgPCB0aGVcLWhhemVsXC1udXRcLW9yXC1maWxiZXJ0XC10cmVlOwor5Lit6I+vIDwgY2hpbmFcLVwoYWx0ZXJuYXRlXC1mb3JtYWxcLW5hbWVcKTsKK+OtnyA8IHRvcnR1cmVcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+OrkCA8IGRpc3RhbnRcLWFuZFwtaW5kaXN0aW5ndWlzaGFibGU7CivjobsgPCBuYW1lXC1vZlwtYVwtc21hbGxcLWFuY2llbnRcLXN0YXRlOwor5L615YWlIDwgdG9cLW1ha2VcLVwobWlsaXRhcnlcKVwtaW5jdXJzaW9uczsKK+eQg+aqryA8IHRhYmxlXC1cKGZvclwtZ2FtZXNcLXVzaW5nXC1iYWxsc1wpOwor45uQIDwgd2lmZVwtb2ZcLW9uZScnc1wtZWxkZXInJ3NcLWJyb3RoZXI7CivjmoYgPCB0b1wtZG9cLXNvbWV0aGluZ1wtaW5cLWFuXC1vbGRcLXdheTsKK+OWnyA8IHRvXC1kZWxpdmVyXC1vdmVyXC10b1wtcGVyc29uYWxseTsKK+S4i+iHuiA8IHN0ZXBcLWRvd25cLVwoZnJvbVwtb2ZmaWNlXCxcLWV0Y1wuXCk7CivosqrmsaEgPCBcKHBvbGl0aWNhbFwsXC1tb3JhbFwpXC1jb3JydXB0aW9uOwor5Lit57SaIDwgbWlkZGxlXC1sZXZlbFwtXChpblwtYVwtaGllcmFyY2h5XCk7CivmnInnmoQgPCBcKHRoZXJlXC1hcmVcKVwtc29tZVwtXCh3aG9cLWFyZVwuXC5cLlwpOwor6JOL6aOvIDwgcmljZVwtd2l0aFwtbWVhdFwtYW5kXC12ZWdpdGFibGVzOwor5LiN6YCf5LmL5a6iIDwgdW5pbnZpdGVkXC1vclwtdW5leHBlY3RlZFwtZ3Vlc3Q7CivkuIvnj60gPCB0b1wtY29tZVwtb3JcLWdvXC1vclwtZ2V0XC1vZmZcLXdvcms7Civnmbzpm7vph48gPCBcKGdlbmVyYXRlZFwpXC1lbGVjdHJpY2FsXC1lbmVyZ3k7CivkuI3lvpfopoHpoJggPCBmYWlsXC10b1wtZ3Jhc3BcLXRoZVwtbWFpblwtcG9pbnRzOwor5YyF6Yq3IDwgaGF2ZVwtZXhjbHVzaXZlXC1zZWxsaW5nXC1yaWdodHM7CivpgLLooYzoqr/mn6UgPCB0b1wtY2FycnlcLW91dFwtYW5cLWludmVzdGlnYXRpb247CivorpPnkIMgPCB0b1wtY29uY2VkZVwtcG9pbnRzXC1cKGluXC1hXC1nYW1lXCk7Civmm7jmiL8gPCBzdHVkeVwtXChpXC5lXC5cLXRoZVwta2luZFwtb2ZcLXJvb21cKTsKK+mAmueUqOizh+a6kOitmOWIpeiZnyA8IHVuaXZlcnNhbFwtcmVzb3VyY2VcLWlkZW50aWZpZXI7Civoqo3orZggPCBiZVwtYWNxdWFpbnRlZFwtd2l0aFwtXChhXC1wZXJzb25cKTsKK+WNu+eXhSA8IHRvXC1wcmV2ZW50XC1vclwtdHJlYXRcLWFcLWRpc2Vhc2U7CivpgbLpgbIgPCBcKGJlXClcLWxhdGVcLVwod2l0aFwtYVwtdGFza1wsXC1ldGNcLlwpOwor5aSn6KGX5bCP5be3IDwgbGFyZ2VcLXN0cmVldHNcLWFuZFwtc21hbGxcLWxhbmVzOwor8KCAhSA8IGFuXC1hbHRlcm5hdGVcLWZvcm1cLW9mXC11XCs0ZWE1XC3kuqU7Civlvrfnj60gPCBkdXJiYW5cLVwoY2l0eVwtaW5cLXNvdXRoXC1hZnJpY2FcKTsKK+S/neWuieaXjyA8IHRoZVwtYmFvYW5cLVwocGFvYW5cKVwtbmF0aW9uYWxpdHk7Civmk7rovKogPCBiYWxhbmNlXC1cKG9mXC1hXC13YXRjaFwtb3JcLWNsb2NrXCk7Civmk7roqK0gPCBmdXJuaXNoXC1hbmRcLWRlY29yYXRlXC1cKGFcLXJvb21cKTsKK+axn+a+pOawkSA8IGppYW5nXC16ZW1pblwtXChjaGluZXNlXC1wcmVtaWVyXCk7CivnhrHnt5ogPCBob3RsaW5lXC1cKGNvbW11bmljYXRpb25zXC1saW5rXCk7Civms5XliLYgPCBsZWdhbFwtc3lzdGVtXC1hbmRcLWluc3RpdHV0aW9uczsKK+S7tiA8IG51bWVyYXJ5XC1hZGp1bmN0XC1mb3JcLWFydGljbGU7CivlkJcgPCBmaW5hbFwtaW50ZXJyb2dhdGl2ZVwtcGFydGljbGU7Civpur0gPCBpbnRlcnJvZ2F0aXZlXC1maW5hbFwtcGFydGljbGU7Civnn6MgPCBwYXJ0aWNsZVwtb2ZcLWNvbXBsZXRlZFwtYWN0aW9uOwor5LmSIDwgdXNlZFwtd2l0aFwtcG9uZ1wtZm9yXC1waW5nXC1wb25nOwor5LmTIDwgdXNlZFwtd2l0aFwtcGluZ1wtZm9yXC1waW5nXC1wb25nOwor5ZKaIDwgdXNlZFwtYXNcLWRlc2NyaXB0aW9uXC1vZlwtc291bmQ7CivnkIUgPCBhXC12YXJpZXR5XC1vZlwtd2hpdGVcLWNhcm5lbGlhbjsKK+WtsCA8IHdob1w/XC13aGljaFw/XC13aGF0XD9cLXdoaWNoXC1vbmVcPzsKK+aIiiA8IGZpZnRoXC1vZlwtdGVuXC1jZWxlc3RpYWxcLXN0ZW1zOwor5riyIDwgYWRkXC1yZXBlYXRlZFwtd2FzaGVzXC1vZlwtY29sb3I7CivlkqsgPCBmb290XC1tZWFzdXJlXC1vZlwtemhvdVwtZHluYXN0eTsKK+mltyA8IHJhdGlvbnNcLWFuZFwtcGF5XC1mb3JcLXNvbGRpZXJzOwor5rG2IDwgYVwtcml2ZXJcLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civlj4EgPCBiYW5rXC1mb3JtXC1vZlwtbnVtZXJhbFwtJyd0aHJlZScnOwor5aOsIDwgbmludGhcLW9mXC10ZW5cLWNlbGVzdGlhbFwtc3RlbXM7Civmn6kgPCBjb2ZmaW5cLXdoaWNoXC1jb250YWluc1wtY29ycHNlOwor5qGgIDwgdGhlXC1mb3JraW5nXC1icmFuY2hcLW9mXC1hXC10cmVlOwor55SPIDwgYVwtc3F1YXRcLWphclwtZm9yXC1ob2xkaW5nXC13aW5lOwor56yeIDwgYmFtYm9vXC1yb2RcLXVzZWRcLWZvclwtYmVhdGluZ3M7CivpmJcgPCBhXC1wbGFjZVwtaW5cLXhpbmppYW5nXC1wcm92aW5jZTsKK+mTiSA8IGRldmljZVwtZm9yXC1jYXJyeWluZ1wtYVwtdHJpcG9kOwor6KelIDwgYVwtY3VwXC1tYWRlXC1vZlwtaG9yblwtb2JzdGluYXRlOwor6KOjIDwgZHJhd1wtb25lJydzXC1oYW5kc1wtaW50b1wtc2xlZXZlOwor5bSDIDwgbW91bnRhaW5cLWluXC1zaWNodWFuXC1wcm92aW5jZTsKK+e9mCA8IHNjcmVlblwtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor5rCHIDwgdGhpY2tcLXJvdWdoXC1zZXJnZVwtZnJvbVwtdGliZXQ7Civln7QgPCBzb2lsXC13aXRoXC1sYXJnZVwtY2xheVwtY29udGVudDsKK+aYtCA8IG9uZVwtb2ZcLXRoZVwtMjhcLWNvbnN0ZWxsYXRpb25zOwor6I+5IDwgc2FsdGVkXC1vclwtcGlja2xlZFwtdmVnZXRhYmxlczsKK+WQhOWkp+i7jeWNgCA8IFwidGhlXC1ncmVhdGVyXC1taWxpdGFyeVwtYXJlYXNcIjsKK+awtOW5syA8IGxldmVsXC1cKG9mXC1hY2hpZXZlbWVudFwsXC1ldGNcLlwpOwor5aSr5qyKIDwgYXV0aG9yaXR5XC1vdmVyXC10aGVcLWhvdXNlaG9sZDsKK+WNsOWwvCA8IFwoYWJicmV2aWF0aW9uXC1mb3JcKVwtaW5kb25lc2lhOwor6K6K5YO5IDwgYXBwcmFpc2VcLWF0XC10aGVcLWN1cnJlbnRcLXJhdGU7CivlubTlpJzpo68gPCBuZXdcLXllYXInJ3NcLWV2ZVwtZmFtaWx5XC1kaW5uZXI7CivlprnlpKsgPCBicm90aGVyXC1pblwtbGF3XC1cKHdpZmUnJ3NcLXNpZGVcKTsKK+mAsuiAjCA8IGFuZFwtdGhlblwtXCh3aGF0XC1mb2xsb3dzXC1uZXh0XCk7CivmnY7nmbvovJ0gPCBsZWVcLXRlbmdcLWh1aVwtXCh0YWl3YW5cLWxlYWRlclwpOwor6Zmj57eaIDwgYVwtZnJvbnRcLVwoaWVcLFwtbWlsaXRhbnRcLWdyb3VwXCk7CivlkbznsbLnvo7lnIsgPCB0b1wtY2FsbFwtb25cLXRoZVwtdW5pdGVkXC1zdGF0ZXM7CivlgrPntbHkuK3lnIvphqvol6UgPCBjaGluZXNlXC10cmFkaXRpb25hbFwtbWVkaWNpbmU7CivmrbLmnIggPCB0aGVcLXllYXJzXC1vZlwtYVwtcGVyc29uJydzXC1saWZlOwor6LGQ6KGj6Laz6aOfIDwgaGF2ZVwtYW1wbGVcLWZvb2RcLWFuZFwtY2xvdGhpbmc7CivkuI3nn6Xlpb3mrbkgPCBub3RcLWtub3dcLXdoYXQnJ3NcLWdvb2RcLWZvclwtb25lOwor5q245bGsIDwgYmVcLXVuZGVyXC10aGVcLWp1cmlzZGljdGlvblwtb2Y7CivlnKjph44gPCBiZVwtb3V0XC1vZlwtXChwb2xpdGljYWxcKVwtb2ZmaWNlOwor5bug5oi/IDwgYVwtYnVpbGRpbmdcLXVzZWRcLWFzXC1hXC1mYWN0b3J5Owor5Yik5rG6IDwganVkZ21lbnRcLVwoYnlcLWFcLWNvdXJ0XC1vZlwtbGF3XCk7Civlm7Dpm6MgPCBcKGZpbmFuY2lhbFwsXC1ldGNcLlwpXC1kaWZmaWN1bHR5Owor6bWtIDwgYVwtc21hbGxcLWJpcmRcLXdpdGhcLWJsYWNrXC1uZWNrOwor5aSn6Ieq54S2IDwgbmF0dXJlXC1cKGFzXC1pblwtbW90aGVyXC1uYXR1cmVcKTsKK+e2sueuoeaOpeWPoyA8IG5ldHdvcmtcLW1hbmFnZW1lbnRcLWludGVyZmFjZTsKK+makiA8IHRoZVwtYXBwZWFyYW5jZVwtb2ZcLWFcLW1vdW50YWluOwor5o6b6JmfIDwgdG9cLXJlZ2lzdGVyXC1cKGFcLWxldHRlclwsXC1ldGNcLlwpOwor6KOc6IuXIDwgZmlsbFwtdGhlXC1nYXBzXC13aXRoXC1zZWVkbGluZ3M7CivmoLnmk5rkuIrooaggPCBhY2NvcmRpbmdcLXRvXC10aGVcLWFib3ZlXC10YWJsZTsKK+atpuWKmyA8IFwobWFrZVwtdXNlXC1vZlwpXC1taWxpdGFyeVwtZm9yY2U7CivmlL7lgYcgPCB0b1wtaGF2ZVwtYVwtaG9saWR5XC1vclwtdmFjYXRpb247CivphoEgPCBhXC1raW5kXC1vZlwtZ3JlZW5cLWNvbG9yZWRcLXdpbmU7CivoiInph40gPCBcKHRoZVwtc3BvcnRcLW9mXClcLXdlaWdodGxpZnRpbmc7Civpgr8gPCBhXC1zdGF0ZVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+i9liA8IGZyYW1ld29ya1wtb2ZcLWxhdHRpY2VcLW9uXC1jYXJ0Owor5Zq06KmeIDwgXChjcml0aWNpemVcLFwtZXRjXC5cKVwtZm9yY2VmdWxseTsKK+intSA8IGFcLWN1cFwtbWFkZVwtb2ZcLWNvcm5cLW9ic3RpbmF0ZTsKK+iPr+ebm+mgk+aZguWgsSA8IHdhc2hpbmd0b25cLXRpbWVzXC1cKG5ld3NwYXBlclwpOwor5aKD5YWnIDwgd2l0aGluXC1cKGFcLWNvdW50cnknJ3NcKVwtYm9yZGVyczsKK+iPr+S6uiA8IGV0aG5pY1wtY2hpbmVzZVwtcGVyc29uXHxwZW9wbGU7CivmqYvmnKwgPCBcKGphcGFuZXNlXC1zdXJuYW1lXClcLWhhc2hpbW90bzsKK+WcsOeariA8IGxvdFwsXC1zZWN0aW9uXC1vZlwtbGFuZFwsXC1ncm91bmQ7Civnq4vmlrnnsbMgPCBjdWJpY1wtbWV0ZXJcLVwodW5pdFwtb2ZcLXZvbHVtZVwpOwor6L2J5qmfIDwgXCh0YWtlXC1hXClcLXR1cm5cLWZvclwtdGhlXC1iZXR0ZXI7Civlm7rlrpromZvmk6zpgKPmjqUgPCBwZXJtYW5lbnRcLXZpcnR1YWxcLWNvbm5lY3Rpb247CivluLjlp5QgPCBtZW1iZXJcLW9mXC1zdGFuZGluZ1wtY29tbWl0dGVlOwor5ZCD5LiN5raIIDwgYmVcLXVuYWJsZVwtdG9cLXN0YW5kXC1cKGV4ZXJ0aW9uOwor5oqV56Wo56uZIDwgcG9sbGluZ1wtc3RhdGlvblwtXChmb3JcLWFcLXZvdGVcKTsKK+iAhyA8IHdyaW5rbGVkXC1mYWNlXC1vZlwtdGhlXC1lbGRlcmx5Owor5760IDwgcmFua1wtb2RvdXJcLW9mXC1zaGVlcFwtb3JcLWdvYXRzOwor5b6X56Wo546HIDwgcGVyY2VudGFnZVwtb2ZcLXZvdGVzXC1vYnRhaW5lZDsKK+e1gyA8IHN0cmluZ1wtb25cLW11c2ljYWxcLWluc3RydW1lbnQ7CivlnIvpmLLliKnnm4ogPCBcKG5hdGlvbmFsXClcLWRlZmVuY2VcLWludGVyZXN0czsKK+mWi+aUvuezu+e1seS6kumAoyA8IG9wZW5cLXN5c3RlbXNcLWludGVyY29ubmVjdGlvbjsKK+etuyA8IHBsYWNlXC1uYW1lXC1pblwtaHVuYW5cLXByb3ZpbmNlOwor56uaIDwgc3RhbmRcLWFuZFwtd2FpdFwtZm9yXC1sb25nXC10aW1lOwor6LW36aObIDwgdG9cLXRha2VcLW9mZlwtXChpblwtYW5cLWFpcnBsYW5lXCk7CivplovluZUgPCB0b1wtb3BlblwtXChhXC1jb25mZXJlbmNlXCxcLWVcLmdcLlwpOwor5omT6YedIDwgdG9cLWdpdmVcLW9yXC1oYXZlXC1hblwtaW5qZWN0aW9uOwor552ZIDwgdG9cLXJvbGxcLXRoZVwtZXllYmFsbHNcLXRvXC1sb29rOwor55GCIDwgXChzdG9uZVwtd2hpY2hcLXJlc2VtYmxlc1wtamFkZVwpOwor5pys5pyr5YCS572uIDwgdGFrZVwtdGhlXC1icmFuY2hcLWZvclwtdGhlXC1yb290Owor54e6IDwgdGhlXC1kcnlcLWF0XC10aGVcLWZpcmVcLXRvXC1yb2FzdDsKK+eAlCA8IHJpdmVyXC1uYW1lXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor5oqx6aCt55eb5ZOtIDwgY3J5XC1vblwtZWFjaFwtb3RoZXInJ3NcLXNob3VsZGVyOwor5rGnIDwgbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtc2hhbmdkb25nOwor55Kn6KydIDwgZGVjbGluZVwtXChhXC1naWZ0XClcLXdpdGhcLXRoYW5rczsKK+aptSA8IHdvb2RcLXBsYWNlZFwtdW5kZXJcLXJvb2ZcLXRpbGVzOwor5bCN6I+vIDwgXChwb2xpY3lcLFwtZXRjXC5cKVwtdG93YXJkc1wtY2hpbmE7CivkuI3kuIDogIzotrMgPCBieVwtbm9cLW1lYW5zXC1hblwtaXNvbGF0ZWRcLWNhc2U7Civmm4ggPCB0d2lsaWdodFwtanVzdFwtYmVmb3JlXC1zdW5yaXNlOwor5pefIDwgYW5cLW1pbGl0YXJ5XC1mbGFnXC1vYVwtc3RhbmRhcmQ7CivlhIDlmaggPCBcKHNjaWVudGlmaWNcLFwtZXRjXClcLWluc3RydW1lbnQ7Civljp/lrZDnp5HlrbjlrrbpgJrloLEgPCBqb3VybmFsXC1vZlwtYXRvbWljXC1zY2llbnRpc3RzOwor56m26L6mIDwgdG9cLWludmVzdGlnYXRlXC1hbmRcLWRlYWxcLXdpdGg7CivlkIPkuI3kvY8gPCBiZVwtdW5hYmxlXC10b1wtYmVhclwtb3JcLXN1cHBvcnQ7CivmiaggPCBwaWNrXC11cFwtd2l0aFwtZm9ya1wtb3JcLXBpbmNlcnM7CivlubAgPCBjdXJ0YWluXC1hdFwtZnJvbnRcLW9mXC1jYXJyaWFnZTsKK+WogCA8IG5hbWVcLW9mXC1hXC1jb25jdWJpbmVcLW9mXC1kaVwta3U7Civnmb3ntJnpu5HlrZcgPCBcKHdyaXR0ZW5cKVwtaW5cLWJsYWNrXC1hbmRcLXdoaXRlOwor5Z+EIDwgd2hpcmxpbmdcLW9mXC1kdXN0XC1pblwtdGhlXC13aW5kOwor5a6a572qIDwgY29udmljdFwtXChzb21lb25lXC1vZlwtYVwtY3JpbWVcKTsKK+acrOmhjCA8IHRoZVwtc3ViamVjdFwtdW5kZXJcLWRpc2N1c3Npb247Civog4znsI0gPCBhXC1iYXNrZXRcLWNhcnJpZWRcLW9uXC10aGVcLWJhY2s7CivljJfkuqzol53ooZPlrbjpmaIgPCBiZWlqaW5nXC1hY2FkZW15XC1vZlwtZmluZVwtYXJ0czsKK+S4jeeijueOu+eSgyA8IHNoYXR0ZXJwcm9vZlwtb3JcLXNhZmV0eVwtZ2xhc3M7CivmnInpl5wgPCB0b1wtaGF2ZVwtc29tZXRoaW5nXC10b1wtZG9cLXdpdGg7CivkvobmupAgPCBzb3VyY2VcLVwob2ZcLWluZm9ybWF0aW9uXCxcLWV0Y1wpOwor5LWgIDwgcnVzaGVzXC11c2VkXC1mb3JtXC1tYWtpbmdcLW1hdHM7Civks40gPCBhXC1raW5kXC1vZlwtcGhlYXNhbnRcLWxpa2VcLWJpcmQ7CivnjbLph4sgPCBvYnRhaW5cLXJlbGVhc2VcLVwoZnJvbVwtcHJpc29uXCk7CivksbEgPCBhXC1raW5kXC1vZlwtc2xpcHBlcnlcLWxvbmdcLWZpc2g7CivkrocgPCBibGFja1wtaG9yc2VcLXdpdGhcLXdoaXRlXC10aGlnaDsKK+WwjeaXpSA8IFwocG9saWN5XCxcLWV0Y1wuXClcLXRvd2FyZHNcLWphcGFuOwor5KygIDwgdGhlXC1mYWxsaW5nXC1vZlwtc25vd1wtYW5kXC1yYWluOwor5KqtIDwgYVwta2luZFwtb2ZcLW11c2ljYWxcLWluc3RydW1lbnQ7CivkqokgPCBtZXRhbFwtZGVjb3JhdGlvblwtb25cLWFcLWhhbHRlcjsKK+SpoSA8IGFcLWtpbmRcLW9mXC1ib290c1wtaW5cLW9sZFwtdGltZXM7CivojqvoobfkuIDmmK8gPCBjYW5ub3RcLWRlY2lkZVwtd2hpY2hcLWlzXC1yaWdodDsKK+SmnCA8IG5hbWVcLW9mXC1hXC1zdGF0ZVwtaW5cLW9sZFwtdGltZXM7CivkpbogPCBuYW1lXC1vZlwtYVwtZG91YmxlXC1lZGdlZFwtc3dvcmQ7CivkpZUgPCB0aGVcLWJsYWRlXC1vclwtZWRnZVwtb2ZcLWFcLXNwYWRlOwor5KSJIDwgZW1wdGllZFwtdGhlXC1kcmlua1wtY29tcGxldGVseTsKK+SjoSA8IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLW9sZFwtdGltZXM7CivkoZEgPCB0aGVcLXJpbVwtb3JcLWZlbGxvZVwtb2ZcLWFcLXdoZWVsOwor5KC0IDwgd2l0aFwtYVwtc3ltbWV0cmljXC13ZWxsXC1mb3JtZWQ7CivknbUgPCB0b1wtdGhhbmtcLXdpdGhcLW1vbmV5XC1vclwtZ2lmdHM7CivkmZcgPCBhXC1zd2FkZGxpbmdcLWNsb3RoXC1mb3JcLWluZmFudDsKK+SYuyA8IGN1cnRhaW5cLW9uXC1hXC1jYXJyaWFnZVwtb3JcLWNhcjsKK+SYuiA8IGFcLXNlYW1cLXdoaWNoXC1oYXNcLWNvbWVcLXVuc2V3bjsKK+SYtSA8IGhpc3NpbmdcLXNvdW5kXC1vZlwtdGhlXC1jbG90aGVzOwor5JSbIDwgZmlicm91c1wtcGxhbnRcLW9mXC13aGljaFwtY2xvdGg7CivkkbkgPCBhXC1udW1lcmFyeVwtYWRqdW5jdFwtZm9yXC1zaGlwczsKK+SNoCA8IHR1cmJhblwtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor5IyLIDwgYVwtaGVyY2hpZWZcLWh1bmdcLWF0XC10aGVcLXdhaXN0Owor5IupIDwgcHJldHR5XC1hbmRcLWZpbmVcLXNpbGtcLWZhYnJpY3M7Civki48gPCB0aGlja1wtYW5kXC1iaWdcLXJvcGVzXC1vclwtY29yZHM7Civki4sgPCBhXC1raW5kXC1vZlwtc3ByaW5nXC1maXNoaW5nXC1uZXQ7CivlhavlnIvoga/ou40gPCB0aGVcLWVpZ2h0XC1wb3dlclwtYWxsaWVkXC1mb3JjZTsKK+SGtiA8IG5vaXNlXC1vZlwtYVwtbW91c2VcLWluXC10aGVcLWNhdmU7CivkhbMgPCBzdGFsa1wtb2ZcLXRoZVwtcGFuaWNsZWRcLW1pbGxldDsKK+SFrSA8IGFcLXZhcmlldHlcLW9mXC1wYW5pY2xlZFwtbWlsbGV0Owor5IWMIDwgc3RhbGtcLW9mXC13aGVhdFwtb3JcLXJpY2VcLXBsYW50Owor5IOLIDwgYVwtZmluZVwtc3RvbmVcLXJlc2VtYmxpbmdcLWphZGU7CivkgrUgPCBzb3VuZFwtb2ZcLWJ1bXBpbmdcLW9yXC1zdHJpa2luZzsKK+SCqyA8IG5vaXNlXC1vZlwtc3RvbmVzXC1yb2xsaW5nXC1kb3duOwor5ICzIDwgbm90XC10b1wtbG9va1wtc3RyYWlnaHRcLWZvcndhcmQ7CivjvrQgPCB0aGVcLWVyeXRoZW1hXC1vZlwtYWNuZVwtcm9zYWNlYTsKK+WkmuW5tOS7peS+hiA8IGZvclwtbWFueVwteWVhcnNcLVwoaW5cLXRoZVwtcGFzdFwpOwor47mlIDwgYVwteWVsbG93XC1kb2dcLXdpdGhcLWJsYWNrXC1oZWFkOwor47mBIDwgZ2VuZXJhbGx5XC1jYWxsZWRcLXRoZVwtYW5pbWFsczsKK+O1tSA8IHN3aWZ0XC1jdXJyZW50c1wtb2ZcLXRoZVwtc3RyZWFtOwor47WOIDwgYVwtbW91bnRhaW5cLXN0cmVhbVwtb3JcLXRvcnJlbnQ7CivjtJogPCB0aGVcLXNtYWxsXC1kaXRjaFwtaW5cLXRoZVwtZmllbGQ7Civnn6XorZjnlKLmrIogPCBpbnRlbGxlY3R1YWxcLXByb3BlcnR5XC1yaWdodHM7CivmhovmsKMgPCBmZWVsXC1zdWZmb2NhdGVkXC1vclwtb3BwcmVzc2VkOwor47CGIDwgYW5cLWluc3RydW1lbnRcLXRvXC1ibG93XC1hXC1maXJlOwor47CBIDwgYVwtdHJlZVwtd2l0aFwtc2xhbnRlZFwtYnJhbmNoZXM7Civjr7MgPCBhXC1raW5kXC1vZlwtdG9vbFwtdG9cLWFkanVzdFwtYm93Owor46WcIDwgdW5zdWNjZXNzZnVsXC1pblwtb25lJydzXC1jYXJlZXI7CivjobEgPCB0b1wtY2F1dGVyaXplXC1ieVwtYnVybmluZ1wtbW94YTsKK+OgsSA8IHRvXC1zZXRcLXdpdGhcLXRoZVwtbGVnc1wtY2xvc3NlZDsKK+OcjCA8IGFcLWRpZmZlcmVudFwtbmFtZVwtZm9yXC1icmVhc3RzOwor45m+IDwgaGlsbHNcLXdpdGhcLWxvdHNcLW9mXC1iaWdcLXJvY2tzOwor45mbIDwgYVwtcGVyc29uJydzXC1uYW1lXC1pblwtb2xkXC10aW1lczsKK+OXviA8IHRvXC1naXZlXC12ZW50XC10b1wtdGhlXC1mZWVsaW5nczsKK+OXhiA8IHNvdW5kXC1vZlwtdGhlXC1yaW5nZWRcLXBoZWFzYW50Owor45OzIDwgdXNlXC1rbmlmZVwtdG9cLXNwbGl0XC1zb21ldGhpbmc7CivjkZ8gPCBpbnNpbmNlcmVcLWFuZFwtY3VubmluZ1wtcGVyc29uOwor6Ieq5rK75Y2AIDwgYXV0b25vbW91c1wtcmVnaW9uXC1cKGluXC1jaGluYVwpOwor5ZCM6IOeIDwgZmVsbG93XC1jaXRpemVuXC1vclwtY291bnRyeW1hbjsKK+WMvumhjSA8IGFcLWhvcml6b250YWxcLWluc2NyaWJlZFwtYm9hcmQ7Civlu6Pmkq3lkozmnKrnn6XmnI3li5nlmaggPCBicm9hZGNhc3RcLWFuZFwtdW5rbm93blwtc2VydmVyOwor56K66Ki6IDwgdG9cLW1ha2VcLWFcLWRlZmluaXRlXC1kaWFnbm9zaXM7CivlvLXntJTlpoIgPCBcKGFtZXJpY2FuXC1hdXRob3JcKVwtaXJpc1wtY2hhbmc7CivlroPlgJEgPCB0aGV5XC1cKGZvclwtaW5hbmltYXRlXC1vYmplY3RzXCk7Civnj77loLQgPCBzY2VuZVwtXChvZlwtZXZlbnRcLW9yXC1pbmNpZGVudFwpOwor5oSb5oOFIDwgbG92ZVwtXChiZXR3ZWVuXC1tYW5cLWFuZFwtd29tYW5cKTsKK+iuiuevgCA8IG1ha2VcLWFcLXBvbGl0aWNhbFwtcmVjYW50YXRpb247CivoqpPmrbvkuI3pmY0gPCB0b1wtdm93XC10b1wtZmlnaHRcLXRvXC10aGVcLWRlYXRoOwor5rKS5pyJ5b+F6KaBIDwgdGhlcmVcLWlzXC1ub1wtbmVlZFwtdG9cLVwoZG9cLXN0aFwpOwor5raJ5auMIDwgdG9cLWJlXC1hXC1zdXNwZWN0XC1cKGluXC1hXC1jcmltZVwpOwor54+t5YuZ5pyDIDwgYVwtcm91dGluZVwtbWVldGluZ1wtb2ZcLWFcLXNxdWFkOwor5paw5b636KOhIDwgbmV3XC1kZWxoaVwtXChjYXBpdGFsXC1vZlwtaW5kaWFcKTsKK+WPjeWwjem7qCA8IG9wcG9zaXRpb25cLVwocG9saXRpY2FsXClcLXBhcnR5Owor5aSx6LazIDwgdG9cLXRha2VcLWFcLXdyb25nXC1zdGVwXC1pblwtbGlmZTsKK+S4reaWh+W7o+aSrSA8IGNoaW5lc2VcLVwobGFuZ3VhZ2VcKVwtYnJvYWRjYXN0Owor56e75q6W5omL6KGTIDwgXChvcmdhblwpXC10cmFuc3BsYW50XC1vcGVyYXRpb247CivniqfnibIgPCBzYWNyaWZpY2VcLVwob25lJydzXC1saWZlXCxcLWV0Y1wuXCk7Civkup7kvK8gPCBhYmVcLVwoc2hvcnRcLWZvcm1cLWZvclwtYWJyYWhhbVwpOwor54yc5b+MIDwgYmVcLXN1c3BpY2lvdXNcLWFuZFwtamVhbG91c1wtb2Y7Civpu6jlhacgPCB3aXRoaW5cLXRoZVwtXChjb21tdW5pc3RcKVwtcGFydHk7CivoqqrmmI7mm7ggPCBzeW5vcHNpc1wtXChvZlwtYVwtcGxheVwtb3JcLWZpbG1cKTsKK+WLleiVqSA8IFwoc29jaWFsXC1vclwtcG9saXRpY2FsXClcLXVucmVzdDsKK+eOi+S4uSA8IHdhbmdcLWRhblwtXChjaGluZXNlXC1kaXNzaWRlbnRcKTsKK+WPm+S6gue9qiA8IHRoZVwtY3JpbWVcLW9mXC1hcm1lZFwtcmViZWxsaW9uOwor5rWq5a2Q5Zue6aCtIDwgdGhlXC1yZXR1cm5cLW9mXC1hXC1wcm9kaWdhbFwtc29uOwor5beu5b6X5aSaIDwgZmFsbFwtc2hvcnRcLWJ5XC1hXC1sYXJnZVwtYW1vdW50Owor5LiN5oCl5LmL5YuZIDwgYVwtbWF0dGVyXC1vZlwtbm9cLWdyZWF0XC11cmdlbmN5Owor6Zu756OB5bmy5pO+IDwgZWxlY3Ryb21hZ25ldGljXC1pbnRlcmZlcmVuY2U7Civlj7DngaPoqbEgPCB0YWl3YW5lc2VcLWNoaW5lc2VcLVwobGFuZ3VhZ2VcKTsKK+WVpiA8IGZpbmFsXC1wYXJ0aWNsZVwtb2ZcLWFzc2VydGlvbjsKK+e7vCA8IGFycmFuZ2VcLXRocmVhZHNcLWZvclwtd2VhdmluZzsKK+aLrSA8IHdpcGVcLWF3YXlcLXN0YWluc1wtd2l0aFwtY2xvdGg7Civlj64gPCBleGhvcnRcLW9yXC1lbmpvaW5cLXJlcGVhdGVkbHk7CivmiJ8gPCBoYWxiZXJkXC13aXRoXC1jcmVzY2VudFwtYmxhZGU7Civlh5sgPCB0b1wtc2hpdmVyXC13aXRoXC1jb2xkXC1vclwtZmVhcjsKK+agiyA8IG1haW5cLWJlYW1zXC1zdXBwb3J0aW5nXC1ob3VzZTsKK+mrpiA8IGZsb3dpbmdcLWhhaXJcLW9mXC15b3VuZ1wtY2hpbGQ7CivnrZ0gPCBzdHJpbmdlZFwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+S4mSA8IHRoaXJkXC1vZlwtdGhlXC1oZWF2ZW5seVwtc3RlbXM7CivmsoIgPCByaXZlclwtaW5cLXNvdXRoZWFzdFwtc2hhbmRvbmc7CivnrIggPCBiYW1ib29cLWJveFwtdXNlZFwtY2FycnlcLWJvb2tzOwor55OiIDwgbGFkbGVcLW1hZGVcLWZyb21cLWRyaWVkXC1nb3VyZDsKK+ewpyA8IHJlZWRcLW9mXC13b29kd2luZFwtaW5zdHJ1bWVudDsKK+ibnyA8IHNjYWx5XC1kcmFnb25cLXdpdGhcLWZvdXJcLWxlZ3M7CivmlZUgPCBhblwtaW1wZXJpYWxcLW9yZGVyXC1vclwtZGVjcmVlOwor6KOfIDwgYVwtY2Fzc29ja1wtb3JcLXJvYmVcLW9mXC1hXC1tb25rOwor56K0IDwgY2hpcHBlZFwtZWRnZVwtb2ZcLWFcLWNvbnRhaW5lcjsKK+eYtCA8IG1hbGFyaWFcLXBlc3RpbGVudGlhbFwtdmFwb3JzOwor57q2IDwgZ3JlZW5cLXNpbGtcLXRocmVhZFwtb3JcLXRhc3NlbDsKK+e9oSA8IHRoZVwtbmFtZVwtb2ZcLWFcLWNlcnRhaW5cLXN0YXJzOwor55m4IDwgbGFzdFwtb2ZcLXRlblwtY2VsZXN0aWFsXC1zdGVtczsKK+aphyA8IGFcLXNsZWRnZVwtZm9yXC10cmFuc3BvcnRhdGlvbjsKK+eaiyA8IHRoZVwtaGlnaFwtbGFuZFwtYWxvbmdcLWFcLXJpdmVyOwor5r2NIDwgY291bnR5XC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor5rSZIDwgbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtc2hhbmRvbmc7CivnjaAgPCB0b1wtaHVudFwtYXRcLW5pZ2h0XC1ieVwtdG9yY2hlczsKK+m6kiA8IGxlZ2VuZGFyeVwtYXVzcGljaW91c1wtYW5pbWFsOwor54+pIDwgdGhlXC10b3BcLWdlbVwtb2ZcLXRoZVwtcGVuZGFudHM7CivosKUgPCB0b1wtY29uZmVyXC1wb3N0aHVtb3VzXC10aXRsZXM7Civnp6sgPCBnbHV0aW5vdXNcLXZhcmlldHlcLW9mXC1taWxsZXQ7Civnq70gPCBhbmNpZW50XC13b29kd2luZFwtaW5zdHJ1bWVudDsKK+W0riA8IFwoZWxlbWVudFwtaW5cLW1vdW50YWluXC1uYW1lc1wpOwor5oSAIDwgdG9cLWNoYW5nZVwtb25lJydzXC1jb3VudGVuYW5jZTsKK+mEoiA8IG5hbWVcLW9mXC1hXC1kaXN0cmljdFwtaW5cLWhvbmFuOwor55mNIDwgdW5oZWFsdGh5XC1tYXJrc1wtb25cLXRoZVwtc2tpbjsKK+mEniA8IGNvdW50eVwtaW5cLXpoZWppYW5nXC1wcm92aW5jZTsKK+mbkiA8IGJsYWNrXC1ob3JzZVwtd2l0aFwtd2hpdGVcLW1hbmU7Civml5IgPCBmcmluZ2VzXC1vZlwtcGVhcmxzXC1vblwtY3Jvd25zOwor55CKIDwgYVwtcGxhY2VcLWluXC1lYXN0ZXJuXC1zaGFuZG9uZzsKK+iaqCA8IGFcLWtpbmRcLW9mXC13YXRlclwtYmVldGxlXC1jYXNoOwor5q+zIDwgZmluZVwtaGFpclwtb3JcLWZ1clwtb25cLWFuaW1hbHM7CivnmKUgPCB0b1wtcmVjb3ZlclwtZnJvbVwtYW55XC1kaXNlYXNlOwor5rWIIDwgcml2ZXJcLWluXC1ndWFuZ2RvbmdcLXByb3ZpbmNlOwor5ZinIDwgXChwaG9uZXRpY1wpXC1hc1wtaW5cLXB5cmltaWRpbmU7CivkuI3mmJPkuYvoq5YgPCBwZXJmZWN0bHlcLXNvdW5kXC1wcm9wb3NpdGlvbjsKK+S8vOS5juW+iOWuieWFqCA8IHRvXC1hcHBlYXJcLVwodG9cLWJlXClcLXZlcnlcLXNhZmU7CivmsbrlrpogPCB0b1wtZGVjaWRlXC1cKHRvXC1kb1wtc29tZXRoaW5nXCk7Civlp4rlprkgPCBcKG9sZGVyXC1hbmRcLXlvdW5nZXJcKVwtc2lzdGVyczsKK+mAvOiCliA8IGJlYXJcLWFcLWNsb3NlXC1yZXNlbWJsYW5jZVwtdG87CivokYnliKnmrL0gPCBcKHJ1c3NpYW5cLXByZXNpZGVudFwpXC15ZWx0c2luOwor5b6p5a+pIDwgcmVleGFtaW5lXC1cKGFcLWp1ZGljaWFsXC1jYXNlXCk7CivlhaXploAgPCBpbnRyb2R1Y3Rpb25cLVwodG9cLWFcLXN1YmplY3RcKTsKK+eZvemcsiA8IHdoaXRlXC1kZXdcLVwoMTV0aFwtc29sYXJcLXRlcm1cKTsKK+WQhOeoruWQhOaooyA8IHZhcmlvdXNcLXNvcnRzXC1hbmRcLXZhcmlldGllczsKK+ijnOmrlCA8IGNvbXBsZW1lbnRcLVwoaW5cLWJsb29kXC1zZXJ1bVwpOwor6KmV5q+UIDwgdG9cLWV2YWx1YXRlXC1cKGJ5XC1jb21wYXJpc29uXCk7CivkuI3pgZXovrLmmYIgPCBub3RcLW1pc3NcLXRoZVwtZmFybWluZ1wtc2Vhc29uOwor6buD5rWm5rGfIDwgaHVhbmdwdVwtcml2ZXJcLVwoaW5cLXNoYW5naGFpXCk7CivovYnouqsgPCBcKG9mXC1hXC1wZXJzb25cKVwtdG9cLXR1cm5cLXJvdW5kOwor54iq5ZOHIDwgamF2YVwtXChwcm9ncmFtbWluZ1wtbGFuZ3VhZ2VcKTsKK+aViOW/oCA8IHZvd1wtbG95YWx0eVwtYW5kXC1kZXZvdGlvblwtdG87CivkuoLkvZzmsbrlrpogPCB0b1wtbWFrZVwtYXJiaXRyYXJ5XC1kZWNpc2lvbnM7CivmjqHovqYgPCBidXlcLW9uXC1hXC1jb25zaWRlcmFibGVcLXNjYWxlOwor5byf5aa5IDwgc2lzdGVyXC1pblwtbGF3XC1cKHdpZmUnJ3NcLXNpZGVcKTsKK+mZt+aWvCA8IGNhdWdodFwtaW5cLVwoYVwtYmFkXC1zaXR1YXRpb25cKTsKK+m1viA8IGFcLWJpcmRcLXJlc2VtYmxpbmdcLXRoZVwtY3JhbmU7CivlpJbljK8gPCBmb3JlaWduXC1cKGN1cnJlbmN5XClcLWV4Y2hhbmdlOwor5aSn5Zmo5pma5oiQIDwgZ3JhbmRcLXRhbGVudHNcLW1hdHVyZVwtc2xvd2x5Owor5pGY55SxIDwgaGlnaFwtcG9pbnRzXC1cKG9mXC1hXC1kb2N1bWVudFwpOwor6a6oIDwgZXBpbmVwaGVsdXNcLXNlcHRlbWZhc2NpYXR1czsKK+mjpiA8IHdlbGxcLWJvaWxlZFwtY29uZ2VlXC1vclwtZ3J1ZWw7Civpm4ogPCB0aGVcLWNyb3dcLW9mXC1hXC1tYWxlXC1waGVhc2FudDsKK+mauiA8IGFcLWJpcmRcLWZseWluZ1wtaGlnaFwtYW1iaXRpb247Civog4zljIXoorEgPCBoYXZlXC1hXC13ZWlnaHRcLW9uXC1vbmUnJ3NcLW1pbmQ7CivmjInmraXlsLHnj60gPCBmb2xsb3dcLXRoZVwtcHJlc2NyaWJlZFwtb3JkZXI7CivlpJbkuqTpg6jplbcgPCBtaW5pc3Rlclwtb2ZcLWZvcmVpZ25cLWFmZmFpcnM7CivphrEgPCB0b1wtYnJld1wtZm9yXC10aGVcLXNlY29uZFwtdGltZTsKK+mFliA8IHdpbmVcLXdpdGhcLWJpcmRcLXBvaXNvblwtYWRkZWQ7Civnmb7lsLrmnYbpoK3mm7Tnm6HkuIDmraUgPCBtYWtlXC1zdGlsbFwtZnVydGhlclwtcHJvZ3Jlc3M7CivphL8gPCBjb3VudHlcLWluXC14aW5qaWFuZ1wtcHJvdmluY2U7CivphI0gPCBhXC10b3duXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor6LmaIDwgdHJlYWRcLXRocm91Z2hcLW11ZFwtYW5kXC13YXRlcjsKK+S4reWkruaDheWgseWxgCA8IGNlbnRyYWxcLWludGVsbGlnZW5jZVwtYWdlbmN5Owor5YG06Lq6IDwgdG9cLWxpZVwtZG93blwtXChvblwtb25lJydzXC1zaWRlXCk7CivloLHmiLblj6MgPCBhcHBseVwtZm9yXC1hXC1yZXNpZGVudFwtcGVybWl0Owor6KSYIDwgY2VyZW1vbmlhbFwtZ293bnNcLW9mXC1hXC1xdWVlbjsKK+ifsCA8IHNtYWxsXC1zcGlkZXJcLXdpdGhcLWxvbmdcLWxlZ3M7Civom5UgPCB0aGVcLWNvbW1vblwtaW50ZXN0aW5hbFwtd29ybXM7CivmnI3li5nmj5DkvpvllYYgPCBcKGludGVybmV0XClcLXNlcnZpY2VcLXByb3ZpZGVyOwor5pCc5o2VIDwgaHVudFwtYW5kXC1hcnJlc3RcLVwoZnVnaXRpdmVzXCk7Civmj7nmm7ggPCByZWNpdGVcLWFcLWxlc3NvblwtZnJvbVwtbWVtb3J5Owor5bm45YWNIDwgbmFycm93bHlcLWFuZFwtbHVja2lseVwtZXNjYXBlOwor5LiN55m75aSn6ZuF5LmL5aCCIDwgbm90XC1hcHBlYWxcLXRvXC1yZWZpbmVkXC10YXN0ZTsKK+iCtyA8IGFyZWFcLWJldHdlZW5cLXdhaXN0XC1hbmRcLWhpcHM7CivoiInkuJbnn5rnm64gPCBhdHRyYWN0XC13b3JsZHdpZGVcLWF0dGVudGlvbjsKK+eNqOaWt+WwiOihjCA8IGFjdFwtaW5cLWFuXC1hcmJpdHJhcnlcLWZhc2hpb247CivnsYQgPCBhXC1iYXNrZXRcLWZvclwtY2FycnlpbmdcLWVhcnRoOwor5ZyL6Zqb57SaIDwgXChhdFwtYW5cKVwtaW50ZXJuYXRpb25hbFwtbGV2ZWw7CivnrY4gPCB0aGluXC1vdXRzaWRlXC1za2luXC1vZlwtYmFtYm9vOwor556kIDwgdG9cLWJsaW5rXC1vclwtdHdpdGNoXC10aGVcLWV5ZXM7CivnrqHnkIbkv6Hmga/luqsgPCBtYW5hZ2VtZW50XC1pbmZvcm1hdGlvblwtYmFzZTsKK+iPr+ebm+mgk+mDteWgsSA8IHdhc2hpbmd0b25cLXBvc3RcLVwobmV3c3BhcGVyXCk7CivlnIvmqJkgPCBndW9iaWFvXC1cKGVuY29kaW5nXC1zdGFuZGFyZFwpOwor5L6/6KGAIDwgaGF2aW5nXC1ibG9vZFwtaW5cLW9uZScnc1wtc3Rvb2w7Civmt6AgPCBsdXh1cmlhbnRcLVwob2ZcLXdhdGVyXC1wbGFudHNcKTsKK+a1sCA8IGF0dGVuZFwtXChvZmZpY2lhbFwtZnVuY3Rpb25zXCk7Civnl4XmqZ8gPCBpbnRlcnByZXRhdGlvblwtb2ZcLXRoZVwtY2F1c2U7Civms5EgPCB0aGVcLXZpdHJlb3VzXC1nbGF6ZVwtb25cLWNoaW5hOwor5q6oIDwgdG9cLW9wZW5cLWFzXC1hblwtdWxjZXJcLW9yXC1zb3JlOwor5omN6I+vIDwgbGl0ZXJhcnlcLW9yXC1hcnRpc3RpY1wtdGFsZW50Owor5oyH5rOVIDwgZmluZ2VyXC1tZXRob2RcLVwoaW5cLXBhaW50aW5nXCk7Civlr7bol48gPCBwcmVjaW91c1wtXChtaW5lcmFsXClcLWRlcG9zaXRzOwor5o+Q5YmNIDwgdG9cLXNoaWZ0XC10b1wtYW5cLWVhcmxpZXJcLWRhdGU7CivovKnlh7ogPCBjb21lXC1mb3J0aFwtaW5cLWxhcmdlXC1udW1iZXJzOwor5p6PIDwgYVwtdmFyaWV0eVwtb2ZcLWV2ZXJncmVlblwtdHJlZTsKK+adv+m0qCA8IHByZXNzZWRcLVwoZHJpZWRcKVwtc2FsdGVkXC1kdWNrOwor5ouU5rW3IDwgZWxldmF0aW9uXC1cKGFib3ZlXC1zZWFcLWxldmVsXCk7CivpoZjmhI/kuI3poZjmhI8gPCB3aGV0aGVyXC1vbmVcLXdhbnRzXC10b1wtb3JcLW5vdDsKK+WQg+S4jeS+hiA8IG5vdFwtYmVcLWZvbmRcLW9mXC1jZXJ0YWluXC1mb29kOwor5pCHIDwgdG9cLXByZXNzXC1kb3duXC13aXRoXC10aGVcLWhhbmQ7Civmk5rloLHlsI4gPCBhY2NvcmRpbmdcLXRvXC1cKG5ld3NcKVwtcmVwb3J0czsKK+i2heaWh+S7tuWCs+i8uOWNlOWumiA8IGh5cGVydGV4dFwtdHJhbnNmZXJcLXByb3RvY29sOwor5by4IDwgYVwtYm93XC1zdHJldGNoZWRcLXRvXC10aGVcLWZ1bGw7Civlt6AgPCBzdHJlYW1zXC1ydW5uaW5nXC11bmRlcmdyb3VuZDsKK+W0mSA8IGt1bmx1blwtbW91bnRhaW5zXC1pblwtamlhbmdzdTsKK+WAq+aVpiA8IGxvbmRvblwtXChjYXBpdGFsXC1vZlwtZW5nbGFuZFwpOwor5aCzIDwgbGFuZFwtYWxsb3RtZW50XC1mZXVkYWxcLW5vYmxlOwor5YyX5Lqs6Kqe6KiA5a246ZmiIDwgYmVpamluZ1wtbGFuZ3VhZ2VzXC1pbnN0aXR1dGU7CivlmZUgPCB0b1wtc3BlYWtcLWZhbHNlbHlcLW9yXC13cm9uZ2x5Owor5qKd5qy+IDwgY2xhdXNlXC1cKG9mXC1jb250cmFjdFwtb3JcLWxhd1wpOwor55eF5L6LIDwgXFttZWRpY2FsXF1cLWNhc2VcLVxbb2ZcLWlsbG5lc3NcXTsKK+WZqOWumCA8IG9yZ2FuXC1cKHBhcnRcLW9mXC1ib2R5XC10aXNzdWVcKTsKK+S4qSA8IHRvXC1qb2luXC1vclwtY29ubmVjdFwtdGhlXC12aW5lOwor5LiSIDwgdGhlXC1wZXJpb2RcLWZyb21cLTFcLXRvXC0zXC1hXC5tXC47CivktYUgPCB0b1wtZXh0cmFjdFwtYnlcLWFwcGx5aW5nXC1oZWF0Owor5LSzIDwgZGlzdGlsbGVyJydzXC1ncmFpbnNcLW9yXC15ZWFzdDsKK+SzniA8IGJpcmRzXC1mbHlpbmdcLWFsbFwtZGlyZWN0aW9uczsKK+SziiA8IGFcLXdpbGRcLWR1Y2tcLWxpa2VcLXdhdGVyXC1iaXJkOwor5LODIDwgYVwta2luZFwtb2ZcLXBob2VuaXhcLWxpa2VcLWJpcmQ7CivkqrcgPCB0b1wtdG9pbFwtb3JcLWxhYm9yXC1zZWR1bG91c2x5Owor5KqHIDwgY3VzaGlvbmVkXC1zZWF0XC1vblwtYVwtdmVoaWNsZTsKK+SpvyA8IGFcLWJpZ1wtZHJ1bVwtdXNlZFwtaW5cLXRoZVwtYXJteTsKK+SnmCA8IGFcLWxvd1wtd2FsbFwtb25cLXRoZVwtcm9hZFwtc2lkZTsKK+SmsiA8IGVhdmVzXC1vZlwtYVwtYW5jZXN0cmFsXC10ZW1wbGU7CivkpLsgPCBoZWF2eVwtaXJvblwtcGFydFwtb2ZcLWFcLXBsb3VnaDsKK+SjsiA8IHRvXC1oZWF0XC10aGVcLXdpbmVcLW92ZXJcLW5pZ2h0Owor5KKvIDwgdG9cLWNob29zZVwtb3JcLXNlbGVjdFwtY2FyZWZ1bDsKK+SgiyA8IGJlbGxcLXNoYXBlZFwtd2l0aFwtbGFyZ2VcLWJhc2U7Civkn64gPCB0b1wtY3Jhd2xcLW9uXC1oYW5kc1wtYW5kXC1rbmVlczsKK+ScuCA8IHNtYWxsXC1waWVjZXNcLW9mXC1iZWFuXC1zdGFsa3M7CivknIcgPCB0b1wtc3BlYWtcLW5vdFwtaW5cLWFcLWNsZWFyXC13YXk7Civnj63ntJogPCBjbGFzc2VzXC1vclwtZ3JhZGVzXC1pblwtc2Nob29sOwor5JqjIDwgY3Jvb2tlZFwtaG9ybnNcLW9mXC10aGVcLWFuaW1hbDsKK+SanCA8IGNhdHRsZVwtd2l0aFwtY3Jvc3N3aXNlXC1ob3JuczsKK+SZoyA8IHJhZ2dlZFwtZ2FybWVudHNcLW9yXC1jbG90aGluZzsKK+SZlSA8IGNsb3RoZXNcLXRoYXRcLWhhdmVcLW5vXC1saW5pbmc7CivkmZQgPCBjbG90aGVzXC1tYWRlXC1vZlwtcG9vclwtZmFicmljOwor5JmTIDwgdGhlXC1sb3dlclwtcGFydFwtb2ZcLWFcLWdhcm1lbnQ7CivkmKUgPCB0aGVcLWZyb250XC1vZlwtYVwtY2hpbmVzZVwtZ293bjsKK+SYgSA8IGFcLWJsdWVcLWdyZWVuXC1jb2xvcmVkXC1jaWNhZGE7Civkl7UgPCBhXC1kaXNlYXNlXC1hdHRhY2tlZFwtc2lsa3dvcm07Civkla4gPCBmbG93ZXJcLW9mXC10aGVcLWNocnlzYW50aGVtdW07CivklKUgPCBjb21tb25cLXZhcmlldHlcLW9mXC1hcnRlbWlzaWE7CivklJ8gPCBzaGFrZVwtYW5kXC13YXZlXC1vZlwtdGhlXC1ncmFzczsKK+eXheavkuWtuCA8IHZpcm9sb2d5XC1cKHN0dWR5XC1vZlwtdmlydXNlc1wpOwor5JC8IDwgdGhpblwtbWVtYnJhbmVcLW9mXC10aGVcLXRocm9hdDsKK+SQryA8IHVnbHlcLWFwcGVhcmFuY2VcLW9mXC1hXC1wZXJzb247CivkkJEgPCB0aGluXC1jdXRcLW9mXC10aGVcLXNsaWNlZFwtbWVhdDsKK+SNuiA8IGFcLWxlZ2VuZGFyeVwtZ29hdFwtbGlrZVwtYmVhc3Q7CivkjLwgPCBhXC1raW5kXC1vZlwtZmluZVwtc2lsa1wtZmFicmljczsKK+SMhCA8IGFcLXJvcGVcLWZvclwtZHJhd2luZ1wtdXBcLXdhdGVyOwor56eB5Lq66ZGw5YyZIDwgcHJpdmF0ZVwta2V5XC1cKGluXC1lbmNyeXB0aW9uXCk7Civkip4gPCB0b1wtcm9sbFwtcm91bmRcLXdpdGhcLXRoZVwtaGFuZDsKK+SJuiA8IGRldGVyaW9yYXRlZFwtYW5kXC1iZWNvbWVcLXJlZDsKK+SJuSA8IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5Im4IDwgc2xpcHNcLW9mXC1iYW1ib29cLWZvclwtd3JpdGluZzsKK+SIsiA8IGFcLWJhbWJvb1wtYmFza2V0XC1mb3JcLWZpc2hpbmc7Civkh7ogPCBiZWFuc1wtYW5kXC1wZWFzXC1jb2xsZWN0aXZlbHk7Civkh7UgPCBvbmVcLW9mXC10aGVcLXdpbmRcLWluc3RydW1lbnRzOwor5oay5rOVIDwgY29uc3RpdHV0aW9uXC1cKG9mXC1hXC1jb3VudHJ5XCk7CivkhaogPCBkaXNlYXNlXC1vZlwtdGhlXC1wcml2YXRlXC1wYXJ0Owor5ISwIDwgZm9ydHlcLWJ1bmRsZXNcLW9mXC1yaWNlXC1wbGFudDsKK+SDhyA8IGlua1wtZm9yXC1pbXByaW50aW5nXC1vZlwtc2VhbHM7CivkgJEgPCB0b1wtZ291Z2VcLW91dFwtYW5cLWV5ZVwtb3JcLWV5ZXM7CivjvY4gPCB0aGVcLXByb2Z1bmRpdHlcLW9mXC10aGVcLWhhcmVtOwor47ygIDwgYVwtY3JvY2tcLXdpdGhcLW5hcnJvd1wtb3BlbmluZzsKK+O6rCA8IGFcLWxhcmdlXC1waWVjZVwtb2ZcLWphZGVcLXN0b25lOwor47qSIDwgYmFya2luZ1wtb2ZcLWFcLWZyaWdodGVuZWRcLWRvZzsKK+S4jeirsSA8IHdpdGhvdXRcLWNvbmNlYWxpbmdcLWFueXRoaW5nOwor47mWIDwgdG9cLWZlZWRcLWFuaW1hbHNcLXdpdGhcLWdyYWluczsKK+O4kiA8IHRvXC1hYnN1cmRcLXB1cnN1aXRcLW9yXC1kZXNpcmU7CivlnLDlnYDop6PmnpDljZTorbAgPCBhZGRyZXNzXC1yZXNvbHV0aW9uXC1wcm90b2NvbDsKK+OugCA8IHRvb2xcLXRvXC1jbGVhclwtb3V0XC10aGVcLXdhdGVyOwor462VIDwgYVwtYm9hcmRcLWZvclwtY2FycnlpbmdcLXRoaW5nczsKK+OphiA8IHRvXC1iZVwtaW5cLWZ1bGxcLXBvc3Nlc3Npb25cLW9mOwor6ICM5LiN6ZyAIDwgd2l0aG91dFwtbmVlZGluZ1wtXCh0b1wtc29cLXN0aFwpOwor46eVIDwgdG9cLWZlZWxcLW9yXC10b3VjaFwtd2l0aFwtaGFuZHM7Civjp4IgPCBhXC1jYXZlXC1hXC1ob2xkXC1pblwtdGhlXC1ncm91bmQ7CivjppAgPCBhXC1zdHJhaWdodGZvcndhcmRcLWNoYXJhY3RlcjsKK+WuieaPkiA8IHBsYWNlXC1pblwtYVwtY2VydGFpblwtcG9zaXRpb247CivjpbQgPCBkb1wtbm90XC1jYXJlXC1hYm91dFwtc29tZXRoaW5nOwor5Lqk5o+b5qmfIDwgc3dpdGNoXC1cKHRlbGVjb21tdW5pY2F0aW9uc1wpOwor76SaIDwgd2hpdGVcLWhvcnNlXC13aXRoXC1ibGFja1wtbWFuZTsKK+OhtSA8IHJvb2ZcLW9mXC10aGVcLWhvdXNlXC1jb25uZWN0ZWQ7CivjoJ8gPCBhXC1tb3VudGFpblwtaW5cLWFuY2llbnRcLXRpbWVzOwor5Y+k6LmfIDwgcGxhY2VzXC1vZlwtaGlzdG9yaWNcLWludGVyZXN0Owor45u9IDwgdG9cLXdhbGtcLXNsb3dseVwtbGlrZVwtYVwtd29tYW47Civjm64gPCB3aWZlXC1vZlwtb25lJydzXC1lbGRlclwtYnJvdGhlcjsKK+OTiCA8IHNvdW5kXC1vZlwtZmx5aW5nXC1vclwtc3BlZWRpbmc7CivjkqsgPCBjaG9rZWRcLWFuZFwtdW5hYmxlXC10b1wtYnJlYXRoOwor45KWIDwgdGhlXC1yb290XC1zdG9ja1wtb2ZcLXRoZVwtbG90dXM7CivmsKPpq5QgPCBnYXNcLVwoaWVcLFwtZ2FzZW91c1wtc3Vic3RhbmNlXCk7CivlpKfpmbjoqbEgPCBtYWlubGFuZFwtY2hpbmVzZVwtXChsYW5ndWFnZVwpOwor5a2r5a2QIDwgZ3JhbmRzb25cLVwoc29uXC1vZlwtb25lJydzXC1zb25cKTsKK+WllOmosCA8IFwob2ZcLXdhdmVzXClcLXRvXC1zdXJnZVwtZm9yd2FyZDsKK+WNu+S5i+S4jeaBrSA8IHRvXC1yZWZ1c2VcLXdvdWxkXC1iZVwtaW1wb2xpdGU7CivkuqTmj5vlmaggPCBcKHRlbGVjb21cLW9yXC1uZXR3b3JrXClcLXN3aXRjaDsKK+mAmuioiuekviA8IGFcLW5ld3NcLXNlcnZpY2VcLVwoZWdcLFwteGluaHVhXCk7Civpg7Xpm7sgPCBwb3N0XC1hbmRcLXRlbGVjb21tdW5pY2F0aW9uczsKK+WVj+WAmSA8IGdpdmVcLXNvbWVvbmVcLW9uZScnc1wtcmVzcGVjdHM7CivnpZbniLYgPCBncmFuZGZhdGhlclwtXChmYXRoZXInJ3NcLXNpZGVcKTsKK+aEm+WlveiAhSA8IGxvdmVyXC1cKG9mXC1hcnRcLFwtc3BvcnRzXCxcLWV0Y1wpOwor5rG6562WIDwgXChtYWtlXC1hXClcLXN0cmF0ZWdpY1wtZGVjaXNpb247CivnpZbmr40gPCBncmFuZG1vdGhlclwtXChmYXRoZXInJ3NcLXNpZGVcKTsKK+Wci+mam+iyqOW5o+WfuumHkee1hOe5lCA8IGludGVybmF0aW9uYWxcLW1vbmV0YXJ5XC1mdW5kOwor6aas5aSq56aP6Z+zIDwgZ29zcGVsXC1hY2NvcmRpbmdcLXRvXC1tYXR0aGV3Owor6Yed54G4IDwgYWN1cHVuY3R1cmVcLWFuZFwtbW94aWJ1c3Rpb247Civpm7voqbHmnIPorbAgPCBcKHRlbGVwaG9uZVwpXC1jb25mZXJlbmNlXC1jYWxsOwor5LiA5pemIDwgaW5cLWNhc2VcLVwoc29tZXRoaW5nXC1oYXBwZW5zXCk7Civlo73ovrAgPCBiaXJ0aGRheVwtXChvZlwtYW5cLW9sZFwtcGVyc29uXCk7CivkuI3okL3nqqDoh7wgPCBub3RcLWZvbGxvd1wtdGhlXC1iZWF0ZW5cLXRyYWNrOwor5oyJ54Wn6KiI5YqDIDwgYWNjb3JkaW5nXC10b1wtXCh0aGVcKVwtcGxhblwtXC5cLlwuOwor5YWs5a6J6YOoIDwgbWluaXN0cnlcLW9mXC1wdWJsaWNcLXNlY3VyaXR5Owor5oqx5LiN5bmzIDwgYmVcLW91dHJhZ2VkXC1ieVwtYW5cLWluanVzdGljZTsKK+S6i+aDheimgeWBmiA8IHRoaW5nXC10aGF0XC1uZWVkc1wtdG9cLWJlXC1kb25lOwor5b6p55SmIDwgcmVjb3ZlcnlcLVwoaGVhbHRoXCxcLWVjb25vbWljXCk7CivmmYLmnJ8gPCBhXC1wZXJpb2RcLWluXC10aW1lXC1vclwtaGlzdG9yeTsKK+WQhOWcsCA8IGluXC1hbGxcLXBhcnRzXC1vZlwtXChhXC1jb3VudHJ5XCk7CivnlLflrZDmvKIgPCBtYW5cLVwoaVwuZVwuXC1tYW5seVwsXC1tYXNjdWxpbmVcKTsKK+eVpiA8IHNlY3Rpb25zXC1pblwtdmVnZXRhYmxlXC1mYXJtOwor55S6IDwgcmFpc2VkXC1wYXRoXC1iZXR3ZWVuXC1maWVsZHM7Civlm4EgPCBtb3ZlXC1saXBzXC1hc1wtd2hlblwtc3BlYWtpbmc7CivkvKYgPCBub3JtYWxcLWh1bWFuXC1yZWxhdGlvbnNoaXBzOwor5ZibIDwgZmluYWxcLWV4Y2xhbWF0b3J5XC1wYXJ0aWNsZTsKK+iQqCA8IGJ1ZGRoaXN0XC1nb2RzXC1vclwtaW1tb3J0YWxzOwor5qGQIDwgbmFtZVwtYXBwbGllZFwtdmFyaW91c1wtdHJlZXM7CivokoIgPCBwZWR1bmNsZVwtb3JcLXN0ZW1cLW9mXC1wbGFudHM7CivntLogPCBkYXJrXC1ibHVlXC1vclwtcmVkZGlzaFwtY29sb3I7Civmo7UgPCBudW1lcmFyeVwtYWRqdW5jdFwtZm9yXC10cmVlczsKK+aGiyA8IHRvXC1zdXBwcmVzc1wtaW5uZXJcLWZlZWxpbmdzOwor5a2cIDwgYmVcLWFzXC1kaWxpZ2VudFwtYXNcLXBvc3NpYmxlOwor57KxIDwgYmV0dGVyXC12YXJpZXRpZXNcLW9mXC1taWxsZXQ7Civls5IgPCBtb3VudGFpblwtaW5cLWdhbnN1XC1wcm92aW5jZTsKK+amqCA8IHRvXC1wcmVzc1wtb3JcLWV4dHJhY3RcLWp1aWNlczsKK+mEsSA8IGNvdW50eVwtYW5kXC1sYWtlXC1pblwtamlhbmd4aTsKK+iPoCA8IHNwaW5hY2hcLWFuZFwtc2ltaWxhclwtZ3JlZW5zOwor5reeIDwgbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtamlhbmdzdTsKK+a3hCA8IHJpdmVyXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor5oKxIDwgdG9cLWJlXC1kZXNpcm91c1wtb2ZcLXNwZWFraW5nOwor5ryvIDwgcml2ZXJcLWluXC1ub3J0aGVyblwtc2hhbmRvbmc7CivolZkgPCBzcGVjaWVzXC1vZlwtZnJhZ3JhbnRcLW9yY2hpZDsKK+a7gSA8IGRpc3RyaWN0XC1pblwtYW5odWlcLXByb3ZpbmNlOwor54uBIDwgYVwtdHJpYmVcLW9mXC1zY3l0aGlhblwtbm9tYWRzOwor6YWiIDwgdG9hc3RcLW9uZScnc1wtaG9zdFwtd2l0aFwtd2luZTsKK+ihvyA8IGNvbGxhclwtb3JcLWxhcGVsXC1vZlwtZ2FybWVudDsKK+W2nSA8IHBhdGhcLWxlYWRpbmdcLXVwXC1hXC1tb3VudGFpbjsKK+aXgyA8IHNpbGtcLWJhbm5lclwtd2l0aFwtYmVudFwtcG9sZTsKK+m9kSA8IGJyZWFrXC1vclwtc21hc2hcLWludG9cLXBpZWNlczsKK+iEmCA8IGludGVybmFsXC1jYXZpdHlcLW9mXC1zdG9tYWNoOwor6ZWSIDwgbWVhc3VyZVwtb2ZcLXdlaWdodFwtZm9yXC1nb2xkOwor55ytIDwgZXZpbFwtbG9va1wtb2ZcLWRlZXBcLXNldFwtZXllczsKK+mUliA8IHRoZVwtY29sb3JcLW9mXC10aGVcLWFcLW1pbmVyYWw7CivpgpkgPCBtb3VudGFpblwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+aVqyA8IGFuY2llbnRcLW11c2ljYWxcLWluc3RydW1lbnQ7CivokJEgPCBncmFzc1wtdXNlZFwtZm9yXC1tYWtpbmdcLW1hdHM7Civop68gPCB3aW5lXC1nb2JsZXRcLW1hZGVcLWZyb21cLWhvcm47CivoiKMgPCB0b1wtbW9vclwtYVwtYm9hdFwtdG9cLXRoZVwtYmFuazsKK+eikeaWhyA8IGFuXC1pbnNjcmlwdGlvblwtb25cLWFcLXRhYmxldDsKK+W3tOWFkueLlyA8IHBla2luZ2VzZVwtXChhXC1icmVlZFwtb2ZcLWRvZ1wpOwor5LiA6Lev5bmz5a6JIDwgdG9cLWhhdmVcLWFcLXBsZWFzYW50XC1qb3VybmV5Owor57SQ57SE5pmC5aCxIDwgbmV3XC15b3JrXC10aW1lc1wtXChuZXdzcGFwZXJcKTsKK+WPsOWMlyA8IHRhaXBlaVwtXChjYXBpdGFsXC1vZlwtdGFpd2FuXCk7CivluLjllY/llY/poYwgPCBmcmVxdWVudGx5XC1hc2tlZFwtcXVlc3Rpb25zOwor55m+5a2U5Y2D55ihIDwgcmlkZGxlZFwtd2l0aFwtZ2FwaW5nXC13b3VuZHM7CivlhbXpgKPnpo3ntZAgPCByYXZhZ2VkXC1ieVwtc3VjY2Vzc2l2ZVwtd2FyczsKK+ays+WFpyA8IGhhbm9pXC1cKGNhcGl0YWxcLW9mXC12aWV0bmFtXCk7Civph4/lipsgPCB0b1wtZXN0aW1hdGVcLW9uZScnc1wtc3RyZW5ndGg7CivmnKzlnLDnrqHnkIbnlYzpnaIgPCBsb2NhbFwtbWFuYWdlbWVudFwtaW50ZXJmYWNlOwor6ZW35pyf5Lul5L6GIDwgZXZlclwtc2luY2VcLWFcLWxvbmdcLXRpbWVcLWFnbzsKK+WtmOi7iuiZlSA8IHBhcmtpbmdcLWxvdFwtXChmb3JcLWJpY3ljbGVzXCk7CivmlqHml4sgPCBtZWRpYXRlXC1cKGFcLWNvbmZsaWN0XCxcLWV0Y1wuXCk7CivnmbzlsZXmoLjmrablmaggPCB0b1wtZGV2ZWxvcFwtbnVjbGVhclwtd2VhcG9uczsKK+WuieWutuiQveaItiA8IG1ha2VcLW9uZScnc1wtaG9tZVwtaW5cLWFcLXBsYWNlOwor5YWl5pyo5LiJ5YiGIDwgd3JpdHRlblwtaW5cLWFcLWZvcmNlZnVsXC1oYW5kOwor54mM5Yy+IDwgYm9hcmRcLVwoYXR0YWNoZWRcLXRvXC1hXC13YWxsXCk7Civli5XmiYsgPCB0b1wtaGl0XC13aXRoXC1oYW5kc1wtb3JcLWZpc3RzOwor6by754mb5YWSIDwgaGFyZGVuZWRcLW11Y3VzXC1pblwtbm9zdHJpbHM7CivmraXmnIggPCB0b1wtc3Ryb2xsXC1iZW5lYXRoXC10aGVcLW1vb247CivnlbDmraXlgrPovLjmqKHlvI8gPCBhc3luY2hyb25vdXNcLXRyYW5zZmVyXC1tb2RlOwor6KqT5birIDwgdG9cLXZvd1wtYmVmb3JlXC1vbmUnJ3NcLXRyb29wczsKK+mDqOWnlCA8IG1pbmlzdHJpZXNcLWFuZFwtY29tbWlzc2lvbnM7Civpm6PmgKogPCBcKGl0JydzXClcLW5vXC13b25kZXJcLVwodGhhdFwuXC5cLlwpOwor5YeN57WQIDwgXChsb2FuXCxcLXdhZ2VcLFwtcHJpY2VcKVwtZnJlZXplOwor5pa95YqgIDwgZXhlcnRcLVwoZWZmb3J0XC1vclwtcHJlc3N1cmVcKTsKK+imlueqlyA8IHdpbmRvd3NcLVwob3BlcmF0aW5nXC1zeXN0ZW1cKTsKK+W3qOiRlyA8IG1vbnVtZW50YWxcLVwobGl0ZXJhcnlcKVwtd29yazsKK+WIhuaZguWkmuW3pSA8IHRpbWVcLWRpdmlzaW9uXC1tdWx0aXBsZXhpbmc7Civli5/ljJYgPCB0b1wtY29sbGVjdFwtYWxtc1wtXChidWRkaGlzbVwpOwor5qC55rex6JKC5Zu6IDwgZGVlcFwtcm9vdGVkXC1cKHByb2JsZW1cLFwtZXRjXCk7Civlj5vorornmoTnnIHku70gPCByZW5lZ2FkZVwtcHJvdmluY2VcLVwodGFpd2FuXCk7Civpg6jkuIsgPCB0cm9vcHNcLXVuZGVyXC1vbmUnJ3NcLWNvbW1hbmQ7CivpprUgPCBob3JzZVwtd2l0aFwtd2hpdGVcLWJhY2tcLWxlZ3M7Civpo6MgPCBkaXNwbGF5XC1mb29kXC1mb3JcLXNob3dcLW9ubHk7CivmmJ/ls7bml6XloLEgPCBzaW5nXC10YW9cLWRhaWx5XC1cKG5ld3NwYXBlclwpOwor6ZeSIDwgdXBwZXJcLXN0b3J5XC1kb29yXC1vclwtd2luZG93Owor5YWo56iLIDwgXChkdXJpbmdcLWFuXClcLWVudGlyZVwtam91cm5leTsKK+mVt+evhyA8IGxlbmd0aHlcLVwocmVwb3J0XC1vclwtc3BlZWNoXCk7Civpm7vohabovJTliqnmlZnmnZAgPCBjb21wdXRlclwtYWlkZWRcLWluc3RydWN0aW9uOwor6KW/5rmWIDwgdGhlXC13ZXN0XC1sYWtlXCxcLWluXC1oYW5nemhvdTsKK+WuouaItuapn+acjeWLmeWZqOeSsOWigyA8IGNsaWVudFwtc2VydmVyXC1lbnZpcm9uZW1lbnQ7CivpioEgPCBhXC13ZWlnaHRcLW9mXC10aGlydHlcLWNhdHRpY3M7CivphoogPCB0b1wtcG91clwtd2luZVwtaW5cLWFcLWxpYmF0aW9uOwor6YO/IDwgY291bnR5XC1pblwtc2hhYW54aVwtcHJvdmluY2U7Civpg7MgPCBzdGF0ZVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+mDoCA8IHBsYWNlXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor6YOaIDwgdG93bnNcLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7CivovKQgPCBhXC1wYWxsXC10b1wtY292ZXJcLXRoZVwtaGVhcnNlOwor5pKl5byEIDwgbW92ZVwtdG9cLWFuZFwtZnJvXC1cKHdpdGhcLWhhbmQ7CivooajoqJggPCBzb21ldGhpbmdcLWdpdmVuXC1hc1wtYVwtdG9rZW47CivouJIgPCB0b1wtc2xpcFwtYW5kXC1zcHJhaW5cLWFcLWJsaW1iOwor6KGo6KOhIDwgdGhlXC1vdXRzaWRlXC1hbmRcLXRoZVwtaW5zaWRlOwor6KaQIDwgYVwtc2xlZXBcLXRvXC1yZWFsaXplXC10b1wtZmVlbDsKK+ahg+iKsemBiyA8IGx1Y2tcLXdpdGhcLXRoZVwtb3Bwb3NpdGVcLXNleDsKK+mbu+S/oeacjeWLmSA8IHRlbGVjb21tdW5pY2F0aW9uc1wtc2VydmljZTsKK+mAvOWCtSA8IHByZXNzXC1mb3JcLXBheW1lbnRcLW9mXC1kZWJ0czsKK+WFrOmWi+mRsOWMmSA8IHB1YmxpY1wta2V5XC1cKGluXC1lbmNyeXB0aW9uXCk7CivomaEgPCBzdXBwb3J0XC1zdHJ1Y3R1cmVcLWZvclwtYmVsbDsKK+iWviA8IGx1eHVyaWFudFwtZ3Jvd3RoXC1vZlwtZmxvd2VyOwor5byX5aGe5aWHIDwgdmVyc2FjZVwtXChmYXNoaW9uXC1kZXNpZ25lclwpOwor6IyIIDwgYVwtcGxhbnRcLXlpZWxkaW5nXC1hXC1yZWRcLWR5ZTsKK+aZrumAmuipsSA8IG1hbmRhcmluXC1cKGNvbW1vblwtbGFuZ3VhZ2VcKTsKK+mbu+S/oee2sui3ryA8IHRlbGVjb21tdW5pY2F0aW9uc1wtbmV0d29yazsKK+iGhiA8IHRoZVwtY29ycFwtb2ZcLWFcLWJpcmRcLW9yXC1mb3dsOwor6Zu76IWm6LyU5Yqp5bel56iLIDwgY29tcHV0ZXJcLWFpZGVkXC1lbmdpbmVlcmluZzsKK+aEn+afk+S6uuaVuCA8IG51bWJlclwtb2ZcLWluZmVjdGVkXC1wZXJzb25zOwor562G6YuSIDwgdGhlXC10aXBcLW9mXC1hXC13cml0aW5nXC1icnVzaDsKK+WgseWIiiA8IG5ld3NwYXBlcnNcLWFuZFwtcGVyaW9kaWNhbHM7Civnmb7mraXnqb/mpYogPCBzaG9vdFwtd2l0aFwtZ3JlYXRcLXByZWNpc2lvbjsKK+e9rSA8IGRyYWdcLW5ldFwtbWFkZVwtb2ZcLWZpbmVcLW1lc2g7CivnvY8gPCBlYXJ0aGVuXC1zdGFuZFwtZm9yXC13aW5lXC1qdWc7CivnvY0gPCBsYXJnZVwtZWFydGhlbndhcmVcLXdpbmVcLWphcjsKK+a8lOismyA8IFwoZ2l2ZVwpXC1hXC1zcGVlY2hcLW9yXC1sZWN0dXJlOwor57m4IDwgaGVtXC1vclwtYm9yZGVyXC1vZlwtYVwtZ2FybWVudDsKK+Wci+eItiA8IGZhdGhlclx8Zm91bmRlclwtb2ZcLWFcLW5hdGlvbjsKK+evnyA8IGx1eHVyaWFudFwtZ3Jvd3RoXC1vZlwtYmFtYm9vOwor5L6d6Z2gIDwgcmVseVwtb25cLVwoZm9yXC1zdXBwb3J0XCxcLWV0Y1wpOwor5omA6ZW3IDwgaGVhZFwtb2ZcLWFuXC1pbnN0aXR1dGVcLFwtZXRjXC47CivnqoYgPCB0b1wtcHV0XC1hXC1jb2ZmaW5cLWluXC1hXC1ncmF2ZTsKK+elsiA8IG9taW5vdXNcLW9yXC1zaW5pc3Rlclwtc3Bpcml0Owor5bm+5bm05L6GIDwgZm9yXC10aGVcLXBhc3RcLXNldmVyYWxcLXllYXJzOwor6Iul5bmyIDwgYVwtY2VydGFpblwtbnVtYmVyXHxhbW91bnRcLW9mOwor55mVIDwgbG9zc1wtb2ZcLXRoZVwtc2Vuc2VcLW9mXC1zbWVsbDsKK+mgpOWSjOWckiA8IHN1bW1lclwtcGFsYWNlXC1cKGluXC1iZWlqaW5nXCk7Civnq7bpgbggPCBydW5cLWZvclwtXChlbGVjdG9yYWxcKVwtb2ZmaWNlOwor5pC25YWIIDwgdG9cLXJ1c2hcLVwodG9cLWRvXC1zdGhcLXVyZ2VudFwpOwor54+bIDwgcXVpY2tseVwtZGV0ZXJpb3JhdGluZ1wtamFkZTsKK+WBnOeVmSA8IHN0YXlcLXNvbWV3aGVyZVwtdGVtcG9yYXJpbHk7CivmvrcgPCB3YXRlclwtb3ZlcmZsb3dpbmdcLWRpZmZ1c2VkOwor5Ye654++5oSP5aSWIDwgXCh0b1wtYXBwZWFyXClcLXVuZXhwZWN0ZWRcKGx5XCk7Civmr6kgPCBhXC1sZWF0aGVyXC1iYWxsXC1mb3JcLWtpY2tpbmc7Civnl4XmoKogPCBkaXNlYXNlZFwtb3JcLWluZmVjdGVkXC1wbGFudDsKK+S/l+eosSA8IGJlXC1jb21tb25seVwtcmVmZXJyZWRcLXRvXC1hczsKK+aPuSA8IGNhcnJ5XC10aGluZ3NcLW9uXC1vbmUnJ3NcLWJhY2s7Civmj4EgPCBzb3VuZFwtb2ZcLXNldHRpbmdcLXVwXC1hXC1rb3RvOwor5LiA6Ke45Y2z55m8IDwgY291bGRcLWhhcHBlblwtYXRcLWFueVwtbW9tZW50Owor6KGM5bCHIDwgYmVcLWFib3V0XC10b1wtXChkb1wtc29tZXRoaW5nXCk7CivotrPnkIMgPCBmb290YmFsbFwtXChicml0aXNoXC1lbmdsaXNoXCk7Civnupboiq/nm7TlvpEgPCBjb3JlXC1kaWFtZXRlclwtXChvZlwtYVwtZmliZXJcKTsKK+WqpyA8IG15dGhvbG9naWNhbFwtc25haWxcLWdvZGRlc3M7Civog4zohIogPCB0aGVcLWJhY2tcLW9mXC10aGVcLWh1bWFuXC1ib2R5Owor5ZuJIDwgZXhjbGFtYXRvcnlcLWZpbmFsXC1wYXJ0aWNsZTsKK+WuouaItuacjeWLmeWZqOe1kOaniyA8IGNsaWVudFwtc2VydmVyXC1hcmNoaXRlY3R1cmU7CivlmLcgPCB0aGVcLXJvYXJpbmdcLW9mXC13aWxkXC1iZWFzdHM7CivpgLLooYzkuqTmmJMgPCB0b1wtY2FycnlcLW91dFwtYVwtdHJhbnNhY3Rpb247Civmipfmk4ogPCByZXNpc3RcLVwoYVwtbWlsaXRhcnlcLWF0dGFja1wpOwor5YmeIDwgY2FydmluZ1wtb3JcLWVuZ3JhdmluZ1wta25pZmU7CivppqzkvobkurogPCBtYWxheXNpYW5cLXBlcnNvblwtb3JcLXBlb3BsZTsKK+WGjyA8IGFidXRpbG9uXC1hdmljZW5uYWVcLVwocGxhbnRcKTsKK+WIpeWHuuW/g+ijgSA8IGFkb3B0XC1hblwtb3JpZ2luYWxcLWFwcHJvYWNoOwor5bCL5qmfIDwgdG9cLWxvb2tcLWZvclwtYW5cLW9wcG9ydHVuaXR5Owor5LmrIDwgdXNlZFwtaW5cLWtvcmVhblwtcGxhY2VcLW5hbWVzOwor5a+m5rOBIDwgd2hhdFwtaXNcLWFjdHVhbGx5XC1oYXBwZW5pbmc7CivktYYgPCBncmFpbnNcLWZyb21cLXRoZVwtZGlzdGlsbGVyeTsKK+SyryA8IGFcLWtpbmRcLW9mXC1ibGFja1wtc21hbGxcLWJpcmQ7Civkr5MgPCB0aGVcLWhlYWRcLWJvbmVcLW9mXC1saXZlc3RvY2s7CivkrrYgPCBmbG9ja1wtb2ZcLWhvcnNlc1wtc3RhbXBlZGluZzsKK+SuoyA8IGFcLXllbGxvd1wtd2l0aFwtYVwtd2hpdGVcLXRhaWw7CivlqpLpq5TmjqXlj6PpgKPmjqXlmaggPCBtZWRpdW1cLWludGVyZmFjZVwtY29ubmVjdG9yOwor5bqV54m55b6LIDwgZGV0cm9pdFwtXChhXC1jaXR5XC1pblwtdGhlXC11c1wpOwor5KyxIDwgY29hcnNlXC1ncmFpbnNcLXN1Y2hcLWFzXC1jb3JuOwor5Lit5ZyL56eR5a246ZmiIDwgY2hpbmVzZVwtYWNhZGFteVwtb2ZcLXNjaWVuY2U7CivkqbIgPCBhXC10b29sXC11c2VkXC10b1wtY3V0XC1sZWF0aGVyOwor5KmaIDwgdG9cLW1lbmRcLXRoZVwtc29sZXNcLW9mXC1zaG9lczsKK+eZvueZvOeZvuS4rSA8IGV2ZXJ5XC1zaG90XC1oaXRzXC10aGVcLXRhcmdldDsKK+S4gembsiA8IGRpbmdcLXl1blwtXChhXC1wZXJzb25hbFwtbmFtZVwpOwor6Jmb5pOs6YCa6YGT6YCj5o6lIDwgdmlydHVhbFwtY2hhbm5lbFwtY29ubmVjdGlvbjsKK+ShpiA8IHRoZVwtZW1wdHlcLXNwYWNlXC1vZlwtYVwtd2hlZWw7CivmoYjmnb8gPCBrbmVhZGluZ1wtb3JcLWNob3BwaW5nXC1ib2FyZDsKK+SgiSA8IHRvXC1ydW5cLWF3YXlcLW9yXC1lc2NhcGVcLWZyb207CivknpEgPCBhXC1yZWRcLXN3ZWxsaW5nXC1vZlwtdGhlXC1za2luOwor5L+d5a6IIDwgXChwb2xpdGljYWxseVwpXC1jb25zZXJ2YXRpdmU7Civkm68gPCB0aGVcLXJlYXNvbmFibGVcLW9mXC1zcGVla2luZzsKK+SWhSA8IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklIUgPCBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLXRyZWVzOwor5JKxIDwgdHdpZ3NcLW9mXC1oZW1wXC11c2VkXC1mb1wtZnVlbDsKK+SOtyA8IGFuXC1vbGRcLW1hblwtd2l0aFwtd2hpdGVcLWhhaXI7CivkuI3pgIEgPCBkb24nJ3RcLWJvdGhlclwtdG9cLXNlZVwtbWVcLW91dDsKK+SMoCA8IGhvbGRcLW9uXC10b1wtb25lJydzXC1vd25cLXZpZXdzOwor6Z2i5Zqu5bCN6LGh55qE5oqA6KGTIDwgb2JqZWN0XC1vcmllbnRlZFwtdGVjaG5vbG9neTsKK+elnumBkyA8IHNoaW50b1wtXChqYXBhbmVzZVwtcmVsaWdpb25cKTsKK+SLgCA8IHNob2VzXC1tYWRlXC1vZlwtaGVtcFwtb3JcLWhhaXI7Civkiq4gPCBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYWluOwor5ImCIDwgYVwtYmFza2V0XC1mb3JcLWVhcnRoXC1vclwtc29pbDsKK+SHliA8IHJvcGVcLW1hZGVcLW9mXC1iYW1ib29cLXN0cmlwczsKK+SGgCA8IHRvXC1jb3JydXB0XC1vclwtYmVcLWNvcnJ1cHRlZDsKK+SFviA8IHN0YXJ0aW5nXC10b1wtcHV0XC1mb3J0aFwtZWFyczsKK+SFrCA8IHNtYWxsXC1idW5kbGVcLW9mXC1yaWNlXC1wbGFudDsKK+Wwh+WwsSA8IGFjY2VwdFwtXChhXC1iaXRcLXJlbHVjdGFudGx5XCk7CivkuI3kuqLkuI3ljZEgPCBuZWl0aGVyXC1oYXVnaHR5XC1ub3JcLWh1bWJsZTsKK+SBjiA8IHRvXC1tYWtlXC1hXC1jbG9zZVwtaW5zcGVjdGlvbjsKK+SAiiA8IGFcLWtpbmRcLW9mXC13YXRlclwtY29udGFpbmVyczsKK+aHt+aKsSA8IFwod2l0aGluXC1zb21lb25lJydzXClcLWVtYnJhY2U7CivjvKkgPCBjb25jYXZlXC1jaGFubmVsc1wtb2ZcLXRpbGluZzsKK+eUqOaItuerr+ioreWCmSA8IGN1c3RvbWVyXC1wcmVtaXNlXC1lcXVpcG1lbnQ7Civmg4Xms4HkuIsgPCB1bmRlclwtXCh0aGlzXClcLWNpcmN1bXN0YW5jZXM7CivjuqAgPCBhXC1ibGFja1wtYXBlXC13aXRoXC1sb25nXC10YWlsOwor47qVIDwgdGhlXC1maWdodGluZ1wtc291bmRcLW9mXC1kb2dzOwor47maIDwgc291bmRcLW9mXC1jYWxsaW5nXC10b1wtYVwtY2FsZjsKK+O3tiA8IHRvXC1kcnlcLW9yXC13YXJtXC1uZWFyXC1hXC1maXJlOwor5rqr5ZOl6I+vIDwgdmFuY291dmVyXC1cKGNpdHlcLWluXC1jYW5hZGFcKTsKK+O3gyA8IGZpcmVcLWJ1cm5zXC1mb3JcLWFcLWxvbmdcLXRpbWU7CivjtJQgPCB0aGVcLW5vaXNlXC1vZlwtZmxvd2luZ1wtd2F0ZXI7CivjtIsgPCBkZWVwXC1hbmRcLWNsZWFyXC1cLXRvXC11cmluYXRlOwor47OnIDwgdGhlXC13YXRlclwtZmxvd2luZ1wtZnJvbVwtXC5cLlwuOwor47G9IDwgdG9cLWhpdFwtb3JcLXRvXC1zdHJpa2VoZWF2aWx5Owor47G7IDwgZGlzZWFzZXNcLW9mXC1kdW1iXC1jcmVhdHVyZXM7CivjsaEgPCB0aGVcLXNvdWxcLW91dFwtb2ZcLW9uZScnc1wtYm9keTsKK+OxlCA8IGFcLXNtYWxsXC1xdWFudGl0eVwtb3JcLW51bWJlcjsKK+OvnyA8IGZvb3RcLW9mXC1hXC1oaWxsXC1vclwtbW91bnRhaW47Civjra4gPCBhXC1raW5kXC1vZlwtbGlxdW9yXC1jb250YWluZXI7Civlj7PpgoogPCByaWdodFwtXChhc1wtb3Bwb3NlZFwtdG9cLWxlZnRcKTsKK+S4jeetieWDueS6pOaPmyA8IGV4Y2hhbmdlXC1vZlwtdW5lcXVhbFwtdmFsdWVzOwor55m96aCt57+BIDwgcm9vdFwtb2ZcLWNoaW5lc2VcLXB1bHNhdGlsbGE7CivvqIwgPCBkdXBsaWNhdGVcLW9mXC1iaWdcLWZpdmVcLWE0NjE7Civnmb3lo4HnhKHnkZUgPCBpbXBlY2NhYmxlXC1tb3JhbFwtaW50ZWdyaXR5Owor46aDIDwgcGVyZmVjdFwtcGVyc29uYWxcLWNoYXJhY3RlcjsKK+ekvuirliA8IGVkaXRvcmlhbFwtXChpblwtYVwtbmV3c3BhcGVyXCk7CivlrrbluLggPCB0aGVcLWRhaWx5XC1saWZlXC1vZlwtYVwtZmFtaWx5Owor46WNIDwgdG9cLWJlYXJcLWplYWxvdXNcLWhhdHJlZFwtZm9yOwor46SsIDwgZnVsbFwtb2ZcLWFuZ2VyXC1hbmRcLXZleGF0aW9uOwor46SOIDwgYVwtbW9kZWxcLW9yXC10eXBpY2FsXC1leGFtcGxlOwor46SEIDwgcmFnaW5nXC1hbmltb3NpdHlcLW9yXC1oYXRyZWQ7Civjo6cgPCB0aGVcLXN1Y2Nlc3Npb25cLWluXC1hXC1mYW1pbHk7Civjo6MgPCB0b1wtd2Fsa1wtaW5cLWFuXC11bnN0ZWFkeVwtd2F5Owor46K4IDwgZGV2aWNlXC1mb3JcLXJlZ3VsYXRpbmdcLWJvd3M7CivjopIgPCBhblwtYWxtb3N0XC1jb2xsYXBzaW5nXC1ob3VzZTsKK+abuOiBliA8IGFcLWdyZWF0XC1jYWxsaWdyYXBoeVwtbWFzdGVyOwor45yqIDwgbmFtZVwtb2ZcLWFcLWZhbWlseVwtb3JcLWFcLWNsYW47CivjnJUgPCByZWxhdGl2ZXNcLXRocm91Z2hcLW1hcnJpYWdlOwor45uyIDwgdGhlXC1oYWlyXC1vblwtdGhlXC1odW1hblwtaGVhZDsKK+OavyA8IGFcLWdvZGRlc3MnJ3NcLW5hbWVcLWluXC1sZWdlbmQ7CivjmaEgPCBhXC1raW5kXC1vZlwtZWF0YWJsZVwtbXVzaHJvb207CivjmLkgPCB0b1wtc3ByZWFkXC1zb2lsXC1vblwtdGhlXC1yb2FkOwor5Lit5paH54mIIDwgY2hpbmVzZVwtXChsYW5ndWFnZVwpXC12ZXJzaW9uOwor45ikIDwgY2lyY2xlXC1vZlwtdGhlXC1tb3ZpbmdcLXdhdGVyOwor45aoIDwgaW5kaXN0aW5jdFwtbmFzYWxcLXV0dGVyYW5jZTsKK+OSvSA8IGFcLWtpbmRcLW9mXC1jYXBcLWZvclwtY2hpbGRyZW47Civpq5jkuK3nlJ8gPCBzZW5pb3JcLWhpZ2hcLXNjaG9vbFwtc3R1ZGVudDsKK+OQliA8IGFcLXRyYW5zbGF0ZWRcLW5hbWVcLW9mXC1pbmRpYTsKK+izh+acrCA8IGNhcGl0YWxcLVwoYXNcLWluXC1jYXBpdGFsaXNtXCk7Civmnb/nvr3nkIMgPCBiYXR0bGVkb3JlXC1hbmRcLXNodXR0bGVjb2NrOwor6aKo55C0IDwgb3JnYW5cLVwobXVzaWNhbFwtaW5zdHJ1bWVudFwpOwor5a2X5biWIDwgY29weWJvb2tcLVwoZm9yXC1jYWxsaWdyYXBoeVwpOwor5pWX5a2Q5Zue6aCtIDwgcmV0dXJuXC1vZlwtdGhlXC1wcm9kaWdhbFwtc29uOwor6Kiq5ZWP576O5ZyLIDwgdG9cLXZpc2l0XC10aGVcLXVuaXRlZFwtc3RhdGVzOwor5LiN5aSx5pmC5qmfIDwgc2VpemVcLXRoZVwtb3Bwb3J0dW5lXC1tb21lbnQ7CivlronliIYgPCBub3RcLWdvXC1iZXlvbmRcLW9uZScnc1wtYm91bmRzOwor5pqX56yRIDwgbGF1Z2hcLWluXC1cKHVwXClcLW9uZScnc1wtc2xlZXZlOwor5bCO5b2I5r2b6ImHIDwgXChndWlkZWRcKVwtbWlzc2lsZVwtc3VibWFyaW5lOwor576O546yIDwgbWVpXC1saW5nXC1cKGFcLXBlcnNvbicnc1wtbmFtZVwpOwor56Kn6KGAIDwgYmxvb2RcLXNoZWRcLWluXC1hXC1qdXN0XC1jYXVzZTsKK+WPg+WFqemZoiA8IGJvdGhcLWhvdXNlc1wtb2ZcLXVzXC1jb25ncmVzczsKK+a0quajriA8IGh1blwtc2VuXC1cKGNhbWJvZGlhblwtbGVhZGVyXCk7CivnqJ/lkYogPCByZXBvcnRcLVwodG9cLW9uZScnc1wtc3VwZXJpb3JcKTsKK+mBuumrlCA8IHJlbWFpbnNcLVwob2ZcLWFcLWRlYWRcLXBlcnNvblwpOwor6YG/6aKoIDwgdGFrZVwtc2hlbHRlclwtZnJvbVwtdGhlXC13aW5kOwor56aP5bu6IDwgZnVqaWFuXC1cKHByb3ZpbmNlXC1vZlwtY2hpbmFcKTsKK+WuieWmguazsOWxsSA8IGFzXC1zZWN1cmVcLWFzXC1tb3VudFwtdGFpc2hhbjsKK+WLmOiqpCA8IHRvXC1jb3JyZWN0XC1wcmludGluZ1wtZXJyb3JzOwor5Y2H57SaIDwgdG9cLWVzY2FsYXRlXC1cKGluXC1pbnRlbnNpdHlcKTsKK+W8t+iqvyA8IHRvXC1lbXBoYXNpemVcLVwoYVwtc3RhdGVtZW50XCk7CivogIzkuJQgPCBub3RcLW9ubHlcLVwuXC5cLlwtYnV0XC1hbHNvXC1cLlwuXC5cLjsKK+mBt+mDvSA8IHRvXC1tb3ZlXC10aGVcLWNhcGl0b2xcLVwoY2l0eVwpOwor5LiN576p5LmL6LKhIDwgaWxsXC1nb3R0ZW5cLXdlYWx0aFwtb3JcLWdhaW5zOwor6YeN6KaB55qE5pivIDwgaXRcLWlzXC1pbXBvcnRhbnRcLVwodGhhdFwpXC1cLlwuXC47CivkuI3kvYYgPCBub3RcLW9ubHlcLVwoXC5cLlwuXC1idXRcLWFsc29cLlwuXC5cKTsKK+WMheeUoiA8IG1ha2VcLWFcLXByb2R1Y3Rpb25cLWNvbnRyYWN0Owor55mf6J6655enIDwgY2hvbGVyYVwtXCh3aXRoXC1kZWh5ZHJhdGlvblwpOwor5bGKIDwgbnVtZXJhcnlcLWFkanVuY3RcLWZvclwtdGltZTsKK+iwgSA8IHdob1w/XC13aG9tXD9cLXdob3NlXD9cLWFueW9uZVw/Owor6Zi/IDwgcHJlZml4XC1mb3JcLXBlb3BsZScnc1wtbmFtZXM7CivojqIgPCBwb2RzXC1vZlwtbGVndW1pbm91c1wtcGxhbnRzOwor54uEIDwgdHJpYmVcLWZyb21cLW5vcnRoZXJuXC1jaGluYTsKK+e5sCA8IHRvXC1yZWVsXC1zaWxrXC1mcm9tXC1jb2Nvb25zOwor5ryTIDwgcml2ZXJcLWluXC1ndWFuZ3hpXC1wcm92aW5jZTsKK+WSiyA8IHF1ZXN0aW9uXC1mb3JtaW5nXC1wYXJ0aWNsZTsKK+m6nyA8IGZlbWFsZVwtb2ZcLWNoaW5lc2VcLXVuaWNvcm47CivmuK0gPCBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1zaGFueGk7CivoipwgPCBsdXh1cmlvdXNcLWdyb3d0aFwtb2ZcLXdlZWRzOwor57uOIDwgdG9cLXVucmF2ZWxcLW9yXC11bnJlZWxcLXNpbGs7CivnkpAgPCBiZWF1dGlmdWxcLXZhcmlldHlcLW9mXC1qYWRlOwor6Z+2IDwgbXVzaWNcLW9mXC10aGVcLWVtcGVyb3JcLXNodW47CivprJ8gPCBkcmVzc1wtaGFpclwtaW5cLWNvaWxlZFwta25vdDsKK+e9giA8IGxvbmdcLW5lY2tlZFwtamFyXC1vclwtYm90dGxlOwor6Z2zIDwgc3RyYXBcLW9uXC1hXC1ob3JzZScnc1wtYnJlYXN0Owor5remIDwgcml2ZXJcLWluXC1qaWFuZ3hpXC1wcm92aW5jZTsKK+aQoSA8IHRvXC1wdXNoXC1vdmVyXC1vclwtcHVzaFwtYmFjazsKK+iJriA8IHNldmVudGhcLW9mXC1laWdodFwtZGlhZ3JhbXM7CivmuZ8gPCByaXZlclwtaW5cLXFpbmdoYWlcLXByb3ZpbmNlOwor54yxIDwgYVwtbW9ua2V5XC13aXRoXC15ZWxsb3dcLWhhaXI7CivmtqogPCByaXZlclwtaW5cLXNpY2h1YW5cLXByb3ZpbmNlOwor5LqzIDwgbmFtZVwtb2ZcLWRpc3RyaWN0XC1pblwtYW5odWk7CivolLogPCBydXNoXC11c2VkXC1mb3JcLW1ha2luZ1wtbWF0czsKK+eQrCA8IHRoZVwtdmlydHVlXC1vZlwtYVwtZ2VudGxlbWFuOwor54yXIDwgZXhjbGFtYXRpb25cLW9mXC1hZG1pcmF0aW9uOwor6byZIDwgZHJ1bVwtY2FycmllZFwtb25cLWhvcnNlYmFjazsKK+iVsiA8IHZhcmlldHlcLW9mXC1hcnRlbWlzaWFcLXNlZWs7Civnk54gPCB5b3VuZ1wtbWVsb25zXC1qdXN0XC1mb3JtaW5nOwor6L6BIDwgY2FydFwtd2hlZWxcLXdpdGhcLW5vXC1zcG9rZXM7CivphYYgPCBuYW1lXC1vZlwtemhvdVwtcGVyaW9kXC1zdGF0ZTsKK+WMl+acnSA8IHRoZVwtbm9ydGhlcm5cLWR5bmFzdGllc1wtXChhOwor6LaF5paH5pys5qiZ6KiY6Kqe6KiAIDwgaHlwZXJ0ZXh0XC1tYXJrdXBcLWxhbmd1YWdlOwor5rC45LmF6Jmb6Zu76LevIDwgcGVybWFuZW50XC12aXJ0dWFsXC1jaXJjdWl0Owor5YyF5pSsIDwgdW5kZXJ0YWtlXC10aGVcLXdob2xlXC10aGluZzsKK+WLnuaVmSA8IHJlZWR1Y2F0aW9uXC10aHJvdWdoXC1sYWJvcjsKK+WNiuWgtCA8IGhhbGZcLW9mXC1hXC1nYW1lXC1vclwtY29udGVzdDsKK+mAmuS/oeaKgOihkyA8IGNvbW11bmljYXRpb25zXC10ZWNobm9sb2d5Owor55m86YGUIDwgZGV2ZWxvcGVkXC1cKGNvdW50cnlcLFwtZXRjXC5cKTsKK+WhnueIvue2reS6nuWFi+e+heWcsOS6nuiqniA8IHNlcmJvXC1jcm9hdGlhblwtXChsYW5ndWFnZVwpOwor54CJ6ZyyIDwgdG9cLWxlYWtcLW91dFwtXChpbmZvcm1hdGlvblwpOwor5q2y5pW4IDwgYWdlXC1cKG51bWJlclwtb2ZcLXllYXJzXC1vbGRcKTsKK+WkluWMr+WEsuWCmSA8IGZvcmVpZ25cLWV4Y2hhbmdlXC1yZXNlcnZlczsKK+mWi+iorSA8IG9mZmVyXC1cKGdvb2RzXC1vclwtc2VydmljZXNcKTsKK+W7o+adsSA8IGd1YW5nZG9uZ1wtcHJvdmluY2VcLFwtY2hpbmE7CivmlL7lv4MgPCB0b1wtc2V0XC1vbmUnJ3NcLW1pbmRcLWF0XC1yZXN0Owor6a2v6L+FIDwgbmFtZVwtb2ZcLWFuXC1hdXRob3JcLFwtbHVcLXh1bjsKK+mBmeacmyA8IHRvXC1sb29rXC1pbnRvXC10aGVcLWRpc3RhbmNlOwor6Zu75a2Q6YO15Lu25YKz6YCB5pyN5YuZIDwgXChlXC1cKW1haWxcLWRlbGl2ZXJ5XC1zZXJ2aWNlOwor6KOc6LazIDwgYnJpbmdcLXVwXC10b1wtZnVsbFwtc3RyZW5ndGg7CivpgI/pgJrmgKcgPCB0cmFuc3BhcmVuY3lcLVwobmV0d29ya2luZ1wpOwor54as5aScIDwgc3RheVwtdXBcLWxhdGVcLW9yXC1hbGxcLW5pZ2h0Owor6bC8IDwgdGhlXC13ZWF0aGVyXC1vclwtZG9qb1wtbG9hY2g7Civpq5TpqZcgPCB0b1wtZXhwZXJpZW5jZVwtZm9yXC1vbmVzZWxmOwor5pKV5q+AIDwgdGVhclwtdXBcLVwoYVwtY29udHJhY3RcLFwtZXRjXCk7Civlgr7pircgPCB0b1wtZHVtcFwtXChnb29kc1wsXC1wcm9kdWN0c1wpOwor6Z+UIDwgYVwtd3JhcHBlclwtb3JcLWNhc2VcLWZvclwtYm93Owor55yL5rOVIDwgd2F5XC1vZlwtbG9va2luZ1wtYXRcLWFcLXRoaW5nOwor6ZmXIDwgYVwtc3RlZXBcLWhpbGxcLlwtcHJlY2lwaXRvdXM7Civnh5/mpa3poY0gPCBzdW1cLW9yXC12b2x1bWVcLW9mXC1idXNpbmVzczsKK+mPviA8IHRoZVwtdHJpZ2dlclwtb2ZcLWFcLWNyb3NzYm93Owor6Zec5rOoIDwgZm9sbG93XC1cKGFuXC1pc3N1ZVwpXC1jbG9zZWx5Owor6YSgIDwgY291bnR5XC1pblwtc2hhbnhpXC1wcm92aW5jZTsKK+mEjiA8IGFcLXBsYWNlXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor5Ymd5ZWEIDwgdGFwXC1cKG9uXC1hXC1kb29yXC1vclwtd2luZG93XCk7CivovqjmnpAgPCBkaWZmZXJlbnRpYXRlXC1hbmRcLWFuYWx5c2U7CivkuI3ovq3ovpvoi6YgPCBtYWtlXC1ub3RoaW5nXC1vZlwtaGFyZHNoaXBzOwor56iL5byP55CG5ZOhIDwgcHJvZ3JhbVwtbWFuYWdlclwtXCh3aW5kb3dzXCk7Civop7cgPCB0b1wtcHJvY2Vzc1wtb3JcLWNhcnZlXC1ob3JuczsKK+awkeS4u+m7qOS6uiA8IGFcLWRlbW9jcmF0aWNcLXBhcnR5XC1tZW1iZXI7CivonbAgPCB2aXBlcmFcLXJ1c3NlbGlpXC1zaWFtZW5zaXM7CivljYHlhITkvY3lhYPku6XlpKrntrLntaHoga/nm58gPCBnaWdhYml0XC1ldGhlcm5ldFwtYWxsaWFuY2U7CivokbYgPCBkcmFiYVwtbmVtZXJvc2FcLWJlYmVcLWNhcnBhOwor6IqUIDwgYVwtZ2VuZXJhbFwtdGVybVwtZm9yXC1wbGFudHM7CivohqUgPCBlZ2dzXC1vZlwtYmlyZHNcLW9yXC1yZXB0aWxlczsKK+S4ieWNgeW5tOS+hiA8IGZvclwtdGhlXC1wYXN0XC10aGlydHlcLXllYXJzOwor5oqA6KGT55m85bGVIDwgdGVjaG5vbG9naWNhbFwtZGV2ZWxvcG1lbnQ7CivlnIvnlKIgPCBtYWRlXC1pblwtb25lJydzXC1vd25cLWNvdW50cnk7Civpq5jnrYnlrbjmoKEgPCBjb2xsZWdlc1wtYW5kXC11bml2ZXJzaXRpZXM7Civnmb3ml48gPCB0aGVcLWJhaVwtXChwYWlcKVwtbmF0aW9uYWxpdHk7CivnupEgPCB0b1wtc29mdGVuXC1oZW1wXC1ieVwtYm9pbGluZzsKK+WOn+WboOW+iOewoeWWriA8IHRoZVwtcmVhc29uXC1pc1wtdmVyeVwtc2ltcGxlOwor57GpIDwgYmFtYm9vXC1jb250YWluZXJcLWZvclwtZm9vZDsKK+exnSA8IGFcLXR1YmVcLXRvXC1ob2xkXC1jaG9wc3RpY2tzOwor5bq35raF54uE5qC8IDwgY29ubmVjdGljdXRcLVwoc3RhdGVcLWluXC11c1wpOwor56yOIDwgYmFtYm9vXC13aXRoXC1ibGFja1wtcGF0Y2hlczsKK+WWrumAo+aOpeermSA8IHNpbmdsZVwtYXR0YWNobWVudFwtc3RhdGlvbjsKK+emmCA8IGltcGVyaWFsXC1hbmNlc3Rvclwtd29yc2hpcDsKK+efruWAi+WFkiA8IGFcLXBlcnNvblwtb2ZcLXNob3J0XC1zdGF0dXJlOwor55eF55mSIDwgcmVjb3ZlclwtXChmcm9tXC1hblwtaWxsbmVzc1wpOwor56SEIDwgcGxhY2VcLWluXC1zaWNodWFuXC1wcm92aW5jZTsKK+WvrOmZkCA8IGV4dGVuZFwtXChhXC1kZWFkbGluZVwsXC1ldGNcLlwpOwor55KqIDwgcGVhcmxcLXBlbmRhbnRzXC1vblwtY29yb25ldDsKK+eRvSA8IHRpbmtsaW5nXC1vZlwtamFkZVwtcGVuZGFudHM7CivnjLIgPCBzbW9rZVwtb3JcLWZsYW1lc1wtZnJvbVwtZmlyZTsKK+espuWQiOaomea6liA8IHRvXC1jb21wbHlcLXdpdGhcLWFcLXN0YW5kYXJkOwor56S65aiB6YGK6KGMIDwgYVwtXChwcm90ZXN0XClcLWRlbW9uc3RyYXRpb247Civms5wgPCBhXC1yaXZlclwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+azkiA8IGFcLXJpdmVyXC1pblwtaHViZWlcLXByb3ZpbmNlOwor5rGtIDwgY29uZmx1ZW5jZVwtb2ZcLXR3b1wtc3RyZWFtczsKK+arvSA8IHNoYXBlXC13b29kXC1ieVwtdXNlXC1vZlwtaGVhdDsKK+aZrCA8IGZpcnN0XC1iaXJ0aGRheVwtb2ZcLWFcLWNoaWxkOwor6KGo5oWLIDwgbWFrZVwta25vd25cLW9uZScnc1wtcG9zaXRpb247CivlrqPoqpMgPCBzd2VhclwtYW5cLW9hdGhcLVwob2ZcLW9mZmljZVwpOwor5aSn5pW155W25YmNIDwgY29uZnJvbnRcLWFcLXBvd2VyZnVsXC1lbmVteTsKK+aCiiA8IHdpc2VcLlwtdG9cLWtub3dcLWludHVpdGl2ZWx5Owor5ouc5pybIDwgY2FsbFwtdG9cLXBheVwtb25lJydzXC1yZXNwZWN0Owor5b2NIDwgdG9cLWRyYXdcLWFcLWJvd1wtdG9cLXRoZVwtZnVsbDsKK+aguOWkp+WciyA8IGFcLW51Y2xlYXJcLXBvd2VyXC1cKGNvdW50cnlcKTsKK+W6hSA8IGFuXC1pbnRlcnJvZ2F0aXZlXC1wYXJ0aWNsZTsKK+eglOijvemBjueoiyA8IG1hbnVmYWN0dXJpbmdcLWVudmlyb25tZW50Owor56+H5bmFIDwgXCh0YWtlXC11cFwtb3JcLWRldm90ZVwpXC1zcGFjZTsKK+WPjeWUh+ebuOitjyA8IGFuc3dlclwtYmFja1wtc2FyY2FzdGljYWxseTsKK+aguOi9n+eCuOapnyA8IG51Y2xlYXJcLWJvbWJlclwtXChhaXJjcmFmdFwpOwor5biM6IeY6KqeIDwgXChtb2Rlcm5cKVwtZ3JlZWtcLVwobGFuZ3VhZ2VcKTsKK+mmluebuCA8IFwoamFwYW5lc2VcKVwtcHJpbWVcLW1pbmlzdGVyOwor5pmC6ZaT5YWnIDwgd2l0aGluXC1cKGFcLXBlcmlvZFwtb2ZcLXRpbWVcKTsKK+e2sue1oeeuoeeQhuezu+e1sSA8IG5ldHdvcmtcLW1hbmFnZW1lbnRcLXN5c3RlbTsKK+aKiuW8jyA8IHBlcnNvblwtc2tpbGxlZFwtaW5cLWFcLXRyYWRlOwor5LW1IDwgeWVsbG93aXNoXC1ibGFja1wtYW5kXC13aGl0ZTsKK+S1qyA8IGxpZ2h0XC1yZWRcLXllbGxvd2lzaFwtYmxhY2s7CivktJsgPCB0b1wtbWFrZVwtZGVjb2N0aW9uXC1vZlwtc2FsdDsKK+SztyA8IGFcLXNlY29uZFwtbmFtZVwtZm9yXC1jaGlja2VuOwor5LOGIDwgYVwta2luZFwtb2ZcLXNwZWNpZXNcLW9mXC1teW5hOwor5LCCIDwgYVwtY29pZmZ1cmVcLXdpdGhcLWFcLXRvcGtub3Q7CivkrpUgPCBob3JzZVwtd2l0aFwtd2hpdGVcLWZvcmVoZWFkOwor5K2oIDwgd2luZVwtcG91cmVkXC1pblwtYVwtbGliYXRpb247Civkq4AgPCB0aGVcLWxvd2VyXC1lbmRcLW9mXC10aGVcLWphd3M7CivkqZ0gPCB0b1wtdGFuXC1hbmRcLXNvZnRlblwtbGVhdGhlcjsKK+S4jeW+l+S6uuW/gyA8IG5vdFwtZW5qb3lcLXBvcHVsYXJcLXN1cHBvcnQ7Civmt5jnsa4gPCBiYXNrZXRcLVwoZm9yXC13YXNoaW5nXC1yaWNlXCk7CivkpIIgPCBhXC1zZWNvbmRcLW5hbWVcLWZvclwtdmluZWdhcjsKK+eUpeWlsyA8IG5pZWNlXC1cKHNpc3Rlcicnc1wtZGF1Z2h0ZXJcKTsKK+SjtCA8IHRvXC1sb3NlXC10ZW1wZXJcLXdoZW5cLWRydW5rOwor5KOGIDwgbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLWdhb21pOwor5KKyIDwgdG9cLWdvXC1hbGxcLXRoZVwtd2F5XC1mb3J3YXJkOwor5KKuIDwgcmFwaWRcLW1hcmNoaW5nXC1vclwtcnVubmluZzsKK+SioSA8IHRvXC1zdGFtcFwtdGhlXC1mb290XC1mb3J3YXJkOwor5KG5IDwgdGhlXC1sb3dcLXJlYXJcLW9mXC1hXC1jaGFyaW90Owor5KGvIDwgc291bmRcLW9mXC1tb3ZpbmdcLWNhcnJpYWdlczsKK+ShoSA8IHRvXC1nZXRcLXVwXC1pbnRvXC1hXC1jYXJyaWFnZTsKK+ebtOiogOS4jeirsSA8IHNwZWFrXC1mcmFua2x5XC1hbmRcLWJsdW50bHk7Civmma/lsbHlhazlnJIgPCBuYW1lXC1vZlwtYVwtcGFya1wtaW5cLWJlaWppbmc7CivkmLggPCB0aGVcLWxvd2VyXC1mcm9udFwtb2ZcLWFcLXJvYmU7CivkmJIgPCBib3knJ3NcLXJlcHJvZHVjdGl2ZVwtb3JnYW5zOwor5JWEIDwgbWVhdFwtaW5cLXRoZVwtZm9ybVwtb2ZcLXBhc3RlOwor5JOLIDwgZWxtXC1zZWVkc1wtXC1cLVwtdXNlZFwtYXNcLWZvb2Q7CivkkaIgPCBhXC1rbmlmZVwtc2hhcGVkXC1zbWFsbFwtYm9hdDsKK+SRiCA8IG1lYXRcLXRvXC1vZmZlclwtZm9yXC13b3JzaGlwOwor5ryi5Lq6IDwgaGFuXC1jaGluZXNlXC1wZXJzb25cfHBlb3BsZTsKK+SNryA8IGdhb3RcLXdpdGhcLWRpZmZlcmVudFwtaG9ybnM7CivkjaIgPCBuZXR0ZWRcLXZlaW5lZFwtd2luZG93XC1zaWxsOwor5IufIDwgdGhlXC13ZWlnaHRcLW9uXC1hXC1zdGVlbHlhcmQ7CivkirYgPCBhXC1yb3BlXC1mb3JcLWxlYWRpbmdcLWNhdHRsZTsKK+S4lueVjOihm+eUn+e1hOe5lCA8IHdvcmxkXC1oZWFsdGhcLW9yZ2FuaXphdGlvbjsKK+S8uuapnyA8IHRvXC13YXRjaFwtZm9yXC1vbmUnJ3NcLWNoYW5jZTsKK+SJlyA8IGFcLXJlY2VwdGFjbGVcLW9yXC1jb250YWluZXI7CivkhLggPCBncmFpbnNcLXByb2R1Y2luZ1wtbm9cLWZydWl0Owor5ISSIDwgcmlwZW5pbmdcLW9mXC1wYWRkeVwtb3JcLXJpY2U7Civkg4EgPCB1bmV2ZW5cLW9yXC1ydWdnZWRcLXRlcnJhaW5zOwor5IGUIDwgYmlnXC1leWVzXC1wcm90dWJlcmFudFwtZXllczsKK+O/sCA8IGR1cmFibGVcLWFuZFwtc29saWRcLWxlYXRoZXI7CivpoLjpg6ggPCB0aGVcLW5lY2tcLWFyZWFcLW9mXC10aGVcLWJvZHk7Civjv4IgPCBvYnN0cmFjdGlvblwtb2ZcLXRoZVwtYm93ZWxzOwor4761IDwgYVwtZGFya1wtY29sb3JlZFwtYmlydGhcLW1hcms7CivjvpwgPCB3ZWFrXC1icmVhdGhcLW9mXC1hXC1zaWNrXC1tYW47Civjvb4gPCBhXC1raW5kXC1vZlwtd29tYW4nJ3NcLWRpc2Vhc2U7CivpgJroqIroh6rli5XljJYgPCBjb21tdW5pY2F0aW9uc1wtYXV0b21hdGlvbjsKK+O4siA8IGFcLWtpbmRcLW9mXC1tb3VudGFpblwtY2F0dGxlOwor47evIDwgc21va2VcLWFuZFwtZHVzdFwtZXZlcnl3aGVyZTsKK+O2uiA8IHRoZVwtbGlnaHRcLW9yXC1nbG93XC1vZlwtZmlyZTsKK+O1vSA8IHRoZVwtc3RyZW5ndGhcLW9mXC1hXC1jdXJyZW50Owor47GlIDwgdGhlXC1ldmlsXC1zcGlyaXRzXC1jb21lXC1vdXQ7CivjsKYgPCB0b1wtYnJlYXRoXC13aXRoXC1tb3V0aFwtb3BlbjsKK+OwlCA8IGFcLWtpbmRcLW9mXC1lZGlibGVcLW11c2hyb29tOwor47COIDwgYVwtd29vZGVuXC1wZXN0bGVcLW9yXC1yYW1tZXI7CivjrZsgPCBhXC1raW5kXC1vZlwtY2xpbWJpbmdcLXBsYW50czsKK+OpoCA8IGFcLWZpZXJjZVwtb3JcLWJsb29keVwtYmF0dGxlOwor46abIDwgdG9cLXdhbGtcLWluXC1hXC1jb21wb3NlZFwtd2F5Owor6Z2i6Ieo5Zuw6ZujIDwgdG9cLWJlXC1mYWNlZFwtd2l0aFwtcHJvYmxlbXM7Civog4zlvbEgPCBhXC12aWV3XC1vZlwtc29tZWJvZHknJ3NcLWJhY2s7CivjoJ0gPCBsb2Z0eVwtYW5kXC1zdGVlcFwtbW91bnRhaW5zOwor46CQIDwgaGlnaFwtYW5kXC1wb2ludGVkXC1tb3VudGFpbjsKK+OemiA8IHRvXC1waWxlXC11cFwtbGF5ZXJcLWJ5XC1sYXllcjsKK+OcryA8IGFcLXdvcmRcLXRvXC1kZXNpZ25hdGVcLXdvbWFuOwor45yuIDwgdG9cLWdvXC1iZXlvbmRcLW5vcm1hbFwtbGltaXQ7CivkuI3li5nmraPmpa0gPCBub3RcLWVuZ2FnZVwtaW5cLWhvbmVzdFwtd29yazsKK+OakyA8IHRpZVwtYmVhbXNcLW9mXC1hXC1zbWFsbFwtYm9hdDsKK+eLoeiztCA8IHRvXC1kZW55XC1cKHRocm91Z2hcLXNvcGhpc21cKTsKK+OYjCA8IHRvXC1sYXVnaFwtd2l0aG91dFwtc3RvcHBpbmc7Civjl6YgPCBhXC1sb3VkXC1hbmRcLWNvbmZ1c2VkXC1ub2lzZTsKK+OXmiA8IHZleGluZ2x5XC12ZXJib3NlXC1vclwtd29yZHk7Civjl5UgPCB0aGVcLWNyb3dpbmdcLW9mXC1hXC1waGVhc2FudDsKK+OWhCA8IHNvdW5kXC1vZlwtY2FsbGluZ1wtY2hpY2tlbnM7CivjlZogPCBjbGF3c1wtb2ZcLWJpcmRzXC1vclwtYW5pbWFsczsKK+aEm+eQhuS4jeeQhiA8IGxvb2tcLWNvbGRcLWFuZFwtaW5kaWZmZXJlbnQ7CivjkLMgPCBoaWdoXC1hbmRcLWxldmVsXC1vblwtdGhlXC10b3A7Civororos6MgPCBzZWxsXC1vZmZcLVwob25lJydzXC1wcm9wZXJ0eVwpOwor5LiL5bel5aSrIDwgdG9cLXB1dFwtaW5cLXRpbWVcLWFuZFwtZW5lcmd5Owor5rG66LO9IDwgZmluYWxzXC1cKG9mXC1hXC1jb21wZXRpdGlvblwpOwor5p2/5pu4IDwgd3JpdGluZ1wtb25cLXRoZVwtYmxhY2tib2FyZDsKK+ePgOaWryA8IHBlcnRoXC1cKGNpdHlcLWluXC1hdXN0cmFsaWFcKTsKK+aUueWWhOmAmuioiiA8IHRvXC1pbXByb3ZlXC1jb21tdW5pY2F0aW9uczsKK+e4veWPg+isgOmVtyA8IFwobWlsaXRhcnlcKVwtY2hpZWZcLW9mXC1zdGFmZjsKK+aEm+aGkCA8IHNob3dcLXRlbmRlclwtYWZmZWN0aW9uXC1mb3I7CivmmrTmvLIgPCByaXNlXC1zdWRkZW5seVwtYW5kXC1zaGFycGx5Owor6YyE5YWxIDwgdG9cLXRha2VcLWRvd25cLWFcLWNvbmZlc3Npb247CivmnKzlrrYgPCBhXC1tZW1iZXJcLW9mXC10aGVcLXNhbWVcLWNsYW47CivpnaLoh6ggPCBiZVwtZmFjZWRcLXdpdGhcLVwoYVwtcHJvYmxlbVwpOwor6IOM5L+h5qOE576pIDwgYnJlYWtcLWZhaXRoXC13aXRoXC1zb21lYm9keTsKK+WAvOW+l+azqOaEj+eahOaYryA8IGl0JydzXC13b3J0aFwtbm90aW5nXC10aGF0XC5cLlwuOwor6Leo5ZyL5YWs5Y+4IDwgdHJhbnNuYXRpb25hbFwtY29ycG9yYXRpb247Civml6XmnKzkurogPCBqYXBhbmVzZVwtcGVyc29uXC1vclwtcGVvcGxlOwor5YWx5ZKM6buo5Lq6IDwgYVwtcmVwdWJsaWNhblwtcGFydHlcLW1lbWJlcjsKK+axoOa5ryA8IGxhcmdlXC1wb29sXC1pblwtYVwtYmF0aGhvdXNlOwor54Sh6ZmQ5pyfIDwgdW5saW1pdGVkXC1cKHRpbWVcKVwtZHVyYXRpb247CivnjY7li7UgPCByZXdhcmRcLVwoYXNcLWVuY291cmFnZW1lbnRcKTsKK+mghuW3riA8IFwodHJhZGVcLW9yXC1idWRnZXRcKVwtc3VycGx1czsKK+eSsOeQg+WumuS9jeezu+e1sSA8IGdsb2JhbFwtcG9zaXRpb25pbmdcLXN5c3RlbTsKK+WInemBuCA8IFwodXNcKVwtcHJpbWFyaWVzXC1cKGVsZWN0aW9uXCk7CivluJXomK3ljaEgPCBwYWxhbmthXC1cKGFcLXBlcnNvbmFsXC1uYW1lXCk7CivloLHpircgPCBzdWJtaXRcLWFuXC1leHBlbnNlXC1hY2NvdW50Owor6JyAIDwgbmFtZVwtb2ZcLWFuXC1hbmNpZW50XC1zdGF0ZTsKK+a0myA8IHJpdmVyXC1pblwtc2hhbnhpXC1wcm92aW5jZTsKK+WPlCA8IGZhdGhlcicnc1wteW91bmdlclwtYnJvdGhlcjsKK+e1uSA8IGtpbmRcLW9mXC10aGlja1wtc3RpZmZcLXNpbGs7CivnvakgPCBiYXNrZXRcLWZvclwtY2F0Y2hpbmdcLWZpc2g7CivlpLcgPCBhbmNpZW50XC1iYXJiYXJpYW5cLXRyaWJlczsKK+egsCA8IHNvdW5kXC1vZlwtY3Jhc2hpbmdcLXN0b25lczsKK+WTjiA8IGludGVyamVjdGlvblwtb2ZcLXN1cnByaXNlOwor5pyUIDwgZmlyc3RcLWRheVwtb2ZcLWx1bmFyXC1tb250aDsKK+aPoyA8IHB1dFwtdGhpbmdzXC11bmRlclwtY2xvdGhlczsKK+W1iyA8IG9tZWlcLW1vdW50YWluXC1pblwtc2ljaHVhbjsKK+e8iSA8IHRvXC1zZXdcLWluXC1jbG9zZVwtc3RpdGNoZXM7CivlmbYgPCB1c2VkXC1pblwtdHJhbnNsaXRlcmF0aW9uczsKK+aOsCA8IHRvXC1icmVha1wtd2l0aFwtYm90aFwtaGFuZHM7CivpnIYgPCBhXC1zdWRkZW5cLXBlYWxcLW9mXC10aHVuZGVyOwor5ryzIDwgbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtaGVuYW47Civlt7MgPCBzaXh0aFwtb2ZcLXR3ZWx2ZVwtYnJhbmNoZXM7Civll50gPCBjYWNrbGluZ1wtb2ZcLWZvd2xzXC10b1wtZ2FnOwor5aeYIDwgaWxsaWNpdFwtc2V4dWFsXC1yZWxhdGlvbnM7CivpnI8gPCBmYWxsaW5nXC1vZlwtc25vd1wtYW5kXC1yYWluOwor6YO4IDwgY291bnR5XC1pblwtaGViZWlcLXByb3ZpbmNlOwor5ZGmIDwgdGhlXC1ibGVhdGluZ1wtb2ZcLXRoZVwtZGVlcjsKK+aOriA8IHRvXC1iZWFyXC1vblwtdGhlXC1zaG91bGRlcnM7CivojoYgPCBhXC1raW5kXC1vZlwtbGVnZW5kYXJ5XC10cmVlOwor6ZihIDwgZm9vdHBhdGhzXC1iZXR3ZWVuXC1maWVsZHM7CivpuKogPCBzcGVjaWVzXC1vZlwtdGFpd2FuXC1waWdlb247CivmsJAgPCBuYW1lXC1vZlwtYW5cLWFuY2llbnRcLXRyaWJlOwor5ZGkIDwgcHVyaW5lXC1pblwtY2hlbVwuXC1jb21wb3VuZDsKK+WslyA8IHN1Y2Nlc3Npb25cLXRvXC10aGVcLXRocm9uZTsKK+injyA8IG1lZXRcLW9yXC1zZWVcLXVuZXhwZWN0ZWRseTsKK+a/riA8IGNvdW50eVwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+mDtCA8IGNvdW50eVwtaW5cLWh1bmFuXC1wcm92aW5jZTsKK+i9viA8IGxvd1wtcmVhclwtcG9ydGlvblwtb2ZcLWNhcnQ7CivnqJ4gPCBncmFpblwtcmVhZHlcLWZvclwtZ3JpbmRpbmc7Civpg6cgPCBjb3VudHlcLWluXC1odWJlaVwtcHJvdmluY2U7CivoubwgPCB3ZWJiZWRcLWZlZXRcLW9mXC13YXRlcmZvd2w7CivnlJEgPCBib2lsZXJcLWZvclwtc3RlYW1pbmdcLXJpY2U7CivlppcgPCB3aWZlXC1vZlwtbW90aGVyJydzXC1icm90aGVyOwor5rWgIDwgbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtaHViZWk7Civps5QgPCBzd2ltbWluZ1wtYmxhZGRlclwtb2ZcLWZpc2g7Civnr4wgPCBhbmNpZW50XC1tdXNpY1wtaW5zdHJ1bWVudDsKK+enlSA8IGVtcHR5XC1ncmFpblwtb3JcLXJpY2VcLWh1c2s7CivnkJogPCBvcm5hbWVudGFsXC1nZW1zXC1mb3JcLWJlbHQ7CivpsrUgPCBjcnlwdG9icmFuY2h1c1wtamFwb25pY3VzOwor6ImoIDwgbG9uZ1wtYW5kXC1uYXJyb3dcLXdhclwtYm9hdDsKK+a2kSA8IHJpdmVyXC1pblwtc2hhbnNpXC1wcm92aW5jZTsKK+mbqSA8IG9mZmVyXC1zYWNyaWZpY2VcLWZvclwtcmFpbjsKK+S9viA8IGFcLXJvd1wtb3JcLWZpbGVcLW9mXC1kYW5jZXJzOwor57yCIDwgdGhlXC13b29mXC1vZlwtYVwtd292ZW5cLWl0ZW07CivoibQgPCB0aGVcLWNvdW50ZW5hbmNlXC1jaGFuZ2luZzsKK+a7jyA8IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLWhlYmVpOwor5Lq65rCR5bmjIDwgY2hpbmVzZVwtdW5pdFwtb2ZcLWN1cnJlbmN5Owor6aas5Y+v56aP6Z+zIDwgZ29zcGVsXC1hY2NvcmRpbmdcLXRvXC1tYXJrOwor5rWB5rCT572qIDwgdGhlXC1jcmltZVwtb2ZcLWhvb2xpZ2FuaXNtOwor5Z+O6ZecIDwgYXJlYVwtb3V0c2lkZVwtYVwtY2l0eVwtZ2F0ZTsKK+mMhOmfs+apnyA8IFwodGFwZVwpXC1yZWNvcmRpbmdcLW1hY2hpbmU7CivpgYvnrpcgPCBcKG1hdGhlbWF0aWNhbFwpXC1vcGVyYXRpb247Civlt57plbcgPCBnb3Zlcm5vclwtXChvZlwtYVwtdXNcLXN0YXRlXCk7Civmr4/lubTkuIDluqYgPCBvbmNlXC1hXC15ZWFyXC1cKGV2ZXJ5XC15ZWFyXCk7Civln5/lkI3oqLvlhoogPCBkb21haW5cLW5hbWVcLXJlZ2lzdHJhdGlvbjsKK+S7o+S5i+S7pSA8IFwoaGFzXC1iZWVuXClcLXJlcGxhY2VkXC13aXRoOwor6YOo5bGsIDwgYWZmaWxpYXRlZFwtdG9cLWFcLW1pbmlzdHJ5Owor5byV5pOOIDwgZW5naW5lXC1cKHRyYW5zbGl0ZXJhdGlvblwpOwor5YW16LK056We6YCfIDwgc3BlZWRcLWlzXC1wcmVjaW91c1wtaW5cLXdhcjsKK+iuiuaIsuazlSA8IHBlcmZvcm1cLWNvbmp1cmluZ1wtdHJpY2tzOwor5aSa6YKK5ZCI5L2cIDwgbXVsdGlsYXRlcmFsXC1jb29wZXJhdGlvbjsKK+eZvOihjOmhjSA8IFwocGVyaW9kaWNhbFwpXC1jaXJjdWxhdGlvbjsKK+eZu+iomCA8IHRvXC1yZWdpc3RlclwtXChvbmUnJ3NcLW5hbWVcKTsKK+WNgeS4ieaXpSA8IHRoaXJ0aWV0aFwtZGF5XC1vZlwtYVwtbW9udGg7CivluYDpppblrprnlYznrKYgPCBzdGFydFwtb2ZcLWZyYW1lXC1kZWxpbWl0ZXI7CivmipXmlL7luILloLQgPCB0b1wtcHV0XC1zdGhcLW9uXC10aGVcLW1hcmtldDsKK+apn+e1hCA8IGZsaWdodFwtY3Jld1wtXChvblwtYVwtcGxhbmVcKTsKK+m3niA8IHRoZVwtdHVycXVvaXNlXC1raW5nZmlzaGVyOwor5LiL5Y2K6LqrIDwgbG93ZXJcLWhhbGZcLW9mXC1vbmUnJ3NcLWJvZHk7CivptYEgPCBteWN0aWNvcmF4XC1wcmFzaW5vc2NlbGVzOwor6I2S54Sh5Lq654WZIDwgZGVzb2xhdGVcLWFuZFwtdW5pbmhhYml0ZWQ7CivprrAgPCBhXC1zbWFsbFwta2luZFwtb2ZcLXN0dXJnZW9uOwor6YG85a+nIDwgbGlhb25pbmdcLXByb3ZpbmNlXCxcLWNoaW5hOwor6augIDwgc2hhdmVcLWhlYWRcLWFzXC1wdW5pc2htZW50Owor6aiVIDwgbmFtZVwtb2ZcLWFcLWZhYnVsb3VzXC1ob3JzZTsKK+eFp+W4uCA8IFwoYnVzaW5lc3NcLFwtZXRjXClcLWFzXC11c3VhbDsKK+mfgiA8IGFcLXNhZGRsZVwtZmxhcFwuXC10cmFwcGluZ3M7Civlm6DnibnntrLmj5DkvpvllYYgPCBpbnRlcm5ldFwtc2V2aWNlXC1wcm92aWRlcjsKK+e0hOe/sOemj+mfsyA8IGdvc3BlbFwtYWNjb3JkaW5nXC10b1wtam9objsKK+mZtCA8IGFcLXBhcmFwZXRcLW9uXC1hXC1jaXR5XC13YWxsOwor6ZekIDwgd2FsbFwtYXJvdW5kXC1tYXJrZXRcLXBsYWNlOwor5Y2w5q2Q6Kqe6KiAIDwgaW5kb1wtZXVyb3BlYW5cLVwobGFuZ3VhZ2VcKTsKK+aSq+aRuCA8IGdlbnRseVwtY2FyZXNzXC1hbmRcLXN0cm9rZTsKK+WIh+aWtyA8IGN1dFwtb2ZmXC1cKGFcLXN1cHBseVwsXC1ldGNcLlwpOwor57ay57Wh5pON5L2c57O757WxIDwgbmV0d29ya1wtb3BlcmF0aW5nXC1zeXN0ZW07Civnv5Lku6XngrrluLggPCBiZVwtYWNjdXN0b21lZFwtb3JcLXVzZWRcLXRvOwor5YW16I2S6aas5LqCIDwgdHVybW9pbFwtYW5kXC1jaGFvc1wtb2ZcLXdhcjsKK+W7uuWItiA8IG9yZ2FuaXphdGlvbmFsXC1zdHJ1Y3R1cmU7CivkuI3mib/oqo3kuLvnvqkgPCBwb2xpY3lcLW9mXC1ub25yZWNvZ25pdGlvbjsKK+mAgOW9uSA8IHJldGlyZVwtZnJvbVwtdGhlXC1taWxpdGFyeTsKK+mBleWPjSA8IHRvXC12aW9sYXRlXC1cKGFcLWxhd1wsXC1lXC5nXC5cKTsKK+W5q+W7miA8IGhlbHBcLWluXC10aGVcLW1lc3NcLWtpdGNoZW47CivkuI3li5XogbLoibIgPCBtYWludGFpblwtb25lJydzXC1jb21wb3N1cmU7Civmta7pu57pgYvnrpcgPCBmbG9hdGluZ1wtcG9pbnRcLW9wZXJhdGlvbjsKK+i0kSA8IFw8YWJicnZcPlwtamlhbmd4aVwtcHJvdmluY2U7Civoo5znqIUgPCBwYXlcLWFcLXRheFwtb25lXC1oYXNcLWV2YWRlZDsKK+iooSA8IHRvXC1jaGFudFwtdG9cLW1vYW5cLXRvXC1zaWdoOwor6KWy5pOKIDwgXChtYWtlXC1hXClcLXN1cnByaXNlXC1hdHRhY2s7CivlhafmlL/pg6jplbcgPCBtaW5pc3Rlclwtb2ZcLXRoZVwtaW50ZXJpb3I7Civnmb3mt6ggPCBcKG9mXC1za2luXClcLWZhaXJcLWFuZFwtY2xlYXI7Civom4EgPCBwb21wb25pYVwtbWFjdWxhdGlvY29sbGlzOwor5beh5p+lIDwgdG9cLWdvXC1hcm91bmRcLWFuZFwtaW5zcGVjdDsKK+iYgCA8IGZhbGxpbmdcLWxlYXZlc1wtYW5kXC1iYXJrczsKK+iXuiA8IHJ1c2hcLXVzZWRcLWluXC1tYWtpbmdcLW1hdHM7CivlhbXmm7ggPCBhXC1ib29rXC1vblwtdGhlXC1hcnRcLW9mXC13YXI7Civoj7QgPCBzbWFsbFwtYnVkZGhpc3RcLW1vbmFzdGVyeTsKK+m8u+mHneeZguazlSA8IG5vc2VcLWFjdXB1bmN0dXJlXC10aGVyYXB5Owor6I6UIDwgZnJpdGlsbGFyaWFcLXZlcnRpY2lsbGF0YTsKK+iMvCA8IGNocnlzYW50aGVtdW1cLWNvcm9uYXJpdW07CivoiaUgPCBhblwtb2FyXC1vclwtcGFkZGxlXC5cLXRvXC1yb3c7CivnlKLpircgPCBwcm9kdWN0aW9uXC1hbmRcLW1hcmtldGluZzsKK+iGmSA8IGNhbGxvdXNcLXNraW5cLW9uXC10aGVcLWZlZXQ7CivohZwgPCBxdWlja2VuaW5nXC1vZlwtdGhlXC1mb2V0dXM7CivogrMgPCB0aGVcLWNvcm5lcnNcLW9mXC10aGVcLW1vdXRoOwor6ZeM5bC+IDwgYXBwZW5kaXhcLVwoaW5cLWh1bWFuXC1ib2R5XCk7Civnv5sgPCBsb29rXC1vZlwtcnVtcGxlZFwtZmVhdGhlcnM7CivnvZ0gPCBuZXRcLWZvclwtY2F0Y2hpbmdcLXJhYmJpdHM7CivluYXlk6EgPCBhXC1jb3VudHJ5JydzXC1zdXJmYWNlXC1hcmVhOwor6Jmb5pOs55Kw5aKDIDwgdGhlb3JoZXRpY2FsXC1lbnZpcm9ubWVudDsKK+aSpeS7mCA8IGFwcHJvcHJpYXRlXC1zdW1cLW9mXC1tb25leTsKK+e3jCA8IHRhc3NlbHNcLWhhbmdpbmdcLWZyb21cLWhhdDsKK+WvhuWIh+azqOaEjyA8IGNsb3NlXC1hdHRlbnRpb25cLVwodG9cLXN0aFwpOwor5ZyL54efIDwgc3RhdGVcLXJ1blwtXChjb21wYW55XCxcLWV0Y1wpOwor5ZyW5YOP55So5oi25LuL6Z2iIDwgZ3JhcGhpY2FsXC11c2VyXC1pbnRlcmZhY2U7CivnrbggPCBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC1ob25hbjsKK+mdouWaruWwjeixoeiqnuiogCA8IG9iamVjdFwtb3JpZW50ZWRcLWxhbmd1YWdlOwor5pCN5aSxIDwgYVwtXChmaW5hbmNpYWxcLFwtZXRjXC5cKVwtbG9zczsKK+i+puWFrCA8IGhhbmRsZVwtb2ZmaWNpYWxcLWJ1c2luZXNzOwor5qWK55m+57+w5aSn5a24IDwgYnJpZ2hhbVwteW91bmdcLXVuaXZlcnNpdHk7CivnkqAgPCBhXC1waWVjZVwtb2ZcLXByZWNpb3VzXC1qYWRlOwor5462IDwgbmFtZVwtb2ZcLW9uZVwta2luZFwtb2ZcLWphZGU7CivnjZ4gPCBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWRvZzsKK+S4jeaLmOS4gOagvCA8IG5vdFwtc3RpY2tcLXRvXC1vbmVcLXBhdHRlcm47CivkvZnpnIcgPCBcKGVhcnRocXVha2VcKVwtYWZ0ZXJzaG9ja3M7CivnlZrnrpUgPCBhXC1iYW1ib29cLW9yXC13aWNrZXJcLXNjb29wOwor54GoIDwgdGhlXC1yaXZlclwtZ2FuXC1pblwtamlhbmd4aTsKK+a/siA8IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLWh1bmFuOwor5a6M5YWo5oeC5b6XIDwgdG9cLXVuZGVyc3RhbmRcLWNvbXBsZXRlbHk7CivnqoHpoa8gPCBtYWtlXC1zb21ldGhpbmdcLXN0YW5kXC1vdXQ7CivkuI3lubPliYfps7QgPCB3aGVyZVwtdGhlcmVcLWlzXC1pbmp1c3RpY2U7CivmtKcgPCBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1ob25hbjsKK+aguOS4jeaTtOaVoyA8IG51Y2xlYXJcLW5vbnByb2xpZmVyYXRpb247Civmj6HlipsgPCBcKHN0cmVuZ3RoXC1vZlwtb25lJydzXClcLWdyaXA7CivmqKcgPCB6YW50aG94eWx1bVwtYWlsYW50aG9pZGVzOwor5qakIDwgcGVyY2hcLWZvclwtZm93bHNcLXJvb3N0XC1vbjsKK+WFp+aUv+mDqCA8IG1pbmlzdHJ5XC1vZlwtdGhlXC1pbnRlcmlvcjsKK+WFseWQjOmWmOmBk+S7i+mdoiA8IGNvbW1vblwtZ2F0ZXdheVwtaW50ZXJmYWNlOwor5pO66ISr5Y2x5qmfIDwgdG9cLWJyZWFrXC1vdXRcLW9mXC1hXC1jcmlzaXM7CivmoIIgPCBhXC1raW5kXC1vZlwtZXZlcmdyZWVuXC10cmVlOwor5a+M5biD6LO054m5IDwgZnVsbGJyaWdodFwtXChzY2hvbGFyc2hpcFwpOwor5pehIDwgY2hva2VcLW9uXC1zb21ldGhpbmdcLWVhdGVuOwor6aas6KOhIDwgbWFsaVwtXChuYW1lXC1vZlwtYVwtY291bnRyeVwpOwor5pKLIDwgdG9cLXJ1YlwtYmV0d2VlblwtdGhlXC1oYW5kczsKK+eXheaFiyA8IG1vcmJpZFwtb3JcLWFibm9ybWFsXC1zdGF0ZTsKK+aOp+WItiA8IHRvXC1cKGhhdmVcKVwtY29udHJvbFwtXChvdmVyXCk7CivmkqXkuoLlj43mraMgPCBicmluZ1wtb3JkZXJcLW91dFwtb2ZcLWNoYW9zOwor5oOMIDwgdG9cLWJlYXJcLWFcLWdydWRnZVwtYWdhaW5zdDsKK+S9s+iDvSA8IGNhbm9uXC1cKGphcGFuZXNlXC1jb21wYW55XCk7Civnl4XlrrYgPCBhXC1wYXRpZW50XC1hbmRcLWhpc1wtZmFtaWx5Owor55aR5oORIDwgXChhXC1zZW5zZVwtb2ZcKVwtdW5jZXJ0YWludHk7CivltLYgPCBuYW1lXC1vZlwtYVwtbGVnZW5kYXJ5XC1oaWxsOwor5bSBIDwgYVwtcGxhY2VcLWluXC10YWl3YW5cLXRhaW5hbjsKK+WwniA8IGZ1ZWxcLXVzZWRcLWZvclwtc2FjcmlmaWNlczsKK+eEoem7qOa0viA8IHBvbGl0aWNhbGx5XC11bmFmZmlsaWF0ZWQ7CivmiZPniYwgPCB0b1wtcGxheVwtbWFoam9uZ1wtb3JcLWNhcmRzOwor5aWeIDwgdGhlXC1zdHJpZGVcLW1hZGVcLWJ5XC1hXC1tYW47CivlpJcgPCB0b1wtdHVyblwtb3Zlclwtd2hlblwtYXNsZWVwOwor6K6K6Zu756uZIDwgXCh0cmFuc2Zvcm1lclwpXC1zdWJzdGF0aW9uOwor5YGa5a6iIDwgdG9cLWJlXC1hXC1ndWVzdFwtb3JcLXZpc2l0b3I7CivlronnrKzmlq/lsbEgPCB0aGVcLWFuZGVzXC1tb3VudGFpblwtcmFuZ2U7Civlh5wgPCBzaGl2ZXJcLXdpdGhcLWNvbGRcLW9yXC1mZWFyOwor5YOwIDwgYW5jaWVudFwtYWJvcmlnaW5hbFwtdHJpYmU7Civnmb7nhYnmiJDpi7wgPCBiZVwtdGVtcGVyZWRcLWludG9cLWFcLXN0ZWVsOwor6KGM5L2/IDwgZXhlcmNpc2VcLVwoYVwtcmlnaHRcLFwtZXRjXC5cKTsKK+ethuaMuiA8IFwoc3RhbmRpbmdcKVwtdmVyeVwtc3RyYWlnaHQ7CivliIbkvYjlvI/ntZDmp4sgPCBkaXN0cmlidXRlZFwtYXJjaGl0ZWN0dXJlOwor5a6J56WeIDwgY2FsbVwtXChzb290aGVcKVwtdGhlXC1uZXJ2ZXM7CivogbPogqkgPCB0b1wtc2hydWdcLW9uZScnc1wtc2hvdWxkZXJzOwor5LqDIDwgbmFtZVwtb2ZcLWFcLWtpbmRcLW9mXC1hbmltYWw7CivkubogPCBwYWludGluZ1wtdG9vbFwtcGxhY2VcLW5hbWU7CivkubYgPCBrb3JlYW5cLXBsYWNlXC1uYW1lXC1waG9saGE7CivktYIgPCB0b1wtZ3JpbmRcLXdoZWF0XC10b1wtcG93ZGVyOwor5LKzIDwgYmlyZHNcLWZseWluZ1wtdXBcLWFuZFwtZG93bjsKK+Wci+WLmeasoeWNvyA8IHVuZGVyXC1zZWNyZXRhcnlcLW9mXC1zdGF0ZTsKK+SymyA8IGFuXC1hbmNpZW50XC1uYW1lXC1mb3JcLXR1bmE7CivksoQgPCBhXC1raW5kXC1vZlwtZmlpc2hcLWluXC1vY2VhbjsKK+SwjSA8IGFcLWtpbmRcLW9mXC1kYXJrXC1yZWRcLXBhaW50Owor5LCGIDwgYmVhdXRpZnVsXC1hbmRcLWhhaXJ5XC1tYW5lOwor5K+WIDwgdGhlXC1tdXNjbGVzXC1vZlwtdGhlXC10aGlnaDsKK+WNiuS/oeWNiueWkSA8IGhhbGZcLWJlbGlldmVcLFwtaGFsZlwtZG91YnQ7CivkrLMgPCBjYWtlc1wtbWFkZVwtb2ZcLXJpY2VcLWZsb3VyOwor5KuvIDwgdG9cLXRha2VcLWFcLWNhc3VhbFwtbG9va1wtYXQ7Civmt7HnqbogPCBkZWVwXC1zcGFjZVwtXChvdXRlclwtc3BhY2VcKTsKK+SqgCA8IGtub3duXC10b2dldGhlclwtYXNcLXNhZGRsZTsKK+SokiA8IHNvdW5kXC1vZlwtdGhlXC13YXRlclwtZHJvcHM7CivllJDntI0gPCB0YW5uZXJcLVwoZW5nbGlzaFwtc3VybmFtZVwpOwor5KaoIDwgYVwtZG9vclwtY3VydGFpblwtb3JcLXNjcmVlbjsKK+SkryA8IGNvbnRhaW5lclwtZm9yXC10aGlja1wtc291cDsKK+acqOS5g+S8iiA8IG11bW15XC1cKHByZXNlcnZlZFwtY29ycHNlXCk7CivkoY0gPCB0aGVcLWxpbmNoXC1waW5cLW9mXC1hXC1zaGVlbDsKK+SflyA8IHRvXC1zdGFuZFwtZm9yXC1hXC1sb25nXC10aW1lOwor5J+DIDwgdG9cLW1vdmVcLW9yXC1tYXJjaFwtc3dpZnRseTsKK+SatiA8IHRvXC1zY29sZFwtaW5cLWFcLWxvdWRcLXZvaWNlOwor5JmcIDwgbGVnZW5kYXJ5XC1tb3VudGFpblwtZGVpdHk7CivkmYggPCBhXC1sb29zZVwtZ2FybWVudFwtb3JcLWNsb2FrOwor5JmHIDwgY2xvdGhlc1wtb2ZcLWNvYXJzZVwtZmFicmljOwor5JeCIDwgZGllbXljdHlsdXNcLXB5cnJob2dhc3RlcjsKK+SUoyA8IGFcLXRyaWJlXC1pblwtYW5jaWVudFwtdGltZXM7Civkk7QgPCBlZGlibGVcLWZ1bmd1c1wtZnJvbVwtdHJlZXM7CivkkY4gPCBzb3VwXC1vZlwtcGlnJydzXC1pbnRlc3RpbmVzOwor5JC7IDwgYmlnXC1waWVjZXNcLW9mXC1kcmllZFwtbWVhdDsKK+SQuSA8IHBlcnNlcnZlZFwtYW5kXC1kcmllZFwtbWVhdDsKK+SQsCA8IHRvXC1vZmZlclwtZm9vZFwtYXNcLXRyaWJ1dGU7CivlpJbkuqTpg6ggPCBmb3JlaWduXC1hZmZhaXJzXC1taW5pc3RyeTsKK+SQgiA8IGZhdFwtb2ZcLWFuaW1hbHNcLW9yXC1wbGFudHM7CivkjrUgPCB0b1wtbG9va1wtc3RyYWlnaHRcLWZvcndhcmQ7CivkipAgPCBmbHVmZnlcLXN0dWZmZWRcLWR1bXBsaW5nczsKK+SKjSA8IHRoaWNrXC1jb25nZWVcLW9yXC1wb3JyaWRnZTsKK+aMgeS4jeWQjOaUv+imiyA8IFwocG9saXRpY2FsbHlcKVwtZGlzc2VudGluZzsKK+SHjyA8IHRvXC1waWxlXC1vbmVcLXVwb25cLWFub3RoZXI7CivkhJwgPCBoYXBwaW5lc3NcLWFuZFwtd2VsbFwtYmVpbmc7CivkhJYgPCB1c2VkXC1pblwtbmFtZVwtb2ZcLWFcLXBlcnNvbjsKK+SDoiA8IG5hbWVcLW9mXC1hXC1tb3VudGFpblwtbG9mdHk7CivkgYcgPCB0b1wtbG9va1wtZm9yXC1hXC1zaG9ydFwtdGltZTsKK+SAqyA8IG5hcnJvd1wtYW5kXC1kaW1cLWV5ZVwtc2lnaHQ7Civjv7ogPCBqdXR0aW5nXC1vblwtdGhlXC1lcGlkZXJtaXM7CivlkYjoq4sgPCB0b1wtc3VibWl0XC1cKHRvXC1zdXBlcmlvcnNcKTsKK+O9kiA8IHRoZVwtY2hpbGRyZW5cLW9mXC1hXC1zaXN0ZXI7CivjvL8gPCB0aGVcLWJyaWNrXC13YWxsXC1vZlwtYVwtd2VsbDsKK+O8myA8IGxvbmdcLW5lY2tlZFwtd2luZVwtdmVzc2VsczsKK+O7qiA8IGFcLWtpbmRcLW9mXC1qYWRlXC1maW5lXC1qYWRlOwor47aFIDwgZHJpZWRcLXVwXC1tb3VudGFpblwtY3JlZWtzOwor5LiK6Ki0IDwgYXBwZWFsXC1cKGFcLWp1ZGljaWFsXC1jYXNlXCk7CivjtaIgPCBhXC1tYXJzaFwtaW5cLWFuY2llbnRcLXRpbWVzOwor47SwIDwgYVwtcml2ZXJcLWluXC1hbmNpZW50XC10aW1lczsKK+aHt+W/tSA8IHRvXC1jaGVyaXNoXC10aGVcLW1lbW9yeVwtb2Y7Civjs40gPCBhXC1wbGFjZVwtaW5cLWFuY2llbnRcLXRpbWVzOwor47OKIDwgdGhlXC1mbG93aW5nXC1vZlwtdGhlXC13YXRlcjsKK+OyiiA8IHRvXC11bmRlcnN0YW5kXC10aG9yb3VnaGx5Owor47C+IDwgc29uZ3NcLW9mXC10aGVcLXBlb3BsZVwtb2ZcLealmjsKK+OwvSA8IHRvXC1leGVydFwtb25lc2VsZlwtdG9cLXllbGw7Civjr6sgPCBhXC13YXR0bGVcLW9yXC1iYW1ib29cLWZlbmNlOwor466mIDwgYnJhbmNoZXNcLWdyb3dpbmdcLXVwd2FyZHM7Civnibnpu54gPCBjaGFyYWN0ZXJpc3RpY1wtXChmZWF0dXJlXCk7CivlrZfmr40gPCBsZXR0ZXJcLVwob2ZcLXRoZVwtYWxwaGFiZXRcKTsKK+OqmyA8IHRvXC1wb3VuZFwtcm9ja3NcLXRvXC1waWVjZXM7CivjqpkgPCB0b1wtZ29cLXRvXC10aGVcLXZlcnlcLXNvdXJjZTsKK+OprSA8IHRvXC1kaXN0dXJiXC1vclwtdG9cLWFnaXRhdGU7Civmi5TngavnvZDlhZIgPCBkZXRhY2hhYmxlXC1zdG92ZVwtY2hpbW5leTsKK+WQjOisgCA8IHRvXC1jb25zcGlyZVwtd2l0aFwtc29tZW9uZTsKK+OhqiA8IHRoZVwtdmFybmlzaFwtb25cLXRoZVwtZmxvb3I7CivjoacgPCB0b1wtc3RyZXRjaFwtb3BlblwtcGFpbnRpbmc7CivjoIcgPCBuYW1lXC1vZlwtYVwtbW91bnRhaW5cLXJpZGdlOwor5qGD5ZySIDwgdGFveXVhblwtXChjaXR5XC1pblwtdGFpd2FuXCk7CivjnL8gPCBuYW1lXC1vZlwtYVwtZmlzaFwtaW5cLWxlZ2VuZDsKK+axn+mdoiA8IHRoZVwtc3VyZmFjZVwtb2ZcLXRoZVwtcml2ZXI7Civjl6kgPCBzb3VuZFwtb2ZcLWVuZHVyZVwtY29sZG5lc3M7Civjl6cgPCB0b1wtc2NvbGRcLXdpdGhcLWxvdWRcLXZvaWNlOwor5Y+k5biM6IeY6KqeIDwgYW5jaWVudFwtZ3JlZWtcLVwobGFuZ3VhZ2VcKTsKK+OToSA8IHRoZVwtbWlkZGxlXC1wYXJ0XC1vZlwtYVwtYm93Owor45CoIDwgYVwta2luZFwtb2ZcLWZpc2hcLWluXC1sZWdlbmQ7CivpgbLmtannlLAgPCBjaGluZXNlXC1kZWZlbnNlXC1taW5pc3RlcjsKK+eikemhjSA8IHRoZVwtdG9wXC1wYXJ0XC1vZlwtYVwtdGFibGV0Owor5Ly05aWPIDwgdG9cLWFjY29tcGFueVwtXChtdXNpY2FsbHlcKTsKK+WMl+a6q+W4tiA8IHRoZVwtbm9ydGhcLXRlbXBlcmF0ZVwtem9uZTsKK+aJk+mbu+ipsSA8IHRvXC1tYWtlXC1hXC10ZWxlcGhvbmVcLWNhbGw7Civlj7Pnv7wgPCBcKHBvbGl0aWNhbGx5XClcLXJpZ2h0XC13aW5nOwor5rWZ5rGfIDwgemhlamlhbmdcLXByb3ZpbmNlXCxcLWNoaW5hOwor5Lq65rCR6Kej5pS+6LuNIDwgcGVvcGxlJydzXC1saWJlcmF0aW9uXC1hcm15Owor6K2Y6KaLIDwga25vd2xlZGdlXC1hbmRcLWV4cGVyaWVuY2U7CivosrfluLMgPCB0b1wtc2hvd1wtcmVzcGVjdFwtXChmb3JcLXNiXCk7Civmmpfnrq0gPCBhdHRhY2tcLWJ5XC1hXC1oaWRkZW5cLWVuZW15Owor5rex5ZyzIDwgc2hlbnpoZW5cLVwoY2l0eVwtaW5cLWNoaW5hXCk7CivnqIvluqYgPCBkZWdyZWVcLVwobGV2ZWxcLW9yXC1leHRlbnRcKTsKK+Wkp+mXnCA8IFwocmVhY2hcLWFcKVwtY3JpdGljYWxcLXBvaW50Owor5b6e5aSW6KGo5L6G55yLIDwgbG9va2luZ1wtZnJvbVwtdGhlXC1vdXRzaWRlOwor6aCt54mIIDwgXChuZXdzcGFwZXInJ3NcKVwtZnJvbnRcLXBhZ2U7CivljYPntbLokKznuLcgPCBsaW5rZWRcLWluXC1jb3VudGxlc3NcLXdheXM7CivmmKXoga8gPCBzcHJpbmdcLWZlc3RpdmVsXC1jb3VwbGV0czsKK+WFrOecvumbu+S/oee2sui3ryA8IHB1YmxpY1wtdGVsZXBob25lXC1uZXR3b3JrOwor5Lqk5o+b6Jmb6Zu76LevIDwgc3dpdGNoZWRcLXZpcnR1YWxcLWNpcmN1aXQ7Civku6XkvoYgPCBzaW5jZVwtXChhXC1wcmV2aW91c1wtZXZlbnRcKTsKK+iTruiKsSA8IGxvdHVzXC1cKGNvbXB1dGVyXC1jb21wYW55XCk7CivkuI3ml6UgPCB3aXRoaW5cLXRoZVwtbmV4dFwtZmV3XC1kYXlzOwor6KuS6KejIDwgXChyZWFjaFwpXC1hblwtdW5kZXJzdGFuZGluZzsKK+egtOWcn+WFuOemriA8IGdyb3VuZFwtYnJlYWtpbmdcLWNlcmVtb255Owor5pWZ5a245qmf5qeLIDwgZWR1Y2F0aW9uYWxcLW9yZ2FuaXphdGlvbjsKK+S4jemBuuS9meWKmyA8IHNwYXJlXC1ub1wtcGFpbnNcLW9yXC1lZmZvcnQ7CivooajnpLrmlazmhI8gPCByZXNwZWN0ZnVsXCxcLXNob3dcLXJlc3BlY3Q7Civok4vnq6AgPCB0b1wtYWZmaXhcLWFcLXNlYWxcLVwodG9cLXN0aFwpOwor5q2i55eb5rOVIDwgbWV0aG9kXC1vZlwtcmVsaWV2aW5nXC1wYWluOwor6Ke46Zu7IDwgdG9cLWdldFwtYW5cLWVsZWN0cmljXC1zaG9jazsKK+S4u+WLlSA8IFwodG9cLXRha2VcLXRoZVwpXC1pbml0aWF0aXZlOwor6Lev5Yqg56aP6Z+zIDwgZ29zcGVsXC1hY2NvcmRpbmdcLXRvXC1sdWtlOwor6Ki06KqqIDwgdGVsbFwtXCh0b1wtYW5vdGhlclwtcGVyc29uXCk7CivnuL3ntbEgPCBwcmVzaWRlbnRcLVwob2ZcLWFcLWNvdW50cnlcKTsKK+WgsemgrSA8IG1hc3RoZWFkXC1cKG9mXC1hXC1uZXdzcGFwZXI7CivljZfmspkgPCBuYW5zaGFcLVwoc3ByYXRseVwpXC1pc2xhbmRzOwor6YCa6YGTIDwgXChjb21tdW5pY2F0aW9uc1wpXC1jaGFubmVsOwor5pS/57i+IDwgXChwb2xpdGljYWxcKVwtYWNoaWV2ZW1lbnRzOwor556lIDwgdGFrZVwtZmxlZXRpbmdcLWdsYW5jZVwtYXQ7Civlt54gPCBhZG1pbmlzdHJhdGl2ZVwtZGl2aXNpb247CivlkKcgPCBlbXBoYXRpY1wtZmluYWxcLXBhcnRpY2xlOwor5p+QIDwgY2VydGFpblwtdGhpbmdcLW9yXC1wZXJzb247CivnpaggPCBzbGlwXC1vZlwtcGFwZXJcLW9yXC1iYW1ib287CivogLYgPCB1c2VkXC1pblwtdHJhbnNsaXRlcmF0aW9uOwor5Y6YIDwgdGhvdXNhbmR0aFwtcGFydFwtb2ZcLXRhZWw7Civlva0gPCBuYW1lXC1vZlwtYW5jaWVudFwtY291bnRyeTsKK+iCtCA8IGNvb2tlZFwtb3JcLXByZXBhcmVkXC1tZWF0Owor5L+OIDwgY2hvcHBpbmdcLWJvYXJkXC1vclwtYmxvY2s7Civmt64gPCByaXZlclwtaW5cLWFuaHVpXC1wcm92aW5jZTsKK+WTpiA8IG9oXD9cLXJlYWxseVw/XC1pc1wtdGhhdFwtc29cPzsKK+mUpCA8IGJhbGFuY2VcLXdlaWdodFwtb25cLXNjYWxlOwor5LueIDwgYW5jaWVudFwtdW5pdFwtb2ZcLW1lYXN1cmU7Civoiq0gPCBwbGFudGFpblwtb3JcLWJhbmFuYVwtcGFsbTsKK+ejiiA8IHBpbGVcLW9mXC1yb2Nrc1wtb3JcLXN0b25lczsKK+WRuCA8IGV4cHJlc3Npb25cLW9mXC1yZXByaW1hbmQ7Civmi7cgPCB0b3J0dXJlXC1hbmRcLWludGVycm9nYXRlOwor5oq/IDwgcHVja2VyXC11cFwtbGlwc1wtaW5cLXNtaWxlOwor5Y2JIDwgZ2VuZXJhbFwtdGVybVwtZm9yXC1wbGFudHM7Civpq7sgPCBoYWlyXC1yb2xsZWRcLXVwXC1pblwtYVwtYnVuOwor6KOGIDwgY3JvdGNoXC1vclwtc2VhdFwtb2ZcLXBhbnRzOwor6JiRIDwgdHlwZVwtb2ZcLWVkaWJsZVwtbXVzaHJvb207Civlkr8gPCBkZXNjcmlwdGl2ZVwtb2ZcLWNyZWFraW5nOwor56++IDwgYmFtYm9vXC1zcGxpbnRzXC1vclwtc2xhdHM7Civmt4cgPCByaXZlclwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+iTkSA8IHJhaW5cLWNvYXRcLW1hZGVcLW9mXC1zdHJhdzsKK+aqrCA8IHR5cGVcLW9mXC1sb2N1c3RcLW9yYWNhY2lhOwor5reZIDwgZ3VyZ2xpbmdcLXNvdW5kXC1vZlwtd2F0ZXI7CivmrpMgPCBkcmVzc1wtY29ycHNlXC1mb3JcLWJ1cmlhbDsKK+eQpSA8IGpld2VsXC1pblwtc2hhcGVcLW9mXC10aWdlcjsKK+a9niA8IHJpdmVyXC1pblwtbm9ydGhlcm5cLWNoaW5hOwor6YaNIDwgZXNzZW50aWFsXC1vaWxcLW9mXC1idXR0ZXI7Civlpq8gPCB3aXZlc1wtb2ZcLW9uZScnc1wtYnJvdGhlcnM7CivluI8gPCBjdXJ0YWluXC10aGF0XC1mb3Jtc1wtd2FsbDsKK+eTkiA8IGNlcmVtb25pYWxcLWxpYmF0aW9uXC1jdXA7CivnkZcgPCBsYXJnZVwtcmluZ1wtb2ZcLWZpbmVcLWphZGU7Civmtp4gPCByaXZlclwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+eIuyA8IGRpYWdyYW1zXC1mb3JcLWRpdmluYXRpb247CivplJ8gPCBhbmNpZW50XC10cmVhc3VyZWRcLXN3b3JkOwor6IqXIDwgZnJhZ3JhbnRcLXNtZWxsXC1vZlwtZ3JhaW47CivmpaYgPCBhXC1sYXN0XC1mb3JcLW1ha2luZ1wtc2hvZXM7CivoiIEgPCBjYXJyeVwtb25cLW9uZScnc1wtc2hvdWxkZXI7Civmu6AgPCByaXZlclwtaW5cLWh1YmVpXC1wcm92aW5jZTsKK+W/jOaBqCA8IGhhdGVcLVwoZHVlXC10b1wtZW52eVwsXC1ldGNcKTsKK+mbueeBvSA8IGRpc2FzdGVyXC1jYXVzZWRcLWJ5XC1oYWlsOwor5Ye66KiqIDwgdmlzaXRcLWFcLWZvcmVpZ25cLWNvdW50cnk7CivmoLjmrablmajmnZDmlpkgPCBudWNsZWFyXC13ZWFwb25cLW1hdGVyaWFsOwor6YCa6KiK6KGM5qWtIDwgY29tbXVuaWNhdGlvbnNcLWluZHVzdHJ5Owor5YyX5Y2K55CDIDwgdGhlXC1ub3J0aGVyblwtaGVtaXNwaGVyZTsKK+mbmee1nue3miA8IHVuc2hpZWxkZWRcLXR3aXN0ZWRcLXBhaXQ7CivnmbzkvYjmlrDou5/ku7YgPCB0b1wtcmVsZWFzZVwtbmV3XC1zb2Z0d2FyZTsKK+aWkeaWkSA8IGZ1bGxcLW9mXC1zdGFpbnNcLW9yXC1zcG90czsKK+ilv+ijnSA8IFwod2VzdGVyblwtc3R5bGVcKVwtY2xvdGhlczsKK+WKoOayuSA8IHRvXC1tYWtlXC1hblwtZXh0cmFcLWVmZm9ydDsKK+WLn+aNkCA8IHRvXC1zb2xpY3RcLWNvbnRyaWJ1dGlvbnM7CivlsIjlsazntpPmv5/ljYAgPCBleGNsdXNpdmVcLWVjb25vbWljXC16b25lOwor55q06KOCIDwgY2hhcFwtXChsaXBzXCxcLXNraW5cLFwtZXRjXC5cKTsKK+imi+iBniA8IHdoYXRcLW9uZVwtc2Vlc1wtYW5kXC1oZWFyczsKK+WMheaJv+WItiA8IHJlc3BvbnNpYmxlXC1jcmV3XC1zeXN0ZW07CivljZfkuqwgPCBuYW5qaW5nXC1cKGNpdHlcLWluXC1jaGluYVwpOwor6KaP57SEIDwgdGVybXNcLVwob2ZcLWFuXC1hZ3JlZW1lbnRcKTsKK+atuOW/gyA8IGNvbnZlcnRlZFwtdG9cLVwocmVsaWdpb25cKTsKK+mAvOatuyA8IGhvdW5kXC1zb21lYm9keVwtdG9cLWRlYXRoOwor5pys5L2N5Li7576pIDwgc2VsZmlzaFwtZGVwYXJ0bWVudGFsaXNtOwor54K65omA5qyy54K6IDwgZG9cLXdoYXRldmVyXC1vbmVcLXBsZWFzZXM7CivkurrmsJHms5XpmaIgPCBwZW9wbGUnJ3NcLWNvdXJ0XC1cKG9mXC1sYXdcKTsKK+WVhualreapn+aniyA8IGNvbW1lcmNpYWxcLW9yZ2FuaXphdGlvbjsKK+m8jyA8IGNvdmVyXC1vZlwtdHJpcG9kXC1jYWxkcm9uOwor6buwIDwgeW91bmdcLWdpcmwnJ3NcLWhhaXJcLXN0eWxlOwor57Wx5rK7IDwgXChwb2xpdGljYWxcKVwtcnVsZVwtXChvdmVyXCk7Civoo5zoqrIgPCBtYWtlXC11cFwtYVwtbWlzc2VkXC1sZXNzb247CivpgJnmqKMgPCB0aGlzXC1cKGtpbmRcLW9mXCxcLXNvcnRcLW9mXCk7Civmkq3mlL7mqZ8gPCBwbGF5ZXJcLVwoZVwuZ1wuXC1jZFwtcGxheWVyXCk7CivpgZTmiJAgPCB0b1wtcmVhY2hcLVwoYW5cLWFncmVlbWVudFwpOwor55m+6IisIDwgaW5cLWh1bmRyZWRcLWFuZFwtb25lXC13YXlzOwor6ayCIDwgdGhlXC1oYWlyXC1vblwtdGhlXC10ZW1wbGVzOwor56aB5q2i5qC45q2m5Zmo6Kmm6amX5qKd57SEIDwgbnVjbGVhclwtdGVzdFwtYmFuXC10cmVhdHk7Civpp64gPCBhXC1raW5kXC1vZlwtZmllcmNlXC1hbmltYWw7CivkuI3nv7zogIzpo5sgPCBkaXNhcHBlYXJcLXdpdGhvdXRcLXRyYWNlOwor5o6I6KiIIDwgdG9cLWNvbmZpZGVcLWFcLXBsYW5cLXRvXC1zYjsKK+eVouaBreeVouaVrCA8IHJldmVyZW50XC1hbmRcLXJlc3BlY3RmdWw7Civnp5HnoJTkurrlk6EgPCBcKHNjaWVudGlmaWNcKVwtcmVzZWFyY2hlcjsKK+WgseabiSA8IGhlcmFsZFwtdGhlXC1icmVha1wtb2ZcLWRheTsKK+aTmue1seioiCA8IGFjY29yZGluZ1wtdG9cLXN0YXRpc3RpY3M7CivpgI/pnLLmtojmga8gPCB0b1wtZGlzY2xvc2VcLWluZm9ybWF0aW9uOwor5Lit5ZyL5pmC5aCxIDwgY2hpbmFcLXRpbWVzXC1cKG5ld3NwYXBlclwpOwor6YS+IDwgcGxhY2VcLWluXC1odWJlaVwtcHJvdmluY2U7CivphKwgPCBwbGFjZVwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+mEmCA8IHN0YXRlXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor5Yip5biCIDwgXCJsYWlcLXNlZVwiXC1cKGx1Y2t5XC1tb25leVwpOwor6YOwIDwgYmlydGhwbGFjZVwtb2ZcLWNvbmZ1Y2l1czsKK+mCpyA8IHRvd25cLWluXC1zaGFueGlcLXByb3ZpbmNlOwor5YG06YeNIDwgcGxhY2VcLWV4dHJhXC1lbXBoYXNpc1wtb247CivloLHmgakgPCBwYXlcLWFcLWRlYnRcLW9mXC1ncmF0aXR1ZGU7CivnlZnlrbjnlJ8gPCBzdHVkZW50XC1zdHVkeWluZ1wtYWJyb2FkOwor5aiB5buJ5pav5aChIDwgd2lsbGlhbXNidXJnXC1cKHZpcmdpbmlhXCk7Civkvr/lrpzooYzkuosgPCBhY3RcLWF0XC1vbmUnJ3NcLWRpc2NyZXRpb247CivluavlrZAgPCBvdXRlclwtXChvZlwtY2FiYmFnZVwsXC1ldGNcKTsKK+iHquixqiA8IFwoZmVlbFwtYVwtc2Vuc2VcLW9mXClcLXByaWRlOwor5Y+N6Imm6ImH5beh6Iiq5bCO5b2IIDwgYW50aVwtc2hpcFwtY3J1aXNlXC1taXNzbGU7CivomrsgPCBzbWFsbFwtc3BlY2llc1wtb2ZcLWNpY2FkYTsKK+iSsSA8IGdhbWJsaW5nXC1nYW1lXC13aXRoXC1kaWNlOwor6JGnIDwgaGVsZW9jaGFyaXNcLXBsYW50YWdpbmVhOwor5rWB5Lqh5Zyo5rW35aSWIDwgdG9cLWJlXC1pblwtZXhpbGVcLW92ZXJzZWFzOwor6Ziy5YuZIDwgXChwZXJ0YWluaW5nXC10b1wpXC1kZWZlbnNlOwor5qWt57i+IDwgb3V0c3RhbmRpbmdcLWFjaGlldmVtZW50Owor6IiyIDwgc21hbGxcLWJvYXRcLXdpdGhcLXdpbmRvd3M7CivllYbmpa3nrqHnkIYgPCBidXNpbmVzc1wtYWRtaW5pc3RyYXRpb247CivnlZnoqIAgPCB0b1wtbGVhdmVcLW9uZScnc1wtY29tbWVudHM7CivnvqsgPCB0aGVcLXNrZWxldG9uXC1vZlwtYVwtc2hlZXA7CivlubTkvoYgPCBvdmVyXC10aGVcLWxhc3RcLVwuXC5cLlwteWVhcnM7Civnvb0gPCBhXC1raW5kXC1vZlwtd29vbGVuXC1mYWJyaWM7Civplovmi40gPCBiZWdpblwtc2hvb3RpbmdcLVwoYVwtZmlsbVwpOwor5YiG5LmLIDwgXChpbmRpY2F0aW5nXC1hXC1mcmFjdGlvblwpOwor57K6IDwgcG9saXNoZWRcLXJpY2VcLW9yXC1taWxsZXQ7CivlpJrlubTkvoYgPCBmb3JcLXRoZVwtcGFzdFwtbWFueVwteWVhcnM7Civnr6cgPCBjcmVlbFwtZm9yXC10cmFwcGluZ1wtZmlzaDsKK+evmyA8IGN1dGljbGVcLW9mXC1iYW1ib29cLXBsYW50Owor5Z+656SO6YCf546HIDwgYmFzaWNcLXJhdGVcLVwoYXNcLWluXC1pc2RuXCk7CivnrZTorJ0gPCB0b1wtZXhwcmVzc1wtb25lJydzXC10aGFua3M7CivnpZQgPCB3b3JzaGlwXC1vbmUnJ3NcLWFuY2VzdG9yczsKK+ethuirhyA8IGNvbnZlcnNhdGlvblwtYnlcLXdyaXRpbmc7CivnkarpupcgPCBtYWxpXC1cKGFcLXBlcnNvbicncycnXC1uYW1lXCk7CivnnZYgPCB0b1wtc3RhcmVcLXN0cmFpZ2h0XC1haGVhZDsKK+ecoiA8IGV5ZXNcLXdpdGhvdXRcLWJyaWdodG5lc3M7Civnl4fni4AgPCBzeW1wdG9tXC1cKG9mXC1hblwtaWxsbmVzc1wpOwor55W+IDwgZmllbGRzXC1kaXZpZGVkXC1ieVwtZGlrZXM7CivnkrIgPCBwZW5kYW50XC1naXJkbGVcLW9ybmFtZW50Owor55G/IDwgYVwtYmxhY2tcLXN0b25lXC1saWtlXC1qYWRlOwor55GvIDwga2luZFwtb2ZcLXdoaXRlXC1jb3JuZWxpYW47CivnkaIgPCBnZW1cLW9ybmFtZW50c1wtZm9yXC1iZWx0czsKK+ePtiA8IHdoaXRlXC1qYWRlXC13b3JuXC1vblwtYmVsdDsKK+S4reeni+evgCA8IHRoZVwtbWlkXC1hdXR1bW5cLWZlc3RpdmFsOwor546VIDwgaW5mZXJpb3JcLXZhcmlldHlcLW9mXC1nZW07CivkvZTpoJggPCB0b1wtb2NjdXB5XC1cKGFcLXRlcnJpdG9yeVwpOwor54yIIDwgZG9nXC13aXRoXC1zaG9ydFwtc2hpbmJvbmU7CivmiYvlr6vorZjliKUgPCBoYW5kd3JpdGluZ1wtcmVjb2duaXRpb247CivmvokgPCB0b1wtd2FzaFwtbmFtZVwtb2ZcLWFcLXBsYWNlOwor5r2WIDwgbmFtZVwtb2ZcLWFcLWNlcnRhaW5cLXJpdmVyOwor6Z2e55uI5Yip55qE57WE57mUIDwgbm9uXC1wcm9maXRcLW9yZ2FuaXphdGlvbjsKK+aumSA8IHRvXC1kaWVcLWJ5XC10YWtpbmdcLXBvaXNvbjsKK+atgSA8IHVuc2F0aXNmaWVkXC1cKG9mXC1lYXRpbmdcKTsKK+asqCA8IHRvXC1ibG93XC1vclwtYnJlYXRoZVwtdXBvbjsKK+asjyA8IHRyZWVcLXRoZVwtaG9yc2VcLWNoZXN0bnV0Owor5qqHIDwgd29vZGVuXC1yYW1tZXJcLW9yXC1wZXN0bGU7CivmqZQgPCBhXC13b29kZW5cLWNob3BwaW5nXC1ibG9jazsKK+ioiuaBr+iZleeQhuezu+e1sSA8IG1lc3NhZ2VcLWhhbmRsaW5nXC1zeXN0ZW07CivlgpnmlpkgPCBnZXRcLXRoZVwtbWF0ZXJpYWxzXC1yZWFkeTsKK+WdpuWFiyA8IHRhbmtcLVwobWlsaXRhcnlcLXZlaGljbGVcKTsKK+mmrOi3r+WPoyA8IGludGVyc2VjdGlvblwtXChvZlwtcm9hZHNcKTsKK+Wbm+W3nSA8IHNpY2h1YW5cLXByb3ZpbmNlXCxcLWNoaW5hOwor5oC4IDwgY25zXC0yXC0yYTQwXC1pc1wtZGlmZmVyZW50Owor5q+U5q+U55qG5pivIDwgY2FuXC1iZVwtZm91bmRcLWV2ZXJ5d2hlcmU7CivkuI3mirXmipfkuLvnvqkgPCBwb2xpY3lcLW9mXC1ub25yZXNpc3RhbmNlOwor6LKp6YGLIDwgdG9cLXRyYW5zcG9ydFwtXChmb3JcLXNhbGVcKTsKK+WihCA8IHRoZVwtc3RlcHNcLW9mXC1hXC1zdGFpcndheTsKK+aVuOWtl+ioguizvOe3mui3ryA8IGRpZ2l0YWxcLXN1YnNjcmliZXJcLWxpbmU7Civmo4ToiIrmj5vmlrAgPCB0b1wtdHVyblwtb3ZlclwtYVwtbmV3XC1sZWFmOwor5LuK6K2vIDwgbW9kZXJuXC1sYW5ndWFnZVwtdmVyc2lvbjsKK+S4jeaDheS5i+iriyA8IG15XC1wcmVzdW1wdHVvdXNcLXJlcXVlc3Q7CivllasgPCBpbnRlcmplY3Rpb25cLW9mXC13YXJuaW5nOwor5oqV5pS+IDwgdG9cLXB1dFwtaW5cLVwoY2lyY3VsYXRpb25cKTsKK+WQmiA8IHVzZWRcLXRvXC1yZXByZXNlbnRcLXNvdW5kOwor5YyBIDwgamFwYW5lc2VcLXVuaXRcLW9mXC13ZWlnaHQ7Civnl4XlgJIgPCBiZVwtZG93blwtd2l0aFwtYW5cLWlsbG5lc3M7Civmi7fllY8gPCB0b1wtcXVlc3Rpb25cLXZpYVwtdG9ydHVyZTsKK+S7viA8IHRvXC1oYW5nXC1vclwtYm93XC10aGVcLWhlYWQ7Civktp0gPCBncm93aW5nXC1pcnJlZ3VsYXJcLXRlZXRoOwor5LWIIDwgdW5zbWVsdGVkXC1oZW1wXC1hbmRcLXNpbGs7CivktYAgPCBjb2Fyc2VcLWNydW1ic1wtb2ZcLWJhcmxleTsKK+S0kSA8IGFcLWxlZ2VuZGFyeVwtd2VpcmVkXC1iaXJkOwor5LSHIDwgYVwtc2Vjb25kXC1uYW1lXC1mb3JcLWNyYW5lOwor5LSBIDwgYVwta2luZFwtb2ZcLXJhdFwtbGlrZVwtYmlyZDsKK+SzsiA8IGFcLXN3YXJtXC1vZlwtZmx5aW5nXC1iaXJkczsKK+SytCA8IGFcLWtpbmRcLW9mXC12ZW5vbW91c1wtYmlyZDsKK+SxviA8IGFcLWNhcnBcLWxpa2VcLXNhdm9yeVwtZmlzaDsKK+SwqyA8IG5pbWJsZVwtYW5kXC1hY3RpdmVcLWdob3N0Owor6ZuZ6YCj5o6l56uZIDwgZHVhbFwtYXR0YWNobWVudFwtc3RhdGlvbjsKK+SthyA8IHRvXC1iZVwtY2hvY2tlZFwtd2l0aFwtZm9vZDsKK+SthiA8IHNtYWxsXC1jaGlsZHJlblwtZWF0XC1sZXNzOwor5KyyIDwgdG9cLWVhdFwtdG9cLXRoZVwtaGFsZlwtZnVsbDsKK+SsqiA8IGFcLWtpbmRcLW9mXC1jb29rZWRcLW5vb2RsZTsKK+SsmyA8IHRoZVwtcm9hcmluZ1wtb2ZcLXRoZVwtd2luZDsKK+aCo+mboyA8IHRyaWFsc1wtYW5kXC10cmlidWxhdGlvbnM7CivkqJcgPCBleGNlc3NpdmVcLXJhaW5cLWFuZFwtc25vdzsKK+SohSA8IHNtYWxsXC1iaXJkc1wtXC1cLVwtdGhlXC13cmVuOwor6Y2b54WJIDwgdG9cLWRvXC1waHlzaWNhbFwtdHJhaW5pbmc7CivkpZYgPCBzaWx2ZXJcLW9mXC1nb2xkXC1maWxhZ3JlZTsKK+SljyA8IHVuZml0dGVkXC1mb3JcLWVhY2hcLW90aGVyOwor5KSlIDwgYWdyaWN1bHR1cmFsXC1pbXBsZW1lbnRzOwor5KKcIDwgdGhlXC1tYXJyaWFnZVwtb2ZcLWFcLXdvbWFuOwor5KG9IDwgdGhlXC1zaGFmdHNcLW9mXC1hXC12ZWhpY2xlOwor5KG6IDwgdGhlXC1lbmRcLW9mXC1hblwtYXhsZVwtdHJlZTsKK+ShoyA8IGFcLXBpZWNlXC1vZlwtY3VydmVkXC1ib2FyZDsKK+SgoyA8IG5ldFwtdG9cLXRyYXBcLXRoZVwtYW5pbWFsczsKK+SdiCA8IGFcLWJpZ1wtYW5kXC1zdHJlbnVvdXNcLXBpZzsKK+SakCA8IGdldHRpbmdcLXJlZFwtaW5cLXRoZVwtZXllczsKK+SaiiA8IHRvXC1sb29rXC1mcm9tXC1hXC1kaXN0YW5jZTsKK+SZkCA8IGZ1cnNcLWFuZFwtbGluZW5cLWdhcm1lbnRzOwor5JiGIDwgYVwtc2Vjb25kXC1mb3JtXC1lYXJ0aHdvcm07Civkl6AgPCB0aGVcLWxhcnZhXC1vZlwtbW9zcXVpdG9lczsKK+SXlCA8IGFcLWhvdXNlXC1saXphcmRcLW9yXC1nZWNrbzsKK+SWsSA8IGxhcmdlXC1zaHJpbXBcLWluXC10aGVcLXNlYTsKK+SUviA8IGFcLWtpbmRcLW9mXC1mcmFncmFudFwtaGVyYjsKK+STsSA8IGFcLWtpbmRcLW9mXC1oZXJiXC1tZWRpY2luZTsKK+aItOe2reaWryA8IGRhdmlzXC1cKGVuZ2xpc2hcLXN1cm5hbWVcKTsKK+ijnOWKqee1hOe5lCA8IGF1eGlsaWFyeVwtb3JnYW5pemF0aW9uczsKK+SQpCA8IGRyaWVkXC1hbmRcLXNlYXNvbmVkXC1tZWF0Owor5JCQIDwgY3VydmVkXC1wYXJ0XC1vZlwtdGhlXC1rbmVlOwor5I+ZIDwgYnJpbmVcLWZyb21cLXBpY2tsZWRcLW1lYXQ7Civkj5UgPCB0b1wtY29va1wtZm9vZFwtdGhvcm91Z2hseTsKK+e0heaok+WkoiA8IGFcLWRyZWFtXC1vZlwtcmVkXC1tYW5zaW9uczsKK+SNuSA8IG9kb3JcLW9mXC1hXC1zaGVlcFwtb3JcLWdvYXQ7CivkjZkgPCBuZXRzXC1mb3JcLWNhdGNoaW5nXC1iaXJkczsKK+SNmCA8IGFcLWdlbmVyYWxcLXRlcm1cLWZvclwtbmV0czsKK+SNkyA8IG5ldFwtZm9yXC1jYXRjaGluZ1wtcmFiYml0Owor5IurIDwgdG9cLXdpbmRcLXJvdW5kXC10aGVcLXJvcGVzOwor5IuoIDwgdG9cLXNldFwtaW5cLW9yZGVyXC10aGVcLW9sZDsKK+SKtCA8IGZvb2RcLW1hZGVcLW9mXC1yaWNlXC1mbG91cjsKK+SKqiA8IGNvYXJzZVwtcmljZVwtXC1cLVwtdW5odWxsZWQ7CivkiZwgPCB5b3VuZ1wtYW5kXC10ZW5kZXJcLWJhbWJvbzsKK+SJliA8IGZyYW1ld29ya1wtb2ZcLWFcLWNhcnJpYWdlOwor5IeXIDwgYmFtYm9vXC13aXRoXC1sb25nXC1qb2ludHM7Civkh5EgPCBhXC1zdGFuZGluZ1wtc2hvcnRcLXBlcnNvbjsKK+SGiiA8IHVuaHVza2VkXC1nbHV0aW5vdXNcLXJpY2U7CivkhokgPCB0aGVcLXN3aW5nXC1vZlwtcmljZVwtcGxhbnQ7Civom5nms7MgPCBcKHN3aW1taW5nXClcLWJyZWFzdHN0cm9rZTsKK+SDiSA8IGFcLXN0b25lXC1yZXNlbWJsaW5nXC1qYWRlOwor5oCO6bq8IDwgXChpbnRlcnJvZ2F0aXZlXC1wcm9ub3VuXCk7CivkgYwgPCB0b1wtc2VlXC1mb3JcLWFcLXNob3J0XC10aW1lOwor476AIDwgdG9cLWJlXC13ZWFrZWRcLWJ5XC1kaXNlYXNlOwor4724IDwgZGlzZWFzZXNcLW9mXC10aGVcLWFiZG9tZW47CivlnKjku4rlubTlubTlupUgPCBhdFwtdGhlXC1lbmRcLW9mXC10aGlzXC15ZWFyOwor47ynIDwgdGlsZXNcLWluXC1jeWxpbmRlclwtc2hhcGU7CivpgY7kuI3ljrsgPCBtYWtlXC1saWZlXC1kaWZmaWN1bHRcLWZvcjsKK+O5siA8IGFcLWZyaWdodGVuZWRcLXBpZ1wtb3JcLWRvZzsKK+O5riA8IGFcLWtpbmRcLW9mXC1hbmltYWxcLVwtdGFwaXI7CivjuZ0gPCBhXC1sZWdlbmRhcnlcLXdpbGRcLWFuaW1hbDsKK+O5kSA8IGFcLWZvdXJcLXllYXJzXC1vbGRcLWNhdHRsZTsKK+O5iiA8IGFcLWNhdHRsZVwtb2ZcLXdoaXRlXC1jb2xvcjsKK+O5hiA8IHRoZVwtY291bHRlclwtb2ZcLWFcLXBsb3VnaDsKK+Wbnumhp+att+WPsiA8IHRvXC1sb29rXC1iYWNrXC1hdFwtaGlzdG9yeTsKK+mAmuioiuWNlOWumiA8IGNvbW11bmljYXRpb25zXC1wcm90b2NvbDsKK+O4iyA8IG1lYXRzXC11c2VkXC1pblwtc2FjcmlmaWNlOwor47euIDwgc2NvcmNoZWRcLW9yXC1idXJuZWRcLXdvb2Q7Civjt6sgPCBmaXJlXC1jYXVzaW5nXC1ieVwtZHJ5bmVzczsKK+O2kiA8IHRoZVwtY3VycmVudFwtb2ZcLWFcLXN0cmVhbTsKK+O0siA8IGFcLXJpdmVyXC1pblwtYW5jaWVudFwtdGltZTsKK+O0kSA8IHRvXC10cmFjZVwtdXBcLXRvXC1hXC1zb3VyY2U7CivjtI8gPCB0aGVcLXBvbmRcLXdhdGVyXC1pc1wtc3RpbGw7Civjsr8gPCBleHRlbnNpdmVcLWJvZHlcLW9mXC13YXRlcjsKK+OyhCA8IHVuYnVybnRcLWJyaWNrc1wtb3JcLXRpbGVzOwor47GsIDwgY2Fubm90XC1yZWNvZ25pemVcLXBlb3BsZTsKK+OvmSA8IHRoZVwtYnVja3Rob3JuXC1vclwtanVqdWJlOwor6aeQ5a6IIDwgXChtYW5cLWFcLXBvc3RcLWFuZFwpXC1kZWZlbmQ7Civjrb4gPCB0b1wtY3V0XC10aGVcLXRpbWJlclwtYXBhcnQ7CivmuqvlkowgPCBtb2RlcmF0ZVwtXChwb2xpY3lcLFwtZXRjXC5cKTsKK+OtgyA8IHRoZVwtbGFyZ2VcLXJvcGVcLW9mXC1hXC1uZXQ7CivjrYIgPCBoZWlnaHRcLW9mXC10aGVcLWVuZFwtcG9pbnQ7CivjrLsgPCBpblwtYmV0d2Vlblwtb2ZcLXRoZVwtZmxlc2g7CivlkKboqo0gPCB0b1wtZGVjbGFyZVwtdG9cLWJlXC11bnRydWU7Civjp68gPCBhXC1idWNrZXRcLW1hZGVcLW9mXC13aWxsb3c7Civjp6UgPCB0b1wtbmlwXC13aXRoXC10aGVcLWZpbmdlcnM7Civjpr0gPCB3aXRoXC1lbGVnYW50XC1hcHBlYXJhbmNlOwor5oOF5aCx6JmVIDwgc291cmNlXC1cKG9mXC1pbmZvcm1hdGlvblwpOwor46a6IDwgYVwtbGFuY2VcLXdpdGhcLXR3b1wtcG9pbnRzOwor46aHIDwgYVwtcGVhY2VmdWxcLW9yXC1lYXN5XC1tb29kOwor46WFIDwgdXNlZFwtaW5cLWFcLXBlcnNvbicnc1wtbmFtZTsKK+OkjCA8IHRvXC1oYXZlXC1vbmUnJ3NcLWhlYXJ0XC1vd247Civjo7sgPCB0b1wtcmVtZWR5XC1ieVwtcHVuaXNobWVudDsKK+OjqiA8IHRvXC13YWxrXC13aXRoXC1zbG93XC1zdGVwczsKK+OjhiA8IHRvXC1sb29zZVwtdGhlXC1ib3dcLXN0cmluZzsKK+OiviA8IHRoZVwtY3VydmVkXC1lbmRcLW9mXC1hXC1ib3c7CivjorUgPCBwb3dlcmZ1bFwtYW5kXC1zdHJvbmdcLWJvdzsKK+OhuSA8IHRvXC1yZWx5XC11cG9uXC1lYWNoXC1vdGhlcjsKK+OhkiA8IGFcLWNhbGljb1wtc2Fja1wtZm9yXC1ncmFpbjsKK+OhjyA8IHRvXC1jdXRcLWFcLXN0cmlwXC1vZlwtY2xvdGg7CivjnrwgPCB0b1wtcmVzcGVjdGZ1bGx5XC1yZWNlaXZlOwor45qsIDwgYVwtbGFkeVwtc3RhcnRcLXRvXC1kb2xsXC11cDsKK+OaliA8IHRvXC1jb21lXC1vdXRcLXRvXC10aGVcLW9wZW47CivjmYogPCBhblwtYXJlYVwtb2ZcLWxldmVsXC1ncm91bmQ7CivjlbggPCBzb3VuZFwtb2ZcLXJvbGxpbmdcLWFcLWJvYXQ7CivjlKQgPCB0b1wtZXhlcnRcLW9uZScnc1wtc3RyZW5ndGg7CivohZDmlZfnvaogPCB0aGVcLWNyaW1lXC1vZlwtY29ycnVwdGlvbjsKK+OSpCA8IHRvXC1oYXZlXC1vbmUnJ3NcLWhlYXJ0XC13b247CivjkpkgPCB0b1wtaGFuZFwtb3JcLWJvd1wtdGhlXC1oZWFkOwor5q2l5bGl57at6ImxIDwgaGF2ZVwtZGlmZmljdWx0eVwtd2Fsa2luZzsKK+WFseWQjOevqemBuCA8IGNvbGxhYm9yYXRpdmVcLWZpbHRlcmluZzsKK+eZveibh+WCsyA8IHRhbGVcLW9mXC10aGVcLXdoaXRlXC1zbmFrZTsKK+Wkp+mpmuWwj+aAqiA8IG11Y2hcLWZ1c3NcLWFib3V0XC1ub3RoaW5nOwor6L6v6Ki85ZSv54mp5Li7576pIDwgZGlhbGVjdGljYWxcLW1hdGVyaWFsaXNtOwor5rGf6KW/IDwgamlhbmd4aVwtcHJvdmluY2VcLFwtY2hpbmE7CivmhJvmkqsgPCB0b1wtc2hvd1wtdGVuZGVyXC1jYXJlXC1mb3I7Civlj4PoiIcgPCB0b1wtcGFydGljaXBhdGVcLVwoaW5cLXN0aFwpOwor5riv5Lq6IDwgaG9uZ1wta29uZ1wtcGVyc29uXHxwZW9wbGU7Civpu4PmsrMgPCB5ZWxsb3dcLXJpdmVyXC1cKGh1YW5nXC1oZVwpOwor5rGf6JiHIDwgamlhbmdzdVwtcHJvdmluY2VcLFwtY2hpbmE7Civku7vlkb0gPCB0b1wtYXBwb2ludFwtYW5kXC1ub21pbmF0ZTsKK+WFrOWuieWumOWToSA8IHB1YmxpY1wtc2FmZXR5XC1vZmZpY2lhbHM7CivppIXlrZAgPCBtYWl6ZVwtb3JcLW1pbGxldFwtcGFuY2FrZTsKK+acn+aUtyA8IGVuZFwtb2ZcLXRlcm1cLWV4YW1pbmF0aW9uOwor57i96aGNIDwgdG90YWxcLVwoYW1vdW50XC1vclwtdmFsdWVcKTsKK+isguiqniA8IFwoZ3JhbW1hdGljYWxcKVwtcHJlZGljYXRlOwor5Y2K5oiQ5ZOBIDwgc2VtaVwtbWFudWZhY3R1cmVkXC1nb29kczsKK+S4reaXrCA8IG1pZGRsZVwtdGhpcmRcLW9mXC1hXC1tb250aDsKK+S4i+aXrCA8IGxhc3RcLXRoaXJkXC1vZlwtdGhlXC1tb250aDsKK+WCs+i8uOaKgOihkyA8IHRyYW5zbWlzc2lvblwtdGVjaG5vbG9neTsKK+iyneWFiyA8IGJha2VyXC1cKGVuZ2xpc2hcLXN1cm5hbWVcKTsKK+S6guWQgyA8IHRvXC1lYXRcLWluZGlzY3JpbWluYW50bHk7CivlpZTpoK3lhZIgPCBzb21ldGhpbmdcLXRvXC1zdHJpdmVcLWZvcjsKK+WGsOWkqembquWcsCA8IGFcLXdvcmxkXC1vZlwtaWNlXC1hbmRcLXNub3c7CivmlL/lupzmqZ/mp4sgPCBnb3Zlcm5tZW50XC1vcmdhbml6YXRpb247CivkuK3ovYnnq5kgPCBodWJcLVwobmV0d29ya1wtZXF1aXBtZW50XCk7CivmganmgKggPCBcKGZlZWxpbmdcLW9mXClcLXJlc2VudG1lbnQ7CivkuI3lpJYgPCBub3RcLWJleW9uZFwtdGhlXC1zY29wZVwtb2Y7CivmnI3liJEgPCBzZXJ2ZVwtYVwtcHJpc29uXC1zZW50ZW5jZTsKK+iOq+mdniA8IGNhblwtaXRcLWJlXC1wb3NzaWJsZVwtdGhhdDsKK+W7o+ilvyA8IGd1YW5neGlcLXByb3ZpbmNlXCxcLWNoaW5hOwor5LiN5Y+v55CG5Za7IDwgYmVcLWltcGVydmlvdXNcLXRvXC1yZWFzb247CivlpZTngIkgPCBcKG9mXC10b3JyZW50c1wpXC1ydXNoXC1kb3duOwor5LmIIDwgaW50ZXJyb2dhdGl2ZVwtcGFydGljbGU7CivooqsgPCBwYXNzaXZlXC1pbmRpY2F0b3JcLScnYnknJzsKK+eUsyA8IHRvXC1zdGF0ZVwtdG9cLWFcLXN1cGVyaW9yOwor5bKhIDwgcmlkZ2VcLW9yXC1jcmVzdFwtb2ZcLWhpbGw7CivnkLQgPCBjaGluZXNlXC1sdXRlXC1vclwtZ3VpdGFyOwor5ayMIDwgc2VkdWN0aXZlXC1hbmRcLWxvdmVhYmxlOwor572XIDwgbmV0XC1mb3JcLWNhdGNoaW5nXC1iaXJkczsKK+aRuCA8IGdlbnRseVwtdG91Y2hcLXdpdGhcLWhhbmQ7Civku7AgPCByYWlzZVwtdGhlXC1oZWFkXC10b1wtbG9vazsKK+iHjSA8IGFiZG9taW5hbFwtYXJlYVwtb2ZcLWNyYWI7Civpg5EgPCBzdGF0ZVwtaW5cLXRvZGF5JydzXC1oZW5hbjsKK+i0ryA8IGFcLXN0cmluZ1wtb2ZcLTEwMDBcLWNvaW5zOwor56utIDwgcHV0XC1mb3J0aFwtZ3JlYXRcLWVmZm9ydDsKK+enkiA8IGJlYXJkXC1vZlwtZ3JhaW5cLW9yXC1jb3JuOwor5aWaIDwgd2hlcmVcP1wtd2hhdFw/XC1ob3dcP1wtd2h5XD87Civnm48gPCBzbWFsbFwtY3VwXC1vclwtY29udGFpbmVyOwor6JCdIDwgdHlwZVwtb2ZcLWNyZWVwaW5nXC1wbGFudDsKK+aipyA8IHN0ZXJjdWxpYVwtcGxhdGFuaWZvbGlhOwor5ZKmIDwgZXhwcmVzc2lvblwtb2ZcLXN1cnByaXNlOwor562QIDwgYmFtYm9vXC1iYXNrZXRcLW9yXC1jaGVzdDsKK+iwjSA8IGFuXC1pbnRlbGxpZ2VuY2VcLXJlcG9ydDsKK+evsSA8IGJhbWJvb1wtb3JcLXdvb2RlblwtZmVuY2U7CivnkLYgPCBndWl0YXJcLWxpa2VcLWluc3RydW1lbnQ7CivmvbogPCBzb3VuZFwtb2ZcLWZsb3dpbmdcLXdhdGVyOwor5Z2zIDwgYVwtaG9sbG93XC1pblwtdGhlXC1ncm91bmQ7Civln4IgPCBkaXRjaGVzXC1mb3JcLWlycmlnYXRpb247CivlgIwgPCBhc3Npc3RhbnRcLWluXC13aW5lXC1zaG9wOwor6ZyBIDwgdG9cLWNsZWFyXC11cFwtYWZ0ZXJcLXJhaW47Civpgq8gPCBjaXR5XC1pblwtaGViZWlcLXByb3ZpbmNlOwor57KRIDwgdHNhbWJhXC1cKGZvb2RcLWluXC10aWJldFwpOwor6JuAIDwgaW5zZWN0c1wtdGhhdFwtZWF0XC1ib29rczsKK+WrpiA8IG5hbWVcLW9mXC1hXC1tb29uXC1nb2RkZXNzOwor6LWKIDwgYnV5XC1hbmRcLXNlbGxcLW9uXC1jcmVkaXQ7CivlvJEgPCB0b1wta2lsbFwtb25lJydzXC1zdXBlcmlvcjsKK+aRgSA8IHRvXC1wcmVzc1wtd2l0aFwtdGhlXC1oYW5kOwor55W5IDwgYVwtZmllbGRcLW9mXC0yMFwtb3JcLTMwXC1tdTsKK+inkCA8IGhhdmVcLWltcGVyaWFsXC1hdWRpZW5jZTsKK+iupiA8IGV4cG9zZVwtb3RoZXInJ3NcLXNlY3JldHM7Civml4QgPCBhXC1raW5kXC1vZlwtYW5jaWVudFwtZmxhZzsKK+i2tSA8IG5vaXNlXC1vZlwtdHJhbXBpbmdcLWZlZXQ7CivphbkgPCB0b1wtcG91clwtb3V0XC1hXC1saWJhdGlvbjsKK+WtsyA8IGJyZWVkXC1pblwtbGFyZ2VcLW51bWJlcnM7CivloYQgPCBlbGV2YXRlZFwtYmFua1wtaW5cLWZpZWxkOwor6J6IIDwgZGllbXllbGlsdXNcLXB5cm9nYXN0ZXI7CivnqqwgPCBhXC1zbWFsbFwtZG9vclwtb3JcLXdpbmRvdzsKK+essSA8IGFcLWJhc2tldFwtdHJhcFwtZm9yXC1maXNoOwor54m/IDwgc2hlZFwtb3JcLXBlblwtZm9yXC1jYXR0bGU7Civom5ggPCBhXC13ZWV2aWxcLWZvdW5kXC1pblwtcmljZTsKK+eVjiA8IGFcLWRyYWluXC1iZXR3ZWVuXC1maWVsZHM7Civogbfmpa3kuK3lrbggPCB2b2NhdGlvbmFsXC1oaWdoXC1zY2hvb2w7CivntrLot6/nr4Dpu57ku4vpnaIgPCBuZXR3b3JrXC1ub2RlXC1pbnRlcmZhY2U7CivmraPlnKjkuK3lnIvoqKrllY8gPCBkdXJpbmdcLWFcLXRyaXBcLXRvXC1jaGluYTsKK+mBuueVmSA8IFwobGVhdmVcLW9yXC1iZVwtYVwpXC1sZWdhY3k7CivluLjopo8gPCBjb252ZW50aW9uYWxcLVwod2VhcG9uc1wpOwor6Ieq6aOf5YW25p6cIDwgcmVhcFwtd2hhdFwtb25lXC1oYXNcLXNvd247CivorYnliLggPCBcKGZpbmFuY2lhbFwpXC1zZWN1cml0aWVzOwor5LiN6Zyy6IGy6ImyIDwgbm90XC1zaG93XC1vbmUnJ3NcLWZlZWxpbmc7CivmhZXpgZPlj4sgPCByZWxpZ2lvdXNcLWludmVzdGlnYXRvcjsKK+W+gOW4uCA8IGhhYml0dWFsbHlcLWluXC10aGVcLXBhc3Q7CivlpKfnhZ7poqjmma8gPCBkYW1wZW5pbmdcLW9uZScnc1wtc3Bpcml0Owor5Ymd5o6h5q+UIDwgc3RyaXBwaW5nXC10b1wtb3JlXC1yYXRpbzsKK+e+heabvOiqnuaXjyA8IHJvbWFuY2VcLWxhbmd1YWdlXC1ncm91cDsKK+WtsOiDveeUn+W3pyA8IHByYWN0aWNlXC1tYWtlc1wtcGVyZmVjdDsKK+WmluWGtiA8IHByZXR0eVwtYW5kXC1mbGlydGF0aW91czsKK+mdqeWRvSA8IFwocG9saXRpY2FsXClcLXJldm9sdXRpb247Civoq5blo4cgPCBmb3J1bVwtXChmb3JcLWRpc2N1c3Npb25cKTsKK+Wjn+aWtyA8IGVuam95XC1tYXJrZXRcLWRvbWluYW5jZTsKK+eJoeS4uSA8IHBlb255XC1cKHR5cGVcLW9mXC1mbG93ZXJcKTsKK+WgseeohSA8IGRlY2xhcmVcLWR1dGlhYmxlXC1nb29kczsKK+ebrueahOWcsCA8IGRlc3RpbmF0aW9uXC1cKGxvY2F0aW9uXCk7Civlhazoqo0gPCBwdWJsaWNseVwta25vd25cLVwodG9cLWJlXCk7Civll7fll7flvoXlk7ogPCBjcnlcLXBpdGVvdXNseVwtZm9yXC1mb29kOwor55m86KGoIDwgdG9cLWlzc3VlXC1cKGFcLXN0YXRlbWVudFwpOwor5LiN55eb5LiN55eSIDwgc2NyYXRjaGluZ1wtdGhlXC1zdXJmYWNlOwor5ZyL5YuZ6ZmiIDwgc3RhdGVcLWRlcGFydG1lbnRcLVwodXNhXCk7Civpva8gPCB0ZWV0aFwtZ3Jvd25cLWluXC1vbGRcLWFnZTsKK+mbu+WZqCA8IFwoZWxlY3RyaWNhbFwpXC1hcHBsaWFuY2U7CivpuaMgPCBmYWJ1bG91c1wtbXl0aGljYWxcLWJpcmQ7Civmrrfli6QgPCBwb2xpdGVseVwsXC1zb2xpY2l0b3VzbHk7CivljYHkupTlhIQgPCBvbmVcLWFuZFwtYVwtaGFsZlwtYmlsbGlvbjsKK+mwhiA8IHNjb21iZXJvbW9ydXNcLXNpbmVuc2lzOwor6a6TIDwgbWluY2VkXC1hbmRcLXNhbHRlZFwtZmlzaDsKK+e0heeHkuiCiSA8IHJlZFwtY29va2VkXC1cKHBvcmtcKVwtbWVhdDsKK+WIsOacnyA8IGJlY29tZVwtZHVlXC1cKGVnXCxcLWxvYW5zXCk7CivpqYwgPCBuYW1lXC1vZlwtYVwtZmFtb3VzXC1ob3JzZTsKK+WFrOWuieWxgCA8IHB1YmxpY1wtc2VjdXJpdHlcLWJ1cmVhdTsKK+eXhemZoiA8IGFcLXNwZWNpYWxpemVkXC1ob3NwaXRhbDsKK+iBr+e2sueSsOWigyA8IG5ldHdvcmtpbmdcLWVudmlyb25tZW50Owor6Z+5IDwgbXVzaWNcLW9mXC1iZWxsXC1hbmRcLWRydW07Civop6Pph4vln7fooYwgPCBpbnRlcnByZXRlZFwtXChjb21wdXRlclwpOwor5YWr5bCP5pmC5bel5L2c5Yi2IDwgZWlnaHRcLWhvdXJcLXdvcmtpbmdcLWRheTsKK+a2iOaBr+mdiOmAmuS6uuWjqyA8IGFcLXdlbGxcLWluZm9ybWVkXC1zb3VyY2U7Civpm5ggPCBkeWVcLW1hZGVcLWZyb21cLXJlZFwtc29pbDsKK+mYhyA8IGFcLWJ1ZGRoaXN0XC1oaWdoXC1wcmllc3Q7CivkuI3ov5Hkurrmg4UgPCBub3RcLWFtZW5hYmxlXC10b1wtcmVhc29uOwor6ZGQIDwgYm9sdFwtb2ZcLWFcLWNoaW5lc2VcLWxvY2s7CivmlL/msrvmqZ/mp4sgPCBwb2xpdGljYWxcLW9yZ2FuaXphdGlvbjsKK+mMhiA8IHRoZVwtY29sb3JcLW9mXC1hXC1taW5lcmFsOwor6YSQIDwgdG93blwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+mBsCA8IGdydW50aW5nXC1zb3VuZFwtb2ZcLXBpZ3M7CivovqUgPCB2YXJpZXR5XC1vZlwtbWFyc2hcLWdyYXNzOwor55eF6LGhIDwgc3ltcHRvbVwtXChvZlwtYVwtZGlzZWFzZVwpOwor5pel5pys57aT5r+f5paw6IGeIDwgamFwYW5lc2VcLWVjb25vbWljXC1uZXdzOwor5qy65YeMIDwgdG9cLWJ1bGx5XC1hbmRcLWh1bWlsaWF0ZTsKK+mBjeWPiiA8IHRvXC1leHRlbmRcLVwoZXZlcnl3aGVyZVwpOwor6LCCIDwgY29uc3VsdFwtY2FyZWZ1bGx5XC13aXRoOwor57C9572yIDwgdG9cLXNpZ25cLVwoYW5cLWFncmVlbWVudFwpOwor6KmqIDwgZGlmZmljdWx0eVwtaW5cLXNwZWFraW5nOwor5aCx5bCOIDwgdG9cLWNvdmVyXC1cKHJlcG9ydFwpXC1uZXdzOwor6Ke/IDwgYVwtYm9ka2luXC1tYWRlXC1vZlwtaXZvcnk7CivluIPmnJcgPCBlbmdsaXNoXC1zdXJuYW1lXCxcLWJyb3duOwor6KaAIDwgdmFyaWFudFwtb2ZcLXJhZGljYWxcLTE0NjsKK+iknyA8IGlubmVyXC1zaGlydFwtb3JcLXNpbmdsZXQ7Civooa0gPCB0aGVcLWxhcGVsXC1vZlwtYVwtZ2FybWVudDsKK+ihpiA8IHNtb290aFwtb3V0XC10aGVcLWNsb3RoZXM7CivmqJnmupYgPCBcKGFuXC1vZmZpY2lhbFwpXC1zdGFuZGFyZDsKK+ioiuaBr+WCs+mBnuS4reS7iyA8IG1lc3NhZ2VcLXRyYW5zZmVyXC1hZ2VudDsKK+WPpuecvOebuOeciyA8IHRvXC12aWV3XC1pblwtYVwtbmV3XC1saWdodDsKK+iVlSA8IGNhcnlvcHRlcmlzXC1kaXZhcmljYXRhOwor6JSvIDwgYVwtdmFyaWV0eVwtb2ZcLWFydGVtaXNpYTsKK+iQtCA8IG1lZGljaW5hbFwtcG9pc29uXC1wbGFudDsKK+iPtiA8IHNwZWNpZXNcLW9mXC13YXRlclwtcGxhbnQ7Civkv6Hmga/mioDooZMgPCBpbmZvcm1hdGlvblwtdGVjaG5vbG9neTsKK+iEpCA8IHJhd1wtbWVhdFwtZm9yXC1zYWNyaWZpY2U7Civnmbznl4XnjocgPCBpbmNpZGVuY2VcLW9mXC1hXC1kaXNlYXNlOwor6ICsIDwgZHJpbGxcLWZvclwtc293aW5nXC1ncmFpbjsKK+eWkeWVj+WPpSA8IGludGVycm9nYXRpdmVcLXNlbnRhbmNlOwor6ICCIDwgdmFyaWFudFwtb2ZcLXJhZGljYWxcLTEyNTsKK+mAgOS8kSA8IHJldGlyZW1lbnRcLVwoZnJvbVwtd29ya1wpOwor57mmIDwgc3RyaW5nXC1vZlwtY29wcGVyXC1jb2luczsKK+S+huWbnuS+huWOu+WcsCA8IGJhY2t3YXJkc1wtYW5kXC1mb3J3YXJkczsKK+WuieWFqOiAg+aFriA8IHNlY3VyaXR5XC1jb25zaWRlcmF0aW9uOwor57eFIDwgc2lsa1wtb2ZcLXB1cnBsaXNoXC1jb2xvcjsKK+i2qOmZhCA8IHRvXC1pbmdyYXRpYXRpb25cLW9uc2VsZjsKK+atpOS4gOaZgiA8IHRoYXRcLXdhc1wtb25lXC1zaXR1YXRpb247Civnr6IgPCB0aGVcLW5hbWVcLW9mXC1iYW1ib29cLWhhdDsKK+ethui3oSA8IGFcLXBlcnNvbicnc1wtaGFuZHdyaXRpbmc7Civkv6Hmga/nrqHnkIYgPCBpbmZvcm1hdGlvblwtbWFuYWdlbWVudDsKK+eboeWKmyA8IGRvXC1vbmUnJ3NcLWJlc3RcLVwoZWZmb3J0XCk7CivntrLntaHlsaTljZTorbAgPCBuZXR3b3JrXC1sYXllclwtcHJvdG9jb2w7CivnrYboqJggPCB0YWtlXC1kb3duXC1cKGluXC13cml0aW5nXCk7CivkuI3lpb3mg7kgPCBub3RcLXRvXC1iZVwtdHJpZmxlZFwtd2l0aDsKK+ikpeWtkCA8IGNvdHRvblwtcGFkZGVkXC1tYXR0cmVzczsKK+eZiiA8IGFcLWRpc2Vhc2VcLW9mXC10aGVcLWhlYXJ0Owor55GxIDwgYVwtZ2VtXC11c2VkXC1hc1wtZWFyXC1wbHVnOwor6Lmm6Lmm6Lez6LezIDwgYm91bmNpbmdcLWFuZFwtdml2YWNpb3VzOwor54+jIDwgbmFtZVwtb2ZcLWFcLWtpbmRcLW9mXC1qYWRlOwor5468IDwgYmVhdXRpZnVsXC1jb2xvclwtb2ZcLWdlbTsKK+eJtyA8IGNvd1wtb3JcLW94XC1vZlwtb25lXC1jb2xvcjsKK+WEmOW/qyA8IGFzXC1xdWlja2x5XC1hc1wtcG9zc2libGU7CivpgJrkv6Hlr4bluqYgPCBjb21tdW5pY2F0aW9uc1wtZGVuc2l0eTsKK+S4jeW+l+W3siA8IGFjdFwtYWdhaW5zdFwtb25lJydzXC13aWxsOwor54SEIDwgcmlzaW5nXC1mbGFtZXNcLW9yXC1mdW1lczsKK+eDliA8IGNhbGFtaXRpZXNcLWZyb21cLWhlYXZlbjsKK+aykuacieW3ruWIpSA8IHRoZXJlXC1pc1wtbm9cLWRpZmZlcmVuY2U7Civmv4DmmIIgPCBhcm91c2VkXC10b1wtaW5kaWduYXRpb247CivkuI3oqIDogIzllrsgPCBpdFwtZ29lc1wtd2l0aG91dFwtc2F5aW5nOwor5bel5qWt5YyW5ZyL5a62IDwgaW5kdXN0cmlhbGl6ZWRcLWNvdW50cnk7CivmraXoqr/kuIDoh7QgPCB0b1wtYmVcLXVuaXRlZFwtaW5cLWFjdGlvbjsKK+erpeipsSA8IGNoaWxkcmVuJydzXC1mYWlyeVwtdGFsZXM7CivmrqIgPCBiZVwtaW5cLWdyZWF0XC1kaWZmaWN1bHR5Owor5qexIDwgZmlyZXdvb2RcLWZvclwtc2FjcmlmaWNlOwor5LiK5Y2K5bm0IDwgZmlyc3RcLWhhbGZcLVwob2ZcLWFcLXllYXJcKTsKK+S4jeimgeiHiSA8IGhhdmVcLW5vXC1zZW5zZVwtb2ZcLXNoYW1lOwor6IOM5Zyw6aKoIDwgYmVoaW5kXC1zb21lYm9keScnc1wtYmFjazsKK+eUqOaItuWIsOe2sue1oeeahOaOpeWPoyA8IHVzZXJcLW5ldHdvcmtcLWludGVyZmFjZTsKK+acjyA8IGxpZ2h0XC1vZlwtY3Jlc2NlbnRcLW1vb247Civml5AgPCBhblwtZW1icm9pZGVyZWRcLXBlbm5hbnQ7CivmlJkgPCB0b1wtZ2l2ZVwtYVwtaGVscGluZ1wtaGFuZDsKK+aPkOS6pCA8IHN1Ym1pdFwtXChhXC1yZXBvcnRcLFwtZXRjXCk7CivmkbAgPCB0b1wtc2VpemVcLXdpdGhcLXRoZVwtaGFuZDsKK+S+m+iBtyA8IGhvbGRcLWFuXC1vZmZpY2VcLW9yXC1wb3N0Owor5pGAIDwgdG9cLWNvdmVyXC13aXRoXC10aGVcLWhhbmQ7CivmkL4gPCB0b1wtY3J1c2hcLXdpdGhcLXRoZVwtaGFuZDsKK+S+huiHqiA8IHRvXC1jb21lXC1mcm9tXC1cKGFcLXBsYWNlXCk7Civlrproqp4gPCBhdHRyaWJ1dGl2ZVwtXChtb2RpZmllclwpOwor6L+R5bm05L6GIDwgZm9yXC10aGVcLXBhc3RcLWZld1wteWVhcnM7CivmgLkgPCBhXC1wb2xpdGVcLXZlcnNpb25cLW9mXC1oZTsKK+a8gua1gSA8IGNhcnJpZWRcLWJ5XC10aGVcLWN1cnJlbnQ7CivluoggPCB1c2VkXC1pblwtcGVyc29uJydzXC1uYW1lczsKK+W1tiA8IGxvd1wtcGFydFwtb2ZcLWFcLW1vdW50YWluOwor5a2SIDwgbGFydmFlXC1vZlwtdGhlXC1tb3NxdWl0bzsKK+ajhOasiiA8IHRvXC1hYnN0YWluXC1mcm9tXC12b3Rpbmc7CivmjY/lkIggPCB0b1wtYWN0XC1hc1wtYVwtZ29cLWJldHdlZW47Civlo5YgPCBvcGVuXC1zcGFjZVwtYWxvbmdcLXdhdGVyOwor55Sy5p2/IDwgZGVja1wtXChvZlwtYVwtYm9hdFwsXC1ldGNcLlwpOwor5YW26Ieq6LqrIDwgb25lJydzXC1vd25cLVwocmVzcGVjdGl2ZVwpOwor5pWZ576p5ZKM6IGW57SEIDwgZG9jdHJpbmVcLWFuZFwtY292ZW5hbnRzOwor5ZmAIDwgc3BpcnRcLW91dFwtb2ZcLXRoZVwtbW91dGg7CivmooXmtL4gPCB0aGVcLW1laVwtbGFuZmFuZ1wtc2Nob29sOwor54Gr54Sw5bGxIDwgdGhlXC1tb3VudGFpblwtb2ZcLWZsYW1lczsKK+a2iemBjiA8IGZvcmRcLVwoYVwtc3RyZWFtXCxcLXJpdmVyXCk7Civlj50gPCB0b1wtcmVzcGVjdGZ1bGx5XC1pbmZvcm07Civlt6XkvZznq5kgPCBcKGNvbXB1dGVyXClcLXdvcmtzdGF0aW9uOwor6auU5YWnIDwgaW50ZXJuYWxcLVwodG9cLXRoZVwtYm9keVwpOwor5LyuIDwgdG9cLW1ha2VcLWFcLWdyZWF0XC1lZmZvcnQ7CivpgJroqIrpgJrpgZMgPCBjb21tdW5pY2F0aW9uc1wtY2hhbm5lbDsKK+S2pSA8IHVuZXZlbmx5XC1maXR0aW5nXC10ZWV0aDsKK+S2pCA8IHNvdW5kXC1vZlwtY2hld2luZ1wtYm9uZXM7CivktoIgPCBhXC1zcXVpcnJlbFwtbGlrZVwtYW5pbWFsOwor5LOuIDwgdG9cLWxvb2tcLWF0XC1pblwtc3VycHJpc2U7CivkspogPCBhXC1zZWNvbmRcLW5hbWVcLWZvclwtc2hhZDsKK+aOoeioquiomOiAhSA8IGludmVzdGlnYXRpdmVcLXJlcG9ydGVyOwor5LC1IDwgbG9va3NcLWxpa2VcLWNvbW1vblwtY2FycDsKK+SwsCA8IGRyZWFyeVwtY3JpZXNcLW9mXC1naG9zdHM7CivkrrogPCBsdXh1cmlhbnRcLW9mXC10aGVcLWdyYXNzOwor5K6qIDwgdG9cLWdlbGRcLWFcLWhvcnNlXC1vclwtYXNzOwor5Km8IDwgc3RpdGNoZXNcLW9uXC1hXC1jb3ZlcmxldDsKK+SpjSA8IHRvXC1sb29rXC1wYWxlXC1vclwtcGFsbGlkOwor5Ki1IDwgcmFpbmVkXC1mb3JcLWFcLWxvbmdcLXRpbWU7CivkpoggPCB0b1wtc2lnaFwtaW5cLWxhbWVudGF0aW9uOwor5KWfIDwgYVwtbWV0YWxcLW1hcmtpbmdcLVwtc3Rha2U7CivohIrmpI4gPCBiYWNrXC1cKG9mXC1hXC12ZXJ0aWJyYXRlXCk7CivkvK/niLYgPCBmYXRoZXInJ3NcLWVsZGVyXC1icm90aGVyOwor5KKOIDwgaW5kaWNhdGluZ1wtZXhjbGFtYXRpb247CivkobUgPCBkZWNvcmF0aW9uXC1vblwtY2FycmlhZ2U7CivkobAgPCBzdHJvbmdcLWFuZFwtZHVyYWJsZVwtaHViOwor5KGsIDwgY292ZXJpbmdcLW9mXC1hXC1jYXJyaWFnZTsKK+ShgSA8IG5vdFwtd2VsbFwtZm9ybWVkXC1maWd1cmU7Civkn70gPCBzY2F0dGVyZWRcLW9yXC1kaXNwZXJzZWQ7CivknpggPCB0b1wtZ29cLXN0cmFpZ2h0XC1mb3J3YXJkOwor5J2iIDwgYW5cLWFuaW1hbFwtaW5cLW9sZFwtdGltZXM7Civkv53lrokgPCBlbnN1cmVcLXB1YmxpY1wtc2VjdXJpdHk7CivknZMgPCBsb25nXC1iZWFyZFwtb3JcLXdoaXNrZXJzOwor5Jy6IDwgaHVza2luZ1wtYmVhbnNcLWZvclwtY2FrZTsKK+ScoSA8IHRvXC1zbWVsbFwtdGhlXC1mcmFncmFudHM7Civkm5kgPCB0b1wtc21lbGxcLXRoZVwtZnJhZ3JhbmNlOwor5JqeIDwgdGhlXC1taWRkbGVcLW9mXC10aGVcLWhvcm47CivljbDmrZDkurogPCBpbmRvXC1ldXJvcGVhblwtXChwZXJzb25cKTsKK+SZhCA8IGNsb3RoZXNcLXdpdGhcLXRoaWNrXC1oZW07CivkmL0gPCBjbG90aGluZ1wtYW5kXC1vcm5hbWVudHM7CivklbQgPCBhXC1zZWNvbmRcLWZvclwtbW9ua3Nob29kOwor5JSgIDwgdGhpblwtcm9vdFwtb2ZcLXRoZVwtbG90dXM7Civkj6kgPCB0b1wtc2hydWdcLXRoZVwtc2hvdWxkZXJzOwor5I2xIDwgdGhlXC13aWxkXC1nb2F0XC1vclwtc2hlZXA7Civki6ogPCBmaW5lXC1hbmRcLWRlbGljYXRlXC1zaWxrOwor5IqPIDwgbWl4aW5nXC1yaWNlXC13aXRoXC1icm90aDsKK+SIhCA8IGFcLWtpbmRcLW9mXC1zb2xpZFwtYmFtYm9vOwor5LiK6LqrIDwgdXBwZXJcLXBhcnRcLW9mXC10aGVcLWJvZHk7Civkh6MgPCBiYW1ib29cLXdpdGhcLXdoaXRlXC1iYXJrOwor5ISgIDwgdG9cLXNhY3JpZmljZVwtdG9cLWhlYXZlbjsKK+SDpyA8IHNvdW5kXC1vZlwtZmFsbGluZ1wtcm9ja3M7CivkgIQgPCBjb250YWluZXJcLWZ1bGxcLW9mXC1mb29kOwor47+LIDwgYVwta2luZFwtb2ZcLXNraW5cLWRpc2Vhc2U7CivjvJ4gPCBqYXJcLXdpdGhcLWFcLXNtYWxsXC1tb3V0aDsKK+O6niA8IHRvXC1zaWduXC1pblwtbGFtZW50YXRpb247CivlnablhYvou4ogPCB0YW5rXC1cKGFybW9yZWRcLXZlaGljbGVcKTsKK+O4ryA8IGFcLWZpbmVcLWJyZWVkXC1vZlwtY2F0dGxlOwor5q+U6LyD6ICM6KiAIDwgY29tcGFyYXRpdmVseVwtc3BlYWtpbmc7Civjta8gPCBzb3VuZFwtb2ZcLXdhdGVyXC1mbG93aW5nOwor47OvIDwgZ29kZGVzc1wtb2ZcLWFuXC1pbmtcLXNsYWI7CivjsYYgPCB0b1wtc21pbGVcLWF0XC1lYWNoXC1vdGhlcjsKK+OwqCA8IHRvXC10YWtlXC1icmVhdGhcLW9yXC1yZXN0Owor466RIDwgc291bmRcLW9mXC1icm9rZW5cLXN0aWNrczsKK+OtryA8IHRyZWVcLXdpdGhcLXNtYWxsXC1sZWF2ZXM7CivlrZfmrrUgPCBcKG51bWVyaWNcLFwtZGF0ZGFcKVwtZmllbGQ7Civjq4ogPCBmbHV0dGVyaW5nXC1vZlwtdGhlXC1mbGFnOwor46qjIDwgYVwtcGxhY2VcLWluXC1oYW5cLWR5bmFzdHk7Civjqp8gPCB0b1wtcmVnYXJkXC1hc1wtaW1wb3J0YW50Owor46qeIDwgdG9cLWJlXC1oZWxkXC1ieVwtdGhlXC1oYW5kOwor46m6IDwgYVwtY3JhY2tcLW9uXC10aGVcLXV0ZW5zaWw7CivjqZwgPCB0b1wtYmVcLWluXC1wb3NzZXNzaW9uXC1vZjsKK+OpjiA8IHRvXC1wcmVzc1wtd2l0aFwtYVwtZmluZ2VyOwor46e2IDwgdGhlXC1qaW5nbGluZ1wtb2ZcLW1ldGFsczsKK+OnmSA8IHRvXC1naXZlXC1hXC1wbGF5ZnVsXC1ibG93Owor46eDIDwgdG9cLXJlY2VpdmVcLXdoYXRcLWlzXC1kdWU7CivjpqMgPCB0b1wtdGFsa1wtaW5cLW9uZScnc1wtc2xlZXA7CivjpoQgPCBoYXJkXC10b1wtc2F5XC1vclwtcHJlZGljdDsKK+OkiiA8IGNoZWVyZnVsXC1hbmRcLWV4dWJlcmFudDsKK+S4puiIiSA8IGRldmVsb3BcLXNpbXVsdGFuZW91c2x5Owor46KJIDwgYVwtcm9vbVwtd2l0aFwtb3Blblwtc3BhY2U7CivkuIDomZ8gPCBmaXJzdFwtZGF5XC1vZlwtdGhlXC1tb250aDsKK+OglCA8IHNoYXBlc1wtb2ZcLXRoZVwtbW91bnRhaW47Civjn7sgPCB0aGVcLW1vYXRcLWFyb3VuZFwtYVwtY2l0eTsKK+mboumWi+aVhemEiSA8IHRvXC1sZWF2ZVwtb25lJydcLWhvbWVsYW5kOwor45uzIDwgYW5cLWFibm9tYWxcLXVuYm9yblwtYmFieTsKK+OatyA8IHRoZVwtYnJlYXN0c1wtb2ZcLWFcLXdvbWFuOwor45mzIDwgcnVnZ2VkbmVzc1wtb2ZcLXRoZVwtcm9hZDsKK+OZpCA8IGFcLWNyYWNrXC1pblwtZWFydGhlbndhcmU7CivjmZggPCB1c2VkXC1pblwtbmFtaW5nXC1hXC1wbGFjZTsKK+OXgiA8IHRvXC1rZWVwXC10aGVcLW1vdXRoXC1zaHV0Owor45aQIDwgc291bmRcLW9mXC1jYWxsaW5nXC1kdWNrczsKK+OUtCA8IGFncmljdWx0dXJhbFwtaW1wbGVtZW50Owor45O5IDwgYVwtc2hhcnBcLXBvaW50ZWRcLXdlYXBvbjsKK+OTpiA8IHRvXC1kZWxpYmVyYXRlXC1hbmRcLXBsYW47Civjk5ggPCBqYWRlXC13aXRoXC1zb21lXC1kZWZlY3RzOwor5LiN5YOP5qijIDwgaW5cLW5vXC1zaGFwZVwtdG9cLWJlXC1zZWVuOwor5a+p5YikIDwgcHV0XC1cKHNvbWVvbmVcKVwtdG9cLXRyaWFsOwor5ZCQ6JWDIDwgYW5jaWVudFwtbmFtZVwtZm9yXC10aWJldDsKK+a4rOWumiA8IHRvXC1zdXJ2ZXlcLWFuZFwtZXZhbHVhdGU7Civms7DnvoUgPCBcKGVuZ2xpc2hcLXN1cm5hbWVcKVwtdHlsbzsKK+WQnuiBsiA8IHRvXC1zd2FsbG93XC1vbmUnJ3NcLWNyaWVzOwor6K6K5YiG5rOVIDwgY2FsY3VsdXNcLW9mXC12YXJpYXRpb25zOwor6LKh5pyDIDwgZmluYW5jZVwtYW5kXC1hY2NvdW50aW5nOwor6YCa5L+h57ay57WhIDwgY29tbXVuaWNhdGlvbnNcLW5ldHdvcms7CivkuqTmmJMgPCBcKGJ1c2luZXNzXClcLXRyYW5zYWN0aW9uOwor6KW/6YGK6KiYIDwgcGlsZ3JpbWFnZVwtdG9cLXRoZVwtd2VzdDsKK+aVuOWtl+mAmuS/oSA8IGRpZ2l0YWxcLWNvbW11bmljYXRpb25zOwor54++5b25IDwgXChtaWxpdGFyeVwpXC1hY3RpdmVcLWR1dHk7CivlhbHnlKLpu6jlk6EgPCBjb21tdW5pc3RcLXBhcnR5XC1tZW1iZXI7CivmsJHpgbggPCBkZW1vY3JhdGljYWxseVwtZWxlY3RlZDsKK+a1t+aLlCA8IGhlaWdodFwtYWJvdmVcLXNlYVwtbGV2ZWw7CivntrLot6/mnrbmp4sgPCBuZXR3b3JrXC1pbmZyYXN0cnVjdHVyZTsKK+enkeaKgCA8IHNjaWVuY2VcLWFuZFwtdGVjaG5vbG9neTsKK+S7u+WFjSA8IHRvXC1hcHBvaW50XC1hbmRcLWRpc21pc3M7CivnlaLmpa3nlJ8gPCBncmFkdWF0ZVwtXChvZlwtYVwtc2Nob29sXCk7CivkuoLlr6sgPCB0b1wtd3JpdGVcLXdpdGhvdXRcLWJhc2lzOwor6Zu26YyiIDwgY2hhbmdlXC1cKHNhaWRcLW9mXC1tb25leVwpOwor5LiN5pyNIDwgbm90XC1hY2NlcHRcLVwoc29tZXRoaW5nXCk7CivpvLvlhZIgPCBhXC1ob2xlXC1pblwtYW5cLWltcGxlbWVudDsKK+aEn+WYhiA8IHRvXC1zaWdoXC1cKHdpdGhcLWZlZWxpbmdcKTsKK+WMluijnSA8IFwob2ZcLWFjdG9yc1wpXC10b1wtbWFrZVwtdXA7CivkupHljZcgPCB5dW5uYW5cLXByb3ZpbmNlXCxcLWNoaW5hOwor5pyN5a6MIDwgc2VydmVcLW91dFwtXChhXC1zZW50ZW5jZVwpOwor6buD5bGxIDwgbXRcLlwtaHVhbmdcLVwoaHVhbmdcLXNoYW5cKTsKK+WPpOazoiA8IGd1Ym9cLVwoYVwtcGVyc29uYWxcLW5hbWVcKTsKK+eMnOaLsyA8IGFcLWZpbmdlclwtZ3Vlc3NpbmdcLWdhbWU7Civnvo7lnIvkuYvpn7MgPCB2b2ljZVwtb2ZcLWFtZXJpY2FcLXJhZGlvOwor6IOM6buR6Y2LIDwgdG9cLWJlXC1tYWRlXC1hXC1zY2FwZWdvYXQ7CivliqnoqZ4gPCBwYXJ0aWNsZVwtXChncmFtbWF0aWNhbFwpOwor6Z2I5pWP5bqmIDwgXChsZXZlbFwtb2ZcKVwtc2Vuc2l0aXZpdHk7CivmqJnmupbntYTnuZQgPCBzdGFuZGFyZHNcLW9yZ2FuaXphdGlvbjsKK+eNqOaUrOW4guWgtCA8IHRvXC1tb25vcG9saXplXC1hXC1tYXJrZXQ7Civop4kgPCB0b1wtd2FrZVwtdXBcLWZyb21cLXNsZWVwOwor55KwIDwgamFkZVwtcmluZ1wtb3JcLWJyYWNlbGV0Owor5YiSIDwgdG9cLXJvd1wtb3JcLXBhZGRsZVwtYm9hdDsKK+WgqiA8IGFkZXF1YXRlbHlcLWNhcGFibGVcLW9mOwor5ZC0IDwgbmFtZVwtb2ZcLXdhcnJpbmdcLXN0YXRlOwor6bO0IDwgY3J5XC1vZlwtYmlyZFwtb3JcLWFuaW1hbDsKK+WRiSA8IG9uZVwtb2ZcLXdhcnJpbmdcLXN0YXRlczsKK+mmsyA8IGdvXC1xdWlja2x5XC1vclwtc3dpZnRseTsKK+amjiA8IHNtYWxsXC1ldmVyZ3JlZW5cLXNocnViOwor5ae7IDwgcmVsYXRpdmVzXC1ieVwtbWFycmlhZ2U7CivnrZIgPCB0aGlja1wtcGllY2VcLW9mXC1iYW1ib287CivluJggPCBmbGFnXC1zaWduXC1vZlwtYVwtdGF2ZXJuOwor56i7IDwgcmljZVwtZ3Jvd2luZ1wtaW5cLWZpZWxkOwor56awIDwgb25lJydzXC1kZWNlYXNlZFwtZmF0aGVyOwor5YmCIDwgbWVkaWNpbmFsXC1wcmVwYXJhdGlvbjsKK+ePgiA8IGluZmVyaW9yXC1raW5kXC1vZlwtamFkZTsKK+WYnyA8IHNvdW5kXC1vZlwtaG9yblwtdG9vdGluZzsKK+eRnCA8IGZsYXdsZXNzXC1nZW1cLW9yXC1qZXdlbDsKK+ePkSA8IGFcLWdlbVwtY3V0XC1saWtlXC1kcmFnb247Civor6wgPCBtYWtlXC1mYWxzZVwtYWNjdXNhdGlvbjsKK+WrliA8IHBhdHJvbml6ZVwtcHJvc3RpdHV0ZXM7Civpo5IgPCB0aGVcLXNvdW5kXC1vZlwtdGhlXC13aW5kOwor6ZSiIDwgcnVuXC1tZXRhbFwtaW50b1wtY3JhY2tzOwor5o6WIDwgc3VwcG9ydFwtd2l0aFwtdGhlXC1hcm1zOwor5qOjIDwga2VycmlhXC1qYXBvbmljYVwtcGxhbnQ7Civoj4EgPCBmbG93ZXJcLW9mXC1sZWVrXC1mYW1pbHk7CivlkqkgPCB0aGVcLWJsZWF0aW5nXC1vZlwtc2hlZXA7Civnj4kgPCBzdG9uZVwtcmVzZW1ibGluZ1wtamFkZTsKK+mSjiA8IHRvb2xcLWZvclwtYm9yaW5nXC1ob2xlczsKK+aKnyA8IHJvbGxcLWFyb3VuZFwtd2l0aFwtaGFuZDsKK+i2uCA8IHNlbGxcLW9yXC1idXlcLXdob2xlc2FsZTsKK+WmoyA8IG9uZScnc1wtZGVjZWFzZWRcLW1vdGhlcjsKK+W1iiA8IGRpc3RyaWN0XC1pblwtc2hhb2hzaW5nOwor56y4IDwgZmxhdFwtYmFza2V0XC1mb3JcLWdyYWluOwor6IKrIDwgdGhlXC1naXp6YXJkXC1vZlwtYVwtZm93bDsKK+iLqyA8IHJ1c2hcLW9yXC1zdHJhd1wtbWF0dGluZzsKK+WzpCA8IGhpZ2hcLXBvaW50ZWRcLW1vdW50YWluOwor56etIDwgb25lXC10aG91c2FuZFwtbWlsbGlvbnM7Civlp5IgPCB3aWZlXC1vZlwtZWxkZXJcLWJyb3RoZXI7Civok7AgPCB0b1wtaW5jcmVhc2VcLWZpdmVcLWZvbGQ7CivokowgPCBhcnRlbWlzaWFcLXN0ZWxsZXJpYW5hOwor6YWDIDwgdGhlXC1zcGlyaXRcLW9mXC1hXC1iZWluZzsKK+ezlyA8IHBhcmNoZWRcLXdoZWF0XC1vclwtcmljZTsKK+i+iyA8IGV4dGVyaW9yXC1yaW1cLW9mXC13aGVlbDsKK+mrqyA8IGNoaWxkcmVuJydzXC1oYWlyXC1zdHlsZTsKK+iZuiA8IGxhcmdlXC1wb2lzb25vdXNcLXNuYWtlOwor6Ya1IDwgY29udHJpYnV0ZVwtZm9yXC1kcmlua3M7CivomqwgPCBhXC12YXJpZXR5XC1vZlwtYml2YWx2ZXM7Civoo7wgPCB0b1wtdGFrZVwtb2ZmXC1vbmUnJ3NcLXRvcDsKK+ectSA8IGV5ZXNcLWRpc2Vhc2VkXC1hbmRcLWRpbTsKK+aetSA8IGhvbGxvXC1zdHVtcFwtb2ZcLWFcLXRyZWU7CivomKkgPCBhcnRlbWlzaWFcLXN0ZWxsYXJpYW5hOwor6K6T5Z2QIDwgdG9cLWdpdmVcLXVwXC1vbmUnJ3NcLXNlYXQ7CivlvazlvazmnInnpq4gPCByZWZpbmVkXC1hbmRcLWNvdXJ0ZW91czsKK+e2sue1oeeuoeeQhuWToSA8IG5ldHdvcmtcLWFkbWluaXN0cmF0b3I7Civmsrnlg7kgPCBvaWxcLVwocGV0cm9sZXVtXClcLXByaWNlOwor6Luf56Gs5Lu2IDwgc29mdHdhcmVcLWFuZFwtaGFyZHdhcmU7Civlt6jpoY0gPCBhXC1odWdlXC1zdW1cLVwob2ZcLW1vbmV5XCk7CivlpZTmlL4gPCBib2xkXC1hbmRcLXVucmVzdHJhaW5lZDsKK+W+l+aEjyA8IFwoYmVcKVwtcHJvdWRcLW9mXC1vbmVzZWxmOwor5a6M5YWo5YW85a65IDwgY29tcGxldGVseVwtY29tcGF0aWJsZTsKK+eGsemWgOiyqCA8IGdvb2RzXC1pblwtZ3JlYXRcLWRlbWFuZDsKK+mAmuS/oemHjyA8IGNvbW11bmljYXRpb25zXC12b2x1bWU7CivlpZTlv5kgPCBiZVwtYnVzeVwtcnVzaGluZ1wtYWJvdXQ7Civop4DmuKzooZvmmJ8gPCBvYnNlcnZhdGlvblwtc2F0ZWxsaXRlOwor5Ymb55u0IDwgdXByaWdodFwtYW5kXC1vdXRzcG9rZW47Civlt6Hpgo8gPCBiZVwtb25cLVwocG9saWNlXClcLXBhdHJvbDsKK+elneizgOipniA8IGNvbmdyYXR1bGF0b3J5XC1zcGVlY2g7Civpm7vohabovJTliqnoqK3oqIggPCBjb21wdXRlclwtYWlkZWRcLWRlc2lnbjsKK+mZjeemjyA8IGJsZXNzaW5nc1wtZnJvbVwtaGVhdmVuOwor54K46JelIDwgZXhwbG9zaXZlXC1cKHN1YnN0YW5jZVwpOwor5bm+5Y2B5bm0IDwgc2V2ZXJhbFwtdGVuc1wtb2ZcLXllYXJzOwor5aSi5oOzIDwgdG9cLWRyZWFtXC1vZlwtXChpblwtdmFpblwpOwor6Ziy56m6IDwgYW50aVwtYWlyY3JhZnRcLWRlZmVuc2U7CivkuInokKzkuIPljYMgPCB0aGlydHlcLXNldmVuXC10aG91c2FuZDsKK+WFiOmAsiA8IGFkdmFuY2VkXC1cKHRlY2hub2xvZ3lcKTsKK+Wkp+i1puWci+mamyA8IGFtbmVzdHlcLWludGVybmF0aW9uYWw7Civmg4XloLHlrpjlk6EgPCBpbnRlbGxpZ2VuY2VcLW9mZmljaWFsOwor5aWU5ZG9IDwgcnVzaFwtYWJvdXRcLW9uXC1lcnJhbmRzOwor5q+U5pa56KqqIDwgdG9cLW1ha2VcLWFuXC1hbmFsb2d5XC5cLlwuOwor6Zu756OB5Zmq6IGyIDwgZWxlY3Ryb21hZ25ldGljXC1ub2lzZTsKK+mVt+mAlOe2sui3ryA8IGxvbmdcLWRpc3RhbmNlXC1uZXR3b3JrOwor6Iqd5Yqg5ZOl5aSn5a24IDwgdW5pdmVyc2l0eVwtb2ZcLWNoaWNhZ287Civop6PmsbogPCB0b1wtc2V0dGxlXC1cKGFcLWRpc3B1dGVcKTsKK+m8gyA8IHRoZVwtZWRpYmxlXC13YXRlclwtZnJvZzsKK+m6peiKveezliA8IG1hbHRvc2VcLVwoc3dlZXRcLXN5cnVwXCk7Civpt4AgPCB0aGVcLWZpc2hpbmdcLWNvcm1vcmFudDsKK+e+juiBr+ekviA8IGFzc29jaWF0ZWRcLXByZXNzXC1cKGFwXCk7CivptKAgPCBhXC1raW5kXC1vZlwtbmlnaHRpbmdhbGU7CivpmLLmsrsgPCBcKHByZXZlbnRpb25cLWFuZFwpXC1jdXJlOwor6bCkIDwgc2VyaW9sYVwtcWlucXVlcmFkaWF0YTsKK+avlOiJsuWIhuaekCA8IGNvbG9yaW1ldHJpY1wtYW5hbHlzaXM7Civpr4QgPCBsZXBpZG90cmlnbGFcLXN0cmF1Y2hpOwor6auIIDwgZGVmaW5lZFwtYXNcLXRoZVwtcGVsdmlzOwor5o6o6Jam5L+hIDwgcmVjb21tZW5kYXRpb25cLWxldHRlcjsKK+W6q+eIvuW+t+S6uiA8IGt1cmRpc2hcLXBlcnNvblx8cGVvcGxlOwor5b6u6Luf5YWs5Y+4IDwgbWljcm9zb2Z0XC1jb3Jwb3JhdGlvbjsKK+WIhuapnyA8IFwodGVsZXBob25lXClcLWV4dGVuc2lvbjsKK+miuCA8IGNvb2xcLWJyZWV6ZVwtb2ZcLWF1dHVtbjsKK+ecvuacmyA8IHBlb3BsZScnc1wtZXhwZWN0YXRpb25zOwor5LiN6K2Y5oqs6IiJIDwgZmFpbFwtdG9cLWFwcHJlY2lhdGVcLXNiOwor55m957OWIDwgXChyZWZpbmVkXClcLXdoaXRlXC1zdWdhcjsKK+aTgeaItCA8IHRvXC1zdXBwb3J0XC1cKGFcLXBlcnNvblwpOwor5bit5Y235Lqe5rSyIDwgdG9cLXN3ZWVwXC10aHJvdWdoXC1hc2lhOwor6KGo6YGUIDwgdG9cLXZvaWNlXC1cKGFuXC1vcGluaW9uXCk7Civlub7lpKnkvoYgPCBmb3JcLXRoZVwtcGFzdFwtZmV3XC1kYXlzOwor5aCx5pmCIDwgZ2l2ZVwtdGhlXC1jb3JyZWN0XC10aW1lOwor6Zqo5ZKMIDwgYW1pYWJsZVwtXChkaXNwb3NpdGlvblwpOwor5L2c5qWt55Kw5aKDIDwgb3BlcmF0aW5nXC1lbnZpcm9ubWVudDsKK+mFjiA8IGRvdWJsZVwtZmVybWVudGVkXC13aW5lOwor5Ye95o6IIDwgY29ycmVzcG9uZGVuY2VcLWNvdXJzZTsKK+i/t+aIgCA8IHRvXC1iZVwtaW5mYXR1YXRlZFwtd2l0aDsKK+mZuOa1t+epuuS4iei7jSA8IGFybXlcLFwtbmF2eVwsXC1haXJcLWZvcmNlOwor5oqV5LqG56WoIDwgcGFzdFwtdGVuc2VcLW9mXC10b1wtdm90ZTsKK+iCr+WwvOi/qiA8IGtlbm5lZHlcLVwocHJvcGVyXC1uYW1lXCk7Civmi5fpmbcgPCBnZW9sb2dpY2FsXC1kZXByZXNzaW9uOwor5YWN55arIDwgaW1tdW5pdHlcLVwodG9cLWRpc2Vhc2VcKTsKK+WFrOeEtiA8IFwoZG9cLXNvbWV0aGluZ1wpXC1vcGVubHk7CivmmbrmhafnlKLmrIogPCBpbnRlbGxlY3R1YWxcLXByb3BlcnR5Owor6LC6IDwgdGhlXC1tb3V0aFwtb2ZcLWFcLXZhbGxleTsKK+WgheaMgSA8IHRvXC1jb250aW51ZVwtdXBob2xkaW5nOwor5Ye65beuIDwgYmVcLW9uXC1hXC1idXNpbmVzc1wtdHJpcDsKK+iguCA8IGF1bGFjb3Bob3JhXC1mZW1vcmFsaXM7CivmvLjpgLIgPCBwcm9ncmVzc1wtc3RlcFwtYnlcLXN0ZXA7CivonLogPCByZWZsZWN0aW9uXC1vZlwtcmFpbmJvdzsKK+acrOWcn+WMlui7n+S7tiA8IHNvZnR3YXJlXC1sb2NhbGl6YXRpb247CivomJggPCBhXC1raW5kXC1vZlwtd2lsZFwtZ2luZ2VyOwor6ZmQ5Yi2IDwgXChpbXBvc2VcKVwtcmVzdHJpY3Rpb25zOwor6JWaIDwgdGhlXC1jYWx5eFwtb2ZcLWFcLWZsb3dlcjsKK+S/neitt+WNgCA8IGNvbnNlcnZhdGlvblwtZGlzdHJpY3Q7CivokbkgPCBraW5kXC1vZlwtY2hyeXNhbnRoZW11bTsKK+iQuyA8IHNtYWxsXC1idWRkaGlzdFwtdGVtcGxlOwor5bm05YidIDwgYmVnaW5uaW5nXC1vZlwtdGhlXC15ZWFyOwor6IiaIDwgdG9cLXB1dFwtb3V0XC10aGVcLXRvbmd1ZTsKK+Wlp+W+t+izvSA8IHRoZVwtb2R5c3NleVwsXC1ieVwtaG9tZXI7Civpq5jntJrlrpjlk6EgPCBoaWdoXC1yYW5raW5nXC1vZmZpY2lhbDsKK+WNiuWknOS4ieabtCA8IGluXC10aGVcLWRlcHRoXC1vZlwtbmlnaHQ7CivnrYbpjIQgPCBwdXRcLWRvd25cLVwoaW5cLXdyaXRpbmdcKTsKK+aMieiEiCA8IGZlZWxcLVwodGFrZVwpXC10aGVcLXB1bHNlOwor57m0IDwgYVwta2luZFwtb2ZcLWZpc2hpbmdcLW5ldDsKK+ervCA8IGJhbWJvb1wtY292ZXJcLWZvclwtYm9hdDsKK+WPlua2iOemgeS7pCA8IHRvXC1saWZlXC1hXC1wcm9oaWJpdGlvbjsKK+emqCA8IHByYXlcLWZvclwtZ29vZFwtZm9ydHVuZTsKK+aLm+iBmCA8IHRha2VcLWpvYlwtYXBwbGljYXRpb25zOwor6LaK5Y2X6KqeIDwgdmlldG5hbWVzZVwtXChsYW5ndWFnZVwpOwor55mlIDwgb2JzdHJ1Y3Rpb25cLW9mXC1ib3dlbHM7Civnl48gPCBhXC1icnVpc2VcLW9yXC1jb250dXNpb247CivmjIHkuI3lkIzmlL/opovogIUgPCBcKHBvbGl0aWNhbFwpXC1kaXNzaWRlbnQ7CivlhYnlt54gPCBrd2FuZ2p1XC1cKHNvdXRoXC1rb3JlYVwpOwor5a+m6Zqb5oeJ55SoIDwgcHJhY3RpY2FsXC1hcHBsaWNhdGlvbjsKK+eSoSA8IGphZGVcLWxvb2tcLWFsaWtlXC1zdG9uZTsKK+W3peWVhiA8IGluZHVzdHJ5XC1hbmRcLWNvbW1lcmNlOwor5r6z5rSyIDwgYXVzdHJhbGlhXC1cKGNvbnRpbmVudFwpOwor55Sf55Si6IO95YqbIDwgbWFudWZhY3R1cmluZ1wtYWJpbGl0eTsKK+e4vee1semBuOiIiSA8IHByZXNpZGVudGlhbFwtZWxlY3Rpb247Civnmq7lhZIgPCBcKGRvdWdoXCxcLWV0Y1wuXCl3cmFwcGVyczsKK+a+giA8IGNsZWFyXC1hbmRcLXN0aWxsXC13YXRlcjsKK+eUmOiChSA8IGdhbnN1XC1wcm92aW5jZVwsXC1jaGluYTsKK+S4jeaTh+aJi+autSA8IGJ5XC1mYWlyXC1tZWFuc1wtb3JcLWZvdWw7Civmt5wgPCByb2FyXC1vZlwtZGFzaGluZ1wtd2F2ZXM7CivmsocgPCBmbG93aW5nXC1hbmRcLWVuZ3VsZmluZzsKK+WuiemWkiA8IHBlYWNlZnVsXC1hbmRcLWNhcmVmcmVlOwor6Imx5beoIDwgdmVyeVwtZGlmZmljdWx0XC1cKHRhc2tcKTsKK+igu+apqyA8IHJ1ZGVcLWFuZFwtdW5yZWFzb25hYmxlOwor57C95a2XIDwgdG9cLXNpZ25cLVwoYVwtc2lnbmF0dXJlXCk7Civmmo4gPCBzdW5cLWJlZ2lubmluZ1wtZGVjbGluZTsKK+WuiemBqSA8IHF1aWV0XC1hbmRcLWNvbWZvcnRhYmxlOwor5ZyL6Zqb5qiZ5rqWIDwgaW50ZXJudGlvbmFsXC1zdGFuZGFyZDsKK+mHkemZteWkp+WtuCA8IHVuaXZlcnNpdHlcLW9mXC1uYW5raW5nOwor55Ww6LOq57ay6LevIDwgaGV0ZXJvZ2VuZW91c1wtbmV0d29yazsKK+eZveaJi+i1t+WutiA8IGJ1aWxkXC11cFwtZnJvbVwtbm90aGluZzsKK+W1vCA8IHdpbmRpbmdcLW1vdW50YWluXC1wYXRoOwor6JGh6JCE54mZ6KqeIDwgcG9ydHVndWVzZVwtXChsYW5ndWFnZVwpOwor5ris6ImvIDwgdG9cLXN1cnZleVwtYW5kXC1tZWFzdXJlOwor6LOH5paZ5YKz6YCB5pyN5YuZIDwgZGF0YVwtZGVsaXZlcnlcLXNlcnZpY2U7Civnj63ou4ogPCByZWd1bGFyXC1idXNcLVwoc2VydmljZVwpOwor5Z+1IDwgaGFyZGVuZWRcLWRpcnRcLW9yXC1jbGF5Owor5Ze7IDwgdG9cLXNjcmVlblwuXC1sb3F1YWNpb3VzOwor5qGI55SxIDwgbWFpblwtcG9pbnRzXC1vZlwtYVwtY2FzZTsKK+iytuisqyA8IGJhbmlzaFwtZnJvbVwtdGhlXC1jb3VydDsKK+m7g+mtmiA8IHllbGxvd1wtY3JvYWtlclwtXChmaXNoXCk7CivouqvkuJYgPCBvbmUnJ3NcLWxpZmVcLWV4cGVyaWVuY2U7CivmirHmgaggPCBoYXZlXC1hXC1nbmF3aW5nXC1yZWdyZXQ7CivljJ8gPCBkaXZhblwtZm9yXC10d29cLXBlcnNvbnM7Civlib4gPCB0b1wtcGlja1wtdXBcLXdpdGhcLWtuaWZlOwor5Zub5bm05YmNIDwgZm91clwteWVhcnNcLXByZXZpb3VzbHk7Civoh6rlj6QgPCBcKHNpbmNlXClcLWFuY2llbnRcLXRpbWVzOwor5LWXIDwgdG9cLWNsZWFuXC10aGVcLXdpdGhlcmVkOwor5LWEIDwgdG9cLWJvaWxcLW9yXC1zdGV3XC13aGVhdDsKK+SzuSA8IGFcLWtpbmRcLWRvdmVcLWxpa2VcLWJpcmQ7Civks50gPCBhXC1raW5kXC1vZlwtc21hbGxcLWJpcmRzOwor5LGfIDwgYVwta2luZFwtb2ZcLXNpbHZlclwtZmlzaDsKK+S7i+izquioquWVj+aOp+WItiA8IG1lZGl1bVwtYWNjZXNzXC1jb250cm9sOwor5K+vIDwgaGFuZ1wtZG93blwtb2ZcLXRoZVwtaGFpcjsKK+SvrSA8IG9mXC1uaWNlXC1hbmRcLWdvb2RcLWhhaXI7CivkroQgPCBhblwtb25lXC15ZWFyXC1vbGRcLWhvcnNlOwor56yG5paXIDwgcm91bmRcLWJvdHRvbWVkXC1iYXNrZXQ7CivkuIDoh4LkuYvlipsgPCBcKGxlbmRcKVwtYVwtaGVscGluZ1wtaGFuZDsKK+SqpSA8IHNoYWxsb3RzXC1vclwtc2NhbGxpb25zOwor5KmpIDwgYVwtbWVhc3VyZVwtb2ZcLWNhcGFjaXR5Owor5Ka9IDwgYW5cLWVhc3RcLWFuZFwtd2VzdFwtd2FsbDsKK+ijvemAoOWVhiA8IG1hbnVmYWN0dXJpbmdcLWNvbXBhbnk7CivkppogPCB3aWRlXC1vcGVuXC1vZlwtdGhlXC1kb29yOwor5KaMIDwgdGhlXC1kb29yXC1pc1wtd2lkZVwtb3BlbjsKK+S6jOiZnyA8IDJcLW5kXC1kYXlcLW9mXC10aGVcLW1vbnRoOwor5KWIIDwgdGhlXC1zeW1ib2xcLWZvclwtY29iYWx0Owor5LiN5YCr5LiN6aGeIDwgbmVpdGhlclwtZmlzaFwtbm9yXC1mb3dsOwor5KSXIDwgdGFzdGVcLW9mXC1zdHJvbmdcLWRyaW5rOwor5KKpIDwgdG9cLWZvcmJpZFwtdG9cLXByb2hpYml0Owor5KG2IDwgdmVoaWNsZXNcLWFuZFwtZ2FybWVudHM7CivknpogPCB0b1wtaGFuZ1wtb25cLWFcLWJpZ1wtdHJlZTsKK+SdliA8IHJlcHRpbGVzXC13aXRob3V0XC1mZWV0Owor5JuxIDwgdG9cLXRhbGtcLXVucmVtaXR0aW5nbHk7Civkm4ogPCBjaGVlcmZ1bFwtYWxsXC10aGVcLXRpbWU7Civkm4MgPCB1c2VkXC1pblwtcGVyc29uJydzXC1uYW1lOwor5JiQIDwgdGhlXC1ibGVlZFwtYXRcLXRoZVwtbm9zZTsKK+SXiSA8IGFcLXNtYWxsXC1zb2xpdGFyeVwtd2FzcDsKK+WfuuacrOWOn+eQhiA8IGZ1bmRhbWVudGFsXC1wcmluY2lwbGU7CivklpQgPCBhXC1raW5kXC1vZlwtd2hpdGVcLXRpZ2VyOwor5JaNIDwgdG9cLWFjdFwtd2l0aFwtcmV2ZXJlbmNlOwor5JS1IDwgZnJhZ3JhbnRcLXRob3JvdWdod29ydDsKK+iyoee2kyA8IGZpbmFuY2VcLWFuZFwtZWNvbm9taWNzOwor5JSKIDwgZGVuc2VcLWdyb3d0aFwtb2ZcLWdyYXNzOwor5JOSIDwgc2NpcnB1c1wtY3lwZXJpbnVzXC12YXI7CivmkqvppIrmiJDkurogPCB0b1wtYnJpbmdcLXVwXC1cKGFcLWNoaWxkXCk7CivkkqYgPCBncmFzc1wtZmxvYXRzXC1vblwtd2F0ZXI7CivkkoQgPCBmdWxseVwtbGFkZW5cLW9mXC1hXC1ib2F0Owor5JGdIDwgYVwtc21hbGxcLWN1cFwtd2l0aFwtZWFyczsKK+SPpCA8IHRvcFwtb2ZcLXRoZVwtaHVtYW5cLWhlYWQ7CivkuLvoqp4gPCBcKGdyYW1tYXRpY2FsXClcLXN1YmplY3Q7CivkjrYgPCBvZmZlcmluZ1wtYmxvb2RcLXRvXC1nb2Q7CivpgJrkv6HmnI3li5kgPCBjb21tdW5pY2F0aW9uXC1zZXJ2aWNlOwor5I6aIDwgdGhlXC1lbmRcLW9mXC1iaXJkXC13aW5nczsKK+SOliA8IHNvYXJpbmdcLXVwXC1pblwtdGhlXC1za3k7CivkjKcgPCBhXC1raW5kXC1vZlwtc2lsa1wtZmFicmljOwor5IyfIDwgdG9cLXdlYXZlXC1zaWxrXC1yaWJib25zOwor5ZiW5ZiWIDwgdG9cLWNsaWNrXC1vbmUnJ3NcLXRvbmd1ZTsKK+SLgiA8IGRyZXNzZXNcLWZvclwtdGhlXC1icmlkZTsKK+SIpyA8IHNraW5cLW9mXC1iYW1ib29cLXNob290czsKK+SIniA8IGFuY2llbnRcLW5hbWVcLW9mXC1pbmRpYTsKK+SHviA8IGFcLWZsdXRlXC13aXRoXC0yM1wtdHViZXM7Civkh7AgPCBhXC1iYW1ib29cLWJpbmRlZFwtdG9yY2g7Civkh6EgPCB0aGVcLXNodXR0bGVcLW9mXC1hXC1sb29tOwor5IagIDwgYVwtZ292ZXJubWVudFwtb2ZmaWNpYWw7CivkhpsgPCBzb21ldGhpbmdcLWluXC10aGVcLWNhdmU7CivpvLvnpZYgPCB0aGVcLWVhcmxpZXN0XC1hbmNlc3RvcjsKK+SFlyA8IGZvdXJcLWJ1bmRsZVwtb2ZcLWdyYWluczsKK+WPjemdqeWRvSA8IGNvdW50ZXJcLXJldm9sdXRpb25hcnk7Civkga0gPCB0b1wtZ2l2ZVwtYW5cLWFuZ3J5XC1sb29rOwor5IGaIDwgYVwta2luZFwtb2ZcLWV5ZVwtZGlzZWFzZTsKK+SAvSA8IHRvXC1sb29rXC1hdFwtZWFjaFwtb3RoZXI7CivkgKAgPCBhXC1jaGluZXNlXC1mYW1pbHlcLW5hbWU7CivkgJMgPCB0b1wtdHVyblwtb25lJydzXC1leWVzXC10bzsKK+O/tCA8IHdpZGVcLXBpZWNlXC1vZlwtbGVhdGhlcjsKK+O/qyA8IHRvXC1zcGxpdFwtdGFuZ2xlZFwtaGVtcDsKK+O/jyA8IHBhcmFseXNpc1wtb2ZcLXRoZVwtYm9keTsKK+O+viA8IGRpc2Vhc2VcLW9mXC10aGVcLXRocm9hdDsKK+O8siA8IHNvdW5kXC1vZlwtYnJva2VuXC10aWxlczsKK+aIgOaEmyA8IHRvXC1oYXZlXC1hXC1sb3ZlXC1hZmZhaXI7CivjvJAgPCBhXC1raW5kXC1vZlwtd2hpdGVcLW1lbG9uOwor47m2IDwgYVwta2luZFwtb2ZcLXdpbGRcLWFuaW1hbDsKK+O5piA8IGRvZ1wtd2l0aFwtYVwtc2hvcnRcLXRhaWw7CivjuZQgPCBjYXR0bGVcLXdpdGhcLWxvbmdcLWJhY2s7CivmmrTot4wgPCBzdGVlcFwtZmFsbFwtXChpblwtcHJpY2VcKTsKK+O1qCA8IGFcLWRyeVwtbGFuZFwtaW5cLWFcLXJpdmVyOwor47OIIDwgYVwtZ3JlYXRcLWZsb3dcLW9mXC13YXRlcjsKK+iuk+mWiyA8IHRvXC1nZXRcLW91dFwtb2ZcLXRoZVwtd2F5Owor47GfIDwgdG9cLXJpcFwtb3BlblwtdGhlXC1mbGVzaDsKK+OwhCA8IGFcLXNtYWxsXC1jaGVzdG51dFwtdHJlZTsKK+OulyA8IHRoZVwtaGFuZGxlXC1vZlwtYVwtc3BlYXI7CivjrY0gPCBjYXBpdGFsXC1mb3JtXC1vZlwtc2V2ZW47CivjrKAgPCB0b1wtZXhwb3NlXC10b1wtc3VubGlnaHQ7CivmqpTmoYjliIbphY3ljYAgPCBmaWxlXC1hbGxvY2F0aW9uXC10YWJsZTsKK+OpnyA8IHRvXC1zZXdcLXNvbWVcLW9ybmFtZW50czsKK+OojCA8IHRvXC1taWxrXC1hXC1jb3dcLW9yXC1nb2F0Owor5bCx5L6/IDwgYXRcLVwoeW91clwpXC1jb252ZW5pZW5jZTsKK+WPr+i6qyA8IHRvXC1maXRcLXdlbGxcLVwoY2xvdGhlc1wpOwor56eR56CUIDwgXChzY2llbnRpZmljXClcLXJlc2VhcmNoOwor46CLIDwgYVwtbG9mdHlcLW1vdW50YWluXC1wZWFrOwor45+eIDwgcHJlY2lwaXRvdXNcLWFuZFwtbG9mdHk7Civjn50gPCB0b1wtYmFua1wtdXBcLXdpdGhcLWVhcnRoOwor45+cIDwgc2hhcGVcLW9mXC10aGVcLW1vdW50YWluOwor45+WIDwgYVwtZGlhbGVjdFwtb2ZcLW1pbm9yaXR5Owor45+OIDwgYVwtbG9uZ1wtbW91bnRhaW5cLXJpZGdlOwor456BIDwgY2FuXC1ub3RcLXdhbGtcLW5vcm1hbGx5Owor45iwIDwgbmFtZVwtb2ZcLWFcLW9sZFwtY291bnRyeTsKK+OYoSA8IGFcLXBlblwtZm9yXC13aWxkXC1iZWFzdHM7CivjmJYgPCB0b1wtbWFrZVwtYVwtZGlzdHVyYmFuY2U7CivogIHlhanlj6MgPCBhblwtb2xkXC1tYXJyaWVkXC1jb3VwbGU7Civjl4EgPCB0aGVcLXJvb2ZcLW9mXC10aGVcLW1vdXRoOwor45aXIDwgaGlnaFwtcmlkZ2VzXC1vZlwtY2xpZmZzOwor5Zyw5bCN56m65bCO5b2IIDwgZ3JvdW5kXC10b1wtYWlyXC1taXNzaWxlOwor45WiIDwgcHJvZm91bmRcLXNpZ25pZmljYW5jZTsKK+WPr+isgiA8IGl0XC1jb3VsZFwtZXZlblwtYmVcLXNhaWQ7CivorpPot68gPCB0b1wtbWFrZVwtd2F5XC1cKGZvclwtc3RoXCk7CivjkoYgPCB0b1wtZ2F0aGVyXC10aGVcLWhhcnZlc3Q7CivmiLbkuLsgPCBoZWFkXC1vZlwtdGhlXC1ob3VzZWhvbGQ7CivpoJLooYwgPCBpc3N1ZVwtZm9yXC1lbmZvcmNlbWVudDsKK+Wci+eHn+S8gealrSA8IG5hdGlvbmFsaXplZFwtaW5kdXN0cnk7CivkuozljYHlhavomZ8gPCAyOHRoXC1kYXlcLW9mXC10aGVcLW1vbnRoOwor5rmW5Y2XIDwgaHVuYW5cLXByb3ZpbmNlXCxcLWNoaW5hOwor5pys5Zu65p6d5qauIDwgd2hlblwtdGhlXC1yb290XC1pc1wtZmlybTsKK+WCs+i8uOioreWCmSA8IHRyYW5zbWlzc2lvblwtZmFjaWxpdHk7CivppJjmlbggPCBcKG51bWVyaWNhbFwpXC1yZW1haW5kZXI7CivkuI3nrqEgPCBub1wtbWF0dGVyXC1cKHdoYXRcLFwtaG93XCk7CivniYjpnaIgPCBzcGFjZVwtb2ZcLWFcLXdob2xlXC1wYWdlOwor5LiN5piv5ZGz5YWSIDwgbm90XC10aGVcLXJpZ2h0XC1mbGF2b3VyOwor5LiN56aBIDwgY2FuJyd0XC1oZWxwXC1cKGRvaW5nXC1zdGg7CivpmqjmqZ/mmYLplpMgPCByYW5kb21cLXBlcmlvZFwtb2ZcLXRpbWU7CivmmI/ov7cgPCB0b1wtbG9zZVwtY29uc2Npb3VzbmVzczsKK+WQkOe1riA8IHRoZVwtb3BlbmluZ1wtb2ZcLWFcLWJvbGw7Civpi6rlubMgPCBzcHJlYWRcLW91dFwtXChtYXRlcmlhbFwpOwor5YKz6Ly46Led6ZuiIDwgdHJhbnNtaXNzaW9uXC1kaXN0YW5jZTsKK+aLnOaKiuWtkCA8IGJlY29tZVwtc3dvcm5cLWJyb3RoZXJzOwor5YyX5a+S5bi2IDwgdGhlXC1ub3J0aFwtZnJpZ2lkXC16b25lOwor5LiN55CGIDwgcmVmdXNlXC10b1wtYWNrbm93bGVkZ2U7Civororoh4kgPCBzdWRkZW5seVwtdHVyblwtaG9zdGlsZTsKK+WNsOW6puWwvOilv+S6nuiqniA8IGluZG9uZXNpYW5cLVwobGFuZ3VhZ2VcKTsKK+a1t+aWryA8IGhheWVzXC1cKG1pY3JvY29tcHV0ZXJcKTsKK+adseW+tyA8IFwoZm9ybWVyXClcLWVhc3RcLWdlcm1hbnk7CivmmpfnpIEgPCBzdWJtZXJnZWRcLXJlZWZcLVwocm9ja1wpOwor6LK35aW9IDwgdG9cLWluZ3JhdGlhdGVcLW9uZXNlbGY7Civlhavot6/ou40gPCB0aGVcLWVpZ2h0aFwtcm91dGVcLWFybXk7Civmmpfnlr4gPCB1bm1lbnRpb25hYmxlXC1kaXNlYXNlOwor6IGz5YuVIDwgdG9cLWNyZWF0ZVwtYVwtc2Vuc2F0aW9uOwor5Y+m6LW354iQ54G2IDwgdG9cLXN0YXJ0XC1mcm9tXC1zY3JhdGNoOwor6aaW6IWm5pyD6K2wIDwgbGVhZGVyc2hpcFwtY29uZmVyZW5jZTsKK+adv+WHsyA8IHdvb2RlblwtYmVuY2hcLW9yXC1zdG9vbDsKK+S4jeaahyA8IGhhdmVcLW5vXC10aW1lXC1cKGZvclwtc3RoOwor5oKy5oakIDwgZ3JpZWZcLWFuZFwtaW5kaWduYXRpb247CivkuI3kv6Hku7vmipXnpaggPCB2b3RlXC1vZlwtbm9cLWNvbmZpZGVuY2U7CivljZfljJfmpbUgPCBzb3V0aFwtYW5kXC1ub3J0aFwtcG9sZXM7CivlpoLlh7rkuIDovY0gPCBiZVwtcHJlY2lzZWx5XC10aGVcLXNhbWU7CivokaPkuovplbcgPCBjaGFpcm1hblwtb2ZcLXRoZVwtYm9hcmQ7CivmnKzkurrnmoTop4Dpu54gPCBcKG9uZScnc1wpXC1wZXJzb25hbFwtdmlldzsKK+eJueeUoiA8IHNwZWNpYWxcLWxvY2FsXC1wcm9kdWN0Owor6JWt5qKdIDwgXChlY29ub21pY1wpXC1kZXByZXNzaW9uOwor5LiN6KGM5LqGIDwgb25cLXRoZVwtcG9pbnRcLW9mXC1kZWF0aDsKK+efruadhuWTgeeoriA8IHNob3J0XC1zdGFsa2VkXC12YXJpZXR5Owor5q6v6JGsIDwgZnVuZXJhbFwtYW5kXC1pbnRlcm1lbnQ7Civlkb3ku6QgPCBcKGFuXClcLW9yZGVyXC1vclwtY29tbWFuZDsKK+a1geS6oSA8IHRvXC1cKGZvcmNlXC1pbnRvXClcLWV4aWxlOwor57We55uh6IWm5rGBIDwgdG9cLXdyYWNrXC1vbmUnJ3NcLWJyYWluczsKK+WFieejgeein+apnyA8IG1hZ25ldG9cLW9wdGljYWxcLWRyaXZlOwor5Y2h6KW/5bC8IDwgY2Fzc2luaVwtXChwcm9wZXJcLW5hbWVcKTsKK+WNkeaxoSA8IGRlc3BpY2FibGVcLWFuZFwtZmlsdGh5Owor5ZyL5pyJ5LyB5qWtIDwgbmF0aW9uYWxpemVkXC1idXNpbmVzczsKK+aatOWNkiA8IGRpZVwtb2ZcLXN1ZGRlblwtaWxsbmVzczsKK+mAvOimliA8IGxvb2tcLWF0XC1mcm9tXC1jbG9zZVwtdXA7Civml7rmnIggPCBidXN5XC1cKGJ1c2luZXNzXClcLW1vbnRoOwor5LuAIDwgZmlsZVwtb2ZcLXRlblwtc29sZGllcnM7CivosqwgPCBvbmUnJ3NcLXJlc3BvbnNpYmlsaXR5Owor54i1IDwgZmV1ZGFsXC10aXRsZVwtb3JcLXJhbms7CivllYogPCBleGNsYW1hdG9yeVwtcGFydGljbGU7CivmpZogPCBuYW1lXC1vZlwtZmV1ZGFsXC1zdGF0ZTsKK+aJmCA8IHRvXC1ob2xkXC11cFwtd2l0aFwtcGFsbTsKK+axsiA8IGRyYXdcLXdhdGVyXC1mcm9tXC13ZWxsOwor6a2FIDwga2luZFwtb2ZcLWZvcmVzdFwtZGVtb247CivkvIogPCB0aGlyZFwtcGVyc29uXC1wcm9ub3VuOwor6bi/IDwgc3BlY2llc1wtb2ZcLXdpbGRcLXN3YW47Civlp6UgPCBtYXRlcm5hbFwtZ3JhbmRtb3RoZXI7CivmjacgPCBob2xkXC11cFwtaW5cLXR3b1wtaGFuZHM7CivkuZkgPCBzZWNvbmRcLWhlYXZlbicnc1wtc3RlbTsKK+WQgSA8IGludGVyamVjdGlvblwtJydhbGFzXCEnJzsKK+WnqCA8IG1vdGhlclwvd2lmZScnc1wtc2lzdGVyOwor5LqpIDwgY2hpbmVzZVwtbGFuZFwtbWVhc3VyZTsKK+WDtSA8IHN0aWZmXC1hbmRcLW1vdGlvbmxlc3M7Civmi7EgPCBmb2xkXC1oYW5kc1wtb25cLWJyZWFzdDsKK+emviA8IGdyYWluXC1zdGlsbFwtb25cLXN0YWxrOwor5ZehIDwgc291bmRcLW9mXC1mbHlpbmdcLWJlZXM7CivnjKkgPCBzcGVjaWVzXC1vZlwtb3Jhbmd1dGFuOwor54ueIDwgZmVyb2Npb3VzXC1hcHBlYXJhbmNlOwor5ouIIDwgcGlja1wtdXBcLXdpdGhcLWZpbmdlcnM7CivpmZsgPCBzdGVwc1wtbGVhZGluZ1wtdGhyb25lOwor6bivIDwgZmVtYWxlXC1tYW5kYXJpblwtZHVjazsKK+WNryA8IHRoXC1vZlwtZWFydGhcLWJyYW5jaGVzOwor54agIDwgYnJpZ2h0XC1hbmRcLXNwYXJrbGluZzsKK+mYgiA8IGJsb2NrZWRcLW9yXC1zZXBhcmF0ZWQ7Civmt4UgPCB3YXRlclwtdXNlZFwtd2FzaFwtcmljZTsKK+S9miA8IGluZHVsZ2VcLWluXC1wbGVhc3VyZXM7CivovpogPCBydW1ibGluZ1wtb2ZcLXZlaGljbGVzOwor5be9IDwgdGhcLW9mXC10aGVcLThcLXRyaWdyYW1zOwor6KiHIDwgdGhlXC1zb3VuZFwtb2ZcLWFcLWNyYXNoOwor54u6IDwgdGhlXC1zbmFybGluZ1wtb2ZcLWRvZ3M7CivmtZQgPCBzdGVlcFwtYmFua1wtYnlcLXN0cmVhbTsKK+iTiiA8IGx1eHVyaWFudFwtdmVnZXRhdGlvbjsKK+iToCA8IGdyYWNpbGFyaWFcLXZlcnJ1Y29zYTsKK+iPgCA8IGx1eHVyaWFuY2VcLW9mXC1ncm93dGg7Civog5cgPCBwdXN0dWxlc1wtb2ZcLWFueVwta2luZDsKK+migyA8IGZseVwtZG93blwtb3JcLWRvd253YXJkOwor5Z6GIDwgYmxhY2tcLWNsb2RzXC1vZlwtZWFydGg7CivmqJcgPCBhaWxhbnRodXNcLWdsYW5kdWxvc2E7CivomqcgPCBhXC1yZWRcLXNwb3R0ZWRcLWxpemFyZDsKK+e8tiA8IGVhcnRoZW5cLWNyb2NrXC1vclwtamFyOwor6LGzIDwgYVwtemhvdVwtZHluYXN0eVwtc3RhdGU7CivovbogPCBzbWFsbFwtbGlnaHRcLWNhcnJpYWdlOwor6YCvIDwgbGVhdmVcLXdpdGhvdXRcLXJlYXNvbjsKK+WIl+i7iiA8IHRyYWluXC1cKHJhaWx3YXlcLXRlcm1cKTsKK+WPi+WlvSA8IGZyaWVuZGx5XC1cKHJlbGF0aW9uc1wpOwor5quD6YKKIDwgdG9cLWxpZVwtb25cLW9uZScnc1wtc2lkZTsKK+WItuijgSA8IFwoZWNvbm9taWNcKVwtc2FuY3Rpb25zOwor56S+5LqkIDwgXChzb2NpYWxcKVwtaW50ZXJhY3Rpb247Civmk43ooYwgPCBcKHN0dWRlbnQnJ3NcKVwtYmVoYXZpb3I7CivlhYnno4Hnop8gPCBtYWduZXRvXC1vcHRpY2FsXC1kaXNrOwor57eo57WEIDwgb3JnYW5pemVcLWludG9cLWdyb3VwczsKK+imqui/kSA8IGdldFwtY2xvc2VcLXRvXC1zb21lb25lOwor5Y2a6Ka95pyDIDwgXChpbnRlcm5hdGlvbmFsXClcLWZhaXI7CivlpJrnqK7oqp7oqIDmlK/mjIEgPCBtdWx0aWxpbmd1YWxcLXN1cHBvcnQ7CivntZDoq5YgPCBcKHJlYWNoXC1hXClcLWNvbmNsdXNpb247Civpl6Hov7AgPCBleHBvdW5kXC1cKGFcLXBvc2l0aW9uXCk7Civntq3lkL7niL7kurogPCB1aWdodXJcLXBlcnNvblx8cGVvcGxlOwor6ZaL6Zmk5a2457GNIDwgdG9cLWV4cGVsXC1mcm9tXC1zY2hvb2w7Civlv4Plr5IgPCBiZVwtdmVyeVwtZGlzYXBwb2ludGVkOwor57WE6KOdIDwgYXNzZW1ibGVcLWFuZFwtaW5zdGFsbDsKK+iqk+atuyA8IHRvXC1wbGVkZ2VcLW9uZScnc1wtbGlmZTsKK+S4gOiIrOaApyA8IFwoaW5cKVwtZ2VuZXJhbFwtXCh0ZXJtc1wpOwor5Z+O6YSJIDwgY2l0eVwtYW5kXC1jb3VudHJ5c2lkZTsKK+WNlOWumiA8IFwocmVhY2hcLWFuXClcLWFncmVlbWVudDsKK+mAi+mAg+iXqiA8IHJlZnVnZVwtZm9yXC1mdWdpdGl2ZXM7CivpppbluK3ku6PooaggPCBjaGllZlwtcmVwcmVzZW50YXRpdmU7CivmsLTln58gPCBcKHRlcnJpdG9yaWFsXClcLXdhdGVyczsKK+WLu+aVtCA8IG5lYXRcLWFuZFwtd2VsbFwtc3BhY2VkOwor55m955y854+gIDwgdGhlXC13aGl0ZVwtb2ZcLXRoZVwtZXllOwor54mp55CG57WQ5qeLIDwgcGh5c2ljYWxcLWNvbXBvc2l0aW9uOwor5YWn6ZajIDwgXChnb3Zlcm5tZW50XClcLWNhYmluZXQ7Civlu6DniYwgPCBicmFuZFwtXChvZlwtYVwtcHJvZHVjdFwpOwor5aW25aW2IDwgcGF0ZXJuYWxcLWdyYW5kbW90aGVyOwor57eo5qyhIDwgb3JkZXJcLW9mXC1hcnJhbmdlbWVudDsKK+Wci+acg+itsOmVtyA8IHNwZWFrZXJcLW9mXC10aGVcLWhvdXNlOwor5oeJ55So5bmz5Y+wIDwgYXBwbGljYXRpb25cLXBsYXRmb3JtOwor5pWZ5o6IIDwgdW5pdmVyc2l0eVwtcHJvZmVzc29yOwor5Yui5b+FIDwgaXNcLWJvdW5kXC10b1wtXChoYXBwZW5cKTsKK+WiqOaxgSA8IHByZXBhcmVkXC1jaGluZXNlXC1pbms7CivlpKflsIcgPCBhXC1nZW5lcmFsXC1vclwtYWRtaXJhbDsKK+awo+S6uiA8IHRvXC1nZXRcLXNvbWVvbmVcLWFuZ3J5Owor5YyF5aC0IDwgYm9va1wtYVwtd2hvbGVcLXRoZWF0cmU7Civlha3omZ8gPCA2dGhcLWRheVwtb2ZcLXRoZVwtbW9udGg7CivljIjniZnliKnoqp4gPCBodW5nYXJpYW5cLVwobGFuZ3VhZ2VcKTsKK+ipnuW9mSA8IFwobGlzdFwtb2ZcKVwtdm9jYWJ1bGFyeTsKK+i7n+mrlOmFjemAgeiAhSA8IHNvZnR3YXJlXC1kaXN0cmlidXRvcjsKK+S4jeS/oeS7u+ahiCA8IG5vXC1jb25maWRlbmNlXC1tb3Rpb247CivpvZ4gPCB0b1wtZGlzcGxheVwtdGhlXC10ZWV0aDsKK+m8iCA8IGFcLWZyZXNoXC13YXRlclwtdHVydGxlOwor6byCIDwgYVwta2luZFwtb2ZcLXNlYVwtdHVydGxlOwor5o2V6J+y6JGJIDwgaW5zZWN0XC1jYXRjaGluZ1wtbGVhZjsKK+m4hyA8IGtpbmRcLW9mXC1iaXJkXC1vZlwtcHJleTsKK+aUneW9sSA8IHRvXC10YWtlXC1hXC1waG90b2dyYXBoOwor6biCIDwgYVwta2luZFwtb2ZcLXdhdGVyXC1iaXJkOwor6berIDwgdHVycXVvaXNlXC1raW5nZmlzaGVyOwor6beBIDwgZmlzaGhhd2tcLWJvd1wtb3JcLXByb3c7CivmlLnlloTpl5zkv4IgPCB0b1wtaW1wcm92ZVwtcmVsYXRpb25zOwor6L6v55m9IDwgb2ZmZXJcLWFuXC1leHBsYW5hdGlvbjsKK+mwnCA8IGJpZ1wtbW91dGhlZFwtZmxvdW5kZXI7Civpq7ogPCB0aGVcLWhhaXJcLWRpc2hldmVsbGVkOwor5o6h6KiqIDwgY292ZXJcLVwoYVwtbmV3c1wtc3RvcnlcKTsKK+mqoyA8IGhvcnNlXC13aXRob3V0XC1zYWRkbGU7CivlgZzngavljZTorbAgPCBjZWFzZVwtZmlyZVwtYWdyZWVtZW50Owor6aS9IDwgbWFrZVwtcHJlc2VudFwtb2ZcLWZvb2Q7CivlhbXnq5kgPCBhcm15XC1zZXJ2aWNlXC1zdGF0aW9uOwor6Z+xIDwgd2lsZFwtb25pb25zXC1vclwtbGVla3M7Civou43osrsgPCBtaWxpdGFyeVwtZXhwZW5kaXR1cmU7CivkuozljYHkuozomZ8gPCAyMlwtbmRcLWRheVwtb2ZcLWFcLW1vbnRoOwor6ZyDIDwgbG9uZ1wtY29udGludWVkXC1yYWluczsKK+aTmuaCiSA8IGFjY29yZGluZ1wtdG9cLXJlcG9ydHM7CivliY3lubQgPCB0aGVcLXllYXJcLWJlZm9yZVwtbGFzdDsKK+mXjSA8IHRvd2VyXC1vdmVyXC1jaXR5XC1nYXRlOwor6KOc6ImyIDwgY29tcGxlbWVudGFyeVwtY29sb3VyOwor5pS75YuiIDwgXChtaWxpdGFyeVwpXC1vZmZlbnNpdmU7CivnorrmnInlhbbkuosgPCBcKGNvbmZpcm1cLXRvXC1iZVwpXC10cnVlOwor5aSn5Z6L5LyB5qWtIDwgbGFyZ2VcLXNjYWxlXC1pbmR1c3RyeTsKK+WIhuaTlCA8IHNoYXJlXC1yZXNwb25zaWJpbGl0eTsKK+mNsSA8IHRoaW5cLXBsYXRlc1wtb2ZcLW1ldGFsOwor5L2/5b6S6KGM5YKzIDwgYWN0c1wtb2ZcLXRoZVwtYXBvc3RsZXM7CivpibYgPCBzYWNyaWZpY2lhbFwtY2F1bGRyb247CivplovnmbwgPCBleHBsb2l0XC1cKGFcLXJlc291cmNlXCk7Civmrbfku6MgPCBzdWNjZXNzaXZlXC1keW5hc3RpZXM7CivphrAgPCBiaXR0ZXJcLXRhc3RlXC1pblwtd2luZTsKK+i/keaXpSA8IGluXC10aGVcLXBhc3RcLWZld1wtZGF5czsKK+WbnuioqiA8IFwocGF5XC1hXClcLXJldHVyblwtdmlzaXQ7Civlv4XkuI3lj6/lsJEgPCBhYnNvbHV0ZWx5XC1uZWNlc3Nhcnk7Civnl4XoroogPCBwYXRob2xvZ2ljYWxcLWNoYW5nZXM7Civlh4zmmaggPCBlYXJseVwtaW5cLXRoZVwtbW9ybmluZzsKK+i2giA8IHRvXC10YWtlXC1hZHZhbnRhZ2VcLW9mOwor5LiN6ZuF6KeAIDwgb2ZmZW5zaXZlXC10b1wtdGhlXC1leWU7CivmjqXmlLblmajpnYjmlY/luqYgPCByZWNlaXZlclwtc2Vuc2l0aXZpdHk7CivkuI3lnKjoqbHkuIsgPCBiZVwtbm90aGluZ1wtZGlmZmljdWx0Owor6Zmz6L+w5Y+lIDwgZGVjbGFyYXRpdmVcLXNlbnRlbmNlOwor6KWsIDwgbG93ZXJcLXBhcnRcLW9mXC1hXC1yb2JlOwor6YCZ5YCL5pyIIDwgdGhpc1wtXChjdXJyZW50XClcLW1vbnRoOwor6KKzIDwgc3ByZWFkXC1vbmUnJ3NcLWNsb3RoZXM7CivmrbfkvobmnIDkvY7pu54gPCBhbGxcLXRpbWVcLWxvd1wtXChwb2ludFwpOwor5YCN6aC75ZmoIDwgZnJlcXVlbmN5XC1tdWx0aXBsaWVyOwor5qez54uAIDwgY2VydGlmaWNhdGVcLW9mXC1tZXJpdDsKK+icmyA8IGh5ZHJvcGhpbHVzXC1jb2duYXR1czsKK+ibmiA8IGN5cnRveGlwaHVzXC1yaXRzZW1hZTsKK+awkeaXj+S4u+e+qeaDhee3kiA8IG5hdGlvbmFsaXN0XC1mZWVsaW5nczsKK+mgmOWwjuasiiA8IGxlYWRlcnNoaXBcLWF1dGhvcml0eTsKK+iWoiA8IHdvb2R5XC1jbGltYmluZ1wtcGxhbnQ7CivlgJrph40gPCB0b1wtcmVseVwtaGVhdmlseVwtdXBvbjsKK+e0gOW/teaXpSA8IGRheVwtb2ZcLWNvbW1lbW9yYXRpb247CivojIAgPCBvdmVyZ3Jvd25cLXdpdGhcLWdyYXNzOwor6IqEIDwgbWV0YXBsZXhpc1wtc3RhdW50b25pOwor5oeJ55So6Luf5Lu2IDwgYXBwbGljYXRpb25cLXNvZnR3YXJlOwor6Ii6IDwgcGxhY2VcLW5hbWVcLWluXC10YWl3YW47CivohKEgPCBzdHJpcHNcLW9mXC1kcmllZFwtbWVhdDsKK+aKiumFkiA8IHJhaXNlXC1vbmUnJ3NcLXdpbmVcLWN1cDsKK+i7jeeUqCA8IFwoZm9yXClcLW1pbGl0YXJ5XC1cKHVzZVwpOwor5Lqk5o+b5oqA6KGTIDwgc3dpdGNoaW5nXC10ZWNobm9sb2d5Owor57Gz5b6354i+5Lyv6KOhIDwgbWlkZGxlYnVyeVwtXChjb2xsZWdlXCk7Civkv53ph40gPCB0YWtlXC1jYXJlXC1vZlwtb25lc2VsZjsKK+WgseS7hyA8IHRvXC1yZXZlbmdlXC1cKG9uZXNlbGZcKTsKK+aKhOi6qyA8IHRvXC1zZWFyY2hcLVwoYVwtcGVyc29uXCk7CivnsoMgPCBlbXB0eVwtaHVza3NcLW9mXC1ncmFpbjsKK+eoi+W8j+iqnuiogCA8IHByb2dyYW1taW5nXC1sYW5ndWFnZTsKK+eZveajiee0mSA8IHN0ZW5jaWxcLXRpc3N1ZVwtcGFwZXI7CivnqqMgPCB0b1wtcnVzaFwtb3V0XC1vZlwtYVwtZGVuOwor56mHIDwgcGFuaWN1bVwtZnJ1bWVudGFjZXVtOwor5qOJ6KWWIDwgY290dG9uXC1wYWRkZWRcLWphY2tldDsKK+ejkiA8IHRvXC1mYWxsXC1mcm9tXC1vclwtaW50bzsKK+WEmOaXqSA8IGFzXC1lYXJseVwtYXNcLXBvc3NpYmxlOwor55+RIDwgdGhlXC1wdXBpbFwtb2ZcLXRoZVwtZXllOwor552NIDwgdG9cLWxvb2tcLWF0XC1mZWFyZnVsbHk7Civln7nkv64gPCB0b1wtcmVwYWlyXC1lYXJ0aHdvcmtzOwor5bCK6YeNIDwgdG9cLXZhbHVlXC1cKHNvbWV0aGluZ1wpOwor55S9IDwgZHJhaW5cLWJldHdlZW5cLWZpZWxkczsKK+eUgyA8IGJyaWNrXC13YWxsXC1vZlwtYVwtd2VsbDsKK+eZvOihqOiBsuaYjiA8IHRvXC1pc3N1ZVwtYVwtc3RhdGVtZW50Owor55CWIDwgY2FydmVkXC1qYWRlXC13aW5lXC1jdXA7CivnjqYgPCBicm9rZW5cLXBpZWNlXC1vZlwtamFkZTsKK+eXheeBtiA8IGZvY3VzXC1cKG9mXC1pbmZlY3Rpb25cKTsKK+WFqem7nuWNgeS5neWIhiA8IDJcLVw6MVwtOVwtXCh0aW1lXC1vZlwtZGF5XCk7CivkvrXopbIgPCB0b1wtaW52YWRlXC1hbmRcLWF0dGFjazsKK+eAsyA8IHRvXC1hcnJpdmVcLVwob2ZcLXdhdGVyXCk7Civpm7vlrZDlt6Xmpa0gPCBlbGVjdHJvbmljc1wtaW5kdXN0cnk7CivmvqwgPCB0b1wtcmFpblwtY29udGludW91c2x5Owor57Ch5py0IDwgc2ltcGxlXC1hbmRcLXVuYWRvcm5lZDsKK+mngemBiyA8IHRyYW5zcG9ydFwtYnlcLWxpZ2h0ZXI7CivmjKrnqqnlhZIgPCB0b1wtbW92ZVwtXCh0b1wtYVwtaG91c2VcKTsKK+WPrOmWi+acg+itsCA8IHRvXC1jYWxsXC1hXC1jb25mZXJlbmNlOwor5rSkIDwgYVwtZm91bnRhaW5cLW9yXC1zcHJpbmc7CivkvovoqIAgPCBpbnRyb2R1Y3RvcnlcLXJlbWFya3M7Civlgpnmn6UgPCBmb3JcLWZ1dHVyZVwtcmVmZXJlbmNlOwor5qe+IDwgcGFzdGVcLXdhbGxcLXdpdGhcLWRpcnQ7CivlvrflnIvkurogPCBnZXJtYW5cLXBlcnNvblx8cGVvcGxlOwor5qOoIDwgdGFsbHlcLW9yXC13b29kZW5cLXBhc3M7CivmoawgPCBwZWFyXC1hbmRcLW90aGVyXC10cmVlczsKK+WuiemAuCA8IGVhc3lcLWFuZFwtY29tZm9ydGFibGU7CivmlbMgPCB0b1wtZ292ZXJuXC1mb3JjZWZ1bGx5Owor5pWBIDwgdG9cLXdlaWdoXC1pblwtdGhlXC1oYW5kOwor55eF5oi/IDwgd2FyZFwtXChvZlwtYVwtaG9zcGl0YWxcKTsKK+eZvuS6i+mAmiA8IGtub3dsZWRnZWFibGVcLXBlcnNvbjsKK+ihqOW9sCA8IGNpdGVcLVwoaW5cLWRpc3BhdGNoZXNcKTsKK+aQjiA8IHRvXC1ydWJcLXdpdGhcLXRoZVwtaGFuZDsKK+S4jeatu+W/gyA8IHVud2lsbGluZ1wtdG9cLWdpdmVcLXVwOwor56Sm5rOJ5rC0IDwgbWluZXJhbFwtc3ByaW5nXC13YXRlcjsKK+WQg+S4jeS4iyA8IG5vdFwtZmVlbFwtbGlrZVwtZWF0aW5nOwor5bmA5qqi6amX5bqP5YiXIDwgZnJhbWVcLWNoZWNrXC1zZXF1ZW5jZTsKK+iQrOe2ree2siA8IHdvcmxkXC13aWRlXC13ZWJcLVwod3d3XCk7CivllYbmpa3mh4nnlKggPCBidXNpbmVzc1wtYXBwbGljYXRpb247Civmr4/ms4HmhIjkuIsgPCBzdGVhZGlseVwtZGV0ZXJpb3JhdGU7Civmi5zmnIMgPCBwYXlcLWFuXC1vZmZpY2lhbFwtY2FsbDsKK+WwiOeoiyA8IHNwZWNpYWxcLXB1cnBvc2VcLXRyaXA7CivlqpLpq5ToqKrllY/mjqfliLYgPCBtZWRpYVwtYWNjZXNzXC1jb250cm9sOwor5YG95bmjIDwgY291bnRlcmZlaXRcLWN1cnJlbmN5Owor6LuN5LqL5qmf5qeLIDwgbWlsaXRhcnlcLWluc3RpdHV0aW9uOwor5bWPIDwgYVwtbW91bnRhaW5cLWluXC1zaGVueGk7CivmiY3nlaUgPCBhYmlsaXR5XC1hbmRcLXNhZ2FjaXR5Owor5a2tIDwgdG9cLWNhcnJ5XC1vblwtdGhlXC1iYWNrOwor5Zub5bm05Yi255qE5aSn5a24IDwgZm91clwteWVhclwtdW5pdmVyc2l0eTsKK+WxpOasoSA8IGFycmFuZ2VtZW50XC1vZlwtaWRlYXM7CivliKTomZXmrbvliJEgPCB0b1wtc2VudGFuY2VcLXRvXC1kZWF0aDsKK+WriyA8IHNsZW5kZXJcLWFuZFwtZGVsaWNhdGU7CivlqaMgPCBtYXJyaWFnZVwtY29ubmVjdGlvbnM7CivnrYbms5UgPCB0ZWNobmlxdWVcLW9mXC13cml0aW5nOwor5a+m6auU5bGkIDwgcGh5c2ljYWxcLWxheWVyXC1cKG9zaVwpOwor5ZusIDwgdG9cLXJldHVyblwtdG9cLW9yXC1mcm9tOwor5Lqk6YCaIDwgXChhdXRvbW9iaWxlXClcLXRyYWZmaWM7Civnj77pmo7mrrUgPCBhdFwtdGhlXC1wcmVzZW50XC1zdGFnZTsKK+iyqOW5o+iytuWAvCA8IGN1cnJlbmN5XC1kZXZhbHVhdGlvbjsKK+WPm+Wci+e9qiA8IHRoZVwtY3JpbWVcLW9mXC10cmVhc29uOwor5oyJ54Wn5rOV5b6LIDwgYWNjb3JkaW5nXC10b1wtdGhlXC1sYXc7CivlioIgPCBjaGlzZWxcLWZvclwtZW5ncmF2aW5nOwor5ZWf56iLIDwgc2V0XC1vdXRcLW9uXC1hXC1qb3VybmV5Owor5LiN5a6M5YWo5Lit56uLIDwgaW1wZXJmZWN0XC1uZXV0cmFsaXR5Owor55Wr5aCxIDwgcGljdG9yaWFsXC1cKG1hZ2F6aW5lXCk7CivljJflm57mrbjnt5ogPCB0aGVcLXRyb3BpY1wtb2ZcLWNhbmNlcjsKK+WFi+mHjOaWr+aJmOW8lyA8IFwod2FycmVuXClcLWNocmlzdG9waGVyOwor6Zu75a2Q5YWD5Lu2IDwgZWxlY3Ryb25pY1wtY29tcG9uZW50Owor57aT5r+f6KGw6YCAIDwgXChlY29ub21pY1wpXC1yZWNlc3Npb247CivktpkgPCBzd2VsbGluZ1wtb2ZcLXRoZVwtZ3VtczsKK+S2iiA8IHRvXC1ibGVlZFwtYXRcLXRoZVwtbm9zZTsKK+WFieS6jOalteeuoSA8IGxpZ2h0XC1lbWl0dGluZ1wtZGlvZGU7CivktJ8gPCBhblwtb25lXC15ZWFyXC1vbGRcLWRlZXI7Civks7MgPCBhXC1raW5kXC1vZlwtc21hbGxcLWJpcmQ7Civks5EgPCBhXC1waGVhc2FudFwtbGlrZVwtYmlyZDsKK+SysSA8IGFcLWtpbmRcLW9mXC1ibGFja1wtYmlyZDsKK+SylSA8IHRoZVwteWFuZ3R6ZVwtcG9ycG9pc2U7CivksZAgPCBhXC1raW5kXC1vZlwtYmxhY2tcLWZpc2g7CivksYAgPCBhXC1raW5kXC1vZlwtc21hbGxcLWZpc2g7CivkvrXmk74gPCB0b1wtaW52YWRlXC1hbmRcLWhhcmFzczsKK+Wxj+W5lSA8IFwodHZcLW9yXC1tb3ZpZVwpXC1zY3JlZW47CivkrqEgPCBhXC1zdXBlcm5hdHVyYWxcLWhvcnNlOwor5K6CIDwgaG9yc2VcLXdpdGhcLWxvbmdcLWhhaXI7CivkrbcgPCBob3JzZVwtd2l0aFwtbG9uZ1wtbWFuZTsKK+SsqSA8IHRvXC1hYnN0YWluXC1mcm9tXC1tZWF0Owor5KyjIDwgYVwtc2FjcmlmaWNpYWxcLXZpY3RpbTsKK+SroCA8IHNob3J0XC1oYWlyXC1hbmRcLWJlYXJkOwor6Yym5qiZ6LO9IDwgY2hhbXBpb25zaGlwXC1jb250ZXN0Owor5Km9IDwgYVwtcXVpdmVyXC1vbmVcLWFcLWhvcnNlOwor5KmCIDwgdG9cLWNvbWVcLXRvXC10aGVcLWZyb250Owor55CD57ayIDwgbmV0XC1cKGZvclwtYmFsbFwtZ2FtZXNcKTsKK+SnlyA8IG1vdW50YWluc1wtY29sbGFwc2luZzsKK+SmpiA8IGFcLW11c2ljYWxcLWluc3RydW1lbnQ7CivkpaQgPCB0aGVcLW5lY2tcLW9mXC1hXC1wZXN0bGU7CivkpYQgPCB0b1wtcGxhc3Rlclwtd2l0aFwtZ29sZDsKK+SkuCA8IHNob3J0XC1zcGVhclwtb3JcLWxhbmNlOwor5LiN56mp5bmz6KGhIDwgdW5zdGFibGVcLWVxdWlsaWJyaXVtOwor5ryi5YyWIDwgY2hpbmVzZVwtbG9jYWxpemF0aW9uOwor5KCRIDwgYmV0d2VlblwtdGhlXC1idXR0b2NrczsKK+SgiCA8IGhhcmRcLXRvXC1tb3ZlXC1mb3J3YXJkOwor5J+pIDwgaGFyZFwtb2ZcLXdhbGtcLWZvcndhcmQ7CivknpkgPCB0b1wtd2Fsa1wtaW5cLWh1cnJpZWRseTsKK+SdkSA8IGFcLWxvY2FsXC1wcm9kdWNlZFwtcGlnOwor5JynIDwgdG9cLWluc3VsdFwtd2l0aFwtd29yZHM7CivknJMgPCBhXC1zbGlwXC1vZlwtdGhlXC10b25ndWU7Civkm4wgPCB0b1wtcHJvdm9rZVwtb3JcLWFyb3VzZTsKK+SZriA8IHN0cmlwXC1vZlwtdGhlXC1jbG90aGVzOwor5Ji+IDwgbGVnc1wtb2ZcLXRoZVwtdHJvdXNlcnM7Civkv6Hmga/os4fmupAgPCBpbmZvcm1hdGlvblwtcmVzb3VyY2U7CivklasgPCBhXC1vbmVcLWxlZ2dlZFwtbW9uc3RlcjsKK+SUiCA8IGx1c2hcLWdyb3d0aFwtb2ZcLWdyYXNzOwor5YWt5Y2B5LqU5q2yIDwgc2l4dHlcLWZpdmVcLXllYXJzXC1vbGQ7CivkkaAgPCBsb25nXC1hbmRcLW5hcnJvd1wtYm9hdDsKK+SQuCA8IHRoZVwtYmFja1wtb2ZcLXRoZVwta25lZTsKK+SPvyA8IHRoZVwtY2FsZlwtb2ZcLXRoZVwtbGVnczsKK+SPoSA8IHVuY29va2VkXC1vclwtcmF3XC1tZWF0Owor5IqzIDwgdG9cLWJyZWFrXC1pbnRvXC1waWVjZXM7CivkirIgPCB0b1wtaHVsbFwtcmljZVwtcm91Z2hseTsKK+SKgiA8IHBvb3JcLXF1YWxpdHlcLW9mXC1yaWNlOwor5bCN5bOZIDwgbXV0dWFsXC1jb25mcm9udGF0aW9uOwor5ImRIDwgYmxhY2tcLXNraW5uZWRcLWJhbWJvbzsKK+SIpiA8IGFcLWN1cnZlZFwtYmFtYm9vXC13aGlwOwor5IiRIDwgdG9vbHNcLXRvXC11bnJlZWxcLXNpbGs7CivkiIEgPCB0b29sc1wtdXNlZFwtb25cLWFcLWJvYXQ7Civkh5ggPCB0b29sXC10b1wtY29sbGVjdFwtcm9wZTsKK+SGoyA8IGFib2RlXC1vZlwtdGhlXC1lbXBlcm9yOwor5IaPIDwgYVwta2luZFwtb2ZcLXJpY2VcLXBsYW50Owor5IWuIDwgYVwtZnVsbFwtaGVhZFwtb2ZcLWdyYWluOwor5IWTIDwgY3VydmVkXC1waWVjZVwtb2ZcLXdvb2Q7CivkhY8gPCByaWNlXC1ib2lsZWRcLXRvXC1ncnVlbDsKK+SEryA8IHRlblwtaGFuZGxlXC1vZlwtZ3JhaW5zOwor576O6LuNIDwgdXNcLWFybXlcfGFybWVkXC1mb3JjZXM7CivkhIIgPCB0b1wtcHJheVwtYW5kXC10b1wtY3Vyc2U7Civkg7AgPCBicmlja1wtb3JcLXN0b25lXC1zdGVwczsKK+SCkiA8IHNob3J0XC10b1wtY3VycnlcLWZhdm9yOwor5IKCIDwgdG9cLWdhemVcLWF0XC1pblwtdGVycm9yOwor5IGsIDwgdG9cLWFjdFwtcHJldGVudGlvdXNseTsKK+SAtyA8IHRvXC1oYXZlXC1xdWlja1wtZ2xhbmNlOwor5ICyIDwgZGlzZWFzZXNcLWluXC10aGVcLWV5ZXM7CivkvY3mlrwgPCBiZVwtc2l0dWF0ZWRcLVwoaW5cLFwtYXRcKTsKK+O/uCA8IHRvXC1jYXN0XC1vZmZcLXRoZVwtc2tpbjsKK+O/niA8IGFuXC1vbGRcLW1hblwtb2ZcLWVpZ2h0eTsKK+O9pCA8IGFcLXNtYWxsXC1wbG90XC1vZlwtbGFuZDsKK+O9oiA8IHRvXC1wbG91Z2hcLXRoZVwtZmllbGRzOwor472VIDwgbmV3XC1icmFuY2hlc1wtZ3Jvd2luZzsKK+O9gyA8IGFcLWJpZ1wtcGllY2VcLW9mXC1icmljazsKK+O8oiA8IGJyaWNrc1wtYW5cLWVhdGhlblwtamFyOwor47yJIDwgZ3JlZW5cLWNvbG9yZWRcLW1lbG9uczsKK+O7riA8IGJyaWdodFwtYW5kXC1icmlsbGlhbnQ7Civjuq4gPCBmaW5lXC1zdG9uZVwtbGlrZVwtamFkZTsKK+O6giA8IGJpZ1wtYW5kXC1zdHJvbmdcLXNoZWVwOwor47mYIDwgc2hpbmJvbmVcLW9mXC1hXC1jYXR0bGU7CivjuKogPCBhblwtb3hcLXdhbGtpbmdcLXNsb3dseTsKK+iuiumguyA8IGZyZXF1ZW5jeVwtY29udmVyc2lvbjsKK+ertueIreWKmyA8IGNvbXBldGl0aXZlXC1zdHJlbmd0aDsKK+O3mSA8IHRvXC1mcnlcLWluXC1mYXRcLW9yXC1vaWw7CivjtpQgPCBzd2lmdFwtYW5kXC10b3JyZW50aWFsOwor47WeIDwgYmVsbGllZFwtaW5cLXdhdGVyXC1nYXM7Civjs7wgPCBidWJibGluZ1wtb2ZcLWZvdW50YWluOwor47OaIDwgZmxvd2luZ1wtb2ZcLXRoZVwtd2F0ZXI7Civjs5QgPCB0b1wtc29ha1wtb3JcLWJlXC1zb2FrZWQ7CivjsqsgPCBoYWlyXC1rbm90c1wtaW5cLWFcLW1lc3M7CivjsIsgPCBhXC1raW5kXC1vZlwtZnJ1aXRcLXRyZWU7Civjr4wgPCB0b1wtb3BlcmF0ZVwtb3JcLW1hbmFnZTsKK+aZuuiDveWkp+aokyA8IGludGVsbGlnZW50XC1idWlsZGluZzsKK+WwkeaVuOawkeaXjyA8IG1pbm9yaXR5XC1uYXRpb25hbGl0eTsKK+WWruWtlyA8IGluZGl2aWR1YWxcLWNoYXJhY3RlcjsKK+OtniA8IGFcLWtpbmRcLWluZmVyaW9yXC13b29kOwor462SIDwgYVwtZmFybWluZ1wtaW5zdHJ1bWVudDsKK+OpuyA8IHJ1Z2dlZFwtbW91bnRhaW5cLXBhdGg7CivjqZQgPCBhXC10b29sXC10b1wtbWFrZVwtYVwtYm93Owor46e5IDwgdG9cLXN0cmlrZVwtd2l0aFwtZmlzdHM7Civog4zlv4MgPCBhXC1zbGVldmVsZXNzXC1nYXJtZW50Owor5oi25Y+jIDwgcmVnaXN0ZXJlZFwtcmVzaWRlbmNlOwor46GZIDwgY3VydGFpblwtZm9yXC1jYXJyaWFnZTsKK+acrOenkSA8IHVuZGVyZ3JhZHVhdGVcLWNvdXJzZTsKK+OglyA8IGRlZXBcLWluXC10aGVcLW1vdW50YWluOwor456fIDwgc2F2aW5nc1wtYW5kXC1yZXNlcnZlczsKK+OZoyA8IHRvXC1waWxlXC1hXC1zYW5kXC1oaWxsczsKK+S+v+S4rSA8IGF0XC1vbmUnJ3NcLWNvbnZlbmllbmNlOwor45mRIDwgdGhlXC1jYW5vcHlcLW9mXC1oZWF2ZW47CivjmI4gPCB0aGVcLXJvYXJzXC1vZlwtYVwtdGlnZXI7CivpkZLlrprlp5Tlk6HmnIMgPCBldmFsdWF0aW9uXC1jb21taXR0ZWU7CivjmIUgPCB0b1wtaG9sZFwtaW5cLXRoZVwtbW91dGg7Civlr7blio0gPCBhXC1kb3VibGVcLWVkZ2VkXC1zd29yZDsKK+OVoSA8IHRoZVwtYmVkXC1vZlwtYVwtdG9ycmVudDsKK+OVjCA8IHRvXC1yYWlzZVwtdGhlXC1jdXJ0YWluOwor45SLIDwgY3V0XC1pbnRvXC10aGluXC1zbGljZXM7CivjkoUgPCB0b1wtdW5iaW5kXC10aGVcLWNvbGxhcjsKK+ORiSA8IGNhbm5vdFwtc3RyYWlnaHRlblwtdXA7Civphp7ph4AgPCBtdWxsXC1vdmVyXC1cKGFuXC1pc3N1ZVwpOwor5YWo6Z2i56aB5q2iIDwgY29tcGxldGVcLXByb2hpYml0aW9uOwor5pqX6JmfIDwgc2VjcmV0XC1zaWduYWxcLVwoc2lnblwpOwor6ICB54i6IDwgbWF0ZXJuYWxcLWdyYW5kZmF0aGVyOwor54+t5pyfIDwgc2NoZWR1bGVcLVwoZm9yXC1mbGlnaHQ7CivosrfmlrkgPCBidXllclwtXChpblwtY29udHJhY3RzXCk7CivlronlqJwgPCBhbm5hXC1cKHBlcnNvbicnc1wtbmFtZVwpOwor6ai+6aas5aSn6LuKIDwgbXVsZVwtYW5kXC1ob3JzZVwtY2FydHM7CivntpPmv5/nmbzlsZUgPCBlY29ub21pY1wtZGV2ZWxvcG1lbnQ7CivpgJroqIrns7vntbEgPCBjb21tdW5pY2F0aW9uXC1zeXN0ZW07CivosqzmiJAgPCBnaXZlXC1zb21lYm9keVwtYVwtdGFzazsKK+S4jeS6jOazlemWgCA8IHRoZVwtb25lXC1hbmRcLW9ubHlcLXdheTsKK+mCj+i8r+mPiOi3r+aOp+WItiA8IGxvZ2ljYWxcLWxpbmtcLWNvbnRyb2w7CivlpJrpurwgPCBob3dcLVwod29uZGVyZnVsXCxcLWV0Y1wpOwor6YWs6KydIDwgdG9cLXRoYW5rXC13aXRoXC1hXC1naWZ0Owor54Sh5YO554+N54+gIDwgcGVhcmxcLW9mXC1ncmVhdFwtcHJpY2U7CivlvoDov5QgPCB0b1wtZ29cLWJhY2tcLWFuZFwtZm9ydGg7CivljIXph5EgPCBjb3Zlclwtd2l0aFwtZ29sZFwtbGVhZjsKK+acquaIkOW5tOiAhSA8IG1pbm9yXC1cKG5vdFwtYW5cLWFkdWx0XCk7CivmmpHnhrEgPCBob3RcLVwoc3VtbWVyXClcLXdlYXRoZXI7Civlt6Hov7TliIbmnpDnq6/lj6MgPCByb3ZpbmdcLWFuYWx5c2lzXC1wb3J0Owor5LyK5pav6Jit5aChIDwgaXNsYW1hYmFkXC1cKHBha2lzdGFuXCk7CivpgYvli5XmnIMgPCBhXC1zcG9ydHNcLWNvbXBldGl0aW9uOwor5LiN5pu+IDwgbmV2ZXJcLVwoaGF2ZVwtZG9uZVwtc3RoOwor57i96YOoIDwgZ2VuZXJhbFwtaGVhZHF1YXJ0ZXJzOwor6LK25YC8IDwgdG9cLWJlY29tZVwtZGV2YWx1YXRlZDsKK+mBuumquCA8IFwoZGVhZFwpXC1odW1hblwtcmVtYWluczsKK+S6jOWNgeWbm+iZnyA8IDI0XC10aFwtZGF5XC1vZlwtYVwtbW9udGg7CivpoZ7mjqggPCB0b1wtcmVhc29uXC1ieVwtYW5hbG9neTsKK+Wkp+WkseaJgOacmyA8IGdyZWF0bHlcLWRpc3NhcG9pbnRlZDsKK+WSjOWlvSA8IHRvXC1iZWNvbWVcLXJlY29uY2lsZWQ7CivmnKzlnJ8gPCBvbmUnJ3NcLW5hdGl2ZVwtY291bnRyeTsKK+S6nuWAqyA8IGFhcm9uXC1cKGFcLW1hbicnc1wtbmFtZVwpOwor576e5oGlIDwgXChhXC1mZWVsaW5nXC1vZlwpXC1zaGFtZTsKK+WTiOS9myA8IGhhcnZhcmRcLVwodW5pdmVyc2l0eVwpOwor5pqR5pyfIDwgc3VtbWVyXC12YWNhdGlvblwtdGltZTsKK+S8gealrembhuWcmCA8IGluZHVzdHJ5XC1hc3NvY2lhdGlvbjsKK+euoeeQhuaOpeWPoyA8IG1hbmFnZW1lbnRcLWludGVyZmFjZTsKK+WRvOWWiiA8IHNob3V0XC1cKHNsb2dhbnNcLFwtZXRjXCk7Civnub3ntJsgPCBpblwtcmlvdG91c1wtcHJvZnVzaW9uOwor5ZGI5aCxIDwgdG9cLVwoc3VibWl0XC1hXClcLXJlcG9ydDsKK+eUn+eUouioreWCmSA8IHByb2R1Y3Rpb25cLWVxdWlwbWVudDsKK+WNiueZvSA8IGZpZnR5XC1cKHllYXJzXC1vZlwtYWdlXCk7CivwoIGlIDwgdGhlXC1ob3Juc1wtb2ZcLWFcLXNoZWVwOwor6LeR6b6N5aWXIDwgdG9cLXBsYXlcLWFcLXNtYWxsXC1yb2xlOwor5piC54S2IDwgdXByaWdodFwtYW5kXC11bmFmcmFpZDsKK+mChOiqqiA8IHRvXC1hZGRcLVwoaW5cLXNwZWFraW5nXCk7Civmm7TliqAgPCBtb3JlXC1cKHRoYW5cLXN0aFwtZWxzZVwpOwor5b636Zu354i+IDwgXChqdW5lXC10ZXVmZWxcKVwtZHJleWVyOwor576p5YuZ5pWZ6IKyIDwgY3VtcHVsc29yeVwtZWR1Y2F0aW9uOwor54i654i6IDwgcGF0ZXJuYWxcLWdyYW5kZmF0aGVyOwor5YKz6Ly45o6n5Yi2IDwgdHJhbnNtaXNzaW9uXC1jb250cm9sOwor5LiN5YudIDwgY2Fubm90XC1iZWFyXC1vclwtc3RhbmQ7CivmlZfog4MgPCBzcG9pbFwtb25lJydzXC1hcHBldGl0ZTsKK+iuiuW/gyA8IGNlYXNlXC10b1wtYmVcLWZhaXRoZnVsOwor5LiN5oe35aW95oSPIDwgaGFyYm91clwtZXZpbFwtZGVzaWduczsKK+S4iuWAiyA8IGZpcnN0XC1cKG9mXC10d29cLXBhcnRzXCk7Civlj6rkuI3pgY7lub7lubTliY0gPCBvbmx5XC1hXC1mZXdcLXllYXJzXC1hZ287Civlub4gPCBob3dcLW1hbnlcP1wtaG93XC1tdWNoXD87CivlpY8gPCBtZW1vcmlhbGl6ZVwtZW1wZXJvcjsKK+aCqCA8IGhvbm9yaWZpY1wtZm9yXC0nJ3lvdScnOwor5ZCPIDwgZ292ZXJubWVudFwtb2ZmaWNpYWw7CivlhYAgPCB0b1wtY3V0XC1vZmZcLXRoZVwtZmVldDsKK+iDtCA8IHRoZVwtbGFyZ2VcLWludGVzdGluZTsKK+enpiA8IGZldWRhbFwtc3RhdGVcLW9mXC1xaW47CivmoYEgPCBjcm9zc1wtYmVhbXNcLW9mXC1yb29mOwor6I6OIDwga2luZFwtb2ZcLXNlZGdlXC1ncmFzczsKK+iWmyA8IGtpbmRcLW9mXC1tYXJzaFwtZ3Jhc3M7CivntaMgPCB0b1wtYmFzdGVcLWZvclwtc2V3aW5nOwor5oKWIDwgYmVcLWNvbnRyYWRpY3RvcnlcLXRvOwor6IqSIDwgbWlzY2FudGh1c1wtc2luZW5zaXM7CivlmLYgPCBuZWlnaGluZ1wtb2ZcLWFcLWhvcnNlOwor5Y+9IDwgc2lnaFwtaW5cLWRpc2FwcHJvdmFsOwor5Y6lIDwgcGVyc29uYWxcLXByb25vdW5cLWhlOwor5ZytIDwgamFkZVwtcG9pbnRlZFwtYXRcLXRvcDsKK+W+mCA8IHdhbGtcLWJhY2tcLWFuZFwtZm9ydGg7CivmmaQgPCBoYXZlXC1pbnRlcnZpZXdcLXdpdGg7CivoiLcgPCB0aGVcLXNpZGVzXC1vZlwtYVwtYm9hdDsKK+mCrCA8IHZhcmlvdXNcLXBsYWNlXC1uYW1lczsKK+ikkCA8IGNvYXJzZVwtd29vbGVuXC1jbG90aDsKK+mmiCA8IG9mZmVyXC1mb29kXC1zdXBlcmlvcjsKK+WUpyA8IGNoaXJwaW5nXC1vZlwtaW5zZWN0czsKK+WSlCA8IHVzZWRcLWluXC10cmFuc2xhdGlvbjsKK+eBuCA8IGNhdXRlcml6ZVwtd2l0aFwtbW94YTsKK+mptyA8IHRlYW1cLW9mXC1mb3VyXC1ob3JzZXM7CivnsrwgPCBjbGVhclwtXChhc1wtb2ZcLXdhdGVyXCk7CivnvpogPCBzcGVjaWVzXC1vZlwtYW50ZWxvcGU7CivlkZMgPCB0YWxrXC1pblwtb25lJydzXC1zbGVlcDsKK+evmSA8IHBvbGVcLXVzZWRcLXB1bnRcLWJvYXQ7CivmuY0gPCByYXBpZFwtd2F0ZXJcLWN1cnJlbnQ7CivohI0gPCBtaW5jZWRcLW1lYXRcLW9yXC1maXNoOwor6Y+WIDwgdG9cLWZpZ2h0XC10b1wtdGhlXC1lbmQ7Civogr0gPCBhXC1jaGVtaWNhbFwtY29tcG91bmQ7Civpiq4gPCBiZWxsc1wtaHVuZ1wtb25cLWhvcnNlOwor56yzIDwgYVwtcmVlZFwtbGVhZlwtd2hpc3RsZTsKK+iWjyA8IHNlZWRcLW9mXC1qb2InJ3NcLXRlYXJzOwor5oKdIDwgdG9cLWxhdWdoXC1hdFwtdG9cLXBpdHk7CivosYcgPCBhXC1zbWFsbFwta2lkbmV5XC1iZWFuOwor5qGJIDwgZXVjYWx5cHR1c1wtZ2xvYnVsdXM7CivouYEgPCB0b1wtd2Fsa1wtd2l0aFwtYVwtbGltcDsKK+iFiCA8IGFuXC1vcmdhbmljXC1jb21wb3VuZDsKK+ienyA8IGtpbmRcLW9mXC1jYXRlcnBpbGxhcjsKK+azriA8IHpob3VcLWR5bmFzdHlcLXNjaG9vbDsKK+mysyA8IHRoZVwtc2lsdmVyeVwtcG9tZnJldDsKK+mcqiA8IGxvbmdcLWFuZFwtaGVhdnlcLXJhaW47CivmnpggPCB0aGVcLWhhbmRsZVwtb2ZcLXRvb2xzOwor5ru5IDwgdGhlXC1iYW5rXC1vZlwtYVwtc3RlYW07CivlvbMgPCBzdGVwXC13aXRoXC1sZWZ0XC1mb290Owor5LqNIDwgdG9cLXRha2VcLXNtYWxsXC1zdGVwczsKK+egmCA8IGFcLWtpbmRcLW9mXC1mYXJtXC10b29sOwor5qCOIDwgY2hlc3RudXRcLWxlYXZlZFwtb2FrOwor6bmHIDwgdGhlXC1zaWx2ZXJcLXBoZWFzYW50Owor6IuMIDwgYXZlcnJob3JhXC1jYXJhbWJvbGE7Civpg5sgPCBvdXRlclwtd2FsbHNcLW9mXC1jaXR5Owor6YaiIDwgbWluY2VkXC1waWNrbGVkXC1tZWF0Owor55yaIDwgZGlzZWFzZVwtb2ZcLXRoZVwtZXllczsKK+ijiSA8IHNcLXNlYW1cLWluXC1hXC1nYXJtZW50Owor5bSmIDwgYVwtbW91bnRhaW5cLWluXC1rYW5zdTsKK+WFlSA8IGFcLWZlbWFsZVwtcmhpbm9jZXJvczsKK+iouuaWt+WKn+iDvSA8IGRpYWdub3N0aWNcLWZ1bmN0aW9uOwor6LKh5pS/6YOoIDwgbWluaXN0cnlcLW9mXC1maW5hbmNlOwor5aWU5rWBIDwgZmxvd1wtYXRcLWdyZWF0XC1zcGVlZDsKK+W7o+WRiuWVhiA8IGFkdmVydGlzaW5nXC1jb21wYW55Owor5LiA55m+5LqU5Y2B5aSa5bm0IDwgbW9yZVwtdGhhblwtMTUwXC15ZWFyczsKK+aXpeaWhyA8IGphcGFuZXNlXC1cKGxhbmd1YWdlXCk7Civppqzkvobopb/kup7oqp4gPCBtYWxhc2lhblwtXChsYW5ndWFnZVwpOwor5pKe6KaLIDwgdG9cLW1lZXRcLWJ5XC1hY2NpZGVudDsKK+W3rumhjSA8IGJhbGFuY2VcLVwoZmluYW5jaWFsXCk7CivljYrmiKogPCBoYWxmXC1cKG9mXC1hXC1zZWN0aW9uXCk7CivliZvnupQgPCBcKGp1c3RcKVwtYVwtbW9tZW50XC1hZ287CivmhbDlronlqaYgPCBjb21mb3J0XC13b21hblx8d29tZW47CivmipjlsITnjocgPCBpbmRleFwtb2ZcLXJlZnJhY3Rpb247Civlu6DnpKYgPCBmYWN0b3JpZXNcLWFuZFwtbWluZXM7CivlgrPovLjlqpLpq5QgPCB0cmFuc21pc3Npb25cLW1lZGl1bTsKK+i1t+atu+WbnueUnyA8IGFyaXNlXC1mcm9tXC10aGVcLWRlYWQ7CivnhrHng4ggPCB3YXJtXC1cKHdlbGNvbWVcLFwtZXRjXCk7Civpq5jpmo7oqp7oqIAgPCBoaWdoXC1sZXZlbFwtbGFuZ3VhZ2U7CivlubTku6PliJ0gPCBiZWdpbm5pbmdcLW9mXC1hblwtYWdlOwor5Lqe5rSy6IiH5aSq5bmz5rSL5Zyw5Y2AIDwgYXNpYVwtcGFjaWZpY1wtcmVnaW9uOwor6L6v6K23IDwgc3BlYWtcLWluXC1kZWZlbmNlXC1vZjsKK+e+juWci+S6uuawkSA8IHRoZVwtYW1lcmljYW5cLXBlb3BsZTsKK+WTpeWAq+avlOS6nuWkp+WtuCA8IGNvbHVtYmlhXC11bml2ZXJzaXR5Owor6Ziy56am5oCnIDwgZGVmZW5zaXZlXC1cKHdlYXBvbnNcKTsKK+mBjuS6huS6lOWIhumQmCA8IGZpdmVcLW1pbnV0ZXNcLXBhc3NlZDsKK+aJk+apq+eCriA8IHNwZWFrXC11bndhcnJhbnRlZGx5Owor5aSn5om5IDwgbGFyZ2VcLXF1YW50aXRpZXNcLW9mOwor6Z2i5Zqu6YCj5o6lIDwgY29ubmVjdGlvblwtb3JpZW50ZWQ7CivlsIjmpa3kurrmiY0gPCBleHBlcnRcLVwoaW5cLWFcLWZpZWxkXCk7CivnhKHnuKvpgKPmjqUgPCBzZWFtbGVzc1wtY29ubmVjdGlvbjsKK+e2geelqCA8IGtpZG5hcFwtXChmb3JcLXJhbnNvbVwpOwor55m96YqFIDwgY29wcGVyXC1uaWNrZWxcLWFsbG95Owor5YWL576F5Zyw5Lqe6KqeIDwgY3JvYXRpYW5cLVwobGFuZ3VhZ2VcKTsKK+e1seeosSA8IGNvbGxlY3RpdmVseVwtY2FsbGVkOwor55m86KiA5qyKIDwgdGhlXC1yaWdodFwtb2ZcLXNwZWVjaDsKK+W7ouawoyA8IHdhc3RlXC1cKGV4aGF1c3RcKVwtZ2FzOwor6KiO6KuW55qE6K2w6aGMIDwgdG9waWNcLW9mXC1kaXNjdXNzaW9uOwor5YyF5a2QIDwgc3RlYW1lZFwtc3R1ZmZlZFwtYnVuOwor57SF6JGJIDwgcmVkXC1hdXR1bW5hbFwtbGVhdmVzOwor5bGk6KaL6L+t5Ye6IDwgdG9cLW9jY3VyXC1mcmVxdWVudGx5Owor55m+6LKoIDwgZ2VuZXJhbFwtbWVyY2hhbmRpc2U7CivprKLpq64gPCBoYWlyXC1vblwtdGhlXC10ZW1wbGVzOwor576O5ZyL5Lul5aSWIDwgb3V0c2lkZVwtb2ZcLXRoZVwtdVwuc1wuOwor5YSY6YePIDwgYXNcLW11Y2hcLWFzXC1wb3NzaWJsZTsKK+i6q+mrmCA8IFwoYVwtcGVyc29uJydzXClcLWhlaWdodDsKK+aVmeWtuCA8IHRlYWNoZXJcLWFuZFwtc3R1ZGVudDsKK+mEmeS6uiA8IHlvdXJcLWh1bWJsZVwtc2VydmFudDsKK+WcsOWdgOeahOi9ieaPmyA8IGFkZHJlc3NcLXRyYW5zbGF0aW9uOwor5pWF5a6uIDwgdGhlXC1pbXBlcmlhbFwtcGFsYWNlOwor5pS/5bGAIDwgcG9saXRpY2FsXC1zaXR1YXRpb247Civnnb/mmbogPCB3aXNlXC1hbmRcLWZhcnNpZ2h0ZWQ7Civoh6rli5XlnLDlt6XkvZwgPCBhdXRvbWF0aWNcLW9wZXJhdGlvbjsKK+atpOaZguatpOWIuyA8IGF0XC10aGlzXC12ZXJ5XC1tb21lbnQ7CivpuJIgPCB0aGVcLWVhc3Rlcm5cLWphY2tkYXc7CivptrIgPCBzaWJlcmlhblwtZmx5Y2F0Y2hlcjsKK+W5tOS5i+S5hSA8IHBlcmlvZFwtb2ZcLVwuXC5cLlwteWVhcnM7Civoo5zop5IgPCBzdXBwbGVtZW50YXJ5XC1hbmdsZTsKK+mwtiA8IGtvbm9zaXJ1c1wtcHVuY3RhdHVzOwor6a+lIDwgcG9tYXRvbXVzXC1zYWx0YXRyaXg7Civpr5UgPCBjb3J5cGhhZW5hXC1oaXBwdXJ1czsKK+mutiA8IHNlYmFzdG9kZXNcLWd1bnRoZXJpOwor6YCy5pS7IDwgYXR0YWNrXC1cKG1pbGl0YXJpbHlcKTsKK+aTuuW8hCA8IG1vdmVcLWJhY2tcLWFuZFwtZm9ydGg7CivkuI3kuK3mhI8gPCBub3RcLXRvXC1vbmUnJ3NcLWxpa2luZzsKK+mjgiA8IHdpbmRcLWluXC1oaWdoXC1wbGFjZXM7Civpor4gPCBibG93aW5nXC1vZlwtdGhlXC13aW5kOwor6aCNIDwgdG9cLXJhaXNlXC1vbmUnJ3NcLWhlYWQ7Civpn5ggPCBhcmNoZXInJ3NcLXRodW1iXC1yaW5nOwor6Z6sIDwgYVwtcXVpdmVyXC1vblwtYVwtaG9yc2U7Civosr/mmJPkv53orbfkuLvnvqkgPCB0cmFkZVwtcHJvdGVjdGlvbmlzbTsKK+mBjeW4gyA8IGJlXC1mb3VuZFwtZXZlcnl3aGVyZTsKK+Wkmum7qOmBuOiIiSA8IG11bHRpcGFydHlcLWVsZWN0aW9uOwor6Zy2IDwgZG93bnBvdXJpbmdcLW9mXC1yYWluOwor6ZyuIDwgZGVuc2VuZXNzXC1vZlwtY2xvdWRzOwor5YWJ57qW6KGw5ribIDwgb3B0aWNhbFwtYXR0ZW51YXRpb247CivmlLnlkI0gPCB0b1wtY2hhbmdlXC1vbmVzXC1uYW1lOwor6ZG0IDwgdG9cLWVuZ3JhdmVcLW9yXC1jYXJ2ZTsKK+S4jeWLnuiAjOeNsiA8IHJlYXBcLXdpdGhvdXRcLXNvd2luZzsKK+mOhCA8IGlyaWRpdW1cLWVpbnN0ZWluaXVtOwor5oqA6KGT5qiZ5rqWIDwgdGVjaG5vbG9neVwtc3RhbmRhcmQ7Civoo5zogIMgPCBtYWtlXC11cFwtZXhhbWluYXRpb247CivplovnmbzpgY7nqIsgPCBkZXZlbG9wbWVudFwtcHJvY2VzczsKK+eZvuWIhuWItiA8IGh1bmRyZWRcLW1hcmtcLXN5c3RlbTsKK+mIgyA8IGFuY2llbnRcLXdpbmVcLXZlc3NlbDsKK+mFpyA8IHRvXC1wbGVkZ2VcLXdpdGhcLXdpbmU7CivliIbmnpDlrrYgPCBcKHBvbGl0aWNhbFwpXC1hbmFseXN0Owor5pKt5byEIDwgb3JkZXJcLXN1YmplY3RcLWFib3V0Owor5bm05bqVIDwgdGhlXC1lbmRcLW9mXC10aGVcLXllYXI7CivntITmq4MgPCBhcmtcLW9mXC10aGVcLWNvdmVuYW50Owor5bmr5belIDwgaGVscFwtd2l0aFwtZmFybVwtd29yazsKK+WgseW7oiA8IHJlcG9ydFwtYXNcLXdvcnRobGVzczsKK+mAmuS/oeiyoOi8iSA8IGNvbW11bmljYXRpb25zXC1sb2FkOwor5bi46KaP5q2m5ZmoIDwgY29udmVudGlvbmFsXC13ZWFwb247CivntbHoqIjntZDmnpwgPCBzdGF0aXN0aWNhbFwtcmVzdWx0czsKK+WPuOepuuimi+aFoyA8IGFcLWNvbW1vblwtb2NjdXJyZW5jZTsKK+eri+azleacgyA8IGxlZ2lzbGF0aXZlXC1jb3VuY2lsOwor5Z+35o6MIDwgd2llbGRcLVwocG93ZXJcLFwtZXRjXC5cKTsKK+iltCA8IGFcLW9uZVwtcGllY2VcLWdhcm1lbnQ7CivopIMgPCBhXC1zZWFtXC1pblwtYVwtZ2FybWVudDsKK+W8leWKm+WgtCA8IGdyYXZpdGF0aW9uYWxcLWZpZWxkOwor5YW15qyKIDwgbWlsaXRhcnlcLWxlYWRlcnNoaXA7CivooLAgPCBjZXJhbWJ5eFwtcnVnaWNvbGxpczsKK+ifqCA8IHRoZVwtc2liZXJpYW5cLWplcmJvYTsKK+idnSA8IHRoZVwtbGFydmFcLW9mXC1sb2N1c3Q7CivkuozljYHkuIPomZ8gPCAyN3RoXC1kYXlcLW9mXC1hXC1tb250aDsKK+mAvOS+myA8IGV4dG9ydFwtYVwtY29uZmVzc2lvbjsKK+imluiAjOS4jeimiyA8IHR1cm5cLWFcLWJsaW5kXC1leWVcLXRvOwor5L+d5a6J6Ieq5YuV5YyWIDwgc2VjdXJpdHlcLWF1dG9tYXRpb247CivolIogPCBuYXN0dXJ0aXVtXC1tb250YW51bTsKK+iThyA8IGZvbGxpY2xlc1wtb2ZcLXBsYW50czsKK+iRhyA8IGVsc2hvbHRyaWFcLXBhbHRyaW5pOwor6I6VIDwgbnltcGhvaWRlc1wtcGVsdGF0dW07CivojLMgPCBjeXBlcnVzXC1tYWxhY2NlbnNpczsKK+iLsyA8IHBldGFzaXRlc1wtamFwb25pY3VzOwor6ImrIDwgYm93XC1vclwtcHJvd1wtb2ZcLWJvYXQ7CivmtojogJfph48gPCByYXRlXC1vZlwtY29uc3VtcHRpb247Civpm7vlrZDmlofku7YgPCBlbGVjdHJvbmljXC1kb2N1bWVudDsKK+mWi+aUviA8IGxpZnRcLVwocmVzdHJpY3Rpb25zXCk7CivnmbvmnIggPCBnb1wtXCh1cFwpXC10b1wtdGhlXC1tb29uOwor576iIDwgZmluZVwtd29vbGVuXC1mYWJyaWNzOwor5qC46Zu756uZIDwgbnVjbGVhclwtcG93ZXJcLXBsYW50Owor576RIDwgYVwtZ3VpZGVcLXRvXC1nb29kbmVzczsKK+e1kOani+WKqeipniA8IHN0cnVjdHVyYWxcLXBhcnRpY2xlOwor5a2X5paf5Y+l6YWMIDwgd2VpZ2hpbmdcLWV2ZXJ5XC13b3JkOwor57myIDwgdG9cLXdvcmtcLWFzXC1hXC10YWlsb3I7CivluaPlgLwgPCB2YWx1ZVwtb2ZcLWFcLWN1cnJlbmN5Owor57aAIDwgYVwta2luZFwtb2ZcLXNhY2tjbG90aDsKK+aUv+ayu+mXnOS/giA8IHBvbGl0aWNhbFwtcmVsYXRpb25zOwor5Yaw5aC0IDwgc2thdGluZ1wtb3JcLWljZVwtcmluazsKK+ebuOS6kuWFvOWuuSA8IG11dHVhbGx5XC1jb21wYXRpYmxlOwor5bCL5LqL55Sf6Z2eIDwgdG9cLWxvb2tcLWZvclwtdHJvdWJsZTsKK+erkSA8IGJlXC12YXN0XC1hbmRcLWVuZGxlc3M7CivnppMgPCB0b1wtZHJpdmVcLW91dFwtZGVtb25zOwor56WQIDwgZGl2aW5lXC1pbnRlcnZlbnRpb247Civnm67liY0gPCBhdFwtdGhlXC1wcmVzZW50XC10aW1lOwor6KGo6Z2i5YyWIDwgY29tZVwtdG9cLXRoZVwtc3VyZmFjZTsKK+ethuitryA8IHdyaXR0ZW5cLXRyYW5zbGF0aW9uOwor562G6KmmIDwgd3JpdHRlblwtZXhhbWluYXRpb247Civnn5QgPCBicmlsbGlhbnRcLVwob2ZcLWV5ZXNcKTsKK+mXnOWIhyA8IGJlXC1kZWVwbHlcLWNvbmNlcm5lZDsKK+Wwj+Wvq+Wtl+avjSA8IGxvd2VyY2FzZVwtXChsZXR0ZXJzXCk7CivnnpUgPCBjYXRhcmFjdFwtaW5cLXRoZVwtZXllOwor6LWw6ZaLIDwgZ2V0XC1vdXRcLW9mXC10aGVcLXdheVwhOwor6KaG5LqhIDwgZmFsbFwtXChvZlwtYW5cLWVtcGlyZVwpOwor6Zu76Kmx5qmfIDwgdGVsZXBob25lXC1lcXVpcG1lbnQ7Civoo4HmlrcgPCBjb25zaWRlclwtYW5kXC1kZWNpZGU7CivnuL3ntbHlupwgPCBwcmVzaWRlbnRpYWxcLXBhbGFjZTsKK+e0gOWFgyA8IGJlZ2lubmluZ1wtb2ZcLWFuXC1lcmE7CivlhbXlnJggPCBsYXJnZVwtbWlsaXRhcnlcLXVuaXQ7CivovqbkuosgPCB0b1wtaGFuZGxlXC1cKGFmZmFpcnNcKTsKK+ezvuWBjyA8IHRvXC1jb3JyZWN0XC1hblwtZXJyb3I7CivmiY3orZggPCBhYmlsaXR5XC1hbmRcLWluc2lnaHQ7CivmjInnkIYgPCBhY2NvcmRpbmdcLXRvXC1yZWFzb247CivovJTluaMgPCBmcmFjdGlvbmFsXC1jdXJyZW5jeTsKK+aQreS8tCA8IHRyYXZlbFwtd2l0aFwtYW5vdGhlcjsKK+WcqOafkOeorueoi+W6puS4iiA8IHRvXC1hXC1jZXJ0YWluXC1leHRlbnQ7CivlnIvml5cgPCBmbGFnXC1cKG9mXC1hXC1jb3VudHJ5XCk7Civou43mlL8gPCBhcm15XC1hbmRcLWdvdmVybm1lbnQ7Civnl4Xms4EgPCBzdGF0ZVwtb2ZcLWFuXC1pbGxuZXNzOwor5YiG5L2I5byP57ay57WhIDwgZGlzdHJpYnV0ZWRcLW5ldHdvcms7CivnrqHnkIblip/og70gPCBtYW5hZ2VtZW50XC1mdW5jdGlvbjsKK+i9ieWQkSA8IGNoYW5nZVwtb2ZcLWRpcmVjdGlvbjsKK+api+aOpeWZqCA8IGJyaWRnZVwtXChuZXR3b3JraW5nXCk7Civnmb3ljbcgPCBibGFua1wtZXhhbWluZVwtcGFwZXI7Civmm7zlvrnmlq/nibnnt6jnorwgPCBtYW5jaGVzdGVyXC1lbmNvZGluZzsKK+WFq+S7mSA8IHRoZVwtZWlnaHRcLWltbW9ydGFsczsKK+i8g+WkpyA8IGNvbXBhcmF0aXZlbHlcLWxhcmdlOwor562G566XIDwgZG9cLWFcLXN1bVwtaW5cLXdyaXRpbmc7CivmoaogPCBteXRoaWNhbFwtZ2lhbnRcLXRyZWU7Civmj5Dlh7ogPCB0b1wtcmFpc2VcLVwoYW5cLWlzc3VlXCk7Civnmb3kurogPCB3aGl0ZVwtbWFuXC1hbmRcLXdvbWFuOwor5p+uIDwgZmxhdFwtcGllY2VzXC1vZlwtd29vZDsKK+WBmuazlSA8IHdheVwtb2ZcLWRvaW5nXC10aGluZ3M7CivmmrUgPCBkcnlcLWJ5XC1leHBvc2luZ1wtc3VuOwor5oq954WZIDwgc21va2VcLVwoYVwtY2lnYXJldHRlXCk7Civmlp0gPCBzbWFsbFwtamFkZVwtd2luZVwtY3VwOwor6KGo5oOFIDwgXChmYWNpYWxcKVwtZXhwcmVzc2lvbjsKK+ijnOWKqSA8IFwoZmluYW5jaWFsXClcLXN1YnNpZHk7CivmlYQgPCB0b1wtcHV0XC1mb3J0aFwtZWZmb3J0Owor6Iag54mHIDwgXChwaG90b2dyYXBoaWNcKVwtZmlsbTsKK+aSjSA8IHRvXC1ob2xkXC1pblwtdGhlXC1oYW5kOwor5LiN5pyf54S26ICM54S2IDwgaGFwcGVuXC11bmV4cGVjdGVkbHk7Civmj5UgPCByb2xsXC11cFwtdGhlXC1zbGVldmVzOwor5p+U6YGTIDwgXCh0aGVcLXNwb3J0XC1vZlwpXC1qdWRvOwor5Yqg5YC85Z6L57ay6LevIDwgdmFsdWVcLWFkZGVkXC1uZXR3b3JrOwor5o6h5Yi2IDwgY29sbGVjdFwtYW5kXC1wcm9jZXNzOwor5LiN5b6X5LqGIDwgZGVzcGVyYXRlbHlcLXNlcmlvdXM7CivmioTnjbIgPCB0b1wtc2VhcmNoXC1hbmRcLXNlaXplOwor6KGo5aeQIDwgb2xkZXJcLWZlbWFsZVwtY291c2luOwor5YiG5L2I5o6n5Yi2IDwgZGlzdHJpYnV0ZWRcLWNvbnRyb2w7CivlsJcgPCB5b3VuZ2VyXC1vZlwtYnJvdGhlcnM7Civou5/ku7YgPCBcKGNvbXB1dGVyXClcLXNvZnR3YXJlOwor5aOQIDwgdGhlXC1pbXBlcmlhbFwtc2lnbmV0Owor5oub5b6FIDwgdG9cLXJlY2VpdmVcLVwoZ3Vlc3RzXCk7Civmnb/mooHmqYsgPCBwbGF0ZVwtZ2lyZGVyXC1icmlkZ2U7CivlnpUgPCB1c2VkXC1pblwtcGxhY2VcLW5hbWVzOwor5ouc5bm0IDwgcGF5XC1hXC1uZXdcLXllYXJcLWNhbGw7CivmoL3ot5/poK0gPCB0b1wtc3VmZmVyXC1hXC1zZXRiYWNrOwor5ZSaIDwgdm9taXRpbmdcLW9mXC1hbmltYWxzOwor5qC45bel56iLIDwgbnVjbGVhclwtZW5naW5lZXJpbmc7Civlm6DnibnntrLoga/pgJogPCBpbnRlcm5ldFwtY29ubmVjdGlvbjsKK+WRuiA8IHZvaWNlXC1vZlwtYW5nZXJcLXZhc3Q7CivkupLpgJogPCB0b1wtaW50ZXJjb21tdW5pY2F0ZTsKK+enkeWtuOeahOS6pOa1gSA8IHNjaWVudGlmaWNcLWV4Y2hhbmdlOwor5a6J55CG5pyDIDwgdW5cLXNlY3VyaXR5XC1jb3VuY2lsOwor57ay57Wh5oeJ55SoIDwgbmV0d29ya1wtYXBwbGljYXRpb247CivlgZggPCBhbmNpZW50XC1mYW1pbHlcLW5hbWU7Civnr6HkvY0gPCB0b1wtc2VpemVcLXRoZVwtdGhyb25lOwor5qmf5qKw57+76K2vIDwgbWFjaGluZVwtdHJhbnNsYXRpb247Civnvbfpu5wgPCBkaXNtaXNzXC1mcm9tXC1vZmZpY2U7Civktq8gPCB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+S2kiA8IG91dHN0YW5kaW5nXC1hYmlsaXR5Owor5LaMIDwgYVwtcHVzdHVsZVwtb3JcLXBpbXBsZTsKK+S2hCA8IHN0cmlwZWRcLW1vdHRsZWRcLXJhdDsKK+S1sSA8IHJlZFwtYW5kXC1ibGFja1wtY29sb3I7CivktZQgPCB0b1wtdHVyblwtb25cLXRoZVwtaGVlbDsKK+S0qiA8IGFcLWZhYnVsb3VzXC1jcmVhdHVyZTsKK+S0oCA8IGFcLXlvdW5nXC10YWlsZWRcLWRlZXI7Civlsazlr6YgPCB0dXJuXC1vdXRcLXRvXC1iZVwtdHJ1ZTsKK+SxpyA8IGFcLWtpbmRcLW9mXC1maXNoXC1lZWxzOwor5LCcIDwgYVwtbGFyZ2VcLWVhcnRoZW5cLXBvdDsKK+SutyA8IG1vdmVtZW50XC1vZlwtYVwtaG9yc2U7CivkroMgPCB0b1wtZ29cLWJlZm9yZVwtb3RoZXJzOwor5rS+6YGjIDwgc2VuZFwtXChvblwtYVwtbWlzc2lvblwpOwor5KuxIDwgYVwtcGFydFwtb2ZcLXRoZVwtc2t1bGw7Civkq6kgPCB0b1wtc2hha2VcLW9uZScnc1wtaGVhZDsKK+SqvyA8IHRoZVwtdG9wXC1vZlwtdGhlXC1oZWFkOwor5Kq9IDwgaG9hcnlcLWhhaXJlZFwtcGVyc29uOwor5Km3IDwgdGhlXC1zaWRlc1wtb2ZcLWFcLXNob2U7CivkqacgPCB0b1wtdGllXC11cFwtaHVycmllZGx5Owor5KmMIDwgdG9cLWhhdmVcLWFcLXdvcm5cLWxvb2s7Civkp5QgPCB0b1wtbWVldFwtYXRcLXRoZVwtYmFuazsKK+SmmSA8IGFcLWdvdmVybm1lbnRcLWFnZW5jeTsKK+SlpyA8IGFcLWZpbmVcLWtpbmRcLW9mXC1qYWRlOwor6KiK5qGG5YKz6YCB5pyN5YuZIDwgZnJhbWVcLXJlbGF5XC1zZXJ2aWNlOwor5KSGIDwgYVwta2luZFwtb2ZcLXJpY2VcLXdpbmU7CivkpIEgPCBjb29rZWRcLW9yXC13ZWxsXC1kb25lOwor5KKLIDwgYVwtbWFyc2hhbFwtb3JcLWhlcmFsZDsKK+S4pumHjSA8IGxheVwtZXF1YWxcLXN0cmVzc1wtb247Civou5/ku7bmioDooZMgPCBzb2Z0d2FyZVwtdGVjaG5vbG9neTsKK+SfoyA8IGFuXC1hbmltYWxcLWluXC1sZWdlbmQ7CivknrMgPCB0b1wtc3R1bWJsZVwtYW5kXC1mYWxsOwor5J2gIDwgYVwta2luZFwtb2ZcLXdpbGRcLWJvYXI7CivknIEgPCB0b1wtYWJ1c2VcLWFuZFwtaW5zdWx0Owor5JmSIDwgdG9cLXN0b3JlXC1vclwtc2F2ZVwtdXA7CivkmY8gPCBzaG9ydFwtc2xlZXZlc1wtc2hpcnQ7CivkmYEgPCBjaGlsZHJlbicnc1wtZ2FybWVudHM7CivkmKogPCBjbG90aGVzXC13aXRob3V0XC1oZW07CivklqIgPCBmaXJzdFwtYm9yblwtc2lsa3dvcm07CivklpYgPCB0b1wtc2hvd1wtZmFtaWxpYXJpdHk7Civklb4gPCBhXC1raW5kXC1vZlwtdmVnZXRhYmxlOwor5JWYIDwgYVwtdmFyaWV0eVwtb2ZcLWZ1bmd1czsKK+SVgyA8IHRoZVwtc2hhZGVcLW9mXC1hXC10cmVlOwor5JO3IDwgbnltcGhvaWRlc1wtcGVsdGFsdW07Civkk40gPCBjcnVjaWZlcm91c1wtZmxvd2VyczsKK+SSiCA8IHNpZGVcLWJlYW1cLW9mXC1hXC1ib2F0Owor5JKAIDwgc2hvcnRcLWFuZFwtZGVlcFwtYm9hdDsKK+SRhyA8IG1lZGljaW5lXC1mb3JcLWFcLXNvcmU7CivkkK0gPCBhXC1kaXNjaGFyZ2VcLW9yXC1mbHV4Owor5I+5IDwgdG9cLXdhdGNoXC1zdGVhbHRoaWx5Owor5I+oIDwgdG9cLXN3ZWxsXC11cFwtZ3JlYXRseTsKK+SPhiA8IGJ1enppbmdcLWluXC10aGVcLWVhcnM7CivkjbcgPCB0b1wtY2hhc2VcLWVhY2hcLW90aGVyOwor5Iu5IDwgYnJlYWR0aFwtb2ZcLW1hdGVyaWFsOwor5IuwIDwgdG9cLWJpbmRcLW9yXC1yZXN0cmFpbjsKK+aJjeWtuCA8IHRhbGVudFwtYW5kXC1sZWFybmluZzsKK+iAleiAmCA8IHBsb3dpbmdcLWFuZFwtd2VlZGluZzsKK+aTuumWgOmdoiA8IGtlZXBcLXVwXC1hcHBlYXJhbmNlczsKK+ioiuahhuWCs+mAgee2sui3ryA8IGZyYW1lXC1yZWxheVwtbmV0d29yazsKK+SHvSA8IGFcLWNvYXJzZVwtYmFtYm9vXC1tYXQ7Civkhq8gPCBhXC1zaG9ydFwtc2hhcGVkXC1mYWNlOwor5IWvIDwgYVwtdmFyaWV0eVwtb2ZcLW1pbGxldDsKK+SFnyA8IHZhcmlldGllc1wtb2ZcLW1pbGxldDsKK+SFkiA8IGFcLXNoYXJwXC1lZGdlZFwtZ3Jhc3M7CivmhYjnpaUgPCBcKGFcKVwta2luZGx5XC1cKHBlcnNvblwpOwor5IGLIDwgd2l0aFwtb25lXC1leWVcLWNsb3NlZDsKK+SBgyA8IHRvXC1sb29rXC1hdHRlbnRpdmVseTsKK+SApCA8IGluc2lnaHRcLW9mXC1qZWFsb3VzeTsKK+SAoyA8IHRvXC1sb29rXC1zdGVhZGlseVwtYXQ7Civlpbbmsrnoj5zoirEgPCBjcmVhbWVkXC1jYXVsaWZsb3dlcjsKK+O/kyA8IGRpc2Vhc2VcLW9mXC10aGVcLWhvb2Y7CivlhYnnmbzpgIHlmaggPCBvcHRpY2FsXC10cmFuc21pdHRlcjsKK+O+uyA8IG5vdFwtYW55XC1wcm9ncmVzc2l2ZTsKK+O+tiA8IGRpc2Vhc2VcLW9mXC10aGVcLWtuZWU7CivlronmqIIgPCBwZWFjZVwtYW5kXC1oYXBwaW5lc3M7CivjvqIgPCBhXC1tYWxpZ25hbnRcLWRpc2Vhc2U7Civjva0gPCB2YWNhbnRcLWxvdFwtb3JcLXNwYWNlOwor472MIDwgdGhlXC1yaWRnZVwtb2ZcLWFcLXJvb2Y7CivjvYIgPCBhXC1jcmFja2VkXC1jb250YWluZXI7CivjvJkgPCBicmlja3dvcmtcLW9mXC1hXC13ZWxsOwor47ySIDwgYVwta2luZFwtb2ZcLWJpZ1wtbWVsb247CivntrLntaHnkrDlooMgPCBuZXR3b3JrXC1lbnZpcm9ubWVudDsKK+aEm+S6uuWmguW3sSA8IGxvdmVcLW90aGVyc1wtYXNcLXNlbGY7CivjuLYgPCBjb2xvclwtb2ZcLXRoZVwtb3h0YWlsOwor47i1IDwgdGhlXC1sb3dpbmdcLW9mXC1hblwtb3g7CivjuKUgPCBob3VzZWhvbGRcLXJlZ2lzdGVyczsKK+O4oiA8IGNyb3NzXC1iZWFtXC1vZlwtYVwtYmVkOwor47ieIDwgYmxvY2tzXC1mb3JcLXByaW50aW5nOwor47iTIDwgdG9cLWhhdmVcLWRpc2FwcGVhcmVkOwor47iAIDwgYmxhY2tlbmVkXC13aXRoXC1zb290Owor47ekIDwgcm9zeVwtY2xvdWRzXC1vZlwtZGF3bjsKK+momeWPliA8IHRvXC1nYWluXC1ieVwtY2hlYXRpbmc7CivjsocgPCB0aGVcLXJhdHRsZVwtb2ZcLWRydW1zOwor47G+IDwgYVwta2luZFwtb2ZcLW9ybmFtZW50czsKK+OxuSA8IHRvXC1kaWVcLWZyb21cLWRpc2Vhc2U7CivjsasgPCBkZXN0cm95ZWRcLW9yXC1ydWluZWQ7CivjsaogPCBzdHVwaWRcLWFuZFwtY29uZnVzZWQ7CivjsYogPCBhc3RobWF0aWNcLWJyZWF0aGluZzsKK+OxiSA8IG1vdmluZ1wtb2ZcLXRoZVwtbW91dGg7CivjsLQgPCB0b1wtZ3JhdGVcLW9uXC10aGVcLWVhcjsKK+OwryA8IHRoZVwtd2F5XC1vZlwtc3BlYWtpbmc7Civot6/pgI/npL4gPCByZXV0ZXJzXC1uZXdzXC1hZ2VuY3k7CivmtrzniL0gPCBjb29sXC1hbmRcLXJlZnJlc2hpbmc7Civpu6jntYQgPCBsZWFkaW5nXC1wYXJ0eVwtZ3JvdXA7CivkvovlpJYgPCBcKG1ha2VcLWFuXClcLWV4Y2VwdGlvbjsKK+OrryA8IGluXC1jb250cmF2ZW50aW9uXC1vZjsKK+izh+a6kCA8IFwobmF0dXJhbFwpXC1yZXNvdXJjZXM7CivllYbmnIMgPCBjaGFtYmVyXC1vZlwtY29tbWVyY2U7CivotaTlrZcgPCBcKGZpbmFuY2lhbFwpXC1kZWZpY2l0Owor46mmIDwgdG9cLWxlYWRcLWJ5XC10aGVcLWhhbmQ7CivjqZggPCB0b1wtbW9vclwtdG9cLXRoZVwtYmFuazsKK+OonSA8IHRoZVwtdmVyeVwtaGFyZFwtc3R1ZmY7Civjp4UgPCB0b1wtdHVyblwtdXBzaWRlXC1kb3duOwor46aTIDwgZGlmZmljdWx0XC1pbnRlbnRpb247CivjpZ0gPCB0b1wtYXJvdXNlXC10b1wtYWN0aW9uOwor6Zi/5ouJ5be06aasIDwgYWxhYmFtYVwtXCh1XC5zXC5zdGF0ZVwpOwor46KKIDwgdG9cLXNldFwtc2lkZVwtYnlcLXNpZGU7CivjooIgPCBvZlwtaGlnaGx5XC1zdHJhdGVnaWM7Civpi7Dpm6LlrZDpm7vmsaAgPCBsaXRoaXVtXC1pb25cLWJhdHRlcnk7CivntYLpu57lnLDlnYAgPCBkZXN0aW5hdGlvblwtYWRkcmVzczsKK+OfsSA8IHNoYXBlXC1vZlwtYVwtbW91bnRhaW47Civjn5MgPCBsb2Z0eVwtYW5kXC1kYW5nZXJvdXM7Civjn5IgPCBtb3VudGFpbnNcLWFkam9pbmluZzsKK+S4puiBryA8IHBhcmFsbGVsXC1jb25uZWN0aW9uOwor45irIDwgdG9cLWZhbGxcLWludG9cLWFcLXdlbGw7CivosqHmupAgPCBmaW5hbmNpYWxcLXJlc291cmNlczsKK+OXtiA8IHRvXC1leHBlbFwtdGhlXC1icmVhdGg7Civnp5HlrbjpmaIgPCBhY2FkZW15XC1vZlwtc2NpZW5jZXM7CivjlqogPCBzb3VuZFwtb2ZcLXN1cnByaXNpbmc7CivjlLkgPCBhXC1zdXJwbHVzXC1vclwtZXhjZXNzOwor45O3IDwgdG9cLWN1dFwtb2ZmXC10aGVcLW5vc2U7CivjkoQgPCBicml0dGxlXC1hbmRcLWZyaWFibGU7CivjkoMgPCBjYXBpdGFsXC1mb3JtXC1vZlwtdHdvOwor6YeP6K6KIDwgcXVhbnRpdGF0aXZlXC1jaGFuZ2U7CivogJDnhakgPCBwYXRpZW50XC1cKGFkamVjdGl2ZVwpOwor5LiZ57a4IDwgcG9seXByb3B5bGVuZVwtZmlicmU7CivkuozljYHlha3omZ8gPCAyNnRoXC1kYXlcLW9mXC1hXC1tb250aDsKK+atpemAsuWItiA8IHN0ZXBcLWJ5XC1zdGVwXC1zeXN0ZW07CivliY3omIfoga8gPCBmb3JtZXJcLXNvdmlldFwtdW5pb247CivkuI3lnKjmhI8gPCBwYXlcLW5vXC1hdHRlbnRpb25cLXRvOwor5rG66K2wIDwgXChwYXNzXC1hXClcLXJlc29sdXRpb247CivpjK/lrZcgPCBpbmNvcnJlY3RcLWNoYXJhY3RlcjsKK+S4reWci+eVtuWxgCA8IGNoaW5lc2VcLWF1dGhvcml0aWVzOwor5Ly05ZSxIDwgdm9jYWxcLWFjY29tcGFuaW1lbnQ7CivorZjosqggPCB0b1wta25vd1wtd2hhdCcnc1wtd2hhdDsKK+eon+aApyA8IG5hdHVyYWxcLWRpc3Bvc2l0aW9uOwor6aCQ57+SIDwgdG9cLXByZXBhcmVcLWFcLWxlc3NvbjsKK+WQiOaDheWQiOeQhiA8IHJlYXNvbmFibGVcLWFuZFwtZmFpcjsKK+a1gea0viA8IHNjaG9vbFwtXChvZlwtdGhvdWdodFwpOwor55m+5L6d55m+6aCGIDwgZG9jaWxlXC1hbmRcLW9iZWRpZW50Owor5Y2K6Ieq6ICV6L6yIDwgc2VtaVwtdGVuYW50XC1wZWFzYW50Owor5ZOA5oaQIDwgZmVlbFwtY29tcGFzc2lvblwtZm9yOwor5Y+N5b2I5bCO5b2IIDwgYW50aW1pc3NpbGVcLW1pc3NpbGU7CivosqHlr7YgPCBtb25leVwtYW5kXC12YWx1YWJsZXM7CivnlJ/nlKLoqK3mlr0gPCBwcm9kdWN0aW9uXC1mYWNpbGl0eTsKK+iRoeiQhOeJmeS6uiA8IHBvcnR1Z3Vlc2VcLVwocGVyc29uXCk7CivkuovlrpwgPCBcKG1ha2VcKVwtYXJyYW5nZW1lbnRzOwor5pWX6aGeIDwgc2N1bVwtb2ZcLWFcLWNvbW11bml0eTsKK+S4jee1leWmgue4tyA8IGhhbmdpbmdcLWJ5XC1hXC10aHJlYWQ7Civml5fooo0gPCBjaGluZXNlXC1zdHlsZVwtZHJlc3M7CivplbfmnJ/nqanlrprmgKcgPCBsb25nXC10ZXJtXC1zdGFiaWxpdHk7CivmioDooZPnn6XorZggPCB0ZWNobmljYWxcLWtub3dsZWRnZTsKK+W+kOihjCA8IHdhbGtcLXNsb3dseVwsXC1zdHJvbGw7Civol4/ml48gPCB0aWJldGFuXC1uYXRpb25hbGl0eTsKK+aok+Wuh+iHquWLleWMliA8IGJ1aWxkaW5nXC1hdXRvbWF0aW9uOwor5aSW5a2r5aWzIDwgZGF1Z2h0ZXInJ3NcLWRhdWdodGVyOwor5Yaw6YaL6YW4IDwgZ2xhY2lhbFwtYWNldGljXC1hY2lkOwor576O5ZyL6LuN5Lq6IDwgYW1lcmljYW5cLXNlcnZpY2VtYW47CivpmL/mr5Topb/lsLzkup7kurogPCBhYnlzc2luaWFuXC1cKHBlcnNvblwpOwor5raI54KO6JelIDwgYW50aWJpb3RpY1wtbWVkaWNpbmU7CivnhafpoacgPCB0YWtlXC1cKGdvb2RcKVwtY2FyZVwtb2Y7Civlp5Tlk6HplbcgPCBoZWFkXC1vZlwtYVwtY29tbWl0dGVlOwor6KaW56qX5Yqg6YCf5ZmoIDwgd2luZG93c1wtYWNjZWxhcmF0b3I7CivorpPmraUgPCBcKG1ha2VcLWFcKVwtY29uY2Vzc2lvbjsKK+mCiumBoCA8IGZhclwtZnJvbVwtdGhlXC1jZW50ZXI7Civoj6/niL7ooZfml6XloLEgPCB3YWxsXC1zdHJlZXRcLWpvdXJuYWw7Civmk7rpl4ogPCBwYXJhZGVcLW9uZScnc1wtd2VhbHRoOwor5oOF5aCx5bGAIDwgaW50ZWxsaWdlbmNlXC1hZ2VuY3k7CivmmbTmnJcgPCBzdW5ueVwtYW5kXC1jbG91ZGxlc3M7CivmgrLlo68gPCBzb2xlbW5cLWFuZFwtc3RpcnJpbmc7CivlnIvpmpvosr/mmJMgPCBpbnRlcm5hdGlvbmFsXC10cmFkZTsKK+e9t+W4giA8IHNob3BrZWVwZXInJ3NcLXN0cmlrZTsKK+S4jeWmqCA8IHRoZXJlXC1pc1wtbm9cLWhhcm1cLWluOwor5Lq66YCg6Kqe6KiAIDwgYXJ0aWZpY2lhbFwtbGFuZ3VhZ2U7Civkup7lpKrntpPlkIjntYTnuZQgPCBhcGVjXC1cKG9yZ2FuaXphdGlvblwpOwor5Li55Y+DIDwgc2FsdmlhXC1taWx0aW9ycmhpemE7Civpm7bokL0gPCB3aXRoZXJlZFwtYW5kXC1mYWxsZW47CivljIXouqvlt6UgPCBpbmRlbnR1cmVkXC1sYWJvdXJlcjsKK+W+l+efpSA8IFwoZmluZFwtb3V0XC1hbmRcKVwta25vdzsKK+iuiuaVhSA8IGFuXC11bmZvcmVzZWVuXC1ldmVudDsKK+S4jeaVl+S5i+WcsCA8IGludmluY2libGVcLXBvc2l0aW9uOwor5oGQ5oCVIDwgXChpJydtXClcLWFmcmFpZFwtXCh0aGF0XCk7Civoh6rouqvliKnnm4ogPCBvbmUnJ3NcLW93blwtaW50ZXJlc3RzOwor5bug6KaPIDwgZmFjdG9yeVwtcmVndWxhdGlvbnM7CivpoJDlrpogPCBzY2hlZHVsZVwtaW5cLWFkdmFuY2U7CivkuI3lh6EgPCBvdXRcLW9mXC10aGVcLW9yZGluYXJ5Owor56u254it55Si5ZOBIDwgY29tcGV0aXRpdmVcLXByb2R1Y3Q7CivmlZfnuL4gPCBiZVwtdXR0ZXJseVwtZGVmZWF0ZWQ7CivmmrTliKkgPCBzdWRkZW5cLWh1Z2VcLXByb2ZpdHM7CivpnZ7moLjlnIvlrrYgPCBub25cLW51Y2xlYXJcLWNvdW50cnk7CivnvarlkI0gPCBhXC1cKGNyaW1pbmFsXClcLWNoYXJnZTsKK+S4jeS5jyA8IHRoZXJlXC1pc1wtbm9cLWxhY2tcLW9mOwor5ZCI5ZCMIDwgXChidXNpbmVzc1wpXC1jb250cmFjdDsKK+WMl+S6rOS6uiA8IHBlcnNvblwtZnJvbVwtYmVpamluZzsKK+awo+WAmeeLgOazgSA8IGNsaW1hdGljXC1jb25kaXRpb25zOwor546WIDwgYmxhY2tcLWNvbG9yZWRcLWphZGU7Civlk6ogPCB3aGljaFw/XC13aGVyZVw/XC1ob3dcPzsKK+eJsiA8IHNhY3JpZmljaWFsXC1hbmltYWw7CivmvKIgPCB0aGVcLWNoaW5lc2VcLXBlb3BsZTsKK+a8lSA8IHRyYW5zcG9ydFwtYnlcLXdhdGVyOwor6Zi0IDwgJydmZW1hbGUnJ1wtcHJpbmNpcGxlOwor5LuZIDwgdGFvaXN0XC1zdXBlclwtYmVpbmc7CivpqbsgPCB0b1wtYmVcLXN0YXRpb25lZFwtYXQ7Civoha4gPCBsb3dlclwtcGFydFwtb2ZcLWZhY2U7Civmi5IgPCB3YXJkXC1vZmZcLXdpdGhcLWhhbmQ7CivmoYIgPCBjYXNzaWFcLW9yXC1jaW5uYW1vbjsKK+actSA8IGNsdXN0ZXJcLW9mXC1mbG93ZXJzOwor5pu5IDwgbWluaXN0cnlcLW9mZmljaWFsczsKK+e9jiA8IGFuXC1lYXJ0aGVud2FyZVwtamFyOwor5Li4IDwgc21hbGxcLXJvdW5kXC1vYmplY3Q7Civnn6kgPCBjYXJwZW50ZXInJ3NcLXNxdWFyZTsKK+iFiiA8IHllYXJcLWVuZFwtc2FjcmlmaWNlOwor6b6fIDwgdHVydGxlXC1vclwtdG9ydG9pc2U7CivpgrggPCBvZmZpY2lhbFwtcmVzaWRlbmNlOwor5L6DIDwgdXByaWdodFwtYW5kXC1zdHJvbmc7CivpgoIgPCB1bmV4cGVjdGVkXC1tZWV0aW5nOwor5oCvIDwgbGFja2luZ1wtaW5cLWNvdXJhZ2U7CivnlLggPCBzdWJ1cmJzXC1vZlwtY2FwaXRhbDsKK+aNniA8IHNjb29wXC1vdXRcLW9mXC13YXRlcjsKK+aJmyA8IGNhcnJ5XC1vblwtc2hvdWxkZXJzOwor6JmUIDwgYWN0XC13aXRoXC1yZXZlcmVuY2U7CivpnJYgPCBsb25nXC1zcGVsbFwtb2ZcLXJhaW47Civpn6cgPCBzdHJvbmdcLWFuZFwtcGxpYWJsZTsKK+eRviA8IGJyaWxsaWFuY2VcLW9mXC1nZW1zOwor5qGUIDwgY2hpbmVzZVwtYmVsbGZsb3dlcjsKK+m4syA8IG1hbGVcLW1hbmRhcmluXC1kdWNrOwor6ZKXIDwgb3JuYW1lbnRhbFwtaGFpcnBpbjsKK+W3hSA8IHN1bW1pdFwtb2ZcLW1vdW50YWluOwor5qioIDwgb3NtYW50aHVzXC1mcmFncmFuczsKK+igoSA8IHdvb2RcLWJvcmluZ1wtaW5zZWN0Owor6LmCIDwgdHJhbXBsZVwtdW5kZXJcLWZvb3Q7CivpqqUgPCB0aG9yb3VnaGJyZWRcLWhvcnNlOwor5ZSBIDwgZXhwcmVzc1wtY29uZG9sZW5jZTsKK+mqhSA8IGFuXC1leGNlbGxlbnRcLWhvcnNlOwor56KJIDwgcm9vbVwtbWFkZVwtb2ZcLXN0b25lOwor55afIDwgaW50ZXJtaXR0ZW50XC1mZXZlcjsKK+e6oyA8IG5hbWVcLW9mXC1hblwtZW1wZXJvcjsKK+ejrCA8IG11c2ljYWxcLWluc3RydW1lbnQ7CivniL8gPCBoYWxmXC1vZlwtdHJlZVwtdHJ1bms7Civml44gPCBmbHV0dGVyaW5nXC1vZlwtZmxhZzsKK+WklCA8IG9uZVwtbGVnZ2VkXC1tb25zdGVyOwor5q6NIDwgdG9cLXN0YXJ2ZVwtdG9cLWRlYXRoOwor6aqKIDwgYVwtcHVyZVwtYmxhY2tcLWhvcnNlOwor5rmOIDwgZmx1c2hlZFwtd2l0aFwtZHJpbms7CivllrUgPCB0aGVcLW1ld1wtb2ZcLXRoZVwtY2F0Owor54SZIDwgZHJ5XC1vdmVyXC1zbG93XC1maXJlOwor57u+IDwgdG9cLXN0cmluZ1wtdG9nZXRoZXI7CivnnKYgPCBjb3JuZXJcLW9mXC10aGVcLWV5ZXM7CivnkYEgPCBmaW5lXC1waWVjZVwtb2ZcLWphZGU7CivnsrMgPCBub25cLWdsdXRpbm91c1wtcmljZTsKK+mkriA8IGFcLWxlZ2VuZGFyeVwtYW5pbWFsOwor5rGKIDwgYVwtYnJhbmNoaW5nXC1zdHJlYW07CivnvIMgPCBsaWdodFwteWVsbG93XC1jb2xvcjsKK+aqqSA8IHRoZVwtYm9sZVwtb2ZcLWFcLXRyZWU7CivlpYEgPCBsYWR5JydzXC12YW5pdHlcLWNhc2U7CivmpbggPCBtYWxsb3R1c1wtamFwb25pY3VzOwor6aq6IDwgdGlwXC1vZlwtYVwtbG9uZ1wtYm9uZTsKK+iXvyA8IGxvcGhhbnRodXNcLXJ1Z29zdXM7CivmqL4gPCB0aGVcLXNoYWRlXC1vZlwtdHJlZXM7CivphaQgPCB0b1wtZGVhbFwtaW5cLXNwaXJpdHM7Civoh4wgPCBkcm9wc2ljYWxcLXN3ZWxsaW5nOwor6LerIDwgc291bmRcLW9mXC1mb290c3RlcHM7Civntq4gPCBlbWJyb2lkZXJlZFwtYmFubmVyOwor6KezIDwgYW5cLWFuY2llbnRcLW1lYXN1cmU7CivmnYwgPCB0aGVcLXN0dW1wXC1mXC1hXC10cmVlOwor5bWrIDwgYVwtaGlsbFwtaW5cLXNoYW50dW5nOwor5pOXIDwgdG9cLWJlYXRcLXRoZVwtYnJlYXN0Owor6ISUIDwgc21hbGxcLWx1bXBcLW9mXC1tZWF0Owor6YaFIDwgdW5zdHJhaW5lZFwtc3Bpcml0czsKK+e+sCA8IGNhcmJvbnlsXC1cKHJhZGljYWxcKTsKK+ibuCA8IGxvbmdcLWxlZ2dlZFwtc3BpZGVyOwor556AIDwgdG9cLWxvb2tcLWF0XC1jbG9zZWx5Owor5q6zIDwgbmFtZVwtb2ZcLW9sZFwtd2VhcG9uOwor5bSeIDwgbW91bnRhaW5cLWluXC1zaGFueGk7CivlnrIgPCBoaWdoXC1hbmRcLWRyeVwtcGxhY2U7Civomb8gPCBhXC1raW5kXC1vZlwtc2NvcnBpb247CivnlrMgPCBjaGlsZGhvb2RcLWRpc2Vhc2VzOwor572+IDwgYVwtbGFyZ2VcLXNxdWFyZVwtbmV0Owor542sIDwgYVwtZmFidWxvdXNcLW1vbnN0ZXI7CivosqDosqzku7sgPCByZXNwb25zaWJpbGl0eVwtZm9yOwor5bmr6L6mIDwgYXNzaXN0XC1pblwtbWFuYWdpbmc7Civphazmh4kgPCBzb2NpYWxcLWludGVyYWN0aW9uOwor54Sh6KuWIDwgbm9cLW1hdHRlclwtd2hhdFx8aG93Owor5Y6f5a6aIDwgb3JpZ2luYWxseVwtcGxhbm5lZDsKK+mAmuihjCA8IGxpY2VuY2VcLVwoY29tcHV0ZXJcKTsKK+eSsOW9oue1kOaniyA8IHJpbmdcLWNvbmZpZ3VyYXRpb247Civlj7jku6QgPCBjb21tYW5kaW5nXC1vZmZpY2VyOwor57O+6ZuGIDwgdG9cLWdhdGhlclwtdG9nZXRoZXI7CivpgIHooYwgPCB0b1wtc2VlXC1zb21lb25lXC1vZmY7Civopb/nj63niZnoqp4gPCBzcGFuaXNoXC1cKGxhbmd1YWdlXCk7CivpgZXntIQgPCB0b1wtYnJlYWtcLWFcLXByb21pc2U7CivljbHlsYAgPCBwZXJpbG91c1wtc2l0dWF0aW9uOwor5LiA6Iis5L6G6KqqIDwgZ2VuZXJhbGx5XC1zcGVha2luZzsKK+i7n+S7tumWi+eZvOS6uuWToSA8IHNvZnR3YXJlXC1kZXZlbG9wZXI7CivmkqXomZ8gPCBkaWFsXC1cKGFcLXRlbGVwaG9uZVwpOwor5ZyL5rCR6buo6LuN6ZqKIDwgbmF0aW9uYWxpc3RcLWZvcmNlczsKK+mmluiFpuacg+aZpCA8IGxlYWRlcnNoaXBcLW1lZXRpbmc7Civororkv64gPCBiZWNvbWVcLXJldmlzaW9uaXN0Owor6YGV56ugIDwgdG9cLWJyZWFrXC10aGVcLXJ1bGVzOwor6YeN6KaB5ZWP6aGMIDwgYW5cLWltcG9ydGFudFwtaXNzdWU7CivntrLnrqEgPCBuZXR3b3JrXC1tYW5hZ2VtZW50Owor6JKZ5paHIDwgbW9uZ29saWFuXC1sYW5ndWFnZTsKK+aAp+S6pCA8IHNleHVhbFwtaW50ZXJjb3Vyc2U7CivkuK3lsbHoo50gPCBjaGluZXNlXC10dW5pY1wtc3VpdDsKK+e3rOeUuOiqniA8IGJ1cm1lc2VcLVwobGFuZ3VhZ2VcKTsKK+aUv+ayu+eKryA8IHBvbGl0aWNhbFwtcHJpc29uZXI7CivlubTku6XkvoYgPCBzaW5jZVwtdGhlXC15ZWFyXC1cLlwuXC47CivmlrDoj6/npL4gPCB4aW5odWFcLW5ld3NcLWFnZW5jeTsKK+S4jeS4reeUqCA8IHVuZml0XC1mb3JcLWFueXRoaW5nOwor5LiA5bCP5pmC5Lul5b6MIDwgYVwtc2hvcnRcLXRpbWVcLWxhdGVyOwor6aCY5YWI5Zyw5L2NIDwgbGVhZFwoaW5nXClcLXBvc2l0aW9uOwor6YCy5LiA5q2lIDwgXChvbmVcLXN0ZXBcKVwtZnVydGhlcjsKK+eJqeWDuSA8IFwoY29tbW9kaXR5XClcLXByaWNlczsKK+S/oeaBr+ezu+e1sSA8IGluZm9ybWF0aW9uXC1zeXN0ZW07CivlvozlpKkgPCBkYXlcLWFmdGVyXC10b21vcnJvdzsKK+aPkOS+m+WVhiA8IHByb3ZpZGVyXC1cKGNvbXBhbnlcKTsKK+WkquW5syA8IHBlYWNlXC1hbmRcLXNlY3VyaXR5Owor55+a5pybIDwgdG9cLWxvb2tcLWZvcndhcmRcLXRvOwor5Y2U5YqpIDwgcHJvdmlkZVwtYXNzaXN0YW5jZTsKK+aOoemiqCA8IGNvbGxlY3RcLWZvbGtcLXNvbmdzOwor56iu5peP5riF5rSXIDwgXCJldGhuaWNcLWNsZWFuc2luZ1wiOwor5o+P6YeRIDwgdG9cLW91dGxpbmVcLWluXC1nb2xkOwor5Yqp5pWZIDwgdGVhY2hpbmdcLWFzc2lzdGFudDsKK+Wkq+WppiA8IGFcLVwobWFycmllZFwpXC1jb3VwbGU7CivkuZLkuZPnkIPmqq8gPCB0YWJsZVwtdGVubmlzXC10YWJsZTsKK+iLseiqniA8IGVuZ2xpc2hcLVwobGFuZ3VhZ2VcKTsKK+mBi+awoyA8IGx1Y2tcLVwoZ29vZFwtb3JcLWJhZFwpOwor6Z2e5bi45Zq05Y6yIDwgdG9cLXB1bmlzaFwtc2V2ZXJlbHk7Civljp/omIfoga8gPCBmb21lclwtc292aWV0XC11bmlvbjsKK+aOoemMhCA8IGNvbGxlY3RcLWFuZFwtcmVjb3JkOwor54aK5o6MIDwgYmVhclwtcGF3XC1cKGFzXC1mb29kXCk7Civlhafpg6jntZDmp4sgPCBpbnRlcm5hbFwtc3RydWN1dHJlOwor5paw5YW1IDwgbmV3XC1cKGFybXlcKVwtcmVjcnVpdDsKK+aVuOaTmumAmuS/oSA8IGRhdGFcLWNvbW11bmljYXRpb247CivlpKnlronploAgPCB0aWFuYW5tZW5cLVwoc3F1YXJlXCk7CivpnZ7luLjmhJ/orJ0gPCBleHRyZW1lbHlcLWdyYXRlZnVsOwor6b6WIDwgZmxpZ2h0XC1vZlwtYVwtZHJhZ29uOwor5paD5ZG9IDwgbWVldFwtdmlvbGVudFwtZGVhdGg7CivpuJwgPCBhXC1zcGVjaWVzXC1vZlwtbXluYWg7Civpt70gPCBvcmllbnRhbFwtYnVsbGZpbmNoOwor5YWL6ZqG5oqA6KGTIDwgY2xvbmluZ1wtdGVjaG5vbG9neTsKK+mbu+WtkOe2sue1oSA8IGVsZWN0cm9uaWNcLW5ldHdvcms7CivptJcgPCBhbGNlZG9cLWJlbmdhbGVuc2lzOwor6bG1IDwgaHlwb3JoYW1wdXNcLXNhanVyaTsKK+WkseS6iyA8IFwoaGF2ZVwtYW5cKVwtYWNjaWRlbnQ7CivkuI3lj5fnkIYgPCByZWplY3RcLWFcLWNvbXBsYWludDsKK+msoCA8IHRvXC1tYWtlXC1hXC10b3BcLWtub3Q7CivnmbzpgZTlnIsgPCBkZXZlbG9waW5nXC1jb3VudHJ5Owor55m96bq15pu455SfIDwgcGFsZVwtZmFjZWRcLXNjaG9sYXI7Civot5HorabloLEgPCB0b1wtcnVuXC1mb3JcLXNoZWx0ZXI7CivppLwgPCBzYWNyaWZpY2lhbFwtdmljdGltOwor6Zu75L+hIDwgdGVsZWNvbW11bmljYXRpb25zOwor5o2o6LqrIDwgdG9cLWdpdmVcLW9uZScnc1wtbGlmZTsKK+mglCA8IGdvb2RcLWFuZFwtYmVhdXRpZnVsOwor6Iqd6JitIDwgaXJpc2VzXC1hbmRcLW9yY2hpZHM7CivosqHli5nou5/ku7YgPCBmaW5hbmNpYWxcLXNvZnR3YXJlOwor5pS55Y+jIDwgdG9cLWNvcnJlY3RcLW9uZXNlbGY7Civnmb3plovmsLQgPCBwbGFpblwtYm9pbGVkXC13YXRlcjsKK+aUv+WLmSA8IGdvdmVybm1lbnRcLWFmZmFpcnM7Civlhafnp5EgPCBtZWRpY2FsXC1kZXBhcnRtZW50Owor5YWD57SgIDwgXChjaGVtaWNhbFwpXC1lbGVtZW50Owor5Yqg5YWlIDwgdG9cLWJlY29tZVwtYVwtbWVtYmVyOwor5oub5b6F5pyDIDwgXChwcmVzc1wpXC1jb25mZXJlbmNlOwor6YG45Y2AIDwgZWxlY3RvcmFsXC1kaXN0cmljdDsKK+mHkiA8IGthbmd4aVwtcmFkaWNhbFwtMTY3Owor6YSuIDwgYW5jaWVudFwtcGxhY2VcLW5hbWU7CivlnJ/okZcgPCBuYXRpdmVcLFwtYWJvcmlnaW5hbDsKK+aHt+S/hOaYjiA8IHd5b21pbmdcLVwodXNcLXN0YXRlXCk7CivljaHmi4nlpYcgPCBrYXJhY2hpXC1cKHBha2lzdGFuXCk7Civmk43lroggPCBwZXJzb25hbFwtaW50ZWdyaXR5Owor6L2ZIDwgcmluZ3NcLW9uXC10aGVcLXlva2VzOwor5YKy6KaWIDwgdHVyblwtdXBcLW9uZScnc1wtbm9zZTsKK+i7sCA8IGFcLXJvd1wtb2ZcLWNhcnJpYWdlczsKK+WNiuimj+euoSA8IHNlbWljaXJjdWxhclwtY2FuYWw7Civppqzkvoboqp4gPCBtYWxheXNpYW5cLWxhbmd1YWdlOwor5Y+k5YW46Kqe6KiAIDwgY2xhc3NpY2FsXC1sYW5ndWFnZTsKK+iwvSA8IGFcLW1vdXRoXC1vclwtb3BlbmluZzsKK+iOq+WmgiA8IGl0XC13b3VsZFwtYmVcLWJldHRlcjsKK+e1kOW4syA8IHRvXC1zZXR0bGVcLWFjY291bnRzOwor5Zub6JmVIDwgYWxsXC1vdmVyXC10aGVcLXBsYWNlOwor5q+U5LiN5LiKIDwgY2FuJyd0XC1jb21wYXJlXC13aXRoOwor57ay6Lev6YCj5o6l5bGkIDwgbmV0d29ya1wtbGlua1wtbGF5ZXI7CivoqIEgPCBrYW5neGlcLXJhZGljYWxcLTE0OTsKK+iltSA8IGFcLXBsZWF0XC1pblwtYVwtc2tpcnQ7CivopLAgPCBsaWZ0XC11cFwtdGhlXC1za2lydHM7CivlnabnjocgPCBmcmFua1wtXChkaXNjdXNzaW9uXCk7CivpgYvkvZwgPCB0aHJlYWRcLVwoY29tcHV0aW5nXCk7CivlpJrnsbPlsLzliqDlhbHlkozlnIsgPCBkb21pbmljYW5cLXJlcHVibGljOwor6YCx5YiKIDwgd2Vla2x5XC1wdWJsaWNhdGlvbjsKK+iauSA8IGV1bG90YVwtcGVsaW9tcGhhbGE7CivolrcgPCBlbHNob3RyaWFcLXBhbHRyaW5pOwor5L+d6aeVIDwgZXNjb3J0XC10aGVcLWVtcGVyb3I7CivolbogPCBob3V0dHV5bmlhXC1jb3JkYXRhOwor6JO0IDwgZWRpYmxlXC13YXRlclwtcGxhbnQ7CivlhanlgIvkuK3lnIsgPCB0d29cLWNoaW5hXC1cKHBvbGljeVwpOwor6JG0IDwgcGh5c2FsaXNcLWFsa2VrZW5naTsKK+WFseaciSA8IHRvXC1oYXZlXC1hbHRvZ2V0aGVyOwor5aCx5ZacIDwgYW5ub3VuY2VcLWdvb2RcLW5ld3M7Civot5Hpm7sgPCBlbGVjdHJpY2FsXC1sZWFrYWdlOwor6I2FIDwgYW5zd2VyXDpcLXNtYWxsXC1iZWFuOwor6IyWIDwgYWxsaXVtXC12aWN0b3JpYWxpczsKK+Wci+mYsumDqCA8IGRlZmVuc2VcLWRlcGFydG1lbnQ7CivoiqMgPCBtZWRpY2luYWxcLXBsYW50YWdvOwor5pKl5Yi6IDwgc3BsYXNoXC1cKG9mXC1hXC1maXNoXCk7Civmi5zoposgPCBwYXlcLWFcLWZvcm1hbFwtdmlzaXQ7CivlpJbkvobmipXos4cgPCBmb3JlaWduXC1pbnZlc3RtZW50Owor6LaV5LiN5LiKIDwgY2FuJyd0XC1rZWVwXC11cFwtd2l0aDsKK+e/ryA8IGdsaXN0ZW5pbmdcLXBsdW1hZ2U7Civnv5YgPCBrc2NcLWV4dGVuc2lvblwtMzEwODsKK+WIneS4rSA8IGp1bmlvclwtaGlnaFwtc2Nob29sOwor576nIDwgY2FyYm94eWxcLVwocmFkaWNhbFwpOwor5Zyf6ICz5YW26KqeIDwgdHVya2lzaFwtXChsYW5ndWFnZVwpOwor5LiN5q2j5LmL6aKoIDwgdW5oZWFsdGh5XC10ZW5kZW5jeTsKK+aKhOmBkyA8IHRvXC10YWtlXC1hXC1zaG9ydGN1dDsKK+a8lOiqqiA8IFwoZGVsaXZlclwtYVwpXC1zcGVlY2g7CivopoHlnLAgPCBzdHJhdGVnaWNcLWxvY2F0aW9uOwor6L6m5aCxIDwgdG9cLXJ1blwtYVwtbmV3c3BhcGVyOwor6ZuG5oiQ6Zu76LevIDwgaW50ZWdyYXRlZFwtY2lyY3VpdDsKK+ezkiA8IGZvb2RcLWZvclwtYVwtam91cm5leTsKK+WHuuS7uyA8IHN0YXJ0XC1pblwtYVwtbmV3XC1qb2I7Civplonpl5zmlL/nrZYgPCBjbG9zZWRcLWRvb3JcLXBvbGljeTsKK+WFp+aDhSA8IGluc2lkZVwtaW5mb3JtYXRpb247Civmi7/kuLvmhI8gPCB0b1wtbWFrZVwtYVwtZGVjaXNpb247CivntrLntaHmioDooZMgPCBuZXR3b3JrXC10ZWNobm9sb2d5Owor5bi45aeU5pyDIDwgc3RhbmRpbmdcLWNvbW1pdHRlZTsKK+S4reWci+aUv+W6nCA8IGNoaW5lc2VcLWdvdmVybm1lbnQ7CivplovlsZUgPCBcKGJlZ2luXC10b1wpXC1kZXZlbG9wOwor5Luk54mM55Kw57ayIDwgdG9rZW5cLXJpbmdcLW5ldHdvcms7CivnmqogPCBsdXN0ZXJcLVwob2ZcLXBlYXJsc1wpOwor5aSn5piO6byO6byOIDwgYVwtZ3JhbmRcLXJlcHV0YXRpb247Civnl5wgPCBhXC1zY2FiYnlcLWJhbGRcLWhlYWQ7CivlpKflrbjnlJ8gPCB1bml2ZXJzaXR5XC1zdHVkZW50Owor55S/IDwgZmFybWluZ1wtcG9wdWxhdGlvbjsKK+iyv+aYk+e1hOe5lCA8IHRyYWRlXC1vcmdhbml6YXRpb247CivnlIsgPCBhXC1qYXJcLXdpdGhvdXRcLWVhcnM7CivnkKQgPCBqYWRlXC1vZlwtamFkZVwtYmVpbmc7CivnjpggPCBjb3VydFwtZHJlc3NcLWpld2VsczsKK+mBjeWcsOmWi+iKsSA8IGJsb3Nzb21cLWV2ZXJ5d2hlcmU7CivnjbMgPCBmaWVyY2VcLWRvZ1wtbG9va2luZzsKK+S/hOiqniA8IHJ1c3NpYW5cLVwobGFuZ3VhZ2VcKTsKK+WxseiFsyA8IGZvb3RcLW9mXC1hXC1tb3VudGFpbjsKK+eFjSA8IHRvXC1jb2xvdXJcLWJ5XC1zbW9rZTsKK+mrmOmAn+e2sue1oSA8IGhpZ2hcLXNwZWVkXC1uZXR3b3JrOwor54GlIDwgYVwtZ3JvdXBcLW9mXC1zcHJpbmdzOwor5bq35aWI54i+5aSn5a24IDwgY29ybmVsbFwtdW5pdmVyc2l0eTsKK+WFrOWPuCA8IFwoYnVzaW5lc3NcKVwtY29tcGFueTsKK+aLieelqCA8IGNhbXBhaWduXC1mb3JcLXZvdGVzOwor5omL6KGTIDwgc3VyZ2ljYWxcLW9wZXJhdGlvbjsKK+WFq+WNpiA8IHRoZVwtZWlnaHRcLWRpYWdyYW1zOwor54CP6Ka95ZmoIDwgYnJvd3NlclwtXChzb2Z0d2FyZVwpOwor6auU5rqrIDwgXChib2R5XClcLXRlbXBlcmF0dXJlOwor5pu46Z2i6Kix5Y+vIDwgd3JpdHRlblwtcGVybWlzc2lvbjsKK+azsiA8IGtpbmRcLW9mXC13aGl0ZVwtd2luZTsKK+S4lue0gOacqyA8IGVuZFwtb2ZcLXRoZVwtY2VudHVyeTsKK+awjSA8IGZpbmVcLXdvb2xsZW5cLWNsb3RoOwor5ryC56e7IDwgZHJpZnRcLVwoZWxlY3RyaWNhbFwpOwor6IGv5ZCI5YWs5aCxIDwgam9pbnRcLWFubm91bmNlbWVudDsKK+eglOeptuapn+aniyA8IHJlc2VhcmNoXC1pbnN0aXR1dGU7CivkvZvomK3oipLoqp4gPCBmbGVtaXNoXC1cKGxhbmd1YWdlXCk7CivlgZzmu68gPCBiZVwtYXRcLWFcLXN0YW5kc3RpbGw7CivlnIvmnIPorbDlk6EgPCBtZW1iZXJcLW9mXC1jb25ncmVzczsKK+acgOi/keW5vuW5tCA8IHRoZVwtbGFzdFwtZmV3XC15ZWFyczsKK+eyvuewoemWi+aUryA8IHRvXC1yZWR1Y2VcLXNwZW5kaW5nOwor5p+6IDwgYW5cLW9sZFwtbWFuJydzXC1zdGFmZjsKK+aduyA8IGxpZ3VzdHJ1bVwtc2luZW5lc2U7CivmnZkgPCBhXC10aW55XC13b29kZW5cLXBvc3Q7CivkuI3nva7lj6/lkKYgPCBkZWNsaW5lXC10b1wtY29tbWVudDsKK+i7jeWumCA8IFwobWlsaXRhcnlcKVwtb2ZmaWNlcjsKK+aYtyA8IHRvXC1mZWVkXC1hXC1wcmlzb25lcjsKK+aXvCA8IGdlbnRsZVwtYW5kXC1hZmZhYmxlOwor5aGe54i+57at5Lqe6KqeIDwgc2VyYmlhblwtXChsYW5ndWFnZVwpOwor5pOtIDwgdHJhcFwtY2F0Y2hcLWFuaW1hbHM7CivkuInop5LohbnluLYgPCBhdGhsZXRpY1wtc3VwcG9ydGVyOwor562G55u0IDwgcGVyZmVjdGx5XC1zdHJhaWdodDsKK+eUoueUnyA8IHRvXC1jb21lXC1pbnRvXC1iZWluZzsKK+mnkOiPryA8IHN0YXRpb25lZFwtaW5cLWNoaW5hOwor5pav55Om5biM6KOh6KqeIDwgc3dhaGlsaVwtXChsYW5ndWFnZVwpOwor5o6I5Y+XIDwgdG9cLWdpdmVcLWFuZFwtYWNjZXB0Owor55ar5oOFIDwgZXBpZGVtaWNcLXNpdHVhdGlvbjsKK+a3semAoCA8IGFkdmFuY2VkXC1cKHN0dWRpZXNcKTsKK+ihm+eUn+ioreWCmSA8IHNhbml0YXJ5XC1lcXVpcG1lbnQ7CivpgKDmiJDllY/poYwgPCB0b1wtY3JlYXRlXC1hblwtaXNzdWU7CivlvYQgPCBub2NrXC1hdFwtZW5kXC1vZlwtYm93Owor5o2o5ZG9IDwgdG9cLXJpc2tcLW9uZScnc1wtbGlmZTsKK+aTgeitt+iAhSA8IHN1cHBvcnRlclwtXChwZXJzb25cKTsKK+Wci+WLmeWNvyA8IHNlY3JldGFyeVwtb2ZcLXN0YXRlOwor5baoIDwgYmlnXC1yb2NreVwtbW91bnRhaW47Civoo4HkuKYgPCBjdXRcLWRvd25cLWFuZFwtbWVyZ2U7CivltZYgPCBuYW1lXC1vZlwtYVwtbW91bnRhaW47Civkvb/nr4AgPCBcKGRpcGxvbWF0aWNcKVwtZW52b3k7CivlnIvlrrbmqJnmupbnorwgPCBnYlwtXChndW9cLWJpYW9cKVwtY29kZTsKK+WNiui8qeWtkCA8IGhhbGZcLW9mXC1hXC1saWZldGltZTsKK+acrOWIneWtkOWNiOe3miA8IHRoZVwtZmlyc3RcLW1lcmlkaWFuOwor5a625bqt5raI6LK76ICFIDwgaG91c2Vob2xkXC1jb25zdW1lcjsKK+WjnCA8IGVhcnRoZW5cLWphclwtb3JcLWp1ZzsKK+iHs+WwkSA8IFwodG9cLXNheVwtdGhlXClcLWxlYXN0Owor5aKQIDwgdG9cLWJ1aWxkXC13aXRoXC1zb2lsOwor56uZ566h55CGIDwgc3RhdGlvblwtbWFuYWdlbWVudDsKK+iyt+izoyA8IGJ1eWluZ1wtYW5kXC1zZWxsaW5nOwor5ZmLIDwgdG9cLXN3YWxsb3dcLWhhc3RpbHk7CivmuKznuaogPCB0b1wtc3VydmV5XC1hbmRcLWRyYXc7Civog4zntIQgPCBicmVha1wtYW5cLWFncmVlbWVudDsKK+iJsuaDheWwj+iqqiA8IHBvcm5vZ3JhcGhpY1wtbm92ZWw7Civlk7AgPCBpbmNvaGVyZW50XC1jaGF0dGVyOwor6Iqs6Jit6KqeIDwgZmlubmlzaFwtXChsYW5ndWFnZVwpOwor6LK05aaD6YaJ6YWSIDwgdGhlXC1kcnVua2VuXC1iZWF1dHk7Civororms5XlhZIgPCB0cnlcLWRpZmZlcmVudFwtd2F5czsKK+a1t+epuui7jSA8IG5hdnlcLWFuZFwtYWlyXC1mb3JjZTsKK+mbu+WtkOS/oeeusSA8IGVsZWN0cm9uaWNcLW1haWxib3g7Civot6/lvpEgPCByb3V0ZVwtXChuZXR3b3JraW5nXCk7CivkvbcgPCB0b1wtYWN0XC1jb250cmFyeVwtdG87CivoiInkvosgPCB0b1wtZ2l2ZVwtYW5cLWV4YW1wbGU7CivmkpLlk4jmi4nku6XljZfpnZ7mtLIgPCBzdWJcLXNhaGFyYW5cLWFmcmljYTsKK+S5kSA8IHN0YW5kXC1zaWRlXC1ieVwtc2lkZTsKK+aJjeaZuiA8IGFiaWxpdHlcLWFuZFwtd2lzZG9tOwor5LajIDwgdG9cLWdyaW5kXC10aGVcLXRlZXRoOwor5LafIDwgdG9cLWduYXNoXC10aGVcLXRlZXRoOwor5LWVIDwgYVwtdmFyaWV0eW9mXC1taWxsZXQ7CivktLEgPCBjYWtlc1wtYW5kXC1iaXNjdWl0czsKK+SzqCA8IHRoZVwtZmVtYWxlXC1waG9lbml4Owor5LOUIDwgYVwtcGlnZW9uXC1saWtlXC1iaXJkOwor5LGzIDwgYVwta2luZFwtb2ZcLXN0dXJnZW9uOwor5LGjIDwgYVwtbG9uZ1wtbmFycm93XC1maXNoOwor5LCqIDwgbWlzY2hpZXZvdXNcLXNwaXJpdDsKK+SvsSA8IHRoZVwtaGFpclwtc3RhbmRzXC11cDsKK+SvjyA8IHRoZVwtc2hvdWxkZXJcLWJsYWRlOwor5K6lIDwgY29sb3JcLW9mXC10aGVcLWhvcnNlOwor57Sw6I+M5oiwIDwgYmlvbG9naWNhbFwtd2FyZmFyZTsKK+StsCA8IHN0cm9uZ1wtc3dlZXRcLXNtZWxsOwor5K2LIDwgdG9cLWVhdFwtdG9cLXRoZVwtZnVsbDsKK+StgyA8IHRvXC1lYXRcLXRvXC10aGVcLWZvb2w7CivkrLQgPCBmb2RkZXJcLWZvclwtYW5pbWFsczsKK+SspyA8IHJvdW5kXC1zaGFwZWRcLWNha2VzOwor5omT5ouzIDwgdG9cLWRvXC1zaGFkb3dib3hpbmc7CivohIjmrIIgPCBiZWF0aW5nXC1cKG9mXC1oZWFydFwpOwor5KuQIDwgdG9cLWJlbmRcLW9uZScnc1wtaGVhZDsKK+SqjCA8IGN1c2hpb25cLWZvclwtc2FkZGxlOwor5KiGIDwgYVwta2luZFwtb2ZcLXBoZWFzYW50Owor5Ke8IDwgdGhlXC10aGVcLXNub3dcLWdvb3NlOwor5KemIDwgbmFtZVwtb2ZcLWFcLWhpbGxzaWRlOwor5paw5Yqg5Z2h5Lq6IDwgc2luZ2Fwb3JlYW5cLXBlcnNvbjsKK+SmriA8IGRvb3JcLW9mXC10aGVcLWNlbnRlcjsKK+iHquS4uyA8IHRvXC1hY3RcLWZvclwtb25lc2VsZjsKK+SmkiA8IHRoZVwtZG9vclwtaXNcLWNsb3NlZDsKK+SmkCA8IHRoZVwtYm9sdFwtb2ZcLWFcLWRvb3I7CivmnJ/osqggPCBmdXR1cmVzXC1cKG9uXC1nb29kc1wpOwor5KWzIDwgYVwtY2hlbWljYWxcLWVsZW1lbnQ7CivkpZ4gPCB0b1wtY3V0XC13aXRoXC1zaGVhcnM7CivkpZ0gPCBkZXNwZXJhdGVcLWZpZ2h0aW5nOwor5L615oiqIDwgdG9cLWhhY2tcLVwoY29tcHV0ZXJcKTsKK+SjuiA8IGZpbHRyYXRlZFwtdGhlXC13aW5lOwor6aCt6auuIDwgaGFpclwtXChvblwtdGhlXC1oZWFkXCk7CivkoaAgPCBzdHJvbmdcLWFuZFwtZHVyYWJsZTsKK+ShmyA8IG5hbWVcLW9mXC1hXC1jYXJyaWFnZTsKK+SgpyA8IGhhcmRcLXRvXC1nb1wtZm9yd2FyZDsKK+SfnSA8IHRvXC13YWxrXC1yaWdodFwtaW50bzsKK+SdniA8IG5hbWVcLW9mXC1hXC1pbW1vcnRhbDsKK+SbiSA8IHRvXC1pbmR1Y2VcLWJ5XC13b3JkczsKK+SapyA8IGN1cnZlZFwtd2l0aFwtYW5nbGVzOwor5aSn5Yqb55m85bGVIDwgdmlnb3JvdXNcLWV4cGFuc2lvbjsKK+SZgyA8IHNsZWV2ZWxlc3NcLWNsb3RoZXM7Civos6rnlpEgPCBjYWxsXC1pbnRvXC1xdWVzdGlvbjsKK+SXuyA8IGFcLWtpbmRcLW9mXC1zZWFcLWNyYWI7Civkl6ggPCBsZXBzaW1hXC1zYWNjaGFyaW5hOwor5JejIDwgaW5zZWN0XC1vZlwtbXVsYmVycnk7CivmnI3li5nopo/nq6AgPCBzZXJ2aWNlXC1yZWd1bGF0aW9uOwor5JanIDwgYVwtcG9pc29ub3VzXC1pbnNlY3Q7CivklpMgPCBvZlwtYVwtd2Fsa2luZ1wtdGlnZXI7CivklaogPCB0aGVcLXdhdGVyXC1wbGFudGFpbjsKK+SUvCA8IHNvdW5kXC1vZlwtdGhlXC1ncmFzczsKK+SUgyA8IGNvcmRhdGVcLWhvdXR0dXluaWE7Civkk6ggPCBsb25nXC1uZWNrZWRcLWJvdHRsZTsKK+STliA8IGNuaWRpdW1cLW9mZmljaW5hbGU7Civkk4MgPCBtZWxhbmNob2x5XC1hbmRcLXNhZDsKK+SSnSA8IHJvb3RcLW9mXC10aGVcLXRoYXRjaDsKK+mmluasoSA8IGZvclwtdGhlXC1maXJzdFwtdGltZTsKK+SRmSA8IHB1dFwtb3V0XC10aGVcLXRvbmd1ZTsKK+SRhiA8IGZlZWxcLWxpa2VcLXZvbWl0aW5nOwor5Zyo5YKz6Ly46YGO56iL5LitIDwgd2hpbGVcLXRyYW5zbWl0dGluZzsKK+SQlCA8IG11c2NsZVwtb2ZcLXRoZVwtY2FsZjsKK+SOviA8IGJpZ1wtYW5kXC1yb3VuZFwtZXllczsKK+Wfn+WQjeacjeWLmeWZqCA8IGRvbWFpblwtbmFtZVwtc2VydmVyOwor5I60IDwgYVwtbGVnZW5kYXJ5XC1zcGlyaXQ7CivkjqogPCB0aGVcLXN0YWxrXC1vZlwtZ3JhaW47CivmooblrZAgPCB3YXRjaG1hbicnc1wtY2xhcHBlcjsKK+SOlCA8IGZpbmVcLWFuZFwtc29mdFwtaGFpcjsKK+SOjyA8IHlvdW5nXC1iaXJkc1wtZmx5aW5nOwor5rK56aSFIDwgZGVlcFwtZnJpZWRcLXBhbmNha2U7CivkjakgPCB0b1wtb2ZmZXJcLXByb3Zpc2lvbjsKK+SNoyA8IGFcLWtpbmRcLW9mXC1maXNoXC1uZXQ7CivkjI0gPCBmaW5lXC13b3ZlblwtcGF0dGVybjsKK+SMiSA8IHRoZVwtbGFyZ2VcLW9mXC1hXC1uZXQ7Civms4TpnLIgPCBsZWFrXC1cKGluZm9ybWF0aW9uXCk7Civki4ggPCB0b1wtYmluZFwtbG9vc2VcLWhlbXA7CivkiawgPCBjb2Fyc2VcLWJhbWJvb1wtbWF0czsKK+SIriA8IGFcLXdvdmVuXC1pbnN0cnVtZW50Owor5IezIDwgYVwtbWVtb3JhZHVtXC10YWJsZXQ7CivkhqogPCBjb2xvclwtb2ZcLXRoZVwtbGlnaHQ7CivkhqUgPCB0b1wtcGllcmNlXC10aHJvdWdoajsKK+SGkSA8IGFcLWxpdHRsZVwtcHJvdHJ1ZGVkOwor5oqV5YWlIDwgcHV0XC1pbnRvXC1vcGVyYXRpb247Civkhb0gPCBmcmFncmFuY2VcLW9yXC1hcm9tYTsKK+SFpyA8IGZpbmVcLXJpY2VcLXNlZWRsaW5nOwor5IWcIDwgdG9cLXN0b3JlXC11cFwtZ3JhaW5zOwor5ISaIDwgdG9cLXdvcnNoaXBcLXRoZVwtZ29kOwor5IOcIDwgYVwtZmluZVwtYmxhY2tcLXN0b25lOwor5IGKIDwgZGFya1wtYW5kXC1kZWVwXC1leWVkOwor5ICeIDwgd2l0aFwtaGVhdnlcLWV5ZWxpZHM7CivkgJcgPCB0b1wtbG9va1wtYXNrYW5jZVwtYXQ7CivmnpDnlpEgPCB0b1wtcmVzb2x2ZVwtYVwtZG91YnQ7Civjv4wgPCBsdW1wXC1pblwtdGhlXC10aHJvYXQ7Civnq63nm6HlhajlipsgPCB0b1wtc3BhcmVcLW5vXC1lZmZvcnQ7CivnkZ7lhbjoqp4gPCBzd2VkaXNoXC1cKGxhbmd1YWdlXCk7CivjvKMgPCBicmlja3NcLW9mXC10aGVcLXdlbGw7CivjvIcgPCBmaW5lXC1qYWRlXC1vclwtYWdhdGU7Civmtonlq4zkurogPCBcKGNyaW1pbmFsXClcLXN1c3BlY3Q7Civju5cgPCBhXC1zdHJpbmdcLW9mXC1wZWFybHM7Civju4ogPCBhXC1yZWRcLWNvbG9yZWRcLWphZGU7Civju4UgPCBqYWRlXC1kZWNvcmF0ZWRcLWNhcDsKK+iXj+iqniA8IHRpYmV0YW5cLVwobGFuZ3VhZ2VcKTsKK+S4jeaKmOS4jeaJoyA8IGFcLWh1bmRyZWRcLXBlclwtY2VudDsKK+O6pyA8IGFcLXdoaXRlXC15ZWxsb3dcLWRvZzsKK+O4vSA8IGFcLXR3b1wteWVhcnNcLW9sZFwtb3g7CivmnKjogLMgPCBlZGlibGVcLXRyZWVcLWZ1bmd1czsKK+O4iCA8IHNjb3JjaGVkXC1vclwtYnVybmVkOwor47ezIDwgY29sb3JcLW9mXC10aGVcLWZsYW1lOwor5ZaY5oGvIDwgdG9cLWdhc3BcLWZvclwtYnJlYXRoOwor5qOE5LiWIDwgdG9cLWxlYXZlXC10aGlzXC13b3JkOwor47eiIDwgYnVuZGxlXC1vZlwtY2hhcmNvYWw7Civjt6AgPCBhXC13aWxsXC1vJydcLXRoZVwtd2lzcDsKK+O1kyA8IHRoZVwtd2F0ZXJcLWlzXC1jbGVhcjsKK+O0viA8IHN3ZWxsaW5nXC1vclwtcmlzaW5nOwor5L215o2y5qmfIDwgcmliYm9uXC1sYXBcLW1hY2hpbmU7CivliKXli5XpmoogPCBzcGVjaWFsXC1kZXRhY2htZW50Owor47OCIDwgdG9cLWZvbGxvd1wtYVwtY291cnNlOwor47KhIDwgdGhpY2tcLWNvYXRcLW9mXC1oYWlyOwor47KXIDwgdG9cLXNtb290aFwtdGhlXC1oYWlyOwor5oSb56ixIDwgdGVybVwtb2ZcLWVuZGVhcm1lbnQ7Civnp5HnoJTmqKPmqZ8gPCByZXNlYXJjaFwtcHJvdG90eXBlOwor46+2IDwgdGhlXC1jb2lyXC1wYWxtXC10cmVlOwor46+yIDwgYVwtd29vZGVuXC1mcmFtZXdvcms7Civjr5sgPCBnb3VyZFwtc2hhcGVkXC1kYXRlczsKK+OuuyA8IHRvXC1zY3JhdGNoXC1saWdodGx5Owor5Y2A5Z+f57ay6LevIDwgbG9jYWxcLWFyZWFcLW5ldHdvcms7Civjro0gPCBhbWVtb3JhbmR1bVwtdGFibGV0Owor462oIDwgdGhlXC1jb2NvYVwtbnV0XC1wYWxtOwor462dIDwgbmFtZVwtb2ZcLWFcLXBhdmlsaW9uOwor55m86YCB5Yqf546HIDwgdHJhbnNtaXNzaW9uXC1wb3dlcjsKK+OstCA8IHRoZVwtbW9vblwtaXNcLWRpbW1lZDsKK+OskiA8IHRoZVwtc3VuXC1hcmVcLWRpbW1lZDsKK+OsjiA8IG1vdGVzXC1pblwtYVwtc3VuYmVhbTsKK+aUv+W6nOitpuWRiiA8IGdvdmVybm1lbnRcLXdhcm5pbmc7Civjq6YgPCBvZlwtbG9va1wtb2ZcLXRoZVwtc3VuOwor46q4IDwgdG9cLWZpbGxcLWFcLWN1cFwtd2l0aDsKK+OpgyA8IHRvXC10YWtlXC1vclwtY2FwdHVyZTsKK+OovSA8IHRvXC1jdXRcLW9yXC1yaXBcLW9wZW47CivjqKEgPCB0b1wtcHVzaFwtd2l0aFwtaGFuZHM7CivjqJwgPCB0b1wtaGVscFwtZWFjaFwtb3RoZXI7CivmoLjog73mioDooZMgPCBudWNsZWFyXC10ZWNobm9sb2d5Owor5bm06LyV5YyWIDwgbWFrZVwtbW9yZVwteW91dGhmdWw7CivlsIjlk6EgPCBhc3Npc3RhbnRcLWRpcmVjdG9yOwor46W4IDwgdG9cLXN5bXBhdGhpemVcLXdpdGg7CivjpaggPCB1bmhhcHB5XC1kaXNwbGVhc2VkOwor46SqIDwgdG9cLWZpbmRcLWZhdWx0XC13aXRoOwor46OMIDwgdG9cLWpvaW5cLXR3b1wtdGhpbmdzOwor46GvIDwgd2FsbFwtb2ZcLWFcLWJ1aWxkaW5nOwor6aCT6LazIDwgc3RhbXBcLVwob25lJydzXC1mZWV0XCk7CivliqDpgJ/lmaggPCBhY2NlbGVyYXRvclwtXChjb21wXCk7CivjmLMgPCBhXC1oaWxsb2NrXC1vclwtbW91bmQ7CivjmLEgPCB0b1wtZmFsbFwtaW50b1wtcnVpbnM7CivmhI/lpKfliKnoqp4gPCBpdGFsaWFuXC1cKGxhbmd1YWdlXCk7CivjmJwgPCBhXC1raW5kXC1vZlwtc2lsa3dvcm07CivjloUgPCBzb3VuZFwtb2ZcLWFcLXdoaXN0bGU7CivjloMgPCB0b1wtcm9hclwtb2ZcLWFuaW1hbHM7CivjlKIgPCB0b1wtYnJlYWtcLXNvbWV0aGluZzsKK+S4jeetieiZnyA8IHNpZ25cLW9mXC1pbmVxdWFsaXR5Owor54++5pyJIDwgY3VycmVudGx5XC1leGlzdGluZzsKK+ilv+WNiueQgyA8IHdlc3Rlcm5cLWhlbWlzcGhlcmU7CivpvLvmqJEgPCBicmlkZ2VcLW9mXC10aGVcLW5vc2U7Civlj4PotIogPCBkaXBsb21hdGljXC1vZmZpY2VyOwor5Lim56uLIDwgZXhpc3RcLXNpZGVcLWJ5XC1zaWRlOwor6LK/5piTIDwgXChjb21tZXJjaWFsXClcLXRyYWRlOwor5aSa56uv5Lit57m85ZmoIDwgbXVsdGlwb3J0XC1yZXBlYXRlcjsKK+WMl+S6rOWkp+WtuCA8IGJlaWppbmdcLXVuaXZlcnNpdHk7CivloLHli5nlk6EgPCB0ZWxlZ3JhcGhcLW9wZXJhdG9yOwor6YWs6YWiIDwgdG9cLWV4Y2hhbmdlXC10b2FzdHM7CivmtarmtowgPCBcKGVsZWN0cmljYWxcKVwtc3VyZ2U7CivkvZTlhYggPCB0b1wtdGFrZVwtcHJlY2VkZW5jZTsKK+iDjOWFiSA8IGJlXC1pblwtYVwtcG9vclwtbGlnaHQ7CivlhYnms6LplbcgPCBvcHRpY2FsXC13YXZlbGVuZ3RoOwor5rex5aScIDwgdmVyeVwtbGF0ZVwtYXRcLW5pZ2h0Owor5ZaJ5pOm6Z+zIDwgZ3V0dHVyYWxcLWZyaWNhdGl2ZTsKK+WFq+e0muW3pSA8IGVpZ2h0XC1ncmFkZVwtd29ya2VyOwor5L2b6JKZ54m5IDwgdmVybW9udFwtXFt1c1wtc3RhdGVcXTsKK+mcsumdoiA8IGFwcGVhclwtXChpblwtcHVibGljXCk7CivllYbli5kgPCBjb21tZXJjaWFsXC1hZmZhaXJzOwor6IGv6YKm5pS/5bqcIDwgZmVkZXJhbFwtZ292ZXJubWVudDsKK+eMnOeWkSA8IGhhcmJvdXJcLXN1c3BpY2lvbnM7CivnlJ/mtLvlv4XpnIDlk4EgPCBsaWZlJydzXC1uZWNlc3NpdGllczsKK+iytOWnkyA8IHdoYXRcLWlzXC15b3VyXC1uYW1lXD87CivnjJnnjbAgPCBtZWFuXC1hbmRcLWZlcm9jaW91czsKK+mAsuihjOe3qOeoiyA8IGV4ZWN1dGFibGVcLXByb2dyYW07CivmtrLlo5MgPCBoeWRyYXVsaWNcLXByZXNzdXJlOwor566h55CG56uZIDwgbWFuYWdlbWVudFwtc3RhdGlvbjsKK+m8u+WhniA8IGhhdmVcLWFcLXN0dWZmeVwtbm9zZTsKK+iZm+aTrOmAo+aOpSA8IHZpcnR1YWxcLWNvbm5lY3Rpb247Civpu57lv4MgPCBsaWdodFwtcmVmcmVzaG1lbnRzOwor5a6i5oi25oeJ55SoIDwgY2xpZW50XC1hcHBsaWNhdGlvbjsKK+S4jemaqOaEj+iCjCA8IGludm9sdW50YXJ5XC1tdXNjbGU7CivoqqrkuI3lrpogPCBjYW4nJ3RcLXNheVwtZm9yXC1zdXJlOwor5rOi5pav6KqeIDwgYm9zbmlhblwtXChsYW5ndWFnZVwpOwor5rW35Z+fIDwgdGVycml0b3JpYWxcLXdhdGVyczsKK+avlOippiA8IGhhdmVcLWFcLWNvbXBldGl0aW9uOwor5o6h5Y+W5o6q5pa9IDwgdG9cLWFkb3B0XC1hXC1tZWFzdXJlOwor5YSY5Y+v6IO9IDwgYXNcLWZhclwtYXNcLXBvc3NpYmxlOwor5ZOI5L2b5aSn5a24IDwgaGFydmFyZFwtdW5pdmVyc2l0eTsKK+mbu+i3ryA8IFwoZWxlY3RyaWNcKVwtY2lyY3VpdDsKK+S4reWwhyA8IGxpZXV0ZW5hbnRcLWdlbmVyYWw7CivljIXmib/ntYQgPCBcKHJlc3BvbnNpYmxlXClcLWNyZXc7Civnmb7okYnnrrEgPCB0aGVybW9tZXRlclwtc2NyZWVuOwor5pqX57ea5YWJ6K2cIDwgZGFya1wtbGluZVwtc3BlY3RydW07Civmlofol50gPCBsaXRlcmF0dXJlXC1hbmRcLWFydDsKK+eJiOeohSA8IHJveWFsdHlcLVwob25cLWJvb2tzXCk7Civpm7voppbnr4Dnm64gPCB0ZWxldmlzaW9uXC1wcm9ncmFtOwor5oOF5aCxIDwgXChzcHlcKVwtaW50ZWxsaWdlbmNlOwor57eo6YGjIDwgcmVvcmdhbml6ZVwtXCh0cm9vcHM7Civpgb/pm7flmaggPCBsaWdodG5pbmdcLWFycmVzdGVyOwor5b+F5LiN5Y+v5bCR57WE5oiQIDwgYWJzb2x1dGVcLW5lY2Vzc2l0eTsKK+azsOWxsSA8IHRhaXNoYW5cLVwobW91bnRhaW5cKTsKK+aCieWwvCA8IHN5ZG5leVwtXChhdXN0cmFsaWFcKTsKK+aIsOmspeapnyA8IGZpZ2h0ZXJcLVwoYWlyY3JhZnRcKTsKK+iWhOaDhSA8IGluY29uc3RhbnRcLWluXC1sb3ZlOwor5rCR55SoIDwgXChmb3JcKVwtY2l2aWxpYW5cLXVzZTsKK+e3qOitryA8IHRyYW5zbGF0ZVwtYW5kXC1lZGl0Owor56aP5YipIDwgXChtYXRlcmlhbFwpXC13ZWxmYXJlOwor57Ch55+t5LuL57S5IDwgYnJpZWZcLWludHJvZHVjdGlvbjsKK+a1t+eBo+aIsOeIrSA8IFwocGVyc2lhblwpXC1ndWxmXC13YXI7CivlnLDnkIPlpKfmsKMgPCBlYXJ0aCcnc1wtYXRtb3NwaGVyZTsKK+WQjOWtuCA8IFwoZmVsbG93XClcLWNsYXNzbWF0ZTsKK+S4jeWSjCA8IG5vdFwtZ2V0XC1hbG9uZ1wtd2VsbDsKK+S4jeWOrSA8IG5vdFwtbWluZFwtZG9pbmdcLXN0aDsKK+WPjeaEnyA8IFwoc3Ryb25nbHlcKVwtZGlzbGlrZTsKK+mHneWwjSA8IGluXC1jb25uZWN0aW9uXC13aXRoOwor5pyN5YuZ6LOq6YePIDwgcXVhbGl0eVwtb2ZcLXNlcnZpY2U7Civlj6blr4QgPCB0b1wtbWFpbFwtc2VwYXJhdGVseTsKK+iuiuW5uyA8IGNoYW5nZVwtaXJyZWd1bGFybHk7CivloLHpl5wgPCBkZWNsYXJlXC1hdFwtY3VzdG9tczsKK+e9suWQjSA8IHNpZ25cLVwoYVwtc2lnbmF0dXJlXCk7CivpgYropr0gPCB0b1wtZ29cLXNpZ2h0XC1zZWVpbmc7CivkuI3mlLvoh6rnoLQgPCBjb2xsYXBzZVwtb2ZcLWl0c2VsZjsKK+aWh+WMluWCs+e1sSA8IGN1bHR1cmFsXC10cmFkaXRpb247Civpoa/npLrlmaggPCBtb25pdG9yXC1cKGNvbXB1dGVyXCk7Civnmr8gPCBzaGFsbG93XC1jb250YWluZXI7CivlsZMgPCBnaWdhbnRpY1wtc3RyZW5ndGg7CivmtL4gPCBzY2hvb2xcLW9mXC10aG91Z2h0Owor5aeTIDwgb25lJydzXC1mYW1pbHlcLW5hbWU7CivnhY4gPCBmcnlcLWluXC1mYXRcLW9yXC1vaWw7CivopYEgPCBzd2FkZGxpbmdcLWNsb3RoZXM7Civlk4ggPCBzb3VuZFwtb2ZcLWxhdWdodGVyOwor6biaIDwgc3BlY2llc1wtb2ZcLXBhcnJvdDsKK+aspyA8IHRyYW5zbGl0XC5cOlwtZXVyb3BlOwor6K6iIDwgZHJhd1wtdXBcLWFncmVlbWVudDsKK+WBjyA8IGluY2xpbmVkXC1vbmVcLXNpZGU7CivmrZQgPCBibG93XC10aHJvdWdoXC1ub3NlOwor5Z+5IDwgYmFua1wtdXBcLXdpdGhcLWRpcnQ7CivmvKsgPCBvdmVyZmxvd1wtb2ZcLXdhdGVyOwor5L6gIDwgY2hpdmFscm91c1wtcGVyc29uOwor5aeGIDwgY2hpbGQnJ3NcLWdvdmVybmVzczsKK+ebkiA8IHNtYWxsXC1ib3hcLW9yXC1jYXNlOwor5YSSIDwgY29uZnVjaWFuXC1zY2hvbGFyOwor6ZiqIDwgaGlsbHNpZGVcLWZhcm1sYW5kOwor6L+IIDwgdGFrZVwtYVwtYmlnXC1zdHJpZGU7CivmjY8gPCBwaWNrXC13aXRoXC1maW5nZXJzOwor5rWZIDwgemhlamlhbmdcLXByb3ZpbmNlOwor562nIDwgYmFtYm9vXC13YXRlclwtcGlwZTsKK+iJmCA8IGNvdW50ZXJcLWZvclwtc2hpcHM7CivotoEgPCB0YWtlXC1hZHZhbnRhZ2VcLW9mOwor6YmiIDwgZWFydGhlbndhcmVcLWJhc2luOwor6JOsIDwgdHlwZVwtb2ZcLXJhc3BiZXJyeTsKK+i+liA8IGxpbmNocGluXC1vZlwtd2hlZWw7CivpgIUgPCBtZWV0XC11bmV4cGVjdGVkbHk7CivphaMgPCBlbmpveVwtaW50b3hpY2FudHM7CivppbogPCBzdHVmZmVkXC1kdW1wbGluZ3M7Civlko8gPCBzaW5nXC1zb25nXC1vclwtcG9lbTsKK+aQgCA8IGdpdmVcLWhlbHBpbmdcLWhhbmQ7CivmjbYgPCBzdHJpa2VcLXdpdGhcLXN0aWNrOwor5YioIDwgY2FycGVudGVyJydzXC1wbGFuZTsKK+iglSA8IGV1bWVuZXNcLXBvbGlmb21pczsKK+W0hiA8IGtvbmd0b25nXC1tb3VudGFpbjsKK+ebhSA8IHNtYWxsXC1jdXBcLW9yXC1ib3dsOwor5qKGIDwgd2F0Y2htYW4nJ3NcLXJhdHRsZTsKK+W1hyA8IG1vdW50YWluXC1pblwtaGVuYW47CivogLcgPCBlYXJzXC1oYW5naW5nXC1kb3duOwor576MIDwgcWlhbmdcLW5hdGlvbmFsaXR5Owor6IueIDwgYVwtdmFyaWV0eVwtb2ZcLXJ1c2g7Civol5wgPCBjaGVub3BvZGl1bVwtYWxidW07CivoiYQgPCBzdGVyblwtb2ZcLWFcLXZlc3NlbDsKK+WzgSA8IHllbGxvd1wtZGlydFwtbW91bnQ7CivplZQgPCBoaWdoXC1xdWFsaXR5XC1pcm9uOwor6bKrIDwgY2FyYXNzaXVzXC1hdXJhdHVzOwor6b6HIDwgdG9cLXNob3dcLXRoZVwtdGVldGg7Civmsq0gPCByaXZlclwtaW5cLXNoYW50dW5nOwor5qarIDwgbW9ydGlzZVwtYW5kXC10ZW5vbjsKK+iQiyA8IGx1eHVyaWFudFwtZm9saWFnZTsKK+mGriA8IHJlbGlnaW91c1wtc2VydmljZTsKK+eJnSA8IGZlbWFsZVwtb2ZcLXNwZWNpZXM7Civmm7cgPCB3aHlcP1wtd2hhdFw/XC13aGVyZVw/Owor55G3IDwgZmluZVwtcXVhbGl0eVwtamFkZTsKK+iApiA8IHBsb3dcLXNpZGVcLWJ5XC1zaWRlOwor6bi2IDwgdGhlXC1lYXN0ZXJuXC1lZ3JldDsKK+evpiA8IGZpbmVcLXRvb3RoZWRcLWNvbWI7CivlpoEgPCBhY3RcLWFzXC1nb1wtYmV0d2VlbjsKK+iNpSA8IGFcLWNvdW50eVwtaW5cLWhlbmFuOwor5oi9IDwgdG9cLWJhbGVcLW91dFwtd2F0ZXI7CivmnrMgPCB0cmlmb2xpYXRlXC1vcmFuZ2U7CivmpJAgPCB6ZWxrb3dhXC1hY3VtaW5hdGE7CivprYkgPCBhXC1raW5kXC1vZlwtbW9uc3RlcjsKK+miniA8IHRoZVwtdGVtcG9yYWxcLWJvbmU7CivogKkgPCB0b1wtcGxvdWdoXC5cLXRvXC1zb3c7Civlu6ggPCBnb3Zlcm5tZW50XC1vZmZpY2U7Civon64gPCB0eXBlXC1vZlwtZWFydGh3b3JtOwor6JuxIDwga2luZFwtb2ZcLWJ1dHRlcmZseTsKK+emsyA8IHByYXlcLW9yXC1zYWNyaWZpY2U7CivnnqIgPCBleWVzaWdodFwtb2JzY3VyZWQ7CivolLggPCBjb3VudGVyXC1mb3JcLXBsYW50Owor6J6FIDwgXChpbnRlc3RpbmFsXC13b3JtXCk7CivnpacgPCBhblwtYW5jZXN0cmFsXC1oYWxsOwor6KCDIDwgdGhlXC1zb2xpdGFyeVwtd2FzcDsKK+iBgyA8IGVhcnNcLXdpdGhvdXRcLXJpbXM7CivogJwgPCBzcGFkZVwtc2hhcGVkXC10b29sOwor5oWdIDwgZG9cLWV2aWxcLWluXC1zZWNyZXQ7CivlurMgPCBhXC1sb3dcLWJ1aWx0XC1ob3VzZTsKK+m8oiA8IGFcLXZhcmlldHlcLW9mXC1tb2xlOwor6Jq6IDwgYVwtYm9hXC1jb25zdHJpY3RvcjsKK+ehhyA8IGFcLWtpbmRcLW9mXC1taW5lcmFsOwor56GtIDwgYVwtY3J1ZGVcLXNhbHRwZXRyZTsKK+iDqCA8IGFcLWtpbmRcLW9mXC1wcm90ZWluOwor5aSW55WMIDwgdGhlXC1vdXRzaWRlXC13b3JsZDsKK+iuiuWkqSA8IGNoYW5nZVwtb2ZcLXdlYXRoZXI7Civmr5Tmv5UgPCBzcGVjaWZpY1wtaHVtaWRpdHk7Civlj6/ooYzmgKfnoJTnqbYgPCBmZWFzaWJpbGl0eVwtc3R1ZHk7CivntrLntaHpgbfnp7sgPCBuZXR3b3JrXC1taWdyYXRpb247Civpm7vohabou5/ku7YgPCBjb21wdXRlclwtc29mdHdhcmU7Civlv4Xkv67oqrIgPCBhXC1yZXF1aXJlZFwtY291cnNlOwor5b635paHIDwgZ2VybWFuXC1cKGxhbmd1YWdlXCk7Civlg4XmrKHkuo4gPCBzZWNvbmRcLW9ubHlcLXRvXC5cLlwuOwor5pyd6a6u6KqeIDwga29yZWFuXC1cKGxhbmd1YWdlXCk7Civos4fmlpnlgrPovLggPCBkYXRhXC10cmFuc21pc3Npb247CivljZHmgK8gPCBtZWFuXC1hbmRcLWNvd2FyZGx5Owor5YW16aasIDwgdHJvb3BzXC1hbmRcLWhvcnNlczsKK+aVuOaTmuW6q+i7n+S7tiA8IGRhdGFiYXNlXC1zb2Z0d2FyZTsKK+eiqeWjqyA8IG1hc3Rlcicnc1wtXChkZWdyZWVcKTsKK+ilv+ijoeeIvuWtl+avjSA8IGN5cmlsbGljXC1hbHBoYWJldDsKK+Wci+mYsumDqOmVtyA8IGRlZmVuY2VcLXNlY3JldGFyeTsKK+eZvemqqCA8IGJvbmVzXC1vZlwtdGhlXC1kZWFkOwor5beo5aSn5aOT5YqbIDwgZW5vcm1vdXNcLXByZXNzdXJlOwor54Wn55u4IDwgdGFrZVwtYVwtcGhvdG9ncmFwaDsKK+eZvemjryA8IHBsYWluXC1jb29rZWRcLXJpY2U7Civml6XlrZAgPCBhXC1cKGNhbGVuZGFyXClcLWRhdGU7Civlu7rnr4nmpa0gPCBidWlsZGluZ1wtaW5kdXN0cnk7CivmlL/msrvmsKPlgJkgPCBwb2xpdGljYWxcLWNsaW1hdGU7Civlu6Pln5/ntrLot68gPCB3aWRlXC1hcmVhXC1uZXR3b3JrOwor5pWZ5Y+L5aSn5pyDIDwgY2h1cmNoXC1jb25mZXJlbmNlOwor576O5ZyL6Iiq56m65YWs5Y+4IDwgYW1lcmljYW5cLWFpcmxpbmVzOwor5pWZ5p2QIDwgdGVhY2hpbmdcLW1hdGVyaWFsOwor6YSw5ZyLIDwgYm9yZGVyaW5nXC1jb3VudHJ5Owor5qmf6KO9IDwgbWFjaGluZVwtcHJvY2Vzc2VkOwor6ZW36YGUIDwgZXh0ZW5kXC1hc1wtbG9uZ1wtYXM7CivljJblpp0gPCB0b1wtcHV0XC1vblwtbWFrZVwtdXA7Civpm6PmjbEgPCB0cnlpbmdcLFwtZGlmZmljdWx0Owor5aSn5bGAIDwgZ2VuZXJhbFwtc2l0dWF0aW9uOwor5pKS6L+m5Yip5Lqe5pu4IDwgYm9va1wtb2ZcLXplY2hhcmlhaDsKK+aVj+aEnyA8IHNlbnNpdGl2ZVwtXChpc3N1ZVwpOwor57Sh57mUIDwgc3Bpbm5pbmdcLVwodGhyZWFkXCk7CivlpKflpJogPCBmb3JcLXRoZVwtbW9zdFwtcGFydDsKK+W+kuWIkSA8IFwocHJpc29uXClcLXNlbnRlbmNlOwor6LuN5LqL5Yqb6YePIDwgbWlsaXRhcnlcLXN0cmVuZ3RoOwor5rOi5aOr6aCT5aSn5a24IDwgYm9zdG9uXC11bml2ZXJzaXR5Owor5pSv5oyBIDwgdG9cLWJlXC1pblwtZmF2b3JcLW9mOwor57Sb57SbIDwgb25lXC1hZnRlclwtYW5vdGhlcjsKK+m6peWFi+e2rSA8IFwodGltb3RoeVwpXC1tY3ZlaWdoOwor5oeJ55So5bGkIDwgYXBwbGljYXRpb25cLWxheWVyOwor5qGM5Yil5p6XIDwgXChjaGFybGllXClcLWNoYXBsaW47Civpm7voqbHmnI3li5kgPCB0ZWxlcGhvbmVcLXNlcnZpY2U7Civok4vniL7oqp4gPCBnYWVsaWNcLVwobGFuZ3VhZ2VcKTsKK+S6pOaPm+S7peWkque2sue1oSA8IHN3aXRjaGVkXC1ldGhlcm5ldDsKK+WkluWciyA8IGZvcmVpZ25cLVwoY291bnRyeVwpOwor6Zi/5ouJ5Lyv6KqeIDwgYXJhYmljXC1cKGxhbmd1YWdlXCk7CivmjZXpo58gPCBjYXRjaFwtYW5kXC1mZWVkXC1vbjsKK+aUr+afseeUoualrSA8IG1haW5zdGF5XC1pbmR1c3RyeTsKK+eEoeaJgOisgiA8IHRvXC1iZVwtaW5kaWZmZXJlbnQ7CivlpJrnq5nlnLDlnYAgPCBtdWx0aWNhc3RcLWFkZHJlc3M7CivpvYQgPCByZWRcLXNvcmVzXC1vblwtbm9zZTsKK+e2k+a/n+WuieWFqCA8IGVjb25vbWljXC1zZWN1cml0eTsKK+m7nyA8IGJsYWNrXC1hbmRcLXNoaW5pbmc7CivpuYEgPCBzcGVjaWVzXC1vZlwtcGlnZW9uOwor6LyU6KqyIDwgc3Vic2lkaWFyeVwtY291cnNlOwor5aSW5Lqk6aKo5rOiIDwgZGlwbG9tYXRpY1wtY3Jpc2lzOwor6bW1IDwgc2NvcHNcLXNlbWl0b3JxdWVzOwor5YWr6IKhIDwgZWlnaHRcLVwtcGFydFwtZXNzYXk7CivlubPmsJEgPCBcKG9yZGluYXJ5XClcLXBlb3BsZTsKK+mDiuWNgCA8IHN1YnVyYmFuXC1kaXN0cmljdDsKK+WFqeiAhSA8IGJvdGhcLXNpZGVzXHx0aGluZ3M7CivprrggPCBzY2lhZW5hXC1hbGJpZmxvcmE7CivprasgPCB0aGVcLXlvdW5nXC1vZlwtZmlzaDsKK+mDqOS7vSA8IHBhcnRcLVwob2ZcLWFcLXdob2xlXCk7Civpq70gPCB0b1wtZHJlc3NcLXRoZVwtaGFpcjsKK+mbu+ipsee2sui3ryA8IHRlbGVwaG9uZVwtbmV0d29yazsKK+eZveiCiSA8IHBsYWluXC1ib2lsZWRcLXBvcms7CivppakgPCBzYWNyZmljaWFsXC12aWN0aW07CivpgorloZ4gPCBmcm9udGllclwtZm9ydHJlc3M7CivppIIgPCB0b1wtb2J0YWluXC1ieVwtaG9vazsKK+efs+WIuyA8IHN0b25lXC1pbnNjcmlwdGlvbjsKK+meuCA8IGxlYXRoZXJcLWFybVwtZ3VhcmQ7Civpnb8gPCB0aGVcLWxlZ1wtb2ZcLWFcLWJvb3Q7Civnt4rlr4YgPCBpbnNlcGFyYWJseVwtY2xvc2U7CivpmrggPCBiZVwtc3Vic2VydmllbnRcLXRvOwor5qmf5Zmo5Lq6IDwgbWVjaGFuaWNhbFwtcGVyc29uOwor6ZaqIDwgdG9cLWxvc2VcLWxvc3RcLWl0ZW07CivpgorljaEgPCBib3JkZXJcLWNoZWNrcG9pbnQ7Civnt6nlkowgPCB0b1wtZWFzZVwtXCh0ZW5zaW9uXCk7Civlj43pgY7kvoboqqogPCBvblwtdGhlXC1vdGhlclwtaGFuZDsKK+e2reaMgeiyuyA8IG1haW50ZW5hbmNlXC1jb3N0czsKK+mKoCA8IHJob2RpdW1cLXJ1dGhlbml1bTsKK+e3qOWNsCA8IGNvbXBpbGVcLWFuZFwtcHJpbnQ7CivpiZUgPCBwcm9tZXRoaXVtXC1icm9uemU7Civovqblhazoh6rli5XljJYgPCBvZmZpY2VcLWF1dG9tYXRpb247CivpiLMgPCBjb2x1bWJpdW1cLW5pb2JpdW07Civlh7Hml4sgPCByZXR1cm5cLXRyaXVtcGhhbnQ7CivmrZDmtLLoqp7oqIAgPCBldXJvcGVhblwtbGFuZ3VhZ2U7CivngInogpogPCB0b1wtaGF2ZVwtZGlhcnJob2VhOwor6YatIDwgbW91bGRzXC1vblwtbGlxdWlkczsKK+mGkSA8IHRvXC1zdHJhaW5cLXNwaXJpdHM7CivphbogPCBkcmlua1wtd2l0aFwtb3RoZXJzOwor57ay57Wh6Kit5YKZIDwgbmV0d29ya1wtZXF1aXBtZW50Owor55m955y8IDwgc3VwZXJjaWxpb3VzXC1sb29rOwor5p2/5pOm5YWSIDwgYmxhY2tib2FyZFwtZXJhc2VyOwor5pel55uK5aKe5YqgIDwgdG9cLWluY3JlYXNlXC1kYWlseTsKK+iyjSA8IGFcLWZveFwtbGlrZVwtYW5pbWFsOwor55y85bCWIDwgdG9cLWhhdmVcLWdvb2RcLWV5ZXM7CivosYsgPCBjZXJlbW9uaWFsXC12ZXNzZWw7CivloLHluLMgPCByZW5kZXJcLWFuXC1hY2NvdW50Owor57aT5r+f5Yqb6YePIDwgZWNvbm9taWNcLXN0cmVuZ3RoOwor6Ka8IDwgZXhwbGFpblwtaW5cLWRldGFpbDsKK+WQjOaAp+aIgCA8IGhvbW9zZXh1YWxcLVwobG92ZVwpOwor6KOc55m8IDwgc3VwcGx5XC1hZ2FpblwtXChzdGg7CivorormnKzliqDljrIgPCBiZWNvbWVcLWFnZ3JhdmF0ZWQ7CivkuI3lj4rnianli5XoqZ4gPCBpbnRyYW5zaXRpdmVcLXZlcmI7CivlhYnnupbmjqXlj6MgPCBvcHRpY2FsXC1pbnRlcmZhY2U7Civoq77osp3niL7lkozlubPnjY4gPCBub2JlbFwtcGVhY2VcLXByaXplOwor6JyUIDwgaW5sYWlkXC1zaGVsbFwtd29yazsKK+aKiumgrSA8IGxhYm91clwtY29udHJhY3RvcjsKK+WVhualreihjOeCuiA8IGJ1c2luZXNzXC1hY3Rpdml0eTsKK+i7jeiyu+mWi+aUryA8IG1pbGl0YXJ5XC1zcGVuZGluZzsKK+iYtSA8IHBoeXNhbGlzXC1hbmd1bGF0YTsKK+aAp+mot+aTviA8IHNleHVhbFwtaGFyYXNzbWVudDsKK+iXqCA8IGtpbmRcLW9mXC1yYXNwYmVycnk7CivolbggPCB3YXRlclwtbGlseScnc1wtbGVhZjsKK+iVkSA8IHZhbGVyaWFuYVwtdmlsbG9zYTsKK+i7n+S7tuW5s+iHuiA8IHNvZnR3YXJlXC1wbGF0Zm9ybTsKK+iRjiA8IGh1bXVsdXNcLWphcG9uaWN1czsKK+Wxj+manCA8IHByb3RlY3RpdmVcLXNjcmVlbjsKK+iPoyA8IGFydGVtaXNpYVwtYXBpYWNlYTsKK+iOmyA8IHN0YWxrc1wtb2ZcLWdyYXNzZXM7CivngavmmJ8gPCBtYXJzXC1cKHRoZVwtcGxhbmV0XCk7CivojI0gPCB0b1wtYmVcLWNpcmN1bXNwZWN0Owor6aiO6aasIDwgcmlkZVwtb25cLWhvcnNlYmFjazsKK+apq+aWt+eJqSA8IHRyYW5zdmVyc2VcLW9iamVjdDsKK+aKhOmMhCA8IHRvXC1tYWtlXC1hXC1jb3B5XC1vZjsKK+aPreabiSA8IGFubm91bmNlXC1wdWJsaWNseTsKK+e9myA8IGxhcmdlXC1maXNoaW5nXC1uZXQ7Civnmb3lsYjoj5wgPCBncmVhdGVyXC1jZWxhbmRpbmU7CivnuLAgPCBiYW5kXC1mb3JcLXRoZVwtaGFpcjsKK+e2jiA8IHNpbGtcLWJyYWlkZWRcLWNvcmQ7CivmjInlnJbntKLpqaUgPCB0cnlcLXRvXC1sb2NhdGVcLXN0aDsKK+e0rCA8IGtpbmRcLW9mXC10aGluXC1zaWxrOwor55eF56iLIDwgY291cnNlXC1vZlwtZGlzZWFzZTsKK+WCs+i8uOeOhyA8IHRyYW5zbWlzc2lvblwtcmF0ZTsKK+exuCA8IHBvd2RlcnlcLXN1YnN0YW5jZTsKK+W4jOS8r+S+huiqniA8IGhlYnJld1wtXChsYW5ndWFnZVwpOwor57GTIDwgYmlnXC13aW5ub3dcLWJhc2tldDsKK+mWi+eZvOmAseacnyA8IGRldmVsb3BtZW50XC1jeWNsZTsKK+evqCA8IGNvYXJzZVwtYmFtYm9vXC1tYXQ7CivnlLPoqLQgPCB0b1wtYXBwZWFsXC1cKHRvXC1zYlwpOwor5Ly65pyN5ZmoIDwgc2VydmVyXC1cKGNvbXB1dGVyXCk7CivkvpvpnIAgPCBzdXBwbHlcLWFuZFwtZGVtYW5kOwor5Zyw5q68IDwgdGhlXC1lYXJ0aCcnc1wtY3J1c3Q7CivplonluZUgPCB0aGVcLWN1cnRhaW5cLWZhbGxzOwor56WKIDwgcml2ZXJcLWluXC1zaGFuZG9uZzsKK+ebm+WQjSA8IGZhbW91c1wtcmVwdXRhdGlvbjsKK+W3peWnlCA8IHdvcmtpbmdcLWNvbW1pdHRlZTsKK+aIsOeVpeWkpeS8tCA8IHN0cmF0ZWdpY1wtcGFydG5lcjsKK+ethuiqvyA8IFwob2ZcLXdyaXRpbmdcKVwtdG9uZTsKK+WxleimvSA8IHRvXC1wdXRcLW9uXC1kaXNwbGF5Owor55m95biDIDwgcGxhaW5cLXdoaXRlXC1jbG90aDsKK+mdnOiEiOWQuOavkiA8IGludHJhdmVuZW91c1wtZHJ1ZzsKK+eYtSA8IGFcLXdhc3RpbmdcLWRpc2Vhc2U7CivnhKHmnJ/lvpLliJEgPCBsaWZlXC1pbXByaXNvbm1lbnQ7Civlt6XlnLAgPCBjb25zdHJ1Y3Rpb25cLXNpdGU7CivnkqsgPCBwZW5kYW50XC1vcm5hbWVudHM7Civnmb7liIbkuYvnmb4gPCBhXC1odW5kcmVkXC1wZXJjZW50Owor5qOV6ImyIDwgYnJvd25cLVwodGhlXC1jb2xvclwpOwor56+H55uuIDwgdGFibGVcLW9mXC1jb250ZW50czsKK+eOniA8IGFuXC1pbmZlcmlvclwtYWdhdGU7Civohp3kuIrlnovpm7vohaYgPCBsYXB0b3BcLVwoY29tcHV0ZXJcKTsKK+iQiua6q+aWr+WfuiA8IFwobW9uaWNhXClcLWxld2luc2t5Owor54aAIDwgdGhlXC1ibGF6ZVwtb2ZcLWZpcmU7CivkvY/pmaIgPCB0b1wtYmVcLWluXC1ob3NwaXRhbDsKK+WCs+i8uOacjeWLmSA8IHRyYW5zcG9ydFwtc2VydmljZTsKK+aQj+WLlSA8IGJlYXRcLXJoeXRobWljYWxseTsKK+aOpeW+hSA8IHJlY2VpdmVcLVwoYVwtdmlzaXRcKTsKK+eBjiA8IG1vdmVtZW50XC1vZlwtd2F0ZXI7Civlhazli5kgPCBvZmZpY2lhbFwtYnVzaW5lc3M7CivmuLAgPCBmb3JtaW5nXC1vclwtcmlzaW5nOwor5ouY55WZIDwgZGV0YWluXC1cKHByaXNvbmVyXCk7CivmtLYgPCB0aGVcLXJ1c2hcLW9mXC13YXRlcjsKK+e2nOWQiOW4g+e3miA8IGludGVncmF0ZWRcLXdpcmluZzsKK+Wci+mam+azlSA8IGludGVybmF0aW9uYWxcLWxhdzsKK+WFrOS9iCA8IHB1YmxpY2x5XC1hbm5vdW5jZTsKK+WFp+S6giA8IGludGVybmFsXC1kaXNvcmRlcjsKK+ihm+aYnyA8IFwoc3BhY2VcKVwtc2F0ZWxsaXRlOwor5ouN54WnIDwgdG9cLXRha2VcLWFcLXBpY3R1cmU7Civnl4XmlYUgPCBkaWVcLW9mXC1hblwtaWxsbmVzczsKK+ihneaTiiA8IFwoYmVcLXVuZGVyXClcLWF0dGFjazsKK+mVt+S5hSA8IFwoZm9yXC1hXClcLWxvbmdcLXRpbWU7CivmnKAgPCBjb2xvclwtb2ZcLXRoZVwtbW9vbjsKK+WCs+i8uOmAmumBkyA8IHRyYW5zcG9ydFwtY2hhbm5lbDsKK+aUv+W6nOmDqOmWgCA8IGdvdmVybm1lbnRcLWJyYW5jaDsKK+aalCA8IG5hbWVcLW9mXC1hXC1jb3VudHJ5Owor6YyE6Z+zIDwgXChzb3VuZFwpXC1yZWNvcmRpbmc7CivmlrDogZ7pgLHliIogPCBuZXdzd2Vla1wtbWFnYXppbmU7CivmlLAgPCB0b3RhbGx5XC1leGhhdXN0ZWQ7Civkv53npZAgPCBibGVzc1wtYW5kXC1wcm90ZWN0Owor5o6rIDwgYmVcLW9uXC1uaWdodFwtd2F0Y2g7CivmjbfloLEgPCByZXBvcnRcLW9mXC1zdWNjZXNzOwor5o2lIDwgdG9cLWJlbmRcLXRoZVwtd3Jpc3Q7CivlnJjlnJMgPCB0b1wtaGF2ZVwtYVwtcmV1bmlvbjsKK+ebtOaOpeertueIrSA8IGRpcmVjdFwtY29tcGV0aXRvcjsKK+S4reWkruWnlOWToeacgyA8IGNlbnRyYWxcLWNvbW1pdHRlZTsKK+mGq+eZgue2k+mplyA8IG1lZGljYWxcLWV4cGVydGlzZTsKK+W7o+aSreWcsOWdgCA8IGJyb2FkY2FzdFwtYWRkcmVzczsKK+aEsCA8IGNsZWFybmVzc1wtb2ZcLW1pbmQ7Civmjojli5sgPCB0b1wtYXdhcmRcLWFuXC1ob25vcjsKK+WTgOmztCA8IGFcLXBsYWludGl2ZVwtd2hpbmU7CivnlJ/nianmrablmaggPCBiaW9sb2dpY2FsXC13ZWFwb247CivlvJYgPCBwaG9uZXRpY1wtZm9yXC0nJ3RlJyc7Civmh4LooYwgPCB0b1wta25vd1wtdGhlXC1yb3BlczsKK+i7jeWNgCA8IGFcLW1pbGl0YXJ5XC1yZWdpb247Civkv53niL4gPCBcKGFcLXBlcnNvbmFsXC1uYW1lXCk7CivosqHplqUgPCBmaW5hbmNpYWxcLW1hZ25hdGU7CivmmpfnhKHlpKnml6UgPCBjb21wbGV0ZVwtZGFya25lc3M7CivlsKggPCBzaGFnZ3lcLWhhaXJlZFwtZG9nOwor5ouN5pSdIDwgXChzaG9vdFwtYVwpXC1waWN0dXJlOwor5L615oiq6ICFIDwgXChjb21wdXRlclwpXC1oYWNrZXI7CivogIPpqZcgPCBcKHB1dFwtdG9cLXRoZVwpXC10ZXN0Owor5L+d5rqrIDwgaGVhdFwtcHJlc2VydmF0aW9uOwor6auY57Sa56CU56m2IDwgYWR2YW5jZWRcLXJlc2VhcmNoOwor5bGP5rCjIDwgaG9sZFwtb25lJydzXC1icmVhdGg7Civoh6rkuLvns7vntbEgPCBhdXRvbm9tb3VzXC1zeXN0ZW07Civnmb3ph5HmvKLlrq4gPCBidWNraW5naGFtXC1wYWxhY2U7CivpgYvooYzni4Dms4EgPCBvcGVyYXRpb25hbFwtc3RhdGU7CivlpIogPCBrYW5neGlcLXJhZGljYWxcLTM1Owor5Zuw6Zuj5Zyo5pa8IDwgdGhlXC1wcm9ibGVtXC1pc1wuXC5cLjsKK+aXpeiAs+abvOiqniA8IGdlcm1hbmljXC1sYW5ndWFnZTsKK+eon+izpiA8IG5hdHVyYWxcLWVuZG93bWVudDsKK+eXheWNsSA8IGJlXC1jcml0aWNhbGx5XC1pbGw7CivlgrPovLjljZTlrpogPCB0cmFuc2ZlclwtcHJvdG9jb2w7Civllr8gPCBjaGlycGluZ1wtb2ZcLWJpcmRzOwor5Za8IDwgdXNlZFwtcGhvbmV0aWNhbGx5Owor5Za5IDwgY2hlbWljYWxcLWNvbXBvdW5kOwor5L2155m8IDwgYmVcLWNvbXBsaWNhdGVkXC1ieTsKK+WTtSA8IHRoZVwtY3J5XC1vZlwtYVwtYmlyZDsKK+WTtCA8IGNyeWluZ1wtb2ZcLWluZmFudHM7CivosqHosr8gPCBmaW5hbmNlXC1hbmRcLXRyYWRlOwor5aSn5YiA6ZeK5panIDwgYm9sZFwtYW5kXC1kZWNpc2l2ZTsKK+eJueWIpeW+hemBhyA8IHNwZWNpYWxcLXRyZWF0bWVudDsKK+WQoiA8IHZvbWl0aW5nXC1vZlwtYVwtZG9nOwor5Yid5a246ICFIDwgYmVnaW5uaW5nXC1zdHVkZW50Owor5bCI55So57ay6LevIDwgZGVkaWNhdGVkXC1uZXR3b3JrOwor6KW/546L5q+NIDwgbmFtZVwtb2ZcLWFcLWdvZGRlc3M7CivkupTop5LlpKfmqJPlrpjlk6EgPCBwZW50YWdvblwtb2ZmaWNpYWw7CivmlZjliKnkup7mlocgPCBzeXJpYWNcLVwobGFuZ3VhZ2VcKTsKK+a8ouWtlyA8IGNoaW5lc2VcLWNoYXJhY3RlcjsKK+WuieepqSA8IHNtb290aFwtYW5kXC1zdGVhZHk7CivlgIggPCB0b1wtaW5kdWNlXC10b1wtY29tZTsKK+S/iCA8IHRvXC1pbmZvcm1cLXF1aWNrbHk7CivliLDpgqPlgIvmmYLlgJkgPCB1bnRpbFwtdGhpc1wtbW9tZW50Owor5LuCIDwgc3VycGx1c1wtb3JcLWV4Y2VzczsKK+WcqOmgreeJiCA8IG9uXC10aGVcLWZyb250XC1wYWdlOwor5bCI5qWtIDwgc3BlY2lhbGl6ZWRcLWZpZWxkOwor5LmqIDwgYVwtYmVuZFwtaW5cLWFcLXJpdmVyOwor6Lao5pmCIDwgdG9cLWZvbGxvd1wtZmFzaGlvbjsKK+S2sCA8IGZlYXRoZXJcLW9ybmFtZW50czsKK+S2liA8IGRpc2Vhc2VcLW9mXC10b25ndWU7CivktZwgPCB0b1wtcGxvdWdoXC1hbmRcLXNvdzsKK+S0iiA8IHRoZVwtY3Jvd1wtcGhlYXNhbnQ7Civku43oiIogPCBzdGlsbFwtXChyZW1haW5pbmdcKTsKK+SzpCA8IGFcLWtpbmRcLW9mXC1zdHJhbmdlOwor5LOZIDwgYVwtZWdyZXRcLWxpa2VcLWJpcmQ7Civmi5flj6MgPCBoYXJkXC10b1wtcHJvbm91bmNlOwor5K+lIDwgd2l0aFwtYVwtaGlnaFwtc2t1bGw7Civkr6IgPCBwYXJ0aWFsXC1wYXJhbHlzaXM7CivkrqsgPCBhXC1iaWdcLW11bGVcLWFuXC1hc3M7CivkrpogPCBkaXNlYXNlc1wtb2ZcLWhvcnNlOwor5K6QIDwgaW5cLWdvb2RcLWNvbmRpdGlvbjsKK+StlCA8IHN0ZWFtZWRcLWR1bXBsaW5nczsKK+SssCA8IGxpZ2h0XC1yZWZyZXNobWVudDsKK+SslSA8IHNvdW5kXC1vZlwtdGhlXC13aW5kOwor5KyNIDwgdGhlXC1zb3VuZFwtb2ZcLXdpbmQ7CivkrIYgPCBhXC1ibHVzdGVyaW5nXC1nYWxlOwor5KumIDwgdGhlXC1sb3dlclwtamF3Ym9uZTsKK+SrnyA8IGZhY2lhbFwtY29tcGxleGlvbjsKK+SrjSA8IHRvXC1ib3dcLW9uZScnc1wtaGVhZDsKK+SriSA8IGZhY2lhbFwtYXBwZWFyYW5jZTsKK+S4jeatoeiAjOaVoyA8IHBhcnRcLW9uXC1iYWRcLXRlcm1zOwor5KiVIDwgcG91cmluZ1wtd2l0aFwtcmFpbjsKK+S4reiPr+awkeWciyA8IHJlcHVibGljXC1vZlwtY2hpbmE7Civkp7ogPCB0aGVcLW1hbGVcLW9mXC1iaXJkczsKK+SmqiA8IHNvdW5kXC1vZlwtdGhlXC1kb29yOwor5ZaY5rCjIDwgdG9cLWJyZWF0aGVcLWRlZXBseTsKK+SmgyA8IHRvXC1kaWdcLXdpdGhcLWFcLWhvZTsKK+SjuyA8IGNvbG9yXC1vZlwtdGhlXC13aW5lOwor5ouc5YCSIDwgcHJvc3RyYXRlXC1vbmVzZWxmOwor5rOi6Jit6KqeIDwgcG9saXNoXC1cKGxhbmd1YWdlXCk7Civkop0gPCB0aGVcLW5leHRcLWluXC1vcmRlcjsKK+ShtyA8IG5vaXNlXC1vZlwtdmVoaWNsZXM7CivkoaogPCBmYW5cLW9mXC1hXC1jYXJyaWFnZTsKK+ShmSA8IGFuXC1hcm1lZFwtY2FycmlhZ2U7CivknpUgPCBjb2xvclwtb2ZcLXRoZVwtZmlyZTsKK+SegiA8IGZhaXJseVwtcHJvc3Blcm91czsKK+aJjeaAnSA8IGltYWdpbmF0aXZlXC1wb3dlcjsKK+SduiA8IHRvXC1waWVyY2VcLXRocm91Z2g7CivknbMgPCB0b1wta2lsbFwtZm9yXC1tb25leTsKK+SdsiA8IGZhcmV3ZWxsXC1wcmVzZW50czsKK+S4pumnlem9iumphSA8IHJ1blwtbmVja1wtYW5kXC1uZWNrOwor5rOi6Z+zIDwgYm9laW5nXC1cKGFpcmNyYWZ0XCk7CivovZ/ngrjmqZ8gPCBib21iZXJcLVwoYWlyY3JhZnRcKTsKK+ScoiA8IGNydWVsXC1hbmRcLXZpb2xlbnQ7Civpm6Pku6Xmh4nku5ggPCBoYXJkXC10b1wtZGVhbFwtd2l0aDsKK+SaoCA8IHVuYnJva2VuXC1maXJld29vZDsKK+SanSA8IG5ld1wtZ3Jvd2luZ1wtaG9ybnM7CivkmpogPCBob3JuXC1vZlwtYW5cLWFuaW1hbDsKK+SakSA8IHRvXC1zdGVhbFwtYVwtZ2xhbmNlOwor5JqAIDwgdG9cLXNlZVwtc3RlYWx0aGlseTsKK+SZtCA8IHRvXC1zb2FyXC1hc1wtYVwtYmlyZDsKK+SZqiA8IGFcLWxvb3BcLWZvclwtYnV0dG9uOwor5rSb5p2J56Ov5pmC5aCxIDwgbG9zXC1hbmdlbGVzXC10aW1lczsKK+SYjiA8IG5hbWVcLW9mXC1hblwtaW5zZWN0Owor56Gs5Lu25bmz6Ie6IDwgaGFyZHdhcmVcLXBsYXRmb3JtOwor5Je5IDwgaGFpcnlcLWNhdGVycGlsbGFyOwor5L2c5qWtIDwgc2Nob29sXC1hc3NpZ25tZW50Owor5a6Y5pa56Kqe6KiAIDwgb2ZmaWNpYWxcLWxhbmd1YWdlOwor6byT6IieIDwgaGVhcnRlbmluZ1wtXChuZXdzXCk7CivklacgPCB6aXphbmlhXC1sYXRpZm9saWE7CivklYYgPCByb3VuZFwtc3RyYXdcLXF1aWx0Owor6Yar5a245a62IDwgbWVkaWNhbFwtc2NpZW50aXN0Owor5JObIDwgbW9sZWN1bGFyXC1mb3JtdWxhOwor5JK9IDwgaWxsaWNpdW1cLWFuaXNhdHVtOwor5JKQIDwgZGlzdHVyYmVkXC1pblwtbWluZDsKK+SRvCA8IG9jZWFuXC1nb2luZ1wtbGluZXI7CivljJfkuqzov5Hpg4ogPCBzdWJ1cmJcLW9mXC1iZWlqaW5nOwor5JCgIDwgYmV0d2VlblwtdGhlXC1mbGVzaDsKK+SQmCA8IHRvXC1sYXVnaFwtaGVhcnRpbHk7Civkj7AgPCBhXC1raW5kXC1vZlwtaW5zZWN0czsKK+iPr+ebm+mgkyA8IHdhc2hpbmd0b25cLVwoZFwuY1wuXCk7Civkja0gPCBhXC1ld2VcLW9yXC1zaGVcLWdvYXQ7CivkjYcgPCBmbGF0XC1ib3R0b21cLWNyb2NrOwor5IyoIDwgdGhpblwtc2lsa1wtZmFicmljczsKK+SLuyA8IHRvXC1zcGluXC1hbmRcLXdlYXZlOwor5Iu6IDwgYVwtc3dpbmdcLWFcLWNydXBwZXI7Civki5ggPCB0b1wtaGFuZFwtYnlcLWFcLXJvcGU7CivmlofljJbnmoTkuqTmtYEgPCBjdWx0dXJhbFwtZXhjaGFuZ2U7Civkiq8gPCBncmFpbnNcLXdpdGhcLWJlYXJkOwor5ImMIDwgY3J1ZGVcLWJhbWJvb1wtbWF0czsKK+SIoCA8IGJvb2tzXC1hbmRcLXZvbHVtZXM7Civmlq/mtJvkvJDlhYvoqp4gPCBzbG92YWtcLVwobGFuZ3VhZ2VcKTsKK+ahiOaDhSA8IGRldGFpbHNcLW9mXC1hXC1jYXNlOwor5Lif6aOv56KXIDwgdG9cLWxvc2VcLW9uZScnc1wtam9iOwor5ISJIDwgYVwtcml0ZVwtb3JcLXNlcnZpY2U7CivosqHnpZ4gPCB0aGVcLWdvZFwtb2ZcLXdlYWx0aDsKK+SBhCA8IHRvXC1jbG9zZVwtdGhlXC1leWVzOwor5IC5IDwgdG9cLXdpbmtcLWV5ZWxhc2hlczsKK+avlOi8g+aWsCA8IGNvbXBhcmF0aXZlbHlcLW5ldzsKK+O/gyA8IGFuXC1veFwtaGVhZGVkXC1ib2lsOwor476xIDwgaW5jdXJhYmxlXC1kaXNlYXNlOwor472NIDwgYW5cLWVhcnRoZW5cLXZlc3NlbDsKK+O6vyA8IGFcLWphZGVcLWxpa2VcLXN0b25lOwor5aSW5ZyL5peF6YGK6ICFIDwgZm9yZWlnblwtdHJhdmVsbGVyOwor54++54uAIDwgY3VycmVudFwtc2l0dWF0aW9uOwor5bCP5aCxIDwgdGFibG9pZFwtbmV3c3BhcGVyOwor47a/IDwgdGhlXC1zbW9rZVwtd2VudFwtdXA7CivjtrQgPCBhXC12ZXJ5XC1ncmVhdFwtZmlyZTsKK+S4gOiIrOWOn+WJhyA8IGdlbmVyYWxcLXByaW5jaXBsZTsKK+O1qyA8IHdhdGVyXC1ndXNoaW5nXC1vdXQ7CivjtY0gPCBmaWxsZWRcLXdpdGhcLXdhdGVyOwor47WEIDwgbmFtZVwtb2ZcLWFcLWR5bmFzdHk7CivmnJ3ogZYgPCBtYWtlXC1hXC1waWxncmltYWdlOwor47OcIDwgdGhlXC1mbG93aW5nXC13YXRlcjsKK+OysiA8IGZpbmVcLWNvdHRvblwtY2xvdGg7CivjspggPCBmaW5lXC13b29sZW5cLWNsb3RoOwor47KLIDwgYVwta2luZFwtb2ZcLWFuaW1hbHM7CivjsoMgPCBzbW9vdGhcLWFuZFwtY3VydmVkOwor5L+d5YGlIDwgaGVhbHRoXC1wcm90ZWN0aW9uOwor46+/IDwgaGFuZGxlXC1vZlwtYVwtbGFkbGU7Civjr6YgPCB0aGVcLWdhbWVcLW9mXC1jaGVzczsKK+a3q+awtCA8IHNleHVhbFwtc2VjcmV0aW9uczsKK+OutSA8IGNvbW1vblwtc2FuZGFsd29vZDsKK+OuqCA8IGNvZGl1bVwtbWFjcm9uYXR1bTsKK+OumiA8IHRoZVwtY2hlc3RudXRcLXRyZWU7CivjrJsgPCB0b1wtZHJ5XC1pblwtdGhlXC1zdW47CivlsITpoLvlubLmk74gPCByYWRpb1wtaW50ZXJmZXJlY2U7Civjqa4gPCB0b1wtbGlmdFwtdXBcLW9yXC1vZmY7CivjqakgPCB0b1wtY29tZVwtdG9cLWFuXC1lbmQ7CivjqZkgPCBhXC1jb3JrXC1vclwtc3RvcHBlcjsKK+OooiA8IHRvXC1yaXBcLW9wZW5cLWZsZXNoOwor6Zu75L+h6JmfIDwgZWxlY3RyaWNhbFwtc2lnbmFsOwor5bCL5ZGzIDwgdG9cLXRoaW5rXC1zdGhcLW92ZXI7Civmnb/nhZkgPCBwbHVnXC1cKG9mXC10b2JhY2NvXCk7Civms6joppYgPCB3YXRjaFwtYXR0ZW50aXZlbHk7Civjo6IgPCB0b1wtcmVzdFwtZnJvbVwtd29yazsKK+OjkyA8IGxpdGVyYXJ5XC1pblwtdGFzdGU7Civjo40gPCBhXC1yYWlzZWRcLXBsYXRmb3JtOwor46KuIDwgdG9cLXVuc3RyaW5nXC1hXC1ib3c7CivjopEgPCBhXC1jb2xsYXBzZWRcLWhvdXNlOwor46KEIDwgYVwta2luZFwtb2ZcLXV0ZW5zaWw7Civms5Xoqp4gPCBmcmVuY2hcLVwobGFuZ3VhZ2VcKTsKK+OhnyA8IGJlZFwtbWF0c1wtZm9yXC1iYWJ5Owor46C3IDwgYVwtdmVzc2VsXC1mb3JcLXJpY2U7CivjoKUgPCBydWdnZWRcLWFuZFwtdW5ldmVuOwor45+0IDwgbHVtcFwtb25cLXRoZVwtaGlsbHM7Civjn6QgPCB6aHVhbmdcLWluXC1ndWFuZ3hpOwor45+DIDwgdG9cLWhhdmVcLWNoYXJnZVwtb2Y7Civjnq0gPCBuYW1lXC1vZlwtYW5cLWlzbGFuZDsKK+Wbm+mdouWFq+aWuSA8IGluXC1hbGxcLWRpcmVjdGlvbnM7CivjnYwgPCBwcm9sb25nZWRcLWlsbG5lc3M7Civjm7QgPCB0b1wtYW5nZXJcLXRvXC1hbm5veTsKK+OahSA8IHRvXC13b3JzaGlwXC1vZlwtZ29kOwor45mpIDwgYW5cLWVuY2xvc2luZ1wtd2FsbDsKK+OYpiA8IHdhbGxcLW1hZGVcLW9mXC1zb2lsOwor45iaIDwgYW5ncnlcLWFpclwtb2ZcLWxvb2s7Civjl7wgPCBlYXRpbmdcLW9yXC10YWxraW5nOwor45elIDwgc291bmRcLW9mXC1zdHJpa2luZzsKK+OWpyA8IGNhblwtbm90XC1zZWVcLWNsZWFyOwor45SdIDwgc3Ryb25nXC1yZXNpc3RhbmNlOwor45O+IDwgdG9cLXdvdW5kXC10aGVcLXNraW47Civnjajnq4sgPCB0b1wtYmVcLWluZGVwZW5kZW50Owor45GdIDwgdG9cLW1ha2VcLWFcLWZvb2xcLW9mOwor45GPIDwgdG9cLXN0YW5kXC1hbmRcLXdhaXQ7CivjkYogPCBhXC1raW5kXC1vZlwtZGlzZWFzZTsKK+enmOabuOmVtyA8IHNlY3JldGFyeVwtZ2VuZXJhbDsKK+i1sOWHuiA8IHRvXC1tb3ZlXC1hd2F5XC1mcm9tOwor6IGy5o+0IDwgc3VwcG9ydFwtXChhXC1jYXVzZVwpOwor56Sm6JePIDwgbWluZXJhbFwtcmVzb3VyY2VzOwor5a+r5L+hIDwgdG9cLXdyaXRlXC1hXC1sZXR0ZXI7CivkuInntq0gPCB0aHJlZVwtZGltZW5zaW9uYWw7CivnqbTlsYUgPCB0b1wtbGl2ZVwtaW5cLWFcLWNhdmU7Civni4Doqp4gPCBhZHZlcmJpYWxcLWFkanVuY3Q7CivlnKjlpKflpJrmlbjmg4Xms4HkuIsgPCBpblwtbW9zdFwtaW5zdGFuY2VzOwor6YWs6YeRIDwgXChtb25ldGFyeVwpXC1yZXdhcmQ7CivlnIvlrrblronlhaggPCBuYXRpb25hbFwtc2VjdXJpdHk7CivosqHmlL8gPCBmaW5hbmNlc1wtXChwdWJsaWNcKTsKK+a1t+a0i+a6q+W6piA8IG9jZWFuXC10ZW1wZXJhdHVyZTsKK+e2sumam+WNlOWumiA8IGludGVybmV0XC1wcm90b2NvbDsKK+WkluS6pOmXnOS/giA8IGZvcmVpZ25cLXJlbGF0aW9uczsKK+WuieWNsSA8IHNhZmV0eVwtYW5kXC1kYW5nZXI7Civlt7TlhYvlpI/osawgPCBiZXJrc2hpcmVcLVwoc3dpbmVcKTsKK+WQjeeosSA8IG5hbWVcLVwob2ZcLWFcLXRoaW5nXCk7Civnianos6ogPCBcKHBoeXNpY2FsXClcLW1hdHRlcjsKK+WQg+epvyA8IGZvb2RcLWFuZFwtY2xvdGhpbmc7CivoqIrmoYblgrPpgIHoq5blo4cgPCBmcmFtZVwtcmVsYXlcLWZvcnVtOwor56m05L2NIDwgYWN1cHVuY3R1cmVcLXBvaW50Owor5a245L2NIDwgZWR1Y2F0aW9uYWxcLWxldmVsOwor5ZCE55WMIDwgYWxsXC13YWxrc1wtb2ZcLWxpZmU7CivogLPlrZAgPCBoYW5kbGVcLVwob25cLWFcLXBvdFwpOwor5q2Q5rSy5Lq6IDwgZXVyb3BlYW5cLVwocGVyc29uXCk7CivmgJ3ntq0gPCBcKGxpbmVcLW9mXClcLXRob3VnaHQ7CivooZvnlJ/pg6ggPCBoZWFsdGhcLWRlcGFydG1lbnQ7Civmpa3nlYzmqJnmupYgPCBpbmR1c3RyeVwtc3RhbmRhcmQ7Civku6XlhY0gPCBpblwtb3JkZXJcLXRvXC1hdm9pZDsKK+S4gOWNg+S4g+eZvuiQrCA8IHNldmVudGVlblwtbWlsbGlvbjsKK+S6i+WvpiA8IFwodGhlXClcLWZhY3RcLVwodGhhdFwpOwor5pys5oCnIDwgbmF0dXJhbFwtaW5zdGluY3RzOwor6Zuj6aGMIDwgZGlmZmljdWx0XC1wcm9ibGVtOwor5aeU5ZOh5pyD5pyD6K2wIDwgY29tbWl0dGVlXC1tZWV0aW5nOwor6K6K55u4IDwgaW5cLWRpc2d1aXNlZFwtZm9ybTsKK+iyoeWLmSA8IGZpbmFuY2lhbFwtYWZmYWlyczsKK+acjeW9uSA8IHNlcnZlXC1pblwtdGhlXC1hcm15Owor6Yar55mCIDwgbWVkaWNhbFwtdHJlYXRtZW50Owor6Zm45Z+65bCO5b2IIDwgbGFuZFwtYmFzZWRcLW1pc3NsZTsKK+aVrOmHjSA8IHRvXC1yZXNwZWN0XC1kZWVwbHk7CivmmpfmsrMgPCB1bmRlcmdyb3VuZFwtcml2ZXI7CivpoLjmpI4gPCBjZXJ2aWNhbFwtdmVydGlicmE7CivntrLpu54gPCBub2RlXC1pblwtYVwtbmV0d29yazsKK+m7keWuoiA8IGhhY2tlclwtXChjb21wdXRlclwpOwor57qW6IqvIDwgY29yZVwtXChvZlwtYVwtZmliZXJcKTsKK+e3qOmaiiA8IGZvcm1cLWludG9cLWNvbHVtbnM7CivmlZfpgIAgPCByZXRyZWF0XC1pblwtZGVmZWF0Owor5pys5ZyLIDwgb25lJydzXC1vd25cLWNvdW50cnk7CivlpKrlubPmtIsgPCB0aGVcLXBhY2lmaWNcLW9jZWFuOwor5Y6f5Zug5pivIDwgdGhlXC1yZWFzb25cLWlzXC1cLlwuXC47CivoqIjnrpfmqZ/lt6Xmpa0gPCBjb21wdXRlclwtaW5kdXN0cnk7Civopb/nlarpm4Xmm7ggPCBib29rXC1vZlwtemVwaGFuaWFoOwor6Kqe6KiAIDwgXChzcG9rZW5cKVwtbGFuZ3VhZ2U7CivkuIDlubTljYogPCBhXC15ZWFyXC1hbmRcLWFcLWhhbGY7CivlsIjlrrboqZXoq5YgPCBleHBlcnRcLWNvbW1lbnRhcnk7CivpmL/niL7lt7TlsLzkup7kurogPCBhbGJhbmlhblwtXChwZXJzb25cKTsKK+S4jeWxkSA8IGRpc2RhaW5cLXRvXC1kb1wtc3RoOwor5ZqH5b6X55m85oqWIDwgdHJlbWJsZVwtd2l0aFwtZmVhcjsKK+WNiuelqCA8IGhhbGZcLXByaWNlXC10aWNrZXQ7CivnjajllLEgPCBcKGluXC1zaW5naW5nXClcLXNvbG87CivkuI3nlJjlv4MgPCBub3RcLXJlY29uY2lsZWRcLXRvOwor5Zub6ZaA6L2O6LuKIDwgc2VkYW5cLVwobW90b3JcLWNhclwpOwor56eB5Lq6IDwgcHJpdmF0ZVwtXChjaXRpemVuXCk7CivnjbLlh4YgPCBvYnRhaW5cLXBlcm1pc3Npb247CivlrqLmiLbmqZ8gPCBjbGllbnRcLVwoY29tcHV0ZXJcKTsKK+asiumRsCA8IGtleXNcLW9mXC1hdXRob3JpdHk7CivlpLHmpa3njocgPCB1bmVtcGxveW1lbnRcLXJhdGU7CivniIbnrqEgPCBjYXJ0cmlkZ2VcLWlnbml0ZXI7CivnpKbluoogPCBcKG1pbmVyYWxcKVwtZGVwb3NpdDsKK+aEm+S4jemHi+aJiyA8IGZvbmRsZVwtYWRtaXJpbmdseTsKK+atouihgCA8IHN0YW5jaFwtXChibGVlZGluZ1wpOwor5ZCN5a2XIDwgXChhXC1wZXJzb24nJ3NcKVwtbmFtZTsKK+itpuWvn+WxgCA8IHBvbGljZVwtZGVwYXJ0bWVudDsKK+WPsOW5oyA8IG5ld1wtdGFpd2FuXC1kb2xsYXI7Civpoaflj4ogPCB0YWtlXC1pbnRvXC1hY2NvdW50Owor5q245b+D6ICFIDwgcmVsaWdpb3VzXC1jb252ZXJ0Owor5rKS6Zec5L+CIDwgaXRcLWRvZXNuJyd0XC1tYXR0ZXI7CivkuIvljrsgPCBnb1wtZG93blwtXChkZXNjZW5kXCk7Civlvp7poK3liLDohbMgPCBmcm9tXC1oZWFkXC10b1wtZm9vdDsKK+WLu+eosSA8IHdlbGxcLXByb3BvcnRpb25lZDsKK+S4jeWKmyA8IG5vdFwtZG9cLW9uZScnc1wtYmVzdDsKK+mBk+isnSA8IHRvXC1leHByZXNzXC10aGFua3M7CivnoZ3nhZkgPCBzbW9rZVwtXChmcm9tXC1ndW5zXCk7Civol53kurogPCBwZXJmb3JtaW5nXC1hcnRpc3Q7CivljIXlnJLlhZIgPCBidXlcLXRoZVwtd2hvbGVcLWxvdDsKK+aVmee3tCA8IFwoYXRobGV0ZScnc1wpXC1jb2FjaDsKK+WHuumZoiA8IHRvXC1sZWF2ZVwtaG9zcGl0YWw7CivpmL/ph4wgPCBhbGlcLVwocHJvcGVyXC1uYW1lXCk7CivkuIDouqvmsZcgPCBzd2VhdGluZ1wtYWxsXC1vdmVyOwor6ZmE6L+RIDwgXChpblwtdGhlXClcLXZpY2luaXR5Owor5buj5pKt57ay6LevIDwgYnJvYWRjYXN0XC1uZXR3b3JrOwor56yo5Y+j5ouZ6IiMIDwgYXdrd2FyZFwtaW5cLXNwZWVjaDsKK+eJjOaokyA8IGRlY29yYXRlZFwtYXJjaHdheTsKK+W3tOaWr+WFi+iqniA8IGJhc3F1ZVwtXChsYW5ndWFnZVwpOwor54i25q+NIDwgZmF0aGVyXC1hbmRcLW1vdGhlcjsKK+iPr+WMl+W5s+WOnyA8IG5vcnRoXC1jaGluYVwtcGxhaW47CivmlZHmganoqIjlioMgPCBwbGFuXC1vZlwtc2FsdmF0aW9uOwor5LiqIDwgbnVtZXJhcnlcLWFkanVuY3Q7Civph4wgPCB1bml0XC1vZlwtZGlzdGFuY2U7CivpmLMgPCAnJ21hbGUnJ1wtcHJpbmNpcGxlOwor6KidIDwgZXhwcmVzc1wtc3VycHJpc2U7Civpu40gPCBnbHV0aW5vdXNcLW1pbGxldDsKK+WJpyA8IHRoZWF0cmljYWxcLXBsYXlzOwor6JiCIDwgc3RhbWVuXC1vclwtcGlzdGlsOwor5oy6IDwgdG9cLXN0YW5kXC11cHJpZ2h0Owor56GAIDwgZm91bmRhdGlvblwtc3RvbmU7CivoiIUgPCBtb3RoZXInJ3NcLWJyb3RoZXI7CivokKcgPCBjb21tb25cLWFydGVtaXNpYTsKK+S/uiA8IHBlcnNvbmFsXC1wcm9ub3VuOwor546yIDwgdGlua2xpbmdcLW9mXC1qYWRlOwor5o2pIDwgdHdpc3RcLXdpdGhcLWhhbmRzOwor6bubIDwgYmxhY2tlblwtZXllYnJvd3M7CivlpoYgPCB0b1wtYWRvcm5cLW9uZXNlbGY7CivluaIgPCBjYXJyaWFnZVwtY3VydGFpbjsKK+airSA8IHdlYXZlcicnc1wtc2h1dHRsZTsKK+a8qiA8IHJpcHBsZXNcLW9uXC13YXRlcjsKK+ectyA8IHRha2VcLWludGVyZXN0XC1pbjsKK+WLiyA8IG1lcml0b3Jpb3VzXC1kZWVkOwor55StIDwgdGhlcmVcLWlzXC1ub1wtbmVlZDsKK+eloCA8IGFuY2VzdHJhbFwtdGVtcGxlOwor6IiUIDwgbGlja1wtd2l0aFwtdG9uZ3VlOwor6JWKIDwgdW5vcGVuZWRcLWZsb3dlcnM7CivotaMgPCBqaWFuZ3hpXC1wcm92aW5jZTsKK+i3tyA8IHJhaXNlXC1vbmUnJ3NcLWZvb3Q7CivliYEgPCBjaG9wXC1ieVwtcG91bmRpbmc7CivolrAgPCBhXC1tZWRpY2luYWxcLWhlcmI7Civlj7wgPCBob2xkaW5nXC1pblwtbW91dGg7CivojbwgPCBiaXR0ZXJcLXZlZ2V0YWJsZTsKK+W+mSA8IG1vdmVcLW9uZScnc1wtYWJvZGU7CivmtpQgPCByaXZlclwtaW5cLXNoYWFueGk7CivmvaIgPCBleHBhbnNlXC1vZlwtd2F0ZXI7Civnp7ggPCBzdGFsa3NcLW9mXC1taWxsZXQ7CivoooggPCBidWRkaGlzdFwtY2Fzc29jazsKK+ePniA8IGtpbmRcLW9mXC1uZWNrbGFjZTsKK+WVviA8IHdhaWxpbmdcLW9mXC1jaGlsZDsKK+S6uyA8IHJhZGljYWxcLW51bWJlclwtOTsKK+WkmSA8IGVhcmx5XC1pblwtbW9ybmluZzsKK+m5mCA8IGFcLWtpbmRcLW9mXC1waWdlb247CivlqKkgPCBnaXZlXC1iaXJ0aFwtY2hpbGQ7Civlp50gPCBhXC1iZWF1dGlmdWxcLWdpcmw7Civmh5EgPCBiZVwtc2lja1wtYXRcLWhlYXJ0Owor6ZSJIDwgY2FycGVudGVyJydzXC1maWxlOwor5rSxIDwgYVwtbGFrZVwtaW5cLXl1bm5hbjsKK+idiCA8IHNtYWxsXC1ncmVlblwtZnJvZzsKK+W4vCA8IHdvbWVuJydzXC1oZWFkZ2VhcjsKK+eLjiA8IGJlXC1mYW1pbGlhclwtd2l0aDsKK+iDqiA8IGFycmFuZ2VcLWluXC1vcmRlcjsKK+ixoiA8IGRvbWVzdGljXC1hbmltYWxzOwor55yHIDwgYmxpbmRcLWluXC1vbmVcLWV5ZTsKK+e+vyA8IGxlZ2VuZGFyeVwtYXJjaGVyOwor6IqpIDwgc2FsdFwtbWFyc2hcLXBsYW50Owor6IytIDwgYW5cLWFxdWF0aWNcLWdyYXNzOwor6JOWIDwgY2FzdG9yXC1vaWxcLXBsYW50Owor5YKnIDwgZW50ZXJ0YWluXC1ndWVzdHM7CivolpwgPCBldmVyZ3JlZW5cLXNocnViczsKK+i2uiA8IHNpdFwtY3Jvc3NcLWxlZ2dlZDsKK+akuSA8IGFcLWNob3BwaW5nXC1ib2FyZDsKK+mciCA8IHRvcnJlbnRpYWxcLXJhaW5zOwor5pupIDwgaW5cLWFuY2llbnRcLXRpbWVzOwor5qCMIDwgc3VwcG9ydGluZ1wtYmxvY2s7Civlk5ogPCBjaGVtaWNhbFwtZWxlbWVudDsKK+etjCA8IGJhbWJvb1wtZmlzaFwtdHJhcDsKK+a1jSA8IGlycmlnYXRpb25cLWRpdGNoOwor54yBIDwgYVwta2luZFwtb2ZcLW1vbmtleTsKK+WVtiA8IFwtZFwtXCtcLWluZVwtXChjaGVtXC5cKTsKK+msryA8IHNhY3JpZmljaWFsXC13aW5lOwor6bK3IDwgcGFncm9zb211c1wtbWFqb3I7CivogbEgPCBiZW50XC1hbmRcLXR3aXN0ZWQ7CivliqIgPCBwdXRcLWZvcnRoXC1lZmZvcnQ7Civon6ogPCBhXC1raW5kXC1vZlwtY2ljYWRhOwor6LWGIDwgZmFyZXdlbGxcLXByZXNlbnQ7Civln68gPCBjb3Zlclwtd2l0aFwtZWFydGg7CivpspQgPCBraW5kXC1vZlwtc3R1cmdlb247CivnvaggPCBtZWRpY2FsXC1jb21wcmVzczsKK+WrnCA8IGh1c2JhbmQnJ3NcLXBhcmVudDsKK+a8pCA8IG1hcmluYXRlXC1pblwtc2FsdDsKK+WahiA8IGdpdmVcLWZvcnRoXC1zb3VuZDsKK+iWuSA8IGN5cGVydXNcLXJvdHVuZHVzOwor6IyGIDwgc3BlY2llc1wtb2ZcLWdyYXNzOwor56Oo5a2QIDwgbWlsbFwsXC1taWxsc3RvbmVzOwor5YWx55Si6buo6YOo6ZqKIDwgY29tbXVuaXN0XC1mb3JjZXM7CivlkI7kurogPCBsYXRlclwtZ2VuZXJhdGlvbjsKK+iIquepuuavjeiJpiA8IGFpcmNyYWZ0XC1jYXJyaWVyOwor6K2Y5a2XIDwgdG9cLWxlYXJuXC10b1wtcmVhZDsKK+S4reWci+Wkp+mZuCA8IGNoaW5lc2VcLW1haW5sYW5kOwor5b2x5YOP5pyD6K2wIDwgdmlkZW9cLWNvbmZlcmVuY2U7Civlv4PlvpcgPCBrbm93bGVkZ2VcLWdhaW5lZDsKK+aCsuatoembouWQiCA8IGpveXNcLWFuZFwtc29ycm93czsKK+eZvumHjOaMkeS4gCA8IG9uZVwtaW5cLWFcLWh1bmRyZWQ7Civnmb3ntLDog54gPCB3aGl0ZVwtYmxvb2RcLWNlbGw7Civoqp7ms5XooZPoqp4gPCBncmFtbWF0aWNhbFwtdGVybTsKK+axguWpmiA8IHByb3Bvc2VcLW1hcnJpYWdlOwor57eo55uuIDwgbWFrZVwtYVwtY2F0YWxvZ3VlOwor6Zu75rWBIDwgZWxlY3RyaWNcLWN1cnJlbnQ7Civln47pjq4gPCBjaXRpZXNcLWFuZFwtdG93bnM7Civlp5Tlk6EgPCBjb21taXR0ZWVcLW1lbWJlcjsKK+WjgeeVqyA8IG11cmFsXC1cKHBhaW50aW5nXCk7Civlp5PlkI0gPCBuYW1lXC1hbmRcLXN1cm5hbWU7CivmmK/lkKYgPCB3aGV0aGVyXC1cKG9yXC1ub3RcKTsKK+e4veapnyA8IGNlbnRyYWxcLWV4Y2hhbmdlOwor6YGO56iLIDwgY291cnNlXC1vZlwtZXZlbnRzOwor54aK54y0IDwgYXNzYW1lc2VcLW1hY2FxdWU7CivlpKfmnIMgPCBnZW5lcmFsXC1hc3NlbWJseTsKK+WfuuiqvyA8IFwoc3BlZWNoXClcLWtleW5vdGU7CivoqqTmnIMgPCB0b1wtbWlzdW5kZXJzdGFuZDsKK+abtOmrmOaAp+iDvSA8IGhpZ2hcLXBlcmZvcm1hbmNlOwor6LaF6auY6YCf5LmZ5aSq57ay6LevIDwgZ2lnYWJpdFwtZXRoZXJuZXQ7CivoqILnpaggPCB0b1wtaXNzdWVcLXRpY2tldHM7Civlo73moYMgPCBiaXJ0aGRheVwtcGVhY2hlczsKK+i7jeS6i+enkeWtuCA8IG1pbGl0YXJ5XC1zY2llbmNlOwor5pyN5YuZ5o+Q5L6b6ICFIDwgc2VydmljZVwtcHJvdmlkZXI7Civlmajlrpjnp7vmrpYgPCBvcmdhblwtdHJhbnNwbGFudDsKK+enu+WLleW8j+mbu+ipsSA8IG1vYmlsZVwtdGVsZXBob25lOwor5be06LGGIDwgXChwdXJnaW5nXClcLWNyb3RvbjsKK+WjveaYnyA8IGdvZFwtb2ZcLWxvbmdldml0eTsKK+W9seWDj+iZleeQhiA8IGltYWdlXC1wcm9jZXNzaW5nOwor5YWl6L+3IDwgdG9cLWJlXC1mYXNjaW5hdGVkOwor5piO5LujIDwgdGhlXC1taW5nXC1keW5hc3R5Owor5oCn6Zec5L+CIDwgc2V4dWFsXC1yZWxhdGlvbnM7Civkurrkuovpg6jploAgPCBwZXJzb25uZWxcLW9mZmljZTsKK+mAgOelqCA8IGJvdW5jZVwtXChhXC1jaGVja1wpOwor5r2b5Zyo5aiB6ISFIDwgcG90ZW50aWFsXC10aHJlYXQ7Civmrq/lhIDppKggPCB0aGVcLXVuZGVydGFrZXInJ3M7CivntbHoqIjmlbjmk5ogPCBzdGF0aXN0aWNhbFwtZGF0YTsKK+e5g+WtkCA8IGVtYnJvaWRlcnlcLWZyYW1lOwor5b6X5Ye6IDwgb2J0YWluXC1cKHJlc3VsdHNcKTsKK+WFjeiyuyA8IGZyZWVcLVwob2ZcLWNoYXJnZVwpOwor6YGy5pquIDwgcGFzdFwtb25lJydzXC1wcmltZTsKK+eglOiojuacgyA8IGRpc2N1c3Npb25cLWZvcnVtOwor5LiN5YiG6Z2S57SF55qC55m9IDwgaW5kaXNjcmltaW5hdGVseTsKK+eJueWumuWQq+e+qSA8IHNwZWNpZmljXC1tZWFuaW5nOwor6YeR6J6N57O757WxIDwgZmluYW5jaWFsXC1zeXN0ZW07CivlsI7oh7TmrbvkuqEgPCB0b1wtbGVhZFwtdG9cLWRlYXRoOwor5p2/5LiK6YeY6YeYIDwgdGhhdFwtY2xpbmNoZXNcLWl0Owor57ay5qmLIDwgXChuZXR3b3JrXClcLWJyaWRnZTsKK+WIl+eCuiA8IGJlXC1jbGFzc2lmaWVkXC1hczsKK+WpmuWkluaAp+aOpeinuCA8IGV4dHJhbWFyaXRhbFwtc2V4Owor5ZyL6ZiyIDwgbmF0aW9uYWxcLWRlZmVuY2U7CivmlYXlsYUgPCBmb3JtZXJcLXJlc2lkZW5jZTsKK+azoue+juavlOmHjeioiCA8IGJhdW1lXC1oeWRyb21ldGVyOwor6b2ZIDwgcHJvamVjdGluZ1wtdGVldGg7CivpubYgPCBzYWx0eVwtYW5kXC1iaXR0ZXI7Civlib3mgo0gPCBzd2lmdFwtYW5kXC1maWVyY2U7CivmrablrpggPCBtaWxpdGFyeVwtYXR0YWNoZTsKK+S4jeetiemCiuS4ieinkuW9oiA8IHNjYWxlbmVcLXRyaWFuZ2xlOwor6YGV5oayIDwgdW5jb25zdGl0dXRpb25hbDsKK+mvhiA8IHRoZVwtc2thdGVcLW9yXC1yYXk7Civli57li5UgPCBcKHBoeXNpY2FsXClcLWxhYm9yOwor54K655SfIDwgdG9cLW1ha2VcLWFcLWxpdmluZzsKK+mbu+iFpuS8gealrSA8IGNvbXB1dGVyXC1jb21wYW55Owor5YWs576KIDwgcmFtXC1cKG1hbGVcLXNoZWVwXCk7CivoiLnpmoogPCBmbGVldFwtXChvZlwtc2hpcHNcKTsKK+mtrCA8IHNvbGVcLW9yXC1mbG91bmRlcjsKK+W7o+W3niA8IGd1YW5nemhvdVwtXChjaXR5XCk7CivllInogbLlmIbmsKMgPCBoZWF2ZVwtZGVlcFwtc2lnaHM7CivkuI3lpb3mhI/mgJ0gPCBmZWVsXC1lbWJhcnJhc3NlZDsKK+mbu+WKmyA8IGVsZWN0cmljYWxcLXBvd2VyOwor6KOc6KGAIDwgZW5yaWNoXC10aGVcLWJsb29kOwor6aq0IDwgYVwtcHV0cmlkXC1jYXJjYXNlOwor5aSW5ZyL5oqV6LOH6ICFIDwgZm9yZWlnblwtaW52ZXN0b3I7CivpppggPCBjdXRcLW9mZlwtbGVmdFwtZWFyOwor5be05biD5Lqe5paw5bm+5YWn5LqeIDwgcGFwYXVcLW5ld1wtZ3VpbmVhOwor6LOH5paZ6YePIDwgcXVhbnRpdHlcLW9mXC1kYXRhOwor57eo6Lyv5a6kIDwgZWRpdG9yaWFsXC1vZmZpY2U7Civpo4AgPCBzb3VnaGluZ1wtb2ZcLXdpbmQ7Civnh4jlhYkgPCBcKHN0YWdlXClcLWxpZ2h0aW5nOwor6Z+dIDwgbGVhdGhlclwtYXJtXC1iYW5kOwor6Z+KIDwgYVwtY2FzZVwtZm9yXC1hXC1ib3c7CivpnrYgPCBiaWdcLWxlYXRoZXJcLWJlbHQ7CivpgI/mlK8gPCBcKGJhbmtcKVwtb3ZlcmRyYWZ0Owor5q2j5bi45bel5L2cIDwgbm9ybWFsXC1vcGVyYXRpb247Civpm5cgPCBhXC13aGl0ZVwtcGhlYXNhbnQ7CivpmqQgPCB0b1wtZmFsbFwtaW5cLXJ1aW5zOwor5YKz55yf55m86YCBIDwgZmF4XC10cmFuc21pc3Npb247Civpl6AgPCBnYXRlXC1vZlwtYVwtbWFya2V0Owor55Ww5oCn5oCn5o6l6Ke4IDwgaGV0ZXJvc2V4dWFsXC1zZXg7Civov7Tml4sgPCBtYW5ldXZlcmluZ1wtcm9vbTsKK+aLieS4geiqniA8IGxhdGluXC1cKGxhbmd1YWdlXCk7Civmk43kvZzns7vntbEgPCBvcGVyYXRpbmdcLXN5c3RlbTsKK+mKuyA8IGFudGltb255XC1zdGliaXVtOwor6YqnIDwgcG9pbnRcLW9mXC1hXC1zd29yZDsKK+mJgCA8IHBvdGFzc2l1bVwta2FsaXVtOwor55m956O3IDwgd2hpdGVcLXBob3NwaG9ydXM7CivpganphY3lsaQgPCBhZGFwdGF0aW9uXC1sYXllcjsKK+WHuumiqOmgrSA8IHRvXC1jcmVhdGVcLWFcLXN0aXI7CivloLHmjbcgPCByZXBvcnRcLWFcLXN1Y2Nlc3M7CivoqKrllY8gPCBwYXlcLWFcLXZpc2l0XC1cKHRvXCk7CivlgrPovLjlqpLnlYwgPCB0cmFuc3BvcnRcLW1ldGhvZDsKK+mZpOWklSA8IFwobmV3XC15ZWFyJydzXClcLWV2ZTsKK+i6tyA8IG9mXC1zaG9ydFwtc3RhdHVyZTsKK+i5sSA8IHRvXC1zdGFnZ2VyXC1hbG9uZzsKK+i5kCA8IHRha2VcLXNob3J0XC1zdGVwczsKK+ahjOS4iuWei+mbu+iFpiA8IGRlc2t0b3BcLWNvbXB1dGVyOwor6L6m5qGIIDwgdG9cLWhhbmRsZVwtYVwtY2FzZTsKK+izmSA8IGdpdmVcLWZvclwtY2hhcml0eTsKK+i2iumHjui7iiA8IG9mZlwtcm9hZFwtdmVoaWNhbDsKK+ixjyA8IGhhbGZcLWdyb3duXC1iZWFuczsKK+e2sue1oeebtOW+kSA8IG5ldHdvcmtcLWRpYW1ldGVyOwor6KiC5ZauIDwgXChwdXJjaGFzZVwpXC1vcmRlcjsKK+aIkOe+pOe1kOmaiiA8IGluXC1sYXJnZVwtbnVtYmVyczsKK+mBqemFjeWZqCA8IGFkYXB0ZXJcLVwoZGV2aWNlXCk7Civlia/kuLvluK0gPCB2aWNlXC1jaGFpcnBlcnNvbjsKK+iPr+WDkSA8IG92ZXJzZWFzXC1jaGluZXNlOwor6KqVIDwgdG9cLWJlYXJcLWNoaWxkcmVuOwor5ruR6bygIDwgbW91c2VcLVwoY29tcHV0ZXJcKTsKK+imgiA8IHRvXC10aHJvd1wtYVwtcmlkZXI7CivopbEgPCBsZWdzXC1vZlwtdHJvdXNlcnM7Civoo5sgPCB0b1wtd3JhcFwtYW5kXC1iaW5kOwor6KKXIDwgdW5saW5lZFwtZ2FybWVudHM7CivnhKHmiYDkuI3os6MgPCB0b1wtc2VsbFwtYW55dGhpbmc7CivooY4gPCB0b1wtZ2l2ZVwtcGxlYXN1cmU7Civon78gPCBhY3JpZGFcLWNoaW5lbnNpczsKK+ieiyA8IHNwaWRlclwtbWlsbGlwZWRlOwor6J27IDwgaW1tYXR1cmVcLWxvY3VzdHM7Civnl4Xoj4wgPCBoYXJtZnVsXC1iYWN0ZXJpYTsKK+iomOiAheaLm+W+heacgyA8IHByZXNzXC1jb25mZXJlbmNlOwor5o235YWL6KqeIDwgY3plY2hcLVwobGFuZ3VhZ2VcKTsKK+iZpSA8IHN0cmlwZWRcLXdpbGRcLWNhdDsKK+ethuW6leS4iyA8IGFiaWxpdHlcLXRvXC13cml0ZTsKK+mAsuS/riA8IGFkdmFuY2VkXC1zdHVkaWVzOwor6JemIDwgZWRpYmxlXC1tdXNocm9vbXM7CivplbfmsZ8gPCBjaGFuZ2ppYW5nXC1yaXZlcjsKK+iXiyA8IHNhbWJ1Y3VcLWphdmluaWNhOwor6JaDIDwgY3lwZXJ1c1wtYW11cmljdXM7CivpgJrnlKjpm7vlmaggPCBnZW5lcmFsXC1lbGVjdHJpYzsKK+iUhyA8IGx1eHVyaWFudFwtZ3Jvd3RoOwor5bm+5Y2DIDwgc2V2ZXJhbFwtdGhvdXNhbmQ7CivmnJ3prq7ljYrls7YgPCBrb3JlYW5cLXBlbmluc3VsYTsKK+iRmSA8IGNlbG9zaWFcLWFyZ2VudGVhOwor6I+JIDwgdGhlXC1ncmVlblwtYmFtYm9vOwor6IqYIDwgbWFsdmFcLXN5bHZlc3RyaXM7CivliLDkuoYgPCBpblwtXChhXC1wYXN0XC10aW1lXCk7CivmoLjljp/mlpkgPCBudWNsZWFyXC1tYXRlcmlhbDsKK+aciemXnOS6uuWjqyA8IHBlcnNvbnNcLWludm9sdmVkOwor5aCx5ZCNIDwgZW50ZXJcLW9uZScnc1wtbmFtZTsKK+WHuuWQjSA8IHdlbGxcLWtub3duXC1cKGZvclwpOwor5o6I542OIDwgdG9cLWF3YXJkXC1hXC1wcml6ZTsKK+mrlOiCsiA8IHBoeXNpY2FsXC1jdWx0dXJlOwor6IC25Yip57Gz5pu4IDwgYm9va1wtb2ZcLWplcmVtaWFoOwor6IC8IDwgZWFyc1wtd2l0aG91dFwtcmltOwor5LiN54it5rCjIDwgYmVcLWRpc2FwcG9pbnRpbmc7CivmvKLoqp4gPCBjaGluZXNlXC1sYW5ndWFnZTsKK+mHkeiejeW4guWgtCA8IGZpbmFuY2lhbFwtbWFya2V0Owor57a1IDwgdmFyaWNvbG9yZWRcLXNpbGs7CivntL0gPCBhXC1zdHJhbmRcLW9mXC1zaWxrOwor57O1IDwgZmVybWVudGluZ1wtZ3JhaW47Civns4ggPCBzYWNyaWZpY2lhbFwtcmljZTsKK+WFteW9uSA8IG1pbGl0YXJ5XC1zZXJ2aWNlOwor57GnIDwgY3J1ZGVcLWJhbWJvb1wtbWF0Owor5YyX5Yaw5rSLIDwgdGhlXC1hcmN0aWNcLW9jZWFuOwor5YWp5bK45bCN6KmxIDwgYmlsYXRlcmlhbFwtdGFsa3M7Civnrq8gPCBiYW1ib29cLXBhbGFucXVpbjsKK+euiiA8IGJhbWJvb1wtd2l0aFwtdGhpbjsKK+entyA8IHNvdW5kXC1vZlwtcmVhcGluZzsKK+ejpSA8IGFcLWhlYXBcLW9mXC1zdG9uZXM7CivnvoXlr4bmrZDoiIfmnLHpupfokYkgPCByb21lb1wtYW5kXC1qdWxpZXQ7CivnoKsgPCBhbmNlc3RyYWxcLXRhYmxldDsKK+eemCA8IGRlZXBseVwtc3Vua1wtZXllczsKK+eeiyA8IGdsYXJlXC13aXRoXC1hbmdlcjsKK+eVouiCliA8IHJlc2VtYmxlXC1jbG9zZWx5Owor552cIDwgdG9cLW9wZW5cLXRoZVwtZXllczsKK+S4jee2k+S5i+irhyA8IGFic3VyZFwtc3RhdGVtZW50Owor5bSp5ryPIDwgdXRlcmluZVwtYmxlZWRpbmc7Civnm6YgPCBsaWRcLW9mXC1hXC1jYWxkcm9uOwor55mJIDwgdG9cLWhhdGVcLWJpdHRlcmx5Owor5YaX5ZOhIDwgZXhjZXNzXC1wZXJzb25uZWw7CivlhbXlo6sgPCBvcmRpbmFyeVwtc29sZGllcjsKK+imgeS6uiA8IGltcG9ydGFudFwtcGVyc29uOwor5o6h5pOHIDwgc2VsZWN0XC1hbmRcLWFkb3B0Owor6Lip57eaIDwgc3RlcFwtb25cLXRoZVwtbGluZTsKK+eTnyA8IHRoZVwtYm90dGxlXC1nb3VyZDsKK+eMuCA8IGFcLWtpbmRcLW9mXC1hbmltYWw7Civlj4jkvobkuoYgPCBoZXJlXC13ZVwtZ29cLWFnYWluOwor55mx5a2QIDwgcGFyYWx5emVkXC1wZXJzb247Civni7sgPCBhXC1mYWJ1bG91c1wtYmVhc3Q7Civlt6jljKAgPCBtYXN0ZXJcLWNyYWZ0c21hbjsKK+mWseWFtSA8IHRvXC1yZXZpZXdcLXRyb29wczsKK+WCsuawoyA8IGFpclwtb2ZcLWFycm9nYW5jZTsKK+eDnCA8IGxpZ2h0XC1vZlwtdGhlXC1zdW47Civkvr/ooaMgPCBjaXZpbGlhblwtY2xvdGhlczsKK+e2sumam+e2sui3r+WNlOacgyA8IGludGVybmV0XC1zb2NpZXR5Owor6Lev55Sx5Y2U5a6aIDwgcm91dGluZ1wtcHJvdG9jb2w7CivmvqYgPCBwbGFjZVwtaW5cLXNpY2h1YW47CivmvqUgPCBhXC1ibG9ja2VkXC1zdHJlYW07CivmvpQgPCByYWRpYW5jZVwtb2ZcLWdlbXM7CivlsIvoqKogPCB0b1wtaW5xdWlyZVwtYWZ0ZXI7Civlr7bosp0gPCB0cmVhc3VyZWRcLW9iamVjdDsKK+mWseS4liA8IHRvXC1zZWVcLXRoZVwtd29ybGQ7CivmuKsgPCBiZWF0aW5nXC1vZlwtb2NlYW47CivnsKHmmI4gPCBzaW1wbGVcLWFuZFwtY2xlYXI7CivntrLot6/lubPlj7AgPCBuZXR3b3JrXC1wbGF0Zm9ybTsKK+WuiemgkyA8IGZpbmRcLWFcLXBsYWNlXC1mb3I7CivlhazlhawgPCBodXNiYW5kJydzXC1mYXRoZXI7Civkvovoqp4gPCBleGFtcGxlXC1zZW50YW5jZTsKK+avriA8IHRvXC1wdWxsXC1vdXRcLWhhaXI7Civmr6ogPCBzZXJnZVwtZnJvbVwtdGliZXQ7CivmqJsgPCBiZW5kaW5nXC1icmFuY2hlczsKK+mWg+S6riA8IGJyaWxsaWFudFwsXC1zaGlueTsKK+WFieaqoua4rOWZqCA8IG9wdGljYWxcLWRldGVjdG9yOwor5p6yIDwgbWFsZVwtbmV0dGxlXC1oZW1wOwor6Zu76IWm57ay6LevIDwgY29tcHV0ZXJcLW5ldHdvcms7CivmnpIgPCB0aGVcLWNvY29udXRcLXRyZWU7Civms6LniL7lpJrmtrIgPCBib3JkZWF1eFwtbWl4dHVyZTsKK+aWtSA8IHRvXC1jdXRcLXRvXC1waWVjZXM7Civmlp4gPCBhXC1zdGFja1wtb2ZcLWdyYWluOwor5pKaIDwgdHdpcmxcLWluXC1maW5nZXJzOwor5Y6f5a2Q56eR5a245a62IDwgYXRvbWljXC1zY2llbnRpc3Q7CivlnYfli6IgPCBiYWxhbmNlXC1vZlwtcG93ZXI7CivnmbzpgZTlnIvlrrYgPCBkZXZlbG9wZWRcLW5hdGlvbjsKK+WNgeWkmuWEhCA8IG92ZXJcLW9uZVwtYmlsbGlvbjsKK+W3sue2k+mAsuihjCA8IGFscmVhZHlcLXVuZGVyd2F5Owor5YKz6YCB5pyN5YuZIDwgZGVsaXZlcnlcLXNlcnZpY2U7CivmjLcgPCB0b1wtcHJvcGVsXC1hXC1ib2F0Owor5L+d55WZIDwgY29udGludWVcLXRvXC1oYXZlOwor5Lq66aCtIDwgbnVtYmVyXC1vZlwtcGVvcGxlOwor5o6l5Lq6IDwgdG9cLW1lZXRcLWFcLXBlcnNvbjsKK+iugOiAheS+huS/oSA8IHJlYWRlcicnc1wtbGV0dGVyczsKK+W8syA8IGNpcmN1bGFyXC1tZWFzdXJlOwor5bu1IDwgdG9cLWdvXC1vblwtY2lyY3VpdDsKK+S4gOS4i+WtkCA8IGluXC1hXC1zaG9ydFwtd2hpbGU7Civlk4jlt7TosLfmm7ggPCBib29rXC1vZlwtaGFiYWtrdWs7CivmoLjoqK3mlr0gPCBudWNsZWFyXC1mYWNpbGl0eTsKK+Wci+WKmyA8IGFcLW5hdGlvbicnc1wtcG93ZXI7Civnmb3lo4Hlvq7nkZUgPCBhXC1zbGlnaHRcLWJsZW1pc2g7CivljYHlub7lgIvmnIggPCB0ZW5cLW1vbnRoc1wtb3JcLXNvOwor6Z2e5pS/5bqcIDwgbm9uXC1nb3Zlcm5tZW50YWw7CivkuLvlubnnt5ogPCBiYWNrYm9uZVwtXChjYWJsZVwpOwor5ayOIDwgdG9cLWJlYXJcLW11bHRpcGxlOwor6Zu76KaW5qmfIDwgdGVsZXZpc2lvblwtXChzZXRcKTsKK+WqpCA8IGh1c2JhbmQnJ3NcLWZhbWlseTsKK+aJrua8lCA8IHBsYXlcLXRoZVwtcGFydFwtb2Y7CivmtYHooYznl4UgPCBlcGlkZW1pY1wtZGlzZWFzZTsKK+eXheWboCA8IGNhdXNlXC1vZlwtZGlzZWFzZTsKK+i7jeS6iyA8IG1pbGl0YXJ5XC1hZmZhaXJzOwor5L2U57eaIDwgYnVzeVwtXCh0ZWxlcGhvbmVcKTsKK+WxseadkSA8IG1vdW50YWluXC12aWxsYWdlOwor5L+h55So6K2JIDwgbGV0dGVyXC1vZlwtY3JlZGl0Owor5LiN5Yqg5oCd57SiIDwgd2l0aG91dFwtdGhpbmtpbmc7Civlm40gPCBkb3VibGVcLWhhcHBpbmVzczsKK+WasyA8IG15dGhpY2FsXC1lbXBlcm9yOwor5a246KGT55WMIDwgYWNhZGVtaWNcLWNpcmNsZXM7Civmi5DlvY4gPCB0b1wtdHVyblwtYVwtY29ybmVyOwor6IGa6K6KIDwgXChudWNsZWFyXClcLWZ1c2lvbjsKK+ihqOWGiiA8IHN0YXRpc3RpY2FsXC1mb3JtOwor5ZiFIDwgc291bmRcLW9mXC1zaWdoaW5nOwor5Zau5qih5YWJ57qWIDwgc2luZ2xlbW9kZVwtZmliZXI7CivmnIDlpKfog73lipsgPCBtYXhpbXVtXC1jYXBhY2l0eTsKK+ihm+aYn+WfjiA8IFwic2F0ZWxsaXRlXCJcLXRvd247Civll54gPCB0b1wtY29uc3VsdFwtYWJvdXQ7CivllrogPCB0b1wtYmVcLWxvY2F0ZWRcLWF0Owor5a+p55CGIDwgdG9cLWhlYXJcLVwoYVwtY2FzZVwpOwor5oqE5pysIDwgaGFuZHdyaXR0ZW5cLWNvcHk7CivoiJTlkK4gPCB0b1wtbGlja1wtYW5kXC1zdWNrOwor55qE5LiA56iuIDwgaXNcLW9uZVwtXChraW5kXC1vZlwpOwor5pu85b635ouJIDwgXChuZWxzb25cKVwtbWFuZGVsYTsKK+aciee3mumbu+imliA8IGNhYmxlXC10ZWxldmlzaW9uOwor5Y2w5Zyw6KqeIDwgaGluZGlcLVwobGFuZ3VhZ2VcKTsKK+S+v+apiyA8IHRlbXBvcmFyeVwtYnJpZGdlOwor5bel5qWt5YyWIDwgdG9cLWluZHVzdHJpYWxpemU7CivlhpMgPCBhXC1zZWNsdWRlZFwtcGxhY2U7CivkuI3ororos4fmnKwgPCBjb25zdGFudFwtY2FwaXRhbDsKK+WEiiA8IHJvdWdoXC1hbmRcLXJ1Z2dlZDsKK+WCnCA8IGFcLW1pbm9yaXR5XC10cmliZTsKK+ethuaIsCA8IHdyaXR0ZW5cLXBvbGVtaWNzOwor5L6/5pyNIDwgZXZlcnlkYXlcLWNsb3RoZXM7CivmhJ/orJ0gPCBcKGV4cHJlc3NcKVwtdGhhbmtzOwor5LaxIDwgYVwta2luZFwtb2ZcLXR1cnRsZTsKK+S1pCA8IHRvXC1jcmFja1wtb3JcLWNoYXA7CivktaMgPCB3aGl0ZVwtd2l0aFwtYmxhY2s7CivktYMgPCBhXC1raW5kXC1vZlwtYmFybGV5Owor5LSsIDwgY3J1bWJzXC1vZlwtYmFybGV5Owor5Ye654mI56S+IDwgcHVibGlzaGluZ1wtaG91c2U7CivkuIvppqwgPCBkaXNtb3VudFwtYVwtaG9yc2U7CivktIUgPCBhXC1sZWdlbmRhcnlcLWJpcmQ7Civmspbnuanls7YgPCBva2luYXdhXC1cKGlzbGFuZFwpOwor5LOiIDwgc21hbGxcLXdpbGRcLWdvb3NlOwor5LOQIDwgYW5cLW93bFwtbGlrZVwtYmlyZDsKK+WuieecoCA8IHNsZWVwXC1wZWFjZWZ1bGx5Owor5LKyIDwgYVwtaGF3a1wtbGlrZVwtYmlyZDsKK+WxpOWxpCA8IGxheWVyXC11cG9uXC1sYXllcjsKK+SwgyA8IGRpc2hldmVsbGVkXC1oYWlyOwor5K+zIDwgbG9vc2VseVwtYXJyYW5nZWQ7CivnrYbluL0gPCB0aGVcLWNhcFwtb2ZcLWFcLXBlbjsKK+SvhyA8IHRvXC1leGVydFwtb25lc2VsZjsKK+SutCA8IHVuc3RhYmxlXC13YWxraW5nOwor5K6zIDwgdG9cLWdpdmVcLWJpcnRoXC10bzsKK+SugSA8IGFcLXBhaXJcLW9mXC1ob3JzZXM7Civkq4wgPCBib3dlZFwtb25lJydzXC1oZWFkOwor5KqOIDwgc3RyaW5nc1wtb2ZcLWFcLWNhcDsKK+SppSA8IGFcLWJlbHRcLWZvclwtaG9yc2U7CivkqLsgPCByb2FyXC1vZlwtdGh1bmRlcnM7CivkqLQgPCBnYXRoZXJpbmdcLWNsb3VkczsKK+SosyA8IHRoZVwtcmFpblwtc3RvcHBlZDsKK+SojyA8IHNvdW5kXC1vZlwtcmFpbmluZzsKK+SoiiA8IGFcLWZsb2NrXC1vZlwtYmlyZHM7Civkp6EgPCBhXC1mb3J0aWZpZWRcLXdhbGw7CivosrbnvqkgPCBkZXJvZ2F0b3J5XC1zZW5zZTsKK+SnhCA8IG5hbWVcLW9mXC1hXC1wZXJzb247CivkppUgPCBiYW5nXC1vZlwtdGhlXC1kb29yOwor5KWbIDwgYVwta2luZFwtb2ZcLXNpY2tsZTsKK+mVt+W6puaMh+ekuuespiA8IGxlbmd0aFwtaW5kaWNhdG9yOwor5L2c5rOVIDwgY291cnNlXC1vZlwtYWN0aW9uOwor5KOuIDwgc21lbGxcLW9mXC1hbGNvaG9sOwor5KOrIDwgc291cmVkXC1iZWFuXC1jdXJkOwor5KKeIDwgcm93c1wtYW5kXC1jb2x1bW5zOwor5KGuIDwgdHJhY2VcLW9mXC1hXC13aGVlbDsKK+ShoiA8IGFcLXNtYWxsXC1jYXJyaWFnZTsKK+a8lOWToSA8IGFjdG9yXC1vclwtYWN0cmVzczsKK+SguyA8IHRvXC1iZW5kXC10aGVcLWJvZHk7CivpkZLliKUgPCB0b1wtZGlmZmVyZW50aWF0ZTsKK+SfiyA8IHRvXC1wcmVzc1wtZm9yd2FyZDsKK+S/neWvhiA8IG1haW50YWluXC1zZWNyZWN5Owor5J6MIDwgdG9cLWxvc2VcLWluXC10cmFkZTsKK+SdiyA8IGFcLWxpdHRsZVwtb2ZcLXBpZ3M7CivknYcgPCBncnVudGluZ1wtb2ZcLXBpZ3M7Civkm48gPCB0b1wtY2FsbFwtc29tZWJvZHk7Civkm44gPCB0b1wtc2hvdXRcLWluXC1yYWdlOwor5JuCIDwgdG9cLXNlcGFyYXRlXC1mcm9tOwor5JqUIDwgdG9cLWxvb2tcLXN1ZGRlbmx5Owor5JqSIDwgZXllc2lnaHRcLWJsdXJyZWQ7CivkmoMgPCB0b1wtcmVhbGl6ZVwtZnVsbHk7CivlgJ/liqkgPCB0b1wtZ2V0XC1oZWxwXC1mcm9tOwor5JmtIDwgdG9cLWxpZnRcLW9yXC1yYWlzZTsKK+mbu+ipseS/oeiZnyA8IHRlbGVwaG9uZVwtc2lnbmFsOwor5JiLIDwgYVwta2luZFwtb2ZcLWluc2VjdDsKK+awkeS4u+m7qCA8IGRlbW9jcmF0aWNcLXBhcnR5Owor5JePIDwgbmFtZVwtb2ZcLWFcLWluc2VjdDsKK+SWryA8IHBvaXNvbm91c1wtaW5zZWN0Owor5JaQIDwgc291bmRcLW9mXC1hXC10aWdlcjsKK+eUmOWcsCA8IFwobWFoYXRtYVwpXC1nYW5kaGk7Civku7/nnJ/mnI3li5nlmaggPCBlbXVsYXRpb25cLXNlcnZlcjsKK+SSoyA8IGx1c2hcLW9yXC1kZWxpY2F0ZTsKK+SRuCA8IGFcLWdyb3VwXC1vZlwtYm9hdHM7CivkkYUgPCBkaXp6eVwtYW5kXC1zbGVlcHk7CivkkKggPCBiYWNrXC1vZlwtdGhlXC1mb290Owor5I+SIDwgaGFsZlwtb2ZcLXRoZVwtYm9keTsKK+SPjyA8IHNpZ25zXC1hbmRcLWdyb2FuczsKK+SOryA8IHdpbnRlclwtcGxvdWdoaW5nOwor5I6CIDwgY29sb3JmdWxcLWZlYXRoZXI7Civpm7voppbliocgPCB0dlwtZHJhbWFcLXByb2dyYW07Civki6QgPCBwbGFpblwtd2hpdGVcLXNpbGs7Civki5QgPCB0b1wtYmFuZFwtdG9nZXRoZXI7CivkibcgPCBhXC1mZWF0aGVyXC1zY3JlZW47CivkiYkgPCBhXC13cml0aW5nXC10YWJsZXQ7CivkiJkgPCBiYW1ib29cLXRvXC13aXRoZXI7CivkiIggPCBhXC1raW5kXC1vZlwtYmFtYm9vOwor5rOo6YeNIDwgcGF5XC1hdHRlbnRpb25cLXRvOwor5Ia/IDwgdG9cLXRhbGtcLWluXC1zbGVlcDsKK+SGsiA8IGFcLXNwYWNpb3VzXC1ob3VzZTsKK+SGiCA8IHlvdW5nXC1hbmRcLXRlbmRlcjsKK+SFvCA8IGFcLWtpbmRcLW9mXC1ncmFpbnM7CivkhbogPCBncmFpblwtaW5cLXRoZVwtZWFyOwor6Ly75bCE5rOiIDwgcmFkaWF0aW9uXC1cKHdhdmVcKTsKK+aHuOaOmyA8IFwoY2FyXClcLXN1c3BlbnNpb247CivkgqogPCBoYXJkXC1iYXJyZW5cLWxhbmQ7CivkgIMgPCBhXC1raW5kXC1vZlwtdmVzc2VsOwor476mIDwgc2NhYlwtb3ZlclwtYVwtc29yZTsKK+O+gSA8IHdhbGtpbmdcLWxpa2VcLW1hZDsKK+O9riA8IGFcLXBvaW50XC1vZlwtbGlnaHQ7CivjvYogPCBjcmFja2luZ1wtb2ZcLXRpbGU7Civju5IgPCByZWRcLWNvbG9yZWRcLWphZGU7Civju4EgPCBhXC1raW5kXC1vZlwtamFzcGVyOwor5LiN6KydIDwgZG9uJyd0XC1tZW50aW9uXC1pdDsKK+O6tSA8IGJsYWNrXC1qYWRlXC1zdG9uZTsKK+O6tCA8IG5hbWVcLW9mXC1hXC1zcGlyaXQ7CivjuqYgPCBhXC1ydW5uaW5nXC1hbmltYWw7CivjubogPCBkb2dcLXRvXC10YWtlXC1mb29kOwor47mHIDwgYVwta2luZFwtb2ZcLWNhdHRsZTsKK+O4oyA8IGluXC1hbmNpZW50XC1jaGluYTsKK+acrOe+qSA8IG9yaWdpbmFsXC1tZWFuaW5nOwor47a+IDwgdG91Z2hcLWFuZFwtaG9uZXN0Owor47aNIDwgbmFtZVwtb2ZcLWFcLXN0cmVhbTsKK+S8tOaYnyA8IGNvbXBhbmlvblwtXChzdGFyXCk7Civkv53lhaggPCBzYXZlXC1mcm9tXC1kYW1hZ2U7CivjtKcgPCBvZlwtZmxvd2luZ1wtd2F0ZXI7CivlqIHniL7lo6voqp4gPCB3ZWxzaFwtXChsYW5ndWFnZVwpOwor5oqE5Lu2IDwgZHVwbGljYXRlXC1cKGNvcHlcKTsKK+OzvSA8IGFcLXdhdGVyeVwtZXhwYW5zZTsKK+OxtiA8IGFcLXN3ZWxsZW5cLWNvcnBzZTsKK+OxrSA8IGFuXC1pbmZlcnRpbGVcLWVnZzsKK+OwpCA8IHRvXC1sYXVnaFwtaGVydGlseTsKK+OwmyA8IG5hbWVcLW9mXC1hXC1jb3VudHk7CivjsIUgPCBlYXZlc1wtb2ZcLWFcLWhvdXNlOwor46+VIDwgc3RpY2tzXC1vclwtZnJhbWVzOwor46+DIDwgdGhlXC12YXJuaXNoXC10cmVlOwor55S35a2Q57GD55CDIDwgbWVuJydzXC1iYXNrZXRiYWxsOwor466TIDwgYW5cLWV4dHJlbWVcLWxpbWl0Owor4626IDwgdGhlXC1jaGVycnlcLWFwcGxlOwor6IGv6YKm5aSn5qiTIDwgZmVkZXJhbFwtYnVpbGRpbmc7Civjqq0gPCB0b1wtZHJhd1wtdG9nZXRoZXI7CivjqpYgPCBzb3VuZFwtb2ZcLWJlYXRpbmc7Civmma7pgJrllY/poYwgPCBjb21tb25cLXF1ZXN0aW9uczsKK+OovCA8IHRvXC10YWtlXC1ieVwtZm9yY2U7CivnvbfoqrIgPCBzdHVkZW50JydzXC1zdHJpa2U7Civjp7ogPCBhXC1maW5nZXJcLXdyYXBwZXI7CivovLjpgIHlqpLku4sgPCB0cmFuc3BvcnRcLW1lZGl1bTsKK+OmnCA8IHRvXC1tb3ZlXC10aGVcLW1pbmQ7Civmh4nmiLAgPCBmYWNlXC1hXC1jaGFsbGVuZ2U7CivmoLjlqIEgPCBudWNsZWFyXC1zdHJlbmd0aDsKK+OisCA8IHRvXC1zdHJldGNoXC1hXC1ib3c7CivomZznjbIgPCBjYXB0dXJlXC1cKHBlb3BsZVwpOwor46G9IDwgZGVwcmF2ZWRcLXRhbGtpbmc7CivjoYkgPCBhXC1raW5kXC1vZlwtZmFicmljOwor46CnIDwgYVwtbGl0dGxlXC1zbGFudGVkOwor46COIDwgYVwtbG9mdHlcLW1vdW50YWluOwor5pys56WoIDwgY2FzaGllcicnc1wtY2hlcXVlOwor6Ziy6KGb5q2m5ZmoIDwgZGVmZW5zaXZlXC13ZWFwb247CivjnasgPCBzaGFwZVwtb2ZcLXRoZVwtc2t5Owor452qIDwgYVwtc2xhbnRpbmdcLWhvdXNlOwor452pIDwgc3BhY2lvdXNseVwtcm9vbXM7CivpgY7ku73nsKHllq7ljJYgPCBvdmVyc2ltcGxpY2F0aW9uOwor45y0IDwgZGFya1wtYW5kXC1vYnNjdXJlOwor45ydIDwgdG9cLWNoZXJpc2hcLWFuZ2VyOwor45yIIDwgYVwtYmVhdWdpZnVsXC1mYWNlOwor6auU6IKy5LmL56qXIDwgd2luZG93XC1vblwtc3BvcnRzOwor5pu45a+r6Kqe6KiAIDwgd3JpdHRlblwtbGFuZ3VhZ2U7CivjmpwgPCB3aXRoXC1ncmVhdFwtcG93ZXI7CivjmpcgPCB3aXRoXC1hXC1iaWdcLW1vdXRoOwor45qHIDwgZHJhd1wtdGhlXC1mZWV0XC11cDsKK+OZniA8IGFcLXNtYWxsXC1tb3VudGFpbjsKK+OZjiA8IGJyZWFjaFwtb2ZcLWFcLXRhbms7CivjmYUgPCBhXC13YWxsZWRcLXZpbGlhZ2U7CivjmYAgPCBhXC12ZWdldGFibGVcLXBsb3Q7Civjl7sgPCBiYWJ5JydzXC1hbnN3ZXJpbmc7Civjl5kgPCB0b1wtc2hvdXRcLW9yXC1iYXdsOwor45WtIDwgdG9cLWJhcmtcLWFzXC1hXC1kb2c7CivjlakgPCBzb3VuZFwtb2ZcLXRhcHBpbmc7Civlronlvr0gPCBhbmh1aVwtXChwcm92aW5jZVwpOwor45WHIDwgcm9ja3NcLWNvbGxhcHNpbmc7CivjlJEgPCBhblwtaW5jaXNlZFwtd291bmQ7CivllYbmpa3ljJYgPCB0b1wtY29tbWVyY2lhbGl6ZTsKK+OSrSA8IGFuXC1lbGRlclwtYnJvdGhlcjsKK+OSgSA8IG9mXC1ncmVhdFwtc3RhdHVyZTsKK+ermeWPsCA8IHJhaWx3YXlcLXBsYXRmb3JtOwor5YWx5Lqr5bi25a+sIDwgc2hhcmVkXC1iYW5kd2lkdGg7CivjkIAgPCBoaWxsb2NrXC1vclwtbW91bmQ7CivmlofljJbpmpznpJkgPCBjdWx0dXJhbFwtYmFycmllcjsKK+ebtOaOpeW9semfvyA8IGRpcmVjdFwtaW5mbHVlbmNlOwor6IiH5q2k5ZCM5pmCIDwgYXRcLXRoZVwtc2FtZVwtdGltZTsKK+S4u+imgeS+hua6kCA8IHByaW5jaXBsZVwtc291cmNlOwor5Lq65rCR5YWs56S+IDwgcGVvcGxlJydzXC1jb21tdW5lOwor542y55uKIDwgb2J0YWluXC1hXC1iZW5lZml0Owor5LiL6Z2i6KuL55yLIDwgcGxlYXNlXC1zZWVcLWJlbG93Owor5LuK5piUIDwgcGFzdFwtYW5kXC1wcmVzZW50Owor5p2/5qCXIDwgY2hpbmVzZVwtY2hlc3RudXQ7CivlkLjnrqEgPCBcKGRyaW5raW5nXClcLXN0cmF3Owor5a625YuZIDwgaG91c2Vob2xkXC1kdXRpZXM7Civph5Hono3poqjms6IgPCBmaW5hbmNpYWxcLWNyaXNpczsKK+mWi+W5leW8jyA8IG9wZW5pbmdcLWNlcmVtb255Owor5a+m57+S55SfIDwgaW50ZXJuXC1cKHN0dWRlbnRcKTsKK+awkemWkyA8IGFtb25nXC10aGVcLXBlb3BsZTsKK+WpmuemriA8IHdlZGRpbmdcLWNlcmVtb255Owor6K2m6KGbIDwgXChzZWN1cml0eVwpXC1ndWFyZDsKK+efpeitmOW3peeoi+W4qyA8IGtub3dsZWRnZVwtd29ya2VyOwor5ZyL6LOT6aSoIDwgc3RhdGVcLWd1ZXN0aG91c2U7Civkub7mna8gPCB0b1wtZHJpbmtcLWFcLXRvYXN0Owor54y/54y0IDwgYXBlc1wtYW5kXC1tb25rZXlzOwor57ay57Wh5Y2U6K2wIDwgbmV0d29ya1wtcHJvdG9jb2w7CivkuKbmv4AgPCBzaHVudFwtZXhjaXRhdGlvbjsKK+mHj+e2sSA8IGRpbWVuc2lvblwtXCh1bml0XCk7Civos6rllY8gPCBcKGFza1wtYVwpXC1xdWVzdGlvbjsKK+iSkOmbhiA8IHRvXC1nYXRoZXJcLVwoZGF0YVwpOwor5LiJ5Y2D5Yiw5LqU5Y2D6JCsIDwgMzBcLXRvXC01MFwtbWlsbGlvbjsKK+S4jeiHs+aWvCA8IGNhbm5vdFwtZ29cLXNvXC1mYXI7CivmmpHnmJ8gPCB0cm9waWNhbFwtZGlzZWFzZTsKK+WNmuimvSA8IHJlYWRcLWV4dGVuc2l2ZWx5Owor5rex5YWlIDwgcGVuZXRyYXRlXC1kZWVwbHk7CivkuLnmoYIgPCBvcmFuZ2VcLW9zbWFudGh1czsKK+adv+WjgSA8IHdvb2RlblwtcGFydGl0aW9uOwor5p+Q5Lq6IDwgYVwtY2VydGFpblwtcGVyc29uOwor5pyI5puGIDwgbW9udGhseVwtY2FsZW5kYXI7Civmsrvnl4UgPCB0cmVhdFwtYW5cLWlsbG5lc3M7CivljYHoqqEgPCB0ZW5cLWNvbW1hbmRtZW50czsKK+eZveiho+aIsOWjqyA8IHdhcnJpb3JcLWluXC13aGl0ZTsKK+WuieWmguejkOefsyA8IGFzXC1zb2xpZFwtYXNcLXJvY2s7CivlpJbplbcgPCBmb3JlaWduXC1taW5pc3RlcjsKK+eZvuWIhum7niA8IHBlcmNlbnRhZ2VcLXBvaW50Owor6YWN6JelIDwgZGlzcGVuc2VcLVwoZHJ1Z3NcKTsKK+WKn+iDvembhiA8IGZ1bmN0aW9uXC1saWJyYXJ5Owor5a2X5LiyIDwgY2hhcmFjdGVyXC1zdHJpbmc7CivmlYXpmpzmjpLpmaQgPCBmYXVsdFwtcmVzb2x1dGlvbjsKK+mHkeiejeaUuemdqSA8IGZpbmFuY2lhbFwtcmVmb3JtOwor5LiA5YCL5Lit5ZyL5pS/562WIDwgb25lXC1jaGluYVwtcG9saWN5Owor5YyW5a245oiwIDwgY2hlbWljYWxcLXdhcmZhcmU7CivlpKflpJrmlbggPCBcKGdyZWF0XClcLW1ham9yaXR5Owor5aSn6YG4IDwgZ2VuZXJhbFwtZWxlY3Rpb247CivllJDku6MgPCB0aGVcLXRhbmdcLWR5bmFzdHk7CivmgKfnl4UgPCB2ZW5lcmVhbFwtZGlzZWFzZTsKK+WQm+asiiA8IG1vbmFyY2hpYWxcLXBvd2VyOwor6ZuM5oCn5o6l5Y+jIDwgZmVtYWxlXC1jb25uZWN0b3I7Civol4/mlocgPCB0aWJldGFuXC1sYW5ndWFnZTsKK+W/g+iHn+enu+auliA8IGhlYXJ0XC10cmFuc3BsYW50Owor6I+P6Jit6KqeIDwgZHV0Y2hcLVwobGFuZ3VhZ2VcKTsKK+S4gOW5tOWkmiA8IG1vcmVcLXRoYW5cLWFcLXllYXI7CivpgZnmjqfmk43kvZwgPCByZW1vdGVcLW9wZXJhdGlvbjsKK+ewoeWWrueahOiqqiA8IHRvXC1wdXRcLWl0XC1zaW1wbHk7CivlhYnmjqXmlLblmaggPCBvcHRpY2FsXC1yZWNlaXZlcjsKK+apn+aisOiqnuiogCA8IG1hY2hpbmVcLWxhbmd1YWdlOwor6IOh5b+X5piO5biCIDwgaG9cLWNoaVwtbWluaFwtY2l0eTsKK+iugOeJqSA8IHJlYWRpbmdcLW1hdGVyaWFsOwor6YKK6ZiyIDwgZnJvbnRpZXJcLWRlZmVuY2U7CivlhbHlkozpu6ggPCByZXB1YmxpY2FuXC1wYXJ0eTsKK+iElumguOWFkiA8IGJhY2tcLW9mXC10aGVcLW5lY2s7CivlkJHmnbEgPCB0b3dhcmRzXC10aGVcLWVhc3Q7CivlpKfnhKHnlY8gPCB1dHRlcmx5XC1mZWFybGVzczsKK+mbhumMpiA8IGJlc3RcLW9mXC10aGVcLWJlc3Q7CivnvbfmlZkgPCB0ZWFjaGVyJydzXC1zdHJpa2U7CivlpJboqp4gPCBmb3JlaWduXC1sYW5ndWFnZTsKK+iqsuihqCA8IHNjaG9vbFwtdGltZXRhYmxlOwor6Kqk6KejIDwgbWlzdW5kZXJzdGFuZGluZzsKK+S4jeefpeaJgOS6kSA8IG5vdFwta25vd1wtd2hhdFwtc2I7CivkuI3lv5kgPCB0aGVyZScnc1wtbm9cLWh1cnJ5Owor6LaF6auY6YCfIDwgdWx0cmFcLWhpZ2hcLXNwZWVkOwor6ZuG6YO1IDwgc3RhbXBcLWNvbGxlY3Rpbmc7Civlu6DplbcgPCBmYWN0b3J5XC1kaXJlY3RvcjsKK+iuiuazlSA8IHBvbGl0aWNhbFwtcmVmb3JtOwor5rOi5oqYIDwgdHdpc3RzXC1hbmRcLXR1cm5zOwor576k5bO2IDwgZ3JvdXBcLW9mXC1pc2xhbmRzOwor5aSq6Zm95b6u57O757Wx5YWs5Y+4IDwgc3VuXC1taWNyb3N5c3RlbXM7Civoga/luK3mnIPorbAgPCBqb2ludFwtY29uZmVyZW5jZTsKK+S6pOaPm+e2sui3ryA8IHN3aXRjaGVkXC1uZXR3b3JrOwor54qv5rOVIDwgdG9cLWJyZWFrXC10aGVcLWxhdzsKK+S4jeWwkSA8IG5vdFwtXChqdXN0XClcLWFcLWZldzsKK+W5tOm9oSA8IFwoYVwtcGVyc29uJydzXClcLWFnZTsKK+aAp+aOpeinuCA8IHNleHVhbFwtZW5jb3VudGVyOwor5q+U57+8IDwgZmx5XC13aW5nXC10b1wtd2luZzsKK+mqqOW5uee2sui3ryA8IGJhY2tib25lXC1uZXR3b3JrOwor6Luf5Lu25LyB5qWtIDwgc29mdHdhcmVcLWNvbXBhbnk7Civmi7/miYvoj5wgPCBzcGVjaWFsdHlcLVwoZGlzaFwpOwor5pa95rSX57SE57+wIDwgam9oblwtdGhlXC1iYXB0aXN0Owor56We5aWHIDwgbWFnaWNhbFwtbXlzdGljYWw7CivnpoHlk4EgPCBjb250cmFiYW5kXC1nb29kczsKK+WwvOW4jOexs+iomCA8IGJvb2tcLW9mXC1uZWhlbWlhaDsKK+Wgsee0meWgseWwjiA8IG5ld3NwYXBlclwtcmVwb3J0Owor5pyA5YWIIDwgXCh0aGVcKVwtdmVyeVwtZmlyc3Q7CivmmI7mt6ggPCBicmlnaHRcLWFuZFwtY2xlYW47Civph43mhbYgPCBjaG9uZ3FpbmdcLVwoY2l0eVwpOwor5amG5amGIDwgaHVzYmFuZCcnc1wtbW90aGVyOwor5LqS5pON5oCnIDwgaW50ZXJvcGVyYWJpbGl0eTsKK+WQg+WujCA8IHRvXC1maW5pc2hcLWVhdGluZzsKK+mAvOi/kSA8IHByZXNzXC1vblwtdG93YXJkczsKK+WgsemkqCA8IG5ld3NwYXBlclwtb2ZmaWNlOwor6Zu757qcIDwgXChlbGVjdHJpY1wpXC1jYWJsZTsKK+WKn+iDvee+pCA8IGZ1bmN0aW9uYWxcLWdyb3VwOwor54uA5oWLIDwgc3RhdGVcLW9mXC1hZmZhaXJzOwor5Lit5LuLIDwgYWdlbnRcLVwoY29tcHV0ZXJcKTsKK+S4jeWFiSA8IG5vdFwtdGhlXC1vbmx5XC1vbmU7CivmmpHlpKkgPCBob3RcLVwoc3VtbWVyXClcLWRheTsKK+WPjeWwjSA8IHRvXC1maWdodFwtYWdhaW5zdDsKK+S4jeS5hSA8IG5vdFwtbG9uZ1wtXChhZnRlclwpOwor6Zui6ZaL5YyX5LqsIDwgdG9cLWxlYXZlXC1iZWlqaW5nOwor5LiA6Lyp5a2QIDwgXChmb3JcKVwtYVwtbGlmZXRpbWU7CivnnaggPCBsb29rXC1hc2thbmNlXC1hdDsKK+aAjiA8IHdoYXRcP1wtd2h5XD9cLWhvd1w/Owor5pS2IDwgZ2F0aGVyXC10b2dldGhlcjsKK+WFmiA8IHBvbGl0aWNhbFwtcGFydHk7CivniYggPCBwcmludGluZ1wtYmxvY2tzOwor5a2jIDwgcXVhcnRlclwtb2ZcLXllYXI7CivniaEgPCBtYWxlXC1vZlwtYW5pbWFsczsKK+iouiA8IGV4YW1pbmVcLXBhdGllbnQ7Civlp5EgPCBmYXRoZXInJ3NcLXNpc3RlcjsKK+ikkyA8IHN3YWRkbGluZ1wtY2xvdGg7CivppoYgPCBwdWJsaWNcLWJ1aWxkaW5nOwor5ry/IDwgYW55XC10aGlja1wtZmx1aWQ7Civpm4QgPCBtYWxlXC1vZlwtc3BlY2llczsKK+S6vyA8IGh1bmRyZWRcLW1pbGxpb247Civlm7ogPCB0b1wtYmVjb21lXC1zb2xpZDsKK+a6qiA8IG1vdW50YWluXC1zdHJlYW07CivomZ4gPCBjb25jZXJuZWRcLWFib3V0Owor5ZeaIDwgc291bmRcLW9mXC1jcnlpbmc7CivolocgPCBvc211bmRhXC1yZWdhbGlzOwor5oiPIDwgdGhlYXRyaWNhbFwtcGxheTsKK+WPrCA8IGltcGVyaWFsXC1kZWNyZWU7CivnkZ4gPCBmZWxpY2l0b3VzXC1vbWVuOwor6ayiIDwgaGFpclwtb25cLXRlbXBsZXM7Civlg6cgPCBidWRkaGlzdFwtcHJpZXN0Owor5qqcIDwgY2hpbmVzZVwtY3lwcmVzczsKK+aqjiA8IHNtYWxsXC1yZWRcLWFwcGxlOwor6amFIDwgc3B1clwtYVwtaG9yc2VcLW9uOwor6IefIDwgaW50ZXJuYWxcLW9yZ2FuczsKK+WcsyA8IGZ1cnJvd1wtaW5cLWZpZWxkOwor57m7IDwgZmluZVwtc2lsa1wtZ3VhemU7CivlrZ8gPCBmaXJzdFwtaW5cLXNlcmllczsKK+e4iyA8IGNsaW1iXC1kb3duXC1yb3BlOwor6ZakIDwgc21hbGxcLXNpZGVcLWRvb3I7Civmlo4gPCB2ZWdldGFyaWFuXC1kaWV0Owor55uvIDwgcml2ZXRcLWdhemVcLXVwb247Civnsp8gPCB1bmh1c2tlZFwtbWlsbGV0Owor57GQIDwgY2xpbWJpbmdcLXBsYW50czsKK+aOuyA8IHNjcmF0Y2hcLWxpZ2h0bHk7Civkv5ggPCBwcmlzb25lclwtb2ZcLXdhcjsKK+aMviA8IGNsYXNwXC11bmRlclwtYXJtOwor5aqzIDwgZGF1Z2h0ZXJcLWluXC1sYXc7CivlrpkgPCB0aW1lXC1hc1wtY29uY2VwdDsKK+WNnCA8IGZvcnR1bmVcLXRlbGxpbmc7CivluJYgPCBpbnZpdGF0aW9uXC1jYXJkOwor6YCeIDwgaW5kdWxnZVwtb25lc2VsZjsKK+aPqiA8IGdyYXNwXC13aXRoXC1oYW5kOwor5LuRIDwgbG9naWNhbFwtcmVhc29uczsKK+eFniA8IG1hbGlnbmFudFwtZGVpdHk7Civps4wgPCBodWdlXC1zZWFcLXR1cnRsZTsKK+eeqSA8IHdhdGNoXC1jYXJlZnVsbHk7CivnlpogPCBjaHJvbmljXC1kaXNlYXNlOwor6JSTIDwgY3JlZXBpbmdcLXBsYW50czsKK+mqjyA8IGV4Y2VsbGVudFwtaG9yc2U7Civpl70gPCBmdWppYW5cLXByb3ZpbmNlOwor6KKFIDwgY3VybGluZ1wtdXB3YXJkczsKK+i+kCA8IHNwb2tlc1wtb2ZcLXdoZWVsOwor55CJIDwgc3BhcmtsaW5nXC1zdG9uZTsKK+iInCA8IGxlZ2VuZGFyeVwtcnVsZXI7CivovacgPCBjcnVzaFwtYnlcLXdlaWdodDsKK+a7hyA8IHl1bm5hblwtcHJvdmluY2U7CivmoZMgPCB2YXJpZXR5XC1vZlwtdHJlZTsKK+ajoCA8IGNyYWJcLWFwcGxlXC10cmVlOwor5ZCuIDwgc3Vja1wtd2l0aFwtbW91dGg7CivonLcgPCBjcmVlcFwtbGlrZVwtd29ybTsKK+aetyA8IGNhbmd1ZVwtc2NhZmZvbGQ7CivnvrIgPCBhbmNpZW50XC1lbXBlcm9yOwor5a2aIDwgYnJvb2RcLW92ZXJcLWVnZ3M7CivnmpEgPCBicmlsbGlhbnRcLXdoaXRlOwor57ylIDwgbGlnaHRcLWJsdWVcLXNpbGs7Civor4wgPCBwbGF5XC13aXRoXC13b3JkczsKK+azviA8IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+injiA8IGRlc2lyZVwtc3Ryb25nbHk7CivnjrogPCBpbXBlcmlhbFwtc2lnbmV0Owor5Y2eIDwgdG9cLWJlXC1pbXBhdGllbnQ7CivovpQgPCBicmlkbGVcLW9mXC1ob3JzZTsKK+i2lCA8IG5vdFwtcHJvZ3Jlc3Npbmc7CivlvpwgPCB3YWxraW5nXC1hbmRcLWZybzsKK+iNoCA8IHdhdGVyXC1jaGVzdG51dHM7CivmsZ4gPCBlbGVtZW50XC1tZXJjdXJ5Owor55W/IDwgaW1wZXJpYWxcLWRvbWFpbjsKK+iIgiA8IGdyaW5kXC1pblwtbW9ydGFyOwor57G0IDwgcHVyY2hhc2VcLWdyYWluczsKK+epsCA8IHN0YWxrc1wtb2ZcLWdyYWluOwor5ZeEIDwgaG9hcnNlXC1vZlwtdm9pY2U7CivmuJogPCBzbWFsbFwtc2FuZFwtYmFuazsKK+egnSA8IGJhbGFuY2VcLXdlaWdodHM7CivmnbwgPCBzaHV0dGxlXC1vZlwtbG9vbTsKK+m+gyA8IGlycmVndWxhclwtdGVldGg7Civli5AgPCBpbXBlcmlhbFwtZGVncmVlOwor55+4IDwgYVwtcm9ja1wtb3JcLWNsaWZmOwor6JWoIDwgcHRlcmlzXC1hcXVpbGluYTsKK+ixiSA8IGZlcm1lbnRlZFwtYmVhbnM7Civlvq0gPCBjb25zY3JpcHRcLWxhYm9yOwor6bqIIDwgc3BlY2llc1wtb2ZcLWRlZXI7CivolaQgPCBkcm9vcGluZ1wtbGVhdmVzOwor57uhIDwgcmF3XC1zaWxrXC1mYWJyaWM7CivoiqggPCBuYW1lXC1vZlwtYVwtcGxhbnQ7Civoi6MgPCBraW5kXC1vZlwtbGV0dHVjZTsKK+eimyA8IHNhbmRcLWFuZFwtZ3JhdmVsOwor6I6SIDwgaGVtcFwtbGlrZVwtcGxhbnQ7CivokIEgPCBraW5kXC1vZlwtZ3Jhc3NlczsKK+echCA8IHRvXC1sb29rXC1hc2thbmNlOwor5ZufIDwgdG9wXC1vZlwtdGhlXC1oZWFkOwor5bKjIDwgYVwtaGlsbFwtaW5cLWh1bmFuOwor5Ze+IDwgdG9cLXNldFwtYVwtZG9nXC1vbjsKK+iNnCA8IHNwZWNpZXNcLW9mXC1iZWFuOwor57OBIDwgYVwtZ3JhaW5cLW9mXC1yaWNlOwor57KdIDwgdW5wb2xpc2hlZFwtcmljZTsKK+ijsCA8IHRvXC1tZW5kXC1jbG90aGVzOwor6JaoIDwgZGVhdGhcLW9mXC1wcmluY2U7CivojJEgPCB0aGVcLWNvbnZvdnVsdnVzOwor57+uIDwgc3RlbVwtb2ZcLWZlYXRoZXI7CivoiZ8gPCBhbmNpZW50XC13YXJzaGlwOwor6byvIDwgZmx5aW5nXC1zcXVpcnJlbDsKK+egqSA8IG5hbWVcLW9mXC1hXC1zdG9uZTsKK+eCuyA8IGFcLWtpbmRcLW9mXC1jaGluYTsKK+aqqyA8IHNhc3NhZnJhc1wtdHp1bXU7Civni7QgPCBhXC1raW5kXC1vZlwtdGFwaXI7Civpq5jmlYjnjocgPCBoaWdoXC1lZmZpY2llbmN5Owor5aSp54i2IDwgaGVhdmVubHlcLWZhdGhlcjsKK+W5vuS5juWujOWFqCA8IGFsbW9zdFwtZW50aXJlbHk7CivnibnlvrUgPCBjaGFyYWN0ZXJpc3RpY3M7Civkv6Hmga/mmYLku6MgPCBpbmZvcm1hdGlvblwtYWdlOwor5pqR5YGHIDwgc3VtbWVyXC12YWNhdGlvbjsKK+aTuuiEqyA8IGJyZWFrXC1hd2F5XC1mcm9tOwor5Y2K5pW4IDwgaGFsZlwtdGhlXC1udW1iZXI7CivlhrDpnJwgPCBtb3JhbFwtaW50ZWdyaXR5Owor5Yu75rqcIDwgZXZlblwtYW5kXC1zbW9vdGg7Civljp/lp5QgPCB0aGVcLXdob2xlXC1zdG9yeTsKK+eUouWTgee2k+eQhiA8IHByb2R1Y3RcLW1hbmFnZXI7Civos4fmlpnpj4jntZDlsaQgPCBkYXRhXC1saW5rXC1sYXllcjsKK+i7jeS6i+WogeiEhSA8IG1pbGl0YXJ5XC10aHJlYXQ7Civnibnlr6sgPCBmZWF0dXJlXC1hcnRpY2xlOwor5pil5aSpIDwgc3ByaW5nXC1cKHNlYXNvblwpOwor57ay6Lev5pyN5YuZIDwgbmV0d29ya1wtc2VydmljZTsKK+eglOeptuS4reW/gyA8IHJlc2VhcmNoXC1jZW50ZXI7CivmraLnl5sgPCB0b1wtcmVsaWV2ZVwtcGFpbjsKK+WJjeS4jeS5hSA8IG5vdFwtbG9uZ1wtYmVmb3JlOwor5Y+b5LqCIDwgYXJtZWRcLXJlYmVsbGlvbjsKK+aWh+aqlCA8IFwoY29tcHV0ZXJcKVwtZmlsZTsKK+W0h+aLnOWEgOW8jyA8IHdvcnNoaXBcLXNlcnZpY2U7Civnt6znlLggPCBteWFubWFyXC1cKGJ1cm1hXCk7CivmlrnoiIjmnKroib4gPCB0b1wtYmVcLXVuZm9sZGluZzsKK+mbmemCiuiyv+aYkyA8IGJpbGF0ZXJhbFwtdHJhZGU7CivlpLHmnJsgPCBiZVwtZGlzYXBwb2ludGVkOwor6LuN5LqL6YOo6ZaAIDwgbWlsaXRhcnlcLWJyYW5jaDsKK+e2suermSA8IG5ldHdvcmtcLXN0YXRpb247CivpmaTmraTkuYvlpJYgPCBhcGFydFwtZnJvbVwtdGhpczsKK+WkqumZveWFrOWPuCA8IHN1blwtY29ycG9yYXRpb247CivlpJblnIvos4fmnKwgPCBmb3JlaWduXC1jYXBpdGFsOwor6ZaL6ZaAIDwgb3BlblwtXCh0aGVcKVwtZG9vcjsKK+eUn+eUoumaiiA8IHByb2R1Y3Rpb25cLXRlYW07CivntpPnrqEgPCBiZVwtaW5cLWNoYXJnZVwtb2Y7CivnlKjmiLbnt5ogPCBzdWJzY3JpYmVyXC1saW5lOwor576O5ZyL5Lq6IDwgYW1lcmljYW5cLXBlcnNvbjsKK+WNiuWkqSA8IGhhbGZcLW9mXC10aGVcLWRheTsKK+iqnuaXjyA8IGxhbmd1YWdlXC1icmFuY2g7CivlvoDlubQgPCBpblwtZm9ybWVyXC15ZWFyczsKK+aXpeWgsSA8IGRhaWx5XC1uZXdzcGFwZXI7CivlhYnpm7sgPCBvcHRvXC1lbGVjdHJpY2FsOwor55m96ZC1IDwgZ2FsdmFuaXplZFwtaXJvbjsKK+mbheatjCA8IHNvbmdcLW9mXC1zb2xvbW9uOwor5b285bK4IDwgdGhlXC1vdGhlclwtc2hvcmU7CivphY3lkIggPCBjb29yZGluYXRlXC13aXRoOwor5aCx57O7IDwgbmV3c3BhcGVyXC1jaGFpbjsKK+ixkOWvjOWkmuW9qSA8IHJpY2hseVwtY29sb3JmdWw7CivmqJnph48gPCBzY2FsYXJcLXF1YW50aXR5Owor5Y2X5YyXIDwgbm9ydGhcLWFuZFwtc291dGg7Civmr5TlrrkgPCBzcGVjaWZpY1wtdm9sdW1lOwor55yL5LiK5Y67IDwgaXRcLXdvdWxkXC1hcHBlYXI7Civnm4jomacgPCBwcm9maXRcLWFuZFwtbG9zczsKK+WLuOWwjiA8IHRyeVwtdG9cLWNvbnZpbmNlOwor6Zmj54efIDwgZ3JvdXBcLW9mXC1wZW9wbGU7Civlub7nmb4gPCBzZXZlcmFsXC1odW5kcmVkOwor5aSn5a+rIDwgY2FwaXRhbFwtbGV0dGVyczsKK+mBjua0uyA8IGxpdmVcLW9uZScnc1wtbGlmZTsKK+eJjOS9jSA8IG1lbW9yaWFsXC10YWJsZXQ7Civml6nkupsgPCBcKGFcLWJpdFwpXC1lYXJsaWVyOwor6Kqy5aSWIDwgZXh0cmFjdXJyaWN1bGFyOwor6Zu2562J5b6F54uA5oWLIDwgemVyb1wtd2FpdFwtc3RhdGU7CivmlLbmi74gPCB0b1wtcHV0XC1pblwtb3JkZXI7CivkuI3nmb3kuYvlhqQgPCB1bnJpZ2h0ZWRcLXdyb25nOwor57ay5q61IDwgbmV0d29ya1wtc2VnbWVudDsKK+W8n+W8nyA8IHlvdW5nZXJcLWJyb3RoZXI7CivpgbLml6kgPCBzb29uZXJcLW9yXC1sYXRlcjsKK+aIkuWCmeajruWatCA8IGhlYXZpbHlcLWd1YXJkZWQ7Civnn67lsI8gPCBzaG9ydFwtYW5kXC1zbWFsbDsKK+WNiumAlOiAjOW7oiA8IGdpdmVcLXVwXC1oYWxmd2F5Owor5q+U5YO5IDwgcHJpY2VcLXJlbGF0aW9uczsKK+m+kSA8IGhpZ2hcLWFuZFwtYnJpZ2h0Owor5paw5Lu7IDwgbmV3bHlcLWFwcG9pbnRlZDsKK+mcuOS9lCA8IGZvcmNpYmx5XC1vY2N1cHk7CivpvJUgPCByYXR0bGVcLW9mXC1kcnVtczsKK+W5vuWNgeWEhCA8IHNldmVyYWxcLWJpbGxpb247Civnl4XprZQgPCBzZXJpb3VzXC1pbGxuZXNzOwor5bi455SoIDwgaW5cLWNvbW1vblwtdXNhZ2U7CivlhrDno5ogPCBpY2VcLWNyZWFtXC1icmljazsKK+m0kiA8IHNwZWNpZXNcLW9mXC1sYXJrOwor55m96I+cIDwgY2hpbmVzZVwtY2FiYmFnZTsKK+m0giA8IHRoZVwtdGFpbG9yXC1iaXJkOwor6bO7IDwgdGhlXC13aWxkXC1waWdlb247Civps5MgPCBjaGluZXNlXC1oZXJyaW5nOwor6bGhIDwgdGhlXC1jdXR0bGVcLWZpc2g7CivpsYUgPCBhXC1raW5kXC1vZlwtdGVuY2g7CivkuI3lvoXoqqogPCBuZWVkbGVzc1wtdG9cLXNheTsKK+aJuemHj+eUn+eUoiA8IHRvXC1tYXNzXC1wcm9kdWNlOwor6a2wIDwgdGhlXC1mbHlpbmdcLWZpc2g7CivlnKjlvojlpJrmlrnpnaIgPCBpblwtbWFueVwtYXNwZWN0czsKK+mrviA8IHRhaWxcLW9mXC1hXC1jb21ldDsKK+mrtCA8IGRpc2hldmVsZWRcLWhhaXI7Civmk43kvZzpgJ/njocgPCBvcGVyYXRpbmdcLXNwZWVkOwor5by35YqgIDwgaW1wb3NlXC1ieVwtZm9yY2U7CivpqJggPCBhXC1waWViYWxkXC1ob3JzZTsKK+mlhyA8IHRvXC1lYXRcLXRvb1wtbXVjaDsKK+miuyA8IGZsb2F0aW5nXC1pblwtYWlyOwor6aKuIDwgc3Rvcm1cLXdoaXJsd2luZDsKK+WkluS6iyA8IGZvcmVpZ25cLWFmZmFpcnM7Civoga/lkIjnmbzooaggPCBqb2ludFwtc3RhdGVtZW50Owor6YKK5ZywIDwgYm9yZGVyXC1kaXN0cmljdDsKK+mfniA8IGFuXC1vcmFuZ2VcLWNvbG9yOwor6Z60IDwgc2FkZGxlXC11cFwtaG9yc2U7CivpnbggPCBhXC1jaGlsZCcnc1wtc2hvZXM7Civpm7EgPCBzbm93aW5nXC1oZWF2aWx5Owor6IiM6Z2iIDwgYmxhZGVcLW9mXC10b25ndWU7CivlibXoqJjpjIQgPCB0b1wtc2V0XC1hXC1yZWNvcmQ7CivokZfkvZwgPCBhXC1saXRlcmFyeVwtd29yazsKK+eZveexsyA8IFwocG9saXNoZWRcKVwtcmljZTsKK+eAleiHqCA8IG9uXC10aGVcLXZlcmdlXC1vZjsKK+S4jeWujOWFqOiRiSA8IGluY29tcGxldGVcLWxlYWY7Civpgbjllq4gPCBcKHNvZnR3YXJlXClcLW1lbnU7Civln7fms5UgPCBsYXdcLWVuZm9yY2VtZW50Owor6Y6kIDwgc291bmRcLW9mXC1hXC1iZWxsOwor5LiN5ZCN5pW4IDwgYWJzdHJhY3RcLW51bWJlcjsKK+mAsuWxlSA8IHRvXC1tYWtlXC1oZWFkd2F5Owor54K65q2kIDwgZm9yXC10aGlzXC1yZWFzb247Civphr4gPCB1bmZpbHRlcmVkXC13aW5lOwor5qC45Y+N5oeJ5aCGIDwgbnVjbGVhclwtcmVhY3RvcjsKK+e2k+a/n+aUuemdqSA8IGVjb25vbWljXC1yZWZvcm07CivphLkgPCBuYW1lXC1vZlwtYVwtc3RhdGU7Civlu6Dlj7IgPCBmYWN0b3J5XC1oaXN0b3J5Owor5YWJ56OBIDwgbWFnbmV0b1wtb3B0aWNhbDsKK+mamOWPoyA8IFwobW91bnRhaW5cKVwtcGFzczsKK+e2suWdgCA8IFwoaW50ZXJuZXRcKVwtc2l0ZTsKK+eVq+mdoiA8IFwocGljdHVyZVwpXC1mcmFtZTsKK+iPnOWcsCA8IHZlZ2V0YWJsZVwtZmllbGQ7CivnlZzpoZ4gPCBkb21lc3RpY1wtYW5pbWFsOwor6LqAIDwgdG9cLXN0dW1ibGVcLW92ZXI7CivnuL3ntpPnkIYgPCBnZW5lcmFsXC1tYW5hZ2VyOwor6LauIDwgZWFzaWx5XC1wcm92b2tlZDsKK+WNiuWjgeaxn+WxsSA8IGhhbGZcLW9mXC1jb3VudHJ5Owor5oqx6aSKIDwgYWRvcHRcLVwoYVwtY2hpbGRcKTsKK+WfjuaokyA8IGNpdHlcLWdhdGVcLXRvd2VyOwor6KuhIDwgcG9zdGh1bW91c1wtbmFtZTsKK+aOoeeoriA8IHNlZWRcLWNvbGxlY3Rpbmc7Civkv4Tlt7TlupXkup7mm7ggPCBib29rXC1vZlwtb2JhZGlhaDsKK+iokiA8IGhlc2l0YXRlXC10b1wtc2F5Owor5Y+k5YW46Z+z5qiCIDwgY2xhc3NpY2FsXC1tdXNpYzsKK+iKseeZvSA8IGdyaXp6bGVkXC1cKGhhaXJcKTsKK+S4jeWPr+WkmuW+lyA8IGhhcmRcLXRvXC1jb21lXC1ieTsKK+ilvCA8ICcna2ltb25vJydcLXNsZWV2ZTsKK+iljCA8IHVubGluZWRcLWdhcm1lbnQ7CivopKcgPCB1bmxpbmVkXC1jbG90aGVzOwor6YeN5paw6ZaL5aeLIDwgcmVzdW1lXCxcLXJlc3RhcnQ7CivlsY3pq5QgPCBcKGxpZmVsZXNzXClcLWJvZHk7CivlnJbnsL0gPCBcKGNvbXB1dGVyXClcLWljb247Civlt7TmnJsgPCBsb29rXC1mb3J3YXJkXC10bzsKK+iemiA8IGVyaXN0YWxpc1wtdGVuYXg7CivlsaTpm7IgPCBzdHJhdHVzXC1cKGNsb3VkXCk7Civmlbjnmb7okKwgPCBzZXZlcmFsXC1taWxsaW9uOwor5ou86LW35L6GIDwgdG9cLXB1dFwtdG9nZXRoZXI7CivnsYznorwgPCBiYXJnYWluaW5nXC1jaGlwOwor6Je2IDwgYVwta2luZFwtb2ZcLXBsYW50Owor6JWiIDwgZWRpYmxlXC1hbWFyYW50aDsKK+iVjSA8IGFsaXNtYVwtcGxhbnRhZ3M7CivolL4gPCBraW5kXC1vZlwtYnJhbWJsZTsKK+iSqCA8IGx1c2hcLXZlZ2V0YXRpb247CivokpMgPCBhblwtZWRpYmxlXC13YXRlcjsKK+mbu+WtkOmDteS7tiA8IGVsZWN0cm9uaWNcLW1haWw7CivpmY3lg7kgPCBwcmljZVwtcmVkdWN0aW9uOwor6JGRIDwgdGhlXC1yYXBlXC10dXJuaXA7CivnsbPnsonogokgPCByaWNlXC1mbG91clwtbWVhdDsKK+aomeaogSA8IFwobWFya2luZ1wpXC1zdGFrZTsKK+mWieacgyA8IGNsb3NlXC1hXC1tZWV0aW5nOwor6ImFIDwgYVwtZGVzcGF0Y2hcLWJvYXQ7CivntJTlsawgPCBwdXJlXC1hbmRcLXNpbXBsZTsKK+WFieamriA8IGhvbm9yXC1hbmRcLWdsb3J5Owor6IWiIDwgdGhlXC1jb2xsYXJcLWJvbmU7CivovqblrbggPCB0b1wtcnVuXC1hXC1zY2hvb2w7CivmqJnmnYYgPCBzdXJ2ZXlvcicnc1wtcG9sZTsKK+W5o+WItiA8IGN1cnJlbmN5XC1zeXN0ZW07CivloLHliLAgPCByZXBvcnRcLWZvclwtZHV0eTsKK+e9vyA8IG5ldFwtY2F0Y2hcLWJpcmRzOwor57aT5r+f5YmN6YCUIDwgZWNvbm9taWNcLWZ1dHVyZTsKK+W5tOS7vSA8IHBhcnRpY3VsYXJcLXllYXI7Civlt6XoroDlrbjmoKEgPCB0aGVcLXJlZm9ybWF0b3J5Owor5Z+65ZywIDwgXChtaWxpdGFyeVwpXC1iYXNlOwor5Zq06YeN6Zec5YiHIDwgc2VyaW91c1wtY29uY2VybjsKK+WFieaYjiA8IGJyaWdodFwtXChmdXR1cmVcKTsKK+mrmOaKgOihkyA8IGhpZ2hcLXRlY2hub2xvZ3k7Civkv53ph4sgPCByZWxlYXNlXC1vblwtYmFpbDsKK+e1jSA8IHRvXC1sYXlcLXRoZVwtd2FycDsKK+e2k+a/n+WNseapnyA8IGVjb25vbWljXC1jcmlzaXM7CivlsITpoLsgPCByYWRpb1wtZnJlcXVlbmN5Owor5YuV5oWL5Yqp6KmeIDwgYXNwZWN0XC1wYXJ0aWNsZTsKK+mWiemfs+evgCA8IGNsb3NlZFwtc3lsbGFibGU7CivnsJQgPCBhXC1jb2F0XC1yYWluY29hdDsKK+evsCA8IGFcLWJhbWJvb1wtYmFza2V0Owor6ayl54itIDwgc3RydWdnbGVcLVwod2l0aFwpOwor6KOh5qC5IDwgXChyb25hbGRcKVwtcmVhZ2FuOwor56mEIDwgcGFuaWNsZWRcLW1pbGxldDsKK+emiyA8IG9mZmVyXC1zYWNyaWZpY2U7Civno6ogPCBhXC1oaWdoXC1tb3VudGFpbjsKK+aatOi3s+WmgumbtyA8IHN0YW1wXC13aXRoXC1mdXJ5Owor5oqX6KGhIDwgY29udGVuZFwtYWdhaW5zdDsKK+e0muWIpSA8IFwobWlsaXRhcnlcKVwtcmFuazsKK+ethuiqpCA8IGFcLXNsaXBcLW9mXC1hXC1wZW47Civlhavlr7YgPCBlaWdodFwtdHJlYXN1cmVzOwor55m+5bm0IDwgYVwtaHVuZHJlZFwteWVhcnM7Civku6Xopb/ntZDmm7ggPCBib29rXC1vZlwtZXpla2llbDsKK+aRmOWAnyA8IHRvXC1ib3Jyb3dcLW1vbmV5Owor5YyW5a245q2m5ZmoIDwgY2hlbWljYWxcLXdlYXBvbjsKK+eYiCA8IHByb2xvbmdlZFwtZmV2ZXI7CivnmIMgPCBzb3Jlc1wtZnJvbVwtY29sZDsKK+eXviA8IGNocm9uaWNcLWlsbG5lc3M7Civnl7UgPCBhXC1oZWFydFwtc3ltcHRvbTsKK+eXriA8IGFcLXN3ZWxsZWRcLWJlbGx5Owor55egIDwgYWNoaW5nXC1vZlwtbGltYnM7Civnl4EgPCBjaHJvbmljXC1tYWxhcmlhOwor55WsIDwgcmVjbGFpbWVkXC1maWVsZDsKK+mVt+WumCA8IHNlbmlvclwtb2ZmaWNpYWw7CivomZvpm7vot68gPCB2aXJ0dWFsXC1jaXJjdWl0Owor55m76KiY55So5oi2IDwgcmVnaXN0ZXJlZFwtdXNlcjsKK+eoruaXj+S4u+e+qeiAhSA8IHJhY2lzdFwtXChwZXJzb25cKTsKK+eQrSA8IGphZGVcLWxpa2VcLXN0b25lOwor5b6e5Y675bm0IDwgc2luY2VcLWxhc3RcLXllYXI7Civnj6cgPCBtb3RoZXJcLW9mXC1wZWFybDsKK+WFpeWigyA8IGVudGVyXC1hXC1jb3VudHJ5Owor54+HIDwgY2FydmluZ1wtb25cLWphZGU7CivlmrTph43llY/poYwgPCBzZXJpb3VzXC1wcm9ibGVtOwor6IeC57SXIDwgXChibGFja1wpXC1hcm1iYW5kOwor546fIDwgc3RyZWFrc1wtaW5cLWphZGU7Civnlbbli5nkuYvmgKUgPCB1cmdlbnRcLXByaW9yaXR5Owor542xIDwgYVwta2luZFwtb2ZcLW90dGVyOwor6LuN5qChIDwgbWlsaXRhcnlcLXNjaG9vbDsKK+eLqyA8IG5hbWVcLW9mXC1hXC10cmliZTsKK+i7n+S7tuezu+e1sSA8IHNvZnR3YXJlXC1zeXN0ZW07CivniYQgPCB0b1wtd2Fsa1wtcmFwaWRseTsKK+eGkyA8IHRoZVwtYmFua1wtYVwtZmlyZTsKK+eEtSA8IHRvXC10ZW1wZXJcLXN0ZWVsOwor5oqK6Ii1IDwgaG9sZFwtdGhlXC1ydWRkZXI7Civoj7Llvovos5MgPCB0aGVcLXBoaWxpcHBpbmVzOwor6KKr5o2VIDwgYmVcLXVuZGVyXC1hcnJlc3Q7CivngJ4gPCBwb29sXC1pblwtYVwtcml2ZXI7CivmvZkgPCByaXZlclwtaW5cLXNoYW54aTsKK+e2sue1oeeAj+imveWZqCA8IG5ldHdvcmtcLWJyb3dzZXI7Civmu44gPCBjb3VudHlcLWluXC1oZW5hbjsKK+acrOaXj+iqniA8IG5hdGl2ZVwtbGFuZ3VhZ2U7Civms6kgPCByaXNpbmdcLW9mXC13YXRlcjsKK+izvOeJqeS4reW/gyA8IHNob3BwaW5nXC1jZW50ZXI7CivmspogPCBpc2xldFwtaW5cLXN0cmVhbTsKK+eZvuWNgSA8IGFcLWh1bmRyZWRcLW9yXC1zbzsKK+WdkOWlvSA8IHRvXC1zaXRcLXByb3Blcmx5Owor57WG6IWz55+zIDwgc3R1bWJsaW5nXC1ibG9jazsKK+aEn+afk+iAhSA8IGluZmVjdGVkXC1wZXJzb247CivlpJrmqKPljJYgPCBkaXZlcnNpZmljYXRpb247CivmpqEgPCBxdWVyY3VzXC1kZW50YXRhOwor5aOB5aOY5qOu5Zq0IDwgY2xvc2VseVwtZ3VhcmRlZDsKK+akuiA8IGJlYW1cLW9mXC1hXC1ob3VzZTsKK+e2sueuoeWToSA8IG5ldHdvcmtcLW1hbmFnZXI7CivluJbmkpLnvoXlsLzov6blvozmm7ggPCAyXC10aGVzc2Fsb25pYW5zOwor6Yym6ZueIDwgZ29sZGVuXC1waGVhc2FudDsKK+afjiA8IGNhbHl4XC1vZlwtZmxvd2VyOwor5p+BIDwgbGFyZ2VcLXRpZVwtYmVhbXM7CivmnqwgPCBhblwtZXZlblwtZ3JhaW5lZDsKK+iHquauuiA8IHRvXC1raWxsXC1vbmVzZWxmOwor5pyjIDwgdGhlXC1yaXNpbmdcLW1vb247Civnkarmi4nln7rmm7ggPCBib29rXC1vZlwtbWFsYWNoaTsKK+mrmOaYgiA8IGluXC1oaWdoXC1zcGlyaXRzOwor6LK/5piT5aSl5Ly0IDwgdHJhZGluZ1wtcGFydG5lcjsKK+epv+mBjiA8IHRvXC1wYXNzXC10aHJvdWdoOwor5YKZ5oiwIDwgcHJlcGFyZVwtZm9yXC13YXI7CivmnIjku73mnIPorbAgPCBtb250aGx5XC1tZWV0aW5nOwor5pG7IDwgYVwtZGVsaWNhdGVcLWhhbmQ7CivlronouqsgPCBtYWtlXC1vbmUnJ3NcLWhvbWU7CivmuLjoqqogPCBkcnVtXC11cFwtc3VwcG9ydDsKK+iHs+aWvCA8IGdvXC1zb1wtZmFyXC1hc1wtdG87CivmiIQgPCB0b1wtYmVcLWluXC1hd2VcLW9mOwor56CU56m25aCx5ZGKIDwgcmVzZWFyY2hcLXJlcG9ydDsKK+WFiOmAsuatpuWZqCA8IGFkdmFuY2VkXC13ZWFwb247CivnlJ/niakgPCBsaXZpbmdcLWNyZWF0dXJlOwor5oi257GNIDwgY2Vuc3VzXC1yZWdpc3RlcjsKK+Wkp+eZvOmbt+mchiA8IGV4dHJlbWVseVwtYW5ncnk7CivlvqwgPCB0b1wtd2FuZGVyXC1hYm91dDsKK+W8tCA8IHJlZFwtbGFjcXVlclwtYm93Owor576O5ZyL5pS/5bqcIDwgdVwuc1wuXC1nb3Zlcm5tZW50Owor5qCh6IiNIDwgc2Nob29sXC1idWlsZGluZzsKK+W3uSA8IG51cHRpYWxcLXdpbmVjdXA7CivkuI3lubLmtokgPCBub25pbnRlcmZlcmVuY2U7CivlloToia8gPCBnb29kXC1hbmRcLWhvbmVzdDsKK+W1jiA8IG1vdW50YWluXC1yZWNlc3M7Civkup7niL7nmbzlkozlpafnsbPliqAgPCBhbHBoYVwtYW5kXC1vbWVnYTsKK+WzniA8IGhpZ2hcLWFuZFwtdW5ldmVuOwor5aGe54i+54m56KqeIDwgY2VsdGljXC1sYW5ndWFnZTsKK+aguOatpuW6qyA8IG51Y2xlYXJcLWFyc2VuYWw7CivlrqLmiLbmqZ/ou5/ku7YgPCBjbGllbnRcLXNvZnR3YXJlOwor5o6q6L6t5by356GsIDwgc3Ryb25nbHlcLXdvcmRlZDsKK+i7jeWCmSA8IFwobWlsaXRhcnlcKVwtYXJtczsKK+mmluiFpiA8IGhlYWRcLVwob2ZcLXN0YXRlXCk7CivlronokawgPCBidXJ5XC1cKHRoZVwtZGVhZFwpOwor6Ieq5YuV5ZSu6LKo5qmfIDwgdmVuZGluZ1wtbWFjaGluZTsKK+WksiA8IGFkdmFuY2VcLXF1aWNrbHk7CivkuK3nvo7mtLIgPCBjZW50cmFsXC1hbWVyaWNhOwor5qW15YqbIDwgZG9cLWF0XC1hbGxcLWNvc3RzOwor6LeR5q2lIDwgdG9cLXdhbGtcLXF1aWNrbHk7CivlnbQgPCBhXC1jbG9kXC1vZlwtZWFydGg7CivllqMgPCB0b1wtYnJlYXRoZVwtdXBvbjsKK+WUsiA8IGZvcmNlZFwtbGF1Z2h0ZXI7Civlhazlj7jmnIPorbAgPCBjb21wYW55XC1tZWV0aW5nOwor6LK26KmeIDwgZGVyb2dhdG9yeVwtdGVybTsKK+S6kumAoyA8IGludGVyY29ubmVjdGlvbjsKK+WOnCA8IGFcLW1vdW50YWluXC1wZWFrOwor5aSp5Li75pWZIDwgY2F0aG9saWNcLWNodXJjaDsKK+WMiSA8IG5vaXNlXC1vZlwtd2F0ZXJzOwor5YyEIDwgdG9cLWJlZ1wtZm9yXC1hbG1zOwor5pS56K6K5b2i5YOPIDwgdHJhbnNmaWd1cmF0aW9uOwor5YqYIDwgbWFrZVwtaW50b1wtbWluY2U7CivmgrLps7QgPCB1dHRlclwtc2FkXC1jYWxsczsKK+a7v+aEjyA8IHRvXC1iZVwtc2F0aXNmaWVkOwor5rW36YGLIDwgc2hpcHBpbmdcLWJ5XC1zZWE7CivnlZnlrbggPCB0b1wtc3R1ZHlcLWFicm9hZDsKK+mHkeijoeWlhyA8IFwobmV3dFwpXC1naW5ncmljaDsKK+S+v+ainSA8IFwoaW5mb3JtYWxcKVwtbm90ZTsKK+WCvSA8IHRlcnJvclwtc3RyaWNrZW47CivnlJrmiJYgPCBzb1wtbXVjaFwtc29cLXRoYXQ7CivkvZQgPCBvY2N1cHlcLWJ5XC1mb3JjZTsKK+WxseWzsCA8IFwobW91bnRhaW5cKVwtcGVhazsKK+a6q+aflCA8IGdlbnRsZVwtYW5kXC1zb2Z0Owor5Lm4IDwgZmVtaW5pbmVcLXN1ZmZpeDsKK+mrmOS4rSA8IGhpZ2hcLWFuZFwtbWlkZGxlOwor55m+5YWS5YWr5Y2BIDwgYWJvdXRcLWFcLWh1bmRyZWQ7CivluJbmkpLnvoXlsLzov6bliY3mm7ggPCAxXC10aGVzc2Fsb25pYW5zOwor5LahIDwgc291bmRcLW9mXC1iaXRpbmc7Civkto4gPCBzb3VuZFwtb2ZcLWJyZWF0aDsKK+iDg+eXhSA8IHN0b21hY2hcLXRyb3VibGU7CivktL4gPCB0b1wtZ3JpbmRcLWJhcmxleTsKK+S0riA8IGNha2VzXC1wZlwtbGVhdmVuOwor5aSa5qih5YWJ57qWIDwgbXVsdGltb2RlXC1maWJlcjsKK+WQjOm9oSA8IG9mXC10aGVcLXNhbWVcLWFnZTsKK+i7n+S7tuW4guWgtCA8IHNvZnR3YXJlXC1tYXJrZXQ7CivmoKHlnJLpqqjlubkgPCBjYW1wdXNcLWJhY2tib25lOwor5K+EIDwgYVwtcGllYmFsa1wtaG9yc2U7Civkrr0gPCBiaXRcLWZvclwtYVwtaG9yc2U7CivkrrUgPCBuYW1lXC1vZlwtYVwtaG9yc2U7CivkrrEgPCBhXC1raW5kXC1vZlwtYmVhc3Q7CivkrqcgPCBsb25nXC1oYWlyXC1ob3JzZTsKK+SuoiA8IGFcLXdhbGtpbmdcLWhvcnNlOwor5K6OIDwgYVwtcnVubmluZ1wtaG9yc2U7CivkrbwgPCBkYXJrXC1ibHVlXC1ob3JzZTsKK+SsqyA8IGNsYXJmaWVkXC1idXR0ZXI7CivkrIEgPCBhXC1saWdodFwtY3ljbG9uZTsKK+WQuOmfsyA8IHNvdW5kXC1hYnNvcmJpbmc7CivmspLmnInoga/nuasgPCB0b1wtYmVcLXVucmVsYXRlZDsKK+SqriA8IGJlYXV0aWZ1bFwtc291bmQ7CivkqpUgPCB0b1wtd3JhcFwtb3JcLWJhbmQ7CivkqbkgPCB0b1wtcmVwYWlyXC1zaG9lczsKK+SpkiA8IGRyZXNzZWRcLWxlYXRoZXI7CivpurvphokgPCB0b1wtYW5hZXN0aGV0aXplOwor5KmEIDwgdG9cLWZhY2VcLXRvXC1mYWNlOwor5KiiIDwgYVwtcGFzc2luZ1wtY2xvdWQ7CivkqJYgPCB0b1wtc3RvcFwtcmFpbmluZzsKK+SogCA8IHRvXC1sYXlcLWluXC1ncmFpbjsKK+SnryA8IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+e2sue1oeimj+WKg+S6uuWToSA8IG5ldHdvcmtcLXBsYW5uZXI7CivkpqsgPCBpbnNpZGVcLXRoZVwtZG9vcjsKK+aKleWllCA8IHRvXC1zZWVrXC1zaGVsdGVyOwor5KWXIDwgYVwtYnJhbmRpbmdcLWlyb247CivkpLEgPCBhXC1zb2xlbW5cLXBsZWRnZTsKK+SjtiA8IHVuc3RyYWluZWRcLXdpbmU7CivkvovmnIMgPCByZWd1bGFyXC1tZWV0aW5nOwor5YWx55Si6buoIDwgY29tbXVuaXN0XC1wYXJ0eTsKK+SipiA8IHRvXC1sZWFkXC10aGVcLXdheTsKK+SiliA8IHRvXC1iZVwtc2NhdHRlcmVkOwor5KKBIDwgdGlyZVwtb2ZcLWFcLXdoZWVsOwor5KG7IDwgc2hha2VcLW9mXC1hXC1jYXJ0Owor5KGoIDwgY29ubmVjdGVkXC1jYXJ0czsKK+mkheiCpSA8IGNha2VcLWZlcnRpbGl6ZXI7CivkoZAgPCB0b1wtbW92ZVwtc3dpZnRseTsKK+S4lueVjOacgOWkpyA8IHdvcmxkJydzXC1sYXJnZXN0Owor5KC1IDwgdG9cLXdlYXJcLWNsb3RoZXM7CivkoKggPCB3YWxraW5nXC1yYXBpZGx5Owor5bCW6Yqz5om56KmVIDwgc2hhcnBcLWNyaXRpY2lzbTsKK+S4jeimi+W+lyA8IG5vdFwtbmVjZXNzYXJpbHk7Civkna8gPCB0b1wtY2hhbmdlXC1oYW5kczsKK+SdkCA8IGFcLWNhc3RyYXRlZFwtaG9nOwor5JyEIDwgc2xvd1wtb25cLXRhbGtpbmc7Civkm7UgPCB0b1wtdGVhY2hcLW9yYWxseTsKK+SbnyA8IHdpbGRcLXN0YXRlbWVudHM7Civkm5QgPCB0b1wtaG9sZFwtaW5cLWhhbmQ7CivmmrTpm6ggPCB0b3JyZW50aWFsXC1yYWluOwor5JqmIDwgc2xhbnRlZFwtY29ybmVyczsKK+SapSA8IHRvXC1hZGp1c3RcLWFcLWJvdzsKK+SZuyA8IHRvXC1zdGVhbFwtYVwtbG9vazsKK+SZqCA8IHRvXC13cmFwXC1vclwtYmluZDsKK+SZnSA8IHVuZGVyXC1nYXJybWVudHM7Civkl74gPCBjb3JiaWN1bGFcLWxlYW5hOwor5Ja8IDwgdGhlXC1kdW5nXC1iZWV0bGU7CivklpkgPCBhXC1yZXN0aW5nXC10aWdlcjsKK+SWiSA8IHRvXC1yb2FyXC1vclwtaG93bDsKK+SVmSA8IHRvXC1zZXRcLWluXC1vcmRlcjsKK+SSjCA8IGRhcmtcLWJsdWVcLWNvbG9yOwor5I+yIDwgcHJvdHJ1ZGVkXC1ib25lczsKK+S+v+WutCA8IGluZm9ybWFsXC1kaW5uZXI7CivkjrMgPCBsb3NlXC1vZlwtdGhlXC1lYXI7CivkjokgPCB0b1wtd2Fsa1wtc3dpZnRseTsKK+S4iui/sCA8IGFib3ZlXC1tZW50aW9uZWQ7Civki7cgPCBhXC1raW5kXC1vZlwtdGhpY2s7CivkirUgPCB5b3VuZ1wtYW5kXC1zbWFsbDsKK+SKlyA8IGFcLWtpbmRcLW9mXC1ncmFpbjsKK+SKiSA8IHByZXNlcnZlZFwtZnJ1aXQ7CivkiacgPCBzb3VuZFwtb2ZcLWJhbWJvbzsKK+izgOW5tOeJhyA8IG5ld1wteWVhcicnc1wtY2FyZDsKK+SFtyA8IGFuXC1lYXJcLW9mXC1ncmFpbjsKK+SFsCA8IGFcLWtpbmRcLW9mXC1ncmFzczsKK+aomea6luWMliA8IHN0YW5kYXJkaXphdGlvbjsKK+SEriA8IGRhcmtcLXJpY2VcLXBsYW50Owor5ISVIDwgZ29kXC1vZlwtdGhlXC1sYW5kOwor6Zu76IWm57O757WxIDwgY29tcHV0ZXJcLXN5c3RlbTsKK+SDtyA8IGFcLWtpbmRcLW9mXC1zdG9uZTsKK+SDkiA8IHBvb3JcLWFuZFwtYmFycmVuOwor5IG0IDwga2VlcFwtb25cLWxvb2tpbmc7CivkgbMgPCB0b1wtbG9zZVwtb25lXC1leWU7Civlr6blvYggPCBsaXZlXC1hbW11bml0aW9uOwor6LKo5bmj5Y2x5qmfIDwgbW9uZXRhcnlcLWNyaXNpczsKK+SAiSA8IGZvb2RcLWNvbnRhaW5lcnM7Civjv7EgPCBkcnlcLWFuZFwtZGVjYXllZDsKK+O+qSA8IG1hbGlnbmFudFwtYm9pbHM7CivlhbHkuqvku6XlpKrntrLntaEgPCBzaGFyZWRcLWV0aGVybmV0Owor55Si5YC8IDwgdmFsdWVcLW9mXC1vdXRwdXQ7CivmmpfpgIHnp4vms6IgPCBtYWtlXC1leWVzXC1hdFwtc2I7Civkvb/mu7/mhI8gPCB0b1wtbWFrZVwtY29udGVudDsKK+elneizgCA8IHRvXC1jb25ncmF0dWxhdGU7CivjvJUgPCBwdWxwXC1vZlwtYVwtbWVsb247CivjvJQgPCBhXC1raW5kXC1vZlwtbWVsb247CivkuI3pj73pi7wgPCBzdGFpbmxlc3NcLXN0ZWVsOwor47yCIDwgYVwtY3JhY2tcLWluXC1qYWRlOwor47uNIDwgbmFtZVwtb2ZcLWFcLXN3b3JkOwor47qMIDwgZW5kbGVzc1wtYmFya2luZzsKK+S7peeCuiA8IGNvbnNpZGVyXC1cKHRoYXRcKTsKK+O5pyA8IGZveFwtbGlrZVwtYW5pbWFsOwor47ixIDwgaG9ybmxlc3NcLWNhdHRsZTsKK+O4qSA8IHRvXC1kZXNpc3RcLWFuXC1veDsKK+aguOW9iCA8IG51Y2xlYXJcLXdhcmhlYWQ7CivjuJEgPCBhXC1jb29raW5nXC1zdG92ZTsKK+WNsOW6puS6uiA8IGluZGlhblwtXChwZXJzb25cKTsKK+S4iuiqsiA8IHRvXC1hdHRlbmRcLWNsYXNzOwor5aWn6YGL5p2RIDwgb2x5bXBpY1wtdmlsbGFnZTsKK+O3jSA8IGFcLWNoZW1pY2FsXC10ZXJtOwor56ym5ZCIIDwgaW5cLWtlZXBpbmdcLXdpdGg7CivmioDlgIYgPCB0cmlja3lcLW1hbmV1dmVyOwor5pqX6YGp5oeJIDwgZGFya1wtYWRhcHRhdGlvbjsKK+aVuOS9jee2sui3ryA8IGRpZ2l0YWxcLW5ldHdvcms7Civjs78gPCByb2xsaW5nXC1iaWxsb3dzOwor47OXIDwgYmFua1wtb2ZcLWFcLXJpdmVyOwor47KUIDwgd29vbGVuXC10ZXh0aWxlczsKK+OxjiA8IGNhbm5vdFwtYmVcLWtub3duOwor47CsIDwgc2hvcnR3aW5kZWRuZXNzOwor47CXIDwgYVwta2luZFwtb2ZcLW1hcGxlOwor47CIIDwgbmljZVwtYW5kXC1wcmV0dHk7Civjr7EgPCBhblwtZW5sYXJnZWRcLWJhZzsKK+OvpCA8IHRoZVwtanVqdWJlXC10cmVlOwor46+UIDwgdG9cLWh1bGxcLWhlYXZpbHk7Civms7Doqp4gPCB0aGFpXC1cKGxhbmd1YWdlXCk7CivjrqEgPCB0b1wtbGlnaHRcLWFcLWZpcmU7Civlr7Xlo54gPCBzcG9pbFwtXChhXC1jaGlsZFwpOwor462kIDwgdGhlXC1jb252b2x2dWx1czsKK+S6pOeVjCA8IGNvbW1vblwtYm91bmRhcnk7CivomZvmk6zntrLntaEgPCB2aXJ0dWFsXC1uZXR3b3JrOwor5YWJ5piO5pel5aCxIDwgZ3VhbmdtaW5nXC1kYWlseTsKK+OroCA8IGFcLWtpbmRcLW9mXC13YXRlcjsKK+OqqyA8IHdpc2VcLWFuZFwtY2xldmVyOwor5q235Y+y5LmF6YGgIDwgYW5jaWVudFwtaGlzdG9yeTsKK+OnjiA8IGZvcmtlZFwtYnJhbmNoZXM7CivogIHnmb7lp5MgPCBvcmRpbmFyeVwtcGVvcGxlOwor46WeIDwgdG9cLXRoaW5rXC1kZWVwbHk7CivjpZsgPCB3aXRoXC1leHBlZGl0aW9uOwor46KeIDwgcm9vbXNcLWNvbm5lY3RlZDsKK+OijSA8IGFcLWxvbmdcLXZlcmFiZGFoOwor5aSr5aa75bqXIDwgZmFtaWx5XC1ydW5cLXNob3A7CivjobIgPCB0aWxlc1wtb25cLWFcLXJvb2Y7CivjoYAgPCByYWdnZWRcLWNsb3RoaW5nOwor45+UIDwgc3RlZXBcLWFuZFwtbG9mdHk7CivjnaUgPCBoYXZlXC1hXC1uaWdobWFyZTsKK+S4ieiQrCA8IHRoaXJ0eVwtdGhvdXNhbmQ7CivjnYUgPCB0b1wtZ2l2ZVwtc3Vja1wtdG87CivjnLIgPCB0b1wtaGF2ZVwtc3VycGx1czsKK+iyqOa6kCA8IHN1cHBseVwtb2ZcLWdvb2RzOwor45uwIDwgdG9cLW1hcnJ5XC1hXC13aWZlOwor45qmIDwgYVwtY2hhcm1pbmdcLWdpcmw7CivjmbwgPCBhXC1taWxpdGFyeVwtd2FsbDsKK+eql+W4mCA8IHdpbmRvd1wtY3VydGFpbnM7CivjmZcgPCBhXC1sdW1wXC1vZlwtZWFydGg7CivjmLogPCBjdWx0aXZhdGVkXC1sYW5kOwor5pyf56WoIDwgcHJvbWlzc29yeVwtbm90ZTsKK+OXvyA8IHRvXC1sYXVnaFwtbG91ZGx5Owor45WyIDwgdG9cLWdhZ1wtb3JcLWJyaWJlOwor45WYIDwgdG9cLXRha2VcLXBhcnRcLWluOwor45KfIDwgd2l0aFwtYVwtY2hhcm1pbmc7Civlj6Poqp4gPCBzcG9rZW5cLWxhbmd1YWdlOwor5pav5ouJ5aSr6KqeIDwgc2xhdmljXC1sYW5ndWFnZTsKK+engeeHnyA8IHByaXZhdGVseVwtb3duZWQ7CivlpJblnIvlhazlj7ggPCBmb3JlaWduXC1jb21wYW55Owor5a+S5YGHIDwgd2ludGVyXC12YWNhdGlvbjsKK+WTgOatjCA8IGFcLW1vdXJuZnVsXC1zb25nOwor5YWS5YyW6Z+7IDwgcmV0cm9mbGV4XC1maW5hbDsKK+eJvemAoyA8IFwoYmVcKVwtaW1wbGljYXRlZDsKK+aAp+ihjCA8IHNleHVhbFwtYWN0aXZpdHk7Civlrbjlo6sgPCBiYWNoZWxvclwtZGVncmVlOwor6LKg5pOUIDwgXChiZWFyXC1hXClcLWJ1cmRlbjsKK+WVhualreS4reW/gyA8IGJ1c2luZXNzXC1jZW50ZXI7CivkuIDnp5ggPCBmaXJzdFwtc2VjcmV0YXJ5Owor6Jel55O2IDwgbWVkaWNpbmVcLWJvdHRsZTsKK+aFmuaEpyA8IFwodG9cLWJlXClcLWFzaGFtZWQ7CivkurrmiY0gPCB0YWxlbnRlZFwtcGVyc29uOwor5LiN55SYIDwgdW5yZWNvbmNpbGVkXC10bzsKK+S4jeebuOS4iuS4iyA8IGVxdWFsbHlcLW1hdGNoZWQ7Civnj63lrZAgPCBvcmdhbml6ZWRcLWdyb3VwOwor5q+P6ZqUIDwgYXRcLWludGVydmFsc1wtb2Y7CivmhJvmiLQgPCBsb3ZlXC1hbmRcLWVzdGVlbTsKK+aEm+aIgCA8IGJlXC1pblwtbG92ZVwtd2l0aDsKK+apn+WvhuaWh+S7tiA8IHNlY3JldFwtZG9jdW1lbnQ7Civmna3lt54gPCBoYW5nemhvdVwtXChjaXR5XCk7CivllY/kuJYgPCB0b1wtYmVcLXB1Ymxpc2hlZDsKK+aCsuazoyA8IHdlZXBcLXdpdGhcLWdyaWVmOwor5rOV55CGIDwgbGVnYWxcLXByaW5jaXBsZTsKK+enqeW6jyA8IG9yZGVyXC1cKG9yZGVybHlcKTsKK+e2sue1oeaJk+WNsOapnyA8IG5ldHdvcmtcLXByaW50ZXI7CivlkI3niYcgPCBcKGJ1c2luZXNzXClcLWNhcmQ7Civml4XosrsgPCB0cmF2ZWxcLWV4cGVuc2VzOwor6LKh5ZyYIDwgZmluYW5jaWFsXC1ncm91cDsKK+aymeefsyA8IHNhbmRcLWFuZFwtc3RvbmVzOwor56aB5p6cIDwgZm9yYmlkZGVuXC1mcnVpdDsKK+mDtemBniA8IHRvXC1zZW5kXC1ieVwtbWFpbDsKK+adv+adv+WFreWNgeWbmyA8IHVuYWNjb21tb2RhdGluZzsKK+aekOWHuiA8IHRvXC1zZXBlcmF0ZVwtb3V0Owor56ys5LiA5YCL5bGk5qyhIDwgdGhlXC1maXJzdFwtc3RhZ2U7Civlhbfpq5ToqIjlioMgPCBhXC1jb25jcmV0ZVwtcGxhbjsKK+WllOilsiA8IGxvbmdcLXJhbmdlXC1yYWlkOwor5p2/5Yi3IDwgc2NydWJiaW5nXC1icnVzaDsKK+acjeW+niA8IG9iZXlcLVwoYW5cLW9yZGVyXCk7Civmlr3ooYwgPCB0b1wtcHV0XC1pblwtcGxhY2U7CivojqvlsLzljaHokIrmuqvmlq/ln7ogPCBtb25pY2FcLWxld2luc2t5Owor5paH5pu46JmV55CGIDwgd29yZFwtcHJvY2Vzc2luZzsKK+e9sOasviA8IFwoaW1wb3NlXC1hXClcLWZpbmU7Civpm4zpm4QgPCBtYWxlXC1hbmRcLWZlbWFsZTsKK+mCiumfsyA8IGxhdGVyYWxcLVwoc291bmRcKTsKK+avjeimqiA8IG1vdGhlclwtXChmb3JtYWxcKTsKK+acieiBr+e5qyA8IHRvXC1iZVwtY29ubmVjdGVkOwor56OB55ukIDwgXChjb21wdXRlclwpXC1kaXNrOwor6aCQ6Ziy5o6q5pa9IDwgcHJvdGVjdGl2ZVwtc3RlcDsKK+ekpualrSA8IG1pbmluZ1wtaW5kdXN0cnk7CivlhaznhLbooajnpLogPCB0b1wtc3RhdGVcLW9wZW5seTsKK+a1geWksSA8IGJlXC1kcmFpbmVkXC1hd2F5Owor5byV6LW3IDwgdG9cLWdpdmVcLXJpc2VcLXRvOwor8KOOtCA8IHN0dW1wXC1vZlwtYVwtdHJlZTsKK+itieeJqSA8IGV4aGliaXRcLVwobGVnYWxcKTsKK+e4q+ijnCA8IGRhcm5cLVwoY2xvdGhpbmdcKTsKK+e3qOmBuCA8IHNlbGVjdFwtYW5kXC1lZGl0Owor6LKg5YK157qN57qNIDwgaGVhdmlseVwtaW5cLWRlYnQ7Civlr6nliKTplbcgPCBwcmVzaWRpbmdcLWp1ZGdlOwor5LiK5a24IDwgdG9cLWdvXC10b1wtc2Nob29sOwor6aC75bi2IDwgZnJlcXVlbmN5XC1yYW5nZTsKK+aUv+imiyA8IHBvbGl0aWNhbFwtdmlld3M7CivmgrLlmIYgPCBzaWdoXC1tb3VybmZ1bGx5Owor5Y2K55SfIDwgaGFsZlwtYVwtbGlmZXRpbWU7CivljZrniakgPCBuYXR1cmFsXC1zY2llbmNlOwor57aT5r+f6auU5Yi2IDwgZWNvbm9taWNcLXN5c3RlbTsKK+S4jemBjueIvueIviA8IG1lcmVseVwtbWVkaW9jcmU7Civnm5zniYjogIUgPCBzb2Z0d2FyZVwtcGlyYXRlOwor5aSn6YOo5Lu9IDwgXChpblwpXC1sYXJnZVwtcGFydDsKK+a1geaEn+eXheavkiA8IGluZmx1ZW56YVwtdmlydXM7Civpg7XnpaggPCBcKHBvc3RhZ2VcKVwtc3RhbXA7CivmgbDlpb0gPCBhc1wtaXRcLXR1cm5zXC1vdXQ7CivmsKPmuqsgPCBhaXJcLXRlbXBlcmF0dXJlOwor55+u6IOWIDwgc2hvcnRcLWFuZFwtc3RvdXQ7Civoqp7ns7sgPCBsYW5ndWFnZVwtc3lzdGVtOwor6K6K5b2iIDwgYmVcLW91dFwtb2ZcLXNoYXBlOwor5Y2X5rW3IDwgc291dGhcLWNoaW5hXC1zZWE7CivlhrfmsKPmqZ8gPCBhaXJcLWNvbmRpdGlvbmVyOwor576O5YWDIDwgYW1lcmljYW5cLWRvbGxhcjsKK+S4luS6uiA8IFwoY29tbW9uXClcLXBlb3BsZTsKK+WQjeWWriA8IGxpc3RcLVwob2ZcLW5hbWVzXCk7Civpm7vno4EgPCBlbGVjdHJvbWFnbmV0aWM7CivmsJHmrIogPCBjaXZpbFwtbGliZXJ0aWVzOwor5pOa6KqqIDwgaXRcLWlzXC1zYWlkXC10aGF0Owor5Y6f5oCnIDwgb3JpZ2luYWxcLW5hdHVyZTsKK+ihm+eUn+WumOWToSA8IGhlYWx0aFwtb2ZmaWNpYWw7CivouoUgPCB3YWxrXC1jYXJlZnVsbHk7Civlt7QgPCBncmVhdGx5XC1kZXNpcmU7CivmnJ8gPCBwZXJpb2RcLW9mXC10aW1lOwor5Y+4IDwgdGFrZVwtY2hhcmdlXC1vZjsKK+eUpSA8IHNpc3Rlcicnc1wtY2hpbGQ7CivlsY8gPCBmb2xkaW5nXC1zY3JlZW47Civni5AgPCBzcGVjaWVzXC1vZlwtZm94Owor5rGJIDwgY2hpbmVzZVwtcGVvcGxlOwor5aa5IDwgeW91bmdlclwtc2lzdGVyOwor5LyBIDwgcGxhblwtYVwtcHJvamVjdDsKK+illiA8IG91dGVyXC1nYXJtZW50czsKK+WjgSA8IHBhcnRpdGlvblwtd2FsbDsKK+mfpiA8IHRhbm5lZFwtbGVhdGhlcjsKK+a9sCA8IGZsb29kaW5nXC1yaXZlcjsKK+ePoCA8IHByZWNpb3VzXC1zdG9uZTsKK+mUiyA8IHBvaW50XC1vZlwtc3BlYXI7Civkv5cgPCBzb2NpYWxcLWN1c3RvbXM7CivmqpAgPCBlYXZlc1wtb2ZcLWhvdXNlOwor6aqRIDwgcmlkZVwtaG9yc2ViYWNrOwor5Ye9IDwgY29ycmVzcG9uZGVuY2U7CivprY8gPCBraW5nZG9tXC1vZlwtd2VpOwor5p6aIDwgc3RhbGtcLW9mXC1zaHJ1YjsKK+S7siA8IG1pZGRsZVwtYnJvdGhlcjsKK+eQsyA8IGJlYXV0aWZ1bFwtamFkZTsKK+WHkSA8IHBpZWNlXC10b2dldGhlcjsKK+mDgSA8IHN3ZWV0XC1zbWVsbGluZzsKK+iKryA8IHBpdGhcLWZyb21cLXJ1c2g7CivnuJ4gPCB3aGl0ZVwtcmF3XC1zaWxrOwor5pesIDwgdGVuXC1kYXlcLXBlcmlvZDsKK+e2uiA8IGZpbmVcLXRoaW5cLXNpbGs7CivlpqggPCBpbnRlcmZlcmVcLXdpdGg7CivpqoQgPCBzcGlyaXRlZFwtaG9yc2U7CivmjrQgPCBib3hcLW9uZScnc1wtZWFyczsKK+WXryA8IGZpbmFsXC1wYXJ0aWNsZTsKK+WyrSA8IG1vdW50YWluXC1yaWRnZTsKK+a5mCA8IGh1bmFuXC1wcm92aW5jZTsKK+mKgyA8IGFuY2llbnRcLXdlYXBvbjsKK+mTriA8IGNsYW5naW5nXC1zb3VuZDsKK+iOuSA8IGx1c3Rlclwtb2ZcLWdlbXM7Civlg7sgPCBvdXRcLW9mXC10aGVcLXdheTsKK+a4uiA8IGVuZGxlc3NseVwtbG9uZzsKK+S9oyA8IGNvbW1pc3Npb25cLWZlZTsKK+WRmyA8IGNob2tlXC1ieVwtc21va2U7Civlh7AgPCBmZW1hbGVcLXBob2VuaXg7Civpl7ogPCBzbWFsbFwtZW50cmFuY2U7CivnvIAgPCBwYXRjaFwtdG9nZXRoZXI7CivnkosgPCBqYWRlXC1wbGF5dGhpbmc7Civmi7QgPCBiaW5kXC13aXRoXC1yb3BlOwor56enIDwgcmljZVwtc2VlZGxpbmdzOwor6JWDIDwgZm9yZWlnblwtdGhpbmdzOwor6YSCIDwgaHViZWlcLXByb3ZpbmNlOwor5qOxIDwgc3F1YXJlZFwtdGltYmVyOwor5qKXIDwgc3RlbVwtb2ZcLWZsb3dlcjsKK+iPsSA8IHdhdGVyXC1jaGVzdG51dDsKK+mVkSA8IHBvdW5kXC1zdGVybGluZzsKK+agqSA8IHNwZWNpZXNcLW9mXC1vYWs7Civnkp4gPCB1bnBvbGlzaGVkXC1nZW07Civpm68gPCBjbG91ZFwtcGF0dGVybnM7CivorrcgPCBzbG93XC1vZlwtc3BlZWNoOwor54uwIDwgZmllcmNlXC1sb29raW5nOwor5bOmIDwgbW91bnRhaW5cLXJhbmdlOwor5rmDIDwgc291bmRcLW9mXC13YXZlczsKK+idlyA8IGtpbmRcLW9mXC1sb2N1c3Q7CivnmpYgPCBhbmh1aVwtcHJvdmluY2U7CivphYsgPCBjaGllZlwtb2ZcLXRyaWJlOwor5aORIDwgYmVkXC1vZlwtdG9ycmVudDsKK+ezryA8IGdsdXRpbm91c1wtcmljZTsKK+eotyA8IGdvZFwtb2ZcLWNlcmVhbHM7Civlob4gPCB2aWxsYWdlXC1zY2hvb2w7Civni6kgPCB3aW50ZXJcLWh1bnRpbmc7CivmiI0gPCBkZWZlbmRcLWJvcmRlcnM7CivnkoAgPCBsdXN0cmVcLW9mXC1nZW1zOwor54mNIDwgd3JpdGluZ1wtdGFibGV0Owor6ZWMIDwgZW5ncmF2aW5nXC10b29sOwor6aWvIDwgZmFyZXdlbGxcLXBhcnR5Owor6bmCIDwgY2hpbmVzZVwtb3Jpb2xlOwor5ZuhIDwgb25lJydzXC1kYXVnaHRlcjsKK+a6nyA8IGRyaXp6bGluZ1wtcmFpbjsKK+mUjyA8IGtpbmRcLW9mXC1yYXBpZXI7CivlsZkgPCB0b1wtZWFzZVwtbmF0dXJlOwor546zIDwgdG9ydG9pc2VcLXNoZWxsOwor55GtIDwgYVwta2luZFwtb2ZcLWphZGU7CivmnYggPCBmb3JrXC1vZlwtYVwtdHJlZTsKK+WMkCA8IGZhbGxcLXByb3N0cmF0ZTsKK+egoyA8IGFcLXN0b25lXC1yb2xsZXI7Civpk6IgPCB1bml0XC1vZlwtd2VpZ2h0Owor6aqIIDwgdGVhbVwtb2ZcLWhvcnNlczsKK+WZsSA8IGxhdWdoXC1oZWFydGlseTsKK+ebsSA8IHdpZGVcLW9wZW5cLWV5ZXM7CivogIQgPCBlbGRlcmx5XC1wZXJzb247CivmppQgPCBiZXRlbFwtbnV0XC10cmVlOwor6K+kIDwgdG9cLWV4cG9zdHVsYXRlOwor6J2uIDwgdmVub21vdXNcLXNuYWtlOwor6aKNIDwgcml2ZXJcLWluXC1hbmh1aTsKK+alnSA8IG1lbGlhXC1qYXBvbmljYTsKK+idvCA8IGFcLW1vbGVcLWNyaWNrZXQ7CivojaogPCBhcm9tYXRpY1wtZ3Jhc3M7CivlqIwgPCBicm90aGVyJydzXC13aWZlOwor5pm3IDwgc2hhZG93c1wtb2ZcLXN1bjsKK+WXtSA8IHVzZWRcLWZvclwtc291bmQ7CivouIUgPCB0b1wtd2Fsa1wtYXJvdW5kOwor5o+GIDwgcHJpbWVcLW1pbmlzdGVyOwor54yVIDwgbWFjYWN1c1wtbW9ua2V5Owor5Y6dIDwgY3V0XC1vclwtZW5ncmF2ZTsKK+iRmiA8IG11bGJlcnJ5XC1mcnVpdDsKK+iAkiA8IGhhbmRsZVwtb2ZcLXBsb3c7Civkv4UgPCBvcm5hbWVudGFsXC1jYXA7Civoj70gPCBiZWFuc1wtYW5kXC1wZWFzOwor6Z6vIDwgc2FkZGxlXC1ibGFua2V0Owor6byQIDwgaW5jZW5zZVwtdHJpcG9kOwor6LCwIDwgYWNjdXNlXC1mYWxzZWx5Owor6aqxIDwgam9pbnRcLW9mXC1ib25lczsKK+ispiA8IHRcLXNwZWFrXC1zb2Z0bHk7Civno7QgPCBzdGVwc1wtb25cLWxlZGdlOwor5am6IDwgbmFtZVwtb2ZcLWFcLXN0YXI7CivloI0gPCBzaWRlXC1vZlwtYnJpZGdlOwor5qGrIDwgaG9yc2VcLWNoZXN0bnV0Owor5ry2IDwgaW5kZWNpcGhlcmFibGU7CivlraUgPCBvbmUnJ3NcLWNoaWxkcmVuOwor5rqxIDwgcml2ZXJcLWluXC1oZW5hbjsKK+m7pSA8IHRhdHRvb2luZ1wtZmFjZTsKK+i6kCA8IHRvXC1zdHJpZGVcLW92ZXI7Civoua8gPCBwYXdzXC1vZlwtYW5pbWFsOwor55uNIDwgd2hhdFw/XC13aHlcLW5vdFw/Owor5rqGIDwgcml2ZXJcLWluXC1odW5hbjsKK+ejsiA8IHRyaWRhY25hXC1naWdhczsKK+aYnSA8IGFcLWR1YWxcLXByb25vdW47Civmn70gPCB0eXBlXC1vZlwtd2lsbG93Owor57ysIDwgcGF0dGVybmVkXC1zaWxrOwor6am6IDwgbW91bnRlZFwtZXNjb3J0Owor6ZiKIDwgZ2F0ZVwtb2ZcLWhlYXZlbjsKK+iNqSA8IGFcLWtpbmRcLW9mXC13ZWVkOwor6IqOIDwgYVwta2luZFwtb2ZcLWhlcmI7Civpi4ggPCBzaWx2ZXJcLXBsYXRpbmc7CivpvoUgPCB0ZWV0aFwtcHJvdHJ1ZGU7CivmmaEgPCBsYXRlXC1hZnRlcm5vb247CivmqqAgPCBzdGFuZFwtZm9yXC1sYW1wOwor6YCtIDwgdG9cLWVzY2FwZVwtZnJvbTsKK+aTjeiqsiA8IG1pbGl0YXJ5XC1kcmlsbDsKK+S8iueUuOWckiA8IGdhcmRlblwtb2ZcLWVkZW47CivmiJDlk6HlnIsgPCBtZW1iZXJcLWNvdW50cnk7Civlhbfpq5TllY/poYwgPCBjb25jcmV0ZVwtaXNzdWU7CivljZTmnIMgPCBhblwtYXNzb2NpYXRpb247CivmlofniakgPCBjdWx0dXJhbFwtcmVsaWM7CivpgJroqIogPCBjb21tdW5pY2F0aW9uczsKK+WNseaIvyA8IGRlY3JlcGl0XC1ob3VzZTsKK+eJueW3pSA8IHNlY3JldFwtc2VydmljZTsKK+mbu+eHiCA8IGVsZWN0cmljXC1saWdodDsKK+mHo+mtmuiHuiA8IGRpYW95dVwtaXNsYW5kczsKK+WMl+altSA8IHRoZVwtbm9ydGhcLXBvbGU7CivopIfpn7vmr40gPCBjb21wb3VuZFwtZmluYWw7CivpoJDku5ggPCBwYXlcLWluXC1hZHZhbmNlOwor5ZyL6Ziy6aCQ566XIDwgZGVmZW5jZVwtYnVkZ2V0Owor5q665rCjIDwgbXVyZGVyb3VzXC1sb29rOwor56OB5aC0IDwgbWFnbmV0aWNcLWZpZWxkOwor6KOB5rib6LuN5YKZIDwgYXJtc1wtcmVkdWN0aW9uOwor54mZ5bqKIDwgYWx2ZW9sYXJcLXJpZGdlOwor5Y+D5YqgIDwgdG9cLXBhcnRpY2lwYXRlOwor5rCR5oSPIDwgcHVibGljXC1vcGluaW9uOwor5Ye65Y+j5ZWG5ZOBIDwgZXhwb3J0XC1wcm9kdWN0Owor5b6A5pelIDwgaW5cLWZvcm1lclwtZGF5czsKK+WLmOa4rCA8IHRvXC1pbnZlc3RpZ2F0ZTsKK+WGsOmHiyA8IFwob2ZcLW1pc2dpdmluZ3M7CivlpKfmqJMgPCBsYXJnZVwtYnVpbGRpbmc7CivmlLnpnanpgLLnqIsgPCByZWZvcm1cLXByb2Nlc3M7CivlhajnkIPos4foqIrntrIgPCB3b3JsZFwtd2lkZVwtd2ViOwor6JaE6IOO55O35ZmoIDwgZWdnc2hlbGxcLWNoaW5hOwor5oCq5Lq6IDwgc3RyYW5nZVwtcGVyc29uOwor54ef5qWtIDwgdG9cLWRvXC1idXNpbmVzczsKK+WhkeiGoCA8IHBsYXN0aWNcLWNlbWVudDsKK+aZmuS4iiA8IGluXC10aGVcLWV2ZW5pbmc7CivmlaPmraUgPCB0b1wtdGFrZVwtYVwtd2FsazsKK+itmOWIpSA8IHRvXC1kaXN0aW5ndWlzaDsKK+W5gOWkqumVtyA8IG92ZXJzaXplXC1mcmFtZTsKK+aTuuiVqeWQiueSsCA8IHN3aW5naW5nXC1yaW5nczsKK+WFqOeQg+awo+WAmSA8IGdsb2JhbFwtY2xpbWF0ZTsKK+WkseaOpyA8IG91dFwtb2ZcLWNvbnRyb2w7CivmlbjmnIggPCBzZXZlcmFsXC1tb250aHM7CivlvoDlvqkgPCB0b1wtcmVjaXByb2NhdGU7CivlsI3lpJbmlL/nrZYgPCBmb3JlaWduXC1wb2xpY3k7CivpnbbloLQgPCBzaG9vdGluZ1wtcmFuZ2U7Civns5bphosgPCBzd2VldFwtYW5kXC1zb3VyOwor5Ly055Sf5rCjIDwgYXNzb2NpYXRlZFwtZ2FzOwor5biz6JmfIDwgYWNjb3VudFwtbnVtYmVyOwor54iq5a2QIDwgXChhbmltYWwnJ3NcKVwtcGF3Owor5Yil566hIDwgbm9cLW1hdHRlclwtXCh3aG87CivpgLLooYzpgJrkv6EgPCB0b1wtY29tbXVuaWNhdGU7CivliKjnqIsgPCBwbGFuaW5nXC1sZW5ndGg7CivntKDoj5wgPCB2ZWdldGFibGVcLWRpc2g7CivkuI3lko7ml6LlvoAgPCBub3RcLWNlbnN1cmVcLXNiOwor6ZaL6LuKIDwgdG9cLWRyaXZlXC1hXC1jYXI7CivnhZnngasgPCBzbW9rZVwtYW5kXC1maXJlOwor6L2J6YGLIDwgdHJhbnNwb3J0YXRpb247Civlt6HoraYgPCBwb2xpY2VcLW9mZmljZXI7CivmoKHlnJLntrLntaEgPCBjYW1wdXNcLW5ldHdvcms7CivmlbjkvY3kv6HomZ8gPCBkaWdpdGFsXC1zaWduYWw7CivmlL7mmKAgPCBzaG93XC1cKGFcLW1vdmllXCk7CivniannkIblsaQgPCBwaHlzaWNhbFwtbGF5ZXI7Civoga/lkIjlnIsgPCB1bml0ZWRcLW5hdGlvbnM7Civoo73pgKAgPCB0b1wtbWFudWZhY3R1cmU7CivliKnnjocgPCBpbnRlcmVzdFwtcmF0ZXM7Civoi7HlnIvkurogPCBicml0aXNoXC1wZXJzb247CivnlJ/plbfmv4DntKAgPCBncm93dGhcLWhvcm1vbmU7Civnmb3nhrHljJYgPCB0dXJuXC13aGl0ZVwtaG90Owor5byx5bCPIDwgc21hbGxcLWFuZFwtd2VhazsKK+aVneWxoyA8IHdvcm5cLW91dFwtc2hvZXM7CivljYHkuIDmnIggPCBlbGV2ZW50aFwtbW9udGg7CivmjIfmj67kuK3lv4MgPCBjb21tYW5kXC1jZW50ZXI7Civnn67lrZAgPCBhXC1zaG9ydFwtcGVyc29uOwor5Y6f5a2Q5qC4IDwgYXRvbWljXC1udWNsZXVzOwor5oqK5YWE5byfIDwgc3dvcm5cLWJyb3RoZXJzOwor6YCf5rG6IDwgcXVpY2tcLWRlY2lzaW9uOwor6Zec56iFIDwgXChjdXN0b21zXClcLWR1dHk7Civnmb3omIcgPCBjb21tb25cLXBlcmlsbGE7Civmr5TlgLwgPCBzcGVjaWZpY1wtdmFsdWU7Civpm7voqbHnt5rot68gPCB0ZWxlcGhvbmVcLWxpbmU7Civln7rnnaMgPCBqZXN1c1wtXChjaHJpc3RcKTsKK+aOoui3ryA8IHRvXC1maW5kXC1hXC1wYXRoOwor6YGZ5o6nIDwgcmVtb3RlXC1jb250cm9sOwor5YyX5paX5pifIDwgdGhlXC1iaWdcLWRpcHBlcjsKK+mWi+eOqeeskSA8IHRvXC1wbGF5XC1hXC1qb2tlOwor6biOIDwgdGhlXC1tYW5nb1wtYmlyZDsKK+m2lyA8IGFcLWtpbmRcLW9mXC1oYXdrOwor5Lul5aSq57ay57Wh5bmAIDwgZXRoZXJuZXRcLWZyYW1lOwor6YGZ5oSfIDwgcmVtb3RlXC1zZW5zaW5nOwor55m96ImyIDwgd2hpdGVcLVwoY29sb3VyXCk7CivprqcgPCB0aGVcLXNoZWF0XC1maXNoOwor5pKl5qy+IDwgYWxsb2NhdGVcLWZ1bmRzOwor6ayYIDwgYmVhdXRpZnVsXC1oYWlyOwor6ayXIDwgaGVhZFwtb3JuYW1lbnRzOwor5bug5belIDwgZmFjdG9yeVwtd29ya2VyOwor6Kqe5rCj5Yqp6KmeIDwgbW9kYWxcLXBhcnRpY2xlOwor6auGIDwgc2hvdWxkZXJcLWJsYWRlOwor5q2j5aW9IDwganVzdFwtXChpblwtdGltZVwpOwor57SE5pu45Lqe6KiYIDwgYm9va1wtb2ZcLWpvc2h1YTsKK+aOouimliA8IHBheVwtYVwtdmlzaXRcLXRvOwor6aiMIDwgYVwtaG9yc2UnJ3NcLW1hbmU7CivppKEgPCBwYXN0cnlcLWZpbGxpbmc7CivppJcgPCBmb29kXC1pblwtdHJpcG9kOwor5byV5ZKOIDwgdGFrZVwtdGhlXC1ibGFtZTsKK+WvqeWIpOW4rSA8IGp1ZGdlbWVudFwtc2VhdDsKK+eZveeyieeXhSA8IHBvd2RlcnlcLW1pbGRldzsKK+WjgeWgsSA8IHdhbGxcLW5ld3NwYXBlcjsKK+aUueWWhCA8IHRvXC1tYWtlXC1iZXR0ZXI7CivntpPmv5/mnInmlYggPCBjb3N0XC1lZmZlY3RpdmU7CivloIXmsbrlkKboqo0gPCB0b1wtZmlybWx5XC1kZW55Owor6YCg5oiQIDwgdG9cLWJyaW5nXC1hYm91dDsKK+W5q+acgyA8IHNlY3JldFwtc29jaWV0eTsKK+mUqiA8IGFcLWtpbmRcLW9mXC10b29sOwor5pON5b+DIDwgdG9cLXdvcnJ5XC1hYm91dDsKK+mPtCA8IHRvXC1wbHVnXC1hXC1ob2xlOwor6Y6pIDwgbW91bHRcLXNhbWFyaXVtOwor5pu45a+r56ym6JmfIDwgd3JpdGluZ1wtc3ltYm9sOwor55m956iuIDwgdGhlXC13aGl0ZVwtcmFjZTsKK+mNhiA8IG1kXC1tZW5kZWxldml1bTsKK+mLqSA8IHBvaW50XC1vZlwtc3dvcmQ7Civpi4MgPCBsb2NrXC1sYW50aGFudW07Civoo5znvLogPCBmaWxsXC1hXC12YWNhbmN5Owor5Y+k5biM6IeYIDwgYW5jaWVudFwtZ3JlZWNlOwor6KW/5q2QIDwgd2VzdGVyblwtZXVyb3BlOwor5Lit5ZyL5Lq6IDwgY2hpbmVzZVwtcGVyc29uOwor6YCV5bqtIDwgdmVyeVwtZGlmZmVyZW50Owor5Y2h57SN57at5ouJ54i+6KeSIDwgY2FwZVwtY2FuYXZlcmFsOwor6KOc57a0IDwgbWVuZFwtXChjbG90aGVzXCk7CivkuI3nn6XmrbvmtLsgPCBhY3RcLXJlY2tsZXNzbHk7Civnm6PnnaPkurogPCBzdXBlcmludGVuZGVudDsKK+mbhuS4rSA8IHRvXC1jb25jZW50cmF0ZTsKK+mAqSA8IHRvXC1ydW5cLXF1aWNrbHk7CivpgbLliLAgPCB0b1wtYXJyaXZlXC1sYXRlOwor6Ly2IDwgbGlnaHRcLWNhcnJpYWdlOwor5rOi576F55qE5rW3IDwgdGhlXC1iYWx0aWNcLXNlYTsKK+i2uSA8IGtpY2tcLXdpdGhcLWhvb2Y7CivloLHlvqkgPCBtYWtlXC1yZXByaXNhbHM7CivnnJ/mg4UgPCByZWFsXC1zaXR1YXRpb247CivmoYzpnaLns7vntbEgPCBkZXNrdG9wXC1zeXN0ZW07CivmnbHljZfkup7lnIsgPCBzb3V0aGVhc3RcLWFzaWE7Civlt6jmtYEgPCBzdHJvbmdcLWN1cnJlbnQ7CivosaMgPCBwaWdcLW9mXC0zXC15ZWFyczsKK+ixliA8IGFcLXNoYWNrbGVkXC1waWc7CivpgIDlrbggPCB0b1wtcXVpdFwtc2Nob29sOwor6K6FIDwga25vd1wtaW5cLWRldGFpbDsKK+W7ieWDuSA8IGNoZWFwbHlcLXByaWNlZDsKK+Wwj+Wei+S8gealrSA8IHNtYWxsXC1idXNpbmVzczsKK+ipqCA8IGtpbmRcLW9mXC1jaWNhZGE7CivpoIbluo/mlbggPCBvcmRpbmFsXC1udW1iZXI7Civnl4XomZ8gPCBzaWNrXC1wZXJzb25uZWw7CivlnJjntZAgPCBcKGhvbGRcLWFcKVwtcmFsbHk7CivopIkgPCBzaG9ydFwtZ2FybWVudHM7CivlnI3nuZ4gPCByZXZvbHZlXC1hcm91bmQ7Civov5HlubQgPCByZWNlbnRcLXllYXJcKHNcKTsKK+ihgiA8IHRvXC1iZVwtZGVmZWF0ZWQ7CivooIIgPCBwb2Rpc21hXC1taWthZG87Civon7MgPCBhXC1raW5kXC1vZlwtY3JhYjsKK+ifrSA8IHZlcnlcLXNtYWxsXC1idWc7CivlgJLplokgPCB0b1wtZ29cLWJhbmtydXB0Owor6J6sIDwgZ3J1YnNcLWluXC1mcnVpdDsKK+WGt+aIsCA8IFwodGhlXClcLWNvbGRcLXdhcjsKK+icjiA8IG1vc3F1aXRvXC1sYXJ2YTsKK+izh+aWmeS7i+mdoiA8IGRhdGFcLWludGVyZmFjZTsKK+iZgCA8IG1pbmNlZFwtcGlja2xlczsKK+iWsyA8IG5hbWVcLW9mXC1hXC1oZXJiOwor6JaYIDwgcGxhbnRhZ29cLW1ham9yOwor5YO555uuIDwgXChtYXJrZWRcKVwtcHJpY2U7Civok68gPCBtZWRpY2luYWxcLWhlcmI7Civok48gPCBmcnVpdFwtb2ZcLXBsYW50Owor6JGlIDwgcnVidXNcLXBhbG1hdHVzOwor55eF6ISIIDwgYWJub3JtYWxcLXB1bHNlOwor5LiN5oCO6bq85qijIDwgbm90XC11cFwtdG9cLW11Y2g7CivmvLjoroogPCBncmFkdWFsXC1jaGFuZ2U7CivojJ4gPCBmcmFncmFudFwtcGxhbnQ7CivpnZ7luLjph43opoEgPCB2ZXJ5XC1pbXBvcnRhbnQ7CivntIDlv7UgPCB0b1wtY29tbWVtb3JhdGU7CivplovmnIMgPCBoYXZlXC1hXC1tZWV0aW5nOwor6Yar5a245bCI5a62IDwgbWVkaWNhbFwtZXhwZXJ0Owor6IqIIDwgYmxlYXRcLW9mXC1zaGVlcDsKK+WFiOmAsuawtOW5syA8IGFkdmFuY2VkXC1sZXZlbDsKK+WNgOWfn+e2sui3r+aKgOihkyA8IGxhblwtdGVjaG5vbG9neTsKK+WFqOaZryA8IHBhbm9yYW1pY1wtdmlldzsKK+WIgOWPiSA8IGtuaWZlXC1hbmRcLWZvcms7CivohKYgPCB1c2VkXC1pblwtJydsZWRlJyc7CivpgKPpjpblj43mh4kgPCBjaGFpblwtcmVhY3Rpb247CivnibnliKXmhJ/orJ0gPCBzcGVjaWFsXC10aGFua3M7Civkurrlo73kv53pmqogPCBsaWZlXC1pbnN1cmFuY2U7CivluIPluJsgPCBjbG90aFwtYW5kXC1zaWxrOwor5om+6YyiIDwgdG9cLWdpdmVcLWNoYW5nZTsKK+ijnOa2siA8IGZsdWlkXC1pbmZ1c2lvbjsKK+i1t+m7niA8IHN0YXJ0aW5nXC1wb2ludDsKK+WwseaYr+iqqiA8IGluXC1vdGhlclwtd29yZHM7CivloLHliIYgPCBjYWxsXC10aGVcLXNjb3JlOwor5pWZ6IKy55WMIDwgYWNhZGVtaWNcLXdvcmxkOwor5oy656uLIDwgdG9cLXN0YW5kXC1lcmVjdDsKK+S4jeW5s+etieainee0hCA8IHVuZXF1YWxcLXRyZWF0eTsKK+WFq+aIkCA8IGVpZ2h0eVwtcGVyY2VudDsKK+WFqeaJiyA8IGRvdWJsZVwtdGFjdGljczsKK+e1nCA8IGFcLW1hcmtpbmdcLWxpbmU7CivmjqHmsrkgPCBvaWxcLWV4dHJhY3Rpb247CivntL4gPCB0dXJuc1wtb3JcLXR3aXN0Owor57O6IDwgdG9cLWNvbGxhYm9yYXRlOwor6Leo6LaKIDwgdG9cLXN0ZXBcLWFjcm9zczsKK+i3kemBkyA8IGF0aGxldGljXC10cmFjazsKK+S4jeaVoueVtiA8IHlvdVwtZmxhdHRlclwtbWU7CivnsasgPCBiYW1ib29cLXV0ZW5zaWw7CivnrawgPCByZWVkXC1vZlwtYVwtbG9vbTsKK+WWmOS4jemBjuawo+S+hiA8IGNhbm5vdFwtYnJlYXRoZTsKK+aPoeaLsyA8IHRvXC1tYWtlXC1hXC1maXN0Owor5Ymv57i957WxIDwgdmljZVwtcHJlc2lkZW50Owor55Sa6Iez5pa8IDwgc29cLW11Y2hcLVwodGhhdFwpOwor5o+h5omLIDwgdG9cLXNoYWtlXC1oYW5kczsKK+eorSA8IHN0YWxrXC1vZlwtZ3JhaW47Civnsr7lubIgPCBjcmFja1wtXCh0cm9vcHNcKTsKK+mVt+W+gSA8IHRoZVwtbG9uZ1wtbWFyY2g7Civnl4Xnl5sgPCBzbGlnaHRcLWlsbG5lc3M7CivkuI3lubPooaEgPCBkaXNlcXVpbGlicml1bTsKK+egoiA8IHBpbGVcLW9mXC1zdG9uZXM7Civnn4kgPCBhblwtYW5ncnlcLWdsYXJlOwor552xIDwgdG9cLWdhemVcLXNsb3dseTsKK+edryA8IHRvXC1iZVwtYWdvbml6ZWQ7Civoi7Hlr7ggPCBcKGVuZ2xpc2hcKVwtaW5jaDsKK+ecoyA8IHByb21pbmVudFwtZXllczsKK+aOoeaUtueOhyA8IHJlY292ZXJ5XC1yYXRpbzsKK+iHqueUseWMliA8IGxpYmVyYWxpemF0aW9uOwor5qiZ5bC6IDwgc3VydmV5b3InJ3NcLXJvZDsKK+iWqemBlOWnhuS+r+izveWboCA8IHNhZGRhbVwtaHVzc2VpbjsKK+eSuCA8IGphZGUnJ3NcLXN0cmVha3M7CivnkpggPCBsdXN0ZXJcLW9mXC1qYWRlOwor5bCH6LuNIDwgXChhcm15XClcLWdlbmVyYWw7CivnjqUgPCBteXN0ZXJpb3VzXC1nZW07Civni6ggPCBoYXBhbGVcLWphY2NodXM7CivlhanlnIsgPCBib3RoXC1jb3VudHJpZXM7CivlhajlnIsgPCBlbnRpcmVcLWNvdW50cnk7CivniqggPCBwYW50aW5nXC1vZlwtY293Owor5LiN6YGp55SoIDwgbm90XC1hcHBsaWNhYmxlOwor5L2G5Lul55CG5pu4IDwgYm9va1wtb2ZcLWRhbmllbDsKK+eHiSA8IGhlYXRcLXdpdGhcLWZpcmU7Civnh4AgPCB0b1wtbWFrZVwtYVwtZmlyZTsKK+eGiSA8IFwoeWVsbG93XC1jb2xvclwpOwor6Lyp5a2QIDwgYWxsXC1vbmUnJ3NcLWxpZmU7Civplbfln44gPCB0aGVcLWdyZWF0XC13YWxsOwor6KGo5rG6IDwgZGVjaWRlXC1ieVwtdm90ZTsKK+aIkOmDvSA8IGNoZW5nZHVcLVwoY2l0eVwpOwor6ayl5pm6IDwgYmF0dGxlXC1vZlwtd2l0czsKK+WFq+WNgyA8IGVpZ2h0XC10aG91c2FuZDsKK+a6myA8IHRvXC1mb3JtXC1ob2xsb3c7CivmubEgPCBzb3VuZFwtb2ZcLXdhdGVyOwor5o235YWL5YWx5ZKM5ZyLIDwgY3plY2hcLXJlcHVibGljOwor55eF5q23IDwgbWVkaWNhbFwtcmVjb3JkOwor5riiIDwgcGxlYXNhbnRcLXNvdW5kOwor5rasIDwgd2F0ZXJ5XC1leHBhbnNlOwor57Ch5Zau5YyWIDwgc2ltcGxpZmljYXRpb247CivkvLjplosgPCB0b1wtc3RyZXRjaFwtb3V0Owor5rS/IDwgc3RhZ25hbnRcLXdhdGVyOwor6L+r5LiN5b6X5beyIDwgaGF2ZVwtbm9cLWNob2ljZTsKK+ipleWDueWIhumhniA8IHJhbmtcLFwtY2xhc3NpZnk7Civms4IgPCBjbGVhclwtYW5kXC1kZWVwOwor5ryU56S6IDwgdG9cLWRlbW9uc3RyYXRlOwor5rK3IDwgdG9cLXJlbW92ZVwtZXZpbDsKK+W+nuS6i+eglOeptiA8IHRvXC1kb1wtcmVzZWFyY2g7Civmrq0gPCBhXC1zdGlmZlwtY29ycHNlOwor5Lul6LO95Lqe5pu4IDwgYm9va1wtb2ZcLWlzYWlhaDsKK+m5vea5luWfjiA8IHNhbHRcLWxha2VcLWNpdHk7CivmqpYgPCB3aWxkXC1wZWFyXC10cmVlOwor5qm/IDwgcXVlcmN1c1wtZ2xhdWNhOwor5YKz5pKtIDwgdG9cLWRpc3NlbWluYXRlOwor5YWl5LyNIDwgZW50ZXJcLXRoZVwtYXJteTsKK+mmlumDvSA8IGNhcGl0YWxcLVwoY2l0eVwpOwor5qa+IDwgcGllY2VzXC1vZlwtd29vZDsKK+amoCA8IGNoaW5lc2VcLXF1aW5jZTsKK+amliA8IHBhcGVyXC1tdWxiZXJyeTsKK+akqiA8IG1hY2hpbHVzXC1uYW5tdTsKK+a9lOa3qCA8IGNsZWFuc2VcLVwoc2luc1wpOwor5qOQIDwgc3BlY2llc1wtb2ZcLXlldzsKK+aiiiA8IHNxdWVlemVcLW91dFwtb2Y7CivljYrmlbjku6XkuIogPCBtb3JlXC10aGFuXC1oYWxmOwor5p++IDwgc3RyYWlnaHRcLWdyYWluOwor5p+DIDwgZXVyeWFcLWphcG9uaWNhOwor6IiM5qC5IDwgYmFja1wtb2ZcLXRvbmd1ZTsKK+aqlOahiOWxrOaApyA8IGZpbGVcLWF0dHJpYnV0ZTsKK+abjyA8IG9uY2VcLXVwb25cLXRpbWU7CivooYzmlL8gPCBhZG1pbmlzdHJhdGlvbjsKK+ihgOijveWTgSA8IGJsb29kXC1wcm9kdWN0czsKK+aZoiA8IGxpZ2h0XC1vZlwtc3RhcnM7CivlsI/ogbIgPCBpblwtYVwtbG93XC12b2ljZTsKK+aYsCA8IHZhclwtb2ZcLScndG9cLWJlJyc7Civnr6HmlLkgPCB0b1wtdGFtcGVyXC13aXRoOwor5oiq6IezIDwgdXBcLXRvXC1cKGFcLXRpbWVcKTsKK+aUgiA8IHRvXC1iZWF0XC1hXC1kcnVtOwor6LW36I2JIDwgZHJhZnRcLVwoYVwtYmlsbFwpOwor5oyo5omTIDwgdGFrZVwtYVwtYmVhdGluZzsKK+WxpOeQhiA8IHN0cmF0aWZpY2F0aW9uOwor55CD6Z6LIDwgYXRobGV0aWNcLXNob2VzOwor6Y2L6LK8IDwgZnJpZWRcLWR1bXBsaW5nOwor5Ye56Z2i6Y+hIDwgY29uY2F2ZVwtbWlycm9yOwor5o6I5ZG9IDwgdG9cLWdpdmVcLW9yZGVyczsKK+mWi+W/g+aenCA8IHBpc3RhY2hpb1wtbnV0czsKK+W+nuS+huaykuaciSA8IGhhdmVcfGhhc1wtbmV2ZXI7Civku6Xmlq/luJboqJggPCBib29rXC1vZlwtZXN0aGVyOwor5pyA5L2z5Yip55uKIDwgYmVzdFwtaW50ZXJlc3RzOwor5LiW55WM6KqeIDwgd29ybGRcLWxhbmd1YWdlOwor5oOh5oCn5b6q55KwIDwgdmljaW91c1wtY2lyY2xlOwor5qC46IO9IDwgbnVjbGVhclwtZW5lcmd5Owor5rWu6bueIDwgZmxvYXRpbmdcLXBvaW50Owor5bmxIDwgb2ZmaWNpYWxcLWRyZXNzOwor5LiN55yB5Lq65LqLIDwgYmVcLXVuY29uc2Npb3VzOwor5befIDwgYVwtd2F0ZXJ5XC13YXN0ZTsKK+eZvueEoeiBiuiztCA8IGJvcmVkXC10b1wtZGVhdGg7CivooYzmmJ/pmpsgPCBpbnRlcnBsYW5ldGFyeTsKK+S4reW/g+iqniA8IHF1YWxpZmllZFwtd29yZDsKK+WPg+isgOmVtyA8IGNoaWVmXC1vZlwtc3RhZmY7Civoh6rlvp4gPCBzaW5jZVwtXChhXC10aW1lXCk7Civmo4Tmq7sgPCBhYmFuZG9uZWRcLWJhYnk7CivnlKLmrIogPCBwcm9wZXJ0eVwtcmlnaHQ7CivpvZLovKogPCBcKG1hY2hpbmVcKVwtZ2VhcjsKK+S+teeKryA8IHRvXC1pbmZyaW5nZVwtb247CivphqvlrbjkuK3lv4MgPCBtZWRpY2FsXC1jZW50ZXI7CivooYDlo5MgPCBibG9vZFwtcHJlc3N1cmU7CivpjITlg4/mqZ8gPCB2aWRlb1wtcmVjb3JkZXI7CivloZUgPCBhXC1ndXN0XC1vZlwtd2luZDsKK+WfhyA8IG5hbWVcLW9mXC1icmlkZ2U7CivlhYnkv6HomZ8gPCBvcHRpY2FsXC1zaWduYWw7CivntpzlkIjloLHlsI4gPCBzdW1tYXJ5XC1yZXBvcnQ7CivlmbkgPCBzb3VuZFwtb2ZcLWJlbGxzOwor5ZiTIDwgZ3VyZ2xpbmdcLXNvdW5kOwor5rib6IKlIDwgdG9cLWxvc2VcLXdlaWdodDsKK+S7o+ihqCA8IHJlcHJlc2VudGF0aXZlOwor5aSn5ZCM5bCP55WwIDwgYWxtb3N0XC1zaW1pbGFyOwor5ZWMIDwgYW5pbWFsXC1kaXNlYXNlOwor55Wr5bGVIDwgYXJ0XC1leGhpYml0aW9uOwor55Sf5pWIIDwgdG9cLXRha2VcLWVmZmVjdDsKK+aguOatpuWZqCA8IG51Y2xlYXJcLXdlYXBvbjsKK+mBlOS4jeWIsCA8IGNhbm5vdFwtYWNoaWV2ZTsKK+aJjeawoyA8IGxpdGVhcnlcLXRhbGVudDsKK+WOgyA8IHRvXC1sb29rXC11cHdhcmQ7Civlja0gPCBoaWdoXC5cLXRvXC1yYWlzZTsKK+WNgiA8IHRvXC1mbHlcLXJhcGlkbHk7CivljZHouqzlsYjnr4AgPCBib3dcLWFuZFwtc2NyYXBlOwor5oGt6LOA5paw56anIDwgaGFwcHlcLW5ld1wteWVhcjsKK+WwiOashCA8IHNwZWNpYWxcLWNvbHVtbjsKK+WtuOexjSA8IHNjaG9vbFwtcm9sbFwoc1wpOwor56aB6aOfIDwgZmFzdFwtXChub3RcLWVhdFwpOwor5YWL5p6X6aCTIDwgXChiaWxsXClcLWNsaW50b247CivkvJUgPCBjb21tb25cLWxhYm9yZXI7CivkuocgPCBrd3VreWVsXC1oYW1tZXI7CivktpQgPCBwcm9taW5lbnRcLWd1bXM7CivktpAgPCB0b1wtdGFrZVwtYnJlYXRoOwor5LaAIDwgc291bmRcLW9mXC1kcnVtczsKK+S1tiA8IGFcLWtpbmRcLW9mXC1mcm9nOwor5LWMIDwgcmVkZGlzaFwteWVsbG93Owor5LS0IDwgYVwta2luZFwtb2ZcLWNha2U7CivktKkgPCBhXC1raW5kXC1vZlwtZGVlcjsKK+S0mCA8IGFcLWtpbmRcLW9mXC1iaXJkOwor5LO4IDwgdGhlXC13aWxkXC1nb29zZTsKK+SzqyA8IGFcLXNtYWxsXC1waWdlb247CivksqIgPCBhXC1raW5kXC1vZlwtZmlzaDsKK+afkOeoriA8IHNvbWVcLWtpbmRcLVwob2ZcKTsKK+SwuSA8IHRoZVwtY3V0dGxlZmlzaDsKK+SwtCA8IGFcLXdhZnRpbmdcLWZpc2g7CivksKEgPCBhXC1maWVyY2VcLWdob3N0Owor5bCH5pyDIDwgd2lsbFwsXC1nb2luZ1wtdG87Civkr5sgPCB0aGVcLWtuZWVcLWJvbmVzOwor5K65IDwgYW5cLWFuZ3J5XC1ob3JzZTsKK+SuriA8IGFcLWtpbmRcLW9mXC1tdWxlOwor5K27IDwgYVwtc3dpZnR5XC1ob3JzZTsKK+StrSA8IHRoZVwtZWxkZXN0XC1zb247CivkrakgPCB0b1wtZmVlZFwtYVwtYmFieTsKK+WJjeeUn+WPrOWWmiA8IGZvcmVvcmRpbmF0aW9uOwor5K2BIDwgc3RpbmtpbmdcLXNtZWxsOwor5Ky6IDwgc2FtZVwtYXNcLXVcKzRiNTA7CivkrJggPCB0aGVcLXdpbmRcLWJsb3dzOwor5KySIDwgdG9cLWJsb3dcLWNoaWxseTsKK+ixjui1tyA8IGhvbGRcLXVwXC1cKGhpZ2hcKTsKK+e2sumam+mbu+ipsSA8IGludGVybmV0XC1waG9uZTsKK+SrqyA8IGh1bWFuXC1za2VsZXRvbjsKK+SqvCA8IHRoZVwtY2hlZWtcLWJvbmU7CivkqoggPCBhXC1sZWF0aGVyXC1iZWx0Owor5KmQIDwgdGllXC1pdFwtdGlnaHRseTsKK+SopSA8IGFcLXBvdXJpbmdcLXJhaW47Civkp6cgPCBoaWdoXC1tb3VudGFpbnM7Civlr7bmm7ggPCB0cmVhc3VyZWRcLWJvb2s7CivkprogPCBuYW1lXC1vZlwtYVwtaGlsbDsKK+SmpCA8IHNlZWRcLW9mXC1ncmFpbnM7CivkppEgPCB3aXRob3V0XC1hXC1kb29yOwor5KaPIDwgd2luZ1wtb2ZcLWFcLWRvb3I7CivogZboqpXnr4AgPCBjaHJpc3RtYXNcLXRpbWU7CivkpJYgPCBhXC1raW5kXC1vZlwtd2luZTsKK+SjjiA8IG5hbWVcLW9mXC1jb3VudHk7Civnmb3ku6TmtbcgPCB0aGVcLWJlcmluZ1wtc2VhOwor5KKoIDwgdG9cLXdhbGtcLXNsb3dseTsKK+ShviA8IGhpZ2hcLWNhcnRsb2FkczsKK+ShsiA8IHJpbVwtb2ZcLWFcLXdoZWVsOwor5pGp6ZaA57aTIDwgYm9va1wtb2ZcLW1vcm1vbjsKK+ShiSA8IGFcLWtpbmRcLW9mXC1jYXJ0Owor6JiL5p6c6Zu76IWmIDwgYXBwbGVcLWNvbXB1dGVyOwor5Jy9IDwgYVwta2luZFwtb2ZcLWJlYW47CivknJwgPCB3b3Jkc1wtb2ZcLWFuZ2VyOwor5JugIDwgdW5hYmxlXC10b1wtdGFsazsKK+WQg+mpmiA8IHRvXC1iZVwtc3RhcnRsZWQ7CivkmpYgPCBtb3VudGFpblwtZGVpdHk7CivkmoQgPCB0b1wtbWFrZVwtZnVuXC1vZjsKK+SZsyA8IHNwaXRpbmdcLWZsYW1lczsKK+SZpiA8IHVwcGVyXC1nYXJtZW50czsKK+SYoiA8IG9sZFwtYW5kXC1zaGFiYnk7Civkl7cgPCBhXC1raW5kXC1vZlwtd2FzcDsKK+SXqiA8IGFcLWtpbmRcLW9mXC13b3JtOwor5JeaIDwgZWdnc1wtb2ZcLW1hbnRpczsKK+SXkiA8IGFcLWtpbmRcLW9mXC1jbGFtOwor5JawIDwgYVwta2luZFwtb2ZcLWduYXQ7Civmkp7mk4rlvI/ljbDooajmqZ8gPCBpbXBhY3RcLXByaW50ZXI7CivklZogPCBhXC1zdHJhd1wtYmFza2V0Owor5JSVIDwgY2hpY2tlblwtYnJlYXN0Owor5JSLIDwgYVwta2luZFwtb2ZcLXRyZWU7CivlsI7lvYggPCBndWlkZWRcLW1pc3NpbGU7CivklIIgPCB2ZWdldGFibGVcLXNvdXA7CivmuIXniL0gPCBmcmVzaFwtYW5kXC1jb29sOwor5JOhIDwgYVwtbWVkaWNhbFwtaGVyYjsKK+SSkyA8IHRvXC1kb1wtdmlvbGVuY2U7CivkkocgPCBuYW1lXC1vZlwtYVwtc2hpcDsKK+SShSA8IGJlYXV0aWZ1bFwtZXllczsKK+SRtiA8IHNwcmlnaHRseVwtYm9hdDsKK+SRqyA8IHRvb2xzXC1mb3JcLWJvYXQ7CivkkaMgPCBhXC1zYWlsaW5nXC1ib2F0Owor5JGcIDwgdG9cLWVhdFwtaGVhdmlseTsKK+S6kuiBryA8IGludGVyY29ubmVjdGVkOwor5JCVIDwgb2lsXC1hbmRcLWdyZWFzZTsKK+SQjSA8IGV4Y2VsbGVudFwtZm9vZDsKK+SNoSA8IHNtYWxsXC1maXNoXC1uZXQ7CivkjZEgPCBhXC1uZXRcLW9yXC1zbmFyZTsKK+SNjSA8IHVuYnVybnRcLWJyaWNrczsKK+WUseeJhyA8IFwodmlueWxcKVwtcmVjb3JkOwor5Iy1IDwgbGFwZWxcLWFuZFwtYmVsdDsKK+SMsCA8IGNvbm5lY3RlZFwtc2lsazsKK+SMpSA8IHRvXC1zZXdcLWNsb3RoZXM7CivkjKEgPCB0b1wtd2luZFwtYXJvdW5kOwor5LqM6ICFIDwgYm90aFwtXFtvZlwtdGhlbVxdOwor5Iu9IDwgaGVtcGVuXC1zYW5kYWxzOwor5IuvIDwgY3J1Y2lhbFwtcG9pbnRzOwor5IuiIDwgdG9cLXR3aXN0XC1yb3BlczsKK+SKvCA8IG1lYXN1cmluZ1wtdW5pdDsKK+aJjeWtkCA8IGdpZnRlZFwtc2Nob2xhcjsKK+S+teWusyA8IHRvXC1lbmNyb2FjaFwtb247CivkiqggPCBzdG9yaW5nXC1ncmFpbnM7CivkiLcgPCBhXC1iYW1ib29cLWZlbmNlOwor5IiaIDwgYVwtYmFtYm9vXC1zaG9vdDsKK+S4jeiEm+iAjOi1sCA8IGdldFwtcm91bmRcLWZhc3Q7Civkh6sgPCBiYW1ib29cLXNwbGludHM7Civkh4UgPCB0b1wtc3RhbmRcLXN0aWxsOwor5LiJ6Lyq6LuK5LyVIDwgcGVkaWNhYlwtZHJpdmVyOwor5a+25bqrIDwgdHJlYXN1cmVcLWhvdXNlOwor5L+d5ZauIDwgZ3VhcmFudGVlXC1zbGlwOwor6aO957aT6aKo6ZycIDwgd2VhdGhlclwtYmVhdGVuOwor5IWlIDwgcmlwZW5pbmdcLWNyb3BzOwor5bCP5a24IDwgcHJpbWFyeVwtc2Nob29sOwor5LuU55WcIDwgbmV3Ym9yblwtYW5pbWFsOwor5IO5IDwgamFkZVwtYW5kXC1zdG9uZTsKK+SDoSA8IGFcLXNtYWxsXC1wZWJibGU7CivmnKzoibIgPCBuYXR1cmFsXC1jb2xvdXI7Civkg48gPCBhXC1raW5kXC1vZlwtcm9jazsKK+SDjCA8IHJvY2t5XC1tb3VudGFpbjsKK+S+huW+gCA8IHRvXC1jb21lXC1hbmRcLWdvOwor5IKMIDwgYVwtc2hvcnRcLXdlYXBvbjsKK+WFqOW/g+WFqOaEjyA8IGhlYXJ0XC1hbmRcLXNvdWw7CivkgaQgPCBtb2lzdGVuZWRcLWV5ZXM7CivkgY8gPCBmYXJzaWdodGVkbmVzczsKK+SAuiA8IHNxdWludGluZ1wtZXllczsKK+W3pealreeahOW3qOmgrSA8IGluZHVzdHJ5XC1tb2dvbDsKK+O9piA8IHJlY2xhaW1lZFwtbGFuZDsKK+O9pSA8IGZlcnRpbGVcLWZpZWxkczsKK+O9iyA8IGFcLWtpbmRcLW9mXC10aWxlOwor472EIDwgYW5cLWVhcnRoZW5cLWphcjsKK+mhjOi3iyA8IHNob3J0XC1jb21tZW50czsKK+O4qyA8IGNhc3RyYXRlZFwtYnVsbDsKK+O4pCA8IGJyb2tlblwtbGVhdGhlcjsKK+O4iiA8IGZpZXJjZVwtb2ZcLWZpcmU7CivjtqAgPCB3YXRlclwtY3VycmVudHM7CivkuI3op6MgPCBub3RcLXVuZGVyc3RhbmQ7Civms7DnsbPniL7oqp4gPCB0YW1pbFwtbGFuZ3VhZ2U7CivjtZggPCBncmVhdFwtY3VycmVudHM7Civmh67mha4gPCBcKGZlZWxcKVwtYW54aWV0eTsKK+O0uCA8IHN3aWZ0XC1jdXJyZW50czsKK+eKr+S4jeiRlyA8IG5vdFwtd29ydGh3aGlsZTsKK+O0mSA8IHdhdGVyXC1kcmlwcGluZzsKK+OzgyA8IHRvXC10ZW1wZXJcLWlyb247Civjso8gPCBmbHlpbmdcLWZlYXRoZXI7CivkvZnmgrggPCBsaW5nZXJpbmdcLWZlYXI7CivjsY8gPCB0aGVcLXJpZ2h0XC1zaWRlOwor5oiQ5bCxIDwgYWNjb21wbGlzaG1lbnQ7CivjrbsgPCB0aGVcLWNyYWJcLWFwcGxlOwor5LiN55So6KydIDwgeW91JydyZVwtd2VsY29tZTsKK+OtjyA8IGFcLWtpbmRcLW9mXC13b29kOwor462EIDwgYVwta2luZ1wtb2ZcLXRyZWU7Civlrrnlv40gPCB0b1wtcHV0XC11cFwtd2l0aDsKK+OrjyA8IGFcLWtpbmRcLW9mXC1mbGFnOwor46uCIDwgdG9cLWNob3BcLW9yXC1jdXQ7Civnvbfoq5YgPCBhYmFuZG9uZWRcLWlkZWE7CivmgqPomZUgPCBhZmZsaWN0ZWRcLXBhcnQ7CivjqIcgPCB0b1wtc3dlZXBcLWNsZWFuOwor46W6IDwgdG9cLWJsb3dcLWFcLWZpcmU7CivkuI3mnJ/ogIzpgYcgPCBtZWV0XC1ieVwtY2hhbmNlOwor46WJIDwgYVwtbGl0dGxlXC1hbmdyeTsKK+OlhyA8IHRvXC1iZVwtcGVydmVyc2U7CivjpL4gPCBub3RcLWRvaW5nXC13ZWxsOwor46SWIDwgdG9cLWhhdmVcLXdpc2RvbTsKK+OjpiA8IGFcLXdpbmRpbmdcLXBhdGg7Civmnrbmp4sgPCBpbmZyYXN0cnVjdHVyZTsKK+eptOaSrSA8IGJ1bmNoXC1wbGFudGluZzsKK+WNiuiHquWLlSA8IHNlbWlcLWF1dG9tYXRpYzsKK+OhnCA8IHJhZ2dlZFwtY2xvdGhlczsKK+aHt+WtlSA8IHRvXC1iZVwtcHJlZ25hbnQ7CivjoKggPCBtaXN0eVwtbW91bnRhaW47CivjoKEgPCBoaWdoXC1hbmRcLWxvZnR5Owor45+/IDwgaGlnaFwtYW5kXC1zdGVlcDsKK+iBt+alrSA8IGpvYlwtb2NjdXBhdGlvbjsKK+WFp+iSmeWPpCA8IGlubmVyXC1tb25nb2xpYTsKK+mAgOS8kemHkSA8IHJldGlyZW1lbnRcLXBheTsKK+eVmeiogOewvyA8IHZpc2l0b3InJ3NcLWJvb2s7CivjnqkgPCBtb3VudGFpblwtdmFwb3I7CivjnpcgPCB0aGVcLW1hbGVcLW9yZ2FuOwor5Lu75pyfIDwgdGVybVwtb2ZcLW9mZmljZTsKK+OeiiA8IHVuYWJsZVwtdG9cLXdhbGs7CivjnbAgPCB1bmFibGVcLXRvXC1tZWV0Owor452bIDwgYWhhbHRpbmdcLXBsYWNlOwor45ykIDwgZm9vbGluZ1wtYXJvdW5kOwor45yRIDwgYW5cLW9sZGVyXC13b21hbjsKK+i/keS5juWQjOatpSA8IHBsZXNpb2Nocm9ub3VzOwor45upIDwgc2lzdGVyc1wtaW5cLWxhdzsKK+ObgiA8IHdlYWtcLWFuZFwtc21hbGw7CivjmoMgPCB0b1wtdGFrZVwtYVwtaGludDsKK+OZtyA8IGxvd1wtbHlpbmdcLWFyZWE7CivkuI3oiIggPCBvdXRcLW9mXC1mYXNoaW9uOwor45aiIDwgdG9cLXJlamVjdFwtZm9vZDsKK+OVpCA8IGFcLXByb3VkXC10ZW1wZXI7CivnkIPmo5IgPCBcKGJhc2ViYWxsXClcLWJhdDsKK+OUmSA8IGdyZWF0XC1zdHJlbmd0aDsKK+OSmyA8IHRvXC1zdGFuZFwtYWxvbmU7CivjkoAgPCBkb1wtbm90XC1mZWFyXC10bzsKK+izh+agvCA8IHF1YWxpZmljYXRpb25zOwor5p2x5rW3IDwgZWFzdFwtY2hpbmFcLXNlYTsKK+atu+S6oeeOhyA8IG1vcnRhbGl0eVwtcmF0ZTsKK+WTpeacrOWTiOaguSA8IGNvcGVuaGFnZW5cLVw/XD9cPzsKK+adseatkCA8IGVhc3Rlcm5cLWV1cm9wZTsKK+S7u+aGkSA8IG5vXC1tYXR0ZXJcLXdoYXQ7Civku4rmnJ0gPCBhdFwtdGhlXC1wcmVzZW50Owor5L2c5ZOBIDwgd29ya3NcLVwob2ZcLWFydFwpOwor5oaL5oK2IDwgZmVlbFwtb3BwcmVzc2VkOwor6aO85qe9IDwgZmVlZGluZ1wtdHJvdWdoOwor6K2m6LuKIDwgcG9saWNlXC12ZWhpY2xlOwor5a+S5Ya3IDwgY29sZFwtXChjbGltYXRlXCk7Civlk4joqbLmm7ggPCBib29rXC1vZlwtaGFnZ2FpOwor5a6J5aW9IDwgc2FmZVwtYW5kXC1zb3VuZDsKK+a2suaZtiA8IGxpcXVpZFwtY3J5c3RhbDsKK+WPg+ingCA8IHRvXC1sb29rXC1hcm91bmQ7CivpmL/kvI/kvL3lvrfnvoXlrprlvosgPCBhdm9nYWRybycnc1wtbGF3Owor5pO65pSk5a2QIDwgc2V0XC11cFwtYVwtc3RhbGw7Civlj6/og70gPCBtaWdodFwtXChoYXBwZW5cKTsKK+mmluWFiCA8IGZpcnN0XC1cKG9mXC1hbGxcKTsKK+eRnuWjq+S6uiA8IHN3aXNzXC1cKHBlcnNvblwpOwor5q+P56uv5Y+j5YO55qC8IDwgcHJpY2VcLXBlclwtcG9ydDsKK+a2suaFiyA8IGxpcXVpZFwtXChzdGF0ZVwpOwor5a2V5ammIDwgcHJlZ25hbnRcLXdvbWFuOwor5LmY5rOVIDwgbXVsdGlwbGljYXRpb247Civlt67kuI3lpJogPCBhbG1vc3RcLFwtbmVhcmx5Owor5a6a5YO5IDwgdG9cLXNldFwtYVwtcHJpY2U7Civmi6zlvKfoo6EgPCBpblwtcGFyZW50aGVzZXM7CivmmpfnrrEgPCBjYW1lcmFcLWJlbGxvd3M7CivmuJvliJEgPCByZWR1Y2VcLXBlbmFsdHk7Civnmb7nsbPos73ot5EgPCAxMDBcLW1ldHJlXC1kYXNoOwor5L+h6Jmf6Ie6IDwgc2lnbmFsXC1zdGF0aW9uOwor5LiW55WM5LiKIDwgXChvZlwtdGhlXClcLXdvcmxkOwor6Kq/5p+l5aCx5ZGKIDwgbWVtb2lyXCxcLXJlcG9ydDsKK+Wck+ePoOethiA8IGJhbGxcLXBvaW50XC1wZW47CivkuK3mrZAgPCBjZW50cmFsXC1ldXJvcGU7CivlhajnkIPmsKPlgJnljYfmuqsgPCBnbG9iYWxcLXdhcm1pbmc7Civniq/nvaogPCBcKGNvbW1pdFwpXC1jcmltZTsKK+S7veWFkiA8IGRlZ3JlZVwsXC1leHRlbnQ7Civot5Hohb/lhZIgPCB0b1wtcnVuXC1lcnJhbmRzOwor5LiN5q2j5bi454uA5rOBIDwgYWJub3JtYWxcLXN0YXRlOwor54m56ImyIDwgY2hhcmFjdGVyaXN0aWM7CivkuK3mlrcgPCB0b1wtZGlzY29udGludWU7Civnp5XlrZAgPCBibGlnaHRlZFwtZ3JhaW47CivkuJbnlYzntpPmv58gPCBnbG9iYWxcLWVjb25vbXk7CivmnInlvoUgPCBub3RcLXlldFwtXChkb25lXCk7CivpoYzmnZAgPCBzdWJqZWN0XC1tYXR0ZXI7CivnpKbms4kgPCBtaW5lcmFsXC1zcHJpbmc7CivpgJrnlKjmsb3ou4ogPCBnZW5lcmFsXC1tb3RvcnM7Civmr5vooaMgPCBcKHdvb2xcKVwtc3dlYXRlcjsKK+iyrOS7uyA8IHJlc3BvbnNpYmlsaXR5Owor5YyX5Lqs6YCx5aCxIDwgYmVpamluZ1wtcmV2aWV3Owor5Y2K6IG3IDwgcGFydFwtdGltZVwtd29yazsKK+azoueLgOeGsSA8IHVuZHVsYW50XC1mZXZlcjsKK+mhr+W+lyA8IGFwcGVhclwtXCh0b1wtYmVcKTsKK+S4jeW/jSA8IGNhbm5vdFwtYmVhclwtdG87Civnn6XorZjluqsgPCBrbm93bGVkZ2VcLWJhc2U7CivmupDpu57lnLDlnYAgPCBzb3VyY2VcLWFkZHJlc3M7CivpgJnmrKHljbHmqZ8gPCBwcmVzZW50XC1jcmlzaXM7CivlpJrlt6XpgYvkvZwgPCBtdWx0aXRocmVhZGluZzsKK+WqveWSqiA8IG11bW15XC1cKG1vdGhlclwpOwor5rOi5oGpIDwgYm9ublwtXChnZXJtYW55XCk7CivmlZfoqLQgPCBsb3NlXC1hXC1sYXdzdWl0Owor6Zu75L+h5bGAIDwgY2VudHJhbFwtb2ZmaWNlOwor5aO96KGjIDwgYnVyaWFsXC1jbG90aGVzOwor6KW/5Y2X5LqeIDwgc291dGh3ZXN0XC1hc2lhOwor5LqM5rCn5YyW56KzIDwgY2FyYm9uXC1kaW94aWRlOwor5pO66ZCYIDwgcGVuZHVsdW1cLWNsb2NrOwor5pKl6Jmf55ukIDwgdGVsZXBob25lXC1kaWFsOwor5YyX57evIDwgbm9ydGhcLWxhdGl0dWRlOwor5Y+K5qC8IDwgdG9cLXBhc3NcLWFcLXRlc3Q7Civms5Xluq0gPCBjb3VydFwtXChvZlwtbGF3XCk7CivpgJnpoZ4gPCB0aGlzXC1raW5kXC1cKG9mXCk7CivntrLntaHoqK3oqIggPCBuZXR3b3JrXC1kZXNpZ247CivlvozlhanogIUgPCB0aGVcLWxhdHRlclwtdHdvOwor5Li75L+uIDwgXChzY2hvb2xcKVwtbWFqb3I7CivorormiJAgPCB0b1wtY2hhbmdlXC1pbnRvOwor5bug56au5oucIDwgZGF5XC1vZmZcLVwod29ya1wpOwor5LiN5ZCIIDwgbm90XC1jb25mb3JtXC10bzsKK+mWi+aUvuW8j+ezu+e1sSA8IG9wZW5cLXN5c3RlbVwoc1wpOwor5paR56u5IDwgbW90dGxlZFwtYmFtYm9vOwor5LiN5Y+KIDwgbm90XC1hc1wtZ29vZFwtYXM7CivliIbpoZ4gPCBjbGFzc2lmaWNhdGlvbjsKK+WFqeeZvuWEhCA8IHR3ZW50eVwtYmlsbGlvbjsKK+eEoemAo+aOpSA8IGNvbm5lY3Rpb25sZXNzOwor6YeN5bu6IDwgcmVjb25zdHJ1Y3Rpb247CivnjJzorI7lhZIgPCBndWVzc1wtYVwtcmlkZGxlOwor6KuL55yLIDwgcGxlYXNlXC1zZWVcLVwuXC5cLjsKK+S6lOW5tOioiOWKgyA8IGZpdmVcLXllYXJcLXBsYW47CivmsKvmsKMgPCBoeWRyb2dlblwtXChnYXNcKTsKK+W4guWgtOe2k+a/nyA8IG1hcmtldFwtZWNvbm9teTsKK+aqlOahiOWft+ihjCA8IGZpbGVcLWV4ZWN1dGlvbjsKK+S6kuWLlembu+imliA8IGludGVyYWN0aXZlXC10djsKK+e+juW3ruS6iyA8IGFcLXRlcnJpZmljXC1qb2I7CivmlbjnqK4gPCBudW1lcm91c1wtdHlwZXM7CivlhrDpu54gPCBmcmVlemluZ1wtcG9pbnQ7CivmrZDmtLLoga/nm58gPCBldXJvcGVhblwtdW5pb247Civoj6/oo5QgPCBldGhuaWNcLWNoaW5lc2U7CivkuI3ku4EgPCBub3RcLWJlbmV2b2xlbnQ7CivmlLbogb0gPCB0b1wtbGlzdGVuXC1cKHRvXCk7Civnu48gPCBjbGFzc2ljXC13b3JrczsKK+W8nyA8IHlvdW5nXC1icm90aGVyOwor5bu7IDwgY2lyY2xlXC1hcm91bmQ7CivlhbMgPCBmcm9udGllclwtcGFzczsKK+W4nSA8IHN1cHJlbWVcLXJ1bGVyOwor55WqIDwgdG9cLXRha2VcLXR1cm5zOwor55WlIDwgYXBwcm94aW1hdGVseTsKK+WFsSA8IHRvZ2V0aGVyXC13aXRoOwor5LmJIDwgcmlnaHRcLWNvbmR1Y3Q7Civlq4IgPCBzaXN0ZXJcLWluXC1sYXc7Civlk6UgPCBlbGRlclwtYnJvdGhlcjsKK+WppiA8IG1hcnJpZWRcLXdvbWVuOwor6KijIDwgdGFrZVwtbGVhdmVcLW9mOwor5pePIDwgYVwtZmFtaWx5XC1jbGFuOwor5aWqIDwgdGFrZVwtYnlcLWZvcmNlOwor56yUIDwgd3JpdGluZ1wtYnJ1c2g7CivoorcgPCBsaW5lZFwtZ2FybWVudDsKK+eArCA8IHN3aWZ0XC1jdXJyZW50Owor5LyvIDwgb2xkZXJcLWJyb3RoZXI7CivmvLIgPCByaXNlXC1pblwtcHJpY2U7CivnpLwgPCBzb2NpYWxcLWN1c3RvbTsKK+WYqSA8IHJ1c2hpbmdcLXNvdW5kOwor5ZWjIDwgaG9sZFwtaW5cLW1vdXRoOwor5rOKIDwgYW5jaG9yXC12ZXNzZWw7Civmsr8gPCBmb2xsb3dcLWNvdXJzZTsKK+WShCA8IG5vaXNlXC1vZlwtcmFnZTsKK+iPiiA8IGNocnlzYW50aGVtdW07CivlsrMgPCBtb3VudGFpblwtcGVhazsKK+WMuSA8IGJvbHRcLW9mXC1jbG90aDsKK+mihyA8IGxlYW5cLW9uZVwtc2lkZTsKK+aZqCA8IGVhcmx5XC1tb3JuaW5nOwor5pKeIDwga25vY2tcLWFnYWluc3Q7CivmhIggPCBtb3JlXC1hbmRcLW1vcmU7Civmp4cgPCB0aXBcLW9mXC1hXC10cmVlOwor6aeFIDwgcmVsYXlcLXN0YXRpb247CivppYUgPCBzdGVhbWVkXC1icmVhZDsKK+eCuCA8IHRvXC1mcnlcLWluXC1vaWw7CivohIggPCBibG9vZFwtdmVzc2VsczsKK+e7qiA8IGVuZFwtb2ZcLXRocmVhZDsKK+mjvCA8IHJhaXNlXC1hbmltYWxzOwor5qKTIDwgY2F0YWxwYVwtb3ZhdGE7CivogowgPCBtdXNjbGVcLXRpc3N1ZTsKK+S9qSA8IGJlbHRcLW9ybmFtZW50Owor572yIDwgcHVibGljXC1vZmZpY2U7CivmkK0gPCBqb2luXC10b2dldGhlcjsKK+aglyA8IGNoZXN0bnV0XC10cmVlOwor5qGRIDwgbXVsYmVycnlcLXRyZWU7CivpnoQgPCB0b1wtd29ya1wtaGlkZXM7CivmnZMgPCBoYW5kbGVcLW9mXC1jdXA7CivkvYMgPCB0ZW5hbnRcLWZhcm1lcjsKK+i0oSA8IG9mZmVyXC10cmlidXRlOwor5puHIDwgYmVjb21lXC1jbG91ZHk7CivkupkgPCBleHRlbmRcLWFjcm9zczsKK+ivniA8IGJlYXJcLWNoaWxkcmVuOwor5pm0IDwgY2xlYXJcLXdlYXRoZXI7CivloZEgPCBtb2RlbFwtaW5cLWNsYXk7CivmtaYgPCBiYW5rXC1vZlwtcml2ZXI7CivnsZQgPCBiYW1ib29cLWJhc2tldDsKK+aFjiA8IGFjdFwtd2l0aFwtY2FyZTsKK+iOiSA8IHdoaXRlXC1qYXNtaW5lOwor5o2XIDwgbWFrZVwtcHJvZ3Jlc3M7CivloYwgPCBmYWxsXC1pblwtcnVpbnM7Civnq5YgPCBwZXJwZW5kaWN1bGFyOwor6ZmVIDwgbW91bnRhaW5cLXBhc3M7Civmg5ogPCBhYnNlbnRcLW1pbmRlZDsKK+a3gCA8IHNoYWxsb3dcLXdhdGVyOwor5reYIDwgd2FzaFwtaW5cLXNpZXZlOwor55GwIDwgZXh0cmFvcmRpbmFyeTsKK+WeqyA8IGFkdmFuY2VcLW1vbmV5Owor54G2IDwga2l0Y2hlblwtcmFuZ2U7Civmr5MgPCBnaXZlXC1iaXJ0aFwtdG87CivlkqcgPCBzdHJldGNoXC1tb3V0aDsKK+WljiA8IHN0cmlkZVwtb2ZcLW1hbjsKK+a0vSA8IHRvXC1ibGVuZFwtd2l0aDsKK+eRtiA8IHByZWNpb3VzXC1qYWRlOwor6ZKwIDwgcmFyZVwtdHJlYXN1cmU7CivnkZsgPCBsdXN0ZXJcLW9mXC1nZW07CivmrokgPCBkaWVcLWZvclwtY2F1c2U7CivllKwgPCB0b1wtaW50aW1pZGF0ZTsKK+eYqiA8IHNocml2ZWxsZWRcLXVwOwor5ZSGIDwgbWFrZVwtbWlzY2hpZWY7CivlspogPCBtb3VudGFpblwtbWlzdDsKK+ahpiA8IHR5cGVcLW9mXC1iaXJjaDsKK+a2nyA8IGZsb3dpbmdcLXdhdGVyOwor6aOVIDwgc291bmRcLW9mXC13aW5kOwor5Z23IDwgY2xvZFwtb2ZcLWVhcnRoOwor6ZGrIDwgdXNlZFwtaW5cLW5hbWVzOwor56yLIDwgYmFtYm9vXC1zaG9vdHM7CivojYMgPCBhcm9tYXRpY1wtaGVyYjsKK+mmhCA8IGR1bXBsaW5nXC1zb3VwOwor56m5IDwgaGlnaFwtYW5kXC12YXN0Owor5byIIDwgY2hpbmVzZVwtY2hlc3M7Civpqa4gPCBjYXJyeVwtb25cLWJhY2s7CivoiqUgPCBtdXN0YXJkXC1wbGFudDsKK+eCnCA8IGJyaWxsaWFudFwtcmVkOwor5bKcIDwgcm9ja1wtbW91bnRhaW47CivnuqsgPCB0aHJlYWRcLW5lZWRsZTsKK+ahgCA8IGNoaWNrZW5cLXJvb3N0Owor5ouuIDwgbGFib3JpbmdcLWhhcmQ7CivnuqUgPCBpbmZlcmlvclwtc2lsazsKK+W/pCA8IGluc3Vib3JkaW5hdGU7CivpuL4gPCBmYWJ1bG91c1wtYmlyZDsKK+WYgSA8IHRvXC1iZVwtZ3JpZXZlZDsKK+i+jiA8IGFcLXN1cHBseVwtY2FydDsKK+iKqyA8IGRhcGhuZVwtZ2Vua3dhOwor5LynIDwgdnVsZ2FyXC1wZXJzb247Civms6AgPCBuaWNlXC1hbmRcLWNvb2w7CivnuLsgPCBoYWx0ZXJcLWZvclwtb3g7CivouL0gPCB0b1wtd2Fsa1wtYWxvbmU7Civota0gPCByZWRkaXNoXC1icm93bjsKK+migCA8IHRhbGxcLWFuZFwtc2xpbTsKK+afmCA8IGFcLXRob3JueVwtdHJlZTsKK+iwlCA8IGhvbmVzdFwtc3BlZWNoOwor6aqTIDwgcGllYmFsZFwtaG9yc2U7CivltKcgPCBoaWdoXC1tb3VudGFpbjsKK+mFmiA8IGNhcmJvbGljXC1hY2lkOwor5aSkIDwgZGlzdGFudFwtcGxhY2U7CivmmowgPCBpblwtb3Bwb3NpdGlvbjsKK+aAjSA8IHRvXC1iZVwtYXNoYW1lZDsKK+i0vSA8IGdpZnRcLXN1cGVyaW9yOwor5q+WIDwgZ3VhcmRcLWFnYWluc3Q7Civov5MgPCB0b1wtZ29cLXRvXC1tZWV0Owor5q+1IDwgbG9uZ1wtZmVhdGhlcnM7CivnnZogPCBjb3JuZXJcLW9mXC1leWU7Civmr70gPCBhXC1zaHV0dGxlY29jazsKK+WDsyA8IG1pbm9yaXR5XC1uYW1lOwor6L6PIDwgaHVic1wtb2ZcLXdoZWVsOwor5peGIDwgZmxhZ1wtb3JuYW1lbnQ7CivojYcgPCBhXC13YXRlclwtcGxhbnQ7Civlja4gPCBtZWFzdXJpbmdcLWN1cDsKK+mroSA8IHRvXC1zaGVhclwtdHJlZTsKK+mznCA8IG1hbmRhcmluXC1maXNoOwor6byNIDwgbGFyZ2VcLXJlcHRpbGU7CivnrKsgPCBwbGFua3NcLW9mXC1iZWQ7CivnvKEgPCBhXC1icmlkYWxcLXZlaWw7Civnu6ggPCBjb2Fyc2VcLXBvbmdlZTsKK+iKsCA8IHdhdGVyXC1jYWx0cm9wOwor6a2DIDwgZHJvdWdodFwtZGVtb247CivoiLMgPCBzdGVyblwtb2ZcLXNoaXA7CivlsaYgPCBzdHJhd1wtc2FuZGFsczsKK+iTkCA8IHN0cmF3XC1iZWRcLW1hdDsKK+mKjiA8IGV5ZVwtb2ZcLWFuXC1heGU7CivphqMgPCBjYXJib2h5ZHJhdGVzOwor6JuRIDwgYVwtbWFyaW5lXC1jcmFiOwor5qSgIDwgd29vZGVuXC10YWJsZXQ7CivlqrggPCBhblwtdWdseVwtd29tYW47CivppocgPCBzdGlyXC1hbmRcLWNvb2s7CivnlJkgPCBzdWdhclwtcHJvZHVjdDsKK+iWpCA8IGFsbGl1bVwtYmFrZXJpOwor5aGlIDwgZHJ5XC1jbGF5XC1sdW1wOwor5qqU5qGI6L2J6YCBIDwgZmlsZVwtdHJhbnNmZXI7Civoq77osp3niL4gPCBub2JlbFwtXChwcml6ZVwpOwor6I+y6I+yIDwgdmVyeVwtZnJhZ3JhbnQ7CivmmILmj5ogPCBoaWdoXC1zcGlyaXRlZDsKK+S/neitiemHkSA8IGVhcm5lc3RcLW1vbmV5Owor56OB5bi2IDwgbWFnbmV0aWNcLXRhcGU7Civop6Poqr8gPCB0b1wtZGVtb2R1bGF0ZTsKK+WMl+a1tyA8IHRoZVwtbm9ydGhcLXNlYTsKK+iWhOWIqSA8IHNtYWxsXC1wcm9maXRzOwor5o6S5bGx5YCS5rW3IDwgZWFydGhcLXNoYWtpbmc7CivmmZrloLEgPCBldmVuaW5nXC1wYXBlcjsKK+aYn+W6pyA8IGNvbnN0ZWxsYXRpb247Civmv4DlhYnmiZPlvJXmqZ8gPCBsYXNlclwtcHJpbnRlcjsKK+WGsOmeiyA8IHNrYXRpbmdcLWJvb3RzOwor5o6b6Jmf6K2JIDwgcmVnaXN0ZXJcLWNhcmQ7Civlu6DntbIgPCBmaWxhdHVyZVwtc2lsazsKK+efm+ebviA8IGNvbnRyYWRpY3Rvcnk7Civlh7ros6MgPCB0b1wtc2VsbFwtXChvZmZcKTsKK+WIsOiZlSA8IGluXC1hbGxcLXBsYWNlczsKK+e2k+eHn+iyu+eUqCA8IGJ1c2luZXNzXC1jb3N0Owor5Y6f5a2Q6IO9IDwgYXRvbWljXC1lbmVyZ3k7Civlj6Tku6MgPCBhbmNpZW50XC10aW1lczsKK+aWsOaciCA8IGNyZXNjZW50XC1tb29uOwor57SA5b+16aSoIDwgbWVtb3JpYWxcLWhhbGw7Civllq7pn7vmr40gPCBzaW1wbGVcLWZpbmFsczsKK+WNs+WwhyA8IG9uXC10aGVcLWV2ZVwtb2Y7CivljZHlvq4gPCBwZXR0eVwtYW5kXC1sb3c7CivljbHlrrMgPCB0b1wtamVvcGFyZGl6ZTsKK+ebtOaIquS6hueVtiA8IHBsYWluXC10YWxraW5nOwor5Ya35oiw5Lul5b6MIDwgcG9zdFwtY29sZFwtd2FyOwor5pyJ5Y+v6IO9IDwgaXQnJ3NcLXBvc3NpYmxlOwor5Yio6IqxIDwgd29vZFwtc2hhdmluZ3M7Civojqjoj6ogPCBibGFja1wtaGVuYmFuZTsKK+iqv+afpSA8IGludmVzdGlnYXRpb247CivntoHohb8gPCBsZWdcLXdyYXBwaW5nczsKK+WIl+iIiSA8IFwobWFrZVwtYVwpXC1saXN0Owor6YGp55SoIDwgYmVcLWFwcGxpY2FibGU7CivmkZjoqJggPCB0b1wtdGFrZVwtbm90ZXM7CivlhYPpppYgPCBoZWFkXC1vZlwtc3RhdGU7CivmnKrmj5Dlj4ogPCBub3RcLW1lbnRpb25lZDsKK+aWueW8jyA8IHdheVwtXChvZlwtbGlmZVwpOwor5pel5aScIDwgZGF5XC1hbmRcLW5pZ2h0Owor6Iqd6bq7IDwgc2VzYW1lXC1cKHNlZWRcKTsKK+acrOeUn+eHiCA8IGJ1bnNlblwtYnVybmVyOwor54mM5Z2KIDwgbWVtb3JpYWxcLWFyY2g7Civlv4Poh5/nl4UgPCBoZWFydFwtZGlzZWFzZTsKK+WJjeeUnyA8IHByZVwtZXhpc3RlbmNlOwor5Yui5Zyo5b+F6KGMIDwgYmVcLWltcGVyYXRpdmU7CivmmIflgLwgPCByaXNlXC1pblwtdmFsdWU7CivljYHkupTlubQgPCBmaWZ0ZWVuXC15ZWFyczsKK+exs+mjryA8IFwoY29va2VkXClcLXJpY2U7CivphKflsI/lubMgPCBkZW5nXC14aWFvcGluZzsKK+i9iemBkyA8IG1ha2VcLWFcLWRldG91cjsKK+iIiue0hOWFqOabuCA8IG9sZFwtdGVzdGFtZW50Owor6ZW36YCUIDwgbG9uZ1wtZGlzdGFuY2U7Civml6XliY0gPCB0aGVcLW90aGVyXC1kYXk7Civlub7lgIvlsI/mmYIgPCBzZXZlcmFsXC1ob3VyczsKK+mCo+m0u+abuCA8IGJvb2tcLW9mXC1uYWh1bTsKK+e2sue1oeWxpCA8IG5ldHdvcmtcLWxheWVyOwor5aKc5q+AIDwgXChwbGFuZVwpXC1jcmFzaDsKK+mbmeaJiyA8IHBhaXJcLW9mXC1oYW5kczsKK+WTpeael+WkmuW+jOabuCA8IDJcLWNvcmludGhpYW5zOwor5Y2X5LqeIDwgc291dGhlcm5cLWFzaWE7CivliIrnmbsgPCBjYXJyeVwtYVwtc3Rvcnk7CivoqoflvLUgPCB0b1wtZXhhZ2dlcmF0ZTsKK+mbo+W/mCA8IHVuZm9yZ2V0dGFibGU7CivlpKrlpKogPCBtYXJyaWVkXC13b21hbjsKK+aSpeeUqCA8IGFwcHJvcHJpYXRpb247Civlr6nliKTmrIQgPCBqdWRnZW1lbnRcLWJhcjsKK+Wig+azgSA8IGNpcmN1bXN0YW5jZXM7CivmsJHkuosgPCBjaXZpbFwtbWF0dGVyczsKK+Wls+S9oyA8IFwoZmVtYWxlXClcLW1haWQ7CivkuI3lj6/nvLrlsJEgPCBpbmRpc3BlbnNhYmxlOwor5YuY5a+fIDwgcmVjb25uYWlzYW5jZTsKK+exjOmbhiA8IGNvbGxlY3RcLW1vbmV5Owor5pON5ryUIDwgZGVtb25zdHJhdGlvbjsKK+eZveiKseiKsSA8IHNoaW5pbmdcLXdoaXRlOwor5bu656+J5a24IDwgYXJjaGl0ZWN0dXJhbDsKK+imlueql+Wfuua6liA8IHdpbmRvd3NcLWJhc2VkOwor6Zu76YO15L2N572uIDwgZW1haWxcLWFkZHJlc3M7Civlubvnh4ggPCBsYXRlcm5cLXNsaWRlczsKK+eglOeptumgmOWfnyA8IHJlc2VhcmNoXC1hcmVhOwor5Lit5ZyL5byPIDwgY2hpbmVzZVwtc3R5bGU7CivliqDlv6sgPCB0b1wtYWNjZWxlcmF0ZTsKK+WGsOezliA8IGNyeXN0YWxcLXN1Z2FyOwor5ZyL6ZqbIDwgaW50ZXJuYXRpb25hbDsKK+WNiuWksealrSA8IHNlbWlcLWVtcGxveWVkOwor6ayl6ZueIDwgY29ja1wtZmlnaHRpbmc7CivpgY7mmYIgPCBvbGRcLWZhc2hpb25lZDsKK+mAsuaOpeacjeWLmSA8IGFjY2Vzc1wtc2VydmVyOwor6Zqo5oSPIDwgYXNcLW9uZVwtd2lzaGVzOwor5aSx5YipIDwgc3VmZmVyXC1kZWZlYXQ7CivooajmsbrmrIogPCByaWdodFwtdG9cLXZvdGU7CivnqbrplpPnq5kgPCBzcGFjZVwtc3RhdGlvbjsKK+aQjeiAlyA8IHdlYXJcLWFuZFwtdGVhcjsKK+ebuOeVtiA8IGVxdWl2YWxlbnRcLXRvOwor6YCQ5q2lIDwgcHJvZ3Jlc3NpdmVseTsKK+m1qSA8IG93bFwtbGlrZVwtYmlyZDsKK+Wkp+WFrOWPuCA8IGxhcmdlXC1jb21wYW55Owor5LiN6KiY5ZCN5oqV56WoIDwgc2VjcmV0XC1iYWxsb3Q7CivkuozmrKHlpKfmiLAgPCB3b3JsZFwtd2FyXC10d287Civlub7mrKEgPCBzZXZlcmFsXC10aW1lczsKK+W3qOe0sCA8IGJpZ1wtYW5kXC1zbWFsbDsKK+W5vuaooyA8IHNldmVyYWxcLWtpbmRzOwor5aSn5L2/IDwgYW5cLWFtYmFzc2Fkb3I7Civnt6jlr6kgPCByZWFkXC1hbmRcLWVkaXQ7CivlvLfljJYgPCB0b1wtc3RyZW5ndGhlbjsKK+mBv+WtlSA8IGNvbnRyYWNlcHRpb247Civpq4MgPCBzaG91bGRlclwtYm9uZTsKK+S4jeWIl+mhm+iruOWztiA8IGJyaXRpc2hcLWlzbGVzOwor6aqqIDwgY3Jvb2tlZFwtYm9uZXM7CivlpKflrrnph48gPCBoaWdoXC1jYXBhY2l0eTsKK+Wkp+S6iyA8IGFcLW1ham9yXC1ldmVudDsKK+aliueZvue/sCA8IGJyaWdoYW1cLXlvdW5nOwor5aSn5ZWP6aGMIDwgZ3JlYXRcLXByb2JsZW07CivppqMgPCBmcmFncmFudFwtb2RvcjsKK+aVmeWPiyA8IGNodXJjaFwtbWVtYmVyOwor5YWJ5Yqf546HIDwgb3B0aWNhbFwtcG93ZXI7CivpgJ/mlYggPCBxdWlja1wtcmVzdWx0czsKK+mkmiA8IHByZXBhcmVkXC1tZWF0Owor5qyK5aiB5oCnIDwgYXV0aG9yaXRhdGl2ZTsKK+WIqeaWvCA8IGJlXC1iZW5lZmljaWFsOwor5Yid5pyfIDwgaW5pdGlhbFwtc3RhZ2U7CivlpbPmnIvlj4sgPCBmZW1hbGVcLWZyaWVuZDsKK+WfuuacrOamguW/tSA8IGJhc2ljXC1jb25jZXB0Owor5LiN5ZGo5bu2IDwgdW5kaXN0cmlidXRlZDsKK+meriA8IGxlYXRoZXJcLXNob2VzOwor6Kmi5ZWPIDwgaW5xdWlyZVwtYWJvdXQ7CivpnJ0gPCBkcm9wc1wtb2ZcLXJhaW47CivmkYHph6blhZIgPCBzbmFwXC1mYXN0ZW5lcjsKK+atu+WIkSA8IGRlYXRoXC1wZW5hbHR5Owor6ZOWIDwgcGVyc29uJydzXC1uYW1lOwor55m955qu5p2+IDwgbGFjZWJhcmtcLXBpbmU7CivpjKEgPCBhXC1raW5kXC1vZlwtcGVuOwor5YW155eeIDwgYXJteVwtcmlmZnJhZmY7CivlrZjlhLLlmaggPCBtZW1vcnlcLVwodW5pdFwpOwor6LK/5piT6aCG5beuIDwgdHJhZGVcLXN1cnBsdXM7CivlvYzov6bmm7ggPCBib29rXC1vZlwtbWljYWg7CivpiIQgPCBhXC13aW5lXC1mbGFnb247Civmrablmajns7vntbEgPCB3ZWFwb25cLXN5c3RlbTsKK+mHrSA8IHRpcmVcLW9mXC13aGVlbDsKK+mGqCA8IGRyZWdzXC1vZlwtd2luZTsKK+mrlOmHjSA8IFwoYm9keVwpXC13ZWlnaHQ7Civnmb3noJIgPCB3aGl0ZVwtYXJzZW5pYzsKK+aiheWhnui/quaWr+WllOmmsyA8IG1lcmNlZGVzXC1iZW56Owor55u45p62IDwgcGljdHVyZVwtZnJhbWU7CivovqEgPCByZWNyaW1pbmF0aW9uOwor5a6255So6Zu76IWmIDwgaG9tZVwtY29tcHV0ZXI7Civnj77ku6PljJYgPCBtb2Rlcm5pemF0aW9uOwor6L2PIDwgc2xlZXBpbmdcLWNhcnQ7CivlhbXnh58gPCBtaWxpdGFyeVwtY2FtcDsKK+S4u+emseaWhyA8IGxvcmQnJ3NcLXByYXllcjsKK+W4guawkSA8IGNpdHlcLXJlc2lkZW50Owor5bqt5ZySIDwgZmxvd2VyXC1nYXJkZW47Civot64gPCBoYXN0eVwtd2Fsa2luZzsKK+i9n+eCuCA8IFwoZHJvcFwtYVwpXC1ib21iOwor6YGO5Y67IDwgXChpblwtdGhlXClcLXBhc3Q7Civos64gPCBmYXJld2VsbFwtZ2lmdDsKK+iJpuiJhyA8IG5hdmFsXC12ZXNzZWxzOwor5aSn5YWs54Sh56eBIDwganVzdFwtYW5kXC1mYWlyOwor5ZOl5p6X5aSa5YmN5pu4IDwgMVwtY29yaW50aGlhbnM7CivlhrDmnJ8gPCBnbGFjaWFsXC1lcG9jaDsKK+mXnOaWvCA8IHBlcnRhaW5pbmdcLXRvOwor5Ymb5YmbIDwganVzdFwtcmVjZW50bHk7Civlu6DkuLsgPCBmYWN0b3J5XC1vd25lcjsKK+WGjeasoSA8IG9uZVwtbW9yZVwtdGltZTsKK+isjSA8IGh1bW1pbmdcLXNvdW5kOwor5paw57SE5YWo5pu4IDwgbmV3XC10ZXN0YW1lbnQ7CivoprYgPCB0b1wtbG9va1wtYWJvdXQ7CivoppQgPCB0b1wtc2VhcmNoXC1mb3I7CivopZogPCBncmF2ZVwtY2xvdGhlczsKK+asiuWKmyA8IFwod2llbGRcKVwtcG93ZXI7CivooLUgPCBsYXJnZVwtdHVydGxlczsKK+ewv+exjSA8IGFjY291bnRcLWJvb2tzOwor6J6+IDwgdGhlXC1lYXJ0aHdvcm07CivonqUgPCB0aGVcLWhvdXNlXC1mbHk7CivonpkgPCBncnVic1wtaW5cLXdvb2Q7Civom4UgPCBhXC1jYXRlcnBpbGxhcjsKK+apq+aOgyA8IHRvXC1zd2VlcFwtYXdheTsKK+W6puWBhyA8IGdvXC1vblwtaG9saWRheTsKK+iYryA8IHRvXC10b3NzXC1hYm91dDsKK+eVsOizqiA8IGhldGVyb2dlbmVvdXM7Civou4rnq5kgPCBcKGJ1c1wpXC1zdGF0aW9uOwor5Lqe5rSy5ZyL5a62IDwgYXNpYW5cLWNvdW50cnk7CivmmrTpoqjpqZ/pm6ggPCB2aW9sZW50XC1zdG9ybTsKK+iUjiA8IHRoZWFcLXNpbmVuc2lzOwor5YKZ6IezIDwgdG9cLXRoZVwtdXRtb3N0Owor6JG9IDwgdHlwZVwtb2ZcLWdyYWluOwor6I+8IDwgcnVzaFwtb3JcLXNlZGdlOwor6I+6IDwgYWx0aGFlYVwtcm9zZWE7Civot5HpnosgPCBydW5uaW5nXC1zaG9lczsKK+iPkSA8IHRvXC13ZWVkXC1ncmFzczsKK+WgseWWriA8IHRheGF0aW9uXC1mb3JtOwor6I6nIDwgZWRpYmxlXC1ncmVlbnM7CivojKUgPCBydWJ1c1wtdG9ra3VyYTsKK+mRkuizniA8IHRvXC1hcHByZWNpYXRlOwor6IuYIDwgaW5kaWFuXC1tYWxsb3c7CivpgJnkvY0gPCB0aGlzXC1cKHBlcnNvblwpOwor5Zuw56qYIDwgZW1iYXJyYXNzbWVudDsKK+mZjeS4liA8IGNvbWVcLXRvXC1lYXJ0aDsKK+iEpSA8IHBlbHZpY1wtY2F2aXR5Owor5L6/6aOvIDwgYVwtc2ltcGxlXC1tZWFsOwor6IOyIDwgaHlkcm94eWxhbWluZTsKK+i8u+ainSA8IFwod2hlZWxcKVwtc3Bva2U7Civlpb3lub7lubQgPCBzZXZlcmFsXC15ZWFyczsKK+e9syA8IHdvb2Rlblwtc2NyZWVuOwor57yHIDwgcmVkZGlzaFwtY29sb3I7CivmiZPplosgPCB0b1wtYnJlYWtcLW9wZW47CivllK7npajomZUgPCB0aWNrZXRcLW9mZmljZTsKK+eZvOaPriA8IGJyaW5nXC10b1wtYmVhcjsKK+ezrSA8IHJpY2VcLWR1bXBsaW5nOwor5o2J5Y+W5ZyW5YOPIDwgY2FwdHVyZVwtaW1hZ2U7Civnsb4gPCB1bmh1bGxlZFwtcmljZTsKK+exnCA8IGJhbWJvb1wtc2hlYXRoOwor5YWt6bue5Y2KIDwgaGFsZlwtcGFzdFwtc2l4Owor6ZaL5b+DIDwgdG9cLWZlZWxcLWhhcHB5Owor54Sh5oSP6K2YIDwgdW5jb25zY2lvdXNseTsKK+WvpumplyA8IHRvXC1leHBlcmltZW50Owor56y1IDwgYVwtYmFtYm9vXC1mb3JtOwor56ytIDwgYmFtYm9vXC1zY3JlZW47CivovYnlvY4gPCB0dXJuXC1cKGFyb3VuZFwpOwor5qGI6aCtIDwgb25cLW9uZScnc1wtZGVzazsKK+aLnOmHkeS4u+e+qSA8IG1vbmV5XC13b3JzaGlwOwor5rC45LmF5ZKM5bmzIDwgbGFzdGluZ1wtcGVhY2U7CivnoJ4gPCB0b1wtc21hc2hcLXJvY2s7Civnn54gPCBib3JlXC13aXRoXC1hd2w7CivovqjliKUgPCBkaWZmZXJlbnRpYXRlOwor5oqE6KWyIDwgdG9cLXBsYWdpYXJpemU7CivovqbliLAgPCB0b1wtYWNjb21wbGlzaDsKK+WFiOW+jCA8IGluXC1zdWNjZXNzaW9uOwor55Wc6IKlIDwgYW5pbWFsXC1tYW51cmU7Civmjqjli5XlipsgPCBkcml2aW5nXC1mb3JjZTsKK+aLiee+jiA8IGxhdGluXC1hbWVyaWNhOwor5qC46Zu7IDwgbnVjbGVhclwtcG93ZXI7Civotorph44gPCBjcm9zc1wtY291bnRyeTsKK+eSgiA8IGphZGVcLW9ybmFtZW50Owor55CVIDwgdHlwZVwtb2ZcLXBlYXJsOwor542ZIDwgZGllXC12aW9sZW50bHk7CivlhazlnJIgPCBhXC1wdWJsaWNcLXBhcms7Civnmb7lp5MgPCBjb21tb25cLXBlb3BsZTsKK+WTiOiWqeWFi+S6uiA8IGthemFraFwtcGVyc29uOwor54G95Y2AIDwgZGlzYXN0ZXJcLWFyZWE7Civpgb/poqjomZUgPCBsZWVcLFwtd2luZHN0b3A7CivniYEgPCBtb29yaW5nXC1zdGFrZTsKK+ani+aIkCA8IHRvXC1jb25zdGl0dXRlOwor54awIDwgZ3JlYXRcLWRyb3VnaHQ7Civkv53ol48gPCBrZWVwXC1pblwtc3RvcmU7CivnkZ7pppkgPCB3aW50ZXJcLWRhcGhuZTsKK+aLjOeoriA8IHNlZWRcLWRyZXNzaW5nOwor57GM5o6qIDwgcmFpc2VcLVwobW9uZXlcKTsKK+ajhOe9riA8IHRvXC10aHJvd1wtYXdheTsKK+S9v+eUqOmHjyA8IHZvbHVtZVwtb2ZcLXVzZTsKK+izo+m7niA8IHNlbGxpbmdcLXBvaW50Owor55im5byxIDwgdGhpblwtYW5kXC13ZWFrOwor5rWsIDwgbmF1dGljYWxcLW1pbGU7Civnmb3ljKogPCB3aGl0ZVwtYmFuZGl0czsKK+iCiemrlCA8IHBoeXNpY2FsXC1ib2R5Owor5qy1IDwgdG9cLXRyZWF0XC13ZWxsOwor5qyTIDwgYVwtY3Jvc3NcLXBpZWNlOwor5Y2K5bCO6auUIDwgc2VtaWNvbmR1Y3RvcjsKK+WCmeahiCA8IHB1dFwtb25cLXJlY29yZDsKK+arjCA8IGFcLWtpbmRcLW9mXC1ob2U7Civmqq4gPCBibG9ja1wtb2ZcLXdvb2Q7Civlt6HoiKrlsI7lvYggPCBjcnVpc2VcLW1pc3NsZTsKK+S4jeWPr+iDveeahOS6iyA8IGltcG9zc2liaWxpdHk7CivmpowgPCB3b29kZW5cLWxhZGRlcjsKK+eZvuWIhuS5i+S6lOWNgSA8IGZpZnR5XC1wZXJjZW50Owor6ayl5b+XIDwgd2lsbFwtdG9cLWZpZ2h0Owor5omB6I2zIDwgaHlhY2ludGhcLWJlYW47Civnmb7lgI0gPCBhXC1odW5kcmVkZm9sZDsKK+almSA8IG5hbWVcLW9mXC1wbGFudDsKK+ethuetkiA8IHBlblwtY29udGFpbmVyOwor5qK5IDwgdGhlXC1hcmVjYVwtbnV0Owor5a+26JeNIDwgc2FwcGhpcmVcLWJsdWU7Civmoo4gPCBzaWNrbGVcLWhhbmRsZTsKK+agsCA8IGFcLWJhbWJvb1wtcmFmdDsKK+a7sueisyA8IGNhcmJ1cml6YXRpb247CivmmrTlipvniq/nvaogPCB2aW9sZW50XC1jcmltZTsKK+acqSA8IGt3dWt5ZWxcOlwtcmFuazsKK+a4oemBjiA8IHRvXC1jcm9zc1wtb3ZlcjsKK+Wtl+mbhiA8IGNoYXJhY3Rlclwtc2V0Owor6aeB5q685qeNIDwgbWF1c2VyXC1waXN0b2w7CivkvZXopb/pmL/mm7ggPCBib29rXC1vZlwtaG9zZWE7CivnqbrpgYsgPCBhaXJcLXRyYW5zcG9ydDsKK+Wlp+WFi+aLieiNt+mmrOW4giA8IG9rbGFob21hXC1jaXR5Owor5pCiIDwgdG9cLXN0aWNrXC1pbnRvOwor5o6tIDwgdG9cLW1hbmlwdWxhdGU7CivmjLYgPCBob2xkXC1pblwtaGFuZHM7Civmi5UgPCB0b1wtZHJhZ1wtYWZ0ZXI7CivmioMgPCB0b1wtY2xhcFwtaGFuZHM7CivkuI3miJDmlofms5UgPCB1bndyaXR0ZW5cLWxhdzsKK+aIuiA8IHN0b25lXC1ib2FyZGVyOwor5oi5IDwgaW5cLWRpZmZpY3VsdHk7Civpq5jpgJ/kuZnlpKrntrLot68gPCBmYXN0XC1ldGhlcm5ldDsKK+S4jeaWueS+vyA8IGluY29udmVuaWVuY2U7CivmspLntpPpqZcgPCBpbmV4cGVyaWVuY2VkOwor6KGo5bGkIDwgc3VyZmFjZVwtbGF5ZXI7CivmgL4gPCBtb3VudGFpblwtbmFtZTsKK+Wck+WRqCA8IGNpcmN1bWZlcmVuY2U7Civlvb0gPCBnb1wtdG9cLWFuZFwtZnJvOwor5b2yIDwgeWVsbG93XC1kcmFnb247CivlvZQgPCB0b1wtY2FydmVcLXdvb2Q7CivkuLvml6XlrbggPCBzdW5kYXlcLXNjaG9vbDsKK+eXheWusyA8IHBsYW50XC1kaXNlYXNlOwor5bewIDwgYW5cLWF0b21cLWdyb3VwOwor5ZSu6LKoIDwgdG9cLXNlbGxcLWdvb2RzOwor5bOCIDwgbmFtZVwtb2ZcLXBsYWNlOwor5pyJ5Yqp5LqOIDwgY29udHJpYnV0ZVwtdG87Civlr4AgPCBmZXVkYWxcLWVzdGF0ZTsKK+iIjOWwliA8IHRpcFwtb2ZcLXRvbmd1ZTsKK+ahiOeosSA8IGNvdW50ZXJcLXNjYWxlOwor5aqiIDwgYmVcLWplYWxvdXNcLW9mOwor5raI6ZiyIDwgZmlyZVwtZmlnaHRpbmc7CivllonntZAgPCBhZGFtJydzJydcLWFwcGxlOwor5bO25ZyLIDwgaXNsYW5kXC1uYXRpb247CivprKfkuosgPCBjYXVzZVwtdHJvdWJsZTsKK+S6rOmDvSA8IGt5b3RvXC1cKGphcGFuXCk7Civlm5vljYMgPCBmb3VyXC10aG91c2FuZDsKK+eVtuW5tCA8IGluXC10aG9zZVwtZGF5czsKK+WeuyA8IGFuXC1lbWJhbmttZW50Owor6LKh6L+3IDwgbW9uZXlcLWdydWJiZXI7CivkuInljYHlhIQgPCB0aHJlZVwtYmlsbGlvbjsKK+eQhuinoyA8IHRvXC1jb21wcmVoZW5kOwor5ZqaIDwgYXJndW1lbnRhdGl2ZTsKK+S4jeWHjea4ryA8IGljZVwtZnJlZVwtcG9ydDsKK+atpeipseapnyA8IHdhbGtpZVwtdGFsa2llOwor5a+G56K8IDwgXChzZWNyZXRcKVwtY29kZTsKK+evieWfjiA8IGZvcnRpZmljYXRpb247CivlkqEgPCBzaWRlXC1vZlwtbW91dGg7CivooZvlhbUgPCBcKGJvZHlcKVwtZ3VhcmRcKTsKK+iJvua7i+eXheaKl+mrlCA8IGFpZHNcLWFudGlib2R5Owor6ZuG57ea5ZmoIDwgaHViXC1cKG5ldHdvcmtcKTsKK+eWkeWVjyA8IGludGVycm9nYXRpb247Civlh58gPCB0b1wtYmVcLXJ1ZGVcLXRvOwor5ZaJ55enIDwgc2NhcmxldFwtZmV2ZXI7CivlgIvmgKcgPCBpbmRpdmlkdWFsaXR5Owor5YS5IDwgdG9cLWFjY3VtdWxhdGU7CivlhLIgPCB0b1wtc2F2ZVwtbW9uZXk7CivlhJsgPCB0b1wtc2tpcFwtYWJvdXQ7CivkuI3oiJLpgakgPCB1bmNvbWZvcnRhYmxlOwor5YKSIDwgcGVyc29uYWxcLW5hbWU7CivlhanljYPlubQgPCB0aGVcLXllYXJcLTIwMDA7CivmqJnmnKzon7IgPCBzcGlkZXJcLWJlZXRsZTsKK+WVn+ekuiA8IGVubGlnaHRlbm1lbnQ7CivpgLLlh7rlj6MgPCBpbXBvcnRcfGV4cG9ydDsKK+S4jeWPr+S+teeKr+asiiA8IGludmlvbGFiaWxpdHk7CivkvoIgPCB0b1wtY29tbWlzc2lvbjsKK+WQkeilv+WNlyA8IHNvdXRod2VzdHdhcmQ7Civoh7Tlh70gPCBzZW5kXC1hXC1sZXR0ZXI7CivkuaggPCB0aGVcLWJlZ2lubmluZzsKK+S2miA8IGRlY2F5ZWRcLXRvb3RoOwor5LaIIDwgYVwta2luZFwtb2ZcLXJhdDsKK+S1vyA8IGFcLXNpbGVudFwtZHJ1bTsKK+S1gSA8IGRlY2F5ZWRcLWRvdWdoOwor5LSwIDwgYVwtZmFtaWx5XC1uYW1lOwor5LK6IDwgYmlyZHNcLXNpbmdpbmc7CivksoUgPCB0aGVcLWdsb2JlZmlzaDsKK+SwuyA8IHRvXC1jYXRjaFwtZmlzaDsKK+aEj+itmCA8IGNvbnNjaW91c25lc3M7CivksLEgPCBuYW1lXC1vZlwtYVwtZ29kOwor5ZSu56Wo5ZOhIDwgdGlja2V0XC1zZWxsZXI7Civkr4UgPCBhXC1zd2lmdFwtaG9yc2U7CivkroggPCB0b1wtZ29cLXN3aWZ0bHk7Civkq78gPCBhXC1jb29sXC1icmVlemU7Civkq7QgPCB3ZWFrXC1hbmRcLWR1bGw7Civoga/ntaEgPCBjb21tdW5pY2F0aW9uOwor5ZSu56Wo5Y+jIDwgdGlja2V0XC13aW5kb3c7CivmiYHmk5QgPCBjYXJyeWluZ1wtcG9sZTsKK+SrgSA8IHRoZVwtZmlyc3RcLXNvbjsKK+SqqyA8IGFuY2llbnRcLW11c2ljOwor5KqSIDwgbGVhdGhlclwtcGFudHM7Civkqb4gPCBoZXJiXC1tZWRpY2luZTsKK+SppCA8IHRvXC1sZWFkXC1hblwtb3g7CivkqaMgPCBzaG9lXC1jdXNoaW9uczsKK+SpniA8IGFcLXNhZGRsZVwtZmxhcDsKK+SojiA8IGRlZXBcLWFuZFwtZGFyazsKK+WuieWumuWMliA8IHN0YWJpbGl6YXRpb247Civkp5YgPCBhXC1zbWFsbFwtbW91bmQ7CivkprQgPCBvcGVuXC10aGVcLWRvb3I7CivkprMgPCBiZXR3ZWVuXC1zdGVwczsKK+S6pOaPm+erryA8IHN3aXRjaGVkXC1wb3J0Owor5ZOA6JmfIDwgY3J5XC1waXRlb3VzbHk7CivkpqEgPCBhXC1kb29yXC1rZWVwZXI7CivkpakgPCBob29rc1wtdG9cLWhhbmc7CivkpLUgPCBhXC10aW55XC1uZWVkbGU7CivkpI4gPCBzb3liZWFuXC1zYXVjZTsKK+SkgyA8IGRydW5rZW5cLXNvdW5kOwor5KOwIDwgdG9cLXBvb2xcLW1vbmV5Owor5KKnIDwgdG9cLWdvXC1mb3J3YXJkOwor5KKaIDwgYVwtbmFycm93XC1wYXRoOwor5KKDIDwgdG9cLWFkbWluaXN0ZXI7CivkoaUgPCBhXC1tb3ZpbmdcLWNhcnQ7Civkn5ggPCB0b1wtc3RyYWlnaHRlbjsKK+SfiiA8IHNob3J0XC1zdHJpZGVzOwor5qGC5p6XIDwgZ3VpbGluXC1cKGNpdHlcKTsKK+SegSA8IGNvcnJlc3BvbmRpbmc7CivknbYgPCB0b1wtbGV2eVwtdGF4ZXM7CivknawgPCBhXC13ZWFsdGh5XC1tYW47Civph5Hpu4MgPCBnb2xkZW5cLXllbGxvdzsKK+SbviA8IGZhbWlsaWFyXC13aXRoOwor5LiN55u45bmyIDwgYmVcLWlycmVsZXZhbnQ7Civnm67mqJnluILloLQgPCB0YXJnZXRcLW1hcmtldDsKK+SbkCA8IGFuXC1leHByZXNzaW9uOwor5aSp5puJ5b6XIDwgaGVhdmVuXC1rbm93c1whOwor5JqVIDwgdG9cLXNlYXJjaFwtb3V0Owor5Jm5IDwgdG9cLXZvbWl0XC1taWxrOwor5JmlIDwgc2hpbnlcLWRyZXNzZXM7CivkmaIgPCBzaG9ydFwtdFwtc2hpcnQ7CivkmaAgPCBzaG9ydFwtY2xvdGhlczsKK+SZnyA8IGhlYXZ5XC1jbG90aGVzOwor5JmeIDwgd29vbGVuXC1zdHJpbmc7CivkmYUgPCB0aGVcLXdhaXN0bGluZTsKK+i3qOWciyA8IHRyYW5zbmF0aW9uYWw7Civkl5cgPCB0aGVcLW1pbGxpcGVkZTsKK+SWqSA8IGFcLWtpbmRcLW9mXC1iZWU7CivklpEgPCBhXC13aGl0ZVwtdGlnZXI7CivklocgPCBmcmFncmFudFwtaGVyYjsKK+a8lOWHuiA8IFwoYWN0aW5nXClcLXBsYXk7CivlkIPpo68gPCB0b1wtZWF0XC1hXC1tZWFsOwor5JKOIDwgd2l0aG91dFwtY29sb3I7CivkkbIgPCB0b1wtcm93XC1hXC1ib2F0Owor5JGlIDwgYVwtbW92aW5nXC1ib2F0Owor5JCyIDwgaGFsZlwtcmF3XC1tZWF0Owor5JCZIDwgdGhlXC1kaWFwaHJhZ207Civkj5ggPCBhXC1iaWdcLWFiZG9tZW47Civkj4QgPCBub3RcLXRvXC1saXN0ZW47CivkuI3pgJogPCBiZVwtb2JzdHJ1Y3RlZDsKK+acgOmrmOazlemZoiA8IHN1cHJlbWVcLWNvdXJ0Owor5I29IDwgYVwtZmllcmNlXC1nb2F0Owor5I28IDwgc2FsdGVkXC1tdXR0b247CivkjaogPCBjYXN0cmF0ZWRcLXJhbTsKK+SNpCA8IHRvXC1zdHJhaW5cLW91dDsKK+aIkuaMhyA8IFwoZmluZ2VyXClcLXJpbmc7CivmnIDlvozmm7TmlrAgPCBsYXRlc3RcLXVwZGF0ZTsKK+SMmSA8IGhhbmtcLW9mXC1yb3BlczsKK+SMhSA8IGFcLXRoaWNrXC1yb3BlczsKK+SLpiA8IHJhdmVsbGVkXC1zaWxrOwor5IudIDwgYVwtdGhyb2F0XC1iYW5kOwor5p2P5LuB6LGG6IWQIDwgYWxtb25kXC1qdW5rZXQ7Civkir0gPCBhXC1maW5lXC10aHJlYWQ7CivkipQgPCBwb2xpc2hlZFwtcmljZTsKK+SJqSA8IGFcLWJhbWJvb1wtd2FyZTsKK+SJqCA8IGJhbWJvb1wtam9pbnRzOwor5Ii+IDwgbW92ZVwtYVwtbGl0dGxlOwor5IizIDwgYVwtd2luZG93XC1sZWFmOwor5bCR5bCHIDwgbWFqb3JcLWdlbmVyYWw7CivkhpogPCB0b1wtZ29cLXRocm91Z2g7CivmnZzntZUgPCBwdXRcLWFuXC1lbmRcLXRvOwor5IWbIDwgaHVza3NcLW9mXC1yaWNlOwor5IOzIDwgZmFsbGluZ1wtc3RvbmU7CivkgrYgPCB0aGVcLWNydXN0YWNlYTsKK+SClyA8IHRvXC1iZVwtY2FyZWZ1bDsKK+SCjiA8IGFcLXNob3J0XC1zcGVhcjsKK+SCgSA8IGFuXC1hbmdyeVwtbG9vazsKK+SBmSA8IGVsb3F1ZW50XC1leWVzOwor5ICuIDwgc2lnaHRcLWJsdXJyZWQ7CivkgK0gPCB3aXRoXC1iaWdcLWV5ZXM7CivkgJYgPCB0b1wtbG9va1wtdXBcLXRvOwor5ICVIDwgYW5ncnlcLWdsYW5jZXM7CivmmpfpjpYgPCBidWlsdFwtaW5cLWxvY2s7Civjv6wgPCBuYXNhbFwtZGlzZWFzZTsKK+O+vSA8IHN3ZWxsaW5nXC1mZWV0Owor472yIDwgZ3JpcGluZ1wtY29saWM7CivjvYcgPCB1bmJ1cm50XC10aWxlczsKK+O8tSA8IGFcLXNtYWxsXC1iYXNpbjsKK+O8nyA8IGFcLXRpbGVkXC1ob3VzZTsKK+O8jiA8IGFcLXNtYWxsXC1tZWxvbjsKK+O7viA8IGphZGVcLWFydGljbGVzOwor5ZCM55uf5ZyLIDwgY29uZmVkZXJhdGlvbjsKK+O6iCA8IHRvXC1nb1wtaHVudGluZzsKK+O5uSA8IGFcLWtpbmRcLW9mXC1kb2c7CivjubUgPCBhXC1odW50aW5nXC1kb2c7CivjubMgPCBhXC1raW5kXC1vZlwtYXBlOwor5oey5oiSIDwgdG9cLWRpc2NpcGxpbmU7CivpgJnnqK7mlrnlvI8gPCBcKGluXClcLXRoaXNcLXdheTsKK+S4i+iqsiA8IGNsYXNzXC1pc1wtb3ZlcjsKK+S4jeipsyA8IG5vdFwtaW5cLWRldGFpbDsKK+O4hCA8IGFcLXJhZ2luZ1wtZmlyZTsKK+O3viA8IGJsYXplXC1vZlwtZmlyZTsKK+WPjemfvyA8IHJlcGVyY3Vzc2lvbnM7Civjt5YgPCB0b1wtc2hpbmVcLXVwb247Civjt5UgPCBoZWFyaW5nXC1zb3VuZDsKK+O3kiA8IHRvXC1jb29rXC1tZWFsczsKK+O2mCA8IGZ1bGxcLW9mXC13YXRlcjsKK+Wlp+mBi+acgyA8IG9seW1waWNcLWdhbWVzOwor47WzIDwgY3J5c3RhbFwtY2xlYXI7CivjtaAgPCB0b1wtZ3VzaFwtZm9ydGg7CivjtL0gPCB3YXRlclwtY3VycmVudDsKK+O0qyA8IGdyZWF0XC1mbG93aW5nOwor47SmIDwgdG9cLXdhc2hcLWhhbmRzOwor47SlIDwgZ3JlYXRcLWJpbGxvd3M7CivjtJAgPCBncmVhdFwtY3VycmVudDsKK+S/neitt+S4u+e+qSA8IHByb3RlY3Rpb25pc207CivjspsgPCBoYWlyeVwtYW5pbWFsczsKK+WcqOacquS+hiA8IGluXC10aGVcLWZ1dHVyZTsKK+Wuv+aAqCA8IGFuXC1vbGRcLWdydWRnZTsKK+OwuyA8IGFzc2VzXC1icmF5aW5nOwor47CPIDwgYVwtYmFtYm9vXC1wb2xlOwor47CMIDwgdG9cLW1vbm9wb2xpemU7Civjrb8gPCBvYmxpcXVlXC1hbmdsZTsKK+WWruWtkCA8IGxpc3RcLW9mXC1pdGVtczsKK+OtkyA8IGFcLXBpbGxhclwtYXJjaDsKK+iyoueNuyA8IHRvXC1jb250cmlidXRlOwor46ylIDwgdG9cLXN1blwtdG9cLWFpcjsKK+WPq+mGkiA8IHRvXC1jYWxsXC1hd2FrZTsKK+OshCA8IHdhcm1cLWFuZFwtZGFtcDsKK+OrnyA8IGRheVwtYWZ0ZXJcLWRheTsKK+WNl+e+jua0siA8IHNvdXRoXC1hbWVyaWNhOwor576O6KGTIDwgdGhlXC1maW5lXC1hcnRzOwor46mlIDwgZGVsaWNhdGVcLWhhbmQ7CivjqJ4gPCB0b1wtZmVlbFwtYWJvdXQ7Civjp7wgPCB0b1wtZGlzdHJpYnV0ZTsKK+OntyA8IHRvXC13aXBlXC10ZWFyczsKK+OmqyA8IGxheFwtYW5kXC1jcnVkZTsKK+OmjCA8IGtlZW5cLW9yXC1zaGFycDsKK+OlvCA8IHRvXC1iZVwtbmVhclwtdG87Civjo78gPCBwYWluZnVsbHlcLXNhZDsKK+OjpCA8IHRvXC10cmVhZFwtdXBvbjsKK+OiuyA8IHRvXC1kcmF3XC1hXC1ib3c7CivjopYgPCBhXC1zdG9yZVwtaG91c2U7CivkuIPnmb7okKwgPCBzZXZlblwtbWlsbGlvbjsKK+OgtCA8IGFcLXBpbGxvd1wtY2FzZTsKK+OgmyA8IG5hbWVcLWFcLWNvdW50eTsKK+aciOeQg+ihqOmdoiA8IGx1bmFyXC1zdXJmYWNlOwor45+tIDwgdGhlXC1taW5cLXJpdmVyOwor6IO95aSgIDwgYmVcLWNhcGFibGVcLW9mOwor456sIDwgY2xvc2VcLW9yXC1uZWFyOwor456LIDwgc29mdFwtYW5kXC1tZWVrOwor5a625bGsIDwgZmFtaWx5XC1tZW1iZXI7CivjnbsgPCBiYXJlbHlcLWVub3VnaDsKK+OdgyA8IHRvXC1iZWFyXC1hXC1zb247CivlnLDmlrnlgZzou4ogPCBwYXJraW5nXC1wbGFjZTsKK+ObkiA8IGNhblwtbm90XC1zcGVhazsKK+OatCA8IGFcLXByZXR0eVwtZ2lybDsKK+m8u+a3tSA8IG5hc29zaW51c2l0aXM7Civmh4LlvpcgPCB0b1wtdW5kZXJzdGFuZDsKK+OYmyA8IGFcLWRlZXBcLXZhbGxleTsKK+acieiJr+W/gyA8IGNvbnNjaWVudGlvdXM7CivjmJMgPCBwcm9saXhcLXNwZWVjaDsKK+OYiSA8IHRvXC1tYWtlXC1zb3VuZDsKK+OXtCA8IGRvZ3NcLWZpZ2h0aW5nOwor45WwIDwgc291bmRcLWFuZ3JpbHk7CivjlaogPCBiaXJkcycnXC1jaGlycHM7CivjlZkgPCBhXC13aWx5XC1yYWJiaXQ7CivjlYkgPCB0b1wtZGlnXC1hXC1ob2xlOwor45SlIDwgZnVsbFwtb2ZcLWFuZ2VyOwor45O0IDwgdG9cLWN1dFwtaW5cLXR3bzsKK+WNium7niA8IHRoZVwtbGVhc3RcLWJpdDsKK+OTliA8IGJpdHRlcmx5XC1jb2xkOwor5Lul5aSq57ay57Wh56uv5Y+jIDwgZXRoZXJuZXRcLXBvcnQ7CivjkaUgPCBkaXNyZXNwZWN0ZnVsOwor6Ymb562GIDwgXChsZWFkXClcLXBlbmNpbDsKK+WWruWQkSA8IHVuZGlyZWN0aW9uYWw7CivjkLAgPCB0b1wtYmVsaWV2ZVwtaW47Civlj5fos4QgPCBhY2NlcHRcLWJyaWJlczsKK+m8u+mjvOazlSA8IG5hc2FsXC1mZWVkaW5nOwor55+l5ZCN5Lq65aOrIDwgcHVibGljXC1maWd1cmU7CivntITmi7/mm7ggPCBib29rXC1vZlwtam9uYWg7CivkvovlgYcgPCBsZWdhbFwtaG9saWRheTsKK+awtOmdoiA8IHdhdGVyXC1zdXJmYWNlOwor5q2l6KGM6J+yIDwgZ3JvdW5kXC1iZWV0bGU7Civnp7vmrpYgPCB0b1wtdHJhbnNwbGFudDsKK+i1t+S8jyA8IHVwc1wtYW5kXC1kb3duczsKK+iuiuiqvyA8IG1vZGlmaWVkXC10b25lOwor5Y+L6Kq8IDwgY29tcGFuaW9uc2hpcDsKK+e+juWci+Wci+acgyA8IHVcLnNcLlwtY29uZ3Jlc3M7Civlk4DmqIIgPCBmdW5lcmFsXC1tdXNpYzsKK+S4jeW5uOeahOaYryA8IHVuZm9ydHVuYXRlbHk7Civlr4zkuo4gPCB0b1wtYmVcLWZ1bGxcLW9mOwor5L6/5q2l6LWwIDwgbWFyY2hcLWF0XC1lYXNlOwor6IGy5bi2IDwgdm9jYWxcLWNvcmRcKHNcKTsKK+S4jeefpSA8IHVua25vd2luZ1wobHlcKTsKK+Wtq+WlsyA8IGdyYW5kZGF1Z2h0ZXI7CivlhYnnupbpm7vnupwgPCBvcHRpY2FsXC1maWJlcjsKK+ekvuS6pOiqnuiogCA8IGxpbmd1YVwtZnJhbmNhOwor5ra85b+rIDwgbmljZVwtYW5kXC1jb2xkOwor5LiJ55m+IDwgdGhyZWVcLWh1bmRyZWQ7CivpgKPmjqXoh7MgPCB0b1wtY29ubmVjdFwtdG87CivkuqzmiLIgPCBiZWlqaW5nXC1vcGVyYTsKK+S9juS6jiA8IGJlXC1sb3dlclwtdGhhbjsKK+mztuWwvuiKsSA8IGlyaXNcLVwoZmxvd2VyXCk7CivljZfpg6ggPCBzb3V0aGVyblwtcGFydDsKK+iuiuiJsiA8IGNoYW5nZVwtY29sb3VyOwor5Y2K5a6Y5pa5IDwgc2VtaVwtb2ZmaWNpYWw7CivljJfpnaIgPCBub3J0aGVyblwtc2lkZTsKK+S4iuePrSA8IHRvXC1nb1wtdG9cLXdvcms7Civnmb7np5Hlhajmm7ggPCBlbmN5Y2xvcGFlZGlhOwor5ZCE56iuIDwgZXZlcnlcLWtpbmRcLW9mOwor6LKd5b2rIDwgc2hlbGxcLWNhcnZpbmc7Civml6Xou40gPCBqYXBhbmVzZVwtYXJteTsKK+WKn+eOh+aDoeWMliA8IHBvd2VyXC1wZW5hbHR5Owor5Y2X6LaKIDwgc291dGhcLXZpZXRuYW07CivmhJvmho4gPCBsb3ZlXC1hbmRcLWhhdGU7Civogbflk6EgPCBvZmZpY2VcLXdvcmtlcjsKK+a0i+a6oiA8IGJyaW1taW5nXC13aXRoOwor5LiN5Y+v5oqX5YqbIDwgZm9yY2VcLW1hamV1cmU7CivljZToqr8gPCB0b1wtY29vcmRpbmF0ZTsKK+Wkp+mYqiA8IG9zYWthXC1cKGphcGFuXCk7CivogIPmha4gPCB0b1wtdGhpbmtcLW92ZXI7CivnlJ/lkb3nmoTpgbrot6EgPCB0cmFjZVwtb2ZcLWxpZmU7CivljJfpg6ggPCBub3J0aGVyblwtcGFydDsKK+WFvOWuueaApyA8IGNvbXBhdGliaWxpdHk7Civop6Plo5PnuK4gPCB0b1wtZGVjb21wcmVzczsKK+acrOaEjyA8IG9yaWdpbmFsXC1pZGVhOwor5ZC45q+SIDwgdG9cLXRha2VcLWRydWdzOwor5Lit5ZyL6YqA6KGMIDwgYmFua1wtb2ZcLWNoaW5hOwor5rOz5rGgIDwgc3dpbW1pbmdcLXBvbmQ7CivkuIDmraUgPCBcKHNpbmdsZVwpXC1zdGVwOwor5YyX6LaKIDwgbm9ydGhcLXZpZXRuYW07Civpn7/mh4nmmYLplpMgPCByZXNwb25zZVwtdGltZTsKK+mbnOmghSA8IG1pc2NlbGxhbmVvdXM7CivlgrPovLjmqKHlvI8gPCB0cmFuc2ZlclwtbW9kZTsKK+aOoeajieapnyA8IGNvdHRvblwtcGlja2VyOwor5aSW6YOoIDwgZXh0ZXJuYWxcLXBhcnQ7CivogZ7kurogPCBmYW1vdXNcLXBlcnNvbjsKK+WJjeaJgOacquaciSA8IHVucHJlY2VkZW50ZWQ7CivlkozlsJogPCBidWRkaGlzdFwtbW9uazsKK+iYh+W3niA8IHN1emhvdVwtXChjaXR5XCk7CivnpKbmsLQgPCBtaW5lcmFsXC13YXRlcjsKK+aakeawoyA8IFwoc3VtbWVyXClcLWhlYXQ7CivkuIDkuZ3kuZ3kuIPlubQgPCB0aGVcLXllYXJcLTE5OTc7Civlk4DlkYogPCBiZWdcLXBpdGVvdXNseTsKK+WkluiyvyA8IGZvcmVpZ25cLXRyYWRlOwor6YG/6ZujIDwgXFt0YWtlXF1cLXJlZnVnZTsKK+WMheiisSA8IGNsb3RoXC13cmFwcGVyOwor5oSf5YaSIDwgdG9cLWNhdGNoXC1jb2xkOwor5b2p6JqMIDwgcGFpbnRlZFwtc2hlbGw7Civoiq3olYnmiYcgPCBwYWxtXC1sZWFmXC1mYW47Civnpq7loIIgPCBhc3NlbWJseVwtaGFsbDsKK+e4veioiCA8IFwoZ3JhbmRcKVwtdG90YWw7CivlqJvmqIIgPCBlbnRlcnRhaW5tZW50Owor5Lit5a24IDwgbWlkZGxlXC1zY2hvb2w7CivkupTkuIAgPCA1XC0xXC1cKG1heVwtMXN0XCk7Civno4HniYcgPCBtYWduZXRpY1wtZGlzazsKK+acg+WgtCA8IG1lZXRpbmdcLXBsYWNlOwor5aq+5ZKMIDwgdG9cLW1ha2VcLXBlYWNlOwor5YWs5YWD5YmNIDwgYmVmb3JlXC1jaHJpc3Q7CivkuIrluIIgPCBvblwtdGhlXC1tYXJrZXQ7CivoqKrllY/mlrnlvI8gPCBhY2Nlc3NcLW1ldGhvZDsKK+aqlOahiOW7uueriyA8IGZpbGVcLWNyZWF0aW9uOwor56eB5YipIDwgcGVyc29uYWxcLWdhaW47CivpgbLpiI0gPCBzbG93XC1cKHdpdHRlZFwpOwor5rOi576O5bqmIDwgYmF1bWVcLWRlZ3JlZXM7CivljJfnvo4gPCBub3J0aFwtYW1lcmljYTsKK+e2k+mplyA8IHRvXC1leHBlcmllbmNlOwor5Ye655Sf5pel5pyfIDwgZGF0ZVwtb2ZcLWJpcnRoOwor5LiN5Y+v5oCd6K2wIDwgaW5jb25jZWl2YWJsZTsKK+agvOWtkOiKseWRoiA8IHBsYWlkXCxcLXRhcnRhbjsKK+axsuawtCA8IHRvXC1kcmF3XC13YXRlcjsKK+eNsuWLnSA8IGJlXC12aWN0b3Jpb3VzOwor6KeA6bueIDwgcG9pbnRcLW9mXC12aWV3Owor5Y2K5b6p6LO9IDwgZWlnaHRoXC1maW5hbHM7CivmsLTniZsgPCB3YXRlclwtYnVmZmFsbzsKK+mbmeeUn+WFhOW8nyA8IHR3aW5cLWJyb3RoZXJzOwor5ZCM5bm0IDwgdGhlXC1zYW1lXC15ZWFyOwor5pyA5aSn6YCf546HIDwgbWF4aW11bVwtc3BlZWQ7CivorormmJ8gPCB2YXJpYWJsZVwtc3RhcjsKK+mCiueVjOe3miA8IGJvdW5kYXJ5XC1saW5lOwor6JiH5L+EIDwgc292aWV0XC1ydXNzaWE7Civnj77lr6bmg4Xms4EgPCBjdXJyZW50XC1zdGF0ZTsKK+atpeihjCA8IHRvXC1nb1wtb25cLWZvb3Q7Civmk4XplbcgPCB0b1wtYmVcLWdvb2RcLWF0Owor5LiN5ZW7IDwgbm90XC1sZXNzXC10aGFuOwor54mM54WnIDwgbGljZW5zZVwtcGxhdGU7CivmlK/mjIHnjocgPCBzdXBwb3J0XC1sZXZlbDsKK+ippuS4gOippiA8IHRvXC1oYXZlXC1hXC10cnk7CivmmpflrrMgPCBraWxsXC1zZWNyZXRseTsKK+WMhee+heiQrOixoSA8IGFsbFwtZW1icmFjaW5nOwor5YuD6IiIIDwgcmlzZVwtc3VkZGVubHk7CivorormhYsgPCBtZXRhbW9ycGhvc2lzOwor5oCn5oW+IDwgc2V4dWFsXC1kZXNpcmU7CivljK/njocgPCBleGNoYW5nZVwtcmF0ZTsKK+ayu+WuiSA8IGxhd1wtYW5kXC1vcmRlcjsKK+imlumgu+evgOebriA8IHZpZGVvXC1wcm9ncmFtOwor6ZuM6IqxIDwgZmVtYWxlXC1mbG93ZXI7CivlhajkuJbnlYznrKzkuIAgPCB3b3JsZCcnc1wtZmlyc3Q7CivlpJrnqK4gPCBtYW55XC1raW5kc1wtb2Y7CivlkLjlhaUgPCB0b1wtYnJlYXRoZVwtaW47Civororlt6UgPCBleGNoYW5nZVwtd29yazsKK+S4i+iHs+S4iiA8IGJvdHRvbVwtdG9cLXRvcDsKK+WPl+WusyA8IHRvXC1iZVwtaW5qdXJlZDsKK+aJvuS4jeWIsCA8IGNvdWxkbicndFwtZmluZDsKK+axuuW/gyA8IGRldGVybWluYXRpb247CivkuIvku6QgPCBnaXZlXC1hblwtb3JkZXI7CivojqvpgIYgPCB2ZXJ5XC1mcmllbmRseTsKK+e+hemmrOWtl+avjSA8IHJvbWFuXC1sZXR0ZXJzOwor5q+U54axIDwgc3BlY2lmaWNcLWhlYXQ7CivkuI3lj6/lkI3ni4AgPCBpbmRlc2NyaWJhYmxlOwor556zIDwgcHVwaWxcLW9mXC1leWU7CivkuIcgPCB0ZW5cLXRob3VzYW5kOwor5biDIDwgY290dG9uXC1jbG90aDsKK+mAmiA8IHBhc3NcLXRocm91Z2g7Civmj5AgPCBob2xkXC1pblwtaGFuZDsKK+S6rCA8IGNhcGl0YWxcLWNpdHk7CivnlJogPCBncmVhdFwtZXh0ZW50Owor5ZGoIDwgemhvdVwtZHluYXN0eTsKK+WwuyA8IGVuZFwtb2ZcLXNwaW5lOwor5a60IDwgdG9cLWVudGVydGFpbjsKK+WusCA8IHRvXC1zbGF1Z2h0ZXI7Civniq8gPCBjb21taXRcLWNyaW1lOwor5amiIDwgc2VydmFudFwtZ2lybDsKK+WPgiA8IHRha2VcLXBhcnRcLWluOwor5o6MIDwgcGFsbVwtb2ZcLWhhbmQ7Civlp78gPCBvbmUnJ3NcLW1hbm5lcjsKK+WniSA8IGVsZGVyXC1zaXN0ZXI7CivmlpcgPCBjaGluZXNlXC1wZWNrOwor5ZG8IDwgYnJlYXRoZVwtc2lnaDsKK+ihnSA8IHJ1c2hcLWFnYWluc3Q7CivonrogPCBzcGlyYWxcLXNoZWxsOwor5Z2KIDwgbmVpZ2hib3Job29kOwor5bC8IDwgYnVkZGhpc3RcLW51bjsKK+m8viA8IHNub3JlXC1sb3VkbHk7Civlj7YgPCB0b1wtaGFybW9uaXplOwor6YeOIDwgb3BlblwtY291bnRyeTsKK+enuyA8IGNoYW5nZVwtcGxhY2U7CivllJAgPCB0YW5nXC1keW5hc3R5Owor56eAIDwgZWFyXC1vZlwtZ3JhaW47CivokrIgPCB0eXBlXC1vZlwtcnVzaDsKK+W6hiA8IGNvbmdyYXR1bGF0ZTsKK+iSnyA8IGJldGVsXC1wZXBwZXI7CivmsZcgPCBwZXJzcGlyYXRpb247Civmi5wgPCBkb1wtb2JlaXNhbmNlOwor6JmRIDwgYmVcLWNvbmNlcm5lZDsKK+WuiyA8IHNvbmdcLWR5bmFzdHk7Civog4YgPCBnYWxsXC1ibGFkZGVyOwor5YmWIDwgc3BsaXRcLWluXC10d287Civlh6QgPCBtYWxlXC1waG9lbml4Owor6K+iIDwgaW5xdWlyZVwtaW50bzsKK+etkSA8IGFuY2llbnRcLWx1dGU7CivlgbYgPCBhY2NpZGVudGFsbHk7Civpo70gPCBlYXRcLWhlYXJ0aWx5Owor6IOOIDwgdW5ib3JuXC1jaGlsZDsKK+aCnyA8IHRvXC1hcHByZWhlbmQ7CivogoUgPCBwYXlcLXJlc3BlY3RzOwor5L6YIDwgZGlzYXBwb2ludGVkOwor56WtIDwgc2FjcmlmaWNlXC10bzsKK+WuqiA8IGNvbnN0aXR1dGlvbjsKK+eikSA8IHN0b25lXC10YWJsZXQ7CivmmIwgPCBsaWdodFwtb2ZcLXN1bjsKK+aQuiA8IGxlYWRcLWJ5XC1oYW5kOwor5Y6mIDwgYmlnXC1idWlsZGluZzsKK+S7hiA8IGZhbGxcLWZvcndhcmQ7CivlpqUgPCBzYXRpc2ZhY3Rvcnk7Civmna0gPCBjcm9zc1wtc3RyZWFtOwor6LWgIDwgZ2l2ZVwtcHJlc2VudDsKK+iFlCA8IGNoZXN0XC1jYXZpdHk7CivlrZ0gPCBmaWxpYWxcLXBpZXR5Owor56y5IDwgc21hbGxcLWJhbWJvbzsKK+esmyA8IGJhbWJvb1wtZmx1dGU7CivmracgPCBmb3JrXC1vZlwtcm9hZDsKK+mJmyA8IGxlYWRcLXBsdW1idW07CivlloMgPCBrZWVwXC10YWxraW5nOwor6IixIDwgaG9sZFwtb2ZcLXNoaXA7CivphpwgPCB1Z2x5XC1sb29raW5nOwor6KOYIDwgZnVyXC1nYXJtZW50czsKK+agvSA8IHRvXC1jdWx0aXZhdGU7Civor6cgPCBiZVwtc3VycHJpc2VkOwor6ZiOIDwgdmlsbGFnZVwtZ2F0ZTsKK+aEoyA8IGJlXC1pblwtYVwtZGF6ZTsKK+eQqiA8IHR5cGVcLW9mXC1qYWRlOwor5ailIDwgYmVcLWJlYXV0aWZ1bDsKK+WSqiA8IHNvdW5kXC1vZlwtY2F0Owor5riXIDwgc29ha1wtdGhyb3VnaDsKK+iRqyA8IGJvdHRsZVwtZ291cmQ7CivlnaogPCBsZXZlbFwtZ3JvdW5kOwor5Z2eIDwgZW50cmVuY2htZW50Owor5qmhIDwgY2hlc3RudXRcLW9hazsKK+e1riA8IHdhc3RlXC1jb3R0b247Civot4QgPCB3YWxrXC1yYXBpZGx5Owor5bG5IDwgdG9cLXJpc2VcLWhpZ2g7Civmg5ggPCBkaXNjb25jZXJ0ZWQ7Civmj6kgPCBydWJcLWFuZFwtd2lwZTsKK+aloCA8IG5hbWVcLW9mXC10cmVlOwor6bqTIDwgZm9vdFwtb2ZcLWhpbGw7CivmgbsgPCBmZWVsXC1hbmd1aXNoOwor5qGFIDwgbWFzdFwtb2ZcLXNoaXA7CivpqosgPCBnYWxsb3BcLWhvcnNlOwor6LmSIDwgdG9cLWp1bXBcLW92ZXI7CivnpYAgPCB0b1wtc2FjcmlmaWNlOwor5a+wIDwgZ3JlYXRcLWRvbWFpbjsKK+aWkyA8IG11bHRpY29sb3JlZDsKK+S8qyA8IGxvb2tcLXRvd2FyZHM7Civouo8gPCB0cmFtcGxlXC1kb3duOwor5rK9IDwgYnV5XC1hbmRcLXNlbGw7Civnj6UgPCBlYXJcLW9ybmFtZW50Owor56yGIDwgYmFtYm9vXC1mZW5jZTsKK+iZrCA8IHlvdW5nXC1kcmFnb247Civmg6wgPCBiZVwtc2F0aXNmaWVkOwor57yoIDwgYVwtY2hpblwtc3RyYXA7Civlir4gPCBleGFtaW5lXC1pbnRvOwor5ZikIDwgc2Vla1wtZnJpZW5kczsKK+ivgyA8IHNjb2xkXC1sb3VkbHk7Civlhr0gPCBjb2xkXC1hbmRcLXJhdzsKK+mjqCA8IGhvc3RcLWJhbnF1ZXQ7CivmgI8gPCBkaXNjb250ZW50ZWQ7CivlhqIgPCBidXJpYWxcLW1vdW5kOwor5ZezIDwgaW50ZXJqZWN0aW9uOwor5a6VIDwgc3RvbmVcLXF1YXJyeTsKK+iAhiA8IG1hblwtb2ZcLXNpeHR5Owor6Z2TIDwgbWFrZVwtdXBcLWZhY2U7Civom7AgPCB0b1wtaGliZXJuYXRlOwor5o68IDwgdGhyb3dcLWdyb3VuZDsKK+WbpCA8IGdyYWluXC1iYXNrZXQ7CivnrbEgPCBkd2FyZlwtYmFtYm9vOwor5qifIDwgY2FtcGhvclwtdHJlZTsKK+mypSA8IHJlZXZlcycnXC1zaGFkOwor6YC1IDwgdGhvcm91Z2hmYXJlOwor5bK3IDwgbWluXC1tb3VudGFpbjsKK+aesCA8IHNtb290aFwtYm9hcmQ7CivlsZAgPCB3b29kZW5cLXNob2VzOwor6IObIDwgdGhlXC1zaG91bGRlcjsKK+m5niA8IHNwYXJyb3dcLWhhd2s7CivnioQgPCBhbmltYWxcLWhvcm5zOwor6Le5IDwgd2FuZGVyXC1hYm91dDsKK+aYsSA8IGJyaWdodFwtbGlnaHQ7CivmuYQgPCB3YXRlcicnc1wtZWRnZTsKK+iPhSA8IGNvYXJzZVwtZ3Jhc3M7Civnu7sgPCBhZmZlY3Rpb25hdGU7Civnr4EgPCBiYW1ib29cLWdyb3ZlOwor6LWFIDwgcHJlcGFyZWRcLWZvcjsKK+akgSA8IG91dGVyXC1jb2ZmaW47CivnurAgPCBzcG9pbGVkXC1zaWxrOwor6byLIDwgbGFyZ2VcLXR1cnRsZTsKK+mGkCA8IHB1cmVzdFwtY3JlYW07CivpvokgPCB1bmV2ZW5cLXRlZXRoOwor6Iu7IDwga2luZFwtb2ZcLWhlcmI7CivprKMgPCBob3JzZScnc1wtbWFuZTsKK+e8lyA8IGZpc2hpbmdcLWxpbmU7CivmuasgPCBhXC1zbWFsbFwtcG9uZDsKK+S7nyA8IG9uZVwtdGhvdXNhbmQ7CivomrYgPCBraW5kXC1vZlwtY2xhbTsKK+ibhCA8IG1vbGVcLWNyaWNrZXQ7Civmr4IgPCBodWJcLW9mXC13aGVlbDsKK+eVmiA8IHN0cmF3XC1iYXNrZXQ7CivmtIQgPCBhXC1iYWNrXC13YXRlcjsKK+mjpyA8IGV2ZW5pbmdcLW1lYWw7CivphqogPCB1bmNsZWFyXC13aW5lOwor6aqdIDwgZmFtb3VzXC1ob3JzZTsKK+mqkiA8IG1vdGhlclwtaG9yc2U7Civmh5QgPCBiZVwtYWZyYWlkXC1vZjsKK+WKkyA8IGN1dFwtb2ZmXC1ub3NlOwor6LiUIDwgdG9cLWdldFwtYWhlYWQ7CivpoqEgPCB0aGVcLWZvcmVoZWFkOwor5r2yIDwgZHJpdmluZ1wtcmFpbjsKK+e8ryA8IHNpbGtcLWZhYnJpY3M7CivnlJMgPCBnbGF6ZWRcLXRpbGVzOwor6I2sIDwgYVwtcGxhbnRcLW5hbWU7Civmn5IgPCBudW1iZXJcLXNldmVuOwor55izIDwgdG9cLWJlXC1oZWFsZWQ7CivosIcgPCBzcGVha1wtaWxsXC1vZjsKK+S5hyA8IHRvXC1kZXBlbmRcLW9uOwor5YW25LuW55qE5Lq6IDwgb3RoZXJcLXBlb3BsZTsKK+WKoOe3iiA8IHRvXC1pbnRlbnNpZnk7CivokKzkuovpgZQgPCBtYXN0ZXJcKGNhcmRcKTsKK+edoeimuiA8IHRvXC1nb1wtdG9cLWJlZDsKK+aXqeacnyA8IGVhcmx5XC1wZXJpb2Q7CivntITnj6Xmm7ggPCBib29rXC1vZlwtam9lbDsKK+WqkumrlOWgseWwjiA8IG1lZGlhXC1yZXBvcnQ7Civnm7jpl5wgPCBpbnRlcnJlbGF0ZWQ7Civoib7mu4vnl4XmgqPogIUgPCBhaWRzXC1wYXRpZW50Owor54Gr6b6NIDwgZmllcnlcLWRyYWdvbjsKK+WQiOS9nCA8IHRvXC1jb29wZXJhdGU7Civos6DlhJ/ph5EgPCBjb21wZW5zYXRpb247CivnsL/oqJjnrqHnkIblk6EgPCBjb21taXNzYXJpYW47CivmmbrlipsgPCBpbnRlbGxpZ2VuY2U7CivnpLrlqIHogIUgPCBkZW1vbnN0cmF0b3I7CivmmJTlubQgPCBmb3JtZXJcLXllYXJzOwor5ZKM5bmz5qKd57SEIDwgcGVhY2VcLXRyZWF0eTsKK+avm+S4u+W4rSA8IGNoYWlybWFuXC1tYW87CivnpKbkupUgPCBtaW5lXC1cKHNoYWZ0XCk7Civnhp/nn6UgPCBhY3F1YWludGFuY2U7CivmlK/npaggPCBcKGJhbmtcKVwtY2hlY2s7Civlu7rnr4nniakgPCBcKGFcKVwtYnVpbGRpbmc7Civlp5Dlp5AgPCBvbGRlclwtc2lzdGVyOwor6IKh56Wo5biC5aC0IDwgc3RvY2tcLW1hcmtldDsKK+mWseimveWupCA8IHJlYWRpbmdcLXJvb207CivorabloLEgPCBcKGZpcmVcKVwtYWxhcm07CivlvozmnpwgPCBjb25zZXF1ZW5jZXM7CivkuI3lkI3orb0gPCBkaXNyZXB1dGFibGU7CivmlLbnm6QgPCBtYXJrZXRcLWNsb3NlOwor5Z+O6ZiyIDwgY2l0eVwtZGVmZW5jZTsKK+mgguS9jyA8IHRvXC13aXRoc3RhbmQ7Civopb/pg6ggPCB3ZXN0ZXJuXC1wYXJ0Owor5aW95oSfIDwgZ29vZFwtb3BpbmlvbjsKK+apn+aisOeivCA8IG1hY2hpbmVcLWNvZGU7CivlpLHmpa0gPCB1bmVtcGxveW1lbnQ7Civmk4Xoh6ogPCB1bmF1dGhvcml6ZWQ7CivlpKfpqZrlpLHoibIgPCBhcHByZWhlbnNpdmU7Civpq5jlsaTml4XppKggPCBsdXh1cnlcLWhvdGVsOwor6YCV6IeqIDwgb25cLW9uZScnc1wtb3duOwor6L+R6KaWIDwgc2hvcnRzaWdodGVkOwor5q2l54qBIDwgd2Fsa2luZ1wtcGxvdzsKK+S4jeaIkOWKnyA8IHVuc3VjY2Vzc2Z1bDsKK+awtOa7uOWCsyA8IHdhdGVyXC1tYXJnaW47CivkuI3ph43oppYgPCBpbmRpZmZlcmVuY2U7Civplovpl5wgPCBwb3dlclwtc3dpdGNoOwor5Y675LiWIDwgdG9cLXBhc3NcLWF3YXk7Civkup7mtLLoiIflpKrlubPmtIsgPCBhc2lhXC1wYWNpZmljOwor5Y2B5Lmd5q2yIDwgMTlcLXllYXJzXC1vbGQ7CivpnYjnmoTkuJbnlYwgPCBzcGlyaXRcLXdvcmxkOwor5aSa5pa5IDwgaW5cLW1hbnlcLXdheXM7CivmkLbos7wgPCBwYW5pY1wtYnV5aW5nOwor5beh6L+0IDwgdG9cLWdvXC1hcm91bmQ7CivpgJnnqK4gPCB0aGlzXC1raW5kXC1vZjsKK+Wkp+aEjyA8IGdlbmVyYWxcLWlkZWE7CivljYrmlofnm7IgPCBzZW1pbGl0ZXJhdGU7CivliKXnqLEgPCBhbm90aGVyXC1uYW1lOwor5q2l5q2lIDwgc3RlcFwtYnlcLXN0ZXA7CivljZTllYYgPCBjb25zdWx0XC13aXRoOwor55+u5pifIDwgZHdhcmZcLVwoc3RhclwpOwor5qC45q2m5Zmo6Kmm6amXIDwgbnVjbGVhclwtdGVzdDsKK+S4meeDr+mFuCA8IGFjcnlsaWNcLWFjaWQ7CivljYrnhp/nt7QgPCBzZW1pXC1za2lsbGVkOwor6YKj5pmCIDwgYXRcLXRoYXRcLXRpbWU7CivlkIPkuI3plosgPCBiZVwtdW5wb3B1bGFyOwor5aSn5birIDwgZ3JlYXRcLW1hc3RlcjsKK+e1hOe5lCA8IG9yZ2FuaXphdGlvbjsKK+WHuuS5jumgkOaWmSA8IHVuZXhwZWN0ZWRseTsKK+mAmueUqCA8IGNvbW1vblwtXCh1c2VcKTsKK+WkmuW3pSA8IHRvXC1tdWx0aXBsZXg7Civns77okZsgPCBlbnRhbmdsZW1lbnQ7CivoqabmjqIgPCB0b1wtc291bmRcLW91dDsKK+Wkq+WmuyA8IG1hblwtYW5kXC13aWZlOwor5Zyw5pa55Li7576pIDwgXCJsb2NhbFwtXC1pc21cIjsKK+mBk+atiSA8IHRvXC1hcG9sb2dpemU7CivmlYXmhI8gPCBkZWxpYmVyYXRlbHk7Civoq4vllY8gPCBtYXlcLWlcLWFza1wuXC5cLjsKK+a/gOWFieWUseeJhyA8IGNvbXBhY3RcLWRpc2s7CivkuozljYHkuIDkuJbntIAgPCAyMXN0XC1jZW50dXJ5Owor5Ye655m8IDwgdG9cLXN0YXJ0XC1vdXQ7CivnuK7lr6sgPCBhYmJyZXZpYXRpb247CivkuK3lpK7pioDooYwgPCBjZW50cmFsXC1iYW5rOwor5aOB5o6bIDwgd2FsbFwtaGFuZ2luZzsKK+eGn+aCiSA8IHRvXC1rbm93XC13ZWxsOwor54af5oCdIDwgZGVsaWJlcmF0aW9uOwor5pW05aSpIDwgYWxsXC1kYXlcLWxvbmc7CivpsYnnlLIgPCB0dXJ0bGVcLXNoZWxsOwor6Lqr6auUIDwgXChodW1hblwpXC1ib2R5Owor5pav5a+G57SE55GfIDwgam9zZXBoXC1zbWl0aDsKK+ezvue6jyA8IGJlXC1lbnRhbmdsZWQ7CivkuI3lkIjnkIYgPCB1bnJlYXNvbmFibGU7Civnm67liY3kuJbnlYwgPCBtb2Rlcm5cLXdvcmxkOwor6KSH6KO9IDwgdG9cLWR1cGxpY2F0ZTsKK+maiuaXlyA8IHRlYW1cLXBlbm5hbnQ7CivliqDlvLcgPCB0b1wtcmVpbmZvcmNlOwor5Ye6542EIDwgbGVhdmVcLXByaXNvbjsKK+S4jeaEieW/qyA8IGRpc2FncmVlYWJsZTsKK+irh+WIpCA8IHRvXC1uZWdvdGlhdGU7CivnnIvnl4UgPCBzZWVcLWFcLWRvY3RvcjsKK+awkeaEj+iqv+afpSA8IG9waW5pb25cLXBvbGw7CivlvojkuI0gPCB2ZXJ5XC11blwtXC5cLlwuXC47Civmr4XlipsgPCBwZXJzZXZlcmFuY2U7CivokL3lr6YgPCB0b1wtaW1wbGVtZW50Owor5pSv5bqXIDwgYnJhbmNoXC1zdG9yZTsKK+m9hiA8IHN0dWZmZWRcLW5vemU7CivpvL0gPCBjbG9nZ2VkXC1ub3NlOwor55m96JavIDwgc3dlZXRcLXBvdGF0bzsKK+e2teaXlyA8IGNvbG9yZWRcLWZsYWc7CivppIrpm57loLQgPCBjaGlja2VuXC1mYXJtOwor6bqVIDwgbXVudGphY1wtZGVlcjsKK+ePvuS7o+mfs+aogiA8IG1vZGVyblwtbXVzaWM7Civlm57poacgPCB0b1wtbG9va1wtYmFjazsKK+aureWMliA8IGJlY29tZVwtcmlnaWQ7Civps5AgPCB0aGVcLW5hdXRpbHVzOwor6bGRIDwgdGhlXC1zdHVyZ2VvbjsKK+mxgiA8IG5hbWVcLW9mXC1maXNoOwor6KO96YCg5qWt6ICFIDwgbWFudWZhY3R1cmVyOwor6Iad5LiK5Z6LIDwgbGFwdG9wXC1cKGFkalwpOwor54CP6Ka9IDwgdG9cLXNraW1cLW92ZXI7Civlv4PnkIblrbjlrrYgPCBwc3ljaG9sb2dpc3Q7CivpraYgPCBzaGFya1wtZmFtaWx5Owor6ay1IDwgYmlnXC1pcm9uXC1wb3Q7CivprIUgPCB1bmtlbXB0XC1oYWlyOwor6Kqy5L2ZIDwgYWZ0ZXJcLXNjaG9vbDsKK+i7iumBkyA8IHRyYWZmaWNcLWxhbmU7CivmraPlpoIgPCBiZVwtanVzdFwtbGlrZTsKK+mpiCA8IGJsYWNrXC1ob3JzZXM7CivpqIYgPCBkaXZpbmVcLWhvcnNlOwor6aecIDwgc3Ryb25nXC1ob3JzZTsKK+mnlyA8IGNoYXR0ZXJcLW1hcms7CivmnInmop3mnInnkIblnLAgPCBtZXRob2RpY2FsbHk7CivkuI3mmK/njqnlhZLnmoQgPCBpdCcnc1wtbm9cLWpva2U7Civlr6bpmpvmgKcgPCBwcmFjdGljYWxpdHk7CivljYHkuIDlubQgPCBlbGV2ZW5cLXllYXJzOwor6aSAIDwgdGFpbnRlZFwtZm9vZDsKK+S4jeiDveaKteaKlyA8IGlycmVzaXN0aWJsZTsKK+mirSA8IHN3YXlcLWluXC13aW5kOwor57SZ54mMIDwgcGxheWluZ1wtY2FyZDsKK+mepiA8IGxlYXRoZXJcLXN0YXA7CivpgY7looPnsL3oqLwgPCB0cmFuc2l0XC12aXNhOwor6ZyRIDwgYmVcLW1vaXN0ZW5lZDsKK+mZgSA8IGFcLXN0ZWVwXC1iYW5rOwor55m857SFIDwgZmx1c2hcLVwoZmFjZVwpOwor6ZuG5ZCIIDwgY29uZ3JlZ2F0aW9uOwor6YCf5oiQIDwgY3Jhc2hcLWNvdXJzZTsKK+mXkSA8IHRoZVwtZG9vcnNpbGw7CivlhYnnt5ogPCBvcHRpY2FsXC1saW5lOwor6ZWoIDwgcHJhc2VvZHltaXVtOwor5Yqq5YqbIDwgZ3JlYXRcLWVmZm9ydDsKK+W8leWFpSA8IHRvXC1kcmF3XC1pbnRvOwor5bug5Z2AIDwgZmFjdG9yeVwtc2l0ZTsKK+mPtyA8IHByb3RhY3Rpbml1bTsKK+ebuOS8vOaApyA8IHJlc3NlbWJsYW5jZTsKK+mdnuWQjOatpSA8IGFzeW5jaHJvbm91czsKK+mNiiA8IHNtZWx0XC1tZXRhbHM7CivpjIggPCB0b1wtYmVuZFwtaXJvbjsKK+WCs+mBk+abuCA8IGVjY2xlc2lhc3RlczsKK+maqOWQjCA8IGFjY29tcGFueWluZzsKK+iAtuepjOWfuuedoyA8IGplc3VzXC1jaHJpc3Q7CivnhpLlhYkgPCBmbG91cmVzY2VuY2U7CivoqJjogIXloLHlsI4gPCBwcmVzc1wtcmVwb3J0Owor6YeqIDwgYW5cLWFsbXNcLWJvd2w7Civlu6PlkYogPCB0b1wtYWR2ZXJ0aXNlOwor6Ya9IDwga2luZFwtb2ZcLXdpbmU7CivmjKjov5EgPCBnZXRcLWNsb3NlXC10bzsKK+e3qOWKhyA8IHdyaXRlXC1hXC1wbGF5Owor5aOT5YCSIDwgb3ZlcndoZWxtaW5nOwor5o6h6ISCIDwgdHJlZVwtdGFwcGluZzsKK+mDmSA8IHRvXC1iZVwtZXhpbGVkOwor6YKyIDwgZ29vZFwtbG9va2luZzsKK+i/oyA8IHRvXC1sZWFwXC1vdmVyOwor6YCf5a+rIDwgcXVpY2tcLXNrZXRjaDsKK+WkmuW3peS9nOalrSA8IG11bHRpdGFrc2luZzsKK+eZvOiogOS6uiA8IHNwb2tlc3BlcnNvbjsKK+i4vCA8IHRvXC1mYWxsXC1mbGF0Owor6LikIDwgYnV0dFwtYWdhaW5zdDsKK+mbhuS4reWZqCA8IGNvbmNlbnRyYXRvcjsKK+S4jeWkp+mbouWFkiA8IHByZXR0eVwtY2xvc2U7CivpgLHlnI0gPCBzdXJyb3VuZGluZ3M7Civmv77ntJkgPCBmaWx0ZXJcLXBhcGVyOwor6LOJIDwgdG9cLWdpdmVcLWFsbXM7CivosoYgPCBzbWFsbFwtYmFkZ2VyOwor6LG2IDwgY2FzdHJhdGVcLXBpZzsKK+i2s+eQg+i/tyA8IGZvb3RiYWxsXC1mYW47CivmnKzkvobpnaLnm64gPCB0cnVlXC1jb2xvdXJzOwor6Kiq5L+EIDwgdmlzaXRcLXJ1c3NpYTsKK+aLlOmMqCA8IHdlaWdoXC1hbmNob3I7CivmqJnnh4ggPCBiZWFjb25cLWxpZ2h0Owor5Yaw5pm2IDwgaWNlXC1jcnlzdGFsczsKK+iqviA8IHNwZWFrXC1nZW50bHk7Civlub7lpKkgPCBzZXZlcmFsXC1kYXlzOwor5o6I57K+IDwgaW5zZW1pbmF0aW9uOwor6auS6KmxIDwgYmFkXC1sYW5ndWFnZTsKK+WHueWyuCA8IGNvbmNhdmVcLWJhbms7CivopZsgPCBmaW5lXC1jbG90aGVzOwor6KWGIDwgaG9vZFwtb3JcLWNvd2w7CivpgY7kvoYgPCB0b1wtY29tZVwtb3ZlcjsKK+aTjeWLniA8IHRvXC13b3JrXC1oYXJkOwor6YKj5qij55qEIDwgdGhhdFwta2luZFwtb2Y7CivlhYnmupAgPCBsaWdodFwtc291cmNlOwor57KX5L+X55qE6ZqO57SaIDwgdnVsZ2FyXC1jbGFzczsKK+mAn+WHjSA8IHF1aWNrXC1mcmVlemU7CivntrLot6/nr4Dpu54gPCBuZXR3b3JrXC1ub2RlOwor5Z2Q54miIDwgaW1wcmlzb25tZW50Owor6KOc54mZIDwgZmlsbFwtYVwtdG9vdGg7CivliKjliIAgPCBwbGFuaW5nXC10b29sOwor5oqK6ZecIDwgZ3VhcmRcLWFcLXBhc3M7CivmiZPljbDmnI3li5nlmaggPCBwcmludFwtc2VydmVyOwor5LiN5Y+v5pS25ou+IDwgaXJyZW1lZGlhYmxlOwor5Y2K6YKK5aSpIDwgaGFsZlwtdGhlXC1za3k7CivokZwgPCBzbWlsYXhcLWNoaW5hOwor6JCpIDwgc2NhbmRlbnRcLWhvcDsKK+iQmCA8IG5hcGh0aGFubGVuZTsKK+iHquihmyA8IHNlbGZcLWRlZmVuc2U7Civos5Popb/ms5XlsLzkup4gPCBwZW5uc3lsdmFuaWE7CivojqYgPCBqdW5nbGVcLWdyYXNzOwor5ZyL5a625qmf5a+GIDwgc3RhdGVcLXNlY3JldDsKK+mZm+S4iyA8IHlvdXJcLW1hamVzdHk7CivlhavmnIggPCBlaWdodGhcLW1vbnRoOwor6IqaIDwgZ3JlZW5cLXNwcm91dDsKK+WCmeiAgyA8IFwoYW5cLWFwcGVuZGl4Owor6IqRIDwgd2hpdGVcLW1pbGxldDsKK+W5tOWJjSA8IFwuXC5cLnllYXJzXC1hZ287CivohpcgPCB1Z2x5XC1hbmRcLWZhdDsKK+mWi+aUryA8IGV4cGVuZGl0dXJlczsKK+aNj+epjSA8IGNoaXJvcHJhY3RpYzsKK+iRoeiQhOmFkiA8IFwoZ3JhcGVcKVwtd2luZTsKK+iCmSA8IGFcLXNtYWxsXC13b3JtOwor576AIDwgZmlzaGluZ1wtdHJhcDsKK+iqv+afpeS6uuWToSA8IGludmVzdGlnYXRvcjsKK+atpuijnemDqOmaiiA8IGFybWVkXC1mb3JjZXM7CivloLHlg7kgPCBxdW90ZWRcLXByaWNlOwor6L+35L+hIDwgc3VwZXJzdGl0aW9uOwor57qBIDwgc2hhZGVcLW9mXC1yZWQ7CivnuZkgPCB0b1wtaW50ZXJwcmV0Owor57iVIDwgdGFuZ2xlZFwtaGVtcDsKK+i9ieaPmyA8IHRvXC10cmFuc2Zvcm07CivmkKzlrrYgPCBtb3ZlXC1cKGhvdXNlXCk7CivmiLbpoK0gPCBiYW5rXC1hY2NvdW50Owor6L6y5L2c54mpIDwgXChmYXJtXClcLWNyb3BzOwor57GvIDwgYmFtYm9vXC1jaGVzdDsKK+Wbm+WNgeWkmiA8IG1vcmVcLXRoYW5cLTQwOwor6Kaq5L+hIDwgdHJ1c3RlZFwtYWlkZTsKK+etpCA8IHlvdW5nXC1iYW1ib287CivooYznqIsgPCB0cmF2ZWxcLXJvdXRlOwor562NIDwgYmFtYm9vXC1zaG9vdDsKK+ethSA8IGJhbWJvb1wtYnJ1c2g7CivlmrTnq6MgPCB0aWdodFwuc3RyaWN0Owor6K2J5a+m56auIDwgY29uZmlybWF0aW9uOwor5ZCN6YyE5pyN5YuZIDwgbmFtZVwtc2VydmljZTsKK+enrCA8IGJsYWNrXC1taWxsZXQ7CivnnIvkvZwgPCBsb29rXC11cG9uXC1hczsKK+iqnumfs+S/oeiZnyA8IHZvaWNlXC1zaWduYWw7Civlr6fpoZggPCB3b3VsZFwtcmF0aGVyOwor56WYIDwgdG9cLWNhbGN1bGF0ZTsKK+ejoCA8IHNhbFwtYW1tb25pYWM7CivnorYgPCBhXC1mbG9vZFwtZ2F0ZTsKK+aOpeaenSA8IFwodHJlZVwpXC1ncmFmdDsKK+aOiOasiiA8IHRvXC1hdXRob3JpemU7Civnn7wgPCBzdG9uZVwtYnJpZGdlOwor6ZaL5a24IDwgc2Nob29sXC1vcGVuczsKK+edkiA8IHRvXC1nbGFuY2VcLWF0Owor5L+d6K2JIDwgdG9cLWd1YXJhbnRlZTsKK+aJueiplSA8IHRvXC1jcml0aWNpemU7CivlrofoiKrlsYAgPCBzcGFjZVwtYWdlbmN5Owor55qmIDwgYnJpZ2h0XC13aGl0ZTsKK+S7pOS6uumpmueVsCA8IHN1cnByaXNpbmdseTsKK+eYuiA8IGFuYWxcLWZpc3R1bGE7CivljrvlnIvlpJYgPCB0b1wtZ29cLWFicm9hZDsKK+eWvyA8IHByaWNrbHlcLWhlYXQ7Civmi5TntbIgPCB3aXJlXC1kcmF3aW5nOwor5omT6LOtIDwgXChtYWtlXC1hXClcLWJldDsKK+WEquaDoCA8IHByZWZlcmVudGlhbDsKK+esrOS6jOS9jSA8IHNlY29uZFwtcGxhY2U7CivlhazloLEgPCBhbm5vdW5jZW1lbnQ7Civln7rnpI7oqK3mlr0gPCBiYXNlXC1zdGF0aW9uOwor5a+G6ZuGIDwgY29uY2VudHJhdGVkOwor5o6I5pmCIDwgdGltZVwtc2VydmljZTsKK+WcqOaXgSA8IGJ5XC1cKGFcLXBsYWNlXCk7CivlkIzmmYLku6MgPCBjb250ZW1wb3Jhcnk7Civnjo0gPCBpbGxcLXRlbXBlcmVkOwor5ou855ukIDwgY29sZFwtcGxhdHRlcjsKK+eLhiA8IHBla2luZXNlXC1kb2c7CivniYIgPCBmZW1hbGVcLXNoZWVwOwor5o2Q5qy+IDwgZG9uYXRlXC1tb25leTsKK+WJr+e4veeQhiA8IHZpY2VcLXByZW1pZXI7CivlnIvmnIkgPCBuYXRpb25hbGl6ZWQ7Civns7vkuIogPCB0b1wtYnVja2xlXC11cDsKK+iDjOmboiA8IGRldmlhdGVcLWZyb207CivmjInnhacgPCBhY2NvcmRpbmdcLXRvOwor5YG254S2IDwgaW5jaWRlbnRhbGx5Owor5ZaJ6Y+hIDwgbGFyeW5nb3Njb3BlOwor6IOM6ZmwIDwgaW5cLXRoZVwtc2hhZGU7CivnlJ/lkb3ot6HosaEgPCBzaWduXC1vZlwtbGlmZTsKK+WFqeWNgyA8IHR3b1wtdGhvdXNhbmQ7Civmu4ogPCBhXC1yaXZlclwtbmFtZTsKK+i3r+W+l+iomCA8IGJvb2tcLW9mXC1ydXRoOwor5o+S5ZyWIDwgaWxsdXN0cmF0aW9uOwor5rOWIDwgc3RpbGxcLXdhdGVyczsKK+efpeitmOWIhuWtkCA8IGludGVsbGVjdHVhbDsKK+euoeeQhiA8IHRvXC1zdXBlcnZpc2U7CivkuInlkIjkuIAgPCB0aHJlZVwtaW5cLW9uZTsKK+aviCA8IGZlcnRpbGVcLWVnZ3M7CivmrpwgPCBoYWxmXC1zaXR0aW5nOwor5Zub55m+6JCsIDwgZm91clwtbWlsbGlvbjsKK+aiheiKsSA8IHBsdW1cLWJsb3Nzb207CivpmL/mkanlj7jmm7ggPCBib29rXC1vZlwtYW1vczsKK+eVtueEtiA8IG9ubHlcLW5hdHVyYWw7CivmqZIgPCB3b29kXC1zdHJlYWtzOwor6auY6LOq6YePIDwgaGlnaFwtcXVhbGl0eTsKK+aomeWDuSA8IG1hcmtcLWFcLXByaWNlOwor5qe7IDwgemVsa292YVwtdHJlZTsKK+ajkuehqyA8IHJvbGxcLXN1bHBodXI7Civmp5QgPCB3YXRlclwtcHVsbGV5Owor5aSi5ri455eHIDwgdG9cLXNsZWVwd2FsazsKK+iAtuWIqeexs+WTgOatjCA8IGxhbWVudGF0aW9uczsKK+mlhemgrSA8IHN0ZWFtZWRcLXJvbGw7Civkv53nrqEgPCB0YWtlXC1jYXJlXC1vZjsKK+eUqOaItuWumue+qSA8IHVzZXJcLWRlZmluZWQ7CivlnoLkuIsgPCB0b1wtaGFuZ1wtZG93bjsKK+aIkOWQieaAneaxlyA8IGdlbmdoaXNcLWtoYW47CivmkZkgPCB0b1wtdHJhbnNwb3J0Owor6KOB5ZOhIDwgdG9cLWN1dFwtc3RhZmY7CivmuIXphpIgPCBjbGVhclwtaGVhZGVkOwor6KOc5YWFIDwgdG9cLXJlcGxlbmlzaDsKK+S4jee1kOebnyA8IG5vbmFsaWdubWVudDsKK+aPkSA8IHRvXC1mYWJyaWNhdGU7CivlhavntJrpoqggPCBmb3JjZVwtOFwtd2luZDsKK+aIiSA8IGFcLWJhdHRsZVwtYXhlOwor5L6/56eYIDwgY29uc3RpcGF0aW9uOwor55eF5bqKIDwgaG9zcGl0YWxcLWJlZDsKK+W5vOWFkuWckiA8IGtpbmRlcmdhcnRlbjsKK+ahlOWtkOawtCA8IG9yYW5nZVwtanVpY2U7Civmnpjpkb8gPCBpbmNvbXBhdGlibGU7CivkuLvlubnntrLot68gPCBjb3JlXC1uZXR3b3JrOwor5bu5IDwgdG9cLXBlcnNlY3V0ZTsKK+WJtemAoOaApyA8IGNyZWF0aXZlbmVzczsKK+WaruW+gCA8IHRvXC15ZWFyblwtZm9yOwor6Ieq5ouUIDwgZnJlZVwtb25lc2VsZjsKK+W4qCA8IGhhbmRrZXJjaGllZjsKK+W2oiA8IGhpZ2hcLW9yXC10YWxsOwor5bGYIDwgdGhlXC15b3VuZ2VzdDsKK+iIquWkqSA8IHNwYWNlXC1mbGlnaHQ7Civpq5jlr4YgPCBoaWdoXC1kZW5zaXR5Owor6KGo5ZyfIDwgc3VyZmFjZVwtc29pbDsKK+att+S7o+W/l+S4iyA8IDJcLWNocm9uaWNsZXM7Civmrbfku6Plv5fkuIogPCAxXC1jaHJvbmljbGVzOwor5auyIDwgZ3JhbmRcLW1vdGhlcjsKK+iznuitmCA8IGFwcHJlY2lhdGlvbjsKK+a2iOmZpCA8IHRvXC1lbGltaW5hdGU7CivnkZ7oibIgPCBsb3ZlbHlcLWNvbG9yOwor6IG96KqqIDwgdG9cLWhlYXJcLXRvbGQ7CivlkajnuL3nkIYgPCBwcmVtaWVyXC16aG91Owor5Z+35pS/6buoIDwgcnVsaW5nXC1wYXJ0eTsKK+eVtuW/gyA8IHRvXC10YWtlXC1jYXJlOwor55Ww5oCnIDwgaGV0ZXJvc2V4dWFsOwor5Lqk6YuSIDwgY3Jvc3NcLXN3b3JkczsKK+iIiOWlriA8IFwoYmVcKVwtZXhjaXRlZDsKK+aMh+S7pOWQjeWtlyA8IGNvbW1hbmRcLW5hbWU7Civnpr3poZ4gPCBiaXJkXC1zcGVjaWVzOwor5q+N6Kaq56+AIDwgbW90aGVyJydzXC1kYXk7Civllq0gPCBjb25kb2xlXC13aXRoOwor5LiA5bCP6YOo5YiGIDwgYVwtc21hbGxcLXBhcnQ7Civlgb3lloQgPCBoeXBvY3JpdGljYWw7CivmirHmhKcgPCBmZWVsXC1hc2hhbWVkOwor5ZG5IDwgdG9cLWVhdFwtZ3Jhc3M7CivkuIDkuIvlhZIgPCBhXC1saXR0bGVcLWJpdDsKK+iyoOiyrCA8IGluXC1jaGFyZ2VcLW9mOwor54++6KGMIDwgYmVcLWluXC1lZmZlY3Q7CivlsYjmnI0gPCB0b1wtc3VycmVuZGVyOwor5Y63IDwgdGhlXC1mb3JlXC1hcm07CivmuJvnt6kgPCB0b1wtc2xvd1wtZG93bjsKK+WLoyA8IGFjaGlldmVtZW50czsKK+S4i+m9kiA8IGJvdHRvbVwtdGVldGg7CivlqpLpq5QgPCBcKG5ld3NcKVwtbWVkaWE7CivlibcgPCB0b1wtbGV2ZWxcLW9mZjsKK+mpmuaElSA8IGFzdG9uaXNobWVudDsKK+eVtuWgtCA8IGF0XC10aGVcLXNjZW5lOwor6KSH6KO95ZOBIDwgcmVwcm9kdWN0aW9uOwor5YSXIDwgY29tcGFyZVwtd2l0aDsKK+WPuOazleasiiA8IGp1cmlzZGljdGlvbjsKK+Wpmum9oSA8IG1hcnJ5aW5nXC1hZ2U7CivmirHlsYggPCBmZWVsXC13cm9uZ2VkOwor5L2U5L6/5a6cIDwgYWR2ZW50YWdlb3VzOwor5L2tIDwgdW5zdWJtaXNzaXZlOwor6aOf6K2cIDwgY29va2VyeVwtYm9vazsKK+S4vCA8IGJvd2xcLW9mXC1mb29kOwor5Lim6Z2eIDwgcmVhbGx5XC1pc24nJ3Q7CivnqoHnoLQgPCBicmVha3Rocm91Z2g7CivpvLvkuK3pmpQgPCBuYXNhbFwtc2VwdHVtOwor5paw6IGe6JmVIDwgbmV3c1wtc2VydmljZTsKK+S+teaZqCA8IHRvd2FyZHNcLWRhd247CivktLwgPCB0b1wtZXh0aXJwYXRlOwor5LSVIDwgYVwtd29vZHBlY2tlcjsKK+a8ouWfjiA8IHNlb3VsXCxcLWtvcmVhOwor5LOWIDwgZmx5aW5nXC1iaXJkczsKK+SynCA8IGxvdHNcLW9mXC1maXNoOwor5LGKIDwgcm9lXC1vclwtc3Bhd247Civkr7YgPCBmYWlyXC1vZlwtaGFpcjsKK+SvpyA8IGFcLXNtYWxsXC1oYWxsOwor6YGL5YuV6Z6LIDwgc3BvcnRzXC1zaG9lczsKK+SunyA8IGJpZ1wtYW5kXC10YWxsOwor5bCR5pW4IDwgc21hbGxcLW51bWJlcjsKK+SukSA8IGFcLWdyYXlcLWhvcnNlOwor5K2YIDwgd2VsbFwtc3RhY2tlZDsKK+StliA8IGFuaW1hbFwtZmVlZHM7Civmi4zlkowgPCBtaXhcLWFuZFwtc3RpcjsKK+StiSA8IG1hc2hlZFwtYmVhbnM7CivkrJwgPCBldmlsXC1zcGlyaXRzOwor5KyaIDwgdG9cLW1vdmVcLWZhc3Q7CivkrIsgPCB2aW9sZW50XC13aW5kOwor5rWB6YCaIDwgdG9cLWNpcmN1bGF0ZTsKK+SrqCA8IHRhbGxcLWFuZFwtYmlnOwor5KuaIDwgc2hvcnRcLWhlYWRlZDsKK+SrlSA8IHNtYWxsXC1oZWFkZWQ7CivlkqjoqaIgPCBjb25zdWx0YXRpdmU7Civkq4cgPCB0aGVcLXdoaXNrZXJzOwor5omS5ouJIDwgcHVzaFwtbGlnaHRseTsKK+SquSA8IGFcLWxhcmdlXC1mYWNlOwor5KqhIDwgdG9cLWZhbGxcLWRvd247CivkqosgPCBzaWxrXC1jb3JkYWdlOwor5KmPIDwgYVwtc21hbGxcLWZhY2U7CivkqYsgPCBhXC1ncmVlblwtZmFjZTsKK+SphyA8IGFcLXNtYWxsXC1oZWFkOwor5bCI5pS/IDwgZGljdGF0b3JzaGlwOwor5Ki2IDwgdGh1bmRlcnN0b3JtOwor5KiyIDwgYVwtc21hbGxcLWhhcmU7CivkqKogPCBhXC1kdXN0XC1zdG9ybTsKK+SonSA8IGFcLXB1cmVcLXdvbWFuOwor5KiIIDwgYVwtc21hbGxcLWJpcmQ7Civpo7zojYkgPCBmb3JhZ2VcLWdyYXNzOwor5KeiIDwgYVwtcm91Z2hcLXJvYWQ7Civkp5kgPCBhXC1oaWdoXC1tb3VuZDsKK+m8u+iFlCA8IG5hc2FsXC1jYXZpdHk7CivmoLjovZ/ngrggPCBudWNsZWFyXC1ib21iOwor5rW06KGAIDwgYmxvb2RcLXNvYWtlZDsKK+SlgyA8IGFcLWJpZ1wtaGFtbWVyOwor5KSsIDwgYVwtc21hbGxcLWdvbmc7CivkpKMgPCBhXC1tZXRhbFwtcmluZzsKK+SkiyA8IHllbGxvd1wtZmFjZWQ7Civko74gPCBjaGVlc2VcLWRyZWdzOwor5KO8IDwgbWl4ZWRcLXN0YXJjaDsKK+WxrOWciyA8IHZhc3NhbFwtc3RhdGU7CivkoJQgPCBmYXJcLWFuZFwtZGVlcDsKK+SfvyA8IHRvXC1yZXZlcmVuY2U7Civkn7kgPCB0b1wtaG9wXC1hYm91dDsKK+i9ieizrOWNoSA8IGFcLWRlYml0XC1jYXJkOwor6Yu8562GIDwgZm91bnRhaW5cLXBlbjsKK+SflSA8IHRvXC1zdGVwXC11cG9uOwor5J6xIDwgdG9cLWZhbGxcLW92ZXI7CivknqcgPCBoYXJkXC10b1wtd2FsazsKK+WBieS6uiA8IGdyZWF0XC1wZXJzb247Civlronnh58gPCBwaXRjaFwtYVwtY2FtcDsKK+WSjOinoyA8IGNvbmNpbGlhdG9yeTsKK+mdouWwjemdoiA8IGZhY2VcLXRvXC1mYWNlOwor5JqqIDwgY3VydmVkXC1ob3JuczsKK+aineWtkCA8IGFcLXNob3J0XC1ub3RlOwor5o+u6ZyN54Sh5bqmIDwgZXh0cmF2YWdhbmNlOwor5qC55pysIDwgXChub3RcKVwtYXRcLWFsbDsKK+SYhCA8IGNpY2FkYVwtZmFtaXk7CivkmIAgPCBncmFzc2hvcHBlcnM7Civkl6cgPCBsaWJlbGx1bGlkYWU7CivnqK7nqK4gPCBhbGxcLWtpbmRzXC1vZjsKK+SWniA8IGFcLXNlYVwtaW5zZWN0Owor5JW7IDwgdG9cLWFkaGVyZVwtdG87CivklbogPCBkZW5zZVwtZ3Jvd3RoOwor5JWdIDwgbWVkaWNhbFwtaGVyYjsKK+SViyA8IG9mXC1lbG1cLWdyb3VwOwor5JOvIDwgd2F0ZXJcLXBlcHBlcjsKK+eZu+mZuOaciOeQgyA8IG1vb25cLWxhbmRpbmc7CivopIflr6vntJkgPCBjYXJib25cLXBhcGVyOwor5JG9IDwgYVwtbGFyZ2VcLWJvYXQ7CivkkbUgPCBhXC1zbWFsbFwtYm9hdDsKK+azlemZoiA8IGNvdXJ0XC1vZlwtbGF3Owor5JCFIDwgdGhlXC1idXR0b2NrczsKK+SPgCA8IGluaGFybW9uaW91czsKK+SOmCA8IGJpcmRzXC1mbHlpbmc7CivmsrPppqwgPCBoaXBwb3BvdGFtdXM7CivnlJ/lkb0gPCBsaWZlXC1cKGZvcmNlXCk7CivkjYQgPCBhblwtaW5kZW50dXJlOwor5Iy2IDwgXClcLWJsYWNrXC1zaWxrOwor5IyHIDwgYVwtdGhpY2tcLXJvcGU7CivkuLvop5IgPCBsZWFkaW5nXC1yb2xlOwor5rer54ylIDwgYWJvbWluYXRpb25zOwor55Si5Y21IDwgbGF5XC1cKGFuXC1lZ2dcKTsKK+aenOeariA8IFwoZnJ1aXRcKVwtcGVlbDsKK+SKhSA8IHRvXC1zb2FrXC1yaWNlOwor5ImvIDwgZHJpZWRcLWJhbWJvbzsKK+SJlSA8IGFcLWJhbWJvb1wtaGF0Owor5ImUIDwgYmFtYm9vXC1zbGlwczsKK+SInyA8IGJyb2tlblwtc291bmQ7Civkh7ggPCBhXC1iYW1ib29cLW1hdDsKK+SHnSA8IHRvXC1icmVha1wtb2ZmOwor5IaiIDwgdG9cLXBlbmV0cmF0ZTsKK+SGnyA8IGNvcmVzcG9uZGluZzsKK+SGjSA8IGN1dHRlZFwtY3JvcHM7CivkuI3otrMgPCBpbnN1ZmZpY2llbnQ7CivkhYEgPCB0b1wtaHVza1wtcmljZTsKK+aJk+WtlOWZqCA8IGhvbGVcLXB1bmNoZXI7Civkg7IgPCBhXC1ncmVhdFwtcm9jazsKK+SDryA8IHNtYWxsXC1zdG9uZXM7Civkg50gPCBydWdnZWRcLXJvY2tzOwor5IKQIDwgc2hvcnRcLXN0dXBpZDsKK+SBpyA8IHRvXC1vcGVuXC13aWRlOwor5a625pS/IDwgaG91c2VrZWVwaW5nOwor5LiN6LKyIDwgaW1tZWFzdXJhYmxlOwor5ICBIDwgYVwtc21hbGxcLWJvd2w7Civjv7UgPCBzb2Z0XC1sZWF0aGVyOwor47+yIDwgYVwtZmllcmNlXC1kb2c7Civjv6ogPCBza2luXC1kaXNlYXNlOwor47+KIDwgdmVyeVwtcGFpbmZ1bDsKK+O+lCA8IGxvbmdcLWlsbG5lc3M7Civku4DpurzmmK8gPCB3aGF0XC1pc1wtXC5cLlwuXD87Civou43kuovmj7TliqkgPCBtaWxpdGFyeVwtYWlkOwor5Ye56YCP6Y+hIDwgY29uY2F2ZVwtbGVuczsKK+O8iyA8IHRoZVwtY3VjdW1iZXI7CivmnKzmnKzkuLvnvqkgPCBib29rXC13b3JzaGlwOwor47qWIDwgZG9nc1wtYmFya2luZzsKK+O6jiA8IGZpZXJjZVwtYmVhc3Q7CivkupTop5LlpKfmqJMgPCB0aGVcLXBlbnRhZ29uOwor47i+IDwgdG9cLWZpbGxlZFwtdXA7CivjuK0gPCB0aGVcLW9wcG9zaXRlOwor47e5IDwgaW50ZW5zZVwtaGVhdDsKK+O2lSA8IHRvXC13YXNoXC1yaWNlOwor5L2c5oSbIDwgdG9cLW1ha2VcLWxvdmU7CivjtYogPCBtb3ZpbmdcLWltYWdlOwor47SVIDwgdG9cLWJvaWxcLWF3YXk7Civjs54gPCBkZWVwXC1hbmRcLWZhcjsKK+OzkSA8IHRvXC1mbG93XC1vdmVyOwor47C3IDwgcmVzdXJyZWN0aW9uOwor46+gIDwgYVwtY3Jvc3NcLWJlYW07Civjr5wgPCBkZWNheWVkXC13b29kOwor466uIDwgYVwtd2VsbFwtc3dlZXA7CivjrqwgPCBhXC1mcnVpdFwtdHJlZTsKK+iYh+iBryA8IHNvdmlldFwtdW5pb247CivjrLUgPCB0aGVcLXNoaW5ib25lOwor5pGp6KW/5b6L5rOVIDwgbGF3XC1vZlwtbW9zZXM7Civjq5IgPCBoYW5kc1wtam9pbmVkOwor5a6z5oCVIDwgdG9cLWJlXC1hZnJhaWQ7Civjq4MgPCBmbGFnc1wtZmx5aW5nOwor46uBIDwgdG9cLWN1dFwtYXBhcnQ7CivmmZrplpMgPCBldmVuaW5nXC10aW1lOwor5LqU55m+IDwgZml2ZVwtaHVuZHJlZDsKK+OntCA8IHRvXC1ydWJcLWhhbmRzOwor46aOIDwgY2FudGFua2Vyb3VzOwor46W1IDwgdG9cLWRpc2hvbm91cjsKK+OkpyA8IGNvbmNpbGlhdGlvbjsKK+OjkiA8IGhhaXJcLXJhaXNpbmc7Civjo5EgPCBkb3VibGVcLWltYWdlOwor6L+F6YCf6JST5bu2IDwgcmFwaWRcLXNwcmVhZDsKK+OilyA8IGFcLWhpZ2hcLWhvdXNlOwor46GUIDwgb2lsZWRcLWNhbGljbzsKK+OhhSA8IHN0b3JhZ2VcLXJvb207CivorYnpqZcgPCByZWFsXC1yZXN1bHRzOwor46C+IDwgYVwtZGlzaFwtY2xvdGg7Civmh4rmgpQgPCBmZWVsXC1yZW1vcnNlOwor46CSIDwgbW91bnRhaW5cLXRvcDsKK+OfkCA8IGJpZ1wtYW5kXC1oaWdoOwor45+HIDwgYVwtbGFuZFwtc2xpZGU7CivjnqIgPCB0b1wtYXJyaXZlXC1hdDsKK+OemyA8IHJlZFwtc2xpcHBlcnM7CivjnoUgPCBub3RcLXN0cmFpZ2h0Owor5Y+k576F6aasIDwgYW5jaWVudFwtcm9tZTsKK+OclyA8IGNvdmV0b3VzbmVzczsKK+ObvCA8IHRvXC1pbnRlcnJ1cHQ7Civkv4TkuK0gPCBydXNzaWFcLWNoaW5hOwor45ulIDwgdG9cLXByb3N0cmF0ZTsKK+ObiiA8IHRvXC1zcGVjdWxhdGU7CivkuozljYHokKwgPCAyMDBcLXRob3VzYW5kOwor45iiIDwgYVwtcm91bmRcLWNhdmU7CivjmI0gPCBzb3VuZFwtb2ZcLXJhdDsKK+iuiumAnyA8IHNwZWVkXC1jaGFuZ2U7CivjlrcgPCBiaXJkXC1zaW5naW5nOwor5bm06LyV5Lq6IDwgeW91bmdcLXBlb3BsZTsKK+OWoCA8IGFuXC1hdXhpbGlhcnk7Civjla8gPCBzbG93XC10b25ndWVkOwor5a6J5b+DIDwgZmVlbFwtYXRcLWVhc2U7CivjlZIgPCBhXC1sb2Z0eVwtcGVhazsKK+OUrCA8IHRvXC1lc3RhYmxpc2g7CivjlKYgPCB0b1wtZW5jb3VyYWdlOwor45SVIDwgd2l0aFwtcHVycG9zZTsKK+OUgyA8IHRvXC1jdXRcLXNob3J0Owor45OjIDwgdG9cLXNpbmtcLWludG87CivkurrmsJEgPCBcKHRoZVwpXC1wZW9wbGU7CivlsIfkvoYgPCBcKHRoZVwpXC1mdXR1cmU7CivjkaogPCBhXC1nZW5lcmF0aW9uOwor45GUIDwgYWxsXC10b2dldGhlcjsKK+OQuCA8IHRvXC1vd25cLW1vbmV5Owor45C0IDwgdG9cLWRyYWdcLWRvd247CivpoYzoirEgPCB0aXRsZVwtZGVzaWduOwor5Y+v6KeAIDwgY29uc2lkZXJhYmxlOwor5Lq65qyKIDwgaHVtYW5cLXJpZ2h0czsKK+S5kuS5k+eQgyA8IHRhYmxlXC10ZW5uaXM7Civpmo7ntJrlvI8gPCBoaWVyYXJjaGljYWw7Civku6Xmlq/mi4noqJggPCBib29rXC1vZlwtZXpyYTsKK+i2leS4iiA8IGtlZXBcLXVwXC13aXRoOwor6IG96Kqq6YGOIDwgdG9cLWhlYXJcLXNhaWQ7Civpl4zlsL7ngo4gPCBhcHBlbmRpY2l0aXM7Civnp7vmsJEgPCB0b1wtaW1taWdyYXRlOwor5LuK5pmoIDwgdGhpc1wtbW9ybmluZzsKK+WvhuWPiyA8IGNsb3NlXC1mcmllbmQ7CivljZfpnZ4gPCBzb3V0aFwtYWZyaWNhOwor5LiN56ymIDwgaW5jb25zaXN0ZW50Owor6ZaL5pS+5byP57ay6LevIDwgb3BlblwtbmV0d29yazsKK+S4ueeUsCA8IHB1YmljXC1yZWdpb247CivljYrpn78gPCBoYWxmXC10aGVcLWRheTsKK+S4u+eSsCA8IHByaW1hcnlcLXJpbmc7CivlpKfkuIDkupsgPCBhXC1iaXRcLWJpZ2dlcjsKK+S9oOWAkSA8IHlvdVwtXChwbHVyYWxcKTsKK+S4gOebtCA8IGNvbnRpbnVvdXNseTsKK+eUn+eJqeaIsCA8IGdlcm1cLXdhcmZhcmU7CivkuI3nn6XmiYDmjqogPCBiZVwtYXRcLWFcLWxvc3M7CivmmpfnrpcgPCBwbG90XC1hZ2FpbnN0Owor5bu66Kit5oCnIDwgY29uc3RydWN0aXZlOwor5Lqu5bqmIDwgaWxsdW1pbmF0aW9uOwor5Y+D6ICDIDwgY29uc3VsdGF0aW9uOwor5ZaJ5aGe6Z+zIDwgZ2xvdHRhbFwtc3RvcDsKK+Wjr+m6lyA8IG1hZ25pZmljZW5jZTsKK+m7qOaUvyA8IHBhcnR5XC1wb2xpY3k7CivmqpTmoYjmnI3li5kgPCBmaWxlXC1zZXJ2b2NlOwor6JmQ5b6FIDwgbWlzdHJlYXRtZW50Owor5oSf5oGpIDwgdGhhbmtzZ2l2aW5nOwor5aSn6YO95pyDIDwgbWV0cm9wb2xpdGFuOwor572w55CDIDwgcGVuYWx0eVwtc2hvdDsKK+iyu+WfjiA8IHBoaWxhZGVscGhpYTsKK+acgOS9jum7niA8IGxvd2VzdFwtcG9pbnQ7CivmsrnnlasgPCBvaWxcLXBhaW50aW5nOwor576O5rSyIDwgdGhlXC1hbWVyaWNhczsKK+iyp+WbsCA8IGltcG92ZXJpc2hlZDsKK+mZjeiQveWcsOm7niA8IGxhbmRpbmdcLXNpdGU7Civln7rnnaPmlZkgPCBjaHJpc3RpYW5pdHk7CivlpKfph48gPCBncmVhdFwtYW1vdW50Owor6aCC55SoIDwgdG9cLWJlXC1vZlwtdXNlOwor5a6J55yg6YWuIDwgbWV0aGFxdWFsb25lOwor5pqX54GYIDwgaGlkZGVuXC1zaG9hbDsKK+iXpeaWuSA8IHByZXNjcmlwdGlvbjsKK+ippumpl+aApyA8IGV4cGVyaW1lbnRhbDsKK+S4u+aMgSA8IHByZXNpZGVcLW92ZXI7CivpioDluZUgPCBtb3ZpZVwtc2NyZWVuOwor6ICB5a62IDwgbmF0aXZlXC1wbGFjZTsKK+aal+a9riA8IHVuZGVyY3VycmVudDsKK+iyt+WDuSA8IGJ1eWluZ1wtcHJpY2U7CivlpJrpgoogPCBtdWx0aWxhdGVyYWw7Civnj77ku6MgPCBtb2Rlcm5cLXRpbWVzOwor5LuW5Lq6IDwgb3RoZXJcLXBlcnNvbjsKK+S5i+W+jCA8IGFmdGVyXCh3YXJkc1wpOwor5oWj5L6LIDwgY29udmVudGlvbmFsOwor5Lim5o6SIDwgc2lkZVwtYnlcLXNpZGU7CivogJXlnLAgPCBhcmlhYmxlXC1sYW5kOwor6LK05peP5YyWIDwgYXJpc3RvY3JhdGljOwor5rW05aC0IDwgYmF0aGluZ1wtc3BvdDsKK+S6lOeZvuiQrCA8IGZpdmVcLW1pbGxpb247Civok4voj5wgPCBsZWFmXC1tdXN0YXJkOwor5Yaw5rSy55+zIDwgaWNlbGFuZFwtc3BhcjsKK+aguOi7jeWCmSA8IG51Y2xlYXJcLWFybXM7CivkuI3mi5ggPCBub3RcLXN0aWNrXC10bzsKK+S4ieWNgeS6lOWEhCA8IDNcLVwuNVwtYmlsbGlvbjsKK+mereegsiA8IGZpcmVjcmFja2VyczsKK+S6jOWNgeWFreatsiA8IDI2XC15ZWFyc1wtb2xkOwor5oSf5YuVIDwgdG9cLW1vdmVcLVwoc2JcKTsKK+aEj+WRsyA8IHNpZ25pZmljYW5jZTsKK+mAn+iomOWToSA8IHN0ZW5vZ3JhcGhlcjsKK+eZveawtOazpSA8IHdoaXRlXC1jZW1lbnQ7CivkuI3mhKcgPCBiZVwtd29ydGh5XC1vZjsKK+mdtue0mSA8IHRhcmdldFwtc2hlZXQ7Civmlbjmk5rntrLntaEgPCBkYXRhXC1uZXR3b3JrOwor6b6Q54S25aSn54mpIDwgaHVnZVwtbW9uc3RlcjsKK+ixoeiBsuipniA8IG9ub21hdG9wb2VpYTsKK+aEiOWKoCA8IGFsbFwtdGhlXC1tb3JlOwor6YGg6ZuiIDwgcmVtb3ZlZFwtZnJvbTsKK+WSjOWWhCA8IGdvb2RcLW5hdHVyZWQ7Civoqo3orYkgPCBhdXRoZW50aWNhdGU7CivliKjpvZIgPCBnZWFyXC1zaGFwaW5nOwor5rOo5oSPIDwgdGFrZVwtbm90ZVwtb2Y7CivpoqjlkbMgPCBsb2NhbFwtZmxhdm9yOwor57mh6IqxIDwgdG9cLWVtYnJvaWRlcjsKK+aal+aOoiA8IHNlY3JldFwtYWdlbnQ7CivmmrTmgJIgPCB2aW9sZW50XC1yYWdlOwor5LiN5a65IDwgbm90XC10b2xlcmF0ZTsKK+S4jeWunCA8IG5vdFwtc3VpdGFibGU7Civniq/mr5IgPCBpbGxlZ2FsXC1kcnVnOwor5LiW55WM55+l5ZCNIDwgd29ybGRcLWZhbW91czsKK+W5gOagvOW8jyA8IGZyYW1lXC1mb3JtYXQ7CivlpKfoh7QgPCBtb3JlXC1vclwtbGVzczsKK+S4jeWmgiA8IG5vdFwtZXF1YWxcLXRvOwor5b6X56WoIDwgdm90ZVwtZ2V0dGluZzsKK+a0vuWIpSA8IGRlbm9taW5hdGlvbjsKK+e3mui7uCA8IHRocmVhZFwtc3Bvb2w7CivmnInliKkgPCBhZHZhbnRhZ2VvdXM7CivooZvnlJ/ntJkgPCB0b2lsZXRcLXBhcGVyOwor6KiC6ZaxIDwgc3Vic2NyaXB0aW9uOwor5oGi5b6pIDwgdG9cLXJlaW5zdGF0ZTsKK+mAmemghSA8IHRoaXNcLVwodGhpbmdcKTsKK+W/q+mAn+eZvOWxlSA8IHJhcGlkXC1ncm93dGg7CivlpJrnqK7oqp7oqIAgPCBtdWx0aWxpbmd1YWw7Civlj6/mg5wgPCBpdFwtaXNcLWFcLXBpdHk7CivnlbbmmYLnmoQgPCBvZlwtdGhhdFwtdGltZTsKK+WpmuWkliA8IGV4dHJhbWFyaXRhbDsKK+S4jeWWriA8IG5vdFwtdGhlXC1vbmx5Owor5a6J5YWo5ZWP6aGMIDwgc2FmZXR5XC1pc3N1ZTsKK+S5i+S4gCA8IG9uZVwtb2ZcLVwoc3RoXCk7CivlooPpgYcgPCBjaXJjdW1zdGFuY2U7Civph47lv4MgPCB3aWxkXC1zY2hlbWVzOwor5Y275q2lIDwgdG9cLXN0ZXBcLWJhY2s7CivkuK3kv4QgPCBjaGluYVwtcnVzc2lhOwor5Y2x5q6GIDwgZ3JhdmVcLWRhbmdlcjsKK+S4reS6niA8IGNlbnRyYWxcLWFzaWE7CivorormgKcgPCBkZW5hdHVyYXRpb247Civljp/mlpkgPCByYXdcLW1hdGVyaWFsOwor5raI6Ziy5qCTIDwgZmlyZVwtaHlkcmFudDsKK+S4jeWIqSA8IHVuZmF2b3VyYWJsZTsKK+mAj+aYjuW6piA8IHRyYW5zcGFyZW5jeTsKK+eIhueZvCA8IHRvXC1icmVha1wtb3V0Owor5aSa56uZIDwgbXVsdGlzdGF0aW9uOwor5rCn5rCjIDwgb3h5Z2VuXC1cKGdhc1wpOwor5b+15pelIDwgbWVtb3JpYWxcLWRheTsKK+WQhOWciyA8IGVhY2hcLWNvdW50cnk7CivkuI3kvr8gPCBpbmNvbnZlbmllbnQ7CivmmYLmhYsgPCBcKHZlcmJcKVwtdGVuc2U7CivnvoXliJcgPCB0b1wtc3BlYWRcLW91dDsKK+S4gOWEhCA8IDFcLTAwXC1taWxsaW9uOwor5pq05YuVIDwgaW5zdXJyZWN0aW9uOwor6Z225qmfIDwgdGFyZ2V0XC1kcm9uZTsKK+mBi+ihjCA8IGJlXC1pblwtbW90aW9uOwor57eo6IieIDwgY2hvcmVvZ3JhcGh5Owor5LqM5Y2B5LiDIDwgdHdlbnR5XC1zZXZlbjsKK+S7pSA8IGJ5XC1tZWFuc1wtb2Y7CivovrIgPCBhZ3JpY3VsdHVyZTsKK+W+hCA8IG5hcnJvd1wtcGF0aDsKK+WHoCA8IHNtYWxsXC10YWJsZTsKK+S+vyA8IGNvbnZlbmllbmNlOwor55S1IDwgZWxlY3RyaWNpdHk7Civnmb4gPCBvbmVcLWh1bmRyZWQ7Civot6MgPCBiYXJlXC1mb290ZWQ7CivotIUgPCB1bm5lY2Vzc2FyeTsKK+WKnyA8IGFjaGlldmVtZW50Owor5rGfIDwgbGFyZ2VcLXJpdmVyOwor5rOoIDwgY29uY2VudHJhdGU7CivniacgPCB0ZW5kXC1jYXR0bGU7CivlqZogPCBnZXRcLW1hcnJpZWQ7CivliIogPCBwdWJsaWNhdGlvbjsKK+eGnyA8IHdlbGxcLWNvb2tlZDsKK+mlrSA8IGNvb2tlZFwtcmljZTsKK+WloiA8IGV4dHJhdmFnYW50Owor5p+lIDwgaW52ZXN0aWdhdGU7Civnq6AgPCBjb21wb3NpdGlvbjsKK+aMiSA8IHB1dFwtaGFuZFwtb247CivonaAgPCBraW5kXC1vZlwtYmF0Owor6J2VIDwgbmliYmxlXC1hd2F5Owor5ZuwIDwgdG9cLXN1cnJvdW5kOwor6ZmpIDwgbmFycm93XC1wYXNzOwor57uDIDwgdG9cLXByYWN0aWNlOwor5rqvIDwgZ29cLXVwc3RyZWFtOwor5riJIDwgZm9yZFwtc3RyZWFtOwor6LSlIDwgYmVcLWRlZmVhdGVkOwor57q3IDwgaW5cLWRpc29yZGVyOwor57y6IDwgYmVcLXNob3J0XC1vZjsKK+mBrSA8IGNvbWVcLWFjcm9zczsKK+aItCA8IHdlYXJcLW9uXC10b3A7Civli6QgPCBpbmR1c3RyaW91czsKK+mrhCA8IGJvbmVcLW1hcnJvdzsKK+WKuSA8IGVmZmljYWNpb3VzOwor6LKMIDwgY291bnRlbmFuY2U7CivnuYEgPCBjb21wbGljYXRlZDsKK+afsyA8IHdpbGxvd1wtdHJlZTsKK+WHhCA8IGJpdHRlclwtY29sZDsKK+mcniA8IHJvc3lcLWNsb3VkczsKK+mjtCA8IHN3ZWV0XC1tZWF0czsKK+iBqiA8IGludGVsbGlnZW50Owor5YCmIDwgYmVcLXRpcmVkXC1vZjsKK+aRlCA8IGZhbGxcLWdyb3VuZDsKK+mGiSA8IGludG94aWNhdGVkOwor5rabIDwgbGFyZ2VcLXdhdmVzOwor6ZSFIDwgY29va2luZ1wtcG90Owor5LuUIDwgc21hbGxcLXRoaW5nOwor5pyDIDwgdG9cLWFzc2VtYmxlOwor5ouGIDwgdG9cLWJyZWFrXC11cDsKK+e/oCA8IGNvbG9yXC1ncmVlbjsKK+aZlSA8IGhhbG9cLWluXC1za3k7CivovqggPCBkaXN0aW5ndWlzaDsKK+iRmyA8IGVkaWJsZVwtYmVhbjsKK+i9vyA8IHNlZGFuXC1jaGFpcjsKK+aUqyA8IHNuYXRjaFwtYXdheTsKK+mNmyA8IGZvcmdlXC1tZXRhbDsKK+WOlSA8IG1pbmdsZVwtd2l0aDsKK+ervyA8IGJhbWJvb1wtcG9sZTsKK+WIuCA8IGNlcnRpZmljYXRlOwor56mJIDwgeW91bmdcLWdyYWluOwor6amzIDwgdmFyaWNvbG9yZWQ7CivmhpQgPCBiZVwtd29yblwtb3V0Owor57KeIDwgZ3JvdW5kXC1yaWNlOwor6YGCIDwgY29tcGx5XC13aXRoOwor6Zq2IDwgc3Vic2VydmllbnQ7CivnvLggPCBlYXJ0aGVuXC1qdWc7CivogqIgPCBodW1hblwtbGltYnM7CivlsLQgPCBlbWJhcnJhc3NlZDsKK+WRkCA8IHJhaXNlXC12b2ljZTsKK+miliA8IHJpY2VcLXRhc3NlbDsKK+egpSA8IGFcLXdoZXRzdG9uZTsKK+WtlSA8IGJlXC1wcmVnbmFudDsKK+mSniA8IHBhcGVyXC1tb25leTsKK+eQoiA8IHBvbGlzaFwtamFkZTsKK+e7vSA8IHJpcHBlZFwtc2VhbTsKK+WloCA8IHBheVwtcmVzcGVjdDsKK+a+nCA8IG92ZXJmbG93aW5nOwor5oOVIDwgYmVcLWNhdXRpb3VzOwor6La0IDwgbHlpbmdcLXByb25lOwor6ZqLIDwgc3VpXC1keW5hc3R5Owor556EIDwgdGFrZVwtYWltXC1hdDsKK+elnyA8IGV2aWxcLXNwaXJpdDsKK+WXlCA8IGJlXC1hbmdyeVwtYXQ7CivlpZUgPCBpblwtc2VxdWVuY2U7CivmprQgPCBwb21lZ3JhbmF0ZTsKK+ajmCA8IGp1anViZVwtdHJlZTsKK+WzmSA8IHN0YW5kXC1lcmVjdDsKK+egjCA8IHN0b25lXC1zdGVwczsKK+ankCA8IGxvY3VzdFwtdHJlZTsKK+mzniA8IGZpc2hcLXNjYWxlczsKK+eCvSA8IGJ1cm5pbmdcLWhvdDsKK+i/giA8IGRvY3RyaW5haXJlOwor57yqIDwgd2luZFwtYXJvdW5kOwor5YeLIDwgYmVcLXdpdGhlcmVkOwor57ykIDwgZmxvdXJpc2hpbmc7Civpm7MgPCB0aHVuZGVyY2xhcDsKK+mpuCA8IGV4dHJhXC1ob3JzZTsKK+WXtyA8IGxvdWRcLWNsYW1vcjsKK+eCliA8IHN0ZXdcLXNsb3dseTsKK+iwjyA8IHJlbW9uc3RyYXRlOwor56+GIDwgc2VhbFwtc2NyaXB0Owor5a6mIDwgb2ZmaWNpYWxkb207Civnk64gPCBlYXJ0aGVuXC1qYXI7CivmnJUgPCBwcm9ub3VuXC0nJ2knJzsKK+mYkSA8IGRvb3JcLXNjcmVlbjsKK+WNpCA8IHNhbGluZVwtc29pbDsKK+WUjyA8IHdlZXBcLW9yXC1zb2I7CivmsakgPCBydW5cLXN3aWZ0bHk7CivmppUgPCBiYW55YW5cLXRyZWU7Civpl7AgPCBpbnRlcmNhbGFyeTsKK+aYiiA8IHN1bW1lclwtdGltZTsKK+eOtyA8IGZsYXdcLWluXC1nZW07CivpmJkgPCB3YXRjaFwtdG93ZXI7Civms4wgPCB0b1wtc2VlcFwtb3V0Owor54O9IDwgc2lnbmFsXC1maXJlOwor5a21IDwgc2l0XC1vblwtZWdnczsKK+akrSA8IG92YWxcLXNoYXBlZDsKK+eXiSA8IGNvbnZ1bHNpb25zOwor5YydIDwgZnVsbFwtY2lyY2xlOwor6aWqIDwgY29va2VkXC1mb29kOwor5baZIDwgcHJlY2lwaXRvdXM7CivpoqcgPCBjaGVla1wtYm9uZXM7CivplZcgPCBib3JpbmdcLXRvb2w7Civmj7YgPCBtYWtlXC1mdW5cLW9mOwor54K3IDwgY2FuZGxlXC13aWNrOwor6LSyIDwgZm9yZ2VcLWFoZWFkOwor6JqxIDwgZ3Jhc3Nob3BwZXI7Civnl6ggPCBjb25zdW1wdGlvbjsKK+a/giA8IGFcLXdhdGVyZmFsbDsKK+axkCA8IG5pZ2h0XC10aWRlczsKK+etoCA8IGJhbWJvb1wtc2tpbjsKK+awpCA8IGhhbmdpbmdcLWZvZzsKK+eXlCA8IGhlbW9ycmhvaWRzOwor6La/IDwgdG9cLXRyZWFkXC1vbjsKK+inniA8IHdpbmVcLXZlc3NlbDsKK+aMuSA8IHRvXC1iYWxlXC1vdXQ7CivohpEgPCB0aGVcLWtuZWVjYXA7CivllLMgPCBjcnlcLW9mXC1iaXJkOwor56SFIDwgc3RvbmVcLWJsb2NrOwor566UIDwgcmVlZFwtc2NyZWVuOwor6LG4IDwgcmFkaWNhbFwtMTUzOwor54ODIDwgaHlkcm9jYXJib247CivnoK0gPCBzdG9uZVwtcHJvYmU7Civmvo0gPCB0aW1lbHlcLXJhaW47CivpvosgPCB0b290aFwtZGVjYXk7CivnvLEgPCBhdHRhY2hlZFwtdG87CivlpYIgPCBiZVwtbnVtZXJvdXM7Civpu6kgPCB0b1wtZGlzaG9ub3I7Civlo4UgPCB0b1wtb2JzdHJ1Y3Q7CivmvrYgPCBzdGlsbFwtd2F0ZXI7CivppI0gPCBiZVwtc2F0aWF0ZWQ7CivmnqUgPCB0eXBlXC1vZlwtb2FrOwor5qGVIDwgdGFsbG93XC10cmVlOwor6bKiIDwgc2lsdmVyXC1jYXJwOwor6LaxIDwgZ29cLWluXC1odXJyeTsKK+WmqyA8IGZhbWlseVwtbmFtZTsKK+aaviA8IG1vcm5pbmdcLXN1bjsKK+iNpiA8IGJyaW5kbGVkXC1veDsKK+mCmyA8IGluXC1kaXN0cmVzczsKK+aIoiA8IHRvXC1wdXRcLWF3YXk7CivmpqcgPCB0eXBlXC1vZlwteWV3Owor5aCHIDwgeWVsbG93XC1sb2FtOwor5YqsIDwgYmVcLWRpbGlnZW50Owor6a2IIDwgbWlzY2hldmlvdXM7CivpjaogPCBhblwtaXJvblwtcGFuOwor6JyjIDwgZHVuZ1wtYmVldGxlOwor55emIDwgXChmbGF0XClcLW1vbGU7CivmiKwgPCBleHRlcm1pbmF0ZTsKK+WXiSA8IGJpcmQnJ3NcLWNyb3A7CivlhIsgPCBhXC1zbWFsbFwtamFyOwor6JqcIDwgcGxhbnRcLWxvdXNlOwor57KcIDwgc2VsbFwtZ3JhaW5zOwor5pSuIDwgdG9cLWZlbmRcLW9mZjsKK+iLjiA8IGNoaW5hXC1ncmFzczsKK+WdqSA8IGVhcnRoZW53YXJlOwor5qaJIDwgdHlwZVwtb2ZcLWVsbTsKK+eOoiA8IHBvcnBoeXJpdGVzOwor57uBIDwgdG9cLWNvbnRyYWN0Owor5r2GIDwgdGlueVwtc3RyZWFtOwor6au5IDwgcmVkXC1sYWNxdWVyOwor6KeWIDwgdG9cLWxvbmdcLWZvcjsKK+ietSA8IGFcLWNocnlzYWxpczsKK+adqiA8IHRpcFwtb2ZcLXR3aWc7CivluYIgPCBjb3ZlclwtY2xvdGg7CivnoZcgPCBiYXJyZW5cLWxhbmQ7CivohJ4gPCBtaW5jZWRcLW1lYXQ7CivovbUgPCBlbmRcLW9mXC1heGxlOwor5qWXIDwgYmFyXC1vZlwtZG9vcjsKK+ahhCA8IGFcLWNvaXJcLXBhbG07CivloKAgPCBiYXR0bGVtZW50czsKK+S/nCA8IHRvXC10cnVzdFwtdG87Civlo5PnuK4gPCB0b1wtY29tcHJlc3M7CivlpKfopo/mqKEgPCBsYXJnZVwtc2NhbGU7Civluqbph4/ooaEgPCBtZWFzdXJlbWVudDsKK+iIquepuuihkyA8IGFlcm9uYXV0aWNzOwor6Kiq6I+vIDwgdmlzaXRcLWNoaW5hOwor6KqN55+lIDwgYWNrbm93bGVkZ2U7Civlj6vlloogPCBleGNsYW1hdGlvbjsKK+ioquWVj+iAhSA8IGludGVydmlld2VyOwor5rKJ6YeN5omT5pOKIDwgdG9cLWhpdFwtaGFyZDsKK+mAo+ipniA8IGNvbmp1bmN0aW9uOwor5aW95pyL5Y+LIDwgZ29vZFwtZnJpZW5kOwor5Zub6Z2i6auUIDwgdGV0cmFoZWRyb247Civoh6rnhLbogIznhLYgPCBpbnZvbHVudGFyeTsKK+W8iuerryA8IG1hbHByYWN0aWNlOwor6Z2e5qC4IDwgbm9uXC1udWNsZWFyOwor5ouU6YeY6YyYIDwgY2xhd1wtaGFtbWVyOwor55Sz5ZG96KiYIDwgZGV1dGVyb25vbXk7CivmlLbnqasgPCBhY3F1aXNpdGlvbjsKK+aJjeWklua1gSA8IGJyYWluXC1kcmFpbjsKK+awkeaXjyA8IG5hdGlvbmFsaXR5Owor5LiN6LSK5LiA6KmeIDwga2VlcFwtc2lsZW50Owor5pqX5LqVIDwgYmxpbmRcLXNoYWZ0Owor5pqX5LitIDwgaW5cLXRoZVwtZGFyazsKK+efmuebriA8IHRvXC1mb2N1c1wtb247CivluIPpnosgPCBjbG90aFwtc2hvZXM7Civkurrpq5TlmajlrpggPCBodW1hblwtb3JnYW47Civln4vpoK0gPCBzdGVhbWVkXC1idW47CivlibXkvZzlipsgPCBvcmlnaW5hbGl0eTsKK+eZveefruaYnyA8IHdoaXRlXC1kd2FyZjsKK+WIpOiZlSA8IHRvXC1zZW50YW5jZTsKK+awkeaXj+S4u+e+qSA8IG5hdGlvbmFsaXNtOwor5Yi76IumIDwgaGFyZHdvcmtpbmc7CivmqJnpu54gPCBwdW5jdHVhdGlvbjsKK+eZvem6tSA8IHdoZWF0XC1mbG91cjsKK+WGkumaqiA8IHRha2VcLWFcLXJpc2s7Civnmb3ptrQgPCB3aGl0ZVwtY3JhbmU7CivkuI3otIrmiJAgPCBkaXNhcHByb3ZhbDsKK+W+gOaYlCA8IGluXC10aGVcLXBhc3Q7CivljYrmnIjliIogPCBzZW1pbW9udGhseTsKK+mCiueWhiA8IGJvcmRlclwtYXJlYTsKK+iuk+S9jSA8IHRvXC1hYmRpY2F0ZTsKK+aAquWDuyA8IHBlY3VsaWFyaXR5Owor5b6B5pS2IDwgbGV2eVwtXChmaW5lXCk7Civmr43mnb8gPCBtb3RoZXJib2FyZDsKK+mcgOaxgiA8IHJlcXVpcmVtZW50Owor5aSn5qWtIDwgZ3JlYXRcLWNhdXNlOwor5pe65a2jIDwgYnVzeVwtc2Vhc29uOwor5YKZ55So55KwIDwgYmFja3VwXC1yaW5nOwor5b+F5a6aIDwgYmVcLWJvdW5kXC10bzsKK+WNiuW5tCA8IGhhbGZcLWFcLXllYXI7CivoqrLmoYwgPCBzY2hvb2xcLWRlc2s7Civmu7TnrZTogbIgPCB0aWNrXC1cKHRvY2tcKTsKK+mWk+malCA8IGNvbXBhcnRtZW50Owor6YGy55aRIDwgdG9cLWhlc2l0YXRlOwor6Z2I5oSfIDwgaW5zcGlyYXRpb247Civnsr7lrZDlr4bluqYgPCBzcGVybVwtY291bnQ7CivmuqvluqboqIggPCB0aGVybW9ncmFwaDsKK+mBt+Wxheenu+awkSA8IGltbWlncmF0aW9uOwor5LiN6YeN6KaBIDwgdW5pbXBvcnRhbnQ7Civph47nlJ/li5XniakgPCB3aWxkXC1hbmltYWw7CivoqqrmnI0gPCB0b1wtcGVyc3VhZGU7CivliLbntIQgPCB0b1wtcmVzdHJpY3Q7CivmnInlvbHpn78gPCBpbmZsdWVudGlhbDsKK+mej+WbuiA8IGNvbnNvbGlkYXRlOwor55m86Zu75bugIDwgcG93ZXJcLXBsYW50Owor6IGW6KqV6ICB5Lq6IDwgc2FudGFcLWNsYXVzOwor5YyF5ousIDwgdG9cLWNvbXByaXNlOwor5aal5ZaEIDwgYXBwcm9wcmlhdGU7Civovq/oqLwgPCBkaWFsZWN0aWNhbDsKK+a1qua8q+S4u+e+qSA8IHJvbWFudGljaXNtOwor5p+P5p6X54mGIDwgYmVybGluXC13YWxsOwor54CJ6bm9IDwgZXBzb21cLXNhbHRzOwor5LiN5Y+v55+l6KuWIDwgYWdub3N0aWNpc207CivkuI3liIflr6bpmpsgPCB1bnJlYWxpc3RpYzsKK+WFuOWei+eUqOmAlCA8IHR5cGljYWxcLXVzZTsKK+WvjOaWvOaDs+WDjyA8IGltYWdpbmF0aXZlOwor5beh6YKP6ImHIDwgcGF0cm9sXC1ib2F0Owor5LiN5ZCr57OKIDwgdW5hbWJpZ3VvdXM7CivmnKzlnJ/ljJYgPCB0b1wtbG9jYWxpemU7CivljbPliLsgPCBpbW1lZGlhdGVseTsKK+WuieWFqOeHiCA8IHNhZmV0eVwtbGFtcDsKK+WLmOaOoiA8IGV4cGxvcmF0aW9uOwor5pyJ5oSP5oCdIDwgaW50ZXJlc3Rpbmc7CivljZrlj5YgPCB0cnlcLXRvXC1nYWluOwor56qX546755KDIDwgd2luZG93XC1wYW5lOwor5pS+5qOEIDwgdG9cLXJlbm91bmNlOwor5Yaw6JuLIDwgZnJvemVuXC1lZ2dzOwor6YO15bGAIDwgcG9zdFwtb2ZmaWNlOwor6ZuZ5pW4IDwgZXZlblwtbnVtYmVyOwor6JKQ5bCLIDwgdG9cLWxvb2tcLWZvcjsKK+eZvemBkyA8IG1vb24nJ3NcLXBhdGg7Civli5XmhYsgPCBkZXZlbG9wbWVudDsKK+awuOS5hSA8IGV2ZXJsYXN0aW5nOwor55m86YCBIDwgdG9cLXRyYW5zbWl0Owor6YWN5YKZIDwgdG9cLWFsbG9jYXRlOwor5paw6KW/6JitIDwgbmV3XC16ZWFsYW5kOwor5q+U5aaCIDwgZm9yXC1leGFtcGxlOwor5ZyL5LqL6Kiq5ZWPIDwgc3RhdGVcLXZpc2l0Owor5YWL6KOh5aeG5p6X5a6uIDwgdGhlXC1rcmVtbGluOwor5aSa5bGxIDwgbW91bnRhaW5vdXM7CivljYrljYrmi4nmi4kgPCBpbmNvbXBsZXRlZDsKK+mbu+W3pSA8IGVsZWN0cmljaWFuOwor57SF6ImyIDwgcmVkXC1cKGNvbG9yXCk7Civmj4/ov7AgPCB0b1wtZGVzY3JpYmU7CivljYHlhIQgPCBvbmVcLWJpbGxpb247CivkuI3lj6/liIbpm6IgPCBpbnNlcGFyYWJsZTsKK+WFteifuyA8IHNvbGRpZXJcLWFudDsKK+avgOWjniA8IGRlc3RydWN0aW9uOwor5YmK5ribIDwgdG9cLWN1dFwtZG93bjsKK+aXpeS4rSA8IGphcGFuXC1jaGluYTsKK+mbu+e6nOiqv+WItuino+iqv+WZqCA8IGNhYmxlXC1tb2RlbTsKK+maqOaZgiA8IGF0XC1hbnlcLXRpbWU7CivkuIDljYPpm7bkupTljYHlhIQgPCAxMDVcLWJpbGxpb247Civplbfoq4cgPCBhXC1sb25nXC10YWxrOwor6KOc6YG4IDwgYnlcLWVsZWN0aW9uOwor5pWX6KGA55eHIDwgc2VwdGljYWVtaWE7CivnhKHnlKLpmo7ntJogPCBwcm9sZXRhcmlhdDsKK+iQveW+jCA8IGZhbGxcLWJlaGluZDsKK+WIhuS9iOW8jyA8IGRpc3RydWJ1dGVkOwor5aSx5Y675oSP6K2YIDwgdW5jb25zY2lvdXM7CivmjqjpgbIgPCB0b1wtcG9zdHBvbmU7Civnmb7okKzlr4znv4EgPCBtaWxsaW9uYWlyZTsKK+iytOaXj+ekvuacgyA8IGFyaXN0b2NyYWN5Owor5pON5rOVIDwgZHJpbGxcLXJ1bGVzOwor6LuN6ZqKIDwgYXJteVwtdHJvb3BzOwor5qi56JGJIDwgdHJlZVwtbGVhdmVzOwor5Ymb5p62IDwgcmlnaWRcLWZyYW1lOwor6KuH5YiwIDwgdG9cLXJlZmVyXC10bzsKK+WGjeiAhSA8IGZ1cnRoZXJtb3JlOwor6Kq/5Yi2IDwgdG9cLW1vZHVsYXRlOwor5Z+655+zIDwgY29ybmVyc3RvbmU7CivlvoDkuosgPCBwYXN0XC1ldmVudHM7CivpuoAgPCBmZW1hbGVcLWRlZXI7CivlpKflip8gPCBncmVhdFwtbWVyaXQ7CivmnInkupvkurogPCBzb21lXC1wZW9wbGU7Civoo4Hou40gPCBkaXNhcm1hbWVudDsKK+iqoeWRvSA8IGNvbW1hbmRtZW50Owor6biPIDwgdHJvcGljXC1iaXJkOwor5YWn6IejIDwgY2hhbWJlcmxhaW47Civms6LlpJrpu47lkIQgPCBwdWVydG9cLXJpY287CivptLogPCB0aGVcLXBlbGljYW47Civnq4vms5XmqZ/pl5wgPCBsZWdpc2xhdHVyZTsKK+mxoCA8IG1pbmNlZFwtZmlzaDsKK+msmSA8IG1hdHRlZFwtaGFpcjsKK+WdpuiVqSA8IG1hZ25hbmltb3VzOwor5LiN5ZCQ5rCjIDwgdW5hc3BpcmF0ZWQ7CivkuLvopoHljp/lm6AgPCBtYWluXC1yZWFzb247Civlop7lvLcgPCB0b1wtaW5jcmVhc2U7CivpqZQgPCBibGFja1wtaG9yc2U7CivpqYcgPCBoZWF2eVwtaG9yc2U7CivmnInntpPpqZcgPCBleHBlcmllbmNlZDsKK+mZkOaWvCA8IHJlc3RyaWN0XC1hdDsKK+mWiee2kyA8IGFtZW5vcnJob2VhOwor6KqN5Ye6IDwgcmVjb2duaXRpb247CivlhY3ogbcgPCBkZWdyYWRhdGlvbjsKK+W3peeoiyA8IGVuZ2luZWVyaW5nOwor6KiY5b6XIDwgdG9cLXJlbWVtYmVyOwor5pO65biDIDwgb3JkZXJcLWFib3V0Owor6aCLIDwgdG9cLWNhcmVcLWZvcjsKK+mAj+aYjiA8IHRyYW5zcGFyZW50Owor5Yqb5ZyWIDwgdHJ5XC1oYXJkXC10bzsKK+acieeUn+S7peS+hiA8IHNpbmNlXC1iaXJ0aDsKK+meqyA8IGludGVycm9nYXRlOwor6LKd5Yqg54i+5rmWIDwgbGFrZVwtYmFpa2FsOwor5YW456auIDwgY2VsZWJyYXRpb247CivliJHmnJ8gPCBwcmlzb25cLXRlcm07Civnsr7nsKEgPCB0b1wtc2ltcGxpZnk7CivlkozlubPmnIPoq4cgPCBwZWFjZVwtdGFsa3M7CivoirHojLYgPCBzY2VudGVkXC10ZWE7CivmlaPkvYggPCBkaXNzZW1pbmF0ZTsKK+ewv+iomCA8IGJvb2trZWVwaW5nOwor5aSq5bmz5rSL6YCx6YKKIDwgcGFjaWZpY1wtcmltOwor6Ke45oCSIDwgcHJvdm9jYXRpb247CivmlKrlkowgPCB0b1wtbWl4XC1cKHVwXCk7CivpgLHlubQgPCBhbm5pdmVyc2FyeTsKK+e1leacmyA8IGRlc3BlcmF0aW9uOwor5pWX5LuXIDwgbG9zdFwtYmF0dGxlOwor5LiN6K6K5YO55qC8IDwgZml4ZWRcLXByaWNlOwor6ZCmIDwgY2FsaWZvcm5pdW07CivntZDmnZ8gPCB0ZXJtaW5hdGlvbjsKK+eEoeaEjyA8IGluYWR2ZXJ0YW50Owor6Y+7IDwgcGhvc3Bob25pdW07CivnlLfmnIvlj4sgPCBtYWxlXC1mcmllbmQ7Civnm7jmr5QgPCBjb21wYXJlZFwtdG87CivopobmspIgPCBhbm5paGlsYXRlZDsKK+eZveearuabuCA8IHdoaXRlXC1wYXBlcjsKK+mNkCA8IGFcLWhlYWRzdGFsbDsKK+ecieaioiA8IHRpcFwtb2ZcLWJyb3c7CivliIfmj5sgPCB0b1wtY3V0XC1vdmVyOwor57+76K2v6ICFIDwgaW50ZXJwcmV0ZXI7Civlhannmb4gPCB0d29cLWh1bmRyZWQ7CivlpbPnubzmib/kurogPCBpbmhlcml0cmVzczsKK+WBh+ioreiqnuawoyA8IHN1Ymp1bmN0aXZlOwor5Zyw5b+D5ZC45YqbIDwgZ3Jhdml0YXRpb247CivphrkgPCBzdHJvbmdcLXdpbmU7CivphpMgPCBzYWx0ZWRcLW1lYXQ7CivkuI3ms6jmhI8gPCB0aG91Z2h0bGVzczsKK+ipleWDuSA8IHRvXC1ldmFsdWF0ZTsKK+mFjyA8IG1pbGxldFwtd2luZTsKK+S/neS4jeS9jyA8IG1vc3RcLWxpa2VseTsKK+W0qeijgiA8IGJ1cnN0XC1hcGFydDsKK+W3tOWTiOmmrCA8IHRoZVwtYmFoYW1hczsKK+a/gOWFieS6jOalteeuoSA8IGxhc2VyXC1kaW9kZTsKK+eZvOmAgeWZqCA8IHRyYW5zbWl0dGVyOwor5Yqg5LulIDwgaW5cLWFkZGl0aW9uOwor5oyJ6YiVIDwgcHVzaFwtYnV0dG9uOwor6L+KIDwgdG9cLWdvXC1yb3VuZDsKK+WgseaHiSA8IHJldHJpYnV0aW9uOwor5bm+5bm0IDwgYVwtZmV3XC15ZWFyczsKK+ebvOacmyA8IHRvXC1ob3BlXC1mb3I7Civpmorlk6EgPCB0ZWFtXC1tZW1iZXI7CivooYzouaQgPCB3aGVyZWFib3V0czsKK+aUr+S7mCA8IHBheVwtXChtb25leVwpOwor56ys5LiA56ugIDwgY2hhcHRlclwtb25lOwor6YGL6LKo6aas6LuKIDwgY2FyZ29cLXdhZ29uOwor6KGo6KqeIDwgcHJlZGljYXRpdmU7CivovKYgPCBhXC1oYW5kXC1jYXJ0Owor6Ki75YaKIDwgdG9cLXJlZ2lzdGVyOwor6ZmE5bGsIDwgc3Vib3JkaW5hdGU7CivpgKPnkrDlnJYgPCBjb21pY1wtc3RyaXA7Civlgb3ou40gPCBwdXBwZXRcLWFybXk7CivlhKrnp4AgPCBvdXRzdGFuZGluZzsKK+i0lyA8IGNvdW50ZXJmZWl0Owor6LKYIDwgdGhlXC1wYW50aGVyOwor6auU6LK8IDwgY29uc2lkZXJhdGU7CivosaYgPCBhXC13aWxkXC1ib2FyOwor6LGYIDwgYVwtc21hbGxcLXBpZzsKK+Wft+aUvyA8IGJlXC1pblwtcG93ZXI7CivlnKjlnLDkuIsgPCB1bmRlcmdyb3VuZDsKK+esrOS4ieS4lueVjCA8IHRoaXJkXC13b3JsZDsKK+mtmuervyA8IGZpc2hpbmdcLXJvZDsKK+eEoemXnOe3iuimgSA8IGluZGlmZmVyZW50Owor5biM5pybIDwgcm9cLXdpc2hcLWZvcjsKK+e0hOacgyA8IGFwcG9pbnRtZW50Owor6auU6KqNIDwgcmVhbGl6YXRpb247Civlubjlpb0gPCBmb3J0dW5hdGVseTsKK+aOiOeyiSA8IHBvbGxpbmF0aW9uOwor6KexIDwgdGFydGFyXC1ob3JuOwor6KS1IDwgYnJpZGFsXC12ZWlsOwor6KO954mHIDwgbW92aWVtYWtpbmc7CivlgrPnnJ/mqZ8gPCBmYXhcLW1hY2hpbmU7CivmqZ/mnIMgPCBvcHBvcnR1bml0eTsKK+mXnOaKvCA8IHB1dFwtaW5cLWphaWw7CivlpKfkvr/kub7nh6UgPCBjb25zdGlwYXRlZDsKK+ijneeUsui7iiA8IGFybW9yZWRcLWNhcjsKK+igiyA8IGNhdGVycGlsbGFyOwor5LiN5YGP5LiN5YCaIDwgZXZlblwtaGFuZGVkOwor6J+bIDwgYVwtbGFuZFwtY3JhYjsKK+eBjOa6iSA8IHRvXC1pcnJpZ2F0ZTsKK+mAmuWRiiA8IHRvXC1hbm5vdW5jZTsKK+idmyA8IHRoZVwtc293XC1idWc7CivonY0gPCBhXC1jZW50aXBlZGU7CivpqZXpmb0gPCBibGF6aW5nXC1zdW47CivliY3ku7sgPCBwcmVkZWNlc3NvcjsKK+iXmiA8IHdhdGVyXC1wbGFudDsKK+WIhuaVo+azqOaEjyA8IHRvXC1kaXN0cmFjdDsKK+iXhCA8IGVkaWJsZVwtZmVybjsKK+i7n+einyA8IGZsb3BweVwtZGlzazsKK+iTqiA8IHBhcGVyXC1wbGFudDsKK+iTgiA8IGx1Y2t5XC1wbGFjZTsKK+iSrSA8IHRvXC1jdXRncmFzczsKK+iQkCA8IGx1Y2t5XC1wbGFudDsKK+iPoiA8IHRvXC1pbmN1YmF0ZTsKK+eNsuebiuiAhSA8IGJlbmVmaWNpYXJ5Owor5bGP6ZaAIDwgc2NyZWVuXC1kb29yOwor5ouc6KiqIDwgcGF5XC1hXC12aXNpdDsKK+WNiumAj+aYjiA8IHRyYW5zbHVjZW50Owor6ImXIDwgYm93XC1vZlwtanVuazsKK+mAgOWHuiA8IHRvXC13aXRoZHJhdzsKK+aOoeeFpCA8IGNvYWxcLW1pbmluZzsKK+esrOS4gOa1gSA8IGZpcnN0XC1jbGFzczsKK+W5s+WHoSA8IGNvbW1vbnBsYWNlOwor6KyA5q665qGIIDwgbXVyZGVyXC1jYXNlOwor5ous6JmfIDwgcGFyZW50aGVzaXM7Civog5QgPCByb3R0ZW5cLW1lYXQ7CivogoggPCB0b1wtY29tbWVuY2U7CivogaYgPCB0aGVcLWhlYXJpbmc7CivogJEgPCBzcGVjaWFsaXplZDsKK+e+liA8IGFcLWJsYWNrXC1yYW07CivnjY7lrbjph5EgPCBzY2hvbGFyc2hpcDsKK+e9sSA8IGZpc2hpbmdcLW5ldDsKK+a7sumAjyA8IHRvXC1wZXJtZWF0ZTsKK+e9oCA8IGFuaW1hbFwtdHJhcDsKK+e9kiA8IHJhZGljYWxcLTEyMjsKK+WBt+iBvSA8IHRvXC1ldmVzZHJvcDsKK+WHuuWFtSA8IHNlbmRcLXRyb29wczsKK+WfueWcnyA8IHRvXC1lYXJ0aFwtdXA7CivplovmiLAgPCBzdGFydFwtYVwtd2FyOwor5YiG5L2IIDwgZGlzdHJpYnV0ZWQ7Civov7fkurogPCBmYXNjaW5hdGluZzsKK+S4jeWLleeUoiA8IHJlYWxcLWVzdGF0ZTsKK+ezoiA8IHJpY2VcLXNuYWNrczsKK+WHuuS+hiA8IHRvXC1jb21lXC1vdXQ7Civkv6HpgZMgPCBzaWduYWxcLXBhdGg7CivllZ/npLrpjIQgPCByZXZlbGF0aW9uczsKK+ewuSA8IHRhbGxcLWJhbWJvbzsKK+ewtSA8IGZpbmVcLWJhbWJvbzsKK+ewsCA8IGJhbWJvb1wtcmFmdDsKK+mtlOazlSA8IGVuY2hhbnRtZW50Owor55Sz6KuLIDwgYXBwbHlcLVwoZm9yXCk7CivnrKzkuInmlrkgPCB0aGlyZFwtcGFydHk7CivnrakgPCBiYW1ib29cLXBpcGU7CivnrYogPCBiYW1ib29cLXJvcGU7CivnrYcgPCBiYW1ib29cLW5hbWU7Civot5Hou4ogPCByYWNpbmdcLWJpa2U7CivnrK8gPCBhXC1iaXJkXC1jYWdlOwor6KGo6JKZ5a2QIDwgd2F0Y2hcLWdsYXNzOwor5pO65p625a2QIDwgcHV0XC1vblwtYWlyczsKK+equCA8IGZhaW50XC1zb3VuZDsKK+S4jeeiuuWumiA8IHVuY2VydGFpbnR5Owor5YWr5bm0IDwgZWlnaHRcLXllYXJzOwor56m1IDwgZGVlcFwtaG9sbG93Owor6LaF57Sa5biC5aC0IDwgc3VwZXJtYXJrZXQ7Civno7kgPCBzdG9uZVwtd2VkZ2U7CivnopQgPCBcLzJcLXByXC1zdG9uZTsKK+exjOasviA8IGZ1bmRyYWlzaW5nOwor5Z+f5ZCNIDwgZG9tYWluXC1uYW1lOwor56CDIDwgd2hpdGVcLXN0b25lOwor5561IDwgdG9cLXN0YXJlXC1hdDsKK+WPpOWFuOa0viA8IGNsYXNzaWNpc3RzOwor5YWr5a2XIDwgY2hhcmFjdGVyXC04Owor55u45Ly8IDwgdG9cLXJlc2VtYmxlOwor5oyq55SoIDwgdG9cLWVtYmV6emxlOwor5Y+v6KGM5oCnIDwgZmVhc2liaWxpdHk7CivnnKUgPCBleWVcLXNvY2tldHM7CivnnJEgPCBzdW5rZW5cLWV5ZXM7CivnnIogPCBkaW1cLXNpZ2h0ZWQ7CivnmJogPCB0b1wtaGljY291Z2g7Civnl7MgPCBwb2NrXC1tYXJrZWQ7Civnl60gPCBtZW5vcnJoYWdpYTsKK+eXgyA8IGluZGlnZXN0aW9uOwor6KOd5omuIDwgZHJlc3NcLXVwXC1hczsKK+WfjuWNgCA8IGNpdHlcLXByb3BlcjsKK+a6nemAmiA8IGNvbW11bmljYXRlOwor54K65LqGIDwgaW5cLW9yZGVyXC10bzsKK+eZveWuriA8IHdoaXRlXC1ob3VzZTsKK+WQiOazleWMliA8IHRvXC1sZWdhbGl6ZTsKK+WGoOWGlSA8IHJveWFsXC1jcm93bjsKK+ePvSA8IGphZGVcLXRhYmxldDsKK+WDj+aooyA8IHByZXNlbnRhYmxlOwor5ben5ZCIIDwgY29pbmNpZGVuY2U7Civni6IgPCBhbmltYWxcLW5hbWU7CivmiLDou4ogPCB3YXJcLWNoYXJpb3Q7CivmjqLnhafnh4ggPCBzZWFyY2hsaWdodDsKK+WuieWvp+eJhyA8IG1lcHJvYmFtYXRlOwor55m95aScIDwgd2hpdGVcLW5pZ2h0Owor5piv5LiN5pivIDwgaXNcLW9yXC1pc24nJ3Q7CivoirHlupcgPCBmbG93ZXJcLXNob3A7Civkvr/opr0gPCBicmllZlwtZ3VpZGU7Civnh5YgPCByZWhlYXRcLWZvb2Q7CivoiIrniYggPCBvbGRcLXZlcnNpb247CivlpJrlt6XlmaggPCBtdWx0aXBsZXhlcjsKK+eFnyA8IGJyaWdodFwtcm9vbTsKK+eFjyA8IGRyeVwtYnlcLWZpcmU7CivnhYYgPCByYWdpbmdcLWZpcmU7Civlm6DmraQgPCB0aGF0XC1pc1wtd2h5Owor5r2+IDwgY2xlYXJcLXdhdGVyOwor5Yue5YuV5YqbIDwgbGFib3JcLWZvcmNlOwor6Kqe6KiA5a24IDwgbGluZ3Vpc3RpY3M7CivmvaAgPCB0b1wtYmxvd1wtb3V0Owor5ru3IDwgdGhpY2tcLWdyYXZ5Owor5YiG5pyf5LuY5qy+IDwgaW5zdGFsbG1lbnQ7CivnkZ7pm6ogPCB0aW1lbHlcLXNub3c7CivmuJ8gPCBub3RcLWZsb3dpbmc7CivlhazlhYMgPCBcKHllYXJcKVwtYVwuZFwuOwor5rWhIDwgYnVyc3RcLWZvcnRoOwor5bm46YGL5YWSIDwgYVwtbHVja3lcLWd1eTsKK+aysCA8IHRvXC1sZXRcLWRyb3A7CivoibLmg4UgPCBwb3Jub2dyYXBoeTsKK+acrOizquS4iiA8IGVzc2VudGlhbGx5Owor5Zyw5LiL5rC0IDwgZ3JvdW5kd2F0ZXI7CivnlLPoq4vmm7ggPCBhcHBsaWNhdGlvbjsKK+ausCA8IGFuXC1hYm9ydGlvbjsKK+eZveWIgyA8IG5ha2VkXC1zd29yZDsKK+eZvOWHuiA8IHRvXC1zZW5kXC1vdXQ7CivmlZnogrLmgKcgPCBpbnN0cnVjdGl2ZTsKK+WwseiBtyA8IHRha2VcLW9mZmljZTsKK+e5vOaJv+asiiA8IGluaGVyaXRhbmNlOwor5qeiIDwgYVwtaGFyZFwtd29vZDsKK+aLlOeHnyA8IHN0cmlrZVwtY2FtcDsKK+aKiuepqSA8IHRydXN0d29ydGh5Owor5qKYIDwgYmFtYm9vXC10dWJlOwor5qKWIDwgYVwtcGFsbVwtdHJlZTsKK+aihCA8IGFcLXNvZnRcLXdvb2Q7CivkuJbnlYzosr/mmJMgPCB3b3JsZFwtdHJhZGU7CivoiJLmnI0gPCBjb21mb3J0YWJsZTsKK+aYnCA8IHRvXC1vcGVuXC1vdXQ7CivmmIkgPCBicmlnaHRcLWRhd247Civml4kgPCB0b1wtc3RhdGVcLXRvOwor5omL57qMIDwgZm9ybWFsaXRpZXM7CivmjInmnJ8gPCBvblwtc2NoZWR1bGU7CivmkY4gPCB0b1wtc3RyYW5nbGU7CivmlZflrrblrZAgPCBzcGVuZHRocmlmdDsKK+i4qeawtCA8IHRyZWFkXC13YXRlcjsKK+Wuo+iogCA8IGRlY2xhcmF0aW9uOwor6I6O5aOr5q+U5LqeIDwgc2hha2VzcGVhcmU7CivlsYDpmZDmgKcgPCBsaW1pdGF0aW9uczsKK+aFiSA8IHRvXC1icmluZ1wtdXA7CivllK7osqjlk6EgPCBzYWxlc3BlcnNvbjsKK+WPr+WwiuaVrCA8IHJlc3BlY3RhYmxlOwor5YG35oe2IDwgdG9cLWdvb2ZcLW9mZjsKK+m8u+mfsyA8IG5hc2FsXC1zb3VuZDsKK+mdnuaVuOWtlyA8IG5vblwtbnVtZXJpYzsKK+W+uyA8IGFcLXdpZGVcLXJvb207Civlm7DlooMgPCBwcmVkaWNhbWVudDsKK+eIhuexs+iKsSA8IHB1ZmZlZFwtcmljZTsKK+S4ieWNgeWkqSA8IHRoaXJ0eVwtZGF5czsKK+a7sua/viA8IHBlcmNvbGF0aW9uOwor5bywIDwgZW5kc1wtb2ZcLWJvdzsKK+Wbm+WIhuS5i+S4gCA8IG9uZVwtcXVhcnRlcjsKK+eXheWuuSA8IHNpY2tseVwtbG9vazsKK+aIkOe4viA8IHBlcmZvcm1hbmNlOwor5Lq66ZaTIDwgbWFuJydzXC13b3JsZDsKK+err+ermSA8IGVuZFwtc3RhdGlvbjsKK+iMheWxi+mggiA8IHRoYXRjaFwtcm9vZjsKK+ihjeWwhCA8IGRpZmZyYWN0aW9uOwor5bSqIDwgcm9ja3lcLXBlYWtzOwor5Zue5aCxIDwgXChpblwpXC1yZXR1cm47CivkuInljYHlm5sgPCB0aGlydHlcLWZvdXI7CivlsbAgPCBkaXNvYmVkaWVudDsKK+WxnSA8IHN0cmF3XC1zaG9lczsKK+WwnCA8IGFcLWNoaWxkXC10b3k7CivlmajlrpjmjZDnjbvogIUgPCBvcmdhblwtZG9ub3I7CivoqIrmoYblgrPpgIEgPCBmcmFtZVwtcmVsYXk7CivmgKfkvLTkvrYgPCBzZXhcLXBhcnRuZXI7CivlrJQgPCBiYWJ5XC1yYWJiaXQ7CivmiJbnqLEgPCBhbHNvXC1jYWxsZWQ7CivkubPnmb3oibIgPCBtaWxreVwtd2hpdGU7Civnlavmj5LlnJbogIUgPCBpbGx1c3RyYXRvcjsKK+esrOS6jOasoeS4lueVjOWkp+aIsCA8IHdvcmxkXC13YXJcLTI7Civpq5jlo5MgPCBoaWdoXC1oYW5kZWQ7Civlob8gPCBzbWFsbFwtbW91bmQ7Civku7Loo4EgPCBhcmJpdHJhdGlvbjsKK+WgiiA8IHdoaXRlXC1lYXJ0aDsKK+WenSA8IGRpbGFwaWRhdGVkOwor5Z6UIDwgdG9cLXJlc3RyYWluOwor5YC85b6XIDwgdG9cLWJlXC13b3J0aDsKK+eVsOW4uCA8IGV4Y2VwdGlvbmFsOwor6ZG95a2UIDwgYm9yZVwtYVwtaG9sZTsKK+iTi+eEtuaApyA8IHByb2JhYmlsaXR5Owor5paH5Lu25pyN5YuZ5ZmoIDwgZmlsZVwtc2VydmVyOwor55W25bGAIDwgYXV0aG9yaXRpZXM7Civllo4gPCBhXC13cnlcLW1vdXRoOwor6auY5ZSxIDwgc2luZ1wtbG91ZGx5Owor6LaK5Y2X5oiw54itIDwgdmlldG5hbVwtd2FyOwor5ZS5IDwgdG9cLXNtaWxlXC1hdDsKK+S7i+ipniA8IHByZXBvc2l0aW9uOwor5Y+v6IO95oCnIDwgcG9zc2liaWxpdHk7CivlkoUgPCB0b1wtc3BpdFwtb3V0Owor6Iie5YqHIDwgZGFuY2VcLWRyYW1hOwor5Y+7IDwgcGxhY2VcLW5hbWVzOwor5Y6+IDwgbGlnaHRseVwtdGFwOwor5YKR5Ye6IDwgaWxsdXN0cmlvdXM7CivnlobloLQgPCBiYXR0bGVmaWVsZDsKK+eZu+WxseWutiA8IG1vdW50YWluZWVyOwor5L+h5pyNIDwgdG9cLWNvbnZpbmNlOwor5YyvIDwgYVwtY29uY291cnNlOwor5YugIDwgam9pblwtZm9yY2VzOwor54Sh5omA5LiN5ZyoIDwgb21uaXByZXNlbnQ7CivlirwgPCBiZVwtZGlzY3JlZXQ7CivohL7msKMgPCB0ZW1wZXJhbWVudDsKK+S4jeWHuuaJgOaWmSA8IGFzXC1leHBlY3RlZDsKK+S4ium9kiA8IHVwcGVyXC10ZWV0aDsKK+aFsOiXiSA8IGNvbnNvbGF0aW9uOwor5YmmIDwgdG9cLWNhc3RyYXRlOwor5p2/6KaPIDwgcGxhdGVcLWdhdWdlOwor5YepIDwgd2ludHJ5XC13aW5kOwor55eF5Lq6IDwgc2lja1wtcGVyc29uOwor6ZGS5a6aIDwgdG9cLWFwcHJhaXNlOwor5LiW55WM5ZKM5bmzIDwgd29ybGRcLXBpZWNlOwor5YKZ5Lu2IDwgc3BhcmVcLXBhcnRzOwor5ZOy5a245a62IDwgcGhpbG9zb3BoZXI7CivnlJ/miJAgPCBiZVwtcHJvZHVjZWQ7Civkvr/mobYgPCBjaGFtYmVyXC1wb3Q7Civlgo8gPCB0b1wtd2FyZFwtb2ZmOwor6ISr5rCnIDwgZGVveGlkYXRpb247Civmg4XpoZggPCB3aWxsaW5nbmVzczsKK+eUn+aFiyA8IHdheVwtb2ZcLWxpZmU7CivmjIflh7ogPCB0b1wtaW5kaWNhdGU7Civkv5sgPCBtYWtlXC1lZmZvcnQ7Civns7vliJfniYcgPCBmaWxtXC1zZXJpZXM7CivpmL/lr4zmsZcgPCBhZmdoYW5pc3RhbjsKK+S9uSA8IGRlcGVuZFwtdXBvbjsKK+a0m+adieejryA8IGxvc1wtYW5nZWxlczsKK+aJgeahgyA8IGFsbW9uZFwtdHJlZTsKK+i3i+aJiCA8IGRvbWluZWVyaW5nOwor5LaqIDwgc2hhcnBcLXRlZXRoOwor6Zmw5ra86JmVIDwgc2hhZHlcLXBsYWNlOwor5L+u5b6pIDwgcmVzdG9yYXRpb247CivktbQgPCBibGFja1wtY29sb3I7CivktbMgPCBsaWdodFwtYmxhY2s7CivktakgPCBkYXJrXC15ZWxsb3c7CivnrYblv4MgPCBwZW5jaWxcLWxlYWQ7CivksrsgPCB0aGVcLXN3YWxsb3c7Civkv6Hmga8gPCBpbmZvcm1hdGlvbjsKK+SxvSA8IHRoZVwtcG9tZnJldDsKK+SxuiA8IGFcLW1hbGVcLWNyYWI7CivksZIgPCBzYWx0ZWRcLWZpc2g7CivovYnkvobovYnljrsgPCByb3ZlXC1hcm91bmQ7CivkuI3poacgPCBpblwtc3BpdGVcLW9mOwor5K6YIDwgeW91bmdcLWhvcnNlOwor56uL5rOVIDwgbGVnaXNsYXRpb247CivlsI3mlrkgPCBjb3VudGVycGFydDsKK+epuueZvSA8IGJsYW5rXC1zcGFjZTsKK+eUt+WlsyA8IG1hbGVcLWZlbWFsZTsKK+SrsyA8IGh1bWFuXC1za3VsbDsKK+SrsCA8IHNwYXJzZVwtaGFpcjsKK+SrrSA8IGJhbGRcLWhlYWRlZDsKK+mHnemLkuebuOWwjSA8IHRpdFwtZm9yXC10YXQ7Civkq4QgPCBiZXR0ZXJcLXRoYW47CivkqrQgPCB0aGVcLW9jY2lwdXQ7CivkvLjnuK7mgKcgPCBmbGV4aWJpbGl0eTsKK+SqhCA8IGdyZWF0XC1ibGF6ZTsKK+SpuyA8IHRvXC1iZVwtY2hpZWY7CivkqZwgPCBkZXNjZW5kYW50czsKK+mWieacg+eliOemsSA8IGJlbmVkaWN0aW9uOwor5KixIDwgc3BpbHRcLXdhdGVyOwor5KeTIDwgYVwtYmlnXC1tb3VuZDsKK+SmtyA8IHRvXC1zdHJ1Z2dsZTsKK+eVtuWBmiA8IHRvXC10cmVhdFwtYXM7CivkppggPCBhXC10aHJlc2hvbGQ7CivplonlhYPpn7MgPCBjbG9zZVwtdm93ZWw7CivkpYAgPCB0b1wtcHVsbFwtb3V0Owor5KStIDwgdG9cLW9ybmFtZW50Owor5KSFIDwgc291dGhlcndvb2Q7Civot5vlrZAgPCBsYW1lXC1wZXJzb247CivkuI3lj6/kvLDph48gPCBpbmVzdGltYWJsZTsKK+S6lOiQrCA8IDUwXC10aG91c2FuZDsKK+SgnSA8IHRvXC1zdGFuZFwtdXA7CivkoI0gPCBhdFwtdGhlXC1mZWV0Owor5pyA5aSn5YyWIDwgdG9cLW1heGltaXplOwor5J+FIDwgdG9cLWdvXC1haGVhZDsKK+SfgSA8IGFcLWZvb3RcLXJhY2U7Civknr0gPCB0b1wtbGllXC1mbGF0Owor5J6oIDwgaGFsZlwtYVwtcGFjZTsKK+SehCA8IHRvXC1kaXNwZXJzZTsKK+SdgCA8IGdhcmRlblwtcGVhczsKK+ScsCA8IGRlZXBcLXZhbGxleTsKK+S/neWtmCA8IHRvXC1jb25zZXJ2ZTsKK+SclyA8IGFuZ3J5XC13b3JkczsKK+SchiA8IGhhc3R5XC13b3JkczsKK+SbmCA8IHRvXC10aGlua1wtb2Y7CivkmrMgPCBkb1wtbm90XC1rbm93Owor5JqyIDwgdG9cLWxhdWdoXC1hdDsKK+a3mOelniA8IHRyb3VibGVzb21lOwor5Jm+IDwgdG9cLXdhaXRcLWZvcjsKK+SZsSA8IGFcLWxvbmdcLWNvYXQ7CivkmbAgPCBuZXdcLWZlYXRoZXI7CivkmYIgPCBzaG9ydFwtcGFudHM7CivnrYbloqggPCBwZW5cLWFuZFwtaW5rOwor5JeWIDwgdGhlXC1yYWluYm93Owor6JaR6aSFIDwgZ2luZ2VyYnJlYWQ7CivnrKzljYHkuIMgPCBzZXZlbnRlZW50aDsKK+SVuCA8IHdoZWF0XC1zdHJhdzsKK+a6q+W6piA8IHRlbXBlcmF0dXJlOwor5JS/IDwgbHVzaFwtZ3Jvd3RoOwor6LeR5aOYIDwgYmFzZXJ1bm5pbmc7CivplovmlL7ns7vntbEgPCBvcGVuXC1zeXN0ZW07CivonJzmoYMgPCBob25leVwtcGVhY2g7CivpkZLkuo4gPCBpblwtbGlnaHRcLW9mOwor5JKLIDwgYWlyXC1jdXJyZW50Owor5Y+v6amaIDwgYXN0b25pc2hpbmc7CivmnInpmZDlhazlj7ggPCBjb3Jwb3JhdGlvbjsKK+epuumWk+aOoua4rCA8IHNwYWNlXC1wcm9iZTsKK+SQmiA8IGdvb2RcLWdyYWNlczsKK+SPtiA8IHRoZVwtc3RvbWFjaDsKK+SPlCA8IHRvXC1lYXRcLW1lYXQ7Civkvr/lrpwgPCBpbmV4cGVuc2l2ZTsKK+WTsuWtuOS4iiA8IHBoaWxvc29waGljOwor5ZCm5pyJ5pWIIDwgaW5lZmZpY2llbnQ7CivkuI3ov60gPCBjYW5ub3RcLWNvcGU7CivljJfmnJ3prq4gPCBub3J0aFwta29yZWE7CivkjKogPCB0b1wtY29udGludWU7CivkjKYgPCBncmVlblwtY29sb3I7CivlkInniL7lkInmlq/mlq/lnaYgPCBraXJnaGl6c3RhbjsKK+aJi+WvqyA8IGhhbmR3cml0aW5nOwor5IqtIDwgdG9cLW92ZXJ0dXJuOwor5IqrIDwgY29hcnNlXC1yaWNlOwor5IqiIDwgdGhpY2tcLWZsdWlkOwor5IqTIDwgdG9cLXBhc3RlXC11cDsKK+S4i+i8iSA8IHRvXC1kb3dubG9hZDsKK+SJnSA8IGJhbWJvb1wtd2FyZTsKK+SIuCA8IGFcLWJpZ1wtY2hlc3Q7CivouI/kuIogPCBzZXRcLWZvb3RcLW9uOwor5IazIDwgZmFyXC1kaXN0YW50Owor5IaYIDwgYWN1cHVuY3R1cmU7CivkhpYgPCBhXC1iaWdcLWhvdXNlOwor5IWEIDwgbG9uZ1wtZ3JhaW5zOwor5IS9IDwgY29tbW9uXC1yaWNlOwor5IOtIDwgYVwtc3RvbmVcLWJveDsKK+eSsOW9oiA8IHJpbmdcLXNoYXBlZDsKK+SCsSA8IHRvXC13ZWFyXC1vdXQ7CivkgpMgPCByZWd1bGF0aW9uczsKK+SBuyA8IHByZXR0eVwtZXllczsKK+SBtyA8IGJyaWdodFwtZXllczsKK+SBsSA8IGhvbGxvd1wtZXllZDsKK+S9iOaZryA8IFwoc3RhZ2VcKVwtc2V0Owor5ICCIDwgYVwtYmlnXC1iYXNpbjsKK+WfuuekjuWVj+mhjCA8IGJhc2ljXC1pc3N1ZTsKK+O/oyA8IHdoaXRlXC1jb2xvcjsKK+O/mCA8IHRvXC1nZXRcLXNpY2s7CivjvrogPCBleWVcLWRpc2Vhc2U7Civjvp0gPCB0b1wtbGVha1wtb3V0Owor6ai35YuVIDwgZGlzdHVyYmFuY2U7CivjvoggPCBodW5jaGJhY2tlZDsKK+O+gyA8IGh1bXBcLWJhY2tlZDsKK+O9qiA8IHBhZGR5XC1maWVsZDsKK+aCsuingCA8IHBlc3NpbWlzdGljOwor5Y+j6aaZ57OWIDwgY2hld2luZ1wtZ3VtOwor47yYIDwgb2ZcLW1vdW50YWluOwor47yTIDwgbWVsb25cLXNlZWRzOwor6KW/5LmD5bGxIDwgbW91bnRcLXNpbmFpOwor47uTIDwgYVwtZmluZVwtamFkZTsKK+e+juiyjCA8IGdvb2Rsb29raW5nOwor6bq76JelIDwgYW5hZXN0aGV0aWM7CivjuaAgPCBhXC1zbWFsbFwtYmlnOwor6YKB6Zi/5a+G54GYIDwgbWlhbWlcLWJlYWNoOwor47igIDwgdGhpY2tcLXN0aWNrOwor5bCP5Z6LIDwgc21hbGxcLXNjYWxlOwor47WkIDwgdG9cLW92ZXJmbG93Owor47SYIDwgdG9cLW9vemVcLW91dDsKK+mHkeWxrOadvyA8IG1ldGFsXC1wbGF0ZTsKK+OysCA8IGFcLWhhaXJ5XC1kb2c7CivjsLIgPCB0b1wtYmxvd1wtb2ZmOwor46+IIDwgc21hbGxcLXRyZWVzOwor6aGM6KmeIDwgaW5zY3JpcHRpb247Civjrp0gPCBhbmdsZVwtc3RlZWw7CivjrbQgPCB0aGVcLW9zY2luZXM7CivjrY4gPCBhXC10YWxsXC10cmVlOwor6Laj5ZGzIDwgdG9cLWludGVyZXN0Owor5L+h5LuwIDwgZmlybVwtYmVsaWVmOwor46ypIDwgYVwtdGlueVwtc3RhcjsKK+iCoeadsSA8IHN0b2NraG9sZGVyOwor6Y6u5aOTIDwgc3VwcHJlc3Npb247Civjq5ggPCBkaXNhcHBlYXJlZDsKK+adv+eJmSA8IGZyb250XC10b290aDsKK+azs+iksiA8IHN3aW1cLXRydW5rczsKK+WQjOizqiA8IGhvbW9nZW5lb3VzOwor46mFIDwgdG9cLWRyYXdcLW91dDsKK+WFqeeZvuiQrCA8IHR3b1wtbWlsbGlvbjsKK+OotSA8IHRvXC1jdXRcLWF3YXk7CivjqLQgPCB0b1wtdHVybm92ZXI7CivjqJUgPCB0b1wtc2hvdWxkZXI7CivnkrDlooMgPCBlbnZpcm9ubWVudDsKK+OnlCA8IHRvXC1kaXN0dXJiZTsKK+S/rueQhuW7oCA8IHJlcGFpclwtc2hvcDsKK+OmkiA8IHRvXC1kZWNlaXZlZDsKK+OkoSA8IHRvXC1zdXJwcmlzZTsKK+OklSA8IG1lbGFuY2hvbG95Owor46SBIDwgdG9cLWRpc2dyYWNlOwor46O+IDwgZG9cLW5vdFwtY2FyZTsKK+OjtSA8IHRvXC1ydW5cLWF3YXk7Civjo6UgPCB0b1wtc3RvcmVcLXVwOwor46KTIDwgdG9cLXNlcGFyYXRlOwor5p6c5rGBIDwgZnJ1aXRcLWp1aWNlOwor6ICV55WcIDwgZmFybVwtYW5pbWFsOwor5aKe6ZW3546HIDwgZ3Jvd3RoXC1yYXRlOwor6YeN6L+UIDwgcmV0dXJuXC1cKHRvXCk7CivkuJ/oh4kgPCBodW1pbGlhdGlvbjsKK+OdtCA8IGFcLXJvdW5kXC1vZmY7CivjnZQgPCBkZWVwXC1ib3R0b207CivmiJHlnIsgPCBvdXJcLWNvdW50cnk7CivjnKMgPCBhXC1sYXN0XC1uYW1lOwor45yOIDwgc2xhdmVcLWdpcmxzOwor45uRIDwgdGhyZWVcLXdvbWVuOwor45q+IDwgdG9cLWhhdmVcLWZ1bjsKK+eOu+aEj+iAs+WumuW+iyA8IGJveWxlJydzXC1sYXc7CivjmLYgPCBhXC1oZW5cLXJvb3N0Owor6Lqr5b+D54i95b+rIDwgcmVmcmVzaG1lbnQ7CivjmKUgPCB0b1wtaW52ZWlnbGU7CivkvYjlsYAgPCBhcnJhbmdlbWVudDsKK+S7luWAkemDvSA8IGFsbFwtb2ZcLXRoZW07CivororpgJogPCBiZVwtZmxleGlibGU7CivpvLvmtpUgPCBuYXNhbFwtbXVjdXM7Civjlr0gPCB0b1wtY2FsbFwtb3V0Owor6LK45qy+IDwgXChiYW5rXClcLWxvYW47CivjlpEgPCB0b1wtc2hvdXRcLWF0Owor45S8IDwgdG9cLWZpdFwtaW50bzsKK+OUtiA8IGFcLXNtYWxsXC1jdXA7CivjlI8gPCB0b1wtY3V0XC1vcGVuOwor45OpIDwgaG9ybmVkXC1oYWlyOwor5rqW5YKZIDwgcHJlcGFyYXRpb247CivjkqggPCBhblwtaW1tb3J0YWw7CivlronlurcgPCBnb29kXC1oZWFsdGg7CivpoJDoqIggPCB0b1wtZm9yZWNhc3Q7Civnpa3lj7jmrIrooZMgPCBwcmllc3RjcmFmdDsKK+mhnuS8vOm7niA8IHJlc2VtYmxhbmNlOwor6YeP6KmeIDwgbWVhdXJlXC13b3JkOwor6ZuZ5Lq65oi/IDwgZG91YmxlXC1yb29tOwor5ZCN6JGXIDwgbWFzdGVycGllY2U7Civnvo7ooZPppKggPCBhcnRcLWdhbGxlcnk7Civku7vmhI8gPCBhcmJpdHJhcmlseTsKK+WuieWutiA8IHNldHRsZVwtZG93bjsKK+mlkuaBlSA8IGZvcmdpdmVuZXNzOwor5a6H5a6ZIDwgb3V0ZXJcLXNwYWNlOwor55Ge5aOrIDwgc3dpdHplcmxhbmQ7CivlnKjpgJnmnJ/plpMgPCBkdXJpbmdcLXRpbWU7Civlloflj60gPCBsb3Vkc3BlYWtlcjsKK+e0hOS8r+iomCA8IGJvb2tcLW9mXC1qb2I7CivnhKHms5Xlv43lj5cgPCBpbnRvbGVyYWJsZTsKK+aCsuWWnOWKhyA8IHRyYWdpY29tZWR5Owor6aeB5YCSIDwgZGVtb2xpc2hcLXNiOwor5Y2K5bCB5bu6IDwgc2VtaVwtZmV1ZGFsOwor5rW05rGgIDwgcHVibGljXC1iYXRoOwor5Y+N5YuV5YiG5a2QIDwgcmVhY3Rpb25hcnk7Civlr6bos6rmgKcgPCBzdWJzdGFudGl2ZTsKK+iuiuWjk+WZqCA8IHRyYW5zZm9ybWVyOwor5L2/55So5pa55L6/IDwgZWFzeVwtdG9cLXVzZTsKK+WllOmmsyA8IHJ1blwtcXVpY2tseTsKK+ePvuW5tCA8IGN1cnJlbnRcLWFnZTsKK+eEoeazleW9ouWuuSA8IHVuc3BlYWthYmxlOwor6JiL5p6c5rGBIDwgYXBwbGVcLWp1aWNlOwor56S656+EIDwgZGVtb25zdHJhdGU7CivkuqTmj5sgPCB0b1wtZXhjaGFuZ2U7Civol6XniakgPCBtZWRpY2FtZW50czsKK+acieWQjOaDheW/gyA8IHN5bXBhdGhldGljOwor5pqX6KiY5YWSIDwgc2VjcmV0XC1tYXJrOwor6YSZ6ZmLIDwgc3VwZXJmaWNpYWw7CivlpJzptq8gPCBuaWdodGluZ2FsZTsKK+mkkOW7syA8IGRpbmluZ1wtaGFsbDsKK+WogeiEhSA8IHRvXC10aHJlYXRlbjsKK+epuuWJjSA8IHVucHJlY2VkZW50Owor6aCQ57SEIDwgcmVzZXJ2YXRpb247CivnorDoposgPCB0b1wtcnVuXC1pbnRvOwor5p+l5Ye6IDwgdG9cLWZpbmRcLW91dDsKK+WNiumCiiA8IGhhbGZcLW9mXC1zdGg7CivmmpfnpLogPCBkcm9wXC1hXC1oaW50Owor5Lqk5b6AIDwgYXNzb2NpYXRpb247CivphY3pgIHogIUgPCBkaXN0cmlidXRvcjsKK+abuOazlSA8IGNhbGxpZ3JhcGh5Owor6YeR6YqA6IqxIDwgaG9uZXlzdWNrbGU7CivlhYPogIHpmaIgPCB1cHBlclwtaG91c2U7CivljZPotoogPCBkaXN0aW5jdGlvbjsKK+iCoeWDuSA8IHN0b2NrXC1wcmljZTsKK+S5neaciCA8IG5pbnRoXC1tb250aDsKK+S4u+asiiA8IHNvdmVyZWlnbnR5Owor5Y+v5oOz5YOPIDwgY29uY2VpdmFibGU7CivlpJrppJggPCBzdXBlcmZsdW91czsKK+iBveWPliA8IGhlYXJcLVwobmV3c1wpOwor5oSf5oCnIDwgc2Vuc2liaWxpdHk7CivllYbkurogPCBidXNpbmVzc21hbjsKK+emgeatoiA8IHRvXC1wcm9oaWJpdDsKK+enieaJvyA8IHRha2VcLW9yZGVyczsKK+WUruWDuSA8IHRvXC1zZWxsXC1mb3I7CivlrIzlqpogPCBmbGlydGF0aW91czsKK+mggeeivCA8IHBhZ2VcLW51bWJlcjsKK+S6pOWqviA8IHRvXC1oYXZlXC1zZXg7CivkuIrmtYEgPCB1cHBlclwtY2xhc3M7Civkv6HnlKjljaEgPCBjcmVkaXRcLWNhcmQ7CivpnLjpgZMgPCBvdmVyYmVhcmluZzsKK+azoueAviA8IGdyZWF0XC13YXZlczsKK+S4jeatoiA8IGluY2Vzc2FudGx5Owor54it6K2wIDwgY29udHJvdmVyc3k7CivkuK3mnbEgPCBtaWRkbGVcLWVhc3Q7CivlpbPnrqHlrrYgPCBob3VzZWtlZXBlcjsKK+S4gOWNg+Wbm+eZvuWEhCA8IDE0MFwtYmlsbGlvbjsKK+S4ueaWuSA8IGZvbGtcLXJlbWVkeTsKK+mHjeeWiiA8IG92ZXJsYXBwaW5nOwor5Lit5pelIDwgY2hpbmFcLWphcGFuOwor6Ieq55Sx6YG45pOH5qyKIDwgZnJlZVwtYWdlbmN5Owor5Zac5q2h5ZC15p62IDwgcXVhcnJlbHNvbWU7CivmnInlrrPnmoQgPCBkZXN0cnVjdGl2ZTsKK+mHjeePviA8IHRvXC1yZWFwcGVhcjsKK+aooeeziumCj+i8ryA8IGZ1enp5XC1sb2dpYzsKK+mdtuiIuSA8IHRhcmdldFwtc2hpcDsKK+WNg+iQrCA8IHRlblwtbWlsbGlvbjsKK+S4gOaciCA8IGZpcnN0XC1tb250aDsKK+eKr+eXhSA8IHRvXC1mYWxsXC1pbGw7CivlkIzmraUgPCBzeW5jaHJvbm91czsKK+WTuuS5syA8IGJyZWFzdFwtZmVlZDsKK+S4u+W8tSA8IHRvXC1hZHZvY2F0ZTsKK+WpmuacnyA8IHdlZGRpbmdcLWRheTsKK+aal+auuiA8IGFzc2Fzc2luYXRlOwor5Li75bitIDwgY2hhaXJwZXJzb247CivljbHnr6QgPCBkZWF0aGx5XC1pbGw7CivkupLli5UgPCBpbnRlcmFjdGl2ZTsKK+WkqeeEtuawoyA8IG5hdHVyYWxcLWdhczsKK+S+m+ihgOiAhSA8IGJsb29kXC1kb25vcjsKK+S4reW5tCA8IG1pZGRsZVwtYWdlZDsKK+eHn+mkiuWTgSA8IG5vdXJpc2htZW50Owor6LKd5LiYIDwgc2hlbGxcLW1vdW5kOwor5oSP5ZCRIDwgZGlzcG9zaXRpb247Civpganmh4nmgKcgPCBzdWl0YWJpbGl0eTsKK+ayiOa+sSA8IHByZWNpcGl0YXRlOwor5aSp5paH5Y+wIDwgb2JzZXJ2YXRvcnk7Civpkb/nn7PloLQgPCByb2NrXC1xdWFycnk7CivlsLHvuY3ogIzoqIAgPCBjb25zaWRlcmluZzsKK+S4ieW5tCA8IHRocmVlXC15ZWFyczsKK/ChvbEgPCBhXC1oaWdoXC1oaWxsOwor5LiK5bGkIDwgdXBwZXJcLWxheWVyOwor5aOv6KeAIDwgc3BlY3RhY3VsYXI7CivmnInpgbjoiInmrIogPCBjb25zdGl0dWVudDsKK+aUv+iuiiA8IGNvdXBcLWQnJ2V0YXQ7CivnpZ7lrbggPCB0aGVvbG9naWNhbDsKK+a4rOmpl+e1kOaenCA8IHRlc3RcLXJlc3VsdDsKK+WQiOW9sSA8IGpvaW50XC1waG90bzsKK+WmgueVqyA8IHBpY3R1cmVzcXVlOwor5LiN5aCqIDwgY2Fubm90XC1iZWFyOwor57WC6bueIDwgZGVzdGluYXRpb247CivniIbnq7kgPCBmaXJlY3JhY2tlcjsKK+euoeWutuiBt+WLmSA8IHN0ZXdhcmRzaGlwOwor5bCP5rG96LuKIDwgY29tcGFjdFwtY2FyOwor54m55qyKIDwgcHJlcm9nYXRpdmU7CivonrrntbLliIAgPCBzY3Jld2RyaXZlcjsKK+eLl+S6pOWqvuiIrCA8IGRvZ2d5XC1zdHlsZTsKK+WIhumboiA8IHRvXC1zZXBlcmF0ZTsKK+WJr+S9nOeUqCA8IHNpZGVcLWVmZmVjdDsKK+emgeS7pCA8IHByb2hpYml0aW9uOwor5LiN5YWNIDwgdW5hdm9pZGFibGU7CivoqpPntIQgPCBob25vclwtYm91bmQ7CivorYnmm7ggPCBjcmVkZW50aWFsczsKK+ayiOaAnSA8IGNvbnRlbXBsYXRlOwor6Kej6YeLIDwgZXhwbGFuYXRpb247CivnpIHls7YgPCByZWVmXC1pc2xhbmQ7Civmpq7njbLoq77osp3niL7njY4gPCBub2JlbFwtcHJpemU7CivkuozljYHlhIQgPCB0d29cLWJpbGxpb247Civov47poqggPCBpblwtdGhlXC13aW5kOwor56e75qSN5oCnIDwgcG9ydGFiaWxpdHk7CivlpoLmraQgPCBpblwtdGhpc1wtd2F5Owor5oKg5LmFIDwgZXN0YWJsaXNoZWQ7CivlsIjmnInlkI3oqZ4gPCBwcm9wZXJcLW5vdW47CivkuIrkuIsgPCB1cFwtYW5kXC1kb3duOwor5LqM5Y2B5LqUIDwgdHdlbnR5XC1maXZlOwor5pyL5q+U54K65aW4IDwgdG9cLWNvbnNwaXJlOwor5pCs5byE5piv6Z2eIDwgc293XC1kaXNjb3JkOwor55qEIDwgcG9zc2Vzc2l2ZTsKK+i+vCA8IGNyb3dkXC1pbnRvOwor6L67IDwgY3Jvc3Nyb2FkczsKK+iDvSA8IHRvXC1iZVwtYWJsZTsKK+mDvSA8IG1ldHJvcG9saXM7CivmlocgPCBsaXRlcmF0dXJlOwor6L2NIDwgd2Fnb25cLXJ1dHM7CivovKkgPCBnZW5lcmF0aW9uOwor55ypIDwgdG9cLWNvbmZ1c2U7CivnnKAgPCBjbG9zZVwtZXllczsKK+i8nSA8IGJyaWdodG5lc3M7CivlvJAgPCBudW1iZXJcLXR3bzsKK+iAhSA8IHRoYXRcLXdoaWNoOwor5LiaIDwgcHJvZmVzc2lvbjsKK+W6nCA8IHByZWZlY3R1cmU7CivmlL8gPCBnb3Zlcm5tZW50Owor5LqnIDwgZ2l2ZVwtYmlydGg7CivlnLogPCBvcGVuXC1zcGFjZTsKK+avlCA8IHRvXC1jb21wYXJlOwor55ayIDwgZmVlbFwtdGlyZWQ7CivnlLsgPCBhXC1wYWludGluZzsKK+acmyA8IHRvXC1sb29rXC1hdDsKK+izuiA8IG1ha2VcLW1vbmV5Owor5YWtIDwgbnVtYmVyXC1zaXg7CivlsaEgPCBmcmVxdWVudGx5Owor5bCkIDwgZXNwZWNpYWxseTsKK+WwiCA8IG1vbm9wb2xpemU7Civln7ogPCBmb3VuZGF0aW9uOwor5Y+MIDwgc2V0XC1vZlwtdHdvOwor5a2rIDwgZ3JhbmRjaGlsZDsKK+WsqiA8IGNvdXJ0XC1sYWR5Owor56a7IDwgcmFyZVwtYmVhc3Q7CivlqpIgPCBnb1wtYmV0d2VlbjsKK+iqjCA8IHdyaXRlXC1kb3duOwor6KqHIDwgZXhhZ2dlcmF0ZTsKK+WTjSA8IG1ha2VcLXNvdW5kOwor5am/IDwgc29uXC1pblwtbGF3Owor54itIDwgdG9cLWRpc3B1dGU7CivlmaggPCByZWNlcHRhY2xlOwor54efIDwgZW5jYW1wbWVudDsKK+WmmSA8IG15c3RlcmlvdXM7Civog6EgPCByZWNrbGVzc2x5Owor5aaTIDwgcHJvc3RpdHV0ZTsKK+ilpiA8IHNob3J0XC1jb2F0Owor5aOxIDwgbnVtYmVyXC1vbmU7Civpg60gPCBvdXRlclwtcGFydDsKK+iuqCA8IHRvXC1kaXNjdXNzOwor5ruFIDwgZXh0aW5ndWlzaDsKK+iZnCA8IHRvXC1jYXB0dXJlOwor56evIDwgYWNjdW11bGF0ZTsKK+iPnCA8IHZlZ2V0YWJsZXM7Civll6MgPCB0b1wtY29ubmVjdDsKK+WXnCA8IGJlXC1mb25kXC1vZjsKK+S7iyA8IGZvcmVydW5uZXI7CivntKIgPCBsYXJnZVwtcm9wZTsKK+S4gSA8IG1hbGVcLWFkdWx0Owor6YGNIDwgZXZlcnl3aGVyZTsKK+iSlCA8IHRyYW5zcGxhbnQ7Civmh4IgPCB1bmRlcnN0YW5kOwor6YeKIDwgaW50ZXJwcmV0ZTsKK+e6tSA8IGluZHVsZ2VcLWluOwor5q20IDwgdGFrZVwtcGxhY2U7Civku4EgPCBodW1hbmVuZXNzOwor5qqAIDwgc2FuZGFsd29vZDsKK+WJiiA8IHNjcmFwZVwtb2ZmOwor5YiRIDwgcHVuaXNobWVudDsKK+WygiA8IGhvd1w/XC13aGF0XD87CivpmoYgPCBwcm9zcGVyb3VzOwor5YiDIDwgZWRnZWRcLXRvb2w7CivmnpAgPCBzcGxpdFwtd29vZDsKK+iFuCA8IGludGVzdGluZXM7CivmpZMgPCBtYXBsZVwtdHJlZTsKK+mkhSA8IHJpY2VcLWNha2VzOwor5YKNIDwgYnlcLXNpZGVcLW9mOwor5qCTIDwgd29vZGVuXC1wZWc7Civlh68gPCB0cml1bXBoYW50Owor5oGtIDwgcmVzcGVjdGZ1bDsKK+eluCA8IG1pc2ZvcnR1bmU7CivnpoUgPCBtZWRpdGF0aW9uOwor5p+vIDwgYXhlXC1oYW5kbGU7CivmjZAgPCBjb250cmlidXRlOwor6LiqIDwgZm9vdHByaW50czsKK+WxgSA8IGJyZWFrXC13aW5kOwor6LCKIDwgZnJpZW5kc2hpcDsKK+WCqCA8IHNhdmVcLW1vbmV5Owor6ZuBIDwgd2lsZFwtZ29vc2U7CivmkYogPCBzcHJlYWRcLW91dDsKK+WQqCA8IG1ldHJpY1wtdG9uOwor5LmNIDwgZmlyc3RcLXRpbWU7CivpmYAgPCBzdGVlcFwtYmFuazsKK+e2vyA8IGNvdHRvblwtd2FkOwor57axIDwgaGVhdnlcLXJvcGU7CivmipEgPCBwcmVzc1wtZG93bjsKK+W9rCA8IGN1bHRpdmF0ZWQ7Civmkq4gPCBsaXR0bGVcLWJpdDsKK+eypSA8IHJpY2VcLWdydWVsOwor6JuuIDwgYmFyYmFyaWFuczsKK+euuCA8IGNob3BzdGlja3M7CivnrbUgPCBiYW1ib29cLW1hdDsKK+iJhyA8IHNtYWxsXC1ib2F0Owor5o2MIDwgYnJlYWtcLW9wZW47CivnrKAgPCBiYW1ib29cLWhhdDsKK+W6niA8IGRpc29yZGVybHk7Civnq50gPCB0b1wtY29tYmluZTsKK+aJiSA8IGRvb3JcLXBhbmVsOwor5Z2dIDwgZW1iYW5rbWVudDsKK+aGpyA8IGlycmVzb2x1dGU7CivnlKkgPCB0aHJvd1wtYXdheTsKK+mFjCA8IHNlcnZlXC13aW5lOwor56OQIDwgbGFyZ2VcLXJvY2s7CivovoUgPCBjaGVla1wtYm9uZTsKK+aNoSA8IHRvXC1waWNrXC11cDsKK+i5iCA8IHN0YW1wXC1mZWV0Owor5pmSIDwgZHJ5XC1pblwtc3VuOwor5q28IDwgYW5uaWhpbGF0ZTsKK+a2qSA8IGFzdHJpbmdlbnQ7CivpnI4gPCBsaWdodFwtcmFpbjsKK+e7uCA8IHNpbGtcLWNsb3RoOwor55yvIDwgYmVcLWJsaW5kZWQ7Civlr4UgPCB0b1wtcmVzcGVjdDsKK+ectiA8IGV5ZVwtc29ja2V0Owor56KfIDwgc21hbGxcLWRpc2g7CivolbQgPCB0b1wtY29sbGVjdDsKK+i/rSA8IHJlcGVhdGVkbHk7Civml60gPCByaXNpbmdcLXN1bjsKK+aCjSA8IGNvdXJhZ2VvdXM7CivmnqIgPCBkb29yXC1oaW5nZTsKK+i3iyA8IGdvXC1ieVwtZm9vdDsKK+WcqiA8IFwocGhvbmV0aWNcKTsKK+aQlCA8IHRvXC1zY3JhdGNoOwor5ZqOIDwgY3J5XC1sb3VkbHk7CivmsZsgPCBoaWdoXC13YXRlcjsKK+iEryA8IGRyaWVkXC1tZWF0Owor5ZeSIDwgdG9cLWRlc3BhaXI7Civlop8gPCBoaWdoXC1tb3VuZDsKK+mmiyA8IGdsdXR0b25vdXM7Civoua0gPCB0b1wtc2h1ZmZsZTsKK+a+iCA8IHRob3JvdWdobHk7CivnvK0gPCB3aW5kXC1yb3VuZDsKK+WWsyA8IHdoaXNwZXJpbmc7CivlvKcgPCB3b29kZW5cLWJvdzsKK+aDhiA8IGRpc3RyZXNzZWQ7CivmkrUgPCBkcml2ZVwtYXdheTsKK+i9tiA8IHJ1c2hcLWZvcnRoOwor56q/IDwgbWluZVwtc2hhZnQ7CivmqLUgPCB3b29kY3V0dGVyOwor54qAIDwgcmhpbm9jZXJvczsKK+e7miA8IHZhcmllZ2F0ZWQ7Civol5UgPCBsb3R1c1wtcm9vdDsKK+aRniA8IHRvXC1waWxlXC11cDsKK+a7pCA8IHN0cmFpblwtb3V0Owor57yIIDwgaW5kaXN0aW5jdDsKK+iCqiA8IGFuaW1hbFwtZmF0Owor55SEIDwgdG9cLWV4YW1pbmU7Civpk5sgPCBmcnlpbmdcLXBhbjsKK+WroSA8IGxlZ2FsXC13aWZlOwor56O3IDwgcGhvc3Bob3J1czsKK+e/oSA8IGtpbmdmaXNoZXI7CivpnK0gPCBjbG91ZHlcLXNreTsKK+iIqyA8IGZhbmN5XC1ib2F0Owor57qoIDwgd2hpdGVcLXNpbGs7CivmprcgPCBmb290YnJpZGdlOwor6JSXIDwgc3VnYXJcLWNhbmU7CivlvZcgPCBicm9vbXN0aWNrOwor5ZafIDwgaGVhdmVcLXNpZ2g7CivllpEgPCB0b1wtYmVcLWR1bWI7Civpsb8gPCBjdXR0bGVmaXNoOwor5YCcIDwgcmFpc2VcLWhpZ2g7Civmu4IgPCB0b3JyZW50aWFsOwor5b+7IDwgZGVsaWdodGZ1bDsKK+eHpyA8IGZsaW50c3RvbmU7CivnqJQgPCByaXBlXC1ncmFpbjsKK+miiSA8IGZseVwtdXB3YXJkOwor6Ii4IDwgbGFyZ2VcLWJvYXQ7CivnnJkgPCB0b1wtZ2F6ZVwtYXQ7CivnmIAgPCBhXC1oZW1hdG9tYTsKK+WkryA8IGhlYXZ5XC1sb2FkOwor6bKgIDwgZmlzaFwtYm9uZXM7CivojI8gPCB0YWxsXC1ncmFzczsKK+iMryA8IGNoaW5hXC1yb290Owor6bKnIDwgZ2lhbnRcLWZpc2g7CivpgKYgPCBtZWFuZGVyaW5nOwor6aqcIDwgd2lsZFwtaG9yc2U7CivmrLkgPCBmaWVyY2VcLWRvZzsKK+e8myA8IGRlY29yYXRpdmU7Civoi5UgPCBydXNoXC1wbGFudDsKK+mhuCA8IGxhcmdlXC1mYWNlOwor57ymIDwgcGxhaW5cLXNpbGs7CivluJkgPCBib29rXC1jb3ZlcjsKK+mzgyA8IGZpc2hcLWdpbGxzOwor6Ya0IDwgc3dlZXRcLXdpbmU7CivovoogPCB0dXJuXC1yb3VuZDsKK+WymCA8IHN0ZWVwXC1oaWxsOwor5YCsIDwgbm90aWNlYWJsZTsKK+myniA8IGRyaWVkXC1maXNoOwor57yBIDwgYmxhY2tcLXNpbGs7CivnrqcgPCByYXR0YW5cLWJveDsKK+WigSA8IHRvXC1wbGFzdGVyOwor5720IDwgYnJvd25cLWJlYXI7CivniLAgPCBsZWFkXC1vblwtdG87CivmnbIgPCBicmlnaHRcLXN1bjsKK+eZlCA8IGh5c3RlcmljYWw7CivojpwgPCBhdmVuYVwtbnVkYTsKK+WfmSA8IGluc3RydW1lbnQ7Civnjb4gPCB0aGVcLWJhZGdlcjsKK+mDqyA8IHBsYWNlXC1uYW1lOwor6JuPIDwgcmF6b3JcLWNsYW07CivluJEgPCBhXC10cmVhc3VyeTsKK+aPoCA8IHRvXC1wdWxsXC11cDsKK+i2kSA8IGNhbicndFwtbW92ZTsKK+mYjSA8IGdhdGVrZWVwZXI7CivmjoogPCB0b1wtZXh0cmFjdDsKK+mVnSA8IGR5c3Byb3NpdW07CivnoJcgPCBnaWFudFwtY2xhbTsKK+WrqyA8IHVnbHlcLXdvbWFuOwor6LeXIDwgdGhlXC1pbnN0ZXA7CivmtbwgPCB0b1wtcmVxdWVzdDsKK+WXjCA8IHRoZVwtdGhyb2F0Owor5rGGIDwgdG9cLXBhcmJvaWw7CivliK0gPCBjdXRcLXRocm9hdDsKK+mrgiA8IHRoZVwtcGVsdmlzOwor6ZK8IDwgbW9seWJkZW51bTsKK+aGnSA8IHRvXC1kaXNsaWtlOwor54KFIDwgYnJpbGxpYW5jZTsKK+masyA8IHRvXC1kZXN0cm95Owor6IybIDwgcmFudW5jdWx1czsKK+ezhyA8IGRyaWVkXC1yaWNlOwor6ZKGIDwgZ2Fkb2xpbml1bTsKK+a+jCA8IHRvXC1leGhhdXN0Owor5bqAIDwgdG9cLXByZXBhcmU7CivnirQgPCBhXC13aWxkXC1kb2c7Civln48gPCBhXC1ib3VuZGFyeTsKK+iwriA8IHRvXC1zbGFuZGVyOwor57iu55+tIDwgdG9cLWN1cnRhaWw7CivmlLnntYQgPCByZW9yZ2FuaXplOwor5rKS5ZWP6aGMIDwgbm9cLXByb2JsZW07CivnrKzkupTpoZ4gPCBjYXRlZ29yeVwtNTsKK+aTgeittyA8IHRvXC1lbmRvcnNlOwor6YCy6KGMIDwgdG9cLWFkdmFuY2U7CivlpZTms6IgPCBydXNoXC1hYm91dDsKK+W+jOavjSA8IHN0ZXBtb3RoZXI7CivmlaPnmbwgPCBkaXN0cmlidXRlOwor5aSx54GrIDwgY2F0Y2hcLWZpcmU7CivoqpXnlJ8gPCB0b1wtYmVcLWJvcm47CivlpJrniL4gPCBcKGJvYlwpXC1kb2xlOwor5be05p6v5a+n5Li7576pIDwgYmFrdW5pbmlzbTsKK+W9vOatpCA8IGVhY2hcLW90aGVyOwor6aCQ5YWIIDwgYmVmb3JlaGFuZDsKK+mXnOmWgCA8IGNsb3NlXC1kb3duOwor6YGV6IOMIDwgdG9cLXZpb2xhdGU7CivlhrDmn5Pmn5PmlpkgPCBhem9pY1wtZHllczsKK+e1seioiCA8IHN0YXRpc3RpY3M7Civlh73os7wgPCBtYWlsXC1vcmRlcjsKK+WjgeeriyA8IFwob2ZcLWNsaWZmczsKK+aYpeWtoyA8IHNwcmluZ3RpbWU7CivpoJLkvYggPCBwcm9tdWxnYXRlOwor5q+P5qyhIDwgZXZlcnlcLXRpbWU7Civnt6jnqIsgPCB0b1wtcHJvZ3JhbTsKK+WIhuipniA8IHBhcnRpY2lwbGU7CivlvozmnJ8gPCBsYXRlXC1zdGFnZTsKK+aViOeUqCA8IHVzZWZ1bG5lc3M7Civns6fpo58gPCBmb29kc3R1ZmZzOwor6I2S6YeOIDwgd2lsZGVybmVzczsKK+aSkuisiiA8IHRlbGxcLWFcLWxpZTsKK+eHg+eHkiA8IGNvbWJ1c3Rpb247CivlvITnm7QgPCBzdHJhaWdodGVuOwor6YG356e7IDwgdG9cLW1pZ3JhdGU7CivpnZ7lrpjmlrkgPCB1bm9mZmljaWFsOwor5aSn5rCjIDwgYXRtb3NwaGVyZTsKK+iqjeeCuiA8IHRvXC1iZWxpZXZlOwor6ZmN6JC9IDwgdG9cLWRlc2NlbmQ7CivliY3ogIUgPCB0aGVcLWZvcm1lcjsKK+aViOeOhyA8IGVmZmljaWVuY3k7Civpnbblv4MgPCBidWxsJydzXC1leWU7CivlnIvmsJHpu6ggPCBrdW9taW50YW5nOwor5YuD54S2IDwgYWdpdGF0ZWRseTsKK+ism+W4qyA8IGluc3RydWN0b3I7Civlj5bku6MgPCBzdWJzdGl0dXRlOwor5paw5pWZIDwgcHJvdGVzdGFudDsKK+WkmuasoSA8IG1hbnlcLXRpbWVzOwor5aWH5pW4IDwgb2RkXC1udW1iZXI7Civlv4XlsIcgPCBpbmV2aXRhYmx5Owor6Zmw57K+IDwgc2V4XC1mbHVpZHM7Civnmb3oibLpq5QgPCBsZXVjb3BsYXN0Owor5aaW5ayIIDwgZW5jaGFudGluZzsKK+S4jeiAkOeFqSA8IGltcGF0aWVuY2U7Civnmb7liIbnjocgPCBwZXJjZW50YWdlOwor57m85om/IDwgdG9cLWluaGVyaXQ7Civku6TniYznkrAgPCB0b2tlblwtcmluZzsKK+aTjee4sSA8IHRvXC1vcGVyYXRlOwor5YWo6Z2iIDwgYWxsXC1hcm91bmQ7Civlm5vlgIvlsI/mmYIgPCBmb3VyXC1ob3VyczsKK+WOmOWNhyA8IGNlbnRpbGl0ZXI7Civoqr/mlbQgPCBhZGp1c3RtZW50Owor6I2S6KysIDwgcmlkaWN1bG91czsKK+iHqueZveabuCA8IGNvbmZlc3Npb247CivlsZXopr3mnIMgPCBleGhpYml0aW9uOwor55m96aCtIDwgaG9hcnlcLWhlYWQ7CivlpKnmloflrbjlrrYgPCBhc3Ryb25vbWVyOwor5rG65LiNIDwgbm90XC1hdFwtYWxsOwor6Kqq5piOIDwgdG9cLWV4cGxhaW47CivnnLzoirHnuZrkuoIgPCBiZVwtZGF6emxlZDsKK+mtr+S9m+eIvuWuriA8IHRoZVwtbG91dnJlOwor5Ye66ImyIDwgcmVtYXJrYWJsZTsKK+S4jeWgquW/jeWPlyA8IHVuYmVhcmFibGU7Civpq5jpgJ/njocgPCBoaWdoXC1zcGVlZDsKK+WFjemZpCA8IHRvXC1wcmV2ZW50Owor5aal5Y2UIDwgY29tcHJvbWlzZTsKK+W3qOi8qiA8IGxhcmdlXC1zaGlwOwor54Wn54mHIDwgcGhvdG9ncmFwaDsKK+mZhOethiA8IHBvc3RzY3JpcHQ7Civopqroh6ogPCBwZXJzb25hbGx5Owor6Kqq5LiN5Ye66Kmx5L6GIDwgc3BlZWNobGVzczsKK+Wom+aoguS4reW/gyA8IHJlY3JlYXRpb247CivmlLnmraMgPCB0b1wtY29ycmVjdDsKK+Wkp+WfjuW4giA8IG1ham9yXC1jaXR5Owor6Ieq55Sx6LK/5piTIDwgZnJlZVwtdHJhZGU7CivljYrlnJMgPCBzZW1pY2lyY2xlOwor54it5aWqIDwgZmlnaHRcLW92ZXI7Civnn63mnJ8gPCBzaG9ydFwtdGVybTsKK+avj+W5tCA8IGV2ZXJ5XC15ZWFyOwor5Zas5rK75pWmIDwgZ2VvcmdldG93bjsKK+S4ieWIhuS5i+S6jCA8IHR3b1wtdGhpcmRzOwor5YKz6YGT6ICFIDwgbWlzc2lvbmFyeTsKK+aVteaJiyA8IGFudGFnb25pc3Q7CivljbDlg48gPCBpbXByZXNzaW9uOwor5LiN5Y+v6IO9IDwgaW1wb3NzaWJsZTsKK+eyvumAmiA8IHByb2ZpY2llbnQ7CivlvojlpKcgPCB0cmVtZW5kb3VzOwor55m96YWSIDwgc3Bpcml0XC11c3U7CivpjITpn7PluLYgPCBhdWRpb1wtdGFwZTsKK+iNieiOkyA8IHN0cmF3YmVycnk7CivpjKvlronlsbEgPCBtb3VudFwtemlvbjsKK+WhlOWQieWFi+aWr+WdpiA8IHRhamlraXN0YW47CivloLHnq6AgPCBuZXdzcGFwZXJzOwor5aSa5bm0IDwgbWFueVwteWVhcnM7Civoqp7lvZkgPCB2b2NhYnVsYXJ5Owor5pep5YWIIDwgcHJldmlvdXNseTsKK+e4vee1seS7u+acnyA8IHByZXNpZGVuY3k7CivniYzlg7kgPCBsaXN0XC1wcmljZTsKK+W3q+ihkyA8IHdpdGNoY3JhZnQ7CivpgY7muKEgPCB0cmFuc2l0aW9uOwor5o6i6ZqqIDwgdG9cLWV4cGxvcmU7CivlpKflrbggPCB1bml2ZXJzaXR5Owor54Sh55CGIDwgaXJyYXRpb25hbDsKK+WNiuWDuSA8IGhhbGZcLXByaWNlOwor5Y2A5YilIDwgZGlmZmVyZW5jZTsKK+mXnOiBryA8IGJlXC1yZWxhdGVkOwor56Gs56OB55ukIDwgaGFyZFwtZHJpdmU7CivlnLDpnIcgPCBlYXJ0aHF1YWtlOwor6KeA55y+IDwgc3BlY3RhdG9yczsKK+aOkumaiiA8IHRvXC1saW5lXC11cDsKK+aUquaTviA8IHRvXC1kaXN0dXJiOwor5LiN5Y+v6YC+6LaKIDwgaW1wYXNzYWJsZTsKK+aVuOWtuCA8IG1hdGhlbWF0aWM7CivnhrHlv4MgPCBlbnRodXNpYXNtOwor5Yqg5Yip56aP5bC85LqeIDwgY2FsaWZvcm5pYTsKK+att+WPsuS4iiA8IGhpc3RvcmljYWw7CivoqJjluLPlk6EgPCBib29ra2VlcGVyOwor6Zu75a2QIDwgZWxlY3Ryb25pYzsKK+eZveipsSA8IHZlcm5hY3VsYXI7Civngrjns5UgPCBmcmllZFwtY2FrZTsKK+aVo+WwhCA8IHNjYXR0ZXJpbmc7Civok4vkuJYgPCB1bnJpdmVsbGVkOwor57eo5o6SIDwgdG9cLWFycmFuZ2U7CivmjZXprZogPCBjYXRjaFwtZmlzaDsKK+WFgeirviA8IHRvXC1wcm9taXNlOwor6Kq/5ZKMIDwgaGFybW9uaW91czsKK+W+jOS+hiA8IGFmdGVyd2FyZHM7Civkvb/lpLHmnJsgPCBkaXNhcHBvaW50Owor5aSn5ZacIDwgZXh1bHRhdGlvbjsKK+ioreaWvSA8IGZhY2lsaXRpZXM7Civmlrnkvr8gPCBjb252ZW5pZW50Owor5q2k5b6MIDwgYWZ0ZXJcLXRoaXM7CivluqfmqJkgPCBjb29yZGluYXRlOwor57aT5q23IDwgZXhwZXJpZW5jZTsKK+aoguingCA8IG9wdGltaXN0aWM7CivlpKrlj6QgPCBpbW1lbW9yaWFsOwor6Zui5amaIDwgdG9cLWRpdm9yY2U7CivmlZnloILlopPlnLAgPCBjaHVyY2h5YXJkOwor6b6iIDwgaW5cLWhhcm1vbnk7Civnh4jloZQgPCBsaWdodGhvdXNlOwor5Ye654mIIDwgdG9cLXB1Ymxpc2g7CivlhbXoiLkgPCBtYW5cLW9mXC13YXI7CivooYzmlL/plbflrpggPCBtYWdpc3RyYXRlOwor6bynIDwgdGhlXC1tYXJtb3Q7CivpvIQgPCB0aGVcLXNwaWRlcjsKK+m7uSA8IGVtYnJvaWRlcnk7Civpu7IgPCBncmV5XC1ibGFjazsKK+m7pCA8IGJsdWVcLWJsYWNrOwor5YK36aKoIDwgY2F0Y2hcLWNvbGQ7CivmlL7lsIQgPCB0b1wtcmFkaWF0ZTsKK+avlOS+iyA8IHByb3BvcnRpb247CivpuLogPCBob3JuZWRcLW93bDsKK+maqOW+jCA8IHNvb25cLWFmdGVyOwor5YmN5pmvIDwgZm9yZWdyb3VuZDsKK+mBt+W7tiA8IGxvbmdcLWRlbGF5Owor6KOc6KqeIDwgY29tcGxlbWVudDsKK+m1kiA8IG15bmFoXC1iaXJkOwor6bS3IDwgd29vZHBlY2tlcjsKK+WKoOWvhiA8IHRvXC1lbmNyeXB0Owor5pW05ZCIIDwgdG9cLWNvbmZvcm07Civmib/ljIXkurogPCBjb250cmFjdG9yOwor6YGV5oqXIDwgdG9cLWRpc29iZXk7Civnm6PnnaMgPCB0b1wtY29udHJvbDsKK+mzsiA8IHR1cnRsZWRvdmU7CivmloflhbcgPCBzdGF0aW9uZXJ5Owor5q+P5Lq6IDwgcGVyXC1wZXJzb247Civnianos6rkuIogPCBtYXRlcmlhbGx5Owor6bKwIDwgc21hbGxcLWZpc2g7CivpmLLmsLQgPCB3YXRlcnByb29mOwor6bGHIDwgYW5nbGVyZmlzaDsKK+iytOaXj+irluiAhSA8IGFyaXN0b2NyYXQ7CivljYrlhazplosgPCBzZW1pXC1vdmVydDsKK+S9v+WFjemZpCA8IGdldFwtcmlkXC1vZjsKK+abtOiho+WupCA8IGNoYW5nZXJvb207CivproEgPCB0aGVcLWJvbml0bzsKK+mAgOatpSA8IGRlZ2VuZXJhdGU7CivpganluqYgPCBtb2RlcmF0ZWx5Owor6a2bIDwgdGhlXC1tdWxsZXQ7CivpgaDlvoEgPCBleHBlZGl0aW9uOwor6ayoIDwgYm9pc3Rlcm91czsKK+msnCA8IHRvXC1nb1wtYmFsZDsKK+eZveiHiSA8IHdoaXRlXC1mYWNlOwor57i95YWxIDwgYWx0b2dldGhlcjsKK+mroyA8IHNpbWlsYXJcLXRvOwor6auBIDwgdGhpZ2hcLWJvbmU7Civop6PmnpAgPCB0b1wtYW5hbHl6ZTsKK+molyA8IHRvXC1zd2luZGxlOwor6aiLIDwgdGFsbFwtaG9yc2U7CivpqIkgPCBmaW5lXC1ob3JzZTsKK+mnsCA8IGdyZXlcLWhvcnNlOwor6aa5IDwgcG9zdFwtaG9yc2U7CivoqablnJYgPCB0b1wtYXR0ZW1wdDsKK+iJpui8iSA8IHNoaXBcLWJhc2VkOwor55+l5ZCNIDwgd2VsbFwta25vd247CivlpJrkuosgPCBtZWRkbGVzb21lOwor5Yaw55CDIDwgaWNlXC1ob2NrZXk7Civop6PmlL4gPCBsaWJlcmF0aW9uOwor6Z6hIDwgbGVnXC13YXJtZXI7CivpnZ0gPCB0aGVcLWhlYXZlbjsKK+WBvemggiA8IGZhbHNlXC1yb29mOwor6auY6ZqOIDwgaGlnaFwtbGV2ZWw7CivmjY/pgKAgPCB0b1wtbWFrZVwtdXA7Civpmq4gPCB0aVwtcmlzZVwtdXA7CivpmbsgPCBzbWFsbFwtaGlsbDsKK+aWsOiBnuiomOiAhSA8IGpvdXJuYWxpc3Q7Civmk4HmirEgPCB0b1wtZW1icmFjZTsKK+mbtuS4iyA8IGJlbG93XC16ZXJvOwor6ZefIDwgcGVhY2VmdWxseTsKK+meremXouWFpeijoSA8IHBlbmV0cmF0ZWQ7CivotoXlqpLpq5QgPCBoeXBlcm1lZGlhOwor6ZWaIDwgc21hbGxcLWNvaW47CivplKwgPCBsb25nXC1zcGVhcjsKK+S4jeaYjueiuiA8IGluZGVmaW5pdGU7CivpkrcgPCBwcm9tZXRoaXVtOwor5pS+5Ye6IDwgdG9cLWxldFwtb2ZmOwor6ZC2IDwgbWV0YWxcLXJpbmc7CivpkJogPCBzb2Z0XC1zdGVlbDsKK+WFrOefsyA8IGhlY3RvbGl0ZXI7CivpkJIgPCBsYXdyZW5jaXVtOwor6ZCAIDwgYVwtY3VwYm9hcmQ7CivkuI3mma/msKMgPCBkZXByZXNzaW9uOwor5LuW5YCR6Ieq5bexIDwgdGhlbXNlbHZlczsKK+izh+acrOWutiA8IGNhcGl0YWxpc3Q7CivpjqogPCB0b1wtZW5ncmF2ZTsKK+mOmyA8IGxhcmdlXC1iZWxsOwor5aCx5pW4IDwgbnVtYmVyXC1vZmY7CivpjYAgPCB0ZWNobmV0aXVtOwor5pS25YWlIDwgdG9cLXRha2VcLWluOwor6Kme5YW4IDwgZGljdGlvbmFyeTsKK+ioreWcqCA8IGxvY2F0ZWRcLWF0Owor6ZmQ5bqmIDwgbGltaXRhdGlvbjsKK+ijseeziiA8IHdhbGxcLXBhcGVyOwor6YiKIDwgY2Fkb2xpbml1bTsKK+mGoSA8IHdpbmVcLXByZXNzOwor6YadIDwgd2hpdGVcLXdpbmU7CivmqqLmn6UgPCBpbnNwZWN0aW9uOwor6YWFIDwgcmFpc2VcLWZlZXQ7CivpmL/loZ7mi5znloYgPCBhemVyYmFpamFuOwor54CG6IG3IDwgd3Jvbmdkb2luZzsKK+W6h+W7lSA8IFwob2ZcLWFcLXRyZWU7CivkuozmiYvosqggPCBzZWNvbmRoYW5kOwor6Zmw5aSpIDwgY2xvdWR5XC1kYXk7CivntYLmlrwgPCBldmVudHVhbGx5Owor6KiC5amaIDwgZW5nYWdlbWVudDsKK+mZuOWfuiA8IGxhbmRcLWJhc2VkOwor6YKP6Lyv54K45b2IIDwgbG9naWNcLWJvbWI7Civlu5rlj7ggPCBjb29rXCxcLWNoZWY7CivlgrPoqqogPCBpdFwtaXNcLXNhaWQ7CivliLblrpogPCB0b1wtZHJhd1wtdXA7CivmmJPmjqXov5EgPCBhY2Nlc3NpYmxlOwor6YCsIDwgdG9cLXNjYXR0ZXI7CivpgJ/lsIQgPCByYXBpZFwtZmlyZTsKK+mBuuWCsyA8IGhlcmVkaXRhcnk7CivoiInovqYgPCB0b1wtY29uZHVjdDsKK+WIqeWusyA8IGZvcm1pZGFibGU7CivouqkgPCB0YWtlXC1xdWljazsKK+WFpeeNhCA8IGdvXC10b1wtamFpbDsKK+exs+eyiSA8IHJpY2VcLWZsb3VyOwor5ZyW6Kej6Kqq5piOIDwgaWxsdXN0cmF0ZTsKK+S4jeWxiOS4jeaSkyA8IHVueWllbGRpbmc7CivouKcgPCB1bmVhc2luZXNzOwor6LicIDwgdG9cLXN0dW1ibGU7CivouJYgPCB0cmFtcGxlXC1vbjsKK+i+suadkSA8IHJ1cmFsXC1hcmVhOwor5oOz5YOP5YqbIDwgY29uY2VwdGlvbjsKK+i3kCA8IHRvXC10cmFtcGxlOwor5Ymv5YiKIDwgc3VwcGxlbWVudDsKK+acieaxuuW/gyA8IGRldGVybWluZWQ7CivmqYTmrJbmqLkgPCBvbGl2ZVwtdHJlZTsKK+aTjeWgtCA8IHBsYXlncm91bmQ7Civln7rmlrwgPCBiZWNhdXNlXC1vZjsKK+ihjeiuiiA8IHRvXC1kZXZlbG9wOwor5YWo54S2IDwgY29tcGxldGVseTsKK+Wkp+iFpuatu+S6oSA8IGJyYWluXC1kZWFkOwor5ZyY6IGaIDwgdG9cLXJldW5pdGU7CivosYAgPCB0b1wtcXVhcnJlbDsKK+eIreirlum7niA8IGNvbnRlbnRpb247Civnmb3ni5AgPCBhcmN0aWNcLWZveDsKK+aTgeWhniA8IGNvbmdlc3Rpb247CivoqI7ljq0gPCBkaXNndXN0aW5nOwor6KyqIDwgdG9cLWNvbnN1bHQ7Civnmb3nhr4gPCB3aGl0ZVwtaGVhdDsKK+ikh+mbnOaApyA8IGNvbXBsZXhpdHk7Civnmb3nhoogPCBwb2xhclwtYmVhcjsKK+eZveeFpCA8IGFudGhyYWNpdGU7CivlgJrpnaAgPCB0b1wtbGVhblwtb247CivlubzlpbMgPCB5b3VuZ1wtZ2lybDsKK+ingOWvnyA8IHRvXC1vYnNlcnZlOwor5L2/55So6ICF5Lit5LuLIDwgdXNlclwtYWdlbnQ7CivlhbXms5UgPCBhcnRcLW9mXC13YXI7CivnlbbpgbggPCBiZVwtZWxlY3RlZDsKK+imuCA8IHN0ZWFsXC1sb29rOwor55uj5o6nIDwgdG9cLW1vbml0b3I7CivntZDlsYAgPCBjb25jbHVzaW9uOwor6KOqIDwgdGhlXC1zbGVldmU7CivmrKDkvbMgPCBzdWJvcHRpbWFsOwor6YCx5YiwIDwgdGhvdWdodGZ1bDsKK+imj+W+iyA8IGRpc2NpcGxpbmU7Civon6sgPCBzaWx2ZXJmaXNoOwor6J+jIDwgbG91c2VcLWVnZ3M7CivnrqHovYQgPCBhZG1pbmlzdGVyOwor6J+BIDwgYVwtbW9zcXVpdG87Civog6HmgJ3kuoLmg7MgPCBpbWFnaW5pbmdzOwor5aW254mb5aC0IDwgZGFpcnlcLWZhcm07CivmqLnmqIEgPCB0cmVlXC1zdHVtcDsKK+ilr+aJmCA8IHRvXC1zZXRcLW9mZjsKK+ibnCA8IHdvb2RcLWxvdXNlOwor5pON5YW4IDwgZHJpbGxcLWJvb2s7Civot5HppqwgPCBob3JzZVwtcmFjZTsKK+iWpyA8IGRyaWVkXC1mb29kOwor5qqi5a+fIDwgdG9cLWluc3BlY3Q7CivolaEgPCBoZW1wXC1zZWVkczsKK+W3qOaYnyA8IGdpYW50XC1zdGFyOwor5a2X56+A5pW4IDwgYnl0ZVwtY291bnQ7Civok7cgPCBtb3RoZXJ3b3J0Owor6ZmE5YqgIDwgYWRkaXRpb25hbDsKK+iSvSA8IGFudGhyYWNlbmU7CivokqYgPCB0b1wtbWVhc3VyZTsKK+iSliA8IHBsYW50XC1uYW1lOwor5LiA5YiH5LqL54mpIDwgZXZlcnl0aGluZzsKK+iRryA8IG9ycmlzXC1yb290Owor5q2M576F6KW/5pu4IDwgY29sb3NzaWFuczsKK+ebuOWwjSA8IHJlbGF0aXZlbHk7CivnhKHlg7kgPCBpbnZhbHVhYmxlOwor5pCP5paXIDwgdG9cLXdyZXN0bGU7CivojbUgPCBwb2xlbW9uaXVtOwor5Ye655Sf5ZywIDwgYmlydGhwbGFjZTsKK+S4jeeUseiHquS4uyA8IGNhbicndFwtaGVscDsKK+aLnOiolyA8IHJlcXVlc3RcLXNiOwor5o6S55CDIDwgdm9sbGV5YmFsbDsKK+W6l+S4uyA8IHNob3BcLW93bmVyOwor5LiN5LiL5LqOIDwgYXNcLW1hbnlcLWFzOwor55O26aC4IDwgYm90dGxlbmVjazsKK+W5q+WKqSA8IGFzc2lzdGFuY2U7CivohKogPCBlcnlzaXBlbGFzOwor6ISXIDwgY29pbmNpZGluZzsKK+W5q+WHtiA8IGFjY29tcGxpY2U7Civlhazmkq4gPCBtaWxsaWxpdGVyOwor6IKmIDwgbGFyZ2VcLWhlYWQ7CivnsYPnkIMgPCBiYXNrZXRiYWxsOwor5oqx6LKgIDwgYXNwaXJhdGlvbjsKK+abvOW+ueaWr+eJuSA8IG1hbmNoZXN0ZXI7CivkvL3ppqzlsITnt5ogPCBnYW1tYVwtcmF5czsKK+Wkp+WqkumrlCA8IG1hY3JvbWVkaWE7CivnrpfooZMgPCBhcml0aG1ldGljOwor5o6o5risIDwgY29uamVjdHVyZTsKK+imgeWhniA8IHN0cm9uZ2hvbGQ7Civnmb3ml5cgPCB3aGl0ZVwtZmxhZzsKK+a7v+i2syA8IHRvXC1zYXRpc2Z5Owor6amF6YCQIDwgYmFuaXNobWVudDsKK+alteeCuum+kOWkpyA8IG1vbnVtZW50YWw7CivnuZAgPCBmaW5lXC1jbG90aDsKK+WCmeW/mOmMhCA8IG1lbW9yYW5kdW07CivnuIcgPCBkZWNvcmF0aW9uOwor6KGo56S6IDwgdG9cLWV4cHJlc3M7CivmjKjlgIvlhZIgPCBvbmVcLWJ5XC1vbmU7CivovrLlnJIgPCBwbGFudGF0aW9uOwor5YWE5byf5pyDIDwgZnJhdGVybml0eTsKK+eVmeiBsuapnyA8IGdyYW1vcGhvbmU7CivntbogPCBmaW5lXC1saW5lbjsKK+acieWIqeWPr+WcliA8IHByb2ZpdGFibGU7CivntZsgPCBzaWxrXC1icmFpZDsKK+e1liA8IGZpbmVcLXNpbGtzOwor57WTIDwgb2JzdHJ1Y3RlZDsKK+aKleizhyA8IGludmVzdG1lbnQ7CivnsrsgPCBwcm92aXNpb25zOwor54Sh5omA5LiN6IO9IDwgb21uaXBvdGVudDsKK+eci+WIsCA8IHNlZVwtXCh0aGF0XCk7Civmj5DmmIcgPCB0b1wtcHJvbW90ZTsKK+WTiOiWqeWFi+aWr+WdpiA8IGthemFraHN0YW47CivnsKUgPCBsYXJnZVwtcGlwZTsKK+WIhumbouS4u+e+qSA8IHNlcGFyYXRpc207CivlhYzmj5sgPCB0b1wtY29udmVydDsKK+S4lueVjOmKgOihjCA8IHdvcmxkXC1iYW5rOwor6buR6I6T5a2QIDwgYmxhY2tiZXJyeTsKK+eviyA8IHJhdHRvblwtYm94Owor566gIDwgaG9yc2VcLXdoaXA7CivnrpogPCBicmllZlwtbm90ZTsKK+WFrOW8lSA8IGhlY3RvbWV0ZXI7CivnqrAgPCBicmlja1wta2lsbjsKK+WwiOmWgCA8IHNwZWNpYWxpc3Q7Civnqa0gPCB3aWxkXC1ncmFpbjsKK+eci+S+hiA8IGFwcGFyZW50bHk7Civoh4noibIgPCBjb21wbGV4aW9uOwor6I2J5Y+iIDwgdW5kZXJicnVzaDsKK+WFvOWuuSA8IGNvbXBhdGlibGU7CivlnKjkuIvpnaIgPCB1bmRlcm5lYXRoOwor56WFIDwgY2FsYW1pdGllczsKK+S4jeiuiuWMliA8IGludmFyaWFibHk7Civou43muK8gPCBuYXZhbFwtcG9ydDsKK+aMieeriyA8IG9yZGluYXRpb247CivnlJ/oqIggPCBsaXZlbGlob29kOwor56ORIDwgc3RvbmVcLW1pbGw7Civmjozmq4MgPCBzaG9wa2VlcGVyOwor6KGo54++IDwgZXhwcmVzc2lvbjsKK+WFqeWyuCA8IGJpbGF0ZXJpYWw7CivnoYMgPCBhXC1yZWRcLW1vbGU7CivlhbHlrZggPCB0b1wtY29leGlzdDsKK+ednyA8IGNsZWFyXC1leWVkOwor5Zua54qvIDwgYVwtcHJpc29uZXI7CivlgYnnuL4gPCBncmVhdFwtYWN0czsKK+ihjeeUnyA8IGRlcnZpYXRpdmU7CivlhrDliIAgPCBpY2VcLXNrYXRlczsKK+aOpeaUtiA8IHRvXC1yZWNlaXZlOwor5oqA6KGTIDwgdGVjaG5vbG9neTsKK+eWlSA8IGhlYWRcLXNvcmVzOwor55WTIDwgcmljZVwtZmllbGQ7CivnlYEgPCB0b1wtZ2l2ZVwtdG87Civlrr/poYwgPCBhc3NpZ25tZW50Owor6ZmM55Sf5Lq6IDwgYVwtc3RyYW5nZXI7CivnjpQgPCBncmVlblwtamFkZTsKK+mtmuaOkiA8IGZpc2hcLXN0ZWFrOwor54Sh5omA5LiN55+lIDwgb21uaXNjaWVudDsKK+aMh+eUsiA8IGZpbmdlcm5haWw7CivplovmnIPnpYjnprEgPCBpbnZvY2F0aW9uOwor5a246b2hIDwgc2Nob29sXC1hZ2U7CivnipsgPCBhXC1ibGFja1wtb3g7CivkuI3pgannlbYgPCBpbmFkZXF1YXRlOwor5o2o5qOEIDwgdG9cLWdpdmVcLXVwOwor6Zu76KaW6Ie6IDwgdHZcLXN0YXRpb247CivniY8gPCBwcml2eVwtaG9sZTsKK+eIqyA8IHJhZGljYWxcLTg3Owor5L2/6YaJIDwgaW50b3hpY2F0ZTsKK+aLmOemgSA8IGNvbnN0cmFpbnQ7CivnhoUgPCBzbW9vdGhcLW91dDsKK+Wci+acgyA8IHBhcmxpYW1lbnQ7CivpoJjlsI7og73lipsgPCBsZWFkZXJzaGlwOwor6LaF6LaKIDwgdG9cLXN1cnBhc3M7CivngbogPCBjYW5kbGVcLWVuZDsKK+eBkiA8IHRvXC1zcGF0dGVyOwor5o6o5bujIDwgcG9wdWxhcml6ZTsKK+S4u+WKm+iJpiA8IGJhdHRsZXNoaXA7Civmv5kgPCB0b1wtcmV2b2x2ZTsKK+a/hiA8IHJpdmVyXC1iYW5rOwor5L2j6YeRIDwgY29tbWlzc2lvbjsKK+eZveWWiSA8IGRpcGh0aGVyaWE7CivmjojmhI8gPCB0b1wtaW5zcGlyZTsKK+WFrOWIhiA8IGNlbnRpbWV0ZXI7CivnrYbogIUgPCB0aGVcLWF1dGhvcjsKK+azhiA8IGxpY2VudGlvdXM7Civkv53ogrIgPCBjaGlsZFwtY2FyZTsKK+eZveWNgCA8IHdoaXRlXC1hcmVhOwor5o+55YK1IDwgYmVcLWluXC1kZWJ0Owor5ryr55WrIDwgY2FyaWNhdHVyZTsKK+ihjOS4jemAmiA8IHdvbicndFwtd29yazsKK+WBnOeBqyA8IGNlYXNlXC1maXJlOwor56u254it6ICFIDwgY29tcGV0aXRvcjsKK+iJr+W/gyA8IGNvbnNjaWVuY2U7Civmq74gPCB0aGVcLXBvbWVsbzsKK+WWruiqvyA8IG1vbm90b25vdXM7CivmqrwgPCByaWRnZVwtcG9sZTsKK+ihqOaYjiA8IG1ha2VcLWtub3duOwor5pyJ57O757WxIDwgc3lzdGVtYXRpYzsKK+aykuS6uuS9jyA8IHVub2NjdXBpZWQ7CivmprwgPCB3aW5lXC1nbGFzczsKK+ampiA8IHRyZWVcLXRydW5rOwor5YuV54mp5a24IDwgem9vbG9naWNhbDsKK+aktSA8IHBvbXBlbG1vdXM7CivmpLMgPCB0aGVcLXBpdm90czsKK+aooeS7vyA8IHRvXC1pbWl0YXRlOwor5oSP6KaL5LiN5ZCIIDwgZGlzc2Vuc2lvbjsKK+ebp+ajruWgoSA8IGx1eGVtYm91cmc7CivnmbzkvYggPCB0b1wtcmVsZWFzZTsKK+esrOS4g+WNgSA8IHNldmVudGlldGg7CivmoJsgPCB0aGVcLWxpY2hlZTsKK+agmCA8IGZydWl0XC10cmVlOwor5qKd57SEIDwgdHJlYXR5cGFjdDsKK+WwjuiIqiA8IG5hdmlnYXRpb247CivmjpLlpJYgPCB4ZW5vcGhvYmljOwor5bCO6Ie0IDwgdG9cLWxlYWRcLXRvOwor5bGV56S6IDwgdG9cLW9wZW5cLXVwOwor5Yaw5Yed5ZmoIDwgY3J5b3Bob3J1czsKK+Wwi+iIiyA8IHRvXC1wcm92b2tlOwor5p2iIDwgd29vZHdvcmtlcjsKK+WFiOS+iyA8IGFudGVjZWRlbnQ7Civos5PppKggPCBndWVzdGhvdXNlOwor5qiT5LiLIDwgZG93bnN0YWlyczsKK+aWoiA8IHRvXC1wbHVuZGVyOwor5omT57WQIDwgdGllXC1hXC1rbm90Owor5a2f5Yqg5ouJ5ZyLIDwgYmFuZ2xhZGVzaDsKK+iHhua4rCA8IGFzc3VtcHRpb247Civlv4PnkIblrbggPCBwc3ljaG9sb2d5Owor5pOqIDwgdG9cLXR1Y2tcLWluOwor5pKxIDwgdG9cLXNob3J0ZW47CivmsKPllpjllpggPCBicmVhdGhsZXNzOwor5ouU5rKzIDwgdHVnXC1vZlwtd2FyOwor56ys5LiA5L6LIDwgZmlyc3RcLWNhc2U7CivnlJ/nlKIgPCB0b1wtcHJvZHVjZTsKK+ijnOWEnyA8IGNvbXBlbnNhdGU7CivmjrEgPCBwaWNrcG9ja2V0Owor5o6OIDwgZHJhZ1wtYXNpZGU7Civkurrpq5QgPCBodW1hblwtYm9keTsKK+iDnuihoyA8IGFmdGVyYmlydGg7CivmjJbmjpggPCBleGNhdmF0aW9uOwor5Zub5bm0IDwgZm91clwteWVhcnM7Civnmb7liIbkuYvkuZ3ljYEgPCA5MFwtcGVyY2VudDsKK+aJoSA8IGRyYWdcLWFsb25nOwor6aSQ6aSoIDwgcmVzdGF1cmFudDsKK+iBlumdiCA8IGhvbHlcLWdob3N0Owor5oa4IDwgdG9cLWZsYXR0ZXI7CivmjIfmjqcgPCBhY2N1c2F0aW9uOwor5oaNIDwgYmVcLWhhdWdodHk7CivmhoAgPCB0b1wtcmVseVwtb247CivlvJXkurrms6jmhI8gPCBhdHRyYWN0aXZlOwor5omL56i/IDwgbWFudXNjcmlwdDsKK+aKueayuSA8IHRvXC1hbm5vaW50Owor5oSTIDwgcHJvZmxpZ2F0ZTsKK+ihqOWwuiA8IHJlYXJcLXNpZ2h0Owor5oOPIDwgYXZhcmljaW91czsKK+aRqeWkqeaRnyA8IHNreXNjcmFwZXI7CivnlaLmpa0gPCBncmFkdWF0aW9uOwor5oGbIDwgZGlzb3JkZXJlZDsKK+WbuuWftyA8IHBlcnNpc3RlbnQ7CivmgLIgPCBiZVwtYW54aW91czsKK+W9vyA8IHJlc2VtYmxpbmc7Civmn6XoqaIgPCB0b1wtaW5xdWlyZTsKK+W8hyA8IGNvdmVyXC1vdmVyOwor5buAIDwgdG9cLWNvbmNlYWw7Civlv5jmganosqDnvqkgPCB1bmdyYXRlZnVsOwor55aR5oWuIDwgaGVzaXRhdGlvbjsKK+WWieiIjCA8IG1vdXRocGllY2U7Civoga/pgJogPCBjb25uZWN0aW9uOwor5b6X5LiN5YiwIDwgY2Fubm90XC1nZXQ7Civpp5DntK4gPCB0b1wtc3RhdGlvbjsKK+ewveWHuiA8IHRvXC1sb2dcLW9mZjsKK+WxhCA8IHRoZVwtdmFnaW5hOwor6YeN6KaB5oCnIDwgaW1wb3J0YW5jZTsKK+mkhemQuiA8IGJha2luZ1wtcGFuOwor5a68IDwgdHlyYW5uaWNhbDsKK+aKgOihk+WToSA8IHRlY2huaWNpYW47CivpjpfnrqEgPCBndW5cLWJhcnJlbDsKK+WqnyA8IGx1c3RcLWFmdGVyOwor6ZC15p2/IDwgaXJvblwtcGFuZWw7Civpj4jnkrAgPCBjaGFpblwtbGluazsKK+ebuOWQjOWQjeWtlyA8IGxpa2VcLW5hbWVkOwor56ut55uhIDwgZXhoYXVzdGlvbjsKK+i7jeS6uiA8IHNlcnZpY2VtYW47Civkvb/kurrkv6HmnI0gPCBjb252aW5jaW5nOwor6ICB6aCtIDwgb2xkXC1mZWxsb3c7CivlkajmgankvoYgPCB6aG91XC1lbmxhaTsKK+ePvuixoSA8IGFwcGVhcmFuY2U7Civpjq7nl5sgPCBhbmFsZ2VzaWFjOwor5aCDIDwgY29tcGxpYW5jZTsKK+acieiIiOi2oyA8IGludGVyZXN0ZWQ7Civoh6rlsIogPCBzZWxmXC1wcmlkZTsKK+Wumue+qSA8IGRlZmluaXRpb247CivlnKYgPCB3YXRlclwtZ2F0ZTsKK+WbjCA8IGxvcXVhY2lvdXM7CivlmrIgPCByZWFkXC1hbG91ZDsKK+S4jee2k+aEjyA8IGNhcmVsZXNzbHk7Civnq7bniK0gPCB0b1wtY29tcGV0ZTsKK+aJk+Wtl+apnyA8IHR5cGV3cml0ZXI7CivllL0gPCB0b1wtdHdpdHRlcjsKK+WvpuePviA8IHRvXC1hY2hpZXZlOwor5YK35LqhIDwgY2FzdWFsdGllczsKK+WRtCA8IGJyZWF0aGVcLW9uOwor5YCN5aKe5ZmoIDwgbXVsdGlwbGllcjsKK+alreS9mSA8IHNwYXJlXC10aW1lOwor6YeR5bGs57eaIDwgbWV0YWxcLXdpcmU7CivooYzliJcgPCBwcm9jZXNzaW9uOwor5Y2dIDwgaGFpclwtc3R5bGU7Civnl4XlgYcgPCBzaWNrXC1sZWF2ZTsKK+acn+mZkCA8IHRpbWVcLWxpbWl0Owor5YqPIDwgdG9cLWJ1dGNoZXI7Civpm7vlrZDnqbrplpMgPCBjeWJlcnNwYWNlOwor5YaYIDwgdG9cLW1vdmVcLW9uOwor6K2Y5Yil6JmfIDwgaWRlbnRpZmllcjsKK+aKiuaIsiA8IGFjcm9iYXRpY3M7CivnlJ/mnInmrIogPCBiaXJ0aHJpZ2h0Owor5YGtIDwgdHJhbnNncmVzczsKK+WBnSA8IG5vdFwtZmFjaW5nOwor5raI6LK7IDwgdG9cLWNvbnN1bWU7CivmjIHljaHkurogPCBjYXJkaG9sZGVyOwor6KGM5Lq6IDwgcGVkZXN0cmlhbjsKK+WAgCA8IGJld2lsZGVyZWQ7Civmr5vmvqTmnbEgPCBtYW9cLXplZG9uZzsKK+abuOmdoiA8IGluXC13cml0aW5nOwor5YWt5Y2B5LqUIDwgc2l4dHlcLWZpdmU7CivkvLcgPCBkZXNjZW5kZW50Owor5aSa5aqS6auUIDwgbXVsdGltZWRpYTsKK+evgOWItiA8IHRlbXBlcmFuY2U7CivmirXmipflipsgPCByZXNpc3RhbmNlOwor6IWQ5pWXIDwgY29ycnVwdGlvbjsKK+S2qyA8IGZpbmVcLXRlZXRoOwor5LaJIDwgZ3VpbmVhXC1waWc7CivktaogPCBwdXJlXC1ibGFjazsKK+S1nSA8IGRhcmtcLWJsYWNrOwor54246YarIDwgdmV0ZXJpbmFyeTsKK+W+ruS4jei2s+mBkyA8IG5lZ2xpZ2libGU7CivlgZrlh7ogPCB0b1wtcHV0XC1vdXQ7CivkvZzngrogPCBhY2NvbXBsaXNoOwor5LOVIDwgdGhlXC1waWdlb247Civks4wgPCB0aGVcLWN1Y2tvbzsKK+aKmOWwhCA8IHJlZnJhY3Rpb247CivksZ0gPCBibGFja1wtY2FycDsKK+SxhCA8IGFcLWZsYXRmaXNoOwor5ZaJ54KOIDwgbGFyeW5naXRpczsKK+SwrCA8IHdpbGRcLWdob3N0Owor5L+h5b+DIDwgY29uZmlkZW5jZTsKK+SwhCA8IHNob3J0XC1oYWlyOwor5K+UIDwgdG9cLWluY2xpbmU7Civkr4wgPCB0aGVcLXNhY3J1bTsKK+ePjeiXjyA8IGNvbGxlY3Rpb247CivlpKfkuLvmlZkgPCBhcmNoYmlzaG9wOwor5K6NIDwgY3VybGluZ1wtdXA7CivkrbggPCBhXC1zdGFsbGlvbjsKK+ippueul+ihqCA8IHNwZWFkc2hlZXQ7CivkrLcgPCB3ZWxsXC1mZWVkXC47CivogZbogbcgPCBwcmllc3Rob29kOwor5KulIDwgYVwtd3J5XC1uZWNrOwor6YGU6LO05ZaH5ZibIDwgZGFsYWlcLWxhbWE7CivkqrogPCB0ZWV0aHJpZGdlOwor5KqgIDwgcHVsdmVyaXplZDsKK+mMtuebpCA8IGRpYWxcLXBsYXRlOwor5KmxIDwgYVwtc2NhYmJhcmQ7CivmoYPmqLkgPCBwZWFjaFwtdHJlZTsKK+eZveWPo+mQtSA8IHdoaXRlXC1pcm9uOwor5KmBIDwgdGhpblwtaGFpcnM7Civllq7mqKEgPCBzaW5nbGVtb2RlOwor5Ki9IDwgdG9cLXJlc29sdmU7CivkqKkgPCB0aGVcLXNwaXJpdDsKK+S4jeaPo+WGkuaYpyA8IHZlbnR1cmVcLXRvOwor5Ke/IDwgdGhlXC1tYWdwaWU7Civkp6MgPCB0b1wtc3RvcFwtdXA7Civmg7PosaEgPCB0b1wtaW1hZ2luZTsKK+SmryA8IHZlcnlcLWRlbnNlOwor5LiL6ZmNIDwgdG9cLWRlY2xpbmU7Civkpo0gPCB0b1wtaW5jbHVkZTsKK+SkviA8IHRvXC1jb250YWluOwor5KS9IDwgZmFybVwtdG9vbHM7CivlsaTlo5MgPCBsYW1pbmF0aW9uOwor56ys5Y2B5YWrIDwgZWlnaHRlZW50aDsKK+WRqOmAnyA8IGN5Y2xlXC10aW1lOwor5pq06aKoIDwgc3Rvcm1cLXdpbmQ7Civlr6bpqZflrqQgPCBsYWJvcmF0b3J5Owor5KGnIDwgYVwtY2FycmlhZ2U7CivkoZogPCBpbXBsZW1lbnRzOwor5bGs5ZywIDwgZGVwZW5kZW5jeTsKK+ShjiA8IGFcLXdpbmRsYXNzOwor5KC4IDwgb2JzZXF1aW91czsKK+SgtiA8IHRvXC1wcm9qZWN0Owor5KCpIDwgdG9cLXVyaW5hdGU7CivkoJ8gPCB0b1wtdHJpcFwtdXA7CivmvLLlg7kgPCBhcHByZWNpYXRlOwor5KCYIDwgb25lXC1sZWdnZWQ7CivogZbntpMgPCBob2x5XC1iaWJsZTsKK+S7v+ecnyA8IHRvXC1lbXVsYXRlOwor55yB55Wl56ym6JmfIDwgYXBvc3Ryb3BoZTsKK+S4jeWwjeeitOWFkiA8IG5vdFwtcHJvcGVyOwor5LuL57S5IDwgdG9cLXByZXNlbnQ7Civkn5kgPCB0b1wtc3RhZ2dlcjsKK+SfhCA8IGluXC1hXC1odXJyeTsKK+SdvyA8IGhvbm91cmFiZWw7CivknbcgPCBzZWN1cml0aWVzOwor5J2xIDwgdG9cLXRyb3VibGU7CivknJkgPCBub3RcLWNsZXZlcjsKK+SciyA8IHRvXC1zdXNwZW5kOwor57y66bueIDwgd2Vha1wtcG9pbnQ7Civkm7IgPCB0b1wtZGVjZWl2ZTsKK+SbpiA8IGxpdGlnYXRpb247Civkm4QgPCB0b1wtY29uc29sZTsKK+acrOihjCA8IG9uZScnc1wtbGluZTsKK+a7suWdkSA8IHNld2FnZVwtcGl0Owor56u25oqAIDwgdG91cm5hbWVudDsKK+esrOWNgeS5nSA8IG5pbmV0ZWVudGg7CivklrMgPCBqZWxseVwtZmlzaDsKK+mQteWMoCA8IGJsYWNrc21pdGg7Civku7vnlKggPCB0b1wtYXBwb2ludDsKK+adv+e0mSA8IHBhcGVyYm9hcmQ7CivnrKzljYHkuIkgPCB0aGlydGVlbnRoOwor5JWhIDwgY29tcG9zaXRhZTsKK+apn+mXnOi7iiA8IGxvY29tb3RpdmU7Civkv53mvZTnrrEgPCBsaXR0ZXJcLWJpbjsKK+SUmCA8IGZpc2hcLXBhc3RlOwor6ICB5bm05Lq6IDwgb2xkXC1wZW9wbGU7Civkk7UgPCB0b1wtYmxvc3NvbTsKK+azoumVtyA8IHdhdmVsZW5ndGg7Civkk6QgPCB2ZWdldGF0aW9uOwor5bCI5b+DIDwgYWJzb3JwdGlvbjsKK+SThiA8IHRvXC1jdXRcLXRoZTsKK+SSoiA8IHN3ZWV0XC1mbGFnOwor55m86IGy5rOVIDwgaW50b25hdGlvbjsKK+SRrSA8IHdhclwtdmVzc2VsOwor5JGNIDwgdG9cLXN3YWxsb3c7CivkkKIgPCB0b1wtd3JpbmtsZTsKK+SPrSA8IHRoZVwtY2hlZWtzOwor5I+MIDwgdG9cLXZpYnJhdGU7Civkjp8gPCB0b1wtZmF3blwtb247CivlgIvliKUgPCBpbmRpdmlkdWFsOwor5pyD6KiIIDwgYWNjb3VudGFudDsKK+SNtSA8IHlvdW5nXC1nb2F0Owor5I2eIDwgYVwtZHJhZ1wtbmV0Owor5I2XIDwgdG9cLWhhbmdcLXVwOwor5I2UIDwgYVwtZnVsbFwtbmV0Owor5oSP5oOz5LiN5YiwIDwgdW5leHBlY3RlZDsKK+a1geihgCA8IHNoZWRcLWJsb29kOwor6IKJ54mHIDwgbWVhdFwtc2xpY2U7Civki7EgPCBhXC13aWxkXC15YWs7CivlhrDkuIrpgYvli5UgPCBpY2VcLXNwb3J0czsKK+WFrOmWi+iojuirluacgyA8IG9wZW5cLWZvcnVtOwor5IqpIDwgcmljZVwtZ3Jhdnk7CivmuqvlrqQgPCBncmVlbmhvdXNlOwor576O5LmD5ruL6YasIDwgbWF5b25uYWlzZTsKK+S4jeW5s+WHoSA8IG1hcnZlbGxvdXM7CivmipHliLYgPCB0b1wtaW5oaWJpdDsKK+SHjiA8IHRvXC1zdGFydGxlOwor5L2c5paZIDwgY29uZGltZW50czsKK+SHhyA8IHRoZVwtcGVvcGxlOwor5IaLIDwgdGhlXC1hdXR1bW47CivkhZQgPCBkZWFkXC1jcm9wczsKK+W0keW0meWxsSA8IG10XC5cLWt1bmx1bjsKK+S+v+WjuiA8IGJlZFwtdXJpbmFsOwor5ISfIDwgdG9cLXdvcnNoaXA7Civkvb/mgJIgPCBleGFzcGVyYXRlOwor5L6d5bGsIDwgZGVwZW5kZW5jZTsKK+SBniA8IGFcLXByb3ZpbmNlOwor5IGBIDwgc3RyYWJpc211czsKK+etieWIsCA8IHdhaXRcLXVudGlsOwor5bCP5aeQIDwgeW91bmdcLWxhZHk7Civku6PooajlnJggPCBkZWxlZ2F0aW9uOwor472oIDwgZnJhZ21lbnRlZDsKK+O9oyA8IGFcLWZyb250aWVyOwor472YIDwgYm9yZGVybGFuZDsKK+ahjOW4gyA8IHRhYmxlY2xvdGg7CivjvLkgPCBlYXJ0ZW53YXJlOwor6IOM5pmvIDwgYmFja2dyb3VuZDsKK+S4jeiuiiA8IHVuY2hhbmdpbmc7CivkuIDosqsgPCBjb25zaXN0ZW50Owor47qzIDwgYmxhY2tcLW1pY2E7CivjuoUgPCB0aGVcLW1vbmtleTsKK+aJueWHhiA8IHRvXC1hcHByb3ZlOwor47ioIDwgYVwtYmlnXC1idWxsOwor47iMIDwgdG9cLXR3aW5rbGU7Civjt7cgPCB0aGlja1wtc291cDsKK+O2rSA8IGFsbW9zdFwtZHJ5Owor47acIDwgZGVlcFwtd2F0ZXI7Civnp5Hns7sgPCBkZXBhcnRtZW50Owor47WAIDwgd2F0ZXJcLWZsb3c7CivmhIHnt5IgPCBtZWxhbmNob2x5Owor56We6KmxIDwgZmFpcnlcLXRhbGU7CivkvY/miYAgPCBoYWJpdGF0aW9uOwor5b2x5YOP5qqUIDwgaW1hZ2VcLWZpbGU7Civjsq8gPCBsb25nXC1oYWlyeTsKK+mhm+imhiA8IHN1YnZlcnNpb247CivjsowgPCBkb2cnJ3NcLWhhaXI7CivjsokgPCBlZ2dcLXNoZWxsczsKK+OxpiA8IHRvXC1kaXNjYXJkOwor47GcIDwgcGVzdGlsZW5jZTsKK+ahiOWtkCA8IGxvbmdcLXRhYmxlOwor46+HIDwgYVwtc3RvY2thZGU7CivlsYXkvY/ogIUgPCBpbmhhYml0YW50Owor46yxIDwgdG9cLXJlcGxhY2U7CivjrKogPCB0b1wtZm9sZFwtdXA7Civjq6QgPCBhXC1sb25nXC1kYXk7CivjqowgPCB0b1wtbGVhZFwtb247CivjqbkgPCB0b1wtcGlsZVwtb247CivjqZ4gPCB0b1wtYmFja1wtdXA7CivjqK8gPCB0b1wtZW5sYXJnZTsKK+OoriA8IHRvXC1saWZ0XC11cDsKK+a3mOaxsCA8IHRvXC1kaWVcLW91dDsKK+iCpeaWmSA8IGZlcnRpbGl6ZXI7CivjpoIgPCBjb25zdGFudGx5Owor46W2IDwgdG9cLWZpbGxcLXVwOwor46WjIDwgdG9cLWJlbmVmaXQ7CivjpLcgPCB0b1wtZGViYXVjaDsKK+OkkCA8IGRpc2hhcm1vbnk7Civni6Hovq8gPCB0b1wtcXVpYmJsZTsKK+OjvSA8IHRvXC1mb3JnaXZlOwor46OFIDwgYm93XC1zdHJpbmc7Civjo4AgPCB0b1wtcmVib3VuZDsKK+OirSA8IGFcLWJvd1wtY2FzZTsKK+OimiA8IGFcLWNvcnJpZG9yOwor46KPIDwgYVwtY2Vzc3Bvb2w7CivjoaUgPCB0b1wtY3VybFwtdXA7CivmmrTooYwgPCBzYXZhZ2VcLWFjdDsKK+Wbm+eZvuWEhCA8IDQwXC1iaWxsaW9uOwor5a+m5ZyoIDwgaW5cLXJlYWxpdHk7Civoib7mu4vnl4Xnl4Xmr5IgPCBhaWRzXC12aXJ1czsKK+OeoCA8IG1hbGVcLW9yZ2FuOwor6Zm46LuN5Lit5bCJIDwgbGlldXRlbmFudDsKK+OejiA8IGJvZHlcLXdhc3RlOwor452vIDwgdG9cLXNvam91cm47CivjmqAgPCBmdWxsXC1ncm93bjsKK+OZuiA8IGNyb3NzXC1yb2FkOwor6LaF5Y2HIDwgZXhhbHRhdGlvbjsKK+WPm+i7jSA8IHJlYmVsXC1hcm15Owor45inIDwgcHJlY2VkZW5jZTsKK+eNuOeptCA8IGFuaW1hbFwtZGVuOwor45esIDwgdGhpY2tcLWxpcHM7Civjl6sgPCB0b1wtd2hpc3BlcjsKK+W9quW9ouWkp+a8oiA8IGJ1cmx5XC1jaGFwOwor6K2m6ZCYIDwgYWxhcm1cLWJlbGw7CivjloYgPCB0b1wtY29uZGVtbjsKK+iDluWtkCA8IGZhdFwtcGVyc29uOwor45WNIDwgdG9cLWhlYXBcLXVwOwor45WGIDwgZmluZVwtc3RvbmU7CivjlLcgPCB0b1wtc2VjcmV0ZTsKK+OUmCA8IHRvXC1kZWdyYWRlOwor45STIDwgdG9cLXN0YW1tZXI7CivjlIwgPCB0b1wtY3V0XC1vZmY7Civjk7ogPCBjYXN0cmF0aW9uOwor5a2Y5pS+IDwgdG9cLWRlcG9zaXQ7CivppJPmrbsgPCBzdGFydmF0aW9uOwor45K3IDwgdG9cLXByb3NwZXI7CivjkKQgPCB0b1wtaW1wbG9yZTsKK+iQrOS6i+mBlOWNoSA8IG1hc3RlcmNhcmQ7CivkvbXlkJ4gPCBzd2FsbG93XC11cDsKK+WtuOW+kiA8IGFwcHJlbnRpY2U7Civmnb/mqIEgPCBzaGVldFwtcGlsZTsKK+WQpuaxuuasiiA8IHZldG9cLXBvd2VyOwor5oiQ5YiGIDwgaW5ncmVkaWVudDsKK+W0h+aLnOiAhSA8IHdvcnNoaXBwZXI7CivmgpTnvaogPCBjb252aWN0aW9uOwor6IO95YqbIDwgY2FwYWJpbGl0eTsKK+aIsuWKh+WMliA8IHRoZWF0cmljYWw7Civlv4XpoIggPCB0b1wtaGF2ZVwtdG87Civogq/lrpogPCB0b1wtYmVcLXN1cmU7Civku7vmgKcgPCBjYXByaWNpb3VzOwor546L54mMIDwgdHJ1bXBcLWNhcmQ7CivmlrDogZ7lqpLpq5QgPCBuZXdzXC1tZWRpYTsKK+WgheWumuS4jeenuyA8IHVuc3dlcnZpbmc7CivpnZ7nm4jliKkgPCBub25cLXByb2ZpdDsKK+WNl+mdoiA8IHNvdXRoXC1zaWRlOwor5L2/5a655piTIDwgZmFjaWxpdGF0ZTsKK+eglOeptuWToSA8IHJlc2VhcmNoZXI7CivoloTojbcgPCBmaWVsZFwtbWludDsKK+mmrOWKmyA8IGhvcnNlcG93ZXI7CivmnIjnkIMgPCBcKHRoZVwpXC1tb29uOwor54++5oiQIDwgcmVhZHlcLW1hZGU7CivorbDoq5YgPCB0b1wtY29tbWVudDsKK+miqOa/lSA8IHJoZXVtYXRpc207CivnvqTnnL4gPCB0aGVcLW1hc3NlczsKK+S4ieaciOS6jOWNgeS4ieiZnyA8IG1hcmNoXC0yM3JkOwor5q2k5pmC5Lul5YmNIDwgaGVyZXRvZm9yZTsKK+S7geaFiCA8IGJlbmV2b2xlbnQ7Civnm67mk4rogIUgPCBleWV3aXRuZXNzOwor5LuK5b6MIDwgaGVuY2Vmb3J0aDsKK+iZm+aTrCA8IGZpY3RpdGlvdXM7CivlsIjploDljJYgPCBzcGVjaWFsaXplOwor5aSa6buoIDwgbXVsdGlwYXJ0eTsKK+S4jeeVtiA8IHVuc3VpdGFibGU7CivmsojokL0gPCBzaW5rXCxcLWZhbGw7CivorJvov7AgPCB0YWxrXC1hYm91dDsKK+Wuo+S9iCA8IHRvXC1kZWNsYXJlOwor5pGp5omY6LuKIDwgbW90b3JjeWNsZTsKK+acnemuruaIsOeIrSA8IGtvcmVhblwtd2FyOwor6byT5o6MIDwgdG9cLWFwcGxhdWQ7Civku6XlpJYgPCBhcGFydFwtZnJvbTsKK+ioguizvOiAhSA8IHN1YnNjcmliZXI7CivniIbpn7MgPCBzb25pY1wtYm9vbTsKK+Wkp+mrlCA8IGluXC1nZW5lcmFsOwor6aOf5oyHIDwgZm9yZWZpbmdlcjsKK+eJtOinuCA8IGNvbnRyYWRpY3Q7CivnqIvluo8gPCBwcm9jZWR1cmVzOwor5piO6KiAIDwgcHJvbm91bmNlZDsKK+mhr+W+rumPoSA8IG1pY3Jvc2NvcGU7CivmnKzmnIggPCB0aGlzXC1tb250aDsKK+WOn+eUn+izqiA8IHByb3RvcGxhc207CivlpJrmlrnpnaIgPCBtYW55XC1zaWRlZDsKK+WTsuWtuCA8IHBoaWxvc29waHk7CivmsKPosaEgPCBtZXRlb3JvbGd5Owor5LqS5oOgIDwgcmVjaXByb2NhbDsKK+WQq+eHkCA8IHBob3NwaG9yaWM7Civmm7TmraMgPCBjb3JyZWN0aW9uOwor6buR5p2/IDwgYmxhY2tib2FyZDsKK+aWsOiBnuWtuCA8IGpvdXJuYWxpc207CivkuI3lrproqZ4gPCBpbmZpbml0aXZlOwor6aCQ55+lIDwgYW50aWNpcGF0ZTsKK+S7peWPiiA8IGFzXC13ZWxsXC1hczsKK+S4u+agvCA8IG5vbWluYXRpdmU7CivpjITlj5YgPCB0b1wtcmVjcnVpdDsKK+aWsOmDjiA8IGJyaWRlZ3Jvb207CivogIzlvowgPCBhZnRlclwtdGhhdDsKK+aCsuatjCA8IHNhZFwtbWVsb2R5Owor5Lq65Z2HIDwgcGVyXC1jYXBpdGE7Civlj6/nlpEgPCBzdXNwaWNpb3VzOwor6ICM5beyIDwgdGhhdCcnc1wtYWxsOwor6Zuj5Lul572u5L+hIDwgaW5jcmVkaWJsZTsKK+a1tOW3viA8IGJhdGhcLXRvd2VsOwor5ZCK54eIIDwgY2hhbmRlbGllcjsKK+WFseWSjOaUv+mrlCA8IHJlcHVibGljYW47CivogbLlg7kgPCByZXB1dGF0aW9uOwor5LiN57Ch5ZauIDwgbm90XC1zaW1wbGU7Civlj5flgrflrrMgPCBiZVwtaW5qdXJlZDsKK+err+ezu+e1sSA8IGVuZFwtc3lzdGVtOwor6JaE54mHIDwgdGhpblwtc2xpY2U7Civmm7TmlrAgPCB1cFwtdG9cLWRhdGU7CivpoavmoJcgPCB0b1wtdHJlbWJsZTsKK+mbhumrlCA8IGNvbGxlY3RpdmU7CivlpJbkuqTmiYvohZUgPCBkaXBsb21hdGljOwor5pWX6ZyyIDwgXChvZlwtYVwtcGxvdDsKK+ippumplyA8IGV4cGVyaW1lbnQ7Civkurrlj6MgPCBwb3B1bGF0aW9uOwor5LiJ55m+5YSEIDwgMzBcLWJpbGxpb247CivmrbjpoIYgPCBzdWJtaXNzaW9uOwor5aSx6LmkIDwgYmVcLW1pc3Npbmc7Civpo73lkowgPCBzYXR1cmF0aW9uOwor5q2h6aiwIDwganViaWxhdGlvbjsKK+W+jOijlCA8IGRlc2NlbmRhbnQ7Civph5HniYwgPCBnb2xkXC1tZWRhbDsKK+mdnuWwjeeosSA8IGFzeW1tZXRyaWM7CivkuI3mnIMgPCBpbXByb2JhYmxlOwor5LiK5pyIIDwgbGFzdFwtbW9udGg7CivljYrmsbros70gPCBzZW1pZmluYWxzOwor56Kn57agIDwgZGFya1wtZ3JlZW47CivogIHlpZcgPCBvbGRcLXRoaW5nczsKK+WPiueJqSA8IHRyYW5zaXRpdmU7CivojqvpoIjmnIkgPCBncm91bmRsZXNzOwor5LiN6LK36LOsIDwgbm90XC1idXlcLWl0Owor56OB55uk6amF5YuV5ZmoIDwgZGlzbFwtZHJpdmU7Civpm7vou4ogPCB0cm9sbGV5YnVzOwor6aGn5oWuIDwgbWlzZ2l2aW5nczsKK+WPr+avlCA8IGNvbXBhcmFibGU7CivohZPnq4vmr5Tmm7ggPCBwaGlsaXBpYW5zOwor5LqL5YWIIDwgaW5cLWFkdmFuY2U7CivorabniqwgPCBwb2xpY2VcLWRvZzsKK+WJm+mrlCA8IHJpZ2lkXC1ib2R5Owor5pmv5rCjIDwgcHJvc3Blcml0eTsKK+WNnOetriA8IGRpdmluYXRpb247CivlpbPoo53oo4HnuKvluKsgPCBkcmVzc21ha2VyOwor5LiN5b+rIDwgYmVcLXVuaGFwcHk7CivlpbPlrbjnlJ8gPCBzY2hvb2xnaXJsOwor5pS56YCyIDwgdG9cLWltcHJvdmU7Civpm7voppYgPCB0ZWxldmlzaW9uOwor5b6M6ICFIDwgdGhlXC1sYXR0ZXI7Civnuo/nuZ4gPCBpbnRlcnR3aW5lOwor5Yqg6YCfIDwgYWNjZWxlcmF0ZTsKK+irs+e3tCA8IGNvbnZlcnNhbnQ7CivkuIvlgIvmnIggPCBuZXh0XC1tb250aDsKK+mojuWjq+miqOagvCA8IGtuaWdodGhvb2Q7Civpj4jot6/lsaQgPCBsaW5rXC1sYXllcjsKK+S4gOW6piA8IGZvclwtYVwtdGltZTsKK+atoei/jiA8IHRvXC13ZWxjb21lOwor5YyW5aad6Iie5pyDIDwgbWFzcXVlcmFkZTsKK+WiqOmPoSA8IHN1bmdsYXNzZXM7CivliZ3pm6IgPCBcKG9mXC10aXNzdWU7CivlvYjol6UgPCBhbW11bml0aW9uOwor5rqr5ZKM5oCnIDwgdGVuZGVybmVzczsKK+S4jeWuiSA8IGludHJhbnF1aWw7CivmnJ/liIogPCBwZXJpb2RpY2FsOwor55+l6Ka6IDwgcGVyY2VwdGlvbjsKK+aJgOacieiAhSA8IHByb3ByaWV0b3I7CivlkIzmg4UgPCBjb21wYXNzaW9uOwor6YGp6YWNIDwgYWRhcHRhdGlvbjsKK+WQiOaEjyA8IGFjY2VwdGFibGU7CivlpKfoh6MgPCBjaGFuY2VsbG9yOwor5ZCM5oCnIDwgaG9tb3NleHVhbDsKK+aXpeebiiA8IGRheVwtYnlcLWRheTsKK+WNiuepuuS4rSA8IGluXC1taWRcLWFpcjsKK+acrOS7vSA8IG9uZScnc1wtZHV0eTsKK+Wls+acjeeJqeWToSA8IHN0ZXdhcmRlc3M7CivmspLmnInnn6XoprogPCBpbnNlbnNpYmxlOwor5LiN562J5byPIDwgaW5lcXVhbGl0eTsKK+acg+WPiyA8IG1lbWJlcnNoaXA7CivmmpfplpPlhZIgPCBpbm5lclwtcm9vbTsKK+iHquWLleWMliA8IGF1dG9tYXRpb247CivkuI3lpKAgPCBub3RcLWVub3VnaDsKK+WWruaWuemdoiA8IHVuaWxhdGVyYWw7Civnp4HkuIsgPCBpblwtcHJpdmF0ZTsKK+azouWzsCA8IHdhdmVcLWNyZXN0Owor5LiJ5aSpIDwgdGhyZWVcLWRheXM7Civlj43ml6UgPCBhbnRpXC1qYXBhbjsKK+W7uuitsCA8IHRvXC1wcm9wb3NlOwor5L2b5pWZ5b6SIDwgYVwtYnVkZGhpc3Q7Civms6LlsI4gPCB3YXZlXC1ndWlkZTsKK+WpouWlsyA8IHNsYXZlXC1naXJsOwor5rKS5pS2IDwgY29uZmlzY2F0ZTsKK+W/q+a0uyA8IGdheVwsXC1oYXBweTsKK+WPr+aCsiA8IGxhbWVudGFibGU7CivoqZXoqLsgPCBjb21tZW50YXJ5Owor5b+F54S2IDwgaW5ldml0YWJsZTsKK+WNiueQgyA8IGhlbWlzcGhlcmU7Civpn7/mh4kgPCByZXNwb25kXC10bzsKK+Wkp+e2sSA8IG1haW5cLXBvaW50Owor5rCj5Yui5rS25rS2IDwgYWdncmVzc2l2ZTsKK+eDpOm0qCA8IHJvYXN0XC1kdWNrOwor5q2M6KmeIDwgc29uZ1wtbHlyaWM7CivkuKblhaUgPCBtZXJnZVwtaW50bzsKK+W8seiEiCA8IHdlYWtcLXB1bHNlOwor5pON6Ii15a6kIDwgcGlsb3Rob3VzZTsKK+WOn+acrCA8IG9yaWdpbmFsbHk7CivlkLjlkK4gPCB0b1wtc3Vja1wtaW47CivniIbnoLQgPCB0b1wtYmxvd1wtdXA7CivpgZPos4AgPCBjb21wbGltZW50Owor5Y+W5b6XIDwgdG9cLWFjcXVpcmU7CivkuIrljYogPCBmaXJzdFwtaGFsZjsKK+aVmeiCsiA8IHRvXC1lZHVjYXRlOwor5LiN5YuVIDwgbW90aW9ubGVzczsKK+S4g+WNgeW5tOS7oyA8IHRoZVwtMTk3MCcnczsKK+ilv+m7niA8IHdlc3RcLXBvaW50Owor5paX55y8IDwgY3Jvc3NcLWV5ZWQ7CivnnLzpj6EgPCBzcGVjdGFjbGVzOwor5LiN5YKZIDwgdW5wcmVwYXJlZDsKK+aBq+WahyA8IGludGltaWRhdGU7CivlpYnnjbsgPCBjb25zZWNyYXRlOwor5LiN5L6dIDwgbm90XC1jb21wbHk7Civpm7vllLHmqZ8gPCBwaG9ub2dyYXBoOwor5paH55uyIDwgaWxsaXRlcmF0ZTsKK+aYjuaZuiA8IG5vdFwtdW53aXNlOwor5rWB56iL5ZyWIDwgZmxvd1wtY2hhcnQ7Civnm6PnnaPogIUgPCBzdXBlcnZpc29yOwor5LiA55m+5LqU5Y2B5YSEIDwgMTVcLWJpbGxpb247Civmkp7ph50gPCBmaXJpbmdcLXBpbjsKK+WNl+altSA8IHNvdXRoXC1wb2xlOwor5omA5pyJ54mpIDwgYmVsb25naW5nczsKK+imlueql+aWsOaKgCA8IHdpbmRvd3NcLW50Owor5LqM5Y2B5LiAIDwgdHdlbnR5XC1vbmU7CivkuoYgPCB0b1wtZmluaXNoOwor5a2QIDwgb2Zmc3ByaW5nOwor5b65IDwgcGVuZXRyYXRlOwor6KaBIDwgbmVjZXNzYXJ5Owor6L6xIDwgaHVtaWxpYXRlOwor552AIDwgbWFrZVwtbW92ZTsKK+aIkCA8IGNvbXBsZXRlZDsKK+edoyA8IHN1cGVydmlzZTsKK+i8ryA8IGdhdGhlclwtdXA7CivlvKUgPCBleHRlbnNpdmU7Civnvo4gPCBiZWF1dGlmdWw7Civlu4IgPCBzaWRlXC1yb29tOwor6ZeuIDwgYXNrXC1hYm91dDsKK+W6rSA8IGNvdXJ0eWFyZDsKK+eZgiA8IGJlXC1oZWFsZWQ7Civnl7ogPCBwYXJhbHlzaXM7Civlt64gPCB0b1wtZGlmZmVyOwor6Zq+IDwgZGlmZmljdWx0Owor6LaFIDwganVtcFwtb3ZlcjsKK+eVsCA8IGRpZmZlcmVudDsKK+S6siA8IHJlbGF0aXZlczsKK+eVqyA8IGRlbGluZWF0ZTsKK+eVnCA8IGxpdmVzdG9jazsKK+eVkSA8IGRyeVwtZmllbGQ7CivnlJggPCBzd2VldG5lc3M7CivorqQgPCByZWNvZ25pemU7CivosrQgPCBleHBlbnNpdmU7Civosp0gPCBzZWFcLXNoZWxsOwor6L6+IDwgYXJyaXZlXC1hdDsKK+S8lyA8IG11bHRpdHVkZTsKK+WAkiA8IGZhbGxcLW92ZXI7CivnjqkgPCBwbGF5XC13aXRoOwor5YOPIDwgYVwtcGljdHVyZTsKK+WuhSA8IHJlc2lkZW5jZTsKK+aNriA8IHRvXC1vY2N1cHk7Civora8gPCB0cmFuc2xhdGU7CivorasgPCB0YWxrYXRpdmU7CivpgKAgPCBjb25zdHJ1Y3Q7CivlqrwgPCBvbGRcLXdvbWFuOwor54qgIDwgc2FjcmlmaWNlOwor54mSIDwgZG9jdW1lbnRzOwor54mMIDwgc2lnbmJvYXJkOwor54iQIDwgZmlyZXBsYWNlOwor5LmFIDwgbG9uZ1wtdGltZTsKK+WmviA8IGNvbmN1YmluZTsKK+WInSA8IGJlZ2lubmluZzsKK+mZpCA8IGVsaW1pbmF0ZTsKK+WGtSA8IGNvbmRpdGlvbjsKK+S5sSA8IGNvbmZ1c2lvbjsKK+WImyA8IGVzdGFibGlzaDsKK+emjyA8IGhhcHBpbmVzczsKK+WBhyA8IGZhbHNlaG9vZDsKK+mhviA8IGxvb2tcLWJhY2s7CivooLYgPCBzaWxrd29ybXM7CivmuJAgPCBncmFkdWFsbHk7CivnnqcgPCBnbGFuY2VcLWF0Owor5Z+SIDwgZW5jbG9zdXJlOwor5Z+DIDwgZmluZVwtZHVzdDsKK+ieoiA8IGdsb3dcLXdvcm07CivpgIAgPCBzdGVwXC1iYWNrOwor6Jy7IDwgZHJhZ29uZmx5Owor57+7IDwgZmxpcFwtb3ZlcjsKK+WcjyA8IHRvXC1jaXJjbGU7Civmma4gPCB1bml2ZXJzYWw7Civom7kgPCBjaHJ5c2FsaXM7CivkuLQgPCBkcmF3XC1uZWFyOwor5Y2PIDwgYmVcLXVuaXRlZDsKK+a5ryA8IGhvdFwtd2F0ZXI7CivkvosgPCBwcmVjZWRlbnQ7CivmtLIgPCBjb250aW5lbnQ7Civmnb4gPCBwaW5lXC10cmVlOwor5LyZIDwgY29tcGFuaW9uOwor5q+rIDwgZmluZVwtaGFpcjsKK+iVjiA8IGJ1Y2t3aGVhdDsKK+i+kyA8IHRyYW5zcG9ydDsKK+aKmCA8IGJyZWFrXC1vZmY7CivmsbAgPCBleGNlc3NpdmU7CivlkJsgPCBzb3ZlcmVpZ247CivljbEgPCBkYW5nZXJvdXM7CivmpoIgPCBnZW5lcmFsbHk7CivljoQgPCBhZHZlcnNpdHk7CivmsYcgPCBjb25jb3Vyc2U7CivljokgPCB3aGV0c3RvbmU7CivpmYQgPCBhZGhlcmVcLXRvOwor6IKpIDwgc2hvdWxkZXJzOwor6a2YIDwgbmlnaHRtYXJlOwor6I2SIDwgd2FzdGVsYW5kOwor6ayxIDwgbHV4dXJpYW50Owor5YygIDwgY3JhZnRzbWFuOwor5YyCIDwgZnJhZ3JhbmNlOwor5Yu4IDwgcmVjb21tZW5kOwor6aOYIDwgd2hpcmx3aW5kOwor54KuIDwgbGFyZ2VcLWd1bjsKK+mDjiA8IGdlbnRsZW1hbjsKK+mZqiA8IGFjY29tcGFueTsKK+WHnSA8IGNvYWd1bGF0ZTsKK+WJqSA8IGxlZnRvdmVyczsKK+mlkiA8IGJvdW50aWZ1bDsKK+iCmCA8IHRoZVwtZWxib3c7CivogpYgPCBsb29rXC1saWtlOwor5pioIDwgeWVzdGVyZGF5Owor5pqCIDwgdGVtcG9yYXJ5Owor6YCSIDwgaGFuZFwtb3ZlcjsKK+elpSA8IGdvb2RcLWx1Y2s7CivlgLkgPCB0ZW1wZXJhdGU7Civku5cgPCByZWx5XC11cG9uOwor5p+/IDwgcGVyc2ltbW9uOwor6ZSuIDwgZG9vclwtYm9sdDsKK+aeryA8IGRyaWVkXC1vdXQ7CivojrEgPCBnb29zZWZvb3Q7CivotZQgPCBpbmRlbW5pZnk7CivpgKIgPCBjb21lXC11cG9uOwor552BIDwgb3BlblwtZXllczsKK+WYvyA8IGJlXC1zaWxlbnQ7CivotKogPCBiZVwtZ3JlZWR5Owor6YCdIDwgcGFzc1wtYXdheTsKK+iJviA8IGFydGVtaXNpYTsKK+iijSA8IGxvbmdcLWdvd247CivlhqQgPCBncmlldmFuY2U7Civov6ogPCBlbmxpZ2h0ZW47CivlmIkgPCBleGNlbGxlbnQ7Civplr4gPCB0aHJlc2hvbGQ7Civntr4gPCB0aGluXC1zaWxrOwor6IaAIDwgdXBwZXJcLWFybTsKK+mhvSA8IG9ic3RpbmF0ZTsKK+atiSA8IGRlZmljaWVudDsKK+W4hSA8IGNvbW1hbmRlcjsKK+aGviA8IHRvXC1yZWdyZXQ7CivlioggPCBjdXRcLWFwYXJ0Owor5ouCIDwgc2hha2VcLW9mZjsKK+etiCA8IGFycm93XC1lbmQ7CivnhqwgPCBjb29rXC1kb3duOwor56i8IDwgc293XC1ncmFpbjsKK+aBjSA8IHNlZW1pbmdseTsKK+e7oyA8IGVtYnJvaWRlcjsKK+aHgyA8IGNvdXJ0ZW91czsKK+ihrCA8IHVuZGVyd2VhcjsKK+aFiiA8IHRvXC1yZXNlbnQ7Civmva0gPCBkZWVwXC1wb29sOwor56GdIDwgc2FsdHBldGVyOwor6aqkIDwgcHJvY2VkdXJlOwor5b+/IDwgZ2V0XC1hbmdyeTsKK+WdoCA8IGZhbGxcLWRvd247CivonbYgPCBidXR0ZXJmbHk7CivnhIkgPCB0aGVyZXVwb247CivnpoAgPCByZXBvcnRcLXRvOwor5oyrIDwgcHVzaFwtZG93bjsKK+mzhCA8IGFsbGlnYXRvcjsKK+iwkCA8IGhhcm1vbml6ZTsKK+WxjiA8IGV4Y3JlbWVudDsKK+iRsSA8IHNjYWxsaW9uczsKK+aeoyA8IGRhdGVcLXRyZWU7CivosLQgPCByZXByaW1hbmQ7CivmsbkgPCB0dXJidWxlbnQ7Civms7sgPCBkcmFpblwtb2ZmOwor54CRIDwgd2F0ZXJmYWxsOwor5qiKIDwgYVwtcmFpbGluZzsKK+aVmyA8IGRyYXdcLWJhY2s7CivojLUgPCBhXC1jdXNoaW9uOwor5qOVIDwgaGVtcFwtcGFsbTsKK+i+lyA8IHR1cm5cLW92ZXI7CivmgaQgPCBzaG93XC1waXR5Owor5L6IIDwgbHV4dXJpb3VzOwor5rKBIDwgc29ha1wtaW50bzsKK+WMoyA8IHNtYWxsXC1ib3g7CivmjY4gPCB0b1wtc2VsZWN0Owor55eeIDwgZHlzcGVwc2lhOwor552QIDwgc3F1aW50XC1hdDsKK+WepiA8IGN1bHRpdmF0ZTsKK+a1kiA8IHJpdmVyYmFuazsKK+iRtSA8IHN1bmZsb3dlcjsKK+edqyA8IGV5ZWxhc2hlczsKK+WTuiA8IGNoZXdcLWZvb2Q7Civnq6MgPCB0ZXJtaW5hdGU7Civlm5QgPCBtdXR0ZXJpbmc7Civol5AgPCBkaXNyZWdhcmQ7Civln6AgPCBwb3J0XC1jaXR5Owor6I2kIDwgbWVhdFwtZGlldDsKK+ickiA8IG1pbGxpcGVkZTsKK+iPhyA8IG11c2hyb29tczsKK+ixmiA8IHNtYWxsXC1waWc7CivmspMgPCBjb25uZWN0ZWQ7CivlvKkgPCBjcm9zc1wtYm93Owor5q6HIDwgZGllXC15b3VuZzsKK+agiCA8IHdhcmVob3VzZTsKK+mGuiA8IGdldFwtZHJ1bms7CivonIggPCBjZW50aXBlZGU7CivmhKsgPCBndWlsZWxlc3M7CivosJkgPCB2ZXJzZWRcLWluOwor54a5IDwgZGltXC1saWdodDsKK+aAgiA8IGluc3RpZ2F0ZTsKK+mBmyA8IHRha2VcLXdhbGs7Civpur4gPCBhXC1wZW5uYW50Owor5aqyIDwgbWFycnlcLW9mZjsKK+mVgSA8IG1hZ25lc2l1bTsKK+aksCA8IHBhbG1cLXRyZWU7Civnl6IgPCBkeXNlbnRlcnk7Civll5EgPCBlYXRcLXNlZWRzOwor6JqvIDwgZWFydGh3b3JtOwor6JyaIDwgY29ja3JvYWNoOwor6ZiGIDwgaGlnaFwtZG9vcjsKK+aTgCA8IHJvbGxcLWZsYXQ7CivooqQgPCBsb25naXR1ZGU7Civpup0gPCBtdXNrXC1kZWVyOwor5L27IDwgZnJpdm9sb3VzOwor6ZK+IDwgcG90YXNzaXVtOwor5a2RIDwgcmVtYWluaW5nOwor5qqEIDwgY2FsbFwtYXJtczsKK+majSA8IGRyeVwtZGl0Y2g7Civor78gPCBwYXNzXC1idWNrOwor6YCEIDwgYVwtc3VybmFtZTsKK+aijyA8IGhhbmRjdWZmczsKK+mSuiA8IGJyb2FkXC1heGU7Civmn5EgPCB0YW5nZXJpbmU7CivkuZwgPCB0b1wtc3F1aW50Owor5aiyIDwgYVwtZ29kZGVzczsKK+W/nSA8IGRpc2dyYWNlZDsKK+ivriA8IGNyaXRpY2l6ZTsKK+mzjyA8IGh1Z2VcLWZpc2g7CivonIcgPCBqZWxseWZpc2g7Civliq0gPCBlbmNvdXJhZ2U7CivnmaMgPCByaW5nd29ybXM7Civnu6YgPCBzaWxrXC1jb3JkOwor6ZK4IDwgcGx1dG9uaXVtOwor6aaXIDwgY2hlZWtib25lOwor6ZSwIDwgbWFuZ2FuZXNlOwor5L6qIDwgYVwtY29tcGFueTsKK+WHqyA8IHdpbGRcLWR1Y2s7Civnl7EgPCBoZWF0XC1yYXNoOwor55eIIDwgY2FyYnVuY2xlOwor5oKMIDwgYnJvdGhlcmx5Owor5Ya8IDwgXChzdXJuYW1lXCk7CivpuacgPCBwYXJ0cmlkZ2U7CivmgpIgPCBzb3Jyb3dmdWw7CivmgIMgPCByZWdyZXRmdWw7CivlopIgPCB3ZXRcLXRpbHRoOwor6Ki+IDwgYmFkXC1tb3V0aDsKK+WcriA8IGRlc3Ryb3llZDsKK+myiCA8IHNlYVwtcGVyY2g7CivmlIkgPCB0b1wtYmVja29uOwor6bKHIDwgc2hlYXRmaXNoOwor6IaIIDwgZGlhcGhyYWdtOwor54qNIDwgYVwtYnVsbG9jazsKK+mUlyA8IGdlcm1hbml1bTsKK+mOjyA8IHB1cmVcLWdvbGQ7CivplYUgPCBhbWVyaWNpdW07CivovoIgPCBhXC1jaGFyaW90Owor6Le4IDwgY2xlYXJcLXdheTsKK+eFsyA8IGJlXC1idXJuZWQ7Civnib4gPCB0b1wtb3Bwb3NlOwor5piAIDwgc3VuXC1saWdodDsKK+S5qSA8IHRvXC1kaXZpbmU7Civnvp8gPCBoeWRyb3hpZGU7Civojb0gPCBjb3JpYW5kZXI7Civnu6AgPCB3ZWxsXC1yb3BlOwor5ZOTIDwgZ2FycnVsb3VzOwor6ISsIDwgYVwtYmxhZGRlcjsKK+aIoSA8IHN1Ymp1Z2F0ZTsKK+i+hyA8IGhhbmRcLWNhcnQ7CivpuZogPCBjb3Jtb3JhbnQ7CivplZ4gPCBhcnJvd2hlYWQ7Civoj7AgPCB3aWxkXC1yaWNlOwor6KCWIDwgaW5jaFwtd29ybTsKK+mTqyA8IGxhcmdlXC1ob2U7CivmsJggPCBkZXV0ZXJpdW07Civpu74gPCB0b1wtc3RyaXZlOwor6ZWnIDwgbGFudGhhbnVtOwor5Z6hIDwgcGxvd1wtc29pbDsKK+eClCA8IGFjZXR5bGVuZTsKK+mVsSA8IHl0dGVyYml1bTsKK+mSlSA8IG5lb2R5bWl1bTsKK+W/rSA8IGRlbGlnaHRlZDsKK+iLtCA8IHNhY2tjbG90aDsKK+iwsyA8IHRvXC1kZWNpZGU7Civpkq8gPCBwYWxsYWRpdW07CivnorIgPCB0ZWxsdXJpdW07CivnkqkgPCBqYWRlXC1yaW5nOwor6aWrIDwgc3VyZmVpdGVkOwor5pKZIDwgZWNvbm9taXplOwor6JO8IDwgc21hcnR3ZWVkOwor6aWUIDwgYnJlYWtmYXN0Owor6ZS2IDwgc3Ryb250aXVtOwor5piDIDwgYWZ0ZXJub29uOwor5ZSqIDwgdG9cLXJlY2l0ZTsKK+WEhyA8IGluZ2VuaW91czsKK+mytCA8IGZpc2hcLWd1dHM7CivpsoUgPCBmaXNoXC1uYW1lOwor6ZONIDwgYmVyeWxsaXVtOwor54azIDwgdG9cLXNwcmVhZDsKK+iDjSA8IGd1YW5pZGluZTsKK+mykCA8IGdsb2JlZmlzaDsKK+mFkCA8IGFuaHlkcmlkZTsKK+ihhCA8IGVwaXN0YXhpczsKK+efpyA8IG11Y2hcLW1vcmU7CivmgqsgPCBzaW5jZXJpdHk7CivohqYgPCBwaG9zcGhpbmU7CivnvKMgPCBmaW5lXC1zaWxrOwor5a6EIDwgYVwtdHJhaXRvcjsKK+mYjCA8IHdlblwteGlhbmc7CivphZ4gPCBwaHRoYWxlaW47CivmlLbnuK4gPCBwdWxsXC1iYWNrOwor5aSa55aRIDwgc2tlcHRpY2FsOwor5ZCI5YqbIDwgY29vcGVyYXRlOwor54iG54K4IDwgZXhwbG9zaW9uOwor57iu5bCP5qih5Z6LIDwgbWluaWF0dXJlOwor5Ymy6I2JIDwgbW93XC1ncmFzczsKK+iuiuWljyA8IHZhcmlhdGlvbjsKK+mgmOWPlyA8IHRvXC1hY2NlcHQ7Civku6XlvJfmiYDmm7ggPCBlcGhlc2lhbnM7Civli5Xnm6ogPCBjb21tb3Rpb247Civlj6/lk4AgPCBtaXNlcmFibHk7CivmspLmnInlvaLni4AgPCBzaGFwZWxlc3M7Civoj6DomL8gPCBwaW5lYXBwbGU7CivnqanlrprmgKcgPCBzdGFiaWxpdHk7CivljprluqYgPCB0aGlja25lc3M7CivpgJ/oqJggPCBzaG9ydGhhbmQ7CivnlKjmiLbmlbjmk5ogPCB1c2VyXC1kYXRhOwor5b6Q5q2lIDwgdG9cLXN0cm9sbDsKK+ilv+mdoiA8IHdlc3RcLXNpZGU7CivpgKPmjqXlmaggPCBjb25uZWN0b3I7CivmkZjpmaQgPCB0b1wtZXhjaXNlOwor6K2m5a6YIDwgY29uc3RhYmxlOwor6ZaL55m85Lq65ZOhIDwgZGV2ZWxvcGVyOwor5ZCN5Lq6IDwgcGVyc29uYWdlOwor6JST5bu2IDwgdG9cLWV4dGVuZDsKK+WcsOizquWtuOWutiA8IGdlb2xvZ2lzdDsKK+WQjOS6iyA8IGNvbGxlYWd1ZTsKK+W9ouWuuei+rSA8IGFkamVjdGl2ZTsKK+WNiuaXlyA8IGhhbGZcLW1hc3Q7Civph5HljKAgPCBnb2xkc21pdGg7CivlkIzkuIAgPCBpZGVudGljYWw7Civlj6/lvpfliLAgPCBhdmFpbGFibGU7CivnorDlt6cgPCBieVwtY2hhbmNlOwor56eR5a245a62IDwgc2NpZW50aXN0Owor5pmu5Y+KIDwgd2lkZXNwZWFkOwor6Kit572uIDwgdG9cLXNldFwtdXA7Civlv5fpoZjogIUgPCB2b2x1bnRlZXI7Civnh5Lnh6wgPCBidXJuXC1kb3duOwor5piO5bm0IDwgbmV4dFwteWVhcjsKK+aTpumCiueQgyA8IGVkZ2VcLWJhbGw7Civlj6TlhbggPCBjbGFzc2ljYWw7Civlj6vlgZogPCBiZVwtY2FsbGVkOwor57ag6Iy2IDwgZ3JlZW5cLXRlYTsKK+aAjum6vOaooyA8IGhvd1wtYWJvdXQ7CivmiYDmnInmrIogPCBvd25lcnNoaXA7CivliKXomZUgPCBlbHNld2hlcmU7Civov7Doqp4gPCBwcmVkaWNhdGU7Civnmb3loLHntJkgPCBuZXdzcHJpbnQ7CivpmLLooZsgPCB0b1wtZGVmZW5kOwor6KiO6KuW5pyDIDwgc3ltcG9zaXVtOwor5pWZ54i2IDwgZ29kZmF0aGVyOwor5Y+X5YOxIDwgbWVyY2VuYXJ5Owor6Kqe5rqQIDwgZXR5bW9sb2d5Owor6Kqq5rOVIDwgc3RhdGVtZW50Owor5Z+O6ZaAIDwgY2l0eVwtZ2F0ZTsKK+aOpeWPl+iAhSA8IHJlY2lwaWVudDsKK+eUn+eJqeWtuOWutiA8IGJpb2xvZ2lzdDsKK+mdiOaVjyA8IHNlbnNpdGl2ZTsKK+WKqeeQhiA8IGFzc2lzdGFudDsKK+avj+WAi+S6uiA8IGV2ZXJ5Ym9keTsKK+S4jeiCsuaApyA8IHN0ZXJpbGl0eTsKK+aqouafpeWToSA8IGluc3BlY3RvcjsKK+irluaWtyA8IGluZmVyZW5jZTsKK+WPl+S6iyA8IHJlY2VwaWVudDsKK+eGrOeFjiA8IHN1ZmZlcmluZzsKK+WIhuiZnyA8IHNlbWljb2xvbjsKK+WOn+WRiiA8IGNvbXBsYWludDsKK+eZvemtmiA8IHdoaXRlZmlzaDsKK+ihqOePvuWeiyA8IHBoZW5vdHlwZTsKK+WkmuaooyA8IGRpdmVyc2l0eTsKK+WkmuaooSA8IG11bHRpbW9kZTsKK+eEoeiDvSA8IGluYWJpbGl0eTsKK+eZvemrlCA8IGxlYW5cLXR5cGU7CivmqJnpq5ggPCBlbGV2YXRpb247CivlppblqpogPCBzZWR1Y3RpdmU7CivnhKHogbIgPCBub2lzZWxlc3M7CivljYHlubQgPCB0ZW5cLXllYXJzOwor5Y2K5bO2IDwgcGVuaW5zdWxhOwor5LiN5Y+v56Oo5ruFIDwgaW5kZWxpYmxlOwor6YCj57qMIDwgY29udGlub3VzOwor5Y6f5YmHIDwgcHJpbmNpcGxlOwor55qu6Z6L5YygIDwgc2hvZW1ha2VyOwor6Zi/5q+U6KW/5bC85LqeIDwgYWJ5c3NpbmlhOwor6YSt5beeIDwgemhlbmd6aG91Owor6KiI562WIDwgc3RyYXRhZ2VtOwor5bqV57eaIDwgdW5kZXJsaW5lOwor6ZaD6Zu7IDwgbGlnaHRuaW5nOwor5byV5rihIDwgZXh0cmFkaXRlOwor5L+d6K236ICFIDwgcHJvdGVjdG9yOwor5pWZ5q+NIDwgZ29kbW90aGVyOwor5paH5piOIDwgY2l2aWxpemVkOwor5YG95ZCb5a2QIDwgaHlwb2NyeXRlOwor55u06Ka6IDwgaW50dWl0aW9uOwor5aOB54eIIDwgd2FsbFwtbGFtcDsKK+eZvOmfsyA8IHByb25vdW5jZTsKK+WOmOWFiyA8IGNlbnRpZ3JhbTsKK+mmrOi5hOmQtSA8IGhvcnNlc2hvZTsKK+aTlOaetuW6iiA8IHN0cmV0Y2hlcjsKK+eEoeexnyA8IHNjb3VuZHJlbDsKK+WKoOa3sSA8IHRvXC1kZWVwZW47Civln7fooYwgPCBpbXBsZW1lbnQ7Civpm7nmmrQgPCBoYWlsc3Rvcm07Civnorrkv6EgPCBjb25maWRlbnQ7CivpgqPmqKMgPCB0aGF0XC1raW5kOwor5YWs6YeMIDwga2lsb21ldGVyOwor6Kqg5pGvIDwgc2luY2VyZWx5Owor5beu6LedIDwgZGlzcGFyaXR5Owor5LiN5Lqm5qiC5LmOIDwgZXh0cmVtZWx5Owor6KWv6KOZIDwgcGV0dGljb2F0Owor6bC+6IagIDwgaXNpbmdsYXNzOwor5oyJ54Wn5a2X6Z2iIDwgbGl0ZXJhbGx5Owor6K2J5Lu2IDwgcGFwZXJ3b3JrOwor57Sw6I+MIDwgYmFjdGVyaWFsOwor6JK85aSpIDwgZmlybWFtZW50Owor5LiJ5YiG5LmL5LiAIDwgb25lXC10aGlyZDsKK+e3qeayliA8IHRvXC1idWZmZXI7CivpgbjmtL4gPCBzZXRcLWFwYXJ0Owor5LiN5a6M5ZaEIDwgaW1wZXJmZWN0Owor5aSn5b+XIDwgaGlnaFwtYWltczsKK+i8lOmfsyA8IGNvbnNvbmFudDsKK+W8teaPmiA8IHB1YmxpY2l6ZTsKK+ino+eivCA8IHRvXC1kZWNvZGU7Civmkq3nqK4gPCBzb3dcLXNlZWRzOwor5YyW5a24IDwgY2hlbWlzdHJ5Owor5aCx57SZIDwgbmV3c3BhcGVyOwor54Sh55+lIDwgaWdub3JhbmNlOwor5o6l6aeBIDwgdG9cLWFjY2VzczsKK+S4jeWPr+aVkeiXpSA8IGluY3VyYWJsZTsKK+W+iOWkmiA8IHZlcnlcLW1hbnk7CivogLbot6/mkpLlhrcgPCBqZXJ1c2FsZW07Civpm5nmlrkgPCBiaWxhdGVyYWw7CivmmbTpm6jooaggPCBiYXJvbWV0ZXI7CivljYPnpqflubQgPCBtaWxsZW5pdW07CivplbfpgaAgPCBsb25nXC10ZXJtOwor5Y2D5ZGoIDwga2lsb2hlcnR6Owor6YGO5r++IDwgdG9cLWZpbHRlcjsKK+iku+eAhueahOipsSA8IGJsYXNwaGVteTsKK+Wlh+WmmSA8IGZhbnRhc3RpYzsKK+WGsOiTiyA8IGljZVwtc2hlZXQ7CivlnIvlhafmiLDniK0gPCBjaXZpbFwtd2FyOwor5Y2x5Zyw6aas5ouJIDwgZ3VhdGFtYWxhOwor6YGZ5risIDwgdGVsZW1ldHJ5Owor5o6l54+t5Lq6IDwgc3VjY2Vzc29yOwor6L6y6IiNIDwgZmFybWhvdXNlOwor5Ymq6LK857C/IDwgc2NyYXBib29rOwor5YGJ5pm25bKpIDwgcGVnbWF0aXRlOwor57SF6JOuIDwgcmVkXC1sb3R1czsKK+aMh+ekuuespiA8IGluZGljYXRvcjsKK+WFseitmCA8IGNvbnNlbnN1czsKK+WKoOWvhuW+jOeahCA8IGVuY3J5cHRlZDsKK+acieaUu+aTiuaApyA8IG9mZmVuc2l2ZTsKK+Wkp+WwjyA8IGRpbWVuc2lvbjsKK+aDoeWQjeaYreW9sCA8IG5vdG9yaW91czsKK+S/neaDoOW4qyA8IGNvbWZvcnRlcjsKK+Wkp+WutiA8IGF1dGhvcml0eTsKK+eIreWPliA8IGZpZ2h0XC1mb3I7Civmr4/lpKkgPCBldmVyeVwtZGF5Owor57aT5r+f5a245a62IDwgZWNvbm9taXN0Owor5pS75pOKIDwgdG9cLWF0dGFjazsKK+e0heiMtiA8IGJsYWNrXC10ZWE7CivmloflrZcgPCBjaGFyYWN0ZXI7CivluLjntqAgPCBldmVyZ3JlZW47Civmrpjlu6IgPCBkZWZvcm1pdHk7CivpmrHmmaYgPCBvYnNjdXJpdHk7Civlu7rnr4nluKsgPCBhcmNoaXRlY3Q7CivnhafmqKMgPCBhc1wtYmVmb3JlOwor5pa55ZCRIDwgZGlyZWN0aW9uOwor54Sw54GrIDwgZmlyZXdvcmtzOwor5pWR5oGpIDwgc2FsdmF0aW9uOwor6Zi/56m65Yqg55OcIDwgYWNvbmNhZ3VhOwor5Yqg5ouJ5aSq5pu4IDwgZ2FsYXRpYW5zOwor5b6M5YukIDwgbG9naXN0aWNzOwor5aeU5ZOh5pyDIDwgY29tbWl0dGVlOwor57ay6Zqb6Imy5oOFIDwgY3liZXJwb3JuOwor6L6m572qIDwgdG9cLXB1bmlzaDsKK+imgee3iiA8IGltcG9ydGFudDsKK+awkeS4uyA8IGRlbW9jcmFjeTsKK+WLmeWvpiA8IHByYWdtYXRpYzsKK+aOqOmKtyA8IHRvXC1tYXJrZXQ7CivlvZnloLEgPCB0b1wtcmVwb3J0Owor6KaB57SgIDwgZXNzZW50aWFsOwor6Iiq5rW36ICFIDwgbmF2aWdhdG9yOwor5aSi5aKDIDwgZHJlYW1sYW5kOwor6Kqy5aCCIDwgY2xhc3Nyb29tOwor5aCx55WMIDwgdGhlXC1wcmVzczsKK+WNgeS4gyA8IHNldmVudGVlbjsKK+eBq+iXpSA8IGd1bnBvd2RlcjsKK+iouuaWtyA8IGRpYWdub3NpczsKK+avq+WFiyA8IG1pbGxpZ3JhbTsKK+WJr+acrCA8IGR1cGxpY2F0ZTsKK+iKseeyiemBjuaVjyA8IGhheVwtZmV2ZXI7Civlu6Pmkq0gPCBicm9hZGNhc3Q7CivmlZflsYAgPCBsb3N0XC1nYW1lOwor6YOK5aSWIDwgb3V0c2tpcnRzOwor55m96KCfIDwgd2hpdGVcLXdheDsKK+WHuuePviA8IHRvXC1hcHBlYXI7CivlhrDns5UgPCBpY2VcLWNyZWFtOwor5YWB6KixIDwgdG9cLXBlcm1pdDsKK+Wwj+WQg+W6lyA8IHNuYWNrXC1iYXI7Civlvozku6MgPCBwb3N0ZXJpdHk7Civntq3lo6vljaEgPCB2aXNhXC1jYXJkOwor54K65pmC6YGO5pepIDwgcHJlbWF0dXJlOwor6IGv5ZCI57WE57mUIDwgc3luZGljYXRlOwor5qeL6YCgIDwgc3RydWN0dXJlOwor6b2zIDwgdG9vdGhsZXNzOwor6b2tIDwgdG9vdGhhY2hlOwor5aW95aWH5b+DIDwgY3VyaW9zaXR5Owor5Yu+5YqDIDwgdG9cLXNrZXRjaDsKK+S6uueJqeaPj+WvqyA8IHBvcnRyYXlhbDsKK+WinuaPtCA8IHJlaW5mb3JjZTsKK+eEoeavlCA8IG1hdGNobGVzczsKK+aVmeWjqyA8IGNodXJjaG1hbjsKK+asoeaVuCA8IGZyZXF1ZW5jeTsKK+Wkp+WKmyA8IGVuZXJnZXRpYzsKK+aUv+ayu+aApyA8IHBvbGl0aWNhbDsKK+a7kem8oOWiiiA8IG1vdXNlXC1wYWQ7Civlo6/lpKcgPCB0b1wtZXhwYW5kOwor6be+IDwgYVwtc3dhbGxvdzsKK+m3rSA8IHdhdGVyXC1oZW47Civmi5znianmlZkgPCBmZXRpc2hpc207CivpgbXlvqogPCB0b1wtZm9sbG93Owor6belIDwgdGhlXC1lZ3JldDsKK+mBqeaEjyA8IGFncmVlYWJsZTsKK+m3jyA8IGJpcmRcLW5hbWU7CivptqEgPCBjcm9zc2JpbGw7Civoqr/lgZwgPCByZWNvbmNpbGU7CivptbcgPCBjb1wtd29ya2VyOwor5bmy5raJIDwgaW50ZXJmZXJlOwor6bOiIDwgc25ha2VoZWFkOwor56S+5pyD5Li7576p6ICFIDwgc29jaWFsaXN0Owor5L2O6YCf546HIDwgbG93XC1zcGVlZDsKK+myjiA8IGtpbmdcLWNyYWI7CivpsbcgPCBjcm9jb2RpbGU7Civli6Tli4kgPCBkaWxpZ2VuY2U7CivmrL7lvoUgPCBlbnRlcnRhaW47Civku6TkurrmrL3kvakgPCBhZG1pcmFibGU7Civpr6AgPCB0b1wtY29uZmVyOwor55m86Iq9IDwgZ2VybWluYXRlOwor6a6mIDwgc25ha2VmaXNoOwor5pKl5q2jIDwgc2V0XC1yaWdodDsKK+mtniA8IGZpc2hcLXRyYXA7CivpmL/lpYfph4zmlq8gPCBhZXNjaHlsdXM7Civlo73lkb0gPCBsaWZlXC1zcGFuOwor6ayWIDwgd2lsZFwtaGFpcjsKK+mrpyA8IGxvbmdcLWhhaXI7Civpq5cgPCB0aGVcLXNrdWxsOwor5o+Q5pGp5aSq5ZCO5pu4IDwgMlwtdGltb3RoeTsKK+mqrSA8IHNoaW5cLWJvbmU7CivmlL/msrvlsYAgPCBwb2xpdGJ1cm87CivntpPmlocgPCBzY3JpcHR1cmU7Civpm7bllK7llYYgPCB0cmFkZXNtYW47CivmlbLlhaUgPCB0b1wta2V5XC1pbjsKK+maiuW9oiA8IGZvcm1hdGlvbjsKK+mopyA8IHRhblwtaG9yc2U7CivpqJAgPCB0b1wtdmVyaXR5Owor5aSp5LiKIDwgY2VsZXN0aWFsOwor6ae4IDwgZ2FsbG9waW5nOwor5pS/5rK75a62IDwgc3RhdGVzbWFuOwor6aWgIDwgcmljZVwtY2FrZTsKK+i+pueQhiA8IHRvXC1oYW5kbGU7CivppLEgPCBkcnlcLWdvb2RzOwor5a6J5YWo5bi2IDwgc2VhdFwtYmVsdDsKK+Wtn+WKoOaLieiqniA8IGJlbmdhbGVzZTsKK+iou+WumiA8IGJlXC1kb29tZWQ7CivnhKHmlbggPCBjb3VudGxlc3M7CivmlLblm54gPCB0b1wtcmVnYWluOwor5aSW5LqkIDwgZGlwbG9tYWN5Owor6YGO5bqmIDwgZXhjZWVkaW5nOwor5pON5oyBIDwgdG9cLW1hbmFnZTsKK+eZu+W7o+WRiiA8IGFkdmVydGlzZTsKK+aqoua4rCA8IHRvXC1kZXRlY3Q7Civnn67lh7MgPCBsb3dcLXN0b29sOwor6ZqO5bGkIDwgaGllcmFyY2h5Owor6Z2qIDwgdG9cLWNvYmJsZTsKK+mmmeaqs+mFkiA8IGNoYW1wYWduZTsKK+mdpyA8IHdhc2hcLWZhY2U7Civoh7Ppq5ggPCBwYXJhbW91bnQ7CivpnYAgPCBkcml6emxpbmc7CivmjpLooYwgPCBzZW5pb3JpdHk7CivpnIIgPCBmaW5lXC1yYWluOwor5YmN5b6AIDwgbGVhdmVcLWZvcjsKK+aVmeWEgCA8IG9yZGluYW5jZTsKK+apn+aisOijnee9riA8IG1hY2hpbmVyeTsKK+magyA8IHRvXC1leGNlZWQ7CivlorPlopMgPCBzZXB1bGNoZXI7CivntpzlkIjmgKcgPCBzeW50aGVzaXM7Civlhaznp4kgPCBraWxvbGl0ZXI7CivpmLvmkpMgPCB0b1wtdGh3YXJ0Owor5YKz6YCBIDwgdG9cLWNvbnZleTsKK+mWuiA8IGxvb2tcLWRvd247Civpgbrlm5EgPCB0ZXN0YW1lbnQ7CivmraHlkbwgPCBjaGVlclwtZm9yOwor6ZSrIDwgYmVya2VsaXVtOwor6ZSGIDwgemlyY29uaXVtOwor6ZK2IDwgY29sdW1iaXVtOwor6YGK5a6iIDwgdHJhdmVsbGVyOwor6ZKMIDwgcnV0aGVuaXVtOwor5pGB6YeY5YWSIDwgdGh1bWJ0YWNrOwor6ZKBIDwgYVwtbWF0dG9jazsKK+aWh+WFt+WVhiA8IHN0YXRpb25lcjsKK+aWsOWKoOWdoSA8IHNpbmdhcG9yZTsKK+WfjueJhiA8IGNpdHlcLXdhbGw7CivlhafnorwgPCB0b1wtZW5jb2RlOwor6ZC7IDwgZHJ1bXN0aWNrOwor5pGn5q6YIDwgdG9cLXJhdmFnZTsKK+aSnuaTiiA8IHRvXC1zdHJpa2U7CivliqDliocgPCBhZ2dyYXZhdGU7Civpj5sgPCB0b1wtcG9saXNoOwor6Zi75oqXIDwgaW1wZWRhbmNlOwor5o2Q6LSIIDwgdG9cLWRvbmF0ZTsKK+iHqumhmCA8IHZvbHVudGFyeTsKK+mOvyA8IG5lcHR1bml1bTsKK+aoueeariA8IHRyZWVcLWJhcms7Civpjp4gPCBwbG93c2hhcmU7Civpmqjlk6EgPCBhdHRlbmRhbnQ7CivlhYnnrYYgPCBsaWdodFwtcGVuOwor5aCx5pSkIDwgbmV3c3N0YW5kOwor5Ye65pa8IDwgYmVcLWR1ZVwtdG87CivnhKHlvaIgPCBpbnZpc2libGU7Civoo53nva4gPCBlcXVpcG1lbnQ7CivpiIwgPCB0b1wtcGllcmNlOwor5pWF5LqLIDwgbmFycmF0aXZlOwor5YWx55SiIDwgY29tbXVuaXN0Owor5o6o57+7IDwgb3ZlcnRocm93Owor6aCY5LqL6aSoIDwgY29uc3VsYXRlOwor5ZyS6JedIDwgZ2FyZGVuaW5nOwor5YqD5YiGIDwgdG9cLWRpdmlkZTsKK+WCs+iomCA8IGJpb2dyYXBoeTsKK+i/t+aDkSA8IHRvXC1wdXp6bGU7CivliqDkuIogPCB0b1wtcHV0XC1pbjsKK+i8mCA8IGFcLWNhclwtcnV0Owor6YCa5a61IDwgb3Zlcm5pZ2h0Owor6LuEIDwgdG9cLWdvdmVybjsKK+i6lCA8IGZvbGxvd1wtaW47Civlu6PlgrMgPCBwcm9wYWdhdGU7CivnmbznlJ8gPCB0b1wtaGFwcGVuOwor6LepIDwgdG9cLXdhZGRsZTsKK+i2heiBr+e1kCA8IGh5cGVybGluazsKK+i2nSA8IHRvXC1wdXJzdWU7Civotb8gPCBsYXRlXC1zbG93Owor57WE5oiQIDwgY29tcG9uZW50Owor5o6l566hIDwgdGFrZVwtb3ZlcjsKK+ixtSA8IHlvdW5nXC1waWc7CivnuL3mnIPmnIPplbcgPCBwcmVzaWRlbnQ7CivpmoblhqwgPCBtaWR3aW50ZXI7Civlh7nluqYgPCBjb25jYXZpdHk7CivmvKvplbcgPCB2ZXJ5XC1sb25nOwor55WM6Z2iIDwgaW50ZXJmYWNlOwor5Ym15L2cIDwgdG9cLWNyZWF0ZTsKK+WIsOebruWJjeeCuuatoiA8IHVudGlsXC1ub3c7CivorYogPCB3cmFuZ2xpbmc7CivorYUgPCB3cmlnZ2xpbmc7Civoq50gPCBrbm93bGVkZ2U7Civmr6vnhKHnlpHllY8gPCBjZXJ0YWludHk7CivntpzlkIggPCBjb21wb3NpdGU7CivmiqvpnLIgPCB0b1wtcmV2ZWFsOwor55yL5b6FIDwgbG9va1wtdXBvbjsKK+mZt+WFpSA8IHNpbmtcLWludG87CivoobDokL0gPCBkZWNvbXBvc2U7CivmkqXlpY8gPCBwaXp6aWNhdG87Civov6vlrrMgPCBwZXJzZWN1dGU7CivpgLLljJYgPCBldm9sdXRpb247CivmtYHooYzmgKfmhJ/lhpIgPCBpbmZsdWVuemE7Civoo7IgPCB3YWlzdGNvYXQ7Civovq/miY0gPCBlbG9xdWVuY2U7Civoh6rosqAgPCBjb25jZWl0ZWQ7CivonowgPCBhXC1zdHJpcGVkOwor5biC5pS/IDwgbXVuaWNpcGFsOwor5YS854S2IDwganVzdFwtbGlrZTsKK+S/neeah+m7qCA8IHJveWFsaXN0czsKK+e1leWmmSA8IGV4cXVpc2l0ZTsKK+adseWMl+aWuSA8IG5vcnRoZWFzdDsKK+aKlemZjSA8IHN1cnJlbmRlcjsKK+ewveeroCA8IHNpZ25hdHVyZTsKK+iYniA8IHdpbGRcLXZpbmU7CivntoHljKogPCBraWRuYXBwZXI7CivnhKHlipsgPCBwb3dlcmxlc3M7Civlpb3okIrloaIgPCBob2xseXdvb2Q7Civmk5Tkv50gPCBndWFyYW50ZWU7CivmjqjnkIYgPCByZWFzb25pbmc7CivolZcgPCBsZXVjYWNlbmU7Civlm6DogIwgPCB0aGVyZWZvcmU7CivpgIblkJEgPCBiYWNrd2FyZHM7Civok4YgPCBzdHJhd1wtbWF0Owor5oyJ6JqKIDwgYW5vcGhlbGVzOwor5qij5qmfIDwgcHJvdG90eXBlOwor6JKiIDwgaGVkeXNhcnVtOwor5Yio5YawIDwgd2F0ZXJcLWljZTsKK+W4tuWvrCA8IGJhbmR3aWR0aDsKK+iRkyA8IHZlZ2V0YWJsZTsKK+eVsOitsCA8IG9iamVjdGlvbjsKK+imj+WumiA8IHByb3Zpc2lvbjsKK+WxlemWiyA8IHRvXC11bmZvbGQ7CivovKrmtYEgPCBhbHRlcm5hdGU7CivmjIHkuYXmgKcgPCBjb25zdGFuY3k7CivlgrPntbEgPCB0cmFkaXRpb247CivlgY/oposgPCBwcmVqdWRpY2U7Civnmb3ooYDnl4UgPCBsZXVrYWVtaWE7CivlhajkuJbnlYwgPCB3b3JsZHdpZGU7CivlnLDnkIYgPCBnZW9ncmFwaHk7CivlnLDnkIMgPCB0aGVcLWVhcnRoOwor6IuZIDwgYVwtcGlnXC1zdHk7CivoirwgPCB0b1wtY2hvb3NlOwor6ZmN5L2OIDwgdG9cLXJlZHVjZTsKK+S/nemaqiA8IGluc3VyYW5jZTsKK+S/nemanCA8IHRvXC1lbnN1cmU7CivoiaMgPCBzdGVyblwtb2FyOwor5aC05ZCIIDwgc2l0dWF0aW9uOwor6ImOIDwgZmFzdFwtYm9hdDsKK+WgseWRiiA8IHRvXC1pbmZvcm07CivoiJ0gPCBsaW5jaFwtcGluOwor6IiYIDwgYVwtbWFuc2lvbjsKK+iHryA8IHRvXC1wcmFpc2U7CivmvrPlpKfliKnkup4gPCBhdXN0cmFsaWE7CivlhazmlpcgPCBkZWNhbGl0ZXI7Civov5Tlm54gPCByZXR1cm5cLXRvOwor5aSn5a+r6Y6W5a6aIDwgY2Fwc1wtbG9jazsKK+WIhuWJsiA8IHRvXC1jdXRcLXVwOwor6IOmIDwgdGhlXC1uYXZlbDsKK+aJgemqqCA8IGZsYXRcLWJvbmU7CivogKUgPCBmYXJtXC10b29sOwor5762IDwgcmFua1wtb2RvcjsKK+S/nemPoiA8IGJvZHlndWFyZDsKK+i3kemMtiA8IHN0b3B3YXRjaDsKK+e0meWkviA8IHBhcGVyY2xpcDsKK+e9gSA8IGFcLWNpc3Rlcm47CivnmbzmmI4gPCB0b1wtaW52ZW50Owor5qih5pOsIDwgaW1pdGF0aW9uOwor5Y2K5bel5Y2K6K6AIDwgcGFydFwtd29yazsKK+a/gOeZvCA8IHRvXC1hcm91c2U7Civlho3luqYgPCBvbmNlXC1tb3JlOwor57O+5a+fIDwgdG9cLXBpY2tldDsKK+aLt+iKsSA8IHRvXC1lbWJvc3M7CivmiJHlgJHoh6rlt7EgPCBvdXJzZWx2ZXM7CivmvZvoiYcgPCBzdWJtYXJpbmU7Civov7fkvY8gPCBmYXNjaW5hdGU7Civoib7ngrcgPCBtb3hhXC1jb25lOwor5Zua56aBIDwgY2FwdGl2aXR5Owor57elIDwgc3dhZGRsaW5nOwor576F5b655pav54m5IDwgcm9jaGVzdGVyOwor5L6/6ZaAIDwgc2lkZVwtZG9vcjsKK+aKl+itsOiAhSA8IHByb3Rlc3RlcjsKK+iho+W4vemWkyA8IGNsb2Frcm9vbTsKK+S4gOWMuemmrCA8IG9uZVwtaG9yc2U7CivmnInmmYLlgJkgPCBzb21ldGltZXM7Civns7AgPCByaWNlXC1iYWxsOwor57OdIDwgc2NhdHRlcmVkOwor5YCZ6YG45Lq6IDwgY2FuZGlkYXRlOwor566h5bym5qiC5ZyYIDwgb3JjaGVzdHJhOwor5ZCR5YyX5ZywIDwgbm9ydGh3YXJkOwor57GoIDwgdHJvdXNzZWF1Owor5LiL5rG65b+DIDwgZGV0ZXJtaW5lOwor6KaP5Yu4IDwgdG9cLWFkdmlzZTsKK+ihqOeariA8IGVwaWRlcm1pczsKK+ihqOeZvSA8IHZpbmRpY2F0ZTsKK+eZveaXpeWBmuWkoiA8IGRheVwtZHJlYW07Civnq5UgPCBkZWNpbGl0ZXI7Civkv53orYnkurogPCBndWFyYW50b3I7Civnq4YgPCBleGhhdXN0ZWQ7CivnnIvlgZogPCByZWdhcmRcLWFzOwor56qLIDwgaW5cLWFcLWhvbGU7CivnqKwgPCBnbHV0aW5vdXM7CivkuIrmmJ/mnJ8gPCBsYXN0XC13ZWVrOwor5YWH5omLIDwgYXNzYWlsYW50Owor5a+s6aC7IDwgYnJvYWRiYW5kOwor6KW/5Y2XIDwgc291dGh3ZXN0Owor6KW/5YyXIDwgbm9ydGh3ZXN0Owor56S9IDwgYmxlc3NpbmdzOwor56SeIDwgXChtaW5lcmFsXCk7Civnsr7lt6cgPCBlbGFib3JhdGU7CivnrKzkuozljYEgPCB0d2VudGlldGg7CivltoTmlrAgPCBicmFuZFwtbmV3Owor56KGIDwgYXJyb3dcLXRpcDsKK+aJk+mAsiA8IHRvXC1icmVhY2g7CivnoKwgPCBiaWdcLXN0b25lOwor5YWs5a+4IDwgZGVjaW1ldGVyOwor5YWs5a+TIDwgYXBhcnRtZW50Owor5bi45Lu7IDwgcGVybWFuZW50Owor5YWJ5b2pIDwgaG9ub3JhYmxlOwor552h6YGO6aCtIDwgb3ZlcnNsZWVwOwor5oyH56S6IDwgcG9pbnRcLW91dDsKK+eclSA8IHJlc3RyYWludDsKK+eXheeQhiA8IHBhdGhvbG9neTsKK+S7u+S9leWFtuS7liA8IGFueVwtb3RoZXI7Civovpvli54gPCBsYWJvcmlvdXM7CivmkI3lo54gPCB0b1wtZGFtYWdlOwor55itIDwgYVwtd2hpdGxvdzsKK+eYnCA8IGFcLXBvbHlwdXM7Civlt7Tli5Lmlq/lnaYgPCBwYWxlc3RpbmU7Civnl6EgPCBhXC1kaXNlYXNlOwor5Yip5pyq6KiYIDwgbGV2aXRpY3VzOwor56ul5a2Q6LuNIDwgYm95XC1zY291dDsKK+eVsSA8IHRvXC1kZXRhaW47CivlmInoqLEgPCBmYXZvcmFibGU7CivnlYsgPCB0aWxsXC1sYW5kOwor5YWr5aSpIDwgZWlnaHRcLWRheTsKK+eUpiA8IGJlXC1yZWJvcm47Civnk7ggPCBoZWN0b2dyYW07Civmi5LntZUgPCB0b1wtcmVmdXNlOwor6KaB5LiNIDwgb3RoZXJ3aXNlOwor55K/IDwgZmluZVwtamFkZTsKK+aomeWumiA8IGRlbWFyY2F0ZTsKK+eRtCA8IHR3aW5cLWdlbXM7CivnkaMgPCBmcmFnbWVudHM7CivovLvlsIQgPCByYWRpYXRpb247Civlm5vljYHlha0gPCBmb3J0eVwtc2l4Owor5o6S5pS+IDwgZGlzY2hhcmdlOwor6auU54++IDwgdG9cLWVtYm9keTsKK+ihsOa4myA8IHRvXC13ZWFrZW47CivnsYPmnb8gPCBiYWNrYm9hcmQ7CivlnKjvuY3ml4HpgoogPCBhbG9uZ3NpZGU7Civppqzpnq0gPCBob3JzZXdoaXA7CivnjYAgPCB0b1wtZ2F0aGVyOwor56ys5Lmd5Y2BIDwgbmluZXRpZXRoOwor54uzIDwgYXJtYWRpbGxvOwor54e2IDwgdG9cLXNjb3JjaDsKK+eVouernyA8IGFmdGVyXC1hbGw7Civnhr8gPCBicmlsbGlhbnQ7CivlhYjopovkuYvmmI4gPCBmb3Jlc2lnaHQ7CivkvY7pmo4gPCBsb3dcLWxldmVsOwor5omA6KyCIDwgc29cLWNhbGxlZDsKK+a9sOeImyA8IHRvXC1mZXN0ZXI7CivlhLLlrZggPCBzdG9ja3BpbGU7Civou4rliY3nh4ggPCBoZWFkbGlnaHQ7Civmv6kgPCBwb3VyXC1kb3duOwor5o6b5b+1IDwgY29uY2VybmVkOwor5a6H6Iiq5ZOhIDwgYXN0cm9uYXV0Owor6L2f5YuVIDwgc2Vuc2F0aW9uOwor6Ie654eIIDwgZGVza1wtbGFtcDsKK+S9v+WbsOeqmCA8IGVtYmFycmFzczsKK+a5vCA8IGJsYWNrXC1tdWQ7CivmuYUgPCBib2lsXC1zaWxrOwor5repIDwgcGFzc1wtb3ZlcjsKK+WvpuizqiA8IHN1YnN0YW5jZTsKK+maqOS5i+iAjOW+jCA8IGZyb21cLXRoYXQ7CivmtrcgPCByYWluc3Rvcm07CivmtJEgPCB3aGlybHBvb2w7Civlt6flhYvlipsgPCBjaG9jb2xhdGU7CivmnInpm4Tlv4MgPCBhbWJpdGlvdXM7CivmroggPCBpbmZlcnRpbGU7CivmrJUgPCB0cmVlXC1uYW1lOwor5qSN54mpIDwgYm90YW5pY2FsOwor56m66ZiyIDwgYWlyXC1mb3JjZTsKK+WFpeS+tSA8IHRvXC1pbnZhZGU7CivomZXnkIblmaggPCBwcm9jZXNzb3I7CivkuLvnrqHkurrlk6EgPCBleGVjdXRpdmU7CivmqZogPCB0YWxsXC10cmVlOwor5YWs5LiIIDwgZGVjYW1ldGVyOwor6Ly45Ye6IDwgdG9cLWV4cG9ydDsKK+amqiA8IGhlYWRib2FyZDsKK+efpeabtOmzpSA8IHJlZGJyZWFzdDsKK+WVn+ekuuiAhSA8IHJldmVsYXRvcjsKK+i8uOWFpSA8IHRvXC1pbXBvcnQ7CivnrYnnrYkgPCBldFwtY2V0ZXJhOwor56ys5LiJ5Y2BIDwgdGhpcnRpZXRoOwor5qOWIDwgZG9vclwtc3RvcDsKK+ainCA8IGNob3BzdGljazsKK+a/gOaAkiA8IGluZnVyaWF0ZTsKK+agsSA8IGxhcmdlXC1wZWc7CivmoK0gPCBraW5nXC1wb3N0Owor5qCSIDwgY3Jvc3NcLWJhcjsKK+WBnOaziiA8IGFuY2hvcmFnZTsKK+afiCA8IGNvbnRhaW5lcjsKK+aemSA8IHRyZWVcLWtub3Q7Civnmb3pjqLnpKYgPCBzY2hlZWxpdGU7CivmnJ4gPCBmdWxsXC15ZWFyOwor5omL5o+Q5YyFIDwgXChoYW5kXCliYWc7CivmioDooZPmgKcgPCB0ZWNobmljYWw7CivmvLLmva4gPCBoaWdoXC10aWRlOwor5pqNIDwgc3Vuc3Ryb2tlOwor5a626K2cIDwgZ2VuZWFsb2d5Owor6ama55WwIDwgYW1hemVtZW50Owor6LyU5YqpIDwgdG9cLWFzc2lzdDsKK+aXqiA8IHVuaXRlZFwtaW47Civmj5DkvpsgPCB0b1wtc3VwcGx5Owor5LiN6Kqg5a+mIDwgZGlzaG9uZXN0Owor6LGM6LGG57KlIDwgcGVhXC1ncnVlbDsKK+iuiua1geWZqCA8IGNvbnZlcnRlcjsKK+aUiyA8IHRvXC1jbHV0Y2g7CivmlIMgPCBwcmVjZWRpbmc7Civmk5AgPCB0b1wtcHV0XC1vbjsKK+mrlOaTjSA8IGd5bW5hc3RpYzsKK+aRvSA8IHRocm93XC1vdXQ7Civmj5DmkanlpKrliY3mm7ggPCAxXC10aW1vdGh5Owor5pGuIDwgdG9cLXJhdHRsZTsKK+aPpSA8IHNjcmF0Y2hlcjsKK+S+v+euiyA8IG5vdGVwYXBlcjsKK+iBlumkkCA8IHNhY3JhbWVudDsKK+iyoeWLmeenmOabuCA8IHRyZWFzdXJlcjsKK+aJueeZvCA8IHdob2xlc2FsZTsKK+i2lee3iiA8IGh1cnJpZWRseTsKK+aJs+mBk+WToSA8IHBvaW50c21hbjsKK+aJpCA8IHRvXC10aHJ1c3Q7CivpqqjmnrYgPCBmcmFtZXdvcms7CivmiJwgPCB0b1wtc2NyYXBlOwor5YG15o6iIDwgZGV0ZWN0aXZlOwor5YWp5pif5pyfIDwgZm9ydG5pZ2h0Owor5oyR5oiwIDwgY2hhbGxlbmdlOwor5qC85byP5YyWIDwgdG9cLWZvcm1hdDsKK+iiq+WRiiA8IGRlZmVuZGFudDsKK+azouWIqeWwvOilv+S6niA8IHBvbHluZXNpYTsKK+aCgSA8IGlycml0YWJsZTsKK+aBkSA8IHRvXC1jaGFuZ2U7CivmgLogPCB0b1wtZW5kdXJlOwor5oCeIDwgdG9cLWdyaWV2ZTsKK+aAlyA8IG9ic2VydmFudDsKK+aOoeefs+WgtCA8IHN0b25lXC1waXQ7CivliqDli5Lmr5QgPCBjYXJpYmJlYW47Civpm7vloLHmqZ8gPCB0ZWxlZ3JhcGg7Civosp3poZ4gPCBzaGVsbGZpc2g7CivlnKjlhacgPCBpbmNsdWRpbmc7Civmi7/miYsgPCBleHBlcnRcLWluOwor5bel5L2c6KGoIDwgd29ya3NoZWV0Owor5pq06aKo6ZuqIDwgc25vd3N0b3JtOwor56uK6IG9IDwgZWF2ZXNkcm9wOwor5bu+IDwgdHdvXC1oYW5kczsKK+W6iSA8IGFcLXZpbGxhZ2U7CivluakgPCB0cmFwcGluZ3M7CivluZkgPCBhXC1jdXJ0YWluOwor5a6/6IiNIDwgZG9ybWl0b3J5Owor5bGx5rC0IDwgbGFuZHNjYXBlOwor5Zub5aSpIDwgZm91clwtZGF5czsKK+aMuuWlvSA8IHZlcnlcLWdvb2Q7CivnsL3lhaUgPCB0b1wtbG9nXC1vbjsKK+mmrOiDjCA8IGhvcnNlYmFjazsKK+mpleawoyA8IGFycm9nYW5jZTsKK+eWkeW/gyA8IHN1c3BpY2lvbjsKK+a4uuiMqyA8IHVuY2VydGFpbjsKK+WvvSA8IGFcLWhhbmRmdWw7CivmloflrZfmqpQgPCB0ZXh0XC1maWxlOwor5a+YIDwgcHV0XC1hc2lkZTsKK+a/gOWLlSA8IHRvXC1leGNpdGU7Civlq5sgPCBjb21wbGlhbnQ7CivlqqwgPCBnb3Zlcm5lc3M7CivlqpUgPCB1bmRlY2lkZWQ7Civmt7voo5wgPCBmaWxsXC1cKHVwXCk7Civosr/mmJPmiLAgPCB0cmFkZVwtd2FyOwor5aWJ5om/6ICFIDwgZmxhdHRlcmVyOwor55Sf6IKy6IO95YqbIDwgZmVydGlsaXR5Owor5L+u5q2jIDwgdG9cLXJldmlzZTsKK+aMh+aPruiAhSA8IGNvbmR1Y3RvcjsKK+WkjCA8IHRvXC1kYXdkbGU7Civmn5DomZUgPCBzb21ld2hlcmU7CivloZ0gPCBmbGF0XC1iYW5rOwor5Y+D6ICD5pu4IDwgcmVmZXJlbmNlOwor5YWx5Lqr6Luf6auUIDwgc2hhcmV3YXJlOwor6LKo6LyqIDwgZnJlaWdodGVyOwor5Y2K6KGw5pyfIDwgaGFsZlwtbGlmZTsKK+WciiA8IHJlc3RcLXJvb207Civpq5TlnJggPCBjb21tdW5pdHk7CivmirXmipcgPCB0b1wtcmVzaXN0Owor5LiN5Y+X5q2h6L+OIDwgdW53ZWxjb21lOwor5ZmBIDwgbmFzdGluZXNzOwor6aKx6aKoIDwgaHVycmljYW5lOwor5ZiRIDwgdG9cLW1lbmFjZTsKK+aLieaWkOeJuSA8IGxhZmF5ZXR0ZTsKK+i0lue9qiA8IGF0b25lbWVudDsKK+WvteeJqSA8IGhvdXNlXC1wZXQ7CivogZboqpUgPCBjaHJpc3RtYXM7Civlk6sgPCB0b1wtY2Fqb2xlOwor5ZK1IDwgdG9cLXJldmlsZTsKK+S4jee1kOaenCA8IGZydWl0bGVzczsKK+WRpyA8IHRvXC1yZWJ1a2U7CivlgYflrpogPCB0b1wtYXNzdW1lOwor55Sz6KuL5Lq6IDwgYXBwbGljYW50Owor6KGM5YuVIDwgb3BlcmF0aW9uOwor5Li76auUIDwgbWFpblwtcGFydDsKK+aJi+azlSA8IHRlY2huaXF1ZTsKK+a2iOmBoyA8IGFtdXNlbWVudDsKK+WHuueJiOiAhSA8IHB1Ymxpc2hlcjsKK+WPhSA8IHRvXC1jb3VuZWw7CivljpMgPCBwcmVjaXBpY2U7Civlh7nlh7jljbDliLcgPCBlbWJvc3Npbmc7CivlsLHmpa0gPCBnZXRcLWFcLWpvYjsKK+eWhuWfnyA8IHRlcnJpdG9yeTsKK+acrOaYn+acnyA8IHRoaXNcLXdlZWs7CivljJggPCB0aGVcLWJyYWluOwor5YupIDwgd29ya1wtaGFyZDsKK+aAquS4jeW+lyA8IG5vXC13b25kZXI7CivmkpLpg73oqbLkurogPCBzYWRkdWNlZXM7Civmib/mk5QgPCB1bmRlcnRha2U7CivliJQgPCBzY29vcFwtb3V0Owor6Ia95bCPIDwgY293YXJkaWNlOwor5Ye3IDwgZGlydFwtY2xvZDsKK+WHmSA8IGFuXC1pY2ljbGU7CivlibXpgKDlipsgPCBpbmdlbnVpdHk7CivlsazmgKcgPCBhdHRyaWJ1dGU7CivlhYcgPCBhdHJvY2lvdXM7CivkuLvpoIEgPCBob21lXC1wYWdlOwor5Y+v5a655b+NIDwgdG9sZXJhYmxlOwor5pyD6Z2iIDwgbWVldFwtd2l0aDsKK+WCuiA8IHRvXC1oaW5kZXI7CivmiJDngrogPCB0b1wtYmVjb21lOwor5Lqk6Kq8IDwgY29tbXVuaW9uOwor5ZyW5pu4566h55CG5ZOhIDwgbGlicmFyaWFuOwor5Z+65pys5LiKIDwgYmFzaWNhbGx5Owor5L6OIDwgdG9cLXNvb3RoZTsKK+S8uyA8IG1lc3NlbmdlcjsKK+S8iyA8IGRlY2VwdGl2ZTsKK+a9m+WKmyA8IHBvdGVudGlhbDsKK+eou+iNieS6uiA8IHNjYXJlY3JvdzsKK+WtuOerpSA8IHNjaG9vbGJveTsKK+WkmueUqOaItiA8IG11bHRpdXNlcjsKK+iHquWLlSA8IGF1dG9tYXRpYzsKK+WFseeUouS4u+e+qSA8IGNvbW11bmlzbTsKK+S2syA8IHRvXC1sb29rdXA7CivktpEgPCB0b1wtc25lZXplOwor6KCV5YuVIDwgdG9cLXdpZ2dsZTsKK+aJk+aVlyA8IHRvXC1kZWZlYXQ7CivosarosawgPCBwb3JjdXBpbmU7CivkuI3ku6XngrrnhLYgPCBvYmplY3RcLXRvOwor5LO6IDwgdGhlXC1xdWFpbDsKK+a1gemHjyA8IGZsb3dcLXJhdGU7CivksqggPCB3aWxkXC1zd2FuOwor56S+5pyD5Li7576pIDwgc29jaWFsaXNtOwor5LGIIDwgZmlzaFwtcHVscDsKK+SwpSA8IGFcLWN5Y2xvbmU7Civos5zntaYgPCB0b1wtYmVzdG93Owor6Jyc5pyI5YGH5pyfIDwgaG9uZXltb29uOwor5K+mIDwgdGlueVwtYm9uZTsKK+SunCA8IHRvXC1nYWxsb3A7Civmi5vli58gPCB0b1wtcmVjdWl0Owor5K2sIDwgdG9cLWtvd3RvdzsKK+WwjeaWvCA8IHJlZ2FyZGluZzsKK+StmyA8IHRhc3RlbGVzczsKK+StkSA8IGluY29ycnVwdDsKK+WQjOePreWQjOWtuCA8IGNsYXNzbWF0ZTsKK+SstiA8IHRvXC1zdHJhdmU7Civkq7sgPCBhXC10eXBob29uOwor5KuUIDwgYVwtc2VydmFudDsKK+S4iumdoiA8IG9uXC10b3BcLW9mOwor57695q+b55CDIDwgYmFkbWludG9uOwor5KmmIDwgdGhlXC1yZWluczsKK+S6lOiZnyA8IHRoZVwtZmlmdGg7CivkqK0gPCB0aGVcLXNraWVzOwor5KiNIDwgZGVlcFwtcG9uZDsKK+SmtSA8IGluY2FwYWJsZTsKK+SmrCA8IGFcLXZhY2FuY3k7CivkpoYgPCBhXC1iaWdcLWhvZTsKK+aLhuWNuCA8IHRvXC11bmxvYWQ7CivmlZHorbfou4ogPCBhbWJ1bGFuY2U7Civom4vnmb0gPCBlZ2dcLXdoaXRlOwor56ys5Y2B5YWtIDwgc2l4dGVlbnRoOwor5KKxIDwgdG9cLXNsaWdodDsKK+SinyA8IHRvXC10cmF2ZWw7CivlkJ7po58gPCB0b1wtZGV2b3VyOwor5KKNIDwgdG9cLWhhc3RlbjsKK+S9v+eUn+awoyA8IGRpc3BsZWFzZTsKK+iDg+eCjiA8IGdhc3RyaXRpczsKK+WwjeaKlyA8IHdpdGhzdGFuZDsKK+SgsiA8IHRvXC1saXN0ZW47CivkoK8gPCB0b1wtYXNjZW5kOwor5KCuIDwgdG9cLXByYW5jZTsKK+SfuyA8IGJhcmVcLWZlZXQ7Civkn54gPCB0b1wtZmFsdGVyOwor5LiN5YWs5q2jIDwgaW5qdXN0aWNlOwor6ISr5o6JIDwgc3RyaXBcLW9mZjsKK+mmmea4ryA8IGhvbmdcLWtvbmc7Civkn4wgPCBkaXZlcmdpbmc7CivknrwgPCB0b1wtZXNjYXBlOwor5J6SIDwgcmVkXC1jb2xvcjsKK+SekCA8IHBsZW50aWZ1bDsKK+SeiSA8IGFcLXN1cnBsdXM7CivknK0gPCB0b1wtZHJlZGdlOwor5a+m5pmCIDwgcmVhbFwtdGltZTsKK+iCuueCjiA8IHBuZXVtb25pYTsKK+ScnyA8IHRvXC12ZXJpZnk7CivlhYnlsITnt5ogPCBsaWdodFwtcmF5Owor5Ju7IDwgdG9cLWluZHVjZTsKK+SbuSA8IHRvXC1hY2N1c2U7Civkm7MgPCB0b1wtbWFsaWduOwor5JusIDwgYmFieVwtdGFsazsKK+SbqiA8IGxvcXVhY2l0eTsKK+SbiyA8IHRvXC1zY2hlbWU7Civkm4EgPCB0b1wtbXVybXVyOwor5oW256WdIDwgY2VsZWJyYXRlOwor5Jm4IDwgdG9cLW9idGFpbjsKK+WkluWci+S6uiA8IGZvcmVpZ25lcjsKK+SYvCA8IHN0b2NraW5nczsKK+WusOauuiA8IHNsYXVnaHRlcjsKK+esrOWNgeS6lCA8IGZpZnRlZW50aDsKK+SYkSA8IHRoZVwtcHVsc2U7CivklakgPCBkcnlcLWZydWl0Owor5rWq6JWpIDwgdG9cLWxvaXRlcjsKK+SUsyA8IGNoaWNrbGluZzsKK+STsCA8IGFic2ludGhpbjsKK+afkOeJqSA8IHNvbWV0aGluZzsKK+SSiiA8IGFcLXBhdGllbnQ7CivkkaogPCBhXC1zYWlsaW5nOwor5JGTIDwgYVwtbG9va291dDsKK+a0peiyvCA8IGFsbG93YW5jZTsKK+SQuiA8IGRlbGljaW91czsKK+SQmyA8IHRvXC1sb29zZW47CivkkIYgPCBiaWdcLWJlbGx5Owor5I+9IDwgbWVhdFwtcHVscDsKK+SPrCA8IHRoZVwtc3BpbmU7Civkj6AgPCBtZWF0XC1zb3VwOwor5I+eIDwgdGhlXC1iZWxseTsKK+iCneeCjiA8IGhlcGF0aXRpczsKK+SOoSA8IHRvXC1zaHJpbms7CivmtojogJcgPCB0b1wtdXNlXC11cDsKK+SOgyA8IGZpbmVcLWRvd247CivpmL/moLnlu7cgPCBhcmdlbnRpbmE7CivkjY4gPCBhXC1zcGluZGxlOwor5IyyIDwgbGlnaHRcLXJlZDsKK+SMmyA8IGVudG91cmFnZTsKK+SLoCA8IHRvXC1yZXBhaXI7CivkirAgPCBmb29kc3R1ZmY7CivkipwgPCBkdW1wbGluZ3M7CivkibwgPCBtYXRlcmlhbHM7CivkuIrovIkgPCB0b1wtdXBsb2FkOwor6Jit6IqxIDwgY3ltYmlkaXVtOwor5pu46KiYIDwgc2VjcmV0YXJ5Owor5rWq6Ii5IDwgc3dpbmdib2F0Owor5YG95ZaE6ICFIDwgaHlwb2NyaXRlOwor5IeQIDwgdG9cLWFycml2ZTsKK+Wwj+WvqyA8IGxvd2VyY2FzZTsKK+SGkCA8IGFcLWNvdW50cnk7Civonrrml4vmp7MgPCBwcm9wZWxsZXI7CivnlKjlhbcgPCBhcHBsaWFuY2U7Civlj6TpoqggPCBhbnRpcXVpdHk7CivkhYMgPCBsYXRlXC1jcm9wOwor5a6J5q2HIDwgZ29cLXRvXC1iZWQ7Civkg6kgPCBhXC1taW5lcmFsOwor5a625pePIDwgaG91c2Vob2xkOwor5IOVIDwgc3RvbmV3YXJlOwor6Ieq5YuV5qiT5qKvIDwgZXNjYWxhdG9yOwor57eK5oCl5LqL5Lu2IDwgZW1lcmdlbmN5Owor5IOAIDwgbWlsbHN0b25lOwor5L2V5pWFIDwgd2hlcmVmb3JlOwor6IWz5Y2wIDwgZm9vdHByaW50Owor55O35ZmoIDwgY2hpbmF3YXJlOwor6LKv5rC06JmVIDwgcmVzZXJ2b2lyOwor5IGQIDwgZGVlcFwtZXllZDsKK+erpeW5tCA8IGNoaWxkaG9vZDsKK+WNsOW6puWwvOilv+S6niA8IGluZG9uZXNpYTsKK+WNiua1gemrlCA8IHNlbWlmbHVpZDsKK+SArCA8IHRvXC1nbGFuY2U7CivkgKEgPCB0b1wtc3B5XC1vbjsKK+SAkCA8IHRvXC1yZWdhcmQ7CivotbfluoogPCB0b1wtZ2V0XC11cDsKK+O/vyA8IHdpbmVcLWN1cHM7CivmsJHkuLvkuLvnvqnogIUgPCBkZW1vY3JhdHM7Civjv58gPCBoZVwtYnJpZ2h0Owor5b6B5pyN6ICFIDwgY29ucXVlcm9yOwor476lIDwgYmVsbHlhY2hlOwor476jIDwgdG9cLXNoaXZlcjsKK+S7iueUnyA8IHRoaXNcLWxpZmU7CivmjZXpvKDlmaggPCBtb3VzZXRyYXA7CivjvZ4gPCB0b1wtcmVtYWluOwor472JIDwgYVwtYmlnXC1qYXI7CivjvLogPCBwb3JjZWxhaW47CivororoibLpvo0gPCBjaGFtZWxlb247CivjvJogPCBlYXJ0aHdhcmU7CivlsI3mipfogIUgPCBhZHZlcnNhcnk7CivmnKzogbcgPCBvbmUnJ3NcLWpvYjsKK+mAgOm7kea/gOe0oCA8IG1lbGF0b25pbjsKK+iDjOaWnCA8IGFudGljbGluZTsKK+aatOi6gSA8IGlyYXNjaWJsZTsKK+axoOm5vSA8IGxha2VcLXNhbHQ7CivoloTmsrnlsaQgPCBvaWxcLXNoZWV0Owor5LiN6KixIDwgbm90XC1hbGxvdzsKK+WVhuaomSA8IHRyYWRlbWFyazsKK+mjr+eilyA8IHJpY2VcLWJvd2w7CivnhKHnn6XoprogPCBzZW5zZWxlc3M7CivmmaTpnaIgPCBpbnRlcnZpZXc7Civph43plosgPCB0b1wtcmVvcGVuOwor47WUIDwgbm90XC1jbGVhcjsKK+iuiumdqSA8IHRyYW5zZm9ybTsKK+O0gSA8IHRvXC1hZGRcLXRvOwor55m95LqR5q+NIDwgbXVzY292aXRlOwor47OoIDwgdG9cLXNwbGFzaDsKK+aIquWlqiA8IGludGVyY2VwdDsKK+W9q+WIu+WTgSA8IHNjdWxwdHVyZTsKK+a3seawtCA8IGRlZXB3YXRlcjsKK+OwliA8IHRoZVwtb2xpdmU7Civjr7ogPCBhXC1jYWJpbmV0Owor6K6K54Sm6Led6Y+h6aCtIDwgem9vbVwtbGVuczsKK+OvryA8IHNtYWxsXC1jdXA7Civjr50gPCBwYXVsb3duaWE7CivjrpkgPCBhXC1waXRmYWxsOwor462iIDwgbWVjaGFuaWNzOwor6LW35aeLIDwgb3JpZ2luYXRlOwor46y/IDwgbW9vbmxpZ2h0Owor56WH6K6AIDwgcmVhZFwtb25seTsKK+OsqyA8IGNsZWFyXC1za3k7CivkuIDljYPlmbggPCAxMDAwXC10b25zOwor5LiN6KaP5YmHIDwgaXJyZWd1bGFyOwor5rOi54uA6ZuyIDwgdW5kdWxhdHVzOwor5a245pyDIDwgaW5zdGl0dXRlOwor46qIIDwgdG9cLWxldFwtZ287CivjqZIgPCB0b1wtYXJyZXN0Owor46mHIDwgdGhlXC10aHVtYjsKK+OotiA8IHRvXC10aHJlc2g7CivjqIkgPCB0b1wtc21vb3RoOwor46epIDwgdG9cLWRpc3BlbDsKK+OnlyA8IHRvXC1jbGF0Y2g7CivvprsgPCBvZmZpY2lhbHM7Civjpq8gPCBhXC1jZXJ0YWluOwor46aWIDwgcmVzZW50ZnVsOwor46W+IDwgbW9ydGlmaWVkOwor46WzIDwgdG9cLXN1cnZleTsKK+OlpiA8IHNhdGlzZmllZDsKK+OlgCA8IGV4Y2x1c2l2ZTsKK+OktSA8IGNvcGFzc2lvbjsKK+acq+erryA8IGV4dHJlbWl0eTsKK+OkhyA8IHRlcnJpZmllZDsKK+OkhiA8IG5hdXNlYXRlZDsKK+OjuiA8IHRoZVwtaGVhcnQ7Civnk5zliIYgPCBwYXJ0aXRpb247CivjoqEgPCB0b1wtZXhob3J0Owor46G8IDwgYVwtZ3JhbmFyeTsKK+OhuiA8IGFcLWNvdHRhZ2U7CivjoZcgPCByZWRcLXBhcGVyOwor46CYIDwgYW5cLWlzbGFuZDsKK+a2jOePviA8IHNwcmluZ1wtdXA7Civnpq7nr4AgPCBldGlxdWV0dGU7CivororphpwgPCBkaXNmaWd1cmU7CivjnLsgPCB0b1wtYWRtaXJlOwor6JyC5beiIDwgaG9uZXljb21iOwor45yYIDwgZGVsaWNhdGVkOwor45yPIDwgbGFzdFwtbmFtZTsKK+S4ree+jiA8IGNoaW5hXC11c2E7Civjm74gPCBub3RcLWNsZWFuOwor5pqX6KqeIDwgY29kZVwtd29yZDsKK+aTtOmfs+WZqCA8IG1lZ2FwaG9uZTsKK+S4jeimi+S6hiA8IGRpc2FwcGVhcjsKK+OasCA8IGFuXC1lbWJyeW87CivjmpsgPCBjb3JwdWxlbnQ7CivjmpggPCBhXC1wYXJ0bmVyOwor6YeN6LmIIDwgdG9cLXJlcGVhdDsKK+OYoyA8IGNvbXBhc3NlczsKK+OXsyA8IGZvcmdldGZ1bDsKK+S5neaciOS7vSA8IHNlcHRlbWJlcjsKK+i2heaWh+acrCA8IGh5cGVydGV4dDsKK+Wfuuedo+aVmeW+kiA8IGNocmlzdGlhbjsKK+OVuSA8IGFcLWJ1Y2tsZXI7CivjlZUgPCBkZWNlcHRpb247CivjlZEgPCBhXC1raXRjaGVuOwor5LyR5oiwIDwgYXJtaXN0aWNlOwor45WLIDwgcm9ja1wtbGFuZDsKK+OViCA8IHRvXC1saW5nZXI7CivjlKcgPCB0b1wtaW5jaXRlOwor6K6A5pu45Lq6IDwgYVwtc2Nob2xhcjsKK+OTiyA8IHRvXC1mcmVlemU7Civjk4QgPCB0b1wtcGxvdWdoOwor5Y+b6LOjIDwgdG9cLWJldHJheTsKK+ORpyA8IHBlcnR1cmJlZDsKK+ORhCA8IHRvXC1pbnN1bHQ7CivjkK8gPCB0b1wtZW1wbG95Owor5Ly45bGVIDwgZXh0ZW5zaW9uOwor5LiA6Ie0IDwgdW5hbmltb3VzOwor5byV55So5Y+lIDwgcXVvdGF0aW9uOwor6ICB54mMIDwgb2xkXC1icmFuZDsKK+WmlumiqCA8IGV2aWxcLXdpbmQ7CivpjLbluLYgPCB3YXRjaGJhbmQ7CivmuJvlsJEgPCB0b1wtbGVzc2VuOwor5pyJ55uKIDwgd2hvbGVzb21lOwor56uL5Yi7IDwgZm9ydGh3aXRoOwor5YWr5YCN6auUIDwgb2N0b3Bsb2lkOwor5rex5oCdIDwgdG9cLXBvbmRlcjsKK+mHjuiguyA8IGJhcmJhcm91czsKK+iyoeadsSA8IHNob3Bvd25lcjsKK+iZm+aniyA8IGltYWdpbmFyeTsKK+iiq+emgeatoiA8IGZvcmJpZGRlbjsKK+iBr+aDsyA8IGFzc29jaWF0ZTsKK+a1uOaykiA8IGltbWVyc2lvbjsKK+a3kuaFmCA8IG1pc2VyYWJsZTsKK+S4gOevhyA8IG9uZVwtc2lkZWQ7Civku4vos6roqKrllY/mjqfliLblsaQgPCBtYWNcLWxheWVyOwor5LiN6Ieq54S2IDwgdW5uYXR1cmFsOwor5pyf5ru/IDwgdG9cLWV4cGlyZTsKK+itpuimuiA8IHZpZ2lsYW5jZTsKK+WOn+irkiA8IHRvXC1leGN1c2U7Civlrrbkv7EgPCBmdXJuaXR1cmU7Civpq5jnp5HmioAgPCBoaWdoXC10ZWNoOwor5oSf5p+TIDwgaW5mZWN0aW9uOwor5a2U5a2QIDwgY29uZnVjaXVzOwor5Lqe5qC86ZaA6L6yIDwgYWdhbWVtbm9uOwor5a625LqLIDwgaG91c2V3b3JrOwor5oCq54mp5Ly8IDwgbW9uc3Ryb3VzOwor5Yaw5qON5YWSIDwgaWNlXC1sb2xseTsKK+S7iuW5tCA8IHRoaXNcLXllYXI7Civnmb3nj63lhZIgPCBkYXlcLXNoaWZ0Owor5LiA55m+IDwgYVwtaHVuZHJlZDsKK+S7suWkjyA8IG1pZHN1bW1lcjsKK+itieipniA8IHRlc3RpbW9ueTsKK+S4jemAnuS5i+W+kiA8IGRlc3BlcmFkbzsKK+eqgeWHuiA8IHByb21pbmVudDsKK+aYn+acn+S4iSA8IHdlZG5lc2RheTsKK+aDoeavkiA8IG1hbGljaW91czsKK+mHjuigu+S6uiA8IGJhcmJhcmlhbjsKK+WNgeWtl+i7jSA8IGNydXNhZGVyczsKK+mcsumfkyA8IHRvXC1leHBvc2U7Civms5XlnIvkurogPCBmcmVuY2htYW47CivkupTljYPlmbggPCA1MDAwXC10b25zOwor5b2x6Z+/IDwgaW5mbHVlbmNlOwor5pq055m8IDwgYnJlYWtcLW91dDsKK+aHieS7mCA8IGRlYWxcLXdpdGg7CivmnInmr5IgPCBwb2lzb25vdXM7CivlvLHpubwgPCB3ZWFrXC1iYXNlOwor5rG96Ii5IDwgc3RlYW1ib2F0Owor6YGH6Zuj6Ii5IDwgc2hpcHdyZWNrOwor5Y+v56yRIDwgbGF1Z2hhYmxlOwor5Y2K6LyJIDwgaGFsZlwtbG9hZDsKK+W+rui7nyA8IG1pY3Jvc29mdDsKK+S7meWigyA8IGZhaXJ5bGFuZDsKK+aXqOi2oyA8IG9iamVjdGl2ZTsKK+Wkp+mhniA8IG1haW5cLXR5cGU7CivmnKzmlocgPCB0aGlzXC10ZXh0Owor576K55qu57SZIDwgcGFyY2htZW50Owor5oak5oak5LiN5bmzIDwgaW5kaWduYW50Owor54ef6aSKIDwgbnV0cml0aW9uOwor5Y+N6Imm6ImHIDwgYW50aVwtc2hpcDsKK+WNlOitsCA8IGFncmVlbWVudDsKK+mCo+m6vCA8IHNvXC1cKG11Y2hcKTsKK+W/hemcgOWTgSA8IG5lY2Vzc2l0eTsKK+eip+iXjSA8IGRhcmtcLWJsdWU7CivlvoXpgYcgPCB0cmVhdG1lbnQ7CivkuIvlgIvmmJ/mnJ8gPCBuZXh0XC13ZWVrOwor5ZCI55CGIDwgcmF0aW9uYWxlOwor546p5byEIDwgcmVzb3J0XC10bzsKK+aXgei3ryA8IHRvXC1ieXBhc3M7CivlpJzplpMgPCBuaWdodHRpbWU7Civmr5TphLAgPCBuZWlnaGJvdXI7Civmm7jmnrYgPCBib29rc2hlbGY7CivmnInmlYggPCBlZmZlY3RpdmU7CivnvL3nm4IgPCBhbG1zXC1ib3dsOwor55+z54Gw55+zIDwgbGltZXN0b25lOwor6LOH5YqpIDwgc3Vic2lkaXplOwor5q235Y+y5a245a62IDwgaGlzdG9yaWFuOwor5L+u6YGT6ZmiIDwgbW9uYXN0ZXJ5Owor5LiK5qyhIDwgbGFzdFwtdGltZTsKK+acm+mBoOmPoSA8IHRlbGVzY29wZTsKK+aTuuioreWFkiA8IG9ybmFtZW50czsKK+S6lOWkqSA8IGZpdmVcLWRheXM7Civlv4PpnYjkuIogPCBzcGlyaXR1YWw7Civml4Hop4AgPCBzcGVjdGF0b3I7CivloIXlv43kuI3mi5QgPCBmb3J0aXR1ZGU7Civku4vlhaUgPCBpbnRlcnZlbmU7Civku6XkuIogPCBtb3JlXC10aGFuOwor55+b6aCtIDwgc3BlYXJoZWFkOwor5aSi6YG6IDwgd2V0XC1kcmVhbTsKK+WkqeaWh+WtuCA8IGFzdHJvbm9teTsKK+W3tOavlOWmpSA8IGJhcmJpdG9uZTsKK+azouautSA8IHdhdmVcLWJhbmQ7Civpm6LplosgPCB0b1wtZGVwYXJ0Owor5a+m6LOq5LiKIDwgdmlydHVhbGx5Owor5ZCQ5rCjIDwgYXNwaXJhdGVkOwor5p2x5Y2XIDwgc291dGhlYXN0Owor5aWH6KeAIDwgc3BlY3RhY2xlOwor5pS56Z2pIDwgdG9cLXJlZm9ybTsKK+aEm+WciyA8IHBhdHJpb3RpYzsKK+S4jeaWtyA8IHVuY2Vhc2luZzsKK+acquWpmiA8IHVubWFycmllZDsKK+W8semFuCA8IHdlYWtcLWFjaWQ7CivkuZjlrqIgPCBwYXNzZW5nZXI7CivphY3nva4gPCB0b1wtZGVwbG95Owor5aSx6Kq/IDwgaW1iYWxhbmNlOwor5pys5aOYIDwgaG9tZVwtYmFzZTsKK+S6uuS6iyA8IHBlcnNvbm5lbDsKK+acieaEj+itmCA8IGNvbnNjaW91czsKK+abuOW6lyA8IGJvb2tzdG9yZTsKK+WPl+Wus+iAhSA8IGNhc3VsdGllczsKK+S4jeWujOe+jiA8IGRlZmVjdGl2ZTsKK+WPuOapnyA8IGNoYXVmZmV1cjsKK+adseS6niA8IGVhc3RcLWFzaWE7CivlkIjmoLwgPCBxdWFsaWZpZWQ7Civmg4Xnt5LljJYgPCBlbW90aW9uYWw7CivogJDlipsgPCBlbmR1cmFuY2U7CivmlK/mjIHogIUgPCBzdXBwb3J0ZXI7CivmmI7norogPCBjbGVhclwtY3V0Owor5LiN5oOcIDwgbm90XC1zdGludDsKK+WAn+abuOWWriA8IGJvb2tcLXNsaXA7CivkuLvlqaYgPCBob3VzZXdpZmU7CivooajmhI/mloflrZcgPCBpZGVvZ3JhcGg7CivpgJrosqjohqjohLkgPCBpbmZsYXRpb247CivnjqnlhbcgPCBwbGF5dGhpbmc7Civpm7voqbEgPCB0ZWxlcGhvbmU7Civmlr3ogqUgPCBmZXJ0aWxpemU7CivnrKzlhavljYEgPCBlaWdodGlldGg7Civph4znqIvnopEgPCBtaWxlc3RvbmU7CivkuI3lt7IgPCBlbmRsZXNzbHk7Civpm5zosqggPCBncm9jZXJpZXM7CivmnKjljKAgPCBjYXJwZW50ZXI7CivphqzmsrkgPCBzb3lcLXNhdWNlOwor5LiN5oOF6aGYIDwgdW53aWxsaW5nOwor6Ke46ayaIDwgdGVudGFjbGVzOwor5LiL5a6a576pIDwgdG9cLWRlZmluZTsKK+aTpumfsyA8IGZyaWNhdGl2ZTsKK+WRqOWcjSA8IGVuY29tcGFzczsKK+WwjeS4jei1tyA8IGknJ21cLXNvcnJ5Owor5LiN5bCNIDwgaW5jb3JyZWN0Owor5b+D55uuIDwgbWVudGFsaXR5Owor5Y+v5pWsIDwgdmVuZXJhYmxlOwor5aSn6I2zIDwgc295YVwtYmVhbjsKK/CipZ4gPCBzYW1lXC1hc1wt5b+hOwor5YGH6LGh54mZIDwgY2VsbHVsb2lkOwor6ZmN6JC95YKYIDwgcGFyYWNodXRlOwor5rOi5bmFIDwgYW1wbGl0dWRlOwor5Y+z5omLIDwgcmlnaHRoYW5kOwor5rWB5YWlIDwgZmxvd1wtaW50bzsKK+azqOWwhCA8IGluamVjdGlvbjsKK+ehrOebpCA8IGhhcmRcLWRpc2s7Civlip/oqrIgPCBjbGFzc3dvcms7CivpgLHplbcgPCBwZXJpbWV0ZXI7Civos7zosrfogIUgPCBwdXJjaGFzZXI7CivlpKfmlZnloIIgPCBjYXRoZWRyYWw7CivntYTnuZTogIUgPCBvcmdhbml6ZXI7CivlqZrlp7sgPCBtYXRyaW1vbnk7CivkuI3lnKggPCBub3RcLWJlXC1pbjsKK+S4meeoruWwhOe3miA8IGdhbW1hXC1yYXk7Civpnq3mr5sgPCBmbGFnZWxsdW07CivmkqvppIogPCB0b1wtZm9zdGVyOwor5Yiq6ZmkIDwgdG9cLWRlbGV0ZTsKK+mBoOi2syA8IGV4Y3Vyc2lvbjsKK+eEoemZkCA8IHVubGltaXRlZDsKK+mgkeW8tyA8IHRlbmFjaW91czsKK+eEoemXnCA8IHVucmVsYXRlZDsKK+iSuOeZvCA8IGV2YXBvcmF0ZTsKK+WPpOaAqiA8IGVjY2VudHJpYzsKK+W+l+eVtiA8IGV4cGVkaWVudDsKK+ayueW4gyA8IHRhcnBhdWxpbjsKK+S4i+WUhyA8IGxvd2VyXC1saXA7CivkuIrllIcgPCB1cHBlclwtbGlwOwor6IGW6L+t5ZOlIDwgc2FuXC1kaWVnbzsKK+mggeW/gyA8IHR5cGVcLXBhZ2U7CivmsaHmn5MgPCBwb2xsdXRpb247CivmhI/msKPnm7jmipUgPCBjb25nZW5pYWw7CivplbfmlrnlvaIgPCByZWN0YW5nbGU7CivliY3pgJQgPCBwcm9zcGVjdHM7CivnhoronIIgPCBidW1ibGViZWU7CivnuL3ntZAgPCBzdW1tYXJpemU7CivlkLjlj5YgPCB0b1wtYWJzb3JiOwor6YCx6YKKIDwgcGVyaXBoZXJ5Owor5bm06ZmQIDwgYWdlXC1saW1pdDsKK+S4i+WIlyA8IGZvbGxvd2luZzsKK+mhjOWQjSA8IGF1dG9ncmFwaDsKK+WkmuerryA8IG11bHRpcG9ydDsKK+aViOiDvSA8IGVmZmljaWVudDsKK+eBsOeNteeKrCA8IGdyZXlob3VuZDsKK+eNsuaatOWIqeiAhSA8IHByb2ZpdGVlcjsKK+S4jeWBnCA8IGluY2Vzc2FudDsKK+Wkp+egsiA8IGFydGlsbGVyeTsKK+S4jeWAvCA8IG5vdFwtd29ydGg7CivmspnlsqkgPCBzYW5kc3RvbmU7Civms6Llj4ogPCBzcHJlYWRcLXRvOwor5b6u5rOiIDwgbWljcm93YXZlOwor54Sh6L6cIDwgaW5ub2NlbmNlOwor5qyh6KaBIDwgc2Vjb25kYXJ5Owor5LiN5LqIIDwgbm90XC1ncmFudDsKK+WOu+W5tCA8IGxhc3RcLXllYXI7CivkuI3kuoYgPCB1bmFibGVcLXRvOwor6Z+M5oCnIDwgdG91Z2huZXNzOwor54mI5qyKIDwgY29weXJpZ2h0Owor5ZCR5Y2XIDwgc291dGh3YXJkOwor5rCR5q2MIDwgZm9sa1wtc29uZzsKK+WNs+aZgiA8IGltbWVkaWF0ZTsKK+e/kuaFo+aApyA8IGN1c3RvbWFyeTsKK+W5uOmBiyA8IGZvcnR1bmF0ZTsKK+e+juS4rSA8IHVzYVwtY2hpbmE7Civnhp/nt7QgPCBwcmFjdGljZWQ7Civlv7UgPCB0aGlua1wtb2Y7CivkvJogPCBhc3NlbWJsZTsKK+WtpiA8IGxlYXJuaW5nOwor5b6SIDwgZGlzY2lwbGU7CivnnaYgPCBmcmllbmRseTsKK+aXoCA8IG5lZ2F0aXZlOwor5pa5IDwgYVwtc3F1YXJlOwor5YmNIDwgaW5cLWZyb250Owor55yJIDwgZXllYnJvd3M7CivnnIEgPCBwcm92aW5jZTsKK+ebtCA8IHN0cmFpZ2h0Owor5buiIDwgYWJyb2dhdGU7Civnm5sgPCBhYnVuZGFudDsKK+i7kiA8IGNhcnJpYWdlOwor5YWoIDwgbWFpbnRhaW47Civlu4ogPCBjb3JyaWRvcjsKK+eauiA8IHdyaW5rbGVzOwor5bq3IDwgcGVhY2VmdWw7Civpl7QgPCBtaWRwb2ludDsKK+i6iiA8IGhlc2l0YXRlOwor56ysIDwgc2VxdWVuY2U7CivlubsgPCBpbGx1c2lvbjsKK+eZhyA8IGVwaWxlcHN5Owor5bGxIDwgbW91bnRhaW47Civlt74gPCBrZXJjaGllZjsKK+W3pyA8IHNraWxsZnVsOwor6LedIDwgZGlzdGFuY2U7CivnlYwgPCBib3VuZGFyeTsKK+S7uyA8IHRydXN0XC10bzsKK+WPsCA8IHBsYXRmb3JtOwor6LGhIDwgZWxlcGhhbnQ7CivpopggPCBmb3JlaGVhZDsKK+izoiA8IHZpcnR1b3VzOwor6LOHIDwgcHJvcGVydHk7CivosrwgPCBwYXN0ZVwtdG87CivosrsgPCBleHBlbnNlczsKK+WxpSA8IGZvb3R3ZWFyOwor5q2mIDwgbWlsaXRhcnk7CivnkLIgPCBuZWNrbGFjZTsKK+WwoCA8IHZlcnlcLWZldzsKK+WujCA8IGNvbXBsZXRlOwor5Y2zIDwgcHJvbXB0bHk7Civlr7UgPCBmYXZvcml0ZTsKK+ivrSA8IGxhbmd1YWdlOwor54+NIDwgcHJlY2lvdXM7CivllYYgPCBjb21tZXJjZTsKK+WunSA8IHRyZWFzdXJlOwor5Y2DIDwgdGhvdXNhbmQ7CivlrpwgPCBzdWl0YWJsZTsKK+WumCA8IG9mZmljaWFsOwor56uZIDwgc3RhbmRcLXVwOwor6K2sIDwgbWV0YXBob3I7CivpppkgPCBmcmFncmFudDsKK+S8vCA8IHJlc2VtYmxlOwor5ayiIDwgdHJvdWJsZWQ7Civomb0gPCBhbHRob3VnaDsKK+S4lCA8IG1vcmVvdmVyOwor6LCDIDwgdHJhbnNmZXI7Civlq4kgPCBqZWFsb3VzeTsKK+eLgyA8IHRvXC1jb3ZldDsKK+WrgSA8IHRvXC1tYXJyeTsKK+WqmiA8IGNoYXJtaW5nOwor6KqYIDwgcGVyc3VhZGU7CivoqoQgPCBldWxvZ2l6ZTsKK+ipsyA8IGRldGFpbGVkOwor6KmwIDwgcXVlc3Rpb247Civmg4ogPCBmcmlnaHRlbjsKK+aUryA8IGRpc3BlcnNlOwor56qBIDwgc3VkZGVubHk7CivoqZUgPCBhcHByYWlzZTsKK+WooCA8IHByZWduYW50Owor5Y+lIDwgc2VudGVuY2U7CivmmL4gPCBtYW5pZmVzdDsKK+WiniA8IGluY3JlYXNlOwor5paZIDwgY29uc2lkZXI7CivlpoogPCBjb25jZWl2ZTsKK+e7rSA8IGNvbnRpbnVlOwor54KtIDwgY2hhcmNvYWw7Civlm7QgPCBzdXJyb3VuZDsKK+eBvSA8IGNhbGFtaXR5Owor5aGaIDwgY2VtZXRlcnk7CivngJUgPCBhcHByb2FjaDsKK+a/uiA8IHNwcmlua2xlOwor5r+vIDwgd2FzaFwtb3V0Owor5Z6jIDwgbG93XC13YWxsOwor5LmgIDwgcHJhY3RpY2U7CivlnoIgPCBsZXRcLWRvd247CivlnYIgPCBoaWxsc2lkZTsKK+elliA8IGFuY2VzdG9yOwor5LyYIDwgc3VwZXJpb3I7Civmu68gPCBibG9ja1wtdXA7CivmuqIgPCBvdmVyZmxvdzsKK+a4qSA8IGx1a2V3YXJtOwor6JqKIDwgbW9zcXVpdG87CivpubggPCBhbGthbGluZTsKK+WZqiA8IGJlXC1ub2lzeTsKK+WYsiA8IHJpZGljdWxlOwor5ribIDwgZGVjcmVhc2U7CivlmJQgPCB0b1wtdm9taXQ7CivmgakgPCBraW5kbmVzczsKK+iEsSA8IHRha2VcLW9mZjsKK+a2uCA8IGRyaWVkXC11cDsKK+WWqiA8IG1vdXJuaW5nOwor5aWUIDwgcnVuXC1mYXN0Owor5raMIDwgc3VyZ2VcLXVwOwor56aBIDwgcmVzdHJpY3Q7Civmta4gPCB0b1wtZmxvYXQ7CivkupIgPCBtdXR1YWxseTsKK+aQniA8IHRvXC1jbGVhcjsKK+acsSA8IGNpbm5hYmFyOwor5Z+fIDwgZGlzdHJpY3Q7CivmnZAgPCBtYXRlcmlhbDsKK+WBtyA8IHRvXC1zdGVhbDsKK+iTiSA8IGhpYmlzY3VzOwor5oq9IDwgZHJhd1wtb3V0Owor5LuqIDwgY2VyZW1vbnk7CivljbggPCBsYXlcLWRvd247Civlv4YgPCByZW1lbWJlcjsKK+malCA8IHNlcGFyYXRlOwor5Y2TIDwgcHJvZm91bmQ7CivmjZ8gPCBkaW1pbmlzaDsKK+iMhCA8IGVnZ3BsYW50Owor5Yu/IDwgbXVzdFwtbm90Owor6autIDwgbXVzdGFjaGU7CivpgaUgPCBmYXJcLWF3YXk7Civmq5sgPCBjb21iXC1vdXQ7CivluIEgPCBjdXJyZW5jeTsKK+WLiSA8IGVuZGVhdm9yOwor6aq4IDwgc2tlbGV0b247CivliqogPCB0b1wtZXhlcnQ7CivokI0gPCBkdWNrd2VlZDsKK+aohSA8IGZpclwtdHJlZTsKK+e8qSA8IGNvbnRyYWN0Owor6IelIDwgbGllXC1kb3duOwor5oWVIDwgbG9uZ1wtZm9yOwor6IejIDwgbWluaXN0ZXI7CivmjKEgPCBvYnN0cnVjdDsKK+iGnCA8IG1lbWJyYW5lOwor5qabIDwgaGF6ZWxudXQ7Civkv4ogPCB0YWxlbnRlZDsKK+aenSA8IGJyYW5jaGVzOwor6Zm3IDwgc3VibWVyZ2U7Civli5IgPCBzdHJhbmdsZTsKK+iBiiA8IHNvbWV3aGF0Owor6aO+IDwgZGVjb3JhdGU7CivmlpwgPCBzbGFudGluZzsKK+aWkCA8IGdyYWNlZnVsOwor5qKfIDwgb3dsXC10aHVzOwor5YKYIDwgdW1icmVsbGE7Civkuq0gPCBwYXZpbGlvbjsKK+azmyA8IHRvXC1kcmlmdDsKK+espiA8IGlcLmRcLlwtdGFnOwor5YWBIDwgdG9cLWdyYW50Owor6LeoIDwgc3RyYWRkbGU7CivmjqkgPCB0b1wtY292ZXI7CivpoIMgPCBhXC1tb21lbnQ7Civmn7QgPCBmaXJld29vZDsKK+S/ryA8IGJvd1wtZG93bjsKK+S/pSA8IHJpY2tzaGF3Owor6YK7IDwgbmVpZ2hib3I7Civpqb4gPCB0b1wtZHJpdmU7Civnvp4gPCBkaXNncmFjZTsKK+ijpCA8IHRyb3VzZXJzOwor5LywIDwgbWVyY2hhbnQ7CivpnpggPCBzY2FiYmFyZDsKK+WSkCA8IGluc3RydWN0Owor5oGSIDwgY29uc3RhbnQ7Civns58gPCBzZWRpbWVudDsKK+aJriA8IGRyZXNzXC11cDsKK+abnCA8IGdsb3Jpb3VzOwor5pqiIDwgc21vb3RobHk7CivmirwgPCBtb3J0Z2FnZTsKK+aImiA8IHJlbGF0aXZlOwor56mGIDwgbWFqZXN0aWM7CivlmLsgPCBtaXJ0aGZ1bDsKK+S4piA8IGVxdWFsXC10bzsKK+aYlCA8IGZvcm1lcmx5Owor6ZeYIDwgc3RydWdnbGU7CivnnqogPCBzdGFyZVwtYXQ7CivmlqUgPCB0b1wtc2NvbGQ7CivliaogPCBzY2lzc29yczsKK+WnmiA8IGhhbmRzb21lOwor5o6PIDwgdGFrZVwtb3V0Owor6ZaTIDwgaW50ZXJ2YWw7Civmg7kgPCBpcnJpdGF0ZTsKK+ewvyA8IHJlZ2lzdGVyOwor6Iq3IDwgYW5nZWxpY2E7Civno4EgPCBtYWduZXRpYzsKK+avhSA8IHJlc29sdXRlOwor56ylIDwgYVwtaGFtcGVyOwor5ouYIDwgcmVzdHJhaW47CivkvJAgPCBjdXRcLWRvd247Civnq4ogPCBzZWNyZXRseTsKK+mKmCA8IGluc2NyaWJlOwor5oSJIDwgcGxlYXNhbnQ7CivnqpwgPCBydW5cLWF3YXk7Civlr6ggPCBzdG9ja2FkZTsKK+aIuyA8IHBlcnZlcnNlOwor5rKqIDwgc2hhbmdoYWk7Civph5wgPCBjYXVsZHJvbjsKK+WXpCA8IGxhdWdoXC1hdDsKK+WosSA8IHBsZWFzdXJlOwor56aEIDwgYmxlc3Npbmc7CivmhJUgPCBzdGFydGxlZDsKK+WVoSA8IG1vcnBoaW5lOwor5ZuaIDwgcHJpc29uZXI7CivotKYgPCBhY2NvdW50czsKK+eTtyA8IGNyb2NrZXJ5Owor6IWlIDwgcmF3XC1tZWF0Owor5ZK4IDwgdG9nZXRoZXI7CivnlqsgPCBlcGlkZW1pYzsKK+WVqiA8IHN5bGxhYmxlOwor6IaoIDwgdG9cLXN3ZWxsOwor5ZCxIDwgY2hpcnBpbmc7Civoj4wgPCBtdXNocm9vbTsKK+eQkCA8IHRyaWZsaW5nOwor6IufIDwgY2FyZWxlc3M7CivltJsgPCB0b3dlcmluZzsKK+WHuCA8IHByb3RydWRlOwor5ZiAIDwgYmFja2JpdGU7Civpk5AgPCBzaGFja2xlczsKK+iwlSA8IHByb2NsYWltOwor6L+4IDwgZ3VzaFwtb3V0Owor5YmUIDwgcGlja1wtb3V0Owor5YaAIDwgaG9wZVwtZm9yOwor56CaIDwgaW5rc3RvbmU7CivmjY0gPCB3YXJkXC1vZmY7Civoh4AgPCBidXR0b2NrczsKK+WAlCA8IHN0dWJib3JuOwor5aWEIDwgZXJlXC1sb25nOwor5L6lIDwgYmVcLWx1Y2t5Owor5qK1IDwgYnVkZGhpc3Q7CivopKUgPCBtYXR0cmVzczsKK+aZliA8IHN1bnNoaW5lOwor55W0IDwgZmFybWxhbmQ7Civnnp8gPCBnbGFyZVwtYXQ7CivnmLggPCBsYW1lbmVzczsKK+a+jiA8IHNwbGF0dGVyOwor5r2mIDwgdG9cLWZsb29kOwor5YGOIDwgY2xpbmdcLXRvOwor6J2OIDwgc2NvcnBpb247CivnsLggPCB3aW5ub3dlcjsKK+W6tiA8IG51bWVyb3VzOwor5pKCIDwgcHV0XC1kb3duOwor5pmXIDwgcHJlXC1kYXduOwor6LmKIDwgZm9vdHBhdGg7CivpmIkgPCBjYXN0cmF0ZTsKK+a3hiA8IGNvbmZ1c2VkOwor6JCmIDwgZW50YW5nbGU7CivmpoYgPCBlbG1cLXRyZWU7CivnjJ0gPCBhYnJ1cHRseTsKK+abpiA8IHN1bmxpZ2h0Owor5rikIDwgc3dlbGxpbmc7CivovpggPCB3aW5kbGFzczsKK+mTnSA8IGFsdW1pbnVtOwor5o2LIDwgdG9cLXBsdWNrOwor6Jm7IDwgaG9yc2VmbHk7CivnnowgPCBkb3plXC1vZmY7Civkup8gPCB1cmdlbnRseTsKK+W+qCA8IGRvdWJ0ZnVsOwor5ZWQIDwgdG9cLXRhc3RlOwor6ZWvIDwgYnJhY2VsZXQ7CivliL0gPCBhbXB1dGF0ZTsKK+iXuyA8IHNwbGVuZGlkOwor5oOwIDwgaW5kb2xlbnQ7Civnh5QgPCB0b1wtcm9hc3Q7Civmtp0gPCBpbnVuZGF0ZTsKK+e7myA8IGRlZXBcLXJlZDsKK+awryA8IGNobG9yaW5lOwor5Z2NIDwgY29sbGFwc2U7Civlv5AgPCB0aW1vcm91czsKK+auoSA8IGVuY29mZmluOwor5pi1IDwgaW50aW1hdGU7Civkv58gPCB3YWl0XC1mb3I7CivmoaIgPCBoYXJkd29vZDsKK+m7jyA8IHN0aWNrXC10bzsKK+eXmCA8IHNtYWxscG94Owor5qefIDwgYmV0ZWxudXQ7Civpn60gPCBzY2FsbGlvbjsKK+iUqyA8IHdpdGhlcmVkOwor6IaCIDwgYmFja2JvbmU7Civog6sgPCBzaGluYm9uZTsKK+iHgyA8IHN3ZWxsXC11cDsKK+WyjCA8IHBlcmlsb3VzOwor546OIDwgamluZ2xpbmc7CivpmrwgPCBhcXVpbGluZTsKK+mZsiA8IGZyb250aWVyOwor6LC2IDwgcHJvcGhlY3k7CivlgbsgPCBodW1wYmFjazsKK+mTgiA8IHBsYXRpbnVtOwor57qbIDwgYVwtYmFubmVyOwor6ZOsIDwgY2hyb21pdW07Civog7AgPCBwYW5jcmVhczsKK+imgyA8IHJlYWNoXC10bzsKK+edviA8IHRlc3RpY2xlOwor5YCoIDwgYXJyb2dhbnQ7CivorqMgPCBvYml0dWFyeTsKK+mSmyA8IHRpdGFuaXVtOwor5rWDIDwgc2F0dXJhdGU7Civml5YgPCByb21hbnRpYzsKK+e8mSA8IHJlZFwtc2lsazsKK+ihviA8IGNvdmVybGV0Owor5a64IDwgaW1wZXJpYWw7CivkvZ4gPCBmbGF0dGVyeTsKK+iblCA8IHRhcGV3b3JtOwor5rCFIDwgb3ZlcmNvYXQ7CivmsJ8gPCBmbHVvcmluZTsKK+awsCA8IGN5YW5vZ2VuOwor6bKfIDwgc3R1cmdlb247CivnoZIgPCBzZWxlbml1bTsKK+iIqCA8IGFcLXNhbXBhbjsKK+eDiiA8IHRvXC1zbWVsdDsKK+iQsSA8IGRheVwtbGlseTsKK+eWuCA8IGphdW5kaWNlOwor6ZOKIDwgdGhhbGxpdW07Civor4IgPCBleGVnZXNpczsKK+mbiSA8IHBoZWFzYW50Owor6aKiIDwgbHVtaW5vdXM7CivmoIAgPCBnYXJkZW5pYTsKK+ivkiA8IGJlcXVlYXRoOwor6aKfIDwgZGF3ZGxpbmc7Civoi4sgPCBhbWFyYW50aDsKK+eAoyA8IHNlYVwtbWlzdDsKK+eunSA8IHR3ZWV6ZXJzOwor5qWuIDwgbXVsYmVycnk7CivpgYQgPCB0b1wtaHVycnk7CivpkpIgPCB2YW5hZGl1bTsKK+iLtyA8IGxpY29yaWNlOwor6ZKoIDwgdHVuZ3N0ZW47Civln7ggPCBhXC1ib3JkZXI7Civlq5IgPCBkYXVnaHRlcjsKK+eZnCA8IGVyeXRoZW1hOwor6bi5IDwgdGhlXC1jcm93Owor5pubIDwgdHdpbGlnaHQ7CivpqpggPCBzdGFsbGlvbjsKK+WduyA8IGFuXC1pc2xldDsKK+inqyA8IHRvXC1zdGFydDsKK+mTtSA8IGFtbW9uaXVtOwor5rCpIDwgYXJnb25pdW07CivljaMgPCB3aW5lXC1wb3Q7CivplJEgPCBhbnRpbW9ueTsKK+mGmyA8IGFsZGVoeWRlOwor6ZK9IDwgdGFudGFsdW07CivnoLwgPCBjb25jcmV0ZTsKK+eGmCA8IHRvXC1zdGVhbTsKK+eqqCA8IGFcLWNlbGxhcjsKK+agsiA8IG1hbmdyb3ZlOwor6bKjIDwgc2tpcGphY2s7Civpk7cgPCBydWJpZGl1bTsKK+mTlSA8IGV1cm9waXVtOwor6ZKLIDwgcG9sb25pdW07CivnoJEgPCB0b1wtZ3JpbmQ7CivmtKsgPCB0b1wtZGl0Y2g7Civln5ogPCBjcnVjaWJsZTsKK+WepCA8IGFudFwtaGlsbDsKK+WNuiA8IHdpbmVjdXBzOwor5ZiPIDwgZmVsaWNpdHk7Civpsr0gPCBmbGF0ZmlzaDsKK+myrSA8IG1hY2tlcmVsOwor6ZKqIDwgc2NhbmRpdW07CivpkqsgPCBmcmFuY2l1bTsKK+mSkCA8IHNhbWFyaXVtOwor56WTIDwgZXhvcmNpc2U7CivmoLMgPCBhXC1iYXNrZXQ7CivlkLIgPCBzbWlsZVwtYXQ7CivojrAgPCBjYW1waGFuZTsKK+iKtCA8IGZsdW9yZW5lOwor6LWcIDwgYWJzdHJ1c2U7CivmlLnnt6ggPCB0b1wtYWRhcHQ7Civnmb3lhafpmpwgPCBjYXRhcmFjdDsKK+Wjk+e3iiA8IGNvbXByZXNzOwor6Yar5a24IDwgbWVkaWNpbmU7CivlkJ7kvbUgPCB0b1wtYW5uZXg7CivpnYjmtLsgPCBmbGV4aWJsZTsKK+Wkp+evt+i7iiA8IHNjaG9vbmVyOwor5paH5427IDwgZG9jdW1lbnQ7CivlpJbnlKggPCBleHRlcm5hbDsKK+ebo+itt+S6uiA8IGd1YXJkaWFuOwor6YKK57eaIDwgc2lkZWxpbmU7CivmraPntbEgPCBvcnRob2RveDsKK+aWr+a0m+S8kOWFiyA8IHNsb3Zha2lhOwor6aC75LuNIDwgZnJlcXVlbnQ7Civnt6/nt5ogPCBsYXRpdHVkZTsKK+S4jeWQiOmBqSA8IGltcHJvcGVyOwor54Sh6KqkIDwgdmVyaWZpZWQ7Civml6Xmm4YgPCBjYWxlbmRhcjsKK+WJneiQvSA8IHBlZWxcLW9mZjsKK+mgkOWNnCA8IGZvcmV0ZWxsOwor6Ky55oWOIDwgY2F1dGlvdXM7CivojLbppKggPCB0ZWFob3VzZTsKK+S8gealremWk+e2sui3ryA8IGV4dHJhbmV0Owor6KeA5a+f6ICFIDwgb2JzZXJ2ZXI7Civps6XnsaAgPCBiaXJkY2FnZTsKK+W7uueviSA8IGJ1aWxkaW5nOwor6Jel5YqR5aOrIDwgZHJ1Z2dpc3Q7CivkuI3kv6Hku7sgPCBtaXN0cnVzdDsKK+W7uueriyA8IGNyZWF0aW9uOwor5Zug54m557ayIDwgaW50ZXJuZXQ7Civlv4PmiYsgPCBuZXdcLWhhbmQ7CivlhrDpmpkgPCBjcmV2YXNzZTsKK+mcuOasiiA8IGhlZ2Vtb255Owor5Y2x5oClIDwgY3JpdGljYWw7CivpmpnnuKsgPCBhcGVydHVyZTsKK+WwjeeoseaApyA8IHN5bW1ldHJ5Owor6Kaq6LqrIDwgcGVyc29uYWw7CivnorrlrpogPCBkZWZpbml0ZTsKK+aqoua4rOWZqCA8IGRldGVjdG9yOwor57WC6LqrIDwgbGlmZWxvbmc7CivprZTooZPluKsgPCBtYWdpY2lhbjsKK+iomOiAhSA8IHJlcG9ydGVyOwor6KaP6YG/IDwgdG9cLWV2YWRlOwor54mn5birIDwgY2hhcGxhaW47CivmlLbnm4ogPCBlYXJuaW5nczsKK+W5s+ihjCA8IHBhcmFsbGVsOwor5b+g5a+mIDwgZmFpdGhmdWw7CivmraXnmbwgPCBmb290d29yazsKK+WIhuijgiA8IHNwbGl0XC11cDsKK+aWsOabuCA8IG5ld1wtYm9vazsKK+S4jeacveeahCA8IGltbW9ydGFsOwor5Y+j5LqkIDwgb3JhbFwtc2V4Owor5Ym156uLIDwgdG9cLWZvdW5kOwor54Wk566xIDwgY29hbFwtYm94Owor5rK554K45ZyI6aSFIDwgZG91Z2hudXQ7CivnvLrkuY8gPCBzaG9ydGFnZTsKK+aXpeW+jCA8IHNvbWV0aW1lOwor5q235Y+y5oCnIDwgaGlzdG9yaWM7Civlm6DvuY3kuYvmlYUgPCBpbmFzbXVjaDsKK+eBvemboyA8IGRpc2FzdGVyOwor5b655bqVIDwgdGhvcm91Z2g7CivmqrjmqqzmsLQgPCBsZW1vbmFkZTsKK+mxieijmSA8IGNhbGlwYXNoOwor6K2m5Y+lIDwgYXBob3Jpc207Civml6nlt7IgPCBsb25nXC1hZ287CivnoLTmm4kgPCBkYXlicmVhazsKK+mbqOa7tCA8IHJhaW5kcm9wOwor5Lul5aSq57ayIDwgZXRoZXJuZXQ7CivmmI7lpKkgPCB0b21vcnJvdzsKK+WmluWtvSA8IGV2aWxkb2VyOwor6Zu75rCjIDwgZWxlY3RyaWM7CivphazloLEgPCB0b1wtcmVwYXk7CivosqDph43mk5QgPCBidXJkZW5lZDsKK+mBuueUoiA8IGhlcml0YWdlOwor56Gs5bqmIDwgaGFyZG5lc3M7CivnhKHogYogPCBub25zZW5zZTsKK+apq+mBjiA8IHRyYXZlcnNlOwor6ZuN5a655aSn5bqmIDwgZ2VuZXJvdXM7CivlvoHmiLAgPCBjYW1wYWlnbjsKK+iqsuacrCA8IHRleHRib29rOwor5YeL6KydIDwgbGFuZ3Vpc2g7CivljYHkuozmnIggPCBkZWNlbWJlcjsKK+ioiOeulyA8IHRvXC1jb3VudDsKK+mWi+mZpCA8IHRvXC1leHBlbDsKK+e6luW3pyA8IGRlbGljYXRlOwor5pOm57ay55CDIDwgbmV0XC1iYWxsOwor54Sh57irIDwgc2VhbWxlc3M7CivlhqDou40gPCBjaGFtcGlvbjsKK+WHhuiosSA8IHRvXC1hbGxvdzsKK+mbu+airyA8IGVsZXZhdG9yOwor6JOL5bGkIDwgY2FwXC1yb2NrOwor6Z2i5bCNIDwgY29uZnJvbnQ7CivnhKHnt5ogPCB3aXJlbGVzczsKK+iBluS/nee+hSA8IHN0XC5cLXBhdWw7CivpgJrntIUgPCB2ZXJ5XC1yZWQ7CivljIXmioQgPCBvdXRmbGFuazsKK+i+qOiqjSA8IGlkZW50aWZ5Owor5Y6f5L6GIDwgb3JpZ2luYWw7Civlpb3lpb3lhZLlnLAgPCBwcm9wZXJseTsKK+WkmuaVuCA8IG1ham9yaXR5Owor54mp5ZOBIDwgYXJ0aWNsZXM7CivmlL/msrsgPCBwb2xpdGljczsKK+WNiuWknCA8IG1pZG5pZ2h0Owor5paw5bm0IDwgbmV3XC15ZWFyOwor5peF5a6iIDwgdHJhdmVsZXI7CivpgLznnJ8gPCBsaWZlbGlrZTsKK+mojuWjq+awo+amgiA8IGNoaXZhbHJ5Owor6KW/6KOh54i+IDwgY3lyaWxsaWM7Civlhazph5AgPCBkZWNpZ3JhbTsKK+auuuaIriA8IG1hc3NhY3JlOwor6Im+5b636JW+5b63IDwgYWRlbGFpZGU7CivlipvmsKMgPCBzdHJlbmd0aDsKK+WFp+mDqCA8IGludGVyaW9yOwor57mh5bi3IDwgdGFwZXN0cnk7CivlpKrlv5kgPCB0b29cLWJ1c3k7CivnnaHnnKAgPCBzbGVlcGluZzsKK+WNgeWbmyA8IGZvdXJ0ZWVuOwor5bi45Z2Q5rG96LuK6ICFIDwgbW90b3Jpc3Q7CivlubPnrYkgPCBlcXVhbGl0eTsKK+WMheWxpCA8IGNsYWRkaW5nOwor5rG96LuK5bGV6Ka95pyDIDwgY2FyXC1zaG93Owor5YaN6KaLIDwgZ29vZFwtYnllOwor5Y+v5pOm5a+rIDwgZXJhc2FibGU7CivlhY3osrvou5/ku7YgPCBmcmVld2FyZTsKK+WNseS6oSA8IGF0XC1zdGFrZTsKK+W3p+ioiCA8IG1hbmV1dmVyOwor6JGX5omLIDwgY29tbWVuY2U7CivmoYPoirHlv4PmnKggPCBtYWhvZ2FueTsKK+ebsuiFuCA8IGFwcGVuZGl4Owor54mn576K6ICFIDwgc2hlcGhlcmQ7CivmlK/mn7EgPCBtYWluc3RheTsKK+W9ouWuuSA8IGRlc2NyaWJlOwor54Sh55aRIDwgbm9cLWRvdWJ0Owor5by35oKNIDwgdmFsbGlhbnQ7Civnspfph44gPCBpbnNvbGVudDsKK+iii+m8oCA8IGthbmdhcm9vOwor6Luf6auUIDwgc29mdHdhcmU7CivmlrDlnosgPCBuZXdcLXR5cGU7Civln7nogrIgPCB0b1wtdHJhaW47CivnhaTmsrkgPCBrZXJvc2VuZTsKK+WKoOaZgiA8IG92ZXJ0aW1lOwor5qiZ5rqW6KaP5qC8IDwgc3RhbmRhcmQ7CivlhYnovJ0gPCByYWRpYW5jZTsKK+W+qeWFgyA8IHJlY292ZXJ5Owor5Y2B5YWrIDwgZWlnaHRlZW47CivlpJrlsJEgPCBob3dcLW11Y2g7CivljYHlhYsgPCBkZWNhZ3JhbTsKK+WcsOmbtyA8IGxhbmRtaW5lOwor5aaC5LuKIDwgbm93YWRheXM7Civpgqrmg6EgPCBzaW5pc3RlcjsKK+eEoeirluS9leaZgiA8IHdoZW5ldmVyOwor6KeA55yLIDwgdG9cLXdhdGNoOwor5b6X5YiGIDwgdG9cLXNjb3JlOwor562G6KiY5pysIDwgbm90ZWJvb2s7Civou4Dpq5QgPCB0aGVcLWJvZHk7Civnoazku7YgPCBoYXJkd2FyZTsKK+WkqeWggiA8IHBhcmFkaXNlOwor6Jaw6KGj6I2JIDwgbGF2ZW5kZXI7CivljYHkuZ0gPCBuaW5ldGVlbjsKK+WFieitnCA8IHNwZWN0cnVtOwor6KOc6YG6IDwgYWRkZW5kdW07CivpgaDmnbEgPCBmYXJcLWVhc3Q7Civlub7kuY7mspLmnIkgPCBzY2FyY2VseTsKK+WNgeS4iSA8IHRoaXJ0ZWVuOwor5LiN5b+F6KaBIDwgbmVlZGxlc3M7CivmqZ/og70gPCBmdW5jdGlvbjsKK+iSmeWPpCA8IG1vbmdvbGlhOwor54mn5bir5LmL6IG3IDwgbWluaXN0cnk7CivpgaDmma8gPCBwcm9zcGVjdDsKK+e0kOe0hCA8IG5ld1wteW9yazsKK+aPkOitsCA8IHByb3Bvc2FsOwor6YCy5q2lIDwgcHJvZ3Jlc3M7Civpm7vloLEgPCB0ZWxlZ3JhbTsKK+iri+mhmOabuCA8IHBldGl0aW9uOwor6LuK6ZaTIDwgd29ya3Nob3A7CivlvoDkvoYgPCBkZWFsaW5nczsKK+W8leWwjiA8IHRvXC1ndWlkZTsKK+m+kyA8IGFcLWhhbHRlcjsKK+ijneiyqCA8IHNoaXBwaW5nOwor5Yqb5bqmIDwgZHluYW1pc207CivmipXos4fogIUgPCBpbnZlc3RvcjsKK+mBjuaWvCA8IHRvb1wtbXVjaDsKK+m8miA8IGRydW1taW5nOwor55uj56aBIDwgaW1wcmlzb247CivlhrDnqpYgPCBpY2Vob3VzZTsKK+WggueahyA8IGltcG9zaW5nOwor6bquIDwgcG9ycmlkZ2U7CivnnIHnlaUgPCBvbWlzc2lvbjsKK+WFreWNgeWbm+iQrCA8IDY0XC0wXC0wMDA7Civlr4TnlJ/niakgPCBwYXJhc2l0ZTsKK+iCr+WhlOWfuiA8IGtlbnR1Y2t5Owor5q+N5L+CIDwgbWF0ZXJuYWw7Civmn6zln5Tlr6ggPCBjYW1ib2RpYTsKK+m1mSA8IGFcLXNocmlrZTsKK+aOoeiytyA8IHB1cmNoYXNlOwor6LyV6KaWIDwgY29udGVtcHQ7Civnsr7oh7QgPCBkZWxpY2FjeTsKK+mzriA8IGNoaWNrZW5zOwor6YGy5bu2IDwgdG9cLWRlbGF5Owor6bK6IDwgY2F0XC1maXNoOwor5pSc5bi2IDwgdG9cLWNhcnJ5Owor5bu25bGVIDwgdG9cLXNjYWxlOwor6a+6IDwgYmxvd2Zpc2g7CivkuIDlsI/mmYIgPCBvbmVcLWhvdXI7Civpg6jkvY0gPCBwb3NpdGlvbjsKK+iSmeaJmOe+heaLiSA8IG1vdG9yb2xhOwor5Lq66KGM6YGTIDwgc2lkZXdhbGs7CivprIsgPCBmb3JlbG9jazsKK+msgCA8IHRvXC1zaGF2ZTsKK+mrtSA8IHdoaXNrZXJzOwor5YWn572uIDwgaW50ZXJuYWw7CivpmZDmnJ8gPCBkZWFkbGluZTsKK+WuieWFqOaApyA8IHNlY3VyaXR5Owor6auOIDwgaGlwXC1ib25lOwor6KiY5oa2IDwgbWVtb3JpZXM7CivpgbflsLEgPCB0b1wteWllbGQ7CivlvLfli4EgPCBwb3dlcmZ1bDsKK+auuuS6uiA8IGhvbWljaWRlOwor5YaN5L+d6Ki8IDwgcmVhc3N1cmU7Civpp6YgPCB0b1wtbW91bnQ7CivppqkgPCBhcm9tYXRpYzsKK+S6uuW3pea1geeUoiA8IGFib3J0aW9uOwor5Ymb5oCnIDwgcmlnaWRpdHk7CivppKsgPCBkdW1wbGluZzsKK+mkqSA8IGhpY2NvdWdoOwor6aSfIDwgbGliYXRpb247CivppJkgPCB0b1wtYWRvcm47CivporEgPCB0YWlwaG9vbjsKK+WLg+WLgyA8IHRocml2aW5nOwor5pOB5pOgIDwgdG9cLWNyb3dkOwor5o6I6KqyIDwgdG9cLXRlYWNoOwor6Kej5pWjIDwgZGlzc29sdmU7Civpn6EgPCBnb3JnZW91czsKK+mfoCA8IGtuZWVcLXBhZDsKK+mZsOaApyA8IGZlbWluaW5lOwor6Z26IDwgc3RvY2tpbmc7Civli5XkvZwgPCBtb3ZlbWVudDsKK+mbnuWwvumFkiA8IGNvY2t0YWlsOwor5pWm5L+DIDwgdG9cLXByZXNzOwor6ZyoIDwgY2xvdWRpbmc7CivmqYTmrJbnkIMgPCBmb290YmFsbDsKK+mbh+WToSA8IGVtcGxveWVlOwor54CJ6JelIDwgbGF4YXRpdmU7Civmj5vnva4gPCBkaXNwbGFjZTsKK+W5s+W6lemNiyA8IHNhdWNlcGFuOwor57SA5b+156KRIDwgbW9udW1lbnQ7CivlnJborIAgPCBjb25zcGlyZTsKK+iRo+S6iyA8IGRpcmVjdG9yOwor5YuV5Lq6IDwgdG91Y2hpbmc7CivpmLggPCBkaXN0cmVzczsKK+mYu+aTiiA8IHRvXC1jaGVjazsKK+ijnOiKsSA8IGFwcGxpcXVlOwor6ZWlIDwgbHV0ZXRpdW07CivloZfmirkgPCB0b1wtc21lYXI7Civoo53oiLkgPCBzaGlwbWVudDsKK+asuuWjkyA8IHRvXC1idWxseTsKK+iNkua2vCA8IGRlc29sYXRlOwor5Ye55p2/IDwgaW50YWdsaW87CivliqPli6IgPCBpbmZlcmlvcjsKK+WWh+WPreawtOS7mSA8IGRhZmZvZGlsOwor5YiG5pW4IDwgZnJhY3Rpb247Civlo5PlipsgPCBwcmVzc3VyZTsKK+mCo+WAiyA8IHRoYXRcLW9uZTsKK+eEoeaDhSA8IHBpdGlsZXNzOwor5pOm5a+rIDwgdG9cLWVyYXNlOwor5aOT5Yi2IDwgc3VwcHJlc3M7Civnsr7norogPCBhY2N1cmF0ZTsKK+mNqSA8IG5vYmVsaXVtOwor6Y2aIDwgZnJvbnRsZXQ7CivkvrXlhaXogIUgPCBpbnRydWRlcjsKK+e2k+W4uCA8IGV2ZXJ5ZGF5Owor6YySIDwgYWN0aW5pdW07CivmlLnpnanogIUgPCByZWZvcm1lcjsKK+atpeWFtSA8IGluZmFudHJ5Owor6YqNIDwgYVwtc2lja2xlOwor5bmz5oi/IDwgYnVuZ2Fsb3c7CivlhrDmtrwgPCBpY2VcLWNvbGQ7CivkvIHmpa3lhafntrLot68gPCBpbnRyYW5ldDsKK+W5u+aDsyA8IGRlbHVzaW9uOwor5bqP5bmVIDwgcHJvbG9ndWU7CivphoYgPCB3aW5lXC1jdXA7CivphoMgPCBtYXJpbmF0ZTsKK+mFsiA8IGhhbmdvdmVyOwor6YSIIDwgc2xpcHBlcnM7Civpgb/lhY0gPCB0b1wtYXZlcnQ7CivloLTmiYAgPCBsb2NhdGlvbjsKK+mChSA8IGhlc2l0YW50Owor6ZuH5Li7IDwgZW1wbG95ZXI7Civmj63nmbwgPCBkaXNjbG9zZTsKK+i/uyA8IHRvXC1zaGlmdDsKK+WCs+ioiiA8IHN1YnBvZW5hOwor6KmV5LywIDwgZXZhbHVhdGU7CivmiYvmj5DnrrEgPCBzdWl0Y2FzZTsKK+WBvemAoCA8IHRvXC1mb3JnZTsKK+eBq+eJhiA8IGZpcmV3YWxsOwor6L2KIDwgYXhsZVwtdGlwOwor6LysIDwgYVwtaGVhcnNlOwor5Ye25omLIDwgbXVyZGVyZXI7CivkuI3lkIzmhI8gPCBkaXNhZ3JlZTsKK+WFseWSjOWciyA8IHJlcHVibGljOwor54Sh5a6zIDwgaGFybWxlc3M7Civou5/oho8gPCBvaW50bWVudDsKK+i5viA8IHRvXC1zcXVhdDsKK+aOjOiBsiA8IGFwcGxhdXNlOwor6KGo6KeAIDwgYXBwYXJlbnQ7CivouacgPCB0b1wtc3BvaWw7Civln4vmspIgPCBvYmxpdmlvbjsKK+W5s+W4uCA8IG9yZGluYXJ5Owor6LimIDwgdGhlXC1zaGluOwor5ouU6ZmkIDwgcHVsbFwtb3V0Owor5aKe5YqgIDwgdG9cLXJhaXNlOwor6LeCIDwgY3JlZXBpbmc7CivnhKHoq5bkvZXkuosgPCBhbnl0aGluZzsKK+aRqeaTpiA8IGZyaWN0aW9uOwor6Ka65b6XIDwgdG9cLXRoaW5rOwor6auY6LK0IDwgZ3JhbmRldXI7Civmo5Lno6jmqZ8gPCByb2RcLW1pbGw7CivlhYXnlbYgPCBzZXJ2ZVwtYXM7CivngrrmmYIgPCB0aW1ld2lzZTsKK+mBlOWIsCA8IHRvXC1yZWFjaDsKK+ixjiA8IHZlcnRpY2FsOwor6KW/5pa5IDwgdGhlXC13ZXN0Owor57K+5Yqb5YWF5rKbIDwgdmlnb3JvdXM7CivorbkgPCB0b1wtc2hvdXQ7CivpgJrloLEgPCBidWxsZXRpbjsKK+aSpeWtkCA8IHBsZWN0cnVtOwor5oqX6auUIDwgYW50aWJvZHk7Civoh6jov5EgPCBjbG9zZVwtdG87CivojqvlpKcgPCBncmVhdGVzdDsKK+WTpeWAq+W4g+e0gCA8IGNvbHVtYnVzOwor5YiH5a+mIDwgZmVhc2libGU7Civoq4YgPCB0b1wtY2hlYXQ7CivoqYsgPCB0b1wtY3Vyc2U7CivoqYogPCBwbGVhc2luZzsKK+WIhuWtkCA8IG1vbGVjdWxlOwor55u45oeJIDwgcmVsZXZhbnQ7Civlt6bovKrmiYvmp40gPCByZXZvbHZlcjsKK+mYu+WhniA8IHRvXC1ibG9jazsKK+iltiA8IGlnbm9yYW50Owor57WV5bCNIDwgYWJzb2x1dGU7CivopasgPCByYWluY29hdDsKK+WIhuWoqSA8IGRlbGl2ZXJ5Owor566h6YGTIDwgcGlwZWxpbmU7Civlk6XlgKvmr5Tkup4gPCBjb2xvbWJpYTsKK+mBiuS8tCA8IHBsYXltYXRlOwor5bel5qWtIDwgaW5kdXN0cnk7CivlhrDmjpIgPCBpY2VcLXJhZnQ7CivpgLLlhaUgPCB0b1wtZW50ZXI7CivlsI/lpJzmm7IgPCBzZXJlbmFkZTsKK+Wwj+aomemhjCA8IHN1YnRpdGxlOwor6Lev6Z2iIDwgcGF2ZW1lbnQ7CivonZ8gPCBoZWRnZWhvZzsKK+idjyA8IFwoaW5zZWN0XCk7CivmkpLmr43ogLPoqJjkuIsgPCAyXC1zYW11ZWw7CivmkpLmr43ogLPoqJjkuIogPCAxXC1zYW11ZWw7CivmnInmqZ/pq5QgPCBvcmdhbmlzbTsKK+ebtOW+kSA8IGRpYW1ldGVyOwor54Sh5ZCNIDwgbmFtZWxlc3M7CivloLXloZ4gPCBibG9ja2FnZTsKK+aSpOWbniA8IHdpdGhkcmF3Owor6JqzIDwgYW50XC1lZ2dzOwor57aT5YW4IDwgY2xhc3NpY3M7CivmrbvooZrooZUgPCBkZWFkXC1lbmQ7CivpqLDpqLAgPCBzdGVhbWluZzsKK+S6pOmfv+absiA8IHN5bXBob255Owor6YC85Lq6IDwgcHJlc3Npbmc7CivnhKHliqkgPCBoZWxwbGVzczsKK+aOoeeUqCA8IHRvXC1hZG9wdDsKK+W3suaVhSA8IHRoZVwtbGF0ZTsKK+eZvOaxlyA8IHRvXC1zd2VhdDsKK+Wci+eriyA8IG5hdGlvbmFsOwor5pmC6ZaT6KGoIDwgc2NoZWR1bGU7CivolIkgPCBlYXJ0aFwtdXA7CivnrrToqIAgPCBwcm92ZXJiczsKK+ijnOeIkCA8IGZldHRsaW5nOwor6Ieq6KO9IDwgaG9tZW1hZGU7CivokZYgPCBmb2xsaWNsZTsKK+mgreWQkeWJjSA8IGhlYWRsb25nOwor6Zi75YqbIDwgb2JzdGFjbGU7CivmjqLpmqrogIUgPCBleHBsb3JlcjsKK+igleiglSA8IHdpZ2dsaW5nOwor6ImpIDwgdGhvbGVwaW47CivpgIHliKUgPCBmYXJld2VsbDsKK+iJjCA8IHRvXC1jYXVsazsKK+eEoeS6uiA8IHVubWFubmVkOwor5YWs5pakIDwga2lsb2dyYW07CivlkJvkuLvmlL/msrsgPCBtb25hcmNoeTsKK+WPl+mbo+iAhSA8IHN1ZmZlcmVyOwor5oq96LGhIDwgYWJzdHJhY3Q7Civlh7rlj6MgPCB0b1wtc3BlYWs7CivohLAgPCB0aGVcLW5lY2s7CivopqrlloQgPCBnb29kd2lsbDsKK+iIiOiHtCA8IGludGVyZXN0Owor6YCU5LitIDwgZW5cLXJvdXRlOwor6IKPIDwgY29wdWxhdGU7CivplpPmjqUgPCBpbmRpcmVjdDsKK+mQtei3ryA8IHJhaWxyb2FkOwor5pCs5byEIDwgbW92ZVwtc3RoOwor5be05ouJ5ZytIDwgcGFyYWd1YXk7CivmqJnmnKwgPCBzcGVjaW1lbjsKK+esrOS4gOatpSA8IHN0ZXBcLW9uZTsKK+iqv+WRs+axgSA8IGRyZXNzaW5nOwor6YCA5L2NIDwgYWJkaWNhdGU7CivnvYcgPCBhXC1nb2JsZXQ7CivpgIPkuqEgPCBmdWdpdGl2ZTsKK+aIsOmspSA8IHRvXC1maWdodDsKK+e1seS4gCA8IHRvXC11bmlmeTsKK+WIkeS6iyA8IGNyaW1pbmFsOwor5pW45pOa5bqrIDwgZGF0YWJhc2U7CivnuL8gPCBzdHJlYW1lcjsKK+e4tCA8IHRvd1wtbGluZTsKK+WCteasiuS6uiA8IGNyZWRpdG9yOwor6KGd56qBIDwgY29uZmxpY3Q7Civov73kuIogPCBvdmVydGFrZTsKK+e2ryA8IHRvXC1icmFpZDsKK+e2qiA8IGRhcmtcLXJlZDsKK+iIquepuiA8IGF2aWF0aW9uOwor5L+u6L6tIDwgcmhldG9yaWM7Civmv77mtrIgPCBmaWx0cmF0ZTsKK+S6uuWPo+eooOWvhiA8IHBvcHVsb3VzOwor57SeIDwgYVwtZnJpbmdlOwor5bCN6Z2iIDwgb3Bwb3NpdGU7Civlh73ku7YgPCBsZXR0ZXJlczsKK+W8n+WFhOWAkSA8IGJyZXRocmVuOwor5bCP6Kqq5a62IDwgbm92ZWxpc3Q7CivnsaMgPCBib3dcLWNhc2U7CivnsKwgPCBcKGJhbWJvb1wpOwor6aa06bm/IDwgcmVpbmRlZXI7CivpqZroqJ0gPCBjb25mb3VuZDsKK+aNleeNsiA8IHRvXC1jYXRjaDsKK+aOoeaooyA8IHNhbXBsaW5nOwor57SU5ZOBIDwgc3Rlcmxpbmc7Civov5HkvoYgPCByZWNlbnRseTsKK+enjyA8IHRvXC13YXN0ZTsKK+esrOS6lOWNgSA8IGZpZnRpZXRoOwor5LiJ5piO5rK7IDwgc2FuZHdpY2g7Civlr7rpmaIgPCBjbG9pc3RlcjsKK+etlOipsSA8IHRvXC1yZXBseTsKK+WCrOWMluWKkSA8IGNhdGFseXN0Owor54Gr5bGxIDwgdm9sY2FuaWM7Civlhbblr6YgPCBhY3R1YWxseTsKK+eUn+ipniA8IG5ld1wtd29yZDsKK+ejnyA8IG1lZGlvY3JlOwor5qK16KqeIDwgc2Fuc2tyaXQ7Civnoo8gPCBjb2xvdXJlZDsKK+S+v+mBkyA8IHNob3J0Y3V0Owor5raI6LK76ICFIDwgY29uc3VtZXI7Civlr6fpnZwgPCB0cmFucXVpbDsKK+eguSA8IGFzdGF0aW5lOwor55+LIDwgdG9cLXN0YXJlOwor5bCB6Y6WIDwgYmxvY2thZGU7Civkv6/oppYgPCBvdmVybG9vazsKK+eekyA8IHRvXC1zbGVlcDsKK+edjyA8IGJlXC10aXJlZDsKK+W8leS6uuazqOebriA8IHN0cmlraW5nOwor552FIDwgYmlnXC1leWVkOwor5r+V5rCjIDwgbW9pc3R1cmU7Civnm6wgPCBzYWx0XC1waXQ7CivpmL/lpYfmrbfmlq8gPCBhY2hpbGxlczsKK+eyvuWvhiA8IGFjY3VyYWN5Owor6Iy25YyZIDwgdGVhc3Bvb247CivlhYTlvJ8gPCBicm90aGVyczsKK+eZkiA8IGdldFwtd2VsbDsKK+eZgyA8IHdlYWtuZXNzOwor55i8IDwgc2lja25lc3M7CivnmLYgPCB0b1wtY291Z2g7CivnmLAgPCBzY3JvZnVsYTsKK+iIiOebmyA8IGZsb3VyaXNoOwor5YCY6IulIDwgcHJvdmlkZWQ7Civpl5zkv4IgPCByZWxhdGlvbjsKK+eZvOWwhCA8IHRvXC1zaG9vdDsKK+eTqSA8IGtpbG93YXR0Owor55CrIDwgb3JuYW1lbnQ7CivmjqHmjpggPCBleGNhdmF0ZTsKK+i2iumBjiA8IHRvXC1jcm9zczsKK+ePtyA8IFwvMlwtcHJcLXN0Owor5YW15ZmoIDwgd2VhcG9ucnk7Civmi5Tnr4AgPCBqb2ludGluZzsKK+a8lOe/kiA8IGV4ZXJjaXNlOwor5aWn5b635L+u5pavIDwgb2R5c3NldXM7CivntIrkuoIgPCBkaXNvcmRlcjsKK+i3s+iIniA8IHRvXC1kYW5jZTsKK+eKjiA8IHRoZVwtemVidTsKK+eJsyA8IFwoYm92aW5lXCk7Civnr4TnlocgPCBjYXRlZ29yeTsKK+WFteWToSA8IHNvbGRpZXJzOwor5ruy6ImyIDwgYmxlZWRpbmc7CivnhqQgPCBcKHBlcnNvblwpOwor6JuL6buDIDwgZWdnXC15b2xrOwor54SMIDwgdG9cLWxpZ2h0Owor54KkIDwgaWxsdW1pbmU7Civog4zpnaIgPCB0aGVcLWJhY2s7CivngKEgPCBzbGlwcGVyeTsKK+WdpuahkeWwvOS6niA8IHRhbnphbmlhOwor6LyU5bCOIDwgdG9cLWNvYWNoOwor5a+26LK0IDwgdmFsdWFibGU7CivmvY4gPCByaXBwbGluZzsKK+WFpeWPoyA8IGVudHJhbmNlOwor5rmiIDwgYmF0aHJvb207CivplovlibUgPCBpbml0aWF0ZTsKK+S+teidlSA8IHRvXC1lcm9kZTsKK+aJgeifsiA8IGZsYXR3b3JtOwor57aT6Zm46LevIDwgb3ZlcmxhbmQ7Civlrrnph48gPCBjYXBhY2l0eTsKK+aPj+WcliA8IHRvXC10cmFjZTsKK+Wbm+aciOWNgeS4g+iZnyA8IGFwcmlsXC0xNzsKK+i1pOi2syA8IGJhcmVmb290Owor5rOQIDwgdG9cLXdyaXRlOwor5rKNIDwgZnJlZXppbmc7CivlnKjmiLblpJYgPCBvdXRkb29yczsKK+awiSA8IHJlc3RsZXNzOwor5q++IDwgYVwtY29hcnNlOwor5q+7IDwgdG9cLW1vdWx0Owor5LiN6aGn5LiA5YiHIDwgcmVja2xlc3M7Civmrr0gPCBtaXhlZFwtdXA7Civoo73lk4EgPCBwcm9kdWN0czsKK+WFseS6qyA8IHRvXC1zaGFyZTsKK+asmyA8IGFcLWhhbmRsZTsKK+aTpuajkueQgyA8IGZvdWxcLXRpcDsKK+argyA8IGN1cGJvYXJkOwor5YWs5Li7IDwgcHJpbmNlc3M7Civmj5DlkI0gPCBub21pbmF0ZTsKK+Wbm+aWuSA8IGZvdXJcLXdheTsKK+S4reS4lue0gCA8IG1lZGlldmFsOwor5qiaIDwgYVwtcHVsbGV5Owor57KX5Y6yIDwgYWJyYXNpdmU7Civlgr7ogb3ogIUgPCBsaXN0ZW5lcjsKK+akhCA8IHRvXC1ncmFmdDsKK+aisSA8IGRvb3JzaWxsOwor5o6l5pS25ZmoIDwgcmVjZWl2ZXI7Civli6LlpoLnoLTnq7kgPCBzd2VlcGluZzsKK+iHquayuyA8IGF1dG9ub215Owor6auY5p62IDwgb3ZlcmhlYWQ7Civlm7Dmg5EgPCBiZXdpbGRlcjsKK+afpCA8IGhhd3Rob3JuOwor5p67IDwgbG9uZ1wtb2FyOwor56yR6IGyIDwgbGF1Z2h0ZXI7CivovrLlrrbluq3pmaIgPCBmYXJteWFyZDsKK+advum8oCA8IHNxdWlycmVsOwor5a625bqt5L2c5qWtIDwgaG9tZXdvcms7CivlhYjku6QgPCBzaGlsbGluZzsKK+a4oOmBkyA8IGNoYW5uZWxzOwor5pihIDwgbG9uZ1wtZGF5Owor5qCh6KiCIDwgcmV2aXNpb247Civml5ggPCBhXC1wZW5ub247Civmo5LnkIMgPCBiYXNlYmFsbDsKK+WEquWFiCA8IHByaW9yaXR5Owor5pWqIDwgdG9cLXdlaWdoOwor5pSeIDwgdG9cLXNwbGl0Owor5pOpIDwgdG9cLXN0YWluOwor5Zm05rOJIDwgZm91bnRhaW47CivmkbcgPCB0b1wta25vY2s7CivmkLUgPCB3aXBlXC1vZmY7CivmkLIgPCB0b1wtc2VpemU7CivmkIsgPCB0b1wtdGh1bXA7Civmj7AgPCBwb2tlXC1vdXQ7Civmj5wgPCBjb3ZlclwtdXA7Civou43lo6sgPCBzZXJnZWFudDsKK+aPjCA8IHRvXC1zaGFrZTsKK+iho+W7miA8IHdhcmRyb2JlOwor5ouRIDwgdG9cLWNsYW1wOwor5Lu96YePIDwgcXVhbnRpdHk7CivmiYUgPCBnYXRlXC1iYXI7Civmh4noqbIgPCBvdWdodFwtdG87CivmjqHlhYkgPCBsaWdodGluZzsKK+aHlSA8IHNhdGlhdGVkOwor5oaqIDwgY29tcG9zZWQ7CivokaHokITniZkgPCBwb3J0dWdhbDsKK+ijgeWIpCA8IGp1ZGdtZW50Owor5Y2z5bCH5L6G6IeoIDwgaW1taW5lbnQ7CivmhasgPCB0b1wtYWxhcm07CivmhYUgPCBhZ2l0YXRlZDsKK+aFgSA8IGRpc2hvbm9yOwor5Lq66aGeIDwgaHVtYW5pdHk7CivkvLDoqIggPCBlc3RpbWF0ZTsKK+aDlCA8IGNoZWVyZnVsOwor5Z2Q5LiLIDwgc2l0XC1kb3duOwor5Zue5a62IDwgaG9tZXdhcmQ7Civkvb/ogIUgPCBlbWlzc2FyeTsKK+aBnSA8IGNhcmVmcmVlOwor5omT56C0IDwgdG9cLWJyZWFrOwor5oGMIDwgdG9cLXdvcnJ5Owor5YGH5pyfIDwgdmFjYXRpb247CivkuI3mraPluLggPCBhYm5vcm1hbDsKK+iho+WtkCA8IGNvdmVyaW5nOwor6Z+z5qiC5YWJ56KfIDwgbXVzaWNcLWNkOwor6Lu85LqLIDwgYW5lY2RvdGU7Civlu6QgPCB0b1wtcGxhY2U7CivmirHmrYkgPCBiZVwtc29ycnk7CivmpbXlpb0gPCBmYWJ1bG91czsKK+alteWkpyA8IGVub3Jtb3VzOwor55WM5qiZIDwgbGFuZG1hcms7CivkuI3pgI/msKMgPCBhaXJ0aWdodDsKK+S6lOW9qeizk+e0myA8IGNvbG9yZnVsOwor5bi1IDwgcmVtbmFudHM7Civnr4DmhbYgPCBmZXN0aXZhbDsKK+aaluawo+apnyA8IHJhZGlhdG9yOwor5batIDwgZWxldmF0ZWQ7CivpmL/ogq/oibIgPCBhcmthbnNhczsKK+elnuWtuOeglOeptuaJgCA8IHNlbWluYXJ5Owor6ayn5Y2AIDwgZG93bnRvd247CivlsoogPCBmb290aGlsbDsKK+m8k+WQueiAhSA8IGFkdm9jYXRlOwor5L6155WlIDwgaW52YXNpb247CivkvbXntJcgPCBkb3VibGluZzsKK+eXheWkqyA8IHNpY2tcLW1hbjsKK+aOiOS6iCA8IHRvXC1hd2FyZDsKK+WcsOS4i+WupCA8IGJhc2VtZW50Owor5ZyL5YWnIDwgZG9tZXN0aWM7CivlrqwgPCBhcmNoaXZlczsKK+WsrCA8IG1pc3RyZXNzOwor57Ch5YyWIDwgc2ltcGxpZnk7CivmvKLlr4bniL7poJMgPCBoYW1pbHRvbjsKK+iyt+mAmiA8IHRvXC1icmliZTsKK+WGkueKr+iAhSA8IG9mZmVuZGVyOwor5aemIDwgYWR1bHRlcnk7Civnr6HlpaogPCB0b1wtdXN1cnA7Civoh6jluoogPCBjbGluaWNhbDsKK+S/neecn+W6piA8IGZpZGVsaXR5Owor5qC956iuIDwgdG9cLXBsYW50Owor5oiw55WlIDwgc3RyYXRlZ3k7CivlnJLkuIEgPCBnYXJkZW5lcjsKK+acrOmrlCA8IG5vdW1lbm9uOwor5Lq66YCgIDwgbWFuXC1tYWRlOwor6Kqe6KiA5a245a62IDwgbGluZ3Vpc3Q7CivlsYXmsJEgPCByZXNpZGVudDsKK+iFs+atpSA8IGZvb3RzdGVwOwor5Z+8IDwgaGVhZGxhbmQ7Civmi7zlrZcgPCBzcGVsbGluZzsKK+adsemDqCA8IHRoZVwtZWFzdDsKK+S4jemrlOmdoiA8IHNoYW1lZnVsOwor6auY5ZywIDwgaGlnaGxhbmQ7Civlm7rku7YgPCBmaXJtd2FyZTsKK+m+jemgreiAgeWkpyA8IGJpZ1wtYm9zczsKK+iFk+WIqemWgOabuCA8IHBoaWxlbW9uOwor6ZGy5bWMIDwgdG9cLWlubGF5Owor5qWt5YuZIDwgYnVzaW5lc3M7CivlgI3mlbggPCBtdWx0aXBsZTsKK+WwjeeFpyA8IGNvbnRyYXN0Owor5ZuuIDwgaW52ZWlnbGU7CivogqnohoAgPCBzaG91bGRlcjsKK+i6q+S7vSA8IGlkZW50aXR5Owor5ZeDIDwgdG9cLWZsdXRlOwor5bCx5q2kIDwgYW5kXC10aHVzOwor5Z+D5aGe5L+E5q+U5LqeIDwgZXRoaW9waWE7CivllYcgPCB0b1wtc3RhbGs7CivnrYbmnrYgPCBwZW5cLXJhY2s7CivllKUgPCBhXC1idW5kbGU7CivnlJ/ml6UgPCBiaXJ0aGRheTsKK+WRoCA8IHRvXC1zcHVydDsKK+mQmOaTuiA8IHBlbmR1bHVtOwor5bCP6KGd56qBIDwgc2tpcm1pc2g7Civlj5IgPCBvYmVkaWVudDsKK+WOtSA8IGFcLXNwcmluZzsKK+aKseaAqCA8IGNvbXBsYWluOwor5Y28IDwgdW5zdGVhZHk7CivljbkgPCBzeW1wYXRoeTsKK+WtuOe/kiA8IHRvXC1sZWFybjsKK+aKmOaJoyA8IGRpc2NvdW50Owor5YuMIDwgdG9cLWxhYm9yOwor5Yq7IDwgZmx1cnJpZWQ7Civmh7jnlpEgPCBzdXNwZW5zZTsKK+WKmSA8IGFcLWRpdmlkZTsKK+aHt+eWkSA8IHRvXC1kb3VidDsKK+eVtuWkqSA8IHRoYXRcLWRheTsKK+WJnyA8IHRvXC1wcmljazsKK+mNteebpCA8IGtleWJvYXJkOwor5YelIDwgdG9cLWR3ZWxsOwor5YaHIDwgaGF2ZVwtbm90Owor5o6S5rC05rigIDwgZHJhaW5hZ2U7Civlt7Tln7rmlq/lnaYgPCBwYWtpc3RhbjsKK+m6u+mGieWKkSA8IG5hcmNvdGljOwor5YODIDwgcHJlcGFyZWQ7CivlrrbnlKggPCBob21lXC11c2U7CivkvbQgPCBhXC1zZWNvbmQ7CivooqvkvrXlrrMgPCBzdHJpY2tlbjsKK+iHtOWKmyA8IHdvcmtcLWZvcjsKK+S6lOinkiA8IHBlbnRhZ29uOwor5LayIDwgdGhlXC1lZGdlOwor5LWyIDwgcmF3XC1oZW1wOwor5LWaIDwga2FvbGlhbmc7CivktZMgPCB0aGVcLW1vbGU7CivktYkgPCBhYnV0aWxvbjsKK+S0uyA8IGRyeVwtZm9vZDsKK+S0qyA8IGFudGVsb3BlOwor5oi/5p2xIDwgbGFuZGxvcmQ7CivktJogPCBzYWx0cG9uZDsKK+SzuyA8IGFuXC1lYWdsZTsKK+S/ruW7uiA8IHRvXC1idWlsZDsKK+SyliA8IGJpZ1wtZmlzaDsKK+ioiOeul+apnyA8IGNvbXB1dGVyOwor56qB55m8IDwgb3V0YnVyc3Q7CivksJ8gPCB0aGVcLXNvdWw7Civkr6ogPCBiaWdcLWhlYWQ7Civkv6HlvpIgPCBiZWxpZXZlcjsKK+SvmiA8IHRoZVwtcmliczsKK+SviSA8IHRvXC1jaG9rZTsKK+eZveacqOiAsyA8IHRyZW1lbGxhOwor5omT5o6DIDwgdG9cLWNsZWFuOwor5oqA5belIDwgbWVjaGFuaWM7CivmjIHkuYUgPCBkdXJhdGlvbjsKK+StsSA8IGFcLWxpdHRsZTsKK+miqOi7iiA8IHdpbmRtaWxsOwor542o6KOB6ICFIDwgZGljdGF0b3I7CivkrIkgPCBob3RcLXdpbmQ7Civkq7cgPCB0aGVcLWpvd2w7CivmiYvmj5AgPCBwb3J0YWJsZTsKK+S4jemdiCA8IG5vdFwtd29yazsKK+SrgyA8IHRoZVwtbGlwczsKK+SqtiA8IHRoZVwtY2hpbjsKK+SqqSA8IHRvXC1jaGFudDsKK+SqnCA8IGFcLXNoaWVsZDsKK+SqkSA8IHRvXC1zdGljazsKK+SqhSA8IGFcLXF1aXZlcjsKK+SpoCA8IGFcLWdpcmRsZTsKK+SpiSA8IHRoZVwtZmFjZTsKK+SpiCA8IGFcLXBsdW1weTsKK+SovCA8IGR5ZXN0dWZmOwor55Sf5a2YIDwgdG9cLWV4aXN0Owor6LOm56iFIDwgdGF4YXRpb247Civkp6sgPCBhXC10cmVuY2g7Civkp4EgPCB0b1wtbGVhdmU7CivmtbTooaMgPCBiYXRocm9iZTsKK+S4gOmdoiA8IG9uZVwtc2lkZTsKK+SlrSA8IGV2aWRlbmNlOwor5oGQ6b6NIDwgZGlub3NhdXI7CivoqJjpjITlk6EgPCByZWNvcmRlcjsKK+SkvyA8IHRvXC1jYXJ2ZTsKK+SktiA8IGFcLWhhbW1lcjsKK+SksyA8IGFcLW1pcnJvdzsKK+W3tOW3tOWkmuaWryA8IGJhcmJhZG9zOwor5KSrIDwgYVwtY2hpc2VsOwor5KSQIDwgdG9cLWRyaW5rOwor55Wr5YOPIDwgcG9ydHJhaXQ7CivnlbbkvZwgPCB0cmVhdFwtYXM7Civnpq7osowgPCBjb3VydGVzeTsKK+SikCA8IHRvXC1nb1wtdG87CivomIfmoLzomK0gPCBzY290bGFuZDsKK+S/oeWwgSA8IGVudmVsb3BlOwor5KC+IDwgdG9cLWRvZGdlOwor5KCsIDwgaW5zb21uaWE7CivkoJ4gPCB3cmlua2xlZDsKK+iBsueosSA8IHRvXC1jbGFpbTsKK+SggSA8IHRvXC1nb1wtdXA7Civkn7ggPCB0aGVcLWNhbGY7CivlsI3miYsgPCBvcHBvbmVudDsKK+S/oeWuiCA8IGFiaWRlXC1ieTsKK+SeriA8IHRvXC1jcmF3bDsKK+iBlue0hCA8IGNvdmVuYW50Owor5qCh5q2jIDwgcmVndWxhdGU7CivknYIgPCB0b1wtZXJlY3Q7CivknKwgPCBhXC1jYXZlcm47CivknJggPCB0b1wtZ3VhcmQ7CivknJAgPCB0b1wtbGliZWw7CivknIMgPCB0b1wtYmxhbWU7Civkm5IgPCB0b1wtYXJndWU7Civph43pu54gPCBlbXBoYXNpczsKK+SbhyA8IHRvXC1sYXVnaDsKK+SatyA8IHRvXC10cmVhdDsKK+SaryA8IHRvXC1xdWVsbDsKK+iBveecviA8IGF1ZGllbmNlOwor6JGh6JCE5ZySIDwgdmluZXlhcmQ7CivkmKsgPCBvbGRcLXJhZ3M7CivkmJwgPCBhXC1uYXBraW47CivkmIkgPCBzaWxrd29ybTsKK+mojuW4qyA8IGhvcnNlbWFuOwor56en6IuXIDwgc2VlZGxpbmc7Civkl5ggPCBhXC13ZWV2aWw7Civkl4ggPCBhXC1nYWRmbHk7Civkvb/oiIjlpa4gPCBleGNpdGluZzsKK+SXhyA8IHRoZVwtdG9hZDsKK+SWuyA8IGVwaGVtZXJhOwor5JakIDwgdG9cLWNyZWVwOwor5JabIDwgb2ZcLXRpZ2VyOwor56ys5Y2B5LiAIDwgZWxldmVudGg7Civmga3poIYgPCBkZWZlcmVudDsKK+mNteanvSA8IGtleVwtc2xvdDsKK+izvOeJqSA8IHNob3BwaW5nOwor5Zau5pOaIDwgcmVjZWlwdHM7CivmnIPoroogPCB2YXJpYWJsZTsKK+STlSA8IHBvbHlnYWxhOwor5JKzIDwgYVwtZmxvd2VyOwor5bCR5bm0IDwganV2ZW5pbGU7CivpqJnlrZAgPCBzd2luZGxlcjsKK+iBr+ebnyA8IGFsbGlhbmNlOwor5JGYIDwgdG9cLXBvdW5kOwor5JGDIDwgZGltXC1tb29uOwor5JCSIDwgbm90XC1maW5lOwor5pa556iL5byPIDwgZXF1YXRpb247Civot6/lj6MgPCBjcm9zc2luZzsKK+SPnyA8IGZhdFwtbWVhdDsKK+iZlee9sCA8IHBlbmFsaXplOwor5I+JIDwgdG9cLXdhdmVyOwor5I+IIDwgdG9cLXVuaXRlOwor6YeR6a2aIDwgZ29sZGZpc2g7CivkjrIgPCBlYXJcLWxvYmU7CivkjqMgPCBhXC1wbG91Z2g7CivlvavliLvlrrYgPCBzY3VscHRvcjsKK+SMtyA8IGFcLXRocmVhZDsKK+SMryA8IGFcLXRydWJhbjsKK+SMqyA8IGFcLWhhd3NlcjsKK+WQq+mHjyA8IGNvbnRlbnRzOwor5IyDIDwgcmF3XC1zaWxrOwor6Zi/5omY5ZOBIDwgYXRyb3BpbmU7Civki6EgPCB0b1wtcmVsYXg7Civki4MgPCBzdGluZ2luZzsKK+SKuCA8IHRvXC10d2lzdDsKK+SKnSA8IHRvXC1leGlsZTsKK+eUqOWKnyA8IGRpbGlnZW50Owor5IqBIDwgbGVhdmluZ3M7CivkibsgPCByZWRcLXJpY2U7CivkibEgPCBhXC1jcmFkbGU7CivkiZIgPCBhXC13aW5ub3c7CivkiLYgPCBhblwtYXJyb3c7CivlnLDljYDmgKcgPCByZWdpb25hbDsKK+SHjCA8IHRvXC1zdGFuZDsKK+SGuCA8IHNwYWNpb3VzOwor562G5ZCNIDwgcGVuXC1uYW1lOwor5L2b5pWZIDwgYnVkZGhpc207Civlj6/pnaAgPCByZWxpYWJsZTsKK+S4ieinkuW9oiA8IHRyaWFuZ2xlOwor5a+T5omAIDwgZHdlbGxpbmc7Civkg5EgPCBzcGVja2xlczsKK+SBpSA8IHRvXC1ibGluazsKK+SBnCA8IGJpZ1wtZXllczsKK+eUseS9mSA8IG93aW5nXC10bzsKK+SAiCA8IGFcLXZlc3NlbDsKK+O/oiA8IHRvXC1zaGluZTsKK+O/oSA8IGFcLWhlbG1ldDsKK+O/iCA8IGFuXC11bGNlcjsKK+O/hSA8IHJpbmd3b3JtOwor4764IDwgYVwtc2NhYmJ5Owor6aCB6Z2iIDwgd2ViXC1wYWdlOwor476NIDwgZGlzZWFzZXM7CivjvbkgPCB0b1wtZmFpbnQ7CivmuLTmnJsgPCBkZXNpcm91czsKK+acrOiDvSA8IGluc3RpbmN0Owor5Zec5aW9IDwgZm9uZG5lc3M7CivntYLnq6/nlKjmiLYgPCBlbmRcLXVzZXI7CivloqjmsLTnk7bmnrYgPCBpbmtzdGFuZDsKK+O6miA8IGFuXC1vdHRlcjsKK+iqmOaLkOiAhSA8IGFiZHVjdG9yOwor57y66Zm3IDwgYVwtZGVmZWN0Owor47qHIDwgYVwtd2FyZGVuOwor47m4IDwgdGhlXC1saW9uOwor6JuL5q68IDwgZWdnc2hlbGw7CivmiLLliofmgKcgPCBkcmFtYXRpYzsKK+aHsue9sOaApyA8IHB1bml0aXZlOwor47idIDwgYVwtc2hvdmVsOwor5YWr6KeS5qWTIDwgYWxhbmdpdW07Civjt4AgPCBzb2xpdGFyeTsKK+O2vCA8IHZlcnlcLWhvdDsKK+O0tiA8IHRvXC13YXRlcjsKK+a7keWGsCA8IHRvXC1za2F0ZTsKK+O0iiA8IGFuXC1hYnlzczsKK+OzqyA8IHJlcGVhdGVkOwor47OSIDwgc3RhdHV0ZXM7CivljJfmtbfpgZMgPCBob2trYWlkbzsKK+OytyA8IG5pdHJvZ2VuOwor47KzIDwgdG9cLXRvdWNoOwor5a6X5pWZIDwgcmVsaWdpb247CivkvY7miJDmnKwgPCBsb3dcLWNvc3Q7Civjsb8gPCB0aGVcLWh1c2s7CivjsbogPCB0aGVcLXNraW47CivjsaIgPCB0aGVcLWRlYWQ7CivjsZcgPCBhXC1icmVhdGg7Civlkb3ohIggPCBsaWZlbGluZTsKK+S5g+iHsyA8IGFuZFwtZXZlbjsKK+enn+eohSA8IGxhbmRcLXRheDsKK+S4jeihjCA8IHdvbicndFwtZG87CivlrojmmYIgPCBwdW5jdHVhbDsKK+OurSA8IGFcLWNhc2tldDsKK+aal+i9iSA8IGJsYWNrb3V0Owor5omT5Y2wIDwgdG9cLXByaW50Owor46ynIDwgYVwtY29sbGFyOwor5piO5L+h54mHIDwgcG9zdGNhcmQ7CivmlZHotJbkuLsgPCByZWRlZW1lcjsKK+OrvSA8IGRhcmtuZXNzOwor46qQIDwgdW5zdGFibGU7CivosoLnmq4gPCBtaW5rXC1mdXI7CivjqaggPCB0b1wtY3JhY2s7CivjqZMgPCB0b1wtd291bmQ7CivphqvpmaIgPCBob3NwaXRhbDsKK+OokyA8IHRvXC1jbG9zZTsKK+OogSA8IHRvXC10aHJvdzsKK+OntSA8IHRvXC1leGFjdDsKK+OnsSA8IHRvXC1icmluZzsKK+azs+ihoyA8IHN3aW1zdWl0Owor46a/IDwgYVwtd2luZG93Owor5rea5rC0IDwgdGVhcmRyb3A7CivnlJ/lkb3lipsgPCB2aXRhbGl0eTsKK+OlsCA8IG1vdXJuZnVsOwor46WBIDwgbW9yYWxpdHk7CivjpK4gPCBhblwtZXJyb3I7CivjpI8gPCBncmlldm91czsKK+iCieahgiA8IGNpbm5hbW9uOwor46OrIDwgdGhlXC1oZWVsOwor5rib5o6JIDwgc3VidHJhY3Q7Civjo54gPCB0b1wtd2Fsa2k7CivpvLvngo4gPCByaGluaXRpczsKK+OguSA8IGFcLXR1cmJhbjsKK+eUoumHj+WkmiA8IGZydWl0ZnVsOwor55yL5a6I6ICFIDwgd2F0Y2htYW47CivjoIogPCBhXC1ydWdnZWQ7Civms5XliKnos73kurogPCBwaGFyaXNlZTsKK+OetyA8IGx1eHVpYW50Owor5ZCR6KW/IDwgd2VzdHdhcmQ7Civlj5vpgIYgPCB0b1wtcmViZWw7CivjnpEgPCB0aGVcLXRhaWw7CivjnokgPCBiaWdcLWZvb3Q7Civjna0gPCB0b1wtYXdha2U7CivjnZggPCBoYXJtb25veTsKK+OctiA8IGFcLWNvdXBsZTsKK+aIsOWNgCA8IHdhclwtem9uZTsKK+WPseiyrCA8IHJlcHJvYWNoOwor5L2U6aCY6ICFIDwgb2NjdXBhbnQ7Civnp5HnvoXmi4nlpJogPCBjb2xvcmFkbzsKK+iynua9lCA8IGNoYXN0aXR5Owor45miIDwgYVwtdHJvd2VsOwor45mDIDwgYVwtY2F2aXR5Owor5qCX5a2QIDwgY2hlc3RudXQ7CivjmJkgPCB0b1wtZ3JvYW47CivjmIAgPCB0b1wtc291bmQ7CivkuK3nubwgPCB0b1wtcmVsYXk7Civjl6ogPCBtb3V0aGZ1bDsKK+OXnCA8IHRvXC1zbWVsbDsKK+OXiSA8IGluY2lzaXZlOwor45apIDwgbm90XC1wdXJlOwor45W8IDwgdG9cLWJyYXdsOwor6Y6u5Y2AIDwgdG93bnNoaXA7CivjlZsgPCBhXC1mcmllbmQ7CivjlZAgPCBpbmNsaW5lZDsKK+OViiA8IHRvXC1zbGFudDsKK+adv+ayuSA8IGxlYWZcLWZhdDsKK+WMquW+kumbhuWcmCA8IGdhbmdzdGVyOwor45OTIDwgdGhpblwtaWNlOwor45K5IDwgdG9cLXVwc2V0Owor5oe45Z6CIDwgb3Zlcmhhbmc7CivlsITpoLvlmarpn7MgPCByZlwtbm9pc2U7CivphZLprLwgPCBkcnVua2FyZDsKK+S4jeiCliA8IHVud29ydGh5Owor54+t5qmfIDwgYWlybGluZXI7CivjkJwgPCBhblwtZW5lbXk7Civkvb/lkIPpqZogPCBhc3RvbmlzaDsKK+eql+WtkCA8IGNhc2VtZW50Owor5oeJ5bCNIDwgcmVzcG9uc2U7CivkuqTmtYEgPCBleGNoYW5nZTsKK+WPm+iuiiA8IHJlbmVnYWRlOwor5oiw5LqLIDwgZmlnaHRpbmc7CivlubjlrZjogIUgPCBzdXJ2aXZvcjsKK+S6uumBk+S4u+e+qSA8IGh1bWFuaXNtOwor5LiA5b+D5LiA5oSPIDwgaW50ZW50bHk7Civmq7voirHojYkgPCBwcmltcm9zZTsKK+aguOWHhiA8IHNhbmN0aW9uOwor5pif5pyf5ZubIDwgdGh1cnNkYXk7CivmsbrlrprmgKcgPCBkZWNpc2l2ZTsKK+aXpeiAs+abvCA8IGdlcm1hbmljOwor6K206LKsIDwgZGVub3VuY2U7CivmoYjku7YgPCBsYXdcLWNhc2U7Civlub7kvZXlrbggPCBnZW9tZXRyeTsKK+Wnu+imqiA8IGFmZmluaXR5Owor5p2R5rCRIDwgdmlsbGFnZXI7CivmhbfmhaggPCB2ZWhlbWVudDsKK+irlum7niA8IGFyZ3VtZW50Owor5YK+5ZCR5pa8IDwgcHJvbmVcLXRvOwor6buD55OcIDwgY3VjdW1iZXI7Civmmpfoh6ogPCBpbndhcmRseTsKK+aHiuWWqiA8IGRlamVjdGVkOwor56iA5pyJIDwgdW5jb21tb247Civpo5vmqZ8gPCBhaXJwbGFuZTsKK+WupOWPiyA8IHJvb21tYXRlOwor6LK25oqRIDwgYmVsaXR0bGU7Civog4zljIUgPCBrbmFwc2FjazsKK+eyvuelnumMr+S6giA8IGluc2FuaXR5Owor6buo5rS+IDwgcGFydGlzYW47CivlrZDlsaQgPCBzdWJsYXllcjsKK+mjsuaWmSA8IGJldmVyYWdlOwor5LiJ5pyI5LqM5Y2B5LiA6JmfIDwgbWFyY2hcLTIxOwor5Lq65omLIDwgbWFucG93ZXI7CivmmJ/mnJ/lha0gPCBzYXR1cmRheTsKK+mYsuWuiOiAhSA8IGRlZmVuZGVyOwor5LqM5pyIIDwgZmVicnVhcnk7CivmspLokL0gPCBkb3duZmFsbDsKK+WQq+eisyA8IGNhcmJvbmljOwor5ZiJ5bm06I+v5pyDIDwgY2Fybml2YWw7CivmnIDngrogPCB0aGVcLW1vc3Q7CivljZrojKjnk6bntI0gPCBib3Rzd2FuYTsKK+S4jeeUqCA8IG5lZWRcLW5vdDsKK+miqOawtCA8IGZlbmdzaHVpOwor5rC06LevIDwgd2F0ZXJ3YXk7CivlrZDlpbMgPCBjaGlsZHJlbjsKK+S6i+aVhSA8IGFjY2lkZW50Owor5Yi65r+A54mpIDwgc3RpbXVsdXM7Civlo5/mlrfosqnos6MgPCBtb25vcG9seTsKK+S4jeeNqCA8IG5vdFwtb25seTsKK+Wlp+WFi+aLieiNt+mmrCA8IG9rbGFob21hOwor5a215YyWIDwgYnJlZWRpbmc7Civpnq3on7IgPCB3aGlwd29ybTsKK+S4jeeIvSA8IG5vdFwtd2VsbDsKK+S/neWKoOWIqeS6niA8IGJ1bGdhcmlhOwor5oeC5LqLIDwgc2Vuc2libGU7Civpo5/mhb4gPCBhcHBldGl0ZTsKK+mch+mpmiA8IHRvXC1zaG9jazsKK+WQuOeFmSA8IHRvXC1zbW9rZTsKK+isneisnSA8IHRvXC10aGFuazsKK+S4jea/nyA8IG5vdFwtZ29vZDsKK+mgreeXmyA8IGhlYWRhY2hlOwor5pqX55uSIDwgbWFnYXppbmU7CivkuK3mraIgPCB0b1wtY2Vhc2U7CivorJvoqbEgPCBhXC1zcGVlY2g7CivmnpflnLAgPCB3b29kbGFuZDsKK+aetuWLoiA8IGF0dGl0dWRlOwor6LK05peP6Lqr5Lu9IDwgbG9yZHNoaXA7CivkuI3kv6HnlKggPCBkaXN0cnVzdDsKK+WkqumVtyA8IG92ZXJzaXplOwor5Yui6aCtIDwgbW9tZW50dW07CivmhJrlvIQgPCBkZXJpc2lvbjsKK+W+gOmChCA8IGNvbnRhY3RzOwor56Sm55SiIDwgbWluZXJhbHM7Civmj5Dkvpvoq7ggPCBwcm92aWRlcjsKK+eIkOmCiiA8IGZpcmVzaWRlOwor6IKM6IKJ55m86YGUIDwgbXVzY3VsYXI7Civlt6XnqIvluKsgPCBlbmdpbmVlcjsKK+iuiueoriA8IG11dGF0aW9uOwor5Lit57m85ZmoIDwgcmVwZWF0ZXI7Civoq5bov7AgPCB0cmVhdGlzZTsKK+a0i+eQteeQtiA8IG1hbmRvbGluOwor6IGW5YyWIDwgc2FuY3RpZnk7Civmg6HkvZzliocgPCBtaXNjaGllZjsKK+mHjeeUsyA8IHJlYWZmaXJtOwor5pq05rSqIDwgYVwtc3VkZGVuOwor5a2Q5Y2I57eaIDwgbWVyaWRpYW47Civoo73kvZzogIUgPCBwcm9kdWNlcjsKK+S4jeWcqOS5jiA8IG5vdFwtbWluZDsKK+mkoeWFkiA8IHN0dWZmaW5nOwor6Z+z5qiC5a62IDwgbXVzaWNpYW47Civkvb/purvnl7ogPCBwYXJhbHl6ZTsKK+WNg+Wtl+evgCA8IGtpbG9ieXRlOwor6K6K6Zi75ZmoIDwgdGhlb3N0YXQ7CivmtYHmhJ/nlqvoi5cgPCBmbHVcLXNob3Q7CivmtbflpJYgPCBvdmVyc2VhczsKK+eOi+WutiA8IHByaW5jZWx5Owor5ZOo5YW1IDwgc2VudGluZWw7Civmg7PlrrYgPCBob21lc2ljazsKK+iyt+S4uyA8IGN1c3RvbWVyOwor6aCQ5risIDwgZm9yZWNhc3Q7Civnvo7ml6UgPCB1c1wtamFwYW47CivosqDlgrUgPCBpbmRlYnRlZDsKK+mbqOmHjyA8IHJhaW5mYWxsOwor5Y+45rOVIDwganVkaWNpYWw7CivlpbPmiL/mnbEgPCBsYW5kbGFkeTsKK+W3peS9nOmBjuW6piA8IG92ZXJ3b3JrOwor5Yqg6ZW3IDwgbGVuZ3RoZW47CivlkJDmo4QgPCB0b1wtc3B1cm47CivomZXliIYgPCBkaXNwb3NhbDsKK+aXpee+jiA8IGphcGFuXC11czsKK+WinumrmCA8IGhlaWdodGVuOwor6YGy6aCTIDwgaW5hY3RpdmU7CivosqHkuLsgPCByaWNoXC1tYW47CivlpKLoqbEgPCBkYXlkcmVhbTsKK+aPkOS+m+iAhSA8IHN1cHBsaWVyOwor5LiN5oeIIDwgdW50aXJpbmc7CivmnIDlsJEgPCBzbWFsbGVzdDsKK+WgheWbuuaApyA8IGZpcm1uZXNzOwor6K2354WnIDwgcGFzc3BvcnQ7CivkuLvlrrAgPCBkb21pbmF0ZTsKK+WkouimiyA8IHRvXC1kcmVhbTsKK+S4jeaAlSA8IGZlYXJsZXNzOwor5rKW5rSXIDwgdG9cLXJpbnNlOwor5LiN5b6IIDwgbm90XC12ZXJ5Owor55m95YyW55eFIDwgYWxiaW5pc207CivlibfpmaQgPCByb290XC1vdXQ7CivnpZ7mgKcgPCBkaXZpbml0eTsKK+e4veijgSA8IGNoYWlybWFuOwor5rKJ5rW4IDwgcGVybWVhdGU7CivnrKzlha3ljYEgPCBzaXh0aWV0aDsKK+e+juW+tyA8IGFcLXZpcnR1ZTsKK+mbhOi+ryA8IGVsb3F1ZW50Owor6bue5ZCNIDwgcm9sbGNhbGw7Civosarkv6AgPCBjYXZhbGllcjsKK+aWh+aYjuWMliA8IGNpdmlsaXplOwor5aSW6JmfIDwgbmlja25hbWU7CivmtbfkuIogPCBtYXJpdGltZTsKK+eGseiqoCA8IGRldm90aW9uOwor5ZCI5oiQIDwgY29tcG91bmQ7CivlpJbkuqTlrpggPCBkaXBsb21hdDsKK+WQjOaEjyA8IHRvXC1hZ3JlZTsKK+WQkeW+jCA8IGJhY2t3YXJkOwor5pyN5YuZIDwgdG9cLXNlcnZlOwor5rCR55y+IDwgcG9wdWxhY2U7CivlqIHmnJsgPCBwcmVzdGlnZTsKK+a0u+WLlSA8IGFjdGl2aXR5Owor5Y+b5pWZIDwgYXBvc3RhY3k7Civnmb3pm7Lnn7MgPCBkb2xvbWl0ZTsKK+Wkp+iDvSA8IGFsbWlnaHR5Owor5pmC5qmfIDwgb2NjYXNpb247Civlj43mmKAgPCByZWFjdGlvbjsKK+aWh+iBtyA8IGNpdmlsaWFuOwor5ama5auBIDwgbWFycmlhZ2U7CivlkJvlrZAgPCBub2JsZW1hbjsKK+eJuea0viA8IGRpc3BhdGNoOwor5L2/57+S5oWjIDwgYWNjdXN0b207CivkuIDlnJggPCByZWdpbWVudDsKK+aSremfsyA8IHRyYW5zbWl0Owor5Y+w5bqnIDwgcGVkZXN0YWw7CivpgY7ovIkgPCBvdmVybG9hZDsKK+elluWciyA8IGhvbWVsYW5kOwor5rOw5ZyLIDwgdGhhaWxhbmQ7Civop6PplosgPCB0b1wtdW50aWU7CivmhJvlm6Dmlq/lnaYgPCBlaW5zdGVpbjsKK+aal+WupCA8IGRhcmtyb29tOwor5aW254mbIDwgbWlsa1wtY293Owor5Yaw5pm255+zIDwgY3J5b2xpdGU7CivlubTpnZIgPCB5b3V0aGZ1bDsKK+S4gOWRqCA8IG9uZVwtd2VlazsKK+S4gOWQkSA8IGFsbFwtbG9uZzsKK+abneWFiSA8IGV4cG9zdXJlOwor5LiN5bCP5b+DIDwgaGVlZGxlc3M7CivntI3nqIXkurogPCB0YXhwYXllcjsKK+eEoeirluS9leiZlSA8IGFueXdoZXJlOwor5YaN5Ye654++IDwgcmVhcHBlYXI7CivkuIDljJkgPCBzcG9vbmZ1bDsKK+eglOeptiA8IHJlc2VhcmNoOwor5oCg5oOwIDwgaWRsZW5lc3M7CivljIXnmq4gPCB3cmFwcGluZzsKK+mdoOiDjOakhSA8IGFybWNoYWlyOwor5aWJ54++IDwgb2ZmZXJpbmc7CivkuI3lgKYgPCB0aXJlbGVzczsKK+aTjeS9nOiAhSA8IG9wZXJhdG9yOwor6KiC6LO8IDwgdG9cLW9yZGVyOwor57Wy54uA54mpIDwgZmlsYW1lbnQ7CivmlpHnmb0gPCBncml6emxlZDsKK+aatOWKmyA8IHZpb2xlbmNlOwor6K2m5oOVIDwgdmlnaWxhbnQ7Civms6Lli5UgPCB1bmR1bGF0ZTsKK+Wlh+eJuSA8IHBlY3VsaWFyOwor5b+g5pa8IDwgbG95YWxcLXRvOwor55m85piO5a62IDwgaW52ZW50b3I7CivpgbjoiIkgPCB0b1wtZWxlY3Q7CivlpKfopb/mtIsgPCBhdGxhbnRpYzsKK+mfjOW4tiA8IGxpZ2FtZW50Owor6L+3IDwgYmV3aXRjaDsKK+i/sCA8IG5hcnJhdGU7Civov6UgPCBkaXN0YW50Owor5LitIDwgY2VudHJhbDsKK+W/lyA8IHB1cnBvc2U7Civov44gPCByZWNlaXZlOwor5b+MIDwgamVhbG91czsKK+WSjCA8IGhhcm1vbnk7Civovq8gPCBkaXNwdXRlOwor5Y67IDwgZ29cLWF3YXk7Civlr7kgPCBjb3JyZWN0Owor556gIDwgbG9va1wtYXQ7CivlvosgPCBzdGF0dXRlOwor5b25IDwgc2VydmljZTsKK+W8tSA8IHN0cmV0Y2g7Civlt7IgPCBhbHJlYWR5Owor5byYIDwgZW5sYXJnZTsKK+W8lSA8IHRvXC1wdWxsOwor5byUIDwgY29uZG9sZTsKK+i8gyA8IGNvbXBhcmU7CivmhI8gPCB0aG91Z2h0Owor6L+bIDwgYWR2YW5jZTsKK+eboSA8IGV4aGF1c3Q7Civlu4kgPCB1cHJpZ2h0Owor5oOFIDwgZmVlbGluZzsKK+easCA8IHBpbXBsZXM7CivlupYgPCBraXRjaGVuOwor6LqTIDwgc3R1bWJsZTsKK+W6hCA8IHZpbGxhZ2U7CivlubYgPCBjb21iaW5lOwor6LmgIDwgc3RlcFwtb247CivnmZYgPCBjcmF2aW5nOwor5bmVIDwgY3VydGFpbjsKK+S7oyA8IHJlcGxhY2U7CivluKsgPCB0ZWFjaGVyOwor5oC7IDwgY29sbGVjdDsKK+eXtCA8IGZvb2xpc2g7CivljY4gPCBmbG93ZXJ5Owor55eHIDwgZGlzZWFzZTsKK+eXhSA8IGlsbG5lc3M7Civlj40gPCByZXZlcnNlOwor55aOIDwgbmVnbGVjdDsKK+WKoSA8IGFmZmFpcnM7CivltKkgPCBydXB0dXJlOwor54m5IDwgc3BlY2lhbDsKK+acjSA8IGNsb3RoZXM7Civos70gPCBjb21wZXRlOwor6LORIDwgcmVsaWV2ZTsKK+enkSA8IHNlY3Rpb247CivosasgPCByZWxheGVkOwor6IGUIDwgY29ubmVjdDsKK+S/nSA8IHByb3RlY3Q7CivpnakgPCBsZWF0aGVyOwor5bCKIDwgcmVzcGVjdDsKK+WTgSA8IGFydGljbGU7CivlsIkgPCBvZmZpY2VyOwor5aOrIDwgc2Nob2xhcjsKK+mHjyA8IG1lYXN1cmU7CivnqIsgPCBqb3VybmV5Owor5a+pIDwgZXhhbWluZTsKK+aegSA8IGV4dHJlbWU7Civku6QgPCBjb21tYW5kOwor5pyqIDwgbm90XC15ZXQ7CivmjIEgPCBzdXN0YWluOwor5Y6GIDwgaGlzdG9yeTsKK+WuoyA8IGRlY2xhcmU7CivlrpcgPCBsaW5lYWdlOwor6K6uIDwgY29uc3VsdDsKK+eOhyA8IHRvXC1sZWFkOwor5aeUIDwgYXBwb2ludDsKK+WFtSA8IHNvbGRpZXI7CivlrZQgPCBvcGVuaW5nOwor6Ky5IDwgcHJ1ZGVudDsKK+ismyA8IGV4cGxhaW47CivmoLwgPCBwYXR0ZXJuOwor6Ku4IDwgc2V2ZXJhbDsKK+irpiA8IGNhcmVmdWw7CivmgJUgPCB0b1wtZmVhcjsKK+eLoSA8IGN1bm5pbmc7Civlh4YgPCBhcHByb3ZlOwor57K+IDwgZXNzZW5jZTsKK+ernyA8IGZpbmFsbHk7CivoqqAgPCBzaW5jZXJlOwor5pW0IDwgb3JkZXJseTsKK+WpiSA8IGFtaWFibGU7CivlpIcgPCBwcmVwYXJlOwor5Y+mIDwgYW5vdGhlcjsKK+mZiCA8IGV4aGliaXQ7CivmlYUgPCBhbmNpZW50Owor6KibIDwgc3dpbmRsZTsKK+iolyA8IGVudHJ1c3Q7CivoqIogPCBpbnF1aXJlOwor54iGIDwgY3JhY2tsZTsKK+aJuSA8IGNvbW1lbnQ7CivpgIEgPCBzZWVcLW9mZjsKK+WlhyA8IHN0cmFuZ2U7Civnh5UgPCBzd2FsbG93Owor54eIIDwgbGFudGVybjsKK+a4uCA8IHRvXC1zd2ltOwor5Lu9IDwgcG9ydGlvbjsKK+aVoiA8IHRvXC1kYXJlOwor54W9IDwgc3RpclwtdXA7CivmnJ0gPCBkeW5hc3R5Owor6IKyIDwgcHJvZHVjZTsKK+WbviA8IGRpYWdyYW07CivliJggPCBzdXJuYW1lOwor5aSVIDwgZXZlbmluZzsKK+aJvyA8IGluaGVyaXQ7CivkuaEgPCBjb3VudHJ5Owor6KOBIDwgY3V0XC1vdXQ7CivmvJQgPCBwZXJmb3JtOwor6KKCIDwgc2xlZXZlczsKK+ihsCA8IGRlY2xpbmU7CivloZ4gPCBzdG9wXC11cDsKK+aZryA8IHNjZW5lcnk7CivooKIgPCB3cmlnZ2xlOwor5L6dIDwgcmVseVwtb247CivngJ0gPCB0cmlja2xlOwor6IOcIDwgdmljdG9yeTsKK+a/oSA8IGltbWVyc2U7Civmv58gPCB0b1wtaGVscDsKK+ifiyA8IGNyaWNrZXQ7CivmvIYgPCB2YXJuaXNoOwor5ryBIDwgdG9cLWZpc2g7CivmlaMgPCBzY2F0dGVyOwor6JuGIDwgbWFnZ290czsKK+absiA8IGNyb29rZWQ7CivmurYgPCB0b1wtbWVsdDsKK+WOgiA8IGZhY3Rvcnk7Civogq8gPCB3aWxsaW5nOwor5oqTIDwgc2NyYXRjaDsKK+iZqyA8IGluc2VjdHM7CivmuacgPCB3ZWxsXC11cDsKK+mdoCA8IGxlYW5cLW9uOwor5o6IIDwgZ2l2ZVwtdG87CivmuIcgPCB0aGlyc3R5Owor5re6IDwgc2hhbGxvdzsKK+a3qyA8IG9ic2NlbmU7Civpt4QgPCBjaGlja2VuOwor5ZeHIDwgbWlzZXJseTsKK+aKsSA8IGVtYnJhY2U7CivnnZsgPCBleWViYWxsOwor5ousIDwgaW5jbHVkZTsKK+mZjSA8IGRlc2NlbmQ7Civnp4EgPCBwcml2YXRlOwor6JSRIDwgZGlzZGFpbjsKK+azoSA8IGJ1YmJsZXM7Civpl7kgPCBxdWFycmVsOwor6YaSIDwgd2FrZVwtdXA7CivmsowgPCBjaGFvdGljOwor5pq0IDwgdmlvbGVudDsKK+aKoiA8IHBsdW5kZXI7Civnr4cgPCBjaGFwdGVyOwor6bGIIDwgY29kZmlzaDsKK+ivuCA8IHZhcmlvdXM7Civlj60gPCB0cnVtcGV0Owor5Y+ZIDwgZXhwcmVzczsKK+WOrSA8IGRpc2xpa2U7Civpm4UgPCBlbGVnYW50Owor6Zu3IDwgdGh1bmRlcjsKK+erniA8IGNvbnRlbmQ7Civmk40gPCBjb25kdWN0Owor6K+6IDwgcHJvbWlzZTsKK+WMhiA8IGhhc3RpbHk7CivmrIUgPCB6ZWxrb3ZhOwor6Iu6IDwgYmVycmllczsKK+iLlyA8IHNwcm91dHM7CivnorAgPCBjb2xsaWRlOwor6IuRIDwgcGFzdHVyZTsKK+S7vyA8IGltaXRhdGU7CivmqZ8gPCBtYWNoaW5lOwor5qCPIDwgcmFpbGluZzsKK+WIiCA8IGN1dFwtb2ZmOwor54ugIDwgdmljaW91czsKK+aYoCA8IHByb2plY3Q7Civlv6AgPCBsb3lhbHR5Owor5omOIDwgcHVsbFwtdXA7CivohbkgPCBzdG9tYWNoOwor6IiSIDwgb3BlblwtdXA7Civlh7YgPCBjdWxwcml0Owor5oWwIDwgY29tZm9ydDsKK+mkmCA8IHN1cnBsdXM7CivmkpIgPCByZWxlYXNlOwor5oSBIDwgYW54aWV0eTsKK+aWpCA8IGFcLWNhdHR5Owor5YORIDwgc29qb3VybjsKK+aJtiA8IHN1cHBvcnQ7Civmr4EgPCBkZXN0cm95Owor5qKwIDwgd2VhcG9uczsKK+i/nSA8IGRpc29iZXk7CivkuKIgPCBkaXNjYXJkOwor6IKGIDwgaW5kdWxnZTsKK+e7lSA8IGVudHdpbmU7CivogbMgPCB1cmdlXC1vbjsKK+iIsCA8IHdhcnNoaXA7CivmgbwgPCBhbmdlcmVkOwor6L6jIDwgcGVwcGVyeTsKK+aXiyA8IHJldm9sdmU7CivlgIkgPCBncmFuYXJ5Owor572aIDwgcGVuYWx0eTsKK+aLviA8IHBpY2tcLXVwOwor5oGiIDwgcmVzdG9yZTsKK+e/gSA8IG9sZFwtbWFuOwor5769IDwgZmVhdGhlcjsKK+aKliA8IHRyZW1ibGU7Civkvq8gPCBtYXJxdWlzOwor5oORIDwgY29uZnVzZTsKK+mblSA8IGVuZ3JhdmU7Civlr78gPCBvbGRcLWFnZTsKK+mUpiA8IGJyb2NhZGU7CivmnY8gPCBhcHJpY290Owor5oWMIDwgbmVydm91czsKK+WxoCA8IGJ1dGNoZXI7Civmn48gPCBjeXByZXNzOwor6ZyNIDwgcXVpY2tseTsKK+mZtiA8IHBvdHRlcnk7CivmkYQgPCB0YWtlXC1pbjsKK+mXryA8IHJ1c2hcLWluOwor5omwIDwgZGlzdHVyYjsKK+mbgCA8IHNwYXJyb3c7CivpmIEgPCBjaGFtYmVyOwor5Y2iIDwgY290dGFnZTsKK+afnCA8IGNhYmluZXQ7CivmmocgPCBsZWlzdXJlOwor5oSnIDwgYXNoYW1lZDsKK+aZtiA8IGNyeXN0YWw7CivmmZ0gPCBkYXl0aW1lOwor562LIDwgbXVzY2xlczsKK+aSkSA8IHByb3BcLXVwOwor5aGrIDwgZmlsbFwtaW47Civml7ogPCBwcm9zcGVyOwor6ICXIDwgY29uc3VtZTsKK+aCpiA8IHBsZWFzZWQ7CivmlpEgPCBtb3R0bGVkOwor6Le1IDwgdHJhbXBsZTsKK+aDtiA8IGZlYXJmdWw7CivnsL4gPCBhXC1ibGluZDsKK+i0qSA8IHBlZGRsZXI7CivmiIggPCBoYWxiZXJkOwor6ZCQIDwgZmV0dGVyczsKK+iZuSA8IHJhaW5ib3c7Civlr6EgPCB3aWRvd2VkOwor6YOKIDwgc3VidXJiczsKK+W+vSA8IGFcLWJhZGdlOwor6bKNIDwgYWJhbG9uZTsKK+eshCA8IGhhaXJwaW47Civmsr4gPCBtb2lzdGVuOwor556SIDwgZGVjZWl2ZTsKK+ergyA8IGZ1cm5hY2U7Civoo5QgPCBwcm9nZW55Owor5YyqIDwgYmFuZGl0czsKK+amnCA8IHBsYWNhcmQ7CivmnokgPCB1c2VsZXNzOwor6aqHIDwgdGVycmlmeTsKK+aSsCA8IGNvbXBvc2U7CivlnoMgPCBnYXJiYWdlOwor6am8IDwgYVwtY2FtZWw7CivosbkgPCBsZW9wYXJkOwor57y0IDwgZGVsaXZlcjsKK+WTqCA8IHdoaXN0bGU7CivlmrwgPCBwcmF0dGxlOwor5pinIDwgb2JzY3VyZTsKK+aXsSA8IGRyb3VnaHQ7CivogYIgPCB3aGlzcGVyOwor6I69IDwgdGhpY2tldDsKK+WOriA8IHNlcnZhbnQ7CivojKggPCBjYWx0cm9wOwor57KYIDwgdmlzY291czsKK+acvSA8IGRlY2F5ZWQ7CivnhJUgPCBzaGluaW5nOwor54aEIDwgcHV0XC1vdXQ7CivpgL4gPCBnb1wtb3ZlcjsKK+mGiyA8IHZpbmVnYXI7CivmlowgPCByZWZpbmVkOwor5oGVIDwgZm9yZ2l2ZTsKK+aypiA8IGJlXC1sb3N0Owor5bKxIDwgZGFpc2hhbjsKK+iusyA8IGNvbmNlYWw7CivlspQgPCBkaXZlcmdlOwor5Z6SIDwgcmFtcGFydDsKK+e/mCA8IHR1cm5cLXVwOwor6KeRIDwgcGVlcFwtYXQ7Civmi44gPCB0b1wtaGF1bDsKK+WZnCA8IHZlcmJvc2U7Civlh7kgPCBjb25jYXZlOwor5pKpIDwgbGlmdFwtdXA7CivltL0gPCBhXC1jaGlsZDsKK+a2hSA8IGJsYWNrZW47CivnsIwgPCBmYWxsaW5nOwor6K+bIDwgZXhlY3V0ZTsKK+aOsyA8IGNhcHR1cmU7CivppoUgPCBmaWxsaW5nOwor56GFIDwgc2lsaWNvbjsKK+aKqCA8IGltcGVhY2g7Civogr4gPCBraWRuZXlzOwor6ZStIDwgc3BpbmRsZTsKK+iMrCA8IGhhcnZlc3Q7CivosKQgPCBzbGFuZGVyOwor6ZKzIDwgcGluY2VyczsKK+edvSA8IHN0YXJpbmc7CivpmLEgPCBwaXRmYWxsOwor5rGAIDwgc2FuZGJhcjsKK+enpCA8IGJhbGFuY2U7Civmmb4gPCBhaXJcLWRyeTsKK+i3miA8IHN0YWdnZXI7Civojp4gPCBzbWlsaW5nOwor6bilIDwgc2VhZ3VsbDsKK+iRhiA8IHJlc2VydmU7CivmsKIgPCBhbW1vbmlhOwor5binIDwgcGljdHVyZTsKK+S9ryA8IHByZXRlbmQ7Civng6wgPCBjaW5kZXJzOwor6JqMIDwgb3lzdGVyczsKK+iwhiA8IHBhdGllbnQ7CivnmZ4gPCBsZXByb3N5Owor5ZWEIDwgdG9cLXBlY2s7Civnh44gPCB0b1wtYnVybjsKK+i/syA8IHBhc3NcLWJ5Owor5oG4IDwgc2FkbmVzczsKK+WSgiA8IHRvXC1zdWNrOwor55u5IDwgdG9cLWRvemU7Civkv74gPCBzb1wtdGhhdDsKK+iwmiA8IHByb3ZlcmI7CivmjrggPCB0b1wtZHVzdDsKK+WMriA8IHRvXC1sYWNrOwor5bmhIDwgcGVubmFudDsKK+WbsSA8IGNoaW1uZXk7CivltIIgPCBsYW9zaGFuOwor6J2MIDwgdGFkcG9sZTsKK+mTgCA8IHVyYW5pdW07CivmjJsgPCB0YW5nbGVkOwor57uvIDwgc2NhcmxldDsKK+m4qCA8IGJ1c3RhcmQ7CivonJcgPCBhXC1zbmFpbDsKK+aBqyA8IGluXC1wYWluOwor6LCAIDwgZmxhdHRlcjsKK+i4riA8IHRpcFwtdG9lOwor6aaKIDwgc3BvaWxlZDsKK+mSmSA8IGNhbGNpdW07CivmjbEgPCBwdXRcLW9mZjsKK+iSvyA8IG11Z3dvcnQ7CivphbYgPCBlbnp5bWVzOwor6KGiIDwgaGlnaHdheTsKK+ejuiA8IHN1bHBodXI7CivouakgPCB0b1wtbGltcDsKK+a1oyA8IHRvXC13YXNoOwor55a5IDwgbWVhc2xlczsKK+mdpSA8IGRpbXBsZXM7CivmhIYgPCBhXC1mYXVsdDsKK+m4tSA8IG9zdHJpY2g7CivnqpUgPCBzbGVuZGVyOwor6L+pIDwgYmVcLW5lYXI7CivkvbAgPCBodW5kcmVkOwor6ZK5IDwgY3ltYmFsczsKK+mdvCA8IHRhcnRhcnM7CivnhbIgPCB0b1wtaGVhdDsKK+eNkCA8IHJvZWJ1Y2s7CivkvZ0gPCByaWNrZXRzOwor6JOfIDwgY2lyY2l1bTsKK+m7nCA8IGRpc21pc3M7CivmkYggPCBleGNsdWRlOwor6aOTIDwgY3ljbG9uZTsKK+iDsSA8IGJsYWRkZXI7Civppb0gPCBmZXJydWxlOwor6aaPIDwgZGlzdGlsbDsKK+iLryA8IGJlbnplbmU7Civmt7wgPCBhXC1mbG9vZDsKK+mTsSA8IGlyaWRpdW07CivokakgPCBmbG93ZXJzOwor6YChIDwgcmV0cmVhdDsKK+mAtiA8IHdpbmRpbmc7CivokLggPCBkb2d3b29kOwor5oydIDwgdG9cLWJlYXQ7CivnhrUgPCBlbnRyb3B5Owor54WoIDwgdG9cLXN0ZXc7CivnoJIgPCBhcnNlbmljOwor5pmBIDwgbW9ybmluZzsKK+WHhyA8IGRld2Ryb3A7CivlmZggPCBwb3V0aW5nOwor5ZSjIDwgY2hhdHRlcjsKK+mqoCA8IGNoYXJnZXI7CivmgIQgPCBhbm5veWVkOwor6ZSCIDwgbGl0aGl1bTsKK+eWpSA8IHNjYWJpZXM7CivnqJcgPCBkYXJuZWxzOwor5rSuIDwgY2xlYW5zZTsKK+mFriA8IGtldG9uZXM7CivohZogPCBidXR0b2NrOwor6IWxIDwgdGVuZG9uczsKK+mmlCA8IHRvXC1mZWVkOwor5pCgIDwgdG9cLWRhdWI7CivphaEgPCBmbHVzaGVkOwor5ZGSIDwgdW5jbGVhcjsKK+eXpyA8IGNob2xlcmE7CivnrKQgPCBhXC1icm9vbTsKK+mfqyA8IHNlY3JldGU7CivmgJsgPCBncmlldmVkOwor55q0IDwgY2hhcHBlZDsKK+edoiA8IGdhemVcLWF0Owor5aGsIDwgcGxhdGVhdTsKK+ieryA8IG5pcHBlcnM7CivnjZIgPCBtYXN0aWZmOwor5rKGIDwgYVwtZmVycnk7CivluJQgPCBhXC1za2lydDsKK+iWhSA8IHRvXC13ZWVkOwor6I60IDwgbGV0dHVjZTsKK+aNrSA8IHRvXC1vcGVuOwor6JGtIDwgYnVscnVzaDsKK+WApSA8IGJvb3Jpc2g7CivmurQgPCBicm9taW5lOwor5bubIDwgYVwtc3RvcmU7Civmj7ggPCBoYW5kZnVsOwor5Lu1IDwgc2ltaWxhcjsKK+mriyA8IGhpcGJvbmU7CivogrEgPCBmb3JlYXJtOwor6JqNIDwgbXVzc2VsczsKK+mVkyA8IGdhbGxpdW07Civpk4sgPCBiaXNtdXRoOwor6IOdIDwgY2FsbG91czsKK+i1jSA8IHByZXNlbnQ7Civnv6UgPCB0b1wtc29hcjsKK+icniA8IGdyYXBzdXM7CivosKAgPCBjb3Vuc2VsOwor55+sIDwgYVwtZHdhcmY7CivmurIgPCB1cmluYXRlOwor6JW7IDwgYnVkZGluZzsKK+m5iCA8IHBlbGljYW47CivplYkgPCBjYWRtaXVtOwor6KyHIDwgc3R1dHRlcjsKK+aGtyA8IHBhaW5mdWw7CivosKEgPCByaXNlXC11cDsKK+ikiiA8IGNyYW1wZWQ7Civpko0gPCB0aG9yaXVtOwor5rCqIDwga3J5cHRvbjsKK+i/riA8IHRvXC1yaXNlOwor6JONIDwgbWlsZm9pbDsKK+ievSA8IGthdHlkaWQ7CivliYAgPCBzaGFycGVuOwor6LmAIDwgdG9cLXNraXA7CivplI4gPCBjYWVzaXVtOwor6ZKHIDwgeXR0cml1bTsKK+awmiA8IHRyaXRpdW07CivnirggPCBtYW1tb3RoOwor6I+4IDwgdG9cLWZhZGU7CivpsrEgPCBoZXJyaW5nOwor6LqeIDwgdG9cLXdhbGs7Civpk4wgPCBuaW9iaXVtOwor55WAIDwgdG9cLWdpdmU7CivpgZggPCB0b1wtbWVldDsKK+aztyA8IHJhaW5pbmc7CivokqEgPCBidXJkb2NrOwor6auMIDwga25lZWNhcDsKK+mzmSA8IGJpZ2hlYWQ7CivntbcgPCBjb25maW5lOwor566mIDwgYmVkXC1tYXQ7CivnmJggPCBmaXN0dWxhOwor6ZWEIDwgZmVybWl1bTsKK+elhiA8IG9ybWF6ZGE7Civlq6AgPCBhXC13aWRvdzsKK+aQtCA8IGV4dHJhY3Q7Civlg6YgPCB0b1wtaGVpcjsKK+eJveaJryA8IGludm9sdmU7CivnnIvlvpfoposgPCB2aXNpYmxlOwor5ama5LqLIDwgd2VkZGluZzsKK+aqoumWsSA8IGluc3BlY3Q7CivoqLToi6YgPCBncnVtYmxlOwor5pyJ6LOH5qC8IDwgZW50aXRsZTsKK+aaq+WBnCA8IHN1c3BlbmQ7CivmraHov47lhYnoh6ggPCB3ZWxjb21lOwor6Ke46KeSIDwgYW50ZW5uYTsKK+Wck+efs+mgrSA8IGJvdWxkZXI7CivnvbfkvJEgPCBnaXZlXC11cDsKK+Wlp+WcsOWIqSA8IGF1c3RyaWE7Civoqo3nnJ8gPCBlYXJuZXN0Owor5pmC5bCaIDwgZmFzaGlvbjsKK+eJiOacrCA8IHZlcnNpb247CivluoforbcgPCBzaGVsdGVyOwor6YW45oCnIDwgYWNpZGl0eTsKK+e3qOe6giA8IGNvbXBpbGU7CivlkJvkuLsgPCBtb25hcmNoOwor57i955CGIDwgcHJlbWllcjsKK+WkqeeEtiA8IG5hdHVyYWw7CivnnaHooaMgPCBwYWphbWFzOwor5pW055CGIDwgYXJyYW5nZTsKK+eFmeiNiSA8IHRvYmFjY287Civnh6bniJsgPCBnbGl0dGVyOwor5Y+v5YuVIDwgbW92YWJsZTsKK+awtOaJiyA8IG1hcmluZXI7CivlgrPpgZPpg6ggPCBtaXNzaW9uOwor5Y+j5ZCDIDwgc3RhbW1lcjsKK+WJteS4lue0gCA8IGdlbmVzaXM7Civoj4/omK0gPCBob2xsYW5kOwor6I+g6I+cIDwgc3BpbmFjaDsKK+WNgeaciCA8IG9jdG9iZXI7CivljYPkvY3lhYMgPCBraWxvYml0Owor5o+a6IGy5ZmoIDwgc3BlYWtlcjsKK+avm+avryA8IGJsYW5rZXQ7CivnrqHnkIblk6EgPCBtYW5hZ2VyOwor6Zm96Ie6IDwgYmFsY29ueTsKK+eLguWWnCA8IGVjc3Rhc3k7CivmsLjmgYYgPCBldGVybmFsOwor6KuL5rGCIDwgcmVxdWVzdDsKK+a1t+i7jee4veWPuOS7pCA8IGFkbWlyYWw7Civlh7rotbAgPCB0b1wtZmxlZTsKK+iAgeizh+agvCA8IHZldGVyYW47CivmlYjnm4ogPCBiZW5lZml0Owor6YeN5YqbIDwgZ3Jhdml0eTsKK+mHkemKgOWhiiA8IGJ1bGxpb247CivnorzlrZcgPCBudW1lcmFsOwor5byE56KOIDwgY3J1bWJsZTsKK+aymeS4gemtmiA8IHNhcmRpbmU7Civlp5DlprkgPCBzaXN0ZXJzOwor55uu6YyEIDwgY2F0YWxvZzsKK+W/g+aEmyA8IGJlbG92ZWQ7CivlvITnn60gPCBzaG9ydGVuOwor54Sh6JmVIDwgbm93aGVyZTsKK+iuiuWOmiA8IHRoaWNrZW47CivlppbmgKogPCBtb25zdGVyOwor57eK57eKIDwgY2xvc2VseTsKK+maseengSA8IHByaXZhY3k7Civpl5zpjbUgPCBjcnVjaWFsOwor5ae/5YuiIDwgcG9zdHVyZTsKK+WuieaPkOeTnOWztiA8IGFudGlndWE7Civllqrlv4Pnl4Xni4IgPCBsdW5hdGljOwor5by354OIIDwgaW50ZW5zZTsKK+WlveaIsCA8IHdhcmxpa2U7CivlvITnmrogPCBjcnVtcGxlOwor55u46YCjIDwgdG9cLWxpbms7Civmlofms5UgPCBncmFtbWFyOwor5Y+k5L6GIDwgb2xkdGltZTsKK+WkqeawoyA8IHdlYXRoZXI7CivphZLlu6AgPCBicmV3ZXJ5Owor5b6B5pyNIDwgY29ucXVlcjsKK+e0oumBkyA8IHJvcGV3YXk7CivpmbjnuowgPCBpblwtdHVybjsKK+maseeeniA8IHRvXC1oaWRlOwor5aSW5rWBIDwgb3V0ZmxvdzsKK+W3pemgrSA8IGZvcmVtYW47CivpgaDnq68gPCBmYXJcLWVuZDsKK+WHuue0jeWToSA8IGNhc2hpZXI7CivliqDnlJwgPCBzd2VldGVuOwor6Z+z5L+hIDwgbWVzc2FnZTsKK+manOekmSA8IGJhcnJpZXI7CivorablkYogPCB0b1wtd2FybjsKK+eEtuiAjCA8IGhvd2V2ZXI7CivlpKfmpoIgPCByb3VnaGx5Owor5oSb6YGK546pIDwgcGxheWZ1bDsKK+agvOWtkOajieW4gyA8IGdpbmdoYW07Civpi7znkLTlrrYgPCBwaWFuaXN0Owor6Zu75rGgIDwgYmF0dGVyeTsKK+avlOaWuSA8IGFuYWxvZ3k7CivoqIjmlbjogIUgPCBjb3VudGVyOwor6YCA6JC9IDwgc3Vic2lkZTsKK+iuiuS6giA8IHR1cm1vaWw7CivnhrHmva4gPCB1cHN1cmdlOwor6Kej5YmW5a24IDwgYW5hdG9teTsKK+asuueeniA8IHRvXC1mb29sOwor5pyJ5a245ZWPIDwgbGVhcm5lZDsKK+itsOWDuSA8IGJhcmdhaW47CivnupblvLEgPCBmcmFnaWxlOwor6KaL6K2JIDwgd2l0bmVzczsKK+WKoOeGsSA8IGhlYXRpbmc7CivljYrlkIrlrZAgPCBkYWJibGVyOwor6Z2e5bi4IDwgdW51c3VhbDsKK+WLh+awoyA8IGNvdXJhZ2U7CivlpLHmlYggPCB0b1wtZmFpbDsKK+WFiOmphSA8IHBpb25lZXI7Civniq/kurogPCBjb252aWN0Owor6Zuj5rCRIDwgcmVmdWdlZTsKK+mBuueJqSA8IHJlbW5hbnQ7Civmr5LmiZMgPCBiZWF0XC11cDsKK+mGnOS6iyA8IHNjYW5kYWw7CivpmY3ntJogPCBkZWdyYWRlOwor54Sm57OWIDwgY2FyYW1lbDsKK+aRmOimgSA8IHN1bW1hcnk7CivpgLLnqIsgPCBwcm9jZXNzOwor5pGU6KeSIDwgd3Jlc3RsZTsKK+WMheaJjiA8IHdyYXBcLXVwOwor5bui54mpIDwgcnViYmlzaDsKK+WkqeiKseadvyA8IGNlaWxpbmc7CivmrpjmoKogPCBzdHViYmxlOwor5aW95aWHIDwgY3VyaW91czsKK+eZu+mZuCA8IHRvXC1sYW5kOwor55uj6KaWIDwgb3ZlcnNlZTsKK+W9ouaIkCA8IHRvXC1mb3JtOwor57i95pW4IDwgYVwtdG90YWw7CivlvrflnIsgPCBnZXJtYW55Owor57Wx57WxIDwgdG90YWxseTsKK+Wkp+ebpOWtkCA8IHBsYXR0ZXI7CivnhKHnqq4gPCBlbmRsZXNzOwor55+u5p6XIDwgY29wcGljZTsKK+Wig+eVjCA8IGJvdW5kcnk7CivkuI3og73kuI0gPCBoYXZlXC10bzsKK+W8hOatqiA8IGRpc3RvcnQ7CivlhrDooosgPCBpY2VcLWJhZzsKK+WHuuWFpeWPoyA8IGdhdGV3YXk7CivmtojpmLLpmorlk6EgPCBmaXJlbWFuOwor6LW355q657SLIDwgc2hyaXZlbDsKK+mWseiugCA8IHRvXC1yZWFkOwor6YO15beuIDwgcG9zdG1hbjsKK+mdouWariA8IHRvXC1mYWNlOwor6Ke455m8IDwgdHJpZ2dlcjsKK+eAnemdkiA8IGFzcGhhbHQ7CivljbPkvr8gPCBldmVuXC1pZjsKK+Wkp+W7iCA8IGVkaWZpY2U7CivnmbzphbUgPCBmZXJtZW50Owor5bm456aPIDwgYmxlc3NlZDsKK+eEoeebiiA8IG5vXC1nb29kOwor6Ziy56amIDwgZGVmZW5zZTsKK+att+aZgiA8IHRvXC1sYXN0Owor5omY5YWS5omAIDwgbnVyc2VyeTsKK+iJt+e0heiJsiA8IGNyaW1zb247CivnibnoqLHni4AgPCBjaGFydGVyOwor5ouW5puz5qmfIDwgdHJhY3RvcjsKK+eJiOWIuyA8IGNhcnZpbmc7CivphY3lgbYgPCBjb25zb3J0Owor6aCQ6KiA5a62IDwgcHJvcGhldDsKK+aVkeaPtCA8IHRvXC1zYXZlOwor5pel5Ye6IDwgc3VucmlzZTsKK+awo+WAmSA8IGNsaW1hdGU7CivnuYPluLYgPCBiYW5kYWdlOwor6YCX55WZIDwgc3RheVwtYXQ7CivliKnnlKggPCBleHBsb2l0Owor5Y2A5Y2AIDwgdHJpdmlhbDsKK+iDjOWPm+iAhSA8IHRyYWl0b3I7Civlvq7lhYkgPCBnbGltbWVyOwor5q+P5aScIDwgbmlnaHRseTsKK+mBleazlSA8IGlsbGVnYWw7Civlh7rnp58gPCB0b1wtcmVudDsKK+mbgOaWkSA8IGZyZWNrbGU7CivlpKfkvb/ppKggPCBlbWJhc3N5Owor5aSn6I2J5Y6fIDwgcHJhaXJpZTsKK+eJqeeQhuWtuCA8IHBoeXNpY3M7CivmlLbmk5ogPCByZWNlaXB0Owor5Y2B5YWtIDwgc2l4dGVlbjsKK+e5quWcliA8IHRvXC1kcmF3Owor55+l5oKJIDwgdG9cLWtub3c7CivnhrHmg4UgPCBjb3JkaWFsOwor5Y2B5YCNIDwgdGVuZm9sZDsKK+WJm+avmyA8IGJyaXN0bGU7Civmqavoh6UgPCByZWNsaW5lOwor5Yi65r+AIDwgcHJvdm9rZTsKK+e2k+a/nyA8IGVjb25vbXk7CivntLDnr4AgPCBkZXRhaWxzOwor5omz5LiN5YCS5YWSIDwgdHVtYmxlcjsKK+aogui2oyA8IGRlbGlnaHQ7CivniKzon7Lli5XniakgPCByZXB0aWxlOwor57Si6aas6KOhIDwgc29tYWxpYTsKK+WNgeS6lCA8IGZpZnRlZW47CivlpJrlpKcgPCBob3dcLWJpZzsKK+WFseiZlSA8IGNvZXhpc3Q7CivmlKrmi4wgPCB0b1wtc3RpcjsKK+i8lei8lSA8IGxpZ2h0bHk7Civlu6Pmkq3ntrIgPCBuZXR3b3JrOwor5be05qC86YGUIDwgYmFnaGRhZDsKK+WIqea9pCA8IHByb2ZpdHM7CivlpJbnp5HphqvnlJ8gPCBzdXJnZW9uOwor6KOd6LyJIDwgdG9cLWxvYWQ7CivljIXlkKsgPCBjb250YWluOwor5pOv5qOEIDwgYWJhbmRvbjsKK+WcqO+5jeS5i+mWkyA8IGJldHdlZW47CivnmbzooYwgPCBwdWJsaXNoOwor55m96J+7IDwgdGVybWl0ZTsKK+mBuOaJiyA8IGF0aGxldGU7CivlpLHljrsgPCB0b1wtbG9zZTsKK+i8quipoiA8IHRvXC1wb2xsOwor6Iqx6LK7IDwgZXhwZW5zZTsKK+iRieWtkCA8IGZvbGlhZ2U7CivojYnnqL8gPCBvdXRsaW5lOwor5q2m5bqrIDwgYXJzZW5hbDsKK+mKgOihjOalrSA8IGJhbmtpbmc7CivlvITlubMgPCBmbGF0dGVuOwor5Yi25q2iIDwgdG9cLWN1cmI7CivnhafmkKwgPCB0b1wtY29weTsKK+m+oSA8IHRvXC1ibG93Owor6KOc6LK8IDwgc3Vic2lkeTsKK+m9sCA8IHRvXC1iaXRlOwor6b2pIDwgdG9cLWNoZXc7CivmraPluLggPCByZWd1bGFyOwor6by3IDwgYVwtbW91c2U7CivmlofljJYgPCBjdWx0dXJlOwor5bSp6Zm3IDwgZmFsbFwtaW47CivpuJEgPCBhXC1sYXJnZTsKK+W3tOe1kCA8IGZhd25cLW9uOwor6befIDwgcGhvZW5peDsKK+m2uiA8IHdhZ3RhaWw7CivptrkgPCB0aGVcLW93bDsKK+aJi+aOqOi7iiA8IHRyb2xsZXk7CivnmrrntIsgPCB3cmlua2xlOwor5qyK5p2WIDwgc2NlcHRlcjsKK+eZvuiQrCA8IG1pbGxpb247CivlpJrljYogPCBjaGllZmx5Owor6YCx5pyrIDwgd2Vla2VuZDsKK+m0qyA8IGFcLXNuaXBlOwor5Yid5q2lIDwgaW5pdGlhbDsKK+WLnuWLleiAhSA8IGxhYm9yZXI7Civnhanmg7EgPCBhZ29uaXplOwor6bKaIDwgYW5jaG92eTsKK+eFqeaCtiA8IGFuZ3Vpc2g7CivluavmtL4gPCBmYWN0aW9uOwor576O5rSy6LG5IDwgcGFudGhlcjsKK+ihqOmdoiA8IHN1cmZhY2U7Civns5/ns5UgPCB0b29cLWJhZDsKK+e4veWJhyA8IHByb2ZpbGU7Civpmqrls7sgPCBhcmR1b3VzOwor5Yi25pyNIDwgdW5pZm9ybTsKK+WDj+mKgCA8IHNpbHZlcnk7CivprZwgPCBtZXJtYWlkOwor5YmN5o+QIDwgcHJlbWlzZTsKK+e2reaMgSA8IHRvXC1rZWVwOwor5o6l6Ke4IDwgY29udGFjdDsKK+iKseW0l+efsyA8IGdyYW5pdGU7CivlpKXkvLQgPCBwYXJ0bmVyOwor6aqrIDwgYmVcLWJlbnQ7CivpqokgPCBydW5uaW5nOwor5pOB5pyJIDwgdG9cLWhhdmU7CivlnKjlhbbkuK0gPCB0aGVyZWluOwor6amZIDwgXChob3JzZVwpOwor6amSIDwgZGFwcGxlZDsKK+atpOWkliA8IGJlc2lkZXM7CivlvLfliLYgPCBlbmZvcmNlOwor6LuK6LybIDwgdmVoaWNsZTsKK+iKrOiYrSA8IGZpbmxhbmQ7CivmlbjkvY0gPCBkaWdpdGFsOwor5Y2B5YSE5L2N5YWDIDwgZ2lnYWJpdDsKK+miqyA8IGFcLXN0b3JtOwor5Z+354WnIDwgbGljZW5zZTsKK+eEoeaViCA8IGluXC12YWluOwor6Z+jIDwgYm93XC1iYWc7Civpn4UgPCBoYXJuZXNzOwor57SZ54WZIDwgY2lnYXJldDsKK+ecuuacmyA8IGxvb2tvdXQ7Civpl5znhacgPCBjb25jZXJuOwor6ZuaIDwgYVwtaGVyb247CivlhrDniYcgPCBib3JuZW9sOwor5YqH5aC0IDwgdGhlYXRlcjsKK+eGseWIhyA8IGZlcnZlbnQ7Civpmb4gPCBpblwtZmlsZTsKK+S6lOaciOWNgeS6lOiZnyA8IG1heVwtMVwtNTsKK+mZniA8IHByb21vdGU7CivpmLvmlJQgPCB0b1wtc3RvcDsKK+mYpyA8IHNsb3Bpbmc7CivlvJ/lhYQgPCBicm90aGVyOwor55yJ5q+bIDwgZXllYnJvdzsKK+iiq+ikpSA8IGJlZGRpbmc7Civmk7rlrZAgPCBtYWxhcmlhOwor5pOU5b+DIDwgYW54aW91czsKK+i6q+mrlOmanOWusyA8IGNyaXBwbGU7CivlhaznpL4gPCBjb21tdW5lOwor6ZO9IDwgdGVyYml1bTsKK+mTvCA8IHJoZW5pdW07Civpk6ogPCBoYWZuaXVtOwor6ZOlIDwgdGh1bGl1bTsKK+mTkSA8IHJob2RpdW07CivpkqwgPCBob2xtaXVtOwor57WQ5p6cIDwgb3V0Y29tZTsKK+atsuWFpSA8IHJldmVudWU7CivloorlrZAgPCBjdXNoaW9uOwor55uj5risIDwgbW9uaXRvcjsKK+aiteW4neWyoSA8IHZhdGljYW47CivlkIznvqnlrZcgPCBzeW5vbnltOwor6Yy2IDwgYVwtd2F0Y2g7CivprKLop5IgPCB0ZW1wbGVzOwor6YyAIDwgXChtZXRhbFwpOwor5o+t56S6IDwgdG9cLXNob3c7Civpi4ogPCBhXC1wb2tlcjsKK+mLgiA8IGJpdFwtY3VwOwor55eV6LehIDwgdmVzdGlnZTsKK+WJneWlqiA8IGRlcHJpdmU7CivovrLmsJEgPCBwZWFzYW50Owor5oSb5ZyL6ICFIDwgcGF0cmlvdDsKK+W7oOWVhiA8IGNvbXBhbnk7CivlpbPkuLvkurogPCBob3N0ZXNzOwor55m95qa055+zIDwgbGV1Y2l0ZTsKK+S9oOiHquW3sSA8IHRoeXNlbGY7CivlhpLnhZkgPCBzbW9raW5nOwor57Ch6KaBIDwgY29uY2lzZTsKK+e0hea1tyA8IHJlZFwtc2VhOwor5Yaw5rKzIDwgZ2xhY2lhbDsKK+e0lOatoyA8IGdlbnVpbmU7CivliKjlt6UgPCBwbGFuaW5nOwor5rS+57Wm5bel5L2cIDwgdG9cLXRhc2s7CivlubvlvbEgPCBwaGFudG9tOwor6Ieq55Sx5rS+IDwgbGliZXJhbDsKK+aLlOmggiA8IHRvcHBpbmc7Civnlr7otbAgPCBzY2FtcGVyOwor6L2SIDwgY2hhcmlvdDsKK+W3sua7hSA8IGV4dGluY3Q7CivnsaDnvakgPCBlbnZlbG9wOwor6LuyIDwgYVwtd2hlZWw7Civou5ggPCB3YXJcLWNhcjsKK+ieoueBq+ifsiA8IGZpcmVmbHk7CivouqYgPCB0b1wtanVtcDsKK+i6nSA8IHRvXC1wYXNzOwor55m+5YiG5LmLIDwgcGVyY2VudDsKK+mshue3iuW4tiA8IGVsYXN0aWM7CivolpTolofoirHolb4gPCByb3NlYnVkOwor6ZmE5a+EIDwgZW5jbG9zZTsKK+eEoeirluS9leS6uiA8IHdob2V2ZXI7Civot6wgPCB0b1wtc3RlcDsKK+WvhOWuv+eUnyA8IGJvYXJkZXI7Civot5UgPCBzaHVmZmxlOwor6La3IDwgdG9cLWpvbHQ7CivntajluIMgPCBmbGFubmVsOwor5YSY566hIDwgZGVzcGl0ZTsKK+mYu+WwvCA8IGRhbXBpbmc7CivnlJzpu54gPCBkZXNzZXJ0Owor55m854++IDwgdG9cLWZpbmQ7CivotIcgPCBhZmZhYmxlOwor6LSDIDwgdG9cLWVhcm47CivploPniI0gPCBmbGlja2VyOwor6KGj6KOdIDwgZ2FybWVudDsKK+iznSA8IHByZWlvdXM7CivlgpnoqLsgPCByZW1hcmtzOwor6Zeh5piOIDwgY2xhcmlmeTsKK+WPl+atoei/jiA8IHBvcHVsYXI7CivosZcgPCBjbGFtb3VyOwor5Yiw5aC0IDwgc2hvd1wtdXA7Civnm5vmnIMgPCBwYWdlYW50Owor6K6MIDwgYVwtZmVhc3Q7CivorLMgPCB0b1wtc2luZzsKK+ishiA8IGJlZ3VpbGU7Civpo5vmqZ/loLQgPCBhaXJwb3J0Owor6Km+IDwgbm9pc2lseTsKK+WBveitiSA8IHBlcmp1cnk7CivoqasgPCB0b1wtYnJhZzsKK+iphSA8IHRvXC1zZWxsOwor54Wn5LquIDwgbGlnaHRlbjsKK+mZs+WIlyA8IGRpc3BsYXk7CivpmL/niL7lj4rliKnkup4gPCBhbGdlcmlhOwor6KehIDwgYW50bGVyczsKK+mZveWCmCA8IHBhcmFzb2w7CivlsbHpoIIgPCBoaWxsdG9wOwor5o6M566hIDwgY29udHJvbDsKK+ilnCA8IGZsdXR0ZXI7CivopYMgPCBjb21tZW5kOwor6KSUIDwgY29tcGxleDsKK+iiuiA8IGhvbGRcLXVwOwor5pOg5YWlIDwgaW50cnVkZTsKK+ihtSA8IGNoZW1pc2U7CivmrIrliKkgPCBhXC1wb3dlcjsKK+iKseeSsCA8IGdhcmxhbmQ7CivlhazmsJEgPCBjaXRpemVuOwor5be05p6XIDwgYmFocmFpbjsKK+WBveijnSA8IHRvXC1mYWtlOwor5aCF5by3IDwgc3RhdW5jaDsKK+aWr+eTpuW4jOijoSA8IHN3YWhpbGk7CivoiKrnqbrpg7Xku7YgPCBhaXJtYWlsOwor5Lqe54m56Jit5aSnIDwgYXRsYW50YTsKK+mAsumAgOWFqemboyA8IGRpbGVtbWE7CivlubPlnYcgPCBhdmVyYWdlOwor5a+m6Zqb5LiKIDwgaW5cLWZhY3Q7CivliLrliIAgPCBiYXlvbmV0Owor57C4566VIDwgZHVzdHBhbjsKK+WFhea7vyA8IGZ1bGxcLW9mOwor5biz5biYIDwgZHJhcGVyeTsKK+iWvSA8IFwoZ3Jhc3NcKTsKK+iWtiA8IHRvXC1idXJ5Owor5Y+N5oeJ5aCGIDwgcmVhY3RvcjsKK+iWkyA8IGdpbnNlbmc7Civmv4DntKAgPCBob3Jtb25lOwor6Kej5YmWIDwgZGlzc2VjdDsKK+iOiuWatCA8IHN0YXRlbHk7CivlubPlj7AgPCB0ZXJyYWNlOwor6I+qIDwgaGVuYmFuZTsKK+iPpyA8IHN0aWJlbmU7Civmi43os6MgPCBhdWN0aW9uOwor5ruL6aSKIDwgbm91cmlzaDsKK+ino+WDsSA8IHRvXC1maXJlOwor6I6AIDwgdG9cLWZhcm07CivliLDkvoYgPCBhcnJpdmFsOwor5bqK5YG0IDwgYmVkc2lkZTsKK+aomeanjSA8IGphdmVsaW47Civnlqvoi5cgPCB2YWNjaW5lOwor6LaF6b2hIDwgdG9vXC1vbGQ7Civlm6DntKAgPCBlbGVtZW50Owor5Yaw5bedIDwgZ2xhY2llcjsKK+mXiuW6piA8IGJyZWFkdGg7CivoiJMgPCB0b1wtbGljazsKK+iHnSA8IGJlXC1iYXJlOwor6L2f5pOKIDwgYm9tYmFyZDsKK+iFliA8IHBlcHRvbmU7CivlhrDls7YgPCBpY2VsYW5kOwor55Ww5pWZ5b6SIDwgaGVhdGhlbjsKK+WclueVqyA8IGRyYXdpbmc7CivohJ0gPCBkaXN0ZW5kOwor5YiG5p6Q5Lq65aOrIDwgYW5hbHlzdDsKK+WGsOWxsSA8IGljZWJlcmc7CivlpJbpgqbkurogPCBnZW50aWxlOwor56e75rCR6ICFIDwgbWlncmFudDsKK+S4jeWQieWIqSA8IG9taW5vdXM7CivnvZYgPCBrd3VreWVsOwor5pyA5L2O6ZmQ5bqmIDwgbWluaW11bTsKK+e8siA8IHRvXC1yZWVsOwor55mC5rOVIDwgdGhlcmFweTsKK+WJtemAoOiAhSA8IGNyZWF0b3I7CivlsJbpoIIgPCBzdGVlcGxlOwor6IW56YOoIDwgYWJkb21lbjsKK+eZvOaUviA8IHByb3ZpZGU7CivnmIvni4IgPCBtYWRuZXNzOwor57eBIDwgdG9cLWpvaW47Civmj5Lmm7IgPCBlcGlzb2RlOwor57WqIDwgbWF0dGluZzsKK+WFi+S7gOexs+eIviA8IGthc2htaXI7CivlpbPoi7Hpm4QgPCBoZXJvaW5lOwor5rS75YuV5oi/5bGLIDwgdHJhaWxlcjsKK+S7gOS4gOWlieeNuyA8IHRpdGhpbmc7CivlhafnvoXnlaIgPCBuYWlyb2JpOwor5oqX6K2wIDwgcHJvdGVzdDsKK+W4tuWLlSA8IHRvXC1zcHVyOwor5YWs5byPIDwgZm9ybXVsYTsKK+eskyA8IHRvXC1jb21iOwor5aKo6KW/5ZOl5Lq6IDwgbWV4aWNhbjsKK+eBveWusyA8IHNjb3VyZ2U7CivoirHmnZ8gPCBib3VxdWV0Owor5bey5amaIDwgbWFycmllZDsKK+eXkueXkiA8IHRvXC1pdGNoOwor5L2/6auY6LK0IDwgZGlnbmlmeTsKK+S+i+mhjCA8IGV4YW1wbGU7CivnqIcgPCB0b1wtYmluZDsKK+WEquaWvCA8IHN1cnBhc3M7CivntYLkuo4gPCBhdFwtbGFzdDsKK+WKoOamruiAgOaWvCA8IGdsb3JpZnk7CivnpoIgPCB0b1wtcHJheTsKK+S/oeiztCA8IGNvbmZpZGU7CivoiqXmnKsgPCBtdXN0YXJkOwor5Zyw6LOq5a24IDwgZ2VvbG9neTsKK+WGt+WNuyA8IGNvb2xpbmc7CivmoYzpnaIgPCBkZXNrdG9wOwor5bGl6KGMIDwgZnVsZmlsbDsKK+eah+W4nSA8IGVtcGVyb3I7CivnooMgPCBcKHN0b25lXCk7Civnr4fnq6AgPCB3cml0aW5nOwor55+fIDwgJydcLWxhbmNlOwor556vIDwgdG9cLXBlZXA7CivkuI3lubLkuI3mt6ggPCB1bmNsZWFuOwor5a+s6ZeKIDwgZXhwYW5zZTsKK+mXnOmNteipniA8IGtleXdvcmQ7CivlhaflrrkgPCBjb250ZW50Owor55y9IDwgdG9cLWdhemU7CivnnLQgPCBkYXp6bGVkOwor5LiJ5L2N5LiA6auUIDwgdHJpbml0eTsKK+WCsueEtiA8IGxvZnRpbHk7Civlt7Tmnb7nrqEgPCBiYXNzb29uOwor5Zug54K6IDwgYmVjYXVzZTsKK+aoteWkqyA8IHdvb2RtYW47CivluIPpmobov6ogPCBidXJ1bmRpOwor55WQIDwgdG9cLWZpbGw7Civoh6rnp4EgPCBzZWxmaXNoOwor5YW45Z6LIDwgdHlwaWNhbDsKK+iMtuWFtyA8IHRlYVwtc2V0Owor55SUIDwgYmlnXC1qYXI7Civns4rloZcgPCBtdWRkbGVkOwor55ObIDwgc2NhcHRyZTsKK+eSuiA8IGFcLWNyYWNrOwor55KKIDwgcmVkZGlzaDsKK+iSmeWkp+aLvyA8IG1vbnRhbmE7CivnjbkgPCBhXC1ob3VuZDsKK+eCreeWveeXhSA8IGFudGhyYXg7CivnjZogPCBzcGFuaWVsOwor5YWs55uK5LqL5qWtIDwgdXRpbGl0eTsKK+evgOebriA8IHByb2dyYW07Civpkb3nn7MgPCBkaWFtb25kOwor5ZyS5p6XIDwgZ2FyZGVuczsKK+eLiSA8IGZveFwtY3ViOwor6LuM5p6VIDwgc2xlZXBlcjsKK+iLseWciyA8IGVuZ2xhbmQ7Civpppbpo74gPCBqZXdlbHJ5Owor5pel5bi45bel5L2cIDwgcm91dGluZTsKK+W3peWMoCA8IGFydGlzYW47Civnhq8gPCBieVwtZmlyZTsKK+S/mOiZnCA8IGNhcHRpdmU7CivnhbsgPCB0b1wtd2FybTsKK+iHgueroCA8IGFybWJhbmQ7Civoh6rnlLEgPCBmcmVlZG9tOwor5Y+y5a+G54m5IDwgc2NobWl0dDsKK+eBtCA8IHRvXC1iYWtlOwor5biD5LiBIDwgcHVkZGluZzsKK+eAuSA8IHRvXC1ib2lsOwor5ZyN5pS7IDwgYmVzaWVnZTsKK+WWnemHhyA8IGFjY2xhaW07CivmvpAgPCBiaWxsb3dzOwor55Sf6IKyIDwgdG9cLWJlYXI7CivotaTpgZMgPCBlcXVhdG9yOwor5r2sIDwgYVwtcmFwaWQ7Civlr4zlo6vpgJogPCBmdWppdHN1Owor55S35oCn6Kaq5bGsIDwga2luc21hbjsKK+a6piA8IGRyaXp6bGU7CivploDlj6MgPCBkb29yd2F5Owor54O56Kq/6KGTIDwgY29va2VyeTsKK+iyqOeJqemBi+i8uCA8IGZyZWlnaHQ7CivmkI3lgrcgPCB0b1wtaGFybTsKK+a4vCA8IHJpcHBsZXM7CivmuKcgPCB0b1wtZHJvcDsKK+i6q+adkCA8IHN0YXR1cmU7Civoi7Hli4cgPCBicmF2ZXJ5Owor5Y2w5Yi36ICFIDwgcHJpbnRlcjsKK+a3t+WQiOeJqSA8IG1peHR1cmU7CivpmL/lhYvlgKsgPCBhY2hlcm9uOwor5ra2IDwgdG9cLXNwaXQ7CivmtpIgPCBtZWFuZGVyOwor5rS4IDwgc3BhcmtsZTsKK+eJmeenkemGq+eUnyA8IGRlbnRpc3Q7CivllY/poYwgPCBwcm9ibGVtOwor5a+E6YCBIDwgdG9cLXNlbmQ7Civlgr7mlpwgPCBpbmNsaW5lOwor6YOh5rK75a6J5a6YIDwgc2hlcmlmZjsKK+eEoeelnuirliA8IGF0aGVpc207CivmsYsgPCB0b1wtcG91cjsKK+S4jeWLleaQliA8IHVubW92ZWQ7CivmsLwgPCB0b1wtc2luazsKK+WbsOaTviA8IHBlcnBsZXg7CivmsJUgPCBwcm90aXVtOwor5oq85rKZ6b6NIDwgYWJzYWxvbTsKK+aKhOe2siA8IGRpcFwtbmV0Owor5q2cIDwgZnVyaW91czsKK+WatOatoyA8IHN0ZXJubHk7CivlgqznnKDmm7IgPCBsdWxsYWJ5Owor5Lqe5Lyv5ouJ572VIDwgYWJyYWhhbTsKK+aIluiosSA8IHBlcmhhcHM7Civmpq7lubggPCBob25vcmVkOwor5YWL576F5Zyw5LqeIDwgY3JvYXRpYTsKK+mmrOi5rCA8IHN0aXJydXA7CivmqYYgPCB3aXRob3V0Owor5ZWG6ZqKIDwgY2FyYXZhbjsKK+eJm+mgreeKrCA8IGJ1bGxkb2c7CivlrbjpmaIgPCBjb2xsZWdlOwor5YO15bGAIDwgaW1wYXNzZTsKK+aNleaJiyA8IGNhdGNoZXI7CivmpqIgPCBhXC1mcmFtZTsKK+aKleelqCA8IHRvXC12b3RlOwor5L2/6a2U5rOVIDwgY29uanVyZTsKK+WFqOelnueBjOazqCA8IHJhcHR1cmU7CivmpJcgPCBcKHBsYW50XCk7CivlronkuYPov5EgPCBhbmFsZ2luOwor6JuL55m96LOqIDwgcHJvdGVpbjsKK+WwiOenkemZouagoSA8IGFjYWRlbXk7CivooYzmnY4gPCBsdWdnYWdlOwor5o+Q5YiwIDwgbWVudGlvbjsKK+mpleefnCA8IGhhdWdodHk7Civoip3liqDlk6UgPCBjaGljYWdvOwor5YWr5bi26a2aIDwgb2N0b3B1czsKK+a0l+iho+W6lyA8IGxhdW5kcnk7Civkv6HnrrEgPCBtYWlsYm94Owor5p68IDwgYVwtdGFibGU7CivmnpMgPCBjYXBpdGFsOwor5p24IDwgdG9cLWtpbGw7CivmnL4gPCB0b1wtYnVtcDsKK+amguW/tSA8IGNvbmNlcHQ7CivkuI3lvpfli4EgPCBhd2t3YXJkOwor5Zyw5Z2AIDwgYWRkcmVzczsKK+WtlOmbgCA8IHBlYWNvY2s7Civmu5HnqL0gPCBjb21pY2FsOwor5pW+IDwgdG9cLXJ1bGU7Civmla8gPCB0b1wtZGVmeTsKK+aVnCA8IGZpbGxcLXVwOwor5L2O6Kq/IDwgbG93XC1rZXk7Civmk7ggPCB0b1wtaG9sZDsKK+aMieaZgiA8IG9uXC10aW1lOwor5pGgIDwgZ2VuZXJhbDsKK+mVt+mguOm5vyA8IGdpcmFmZmU7CivmiZPnrpcgPCB0b1wtcGxhbjsKK+aOryA8IG9wcHJlc3M7CivlsI/ntYQgPCBhXC1ncm91cDsKK+aMjSA8IGNvbGxhdGU7CivlpbPpq5jpn7MgPCBzb3ByYW5vOwor5oyJ5pGpIDwgbWFzc2FnZTsKK+aKiCA8IHRvXC1iZW5kOwor5om9IDwgdG9cLW1vdmU7Civos6rph48gPCBxdWFsaXR5Owor56+A5pelIDwgaG9saWRheTsKK+avlOWIqeaZgiA8IGJlbGdpdW07CivkuI3oqr/lkowgPCBkaXNjb3JkOwor5oewIDwgYmVcLWdsYWQ7Civmh6sgPCBlbnJhZ2VkOwor5pyJ6Zmw5b2xIDwgc2hhZG93eTsKK+aHmyA8IGFsYXJtZWQ7Civmh4UgPCBiYXNoZnVsOwor55Si54mpIDwgcHJvZHVjdDsKK+S+m+e1piA8IGZ1cm5pc2g7Civmg6MgPCBvdmVyYWxsOwor5oOHIDwgYmVcLWtpbmQ7CivoiJ7lvIQgPCB0b1wtd2F2ZTsKK+aMh+mXnOevgCA8IGtudWNrbGU7CivmiZPnoo4gPCBzaGF0dGVyOwor5oGJIDwgbWVhbmluZzsKK+WcqOWJjSA8IGZvcndhcmQ7CivntaboiIfos4fmoLwgPCBxdWFsaWZ5Owor5LiD5pyI5LiJ5Y2B6JmfIDwganVseVwtMzA7CivmnY7ptawgPCBsaVwtcGVuZzsKK+WuieiorSA8IGluc3RhbGw7Civosqzpm6MgPCBjZW5zdXJlOwor5bO25ba8IDwgaXNsYW5kczsKK+afpeiqvyA8IGlucXVpcnk7Civkvr/nm4YgPCBiZWRcLXBhbjsKK+igseaDkSA8IGVuY2hhbnQ7Civlu4wgPCB1bmljb3JuOwor5ruy5ryPIDwgc2VlcGFnZTsKK+W5s+W4uOaXpSA8IHdlZWtkYXk7Civoga/pgqYgPCBmZWRlcmFsOwor5ryC5rOKIDwgZHJpZnRlcjsKK+WEsuiXj+WupCA8IHN0b3JhZ2U7CivlmbjmlbggPCB0b25uYWdlOwor5YyI54mZ5YipIDwgaHVuZ2FyeTsKK+WVhuiojiA8IGRpc2N1c3M7Civpppnoj5wgPCBwYXJzbGV5Owor5rW36a6uIDwgc2VhZm9vZDsKK+iHpeaIvyA8IGJlZHJvb207CivljbDlnLDlronpgqMgPCBpbmRpYW5hOwor5YOl5YCWIDwgbHVja2lseTsKK+WCs+WWriA8IGxlYWZsZXQ7CivkuI3lvpfogIznn6UgPCB1bmtub3duOwor5aKT6KqM6YqYIDwgZXBpdGFwaDsKK+mmmeiFuCA8IHNhdXNhZ2U7CivoiKrnqbrlhazlj7ggPCBhaXJsaW5lOwor5aqeIDwgYXRcLWVhc2U7CivotbDnp4EgPCBzbXVnZ2xlOwor5pyJ6ICQ5LmF5YqbIDwgZHVyYWJsZTsKK+S4gOacg+WFkiA8IGFcLXdoaWxlOwor5LiN6YGT5b63IDwgaW1tb3JhbDsKK+m+jeidpiA8IGxvYnN0ZXI7Civng4/lhYvomK0gPCB1a3JhaW5lOwor5aSq6Zm96buR5a2QIDwgc3Vuc3BvdDsKK+WcqOWupOWFpyA8IGluZG9vcnM7CivlpKMgPCBhXC1kcmVhbTsKK+WjnSA8IGFcLW1vdW5kOwor5biM5Lyv5L6G5pu4IDwgaGVicmV3czsKK+WhkyA8IHBsYXN0ZXI7CivmpLDlrZAgPCBjb2NvbnV0Owor6ZGS5oiSIDwgd2FybmluZzsKK+WghCA8IHBhcmFwZXQ7Civku6PoqZ4gPCBwcm9ub3VuOwor5Z+XIDwgYVwtd2hhcmY7CivkuLnpuqUgPCBkZW5tYXJrOwor5LiN6Zui5YWSIDwgbm90XC1iYWQ7CivlnJUgPCBsaWJyYXJ5Owor5ZyCIDwgcGlnXC1zdHk7Civnlavlu4ogPCBnYWxsZXJ5Owor55m96JuL55m9IDwgYWxidW1pbjsKK+WaiiA8IHRvXC1wYW50Owor5Li75bit6Ie6IDwgcm9zdHJ1bTsKK+ihneWKmyA8IGltcHVsc2U7CivpoZ7lm7rphocgPCBzdGVyb2lkOwor5ZalIDwgYVwtcGxhY2U7Civlroznvo4gPCBwZXJmZWN0Owor5bGV5pybIDwgb3V0bG9vazsKK+ipleitsOacgyA8IGNvdW5jaWw7CivmnInluIzmnJsgPCBob3BlZnVsOwor56uK55ucIDwgYnVyZ2xhcjsKK+WUniA8IHRvXC1nYXNwOwor5ZSFIDwgYVwtc291bmQ7Civlrrbnpr0gPCBwb3VsdHJ5Owor5YK35a+S55eHIDwgdHlwaG9pZDsKK+WSviA8IGFcLW5vaXNlOwor5ZKJIDwgYW5cLWVjaG87CivlpafmnpfljLnlhYsgPCBvbHltcGljOwor5Yiw6YKj6KOhIDwgdGhpdGhlcjsKK+WRvyA8IHRvXC15YXduOwor5ZGsIDwgdG9cLXJlc3Q7Civkup7liKnmoZHpgqMgPCBhcml6b25hOwor5ZGMIDwgdG9cLWNhbGw7CivnqbrnvLogPCB2YWNhbmN5Owor5pyA6auYIDwgaGlnaGVzdDsKK+eVq+WutiA8IHBhaW50ZXI7CivppIrogIHph5EgPCBwZW5zaW9uOwor55ay5YueIDwgZmF0aWd1ZTsKK+WNsiA8IGVtaW5lbnQ7CivljKcgPCBhXC10cnVuazsKK+S4jem9kiA8IGRlc3Bpc2U7CivmipXmiYsgPCBwaXRjaGVyOwor5rW36YKKIDwgc2Vhc2lkZTsKK+iTi+S4luWkquS/nSA8IGdlc3RhcG87CivlmYHlv4MgPCB0b1wtaGF0ZTsKK+Wwi+axgiA8IHRvXC1zZWVrOwor5YS2IDwgdmFsaWFudDsKK+Wwj+WGiuWtkCA8IGJvb2tsZXQ7CivlhKYgPCBtaWxsaW5nOwor5YSkIDwgb25cLWR1dHk7CivmnKrmraboo50gPCB1bmFybWVkOwor5Zm05aKoIDwgaW5rXC1qZXQ7CivmnInpmZAgPCBsaW1pdGVkOwor5omY5p62IDwgYnJhY2tldDsKK+S+hyA8IGFcLWNsYXNzOwor5LyAIDwgZXhjaXRlZDsKK+acgOmVtyA8IGxvbmdlc3Q7Civkub8gPCB0b1wtY3VyZTsKK+S5rCA8IHRvXC1oYW5nOwor5omz5omLIDwgc3Bhbm5lcjsKK+S+v+aWvCA8IGVhc3lcLXRvOwor5rW36LGaIDwgZG9scGhpbjsKK+aEm+ittyA8IGNoZXJpc2g7CivktqkgPCB0b1wtZ25hdzsKK+aEm+Wxi+WPiueDjyA8IGxvdmVcLW1lOwor56+A5YSJIDwgdGhyaWZ0eTsKK+elnumrlCA8IGdvZGhlYWQ7CivktKcgPCB2ZW5pc29uOwor5Lit6ZaTIDwgYmV0d2l4dDsKK+SynSA8IHBvbWZyZXQ7CivkspQgPCBhXC13aGFsZTsKK+aEn+imuiA8IHRvXC1mZWVsOwor5pyJ5bmr5YqpIDwgaGVscGZ1bDsKK+SxiSA8IHRoZVwtZWVsOwor5LCeIDwgdG9cLWNvb2s7CivlraTnq4sgPCBpc29sYXRlOwor5K68IDwgcGllYmFsZDsKK+eVtuWJjSA8IGN1cnJlbnQ7CivkrqYgPCB1bnRhbWVkOwor5bGk5a2QIDwgc3RyYXR1bTsKK+StoCA8IGFcLXNuYWNrOwor55So5a2XIDwgZGljdGlvbjsKK+SsjiA8IGhvdFwtYWlyOwor6Zi/5ouJ5LyvIDwgYXJhYmlhbjsKK+SrmCA8IGhlYWx0aHk7Civkv4PmiJAgPCBwcm9jdXJlOwor5a6J55O/IDwgYW1wb3VsZTsKK+SqoyA8IHNtYXNoZWQ7Civoh7PkuIogPCBzdXByZW1lOwor5KmzIDwgdGFubmluZzsKK+SplCA8IHRoZVwtaGVtOwor5Lul6aas5YWn5YipIDwgZW1hbnVlbDsKK+SoniA8IHRvXC1yYWluOwor5LiA6aCFIDwgYW5cLWl0ZW07CivkqIIgPCBhXC1jaGljazsKK+SnnyA8IHRvXC1za2luOwor6Zi/5ouJ5LiBIDwgYWxhZGRpbjsKK+S4jeimuuWvnyA8IHVuYXdhcmU7CivmuIXnnJ8gPCBpc2xhbWljOwor5KaLIDwgdG9cLWdyb3c7CivllpzmraEgPCB0b1wtbGlrZTsKK+eUmOiXjeiPnCA8IGNhYmJhZ2U7CivkpJ8gPCBhXC1zcGFkZTsKK+S4iumWgCA8IGRyb3BcLWluOwor5KK2IDwgYVwtc3RhdGU7CivlrbjnlJ8gPCBzdHVkZW50Owor5aWz5L+u6YGTIDwgY29udmVudDsKK+SimSA8IHRvXC1ydWluOwor542O6YeRIDwgcHJlbWl1bTsKK+imj+WKg+S6uuWToSA8IHBsYW5uZXI7CivkoLwgPCB0b1wtd2VhcjsKK+S6uue+pCA8IGFcLWNyb3dkOwor5YGH5L2/IDwgc3VwcG9zZTsKK+eZvOePvueJqSA8IGZpbmRpbmc7Civmm7TpgaAgPCBmYXJ0aGVyOwor5Zyo5LiL5pa5IDwgYmVuZWF0aDsKK+mpmuWahyA8IGhvcnJpZnk7CivknJYgPCB0b1wtdGFsazsKK+SciSA8IHRvXC1qZXN0Owor5Ju3IDwgdG9cLW9iZXk7Civkm7AgPCBza2V0Y2h5Owor6JK45rG95qmfIDwgc3RlYW1lcjsKK+SasSA8IGhvbmVzdHk7Civkmq4gPCB0aGlja2VyOwor5JqXIDwgdG9cLWxpZnQ7Civkmo8gPCB0b1wtbG92ZTsKK+S4memFriA8IGFjZXRvbmU7CivlsI/ngJHluIMgPCBjYXNjYWRlOwor5oWI5ZaE5qmf5qeLIDwgY2hhcml0eTsKK+eUt+aAp+WwiueosSA8IGVzcXVpcmU7CivkmLEgPCB3ZWFsdGh5Owor5JigIDwgZ3JlYXZlczsKK+SYnSA8IGFcLXNoaXJ0Owor56ys5Y2B5LqMIDwgdHdlbGZ0aDsKK+S4jeS4ieS4jeWbmyA8IGR1YmlvdXM7CivmiY3lubIgPCBhYmlsaXR5Owor6aaZ5rC0IDwgcGVyZnVtZTsKK+mmmeawoyA8IGluY2Vuc2U7CivklpogPCBhXC10aWdlcjsKK+aIkOaWhyA8IHdyaXR0ZW47CivklLogPCBoZWFkaW5nOwor5ZCQ6ZyyIDwgdG9cLXRlbGw7CivmnKrmsbrlrpogPCBwZW5kaW5nOwor6LaV5b+rIDwgYXRcLW9uY2U7CivmnIPorbAgPCBtZWV0aW5nOwor6aOb6Ii5IDwgYWlyc2hpcDsKK+abvOiwtyA8IGJhbmdrb2s7CivkkrYgPCB0aGVcLXNreTsKK+WIl+eOi+e0gOS4iyA8IDJcLWtpbmdzOwor5YiX546L57SA5LiKIDwgMVwta2luZ3M7CivkkacgPCBhXC1zaG9ydDsKK+SQvyA8IGdpenphcmQ7CivkkLcgPCBwYXVuY2h5Owor5JC0IDwgbHVtYmFnbzsKK+SQqyA8IG9iZXNpdHk7Civkj5YgPCBhXC13b3VuZDsKK+SPhyA8IHRvXC1oZWFyOwor5I6pIDwgdG9cLXRpbGw7Civml4XpgYrogIUgPCB0b3VyaXN0Owor5Li76KmeIDwgc3ViamVjdDsKK+ayiem7mCA8IHNpbGVuY2U7CivmiZPlrZcgPCB0b1wtdHlwZTsKK+WPl+iol+S6uiA8IHRydXN0ZWU7CivkjJggPCB0b1wta25pdDsKK+SMlCA8IHRvXC1zb2FrOwor5IyBIDwgYVwtcGxlYXQ7Civki44gPCB0b1wtbWVuZDsKK+SKnyA8IGFkb3JuZWQ7CivkipggPCBhXC1ncmFpbjsKK+SJoiA8IGFcLXNpZXZlOwor5ImOIDwgYVwtY292ZXI7CivkiKwgPCBhXC1zbWFsbDsKK+WutOacgyA8IGJhbnF1ZXQ7Civkh5QgPCBhdHJvcGh5Owor5IeNIDwgdG9cLXdhaXQ7CivpoJjpmoogPCBjYXB0YWluOwor5pyI6J2VIDwgZWNsaXBzZTsKK+SEjyA8IGJpemFycmU7CivlgInkv4MgPCBodXJyaWVkOwor6IKl5rKDIDwgZmVydGlsZTsKK+SCgCA8IHRvXC13aW5rOwor5Y+s6ZuGIDwgY29udmVuZTsKK+SBmyA8IHRvXC1sb29rOwor56We6LehIDwgbWlyYWNsZTsKK+S9v+W+kiA8IGFwb3N0bGU7CivjvrcgPCB0b1wtYWNoZTsKK+O+oCA8IGFcLWZldmVyOwor476fIDwgcmVsYXBzZTsKK+O+mCA8IGFpbG1lbnQ7CivjvpUgPCBhXC1jaGlsbDsKK+O+hiA8IGVjZHlzaXM7CivjvoUgPCBkZWZlY3RzOwor6Zm46LuN5LiK5qChIDwgY29sb25lbDsKK+O9liA8IGFcLWh1bWFuOwor47y8IDwgYVwtbGFkbGU7CivjvLcgPCBhXC1iYXNpbjsKK+iEueWkpyA8IHN3b2xsZW47CivjvJcgPCBhXC1icmljazsKK+iZm+ani+Wwj+iqqiA8IGZpY3Rpb247Civlr7blr7YgPCBkYXJsaW5nOwor47qyIDwgYnV0dG9uczsKK+O6iiA8IGFcLWJlYXN0Owor47meIDwgdG9cLWJhcms7CivjuZsgPCBhXC10YW1lZDsKK+etieWAmSA8IHdhaXRpbmc7Civot4zliLAgPCB0b1wtZmFsbDsKK+aHuuaClCA8IGNvbmZlc3M7Civjt5MgPCBhXC10b3JjaDsKK+O3iSA8IHRvXC1pcm9uOwor5oi25aSWIDwgb3V0ZG9vcjsKK+efs+WNl+WxrCA8IGhlYXRoZXI7Civlr6zlrrkgPCBsZW5pZW50Owor47WSIDwgYm9pbGluZzsKK+O1jCA8IHRvXC1mbG93Owor47WFIDwgYVwtcml2ZXI7Civog73lubkgPCBjYXBhYmxlOwor5LiN6KaLIDwgbm90XC1zZWU7CivjtIcgPCB0b1wtd2FkZTsKK+OzrSA8IHNwaXR0bGU7Civjs6wgPCBhblwtZWRkeTsKK+S9j+aIvyA8IGhvdXNpbmc7Civjs5kgPCBhXC1icm9vazsKK+aIsOWjqyA8IGZpZ2h0ZXI7CivjsoIgPCB0b1wtcHVzaDsKK+OxliA8IHRvXC1zdGF5Owor47GMIDwgdG9cLXRha2U7Civnv6Hnv6AgPCBlbWVyYWxkOwor5bCK5Zq0IDwgZGlnbml0eTsKK+iWhOeDpOmkhSA8IHBhbmNha2U7Civjr5MgPCBhXC1jb3VjaDsKK+OvkCA8IHR1YnVsYXI7Civjr4sgPCBhXC1jaGVzdDsKK+WvhuW6piA8IGRlbnNpdHk7CivjrpsgPCBhXC1zcG9vbjsKK+OtqiA8IGFcLXNocnViOwor5q+S6I2J5ZCNIDwgaGVtbG9jazsKK+OrtCA8IHRvXC1yb2FyOwor46udIDwgdGhlXC1zdW47CivlnLDlubPnt5ogPCBob3Jpem9uOwor5bCW5Y+rIDwgc2NyZWVjaDsKK+OpsCA8IHRvXC1zdGFiOwor5aW56Ieq5bexIDwgaGVyc2VsZjsKK+WuieaSqyA8IHBsYWNhdGU7CivjqLcgPCB0b1wtd2lwZTsKK+mggumHnSA8IHRoaW1ibGU7CivjqLAgPCB0b1wtdHVybjsKK+aguOWtkCA8IG51Y2xlYXI7CivkvJHmnIMgPCBhZGpvdXJuOwor6LKi54mpIDwgdHJpYnV0ZTsKK+OnuyA8IGFcLXRob3JuOwor46a5IDwgYVwtc3BlYXI7Civjpq0gPCB0b1wtcGl0eTsKK+mjm+ebpCA8IGZyaXNiZWU7Civmt5jmsKMgPCBuYXVnaHR5Owor46WSIDwgY29ycnVwdDsKK+mojuWFtSA8IGNhdmFscnk7CivjpLogPCBibHVycmVkOwor46O3IDwgd2Fsa2luZzsKK+efruWjr+e0oCA8IGN5Y29jZWw7CivlpJbnp5HmiYvooZMgPCBzdXJnZXJ5Owor46G4IDwgYVwtaG91c2U7CivnrKzkuIMgPCBzZXZlbnRoOwor46GoIDwgYVwtbGFiZWw7CivjoZggPCBzY3JlZW5zOwor46GTIDwgZHJhd2VyczsKK+OhgiA8IHJlbWFpbnM7Civkv4Pkvb8gPCBzcHVyXC1vbjsKK+miqOeusSA8IGJlbGxvd3M7Civjn6cgPCBhXC1jbGlmZjsKK+a1tOebhiA8IGJhdGh0dWI7CivjnrogPCBhXC10cmliZTsKK+e+pOiKsSA8IGJsb3Nzb207CivlkIToibLlkITmqKMgPCBkaXZlcnNlOwor5L2b576F6KOh6YGUIDwgZmxvcmlkYTsKK+mmrOWtkCA8IGNvbW1vZGU7CivotorljZcgPCB2aWV0bmFtOwor5ZCR5L2V6JmVIDwgd2hpdGhlcjsKK+OckyA8IHdvbWFubHk7CivnqbrmiLAgPCBhaXJcLXdhcjsKK+aIkOWciCA8IHdyZWF0aGU7CivjnIcgPCB1bmhhcHB5Owor5oeJ5b6XIDwgZGVzZXJ2ZTsKK+aIsOWLnSA8IHByZXZhaWw7CivjmqIgPCBhXC1zbGF2ZTsKK+S4jeiLnyA8IG5vdFwtbGF4Owor57GD5p2/55CDIDwgcmVib3VuZDsKK+S9j+WuvyA8IGxvZGdpbmc7CivjmZQgPCBhXC1mZW5jZTsKK+OZjyA8IGNhdmVybnM7CivororpgbcgPCBjaGFuZ2VzOwor45ipIDwgdG9cLW1hdGU7Civjl4MgPCB0aGVcLWxpcDsKK+WwgeWFpSA8IGluY2xvc2U7CivppqzlhYvmgJ3kuLvnvqkgPCBtYXJ4aXNtOwor45WfIDwgdG9cLXNpZ247CivjlZ4gPCBhXC1icnVzaDsKK+OUvyA8IGFcLXRhbGx5Owor45ShIDwgZ3JlYXRseTsKK+OUgiA8IHRvXC1wYXJlOwor45OwIDwgdG9cLXJpdmU7Civjk58gPCB0b1wtcGVlbDsKK+OStCA8IHRvXC1jb21lOwor45KmIDwgcHVwcGV0czsKK+iBveW+l+imiyA8IGF1ZGlibGU7Civph47ospMgPCB3aWxkY2F0Owor45KVIDwgdW55aWVsZDsKK+OSkSA8IGdyb3dcLXVwOwor5Luj5pu/IDwgaW5zdGVhZDsKK+ORhSA8IHRvXC1tYWtlOwor5qGI5Y23IDwgcmVjb3JkczsKK+eZvuaFleWkpyA8IGJlcm11ZGE7Civku6PmlbggPCBhbGdlYnJhOwor5pyJ5qKd57SLIDwgc3RyaXBlZDsKK+acqOeTpiA8IHNoaW5nbGU7CivmiJDlip8gPCBzdWNjZXNzOwor5a6J5oGv5pelIDwgc2FiYmF0aDsKK+S4reeriyA8IG5ldXRyYWw7CivkuJbntIAgPCBjZW50dXJ5Owor5L2O5ZywIDwgbG93bGFuZDsKK+a1t+a+oSA8IHNlYXdlZWQ7Civku4rmmZogPCB0b25pZ2h0Owor6KOB57SZ5qmfIDwgdHJpbW1lcjsKK+WTgOaxgiA8IGVudHJlYXQ7CivmtJfnpq4gPCBiYXB0aXNtOwor5aaT6ZmiIDwgYnJvdGhlbDsKK+S4jeetiSA8IHRvXC12YXJ5Owor5YWs54i15aSr5Lq6IDwgZHVjaGVzczsKK+WQjee+qSA8IHRpdHVsYXI7CivmtojmpbUgPCBwYXNzaXZlOwor5rC06YqAIDwgbWVyY3VyeTsKK+aaiOiIuSA8IHNlYXNpY2s7Civmh7fmlbXmhI8gPCBob3N0aWxlOwor6IG35belIDwgd29ya2VyczsKK+Wtn+WtkCA8IG1lbmNpdXM7Civlrpjlj7ggPCBsYXdzdWl0Owor6Z2e6ZujIDwgcmVwcm9vZjsKK+awuOmBoCA8IGZvcmV2ZXI7CivphazovIkgPCBwYXlsb2FkOwor6IG95a+rIDwgZGljdGF0ZTsKK+iZp+aQjSA8IGRlZmljaXQ7CivpurvnhakgPCB0cm91YmxlOwor6Zi/54i+5be05bC85LqeIDwgYWxiYW5pYTsKK+W9vOW+l+W+jOabuCA8IDJcLXBldGVyOwor5Ym156uL6ICFIDwgZm91bmRlcjsKK+e2reS7luWRvSA8IHZpdGFtaW47CivorY/oqpogPCBjeW5pY2FsOwor56K66KqNIDwgY29uZmlybTsKK+ijnee9rueJqSA8IGZpeHR1cmU7CivnjovmrIogPCByb3lhbHR5Owor54675Yip57at5LqeIDwgYm9saXZpYTsKK+S8geWcliA8IGF0dGVtcHQ7Civlj4PorbDlk6EgPCBzZW5hdG9yOwor576F55ukIDwgY29tcGFzczsKK+aYn+acn+S6jCA8IHR1ZXNkYXk7Civnj77lr6YgPCByZWFsaXR5Owor6LOq5ZywIDwgdGV4dHVyZTsKK+mfs+aoguacgyA8IGNvbmNlcnQ7CivotIrliqkgPCBzcG9uc29yOwor5b+g6KqgIDwgZGV2b3RlZDsKK+mrlOiCsuWgtCA8IHN0YWRpdW07CivphK3ph40gPCBzZXJpb3VzOwor5Y2w5YOP5rex5Yi7IDwgaW1wcmVzczsKK+WNiumAlCA8IGhhbGZ3YXk7Civlpb3ovYkgPCBpbXByb3ZlOwor5oOh5qONIDwgdmlsbGFpbjsKK+aEm+eIvuiYrSA8IGlyZWxhbmQ7CivpgIPkuqHogIUgPCBydW5hd2F5Owor6by75a2UIDwgbm9zdHJpbDsKK+WTgOaAnSA8IHBlbnNpdmU7CivmjIflsI7mlZnmjoggPCBhZHZpc2VyOwor54yW542XIDwgcmFtcGFudDsKK+aenOWckiA8IG9yY2hhcmQ7Civml4HpgoogPCBsYXRlcmFsOwor5ZKv5ZKv56yRIDwgY2h1Y2tsZTsKK+eUn+eJqeWtuCA8IGJpb2xvZ3k7Civpo5vlvYggPCBtaXNzaWxlOwor6IG95YqbIDwgaGVhcmluZzsKK+S9v+aGpOaFqCA8IG91dHJhZ2U7Civml6XoqowgPCBqb3VybmFsOwor5bGF5L2P5pa8IDwgaW5oYWJpdDsKK+WklumdoiA8IG91dHNpZGU7Civpm4Tpu4MgPCByZWFsZ2FyOwor5pyD5pyfIDwgc2Vzc2lvbjsKK+S4jeazlSA8IGxhd2xlc3M7CivkuI3nn6XkvZXmlYUgPCBzb21laG93Owor5reh5YWJIDwgc2hpbW1lcjsKK+W9jOizveS6niA8IG1lc3NpYWg7CivmspLnlJrpurwgPCBub3RoaW5nOwor5aSn6YyvIDwgYmx1bmRlcjsKK+iAgeW5tCA8IGVsZGVybHk7CivorornoawgPCBzdGlmZmVuOwor5rW35bK4IDwgY29hc3RhbDsKK+eFmeeBsOe8uCA8IGFzaHRyYXk7CivnpKbniakgPCBtaW5lcmFsOwor6JGX6Zm4IDwgbGFuZGluZzsKK+S4jeWcqOS6hiA8IGJlXC1kZWFkOwor57Sh57mU5ZOBIDwgdGV4dGlsZTsKK+enkeWtuCA8IHNjaWVuY2U7CivmtrLljJYgPCBsaXF1aWZ5Owor6Zi/5Y+45Yy55p6XIDwgYXNwaXJpbjsKK+aWueiogCA8IGRpYWxlY3Q7Civlj6TniakgPCBhbnRpcXVlOwor5pel6JC9IDwgc3VuZG93bjsKK+mHkeWFiemWg+eIjSA8IHNwYW5nbGU7Civpg7XosrsgPCBwb3N0YWdlOwor5puW5pinIDwgaWxsaWNpdDsKK+S4jeS6uumBkyA8IGluaHVtYW47Civpm4Tpm54gPCByb29zdGVyOwor5pS+6ZaLIDwgdW5sZWFzaDsKK+iiq+aykuaUtiA8IGZvcmZlaXQ7CivlpbTpmrjliLbluqYgPCBzbGF2ZXJ5Owor576o5oWVIDwgZW52aW91czsKK+i3r+ilv+W8lyA8IGx1Y2lmZXI7CivljJblrbjlrrYgPCBjaGVtaXN0Owor6aSF5Lm+IDwgYmlzY3VpdDsKK+acieWusyA8IGhhcm1mdWw7CivphZLnsr4gPCBhbGNvaG9sOwor56S+5pyDIDwgc29jaWV0eTsKK+aatOaUvyA8IHR5cmFubnk7CivnjovlnIsgPCBraW5nZG9tOwor5piT56KOIDwgYnJpdHRsZTsKK+mHmOatuyA8IGNydWNpZnk7CivoqJPnt7TogIUgPCB0cmFpbmVyOwor5riF5r2U5ZmoIDwgY2xlYW5lcjsKK+mhp+W/jCA8IHNjcnVwbGU7CivmhIjlkIggPCB0b1wtaGVhbDsKK+ips+i/sCA8IHJlY291bnQ7CivpoZjmhI8gPCB0b1wtd2lzaDsKK+aEm+W+t+eOsiA8IGFkZWxpbmU7Civov6vliIfmgKcgPCB1cmdlbmN5Owor546p5YWSIDwgdG9cLXBsYXk7CivlpbPmvJTlk6EgPCBhY3RyZXNzOwor5Lit5a2QIDwgbmV1dHJvbjsKK+mHkeapmCA8IGt1bXF1YXQ7CivpnIDopoEgPCB0b1wtbmVlZDsKK+aClOaBqCA8IHJlbW9yc2U7CivmnIDlpKcgPCBiaWdnZXN0Owor5pyA5aSaIDwgYXRcLW1vc3Q7CivogJXkvZwgPCBmYXJtaW5nOwor5oCl5rWBIDwgdG9ycmVudDsKK+W3tOavlOWAqyA8IGJhYnlsb247CivogIHlhawgPCBodXNiYW5kOwor5ayw5YWS5pyfIDwgaW5mYW5jeTsKK+eZvuiRieeqlyA8IHNodXR0ZXI7Civpgb/lvYjlnZEgPCBmb3hob2xlOwor6aas5L6G6KW/5LqeIDwgbWFsYXNpYTsKK+WxseiDoeahg+acqCA8IGhpY2tvcnk7CivohKvooaPmnI0gPCB1bmRyZXNzOwor5LmP5ZGzIDwgdGVkaW91czsKK/ChnLEgPCB0b1wtZW52eTsKK+WRvOWQuCA8IGJyZWF0aGU7CivnjJzluqYgPCBzdXJtaXNlOwor5ZG75ZCfIDwgdG9cLW1vYW47CivlvbzlvpfliY3mm7ggPCAxXC1wZXRlcjsKK+mBtOmBuCA8IHRvXC1waWNrOwor5aWz56WeIDwgZ29kZGVzczsKK+aDs+WDjyA8IGltYWdpbmU7Civmpa3ppJjogIUgPCBhbWF0ZXVyOwor5ZCM5b+XIDwgY29tcmFkZTsKK+aykuaciSA8IGhhdmVuJyd0Owor5Y2X55OcIDwgcHVtcGtpbjsKK+iuiuaaliA8IHdhcm1pbmc7Civph5HlrZfloZQgPCBweXJhbWlkOwor5rCj55CDIDwgYmFsbG9vbjsKK+eLguaatCA8IGZyYW50aWM7Civku5boh6rlt7EgPCBoaW1zZWxmOwor5ZCK5bqKIDwgaGFtbW9jazsKK+WPiuaZgiA8IGluXC10aW1lOwor6YOo572yIDwgZGlzcG9zZTsKK+S5n+S4jSA8IG5laXRoZXI7Civlj6/mhpAgPCBwaXRpZnVsOwor5aWz55qHIDwgZW1wcmVzczsKK+WumuWxheiAhSA8IHNldHRsZXI7CivkuIDlpKkgPCBvbmVcLWRheTsKK+S6jOWNgeWkmiA8IG92ZXJcLTIwOwor5pS56KOdIDwgcmVtb2RlbDsKK+mYv+mjmyA8IGhvb2RsdW07Civlj6/mgaggPCBoYXRlZnVsOwor5pS255WZ5omAIDwgYmFycmFjazsKK+azleWumCA8IGFcLWp1ZGdlOwor576O5ZyLIDwgYW1lcmljYTsKK+acgOS9syA8IG9wdGltdW07Civlub3pnYggPCBzcGVjdGVyOwor6YGL6L2JIDwgdG9cLXdvcms7CivpgYvovLggPCB0cmFuc2l0Owor5oKy5YqHIDwgdHJhZ2VkeTsKK+abuOS/oSA8IGVwaXN0bGU7Civlio3ooZMgPCBmZW5jaW5nOwor5bCx5a+i5pmC6ZaTIDwgYmVkdGltZTsKK+e3kuiogCA8IHByZWZhY2U7CivoqofogIAgPCBwcm91ZGx5Owor57y65bitIDwgYWJzZW5jZTsKK+S4gOWPoyA8IHJlYWRpbHk7CivkuIPljYEgPCBzZXZlbnR5Owor54eV6bql57KlIDwgb2F0bWVhbDsKK+aWsOeUnyA8IG5ld2Jvcm47CivkuI3lho0gPCBub1wtbW9yZTsKK+S6nuaLieW3tOmmrCA8IGFsYWJhbWE7CivkuJbkv5cgPCBwcm9mYW5lOwor5bm06ZGRIDwgYWxtYW5hYzsKK+avlOeVqyA8IGdlc3R1cmU7Civph4/lrZAgPCBxdWFudHVtOwor54y/5Lq6IDwgYXBlXC1tYW47Civlj6vlpb0gPCBhcHBsYXVkOwor6Ieq6KGM6LuKIDwgYmljeWNsZTsKK+mAkOmAgCA8IHJlcHVsc2U7CivmsJHmlbjoqJggPCBudW1iZXJzOwor5bCP5paR6bueIDwgc3BlY2tsZTsKK+azqOWFpSA8IHBvdXJcLWluOwor5q2j576pIDwganVzdGljZTsKK+S9v+WOreeFqSA8IGRpc2d1c3Q7Civoib7ov6rnlJ8gPCBhZGRpc29uOwor5pivIDwgaW5kZWVkOwor6L+rIDwgY29lcmNlOwor5b+cIDwgc2hvdWxkOwor5b+YIDwgZm9yZ2V0Owor5Zu9IDwgbmF0aW9uOwor6L+UIDwgcmV0dXJuOwor5b+NIDwgZW5kdXJlOwor6L+EIDwgZXh0ZW5kOwor5b+FIDwgc3VyZWx5Owor5Ye6IDwgZ29cLW91dDsKK+i+vyA8IGZvbGxvdzsKK+eevCA8IGV5ZWxpZDsKK+W+lyA8IG9idGFpbjsKK+i+tyA8IHNtb290aDsKK+W+tCA8IHN1bW1vbjsKK+W+syA8IHZpcnR1ZTsKK+eerSA8IGJyaWdodDsKK+i+myA8IGJpdHRlcjsKK+W+kCA8IHNsb3dseTsKK+W+jCA8IGJlaGluZDsKK+W+iiA8IGxpbmdlcjsKK+W9sSA8IHNoYWRvdzsKK+S6iyA8IGFmZmFpcjsKK+i9nyA8IHJ1bWJsZTsKK+W9iCA8IHBlbGxldDsKK+S4uyA8IG1hc3RlcjsKK+W8tyA8IHN0cm9uZzsKK+W8myA8IGxvb3NlbjsKK+awkSA8IHBlb3BsZTsKK+ecjCA8IGNvdW50eTsKK+eOsCA8IGFwcGVhcjsKK+WIhiA8IGRpdmlkZTsKK+S6myA8IGxpdHRsZTsKK+ebuCA8IG11dHVhbDsKK+eQhiA8IHJlYXNvbjsKK+ebiiA8IHByb2ZpdDsKK+ivnSA8IHNwZWVjaDsKK+WQkSA8IHRvd2FyZDsKK+WumiA8IGRlY2lkZTsKK+W6qyA8IGFybW9yeTsKK+W6piA8IGRlZ3JlZTsKK+W6lSA8IGJvdHRvbTsKK+aJkyA8IHN0cmlrZTsKK+S9jSA8IHRocm9uZTsKK+W6jyA8IHNlcmllczsKK+W5vCA8IGluZmFudDsKK+W5siA8IG9wcG9zZTsKK+WGhSA8IGluc2lkZTsKK+eZqiA8IHNwYXNtczsKK+WKoCA8IGFkZFwtdG87CivljJYgPCBjaGFuZ2U7CivnmYwgPCBjYW5jZXI7CivluLggPCBjb21tb247CivouLAgPCBleGNlZWQ7CivluIIgPCBtYXJrZXQ7CivmiY0gPCB0YWxlbnQ7CivkvY8gPCByZXNpZGU7CivlkZggPCBtZW1iZXI7Civlt7sgPCBzY3JvbGw7CivmgKcgPCBuYXR1cmU7CivmiqUgPCByZXBvcnQ7CivnpZ4gPCBzcGlyaXQ7CivmlbAgPCBudW1iZXI7Civot6EgPCBzZWFyY2g7Civljp8gPCBzb3VyY2U7Civlt6EgPCBwYXRyb2w7Civlt50gPCBzdHJlYW07CivnloogPCByZXBlYXQ7Civns7sgPCBzeXN0ZW07CivnlaAgPCBnYXJkZW47CivorrAgPCByZWNvcmQ7CivmnpcgPCBmb3Jlc3Q7Civnu58gPCBnb3Zlcm47CivlrZcgPCBsZXR0ZXI7Civls7YgPCBpc2xhbmQ7Civos6ogPCBtYXR0ZXI7CivorrogPCBkZWJhdGU7CivosrAgPCBib3Jyb3c7CivmjIcgPCBmaW5nZXI7CivosqEgPCB3ZWFsdGg7CivoirEgPCBmbG93ZXI7CivlsaQgPCBzdG9yZXk7CivmnaEgPCBjbGF1c2U7CivlsY0gPCBjb3Jwc2U7CivlsYAgPCBidXJlYXU7Civlip4gPCBtYW5hZ2U7CivosLcgPCB2YWxsZXk7Civln44gPCBjYXN0bGU7CivniLYgPCBmYXRoZXI7CivlsI4gPCBkaXJlY3Q7Civlr6cgPCByZXBvc2U7Civpu4QgPCB5ZWxsb3c7CivlvrcgPCBldGhpY3M7CivlrrMgPCBpbmp1cmU7Civlrq4gPCBwYWxhY2U7Civlj4sgPCBmcmllbmQ7CivlroggPCBkZWZlbmQ7CivoroMgPCBwcmFpc2U7CivpmYUgPCBib3JkZXI7CivljZUgPCBzaW5nbGU7CivlraQgPCBvcnBoYW47CivmoKEgPCBzY2hvb2w7CivnjYQgPCBwcmlzb247CivnjL4gPCBjcmFmdHk7CivorJkgPCBodW1ibGU7CivorI4gPCByaWRkbGU7Civni7kgPCBuYXJyb3c7Civmr40gPCBtb3RoZXI7Civni5kgPCBhblwtYXBlOwor5ZuiIDwgc3BoZXJlOwor54uCIDwgaW5zYW5lOwor6KqyIDwgbGVzc29uOwor5oubIDwgYmVja29uOwor5YW0IDwgdGhyaXZlOwor57qmIDwgdHJlYXR5Owor6KmpIDwgcG9ldHJ5Owor57udIDwgdG9cLWN1dDsKK+mAiSA8IGNob29zZTsKK+aYnyA8IGFcLXN0YXI7CivoqLQgPCBhY2N1c2U7CivniJsgPCByb3R0ZW47CivmtoggPCB2YW5pc2g7Civnh60gPCBjYW5kbGU7Civlp6sgPCBiZWF1dHk7CivmnaggPCB3aWxsb3c7CivkuKUgPCBzdHJpY3Q7CivnhoogPCBhXC1iZWFyOwor5aaEIDwgYWJzdXJkOwor6IuPIDwgcmV2aXZlOwor562UIDwgYW5zd2VyOwor5aWuIDwgc3RyaXZlOwor54WpIDwgYm90aGVyOwor6KWkIDwgcmFnZ2VkOwor5L6bIDwgc3VwcGx5Owor5aSuIDwgY2VudGVyOwor5YiXIDwgYVwtbGluZTsKK+eEpiA8IGJ1cm5lZDsKK+m+mSA8IGRyYWdvbjsKK+WkjyA8IHN1bW1lcjsKK+aYpSA8IHNwcmluZzsKK+aAgSA8IG1hbm5lcjsKK+iiliA8IHNsZWV2ZTsKK+iiiyA8IHBvY2tldDsKK+WJryA8IGFzc2lzdDsKK+WknyA8IGVub3VnaDsKK+ihlyA8IHN0cmVldDsKK+a/gCA8IGFyb3VzZTsKK+mTtiA8IHNpbHZlcjsKK+mYtSA8IGNvbHVtbjsKK+eugCA8IHNpbXBsZTsKK+avkiA8IHBvaXNvbjsKK+a5liA8IGFcLWxha2U7CivonYkgPCBjaWNhZGE7Civov70gPCBwdXJzdWU7CivpvKwgPCB3ZWFzZWw7Civnu5wgPCBlbm1lc2g7CivmvKAgPCBkZXNlcnQ7CivonJggPCBzcGlkZXI7CivljaAgPCBkaXZpbmU7CivlnJMgPCBjaXJjbGU7CivlhbAgPCBvcmNoaWQ7CivpmLYgPCBzdGFpcnM7Civpu5kgPCBzaWxlbnQ7CivkvZsgPCBidWRkaGE7CivmlYggPCByZXN1bHQ7CivmlLsgPCBhdHRhY2s7CivnrZYgPCBzY2hlbWU7CivogqEgPCB0aGlnaHM7CivojqsgPCBkb1wtbm90Owor5ZiYIDwgZXhoYWxlOwor56qXIDwgd2luZG93Owor5re7IDwgYXBwZW5kOwor5re3IDwgdG9cLW1peDsKK+m3siA8IGNvbmRvcjsKK+WNmiA8IGdhbWJsZTsKK+iXpCA8IHJhdHRhbjsKK+aZuiA8IHdpc2RvbTsKK+aKlyA8IHJlc2lzdDsKK+WWsCA8IHRvXC1lYXQ7CivllqcgPCBsaXZlbHk7CivllokgPCB0aHJvYXQ7CivmtZogPCBkcmVkZ2U7CivpgIMgPCBlc2NhcGU7CivllLggPCByZWNpdGU7CivpnZYgPCBwYWNpZnk7Civnp5ggPCBzZWNyZXQ7CivmrLIgPCBkZXNpcmU7CivlvoEgPCBpbnZhZGU7Civnp4sgPCBhdXR1bW47CivlkLggPCBpbmhhbGU7Civps6kgPCBwaWdlb247CivmgrIgPCBzb3Jyb3c7CivmoaUgPCBicmlkZ2U7CivokrsgPCBydXNoZXM7CivokaEgPCBncmFwZXM7CivmsZogPCBmaWx0aHk7Civog7ggPCBicmVhc3Q7Civpgq4gPCBwb3N0YWw7CivlkJ0gPCBzdGluZ3k7CivmqKogPCBhY3Jvc3M7CivokI4gPCB3aXRoZXI7Civoj6sgPCBjZWxlcnk7Civmi6kgPCBzZWxlY3Q7CivmgaggPCBoYXRyZWQ7Civnq7kgPCBiYW1ib287Civoj5MgPCBmcnVpdHM7Civml5cgPCBiYW5uZXI7CivmrrsgPCBjYXNpbmc7CivnqLMgPCBzdGFibGU7Civov7kgPCB0cmFjZXM7CivpkoggPCBuZWVkbGU7Civmq7sgPCBjaGVycnk7CivlvIMgPCByZWplY3Q7CivntKsgPCBwdXJwbGU7Civmi5QgPCB1cHJvb3Q7Civoip0gPCBzZXNhbWU7CivotY8gPCByZXdhcmQ7Civmj5IgPCBpbnNlcnQ7CivpqaIgPCBkb25rZXk7CivlhqwgPCB3aW50ZXI7CivmiakgPCBleHBhbmQ7CivmqZggPCBvcmFuZ2U7CivpgLwgPCBjb21wZWw7CivpqLcgPCBoYXJhc3M7CivliLkgPCB0ZW1wbGU7CivplZwgPCBtaXJyb3I7CivmqJkgPCBhXC1tYXJrOwor6IiMIDwgdG9uZ3VlOwor5qe9IDwgdHJvdWdoOwor6Ie8IDwgbW9ydGFyOwor5LyPIDwgY3JvdWNoOwor5oSkIDwgcmVzZW50Owor5L+EIDwgc3VkZGVuOwor5YeNIDwgZnJlZXplOwor5qeMIDwgaGFtbWVyOwor6Zi7IDwgaW1wZWRlOwor6aWRIDwgc3RhcnZlOwor6IWRIDwgYm93ZWxzOwor5YWOIDwgcmFiYml0Owor6IWLIDwgYXJtcGl0Owor5YSYIDwgdXRtb3N0Owor5bSHIDwgZXN0ZWVtOwor6aSTIDwgaHVuZ3J5Owor5qO6IDwgY29mZmluOwor57KJIDwgcG93ZGVyOwor55u+IDwgc2hpZWxkOwor6aOiIDwgaHVuZ2VyOwor5o2VIDwgYXJyZXN0Owor5qKvIDwgbGFkZGVyOwor6IGYIDwgZW5nYWdlOwor5qKDIDwgYVwtY2x1YjsKK+mhqyA8IHNoaXZlcjsKK+mXtyA8IGdsb29teTsKK+aClCA8IHJlcGVudDsKK+mCgCA8IGludml0ZTsKK+mgrCA8IGNoZWVrczsKK+aCoyA8IHN1ZmZlcjsKK+S4kCA8IGJlZ2dhcjsKK+afsSA8IHBpbGxhcjsKK+afmiA8IHBvbWVsbzsKK+afhCA8IGhhbmRsZTsKK+S+riA8IGluc3VsdDsKK+mTnCA8IGNvcHBlcjsKK+aelSA8IHBpbGxvdzsKK+adtSA8IHBlc3RsZTsKK+aJryA8IHJpcFwtdXA7CivotosgPCBoYXN0ZW47CivkuLIgPCBzdHJpbmc7Civpm7IgPCBjbG91ZHM7Civpm4wgPCBmZW1hbGU7Civpm4cgPCBlbXBsb3k7CivpmoUgPCBjb3JuZXI7CivnuZUgPCByZXBhaXI7Civmo4kgPCBjb3R0b247CivnuJsgPCB0b1wtdGllOwor6LCFIDwgZXhjdXNlOwor5ZGIIDwgc3VibWl0Owor57eaIDwgdGhyZWFkOwor5pW3IDwgc3ByZWFkOwor6IS+IDwgc3BsZWVuOwor57SzIDwgZ2lyZGxlOwor6bmwIDwgZmFsY29uOwor5oSaIDwgc3R1cGlkOwor57OeIDwgbWFudXJlOwor57KnIDwgdG9pbGV0Owor5o6hIDwgZ2F0aGVyOwor5biVIDwgdHVyYmFuOwor5LirIDwgZm9ya2VkOwor5ouQIDwga2lkbmFwOwor5YCqIDwgZmVlYmxlOwor6YyQIDwgZ2ltbGV0Owor56+uIDwgYmFza2V0Owor5L6EIDwgbmVwaGV3Owor5Y+JIDwgY3JvdGNoOwor5oCWIDwgdGVycm9yOwor6aKBIDwgY29uZmVyOwor5ZKVIDwgbXVtYmxlOwor6Ii1IDwgcnVkZGVyOwor5oOpIDwgcHVuaXNoOwor5ZKWIDwgY29mZmVlOwor5rezIDwgaG9uZXN0Owor54y0IDwgbW9ua2V5Owor6ZyJIDwgbWlsZGV3Owor5oK8IDwgZ3JpZXZlOwor6YCNIDwgcmFtYmxlOwor6ICNIDwgZnJvbGljOwor5o2GIDwgdGllXC11cDsKK+mBiiA8IHdhbmRlcjsKK+W7vyA8IHR3ZW50eTsKK+iFuyA8IGdyZWFzeTsKK+e8hiA8IGhhd3NlcjsKK+mekSA8IHRhdGFyczsKK+aFtyA8IGFyZGVudDsKK+evtyA8IGF3bmluZzsKK+iNhiA8IHRob3JuczsKK+iGjyA8IGdyZWFzZTsKK+mejSA8IHNhZGRsZTsKK+edrCA8IG5vdGljZTsKK+e7pSA8IHNvb3RoZTsKK+awpyA8IG94eWdlbjsKK+WptyA8IHByZXR0eTsKK+WHvyA8IGNoaXNlbDsKK+W3qyA8IHdpemFyZDsKK+iZviA8IHNocmltcDsKK+S8tiA8IGxvbmVseTsKK+akkiA8IHBlcHBlcjsKK+aPliA8IHNhbHV0ZTsKK+WGiSA8IHRlbmRlcjsKK+i4sSA8IHN0cm9sbDsKK+eMrCA8IHZ1bGdhcjsKK+ikgiA8IGphY2tldDsKK+ezmSA8IGNvYXJzZTsKK+mXuCA8IHNsdWljZTsKK+mikyA8IHJ1aW5lZDsKK+WxiSA8IGRyYXdlcjsKK+WIgSA8IHRyaWNreTsKK+a0vCA8IGhvbGxvdzsKK+iSnCA8IGdhcmxpYzsKK+a4oyA8IHJlZnVzZTsKK+aFkSA8IGFmcmFpZDsKK+W/jyA8IHJlZ3JldDsKK+eiviA8IHJvbGxlcjsKK+eWmSA8IHBpbXBsZTsKK+a8iSA8IGZpbHRlcjsKK+mapyA8IHR1bm5lbDsKK+mFpSA8IGJ1dHRlcjsKK+mSriA8IGJ1dHRvbjsKK+a8sSA8IGdhcmdsZTsKK+eblCA8IGhlbG1ldDsKK+ejiyA8IHBvbGlzaDsKK+iViSA8IGJhbmFuYTsKK+eXsCA8IHBobGVnbTsKK+e+gSA8IGhhbHRlcjsKK+ivjyA8IGRlY3JlZTsKK+mdtiA8IHRhcmdldDsKK+mFnSA8IGxpcXVvcjsKK+S6tSA8IHNsaWdodDsKK+iygiA8IG1hcnRlbjsKK+iBhiA8IGxpc3RlbjsKK+mfrCA8IHNoZWF0aDsKK+m5iiA8IG1hZ3BpZTsKK+WNhSA8IHRoaXJ0eTsKK+eisyA8IGNhcmJvbjsKK+ehqyA8IHN1bGZ1cjsKK+mVsCA8IHNpY2tsZTsKK+a2jiA8IHNhbGl2YTsKK+WjlSA8IHRyZW5jaDsKK+mUmiA8IGFuY2hvcjsKK+mSoCA8IHNvZGl1bTsKK+edvyA8IHNocmV3ZDsKK+iOuiA8IG9yaW9sZTsKK+iDryA8IHBlbHZpczsKK+i3uyA8IGFzY2VuZDsKK+mzliA8IHR1cnRsZTsKK+iFvCA8IG1vZGVzdDsKK+WokyA8IGNvbXBseTsKK+WIjiA8IGJlaGVhZDsKK+i5mSA8IHVyZ2VudDsKK+iDmiA8IGVtYnJ5bzsKK+iNlCA8IGxpY2hlZTsKK+mUtSA8IHRpbmtsZTsKK+iMpyA8IGNvY29vbjsKK+ifkiA8IHB5dGhvbjsKK+m5gyA8IGN1Y2tvbzsKK+eNlyA8IHVucnVseTsKK+iSryA8IGFcLXJ1c2g7Civmso8gPCBpbmZ1c2U7Civlmo8gPCBzbmVlemU7CivnoL4gPCBncmF2ZWw7CivkvZ8gPCBhXC1uYW1lOwor6IycIDwgbWFkZGVyOwor5omIIDwgZXNjb3J0Owor5ZKbIDwgZW5qb2luOwor5rOXIDwgbXVjb3VzOwor6ZS5IDwgc2hvdmVsOwor6bmXIDwgb3NwcmV5Owor5YShIDwgcHVwcGV0Owor6J6CIDwgbWFudGlzOwor6IuTIDwgZnVuZ3VzOwor5Y+1IDwgY2Fubm90Owor5a+uIDwgc2hhbnR5Owor54q3IDwgZmllcmNlOwor5rKxIDwgcml2ZXJzOwor55ahIDwgdWxjZXJzOwor5b6VIDwgaW5kdWNlOwor6aqbIDwgZ2FsbG9wOwor5b6JIDwgd29uZGVyOwor6LCqIDwgY2hhcmdlOwor5L+aIDwgcnVzdGljOwor5L+qIDwgc3BvdXNlOwor6Ie+IDwgbW9tZW50Owor5ay0IDwgdG9cLXdpbjsKK+eDqSA8IHJhZ291dDsKK+mTpCA8IGluZ290czsKK+iMgSA8IHNwcm91dDsKK+iIoiA8IHNhbXBhbjsKK+einCA8IGdyaXR0eTsKK+WDrSA8IGFzc3VtZTsKK+eimCA8IGlvZGluZTsKK+eDryA8IGFsa2VuZTsKK+WbvyA8IHBlblwtdXA7Civlm6sgPCBlbnRpcmU7CivplY0gPCBuaWNrZWw7CivmqZAgPCBhXC1zYWNrOwor5p23IDwgbG9xdWF0Owor6IGSIDwgY2xhbW9yOwor576vIDwgd2V0aGVyOwor56ejIDwgZm9kZGVyOwor5qi9IDwgZ29ibGV0Owor54SWIDwgc2ltbWVyOwor6L2zIDwgcHVsbGV5Owor6ZWtIDwgcmFkaXVtOwor5q6EIDwgdG9cLWVuZDsKK+ivsCA8IGluZm9ybTsKK+iOhSA8IGF0dGVuZDsKK+iuqyA8IGZpbmlzaDsKK+a3rCA8IHRlbXBlcjsKK+WYrCA8IHRvXC1sYXA7Civng7cgPCBhbGthbmU7Civom44gPCBveXN0ZXI7CivnhLEgPCBmbGFtZXM7CivonKUgPCBsaXphcmQ7CivokbogPCB0aGF0Y2g7Civmgb0gPCBkZXZpc2U7Civok78gPCBjbG92ZXI7CivnmIwgPCBzZXZlcmU7CivllrEgPCBncmFtbWU7CivpkrQgPCBjb2JhbHQ7CivosokgPCBiYWRnZXI7CivonIkgPCBtYXlmbHk7CivpspEgPCBzYWxtb247CivlqIggPCBsb3ZlbHk7CivojaggPCBuZXR0bGU7Civnq6YgPCByZXZlcmU7Civni5IgPCBiYWJvb247CivomLwgPCBtaWxsZXQ7CivojLQgPCBmZW5uZWw7CivpsqYgPCBtaW5ub3c7CivmuIwgPCBzdHJhaW47CivpmJogPCBnbGFuY2U7Civnj5AgPCBlbmFtZWw7CivpnZsgPCBpbmRpZ287Civpu6cgPCBhXC1kYXJrOwor6KCTIDwgbWlkZ2VzOwor5qm8IDwgY2l0cnVzOwor6a2NIDwgZGVtb25zOwor57+KIDwgZmx5aW5nOwor6ZWPIDwgZGlzdGlsOwor6IO8IDwgY2FsbHVzOwor54qPIDwgeWFrXC1veDsKK+eimiA8IHN1YnVyYjsKK+iFrSA8IHBhbGF0ZTsKK+mznyA8IGJhcmJlbDsKK+augiA8IHRvXC1kaWU7CivnrZogPCB3aWNrZXI7Civnlp0gPCBoZXJuaWE7CivpqoAgPCBhblwtb2xkOwor6JKXIDwgXChoZXJiXCk7Civoj58gPCBkb2RkZXI7CivpmYkgPCBkZWZpbGU7CivnlqAgPCBhXC1zb3JlOwor5pewIDwgc3Vuc2V0Owor6IGNIDwgZWFyd2F4Owor6ZSHIDwgb3NtaXVtOwor6ZKhIDwgYmFyaXVtOwor6KW7IDwgYVwtbG9vcDsKK+mTkiA8IGVyYml1bTsKK+mTiCA8IGNlcml1bTsKK+aktCA8IHBvcGxhcjsKK+iLoSA8IGJhcmxleTsKK+iIhCA8IGFcLXNob2U7CivpuKsgPCB0aHJ1c2g7CivplJQgPCBjdXJpdW07Civpk58gPCBpbmRpdW07CivnnI0gPCBzdW5rZW47CivmobcgPCByYWZ0ZXI7Civoi4QgPCBiZW56eWw7CivpmZQgPCBhXC1zdGVwOwor6aq2IDwgY29jY3l4Owor6bK7IDwgbXVsbGV0Owor6J6oIDwgaW5zZWN0Owor6Jm8IDwgYVwtZmxlYTsKK+eYlSA8IGFzdGhtYTsKK+mVmCA8IHRyb3dlbDsKK+iDgiA8IGFyc2luZTsKK+iPlCA8IHR1cm5pcDsKK+W+nuatpCA8IHRoZW5jZTsKK+mzpee+vSA8IHBpbmlvbjsKK+e3qOiAhSA8IGVkaXRvcjsKK+iqpOeUqCA8IG1pc3VzZTsKK+W8t+ebnCA8IGJhbmRpdDsKK+ipqeevhyA8IHBzYWxtczsKK+aWueazlSA8IG1ldGhvZDsKK+aUv+etliA8IHBvbGljeTsKK+WTuuS5s+WLleeJqSA8IG1hbW1hbDsKK+S8iuWwvOS8iuW+tyA8IGFlbmVpZDsKK+itpuWvnyA8IHBvbGljZTsKK+Wjq+W4q+iomCA8IGp1ZGdlczsKK+eZvOmbu+apnyA8IGR5bmFtbzsKK+e9quS6uiA8IHNpbm5lcjsKK+Wkp+eCriA8IGNhbm5vbjsKK+Wkp+eBvSA8IHBsYWd1ZTsKK+WhnueIvue2reS6niA8IHNlcmJpYTsKK+WQieS7liA8IGd1aXRhcjsKK+avgOa7hSA8IHBlcmlzaDsKK+ephuaWr+aelyA8IG11c2xpbTsKK+mWi+i7iuS6uiA8IGRyaXZlcjsKK+W4tumHpiA8IGJ1Y2tsZTsKK+WLleeJqSA8IGFuaW1hbDsKK+S9v++5jeixkOWvjCA8IGVucmljaDsKK+e3iue4riA8IHJlZHVjZTsKK+eHkueEpiA8IHNjb3JjaDsKK+mgmOS6iyA8IGNvbnN1bDsKK+WYtuWVnuiBsiA8IGhvYXJzZTsKK+Wkp+a1qiA8IGJpbGxvdzsKK+edoeiRlyA8IGFzbGVlcDsKK+awo+aBryA8IGJyZWF0aDsKK+aTsee9riA8IHNoZWx2ZTsKK+aVtOa9lCA8IG5lYXRseTsKK+W8iueXhSA8IG1hbGFkeTsKK+mBuOelqCA8IGFcLXZvdGU7Civlib3nq4ogPCBwaXJhdGU7Civnt6jnorwgPCBjb2Rpbmc7Civmi5TlsJblhZIgPCB0aXB0b3A7Civlt6jpoK0gPCB0eWNvb247CivpoILkuosgPCB1c2VmdWw7CivmkpXoo4IgPCBtYW5nbGU7CivpmYTokZcgPCBhZGhlcmU7CivkvIrlsLzkup7mlq8gPCBhZW5lYXM7CivmraPnlbYgPCB0aW1lbHk7CivmgJLlkLwgPCBiZWxsb3c7CivlpYfmma8gPCBtYXJ2ZWw7CivniYjlvI8gPCBmb3JtYXQ7CivpqYXpgJDlh7rlooMgPCBkZXBvcnQ7CivpgaDnqIsgPCByZW1vdGU7CivljYrlvpEgPCByYWRpdXM7CivpmY3oh6ggPCBiZWZhbGw7CivnrqHnkIbkurogPCBrZWVwZXI7CivphpzljJYgPCBkZWZhbWU7Civni4LkurogPCBtYWRtYW47CivlpKfmobYgPCBiYXJyZWw7CivmnInkurrmg4UgPCBodW1hbmU7Civopb/ntIXmn78gPCB0b21hdG87CivnnIvoposgPCB0b1wtc2VlOwor6Kej6ISrIDwgcmVsaWVmOwor56C05pWXIDwgYmVhdGVuOwor5peX5bmfIDwgZW5zaWduOwor5rC05aO6IDwga2V0dGxlOwor5q6W5rCRIDwgY29sb255Owor5peL5b6LIDwgbWVsb2R5Owor5YuV5qmfIDwgbW90aXZlOwor5Y6t5YCmIDwgZHJlYXJ5Owor5YWn6Zm4IDwgaW5sYW5kOwor5bel6YyiIDwgc2FsYXJ5Owor5YWs6ZaLIDwgcHVibGljOwor5Y6f5YWIIDwgZm9ybWVyOwor5YWr6ZaLIDwgb2N0YXZvOwor54aK54aKIDwgcmFnaW5nOwor55+t5q2MIDwgYmFsbGFkOwor5Y2a5aOrIDwgZG9jdG9yOwor5b+g5ZGKIDwgYWR2aWNlOwor56Cy5omLIDwgZ3VubmVyOwor5aSa5pifIDwgc3RhcnJ5Owor5b6L5birIDwgbGF3eWVyOwor5YWr5YiG6Z+z56ymIDwgcXVhdmVyOwor5b6u5aaZIDwgc3VidGxlOwor5aW95aW9IDwgbmljZWx5Owor57i95pivIDwgYWx3YXlzOwor6ZaL6Y6WIDwgdW5sb2NrOwor5q2l5risIDwgcGFjaW5nOwor54ef5pWRIDwgcmVzY3VlOwor5pWs5pyNIDwgYWRtaXJlOwor5aSp56u654mh5Li5IDwgZGFobGlhOwor5b6X5a6cIDwgcHJvcGVyOwor5Yid57SaIDwganVuaW9yOwor6LyV6ayGIDwgZ2VudGxlOwor54iQ5bqKIDwgaGVhcnRoOwor6KyK5aCxIDwgdG9cLWxpZTsKK+eiuuS/nSA8IGVuc3VyZTsKK+mbouWlh+aciei2oyA8IHF1YWludDsKK+mBi+eUqCA8IHRvXC11c2U7CivntbLntaggPCB2ZWx2ZXQ7CivniYjlnJYgPCBkb21haW47CivmlL/mrIogPCByZWdpbWU7CivlvojlsJEgPCBzZWxkb207CivniLXlo6sgPCBrbmlnaHQ7Civopa/oo6EgPCBsaW5pbmc7CivorJnlkowgPCBtZWVrbHk7CivntrLnkIMgPCB0ZW5uaXM7CivojZLolaogPCBiYXJyZW47Civpm7vlvbHpmaIgPCBjaW5lbWE7CivlpKnmgKcgPCBpbmJvcm47CivlsI/lppbnsr4gPCBnb2JsaW47Civph5HntbLpm4AgPCBjYW5hcnk7CivmrZDmtLIgPCBldXJvcGU7Civli77lvJUgPCBzZWR1Y2U7CivnhrHmnJsgPCBhc3BpcmU7Civnsr7pgbggPCBjaG9zZW47Civoqpjmi5AgPCBhYmR1Y3Q7CivoqqDmh4cgPCBoZWFydHk7Civli5XlkI3oqZ4gPCBnZXJ1bmQ7CivpgJrnn6UgPCBub3RpZnk7CivliLrnl5sgPCB0aW5nbGU7CivlvrXlj6wgPCBlbmxpc3Q7CivmraHmqIIgPCBnYWlldHk7Civnq7bos73ogIUgPCBwbGF5ZXI7CivlhYjpi5IgPCBoZXJhbGQ7Civnt6jlubTlj7IgPCBhbm5hbHM7CivmlbXmhI8gPCBlbm1pdHk7Civlt7Topb8gPCBicmF6aWw7CivnvLrmsKfnl4cgPCBhbm94aWE7Civnianku7YgPCBvYmplY3Q7CivljbjkuIsgPCB1bmxvYWQ7CivljIXlrrkgPCBwYXJkb247Civoqpjmg5EgPCBlbnRpY2U7CivniafkurogPCBwYXN0b3I7CivlpKflnLDmtJ4gPCBjYXZlcm47CivlpJblvaIgPCBmaWd1cmU7CivpmqjmqZ8gPCByYW5kb207CivlhbXoroogPCBtdXRpbnk7CivnmbzlmI7lmI7ogbIgPCByYXR0bGU7CivmlY/mjbcgPCBuaW1ibGU7CivniZvku5QgPCBjb3dib3k7Civmj5DphpIgPCByZW1pbmQ7Civop7jniq8gPCBvZmZlbmQ7Civlparlj5YgPCBzbmF0Y2g7CivlpKvlrZAgPCBwZWRhbnQ7CivlpKrlrZAgPCBwcmluY2U7CivnnJ/nqbogPCB2YWN1XDptOwor5q665a6zIDwgbXVyZGVyOwor5q6Y5b+NIDwgYmxvb2R5Owor6ZaS6KmxIDwgZ29zc2lwOwor6L6t6IG3IDwgcmVzaWduOwor57ea5qKdIDwgc3RyZWFrOwor5ruR57+U5qmfIDwgZ2xpZGVyOwor5b6S5YueIDwgZnV0aWxlOwor5b6X5YiwIDwgdG9cLWdldDsKK+W4jOiHmCA8IGdyZWVjZTsKK+a/uumWiyA8IHNwbGFzaDsKK+mBiuattyA8IHRyYXZlbDsKK+W+qeS7hyA8IGF2ZW5nZTsKK+aumOmkmOeJqSA8IGxpdHRlcjsKK+Wjk+aJgSA8IHNxdWFzaDsKK+ipqeaEjyA8IHBvZXRpYzsKK+aUneaUvyA8IHJlZ2VudDsKK+aomeiqniA8IHNsb2dhbjsKK+S4jeWPr+WRiuS6uiA8IGhpZGRlbjsKK+eZvOiqkyA8IHRvXC12b3c7CivmqaHohqAgPCBydWJiZXI7CivlipvotrPku6XlgZogPCBhZmZvcmQ7CivlnKjvuY3mnJ/plpMgPCBkdXJpbmc7CivlnLDpkLUgPCBzdWJ3YXk7CivljYHkuIAgPCBlbGV2ZW47Civlvp7kuosgPCBnb1wtZm9yOwor54ax5bi2IDwgdHJvcGljOwor5pyJ6LKs5Lu7IDwgbGlhYmxlOwor6Zuc5belIDwgcG9ydGVyOwor5Ye655SiIDwgb3V0cHV0Owor5aWi5L6IIDwgbHV4dXJ5Owor5o6b6YmkIDwgY291cGxlOwor57SU57K5IDwgcHVyZWx5Owor56iu5peP5Li7576pIDwgcmFjaXNtOwor5a2p5a2Q5rCjIDwgYm95aXNoOwor5bCP54md54mbIDwgaGVpZmVyOwor6LeR5q2l6ICFIDwgcnVubmVyOwor6Zyy5Ye6IDwgZXhwb3NlOwor5pSA5piHIDwgcmlzaW5nOwor6Kej5ri0IDwgcXVlbmNoOwor5q2M5omLIDwgc2luZ2VyOwor5ZCQ57as6ZueIDwgdHVya2V5Owor5beh6IiqIDwgY3J1aXNlOwor5biD57eaIDwgd2lyaW5nOwor5q2j5byPIDwgZm9ybWFsOwor5Yaw566xIDwgaWNlYm94Owor54Sh5rOVIDwgdW5hYmxlOwor6YCV5rWBIDwgcnVub2ZmOwor5aSn5ZCDIDwgZ29iYmxlOwor5q+r5LiNIDwgaGFyZGx5Owor6YGT5pWZIDwgdGFvaXNtOwor6b21IDwgdW5ldmVuOwor6Ki65omAIDwgY2xpbmljOwor6YG65oGoIDwgZ3J1ZGdlOwor6byrIDwgbWFybW90Owor6byUIDwgYVwtZHJ1bTsKK+mshumkhSA8IG11ZmZpbjsKK+WKoOW0mSA8IGdhbGxvbjsKK+m5qCA8IGFudGh1czsKK+i3qOaOpeWZqCA8IGp1bXBlcjsKK+aVmeWggiA8IGNodXJjaDsKK+m3hyA8IGNoaWNrczsKK+m2vSA8IGFcLWhhd2s7CivptrggPCBzaXNraW47CivoqZ7lsL4gPCBzdWZmaXg7CivptYAgPCBob29wb2U7CivpgLHmnJ8gPCBwZXJpb2Q7CivptKIgPCBcKGR1Y2tcKTsKK+iyoOaTlOiAhSA8IGJlYXJlcjsKK+mbtuWUriA8IHJldGFpbDsKK+m0gyA8IHNocmlrZTsKK+WcqOi7iiA8IGFib2FyZDsKK+W+kuatpeaXheihjCA8IGhpa2luZzsKK+mxjiA8IFwoZmlzaFwpOwor6bGGIDwgcG91bHBlOwor6Iy256KXIDwgdGVhY3VwOwor57ee5bi2IDwgcmliYm9uOwor5YiG5rS+IDwgYXNzaWduOwor5ZCI5ZSx5ZyYIDwgY2hvcnVzOwor6Zi75qmIIDwgdGh3YXJ0Owor5pCW57GDIDwgY3JhZGxlOwor6aCY5bCO6ICFIDwgbGVhZGVyOwor6JGX5ZCNIDwgZmFtb3VzOwor5by35YuiIDwgbWlnaHR5Owor57Su54efIDwgZW5jYW1wOwor6amrIDwgaG9yc2VzOwor5Ye55rSeIDwgY2F2aXR5Owor5byx5YyWIDwgd2Vha2VuOwor6Zmw5oi2IDwgdmFnaW5hOwor5pOK5pWXIDwgZGVmZWF0Owor6YCy5o6lIDwgYWNjZXNzOwor6aa/IDwgYW5cLWFzczsKK+e1leawoyA8IGV4cGlyZTsKK+absuajjeeQgyA8IGhvY2tleTsKK+iovOWvpiA8IHZlcmlmeTsKK+mkpCA8IGluY2l0ZTsKK+mAo+aTiiA8IGJhdHRlcjsKK+aVmeWNgCA8IHBhcmlzaDsKK+eBq+eurSA8IHJvY2tldDsKK+maseWjqyA8IGhlcm1pdDsKK+i3r+eUseWZqCA8IHJvdXRlcjsKK+efreWKjSA8IGRhZ2dlcjsKK+mhkiA8IHNvbGVtbjsKK+W8t+WBpSA8IHN0dXJkeTsKK+S4gOevgFwo6KmpXCkgPCBzdGFuemE7CivmrablmaggPCB3ZWFwb247CivpnpogPCBicmlkbGU7CivnhaTlsZEgPCBjaW5kZXI7CivlubPmnb8gPCB0YWJsZXQ7Civlh7nmp70gPCBzb2NrZXQ7CivliK7mjokgPCBzY3JhcGU7Civpq5jpm4UgPCBkYWludHk7Civpm4IgPCBcKGJpcmRcKTsKK+eItuavjeimqiA8IHBhcmVudDsKK+atoeWWnCA8IGpveWZ1bDsKK+WIhuaenSA8IGJyYW5jaDsKK+atpeWTqCA8IHNlbnRyeTsKK+WCs+mBlCA8IGNvbnZleTsKK+WMluWmneWTgSA8IG1ha2V1cDsKK+aApeS/g+iBsiA8IHBhdHRlcjsKK+mXiSA8IGN1cnZlZDsKK+ihoemHjyA8IHdlaWdodDsKK+S9v+ehrOWMliA8IGhhcmRlbjsKK+mqqOmrkyA8IG1hcnJvdzsKK+mTryA8IGNlc2l1bTsKK+aQlOeZoiA8IHRpY2tsZTsKK+mbleWDjyA8IHN0YXR1ZTsKK+mRniA8IHNvbGRlcjsKK+ato+WNiCA8IG1pZGRheTsKK+mRgCA8IGlvbml1bTsKK+mQnSA8IGFcLXBpY2s7CivpjpIgPCB0b1wtaG9lOwor5Lqk5piT6ICFIDwgZGVhbGVyOwor6Y6FIDwgdG9cLXNhdzsKK+aSq+aKsSA8IGNhcmVzczsKK+mMqSA8IHZlc3NlbDsKK+aVkeS4uyA8IHNhdmlvcjsKK+eymOeymCA8IHN0aWNreTsKK+aXpeWFp+eTpiA8IGdlbmV2YTsKK+mLmSA8IG1pc2ZpdDsKK+W3tOeIviA8IGJhbHRpYzsKK+eahOeiuiA8IHJlYWxseTsKK+mLhSA8IHppbmN1bTsKK+mBjuWksSA8IGRlZmVjdDsKK+mKgOihjOWutiA8IGJhbmtlcjsKK+akjeeJqeWtuCA8IGJvdGFueTsKK+e0gOW/teeNjiA8IHRyb3BoeTsKK+mFtCA8IGxlYXZlbjsKK+mVt+efrSA8IGxlbmd0aDsKK+W5q+aJiyA8IGhlbHBlcjsKK+WBvemAoOeahCA8IGZvcmdlZDsKK+aXheihjOijneWCmSA8IG91dGZpdDsKK+mZhOW6uCA8IHZhc3NhbDsKK+mBqeWQiCA8IHRvXC1maXQ7CivnrKzkuozmrKEgPCBzZWNvbmQ7Civpq5jpgZQgPCBhdHRhaW47CivptZ3ljbXnn7MgPCBwZWJibGU7CivmnInmsKPmtL4gPCBsb3JkbHk7CivlgrXli5nkurogPCBkZWJ0b3I7CivoirHnsokgPCBwb2xsZW47CivpgIwgPCBwbGVhc2U7Civov40gPCBmYWx0ZXI7CivovZwgPCBoZWFyc2U7Civnmb3nl7QgPCBpZGlvY3k7Civls73osLcgPCBjYW55b247CivouqcgPCBzYW5kYWw7CivooajopqogPCBjb3VzaW47Civop4Dlv7UgPCBub3Rpb247CivouKEgPCBjdXJsZWQ7Civoo4HnuKsgPCB0YWlsb3I7CivmjqHntI0gPCBhY2NlcHQ7Civoo5znqK4gPCByZXNlZWQ7CivlsI/nop/lrZAgPCBzYXVjZXI7CivosqogPCBncmVlZHk7CivlhrDmn7EgPCBpY2ljbGU7CivoiJ7ouYjlrrYgPCBkYW5jZXI7CivpmL/lp6ggPCBhdW50aWU7Civnt5rkuIogPCBvbmxpbmU7CivorYYgPCBzY3JlYW07Civoq7UgPCBtdXR0ZXI7CivpqZrpp60gPCBmcmlnaHQ7CivntKDmj48gPCBza2V0Y2g7CivplpLmt7cgPCBsb2l0ZXI7CivoqbsgPCBvcmRlcnM7CivoqZcgPCB0b1wtc3B5Owor5pGf5oqxIDwgdG9cLWh1ZzsKK+iHqui6qyA8IGl0c2VsZjsKK+mAsuWPoyA8IGltcG9ydDsKK+aOoeekpiA8IG1pbmluZzsKK+ilriA8IGNvbGxhcjsKK+aTvuS6giA8IGluZmVzdDsKK+e1kOWwviA8IGVuZGluZzsKK+mWo+aokyA8IGdhcnJldDsKK+iKseeUnyA8IHBlYW51dDsKK+iimiA8IGdyZWF2ZTsKK+mBjuS7vSA8IHVuZHVseTsKK+mpn+mbqCA8IHNob3dlcjsKK+W5g+W5lSA8IHNjcmVlbjsKK+S9v+a/lemAjyA8IGRyZW5jaDsKK+igqSA8IGFcLXRvYWQ7CivooIEgPCBsYXJ2YWU7CivlqIHlo6vlv4zphZIgPCB3aGlza3k7CivlhYnmvqQgPCBsdXN0ZXI7CivpgJ3ljrsgPCBlbGFwc2U7Civom6MgPCBiZWV0bGU7Civom4wgPCBjcmlja2U7CivlhYnmu5EgPCBnbG9zc3k7CivpgJXlkJEgPCByYWRpYWw7CivomZYgPCB0b1wtY3J5Owor5om56KmV5a62IDwgY3JpdGljOwor55u45beuIDwgZGlmZmVyOwor6JaRIDwgZ2luZ2VyOwor6Zec5b+DIDwgY2FyaW5nOwor5Zyo5rex6JmVIDwgZGVlcGx5Owor6JSUIDwgcmFkaXNoOwor6JOaIDwgb3hhbGljOwor6JKOIDwgcGluYW5lOwor5oq16YGUIDwgYXJyaXZlOwor5Yud5Yip6ICFIDwgdmljdG9yOwor5Zyw55SiIDwgZXN0YXRlOwor6YCj5a2X56ym6JmfIDwgaHlwaGVuOwor6I+GIDwganVuZ2xlOwor5bui6Zmk6LuN5YKZIDwgZGlzYXJtOwor5bGA6Z2iIDwgYXNwZWN0Owor6IyiIDwgc2VkZ2VzOwor6Lm66Lm65p2/IDwgc2Vlc2F3Owor5r6x57KJIDwgc3RhcmNoOwor5qiZ5qacIDwgZmxhdW50Owor6ImiIDwgYVwtbWFzdDsKK+a7kembqiA8IHRvXC1za2k7Civlm57ntZUgPCByZWJ1ZmY7CivoparluLYgPCBnYXJ0ZXI7CivntoHkvY8gPCBmYXN0ZW47CivnnLzlhYkgPCB2aXNpb247Civno6jlnYrkuLsgPCBtaWxsZXI7CivmqKPmnKwgPCBzYW1wbGU7Civng4jlo6sgPCBtYXJ0eXI7Civnsr7mmI4gPCBhc3R1dGU7CivohbPpkJAgPCBmZXR0ZXI7Civog7kgPCBjb29rZWQ7Civnmb3mnpwgPCBnaW5rZ287CivluIbluIMgPCBjYW52YXM7Civot7PpgLIgPCBwbHVuZ2U7CivmnInpl5zpgKMgPCByZWxhdGU7CivlpJrmqLnmnKggPCB3b29kZWQ7CivpmYTkuIogPCBhdHRhY2g7CivmiqzotbcgPCB1cGxpZnQ7CivpoZvlgJLpgY7kvoYgPCBpbnZlcnQ7CivogKQgPCBwbG91Z2g7CivlkLHlkLHogbIgPCBzcXVlYWs7Civlub7kuY4gPCBhbG1vc3Q7CivngInmuZYgPCBsYWdvb247CivnvasgPCBoaW5kZXI7CivnvaUgPCBpbXBldGU7CivnsKHnm7QgPCBzaW1wbHk7CivmnKrlrozmiJAgPCB1bmRvbmU7CivnuaggPCBhXC1rbm90Owor5YWJ5pivIDwgc29sZWx5Owor57iGIDwgYVwtcm9wZTsKK+e1puS6iCA8IGFjY29yZDsKK+S4g+aciOS4gOiZnyA8IGp1bHlcLTE7CivopIfmlbggPCBwbHVyYWw7Civnmb3mkK0gPCBub1wtdXNlOwor6a2U6LO95YWLIDwgbW9zYWljOwor6Iiq56iLIDwgZmxpZ2h0Owor57SpIDwgdG9cLXNldzsKK+e0nyA8IGFcLXNhc2g7CivntIMgPCBhXC1jb3JkOwor5o+05omLIDwgc3VjY29yOwor5bid5ZyLIDwgZW1waXJlOwor6Iy25aO6IDwgdGVhcG90Owor5Lyv5Luy5Y+U5a2jIDwgZWxkZXN0Owor57GyIDwgYXBwZWFsOwor55uf5ZyLIDwgYWxsaWVzOwor57CJIDwgZGVwdXR5Owor6KOB5rG6IDwgcnVsaW5nOwor56+lIDwgYnVsZ2xlOwor5a+m6auUIDwgZW50aXR5Owor566ZIDwgcXVpdmVyOwor54OP5bmy6YGUIDwgdWdhbmRhOwor57Si5Y+WIDwgdG9cLWFzazsKK+W4reWNtyA8IGVuZ3VsZjsKK+S4jeeiuuWvpiA8IHVudHJ1ZTsKK+WcsOavryA8IGNhcnBldDsKK+eriSA8IGFcLWhvbGU7CivlhavluqYgPCBvY3RhdmU7CivnlKjoqp4gPCBzeW50YXg7CivpvLvlj6Ppg6jliIYgPCBtdXp6bGU7CivlsJbogbLllbzlk60gPCBzcXVlYWw7Civnr4DntIQgPCBmcnVnYWw7CivnpY8gPCBzaHJpbmU7CivovqblhazlrqQgPCBvZmZpY2U7Civmib/oq74gPCBlZmZvcnQ7CivooZvnlJ8gPCBoZWFsdGg7Civoo5zmlZEgPCByZW1lZHk7Civkv67oqIIgPCByZXZpc2U7CivnvoXppqzmm7ggPCByb21hbnM7Civov4Tku4ogPCBzb1wtZmFyOwor5a+m6ZqbIDwgYWN0dWFsOwor552qIDwgc3B5XC1vbjsKK+ecviA8IG1hc3NlczsKK+WYl+ippiA8IHRvXC10cnk7CivlnoLluZUgPCBjYW5vcHk7CivooJ/nrYYgPCBjcmF5b247CivmnI3li5nlk6EgPCB3YWl0ZXI7Civlkb3pgYvoqLvlrpogPCBvcmRhaW47CivkurrpoK3njYXouqsgPCBzcGhpbng7CivnmoAgPCBrZXJuZWw7CivkuI3lubjkuYvkuosgPCBtaXNoYXA7CivonJjom5vntrIgPCBjb2J3ZWI7CivnloMgPCBoYW1sZXQ7Civln7fkuosgPCBkZWFjb247Civnlb0gPCBncm91bmQ7CivmiJDplbcgPCBtYXR1cmU7Civmup3pgZMgPCBncm9vdmU7CivpmL/nsbPlt7QgPCBhbW9lYmE7CivovrLkurogPCBmYXJtZXI7Civmu77okL0gPCB0dW1ibGU7Civono3op6MgPCBtb2x0ZW47CivlnJbmoYggPCBkZXNpZ247CivohZToqr8gPCBhY2NlbnQ7Civkv67oo5zljKAgPCB0aW5rZXI7CivotbDpjK8gPCBhc3RyYXk7Civnj5QgPCBcKGphZGVcKTsKK+eOkyA8IHBlYXJseTsKK+evgOecgSA8IHNhdmluZzsKK+eMuiA8IGphY2thbDsKK+S/oeiZnyA8IHNpZ25hbDsKK+Wwj+iykyA8IGtpdHRlbjsKK+ihjOeCuiA8IGFjdGlvbjsKK+Wkp+eQhuefsyA8IG1hcmJsZTsKK+WcqO+5jeS5i+aXgSA8IGJlc2lkZTsKK+aMgeacieS6uiA8IGhvbGRlcjsKK+eFgyA8IHJlbW92ZTsKK+aSkuWTiOaLiSA8IHNhaGFyYTsKK+Wkp+mQruWIgCA8IHNjeXRoZTsKK+Wfi+S8jyA8IGFtYnVzaDsKK+e0hOe/sOS6jOabuCA8IDJcLWpvaG47CivlsI3oqbEgPCBkaWFsb2c7CivnrKbomZ8gPCBzeW1ib2w7CivngIwgPCBwbGVudHk7Civog7jph50gPCBicm9vY2g7Civmv7UgPCBhXC1iYW5rOwor5pCt5LmYIDwgZW1iYXJrOwor5r68IDwgYmxlYWNoOwor5aib5qiC5aC0IDwgcmVzb3J0Owor5YWr5Y2BIDwgZWlnaHR5Owor57C45o+aIDwgd2lubm93Owor5qOS57OWIDwgc3Vja2VyOwor566X55ukIDwgYWJhY3VzOwor6YaD6buD55OcIDwgcGlja2xlOwor5rioIDwgYVwtY292ZTsKK+a3nyA8IHR1cmJpZDsKK+eyvuWKmyA8IGVuZXJneTsKK+aUtuWJsuiAhSA8IHJlYXBlcjsKK+WCs+afkyA8IGluZmVjdDsKK+W3peS6uiA8IHdvcmtlcjsKK+a0nyA8IHNuaXZlbDsKK+azrSA8IGFcLXJhZnQ7CivmsKsgPCBhbW9uaWE7CivotbfoqLQgPCB0b1wtc3VlOwor6J2X6J+yIDwgbG9jdXN0Owor5YKz5pWZIDwgcHJlYWNoOwor6LyD5aW9IDwgYmV0dGVyOwor6Iqx5ZyIIDwgd3JlYXRoOwor5qmwIDwgYVwtc3BhcjsKK+iFjuiHnyA8IGtpZG5leTsKK+appCA8IHN0YW1lbjsKK+apnCA8IGFcLXBvc3Q7CivmqZUgPCBhXC1wcm9wOwor5qiyIDwganVqdWJlOwor6Lev56iLIDwgY291cnNlOwor5YWI5YmNIDwgYmVmb3JlOwor5oaC6ayxIDwgc3VsbGVuOwor6J665peL6YmXIDwgd3JlbmNoOwor5Y+D6K2w6ZmiIDwgc2VuYXRlOwor56mX6aO+IDwgdGFzc2VsOwor5qWiIDwgdGluZGVyOwor55Ge6YeRIDwgcnVpamluOwor5oqx55eFIDwgYmVcLWlsbDsKK+WCs+aOiCA8IGltcGFydDsKK+i7iuW6qyA8IGdhcmFnZTsKK+a4rOmHjyA8IHN1cnZleTsKK+Wtl+mmliA8IHByZWZpeDsKK+mtmuWkqyA8IGZpc2hlcjsKK+akpyA8IGd1dHRlcjsKK+ajgyA8IGFcLXBlYXI7CivmobIgPCBxdWluY2U7CivoirHlk6ggPCBnYXJpc2g7CivovJXlkqwgPCBuaWJibGU7Civmop3ntIsgPCBzdHJpcGU7Civoh7TmrbsgPCBkZWFkbHk7Civku7vkvZXkurogPCBhbnlvbmU7CivotJbph5EgPCByYW5zb207CivooYzmmJ8gPCBwbGFuZXQ7Civmm4AgPCBzdG9ybXk7Civlm57mhrYgPCByZWNhbGw7CivnqYDpoZ4gPCBjZXJlYWw7CivlgbXmn6UgPCBkZXRlY3Q7Civml7sgPCBoZWF2ZW47CivlrrnoqLEgPCBwZXJtaXQ7CivmlaEgPCByZWJ1a2U7CivmlYIgPCBkZWR1Y3Q7CivljYHlm5vooYzoqakgPCBzb25uZXQ7Civmk5MgPCB0b1wtcnViOwor5pyJ6YGT5b63IDwgY2hhc3RlOwor5ryj5ryqIDwgcmlwcGxlOwor5LqM6ICF5LmL5LiAIDwgZWl0aGVyOwor5o29IDwgY2x1dGNoOwor5ZyL5aSWIDwgYWJyb2FkOwor5ray6auUIDwgbGlxdWlkOwor6Jed6KGT5a62IDwgYXJ0aXN0Owor5bSO5baHIDwgcnVnZ2VkOwor6aSR6aSRIDwgcGFzdHJ5Owor6aSQ6aOyIDwgcmVwYXN0Owor5L2/6Iao6IS5IDwgZGlsYXRlOwor5L2V6JmVIDwgd2hlbmNlOwor5L+h55SoIDwgY3JlZGl0Owor57SE57+w5LiJ5pu4IDwgM1wtam9objsKK+Wwj+aPkOeQtCA8IGZpZGRsZTsKK+WboOWtkCA8IGZhY3RvcjsKK+aBnyA8IHNjYXJlZDsKK+aLs+aTiiA8IGJveGluZzsKK+i7n+WMliA8IHNvZnRlbjsKK+WuieipsyA8IHNlcmVuZTsKK+aHtua0i+a0iyA8IGxhemlseTsKK+e0hOe/sOS4gOabuCA8IDFcLWpvaG47CivmiaPnlZkgPCBkZXRhaW47Civmnb7pm54gPCBncm91c2U7CivlvKMgPCBtaWRkbGU7Civpq5jluqYgPCBoZWlnaHQ7Civlu4YgPCBhXC1yb29tOwor55Ww5pWZIDwgaGVyZXN5Owor5bekIDwgYVwtbWFuZTsKK+W3mCA8IHN1bW1pdDsKK+W2kyA8IGJvc2hhbjsKK+W0vyA8IGNsaWZmczsKK+WcsOS4uyA8IGFcLWhvc3Q7CivppqzmiLLlnJggPCBjaXJjdXM7Civpq5jlsbEgPCBhbHBpbmU7CivnlJ/mtq8gPCBjYXJlZXI7CivkvZzogIUgPCBhdXRob3I7CivmjKrlqIEgPCBub3J3YXk7CivlsIUgPCBzdWJkdWU7CivlsIvnmoQgPCBob21pbmc7Civlr44gPCBkcm93c3k7CivppqzpiLTolq8gPCBwb3RhdG87Civlrb4gPCBhXC1iYWJ5Owor5L2/6L2J5ZCRIDwgZGl2ZXJ0Owor5rKS5pyJ5Lq6IDwgbm9ib2R5Owor5ayDIDwgc2lzdGVyOwor5auqIDwgaGFua2VyOwor5am8IDwgcGVyc29uOwor5Y2a54mp6aSoIDwgbXVzZXVtOwor5aiSIDwgbWF0cm9uOwor5pyL6buoIDwgY2xpcXVlOwor56au5ouc5aCCIDwgY2hhcGVsOwor5re36KGAIDwgaHlicmlkOwor6LeL5raJIDwgdHJ1ZGdlOwor5aSsIDwgcGFydGVkOwor5YOF5YOFIDwgYmFyZWx5Owor5ryP5paXIDwgZnVubmVsOwor5LiN6YCP5piOIDwgb3BhcXVlOwor5aCnIDwgYWRqb2luOwor5Lmz6aCtIDwgbmlwcGxlOwor55CG6KuWIDwgdGhlb3J5Owor5LuL6LOqIDwgbWVkaXVtOwor5Zq/IDwgYVwtbHVtcDsKK+eUseaWvCA8IGR1ZVwtdG87CivlmZogPCBmYXRob207CivlkozpoqggPCBicmVlemU7CivlloYgPCBhXC1zYWdlOwor5om25qSNIDwgZm9zdGVyOwor55Kw55CDIDwgZ2xvYmFsOwor5ZSrIDwgdG9cLWh1bTsKK+mZpOS6huS5i+WkliA8IGV4Y2VwdDsKK+WUiCA8IHRvXC1zb2I7Civlk6QgPCBqYXJnb247Civkvr/msaAgPCB1cmluYWw7Civlka4gPCB0b1wtc2l0Owor5Y6OIDwgc2V0dGxlOwor5a6j56ixIDwgYXNzZXJ0Owor5ZOA6L6tIDwgbGFtZW50Owor5omB5qGD6auUIDwgdG9uc2lsOwor5YuEIDwgYWN0aXZlOwor5Lm+6YWqIDwgY2hlZXNlOwor5pu06auYIDwgaGlnaGVyOwor5YGM5aSnIDwgc29cLWJpZzsKK+ato+aWueW9oiA8IHNxdWFyZTsKK+iCjOiCiSA8IG11c2NsZTsKK+mpmuaBkCA8IGFwcGFsbDsKK+WPr+S/oeS7uyA8IHRydXN0eTsKK+aWh+WtuOWutiA8IHdyaXRlcjsKK+aJi+anjSA8IHBpc3RvbDsKK+WDrCA8IGNsZXZlcjsKK+WCjiA8IHRvcHBsZTsKK+enu+WLleW8jyA8IG1vYmlsZTsKK+WutueVnCA8IGNhdHRsZTsKK+emj+mfsyA8IGdvc3BlbDsKK+i1t+a6kCA8IG9yaWdpbjsKK+WAgyA8IGRhbWFnZTsKK+S6gui3syA8IGJvdW5jZTsKK+WIsOatpOiZlSA8IGhpdGhlcjsKK+iGveWkpyA8IGRhcmluZzsKK+S7miA8IHRvXC1mbHk7Civoo73pmbblt6XkurogPCBwb3R0ZXI7CivlgaXlhaggPCByb2J1c3Q7CivktoEgPCBub2lzZXM7CivktacgPCB0b1wtZHllOwor5LSlIDwgYVwtc3RhZzsKK+SzviA8IGFuXC1vd2w7Civmi4zlmLQgPCBiaWNrZXI7CivmiZPmk4ogPCB0b1wtaGl0Owor5LOHIDwgcGFycm90Owor56yo5ouZIDwgY2x1bXN5Owor5LK5IDwgb3NwZXJ5Owor5Lq65Y+j6Kq/5p+lIDwgY2Vuc3VzOwor5LKMIDwgYVwtZmlzaDsKK+SxlSA8IGxhYnJ1czsKK+SwoyA8IGFuXC1lbGY7CivnkZXnlrUgPCBzdGlnbWE7Civkr6ggPCB0b1wtcmFwOwor5K+BIDwgYVwtbXVsZTsKK+WiqOilv+WTpSA8IG1leGljbzsKK+a4heecn+WvuiA8IG1vc3F1ZTsKK+StqiA8IGdyYWluczsKK+StpSA8IGFcLWJhaXQ7CivkrYwgPCBjb25nZWU7CivkrLggPCBhXC1tZWFsOwor5KyRIDwgYVwtZ2FsZTsKK+SrrCA8IHRvXC1ib3c7Civmtbfoo6EgPCBtYXJpbmU7CivlkbPpgZMgPCBmbGF2b3I7CivkqLogPCBjbG91ZHk7CivkqJ8gPCBwdWRkbGU7CivkqIcgPCBhXC1wYWlyOwor54Sh6KuW5aaC5L2VIDwgYW55aG93Owor5Ke0IDwgYVwtYmlyZDsKK+SnkSA8IGFcLWRpa2U7Civlh7rln4Plj4roqJggPCBleG9kdXM7Civlronlk6Xmi4kgPCBhbmdvbGE7CivmnInol6Xnma7ogIUgPCBhZGRpY3Q7CivkpaogPCB0b1wtY3VwOwor5KWoIDwgYVwtZmlsZTsKK+SljSA8IGFcLXdoaXA7Civku6XoibLliJcgPCBpc3JhZWw7Civnp4Hoqp4gPCBtdXJtdXI7Civph6PprZrnlKjlhbcgPCB0YWNrbGU7CivmnIDov5EgPCByZWNlbnQ7Civko5ggPCBhXC1oYWxsOwor5riF55imIDwgbWVhZ2VyOwor5KOIIDwgYVwtbGFuZTsKK+mHmOabuOmHnSA8IHN0YXBsZTsKK+WyuOS4iiA8IGFzaG9yZTsKK+eFp+ebuOapnyA8IGNhbWVyYTsKK+SgsCA8IGNvaWxlZDsKK+SgpCA8IHRvZGRsZTsKK+e0oee5lOiAhSA8IHdlYXZlcjsKK+S4remAlCA8IG1pZHdheTsKK+aWr+aLieWkqyA8IHNsYXZpYzsKK+SdnCA8IGFcLWxpb247CivknYQgPCBjb3dwZWE7Civkv4TnvoXmlq8gPCBydXNzaWE7CivknJ4gPCBhXC1kb3NlOwor5pyo6KO9IDwgd29vZGVuOwor5a6J54S2IDwgc2FmZWx5Owor6aOi6I2SIDwgZmFtaW5lOwor5JiwIDwgYVwtaG9vZDsKK+i2vuWwliA8IHRpcHRvZTsKK+SYrCA8IGFybW91cjsKK+SYjCA8IGdhZGZseTsKK+SXqyA8IGFcLWZyb2c7CivklrkgPCB3ZWV2aWw7Civkv6HlpYkgPCBiZWxpZWY7CivmiJDmlYggPCBlZmZlY3Q7CivklK8gPCBzYWx0ZWQ7Civnk7blrZAgPCBib3R0bGU7CivklKIgPCBjYXRoYXk7CivklI8gPCBhXC1sdXNoOwor5LiJ6YeNIDwgdHJlYmxlOwor5JOmIDwgYVwtcnVsZTsKK+WuouawoyA8IHBvbGl0ZTsKK+SThCA8IGdyYXNzeTsKK+a1ruiRlyA8IGFmbG9hdDsKK+iuium7kSA8IGRhcmtlbjsKK+SSiSA8IGFcLWxvbmc7CivkkoIgPCBhblwtb2FyOwor5byT566t5omLIDwgYXJjaGVyOwor5JG6IDwgYVwtc2FpbDsKK+SRtCA8IGFcLWJvYXQ7Civmta7oj68gPCB2YW5pdHk7CivkkKYgPCBzbGVlcHk7CivkkKUgPCBzdGlua3k7Civpp4HmlqUgPCByZWZ1dGU7CivkuI3pgakgPCB1bndlbGw7Civkj6ogPCB0ZW5kb247Civnvp7ovrEgPCBiYWZmbGU7CivnlZnkuIsgPCByZW1haW47Civkj6MgPCBtYWdnb3Q7CivkuIrpgoogPCB1cHNpZGU7CivkjrEgPCBhXC1kcmFnOwor6IOh5qGDIDwgd2FsbnV0Owor5I2DIDwgYVwtdmFzZTsKK+WwgeW7uiA8IGZldWRhbDsKK+WSjOiXuSA8IGtpbmRseTsKK+SLkCA8IGZhYnJpYzsKK+SKpyA8IGFcLWZhcnQ7CivloZ7niL7nibkgPCBjZWx0aWM7CivkipsgPCBzaHJlZHM7Civnqb/mtJ4gPCBwaWVyY2U7CivkiLQgPCBhXC1jYWdlOwor5IiOIDwgYVwtbGVhZjsKK+SHmiA8IHRvXC10YXA7Civkh4EgPCBhXC1jYXZlOwor5Ia8IDwgYVwtbmVzdDsKK+SGriA8IHRvXC1kaXA7CivkhpkgPCBhXC1raWxuOwor5a6i5qOnIDwgdGF2ZXJuOwor5Y+p6aCtIDwga293dG93Owor5oi/5a6iIDwgdGVuYW50Owor56ys5ZubIDwgZm91cnRoOwor5IS5IDwgYVwteWVhcjsKK+mHjumkkCA8IHBpY25pYzsKK+SEmCA8IGFcLXJpdGU7Civkg6UgPCBzdG9uZXM7CivlsIjlrrYgPCBleHBlcnQ7CivkgrcgPCBicm9rZW47Civkvb/lvpcgPCB1c2FibGU7Civjv7wgPCBhXC1ib3dsOwor47+7IDwgYVwtdHJheTsKK+aJk+Wtl+WToSA8IHR5cGlzdDsKK+O/rSA8IGNyYWNrczsKK+O/pyA8IGZpZWxkczsKK+icg+aZryA8IG1pcmFnZTsKK+O/lCA8IGFcLXdhcnQ7Civlj43pp4EgPCByZXRvcnQ7CivlsJHlpbMgPCBtYWlkZW47CivjvbcgPCBkcm9wc3k7CivjvL4gPCBicmlja3M7Civmtbfntr8gPCBzcG9uZ2U7CivmmJ/mnJ/ml6UgPCBzdW5kYXk7CivjvIQgPCBwZWFybHM7CivnlKjkuo4gPCB1c2VcLWluOwor47i/IDwgYVwtY2FsZjsKK+aZmumjryA8IHN1cHBlcjsKK+O3iyA8IGVtYmVyczsKK+iRoeiQhOS5viA8IHJhaXNpbjsKK+izreazqCA8IHN0YWtlczsKK+O2pCA8IHRvXC1mcnk7CivjtoggPCBjcmVla3M7CivnpZ7oq60gPCBvcmFjbGU7CivjtZ0gPCBtb3Zpbmc7CivkuI3opoEgPCBkb24nJ3RcITsKK+O0niA8IGZsdWVudDsKK+aIkeiHquW3sSA8IG15c2VsZjsKK+adkOepjSA8IHZvbHVtZTsKK+aJgeWckyA8IG9ibGF0ZTsKK+OzjCA8IG1hcnNoeTsKK+OxniA8IGRhbmdlcjsKK+OxjSA8IHRvXC1vd2U7Civlj67piLQgPCBqaW5nbGU7CivjsIMgPCBhXC10cmVlOwor5aSn5q2l6LWwIDwgc3RyaWRlOwor56ys5YWrIDwgZWlnaHRoOwor5LiK6KGrIDwgYmxvdXNlOwor466WIDwgdG9cLWxheTsKK+OtsSA8IGFcLWNhc2U7Civmr5TovIPllpzmraEgPCBwcmVmZXI7Civlr7bloZQgPCBwYWdvZGE7Civjq7ogPCBieWdvbmU7CivkuI3lhazlubMgPCB1bmZhaXI7CivlrqLmiLYgPCBjbGllbnQ7Civjq4UgPCBhXC1mbGFnOwor46q5IDwgdG9cLXJvYjsKK+OpsiA8IGFcLWZpc3Q7Civoiq3olb7oiJ4gPCBiYWxsZXQ7CivjqL4gPCBhXC10eXBlOwor46enIDwgYVwtY29tYjsKK+WutuW6rSA8IGZhbWlseTsKK+afj+aelyA8IGJlcmxpbjsKK+OmlCA8IHNpbGtseTsKK+aciee9qiA8IGd1aWx0eTsKK+OmiiA8IGxhdmlzaDsKK+OmhSA8IHVuZWFzeTsKK+mNteW4vSA8IGtleWNhcDsKK+Wwj+WMhSA8IHBhY2tldDsKK+S6qOeJuSA8IGh1bnRlcjsKK+aJk+WCtyA8IGJydWlzZTsKK+mggemCiiA8IG1hcmdpbjsKK+aJi+WGiiA8IG1hbnVhbDsKK+OhgSA8IGFcLXJvYmU7CivjoLIgPCByaXBwZWQ7CivniZnpvZIgPCBkZW50YWw7CivlkI3oqIAgPCBzYXlpbmc7CivjnbkgPCBhXC1oYXJlOwor6ICA55y8IDwgZGF6emxlOwor5Lyv5Yip6IyyIDwgYmVsaXplOwor5riv5b2OIDwgaGFyYm9yOwor6IOM5bi2IDwgYnJhY2VzOwor6J665peL5b2iIDwgc3BpcmFsOwor45q8IDwgYVwtZ2lybDsKK+OauyA8IHNvZG9teTsKK+OajCA8IGFcLWJhbmQ7CivjmbkgPCBhXC1kYW1wOwor5q+U6LyD5bCRIDwgbGVzc2VyOwor54qv6YyvIDwgdG9cLWVycjsKK+WcqOatpOiZlSA8IGhlcmVpbjsKK+aatOiZkCA8IGJydXRhbDsKK+iiq+Wus+S6uiA8IHZpY3RpbTsKK+mYv+WkmuWwvOaWryA8IGFkb25pczsKK+azouiYrSA8IHBvbGFuZDsKK+OUuiA8IGFuXC1hZ2U7CivjlIkgPCB0b1wtZGlnOwor45O1IDwgc3dvcmRzOwor45OgIDwgYVwtZmxhdzsKK+OThSA8IGZyb3plbjsKK+aYn+mbsiA8IG5lYnVsYTsKK+a1t+eLuCA8IGJlYXZlcjsKK+mYv+azoue+hSA8IGFwb2xsbzsKK+S+neWBjiA8IG5lc3RsZTsKK+aHpuWkqyA8IGNvd2FyZDsKK+S9v+iAs+iBviA8IGRlYWZlbjsKK+S8keaDnCA8IHJlY2VzczsKK+iTrOmshiA8IGZsdWZmeTsKK+ejgemQtSA8IG1hZ25ldDsKK+agoeWckiA8IGNhbXB1czsKK+iuiuizqiA8IGdvXC1iYWQ7Civnvqnos6PmnIMgPCBiYXphYXI7CivnvorogokgPCBtdXR0b247Civlt6XkvZzlrqQgPCBzdHVkaW87CivlkIrokZcgPCBkYW5nbGU7CivntKvnvoXomK3oibIgPCB2aW9sZXQ7CivploDlpJbmvKIgPCBsYXltYW47Civmho7mg6EgPCBsb2F0aGU7CivpgI/ljbDniYjljbDliLcgPCBvZmZzZXQ7CivlnKjpmYTov5EgPCBuZWFyYnk7Civmho7mgaggPCBkZXRlc3Q7CivloZfmsrnmlrwgPCBhbm9pbnQ7Civpm5zosqjllYYgPCBncm9jZXI7CivllpzliocgPCBjb21lZHk7Civlr5LlhqwgPCB3aW50cnk7CivosrbmlqUgPCBkZW1vdGU7Civllq7kvY0gPCBhXC11bml0Owor55CD5ouNIDwgcmFja2V0Owor57at5ZC+54i+IDwgdWlnaHVyOwor6Iux6ZuE5byPIDwgaGVyb2ljOwor5a2Q5b2IIDwgYnVsbGV0Owor55CG6auu5birIDwgYmFyYmVyOwor5YKt5Lq66aCY54+tIDwgYnV0bGVyOwor5a6J5Z+5IDwgYW1wZXJlOwor6aOf5qe9IDwgbWFuZ2VyOwor6IOM5Y+bIDwgYmV0cmF5Owor6LSW5ZueIDwgcmVkZWVtOwor542o54m5IDwgdW5pcXVlOwor5q+b57mU6YGL5YuV6KGrIDwgamVyc2V5Owor6YeR6ImyIDwgZ29sZGVuOwor6LW35rOh5rKrIDwgc2VldGhlOwor5LiN5oiw5LiN5ZKMIDwgbm9cLXdhcjsKK+WupOWFpyA8IGluZG9vcjsKK+izk+WuoiA8IGd1ZXN0czsKK+eRnuWFuCA8IHN3ZWRlbjsKK+i0iuWQjCA8IGFzc2VudDsKK+iWhOe0mSA8IHRpc3N1ZTsKK+aCtueGsSA8IHN1bHRyeTsKK+aYn+acn+S6lCA8IGZyaWRheTsKK+aYn+acn+S4gCA8IG1vbmRheTsKK+ePvuWtmCA8IGV4dGFudDsKK+mkkOW3viA8IG5hcGtpbjsKK+S7peWkqiA8IGV0aGVyXC07Civlt7TniL7lubIgPCBiYWxrYW47CivnkaPkuosgPCB0cmlmbGU7CivmoLzmoLznrJEgPCBnaWdnbGU7CivpoJDnrpcgPCBidWRnZXQ7CivlrZ/liqDmi4kgPCBiZW5nYWw7CivpnZLpioUgPCBicm9uemU7CivpoJHnq6UgPCB1cmNoaW47CivmnIPmrbsgPCBtb3J0YWw7CivkuI3nhLYgPCBub3RcLXNvOwor6K6A6ICFIDwgcmVhZGVyOwor5rSq5rC0IDwgZGVsdWdlOwor55m96Jit5ZywIDwgYnJhbmR5Owor5pyo5paZIDwgbHVtYmVyOwor5oSb5b636I+vIDwgZWR3YXJkOwor5rex5YyWIDwgZGVlcGVuOwor54++5ZyoIDwgbW9kZXJuOwor6JiH5qC86Jit5bi9IDwgYm9ubmV0Owor6K6K57SFIDwgcmVkZGVuOwor5rib5L2O6YCf5bqmIDwgcmV0YXJkOwor54yW54uCIDwgc2F2YWdlOwor5reo5YyWIDwgcHVyaWZ5Owor5b6M6YCAIDwgcmVjb2lsOwor6Zi/5ouJ5pav5YqgIDwgYWxhc2thOwor54mH6KqeIDwgcGhyYXNlOwor5rWB5pifIDwgbWV0ZW9yOwor5oKy5q2OIDwgYmV3YWlsOwor5a2Y5YSyIDwgbWVtb3J5Owor5L2/5YW36auU5YyWIDwgZW1ib2R5Owor5YW4542E6ZW3IDwgd2FyZGVuOwor55yL5LiN6KaLIDwgdW5zZWVuOwor5L2/5L2c5ZiUIDwgc2lja2VuOwor6LGh5b61IDwgZW1ibGVtOwor5LiN5q+UIDwgdW5saWtlOwor5aSn6YyYIDwgc2xlZGdlOwor5pyA5pawIDwgbGF0ZXN0Owor5Li75pWZIDwgYmlzaG9wOwor5oGQ5rC055eFIDwgcmFiaWVzOwor6JmV5aWzIDwgdmlyZ2luOwor6LOj5Li7IDwgc2VsbGVyOwor576K5q+bIDwgZmxlZWNlOwor5ZCr5rC0IDwgd2F0ZXJ5Owor5Yqg77mN5pa8IDwgaW1wb3NlOwor6JmV5aKDIDwgcGxpZ2h0Owor6K2w56iLIDwgYWdlbmRhOwor5oOh5oSPIDwgbWFsaWNlOwor5pys5beeIDwgaG9uc2h1Owor5qmh55qu5pC9IDwgZXJhc2VyOwor5pW46YePIDwgYW1vdW50Owor5pa36KiAIDwgYWZmaXJtOwor5rWq5a2QIDwgbG9hZmVyOwor5pyJ5oSPIDwgaW50ZW5kOwor5rOi5aOr6aCTIDwgYm9zdG9uOwor5ZCN5rWBIDwgZ2VudHJ5Owor5Y+w54GjIDwgdGFpd2FuOwor5LiN5pm6IDwgdW53aXNlOwor5pWF6ZqcIDwgZ2xpdGNoOwor5ZCI5rOVIDwgbGF3ZnVsOwor5ZCN5rCjIDwgcmVwdXRlOwor5aSn6LevIDwgYXZlbnVlOwor5rW35aCxIDwgcG9zdGVyOwor5Lqm5Y2zIDwgbmFtZWx5Owor57aT57SA5Lq6IDwgYnJva2VyOwor57SF6Ji/6JSUIDwgY2Fycm90Owor5oKE5oKE5ZywIDwgZ2VudGx5Owor5pqW5rCjIDwgaGVhdGVyOwor5L2/77mN6IO95aSgIDwgZW5hYmxlOwor5ZC45pS2IDwgYWJzb3JiOwor5oSP5ZyWIDwgaW50ZW50Owor57ej6aO+IDwgZnJpbmdlOwor6YG/6Zuj5omAIDwgcmVmdWdlOwor5ZGo5bm0IDwgYW5udWFsOwor55m96bq15YWSIDwgaGVyb2luOwor5Y+j5ri0IDwgdGhpcnN0Owor6Yed5rOVIDwgc3RpdGNoOwor5raI5YyWIDwgZGlnZXN0Owor5q2j6ZaAIDwgcG9ydGFsOwor5rW35ZOhIDwgc2FpbG9yOwor5ZCQ5qC5IDwgaXBlY2FjOwor6ZuZ6YeNIDwgZG91YmxlOwor6Z2S6IuUIDwgbGljaGVuOwor5aSa6K6KIDwgZmlja2xlOwor6YmL5bqKIDwgcGxhbmVyOwor6aO86aSK6ICFIDwgZmVlZGVyOwor5ZCN5pybIDwgcmVub3duOwor5Y+W5raIIDwgY2FuY2VsOwor6YKj6YKKIDwgeW9uZGVyOwor5be05pav5YWLIDwgYmFzcXVlOwor5YqI6ZaLIDwgY2xlYXZlOwor6YWS56qpIDwgZGltcGxlOwor5YuV6K2wIDwgbW90aW9uOwor5pS+6YCQIDwgYmFuaXNoOwor6YWN56ixIDwgd29ydGh5Owor5rS75aGeIDwgcGlzdG9uOwor6I6r5pav56eRIDwgbW9zY293Owor8KWcjCA8IGFcLWNvYXQ7CivmnY/ku4EgPCBhbG1vbmQ7CivmnIjmoYLmqLkgPCBsYXVyZWw7CivpoJDmnJ8gPCBleHBlY3Q7Civnp4nlhawgPCBqdXN0bHk7CivnprHlkYogPCBwcmF5ZXI7Civmm7TlpKcgPCBiaWdnZXI7CivkuZ3ljYEgPCBuaW5ldHk7CivnoLToiIogPCBzaGFiYnk7CivkuIDluLYgPCByZWdpb247CivnoqfnjokgPCBqYXNwZXI7Civlvq7oloTnmoQgPCBtZWFncmU7Civlj6rmmK8gPCBtZXJlbHk7CivlsI/mt5jmsKMgPCByYXNjYWw7Civmg6HljJYgPCB3b3JzZW47CivkuIDlsYAgPCBpbm5pbmc7CivnhKHms5XnhKHlpKkgPCBvdXRsYXc7CivmnKrkvoYgPCBmdXR1cmU7CivphInntLMgPCBzcXVpcmU7Civoqa3oqIggPCBkZWNlaXQ7CivosYHlhY0gPCBleGVtcHQ7Civlv4PnkIYgPCBtZW50YWw7CivniaLniaIgPCBmaXJtbHk7Civpoqjkv5cgPCBjdXN0b207CivwoICJIDwgYVwtaGlsbDsKK+WJtei+piA8IGxhdW5jaDsKK+mBjumHjyA8IGV4Y2VzczsKK+i1t+iotOiAhSA8IHN1aXRvcjsKK+eGlOinoyA8IGZ1c2lvbjsKK+efs+iLsSA8IHF1YXJ0ejsKK+W3tOaLv+mmrCA8IHBhbmFtYTsKK+WMheeuoSA8IGFzc3VyZTsKK+WLleiEiCA8IGFydGVyeTsKK+acgOS9jiA8IGxvd2VzdDsKK+elreWPuCA8IHByaWVzdDsKK+eJueatpCA8IGhlcmVieTsKK+mbjOiViiA8IHBpc3RpbDsKK+W5sumgkCA8IG1lZGRsZTsKK+WMluefsyA8IGZvc3NpbDsKK+aNlemvqOiIuSA8IHdoYWxlcjsKK+awtOazpSA8IGNlbWVudDsKK+awtOazoSA8IGJ1YmJsZTsKK+a8lOiqquiAhSA8IG9yYXRvcjsKK+iTi+eIviA8IGdhZWxpYzsKK+WJjei8qSA8IHNlbmlvcjsKK+aTuuaoo+WtkCA8IGRvXC1zdGg7Civlia/oqZ4gPCBhZHZlcmI7CivljbHmqZ8gPCBjcmlzaXM7CivkuI3lhawgPCB1bmp1c3Q7Civms5XlnIsgPCBmcmFuY2U7CivmsonmgJ0gPCBwb25kZXI7CivmmpfloKEgPCBidW5rZXI7Civni5flsYsgPCBrZW5uZWw7CivmmrTlkJsgPCB0eXJhbnQ7Civms6Lmlq/lsLzkup4gPCBib3NuaWE7CivkuInlgI0gPCB0cmlwbGU7CivpnJznmb0gPCBmcm9zdHk7CivlkKbliYcgPCBpZlwtbm90Owor5YiG6ZCYIDwgbWludXRlOwor6JGs56auIDwgYnVyaWFsOwor5rC05qG2IDwgYnVja2V0Owor5pKk6Yq3IDwgcmVwZWFsOwor5Yqg5ou/5aSnIDwgY2FuYWRhOwor5Y+N5bCEIDwgcmVmbGV4Owor5LiN5Li5IDwgYmh1dGFuOwor6Z2e5rSyIDwgYWZyaWNhOwor5Ymd6J2VIDwgZGVudWRlOwor5LiA5LiyIDwgc3RyYW5kOwor57qW5q+bIDwgY2lsaXVtOwor55+zIDwgc3RvbmU7Civnn60gPCBzaG9ydDsKK+W/qyA8IHJhcGlkOwor5ZyoIDwgYmVcLWF0Owor5LuWIDwgb3RoZXI7Civnn6IgPCBhcnJvdzsKK+WIsCA8IGdvXC10bzsKK+ivtCA8IHNwZWFrOwor6L+FIDwgcXVpY2s7CivlnLAgPCBlYXJ0aDsKK+W/gyA8IGhlYXJ0Owor5LiLIDwgdW5kZXI7Civovq0gPCB3b3JkczsKK+W+riA8IHNtYWxsOwor5a62IDwgaG91c2U7CivlvqEgPCBkcml2ZTsKK+WQjiA8IHF1ZWVuOwor5b6FIDwgdHJlYXQ7Civov5ggPCBzdGlsbDsKK+WPkSA8IGlzc3VlOwor5b2rIDwgY2FydmU7Civmg7MgPCB0aGluazsKK+edoSA8IHNsZWVwOwor6L2JIDwgc2hpZnQ7CivmiYAgPCBwbGFjZTsKK+i8qiA8IHdoZWVsOwor5LiJIDwgdGhyZWU7CivovJUgPCBsaWdodDsKK+W8jyA8IHN0eWxlOwor5qC3IDwgc2hhcGU7Civlu7ogPCBidWlsZDsKK+W7tiA8IGRlbGF5Owor55uyIDwgYmxpbmQ7Civlu6MgPCBicm9hZDsKK+WjsCA8IHNvdW5kOwor5belIDwgbGFib3I7Civnm4YgPCBiYXNpbjsKK+ebgyA8IGdsYXNzOwor5q2jIDwgcmlnaHQ7CivlurggPCB1c3VhbDsKK+WlsyA8IHdvbWFuOwor5YqbIDwgcG93ZXI7CivoupEgPCB3YXZlcjsKK+WboCA8IGNhdXNlOwor6YeNIDwgaGVhdnk7CivnmocgPCByb3lhbDsKK+W6hyA8IGNvdmVyOwor5qyhIDwgb3JkZXI7Civlj6MgPCBtb3V0aDsKK+eZvSA8IHdoaXRlOwor5bm9IDwgcXVpZXQ7CivmlZkgPCB0ZWFjaDsKK+WGjSA8IGFnYWluOwor5rCUIDwgc3RlYW07Civkv6EgPCB0cnVzdDsKK+WMlyA8IG5vcnRoOwor6LmyIDwgc3F1YXQ7CivouZ8gPCB0cmFjZTsKK+W5hSA8IHBpZWNlOwor5YWlIDwgZW50ZXI7CivlhYggPCBmaXJzdDsKK+awtCA8IHdhdGVyOwor5be3IDwgYWxsZXk7CivnrJEgPCBzbWlsZTsKK+eriyA8IHN0YW5kOwor6LeqIDwga25lZWw7CivpqawgPCBob3JzZTsKK+W3qCA8IGxhcmdlOwor55aRIDwgZG91YnQ7CivliKkgPCBnYWluczsKK+aenCA8IGZydWl0Owor6LWnIDwgYmx1c2g7Civoh7MgPCByZWFjaDsKK+a4hSA8IGNsZWFyOwor54mpIDwgdGhpbmc7CivltYwgPCBpbmxheTsKK+eUsiA8IGFybW9yOwor55SwIDwgZmllbGQ7CivorrggPCBhbGxvdzsKK+WFqyA8IGVpZ2h0Owor5bSWIDwgY2xpZmY7CivltI4gPCByb3VnaDsKK+WNlyA8IHNvdXRoOwor6ImyIDwgY29sb3I7Civnk5wgPCBtZWxvbjsKK+eulyA8IGNvdW50Owor6LOKIDwgdGhpZWY7Civosq8gPCBzdG9yZTsKK+iyqCA8IGdvb2RzOwor5q+PIDwgZXZlcnk7CivlsawgPCBjbGFzczsKK+ixqiA8IGJyYXZlOwor6LGGIDwgYmVhbnM7CivkuIMgPCBzZXZlbjsKK+WwliA8IHNoYXJwOwor5bCEIDwgc2hvb3Q7CivnqbogPCBlbXB0eTsKK+aKgCA8IHNraWxsOwor5a+6IDwgY291cnQ7Civlr6sgPCB3cml0ZTsKK+iLsSA8IHBldGFsOwor5a+GIDwgZGVuc2U7CivpkrEgPCBtb25leTsKK+WuuSA8IGxvb2tzOwor5a61IDwgbmlnaHQ7Civlp4sgPCBiZWdpbjsKK+WuoiA8IGd1ZXN0Owor54mHIDwgc2xpY2U7CivnoJQgPCBncmluZDsKK+aXqSA8IGVhcmx5Owor5427IDwgb2ZmZXI7CivnjbogPCBvdHRlcjsKK+eNuCA8IGJlYXN0Owor542oIDwgYWxvbmU7CivoraYgPCBndWFyZDsKK+WtmCA8IGV4aXN0Owor6K2JIDwgcHJvb2Y7CivorJ0gPCB0aGFuazsKK+eMnCA8IGd1ZXNzOwor5ayJIDwgZW5qb3k7Civpu5EgPCBibGFjazsKK+isgSA8IHZpc2l0Owor5YmRIDwgc3dvcmQ7CivkuZAgPCBoYXBweTsKK+e6pyA8IGxldmVsOwor5Li+IDwgcmFpc2U7Civor4EgPCBwcm92ZTsKK+eFpyA8IHNoaW5lOwor6KqTIDwgc3dlYXI7CivnvqQgPCBncm91cDsKK+iqgiA8IHRlbXB0Owor5LykIDwgd291bmQ7Civmlq0gPCBzZXZlcjsKK+S7tyA8IHByaWNlOwor6ISRIDwgYnJhaW47Civop4QgPCBydWxlczsKK+WokSA8IGRhbmNlOwor56C0IDwgYnJlYWs7Civms70gPCBtYXJzaDsKK+eHuyA8IHNtb2tlOwor57SnIDwgdGVuc2U7Civop7ggPCB0b3VjaDsKK+ijhSA8IGRyZXNzOwor5rKzIDwgcml2ZXI7CivooYAgPCBibG9vZDsKK+aKlSA8IHRocm93Owor5aW0IDwgc2xhdmU7CivliIAgPCBrbmlmZTsKK+ilnyA8IGxhcGVsOwor5ZadIDwgZHJpbms7CivopKogPCBzdHJpcDsKK+WkoiA8IGRyZWFtOwor6ZSZIDwgZXJyb3I7CivmoYggPCB0YWJsZTsKK+WNsCA8IHByaW50Owor5aOTIDwgcHJlc3M7Civng4ggPCBmaWVyeTsKK+WjhyA8IGFsdGFyOwor6KOCIDwgc3BsaXQ7CivoorQgPCBwYW50czsKK+WikyA8IGdyYXZlOwor54KOIDwgZmxhbWU7CivngbAgPCBhc2hlczsKK+WhlyA8IHNtZWFyOwor5pWMIDwgZW5lbXk7CivloZQgPCB0b3dlcjsKK+aAgCA8IGJvc29tOwor572qIDwgY3JpbWU7Civon7IgPCB3b3JtczsKK+a/sSA8IGJlYWNoOwor5pGYIDwgcGx1Y2s7Civmlr0gPCBncmFudDsKK+aooSA8IG1vZGVsOwor6I2JIDwgZ3Jhc3M7Civmv4MgPCB0aGljazsKK+a/gSA8IG11ZGR5Owor5L+uIDwgc3R1ZHk7CivlkbMgPCB0YXN0ZTsKK+e7hyA8IHdlYXZlOwor6b6VIDwgbmljaGU7Civonb8gPCBmbGllczsKK+WFjSA8IHNwYXJlOwor5rOiIDwgd2F2ZXM7CivmvZQgPCBjbGVhbjsKK+a0iyA8IG9jZWFuOwor5Z2HIDwgZXF1YWw7CivlpZYgPCBwcml6ZTsKK+mhvyA8IHBhdXNlOwor5ryCIDwgZmxvYXQ7CivliKQgPCBqdWRnZTsKK+aLhSA8IGNhcnJ5Owor5p2/IDwgcGxhbms7Civpkp8gPCBjbG9jazsKK+m7kCA8IHN0aWNrOwor6JuHIDwgc25ha2U7CivmnoQgPCBmcmFtZTsKK+a6uiA8IGRyb3duOwor6bqmIDwgd2hlYXQ7Civmup0gPCBkaXRjaDsKK+a6nCA8IHNsaWRlOwor6IKJIDwgZmxlc2g7CivnurggPCBwYXBlcjsKK+iZmiA8IGZhbHNlOwor6JmOIDwgdGlnZXI7CivlmYwgPCBzY29sZDsKK+adgiA8IG1peGVkOwor5oCSIDwgYW5nZXI7CivnqL8gPCBkcmFmdDsKK+a4piA8IHN3aXJsOwor5rihIDwgY3Jvc3M7CivnvaIgPCBjZWFzZTsKK+m3uiA8IGhlcm9uOwor6be5IDwgZWFnbGU7Civol6kgPCBmZW5jZTsKK+iXpSA8IGRydWdzOwor6bKcIDwgZnJlc2g7Civll4UgPCBzbWVsbDsKK+iXgSA8IHN0cmF3Owor6ba0IDwgY3JhbmU7CivmnqogPCBzcGVhcjsKK+a2ryA8IHNob3JlOwor5raZIDwgdGVhcnM7CivphY0gPCBtYXRjaDsKK+a1tCA8IGJhdGhlOwor5Y2HIDwgYXJpc2U7CivmtZwgPCBjcmVlazsKK+iUrSA8IHNoYWRlOwor5rSlIDwgZmVycnk7CivprLwgPCBnaG9zdDsKK+iTriA8IGxvdHVzOwor6YG/IDwgYXZvaWQ7CivkuqEgPCBkZWF0aDsKK+mXqiA8IGZsYXNoOwor6ZyHIDwgc2hha2U7CivlkrMgPCBjb3VnaDsKK+e7vyA8IGdyZWVuOwor5ZKOIDwgZmF1bHQ7CivnurMgPCBhZG1pdDsKK+WRqiA8IGN1cnNlOwor56ulIDwgY2hpbGQ7CivkvJ8gPCBncmVhdDsKK+axgSA8IGp1aWNlOwor6I2jIDwgZ2xvcnk7CivlkJAgPCB2b21pdDsKK+mwjCA8IGxvYWNoOwor5ZaKIDwgc2hvdXQ7CivlkIkgPCBsdWNreTsKK+mAkCA8IGNoYXNlOwor5Y+pIDwga25vY2s7Civmo4AgPCBjaGVjazsKK+aPoSA8IGdyYXNwOwor54mZIDwgdG9vdGg7CivmrpYgPCBicmVlZDsKK+WNvyA8IG5vYmxlOwor5q2vIDwgdGVldGg7CivmraogPCBzbGFudDsKK+ajiyA8IGNoZXNzOwor6a2UIDwgZGVtb247CivohbAgPCB3YWlzdDsKK+aihSA8IHBsdW1zOwor6ZKiIDwgc3RlZWw7CivojLkgPCByb290czsKK+asuiA8IGNoZWF0Owor6ayaIDwgYmVhcmQ7CivljJkgPCBzcG9vbjsKK+WMjSA8IGNyYXdsOwor6IyFIDwgcmVlZHM7CivntK8gPCB0aXJlZDsKK+acqyA8IGZpbmFsOwor57OKIDwgcGFzdGU7CivnqI4gPCB0YXhlczsKK+aDryA8IGhhYml0Owor5YC+IDwgdXBzZXQ7CivotLggPCB0cmFkZTsKK+aJqyA8IHN3ZWVwOwor5ZCTIDwgc2NhcmU7CivliYMgPCBzaGF2ZTsKK+WItyA8IGJydXNoOwor576KIDwgc2hlZXA7CivmiZEgPCBwb3VuZDsKK+WAjSA8IHRpbWVzOwor5Ya2IDwgc21lbHQ7CivohrMgPCBtZWFsczsKK+WFvCA8IHVuaXRlOwor6Z6LIDwgc2hvZXM7CivmjKQgPCBjcm93ZDsKK+milyA8IGdyYWluOwor5oOgIDwgZmF2b3I7CivohZUgPCB3cmlzdDsKK+ahgyA8IHBlYWNoOwor5Z2hIDwgc2xvcGU7CivlhJ8gPCByZXBheTsKK+akjSA8IHBsYW50Owor6ISKIDwgc3BpbmU7CivmpIUgPCBjaGFpcjsKK+iCmiA8IGJlbGx5Owor5qOyIDwgcGVyY2g7Civogp0gPCBsaXZlcjsKK+eWryA8IGNyYXp5Owor6IC7IDwgc2hhbWU7Civkvo0gPCBzZXJ2ZTsKK+ihqyA8IHNoaXJ0Owor6ZK7IDwgZHJpbGw7Civls6EgPCBnb3JnZTsKK+mfuyA8IHJoeW1lOwor5LiRIDwgY2xvd247CivmvrMgPCBpbmxldDsKK+eWvCA8IGFjaGVzOwor5qGjIDwgc2hlbGY7CivnjpsgPCBhZ2F0ZTsKK+mdtCA8IGJvb3RzOwor5YKyIDwgcHJvdWQ7CivpnJwgPCBmcm9zdDsKK+WQtSA8IGFyZ3VlOwor6YKqIDwgd3Jvbmc7CivohIYgPCBjcmlzcDsKK+absyA8IHRyYWlsOwor6ZuiIDwgbGVhdmU7Civlj5sgPCByZWJlbDsKK+e/vCA8IHdpbmdzOwor55ScIDwgc3dlZXQ7CivpmpkgPCBjcmFjazsKK+WChSA8IHR1dG9yOwor5Za3IDwgc3B1cnQ7CivlqLYgPCBtYXJyeTsKK+mXhyA8IGNsb3NlOwor57OWIDwgc3VnYXI7Civnj4ogPCBjb3JhbDsKK+eguCA8IHNtYXNoOwor57WeIDwgdHdpc3Q7CivovaggPCB0cmFjazsKK+exliA8IHRhbGx5Owor5pOSIDwgY2F0Y2g7Civmj4MgPCBzaGVhcjsKK+eukiA8IGJyb29tOwor6Y2uIDwgYnJhc3M7Civll5MgPCB2b2ljZTsKK+WVpSA8IHdoYXRcPzsKK+icnCA8IGhvbmV5Owor6YuPIDwgdG9uZ3M7Civogr8gPCBzd2VsbDsKK+ijmSA8IHNraXJ0Owor5bC/IDwgdXJpbmU7CivpgK4gPCBzZWl6ZTsKK+WAoSA8IGd1aWRlOwor5YWcIDwgcG91Y2g7CivprYQgPCB2aWdvcjsKK+ezlSA8IGNha2VzOwor56iaIDwgeW91bmc7CivpiI0gPCBibHVudDsKK+emvSA8IGJpcmRzOwor5oa6IDwgcGVhY2U7Civpk74gPCBjaGFpbjsKK+aGrCA8IHJvdXNlOwor5YezIDwgYmVuY2g7CivphawgPCB0b2FzdDsKK+eBvyA8IHZpdmlkOwor5pSAIDwgY2xpbWI7CivmsqsgPCBmcm90aDsKK+mtgSA8IGNoaWVmOwor5rulIDwgZmxvb2Q7CivmiLMgPCBwcmljazsKK+ahqSA8IHN0YWtlOwor6IK6IDwgbHVuZ3M7CivnurEgPCBnYXV6ZTsKK+mZoSA8IHN0ZWVwOwor54OrIDwgc2NhbGQ7CivpuYUgPCBnb29zZTsKK+aVniA8IHJvb215Owor5bOoIDwgbG9mdHk7CivomZAgPCBjcnVlbDsKK+i+qyA8IGJyYWlkOwor5oCmIDwgZWFnZXI7CivmtYcgPCBzcHJheTsKK+iGmyA8IGNoZXN0Owor6Ze1IDwgbW91cm47CivoopwgPCBzb2NrczsKK+i0vyA8IGJyaWJlOwor5aKFIDwgdmlsbGE7Civnp70gPCBkaXJ0eTsKK+WRuyA8IGdyb2FuOwor5ounIDwgcGluY2g7CivmnaAgPCBsZXZlcjsKK+e8jiA8IHNhdGluOwor5oOuIDwgZHJlYWQ7CivlmZcgPCBidXJzdDsKK+eftiA8IGpldHR5Owor57CHIDwgc3dhcm07Civmh4ogPCB2ZXhlZDsKK+aLhyA8IHRodW1iOwor6ZOyIDwgc3BhZGU7Civlk70gPCBjaG9rZTsKK+WGlSA8IGNyb3duOwor55auIDwgdHVtb3I7CivotYMgPCBib290eTsKK+WpiiA8IHdob3JlOwor6ZSvIDwgYVwtc2F3Owor5ZiIIDwgbm9pc3k7CivnvLAgPCByZWluczsKK+iuqiA8IGFidXNlOwor5b+hIDwgYVwtc2FkOwor6aaNIDwgYnJlYWQ7CivpooUgPCBza3VsbDsKK+eDmSA8IGJyYW5kOwor5Z+UIDwgcGxhaW47CivpmJwgPCBtb3VuZDsKK+eCrCA8IHRvcmNoOwor54KZIDwgcm9hc3Q7CivlqaogPCBjb3ZldDsKK+i5kSA8IHRyZWFkOwor56u6IDwgaW5kaWE7CivliYwgPCBzbGFzaDsKK+etmyA8IHNpZXZlOwor56+hIDwgdXN1cnA7CivpsrggPCB3aGFsZTsKK+aKoSA8IHN3aW5nOwor5rauIDwgcmluc2U7CivphbUgPCB5ZWFzdDsKK+aphCA8IG9saXZlOwor6ZuPIDwgY2hpY2s7CivmtqcgPCBicm9vazsKK+iFuiA8IGdsYW5kOwor5b+xIDwgdHJ1dGg7CivonL8gPCBjcmVlcDsKK+mVgCA8IHBsYXRlOwor6IOtIDwgcm91Z2U7CivotbMgPCBncmFuZDsKK+ezoCA8IGNoYWZmOwor5bibIDwgc2lsa3M7CivpsqggPCBzaGFyazsKK+i4nSA8IGFua2xlOwor55yIIDwgZ2xvYXQ7CivlgK0gPCBkd2FyZjsKK+mVkCA8IHN0b3ZlOwor6JmxIDwgbG91c2U7CivmkJAgPCBjcmFtcDsKK+aImyA8IGxhbmNlOwor5ZGDIDwgYmVsY2g7Civmpq0gPCBraW9zazsKK+mFqiA8IGNyZWFtOwor5a2AIDwgd2lkb3c7CivlraogPCB0d2luczsKK+eesCA8IHdhdGNoOwor5rCuIDwgeGVub247Civnl6MgPCBzcG90czsKK+aRkiA8IGV4cGVsOwor5L+4IDwgd2FnZXM7CivmhKAgPCBhbmdyeTsKK+aJqiA8IHN0b2tlOwor57uJIDwgY3JlcGU7Civnj4AgPCBhbWJlcjsKK+ivqSA8IGJvYXN0Owor6IqNIDwgcGVvbnk7CivopLYgPCBwbGVhdDsKK+mFlyA8IGRydW5rOwor5p+gIDwgbGVtb247Civor5kgPCB0ZWFzZTsKK+e7uiA8IHNrZWluOwor6YeJIDwgZ2xhemU7CivlrZsgPCBjb21ldDsKK+akvSA8IGJlYW1zOwor6aKmIDwgZnJvd247Civmt5YgPCBzbHVzaDsKK+iOoCA8IHdlZWRzOwor5qmbIDwgYVwtcGVnOwor6JK6IDwgZnVyemU7Civnv5UgPCBhZ3JlZTsKK+mcviA8IG1pc3R5Owor56CnIDwgYW52aWw7Civog7ogPCBhbWluZTsKK+ibrSA8IGxlZWNoOwor6K+oIDwgam9rZXM7CivmgKsgPCBzb3JyeTsKK+allCA8IHdlZGdlOwor55a9IDwgdWxjZXI7CivmoaQgPCBhbGRlcjsKK+mThiA8IHJpdmV0Owor5pK6IDwgaHVycnk7CivogoQgPCBsZWFybjsKK+WtoiA8IHNwb3JlOwor6bKyIDwgc3Bhd247Civpk6ggPCB3ZWlnaDsKK+ixlSA8IGFcLXBpZzsKK+esiiA8IGxhZGxlOwor5ZuXIDwgZXJlY3Q7Civpk6kgPCBtb3VsdDsKK+m5kSA8IHF1YWlsOwor5ZWBIDwgY2hpcnA7CivphpogPCBldGhlcjsKK+eQsCA8IGpld2VsOwor6L+oIDwgdW50aWw7CivpuawgPCBzbmlwZTsKK+WCiCA8IHRyaWJlOwor6ZOwIDwgaGluZ2U7CivnobwgPCBib3JheDsKK+mFryA8IGVzdGVyOwor6ZWqIDwgY29pbnM7CivmiaYgPCBwcm9iZTsKK+a6tyA8IHByaXZ5Owor5L+zIDwgYWN0b3I7CivomJYgPCBzdHVtcDsKK+WigCA8IHBvcmNoOwor5ZaIIDwgbXVzaWM7CivlkKEgPCBibGFtZTsKK+eYiiA8IHdhcnRzOwor5Y6jIDwgc2hlbGw7Civns4UgPCBibGVuZDsKK+mYjyA8IGJsb2NrOwor6bKCIDwgYnJlYW07Civmur0gPCBtb2lzdDsKK+ewjyA8IGFcLWJveDsKK+ijpSA8IGZvbGRzOwor57yzIDwgbm9vc2U7CivpvqAgPCBmbHV0ZTsKK+idpCA8IGxhcnZhOwor5Z+tIDwgYVwtZGFtOwor6bK2IDwgc2hlYXQ7CivplJ4gPCBpbmdvdDsKK+awoSA8IHJhZG9uOwor5qetIDwgbWFwbGU7CivlvZggPCBzd2luZTsKK+W9liA8IGFcLWhvZzsKK+a7lyA8IGRyYWluOwor5buRIDwgYVwtaHV0Owor5YyPIDwgZ291cmQ7Civnr7wgPCBzZWRhbjsKK+ibniA8IHNuYWlsOwor55KBIDwgXChnZW1cKTsKK+e7lyA8IGJhc3RlOwor5Z+YIDwgcm9vc3Q7Civlt7Tpu44gPCBwYXJpczsKK+S7o+eQhuS6uiA8IGFnZW50Owor6YGK6JWpIDwgc3RyYXk7CivlvITns58gPCBzcG9pbDsKK+aBqeWFuCA8IGdyYWNlOwor5aSn54i6IDwgdW5jbGU7Civml6XmnKwgPCBqYXBhbjsKK+WPr+WPryA8IGNvY29hOwor5Y+v5Y+jIDwgdGFzdHk7Civlu7bnt6kgPCBkZWZlcjsKK+WnquWlsyA8IG5pZWNlOwor6Zm36JC9IDwgc2x1bXA7CivniZvmjpIgPCBzdGVhazsKK+masee0hCA8IHZhZ3VlOwor5ZCI5L21IDwgYW5uZXg7Civorbflo6sgPCBudXJzZTsKK+aziuS9jSA8IGJlcnRoOwor542o5pyo6IifIDwgY2Fub2U7Civmop3mnb/nrrEgPCBjcmF0ZTsKK+mZs+WIl+iHuiA8IHN0YWxsOwor6YGK6ImHIDwgYmFyZ2U7CivpmbDojpYgPCBwZW5pczsKK+aZuuWIqSA8IGNoaWxlOwor5aOT56KOIDwgY3J1c2g7Civmr4/mr48gPCBvZnRlbjsKK+mfk+WciyA8IGtvcmVhOwor55+z54uAIDwgc3Rvbnk7CivnlLfkv67pgZPpmaLplbcgPCBhYmJvdDsKK+WIpeiZnyA8IGFsaWFzOwor5byV55SoIDwgcXVvdGU7CivluILplbcgPCBtYXlvcjsKK+eIkOaetiA8IGdyYXRlOwor5qmf6ZecIDwgb3JnYW47Civms6XmsLTljKAgPCBtYXNvbjsKK+m0ieeJhyA8IG9waXVtOwor5qSN54mp576kIDwgZmxvcmE7CivlnKjpq5jomZUgPCBhbG9mdDsKK+aSkOerv+i3syA8IHZhdWx0Owor5pS+54mnIDwgZ3JhemU7Civmr4/ml6UgPCBkYWlseTsKK+Wll+aIvyA8IHN1aXRlOwor6YGV56SZIDwgdGFib287CivlhKrpu54gPCBtZXJpdDsKK+W+mOW+iiA8IGhvdmVyOwor6KaW6Ka6IDwgc2lnaHQ7CivmlZjliKnkup4gPCBzeXJpYTsKK+WIgOiRiSA8IGJsYWRlOwor5pGp6KW/IDwgbW9zZXM7CivomZvlvLXogbLli6IgPCBibHVmZjsKK+iqv+WItuino+iqv+WZqCA8IG1vZGVtOwor6Z2S5bm0IDwgeW91dGg7CivmqJnpoYwgPCB0aXRsZTsKK+awqOWfuiA8IGFtaW5vOwor5qmf6Lu4IDwgYXJib3I7CivphpLkvoYgPCB3YWtlbjsKK+mWgOmWgiA8IGxhdGNoOwor6Z2I5benIDwgaGFuZHk7CivlhYPpn7MgPCB2b3dlbDsKK+WFi+mahiA8IGNsb25lOwor5pW05pW0IDwgd2hvbGU7CivljK/lr4QgPCByZW1pdDsKK+WJgeeijiA8IG1pbmNlOwor6Kq/5oOFIDwgZmxpcnQ7CivmnKrmiJDlubTkurogPCBtaW5vcjsKK+WMhuW/mSA8IGhhc3R5Owor5q+b5be+IDwgdG93ZWw7CivoirPpppkgPCBiYWxteTsKK+W5tOe0miA8IGdyYWRlOwor57Sr5LiB6aaZIDwgbGlsYWM7CivmlaPmlocgPCBwcm9zZTsKK+S4jeaWsOmuriA8IHN0YWxlOwor6KW/6JePIDwgdGliZXQ7CivlpKfovrLloLQgPCByYW5jaDsKK+eBq+i7iiA8IHRyYWluOwor5q275p2/IDwgcmlnaWQ7Civnn5vmn4QgPCBzaGFmdDsKK+mVt+mHmCA8IHNwaWtlOwor5q2l5qeNIDwgcmlmbGU7CivliLvnl5UgPCBub3RjaDsKK+mBuOawkSA8IHZvdGVyOwor6a2U6ay8IDwgZGV2aWw7CivmlrDlqJggPCBicmlkZTsKK+isoOWCsyA8IHJ1bW9yOwor5paw5aWHIDwgbm92ZWw7CivnhaTmuKMgPCBzbGFjazsKK+iKsemWiyA8IGJsb29tOwor54mp5Li7IDwgb3duZXI7CivlvYjlvJMgPCBzbGluZzsKK+WkmuawtOWIhiA8IGp1aWN5Owor5aCx56qpIDwgYnJvb2Q7CivpurXljIXluKvlgoUgPCBiYWtlcjsKK+mbu+W9sSA8IG1vdmllOwor5pG457SiIDwgZ3JvcGU7CivpgJ/njocgPCBzcGVlZDsKK+egtOWjniA8IHdyZWNrOwor57SE6I6rIDwgYWJvdXQ7Civlo4HmnrYgPCBsZWRnZTsKK+WRvOWPq+WZqCA8IHBhZ2VyOwor6ZqO5q61IDwgc3RhZ2U7CivljYHliIYgPCBmdWxseTsKK+WcsOmdoiA8IGZsb29yOwor6Ku35Yi6IDwgaXJvbnk7Civnmb3osrsgPCB3YXN0ZTsKK+mBi+aysyA8IGNhbmFsOwor5YWr6KeSIDwgYW5pc2U7CivpmbDmtrwgPCBzaGFkeTsKK+aTpua0lyA8IHNjb3VyOwor54ax5b+xIDwgYXJkb3I7CivntqDmtLIgPCBvYXNpczsKK+S4i+awtOmBkyA8IHNld2VyOwor5Zu66auUIDwgc29saWQ7Civlg6fpmaIgPCBhYmJleTsKK+aOqOmBuCA8IGVsZWN0Owor5o6o6YCyIDwgaW1wZWw7Civpl5znr4AgPCBqb2ludDsKK+W+nuS+huS4jSA8IG5ldmVyOwor6Imm6ZqKIDwgZmxlZXQ7Civmr5TliIYgPCBzY29yZTsKK+WJm+aenCA8IGNvbmdvOwor54Gr6IqxIDwgc3Bhcms7CivlvbHlg48gPCBpbWFnZTsKK+ebnOeriiA8IHN0ZWFsOwor6bq6IDwgZmxvdXI7CivpupggPCBzY2VudDsKK+m5viA8IHNhbHR5Owor6biyIDwgbXluYWg7CivkuozmpbXnrqEgPCBkaW9kZTsKK+edoeakhSA8IGNvdWNoOwor56u25oqA5aC0IDwgYXJlbmE7CivliqDlr6wgPCB3aWRlbjsKK+m0qiA8IHN3b29wOwor5Y+v5pOm5a+r5Y+v57eo56iL56WH6K6A5a2Y5YSy5ZmoIDwgZXByb207Civoqqrlh7ogPCB1dHRlcjsKK+a+s+mWgCA8IGFvbWVuOwor5o6o6KuWIDwgaW5mZXI7Civns6Lns4ogPCBmb2dneTsKK+mwniA8IHNxdWlkOwor5YuV5ZCRIDwgdHJlbmQ7CivlpKnkvb8gPCBhbmdlbDsKK+ikkOiJsiA8IGJyb3duOwor6ayG6ZaLIDwgbG9vc2U7Civmq7jmnKggPCBiZWVjaDsKK+mDqOS7tiA8IHBhcnRzOwor6LuM6YGTIDwgb3JiaXQ7CivprI4gPCBmYXZ1czsKK+mWg+iAgCA8IGdsaW50Owor6Iet6bysIDwgc2t1bms7Civpq7MgPCBzdGF0ZTsKK+mrsiA8IGFcLXdpZzsKK+eWvumiqCA8IGJsYXN0Owor5pSk5a2QIDwgYm9vdGg7CivlpKfkurogPCBhZHVsdDsKK+m6pemYv+WvhiA8IG1pYW1pOwor5Ye65rKSIDwgaGF1bnQ7Civpp54gPCBjYW1lbDsKK+mBk+W+tyA8IG1vcmFsOwor55m86IGyIDwgdm9jYWw7CivplbfogIEgPCBlbGRlcjsKK+S8keaBr+WupCA8IGxvYmJ5Owor5qi557GsIDwgaGVkZ2U7CivppZggPCBncnVlbDsKK+eQg+eLgOeJqSA8IGdsb2JlOwor6aSqIDwgZmVhc3Q7CivppKYgPCBjYW5keTsKK+W4neeOiyA8IHJlZ2FsOwor5by35YWJIDwgZ2xhcmU7Civpo7YgPCBvZG91cjsKK+mjkSA8IHN0b3JtOwor6LuM6LehIDwgbG9jdXM7Civou4zot50gPCBnYXVnZTsKK+ijnOiXpSA8IHRvbmljOwor5bCN5pW16ICFIDwgcml2YWw7Civlub3mmpcgPCBnbG9vbTsKK+aTlOaHriA8IHdvcnJ5Owor5qau6K29IDwgaG9ub3I7CivprZTooZMgPCBtYWdpYzsKK+megyA8IGJvYXJkOwor6Z2mIDwgdGltaWQ7CivpnLEgPCBjbG91ZDsKK+mcmSA8IHNsZWV0Owor6ZaL56uvIDwgc3RhcnQ7Civpm57lhqAgPCBjcmVzdDsKK+mZvCA8IGlzbGV0Owor6Zi5IDwgYVwtcGVuOwor5YiH5pybIDwgY3JhdmU7CivlhqzpnZLmqLkgPCBob2xseTsKK+aomeexpCA8IGxhYmVsOwor6ZWfIDwgbGF0aGU7CivnhLblvowgPCBhZnRlcjsKK+mCo+WFkiA8IHRoZXJlOwor6ZKDIDwgbWV0YWw7CivlnJbooaggPCBjaGFydDsKK+WcjeijmSA8IGFwcm9uOwor57KX57OZIDwgY3J1ZGU7CivmnpzlrZDlh40gPCBqZWxseTsKK+Wkp+WcsOWcliA8IGF0bGFzOwor5Ymq5aCxIDwgc2NyYXA7Civopo/mqKEgPCBzY2FsZTsKK+mCo+S6myA8IHRob3NlOwor6YiHIDwgYW5cLWF4Owor6L6m5rOVIDwgbWVhbnM7CivoiLnosqggPCBjYXJnbzsKK+atjOWKhyA8IG9wZXJhOwor54OP5pyoIDwgZWJvbnk7Civpm4XlkITmm7ggPCBqYW1lczsKK+eyieethiA8IGNoYWxrOwor57WV5oqAIDwgc3R1bnQ7Civoh4npoLAgPCBjaGVlazsKK+eZveeZoSA8IGlkaW90Owor6KeS5bqmIDwgYW5nbGU7Civnmbznl4UgPCBvbnNldDsKK+aEn+WMlumkheS5viA8IHdhZmVyOwor5Z+65pysIDwgYmFzaWM7CivngavnhLAgPCBibGF6ZTsKK+aOoue0oiA8IHF1ZXN0Owor5aGr5aGeIDwgc3R1ZmY7Civns5bmvL8gPCBzeXJ1cDsKK+eyieeijiA8IGNyYXNoOwor6Iux5Luj54i+IDwgaW50ZWw7CivosqQgPCBzdGVwczsKK+iIiei1tyA8IGhlYXZlOwor6LGUIDwgcGx1bXA7CivpgJnlpKkgPCB0b2RheTsKK+iumSA8IGNoZWVyOwor6K2BIDwgbm9pc2U7CivlsLzpvo0gPCBueWxvbjsKK+avm+iMuOiMuCA8IGhhaXJ5Owor6ZqK5LyNIDwgcmFua3M7Civop5QgPCBjYXR0eTsKK+W5heW6piA8IHdpZHRoOwor5qmh5pyoIDwgb2FrZW47Civnsr7mtrIgPCBzZW1lbjsKK+W6iuWWriA8IHNoZWV0Owor5YmD5YiAIDwgcmF6b3I7CivooJcgPCBcKGFwZVwpOwor5bC85pel54i+IDwgbmlnZXI7Civon6IgPCBjYXVsazsKK+WHs+WtkCA8IHN0b29sOwor6Ia96YePIDwgbmVydmU7CivonZggPCBnZWNrbzsKK+WGjeacgyA8IGFkaWV1Owor5qqz5a2QIDwgYmluemk7CivlhanmrKEgPCB0d2ljZTsKK+S/rumjviA8IGFkb3JuOwor57Si5byVIDwgaW5kZXg7Civlg7XnoawgPCBzdGFyazsKK+iYkyA8IHRoeW1lOwor6JiLIDwgYXBwbGU7Civlt6XmnIMgPCB1bmlvbjsKK+ijgueXlSA8IGNoYXNtOwor57Sw5bCPIDwgcGV0dHk7CivpqYXpmaQgPCByZXBlbDsKK+aoueaelyA8IHdvb2RzOwor5r2b6KGMIDwgc25lYWs7CivlnoLmrbsgPCBkeWluZzsKK+aouuacqCA8IGJpcmNoOwor6I6/IDwgdGhvcm47CivlhazmnIMgPCBndWlsZDsKK+iLtiA8IHdlYXJ5Owor5pS26Z+z5qmfIDwgcmFkaW87CivmkJPmj4kgPCBrbmVhZDsKK+iHvSA8IGFcLXBpdDsKK+iHsiA8IGp1bXB5Owor6IebIDwgYnJvdGg7CivpgJnkupsgPCB0aGVzZTsKK+W6h+S9kSA8IGJsZXNzOwor5YGH6KOdIDwgZmVpZ247Civovq7lrZAgPCBwbGFpdDsKK+mZjeS4iyA8IGxvd2VyOwor6IWhIDwgbGluZXM7CivmqJPmoq8gPCBzdGFpcjsKK+esrOS4ieasoSA8IHRoaXJkOwor6auY6IGyIDwgYWxvdWQ7CivlsIrprZogPCB0cm91dDsKK+iClSA8IHRvdWdoOwor5Zue562UIDwgcmVwbHk7CivogJ4gPCBmbGFpbDsKK+aLm+W+heWToSA8IHVzaGVyOwor57Ch55+tIDwgYnJpZWY7Civnv70gPCB3aGlycjsKK+WbpOepjSA8IGhvYXJkOwor57+EIDwgd2luZHM7Civpp7/ppqwgPCBzdGVlZDsKK+e9iSA8IGFcLXBvdDsKK+iJsueLvCA8IHNhdHlyOwor57q7IDwgcmFtaWU7CivovYnmkq0gPCByZWxheTsKK+aJuemHjyA8IGJhdGNoOwor57iPIDwgcHVyc2U7CivntowgPCBjbG90aDsKK+earuW4tiA8IHN0cmFwOwor5pKS5L2GIDwgc2F0YW47CivlhrDloZQgPCBzZXJhYzsKK+eyjiA8IG1ldHJlOwor566bIDwgYnVnbGU7CivovJXmn5MgPCB0aW5nZTsKK+etsCA8IGNhYmxlOwor562mIDwgYVwta2V5Owor56uUIDwgbGl0cmU7Civmi5voh7QgPCBpbmN1cjsKK+S4gOe3muW+ruWFiSA8IGdsZWFtOwor56mnIDwgc2hlYWY7CivmoJfpvKAgPCBidW5ueTsKK+W3q+WphiA8IHdpdGNoOwor6ZaA5buKIDwgc3Rvb3A7CivnpLYgPCBhXC1qdWc7CivmhI/lpKfliKkgPCBpdGFseTsKK+ejiCA8IHJvY2t5Owor54OY5Lm+IDwgcGFyY2g7CivmsLTlubPpnaIgPCBwbGFuZTsKK+WFrOWwuiA8IG1ldGVyOwor55+TIDwgZmFpbnQ7Civnno8gPCByb3VuZDsKK+S6num6u+W4gyA8IGxpbmVuOwor55y5IDwgcHVwaWw7CivkupToirHlhavploAgPCBteXJpZDsKK+ebjuWPuCA8IG91bmNlOwor55q9IDwgc2N1cmY7CivpqI7ou4ogPCBjeWNsZTsKK+eyvuWtkCA8IHNwZXJtOwor55mhIDwgc2lsbHk7Civlh4zkuoIgPCBjaGFvczsKK+S/muiqniA8IHNsYW5nOwor57SF5YipIDwgYm9udXM7CivmupzlhrDpnosgPCBza2F0ZTsKK+eUjiA8IGJyaWNrOwor5L2c5ZO86IGyIDwgc25vcnQ7Civln4Plj4ogPCBlZ3lwdDsKK+ijvemAoOiAhSA8IG1ha2VyOwor55GUIDwgXChqYWRlOwor54+WIDwgY2FyYXQ7CivnrKboqJggPCB0b2tlbjsKK+WWqumQmCA8IGtuZWxsOwor6IS56LW3IDwgYnVsZ2U7CivlhazlmbggPCB0b25uZTsKK+eEoeeUn+WRvSA8IGluZXJ0Owor54mcIDwgYW5cLW94Owor54mUIDwgZ2FibGU7CivpharovrLmpa0gPCBkYWlyeTsKK+eUn+iLlCA8IG1vc3N5Owor6aiZ6KGTIDwgdHJpY2s7CivmiZPoo70gPCBmb3JnZTsKK+eBoyA8IGFcLWJheTsKK+iFkOidlSA8IHJ1c3R5Owor5rC06JK45rCjIDwgdmFwb3I7Civlha3ljYEgPCBzaXh0eTsKK+WFrOWNhyA8IGxpdGVyOwor5Ly86ZuqIDwgc25vd3k7Civnl4Xmr5IgPCB2aXJ1czsKK+aOqOW0hyA8IHZhbHVlOwor6Lev57eaIDwgcm91dGU7Civlt6jkurogPCBnaWFudDsKK+WDj+eJh+ewvyA8IGFsYnVtOwor5omL6JedIDwgY3JhZnQ7CivotIjoiIfogIUgPCBnaXZlcjsKK+aWnOe0i+i7n+WRoiA8IHR3ZWVkOwor5rGzIDwgaGVuYW47CivlvrflhYvolqnmlq8gPCB0ZXhhczsKK+mmrOmBlCA8IG1vdG9yOwor5Zub5pyIIDwgYXByaWw7CivmrpEgPCBzd29vbjsKK+WFtuS4rSA8IGFtb25nOwor5q2IIDwgc29uZ3M7CivmrLggPCBzaWdoczsKK+a7kee/lCA8IGdsaWRlOwor5aSp6JeN6ImyIDwgYXp1cmU7CivoobDmlZcgPCBkZWNheTsKK+iLm+WIuyA8IGhhcnNoOwor5qqoIDwgbWFuZ287CivnqbrplpMgPCBzcGFjZTsKK+aolSA8IHNocnViOwor5o6g5aWqIDwgaGFycnk7Civlr5/oprogPCBhd2FyZTsKK+Wxi+ewtyA8IGVhdmVzOwor5qC86KiAIDwgbWF4aW07CivmpYUgPCBidWFyZDsKK+eTo+iGnCA8IHZhbHZlOwor5qSIIDwgY2VkYXI7Civmo4EgPCBqb2lzdDsKK+WcjeW3viA8IHNjYXJmOwor5a+T6KiAIDwgZmFibGU7CivooqvlrZAgPCBxdWlsdDsKK+agjSA8IGFcLWxvdDsKK+Wwj+iIjCA8IHV2dWxhOwor5bCx57eSIDwgcmVhZHk7Civou4DlubkgPCB0cnVuazsKK+aJi+iCmCA8IGVsYm93Owor5a6i6LuKIDwgY29hY2g7Civoib7lp6wgPCBhZ2dpZTsKK+mjm+ihjOWToSA8IHBpbG90Owor5Zyo5aSWIDwgb3V0ZXI7CivltIfmi5wgPCBhZG9yZTsKK+WFheS7vSA8IGFtcGxlOwor6auY5piOIDwgc21hcnQ7Civnl5vmgaggPCBhYmhvcjsKK+eXm+W/qyA8IGpvbGx5Owor5o2Q6LSI6ICFIDwgZG9ub3I7CivmlZQgPCBnYXZlbDsKK+ilv+ePreeJmSA8IHNwYWluOwor55S354i1IDwgYmFyb247Civlm7rlrpogPCBmaXhlZDsKK+Wwlue0sCA8IHRhcGVyOwor6Iqx5L+PIDwgZmFuY3k7CivotavojLIgPCBoZXJ0ejsKK+aMjCA8IGZpZ2h0Owor5o+Q5aSa5pu4IDwgdGl0dXM7CivlnI3ln44gPCBzaWVnZTsKK+aJoiA8IGNhcGVyOwor6Ie05pWsIDwgZ3JlZXQ7Civou43lnJggPCBjb3JwczsKK+aEgyA8IHJlbGF4Owor5o6S5YiXIDwgYXJyYXk7Civkv4/nmq4gPCBzYXVjeTsKK+iInuW8iiA8IGZyYXVkOwor5oK+IDwgbmFpdmU7Civoo5zkuIEgPCBwYXRjaDsKK+eUn+m6teezsCA8IGRvdWdoOwor5ru/6Lqr5aG15Z+DIDwgZHVzdHk7CivmvL/mnpwgPCBiZXJyeTsKK+mYv+aLieaRqSA8IGFsYW1vOwor6a2F5YqbIDwgY2hhcm07CivmvILmuLggPCBkcmlmdDsKK+W9kSA8IHNub3V0Owor6Kq/5ZGz6IKJ5rGBIDwgZ3Jhdnk7CivmvZHmjokgPCBzcGlsbDsKK+W4kiA8IGFcLWJhZzsKK+izh+mHkSA8IGZ1bmRzOwor55S36auY6Z+zIDwgdGVub3I7CivkuIDpu57lhZIgPCBhXC1iaXQ7Civltp4gPCByaWRnZTsKK+iHquaIkSA8IHNlbGZcLTsKK+aenOmFkiA8IGNpZGVyOwor5bSaIDwgaGlsbHk7CivmjbflhYsgPCBjemVjaDsKK+eUqOazlSA8IHVzYWdlOwor5a2Y6LKoIDwgc3RvY2s7Civpq5jlsJogPCBub2JseTsKK+aLjeaTiiA8IHNtYWNrOwor5auaIDwgc2Nvcm47CivlsI/mqLnmnpcgPCBncm92ZTsKK+W4g+iQiueIviA8IGJsYWlyOwor5Zyo77mN5LmL5LiLIDwgYmVsb3c7CivlnKjvuY3kuYvkuIogPCBhYm92ZTsKK+a/gOWFiSA8IGxhc2VyOwor5a6J6I+vIDwgYW53YXI7Civmi4LmjoMgPCB3aGlzazsKK+iIueWPqiA8IHNoaXBzOwor5aOGIDwgc3RpZmY7CivlorogPCB3YWxsczsKK+WijSA8IHBhaW50Owor5aGZIDwgdHJ1bHk7Civlm5vljYEgPCBmb3J0eTsKK+WdsCA8IHdpbGRzOwor5pKl54Gr5qONIDwgcG9rZXI7CivlmbogPCBzdG9yeTsKK+WXkCA8IGFsYXNcITsKK+a1gemrlCA8IGZsdWlkOwor5Za0IDwgaGVsbG87CivllbIgPCBhXC1mZXc7CivllY0gPCBjcmVhazsKK+WTtiA8IGJsZWF0Owor5ZKNIDwgbGF1Z2g7CivlkLAgPCBjbGFuZzsKK+evhOWcjSA8IHJhbmdlOwor5Y66IDwgdG9cLWdvOwor5Y6WIDwgYnVsa3k7CivkuInoibLntKvnvoXomK0gPCBwYW5zeTsKK+S/ruaUuSA8IGFtZW5kOwor5pyJ6aKoIDwgd2luZHk7CivpqZrmhYwgPCBwYW5pYzsKK+WcqOaXgemCiiA8IGFzaWRlOwor5YanIDwgYVwtYnVkOwor5Li76aGMIDwgdGhlbWU7Civnh5/mpa3lk6EgPCBjbGVyazsKK+WTquijoSA8IHdoZXJlOwor5ZyL6Zqb6Zu75aCx6Zu76Kmx5ZKo6Kmi5aeU5ZOh5pyDIDwgY2NpdHQ7CivorabloLHlmaggPCBzaXJlbjsKK+eVtuWcsCA8IGxvY2FsOwor5YCJ5bqrIDwgZGVwb3Q7CivkvbogPCBmYWlyeTsKK+S8iue0oiA8IGFlc29wOwor5YuV5oWL5b2x5YOPIDwgdmlkZW87CivkuInop5LmtLIgPCBkZWx0YTsKK+eskeaelyA8IGh1bW9yOwor5aiB54i+5aOrIDwgd2FsZXM7Civmo5rlrZAgPCBzaGFjazsKK+S2hyA8IGFcLXJhdDsKK+iCr+WwvOS6niA8IGtlbnlhOwor55S35a2QIDwgYVwtbWFuOwor6IKh56WoIDwgc2hhcmU7Civks7EgPCBkdWNrczsKK+m6teWMheeariA8IGNydXN0Owor6IKl56KpIDwgc3RvdXQ7Civkr40gPCBib25lczsKK+efs+WNl+aouSA8IGhlYXRoOwor5ou05L2PIDwgaGl0Y2g7CivooKLkuosgPCBmb2xseTsKK+SquyA8IGFcLWNhcDsKK+SplSA8IGNsb2dzOwor5LiL6ZuoIDwgcmFpbnk7CivpqZrlpYcgPCBhbWF6ZTsKK+SouSA8IHN3aWZ0Owor5Zm05Ye6IDwgc3BvdXQ7Civkp6ogPCBzaXNzeTsKK+SmniA8IGV4dHJhOwor5KWTIDwgYVwtaG9lOwor5KSZIDwgZHJlZ3M7CivohbHlrZAgPCBzaW5ldzsKK+abtOmBsiA8IGxhdGVyOwor6buR6LKCIDwgc2FibGU7CivknZIgPCBhXC1zb3c7Civkmp8gPCBob3JuczsKK+ieuue1sumHmCA8IHNjcmV3Owor5JqJIDwgb1wtc2VlOwor5rKZ6b6NIDwgc2Fsb247Civkl5UgPCBiZW5kczsKK+S/neWnhiA8IG5hbm55Owor5ZSx6Kmp54+tIDwgY2hvaXI7Civmi4nkuIEgPCBsYXRpbjsKK+SRgSA8IGZhdHR5Owor5pyD6KuHIDwgdGFsa3M7CivohIjmkI8gPCBwdWxzZTsKK+SPsyA8IG9sZWluOwor5I+vIDwgbW9sZXM7CivkjaUgPCBzbW9reTsKK+mHkemrriA8IGJsb25kOwor5I2MIDwgYVwtamFyOwor5LiJ5Y2D5LqU55m+IDwgM1wtNTAwOwor5IyRIDwgdGlnaHQ7CivkjJAgPCByb3BlczsKK+SKuyA8IHNpbGt5Owor5bCP5bGLIDwgY2FiaW47CivkiIkgPCBhXC1mYW47CivlmI7lmI4gPCBxdWFjazsKK+SEpSA8IGFcLWdvZDsKK+SEoiA8IHBpb3VzOwor5L6/5aOrIDwgcGVubnk7CivogLbnqYwgPCBqZXN1czsKK+SDmSA8IHJvY2tzOwor6Yu855C0IDwgcGlhbm87CivpqI7lo6sgPCByaWRlcjsKK+aJi+WllyA8IGdsb3ZlOwor6Lef5YmNIDwgZnJvbnQ7Civkv67liaogPCBwcnVuZTsKK+O+miA8IGl0Y2h5Owor6aaZ5paZIDwgc3BpY2U7CivkvLrmnI0gPCBzZXJ2bzsKK+enn+e0hCA8IGxlYXNlOwor47yPIDwgYVwtYmFkOwor5bCW5aGUIDwgc3BpcmU7Civll7blmLAgPCBzZXJnZTsKK+axoem7niA8IHN0YWluOwor5rOV6YOOIDwgZnJhbmM7CivmtLvokZcgPCBhbGl2ZTsKK+O6gyA8IGFcLWRvZzsKK+O5uyA8IHB1cHB5Owor47mLIDwgYVwtY293Owor6IKF5riFIDwgcHVyZ2U7CivjuIMgPCBhXC1kb3Q7CivnmbzniaLpqLcgPCB3aGluZTsKK+a3ueaykiA8IGZsdXNoOwor56ys5Y2BIDwgdGVudGg7CivmmYLpq6YgPCB2b2d1ZTsKK+aJk+WRvCA8IHNub3JlOwor47C8IDwgZ3JlZWQ7CivppJjnh7wgPCBlbWJlcjsKK+OvtyA8IGRhdGVzOwor56ys5YWtIDwgc2l4dGg7CivjrqUgPCBzYWlsczsKK+e+veiOliA8IHF1aWxsOwor5bCB5ZywIDwgbWFub3I7CivpoYzop6MgPCBub3RlczsKK+mVt+mguOeTtiA8IGZsYXNrOwor5LiA6KGMIDwgcGFydHk7CivjqJcgPCBhbGVydDsKK+OogyA8IGFcLXJvdzsKK+Wwj+WQgyA8IHNuYWNrOwor5a6J5YWo55CG5LqL5pyDIDwgdGhlXC11Owor46eNIDwgYWxpa2U7Civnj43nj6AgPCBwZWFybDsKK+m8u+eFmSA8IHNudWZmOwor5rSL6JSlIDwgb25pb247CivnpLrlqIHpgYvli5UgPCByYWxseTsKK+i2o+WKhyA8IGZhcmNlOwor5L2O5buJIDwgY2hlYXA7Civlk4Dnl5sgPCBncmllZjsKK+esrOS6lCA8IGZpZnRoOwor56ys5LmdIDwgbmludGg7CivjobYgPCBkd2VsbDsKK+OhkCA8IGZsYWdzOwor46GMIDwgYVwtaGF0Owor46GHIDwgY29sYXI7CivmnInnt5ogPCB3aXJlZDsKK+OeviA8IGFcLW51bjsKK+OelSA8IGNoaXBzOwor456SIDwgbHVzdHk7CivmiLLliocgPCBkcmFtYTsKK+i8ieiyqOaxvei7iiA8IGxvcnJ5Owor572p6KGrIDwgc21vY2s7CivjlqQgPCB3cmF0aDsKK+OVjiA8IGNhdmVzOwor55q655yJ6aCtIDwgc2Nvd2w7Civjk50gPCBhXC1sYXc7Civjk4EgPCBhXC1uZXQ7CivjkqkgPCBuYWtlZDsKK+OSjCA8IGFsb25nOwor546H55u0IDwgZnJhbms7CivjkLEgPCBidXNoeTsKK+aZr+ixoSA8IHNjZW5lOwor6LGh54mZIDwgaXZvcnk7Civllp3lj7EgPCBjaGlkZTsKK+eQtOW8piA8IGNob3JkOwor542O56ugIDwgbWVkYWw7CivlrZDmiL8gPCBvdmFyeTsKK+aAquiqlSA8IGZyZWFrOwor5rex5bqmIDwgZGVwdGg7CivljYjppJAgPCBsdW5jaDsKK+eNteeKrCA8IGhvdW5kOwor55CG5oOzIDwgaWRlYWw7CivogL3mk7EgPCB0YXJyeTsKK+aXhemkqCA8IGhvdGVsOwor6aas5L6GIDwgbWFsYXk7CivppqzkvJUgPCBncm9vbTsKK+Wkp+m5vyA8IG1vb3NlOwor6IGW5b6SIDwgc2FpbnQ7CivkuJbnlYwgPCB3b3JsZDsKK+S8iuaWr+iYreaVmSA8IGlzbGFtOwor5rib5Y67IDwgbWludXM7CivkurrmgKcgPCBodW1hbjsKK+aFiOaCsiA8IG1lcmN5Owor6KuW6aGMIDwgdG9waWM7CivljaHou4ogPCB0cnVjazsKK+e9jOeynyA8IHBvcHB5Owor5paR6aasIDwgemVicmE7CivlpZfpkJggPCBjaGltZTsKK+WuiOWAmSA8IGFiaWRlOwor5p2/5bKpIDwgc2xhdGU7CivpoK3nmq4gPCBzY2FscDsKK+WNkeizpCA8IGxvd2x5Owor5Y2H6LW3IDwgaG9pc3Q7CivmtYHmtarogIUgPCByb3ZlcjsKK+iyneWvpyA8IGJlbmluOwor5peL6L2JIDwgd2hpcmw7CivngYzmnKjlj6IgPCBzY3J1YjsKK+aXpeiomCA8IGRpYXJ5Owor5LmD5pivIDwgdG9cLWJlOwor5paw6L+RIDwgbmV3bHk7CivlkLjmsKMgPCBzbmlmZjsKK+iqmOmZtyA8IHNuYXJlOwor5p2T5a2QIDwgc2Nvb3A7CivmhJ/lrpggPCBzZW5zZTsKK+acrOW9sSA8IHVtYnJhOwor5Lq65ZOhIDwgc3RhZmY7CivnuozoqIIgPCByZW5ldzsKK+abtOaUuSA8IGFsdGVyOwor5ZCJ5pmu6LO95Lq6IDwgZ3lwc3k7CivmlLbppIogPCBhZG9wdDsKK+aAqueVsCA8IHdlaXJkOwor6LKT5ZKqIDwga2l0dHk7CivmsrzmvqQgPCBnbGFkZTsKK+eijuW4g+ainSA8IHNocmVkOwor5rGh56miIDwgbmFzdHk7CivkuInmnIggPCBtYXJjaDsKK+WFp+WcqOeahCA8IGlubmVyOwor6Zu76YO1IDwgZW1haWw7Civli53pgY4gPCBleGNlbDsKK+itieeroCA8IGJhZGdlOwor5rW35ZywIDwgaGFpdGk7Civpm7fpgZQgPCByYWRhcjsKK+mssemHkemmmSA8IHR1bGlwOwor5aSx6KqkIDwgbGFwc2U7CivpgorpmpsgPCBsaW1pdDsKK+eLgueGsSA8IGNyYXplOwor5LqU5Y2BIDwgZmlmdHk7Civpm6rojITnhZkgPCBjaWdhcjsKK+adseS6rCA8IHRva3lvOwor5q+S6JuHIDwgdmlwZXI7CivpoIzmrYwgPCBjYXJvbDsKK+WSleWalSA8IGdydW50Owor5LiA5omTIDwgZG96ZW47Civoqabph5EgPCBhc3NheTsKK+mgreaaiCA8IGRpenp5Owor5ZC556yb6ICFIDwgcGlwZXI7CivkuIDlt7TmjowgPCBzcGFuazsKK+eEpum7niA8IGZvY3VzOwor57Wx5rK76ICFIDwgcnVsZXI7Civnupbntq0gPCBmaWJlcjsKK+S6i+S7tiA8IGV2ZW50Owor6YCX6bueIDwgY29tbWE7Civlkoblk64gPCBncm93bDsKK+WRvOWPq+iBsiA8IHdob29wOwor6YKP6LyvIDwgbG9naWM7Civmm7Tlo54gPCB3b3JzZTsKK+W6p+WPs+mKmCA8IG1vdHRvOwor5LiJ56ic6Y+hIDwgcHJpc207CivkuK3lnIsgPCBjaGluYTsKK+WkmuiRiSA8IGxlYWZ5Owor5LiA5bGkIDwgbGF5ZXI7Civnh7vogokgPCBiYWNvbjsKK+aToumZniA8IGV4YWx0Owor5oSb5YWL5pav5YWJIDwgeFwtcmF5Owor5aSn6IW/IDwgdGhpZ2g7CivmnKzkurogPCBpXC1cKG1lOwor6Z+75paHIDwgdmVyc2U7CivnhorospMgPCBwYW5kYTsKK+aWkee+miA8IGdvcmFsOwor55+u5aKp5aKpIDwgcHVkZ3k7CivokaHokIQgPCBncmFwZTsKK+eNjuWTgSA8IGF3YXJkOwor6buP5L2PIDwgY2xpbmc7Civlj6/mgJUgPCBhd2Z1bDsKK+mBjumBkyA8IGFpc2xlOwor56Sm5belIDwgbWluZXI7CivmrYzorKAgPCBjaGFudDsKK+aymeaLiSA8IHNhbGFkOwor5paX56+3IDwgY2xvYWs7CivmnIjku70gPCBtb250aDsKK+mbm+iPiiA8IGRhaXN5Owor5YyF56mAIDwgbWFpemU7CivpmL/niL7ms5UgPCBhbHBoYTsKK+mAvOi/qyA8IGZvcmNlOwor5aqS5LuLIDwgbWVkaWE7Civlk6rkuIDlgIsgPCB3aGljaDsKK+aVmee+qSA8IGNyZWVkOwor5ZCI6IKh57eaIDwgdHdpbmU7CivpoIHlsqkgPCBzaGFsZTsKK+eRnuWFuOS6uiA8IHN3ZWRlOwor5Y6t5oOhIDwgbG9hdGg7Civkvb/nvp7mhKcgPCBhYmFzaDsKK+aYj+aalyA8IGR1c2t5Owor5q+U546HIDwgcmF0aW87CivpnI7nnLwgPCBibGluazsKK+aZtOWkqSA8IHN1bm55Owor55S35a2Q5rCjIDwgbWFubHk7Civkvb/lqJvmqIIgPCBhbXVzZTsKK+aciSA8IGhhdmU7Civnn6UgPCBrbm93Owor6L+ZIDwgdGhpczsKK+efnCA8IHBpdHk7Civlv5kgPCBidXN5Owor5p2lIDwgY29tZTsKK+i/kSA8IG5lYXI7CivpgZMgPCBwYXRoOwor5LmfIDwgYWxzbzsKK+aXtiA8IHRpbWU7CivlubQgPCB5ZWFyOwor5567IDwgbG9vazsKK+i+uiA8IGVkZ2U7CivlsLEgPCBqdXN0Owor6YKjIDwgdGhhdDsKK+eUnyA8IGxpZmU7Civoh6ogPCBzZWxmOwor556sIDwgd2luazsKK+i/hyA8IHBhc3M7CivlvqogPCBvYmV5Owor5b6eIDwgZnJvbTsKK+WkmiA8IG11Y2g7Civlpb0gPCBnb29kOwor6LW3IDwgcmlzZTsKK+WPqiA8IG9ubHk7CivkvZwgPCBtYWtlOwor5b2TIDwgYmVhcjsKK+W9oiA8IGZvcm07CivlvIAgPCBvcGVuOwor5omLIDwgaGFuZDsKK+W8sSA8IHdlYWs7CivmnKwgPCByb290Owor5aS0IDwgaGVhZDsKK+ecnyA8IHJlYWw7CivpnaIgPCBmYWNlOwor5YWsIDwgZmFpcjsKK+WQjCA8IHNhbWU7CivliqggPCBtb3ZlOwor6ZW/IDwgbG9uZzsKK+i8iSA8IGxvYWQ7CivlsIYgPCB3aWxsOwor6LqrIDwgYm9keTsKK+mrmCA8IGhpZ2g7CivmioogPCBob2xkOwor55ulIDwgd2FzaDsKK+aciCA8IG1vb247Civnp40gPCBzZWVkOwor6LuNIDwgYXJteTsKK+i7iiA8IGNhcnQ7Civpg6ggPCBwYXJ0Owor5ZCNIDwgbmFtZTsKK+eariA8IHNraW47CivmnLogPCBkZXNrOwor57uZIDwgZ2l2ZTsKK+etiSA8IHJhbms7CivluqcgPCBzZWF0Owor5b6IIDwgdmVyeTsKK+acgCA8IG1vc3Q7CivlupcgPCBzaG9wOwor6LqNIDwgc2tpcDsKK+i1sCA8IHdhbGs7Civlm5sgPCBmb3VyOwor6ZeoIDwgZ2F0ZTsKK+S4nCA8IGVhc3Q7CivluoEgPCBoYWxsOwor6KW/IDwgd2VzdDsKK+W5syA8IGZsYXQ7CivlkKwgPCBoZWFyOwor5bm4IDwgbHVjazsKK+i5tCA8IGtpY2s7CivkupQgPCBmaXZlOwor5bi3IDwgdGVudDsKK+W4tiA8IGJlbHQ7CivluIwgPCByYXJlOwor6LiKIDwgbGVhcDsKK+S5piA8IGJvb2s7CivkuZ0gPCBuaW5lOwor6LezIDwganVtcDsKK+i3ryA8IHJvYWQ7Civnl6kgPCB0aGluOwor5rS7IDwgbGl2ZTsKK+W3piA8IGxlZnQ7Civlt6MgPCBuZXN0Owor6KGoIDwgc2hvdzsKK+i3nyA8IGhlZWw7Civnl5sgPCBwYWluOwor55eVIDwgc2NhcjsKK+eXkiA8IGl0Y2g7CivmhJ8gPCBmZWVsOwor6LazIDwgZm9vdDsKK+mHkSA8IGdvbGQ7CivkvZUgPCB3aGF0Owor5pu0IDwgbW9yZTsKK+eWiyA8IHJvbGw7CivlgZogPCB3b3JrOwor6K6hIDwgcGxhbjsKK+eOiyA8IGtpbmc7CivlkIQgPCBlYWNoOwor55WZIDwgc3RvcDsKK+eVjyA8IGZlYXI7CivnlLcgPCBtYWxlOwor6aOOIDwgd2luZDsKK+W0lyA8IHBvc3Q7Civmr5sgPCBoYWlyOwor5bOwIDwgcGVhazsKK+eIsSA8IGxvdmU7Civnk6YgPCB0aWxlOwor6LOjIDwgc2VsbDsKK+izgyA8IHJlbnQ7CivosrggPCBsZW5kOwor5bK4IDwgYmFuazsKK+e7kyA8IGtub3Q7CivlsqwgPCBjYXBlOwor5rWBIDwgZmxvdzsKK+iypyA8IHBvb3I7CivpnZIgPCBibHVlOwor566hIDwgcGlwZTsKK+i/niA8IGpvaW47CivpmJ8gPCB0ZWFtOwor5bGRIDwgYml0czsKK+mihiA8IG5lY2s7CivlsYggPCBiZW5kOwor5bC+IDwgdGFpbDsKK+WNiiA8IGhhbGY7CivlgJkgPCB3YWl0Owor5q2lIDwgc3RlcDsKK+a3sSA8IGRlZXA7CivljLogPCBhcmVhOwor5bCLIDwgc2VlazsKK+eQgyA8IGJhbGw7CivlkYogPCB0ZWxsOwor5a+4IDwgaW5jaDsKK+a7oSA8IGZpbGw7CivmnY4gPCBwbHVtOwor5oGvIDwgcmVzdDsKK+WvkiA8IGNvbGQ7Civlr4QgPCBzZW5kOwor5Y+WIDwgdGFrZTsKK+WupCA8IHJvb207CivlrpsgPCBzZWVtOwor5a2pIDwgYmFieTsKK+W5vyA8IHdpZGU7CivnjokgPCBqYWRlOwor54GrIDwgZmlyZTsKK+iugCA8IHJlYWQ7Civorb0gPCBmYW1lOwor5YiZIDwgcnVsZTsKK+WksSA8IGxvc2U7CivljIUgPCB3cmFwOwor54y2IDwgbGlrZTsKK+iQvSA8IGZhbGw7CivmtY4gPCBoZWxwOwor6KyhIDwgc2luZzsKK+e8liA8IGtuaXQ7CivosIggPCB0YWxrOwor5ouJIDwgcHVsbDsKK+eLvCA8IHdvbGY7CivmnYAgPCBraWxsOwor5auMIDwgaGF0ZTsKK+WFiyA8IGdyYW07CivlhrIgPCBzb2FyOwor5o6oIDwgcHVzaDsKK+ensCA8IGNhbGw7CivoqaYgPCB0ZXN0Owor5Y+3IDwgbWFyazsKK+S6miA8IGFzaWE7CivmuK8gPCBwb3J0Owor6IisIDwgc29ydDsKK+eIqiA8IGNsYXc7CivliJogPCBoYXJkOwor6ZmGIDwgbGFuZDsKK+ehriA8IHN1cmU7CivlhbcgPCB0b29sOwor5aiBIDwgcG9tcDsKK+e6vyA8IGxpbmU7Civop6YgPCBidXR0Owor6KeSIDwgaG9ybjsKK+eHkiA8IGJ1cm47CivlprsgPCB3aWZlOwor6ZyAIDwgbmVlZDsKK+mFkiA8IHdpbmU7Civpk4EgPCBpcm9uOwor6KaXIDwgcGVlazsKK+WMuyA8IGN1cmU7CivopbIgPCByYWlkOwor54WuIDwgY29vazsKK+WcnyA8IHNvaWw7Civova8gPCBzb2Z0Owor54WkIDwgY29hbDsKK+WllyA8IGNhc2U7CivmiLcgPCBkb29yOwor6IOMIDwgYmFjazsKK+aalyA8IGRhcms7CivpobsgPCBtdXN0Owor6KO4IDwgYmFyZTsKK+agkSA8IHRyZWU7CivmsokgPCBzaW5rOwor6IGMIDwgZHV0eTsKK+e7hiA8IGZpbmU7Civoo5wgPCBtZW5kOwor6KKiIDwgcm9iZTsKK+aXgSA8IHNpZGU7CivlobUgPCBkdXN0Owor5aGpIDwgc2FsdDsKK+atjCA8IHNvbmc7CivngYwgPCBwb3VyOwor5aGAIDwgd2FsbDsKK+WgpCA8IGRpa2U7CivmgbYgPCBldmlsOwor5aCGIDwgaGVhcDsKK+aFoiA8IHNsb3c7CivloIAgPCBjYXZlOwor6J+7IDwgYW50czsKK+iXjyA8IGhpZGU7Civln4sgPCBidXJ5Owor5r65IDwgY2FsbTsKK+WeoiA8IGRpcnQ7Civono0gPCBtZWx0Owor5r2uIDwgdGlkZTsKK+aVkSA8IHNhdmU7CivkuJ0gPCBzaWxrOwor6b2KIDwgZXZlbjsKK+m8uyA8IG5vc2U7CivmvKwgPCBzb2FrOwor6byTIDwgZHJ1bTsKK+a8jyA8IGxlYWs7CivlvZUgPCBjb3B5Owor6YGHIDwgbWVldDsKK+iIuSA8IHNoaXA7Civpu7QgPCBtb2xkOwor5ru0IDwgZHJpcDsKK+mbqCA8IHJhaW47Civom5kgPCBmcm9nOwor5ruRIDwgc2xpcDsKK+m6uyA8IGhlbXA7CivomqQgPCBmbGVhOwor6bm/IDwgZGVlcjsKK+aymSA8IHNhbmQ7CivlmZsgPCBiaXRlOwor5ouNIDwgY2xhcDsKK+aOiSA8IHR1cm47Civlk60gPCB3ZWVwOwor5ZiGIDwgc2lnaDsKK+WNiCA8IG5vb247CivljaEgPCBjYXJkOwor6ZuqIDwgc25vdzsKK+a3tSA8IGd1bGY7CivmtrwgPCBjb29sOwor5Yi6IDwgc3RhYjsKK+iWqiA8IGZ1ZWw7CivpsbwgPCBmaXNoOwor5ZaYIDwgcGFudDsKK+ebmCA8IHRyYXk7CivolpQgPCByb3NlOwor5p62IDwgcmFjazsKK+asviA8IGl0ZW07CivmtaogPCB3YXZlOwor6JWpIDwgcG9uZDsKK+a0qiA8IHZhc3Q7CivplYcgPCB0b3duOwor5rWEIDwgcHVyZTsKK+aXhSA8IHRyaXA7CivllL4gPCBzcGl0Owor6aqoIDwgYm9uZTsKK+WUliA8IGR1bWI7CivptIkgPCBjcm93Owor5ZSHIDwgbGlwczsKK+azsyA8IGRpdmU7Civlk7IgPCB3aXNlOwor5ZOpIDwgbWlsZTsKK+WcoyA8IGhvbHk7Civps6UgPCBiaXJkOwor5pmTIDwgZGF3bjsKK+ayvCA8IGxha2U7Civohb8gPCBsZWdzOwor5o6iIDwgZmluZDsKK+iRpiA8IHJlZWQ7CivmsaAgPCBwb29sOwor6JGJIDwgbGVhZjsKK+adnyA8IGJpbmQ7CivlkYYgPCBkdWxsOwor5ZC7IDwga2lzczsKK+WQuSA8IGJsb3c7CivmsI8gPCBjbGFuOwor562+IDwgc2lnbjsKK+awiCA8IGZlbHQ7CivlpbYgPCBtaWxrOwor6I+pIDwgaGVyYjsKK+WPoiA8IGJ1c2g7CivmjIIgPCBoYW5nOwor6IiqIDwgc2FpbDsKK+aLsyA8IGZpc3Q7CivkuZggPCByaWRlOwor5Z2AIDwgc2l0ZTsKK+avhiA8IGJlYXQ7CivprYIgPCBzb3VsOwor5LmUIDwgdGFsbDsKK+eyriA8IGZvb2Q7CivmlY8gPCBmYXN0Owor6IyOIDwgc3RlbTsKK+mbtiA8IHplcm87Civli74gPCBob29rOwor5LmDIDwgdGhlbjsKK+aKrCA8IGxpZnQ7Civoi5QgPCBtb3NzOwor5YaSIDwgcmlzazsKK+aqoyA8IG1hc3Q7Civpl60gPCBzaHV0Owor56KXIDwgYm93bDsKK+WJpSA8IHBlZWw7Civom4sgPCBlZ2dzOwor5L+DIDwgdXJnZTsKK+adsCA8IGhlcm87CivoiJ8gPCBib2F0Owor6L+fIDwgbGF0ZTsKK+i1liA8IHJlbHk7Civpp5IgPCBjb2x0Owor6aa0IDwgdGFtZTsKK+iGnSA8IGtuZWU7Civmi5YgPCBkcmFnOwor5piPIDwgZHVzazsKK+aIkiA8IHdhcm47CivpobUgPCBwYWdlOwor5LqVIDwgd2VsbDsKK+iEhyA8IHJpYnM7CivkuY8gPCBsYWNrOwor6IOeIDwgd29tYjsKK+aiqCA8IHBlYXI7CivphbggPCB0YXJ0Owor5qG2IDwgcGFpbDsKK+e7qSA8IHNwaW47Civmk6YgPCB3aXBlOwor5q63IDwgbWFueTsKK+iAlSA8IHBsb3c7CivmmpYgPCB3YXJtOwor6ZSBIDwgbG9jazsKK+egjSA8IGhhY2s7CivmhYggPCBraW5kOwor5765IDwgc291cDsKK+merSA8IHdoaXA7CivnvqggPCBlbnZ5Owor5pKkIDwgb21pdDsKK+etuSA8IGNoaXA7CivmnZYgPCBjYW5lOwor6ZywIDwgaGFpbDsKK+a7iyA8IGdyb3c7CivosLEgPCBsaXN0Owor5LiYIDwgaGlsbDsKK+adhiA8IHBvbGU7CivpmoggPCBjb3ZlOwor57qCIDwgZWRpdDsKK+WUiSA8IGFsYXM7CivnrLwgPCBjYWdlOwor57mqIDwgZHJhdzsKK+e5qSA8IHJvcGU7Civnn78gPCBtaW5lOwor6ZWWIDwgZGFydDsKK+WFhiA8IG9tZW47CivmiqsgPCB3ZWFyOwor5YC6IDwgZGVidDsKK+WgoSA8IGZvcnQ7CivpooIgPCBsYXVkOwor57WGIDwgbG9vcDsKK+mSiSA8IG5haWw7Civlk4QgPCBjb2F4Owor6ZODIDwgYmVsbDsKK+WlkSA8IGRlZWQ7Civmh5IgPCBsYXp5Owor54yOIDwgaHVudDsKK+aRuiA8IGZvbGQ7CivnrosgPCBub3RlOwor5o2yIDwgY3VybDsKK+engyA8IGJhbGQ7CivpuK0gPCBkdWNrOwor5ZC8IDwgcm9hcjsKK+equiA8IHBlZXA7Civlj6AgPCBwaWxlOwor6YqRIDwgbWlsbDsKK+mAuCA8IGZsZWU7CivotLEgPCBtZWFuOwor54uuIDwgbGlvbjsKK+WmriA8IG1haWQ7CivnqpEgPCBraWxuOwor5oW+IDwgbHVzdDsKK+eltyA8IHByYXk7CivouYQgPCBob29mOwor54OkIDwgYmFrZTsKK+WwrCA8IGxpbXA7CivpgLEgPCB3ZWVrOwor5oCgIDwgaWRsZTsKK+iDtiA8IGdsdWU7CivmorMgPCBjb21iOwor5ZWkIDwgYmVlcjsKK+mFvyA8IGJyZXc7CivmjaMgPCBodWxsOwor5ZmiIDwgbW9hbjsKK+eqnyA8IGhvbGU7CivlhZEgPCBjYXNoOwor5rK4IDwgYm9pbDsKK+eYviA8IHJhc2g7Civlpp4gPCBnaXJsOwor5bicIDwgZmxhZzsKK+iVviA8IGJ1ZHM7Civpk4UgPCBsZWFkOwor6ZSjIDwgZ29uZzsKK+WXpiA8IHN1Y2s7CivovbQgPCBheGxlOwor5raVIDwgdGVhcjsKK+WQhiA8IGJhd2w7CivogYsgPCBkZWFmOwor5YufIDwgbGV2eTsKK+eagiA8IHNvYXA7Civon7kgPCBjcmFiOwor5ZSgIDwgY2hhdDsKK+WVgyA8IGduYXc7CivnvpQgPCBsYW1iOwor6ZSIIDwgcnVzdDsKK+iFkyA8IGNhbGY7CivpqqEgPCBtdWxlOwor6YaHIDwgcmljaDsKK+e6rCA8IHdvb2Y7Civom6QgPCBjbGFtOwor5ZGxIDwgd2FpbDsKK+aIjiA8IGFybXM7CivolLwgPCBsdXNoOwor56SBIDwgcmVlZjsKK+mXqSA8IGJvbHQ7Civot5sgPCBsYW1lOwor5YGMIDwgdGh1czsKK+eujSA8IGhvb3A7Civon6AgPCBjb2lsOwor5o6CIDwgaGVmdDsKK+mBkCA8IGFmYXI7CivlkKAgPCBiYXJrOwor6Ju+IDwgbW90aDsKK+iAmCA8IHdlZWQ7Civon74gPCB0b2FkOwor562PIDwgcmFmdDsKK+mypCA8IGNhcnA7CivoiosgPCB0YXJvOwor6bmqIDwgd3JlbjsKK+iclSA8IG1vbHQ7CivnhIogPCB3ZWxkOwor6ICZIDwgcmFrZTsKK+e8hCA8IHNlYWw7CivmvKkgPCBlZGR5Owor6aW1IDwgYmFpdDsKK+iwkSA8IGplZXI7Civpoo8gPCBjaGluOwor6IquIDwgdGlueTsKK+eSqCA8IGdlbXM7Civms7UgPCBwdW1wOwor6LGMIDwgcGVhczsKK+WgkSA8IG1vYXQ7CivnlrUgPCBmbGF3Owor5qaIIDwgcGFsbTsKK+msgyA8IG1hbmU7Civlkp0gPCBoaXNzOwor6YKLIDwgcmFnczsKK+iDpCA8IGhlaXI7CivnspUgPCBsZWVzOwor5oyeIDwgZmxvZzsKK+mVqyA8IGxhbXA7CivpmIQgPCBsb3RzOwor6ZSMIDwgemluYzsKK+WWmSA8IGJlYWs7CivogpsgPCBhbnVzOwor55eCIDwgc2NhYjsKK+m4oiA8IGtpdGU7Civova0gPCB5b2tlOwor5rS1IDwgdHJ1ZTsKK+azhSA8IHN3aW07Civnn74gPCBhbHVtOwor6JqpIDwgd29ybTsKK+m4tyA8IGhhd2s7CivogIsgPCBhZ2VkOwor5Z2oIDwgbHVtcDsKK+eWsSA8IGFjbmU7CivniKggPCBvdmVuOwor5ouKIDwgc2xhcDsKK+mqnyA8IGdlbGQ7CivlnLkgPCB0b21iOwor6b6IIDwgZ3VtczsKK+mYiyA8IGZldWQ7CivphbAgPCBhY3lsOwor55ajIDwgd2FydDsKK+epkSA8IGZhcm07CivnpLsgPCBjdWx0Owor5L2kIDwga2F3YTsKK+m6uCA8IGJyYW47Civoj5YgPCBpcmlzOwor5auxIDwgbGFkeTsKK+iwnSA8IGJyYWc7CivmsJYgPCBuZW9uOwor6LeWIDwgc29sZTsKK+iaiyA8IGduYXQ7Civlgb4gPCBydWluOwor55aSIDwgc2ljazsKK+WZjSA8IGNoZXc7CivmtLMgPCBkYW1wOwor54KxIDwgc29vdDsKK+iGqiA8IHBvcms7Civnu7IgPCBjb3JkOwor5a6AIDwgcm9vZjsKK+W4tumcsiA8IGRld3k7CivoloTlkb0gPCBcKHVzdTsKK+WKn+e4viA8IGZlYXQ7CivmmrTkuoIgPCByaW90Owor54ib5rOlIDwgb296ZTsKK+aXpeacnyA8IGRhdGU7Civlp6jlqr0gPCBhdW50Owor5LyK5ouJ5YWLIDwgaXJhcTsKK+W5veiwtyA8IGRlbGw7CivmlZnnmocgPCBwb3BlOwor5ZCR5LiLIDwgZG93bjsKK+mAn+ihjCA8IHJ1c2g7CivmnInog73lipsgPCBhYmxlOwor6YCZ6KOhIDwgaGVyZTsKK+e8uuWPoyA8IG5pY2s7Civljp/lrZAgPCBhdG9tOwor54uC5ZCgIDwgaG93bDsKK+W/g+aDhSA8IG1vb2Q7Civph47lhZQgPCBoYXJlOwor5Z+66YeRIDwgZnVuZDsKK+Wfg+exs+eIviA8IGVtaXI7Civnn7PniYcgPCBzbGFiOwor5ZKW5ZWh6aSoIDwgY2FmZTsKK+WGsOmOriA8IGljZWQ7Civnhr7nhrEgPCBnbG93Owor55+z54GwIDwgbGltZTsKK+earumerSA8IGxhc2g7CivlhrfphbcgPCBncmltOwor56Gs5bmjIDwgY29pbjsKK+WHneimliA8IGdhemU7CivmlZnmtL4gPCBzZWN0Owor5YWs6ZueIDwgY29jazsKK+inkuiJsiA8IHJvbGU7CivnupbluqYgPCBzaXplOwor5aWJ5om/IDwgZmF3bjsKK+mcsum9kuiAjOeskSA8IGdyaW47CivoqrLmlocgPCB0ZXh0Owor6ZW36Z20IDwgYm9vdDsKK+eJouWbuiA8IGZpcm07Civnmb7pnYggPCBsYXJrOwor6YCa6KGM56iFIDwgdG9sbDsKK+eOieicgOm7jSA8IGNvcm47CivpgI/ntIUgPCByb3N5Owor5pW45pOaIDwgZGF0YTsKK+ipqeatjCA8IHBvZW07CivlsI/mr5von7IgPCBzbHVnOwor5qiC6ZqKIDwgYmFuZDsKK+awo+WRsyA8IG9kb3I7CivnhKHnpq4gPCBydWRlOwor6YO95biCIDwgY2l0eTsKK+ilv+iWhCA8IGNha2U7CivmnIDkuLvopoEgPCBtYWluOwor6Zuq5pKsIDwgc2xlZDsKK+mBqOa4uCA8IHJvYW07Civmr5LlrrMgPCBiYW5lOwor54y25LuW5beeIDwgdXRhaDsKK+e0sOiDniA8IGNlbGw7CivljZHliqMgPCBiYXNlOwor5b6p5Y6fIDwgaGVhbDsKK+WIpeeahCA8IGVsc2U7CivlhazosawgPCBib2FyOwor6Kq/5a2QIDwgdHVuZTsKK+ecvOeciyA8IHNvb247CivpnaLlhbcgPCBtYXNrOwor5byn5b2iIDwgYXJjaDsKK+S9v+WPl+WCtyA8IGh1cnQ7CivnmKbplbcgPCBzbGltOwor6Iqx6YKKIDwgbGFjZTsKK+Whq+a7vyA8IGNyYW07Civoq77kup4gPCBub2FoOwor5aSW5aWXIDwgY29hdDsKK+mVt+ilqiA8IGhvc2U7Civnq4vmlrnpq5QgPCBjdWJlOwor6ZW36KKNIDwgZ293bjsKK+W8t+WnpiA8IHJhcGU7CivnhafmlpkgPCB0ZW5kOwor5o6h6YKRIDwgZmllZjsKK+aOoOmBjiA8IGZsaXQ7CivngbDoibIgPCBncmF5Owor55m96aqo6aCCIDwgY29vdDsKK+e0sOeciyA8IHBlZXI7Civpu7YgPCBtb2xlOwor6KSq6ImyIDwgZmFkZTsKK+m6miA8IGJ1Y2s7Civpganmh4kgPCBzdWl0Owor6bqMIDwgc3RhZzsKK+m6gyA8IHRpbGw7CivpuYYgPCBteW5hOwor5LiA6KeS6YqA5bmjIDwgZGltZTsKK+WJneaOiSA8IHBhcmU7Civpg7Xku7YgPCBtYWlsOwor556R5oOzIDwgbXVzZTsKK+mBiuaIsiA8IGdhbWU7Civnr4Dpu54gPCBub2RlOwor6aivIDwgbG91ZDsKK+mnvSA8IGdyZXk7CivmjbLou7ggPCByZWVsOwor6aWMIDwgZmVlZDsKK+aVo+WHuiA8IHNoZWQ7Civpo6EgPCBtZWFsOwor5bei56m0IDwgbGFpcjsKK+a0i+Wog+WogyA8IGRvbGw7CivpmL/mm7wgPCBvbWFuOwor5bug5a2QIDwgeWFyZDsKK+i6sumBvyA8IHNodW47CivnhrHlipsgPCBoZWF0Owor6ZieIDwgdmVpbjsKK+S4i+S4gOasoSA8IG5leHQ7Civmt7rpu4PoibIgPCBidWZmOwor6ZeGIDwgYm9zczsKK+ewveiovCA8IHZpc2E7Civps7Tlj6sgPCBob290Owor6ZWpIDwgcGljazsKK+mVlSA8IGZ1c2U7CivpkaIgPCBmaWxlOwor6ZCpIDwgbGVuczsKK+aUtuWJsiA8IHJlYXA7CivntrLlrZQgPCBtZXNoOwor6Zuc5LqCIDwgbWVzczsKK+aOieiQvSA8IGZsb3A7Civpo7Lpo5/nmYLppIogPCBkaWV0Owor6Kmp5Lq6IDwgYmFyZDsKK+Wkp+iii+WtkCA8IHNhY2s7CivooajosaEgPCBpZGVhOwor6IiS6YGpIDwgY296eTsKK+iLseeVnSA8IGFjcmU7CivmraXkvJAgPCBwYWNlOwor6L2XIDwgZmFpbDsKK+aOpee4qyA8IHNlYW07CivlhazniZsgPCBidWxsOwor57KX56CCIDwgZ3JpdDsKK+WFrOeItSA8IGR1a2U7Civot7wgPCBiZW50Owor5Ye656ef6LuKIDwgdGF4aTsKK+i3siA8IGhvb2Q7Civoj5zllq4gPCBtZW51Owor5qmr5qiRIDwgYmVhbTsKK+iztSA8IGdpZnQ7CivooZPoqp4gPCB0ZXJtOwor5Ymb5YuBIDwgYm9sZDsKK+ihmuihlSA8IGxhbmU7Civoib7ntaggPCBtb3hhOwor6KqnIDwgaHVnZTsKK+innSA8IGdvcmU7CivlhYjopovogIUgPCBzZWVyOwor6Iqx55O2IDwgdmFzZTsKK+igrSA8IGJlZXM7CivmqZ/mmbogPCB0YWN0Owor5YK+6IG9IDwgaGFyazsKK+ieiSA8IHdhc3A7CivpkJjpoK0gPCBob3VyOwor6JiSIDwgXDoxNDM7Civol58gPCB2aW5lOwor54K45b2IIDwgYm9tYjsKK+WbnuiBsiA8IGVjaG87Civok6sgPCBkb2NrOwor6Kej5YeNIDwgdGhhdzsKK+iQnCA8IGM1aDg7Civoj74gPCBiZWV0Owor6ZW35qeNIDwgcGlrZTsKK+WFreaciCA8IGp1bmU7Civlg7HnlKggPCBoaXJlOwor5ZyT55ukIDwgZGlzazsKK+WcsOeNhCA8IGhlbGw7CivniLXlo6voiJ4gPCBqYXp6Owor6Zi/5YCRIDwgYW1lbjsKK+iFtiA8IG1lYXQ7CivohLIgPCB1cmVhOwor6Lev6YKKIDwgY3VyYjsKK+imluWcliA8IHZpZXc7CivmkofljrsgPCBza2ltOwor6L6y5aW0IDwgc2VyZjsKK+iJvua7i+eXhSA8IGFpZHM7CivluLPllq4gPCBiaWxsOwor6I2J5Z2qIDwgbGF3bjsKK+aQtuWlqiA8IHNuYXA7Civpm7vnh4jms6EgPCBidWxiOwor56uBIDwgYm9yZTsKK+epnCA8IHJpY2U7CivnprggPCBydW1wOwor5YO55qy+IDwgY29zdDsKK+aoo+W8jyA8IHR5cGU7CivmkI3lrrMgPCBoYXJtOwor5qih5byPIDwgbW9kZTsKK+ebn+WPiyA8IGFsbHk7Civnn7sgPCB0b2lsOwor55a855ebIDwgYWNoZTsKK+aok+W7giA8IGxvZnQ7Civnm67nnqrlj6PlkYYgPCBzdHVuOwor5bGB6KmxIDwgc2hpdDsKK+mPiOi3ryA8IGxpbms7CivnjLblpKfmm7ggPCBqdWRlOwor5L2O6Z+zIDwgYmFzczsKK+eUqOiGsyA8IGRpbmU7CivnrJHoqbEgPCBqb2tlOwor5bGx576KIDwgZ29hdDsKK+ertuizvSA8IHJhY2U7CivnrKjom4sgPCBmb29sOwor5bKp55+zIDwgcm9jazsKK+eVpeeivCA8IGNvZGU7CivmtrQgPCBkYXViOwor6LyD5bCRIDwgbGVzczsKK+eZvuWQiCA8IGxpbHk7CivohbDogokgPCBsb2luOwor5Zyw5bi2IDwgem9uZTsKK+mWo+S4iyA8IHNpcmU7Civpvo3pqqggPCBrZWVsOwor5aSn6aCt6YeYIDwgdGFjazsKK+S/nee+hSA8IHBhdWw7CivoibLlvakgPCB0aW50Owor5qqNIDwgaWxleDsKK+anuSA8IHNwYXI7CivmjbLluLYgPCB0YXBlOwor5qSRIDwgb3ZhbDsKK+mNjemHkSA8IGdpbGQ7CivmjIfmqJkgPCBub3JtOwor6KGd5pKeIDwgZGFzaDsKK+afoyA8IHNpbGw7CivlsqnmvL8gPCBsYXZhOwor5p+CIDwgaGVsbTsKK+aPoeS9jyA8IGdyaXA7CivmnJggPCB3YW5lOwor5ZyT5bGL6aCCIDwgZG9tZTsKK+aTqyA8IHR1Y2s7CivnrZbnlaUgPCBwbG90Owor5pGyIDwgcmF6ZTsKK+aQmCA8IHByb3A7Civkup7pursgPCBmbGF4Owor5o6eIDwgZWFzeTsKK+WciOWllyA8IHRyYXA7Civpm5nog57og44gPCB0d2luOwor57GD5ZyIIDwgcmluZzsKK+iGveaxgSA8IGdhbGw7CivmhrAgPCB3aWx5Owor5oCzIDwgd2lsZDsKK+aOoeS8kCA8IGZlbGw7CivkuIDloYrpurUgPCBsb2FmOwor6Zu75qmf5Y+K6Zu75a2Q5a245bel56iL5bir6IGv5ZCI5pyDIDwgaWVlZTsKK+WAn+asviA8IGxvYW47CivliLDvuY3kuYvkuIogPCBvbnRvOwor6KKW5Y+jIDwgY3VmZjsKK+WFqOmrlOS6uuWToSA8IGNyZXc7Civkvb/nlKjogIUgPCB1c2VyOwor56eY6a2vIDwgcGVydTsKK+WDp+S+tiA8IG1vbms7CivlrbsgPCBsYXN0Owor5ouW5ouJIDwgaGF1bDsKK+WqiiA8IHN0YXI7CivlqLggPCB1Z2x5Owor6YGg56iL55uj5o6nIDwgcm1vbjsKK+WcqO+5jeS5i+S4rSA8IGFtaWQ7CivlnI3kvY8gPCBnaXJkOwor5aekIDwgbWF0ZTsKK+ajjeajkiA8IGNsdWI7Civmi43miZMgPCBmbGFwOwor6aO+6YeYIDwgc3R1ZDsKK+WBj+W3riA8IGJpYXM7CivpqrDlrZAgPCBkaWNlOwor6IGW6KmpIDwgaHltbjsKK+WkluWwj+iFvyA8IHNoaW47Civpi6roqK0gPCBwYXZlOwor5ZC9IDwgJydvbScnOwor6JuL55m955+zIDwgb3BhbDsKK+aer+iQjiA8IHdpbHQ7CivliJwgPCBjaG9wOwor5YiTIDwgdHJpbTsKK+S4gOWIhumMoiA8IGNlbnQ7CivnlrLlgKYgPCB0aXJlOwor6LOi6IO9IDwgc2FnZTsKK+a1t+i7jSA8IG5hdnk7Civoh63lkbMgPCBmdW1lOwor5L6cIDwgbGllczsKK+S8sSA8IHRob3U7Civlgbblg48gPCBpZG9sOwor5bCP6LW36YeN5qmfIDwgamFjazsKK+i3qOW6piA8IHNwYW47Civks7wgPCBndWxsOwor5p6c6IKJIDwgcHVscDsKK+SxtCA8IHR1bmE7Civkr5UgPCBib255Owor5ZG96YGLIDwgZmF0ZTsKK+Wtl+evgCA8IGJ5dGU7CivnvoXppqwgPCByb21lOwor6ICD6KmmIDwgZXhhbTsKK+SnuyA8IGRvdmU7CivlgI3loZQgPCBiZXRhOwor5ZyT6YyQ6auUIDwgY29uZTsKK+aCoOmWkiA8IGVhc2U7CivkvK/niLUgPCBlYXJsOwor5ZGo6YGKIDwgdG91cjsKK+ShgCA8IG51ZGU7CivkoI8gPCBmZWV0Owor5Jq9IDwgbmV3czsKK+eQteeQtiA8IGx1dGU7CivkmYogPCBhcmlkOwor6Iag5Y23IDwgZmlsbTsKK+SWrSA8IGdydWI7CivlsIjnlKjpm4bmiJDpm7vot68gPCBhc2ljOwor5JK6IDwgY2xheTsKK+WTgeiEqyA8IHBpbnQ7CivlsI/ls7YgPCBpc2xlOwor6JaE6ZynIDwgbWlzdDsKK+S9leaZgiA8IHdoZW47Civlj6PpoK0gPCBvcmFsOwor5Luk54uAIDwgd3JpdDsKK+SBhiA8IGV5ZXM7CivkgYUgPCByYWdlOwor6JWo6aGeIDwgZmVybjsKK+SAgCA8IGN1cHM7Civjv5kgPCBmdWxsOwor4765IDwgbGVhbjsKK+aKk+S9jyA8IGdyYWI7CivonILonJzphZIgPCBtZWFkOwor5qC45b+DIDwgY29yZTsKK+axuumspSA8IGR1ZWw7CivosYbohZAgPCB0b2Z1Owor5ZKS5721IDwgZGFtbjsKK+OyuyA8IHN1bms7CivjsrQgPCBtaW5kOwor47KcIDwgcnVnczsKK+OwqyA8IGdsYWQ7CivjsJ8gPCBob3BlOwor466kIDwgcGluZTsKK+icguaIvyA8IGhpdmU7CivjrpIgPCB3b29kOwor46uxIDwgbWlsZDsKK+mmrOW7hCA8IGJhcm47Civkup7nlbYgPCBhZGFtOwor57+F6IaAIDwgd2luZzsKK+mHkeWxrOiWhOeJhyA8IGZvaWw7CivkvIrmnJcgPCBpcmFuOwor5Li7576pIDwgXC1pc207CivpuqXoir0gPCBtYWx0Owor54u56LC3IDwgZ2xlbjsKK+eJoem5vyA8IGhhcnQ7CivlnKjkuYvkuIogPCBvdmVyOwor5ZCN6KmeIDwgbm91bjsKK+WtmOaguSA8IHN0dWI7CivpoK3ohabmuIXmpZogPCBzYW5lOwor45qnIDwgYWdpbDsKK+WPsuipqSA8IGVwaWM7CivosrTlqabkurogPCBkYW1lOwor5a625ZySIDwgaG9tZTsKK+eJm+mjsiA8IGd1bHA7Civos7rlvpcgPCBlYXJuOwor6LGO55C0IDwgaGFycDsKK+S4gOe+pCA8IGdhbmc7Civpn7Poqr8gPCB0b25lOwor5p2/5qKdIDwgbGF0aDsKK+iytOaXjyA8IGxvcmQ7Civlk4jmrKAgPCB5YXduOwor6LGs5rK5IDwgbGFyZDsKK+mMq+WuiSA8IHppb247CivnjbXniakgPCBwcmV5Owor57SF5a+255+zIDwgcnVieTsKK+eKr+imjyA8IGZvdWw7Civou5/mnKjloZ4gPCBjb3JrOwor5rK56IaPIDwgYmFsbTsKK+ePreaIvyA8IGphaWw7CivmlpHpu54gPCBzcG90Owor5rWu5qiZIDwgYnVveTsKK+WutuS8mSA8IGNoYXA7CivlvozpnaIgPCByZWFyOwor5aSp6bWdIDwgc3dhbjsKK+aVtOm9iiA8IHRpZHk7CivlnKjmsLTmraXooYwgPCB3YWRlOwor5q+N6aasIDwgbWFyZTsKK+Wtl+WeiyA8IGZvbnQ7CivlronlhaggPCBzYWZlOwor57KJ57SF6ImyIDwgcGluazsKK+WtpOWWriA8IGxvbmU7CivmnKjmobYgPCBjYXNrOwor6aO+5bi2IDwgc2FzaDsKK+iAgeaSviA8IGxhb3M7CivmnKbmnKcgPCBibHVyOwor6Kqy6aGMIDwgdGFzazsKK+ePoOWtkCA8IGJlYWQ7CivlkbzlkbzogbIgPCB3aGlyOwor5b+r5q2l6LeRIDwgdHJvdDsKK+azoueJuSA8IGJhdWQ7Civph47npr0gPCBmb3dsOwor5pqI55ypIDwgZGF6ZTsKK+iqquisiuiAhSA8IGxpYXI7Civmn5DkupsgPCBzb21lOwor5by36aKoIDwgZ2FsZTsKK+m6u+acqCA8IG51bWI7Civpmarlr6nlnJggPCBqdXJ5Owor6Z+B57mpIDwgcmVpbjsKK+WQpuaxuiA8IHZldG87CivmspnnmbwgPCBzb2ZhOwor5LuW5YCRIDwgdGhleTsKK+azoeayqyA8IGZvYW07CivniZvogokgPCBiZWVmOwor5LiD5pyIIDwganVseTsKK+S4gOacjSA8IGRvc2U7CivosYblrZAgPCBiZWFuOwor5aq95aq9IDwgbWFtYTsKK+aVj+mKsyA8IGtlZW47CivmsrnmsrkgPCBvaWx5Owor5YyF6KOdIDwgcGFjazsKK+axoeeXlSA8IGJsb3Q7CivnjJvmkp4gPCBzbGFtOwor6Z2i572pIDwgdmVpbDsKK+mereeXlSA8IHdlbHQ7Civkup7kuIEgPCBhZGVuOwor542o5aWPIDwgc29sbzsKK+aykOa1tCA8IGJhdGg7CivmnIDlpb0gPCBiZXN0Owor6KqT6KmeIDwgb2F0aDsKK+WLleipniA8IHZlcmI7Civpq5jniL7lpKvnkIMgPCBnb2xmOwor5pq05b6SIDwgdGh1ZzsKK+axveawtCA8IHNvZGE7Civnn63opaogPCBzb2NrOwor5byV6K2JIDwgY2l0ZTsKK+mIleW4tiA8IGJvbmQ7CivliY3pnaIgPCBmb3JlOwor6Zmj6aKoIDwgZ3VzdDsKK+aDoeWKoyA8IHZpbGU7Civmr5vnt5ogPCB5YXJuOwor5YyX57SEIDwgbmF0bzsKK+mHjeaTiiA8IGJhbmc7CivmraXoqr8gPCBnYWl0Owor6YCa6aKoIDwgYWlyeTsKK+iuiuaPmyA8IHZhcnk7Civokrznmb0gPCBwYWxlOwor5rC05ru0IDwgZHJvcDsKK+e5lOW4g+apnyA8IGxvb207Civpm7voqbHpiLTogbIgPCBidXp6Owor5pS26JePIDwga2VlcDsKK+mbu+e3miA8IHdpcmU7CivkuIDlkLkgPCBwdWZmOwor5q+b55quIDwgcGVsdDsKK+mBi+iyuyA8IGZhcmU7Civlo4HombEgPCB0aWNrOwor5pKl6ZaLIDwgcG9rZTsKK+i/t+mZoyA8IG1hemU7Civol6XkuLggPCBwaWxsOwor5YWJ57qW5YiG5L2I5pW45pOa5o6l5Y+jIDwgZmRkaTsKK+mcsueHnyA8IGNhbXA7Civmr5LniakgPCBwZXN0Owor5LiAIDwgb25lOwor5Lq6IDwgbWFuOwor5oiRIDwgb3VyOwor5aSnIDwgYmlnOwor5LiKIDwgdG9wOwor5L2gIDwgeW91Owor5Y+vIDwgbWF5Owor5aW5IDwgc2hlOwor5aSpIDwgc2t5Owor6ICMIDwgYW5kOwor54S2IDwgeWVzOwor5rKhIDwgbm90Owor5pelIDwgc3VuOwor5b2pIDwgaHVlOwor5Y2BIDwgdGVuOwor55SoIDwgdXNlOwor55y8IDwgZXllOwor6KeBIDwgc2VlOwor6ICBIDwgb2xkOwor5LikIDwgdHdvOwor5aSWIDwgb3V0Owor5rOVIDwgbGF3Owor54K5IDwgZG90Owor55ucIDwgcm9iOwor5YW2IDwgaGlzOwor5YS/IDwgc29uOwor5pawIDwgbmV3Owor5bqKIDwgYmVkOwor55qGIDwgYWxsOwor5rW3IDwgc2VhOwor5bCRIDwgZmV3Owor5bi9IDwgaGF0Owor5Y+rIDwgY3J5Owor5q27IDwgZGllOwor5pS+IDwgcHV0Owor5LuKIDwgbm93Owor6LWkIDwgcmVkOwor55WiIDwgZW5kOwor5oiYIDwgd2FyOwor6LO8IDwgYnV5Owor55O2IDwganVnOwor6K+3IDwgYXNrOwor5LqkIDwgbWl4Owor5ZCDIDwgZWF0Owor6L+QIDwgcnVuOwor572RIDwgbmV0Owor6aOeIDwgZmx5Owor54y/IDwgYXBlOwor54yrIDwgY2F0Owor54yqIDwgcGlnOwor5Z2QIDwgc2l0Owor6KyCIDwgc2F5Owor54uXIDwgZG9nOwor5YiHIDwgY3V0Owor6KqkIDwgZXJyOwor54OtIDwgaG90Owor54mbIDwgY293Owor5L2OIDwgbG93Owor5LuNIDwgeWV0Owor6ISaIDwgbGVnOwor5aWIIDwgYnV0Owor5o6SIDwgcm93Owor5aOeIDwgYmFkOwor5rm+IDwgYmF5Owor5aKoIDwgaW5rOwor6KGTIDwgYXJ0Owor5r+YIDwgbXVkOwor5r+VIDwgd2V0Owor6ZyyIDwgZGV3Owor6b2iIDwgYWdlOwor6J2ZIDwgYmF0Owor6J2LIDwgd2F4Owor6bygIDwgcmF0Owor6JyCIDwgYmVlOwor5pGHIDwgd2FnOwor5rK5IDwgb2lsOwor6JeJIDwgbWF0Owor5rayIDwgc2FwOwor6JavIDwgeWFtOwor6ICzIDwgZWFyOwor5ZaLIDwgbmFnOwor5ZWcIDwgc2lwOwor5ZOAIDwgc2FkOwor5YawIDwgaWNlOwor5p2vIDwgY3VwOwor5rCjIDwgYWlyOwor6JCMIDwgYnVkOwor6YCUIDwgd2F5Owor6Iy2IDwgdGVhOwor5Y21IDwgZWdnOwor5pKtIDwgc293Owor6IeCIDwgYXJtOwor5qy3IDwgc29iOwor5YyaIDwgYm94Owor5pGpIDwgcnViOwor5YagIDwgY2FwOwor6Iq4IDwgcnVlOwor57yYIDwgaGVtOwor5p+TIDwgZHllOwor6Ia/IDwgcHVzOwor5qa7IDwgY290Owor5YaGIDwgeWVuOwor6IWQIDwgcm90Owor6ISCIDwgZmF0Owor5o+0IDwgYWlkOwor5ZO8IDwgaHVtOwor5YG1IDwgc3B5Owor6aGOIDwgamF3Owor572QIDwgamFyOwor5o23IDwgd2luOwor6ZynIDwgZm9nOwor5Lm+IDwgZHJ5Owor57ydIDwgc2V3Owor5oqaIDwgcGF0Owor5oyWIDwgZGlnOwor5omHIDwgZmFuOwor5LmeIDwgYmVnOwor6LWMIDwgYmV0Owor5qygIDwgb3dlOwor5rCbIDwgZ2FzOwor57egIDwgdGllOwor54KSIDwgZnJ5Owor6ZShIDwgdGluOwor5Z2RIDwgcGl0Owor5pKVIDwgcmlwOwor56OVIDwgaGl0Owor6LCOIDwgbGllOwor6YqcIDwgYml0Owor6LWLIDwgdGF4Owor5ZuKIDwgYmFnOwor5pCCIDwgaHVnOwor5byTIDwgYm93Owor5bqQIDwgaHV0Owor5q+vIDwgcnVnOwor6ZKlIDwga2V5Owor5panIDwgYXhlOwor6LmmIDwgaG9wOwor6L+iIDwgZmFyOwor6JqCIDwgYW50Owor6ZSEIDwgaG9lOwor5o2FIDwgamFiOwor5qGoIDwgb2FyOwor54u4IDwgZm94Owor54yWIDwgbWFkOwor6La+IDwgdG9lOwor6Ji4IDwgZGlwOwor55CmIDwgZ2VtOwor55W4IDwgb2RkOwor5Z2vIDwgZGFtOwor6bOdIDwgZWVsOwor5oCpIDwgc2h5Owor6bugIDwgc2x5Owor6ZSbIDwgYWR6Owor6bqLIDwgZWxrOwor6bONIDwgZmluOwor5YiNIDwgbW93Owor5p+eIDwgb2FrOwor6Z6jIDwgdGFuOwor5YOWIDwgam95Owor576dIDwgcmFtOwor5Z+kIDwgYWRkOwor56m655m96bueIDwgZ2FwOwor5rGC5oSbIDwgd29vOwor5ZCM5L2NIDwgcGFyOwor54K655Sa6bq8IDwgd2h5Owor5Y+X5YiwIDwgZ2V0Owor5Y+v5LulIDwgY2FuOwor6YWS5buKIDwgYmFyOwor55S35a2p5a2QIDwgYm95Owor5ray5pm26aGv56S6IDwgbGNkOwor56C05biDIDwgcmFnOwor5by35ouJIDwgdHVnOwor54Sh6Iqx5p6cIDwgZmlnOwor57aT55SxIDwgdmlhOwor6Kit5rOVIDwgdHJ5Owor5aaC5L2VIDwgaG93Owor55y855WMIDwga2VuOwor5bm85424IDwgY3ViOwor6Zui5a2QIDwgaW9uOwor6LKT5Y+r6IGyIDwgbWV3Owor54Sm5rK5IDwgdGFyOwor6YCA5r2uIDwgZWJiOwor6b2jIDwgYWN0Owor54Gr6IW/IDwgaGFtOwor6bmLIDwgZW11Owor6Zmw5pqXIDwgZGltOwor57i95ZKMIDwgc3VtOwor6bSeIDwgb3dsOwor6bKVIDwgcm9lOwor6ay3IDwgcG90Owor6ayGIDwgbGF4Owor6auiIDwgd2lnOwor56CN5LyQIDwgaGV3Owor5Yi65o6iIDwgcHJ5Owor5bi45pil6JekIDwgaXZ5Owor6ZGvIDwgYXdsOwor54OP5ZCI5LmL55y+IDwgbW9iOwor5YmN5aSVIDwgZXZlOwor5aCF5p6cIDwgbnV0Owor6L2RIDwgcnV0Owor6Li2IDwgcGF3Owor5YWI55SfIDwgc2lyOwor5qyE5ZyIIDwgcGVuOwor5bCP57K+6Z2IIDwgZWxmOwor6Kaq5bGsIDwga2luOwor57Si5YW36KOd572uIDwgcmlnOwor5ouW6LuKIDwgdG93Owor5aGr5YWFIDwgcGFkOwor5YWs5YWx5rG96LuKIDwgYnVzOwor6JK0IDwgcG9kOwor6ICB5aSp54i6IDwgZ29kOwor6Zu26bue5YWtIDwgMFwuNjsKK+aoheaouSA8IGZpcjsKK+eUnOmFkiA8IHJ1bTsKK+e+hyA8IGlubjsKK+WHuuWDuSA8IGJpZDsKK+WCs+ecnyA8IGZheDsKK+iLpuaDsSA8IGFpbDsKK+WFrem7nuWFrSA8IDZcLjY7CivpqqjnvYggPCB1cm47Civou5/mr5sgPCBmdXI7CivnoLIgPCBndW47CivnmZkgPCBpbGw7CivovJXmiZMgPCB0YXA7CivlsI/osrsgPCB0aXA7CivmpobmqLkgPCBlbG07CivmvZogPCBnYXk7Civlt6XkvZwgPCBqb2I7CivogovpqqggPCByaWI7CivmpY4gPCBwZWc7CivmoqkgPCBob2Q7Civpq5TogrLppKggPCBneW07CivmnYUgPCB0dWI7CivkuIPpu57kupQgPCA3XC41Owor5LiD6bue5LqMIDwgN1wuMjsKK+WcsOWcliA8IG1hcDsKK+aUtSA8IHJhcDsKK+WLleeJqeWckiA8IHpvbzsKK+mshuW8myA8IHNhZzsKK+mkoemkhSA8IHBpZTsKK+WcluWDj+S6kuaPm+agvOW8jyA8IGdpZjsKK+WwhOe3miA8IHJheTsKK+mLuOmWiyA8IHNhdzsKK+aenOmGrCA8IGphbTsKK+WcjeWFnCA8IGJpYjsKK+WsmyA8IGFwdDsKK+eMtuWkquS6uiA8IGpldzsKK+aLluaKiiA8IG1vcDsKK+S5iOm7niA8IGFjZTsKK+Wwj+eLlyA8IHB1cDsKK+iyqOi7iiA8IHZhbjsKK+Wck+W9ouacqOadkCA8IGxvZzsKK+m7numgrSA8IG5vZDsKK+Wwjea6liA8IGFpbTsKK+WZtOWwhCA8IGpldDsKK+WCouS8mSA8IGd1eTsKK+S5oiA8IGxpZDsKK+mpouWtkCA8IGFzczsKK+mjm+ifsiA8IGJ1ZzsKK+ethuWwliA8IG5pYjsKK+ShnCA8IGNhcjsKK+m6pemFkiA8IGFsZTsKK+S/ruWlsyA8IG51bjsKK+SdhiA8IGhvZzsKK+acg+iyuyA8IGR1ZTsKK+S5vuiNiSA8IGhheTsKK+SMoiA8IHJhdzsKK+SLniA8IHdlYjsKK+SKkSA8IHBheTsKK+WxouWKoCA8IHBseTsKK+S5neS4g+W5tCA8ICcnOTc7CivlnJPlvaLpurXljIUgPCBidW47CivlronmlL4gPCBsYXk7CivjnLggPCBzaW47CivoqIjkuZjou4ogPCBjYWI7CivpoIzoqZ4gPCBvZGU7CivohKvmsKfmoLjns5bmoLjphbggPCBkbmE7CivmnZzmnb7lrZDphZIgPCBnaW47CivkvZXkurogPCB3aG87Civnh5XpuqUgPCBvYXQ7Civmr43pm54gPCBoZW47CivnpKbnn7MgPCBvcmU7CivmgJXnvp4gPCBjb3k7Civku7vkvZUgPCBhbnk7CivmtYHmhJ8gPCBmbHU7Civlk47llrIgPCBoZXk7CivmlrnoiJ8gPCBhcms7CivniIbogbIgPCBwb3A7CivmlLbosrsgPCBmZWU7Civmr43nvoogPCBld2U7CivlsI/kvJnlrZAgPCBsYWQ7CivliKXph50gPCBwaW47CivlubPpjYsgPCBwYW47CivkuI0gPCBubzsKK+S4uiA8IGRvOwor5LmLIDwgJydzOwor5b6DIDwgZ287Civkuo4gPCBpbjsKK+WmgiA8IGlmOwor5oiWIDwgb3I7CivlroMgPCBpdDsKK+WSsSA8IHVzOwor5ZOfIDwgYWg7Civll6ggPCBoaTsKK+W9nSA8IHlpOwor6ZSxIDwgb3o7CivpkpQgPCBtZDsKK+S8siA8IHdlOwor6ZWkIDwgcGE7CivplY4gPCBucDsKK+mTuSA8IGxyOwor5ZCR5LiK5ZywIDwgdXA7CivplL8gPCBlczsKK+mUnSA8IHRjOwor6ZSVIDwgYWM7CivlhYnnop8gPCBjZDsKK+e5hCA8IGJlOwor57OOIDwgbW07CivnsqggPCBobTsKK+eygSA8IGttOwor57G1IDwgZG07CivlmofogbIgPCBobzsKK+elgiA8IGhlOwor5oiR55qEIDwgbXk7Civll4ggPCBvaDsKK+WSgSA8IHNvOwor5YWhIDwgaGc7CivlhZ4gPCBtZzsKK+WFnSA8IGRnOwor5pan6aCtIDwgYXg7CivkvZkgPCBpOwor5qi2IDwgYzsKK+S4gOWAiyA8IGE7CivmlL/lupzmqZ/pl5zplovmlL7ns7vntbHkupLpgKPnuL3liYcgPiBnb3Zlcm5tZW50XC1vcGVuXC1zeXN0ZW1cLWludGVyY29ubmVjdGlvblwtcHJvZmlsZTsKK+mbu+apn+WPiumbu+WtkOWtuOW3peeoi+W4q+iBr+WQiOacgyA+IGllZWU7CivlnIvpmpvpm7voqbHpm7vloLHoq67oqaLlp5Tlk6HmnIMgPiBpbnRlcm5hdGlvbmFsXC1jb25zdWx0YXRpdmVcLWNvbW1pdHRlZVwtZm9yXC10ZWxlcGhvbmVcLWFuZFwtdGVsZWdyYXBoOwor6Zi/5LiN5L6G5o+QXC7pmL/kuI3pg73nhrHopb/mj5AgPiBhYmR1bGFpZGlcLWFtdWR1cmV4aXRpXC1cKGNoYWlybWFuXC1vZlwteGluamlhbmdcLWF1dG9ub21vdXNcLXJlZ2lvblwpOwor5Y+v5pOm5a+r5Y+v57eo56iL56WH6K6A5a2Y5YSy5ZmoID4gZXByb207CivlnIvpmpvpm7vloLHpm7voqbHlkqjoqaLlp5Tlk6HmnIMgPiBjY2l0dDsKK+iAtuepjOWfuuedo+acq+S4luiBluW+kuaVmeacgyA+IHRoZVwtY2h1cmNoXC1vZlwtamVzdXNcLWNocmlzdFwtb2ZcLWxhdHRlclwtZGF5XC1zYWludHM7CivljYHlhITkvY3lhYPku6XlpKrntrLntaHoga/nm58gPiBnaWdhYml0XC1ldGhlcm5ldFwtYWxsaWFuY2U7CivmqpTmoYjovYnpgIHlrZjlj5blj4rnrqHnkIYgPiBmaWxlXC10cmFuc2ZlclwsXC1hY2Nlc3NcLWFuZFwtbWFuYWdlbWVudDsKK+mdnuWwjeeoseW8j+aVuOaTmueUqOaItue3miA+IGFzeW1tZXRyaWNhbFwtZGlnaXRhbFwtc3Vic2NyaWJlclwtbGluZTsKK+iHqOaZgueahOacrOWcsOeuoeeQhuaOpeWPoyA+IGludGVyaW1cLWxvY2FsXC1tYW5hZ2VtZW50XC1pbnRlcmZhY2U7Civoga/pgqbpm7vkv6HkuqTpgJrlp5Tlk6HmnIMgPiBmZWRlcmFsXC1jb21tdW5pY2F0aW9uc1wtY29tbWlzc2lvbjsKK+mbu+iFpui8lOWKqeioreioiOiIh+e5quWcliA+IGNvbXB1dGVyXC1haWRlZFwtZGVzaWduXC1hbmRcLWRyYXdpbmc7CivlhYnnupbliIbkvYjlvI/mlbjmk5rku4vpnaIgPiBmaWJlclwtZGlzdHJpYnV0ZWRcLWRhdGFcLWludGVyZmFjZTsKK+WFiee6luWIhuaVo+W8j+izh+aWmeS7i+mdoiA+IGZpYmVyXC1kaXN0cmlidXRlZFwtZGF0YVwtaW50ZXJmYWNlOwor5pW45pOa6Y+I6Lev6YCj5o6l6K2Y5Yil56K8ID4gZGF0YVwtbGlua1wtY29ubmVjdGlvblwtaWRlbnRpZmllcjsKK+mbu+iFpuiIh+mbu+ipseezu+e1seaVtOWQiCA+IGNvbXB1dGVyXC10ZWxlcGhvbnlcLWludGVncmF0aW9uOwor5aGe54i+57at5Lqe5YWL576F5Zyw5Lqe6KqeID4gc2VyYm9cLWNyb2F0aWFuXC1cKGxhbmd1YWdlXCk7CivnpoHmraLmoLjmrablmajoqabpqZfmop3ntIQgPiBudWNsZWFyXC10ZXN0XC1iYW5cLXRyZWF0eTsKK+iAgemppeS8j+arquW/l+WcqOWNg+mHjCA+IFwobGl0XC5cKVwtYW5cLW9sZFwtc3RlZWRcLWluXC10aGVcLXN0YWJsZVwtc3RpbGxcLWFzcGlyZXNcLXRvXC1nYWxsb3BcLTEwMDBcLWxpOwor5LiN5YWl6JmO56m054SJ5b6X6JmO5a2QID4gaG93XC1jYW5cLXlvdVwtY2F0Y2hcLXRpZ2VyXC1jdWJzXC13aXRob3V0XC1lbnRlcmluZ1wtdGhlXC10aWdlcicnc1wtbGFpcjsKK+avlOS4iuS4jei2s+avlOS4i+acieS9mSA+IGZhbGxcLXNob3J0XC1vZlwtdGhlXC1iZXN0XC1idXRcLWJlXC1iZXR0ZXJcLXRoYW5cLXRoZVwtd29yc3Q7CivljJflpKfopb/mtIvlhazntITntYTnuZQgPiB0aGVcLW5vcnRoXC1hdGxhbnRpY1wtdHJlYXR5XC1vcmdhbml6YXRpb25cLVwobmF0b1wpOwor5LiN57aT5LiA5LqL5LiN6ZW35LiA5pm6ID4geW91XC1jYW4nJ3RcLWdhaW5cLWtub3dsZWRnZVwtd2l0aG91dFwtcHJhY3RpY2U7Civlu7rnq4vmraPlvI/lpJbkuqTpl5zkv4IgPiBmb3JtYWxseVwtZXN0YWJsaXNoXC1kaXBsb21hdGljXC1yZWxhdGlvbnM7Civnmb7otrPkuYvon7LmrbvogIzkuI3lg7UgPiBhXC1jZW50aXBlZGVcLWRpZXNcLWJ1dFwtbmV2ZXJcLWZhbGxzXC1kb3duOwor5a6J5YWo6IiH5Lqk5o+b5aeU5ZOh5pyDID4gc2VjdXJpdGllc1wtYW5kXC1leGNoYW5nZVwtY29tbXVuaWNhdGlvbjsKK+e2nOWQiOacjeWLmeaVuOS9jee2sue1oSA+IGludGVncmF0ZWRcLXNlcnZpY2VzXC1kaWdpdGFsXC1uZXR3b3JrOwor5pW06auU5pyN5YuZ5pW45L2N57ay6LevID4gaW50ZWdyYXRlZFwtc2VydmljZXNcLWRpZ2l0YWxcLW5ldHdvcms7CivnsKHllq7ntrLntaHnrqHnkIbljZTorbAgPiBzaW1wbGVcLW5ldHdvcmtcLW1hbmFnZW1lbnRcLXByb3RvY29sOwor5pW06auU5pW45L2N5pyN5YuZ57ay6LevID4gaW50ZWdyYXRlZFwtc2VydmljZVwtZGlnaXRhbFwtbmV0d29yazsKK+WFrOWFseS6pOaPm+mbu+ipsee2sui3ryA+IHB1YmxpY1wtc3dpdGNoZWRcLXRlbGVwaG9uZVwtbmV0d29yazsKK+i/keS5juWQjOatpeaVuOS9jemajuWxpCA+IHBsZXNpb2Nocm9ub3VzXC1kaWdpdGFsXC1oaWVyYXJjaHk7Civml6XmnKzpm7vloLHpm7voqbHlhazlj7ggPiBuaXBwb25cLXRlbGVncmFwaFwtYW5kXC10ZWxlcGhvbmU7Civlu6Pmkq3lkozmnKrnn6XmnI3li5nlmaggPiBicm9hZGNhc3RcLWFuZFwtdW5rbm93blwtc2VydmVyOwor55m+5bC65p2G6aCt5pu055uh5LiA5q2lID4gbWFrZVwtc3RpbGxcLWZ1cnRoZXJcLXByb2dyZXNzOwor5ZyL6Zqb6LKo5bmj5Z+66YeR57WE57mUID4gaW50ZXJuYXRpb25hbFwtbW9uZXRhcnlcLWZ1bmQ7CivlrqLmiLbmqZ/mnI3li5nlmajnkrDlooMgPiBjbGllbnRcLXNlcnZlclwtZW52aXJvbmVtZW50Owor6Zu75a2Q6YO15Lu25YKz6YCB5pyN5YuZID4gXChlXC1cKW1haWxcLWRlbGl2ZXJ5XC1zZXJ2aWNlOwor55So5oi25Yiw57ay57Wh55qE5o6l5Y+jID4gdXNlclwtbmV0d29ya1wtaW50ZXJmYWNlOwor5Lqe5rSy6IiH5aSq5bmz5rSL5Zyw5Y2AID4gYXNpYVwtcGFjaWZpY1wtcmVnaW9uOwor5Y2B5YSE5L2N5YWD5Lul5aSq57ay57WhID4gZ2lnYWJpdFwtZXRoZXJuZXQ7CivlhYnnupbliIbkvYjmlbjmk5rmjqXlj6MgPiBmZGRpOwor5LiN6KaL5qO65p2Q5LiN6JC95reaID4gbm90XC1zaGVkXC1hXC10ZWFyXC11bnRpbFwtb25lXC1zZWVzXC10aGVcLWNvZmZpblwtXC1cLXJlZnVzZVwtdG9cLWJlXC1jb252aW5jZWRcLXVudGlsXC1vbmVcLWlzXC1mYWNlZFwtd2l0aFwtZ3JpbVwtcmVhbGl0eTsKK+S4jeWIsOm7g+ays+W/g+S4jeatuyA+IG5vdFwtc3RvcFwtdW50aWxcLW9uZVwtcmVhY2hlc1wtdGhlXC1odWFuZ2hlXC1yaXZlclwtXC1cLW5vdFwtc3RvcFwtdW50aWxcLW9uZVwtcmVhY2hlc1wtb25lJydzXC1nb2FsOwor6ZaJ5aGe55y8552b5o2J6bq76ZuAID4gdHJ5XC10b1wtY2F0Y2hcLXNwYXJyb3dzXC13aXRoXC1vbmUnJ3NcLWV5ZXNcLWJsaW5kZm9sZGVkXC1cLVwtYWN0XC1ibGluZGx5Owor5pav54m55Yeh6Ku+5pmu5rSb5pavID4gc3RlcGhhbm9wb3Vsb3NcLVwoZWdcLFwtZm9ybWVyXC1jbGludG9uXC1haWRlXC1nZW9yZ2VcLXN0ZXBoYW5vcG91bG9zXCk7CivkurrmsJHoi7Hpm4TntIDlv7XnopEgPiBtb251bWVudFwtdG9cLXRoZVwtcGVvcGxlJydzXC1oZXJvZXNcLFwtYXRcLXRpYW5hbm1lblwtc3F1YXJlOwor5oyJ5LiL6JGr6JiG5rWu6LW355OiID4gc29sdmVcLW9uZVwtcHJvYmxlbVwtb25seVwtdG9cLWZpbmRcLWFub3RoZXJcLWNyb3BwaW5nXC11cDsKK+S4jeaVoui2iumbt+axoOS4gOatpSA+IGRhcmVcLW5vdFwtZ29cLW9uZVwtc3RlcFwtYmV5b25kXC10aGVcLXByZXNjcmliZWRcLWxpbWl0Owor5p2x5Y2X5Lqe5ZyL5a626IGv55ufID4gYXNlYW5cLVwoYXNzb2NpYXRpb25cLW9mXC1zb3V0aGVhc3RcLWFzaWFuXC1uYXRpb25zXCk7CivlpLHmlZfmmK/miJDlip/kuYvmr40gPiBcImZhaWx1cmVcLWlzXC10aGVcLW1vdGhlclwtb2ZcLXN1Y2Nlc3NcIlwtXChwcm92ZXJiXCk7CivntpPnh5/nrqHnkIblkozntq3orbcgPiBvcGVyYXRpb25zXC1hZG1pbmlzdHJhdGlvblwtYW5kXC1tYWludGVuYW5jZTsKK+aguOatpuWZqOeglOijveioiOWKgyA+IG51Y2xlYXJcLXdlYXBvbnNcLVwobWFudWZhY3R1cmluZ1wpXC1wcm9ncmFtOwor5pWZ5o6I55Wi56uf5piv5pWZ5o6IID4gcHJvZmVzc29yc1wtYXJlXC1cKGFmdGVyXC1hbGxcKVwtcHJvZmVzc29yczsKK+iZm+aTrOmAmumBk+aomeiqjOespiA+IHZpcnR1YWxcLWNoYW5uZWxcLWNvbm5lY3Rpb25cLWlkZW50aWZpZXI7CivkuJbnlYzmgKflj6TogIHllY/poYwgPiBhXC1wcm9ibGVtXC1hc1wtb2xkXC1hc1wtdGhlXC13b3JsZFwtaXRzZWxmOwor6Zu75L+h5pyN5YuZ5L6b5oeJ5ZWGID4gdGVsZWNvbW11bmljYXRpb25zXC1zZXJ2aWNlXC1wcm92aWRlcjsKK+WFrOeUqOS6pOaPm+mbu+ipsee2siA+IHB1YmxpY1wtc3dpdGNoZWRcLXRlbGVwaG9uZVwtbmV0d29yazsKK+S4reiPr+S6uuawkeWFseWSjOWciyA+IHRoZVwtcGVvcGxlJydzXC1yZXB1YmxpY1wtb2ZcLWNoaW5hOwor6YCa55So6LOH5rqQ6K2Y5Yil6JmfID4gdW5pdmVyc2FsXC1yZXNvdXJjZVwtaWRlbnRpZmllcjsKK+WOn+WtkOenkeWtuOWutumAmuWgsSA+IGpvdXJuYWxcLW9mXC1hdG9taWNcLXNjaWVudGlzdHM7CivotoXmlofku7blgrPovLjljZTlrpogPiBoeXBlcnRleHRcLXRyYW5zZmVyXC1wcm90b2NvbDsKK+i2heaWh+acrOWCs+i8uOWNlOWumiA+IGh5cGVydGV4dFwtdHJhbnNmZXJcLXByb3RvY29sOwor5a6i5oi25pyN5YuZ5Zmo57WQ5qeLID4gY2xpZW50XC1zZXJ2ZXJcLWFyY2hpdGVjdHVyZTsKK+WqkumrlOaOpeWPo+mAo+aOpeWZqCA+IG1lZGl1bVwtaW50ZXJmYWNlXC1jb25uZWN0b3I7CivpnaLlmq7lsI3osaHnmoTmioDooZMgPiBvYmplY3RcLW9yaWVudGVkXC10ZWNobm9sb2d5Owor6Z2e5ZCM5q2l5YKz6Ly45qih5byPID4gYXN5bmNocm9ub3VzXC10cmFuc2ZlclwtbW9kZTsKK+i2heaWh+acrOaomeiomOiqnuiogCA+IGh5cGVydGV4dFwtbWFya3VwXC1sYW5ndWFnZTsKK+WPjeiJpuiJh+W3oeiIquWwjuW9iCA+IGFudGlcLXNoaXBcLWNydWlzZVwtbWlzc2xlOwor55So5oi25Yiw57ay57Wh5o6l5Y+jID4gdXNlclwtbmV0d29ya1wtaW50ZXJmYWNlOwor5Lqe5rSy5aSq5bmz5rSL5Zyw5Y2AID4gYXNpYVwtcGFjaWZpY1wtcmVnaW9uOwor5aSa57Gz5bC85Yqg5YWx5ZKM5ZyLID4gZG9taW5pY2FuXC1yZXB1YmxpYzsKK+aSkuWTiOaLieS7peWNl+mdnua0siA+IHN1Ylwtc2FoYXJhblwtYWZyaWNhOwor5Zyo5aSn5aSa5pW45oOF5rOB5LiLID4gaW5cLW1vc3RcLWluc3RhbmNlczsKK+i2hemrmOmAn+S5meWkque2sui3ryA+IGdpZ2FiaXRcLWV0aGVybmV0Owor5be05biD5Lqe5paw5bm+5YWn5LqeID4gcGFwYXVcLW5ld1wtZ3VpbmVhOwor576F5a+G5q2Q6IiH5pyx6bqX6JGJID4gcm9tZW9cLWFuZFwtanVsaWV0Owor5aSq6Zm95b6u57O757Wx5YWs5Y+4ID4gc3VuXC1taWNyb3N5c3RlbXM7CivluJbmkpLnvoXlsLzov6blvozmm7ggPiAyXC10aGVzc2Fsb25pYW5zOwor5Lqe54i+55m85ZKM5aWn57Gz5YqgID4gYWxwaGFcLWFuZFwtb21lZ2E7CivluJbmkpLnvoXlsLzov6bliY3mm7ggPiAxXC10aGVzc2Fsb25pYW5zOwor6I6r5bC85Y2h6JCK5rqr5pav5Z+6ID4gbW9uaWNhXC1sZXdpbnNreTsKK+mYv+S8j+S8veW+t+e+heWumuW+iyA+IGF2b2dhZHJvJydzXC1sYXc7Civpm7vnupzoqr/liLbop6Poqr/lmaggPiBjYWJsZVwtbW9kZW07CivnrKzkuozmrKHkuJbnlYzlpKfmiLAgPiB3b3JsZFwtd2FyXC0yOwor5LuL6LOq6Kiq5ZWP5o6n5Yi25bGkID4gbWFjXC1sYXllcjsKK+S4jeefpeWkqemrmOWcsOWOmiA+IG5vdFwta25vd1wtdGhlXC1pbW1lbnNpdHlcLW9mXC1oZWF2ZW5cLWFuZFwtZWFydGhcLVwtXC1oYXZlXC1hblwtZXhhZ2dlcmF0ZWRcLW9waW5pb25cLW9mXC1vbmUnJ3NcLWFiaWxpdGllczsKK+eZvuiBnuS4jeWmguS4gOimiyA+IHNlZWluZ1wtZm9yXC1vbmVzZWxmXC1pc1wtYVwtaHVuZHJlZFwtdGltZXNcLWJldHRlclwtdGhhblwtaGVhcmluZ1wtZnJvbVwtb3RoZXJzOwor5LiN6LK75ZC554Gw5LmL5YqbID4gYXNcLWVhc3lcLWFzXC1ibG93aW5nXC1vZmZcLWR1c3RcLVwtXC1ub3RcLW5lZWRpbmdcLXRoZVwtc2xpZ2h0ZXN0XC1lZmZvcnQ7CivmspnliKnnp5Hku4Dntq3liKkgPiBnZW5lcmFsXC1zaGFsaWthc2h2aWxpXC1cKGhlYWRcLW9mXC11c1wtam9pbnRcLWNoaWVmc1wtb2ZcLXN0YWZmXCk7Civlr4TkuojlvojlpKfmnJ/mnJsgPiB0b1wtcGxhY2VcLWdyZWF0XC1ob3BlXC1vclwtZXhwZWN0YXRpb25cLW9uXC1cKHN0aFwpOwor5be054i+6IiN5aSr5pav5Z+6ID4gXChjaGFybGVuZVwpXC1iYXJzaGVmc2t5XCxcLXVzXC10cmFkZVwtbmVnb3RpYXRvcjsKK+e0hOWumuizh+ioiumAn+eOhyA+IGNvbW1pdHRlZFwtaW5mb3JybWF0aW9uXC1yYXRlXC1cKGZyYW1lXC1yZWxheVwpOwor6YCG5ZCR5pOB5aGe6YCa55+lID4gYmFja3dhcmRcLWV4cGxpY2l0XC1jb25nZXN0aW9uXC1ub3RpZmljYXRpb247CivliY3lkJHmk4HloZ7pgJrnn6UgPiBmb3J3YXJkXC1leHBsaWNpdFwtY29uZ2VzdGlvblwtbm90aWZpY2F0aW9uOwor576O5ZyL5buj5pKt5YWs5Y+4ID4gYWJjXC1cKGFtZXJpY2FuXC1icm9hZGNhc3RpbmdcLWNvcnBvcmF0aW9uXCk7Civlk4joo6Hmo67lj7Llr4bnibkgPiBoYXJyaXNvblwtc2NobWl0dFwtXChhcG9sbG9cLTFcLTdcLWFzdHJvbmF1dFwpOwor55Wi5YW25Yqf5LqO5LiA5b25ID4gYWNjb21wbGlzaFwtdGhlXC13aG9sZVwtdGFza1wtYXRcLW9uZVwtc3Ryb2tlOwor5pO65LqL5a+m6Kyb6YGT55CGID4gcHJlc2VudFwtdGhlXC1mYWN0c1wtYW5kXC1yZWFzb25cLXRoaW5nc1wtb3V0Owor5ZyL6Zqb6Zu75L+h6IGv55ufID4gaW50ZXJuYXRpb25hbFwtdGVsZWNvbW11bmljYXRpb25zXC11bmlvbjsKK+S4jeWPr+WQjOaXpeiAjOiqniA+IGNhbm5vdFwtYmVcLW1lbnRpb25lZFwtaW5cLXRoZVwtc2FtZVwtYnJlYXRoOwor5pyJ5b+X6ICF5LqL56uf5oiQID4gd2hlcmVcLXRoZXJlXC1pc1wtYVwtd2lsbFwsXC10aGVyZVwtaXNcLWFcLXdheTsKK+Wci+mam+aomea6lue1hOe5lCA+IGludGVybmF0aW9uYWxcLXN0YW5kYXJkc1wtb3JnYW5pemF0aW9uOwor55uu5YmN6YKE5LiN5riF5qWaID4gYXRcLXByZXNlbnRcLWl0XC1pc1wtc3RpbGxcLXVuY2xlYXJcLVwuXC5cLlwuOwor55a+55eF6aCQ6Ziy5Lit5b+DID4gXCh1XC5zXC5cKVwtY2VudGVyXC1mb3JcLWRpc2Vhc2VcLWNvbnRyb2w7Civmh4nnlKjnqIvlvI/ku4vpnaIgPiBhcHBsaWNhdGlvblwtcHJvZ3JhbW1pbmdcLWludGVyZmFjZTsKK+efruWtkOijoeaLlOWwh+i7jSA+IGNob29zZVwtdGhlXC1iZXN0XC1wZXJzb25cLWF2YWlsYWJsZTsKK+WPluW+l+Wkp+WtuOWtuOS9jSA+IHRvXC1vYnRhaW5cLWFcLXVuaXZlcnNpdHlcLWVkdWNhdGlvbjsKK+WvpuaZguaTjeS9nOeSsOWigyA+IHJlYWxcLXRpbWVcLW9wZXJhdGluZ1wtZW52aXJvbm1lbnQ7CivlnIvpmpvllYbmpa3mqZ/lmaggPiBpbnRlcm5hdGlvbmFsXC1idXNpbmVzc1wtbWFjaGluZXM7CivnrKblkIjnvo7lnIvliKnnm4ogPiBpblwtbGluZVwtd2l0aFwtYW1lcmljYW5cLWludGVyZXN0czsKK+i7n+mrlOWHuueJiOWNlOacgyA+IHNvZnR3YXJlXC1wdWJsaXNoZXJzXC1hc3NvY2lhdGlvbjsKK+advuS4i+mbu+awo+W3pealrSA+IG1hdHN1c2hpdGFcLWVsZWN0cm9uaWNzXC1pbmR1c3RyeTsKK+acjeWLmeW7o+WRiuWNlOitsCA+IHNlcnZpY2VcLWFkdmVydGlzZW1lbnRcLXByb3RvY29sOwor6Kqe6Z+z6YCa6KiK6YCa6YGTID4gdm9pY2VcLVwoY29tbXVuaWNhdGlvbnNcKVwtY2hhbm5lbDsKK+S4lueVjOiyv+aYk+e1hOe5lCA+IHd0b1wtXCh3b3JsZFwtdHJhZGVcLW9yZ2FuaXphdGlvblwpOwor5bi46KaP6YqF6Zu76Kmx57eaID4gb3JkaW5hcnlcLWNvcHBlclwtdGVsZXBob25lXC1saW5lOwor5ZCM5q2l5pW45L2N6ZqO5bGkID4gc3luY2hyb25vdXNcLWRpZ2l0YWxcLWhpZXJhcmNoeTsKK+S4iua1t+aIsuWKh+WtuOmZoiA+IHNoYW5naGFpXC10aGVhdHJpY2FsXC1pbnN0aXR1dGU7CivlgrPovLjmjqfliLbljZTlrpogPiB0cmFuc21pc3Npb25cLWNvbnRyb2xcLXByb3RvY29sOwor5YKz57Wx5Lit5ZyL6Yar6JelID4gY2hpbmVzZVwtdHJhZGl0aW9uYWxcLW1lZGljaW5lOwor5Zu65a6a6Jmb5pOs6YCj5o6lID4gcGVybWFuZW50XC12aXJ0dWFsXC1jb25uZWN0aW9uOwor6ZaL5pS+57O757Wx5LqS6YCjID4gb3Blblwtc3lzdGVtc1wtaW50ZXJjb25uZWN0aW9uOwor5YyX5Lqs6Jed6KGT5a246ZmiID4gYmVpamluZ1wtYWNhZGVteVwtb2ZcLWZpbmVcLWFydHM7CivkuI3nmbvlpKfpm4XkuYvloIIgPiBub3RcLWFwcGVhbFwtdG9cLXJlZmluZWRcLXRhc3RlOwor5YyX5Lqs6Kqe6KiA5a246ZmiID4gYmVpamluZ1wtbGFuZ3VhZ2VzXC1pbnN0aXR1dGU7CivlnLDlnYDop6PmnpDljZTorbAgPiBhZGRyZXNzXC1yZXNvbHV0aW9uXC1wcm90b2NvbDsKK+acrOWcsOeuoeeQhueVjOmdoiA+IGxvY2FsXC1tYW5hZ2VtZW50XC1pbnRlcmZhY2U7CivnlbDmraXlgrPovLjmqKHlvI8gPiBhc3luY2hyb25vdXNcLXRyYW5zZmVyXC1tb2RlOwor6Zu76IWm6LyU5Yqp5pWZ5p2QID4gY29tcHV0ZXJcLWFpZGVkXC1pbnN0cnVjdGlvbjsKK+mbu+iFpui8lOWKqeW3peeoiyA+IGNvbXB1dGVyXC1haWRlZFwtZW5naW5lZXJpbmc7CivomZvmk6zpgJrpgZPpgKPmjqUgPiB2aXJ0dWFsXC1jaGFubmVsXC1jb25uZWN0aW9uOwor57ay57Wh566h55CG57O757WxID4gbmV0d29ya1wtbWFuYWdlbWVudFwtc3lzdGVtOwor5LiW55WM6KGb55Sf57WE57mUID4gd29ybGRcLWhlYWx0aFwtb3JnYW5pemF0aW9uOwor5YC85b6X5rOo5oSP55qE5pivID4gaXQnJ3NcLXdvcnRoXC1ub3RpbmdcLXRoYXRcLlwuXC47CivnkrDnkIPlrprkvY3ns7vntbEgPiBnbG9iYWxcLXBvc2l0aW9uaW5nXC1zeXN0ZW07Civlm6DnibnntrLmj5DkvpvllYYgPiBpbnRlcm5ldFwtc2V2aWNlXC1wcm92aWRlcjsKK+e2sue1oeaTjeS9nOezu+e1sSA+IG5ldHdvcmtcLW9wZXJhdGluZ1wtc3lzdGVtOwor5ZyW5YOP55So5oi25LuL6Z2iID4gZ3JhcGhpY2FsXC11c2VyXC1pbnRlcmZhY2U7CivpnaLlmq7lsI3osaHoqp7oqIAgPiBvYmplY3RcLW9yaWVudGVkXC1sYW5ndWFnZTsKK+WFseWQjOmWmOmBk+S7i+mdoiA+IGNvbW1vblwtZ2F0ZXdheVwtaW50ZXJmYWNlOwor57ay6Lev5L2c5qWt57O757WxID4gbmV0d29ya1wtb3BlcmF0aW5nXC1zeXN0ZW07CivlhaznnL7pm7vkv6HntrLot68gPiBwdWJsaWNcLXRlbGVwaG9uZVwtbmV0d29yazsKK+mdnuebiOWIqeeahOe1hOe5lCA+IG5vblwtcHJvZml0XC1vcmdhbml6YXRpb247CivoqIrmga/omZXnkIbns7vntbEgPiBtZXNzYWdlXC1oYW5kbGluZ1wtc3lzdGVtOwor5pW45a2X6KiC6LO857ea6LevID4gZGlnaXRhbFwtc3Vic2NyaWJlclwtbGluZTsKK+i+r+iovOWUr+eJqeS4u+e+qSA+IGRpYWxlY3RpY2FsXC1tYXRlcmlhbGlzbTsKK+e2sui3r+evgOm7nuS7i+mdoiA+IG5ldHdvcmtcLW5vZGVcLWludGVyZmFjZTsKK+ato+WcqOS4reWci+ioquWVjyA+IGR1cmluZ1wtYVwtdHJpcFwtdG9cLWNoaW5hOwor5YWr5bCP5pmC5bel5L2c5Yi2ID4gZWlnaHRcLWhvdXJcLXdvcmtpbmdcLWRheTsKK+a2iOaBr+mdiOmAmuS6uuWjqyA+IGFcLXdlbGxcLWluZm9ybWVkXC1zb3VyY2U7Civml6XmnKzntpPmv5/mlrDogZ4gPiBqYXBhbmVzZVwtZWNvbm9taWNcLW5ld3M7CivoqIrmga/lgrPpgZ7kuK3ku4sgPiBtZXNzYWdlXC10cmFuc2ZlclwtYWdlbnQ7Civpm7vohabovJTliqnoqK3oqIggPiBjb21wdXRlclwtYWlkZWRcLWRlc2lnbjsKK+aMgeS4jeWQjOaUv+imi+iAhSA+IFwocG9saXRpY2FsXClcLWRpc3NpZGVudDsKK+izh+aWmeWCs+mAgeacjeWLmSA+IGRhdGFcLWRlbGl2ZXJ5XC1zZXJ2aWNlOwor5LuL6LOq6Kiq5ZWP5o6n5Yi2ID4gbWVkaXVtXC1hY2Nlc3NcLWNvbnRyb2w7CivljbDluqblsLzopb/kup7oqp4gPiBpbmRvbmVzaWFuXC1cKGxhbmd1YWdlXCk7CivlpJrnqK7oqp7oqIDmlK/mjIEgPiBtdWx0aWxpbmd1YWxcLXN1cHBvcnQ7CivmjqXmlLblmajpnYjmlY/luqYgPiByZWNlaXZlclwtc2Vuc2l0aXZpdHk7CivmsJHml4/kuLvnvqnmg4Xnt5IgPiBuYXRpb25hbGlzdFwtZmVlbGluZ3M7CivlqpLpq5ToqKrllY/mjqfliLYgPiBtZWRpYVwtYWNjZXNzXC1jb250cm9sOwor5Zub5bm05Yi255qE5aSn5a24ID4gZm91clwteWVhclwtdW5pdmVyc2l0eTsKK+mCj+i8r+mPiOi3r+aOp+WItiA+IGxvZ2ljYWxcLWxpbmtcLWNvbnRyb2w7CivokKzntq3lpKnnvoXlnLDntrIgPiB3b3JsZFwtd2lkZVwtd2ViXC1cKHd3d1wpOwor5beh6L+05YiG5p6Q56uv5Y+jID4gcm92aW5nXC1hbmFseXNpc1wtcG9ydDsKK+WPquS4jemBjuW5vuW5tOWJjSA+IG9ubHlcLWFcLWZld1wteWVhcnNcLWFnbzsKK+S4gOeZvuS6lOWNgeWkmuW5tCA+IG1vcmVcLXRoYW5cLTE1MFwteWVhcnM7Civlk6XlgKvmr5Tkup7lpKflrbggPiBjb2x1bWJpYVwtdW5pdmVyc2l0eTsKK+iyv+aYk+S/neitt+S4u+e+qSA+IHRyYWRlXC1wcm90ZWN0aW9uaXNtOwor5Zyo5p+Q56iu56iL5bqm5LiKID4gdG9cLWFcLWNlcnRhaW5cLWV4dGVudDsKK+abvOW+ueaWr+eJuee3qOeivCA+IG1hbmNoZXN0ZXJcLWVuY29kaW5nOwor6KiK5qGG5YKz6YCB5pyN5YuZID4gZnJhbWVcLXJlbGF5XC1zZXJ2aWNlOwor6KiK5qGG5YKz6YCB57ay6LevID4gZnJhbWVcLXJlbGF5XC1uZXR3b3JrOwor6Zi/5q+U6KW/5bC85Lqe5Lq6ID4gYWJ5c3NpbmlhblwtXChwZXJzb25cKTsKK+S6nuWkque2k+WQiOe1hOe5lCA+IGFwZWNcLVwob3JnYW5pemF0aW9uXCk7Civou5/ku7bplovnmbzkurrlk6EgPiBzb2Z0d2FyZVwtZGV2ZWxvcGVyOwor5Zyo5YKz6Ly46YGO56iL5LitID4gd2hpbGVcLXRyYW5zbWl0dGluZzsKK+W/heS4jeWPr+Wwkee1hOaIkCA+IGFic29sdXRlXC1uZWNlc3NpdHk7Civnvo7lnIvoiKrnqbrlhazlj7ggPiBhbWVyaWNhblwtYWlybGluZXM7CivkuqTmj5vku6XlpKrntrLntaEgPiBzd2l0Y2hlZFwtZXRoZXJuZXQ7Civoq77osp3niL7lkozlubPnjY4gPiBub2JlbFwtcGVhY2VcLXByaXplOwor5LqU6KeS5aSn5qiT5a6Y5ZOhID4gcGVudGFnb25cLW9mZmljaWFsOwor6KiK5qGG5YKz6YCB6KuW5aOHID4gZnJhbWVcLXJlbGF5XC1mb3J1bTsKK+mYv+eIvuW3tOWwvOS6nuS6uiA+IGFsYmFuaWFuXC1cKHBlcnNvblwpOwor5LiN5YiG6Z2S57SF55qC55m9ID4gaW5kaXNjcmltaW5hdGVseTsKK+S4jeetiemCiuS4ieinkuW9oiA+IHNjYWxlbmVcLXRyaWFuZ2xlOwor57ay6Zqb57ay6Lev5Y2U5pyDID4gaW50ZXJuZXRcLXNvY2lldHk7CivkuInljYPliLDkupTljYPokKwgPiAzMFwtdG9cLTUwXC1taWxsaW9uOwor5LiA5YCL5Lit5ZyL5pS/562WID4gb25lXC1jaGluYVwtcG9saWN5Owor57ay57Wh6KaP5YqD5Lq65ZOhID4gbmV0d29ya1wtcGxhbm5lcjsKK+WFseS6q+S7peWkque2sue1oSA+IHNoYXJlZFwtZXRoZXJuZXQ7CivljaHntI3ntq3mi4nniL7op5IgPiBjYXBlXC1jYW5hdmVyYWw7CivljYDln5/ntrLot6/mioDooZMgPiBsYW5cLXRlY2hub2xvZ3k7CivolqnpgZTlp4bkvq/os73lm6AgPiBzYWRkYW1cLWh1c3NlaW47Civmkp7mk4rlvI/ljbDooajmqZ8gPiBpbXBhY3RcLXByaW50ZXI7Civmkp7mk4rlvI/miZPljbDmqZ8gPiBpbXBhY3RcLXByaW50ZXI7CivlhajnkIPmsKPlgJnljYfmuqsgPiBnbG9iYWxcLXdhcm1pbmc7CivmooXloZ7ov6rmlq/lpZTpprMgPiBtZXJjZWRlc1wtYmVuejsKK+Wlp+WFi+aLieiNt+mmrOW4giA+IG9rbGFob21hXC1jaXR5Owor6auY6YCf5LmZ5aSq57ay6LevID4gZmFzdFwtZXRoZXJuZXQ7Civlv6vpgJ/ku6XlpKrntrLntaEgPiBmYXN0XC1ldGhlcm5ldDsKK+S7peWkque2sue1oeerr+WPoyA+IGV0aGVybmV0XC1wb3J0Owor5Lqe5rSy6IiH5aSq5bmz5rSLID4gYXNpYVwtcGFjaWZpYzsKK+S4gOWNg+mbtuS6lOWNgeWEhCA+IDEwNVwtYmlsbGlvbjsKK+WQieeIvuWQieaWr+aWr+WdpiA+IGtpcmdoaXpzdGFuOwor5qau542y6Ku+6LKd54i+542OID4gbm9iZWxcLXByaXplOwor5LiJ5pyI5LqM5Y2B5LiJ6JmfID4gbWFyY2hcLTIzcmQ7CivmspLmnInnlJ/ogrLog73lipsgPiBpbmZlcnRpbGU7CivlnIvpmpvkupLoga/ntrLntaEgPiBpbnRlcm5ldDsKK+S4ieaciOS6jOWNgeS4gOiZnyA+IG1hcmNoXC0yMTsKK+WwiOeUqOmbhuaIkOmbu+i3ryA+IGFzaWM7CivlnJblg4/kupLmj5vmoLzlvI8gPiBnaWY7CivohKvmsKfmoLjns5bmoLjphbggPiBkbmE7Civmrrrpm57ntabnjLTnnIsgPiBcImtpbGxcLWFcLWNoaWNrZW5cLWluXC1mcm9udFwtb2ZcLWFcLW1vbmtleVwiXC1cLVwtXC1tYWtlXC1hblwtZXhhbXBsZVwtb3V0XC1vZlwtc29tZW9uZVwtXChieVwtcHVuaXNoaW5nXC10aGVtXClcLXRvXC1mcmlnaHRlblwtb3RoZXJzOwor55eF5oCl5LqC5oqV6YarID4gdHVyblwtdG9cLWFueVwtZG9jdG9yXC1vbmVcLWNhblwtZmluZFwtd2hlblwtY3JpdGljYWxseVwtaWxsXC1cLVwtdHJ5XC1hbnl0aGluZ1wtd2hlblwtaW5cLWFcLWRlc3BlcmF0ZVwtc2l0dWF0aW9uOwor5pav5Y2h5Lyv5YuS56SBID4gc2NhcmJvcm91Z2hcLXNob2FsXC1cKHBoaWxpcHBpbmVzJydcLW5hbWVcLWZvclwtaHVhbmd5YW5cLWlzbGFuZFwpOwor5Yaw54Kt5LiN55u45a65ID4gYXNcLWluY29tcGF0aWJsZVwtb3JcLWlycmVjb25jaWxhYmxlXC1hc1wtaWNlXC1hbmRcLWhvdFwtY29hbHM7Civpn4vniL7lvJfpm7fojLIgPiBcKGdlb3JnZVwpXC13ZWhyZnJpdHpcLVwoYmVpamluZ1wtYnVyZWF1XC1jaGllZlwtb2ZcLW5ld3N3ZWVrXCk7CivnkLNcLuaItOe2reaWryA+IGx5bm5cLWRhdmlzXC1cKHVzXC1zdGF0ZVwtZGVwYXJ0bWVudFwtYXJtc1wtY29udHJvbFwtZXhwZXJ0XCk7CivkurrmsJHooYzli5Xpu6ggPiBwZW9wbGUnJ3NcLWFjdGlvblwtcGFydHlcLVwocnVsaW5nXC1wYXJ0eVwtaW5cLXNpbmdhcG9yZVwpOwor5bi45Lu755CG5LqL5ZyLID4gcGVybWFuZW50XC1tZW1iZXJcLXN0YXRlXC1cKG9mXC11blwtc2VjdXJpdHlcLWNvdW5jaWxcKTsKK+S6uuawkeWkp+acg+WggiA+IGdyZWF0XC1oYWxsXC1vZlwtdGhlXC1wZW9wbGVcLFwtYXRcLXRpYW5hbm1lblwtc3F1YXJlOwor5qmL5pys6b6N5aSq6YOOID4gaGFzaGltb3RvXCxcLXJ5dXRhcm9cLVwocHJpbWVcLW1pbmlzdGVyXC1vZlwtamFwYW5cKTsKK+Wlp+eIvuW4g+iztOeJuSA+IFwobWFkZWxlaW5lXClcLWFsYnJpZ2h0XC1cKHVzXC1zZWNyZXRhcnlcLW9mXC1zdGF0ZVwpOwor5LiN55W25LiA5Zue5LqLID4gbm90XC1yZWdhcmRcLWFzXC1hXC1tYXR0ZXJcLVwob2ZcLWFueVwtaW1wb3J0YW5jZVwpOwor5LiN5omT5LiN55u46K2YID4gZnJvbVwtYW5cLWV4Y2hhbmdlXC1vZlwtYmxvd3NcLWZyaWVuZHNoaXBcLWdyb3dzOwor6IGv6YKm6Kq/5p+l5bGAID4gZmJpXC1cKGZlZGVyYWxcLWJ1cmVhdVwtb2ZcLWludmVzdGlnYXRpb25cKTsKK+S4gOS5neWbm+S5neW5tCA+IHRoZVwteWVhclwtMTk0OVwtXChjb21tdW5pc3RcLXJldm9sdXRpb25cKTsKK+e0hOe/sOWFp+aWr+WgoSA+IGpvaGFubmVzYnVyZ1wtXChjaXR5XC1pblwtc291dGhcLWFmcmljYVwpOwor5YiG5L2I5byP55Kw5aKDID4gZGlzdHJpYnV0ZWRcLVwoY29tcHV0aW5nXClcLWVudmlyb25tZW50Owor6Z2e5pS/5bqc57WE57mUID4gbm9uXC1nb3Zlcm5tZW50YWxcLW9yZ2FuaXphdGlvblwtXChuZ29cKTsKK+WwpOmHkeWhnueIvuWNlyA+IGV1Z2VuZVwtY2VybmFuXC1cKGFwb2xsb1wtMTdcLWFzdHJvbmF1dFwpOwor5q+U5YuS6ZmA5Yip5LqeID4gcHJldG9yaWFcLVwoY2FwaXRhbFwtb2ZcLXNvdXRoXC1hZnJpY2FcKTsKK+WNiuaXpeWItuWtuOagoSA+IGhhbGZcLWRheVwtXChvclwtZG91YmxlXC1zaGlmdFwtc2Nob29sXCk7CivotorkvobotorlmrTph40gPiB0b1wtYmVjb21lXC1tb3JlXC1zZXJpb3VzXC1ldmVyeVwtZGF5Owor5oiI54i+5be05Zas5aSrID4gXChmb3JtZXJcLXNvdmlldFwtbGVhZGVyXClcLWdvcmJhY2hldjsKK+WFq+e0muW3peizh+WItiA+IGVpZ2h0XC1ncmFkZVwtd2FnZVwtc2NhbGVcLVwoc3lzdGVtXCk7CivlnKjlr4bliIfms6jmhI8gPiB0b1wtcGF5XC1jbG9zZVwtYXR0ZW50aW9uXC1cKHRvXC1zdGhcKTsKK+aguOWogeaHvuaUv+etliA+IHBvbGljeVwtb2ZcLW51Y2xlYXJcLWludGltaWRhdGlvbjsKK+WPr+mBuOaTh+S4n+ajhCA+IGRpc2NhcmRcLWVsaWdpYmxlXC1cKGZyYW1lXC1yZWxheVwpOwor54m55Yil6KGM5pS/5Y2AID4gc3BlY2lhbFwtYWRtaW5pc3RyYXRpdmVcLXJlZ2lvbjsKK+iPr+ebm+mgk+aZguWgsSA+IHdhc2hpbmd0b25cLXRpbWVzXC1cKG5ld3NwYXBlclwpOwor5Ly85LmO5b6I5a6J5YWoID4gdG9cLWFwcGVhclwtXCh0b1wtYmVcKVwtdmVyeVwtc2FmZTsKK+S4reWkruaDheWgseWxgCA+IGNlbnRyYWxcLWludGVsbGlnZW5jZVwtYWdlbmN5Owor5pyN5YuZ5o+Q5L6b5ZWGID4gXChpbnRlcm5ldFwpXC1zZXJ2aWNlXC1wcm92aWRlcjsKK+euoeeQhuS/oeaBr+W6qyA+IG1hbmFnZW1lbnRcLWluZm9ybWF0aW9uXC1iYXNlOwor6I+v55ub6aCT6YO15aCxID4gd2FzaGluZ3RvblwtcG9zdFwtXChuZXdzcGFwZXJcKTsKK+mhmOaEj+S4jemhmOaEjyA+IHdoZXRoZXJcLW9uZVwtd2FudHNcLXRvXC1vclwtbm90Owor55m85bGV5qC45q2m5ZmoID4gdG9cLWRldmVsb3BcLW51Y2xlYXJcLXdlYXBvbnM7Civlj5vorornmoTnnIHku70gPiByZW5lZ2FkZVwtcHJvdmluY2VcLVwodGFpd2FuXCk7CivkuK3lnIvnp5HlrbjpmaIgPiBjaGluZXNlXC1hY2FkYW15XC1vZlwtc2NpZW5jZTsKK+eUqOaItuerr+ioreWCmSA+IGN1c3RvbWVyXC1wcmVtaXNlXC1lcXVpcG1lbnQ7CivkuI3nrYnlg7nkuqTmj5sgPiBleGNoYW5nZVwtb2ZcLXVuZXF1YWxcLXZhbHVlczsKK+awuOS5heiZm+mbu+i3ryA+IHBlcm1hbmVudFwtdmlydHVhbFwtY2lyY3VpdDsKK+WOn+WboOW+iOewoeWWriA+IHRoZVwtcmVhc29uXC1pc1wtdmVyeVwtc2ltcGxlOwor6YCa6KiK6Ieq5YuV5YyWID4gY29tbXVuaWNhdGlvbnNcLWF1dG9tYXRpb247CivluYDpppblrprnlYznrKYgPiBzdGFydFwtb2ZcLWZyYW1lXC1kZWxpbWl0ZXI7CivkuI3mib/oqo3kuLvnvqkgPiBwb2xpY3lcLW9mXC1ub25yZWNvZ25pdGlvbjsKK+aliueZvue/sOWkp+WtuCA+IGJyaWdoYW1cLXlvdW5nXC11bml2ZXJzaXR5Owor5YiG5L2I5byP57WQ5qeLID4gZGlzdHJpYnV0ZWRcLWFyY2hpdGVjdHVyZTsKK+aMgeS4jeWQjOaUv+imiyA+IFwocG9saXRpY2FsbHlcKVwtZGlzc2VudGluZzsKK+S6uuawkeino+aUvui7jSA+IHBlb3BsZScnc1wtbGliZXJhdGlvblwtYXJteTsKK+W+nuWkluihqOS+hueciyA+IGxvb2tpbmdcLWZyb21cLXRoZVwtb3V0c2lkZTsKK+S6pOaPm+iZm+mbu+i3ryA+IHN3aXRjaGVkXC12aXJ0dWFsXC1jaXJjdWl0Owor5qC45q2m5Zmo5p2Q5paZID4gbnVjbGVhclwtd2VhcG9uXC1tYXRlcmlhbDsKK+eZvOS9iOaWsOi7n+S7tiA+IHRvXC1yZWxlYXNlXC1uZXdcLXNvZnR3YXJlOwor5bCI5bGs57aT5r+f5Y2AID4gZXhjbHVzaXZlXC1lY29ub21pY1wtem9uZTsKK+a1geS6oeWcqOa1t+WkliA+IHRvXC1iZVwtaW5cLWV4aWxlXC1vdmVyc2VhczsKK+S4jeaKteaKl+S4u+e+qSA+IHBvbGljeVwtb2ZcLW5vbnJlc2lzdGFuY2U7CivlnKjku4rlubTlubTlupUgPiBhdFwtdGhlXC1lbmRcLW9mXC10aGlzXC15ZWFyOwor5L6G5Zue5L6G5Y675ZywID4gYmFja3dhcmRzXC1hbmRcLWZvcndhcmRzOwor57ay57Wh5bGk5Y2U6K2wID4gbmV0d29ya1wtbGF5ZXJcLXByb3RvY29sOwor5bel5qWt5YyW5ZyL5a62ID4gaW5kdXN0cmlhbGl6ZWRcLWNvdW50cnk7CivmlZnnvqnlkozogZbntIQgPiBkb2N0cmluZVwtYW5kXC1jb3ZlbmFudHM7CivntrLntaHnrqHnkIblk6EgPiBuZXR3b3JrXC1hZG1pbmlzdHJhdG9yOwor6Iqd5Yqg5ZOl5aSn5a24ID4gdW5pdmVyc2l0eVwtb2ZcLWNoaWNhZ287CivpmbjmtbfnqbrkuInou40gPiBhcm15XCxcLW5hdnlcLFwtYWlyXC1mb3JjZTsKK+acrOWcn+WMlui7n+S7tiA+IHNvZnR3YXJlXC1sb2NhbGl6YXRpb247CivmqpTmoYjliIbphY3ljYAgPiBmaWxlXC1hbGxvY2F0aW9uXC10YWJsZTsKK+WcsOWwjeepuuWwjuW9iCA+IGdyb3VuZFwtdG9cLWFpclwtbWlzc2lsZTsKK+S4jeS/oeS7u+aKleelqCA+IHZvdGVcLW9mXC1ub1wtY29uZmlkZW5jZTsKK+acrOS6uueahOingOm7niA+IFwob25lJydzXClcLXBlcnNvbmFsXC12aWV3Owor6Luf6auU6YWN6YCB6ICFID4gc29mdHdhcmVcLWRpc3RyaWJ1dG9yOwor5q235L6G5pyA5L2O6bueID4gYWxsXC10aW1lXC1sb3dcLVwocG9pbnRcKTsKK+exs+W+t+eIvuS8r+ijoSA+IG1pZGRsZWJ1cnlcLVwoY29sbGVnZVwpOwor5YWp6bue5Y2B5Lmd5YiGID4gMlwtXDoxXC05XC1cKHRpbWVcLW9mXC1kYXlcKTsKK+W5gOaqoumpl+W6j+WIlyA+IGZyYW1lXC1jaGVja1wtc2VxdWVuY2U7CivkuI3lrozlhajkuK3nq4sgPiBpbXBlcmZlY3RcLW5ldXRyYWxpdHk7CivlhYvph4zmlq/miZjlvJcgPiBcKHdhcnJlblwpXC1jaHJpc3RvcGhlcjsKK+mRkuWumuWnlOWToeacgyA+IGV2YWx1YXRpb25cLWNvbW1pdHRlZTsKK+mmrOS+huilv+S6nuiqniA+IG1hbGFzaWFuXC1cKGxhbmd1YWdlXCk7CivpgY7kuobkupTliIbpkJggPiBmaXZlXC1taW51dGVzXC1wYXNzZWQ7CivlhYvnvoXlnLDkup7oqp4gPiBjcm9hdGlhblwtXChsYW5ndWFnZVwpOwor6KiO6KuW55qE6K2w6aGMID4gdG9waWNcLW9mXC1kaXNjdXNzaW9uOwor5Zyw5Z2A55qE6L2J5o+bID4gYWRkcmVzc1wtdHJhbnNsYXRpb247Civoh6rli5XlnLDlt6XkvZwgPiBhdXRvbWF0aWNcLW9wZXJhdGlvbjsKK+S/neWuieiHquWLleWMliA+IHNlY3VyaXR5XC1hdXRvbWF0aW9uOwor5YiG5L2I5byP57ay57WhID4gZGlzdHJpYnV0ZWRcLW5ldHdvcms7CivkuI3mnJ/nhLbogIznhLYgPiBoYXBwZW5cLXVuZXhwZWN0ZWRseTsKK+WKoOWAvOWei+e2sui3ryA+IHZhbHVlXC1hZGRlZFwtbmV0d29yazsKK+WboOeJuee2suiBr+mAmiA+IGludGVybmV0XC1jb25uZWN0aW9uOwor56eR5a2455qE5Lqk5rWBID4gc2NpZW50aWZpY1wtZXhjaGFuZ2U7Civpi7Dpm6LlrZDpm7vmsaAgPiBsaXRoaXVtXC1pb25cLWJhdHRlcnk7CivplbfmnJ/nqanlrprmgKcgPiBsb25nXC10ZXJtXC1zdGFiaWxpdHk7CivmqJPlrofoh6rli5XljJYgPiBidWlsZGluZ1wtYXV0b21hdGlvbjsKK+imlueql+WKoOmAn+WZqCA+IHdpbmRvd3NcLWFjY2VsYXJhdG9yOwor6I+v54i+6KGX5pel5aCxID4gd2FsbFwtc3RyZWV0XC1qb3VybmFsOwor5ZyL5rCR6buo6LuN6ZqKID4gbmF0aW9uYWxpc3RcLWZvcmNlczsKK+S4gOWwj+aZguS7peW+jCA+IGFcLXNob3J0XC10aW1lXC1sYXRlcjsKK+e2sui3r+mAo+aOpeWxpCA+IG5ldHdvcmtcLWxpbmtcLWxheWVyOwor5bq35aWI54i+5aSn5a24ID4gY29ybmVsbFwtdW5pdmVyc2l0eTsKK+WhnueIvue2reS6nuiqniA+IHNlcmJpYW5cLVwobGFuZ3VhZ2VcKTsKK+aWr+eTpuW4jOijoeiqniA+IHN3YWhpbGlcLVwobGFuZ3VhZ2VcKTsKK+Wci+Wutuaomea6lueivCA+IGdiXC1cKGd1b1wtYmlhb1wpXC1jb2RlOwor5pys5Yid5a2Q5Y2I57eaID4gdGhlXC1maXJzdFwtbWVyaWRpYW47Civlrrbluq3mtojosrvogIUgPiBob3VzZWhvbGRcLWNvbnN1bWVyOwor5Z+f5ZCN5pyN5YuZ5ZmoID4gZG9tYWluXC1uYW1lXC1zZXJ2ZXI7CivnmbzlsZXkuK3lnIvlrrYgPiBkZXZlbG9waW5nXC1jb3VudHJ5Owor5aSa56uv5Lit57m85ZmoID4gbXVsdGlwb3J0XC1yZXBlYXRlcjsKK+eZvOWxleeahOWci+WutiA+IGRldmVsb3BpbmdcLWNvdW50cnk7CivnlJ/mtLvlv4XpnIDlk4EgPiBsaWZlJydzXC1uZWNlc3NpdGllczsKK+WPr+ihjOaAp+eglOeptiA+IGZlYXNpYmlsaXR5XC1zdHVkeTsKK+aVuOaTmuW6q+i7n+S7tiA+IGRhdGFiYXNlXC1zb2Z0d2FyZTsKK+ilv+ijoeeIvuWtl+avjSA+IGN5cmlsbGljXC1hbHBoYWJldDsKK+aSkui/puWIqeS6nuabuCA+IGJvb2tcLW9mXC16ZWNoYXJpYWg7Civms6Llo6vpoJPlpKflrbggPiBib3N0b25cLXVuaXZlcnNpdHk7Civovqblhazoh6rli5XljJYgPiBvZmZpY2VcLWF1dG9tYXRpb247CivkuI3lj4rnianli5XoqZ4gPiBpbnRyYW5zaXRpdmVcLXZlcmI7Civohp3kuIrlnovpm7vohaYgPiBsYXB0b3BcLVwoY29tcHV0ZXJcKTsKK+S4reWkruWnlOWToeacgyA+IGNlbnRyYWxcLWNvbW1pdHRlZTsKK+WIsOmCo+WAi+aZguWAmSA+IHVudGlsXC10aGlzXC1tb21lbnQ7CivmtJvmnYnno6/mmYLloLEgPiBsb3NcLWFuZ2VsZXNcLXRpbWVzOwor5paH5YyW55qE5Lqk5rWBID4gY3VsdHVyYWxcLWV4Y2hhbmdlOwor5pav5rSb5LyQ5YWL6KqeID4gc2xvdmFrXC1cKGxhbmd1YWdlXCk7CivlpJblnIvml4XpgYrogIUgPiBmb3JlaWduXC10cmF2ZWxsZXI7CivkuIDljYPkuIPnmb7okKwgPiBzZXZlbnRlZW5cLW1pbGxpb247Civlp5Tlk6HmnIPmnIPorbAgPiBjb21taXR0ZWVcLW1lZXRpbmc7CivoqIjnrpfmqZ/lt6Xmpa0gPiBjb21wdXRlclwtaW5kdXN0cnk7CivlhbHnlKLpu6jpg6jpmoogPiBjb21tdW5pc3RcLWZvcmNlczsKK+acjeWLmeaPkOS+m+iAhSA+IHNlcnZpY2VcLXByb3ZpZGVyOwor56e75YuV5byP6Zu76KmxID4gbW9iaWxlXC10ZWxlcGhvbmU7CivlqZrlpJbmgKfmjqXop7ggPiBleHRyYW1hcml0YWxcLXNleDsKK+azoue+juavlOmHjeioiCA+IGJhdW1lXC1oeWRyb21ldGVyOwor5aSW5ZyL5oqV6LOH6ICFID4gZm9yZWlnblwtaW52ZXN0b3I7CivnlbDmgKfmgKfmjqXop7ggPiBoZXRlcm9zZXh1YWxcLXNleDsKK+ahjOS4iuWei+mbu+iFpiA+IGRlc2t0b3BcLWNvbXB1dGVyOwor6KiY6ICF5oub5b6F5pyDID4gcHJlc3NcLWNvbmZlcmVuY2U7Civljp/lrZDnp5HlrbjlrrYgPiBhdG9taWNcLXNjaWVudGlzdDsKK+mVt+W6puaMh+ekuuespiA+IGxlbmd0aFwtaW5kaWNhdG9yOwor5Lu/55yf5pyN5YuZ5ZmoID4gZW11bGF0aW9uXC1zZXJ2ZXI7CivoqIjnrpfmqZ/ntrLntaEgPiBjb21wdXRlclwtbmV0d29yazsKK+mBjuS7veewoeWWruWMliA+IG92ZXJzaW1wbGljYXRpb247Civnn6XorZjlt6XnqIvluKsgPiBrbm93bGVkZ2VcLXdvcmtlcjsKK+izh+aWmemPiOe1kOWxpCA+IGRhdGFcLWxpbmtcLWxheWVyOwor6Zu2562J5b6F54uA5oWLID4gemVyb1wtd2FpdFwtc3RhdGU7CivlnKjlvojlpJrmlrnpnaIgPiBpblwtbWFueVwtYXNwZWN0czsKK+S/hOW3tOW6leS6nuabuCA+IGJvb2tcLW9mXC1vYmFkaWFoOwor5pW45pOa6Y+I6Lev5bGkID4gZGF0YVwtbGlua1wtbGF5ZXI7CivnqK7ml4/kuLvnvqnogIUgPiByYWNpc3RcLVwocGVyc29uXCk7CivntrLntaHngI/opr3lmaggPiBuZXR3b3JrXC1icm93c2VyOwor5a6i5oi25qmf6Luf5Lu2ID4gY2xpZW50XC1zb2Z0d2FyZTsKK+iHquWLleWUruiyqOapnyA+IHZlbmRpbmdcLW1hY2hpbmU7CivntrLntaHmiZPljbDmqZ8gPiBuZXR3b3JrXC1wcmludGVyOwor5p2/5p2/5YWt5Y2B5ZubID4gdW5hY2NvbW1vZGF0aW5nOwor56ys5LiA5YCL5bGk5qyhID4gdGhlXC1maXJzdFwtc3RhZ2U7CivlhajnkIPos4foqIrntrIgPiB3b3JsZFwtd2lkZVwtd2ViOwor5Lul5aSq57ay57Wh5bmAID4gZXRoZXJuZXRcLWZyYW1lOwor5LiN5bmz562J5qKd57SEID4gdW5lcXVhbFwtdHJlYXR5Owor5ZaY5LiN6YGO5rCj5L6GID4gY2Fubm90XC1icmVhdGhlOwor5o235YWL5YWx5ZKM5ZyLID4gY3plY2hcLXJlcHVibGljOwor5bel5qWt55qE5beo6aCtID4gaW5kdXN0cnlcLW1vZ29sOwor5q+P56uv5Y+j5YO55qC8ID4gcHJpY2VcLXBlclwtcG9ydDsKK+S4jeato+W4uOeLgOazgSA+IGFibm9ybWFsXC1zdGF0ZTsKK+mWi+aUvuW8j+ezu+e1sSA+IG9wZW5cLXN5c3RlbVwoc1wpOwor5LiW55WM55qE6Kqe6KiAID4gd29ybGRcLWxhbmd1YWdlOwor5r+A5YWJ5omT5byV5qmfID4gbGFzZXJcLXByaW50ZXI7Civlk6XmnpflpJrlvozmm7ggPiAyXC1jb3JpbnRoaWFuczsKK+S4jeiomOWQjeaKleelqCA+IHNlY3JldFwtYmFsbG90Owor5LiN5YiX6aGb6Ku45bO2ID4gYnJpdGlzaFwtaXNsZXM7Civlk6XmnpflpJrliY3mm7ggPiAxXC1jb3JpbnRoaWFuczsKK+S4jeWPr+iDveeahOS6iyA+IGltcG9zc2liaWxpdHk7Civnmb7liIbkuYvkupTljYEgPiBmaWZ0eVwtcGVyY2VudDsKK+iJvua7i+eXheaKl+mrlCA+IGFpZHNcLWFudGlib2R5Owor5LiN5Y+v5L6154qv5qyKID4gaW52aW9sYWJpbGl0eTsKK+mQs+WwhOWNsOihqOapnyA+IGxhc2VyXC1wcmludGVyOwor55Sf5ZG955qE6YG66LehID4gdHJhY2VcLW9mXC1saWZlOwor5LiA5Lmd5Lmd5LiD5bm0ID4gdGhlXC15ZWFyXC0xOTk3Owor5YWo5LiW55WM56ys5LiAID4gd29ybGQnJ3NcLWZpcnN0Owor5pmu6YCa6ICB55m+5aeTID4gY29tbW9uXC1wZW9wbGU7Civoib7mu4vnl4XmgqPogIUgPiBhaWRzXC1wYXRpZW50Owor57C/6KiY566h55CG5ZOhID4gY29tbWlzc2FyaWFuOwor5qC45q2m5Zmo6Kmm6amXID4gbnVjbGVhclwtdGVzdDsKK+S6jOWNgeS4gOS4lue0gCA+IDIxc3RcLWNlbnR1cnk7CivmnInmop3mnInnkIblnLAgPiBtZXRob2RpY2FsbHk7CivkuI3mmK/njqnlhZLnmoQgPiBpdCcnc1wtbm9cLWpva2U7Civnspfkv5fnmoTpmo7ntJogPiB2dWxnYXJcLWNsYXNzOwor5omT5Y2w5pyN5YuZ5ZmoID4gcHJpbnRcLXNlcnZlcjsKK+izk+ilv+azleWwvOS6niA+IHBlbm5zeWx2YW5pYTsKK+iAtuWIqeexs+WTgOatjCA+IGxhbWVudGF0aW9uczsKK+WFq+S5neS4jembouWNgSA+IHByZXR0eVwtY2xvc2U7CivplovmlL7lvI/ntrLot68gPiBvcGVuXC1uZXR3b3JrOwor5YWL6KOh5aeG5p6X5a6uID4gdGhlXC1rcmVtbGluOwor5aSq5bmz5rSL6YCx6YKKID4gcGFjaWZpY1wtcmltOwor5r+A5YWJ5LqM5qW1566hID4gbGFzZXJcLWRpb2RlOwor5Zmo5a6Y5o2Q54276ICFID4gb3JnYW5cLWRvbm9yOwor5paH5Lu25pyN5YuZ5ZmoID4gZmlsZVwtc2VydmVyOwor54675oSP6ICz5a6a5b6LID4gYm95bGUnJ3NcLWxhdzsKK+S4gOWNg+Wbm+eZvuWEhCA+IDE0MFwtYmlsbGlvbjsKK+iHqueUsemBuOaTh+asiiA+IGZyZWVcLWFnZW5jeTsKK+W3tOaer+Wvp+S4u+e+qSA+IGJha3VuaW5pc207CivoqqrkuI3lh7roqbHkvoYgPiBzcGVlY2hsZXNzOwor5aGU5ZCJ5YWL5pav5Z2mID4gdGFqaWtpc3RhbjsKK+WKoOWIqeemj+WwvOS6niA+IGNhbGlmb3JuaWE7Civkvb/nlKjogIXkuK3ku4sgPiB1c2VyXC1hZ2VudDsKK+WTiOiWqeWFi+aWr+WdpiA+IGthemFraHN0YW47Civnmb7liIbkuYvkuZ3ljYEgPiA5MFwtcGVyY2VudDsKK+WFrOmWi+iojuirluacgyA+IG9wZW5cLWZvcnVtOwor6Im+5ruL55eF55eF5q+SID4gYWlkc1wtdmlydXM7CivlnLDmlrnlrpjogbfkvY0gPiBwcmVmZWN0dXJlOwor56OB55uk6amF5YuV5ZmoID4gZGlzbFwtZHJpdmU7CivlpbPoo53oo4HnuKvluKsgPiBkcmVzc21ha2VyOwor6ZW35a2Q55qE5ZCN5Lu9ID4gYmlydGhyaWdodDsKK+S4gOeZvuS6lOWNgeWEhCA+IDE1XC1iaWxsaW9uOwor6Zi/5q+U6KW/5bC85LqeID4gYWJ5c3NpbmlhOwor56S+5pyD5Li7576p6ICFID4gc29jaWFsaXN0Owor5o+Q5pGp5aSq5ZCO5pu4ID4gMlwtdGltb3RoeTsKK+WIsOebruWJjeeCuuatoiA+IHVudGlsXC1ub3c7CivmtYHooYzmgKfmhJ/lhpIgPiBpbmZsdWVuemE7CivkuI3nqanlrprmsKPmtYEgPiB0dXJidWxlbnQ7Civmj5DmkanlpKrliY3mm7ggPiAxXC10aW1vdGh5Owor5rOi5Yip5bC86KW/5LqeID4gcG9seW5lc2lhOwor5ZyW5pu4566h55CG5ZOhID4gbGlicmFyaWFuOwor5Y2w5bqm5bC86KW/5LqeID4gaW5kb25lc2lhOwor5rCR5Li75Li7576p6ICFID4gZGVtb2NyYXRzOwor6K6K54Sm6Led6Y+h6aCtID4gem9vbVwtbGVuczsKK+S8gealremWk+e2sui3ryA+IGV4dHJhbmV0Owor5bi45Z2Q5rG96LuK6ICFID4gbW90b3Jpc3Q7Civmsb3ou4rlsZXopr3mnIMgPiBjYXJcLXNob3c7CivkvIHmpa3lhafntrLot68gPiBpbnRyYW5ldDsKK+aSkuavjeiAs+iomOS4iyA+IDJcLXNhbXVlbDsKK+aSkuavjeiAs+iomOS4iiA+IDFcLXNhbXVlbDsKK+Wbm+aciOWNgeS4g+iZnyA+IGFwcmlsXC0xNzsKK+elnuWtuOeglOeptuaJgCA+IHNlbWluYXJ5Owor5Z+D5aGe5L+E5q+U5LqeID4gZXRoaW9waWE7CivlpaflhYvmi4nojbfppqwgPiBva2xhaG9tYTsKK+S4jeWQjeitveS6i+eJqSA+IGRpc2hvbm9yOwor5rW36LuN57i95Y+45LukID4gYWRtaXJhbDsKK+S6lOaciOWNgeS6lOiZnyA+IG1heVwtMVwtNTsKK+mYv+eIvuWPiuWIqeS6niA+IGFsZ2VyaWE7CivkuIPmnIjkuInljYHomZ8gPiBqdWx5XC0zMDsKK+mmrOWFi+aAneS4u+e+qSA+IG1hcnhpc207CivpmL/niL7lt7TlsLzkup4gPiBhbGJhbmlhOwor5LiA56+AXCjoqalcKSA+IHN0YW56YTsKK+mAj+WNsOeJiOWNsOWItyA+IG9mZnNldDsKK+avm+e5lOmBi+WLleihqyA+IGplcnNleTsKK+eUt+S/rumBk+mZoumVtyA+IGFiYm90Owor6Kq/5Yi26Kej6Kq/5ZmoID4gbW9kZW07CivkuInoibLntKvnvoXomK0gPiBwYW5zeTsKK+WuieWFqOeQhuS6i+acgyA+IHRoZVwtdTsKK+aKseiWquaVkeeBqyA+IGNhcnJ5XC1mYWdnb3RzXC10b1wtcHV0XC1vdXRcLWFcLWZpcmVcLVwtXC1hZG9wdFwtYVwtd3JvbmdcLW1ldGhvZFwtdG9cLXNhdmVcLWFcLXNpdHVhdGlvblwtYW5kXC1lbmRcLXVwXC1ieVwtbWFraW5nXC1pdFwtd29yc2U7Civmna/msLTou4rolqogPiB0cnlpbmdcLXRvXC1wdXRcLW91dFwtYVwtYnVybmluZ1wtY2FydGxvYWRcLW9mXC1mYWdnb3RzXC13aXRoXC1hXC1jdXBcLW9mXC13YXRlclwtXC1cLWFuXC11dHRlcmx5XC1pbmFkZXF1YXRlXC1tZWFzdXJlOwor6L6v6Ki85pa95rK7ID4gZGlhZ25vc2lzXC1hbmRcLXRyZWF0bWVudFwtYmFzZWRcLW9uXC1hblwtb3ZlcmFsbFwtYW5hbHlzaXNcLW9mXC10aGVcLWlsbG5lc3NcLWFuZFwtdGhlXC1wYXRpZW50JydzXC1jb25kaXRpb247CivmlZ3luJroh6rnj40gPiB2YWx1ZVwtb25lJydzXC1vd25cLW9sZFwtYnJvb21cLVwtXC1jaGVyaXNoXC1zb21ldGhpbmdcLW9mXC1saXR0bGVcLXZhbHVlXC1zaW1wbHlcLWJlY2F1c2VcLWl0XC1pc1wtb25lJydzXC1vd247CivlhbXkuI3ooYDliIMgPiB0aGVcLWVkZ2VzXC1vZlwtdGhlXC1zd29yZHNcLW5vdFwtYmVpbmdcLXN0YWluZWRcLXdpdGhcLWJsb29kXC1cLVwtd2luXC12aWN0b3J5XC13aXRob3V0XC1maXJpbmdcLWFcLXNob3Q7CivppIrlhZLpmLLogIEgPiBcKG9mXC1wYXJlbnRzXClcLXRvXC1icmluZ1wtdXBcLWNpaGxkcmVuXC1mb3JcLXRoZVwtcHVycG9zZVwtb2ZcLWJlaW5nXC1sb29rZWRcLWFmdGVyXC1pblwtb2xkXC1hZ2U7CivkuI3lhbHmiLTlpKkgPiB3aWxsXC1ub3RcLWxpdmVcLXVuZGVyXC10aGVcLXNhbWVcLXNreVwtXCh3aXRoXC1vbmUnJ3NcLWVuZW15XClcLVwtXC1hYnNvbHV0ZWx5XC1pcnJlY29uY2lsYWJsZTsKK+aTiuWFtuaDsOatuCA+IGF2b2lkXC10aGVcLWVuZW15XC13aGVuXC1oZVwtaXNcLWZyZXNoXC1hbmRcLXN0cmlrZVwtaGltXC13aGVuXC1oZVwtaXNcLXRpcmVkXC1hbmRcLXdpdGhkcmF3czsKK+mBv+WFtumKs+awoyA+IGF2b2lkXC10aGVcLWVuZW15XC13aGVuXC1oZVwtaXNcLWZyZXNoXC1hbmRcLXN0cmlrZVwtaGltXC13aGVuXC1oZVwtaXNcLXRpcmVkXC1hbmRcLXdpdGhkcmF3czsKK+S/neeUsuWItuW6piA+IHRoZVwtYmFvXC1qaWFcLXN5c3RlbVwtXChhblwtYWRtaW5pc3RyYXRpdmVcLXN5c3RlbVwtb3JnYW5pemVkXC1vblwtYmFzaXNcLW9mXC1ob3VzZWhvbGRzXCk7CivkuI3ovqjoj73puqUgPiBiZVwtdW5hYmxlXC10b1wtdGVsbFwtYmVhbnNcLWZyb21cLXdoZWF0XC1cLVwtaGF2ZVwtbm9cLWtub3dsZWRnZVwtb2ZcLXByYWN0aWNhbFwtbWF0dGVyczsKK+aBreWWnOeZvOiyoSA+IGNvbmdyYXR1bGF0aW9uc1wtZm9yXC1nZXR0aW5nXC1yaWNoXC1cKHRyYWRpdGlvbmFsXC1jaGluZXNlXC1uZXdcLXllYXInJ3NcLWZ1dHVyZVwtdXNlOwor5aGe6Z+L6KOh6Ku+ID4gXFtqZWFuXC1taWNoZWxcXVwtc2V2ZXJpbm9cLVxbd29ybGRcLWJhbmtcLXZpY2VcLXByZXNpZGVudFwsXC1lYXN0XC1hc2lhXC1hbmRcLXBhY2lmaWNcXTsKK+acieacn+W+kuWIkSA+IGxpbWl0ZWRcLXRlcm1cLW9mXC1pbXByaXNvbm1lbnRcLVwoaWVcLFwtYW55dGhpbmdcLWxlc3NcLXRoYW5cLWxpZmVcLWltcHJpc29ubWVudFwpOwor6ZaJ55uu5aGe6IG9ID4gc2h1dHNcLW9uZScnc1wtZXllc1wtYW5kXC1zdG9wXC11cFwtb25lJydzXC1lYXJzXC1cLVwtYmVcLW91dFwtb2ZcLXRvdWNoXC13aXRoXC1yZWFsaXR5Owor56yo6bOl5YWI6aObID4gY2x1bXN5XC1iaXJkc1wtaGF2ZVwtdG9cLXN0YXJ0XC1mbHlpbmdcLWVhcmx5XC1cLVwtdGhlXC1zbG93XC1uZWVkXC10b1wtc3RhcnRcLWVhcmx5Owor5pys6I2J57ax55uuID4gYW5cLW91dGxpbmVcLXRyZWF0aXNlXC1vZlwtbWVkaWNhbFwtaGVyYnNcLFwtY29tcGlsZWRcLWJ5XC1saTNcLXNoaTJcLXpoZW4xXC3mnY7mmYLnj407CivlhbXlvLfppqzlo68gPiBzdHJvbmdcLXNvbGRpZXJzXC1hbmRcLXN0dXJkeVwtaG9yc2VzXC1cLVwtYVwtd2VsbFwtdHJhaW5lZFwtYW5kXC1wb3dlcmZ1bFwtYXJteTsKK+alreS9meWkp+WtuCA+IGNvbGxlZ2VcLWZvclwtcGVvcGxlXC13aG9cLWF0dGVuZFwtYWZ0ZXJcLXdvcmtcLVwobGl0XC5cOlwtc3BhcmVcLXRpbWVcLWNvbGxlZ2VcKTsKK+aNlemiqOaNieW9sSA+IGNoYXNlXC10aGVcLXdpbmRcLWFuZFwtY2x1dGNoXC1hdFwtc2hhZG93c1wtXC1cLW1ha2VcLWdyb3VuZGxlc3NcLWFjY3VzYXRpb25zOwor5LiN5YiG5b285q2kID4gbWFrZVwtbm9cLWRpc3RpbmN0aW9uXC1iZXR3ZWVuXC13aGF0JydzXC1vbmUnJ3NcLW93blwtYW5kXC13aGF0JydzXC1hbm90aGVyJydzOwor5LiN55+l5Yeh5bm+ID4gY2FuJyd0XC10ZWxsXC1ob3dcLW1hbnlcLXRoZXJlXC1hcmVcLVwtXC10aGVyZVwtYXJlXC1udW1lcm91c1wtc2ltaWxhclwtY2FzZXM7CivmirHmrpjlrojnvLogPiBjaGVyaXNoXC10aGVcLW91dG1vZGVkXC1hbmRcLXByZXNlcnZlXC10aGVcLW91dHdvcm5cLVwtXC1iZVwtY29uc2VydmF0aXZlOwor5Y2a5Y+k6YCa5LuKID4gY29udmVyc2FudFwtd2l0aFwtdGhpbmdzXC1wYXN0XC1hbmRcLXByZXNlbnRcLVwtXC1lcnVkaXRlXC1hbmRcLWluZm9ybWVkOwor5aSn6ayn5aSp5a6uID4gXCJ0aGVcLW1vbmtleVwtY3JlYXRlc1wtaGF2b2NcLWluXC1oZWF2ZW5cIlwsXC1zdG9yeVwtYWJvdXRcLXN1blwtd3VcLWtvbmc7CivmgrLlpKnmhqvkurogPiBiZW1vYW5cLXRoZVwtc3RhdGVcLW9mXC10aGVcLXVuaXZlcnNlXC1hbmRcLXBpdHlcLXRoZVwtZmF0ZVwtb2ZcLW1hbmtpbmQ7CivkuI3mnI3msLTlnJ8gPiBcKG9mXC1hXC1zdHJhbmdlclwpXC1ub3RcLWFjY3VzdG9tZWRcLXRvXC10aGVcLWNsaW1hdGVcLW9mXC1hXC1uZXdcLXBsYWNlOwor5ZOA5YW15b+F5YudID4gYW5cLWFybXlcLWJ1cm5pbmdcLXdpdGhcLXJpZ2h0ZW91c1wtaW5kaWduYXRpb25cLWlzXC1ib3VuZFwtdG9cLXdpbjsKK+efm+mgreaMh+WQkSA+IHRhcmdldFwtc29tZW9uZVwtb3JcLXNvbWV0aGluZ1wtXChmb3JcLWF0dGFja1wsXC1jcml0aWNpc21cLFwtZXRjXC5cKTsKK+S4jeaBpeS4i+WVjyA+IG5vdFwtZmVlbFwtYXNoYW1lZFwtdG9cLWFza1wtYW5kXC1sZWFyblwtZnJvbVwtb25lJydzXC1zdWJvcmRpbmF0ZXM7CivljaHmi4lPSyA+IGthcmFva2VcLVwoc2luZ2luZ1wtdG9cLXJlY29yZGVkXC1pbnN0cnVtZW50YWxcLWFjY29tcGFuaW1lbnRcKTsKK+S4reWci+awkeiIqiA+IGdlbmVyYWxcLWFkbWluaXN0cmF0aW9uXC1vZlwtY2l2aWxcLWF2aWF0aW9uXC1vZlwtY2hpbmFcLVwoY2FhY1wpOwor5LiJ5ZyL5ryU576pID4gbmFtZVwtb2ZcLWFcLWNsYXNzaWNcLW5vdmVsXCxcLVwicm9tYW5jZVwtb2ZcLXRoZVwtdGhyZWVcLWtpbmdkb21zXCI7Civog4zmsLTkuIDmiLAgPiBmaWdodFwtd2l0aFwtb25lJydzXC1iYWNrXC10b1wtdGhlXC1yaXZlclwtXC1cLWZpZ2h0XC10b1wtd2luXC1vclwtZGllOwor5p2v5byT6JuH5b2xID4gbWlzdGFraW5nXC10aGVcLXJlZmxlY3Rpb25cLW9mXC1hXC1ib3dcLWluXC10aGVcLWN1cFwtZm9yXC1hXC1zbmFrZTsKK+iDjOS6lemboumEiSA+IGxlYXZlXC1vbmUnJ3NcLW5hdGl2ZVwtcGxhY2VcLVwoZXNwZWNpYWxseVwtYWdhaW5zdFwtb25lJydzXC13aWxsXCk7Civms6LngL7otbfkvI8gPiBvZlwtYVwtcGllY2VcLW9mXC13cml0aW5nXC13aXRoXC1vbmVcLWNsaW1heFwtZm9sbG93aW5nXC1hbm90aGVyOwor5LiN54K65bey55SaID4gcmVmcmFpblwtZnJvbVwtZ29pbmdcLXRvXC1leHRyZW1lc1wtaW5cLW1ldGluZ1wtb3V0XC1wdW5pc2htZW50Owor5LiN57SE6ICM5ZCMID4gdGFrZVwtdGhlXC1zYW1lXC1hY3Rpb25cLW9yXC12aWV3XC13aXRob3V0XC1wcmlvclwtY29uc3VsdGF0aW9uOwor5YWr6Z2i546y55OPID4gYmVcLXNtb290aFwtYW5kXC1zbGlja1wtXChpblwtZXN0YWJsaXNoaW5nXC1zb2NpYWxcLXJlbGF0aW9uc1wpOwor55y+5b+X5oiQ5Z+OID4gXCJ1bml0eVwtb2ZcLXdpbGxcLWlzXC1hblwtaW1wcmVnbmFibGVcLXN0cm9uZ2hvbGRcIlwtXChwcm92ZXJiXCk7Civmipfml6XmiLDniK0gPiBcKGNoaW5hJydzXClcLXdhclwtb2ZcLXJlc2lzdGFuY2VcLWFnYWluc3RcLWphcGFuXC1cKDE5MzdcLTE5NDVcKTsKK+Wkp+adkOWwj+eUqCA+IHVzaW5nXC1hXC10YWxlbnRlZFwtcGVyc29uXC1pblwtYW5cLWluc2lnbmlmaWNhbnRcLXBvc2l0aW9uOwor5LiN6IGe5LiN5ZWPID4gbm90XC1ib3RoZXJcLXRvXC1hc2tcLXF1ZXN0aW9uc1wtb3JcLWxpc3RlblwtdG9cLXdoYXQnJ3NcLXNhaWQ7CivkuKbooYzkuI3mgpYgPiBib3RoXC1jYW5cLWJlXC1pbXBsZW1lbnRlZFwtd2l0aG91dFwtY29taW5nXC1pbnRvXC1jb25mbGljdDsKK+atpeatpeeCuueHnyA+IGFkdmFuY2VcLWdyYWR1YWxseVwtYW5kXC1lbnRyZW5jaFwtb25lc2VsZlwtYXRcLWV2ZXJ5XC1zdGVwOwor5LiA5pyb54Sh6ZqbID4gYXNcLWZhclwtYXNcLXRoZVwtZXllXC1jYW5cLXNlZVwtXChsaXRcOlwtbG9va1wtYWZhclwtbm9cLWJvdW5kXCk7CivkuI3opovntpPlgrMgPiBub3RcLXRvXC1iZVwtZm91bmRcLWluXC10aGVcLWNsYXNzaWNzXC1cLVwtbm90XC1hdXRob3JpdGF0aXZlOwor5pKl6Zuy6KaL5pelID4gZGlzcGVsXC10aGVcLWNsb3Vkc1wtYW5kXC1zZWVcLXRoZVwtc3VuXC1cLVwtcmVzdG9yZVwtanVzdGljZTsKK+WuieatpeeVtui7iiA+IHdhbGtcLW92ZXJcLWxlaXN1cmVseVwtaW5zdGVhZFwtb2ZcLXJpZGluZ1wtaW5cLWFcLWNhcnJpYWdlOwor5LiN5Yud5p6a6IiJID4gdG9vXC1udW1lcm91c1wtdG9cLW1lbnRpb25cLWluZGl2aWR1YWxseVwtb3JcLW9uZVwtYnlcLW9uZTsKK+izk+iHs+WmguatuCA+IGd1ZXN0c1wtZmVlbFwtYXRcLWhvbWVcLVwoaW5cLWFcLWhvdGVsXCxcLWd1ZXN0aG91c2VcLFwtZXRjXC5cKTsKK+WwlumWo+WIl+WztiA+IHNlbmtha3VcLWlzbGFuZHNcLVwoamFwYW5lc2VcLW5hbWVcLWZvclwtZGlhb3l1XC1pc2xhbmRzXCk7Civntq3lkL7niL7ml48gPiB0aGVcLXV5Z3VyXC1cKHVpZ2h1clwpXC1uYXRpb25hbGl0eVwsXC1saXZpbmdcLWluXC14aW5qaWFuZzsKK+WNl+iPr+aXqeWgsSA+IHNvdXRoXC1jaGluYVwtbW9ybmluZ1wtcG9zdFwtXChuZXdzcGFwZXJcLWluXC1ob25nXC1rb25nXCk7Civnl4XlhaXoho/ogpMgPiB0aGVcLWRpc2Vhc2VcLWhhc1wtYXR0YWNrZWRcLXRoZVwtdml0YWxzXC1cLVwtYmV5b25kXC1jdXJlOwor57SE57+w5ouJ6LKdID4gam9oblwtcmFiZVwtXChnZXJtYW5cLWV5ZXdpdG5lc3NcLXRvXC1uYW5qaW5nXC1tYXNzYWNyZVwpOwor5LiN56C05LiN56uLID4gd2l0aG91dFwtZGVzdHJ1Y3Rpb25cLXRoZXJlXC1jYW5cLWJlXC1ub1wtY29uc3RydWN0aW9uOwor5YyF55Si5Yiw5oi2ID4gZml4aW5nXC1vZlwtZmFybVwtb3V0cHV0XC1xdW90YXNcLWZvclwtZWFjaFwtaG91c2Vob2xkOwor6aex6aed56Wl5a2QID4gbmFtZVwtb2ZcLWFcLW5vdmVsXCxcLWx1b1wtdHVvXC14aWFuZ3ppXCxcLWJ5XC1sYW9cLXNoZVwt6ICB6IiNOwor6YC85LiK5qiR5bGxID4gYmVcLWRyaXZlblwtdG9cLWpvaW5cLXRoZVwtbGlhbmdzaGFuXC1tb3VudGFpblwtcmViZWxzOwor5Y2X6L2F5YyX6L2NID4gXChmaWdcLlwpXC1hY3RcLWluXC1hXC13YXlcLXRoYXRcLWRlZmVhdHNcLW9uZScnc1wtcHVycG9zZTsKK+S/neWkluWwsemGqyA+IFwob2ZcLWFcLXByaXNvbmVyXClcLXJlbGVhc2VkXC1mb3JcLW1lZGljYWxcLXRyZWF0bWVudDsKK+iSuOiSuOaXpeS4iiA+IGJlY29taW5nXC1tb3JlXC1wcm9zcGVyb3VzXC13aXRoXC1lYWNoXC1wYXNzaW5nXC1kYXk7Civng4/pra/mnKjpvYogPiB1cnVtcWlcLVwoY2FwaXRhbFwtb2ZcLXhpbmppYW5nXC1hdXRvbm9tb3VzXC1yZWdpb25cKTsKK+WuieWcn+mHjemBtyA+IGhhdGVcLXRvXC1sZWF2ZVwtYVwtcGxhY2VcLXdoZXJlXC1vbmVcLWhhc1wtbGl2ZWRcLWxvbmc7Civlt6XllYbpioDooYwgPiBpbmR1c3RyaWFsXC1hbmRcLWNvbW1lcmNpYWxcLWJhbmtcLW9mXC1jaGluYVwtXChpY2JjXCk7CivkuovoiIfpoZjpgZUgPiB0aGluZ3NcLWRvbicndFwtdHVyblwtb3V0XC10aGVcLXdheVwteW91XC13YW50XC1vclwtcGxhbjsKK+W8teeHiOe1kOe2tSA+IGJlXC1kZWNvcmF0ZWRcLXdpdGhcLWxhbnRlcm5zXC1hbmRcLWNvbG9yZWRcLWJhbm5lcnM7CivplonploDmgJ3pgY4gPiBzaHV0XC1vbmVzZWxmXC11cFwtYW5kXC1wb25kZXJcLW92ZXJcLW9uZScnc1wtbWlzdGFrZXM7Civplonpl5zoh6rlroggPiBjbG9zZVwtdGhlXC1jb3VudHJ5XC10b1wtaW50ZXJuYXRpb25hbFwtaW50ZXJjb3Vyc2U7CivkuI3pgb/oibHpmqogPiBzaHJpbmtcLW9yXC1mbGluY2hcLWZyb21cLW5vXC1kaWZmaWN1bHR5XC1vclwtZGFuZ2VyOwor6Zi/5pe65puy5rKbID4gbmdhd2FuZ1wtY2hvZXBlbFwtXCh0aWJldGFuXCxcLWZ1bGxicmlnaHRcLXNjaG9sYXJcKTsKK+eVq+ibh+a3u+i2syA+IHJ1aW5cLXRoZVwtZWZmZWN0XC1ieVwtYWRkaW5nXC13aGF0XC1pc1wtc3VwZXJmbHVvdXM7Civku5fnvqnln7foqIAgPiBzcGVha1wtb3V0XC1vblwtYVwtbWF0dGVyXC1vZlwtcHJpbmNpcGxlXC1vclwtanVzdGljZTsKK+WFteiHqOWfjuS4iyA+IHRoZVwtYXR0YWNraW5nXC1hcm15XC1oYXNcLXJlYWNoZWRcLXRoZVwtY2l0eVwtZ2F0ZXM7Civog4zln47lgJ/kuIAgPiBtYWtlXC1hXC1sYXN0XC1kaXRjaFwtc3RhbmRcLWJlZm9yZVwtdGhlXC1jaXR5XC13YWxsOwor55m+5oSf5Lqk6ZuGID4gYWxsXC1zb3J0c1wtb2ZcLWZlZWxpbmdzXC13ZWxsXC11cFwtaW5cLW9uZScnc1wtaGVhcnQ7CivlhbXkuI3ljq3oqZAgPiB0aGVyZVwtY2FuXC1uZXZlclwtYmVcLXRvb1wtbXVjaFwtZGVjZXB0aW9uXC1pblwtd2FyOwor5LqU5YWt5Y2B5q2yID4gXChpblwtb25lJydzXClcLWZpZnRpZXNcLW9yXC1zaXh0aWVzXC1cKHllYXJzXC1vZlwtYWdlXCk7Civpgb/ph43lsLHovJUgPiBhdm9pZFwtdGhlXC1pbXBvcnRhbnRcLWFuZFwtZHdlbGxcLW9uXC10aGVcLXRyaXZpYWw7CivmqJnmlrDnq4vnlbAgPiBzdGFydFwtc29tZXRoaW5nXC1uZXdcLWluXC1vcmRlclwtdG9cLWJlXC1kaWZmZXJlbnQ7CivlpKflip/lkYrmiJAgPiBzdWNjZXNzZnVsbHlcLWFjY29tcGxpc2hlZFwtXChwcm9qZWN0XC1vclwtZ29hbFwpOwor54Sh5omA55So5b+DID4gZWF0XC10aHJlZVwtc3F1YXJlXC1tZWFsc1wtYVwtZGF5XC1hbmRcLWRvXC1ub1wtd29yazsKK+ePremWgOW8hOaWpyA+IGRpc3BsYXlcLW9uZScnc1wtc2xpZ2h0XC1za2lsbFwtYmVmb3JlXC1hblwtZXhwZXJ0Owor5Lit5ZyL5pel5aCxID4gY2hpbmFcLWRhaWx5XC1cKGFuXC1lbmdsaXNoXC1sYW5ndWFnZVwtbmV3c3BhcGVyXCk7CivkuI3lj6/ntYLml6UgPiBiZVwtdW5hYmxlXC10b1wtY2FycnlcLW9uXC1ldmVuXC1mb3JcLWFcLXNpbmdsZVwtZGF5Owor6aO96aOf57WC5pelID4gZWF0XC10aHJlZVwtc3F1YXJlXC1tZWFsc1wtYVwtZGF5XC1hbmRcLWRvXC1ub1wtd29yazsKK+WWruanjeWMuemmrCA+IHNpbmdsZVwtaGFuZGVkXC1cKGxpdFw6XC1zaW5nbGVcLXNwZWFyXC1vbmVcLWhvcnNlXCk7CivlkI3lia/lhbblr6YgPiBub3RcLWp1c3RcLWluXC1uYW1lXC1vbmx5XCxcLWJ1dFwtYWxzb1wtaW5cLXJlYWxpdHk7CivllpzmlrDljq3oiIogPiBsaXRlcmFsXDpcLXRvXC1saWtlXC10aGVcLW5ld1wsXC1hbmRcLWhhdGVcLXRoZVwtb2xkOwor5ouN5qGI5Y+r57WVID4gbGl0XC5cOlwtc2xhcFwtdGhlXC10YWJsZVwtYW5kXC1zaG91dFwtd2l0aFwtcHJhaXNlOwor6aKo5Zyf5Lq65oOFID4gbG9jYWxcLWNvbmRpdGlvbnNcLVwoaHVtYW5cLWFuZFwtZW52aXJvbm1lbnRhbFwpOwor6Zi/5ouJ5aGU5pavID4gXChhbGlcKVwtYWxhdGFzXC1cKGluZG9uZXNpYW5cLWZvcmVpZ25cLW1pbmlzdGVyXCk7CivkuK3lhbHkuK3lpK4gPiBjaGluZXNlXC1jb21tdW5pc3RcLXBhcnR5XC1jZW50cmFsXC1jb21taXR0ZWU7CivljZrogZ7lvLfoqJggPiBoYXZlXC13aWRlXC1sZWFybmluZ1wtYW5kXC1hXC1yZXRlbnRpdmVcLW1lbW9yeTsKK+eZvuW5tOWkp+ioiCA+IGFcLXByb2plY3RcLW9mXC12aXRhbFwtYW5kXC1sYXN0aW5nXC1pbXBvcnRhbmNlOwor5ouU6IuX5Yqp6ZW3ID4gc3BvaWxcLXRoaW5nc1wtdGhyb3VnaFwtZXhjZXNzaXZlXC1lbnRodXNpYXNtOwor6IKv5pmu57Si5oGpID4gXChkaXJrXClcLWtlbXB0aG9ybmVcLVwodXNcLXNlbmF0b3JcLWZyb21cLWlkYWhvXCk7CivlpJblravlpbPlhZIgPiBncmFuZGRhdWdodGVyXC1cKGRhdWdodGVyXC1vZlwtb25lJydzXC1kYXVnaGVyXCk7Civnmb7mipjkuI3mkpMgPiBrZWVwXC1vblwtZmlnaHRpbmdcLWluXC1zcGl0ZVwtb2ZcLWFsbFwtc2V0YmFja3M7Civlronouqvnq4vlkb0gPiBzZXR0bGVcLWRvd25cLWFuZFwtZ2V0XC1vblwtd2l0aFwtb25lJydzXC1wdXJzdWl0Owor5LiN5Y+v5LiA5LiWID4gY29uc2lkZXJcLW9uZXNlbGZcLXVuZXhjZWxsZWRcLWluXC10aGVcLXdvcmxkOwor57WV5bCN5pW45a2XID4gYWJzb2x1dGVcLVwoYXNcLW9wcG9zZWRcLXRvXC1yZWxhdGl2ZVwpXC1udW1iZXI7CivmirHpoK3pvKDnq4QgPiBjb3ZlclwtdGhlXC1oZWFkXC1hbmRcLXNuZWFrXC1hd2F5XC1saWtlXC1hXC1yYXQ7Civnmb7lu6Lkv7HoiIggPiBhbGxcLW5lZ2xlY3RlZFwtdGFza3NcLWFyZVwtYmVpbmdcLXVuZGVydGFrZW47Civpgb/lr6blsLHomZsgPiBzdGF5XC1jbGVhclwtb2ZcLXRoZVwtZW5lbXknJ3NcLW1haW5cLWZvcmNlXC1hbmQ7CivkuI3msYLnlJrop6MgPiBub3RcLXNlZWtcLXRvXC11bmRlcnN0YW5kXC10aGluZ3NcLXRob3JvdWdobHk7CivkuK3lpK7lhajmnIMgPiBwbGVuYXJ5XC1zZXNzaW9uXC1vZlwtdGhlXC1jZW50cmFsXC1jb21taXR0ZWU7Civlj6TmnbDmi4nniL4gPiBcKGlcLlwta1wuXClcLWd1anJhbFwtXChwcmltZVwtbWluaXN0ZXJcLW9mXC1pbmRpYVwpOwor5Ya35reh6Zec5L+CID4gY29sZFwtcmVsYXRpb25zXC1cKGVcLmdcLlwtYmV0d2VlblwtY291bnRyaWVzXCk7CivkuI3kuobkuobkuYsgPiBzZXR0bGVcLWFcLW1hdHRlclwtYnlcLWxlYXZpbmdcLWl0XC11bnNldHRsZWQ7CivkuI3ljbPkuI3pm6IgPiBiZVwtbmVpdGhlclwtdG9vXC1mYW1pbGlhclwtbm9yXC10b29cLWRpc3RhbnQ7CivnuL3mlL/msrvpg6ggPiBcKG1pbGl0YXJ5XClcLWdlbmVyYWxcLXBvbGl0aWNhbFwtZGVwYXJ0bWVudDsKK+WNiui3r+WHuuWutiA+IHN3aXRjaFwtdG9cLWFcLWpvYlwtb25lXC13YXNcLW5vdFwtdHJhaW5lZFwtZm9yOwor55eF5q+S5a245a62ID4gdmlyb2xvZ2lzdFwtXChwZXJzb25cLXdob1wtc3R1ZGllc1wtdmlydXNlc1wpOwor57WQ56S+6Ieq55SxID4gXChjb25zdGl0dXRpb25hbFwpXC1mcmVlZG9tXC1vZlwtYXNzb2NpYXRpb247CivolJPlu7blhajlnIsgPiB0b1wtc3ByZWFkXC10aHJvdWdob3V0XC10aGVcLWVudGlyZVwtY291bnRyeTsKK+eZvuaAneS4jeinoyA+IHJlbWFpblwtcHV6emxlZFwtYWZ0ZXJcLXBvbmRlcmluZ1wtb3Zlclwtc3RoOwor5Y2K5Yue5YuV5YqbID4gb25lXC1hYmxlXC10b1wtZG9cLWxpZ2h0XC1tYW51YWxcLWxhYm91clwtb25seTsKK+e4veW+jOWLpOmDqCA+IFwobWlsaXRhcnlcKVwtZ2VuZXJhbFwtbG9naXN0aWNzXC1kZXBhcnRtZW50Owor5LiA5ZyL5YWp5Yi2ID4gb25lXC1jb3VudHJ5XCxcLXR3b1wtc3lzdGVtc1wtXChjaGluYVwtdGFpd2FuXCk7Civnmb3poK3oq6fogIEgPiBsaXZlXC10b1wtcmlwZVwtb2xkXC1hZ2VcLWluXC1jb25qdWdhbFwtYmxpc3M7CivmiJDljYPkuIrokKwgPiBieVwtdGhlXC10aG91c2FuZHNcLWFuZFwtdGVuc1wtb2ZcLXRob3VzYW5kczsKK+S4jeWuo+iAjOaIsCA+IG9wZW5cLWhvc3RpbGl0aWVzXC13aXRob3V0XC1kZWNsYXJpbmdcLXdhcjsKK+S4jemBoOWNg+mHjCA+IG1ha2VcLWxpZ2h0XC1vZlwtdHJhdmVsbGluZ1wtYVwtdGhvdXNhbmRcLWxpOwor5a6J5bGF5qiC5qWtID4gbGl2ZVwtYW5kXC13b3JrXC1pblwtcGVhY2VcLWFuZFwtY29udGVudG1lbnQ7CivpgY3pq5TpsZflgrcgPiBjb3ZlcmVkXC1hbGxcLW92ZXJcLXdpdGhcLWN1dHNcLWFuZFwtYnJ1aXNlczsKK+WFp+aHruWkluaCoyA+IGRvbWVzdGljXC1zdHJpZmVcLWFuZFwtZm9yZWlnblwtYWdyZXNzaW9uOwor5rK755eF5pWR5Lq6ID4gY3VyZVwtdGhlXC1zaWNrbmVzc1wtdG9cLXNhdmVcLXRoZVwtcGF0aWVudDsKK+WTgOm0u+mBjemHjiA+IGFcLWxhbmRcLXN3YXJtaW5nXC13aXRoXC1kaXNhc3RlclwtdmljdGltczsKK+eXheW+nuWPo+WFpSA+IGlsbG5lc3NcLWZpbmRzXC1pdHNcLXdheVwtaW5cLWJ5XC10aGVcLW1vdXRoOwor57i95Y+D6KyA6YOoID4gXChtaWxpdGFyeVwpXC1nZW5lcmFsXC1zdGFmZlwtaGVhZHF1YXJ0ZXJzOwor5pKl57WD5qiC5ZmoID4gcGx1Y2tlZFwtc3RyaW5nXC1vclwtc3RyaW5nZWRcLWluc3RydW1lbnQ7CivliKXlhbfkuIDmoLwgPiBoYXZpbmdcLWFcLXVuaXF1ZVwtb3JcLWRpc3RpbmN0aXZlXC1zdHlsZTsKK+iugOizo+aWsOiBniA+IHlvbWl1cmlcLXNoaW1idW5cLVwoamFwYW5lc2VcLW5ld3NwYXBlclwpOwor5omN55aP5a245re6ID4gaGF2ZVwtbGl0dGxlXC10YWxlbnRcLWFuZFwtbGVzc1wtbGVhcm5pbmc7Civpgb/lnZHokL3kupUgPiBkb2RnZVwtYVwtcGl0XC1vbmx5XC10b1wtZmFsbFwtaW50b1wtYVwtd2VsbDsKK+iuiua6q+WLleeJqSA+IHBvaWtpbG90aGVybWFsXC1cKGNvbGRcLWJsb29kZWRcKVwtYW5pbWFsOwor5aSn5Lit5a2455SfID4gdW5pdmVyc2l0eVwtYW5kXC1oaWdoXC1zY2hvb2xcLXN0dWRlbnRzOwor5a6J5YiG5a6I5bexID4gYWJpZGVcLWJ5XC10aGVcLWxhd1wtYW5kXC1iZWhhdmVcLW9uZXNlbGY7CivlpKfpoa/ouqvmiYsgPiBmdWxseVwtZGlzcGxheWluZ1wtb25lJydzXC1jYXBhYmlsaXRpZXM7Civms6LngL7lo6/pl4ogPiBzdXJnaW5nXC1mb3J3YXJkXC13aXRoXC1ncmVhdFwtbW9tZW50dW07Civlm57mrbjkuK3lnIsgPiB0b1wtcmV0dXJuXC10b1wtY2hpbmFcLVwoZVwuZ1wuXC1ob25nXC1rb25nXCk7CivmhJvojqvog73liqkgPiB3aWxsaW5nXC10b1wtaGVscFwtYnV0XC11bmFibGVcLXRvXC1kb1wtc287Civoqr/mn6XntZDmnpwgPiByZXN1bHRzXC1cKG9mXC1hblwtaW52ZXN0aWdhdGlvblwsXC1wb2xsXCk7Civnmb7nq6/lvoXoiIkgPiBhXC10aG91c2FuZFwtdGhpbmdzXC1yZW1haW5cLXRvXC1iZVwtZG9uZTsKK+eni+mrmOawo+eIvSA+IGNsZWFyXC1hbmRcLXJlZnJlc2hpbmdcLWF1dHVtblwtd2VhdGhlcjsKK+WGsOa2iOeTpuinoyA+IG1lbHRcLWxpa2VcLWljZVwtYW5kXC1icmVha1wtbGlrZVwtdGlsZXM7CivljYrmlqTlhavlhakgPiBub3RcLW11Y2hcLXRvXC1jaG9vc2VcLWJldHdlZW5cLXRoZVwtdHdvOwor5q2l5Lq65b6M5aG1ID4gZm9sbG93XC1pblwtb3RoZXJcLXBlb3BsZScnc1wtZm9vdHN0ZXBzOwor6b6N6aOb6bOz6IieID4gbGl0XC5cOlwtZHJhZ29uXC1mbGllc1wsXC1waG9lbml4XC1kYW5jZXM7CivlnIvpmpvopovogZ4gPiBpbnRlcm5hdGlvbmFsXC1iYWNrZ3JvdW5kXC1rbm93bGVkZ2U7CivlnIvli5nlp5Tlk6EgPiBtZW1iZXJcLW9mXC1zdGF0ZVwtY291bmNpbFwtXChpblwtY2hpbmFcKTsKK+WPr+enu+akjeaApyA+IHBvcnRhYmlsaXR5XC1cKHByb2dyYW1taW5nXC1sYW5ndWFnZVwpOwor5ZG85ZKM5rWp54m5ID4gaG9oaG90XC1cKGNhcGl0YWxcLW9mXC1pbm5lclwtbW9uZ29saWFcKTsKK+Wwj+mhjOWkp+WBmiA+IG1ha2VcLWFcLWJpZ1wtZnVzc1wtb3ZlclwtYVwtbWlub3JcLWlzc3VlOwor5LiN6Jmb5q2k6KGMID4gdGhlXC10cmlwXC1oYXNcLW5vdFwtYmVlblwtbWFkZVwtaW5cLXZhaW47CivoqIDoq5boh6rnlLEgPiBcKGNvbnN0aXR1dGlvbmFsXClcLWZyZWVkb21cLW9mXC1zcGVlY2g7CivplovnmbznkrDlooMgPiBkZXZlbG9wbWVudFwtZW52aXJvbm1lbnRcLVwoY29tcHV0ZXJcKTsKK+S4jeitmOaZguWLmSA+IHNob3dcLW5vXC11bmRlcnN0YW5kaW5nXC1vZlwtdGhlXC10aW1lczsKK+S4jeaZguS5i+mcgCA+IGFcLXBvc3NpYmxlXC1wZXJpb2RcLW9mXC13YW50XC1vclwtbmVlZDsKK+S7peeJmemChOeJmSA+IGFcLXRvb3RoXC1mb3JcLWFcLXRvb3RoXC1cKHJldGFsaWF0aW9uXCk7Civnmb7miLDnmb7li50gPiBlbWVyZ2VcLXZpY3RvcmlvdXNcLWluXC1ldmVyeVwtYmF0dGxlOwor55Sx5q2k5Y+v6KaLID4gZnJvbVwtdGhpc1wsXC1pdFwtY2FuXC1iZVwtc2VlblwtdGhhdFwuXC5cLjsKK+WvuOiNieS4jeeUnyA+IFwibm90XC1ldmVuXC1hXC1ibGFkZVwtb2ZcLWdyYXNzXC1ncm93c1wiOwor5pOm5Lqu55y8552bID4gcmVtb3ZlXC10aGVcLXNjYWxlc1wtZnJvbVwtb25lJydzXC1leWVzOwor6KOc5YGP5pWR5byKID4gcmVtZWR5XC1kZWZlY3RzXC1hbmRcLXJlY3RpZnlcLWVycm9yczsKK+eZvuW3neatuOa1tyA+IGFsbFwtdGhpbmdzXC10ZW5kc1wtaW5cLW9uZVwtZGlyZWN0aW9uOwor6KqT5LiN5Y+N5oKUID4gdG9cLXZvd1wtbm90XC10b1wtYnJlYWtcLW9uZScnc1wtcHJvbWlzZTsKK+enkeWtuOe3qOi8ryA+IHNjaWVuY2VcLWVkaXRvclwtXChvZlwtYVwtcHVibGljYXRpb25cKTsKK+aYgummlumXiuatpSA+IHN0cmlkZVwtZm9yd2FyZFwtd2l0aFwtb25lJydzXC1jaGluXC11cDsKK+aXpee2k+aMh+aVuCA+IG5pa2tlaVwtaW5kZXhcLVwob2ZcLWphcGFuZXNlXC1zdG9ja3NcKTsKK+W+l+WvuOmAsuWwuiA+IGxpdGVyYWxcOlwtZ2V0XC1hblwtaW5jaFwsXC13YW50XC1hXC1mb290Owor5YyX5rSL6LuN6ZalID4gdGhlXC1ub3J0aGVyblwtd2FybG9yZHNcLVwoMTkxMlwtMTkyN1wpOwor5aSn5oOR5LiN6KejID4gZG9cLW5vdFwtdW5kZXJzdGFuZFwtYVwtY2VydGFpblwtdGhpbmc7CivmmI7mlofopo/lrpogPiBleHByZXNzbHlcLXN0aXB1bGF0ZWRcLVwoaW5cLXdyaXRpbmdcKTsKK+Wkp+W6reW7o+ecviA+IHB1YmxpY1wtcGxhY2VcLXdpdGhcLW51bWVyb3VzXC1wZW9wbGU7Civnmb7nhKHkuIDlpLEgPiBub1wtZGFuZ2VyXC1vZlwtYW55dGhpbmdcLWdvaW5nXC13cm9uZzsKK+S6uuasiuingOWvnyA+IGh1bWFuXC1yaWdodHNcLXdhdGNoXC1cKG9yZ2FuaXphdGlvblwpOwor5YKZ6ICM5LiN55SoID4gaGF2ZVwtc29tZXRoaW5nXC1yZWFkeVwtanVzdFwtaW5cLWNhc2U7Civnr4DlpJbnlJ/mnp0gPiBuZXdcLXByb2JsZW1zXC1jb21wbGljYXRlXC1hblwtaXNzdWU7CivpvLvpnZLoh4nohasgPiBhXC1ibG9vZHlcLW5vc2VcLWFuZFwtYVwtc3dvbGxlblwtZmFjZTsKK+S8gealreeuoeeQhiA+IGJ1c2luZXNzXC1tYW5hZ2VtZW50XC1cKGFzXC1hXC1zdHVkeVwpOwor5LiN6KyA6ICM5ZCIID4gYWdyZWVcLXdpdGhvdXRcLXByaW9yXC1jb25zdWx0YXRpb247CivmjInlhbXkuI3li5UgPiBub3RcLXRocm93XC10aGVcLXRyb29wc1wtaW50b1wtYmF0dGxlOwor5LiA5Lit5LiA6Ie6ID4gXCJvbmVcLWNoaW5hXCxcLW9uZVwtdGFpd2FuXCJcLVwocG9saWN5XCk7CivkuK3ml6Xpn5PotoogPiBjaGluYVwsXC1qYXBhblwsXC1rb3JlYVwsXC1hbmRcLXZpZXRuYW07CivlvaLlvbHkuI3pm6IgPiBpbnNlcGFyYWJsZVwtXChhc1wtZm9ybVwtYW5kXC1zaGFkb3dcKTsKK+WVhualreeJiOacrCA+IGNvbW1lcmNpYWxcLXZlcnNpb25cLVwob2ZcLXNvZnR3YXJlXCk7Civnmb7oroDkuI3ljq0gPiBiZVwtd29ydGhcLXJlYWRpbmdcLWFcLWh1bmRyZWRcLXRpbWVzOwor5YiG5rOi5aSa5belID4gd2F2ZWxlbmd0aFwtZGl2aXNpb25cLW11bHRpcGxleGluZzsKK+W/heeUseS5i+i3ryA+IHRoZVwtcm9hZFwtb25lXC1tdXN0XC1mb2xsb3dcLW9yXC10YWtlOwor5Lqo54m55rOw576FID4gaHVudGVyXC10eWxvXC1cKGhvbGx5d29vZFwtYWN0cmVzc1wpOwor6ZaJ6ZaA6YCg6LuKID4gbWFrZVwtYVwtY2FydFwtYmVoaW5kXC1jbG9zZWRcLWRvb3JzOwor5oKy5Zac5Lqk6ZuGID4gbWl4ZWRcLWZlZWxpbmdzXC1vZlwtZ3JpZWZcLWFuZFwtam95Owor5LiN5L+u6YKK5bmFID4gbm90XC1jYXJlXC1hYm91dFwtb25lJydzXC1hcHBlYXJhbmNlOwor5aSn5b+r5Lq65b+DID4gdG9cLXRoZVwtc2F0aXNmYWN0aW9uXC1vZlwtZXZlcnlvbmU7Civpnq3plbfojqvlj4ogPiBiZXlvbmRcLXRoZVwtcmVhY2hcLW9mXC1vbmUnJ3NcLXBvd2VyOwor5LiN5a2454Sh6KGTID4gaGF2ZVwtbmVpdGhlclwtbGVhcm5pbmdcLW5vclwtc2tpbGw7CivkuI3lr5LogIzmhYQgPiBzaGl2ZXJcLWFsbFwtb3ZlclwtdGhvdWdoXC1ub3RcLWNvbGQ7CivlsaTlh7rkuI3nqq4gPiB0b1wtY29tZVwtb3V0XC1vbmVcLWFmdGVyXC10aGVcLW90aGVyOwor5a6J5rCR5ZGK56S6ID4gYVwtbm90aWNlXC10b1wtcmVhc3N1cmVcLXRoZVwtcHVibGljOwor57Sw6I+M5q2m5ZmoID4gYmlvbG9naWNhbFwtd2VhcG9uXC1cKHVzaW5nXC1nZXJtc1wpOwor5Yil6ZaL55Sf6Z2iID4gc3RhcnRcLXNvbWV0aGluZ1wtbmV3XC1vclwtb3JpZ2luYWw7CivlpoLpo6LkvLzmuLQgPiB0aGlyc3RpbmdcLW9yXC1odW5nZXJpbmdcLWZvclwtc3RoXC47CivplovlnIvlhYPli5sgPiBmb3VuZGluZ1wtZmF0aGVyc1wtXChvZlwtYVwtY291bnRyeVwpOwor55u05o6l5pW45pOaID4gZGF0YVwtZGlyZWN0XC1cKGluXC1sYW5cLWVtdWxhdGlvblwpOwor5YKz57Wx6Yar6JelID4gXChjaGluZXNlXClcLXRyYWRpdGlvbmFsXC1tZWRpY2luZTsKK+acieWPsuS7peS+hiA+IHNpbmNlXC10aGVcLWJlZ2lubmluZ1wtb2ZcLWhpc3Rvcnk7CivljIXmsrvnmb7nl4UgPiBndWFyYW50ZWVcLXRvXC1jdXJlXC1hbGxcLWRpc2Vhc2VzOwor5oyJ6ZyA5YiG6YWNID4gZGlzdHJpYnV0aW9uXC1hY2NvcmRpbmdcLXRvXC1uZWVkOwor5LiW6LK/57WE57mUID4gd3RvXC1cKHdvcmxkXC10cmFkZVwtb3JnYW5pemF0aW9uXCk7CivmspLmnInku4DpurwgPiB0aGVyZScnc1wtbm90aGluZ1wtXChcLlwuXC5cLWFib3V0XC1pdFwpOwor5oyJ5Yue5YiG6YWNID4gZGlzdHJpYnV0aW9uXC1hY2NvcmRpbmdcLXRvXC13b3JrOwor6Zi/5ouJ5pyo5ZyWID4gYWxtYXR5XC1cKGNhcGl0YWxcLW9mXC1rYXpha2hzdGFuXCk7CivkuIPlsaTmnrbmp4sgPiBzZXZlblwtbGF5ZXJcLWFyY2hpdGVjdHVyZVwtXChvc2lcKTsKK+aHieacieeboeaciSA+IGV2ZXJ5dGhpbmdcLVwob25lXC1jb3VsZFwtaW1hZ2luZVwpOwor6Z2S5bGx57ag5rC0ID4gdmVyZGFudFwtaGlsbHNcLWFuZFwtZ3JlZW5cLXdhdGVyczsKK+iZueapi+apn+WgtCA+IGhvbmdxaWFvXC1haXJwb3J0XC1cKGluXC1zaGFuZ2hhaVwpOwor57Wx5LiA5oub55SfID4gbmF0aW9uYWxcLXVuaWZpZWRcLWVudHJhbmNlXC1leGFtOwor5p2x6YOo5pmC6ZaTID4gXCh1XC5zXC5cKVwtZWFzdGVyblwtXChzdGFuZGFyZFwpXC10aW1lOwor5pmC5aSn5pmC5bCPID4gc29tZXRpbWVzXC1iaWdcLFwtc29tZXRpbWVzXC1zbWFsbDsKK+S4jei+reiAjOWIpSA+IGxlYXZlXC13aXRob3V0XC1zYXlpbmdcLWdvb2RcLWJ5ZTsKK+eZvuiBveS4jeWOrSA+IHdvcnRoXC1oZWFyaW5nXC1hXC1odW5kcmVkXC10aW1lczsKK+S9jumajuiqnuiogCA+IGxvd1wtbGV2ZWxcLVwoY29tcHV0ZXJcKVwtbGFuZ3VhZ2U7CivkuI3otrPngrroqJMgPiBub3RcLXRvXC1iZVwtdGFrZW5cLWFzXC1hblwtZXhhbXBsZTsKK+Wkp+WQueWkp+aTgiA+IG1ha2VcLWFuXC1leGhpYml0aW9uXC1vZlwtb25lc2VsZjsKK+WuieS5i+iLpee0oCA+IGJlYXJcLWhhcmRzaGlwXC13aXRoXC1lcXVhbmltaXR5Owor6KW/5ZOI5Yqq5YWLID4gXChraW5nXClcLXNpaGFub3VrXC1cKG9mXC1jYW1ib2RpYVwpOwor5q665Lq65qGI5Lu2ID4gXChjYXNlXC1vZlwsXC1pbmNpZGVudFwtb2ZcKVwtbXVyZGVyOwor6IOM6YGT6ICM6aazID4gcnVuXC1pblwtdGhlXC1vcHBvc2l0ZVwtZGlyZWN0aW9uOwor5L2O57Sa6Kqe6KiAID4gbG93XC1sZXZlbFwtXChjb21wdXRlclwpXC1sYW5ndWFnZTsKK+S4jeWQjeS4gOaWhyA+IHdpdGhvdXRcLWFcLXBlbm55XC10b1wtb25lJydzXC1uYW1lOwor5LiN54Sh5bCP6KOcID4gbm90XC1iZVwtd2l0aG91dFwtc29tZVwtYWR2YW50YWdlOwor5Yqg5by3566h5Yi2ID4gdG9cLXRpZ2h0ZW5cLWNvbnRyb2xcLVwob3Zlclwtc3RoXCk7CivkurrmsJHml6XloLEgPiByZW5taW5cLXJpYmFvXC1cKHBlb3BsZScnc1wtZGFpbHlcKTsKK+mWi+Wni+S7peWJjSA+IGJlZm9yZVwtdGhlXC1iZWdpbm5pbmdcLVwob2ZcLXN0aFwpOwor5LiN6K2Y5aSn6auUID4gZmFpbFwtdG9cLXNlZVwtdGhlXC1sYXJnZXJcLWlzc3VlczsKK+S4jeaJk+iHquaLmyA+IGNvbmZlc3NcLXdpdGhvdXRcLWJlaW5nXC1wcmVzc2VkOwor5LiA6IiJ5YWp5b6XID4ga2lsbFwtdHdvXC1iaXJkc1wtd2l0aFwtb25lXC1zdG9uZTsKK+S4jemAn+S5i+WuoiA+IHVuaW52aXRlZFwtb3JcLXVuZXhwZWN0ZWRcLWd1ZXN0Owor5LiN5b6X6KaB6aCYID4gZmFpbFwtdG9cLWdyYXNwXC10aGVcLW1haW5cLXBvaW50czsKK+mAsuihjOiqv+afpSA+IHRvXC1jYXJyeVwtb3V0XC1hblwtaW52ZXN0aWdhdGlvbjsKK+Wkp+ihl+Wwj+W3tyA+IGxhcmdlXC1zdHJlZXRzXC1hbmRcLXNtYWxsXC1sYW5lczsKK+WQhOWkp+i7jeWNgCA+IFwidGhlXC1ncmVhdGVyXC1taWxpdGFyeVwtYXJlYXNcIjsKK+WRvOexsue+juWciyA+IHRvXC1jYWxsXC1vblwtdGhlXC11bml0ZWRcLXN0YXRlczsKK+ixkOiho+i2s+mjnyA+IGhhdmVcLWFtcGxlXC1mb29kXC1hbmRcLWNsb3RoaW5nOwor5LiN55+l5aW95q25ID4gbm90XC1rbm93XC13aGF0JydzXC1nb29kXC1mb3JcLW9uZTsKK+e2sueuoeaOpeWPoyA+IG5ldHdvcmtcLW1hbmFnZW1lbnRcLWludGVyZmFjZTsKK+agueaTmuS4iuihqCA+IGFjY29yZGluZ1wtdG9cLXRoZVwtYWJvdmVcLXRhYmxlOwor5ZyL6Ziy5Yip55uKID4gXChuYXRpb25hbFwpXC1kZWZlbmNlXC1pbnRlcmVzdHM7CivmnKzmnKvlgJLnva4gPiB0YWtlXC10aGVcLWJyYW5jaFwtZm9yXC10aGVcLXJvb3Q7CivmirHpoK3nl5vlk60gPiBjcnlcLW9uXC1lYWNoXC1vdGhlcicnc1wtc2hvdWxkZXI7CivkuI3kuIDogIzotrMgPiBieVwtbm9cLW1lYW5zXC1hblwtaXNvbGF0ZWRcLWNhc2U7Civnmb3ntJnpu5HlrZcgPiBcKHdyaXR0ZW5cKVwtaW5cLWJsYWNrXC1hbmRcLXdoaXRlOwor5LiN56KO546755KDID4gc2hhdHRlcnByb29mXC1vclwtc2FmZXR5XC1nbGFzczsKK+iOq+iht+S4gOaYryA+IGNhbm5vdFwtZGVjaWRlXC13aGljaFwtaXNcLXJpZ2h0Owor5YWr5ZyL6IGv6LuNID4gdGhlXC1laWdodFwtcG93ZXJcLWFsbGllZFwtZm9yY2U7CivlpJrlubTku6XkvoYgPiBmb3JcLW1hbnlcLXllYXJzXC1cKGluXC10aGVcLXBhc3RcKTsKK+efpeitmOeUouasiiA+IGludGVsbGVjdHVhbFwtcHJvcGVydHlcLXJpZ2h0czsKK+iqk+atu+S4jemZjSA+IHRvXC12b3dcLXRvXC1maWdodFwtdG9cLXRoZVwtZGVhdGg7CivmspLmnInlv4XopoEgPiB0aGVyZVwtaXNcLW5vXC1uZWVkXC10b1wtXChkb1wtc3RoXCk7CivkuK3mloflu6Pmkq0gPiBjaGluZXNlXC1cKGxhbmd1YWdlXClcLWJyb2FkY2FzdDsKK+enu+auluaJi+ihkyA+IFwob3JnYW5cKVwtdHJhbnNwbGFudFwtb3BlcmF0aW9uOwor5rWq5a2Q5Zue6aCtID4gdGhlXC1yZXR1cm5cLW9mXC1hXC1wcm9kaWdhbFwtc29uOwor5LiN5oCl5LmL5YuZID4gYVwtbWF0dGVyXC1vZlwtbm9cLWdyZWF0XC11cmdlbmN5Owor6Zu756OB5bmy5pO+ID4gZWxlY3Ryb21hZ25ldGljXC1pbnRlcmZlcmVuY2U7CivkuI3mmJPkuYvoq5YgPiBwZXJmZWN0bHlcLXNvdW5kXC1wcm9wb3NpdGlvbjsKK+WQhOeoruWQhOaooyA+IHZhcmlvdXNcLXNvcnRzXC1hbmRcLXZhcmlldGllczsKK+S4jemBlei+suaZgiA+IG5vdFwtbWlzc1wtdGhlXC1mYXJtaW5nXC1zZWFzb247CivkuoLkvZzmsbrlrpogPiB0b1wtbWFrZVwtYXJiaXRyYXJ5XC1kZWNpc2lvbnM7CivlpKflmajmmZrmiJAgPiBncmFuZFwtdGFsZW50c1wtbWF0dXJlXC1zbG93bHk7CivmjInmraXlsLHnj60gPiBmb2xsb3dcLXRoZVwtcHJlc2NyaWJlZFwtb3JkZXI7CivlpJbkuqTpg6jplbcgPiBtaW5pc3Rlclwtb2ZcLWZvcmVpZ25cLWFmZmFpcnM7CivoiInkuJbnn5rnm64gPiBhdHRyYWN0XC13b3JsZHdpZGVcLWF0dGVudGlvbjsKK+eNqOaWt+WwiOihjCA+IGFjdFwtaW5cLWFuXC1hcmJpdHJhcnlcLWZhc2hpb247Civnp4HkurrpkbDljJkgPiBwcml2YXRlXC1rZXlcLVwoaW5cLWVuY3J5cHRpb25cKTsKK+WNu+S5i+S4jeaBrSA+IHRvXC1yZWZ1c2VcLXdvdWxkXC1iZVwtaW1wb2xpdGU7CivppqzlpKrnpo/pn7MgPiBnb3NwZWxcLWFjY29yZGluZ1wtdG9cLW1hdHRoZXc7Civpm7voqbHmnIPorbAgPiBcKHRlbGVwaG9uZVwpXC1jb25mZXJlbmNlXC1jYWxsOwor5LiN6JC956qg6Ie8ID4gbm90XC1mb2xsb3dcLXRoZVwtYmVhdGVuXC10cmFjazsKK+aMieeFp+ioiOWKgyA+IGFjY29yZGluZ1wtdG9cLVwodGhlXClcLXBsYW5cLVwuXC5cLjsKK+S6i+aDheimgeWBmiA+IHRoaW5nXC10aGF0XC1uZWVkc1wtdG9cLWJlXC1kb25lOwor5LiA6Lev5bmz5a6JID4gdG9cLWhhdmVcLWFcLXBsZWFzYW50XC1qb3VybmV5Owor57SQ57SE5pmC5aCxID4gbmV3XC15b3JrXC10aW1lc1wtXChuZXdzcGFwZXJcKTsKK+W4uOWVj+WVj+mhjCA+IGZyZXF1ZW50bHlcLWFza2VkXC1xdWVzdGlvbnM7Civnmb7lrZTljYPnmKEgPiByaWRkbGVkXC13aXRoXC1nYXBpbmdcLXdvdW5kczsKK+WFtemAo+emjee1kCA+IHJhdmFnZWRcLWJ5XC1zdWNjZXNzaXZlXC13YXJzOwor6ZW35pyf5Lul5L6GID4gZXZlclwtc2luY2VcLWFcLWxvbmdcLXRpbWVcLWFnbzsKK+WuieWutuiQveaItiA+IG1ha2VcLW9uZScnc1wtaG9tZVwtaW5cLWFcLXBsYWNlOwor5YWl5pyo5LiJ5YiGID4gd3JpdHRlblwtaW5cLWFcLWZvcmNlZnVsXC1oYW5kOwor5YiG5pmC5aSa5belID4gdGltZVwtZGl2aXNpb25cLW11bHRpcGxleGluZzsKK+aguea3seiSguWbuiA+IGRlZXBcLXJvb3RlZFwtXChwcm9ibGVtXCxcLWV0Y1wpOwor5pif5bO25pel5aCxID4gc2luZ1wtdGFvXC1kYWlseVwtXChuZXdzcGFwZXJcKTsKK+mbu+S/oeacjeWLmSA+IHRlbGVjb21tdW5pY2F0aW9uc1wtc2VydmljZTsKK+WFrOmWi+mRsOWMmSA+IHB1YmxpY1wta2V5XC1cKGluXC1lbmNyeXB0aW9uXCk7Civpm7vkv6HntrLot68gPiB0ZWxlY29tbXVuaWNhdGlvbnNcLW5ldHdvcms7CivmhJ/mn5PkurrmlbggPiBudW1iZXJcLW9mXC1pbmZlY3RlZFwtcGVyc29uczsKK+eZvuatpeepv+aliiA+IHNob290XC13aXRoXC1ncmVhdFwtcHJlY2lzaW9uOwor5Ye654++5oSP5aSWID4gXCh0b1wtYXBwZWFyXClcLXVuZXhwZWN0ZWRcKGx5XCk7CivkuIDop7jljbPnmbwgPiBjb3VsZFwtaGFwcGVuXC1hdFwtYW55XC1tb21lbnQ7Civnupboiq/nm7TlvpEgPiBjb3JlXC1kaWFtZXRlclwtXChvZlwtYVwtZmliZXJcKTsKK+mAsuihjOS6pOaYkyA+IHRvXC1jYXJyeVwtb3V0XC1hXC10cmFuc2FjdGlvbjsKK+WIpeWHuuW/g+ijgSA+IGFkb3B0XC1hblwtb3JpZ2luYWxcLWFwcHJvYWNoOwor55m+55m855m+5LitID4gZXZlcnlcLXNob3RcLWhpdHNcLXRoZVwtdGFyZ2V0Owor5LiN5Lqi5LiN5Y2RID4gbmVpdGhlclwtaGF1Z2h0eVwtbm9yXC1odW1ibGU7Civnmb3lo4HnhKHnkZUgPiBpbXBlY2NhYmxlXC1tb3JhbFwtaW50ZWdyaXR5Owor5pWX5a2Q5Zue6aCtID4gcmV0dXJuXC1vZlwtdGhlXC1wcm9kaWdhbFwtc29uOwor6Kiq5ZWP576O5ZyLID4gdG9cLXZpc2l0XC10aGVcLXVuaXRlZFwtc3RhdGVzOwor5LiN5aSx5pmC5qmfID4gc2VpemVcLXRoZVwtb3Bwb3J0dW5lXC1tb21lbnQ7CivlsI7lvYjmvZvoiYcgPiBcKGd1aWRlZFwpXC1taXNzaWxlXC1zdWJtYXJpbmU7CivlronlpoLms7DlsbEgPiBhc1wtc2VjdXJlXC1hc1wtbW91bnRcLXRhaXNoYW47CivkuI3nvqnkuYvosqEgPiBpbGxcLWdvdHRlblwtd2VhbHRoXC1vclwtZ2FpbnM7Civph43opoHnmoTmmK8gPiBpdFwtaXNcLWltcG9ydGFudFwtXCh0aGF0XClcLVwuXC5cLjsKK+mAmuS/oeaKgOihkyA+IGNvbW11bmljYXRpb25zXC10ZWNobm9sb2d5Owor5aSW5Yyv5YSy5YKZID4gZm9yZWlnblwtZXhjaGFuZ2VcLXJlc2VydmVzOwor5Yue5YuV5pWZ6aSKID4gcmVlZHVjYXRpb25cLXRocm91Z2hcLWxhYm9yOwor5LiN6L6t6L6b6IumID4gbWFrZVwtbm90aGluZ1wtb2ZcLWhhcmRzaGlwczsKK+eoi+W8j+eQhuWToSA+IHByb2dyYW1cLW1hbmFnZXJcLVwod2luZG93c1wpOwor5rCR5Li76buo5Lq6ID4gYVwtZGVtb2NyYXRpY1wtcGFydHlcLW1lbWJlcjsKK+S4ieWNgeW5tOS+hiA+IGZvclwtdGhlXC1wYXN0XC10aGlydHlcLXllYXJzOwor5oqA6KGT55m85bGVID4gdGVjaG5vbG9naWNhbFwtZGV2ZWxvcG1lbnQ7Civpq5jnrYnlrbjmoKEgPiBjb2xsZWdlc1wtYW5kXC11bml2ZXJzaXRpZXM7CivlurfmtoXni4TmoLwgPiBjb25uZWN0aWN1dFwtXChzdGF0ZVwtaW5cLXVzXCk7Civllq7pgKPmjqXnq5kgPiBzaW5nbGVcLWF0dGFjaG1lbnRcLXN0YXRpb247CivnrKblkIjmqJnmupYgPiB0b1wtY29tcGx5XC13aXRoXC1hXC1zdGFuZGFyZDsKK+ekuuWogemBiuihjCA+IGFcLVwocHJvdGVzdFwpXC1kZW1vbnN0cmF0aW9uOwor5aSn5pW155W25YmNID4gY29uZnJvbnRcLWFcLXBvd2VyZnVsXC1lbmVteTsKK+eglOijvemBjueoiyA+IG1hbnVmYWN0dXJpbmdcLWVudmlyb25tZW50Owor5Y+N5ZSH55u46K2PID4gYW5zd2VyXC1iYWNrXC1zYXJjYXN0aWNhbGx5Owor5qC46L2f54K45qmfID4gbnVjbGVhclwtYm9tYmVyXC1cKGFpcmNyYWZ0XCk7CivkuI3lvpfkurrlv4MgPiBub3RcLWVuam95XC1wb3B1bGFyXC1zdXBwb3J0Owor55u06KiA5LiN6KuxID4gc3BlYWtcLWZyYW5rbHlcLWFuZFwtYmx1bnRseTsKK+aZr+WxseWFrOWckiA+IG5hbWVcLW9mXC1hXC1wYXJrXC1pblwtYmVpamluZzsKK+mdouiHqOWbsOmboyA+IHRvXC1iZVwtZmFjZWRcLXdpdGhcLXByb2JsZW1zOwor5LiN5YuZ5q2j5qWtID4gbm90XC1lbmdhZ2VcLWluXC1ob25lc3RcLXdvcms7CivmhJvnkIbkuI3nkIYgPiBsb29rXC1jb2xkXC1hbmRcLWluZGlmZmVyZW50Owor5pS55ZaE6YCa6KiKID4gdG9cLWltcHJvdmVcLWNvbW11bmljYXRpb25zOwor57i95Y+D6KyA6ZW3ID4gXChtaWxpdGFyeVwpXC1jaGllZlwtb2ZcLXN0YWZmOwor6IOM5L+h5qOE576pID4gYnJlYWtcLWZhaXRoXC13aXRoXC1zb21lYm9keTsKK+i3qOWci+WFrOWPuCA+IHRyYW5zbmF0aW9uYWxcLWNvcnBvcmF0aW9uOwor5YWx5ZKM6buo5Lq6ID4gYVwtcmVwdWJsaWNhblwtcGFydHlcLW1lbWJlcjsKK+mmrOWPr+emj+mfsyA+IGdvc3BlbFwtYWNjb3JkaW5nXC10b1wtbWFyazsKK+avj+W5tOS4gOW6piA+IG9uY2VcLWFcLXllYXJcLVwoZXZlcnlcLXllYXJcKTsKK+Wfn+WQjeiou+WGiiA+IGRvbWFpblwtbmFtZVwtcmVnaXN0cmF0aW9uOwor5YW16LK056We6YCfID4gc3BlZWRcLWlzXC1wcmVjaW91c1wtaW5cLXdhcjsKK+WkmumCiuWQiOS9nCA+IG11bHRpbGF0ZXJhbFwtY29vcGVyYXRpb247CivmipXmlL7luILloLQgPiB0b1wtcHV0XC1zdGhcLW9uXC10aGVcLW1hcmtldDsKK+iNkueEoeS6uueFmSA+IGRlc29sYXRlXC1hbmRcLXVuaW5oYWJpdGVkOwor57SE57+w56aP6Z+zID4gZ29zcGVsXC1hY2NvcmRpbmdcLXRvXC1qb2huOwor5Y2w5q2Q6Kqe6KiAID4gaW5kb1wtZXVyb3BlYW5cLVwobGFuZ3VhZ2VcKTsKK+e/kuS7peeCuuW4uCA+IGJlXC1hY2N1c3RvbWVkXC1vclwtdXNlZFwtdG87CivlhbXojZLppqzkuoIgPiB0dXJtb2lsXC1hbmRcLWNoYW9zXC1vZlwtd2FyOwor5LiN5YuV6IGy6ImyID4gbWFpbnRhaW5cLW9uZScnc1wtY29tcG9zdXJlOwor5rWu6bue6YGL566XID4gZmxvYXRpbmdcLXBvaW50XC1vcGVyYXRpb247CivlhafmlL/pg6jplbcgPiBtaW5pc3Rlclwtb2ZcLXRoZVwtaW50ZXJpb3I7CivpvLvph53nmYLms5UgPiBub3NlXC1hY3VwdW5jdHVyZVwtdGhlcmFweTsKK+iZm+aTrOeSsOWigyA+IHRoZW9yaGV0aWNhbFwtZW52aXJvbm1lbnQ7Civlr4bliIfms6jmhI8gPiBjbG9zZVwtYXR0ZW50aW9uXC1cKHRvXC1zdGhcKTsKK+S4jeaLmOS4gOagvCA+IG5vdFwtc3RpY2tcLXRvXC1vbmVcLXBhdHRlcm47Civlrozlhajmh4LlvpcgPiB0b1wtdW5kZXJzdGFuZFwtY29tcGxldGVseTsKK+S4jeW5s+WJh+mztCA+IHdoZXJlXC10aGVyZVwtaXNcLWluanVzdGljZTsKK+aguOS4jeaTtOaVoyA+IG51Y2xlYXJcLW5vbnByb2xpZmVyYXRpb247Civmk7rohKvljbHmqZ8gPiB0b1wtYnJlYWtcLW91dFwtb2ZcLWFcLWNyaXNpczsKK+WvjOW4g+iztOeJuSA+IGZ1bGxicmlnaHRcLVwoc2Nob2xhcnNoaXBcKTsKK+aSpeS6guWPjeatoyA+IGJyaW5nXC1vcmRlclwtb3V0XC1vZlwtY2hhb3M7CivlronnrKzmlq/lsbEgPiB0aGVcLWFuZGVzXC1tb3VudGFpblwtcmFuZ2U7Civnmb7nhYnmiJDpi7wgPiBiZVwtdGVtcGVyZWRcLWludG9cLWFcLXN0ZWVsOwor5ZyL5YuZ5qyh5Y2/ID4gdW5kZXJcLXNlY3JldGFyeVwtb2ZcLXN0YXRlOwor5Y2K5L+h5Y2K55aRID4gaGFsZlwtYmVsaWV2ZVwsXC1oYWxmXC1kb3VidDsKK+aLlOeBq+e9kOWFkiA+IGRldGFjaGFibGVcLXN0b3ZlXC1jaGltbmV5Owor5Y+k5biM6IeY6KqeID4gYW5jaWVudFwtZ3JlZWtcLVwobGFuZ3VhZ2VcKTsKK+WNg+e1suiQrOe4tyA+IGxpbmtlZFwtaW5cLWNvdW50bGVzc1wtd2F5czsKK+egtOWcn+WFuOemriA+IGdyb3VuZFwtYnJlYWtpbmdcLWNlcmVtb255Owor5pWZ5a245qmf5qeLID4gZWR1Y2F0aW9uYWxcLW9yZ2FuaXphdGlvbjsKK+S4jemBuuS9meWKmyA+IHNwYXJlXC1ub1wtcGFpbnNcLW9yXC1lZmZvcnQ7CivooajnpLrmlazmhI8gPiByZXNwZWN0ZnVsXCxcLXNob3dcLXJlc3BlY3Q7Civot6/liqDnpo/pn7MgPiBnb3NwZWxcLWFjY29yZGluZ1wtdG9cLWx1a2U7CivpgJroqIrooYzmpa0gPiBjb21tdW5pY2F0aW9uc1wtaW5kdXN0cnk7CivmnKzkvY3kuLvnvqkgPiBzZWxmaXNoXC1kZXBhcnRtZW50YWxpc207CivngrrmiYDmrLLngrogPiBkb1wtd2hhdGV2ZXJcLW9uZVwtcGxlYXNlczsKK+S6uuawkeazlemZoiA+IHBlb3BsZScnc1wtY291cnRcLVwob2ZcLWxhd1wpOwor5ZWG5qWt5qmf5qeLID4gY29tbWVyY2lhbFwtb3JnYW5pemF0aW9uOwor5LiN57+86ICM6aObID4gZGlzYXBwZWFyXC13aXRob3V0XC10cmFjZTsKK+eVouaBreeVouaVrCA+IHJldmVyZW50XC1hbmRcLXJlc3BlY3RmdWw7Civnp5HnoJTkurrlk6EgPiBcKHNjaWVudGlmaWNcKVwtcmVzZWFyY2hlcjsKK+mAj+mcsua2iOaBryA+IHRvXC1kaXNjbG9zZVwtaW5mb3JtYXRpb247CivkuK3lnIvmmYLloLEgPiBjaGluYVwtdGltZXNcLVwobmV3c3BhcGVyXCk7CivlqIHlu4nmlq/loKEgPiB3aWxsaWFtc2J1cmdcLVwodmlyZ2luaWFcKTsKK+S+v+WunOihjOS6iyA+IGFjdFwtYXRcLW9uZScnc1wtZGlzY3JldGlvbjsKK+WVhualreeuoeeQhiA+IGJ1c2luZXNzXC1hZG1pbmlzdHJhdGlvbjsKK+WfuuekjumAn+eOhyA+IGJhc2ljXC1yYXRlXC1cKGFzXC1pblwtaXNkblwpOwor5omL5a+r6K2Y5YilID4gaGFuZHdyaXRpbmdcLXJlY29nbml0aW9uOwor5omL5a+r6L6v6K2YID4gaGFuZHdyaXRpbmdcLXJlY29nbml0aW9uOwor5q+U5q+U55qG5pivID4gY2FuXC1iZVwtZm91bmRcLWV2ZXJ5d2hlcmU7Civmo4ToiIrmj5vmlrAgPiB0b1wtdHVyblwtb3ZlclwtYVwtbmV3XC1sZWFmOwor5LiN5oOF5LmL6KuLID4gbXlcLXByZXN1bXB0dW91c1wtcmVxdWVzdDsKK+mbmemAo+aOpeermSA+IGR1YWxcLWF0dGFjaG1lbnRcLXN0YXRpb247Civoo5zliqnntYTnuZQgPiBhdXhpbGlhcnlcLW9yZ2FuaXphdGlvbnM7Civlm57poafmrbflj7IgPiB0b1wtbG9va1wtYmFja1wtYXRcLWhpc3Rvcnk7CivpgJroqIrljZTlrpogPiBjb21tdW5pY2F0aW9uc1wtcHJvdG9jb2w7CivmraXlsaXntq3oibEgPiBoYXZlXC1kaWZmaWN1bHR5XC13YWxraW5nOwor5YWx5ZCM56+p6YG4ID4gY29sbGFib3JhdGl2ZVwtZmlsdGVyaW5nOwor5aSn6ama5bCP5oCqID4gbXVjaFwtZnVzc1wtYWJvdXRcLW5vdGhpbmc7CivpgJrkv6HljZTlrpogPiBjb21tdW5pY2F0aW9uc1wtcHJvdG9jb2w7Civlhazlronlrpjlk6EgPiBwdWJsaWNcLXNhZmV0eVwtb2ZmaWNpYWxzOwor5YKz6Ly45oqA6KGTID4gdHJhbnNtaXNzaW9uXC10ZWNobm9sb2d5Owor5Yaw5aSp6Zuq5ZywID4gYVwtd29ybGRcLW9mXC1pY2VcLWFuZFwtc25vdzsKK+aUv+W6nOapn+aniyA+IGdvdmVybm1lbnRcLW9yZ2FuaXphdGlvbjsKK+S4jeWPr+eQhuWWuyA+IGJlXC1pbXBlcnZpb3VzXC10b1wtcmVhc29uOwor6IG35qWt5Lit5a24ID4gdm9jYXRpb25hbFwtaGlnaFwtc2Nob29sOwor6Ieq6aOf5YW25p6cID4gcmVhcFwtd2hhdFwtb25lXC1oYXNcLXNvd247CivkuI3pnLLogbLoibIgPiBub3RcLXNob3dcLW9uZScnc1wtZmVlbGluZzsKK+Wkp+eFnumiqOaZryA+IGRhbXBlbmluZ1wtb25lJydzXC1zcGlyaXQ7CivnvoXmm7zoqp7ml48gPiByb21hbmNlXC1sYW5ndWFnZVwtZ3JvdXA7CivlrbDog73nlJ/lt6cgPiBwcmFjdGljZVwtbWFrZXNcLXBlcmZlY3Q7Civll7fll7flvoXlk7ogPiBjcnlcLXBpdGVvdXNseVwtZm9yXC1mb29kOwor5LiN55eb5LiN55eSID4gc2NyYXRjaGluZ1wtdGhlXC1zdXJmYWNlOwor6IGv57ay55Kw5aKDID4gbmV0d29ya2luZ1wtZW52aXJvbm1lbnQ7Civop6Pph4vln7fooYwgPiBpbnRlcnByZXRlZFwtXChjb21wdXRlclwpOwor5LiN6L+R5Lq65oOFID4gbm90XC1hbWVuYWJsZVwtdG9cLXJlYXNvbjsKK+aUv+ayu+apn+aniyA+IHBvbGl0aWNhbFwtb3JnYW5pemF0aW9uOwor5Y+m55y855u455yLID4gdG9cLXZpZXdcLWluXC1hXC1uZXdcLWxpZ2h0Owor5L+h5oGv5oqA6KGTID4gaW5mb3JtYXRpb25cLXRlY2hub2xvZ3k7CivlronlhajogIPmha4gPiBzZWN1cml0eVwtY29uc2lkZXJhdGlvbjsKK+S/oeaBr+euoeeQhiA+IGluZm9ybWF0aW9uXC1tYW5hZ2VtZW50Owor6Lmm6Lmm6Lez6LezID4gYm91bmNpbmdcLWFuZFwtdml2YWNpb3VzOwor6YCa5L+h5a+G5bqmID4gY29tbXVuaWNhdGlvbnNcLWRlbnNpdHk7CivmspLmnInlt67liKUgPiB0aGVyZVwtaXNcLW5vXC1kaWZmZXJlbmNlOwor5LiN6KiA6ICM5Za7ID4gaXRcLWdvZXNcLXdpdGhvdXRcLXNheWluZzsKK+atpeiqv+S4gOiHtCA+IHRvXC1iZVwtdW5pdGVkXC1pblwtYWN0aW9uOwor6YCa6KiK6YCa6YGTID4gY29tbXVuaWNhdGlvbnNcLWNoYW5uZWw7CivmjqHoqKroqJjogIUgPiBpbnZlc3RpZ2F0aXZlXC1yZXBvcnRlcjsKK+avlOi8g+iAjOiogCA+IGNvbXBhcmF0aXZlbHlcLXNwZWFraW5nOwor6Zui6ZaL5pWF6YSJID4gdG9cLWxlYXZlXC1vbmUnJ1wtaG9tZWxhbmQ7CivpgJrkv6HntrLntaEgPiBjb21tdW5pY2F0aW9uc1wtbmV0d29yazsKK+aVuOWtl+mAmuS/oSA+IGRpZ2l0YWxcLWNvbW11bmljYXRpb25zOwor5YWx55Si6buo5ZOhID4gY29tbXVuaXN0XC1wYXJ0eVwtbWVtYmVyOwor57ay6Lev5p625qeLID4gbmV0d29ya1wtaW5mcmFzdHJ1Y3R1cmU7CivmioDooZPmg4XloLEgPiBpbmZvcm1hdGlvblwtdGVjaG5vbG9neTsKK+e+juWci+S5i+mfsyA+IHZvaWNlXC1vZlwtYW1lcmljYVwtcmFkaW87CivmqJnmupbntYTnuZQgPiBzdGFuZGFyZHNcLW9yZ2FuaXphdGlvbjsKK+eNqOaUrOW4guWgtCA+IHRvXC1tb25vcG9saXplXC1hXC1tYXJrZXQ7CivlvazlvazmnInnpq4gPiByZWZpbmVkXC1hbmRcLWNvdXJ0ZW91czsKK+WujOWFqOWFvOWuuSA+IGNvbXBsZXRlbHlcLWNvbXBhdGlibGU7Civop4DmuKzooZvmmJ8gPiBvYnNlcnZhdGlvblwtc2F0ZWxsaXRlOwor5LiJ6JCs5LiD5Y2DID4gdGhpcnR5XC1zZXZlblwtdGhvdXNhbmQ7CivlpKfotablnIvpmpsgPiBhbW5lc3R5XC1pbnRlcm5hdGlvbmFsOwor5oOF5aCx5a6Y5ZOhID4gaW50ZWxsaWdlbmNlXC1vZmZpY2lhbDsKK+mbu+ejgeWZquiBsiA+IGVsZWN0cm9tYWduZXRpY1wtbm9pc2U7CivplbfpgJTntrLot68gPiBsb25nXC1kaXN0YW5jZVwtbmV0d29yazsKK+avlOiJsuWIhuaekCA+IGNvbG9yaW1ldHJpY1wtYW5hbHlzaXM7CivluqvniL7lvrfkurogPiBrdXJkaXNoXC1wZXJzb25cfHBlb3BsZTsKK+W+rui7n+WFrOWPuCA+IG1pY3Jvc29mdFwtY29ycG9yYXRpb247CivkuI3orZjmiqzoiIkgPiBmYWlsXC10b1wtYXBwcmVjaWF0ZVwtc2I7CivluK3ljbfkup7mtLIgPiB0b1wtc3dlZXBcLXRocm91Z2hcLWFzaWE7CivkvZzmpa3nkrDlooMgPiBvcGVyYXRpbmdcLWVudmlyb25tZW50Owor5pm65oWn55Si5qyKID4gaW50ZWxsZWN0dWFsXC1wcm9wZXJ0eTsKK+mrmOe0muWumOWToSA+IGhpZ2hcLXJhbmtpbmdcLW9mZmljaWFsOwor5Y2K5aSc5LiJ5pu0ID4gaW5cLXRoZVwtZGVwdGhcLW9mXC1uaWdodDsKK+WPlua2iOemgeS7pCA+IHRvXC1saWZlXC1hXC1wcm9oaWJpdGlvbjsKK+Wvpumam+aHieeUqCA+IHByYWN0aWNhbFwtYXBwbGljYXRpb247CivnlJ/nlKLog73lipsgPiBtYW51ZmFjdHVyaW5nXC1hYmlsaXR5Owor57i957Wx6YG46IiJID4gcHJlc2lkZW50aWFsXC1lbGVjdGlvbjsKK+S4jeaTh+aJi+autSA+IGJ5XC1mYWlyXC1tZWFuc1wtb3JcLWZvdWw7CivlnIvpmpvmqJnmupYgPiBpbnRlcm50aW9uYWxcLXN0YW5kYXJkOwor6YeR6Zm15aSn5a24ID4gdW5pdmVyc2l0eVwtb2ZcLW5hbmtpbmc7CivnlbDos6rntrLot68gPiBoZXRlcm9nZW5lb3VzXC1uZXR3b3JrOwor55m95omL6LW35a62ID4gYnVpbGRcLXVwXC1mcm9tXC1ub3RoaW5nOwor6JGh6JCE54mZ6KqeID4gcG9ydHVndWVzZVwtXChsYW5ndWFnZVwpOwor5LiA6IeC5LmL5YqbID4gXChsZW5kXClcLWFcLWhlbHBpbmdcLWhhbmQ7CivkuI3lgKvkuI3poZ4gPiBuZWl0aGVyXC1maXNoXC1ub3JcLWZvd2w7Civln7rmnKzljp/nkIYgPiBmdW5kYW1lbnRhbFwtcHJpbmNpcGxlOwor5pKr6aSK5oiQ5Lq6ID4gdG9cLWJyaW5nXC11cFwtXChhXC1jaGlsZFwpOwor6YCa5L+h5pyN5YuZID4gY29tbXVuaWNhdGlvblwtc2VydmljZTsKK+Wci+eHn+S8gealrSA+IG5hdGlvbmFsaXplZFwtaW5kdXN0cnk7CivkuozljYHlhavomZ8gPiAyOHRoXC1kYXlcLW9mXC10aGVcLW1vbnRoOwor5pys5Zu65p6d5qauID4gd2hlblwtdGhlXC1yb290XC1pc1wtZmlybTsKK+WCs+i8uOioreWCmSA+IHRyYW5zbWlzc2lvblwtZmFjaWxpdHk7CivkuI3mmK/lkbPlhZIgPiBub3RcLXRoZVwtcmlnaHRcLWZsYXZvdXI7Civmk43kvZznkrDlooMgPiBvcGVyYXRpbmdcLWVudmlyb25tZW50Owor6Zqo5qmf5pmC6ZaTID4gcmFuZG9tXC1wZXJpb2RcLW9mXC10aW1lOwor5YKz6Ly46Led6ZuiID4gdHJhbnNtaXNzaW9uXC1kaXN0YW5jZTsKK+WPpui1t+eIkOeBtiA+IHRvXC1zdGFydFwtZnJvbVwtc2NyYXRjaDsKK+mmluiFpuacg+itsCA+IGxlYWRlcnNoaXBcLWNvbmZlcmVuY2U7CivlpoLlh7rkuIDovY0gPiBiZVwtcHJlY2lzZWx5XC10aGVcLXNhbWU7Civnn67mnYblk4HnqK4gPiBzaG9ydFwtc3RhbGtlZFwtdmFyaWV0eTsKK+mBi+eul+eSsOWigyA+IG9wZXJhdGluZ1wtZW52aXJvbm1lbnQ7CivntZ7nm6HohabmsYEgPiB0b1wtd3JhY2tcLW9uZScnc1wtYnJhaW5zOwor5YWJ56OB56Kf5qmfID4gbWFnbmV0b1wtb3B0aWNhbFwtZHJpdmU7CivlnIvmnInkvIHmpa0gPiBuYXRpb25hbGl6ZWRcLWJ1c2luZXNzOwor57at5ZC+54i+5Lq6ID4gdWlnaHVyXC1wZXJzb25cfHBlb3BsZTsKK+mWi+mZpOWtuOexjSA+IHRvXC1leHBlbFwtZnJvbVwtc2Nob29sOwor6aaW5bit5Luj6KGoID4gY2hpZWZcLXJlcHJlc2VudGF0aXZlOwor54mp55CG57WQ5qeLID4gcGh5c2ljYWxcLWNvbXBvc2l0aW9uOwor5ZyL5pyD6K2w6ZW3ID4gc3BlYWtlclwtb2ZcLXRoZVwtaG91c2U7Civmh4nnlKjlubPlj7AgPiBhcHBsaWNhdGlvblwtcGxhdGZvcm07CivljIjniZnliKnoqp4gPiBodW5nYXJpYW5cLVwobGFuZ3VhZ2VcKTsKK+S4jeS/oeS7u+ahiCA+IG5vXC1jb25maWRlbmNlXC1tb3Rpb247CivmlLnlloTpl5zkv4IgPiB0b1wtaW1wcm92ZVwtcmVsYXRpb25zOwor5YGc54Gr5Y2U6K2wID4gY2Vhc2VcLWZpcmVcLWFncmVlbWVudDsKK+S6jOWNgeS6jOiZnyA+IDIyXC1uZFwtZGF5XC1vZlwtYVwtbW9udGg7CivnorrmnInlhbbkuosgPiBcKGNvbmZpcm1cLXRvXC1iZVwpXC10cnVlOwor5aSn5Z6L5LyB5qWtID4gbGFyZ2VcLXNjYWxlXC1pbmR1c3RyeTsKK+S9v+W+kuihjOWCsyA+IGFjdHNcLW9mXC10aGVcLWFwb3N0bGVzOwor5b+F5LiN5Y+v5bCRID4gYWJzb2x1dGVseVwtbmVjZXNzYXJ5Owor5LiN5Zyo6Kmx5LiLID4gYmVcLW5vdGhpbmdcLWRpZmZpY3VsdDsKK+aHieeUqOi7n+S7tiA+IGFwcGxpY2F0aW9uXC1zb2Z0d2FyZTsKK+S6pOaPm+aKgOihkyA+IHN3aXRjaGluZ1wtdGVjaG5vbG9neTsKK+eoi+W8j+iqnuiogCA+IHByb2dyYW1taW5nXC1sYW5ndWFnZTsKK+eZvOihqOiBsuaYjiA+IHRvXC1pc3N1ZVwtYVwtc3RhdGVtZW50Owor6Zu76IWm6Kqe6KiAID4gcHJvZ3JhbW1pbmdcLWxhbmd1YWdlOwor6Zu75a2Q5bel5qWtID4gZWxlY3Ryb25pY3NcLWluZHVzdHJ5Owor5Y+s6ZaL5pyD6K2wID4gdG9cLWNhbGxcLWFcLWNvbmZlcmVuY2U7CivllYbmpa3mh4nnlKggPiBidXNpbmVzc1wtYXBwbGljYXRpb247Civmr4/ms4HmhIjkuIsgPiBzdGVhZGlseVwtZGV0ZXJpb3JhdGU7Civou43kuovmqZ/mp4sgPiBtaWxpdGFyeVwtaW5zdGl0dXRpb247CivliKTomZXmrbvliJEgPiB0b1wtc2VudGFuY2VcLXRvXC1kZWF0aDsKK+iyqOW5o+iytuWAvCA+IGN1cnJlbmN5XC1kZXZhbHVhdGlvbjsKK+aMieeFp+azleW+iyA+IGFjY29yZGluZ1wtdG9cLXRoZVwtbGF3Owor5YyX5Zue5q2457eaID4gdGhlXC10cm9waWNcLW9mXC1jYW5jZXI7Civpm7vlrZDlhYPku7YgPiBlbGVjdHJvbmljXC1jb21wb25lbnQ7CivntpPmv5/oobDpgIAgPiBcKGVjb25vbWljXClcLXJlY2Vzc2lvbjsKK+WFieS6jOalteeuoSA+IGxpZ2h0XC1lbWl0dGluZ1wtZGlvZGU7CivkuI3nqanlubPooaEgPiB1bnN0YWJsZVwtZXF1aWxpYnJpdW07Civkv6Hmga/os4fmupAgPiBpbmZvcm1hdGlvblwtcmVzb3VyY2U7Civlha3ljYHkupTmrbIgPiBzaXh0eVwtZml2ZVwteWVhcnNcLW9sZDsKK+aZuuiDveWkp+aokyA+IGludGVsbGlnZW50XC1idWlsZGluZzsKK+WwkeaVuOawkeaXjyA+IG1pbm9yaXR5XC1uYXRpb25hbGl0eTsKK+WFqOmdouemgeatoiA+IGNvbXBsZXRlXC1wcm9oaWJpdGlvbjsKK+movummrOWkp+i7iiA+IG11bGVcLWFuZFwtaG9yc2VcLWNhcnRzOwor57aT5r+f55m85bGVID4gZWNvbm9taWNcLWRldmVsb3BtZW50Owor6YCa6KiK57O757WxID4gY29tbXVuaWNhdGlvblwtc3lzdGVtOwor5LiN5LqM5rOV6ZaAID4gdGhlXC1vbmVcLWFuZFwtb25seVwtd2F5Owor54Sh5YO554+N54+gID4gcGVhcmxcLW9mXC1ncmVhdFwtcHJpY2U7CivmnKrmiJDlubTogIUgPiBtaW5vclwtXChub3RcLWFuXC1hZHVsdFwpOwor5LyK5pav6Jit5aChID4gaXNsYW1hYmFkXC1cKHBha2lzdGFuXCk7CivkuozljYHlm5vomZ8gPiAyNFwtdGhcLWRheVwtb2ZcLWFcLW1vbnRoOwor5aSn5aSx5omA5pybID4gZ3JlYXRseVwtZGlzc2Fwb2ludGVkOwor5LyB5qWt6ZuG5ZyYID4gaW5kdXN0cnlcLWFzc29jaWF0aW9uOwor566h55CG5o6l5Y+jID4gbWFuYWdlbWVudFwtaW50ZXJmYWNlOwor5oeJ55So6Luf6auUID4gYXBwbGljYXRpb25cLXNvZnR3YXJlOwor55Sf55Si6Kit5YKZID4gcHJvZHVjdGlvblwtZXF1aXBtZW50Owor576p5YuZ5pWZ6IKyID4gY3VtcHVsc29yeVwtZWR1Y2F0aW9uOwor5YKz6Ly45o6n5Yi2ID4gdHJhbnNtaXNzaW9uXC1jb250cm9sOwor5LiN5oe35aW95oSPID4gaGFyYm91clwtZXZpbFwtZGVzaWduczsKK+iouuaWt+WKn+iDvSA+IGRpYWdub3N0aWNcLWZ1bmN0aW9uOwor5YKz6Ly45aqS6auUID4gdHJhbnNtaXNzaW9uXC1tZWRpdW07Civotbfmrbvlm57nlJ8gPiBhcmlzZVwtZnJvbVwtdGhlXC1kZWFkOwor6auY6ZqO6Kqe6KiAID4gaGlnaFwtbGV2ZWxcLWxhbmd1YWdlOwor576O5ZyL5Lq65rCRID4gdGhlXC1hbWVyaWNhblwtcGVvcGxlOwor6Z2i5Zqu6YCj5o6lID4gY29ubmVjdGlvblwtb3JpZW50ZWQ7CivlsIjmpa3kurrmiY0gPiBleHBlcnRcLVwoaW5cLWFcLWZpZWxkXCk7CivnhKHnuKvpgKPmjqUgPiBzZWFtbGVzc1wtY29ubmVjdGlvbjsKK+WCs+i8uOWqkuizqiA+IHRyYW5zbWlzc2lvblwtbWVkaXVtOwor5bGk6KaL6L+t5Ye6ID4gdG9cLW9jY3VyXC1mcmVxdWVudGx5Owor576O5ZyL5Lul5aSWID4gb3V0c2lkZVwtb2ZcLXRoZVwtdVwuc1wuOwor5q2k5pmC5q2k5Yi7ID4gYXRcLXRoaXNcLXZlcnlcLW1vbWVudDsKK+Wkmum7qOmBuOiIiSA+IG11bHRpcGFydHlcLWVsZWN0aW9uOwor5YWJ57qW6KGw5ribID4gb3B0aWNhbFwtYXR0ZW51YXRpb247CivkuI3li57ogIznjbIgPiByZWFwXC13aXRob3V0XC1zb3dpbmc7CivmioDooZPmqJnmupYgPiB0ZWNobm9sb2d5XC1zdGFuZGFyZDsKK+mWi+eZvOmBjueoiyA+IGRldmVsb3BtZW50XC1wcm9jZXNzOwor6YCa5L+h6LKg6LyJID4gY29tbXVuaWNhdGlvbnNcLWxvYWQ7CivluLjopo/mrablmaggPiBjb252ZW50aW9uYWxcLXdlYXBvbjsKK+e1seioiOe1kOaenCA+IHN0YXRpc3RpY2FsXC1yZXN1bHRzOwor5Y+456m66KaL5oWjID4gYVwtY29tbW9uXC1vY2N1cnJlbmNlOwor5LqM5Y2B5LiD6JmfID4gMjd0aFwtZGF5XC1vZlwtYVwtbW9udGg7CivoppbogIzkuI3oposgPiB0dXJuXC1hXC1ibGluZFwtZXllXC10bzsKK+mbu+WtkOaWh+S7tiA+IGVsZWN0cm9uaWNcLWRvY3VtZW50Owor57WQ5qeL5Yqp6KmeID4gc3RydWN0dXJhbFwtcGFydGljbGU7CivlrZfmlp/lj6XphYwgPiB3ZWlnaGluZ1wtZXZlcnlcLXdvcmQ7CivmlL/msrvpl5zkv4IgPiBwb2xpdGljYWxcLXJlbGF0aW9uczsKK+ebuOS6kuWFvOWuuSA+IG11dHVhbGx5XC1jb21wYXRpYmxlOwor5bCL5LqL55Sf6Z2eID4gdG9cLWxvb2tcLWZvclwtdHJvdWJsZTsKK+Wwj+Wvq+Wtl+avjSA+IGxvd2VyY2FzZVwtXChsZXR0ZXJzXCk7CivnrqHnkIblip/og70gPiBtYW5hZ2VtZW50XC1mdW5jdGlvbjsKK+mrmOe0muiqnuiogCA+IGhpZ2hcLWxldmVsXC1sYW5ndWFnZTsKK+WIhuS9iOaOp+WItiA+IGRpc3RyaWJ1dGVkXC1jb250cm9sOwor57ay57Wh5oeJ55SoID4gbmV0d29ya1wtYXBwbGljYXRpb247CivmqZ/morDnv7vora8gPiBtYWNoaW5lXC10cmFuc2xhdGlvbjsKK+i7n+S7tuaKgOihkyA+IHNvZnR3YXJlXC10ZWNobm9sb2d5Owor5aW25rK56I+c6IqxID4gY3JlYW1lZFwtY2F1bGlmbG93ZXI7CivlhYnnmbzpgIHlmaggPiBvcHRpY2FsXC10cmFuc21pdHRlcjsKK+e2sue1oeeSsOWigyA+IG5ldHdvcmtcLWVudmlyb25tZW50Owor5oSb5Lq65aaC5bexID4gbG92ZVwtb3RoZXJzXC1hc1wtc2VsZjsKK+mYv+aLieW3tOmmrCA+IGFsYWJhbWFcLVwodVwuc1wuc3RhdGVcKTsKK+e1gum7nuWcsOWdgCA+IGRlc3RpbmF0aW9uXC1hZGRyZXNzOwor57ay6Lev5oeJ55SoID4gbmV0d29ya1wtYXBwbGljYXRpb247Civnm67mqJnlnLDlnYAgPiBkZXN0aW5hdGlvblwtYWRkcmVzczsKK+S6jOWNgeWFreiZnyA+IDI2dGhcLWRheVwtb2ZcLWFcLW1vbnRoOwor5Lit5ZyL55W25bGAID4gY2hpbmVzZVwtYXV0aG9yaXRpZXM7CivlkIjmg4XlkIjnkIYgPiByZWFzb25hYmxlXC1hbmRcLWZhaXI7Civnmb7kvp3nmb7poIYgPiBkb2NpbGVcLWFuZFwtb2JlZGllbnQ7CivljYroh6rogJXovrIgPiBzZW1pXC10ZW5hbnRcLXBlYXNhbnQ7CivntrLot6/nkrDlooMgPiBuZXR3b3JrXC1lbnZpcm9ubWVudDsKK+WPjeW9iOWwjuW9iCA+IGFudGltaXNzaWxlXC1taXNzaWxlOwor55Sf55Si6Kit5pa9ID4gcHJvZHVjdGlvblwtZmFjaWxpdHk7CivokaHokITniZnkurogPiBwb3J0dWd1ZXNlXC1cKHBlcnNvblwpOwor5LiN57WV5aaC57i3ID4gaGFuZ2luZ1wtYnlcLWFcLXRocmVhZDsKK+aKgOihk+efpeitmCA+IHRlY2huaWNhbFwta25vd2xlZGdlOwor576O5ZyL6LuN5Lq6ID4gYW1lcmljYW5cLXNlcnZpY2VtYW47CivlnIvpmpvosr/mmJMgPiBpbnRlcm5hdGlvbmFsXC10cmFkZTsKK+S6uumAoOiqnuiogCA+IGFydGlmaWNpYWxcLWxhbmd1YWdlOwor5LiN5pWX5LmL5ZywID4gaW52aW5jaWJsZVwtcG9zaXRpb247Civoh6rouqvliKnnm4ogPiBvbmUnJ3NcLW93blwtaW50ZXJlc3RzOwor56u254it55Si5ZOBID4gY29tcGV0aXRpdmVcLXByb2R1Y3Q7CivpnZ7moLjlnIvlrrYgPiBub25cLW51Y2xlYXJcLWNvdW50cnk7CivmsKPlgJnni4Dms4EgPiBjbGltYXRpY1wtY29uZGl0aW9uczsKK+eSsOW9oue1kOaniyA+IHJpbmdcLWNvbmZpZ3VyYXRpb247Civopb/nj63niZnoqp4gPiBzcGFuaXNoXC1cKGxhbmd1YWdlXCk7CivkuIDoiKzkvoboqqogPiBnZW5lcmFsbHlcLXNwZWFraW5nOwor6aaW6IWm5pyD5pmkID4gbGVhZGVyc2hpcFwtbWVldGluZzsKK+mHjeimgeWVj+mhjCA+IGFuXC1pbXBvcnRhbnRcLWlzc3VlOwor6aCY5YWI5Zyw5L2NID4gbGVhZFwoaW5nXClcLXBvc2l0aW9uOwor5L+h5oGv57O757WxID4gaW5mb3JtYXRpb25cLXN5c3RlbTsKK+eoruaXj+a4hea0lyA+IFwiZXRobmljXC1jbGVhbnNpbmdcIjsKK+S5kuS5k+eQg+aqryA+IHRhYmxlXC10ZW5uaXNcLXRhYmxlOwor6Z2e5bi45Zq05Y6yID4gdG9cLXB1bmlzaFwtc2V2ZXJlbHk7Civlhafpg6jntZDmp4sgPiBpbnRlcm5hbFwtc3RydWN1dHJlOwor5pW45pOa6YCa5L+hID4gZGF0YVwtY29tbXVuaWNhdGlvbjsKK+mdnuW4uOaEn+isnSA+IGV4dHJlbWVseVwtZ3JhdGVmdWw7CivlhYvpmobmioDooZMgPiBjbG9uaW5nXC10ZWNobm9sb2d5Owor6Zu75a2Q57ay57WhID4gZWxlY3Ryb25pY1wtbmV0d29yazsKK+eZvem6teabuOeUnyA+IHBhbGVcLWZhY2VkXC1zY2hvbGFyOwor6LKh5YuZ6Luf5Lu2ID4gZmluYW5jaWFsXC1zb2Z0d2FyZTsKK+ilv+ePreeJmeaWhyA+IHNwYW5pc2hcLVwobGFuZ3VhZ2VcKTsKK+WPpOWFuOiqnuiogCA+IGNsYXNzaWNhbFwtbGFuZ3VhZ2U7CivlhanlgIvkuK3lnIsgPiB0d29cLWNoaW5hXC1cKHBvbGljeVwpOwor5aSW5L6G5oqV6LOHID4gZm9yZWlnblwtaW52ZXN0bWVudDsKK+Wcn+iAs+WFtuiqniA+IHR1cmtpc2hcLVwobGFuZ3VhZ2VcKTsKK+S4jeato+S5i+miqCA+IHVuaGVhbHRoeVwtdGVuZGVuY3k7Civpm4bmiJDpm7vot68gPiBpbnRlZ3JhdGVkXC1jaXJjdWl0Owor6ZaJ6Zec5pS/562WID4gY2xvc2VkXC1kb29yXC1wb2xpY3k7CivntrLntaHmioDooZMgPiBuZXR3b3JrXC10ZWNobm9sb2d5Owor5Lit5ZyL5pS/5bqcID4gY2hpbmVzZVwtZ292ZXJubWVudDsKK+S7pOeJjOeSsOe2siA+IHRva2VuXC1yaW5nXC1uZXR3b3JrOwor5aSn5piO6byO6byOID4gYVwtZ3JhbmRcLXJlcHV0YXRpb247Civosr/mmJPntYTnuZQgPiB0cmFkZVwtb3JnYW5pemF0aW9uOwor6YGN5Zyw6ZaL6IqxID4gYmxvc3NvbVwtZXZlcnl3aGVyZTsKK+e2sue1oeeuoeeQhiA+IG5ldHdvcmtcLW1hbmFnZW1lbnQ7Civpq5jpgJ/ntrLntaEgPiBoaWdoXC1zcGVlZFwtbmV0d29yazsKK+abuOmdouioseWPryA+IHdyaXR0ZW5cLXBlcm1pc3Npb247Civoga/lkIjlhazloLEgPiBqb2ludFwtYW5ub3VuY2VtZW50Owor56CU56m25qmf5qeLID4gcmVzZWFyY2hcLWluc3RpdHV0ZTsKK+S9m+iYreiKkuiqniA+IGZsZW1pc2hcLVwobGFuZ3VhZ2VcKTsKK+Wci+acg+itsOWToSA+IG1lbWJlclwtb2ZcLWNvbmdyZXNzOwor5pyA6L+R5bm+5bm0ID4gdGhlXC1sYXN0XC1mZXdcLXllYXJzOwor57K+57Ch6ZaL5pSvID4gdG9cLXJlZHVjZVwtc3BlbmRpbmc7CivkuI3nva7lj6/lkKYgPiBkZWNsaW5lXC10b1wtY29tbWVudDsKK+S4ieinkuiFueW4tiA+IGF0aGxldGljXC1zdXBwb3J0ZXI7CivooZvnlJ/oqK3lgpkgPiBzYW5pdGFyeVwtZXF1aXBtZW50Owor6YCg5oiQ5ZWP6aGMID4gdG9cLWNyZWF0ZVwtYW5cLWlzc3VlOwor57i955qE5L6G6KqqID4gZ2VuZXJhbGx5XC1zcGVha2luZzsKK+iJsuaDheWwj+iqqiA+IHBvcm5vZ3JhcGhpY1wtbm92ZWw7CivosrTlpoPphonphZIgPiB0aGVcLWRydW5rZW5cLWJlYXV0eTsKK+mbu+WtkOS/oeeusSA+IGVsZWN0cm9uaWNcLW1haWxib3g7CivmlrDliqDlnaHkurogPiBzaW5nYXBvcmVhblwtcGVyc29uOwor6ama5r+k6aet5rWqID4gcGVyaWxvdXNcLXNpdHVhdGlvbjsKK+Wkp+WKm+eZvOWxlSA+IHZpZ29yb3VzXC1leHBhbnNpb247CivmnI3li5nopo/nq6AgPiBzZXJ2aWNlXC1yZWd1bGF0aW9uOwor56ut55uh5YWo5YqbID4gdG9cLXNwYXJlXC1ub1wtZWZmb3J0Owor5LiN5oqY5LiN5omjID4gYVwtaHVuZHJlZFwtcGVyXC1jZW50Owor56eR56CU5qij5qmfID4gcmVzZWFyY2hcLXByb3RvdHlwZTsKK+WNgOWfn+e2sui3ryA+IGxvY2FsXC1hcmVhXC1uZXR3b3JrOwor55m86YCB5Yqf546HID4gdHJhbnNtaXNzaW9uXC1wb3dlcjsKK+aUv+W6nOitpuWRiiA+IGdvdmVybm1lbnRcLXdhcm5pbmc7CivmoLjog73mioDooZMgPiBudWNsZWFyXC10ZWNobm9sb2d5Owor5oSP5aSn5Yip6KqeID4gaXRhbGlhblwtXChsYW5ndWFnZVwpOwor5YyX5Lqs5aSn5a24ID4gYmVpamluZ1wtdW5pdmVyc2l0eTsKK+WNgOWfn+e2sue1oSA+IGxvY2FsXC1hcmVhXC1uZXR3b3JrOwor57ay57Wh56eR5oqAID4gbmV0d29ya1wtdGVjaG5vbG9neTsKK+iBr+mCpuaUv+W6nCA+IGZlZGVyYWxcLWdvdmVybm1lbnQ7Civpm7vohabmpa3ogIUgPiBzb2Z0d2FyZVwtZGV2ZWxvcGVyOwor6YCy6KGM57eo56iLID4gZXhlY3V0YWJsZVwtcHJvZ3JhbTsKK+iZm+aTrOmAo+aOpSA+IHZpcnR1YWxcLWNvbm5lY3Rpb247CivlrqLmiLbmh4nnlKggPiBjbGllbnRcLWFwcGxpY2F0aW9uOwor5LiN6Zqo5oSP6IKMID4gaW52b2x1bnRhcnlcLW11c2NsZTsKK+aOoeWPluaOquaWvSA+IHRvXC1hZG9wdFwtYVwtbWVhc3VyZTsKK+WTiOS9m+Wkp+WtuCA+IGhhcnZhcmRcLXVuaXZlcnNpdHk7CivntrLnrqHns7vntbEgPiBuZXR3b3JrXC1tYW5hZ2VtZW50Owor5pqX57ea5YWJ6K2cID4gZGFya1wtbGluZVwtc3BlY3RydW07Civpm7voppbnr4Dnm64gPiB0ZWxldmlzaW9uXC1wcm9ncmFtOwor5Lit5ZyL5Lq65rCRID4gdGhlXC1jaGluZXNlXC1wZW9wbGU7CivnsKHnn63ku4vntLkgPiBicmllZlwtaW50cm9kdWN0aW9uOwor5rW354Gj5oiw54itID4gXChwZXJzaWFuXClcLWd1bGZcLXdhcjsKK+WcsOeQg+Wkp+awoyA+IGVhcnRoJydzXC1hdG1vc3BoZXJlOwor57Ch6KaB5LuL57S5ID4gYnJpZWZcLWludHJvZHVjdGlvbjsKK+acjeWLmeizqumHjyA+IHF1YWxpdHlcLW9mXC1zZXJ2aWNlOwor5LiN5pS76Ieq56C0ID4gY29sbGFwc2VcLW9mXC1pdHNlbGY7CivmlofljJblgrPntbEgPiBjdWx0dXJhbFwtdHJhZGl0aW9uOwor57ay57Wh6YG356e7ID4gbmV0d29ya1wtbWlncmF0aW9uOwor6Zu76IWm6Luf5Lu2ID4gY29tcHV0ZXJcLXNvZnR3YXJlOwor6LOH5paZ5YKz6Ly4ID4gZGF0YVwtdHJhbnNtaXNzaW9uOwor5ZyL6Ziy6YOo6ZW3ID4gZGVmZW5jZVwtc2VjcmV0YXJ5Owor5beo5aSn5aOT5YqbID4gZW5vcm1vdXNcLXByZXNzdXJlOwor5pW45pOa5YKz6Ly4ID4gZGF0YVwtdHJhbnNtaXNzaW9uOwor5pS/5rK75rCj5YCZID4gcG9saXRpY2FsXC1jbGltYXRlOwor5buj5Z+f57ay6LevID4gd2lkZVwtYXJlYVwtbmV0d29yazsKK+aVmeWPi+Wkp+acgyA+IGNodXJjaFwtY29uZmVyZW5jZTsKK+i7jeS6i+WKm+mHjyA+IG1pbGl0YXJ5XC1zdHJlbmd0aDsKK+mbu+ipseacjeWLmSA+IHRlbGVwaG9uZVwtc2VydmljZTsKK+mYv+aLieS8r+iqniA+IGFyYWJpY1wtXChsYW5ndWFnZVwpOwor5pSv5p+x55Si5qWtID4gbWFpbnN0YXlcLWluZHVzdHJ5Owor5aSa56uZ5Zyw5Z2AID4gbXVsdGljYXN0XC1hZGRyZXNzOwor57aT5r+f5a6J5YWoID4gZWNvbm9taWNcLXNlY3VyaXR5Owor5aSW5Lqk6aKo5rOiID4gZGlwbG9tYXRpY1wtY3Jpc2lzOwor6Zu76Kmx57ay6LevID4gdGVsZXBob25lXC1uZXR3b3JrOwor5Y+N6YGO5L6G6KqqID4gb25cLXRoZVwtb3RoZXJcLWhhbmQ7CivmrZDmtLLoqp7oqIAgPiBldXJvcGVhblwtbGFuZ3VhZ2U7CivntrLntaHoqK3lgpkgPiBuZXR3b3JrXC1lcXVpcG1lbnQ7Civml6Xnm4rlop7liqAgPiB0b1wtaW5jcmVhc2VcLWRhaWx5Owor57aT5r+f5Yqb6YePID4gZWNvbm9taWNcLXN0cmVuZ3RoOwor6K6K5pys5Yqg5Y6yID4gYmVjb21lXC1hZ2dyYXZhdGVkOwor5YWJ57qW5o6l5Y+jID4gb3B0aWNhbFwtaW50ZXJmYWNlOwor5ZWG5qWt6KGM54K6ID4gYnVzaW5lc3NcLWFjdGl2aXR5Owor6LuN6LK76ZaL5pSvID4gbWlsaXRhcnlcLXNwZW5kaW5nOwor6Luf5Lu25bmz6Ie6ID4gc29mdHdhcmVcLXBsYXRmb3JtOwor5oyJ5ZyW57Si6amlID4gdHJ5XC10b1wtbG9jYXRlXC1zdGg7CivluIzkvK/kvoboqp4gPiBoZWJyZXdcLVwobGFuZ3VhZ2VcKTsKK+mWi+eZvOmAseacnyA+IGRldmVsb3BtZW50XC1jeWNsZTsKK+mYv+aLieS8r+aWhyA+IGFyYWJpY1wtXChsYW5ndWFnZVwpOwor5oiw55Wl5aSl5Ly0ID4gc3RyYXRlZ2ljXC1wYXJ0bmVyOwor6Z2c6ISI5ZC45q+SID4gaW50cmF2ZW5lb3VzXC1kcnVnOwor54Sh5pyf5b6S5YiRID4gbGlmZVwtaW1wcmlzb25tZW50Owor55m+5YiG5LmL55m+ID4gYVwtaHVuZHJlZFwtcGVyY2VudDsKK+iQiua6q+aWr+WfuiA+IFwobW9uaWNhXClcLWxld2luc2t5Owor5YKz6Ly45pyN5YuZID4gdHJhbnNwb3J0XC1zZXJ2aWNlOwor57ac5ZCI5biD57eaID4gaW50ZWdyYXRlZFwtd2lyaW5nOwor5YKz6Ly46YCa6YGTID4gdHJhbnNwb3J0XC1jaGFubmVsOwor5pS/5bqc6YOo6ZaAID4gZ292ZXJubWVudFwtYnJhbmNoOwor5paw6IGe6YCx5YiKID4gbmV3c3dlZWtcLW1hZ2F6aW5lOwor55u05o6l56u254itID4gZGlyZWN0XC1jb21wZXRpdG9yOwor6Yar55mC57aT6amXID4gbWVkaWNhbFwtZXhwZXJ0aXNlOwor5buj5pKt5Zyw5Z2AID4gYnJvYWRjYXN0XC1hZGRyZXNzOwor55Sf54mp5q2m5ZmoID4gYmlvbG9naWNhbFwtd2VhcG9uOwor5pqX54Sh5aSp5pelID4gY29tcGxldGVcLWRhcmtuZXNzOwor6auY57Sa56CU56m2ID4gYWR2YW5jZWRcLXJlc2VhcmNoOwor6Ieq5Li757O757WxID4gYXV0b25vbW91c1wtc3lzdGVtOwor55m96YeR5ryi5a6uID4gYnVja2luZ2hhbVwtcGFsYWNlOwor6YGL6KGM54uA5rOBID4gb3BlcmF0aW9uYWxcLXN0YXRlOwor5Zuw6Zuj5Zyo5pa8ID4gdGhlXC1wcm9ibGVtXC1pc1wuXC5cLjsKK+aXpeiAs+abvOiqniA+IGdlcm1hbmljXC1sYW5ndWFnZTsKK+WCs+i8uOWNlOWumiA+IHRyYW5zZmVyXC1wcm90b2NvbDsKK+Wkp+WIgOmXiuaWpyA+IGJvbGRcLWFuZFwtZGVjaXNpdmU7CivnibnliKXlvoXpgYcgPiBzcGVjaWFsXC10cmVhdG1lbnQ7CivlsIjnlKjntrLot68gPiBkZWRpY2F0ZWRcLW5ldHdvcms7CivmlZjliKnkup7mlocgPiBzeXJpYWNcLVwobGFuZ3VhZ2VcKTsKK+WCs+i8uOmAn+eOhyA+IHRyYW5zbWlzc2lvblwtcmF0ZTsKK+S4jeatoeiAjOaVoyA+IHBhcnRcLW9uXC1iYWRcLXRlcm1zOwor5Lit6I+v5rCR5ZyLID4gcmVwdWJsaWNcLW9mXC1jaGluYTsKK+S4pumnlem9iumphSA+IHJ1blwtbmVja1wtYW5kXC1uZWNrOwor6Zuj5Lul5oeJ5LuYID4gaGFyZFwtdG9cLWRlYWxcLXdpdGg7Civnoazku7blubPoh7ogPiBoYXJkd2FyZVwtcGxhdGZvcm07Civlrpjmlrnoqp7oqIAgPiBvZmZpY2lhbFwtbGFuZ3VhZ2U7CivljJfkuqzov5Hpg4ogPiBzdWJ1cmJcLW9mXC1iZWlqaW5nOwor5LiA6Iis5Y6f5YmHID4gZ2VuZXJhbFwtcHJpbmNpcGxlOwor5bCE6aC75bmy5pO+ID4gcmFkaW9cLWludGVyZmVyZWNlOwor5Zub6Z2i5YWr5pa5ID4gaW5cLWFsbFwtZGlyZWN0aW9uczsKK+Wci+WutuWuieWFqCA+IG5hdGlvbmFsXC1zZWN1cml0eTsKK+a1t+a0i+a6q+W6piA+IG9jZWFuXC10ZW1wZXJhdHVyZTsKK+e2sumam+WNlOWumiA+IGludGVybmV0XC1wcm90b2NvbDsKK+WkluS6pOmXnOS/giA+IGZvcmVpZ25cLXJlbGF0aW9uczsKK+W3tOWFi+Wkj+ixrCA+IGJlcmtzaGlyZVwtXChzd2luZVwpOwor5LiN5rK75LmL55eHID4gaW5jdXJhYmxlXC1kaXNlYXNlOwor5qWt55WM5qiZ5rqWID4gaW5kdXN0cnlcLXN0YW5kYXJkOwor6Zm45Z+65bCO5b2IID4gbGFuZFwtYmFzZWRcLW1pc3NsZTsKK+ilv+eVqumbheabuCA+IGJvb2tcLW9mXC16ZXBoYW5pYWg7CivlsIjlrrboqZXoq5YgPiBleHBlcnRcLWNvbW1lbnRhcnk7CivlmoflvpfnmbzmipYgPiB0cmVtYmxlXC13aXRoXC1mZWFyOwor5Zub6ZaA6L2O6LuKID4gc2VkYW5cLVwobW90b3JcLWNhclwpOwor5oSb5LiN6YeL5omLID4gZm9uZGxlXC1hZG1pcmluZ2x5Owor5b6e6aCt5Yiw6IWzID4gZnJvbVwtaGVhZFwtdG9cLWZvb3Q7Civou43kuovlr6blipsgPiBtaWxpdGFyeVwtc3RyZW5ndGg7Civlu6Pmkq3ntrLot68gPiBicm9hZGNhc3RcLW5ldHdvcms7CivnrKjlj6Pmi5noiIwgPiBhd2t3YXJkXC1pblwtc3BlZWNoOwor5be05pav5YWL6KqeID4gYmFzcXVlXC1cKGxhbmd1YWdlXCk7Civoj6/ljJflubPljp8gPiBub3J0aFwtY2hpbmFcLXBsYWluOwor5pWR5oGp6KiI5YqDID4gcGxhblwtb2ZcLXNhbHZhdGlvbjsKK+iIquepuuavjeiJpiA+IGFpcmNyYWZ0XC1jYXJyaWVyOwor5Lit5ZyL5aSn6Zm4ID4gY2hpbmVzZVwtbWFpbmxhbmQ7CivlvbHlg4/mnIPorbAgPiB2aWRlb1wtY29uZmVyZW5jZTsKK+aCsuatoembouWQiCA+IGpveXNcLWFuZFwtc29ycm93czsKK+eZvumHjOaMkeS4gCA+IG9uZVwtaW5cLWFcLWh1bmRyZWQ7Civoqp7ms5XooZPoqp4gPiBncmFtbWF0aWNhbFwtdGVybTsKK+abtOmrmOaAp+iDvSA+IGhpZ2hcLXBlcmZvcm1hbmNlOwor6LuN5LqL56eR5a24ID4gbWlsaXRhcnlcLXNjaWVuY2U7Civlmajlrpjnp7vmrpYgPiBvcmdhblwtdHJhbnNwbGFudDsKK+W9seWDj+iZleeQhiA+IGltYWdlXC1wcm9jZXNzaW5nOwor5Lq65LqL6YOo6ZaAID4gcGVyc29ubmVsXC1vZmZpY2U7CivmvZvlnKjlqIHohIUgPiBwb3RlbnRpYWxcLXRocmVhdDsKK+e1seioiOaVuOaTmiA+IHN0YXRpc3RpY2FsXC1kYXRhOwor54m55a6a5ZCr576pID4gc3BlY2lmaWNcLW1lYW5pbmc7Civph5Hono3ns7vntbEgPiBmaW5hbmNpYWxcLXN5c3RlbTsKK+WwjuiHtOatu+S6oSA+IHRvXC1sZWFkXC10b1wtZGVhdGg7Civmnb/kuIrph5jph5ggPiB0aGF0XC1jbGluY2hlc1wtaXQ7Civpm7vohabkvIHmpa0gPiBjb21wdXRlclwtY29tcGFueTsKK+WUieiBsuWYhuawoyA+IGhlYXZlXC1kZWVwXC1zaWdoczsKK+S4jeWlveaEj+aAnSA+IGZlZWxcLWVtYmFycmFzc2VkOwor5q2j5bi45bel5L2cID4gbm9ybWFsXC1vcGVyYXRpb247CivlgrPnnJ/nmbzpgIEgPiBmYXhcLXRyYW5zbWlzc2lvbjsKK+aTjeS9nOezu+e1sSA+IG9wZXJhdGluZ1wtc3lzdGVtOwor5YKz6Ly45aqS55WMID4gdHJhbnNwb3J0XC1tZXRob2Q7Civnp7vli5Xpm7voqbEgPiBtb2JpbGVcLXRlbGVwaG9uZTsKK+e2sue1oeebtOW+kSA+IG5ldHdvcmtcLWRpYW1ldGVyOwor5oiQ576k57WQ6ZqKID4gaW5cLWxhcmdlXC1udW1iZXJzOwor54Sh5omA5LiN6LOjID4gdG9cLXNlbGxcLWFueXRoaW5nOwor6YCa55So6Zu75ZmoID4gZ2VuZXJhbFwtZWxlY3RyaWM7CivmnJ3prq7ljYrls7YgPiBrb3JlYW5cLXBlbmluc3VsYTsKK+aciemXnOS6uuWjqyA+IHBlcnNvbnNcLWludm9sdmVkOwor6IC25Yip57Gz5pu4ID4gYm9va1wtb2ZcLWplcmVtaWFoOwor6YeR6J6N5biC5aC0ID4gZmluYW5jaWFsXC1tYXJrZXQ7CivlhanlsrjlsI3oqbEgPiBiaWxhdGVyaWFsXC10YWxrczsKK+S4jee2k+S5i+irhyA+IGFic3VyZFwtc3RhdGVtZW50Owor6Lev55Sx5Y2U5a6aID4gcm91dGluZ1wtcHJvdG9jb2w7CivntrLot6/lubPlj7AgPiBuZXR3b3JrXC1wbGF0Zm9ybTsKK+WFieaqoua4rOWZqCA+IG9wdGljYWxcLWRldGVjdG9yOwor6Zu76IWm57ay6LevID4gY29tcHV0ZXJcLW5ldHdvcms7Civms6LniL7lpJrmtrIgPiBib3JkZWF1eFwtbWl4dHVyZTsKK+eZvOmBlOWci+WutiA+IGRldmVsb3BlZFwtbmF0aW9uOwor5bey57aT6YCy6KGMID4gYWxyZWFkeVwtdW5kZXJ3YXk7CivlgrPpgIHmnI3li5kgPiBkZWxpdmVyeVwtc2VydmljZTsKK+iugOiAheS+huS/oSA+IHJlYWRlcicnc1wtbGV0dGVyczsKK+WTiOW3tOiwt+abuCA+IGJvb2tcLW9mXC1oYWJha2t1azsKK+eZveWjgeW+rueRlSA+IGFcLXNsaWdodFwtYmxlbWlzaDsKK+WNgeW5vuWAi+aciCA+IHRlblwtbW9udGhzXC1vclwtc287CivkuI3liqDmgJ3ntKIgPiB3aXRob3V0XC10aGlua2luZzsKK+WWruaooeWFiee6liA+IHNpbmdsZW1vZGVcLWZpYmVyOwor5pyA5aSn6IO95YqbID4gbWF4aW11bVwtY2FwYWNpdHk7CivmnInnt5rpm7voppYgPiBjYWJsZVwtdGVsZXZpc2lvbjsKK+S4jeiuiuizh+acrCA+IGNvbnN0YW50XC1jYXBpdGFsOwor6Zu76Kmx5L+h6JmfID4gdGVsZXBob25lXC1zaWduYWw7CivlqIHniL7lo6voqp4gPiB3ZWxzaFwtXChsYW5ndWFnZVwpOwor55S35a2Q57GD55CDID4gbWVuJydzXC1iYXNrZXRiYWxsOwor6IGv6YKm5aSn5qiTID4gZmVkZXJhbFwtYnVpbGRpbmc7Civmma7pgJrllY/poYwgPiBjb21tb25cLXF1ZXN0aW9uczsKK+i8uOmAgeWqkuS7iyA+IHRyYW5zcG9ydFwtbWVkaXVtOwor6Ziy6KGb5q2m5ZmoID4gZGVmZW5zaXZlXC13ZWFwb247CivkvZzmpa3ns7vntbEgPiBvcGVyYXRpbmdcLXN5c3RlbTsKK+mrlOiCsuS5i+eqlyA+IHdpbmRvd1wtb25cLXNwb3J0czsKK+abuOWvq+iqnuiogCA+IHdyaXR0ZW5cLWxhbmd1YWdlOwor5YWx5Lqr5bi25a+sID4gc2hhcmVkXC1iYW5kd2lkdGg7CivmlofljJbpmpznpJkgPiBjdWx0dXJhbFwtYmFycmllcjsKK+ebtOaOpeW9semfvyA+IGRpcmVjdFwtaW5mbHVlbmNlOwor6IiH5q2k5ZCM5pmCID4gYXRcLXRoZVwtc2FtZVwtdGltZTsKK+S4u+imgeS+hua6kCA+IHByaW5jaXBsZVwtc291cmNlOwor5Lq65rCR5YWs56S+ID4gcGVvcGxlJydzXC1jb21tdW5lOwor5LiL6Z2i6KuL55yLID4gcGxlYXNlXC1zZWVcLWJlbG93Owor6YeR6J6N6aKo5rOiID4gZmluYW5jaWFsXC1jcmlzaXM7CivntrLntaHljZTorbAgPiBuZXR3b3JrXC1wcm90b2NvbDsKK+eZveiho+aIsOWjqyA+IHdhcnJpb3JcLWluXC13aGl0ZTsKK+WuieWmguejkOefsyA+IGFzXC1zb2xpZFwtYXNcLXJvY2s7CivmlYXpmpzmjpLpmaQgPiBmYXVsdFwtcmVzb2x1dGlvbjsKK+mHkeiejeaUuemdqSA+IGZpbmFuY2lhbFwtcmVmb3JtOwor6KGM5YuV6Zu76KmxID4gbW9iaWxlXC10ZWxlcGhvbmU7Civpm4zmgKfmjqXlj6MgPiBmZW1hbGVcLWNvbm5lY3RvcjsKK+W/g+iHn+enu+auliA+IGhlYXJ0XC10cmFuc3BsYW50Owor6YGZ5o6n5pON5L2cID4gcmVtb3RlXC1vcGVyYXRpb247CivnsKHllq7nmoToqqogPiB0b1wtcHV0XC1pdFwtc2ltcGx5Owor5YWJ5o6l5pS25ZmoID4gb3B0aWNhbFwtcmVjZWl2ZXI7CivmqZ/morDoqp7oqIAgPiBtYWNoaW5lXC1sYW5ndWFnZTsKK+iDoeW/l+aYjuW4giA+IGhvXC1jaGlcLW1pbmhcLWNpdHk7CivkuI3nn6XmiYDkupEgPiBub3RcLWtub3dcLXdoYXRcLXNiOwor6Zu76IWm5YWs5Y+4ID4gY29tcHV0ZXJcLWNvbXBhbnk7Civoga/luK3mnIPorbAgPiBqb2ludFwtY29uZmVyZW5jZTsKK+S6pOaPm+e2sui3ryA+IHN3aXRjaGVkXC1uZXR3b3JrOwor6aqo5bm557ay6LevID4gYmFja2JvbmVcLW5ldHdvcms7Civou5/ku7bkvIHmpa0gPiBzb2Z0d2FyZVwtY29tcGFueTsKK+WKm+mHj+Wdh+ihoSA+IGJhbGFuY2VcLW9mXC1wb3dlcjsKK+aWvea0l+e0hOe/sCA+IGpvaG5cLXRoZVwtYmFwdGlzdDsKK+WwvOW4jOexs+iomCA+IGJvb2tcLW9mXC1uZWhlbWlhaDsKK+Wgsee0meWgseWwjiA+IG5ld3NwYXBlclwtcmVwb3J0Owor6YeR6J6N5Y2x5qmfID4gZmluYW5jaWFsXC1jcmlzaXM7Civpm6LplovljJfkuqwgPiB0b1wtbGVhdmVcLWJlaWppbmc7Civlub7kuY7lrozlhaggPiBhbG1vc3RcLWVudGlyZWx5Owor5L+h5oGv5pmC5LujID4gaW5mb3JtYXRpb25cLWFnZTsKK+eUouWTgee2k+eQhiA+IHByb2R1Y3RcLW1hbmFnZXI7Civou43kuovlqIHohIUgPiBtaWxpdGFyeVwtdGhyZWF0Owor57ay6Lev5pyN5YuZID4gbmV0d29ya1wtc2VydmljZTsKK+eglOeptuS4reW/gyA+IHJlc2VhcmNoXC1jZW50ZXI7CivltIfmi5zlhIDlvI8gPiB3b3JzaGlwXC1zZXJ2aWNlOwor5pa56IiI5pyq6Im+ID4gdG9cLWJlXC11bmZvbGRpbmc7Civpm5npgorosr/mmJMgPiBiaWxhdGVyYWxcLXRyYWRlOwor6LuN5LqL6YOo6ZaAID4gbWlsaXRhcnlcLWJyYW5jaDsKK+mZpOatpOS5i+WkliA+IGFwYXJ0XC1mcm9tXC10aGlzOwor5aSq6Zm95YWs5Y+4ID4gc3VuXC1jb3Jwb3JhdGlvbjsKK+WkluWci+izh+acrCA+IGZvcmVpZ25cLWNhcGl0YWw7CivosZDlr4zlpJrlvakgPiByaWNobHlcLWNvbG9yZnVsOwor5LiN55m95LmL5YakID4gdW5yaWdodGVkXC13cm9uZzsKK+aIkuWCmeajruWatCA+IGhlYXZpbHlcLWd1YXJkZWQ7CivljYrpgJTogIzlu6IgPiBnaXZlXC11cFwtaGFsZndheTsKK+aJuemHj+eUn+eUoiA+IHRvXC1tYXNzXC1wcm9kdWNlOwor5pON5L2c6YCf546HID4gb3BlcmF0aW5nXC1zcGVlZDsKK+iBr+WQiOeZvOihqCA+IGpvaW50XC1zdGF0ZW1lbnQ7CivkuI3lrozlhajokYkgPiBpbmNvbXBsZXRlXC1sZWFmOwor5qC45Y+N5oeJ5aCGID4gbnVjbGVhclwtcmVhY3RvcjsKK+e2k+a/n+aUuemdqSA+IGVjb25vbWljXC1yZWZvcm07CivljYrlo4HmsZ/lsbEgPiBoYWxmXC1vZlwtY291bnRyeTsKK+WPpOWFuOmfs+aogiA+IGNsYXNzaWNhbFwtbXVzaWM7CivkuI3lj6/lpJrlvpcgPiBoYXJkXC10b1wtY29tZVwtYnk7Civph43mlrDplovlp4sgPiByZXN1bWVcLFwtcmVzdGFydDsKK+mbu+WtkOmDteS7tiA+IGVsZWN0cm9uaWNcLW1haWw7CivntpPmv5/liY3pgJQgPiBlY29ub21pY1wtZnV0dXJlOwor5bel6K6A5a245qChID4gdGhlXC1yZWZvcm1hdG9yeTsKK+WatOmHjemXnOWIhyA+IHNlcmlvdXNcLWNvbmNlcm47CivntpPmv5/ljbHmqZ8gPiBlY29ub21pY1wtY3Jpc2lzOwor5YuV5oWL5Yqp6KmeID4gYXNwZWN0XC1wYXJ0aWNsZTsKK+aatOi3s+WmgumbtyA+IHN0YW1wXC13aXRoXC1mdXJ5Owor5Lul6KW/57WQ5pu4ID4gYm9va1wtb2ZcLWV6ZWtpZWw7CivljJblrbjmrablmaggPiBjaGVtaWNhbFwtd2VhcG9uOwor55m76KiY55So5oi2ID4gcmVnaXN0ZXJlZFwtdXNlcjsKK+WatOmHjeWVj+mhjCA+IHNlcmlvdXNcLXByb2JsZW07Civnlbbli5nkuYvmgKUgPiB1cmdlbnRcLXByaW9yaXR5Owor6Luf5Lu257O757WxID4gc29mdHdhcmVcLXN5c3RlbTsKK+izvOeJqeS4reW/gyA+IHNob3BwaW5nXC1jZW50ZXI7Civlo4Hlo5jmo67lmrQgPiBjbG9zZWx5XC1ndWFyZGVkOwor55Gq5ouJ5Z+65pu4ID4gYm9va1wtb2ZcLW1hbGFjaGk7Civosr/mmJPlpKXkvLQgPiB0cmFkaW5nXC1wYXJ0bmVyOwor5pyI5Lu95pyD6K2wID4gbW9udGhseVwtbWVldGluZzsKK+eglOeptuWgseWRiiA+IHJlc2VhcmNoXC1yZXBvcnQ7CivlhYjpgLLmrablmaggPiBhZHZhbmNlZFwtd2VhcG9uOwor5aSn55m86Zu36ZyGID4gZXh0cmVtZWx5XC1hbmdyeTsKK+e+juWci+aUv+W6nCA+IHVcLnNcLlwtZ292ZXJubWVudDsKK+WhnueIvueJueiqniA+IGNlbHRpY1wtbGFuZ3VhZ2U7Civmjqrovq3lvLfnoawgPiBzdHJvbmdseVwtd29yZGVkOwor5YWs5Y+45pyD6K2wID4gY29tcGFueVwtbWVldGluZzsKK+aUueiuiuW9ouWDjyA+IHRyYW5zZmlndXJhdGlvbjsKK+eZvuWFkuWFq+WNgSA+IGFib3V0XC1hXC1odW5kcmVkOwor5aSa5qih5YWJ57qWID4gbXVsdGltb2RlXC1maWJlcjsKK+i7n+S7tuW4guWgtCA+IHNvZnR3YXJlXC1tYXJrZXQ7CivmoKHlnJLpqqjlubkgPiBjYW1wdXNcLWJhY2tib25lOwor5rKS5pyJ6IGv57mrID4gdG9cLWJlXC11bnJlbGF0ZWQ7CivkuJbnlYzmnIDlpKcgPiB3b3JsZCcnc1wtbGFyZ2VzdDsKK+WwlumKs+aJueiplSA+IHNoYXJwXC1jcml0aWNpc207Civpm7vohabns7vntbEgPiBjb21wdXRlclwtc3lzdGVtOwor6LKo5bmj5Y2x5qmfID4gbW9uZXRhcnlcLWNyaXNpczsKK+aal+mAgeeni+azoiA+IG1ha2VcLWV5ZXNcLWF0XC1zYjsKK+aVuOS9jee2sui3ryA+IGRpZ2l0YWxcLW5ldHdvcms7Civlhajlipvku6XotbQgPiBkb1wtYXRcLWFsbFwtY29zdHM7CivomZvmk6zntrLntaEgPiB2aXJ0dWFsXC1uZXR3b3JrOwor5YWJ5piO5pel5aCxID4gZ3VhbmdtaW5nXC1kYWlseTsKK+att+WPsuS5hemBoCA+IGFuY2llbnRcLWhpc3Rvcnk7Civmlq/mi4nlpKvoqp4gPiBzbGF2aWNcLWxhbmd1YWdlOwor5aSW5ZyL5YWs5Y+4ID4gZm9yZWlnblwtY29tcGFueTsKK+WVhualreS4reW/gyA+IGJ1c2luZXNzXC1jZW50ZXI7CivkuI3nm7jkuIrkuIsgPiBlcXVhbGx5XC1tYXRjaGVkOwor5qmf5a+G5paH5Lu2ID4gc2VjcmV0XC1kb2N1bWVudDsKK+WFt+mrlOioiOWKgyA+IGFcLWNvbmNyZXRlXC1wbGFuOwor5paH5pu46JmV55CGID4gd29yZFwtcHJvY2Vzc2luZzsKK+mgkOmYsuaOquaWvSA+IHByb3RlY3RpdmVcLXN0ZXA7CivlhaznhLbooajnpLogPiB0b1wtc3RhdGVcLW9wZW5seTsKK+iyoOWCtee6jee6jSA+IGhlYXZpbHlcLWluXC1kZWJ0Owor57aT5r+f6auU5Yi2ID4gZWNvbm9taWNcLXN5c3RlbTsKK+S4jemBjueIvueIviA+IG1lcmVseVwtbWVkaW9jcmU7CivmtYHmhJ/nl4Xmr5IgPiBpbmZsdWVuemFcLXZpcnVzOwor6KGb55Sf5a6Y5ZOhID4gaGVhbHRoXC1vZmZpY2lhbDsKK+WFt+mrlOWVj+mhjCA+IGNvbmNyZXRlXC1pc3N1ZTsKK+Wci+mYsumgkOeulyA+IGRlZmVuY2VcLWJ1ZGdldDsKK+ijgea4m+i7jeWCmSA+IGFybXNcLXJlZHVjdGlvbjsKK+WHuuWPo+WVhuWTgSA+IGV4cG9ydFwtcHJvZHVjdDsKK+aUuemdqemAsueoiyA+IHJlZm9ybVwtcHJvY2VzczsKK+iWhOiDjueTt+WZqCA+IGVnZ3NoZWxsXC1jaGluYTsKK+aTuuiVqeWQiueSsCA+IHN3aW5naW5nXC1yaW5nczsKK+WFqOeQg+awo+WAmSA+IGdsb2JhbFwtY2xpbWF0ZTsKK+WwjeWkluaUv+etliA+IGZvcmVpZ25cLXBvbGljeTsKK+mAsuihjOmAmuS/oSA+IHRvXC1jb21tdW5pY2F0ZTsKK+S4jeWSjuaXouW+gCA+IG5vdFwtY2Vuc3VyZVwtc2I7CivmoKHlnJLntrLntaEgPiBjYW1wdXNcLW5ldHdvcms7CivmlbjkvY3kv6HomZ8gPiBkaWdpdGFsXC1zaWduYWw7CivnlJ/plbfmv4DntKAgPiBncm93dGhcLWhvcm1vbmU7CivmjIfmj67kuK3lv4MgPiBjb21tYW5kXC1jZW50ZXI7Civpm7voqbHnt5rot68gPiB0ZWxlcGhvbmVcLWxpbmU7Civoqp7msKPliqnoqZ4gPiBtb2RhbFwtcGFydGljbGU7CivntITmm7jkup7oqJggPiBib29rXC1vZlwtam9zaHVhOwor57aT5r+f5pyJ5pWIID4gY29zdFwtZWZmZWN0aXZlOwor5aCF5rG65ZCm6KqNID4gdG9cLWZpcm1seVwtZGVueTsKK+abuOWvq+espuiZnyA+IHdyaXRpbmdcLXN5bWJvbDsKK+S4jeefpeatu+a0uyA+IGFjdFwtcmVja2xlc3NseTsKK+azoue+heeahOa1tyA+IHRoZVwtYmFsdGljXC1zZWE7CivmoYzpnaLns7vntbEgPiBkZXNrdG9wXC1zeXN0ZW07CivmnbHljZfkup7lnIsgPiBzb3V0aGVhc3RcLWFzaWE7CivlsI/lnovkvIHmpa0gPiBzbWFsbFwtYnVzaW5lc3M7Civos4fmlpnku4vpnaIgPiBkYXRhXC1pbnRlcmZhY2U7CivkuI3mgI7purzmqKMgPiBub3RcLXVwXC10b1wtbXVjaDsKK+mdnuW4uOmHjeimgSA+IHZlcnlcLWltcG9ydGFudDsKK+mGq+WtuOWwiOWutiA+IG1lZGljYWxcLWV4cGVydDsKK+WFiOmAsuawtOW5syA+IGFkdmFuY2VkXC1sZXZlbDsKK+aVuOaTmuaOpeWPoyA+IGRhdGFcLWludGVyZmFjZTsKK+mAo+mOluWPjeaHiSA+IGNoYWluXC1yZWFjdGlvbjsKK+eJueWIpeaEn+isnSA+IHNwZWNpYWxcLXRoYW5rczsKK+S6uuWjveS/nemaqiA+IGxpZmVcLWluc3VyYW5jZTsKK+aVuOaTmuS7i+mdoiA+IGRhdGFcLWludGVyZmFjZTsKK+S9huS7peeQhuabuCA+IGJvb2tcLW9mXC1kYW5pZWw7Civov6vkuI3lvpflt7IgPiBoYXZlXC1ub1wtY2hvaWNlOwor6KmV5YO55YiG6aGeID4gcmFua1wsXC1jbGFzc2lmeTsKK+W+nuS6i+eglOeptiA+IHRvXC1kb1wtcmVzZWFyY2g7Civku6Xos73kup7mm7ggPiBib29rXC1vZlwtaXNhaWFoOwor5Y2K5pW45Lul5LiKID4gbW9yZVwtdGhhblwtaGFsZjsKK+aqlOahiOWxrOaApyA+IGZpbGVcLWF0dHJpYnV0ZTsKK+W+nuS+huaykuaciSA+IGhhdmVcfGhhc1wtbmV2ZXI7Civku6Xmlq/luJboqJggPiBib29rXC1vZlwtZXN0aGVyOwor5pyA5L2z5Yip55uKID4gYmVzdFwtaW50ZXJlc3RzOwor5oOh5oCn5b6q55KwID4gdmljaW91c1wtY2lyY2xlOwor5LiN55yB5Lq65LqLID4gYmVcLXVuY29uc2Npb3VzOwor55m+54Sh6IGK6LO0ID4gYm9yZWRcLXRvXC1kZWF0aDsKK+mGq+WtuOS4reW/gyA+IG1lZGljYWxcLWNlbnRlcjsKK+eZveiJsuS6uueoriA+IHRoZVwtd2hpdGVcLXJhY2U7CivntpzlkIjloLHlsI4gPiBzdW1tYXJ5XC1yZXBvcnQ7CivlpKflkIzlsI/nlbAgPiBhbG1vc3RcLXNpbWlsYXI7CivljZHouqzlsYjnr4AgPiBib3dcLWFuZFwtc2NyYXBlOwor5oGt6LOA5paw56anID4gaGFwcHlcLW5ld1wteWVhcjsKK+WJjeeUn+WPrOWWmiA+IGZvcmVvcmRpbmF0aW9uOwor57ay6Zqb6Zu76KmxID4gaW50ZXJuZXRcLXBob25lOwor6JiL5p6c6Zu76IWmID4gYXBwbGVcLWNvbXB1dGVyOwor5LiN6ISb6ICM6LWwID4gZ2V0XC1yb3VuZFwtZmFzdDsKK+S4iei8qui7iuS8lSA+IHBlZGljYWJcLWRyaXZlcjsKK+mjvee2k+miqOmcnCA+IHdlYXRoZXJcLWJlYXRlbjsKK+WFqOW/g+WFqOaEjyA+IGhlYXJ0XC1hbmRcLXNvdWw7Civms7DnsbPniL7oqp4gPiB0YW1pbFwtbGFuZ3VhZ2U7CivkuI3mnJ/ogIzpgYcgPiBtZWV0XC1ieVwtY2hhbmNlOwor6L+R5LmO5ZCM5q2lID4gcGxlc2lvY2hyb25vdXM7Civlk6XmnKzlk4jmoLkgPiBjb3BlbmhhZ2VuXC1cP1w/XD87Civnmb7nsbPos73ot5EgPiAxMDBcLW1ldHJlXC1kYXNoOwor6Kq/5p+l5aCx5ZGKID4gbWVtb2lyXCxcLXJlcG9ydDsKK+aVuOWtl+S/oeiZnyA+IGRpZ2l0YWxcLXNpZ25hbDsKK+S4lueVjOe2k+a/nyA+IGdsb2JhbFwtZWNvbm9teTsKK+mAmueUqOaxvei7iiA+IGdlbmVyYWxcLW1vdG9yczsKK+WMl+S6rOmAseWgsSA+IGJlaWppbmdcLXJldmlldzsKK+a6kOm7nuWcsOWdgCA+IHNvdXJjZVwtYWRkcmVzczsKK+mAmeasoeWNseapnyA+IHByZXNlbnRcLWNyaXNpczsKK+WHuuWPo+eUouWTgSA+IGV4cG9ydFwtcHJvZHVjdDsKK+WkmuW3pemBi+S9nCA+IG11bHRpdGhyZWFkaW5nOwor5LqM5rCn5YyW56KzID4gY2FyYm9uXC1kaW94aWRlOwor57ay57Wh6Kit6KiIID4gbmV0d29ya1wtZGVzaWduOwor5LqU5bm06KiI5YqDID4gZml2ZVwteWVhclwtcGxhbjsKK+W4guWgtOe2k+a/nyA+IG1hcmtldFwtZWNvbm9teTsKK+aqlOahiOWft+ihjCA+IGZpbGVcLWV4ZWN1dGlvbjsKK+S6kuWLlembu+imliA+IGludGVyYWN0aXZlXC10djsKK+WFrOecvuaEj+imiyA+IHB1YmxpY1wtb3BpbmlvbjsKK+atkOa0suiBr+ebnyA+IGV1cm9wZWFuXC11bmlvbjsKK+aqlOahiOi9iemAgSA+IGZpbGVcLXRyYW5zZmVyOwor5o6S5bGx5YCS5rW3ID4gZWFydGhcLXNoYWtpbmc7CivntpPnh5/osrvnlKggPiBidXNpbmVzc1wtY29zdDsKK+ebtOaIquS6hueVtiA+IHBsYWluXC10YWxraW5nOwor5Ya35oiw5Lul5b6MID4gcG9zdFwtY29sZFwtd2FyOwor5Yui5Zyo5b+F6KGMID4gYmVcLWltcGVyYXRpdmU7CivoiIrntITlhajmm7ggPiBvbGRcLXRlc3RhbWVudDsKK+W5vuWAi+Wwj+aZgiA+IHNldmVyYWxcLWhvdXJzOwor5LiN5Y+v57y65bCRID4gaW5kaXNwZW5zYWJsZTsKK+imlueql+Wfuua6liA+IHdpbmRvd3NcLWJhc2VkOwor6Zu76YO15L2N572uID4gZW1haWxcLWFkZHJlc3M7CivnoJTnqbbpoJjln58gPiByZXNlYXJjaFwtYXJlYTsKK+mAsuaOpeacjeWLmSA+IGFjY2Vzc1wtc2VydmVyOwor5LqM5qyh5aSn5oiwID4gd29ybGRcLXdhclwtdHdvOwor5Z+65pys5qaC5b+1ID4gYmFzaWNcLWNvbmNlcHQ7Civosr/mmJPpoIblt64gPiB0cmFkZVwtc3VycGx1czsKK+atpuWZqOezu+e1sSA+IHdlYXBvblwtc3lzdGVtOwor5a6255So6Zu76IWmID4gaG9tZVwtY29tcHV0ZXI7CivlpKflhaznhKHnp4EgPiBqdXN0XC1hbmRcLWZhaXI7CivmlrDntITlhajmm7ggPiBuZXdcLXRlc3RhbWVudDsKK+S6nua0suWci+WutiA+IGFzaWFuXC1jb3VudHJ5Owor5pq06aKo6amf6ZuoID4gdmlvbGVudFwtc3Rvcm07CivmjYnlj5blnJblg48gPiBjYXB0dXJlXC1pbWFnZTsKK+aLnOmHkeS4u+e+qSA+IG1vbmV5XC13b3JzaGlwOwor5rC45LmF5ZKM5bmzID4gbGFzdGluZ1wtcGVhY2U7Civlk4jolqnlhYvkurogPiBrYXpha2hcLXBlcnNvbjsKK+W3oeiIquWwjuW9iCA+IGNydWlzZVwtbWlzc2xlOwor5pq05Yqb54qv572qID4gdmlvbGVudFwtY3JpbWU7CivkvZXopb/pmL/mm7ggPiBib29rXC1vZlwtaG9zZWE7CivkuI3miJDmlofms5UgPiB1bndyaXR0ZW5cLWxhdzsKK+S6nuWkquWci+WutiA+IGFzaWFuXC1jb3VudHJ5Owor55uu5qiZ5biC5aC0ID4gdGFyZ2V0XC1tYXJrZXQ7CivmnIDpq5jms5XpmaIgPiBzdXByZW1lXC1jb3VydDsKK+acgOW+jOabtOaWsCA+IGxhdGVzdFwtdXBkYXRlOwor5p2P5LuB6LGG6IWQID4gYWxtb25kXC1qdW5rZXQ7CivpgJnnqK7mlrnlvI8gPiBcKGluXClcLXRoaXNcLXdheTsKK+S/neitt+S4u+e+qSA+IHByb3RlY3Rpb25pc207CivmnIjnkIPooajpnaIgPiBsdW5hclwtc3VyZmFjZTsKK+WcsOaWueWBnOi7iiA+IHBhcmtpbmdcLXBsYWNlOwor55+l5ZCN5Lq65aOrID4gcHVibGljXC1maWd1cmU7Civnvo7lnIvlnIvmnIMgPiB1XC5zXC5cLWNvbmdyZXNzOwor5LiN5bm455qE5pivID4gdW5mb3J0dW5hdGVseTsKK+WFiee6lumbu+e6nCA+IG9wdGljYWxcLWZpYmVyOwor56S+5Lqk6Kqe6KiAID4gbGluZ3VhXC1mcmFuY2E7CivotorkvobotorlpJogPiBtb3JlXC1hbmRcLW1vcmU7Civnmb7np5Hlhajmm7ggPiBlbmN5Y2xvcGFlZGlhOwor5Yqf546H5oOh5YyWID4gcG93ZXJcLXBlbmFsdHk7CivkuI3lj6/mipflipsgPiBmb3JjZVwtbWFqZXVyZTsKK+S4reWci+mKgOihjCA+IGJhbmtcLW9mXC1jaGluYTsKK+mfv+aHieaZgumWkyA+IHJlc3BvbnNlXC10aW1lOwor5YKz6Ly45qih5byPID4gdHJhbnNmZXJcLW1vZGU7CivkuI3nn6XkuI3oprogPiB1bmNvbnNjaW91c2x5Owor5YmN5omA5pyq5pyJID4gdW5wcmVjZWRlbnRlZDsKK+ioquWVj+aWueW8jyA+IGFjY2Vzc1wtbWV0aG9kOwor5qqU5qGI5bu656uLID4gZmlsZVwtY3JlYXRpb247Civlh7rnlJ/ml6XmnJ8gPiBkYXRlXC1vZlwtYmlydGg7CivkuI3lj6/mgJ3orbAgPiBpbmNvbmNlaXZhYmxlOwor5qC85a2Q6Iqx5ZGiID4gcGxhaWRcLFwtdGFydGFuOwor6ZuZ55Sf5YWE5byfID4gdHdpblwtYnJvdGhlcnM7CivmnIDlpKfpgJ/njocgPiBtYXhpbXVtXC1zcGVlZDsKK+ePvuWvpuaDheazgSA+IGN1cnJlbnRcLXN0YXRlOwor5YyF576F6JCs6LGhID4gYWxsXC1lbWJyYWNpbmc7CivoppbpoLvnr4Dnm64gPiB2aWRlb1wtcHJvZ3JhbTsKK+e+hemmrOWtl+avjSA+IHJvbWFuXC1sZXR0ZXJzOwor5LiN5Y+v5ZCN54uAID4gaW5kZXNjcmliYWJsZTsKK+WFtuS7lueahOS6uiA+IG90aGVyXC1wZW9wbGU7CivlqpLpq5TloLHlsI4gPiBtZWRpYVwtcmVwb3J0Owor5ZKM5bmz5qKd57SEID4gcGVhY2VcLXRyZWF0eTsKK+iCoeelqOW4guWgtCA+IHN0b2NrXC1tYXJrZXQ7CivlpKfpqZrlpLHoibIgPiBhcHByZWhlbnNpdmU7Civpq5jlsaTml4XppKggPiBsdXh1cnlcLWhvdGVsOwor6Z2I55qE5LiW55WMID4gc3Bpcml0XC13b3JsZDsKK+WHuuS5jumgkOaWmSA+IHVuZXhwZWN0ZWRseTsKK+WcsOaWueS4u+e+qSA+IFwibG9jYWxcLVwtaXNtXCI7Civmv4DlhYnllLHniYcgPiBjb21wYWN0XC1kaXNrOwor5Lit5aSu6YqA6KGMID4gY2VudHJhbFwtYmFuazsKK+aWr+Wvhue0hOeRnyA+IGpvc2VwaFwtc21pdGg7Civnm67liY3kuJbnlYwgPiBtb2Rlcm5cLXdvcmxkOwor5rCR5oSP6Kq/5p+lID4gb3BpbmlvblwtcG9sbDsKK+ePvuS7o+mfs+aogiA+IG1vZGVyblwtbXVzaWM7Civoo73pgKDmpa3ogIUgPiBtYW51ZmFjdHVyZXI7Civlv4PnkIblrbjlrrYgPiBwc3ljaG9sb2dpc3Q7CivkuI3og73mirXmipcgPiBpcnJlc2lzdGlibGU7CivpgY7looPnsL3oqLwgPiB0cmFuc2l0XC12aXNhOwor6IC256mM5Z+6552jID4gamVzdXNcLWNocmlzdDsKK+iomOiAheWgseWwjiA+IHByZXNzXC1yZXBvcnQ7CivlpJrlt6XkvZzmpa0gPiBtdWx0aXRha3Npbmc7CivkuI3lpKfpm6LlhZIgPiBwcmV0dHlcLWNsb3NlOwor5pys5L6G6Z2i55uuID4gdHJ1ZVwtY29sb3VyczsKK+e2sui3r+evgOm7niA+IG5ldHdvcmtcLW5vZGU7CivkuI3lj6/mlLbmi74gPiBpcnJlbWVkaWFibGU7CivlnIvlrrbmqZ/lr4YgPiBzdGF0ZVwtc2VjcmV0Owor6Kq/5p+l5Lq65ZOhID4gaW52ZXN0aWdhdG9yOwor5q2m6KOd6YOo6ZqKID4gYXJtZWRcLWZvcmNlczsKK+eUn+eUouS8gealrSA+IG1hbnVmYWN0dXJlcjsKK+WQjemMhOacjeWLmSA+IG5hbWVcLXNlcnZpY2U7Civoqp7pn7Pkv6HomZ8gPiB2b2ljZVwtc2lnbmFsOwor5Luk5Lq66ama55WwID4gc3VycHJpc2luZ2x5Owor5Z+656SO6Kit5pa9ID4gYmFzZVwtc3RhdGlvbjsKK+eUn+WRvei3oeixoSA+IHNpZ25cLW9mXC1saWZlOwor55+l6K2Y5YiG5a2QID4gaW50ZWxsZWN0dWFsOwor6Zi/5pGp5Y+45pu4ID4gYm9va1wtb2ZcLWFtb3M7CivnlKjmiLblrprnvqkgPiB1c2VyXC1kZWZpbmVkOwor5oiQ5ZCJ5oCd5rGXID4gZ2VuZ2hpc1wta2hhbjsKK+S4u+W5uee2sui3ryA+IGNvcmVcLW5ldHdvcms7CivmsJHmhI/muKzpqZcgPiBvcGluaW9uXC1wb2xsOwor5q235Luj5b+X5LiLID4gMlwtY2hyb25pY2xlczsKK+att+S7o+W/l+S4iiA+IDFcLWNocm9uaWNsZXM7CivmjIfku6TlkI3lrZcgPiBjb21tYW5kXC1uYW1lOwor5LiA5bCP6YOo5YiGID4gYVwtc21hbGxcLXBhcnQ7CivkuLvlubnntrLntaEgPiBjb3JlXC1uZXR3b3JrOwor5o+u6ZyN54Sh5bqmID4gZXh0cmF2YWdhbmNlOwor55m76Zm45pyI55CDID4gbW9vblwtbGFuZGluZzsKK+i7jeS6i+aPtOWKqSA+IG1pbGl0YXJ5XC1haWQ7CivmnKzmnKzkuLvnvqkgPiBib29rXC13b3JzaGlwOwor5LqU6KeS5aSn5qiTID4gdGhlXC1wZW50YWdvbjsKK+aRqeilv+W+i+azlSA+IGxhd1wtb2ZcLW1vc2VzOwor6L+F6YCf6JST5bu2ID4gcmFwaWRcLXNwcmVhZDsKK+S7peaWr+aLieiomCA+IGJvb2tcLW9mXC1lenJhOwor5LiN55+l5omA5o6qID4gYmVcLWF0XC1hXC1sb3NzOwor5b2i5b2i6Imy6ImyID4gYWxsXC1raW5kc1wtb2Y7CivmqpTmoYjmnI3li5kgPiBmaWxlXC1zZXJ2b2NlOwor6ZmN6JC95Zyw6bueID4gbGFuZGluZ1wtc2l0ZTsKK+S4ieWNgeS6lOWEhCA+IDNcLVwuNVwtYmlsbGlvbjsKK+S6jOWNgeWFreatsiA+IDI2XC15ZWFyc1wtb2xkOwor5pW45pOa57ay57WhID4gZGF0YVwtbmV0d29yazsKK+m+kOeEtuWkp+eJqSA+IGh1Z2VcLW1vbnN0ZXI7CivkuJbnlYznn6XlkI0gPiB3b3JsZFwtZmFtb3VzOwor55+l6K2Y5Lu95a2QID4gaW50ZWxsZWN0dWFsOwor5b+r6YCf55m85bGVID4gcmFwaWRcLWdyb3d0aDsKK+WkmueoruiqnuiogCA+IG11bHRpbGluZ3VhbDsKK+WuieWFqOWVj+mhjCA+IHNhZmV0eVwtaXNzdWU7Civmsonph43miZPmk4ogPiB0b1wtaGl0XC1oYXJkOwor6Ieq54S26ICM54S2ID4gaW52b2x1bnRhcnk7CivkuI3otIrkuIDoqZ4gPiBrZWVwXC1zaWxlbnQ7Civkurrpq5TlmajlrpggPiBodW1hblwtb3JnYW47CivmsJHml4/kuLvnvqkgPiBuYXRpb25hbGlzbTsKK+eyvuWtkOWvhuW6piA+IHNwZXJtXC1jb3VudDsKK+mBt+Wxheenu+awkSA+IGltbWlncmF0aW9uOwor6YeO55Sf5YuV54mpID4gd2lsZFwtYW5pbWFsOwor6IGW6KqV6ICB5Lq6ID4gc2FudGFcLWNsYXVzOwor5rWq5ryr5Li7576pID4gcm9tYW50aWNpc207CivkuI3lj6/nn6Xoq5YgPiBhZ25vc3RpY2lzbTsKK+S4jeWIh+WvpumamyA+IHVucmVhbGlzdGljOwor5YW45Z6L55So6YCUID4gdHlwaWNhbFwtdXNlOwor5a+M5pa85oOz5YOPID4gaW1hZ2luYXRpdmU7CivlnIvkuovoqKrllY8gPiBzdGF0ZVwtdmlzaXQ7CivljYrljYrmi4nmi4kgPiBpbmNvbXBsZXRlZDsKK+S4jeWPr+WIhumboiA+IGluc2VwYXJhYmxlOwor54Sh55Si6ZqO57SaID4gcHJvbGV0YXJpYXQ7CivlpLHljrvmhI/orZggPiB1bmNvbnNjaW91czsKK+eZvuiQrOWvjOe/gSA+IG1pbGxpb25haXJlOwor6LK05peP56S+5pyDID4gYXJpc3RvY3JhY3k7Civms6LlpJrpu47lkIQgPiBwdWVydG9cLXJpY287Civnq4vms5XmqZ/pl5wgPiBsZWdpc2xhdHVyZTsKK+S4u+imgeWOn+WboCA+IG1haW5cLXJlYXNvbjsKK+acieeUn+S7peS+hiA+IHNpbmNlXC1iaXJ0aDsKK+iyneWKoOeIvua5liA+IGxha2VcLWJhaWthbDsKK+WSjOW5s+acg+irhyA+IHBlYWNlXC10YWxrczsKK+S4jeiuiuWDueagvCA+IGZpeGVkXC1wcmljZTsKK+Wls+e5vOaJv+S6uiA+IGluaGVyaXRyZXNzOwor5YGH6Kit6Kqe5rCjID4gc3VianVuY3RpdmU7CivlnLDlv4PlkLjlipsgPiBncmF2aXRhdGlvbjsKK+mBi+iyqOmmrOi7iiA+IGNhcmdvXC13YWdvbjsKK+esrOS4ieS4lueVjCA+IHRoaXJkXC13b3JsZDsKK+eEoemXnOe3iuimgSA+IGluZGlmZmVyZW50Owor5aSn5L6/5Lm+54elID4gY29uc3RpcGF0ZWQ7CivkuI3lgY/kuI3lgJogPiBldmVuXC1oYW5kZWQ7CivliIbmlaPms6jmhI8gPiB0b1wtZGlzdHJhY3Q7CivkuI3mr5vkuYvlnLAgPiBiYXJyZW5cLWxhbmQ7CivotoXntJrluILloLQgPiBzdXBlcm1hcmtldDsKK+W/heimgeaineS7tiA+IHJlcXVpcmVtZW50Owor5YiG5pyf5LuY5qy+ID4gaW5zdGFsbG1lbnQ7CivoiInkvovkvoboqqogPiBmb3JcLWV4YW1wbGU7CivkuJbnlYzosr/mmJMgPiB3b3JsZFwtdHJhZGU7Civojo7lo6vmr5Tkup4gPiBzaGFrZXNwZWFyZTsKK+Wbm+WIhuS5i+S4gCA+IG9uZVwtcXVhcnRlcjsKK+ioiuahhuWCs+mAgSA+IGZyYW1lXC1yZWxheTsKK+eVq+aPkuWcluiAhSA+IGlsbHVzdHJhdG9yOwor6LaK5Y2X5oiw54itID4gdmlldG5hbVwtd2FyOwor54Sh5omA5LiN5ZyoID4gb21uaXByZXNlbnQ7CivkuI3lh7rmiYDmlpkgPiBhc1wtZXhwZWN0ZWQ7CivkuJbnlYzlkozlubMgPiB3b3JsZFwtcGllY2U7CivkuI3lkIzlh6Hpn78gPiBvdXRzdGFuZGluZzsKK+aHieeUqOeoi+W8jyA+IGFwcGxpY2F0aW9uOwor6L2J5L6G6L2J5Y67ID4gcm92ZVwtYXJvdW5kOwor6Yed6YuS55u45bCNID4gdGl0XC1mb3JcLXRhdDsKK+mWieacg+eliOemsSA+IGJlbmVkaWN0aW9uOwor5LiN5Y+v5Lyw6YePID4gaW5lc3RpbWFibGU7CivplovmlL7ns7vntbEgPiBvcGVuXC1zeXN0ZW07CivmnInpmZDlhazlj7ggPiBjb3Jwb3JhdGlvbjsKK+epuumWk+aOoua4rCA+IHNwYWNlXC1wcm9iZTsKK+WfuuekjuWVj+mhjCA+IGJhc2ljXC1pc3N1ZTsKK+mCgemYv+WvhueBmCA+IG1pYW1pXC1iZWFjaDsKK+i6q+W/g+eIveW/qyA+IHJlZnJlc2htZW50Owor56Wt5Y+45qyK6KGTID4gcHJpZXN0Y3JhZnQ7CivmgbDlpoLlhbbku70gPiBhcHByb3ByaWF0ZTsKK+WcqOmAmeacn+mWkyA+IGR1cmluZ1wtdGltZTsKK+eEoeazleW/jeWPlyA+IGludG9sZXJhYmxlOwor5Y+N5YuV5YiG5a2QID4gcmVhY3Rpb25hcnk7Civkvb/nlKjmlrnkvr8gPiBlYXN5XC10b1wtdXNlOwor54Sh5rOV5b2i5a65ID4gdW5zcGVha2FibGU7CivmnInlkIzmg4Xlv4MgPiBzeW1wYXRoZXRpYzsKK+mAsuihjOaAp+S6pCA+IHRvXC1oYXZlXC1zZXg7CivllpzmraHlkLXmnrYgPiBxdWFycmVsc29tZTsKK+aooeeziumCj+i8ryA+IGZ1enp5XC1sb2dpYzsKK+Wwse+5jeiAjOiogCA+IGNvbnNpZGVyaW5nOwor5pyJ6YG46IiJ5qyKID4gY29uc3RpdHVlbnQ7CivmuKzpqZfntZDmnpwgPiB0ZXN0XC1yZXN1bHQ7CivnrqHlrrbogbfli5kgPiBzdGV3YXJkc2hpcDsKK+eLl+S6pOWqvuiIrCA+IGRvZ2d5XC1zdHlsZTsKK+WwiOacieWQjeipniA+IHByb3Blclwtbm91bjsKK+aci+avlOeCuuWluCA+IHRvXC1jb25zcGlyZTsKK+aQrOW8hOaYr+mdniA+IHNvd1wtZGlzY29yZDsKK+WGsOafk+afk+aWmSA+IGF6b2ljXC1keWVzOwor5Zub5YCL5bCP5pmCID4gZm91clwtaG91cnM7CivlpKnmloflrbjlrrYgPiBhc3Ryb25vbWVyOwor55y86Iqx57ma5LqCID4gYmVcLWRhenpsZWQ7Civpra/kvZvniL7lrq4gPiB0aGVcLWxvdXZyZTsKK+S4jeWgquW/jeWPlyA+IHVuYmVhcmFibGU7CivlqJvmqILkuK3lv4MgPiByZWNyZWF0aW9uOwor6Ieq55Sx6LK/5piTID4gZnJlZVwtdHJhZGU7CivkuInliIbkuYvkuowgPiB0d29cLXRoaXJkczsKK+e4vee1seS7u+acnyA+IHByZXNpZGVuY3k7CivkuI3lj6/pgL7otoogPiBpbXBhc3NhYmxlOwor5pWZ5aCC5aKT5ZywID4gY2h1cmNoeWFyZDsKK+ihjOaUv+mVt+WumCA+IG1hZ2lzdHJhdGU7CivosrTml4/oq5bogIUgPiBhcmlzdG9jcmF0Owor5paw6IGe6KiY6ICFID4gam91cm5hbGlzdDsKK+meremXouWFpeijoSA+IHBlbmV0cmF0ZWQ7Civku5blgJHoh6rlt7EgPiB0aGVtc2VsdmVzOwor6Zi/5aGe5ouc55aGID4gYXplcmJhaWphbjsKK+mCj+i8r+eCuOW9iCA+IGxvZ2ljXC1ib21iOwor5ZyW6Kej6Kqq5piOID4gaWxsdXN0cmF0ZTsKK+S4jeWxiOS4jeaSkyA+IHVueWllbGRpbmc7CivlpKfohabmrbvkuqEgPiBicmFpblwtZGVhZDsKK+iDoeaAneS6guaDsyA+IGltYWdpbmluZ3M7CivkuIDliIfkuovniakgPiBldmVyeXRoaW5nOwor5q2M576F6KW/5pu4ID4gY29sb3NzaWFuczsKK+S4jeeUseiHquS4uyA+IGNhbicndFwtaGVscDsKK+abvOW+ueaWr+eJuSA+IG1hbmNoZXN0ZXI7CivkvL3ppqzlsITnt5ogPiBnYW1tYVwtcmF5czsKK+alteeCuum+kOWkpyA+IG1vbnVtZW50YWw7CivmnInliKnlj6/lnJYgPiBwcm9maXRhYmxlOwor54Sh5omA5LiN6IO9ID4gb21uaXBvdGVudDsKK+WIhumbouS4u+e+qSA+IHNlcGFyYXRpc207CivkuJbnlYzpioDooYwgPiB3b3JsZFwtYmFuazsKK+eEoeaJgOS4jeefpSA+IG9tbmlzY2llbnQ7CivplovmnIPnpYjnprEgPiBpbnZvY2F0aW9uOwor6aCY5bCO6IO95YqbID4gbGVhZGVyc2hpcDsKK+aEj+imi+S4jeWQiCA+IGRpc3NlbnNpb247CivlrZ/liqDmi4nlnIsgPiBiYW5nbGFkZXNoOwor5byV5Lq65rOo5oSPID4gYXR0cmFjdGl2ZTsKK+W/mOaBqeiyoOe+qSA+IHVuZ3JhdGVmdWw7Civnm7jlkIzlkI3lrZcgPiBsaWtlXC1uYW1lZDsKK+S9v+S6uuS/oeacjSA+IGNvbnZpbmNpbmc7Civlj5bogIzku6PkuYsgPiBzdWJzdGl0dXRlOwor6Zu75a2Q56m66ZaTID4gY3liZXJzcGFjZTsKK+W+ruS4jei2s+mBkyA+IG5lZ2xpZ2libGU7CivpgZTos7TlloflmJsgPiBkYWxhaVwtbGFtYTsKK+S4jeaPo+WGkuaYpyA+IHZlbnR1cmVcLXRvOwor55yB55Wl56ym6JmfID4gYXBvc3Ryb3BoZTsKK+S4jeWwjeeitOWFkiA+IG5vdFwtcHJvcGVyOwor5oSP5oOz5LiN5YiwID4gdW5leHBlY3RlZDsKK+WGsOS4iumBi+WLlSA+IGljZVwtc3BvcnRzOwor576O5LmD5ruL6YasID4gbWF5b25uYWlzZTsKK+mZuOi7jeS4reWwiSA+IGxpZXV0ZW5hbnQ7CivlvarlvaLlpKfmvKIgPiBidXJseVwtY2hhcDsKK+iQrOS6i+mBlOWNoSA+IG1hc3RlcmNhcmQ7CivpgY7muKHmmYLmnJ8gPiB0cmFuc2l0aW9uOwor5paw6IGe5aqS6auUID4gbmV3c1wtbWVkaWE7CivloIXlrprkuI3np7sgPiB1bnN3ZXJ2aW5nOwor5q2k5pmC5Lul5YmNID4gaGVyZXRvZm9yZTsKK+acnemuruaIsOeIrSA+IGtvcmVhblwtd2FyOwor6Zuj5Lul572u5L+hID4gaW5jcmVkaWJsZTsKK+WFseWSjOaUv+mrlCA+IHJlcHVibGljYW47CivlpJbkuqTmiYvohZUgPiBkaXBsb21hdGljOwor55Wi5qWt5YW456auID4gZ3JhZHVhdGlvbjsKK+iFk+eri+avlOabuCA+IHBoaWxpcGlhbnM7CivpqI7lo6vpoqjmoLwgPiBrbmlnaHRob29kOwor5YyW5aad6Iie5pyDID4gbWFzcXVlcmFkZTsKK+Wls+acjeeJqeWToSA+IHN0ZXdhcmRlc3M7CivmspLmnInnn6XoprogPiBpbnNlbnNpYmxlOwor5paR6aeu6Zm46ZuiID4gdmFyaWVnYXRlZDsKK+awo+WLoua0tua0tiA+IGFnZ3Jlc3NpdmU7CivkuIPljYHlubTku6MgPiB0aGVcLTE5NzAnJ3M7Civlvp7ku4rku6XlvowgPiBoZW5jZWZvcnRoOwor6KaW56qX5paw5oqAID4gd2luZG93c1wtbnQ7CivnuK7lsI/mqKHlnosgPiBtaW5pYXR1cmU7Civku6XlvJfmiYDmm7ggPiBlcGhlc2lhbnM7CivmspLmnInlvaLni4AgPiBzaGFwZWxlc3M7CivnlKjmiLbmlbjmk5ogPiB1c2VyXC1kYXRhOwor6ZaL55m85Lq65ZOhID4gZGV2ZWxvcGVyOwor5Zyw6LOq5a245a62ID4gZ2VvbG9naXN0Owor55Sf54mp5a245a62ID4gYmlvbG9naXN0Owor5LiN5Y+v56Oo5ruFID4gaW5kZWxpYmxlOwor5LiN5Lqm5qiC5LmOID4gZXh0cmVtZWx5Owor5oyJ54Wn5a2X6Z2iID4gbGl0ZXJhbGx5Owor5LiJ5YiG5LmL5LiAID4gb25lXC10aGlyZDsKK+S4jeWPr+aVkeiXpSA+IGluY3VyYWJsZTsKK+iAtui3r+aSkuWGtyA+IGplcnVzYWxlbTsKK+iku+eAhueahOipsSA+IGJsYXNwaGVteTsKK+Wci+WFp+aIsOeIrSA+IGNpdmlsXC13YXI7CivljbHlnLDppqzmi4kgPiBndWF0YW1hbGE7CivliqDlr4blvoznmoQgPiBlbmNyeXB0ZWQ7CivmnInmlLvmk4rmgKcgPiBvZmZlbnNpdmU7Civmg6HlkI3mmK3lvbAgPiBub3RvcmlvdXM7CivntpPmv5/lrbjlrrYgPiBlY29ub21pc3Q7CivpmL/nqbrliqDnk5wgPiBhY29uY2FndWE7CivliqDmi4nlpKrmm7ggPiBnYWxhdGlhbnM7CivntrLpmpvoibLmg4UgPiBjeWJlcnBvcm47CivoirHnsonpgY7mlY8gPiBoYXlcLWZldmVyOwor54K65pmC6YGO5pepID4gcHJlbWF0dXJlOwor6IGv5ZCI57WE57mUID4gc3luZGljYXRlOwor5pyJ5Ym16YCg5YqbID4gaW5nZW5pb3VzOwor5Lq654mp5o+P5a+rID4gcG9ydHJheWFsOwor5Luk5Lq65qy95L2pID4gYWRtaXJhYmxlOwor6Zi/5aWH6YeM5pavID4gYWVzY2h5bHVzOwor5a2f5Yqg5ouJ6KqeID4gYmVuZ2FsZXNlOwor5qmf5qKw6KOd572uID4gbWFjaGluZXJ5Owor5paR57+F5bGx6baJID4gcGFydHJpZGdlOwor5LiN5Y+v5Yud5pW4ID4gY291bnRsZXNzOwor57i95pyD5pyD6ZW3ID4gcHJlc2lkZW50Owor5q+r54Sh55aR5ZWPID4gY2VydGFpbnR5Owor5r6z5aSn5Yip5LqeID4gYXVzdHJhbGlhOwor5aSn5a+r6Y6W5a6aID4gY2Fwc1wtbG9jazsKK+WNiuW3peWNiuiugCA+IHBhcnRcLXdvcms7CivmiJHlgJHoh6rlt7EgPiBvdXJzZWx2ZXM7CivnvoXlvrnmlq/nibkgPiByb2NoZXN0ZXI7CivnrqHlvKbmqILlnJggPiBvcmNoZXN0cmE7Civnmb3ml6XlgZrlpKIgPiBkYXlcLWRyZWFtOwor5Lu75L2V5YW25LuWID4gYW55XC1vdGhlcjsKK+W3tOWLkuaWr+WdpiA+IHBhbGVzdGluZTsKK+WcqO+5jeaXgemCiiA+IGFsb25nc2lkZTsKK+WFiOimi+S5i+aYjiA+IGZvcmVzaWdodDsKK+maqOS5i+iAjOW+jCA+IGZyb21cLXRoYXQ7CivkuIrlgIvmmJ/mnJ8gPiBsYXN0XC13ZWVrOwor5rCR5Li75pS/5rK7ID4gZGVtb2NyYWN5Owor5Li7566h5Lq65ZOhID4gZXhlY3V0aXZlOwor6LKh5YuZ56eY5pu4ID4gdHJlYXN1cmVyOwor55Sf6IKy6IO95YqbID4gZmVydGlsaXR5Owor5YWx5Lqr6Luf6auUID4gc2hhcmV3YXJlOwor5LiN5Y+X5q2h6L+OID4gdW53ZWxjb21lOwor5Ye55Ye45Y2w5Yi3ID4gZW1ib3NzaW5nOwor5pKS6YO96Kmy5Lq6ID4gc2FkZHVjZWVzOwor5YWx55Si5Li7576pID4gY29tbXVuaXNtOwor5LiN5Lul54K654S2ID4gb2JqZWN0XC10bzsKK+ekvuacg+S4u+e+qSA+IHNvY2lhbGlzbTsKK+icnOaciOWBh+acnyA+IGhvbmV5bW9vbjsKK+WQjOePreWQjOWtuCA+IGNsYXNzbWF0ZTsKK+WFt+acieS4u+asiiA+IHNvdmVyZWlnbjsKK+iHquWLleaok+airyA+IGVzY2FsYXRvcjsKK+e3iuaApeS6i+S7tiA+IGVtZXJnZW5jeTsKK+mAgOm7kea/gOe0oCA+IG1lbGF0b25pbjsKK+S4jeioiOWFtuaVuCA+IGNvdW50bGVzczsKK+Wfuuedo+aVmeW+kiA+IGNocmlzdGlhbjsKK+WHueWHuOi7i+iKsSA+IGVtYm9zc2luZzsKK+S4jeeEtueahOipsSA+IG90aGVyd2lzZTsKK+S6nuagvOmWgOi+siA+IGFnYW1lbW5vbjsKK+S4jemAnuS5i+W+kiA+IGRlc3BlcmFkbzsKK+e9ruS5i+W6puWkliA+IGRpc3JlZ2FyZDsKK+aGpOaGpOS4jeW5syA+IGluZGlnbmFudDsKK+S4i+WAi+aYn+acnyA+IG5leHRcLXdlZWs7Civmrbflj7LlrbjlrrYgPiBoaXN0b3JpYW47CivloIXlv43kuI3mi5QgPiBmb3J0aXR1ZGU7CivlhajloLTkuIDoh7QgPiB1bmFuaW1vdXM7CivnvoXliIfmlq/nibkgPiByb2NoZXN0ZXI7CivooajmhI/mloflrZcgPiBpZGVvZ3JhcGg7CivpgJrosqjohqjohLkgPiBpbmZsYXRpb247Civorormj5voqK3lgpkgPiBjb252ZXJ0ZXI7CivntpPmv5/lrbjogIUgPiBlY29ub21pc3Q7CivkuJnnqK7lsITnt5ogPiBnYW1tYVwtcmF5Owor5oSP5rCj55u45oqVID4gY29uZ2VuaWFsOwor542y5pq05Yip6ICFID4gcHJvZml0ZWVyOwor5pav5rSb5LyQ5YWLID4gc2xvdmFraWE7CivmsrnngrjlnIjppIUgPiBkb3VnaG51dDsKK+WboO+5jeS5i+aVhSA+IGluYXNtdWNoOwor6ZuN5a655aSn5bqmID4gZ2VuZXJvdXM7Civlpb3lpb3lhZLlnLAgPiBwcm9wZXJseTsKK+mojuWjq+awo+amgiA+IGNoaXZhbHJ5Owor6Im+5b636JW+5b63ID4gYWRlbGFpZGU7CivlhY3osrvou5/ku7YgPiBmcmVld2FyZTsKK+S7peWkque2sue1oSA+IGV0aGVybmV0Owor5qGD6Iqx5b+D5pyoID4gbWFob2dhbnk7CivmqJnmupbopo/moLwgPiBzdGFuZGFyZDsKK+eEoeirluS9leaZgiA+IHdoZW5ldmVyOwor5bm+5LmO5rKS5pyJID4gc2NhcmNlbHk7CivniafluKvkuYvogbcgPiBtaW5pc3RyeTsKK+WFreWNgeWbm+iQrCA+IDY0XC0wXC0wMDA7CivokpnmiZjnvoXmi4kgPiBtb3Rvcm9sYTsKK+S6uuW3pea1geeUoiA+IGFib3J0aW9uOwor5ZaH5Y+t5rC05LuZID4gZGFmZm9kaWw7CivlnIvpmpvntrLntaEgPiBpbnRlcm5ldDsKK+eEoeirluS9leS6iyA+IGFueXRoaW5nOwor57K+5Yqb5YWF5rKbID4gdmlnb3JvdXM7Civlk6XlgKvluIPntIAgPiBjb2x1bWJ1czsKK+W3pui8quaJi+anjSA+IHJldm9sdmVyOwor5ZOl5YCr5q+U5LqeID4gY29sb21iaWE7CivlkJvkuLvmlL/msrsgPiBtb25hcmNoeTsKK+S6uuWPo+eooOWvhiA+IHBvcHVsb3VzOwor5byV5Lq65rOo55uuID4gc3RyaWtpbmc7CivpmL/lpYfmrbfmlq8gPiBhY2hpbGxlczsKK+Wlp+W+t+S/ruaWryA+IG9keXNzZXVzOwor5Z2m5qGR5bC85LqeID4gdGFuemFuaWE7CivkuI3poafkuIDliIcgPiByZWNrbGVzczsKK+WLouWmguegtOeruSA+IHN3ZWVwaW5nOwor6L6y5a625bqt6ZmiID4gZmFybXlhcmQ7Civlrrbluq3kvZzmpa0gPiBob21ld29yazsKK+WNs+Wwh+S+huiHqCA+IGltbWluZW50Owor6Z+z5qiC5YWJ56KfID4gbXVzaWNcLWNkOwor5LqU5b2p6LOT57SbID4gY29sb3JmdWw7CivmvKLlr4bniL7poJMgPiBoYW1pbHRvbjsKK+iqnuiogOWtuOWutiA+IGxpbmd1aXN0Owor6b6N6aCt6ICB5aSnID4gYmlnXC1ib3NzOwor6IWT5Yip6ZaA5pu4ID4gcGhpbGVtb247Civpm7vohabntrLntaEgPiBpbnRlcm5ldDsKK+aRqeaJmOe+heaLiSA+IG1vdG9yb2xhOwor5be05Z+65pav5Z2mID4gcGFraXN0YW47Civlt7Tlt7TlpJrmlq8gPiBiYXJiYWRvczsKK+ertumBuOa0u+WLlSA+IGNhbXBhaWduOwor57WC56uv55So5oi2ID4gZW5kXC11c2VyOwor5aKo5rC055O25p62ID4gaW5rc3RhbmQ7CivntrLpmpvntrLot68gPiBpbnRlcm5ldDsKK+eEoeS6uumnlemnmyA+IHVubWFubmVkOwor5rOV5Yip6LO95Lq6ID4gcGhhcmlzZWU7Civnp5HnvoXmi4nlpJogPiBjb2xvcmFkbzsKK+WMquW+kumbhuWcmCA+IGdhbmdzdGVyOwor5bCE6aC75Zmq6Z+zID4gcmZcLW5vaXNlOwor5Lq66YGT5Li7576pID4gaHVtYW5pc207CivkuIDlv4PkuIDmhI8gPiBpbnRlbnRseTsKK+e2sumam+e2sue1oSA+IGludGVybmV0Owor57K+56We6Yyv5LqCID4gaW5zYW5pdHk7CivlmInlubToj6/mnIMgPiBjYXJuaXZhbDsKK+WNmuiMqOeTpue0jSA+IGJvdHN3YW5hOwor5aOf5pa36LKp6LOjID4gbW9ub3BvbHk7Civkv53liqDliKnkup4gPiBidWxnYXJpYTsKK+iytOaXj+i6q+S7vSA+IGxvcmRzaGlwOwor6IKM6IKJ55m86YGUID4gbXVzY3VsYXI7CivmtYHmhJ/nlqvoi5cgPiBmbHVcLXNob3Q7Civlt6XkvZzpgY7luqYgPiBvdmVyd29yazsKK+S5meWkque2sui3ryA+IGV0aGVybmV0Owor6aqo6aCt5p625a2QID4gc2tlbGV0b247CivmhJvlm6Dmlq/lnaYgPiBlaW5zdGVpbjsKK+eEoeirluS9leiZlSA+IGFueXdoZXJlOwor5YWs6ZaL5oyH6LKsID4gZGVub3VuY2U7CivmraHov47lhYnoh6ggPiB3ZWxjb21lOwor5a6J5o+Q55Oc5bO2ID4gYW50aWd1YTsKK+WWquW/g+eXheeLgiA+IGx1bmF0aWM7CivmoLzlrZDmo4nluIMgPiBnaW5naGFtOwor6JCs5pyJ5byV5YqbID4gZ3Jhdml0eTsKK+a2iOmYsumaiuWToSA+IGZpcmVtYW47CivmibPkuI3lgJLlhZIgPiB0dW1ibGVyOwor54is6J+y5YuV54mpID4gcmVwdGlsZTsKK+mAgOS8jei7jeS6uiA+IHZldGVyYW47CivlpJbnp5HphqvnlJ8gPiBzdXJnZW9uOwor5Zyo77mN5LmL6ZaTID4gYmV0d2VlbjsKK+WNgeWEhOS9jeWFgyA+IGdpZ2FiaXQ7Civouqvpq5TpmpzlrrMgPiBjcmlwcGxlOwor6Zi/5pGp5bC85LqeID4gYW1tb25pYTsKK+igleWLleWJjemAsiA+IHdyaWdnbGU7CivmtL7ntablt6XkvZwgPiB0b1wtdGFzazsKK+iWlOiWh+iKseiVviA+IHJvc2VidWQ7CivnhKHoq5bkvZXkurogPiB3aG9ldmVyOwor5pav55Om5biM6KOhID4gc3dhaGlsaTsKK+iIquepuumDteS7tiA+IGFpcm1haWw7Civkup7nibnomK3lpKcgPiBhdGxhbnRhOwor6YCy6YCA5YWp6ZujID4gZGlsZW1tYTsKK+S4jeeoguS4jeiOoCA+IHVzZWxlc3M7CivliIbmnpDkurrlo6sgPiBhbmFseXN0Owor5pyA5L2O6ZmQ5bqmID4gbWluaW11bTsKK+WFi+S7gOexs+eIviA+IGthc2htaXI7CivmtLvli5XmiL/lsYsgPiB0cmFpbGVyOwor5LuA5LiA5aWJ5427ID4gdGl0aGluZzsKK+WiqOilv+WTpeS6uiA+IG1leGljYW47CivliqDmpq7ogIDmlrwgPiBnbG9yaWZ5Owor5LiN5bmy5LiN5reoID4gdW5jbGVhbjsKK+S4ieS9jeS4gOmrlCA+IHRyaW5pdHk7CivlpbPnlKjlhafooaMgPiBjaGVtaXNlOwor5YWs55uK5LqL5qWtID4gdXRpbGl0eTsKK+aXpeW4uOW3peS9nCA+IHJvdXRpbmU7CivnlLfmgKfopqrlsawgPiBraW5zbWFuOwor6LKo54mp6YGL6Ly4ID4gZnJlaWdodDsKK+eJmeenkemGq+eUnyA+IGRlbnRpc3Q7Civpg6HmsrvlronlrpggPiBzaGVyaWZmOwor5Lqe5Lyv5ouJ572VID4gYWJyYWhhbTsKK+WFi+e+heWcsOS6niA+IGNyb2F0aWE7CivlhajnpZ7ngYzms6ggPiByYXB0dXJlOwor5bCI56eR6Zmi5qChID4gYWNhZGVteTsKK+mrmOmAn+WFrOi3ryA+IGhpZ2h3YXk7CivntaboiIfos4fmoLwgPiBxdWFsaWZ5Owor5Y2w5Zyw5a6J6YKjID4gaW5kaWFuYTsKK+S4jeW+l+iAjOefpSA+IHVua25vd247CivoiKrnqbrlhazlj7ggPiBhaXJsaW5lOwor5pyJ6ICQ5LmF5YqbID4gZHVyYWJsZTsKK+WkqumZvem7keWtkCA+IHN1bnNwb3Q7CivluIzkvK/kvobmm7ggPiBoZWJyZXdzOwor5aWn5p6X5Yy55YWLID4gb2x5bXBpYzsKK+S6nuWIqeahkemCoyA+IGFyaXpvbmE7Civok4vkuJblpKrkv50gPiBnZXN0YXBvOwor5ZaL5ZaL5LiN5LyRID4gY2hhdHRlcjsKK+aEm+Wxi+WPiueDjyA+IGxvdmVcLW1lOwor57aT5r+f5Yi25bqmID4gZWNvbm9teTsKK+S7pemmrOWFp+WIqSA+IGVtYW51ZWw7Civopo/lioPkurrlk6EgPiBwbGFubmVyOwor5oWI5ZaE5qmf5qeLID4gY2hhcml0eTsKK+eUt+aAp+WwiueosSA+IGVzcXVpcmU7CivkuI3kuInkuI3lm5sgPiBkdWJpb3VzOwor5YiX546L57SA5LiLID4gMlwta2luZ3M7CivliJfnjovntIDkuIogPiAxXC1raW5nczsKK+mZuOi7jeS4iuagoSA+IGNvbG9uZWw7CivomZvmp4vlsI/oqqogPiBmaWN0aW9uOwor5aSW56eR5omL6KGTID4gc3VyZ2VyeTsKK+WQhOiJsuWQhOaooyA+IGRpdmVyc2U7CivkvZvnvoXoo6HpgZQgPiBmbG9yaWRhOwor5YWs54i15aSr5Lq6ID4gZHVjaGVzczsKK+acieWlveWlh+W/gyA+IGN1cmlvdXM7Civlvbzlvpflvozmm7ggPiAyXC1wZXRlcjsKK+eOu+WIqee2reS6niA+IGJvbGl2aWE7CivlsI/lnovmq4Pmq6UgPiBjYWJpbmV0Owor5Y2w5YOP5rex5Yi7ID4gaW1wcmVzczsKK+aMh+WwjuaVmeaOiCA+IGFkdmlzZXI7CivkuI3nn6XkvZXmlYUgPiBzb21laG93Owor6Zi/5Y+45Yy55p6XID4gYXNwaXJpbjsKK+mHkeWFiemWg+eIjSA+IHNwYW5nbGU7CivkupLoga/ntrLntaEgPiBuZXR3b3JrOwor5aW06Zq45Yi25bqmID4gc2xhdmVyeTsKK+aBouW+qeWOn+eLgCA+IHJlc3RvcmU7Civppqzkvobopb/kup4gPiBtYWxhc2lhOwor5bGx6IOh5qGD5pyoID4gaGlja29yeTsKK+W9vOW+l+WJjeabuCA+IDFcLXBldGVyOwor5bCx5a+i5pmC6ZaTID4gYmVkdGltZTsKK+Wbm+i8qummrOi7iiA+IGNoYXJpb3Q7Civkup7mi4nlt7TppqwgPiBhbGFiYW1hOwor5b2I6YGT5bCO5b2IID4gbWlzc2lsZTsKK+acieeyvuelnueXhSA+IGluc2FuZTsKK+WTuuS5s+WLleeJqSA+IG1hbW1hbDsKK+S8iuWwvOS8iuW+tyA+IGFlbmVpZDsKK+WhnueIvue2reS6niA+IHNlcmJpYTsKK+S9v++5jeixkOWvjCA+IGVucmljaDsKK+S8iuWwvOS6nuaWryA+IGFlbmVhczsKK+mphemAkOWHuuWigyA+IGRlcG9ydDsKK+WFq+WIhumfs+espiA+IHF1YXZlcjsKK+WkqeeruueJoeS4uSA+IGRhaGxpYTsKK+mbouWlh+aciei2oyA+IHF1YWludDsKK+eZvOWYjuWYjuiBsiA+IHJhdHRsZTsKK+i2hemBjumZkOW6piA+IGV4Y2VlZDsKK+S4jeWPr+WRiuS6uiA+IGhpZGRlbjsKK+WKm+i2s+S7peWBmiA+IGFmZm9yZDsKK+WcqO+5jeacn+mWkyA+IGR1cmluZzsKK+eoruaXj+S4u+e+qSA+IHJhY2lzbTsKK+W+kuatpeaXheihjCA+IGhpa2luZzsKK+aXheihjOijneWCmSA+IG91dGZpdDsKK+WcsOS4i+mQtei3ryA+IHN1YndheTsKK+WogeWjq+W/jOmFkiA+IHdoaXNreTsKK+mAo+Wtl+espuiZnyA+IGh5cGhlbjsKK+W7oumZpOi7jeWCmSA+IGRpc2FybTsKK+mhm+WAkumBjuS+hiA+IGludmVydDsKK+S4g+aciOS4gOiZnyA+IGp1bHlcLTE7Civpu57poK3mi5vlkbwgPiBiZWNrb247CivkvK/ku7Llj5TlraMgPiBlbGRlc3Q7CivpvLvlj6Ppg6jliIYgPiBtdXp6bGU7CivlsJbogbLllbzlk60gPiBzcXVlYWw7Civlkb3pgYvoqLvlrpogPiBvcmRhaW47CivkurrpoK3njYXouqsgPiBzcGhpbng7CivkuI3lubjkuYvkuosgPiBtaXNoYXA7CivlnKjvuY3kuYvml4EgPiBiZXNpZGU7CivntITnv7Dkuozmm7ggPiAyXC1qb2huOwor6L2f6L2f54OI54OIID4gc3Ryb25nOwor5Y2B5Zub6KGM6KmpID4gc29ubmV0Owor5LqM6ICF5LmL5LiAID4gZWl0aGVyOwor57SE57+w5LiJ5pu4ID4gM1wtam9objsKK+e0hOe/sOS4gOabuCA+IDFcLWpvaG47Civnvo7mtLLlhYDpt7kgPiBjb25kb3I7CivkupTliIbnvo7ph5EgPiBuaWNrZWw7CivpmaTkuobkuYvlpJYgPiBleGNlcHQ7Civoo73pmbblt6XkurogPiBwb3R0ZXI7Civkurrlj6Poqr/mn6UgPiBjZW5zdXM7CivnhKHoq5blpoLkvZUgPiBhbnlob3c7Civlh7rln4Plj4roqJggPiBleG9kdXM7CivmnInol6Xnma7ogIUgPiBhZGRpY3Q7Civph6PprZrnlKjlhbcgPiB0YWNrbGU7Civmr5TovIPllpzmraEgPiBwcmVmZXI7CivpmL/lpJrlsLzmlq8gPiBhZG9uaXM7CivpgIPkuYvlpK3lpK0gPiBlc2NhcGU7CivntKvnvoXomK3oibIgPiB2aW9sZXQ7Civlgq3kurrpoJjnj60gPiBidXRsZXI7CivkuI3miLDkuI3lkowgPiBub1wtd2FyOwor6JiH5qC86Jit5bi9ID4gYm9ubmV0Owor5rib5L2O6YCf5bqmID4gcmV0YXJkOwor6Zi/5ouJ5pav5YqgID4gYWxhc2thOwor5L2/5YW36auU5YyWID4gZW1ib2R5Owor6YWS57K+6aOy5paZID4gbGlxdW9yOwor6LeR5aCC5YWS55qEID4gd2FpdGVyOwor5L2/77mN6IO95aSgID4gZW5hYmxlOwor55Sf5rCj5YuD5YuDID4gbGl2ZWx5Owor54Sh5rOV54Sh5aSpID4gb3V0bGF3Owor5rOi5pav5bC85LqeID4gYm9zbmlhOwor6Jmb5by16IGy5YuiID4gYmx1ZmY7CivmnKrmiJDlubTkurogPiBtaW5vcjsKK+m6teWMheW4q+WChSA+IGJha2VyOwor5oSf5YyW6aSF5Lm+ID4gd2FmZXI7CivpnZ7luLjlrrPmgJUgPiBkcmVhZDsKK+S4gOe3muW+ruWFiSA+IGdsZWFtOwor5LqU6Iqx5YWr6ZaAID4gbXlyaWQ7CivmlpzntIvou5/lkaIgPiB0d2VlZDsKK+W+t+WFi+iWqeaWryA+IHRleGFzOwor5ru/6Lqr5aG15Z+DID4gZHVzdHk7Civoqr/lkbPogonmsYEgPiBncmF2eTsKK+aomea6luWwuuWvuCA+IGdhdWdlOwor5Zyo77mN5LmL5LiLID4gYmVsb3c7CivlnKjvuY3kuYvkuIogPiBhYm92ZTsKK+ifsumzpeWPq+iBsiA+IGNoaXJwOwor5YuV5oWL5b2x5YOPID4gdmlkZW87CivkuInljYPkupTnmb4gPiAzXC01MDA7CivnpLrlqIHpgYvli5UgPiByYWxseTsKK+i8ieiyqOaxvei7iiA+IGxvcnJ5Owor5biD5bib6I+957KfID4gY2xvdGg7CivnpZ7ntpPpgY7mlY8gPiBqdW1weTsKK+S8iuaWr+iYreaVmSA+IGlzbGFtOwor5oSB55yJ6Ium6IeJID4gZnJvd247CivlkInmma7os73kurogPiBneXBzeTsKK+aEm+WFi+aWr+WFiSA+IHhcLXJheTsKK+WutuW6reaVmeW4qyA+IHR1dG9yOwor6Zyy6b2S6ICM56yRID4gZ3JpbjsKK+W+nuWuueS4jei/qyA+IGNhbG07CivkuIDop5LpioDluaMgPiBkaW1lOwor6aOy6aOf55mC6aSKID4gZGlldDsKK+ebrueequWPo+WRhiA+IHN0dW47Civmk7rpvo3ploDpmaMgPiBjaGF0Owor5Yiw77mN5LmL5LiKID4gb250bzsKK+WFqOmrlOS6uuWToSA+IGNyZXc7CivpgaDnqIvnm6PmjqcgPiBybW9uOwor5Zyo77mN5LmL5LitID4gYW1pZDsKK+Wwj+i1t+mHjeapnyA+IGphY2s7CivovJXogIzmmJPoiIkgPiBlYXN5Owor6YeR5bGs6JaE54mHID4gZm9pbDsKK+mgreiFpua4healmiA+IHNhbmU7CivlnKjmsLTmraXooYwgPiB3YWRlOwor5Ye656ef5rG96LuKID4gdGF4aTsKK+mrmOeIvuWkq+eQgyA+IGdvbGY7Civpm7voqbHpiLTogbIgPiBidXp6Owor5ray5pm26aGv56S6ID4gbGNkOwor54OP5ZCI5LmL55y+ID4gbW9iOwor57Si5YW36KOd572uID4gcmlnOwor5YWs5YWx5rG96LuKID4gYnVzOwor6I6r5ZCN5YW25aaZID4gb2RkOwor5ZyT5b2i5pyo5p2QID4gbG9nOwor5LiN5YiG5Yud6LKgID4gdGllOwor6KGj5pyN57ir6YKKID4gaGVtOwor5ZyT5b2i6bq15YyFID4gYnVuOwor5p2c5p2+5a2Q6YWSID4gZ2luOwor5Zyo77mN5LmL5YWnID4gaW47Civnm7TpgJrou4ogPiBcInRocm91Z2hcLXRyYWluXCJcLVwocmVmZXJzXC10b1wtdGhlXC1pZGVhXC1vZlwtcmV0YWluaW5nXC1wcmV2aW91c1wtbGVnaXNsYXR1cmVcLWFmdGVyXC10cmFuc2l0aW9uXC10b1wtY2hpbmVzZVwtcnVsZVwtaW5cLWhvbmdcLWtvbmdcLW9yXC1tYWNhdVwpOwor5bCP6Ief6ay8ID4gZGlydHlcLWxpdHRsZVwtbW9uc3RlclwtXChzcG9rZW5cLWFmZmVjdGlvbmF0ZWx5XC10b1wtYVwtY2hpbGRcLXdob1wtaGFzXC1nb3R0ZW5cLWhpbVwoaGVyXClzZWxmXC1kaXJ0eVw7XC1saXRlcmFsbHlcLVwibGl0dGxlXC1kaXJ0eVwtZ2hvc3RcIlwpOwor57a66Imy5L2zID4gaXRoYWNhXCxcLW55XC1cKGJ1dFwtcHJvbm91bmNlZFwteWkzXC1zZTRcLWppYTFcLFwtZm9sbG93aW5nXC1hXC1taXN0YWtlXC1tYWRlXC1ieVwtaHUyXC1zaGk0XC3og6HpgalcKTsKK+mbt+WzsOWhlCA+IGxlaWZlbmdcLXBhZ29kYVwsXC1ieVwtd2VzdFwtbGFrZVwtdW50aWxcLWl0XC13YXNcLWRlc3Ryb3llZFwtXChhbHNvXC1mcm9tXC1tYWRhbVwtd2hpdGVcLXNuYWtlXCk7CivniaHkuLnljaEgPiBwZW9ueVwtY2FyZFwtXChjcmVkaXRcLWNhcmRcLWlzc3VlZFwtYnlcLWluZHVzdHJpYWxcLWFuZFwtY29tbWVyY2lhbFwtYmFua1wtb2ZcLWNoaW5hXCk7CivkuInlspTlj6MgPiBhdFwtdGhlXC1jcm9zc3JvYWRzXCxcLXRoZVwtbmFtZVwtb2ZcLWFcLWZhbW91c1wtb3BlcmFcLFwtc3RvcnlcLWZyb21cLXNodWlcLWh1XC16aHVhbjsKK+adjuiHquaIkCA+IG5hbWVcLW9mXC1hXC1wZXJzb25cLFwtbGlcLXppXC1jaGVuZ1wsXC1sZWFkZXJcLW9mXC1taW5nXC1keW5hc3R5XC1wZWFzYW50XC1yZWJlbGxpb247CivmsZ/lhavpu54gPiBcImppYW5nXC16ZW1pbicnc1wtZWlnaHRcLXBvaW50XC1mb3JtdWxhXCJcLVwoZm9yXC1yZXN1bWluZ1wtYVwtZGlhbG9nXC13aXRoXC10YWl3YW5cKTsKK+mEp+S6rua0qiA+IHRhbmdcLWxpYW5nXC1ob25nXC1cKG9wcG9zaXRpb25cLWNhbmRpZGF0ZVwtaW5cLWphblwtMTk5Nlwtc2luZ2Fwb3JlXC1lbGVjdGlvbnNcKTsKK+WQg+Wkp+aItiA+IG1hc3NcLXNlaXp1cmVcLW9mXC1mb29kXC1mcm9tXC1sYW5kbG9yZHNcLWR1cmluZ1wtZmFtaW5lc1wtYmVmb3JlXC1saWJlcmF0aW9uOwor5p2O5pmC54+NID4gbGlcLXNoaVwtemhlblwtXCgxNTE4XC0xNTkzXCxcLWZhbW91c1wtZG9jdG9yXCxcLWF1dGhvclwtb2ZcLWJlbjNcLWNhbzNcLWdhbmcxXC1tdTQ7Civnpr3mtYHmhJ8gPiBcImJpcmRcLWZsdVwiXC1cKGZsdVwtY2FycmllZFwtYnlcLWJpcmRzXC1cLVwtZm91bmRcLWluXC1ob25nXC1rb25nXC1pblwtbGF0ZVwtMTk5N1wpOwor6JKZ5Luj54i+ID4gXCh3YWx0ZXJcKVwtbW9uZGFsZVwtXCh1c1wtYW1iYXNzYWRvclwtdG9cLWphcGFuXCxcLWZvcm1lclwtdXNcLXZpY2VcLXByZXNpZGVudFwpOwor6Zmz57SN5b63ID4gXChjbGFpcmVcKVwtY2hlbm5hdWx0XCxcLWNvbW1hbmRlclwtb2ZcLWZseWluZ1wtdGlnZXJzXC1kdXJpbmdcLXdvcmxkXC13YXJcLWlpOwor57at54i+5a65ID4gXChqb2hhbm5lc1wtbG9kZXdpa3VzXClcLXZpbGpvZW5cLVwoc291dGhcLWFmcmljYW5cLWFtYmFzc2Fkb3JcLXRvXC10YWl3YW5cKTsKK+iRm+a0suWjqSA+IG5hbWVcLW9mXC1hXC1wbGFjZVwsXC1nZXpob3ViYVwtZGFtXC1vblwtdGhlXC1jaGFuZ2ppYW5nXC1yaXZlclwsXC1pblwtc2ljaHVhbjsKK+m8u+mfu+avjSA+IFwob2ZcLWNoaW5lc2VcLXByb251bmNpYXRpb25cKVwtYVwtdm93ZWxcLWZvbGxvd2VkXC1ieVwtYVwtbmFzYWxcLWNvbnNvbmFudDsKK+mHkeawuOWNlyA+IGtpbVwteW9uZ1wtbmFtXC1cKG5vcnRoXC1rb3JlYW5cLWRlcHV0eVwtcHJlbWllclwtYW5kXC1mb3JlaWduXC1taW5pc3RlclwpOwor5paX5om55pS5ID4gc3RydWdnbGVcLWNyaXRpY2lzbVwtdHJhbnNmb3JtYXRpb25cLVwoY3VsdHVyYWxcLXJldm9sdXRpb25cLXNsb2dhblwpOwor56uv5Y2I56+AID4gdGhlXC1kcmFnb25cLWJvYXRcLWZlc3RpdmFsXC1cKHRoZVwtNXRoXC1kYXlcLW9mXC10aGVcLTV0aFwtbHVuYXJcLW1vbnRoXCk7Civnmb3ojKvojKsgPiBcKG9mXC1taXN0XCxcLXNub3dcLFwtZmxvb2R3YXRlclwsXC1ldGNcKVwtYVwtdmFzdFwtZXhwYW5zZVwtb2ZcLXdoaXRlbmVzczsKK+aWr+S9qee+hSA+IFwoam9hblwpXC1zcGVyb1wtXCh1bmRlclwtc2VjcmV0YXJ5XC1vZlwtc3RhdGVcLWZvclwtZWNvbm9taWNcLWFmZmFpcnNcKTsKK+WkqualteaLsyA+IGFcLWtpbmRcLW9mXC10cmFkaXRpb25hbFwtY2hpbmVzZVwtc2hhZG93Ym94aW5nXC1cKHRhaVwtY2hpXC1jaHVhblwpOwor5pyD5LiN5pyDID4gXChwb3NpbmdcLWFcLXF1ZXN0aW9uXDpcLXdoZXRoZXJcLXNvbWVvbmVcLFwtc29tZXRoaW5nXClcLWNhblwtb3JcLW5vdDsKK+aKseS9m+iFsyA+IGNsYXNwXC1idWRkYScnc1wtZmVldFwtXC1cLXByb2Zlc3NcLWRldm90aW9uXC1vbmx5XC13aGVuXC1pblwtdHJvdWJsZTsKK+ibi+iKsea5ryA+IGNsZWFyXC1zb3VwXC1jb250YWluaW5nXC1iZWF0ZW5cLWVnZ1wtYW5kXC1ncmVlblwtbGVhZnlcLXZlZ2V0YWJsZTsKK+mHkeWxseWvuiA+IGppbnNoYW5cLXRlbXBsZVwsXC13aGVyZVwtZmFoYWlcLWxpdmVzXC1cKGZyb21cLW1hZGFtXC13aGl0ZVwtc25ha2VcKTsKK+S4puiSguiTriA+IHR3aW5cLWxvdHVzXC1mbG93ZXJzXC1vblwtb25lXC1zdGFsa1wtXC1cLWFcLWRldm90ZWRcLW1hcnJpZWRcLWNvdXBsZTsKK+mjm+iZjumaiiA+IGZseWluZ1wtdGlnZXJzXC1cKHVzXC1haXJtZW5cLWluXC1jaGluYVwtZHVyaW5nXC13b3JsZFwtd2FyXC10d29cKTsKK+aal+iKseWFkiA+IGFcLXZlaWxlZFwtZGVzaWduXC1pbmNpc2VkXC1pblwtcG9yY2VsYWluXC1vclwtd292ZW5cLWluXC1mYWJyaWM7Civmi5TnvZDlrZAgPiBjdXBwaW5nXC10ZWNobmlxdWVcLXVzZWRcLWluXC10cmFkaXRpb25hbFwtY2hpbmVzZVwtbWVkaWNpbmU7CivlhYPlrrXnr4AgPiB0aGVcLWxhbnRlcm5cLWZlc3RpdmFsXCxcLWphbnVhcnlcLTE1XC1vblwtdGhlXC1sdW5hclwtY2FsZW5kYXI7CivlgIvpq5TmiLYgPiBhXC1zbWFsbFwtcHJpdmF0ZVwtYnVzaW5lc3NcLVwodXNlZFwtaW5cLW1haW5sYW5kXC1jaGluYVwtb25seVwpOwor5pmv5b636Y6uID4gamluZ1wtZGVcLXpoZW5cLVwoYVwtY2hpbmVzZVwtY2l0eVwtaW5cLWppYW5nXC14aVwt5rGf6KW/XC1wcm92aW5jZVwpOwor6ZW35Z+O5Y2hID4gZ3JlYXRcLXdhbGxcLWNhcmRcLVwoY3JlZGl0XC1jYXJkXC1pc3N1ZWRcLWJ5XC1iYW5rXC1vZlwtY2hpbmFcKTsKK+WTiOiyneeIviA+IFwod2Vic3RlclwpXC1odWJiZWxsXC1cKGZvcm1lclwtYXNzb2NpYXRlXC1hdHRvcm5leVwtZ2VuZXJhbFwpOwor6JCs5aO95bGxID4gbmFtZVwtb2ZcLWFcLXBsYWNlXCxcLWxvbmdldml0eVwtaGlsbFwsXC1pblwtc3VtbWVyXC1wYWxhY2VcLemgpOWSjOWckjsKK+aLiemCo+eDiCA+IFwocHJpbmNlXClcLXJhbmFyaWRkaFwtXChzb25cLW9mXC1raW5nXC1zaWhhbm91a1wtb2ZcLWNhbWJvZGlhXCk7CivljIXlubLliLYgPiBhXC1zeXN0ZW1cLW9mXC1wYXltZW50XC1wYXJ0bHlcLWluXC1raW5kXC1hbmRcLXBhcnRseVwtaW5cLWNhc2g7CivpoY/nnJ/ljb8gPiBuYW1lXC1vZlwtYVwtcGVyc29uXCxcLXlhblwtemhlbnFpbmdcLFwtYVwtZmFtb3VzXC1jYWxsaWdyYXBoZXI7Civnmb3ntKDosp4gPiBcKG5hbWVcLW9mXC1hXC1wZXJzb25cKVwtYmFpXC1zdXpoZW5cLFwtZnJvbVwtbWFkYW1cLXdoaXRlXC1zbmFrZTsKK+eZveWGsOWGsCA+IHBhaVwtcGluZ1wtcGluZ1wtXCh3ZWxsXC1rbm93blwtdGFpd2FuXC1wZXJmb3JtaW5nXC1hcnRpc3RcKTsKK+S8r+aBqeaWryA+IFwobmljaG9sYXNcKVwtYnVybnNcLVwodXNcLXN0YXRlXC1kZXBhcnRtZW50XC1zcG9rZXNwZXJzb25cKTsKK+WwvOi1q+mtryA+IFwoamF3YWhhcmxhbFwpXC1uZWhydVwtXChmaXJzdFwtcHJpbWVcLW1pbmlzdGVyXC1vZlwtaW5kaWFcKTsKK+aSpea1qum8kyA+IGFcLWRydW1cLXNoYXBlZFwtcmF0dGxlXC1cKHVzZWRcLWJ5XC1wZWRsYXJzXC1vclwtYXNcLWFcLXRveVwpOwor5YyX5aSn6I2SID4gdGhlXC1ncmVhdFwtbm9ydGhlcm5cLXdpbGRlcm5lc3NcLVwoaW5cLW5vcnRoZXJuXC1jaGluYVwpOwor5Y2B5LqU5aSnID4gMVwtNXRoXC1wYXJ0eVwtY29uZ3Jlc3NcLVwob2ZcLWNoaW5lc2VcLWNvbW11bmlzdFwtcGFydHlcKTsKK+adjuWFieiAgCA+IGxlZVwta3VhblwteWV3XC1cKGZvcm1lclwtcHJpbWVcLW1pbmlzdGVyXC1vZlwtc2luZ2Fwb3JlXCk7Civot5HmsZ/muZYgPiB0b1wtbWFrZVwtYVwtbGl2aW5nXC1hc1wtYVwtdHJhdmVsbGluZ1wtcGVyZm9ybWVyXCxcLWV0Y1wuOwor5Lqk5piT6aGNID4gc3VtXC1vclwtdm9sdW1lXC1vclwtYW1vdW50XC1vZlwtYnVzaW5lc3NcLXRyYW5zYWN0aW9uczsKK+ael+ixkOatoyA+IGxpblwtZmVuZ1wtY2hlbmdcLVwodGFpd2FuXC1taW5pc3Rlclwtb2ZcLXRoZVwtaW50ZXJpb3JcKTsKK+iRo+W7uuiPryA+IHR1bmdcLWNoZWVcLWh3YVwtXChob25nXC1rb25nXC1sZWFkZXJcLWFmdGVyXC1qdWx5XC0xOTk3XCk7CivljZfkuqzot68gPiBuYW5qaW5nXC1zdFwuXCxcLWxhcmdlXC1jb21tZXJjaWFsXC1zdHJlZXRcLWluXC1zaGFuZ2hhaTsKK+WFq+S7meahjCA+IG9sZFwtZmFzaGlvbmVkXC1zcXVhcmVcLXRhYmxlXC10b1wtc2VhdFwtZWlnaHRcLXBlb3BsZTsKK+WhnuaLieWHoSA+IFwoc29ubnlcKVwtc2VyYXBoaW5cLVwoaGFpdGlhblwtYW1iYXNzYWRvclwtdG9cLXRhaXdhblwpOwor6YeR5aSn5LitID4ga2ltXC1kYWVcLWp1bmdcLVwobmV3bHlcLWVsZWN0ZWRcLXByZXNpZGVudFwtb2ZcLWtvcmVhXCk7CivojIPmlq/lnaYgPiBcKGRpYW5uZVwpXC1mZWluc3RlaW5cLVwodXNcLXNlbmF0b3JcLWZyb21cLWNhbGlmb3JuaWFcKTsKK+a2suaFi+awtCA+IGxpcXVpZFwtd2F0ZXJcLVwoYXNcLW9wcG9zZWRcLXRvXC1zdGVhbVwtb3JcLWljZVwsXC1lXC5nXC5cKTsKK+ino+aUvui7jSA+IHBlb3BsZScnc1wtbGliZXJhdGlvblwtYXJteVwtXChpZVwsXC10aGVcLWNoaW5lc2VcLWFybXlcKTsKK+i2mee0q+mZvSA+IHpoYW9cLXppeWFuZ1wtXChmb3JtZXJcLWNoaW5lc2VcLWxlYWRlcnNoaXBcLWZpZ3VyZVwpOwor5LqS6YCa5oCnID4gaW50ZXJvcGVyYWJpbGl0eVwtXChvZlwtY29tbXVuaWNhdGlvbnNcLWVxdWlwbWVudFwpOwor5YWo5paX54WlID4gY2h1blwtZG9vXC1od2FuXC1cKGZvcm1lclwtc291dGhcLWtvcmVhblwtcHJlc2lkZW50XCk7CivmjqLot6/ogIUgPiBwYXRoZmluZGVyXC1cKHNwYWNlXC1jcmFmdFwtc2VudFwtdG9cLW1hcnNcLWJ5XC1uYXNhXCk7CivltJTkup7nkLMgPiBjaGFybGVzXC15YWhcLWxpblwtdHJpZVwtXChhcmthbnNhc1wtcmVzdGF1cmFudGV1clwpOwor5bCI5qGI57WEID4gc3BlY2lhbFwtXChsZWdhbFx8anVkaWNpYWxcKVwtaW52ZXN0aWdhdGlvbnNcLWdyb3VwOwor6ZW35rKZ54GjID4gY2hldW5nXC1zaGFcLXdhblwtXChwb3VsdHJ5XC1tYXJrZXRcLWluXC1ob25nXC1rb25nXCk7CivmraPluLjljJYgPiBub3JtYWxpemF0aW9uXC1cKG9mXC1kaXBsb21hdGljXC1yZWxhdGlvbnNcLFwtZXRjXCk7CivorJ3oo6HlpKsgPiBcKG5hd2F6XClcLXNoYXJpZlwtXChwcmltZVwtbWluaXN0ZXJcLW9mXC1wYWtpc3RhblwpOwor5ZCz5L2c5qOfID4gZ29oXC1jaG9rXC10b25nXC1cKHByaW1lXC1taW5pc3Rlclwtb2ZcLXNpbmdhcG9yZVwpOwor5bel5Lq66buoID4gd29ya2VycycnXC1wYXJ0eVwtXChzaW5nYXBvcmVcLW9wcG9zaXRpb25cLXBhcnR5XCk7Civmlq/kvanmnpcgPiBzcGVsbGluZ1wtXChlZ1wsXC1zcGVsbGluZ1wtZW50ZXJ0YWlubWVudFwtZ3JvdXBcKTsKK+ebp+azsOaEmiA+IHJvaFwtdGFlXC13b29cLVwoZm9ybWVyXC1zb3V0aFwta29yZWFuXC1wcmVzaWRlbnRcKTsKK+m9iueZveefsyA+IG5hbWVcLW9mXC1hXC1mYW1vdXNcLWNoaW5lc2VcLWFydGlzdFwsXC1xaVwtYmFpXC1zaGk7CivllYbli5npg6ggPiBjb21tZXJjZVwtZGVwYXJ0bWVudFwtXChvZlwtdGhlXC11c1wtZ292ZXJubWVudFwpOwor6ICB5Ly05YWSID4gXChvZlwtYW5cLW9sZFwtbWFycmllZFwtY291cGxlXClcLWh1c2JhbmRcLW9yXC13aWZlOwor5qKG5a2Q6IWUID4gYVwtZ2VuZXJhbFwtdGVybVwtZm9yXC1sb2NhbFwtb3BlcmFzXC1pblwtc2hhbmd4aTsKK+aiheiYreiKsyA+IG5hbWVcLW9mXC1hXC12ZXJ5XC1mYW1vdXNcLWJlaWppbmdcLW9wZXJhXC1hcnRpc3Q7CivooYzmlL/pmaIgPiBleGVjdXRpdmVcLXl1YW5cLVwoZ292ZXJubWVudFwtYm9keVwtaW5cLXRhaXdhblwpOwor5p2w5L2b6IyyID4gXChqYW1lc1wpXC1qZWZmb3Jkc1wtXCh1c1wtc2VuYXRvclwtZnJvbVwtdmVybW9udFwpOwor576F5biD5rOKID4gbG9wXC1ub3JcLVwobnVjbGVhclwtdGVzdGluZ1wtc2l0ZVwtaW5cLXhpbmppYW5nXCk7CivmsJHpgLLpu6ggPiBkcHBcLVwoZGVtb2NyYXRpY1wtcHJvZ3Jlc3NpdmVcLXBhcnR5XCxcLXRhaXdhblwpOwor55m96Iqx6JuHID4gbG9uZ1wtbm9zZWRcLXBpdFwtdmlwZXJcLVwoYWdraXN0cm9kb25cLWFjdXR1c1wpOwor55y+6K2w5ZOhID4gbWVtYmVyXC1vZlwtdGhlXC11c1wtaG91c2VcLW9mXC1yZXByZXNlbnRhdGl2ZXM7CivpgoHnp5Hoo6EgPiBcKG1pa2VcKVwtbWNjdXJyeVwtXCh3aGl0ZVwtaG91c2VcLXNwb2tlc3BlcnNvblwpOwor5aCx5ZGK5pyDID4gcHVibGljXC1sZWN0dXJlXC1cKHdpdGhcLWd1ZXN0XC1zcGVha2Vyc1wsXC1ldGNcKTsKK+WIqeS8r+abvCA+IFwoY29ubmVjdGljdXRcLXNlbmF0b3JcLWpvc2VwaFwtaVwuXClcLWxpZWJlcm1hbjsKK+m6peenkeijoSA+IFwobWlrZVwpXC1tY2N1cnJ5XC1cKHdoaXRlXC1ob3VzZVwtc3Bva2VzcGVyc29uXCk7CivnpZ7lpbPls7AgPiBuYW1lXC1vZlwtYVwtcGVha1wtYnlcLWNoYW5namlhbmdcLXRocmVlXC1nb3JnZXM7Civnmb3mm4nnh5UgPiBwYWlcLWhzaWFvXC15ZW5cLVwoZGF1Z2h0ZXJcLW9mXC1wYWlcLXBpbmdcLXBpbmdcKTsKK+mHkeaXpeaIkCA+IGtpbVwtaWxcLXN1bmdcLVwoZm9ybWVyXC1ub3J0aFwta29yZWFuXC1sZWFkZXJcKTsKK+WkqualteWKjSA+IGFcLWtpbmRcLW9mXC10cmFkaXRpb25hbFwtY2hpbmVzZVwtc3dvcmRcLXBsYXk7Civlj7jms5Xpg6ggPiBqdXN0aWNlXC1kZXBhcm1lbnRcLVwob2ZcLXRoZVwtdXNcLWdvdmVybm1lbnRcKTsKK+W6q+e0jeWNlyA+IFwoYW5kcmV3XClcLWN1bmFuYW5cLVwoYWxsZWdlZFwtc2VyaWFsXC1raWxsZXJcKTsKK+m7g+W7uuWNlyA+IGpvaG5cLWh1YW5nXC1cKGRlbW9jcmF0aWNcLXBhcnR5XC1mdW5kcmFpc2VyXCk7Civpu4Plsqnls7YgPiBodWFuZ3lhblwtaXNsYW5kXC1cKGluXC10aGVcLXNvdXRoXC1jaGluYVwtc2VhXCk7CivmqZ/pl5zloLEgPiBvZmZpY2lhbFwtXChnb3Zlcm5tZW50XC1vcGVyYXRlZFwpXC1uZXdzcGFwZXI7CivlhaXlrbjnjocgPiBwZXJjZW50YWdlXC1vZlwtY2hpbGRyZW5cLXdob1wtZW50ZXJcLXNjaG9vbDsKK+iMheiHuumFkiA+IG1hb3RhaVwtb3JcLW1haXRhaVwtXChjaGluZXNlXC1zdHJvbmdcLWRyaW5rXCk7CivnjovnvrLkuYsgPiBuYW1lXC1vZlwtYVwtcGVyc29uXCxcLWFcLWZhbW91c1wtY2FsbGlncmFwaGVyOwor6YKK6KeS56eRID4gbGVmdG92ZXJcLWJpdHNcLWFuZFwtcGllY2VzXC1cKG9mXC1pbmR1c3RyaWFsOwor6Zi/5piM5pePID4gdGhlXC1hY2hhbmdcLW5hdGlvbmFsaXR5XC1saXZpbmdcLWluXC15dW5uYW47CivkvanmtJvopb8gPiBcKG5hbmN5XClcLXBlbG9zaVwtXChtZW1iZXJcLW9mXC11c1wtY29uZ3Jlc3NcKTsKK+WQkOmtr+eVqiA+IHRoZVwtdHVyZmFuXC1iYXNpblwsXC1pblwteGluamlhbmdcLXByb3ZpbmNlOwor5Y2K6ISr55SiID4gcGFydGx5XC1yZWxlYXNlZFwtZnJvbVwtcHJvZHVjdGl2ZVwtbGFib3VyOwor57i95pu46KiYID4gZ2VuZXJhbFwtc2VjcmV0YXJ5XC1cKG9mXC1jb21tdW5pc3RcLXBhcnR5XCk7CivmsojlnIvmlL4gPiBjaGluZXNlXC1mb3JlaWduXC1taW5pc3RyeVwtc3Bva2VzcGVyc29uOwor56mG5qGC6IuxID4gbXVcLWd1aVwteWluZ1wtXChuYW1lXC1vZlwtYVwtd29tYW5cLXdhcnJpb3JcKTsKK+Wtq+Wls+WFkiA+IGdyYW5kZGF1Z2h0ZXJcLVwoZGF1Z2h0ZXJcLW9mXC1vbmUnJ3NcLXNvblwpOwor5bCa5oWV5p2wID4gamFtZXNcLXNhc3NlclwtXCh1c1wtYW1iYXNzYWRvclwtdG9cLWNoaW5hXCk7CivloZ7niL7ljZcgPiBcKGV1Z2VuZVwpXC1jZXJuYW5cLVwoYXBvbGxvXC0xN1wtYXN0cm9uYXV0XCk7CivlubTnlavlhZIgPiBuZXdcLXllYXJcLVwob3JcLXNwcmluZ1wtZmVzdGl2YWxcKVwtcGljdHVyZTsKK+mQtemjr+eilyA+IFwiaXJvblwtcmljZVwtYm93bFwiXC1cLVwtXC1zZWN1cmVcLWVtcGxveW1lbnQ7Civog6Hlv5fmmI4gPiBob1wtY2hpXC1taW5oXC1cKHZpZXRuYW1lc2VcLWxlYWRlclwsXC1jaXR5XCk7CivlvpDmgrLptLsgPiBuYW1lXC1vZlwtYVwtZmFtb3VzXC1wYWludGVyXCxcLXh1XC1iZWlob25nOwor6Iqx5pyo6JitID4gaHVhXC1tdVwtbGFuXC1cKG5hbWVcLW9mXC1hXC13b21hblwtd2FycmlvclwpOwor5omT5LiN6YGOID4gbm90XC10b1wtYmVcLWFibGVcLXRvXC1iZWF0XC1vclwtZGVmZWF0XC1zYlwuOwor55m85LqG6KiAID4gXChcInBhc3RcLXRlbnNlXCJcLW9mXC1cOueZvOiogFwpXC1zcG9rZVwtcHVibGljbHk7CivkuI3oh6rph48gPiBub3RcLXRha2VcLWFcLXByb3BlclwtbWVhc3VyZVwtb2ZcLW9uZXNlbGY7CivmioTlvozot68gPiB0b1wtb3V0ZmxhbmtcLWFuZFwtYXR0YWNrXC1mcm9tXC10aGVcLXJlYXI7Civnt6jlubTpq5QgPiBhbm5hbGlzdGljXC1zdHlsZVwtXChpblwtaGlzdG9yaW9ncmFwaHlcKTsKK+WutumEiembniA+ICcnaG9tZVwtdG93blwtY2hpY2tlbicnXC1cKGFcLXR5cGVcLW9mXC1kaXNoXCk7Civnq6DlrZ3lmrQgPiBqb2huXC1jaGFuZ1wtXCh0YWl3YW5cLWZvcmVpZ25cLW1pbmlzdGVyXCk7CivkvobkuI3lj4ogPiB0aGVyZScnc1wtbm90XC1lbm91Z2hcLXRpbWVcLVwodG9cLWRvXC1zdGhcLlwpOwor5q275LiN5LqGID4gcG9ydHVsYWNhXC1zdW5kaWFsXC1cKGFcLXR5cGVcLW9mXC1wbGFudFwpOwor6L+O5pil6IqxID4gd2ludGVyXC1qYXNtaW5lXCxcLWphc21pbnVtXC1udWRpZmxvcnVtOwor5Li75Lq657+BID4gbWFzdGVyXC1cKG9mXC1vbmUnJ3NcLW93blwtZGVzdGlueVwsXC1ldGNcLlwpOwor5ZOI5a+G55OcID4gaGFtaVwtbWVsb25cLVwoYVwtdmFyaWV0eVwtb2ZcLW11c2ttZWxvblwpOwor6LK/5piT6aGNID4gdm9sdW1lXC1vZlwtdHJhZGVcLVwoYmV0d2VlblwtY291bnRyaWVzXCk7CivnuL3li5Xlk6EgPiBnZW5lcmFsXC1tb2JpbGl6YXRpb25cLVwoZm9yXC13YXJcLFwtZXRjXCk7CivltKnpvo3ml48gPiB0aGVcLWJlbmdsb25nXC1cKHBlbmdsdW5nXClcLW5hdGlvbmFsaXR5Owor6Zy4546L6Z6tID4gYVwtcmF0dGxlXC1zdGlja1wtdXNlZFwtaW5cLWZvbGtcLWRhbmNpbmc7Civnmb3mrq3ooLYgPiB0aGVcLWxhcnZhXC1vZlwtc2lsa3dvcm1cLXdpdGhcLWJhdHJ5dGlzOwor5LiN5aSx54K6ID4gY2FuXC1zdGlsbFwtYmVcLWNvbnNpZGVyZWRcLVwodG9cLWJlXC5cLlwuXCk7CivmnIDmg6DlnIsgPiBtb3N0XC1mYXZvcmVkXC1uYXRpb25cLVwodHJhZGVcLXN0YXR1c1wpOwor5Z+66YeR5pyDID4gYVwtZm91bmRhdGlvblwtXChpZVwsXC1hblwtb3JnYW5pemF0aW9uXCk7CivmiZPpjK/kuoYgPiBcInlvdVwtaGF2ZVwtZGlhbGVkXC10aGVcLXdyb25nXC1udW1iZXJcIjsKK+eXheWMheWFkiA+IGFcLXBlcnNvblwtd2hvXC1pc1wtYWx3YXlzXC1mYWxsaW5nXC1pbGw7Civmi4nojqvmlq8gPiBcKHBoaWxpcHBpbmVcLXByZXNpZGVudFwtZmlkZWxcKVwtcmFtb3M7Civog6Hlv5flvLcgPiBqYXNvblwtaHVcLVwodGFpd2FuXC1mb3JlaWduXC1taW5pc3RlclwpOwor5bmr5YCS5b+ZID4gYmVcLW1vcmVcLW9mXC1hXC1oaW5kcmFuY2VcLXRoYW5cLWFcLWhlbHA7Civkv7HmqILpg6ggPiBjbHViXC1cKGllXCxcLWFcLWdyb3VwXC1vclwtb3JnYW5pemF0aW9uXCk7Civli57li5Xnr4AgPiBpbnRlcm5hdGlvbmFsXC1sYWJvclwtZGF5XC1cKG1heVwtZGF5XCk7CivmirHnspfohb8gPiBsYXRjaFwtb25cLXRvXC10aGVcLXJpY2hcLWFuZFwtcG93ZXJmdWw7Civph5HmraPml6UgPiBraW1cLWpvbmdcLWlsXC1cKG5vcnRoXC1rb3JlYW5cLWxlYWRlclwpOwor5LiN5pG46aCtID4gbm90XC1hY3F1YWludGVkXC13aXRoXC10aGVcLXNpdHVhdGlvbjsKK+mtj+S6rOeUnyA+IHdlaVwtamluZ3NoZW5nXC1cKGNoaW5lc2VcLWRpc3NpZGVudFwpOwor5ZCD5LiN5LiKID4gYmVcLXVuYWJsZVwtdG9cLWdldFwtc29tZXRoaW5nXC10b1wtZWF0Owor5qqi5a+f5a6YID4gdGhlXC1wcm9zZWN1dGlvblwtXChpblwtYVwtY291cnRcLWNhc2VcKTsKK+Weg+Wcvui7iiA+IGdhcmJhZ2VcLXRydWNrXC1cKG9yXC1vdGhlclwtdmVoaWNsZVwpOwor5biD5rOV576FID4gYnVmZmFsb1wtXChjaXR5XC1pblwtbmV3XC15b3JrXC1zdGF0ZVwpOwor5YWr5pyD56m0ID4gdGhlXC1laWdodFwtc3RyYXRlZ2ljXC1uZXJ2ZVwtcG9pbnRzOwor6ZaL5pmu5pWmID4gY2FwZVwtdG93blwtXChjaXR5XC1pblwtc291dGhcLWFmcmljYVwpOwor6KaL5LiN5b6XID4gbWF5XC1ub3RcLWJlXC1zZWVuXC1ieVwtb3JcLWV4cG9zZWRcLXRvOwor5Ym16L6m5Lq6ID4gZm91bmRlclwtXChvZlwtYW5cLWluc3RpdHV0aW9uXCxcLWV0Y1wpOwor6YC85L6b5L+hID4gb2J0YWluXC1jb25mZXNzaW9uc1wtYnlcLWNvbXB1bHNpb247CivosqDosqzkurogPiBwZXJzb25cLWluXC1jaGFyZ2VcLVwob2ZcLXNvbWV0aGluZ1wpOwor5Y2B5LiJ57aTID4gdGhlXC10aGlydGVlblwtY29uZnVjaWFuXC1jbGFzc2ljczsKK+eXheifsuWusyA+IHBsYW50XC1kaXNlYXNlc1wtYW5kXC1pbnNlY3RcLXBlc3RzOwor5ZCD5LiN5pyNID4gbm90XC1iZVwtYWNjdXN0b21lZFwtdG9cLWVhdGluZ1wtc3RoOwor6aas5bC85ouJID4gbWFuaWxhXC1cKGNhcGl0YWxcLW9mXC1waGlsaXBwaW5lc1wpOwor5oeJ6Kmy6KqqID4gaXRcLXNob3VsZFwtYmVcLW1lbnRpb25lZFwtdGhhdFwtXC5cLlwuOwor5LiN5b6X5LiNID4gaGF2ZVwtbm9cLWNob2ljZVwtb3JcLW9wdGlvblwtYnV0XC10bzsKK+WMl+S8kOi7jSA+IHRoZVwtbm9ydGhlcm5cLWV4cGVkaXRpb25hcnlcLWFybXk7Civlj6/np7vmpI0gPiBwb3J0YWJsZVwtXChwcm9ncmFtbWluZ1wtbGFuZ3VhZ2VcKTsKK+e2k+a/n+WtuCA+IGVjb25vbWljc1wtXChhc1wtYVwtZmllbGRcLW9mXC1zdHVkeVwpOwor5oSb6Z2i5a2QID4gYmVcLWNvbmNlcm5lZFwtYWJvdXRcLWZhY2VcLXNhdmluZzsKK+WiqOeIvue8vSA+IG1lbGJvdXJuZVwtXChhblwtYXVzdHJhbGlhblwtY2l0eVwpOwor57Si5p2w57SNID4gc29qb3VybmVyXC1cKG1hcnRpYW5cLWxhbmRcLXJvdmVyXCk7Civoq4flvpfkvoYgPiBhYmxlXC10b1wtdGFsa1wtdG9cLW9yXC1nZXRcLW9uXC13aXRoOwor54+t5Li75Lu7ID4gYVwtdGVhY2hlclwtaW5cLWNoYXJnZVwtb2ZcLWFcLWNsYXNzOwor5bCO6Iiq5ZOhID4gbmF2aWdhdG9yXC1cKG9uXC1hXC1wbGFuZVwtb3JcLWJvYXRcKTsKK+ecvuitsOmZoiA+IGhvdXNlXC1vZlwtcmVwcmVzZW50YXRpdmVzXC1cKHVzYVwpOwor55W25LqL5Lq6ID4gcGVyc29uc1wtaW52b2x2ZWRcLW9yXC1pbXBsaWNhdGVkOwor57SF57ag54eIID4gXChyZWRcLWFuZFwtZ3JlZW5cKVwtdHJhZmZpY1wtbGlnaHQ7Civph43opIfnr4AgPiByZXBlYXRlZFwtc2VnbWVudFwtXChuZXR3b3JraW5nXCk7CivlhbXlt6Xlu6AgPiBtdW5pdGlvbnNcLW9yXC1vcmRuYW5jZVwtZmFjdG9yeTsKK+WNiui6q+WDjyA+IGhhbGZcLWxlbmd0aFwtcGhvdG9cLW9yXC1wb3J0cmFpdDsKK+eZvOmbu+mHjyA+IFwoZ2VuZXJhdGVkXClcLWVsZWN0cmljYWxcLWVuZXJneTsKK+S/neWuieaXjyA+IHRoZVwtYmFvYW5cLVwocGFvYW5cKVwtbmF0aW9uYWxpdHk7CivmsZ/mvqTmsJEgPiBqaWFuZ1wtemVtaW5cLVwoY2hpbmVzZVwtcHJlbWllclwpOwor5bm05aSc6aOvID4gbmV3XC15ZWFyJydzXC1ldmVcLWZhbWlseVwtZGlubmVyOwor5p2O55m76LydID4gbGVlXC10ZW5nXC1odWlcLVwodGFpd2FuXC1sZWFkZXJcKTsKK+Wkp+iHqueEtiA+IG5hdHVyZVwtXChhc1wtaW5cLW1vdGhlclwtbmF0dXJlXCk7Civnq4vmlrnnsbMgPiBjdWJpY1wtbWV0ZXJcLVwodW5pdFwtb2ZcLXZvbHVtZVwpOwor5ZCD5LiN5raIID4gYmVcLXVuYWJsZVwtdG9cLXN0YW5kXC1cKGV4ZXJ0aW9uOwor5oqV56Wo56uZID4gcG9sbGluZ1wtc3RhdGlvblwtXChmb3JcLWFcLXZvdGVcKTsKK+W+l+elqOeOhyA+IHBlcmNlbnRhZ2VcLW9mXC12b3Rlc1wtb2J0YWluZWQ7CivlkIPkuI3kvY8gPiBiZVwtdW5hYmxlXC10b1wtYmVhclwtb3JcLXN1cHBvcnQ7Civoh6rmsrvljYAgPiBhdXRvbm9tb3VzXC1yZWdpb25cLVwoaW5cLWNoaW5hXCk7CivlvLXntJTlpoIgPiBcKGFtZXJpY2FuXC1hdXRob3JcKVwtaXJpc1wtY2hhbmc7Civnj63li5nmnIMgPiBhXC1yb3V0aW5lXC1tZWV0aW5nXC1vZlwtYVwtc3F1YWQ7CivmlrDlvrfoo6EgPiBuZXdcLWRlbGhpXC1cKGNhcGl0YWxcLW9mXC1pbmRpYVwpOwor5Y+N5bCN6buoID4gb3Bwb3NpdGlvblwtXChwb2xpdGljYWxcKVwtcGFydHk7CivoqqrmmI7mm7ggPiBzeW5vcHNpc1wtXChvZlwtYVwtcGxheVwtb3JcLWZpbG1cKTsKK+WPm+S6gue9qiA+IHRoZVwtY3JpbWVcLW9mXC1hcm1lZFwtcmViZWxsaW9uOwor5beu5b6X5aSaID4gZmFsbFwtc2hvcnRcLWJ5XC1hXC1sYXJnZVwtYW1vdW50Owor5Y+w54Gj6KmxID4gdGFpd2FuZXNlXC1jaGluZXNlXC1cKGxhbmd1YWdlXCk7CivokYnliKnmrL0gPiBcKHJ1c3NpYW5cLXByZXNpZGVudFwpXC15ZWx0c2luOwor6buD5rWm5rGfID4gaHVhbmdwdVwtcml2ZXJcLVwoaW5cLXNoYW5naGFpXCk7Civog4zljIXoorEgPiBoYXZlXC1hXC13ZWlnaHRcLW9uXC1vbmUnJ3NcLW1pbmQ7CivloLHmiLblj6MgPiBhcHBseVwtZm9yXC1hXC1yZXNpZGVudFwtcGVybWl0Owor5ZyL6Zqb57SaID4gXChhdFwtYW5cKVwtaW50ZXJuYXRpb25hbFwtbGV2ZWw7CivlkIPkuI3kvoYgPiBub3RcLWJlXC1mb25kXC1vZlwtY2VydGFpblwtZm9vZDsKK+aTmuWgseWwjiA+IGFjY29yZGluZ1wtdG9cLVwobmV3c1wpXC1yZXBvcnRzOwor55eF5q+S5a24ID4gdmlyb2xvZ3lcLVwoc3R1ZHlcLW9mXC12aXJ1c2VzXCk7CivogIzkuI3pnIAgPiB3aXRob3V0XC1uZWVkaW5nXC1cKHRvXC1zb1wtc3RoXCk7CivkuqTmj5vmqZ8gPiBzd2l0Y2hcLVwodGVsZWNvbW11bmljYXRpb25zXCk7CivlpKfpmbjoqbEgPiBtYWlubGFuZFwtY2hpbmVzZVwtXChsYW5ndWFnZVwpOwor5Lqk5o+b5ZmoID4gXCh0ZWxlY29tXC1vclwtbmV0d29ya1wpXC1zd2l0Y2g7CivpgJroqIrnpL4gPiBhXC1uZXdzXC1zZXJ2aWNlXC1cKGVnXCxcLXhpbmh1YVwpOwor5oSb5aW96ICFID4gbG92ZXJcLVwob2ZcLWFydFwsXC1zcG9ydHNcLFwtZXRjXCk7Civlhazlronpg6ggPiBtaW5pc3RyeVwtb2ZcLXB1YmxpY1wtc2VjdXJpdHk7CivmirHkuI3lubMgPiBiZVwtb3V0cmFnZWRcLWJ5XC1hblwtaW5qdXN0aWNlOwor55S35a2Q5ryiID4gbWFuXC1cKGlcLmVcLlwtbWFubHlcLFwtbWFzY3VsaW5lXCk7Civlt7TlhZLni5cgPiBwZWtpbmdlc2VcLVwoYVwtYnJlZWRcLW9mXC1kb2dcKTsKK+WtmOi7iuiZlSA+IHBhcmtpbmdcLWxvdFwtXChmb3JcLWJpY3ljbGVzXCk7CivpvLvniZvlhZIgPiBoYXJkZW5lZFwtbXVjdXNcLWluXC1ub3N0cmlsczsKK+ahg+iKsemBiyA+IGx1Y2tcLXdpdGhcLXRoZVwtb3Bwb3NpdGVcLXNleDsKK+W8l+WhnuWlhyA+IHZlcnNhY2VcLVwoZmFzaGlvblwtZGVzaWduZXJcKTsKK+aZrumAmuipsSA+IG1hbmRhcmluXC1cKGNvbW1vblwtbGFuZ3VhZ2VcKTsKK+W5vuW5tOS+hiA+IGZvclwtdGhlXC1wYXN0XC1zZXZlcmFsXC15ZWFyczsKK+mgpOWSjOWckiA+IHN1bW1lclwtcGFsYWNlXC1cKGluXC1iZWlqaW5nXCk7CivppqzkvobkurogPiBtYWxheXNpYW5cLXBlcnNvblwtb3JcLXBlb3BsZTsKK+W6leeJueW+iyA+IGRldHJvaXRcLVwoYVwtY2l0eVwtaW5cLXRoZVwtdXNcKTsKK+aDheazgeS4iyA+IHVuZGVyXC1cKHRoaXNcKVwtY2lyY3Vtc3RhbmNlczsKK+a6q+WTpeiPryA+IHZhbmNvdXZlclwtXChjaXR5XC1pblwtY2FuYWRhXCk7Civnmb3poK3nv4EgPiByb290XC1vZlwtY2hpbmVzZVwtcHVsc2F0aWxsYTsKK+S4reaWh+eJiCA+IGNoaW5lc2VcLVwobGFuZ3VhZ2VcKVwtdmVyc2lvbjsKK+mrmOS4reeUnyA+IHNlbmlvclwtaGlnaFwtc2Nob29sXC1zdHVkZW50Owor5p2/576955CDID4gYmF0dGxlZG9yZVwtYW5kXC1zaHV0dGxlY29jazsKK+WPg+WFqemZoiA+IGJvdGhcLWhvdXNlc1wtb2ZcLXVzXC1jb25ncmVzczsKK+eZn+ieuueXpyA+IGNob2xlcmFcLVwod2l0aFwtZGVoeWRyYXRpb25cKTsKK+mAj+mAmuaApyA+IHRyYW5zcGFyZW5jeVwtXChuZXR3b3JraW5nXCk7Civnh5/mpa3poY0gPiBzdW1cLW9yXC12b2x1bWVcLW9mXC1idXNpbmVzczsKK+efruWAi+WFkiA+IGFcLXBlcnNvblwtb2ZcLXNob3J0XC1zdGF0dXJlOwor5qC45aSn5ZyLID4gYVwtbnVjbGVhclwtcG93ZXJcLVwoY291bnRyeVwpOwor5biM6IeY6KqeID4gXChtb2Rlcm5cKVwtZ3JlZWtcLVwobGFuZ3VhZ2VcKTsKK+aZgumWk+WFpyA+IHdpdGhpblwtXChhXC1wZXJpb2RcLW9mXC10aW1lXCk7CivkuIvlt6XlpKsgPiB0b1wtcHV0XC1pblwtdGltZVwtYW5kXC1lbmVyZ3k7Civml6XmnKzkurogPiBqYXBhbmVzZVwtcGVyc29uXC1vclwtcGVvcGxlOwor54Sh6ZmQ5pyfID4gdW5saW1pdGVkXC1cKHRpbWVcKVwtZHVyYXRpb247CivluJXomK3ljaEgPiBwYWxhbmthXC1cKGFcLXBlcnNvbmFsXC1uYW1lXCk7CivkurrmsJHluaMgPiBjaGluZXNlXC11bml0XC1vZlwtY3VycmVuY3k7CivmtYHmsJPnvaogPiB0aGVcLWNyaW1lXC1vZlwtaG9vbGlnYW5pc207CivpjITpn7PmqZ8gPiBcKHRhcGVcKVwtcmVjb3JkaW5nXC1tYWNoaW5lOwor5Luj5LmL5LulID4gXChoYXNcLWJlZW5cKVwtcmVwbGFjZWRcLXdpdGg7CivorormiLLms5UgPiBwZXJmb3JtXC1jb25qdXJpbmdcLXRyaWNrczsKK+eZvOihjOmhjSA+IFwocGVyaW9kaWNhbFwpXC1jaXJjdWxhdGlvbjsKK+WNgeS4ieaXpSA+IHRoaXJ0aWV0aFwtZGF5XC1vZlwtYVwtbW9udGg7CivkuIvljYrouqsgPiBsb3dlclwtaGFsZlwtb2ZcLW9uZScnc1wtYm9keTsKK+WNsOatkOiqniA+IGluZG9cLWV1cm9wZWFuXC1cKGxhbmd1YWdlXCk7CivlhafmlL/pg6ggPiBtaW5pc3RyeVwtb2ZcLXRoZVwtaW50ZXJpb3I7CivljbDmrZDmlocgPiBpbmRvXC1ldXJvcGVhblwtXChsYW5ndWFnZVwpOwor54Sh6buo5rS+ID4gcG9saXRpY2FsbHlcLXVuYWZmaWxpYXRlZDsKK+iuiumbu+ermSA+IFwodHJhbnNmb3JtZXJcKVwtc3Vic3RhdGlvbjsKK+acqOS5g+S8iiA+IG11bW15XC1cKHByZXNlcnZlZFwtY29ycHNlXCk7CivlpJbkuqTpg6ggPiBmb3JlaWduXC1hZmZhaXJzXC1taW5pc3RyeTsKK+mBsua1qeeUsCA+IGNoaW5lc2VcLWRlZmVuc2VcLW1pbmlzdGVyOwor5YyX5rqr5bi2ID4gdGhlXC1ub3J0aFwtdGVtcGVyYXRlXC16b25lOwor5omT6Zu76KmxID4gdG9cLW1ha2VcLWFcLXRlbGVwaG9uZVwtY2FsbDsKK+atoueXm+azlSA+IG1ldGhvZFwtb2ZcLXJlbGlldmluZ1wtcGFpbjsKK+WMl+WNiueQgyA+IHRoZVwtbm9ydGhlcm5cLWhlbWlzcGhlcmU7Civpm5nntZ7nt5ogPiB1bnNoaWVsZGVkXC10d2lzdGVkXC1wYWl0Owor5YyF5om/5Yi2ID4gcmVzcG9uc2libGVcLWNyZXdcLXN5c3RlbTsKK+aSreaUvuapnyA+IHBsYXllclwtXChlXC5nXC5cLWNkXC1wbGF5ZXJcKTsKK+aTmue1seioiCA+IGFjY29yZGluZ1wtdG9cLXN0YXRpc3RpY3M7CivnlZnlrbjnlJ8gPiBzdHVkZW50XC1zdHVkeWluZ1wtYWJyb2FkOwor5aSa5bm05L6GID4gZm9yXC10aGVcLXBhc3RcLW1hbnlcLXllYXJzOwor5Lit56eL56+AID4gdGhlXC1taWRcLWF1dHVtblwtZmVzdGl2YWw7Civppqzot6/lj6MgPiBpbnRlcnNlY3Rpb25cLVwob2ZcLXJvYWRzXCk7CivmiLTntq3mlq8gPiBkYXZpc1wtXChlbmdsaXNoXC1zdXJuYW1lXCk7CivntIXmqJPlpKIgPiBhXC1kcmVhbVwtb2ZcLXJlZFwtbWFuc2lvbnM7CivpgY7kuI3ljrsgPiBtYWtlXC1saWZlXC1kaWZmaWN1bHRcLWZvcjsKK+aDheWgseiZlSA+IHNvdXJjZVwtXChvZlwtaW5mb3JtYXRpb25cKTsKK+iFkOaVl+e9qiA+IHRoZVwtY3JpbWVcLW9mXC1jb3JydXB0aW9uOwor55m96JuH5YKzID4gdGFsZVwtb2ZcLXRoZVwtd2hpdGVcLXNuYWtlOwor5Y2K5oiQ5ZOBID4gc2VtaVwtbWFudWZhY3R1cmVkXC1nb29kczsKK+WllOmgreWFkiA+IHNvbWV0aGluZ1wtdG9cLXN0cml2ZVwtZm9yOwor5Lit6L2J56uZID4gaHViXC1cKG5ldHdvcmtcLWVxdWlwbWVudFwpOwor6aaZ5riv5Lq6ID4gaG9uZ1wta29uZ1wtcGVyc29uXHxwZW9wbGU7CivmhZXpgZPlj4sgPiByZWxpZ2lvdXNcLWludmVzdGlnYXRvcjsKK+WJneaOoeavlCA+IHN0cmlwcGluZ1wtdG9cLW9yZVwtcmF0aW87Civnm67nmoTlnLAgPiBkZXN0aW5hdGlvblwtXChsb2NhdGlvblwpOwor5ZyL5YuZ6ZmiID4gc3RhdGVcLWRlcGFydG1lbnRcLVwodXNhXCk7CivljYHkupTlhIQgPiBvbmVcLWFuZFwtYVwtaGFsZlwtYmlsbGlvbjsKK+e0heeHkuiCiSA+IHJlZFwtY29va2VkXC1cKHBvcmtcKVwtbWVhdDsKK+WFrOWuieWxgCA+IHB1YmxpY1wtc2VjdXJpdHlcLWJ1cmVhdTsKK+eZvOeXheeOhyA+IGluY2lkZW5jZVwtb2ZcLWFcLWRpc2Vhc2U7CivnlpHllY/lj6UgPiBpbnRlcnJvZ2F0aXZlXC1zZW50YW5jZTsKK+atpOS4gOaZgiA+IHRoYXRcLXdhc1wtb25lXC1zaXR1YXRpb247CivkuI3lpb3mg7kgPiBub3RcLXRvXC1iZVwtdHJpZmxlZFwtd2l0aDsKK+S4jeW+l+W3siA+IGFjdFwtYWdhaW5zdFwtb25lJydzXC13aWxsOwor5LiK5Y2K5bm0ID4gZmlyc3RcLWhhbGZcLVwob2ZcLWFcLXllYXJcKTsKK+S4jeimgeiHiSA+IGhhdmVcLW5vXC1zZW5zZVwtb2ZcLXNoYW1lOwor6IOM5Zyw6aKoID4gYmVoaW5kXC1zb21lYm9keScnc1wtYmFjazsKK+i/keW5tOS+hiA+IGZvclwtdGhlXC1wYXN0XC1mZXdcLXllYXJzOwor5YW26Ieq6LqrID4gb25lJydzXC1vd25cLVwocmVzcGVjdGl2ZVwpOwor54Gr54Sw5bGxID4gdGhlXC1tb3VudGFpblwtb2ZcLWZsYW1lczsKK+W3peS9nOermSA+IFwoY29tcHV0ZXJcKVwtd29ya3N0YXRpb247CivljbDmrZDkurogPiBpbmRvXC1ldXJvcGVhblwtXChwZXJzb25cKTsKK+WdpuWFi+i7iiA+IHRhbmtcLVwoYXJtb3JlZFwtdmVoaWNsZVwpOwor5LiN5YOP5qijID4gaW5cLW5vXC1zaGFwZVwtdG9cLWJlXC1zZWVuOwor6K6K5YiG5rOVID4gY2FsY3VsdXNcLW9mXC12YXJpYXRpb25zOwor6KW/6YGK6KiYID4gcGlsZ3JpbWFnZVwtdG9cLXRoZVwtd2VzdDsKK+eVoualreeUnyA+IGdyYWR1YXRlXC1cKG9mXC1hXC1zY2hvb2xcKTsKK+iDjOm7kemNiyA+IHRvXC1iZVwtbWFkZVwtYVwtc2NhcGVnb2F0Owor6Z2I5pWP5bqmID4gXChsZXZlbFwtb2ZcKVwtc2Vuc2l0aXZpdHk7CivlvbzkuIDmmYIgPiB0aGF0XC13YXNcLW9uZVwtc2l0dWF0aW9uOwor6Luf56Gs5Lu2ID4gc29mdHdhcmVcLWFuZFwtaGFyZHdhcmU7CivnhrHploDosqggPiBnb29kc1wtaW5cLWdyZWF0XC1kZW1hbmQ7CivpgJrkv6Hph48gPiBjb21tdW5pY2F0aW9uc1wtdm9sdW1lOwor56Wd6LOA6KmeID4gY29uZ3JhdHVsYXRvcnlcLXNwZWVjaDsKK+W5vuWNgeW5tCA+IHNldmVyYWxcLXRlbnNcLW9mXC15ZWFyczsKK+avlOaWueiqqiA+IHRvXC1tYWtlXC1hblwtYW5hbG9neVwuXC5cLjsKK+m6peiKveezliA+IG1hbHRvc2VcLVwoc3dlZXRcLXN5cnVwXCk7Civnvo7oga/npL4gPiBhc3NvY2lhdGVkXC1wcmVzc1wtXChhcFwpOwor5o6o6Jam5L+hID4gcmVjb21tZW5kYXRpb25cLWxldHRlcjsKK+W5vuWkqeS+hiA+IGZvclwtdGhlXC1wYXN0XC1mZXdcLWRheXM7CivmipXkuobnpaggPiBwYXN0XC10ZW5zZVwtb2ZcLXRvXC12b3RlOwor6IKv5bC86L+qID4ga2VubmVkeVwtXChwcm9wZXJcLW5hbWVcKTsKK+S/neitt+WNgCA+IGNvbnNlcnZhdGlvblwtZGlzdHJpY3Q7Civlpaflvrfos70gPiB0aGVcLW9keXNzZXlcLFwtYnlcLWhvbWVyOwor6LaK5Y2X6KqeID4gdmlldG5hbWVzZVwtXChsYW5ndWFnZVwpOwor5Zub5bm05YmNID4gZm91clwteWVhcnNcLXByZXZpb3VzbHk7Civoo73pgKDllYYgPiBtYW51ZmFjdHVyaW5nXC1jb21wYW55Owor5Y+N6Z2p5ZG9ID4gY291bnRlclwtcmV2b2x1dGlvbmFyeTsKK+iAgeWFqeWPoyA+IGFuXC1vbGRcLW1hcnJpZWRcLWNvdXBsZTsKK+aLnOaKiuWtkCA+IGJlY29tZVwtc3dvcm5cLWJyb3RoZXJzOwor5YyX5a+S5bi2ID4gdGhlXC1ub3J0aFwtZnJpZ2lkXC16b25lOwor5YWr6Lev6LuNID4gdGhlXC1laWdodGhcLXJvdXRlXC1hcm15Owor5Y2X5YyX5qW1ID4gc291dGhcLWFuZFwtbm9ydGhcLXBvbGVzOwor6JGj5LqL6ZW3ID4gY2hhaXJtYW5cLW9mXC10aGVcLWJvYXJkOwor5LiN6KGM5LqGID4gb25cLXRoZVwtcG9pbnRcLW9mXC1kZWF0aDsKK+WNoeilv+WwvCA+IGNhc3NpbmlcLVwocHJvcGVyXC1uYW1lXCk7CivlhYnno4Hnop8gPiBtYWduZXRvXC1vcHRpY2FsXC1kaXNrOwor5Y2a6Ka95pyDID4gXChpbnRlcm5hdGlvbmFsXClcLWZhaXI7CivkuIDoiKzmgKcgPiBcKGluXClcLWdlbmVyYWxcLVwodGVybXNcKTsKK+mAi+mAg+iXqiA+IHJlZnVnZVwtZm9yXC1mdWdpdGl2ZXM7Civnmb3nnLznj6AgPiB0aGVcLXdoaXRlXC1vZlwtdGhlXC1leWU7CivmjZXon7LokYkgPiBpbnNlY3RcLWNhdGNoaW5nXC1sZWFmOwor5LiN6ZuF6KeAID4gb2ZmZW5zaXZlXC10b1wtdGhlXC1leWU7CivpmbPov7Dlj6UgPiBkZWNsYXJhdGl2ZVwtc2VudGVuY2U7CivpgJnlgIvmnIggPiB0aGlzXC1cKGN1cnJlbnRcKVwtbW9udGg7CivkuIDmuIXml6kgPiBlYXJseVwtaW5cLXRoZVwtbW9ybmluZzsKK+WAjemgu+WZqCA+IGZyZXF1ZW5jeVwtbXVsdGlwbGllcjsKK+mgmOWwjuasiiA+IGxlYWRlcnNoaXBcLWF1dGhvcml0eTsKK+e0gOW/teaXpSA+IGRheVwtb2ZcLWNvbW1lbW9yYXRpb247Civnmb3mo4nntJkgPiBzdGVuY2lsXC10aXNzdWVcLXBhcGVyOwor5oyq56qp5YWSID4gdG9cLW1vdmVcLVwodG9cLWFcLWhvdXNlXCk7CivlvrflnIvkurogPiBnZXJtYW5cLXBlcnNvblx8cGVvcGxlOwor5aSn5riF5pepID4gZWFybHlcLWluXC10aGVcLW1vcm5pbmc7Civnmb7kuovpgJogPiBrbm93bGVkZ2VhYmxlXC1wZXJzb247CivkuI3mrbvlv4MgPiB1bndpbGxpbmdcLXRvXC1naXZlXC11cDsKK+ekpuazieawtCA+IG1pbmVyYWxcLXNwcmluZ1wtd2F0ZXI7CivlkIPkuI3kuIsgPiBub3RcLWZlZWxcLWxpa2VcLWVhdGluZzsKK+iQrOe2ree2siA+IHdvcmxkXC13aWRlXC13ZWJcLVwod3d3XCk7Civlr6bpq5TlsaQgPiBwaHlzaWNhbFwtbGF5ZXJcLVwob3NpXCk7Civnj77pmo7mrrUgPiBhdFwtdGhlXC1wcmVzZW50XC1zdGFnZTsKK+WPm+Wci+e9qiA+IHRoZVwtY3JpbWVcLW9mXC10cmVhc29uOwor6Yym5qiZ6LO9ID4gY2hhbXBpb25zaGlwXC1jb250ZXN0Owor56u254it5YqbID4gY29tcGV0aXRpdmVcLXN0cmVuZ3RoOwor6YGL5YuV5pyDID4gYVwtc3BvcnRzXC1jb21wZXRpdGlvbjsKK+i3kem+jeWllyA+IHRvXC1wbGF5XC1hXC1zbWFsbFwtcm9sZTsKK+W+t+mbt+eIviA+IFwoanVuZVwtdGV1ZmVsXClcLWRyZXllcjsKK+iyoeaUv+mDqCA+IG1pbmlzdHJ5XC1vZlwtZmluYW5jZTsKK+W7o+WRiuWVhiA+IGFkdmVydGlzaW5nXC1jb21wYW55Owor5oWw5a6J5ammID4gY29tZm9ydFwtd29tYW5cfHdvbWVuOwor5oqY5bCE546HID4gaW5kZXhcLW9mXC1yZWZyYWN0aW9uOwor5bm05Luj5YidID4gYmVnaW5uaW5nXC1vZlwtYW5cLWFnZTsKK+mYsuempuaApyA+IGRlZmVuc2l2ZVwtXCh3ZWFwb25zXCk7CivmiZPmqavngq4gPiBzcGVha1wtdW53YXJyYW50ZWRseTsKK+eZvOiogOasiiA+IHRoZVwtcmlnaHRcLW9mXC1zcGVlY2g7CivlubTkuYvkuYUgPiBwZXJpb2RcLW9mXC1cLlwuXC5cLXllYXJzOwor5LiN5Lit5oSPID4gbm90XC10b1wtb25lJydzXC1saWtpbmc7Civnmb7liIbliLYgPiBodW5kcmVkXC1tYXJrXC1zeXN0ZW07CivliIbmnpDlrrYgPiBcKHBvbGl0aWNhbFwpXC1hbmFseXN0Owor56uL5rOV5pyDID4gbGVnaXNsYXRpdmVcLWNvdW5jaWw7CivlvJXlipvloLQgPiBncmF2aXRhdGlvbmFsXC1maWVsZDsKK+a2iOiAl+mHjyA+IHJhdGVcLW9mXC1jb25zdW1wdGlvbjsKK+aguOmbu+ermSA+IG51Y2xlYXJcLXBvd2VyXC1wbGFudDsKK+ihqOmdouWMliA+IGNvbWVcLXRvXC10aGVcLXN1cmZhY2U7Civpm7voqbHmqZ8gPiB0ZWxlcGhvbmVcLWVxdWlwbWVudDsKK+e4vee1seW6nCA+IHByZXNpZGVudGlhbFwtcGFsYWNlOwor5qmL5o6l5ZmoID4gYnJpZGdlXC1cKG5ldHdvcmtpbmdcKTsKK+mmrOS+huaWhyA+IG1hbGFzaWFuXC1cKGxhbmd1YWdlXCk7CivkuI3lvpfkuoYgPiBkZXNwZXJhdGVseVwtc2VyaW91czsKK+adv+aigeapiyA+IHBsYXRlXC1naXJkZXJcLWJyaWRnZTsKK+agvei3n+mgrSA+IHRvXC1zdWZmZXJcLWFcLXNldGJhY2s7CivmoLjlt6XnqIsgPiBudWNsZWFyXC1lbmdpbmVlcmluZzsKK+WuieeQhuacgyA+IHVuXC1zZWN1cml0eVwtY291bmNpbDsKK+aTuumWgOmdoiA+IGtlZXBcLXVwXC1hcHBlYXJhbmNlczsKK+i3r+mAj+ekviA+IHJldXRlcnNcLW5ld3NcLWFnZW5jeTsKK+enkeWtuOmZoiA+IGFjYWRlbXlcLW9mXC1zY2llbmNlczsKK+atpemAsuWItiA+IHN0ZXBcLWJ5XC1zdGVwXC1zeXN0ZW07CivliY3omIfoga8gPiBmb3JtZXJcLXNvdmlldFwtdW5pb247CivkuI3lnKjmhI8gPiBwYXlcLW5vXC1hdHRlbnRpb25cLXRvOwor5aSW5a2r5aWzID4gZGF1Z2h0ZXInJ3NcLWRhdWdodGVyOwor5Yaw6YaL6YW4ID4gZ2xhY2lhbFwtYWNldGljXC1hY2lkOwor5raI54KO6JelID4gYW50aWJpb3RpY1wtbWVkaWNpbmU7Civlp5Tlk6HplbcgPiBoZWFkXC1vZlwtYVwtY29tbWl0dGVlOwor5oOF5aCx5bGAID4gaW50ZWxsaWdlbmNlXC1hZ2VuY3k7CivljIXouqvlt6UgPiBpbmRlbnR1cmVkXC1sYWJvdXJlcjsKK+axuuitsOahiCA+IFwocGFzc1wtYVwpXC1yZXNvbHV0aW9uOwor5YyX5Lqs5Lq6ID4gcGVyc29uXC1mcm9tXC1iZWlqaW5nOwor6LKg6LKs5Lu7ID4gcmVzcG9uc2liaWxpdHlcLWZvcjsKK+S4reWxseijnSA+IGNoaW5lc2VcLXR1bmljXC1zdWl0Owor57es55S46KqeID4gYnVybWVzZVwtXChsYW5ndWFnZVwpOwor5pS/5rK754qvID4gcG9saXRpY2FsXC1wcmlzb25lcjsKK+W5tOS7peS+hiA+IHNpbmNlXC10aGVcLXllYXJcLVwuXC5cLjsKK+aWsOiPr+ekviA+IHhpbmh1YVwtbmV3c1wtYWdlbmN5Owor5LiN5Lit55SoID4gdW5maXRcLWZvclwtYW55dGhpbmc7CivpgLLkuIDmraUgPiBcKG9uZVwtc3RlcFwpXC1mdXJ0aGVyOwor5o+Q5L6b5ZWGID4gcHJvdmlkZXJcLVwoY29tcGFueVwpOwor5Y6f6JiH6IGvID4gZm9tZXJcLXNvdmlldFwtdW5pb247CivlpKnlronploAgPiB0aWFuYW5tZW5cLVwoc3F1YXJlXCk7CivkuI3lj5fnkIYgPiByZWplY3RcLWFcLWNvbXBsYWludDsKK+eZvOmBlOWciyA+IGRldmVsb3BpbmdcLWNvdW50cnk7Civot5HorabloLEgPiB0b1wtcnVuXC1mb3JcLXNoZWx0ZXI7Civnmb3plovmsLQgPiBwbGFpblwtYm9pbGVkXC13YXRlcjsKK+aLm+W+heacgyA+IFwocHJlc3NcKVwtY29uZmVyZW5jZTsKK+aHt+S/hOaYjiA+IHd5b21pbmdcLVwodXNcLXN0YXRlXCk7CivljaHmi4nlpYcgPiBrYXJhY2hpXC1cKHBha2lzdGFuXCk7CivljYropo/nrqEgPiBzZW1pY2lyY3VsYXJcLWNhbmFsOwor6aas5L6G6KqeID4gbWFsYXlzaWFuXC1sYW5ndWFnZTsKK+avlOS4jeS4iiA+IGNhbicndFwtY29tcGFyZVwtd2l0aDsKK+Wci+mYsumDqCA+IGRlZmVuc2VcLWRlcGFydG1lbnQ7CivotpXkuI3kuIogPiBjYW4nJ3RcLWtlZXBcLXVwXC13aXRoOwor5ou/5Li75oSPID4gdG9cLW1ha2VcLWFcLWRlY2lzaW9uOwor5bi45aeU5pyDID4gc3RhbmRpbmdcLWNvbW1pdHRlZTsKK+Wkp+WtuOeUnyA+IHVuaXZlcnNpdHlcLXN0dWRlbnQ7CivngI/opr3lmaggPiBicm93c2VyXC1cKHNvZnR3YXJlXCk7CivkuJbntIDmnKsgPiBlbmRcLW9mXC10aGVcLWNlbnR1cnk7Civmk4HorbfogIUgPiBzdXBwb3J0ZXJcLVwocGVyc29uXCk7CivlnIvli5nljb8gPiBzZWNyZXRhcnlcLW9mXC1zdGF0ZTsKK+WNiui8qeWtkCA+IGhhbGZcLW9mXC1hXC1saWZldGltZTsKK+ermeeuoeeQhiA+IHN0YXRpb25cLW1hbmFnZW1lbnQ7CivoiqzomK3oqp4gPiBmaW5uaXNoXC1cKGxhbmd1YWdlXCk7Civororms5XlhZIgPiB0cnlcLWRpZmZlcmVudFwtd2F5czsKK+a1t+epuui7jSA+IG5hdnlcLWFuZFwtYWlyXC1mb3JjZTsKK+e0sOiPjOaIsCA+IGJpb2xvZ2ljYWxcLXdhcmZhcmU7CivnkZ7lhbjoqp4gPiBzd2VkaXNoXC1cKGxhbmd1YWdlXCk7Civmtonlq4zkurogPiBcKGNyaW1pbmFsXClcLXN1c3BlY3Q7CivkvbXmjbLmqZ8gPiByaWJib25cLWxhcFwtbWFjaGluZTsKK+WIpeWLlemaiiA+IHNwZWNpYWxcLWRldGFjaG1lbnQ7CivnoJTnqbbmiYAgPiByZXNlYXJjaFwtaW5zdGl0dXRlOwor5bm06LyV5YyWID4gbWFrZVwtbW9yZVwteW91dGhmdWw7CivliqDpgJ/lmaggPiBhY2NlbGVyYXRvclwtXChjb21wXCk7CivkuI3nrYnomZ8gPiBzaWduXC1vZlwtaW5lcXVhbGl0eTsKK+ilv+WNiueQgyA+IHdlc3Rlcm5cLWhlbWlzcGhlcmU7CivmoLjmioDooZMgPiBudWNsZWFyXC10ZWNobm9sb2d5Owor5aCx5YuZ5ZOhID4gdGVsZWdyYXBoXC1vcGVyYXRvcjsKK+WFieazoumVtyA+IG9wdGljYWxcLXdhdmVsZW5ndGg7Civllonmk6bpn7MgPiBndXR0dXJhbFwtZnJpY2F0aXZlOwor5YWr57Sa5belID4gZWlnaHRcLWdyYWRlXC13b3JrZXI7CivkvZvokpnnibkgPiB2ZXJtb250XC1cW3VzXC1zdGF0ZVxdOwor566h55CG56uZID4gbWFuYWdlbWVudFwtc3RhdGlvbjsKK+iqquS4jeWumiA+IGNhbicndFwtc2F5XC1mb3JcLXN1cmU7Civms6Lmlq/oqp4gPiBib3NuaWFuXC1cKGxhbmd1YWdlXCk7CivlhJjlj6/og70gPiBhc1wtZmFyXC1hc1wtcG9zc2libGU7CivljIXmib/ntYQgPiBcKHJlc3BvbnNpYmxlXClcLWNyZXc7Civnmb7okYnnrrEgPiB0aGVybW9tZXRlclwtc2NyZWVuOwor6YG/6Zu35ZmoID4gbGlnaHRuaW5nXC1hcnJlc3RlcjsKK+aIsOmspeapnyA+IGZpZ2h0ZXJcLVwoYWlyY3JhZnRcKTsKK+mhr+ekuuWZqCA+IG1vbml0b3JcLVwoY29tcHV0ZXJcKTsKK+W/heS/ruiqsiA+IGFcLXJlcXVpcmVkXC1jb3Vyc2U7Civlg4XmrKHkuo4gPiBzZWNvbmRcLW9ubHlcLXRvXC5cLlwuOwor5pyd6a6u6KqeID4ga29yZWFuXC1cKGxhbmd1YWdlXCk7Civlu7rnr4nmpa0gPiBidWlsZGluZ1wtaW5kdXN0cnk7CivpuqXlhYvntq0gPiBcKHRpbW90aHlcKVwtbWN2ZWlnaDsKK+aHieeUqOWxpCA+IGFwcGxpY2F0aW9uXC1sYXllcjsKK+ahjOWIpeaelyA+IFwoY2hhcmxpZVwpXC1jaGFwbGluOwor6JOL54i+6KqeID4gZ2FlbGljXC1cKGxhbmd1YWdlXCk7CivnhKHmiYDorIIgPiB0b1wtYmVcLWluZGlmZmVyZW50Owor5qmf5Zmo5Lq6ID4gbWVjaGFuaWNhbFwtcGVyc29uOwor5buj5Z+f57ayID4gd2lkZVwtYXJlYVwtbmV0d29yazsKK+e2reaMgeiyuyA+IG1haW50ZW5hbmNlXC1jb3N0czsKK+adv+aTpuWFkiA+IGJsYWNrYm9hcmRcLWVyYXNlcjsKK+WQjOaAp+aIgCA+IGhvbW9zZXh1YWxcLVwobG92ZVwpOwor6Zu76Kmx57ayID4gdGVsZXBob25lXC1uZXR3b3JrOwor5oCn6ai35pO+ID4gc2V4dWFsXC1oYXJhc3NtZW50Owor5qmr5pa354mpID4gdHJhbnN2ZXJzZVwtb2JqZWN0Owor55m95bGI6I+cID4gZ3JlYXRlclwtY2VsYW5kaW5lOwor5YKz6Ly4546HID4gdHJhbnNtaXNzaW9uXC1yYXRlOwor5Ly65pyN5ZmoID4gc2VydmVyXC1cKGNvbXB1dGVyXCk7CivmnI3li5nlmaggPiBzZXJ2ZXJcLVwoY29tcHV0ZXJcKTsKK+Wci+mam+azlSA+IGludGVybmF0aW9uYWxcLWxhdzsKK+S+teaIquiAhSA+IFwoY29tcHV0ZXJcKVwtaGFja2VyOwor5Yid5a246ICFID4gYmVnaW5uaW5nXC1zdHVkZW50Owor6KW/546L5q+NID4gbmFtZVwtb2ZcLWFcLWdvZGRlc3M7CivlnKjpoK3niYggPiBvblwtdGhlXC1mcm9udFwtcGFnZTsKK+azouiYreiqniA+IHBvbGlzaFwtXChsYW5ndWFnZVwpOwor6L2f54K45qmfID4gYm9tYmVyXC1cKGFpcmNyYWZ0XCk7CivphqvlrbjlrrYgPiBtZWRpY2FsXC1zY2llbnRpc3Q7Civoj6/nm5vpoJMgPiB3YXNoaW5ndG9uXC1cKGRcLmNcLlwpOwor5Lif6aOv56KXID4gdG9cLWxvc2VcLW9uZScnc1wtam9iOwor5q+U6LyD5pawID4gY29tcGFyYXRpdmVseVwtbmV3Owor6Zu75L+h6JmfID4gZWxlY3RyaWNhbFwtc2lnbmFsOwor56eY5pu46ZW3ID4gc2VjcmV0YXJ5XC1nZW5lcmFsOwor5q2Q5rSy5Lq6ID4gZXVyb3BlYW5cLVwocGVyc29uXCk7CivooZvnlJ/pg6ggPiBoZWFsdGhcLWRlcGFydG1lbnQ7CivlpKrlubPmtIsgPiB0aGVcLXBhY2lmaWNcLW9jZWFuOwor5Y6f5Zug5pivID4gdGhlXC1yZWFzb25cLWlzXC1cLlwuXC47CivkuIDlubTljYogPiBhXC15ZWFyXC1hbmRcLWFcLWhhbGY7CivkuI3nlJjlv4MgPiBub3RcLXJlY29uY2lsZWRcLXRvOwor5a6i5oi25qmfID4gY2xpZW50XC1cKGNvbXB1dGVyXCk7CivlpLHmpa3njocgPiB1bmVtcGxveW1lbnRcLXJhdGU7Civorablr5/lsYAgPiBwb2xpY2VcLWRlcGFydG1lbnQ7Civmrbjlv4PogIUgPiByZWxpZ2lvdXNcLWNvbnZlcnQ7CivmspLpl5zkv4IgPiBpdFwtZG9lc24nJ3RcLW1hdHRlcjsKK+WMheWckuWFkiA+IGJ1eVwtdGhlXC13aG9sZVwtbG90Owor5LiA6Lqr5rGXID4gc3dlYXRpbmdcLWFsbFwtb3ZlcjsKK+eZvee0sOiDniA+IHdoaXRlXC1ibG9vZFwtY2VsbDsKK+aAp+mXnOS/giA+IHNleHVhbFwtcmVsYXRpb25zOwor5q6v5YSA6aSoID4gdGhlXC11bmRlcnRha2VyJydzOwor56CU6KiO5pyDID4gZGlzY3Vzc2lvblwtZm9ydW07Civos4fmlpnph48gPiBxdWFudGl0eVwtb2ZcLWRhdGE7Civnt6jovK/lrqQgPiBlZGl0b3JpYWxcLW9mZmljZTsKK+aLieS4geiqniA+IGxhdGluXC1cKGxhbmd1YWdlXCk7CivpganphY3lsaQgPiBhZGFwdGF0aW9uXC1sYXllcjsKK+WHuumiqOmgrSA+IHRvXC1jcmVhdGVcLWFcLXN0aXI7Civotorph47ou4ogPiBvZmZcLXJvYWRcLXZlaGljYWw7CivpganphY3lmaggPiBhZGFwdGVyXC1cKGRldmljZVwpOwor5Ymv5Li75bitID4gdmljZVwtY2hhaXJwZXJzb247CivmjbflhYvoqp4gPiBjemVjaFwtXChsYW5ndWFnZVwpOwor562G5bqV5LiLID4gYWJpbGl0eVwtdG9cLXdyaXRlOwor5qC45Y6f5paZID4gbnVjbGVhclwtbWF0ZXJpYWw7Civnmb3ooYDnkIMgPiB3aGl0ZVwtYmxvb2RcLWNlbGw7CivkuI3niK3msKMgPiBiZVwtZGlzYXBwb2ludGluZzsKK+WMl+WGsOa0iyA+IHRoZVwtYXJjdGljXC1vY2VhbjsKK+WPiOS+huS6hiA+IGhlcmVcLXdlXC1nb1wtYWdhaW47CivljYHlpJrlhIQgPiBvdmVyXC1vbmVcLWJpbGxpb247CivkuIDkuIvlrZAgPiBpblwtYVwtc2hvcnRcLXdoaWxlOwor5qC46Kit5pa9ID4gbnVjbGVhclwtZmFjaWxpdHk7CivpnZ7mlL/lupwgPiBub25cLWdvdmVybm1lbnRhbDsKK+S4u+W5uee3miA+IGJhY2tib25lXC1cKGNhYmxlXCk7Civpm7voppbmqZ8gPiB0ZWxldmlzaW9uXC1cKHNldFwpOwor5rWB6KGM55eFID4gZXBpZGVtaWNcLWRpc2Vhc2U7Civkv6HnlKjorYkgPiBsZXR0ZXJcLW9mXC1jcmVkaXQ7CivlrbjooZPnlYwgPiBhY2FkZW1pY1wtY2lyY2xlczsKK+ihm+aYn+WfjiA+IFwic2F0ZWxsaXRlXCJcLXRvd247CivnmoTkuIDnqK4gPiBpc1wtb25lXC1cKGtpbmRcLW9mXCk7Civmm7zlvrfmi4kgPiBcKG5lbHNvblwpXC1tYW5kZWxhOwor5Y2w5Zyw6KqeID4gaGluZGlcLVwobGFuZ3VhZ2VcKTsKK+W3pealreWMliA+IHRvXC1pbmR1c3RyaWFsaXplOwor6KiY6ICF5pyDID4gcHJlc3NcLWNvbmZlcmVuY2U7Civlh7rniYjnpL4gPiBwdWJsaXNoaW5nXC1ob3VzZTsKK+aylue5qeWztiA+IG9raW5hd2FcLVwoaXNsYW5kXCk7CivmsJHkuLvpu6ggPiBkZW1vY3JhdGljXC1wYXJ0eTsKK+mbu+imluWKhyA+IHR2XC1kcmFtYVwtcHJvZ3JhbTsKK+i8u+WwhOazoiA+IHJhZGlhdGlvblwtXCh3YXZlXCk7CivllYbmpa3ljJYgPiB0b1wtY29tbWVyY2lhbGl6ZTsKK+mbu+iFpue2siA+IGNvbXB1dGVyXC1uZXR3b3JrOwor6auY5oCn6IO9ID4gaGlnaFwtcGVyZm9ybWFuY2U7CivplovluZXlvI8gPiBvcGVuaW5nXC1jZXJlbW9ueTsKK+Wvpue/kueUnyA+IGludGVyblwtXChzdHVkZW50XCk7CivlnIvos5PppKggPiBzdGF0ZVwtZ3Vlc3Rob3VzZTsKK+S4jeiHs+aWvCA+IGNhbm5vdFwtZ29cLXNvXC1mYXI7Civnmb7liIbpu54gPiBwZXJjZW50YWdlXC1wb2ludDsKK+WKn+iDvembhiA+IGZ1bmN0aW9uXC1saWJyYXJ5Owor5YyW5a245oiwID4gY2hlbWljYWxcLXdhcmZhcmU7CivlpKflpJrmlbggPiBcKGdyZWF0XClcLW1ham9yaXR5Owor6I+P6Jit6KqeID4gZHV0Y2hcLVwobGFuZ3VhZ2VcKTsKK+S4gOW5tOWkmiA+IG1vcmVcLXRoYW5cLWFcLXllYXI7CivlhbHlkozpu6ggPiByZXB1YmxpY2FuXC1wYXJ0eTsKK+iElumguOWFkiA+IGJhY2tcLW9mXC10aGVcLW5lY2s7CivlpKfnhKHnlY8gPiB1dHRlcmx5XC1mZWFybGVzczsKK+i2hemrmOmAnyA+IHVsdHJhXC1oaWdoXC1zcGVlZDsKK+aAp+aOpeinuCA+IHNleHVhbFwtZW5jb3VudGVyOwor5ou/5omL6I+cID4gc3BlY2lhbHR5XC1cKGRpc2hcKTsKK+m8oOaomeWZqCA+IG1vdXNlXC1cKGNvbXB1dGVyXCk7CivkupLmk43mgKcgPiBpbnRlcm9wZXJhYmlsaXR5Owor5Yqf6IO9576kID4gZnVuY3Rpb25hbFwtZ3JvdXA7CivkuIDovKnlrZAgPiBcKGZvclwpXC1hXC1saWZldGltZTsKK+mrmOaViOeOhyA+IGhpZ2hcLWVmZmljaWVuY3k7CivliY3kuI3kuYUgPiBub3RcLWxvbmdcLWJlZm9yZTsKK+eUn+eUoumaiiA+IHByb2R1Y3Rpb25cLXRlYW07CivnlKjmiLbnt5ogPiBzdWJzY3JpYmVyXC1saW5lOwor576O5ZyL5Lq6ID4gYW1lcmljYW5cLXBlcnNvbjsKK+eci+S4iuWOuyA+IGl0XC13b3VsZFwtYXBwZWFyOwor5bm+5Y2B5YSEID4gc2V2ZXJhbFwtYmlsbGlvbjsKK+S4jeW+heiqqiA+IG5lZWRsZXNzXC10b1wtc2F5Owor5Ym16KiY6YyEID4gdG9cLXNldFwtYVwtcmVjb3JkOwor5LiN5ZCN5pW4ID4gYWJzdHJhY3RcLW51bWJlcjsKK+aVuOWNgeWEhCA+IHNldmVyYWxcLWJpbGxpb247CivnuL3ntpPnkIYgPiBnZW5lcmFsXC1tYW5hZ2VyOwor5pW455m+6JCsID4gc2V2ZXJhbFwtbWlsbGlvbjsKK+aLvOi1t+S+hiA+IHRvXC1wdXRcLXRvZ2V0aGVyOwor57Gz57KJ6IKJID4gcmljZVwtZmxvdXJcLW1lYXQ7Civpq5jmioDooZMgPiBoaWdoXC10ZWNobm9sb2d5Owor6ZaJ6Z+z56+AID4gY2xvc2VkXC1zeWxsYWJsZTsKK+iZm+mbu+i3ryA+IHZpcnR1YWxcLWNpcmN1aXQ7Civlvp7ljrvlubQgPiBzaW5jZVwtbGFzdFwteWVhcjsKK+iPsuW+i+izkyA+IHRoZVwtcGhpbGlwcGluZXM7CivmnKzml4/oqp4gPiBuYXRpdmVcLWxhbmd1YWdlOwor57WG6IWz55+zID4gc3R1bWJsaW5nXC1ibG9jazsKK+aEn+afk+iAhSA+IGluZmVjdGVkXC1wZXJzb247CivlpJrmqKPljJYgPiBkaXZlcnNpZmljYXRpb247CivntrLnrqHlk6EgPiBuZXR3b3JrXC1tYW5hZ2VyOwor5LiN5bmy5raJID4gbm9uaW50ZXJmZXJlbmNlOwor5qC45q2m5bqrID4gbnVjbGVhclwtYXJzZW5hbDsKK+S4ree+jua0siA+IGNlbnRyYWxcLWFtZXJpY2E7CivlpKnkuLvmlZkgPiBjYXRob2xpY1wtY2h1cmNoOwor6YeR6KOh5aWHID4gXChuZXd0XClcLWdpbmdyaWNoOwor5rOo5oSP55yLID4gd2F0Y2hcLWNhcmVmdWxseTsKK+WFseeUoum7qCA+IGNvbW11bmlzdFwtcGFydHk7CivkuI3opovlvpcgPiBub3RcLW5lY2Vzc2FyaWx5Owor6LOA5bm054mHID4gbmV3XC15ZWFyJydzXC1jYXJkOwor5qiZ5rqW5YyWID4gc3RhbmRhcmRpemF0aW9uOwor5L2/5ru/5oSPID4gdG9cLW1ha2VcLWNvbnRlbnQ7CivkuI3pj73pi7wgPiBzdGFpbmxlc3NcLXN0ZWVsOwor5Y2w5bqm5Lq6ID4gaW5kaWFuXC1cKHBlcnNvblwpOwor5aWn6YGL5p2RID4gb2x5bXBpY1wtdmlsbGFnZTsKK+aal+mBqeaHiSA+IGRhcmtcLWFkYXB0YXRpb247CivogIHnmb7lp5MgPiBvcmRpbmFyeVwtcGVvcGxlOwor5aSr5aa75bqXID4gZmFtaWx5XC1ydW5cLXNob3A7CivmlbjlrZfntrIgPiBkaWdpdGFsXC1uZXR3b3JrOwor5YWS5YyW6Z+7ID4gcmV0cm9mbGV4XC1maW5hbDsKK+acieiBr+e5qyA+IHRvXC1iZVwtY29ubmVjdGVkOwor5a+p5Yik6ZW3ID4gcHJlc2lkaW5nXC1qdWRnZTsKK+mrmOaViOiDvSA+IGhpZ2hcLWVmZmljaWVuY3k7Civnm5zniYjogIUgPiBzb2Z0d2FyZVwtcGlyYXRlOwor5aSn6YOo5Lu9ID4gXChpblwpXC1sYXJnZVwtcGFydDsKK+WGt+awo+apnyA+IGFpclwtY29uZGl0aW9uZXI7CivkvIrnlLjlnJIgPiBnYXJkZW5cLW9mXC1lZGVuOwor5oiQ5ZOh5ZyLID4gbWVtYmVyXC1jb3VudHJ5Owor6Yej6a2a6Ie6ID4gZGlhb3l1XC1pc2xhbmRzOwor6KSH6Z+75q+NID4gY29tcG91bmRcLWZpbmFsOwor5bmA5aSq6ZW3ID4gb3ZlcnNpemVcLWZyYW1lOwor5Ly055Sf5rCjID4gYXNzb2NpYXRlZFwtZ2FzOwor54mp55CG5bGkID4gcGh5c2ljYWxcLWxheWVyOwor6IGv5ZCI5ZyLID4gdW5pdGVkXC1uYXRpb25zOwor6Iux5ZyL5Lq6ID4gYnJpdGlzaFwtcGVyc29uOwor55m954ax5YyWID4gdHVyblwtd2hpdGVcLWhvdDsKK+WNgeS4gOaciCA+IGVsZXZlbnRoXC1tb250aDsKK+WOn+WtkOaguCA+IGF0b21pY1wtbnVjbGV1czsKK+aKiuWFhOW8nyA+IHN3b3JuXC1icm90aGVyczsKK+WMl+aWl+aYnyA+IHRoZVwtYmlnXC1kaXBwZXI7CivplovnjqnnrJEgPiB0b1wtcGxheVwtYVwtam9rZTsKK+WvqeWIpOW4rSA+IGp1ZGdlbWVudFwtc2VhdDsKK+eZveeyieeXhSA+IHBvd2RlcnlcLW1pbGRldzsKK+mHo+mtmuWztiA+IGRpYW95dVwtaXNsYW5kczsKK+WPpOW4jOiHmCA+IGFuY2llbnRcLWdyZWVjZTsKK+S4reWci+S6uiA+IGNoaW5lc2VcLXBlcnNvbjsKK+ebo+edo+S6uiA+IHN1cGVyaW50ZW5kZW50Owor6aCG5bqP5pW4ID4gb3JkaW5hbFwtbnVtYmVyOwor6Zu76Kmx57eaID4gdGVsZXBob25lXC1saW5lOwor5bCx5piv6KqqID4gaW5cLW90aGVyXC13b3JkczsKK+aVmeiCsueVjCA+IGFjYWRlbWljXC13b3JsZDsKK+S4jeaVoueVtiA+IHlvdVwtZmxhdHRlclwtbWU7Civlia/nuL3ntbEgPiB2aWNlXC1wcmVzaWRlbnQ7CivnlJroh7PmlrwgPiBzb1wtbXVjaFwtXCh0aGF0XCk7CivkuI3lubPooaEgPiBkaXNlcXVpbGlicml1bTsKK+adseWNl+S6niA+IHNvdXRoZWFzdFwtYXNpYTsKK+aOoeaUtueOhyA+IHJlY292ZXJ5XC1yYXRpbzsKK+iHqueUseWMliA+IGxpYmVyYWxpemF0aW9uOwor5LiN6YGp55SoID4gbm90XC1hcHBsaWNhYmxlOwor57Ch5Zau5YyWID4gc2ltcGxpZmljYXRpb247Civpub3muZbln44gPiBzYWx0XC1sYWtlXC1jaXR5Owor6KGA6KO95ZOBID4gYmxvb2RcLXByb2R1Y3RzOwor5Ye56Z2i6Y+hID4gY29uY2F2ZVwtbWlycm9yOwor6ZaL5b+D5p6cID4gcGlzdGFjaGlvXC1udXRzOwor5LiW55WM6KqeID4gd29ybGRcLWxhbmd1YWdlOwor6KGM5pif6ZqbID4gaW50ZXJwbGFuZXRhcnk7CivkuK3lv4Poqp4gPiBxdWFsaWZpZWRcLXdvcmQ7Civlj4PorIDplbcgPiBjaGllZlwtb2ZcLXN0YWZmOwor6YyE5YOP5qmfID4gdmlkZW9cLXJlY29yZGVyOwor5YWJ5L+h6JmfID4gb3B0aWNhbFwtc2lnbmFsOwor5qC45q2m5ZmoID4gbnVjbGVhclwtd2VhcG9uOwor6YGU5LiN5YiwID4gY2Fubm90XC1hY2hpZXZlOwor5YWL5p6X6aCTID4gXChiaWxsXClcLWNsaW50b247CivogZboqpXnr4AgPiBjaHJpc3RtYXNcLXRpbWU7Civnmb3ku6TmtbcgPiB0aGVcLWJlcmluZ1wtc2VhOwor5pGp6ZaA57aTID4gYm9va1wtb2ZcLW1vcm1vbjsKK+Wwi+mWi+W/gyA+IHRvXC1tYWtlXC1mdW5cLW9mOwor54qv5LiN6JGXID4gbm90XC13b3J0aHdoaWxlOwor5LiN55So6KydID4geW91JydyZVwtd2VsY29tZTsKK+WNiuiHquWLlSA+IHNlbWlcLWF1dG9tYXRpYzsKK+WFp+iSmeWPpCA+IGlubmVyXC1tb25nb2xpYTsKK+mAgOS8kemHkSA+IHJldGlyZW1lbnRcLXBheTsKK+eVmeiogOewvyA+IHZpc2l0b3InJ3NcLWJvb2s7CivmrbvkuqHnjocgPiBtb3J0YWxpdHlcLXJhdGU7Civlk4joqbLmm7ggPiBib29rXC1vZlwtaGFnZ2FpOwor5pO65pSk5a2QID4gc2V0XC11cFwtYVwtc3RhbGw7CivnkZ7lo6vkurogPiBzd2lzc1wtXChwZXJzb25cKTsKK+W3ruS4jeWkmiA+IGFsbW9zdFwsXC1uZWFybHk7Civmi6zlvKfoo6EgPiBpblwtcGFyZW50aGVzZXM7Civkv6HomZ/oh7ogPiBzaWduYWxcLXN0YXRpb247CivkuJbnlYzkuIogPiBcKG9mXC10aGVcKVwtd29ybGQ7CivlnJPnj6DnrYYgPiBiYWxsXC1wb2ludFwtcGVuOwor6LeR6IW/5YWSID4gdG9cLXJ1blwtZXJyYW5kczsKK+azoueLgOeGsSA+IHVuZHVsYW50XC1mZXZlcjsKK+efpeitmOW6qyA+IGtub3dsZWRnZVwtYmFzZTsKK+mbu+S/oeWxgCA+IGNlbnRyYWxcLW9mZmljZTsKK+ilv+WNl+S6niA+IHNvdXRod2VzdFwtYXNpYTsKK+aSpeiZn+ebpCA+IHRlbGVwaG9uZVwtZGlhbDsKK+W+jOWFqeiAhSA+IHRoZVwtbGF0dGVyXC10d287Civlu6Dnpq7mi5wgPiBkYXlcLW9mZlwtXCh3b3JrXCk7Civlhannmb7lhIQgPiB0d2VudHlcLWJpbGxpb247CivnhKHpgKPmjqUgPiBjb25uZWN0aW9ubGVzczsKK+eMnOisjuWFkiA+IGd1ZXNzXC1hXC1yaWRkbGU7CivljYrku6XkuIogPiBtb3JlXC10aGFuXC1oYWxmOwor5LiN5a6i5rCjID4geW91JydyZVwtd2VsY29tZTsKK+e+juW3ruS6iyA+IGFcLXRlcnJpZmljXC1qb2I7Civoq77osp3niL4gPiBub2JlbFwtXChwcml6ZVwpOwor5L+d6K2J6YeRID4gZWFybmVzdFwtbW9uZXk7CivmjpvomZ/orYkgPiByZWdpc3RlclwtY2FyZDsKK+WOn+WtkOiDvSA+IGF0b21pY1wtZW5lcmd5Owor57SA5b+16aSoID4gbWVtb3JpYWxcLWhhbGw7Civllq7pn7vmr40gPiBzaW1wbGVcLWZpbmFsczsKK+acieWPr+iDvSA+IGl0JydzXC1wb3NzaWJsZTsKK+acquaPkOWPiiA+IG5vdFwtbWVudGlvbmVkOwor5pys55Sf54eIID4gYnVuc2VuXC1idXJuZXI7Civlv4Poh5/nl4UgPiBoZWFydFwtZGlzZWFzZTsKK+WNgeS6lOW5tCA+IGZpZnRlZW5cLXllYXJzOwor6YSn5bCP5bmzID4gZGVuZ1wteGlhb3Bpbmc7CivpgqPptLvmm7ggPiBib29rXC1vZlwtbmFodW07CivntrLntaHlsaQgPiBuZXR3b3JrXC1sYXllcjsKK+WvqeWIpOashCA+IGp1ZGdlbWVudFwtYmFyOwor55m96Iqx6IqxID4gc2hpbmluZ1wtd2hpdGU7Civlu7rnr4nlrbggPiBhcmNoaXRlY3R1cmFsOwor5Lit5ZyL5byPID4gY2hpbmVzZVwtc3R5bGU7CivljYrlpLHmpa0gPiBzZW1pXC1lbXBsb3llZDsKK+ihqOaxuuasiiA+IHJpZ2h0XC10b1wtdm90ZTsKK+epuumWk+ermSA+IHNwYWNlXC1zdGF0aW9uOwor5aSn5YWs5Y+4ID4gbGFyZ2VcLWNvbXBhbnk7CivlpKflrrnph48gPiBoaWdoXC1jYXBhY2l0eTsKK+aliueZvue/sCA+IGJyaWdoYW1cLXlvdW5nOwor5aSn5ZWP6aGMID4gZ3JlYXRcLXByb2JsZW07CivlhYnlip/njocgPiBvcHRpY2FsXC1wb3dlcjsKK+asiuWogeaApyA+IGF1dGhvcml0YXRpdmU7CivlpbPmnIvlj4sgPiBmZW1hbGVcLWZyaWVuZDsKK+S4jeWRqOW7tiA+IHVuZGlzdHJpYnV0ZWQ7CivmkYHph6blhZIgPiBzbmFwXC1mYXN0ZW5lcjsKK+eZveearuadviA+IGxhY2ViYXJrXC1waW5lOwor5a2Y5YSy5ZmoID4gbWVtb3J5XC1cKHVuaXRcKTsKK+W9jOi/puabuCA+IGJvb2tcLW9mXC1taWNhaDsKK+ePvuS7o+WMliA+IG1vZGVybml6YXRpb247CivkuLvnprHmlocgPiBsb3JkJydzXC1wcmF5ZXI7Civlpb3lub7lubQgPiBzZXZlcmFsXC15ZWFyczsKK+WUruelqOiZlSA+IHRpY2tldFwtb2ZmaWNlOwor5YWt6bue5Y2KID4gaGFsZlwtcGFzdFwtc2l4Owor54Sh5oSP6K2YID4gdW5jb25zY2lvdXNseTsKK+aOqOWLleWKmyA+IGRyaXZpbmdcLWZvcmNlOwor6YG/6aKo6JmVID4gbGVlXCxcLXdpbmRzdG9wOwor5L2/55So6YePID4gdm9sdW1lXC1vZlwtdXNlOwor5Y2K5bCO6auUID4gc2VtaWNvbmR1Y3RvcjsKK+mngeauvOanjSA+IG1hdXNlclwtcGlzdG9sOwor5LiN5pa55L6/ID4gaW5jb252ZW5pZW5jZTsKK+aykue2k+mplyA+IGluZXhwZXJpZW5jZWQ7CivkuLvml6XlrbggPiBzdW5kYXlcLXNjaG9vbDsKK+acieWKqeS6jiA+IGNvbnRyaWJ1dGVcLXRvOwor5pyJ5qyK5aiBID4gYXV0aG9yaXRhdGl2ZTsKK+S4ieWNgeWEhCA+IHRocmVlXC1iaWxsaW9uOwor5LiN5YeN5rivID4gaWNlXC1mcmVlXC1wb3J0Owor5q2l6Kmx5qmfID4gd2Fsa2llXC10YWxraWU7Civpm4bnt5rlmaggPiBodWJcLVwobmV0d29ya1wpOwor5LiN6IiS6YGpID4gdW5jb21mb3J0YWJsZTsKK+WFqeWNg+W5tCA+IHRoZVwteWVhclwtMjAwMDsKK+aomeacrOifsiA+IHNwaWRlclwtYmVldGxlOwor6YCy5Ye65Y+jID4gaW1wb3J0XHxleHBvcnQ7CivlkJHopb/ljZcgPiBzb3V0aHdlc3R3YXJkOwor5ZSu56Wo5ZOhID4gdGlja2V0XC1zZWxsZXI7CivllK7npajlj6MgPiB0aWNrZXRcLXdpbmRvdzsKK+WuieWumuWMliA+IHN0YWJpbGl6YXRpb247CivkuqTmj5vnq68gPiBzd2l0Y2hlZFwtcG9ydDsKK+S4jeebuOW5siA+IGJlXC1pcnJlbGV2YW50Owor5aSp5puJ5b6XID4gaGVhdmVuXC1rbm93c1whOwor5aCx6Kmx5qmfID4gd2Fsa2llXC10YWxraWU7CivlkIznm5/lnIsgPiBjb25mZWRlcmF0aW9uOwor5aWn6YGL5pyDID4gb2x5bXBpY1wtZ2FtZXM7CivlnKjmnKrkvoYgPiBpblwtdGhlXC1mdXR1cmU7CivljZfnvo7mtLIgPiBzb3V0aFwtYW1lcmljYTsKK+S4g+eZvuiQrCA+IHNldmVuXC1taWxsaW9uOwor5pyJ6Imv5b+DID4gY29uc2NpZW50aW91czsKK+m8u+mjvOazlSA+IG5hc2FsXC1mZWVkaW5nOwor57SE5ou/5pu4ID4gYm9va1wtb2ZcLWpvbmFoOwor5q2l6KGM6J+yID4gZ3JvdW5kXC1iZWV0bGU7Civkvr/mraXotbAgPiBtYXJjaFwtYXRcLWVhc2U7CivpgKPmjqXoh7MgPiB0b1wtY29ubmVjdFwtdG87Civps7blsL7oirEgPiBpcmlzXC1cKGZsb3dlclwpOwor5Y2K5a6Y5pa5ID4gc2VtaVwtb2ZmaWNpYWw7CivlhbzlrrnmgKcgPiBjb21wYXRpYmlsaXR5Owor6Kej5aOT57iuID4gdG9cLWRlY29tcHJlc3M7CivmjqHmo4nmqZ8gPiBjb3R0b25cLXBpY2tlcjsKK+iKreiVieaJhyA+IHBhbG1cLWxlYWZcLWZhbjsKK+WFrOWFg+WJjSA+IGJlZm9yZVwtY2hyaXN0Owor5rOi576O5bqmID4gYmF1bWVcLWRlZ3JlZXM7CivljYrlvqnos70gPiBlaWdodGhcLWZpbmFsczsKK+mCiueVjOe3miA+IGJvdW5kYXJ5XC1saW5lOwor5YyX576O5rSyID4gbm9ydGhcLWFtZXJpY2E7CivmoLjog73mupAgPiBudWNsZWFyXC1wb3dlcjsKK+aUr+aMgeeOhyA+IHN1cHBvcnRcLWxldmVsOwor6Kmm5LiA6KmmID4gdG9cLWhhdmVcLWFcLXRyeTsKK+i2iuS+hui2iiA+IG1vcmVcLWFuZFwtbW9yZTsKK+S4i+iHs+S4iiA+IGJvdHRvbVwtdG9cLXRvcDsKK+aJvuS4jeWIsCA+IGNvdWxkbicndFwtZmluZDsKK+W+iOmBuuaGviA+IHVuZm9ydHVuYXRlbHk7CivokKzkuovpgZQgPiBtYXN0ZXJcKGNhcmRcKTsKK+e0hOePpeabuCA+IGJvb2tcLW9mXC1qb2VsOwor6LOg5YSf6YeRID4gY29tcGVuc2F0aW9uOwor56S65aiB6ICFID4gZGVtb25zdHJhdG9yOwor5q+b5Li75bitID4gY2hhaXJtYW5cLW1hbzsKK+W7uuevieeJqSA+IFwoYVwpXC1idWlsZGluZzsKK+mWseimveWupCA+IHJlYWRpbmdcLXJvb207CivkuI3lkI3orb0gPiBkaXNyZXB1dGFibGU7CivmqZ/morDnorwgPiBtYWNoaW5lXC1jb2RlOwor5LiN5oiQ5YqfID4gdW5zdWNjZXNzZnVsOwor5rC05ru45YKzID4gd2F0ZXJcLW1hcmdpbjsKK+S4jemHjeimliA+IGluZGlmZmVyZW5jZTsKK+WNgeS5neatsiA+IDE5XC15ZWFyc1wtb2xkOwor5Y2K5paH55uyID4gc2VtaWxpdGVyYXRlOwor5LiZ54Ov6YW4ID4gYWNyeWxpY1wtYWNpZDsKK+WNiueGn+e3tCA+IHNlbWlcLXNraWxsZWQ7CivlkIPkuI3plosgPiBiZVwtdW5wb3B1bGFyOwor5LiN5ZCI55CGID4gdW5yZWFzb25hYmxlOwor5LiN5oSJ5b+rID4gZGlzYWdyZWVhYmxlOwor6aSK6Zue5aC0ID4gY2hpY2tlblwtZmFybTsKK+iGneS4iuWeiyA+IGxhcHRvcFwtXChhZGpcKTsKK+Wvpumam+aApyA+IHByYWN0aWNhbGl0eTsKK+WNgeS4gOW5tCA+IGVsZXZlblwteWVhcnM7Civnm7jkvLzmgKcgPiByZXNzZW1ibGFuY2U7CivpnZ7lkIzmraUgPiBhc3luY2hyb25vdXM7CivlgrPpgZPmm7ggPiBlY2NsZXNpYXN0ZXM7CivnmbzoqIDkurogPiBzcG9rZXNwZXJzb247Civpm4bkuK3lmaggPiBjb25jZW50cmF0b3I7CivmhJ/lmIboqZ4gPiBpbnRlcmplY3Rpb247CivotrPnkIPov7cgPiBmb290YmFsbFwtZmFuOwor6YKj5qij55qEID4gdGhhdFwta2luZFwtb2Y7CivljYrpgorlpKkgPiBoYWxmXC10aGVcLXNreTsKK+iRoeiQhOmFkiA+IFwoZ3JhcGVcKVwtd2luZTsKK+i+suS9nOeJqSA+IFwoZmFybVwpXC1jcm9wczsKK+Wbm+WNgeWkmiA+IG1vcmVcLXRoYW5cLTQwOwor6K2J5a+m56auID4gY29uZmlybWF0aW9uOwor5a6H6Iiq5bGAID4gc3BhY2VcLWFnZW5jeTsKK+WOu+Wci+WkliA+IHRvXC1nb1wtYWJyb2FkOwor56ys5LqM5L2NID4gc2Vjb25kXC1wbGFjZTsKK+WQjOaZguS7oyA+IGNvbnRlbXBvcmFyeTsKK+WJr+e4veeQhiA+IHZpY2VcLXByZW1pZXI7Civot6/lvpfoqJggPiBib29rXC1vZlwtcnV0aDsKK+WkmuW3peWMliA+IHRvXC1tdWx0aXBsZXg7CivkuInlkIjkuIAgPiB0aHJlZVwtaW5cLW9uZTsKK+Wbm+eZvuiQrCA+IGZvdXJcLW1pbGxpb247Civpq5jos6rph48gPiBoaWdoXC1xdWFsaXR5Owor5aSi5ri455eHID4gdG9cLXNsZWVwd2FsazsKK+S4jee1kOebnyA+IG5vbmFsaWdubWVudDsKK+WFq+e0mumiqCA+IGZvcmNlXC04XC13aW5kOwor5bm85YWS5ZySID4ga2luZGVyZ2FydGVuOwor5qGU5a2Q5rC0ID4gb3JhbmdlXC1qdWljZTsKK+WJtemAoOaApyA+IGNyZWF0aXZlbmVzczsKK+eglOeptuiAhSA+IGludmVzdGlnYXRvcjsKK+WRqOe4veeQhiA+IHByZW1pZXJcLXpob3U7Civln7fmlL/pu6ggPiBydWxpbmdcLXBhcnR5Owor5q+N6Kaq56+AID4gbW90aGVyJydzXC1kYXk7CivkuIDkuIvlhZIgPiBhXC1saXR0bGVcLWJpdDsKK+S4jeWDj+ipsSA+IHVucmVhc29uYWJsZTsKK+ikh+ijveWTgSA+IHJlcHJvZHVjdGlvbjsKK+WPuOazleasiiA+IGp1cmlzZGljdGlvbjsKK+S9lOS+v+WunCA+IGFkdmVudGFnZW91czsKK+m8u+S4remalCA+IG5hc2FsXC1zZXB0dW07CivmlrDogZ7omZUgPiBuZXdzXC1zZXJ2aWNlOwor6YGL5YuV6Z6LID4gc3BvcnRzXC1zaG9lczsKK+aguOi9n+eCuCA+IG51Y2xlYXJcLWJvbWI7CivovYnos6zljaEgPiBhXC1kZWJpdFwtY2FyZDsKK+mdouWwjemdoiA+IGZhY2VcLXRvXC1mYWNlOwor6KSH5a+r57SZID4gY2FyYm9uXC1wYXBlcjsKK+S4jeebuOWuuSA+IGluY29tcGF0aWJsZTsKK+aJk+WtlOWZqCA+IGhvbGVcLXB1bmNoZXI7Civku4DpurzmmK8gPiB3aGF0XC1pc1wtXC5cLlwuXD87Civlh7npgI/pj6EgPiBjb25jYXZlXC1sZW5zOwor5Y+k576F6aasID4gYW5jaWVudFwtcm9tZTsKK+S6jOWNgeiQrCA+IDIwMFwtdGhvdXNhbmQ7CivlubTovJXkurogPiB5b3VuZ1wtcGVvcGxlOwor5LmS5LmT55CDID4gdGFibGVcLXRlbm5pczsKK+majue0muW8jyA+IGhpZXJhcmNoaWNhbDsKK+iBveiqqumBjiA+IHRvXC1oZWFyXC1zYWlkOwor6ZeM5bC+54KOID4gYXBwZW5kaWNpdGlzOwor5aSn5LiA5LqbID4gYVwtYml0XC1iaWdnZXI7CivnlJ/nianmiLAgPiBnZXJtXC13YXJmYXJlOwor5bu66Kit5oCnID4gY29uc3RydWN0aXZlOwor5ZaJ5aGe6Z+zID4gZ2xvdHRhbFwtc3RvcDsKK+Wkp+mDveacgyA+IG1ldHJvcG9saXRhbjsKK+acgOS9jum7niA+IGxvd2VzdFwtcG9pbnQ7Civln7rnnaPmlZkgPiBjaHJpc3RpYW5pdHk7CivlronnnKDpha4gPiBtZXRoYXF1YWxvbmU7CivoqabpqZfmgKcgPiBleHBlcmltZW50YWw7CivosrTml4/ljJYgPiBhcmlzdG9jcmF0aWM7CivkupTnmb7okKwgPiBmaXZlXC1taWxsaW9uOwor5Yaw5rSy55+zID4gaWNlbGFuZFwtc3BhcjsKK+aguOi7jeWCmSA+IG51Y2xlYXJcLWFybXM7CivpgJ/oqJjlk6EgPiBzdGVub2dyYXBoZXI7Civnmb3msLTms6UgPiB3aGl0ZVwtY2VtZW50Owor6LGh6IGy6KmeID4gb25vbWF0b3BvZWlhOwor5bmA5qC85byPID4gZnJhbWVcLWZvcm1hdDsKK+ihm+eUn+e0mSA+IHRvaWxldFwtcGFwZXI7CivnlbbmmYLnmoQgPiBvZlwtdGhhdFwtdGltZTsKK+a2iOmYsuagkyA+IGZpcmVcLWh5ZHJhbnQ7CivpgI/mmI7luqYgPiB0cmFuc3BhcmVuY3k7Civlo5PlgJLmgKcgPiBvdmVyd2hlbG1pbmc7CivkuozljYHkuIMgPiB0d2VudHlcLXNldmVuOwor5aSn6KaP5qihID4gbGFyZ2VcLXNjYWxlOwor5bqm6YeP6KGhID4gbWVhc3VyZW1lbnQ7CivoiKrnqbrooZMgPiBhZXJvbmF1dGljczsKK+ioquWVj+iAhSA+IGludGVydmlld2VyOwor5aW95pyL5Y+LID4gZ29vZFwtZnJpZW5kOwor5Zub6Z2i6auUID4gdGV0cmFoZWRyb247Civmi5Tph5jpjJggPiBjbGF3XC1oYW1tZXI7CivnlLPlkb3oqJggPiBkZXV0ZXJvbm9teTsKK+aJjeWklua1gSA+IGJyYWluXC1kcmFpbjsKK+WJteS9nOWKmyA+IG9yaWdpbmFsaXR5Owor55m955+u5pifID4gd2hpdGVcLWR3YXJmOwor5LiN6LSK5oiQID4gZGlzYXBwcm92YWw7CivljYrmnIjliIogPiBzZW1pbW9udGhseTsKK+WCmeeUqOeSsCA+IGJhY2t1cFwtcmluZzsKK+a7tOetlOiBsiA+IHRpY2tcLVwodG9ja1wpOwor5rqr5bqm6KiIID4gdGhlcm1vZ3JhcGg7CivkuI3ph43opoEgPiB1bmltcG9ydGFudDsKK+acieW9semfvyA+IGluZmx1ZW50aWFsOwor55m86Zu75bugID4gcG93ZXJcLXBsYW50Owor5p+P5p6X54mGID4gYmVybGluXC13YWxsOwor5beh6YKP6ImHID4gcGF0cm9sXC1ib2F0Owor5LiN5ZCr57OKID4gdW5hbWJpZ3VvdXM7CivmnKzlnJ/ljJYgPiB0b1wtbG9jYWxpemU7Civlronlhajnh4ggPiBzYWZldHlcLWxhbXA7CivmnInmhI/mgJ0gPiBpbnRlcmVzdGluZzsKK+eql+eOu+eSgyA+IHdpbmRvd1wtcGFuZTsKK+aWsOilv+iYrSA+IG5ld1wtemVhbGFuZDsKK+aVl+ihgOeXhyA+IHNlcHRpY2FlbWlhOwor5YiG5L2I5byPID4gZGlzdHJ1YnV0ZWQ7CivmnInkupvkurogPiBzb21lXC1wZW9wbGU7CivkuI3lkJDmsKMgPiB1bmFzcGlyYXRlZDsKK+aciee2k+mplyA+IGV4cGVyaWVuY2VkOwor55S35pyL5Y+LID4gbWFsZVwtZnJpZW5kOwor55m955qu5pu4ID4gd2hpdGVcLXBhcGVyOwor57+76K2v6ICFID4gaW50ZXJwcmV0ZXI7CivkuI3ms6jmhI8gPiB0aG91Z2h0bGVzczsKK+S/neS4jeS9jyA+IG1vc3RcLWxpa2VseTsKK+W3tOWTiOmmrCA+IHRoZVwtYmFoYW1hczsKK+eZvOmAgeWZqCA+IHRyYW5zbWl0dGVyOwor56ys5LiA56ugID4gY2hhcHRlclwtb25lOwor6YCj55Kw5ZyWID4gY29taWNcLXN0cmlwOwor5Zyo5Zyw5LiLID4gdW5kZXJncm91bmQ7CivlgrPnnJ/mqZ8gPiBmYXhcLW1hY2hpbmU7Civoo53nlLLou4ogPiBhcm1vcmVkXC1jYXI7CivnjbLnm4rogIUgPiBiZW5lZmljaWFyeTsKK+WNiumAj+aYjiA+IHRyYW5zbHVjZW50Owor56ys5LiA5rWBID4gZmlyc3RcLWNsYXNzOwor6KyA5q665qGIID4gbXVyZGVyXC1jYXNlOwor542O5a246YeRID4gc2Nob2xhcnNoaXA7CivkuI3li5XnlKIgPiByZWFsXC1lc3RhdGU7CivllZ/npLrpjIQgPiByZXZlbGF0aW9uczsKK+esrOS4ieaWuSA+IHRoaXJkXC1wYXJ0eTsKK+ihqOiSmeWtkCA+IHdhdGNoXC1nbGFzczsKK+aTuuaetuWtkCA+IHB1dFwtb25cLWFpcnM7CivkuI3norrlrpogPiB1bmNlcnRhaW50eTsKK+WPpOWFuOa0viA+IGNsYXNzaWNpc3RzOwor5Y+v6KGM5oCnID4gZmVhc2liaWxpdHk7CivlkIjms5XljJYgPiB0b1wtbGVnYWxpemU7CivmjqLnhafnh4ggPiBzZWFyY2hsaWdodDsKK+WuieWvp+eJhyA+IG1lcHJvYmFtYXRlOwor5piv5LiN5pivID4gaXNcLW9yXC1pc24nJ3Q7CivlpJrlt6XlmaggPiBtdWx0aXBsZXhlcjsKK+WLnuWLleWKmyA+IGxhYm9yXC1mb3JjZTsKK+iqnuiogOWtuCA+IGxpbmd1aXN0aWNzOwor5bm46YGL5YWSID4gYVwtbHVja3lcLWd1eTsKK+acrOizquS4iiA+IGVzc2VudGlhbGx5Owor5Zyw5LiL5rC0ID4gZ3JvdW5kd2F0ZXI7CivnlLPoq4vmm7ggPiBhcHBsaWNhdGlvbjsKK+aVmeiCsuaApyA+IGluc3RydWN0aXZlOwor57m85om/5qyKID4gaW5oZXJpdGFuY2U7Civoo73niYfkurogPiBtb3ZpZW1ha2luZzsKK+S4jeimgee3iiA+IHVuaW1wb3J0YW50Owor5pWX5a625a2QID4gc3BlbmR0aHJpZnQ7CivlsYDpmZDmgKcgPiBsaW1pdGF0aW9uczsKK+WUruiyqOWToSA+IHNhbGVzcGVyc29uOwor5Y+v5bCK5pWsID4gcmVzcGVjdGFibGU7CivpnZ7mlbjlrZcgPiBub25cLW51bWVyaWM7CivniIbnsbPoirEgPiBwdWZmZWRcLXJpY2U7CivkuInljYHlpKkgPiB0aGlydHlcLWRheXM7CivojIXlsYvpoIIgPiB0aGF0Y2hcLXJvb2Y7CivkuInljYHlm5sgPiB0aGlydHlcLWZvdXI7CivkuI3pgIHmsKMgPiB1bmFzcGlyYXRlZDsKK+aAp+S8tOS+tiA+IHNleFwtcGFydG5lcjsKK+S5s+eZveiJsiA+IG1pbGt5XC13aGl0ZTsKK+auuuS6uuahiCA+IG11cmRlclwtY2FzZTsKK+iTi+eEtuaApyA+IHByb2JhYmlsaXR5Owor5Y+v6IO95oCnID4gcG9zc2liaWxpdHk7CivmiL/lnLDnlKIgPiByZWFsXC1lc3RhdGU7CivnmbvlsbHlrrYgPiBtb3VudGFpbmVlcjsKK+WTsuWtuOWutiA+IHBoaWxvc29waGVyOwor5YiG5pWj5byPID4gZGlzdHJpYnV0ZWQ7Civns7vliJfniYcgPiBmaWxtXC1zZXJpZXM7CivpmL/lr4zmsZcgPiBhZmdoYW5pc3RhbjsKK+a0m+adieejryA+IGxvc1wtYW5nZWxlczsKK+mZsOa2vOiZlSA+IHNoYWR5XC1wbGFjZTsKK+S8uOe4ruaApyA+IGZsZXhpYmlsaXR5Owor6ZaJ5YWD6Z+zID4gY2xvc2VcLXZvd2VsOwor5pyA5aSn5YyWID4gdG9cLW1heGltaXplOwor56ys5Y2B5LiDID4gc2V2ZW50ZWVudGg7Civlk7LlrbjkuIogPiBwaGlsb3NvcGhpYzsKK+WQpuacieaViCA+IGluZWZmaWNpZW50Owor5YyX5pyd6a6uID4gbm9ydGhcLWtvcmVhOwor6Z2I5rS75oCnID4gZmxleGliaWxpdHk7Civkvb/kv6HmnI0gPiB0b1wtY29udmluY2U7Civlj6Ppppnns5YgPiBjaGV3aW5nXC1ndW07Civopb/kuYPlsbEgPiBtb3VudFwtc2luYWk7Civph5Hlsazmnb8gPiBtZXRhbFwtcGxhdGU7CivkuI3lgZrogbIgPiBrZWVwXC1zaWxlbnQ7Civlhannmb7okKwgPiB0d29cLW1pbGxpb247Civkv67nkIblu6AgPiByZXBhaXJcLXNob3A7CivmqZ/li5XmgKcgPiBmbGV4aWJpbGl0eTsKK+WinumVt+eOhyA+IGdyb3d0aFwtcmF0ZTsKK+S7i+ezu+ipniA+IHByZXBvc2l0aW9uOwor5Li75qmf5p2/ID4gbW90aGVyYm9hcmQ7Civku5blgJHpg70gPiBhbGxcLW9mXC10aGVtOwor6aGe5Ly86bueID4gcmVzZW1ibGFuY2U7Civpm5nkurrmiL8gPiBkb3VibGVcLXJvb207Civnvo7ooZPppKggPiBhcnRcLWdhbGxlcnk7CivpgKPmjqXoqZ4gPiBjb25qdW5jdGlvbjsKK+e0hOS8r+iomCA+IGJvb2tcLW9mXC1qb2I7CivmgrLllpzliocgPiB0cmFnaWNvbWVkeTsKK+i7n+ejgeeinyA+IGZsb3BweVwtZGlzazsKK+WNiuWwgeW7uiA+IHNlbWlcLWZldWRhbDsKK+WvpuizquaApyA+IHN1YnN0YW50aXZlOwor6Luf56OB55ukID4gZmxvcHB5XC1kaXNrOwor6K6K5aOT5ZmoID4gdHJhbnNmb3JtZXI7CivomIvmnpzmsYEgPiBhcHBsZVwtanVpY2U7CivmmpfoqJjlhZIgPiBzZWNyZXRcLW1hcms7CivphY3pgIHogIUgPiBkaXN0cmlidXRvcjsKK+mHkemKgOiKsSA+IGhvbmV5c3Vja2xlOwor5YWD6ICB6ZmiID4gdXBwZXJcLWhvdXNlOwor5Y+v5oOz5YOPID4gY29uY2VpdmFibGU7CivorYnmmI7mm7ggPiBjZXJ0aWZpY2F0ZTsKK+S/oeeUqOWNoSA+IGNyZWRpdFwtY2FyZDsKK+Wls+euoeWutiA+IGhvdXNla2VlcGVyOwor5bel56iL5a24ID4gZW5naW5lZXJpbmc7CivmnInlrrPnmoQgPiBkZXN0cnVjdGl2ZTsKK+WkqeeEtuawoyA+IG5hdHVyYWxcLWdhczsKK+S+m+ihgOiAhSA+IGJsb29kXC1kb25vcjsKK+eHn+mkiuWTgSA+IG5vdXJpc2htZW50Owor6YGp5oeJ5oCnID4gc3VpdGFiaWxpdHk7CivlpKnmloflj7AgPiBvYnNlcnZhdG9yeTsKK+mRv+efs+WgtCA+IHJvY2tcLXF1YXJyeTsKK+Wwj+axvei7iiA+IGNvbXBhY3RcLWNhcjsKK+ieuue1suWIgCA+IHNjcmV3ZHJpdmVyOwor5Ymv5L2c55SoID4gc2lkZVwtZWZmZWN0Owor5LqM5Y2B5YSEID4gdHdvXC1iaWxsaW9uOwor56e75qSN5oCnID4gcG9ydGFiaWxpdHk7CivkuozljYHkupQgPiB0d2VudHlcLWZpdmU7CivmspLllY/poYwgPiBub1wtcHJvYmxlbTsKK+esrOS6lOmhniA+IGNhdGVnb3J5XC01Owor6Z2e5a6Y5pa5ID4gdW5vZmZpY2lhbDsKK+Wci+awkem7qCA+IGt1b21pbnRhbmc7Civnmb3oibLpq5QgPiBsZXVjb3BsYXN0Owor5LiN6ICQ54WpID4gaW1wYXRpZW5jZTsKK+eZvuWIhueOhyA+IHBlcmNlbnRhZ2U7Civku6TniYznkrAgPiB0b2tlblwtcmluZzsKK+iHqueZveabuCA+IGNvbmZlc3Npb247CivlsZXopr3mnIMgPiBleGhpYml0aW9uOwor6auY6YCf546HID4gaGlnaFwtc3BlZWQ7CivlpKfln47luIIgPiBtYWpvclwtY2l0eTsKK+WWrOayu+aVpiA+IGdlb3JnZXRvd247Civnmb7liIbmr5QgPiBwZXJjZW50YWdlOwor5YKz6YGT6ICFID4gbWlzc2lvbmFyeTsKK+S4jeWPr+iDvSA+IGltcG9zc2libGU7CivpjITpn7PluLYgPiBhdWRpb1wtdGFwZTsKK+mMq+WuieWxsSA+IG1vdW50XC16aW9uOwor56Gs56OB55ukID4gaGFyZFwtZHJpdmU7Civnmb7liIbmlbggPiBwZXJjZW50YWdlOwor5q235Y+y5LiKID4gaGlzdG9yaWNhbDsKK+iomOW4s+WToSA+IGJvb2trZWVwZXI7Civkvb/lpLHmnJsgPiBkaXNhcHBvaW50Owor5om/5YyF5Lq6ID4gY29udHJhY3RvcjsKK+eJqeizquS4iiA+IG1hdGVyaWFsbHk7CivljYrlhazplosgPiBzZW1pXC1vdmVydDsKK+S9v+WFjemZpCA+IGdldFwtcmlkXC1vZjsKK+abtOiho+WupCA+IGNoYW5nZXJvb207CivotoXlqpLpq5QgPiBoeXBlcm1lZGlhOwor5LiN5piO56K6ID4gaW5kZWZpbml0ZTsKK+S4jeaZr+awoyA+IGRlcHJlc3Npb247Civos4fmnKzlrrYgPiBjYXBpdGFsaXN0Owor5LqM5omL6LKoID4gc2Vjb25kaGFuZDsKK+WCs+aVmeWjqyA+IG1pc3Npb25hcnk7CivmmJPmjqXov5EgPiBhY2Nlc3NpYmxlOwor5oOz5YOP5YqbID4gY29uY2VwdGlvbjsKK+acieaxuuW/gyA+IGRldGVybWluZWQ7CivmqYTmrJbmqLkgPiBvbGl2ZVwtdHJlZTsKK+eIreirlum7niA+IGNvbnRlbnRpb247CivopIfpm5zmgKcgPiBjb21wbGV4aXR5Owor5aW254mb5aC0ID4gZGFpcnlcLWZhcm07CivlrZfnr4DmlbggPiBieXRlXC1jb3VudDsKK+WHuueUn+WcsCA+IGJpcnRocGxhY2U7CivkuI3kuIvkuo4gPiBhc1wtbWFueVwtYXM7CivlpKflqpLpq5QgPiBtYWNyb21lZGlhOwor5YKZ5b+Y6YyEID4gbWVtb3JhbmR1bTsKK+aMqOWAi+WFkiA+IG9uZVwtYnlcLW9uZTsKK+WFhOW8n+acgyA+IGZyYXRlcm5pdHk7CivnlZnogbLmqZ8gPiBncmFtb3Bob25lOwor6buR6I6T5a2QID4gYmxhY2tiZXJyeTsKK+e1seioiOWtuCA+IHN0YXRpc3RpY3M7CivlnKjkuIvpnaIgPiB1bmRlcm5lYXRoOwor5LiN6K6K5YyWID4gaW52YXJpYWJseTsKK+mZjOeUn+S6uiA+IGFcLXN0cmFuZ2VyOwor5LiN6YGp55W2ID4gaW5hZGVxdWF0ZTsKK+mbu+imluiHuiA+IHR2XC1zdGF0aW9uOwor5Li75Yqb6ImmID4gYmF0dGxlc2hpcDsKK+ihjOS4jemAmiA+IHdvbicndFwtd29yazsKK+ertueIreiAhSA+IGNvbXBldGl0b3I7CivmnInns7vntbEgPiBzeXN0ZW1hdGljOwor55+t5pmC6ZaTID4gc2hvcnRcLXRlcm07CivmspLkurrkvY8gPiB1bm9jY3VwaWVkOwor5YuV54mp5a24ID4gem9vbG9naWNhbDsKK+ebp+ajruWgoSA+IGx1eGVtYm91cmc7CivnrKzkuIPljYEgPiBzZXZlbnRpZXRoOwor5Yaw5Yed5ZmoID4gY3J5b3Bob3J1czsKK+W/g+eQhuWtuCA+IHBzeWNob2xvZ3k7CivmsKPllpjllpggPiBicmVhdGhsZXNzOwor56ys5LiA5L6LID4gZmlyc3RcLWNhc2U7CivmkanlpKnmkZ8gPiBza3lzY3JhcGVyOwor5LiN6YCP5rC0ID4gd2F0ZXJwcm9vZjsKK+W+l+S4jeWIsCA+IGNhbm5vdFwtZ2V0Owor6YeN6KaB5oCnID4gaW1wb3J0YW5jZTsKK+aKgOihk+WToSA+IHRlY2huaWNpYW47CivpnZ7mraPlvI8gPiB1bm9mZmljaWFsOwor5ZGo5oGp5L6GID4gemhvdVwtZW5sYWk7CivmnInoiIjotqMgPiBpbnRlcmVzdGVkOwor5LiN57aT5oSPID4gY2FyZWxlc3NseTsKK+aJk+Wtl+apnyA+IHR5cGV3cml0ZXI7CivlgI3lop7lmaggPiBtdWx0aXBsaWVyOwor6YeR5bGs57eaID4gbWV0YWxcLXdpcmU7CivmnInohr3ph48gPiBjb3VyYWdlb3VzOwor6K2Y5Yil6JmfID4gaWRlbnRpZmllcjsKK+eUn+acieasiiA+IGJpcnRocmlnaHQ7CivmjIHljaHkurogPiBjYXJkaG9sZGVyOwor5Yi657mh5ZOBID4gZW1icm9pZGVyeTsKK+avm+a+pOadsSA+IG1hb1wtemVkb25nOwor5YWt5Y2B5LqUID4gc2l4dHlcLWZpdmU7CivlpJrlqpLpq5QgPiBtdWx0aW1lZGlhOwor5LiN5bmz5bi4ID4gcmVtYXJrYWJsZTsKK+aKteaKl+WKmyA+IHJlc2lzdGFuY2U7CivlpKfkuLvmlZkgPiBhcmNoYmlzaG9wOwor6Kmm566X6KGoID4gc3BlYWRzaGVldDsKK+eZveWPo+mQtSA+IHdoaXRlXC1pcm9uOwor56ys5Y2B5YWrID4gZWlnaHRlZW50aDsKK+Wvpumpl+WupCA+IGxhYm9yYXRvcnk7CivnrKzljYHkuZ0gPiBuaW5ldGVlbnRoOwor56ys5Y2B5LiJID4gdGhpcnRlZW50aDsKK+apn+mXnOi7iiA+IGxvY29tb3RpdmU7Civkv53mvZTnrrEgPiBsaXR0ZXJcLWJpbjsKK+iAgeW5tOS6uiA+IG9sZFwtcGVvcGxlOwor55m86IGy5rOVID4gaW50b25hdGlvbjsKK+itmOWIpeeivCA+IGlkZW50aWZpZXI7CivkuI3lubPlh6EgPiBtYXJ2ZWxsb3VzOwor5bSR5bSZ5bGxID4gbXRcLlwta3VubHVuOwor5Luj6KGo5ZyYID4gZGVsZWdhdGlvbjsKK+W9seWDj+aqlCA+IGltYWdlXC1maWxlOwor5bGF5L2P6ICFID4gaW5oYWJpdGFudDsKK+WCs+afk+eXhSA+IHBlc3RpbGVuY2U7CivnrKboqJjnkrAgPiB0b2tlblwtcmluZzsKK+Wbm+eZvuWEhCA+IDQwXC1iaWxsaW9uOwor55un5rWu5a6uID4gdGhlXC1sb3V2cmU7CivlkKbmsbrmrIogPiB2ZXRvXC1wb3dlcjsKK+W0h+aLnOiAhSA+IHdvcnNoaXBwZXI7CivmiLLliofljJYgPiB0aGVhdHJpY2FsOwor5ZWE5pyo6bOlID4gd29vZHBlY2tlcjsKK+mdnuebiOWIqSA+IG5vblwtcHJvZml0Owor5L2/5a655piTID4gZmFjaWxpdGF0ZTsKK+eglOeptuWToSA+IHJlc2VhcmNoZXI7Civnm67mk4rogIUgPiBleWV3aXRuZXNzOwor5bCI6ZaA5YyWID4gc3BlY2lhbGl6ZTsKK+aRqeaJmOi7iiA+IG1vdG9yY3ljbGU7CivmjInmiYvnpq4gPiBvcmRpbmF0aW9uOwor6KiC6LO86ICFID4gc3Vic2NyaWJlcjsKK+mhr+W+rumPoSA+IG1pY3Jvc2NvcGU7Civljp/nlJ/os6ogPiBwcm90b3BsYXNtOwor5aSa5pa56Z2iID4gbWFueVwtc2lkZWQ7CivmnIPplbflnJggPiBwcmVzaWRlbmN5Owor5paw6IGe5a24ID4gam91cm5hbGlzbTsKK+S4jeWumuipniA+IGluZmluaXRpdmU7CivlpKfmsKPlsaQgPiBhdG1vc3BoZXJlOwor5LiN57Ch5ZauID4gbm90XC1zaW1wbGU7Civlj5flgrflrrMgPiBiZVwtaW5qdXJlZDsKK+err+ezu+e1sSA+IGVuZFwtc3lzdGVtOwor5Luj5pu/6ICFID4gc3Vic3RpdHV0ZTsKK+S4ieeZvuWEhCA+IDMwXC1iaWxsaW9uOwor6Z2e5bCN56ixID4gYXN5bW1ldHJpYzsKK+eEoeeFmeeFpCA+IGFudGhyYWNpdGU7CivljYrmsbros70gPiBzZW1pZmluYWxzOwor6I6r6aCI5pyJID4gZ3JvdW5kbGVzczsKK+S4jeiyt+izrCA+IG5vdFwtYnV5XC1pdDsKK+Wls+WtuOeUnyA+IHNjaG9vbGdpcmw7CivkuI3oh6rlnKggPiB1bmVhc2luZXNzOwor5LiL5YCL5pyIID4gbmV4dFwtbW9udGg7Civpj4jot6/lsaQgPiBsaW5rXC1sYXllcjsKK+S4jeeUseW+lyA+IGNhbicndFwtaGVscDsKK+a6q+WSjOaApyA+IHRlbmRlcm5lc3M7CivmiYDmnInogIUgPiBwcm9wcmlldG9yOwor5LiK5YCL5pyIID4gbGFzdFwtbW9udGg7CivljYrnqbrkuK0gPiBpblwtbWlkXC1haXI7CivkuI3nrYnlvI8gPiBpbmVxdWFsaXR5Owor5pqX6ZaT5YWSID4gaW5uZXJcLXJvb207Civoh6rli5XljJYgPiBhdXRvbWF0aW9uOwor5Zau5pa56Z2iID4gdW5pbGF0ZXJhbDsKK+mBi+WLleWgtCA+IHBsYXlncm91bmQ7CivpmYTliqDniakgPiBjb21wbGVtZW50Owor5L2b5pWZ5b6SID4gYVwtYnVkZGhpc3Q7Civmk43oiLXlrqQgPiBwaWxvdGhvdXNlOwor6Zu75ZSx5qmfID4gcGhvbm9ncmFwaDsKK+a1geeoi+WcliA+IGZsb3dcLWNoYXJ0Owor55uj552j6ICFID4gc3VwZXJ2aXNvcjsKK+aJgOacieeJqSA+IGJlbG9uZ2luZ3M7CivkuozljYHkuIAgPiB0d2VudHlcLW9uZTsKK+epqeWumuaApyA+IHN0YWJpbGl0eTsKK+mAo+aOpeWZqCA+IGNvbm5lY3RvcjsKK+W9ouWuuei+rSA+IGFkamVjdGl2ZTsKK+WPr+W+l+WIsCA+IGF2YWlsYWJsZTsKK+enkeWtuOWutiA+IHNjaWVudGlzdDsKK+W/l+mhmOiAhSA+IHZvbHVudGVlcjsKK+aTpumCiueQgyA+IGVkZ2VcLWJhbGw7CivmgI7purzmqKMgPiBob3dcLWFib3V0Owor5omA5pyJ5qyKID4gb3duZXJzaGlwOwor55m95aCx57SZID4gbmV3c3ByaW50Owor6KiO6KuW5pyDID4gc3ltcG9zaXVtOwor5o6l5Y+X6ICFID4gcmVjaXBpZW50Owor5b2i5a656KmeID4gYWRqZWN0aXZlOwor5q+P5YCL5Lq6ID4gZXZlcnlib2R5Owor5LiN6IKy5oCnID4gc3RlcmlsaXR5Owor5qqi5p+l5ZOhID4gaW5zcGVjdG9yOwor6KGo54++5Z6LID4gcGhlbm90eXBlOwor55qu6Z6L5YygID4gc2hvZW1ha2VyOwor5L+d6K236ICFID4gcHJvdGVjdG9yOwor5YG95ZCb5a2QID4gaHlwb2NyeXRlOwor6IGy5piO5pu4ID4gc3RhdGVtZW50Owor6aas6LmE6ZC1ID4gaG9yc2VzaG9lOwor5pOU5p625bqKID4gc3RyZXRjaGVyOwor5LiN5a6M5ZaEID4gaW1wZXJmZWN0Owor5pm06Zuo6KGoID4gYmFyb21ldGVyOwor5Y2D56an5bm0ID4gbWlsbGVuaXVtOwor5L2/6JST5bu2ID4gdG9cLXNwcmVhZDsKK+aOpeePreS6uiA+IHN1Y2Nlc3NvcjsKK+WJquiyvOewvyA+IHNjcmFwYm9vazsKK+WBieaZtuWyqSA+IHBlZ21hdGl0ZTsKK+aMh+ekuuespiA+IGluZGljYXRvcjsKK+S/neaDoOW4qyA+IGNvbWZvcnRlcjsKK+W7uuevieW4qyA+IGFyY2hpdGVjdDsKK+WnlOWToeacgyA+IGNvbW1pdHRlZTsKK+iIqua1t+iAhSA+IG5hdmlnYXRvcjsKK+Wwj+WQg+W6lyA+IHNuYWNrXC1iYXI7Civntq3lo6vljaEgPiB2aXNhXC1jYXJkOwor5aW95aWH5b+DID4gY3VyaW9zaXR5Owor5pS/5rK75oCnID4gcG9saXRpY2FsOwor5ruR6byg5aKKID4gbW91c2VcLXBhZDsKK+aLnOeJqeaVmSA+IGZldGlzaGlzbTsKK+S9jumAn+eOhyA+IGxvd1wtc3BlZWQ7CivmlL/msrvlsYAgPiBwb2xpdGJ1cm87Civpm7bllK7llYYgPiB0cmFkZXNtYW47CivmlL/msrvlrrYgPiBzdGF0ZXNtYW47CivlronlhajluLYgPiBzZWF0XC1iZWx0Owor55m75buj5ZGKID4gYWR2ZXJ0aXNlOwor5pyJ5rS75YqbID4gZW5lcmdldGljOwor6aaZ5qqz6YWSID4gY2hhbXBhZ25lOwor57ac5ZCI5oCnID4gc3ludGhlc2lzOwor5pGB6YeY5YWSID4gdGh1bWJ0YWNrOwor5paH5YW35ZWGID4gc3RhdGlvbmVyOwor5paw5Yqg5Z2hID4gc2luZ2Fwb3JlOwor6aCY5LqL6aSoID4gY29uc3VsYXRlOwor6LaF6IGv57WQID4gaHlwZXJsaW5rOwor5L+d55qH6buoID4gcm95YWxpc3RzOwor5p2x5YyX5pa5ID4gbm9ydGhlYXN0Owor5aW96JCK5aGiID4gaG9sbHl3b29kOwor5oyB5LmF5oCnID4gY29uc3RhbmN5Owor55m96KGA55eFID4gbGV1a2FlbWlhOwor5YWo5LiW55WMID4gd29ybGR3aWRlOwor57m85om/6ICFID4gc3VjY2Vzc29yOwor5oqX6K2w6ICFID4gcHJvdGVzdGVyOwor6KGj5bi96ZaTID4gY2xvYWtyb29tOwor5LiA5Yy56aasID4gb25lXC1ob3JzZTsKK+acieaZguWAmSA+IHNvbWV0aW1lczsKK+WAmemBuOS6uiA+IGNhbmRpZGF0ZTsKK+WQkeWMl+WcsCA+IG5vcnRod2FyZDsKK+S4i+axuuW/gyA+IGRldGVybWluZTsKK+S/neitieS6uiA+IGd1YXJhbnRvcjsKK+S4iuaYn+acnyA+IGxhc3RcLXdlZWs7CivnrKzkuozljYEgPiB0d2VudGlldGg7CivnnaHpgY7poK0gPiBvdmVyc2xlZXA7CivliKnmnKroqJggPiBsZXZpdGljdXM7Civnq6XlrZDou40gPiBib3lcLXNjb3V0Owor5Zub5Y2B5YWtID4gZm9ydHlcLXNpeDsKK+esrOS5neWNgSA+IG5pbmV0aWV0aDsKK+i7iuWJjeeHiCA+IGhlYWRsaWdodDsKK+Wuh+iIquWToSA+IGFzdHJvbmF1dDsKK+S9v+WbsOeqmCA+IGVtYmFycmFzczsKK+W3p+WFi+WKmyA+IGNob2NvbGF0ZTsKK+aciembhOW/gyA+IGFtYml0aW91czsKK+iZleeQhuWZqCA+IHByb2Nlc3NvcjsKK+efpeabtOmzpSA+IHJlZGJyZWFzdDsKK+WVn+ekuuiAhSA+IHJldmVsYXRvcjsKK+esrOS4ieWNgSA+IHRoaXJ0aWV0aDsKK+eZvemOouekpiA+IHNjaGVlbGl0ZTsKK+aJi+aPkOWMhSA+IFwoaGFuZFwpYmFnOwor5oqA6KGT5oCnID4gdGVjaG5pY2FsOwor5LiN6Kqg5a+mID4gZGlzaG9uZXN0Owor6LGM6LGG57KlID4gcGVhXC1ncnVlbDsKK+iuiua1geWZqCA+IGNvbnZlcnRlcjsKK+a9m+awtOiJhyA+IHN1Ym1hcmluZTsKK+aJs+mBk+WToSA+IHBvaW50c21hbjsKK+e5vOS7u+iAhSA+IHN1Y2Nlc3NvcjsKK+WFqeaYn+acnyA+IGZvcnRuaWdodDsKK+agvOW8j+WMliA+IHRvXC1mb3JtYXQ7CivmjqHnn7PloLQgPiBzdG9uZVwtcGl0Owor5Yqg5YuS5q+UID4gY2FyaWJiZWFuOwor6Zu75aCx5qmfID4gdGVsZWdyYXBoOwor5bel5L2c6KGoID4gd29ya3NoZWV0Owor5pq06aKo6ZuqID4gc25vd3N0b3JtOwor5pq06aKo6ZuoID4gcmFpbnN0b3JtOwor5paH5a2X5qqUID4gdGV4dFwtZmlsZTsKK+iyv+aYk+aIsCA+IHRyYWRlXC13YXI7Civkv53oqLzkurogPiBndWFyYW50b3I7CivlpYnmib/ogIUgPiBmbGF0dGVyZXI7CivmjIfmj67ogIUgPiBjb25kdWN0b3I7Civlj4PogIPmm7ggPiByZWZlcmVuY2U7Civph53lsI3mgKcgPiBkaXJlY3Rpb247CivljYroobDmnJ8gPiBoYWxmXC1saWZlOwor5ouJ5paQ54m5ID4gbGFmYXlldHRlOwor6KaB5LiN54S2ID4gb3RoZXJ3aXNlOwor5LiN57WQ5p6cID4gZnJ1aXRsZXNzOwor55Sz6KuL5Lq6ID4gYXBwbGljYW50Owor5Ye654mI6ICFID4gcHVibGlzaGVyOwor5pys5pif5pyfID4gdGhpc1wtd2VlazsKK+aAquS4jeW+lyA+IG5vXC13b25kZXI7CivlibXpgKDlipsgPiBpbmdlbnVpdHk7Civlj6/lrrnlv40gPiB0b2xlcmFibGU7Civln7rmnKzkuIogPiBiYXNpY2FsbHk7CivnqLvojYnkurogPiBzY2FyZWNyb3c7CivlpJrnlKjmiLYgPiBtdWx0aXVzZXI7Civnvr3mr5vnkIMgPiBiYWRtaW50b247CivmlZHorbfou4ogPiBhbWJ1bGFuY2U7CivnrKzljYHlha0gPiBzaXh0ZWVudGg7Civkvb/nlJ/msKMgPiBkaXNwbGVhc2U7CivkuI3lhazmraMgPiBpbmp1c3RpY2U7CivlhYnlsITnt5ogPiBsaWdodFwtcmF5Owor5aSW5ZyL5Lq6ID4gZm9yZWlnbmVyOwor56ys5Y2B5LqUID4gZmlmdGVlbnRoOwor6Zi/5qC55bu3ID4gYXJnZW50aW5hOwor5YG95ZaE6ICFID4gaHlwb2NyaXRlOwor6J665peL5qezID4gcHJvcGVsbGVyOwor6LKv5rC06JmVID4gcmVzZXJ2b2lyOwor5Y2K5rWB6auUID4gc2VtaWZsdWlkOwor5b6B5pyN6ICFID4gY29ucXVlcm9yOwor5o2V6byg5ZmoID4gbW91c2V0cmFwOwor6K6K6Imy6b6NID4gY2hhbWVsZW9uOwor5bCN5oqX6ICFID4gYWR2ZXJzYXJ5Owor6JaE5rK55bGkID4gb2lsXC1zaGVldDsKK+eEoeefpeimuiA+IHNlbnNlbGVzczsKK+awo+Wjk+ioiCA+IGJhcm9tZXRlcjsKK+eZveS6keavjSA+IG11c2Nvdml0ZTsKK+W9q+WIu+WTgSA+IHNjdWxwdHVyZTsKK+aWsOiBnueVjCA+IHRoZVwtcHJlc3M7CivkuIDljYPlmbggPiAxMDAwXC10b25zOwor5LiN6KaP5YmHID4gaXJyZWd1bGFyOwor5rOi54uA6ZuyID4gdW5kdWxhdHVzOwor5pO06Z+z5ZmoID4gbWVnYXBob25lOwor5LiN6KaL5LqGID4gZGlzYXBwZWFyOwor5Lmd5pyI5Lu9ID4gc2VwdGVtYmVyOwor6LaF5paH5pysID4gaHlwZXJ0ZXh0Owor6K6A5pu45Lq6ID4gYVwtc2Nob2xhcjsKK+aMh+aPruWumCA+IGNvbW1hbmRlcjsKK+W8leeUqOWPpSA+IHF1b3RhdGlvbjsKK+WNg+i1q+iMsiA+IGtpbG9oZXJ0ejsKK+WFq+WAjemrlCA+IG9jdG9wbG9pZDsKK+iiq+emgeatoiA+IGZvcmJpZGRlbjsKK+S4jeiHqueEtiA+IHVubmF0dXJhbDsKK+mrmOenkeaKgCA+IGhpZ2hcLXRlY2g7CivmgKrniankvLwgPiBtb25zdHJvdXM7CivlhrDmo43lhZIgPiBpY2VcLWxvbGx5Owor55m954+t5YWSID4gZGF5XC1zaGlmdDsKK+aYn+acn+S4iSA+IHdlZG5lc2RheTsKK+mHjuigu+S6uiA+IGJhcmJhcmlhbjsKK+WNgeWtl+i7jSA+IGNydXNhZGVyczsKK+azleWci+S6uiA+IGZyZW5jaG1hbjsKK+S6lOWNg+WZuCA+IDUwMDBcLXRvbnM7CivpgYfpm6PoiLkgPiBzaGlwd3JlY2s7Civlh7rluK3ogIUgPiBhdHRlbmRhbnQ7Civnvornmq7ntJkgPiBwYXJjaG1lbnQ7Civlj43oiaboiYcgPiBhbnRpXC1zaGlwOwor5YWn6KGj6KSyID4gdW5kZXJ3ZWFyOwor5b+F6ZyA5ZOBID4gbmVjZXNzaXR5Owor5Yaw5reH5reLID4gaWNlXC1jcmVhbTsKK+efs+eBsOefsyA+IGxpbWVzdG9uZTsKK+S/rumBk+mZoiA+IG1vbmFzdGVyeTsKK+ilv+WMl+aWuSA+IG5vcnRod2VzdDsKK+acm+mBoOmPoSA+IHRlbGVzY29wZTsKK+i2heaWh+S7tiA+IGh5cGVydGV4dDsKK+aTuuioreWFkiA+IG9ybmFtZW50czsKK+WkquWlveS6hiA+IHZlcnlcLWdvb2Q7CivmnKzlubTluqYgPiB0aGlzXC15ZWFyOwor5b+D6Z2I5LiKID4gc3Bpcml0dWFsOwor5aSp5paH5a24ID4gYXN0cm9ub215Owor5be05q+U5aalID4gYmFyYml0b25lOwor5a+m6LOq5LiKID4gdmlydHVhbGx5Owor5pyJ56+A5Yi2ID4gdGVtcGVyYXRlOwor5pyJ5oSP6K2YID4gY29uc2Npb3VzOwor5Y+X5a6z6ICFID4gY2FzdWx0aWVzOwor5LiN5a6M576OID4gZGVmZWN0aXZlOwor5oOF57eS5YyWID4gZW1vdGlvbmFsOwor5pSv5oyB6ICFID4gc3VwcG9ydGVyOwor5pW45LiN55uhID4gY291bnRsZXNzOwor5YCf5pu45ZauID4gYm9va1wtc2xpcDsKK+acieemruiyjCA+IGNvdXJ0ZW91czsKK+esrOWFq+WNgSA+IGVpZ2h0aWV0aDsKK+mHjOeoi+eikSA+IG1pbGVzdG9uZTsKK+S4jeaDhemhmCA+IHVud2lsbGluZzsKK+S4i+Wumue+qSA+IHRvXC1kZWZpbmU7CivlsI3kuI3otbcgPiBpJydtXC1zb3JyeTsKK+WBh+ixoeeJmSA+IGNlbGx1bG9pZDsKK+mZjeiQveWCmCA+IHBhcmFjaHV0ZTsKK+S4jeiCsueXhyA+IHN0ZXJpbGl0eTsKK+W/heimgeaApyA+IG5lY2Vzc2l0eTsKK+aVuOS4jea4hSA+IGNvdW50bGVzczsKK+izvOiyt+iAhSA+IHB1cmNoYXNlcjsKK+Wkp+aVmeWggiA+IGNhdGhlZHJhbDsKK+e1hOe5lOiAhSA+IG9yZ2FuaXplcjsKK+iBlui/reWTpSA+IHNhblwtZGllZ287CivplbfmlrnlvaIgPiByZWN0YW5nbGU7CivnlJ/mrpblipsgPiBmZXJ0aWxpdHk7CivngbDnjbXniqwgPiBncmV5aG91bmQ7Civnv5LmhaPmgKcgPiBjdXN0b21hcnk7Civnmb3lhafpmpwgPiBjYXRhcmFjdDsKK+Wkp+evt+i7iiA+IHNjaG9vbmVyOwor55uj6K235Lq6ID4gZ3VhcmRpYW47CivkuI3lkIjpgakgPiBpbXByb3BlcjsKK+ingOWvn+iAhSA+IG9ic2VydmVyOwor6Jel5YqR5aOrID4gZHJ1Z2dpc3Q7CivkuI3kv6Hku7sgPiBtaXN0cnVzdDsKK+WboOeJuee2siA+IGludGVybmV0Owor5bCN56ix5oCnID4gc3ltbWV0cnk7CivmqqLmuKzlmaggPiBkZXRlY3RvcjsKK+mtlOihk+W4qyA+IG1hZ2ljaWFuOwor5LiN5py955qEID4gaW1tb3J0YWw7Civmrbflj7LmgKcgPiBoaXN0b3JpYzsKK+aquOaqrOawtCA+IGxlbW9uYWRlOwor5Lul5aSq57ayID4gZXRoZXJuZXQ7CivosqDph43mk5QgPiBidXJkZW5lZDsKK+aOoua4rOWZqCA+IGRldGVjdG9yOwor5Y2B5LqM5pyIID4gZGVjZW1iZXI7Civmk6bntrLnkIMgPiBuZXRcLWJhbGw7CivogZbkv53nvoUgPiBzdFwuXC1wYXVsOwor6KW/6KOh54i+ID4gY3lyaWxsaWM7CivlpbPlranlhZIgPiBkYXVnaHRlcjsKK+acieW+t+ihjCA+IHZpcnR1b3VzOwor5Y+v5pOm5a+rID4gZXJhc2FibGU7CivniafnvorogIUgPiBzaGVwaGVyZDsKK+acgOWWnOaEmyA+IGZhdm9yaXRlOwor562G6KiY5pysID4gbm90ZWJvb2s7CivolrDooaPojYkgPiBsYXZlbmRlcjsKK+S4jeW/heimgSA+IG5lZWRsZXNzOwor6KuL6aGY5pu4ID4gcGV0aXRpb247CivmipXos4fogIUgPiBpbnZlc3RvcjsKK+WvhOeUn+eJqSA+IHBhcmFzaXRlOwor6IKv5aGU5Z+6ID4ga2VudHVja3k7Civmn6zln5Tlr6ggPiBjYW1ib2RpYTsKK+S4gOWwj+aZgiA+IG9uZVwtaG91cjsKK+S6uuihjOmBkyA+IHNpZGV3YWxrOwor5a6J5YWo5oCnID4gc2VjdXJpdHk7Civlho3kv53oqLwgPiByZWFzc3VyZTsKK+aUv+ayu+WtuCA+IHBvbGl0aWNzOwor6KeA5a+f5a62ID4gb2JzZXJ2ZXI7Civpm57lsL7phZIgPiBjb2NrdGFpbDsKK+aphOaslueQgyA+IGZvb3RiYWxsOwor5bmz5bqV6Y2LID4gc2F1Y2VwYW47CivntIDlv7XnopEgPiBtb251bWVudDsKK+S+teWFpeiAhSA+IGludHJ1ZGVyOwor5pS56Z2p6ICFID4gcmVmb3JtZXI7CivmiYvmj5DnrrEgPiBzdWl0Y2FzZTsKK+S4jeWQjOaEjyA+IGRpc2FncmVlOwor5YWx5ZKM5ZyLID4gcmVwdWJsaWM7Civmo5Lno6jmqZ8gPiByb2RcLW1pbGw7Civmr5Tnm67prZogPiBmbGF0ZmlzaDsKK+Wkp+WxoOauuiA+IG1hc3NhY3JlOwor5bCP5aSc5puyID4gc2VyZW5hZGU7CivlsI/mqJnpoYwgPiBzdWJ0aXRsZTsKK+acieapn+mrlCA+IG9yZ2FuaXNtOwor5q276KGa6KGVID4gZGVhZFwtZW5kOwor5Lqk6Z+/5puyID4gc3ltcGhvbnk7CivmmYLplpPooaggPiBzY2hlZHVsZTsKK+mgreWQkeWJjSA+IGhlYWRsb25nOwor5o6i6Zqq6ICFID4gZXhwbG9yZXI7Civlj5fpm6PogIUgPiBzdWZmZXJlcjsKK+W3tOaLieWcrSA+IHBhcmFndWF5Owor56ys5LiA5q2lID4gc3RlcFwtb25lOwor6Kq/5ZGz5rGBID4gZHJlc3Npbmc7Civmlbjmk5rluqsgPiBkYXRhYmFzZTsKK+WCteasiuS6uiA+IGNyZWRpdG9yOwor5byf5YWE5YCRID4gYnJldGhyZW47CivlsI/oqqrlrrYgPiBub3ZlbGlzdDsKK+esrOS6lOWNgSA+IGZpZnRpZXRoOwor5LiJ5piO5rK7ID4gc2FuZHdpY2g7CivlgqzljJblipEgPiBjYXRhbHlzdDsKK+a2iOiyu+iAhSA+IGNvbnN1bWVyOwor54mn576K5Lq6ID4gc2hlcGhlcmQ7CivmnInlvYjmgKcgPiBmbGV4aWJsZTsKK+e2k+mZuOi3ryA+IG92ZXJsYW5kOwor5Zyo5oi25aSWID4gb3V0ZG9vcnM7Civmk6bmo5LnkIMgPiBmb3VsXC10aXA7CivkuK3kuJbntIAgPiBtZWRpZXZhbDsKK+WCvuiBveiAhSA+IGxpc3RlbmVyOwor5o6l5pS25ZmoID4gcmVjZWl2ZXI7Civos4fmlpnluqsgPiBkYXRhYmFzZTsKK+auuuS6uueKryA+IG11cmRlcmVyOwor6JGh6JCE54mZID4gcG9ydHVnYWw7CivkuI3mraPluLggPiBhYm5vcm1hbDsKK+WFp+mDqOe2siA+IGludHJhbmV0Owor5LiN6YCP5rCjID4gYWlydGlnaHQ7CivmmpbmsKPmqZ8gPiByYWRpYXRvcjsKK+mYv+iCr+iJsiA+IGFya2Fuc2FzOwor5pWZ56eR5pu4ID4gdGV4dGJvb2s7CivpvJPlkLnogIUgPiBhZHZvY2F0ZTsKK+WcsOS4i+WupCA+IGJhc2VtZW50Owor5aSn6IKa5a2QID4gcHJlZ25hbnQ7CivkuI3pgY7mhI8gPiBiZVwtc29ycnk7CivlhpLniq/ogIUgPiBvZmZlbmRlcjsKK+S/neecn+W6piA+IGZpZGVsaXR5Owor5LiN6auU6Z2iID4gc2hhbWVmdWw7CivlsI/ooZ3nqoEgPiBza2lybWlzaDsKK+aOkuawtOa4oCA+IGRyYWluYWdlOwor6bq76YaJ5YqRID4gbmFyY290aWM7CivooqvkvrXlrrMgPiBzdHJpY2tlbjsKK+ioiOeul+apnyA+IGNvbXB1dGVyOwor55m95pyo6ICzID4gdHJlbWVsbGE7Civnjajoo4HogIUgPiBkaWN0YXRvcjsKK+iomOmMhOWToSA+IHJlY29yZGVyOwor6JiH5qC86JitID4gc2NvdGxhbmQ7CivokaHokITlnJIgPiB2aW5leWFyZDsKK+S9v+iIiOWlriA+IGV4Y2l0aW5nOwor56ys5Y2B5LiAID4gZWxldmVudGg7CivmlrnnqIvlvI8gPiBlcXVhdGlvbjsKK+eEoee3mumbuyA+IHdpcmVsZXNzOwor5b2r5Yi75a62ID4gc2N1bHB0b3I7Civlt6XllYbnlYwgPiBpbmR1c3RyeTsKK+mYv+aJmOWTgSA+IGF0cm9waW5lOwor5Zyw5Y2A5oCnID4gcmVnaW9uYWw7Civoo53po77niakgPiBvcm5hbWVudDsKK+S4ieinkuW9oiA+IHRyaWFuZ2xlOwor6KqY5ouQ6ICFID4gYWJkdWN0b3I7CivmiLLliofmgKcgPiBkcmFtYXRpYzsKK+aHsue9sOaApyA+IHB1bml0aXZlOwor5YWr6KeS5qWTID4gYWxhbmdpdW07CivljJfmtbfpgZMgPiBob2trYWlkbzsKK+S9juaIkOacrCA+IGxvd1wtY29zdDsKK+aYjuS/oeeJhyA+IHBvc3RjYXJkOwor5pWR6LSW5Li7ID4gcmVkZWVtZXI7CivnlJ/lkb3lipsgPiB2aXRhbGl0eTsKK+aJgOWcqOWcsCA+IGxvY2F0aW9uOwor55Si6YeP5aSaID4gZnJ1aXRmdWw7CivnnIvlrojogIUgPiB3YXRjaG1hbjsKK+S9lOmgmOiAhSA+IG9jY3VwYW50Owor5pqX5Zyw6KOhID4gc2VjcmV0bHk7CivkvY7osrvnlKggPiBsb3dcLWNvc3Q7Civkvb/lkIPpqZogPiBhc3RvbmlzaDsKK+W5uOWtmOiAhSA+IHN1cnZpdm9yOwor5L2/6aet5oCVID4gZnJpZ2h0ZW47Civmq7voirHojYkgPiBwcmltcm9zZTsKK+aYn+acn+WbmyA+IHRodXJzZGF5Owor5rG65a6a5oCnID4gZGVjaXNpdmU7Civml6XogLPmm7wgPiBnZXJtYW5pYzsKK+W5vuS9leWtuCA+IGdlb21ldHJ5Owor5YK+5ZCR5pa8ID4gcHJvbmVcLXRvOwor55Sf6YKE6ICFID4gc3Vydml2b3I7CivmmJ/mnJ/lha0gPiBzYXR1cmRheTsKK+mYsuWuiOiAhSA+IGRlZmVuZGVyOwor5pyJ5YO55YC8ID4gdmFsdWFibGU7CivliLrmv4DniakgPiBzdGltdWx1czsKK+S4jeS/oeeUqCA+IGRpc3RydXN0Owor5o+Q5L6b6Ku4ID4gcHJvdmlkZXI7Civlt6XnqIvluKsgPiBlbmdpbmVlcjsKK+S4ree5vOWZqCA+IHJlcGVhdGVyOwor5rSL55C155C2ID4gbWFuZG9saW47Civmg6HkvZzliocgPiBtaXNjaGllZjsKK+WtkOWNiOe3miA+IG1lcmlkaWFuOwor6KO95L2c6ICFID4gcHJvZHVjZXI7CivkuI3lnKjkuY4gPiBub3RcLW1pbmQ7Civpn7PmqILlrrYgPiBtdXNpY2lhbjsKK+S9v+m6u+eXuiA+IHBhcmFseXplOwor5Y2D5a2X56+AID4ga2lsb2J5dGU7CivororpmLvlmaggPiB0aGVvc3RhdDsKK+Wls+aIv+adsSA+IGxhbmRsYWR5Owor5LiN5YC85b6XID4gdW53b3J0aHk7Civmj5DkvpvogIUgPiBzdXBwbGllcjsKK+WgheWbuuaApyA+IGZpcm1uZXNzOwor55m95YyW55eFID4gYWxiaW5pc207CivnrKzlha3ljYEgPiBzaXh0aWV0aDsKK+aWh+aYjuWMliA+IGNpdmlsaXplOwor5aSW5Lqk5a6YID4gZGlwbG9tYXQ7Civnmb3pm7Lnn7MgPiBkb2xvbWl0ZTsKK+S9v+e/kuaFoyA+IGFjY3VzdG9tOwor5Yaw5pm255+zID4gY3J5b2xpdGU7CivkuI3lsI/lv4MgPiBoZWVkbGVzczsKK+WvjOiJsuW9qSA+IGNvbG9yZnVsOwor57SN56iF5Lq6ID4gdGF4cGF5ZXI7Civlho3lh7rnj74gPiByZWFwcGVhcjsKK+mdoOiDjOakhSA+IGFybWNoYWlyOwor5pON5L2c6ICFID4gb3BlcmF0b3I7CivlhajlnIvmgKcgPiBuYXRpb25hbDsKK+e1sueLgOeJqSA+IGZpbGFtZW50Owor55m85piO5a62ID4gaW52ZW50b3I7Civol6XlipHluKsgPiBkcnVnZ2lzdDsKK+S4jeaAjum6vCA+IG5vdFwtdmVyeTsKK+Wkp+ilv+a0iyA+IGF0bGFudGljOwor55yL5b6X6KaLID4gdmlzaWJsZTsKK+acieizh+agvCA+IGVudGl0bGU7CivlnJPnn7PpoK0gPiBib3VsZGVyOwor5aWn5Zyw5YipID4gYXVzdHJpYTsKK+WCs+mBk+mDqCA+IG1pc3Npb247CivlibXkuJbntIAgPiBnZW5lc2lzOwor5Y2D5L2N5YWDID4ga2lsb2JpdDsKK+aPmuiBsuWZqCA+IHNwZWFrZXI7CivnrqHnkIblk6EgPiBtYW5hZ2VyOwor6ICB6LOH5qC8ID4gdmV0ZXJhbjsKK+mHkemKgOWhiiA+IGJ1bGxpb247CivmspnkuIHprZogPiBzYXJkaW5lOwor5Ye657SN5ZOhID4gY2FzaGllcjsKK+aEm+mBiueOqSA+IHBsYXlmdWw7Civpi7znkLTlrrYgPiBwaWFuaXN0Owor6KiI5pW46ICFID4gY291bnRlcjsKK+ino+WJluWtuCA+IGFuYXRvbXk7CivmnInlrbjllY8gPiBsZWFybmVkOwor5Y2K5ZCK5a2QID4gZGFiYmxlcjsKK+WkqeiKseadvyA+IGNlaWxpbmc7CivlpKfnm6TlrZAgPiBwbGF0dGVyOwor5LiN6IO95LiNID4gaGF2ZVwtdG87Civlh7rlhaXlj6MgPiBnYXRld2F5Owor6LW355q657SLID4gc2hyaXZlbDsKK+ayueWFiea8hiA+IHZhcm5pc2g7CivmiZjlhZLmiYAgPiBudXJzZXJ5Owor6Im357SF6ImyID4gY3JpbXNvbjsKK+eJueioseeLgCA+IGNoYXJ0ZXI7Civmi5bmm7PmqZ8gPiB0cmFjdG9yOwor6aCQ6KiA5a62ID4gcHJvcGhldDsKK+iDjOWPm+iAhSA+IHRyYWl0b3I7CivlpKfkvb/ppKggPiBlbWJhc3N5Owor5aSn6I2J5Y6fID4gcHJhaXJpZTsKK+eJqeeQhuWtuCA+IHBoeXNpY3M7CivkuI3ogb3lkb0gPiBkaXNvYmV5Owor57Si6aas6KOhID4gc29tYWxpYTsKK+W7o+aSree2siA+IG5ldHdvcms7Civlt7TmoLzpgZQgPiBiYWdoZGFkOwor6YqA6KGM5qWtID4gYmFua2luZzsKK+aJi+aOqOi7iiA+IHRyb2xsZXk7Civli57li5XogIUgPiBsYWJvcmVyOwor576O5rSy6LG5ID4gcGFudGhlcjsKK+iKseW0l+efsyA+IGdyYW5pdGU7CivlnKjlhbbkuK0gPiB0aGVyZWluOwor5LiN5ZCI5rOVID4gaWxsZWdhbDsKK+aiteW4neWyoSA+IHZhdGljYW47CivlkIznvqnlrZcgPiBzeW5vbnltOwor5oSb5ZyL6ICFID4gcGF0cmlvdDsKK+Wls+S4u+S6uiA+IGhvc3Rlc3M7Civnmb3mprTnn7MgPiBsZXVjaXRlOwor5L2g6Ieq5bexID4gdGh5c2VsZjsKK+iHqueUsea0viA+IGxpYmVyYWw7CivonqLngavon7IgPiBmaXJlZmx5Owor55m+5YiG5LmLID4gcGVyY2VudDsKK+mshue3iuW4tiA+IGVsYXN0aWM7Civlr4Tlrr/nlJ8gPiBib2FyZGVyOwor5Y+X5q2h6L+OID4gcG9wdWxhcjsKK+mjm+apn+WgtCA+IGFpcnBvcnQ7CivoqIjmlbjlmaggPiBjb3VudGVyOwor5a+m6Zqb5LiKID4gaW5cLWZhY3Q7Civlj43mh4nloIYgPiByZWFjdG9yOwor55Ww5pWZ5b6SID4gaGVhdGhlbjsKK+WklumCpuS6uiA+IGdlbnRpbGU7Civnp7vmsJHogIUgPiBtaWdyYW50Owor5LiN5ZCJ5YipID4gb21pbm91czsKK+WJtemAoOiAhSA+IGNyZWF0b3I7CivnhpTnpKbniJAgPiBmdXJuYWNlOwor5aWz6Iux6ZuEID4gaGVyb2luZTsKK+WFp+e+heeVoiA+IG5haXJvYmk7Civlj5vpgIbogIUgPiB0cmFpdG9yOwor5L2/6auY6LK0ID4gZGlnbmlmeTsKK+WcsOizquWtuCA+IGdlb2xvZ3k7Civpl5zpjbXoqZ4gPiBrZXl3b3JkOwor5be05p2+566hID4gYmFzc29vbjsKK+W4g+mahui/qiA+IGJ1cnVuZGk7CivlhYXpm7vlmaggPiBjaGFyZ2VyOwor6JKZ5aSn5ou/ID4gbW9udGFuYTsKK+eCreeWveeXhSA+IGFudGhyYXg7Civlj7Llr4bnibkgPiBzY2htaXR0Owor5a+M5aOr6YCaID4gZnVqaXRzdTsKK+eDueiqv+ihkyA+IGNvb2tlcnk7CivljbDliLfogIUgPiBwcmludGVyOwor5re35ZCI54mpID4gbWl4dHVyZTsKK+mYv+WFi+WAqyA+IGFjaGVyb247CivnhKHnpZ7oq5YgPiBhdGhlaXNtOwor5LiN5YuV5pCWID4gdW5tb3ZlZDsKK+maseiXj+iZlSA+IHNoZWx0ZXI7Civmirzmspnpvo0gPiBhYnNhbG9tOwor5YKs55yg5puyID4gbHVsbGFieTsKK+eJm+mgreeKrCA+IGJ1bGxkb2c7Civkvb/prZTms5UgPiBjb25qdXJlOwor5ZC55Y+j5ZOoID4gd2hpc3RsZTsKK+WuieS5g+i/kSA+IGFuYWxnaW47Civom4vnmb3os6ogPiBwcm90ZWluOwor6Iqd5Yqg5ZOlID4gY2hpY2FnbzsKK+WFq+W4tumtmiA+IG9jdG9wdXM7CivmtJfooaPlupcgPiBsYXVuZHJ5Owor5LiN5b6X5YuBID4gYXdrd2FyZDsKK+WNiueTtumGiyA+IGRhYmJsZXI7CivplbfpoLjpub8gPiBnaXJhZmZlOwor5aWz6auY6Z+zID4gc29wcmFubzsKK+avlOWIqeaZgiA+IGJlbGdpdW07CivkuI3oqr/lkowgPiBkaXNjb3JkOwor5pyJ6Zmw5b2xID4gc2hhZG93eTsKK+aMh+mXnOevgCA+IGtudWNrbGU7CivlubPluLjml6UgPiB3ZWVrZGF5Owor5YSy6JeP5a6kID4gc3RvcmFnZTsKK+WMiOeJmeWIqSA+IGh1bmdhcnk7CivlopPoqozpipggPiBlcGl0YXBoOwor5LiA5pyD5YWSID4gYVwtd2hpbGU7CivkuI3pgZPlvrcgPiBpbW1vcmFsOwor54OP5YWL6JitID4gdWtyYWluZTsKK+WcqOWupOWFpyA+IGluZG9vcnM7CivkuI3pm6LlhZIgPiBub3RcLWJhZDsKK+eZveibi+eZvSA+IGFsYnVtaW47CivkuLvluK3oh7ogPiByb3N0cnVtOwor6aGe5Zu66YaHID4gc3Rlcm9pZDsKK+ipleitsOacgyA+IGNvdW5jaWw7CivmnInluIzmnJsgPiBob3BlZnVsOwor5YK35a+S55eHID4gdHlwaG9pZDsKK+WIsOmCo+ijoSA+IHRoaXRoZXI7CivppIrogIHph5EgPiBwZW5zaW9uOwor552h55yg6ICFID4gc2xlZXBlcjsKK+WWmOWQgeWQgSA+IHRvXC1ibG93Owor5bCP5YaK5a2QID4gYm9va2xldDsKK+acquatpuijnSA+IHVuYXJtZWQ7CivluLbntIXoibIgPiByZWRkaXNoOwor5ZCI5aSl5Lq6ID4gcGFydG5lcjsKK+acieW5q+WKqSA+IGhlbHBmdWw7CivpmL/mi4nkvK8gPiBhcmFiaWFuOwor6Zi/5ouJ5LiBID4gYWxhZGRpbjsKK+S4jeimuuWvnyA+IHVuYXdhcmU7CivnlJjol43oj5wgPiBjYWJiYWdlOwor5aWz5L+u6YGTID4gY29udmVudDsKK+eZvOePvueJqSA+IGZpbmRpbmc7CivlnKjkuIvmlrkgPiBiZW5lYXRoOwor6JK45rG95qmfID4gc3RlYW1lcjsKK+Wwj+eAkeW4gyA+IGNhc2NhZGU7CivnrKzljYHkuowgPiB0d2VsZnRoOwor5be05LiN5b6XID4gYW54aW91czsKK+acquaxuuWumiA+IHBlbmRpbmc7Civml4XpgYrogIUgPiB0b3VyaXN0Owor5Y+X6KiX5Lq6ID4gdHJ1c3RlZTsKK+imi+itieS6uiA+IHdpdG5lc3M7Civnn7PljZflsawgPiBoZWF0aGVyOwor5ZyW5pu46aSoID4gbGlicmFyeTsKK+iWhOeDpOmkhSA+IHBhbmNha2U7Civmr5LojYnlkI0gPiBoZW1sb2NrOwor5Zyw5bmz57eaID4gaG9yaXpvbjsKK+WlueiHquW3sSA+IGhlcnNlbGY7Civkvb/lraTnq4sgPiBpc29sYXRlOwor55+u5aOv57SgID4gY3ljb2NlbDsKK+WQkeS9leiZlSA+IHdoaXRoZXI7CivnsYPmnb/nkIMgPiByZWJvdW5kOwor6IG95b6X6KaLID4gYXVkaWJsZTsKK+WBmuemseWRiiA+IHRvXC1wcmF5Owor55m+5oWV5aSnID4gYmVybXVkYTsKK+acieainee0iyA+IHN0cmlwZWQ7Civlronmga/ml6UgPiBzYWJiYXRoOwor5LiN5YCS57+BID4gdHVtYmxlcjsKK+ijgee0meapnyA+IHRyaW1tZXI7CivkuIDpg6jliIYgPiBwb3J0aW9uOwor5oe35pW15oSPID4gaG9zdGlsZTsKK+WJteeri+iAhSA+IGZvdW5kZXI7Civntq3ku5blkb0gPiB2aXRhbWluOwor6KOd572u54mpID4gZml4dHVyZTsKK+WPg+itsOWToSA+IHNlbmF0b3I7CivljbDooajmqZ8gPiBwcmludGVyOwor5pif5pyf5LqMID4gdHVlc2RheTsKK+mfs+aoguacgyA+IGNvbmNlcnQ7Civpq5TogrLloLQgPiBzdGFkaXVtOwor5oSb54i+6JitID4gaXJlbGFuZDsKK+mAg+S6oeiAhSA+IHJ1bmF3YXk7Civlkq/lkq/nrJEgPiBjaHVja2xlOwor55Sf54mp5a24ID4gYmlvbG9neTsKK+aIsOmspeiAhSA+IGZpZ2h0ZXI7Civkvb/mhqTmhaggPiBvdXRyYWdlOwor5bGF5L2P5pa8ID4gaW5oYWJpdDsKK+aJk+WNsOapnyA+IHByaW50ZXI7Civkvb/mhqTmgJIgPiBwcm92b2tlOwor5b2M6LO95LqeID4gbWVzc2lhaDsKK+aykueUmum6vCA+IG5vdGhpbmc7CivnhZnngbDnvLggPiBhc2h0cmF5Owor5rex57SF6ImyID4gc2NhcmxldDsKK+S4jeWcqOS6hiA+IGJlXC1kZWFkOwor57Sh57mU5ZOBID4gdGV4dGlsZTsKK+S7o+WQjeipniA+IHByb25vdW47CivkuI3mv5/kuosgPiBub1wtZ29vZDsKK+mWi+aLk+iAhSA+IHBpb25lZXI7CivkuI3kurrpgZMgPiBpbmh1bWFuOwor6KKr5rKS5pS2ID4gZm9yZmVpdDsKK+i3r+ilv+W8lyA+IGx1Y2lmZXI7CivljJblrbjlrrYgPiBjaGVtaXN0Owor6KiT57e06ICFID4gdHJhaW5lcjsKK+a4hea9lOWZqCA+IGNsZWFuZXI7CivmhJvlvrfnjrIgPiBhZGVsaW5lOwor6L+r5YiH5oCnID4gdXJnZW5jeTsKK+Wls+a8lOWToSA+IGFjdHJlc3M7CivmoYzkuIrlnosgPiBkZXNrdG9wOwor5be05q+U5YCrID4gYmFieWxvbjsKK+WssOWFkuacnyA+IGluZmFuY3k7Civnmb7okYnnqpcgPiBzaHV0dGVyOwor6YG/5b2I5Z2RID4gZm94aG9sZTsKK+acieaJjeW5uSA+IGNhcGFibGU7CivohKvooaPmnI0gPiB1bmRyZXNzOwor6KeA5YWJ5a6iID4gdG91cmlzdDsKK+mBi+WLleWutiA+IGF0aGxldGU7Civmpa3ppJjogIUgPiBhbWF0ZXVyOwor6YeR5a2X5aGUID4gcHlyYW1pZDsKK+S7luiHquW3sSA+IGhpbXNlbGY7CivlrprlsYXogIUgPiBzZXR0bGVyOwor5LqM5Y2B5aSaID4gb3ZlclwtMjA7CivmlLbnlZnmiYAgPiBiYXJyYWNrOwor5q+b5q+b6ZuoID4gZHJpenpsZTsKK+mBi+WLleWToSA+IGF0aGxldGU7Civnh5XpuqXnsqUgPiBvYXRtZWFsOwor5qiZ6Kqe54mMID4gcGxhY2FyZDsKK+iHquihjOi7iiA+IGJpY3ljbGU7CivmsJHmlbjoqJggPiBudW1iZXJzOwor5bCP5paR6bueID4gc3BlY2tsZTsKK+S9v+WOreeFqSA+IGRpc2d1c3Q7Civoib7ov6rnlJ8gPiBhZGRpc29uOwor5aOr5bir6KiYID4ganVkZ2VzOwor6K236YCB6ICFID4gZXNjb3J0Owor55m86Zu75qmfID4gZHluYW1vOwor56mG5pav5p6XID4gbXVzbGltOwor6ZaL6LuK5Lq6ID4gZHJpdmVyOwor5Zi25ZWe6IGyID4gaG9hcnNlOwor5ouU5bCW5YWSID4gdGlwdG9wOwor566h55CG5Lq6ID4ga2VlcGVyOwor6buD6byg54u8ID4gd2Vhc2VsOwor5pyJ5Lq65oOFID4gaHVtYW5lOwor6KW/57SF5p+/ID4gdG9tYXRvOwor6Zu75b2x6ZmiID4gY2luZW1hOwor5bCP5aaW57K+ID4gZ29ibGluOwor6YeR57Wy6ZuAID4gY2FuYXJ5Owor5YuV5ZCN6KmeID4gZ2VydW5kOwor56u26LO96ICFID4gcGxheWVyOwor57eo5bm05Y+yID4gYW5uYWxzOwor57y65rCn55eHID4gYW5veGlhOwor5aSn5Zyw5rSeID4gY2F2ZXJuOwor5ruR57+U5qmfID4gZ2xpZGVyOwor5q6Y6aSY54mpID4gbGl0dGVyOwor5pyJ6LKs5Lu7ID4gbGlhYmxlOwor5a2p5a2Q5rCjID4gYm95aXNoOwor5bCP54md54mbID4gaGVpZmVyOwor6LeR5q2l6ICFID4gcnVubmVyOwor5ZCQ57as6ZueID4gdHVya2V5Owor6Leo5o6l5ZmoID4ganVtcGVyOwor6LKg5pOU6ICFID4gYmVhcmVyOwor5ZCI5ZSx5ZyYID4gY2hvcnVzOwor6aCY5bCO6ICFID4gbGVhZGVyOwor5puy5qON55CDID4gaG9ja2V5Owor6Lev55Sx5ZmoID4gcm91dGVyOwor54i25q+N6KaqID4gcGFyZW50Owor5YyW5aad5ZOBID4gbWFrZXVwOwor5oCl5L+D6IGyID4gcGF0dGVyOwor5L2/56Gs5YyWID4gaGFyZGVuOwor5Lqk5piT6ICFID4gZGVhbGVyOwor5pel5YWn55OmID4gZ2VuZXZhOwor6YqA6KGM5a62ID4gYmFua2VyOwor5qSN54mp5a24ID4gYm90YW55Owor57SA5b+1542OID4gdHJvcGh5Owor5YG96YCg55qEID4gZm9yZ2VkOwor56ys5LqM5qyhID4gc2Vjb25kOwor6bWd5Y2155+zID4gcGViYmxlOwor5pyJ5rCj5rS+ID4gbG9yZGx5Owor5YK15YuZ5Lq6ID4gZGVidG9yOwor55Wr55yJ6bOlID4gdGhydXNoOwor5bCP56Kf5a2QID4gc2F1Y2VyOwor6Iie6LmI5a62ID4gZGFuY2VyOwor5Y+u5Zm56IGyID4gdGlua2xlOwor5L2/5r+V6YCPID4gZHJlbmNoOwor5om56KmV5a62ID4gY3JpdGljOwor5Zyo5rex6JmVID4gZGVlcGx5Owor5Yud5Yip6ICFID4gdmljdG9yOwor6Lm66Lm65p2/ID4gc2Vlc2F3Owor56Oo5Z2K5Li7ID4gbWlsbGVyOwor5pyJ6Zec6YCjID4gcmVsYXRlOwor5aSa5qi55pyoID4gd29vZGVkOwor5ZCx5ZCx6IGyID4gc3F1ZWFrOwor5pyq5a6M5oiQID4gdW5kb25lOwor6a2U6LO95YWLID4gbW9zYWljOwor5by35pyJ5YqbID4gc3Ryb25nOwor54OP5bmy6YGUID4gdWdhbmRhOwor5LiN56K65a+mID4gdW50cnVlOwor6L6m5YWs5a6kID4gb2ZmaWNlOwor576F6aas5pu4ID4gcm9tYW5zOwor5pyN5YuZ5ZOhID4gd2FpdGVyOwor6JyY6Jub57ayID4gY29id2ViOwor6Zi/57Gz5be0ID4gYW1vZWJhOwor5L+u6KOc5YygID4gdGlua2VyOwor5aSn55CG55+zID4gbWFyYmxlOwor5oyB5pyJ5Lq6ID4gaG9sZGVyOwor5pKS5ZOI5ouJID4gc2FoYXJhOwor5aSn6ZCu5YiAID4gc2N5dGhlOwor5r++5rOi5ZmoID4gZmlsdGVyOwor5aib5qiC5aC0ID4gcmVzb3J0Owor5L2/6auY6IiIID4gcGxlYXNlOwor5pyA5bm06ZW3ID4gZWxkZXN0Owor6YaD6buD55OcID4gcGlja2xlOwor5pS25Ymy6ICFID4gcmVhcGVyOwor5p2c6bWR6bOlID4gY3Vja29vOwor5omT5Zm05ZqPID4gc25lZXplOwor6J665peL6YmXID4gd3JlbmNoOwor5Y+D6K2w6ZmiID4gc2VuYXRlOwor6aCY5bCO5Lq6ID4gbGVhZGVyOwor6K6K5b2i6J+yID4gYW1vZWJhOwor5Lu75L2V5Lq6ID4gYW55b25lOwor5pyJ6YGT5b63ID4gY2hhc3RlOwor6Jed6KGT5a62ID4gYXJ0aXN0Owor6aCC5qiR5p+xID4gcGlsbGFyOwor5L2/6Iao6IS5ID4gZGlsYXRlOwor5bCP5o+Q55C0ID4gZmlkZGxlOwor5oe25rSL5rSLID4gbGF6aWx5Owor6aas5oiy5ZyYID4gY2lyY3VzOwor6auY6IWz5p2vID4gZ29ibGV0Owor6aas6Yi06JavID4gcG90YXRvOwor5L2/6L2J5ZCRID4gZGl2ZXJ0Owor5rKS5pyJ5Lq6ID4gbm9ib2R5Owor5Y2a54mp6aSoID4gbXVzZXVtOwor5L2/5Zuw5pO+ID4gaGFyYXNzOwor56au5ouc5aCCID4gY2hhcGVsOwor5LiN6YCP5piOID4gb3BhcXVlOwor5a6D5pys6LqrID4gaXRzZWxmOwor5omB5qGD6auUID4gdG9uc2lsOwor5o6S5rC05rqdID4gZ3V0dGVyOwor5q2j5pa55b2iID4gc3F1YXJlOwor5Y+v5L+h5Lu7ID4gdHJ1c3R5Owor5paH5a245a62ID4gd3JpdGVyOwor56e75YuV5byPID4gbW9iaWxlOwor5Yiw5q2k6JmVID4gaGl0aGVyOwor5q6W5rCR5ZywID4gY29sb255Owor5aKo6KW/5ZOlID4gbWV4aWNvOwor5riF55yf5a+6ID4gbW9zcXVlOwor6L6m5LqL6JmVID4gb2ZmaWNlOwor5a6J5ZOl5ouJID4gYW5nb2xhOwor5Lul6Imy5YiXID4gaXNyYWVsOwor6YeY5pu46YedID4gc3RhcGxlOwor54Wn55u45qmfID4gY2FtZXJhOwor57Sh57mU6ICFID4gd2VhdmVyOwor5pav5ouJ5aSrID4gc2xhdmljOwor5L+E576F5pavID4gcnVzc2lhOwor6KOB57ir5birID4gdGFpbG9yOwor5byT566t5omLID4gYXJjaGVyOwor5aGe54i+54m5ID4gY2VsdGljOwor5aWz6IiN55ujID4gbWF0cm9uOwor5omT5a2X5ZOhID4gdHlwaXN0Owor5pif5pyf5pelID4gc3VuZGF5Owor6JGh6JCE5Lm+ID4gcmFpc2luOwor5oiR6Ieq5bexID4gbXlzZWxmOwor5aSn5q2l6LWwID4gc3RyaWRlOwor5LiN5YWs5bmzID4gdW5mYWlyOwor6Iqt6JW+6IieID4gYmFsbGV0Owor6KmV6KuW5a62ID4gY3JpdGljOwor5Lyv5Yip6IyyID4gYmVsaXplOwor6J665peL5b2iID4gc3BpcmFsOwor5q+U6LyD5bCRID4gbGVzc2VyOwor5Zyo5q2k6JmVID4gaGVyZWluOwor6KKr5a6z5Lq6ID4gdmljdGltOwor6Zi/5rOi576FID4gYXBvbGxvOwor5L2/6ICz6IG+ID4gZGVhZmVuOwor576p6LOj5pyDID4gYmF6YWFyOwor5pif5pyf5aSpID4gc3VuZGF5Owor5bel5L2c5a6kID4gc3R1ZGlvOwor6ZaA5aSW5ryiID4gbGF5bWFuOwor5Zyo6ZmE6L+RID4gbmVhcmJ5Owor5aGX5rK55pa8ID4gYW5vaW50Owor6Zuc6LKo5ZWGID4gZ3JvY2VyOwor57at5ZC+54i+ID4gdWlnaHVyOwor6Iux6ZuE5byPID4gaGVyb2ljOwor55CG6auu5birID4gYmFyYmVyOwor6LW35rOh5rKrID4gc2VldGhlOwor5pif5pyf5LqUID4gZnJpZGF5Owor5pif5pyf5LiAID4gbW9uZGF5Owor5be054i+5bmyID4gYmFsa2FuOwor5qC85qC856yRID4gZ2lnZ2xlOwor5a2f5Yqg5ouJID4gYmVuZ2FsOwor5Zyf6ICz5YW2ID4gdHVya2V5Owor55m96Jit5ZywID4gYnJhbmR5Owor5oSb5b636I+vID4gZWR3YXJkOwor5Y2K5Lit6IWwID4gbWlkZGxlOwor55m95Lm+5YWSID4gc3Bpcml0Owor5YW4542E6ZW3ID4gd2FyZGVuOwor55yL5LiN6KaLID4gdW5zZWVuOwor5L2/5L2c5ZiUID4gc2lja2VuOwor5oGQ5rC055eFID4gcmFiaWVzOwor5Yqg77mN5pa8ID4gaW1wb3NlOwor5qmh55qu5pC9ID4gZXJhc2VyOwor5rOi5aOr6aCTID4gYm9zdG9uOwor57aT57SA5Lq6ID4gYnJva2VyOwor57SF6Ji/6JSUID4gY2Fycm90Owor5oKE5oKE5ZywID4gZ2VudGx5Owor6YG/6Zuj5omAID4gcmVmdWdlOwor55m96bq15YWSID4gaGVyb2luOwor6aO86aSK6ICFID4gZmVlZGVyOwor5be05pav5YWLID4gYmFzcXVlOwor6I6r5pav56eRID4gbW9zY293Owor5pyI5qGC5qi5ID4gbGF1cmVsOwor6ZaA6Ki65a6kID4gY2xpbmljOwor5b6u6JaE55qEID4gbWVhZ3JlOwor5bCP5reY5rCjID4gcmFzY2FsOwor5pSd5b2x5qmfID4gY2FtZXJhOwor6LW36Ki06ICFID4gc3VpdG9yOwor5be05ou/6aasID4gcGFuYW1hOwor5o2V6a+o6Ii5ID4gd2hhbGVyOwor5ryU6Kqq6ICFID4gb3JhdG9yOwor5pO65qij5a2QID4gZG9cLXN0aDsKK+W5vuS5juS4jSA+IGhhcmRseTsKK+WKoOaLv+WkpyA+IGNhbmFkYTsKK+mGq+WLmeaJgCA+IGNsaW5pYzsKK+WNgeWtl+aetiA+IGNyb3NzOwor5Luj55CG5Lq6ID4gYWdlbnQ7CivpqYXli5XlmaggPiBkcml2ZTsKK+eNqOacqOiInyA+IGNhbm9lOwor5qKd5p2/566xID4gY3JhdGU7CivpmbPliJfoh7ogPiBzdGFsbDsKK+ism+ino+WToSA+IGd1aWRlOwor5rOl5rC05YygID4gbWFzb247CivmpI3niannvqQgPiBmbG9yYTsKK+WcqOmrmOiZlSA+IGFsb2Z0Owor5pKQ56u/6LezID4gdmF1bHQ7CivpoK3ok4vpqqggPiBza3VsbDsKK+aVmOWIqeS6niA+IHN5cmlhOwor57Sr5LiB6aaZID4gbGlsYWM7CivkuI3mlrDprq4gPiBzdGFsZTsKK+Wkp+i+suWgtCA+IHJhbmNoOwor5aSa5rC05YiGID4ganVpY3k7Civlkbzlj6vlmaggPiBwYWdlcjsKK+S4i+awtOmBkyA+IHNld2VyOwor5b6e5L6G5LiNID4gbmV2ZXI7CivkuozmpbXnrqEgPiBkaW9kZTsKK+ertuaKgOWgtCA+IGFyZW5hOwor6bql6Zi/5a+GID4gbWlhbWk7CivkvJHmga/lrqQgPiBsb2JieTsKK+eQg+eLgOeJqSA+IGdsb2JlOwor5bCN5pW16ICFID4gcml2YWw7CivlhqzpnZLmqLkgPiBob2xseTsKK+aenOWtkOWHjSA+IGplbGx5Owor5aSn5Zyw5ZyWID4gYXRsYXM7CivmiJDlubTogIUgPiBhZHVsdDsKK+mbheWQhOabuCA+IGphbWVzOwor6Iux5Luj54i+ID4gaW50ZWw7Civmr5vojLjojLggPiBoYWlyeTsKK+S9v+eFqeaDsSA+IHdvcnJ5Owor5bC85pel54i+ID4gbmlnZXI7CivmlLbpn7PmqZ8gPiByYWRpbzsKK+esrOS4ieasoSA+IHRoaXJkOwor5oub5b6F5ZOhID4gdXNoZXI7CivnrKzkuIDmrKEgPiBmaXJzdDsKK+aEj+Wkp+WIqSA+IGl0YWx5Owor5rC05bmz6Z2iID4gcGxhbmU7Civkup7purvluIMgPiBsaW5lbjsKK+a6nOWGsOmeiyA+IHNrYXRlOwor5L2c5ZO86IGyID4gc25vcnQ7Civoo73pgKDogIUgPiBtYWtlcjsKK+eEoeeUn+WRvSA+IGluZXJ0Owor6YWq6L6y5qWtID4gZGFpcnk7CivmsLTokrjmsKMgPiB2YXBvcjsKK+WDj+eJh+ewvyA+IGFsYnVtOwor6LSI6IiH6ICFID4gZ2l2ZXI7Civmnb/mop3nrrEgPiBjcmF0ZTsKK+WkqeiXjeiJsiA+IGF6dXJlOwor6aOb6KGM5ZOhID4gcGlsb3Q7CivmjZDotIjogIUgPiBkb25vcjsKK+ilv+ePreeJmSA+IHNwYWluOwor5o+Q5aSa5pu4ID4gdGl0dXM7CivnlJ/purXns7AgPiBkb3VnaDsKK+mYv+aLieaRqSA+IGFsYW1vOwor55S36auY6Z+zID4gdGVub3I7CivkuIDpu57lhZIgPiBhXC1iaXQ7Civoi7HnibnniL4gPiBpbnRlbDsKK+Wwj+aoueaelyA+IGdyb3ZlOwor5biD6JCK54i+ID4gYmxhaXI7CivmkqXngavmo40gPiBwb2tlcjsKK+WcqOaXgemCiiA+IGFzaWRlOwor54ef5qWt5ZOhID4gY2xlcms7Civkvb/lm7rlrpogPiByaXZldDsKK+itpuWgseWZqCA+IHNpcmVuOwor5LiJ6KeS5rSyID4gZGVsdGE7CivlqIHniL7lo6sgPiB3YWxlczsKK+iCr+WwvOS6niA+IGtlbnlhOwor6bq15YyF55quID4gY3J1c3Q7Civnn7PljZfmqLkgPiBoZWF0aDsKK+ieuue1sumHmCA+IHNjcmV3Owor6KW/5rSL5qOLID4gY2hlc3M7CivllLHoqannj60gPiBjaG9pcjsKK+ilv+a0i+adiSA+IGNlZGFyOwor5L2/5rq65q27ID4gZHJvd247Civlho3kuIDmrKEgPiBhZ2FpbjsKK+WcsOaWueaApyA+IGxvY2FsOwor55m854mi6ai3ID4gd2hpbmU7CivplbfpoLjnk7YgPiBmbGFzazsKK+eauueciemgrSA+IHNjb3dsOwor6aeV6aeb5ZOhID4gcGlsb3Q7Civkvobnpo/mp40gPiByaWZsZTsKK+WQtemsp+iBsiA+IG5vaXNlOwor5qWU5b2i54mpID4gd2VkZ2U7CivmtYHmtarogIUgPiByb3ZlcjsKK+avm+WXtuWYsCA+IHNlcmdlOwor54GM5pyo5Y+iID4gc2NydWI7Civotbfph43mqZ8gPiBjcmFuZTsKK+eijuW4g+ainSA+IHNocmVkOwor5YWn5Zyo55qEID4gaW5uZXI7CivprLHph5HpppkgPiB0dWxpcDsKK+mbquiMhOeFmSA+IGNpZ2FyOwor54Ok6bq15YyFID4gdG9hc3Q7CivlkLnnrJvogIUgPiBwaXBlcjsKK+S4gOW3tOaOjCA+IHNwYW5rOwor57Wx5rK76ICFID4gcnVsZXI7Civlkbzlj6vogbIgPiB3aG9vcDsKK+W6p+WPs+mKmCA+IG1vdHRvOwor5LiJ56ic6Y+hID4gcHJpc207Civnn67loqnloqkgPiBwdWRneTsKK+mYv+eIvuazlSA+IGFscGhhOwor5q+U5L6L5bC6ID4gc2NhbGU7Civlj43mipfogIUgPiByZWJlbDsKK+WTquS4gOWAiyA+IHdoaWNoOwor5ZCI6IKh57eaID4gdHdpbmU7CivpgoHpmL/lr4YgPiBtaWFtaTsKK+i8v+irlueVjCA+IG1lZGlhOwor55Ge5YW45Lq6ID4gc3dlZGU7Civkvb/nvp7mhKcgPiBhYmFzaDsKK+eUt+WtkOawoyA+IG1hbmx5Owor5L2/5aib5qiCID4gYW11c2U7CivlqrPlqablhZIgPiB3aWZlOwor5LyK5ouJ5YWLID4gaXJhcTsKK+acieiDveWKmyA+IGFibGU7Civln4PnsbPniL4gPiBlbWlyOwor5ZKW5ZWh6aSoID4gY2FmZTsKK+S4gOWumuimgSA+IG11c3Q7CivpgJrooYznqIUgPiB0b2xsOwor546J6JyA6buNID4gY29ybjsKK+Wwj+avm+ifsiA+IHNsdWc7CivmnIDkuLvopoEgPiBtYWluOwor54y25LuW5beeID4gdXRhaDsKK+S9v+WPl+WCtyA+IGh1cnQ7Civnq4vmlrnpq5QgPiBjdWJlOwor55m96aqo6aCCID4gY29vdDsKK+itt+WfjuaysyA+IG1vYXQ7CivmtIvlqIPlqIMgPiBkb2xsOwor5oSf6Ka65YiwID4gZmVlbDsKK+S4i+S4gOasoSA+IG5leHQ7Civmt7rpu4PoibIgPiBidWZmOwor5aSn6KKL5a2QID4gc2FjazsKK+WciOeLgOeJqSA+IGhvb3A7CivkuI3lj4rmoLwgPiBmYWlsOwor5Ye656ef6LuKID4gdGF4aTsKK+S/nemaque1siA+IGZ1c2U7CivlhYjopovogIUgPiBzZWVyOwor5omL5ouJ6LuKID4gY2FydDsKK+eIteWjq+iIniA+IGpheno7CivlkpbllaHlupcgPiBjYWZlOwor6Im+5ruL55eFID4gYWlkczsKK+WFq+WTpeWFkiA+IG15bmE7Civpm7vnh4jms6EgPiBidWxiOwor54y25aSn5pu4ID4ganVkZTsKK+Wkp+mgremHmCA+IHRhY2s7CivmhJvmu4vnl4UgPiBhaWRzOwor6LWk6KO46KO4ID4gYmFyZTsKK+Wck+Wxi+mggiA+IGRvbWU7Civpm5nog57og44gPiB0d2luOwor5LiA5aGK6bq1ID4gbG9hZjsKK+S9v+eUqOiAhSA+IHVzZXI7CivlpJblsI/ohb8gPiBzaGluOwor6JuL55m955+zID4gb3BhbDsKK+S4gOWIhumMoiA+IGNlbnQ7CivlnJPpjJDpq5QgPiBjb25lOwor55m+5ZCI6IqxID4gbGlseTsKK+ioiOeoi+i7iiA+IHRheGk7CivonILonJzphZIgPiBtZWFkOwor6Z2e5bi45aSaID4gbXVjaDsKK+WcqOS5i+S4iiA+IG92ZXI7CivnnKjnnLznnZsgPiB3aW5rOwor6LK05amm5Lq6ID4gZGFtZTsKK+e0heWvtuefsyA+IHJ1Ynk7Civou5/mnKjloZ4gPiBjb3JrOwor57KJ57SF6ImyID4gcGluazsKK+WRvOWRvOiBsiA+IHdoaXI7Civlv6vmraXot5EgPiB0cm90Owor6Kqq6KyK6ICFID4gbGlhcjsKK+mZquWvqeWcmCA+IGp1cnk7CivnubzkuZjkurogPiBoZWlyOwor5YWJ56a/56a/ID4gYmFsZDsKK+aenOmkoemkhSA+IHRhcnQ7CivlmLblmLbogbIgPiBoaXNzOwor5pOm6buR5YWSID4gZHVzazsKK+awtOaenOmFkiA+IHdpbmU7Civnmanlk4jon4YgPiB0b2FkOwor57mU5biD5qmfID4gbG9vbTsKK+apouWck+W9oiA+IG92YWw7Civnqbrnmb3pu54gPiBnYXA7CivngrrnlJrpurwgPiB3aHk7CivnlLflranlrZAgPiBib3k7CivmtbjkuIDkuIsgPiBkaXA7CivlnKjnnLzliY0gPiBub3c7CivnhKHoirHmnpwgPiBmaWc7CivnlLflranlhZIgPiBib3k7CivospPlj6vogbIgPiBtZXc7CivntLDpoLjnk7YgPiBqdWc7CivluLjmmKXol6QgPiBpdnk7Civngrrku4DpurwgPiB3aHk7CivnhKHlsL7njL8gPiBhcGU7CivlsI/nsr7pnYggPiBlbGY7CivogIHlpKnniLogPiBnb2Q7Civpm7bpu57lha0gPiAwXC42Owor5aKo5rC05YWSID4gaW5rOwor5YWt6bue5YWtID4gNlwuNjsKK+eUqOayueeCuCA+IGZyeTsKK+mrlOiCsumkqCA+IGd5bTsKK+S4g+m7nuS6lCA+IDdcLjU7CivkuIPpu57kuowgPiA3XC4yOwor5YuV54mp5ZySID4gem9vOwor54y25aSq5Lq6ID4gamV3Owor6buD6KSQ6ImyID4gdGFuOwor562G5qG/5a2QID4gcGVuOwor5Lmd5LiD5bm0ID4gJyc5NzsKK+ioiOS5mOi7iiA+IGNhYjsKK+Wwj+S8meWtkCA+IGxhZDsKK+iyk+mgrem3uSA+IG93bDsKK+WQkeS4iuWcsCA+IHVwOwor6K6K5paHID4gYVwtcG9wdWxhclwtZm9ybVwtb2ZcLW5hcnJhdGl2ZVwtbGl0ZXJhdHVyZVwtZmxvdXJpc2hpbmdcLWluXC10aGVcLXRhbmdcLWR5bmFzdHlcLVwoNjE4XC05MDdcKVwtd2l0aFwtYWx0ZXJuYXRlXC1wcm9zZVwtYW5kXC1yaHltZWRcLXBhcnRzXC1mb3JcLXJlY2l0YXRpb25cLWFuZFwtc2luZ2luZ1wtXChvZnRlblwtb25cLWJ1ZGRoaXN0aWNcLXRoZW1lc1wpOwor6YKK5bmjID4gYm9yZGVyXC1yZWdpb25cLWN1cnJlbmN5XC1cKGNvbnNpc3RpbmdcLW9mXC10aGVcLWN1cnJlbmN5XC1ub3Rlc1wtaXNzdWVkXC1ieVwtdGhlXC1ib3JkZXJcLXJlZ2lvblwtZ292ZXJubWVudHNcLWR1cmluZ1wtdGhlXC13YXJcLW9mXC1yZXNpc3RhbmNlXC1hZ2FpbnN0XC1qYXBhblwtYW5kXC10aGVcLXdhclwtb2ZcLWxpYmVyYXRpb25cKTsKK+WQjOacnyA+IHRoZVwtY29ycmVzcG9uZGluZ1wtdGltZVwtcGVyaW9kXC1cKGVnXCxcLWNvbXBhcmVcLWluZmxhdGlvblwtbm93XC13aXRoXC10aGVcLXJhdGVcLWR1cmluZ1wtdGhlXC1zYW1lXC1tb250aFwtbGFzdFwteWVhclwpOwor5YGP5YGPID4gXChpbmRpY2F0ZXNcLXRoYXRcLXN0aFwuXC10dXJuc1wtb3V0XC1qdXN0XC10aGVcLW9wcG9zaXRlXC1vZlwtd2hhdFwtb25lXC13b3VsZFwtZXhwZWN0XC1vclwtd2hhdFwtd291bGRcLWJlXC1ub3JtYWxcKTsKK+aVrOelnSA+IHRvXC1yZXNwZWN0ZnVsbHlcLW9mZmVyXC1cKHdyaXR0ZW5cLWF0XC10aGVcLWVuZFwtb2ZcLWxldHRlclwtZnJvbVwtc29tZW9uZVwtb2ZcLWxvd2VyXC1zdGF0dXNcLXRvXC1oaWdoZXJcLXN0YXR1c1wpOwor5Y2c6L6tID4gb3JhY2xlXC1pbnNjcmlwdGlvbnNcLW9mXC10aGVcLXNoYW5nXC1keW5hc3R5XC1cKDE2dGhcLTExdGhcLWNlbnR1cnlcLWJjXClcLW9uXC10b3J0b2lzZXNoZWxsc1wtb3JcLWFuaW1hbFwtYm9uZXM7CivmtJvlvrcgPiBcKHdpbnN0b25cKVwtbG9yZFwtXChmb3JtZXJcLWFzc2lzdGFudFwtc2VjcmV0YXJ5XC1vZlwtc3RhdGVcLWZvclwtZWFzdFwtYXNpYVwtYW5kXC1wYWNpZmljXC1hZmZhaXJzXCk7CivlvbflvqggPiBuYW1lXC1vZlwtYVwtY29sbGVjdGlvblwtb2ZcLXNob3J0XC1zdG9yaWVzXCxcLXBhbmdcLWh1YW5nXCxcLVwid2FuZGVyaW5nXC1hYm91dFwiXCxcLWJ5XC1sdTNcLXh1bjRcLemtr+i/hTsKK+mZs+avhSA+IGNoZW5cLXlpXCxcLWZvcm1lclwtbWF5b3JcLW9mXC1zaGFuZ2hhaVwtYW5kXC1oaWdoZXN0XC1yYW5raW5nXC1taWxpdGFyeVwtY29tbWFuZGVyXC1pblwtY2hpbmE7CivljIXlt6UgPiB1bmRlcnRha2VcLXRvXC1wZXJmb3JtXC13b3JrXC13aXRoaW5cLWFcLXRpbWVcLWxpbWl0XC1hbmRcLWFjY29yZGluZ1wtdG9cLXNwZWNpZmljYXRpb25zOwor6YOo6aaWID4gcmFkaWNhbHNcLWJ5XC13aGljaFwtY2hhcmFjdGVyc1wtYXJlXC1hcnJhbmdlZFwtaW5cLXRyYWRpdGlvbmFsXC1jaGluZXNlXC1kaWN0aW9uYXJpZXM7CivpnLjkuLsgPiBhXC1wb3dlcmZ1bFwtY2hpZWZcLW9mXC10aGVcLXByaW5jZXNcLW9mXC10aGVcLXNwcmluZ1wtYW5kXC1hdXR1bW5cLXBlcmlvZFwtXCg3NzBcLTQ3NlwtYmNcKTsKK+WcqOaWvCA+IFwodGhlXC1wcm9ibGVtXC1vclwtZXhwbGFuYXRpb25cLW9yXC1hZHZhbnRhZ2VcLWV0Y1wuXClcLWxpZXNcLWluXC1cKHRoZVwtZmFjdFwtdGhhdFwuXC5cLlwpOwor5pWZ6KiTID4gXCh0ZWFjaFwtc29tZW9uZVwtb3JcLWxlYXJuXC1hXClcLWxlc3NvblwtXChpZVwsXC1vYnRhaW5cLXdpc2RvbVwtZnJvbVwtYW5cLWV4cGVyaWVuY2VcKTsKK+mngeWyuCA+IGFcLWxvd1wtc3RvbmVcLXdhbGxcLWJ1aWx0XC1hbG9uZ1wtdGhlXC13YXRlcicnc1wtZWRnZVwtdG9cLXByb3RlY3RcLWFuXC1lbWJhbmttZW50Owor6KOc5rOVID4gdHJlYXRtZW50XC1pbnZvbHZpbmdcLXRoZVwtdXNlXC1vZlwtdG9uaWNzXC10b1wtcmVzdG9yZVwtdGhlXC1wYXRpZW50JydzXC1oZWFsdGg7CivkuInkuI0gPiBcInRoZVwtdGhyZWVcLW5vJydzXCJcLVwoYW5cLWV4YW1wbGVcLW9mXC1hblwtYWJicmV2aWF0ZWRcLXNsb2dhblwtb3JcLWNhdGNocGhyYXNlXCk7Civnmb3mnK4gPiB0aGVcLXJoaXpvbWVcLW9mXC1sYXJnZVwtaGVhZGVkXC1hdHJhY3R5bG9kZXNcLVwoYXRyYWN0eWxvZGVzXC1tYWNyb2NlcGhhaWFcKTsKK+Wuo+WIpCA+IHByb25vdW5jZVwtYVwtXChqdWRpY2lhbFwpXC1zZW50ZW5jZVwtXChhZnRlclwtYVwtdmVyZGljdFwtaW5cLWFcLWNvdXJ0XC1vZlwtbGF3XCk7Civnl4Xlj4sgPiBhXC1mcmllbmRcLW1hZGVcLWluXC1ob3NwaXRhbFwtb3JcLXBlb3BsZVwtd2hvXC1iZWNvbWVcLWZyaWVuZHNcLWluXC1ob3NwaXRhbDsKK+WwseaYryA+IFwoZW1waGFzaXplc1wtdGhhdFwtc29tZXRoaW5nXC1pc1wtcHJlY2lzZWx5XC1vclwtZXhhY3RseVwtd2hhdFwtaXNcLXN0YXRlZFwpOwor5aSn56a5ID4gZGFcLXl1XCxcLW5hbWVcLW9mXC1hblwtYW5jaWVudFwtaGVyb1wtd2hvXC1zdWNjZXNzZnVsbHlcLWNvbnRyb2xsZWRcLWZsb29kczsKK+ihqOitiSA+IGlsbG5lc3NcLXRoYXRcLWhhc1wtbm90XC1hdHRhY2tlZFwtdGhlXC12aXRhbFwtb3JnYW5zXC1vZlwtdGhlXC1odW1hblwtYm9keTsKK+W5q+mWkSA+IGhhbmdcLW9uXC10b1wtYW5kXC1zZXJ2ZVwtdGhlXC1yaWNoXC1hbmRcLXBvd2VyZnVsXC1ieVwtbGl0ZXJhcnlcLWhhY2tcLXdvcms7Civmj4/ntIUgPiB0b1wtdHJhY2VcLW92ZXJcLXJlZFwtY2hhcmFjdGVyc1wtXChhc1wtYVwtbWV0aG9kXC1vZlwtbGVhcm5pbmdcLXRvXC13cml0ZVwpOwor5oqX5oiwID4gd2FyXC1vZlwtcmVzaXN0YW5jZVwsXC1lc3BlY2lhbGx5XC10aGVcLXdhclwtYWdhaW5zdFwtamFwYW5cLVwoMTkzN1wtMTk0NVwpOwor5LuK6Z+zID4gbW9kZXJuXC1cKGlcLmVcLlwtbm90XC1hbmNpZW50XClcLXByb251bmNpYXRpb25cLW9mXC1hXC1jaGluZXNlXC1jaGFyYWN0ZXI7Civmg4vmg5wgPiB0b1wtZmVlbFwtc29ycnlcLWZvclwtYVwtcGVyc29uXC1vdmVyXC1zdGhcLXRoYXRcLXNob3VsZFwtaGF2ZVwtaGFwcGVuZWQ7CivnnaXnnaggPiBsb29rXC1hdFwtc29tZWJvZHlcLWRpc2RhaW5mdWxseVwtb3V0XC1vZlwtdGhlXC1jb3JuZXJcLW9mXC1vbmUnJ3NcLWV5ZTsKK+iDoemBqSA+IGh1XC1zaGlcLVwoMTg5MVwtMTk2MlwpXCxcLW9yaWdpbmFsXC1wcm9wb25lbnRcLW9mXC1iYWkyXC1odWE0XC13ZW4yXC3nmb3oqbHmloc7Civou43lp5QgPiBtaWxpdGFyeVwtY29tbWlzc2lvblwtb2ZcLXRoZVwtY29tbXVuaXN0XC1wYXJ0eVwtY2VudHJhbFwtY29tbWl0dGVlOwor54eI56+AID4gdGhlXC1sYW50ZXJuXC1mZXN0aXZhbFwtXCgxNXRoXC1vZlwtZmlyc3RcLW1vbnRoXC1vZlwtbHVuYXJcLWNhbGVuZGFyXCk7CivljJfmtIsgPiB0aGVcLXFpbmdcLWR5bmFzdHlcLW5hbWVcLWZvclwtdGhlXC1jb2FzdGFsXC1wcm92aW5jZXNcLW9mXC1saWFvbmluZzsKK+WFq+aXlyA+IHRoZVwtXCJlaWdodFwtYmFubmVyc1wiXC1cKG1pbGl0YXJ5XC1vcmdhbmlzYXRpb25cLWluXC1xaW5nXC1keW5hc3R5XCk7Civol6Tph44gPiBuYW1lXC1vZlwtYVwtcGVyc29uXCxcLXRlbmdcLXllXCxcLWFcLWphcGFuZXNlXC1mcmllbmRcLW9mXC1sdTNcLXh1bjRcLemtr+i/hTsKK+iPr+ihqCA+IG1hcmJsZVwtcGlsbGFyXC1cKG9ybmFtZW50YWxcLWNvbHVtblwtaW5cLWZyb250XC1vZlwtcGxhY2VzXCxcLXRvbWJzXCk7CivlvoXmpa0gPiB0b1wtYXdhaXRcLWpvYlwtYXNzaWdubWVudFwtXCh0ZXJtXC11c2VkXC1vbmx5XC1pblwtbWFpbmxhbmRcLWNoaW5hXCk7Civmia7nm7ggPiB0aGVcLWFwcGVhcmFuY2VcLW9mXC1hblwtYWN0b3JcLW9yXC1hY3RyZXNzXC1pblwtY29zdHVtZVwtb3JcLW1ha2V1cDsKK+atpuihkyA+IHd1c2h1XCxcLW1hcnRpYWxcLWFydHNcLXN1Y2hcLWFzXC1zaGFkb3dcLWJveGluZ1wsXC1zd29yZHBsYXlcLFwtZXRjXC47CivkuK3lhbEgPiBcKGFiYnJldmlhdGlvblwtZm9yXClcLWNoaW5lc2VcLWNvbW11bmlzdFwtXChwYXJ0eVwsXC1yZWdpbWVcLFwtZXRjXC5cKTsKK+aUv+WNlCA+IGNwcGNjXC1cKGNoaW5lc2VcLXBlb3BsZScnc1wtcG9saXRpY2FsXC1jb25zdWx0YXRpdmVcLWNvbW1pdHRlZVwpOwor5o6h5Y+WID4gYWRvcHRcLW9yXC1jYXJyeVwtb3V0XC1cKG1lYXN1cmVzXCxcLXBvbGljaWVzXCxcLWNvdXJzZVwtb2ZcLWFjdGlvblwpOwor55mf5LiJID4gYVwtd3JldGNoZWRcLWxvb2tpbmdcLXRyYW1wXC13aG9cLWxpdmVzXC1ieVwtYmVnZ2luZ1wtb3JcLXN0ZWFsaW5nOwor6KGo5YWEID4gbWFsZVwtY291c2luXC13aXRoXC1hXC1kaWZmZXJlbnRcLXN1cm5hbWVcLVwob2xkZXJcLXRoYW5cLW9uZXNlbGZcKTsKK+S7meiNiSA+IGFcLWtpbmRcLW9mXC1wbGFudFwtdXNlZFwtYXNcLWFcLW1lZGljaW5hbFwtaGVyYlwtaW5cLWFuY2llbnRcLXRpbWVzOwor5p2/6IOhID4gYVwtYm93ZWRcLXN0cmluZ2VkXC1pbnN0cnVtZW50XC13aXRoXC1hXC10aGluXC13b29kZW5cLXNvdW5kYm9hcmQ7Civoo5zppIogPiB0YWtlXC1hXC10b25pY1wtb3JcLW5vdXJpc2hpbmdcLWZvb2RcLXRvXC1idWlsZFwtdXBcLW9uZScnc1wtaGVhbHRoOwor5ou85ZG9ID4gdG9cLWJlXC1yZWFkeVwtdG9cLXJpc2tcLW9uZScnc1wtbGlmZVwtXChpblwtZmlnaHRpbmdcLFwtd29ya1wsXC1ldGNcLlwpOwor6YG35oCSID4gdG9cLXRha2VcLW9uZScnc1wtYW5nZXJcLW91dFwtb25cLXNiXC1cKHdob1wtZG9lc1wtbm90XC1kZXNlcnZlXC1pdFwpOwor5o6b5aW9ID4gdG9cLWhhbmdcLXVwXC1wcm9wZXJseVwtXCh0ZWxlcGhvbmVcLFwtcGljdHVyZVwsXC1jbG90aGVzXCxcLWV0Y1wuXCk7Civmi5Tmr5IgPiBkcmF3XC1vdXRcLXB1c1wtYnlcLWFwcGx5aW5nXC1hXC1wbGFzdGVyXC10b1wtdGhlXC1hZmZlY3RlZFwtYXJlYTsKK+eVnOWKmyA+IGFuaW1hbFwtcG93ZXJlZFwtXChhc1wtb3Bwb3NlZFwtdG9cLWh1bWFuXC1vclwtbWFjaGluZVwtcG93ZXJlZFwpOwor5bmr6IWUID4gdm9jYWxcLWFjY29tcGFuaW1lbnRcLWluXC1zb21lXC10cmFkaXRpb25hbFwtY2hpbmVzZVwtb3BlcmFzOwor5aWU5ZaqID4gaGFzdGVuXC1ob21lXC1mb3JcLXRoZVwtZnVuZXJhbFwtb2ZcLWFcLXBhcmVudFwtb3JcLWdyYW5kcGFyZW50Owor55m96IqNID4gXChwZWVsZWRcKVwtcm9vdFwtb2ZcLWhlcmJhY2VvdXNcLXBlb255XC1cKHBhZW9uaWFcLWxhY3RpZmxvcmFcKTsKK+iIiOi2oyA+IGludGVyZXN0XC1cKGRpcmVjdGVkXC10b3dhcmRzXCxcLW5vdFwtaW5oZXJlbnRcLWluXC1zb21ldGhpbmdcKTsKK+aomeWFtSA+IHBhcmFkZVwtZ3VhcmRzXC1cKHVzdWFsbHlcLXNwYWNlZFwtb3V0XC1hbG9uZ1wtcGFyYWRlXC1yb3V0ZXNcKTsKK+azlea1tyA+IG5hbWVcLW9mXC1hXC1idWRkaGlzdFwtbW9ua1wsXC1mYWhhaVwsXC1mcm9tXC1tYWRhbVwtd2hpdGVcLXNuYWtlOwor5b2I55C0ID4gdG9cLXBsYXlcLW9yXC1zdHJ1bVwtYVwtbHV0ZVwtb3JcLW90aGVyXC1zdHJpbmdlZFwtaW5zdHJ1bWVudDsKK+eZvemZtiA+IHdoaXRlXC1wb3R0ZXJ5XC1cKG9mXC1zaGFuZ1wtZHluYXN0cnlcLTE2XC0xMXRoXC1jZW50dXJ5XC1iY1wpOwor5YyF5bmyID4gYmVcLXJlc3BvbnNpYmxlXC1mb3JcLWFcLXRhc2tcLXVuaXRcLXVudGlsXC1pdFwtaXNcLWNvbXBsZXRlZDsKK+W5s+aWuSA+IHNxdWFyZVwtXChhc1wtaW5cLXNxdWFyZVwtZm9vdFwsXC1zcXVhcmVcLW1pbGVcLFwtc3F1YXJlXC1yb290XCk7Civmi4nosp0gPiBcKGpvaG5cKVwtcmFiZVwtXChnZXJtYW5cLWV5ZXdpdG5lc3NcLXRvXC1uYW5qaW5nXC1tYXNzYWNyZVwpOwor5ber5bGxID4gbXRcLlwtd3VcLFwtb25cLXRoZVwtY2hhbmdqaWFuZ1wtcml2ZXJcLWJ5XC10aGVcLXRocmVlXC1nb3JnZXM7CivmjZXkv5ggPiBjYXB0dXJlXC1lbmVteVwtcGVyc29ubmVsXC1cKGZvclwtaW50ZWxsaWdlbmNlXC1wdXJwb3Nlc1wpOwor6Y+i5a6iID4gYXJtZWRcLWVzY29ydFwtXChvZlwtdHJhdmVsbGVyc1wtb3JcLW1lcmNoYW50cycnXC1jYXJhdmFuc1wpOwor6LKd5q+NID4gdGhlXC1idWxiXC1vZlwtdGhlXC1mcml0aWxsYXJ5XC1cKGZyaXRpbGxhcmlhXC10aHVuYmVyZ2lpXCk7CivlkI3li50gPiBhXC1wbGFjZVwtZmFtb3VzXC1mb3JcLWl0c1wtc2NlbmVyeVwtb3JcLWhpc3RvcmljYWxcLXJlbGljczsKK+awkeaogiA+IG11c2ljXCxcLWVzcFwuXC1mb2xrXC1tdXNpY1wsXC1mb3JcLXRyYWRpdGlvbmFsXC1pbnN0cnVtZW50czsKK+mZneilvyA+IHNoYWFueGlcLXByb3ZpbmNlXCxcLWNoaW5hXC1cKGNhcGl0b2xcLWNpdHlcLWlzXC14aScnYW5cLeilv+WuiVwpOwor5pel5pa5ID4gdGhlXC1qYXBhbmVzZVwtc2lkZVwtb3JcLXBhcnR5XC1cKGluXC1uZWdvdGlhdGlvbnNcLFwtZXRjXC5cKTsKK+apq+aKmCA+IFwoaG9yaXpvbnRhbFwtc3RhcnRpbmdcLXJpZ2h0XC1hbmdsZVwtY2hhcmFjdGVyXC1zdHJva2VcKTsKK+ilv+WuiSA+IHhpJydhblwtXChjaXR5XClcLFwtdGhlXC1jYXBpdG9sXC1jaXR5XC1vZlwtc2hhYW54aVwtcHJvdmluY2U7CivlsI/pnZIgPiBuYW1lXC1vZlwtYVwtcGVyc29uXCxcLXhpYW9xaW5nXCxcLWZyb21cLW1hZGFtXC13aGl0ZVwtc25ha2U7Civoh6jmkbkgPiB0b1wtY29weVwtXChhXC1tb2RlbFwtb2ZcLWNhbGxpZ3JhcGh5XC1vclwtcGFpbnRpbmdcLFwtZXRjXC5cKTsKK+WCmeWPliA+IGJlXC1vblwtdGhlXC13YWl0aW5nXC1saXN0XC1cKGZvclwtYWRtaXNzaW9uXC10b1wtYVwtc2Nob29sXCk7CivmnKzmnKsgPiB0aGVcLXdob2xlXC1jb3Vyc2VcLW9mXC1hblwtZXZlbnRcLWZyb21cLWJlZ2lubmluZ1wtdG9cLWVuZDsKK+mgk+aMqyA+IHdpdGhcLXN5bmNvcGF0ZWRcLWNhZGVuY2VcLVwoYnJ1c2hcLXN0cm9rZVwtaW5cLXBhaW50aW5nXCk7CivniYjnlasgPiBhXC1waWN0dXJlXC1wcmludGVkXC1mcm9tXC1hblwtZW5ncmF2ZWRcLW9yXC1ldGNoZWRcLXBsYXRlOwor6YG/6KuxID4gdGFib29cLWFnYWluc3RcLXVzaW5nXC10aGVcLXBlcnNvbmFsXC1uYW1lc1wtb2ZcLWVtcGVyb3JzOwor5q2m5p2+ID4gd3Vzb25nXCxcLW5hbWVcLW9mXC1hXC1wZXJzb25cLFwtYVwtaGVyb1wtaW5cLXNodWlcLWh1XC16aHVhbjsKK+ioseS7mSA+IG5hbWVcLW9mXC1hXC1wZXJzb25cLFwteHVcLXhpYW5cLFwtZnJvbVwtbWFkYW1cLXdoaXRlXC1zbmFrZTsKK+WEkOebuCA+IGF0dGVuZGFudFwtb2ZcLXRoZVwtYnJpZGVcLW9yXC1icmlkZWdyb29tXC1hdFwtYVwtd2VkZGluZzsKK+ijnOeAiSA+IHJlaW5mb3JjaW5nXC1hbmRcLXJlZHVjaW5nXC1tZXRob2RzXC1cKGluXC1hY3VwdW5jdHVyZVwpOwor5bm55LqLID4gYWRtaW5pc3RyYXRpdmVcLXNlY3JldGFyeVwtXChpblwtY2hhcmdlXC1vZlwtc29tZXRoaW5nXCk7Civlt6vls70gPiB3dXhpYVwtZ29yZ2VcLFwtaW5cLXRoZVwtY2hhbmdqaWFuZ1wtcml2ZXJcLXRocmVlXC1nb3JnZXM7CivmipjnrYYgPiBhZ2FpbnN0XC10aGVcLWJyaXN0bGVzXC1cKGJydXNoXC1tb3ZlbWVudFwtaW5cLXBhaW50aW5nXCk7CivlsIjnt5ogPiBzcGVjaWFsXC1wdXJwb3NlXC1waG9uZVwtbGluZVwtb3JcLWNvbW11bmljYXRpb25zXC1saW5rOwor5ZyW5YWLID4gXChnYXJ5XC1sXC5cKVwtdG9va2VyXC1cKG1vdG9yb2xhXC1jaGFpcm1hblwtb2ZcLXRoZVwtYm9hcmRcKTsKK+aWnOmJpCA+IFwoZG93bndhcmRzXC1yaWdodFwtY29uY2F2ZVwtaG9va2VkXC1jaGFyYWN0ZXJcLXN0cm9rZVwpOwor6LGO5oqYID4gXChkb3dud2FyZHNcLXN0YXJ0aW5nXC1yaWdodFwtYW5nbGVcLWNoYXJhY3Rlclwtc3Ryb2tlXCk7CivogIHlhYQgPiAnJ29sZFwtY2hhcCcnXC1cKGZvcm1cLW9mXC1hZGRyZXNzXC1iZXR3ZWVuXC1tYWxlXC1mcmllbmRzXCk7CivmqavnrYYgPiBicmlzdGxlc1wtbHlpbmdcLWRvd25cLVwoYnJ1c2hcLW1vdmVtZW50XC1pblwtcGFpbnRpbmdcKTsKK+aOoeizvCA+IG1ha2VcLXB1cmNoYXNlc1wtZm9yXC1hblwtb3JnYW5pemF0aW9uXC1vclwtZW50ZXJwcmlzZTsKK+ato+WcqCA+IGluXC10aGVcLXByb2Nlc3NcLW9mXC1cKGRvaW5nXC1zb21ldGhpbmdcLW9yXC1oYXBwZW5pbmdcKTsKK+WgseWciyA+IGRlZGljYXRlXC1vbmVzZWxmXC10b1wtdGhlXC1zZXJ2aWNlXC1vZlwtb25lJydzXC1jb3VudHJ5Owor562G6Ke4ID4gYnJ1c2hcLXN0cm9rZVwtaW5cLWNoaW5lc2VcLXBhaW50aW5nXC1hbmRcLWNhbGxpZ3JhcGh5Owor5L6/5Lq6ID4gc29tZWJvZHlcLXdob1wtaGFwcGVuc1wtdG9cLWJlXC1vblwtaGFuZFwtZm9yXC1hblwtZXJyYW5kOwor6Kyd6L6bID4gY2hlYVwtc2ltXC1cKGNhbWJvZGlhblwtbmF0aW9uYWxcLWFzc2VtYmx5XC1wcmVzaWRlbnRcKTsKK+WklumbuyA+IHJlcG9ydHNcLWZyb21cLWZvcmVpZ25cLVwobm9uXC1jaGluZXNlXClcLW5ld3NcLWFnYW5jaWVzOwor57235LqGID4gYVwtbW9kYWxcLXBhcnRpY2xlXC1pbmRpY2F0aW5nXC1cKGRvbicndFwtbWluZFwtaXRcLFwtb2tcKTsKK+mdnOWxsSA+IGNoZW5nXC1zYW5cLVwoZWxlY3RvcmFsXC1jb25zdGl0dWVuY3lcLWluXC1zaW5nYXBvcmVcKTsKK+aKk+mjryA+IGFcLWtpbmRcLW9mXC1mb29kXC1wb3B1bGFyXC1hbW9uZ1wtYmVsaWV2ZXJzXC1pblwtaXNsYW07Civnmb3mj48gPiBsaW5lXC1kcmF3aW5nXC1pblwtdHJhZGl0aW9uYWxcLWlua1wtYW5kXC1icnVzaFwtc3R5bGU7CivllJDlsbEgPiB0YW5nXC1zaGFuXC1cKGFcLWNoaW5lc2VcLWNpdHlcLWluXC1oZWJlaVwt5rKz5YyXXC1wcm92aW5jZVwpOwor6YG/5auMID4gYXZvaWRcLWRvaW5nXC1hbnl0aGluZ1wtdGhhdFwtbWF5XC1hcm91c2VcLXN1c3BpY2lvbjsKK+WgseW5lSA+IGFubm91bmNlXC10aGVcLWl0ZW1zXC1vblwtYVwtXCh0aGVhdHJpY2FsXClcLXByb2dyYW1tZTsKK+imquWutiA+IHBhcmVudHNcLW9mXC1vbmUnJ3NcLWRhdWdodGVyXC1pblwtbGF3XC1vclwtc29uXC1pblwtbGF3Owor5Zac57OWID4gc3dlZXRcLWdpdmVuXC1vblwtYVwtaGFwcHlcLW9jY2FzaW9uXC1cKGVzcFwuXC13ZWRkaW5nXCk7Civmi5zlo70gPiBjb25ncmF0dWxhdGVcLWFuXC1lbGRlcmx5XC1wZXJzb25cLW9uXC1oaXNcLWJpcnRoZGF5Owor5Lim6KGMID4gaW5cLXBhcmFsbGVsXC1cW2RldmVsb3BtZW50XCxcLWltcGxlbWVudGF0aW9uXCxcLWV0Y1xdOwor5Lyv5p2wID4gXChzYW11ZWxcKVwtYmVyZ2VyXC1cKHVzXC1uYXRpb25hbFwtc2VjdXJpdHlcLWFkdmlzb3JcKTsKK+adseebnyA+IGFzZWFuXC1cKGFzc29jaWF0aW9uXC1vZlwtc291dGhlYXN0XC1hc2lhblwtbmF0aW9uc1wpOwor5pu+57aTID4gXChyZWZlcnNcLXRvXC1zb21ldGhpbmdcLXRoYXRcLWhhcHBlbmVkXC1wcmV2aW91c2x5XCk7Civlj6/oposgPiBpdFwtY2FuXC1jbGVhcmx5XC1iZVwtc2VlblwtXCh0aGF0XC10aGlzXC1pc1wtdGhlXC1jYXNlXCk7CivmhbDllY8gPiBleHByZXNzXC1zeW1wYXRoeVwsXC1ncmVldGluZ3NcLFwtY29uc29sYXRpb25cLFwtZXRjXC47CivmtbflvrcgPiBoeWRlXC1cKGVnXCxcLWhvdXNlXC1qdWRpY2lhcnlcLWNoYWlybWFuXC1oZW5yeVwtaHlkZVwpOwor576F5pavID4gcm90aFwtXChlZ1wsXC1ocndcLWV4ZWN1dGl2ZVwtZGlyZWN0b3JcLWtlbm5ldGhcLXJvdGhcKTsKK+aXgeiBvSA+IGJlXC1hXC12aXNpdG9yXC1cKGF0XC1hXC1tZWV0aW5nXCxcLWNsYXNzXCxcLXRyaWFsXCxcLWV0Y1wpOwor5o6o6L6tID4gdG9cLWRlY2xpbmVcLVwoYW5cLWFwcG9pbnRtZW50XCxcLWludml0YXRpb25cLFwtZXRjXC5cKTsKK+eZveeXoiA+IGR5c2VudGVyeVwtY2hhcmFjdGVyaXplZFwtYnlcLXdoaXRlXC1tdWNvdXNcLXN0b29sOwor6I+v5L2XID4gbmFtZVwtb2ZcLWFcLWZhbW91c1wtZG9jdG9yXC1pblwtb2xkXC10aW1lc1wsXC1odWFcLXR1bzsKK+ajkuanjCA+IHdvb2RlblwtY2x1YlwtXCh1c2VkXC10b1wtYmVhdFwtY2xvdGhlc1wtaW5cLXdhc2hpbmdcKTsKK+WQnuWQkCA+IHRvXC10YWtlXC1pblwtYW5kXC1zZW5kXC1vdXRcLVwoaW5cLWxhcmdlXC1xdWFudGl0aWVzXCk7CivmlrfmqYsgPiB0aGVcLWJyb2tlblwtYnJpZGdlXC1cKGF0XC13ZXN0XC1sYWtlXC1pblwtaGFuZ3pob3VcKTsKK+awo+WKnyA+IHFpZ29uZ1wsXC1hXC1zeXN0ZW1cLW9mXC1kZWVwXC1icmVhdGhpbmdcLWV4ZXJjaXNlczsKK+ecgee0miA+IHByb3ZpbmNpYWxcLWxldmVsXC1cKGVnXCxcLXByb3ZpbmNpYWxcLWdvdmVybm1lbnRcKTsKK+atpuaJkyA+IGFjcm9iYXRpY1wtZmlnaHRpbmdcLWluXC1jaGluZXNlXC1vcGVyYVwtb3JcLWRhbmNlOwor5aCx5aSxID4gcmVwb3J0XC10aGVcLWxvc3NcLXRvXC10aGVcLWF1dGhvcml0aWVzXC1jb25jZXJuZWQ7Civkv53ppIogPiB0YWtlXC1nb29kXC1jYXJlXC1vZlwtXChvclwtY29uc2VydmVcKVwtb25lJydzXC1oZWFsdGg7CivlubPkv6EgPiBvcmRpbmFyeVwtbWFpbFwtXChhc1wtb3Bwb3NlZFwtdG9cLWFpclwtbWFpbFwsXC1ldGNcLlwpOwor5YiG5LqrID4gb2J0YWluXC1vbmUnJ3NcLXNoYXJlXC1cKG9mXC13ZWFsdGhcLFwtcmlnaHRzXCxcLWV0Y1wuXCk7CivntIXloKEgPiByZWRcLWZvcnRcLVwoaGlzdG9yaWNcLWJ1aWxkaW5nXC1pblwtZGVsaGlcLFwtaW5kaWFcKTsKK+WFg+WutSA+IHN3ZWV0XC1kdW1wbGluZ3NcLW1hZGVcLW9mXC1nbHV0aW5vdXNcLXJpY2VcLWZsb3VyOwor6Ieo5a+rID4gdG9cLWNvcHlcLVwoYVwtbW9kZWxcLW9mXC1jYWxsaWdyYXBoeVwtb3JcLXBhaW50aW5nXCk7CivmnIjppIUgPiBtb29uXC1jYWtlXC1cKGVzcFwuXC1mb3JcLXRoZVwtbWlkXC1hdXR1bW5cLWZlc3RpdmFsXCk7CivmioTlrrYgPiB0b1wtc2VhcmNoXC1hXC1ob3VzZVwtYW5kXC1jb25maXNjYXRlXC1wb3NzZXNzaW9uczsKK+acg+imiyA+IHRvXC1tZWV0XC13aXRoXC1cKHNvbWVvbmVcLXdob1wtaXNcLXBheWluZ1wtYVwtdmlzaXRcKTsKK+Wkp+iIiSA+IGNhcnJ5XC1vdXRcLWFcLWxhcmdlXC1zY2FsZVwtXChtaWxpdGFyeVwpXC1vcGVyYXRpb247Civml6XmvLggPiBcKGtlZXBcLWluY3JlYXNpbmdcLFwtY2hhbmdpbmdcLFwtZXRjXC5cKVwtZGF5XC1ieVwtZGF5Owor6K2w5bitID4gc2VhdFwtaW5cLWFcLXBhcmxpYW1lbnRcLW9yXC1sZWdpc2xhdGl2ZVwtYXNzZW1ibHk7CivpgJrnt50gPiB3YW50ZWRcLWJ5XC10aGVcLXBvbGljZVwtXChmdWdpdGl2ZVwtb3JcLWNyaW1pbmFsXCk7CivnnJ/ntI0gPiBcKG1vaGFtbWFkXC1hbGlcKVwtamlubmFoXC1cKGZvdW5kZXJcLW9mXC1wYWtpc3RhblwpOwor6a2v6LOTID4gcnViaW5cLVwoZWdcLFwtdHJlYXN1cnlcLXNlY3JldGFyeVwtcm9iZXJ0XC1ydWJpblwpOwor5Yqb5a+2ID4gbGlwcG9cLVwoZ3JvdXBcKVwtXChpbmRvbmVzaWFuXC1idXNpbmVzc1wtY29uY2VyblwpOwor5YG06YuSID4gb2JsaXF1ZVwtYXR0YWNrXC1cKGJydXNoXC1tb3ZlbWVudFwtaW5cLXBhaW50aW5nXCk7CivltIfnpo4gPiBjaG9uZ3poZW5cLFwtbGFzdFwtZW1wZXJvclwtb2ZcLXRoZVwtbWluZ1wtZHluYXN0eTsKK+eZveWtlyA+IHdyb25nbHlcLXdyaXR0ZW5cLWFuZFwtbWlzcHJvbm91bmNlZFwtY2hhcmFjdGVyOwor5bCN562WID4gY291bnRlcm1lYXN1cmVcLWZvclwtZGVhbGluZ1wtd2l0aFwtYVwtc2l0dWF0aW9uOwor562G5YqbID4gdmlnb3VyXC1vZlwtc3Ryb2tlc1wtaW5cLWNhbGxpZ3JhcGh5XC1vclwtZHJhd2luZzsKK+e9sOmFkiA+IHRvXC1kcmlua1wtYXNcLXRoZVwtcmVzdWx0XC1vZlwtaGF2aW5nXC1sb3N0XC1hXC1iZXQ7CivmmJ/pq5QgPiBjZWxlc3RpYWxcLWJvZHlcLVwoZWdcLFwtcGxhbmV0XCxcLXNhdGVsbGl0ZVwsXC1ldGNcKTsKK+S4u+euoSA+IFwoYmVcKVwtcGVyc29uXC1pblwtY2hhcmdlXC1vZlwtXChhXC1wb3NpdGlvblwsXC1ldGNcLlwpOwor5q2l6Z+7ID4gdG9cLXdyaXRlXC1hXC1wb2VtXC11c2luZ1wtYW5vdGhlclwtcG9lbScnc1wtcmh5bWVzOwor5Y+j5rCjID4gXChmcmllbmRseVwtb3JcLXVuZnJpZW5kbHlcKVwtdG9uZVwtXChvZlwtY29tbWVudHNcKTsKK+ato+mLkiA+IGZyb250YWxcLWF0dGFja1wtXChicnVzaFwtbW92ZW1lbnRcLWluXC1wYWludGluZ1wpOwor5pif55CDID4gY2VsZXN0aWFsXC1ib2R5XC1cKGVnXCxcLXBsYW5ldFwsXC1zYXRlbGxpdGVcLFwtZXRjXCk7CivkuIvkvoYgPiBcKHZlcmJcLXN1ZmZpeFwtaW5kaWNhdGluZ1wtY29udGludWF0aW9uXCxcLWV0Y1wuXCk7Civlubnpg6ggPiBhXC1jYWRyZVwtXChpZVwsXC1tYW5hZ2VyXCxcLXN0YWZmXCxcLW9mZmljZXJcLFwtZXRjXC5cKTsKK+aOpee0jSA+IGFkbWl0XC1cKGludG9cLW1lbWJlcnNoaXBcLW9mXC1hblwtb3JnYW5pemF0aW9uXCk7CivmiorpoqggPiBrZWVwXC13YXRjaFwtXChkdXJpbmdcLWFcLWNsYW5kZXN0aW5lXC1hY3Rpdml0eVwpOwor5YKZ6ICVID4gbWFrZVwtcHJlcGFyYXRpb25zXC1mb3JcLXBsb3VnaGluZ1wtYW5kXC1zb3dpbmc7CivmkqXlhpcgPiBmaW5kXC10aW1lXC1pblwtdGhlXC1taWRzdFwtb2ZcLXByZXNzaW5nXC1hZmZhaXJzOwor5qC96LSTID4gdG9cLWZyYW1lXC1zb21lb25lXC1cKGJ5XC1wbGFudGluZ1wtc3RoXC1vblwtdGhlbVwpOwor5o+b5Y+WID4gZ2l2ZVwtc29tZXRoaW5nXC1hbmRcLWdldFwtc29tZXRoaW5nXC1pblwtcmV0dXJuOwor5YG95pu4ID4gXChmb3JnZWRcLFwtZHViaW91c1wsXC1taXNjbGFzc2lmaWVkXClcLW9sZFwtYm9va3M7CivnsL/lhoogPiBib29rc1wtZm9yXC10YWtpbmdcLW5vdGVzXC1vclwta2VlcGluZ1wtYWNjb3VudHM7CivkuIrou4ogPiB0b1wtZ2V0XC1vblwtb3JcLWludG9cLVwoYVwtYnVzXCxcLXRyYWluXCxcLWNhclwtZXRjXC5cKTsKK+ethuS4iyA+IHRoZVwtd29yZGluZ1wtYW5kXC1wdXJwb3J0XC1vZlwtd2hhdFwtb25lXC13cml0ZXM7Civkvr/lh70gPiBhblwtaW5mb3JtYWxcLWxldHRlclwtc2VudFwtYnlcLWFuXC1vcmdhbml6YXRpb247CivpppbluK0gPiBjaGllZlwtXChyZXByZXNlbnRhdGl2ZVwsXC1jb3JyZXNwb25kZW50XCxcLWV0Y1wpOwor6LSF5am/ID4gc29uXC1pblwtbGF3XC1saXZpbmdcLWF0XC13aWZlJydzXC1wYXJlbnQnJ3NcLWhvdXNlOwor6JmV5pa8ID4gYmVcLVwoaW5cLXNvbWVcLXN0YXRlXCxcLXBvc2l0aW9uXCxcLW9yXC1jb25kaXRpb25cKTsKK+aVl+ethiA+IGFcLWZhdWx0eVwtc3Ryb2tlXC1pblwtY2FsbGlncmFwaHlcLW9yXC1wYWludGluZzsKK+WHuui3ryA+IGFcLXdheVwtb3V0XC1cKG9mXC1hXC1kaWZmaWN1bHRcLXNpdHVhdGlvblwsXC1ldGNcKTsKK+W6puaXpSA+IHNjcmF0Y2hcLW91dFwtYVwtZGlmZmljdWx0XCxcLW1lYWdlclwtZXhpc3RlbmNlOwor5aCx5qGIID4gcmVwb3J0XC1hXC1jYXNlXC10b1wtdGhlXC1zZWN1cml0eVwtYXV0aG9yaXRpZXM7CivlhbXmupAgPiBtYW5wb3dlclwtcmVzb3VyY2VzXC1cKGZvclwtbWlsaXRhcnlcLXNlcnZpY2VcKTsKK+aciembuyA+IFwob2ZcLWFcLWR3ZWxsaW5nXClcLXN1cHBsaWVkXC13aXRoXC1lbGVjdHJpY2l0eTsKK+izgeiHqCA+IFwob2ZcLWRpc3Rpbmd1aXNoZWRcLWd1ZXN0c1wpXC1ob25vdXJcLW15XC1ob3VzZTsKK+advuS4iyA+IG1hdHN1c2hpdGFcLVwoamFwYW5lc2VcLWVsZWN0cm9uaWNzXC1jb21wYW55XCk7CivkuI3lppkgPiBcKG9mXC1hXC10dXJuXC1vZlwtZXZlbnRzXClcLW5vdFwtdG9vXC1lbmNvdXJhZ2luZzsKK+WLieW8tyA+IG1hbmFnZVwtXCh0b1wtZG9cLXNvbWV0aGluZ1wpXC13aXRoXC1kaWZmaWN1bHR5Owor5Yil54ShID4gaGF2ZVwtbm9cLW90aGVyXC1cKGNob2ljZVwsXC1hbHRlcm5hdGl2ZVwsXC1ldGNcKTsKK+WFrOe0hCA+IGNvbnZlbnRpb25cLVwoaWVcLFwtaW50ZXJuYXRpb25hbFwtYWdyZWVtZW50XCk7CivlubTluqYgPiB5ZWFyXC1cKGVnXCxcLXNjaG9vbFwteWVhclwsXC1maXNjYWxcLXllYXJcLFwtZXRjXCk7CivnrYbpoIYgPiBvcmRlclwtb2ZcLXN0cm9rZXNcLW9ic2VydmVkXC1pblwtY2FsbGlncmFwaHk7CivmiY7ph50gPiB0b1wtZ2l2ZVwtb3JcLWhhdmVcLWFuXC1hY3VwdW5jdHVyZVwtdHJlYXRtZW50Owor6KO95YqRID4gXChjaGVtaWNhbFwtb3JcLXBoYXJtYWNldXRpY2FsXClcLXByZXBhcmF0aW9uOwor6auU5pyDID4ga25vd1wtXCh0aHJvdWdoXC1sZWFybmluZ1wtb3JcLWJ5XC1leHBlcmllbmNlXCk7Civlgb3miZggPiBmYWtpbmdcLWFcLW1vZGVyblwtb2JqZWN0XC1hc1wtYW5cLWFuY2llbnRcLW9uZTsKK+a1t+mXnCA+IGN1c3RvbXNcLVwoaWVcLFwtYm9yZGVyXC1jcm9zc2luZ1wtaW5zcGVjdGlvblwpOwor56KR6KiYID4gYVwtcmVjb3JkXC1vZlwtZXZlbnRzXC1pbnNjcmliZWRcLW9uXC1hXC10YWJsZXQ7CivljIXovqYgPiB0YWtlXC1jYXJlXC1vZlwtZXZlcnl0aGluZ1wtY29uY2VybmluZ1wtYVwtam9iOwor5Ye66Z2iID4gYWN0XC1pblwtYVwtXChvZmZpY2lhbFwtb3JcLXBlcnNvbmFsXClcLWNhcGFjaXR5Owor55u46ZqUID4gYmVcLXNlcGFyYXRlZFwtYnlcLVwoZGlzdGFuY2VcLW9yXC10aW1lXCxcLWV0Y1wpOwor5pmC5aCxID4gXCJ0aW1lc1wiXC1cKG5ld3NwYXBlclwsXC1lZ1wsXC1uZXdcLXlvcmtcLXRpbWVzXCk7CivpgJroiKogPiBjb25uZWN0ZWRcLWJ5XC1haXJcfHNlYVwtdHJhZmZpY1wtb3JcLXNlcnZpY2U7CivpgbflsYUgPiB0b1wtbW92ZVwtXChmcm9tXC1vbmVcLXJlc2lkZW5jZVwtdG9cLWFub3RoZXJcKTsKK+W5tOS7oyA+IGFcLWRlY2FkZVwtb2ZcLWFcLWNlbnR1cnlcLVwoZWdcLFwtdGhlXC1zaXh0aWVzXCk7Civllqznn7MgPiBxaWFvXC1zaGlcLVwoY2hpbmVzZVwtbGVhZGVyc2hpcFwtY29udGVuZGVyXCk7CivosY7piaQgPiBcKHN0cmFpZ2h0XC1kb3duXC1ob29rZWRcLWNoYXJhY3Rlclwtc3Ryb2tlXCk7CivmiJDmnKwgPiBcKG1hbnVmYWN0dXJpbmdcLFwtcHJvZHVjdGlvblwsXC1ldGNcLlwpXC1jb3N0czsKK+S7o+eQhiA+IGFjdGluZ1wtXCh0ZW1wb3JhcmlseVwtZmlsbGluZ1wtYVwtcG9zaXRpb25cKTsKK+WuouW7syA+IGRyYXdpbmdcLXJvb21cLVwocm9vbVwtZm9yXC1hcnJpdmluZ1wtZ3Vlc3RzXCk7Civok67pnKcgPiB3YXhcLWFwcGxlXC1cKGFcLXJlZGRpc2hcLXBlYXJcLXNoYXBlZFwtZnJ1aXRcKTsKK+mhjOewvSA+IHRvXC13cml0ZVwtdGhlXC10aXRsZVwtb2ZcLWFcLWJvb2tcLW9uXC1hXC1sYWJlbDsKK+iAgeS6jCA+IHRoZVwtc2Vjb25kXC1jaGlsZFwtb3JcLWJyb3RoZXJcLVwob3JcLXNpc3RlclwpOwor5Lit5Y2XID4gXChhYmJyZXZpYXRpb25cLWZvclwpXC1jaGluYVwtXC1cLXNvdXRoXC1hZnJpY2E7CivniYjmrKEgPiB0aGVcLW9yZGVyXC1pblwtd2hpY2hcLWVkaXRpb25zXC1hcmVcLXByaW50ZWQ7Civlj5flgrcgPiBzdWZmZXJcLWluanVyaWVzXC1cKGluXC1hblwtYWNjaWRlbnRcLFwtZXRjXC5cKTsKK+iogueriyA+IGFncmVlXC10b1wtXCh0cmVhdHlcLFwtY29udHJhY3RcLFwtYWdyZWVtZW50XCk7CivlpI/mm4YgPiB0aGVcLXRyYWRpdGlvbmFsXC1jaGluZXNlXC1sdW5hclwtY2FsZW5kYXI7CivluKvnr4QgPiBub3JtYWxcLVwoZWdcLFwtYmVpamluZ1wtbm9ybWFsXC11bml2ZXJzaXR5XCk7Civlu6PloLQgPiBhXC1wdWJsaWNcLXNxdWFyZVwtXChlZ1wsXC10aWFuYW5tZW5cLXNxdWFyZVwpOwor6KOc56WoID4gYnV5XC1vbmUnJ3NcLXRpY2tldFwtYWZ0ZXJcLXRoZVwtbm9ybWFsXC10aW1lOwor55m854eSID4gaGF2ZVwtYVwtaGlnaFwtdGVtcGVyYXR1cmVcLVwoZnJvbVwtaWxsbmVzc1wpOwor55uG5ZywID4gYmFzaW5cLVwobG93XC1seWluZ1wtZ2VvZ3JhcGhpY2FsXC1mZWF0dXJlXCk7CivmiYvot6EgPiBzYlwuJydzXC1vcmlnaW5hbFwtaGFuZHdyaXRpbmdcLW9yXC1wYWludGluZzsKK+eSp+mChCA+IHJldHVyblwtXChhXC1ib3Jyb3dlZFwtb2JqZWN0XClcLXdpdGhcLXRoYW5rczsKK+ihqOWmuSA+IGZlbWFsZVwtY291c2luXC13aXRoXC1hXC1kaWZmZXJlbnRcLXN1cm5hbWU7Civmi4bmlaMgPiB0b1wtYnJlYWtcLXVwXC1cKGFcLW1hcnJpYWdlXCxcLWZhbWlseVwsXC1ldGNcLlwpOwor5YKZ5ZOBID4gbWFjaGluZVwtcGFydHNcLW9yXC10b29sc1wta2VwdFwtaW5cLXJlc2VydmU7Civpppbku7sgPiBmaXJzdFwtcGVyc29uXC10b1wtYmVcLWFwcG9pbnRlZFwtdG9cLWFcLXBvc3Q7Civpg6jplbcgPiBoZWFkXC1vZlwtYVwtXChnb3Zlcm5tZW50XCxcLWV0Y1wpXC1kZXBhcnRtZW50Owor5q+U6YePID4gdGFrZVwtcm91Z2hcLW1lYXN1cmVtZW50c1wtXCh3aXRoXC10aGVcLWhhbmQ7CivljZrmhJsgPiB1bml2ZXJzYWxcLWZyYXRlcm5pdHlcLVwob3JcLWJyb3RoZXJob29kXCk7CivmlZfngasgPiByZWxpZXZlXC1pbmZsYW1tYXRpb25cLW9yXC1pbnRlcm5hbFwtaGVhdDsKK+e2k+eHnyA+IGVuZ2FnZVwtaW5cLVwoYVwtYnVzaW5lc3NcLWFjdGl2aXR5XCxcLWV0Y1wuXCk7Civpm4bmiJAgPiBpbnRlZ3JhdGVkXC1cKGFzXC1pblwtaW50ZWdyYXRlZFwtY2lyY3VpdFwpOwor5pS/5aeUID4gcG9saXRpY2FsXC1jb21taXNzYXJcLVwod2l0aGluXC10aGVcLWFybXlcKTsKK+e3qOWwjiA+IHdyaXRlXC1hbmRcLWRpcmVjdFwtXChhXC1wbGF5XCxcLWZpbG1cLFwtZXRjXC5cKTsKK+ihjOmnmyA+IFwodmVoaWNsZXNcLFwtZXRjXC5cKVwtdHJhdmVsXC1hbG9uZ1wtYVwtcm91dGU7CivlhbXnqK4gPiBcKG1pbGl0YXJ5XClcLWJyYW5jaFwtb2ZcLXRoZVwtYXJtZWRcLWZvcmNlczsKK+mAvOWuriA+IGZvcmNlXC10aGVcLWtpbmdcLW9yXC1lbXBlcm9yXC10b1wtYWJkaWNhdGU7CivoiKrooYwgPiBzYWlsXC1vclwtZmx5XC1cKGluXC1haXJcLFwtd2F0ZXJcLFwtb3JcLXNwYWNlXCk7Civnm7jkv6EgPiBiZVwtY29udmluY2VkXC1cKHRoYXRcLXNvbWV0aGluZ1wtaXNcLXRydWVcKTsKK+aLlOenpyA+IHB1bGxcLXVwXC1zZWVkbGluZ3NcLVwoZm9yXC10cmFuc3BsYW50aW5nXCk7CivmiYvoo6EgPiBcKGFcLXNpdHVhdGlvblwtaXNcKVwtaW5cLVwoc29tZW9uZScnc1wpXC1oYW5kczsKK+aNleaSiCA+IGZpc2hcLWZvclwtXChhcXVhdGljXC1hbmltYWxzXC1hbmRcLXBsYW50c1wpOwor57C95ZCNID4gdG9cLXNpZ25cLVwob25lJydzXC1uYW1lXC13aXRoXC1hXC1wZW5cLFwtZXRjXC5cKTsKK+a/n+WNlyA+IGppJyduYW5cLVwoY2FwaXRhbFwtb2ZcLXNoYW5kb25nXC1wcm92aW5jZVwpOwor5bGP5qKdID4gc2V0XC1vZlwtXCh1c3VhbGx5XC1mb3VyXClcLWhhbmdpbmdcLXNjcm9sbHM7Civnqbbnq58gPiBhZnRlclwtYWxsXC1cKHdoZW5cLWFsbFwtaXNcLXNhaWRcLWFuZFwtZG9uZVwpOwor6Y6u5rGfID4gemhlbmppYW5nXC1cKGNpdHlcKVwsXC1pblwtamlhbmdzdVwtcHJvdmluY2U7CivkuLvnp5EgPiByZXF1aXJlZFwtY291cnNlc1wtaW5cLXRoZVwtbWFqb3JcLXN1YmplY3Q7Civnj63lupUgPiBvcmRpbmFyeVwtbWVtYmVyc1wtb2ZcLXRoZWF0cmljYWxcLXRyb3VwZTsKK+mHkee8vSA+IFwoZ29sZFwpXC1hbG1zXC1ib3dsXC1cKG9mXC1hXC1idWRkaGlzdFwtbW9ua1wpOwor6IGv5ZCNID4gam9pbnRseVwtXChzaWduZWRcLFwtZGVjbGFyZWRcLFwtc3BvbnNvcmVkXCk7CivkuIvmprsgPiBzdGF5XC1hdFwtXChhXC1ob3RlbFwsXC1ldGNcLlwtZHVyaW5nXC1hXC10cmlwXCk7CivoqJjov7AgPiBtYWtlXC1hXC1kZXNjcmlwdGl2ZVwtcmVjb3JkXC1cKG9mXC1ldmVudHNcKTsKK+aal+WCtyA+IGludGVybmFsXC1cKGludmlzaWJsZVwpXC1pbmp1cnlcLVwoZGFtYWdlXCk7CivlpKrmuZYgPiB0YWlcLWh1XC1sYWtlXCxcLWFcLWJpZ1wtbGFrZVwtYnlcLXd1eGlcLWNpdHk7CivmqavpiaQgPiBcKGhvcml6b250YWxcLWhvb2tlZFwtY2hhcmFjdGVyXC1zdHJva2VcKTsKK+WMl+WuiyA+IHRoZVwtbm9ydGhlcm5cLXNvbmdcLWR5bmFzdHlcLVwoOTYwXC0xMTI3XCk7CivphInkuIsgPiBjb3VudHJ5XC1cKGFzXC1vcHBvc2VkXC10b1wtdG93blwtb3JcLWNpdHlcKTsKK+ewveiogiA+IHRvXC1hZ3JlZVwtdG9cLWFuZFwtc2lnblwtXChhXC10cmVhdHlcLFwtZXRjXCk7Civlop7lgLwgPiBhcHByZWNpYXRpb25cLVwob2ZcLWFcLWNhclwsXC1ob3VzZVwsXC1ldGNcLlwpOwor5YW15a62ID4gbWlsaXRhcnlcLXN0cmF0ZWdpc3RcLWluXC1hbmNpZW50XC1jaGluYTsKK+iLseWwuiA+IFwoZW5nbGlzaFwpXC1mb290XC1cKHVuaXRcLW9mXC1tZWFzdXJlbWVudFwpOwor5req6Zm3ID4gXCh0ZXJyaXRvcnlcKVwtZmFsbFwtdG9cLWVuZW15XC1vY2N1cGF0aW9uOwor5Lq66YG4ID4gcGVyc29uXChzXClcLXNlbGVjdGVkXC1cKGZvclwtYVwtam9iXCxcLWV0Y1wuXCk7CivmnIPplbcgPiBwcmVzaWRlbnRcLW9mXC1hXC1jbHViXCxcLWNvbW1pdHRlZVwsXC1ldGNcLjsKK+Wvq+aIkCA+IHRvXC1jb21waWxlXC1cKGZhc2hpb25cLXRocm91Z2hcLXdyaXRpbmdcKTsKK+WQnumHkSA+IHRvXC1jb21taXRcLXN1aWNpZGVcLWJ5XC1zd2FsbG93aW5nXC1nb2xkOwor5p2/55y8ID4gbWVhc3VyZVwtaW5cLXRyYWRpdGlvbmFsXC1jaGluZXNlXC1tdXNpYzsKK+mmluW6nCA+IGNhcGl0YWxcLWNpdHlcLW9mXC1hblwtYXV0b25vbW91c1wtcmVnaW9uOwor54+t5qyhID4gb3JkZXJcLW9mXC1jbGFzc2VzXC1vclwtZ3JhZGVzXC1hdFwtc2Nob29sOwor6LK05beeID4gbmFtZVwtb2ZcLWFcLXByb3ZpbmNlXC1pblwtY2hpbmFcLFwtZ3VpemhvdTsKK+iTi+iMqCA+IFwoYmlsbFwpXC1nYXRlc1wtXChjaGFpcm1hblwtb2ZcLW1pY3Jvc29mdFwpOwor5ZC45byVID4gYXR0cmFjdFwtXChpbnRlcmVzdFwsXC1pbnZlc3RtZW50XCxcLWV0Y1wuXCk7CivmmpflqLwgPiB1bmxpY2Vuc2VkXC1cKHVucmVnaXN0ZXJlZFwpXC1wcm9zdGl0dXRlOwor6Zy4546LID4geGlhbmc0eXUzXC1cKDIzMlwtMjAyXC1iY1wpXC10aGVcLWNvbnF1ZXJvcjsKK+WjveemriA+IGJpcnRoZGF5XC1wcmVzZW50XC1cKGZvclwtYW5cLW9sZFwtcGVyc29uXCk7CivokKznuKMgPiB3YW54aWFuXC1jb3VudHlcLFwtaW5cLXNpY2h1YW5cLXByb3ZpbmNlOwor5YW16YOoID4gdGhlXC1taW5pc3RyeVwtb2ZcLXdhclwtaW5cLWZldWRhbFwtY2hpbmE7CivljJflkaggPiB0aGVcLW5vcnRoZXJuXC16aG91XC1keW5hc3R5XC1cKDU1N1wtNTgxXCk7CivljJfkuqwgPiBiZWlqaW5nXC1cKGNhcGl0YWxcLW9mXC1tYWlubGFuZFwtY2hpbmFcKTsKK+iNieahiCA+IGRyYWZ0XC1cKGxlZ2lzbGF0aW9uXCxcLXByb3Bvc2FsXCxcLWV0Y1wuXCk7CivopqrmhJsgPiBkZWFyXC1cLlwuXC5cLVwod2F5XC1vZlwtc3RhcnRpbmdcLWFcLWxldHRlclwpOwor6KOc55m9ID4gZmlsbGVyXC1cKGluXC1hXC1uZXdzcGFwZXJcLW9yXC1tYWdhemluZVwpOwor6IiJ6KGMID4gdG9cLWhvbGRcLVwoYVwtbWVldGluZ1wsXC1jZXJlbW9ueVwsXC1ldGNcLlwpOwor5L+d6YCBID4gcmVjb21tZW5kXC1cKGZvclwtYWRtaXNzaW9uXC10b1wtc2Nob29sXCk7CivovYnluLMgPiB0cmFuc2ZlclwtbW9uZXlcLWZyb21cfGludG9cLWFuXC1hY2NvdW50Owor5bit5L2NID4gcGFybGlhbWVudGFyeVwtb3JcLWNvbmdyZXNzaW9uYWxcLXNlYXQ7CivluIPku4AgPiBcKGdlb3JnZVwpXC1idXNoXC1cKGZvcm1lclwtdXNcLXByZXNpZGVudFwpOwor5a+p6KiKID4gYVwtXChqdWRpY2lhbFwpXC10cmlhbFwtXChpblwtYVwtY291cnRyb29tXCk7CivnrYbmob8gPiB0aGVcLXNoYWZ0XC1vZlwtYVwtcGVuXC1vclwtd3JpdGluZ1wtYnJ1c2g7Civnl4Xli6IgPiBkZWdyZWVcLW9mXC1zZXJpb3VzbmVzc1wtb2ZcLWFuXC1pbGxuZXNzOwor5Li76L6mID4gaG9zdFwtXChhXC1jb25mZXJlbmNlXC1vclwtc3BvcnRzXC1ldmVudFwpOwor5pys6I2JID4gYVwtYm9va1wtb25cLWNoaW5lc2VcLVwoaGVyYmFsXClcLW1lZGljaW5lOwor5Lq654mpID4gY2hhcmFjdGVyc1wtXChpblwtYVwtcGxheVwsXC1ub3ZlbFwsXC1ldGNcLlwpOwor6K2w6ZW3ID4gc3BlYWtlclwtXChvZlwtYVwtbGVnaXNsYXRpdmVcLWFzc2VtYmx5XCk7CivlronljZcgPiBcW2tvZmlcXVwtYW5uYW5cLVxbdW5cLXNlY3JldGFyeVwtZ2VuZXJhbFxdOwor5YyF6aOvID4gZ2V0XC1vclwtc3VwcGx5XC1tZWFsc1wtYXRcLWFcLWZpeGVkXC1yYXRlOwor5pyJ5rC0ID4gXChvZlwtYVwtZHdlbGxpbmdcKVwtc3VwcGxpZWRcLXdpdGhcLXdhdGVyOwor6Kmx6aGMID4gc3ViamVjdFwtXChvZlwtYVwtdGFsa1wtb3JcLWNvbnZlcnNhdGlvblwpOwor5LqL5YuZID4gXChwb2xpdGljYWxcLFwtZWNvbm9taWNcLFwtZXRjXC5cKVwtYWZmYWlyczsKK+WSseWAkSA+IHdlXC1cKGluY2x1ZGluZ1wtdGhlXC1wZXJzb25cLXNwb2tlblwtdG9cKTsKK+eOh+WFiCA+IHRha2VcLXRoZVwtbGVhZFwtXChzaG93aW5nXC1pbml0aXRhdGl2ZVwpOwor5YyF56efID4gcmVudFwtbGFuZFwtb3JcLWFcLWhvdXNlXC1mb3JcLXN1YmxldHRpbmc7CivmmI7mlocgPiBcKGxhd3NcLFwtcnVsZXNcLFwtZXRjXClcLXN0YXRlXC1pblwtd3JpdGluZzsKK+mAj+imliA+IHRvXC1leGFtaW5lXC1ieVwtZmx1b3Jvc2NvcGVcLW9yXC14XC1yYXk7CivloLHoraYgPiByZXBvcnRcLVwoYW5cLWluY2lkZW50XClcLXRvXC10aGVcLXBvbGljZTsKK+eikeW4liA+IGFcLXJ1YmJpbmdcLWZyb21cLWFcLXN0b25lXC1pbnNjcmlwdGlvbjsKK+eJm+W5tCA+IHllYXJcLW9mXC10aGVcLW94XC1cKGluXC1jaGluZXNlXC16b2RpYWNcKTsKK+WMheW7giA+IGJveFwtXChpblwtYVwtdGhlYXRyZVwtb3JcLWNvbmNlcnRcLWhhbGxcKTsKK+i9ieiukyA+IHRyYW5zZmVyXC1cKHRlY2hub2xvZ3lcLFwtZ29vZHNcLFwtZXRjXC5cKTsKK+ebnOeJiCA+IHBpcmF0ZVwtdmVyc2lvblwtXChvZlwtc29mdHdhcmVcLFwtZVwuZ1wuXCk7Civnt6Pku70gPiBmYXRlXC1cKHdoaWNoXC1icmluZ3NcLXBlb3BsZVwtdG9nZXRoZXI7CivlubPlo6QgPiBweW9uZ3lhbmdcLVwoY2FwaXRhbFwtb2ZcLW5vcnRoXC1rb3JlYVwpOwor5pOU5Lu7ID4gaG9sZFwtYVwtZ292ZXJubWVudGFsXC1vZmZpY2VcLW9yXC1wb3N0Owor5YWL5pyNID4gXCh0cnlcLXRvXClcLW92ZXJjb21lXC1cKGhhcmRzaGlwc1wsXC1ldGNcKTsKK+aKhOmAgSA+IHRvXC1tYWtlXC1hXC1jb3B5XC1cKGFuZFwtc2VuZFwtaXRcLXRvXC1zYlwpOwor5qGI6amXID4gaW52ZXN0aWdhdGVcLXRoZVwtZXZpZGVuY2VcLW9mXC1hXC1jYXNlOwor5omY6YGLID4gdG9cLWJvb2tcLW9yXC1jaGVja1wtdGhyb3VnaFwtXChiYWdnYWdlXCk7CivmiLbpg6ggPiBmZXVkYWxcLWNoaW5lc2VcLW1pbmlzdHJ5XC1vZlwtcmV2ZW51ZTsKK+aOqOWLlSA+IHRvXC1wdXNoXC1cKGZvclwtYWNjZXB0YW5jZVwtb2ZcLWFcLXBsYW5cKTsKK+S6nui7jSA+IHNlY29uZFwtcGxhY2VcLVwoaW5cLWFcLXNwb3J0c1wtY29udGVzdFwpOwor6aGP6auUID4geWFuXC1zdHlsZVwtXChpblwtY2hpbmVzZVwtY2FsbGlncmFwaHlcKTsKK+S5hemBlSA+IFwoaGF2ZW4nJ3RcLWRvbmVcLXN0aFwpXC1mb3JcLWFcLWxvbmdcLXRpbWU7CivpppnlsbEgPiBmcmFncmFuY2VcLWhpbGxcLVwoYVwtcGFya1wtaW5cLWJlaWppbmdcKTsKK+mKt+avgCA+IHRvXC1kZXN0cm95XC1cKGJ5XC1tZWx0aW5nXC1vclwtYnVybmluZ1wpOwor5YyX6a2PID4gdGhlXC1ub3J0aGVyblwtd2VpXC1keW5hc3R5XC1cKDM4NlwtNTM0XCk7CivmmrTnl4UgPiBzdWRkZW5cLWF0dGFja1wtb2ZcLWFcLXNlcmlvdXNcLWlsbG5lc3M7CivkurrlpKcgPiBcKGNoaW5hXClcLW5hdGlvbmFsXC1wZW9wbGUnJ3NcLWNvbmdyZXNzOwor54ax6aynID4gYnVzdGxpbmdcLXdpdGhcLW5vaXNlXC1hbmRcLWV4Y2l0ZW1lbnQ7CivlkYjmlocgPiBwZXRpdGlvblwtXChzdWJtaXR0ZWRcLXRvXC1hXC1zdXBlcmlvclwpOwor5pil56+AID4gc3ByaW5nXC1mZXN0aXZhbFwtXChjaGluZXNlXC1uZXdcLXllYXJcKTsKK/CgvLsgPiBhXC1wYXJ0aWNsZVwtdXNlZFwtaW5cLXRyYW5zbGl0ZXJhdGlvbjsKK+aWsOeWhiA+IHhpbmppYW5nXC1cKHV5Z3VyXC1hdXRvbm9tb3VzXC1yZWdpb25cKTsKK+e2sue1oSA+IFwoY29tcHV0ZXJcLFwtdGVsZWNvbVwsXC1ldGNcLlwpXC1uZXR3b3JrOwor5aOB5q+vID4gdGFwZXN0cnlcLVwodXNlZFwtYXNcLWFcLXdhbGxcLWhhbmdpbmdcKTsKK+aTpua+oSA+IHJ1Ylwtb25lc2VsZlwtZG93blwtd2l0aFwtYVwtd2V0XC10b3dlbDsKK+iqjeWumiA+IG1haW50YWluXC1cKHRoYXRcLXNvbWV0aGluZ1wtaXNcLXRydWVcKTsKK+WIhuatpyA+IGRpZmZlcmVuY2VcLVwob2ZcLW9waW5pb25cLFwtcG9zaXRpb25cKTsKK+mAo+aIsCA+IGxpZW5cLWNoYW5cLVwodGFpd2FuXC12aWNlXC1wcmVzaWRlbnRcKTsKK+WItuW6piA+IFwocG9saXRpY2FsXClcLXN5c3RlbVwtb3JcLWluc3RpdHV0aW9uOwor6KOc57+SID4gdGFrZVwtbGVzc29uc1wtYWZ0ZXJcLXNjaG9vbFwtb3JcLXdvcms7Civlu7rkuqQgPiB0b1wtZXN0YWJsaXNoXC1kaXBsb21hdGljXC1yZWxhdGlvbnM7Civngavngb0gPiBmaXJlXC1cKHRoYXRcLWJ1cm5zXC1idWlsZGluZ3NcLFwtZXRjXC5cKTsKK+WCmeiqsiA+IFwob2ZcLWFcLXRlYWNoZXJcKVwtdG9cLXByZXBhcmVcLWxlc3NvbnM7CivplovmvJQgPiBcKG9mXC1hXC1wbGF5XCxcLW1vdmllXCxcLWV0Y1wuXClcLXRvXC1iZWdpbjsKK+WCmeiNkiA+IHByZXBhcmVcLWFnYWluc3RcLW5hdHVyYWxcLWRpc2FzdGVyczsKK+WFqOacgyA+IHBsZW5hcnlcLXNlc3Npb25cLVwoYXRcLWFcLWNvbmZlcmVuY2VcKTsKK+S+v+mboyA+IHJldG9ydFwtd2l0aFwtY2hhbGxlbmdpbmdcLXF1ZXN0aW9uczsKK+etlOi+ryA+IHRvXC1yZXBseVwtXCh0b1wtYW5cLWFjY3VzYXRpb25cLFwtZVwuZ1wuXCk7CivlnJbmm7ggPiBib29rc1wtXChpblwtYVwtbGlicmFyeVwtb3JcLWJvb2tzdG9yZVwpOwor5a626ZW3ID4gdGhlXC1wYXJlbnRcLW9yXC1ndWFyZGlhblwtb2ZcLWFcLWNoaWxkOwor5Zue5q24ID4gdG9cLXJldHVyblwtXCh0b1wtcHJldmlvdXNcLWNvbmRpdGlvblwpOwor6aqo5rOVID4gYm9uZVwtXChwcm9wZXJ0eVwtb2ZcLWFcLWJydXNoXC1zdHJva2VcKTsKK+enkemahiA+IGNvbG9nbmVcLFwtZ2VybWFueVwtb3JcLWNvbG9uXCxcLXBhbmFtYTsKK+aJk+a2iCA+IGRpc3BlbFwtXChkb3VidHNcLFwtbWlzZ2l2aW5nc1wsXC1ldGNcLlwpOwor5om+5YiwID4gZmluZFwtXCh3aGF0XC1vbmVcLXdhc1wtc2VhcmNoaW5nXC1mb3JcKTsKK+WPrOmWiyA+IGNvbnZlbmVcLVwoYVwtY29uZmVyZW5jZVwtb3JcLW1lZXRpbmdcKTsKK+WRvOexsiA+IGNhbGxcLW9uXC1cKHNvbWVvbmVcLXRvXC1kb1wtc29tZXRoaW5nXCk7Civnp5HniL4gPiBcKGhlbG11dFwpXC1rb2hsXC1cKGdlcm1hblwtY2hhbmNlbGxvclwpOwor6b2L5pyIID4gcmFtYWRhblwtXChtdXNsaW1cLW1vbnRoXC1vZlwtZmFzdGluZ1wpOwor6LW35L6GID4gYmVnaW5uaW5nXC1vclwtY29udGludWluZ1wtYW5cLWFjdGlvbjsKK+WMl+m9iiA+IHRoZVwtbm9ydGhlcm5cLXFpXC1keW5hc3R5XC1cKDU1MFwtNTU3XCk7CivlkJDnqZcgPiB0b1wtaGF2ZVwtdGhlXC1lYXJzXC1vZlwtZ3JhaW5cLWNvbWVcLXVwOwor6KuL6aGYID4gcGV0aXRpb25cLVwoZm9yXC1hY3Rpb25cLXRvXC1iZVwtdGFrZW5cKTsKK+S6q+WPlyA+IHRvXC1lbmpveVwtXChyaWdodHNcLFwtYmVuZWZpdHNcLFwtZXRjXC5cKTsKK+S4ieWzvSA+IHRoZVwtdGhyZWVcLWNoYW5namlhbmdcLXJpdmVyXC1nb3JnZXM7Civlj5bmmpYgPiB0b1wtd2FybVwtb25lc2VsZlwtXChieVwtYVwtZmlyZVwsXC1ldGNcLlwpOwor6Zmi6ZW3ID4gcHJlc2lkZW50XC1cKG9mXC1hXC11bml2ZXJzaXR5XCxcLWV0Y1wuXCk7CivoqIDoq5YgPiBleHByZXNzaW9uXC1vZlwtXChwb2xpdGljYWxcKVwtb3BpbmlvbjsKK+aUv+eVjCA+IHBvbGl0aWNhbFwtYW5kXC1nb3Zlcm5tZW50XC1jaXJjbGVzOwor5oCn5YilID4gZGlzdGluZ3Vpc2hpbmdcLWJldHdlZW5cLXRoZVwtc2V4ZXM7CivpgZXnpoEgPiB0b1wtdmlvbGF0ZVwtYVwtcHJvaGlidGl0aW9uXC1vclwtYmFuOwor6YWs5ZKMID4gdG9cLXJlc3BvbmRcLXRvXC1hXC1wb2VtXC13aXRoXC1hXC1wb2VtOwor5aCx6ICDID4gZW50ZXJcLW9uZXNlbGZcLWZvclwtYW5cLWV4YW1pbmF0aW9uOwor5YyX5ZyLID4gdGhlXC1ub3J0aGVyblwtcGFydFwtb2ZcLXRoZVwtY291bnRyeTsKK+WkluWtqyA+IGdyYW5kc29uXC1cKHNvblwtb2ZcLW9uZScnc1wtZGF1Z2h0ZXJcKTsKK+Wkp+WciyA+IGFcLXBvd2VyXC1cKGllXCxcLWFcLWRvbWluYW50XC1jb3VudHJ5XCk7CivmjqLopqogPiB0b1wtZ29cLWhvbWVcLXRvXC12aXNpdFwtb25lJydzXC1mYW1pbHk7Civpm6Pku6UgPiBoYXJkXC10b1wtXChwcmVkaWN0XCxcLWltYWdpbmVcLFwtZXRjXC5cKTsKK+WgseaViCA+IHJlbmRlclwtc2VydmljZVwtdG9cLXJlcGF5XC1raW5kbmVzczsKK+imquaImiA+IFwoYVwpXC1yZWxhdGl2ZVwtXChpZVwsXC1mYW1pbHlcLW1lbWJlclwpOwor54K65pyfID4gXCh0b1wtYmVcLWRvbmVcKVwtYnlcLVwoYVwtY2VydGFpblwtZGF0ZVwpOwor6L6y5puGID4gdGhlXC10cmFkaXRpb25hbFwtY2hpbmVzZVwtY2FsZW5kYXI7CivmjInoqqogPiBpblwtdGhlXC1vcmRpbmFyeVwtY291cnNlXC1vZlwtZXZlbnRzOwor6YCj5Lu7ID4gY29udGludWVcLWluXC1cKGFcLXBvbGl0aWNhbFwpXC1vZmZpY2U7Civoh4norZwgPiB0eXBlc1wtb2ZcLWZhY2lhbFwtbWFrZXVwXC1pblwtb3BlcmFzOwor6ZaL5bqtID4gYmVnaW5cLWFcLVwoanVkaWNpYWxcKVwtY291cnRcLXNlc3Npb247Civlhazlr6kgPiBwdWJsaWNcLXRyaWFsXC1cKGluXC1hXC1jb3VydFwtb2ZcLWxhd1wpOwor5L2G6aGYID4gaWZcLW9ubHlcLVwoaXRcLXdlcmVcLXBvc3NpYmxlXC10b1wuXC5cLlwpOwor5o2o5b6XID4gdG9cLWJlXC13aWxsaW5nXC10b1wtcGFydFwtd2l0aFwtXChzdGhcKTsKK+aMgeaciSA+IGhvbGRcLVwoZWdcLFwtcGFzc3BvcnRcLFwtdmlld3NcLFwtZXRjXC5cKTsKK+aKl+eIrSA+IG1ha2VcLWFcLXN0YW5kXC1hbmRcLWZpZ2h0XC1cKGFnYWluc3RcKTsKK+evpuWtkCA+IGFcLWRvdWJsZVwtZWRnZWRcLWZpbmVcLXRvb3RoZWRcLWNvbWI7CivmipXmqZ8gPiBiZVwtYVwtc3BlY3VsYXRvclwtXChwcm9maXRcLXNlZWtpbmdcKTsKK+aMquWAnyA+IHRvXC1ib3Jyb3dcLW1vbmV5XC1mb3JcLWFcLXNob3J0XC10aW1lOwor5a6w55u4ID4gcHJpbWVcLW1pbmlzdGVyXC1cKGluXC1mZXVkYWxcLWNoaW5hXCk7CivomZvohZUgPiBlbXB0eVwtd3Jpc3RcLVwobWV0aG9kXC1vZlwtcGFpbnRpbmdcKTsKK+S4jeirliA+IG5vXC1tYXR0ZXJcLVwod2hhdFwsXC13aG9cLFwtaG93XCxcLWV0Y1wuXCk7Civkv53kv64gPiBndWFyYW50ZWVcLXRvXC1rZWVwXC1pblwtZ29vZFwtcmVwYWlyOwor6YeR6YKKID4gcGhub21cLXBlbmhcLVwoY2FwaXRhbFwtb2ZcLWNhbWJvZGlhXCk7CivkvrXkvZQgPiB0b1wtaW52YWRlXC1hbmRcLW9jY3VweVwtXCh0ZXJyaXRvcnlcKTsKK+afr+WvhiA+IGtlcm1pdFwtXChjb21tdW5pY2F0aW9uc1wtcHJvdG9jb2xcKTsKK+S6q+aciSA+IGVuam95XC1cKHJpZ2h0c1wsXC1wcml2aWxlZ2VzXCxcLWV0Y1wuXCk7Civnpq7ngq4gPiBhXC1ndW5cLXNhbHV0ZVwtXChlZ1wsXC0yMVwtZ3VuXC1zYWx1dGVcKTsKK+eqgeWOpSA+IHR1cmtpY1wtXChtaW5vcml0eVwtZ3JvdXBcLWluXC1jaGluYVwpOwor5a6J5L+dID4gXChhYmJyZXZpYXRpb25cKVwtbWFpbnRhaW5cLXNlY3VyaXR5Owor5aO96bq1ID4gYmlydGhkYXlcLW5vb2RsZXNcLVwoZm9yXC1sb25nZXZpdHlcKTsKK+a1tOWupCA+IGJhdGhyb29tXC1cKHJvb21cLXVzZWRcLWZvclwtYmF0aGluZ1wpOwor5Luk5Lq6ID4gY2F1c2VcLXNvbWVvbmVcLXRvXC1cKGJlXCxcLWZlZWxcLFwtZXRjXCk7CivpmaTpnZ4gPiBvbmx5XC1pZlwtXChcLlwuXC5cLFwtb3JcLW90aGVyd2lzZVwsXC1cLlwuXC5cKTsKK+atp+imliA+IGRpc2NyaW1pbmF0aW9uXC1cKGFnYWluc3RcLXNvbWVvbmVcKTsKK+aVl+iQvSA+IGRlY2xpbmVcLVwoaW5cLXdlYWx0aFwtYW5kXC1wb3NpdGlvblwpOwor54Sh6YyrID4gd3V4aVwtXChjaXR5XClcLFwtaW5cLWppYW5nc3VcLXByb3ZpbmNlOwor5pqX5ZCIID4gYWdyZWVcLXdpdGhvdXRcLXByaW9yXC1jb25zdWx0YXRpb247Civlp5DlpKsgPiBicm90aGVyXC1pblwtbGF3XC1cKGh1c2JhbmQnJ3NcLXNpZGVcKTsKK+eJueWNgCA+IHNwZWNpYWxcLVwoYWRtaW5pc3RyYXRpdmVcKVwtcmVnaW9uOwor5pel5ZyTID4gamFwYW5lc2VcLXllblwtXCh1bml0XC1vZlwtY3VycmVuY3lcKTsKK+WjgearpSA+IGFcLWJ1aWx0XC1pblwtd2FyZHJvYmVcLW9yXC1jdXBib2FyZDsKK+mBv+aakSA+IGJlXC1hd2F5XC1mb3JcLXRoZVwtc3VtbWVyXC1ob2xpZGF5czsKK+atpeaQliA+IGRhbmdsaW5nXC1vcm5hbWVudFwtd29yblwtYnlcLXdvbWVuOwor6YKm5LqkID4gcmVsYXRpb25zXC1iZXR3ZWVuXC10d29cLWNvdW50cmllczsKK+aPkOeFiSA+IHRvXC1leHRyYWN0XC1cKG9yZVwsXC1taW5lcmFsc1wsXC1ldGNcKTsKK+api+aOpSA+IGJyaWRnaW5nXC1cKGluXC1jb21wdXRlclwtbmV0d29ya3NcKTsKK+WFq+aWuSA+IHRoZVwtZWlnaHRcLXBvaW50c1wtb2ZcLXRoZVwtY29tcGFzczsKK+WFp+aUvyA+IGludGVybmFsXC1hZmZhaXJzXC1cKG9mXC1hXC1jb3VudHJ5XCk7Civov6vkvb8gPiBmb3JjZVwtXChzb21lb25lXC10b1wtZG9cLXNvbWV0aGluZ1wpOwor6ZW35buKID4gdGhlXC1sb25nXC1jb3JyaWRvclwtYXRcLXlpXC1oZVwteXVhbjsKK+WFg+W4pSA+IGFcLW1hcnNoYWxcLVwoaW5cLXRoZVwtYXJtZWRcLWZvcmNlc1wpOwor5qCh6ZW3ID4gXChjb2xsZWdlXCxcLXVuaXZlcnNpdHlcKVwtcHJlc2lkZW50Owor6ZaL5YiAID4gdG9cLXBlcmZvcm1cLW9yXC1oYXZlXC1hblwtb3BlcmF0aW9uOwor6Lyp5YiGID4gc2VuaW9yaXR5XC1pblwtdGhlXC1mYW1pbHlcLW9yXC1jbGFuOwor5bC+54mZID4gYVwteWVhclwtZW5kXC1kaW5uZXJcLWZvclwtZW1wbG95ZWVzOwor54+t6LyqID4gcmVndWxhclwtcGFzc2VuZ2VyXC1vclwtY2FyZ29cLXNoaXA7Civmiqjmk4ogPiBhdHRhY2tcLVwodmVyYmFsbHlcLW9yXC1pblwtd3JpdGluZ1wpOwor6Iie5Y+wID4gXCh0aGVhdHJpY2FsXC1vclwtcG9saXRpY2FsXClcLXN0YWdlOwor54yb6LeMID4gZHJvcFwtc2hhcnBseVwtXChlZ1wsXC1zdG9ja1wtcHJpY2VzXCk7Civkv6Hku7YgPiBhXC1sZXR0ZXJcLVwoaWVcLFwtc2VudFwtaW5cLXRoZVwtbWFpbFwpOwor5L2/5ZG9ID4gYVwtXChkaXBsb21hdGljXC1vclwtb3RoZXJcKVwtbWlzc2lvbjsKK+S4ueeariA+IHRoZVwtcm9vdFwtYmFya1wtb2ZcLXRoZVwtcGVvbnlcLXRyZWU7CivlrprlgZogPiB0b1wtaGF2ZVwtc29tZXRoaW5nXC1tYWRlXC10b1wtb3JkZXI7Civph43nlKggPiB0b1wtcHV0XC1pblwtYW5cLWltcG9ydGFudFwtcG9zaXRpb247Civmr5Tos70gPiBcW2F0aGxldGljXC1vclwtb3RoZXJcXVwtY29tcGV0aXRpb247CivmlZjov7AgPiByZWxhdGVcLVwoYVwtc3RvcnlcLW9yXC1pbmZvcm1hdGlvblwpOwor5Yqg6YeNID4gYmVjb21lXHxtYWtlXC1tb3JlXC1zZXJpb3VzXHxncmF2ZXI7CivolJrngrogPiB0b1wtYWZmb3JkXC1cKGFcLXZpZXdcLW9mXC1zdGhcLFwtZVwuZ1wuXCk7Civpm7voh7ogPiByYWRpb1wtXChvclwtYnJvYWRjYXN0aW5nXClcLXN0YXRpb247CivnopHmnpcgPiB0aGVcLWZvcmVzdFwtb2ZcLXN0ZWxlc1wtXChpblwteGknJ2FuXCk7CivlpJbngZggPiB3YWl0YW5cLVwodGhlXC1idW5kXClcLFwtaW5cLXNoYW5naGFpOwor6K2J5a+mID4gY29uZmlybVwtXChzb21ldGhpbmdcLXRvXC1iZVwtdHJ1ZVwpOwor6K2w5ZOhID4gbWVtYmVyXC1cKG9mXC1hXC1sZWdpc2xhdGl2ZVwtYm9keVwpOwor5aCx6KGoID4gZm9ybXNcLWZvclwtcmVwb3J0aW5nXC1zdGF0aXN0aWNzOwor5piO5aCxID4gbWluZ1wtcGFvXC1uZXdzcGFwZXJcLVwoaG9uZ1wta29uZ1wpOwor5YmN56iLID4gZnV0dXJlXC1cKGNhcmVlclwsXC1ldGNcKVwtcHJvc3BlY3RzOwor55m76ZaAID4gcGF5XC1hXC12aXNpdFwtdG9cLXNvbWVvbmUnJ3NcLWhvdXNlOwor6YKK5rCRID4gcGVvcGxlXC1saXZpbmdcLW9uXC10aGVcLWZyb250aWVyczsKK+mCo+acqyA+IGlmXC10aGF0JydzXC10aGVcLWNhc2VcLFwtdGhlblwtXChcLlwuXC5cKTsKK+aViOaHiSA+IGVmZmVjdFwtXChlZ1wsXC1ncmVlbmhvdXNlXC1lZmZlY3RcKTsKK+atueW+kiA+IGV2aWxcLXBlcnNvblwtd2hvXC1jb21taXRzXC1jcmltZXM7CivmlLblvqkgPiByZWNvdmVyXC1cKGxvc3RcLXRlcnJpdG9yeVwsXC1ldGNcLlwpOwor5YKy6aqoID4gbG9mdHlcLWFuZFwtdW55aWVsZGluZ1wtY2hhcmFjdGVyOwor5pa35LqkID4gYnJlYWtcLW9mZlwtZGlwbG9tYXRpY1wtcmVsYXRpb25zOwor5biz5oi2ID4gXChiYW5rXCxcLWNvbXB1dGVyXCxcLWV0Y1wuXClcLWFjY291bnQ7Civlm7rnhLYgPiBhZG1pdHRlZGx5XC1cKGl0JydzXC10cnVlXC10aGF0XC5cLlwuXCk7Civoh7rnjaggPiB0YWl3YW5cLWluZGVwZW5kZW5jZVwtXChtb3ZlbWVudFwpOwor5L+d6IuXID4ga2VlcFwtYVwtZnVsbFwtc3RhbmRcLW9mXC1zZWVkbGluZ3M7Civot6/nlLEgPiByb3V0aW5nXC1cKGluXC1jb21wdXRlclwtbmV0d29ya3NcKTsKK+Wwjee+jiA+IFwocG9saWN5XCxcLWV0Y1wuXClcLXRvd2FyZHNcLWFtZXJpY2E7CivmjIfmlbggPiBcKG51bWVyaWNhbFwsXC1zdGF0aXN0aWNhbFwpXC1pbmRleDsKK+ethueVqyA+IHN0cm9rZXNcLW9mXC1hXC1jaGluZXNlXC1jaGFyYWN0ZXI7CivnqbropbIgPiBcKG1pbGl0YXJ5XClcLWF0dGFja1wtZnJvbVwtdGhlXC1haXI7CivooajloLEgPiBzdGF0aXN0aWNhbFwtdGFibGVzXC1hbmRcLXJlcG9ydHM7Civmi5jmirwgPiBcKGFycmVzdFwtYW5kXClcLXRha2VcLWludG9cLWN1c3RvZHk7CivlsJrmm7ggPiBoaWdoXC1vZmZpY2lhbFwtaW5cLWFuY2llbnRcLWNoaW5hOwor6IGz56uLID4gdG9cLXRvd2VyXC1hYm92ZVwtXChvblwtdG9wXC1vZlwtc3RoXCk7Civnj63ntYQgPiB0ZWFtc1wtYW5kXC1ncm91cHNcLVwoaW5cLWZhY3RvcmllczsKK+S8r+avjSA+IHdpZmVcLW9mXC1mYXRoZXInJ3NcLWVsZGVyXC1icm90aGVyOwor5Lit6JelID4gXCh0cmFkaXRpb25hbFwpXC1jaGluZXNlXC1tZWRpY2luZTsKK+aal+iiiyA+IGNhbWVyYVwtYmFnXC1cKGZvclwtY2hhbmdpbmdcLWZpbG1cKTsKK+iZleaxuiA+IGV4ZWN1dGVcLVwoYVwtY29uZGVtbmVkXC1jcmltaW5hbFwpOwor5paw6a6uID4gZnJlc2hcLVwoZXhwZXJpZW5jZVwsXC1mb29kXCxcLWV0Y1wuXCk7Civlj6vogbIgPiB5ZWxsaW5nXC1cKHNvdW5kXC1tYWRlXC1ieVwtcGVyc29uXCk7Civnj63luKsgPiB3aXRoZHJhd1wtdHJvb3BzXC1mcm9tXC10aGVcLWZyb250Owor5ZOA5oK8ID4gZ3JpZXZlXC1cKG1vdXJuXClcLW92ZXJcLXNiJydzXC1kZWF0aDsKK+enkeaBqSA+IGNvaGVuXC1cKHVcLnNcLlwtZGVmZW5jZVwtc2VjcmV0YXJ5XCk7CivmlZfpmaMgPiBiZVwtZGVmZWF0ZWRcLW9uXC10aGVcLWJhdHRsZWZpZWxkOwor5YyF6LOgID4gZ3VhcmFudGVlXC10b1wtcGF5XC1jb21wZW5zYXRpb25zOwor5ZCN5qyhID4gcG9zaXRpb25cLWluXC1hXC1yYW5raW5nXC1vZlwtbmFtZXM7Civlq4Llq4IgPiBzaXN0ZXJcLWluXC1sYXdcLVwoaHVzYmFuZCcnc1wtc2lkZVwpOwor5aWJ6KGMID4gdG9cLXB1cnN1ZVwtXChhXC1jb3Vyc2VcLFwtYVwtcG9saWN5XCk7CivlkbzllpogPiBjYWxsXC1vdXRcLVwoc29tZW9uZScnc1wtbmFtZVwsXC1ldGNcKTsKK/CggIEgPiB0aGVcLW9yaWdpbmFsXC1mb3JtXC1mb3JcLeS4g1wtdVwrNGUwMzsKK/CggIAgPiB0aGVcLXNvdW5kXC1tYWRlXC1ieVwtYnJlYXRoaW5nXC1pbjsKK+ekuuWogSA+IGhvbGRcLWFcLVwocHJvdGVzdFwpXC1kZW1vbnN0cmF0aW9uOwor5ZCD5YiAID4gcGVuZXRyYXRpb25cLW9mXC1hXC1jdXR0aW5nXC10b29sOwor5ZCE5L2NID4gZXZlcnlib2R5XC1cKGFcLXRlcm1cLW9mXC1hZGRyZXNzXCk7Civpn5PlnJMgPiBrb3JlYW5cLXdvblwtXCh1bml0XC1vZlwtY3VycmVuY3lcKTsKK+WgseekviA+IGdlbmVyYWxcLW9mZmljZVwtb2ZcLWFcLW5ld3NwYXBlcjsKK+eZvOi3oSA+IHRvXC1yaXNlXC10b1wtcG93ZXJcLWFuZFwtcG9zaXRpb247CivmlK/mj7QgPiBwcm92aWRlXC1hc3Npc3RhbmNlXC1vclwtYmFja2luZzsKK+ingOa4rCA+IFwoc2NpZW50aWZpY1wsXC1ldGNcKVwtb2JzZXJ2YXRpb247CivpgZXlv4MgPiBhZ2FpbnN0XC1vbmVzXC13aWxsXC1vclwtZmVlbGluZ3M7Civmi7zpn7MgPiBwaW55aW5cLVwoY2hpbmVzZVwtcm9tYW5pemF0aW9uXCk7CivlooPlpJYgPiBvdXRzaWRlXC1cKGFcLWNvdW50cnknJ3NcKVwtYm9yZGVyczsKK+aLjOmdoiA+IG5vb2RsZXNcLXNlcnZlZFwtd2l0aFwtc295XC1zYXVjZTsKK+ebtOaOpSA+IGRpcmVjdFwtXChvcHBvc2l0ZVwtb2ZcLWluZGlyZWN0XCk7Civpj6HpoK0gPiBjYW1lcmFcLXNob3RcLVwoaW5cLWFcLW1vdmllXCxcLWV0Y1wpOwor6I6r5LiNID4gdGhlcmVcLWlzXC1ub1wtb25lXC1cKHdob1wtZG9lc24nJ3RcKTsKK+mAgeS6uiA+IHRvXC1zZWVcLVwob3JcLXdhbGtcKVwtc29tZW9uZVwtaG9tZTsKK+eZveaWhyA+IHRoZVwtdGV4dFwtb2ZcLWFuXC1hbm5vdGF0ZWRcLWJvb2s7CivlsIfpoJggPiBoaWdoXC1yYW5raW5nXC1taWxpdGFyeVwtb2ZmaWNlcjsKK+aOjOasiiA+IHdpZWxkXC1cKHBvbGl0aWNhbFwsXC1ldGNcLlwpXC1wb3dlcjsKK+S/g+mAsiA+IHRvXC1wcm9tb3RlXC1cKGFuXC1pZGVhXC1vclwtY2F1c2VcKTsKK+WFrOWuiSA+IFwobWluaXN0cnlcLW9mXClcLXB1YmxpY1wtc2VjdXJpdHk7Civnl4XmoLkgPiBhblwtaW5jb21wbGV0ZWx5XC1jdXJlZFwtaWxsbmVzczsKK+ijnOWgsSA+IG1ha2VcLWFcLXJlcG9ydFwtYWZ0ZXJcLXRoZVwtZXZlbnQ7CivlsI3oh7ogPiBcKHBvbGljeVwsXC1ldGNcLlwpXC10b3dhcmRzXC10YWl3YW47Civmnb/pvJMgPiBhXC1zbWFsbFwtZHJ1bVwtZm9yXC1tYXJraW5nXC10aW1lOwor6LSF6L+wID4gdG9cLXNheVwtbW9yZVwtdGhhblwtaXNcLW5lY2Vzc2FyeTsKK+WvpuiCmCA+IGZ1bGxcLWFybVwtXChtZXRob2RcLW9mXC1wYWludGluZ1wpOwor5reY6YeRID4gcGFubmluZ1wtXChmb3JcLXByZWNpb3VzXC1tZXRhbHNcKTsKK+aIiOeIviA+IFwoYWxcKVwtZ29yZVwtXCh1c1wtdmljZVwtcHJlc2lkZW50XCk7CivkuoLoqqogPiB0b1wtbWFrZVwtaXJyZXNwb25zaWJsZVwtcmVtYXJrczsKK+S4jei7jCA+IGFnYWluc3RcLXRoZVwtbGF3XC1vclwtZGlzY2lwbGluZTsKK+S/neWVhiA+IHByZXNlcnZhdGlvblwtb2ZcLXNvaWxcLW1vaXN0dXJlOwor5L2c5oiwID4gY29uZHVjdFwtXChtaWxpdGFyeVwtb3BlcmF0aW9uc1wpOwor5LiW6KGMID4gXFthYmJyZXZpYXRpb25cLWZvclxdXC13b3JsZFwtYmFuazsKK+S4reiPryA+IGNoaW5hXC1cKGFsdGVybmF0ZVwtZm9ybWFsXC1uYW1lXCk7CivkvrXlhaUgPiB0b1wtbWFrZVwtXChtaWxpdGFyeVwpXC1pbmN1cnNpb25zOwor55CD5qqvID4gdGFibGVcLVwoZm9yXC1nYW1lc1wtdXNpbmdcLWJhbGxzXCk7CivkuIvoh7ogPiBzdGVwXC1kb3duXC1cKGZyb21cLW9mZmljZVwsXC1ldGNcLlwpOwor6LKq5rGhID4gXChwb2xpdGljYWxcLFwtbW9yYWxcKVwtY29ycnVwdGlvbjsKK+S4ree0miA+IG1pZGRsZVwtbGV2ZWxcLVwoaW5cLWFcLWhpZXJhcmNoeVwpOwor5pyJ55qEID4gXCh0aGVyZVwtYXJlXClcLXNvbWVcLVwod2hvXC1hcmVcLlwuXC5cKTsKK+iTi+mjryA+IHJpY2VcLXdpdGhcLW1lYXRcLWFuZFwtdmVnaXRhYmxlczsKK+S4i+ePrSA+IHRvXC1jb21lXC1vclwtZ29cLW9yXC1nZXRcLW9mZlwtd29yazsKK+WMhemKtyA+IGhhdmVcLWV4Y2x1c2l2ZVwtc2VsbGluZ1wtcmlnaHRzOwor6K6T55CDID4gdG9cLWNvbmNlZGVcLXBvaW50c1wtXChpblwtYVwtZ2FtZVwpOwor5pu45oi/ID4gc3R1ZHlcLVwoaVwuZVwuXC10aGVcLWtpbmRcLW9mXC1yb29tXCk7Civoqo3orZggPiBiZVwtYWNxdWFpbnRlZFwtd2l0aFwtXChhXC1wZXJzb25cKTsKK+WNu+eXhSA+IHRvXC1wcmV2ZW50XC1vclwtdHJlYXRcLWFcLWRpc2Vhc2U7CivpgbLpgbIgPiBcKGJlXClcLWxhdGVcLVwod2l0aFwtYVwtdGFza1wsXC1ldGNcLlwpOwor8KCAhSA+IGFuXC1hbHRlcm5hdGVcLWZvcm1cLW9mXC11XCs0ZWE1XC3kuqU7Civlvrfnj60gPiBkdXJiYW5cLVwoY2l0eVwtaW5cLXNvdXRoXC1hZnJpY2FcKTsKK+aTuui8qiA+IGJhbGFuY2VcLVwob2ZcLWFcLXdhdGNoXC1vclwtY2xvY2tcKTsKK+aTuuiorSA+IGZ1cm5pc2hcLWFuZFwtZGVjb3JhdGVcLVwoYVwtcm9vbVwpOwor54ax57eaID4gaG90bGluZVwtXChjb21tdW5pY2F0aW9uc1wtbGlua1wpOwor5rOV5Yi2ID4gbGVnYWxcLXN5c3RlbVwtYW5kXC1pbnN0aXR1dGlvbnM7CivmsLTlubMgPiBsZXZlbFwtXChvZlwtYWNoaWV2ZW1lbnRcLFwtZXRjXC5cKTsKK+Wkq+asiiA+IGF1dGhvcml0eVwtb3ZlclwtdGhlXC1ob3VzZWhvbGQ7CivljbDlsLwgPiBcKGFiYnJldmlhdGlvblwtZm9yXClcLWluZG9uZXNpYTsKK+iuiuWDuSA+IGFwcHJhaXNlXC1hdFwtdGhlXC1jdXJyZW50XC1yYXRlOwor5aa55aSrID4gYnJvdGhlclwtaW5cLWxhd1wtXCh3aWZlJydzXC1zaWRlXCk7CivpgLLogIwgPiBhbmRcLXRoZW5cLVwod2hhdFwtZm9sbG93c1wtbmV4dFwpOwor6Zmj57eaID4gYVwtZnJvbnRcLVwoaWVcLFwtbWlsaXRhbnRcLWdyb3VwXCk7CivmrbLmnIggPiB0aGVcLXllYXJzXC1vZlwtYVwtcGVyc29uJydzXC1saWZlOwor5q245bGsID4gYmVcLXVuZGVyXC10aGVcLWp1cmlzZGljdGlvblwtb2Y7CivlnKjph44gPiBiZVwtb3V0XC1vZlwtXChwb2xpdGljYWxcKVwtb2ZmaWNlOwor5bug5oi/ID4gYVwtYnVpbGRpbmdcLXVzZWRcLWFzXC1hXC1mYWN0b3J5Owor5Yik5rG6ID4ganVkZ21lbnRcLVwoYnlcLWFcLWNvdXJ0XC1vZlwtbGF3XCk7Civlm7Dpm6MgPiBcKGZpbmFuY2lhbFwsXC1ldGNcLlwpXC1kaWZmaWN1bHR5Owor5o6b6JmfID4gdG9cLXJlZ2lzdGVyXC1cKGFcLWxldHRlclwsXC1ldGNcLlwpOwor6KOc6IuXID4gZmlsbFwtdGhlXC1nYXBzXC13aXRoXC1zZWVkbGluZ3M7CivmrablipsgPiBcKG1ha2VcLXVzZVwtb2ZcKVwtbWlsaXRhcnlcLWZvcmNlOwor5pS+5YGHID4gdG9cLWhhdmVcLWFcLWhvbGlkeVwtb3JcLXZhY2F0aW9uOwor6IiJ6YeNID4gXCh0aGVcLXNwb3J0XC1vZlwpXC13ZWlnaHRsaWZ0aW5nOwor5Zq06KmeID4gXChjcml0aWNpemVcLFwtZXRjXC5cKVwtZm9yY2VmdWxseTsKK+Wig+WFpyA+IHdpdGhpblwtXChhXC1jb3VudHJ5JydzXClcLWJvcmRlcnM7Civoj6/kurogPiBldGhuaWNcLWNoaW5lc2VcLXBlcnNvblx8cGVvcGxlOwor5qmL5pysID4gXChqYXBhbmVzZVwtc3VybmFtZVwpXC1oYXNoaW1vdG87CivlnLDnmq4gPiBsb3RcLFwtc2VjdGlvblwtb2ZcLWxhbmRcLFwtZ3JvdW5kOwor6L2J5qmfID4gXCh0YWtlXC1hXClcLXR1cm5cLWZvclwtdGhlXC1iZXR0ZXI7CivluLjlp5QgPiBtZW1iZXJcLW9mXC1zdGFuZGluZ1wtY29tbWl0dGVlOwor6LW36aObID4gdG9cLXRha2VcLW9mZlwtXChpblwtYW5cLWFpcnBsYW5lXCk7CivplovluZUgPiB0b1wtb3BlblwtXChhXC1jb25mZXJlbmNlXCxcLWVcLmdcLlwpOwor5omT6YedID4gdG9cLWdpdmVcLW9yXC1oYXZlXC1hblwtaW5qZWN0aW9uOwor55Kn6KydID4gZGVjbGluZVwtXChhXC1naWZ0XClcLXdpdGhcLXRoYW5rczsKK+WwjeiPryA+IFwocG9saWN5XCxcLWV0Y1wuXClcLXRvd2FyZHNcLWNoaW5hOwor5YSA5ZmoID4gXChzY2llbnRpZmljXCxcLWV0Y1wpXC1pbnN0cnVtZW50Owor56m26L6mID4gdG9cLWludmVzdGlnYXRlXC1hbmRcLWRlYWxcLXdpdGg7CivlrprnvaogPiBjb252aWN0XC1cKHNvbWVvbmVcLW9mXC1hXC1jcmltZVwpOwor5pys6aGMID4gdGhlXC1zdWJqZWN0XC11bmRlclwtZGlzY3Vzc2lvbjsKK+iDjOewjSA+IGFcLWJhc2tldFwtY2FycmllZFwtb25cLXRoZVwtYmFjazsKK+aciemXnCA+IHRvXC1oYXZlXC1zb21ldGhpbmdcLXRvXC1kb1wtd2l0aDsKK+S+hua6kCA+IHNvdXJjZVwtXChvZlwtaW5mb3JtYXRpb25cLFwtZXRjXCk7CivnjbLph4sgPiBvYnRhaW5cLXJlbGVhc2VcLVwoZnJvbVwtcHJpc29uXCk7CivlsI3ml6UgPiBcKHBvbGljeVwsXC1ldGNcLlwpXC10b3dhcmRzXC1qYXBhbjsKK+aGi+awoyA+IGZlZWxcLXN1ZmZvY2F0ZWRcLW9yXC1vcHByZXNzZWQ7CivlkIzog54gPiBmZWxsb3dcLWNpdGl6ZW5cLW9yXC1jb3VudHJ5bWFuOwor5Yy+6aGNID4gYVwtaG9yaXpvbnRhbFwtaW5zY3JpYmVkXC1ib2FyZDsKK+eiuuiouiA+IHRvXC1tYWtlXC1hXC1kZWZpbml0ZVwtZGlhZ25vc2lzOwor5a6D5YCRID4gdGhleVwtXChmb3JcLWluYW5pbWF0ZVwtb2JqZWN0c1wpOwor54++5aC0ID4gc2NlbmVcLVwob2ZcLWV2ZW50XC1vclwtaW5jaWRlbnRcKTsKK+aEm+aDhSA+IGxvdmVcLVwoYmV0d2VlblwtbWFuXC1hbmRcLXdvbWFuXCk7Civorornr4AgPiBtYWtlXC1hXC1wb2xpdGljYWxcLXJlY2FudGF0aW9uOwor5raJ5auMID4gdG9cLWJlXC1hXC1zdXNwZWN0XC1cKGluXC1hXC1jcmltZVwpOwor5aSx6LazID4gdG9cLXRha2VcLWFcLXdyb25nXC1zdGVwXC1pblwtbGlmZTsKK+eKp+eJsiA+IHNhY3JpZmljZVwtXChvbmUnJ3NcLWxpZmVcLFwtZXRjXC5cKTsKK+S6nuS8ryA+IGFiZVwtXChzaG9ydFwtZm9ybVwtZm9yXC1hYnJhaGFtXCk7CivnjJzlv4wgPiBiZVwtc3VzcGljaW91c1wtYW5kXC1qZWFsb3VzXC1vZjsKK+m7qOWFpyA+IHdpdGhpblwtdGhlXC1cKGNvbW11bmlzdFwpXC1wYXJ0eTsKK+WLleiVqSA+IFwoc29jaWFsXC1vclwtcG9saXRpY2FsXClcLXVucmVzdDsKK+eOi+S4uSA+IHdhbmdcLWRhblwtXChjaGluZXNlXC1kaXNzaWRlbnRcKTsKK+axuuWumiA+IHRvXC1kZWNpZGVcLVwodG9cLWRvXC1zb21ldGhpbmdcKTsKK+WniuWmuSA+IFwob2xkZXJcLWFuZFwteW91bmdlclwpXC1zaXN0ZXJzOwor6YC86IKWID4gYmVhclwtYVwtY2xvc2VcLXJlc2VtYmxhbmNlXC10bzsKK+W+qeWvqSA+IHJlZXhhbWluZVwtXChhXC1qdWRpY2lhbFwtY2FzZVwpOwor5YWl6ZaAID4gaW50cm9kdWN0aW9uXC1cKHRvXC1hXC1zdWJqZWN0XCk7Civnmb3pnLIgPiB3aGl0ZVwtZGV3XC1cKDE1dGhcLXNvbGFyXC10ZXJtXCk7Civoo5zpq5QgPiBjb21wbGVtZW50XC1cKGluXC1ibG9vZFwtc2VydW1cKTsKK+ipleavlCA+IHRvXC1ldmFsdWF0ZVwtXChieVwtY29tcGFyaXNvblwpOwor6L2J6LqrID4gXChvZlwtYVwtcGVyc29uXClcLXRvXC10dXJuXC1yb3VuZDsKK+eIquWThyA+IGphdmFcLVwocHJvZ3JhbW1pbmdcLWxhbmd1YWdlXCk7CivmlYjlv6AgPiB2b3dcLWxveWFsdHlcLWFuZFwtZGV2b3Rpb25cLXRvOwor5o6h6L6mID4gYnV5XC1vblwtYVwtY29uc2lkZXJhYmxlXC1zY2FsZTsKK+W8n+WmuSA+IHNpc3RlclwtaW5cLWxhd1wtXCh3aWZlJydzXC1zaWRlXCk7CivpmbfmlrwgPiBjYXVnaHRcLWluXC1cKGFcLWJhZFwtc2l0dWF0aW9uXCk7CivlpJbljK8gPiBmb3JlaWduXC1cKGN1cnJlbmN5XClcLWV4Y2hhbmdlOwor5pGY55SxID4gaGlnaFwtcG9pbnRzXC1cKG9mXC1hXC1kb2N1bWVudFwpOwor5YG06Lq6ID4gdG9cLWxpZVwtZG93blwtXChvblwtb25lJydzXC1zaWRlXCk7CivmkJzmjZUgPiBodW50XC1hbmRcLWFycmVzdFwtXChmdWdpdGl2ZXNcKTsKK+aPueabuCA+IHJlY2l0ZVwtYVwtbGVzc29uXC1mcm9tXC1tZW1vcnk7CivlubjlhY0gPiBuYXJyb3dseVwtYW5kXC1sdWNraWx5XC1lc2NhcGU7CivlnIvmqJkgPiBndW9iaWFvXC1cKGVuY29kaW5nXC1zdGFuZGFyZFwpOwor5L6/6KGAID4gaGF2aW5nXC1ibG9vZFwtaW5cLW9uZScnc1wtc3Rvb2w7Civnl4XmqZ8gPiBpbnRlcnByZXRhdGlvblwtb2ZcLXRoZVwtY2F1c2U7CivmiY3oj68gPiBsaXRlcmFyeVwtb3JcLWFydGlzdGljXC10YWxlbnQ7CivmjIfms5UgPiBmaW5nZXJcLW1ldGhvZFwtXChpblwtcGFpbnRpbmdcKTsKK+WvtuiXjyA+IHByZWNpb3VzXC1cKG1pbmVyYWxcKVwtZGVwb3NpdHM7Civmj5DliY0gPiB0b1wtc2hpZnRcLXRvXC1hblwtZWFybGllclwtZGF0ZTsKK+i8qeWHuiA+IGNvbWVcLWZvcnRoXC1pblwtbGFyZ2VcLW51bWJlcnM7Civmnb/ptKggPiBwcmVzc2VkXC1cKGRyaWVkXClcLXNhbHRlZFwtZHVjazsKK+aLlOa1tyA+IGVsZXZhdGlvblwtXChhYm92ZVwtc2VhXC1sZXZlbFwpOwor5YCr5pWmID4gbG9uZG9uXC1cKGNhcGl0YWxcLW9mXC1lbmdsYW5kXCk7Civmop3mrL4gPiBjbGF1c2VcLVwob2ZcLWNvbnRyYWN0XC1vclwtbGF3XCk7Civnl4XkvosgPiBcW21lZGljYWxcXVwtY2FzZVwtXFtvZlwtaWxsbmVzc1xdOwor5Zmo5a6YID4gb3JnYW5cLVwocGFydFwtb2ZcLWJvZHlcLXRpc3N1ZVwpOwor54+t57SaID4gY2xhc3Nlc1wtb3JcLWdyYWRlc1wtaW5cLXNjaG9vbDsKK+aGsuazlSA+IGNvbnN0aXR1dGlvblwtXChvZlwtYVwtY291bnRyeVwpOwor5LiN6KuxID4gd2l0aG91dFwtY29uY2VhbGluZ1wtYW55dGhpbmc7Civlronmj5IgPiBwbGFjZVwtaW5cLWFcLWNlcnRhaW5cLXBvc2l0aW9uOwor5Y+k6LmfID4gcGxhY2VzXC1vZlwtaGlzdG9yaWNcLWludGVyZXN0Owor5rCj6auUID4gZ2FzXC1cKGllXCxcLWdhc2VvdXNcLXN1YnN0YW5jZVwpOwor5a2r5a2QID4gZ3JhbmRzb25cLVwoc29uXC1vZlwtb25lJydzXC1zb25cKTsKK+WllOmosCA+IFwob2ZcLXdhdmVzXClcLXRvXC1zdXJnZVwtZm9yd2FyZDsKK+mDtembuyA+IHBvc3RcLWFuZFwtdGVsZWNvbW11bmljYXRpb25zOwor5ZWP5YCZID4gZ2l2ZVwtc29tZW9uZVwtb25lJydzXC1yZXNwZWN0czsKK+ellueItiA+IGdyYW5kZmF0aGVyXC1cKGZhdGhlcicnc1wtc2lkZVwpOwor5rG6562WID4gXChtYWtlXC1hXClcLXN0cmF0ZWdpY1wtZGVjaXNpb247CivnpZbmr40gPiBncmFuZG1vdGhlclwtXChmYXRoZXInJ3NcLXNpZGVcKTsKK+mHneeBuCA+IGFjdXB1bmN0dXJlXC1hbmRcLW1veGlidXN0aW9uOwor5LiA5pemID4gaW5cLWNhc2VcLVwoc29tZXRoaW5nXC1oYXBwZW5zXCk7Civlo73ovrAgPiBiaXJ0aGRheVwtXChvZlwtYW5cLW9sZFwtcGVyc29uXCk7CivlvqnnlKYgPiByZWNvdmVyeVwtXChoZWFsdGhcLFwtZWNvbm9taWNcKTsKK+aZguacnyA+IGFcLXBlcmlvZFwtaW5cLXRpbWVcLW9yXC1oaXN0b3J5Owor5ZCE5ZywID4gaW5cLWFsbFwtcGFydHNcLW9mXC1cKGFcLWNvdW50cnlcKTsKK+eikeaWhyA+IGFuXC1pbnNjcmlwdGlvblwtb25cLWFcLXRhYmxldDsKK+WPsOWMlyA+IHRhaXBlaVwtXChjYXBpdGFsXC1vZlwtdGFpd2FuXCk7CivmsrPlhacgPiBoYW5vaVwtXChjYXBpdGFsXC1vZlwtdmlldG5hbVwpOwor6YeP5YqbID4gdG9cLWVzdGltYXRlXC1vbmUnJ3NcLXN0cmVuZ3RoOwor5pah5peLID4gbWVkaWF0ZVwtXChhXC1jb25mbGljdFwsXC1ldGNcLlwpOwor54mM5Yy+ID4gYm9hcmRcLVwoYXR0YWNoZWRcLXRvXC1hXC13YWxsXCk7Civli5XmiYsgPiB0b1wtaGl0XC13aXRoXC1oYW5kc1wtb3JcLWZpc3RzOwor5q2l5pyIID4gdG9cLXN0cm9sbFwtYmVuZWF0aFwtdGhlXC1tb29uOwor6KqT5birID4gdG9cLXZvd1wtYmVmb3JlXC1vbmUnJ3NcLXRyb29wczsKK+mDqOWnlCA+IG1pbmlzdHJpZXNcLWFuZFwtY29tbWlzc2lvbnM7Civpm6PmgKogPiBcKGl0JydzXClcLW5vXC13b25kZXJcLVwodGhhdFwuXC5cLlwpOwor5YeN57WQID4gXChsb2FuXCxcLXdhZ2VcLFwtcHJpY2VcKVwtZnJlZXplOwor5pa95YqgID4gZXhlcnRcLVwoZWZmb3J0XC1vclwtcHJlc3N1cmVcKTsKK+imlueqlyA+IHdpbmRvd3NcLVwob3BlcmF0aW5nXC1zeXN0ZW1cKTsKK+W3qOiRlyA+IG1vbnVtZW50YWxcLVwobGl0ZXJhcnlcKVwtd29yazsKK+WLn+WMliA+IHRvXC1jb2xsZWN0XC1hbG1zXC1cKGJ1ZGRoaXNtXCk7Civpg6jkuIsgPiB0cm9vcHNcLXVuZGVyXC1vbmUnJ3NcLWNvbW1hbmQ7CivlhajnqIsgPiBcKGR1cmluZ1wtYW5cKVwtZW50aXJlXC1qb3VybmV5Owor6ZW356+HID4gbGVuZ3RoeVwtXChyZXBvcnRcLW9yXC1zcGVlY2hcKTsKK+ilv+a5liA+IHRoZVwtd2VzdFwtbGFrZVwsXC1pblwtaGFuZ3pob3U7CivmkqXlvIQgPiBtb3ZlXC10b1wtYW5kXC1mcm9cLVwod2l0aFwtaGFuZDsKK+ihqOiomCA+IHNvbWV0aGluZ1wtZ2l2ZW5cLWFzXC1hXC10b2tlbjsKK+ihqOijoSA+IHRoZVwtb3V0c2lkZVwtYW5kXC10aGVcLWluc2lkZTsKK+mAvOWCtSA+IHByZXNzXC1mb3JcLXBheW1lbnRcLW9mXC1kZWJ0czsKK+ethumLkiA+IHRoZVwtdGlwXC1vZlwtYVwtd3JpdGluZ1wtYnJ1c2g7CivloLHliIogPiBuZXdzcGFwZXJzXC1hbmRcLXBlcmlvZGljYWxzOwor5ryU6KybID4gXChnaXZlXClcLWFcLXNwZWVjaFwtb3JcLWxlY3R1cmU7CivlnIvniLYgPiBmYXRoZXJcfGZvdW5kZXJcLW9mXC1hXC1uYXRpb247Civkvp3pnaAgPiByZWx5XC1vblwtXChmb3JcLXN1cHBvcnRcLFwtZXRjXCk7CivmiYDplbcgPiBoZWFkXC1vZlwtYW5cLWluc3RpdHV0ZVwsXC1ldGNcLjsKK+iLpeW5siA+IGFcLWNlcnRhaW5cLW51bWJlclx8YW1vdW50XC1vZjsKK+ertumBuCA+IHJ1blwtZm9yXC1cKGVsZWN0b3JhbFwpXC1vZmZpY2U7CivmkLblhYggPiB0b1wtcnVzaFwtXCh0b1wtZG9cLXN0aFwtdXJnZW50XCk7CivlgZznlZkgPiBzdGF5XC1zb21ld2hlcmVcLXRlbXBvcmFyaWx5Owor55eF5qCqID4gZGlzZWFzZWRcLW9yXC1pbmZlY3RlZFwtcGxhbnQ7Civkv5fnqLEgPiBiZVwtY29tbW9ubHlcLXJlZmVycmVkXC10b1wtYXM7CivooYzlsIcgPiBiZVwtYWJvdXRcLXRvXC1cKGRvXC1zb21ldGhpbmdcKTsKK+i2s+eQgyA+IGZvb3RiYWxsXC1cKGJyaXRpc2hcLWVuZ2xpc2hcKTsKK+iDjOiEiiA+IHRoZVwtYmFja1wtb2ZcLXRoZVwtaHVtYW5cLWJvZHk7Civmipfmk4ogPiByZXNpc3RcLVwoYVwtbWlsaXRhcnlcLWF0dGFja1wpOwor5bCL5qmfID4gdG9cLWxvb2tcLWZvclwtYW5cLW9wcG9ydHVuaXR5Owor5a+m5rOBID4gd2hhdFwtaXNcLWFjdHVhbGx5XC1oYXBwZW5pbmc7CivkuIHpm7IgPiBkaW5nXC15dW5cLVwoYVwtcGVyc29uYWxcLW5hbWVcKTsKK+ahiOadvyA+IGtuZWFkaW5nXC1vclwtY2hvcHBpbmdcLWJvYXJkOwor5L+d5a6IID4gXChwb2xpdGljYWxseVwpXC1jb25zZXJ2YXRpdmU7CivkuI3pgIEgPiBkb24nJ3RcLWJvdGhlclwtdG9cLXNlZVwtbWVcLW91dDsKK+elnumBkyA+IHNoaW50b1wtXChqYXBhbmVzZVwtcmVsaWdpb25cKTsKK+Wwh+WwsSA+IGFjY2VwdFwtXChhXC1iaXRcLXJlbHVjdGFudGx5XCk7Civmh7fmirEgPiBcKHdpdGhpblwtc29tZW9uZScnc1wpXC1lbWJyYWNlOwor5Y+z6YKKID4gcmlnaHRcLVwoYXNcLW9wcG9zZWRcLXRvXC1sZWZ0XCk7CivnpL7oq5YgPiBlZGl0b3JpYWxcLVwoaW5cLWFcLW5ld3NwYXBlclwpOwor5a625bi4ID4gdGhlXC1kYWlseVwtbGlmZVwtb2ZcLWFcLWZhbWlseTsKK+abuOiBliA+IGFcLWdyZWF0XC1jYWxsaWdyYXBoeVwtbWFzdGVyOwor6LOH5pysID4gY2FwaXRhbFwtXChhc1wtaW5cLWNhcGl0YWxpc21cKTsKK+miqOeQtCA+IG9yZ2FuXC1cKG11c2ljYWxcLWluc3RydW1lbnRcKTsKK+Wtl+W4liA+IGNvcHlib29rXC1cKGZvclwtY2FsbGlncmFwaHlcKTsKK+WuieWIhiA+IG5vdFwtZ29cLWJleW9uZFwtb25lJydzXC1ib3VuZHM7CivmmpfnrJEgPiBsYXVnaFwtaW5cLVwodXBcKVwtb25lJydzXC1zbGVldmU7Civnvo7njrIgPiBtZWlcLWxpbmdcLVwoYVwtcGVyc29uJydzXC1uYW1lXCk7CivnoqfooYAgPiBibG9vZFwtc2hlZFwtaW5cLWFcLWp1c3RcLWNhdXNlOwor5rSq5qOuID4gaHVuXC1zZW5cLVwoY2FtYm9kaWFuXC1sZWFkZXJcKTsKK+eon+WRiiA+IHJlcG9ydFwtXCh0b1wtb25lJydzXC1zdXBlcmlvclwpOwor6YG66auUID4gcmVtYWluc1wtXChvZlwtYVwtZGVhZFwtcGVyc29uXCk7Civpgb/poqggPiB0YWtlXC1zaGVsdGVyXC1mcm9tXC10aGVcLXdpbmQ7Civnpo/lu7ogPiBmdWppYW5cLVwocHJvdmluY2VcLW9mXC1jaGluYVwpOwor5YuY6KqkID4gdG9cLWNvcnJlY3RcLXByaW50aW5nXC1lcnJvcnM7CivljYfntJogPiB0b1wtZXNjYWxhdGVcLVwoaW5cLWludGVuc2l0eVwpOwor5by36Kq/ID4gdG9cLWVtcGhhc2l6ZVwtXChhXC1zdGF0ZW1lbnRcKTsKK+iAjOS4lCA+IG5vdFwtb25seVwtXC5cLlwuXC1idXRcLWFsc29cLVwuXC5cLlwuOwor6YG36YO9ID4gdG9cLW1vdmVcLXRoZVwtY2FwaXRvbFwtXChjaXR5XCk7CivkuI3kvYYgPiBub3RcLW9ubHlcLVwoXC5cLlwuXC1idXRcLWFsc29cLlwuXC5cKTsKK+WMheeUoiA+IG1ha2VcLWFcLXByb2R1Y3Rpb25cLWNvbnRyYWN0Owor5YyX5pydID4gdGhlXC1ub3J0aGVyblwtZHluYXN0aWVzXC1cKGE7CivljIXmlKwgPiB1bmRlcnRha2VcLXRoZVwtd2hvbGVcLXRoaW5nOwor5Yue5pWZID4gcmVlZHVjYXRpb25cLXRocm91Z2hcLWxhYm9yOwor5Y2K5aC0ID4gaGFsZlwtb2ZcLWFcLWdhbWVcLW9yXC1jb250ZXN0Owor55m86YGUID4gZGV2ZWxvcGVkXC1cKGNvdW50cnlcLFwtZXRjXC5cKTsKK+eAiemcsiA+IHRvXC1sZWFrXC1vdXRcLVwoaW5mb3JtYXRpb25cKTsKK+atsuaVuCA+IGFnZVwtXChudW1iZXJcLW9mXC15ZWFyc1wtb2xkXCk7CivplovoqK0gPiBvZmZlclwtXChnb29kc1wtb3JcLXNlcnZpY2VzXCk7Civlu6PmnbEgPiBndWFuZ2RvbmdcLXByb3ZpbmNlXCxcLWNoaW5hOwor5pS+5b+DID4gdG9cLXNldFwtb25lJydzXC1taW5kXC1hdFwtcmVzdDsKK+mtr+i/hSA+IG5hbWVcLW9mXC1hblwtYXV0aG9yXCxcLWx1XC14dW47CivpgZnmnJsgPiB0b1wtbG9va1wtaW50b1wtdGhlXC1kaXN0YW5jZTsKK+ijnOi2syA+IGJyaW5nXC11cFwtdG9cLWZ1bGxcLXN0cmVuZ3RoOwor54as5aScID4gc3RheVwtdXBcLWxhdGVcLW9yXC1hbGxcLW5pZ2h0Owor6auU6amXID4gdG9cLWV4cGVyaWVuY2VcLWZvclwtb25lc2VsZjsKK+aSleavgCA+IHRlYXJcLXVwXC1cKGFcLWNvbnRyYWN0XCxcLWV0Y1wpOwor5YK+6Yq3ID4gdG9cLWR1bXBcLVwoZ29vZHNcLFwtcHJvZHVjdHNcKTsKK+eci+azlSA+IHdheVwtb2ZcLWxvb2tpbmdcLWF0XC1hXC10aGluZzsKK+mXnOazqCA+IGZvbGxvd1wtXChhblwtaXNzdWVcKVwtY2xvc2VseTsKK+WJneWVhCA+IHRhcFwtXChvblwtYVwtZG9vclwtb3JcLXdpbmRvd1wpOwor6L6o5p6QID4gZGlmZmVyZW50aWF0ZVwtYW5kXC1hbmFseXNlOwor5ZyL55SiID4gbWFkZVwtaW5cLW9uZScnc1wtb3duXC1jb3VudHJ5Owor55m95pePID4gdGhlXC1iYWlcLVwocGFpXClcLW5hdGlvbmFsaXR5Owor55eF55mSID4gcmVjb3ZlclwtXChmcm9tXC1hblwtaWxsbmVzc1wpOwor5a+s6ZmQID4gZXh0ZW5kXC1cKGFcLWRlYWRsaW5lXCxcLWV0Y1wuXCk7CivooajmhYsgPiBtYWtlXC1rbm93blwtb25lJydzXC1wb3NpdGlvbjsKK+Wuo+iqkyA+IHN3ZWFyXC1hblwtb2F0aFwtXChvZlwtb2ZmaWNlXCk7Civmi5zmnJsgPiBjYWxsXC10b1wtcGF5XC1vbmUnJ3NcLXJlc3BlY3Q7Civnr4fluYUgPiBcKHRha2VcLXVwXC1vclwtZGV2b3RlXClcLXNwYWNlOwor6aaW55u4ID4gXChqYXBhbmVzZVwpXC1wcmltZVwtbWluaXN0ZXI7CivmiorlvI8gPiBwZXJzb25cLXNraWxsZWRcLWluXC1hXC10cmFkZTsKK+a3mOexriA+IGJhc2tldFwtXChmb3JcLXdhc2hpbmdcLXJpY2VcKTsKK+eUpeWlsyA+IG5pZWNlXC1cKHNpc3Rlcicnc1wtZGF1Z2h0ZXJcKTsKK+a8ouS6uiA+IGhhblwtY2hpbmVzZVwtcGVyc29uXHxwZW9wbGU7CivkvLrmqZ8gPiB0b1wtd2F0Y2hcLWZvclwtb25lJydzXC1jaGFuY2U7CivpoLjpg6ggPiB0aGVcLW5lY2tcLWFyZWFcLW9mXC10aGVcLWJvZHk7Civog4zlvbEgPiBhXC12aWV3XC1vZlwtc29tZWJvZHknJ3NcLWJhY2s7Civni6Hos7QgPiB0b1wtZGVueVwtXCh0aHJvdWdoXC1zb3BoaXNtXCk7Civororos6MgPiBzZWxsXC1vZmZcLVwob25lJydzXC1wcm9wZXJ0eVwpOwor5rG66LO9ID4gZmluYWxzXC1cKG9mXC1hXC1jb21wZXRpdGlvblwpOwor5p2/5pu4ID4gd3JpdGluZ1wtb25cLXRoZVwtYmxhY2tib2FyZDsKK+ePgOaWryA+IHBlcnRoXC1cKGNpdHlcLWluXC1hdXN0cmFsaWFcKTsKK+aEm+aGkCA+IHNob3dcLXRlbmRlclwtYWZmZWN0aW9uXC1mb3I7CivmmrTmvLIgPiByaXNlXC1zdWRkZW5seVwtYW5kXC1zaGFycGx5Owor6YyE5YWxID4gdG9cLXRha2VcLWRvd25cLWFcLWNvbmZlc3Npb247CivmnKzlrrYgPiBhXC1tZW1iZXJcLW9mXC10aGVcLXNhbWVcLWNsYW47CivpnaLoh6ggPiBiZVwtZmFjZWRcLXdpdGhcLVwoYVwtcHJvYmxlbVwpOwor5rGg5rmvID4gbGFyZ2VcLXBvb2xcLWluXC1hXC1iYXRoaG91c2U7CivnjY7li7UgPiByZXdhcmRcLVwoYXNcLWVuY291cmFnZW1lbnRcKTsKK+mghuW3riA+IFwodHJhZGVcLW9yXC1idWRnZXRcKVwtc3VycGx1czsKK+WInemBuCA+IFwodXNcKVwtcHJpbWFyaWVzXC1cKGVsZWN0aW9uXCk7CivloLHpircgPiBzdWJtaXRcLWFuXC1leHBlbnNlXC1hY2NvdW50Owor5Y+U5Y+UID4gZmF0aGVyJydzXC15b3VuZ2VyXC1icm90aGVyOwor5Z+O6ZecID4gYXJlYVwtb3V0c2lkZVwtYVwtY2l0eVwtZ2F0ZTsKK+mBi+eulyA+IFwobWF0aGVtYXRpY2FsXClcLW9wZXJhdGlvbjsKK+W3numVtyA+IGdvdmVybm9yXC1cKG9mXC1hXC11c1wtc3RhdGVcKTsKK+mDqOWxrCA+IGFmZmlsaWF0ZWRcLXRvXC1hXC1taW5pc3RyeTsKK+W8leaTjiA+IGVuZ2luZVwtXCh0cmFuc2xpdGVyYXRpb25cKTsKK+eZu+iomCA+IHRvXC1yZWdpc3RlclwtXChvbmUnJ3NcLW5hbWVcKTsKK+apn+e1hCA+IGZsaWdodFwtY3Jld1wtXChvblwtYVwtcGxhbmVcKTsKK+mBvOWvpyA+IGxpYW9uaW5nXC1wcm92aW5jZVwsXC1jaGluYTsKK+eFp+W4uCA+IFwoYnVzaW5lc3NcLFwtZXRjXClcLWFzXC11c3VhbDsKK+aSq+aRuCA+IGdlbnRseVwtY2FyZXNzXC1hbmRcLXN0cm9rZTsKK+WIh+aWtyA+IGN1dFwtb2ZmXC1cKGFcLXN1cHBseVwsXC1ldGNcLlwpOwor5bu65Yi2ID4gb3JnYW5pemF0aW9uYWxcLXN0cnVjdHVyZTsKK+mAgOW9uSA+IHJldGlyZVwtZnJvbVwtdGhlXC1taWxpdGFyeTsKK+mBleWPjSA+IHRvXC12aW9sYXRlXC1cKGFcLWxhd1wsXC1lXC5nXC5cKTsKK+W5q+W7miA+IGhlbHBcLWluXC10aGVcLW1lc3NcLWtpdGNoZW47Civoo5znqIUgPiBwYXlcLWFcLXRheFwtb25lXC1oYXNcLWV2YWRlZDsKK+ilsuaTiiA+IFwobWFrZVwtYVwpXC1zdXJwcmlzZVwtYXR0YWNrOwor55m95reoID4gXChvZlwtc2tpblwpXC1mYWlyXC1hbmRcLWNsZWFyOwor5beh5p+lID4gdG9cLWdvXC1hcm91bmRcLWFuZFwtaW5zcGVjdDsKK+WFteabuCA+IGFcLWJvb2tcLW9uXC10aGVcLWFydFwtb2ZcLXdhcjsKK+eUoumKtyA+IHByb2R1Y3Rpb25cLWFuZFwtbWFya2V0aW5nOwor6ZeM5bC+ID4gYXBwZW5kaXhcLVwoaW5cLWh1bWFuXC1ib2R5XCk7CivluYXlk6EgPiBhXC1jb3VudHJ5JydzXC1zdXJmYWNlXC1hcmVhOwor5pKl5LuYID4gYXBwcm9wcmlhdGVcLXN1bVwtb2ZcLW1vbmV5Owor5ZyL54efID4gc3RhdGVcLXJ1blwtXChjb21wYW55XCxcLWV0Y1wpOwor5pCN5aSxID4gYVwtXChmaW5hbmNpYWxcLFwtZXRjXC5cKVwtbG9zczsKK+i+puWFrCA+IGhhbmRsZVwtb2ZmaWNpYWxcLWJ1c2luZXNzOwor5L2Z6ZyHID4gXChlYXJ0aHF1YWtlXClcLWFmdGVyc2hvY2tzOwor55Wa566VID4gYVwtYmFtYm9vXC1vclwtd2lja2VyXC1zY29vcDsKK+eqgemhryA+IG1ha2VcLXNvbWV0aGluZ1wtc3RhbmRcLW91dDsKK+aPoeWKmyA+IFwoc3RyZW5ndGhcLW9mXC1vbmUnJ3NcKVwtZ3JpcDsKK+mmrOijoSA+IG1hbGlcLVwobmFtZVwtb2ZcLWFcLWNvdW50cnlcKTsKK+eXheaFiyA+IG1vcmJpZFwtb3JcLWFibm9ybWFsXC1zdGF0ZTsKK+aOp+WItiA+IHRvXC1cKGhhdmVcKVwtY29udHJvbFwtXChvdmVyXCk7CivkvbPog70gPiBjYW5vblwtXChqYXBhbmVzZVwtY29tcGFueVwpOwor55eF5a62ID4gYVwtcGF0aWVudFwtYW5kXC1oaXNcLWZhbWlseTsKK+eWkeaDkSA+IFwoYVwtc2Vuc2VcLW9mXClcLXVuY2VydGFpbnR5Owor5omT54mMID4gdG9cLXBsYXlcLW1haGpvbmdcLW9yXC1jYXJkczsKK+WBmuWuoiA+IHRvXC1iZVwtYVwtZ3Vlc3RcLW9yXC12aXNpdG9yOwor6KGM5L2/ID4gZXhlcmNpc2VcLVwoYVwtcmlnaHRcLFwtZXRjXC5cKTsKK+ethuaMuiA+IFwoc3RhbmRpbmdcKVwtdmVyeVwtc3RyYWlnaHQ7CivlronnpZ4gPiBjYWxtXC1cKHNvb3RoZVwpXC10aGVcLW5lcnZlczsKK+iBs+iCqSA+IHRvXC1zaHJ1Z1wtb25lJydzXC1zaG91bGRlcnM7Civmt7HnqbogPiBkZWVwXC1zcGFjZVwtXChvdXRlclwtc3BhY2VcKTsKK+WUkOe0jSA+IHRhbm5lclwtXChlbmdsaXNoXC1zdXJuYW1lXCk7CivlkYjoq4sgPiB0b1wtc3VibWl0XC1cKHRvXC1zdXBlcmlvcnNcKTsKK+S4iuiotCA+IGFwcGVhbFwtXChhXC1qdWRpY2lhbFwtY2FzZVwpOwor5oe35b+1ID4gdG9cLWNoZXJpc2hcLXRoZVwtbWVtb3J5XC1vZjsKK+eJuem7niA+IGNoYXJhY3RlcmlzdGljXC1cKGZlYXR1cmVcKTsKK+Wtl+avjSA+IGxldHRlclwtXChvZlwtdGhlXC1hbHBoYWJldFwpOwor5ZCM6KyAID4gdG9cLWNvbnNwaXJlXC13aXRoXC1zb21lb25lOwor5qGD5ZySID4gdGFveXVhblwtXChjaXR5XC1pblwtdGFpd2FuXCk7CivmsZ/pnaIgPiB0aGVcLXN1cmZhY2VcLW9mXC10aGVcLXJpdmVyOwor56KR6aGNID4gdGhlXC10b3BcLXBhcnRcLW9mXC1hXC10YWJsZXQ7CivkvLTlpY8gPiB0b1wtYWNjb21wYW55XC1cKG11c2ljYWxseVwpOwor5Y+z57+8ID4gXChwb2xpdGljYWxseVwpXC1yaWdodFwtd2luZzsKK+a1meaxnyA+IHpoZWppYW5nXC1wcm92aW5jZVwsXC1jaGluYTsKK+itmOimiyA+IGtub3dsZWRnZVwtYW5kXC1leHBlcmllbmNlOwor6LK35bizID4gdG9cLXNob3dcLXJlc3BlY3RcLVwoZm9yXC1zYlwpOwor5pqX566tID4gYXR0YWNrXC1ieVwtYVwtaGlkZGVuXC1lbmVteTsKK+a3seWcsyA+IHNoZW56aGVuXC1cKGNpdHlcLWluXC1jaGluYVwpOwor56iL5bqmID4gZGVncmVlXC1cKGxldmVsXC1vclwtZXh0ZW50XCk7CivlpKfpl5wgPiBcKHJlYWNoXC1hXClcLWNyaXRpY2FsXC1wb2ludDsKK+mgreeJiCA+IFwobmV3c3BhcGVyJydzXClcLWZyb250XC1wYWdlOwor5pil6IGvID4gc3ByaW5nXC1mZXN0aXZlbFwtY291cGxldHM7Civku6XkvoYgPiBzaW5jZVwtXChhXC1wcmV2aW91c1wtZXZlbnRcKTsKK+iTruiKsSA+IGxvdHVzXC1cKGNvbXB1dGVyXC1jb21wYW55XCk7CivkuI3ml6UgPiB3aXRoaW5cLXRoZVwtbmV4dFwtZmV3XC1kYXlzOwor6KuS6KejID4gXChyZWFjaFwpXC1hblwtdW5kZXJzdGFuZGluZzsKK+iTi+eroCA+IHRvXC1hZmZpeFwtYVwtc2VhbFwtXCh0b1wtc3RoXCk7Civop7jpm7sgPiB0b1wtZ2V0XC1hblwtZWxlY3RyaWNcLXNob2NrOwor5Li75YuVID4gXCh0b1wtdGFrZVwtdGhlXClcLWluaXRpYXRpdmU7CivoqLToqqogPiB0ZWxsXC1cKHRvXC1hbm90aGVyXC1wZXJzb25cKTsKK+e4vee1sSA+IHByZXNpZGVudFwtXChvZlwtYVwtY291bnRyeVwpOwor5aCx6aCtID4gbWFzdGhlYWRcLVwob2ZcLWFcLW5ld3NwYXBlcjsKK+WNl+aymSA+IG5hbnNoYVwtXChzcHJhdGx5XClcLWlzbGFuZHM7CivpgJrpgZMgPiBcKGNvbW11bmljYXRpb25zXClcLWNoYW5uZWw7CivmlL/nuL4gPiBcKHBvbGl0aWNhbFwpXC1hY2hpZXZlbWVudHM7Civlv4zmgaggPiBoYXRlXC1cKGR1ZVwtdG9cLWVudnlcLFwtZXRjXCk7Civpm7nngb0gPiBkaXNhc3RlclwtY2F1c2VkXC1ieVwtaGFpbDsKK+WHuuioqiA+IHZpc2l0XC1hXC1mb3JlaWduXC1jb3VudHJ5Owor5paR5paRID4gZnVsbFwtb2ZcLXN0YWluc1wtb3JcLXNwb3RzOwor6KW/6KOdID4gXCh3ZXN0ZXJuXC1zdHlsZVwpXC1jbG90aGVzOwor5Yqg5rK5ID4gdG9cLW1ha2VcLWFuXC1leHRyYVwtZWZmb3J0Owor5Yuf5o2QID4gdG9cLXNvbGljdFwtY29udHJpYnV0aW9uczsKK+eatOijgiA+IGNoYXBcLVwobGlwc1wsXC1za2luXCxcLWV0Y1wuXCk7CivopovogZ4gPiB3aGF0XC1vbmVcLXNlZXNcLWFuZFwtaGVhcnM7CivljZfkuqwgPiBuYW5qaW5nXC1cKGNpdHlcLWluXC1jaGluYVwpOwor6KaP57SEID4gdGVybXNcLVwob2ZcLWFuXC1hZ3JlZW1lbnRcKTsKK+atuOW/gyA+IGNvbnZlcnRlZFwtdG9cLVwocmVsaWdpb25cKTsKK+mAvOatuyA+IGhvdW5kXC1zb21lYm9keVwtdG9cLWRlYXRoOwor57Wx5rK7ID4gXChwb2xpdGljYWxcKVwtcnVsZVwtXChvdmVyXCk7Civoo5zoqrIgPiBtYWtlXC11cFwtYVwtbWlzc2VkXC1sZXNzb247CivpgJnmqKMgPiB0aGlzXC1cKGtpbmRcLW9mXCxcLXNvcnRcLW9mXCk7CivpgZTmiJAgPiB0b1wtcmVhY2hcLVwoYW5cLWFncmVlbWVudFwpOwor55m+6IisID4gaW5cLWh1bmRyZWRcLWFuZFwtb25lXC13YXlzOwor5o6I6KiIID4gdG9cLWNvbmZpZGVcLWFcLXBsYW5cLXRvXC1zYjsKK+WgseabiSA+IGhlcmFsZFwtdGhlXC1icmVha1wtb2ZcLWRheTsKK+WIqeW4giA+IFwibGFpXC1zZWVcIlwtXChsdWNreVwtbW9uZXlcKTsKK+WBtOmHjSA+IHBsYWNlXC1leHRyYVwtZW1waGFzaXNcLW9uOwor5aCx5oGpID4gcGF5XC1hXC1kZWJ0XC1vZlwtZ3JhdGl0dWRlOwor5bmr5a2QID4gb3V0ZXJcLVwob2ZcLWNhYmJhZ2VcLFwtZXRjXCk7Civoh6rosaogPiBcKGZlZWxcLWFcLXNlbnNlXC1vZlwpXC1wcmlkZTsKK+mYsuWLmSA+IFwocGVydGFpbmluZ1wtdG9cKVwtZGVmZW5zZTsKK+alree4viA+IG91dHN0YW5kaW5nXC1hY2hpZXZlbWVudDsKK+eVmeiogCA+IHRvXC1sZWF2ZVwtb25lJydzXC1jb21tZW50czsKK+W5tOS+hiA+IG92ZXJcLXRoZVwtbGFzdFwtXC5cLlwuXC15ZWFyczsKK+mWi+aLjSA+IGJlZ2luXC1zaG9vdGluZ1wtXChhXC1maWxtXCk7CivliIbkuYsgPiBcKGluZGljYXRpbmdcLWFcLWZyYWN0aW9uXCk7CivnrZTorJ0gPiB0b1wtZXhwcmVzc1wtb25lJydzXC10aGFua3M7CivnrYboq4cgPiBjb252ZXJzYXRpb25cLWJ5XC13cml0aW5nOwor55Gq6bqXID4gbWFsaVwtXChhXC1wZXJzb24nJ3MnJ1wtbmFtZVwpOwor55eH54uAID4gc3ltcHRvbVwtXChvZlwtYW5cLWlsbG5lc3NcKTsKK+S9lOmgmCA+IHRvXC1vY2N1cHlcLVwoYVwtdGVycml0b3J5XCk7CivlgpnmlpkgPiBnZXRcLXRoZVwtbWF0ZXJpYWxzXC1yZWFkeTsKK+WdpuWFiyA+IHRhbmtcLVwobWlsaXRhcnlcLXZlaGljbGVcKTsKK+Wbm+W3nSA+IHNpY2h1YW5cLXByb3ZpbmNlXCxcLWNoaW5hOwor6LKp6YGLID4gdG9cLXRyYW5zcG9ydFwtXChmb3JcLXNhbGVcKTsKK+S7iuitryA+IG1vZGVyblwtbGFuZ3VhZ2VcLXZlcnNpb247CivmipXmlL4gPiB0b1wtcHV0XC1pblwtXChjaXJjdWxhdGlvblwpOwor55eF5YCSID4gYmVcLWRvd25cLXdpdGhcLWFuXC1pbGxuZXNzOwor5ou35ZWPID4gdG9cLXF1ZXN0aW9uXC12aWFcLXRvcnR1cmU7CivmgqPpm6MgPiB0cmlhbHNcLWFuZFwtdHJpYnVsYXRpb25zOwor6Y2b54WJID4gdG9cLWRvXC1waHlzaWNhbFwtdHJhaW5pbmc7Civom5nms7MgPiBcKHN3aW1taW5nXClcLWJyZWFzdHN0cm9rZTsKK+aAjum6vCA+IFwoaW50ZXJyb2dhdGl2ZVwtcHJvbm91blwpOwor6aeQ5a6IID4gXChtYW5cLWFcLXBvc3RcLWFuZFwpXC1kZWZlbmQ7CivmuqvlkowgPiBtb2RlcmF0ZVwtXChwb2xpY3lcLFwtZXRjXC5cKTsKK+WQpuiqjSA+IHRvXC1kZWNsYXJlXC10b1wtYmVcLXVudHJ1ZTsKK+axn+ilvyA+IGppYW5neGlcLXByb3ZpbmNlXCxcLWNoaW5hOwor5oSb5pKrID4gdG9cLXNob3dcLXRlbmRlclwtY2FyZVwtZm9yOwor5Y+D6IiHID4gdG9cLXBhcnRpY2lwYXRlXC1cKGluXC1zdGhcKTsKK+a4r+S6uiA+IGhvbmdcLWtvbmdcLXBlcnNvblx8cGVvcGxlOwor6buD5rKzID4geWVsbG93XC1yaXZlclwtXChodWFuZ1wtaGVcKTsKK+axn+iYhyA+IGppYW5nc3VcLXByb3ZpbmNlXCxcLWNoaW5hOwor5Lu75ZG9ID4gdG9cLWFwcG9pbnRcLWFuZFwtbm9taW5hdGU7CivppIXlrZAgPiBtYWl6ZVwtb3JcLW1pbGxldFwtcGFuY2FrZTsKK+acn+aUtyA+IGVuZFwtb2ZcLXRlcm1cLWV4YW1pbmF0aW9uOwor57i96aGNID4gdG90YWxcLVwoYW1vdW50XC1vclwtdmFsdWVcKTsKK+isguiqniA+IFwoZ3JhbW1hdGljYWxcKVwtcHJlZGljYXRlOwor5Lit5pesID4gbWlkZGxlXC10aGlyZFwtb2ZcLWFcLW1vbnRoOwor5LiL5pesID4gbGFzdFwtdGhpcmRcLW9mXC10aGVcLW1vbnRoOwor6LKd5YWLID4gYmFrZXJcLVwoZW5nbGlzaFwtc3VybmFtZVwpOwor5LqC5ZCDID4gdG9cLWVhdFwtaW5kaXNjcmltaW5hbnRseTsKK+aBqeaAqCA+IFwoZmVlbGluZ1wtb2ZcKVwtcmVzZW50bWVudDsKK+S4jeWkliA+IG5vdFwtYmV5b25kXC10aGVcLXNjb3BlXC1vZjsKK+acjeWIkSA+IHNlcnZlXC1hXC1wcmlzb25cLXNlbnRlbmNlOwor6I6r6Z2eID4gY2FuXC1pdFwtYmVcLXBvc3NpYmxlXC10aGF0Owor5buj6KW/ID4gZ3Vhbmd4aVwtcHJvdmluY2VcLFwtY2hpbmE7CivlpZTngIkgPiBcKG9mXC10b3JyZW50c1wpXC1ydXNoXC1kb3duOwor6YG655WZID4gXChsZWF2ZVwtb3JcLWJlXC1hXClcLWxlZ2FjeTsKK+W4uOimjyA+IGNvbnZlbnRpb25hbFwtXCh3ZWFwb25zXCk7CivorYnliLggPiBcKGZpbmFuY2lhbFwpXC1zZWN1cml0aWVzOwor5b6A5bi4ID4gaGFiaXR1YWxseVwtaW5cLXRoZVwtcGFzdDsKK+WmluWGtiA+IHByZXR0eVwtYW5kXC1mbGlydGF0aW91czsKK+mdqeWRvSA+IFwocG9saXRpY2FsXClcLXJldm9sdXRpb247Civoq5blo4cgPiBmb3J1bVwtXChmb3JcLWRpc2N1c3Npb25cKTsKK+Wjn+aWtyA+IGVuam95XC1tYXJrZXRcLWRvbWluYW5jZTsKK+eJoeS4uSA+IHBlb255XC1cKHR5cGVcLW9mXC1mbG93ZXJcKTsKK+WgseeohSA+IGRlY2xhcmVcLWR1dGlhYmxlXC1nb29kczsKK+WFrOiqjSA+IHB1YmxpY2x5XC1rbm93blwtXCh0b1wtYmVcKTsKK+eZvOihqCA+IHRvXC1pc3N1ZVwtXChhXC1zdGF0ZW1lbnRcKTsKK+mbu+WZqCA+IFwoZWxlY3RyaWNhbFwpXC1hcHBsaWFuY2U7Civmrrfli6QgPiBwb2xpdGVseVwsXC1zb2xpY2l0b3VzbHk7CivliLDmnJ8gPiBiZWNvbWVcLWR1ZVwtXChlZ1wsXC1sb2Fuc1wpOwor55eF6ZmiID4gYVwtc3BlY2lhbGl6ZWRcLWhvc3BpdGFsOwor55eF6LGhID4gc3ltcHRvbVwtXChvZlwtYVwtZGlzZWFzZVwpOwor5qy65YeMID4gdG9cLWJ1bGx5XC1hbmRcLWh1bWlsaWF0ZTsKK+mBjeWPiiA+IHRvXC1leHRlbmRcLVwoZXZlcnl3aGVyZVwpOwor57C9572yID4gdG9cLXNpZ25cLVwoYW5cLWFncmVlbWVudFwpOwor5aCx5bCOID4gdG9cLWNvdmVyXC1cKHJlcG9ydFwpXC1uZXdzOwor5biD5pyXID4gZW5nbGlzaFwtc3VybmFtZVwsXC1icm93bjsKK+aomea6liA+IFwoYW5cLW9mZmljaWFsXClcLXN0YW5kYXJkOwor6YCA5LyRID4gcmV0aXJlbWVudFwtXChmcm9tXC13b3JrXCk7CivotqjpmYQgPiB0b1wtaW5ncmF0aWF0aW9uXC1vbnNlbGY7CivnrYbot6EgPiBhXC1wZXJzb24nJ3NcLWhhbmR3cml0aW5nOwor55uh5YqbID4gZG9cLW9uZScnc1wtYmVzdFwtXChlZmZvcnRcKTsKK+ethuiomCA+IHRha2VcLWRvd25cLVwoaW5cLXdyaXRpbmdcKTsKK+ikpeWtkCA+IGNvdHRvblwtcGFkZGVkXC1tYXR0cmVzczsKK+eXheeLgCA+IHN5bXB0b21cLVwob2ZcLWFcLWRpc2Vhc2VcKTsKK+WEmOW/qyA+IGFzXC1xdWlja2x5XC1hc1wtcG9zc2libGU7Civmv4DmmIIgPiBhcm91c2VkXC10b1wtaW5kaWduYXRpb247Civnq6XoqbEgPiBjaGlsZHJlbicnc1wtZmFpcnlcLXRhbGVzOwor5o+Q5LqkID4gc3VibWl0XC1cKGFcLXJlcG9ydFwsXC1ldGNcKTsKK+S+m+iBtyA+IGhvbGRcLWFuXC1vZmZpY2VcLW9yXC1wb3N0Owor5L6G6IeqID4gdG9cLWNvbWVcLWZyb21cLVwoYVwtcGxhY2VcKTsKK+eXheW+gSA+IHN5bXB0b21cLVwob2ZcLWFcLWRpc2Vhc2VcKTsKK+WumuiqniA+IGF0dHJpYnV0aXZlXC1cKG1vZGlmaWVyXCk7CivmvILmtYEgPiBjYXJyaWVkXC1ieVwtdGhlXC1jdXJyZW50Owor5qOE5qyKID4gdG9cLWFic3RhaW5cLWZyb21cLXZvdGluZzsKK+aNj+WQiCA+IHRvXC1hY3RcLWFzXC1hXC1nb1wtYmV0d2VlbjsKK+eUsuadvyA+IGRlY2tcLVwob2ZcLWFcLWJvYXRcLFwtZXRjXC5cKTsKK+aNj+S8sCA+IHRvXC1hY3RcLWFzXC1hXC1nb1wtYmV0d2VlbjsKK+aihea0viA+IHRoZVwtbWVpXC1sYW5mYW5nXC1zY2hvb2w7CivmtonpgY4gPiBmb3JkXC1cKGFcLXN0cmVhbVwsXC1yaXZlclwpOwor6auU5YWnID4gaW50ZXJuYWxcLVwodG9cLXRoZVwtYm9keVwpOwor5Lu76IG3ID4gaG9sZFwtYW5cLW9mZmljZVwtb3JcLXBvc3Q7CivohIrmpI4gPiBiYWNrXC1cKG9mXC1hXC12ZXJ0aWJyYXRlXCk7CivkvK/niLYgPiBmYXRoZXInJ3NcLWVsZGVyXC1icm90aGVyOwor5L+d5a6JID4gZW5zdXJlXC1wdWJsaWNcLXNlY3VyaXR5Owor5LiK6LqrID4gdXBwZXJcLXBhcnRcLW9mXC10aGVcLWJvZHk7CivlrZfmrrUgPiBcKG51bWVyaWNcLFwtZGF0ZGFcKVwtZmllbGQ7CivkuKboiIkgPiBkZXZlbG9wXC1zaW11bHRhbmVvdXNseTsKK+S4gOiZnyA+IGZpcnN0XC1kYXlcLW9mXC10aGVcLW1vbnRoOwor5a+p5YikID4gcHV0XC1cKHNvbWVvbmVcKVwtdG9cLXRyaWFsOwor5ZCQ6JWDID4gYW5jaWVudFwtbmFtZVwtZm9yXC10aWJldDsKK+a4rOWumiA+IHRvXC1zdXJ2ZXlcLWFuZFwtZXZhbHVhdGU7Civms7DnvoUgPiBcKGVuZ2xpc2hcLXN1cm5hbWVcKVwtdHlsbzsKK+WQnuiBsiA+IHRvXC1zd2FsbG93XC1vbmUnJ3NcLWNyaWVzOwor6LKh5pyDID4gZmluYW5jZVwtYW5kXC1hY2NvdW50aW5nOwor5Lqk5piTID4gXChidXNpbmVzc1wpXC10cmFuc2FjdGlvbjsKK+ePvuW9uSA+IFwobWlsaXRhcnlcKVwtYWN0aXZlXC1kdXR5Owor5rCR6YG4ID4gZGVtb2NyYXRpY2FsbHlcLWVsZWN0ZWQ7CivkvK/kvK8gPiBmYXRoZXInJ3NcLWVsZGVyXC1icm90aGVyOwor5rW35ouUID4gaGVpZ2h0XC1hYm92ZVwtc2VhXC1sZXZlbDsKK+enkeaKgCA+IHNjaWVuY2VcLWFuZFwtdGVjaG5vbG9neTsKK+S7u+WFjSA+IHRvXC1hcHBvaW50XC1hbmRcLWRpc21pc3M7CivkuoLlr6sgPiB0b1wtd3JpdGVcLXdpdGhvdXRcLWJhc2lzOwor5aaW6Im3ID4gcHJldHR5XC1hbmRcLWZsaXJ0YXRpb3VzOwor6Zu26YyiID4gY2hhbmdlXC1cKHNhaWRcLW9mXC1tb25leVwpOwor5LiN5pyNID4gbm90XC1hY2NlcHRcLVwoc29tZXRoaW5nXCk7CivpvLvlhZIgPiBhXC1ob2xlXC1pblwtYW5cLWltcGxlbWVudDsKK+aEn+WYhiA+IHRvXC1zaWdoXC1cKHdpdGhcLWZlZWxpbmdcKTsKK+WMluijnSA+IFwob2ZcLWFjdG9yc1wpXC10b1wtbWFrZVwtdXA7CivkupHljZcgPiB5dW5uYW5cLXByb3ZpbmNlXCxcLWNoaW5hOwor5pyN5a6MID4gc2VydmVcLW91dFwtXChhXC1zZW50ZW5jZVwpOwor6buD5bGxID4gbXRcLlwtaHVhbmdcLVwoaHVhbmdcLXNoYW5cKTsKK+WPpOazoiA+IGd1Ym9cLVwoYVwtcGVyc29uYWxcLW5hbWVcKTsKK+eMnOaLsyA+IGFcLWZpbmdlclwtZ3Vlc3NpbmdcLWdhbWU7CivliqnoqZ4gPiBwYXJ0aWNsZVwtXChncmFtbWF0aWNhbFwpOwor6K6T5Z2QID4gdG9cLWdpdmVcLXVwXC1vbmUnJ3NcLXNlYXQ7Civmsrnlg7kgPiBvaWxcLVwocGV0cm9sZXVtXClcLXByaWNlOwor5beo6aGNID4gYVwtaHVnZVwtc3VtXC1cKG9mXC1tb25leVwpOwor5aWU5pS+ID4gYm9sZFwtYW5kXC11bnJlc3RyYWluZWQ7CivlvpfmhI8gPiBcKGJlXClcLXByb3VkXC1vZlwtb25lc2VsZjsKK+WllOW/mSA+IGJlXC1idXN5XC1ydXNoaW5nXC1hYm91dDsKK+WJm+ebtCA+IHVwcmlnaHRcLWFuZFwtb3V0c3Bva2VuOwor5beh6YKPID4gYmVcLW9uXC1cKHBvbGljZVwpXC1wYXRyb2w7CivpmY3npo8gPiBibGVzc2luZ3NcLWZyb21cLWhlYXZlbjsKK+eCuOiXpSA+IGV4cGxvc2l2ZVwtXChzdWJzdGFuY2VcKTsKK+WkouaDsyA+IHRvXC1kcmVhbVwtb2ZcLVwoaW5cLXZhaW5cKTsKK+mYsuepuiA+IGFudGlcLWFpcmNyYWZ0XC1kZWZlbnNlOwor5YWI6YCyID4gYWR2YW5jZWRcLVwodGVjaG5vbG9neVwpOwor5aWU5ZG9ID4gcnVzaFwtYWJvdXRcLW9uXC1lcnJhbmRzOwor6Kej5rG6ID4gdG9cLXNldHRsZVwtXChhXC1kaXNwdXRlXCk7CivpmLLmsrsgPiBcKHByZXZlbnRpb25cLWFuZFwpXC1jdXJlOwor5YiG5qmfID4gXCh0ZWxlcGhvbmVcKVwtZXh0ZW5zaW9uOwor55y+5pybID4gcGVvcGxlJydzXC1leHBlY3RhdGlvbnM7Civnmb3ns5YgPiBcKHJlZmluZWRcKVwtd2hpdGVcLXN1Z2FyOwor5pOB5oi0ID4gdG9cLXN1cHBvcnRcLVwoYVwtcGVyc29uXCk7CivooajpgZQgPiB0b1wtdm9pY2VcLVwoYW5cLW9waW5pb25cKTsKK+WgseaZgiA+IGdpdmVcLXRoZVwtY29ycmVjdFwtdGltZTsKK+maqOWSjCA+IGFtaWFibGVcLVwoZGlzcG9zaXRpb25cKTsKK+WHveaOiCA+IGNvcnJlc3BvbmRlbmNlXC1jb3Vyc2U7Civov7fmiIAgPiB0b1wtYmVcLWluZmF0dWF0ZWRcLXdpdGg7Civmi5fpmbcgPiBnZW9sb2dpY2FsXC1kZXByZXNzaW9uOwor5YWN55arID4gaW1tdW5pdHlcLVwodG9cLWRpc2Vhc2VcKTsKK+WFrOeEtiA+IFwoZG9cLXNvbWV0aGluZ1wpXC1vcGVubHk7CivloIXmjIEgPiB0b1wtY29udGludWVcLXVwaG9sZGluZzsKK+WHuuW3riA+IGJlXC1vblwtYVwtYnVzaW5lc3NcLXRyaXA7CivmvLjpgLIgPiBwcm9ncmVzc1wtc3RlcFwtYnlcLXN0ZXA7CivpmZDliLYgPiBcKGltcG9zZVwpXC1yZXN0cmljdGlvbnM7CivlubTliJ0gPiBiZWdpbm5pbmdcLW9mXC10aGVcLXllYXI7CivnrYbpjIQgPiBwdXRcLWRvd25cLVwoaW5cLXdyaXRpbmdcKTsKK+aMieiEiCA+IGZlZWxcLVwodGFrZVwpXC10aGVcLXB1bHNlOwor5oub6IGYID4gdGFrZVwtam9iXC1hcHBsaWNhdGlvbnM7CivlhYnlt54gPiBrd2FuZ2p1XC1cKHNvdXRoXC1rb3JlYVwpOwor5bel5ZWGID4gaW5kdXN0cnlcLWFuZFwtY29tbWVyY2U7CivmvrPmtLIgPiBhdXN0cmFsaWFcLVwoY29udGluZW50XCk7Civnmq7lhZIgPiBcKGRvdWdoXCxcLWV0Y1wuXCl3cmFwcGVyczsKK+eUmOiChSA+IGdhbnN1XC1wcm92aW5jZVwsXC1jaGluYTsKK+WuiemWkiA+IHBlYWNlZnVsXC1hbmRcLWNhcmVmcmVlOwor6Imx5beoID4gdmVyeVwtZGlmZmljdWx0XC1cKHRhc2tcKTsKK+igu+apqyA+IHJ1ZGVcLWFuZFwtdW5yZWFzb25hYmxlOwor57C95a2XID4gdG9cLXNpZ25cLVwoYVwtc2lnbmF0dXJlXCk7CivlronpgakgPiBxdWlldFwtYW5kXC1jb21mb3J0YWJsZTsKK+a4rOiJryA+IHRvXC1zdXJ2ZXlcLWFuZFwtbWVhc3VyZTsKK+ePrei7iiA+IHJlZ3VsYXJcLWJ1c1wtXChzZXJ2aWNlXCk7CivmoYjnlLEgPiBtYWluXC1wb2ludHNcLW9mXC1hXC1jYXNlOwor6LK26KyrID4gYmFuaXNoXC1mcm9tXC10aGVcLWNvdXJ0Owor6buD6a2aID4geWVsbG93XC1jcm9ha2VyXC1cKGZpc2hcKTsKK+i6q+S4liA+IG9uZScnc1wtbGlmZVwtZXhwZXJpZW5jZTsKK+aKseaBqCA+IGhhdmVcLWFcLWduYXdpbmdcLXJlZ3JldDsKK+iHquWPpCA+IFwoc2luY2VcKVwtYW5jaWVudFwtdGltZXM7CivnrIbmlpcgPiByb3VuZFwtYm90dG9tZWRcLWJhc2tldDsKK+S6jOiZnyA+IDJcLW5kXC1kYXlcLW9mXC10aGVcLW1vbnRoOwor6LKh57aTID4gZmluYW5jZVwtYW5kXC1lY29ub21pY3M7CivkuLvoqp4gPiBcKGdyYW1tYXRpY2FsXClcLXN1YmplY3Q7CivlmJblmJYgPiB0b1wtY2xpY2tcLW9uZScnc1wtdG9uZ3VlOwor6by756WWID4gdGhlXC1lYXJsaWVzdFwtYW5jZXN0b3I7CivmiIDmhJsgPiB0b1wtaGF2ZVwtYVwtbG92ZVwtYWZmYWlyOwor5pq06LeMID4gc3RlZXBcLWZhbGxcLVwoaW5cLXByaWNlXCk7CivorpPplosgPiB0b1wtZ2V0XC1vdXRcLW9mXC10aGVcLXdheTsKK+WwseS+vyA+IGF0XC1cKHlvdXJcKVwtY29udmVuaWVuY2U7Civlj6/ouqsgPiB0b1wtZml0XC13ZWxsXC1cKGNsb3RoZXNcKTsKK+enkeeglCA+IFwoc2NpZW50aWZpY1wpXC1yZXNlYXJjaDsKK+WPr+isgiA+IGl0XC1jb3VsZFwtZXZlblwtYmVcLXNhaWQ7CivorpPot68gPiB0b1wtbWFrZVwtd2F5XC1cKGZvclwtc3RoXCk7CivmiLbkuLsgPiBoZWFkXC1vZlwtdGhlXC1ob3VzZWhvbGQ7CivpoJLooYwgPiBpc3N1ZVwtZm9yXC1lbmZvcmNlbWVudDsKK+a5luWNlyA+IGh1bmFuXC1wcm92aW5jZVwsXC1jaGluYTsKK+mkmOaVuCA+IFwobnVtZXJpY2FsXClcLXJlbWFpbmRlcjsKK+S4jeeuoSA+IG5vXC1tYXR0ZXJcLVwod2hhdFwsXC1ob3dcKTsKK+eJiOmdoiA+IHNwYWNlXC1vZlwtYVwtd2hvbGVcLXBhZ2U7CivkuI3npoEgPiBjYW4nJ3RcLWhlbHBcLVwoZG9pbmdcLXN0aDsKK+aYj+i/tyA+IHRvXC1sb3NlXC1jb25zY2lvdXNuZXNzOwor5ZCQ57WuID4gdGhlXC1vcGVuaW5nXC1vZlwtYVwtYm9sbDsKK+mLquW5syA+IHNwcmVhZFwtb3V0XC1cKG1hdGVyaWFsXCk7CivkuI3nkIYgPiByZWZ1c2VcLXRvXC1hY2tub3dsZWRnZTsKK+iuiuiHiSA+IHN1ZGRlbmx5XC10dXJuXC1ob3N0aWxlOwor5rW35pavID4gaGF5ZXNcLVwobWljcm9jb21wdXRlclwpOwor5p2x5b63ID4gXChmb3JtZXJcKVwtZWFzdFwtZ2VybWFueTsKK+aal+ekgSA+IHN1Ym1lcmdlZFwtcmVlZlwtXChyb2NrXCk7Civosrflpb0gPiB0b1wtaW5ncmF0aWF0ZVwtb25lc2VsZjsKK+aal+eWviA+IHVubWVudGlvbmFibGVcLWRpc2Vhc2U7CivogbPli5UgPiB0b1wtY3JlYXRlXC1hXC1zZW5zYXRpb247Civmnb/lh7MgPiB3b29kZW5cLWJlbmNoXC1vclwtc3Rvb2w7CivkuI3mmocgPiBoYXZlXC1ub1wtdGltZVwtXChmb3JcLXN0aDsKK+aCsuaGpCA+IGdyaWVmXC1hbmRcLWluZGlnbmF0aW9uOwor54m555SiID4gc3BlY2lhbFwtbG9jYWxcLXByb2R1Y3Q7Civola3mop0gPiBcKGVjb25vbWljXClcLWRlcHJlc3Npb247Civmrq/okawgPiBmdW5lcmFsXC1hbmRcLWludGVybWVudDsKK+WRveS7pCA+IFwoYW5cKVwtb3JkZXJcLW9yXC1jb21tYW5kOwor5rWB5LqhID4gdG9cLVwoZm9yY2VcLWludG9cKVwtZXhpbGU7CivljZHmsaEgPiBkZXNwaWNhYmxlXC1hbmRcLWZpbHRoeTsKK+aatOWNkiA+IGRpZVwtb2ZcLXN1ZGRlblwtaWxsbmVzczsKK+mAvOimliA+IGxvb2tcLWF0XC1mcm9tXC1jbG9zZVwtdXA7Civml7rmnIggPiBidXN5XC1cKGJ1c2luZXNzXClcLW1vbnRoOwor5YiX6LuKID4gdHJhaW5cLVwocmFpbHdheVwtdGVybVwpOwor5Y+L5aW9ID4gZnJpZW5kbHlcLVwocmVsYXRpb25zXCk7Civmq4PpgoogPiB0b1wtbGllXC1vblwtb25lJydzXC1zaWRlOwor5Yi26KOBID4gXChlY29ub21pY1wpXC1zYW5jdGlvbnM7CivnpL7kuqQgPiBcKHNvY2lhbFwpXC1pbnRlcmFjdGlvbjsKK+aTjeihjCA+IFwoc3R1ZGVudCcnc1wpXC1iZWhhdmlvcjsKK+WnpeWnpSA+IG1hdGVybmFsXC1ncmFuZG1vdGhlcjsKK+e3qOe1hCA+IG9yZ2FuaXplXC1pbnRvXC1ncm91cHM7Civopqrov5EgPiBnZXRcLWNsb3NlXC10b1wtc29tZW9uZTsKK+e1kOirliA+IFwocmVhY2hcLWFcKVwtY29uY2x1c2lvbjsKK+mXoei/sCA+IGV4cG91bmRcLVwoYVwtcG9zaXRpb25cKTsKK+W/g+WvkiA+IGJlXC12ZXJ5XC1kaXNhcHBvaW50ZWQ7CivntYToo50gPiBhc3NlbWJsZVwtYW5kXC1pbnN0YWxsOwor6KqT5q27ID4gdG9cLXBsZWRnZVwtb25lJydzXC1saWZlOwor5Z+O6YSJID4gY2l0eVwtYW5kXC1jb3VudHJ5c2lkZTsKK+WNlOWumiA+IFwocmVhY2hcLWFuXClcLWFncmVlbWVudDsKK+awtOWfnyA+IFwodGVycml0b3JpYWxcKVwtd2F0ZXJzOwor5Yu75pW0ID4gbmVhdFwtYW5kXC13ZWxsXC1zcGFjZWQ7CivlhafplqMgPiBcKGdvdmVybm1lbnRcKVwtY2FiaW5ldDsKK+W7oOeJjCA+IGJyYW5kXC1cKG9mXC1hXC1wcm9kdWN0XCk7CivlpbblpbYgPiBwYXRlcm5hbFwtZ3JhbmRtb3RoZXI7Civnt6jmrKEgPiBvcmRlclwtb2ZcLWFycmFuZ2VtZW50Owor5pWZ5o6IID4gdW5pdmVyc2l0eVwtcHJvZmVzc29yOwor5Yui5b+FID4gaXNcLWJvdW5kXC10b1wtXChoYXBwZW5cKTsKK+WiqOaxgSA+IHByZXBhcmVkXC1jaGluZXNlXC1pbms7CivlpKflsIcgPiBhXC1nZW5lcmFsXC1vclwtYWRtaXJhbDsKK+awo+S6uiA+IHRvXC1nZXRcLXNvbWVvbmVcLWFuZ3J5Owor5YyF5aC0ID4gYm9va1wtYVwtd2hvbGVcLXRoZWF0cmU7Civlha3omZ8gPiA2dGhcLWRheVwtb2ZcLXRoZVwtbW9udGg7CivoqZ7lvZkgPiBcKGxpc3RcLW9mXClcLXZvY2FidWxhcnk7CivmlJ3lvbEgPiB0b1wtdGFrZVwtYVwtcGhvdG9ncmFwaDsKK+i+r+eZvSA+IG9mZmVyXC1hblwtZXhwbGFuYXRpb247CivmjqHoqKogPiBjb3ZlclwtXChhXC1uZXdzXC1zdG9yeVwpOwor5YW156uZID4gYXJteVwtc2VydmljZVwtc3RhdGlvbjsKK+i7jeiyuyA+IG1pbGl0YXJ5XC1leHBlbmRpdHVyZTsKK+aTmuaCiSA+IGFjY29yZGluZ1wtdG9cLXJlcG9ydHM7CivliY3lubQgPiB0aGVcLXllYXJcLWJlZm9yZVwtbGFzdDsKK+ijnOiJsiA+IGNvbXBsZW1lbnRhcnlcLWNvbG91cjsKK+aUu+WLoiA+IFwobWlsaXRhcnlcKVwtb2ZmZW5zaXZlOwor5YiG5pOUID4gc2hhcmVcLXJlc3BvbnNpYmlsaXR5Owor6ZaL55m8ID4gZXhwbG9pdFwtXChhXC1yZXNvdXJjZVwpOwor5q235LujID4gc3VjY2Vzc2l2ZVwtZHluYXN0aWVzOwor6L+R5pelID4gaW5cLXRoZVwtcGFzdFwtZmV3XC1kYXlzOwor5Zue6KiqID4gXChwYXlcLWFcKVwtcmV0dXJuXC12aXNpdDsKK+eXheiuiiA+IHBhdGhvbG9naWNhbFwtY2hhbmdlczsKK+WHjOaZqCA+IGVhcmx5XC1pblwtdGhlXC1tb3JuaW5nOwor57Gg57WxID4gXChpblwpXC1nZW5lcmFsXC1cKHRlcm1zXCk7Civmp7Pni4AgPiBjZXJ0aWZpY2F0ZVwtb2ZcLW1lcml0Owor5YCa6YeNID4gdG9cLXJlbHlcLWhlYXZpbHlcLXVwb247CivmiorphZIgPiByYWlzZVwtb25lJydzXC13aW5lXC1jdXA7Civou43nlKggPiBcKGZvclwpXC1taWxpdGFyeVwtXCh1c2VcKTsKK+S/nemHjSA+IHRha2VcLWNhcmVcLW9mXC1vbmVzZWxmOwor5aCx5LuHID4gdG9cLXJldmVuZ2VcLVwob25lc2VsZlwpOwor5oqE6LqrID4gdG9cLXNlYXJjaFwtXChhXC1wZXJzb25cKTsKK+ajieilliA+IGNvdHRvblwtcGFkZGVkXC1qYWNrZXQ7CivlhJjml6kgPiBhc1wtZWFybHlcLWFzXC1wb3NzaWJsZTsKK+WfueS/riA+IHRvXC1yZXBhaXJcLWVhcnRod29ya3M7CivlsIrph40gPiB0b1wtdmFsdWVcLVwoc29tZXRoaW5nXCk7Civnl4XngbYgPiBmb2N1c1wtXChvZlwtaW5mZWN0aW9uXCk7CivkvrXopbIgPiB0b1wtaW52YWRlXC1hbmRcLWF0dGFjazsKK+ewoeactCA+IHNpbXBsZVwtYW5kXC11bmFkb3JuZWQ7Civpp4HpgYsgPiB0cmFuc3BvcnRcLWJ5XC1saWdodGVyOwor5L6L6KiAID4gaW50cm9kdWN0b3J5XC1yZW1hcmtzOwor5YKZ5p+lID4gZm9yXC1mdXR1cmVcLXJlZmVyZW5jZTsKK+WuiemAuCA+IGVhc3lcLWFuZFwtY29tZm9ydGFibGU7Civnl4XmiL8gPiB3YXJkXC1cKG9mXC1hXC1ob3NwaXRhbFwpOwor6KGo5b2wID4gY2l0ZVwtXChpblwtZGlzcGF0Y2hlc1wpOwor5ouc5pyDID4gcGF5XC1hblwtb2ZmaWNpYWxcLWNhbGw7CivlsIjnqIsgPiBzcGVjaWFsXC1wdXJwb3NlXC10cmlwOwor5YG95bmjID4gY291bnRlcmZlaXRcLWN1cnJlbmN5Owor5omN55WlID4gYWJpbGl0eVwtYW5kXC1zYWdhY2l0eTsKK+WxpOasoSA+IGFycmFuZ2VtZW50XC1vZlwtaWRlYXM7CivnrYbms5UgPiB0ZWNobmlxdWVcLW9mXC13cml0aW5nOwor5Lqk6YCaID4gXChhdXRvbW9iaWxlXClcLXRyYWZmaWM7CivllZ/nqIsgPiBzZXRcLW91dFwtb25cLWFcLWpvdXJuZXk7CivnlavloLEgPiBwaWN0b3JpYWxcLVwobWFnYXppbmVcKTsKK+S+teaTviA+IHRvXC1pbnZhZGVcLWFuZFwtaGFyYXNzOwor5bGP5bmVID4gXCh0dlwtb3JcLW1vdmllXClcLXNjcmVlbjsKK+eQg+e2siA+IG5ldFwtXChmb3JcLWJhbGxcLWdhbWVzXCk7CivmvKLljJYgPiBjaGluZXNlXC1sb2NhbGl6YXRpb247CivlsI3ls5kgPiBtdXR1YWxcLWNvbmZyb250YXRpb247Civnvo7ou40gPiB1c1wtYXJteVx8YXJtZWRcLWZvcmNlczsKK+S9jeaWvCA+IGJlXC1zaXR1YXRlZFwtXChpblwsXC1hdFwpOwor6K6K6aC7ID4gZnJlcXVlbmN5XC1jb252ZXJzaW9uOwor5Zau5a2XID4gaW5kaXZpZHVhbFwtY2hhcmFjdGVyOwor5riF5pepID4gZWFybHlcLWluXC10aGVcLW1vcm5pbmc7Civog4zlv4MgPiBhXC1zbGVldmVsZXNzXC1nYXJtZW50Owor5oi25Y+jID4gcmVnaXN0ZXJlZFwtcmVzaWRlbmNlOwor5pys56eRID4gdW5kZXJncmFkdWF0ZVwtY291cnNlOwor5L6/5LitID4gYXRcLW9uZScnc1wtY29udmVuaWVuY2U7Civlr7blio0gPiBhXC1kb3VibGVcLWVkZ2VkXC1zd29yZDsKK+mGnumHgCA+IG11bGxcLW92ZXJcLVwoYW5cLWlzc3VlXCk7CivmmpfomZ8gPiBzZWNyZXRcLXNpZ25hbFwtXChzaWduXCk7CivogIHniLogPiBtYXRlcm5hbFwtZ3JhbmRmYXRoZXI7Civnj63mnJ8gPiBzY2hlZHVsZVwtXChmb3JcLWZsaWdodDsKK+iyt+aWuSA+IGJ1eWVyXC1cKGluXC1jb250cmFjdHNcKTsKK+WuieWonCA+IGFubmFcLVwocGVyc29uJydzXC1uYW1lXCk7CivosqzmiJAgPiBnaXZlXC1zb21lYm9keVwtYVwtdGFzazsKK+Wkmum6vCA+IGhvd1wtXCh3b25kZXJmdWxcLFwtZXRjXCk7CivphazorJ0gPiB0b1wtdGhhbmtcLXdpdGhcLWFcLWdpZnQ7CivlvoDov5QgPiB0b1wtZ29cLWJhY2tcLWFuZFwtZm9ydGg7CivljIXph5EgPiBjb3Zlclwtd2l0aFwtZ29sZFwtbGVhZjsKK+aakeeGsSA+IGhvdFwtXChzdW1tZXJcKVwtd2VhdGhlcjsKK+S4jeabviA+IG5ldmVyXC1cKGhhdmVcLWRvbmVcLXN0aDsKK+e4vemDqCA+IGdlbmVyYWxcLWhlYWRxdWFydGVyczsKK+iytuWAvCA+IHRvXC1iZWNvbWVcLWRldmFsdWF0ZWQ7CivpgbrpqrggPiBcKGRlYWRcKVwtaHVtYW5cLXJlbWFpbnM7CivpgbrpqqggPiBcKGRlYWRcKVwtaHVtYW5cLXJlbWFpbnM7CivphaznrZQgPiB0b1wtdGhhbmtcLXdpdGhcLWFcLWdpZnQ7CivpoZ7mjqggPiB0b1wtcmVhc29uXC1ieVwtYW5hbG9neTsKK+WSjOWlvSA+IHRvXC1iZWNvbWVcLXJlY29uY2lsZWQ7CivmnKzlnJ8gPiBvbmUnJ3NcLW5hdGl2ZVwtY291bnRyeTsKK+S6nuWAqyA+IGFhcm9uXC1cKGFcLW1hbicnc1wtbmFtZVwpOwor576e5oGlID4gXChhXC1mZWVsaW5nXC1vZlwpXC1zaGFtZTsKK+WTiOS9myA+IGhhcnZhcmRcLVwodW5pdmVyc2l0eVwpOwor5pqR5pyfID4gc3VtbWVyXC12YWNhdGlvblwtdGltZTsKK+WRvOWWiiA+IHNob3V0XC1cKHNsb2dhbnNcLFwtZXRjXCk7Civnub3ntJsgPiBpblwtcmlvdG91c1wtcHJvZnVzaW9uOwor5ZGI5aCxID4gdG9cLVwoc3VibWl0XC1hXClcLXJlcG9ydDsKK+WNiueZvSA+IGZpZnR5XC1cKHllYXJzXC1vZlwtYWdlXCk7CivwoIGlID4gdGhlXC1ob3Juc1wtb2ZcLWFcLXNoZWVwOwor5piC54S2ID4gdXByaWdodFwtYW5kXC11bmFmcmFpZDsKK+mChOiqqiA+IHRvXC1hZGRcLVwoaW5cLXNwZWFraW5nXCk7Civmm7TliqAgPiBtb3JlXC1cKHRoYW5cLXN0aFwtZWxzZVwpOwor54i654i6ID4gcGF0ZXJuYWxcLWdyYW5kZmF0aGVyOwor5LiN5YudID4gY2Fubm90XC1iZWFyXC1vclwtc3RhbmQ7CivmlZfog4MgPiBzcG9pbFwtb25lJydzXC1hcHBldGl0ZTsKK+iuiuW/gyA+IGNlYXNlXC10b1wtYmVcLWZhaXRoZnVsOwor5LiK5YCLID4gZmlyc3RcLVwob2ZcLXR3b1wtcGFydHNcKTsKK+WllOa1gSA+IGZsb3dcLWF0XC1ncmVhdFwtc3BlZWQ7Civml6XmlocgPiBqYXBhbmVzZVwtXChsYW5ndWFnZVwpOwor5pKe6KaLID4gdG9cLW1lZXRcLWJ5XC1hY2NpZGVudDsKK+W3rumhjSA+IGJhbGFuY2VcLVwoZmluYW5jaWFsXCk7CivljYrmiKogPiBoYWxmXC1cKG9mXC1hXC1zZWN0aW9uXCk7CivliZvnupQgPiBcKGp1c3RcKVwtYVwtbW9tZW50XC1hZ287Civlu6DnpKYgPiBmYWN0b3JpZXNcLWFuZFwtbWluZXM7CivnhrHng4ggPiB3YXJtXC1cKHdlbGNvbWVcLFwtZXRjXCk7Civovq/orbcgPiBzcGVha1wtaW5cLWRlZmVuY2VcLW9mOwor5aSn5om5ID4gbGFyZ2VcLXF1YW50aXRpZXNcLW9mOwor57aB56WoID4ga2lkbmFwXC1cKGZvclwtcmFuc29tXCk7Civnmb3pioUgPiBjb3BwZXJcLW5pY2tlbFwtYWxsb3k7CivntbHnqLEgPiBjb2xsZWN0aXZlbHlcLWNhbGxlZDsKK+W7ouawoyA+IHdhc3RlXC1cKGV4aGF1c3RcKVwtZ2FzOwor5YyF5a2QID4gc3RlYW1lZFwtc3R1ZmZlZFwtYnVuOwor57SF6JGJID4gcmVkXC1hdXR1bW5hbFwtbGVhdmVzOwor55m+6LKoID4gZ2VuZXJhbFwtbWVyY2hhbmRpc2U7CivprKLpq64gPiBoYWlyXC1vblwtdGhlXC10ZW1wbGVzOwor5YSY6YePID4gYXNcLW11Y2hcLWFzXC1wb3NzaWJsZTsKK+i6q+mrmCA+IFwoYVwtcGVyc29uJydzXClcLWhlaWdodDsKK+aVmeWtuCA+IHRlYWNoZXJcLWFuZFwtc3R1ZGVudDsKK+mEmeS6uiA+IHlvdXJcLWh1bWJsZVwtc2VydmFudDsKK+aVheWuriA+IHRoZVwtaW1wZXJpYWxcLXBhbGFjZTsKK+aUv+WxgCA+IHBvbGl0aWNhbFwtc2l0dWF0aW9uOwor552/5pm6ID4gd2lzZVwtYW5kXC1mYXJzaWdodGVkOwor6KOc6KeSID4gc3VwcGxlbWVudGFyeVwtYW5nbGU7CivpgLLmlLsgPiBhdHRhY2tcLVwobWlsaXRhcmlseVwpOwor5pO65byEID4gbW92ZVwtYmFja1wtYW5kXC1mb3J0aDsKK+mBjeW4gyA+IGJlXC1mb3VuZFwtZXZlcnl3aGVyZTsKK+aUueWQjSA+IHRvXC1jaGFuZ2VcLW9uZXNcLW5hbWU7Civoo5zogIMgPiBtYWtlXC11cFwtZXhhbWluYXRpb247Civmkq3lvIQgPiBvcmRlclwtc3ViamVjdFwtYWJvdXQ7CivlubTlupUgPiB0aGVcLWVuZFwtb2ZcLXRoZVwteWVhcjsKK+e0hOargyA+IGFya1wtb2ZcLXRoZVwtY292ZW5hbnQ7Civluavlt6UgPiBoZWxwXC13aXRoXC1mYXJtXC13b3JrOwor5aCx5buiID4gcmVwb3J0XC1hc1wtd29ydGhsZXNzOwor5oqs6aCtID4gdG9cLXJhaXNlXC1vbmUnJ3NcLWhlYWQ7Civln7fmjowgPiB3aWVsZFwtXChwb3dlclwsXC1ldGNcLlwpOwor5YW15qyKID4gbWlsaXRhcnlcLWxlYWRlcnNoaXA7CivpgLzkvpsgPiBleHRvcnRcLWFcLWNvbmZlc3Npb247CivplovmlL4gPiBsaWZ0XC1cKHJlc3RyaWN0aW9uc1wpOwor55m75pyIID4gZ29cLVwodXBcKVwtdG9cLXRoZVwtbW9vbjsKK+W5o+WAvCA+IHZhbHVlXC1vZlwtYVwtY3VycmVuY3k7CivlhrDloLQgPiBza2F0aW5nXC1vclwtaWNlXC1yaW5rOwor55uu5YmNID4gYXRcLXRoZVwtcHJlc2VudFwtdGltZTsKK+ethuitryA+IHdyaXR0ZW5cLXRyYW5zbGF0aW9uOwor562G6KmmID4gd3JpdHRlblwtZXhhbWluYXRpb247Civpl5zliIcgPiBiZVwtZGVlcGx5XC1jb25jZXJuZWQ7CivotbDplosgPiBnZXRcLW91dFwtb2ZcLXRoZVwtd2F5XCE7CivopobkuqEgPiBmYWxsXC1cKG9mXC1hblwtZW1waXJlXCk7Civoo4HmlrcgPiBjb25zaWRlclwtYW5kXC1kZWNpZGU7CivntIDlhYMgPiBiZWdpbm5pbmdcLW9mXC1hblwtZXJhOwor5YW15ZyYID4gbGFyZ2VcLW1pbGl0YXJ5XC11bml0Owor6L6m5LqLID4gdG9cLWhhbmRsZVwtXChhZmZhaXJzXCk7Civns77lgY8gPiB0b1wtY29ycmVjdFwtYW5cLWVycm9yOwor5omN6K2YID4gYWJpbGl0eVwtYW5kXC1pbnNpZ2h0Owor5oyJ55CGID4gYWNjb3JkaW5nXC10b1wtcmVhc29uOwor6LyU5bmjID4gZnJhY3Rpb25hbFwtY3VycmVuY3k7CivmkK3kvLQgPiB0cmF2ZWxcLXdpdGhcLWFub3RoZXI7CivlnIvml5cgPiBmbGFnXC1cKG9mXC1hXC1jb3VudHJ5XCk7Civou43mlL8gPiBhcm15XC1hbmRcLWdvdmVybm1lbnQ7Civnl4Xms4EgPiBzdGF0ZVwtb2ZcLWFuXC1pbGxuZXNzOwor6L2J5ZCRID4gY2hhbmdlXC1vZlwtZGlyZWN0aW9uOwor55m95Y23ID4gYmxhbmtcLWV4YW1pbmVcLXBhcGVyOwor5YWr5LuZID4gdGhlXC1laWdodFwtaW1tb3J0YWxzOwor6LyD5aSnID4gY29tcGFyYXRpdmVseVwtbGFyZ2U7CivnrYbnrpcgPiBkb1wtYVwtc3VtXC1pblwtd3JpdGluZzsKK+ijgeWlqiA+IGNvbnNpZGVyXC1hbmRcLWRlY2lkZTsKK+aPkOWHuiA+IHRvXC1yYWlzZVwtXChhblwtaXNzdWVcKTsKK+eZveS6uiA+IHdoaXRlXC1tYW5cLWFuZFwtd29tYW47CivlgZrms5UgPiB3YXlcLW9mXC1kb2luZ1wtdGhpbmdzOwor5oq954WZID4gc21va2VcLVwoYVwtY2lnYXJldHRlXCk7Civooajmg4UgPiBcKGZhY2lhbFwpXC1leHByZXNzaW9uOwor6KOc5YqpID4gXChmaW5hbmNpYWxcKVwtc3Vic2lkeTsKK+iGoOeJhyA+IFwocGhvdG9ncmFwaGljXClcLWZpbG07Civnl4Xmg4UgPiBzdGF0ZVwtb2ZcLWFuXC1pbGxuZXNzOwor5p+U6YGTID4gXCh0aGVcLXNwb3J0XC1vZlwpXC1qdWRvOwor5o6h5Yi2ID4gY29sbGVjdFwtYW5kXC1wcm9jZXNzOwor5oqE542yID4gdG9cLXNlYXJjaFwtYW5kXC1zZWl6ZTsKK+ihqOWnkCA+IG9sZGVyXC1mZW1hbGVcLWNvdXNpbjsKK+i7n+S7tiA+IFwoY29tcHV0ZXJcKVwtc29mdHdhcmU7Civmi5vlvoUgPiB0b1wtcmVjZWl2ZVwtXChndWVzdHNcKTsKK+aLnOW5tCA+IHBheVwtYVwtbmV3XC15ZWFyXC1jYWxsOwor5LqS6YCaID4gdG9cLWludGVyY29tbXVuaWNhdGU7Civnr6HkvY0gPiB0b1wtc2VpemVcLXRoZVwtdGhyb25lOwor57236bucID4gZGlzbWlzc1wtZnJvbVwtb2ZmaWNlOwor5bGs5a+mID4gdHVyblwtb3V0XC10b1wtYmVcLXRydWU7CivmtL7pgaMgPiBzZW5kXC1cKG9uXC1hXC1taXNzaW9uXCk7CivkuKbph40gPiBsYXlcLWVxdWFsXC1zdHJlc3NcLW9uOwor5omN5a24ID4gdGFsZW50XC1hbmRcLWxlYXJuaW5nOwor6ICV6ICYID4gcGxvd2luZ1wtYW5kXC13ZWVkaW5nOwor5oWI56WlID4gXChhXClcLWtpbmRseVwtXChwZXJzb25cKTsKK+WuieaogiA+IHBlYWNlXC1hbmRcLWhhcHBpbmVzczsKK+momeWPliA+IHRvXC1nYWluXC1ieVwtY2hlYXRpbmc7CivmtrzniL0gPiBjb29sXC1hbmRcLXJlZnJlc2hpbmc7Civpu6jntYQgPiBsZWFkaW5nXC1wYXJ0eVwtZ3JvdXA7CivkvovlpJYgPiBcKG1ha2VcLWFuXClcLWV4Y2VwdGlvbjsKK+itsOmhjCA+IHRvcGljXC1vZlwtZGlzY3Vzc2lvbjsKK+izh+a6kCA+IFwobmF0dXJhbFwpXC1yZXNvdXJjZXM7CivllYbmnIMgPiBjaGFtYmVyXC1vZlwtY29tbWVyY2U7CivotaTlrZcgPiBcKGZpbmFuY2lhbFwpXC1kZWZpY2l0Owor5Lim6IGvID4gcGFyYWxsZWxcLWNvbm5lY3Rpb247CivosqHmupAgPiBmaW5hbmNpYWxcLXJlc291cmNlczsKK+mHj+iuiiA+IHF1YW50aXRhdGl2ZVwtY2hhbmdlOwor6ICQ54WpID4gcGF0aWVudFwtXChhZGplY3RpdmVcKTsKK+S4mee2uCA+IHBvbHlwcm9weWxlbmVcLWZpYnJlOwor5rG66K2wID4gXChwYXNzXC1hXClcLXJlc29sdXRpb247CivpjK/lrZcgPiBpbmNvcnJlY3RcLWNoYXJhY3RlcjsKK+S8tOWUsSA+IHZvY2FsXC1hY2NvbXBhbmltZW50Owor6K2Y6LKoID4gdG9cLWtub3dcLXdoYXQnJ3NcLXdoYXQ7Civlrpjlk6EgPiBnb3Zlcm5tZW50XC1vZmZpY2lhbDsKK+eon+aApyA+IG5hdHVyYWxcLWRpc3Bvc2l0aW9uOwor6aCQ57+SID4gdG9cLXByZXBhcmVcLWFcLWxlc3NvbjsKK+a1gea0viA+IHNjaG9vbFwtXChvZlwtdGhvdWdodFwpOwor5ZOA5oaQID4gZmVlbFwtY29tcGFzc2lvblwtZm9yOwor6LKh5a+2ID4gbW9uZXlcLWFuZFwtdmFsdWFibGVzOwor6ICQ5b+DID4gcGF0aWVudFwtXChhZGplY3RpdmVcKTsKK+aXpeiqniA+IGphcGFuZXNlXC1cKGxhbmd1YWdlXCk7CivkuovlrpwgPiBcKG1ha2VcKVwtYXJyYW5nZW1lbnRzOwor5pWX6aGeID4gc2N1bVwtb2ZcLWFcLWNvbW11bml0eTsKK+aXl+iijSA+IGNoaW5lc2VcLXN0eWxlXC1kcmVzczsKK+W+kOihjCA+IHdhbGtcLXNsb3dseVwsXC1zdHJvbGw7CivosqHlipsgPiBmaW5hbmNpYWxcLXJlc291cmNlczsKK+iXj+aXjyA+IHRpYmV0YW5cLW5hdGlvbmFsaXR5Owor54Wn6aGnID4gdGFrZVwtXChnb29kXClcLWNhcmVcLW9mOwor6K6T5q2lID4gXChtYWtlXC1hXClcLWNvbmNlc3Npb247CivpgorpgaAgPiBmYXJcLWZyb21cLXRoZVwtY2VudGVyOwor5pO66ZeKID4gcGFyYWRlXC1vbmUnJ3NcLXdlYWx0aDsKK+aZtOaclyA+IHN1bm55XC1hbmRcLWNsb3VkbGVzczsKK+aCsuWjryA+IHNvbGVtblwtYW5kXC1zdGlycmluZzsKK+e9t+W4giA+IHNob3BrZWVwZXInJ3NcLXN0cmlrZTsKK+S4jeWmqCA+IHRoZXJlXC1pc1wtbm9cLWhhcm1cLWluOwor5aSn6IW4ID4gdGhlXC1sYXJnZVwtaW50ZXN0aW5lOwor5Li55Y+DID4gc2FsdmlhXC1taWx0aW9ycmhpemE7Civpm7bokL0gPiB3aXRoZXJlZFwtYW5kXC1mYWxsZW47Civlvpfnn6UgPiBcKGZpbmRcLW91dFwtYW5kXClcLWtub3c7CivnvbflrpggPiBkaXNtaXNzXC1mcm9tXC1vZmZpY2U7CivorormlYUgPiBhblwtdW5mb3Jlc2VlblwtZXZlbnQ7CivmgZDmgJUgPiBcKGknJ21cKVwtYWZyYWlkXC1cKHRoYXRcKTsKK+S4jeWVjyA+IHBheVwtbm9cLWF0dGVudGlvblwtdG87Civlu6Dopo8gPiBmYWN0b3J5XC1yZWd1bGF0aW9uczsKK+mgkOWumiA+IHNjaGVkdWxlXC1pblwtYWR2YW5jZTsKK+S4jeWHoSA+IG91dFwtb2ZcLXRoZVwtb3JkaW5hcnk7CivmlZfnuL4gPiBiZVwtdXR0ZXJseVwtZGVmZWF0ZWQ7CivmmrTliKkgPiBzdWRkZW5cLWh1Z2VcLXByb2ZpdHM7CivnvarlkI0gPiBhXC1cKGNyaW1pbmFsXClcLWNoYXJnZTsKK+S4jeS5jyA+IHRoZXJlXC1pc1wtbm9cLWxhY2tcLW9mOwor5ZCI5ZCMID4gXChidXNpbmVzc1wpXC1jb250cmFjdDsKK+W5q+i+piA+IGFzc2lzdFwtaW5cLW1hbmFnaW5nOwor6YWs5oeJID4gc29jaWFsXC1pbnRlcmFjdGlvbjsKK+eEoeirliA+IG5vXC1tYXR0ZXJcLXdoYXRcfGhvdzsKK+WOn+WumiA+IG9yaWdpbmFsbHlcLXBsYW5uZWQ7CivpgJrooYwgPiBsaWNlbmNlXC1cKGNvbXB1dGVyXCk7Civlj7jku6QgPiBjb21tYW5kaW5nXC1vZmZpY2VyOwor57O+6ZuGID4gdG9cLWdhdGhlclwtdG9nZXRoZXI7CivpgIHooYwgPiB0b1wtc2VlXC1zb21lb25lXC1vZmY7CivpgZXntIQgPiB0b1wtYnJlYWtcLWFcLXByb21pc2U7CivljbHlsYAgPiBwZXJpbG91c1wtc2l0dWF0aW9uOwor5pKl6JmfID4gZGlhbFwtXChhXC10ZWxlcGhvbmVcKTsKK+iuiuS/riA+IGJlY29tZVwtcmV2aXNpb25pc3Q7CivpgZXnq6AgPiB0b1wtYnJlYWtcLXRoZVwtcnVsZXM7CivntrLnrqEgPiBuZXR3b3JrXC1tYW5hZ2VtZW50Owor6JKZ5paHID4gbW9uZ29saWFuXC1sYW5ndWFnZTsKK+aAp+S6pCA+IHNleHVhbFwtaW50ZXJjb3Vyc2U7Civnianlg7kgPiBcKGNvbW1vZGl0eVwpXC1wcmljZXM7CivlvozlpKkgPiBkYXlcLWFmdGVyXC10b21vcnJvdzsKK+WkquW5syA+IHBlYWNlXC1hbmRcLXNlY3VyaXR5Owor55+a5pybID4gdG9cLWxvb2tcLWZvcndhcmRcLXRvOwor5Y2U5YqpID4gcHJvdmlkZVwtYXNzaXN0YW5jZTsKK+aOoemiqCA+IGNvbGxlY3RcLWZvbGtcLXNvbmdzOwor5o+P6YeRID4gdG9cLW91dGxpbmVcLWluXC1nb2xkOwor5Yqp5pWZID4gdGVhY2hpbmdcLWFzc2lzdGFudDsKK+Wkq+WppiA+IGFcLVwobWFycmllZFwpXC1jb3VwbGU7Civoi7Hoqp4gPiBlbmdsaXNoXC1cKGxhbmd1YWdlXCk7CivpgYvmsKMgPiBsdWNrXC1cKGdvb2RcLW9yXC1iYWRcKTsKK+aOoemMhCA+IGNvbGxlY3RcLWFuZFwtcmVjb3JkOwor54aK5o6MID4gYmVhclwtcGF3XC1cKGFzXC1mb29kXCk7CivmlrDlhbUgPiBuZXdcLVwoYXJteVwpXC1yZWNydWl0Owor5paD5ZG9ID4gbWVldFwtdmlvbGVudFwtZGVhdGg7CivlpLHkuosgPiBcKGhhdmVcLWFuXClcLWFjY2lkZW50Owor6Zu75L+hID4gdGVsZWNvbW11bmljYXRpb25zOwor5o2o6LqrID4gdG9cLWdpdmVcLW9uZScnc1wtbGlmZTsKK+iKneiYrSA+IGlyaXNlc1wtYW5kXC1vcmNoaWRzOwor5pS55Y+jID4gdG9cLWNvcnJlY3RcLW9uZXNlbGY7CivmlL/li5kgPiBnb3Zlcm5tZW50XC1hZmZhaXJzOwor5YWn56eRID4gbWVkaWNhbFwtZGVwYXJ0bWVudDsKK+WFg+e0oCA+IFwoY2hlbWljYWxcKVwtZWxlbWVudDsKK+WKoOWFpSA+IHRvXC1iZWNvbWVcLWFcLW1lbWJlcjsKK+mBuOWNgCA+IGVsZWN0b3JhbFwtZGlzdHJpY3Q7CivlnJ/okZcgPiBuYXRpdmVcLFwtYWJvcmlnaW5hbDsKK+aTjeWuiCA+IHBlcnNvbmFsXC1pbnRlZ3JpdHk7CivlgrLoppYgPiB0dXJuXC11cFwtb25lJydzXC1ub3NlOwor6I6r5aaCID4gaXRcLXdvdWxkXC1iZVwtYmV0dGVyOwor57WQ5bizID4gdG9cLXNldHRsZVwtYWNjb3VudHM7Civlm5vomZUgPiBhbGxcLW92ZXJcLXRoZVwtcGxhY2U7CivpgZXkvosgPiB0b1wtYnJlYWtcLXRoZVwtcnVsZXM7CivlnabnjocgPiBmcmFua1wtXChkaXNjdXNzaW9uXCk7CivpgYvkvZwgPiB0aHJlYWRcLVwoY29tcHV0aW5nXCk7CivpgLHliIogPiB3ZWVrbHlcLXB1YmxpY2F0aW9uOwor5L+d6aeVID4gZXNjb3J0XC10aGVcLWVtcGVyb3I7CivlhbHmnIkgPiB0b1wtaGF2ZVwtYWx0b2dldGhlcjsKK+WgseWWnCA+IGFubm91bmNlXC1nb29kXC1uZXdzOwor6LeR6Zu7ID4gZWxlY3RyaWNhbFwtbGVha2FnZTsKK+aSpeWIuiA+IHNwbGFzaFwtXChvZlwtYVwtZmlzaFwpOwor5ouc6KaLID4gcGF5XC1hXC1mb3JtYWxcLXZpc2l0Owor6Iux5paHID4gZW5nbGlzaFwtXChsYW5ndWFnZVwpOwor5Yid5LitID4ganVuaW9yXC1oaWdoXC1zY2hvb2w7CivmioTpgZMgPiB0b1wtdGFrZVwtYVwtc2hvcnRjdXQ7CivmvJToqqogPiBcKGRlbGl2ZXJcLWFcKVwtc3BlZWNoOwor6KaB5ZywID4gc3RyYXRlZ2ljXC1sb2NhdGlvbjsKK+i+puWgsSA+IHRvXC1ydW5cLWFcLW5ld3NwYXBlcjsKK+WHuuS7uyA+IHN0YXJ0XC1pblwtYVwtbmV3XC1qb2I7Civlhafmg4UgPiBpbnNpZGVcLWluZm9ybWF0aW9uOwor6ZaL5bGVID4gXChiZWdpblwtdG9cKVwtZGV2ZWxvcDsKK+S/hOiqniA+IHJ1c3NpYW5cLVwobGFuZ3VhZ2VcKTsKK+WxseiFsyA+IGZvb3RcLW9mXC1hXC1tb3VudGFpbjsKK+WFrOWPuCA+IFwoYnVzaW5lc3NcKVwtY29tcGFueTsKK+aLieelqCA+IGNhbXBhaWduXC1mb3JcLXZvdGVzOwor5omL6KGTID4gc3VyZ2ljYWxcLW9wZXJhdGlvbjsKK+WFq+WNpiA+IHRoZVwtZWlnaHRcLWRpYWdyYW1zOwor6auU5rqrID4gXChib2R5XClcLXRlbXBlcmF0dXJlOwor5ryC56e7ID4gZHJpZnRcLVwoZWxlY3RyaWNhbFwpOwor5YGc5ruvID4gYmVcLWF0XC1hXC1zdGFuZHN0aWxsOwor5a6Y6YK4ID4gb2ZmaWNpYWxcLXJlc2lkZW5jZTsKK+aLnOa4tCA+IHBheVwtYVwtZm9ybWFsXC12aXNpdDsKK+i7jeWumCA+IFwobWlsaXRhcnlcKVwtb2ZmaWNlcjsKK+ethuebtCA+IHBlcmZlY3RseVwtc3RyYWlnaHQ7CivnlKLnlJ8gPiB0b1wtY29tZVwtaW50b1wtYmVpbmc7Civpp5Doj68gPiBzdGF0aW9uZWRcLWluXC1jaGluYTsKK+aOiOWPlyA+IHRvXC1naXZlXC1hbmRcLWFjY2VwdDsKK+eWq+aDhSA+IGVwaWRlbWljXC1zaXR1YXRpb247Civmt7HpgKAgPiBhZHZhbmNlZFwtXChzdHVkaWVzXCk7Civmjajlkb0gPiB0b1wtcmlza1wtb25lJydzXC1saWZlOwor6KOB5LimID4gY3V0XC1kb3duXC1hbmRcLW1lcmdlOwor5L2/56+AID4gXChkaXBsb21hdGljXClcLWVudm95Owor6Iez5bCRID4gXCh0b1wtc2F5XC10aGVcKVwtbGVhc3Q7Civosrfos6MgPiBidXlpbmdcLWFuZFwtc2VsbGluZzsKK+a4rOe5qiA+IHRvXC1zdXJ2ZXlcLWFuZFwtZHJhdzsKK+iDjOe0hCA+IGJyZWFrXC1hblwtYWdyZWVtZW50Owor6Lev5b6RID4gcm91dGVcLVwobmV0d29ya2luZ1wpOwor6IiJ5L6LID4gdG9cLWdpdmVcLWFuXC1leGFtcGxlOwor5L+E5paHID4gcnVzc2lhblwtXChsYW5ndWFnZVwpOwor5omN5pm6ID4gYWJpbGl0eVwtYW5kXC13aXNkb207CivmiZPmi7MgPiB0b1wtZG9cLXNoYWRvd2JveGluZzsKK+iEiOasgiA+IGJlYXRpbmdcLVwob2ZcLWhlYXJ0XCk7Civoh6rkuLsgPiB0b1wtYWN0XC1mb3JcLW9uZXNlbGY7CivmnJ/osqggPiBmdXR1cmVzXC1cKG9uXC1nb29kc1wpOwor5L615oiqID4gdG9cLWhhY2tcLVwoY29tcHV0ZXJcKTsKK+mgremrriA+IGhhaXJcLVwob25cLXRoZVwtaGVhZFwpOwor6LOq55aRID4gY2FsbFwtaW50b1wtcXVlc3Rpb247CivpppbmrKEgPiBmb3JcLXRoZVwtZmlyc3RcLXRpbWU7CivmooblrZAgPiB3YXRjaG1hbicnc1wtY2xhcHBlcjsKK+ayuemkhSA+IGRlZXBcLWZyaWVkXC1wYW5jYWtlOwor5rOE6ZyyID4gbGVha1wtXChpbmZvcm1hdGlvblwpOwor5oqV5YWlID4gcHV0XC1pbnRvXC1vcGVyYXRpb247CivmnpDnlpEgPiB0b1wtcmVzb2x2ZVwtYVwtZG91YnQ7Civol4/oqp4gPiB0aWJldGFuXC1cKGxhbmd1YWdlXCk7CivmnKjogLMgPiBlZGlibGVcLXRyZWVcLWZ1bmd1czsKK+WWmOaBryA+IHRvXC1nYXNwXC1mb3JcLWJyZWF0aDsKK+ajhOS4liA+IHRvXC1sZWF2ZVwtdGhpc1wtd29yZDsKK+aEm+eosSA+IHRlcm1cLW9mXC1lbmRlYXJtZW50Owor5bCI5ZOhID4gYXNzaXN0YW50XC1kaXJlY3RvcjsKK+mgk+i2syA+IHN0YW1wXC1cKG9uZScnc1wtZmVldFwpOwor54++5pyJID4gY3VycmVudGx5XC1leGlzdGluZzsKK+m8u+aokSA+IGJyaWRnZVwtb2ZcLXRoZVwtbm9zZTsKK+WPg+i0iiA+IGRpcGxvbWF0aWNcLW9mZmljZXI7CivkuKbnq4sgPiBleGlzdFwtc2lkZVwtYnlcLXNpZGU7Civosr/mmJMgPiBcKGNvbW1lcmNpYWxcKVwtdHJhZGU7CivphazphaIgPiB0b1wtZXhjaGFuZ2VcLXRvYXN0czsKK+a1qua2jCA+IFwoZWxlY3RyaWNhbFwpXC1zdXJnZTsKK+S9lOWFiCA+IHRvXC10YWtlXC1wcmVjZWRlbmNlOwor6IOM5YWJID4gYmVcLWluXC1hXC1wb29yXC1saWdodDsKK+a3seWknCA+IHZlcnlcLWxhdGVcLWF0XC1uaWdodDsKK+mcsumdoiA+IGFwcGVhclwtXChpblwtcHVibGljXCk7CivllYbli5kgPiBjb21tZXJjaWFsXC1hZmZhaXJzOwor54yc55aRID4gaGFyYm91clwtc3VzcGljaW9uczsKK+iytOWnkyA+IHdoYXRcLWlzXC15b3VyXC1uYW1lXD87CivnjJnnjbAgPiBtZWFuXC1hbmRcLWZlcm9jaW91czsKK+a2suWjkyA+IGh5ZHJhdWxpY1wtcHJlc3N1cmU7CivpvLvloZ4gPiBoYXZlXC1hXC1zdHVmZnlcLW5vc2U7Civpu57lv4MgPiBsaWdodFwtcmVmcmVzaG1lbnRzOwor5pyf5b6FID4gdG9cLWxvb2tcLWZvcndhcmRcLXRvOwor5rW35Z+fID4gdGVycml0b3JpYWxcLXdhdGVyczsKK+avlOippiA+IGhhdmVcLWFcLWNvbXBldGl0aW9uOwor5aSW6LOHID4gZm9yZWlnblwtaW52ZXN0bWVudDsKK+mbu+i3ryA+IFwoZWxlY3RyaWNcKVwtY2lyY3VpdDsKK+S4reWwhyA+IGxpZXV0ZW5hbnRcLWdlbmVyYWw7Civmlofol50gPiBsaXRlcmF0dXJlXC1hbmRcLWFydDsKK+eJiOeohSA+IHJveWFsdHlcLVwob25cLWJvb2tzXCk7Civmg4XloLEgPiBcKHNweVwpXC1pbnRlbGxpZ2VuY2U7Civnt6jpgaMgPiByZW9yZ2FuaXplXC1cKHRyb29wczsKK+azsOWxsSA+IHRhaXNoYW5cLVwobW91bnRhaW5cKTsKK+aCieWwvCA+IHN5ZG5leVwtXChhdXN0cmFsaWFcKTsKK+iWhOaDhSA+IGluY29uc3RhbnRcLWluXC1sb3ZlOwor5rCR55SoID4gXChmb3JcKVwtY2l2aWxpYW5cLXVzZTsKK+e3qOitryA+IHRyYW5zbGF0ZVwtYW5kXC1lZGl0Owor56aP5YipID4gXChtYXRlcmlhbFwpXC13ZWxmYXJlOwor5ZCM5a24ID4gXChmZWxsb3dcKVwtY2xhc3NtYXRlOwor5Lim5YiXID4gc3RhbmRcLXNpZGVcLWJ5XC1zaWRlOwor5LiN5ZKMID4gbm90XC1nZXRcLWFsb25nXC13ZWxsOwor5LiN5Y6tID4gbm90XC1taW5kXC1kb2luZ1wtc3RoOwor5Y+N5oSfID4gXChzdHJvbmdseVwpXC1kaXNsaWtlOwor6Yed5bCNID4gaW5cLWNvbm5lY3Rpb25cLXdpdGg7Civlj6blr4QgPiB0b1wtbWFpbFwtc2VwYXJhdGVseTsKK+iuiuW5uyA+IGNoYW5nZVwtaXJyZWd1bGFybHk7CivloLHpl5wgPiBkZWNsYXJlXC1hdFwtY3VzdG9tczsKK+e9suWQjSA+IHNpZ25cLVwoYVwtc2lnbmF0dXJlXCk7CivpgYropr0gPiB0b1wtZ29cLXNpZ2h0XC1zZWVpbmc7CivlpJbnlYwgPiB0aGVcLW91dHNpZGVcLXdvcmxkOwor6K6K5aSpID4gY2hhbmdlXC1vZlwtd2VhdGhlcjsKK+avlOa/lSA+IHNwZWNpZmljXC1odW1pZGl0eTsKK+W+t+aWhyA+IGdlcm1hblwtXChsYW5ndWFnZVwpOwor5Y2R5oCvID4gbWVhblwtYW5kXC1jb3dhcmRseTsKK+WFtemmrCA+IHRyb29wc1wtYW5kXC1ob3JzZXM7Civnoqnlo6sgPiBtYXN0ZXInJ3NcLVwoZGVncmVlXCk7Civnmb3pqqggPiBib25lc1wtb2ZcLXRoZVwtZGVhZDsKK+eFp+ebuCA+IHRha2VcLWFcLXBob3RvZ3JhcGg7Civnmb3po68gPiBwbGFpblwtY29va2VkXC1yaWNlOwor5pel5a2QID4gYVwtXChjYWxlbmRhclwpXC1kYXRlOwor5pWZ5p2QID4gdGVhY2hpbmdcLW1hdGVyaWFsOwor6YSw5ZyLID4gYm9yZGVyaW5nXC1jb3VudHJ5Owor5qmf6KO9ID4gbWFjaGluZVwtcHJvY2Vzc2VkOwor6ZW36YGUID4gZXh0ZW5kXC1hc1wtbG9uZ1wtYXM7CivljJblpp0gPiB0b1wtcHV0XC1vblwtbWFrZVwtdXA7Civpm6PmjbEgPiB0cnlpbmdcLFwtZGlmZmljdWx0Owor5aSn5bGAID4gZ2VuZXJhbFwtc2l0dWF0aW9uOwor5pWP5oSfID4gc2Vuc2l0aXZlXC1cKGlzc3VlXCk7CivntKHnuZQgPiBzcGlubmluZ1wtXCh0aHJlYWRcKTsKK+Wkp+WkmiA+IGZvclwtdGhlXC1tb3N0XC1wYXJ0Owor5b6S5YiRID4gXChwcmlzb25cKVwtc2VudGVuY2U7CivmlK/mjIEgPiB0b1wtYmVcLWluXC1mYXZvclwtb2Y7CivntJvntJsgPiBvbmVcLWFmdGVyXC1hbm90aGVyOwor5aSW5ZyLID4gZm9yZWlnblwtXChjb3VudHJ5XCk7CivmjZXpo58gPiBjYXRjaFwtYW5kXC1mZWVkXC1vbjsKK+i8lOiqsiA+IHN1YnNpZGlhcnlcLWNvdXJzZTsKK+WFq+iCoSA+IGVpZ2h0XC1cLXBhcnRcLWVzc2F5Owor5bmz5rCRID4gXChvcmRpbmFyeVwpXC1wZW9wbGU7Civpg4rljYAgPiBzdWJ1cmJhblwtZGlzdHJpY3Q7CivlhanogIUgPiBib3RoXC1zaWRlc1x8dGhpbmdzOwor6YOo5Lu9ID4gcGFydFwtXChvZlwtYVwtd2hvbGVcKTsKK+eZveiCiSA+IHBsYWluXC1ib2lsZWRcLXBvcms7CivpgorloZ4gPiBmcm9udGllclwtZm9ydHJlc3M7Civnn7PliLsgPiBzdG9uZVwtaW5zY3JpcHRpb247Civnt4rlr4YgPiBpbnNlcGFyYWJseVwtY2xvc2U7CivpgorljaEgPiBib3JkZXJcLWNoZWNrcG9pbnQ7Civnt6nlkowgPiB0b1wtZWFzZVwtXCh0ZW5zaW9uXCk7Civnt6jljbAgPiBjb21waWxlXC1hbmRcLXByaW50Owor5Yex5peLID4gcmV0dXJuXC10cml1bXBoYW50Owor54CJ6IKaID4gdG9cLWhhdmVcLWRpYXJyaG9lYTsKK+eZveecvCA+IHN1cGVyY2lsaW91c1wtbG9vazsKK+ecvOWwliA+IHRvXC1oYXZlXC1nb29kXC1leWVzOwor5aCx5bizID4gcmVuZGVyXC1hblwtYWNjb3VudDsKK+ijnOeZvCA+IHN1cHBseVwtYWdhaW5cLVwoc3RoOwor5oqK6aCtID4gbGFib3VyXC1jb250cmFjdG9yOwor5bGP6ZqcID4gcHJvdGVjdGl2ZVwtc2NyZWVuOwor54Gr5pifID4gbWFyc1wtXCh0aGVcLXBsYW5ldFwpOwor6aiO6aasID4gcmlkZVwtb25cLWhvcnNlYmFjazsKK+aKhOmMhCA+IHRvXC1tYWtlXC1hXC1jb3B5XC1vZjsKK+aPreabiSA+IGFubm91bmNlXC1wdWJsaWNseTsKK+eXheeoiyA+IGNvdXJzZVwtb2ZcLWRpc2Vhc2U7CivnlLPoqLQgPiB0b1wtYXBwZWFsXC1cKHRvXC1zYlwpOwor5L6b6ZyAID4gc3VwcGx5XC1hbmRcLWRlbWFuZDsKK+WcsOauvCA+IHRoZVwtZWFydGgnJ3NcLWNydXN0Owor6ZaJ5bmVID4gdGhlXC1jdXJ0YWluXC1mYWxsczsKK+ebm+WQjSA+IGZhbW91c1wtcmVwdXRhdGlvbjsKK+W3peWnlCA+IHdvcmtpbmdcLWNvbW1pdHRlZTsKK+ethuiqvyA+IFwob2ZcLXdyaXRpbmdcKVwtdG9uZTsKK+WxleimvSA+IHRvXC1wdXRcLW9uXC1kaXNwbGF5Owor55m95biDID4gcGxhaW5cLXdoaXRlXC1jbG90aDsKK+W3peWcsCA+IGNvbnN0cnVjdGlvblwtc2l0ZTsKK+ajleiJsiA+IGJyb3duXC1cKHRoZVwtY29sb3JcKTsKK+evh+ebriA+IHRhYmxlXC1vZlwtY29udGVudHM7CivkvY/pmaIgPiB0b1wtYmVcLWluXC1ob3NwaXRhbDsKK+aQj+WLlSA+IGJlYXRcLXJoeXRobWljYWxseTsKK+aOpeW+hSA+IHJlY2VpdmVcLVwoYVwtdmlzaXRcKTsKK+WFteWKmyA+IG1pbGl0YXJ5XC1zdHJlbmd0aDsKK+WFrOWLmSA+IG9mZmljaWFsXC1idXNpbmVzczsKK+aLmOeVmSA+IGRldGFpblwtXChwcmlzb25lclwpOwor5oyo5qyhID4gb25lXC1hZnRlclwtYW5vdGhlcjsKK+WFrOS9iCA+IHB1YmxpY2x5XC1hbm5vdW5jZTsKK+WFp+S6giA+IGludGVybmFsXC1kaXNvcmRlcjsKK+ihm+aYnyA+IFwoc3BhY2VcKVwtc2F0ZWxsaXRlOwor5ouN54WnID4gdG9cLXRha2VcLWFcLXBpY3R1cmU7Civnl4XmlYUgPiBkaWVcLW9mXC1hblwtaWxsbmVzczsKK+ihneaTiiA+IFwoYmVcLXVuZGVyXClcLWF0dGFjazsKK+mVt+S5hSA+IFwoZm9yXC1hXClcLWxvbmdcLXRpbWU7CivpjITpn7MgPiBcKHNvdW5kXClcLXJlY29yZGluZzsKK+S/neelkCA+IGJsZXNzXC1hbmRcLXByb3RlY3Q7CivmjbfloLEgPiByZXBvcnRcLW9mXC1zdWNjZXNzOwor5ZyY5ZyTID4gdG9cLWhhdmVcLWFcLXJldW5pb247Civmjojli5sgPiB0b1wtYXdhcmRcLWFuXC1ob25vcjsKK+WTgOmztCA+IGFcLXBsYWludGl2ZVwtd2hpbmU7Civmh4LooYwgPiB0b1wta25vd1wtdGhlXC1yb3BlczsKK+i7jeWNgCA+IGFcLW1pbGl0YXJ5XC1yZWdpb247Civkv53niL4gPiBcKGFcLXBlcnNvbmFsXC1uYW1lXCk7CivosqHplqUgPiBmaW5hbmNpYWxcLW1hZ25hdGU7Civmi43mlJ0gPiBcKHNob290XC1hXClcLXBpY3R1cmU7CivogIPpqZcgPiBcKHB1dFwtdG9cLXRoZVwpXC10ZXN0Owor5L+d5rqrID4gaGVhdFwtcHJlc2VydmF0aW9uOwor5bGP5rCjID4gaG9sZFwtb25lJydzXC1icmVhdGg7CivnqJ/os6YgPiBuYXR1cmFsXC1lbmRvd21lbnQ7Civnl4XljbEgPiBiZVwtY3JpdGljYWxseVwtaWxsOwor5L2155m8ID4gYmVcLWNvbXBsaWNhdGVkXC1ieTsKK+iyoeiyvyA+IGZpbmFuY2VcLWFuZFwtdHJhZGU7CivmvKLlrZcgPiBjaGluZXNlXC1jaGFyYWN0ZXI7CivlronnqakgPiBzbW9vdGhcLWFuZFwtc3RlYWR5Owor5bCI5qWtID4gc3BlY2lhbGl6ZWRcLWZpZWxkOwor5bGP5oGvID4gaG9sZFwtb25lJydzXC1icmVhdGg7CivotqjmmYIgPiB0b1wtZm9sbG93XC1mYXNoaW9uOwor5LuN6IiKID4gc3RpbGxcLVwocmVtYWluaW5nXCk7Civmi5flj6MgPiBoYXJkXC10b1wtcHJvbm91bmNlOwor5ZaY5rCjID4gdG9cLWJyZWF0aGVcLWRlZXBseTsKK+aLnOWAkiA+IHByb3N0cmF0ZVwtb25lc2VsZjsKK+aJjeaAnSA+IGltYWdpbmF0aXZlXC1wb3dlcjsKK+azoumfsyA+IGJvZWluZ1wtXChhaXJjcmFmdFwpOwor5L2c5qWtID4gc2Nob29sXC1hc3NpZ25tZW50Owor6byT6IieID4gaGVhcnRlbmluZ1wtXChuZXdzXCk7CivmoYjmg4UgPiBkZXRhaWxzXC1vZlwtYVwtY2FzZTsKK+iyoeelniA+IHRoZVwtZ29kXC1vZlwtd2VhbHRoOwor5bGV5Ye6ID4gdG9cLXB1dFwtb25cLWRpc3BsYXk7Civnj77ni4AgPiBjdXJyZW50XC1zaXR1YXRpb247CivlsI/loLEgPiB0YWJsb2lkXC1uZXdzcGFwZXI7CivmnJ3ogZYgPiBtYWtlXC1hXC1waWxncmltYWdlOwor5L+d5YGlID4gaGVhbHRoXC1wcm90ZWN0aW9uOwor5rer5rC0ID4gc2V4dWFsXC1zZWNyZXRpb25zOwor5bCL5ZGzID4gdG9cLXRoaW5rXC1zdGhcLW92ZXI7Civmnb/nhZkgPiBwbHVnXC1cKG9mXC10b2JhY2NvXCk7Civms6joppYgPiB3YXRjaFwtYXR0ZW50aXZlbHk7Civms5Xoqp4gPiBmcmVuY2hcLVwobGFuZ3VhZ2VcKTsKK+eNqOeriyA+IHRvXC1iZVwtaW5kZXBlbmRlbnQ7CivotbDlh7ogPiB0b1wtbW92ZVwtYXdheVwtZnJvbTsKK+iBsuaPtCA+IHN1cHBvcnRcLVwoYVwtY2F1c2VcKTsKK+ekpuiXjyA+IG1pbmVyYWxcLXJlc291cmNlczsKK+Wvq+S/oSA+IHRvXC13cml0ZVwtYVwtbGV0dGVyOwor5LiJ57atID4gdGhyZWVcLWRpbWVuc2lvbmFsOwor56m05bGFID4gdG9cLWxpdmVcLWluXC1hXC1jYXZlOwor54uA6KqeID4gYWR2ZXJiaWFsXC1hZGp1bmN0Owor6YWs6YeRID4gXChtb25ldGFyeVwpXC1yZXdhcmQ7CivosqHmlL8gPiBmaW5hbmNlc1wtXChwdWJsaWNcKTsKK+WuieWNsSA+IHNhZmV0eVwtYW5kXC1kYW5nZXI7CivlkI3nqLEgPiBuYW1lXC1cKG9mXC1hXC10aGluZ1wpOwor54mp6LOqID4gXChwaHlzaWNhbFwpXC1tYXR0ZXI7CivlkIPnqb8gPiBmb29kXC1hbmRcLWNsb3RoaW5nOwor56m05L2NID4gYWN1cHVuY3R1cmVcLXBvaW50Owor5a245L2NID4gZWR1Y2F0aW9uYWxcLWxldmVsOwor5b636KqeID4gZ2VybWFuXC1cKGxhbmd1YWdlXCk7CivlkITnlYwgPiBhbGxcLXdhbGtzXC1vZlwtbGlmZTsKK+iAs+WtkCA+IGhhbmRsZVwtXChvblwtYVwtcG90XCk7CivmgJ3ntq0gPiBcKGxpbmVcLW9mXClcLXRob3VnaHQ7Civku6XlhY0gPiBpblwtb3JkZXJcLXRvXC1hdm9pZDsKK+S6i+WvpiA+IFwodGhlXClcLWZhY3RcLVwodGhhdFwpOwor5pys5oCnID4gbmF0dXJhbFwtaW5zdGluY3RzOwor6Zuj6aGMID4gZGlmZmljdWx0XC1wcm9ibGVtOwor6K6K55u4ID4gaW5cLWRpc2d1aXNlZFwtZm9ybTsKK+iyoeWLmSA+IGZpbmFuY2lhbFwtYWZmYWlyczsKK+acjeW9uSA+IHNlcnZlXC1pblwtdGhlXC1hcm15Owor6Yar55mCID4gbWVkaWNhbFwtdHJlYXRtZW50Owor5pWs6YeNID4gdG9cLXJlc3BlY3RcLWRlZXBseTsKK+aal+aysyA+IHVuZGVyZ3JvdW5kXC1yaXZlcjsKK+mguOakjiA+IGNlcnZpY2FsXC12ZXJ0aWJyYTsKK+e2sum7niA+IG5vZGVcLWluXC1hXC1uZXR3b3JrOwor6buR5a6iID4gaGFja2VyXC1cKGNvbXB1dGVyXCk7Civnupboiq8gPiBjb3JlXC1cKG9mXC1hXC1maWJlclwpOwor57eo6ZqKID4gZm9ybVwtaW50b1wtY29sdW1uczsKK+aVl+mAgCA+IHJldHJlYXRcLWluXC1kZWZlYXQ7CivmnKzlnIsgPiBvbmUnJ3NcLW93blwtY291bnRyeTsKK+azleaWhyA+IGZyZW5jaFwtXChsYW5ndWFnZVwpOwor6Kqe6KiAID4gXChzcG9rZW5cKVwtbGFuZ3VhZ2U7CivkuI3lsZEgPiBkaXNkYWluXC10b1wtZG9cLXN0aDsKK+WNiuelqCA+IGhhbGZcLXByaWNlXC10aWNrZXQ7CivnjajllLEgPiBcKGluXC1zaW5naW5nXClcLXNvbG87Civnp4HkurogPiBwcml2YXRlXC1cKGNpdGl6ZW5cKTsKK+eNsuWHhiA+IG9idGFpblwtcGVybWlzc2lvbjsKK+asiumRsCA+IGtleXNcLW9mXC1hdXRob3JpdHk7CivniIbnrqEgPiBjYXJ0cmlkZ2VcLWlnbml0ZXI7CivnpKbluoogPiBcKG1pbmVyYWxcKVwtZGVwb3NpdDsKK+atouihgCA+IHN0YW5jaFwtXChibGVlZGluZ1wpOwor5ZCN5a2XID4gXChhXC1wZXJzb24nJ3NcKVwtbmFtZTsKK+WPsOW5oyA+IG5ld1wtdGFpd2FuXC1kb2xsYXI7Civpoaflj4ogPiB0YWtlXC1pbnRvXC1hY2NvdW50Owor5LiL5Y67ID4gZ29cLWRvd25cLVwoZGVzY2VuZFwpOwor5Yu756ixID4gd2VsbFwtcHJvcG9ydGlvbmVkOwor5LiN5YqbID4gbm90XC1kb1wtb25lJydzXC1iZXN0Owor6YGT6KydID4gdG9cLWV4cHJlc3NcLXRoYW5rczsKK+ehneeFmSA+IHNtb2tlXC1cKGZyb21cLWd1bnNcKTsKK+iXneS6uiA+IHBlcmZvcm1pbmdcLWFydGlzdDsKK+aVmee3tCA+IFwoYXRobGV0ZScnc1wpXC1jb2FjaDsKK+WHuumZoiA+IHRvXC1sZWF2ZVwtaG9zcGl0YWw7CivpmL/ph4wgPiBhbGlcLVwocHJvcGVyXC1uYW1lXCk7CivpmYTov5EgPiBcKGluXC10aGVcKVwtdmljaW5pdHk7CivniYzmqJMgPiBkZWNvcmF0ZWRcLWFyY2h3YXk7CivniLbmr40gPiBmYXRoZXJcLWFuZFwtbW90aGVyOwor56Oo5a2QID4gbWlsbFwsXC1taWxsc3RvbmVzOwor5ZCO5Lq6ID4gbGF0ZXJcLWdlbmVyYXRpb247CivorZjlrZcgPiB0b1wtbGVhcm5cLXRvXC1yZWFkOwor5b+D5b6XID4ga25vd2xlZGdlXC1nYWluZWQ7CivmsYLlqZogPiBwcm9wb3NlXC1tYXJyaWFnZTsKK+e3qOebriA+IG1ha2VcLWFcLWNhdGFsb2d1ZTsKK+mbu+a1gSA+IGVsZWN0cmljXC1jdXJyZW50Owor5Z+O6Y6uID4gY2l0aWVzXC1hbmRcLXRvd25zOwor5aeU5ZOhID4gY29tbWl0dGVlXC1tZW1iZXI7Civlo4HnlasgPiBtdXJhbFwtXChwYWludGluZ1wpOwor5aeT5ZCNID4gbmFtZVwtYW5kXC1zdXJuYW1lOwor5piv5ZCmID4gd2hldGhlclwtXChvclwtbm90XCk7CivnuL3mqZ8gPiBjZW50cmFsXC1leGNoYW5nZTsKK+mBjueoiyA+IGNvdXJzZVwtb2ZcLWV2ZW50czsKK+eGiueMtCA+IGFzc2FtZXNlXC1tYWNhcXVlOwor5aSn5pyDID4gZ2VuZXJhbFwtYXNzZW1ibHk7Civln7roqr8gPiBcKHNwZWVjaFwpXC1rZXlub3RlOwor6Kqk5pyDID4gdG9cLW1pc3VuZGVyc3RhbmQ7CivoqILnpaggPiB0b1wtaXNzdWVcLXRpY2tldHM7Civlo73moYMgPiBiaXJ0aGRheVwtcGVhY2hlczsKK+W3tOixhiA+IFwocHVyZ2luZ1wpXC1jcm90b247Civlo73mmJ8gPiBnb2RcLW9mXC1sb25nZXZpdHk7CivlhaXov7cgPiB0b1wtYmVcLWZhc2NpbmF0ZWQ7CivmmI7ku6MgPiB0aGVcLW1pbmdcLWR5bmFzdHk7CivpgIDnpaggPiBib3VuY2VcLVwoYVwtY2hlY2tcKTsKK+e5g+WtkCA+IGVtYnJvaWRlcnlcLWZyYW1lOwor5b6X5Ye6ID4gb2J0YWluXC1cKHJlc3VsdHNcKTsKK+WFjeiyuyA+IGZyZWVcLVwob2ZcLWNoYXJnZVwpOwor6YGy5pquID4gcGFzdFwtb25lJydzXC1wcmltZTsKK+e2suapiyA+IFwobmV0d29ya1wpXC1icmlkZ2U7CivliJfngrogPiBiZVwtY2xhc3NpZmllZFwtYXM7CivlnIvpmLIgPiBuYXRpb25hbFwtZGVmZW5jZTsKK+aVheWxhSA+IGZvcm1lclwtcmVzaWRlbmNlOwor5Ym95oKNID4gc3dpZnRcLWFuZFwtZmllcmNlOwor5q2m5a6YID4gbWlsaXRhcnlcLWF0dGFjaGU7CivpgZXmhrIgPiB1bmNvbnN0aXR1dGlvbmFsOwor5Yue5YuVID4gXChwaHlzaWNhbFwpXC1sYWJvcjsKK+eCuueUnyA+IHRvXC1tYWtlXC1hXC1saXZpbmc7CivlhaznvoogPiByYW1cLVwobWFsZVwtc2hlZXBcKTsKK+iIuemaiiA+IGZsZWV0XC1cKG9mXC1zaGlwc1wpOwor5buj5beeID4gZ3Vhbmd6aG91XC1cKGNpdHlcKTsKK+mbu+WKmyA+IGVsZWN0cmljYWxcLXBvd2VyOwor6KOc6KGAID4gZW5yaWNoXC10aGVcLWJsb29kOwor54eI5YWJID4gXChzdGFnZVwpXC1saWdodGluZzsKK+mAj+aUryA+IFwoYmFua1wpXC1vdmVyZHJhZnQ7Civov7Tml4sgPiBtYW5ldXZlcmluZ1wtcm9vbTsKK+eZveejtyA+IHdoaXRlXC1waG9zcGhvcnVzOwor5aCx5o23ID4gcmVwb3J0XC1hXC1zdWNjZXNzOwor6Kiq5ZWPID4gcGF5XC1hXC12aXNpdFwtXCh0b1wpOwor6Zmk5aSVID4gXChuZXdcLXllYXInJ3NcKVwtZXZlOwor6L6m5qGIID4gdG9cLWhhbmRsZVwtYVwtY2FzZTsKK+ioguWWriA+IFwocHVyY2hhc2VcKVwtb3JkZXI7Civoj6/lg5EgPiBvdmVyc2Vhc1wtY2hpbmVzZTsKK+a7kem8oCA+IG1vdXNlXC1cKGNvbXB1dGVyXCk7Civnl4Xoj4wgPiBoYXJtZnVsXC1iYWN0ZXJpYTsKK+mAsuS/riA+IGFkdmFuY2VkXC1zdHVkaWVzOwor6ZW35rGfID4gY2hhbmdqaWFuZ1wtcml2ZXI7CivnrYbpoK0gPiBhYmlsaXR5XC10b1wtd3JpdGU7Civlub7ljYMgPiBzZXZlcmFsXC10aG91c2FuZDsKK+WIsOS6hiA+IGluXC1cKGFcLXBhc3RcLXRpbWVcKTsKK+WgseWQjSA+IGVudGVyXC1vbmUnJ3NcLW5hbWU7Civlh7rlkI0gPiB3ZWxsXC1rbm93blwtXChmb3JcKTsKK+aOiOeNjiA+IHRvXC1hd2FyZFwtYVwtcHJpemU7Civpq5TogrIgPiBwaHlzaWNhbFwtY3VsdHVyZTsKK+a8ouiqniA+IGNoaW5lc2VcLWxhbmd1YWdlOwor5YW15b25ID4gbWlsaXRhcnlcLXNlcnZpY2U7CivnlaLogpYgPiByZXNlbWJsZVwtY2xvc2VseTsKK+W0qea8jyA+IHV0ZXJpbmVcLWJsZWVkaW5nOwor5YaX5ZOhID4gZXhjZXNzXC1wZXJzb25uZWw7CivlhbXlo6sgPiBvcmRpbmFyeVwtc29sZGllcjsKK+imgeS6uiA+IGltcG9ydGFudFwtcGVyc29uOwor5o6h5pOHID4gc2VsZWN0XC1hbmRcLWFkb3B0Owor6Lip57eaID4gc3RlcFwtb25cLXRoZVwtbGluZTsKK+eZseWtkCA+IHBhcmFseXplZFwtcGVyc29uOwor5beo5YygID4gbWFzdGVyXC1jcmFmdHNtYW47CivplrHlhbUgPiB0b1wtcmV2aWV3XC10cm9vcHM7CivlgrLmsKMgPiBhaXJcLW9mXC1hcnJvZ2FuY2U7Civkvr/ooaMgPiBjaXZpbGlhblwtY2xvdGhlczsKK+Wwi+ioqiA+IHRvXC1pbnF1aXJlXC1hZnRlcjsKK+WvtuiynSA+IHRyZWFzdXJlZFwtb2JqZWN0Owor6Zax5LiWID4gdG9cLXNlZVwtdGhlXC13b3JsZDsKK+ewoeaYjiA+IHNpbXBsZVwtYW5kXC1jbGVhcjsKK+WuiemgkyA+IGZpbmRcLWFcLXBsYWNlXC1mb3I7CivlhazlhawgPiBodXNiYW5kJydzXC1mYXRoZXI7Civkvovoqp4gPiBleGFtcGxlXC1zZW50YW5jZTsKK+mWg+S6riA+IGJyaWxsaWFudFwsXC1zaGlueTsKK+Wdh+WLoiA+IGJhbGFuY2VcLW9mXC1wb3dlcjsKK+S/neeVmSA+IGNvbnRpbnVlXC10b1wtaGF2ZTsKK+S6uumgrSA+IG51bWJlclwtb2ZcLXBlb3BsZTsKK+aOpeS6uiA+IHRvXC1tZWV0XC1hXC1wZXJzb247CivlnIvlipsgPiBhXC1uYXRpb24nJ3NcLXBvd2VyOwor5omu5ryUID4gcGxheVwtdGhlXC1wYXJ0XC1vZjsKK+eXheWboCA+IGNhdXNlXC1vZlwtZGlzZWFzZTsKK+i7jeS6iyA+IG1pbGl0YXJ5XC1hZmZhaXJzOwor5L2U57eaID4gYnVzeVwtXCh0ZWxlcGhvbmVcKTsKK+WxseadkSA+IG1vdW50YWluXC12aWxsYWdlOwor5bGs5pa8ID4gYmVcLWNsYXNzaWZpZWRcLWFzOwor5ouQ5b2OID4gdG9cLXR1cm5cLWFcLWNvcm5lcjsKK+eXheWOnyA+IGNhdXNlXC1vZlwtZGlzZWFzZTsKK+iBmuiuiiA+IFwobnVjbGVhclwpXC1mdXNpb247CivooajlhoogPiBzdGF0aXN0aWNhbFwtZm9ybTsKK+WvqeeQhiA+IHRvXC1oZWFyXC1cKGFcLWNhc2VcKTsKK+aKhOacrCA+IGhhbmR3cml0dGVuXC1jb3B5Owor5a6J572uID4gZmluZFwtYVwtcGxhY2VcLWZvcjsKK+iIlOWQriA+IHRvXC1saWNrXC1hbmRcLXN1Y2s7Civkvr/mqYsgPiB0ZW1wb3JhcnlcLWJyaWRnZTsKK+ethuaIsCA+IHdyaXR0ZW5cLXBvbGVtaWNzOwor5L6/5pyNID4gZXZlcnlkYXlcLWNsb3RoZXM7CivmhJ/orJ0gPiBcKGV4cHJlc3NcKVwtdGhhbmtzOwor5LiL6aasID4gZGlzbW91bnRcLWFcLWhvcnNlOwor5a6J55ygID4gc2xlZXBcLXBlYWNlZnVsbHk7CivlsaTlsaQgPiBsYXllclwtdXBvblwtbGF5ZXI7CivnrYbluL0gPiB0aGVcLWNhcFwtb2ZcLWFcLXBlbjsKK+iytue+qSA+IGRlcm9nYXRvcnlcLXNlbnNlOwor5L2c5rOVID4gY291cnNlXC1vZlwtYWN0aW9uOwor5ryU5ZOhID4gYWN0b3JcLW9yXC1hY3RyZXNzOwor6ZGS5YilID4gdG9cLWRpZmZlcmVudGlhdGU7Civkv53lr4YgPiBtYWludGFpblwtc2VjcmVjeTsKK+ethuWllyA+IHRoZVwtY2FwXC1vZlwtYVwtcGVuOwor5YCf5YqpID4gdG9cLWdldFwtaGVscFwtZnJvbTsKK+eUmOWcsCA+IFwobWFoYXRtYVwpXC1nYW5kaGk7Civms6jph40gPiBwYXlcLWF0dGVudGlvblwtdG87Civmh7jmjpsgPiBcKGNhclwpXC1zdXNwZW5zaW9uOwor5LiN6KydID4gZG9uJyd0XC1tZW50aW9uXC1pdDsKK+acrOe+qSA+IG9yaWdpbmFsXC1tZWFuaW5nOwor5Ly05pifID4gY29tcGFuaW9uXC1cKHN0YXJcKTsKK+S/neWFqCA+IHNhdmVcLWZyb21cLWRhbWFnZTsKK+aKhOS7tiA+IGR1cGxpY2F0ZVwtXChjb3B5XCk7CivnvbfoqrIgPiBzdHVkZW50JydzXC1zdHJpa2U7Civph43ph40gPiBsYXllclwtdXBvblwtbGF5ZXI7Civmh4nmiLAgPiBmYWNlXC1hXC1jaGFsbGVuZ2U7CivmoLjlqIEgPiBudWNsZWFyXC1zdHJlbmd0aDsKK+iZnOeNsiA+IGNhcHR1cmVcLVwocGVvcGxlXCk7CivmnKznpaggPiBjYXNoaWVyJydzXC1jaGVxdWU7Civkvovlj6UgPiBleGFtcGxlXC1zZW50YW5jZTsKK+WuieW+vSA+IGFuaHVpXC1cKHByb3ZpbmNlXCk7Civok5bpursgPiBjYXN0b3JcLW9pbFwtcGxhbnQ7Civnq5nlj7AgPiByYWlsd2F5XC1wbGF0Zm9ybTsKK+eQhuacgyA+IHBheVwtYXR0ZW50aW9uXC10bzsKK+eNsuebiiA+IG9idGFpblwtYVwtYmVuZWZpdDsKK+S7iuaYlCA+IHBhc3RcLWFuZFwtcHJlc2VudDsKK+adv+aglyA+IGNoaW5lc2VcLWNoZXN0bnV0Owor5ZC4566hID4gXChkcmlua2luZ1wpXC1zdHJhdzsKK+S6uuaVuCA+IG51bWJlclwtb2ZcLXBlb3BsZTsKK+WutuWLmSA+IGhvdXNlaG9sZFwtZHV0aWVzOwor5rCR6ZaTID4gYW1vbmdcLXRoZVwtcGVvcGxlOwor5ama56auID4gd2VkZGluZ1wtY2VyZW1vbnk7CivorabooZsgPiBcKHNlY3VyaXR5XClcLWd1YXJkOwor5Lm+5p2vID4gdG9cLWRyaW5rXC1hXC10b2FzdDsKK+eMv+eMtCA+IGFwZXNcLWFuZFwtbW9ua2V5czsKK+S4pua/gCA+IHNodW50XC1leGNpdGF0aW9uOwor6YeP57axID4gZGltZW5zaW9uXC1cKHVuaXRcKTsKK+izquWVjyA+IFwoYXNrXC1hXClcLXF1ZXN0aW9uOwor6JKQ6ZuGID4gdG9cLWdhdGhlclwtXChkYXRhXCk7CivmmpHnmJ8gPiB0cm9waWNhbFwtZGlzZWFzZTsKK+WNmuimvSA+IHJlYWRcLWV4dGVuc2l2ZWx5Owor5rex5YWlID4gcGVuZXRyYXRlXC1kZWVwbHk7CivkuLnmoYIgPiBvcmFuZ2VcLW9zbWFudGh1czsKK+adv+WjgSA+IHdvb2RlblwtcGFydGl0aW9uOwor5p+Q5Lq6ID4gYVwtY2VydGFpblwtcGVyc29uOwor5pyI5puGID4gbW9udGhseVwtY2FsZW5kYXI7Civmsrvnl4UgPiB0cmVhdFwtYW5cLWlsbG5lc3M7CivljYHoqqEgPiB0ZW5cLWNvbW1hbmRtZW50czsKK+WklumVtyA+IGZvcmVpZ25cLW1pbmlzdGVyOwor6YWN6JelID4gZGlzcGVuc2VcLVwoZHJ1Z3NcKTsKK+Wtl+S4siA+IGNoYXJhY3Rlclwtc3RyaW5nOwor5Lit5paHID4gY2hpbmVzZVwtbGFuZ3VhZ2U7CivlpKfpgbggPiBnZW5lcmFsXC1lbGVjdGlvbjsKK+WUkOS7oyA+IHRoZVwtdGFuZ1wtZHluYXN0eTsKK+aAp+eXhSA+IHZlbmVyZWFsXC1kaXNlYXNlOwor5ZCb5qyKID4gbW9uYXJjaGlhbFwtcG93ZXI7Civol4/mlocgPiB0aWJldGFuXC1sYW5ndWFnZTsKK+iugOeJqSA+IHJlYWRpbmdcLW1hdGVyaWFsOwor6YKK6ZiyID4gZnJvbnRpZXJcLWRlZmVuY2U7CivlkJHmnbEgPiB0b3dhcmRzXC10aGVcLWVhc3Q7Civpm4bpjKYgPiBiZXN0XC1vZlwtdGhlXC1iZXN0Owor57235pWZID4gdGVhY2hlcicnc1wtc3RyaWtlOwor5aSW6KqeID4gZm9yZWlnblwtbGFuZ3VhZ2U7CivoqrLooaggPiBzY2hvb2xcLXRpbWV0YWJsZTsKK+iqpOinoyA+IG1pc3VuZGVyc3RhbmRpbmc7CivlkIzmmYIgPiBhdFwtdGhlXC1zYW1lXC10aW1lOwor5LiN5b+ZID4gdGhlcmUnJ3NcLW5vXC1odXJyeTsKK+mbhumDtSA+IHN0YW1wXC1jb2xsZWN0aW5nOwor5bug6ZW3ID4gZmFjdG9yeVwtZGlyZWN0b3I7Civororms5UgPiBwb2xpdGljYWxcLXJlZm9ybTsKK+azouaKmCA+IHR3aXN0c1wtYW5kXC10dXJuczsKK+e+pOWztiA+IGdyb3VwXC1vZlwtaXNsYW5kczsKK+eKr+azlSA+IHRvXC1icmVha1wtdGhlXC1sYXc7CivkuI3lsJEgPiBub3RcLVwoanVzdFwpXC1hXC1mZXc7CivlubTpvaEgPiBcKGFcLXBlcnNvbicnc1wpXC1hZ2U7Civmr5Tnv7wgPiBmbHlcLXdpbmdcLXRvXC13aW5nOwor56We5aWHID4gbWFnaWNhbFwtbXlzdGljYWw7CivnpoHlk4EgPiBjb250cmFiYW5kXC1nb29kczsKK+acgOWFiCA+IFwodGhlXClcLXZlcnlcLWZpcnN0Owor5amG5a62ID4gaHVzYmFuZCcnc1wtZmFtaWx5Owor5piO5reoID4gYnJpZ2h0XC1hbmRcLWNsZWFuOwor6YeN5oW2ID4gY2hvbmdxaW5nXC1cKGNpdHlcKTsKK+WphuWphiA+IGh1c2JhbmQnJ3NcLW1vdGhlcjsKK+WQg+WujCA+IHRvXC1maW5pc2hcLWVhdGluZzsKK+mAvOi/kSA+IHByZXNzXC1vblwtdG93YXJkczsKK+WgsemkqCA+IG5ld3NwYXBlclwtb2ZmaWNlOwor6Zu757qcID4gXChlbGVjdHJpY1wpXC1jYWJsZTsKK+eLgOaFiyA+IHN0YXRlXC1vZlwtYWZmYWlyczsKK+S4reS7iyA+IGFnZW50XC1cKGNvbXB1dGVyXCk7CivkuI3lhYkgPiBub3RcLXRoZVwtb25seVwtb25lOwor5pqR5aSpID4gaG90XC1cKHN1bW1lclwpXC1kYXk7Civoj6/oqp4gPiBjaGluZXNlXC1sYW5ndWFnZTsKK+S4jeWDhSA+IG5vdFwtdGhlXC1vbmx5XC1vbmU7Civlj43lsI0gPiB0b1wtZmlnaHRcLWFnYWluc3Q7CivkuI3kuYUgPiBub3RcLWxvbmdcLVwoYWZ0ZXJcKTsKK+WkqeeItiA+IGhlYXZlbmx5XC1mYXRoZXI7CivnibnlvrUgPiBjaGFyYWN0ZXJpc3RpY3M7CivmmpHlgYcgPiBzdW1tZXJcLXZhY2F0aW9uOwor5pO66ISrID4gYnJlYWtcLWF3YXlcLWZyb207CivljYrmlbggPiBoYWxmXC10aGVcLW51bWJlcjsKK+WGsOmcnCA+IG1vcmFsXC1pbnRlZ3JpdHk7Civli7vmupwgPiBldmVuXC1hbmRcLXNtb290aDsKK+WOn+WnlCA+IHRoZVwtd2hvbGVcLXN0b3J5Owor54m55a+rID4gZmVhdHVyZVwtYXJ0aWNsZTsKK+aYpeWkqSA+IHNwcmluZ1wtXChzZWFzb25cKTsKK+atoueXmyA+IHRvXC1yZWxpZXZlXC1wYWluOwor5Y+b5LqCID4gYXJtZWRcLXJlYmVsbGlvbjsKK+aWh+aqlCA+IFwoY29tcHV0ZXJcKVwtZmlsZTsKK+e3rOeUuCA+IG15YW5tYXJcLVwoYnVybWFcKTsKK+WkseacmyA+IGJlXC1kaXNhcHBvaW50ZWQ7CivntrLnq5kgPiBuZXR3b3JrXC1zdGF0aW9uOwor6ZaL6ZaAID4gb3BlblwtXCh0aGVcKVwtZG9vcjsKK+e2k+euoSA+IGJlXC1pblwtY2hhcmdlXC1vZjsKK+WNiuWkqSA+IGhhbGZcLW9mXC10aGVcLWRheTsKK+iqnuaXjyA+IGxhbmd1YWdlXC1icmFuY2g7CivlvoDlubQgPiBpblwtZm9ybWVyXC15ZWFyczsKK+aXpeWgsSA+IGRhaWx5XC1uZXdzcGFwZXI7CivlhYnpm7sgPiBvcHRvXC1lbGVjdHJpY2FsOwor6Kqe5pSvID4gbGFuZ3VhZ2VcLWJyYW5jaDsKK+eZvemQtSA+IGdhbHZhbml6ZWRcLWlyb247Civpm4XmrYwgPiBzb25nXC1vZlwtc29sb21vbjsKK+W9vOWyuCA+IHRoZVwtb3RoZXJcLXNob3JlOwor6YWN5ZCIID4gY29vcmRpbmF0ZVwtd2l0aDsKK+WgseezuyA+IG5ld3NwYXBlclwtY2hhaW47CivmqJnph48gPiBzY2FsYXJcLXF1YW50aXR5Owor5Y2X5YyXID4gbm9ydGhcLWFuZFwtc291dGg7Civmr5TlrrkgPiBzcGVjaWZpY1wtdm9sdW1lOwor55uI6JmnID4gcHJvZml0XC1hbmRcLWxvc3M7Civli7jlsI4gPiB0cnlcLXRvXC1jb252aW5jZTsKK+mZo+eHnyA+IGdyb3VwXC1vZlwtcGVvcGxlOwor5bm+55m+ID4gc2V2ZXJhbFwtaHVuZHJlZDsKK+Wkp+WvqyA+IGNhcGl0YWxcLWxldHRlcnM7CivpgY7mtLsgPiBsaXZlXC1vbmUnJ3NcLWxpZmU7CivniYzkvY0gPiBtZW1vcmlhbFwtdGFibGV0Owor5pep5LqbID4gXChhXC1iaXRcKVwtZWFybGllcjsKK+iqsuWkliA+IGV4dHJhY3VycmljdWxhcjsKK+aUtuaLviA+IHRvXC1wdXRcLWluXC1vcmRlcjsKK+e2suautSA+IG5ldHdvcmtcLXNlZ21lbnQ7CivlvJ/lvJ8gPiB5b3VuZ2VyXC1icm90aGVyOwor6YGy5pepID4gc29vbmVyXC1vclwtbGF0ZXI7Civnn67lsI8gPiBzaG9ydFwtYW5kXC1zbWFsbDsKK+avlOWDuSA+IHByaWNlXC1yZWxhdGlvbnM7CivmlrDku7sgPiBuZXdseVwtYXBwb2ludGVkOwor6Zy45L2UID4gZm9yY2libHlcLW9jY3VweTsKK+eXhemtlCA+IHNlcmlvdXNcLWlsbG5lc3M7CivluLjnlKggPiBpblwtY29tbW9uXC11c2FnZTsKK+WGsOejmiA+IGljZVwtY3JlYW1cLWJyaWNrOwor55m96I+cID4gY2hpbmVzZVwtY2FiYmFnZTsKK+W8t+WKoCA+IGltcG9zZVwtYnlcLWZvcmNlOwor5aSW5LqLID4gZm9yZWlnblwtYWZmYWlyczsKK+mCiuWcsCA+IGJvcmRlclwtZGlzdHJpY3Q7CivoiIzpnaIgPiBibGFkZVwtb2ZcLXRvbmd1ZTsKK+iRl+S9nCA+IGFcLWxpdGVyYXJ5XC13b3JrOwor55m957GzID4gXChwb2xpc2hlZFwpXC1yaWNlOwor54CV6IeoID4gb25cLXRoZVwtdmVyZ2VcLW9mOwor5pCN55uKID4gcHJvZml0XC1hbmRcLWxvc3M7Civpgbjllq4gPiBcKHNvZnR3YXJlXClcLW1lbnU7Civln7fms5UgPiBsYXdcLWVuZm9yY2VtZW50Owor6YCy5bGVID4gdG9cLW1ha2VcLWhlYWR3YXk7CivngrrmraQgPiBmb3JcLXRoaXNcLXJlYXNvbjsKK+W7oOWPsiA+IGZhY3RvcnlcLWhpc3Rvcnk7CivlhYnno4EgPiBtYWduZXRvXC1vcHRpY2FsOwor6ZqY5Y+jID4gXChtb3VudGFpblwpXC1wYXNzOwor57ay5Z2AID4gXChpbnRlcm5ldFwpXC1zaXRlOwor55Wr6Z2iID4gXChwaWN0dXJlXClcLWZyYW1lOwor6I+c5ZywID4gdmVnZXRhYmxlXC1maWVsZDsKK+eVnOmhniA+IGRvbWVzdGljXC1hbmltYWw7CivmirHppIogPiBhZG9wdFwtXChhXC1jaGlsZFwpOwor5Z+O5qiTID4gY2l0eVwtZ2F0ZVwtdG93ZXI7CivmjqHnqK4gPiBzZWVkXC1jb2xsZWN0aW5nOwor6Iqx55m9ID4gZ3JpenpsZWRcLVwoaGFpclwpOwor5bGN6auUID4gXChsaWZlbGVzc1wpXC1ib2R5Owor5ZyW57C9ID4gXChjb21wdXRlclwpXC1pY29uOwor5be05pybID4gbG9va1wtZm9yd2FyZFwtdG87CivlsaTpm7IgPiBzdHJhdHVzXC1cKGNsb3VkXCk7CivnsYznorwgPiBiYXJnYWluaW5nXC1jaGlwOwor6ZmN5YO5ID4gcHJpY2VcLXJlZHVjdGlvbjsKK+aomeaogSA+IFwobWFya2luZ1wpXC1zdGFrZTsKK+mWieacgyA+IGNsb3NlXC1hXC1tZWV0aW5nOwor57SU5bGsID4gcHVyZVwtYW5kXC1zaW1wbGU7CivlhYnmpq4gPiBob25vclwtYW5kXC1nbG9yeTsKK+i+puWtuCA+IHRvXC1ydW5cLWFcLXNjaG9vbDsKK+aomeadhiA+IHN1cnZleW9yJydzXC1wb2xlOwor5bmj5Yi2ID4gY3VycmVuY3lcLXN5c3RlbTsKK+WgseWIsCA+IHJlcG9ydFwtZm9yXC1kdXR5Owor5bm05Lu9ID4gcGFydGljdWxhclwteWVhcjsKK+WfuuWcsCA+IFwobWlsaXRhcnlcKVwtYmFzZTsKK+WFieaYjiA+IGJyaWdodFwtXChmdXR1cmVcKTsKK+S/nemHiyA+IHJlbGVhc2VcLW9uXC1iYWlsOwor5bCE6aC7ID4gcmFkaW9cLWZyZXF1ZW5jeTsKK+mspeeIrSA+IHN0cnVnZ2xlXC1cKHdpdGhcKTsKK+ijoeaguSA+IFwocm9uYWxkXClcLXJlYWdhbjsKK+aKl+ihoSA+IGNvbnRlbmRcLWFnYWluc3Q7CivntJrliKUgPiBcKG1pbGl0YXJ5XClcLXJhbms7CivnrYboqqQgPiBhXC1zbGlwXC1vZlwtYVwtcGVuOwor5YWr5a+2ID4gZWlnaHRcLXRyZWFzdXJlczsKK+eZvuW5tCA+IGFcLWh1bmRyZWRcLXllYXJzOwor5pGY5YCfID4gdG9cLWJvcnJvd1wtbW9uZXk7CivlnJbmqJkgPiBcKGNvbXB1dGVyXClcLWljb247CivplbflrpggPiBzZW5pb3JcLW9mZmljaWFsOwor5YWl5aKDID4gZW50ZXJcLWFcLWNvdW50cnk7CivlhZLlqrMgPiBkYXVnaHRlclwtaW5cLWxhdzsKK+iHgue0lyA+IFwoYmxhY2tcKVwtYXJtYmFuZDsKK+i7jeagoSA+IG1pbGl0YXJ5XC1zY2hvb2w7CivmioroiLUgPiBob2xkXC10aGVcLXJ1ZGRlcjsKK+iiq+aNlSA+IGJlXC11bmRlclwtYXJyZXN0Owor6aaW6ZW3ID4gc2VuaW9yXC1vZmZpY2lhbDsKK+eZvuWNgSA+IGFcLWh1bmRyZWRcLW9yXC1zbzsKK+WdkOWlvSA+IHRvXC1zaXRcLXByb3Blcmx5Owor55Wc55SfID4gZG9tZXN0aWNcLWFuaW1hbDsKK+mMpumbniA+IGdvbGRlblwtcGhlYXNhbnQ7Civoh6rmrrogPiB0b1wta2lsbFwtb25lc2VsZjsKK+mrmOaYgiA+IGluXC1oaWdoXC1zcGlyaXRzOwor56m/6YGOID4gdG9cLXBhc3NcLXRocm91Z2g7CivlgpnmiLAgPiBwcmVwYXJlXC1mb3JcLXdhcjsKK+Wuiei6qyA+IG1ha2VcLW9uZScnc1wtaG9tZTsKK+a4uOiqqiA+IGRydW1cLXVwXC1zdXBwb3J0Owor6Iez5pa8ID4gZ29cLXNvXC1mYXJcLWFzXC10bzsKK+eUn+eJqSA+IGxpdmluZ1wtY3JlYXR1cmU7CivmiLbnsY0gPiBjZW5zdXNcLXJlZ2lzdGVyOwor5qCh6IiNID4gc2Nob29sXC1idWlsZGluZzsKK+WWhOiJryA+IGdvb2RcLWFuZFwtaG9uZXN0Owor6LuN5YKZID4gXChtaWxpdGFyeVwpXC1hcm1zOwor6aaW6IWmID4gaGVhZFwtXChvZlwtc3RhdGVcKTsKK+WuieiRrCA+IGJ1cnlcLVwodGhlXC1kZWFkXCk7CivmpbXlipsgPiBkb1wtYXRcLWFsbFwtY29zdHM7Civot5HmraUgPiB0b1wtd2Fsa1wtcXVpY2tseTsKK+iytuipniA+IGRlcm9nYXRvcnlcLXRlcm07CivkupLpgKMgPiBpbnRlcmNvbm5lY3Rpb247CivmgrLps7QgPiB1dHRlclwtc2FkXC1jYWxsczsKK+a7v+aEjyA+IHRvXC1iZVwtc2F0aXNmaWVkOwor5rW36YGLID4gc2hpcHBpbmdcLWJ5XC1zZWE7CivnlZnlrbggPiB0b1wtc3R1ZHlcLWFicm9hZDsKK+S+v+ainSA+IFwoaW5mb3JtYWxcKVwtbm90ZTsKK+eUmuaIliA+IHNvXC1tdWNoXC1zb1wtdGhhdDsKK+WxseWzsCA+IFwobW91bnRhaW5cKVwtcGVhazsKK+a6q+aflCA+IGdlbnRsZVwtYW5kXC1zb2Z0Owor6auY5LitID4gaGlnaFwtYW5kXC1taWRkbGU7Civog4Pnl4UgPiBzdG9tYWNoXC10cm91YmxlOwor5ZCM6b2hID4gb2ZcLXRoZVwtc2FtZVwtYWdlOwor5ZC46Z+zID4gc291bmRcLWFic29yYmluZzsKK+m6u+mGiSA+IHRvXC1hbmFlc3RoZXRpemU7CivmipXlpZQgPiB0b1wtc2Vla1wtc2hlbHRlcjsKK+S+i+acgyA+IHJlZ3VsYXJcLW1lZXRpbmc7CivppIXogqUgPiBjYWtlXC1mZXJ0aWxpemVyOwor5pq06ZuoID4gdG9ycmVudGlhbFwtcmFpbjsKK+S+v+WutCA+IGluZm9ybWFsXC1kaW5uZXI7CivkuIrov7AgPiBhYm92ZVwtbWVudGlvbmVkOwor5a+m5b2IID4gbGl2ZVwtYW1tdW5pdGlvbjsKK+eUouWAvCA+IHZhbHVlXC1vZlwtb3V0cHV0Owor56Wd6LOAID4gdG9cLWNvbmdyYXR1bGF0ZTsKK+S7peeCuiA+IGNvbnNpZGVyXC1cKHRoYXRcKTsKK+aguOW9iCA+IG51Y2xlYXJcLXdhcmhlYWQ7CivkuIroqrIgPiB0b1wtYXR0ZW5kXC1jbGFzczsKK+espuWQiCA+IGluXC1rZWVwaW5nXC13aXRoOwor5oqA5YCGID4gdHJpY2t5XC1tYW5ldXZlcjsKK+azsOiqniA+IHRoYWlcLVwobGFuZ3VhZ2VcKTsKK+WvteWjniA+IHNwb2lsXC1cKGFcLWNoaWxkXCk7CivkuqTnlYwgPiBjb21tb25cLWJvdW5kYXJ5Owor5LiJ6JCsID4gdGhpcnR5XC10aG91c2FuZDsKK+iyqOa6kCA+IHN1cHBseVwtb2ZcLWdvb2RzOwor56qX5biYID4gd2luZG93XC1jdXJ0YWluczsKK+acn+elqCA+IHByb21pc3NvcnlcLW5vdGU7Civlj6Poqp4gPiBzcG9rZW5cLWxhbmd1YWdlOwor56eB54efID4gcHJpdmF0ZWx5XC1vd25lZDsKK+WvkuWBhyA+IHdpbnRlclwtdmFjYXRpb247Civlk4DmrYwgPiBhXC1tb3VybmZ1bFwtc29uZzsKK+eJvemAoyA+IFwoYmVcKVwtaW1wbGljYXRlZDsKK+aAp+ihjCA+IHNleHVhbFwtYWN0aXZpdHk7Civlrbjlo6sgPiBiYWNoZWxvclwtZGVncmVlOwor6LKg5pOUID4gXChiZWFyXC1hXClcLWJ1cmRlbjsKK+S4gOenmCA+IGZpcnN0XC1zZWNyZXRhcnk7Civol6Xnk7YgPiBtZWRpY2luZVwtYm90dGxlOwor5oWa5oSnID4gXCh0b1wtYmVcKVwtYXNoYW1lZDsKK+S6uuaJjSA+IHRhbGVudGVkXC1wZXJzb247CivkuI3nlJggPiB1bnJlY29uY2lsZWRcLXRvOwor54+t5a2QID4gb3JnYW5pemVkXC1ncm91cDsKK+avj+malCA+IGF0XC1pbnRlcnZhbHNcLW9mOwor5oSb5oi0ID4gbG92ZVwtYW5kXC1lc3RlZW07CivmhJvmiIAgPiBiZVwtaW5cLWxvdmVcLXdpdGg7Civmna3lt54gPiBoYW5nemhvdVwtXChjaXR5XCk7CivllY/kuJYgPiB0b1wtYmVcLXB1Ymxpc2hlZDsKK+aCsuazoyA+IHdlZXBcLXdpdGhcLWdyaWVmOwor5rOV55CGID4gbGVnYWxcLXByaW5jaXBsZTsKK+enqeW6jyA+IG9yZGVyXC1cKG9yZGVybHlcKTsKK+aUv+m7qCA+IHBvbGl0aWNhbFwtcGFydHk7CivlkI3niYcgPiBcKGJ1c2luZXNzXClcLWNhcmQ7Civml4XosrsgPiB0cmF2ZWxcLWV4cGVuc2VzOwor6LKh5ZyYID4gZmluYW5jaWFsXC1ncm91cDsKK+aymeefsyA+IHNhbmRcLWFuZFwtc3RvbmVzOwor56aB5p6cID4gZm9yYmlkZGVuXC1mcnVpdDsKK+mDtemBniA+IHRvXC1zZW5kXC1ieVwtbWFpbDsKK+aekOWHuiA+IHRvXC1zZXBlcmF0ZVwtb3V0Owor5aWU6KWyID4gbG9uZ1wtcmFuZ2VcLXJhaWQ7Civmnb/liLcgPiBzY3J1YmJpbmdcLWJydXNoOwor5pyN5b6eID4gb2JleVwtXChhblwtb3JkZXJcKTsKK+aWveihjCA+IHRvXC1wdXRcLWluXC1wbGFjZTsKK+e9sOasviA+IFwoaW1wb3NlXC1hXClcLWZpbmU7Civpm4zpm4QgPiBtYWxlXC1hbmRcLWZlbWFsZTsKK+mCiumfsyA+IGxhdGVyYWxcLVwoc291bmRcKTsKK+avjeiqniA+IG5hdGl2ZVwtbGFuZ3VhZ2U7Civmr43opqogPiBtb3RoZXJcLVwoZm9ybWFsXCk7Civms7DmlocgPiB0aGFpXC1cKGxhbmd1YWdlXCk7Civno4Hnm6QgPiBcKGNvbXB1dGVyXClcLWRpc2s7CivlqrPlqaYgPiBkYXVnaHRlclwtaW5cLWxhdzsKK+ekpualrSA+IG1pbmluZ1wtaW5kdXN0cnk7CivmtYHlpLEgPiBiZVwtZHJhaW5lZFwtYXdheTsKK+W8lei1tyA+IHRvXC1naXZlXC1yaXNlXC10bzsKK/CjjrQgPiBzdHVtcFwtb2ZcLWFcLXRyZWU7CivorYnniakgPiBleGhpYml0XC1cKGxlZ2FsXCk7CivnuKvoo5wgPiBkYXJuXC1cKGNsb3RoaW5nXCk7Civnt6jpgbggPiBzZWxlY3RcLWFuZFwtZWRpdDsKK+S4iuWtuCA+IHRvXC1nb1wtdG9cLXNjaG9vbDsKK+mgu+W4tiA+IGZyZXF1ZW5jeVwtcmFuZ2U7Civluq3plbcgPiBwcmVzaWRpbmdcLWp1ZGdlOwor5pS/6KaLID4gcG9saXRpY2FsXC12aWV3czsKK+aCsuWYhiA+IHNpZ2hcLW1vdXJuZnVsbHk7CivpoLvlr6wgPiBmcmVxdWVuY3lcLXJhbmdlOwor5Y2K55SfID4gaGFsZlwtYVwtbGlmZXRpbWU7CivljZrniakgPiBuYXR1cmFsXC1zY2llbmNlOwor6YO156WoID4gXChwb3N0YWdlXClcLXN0YW1wOwor5oGw5aW9ID4gYXNcLWl0XC10dXJuc1wtb3V0Owor5rCj5rqrID4gYWlyXC10ZW1wZXJhdHVyZTsKK+efruiDliA+IHNob3J0XC1hbmRcLXN0b3V0Owor6Kqe57O7ID4gbGFuZ3VhZ2VcLXN5c3RlbTsKK+iuiuW9oiA+IGJlXC1vdXRcLW9mXC1zaGFwZTsKK+WNl+a1tyA+IHNvdXRoXC1jaGluYVwtc2VhOwor576O5YWDID4gYW1lcmljYW5cLWRvbGxhcjsKK+S4luS6uiA+IFwoY29tbW9uXClcLXBlb3BsZTsKK+WQjeWWriA+IGxpc3RcLVwob2ZcLW5hbWVzXCk7Civpm7vno4EgPiBlbGVjdHJvbWFnbmV0aWM7CivmsJHmrIogPiBjaXZpbFwtbGliZXJ0aWVzOwor5pOa6KqqID4gaXRcLWlzXC1zYWlkXC10aGF0Owor5Y6f5oCnID4gb3JpZ2luYWxcLW5hdHVyZTsKK+aVuOeZviA+IHNldmVyYWxcLWh1bmRyZWQ7Civmk43oqrIgPiBtaWxpdGFyeVwtZHJpbGw7CivljZTmnIMgPiBhblwtYXNzb2NpYXRpb247CivmlofniakgPiBjdWx0dXJhbFwtcmVsaWM7CivpgJroqIogPiBjb21tdW5pY2F0aW9uczsKK+WNseaIvyA+IGRlY3JlcGl0XC1ob3VzZTsKK+eJueW3pSA+IHNlY3JldFwtc2VydmljZTsKK+mbu+eHiCA+IGVsZWN0cmljXC1saWdodDsKK+WMl+altSA+IHRoZVwtbm9ydGhcLXBvbGU7CivpoJDku5ggPiBwYXlcLWluXC1hZHZhbmNlOwor5q665rCjID4gbXVyZGVyb3VzXC1sb29rOwor56OB5aC0ID4gbWFnbmV0aWNcLWZpZWxkOwor54mZ5bqKID4gYWx2ZW9sYXJcLXJpZGdlOwor5Y+D5YqgID4gdG9cLXBhcnRpY2lwYXRlOwor5rCR5oSPID4gcHVibGljXC1vcGluaW9uOwor5aa55aa5ID4geW91bmdlclwtc2lzdGVyOwor5b6A5pelID4gaW5cLWZvcm1lclwtZGF5czsKK+WLmOa4rCA+IHRvXC1pbnZlc3RpZ2F0ZTsKK+WGsOmHiyA+IFwob2ZcLW1pc2dpdmluZ3M7CivlpKfmqJMgPiBsYXJnZVwtYnVpbGRpbmc7CivmgKrkurogPiBzdHJhbmdlXC1wZXJzb247Civnh5/mpa0gPiB0b1wtZG9cLWJ1c2luZXNzOwor5aGR6IagID4gcGxhc3RpY1wtY2VtZW50Owor5pma5LiKID4gaW5cLXRoZVwtZXZlbmluZzsKK+aVo+atpSA+IHRvXC10YWtlXC1hXC13YWxrOwor6K2Y5YilID4gdG9cLWRpc3Rpbmd1aXNoOwor5aSx5o6nID4gb3V0XC1vZlwtY29udHJvbDsKK+aVuOaciCA+IHNldmVyYWxcLW1vbnRoczsKK+W+gOW+qSA+IHRvXC1yZWNpcHJvY2F0ZTsKK+mdtuWgtCA+IHNob290aW5nXC1yYW5nZTsKK+ezlumGiyA+IHN3ZWV0XC1hbmRcLXNvdXI7CivluLPomZ8gPiBhY2NvdW50XC1udW1iZXI7CivniKrlrZAgPiBcKGFuaW1hbCcnc1wpXC1wYXc7CivliKXnrqEgPiBub1wtbWF0dGVyXC1cKHdobzsKK+WIqOeoiyA+IHBsYW5pbmdcLWxlbmd0aDsKK+e0oOiPnCA+IHZlZ2V0YWJsZVwtZGlzaDsKK+mWi+i7iiA+IHRvXC1kcml2ZVwtYVwtY2FyOwor54WZ54GrID4gc21va2VcLWFuZFwtZmlyZTsKK+i9iemBiyA+IHRyYW5zcG9ydGF0aW9uOwor5beh6K2mID4gcG9saWNlXC1vZmZpY2VyOwor5pS+5pigID4gc2hvd1wtXChhXC1tb3ZpZVwpOwor6KO96YCgID4gdG9cLW1hbnVmYWN0dXJlOwor5Yip546HID4gaW50ZXJlc3RcLXJhdGVzOwor6Ly/6KuWID4gcHVibGljXC1vcGluaW9uOwor5byx5bCPID4gc21hbGxcLWFuZFwtd2VhazsKK+aVneWxoyA+IHdvcm5cLW91dFwtc2hvZXM7Civnn67lrZAgPiBhXC1zaG9ydFwtcGVyc29uOwor6YCf5rG6ID4gcXVpY2tcLWRlY2lzaW9uOwor6Zec56iFID4gXChjdXN0b21zXClcLWR1dHk7Civnmb3omIcgPiBjb21tb25cLXBlcmlsbGE7Civmr5TlgLwgPiBzcGVjaWZpY1wtdmFsdWU7Civln7rnnaMgPiBqZXN1c1wtXChjaHJpc3RcKTsKK+aOoui3ryA+IHRvXC1maW5kXC1hXC1wYXRoOwor6YGZ5o6nID4gcmVtb3RlXC1jb250cm9sOwor6YGZ5oSfID4gcmVtb3RlXC1zZW5zaW5nOwor55m96ImyID4gd2hpdGVcLVwoY29sb3VyXCk7CivmkqXmrL4gPiBhbGxvY2F0ZVwtZnVuZHM7Civlu6Dlt6UgPiBmYWN0b3J5XC13b3JrZXI7CivmraPlpb0gPiBqdXN0XC1cKGluXC10aW1lXCk7CivmjqLoppYgPiBwYXlcLWFcLXZpc2l0XC10bzsKK+WIpOaYjiA+IHRvXC1kaXN0aW5ndWlzaDsKK+W8leWSjiA+IHRha2VcLXRoZVwtYmxhbWU7Civlo4HloLEgPiB3YWxsXC1uZXdzcGFwZXI7CivmlLnlloQgPiB0b1wtbWFrZVwtYmV0dGVyOwor6YCg5oiQID4gdG9cLWJyaW5nXC1hYm91dDsKK+W5q+acgyA+IHNlY3JldFwtc29jaWV0eTsKK+aTjeW/gyA+IHRvXC13b3JyeVwtYWJvdXQ7Civnmb3nqK4gPiB0aGVcLXdoaXRlXC1yYWNlOwor6KOc57y6ID4gZmlsbFwtYVwtdmFjYW5jeTsKK+ilv+atkCA+IHdlc3Rlcm5cLWV1cm9wZTsKK+mAleW6rSA+IHZlcnlcLWRpZmZlcmVudDsKK+ijnOe2tCA+IG1lbmRcLVwoY2xvdGhlc1wpOwor6ZuG5LitID4gdG9cLWNvbmNlbnRyYXRlOwor6YGy5YiwID4gdG9cLWFycml2ZVwtbGF0ZTsKK+WgseW+qSA+IG1ha2VcLXJlcHJpc2FsczsKK+ecn+aDhSA+IHJlYWxcLXNpdHVhdGlvbjsKK+W3qOa1gSA+IHN0cm9uZ1wtY3VycmVudDsKK+mAgOWtuCA+IHRvXC1xdWl0XC1zY2hvb2w7Civlu4nlg7kgPiBjaGVhcGx5XC1wcmljZWQ7Civnl4XomZ8gPiBzaWNrXC1wZXJzb25uZWw7CivlnJjntZAgPiBcKGhvbGRcLWFcKVwtcmFsbHk7CivlnI3nuZ4gPiByZXZvbHZlXC1hcm91bmQ7Civov5HlubQgPiByZWNlbnRcLXllYXJcKHNcKTsKK+WAkumWiSA+IHRvXC1nb1wtYmFua3J1cHQ7CivlhrfmiLAgPiBcKHRoZVwpXC1jb2xkXC13YXI7Civlg7nnm64gPiBcKG1hcmtlZFwpXC1wcmljZTsKK+eXheiEiCA+IGFibm9ybWFsXC1wdWxzZTsKK+a8uOiuiiA+IGdyYWR1YWxcLWNoYW5nZTsKK+mAmuS/oSA+IHRvXC1jb21tdW5pY2F0ZTsKK+e0gOW/tSA+IHRvXC1jb21tZW1vcmF0ZTsKK+mWi+acgyA+IGhhdmVcLWFcLW1lZXRpbmc7Civlhajmma8gPiBwYW5vcmFtaWNcLXZpZXc7CivliIDlj4kgPiBrbmlmZVwtYW5kXC1mb3JrOwor5biD5bibID4gY2xvdGhcLWFuZFwtc2lsazsKK+aJvumMoiA+IHRvXC1naXZlXC1jaGFuZ2U7Civoo5zmtrIgPiBmbHVpZFwtaW5mdXNpb247Civotbfpu54gPiBzdGFydGluZ1wtcG9pbnQ7CivloLHliIYgPiBjYWxsXC10aGVcLXNjb3JlOwor5oy656uLID4gdG9cLXN0YW5kXC1lcmVjdDsKK+WFq+aIkCA+IGVpZ2h0eVwtcGVyY2VudDsKK+WFqeaJiyA+IGRvdWJsZVwtdGFjdGljczsKK+aOoeayuSA+IG9pbFwtZXh0cmFjdGlvbjsKK+i3qOi2iiA+IHRvXC1zdGVwXC1hY3Jvc3M7Civot5HpgZMgPiBhdGhsZXRpY1wtdHJhY2s7Civmj6Hmi7MgPiB0b1wtbWFrZVwtYVwtZmlzdDsKK+aPoeaJiyA+IHRvXC1zaGFrZVwtaGFuZHM7Civnsr7lubIgPiBjcmFja1wtXCh0cm9vcHNcKTsKK+mVt+W+gSA+IHRoZVwtbG9uZ1wtbWFyY2g7Civnl4Xnl5sgPiBzbGlnaHRcLWlsbG5lc3M7Civoi7Hlr7ggPiBcKGVuZ2xpc2hcKVwtaW5jaDsKK+aomeWwuiA+IHN1cnZleW9yJydzXC1yb2Q7CivlsIfou40gPiBcKGFybXlcKVwtZ2VuZXJhbDsKK+WFqeWciyA+IGJvdGhcLWNvdW50cmllczsKK+WFqOWciyA+IGVudGlyZVwtY291bnRyeTsKK+i8qeWtkCA+IGFsbFwtb25lJydzXC1saWZlOwor6ZW35Z+OID4gdGhlXC1ncmVhdFwtd2FsbDsKK+ihqOaxuiA+IGRlY2lkZVwtYnlcLXZvdGU7CivmiJDpg70gPiBjaGVuZ2R1XC1cKGNpdHlcKTsKK+mspeaZuiA+IGJhdHRsZVwtb2ZcLXdpdHM7CivlhavljYMgPiBlaWdodFwtdGhvdXNhbmQ7Civnl4XmrbcgPiBtZWRpY2FsXC1yZWNvcmQ7CivkvLjplosgPiB0b1wtc3RyZXRjaFwtb3V0Owor5ryU56S6ID4gdG9cLWRlbW9uc3RyYXRlOwor55Wi55SfID4gYWxsXC1vbmUnJ3NcLWxpZmU7Civmj6HliKUgPiB0b1wtc2hha2VcLWhhbmRzOwor5YKz5pKtID4gdG9cLWRpc3NlbWluYXRlOwor5YWl5LyNID4gZW50ZXJcLXRoZVwtYXJteTsKK+mmlumDvSA+IGNhcGl0YWxcLVwoY2l0eVwpOwor5r2U5reoID4gY2xlYW5zZVwtXChzaW5zXCk7CivoiIzmoLkgPiBiYWNrXC1vZlwtdG9uZ3VlOwor5YKN5pmaID4gaW5cLXRoZVwtZXZlbmluZzsKK+ihjOaUvyA+IGFkbWluaXN0cmF0aW9uOwor5bCP6IGyID4gaW5cLWFcLWxvd1wtdm9pY2U7Civnr6HmlLkgPiB0b1wtdGFtcGVyXC13aXRoOwor5oiq6IezID4gdXBcLXRvXC1cKGFcLXRpbWVcKTsKK+i1t+iNiSA+IGRyYWZ0XC1cKGFcLWJpbGxcKTsKK+aMqOaJkyA+IHRha2VcLWFcLWJlYXRpbmc7CivlsaTnkIYgPiBzdHJhdGlmaWNhdGlvbjsKK+eQg+meiyA+IGF0aGxldGljXC1zaG9lczsKK+mNi+iyvCA+IGZyaWVkXC1kdW1wbGluZzsKK+aOiOWRvSA+IHRvXC1naXZlXC1vcmRlcnM7CivmoLjog70gPiBudWNsZWFyXC1lbmVyZ3k7Civmta7pu54gPiBmbG9hdGluZ1wtcG9pbnQ7CivnlJ/ngasgPiB0b1wtbWFrZVwtYVwtZmlyZTsKK+iHquW+niA+IHNpbmNlXC1cKGFcLXRpbWVcKTsKK+WvtuefsyA+IHByZWNpb3VzXC1zdG9uZTsKK+ajhOaruyA+IGFiYW5kb25lZFwtYmFieTsKK+eUouasiiA+IHByb3BlcnR5XC1yaWdodDsKK+m9kui8qiA+IFwobWFjaGluZVwpXC1nZWFyOwor5L6154qvID4gdG9cLWluZnJpbmdlXC1vbjsKK+ihgOWjkyA+IGJsb29kXC1wcmVzc3VyZTsKK+eXheWToSA+IHNpY2tcLXBlcnNvbm5lbDsKK+a4m+iCpSA+IHRvXC1sb3NlXC13ZWlnaHQ7Civku6PooaggPiByZXByZXNlbnRhdGl2ZTsKK+eVq+WxlSA+IGFydFwtZXhoaWJpdGlvbjsKK+eUn+aViCA+IHRvXC10YWtlXC1lZmZlY3Q7CivmiY3msKMgPiBsaXRlYXJ5XC10YWxlbnQ7CivmnJ/plpMgPiBwZXJpb2RcLW9mXC10aW1lOwor5bCI5qyEID4gc3BlY2lhbFwtY29sdW1uOwor5a2457GNID4gc2Nob29sXC1yb2xsXChzXCk7CivnpoHpo58gPiBmYXN0XC1cKG5vdFwtZWF0XCk7Civmn5DnqK4gPiBzb21lXC1raW5kXC1cKG9mXCk7CivlsIfmnIMgPiB3aWxsXCxcLWdvaW5nXC10bzsKK+ixjui1tyA+IGhvbGRcLXVwXC1cKGhpZ2hcKTsKK+WvtuabuCA+IHRyZWFzdXJlZFwtYm9vazsKK+WQg+mpmiA+IHRvXC1iZVwtc3RhcnRsZWQ7CivlsI7lvYggPiBndWlkZWRcLW1pc3NpbGU7CivmuIXniL0gPiBmcmVzaFwtYW5kXC1jb29sOwor5LqS6IGvID4gaW50ZXJjb25uZWN0ZWQ7CivllLHniYcgPiBcKHZpbnlsXClcLXJlY29yZDsKK+S6jOiAhSA+IGJvdGhcLVxbb2ZcLXRoZW1cXTsKK+aJjeWtkCA+IGdpZnRlZFwtc2Nob2xhcjsKK+S+teWusyA+IHRvXC1lbmNyb2FjaFwtb247Civlr7bluqsgPiB0cmVhc3VyZVwtaG91c2U7Civkv53llq4gPiBndWFyYW50ZWVcLXNsaXA7CivlsI/lrbggPiBwcmltYXJ5XC1zY2hvb2w7Civku5TnlZwgPiBuZXdib3JuXC1hbmltYWw7CivmnKzoibIgPiBuYXR1cmFsXC1jb2xvdXI7CivkvoblvoAgPiB0b1wtY29tZVwtYW5kXC1nbzsKK+mhjOi3iyA+IHNob3J0XC1jb21tZW50czsKK+S4jeinoyA+IG5vdFwtdW5kZXJzdGFuZDsKK+aHruaFriA+IFwoZmVlbFwpXC1hbnhpZXR5Owor5L2Z5oK4ID4gbGluZ2VyaW5nXC1mZWFyOwor5oiQ5bCxID4gYWNjb21wbGlzaG1lbnQ7Civlrrnlv40gPiB0b1wtcHV0XC11cFwtd2l0aDsKK+e9t+irliA+IGFiYW5kb25lZFwtaWRlYTsKK+aCo+iZlSA+IGFmZmxpY3RlZFwtcGFydDsKK+aetuaniyA+IGluZnJhc3RydWN0dXJlOwor56m05pKtID4gYnVuY2hcLXBsYW50aW5nOwor5oe35a2VID4gdG9cLWJlXC1wcmVnbmFudDsKK+iBt+alrSA+IGpvYlwtb2NjdXBhdGlvbjsKK+S7u+acnyA+IHRlcm1cLW9mXC1vZmZpY2U7CivkuI3oiIggPiBvdXRcLW9mXC1mYXNoaW9uOwor55CD5qOSID4gXChiYXNlYmFsbFwpXC1iYXQ7Civos4fmoLwgPiBxdWFsaWZpY2F0aW9uczsKK+adsea1tyA+IGVhc3RcLWNoaW5hXC1zZWE7CivmnbHmrZAgPiBlYXN0ZXJuXC1ldXJvcGU7Civku7vmhpEgPiBub1wtbWF0dGVyXC13aGF0Owor5LuK5pydID4gYXRcLXRoZVwtcHJlc2VudDsKK+S9nOWTgSA+IHdvcmtzXC1cKG9mXC1hcnRcKTsKK+aGi+aCtiA+IGZlZWxcLW9wcHJlc3NlZDsKK+mjvOanvSA+IGZlZWRpbmdcLXRyb3VnaDsKK+itpui7iiA+IHBvbGljZVwtdmVoaWNsZTsKK+WvkuWGtyA+IGNvbGRcLVwoY2xpbWF0ZVwpOwor5a6J5aW9ID4gc2FmZVwtYW5kXC1zb3VuZDsKK+a2suaZtiA+IGxpcXVpZFwtY3J5c3RhbDsKK+WPg+ingCA+IHRvXC1sb29rXC1hcm91bmQ7Civlj6/og70gPiBtaWdodFwtXChoYXBwZW5cKTsKK+mmluWFiCA+IGZpcnN0XC1cKG9mXC1hbGxcKTsKK+a2suaFiyA+IGxpcXVpZFwtXChzdGF0ZVwpOwor5a2V5ammID4gcHJlZ25hbnRcLXdvbWFuOwor5LmY5rOVID4gbXVsdGlwbGljYXRpb247Civlrprlg7kgPiB0b1wtc2V0XC1hXC1wcmljZTsKK+aal+eusSA+IGNhbWVyYVwtYmVsbG93czsKK+a4m+WIkSA+IHJlZHVjZVwtcGVuYWx0eTsKK+S4gOeUnyA+IGFsbFwtb25lJydzXC1saWZlOwor5Lit5q2QID4gY2VudHJhbFwtZXVyb3BlOwor54qv572qID4gXChjb21taXRcKVwtY3JpbWU7Civku73lhZIgPiBkZWdyZWVcLFwtZXh0ZW50Owor54m56ImyID4gY2hhcmFjdGVyaXN0aWM7CivkuK3mlrcgPiB0b1wtZGlzY29udGludWU7Civnp5XlrZAgPiBibGlnaHRlZFwtZ3JhaW47Civnj77ku7sgPiBhdFwtdGhlXC1wcmVzZW50Owor5pyJ5b6FID4gbm90XC15ZXRcLVwoZG9uZVwpOwor6aGM5p2QID4gc3ViamVjdFwtbWF0dGVyOwor56Sm5rOJID4gbWluZXJhbFwtc3ByaW5nOwor5q+b6KGjID4gXCh3b29sXClcLXN3ZWF0ZXI7Civosqzku7sgPiByZXNwb25zaWJpbGl0eTsKK+WNiuiBtyA+IHBhcnRcLXRpbWVcLXdvcms7Civpoa/lvpcgPiBhcHBlYXJcLVwodG9cLWJlXCk7CivnoJToo70gPiB0b1wtbWFudWZhY3R1cmU7CivkuI3lv40gPiBjYW5ub3RcLWJlYXJcLXRvOwor5aq95ZKqID4gbXVtbXlcLVwobW90aGVyXCk7Civms6LmgakgPiBib25uXC1cKGdlcm1hbnlcKTsKK+aVl+iotCA+IGxvc2VcLWFcLWxhd3N1aXQ7Civlo73ooaMgPiBidXJpYWxcLWNsb3RoZXM7Civmk7rpkJggPiBwZW5kdWx1bVwtY2xvY2s7CivljJfnt68gPiBub3J0aFwtbGF0aXR1ZGU7Civlj4rmoLwgPiB0b1wtcGFzc1wtYVwtdGVzdDsKK+azleW6rSA+IGNvdXJ0XC1cKG9mXC1sYXdcKTsKK+mAmemhniA+IHRoaXNcLWtpbmRcLVwob2ZcKTsKK+S4u+S/riA+IFwoc2Nob29sXClcLW1ham9yOwor6K6K5oiQID4gdG9cLWNoYW5nZVwtaW50bzsKK+S4jeWQiCA+IG5vdFwtY29uZm9ybVwtdG87CivmlpHnq7kgPiBtb3R0bGVkXC1iYW1ib287CivkuI3lj4ogPiBub3RcLWFzXC1nb29kXC1hczsKK+WIhumhniA+IGNsYXNzaWZpY2F0aW9uOwor6YeN5bu6ID4gcmVjb25zdHJ1Y3Rpb247Civoq4vnnIsgPiBwbGVhc2VcLXNlZVwtXC5cLlwuOwor6aGe5YilID4gY2xhc3NpZmljYXRpb247CivmsKvmsKMgPiBoeWRyb2dlblwtXChnYXNcKTsKK+aVuOeoriA+IG51bWVyb3VzXC10eXBlczsKK+egtOeUoiA+IHRvXC1nb1wtYmFua3J1cHQ7CivlhrDpu54gPiBmcmVlemluZ1wtcG9pbnQ7Civoj6/oo5QgPiBldGhuaWNcLWNoaW5lc2U7CivkuI3ku4EgPiBub3RcLWJlbmV2b2xlbnQ7CivmlLbogb0gPiB0b1wtbGlzdGVuXC1cKHRvXCk7Civoj7Loj7IgPiB2ZXJ5XC1mcmFncmFudDsKK+aYguaPmiA+IGhpZ2hcLXNwaXJpdGVkOwor5pep5pmoID4gZWFybHlcLW1vcm5pbmc7Civno4HluLYgPiBtYWduZXRpY1wtdGFwZTsKK+ino+iqvyA+IHRvXC1kZW1vZHVsYXRlOwor5YyX5rW3ID4gdGhlXC1ub3J0aFwtc2VhOwor6JaE5YipID4gc21hbGxcLXByb2ZpdHM7CivmmZrloLEgPiBldmVuaW5nXC1wYXBlcjsKK+aYn+W6pyA+IGNvbnN0ZWxsYXRpb247CivlhrDpnosgPiBza2F0aW5nXC1ib290czsKK+W7oOe1siA+IGZpbGF0dXJlXC1zaWxrOwor55+b55u+ID4gY29udHJhZGljdG9yeTsKK+WHuuizoyA+IHRvXC1zZWxsXC1cKG9mZlwpOwor5Yiw6JmVID4gaW5cLWFsbFwtcGxhY2VzOwor5Y+k5LujID4gYW5jaWVudFwtdGltZXM7CivmlrDmnIggPiBjcmVzY2VudFwtbW9vbjsKK+WNs+WwhyA+IG9uXC10aGVcLWV2ZVwtb2Y7CivljZHlvq4gPiBwZXR0eVwtYW5kXC1sb3c7CivljbHlrrMgPiB0b1wtamVvcGFyZGl6ZTsKK+WIqOiKsSA+IHdvb2RcLXNoYXZpbmdzOwor6I6o6I+qID4gYmxhY2tcLWhlbmJhbmU7Civoqr/mn6UgPiBpbnZlc3RpZ2F0aW9uOwor57aB6IW/ID4gbGVnXC13cmFwcGluZ3M7CivliJfoiIkgPiBcKG1ha2VcLWFcKVwtbGlzdDsKK+mBqeeUqCA+IGJlXC1hcHBsaWNhYmxlOwor5pGY6KiYID4gdG9cLXRha2VcLW5vdGVzOwor5YWD6aaWID4gaGVhZFwtb2ZcLXN0YXRlOwor5pa55byPID4gd2F5XC1cKG9mXC1saWZlXCk7Civml6XlpJwgPiBkYXlcLWFuZFwtbmlnaHQ7Civoip3pursgPiBzZXNhbWVcLVwoc2VlZFwpOwor54mM5Z2KID4gbWVtb3JpYWxcLWFyY2g7CivliY3nlJ8gPiBwcmVcLWV4aXN0ZW5jZTsKK+aYh+WAvCA+IHJpc2VcLWluXC12YWx1ZTsKK+exs+mjryA+IFwoY29va2VkXClcLXJpY2U7CivovYnpgZMgPiBtYWtlXC1hXC1kZXRvdXI7CivplbfpgJQgPiBsb25nXC1kaXN0YW5jZTsKK+aXpeWJjSA+IHRoZVwtb3RoZXJcLWRheTsKK+WinOavgCA+IFwocGxhbmVcKVwtY3Jhc2g7Civpm5nmiYsgPiBwYWlyXC1vZlwtaGFuZHM7CivljZfkup4gPiBzb3V0aGVyblwtYXNpYTsKK+WIiueZuyA+IGNhcnJ5XC1hXC1zdG9yeTsKK+iqh+W8tSA+IHRvXC1leGFnZ2VyYXRlOwor6Zuj5b+YID4gdW5mb3JnZXR0YWJsZTsKK+aXqeS4iiA+IGVhcmx5XC1tb3JuaW5nOwor5aSq5aSqID4gbWFycmllZFwtd29tYW47CivmkqXnlKggPiBhcHByb3ByaWF0aW9uOwor5aKD5rOBID4gY2lyY3Vtc3RhbmNlczsKK+awkeS6iyA+IGNpdmlsXC1tYXR0ZXJzOwor5aWz5L2jID4gXChmZW1hbGVcKVwtbWFpZDsKK+WLmOWvnyA+IHJlY29ubmFpc2FuY2U7CivnsYzpm4YgPiBjb2xsZWN0XC1tb25leTsKK+aTjea8lCA+IGRlbW9uc3RyYXRpb247Civlubvnh4ggPiBsYXRlcm5cLXNsaWRlczsKK+WKoOW/qyA+IHRvXC1hY2NlbGVyYXRlOwor5Yaw57OWID4gY3J5c3RhbFwtc3VnYXI7CivlnIvpmpsgPiBpbnRlcm5hdGlvbmFsOwor6ayl6ZueID4gY29ja1wtZmlnaHRpbmc7CivlvaLli6IgPiBjaXJjdW1zdGFuY2VzOwor6YGO5pmCID4gb2xkXC1mYXNoaW9uZWQ7CivpmqjmhI8gPiBhc1wtb25lXC13aXNoZXM7CivlpLHliKkgPiBzdWZmZXJcLWRlZmVhdDsKK+aQjeiAlyA+IHdlYXJcLWFuZFwtdGVhcjsKK+ebuOeVtiA+IGVxdWl2YWxlbnRcLXRvOwor6YCQ5q2lID4gcHJvZ3Jlc3NpdmVseTsKK+W5vuasoSA+IHNldmVyYWxcLXRpbWVzOwor5beo57SwID4gYmlnXC1hbmRcLXNtYWxsOwor5bm+5qijID4gc2V2ZXJhbFwta2luZHM7CivlpKfkvb8gPiBhblwtYW1iYXNzYWRvcjsKK+e3qOWvqSA+IHJlYWRcLWFuZFwtZWRpdDsKK+W8t+WMliA+IHRvXC1zdHJlbmd0aGVuOwor6YG/5a2VID4gY29udHJhY2VwdGlvbjsKK+Wkp+S6iyA+IGFcLW1ham9yXC1ldmVudDsKK+aVmeWPiyA+IGNodXJjaFwtbWVtYmVyOwor6YCf5pWIID4gcXVpY2tcLXJlc3VsdHM7CivliKnmlrwgPiBiZVwtYmVuZWZpY2lhbDsKK+aVl+WMlyA+IHN1ZmZlclwtZGVmZWF0Owor5Yid5pyfID4gaW5pdGlhbFwtc3RhZ2U7CivoqaLllY8gPiBpbnF1aXJlXC1hYm91dDsKK+atu+WIkSA+IGRlYXRoXC1wZW5hbHR5Owor5YW155eeID4gYXJteVwtcmlmZnJhZmY7Civpq5Tph40gPiBcKGJvZHlcKVwtd2VpZ2h0Owor55m956CSID4gd2hpdGVcLWFyc2VuaWM7Civnm7jmnrYgPiBwaWN0dXJlXC1mcmFtZTsKK+WeguebtCA+IHBlcnBlbmRpY3VsYXI7CivlooPlnLAgPiBjaXJjdW1zdGFuY2VzOwor5YW154efID4gbWlsaXRhcnlcLWNhbXA7CivluILmsJEgPiBjaXR5XC1yZXNpZGVudDsKK+maqOS+vyA+IGFzXC1vbmVcLXdpc2hlczsKK+W6reWckiA+IGZsb3dlclwtZ2FyZGVuOwor6L2f54K4ID4gXChkcm9wXC1hXClcLWJvbWI7CivpgY7ljrsgPiBcKGluXC10aGVcKVwtcGFzdDsKK+iJpuiJhyA+IG5hdmFsXC12ZXNzZWxzOwor5Yaw5pyfID4gZ2xhY2lhbFwtZXBvY2g7Civpl5zmlrwgPiBwZXJ0YWluaW5nXC10bzsKK+WJm+WJmyA+IGp1c3RcLXJlY2VudGx5Owor5bug5Li7ID4gZmFjdG9yeVwtb3duZXI7Civlho3mrKEgPiBvbmVcLW1vcmVcLXRpbWU7CivmrIrlipsgPiBcKHdpZWxkXClcLXBvd2VyOwor6YCj5ZCMID4gdG9nZXRoZXJcLXdpdGg7CivnsL/nsY0gPiBhY2NvdW50XC1ib29rczsKK+apq+aOgyA+IHRvXC1zd2VlcFwtYXdheTsKK+W6puWBhyA+IGdvXC1vblwtaG9saWRheTsKK+eVsOizqiA+IGhldGVyb2dlbmVvdXM7Civou4rnq5kgPiBcKGJ1c1wpXC1zdGF0aW9uOwor5YKZ6IezID4gdG9cLXRoZVwtdXRtb3N0Owor6LeR6Z6LID4gcnVubmluZ1wtc2hvZXM7CivloLHllq4gPiB0YXhhdGlvblwtZm9ybTsKK+mRkuizniA+IHRvXC1hcHByZWNpYXRlOwor6YCZ5L2NID4gdGhpc1wtXChwZXJzb25cKTsKK+WbsOeqmCA+IGVtYmFycmFzc21lbnQ7CivpmY3kuJYgPiBjb21lXC10b1wtZWFydGg7Civkvr/po68gPiBhXC1zaW1wbGVcLW1lYWw7CivovLvmop0gPiBcKHdoZWVsXClcLXNwb2tlOwor5omT6ZaLID4gdG9cLWJyZWFrXC1vcGVuOwor55m85o+uID4gYnJpbmdcLXRvXC1iZWFyOwor6ZaL5b+DID4gdG9cLWZlZWxcLWhhcHB5Owor5a+m6amXID4gdG9cLWV4cGVyaW1lbnQ7CivovYnlvY4gPiB0dXJuXC1cKGFyb3VuZFwpOwor5qGI6aCtID4gb25cLW9uZScnc1wtZGVzazsKK+i+qOWIpSA+IGRpZmZlcmVudGlhdGU7CivmioTopbIgPiB0b1wtcGxhZ2lhcml6ZTsKK+i+puWIsCA+IHRvXC1hY2NvbXBsaXNoOwor5YWI5b6MID4gaW5cLXN1Y2Nlc3Npb247CivnlZzogqUgPiBhbmltYWxcLW1hbnVyZTsKK+aLiee+jiA+IGxhdGluXC1hbWVyaWNhOwor5qC46Zu7ID4gbnVjbGVhclwtcG93ZXI7Civotorph44gPiBjcm9zc1wtY291bnRyeTsKK+mngembnCA+IGhldGVyb2dlbmVvdXM7CivlhazlnJIgPiBhXC1wdWJsaWNcLXBhcms7Civnmb7lp5MgPiBjb21tb25cLXBlb3BsZTsKK+eBveWNgCA+IGRpc2FzdGVyXC1hcmVhOwor5qeL5oiQID4gdG9cLWNvbnN0aXR1dGU7Civkv53ol48gPiBrZWVwXC1pblwtc3RvcmU7CivnkZ7pppkgPiB3aW50ZXJcLWRhcGhuZTsKK+aLjOeoriA+IHNlZWRcLWRyZXNzaW5nOwor57GM5o6qID4gcmFpc2VcLVwobW9uZXlcKTsKK+ajhOe9riA+IHRvXC10aHJvd1wtYXdheTsKK+izo+m7niA+IHNlbGxpbmdcLXBvaW50Owor6ZaL5YiXID4gXChtYWtlXC1hXClcLWxpc3Q7CivnmKblvLEgPiB0aGluXC1hbmRcLXdlYWs7Civnmb3ljKogPiB3aGl0ZVwtYmFuZGl0czsKK+iCiemrlCA+IHBoeXNpY2FsXC1ib2R5Owor5YKZ5qGIID4gcHV0XC1vblwtcmVjb3JkOwor6ayl5b+XID4gd2lsbFwtdG9cLWZpZ2h0Owor5omB6I2zID4gaHlhY2ludGhcLWJlYW47Civnmb7lgI0gPiBhXC1odW5kcmVkZm9sZDsKK+ethuetkiA+IHBlblwtY29udGFpbmVyOwor5a+26JeNID4gc2FwcGhpcmVcLWJsdWU7Civmu7LnorMgPiBjYXJidXJpemF0aW9uOwor5rih6YGOID4gdG9cLWNyb3NzXC1vdmVyOwor5a2X6ZuGID4gY2hhcmFjdGVyXC1zZXQ7CivnqbrpgYsgPiBhaXJcLXRyYW5zcG9ydDsKK+ihqOWxpCA+IHN1cmZhY2VcLWxheWVyOwor5ZyT5ZGoID4gY2lyY3VtZmVyZW5jZTsKK+eXheWusyA+IHBsYW50XC1kaXNlYXNlOwor5ZSu6LKoID4gdG9cLXNlbGxcLWdvb2RzOwor6IiM5bCWID4gdGlwXC1vZlwtdG9uZ3VlOwor5qGI56ixID4gY291bnRlclwtc2NhbGU7CivmtojpmLIgPiBmaXJlXC1maWdodGluZzsKK+WWiee1kCA+IGFkYW0nJ3MnJ1wtYXBwbGU7Civls7blnIsgPiBpc2xhbmRcLW5hdGlvbjsKK+msp+S6iyA+IGNhdXNlXC10cm91YmxlOwor5Lqs6YO9ID4ga3lvdG9cLVwoamFwYW5cKTsKK+Wbm+WNgyA+IGZvdXJcLXRob3VzYW5kOwor55W25bm0ID4gaW5cLXRob3NlXC1kYXlzOwor6LKh6L+3ID4gbW9uZXlcLWdydWJiZXI7CivnkIbop6MgPiB0b1wtY29tcHJlaGVuZDsKK+WvhueivCA+IFwoc2VjcmV0XClcLWNvZGU7Civnr4nln44gPiBmb3J0aWZpY2F0aW9uOwor6KGb5YW1ID4gXChib2R5XClcLWd1YXJkXCk7CivnlpHllY8gPiBpbnRlcnJvZ2F0aW9uOwor5ZaJ55enID4gc2NhcmxldFwtZmV2ZXI7CivlgIvmgKcgPiBpbmRpdmlkdWFsaXR5Owor5ZWf56S6ID4gZW5saWdodGVubWVudDsKK+iHtOWHvSA+IHNlbmRcLWFcLWxldHRlcjsKK+aEj+itmCA+IGNvbnNjaW91c25lc3M7Civoga/ntaEgPiBjb21tdW5pY2F0aW9uOwor5ouc5YilID4gdGFrZVwtbGVhdmVcLW9mOwor5omB5pOUID4gY2FycnlpbmdcLXBvbGU7Civlk4DomZ8gPiBjcnlcLXBpdGVvdXNseTsKK+ahguaelyA+IGd1aWxpblwtXChjaXR5XCk7Civph5Hpu4MgPiBnb2xkZW5cLXllbGxvdzsKK+i3qOWciyA+IHRyYW5zbmF0aW9uYWw7CivmvJTlh7ogPiBcKGFjdGluZ1wpXC1wbGF5Owor5ZCD6aOvID4gdG9cLWVhdFwtYVwtbWVhbDsKK+S4jemAmiA+IGJlXC1vYnN0cnVjdGVkOwor5oiS5oyHID4gXChmaW5nZXJcKVwtcmluZzsKK+WwkeWwhyA+IG1ham9yXC1nZW5lcmFsOwor5p2c57WVID4gcHV0XC1hblwtZW5kXC10bzsKK+aal+mOliA+IGJ1aWx0XC1pblwtbG9jazsKK+aHsuaIkiA+IHRvXC1kaXNjaXBsaW5lOwor5LiL6KqyID4gY2xhc3NcLWlzXC1vdmVyOwor5LiN6KmzID4gbm90XC1pblwtZGV0YWlsOwor5Y+N6Z+/ID4gcmVwZXJjdXNzaW9uczsKK+Wuv+aAqCA+IGFuXC1vbGRcLWdydWRnZTsKK+WWruWtkCA+IGxpc3RcLW9mXC1pdGVtczsKK+iyoueNuyA+IHRvXC1jb250cmlidXRlOwor5Y+r6YaSID4gdG9cLWNhbGxcLWF3YWtlOwor576O6KGTID4gdGhlXC1maW5lXC1hcnRzOwor6IO95aSgID4gYmVcLWNhcGFibGVcLW9mOwor5a625bGsID4gZmFtaWx5XC1tZW1iZXI7CivpvLvmt7UgPiBuYXNvc2ludXNpdGlzOwor5oeC5b6XID4gdG9cLXVuZGVyc3RhbmQ7CivljYrpu54gPiB0aGVcLWxlYXN0XC1iaXQ7CivpiZvnrYYgPiBcKGxlYWRcKVwtcGVuY2lsOwor5Zau5ZCRID4gdW5kaXJlY3Rpb25hbDsKK+WPl+izhCA+IGFjY2VwdFwtYnJpYmVzOwor5L6L5YGHID4gbGVnYWxcLWhvbGlkYXk7CivmsLTpnaIgPiB3YXRlclwtc3VyZmFjZTsKK+enu+auliA+IHRvXC10cmFuc3BsYW50Owor6LW35LyPID4gdXBzXC1hbmRcLWRvd25zOwor6K6K6Kq/ID4gbW9kaWZpZWRcLXRvbmU7Civlj4voqrwgPiBjb21wYW5pb25zaGlwOwor56e75qSNID4gdG9cLXRyYW5zcGxhbnQ7Civlk4DmqIIgPiBmdW5lcmFsXC1tdXNpYzsKK+WvjOS6jiA+IHRvXC1iZVwtZnVsbFwtb2Y7CivogbLluLYgPiB2b2NhbFwtY29yZFwoc1wpOwor5LiN55+lID4gdW5rbm93aW5nXChseVwpOwor5a2r5aWzID4gZ3JhbmRkYXVnaHRlcjsKK+a2vOW/qyA+IG5pY2VcLWFuZFwtY29sZDsKK+S4ieeZviA+IHRocmVlXC1odW5kcmVkOwor5Lqs5oiyID4gYmVpamluZ1wtb3BlcmE7CivkvY7kuo4gPiBiZVwtbG93ZXJcLXRoYW47CivljZfpg6ggPiBzb3V0aGVyblwtcGFydDsKK+a4heWWriA+IGxpc3RcLW9mXC1pdGVtczsKK+iuiuiJsiA+IGNoYW5nZVwtY29sb3VyOwor5YyX6Z2iID4gbm9ydGhlcm5cLXNpZGU7CivkuIrnj60gPiB0b1wtZ29cLXRvXC13b3JrOwor5ZCE56iuID4gZXZlcnlcLWtpbmRcLW9mOwor6LKd5b2rID4gc2hlbGxcLWNhcnZpbmc7Civml6Xou40gPiBqYXBhbmVzZVwtYXJteTsKK+WNl+i2iiA+IHNvdXRoXC12aWV0bmFtOwor5oOF5rOBID4gY2lyY3Vtc3RhbmNlczsKK+aEm+aGjiA+IGxvdmVcLWFuZFwtaGF0ZTsKK+iBt+WToSA+IG9mZmljZVwtd29ya2VyOwor5rSL5rqiID4gYnJpbW1pbmdcLXdpdGg7CivljZToqr8gPiB0b1wtY29vcmRpbmF0ZTsKK+Wkp+mYqiA+IG9zYWthXC1cKGphcGFuXCk7CivogIPmha4gPiB0b1wtdGhpbmtcLW92ZXI7CivljJfpg6ggPiBub3J0aGVyblwtcGFydDsKK+acrOaEjyA+IG9yaWdpbmFsXC1pZGVhOwor542o5pSsID4gdG9cLW1vbm9wb2xpemU7CivlkLjmr5IgPiB0b1wtdGFrZVwtZHJ1Z3M7Civms7PmsaAgPiBzd2ltbWluZ1wtcG9uZDsKK+S4gOatpSA+IFwoc2luZ2xlXClcLXN0ZXA7CivljJfotoogPiBub3J0aFwtdmlldG5hbTsKK+mbnOmghSA+IG1pc2NlbGxhbmVvdXM7Civlk6Xlk6UgPiBvbGRlclwtYnJvdGhlcjsKK+WklumDqCA+IGV4dGVybmFsXC1wYXJ0Owor6IGe5Lq6ID4gZmFtb3VzXC1wZXJzb247CivkuqzliocgPiBiZWlqaW5nXC1vcGVyYTsKK+WSjOWwmiA+IGJ1ZGRoaXN0XC1tb25rOwor6JiH5beeID4gc3V6aG91XC1cKGNpdHlcKTsKK+ekpuawtCA+IG1pbmVyYWxcLXdhdGVyOwor5pqR5rCjID4gXChzdW1tZXJcKVwtaGVhdDsKK+WTgOWRiiA+IGJlZ1wtcGl0ZW91c2x5Owor5oOF5b2iID4gY2lyY3Vtc3RhbmNlczsKK+S4reW8jyA+IGNoaW5lc2VcLXN0eWxlOwor5aSW6LK/ID4gZm9yZWlnblwtdHJhZGU7Civpgb/pm6MgPiBcW3Rha2VcXVwtcmVmdWdlOwor5YyF6KKxID4gY2xvdGhcLXdyYXBwZXI7CivmhJ/lhpIgPiB0b1wtY2F0Y2hcLWNvbGQ7CivlvanomowgPiBwYWludGVkXC1zaGVsbDsKK+emruWggiA+IGFzc2VtYmx5XC1oYWxsOwor5LiN5oGtID4gZGlzcmVzcGVjdGZ1bDsKK+e4veioiCA+IFwoZ3JhbmRcKVwtdG90YWw7CivlqJvmqIIgPiBlbnRlcnRhaW5tZW50Owor5Lit5a24ID4gbWlkZGxlXC1zY2hvb2w7CivkupTkuIAgPiA1XC0xXC1cKG1heVwtMXN0XCk7Civno4HniYcgPiBtYWduZXRpY1wtZGlzazsKK+acg+WgtCA+IG1lZXRpbmdcLXBsYWNlOwor5aq+5ZKMID4gdG9cLW1ha2VcLXBlYWNlOwor5LiN5benID4gdW5mb3J0dW5hdGVseTsKK+S4iuW4giA+IG9uXC10aGVcLW1hcmtldDsKK+engeWIqSA+IHBlcnNvbmFsXC1nYWluOwor6YGy6YiNID4gc2xvd1wtXCh3aXR0ZWRcKTsKK+WMl+e+jiA+IG5vcnRoXC1hbWVyaWNhOwor57aT6amXID4gdG9cLWV4cGVyaWVuY2U7CivmsbLmsLQgPiB0b1wtZHJhd1wtd2F0ZXI7CivnjbLli50gPiBiZVwtdmljdG9yaW91czsKK+ingOm7niA+IHBvaW50XC1vZlwtdmlldzsKK+awtOeJmyA+IHdhdGVyXC1idWZmYWxvOwor5ZCM5bm0ID4gdGhlXC1zYW1lXC15ZWFyOwor6K6K5pifID4gdmFyaWFibGVcLXN0YXI7Civmr5vnrYYgPiB3cml0aW5nXC1icnVzaDsKK+iYh+S/hCA+IHNvdmlldFwtcnVzc2lhOwor5q2l6KGMID4gdG9cLWdvXC1vblwtZm9vdDsKK+WIpemboiA+IHRha2VcLWxlYXZlXC1vZjsKK+aThemVtyA+IHRvXC1iZVwtZ29vZFwtYXQ7CivkuI3llbsgPiBub3RcLWxlc3NcLXRoYW47CivlpKfntIQgPiBhcHByb3hpbWF0ZWx5Owor54mM54WnID4gbGljZW5zZVwtcGxhdGU7CivmmpflrrMgPiBraWxsXC1zZWNyZXRseTsKK+WLg+iIiCA+IHJpc2VcLXN1ZGRlbmx5Owor5YmN6YCyID4gdG9cLWdvXC1mb3J3YXJkOwor6K6K5oWLID4gbWV0YW1vcnBob3NpczsKK+aAp+aFviA+IHNleHVhbFwtZGVzaXJlOwor5Yyv546HID4gZXhjaGFuZ2VcLXJhdGU7CivmsrvlrokgPiBsYXdcLWFuZFwtb3JkZXI7CivmrKPos54gPiB0b1wtYXBwcmVjaWF0ZTsKK+mbjOiKsSA+IGZlbWFsZVwtZmxvd2VyOwor6YKm6IGvID4gY29uZmVkZXJhdGlvbjsKK+WkmueoriA+IG1hbnlcLWtpbmRzXC1vZjsKK+WQuOWFpSA+IHRvXC1icmVhdGhlXC1pbjsKK+iuiuW3pSA+IGV4Y2hhbmdlXC13b3JrOwor5Y+X5a6zID4gdG9cLWJlXC1pbmp1cmVkOwor5rG65b+DID4gZGV0ZXJtaW5hdGlvbjsKK+S4i+S7pCA+IGdpdmVcLWFuXC1vcmRlcjsKK+iOq+mAhiA+IHZlcnlcLWZyaWVuZGx5Owor5q+U54axID4gc3BlY2lmaWNcLWhlYXQ7CivmmILmmIIgPiBoaWdoXC1zcGlyaXRlZDsKK+WIhumFjSA+IHRvXC1kaXN0cmlidXRlOwor5Yqg57eKID4gdG9cLWludGVuc2lmeTsKK+edoeimuiA+IHRvXC1nb1wtdG9cLWJlZDsKK+aXqeacnyA+IGVhcmx5XC1wZXJpb2Q7Civnm7jpl5wgPiBpbnRlcnJlbGF0ZWQ7Civngavpvo0gPiBmaWVyeVwtZHJhZ29uOwor5ZCI5L2cID4gdG9cLWNvb3BlcmF0ZTsKK+aZuuWKmyA+IGludGVsbGlnZW5jZTsKK+W/jOaGmiA+IGJlXC1hZnJhaWRcLW9mOwor5piU5bm0ID4gZm9ybWVyXC15ZWFyczsKK+ekpuS6lSA+IG1pbmVcLVwoc2hhZnRcKTsKK+eGn+efpSA+IGFjcXVhaW50YW5jZTsKK+aUr+elqCA+IFwoYmFua1wpXC1jaGVjazsKK+WnkOWnkCA+IG9sZGVyXC1zaXN0ZXI7CivorabloLEgPiBcKGZpcmVcKVwtYWxhcm07CivlvozmnpwgPiBjb25zZXF1ZW5jZXM7Civlp4rlp4ogPiBvbGRlclwtc2lzdGVyOwor5pS255ukID4gbWFya2V0XC1jbG9zZTsKK+WfjumYsiA+IGNpdHlcLWRlZmVuY2U7CivpoILkvY8gPiB0b1wtd2l0aHN0YW5kOwor6KW/6YOoID4gd2VzdGVyblwtcGFydDsKK+WlveaEnyA+IGdvb2RcLW9waW5pb247CivlpLHmpa0gPiB1bmVtcGxveW1lbnQ7Civmk4Xoh6ogPiB1bmF1dGhvcml6ZWQ7CivpgJXoh6ogPiBvblwtb25lJydzXC1vd247CivntKLos6AgPiBjb21wZW5zYXRpb247Civov5HoppYgPiBzaG9ydHNpZ2h0ZWQ7CivmraXnioEgPiB3YWxraW5nXC1wbG93Owor55u46K2YID4gYWNxdWFpbnRhbmNlOwor6ZaL6ZecID4gcG93ZXJcLXN3aXRjaDsKK+WOu+S4liA+IHRvXC1wYXNzXC1hd2F5Owor5Z+56KiTID4gdG9cLWN1bHRpdmF0ZTsKK+WkmuaWuSA+IGluXC1tYW55XC13YXlzOwor5pC26LO8ID4gcGFuaWNcLWJ1eWluZzsKK+W3oei/tCA+IHRvXC1nb1wtYXJvdW5kOwor6YCZ56iuID4gdGhpc1wta2luZFwtb2Y7CivlpKfmhI8gPiBnZW5lcmFsXC1pZGVhOwor5Yil56ixID4gYW5vdGhlclwtbmFtZTsKK+atpeatpSA+IHN0ZXBcLWJ5XC1zdGVwOwor5Y2U5ZWGID4gY29uc3VsdFwtd2l0aDsKK+efruaYnyA+IGR3YXJmXC1cKHN0YXJcKTsKK+mCo+aZgiA+IGF0XC10aGF0XC10aW1lOwor5aSn5birID4gZ3JlYXRcLW1hc3RlcjsKK+e1hOe5lCA+IG9yZ2FuaXphdGlvbjsKK+mAmueUqCA+IGNvbW1vblwtXCh1c2VcKTsKK+WkmuW3pSA+IHRvXC1tdWx0aXBsZXg7Civns77okZsgPiBlbnRhbmdsZW1lbnQ7CivoqabmjqIgPiB0b1wtc291bmRcLW91dDsKK+Wkq+WmuyA+IG1hblwtYW5kXC13aWZlOwor6YGT5q2JID4gdG9cLWFwb2xvZ2l6ZTsKK+aVheaEjyA+IGRlbGliZXJhdGVseTsKK+iri+WVjyA+IG1heVwtaVwtYXNrXC5cLlwuOwor5Ye655m8ID4gdG9cLXN0YXJ0XC1vdXQ7CivnuK7lr6sgPiBhYmJyZXZpYXRpb247Civlo4HmjpsgPiB3YWxsXC1oYW5naW5nOwor54af5oKJID4gdG9cLWtub3dcLXdlbGw7Civnhp/mgJ0gPiBkZWxpYmVyYXRpb247CivmlbTlpKkgPiBhbGxcLWRheVwtbG9uZzsKK+mxieeUsiA+IHR1cnRsZVwtc2hlbGw7Civouqvpq5QgPiBcKGh1bWFuXClcLWJvZHk7Civns77nuo8gPiBiZVwtZW50YW5nbGVkOwor6KSH6KO9ID4gdG9cLWR1cGxpY2F0ZTsKK+maiuaXlyA+IHRlYW1cLXBlbm5hbnQ7CivliqDlvLcgPiB0b1wtcmVpbmZvcmNlOwor5Ye6542EID4gbGVhdmVcLXByaXNvbjsKK+irh+WIpCA+IHRvXC1uZWdvdGlhdGU7CivnnIvnl4UgPiBzZWVcLWFcLWRvY3RvcjsKK+W+iOS4jSA+IHZlcnlcLXVuXC1cLlwuXC5cLjsKK+avheWKmyA+IHBlcnNldmVyYW5jZTsKK+iQveWvpiA+IHRvXC1pbXBsZW1lbnQ7CivmlK/lupcgPiBicmFuY2hcLXN0b3JlOwor55m96JavID4gc3dlZXRcLXBvdGF0bzsKK+e2teaXlyA+IGNvbG9yZWRcLWZsYWc7Civlm57poacgPiB0b1wtbG9va1wtYmFjazsKK+aureWMliA+IGJlY29tZVwtcmlnaWQ7CivngI/opr0gPiB0b1wtc2tpbVwtb3ZlcjsKK+iqsuS9mSA+IGFmdGVyXC1zY2hvb2w7Civou4rpgZMgPiB0cmFmZmljXC1sYW5lOwor5q2j5aaCID4gYmVcLWp1c3RcLWxpa2U7CivntJnniYwgPiBwbGF5aW5nXC1jYXJkOwor55m857SFID4gZmx1c2hcLVwoZmFjZVwpOwor6ZuG5ZCIID4gY29uZ3JlZ2F0aW9uOwor6YCf5oiQID4gY3Jhc2hcLWNvdXJzZTsKK+WFiee3miA+IG9wdGljYWxcLWxpbmU7CivliqrlipsgPiBncmVhdFwtZWZmb3J0Owor5byV5YWlID4gdG9cLWRyYXdcLWludG87Civlu6DlnYAgPiBmYWN0b3J5XC1zaXRlOwor6Zqo5ZCMID4gYWNjb21wYW55aW5nOwor54aS5YWJID4gZmxvdXJlc2NlbmNlOwor5buj5ZGKID4gdG9cLWFkdmVydGlzZTsKK+aMqOi/kSA+IGdldFwtY2xvc2VcLXRvOwor57eo5YqHID4gd3JpdGVcLWFcLXBsYXk7Civlo5PlgJIgPiBvdmVyd2hlbG1pbmc7CivmjqHohIIgPiB0cmVlXC10YXBwaW5nOwor54af5Lq6ID4gYWNxdWFpbnRhbmNlOwor5Z+55qSNID4gdG9cLWN1bHRpdmF0ZTsKK+mAn+WvqyA+IHF1aWNrXC1za2V0Y2g7CivpgLHlnI0gPiBzdXJyb3VuZGluZ3M7Civmv77ntJkgPiBmaWx0ZXJcLXBhcGVyOwor5qmf5qeLID4gb3JnYW5pemF0aW9uOwor6Kiq5L+EID4gdmlzaXRcLXJ1c3NpYTsKK+aLlOmMqCA+IHdlaWdoXC1hbmNob3I7CivmqJnnh4ggPiBiZWFjb25cLWxpZ2h0Owor5Yaw5pm2ID4gaWNlXC1jcnlzdGFsczsKK+W5vuWkqSA+IHNldmVyYWxcLWRheXM7Civmjojnsr4gPiBpbnNlbWluYXRpb247Civpq5LoqbEgPiBiYWRcLWxhbmd1YWdlOwor5Ye55bK4ID4gY29uY2F2ZVwtYmFuazsKK+mBjuS+hiA+IHRvXC1jb21lXC1vdmVyOwor5pON5YueID4gdG9cLXdvcmtcLWhhcmQ7CivliKXlkI0gPiBhbm90aGVyXC1uYW1lOwor5YWJ5rqQID4gbGlnaHRcLXNvdXJjZTsKK+mAn+WHjSA+IHF1aWNrXC1mcmVlemU7CivlnZDniaIgPiBpbXByaXNvbm1lbnQ7Civoo5zniZkgPiBmaWxsXC1hXC10b290aDsKK+WIqOWIgCA+IHBsYW5pbmdcLXRvb2w7Civmiorpl5wgPiBndWFyZFwtYVwtcGFzczsKK+iHquihmyA+IHNlbGZcLWRlZmVuc2U7CivpmZvkuIsgPiB5b3VyXC1tYWplc3R5Owor5YWr5pyIID4gZWlnaHRoXC1tb250aDsKK+WCmeiAgyA+IFwoYW5cLWFwcGVuZGl4Owor5bm05YmNID4gXC5cLlwueWVhcnNcLWFnbzsKK+ewoeeosSA+IGFiYnJldmlhdGlvbjsKK+WIpeS6uiA+IG90aGVyXC1wZW9wbGU7CivplovmlK8gPiBleHBlbmRpdHVyZXM7CivmjY/nqY0gPiBjaGlyb3ByYWN0aWM7CivloLHlg7kgPiBxdW90ZWRcLXByaWNlOwor6L+35L+hID4gc3VwZXJzdGl0aW9uOwor6L2J5o+bID4gdG9cLXRyYW5zZm9ybTsKK+aQrOWutiA+IG1vdmVcLVwoaG91c2VcKTsKK+aItumgrSA+IGJhbmtcLWFjY291bnQ7Civopqrkv6EgPiB0cnVzdGVkXC1haWRlOwor6KGM56iLID4gdHJhdmVsXC1yb3V0ZTsKK+WatOeroyA+IHRpZ2h0XC5zdHJpY3Q7CivnnIvkvZwgPiBsb29rXC11cG9uXC1hczsKK+Wvp+mhmCA+IHdvdWxkXC1yYXRoZXI7CivmjqXmnp0gPiBcKHRyZWVcKVwtZ3JhZnQ7CivmjojmrIogPiB0b1wtYXV0aG9yaXplOwor6ZaL5a24ID4gc2Nob29sXC1vcGVuczsKK+S/neitiSA+IHRvXC1ndWFyYW50ZWU7CivmibnoqZUgPiB0b1wtY3JpdGljaXplOwor5ouU57WyID4gd2lyZVwtZHJhd2luZzsKK+WYhuipniA+IGludGVyamVjdGlvbjsKK+aJk+izrSA+IFwobWFrZVwtYVwpXC1iZXQ7CivlhKrmg6AgPiBwcmVmZXJlbnRpYWw7CivlhazloLEgPiBhbm5vdW5jZW1lbnQ7Civlr4bpm4YgPiBjb25jZW50cmF0ZWQ7CivmjojmmYIgPiB0aW1lXC1zZXJ2aWNlOwor5Zyo5peBID4gYnlcLVwoYVwtcGxhY2VcKTsKK+aLvOebpCA+IGNvbGRcLXBsYXR0ZXI7CivmjZDmrL4gPiBkb25hdGVcLW1vbmV5Owor5ZyL5pyJID4gbmF0aW9uYWxpemVkOwor5L6d6LO0ID4gdG9cLWRlcGVuZFwtb247Civns7vkuIogPiB0b1wtYnVja2xlXC11cDsKK+iDjOmboiA+IGRldmlhdGVcLWZyb207CivmjInnhacgPiBhY2NvcmRpbmdcLXRvOwor5YG254S2ID4gaW5jaWRlbnRhbGx5Owor5ZaJ6Y+hID4gbGFyeW5nb3Njb3BlOwor6IOM6ZmwID4gaW5cLXRoZVwtc2hhZGU7CivmvJTnrpcgPiB0b1wtY2FsY3VsYXRlOwor5YWp5Y2DID4gdHdvXC10aG91c2FuZDsKK+aPkuWcliA+IGlsbHVzdHJhdGlvbjsKK+WvqeitsCA+IGRlbGliZXJhdGlvbjsKK+euoeeQhiA+IHRvXC1zdXBlcnZpc2U7CivmooXoirEgPiBwbHVtXC1ibG9zc29tOwor55W254S2ID4gb25seVwtbmF0dXJhbDsKK+aomeWDuSA+IG1hcmtcLWFcLXByaWNlOwor5qOS56GrID4gcm9sbFwtc3VscGh1cjsKK+WtnemghiA+IGZpbGlhbFwtcGlldHk7CivppYXpoK0gPiBzdGVhbWVkXC1yb2xsOwor5L+d566hID4gdGFrZVwtY2FyZVwtb2Y7CivlnoLkuIsgPiB0b1wtaGFuZ1wtZG93bjsKK+ijgeWToSA+IHRvXC1jdXRcLXN0YWZmOwor5riF6YaSID4gY2xlYXJcLWhlYWRlZDsKK+eVsOatpSA+IGFzeW5jaHJvbm91czsKK+ijnOWFhSA+IHRvXC1yZXBsZW5pc2g7Civkvr/np5ggPiBjb25zdGlwYXRpb247Civnl4XluoogPiBob3NwaXRhbFwtYmVkOwor5p6Y6ZG/ID4gaW5jb21wYXRpYmxlOwor5Zqu5b6AID4gdG9cLXllYXJuXC1mb3I7Civoh6rmi5QgPiBmcmVlXC1vbmVzZWxmOwor6Iiq5aSpID4gc3BhY2VcLWZsaWdodDsKK+aNsuWFpSA+IHRvXC1kcmF3XC1pbnRvOwor6auY5a+GID4gaGlnaFwtZGVuc2l0eTsKK+ihqOWcnyA+IHN1cmZhY2VcLXNvaWw7Civos57orZggPiBhcHByZWNpYXRpb247Civmhbbos4AgPiBjb25ncmF0dWxhdGU7CivmtojpmaQgPiB0b1wtZWxpbWluYXRlOwor6KGX5Z2KID4gbmVpZ2hib3Job29kOwor55Ge6ImyID4gbG92ZWx5XC1jb2xvcjsKK+iBveiqqiA+IHRvXC1oZWFyXC10b2xkOwor55W25b+DID4gdG9cLXRha2VcLWNhcmU7CivnlbDmgKcgPiBoZXRlcm9zZXh1YWw7CivkuqTpi5IgPiBjcm9zc1wtc3dvcmRzOwor6IiI5aWuID4gXChiZVwpXC1leGNpdGVkOwor5a6H6IiqID4gc3BhY2VcLWZsaWdodDsKK+emvemhniA+IGJpcmRcLXNwZWNpZXM7Civlgb3lloQgPiBoeXBvY3JpdGljYWw7CivmirHmhKcgPiBmZWVsXC1hc2hhbWVkOwor6LKg6LKsID4gaW5cLWNoYXJnZVwtb2Y7Civnj77ooYwgPiBiZVwtaW5cLWVmZmVjdDsKK+WxiOacjSA+IHRvXC1zdXJyZW5kZXI7CivmuJvnt6kgPiB0b1wtc2xvd1wtZG93bjsKK+S4i+m9kiA+IGJvdHRvbVwtdGVldGg7CivlqpLpq5QgPiBcKG5ld3NcKVwtbWVkaWE7Civnq5/nhLYgPiB1bmV4cGVjdGVkbHk7CivpqZrmhJUgPiBhc3RvbmlzaG1lbnQ7CivnlbbloLQgPiBhdFwtdGhlXC1zY2VuZTsKK+Wpmum9oSA+IG1hcnJ5aW5nXC1hZ2U7CivmirHlsYggPiBmZWVsXC13cm9uZ2VkOwor6aOf6K2cID4gY29va2VyeVwtYm9vazsKK+S4pumdniA+IHJlYWxseVwtaXNuJyd0Owor56qB56C0ID4gYnJlYWt0aHJvdWdoOwor5L615pmoID4gdG93YXJkc1wtZGF3bjsKK+a8ouWfjiA+IHNlb3VsXCxcLWtvcmVhOwor5bCR5pW4ID4gc21hbGxcLW51bWJlcjsKK+eVtuWInSA+IGF0XC10aGF0XC10aW1lOwor5ouM5ZKMID4gbWl4XC1hbmRcLXN0aXI7CivmtYHpgJogPiB0b1wtY2lyY3VsYXRlOwor5ZKo6KmiID4gY29uc3VsdGF0aXZlOwor5omS5ouJID4gcHVzaFwtbGlnaHRseTsKK+WwiOaUvyA+IGRpY3RhdG9yc2hpcDsKK+mjvOiNiSA+IGZvcmFnZVwtZ3Jhc3M7CivpvLvohZQgPiBuYXNhbFwtY2F2aXR5Owor5rW06KGAID4gYmxvb2RcLXNvYWtlZDsKK+S+neaTmiA+IGFjY29yZGluZ1wtdG87CivlsazlnIsgPiB2YXNzYWxcLXN0YXRlOwor6Yu8562GID4gZm91bnRhaW5cLXBlbjsKK+WBieS6uiA+IGdyZWF0XC1wZXJzb247Civlronnh58gPiBwaXRjaFwtYVwtY2FtcDsKK+WSjOinoyA+IGNvbmNpbGlhdG9yeTsKK+WvpuaWvSA+IHRvXC1pbXBsZW1lbnQ7Civmop3lrZAgPiBhXC1zaG9ydFwtbm90ZTsKK+agueacrCA+IFwobm90XClcLWF0XC1hbGw7CivnqK7nqK4gPiBhbGxcLWtpbmRzXC1vZjsKK+aJi+W4lSA+IGhhbmRrZXJjaGllZjsKK+azlemZoiA+IGNvdXJ0XC1vZlwtbGF3Owor5qC55pOaID4gYWNjb3JkaW5nXC10bzsKK+ays+mmrCA+IGhpcHBvcG90YW11czsKK+eUn+WRvSA+IGxpZmVcLVwoZm9yY2VcKTsKK+S4u+inkiA+IGxlYWRpbmdcLXJvbGU7Civmt6vnjKUgPiBhYm9taW5hdGlvbnM7CivnlKLljbUgPiBsYXlcLVwoYW5cLWVnZ1wpOwor5p6c55quID4gXChmcnVpdFwpXC1wZWVsOwor542o6KOBID4gZGljdGF0b3JzaGlwOwor5LiN6LazID4gaW5zdWZmaWNpZW50Owor5a625pS/ID4gaG91c2VrZWVwaW5nOwor5LiN6LKyID4gaW1tZWFzdXJhYmxlOwor5pma6aSQID4gZXZlbmluZ1wtbWVhbDsKK+S9nOaEmyA+IHRvXC1tYWtlXC1sb3ZlOwor6JiH6IGvID4gc292aWV0XC11bmlvbjsKK+Wus+aAlSA+IHRvXC1iZVwtYWZyYWlkOwor5pma6ZaTID4gZXZlbmluZ1wtdGltZTsKK+S6lOeZviA+IGZpdmVcLWh1bmRyZWQ7CivlkozntIQgPiBwZWFjZVwtdHJlYXR5Owor6K2J6amXID4gcmVhbFwtcmVzdWx0czsKK+aHiuaClCA+IGZlZWxcLXJlbW9yc2U7CivmiaPkuIogPiB0b1wtYnVja2xlXC11cDsKK+S/hOS4rSA+IHJ1c3NpYVwtY2hpbmE7CivkuIDokKwgPiB0ZW5cLXRob3VzYW5kOwor6K6K6YCfID4gc3BlZWRcLWNoYW5nZTsKK+WuieW/gyA+IGZlZWxcLWF0XC1lYXNlOwor5Lq65rCRID4gXCh0aGVcKVwtcGVvcGxlOwor5bCH5L6GID4gXCh0aGVcKVwtZnV0dXJlOwor6aGM6IqxID4gdGl0bGVcLWRlc2lnbjsKK+WPr+ingCA+IGNvbnNpZGVyYWJsZTsKK+S6uuasiiA+IGh1bWFuXC1yaWdodHM7CivotpXkuIogPiBrZWVwXC11cFwtd2l0aDsKK+iCoeW4giA+IHN0b2NrXC1tYXJrZXQ7Civnp7vmsJEgPiB0b1wtaW1taWdyYXRlOwor5rex5oSbID4gYWZmZWN0aW9uYXRlOwor5LuK5pmoID4gdGhpc1wtbW9ybmluZzsKK+WvhuWPiyA+IGNsb3NlXC1mcmllbmQ7CivlrZjlv4MgPiBkZWxpYmVyYXRlbHk7CivljZfpnZ4gPiBzb3V0aFwtYWZyaWNhOwor5LiN56ymID4gaW5jb25zaXN0ZW50Owor5ZGK56S6ID4gYW5ub3VuY2VtZW50Owor5Li555SwID4gcHViaWNcLXJlZ2lvbjsKK+WNiumfvyA+IGhhbGZcLXRoZVwtZGF5Owor5Li755KwID4gcHJpbWFyeVwtcmluZzsKK+S9oOWAkSA+IHlvdVwtXChwbHVyYWxcKTsKK+S4gOebtCA+IGNvbnRpbnVvdXNseTsKK+Wnv+iJsiA+IGdvb2RcLWxvb2tpbmc7CivmmpfnrpcgPiBwbG90XC1hZ2FpbnN0Owor56iN5b6uID4gYVwtbGl0dGxlXC1iaXQ7Civkuq7luqYgPiBpbGx1bWluYXRpb247Civlj4PogIMgPiBjb25zdWx0YXRpb247CivkurrlrrYgPiBvdGhlclwtcGVvcGxlOwor5aOv6bqXID4gbWFnbmlmaWNlbmNlOwor6buo5pS/ID4gcGFydHlcLXBvbGljeTsKK+iZkOW+hSA+IG1pc3RyZWF0bWVudDsKK+aEn+aBqSA+IHRoYW5rc2dpdmluZzsKK+e9sOeQgyA+IHBlbmFsdHlcLXNob3Q7Civosrvln44gPiBwaGlsYWRlbHBoaWE7CivmsrnnlasgPiBvaWxcLXBhaW50aW5nOwor576O5rSyID4gdGhlXC1hbWVyaWNhczsKK+iyp+WbsCA+IGltcG92ZXJpc2hlZDsKK+S6nuWkqiA+IGFzaWFcLXBhY2lmaWM7CivlpKfph48gPiBncmVhdFwtYW1vdW50Owor6aCC55SoID4gdG9cLWJlXC1vZlwtdXNlOwor6LK75YqbID4gZ3JlYXRcLWVmZm9ydDsKK+aal+eBmCA+IGhpZGRlblwtc2hvYWw7Civol6XmlrkgPiBwcmVzY3JpcHRpb247CivkuLvmjIEgPiBwcmVzaWRlXC1vdmVyOwor6YqA5bmVID4gbW92aWVcLXNjcmVlbjsKK+iAgeWutiA+IG5hdGl2ZVwtcGxhY2U7Civmmpfmva4gPiB1bmRlcmN1cnJlbnQ7Civosrflg7kgPiBidXlpbmdcLXByaWNlOwor5aSa6YKKID4gbXVsdGlsYXRlcmFsOwor54++5LujID4gbW9kZXJuXC10aW1lczsKK+S7luS6uiA+IG90aGVyXC1wZXJzb247CivkuYvlvowgPiBhZnRlclwod2FyZHNcKTsKK+aFo+S+iyA+IGNvbnZlbnRpb25hbDsKK+S4puaOkiA+IHNpZGVcLWJ5XC1zaWRlOwor6ICV5ZywID4gYXJpYWJsZVwtbGFuZDsKK+aal+a1gSA+IHVuZGVyY3VycmVudDsKK+a1tOWgtCA+IGJhdGhpbmdcLXNwb3Q7CivkuI3mlpkgPiB1bmV4cGVjdGVkbHk7Civok4voj5wgPiBsZWFmXC1tdXN0YXJkOwor6K2Y56C0ID4gdG9cLXBlbmV0cmF0ZTsKK+S4jeaLmCA+IG5vdFwtc3RpY2tcLXRvOwor6byT5Yu1ID4gdG9cLWVuY291cmFnZTsKK+mereegsiA+IGZpcmVjcmFja2VyczsKK+aEn+WLlSA+IHRvXC1tb3ZlXC1cKHNiXCk7CivmhI/lkbMgPiBzaWduaWZpY2FuY2U7CivkuI3mhKcgPiBiZVwtd29ydGh5XC1vZjsKK+S4jeaEjyA+IHVuZXhwZWN0ZWRseTsKK+mdtue0mSA+IHRhcmdldFwtc2hlZXQ7CivmhIjliqAgPiBhbGxcLXRoZVwtbW9yZTsKK+mBoOmboiA+IHJlbW92ZWRcLWZyb207CivlkozlloQgPiBnb29kXC1uYXR1cmVkOwor6KqN6K2JID4gYXV0aGVudGljYXRlOwor5Yio6b2SID4gZ2Vhclwtc2hhcGluZzsKK+azqOaEjyA+IHRha2VcLW5vdGVcLW9mOwor8KaJhiA+IHRvXC1icmVha1wtb2ZmOwor6aKo5ZGzID4gbG9jYWxcLWZsYXZvcjsKK+e5oeiKsSA+IHRvXC1lbWJyb2lkZXI7Civnn6XorZggPiBpbnRlbGxlY3R1YWw7CivmmpfmjqIgPiBzZWNyZXRcLWFnZW50Owor5pq05oCSID4gdmlvbGVudFwtcmFnZTsKK+S4jeWuuSA+IG5vdFwtdG9sZXJhdGU7CivkuI3lrpwgPiBub3RcLXN1aXRhYmxlOwor54qv5q+SID4gaWxsZWdhbFwtZHJ1ZzsKK+Wkp+iHtCA+IG1vcmVcLW9yXC1sZXNzOwor5aW955yLID4gZ29vZFwtbG9va2luZzsKK+S4jeWmgiA+IG5vdFwtZXF1YWxcLXRvOwor5b6X56WoID4gdm90ZVwtZ2V0dGluZzsKK+a0vuWIpSA+IGRlbm9taW5hdGlvbjsKK+e3mui7uCA+IHRocmVhZFwtc3Bvb2w7CivmnInliKkgPiBhZHZhbnRhZ2VvdXM7CivoqILplrEgPiBzdWJzY3JpcHRpb247CivmgaLlvqkgPiB0b1wtcmVpbnN0YXRlOwor6YCZ6aCFID4gdGhpc1wtXCh0aGluZ1wpOwor5Y+v5oOcID4gaXRcLWlzXC1hXC1waXR5Owor5ama5aSWID4gZXh0cmFtYXJpdGFsOwor5LiN5ZauID4gbm90XC10aGVcLW9ubHk7CivpgYvpgIEgPiB0b1wtdHJhbnNwb3J0Owor5LmL5LiAID4gb25lXC1vZlwtXChzdGhcKTsKK+Wig+mBhyA+IGNpcmN1bXN0YW5jZTsKK+mHjuW/gyA+IHdpbGRcLXNjaGVtZXM7CivmlZfoiIggPiBkaXNhcHBvaW50ZWQ7CivljbvmraUgPiB0b1wtc3RlcFwtYmFjazsKK+S4reS/hCA+IGNoaW5hXC1ydXNzaWE7CivljbHmroYgPiBncmF2ZVwtZGFuZ2VyOwor5Lit5LqeID4gY2VudHJhbFwtYXNpYTsKK+iuiuaApyA+IGRlbmF0dXJhdGlvbjsKK+WOn+aWmSA+IHJhd1wtbWF0ZXJpYWw7CivkuI3liKkgPiB1bmZhdm91cmFibGU7CivkuIDljYMgPiBvbmVcLXRob3VzYW5kOwor54iG55m8ID4gdG9cLWJyZWFrXC1vdXQ7CivlpJrnq5kgPiBtdWx0aXN0YXRpb247CivmsKfmsKMgPiBveHlnZW5cLVwoZ2FzXCk7Civlv7Xml6UgPiBtZW1vcmlhbFwtZGF5Owor5ZCE5ZyLID4gZWFjaFwtY291bnRyeTsKK+S4jeS+vyA+IGluY29udmVuaWVudDsKK+aZguaFiyA+IFwodmVyYlwpXC10ZW5zZTsKK+e+heWIlyA+IHRvXC1zcGVhZFwtb3V0Owor5LiA5YSEID4gMVwtMDBcLW1pbGxpb247CivlvqnmtLsgPiByZXN1cnJlY3Rpb247CivmmrTli5UgPiBpbnN1cnJlY3Rpb247CivpnbbmqZ8gPiB0YXJnZXRcLWRyb25lOwor6YGL6KGMID4gYmVcLWluXC1tb3Rpb247Civnt6joiJ4gPiBjaG9yZW9ncmFwaHk7Civmr5TnhacgPiBhY2NvcmRpbmdcLXRvOwor5aOT57iuID4gdG9cLWNvbXByZXNzOwor6Kiq6I+vID4gdmlzaXRcLWNoaW5hOwor6KqN55+lID4gYWNrbm93bGVkZ2U7Civlj6vlloogPiBleGNsYW1hdGlvbjsKK+mAo+ipniA+IGNvbmp1bmN0aW9uOwor5byK56uvID4gbWFscHJhY3RpY2U7CivpnZ7moLggPiBub25cLW51Y2xlYXI7CivmlLbnqasgPiBhY3F1aXNpdGlvbjsKK+awkeaXjyA+IG5hdGlvbmFsaXR5Owor5pqX5LqVID4gYmxpbmRcLXNoYWZ0Owor5pqX5LitID4gaW5cLXRoZVwtZGFyazsKK+efmuebriA+IHRvXC1mb2N1c1wtb247CivluIPpnosgPiBjbG90aFwtc2hvZXM7Civln4vpoK0gPiBzdGVhbWVkXC1idW47CivliKTomZUgPiB0b1wtc2VudGFuY2U7CivliLvoi6YgPiBoYXJkd29ya2luZzsKK+aomem7niA+IHB1bmN0dWF0aW9uOwor55m96bq1ID4gd2hlYXRcLWZsb3VyOwor5YaS6ZqqID4gdGFrZVwtYVwtcmlzazsKK+eZvem2tCA+IHdoaXRlXC1jcmFuZTsKK+W+gOaYlCA+IGluXC10aGVcLXBhc3Q7CivpgornloYgPiBib3JkZXJcLWFyZWE7CivorpPkvY0gPiB0b1wtYWJkaWNhdGU7CivmgKrlg7sgPiBwZWN1bGlhcml0eTsKK+W+geaUtiA+IGxldnlcLVwoZmluZVwpOwor5q+N5p2/ID4gbW90aGVyYm9hcmQ7CivpnIDmsYIgPiByZXF1aXJlbWVudDsKK+Wkp+alrSA+IGdyZWF0XC1jYXVzZTsKK+aXuuWtoyA+IGJ1c3lcLXNlYXNvbjsKK+W/heWumiA+IGJlXC1ib3VuZFwtdG87CivljYrlubQgPiBoYWxmXC1hXC15ZWFyOwor6Kqy5qGMID4gc2Nob29sXC1kZXNrOwor6ZaT6ZqUID4gY29tcGFydG1lbnQ7CivpgbLnlpEgPiB0b1wtaGVzaXRhdGU7CivpnYjmhJ8gPiBpbnNwaXJhdGlvbjsKK+WkseaVlyA+IGJlXC1kZWZlYXRlZDsKK+iqquacjSA+IHRvXC1wZXJzdWFkZTsKK+WItue0hCA+IHRvXC1yZXN0cmljdDsKK+mej+WbuiA+IGNvbnNvbGlkYXRlOwor5YyF5ousID4gdG9cLWNvbXByaXNlOwor5aal5ZaEID4gYXBwcm9wcmlhdGU7Civovq/oqLwgPiBkaWFsZWN0aWNhbDsKK+eAiem5vSA+IGVwc29tXC1zYWx0czsKK+ikh+mbnCA+IGNvbXBsaWNhdGVkOwor5Y2z5Yi7ID4gaW1tZWRpYXRlbHk7Civli5jmjqIgPiBleHBsb3JhdGlvbjsKK+WNmuWPliA+IHRyeVwtdG9cLWdhaW47CivmlL7mo4QgPiB0b1wtcmVub3VuY2U7CivlhrDom4sgPiBmcm96ZW5cLWVnZ3M7CivpmLvnpJkgPiB0b1wtb2JzdHJ1Y3Q7Civov73nqbYgPiBpbnZlc3RpZ2F0ZTsKK+mDteWxgCA+IHBvc3RcLW9mZmljZTsKK+mbmeaVuCA+IGV2ZW5cLW51bWJlcjsKK+iSkOWwiyA+IHRvXC1sb29rXC1mb3I7Civnmb3pgZMgPiBtb29uJydzXC1wYXRoOwor5YuV5oWLID4gZGV2ZWxvcG1lbnQ7CivmsLjkuYUgPiBldmVybGFzdGluZzsKK+eZvOmAgSA+IHRvXC10cmFuc21pdDsKK+mFjeWCmSA+IHRvXC1hbGxvY2F0ZTsKK+isgOWPliA+IHRyeVwtdG9cLWdhaW47Civmr5TlpoIgPiBmb3JcLWV4YW1wbGU7CivlpJrlsbEgPiBtb3VudGFpbm91czsKK+mbu+W3pSA+IGVsZWN0cmljaWFuOwor57SF6ImyID4gcmVkXC1cKGNvbG9yXCk7Civmj4/ov7AgPiB0b1wtZGVzY3JpYmU7CivljYHlhIQgPiBvbmVcLWJpbGxpb247CivlhbXon7sgPiBzb2xkaWVyXC1hbnQ7Civmr4Dlo54gPiBkZXN0cnVjdGlvbjsKK+WJiua4myA+IHRvXC1jdXRcLWRvd247Civml6XkuK0gPiBqYXBhblwtY2hpbmE7CivpmqjmmYIgPiBhdFwtYW55XC10aW1lOwor6Ki85pu4ID4gY2VydGlmaWNhdGU7Civplbfoq4cgPiBhXC1sb25nXC10YWxrOwor5aSn5Z6LID4gbGFyZ2VcLXNjYWxlOwor6KOc6YG4ID4gYnlcLWVsZWN0aW9uOwor6JC95b6MID4gZmFsbFwtYmVoaW5kOwor5o6o6YGyID4gdG9cLXBvc3Rwb25lOwor5pON5rOVID4gZHJpbGxcLXJ1bGVzOwor6LuN6ZqKID4gYXJteVwtdHJvb3BzOwor5qi56JGJID4gdHJlZVwtbGVhdmVzOwor5Ymb5p62ID4gcmlnaWRcLWZyYW1lOwor6KuH5YiwID4gdG9cLXJlZmVyXC10bzsKK+WGjeiAhSA+IGZ1cnRoZXJtb3JlOwor6Kq/5Yi2ID4gdG9cLW1vZHVsYXRlOwor5Z+655+zID4gY29ybmVyc3RvbmU7CivlvoDkuosgPiBwYXN0XC1ldmVudHM7CivlpKflip8gPiBncmVhdFwtbWVyaXQ7Civoo4Hou40gPiBkaXNhcm1hbWVudDsKK+iqoeWRvSA+IGNvbW1hbmRtZW50Owor5YWn6IejID4gY2hhbWJlcmxhaW47CivlnabolakgPiBtYWduYW5pbW91czsKK+aOouiojiA+IGludmVzdGlnYXRlOwor5aKe5by3ID4gdG9cLWluY3JlYXNlOwor6YG15a6IID4gY29tcGx5XC13aXRoOwor6ZmQ5pa8ID4gcmVzdHJpY3RcLWF0Owor6ZaJ57aTID4gYW1lbm9ycmhvZWE7Civoqo3lh7ogPiByZWNvZ25pdGlvbjsKK+WFjeiBtyA+IGRlZ3JhZGF0aW9uOwor5bel56iLID4gZW5naW5lZXJpbmc7CivoqJjlvpcgPiB0b1wtcmVtZW1iZXI7Civmk7rluIMgPiBvcmRlclwtYWJvdXQ7CivpgI/mmI4gPiB0cmFuc3BhcmVudDsKK+WKm+WcliA+IHRyeVwtaGFyZFwtdG87Civov73mn6UgPiBpbnZlc3RpZ2F0ZTsKK+WFuOemriA+IGNlbGVicmF0aW9uOwor5YiR5pyfID4gcHJpc29uXC10ZXJtOwor57K+57ChID4gdG9cLXNpbXBsaWZ5Owor6Iqx6Iy2ID4gc2NlbnRlZFwtdGVhOwor5pWj5L2IID4gZGlzc2VtaW5hdGU7Civopobmu4UgPiBkZXN0cnVjdGlvbjsKK+ewv+iomCA+IGJvb2trZWVwaW5nOwor6Ke45oCSID4gcHJvdm9jYXRpb247CivmlKrlkowgPiB0b1wtbWl4XC1cKHVwXCk7Civmj4/nuaogPiB0b1wtZGVzY3JpYmU7CivpgLHlubQgPiBhbm5pdmVyc2FyeTsKK+e1leacmyA+IGRlc3BlcmF0aW9uOwor5pWX5LuXID4gbG9zdFwtYmF0dGxlOwor5aKe5aSaID4gdG9cLWluY3JlYXNlOwor57WQ5p2fID4gdGVybWluYXRpb247CivnhKHmhI8gPiBpbmFkdmVydGFudDsKK+mCiuWNgCA+IGJvcmRlclwtYXJlYTsKK+ebuOavlCA+IGNvbXBhcmVkXC10bzsKK+imhuaykiA+IGFubmloaWxhdGVkOwor55yJ5qKiID4gdGlwXC1vZlwtYnJvdzsKK+WIh+aPmyA+IHRvXC1jdXRcLW92ZXI7Civlhannmb4gPiB0d29cLWh1bmRyZWQ7CivoqZXlg7kgPiB0b1wtZXZhbHVhdGU7CivltKnoo4IgPiBidXJzdFwtYXBhcnQ7CivliqDku6UgPiBpblwtYWRkaXRpb247CivmjInpiJUgPiBwdXNoXC1idXR0b247CivovrLmpa0gPiBhZ3JpY3VsdHVyZTsKK+WgseaHiSA+IHJldHJpYnV0aW9uOwor5bm+5bm0ID4gYVwtZmV3XC15ZWFyczsKK+ebvOacmyA+IHRvXC1ob3BlXC1mb3I7Civpmorlk6EgPiB0ZWFtXC1tZW1iZXI7CivooYzouaQgPiB3aGVyZWFib3V0czsKK+aUr+S7mCA+IHBheVwtXChtb25leVwpOwor6KGo6KqeID4gcHJlZGljYXRpdmU7CivoqLvlhoogPiB0b1wtcmVnaXN0ZXI7CivpmYTlsawgPiBzdWJvcmRpbmF0ZTsKK+WBvei7jSA+IHB1cHBldFwtYXJteTsKK+WEquengCA+IG91dHN0YW5kaW5nOwor6auU6LK8ID4gY29uc2lkZXJhdGU7Civln7fmlL8gPiBiZVwtaW5cLXBvd2VyOwor6a2a56u/ID4gZmlzaGluZ1wtcm9kOwor5biM5pybID4gcm9cLXdpc2hcLWZvcjsKK+e0hOacgyA+IGFwcG9pbnRtZW50Owor6auU6KqNID4gcmVhbGl6YXRpb247Civlubjlpb0gPiBmb3J0dW5hdGVseTsKK+aOiOeyiSA+IHBvbGxpbmF0aW9uOwor6KO954mHID4gbW92aWVtYWtpbmc7CivmqZ/mnIMgPiBvcHBvcnR1bml0eTsKK+mXnOaKvCA+IHB1dFwtaW5cLWphaWw7CivoqJjkvY8gPiB0b1wtcmVtZW1iZXI7CivngYzmuokgPiB0b1wtaXJyaWdhdGU7CivpgJrlkYogPiB0b1wtYW5ub3VuY2U7CivpqZXpmb0gPiBibGF6aW5nXC1zdW47Civmv4PnuK4gPiBjb25jZW50cmF0ZTsKK+Wci+exjSA+IG5hdGlvbmFsaXR5Owor5YmN5Lu7ID4gcHJlZGVjZXNzb3I7Civou5/nop8gPiBmbG9wcHlcLWRpc2s7Civou5/nm6QgPiBmbG9wcHlcLWRpc2s7CivlsY/ploAgPiBzY3JlZW5cLWRvb3I7Civmi5zoqKogPiBwYXlcLWFcLXZpc2l0Owor6YCA5Ye6ID4gdG9cLXdpdGhkcmF3Owor5o6h54WkID4gY29hbFwtbWluaW5nOwor5bmz5YehID4gY29tbW9ucGxhY2U7Civmi6zomZ8gPiBwYXJlbnRoZXNpczsKK+S+v+meiyA+IGNsb3RoXC1zaG9lczsKK+a7sumAjyA+IHRvXC1wZXJtZWF0ZTsKK+WBt+iBvSA+IHRvXC1ldmVzZHJvcDsKK+WHuuWFtSA+IHNlbmRcLXRyb29wczsKK+WfueWcnyA+IHRvXC1lYXJ0aFwtdXA7CivplovmiLAgPiBzdGFydFwtYVwtd2FyOwor5YiG5L2IID4gZGlzdHJpYnV0ZWQ7Civov7fkurogPiBmYXNjaW5hdGluZzsKK+WHuuS+hiA+IHRvXC1jb21lXC1vdXQ7Civkv6HpgZMgPiBzaWduYWxcLXBhdGg7CivprZTms5UgPiBlbmNoYW50bWVudDsKK+eUs+iriyA+IGFwcGx5XC1cKGZvclwpOwor6LeR6LuKID4gcmFjaW5nXC1iaWtlOwor5o+P5pG5ID4gdG9cLWRlc2NyaWJlOwor5YWr5bm0ID4gZWlnaHRcLXllYXJzOwor57GM5qy+ID4gZnVuZHJhaXNpbmc7Civln5/lkI0gPiBkb21haW5cLW5hbWU7CivlhavlrZcgPiBjaGFyYWN0ZXJcLTg7Civnm7jkvLwgPiB0b1wtcmVzZW1ibGU7CivmjKrnlKggPiB0b1wtZW1iZXp6bGU7CivnmbzlsZUgPiBkZXZlbG9wbWVudDsKK+ijneaJriA+IGRyZXNzXC11cFwtYXM7Civln47ljYAgPiBjaXR5XC1wcm9wZXI7Civmup3pgJogPiBjb21tdW5pY2F0ZTsKK+eCuuS6hiA+IGluXC1vcmRlclwtdG87Civnmb3lrq4gPiB3aGl0ZVwtaG91c2U7CivlhqDlhpUgPiByb3lhbFwtY3Jvd247Civlg4/mqKMgPiBwcmVzZW50YWJsZTsKK+W3p+WQiCA+IGNvaW5jaWRlbmNlOwor5oiw6LuKID4gd2FyXC1jaGFyaW90Owor55m95aScID4gd2hpdGVcLW5pZ2h0Owor6Iqx5bqXID4gZmxvd2VyXC1zaG9wOwor5o+P5a+rID4gdG9cLWRlc2NyaWJlOwor5L6/6Ka9ID4gYnJpZWZcLWd1aWRlOwor6IiK54mIID4gb2xkXC12ZXJzaW9uOwor5Zug5q2kID4gdGhhdFwtaXNcLXdoeTsKK+Wvpui4kCA+IHRvXC1wcmFjdGljZTsKK+Wwi+imkyA+IHRvXC1sb29rXC1mb3I7CivnkZ7pm6ogPiB0aW1lbHlcLXNub3c7CivlhazlhYMgPiBcKHllYXJcKVwtYVwuZFwuOwor6Imy5oOFID4gcG9ybm9ncmFwaHk7CivkvoboqKogPiBwYXlcLWFcLXZpc2l0Owor55m95YiDID4gbmFrZWRcLXN3b3JkOwor55m85Ye6ID4gdG9cLXNlbmRcLW91dDsKK+WwseiBtyA+IHRha2VcLW9mZmljZTsKK+aLlOeHnyA+IHN0cmlrZVwtY2FtcDsKK+aKiuepqSA+IHRydXN0d29ydGh5Owor5a656LKMID4gY291bnRlbmFuY2U7CivoiJLmnI0gPiBjb21mb3J0YWJsZTsKK+aJi+e6jCA+IGZvcm1hbGl0aWVzOwor5oyJ5pyfID4gb25cLXNjaGVkdWxlOwor6Lip5rC0ID4gdHJlYWRcLXdhdGVyOwor5a6j6KiAID4gZGVjbGFyYXRpb247Civku7/pgKAgPiBjb3VudGVyZmVpdDsKK+Wvpue/kiA+IHRvXC1wcmFjdGljZTsKK+WBt+aHtiA+IHRvXC1nb29mXC1vZmY7CivpvLvpn7MgPiBuYXNhbFwtc291bmQ7Civmn6XorYkgPiBpbnZlc3RpZ2F0ZTsKK+eSsOe5niA+IHRvXC1zdXJyb3VuZDsKK+WbsOWigyA+IHByZWRpY2FtZW50Owor5ruy5r++ID4gcGVyY29sYXRpb247Civnl4XlrrkgPiBzaWNrbHlcLWxvb2s7CivmiJDnuL4gPiBwZXJmb3JtYW5jZTsKK+S6uumWkyA+IG1hbicnc1wtd29ybGQ7Civnq6/nq5kgPiBlbmRcLXN0YXRpb247CivooY3lsIQgPiBkaWZmcmFjdGlvbjsKK+WbnuWgsSA+IFwoaW5cKVwtcmV0dXJuOwor5qOX5qi5ID4ganVqdWJlXC10cmVlOwor5oiW56ixID4gYWxzb1wtY2FsbGVkOwor5ous5bynID4gcGFyZW50aGVzaXM7Civpq5jlo5MgPiBoaWdoXC1oYW5kZWQ7Civku7Loo4EgPiBhcmJpdHJhdGlvbjsKK+WAvOW+lyA+IHRvXC1iZVwtd29ydGg7CivnlbDluLggPiBleGNlcHRpb25hbDsKK+iaseicoiA+IGdyYXNzaG9wcGVyOwor6ZG95a2UID4gYm9yZVwtYVwtaG9sZTsKK+eVtuWxgCA+IGF1dGhvcml0aWVzOwor6auY5ZSxID4gc2luZ1wtbG91ZGx5Owor5LuL6KmeID4gcHJlcG9zaXRpb247CivoiJ7liocgPiBkYW5jZVwtZHJhbWE7CivlgpHlh7ogPiBpbGx1c3RyaW91czsKK+eWhuWgtCA+IGJhdHRsZWZpZWxkOwor5L+h5pyNID4gdG9cLWNvbnZpbmNlOwor6IS+5rCjID4gdGVtcGVyYW1lbnQ7CivkuIrpvZIgPiB1cHBlclwtdGVldGg7CivmhbDol4kgPiBjb25zb2xhdGlvbjsKK+adv+imjyA+IHBsYXRlXC1nYXVnZTsKK+eXheS6uiA+IHNpY2tcLXBlcnNvbjsKK+mRkuWumiA+IHRvXC1hcHByYWlzZTsKK+WCmeS7tiA+IHNwYXJlXC1wYXJ0czsKK+eUn+aIkCA+IGJlXC1wcm9kdWNlZDsKK+S+v+ahtiA+IGNoYW1iZXJcLXBvdDsKK+iEq+awpyA+IGRlb3hpZGF0aW9uOwor5oOF6aGYID4gd2lsbGluZ25lc3M7CivnlJ/mhYsgPiB3YXlcLW9mXC1saWZlOwor5oyH5Ye6ID4gdG9cLWluZGljYXRlOwor5omB5qGDID4gYWxtb25kXC10cmVlOwor6LeL5omIID4gZG9taW5lZXJpbmc7Civkv67lvqkgPiByZXN0b3JhdGlvbjsKK+ethuW/gyA+IHBlbmNpbFwtbGVhZDsKK+S/oeaBryA+IGluZm9ybWF0aW9uOwor5LiN6aGnID4gaW5cLXNwaXRlXC1vZjsKK+eri+azlSA+IGxlZ2lzbGF0aW9uOwor5bCN5pa5ID4gY291bnRlcnBhcnQ7Civnqbrnmb0gPiBibGFua1wtc3BhY2U7CivnlLflpbMgPiBtYWxlXC1mZW1hbGU7CivnlbblgZogPiB0b1wtdHJlYXRcLWFzOwor6Leb5a2QID4gbGFtZVwtcGVyc29uOwor5LqU6JCsID4gNTBcLXRob3VzYW5kOwor5pyJ6LajID4gaW50ZXJlc3Rpbmc7Civkv53lrZggPiB0b1wtY29uc2VydmU7Civmt5jnpZ4gPiB0cm91Ymxlc29tZTsKK+ethuWiqCA+IHBlblwtYW5kXC1pbms7CivolpHppIUgPiBnaW5nZXJicmVhZDsKK+a6q+W6piA+IHRlbXBlcmF0dXJlOwor6LeR5aOYID4gYmFzZXJ1bm5pbmc7CivonJzmoYMgPiBob25leVwtcGVhY2g7CivpkZLkuo4gPiBpblwtbGlnaHRcLW9mOwor5Y+v6amaID4gYXN0b25pc2hpbmc7Civkvr/lrpwgPiBpbmV4cGVuc2l2ZTsKK+S4jei/rSA+IGNhbm5vdFwtY29wZTsKK+aJi+WvqyA+IGhhbmR3cml0aW5nOwor5LiL6LyJID4gdG9cLWRvd25sb2FkOwor6LiP5LiKID4gc2V0XC1mb290XC1vbjsKK+S9nOaWhyA+IGNvbXBvc2l0aW9uOwor5ruy5YWlID4gdG9cLXBlcm1lYXRlOwor55Kw5b2iID4gcmluZ1wtc2hhcGVkOwor5L2I5pmvID4gXChzdGFnZVwpXC1zZXQ7CivmiJLlvosgPiBjb21tYW5kbWVudDsKK+mpmuS6uiA+IGFzdG9uaXNoaW5nOwor6ai35YuVID4gZGlzdHVyYmFuY2U7CivmgrLop4AgPiBwZXNzaW1pc3RpYzsKK+WxrOS4iyA+IHN1Ym9yZGluYXRlOwor576O6LKMID4gZ29vZGxvb2tpbmc7CivnlKjku6UgPiBpblwtb3JkZXJcLXRvOwor6bq76JelID4gYW5hZXN0aGV0aWM7CivlsI/lnosgPiBzbWFsbFwtc2NhbGU7CivmiLDloLQgPiBiYXR0bGVmaWVsZDsKK+mhjOipniA+IGluc2NyaXB0aW9uOwor5L6L5aaCID4gZm9yXC1leGFtcGxlOwor6Laj5ZGzID4gdG9cLWludGVyZXN0Owor5L+h5LuwID4gZmlybVwtYmVsaWVmOwor6IKh5p2xID4gc3RvY2tob2xkZXI7Civpjq7lo5MgPiBzdXBwcmVzc2lvbjsKK+adv+eJmSA+IGZyb250XC10b290aDsKK+azs+iksiA+IHN3aW1cLXRydW5rczsKK+aineS+iyA+IHJlZ3VsYXRpb25zOwor5ZCM6LOqID4gaG9tb2dlbmVvdXM7CivnkrDlooMgPiBlbnZpcm9ubWVudDsKK+mhr+iRlyA+IG91dHN0YW5kaW5nOwor5LqM55m+ID4gdHdvXC1odW5kcmVkOwor5bCx5Lu7ID4gdGFrZVwtb2ZmaWNlOwor5p6c5rGBID4gZnJ1aXRcLWp1aWNlOwor6ICV55WcID4gZmFybVwtYW5pbWFsOwor6YeN6L+UID4gcmV0dXJuXC1cKHRvXCk7CivkuIvokL0gPiB3aGVyZWFib3V0czsKK+S4n+iHiSA+IGh1bWlsaWF0aW9uOwor5rOV6KaPID4gbGVnaXNsYXRpb247CivmiJHlnIsgPiBvdXJcLWNvdW50cnk7CivkvYjlsYAgPiBhcnJhbmdlbWVudDsKK+iuiumAmiA+IGJlXC1mbGV4aWJsZTsKK+m8u+a2lSA+IG5hc2FsXC1tdWN1czsKK+iyuOasviA+IFwoYmFua1wpXC1sb2FuOwor5rqW5YKZID4gcHJlcGFyYXRpb247CivlronlurcgPiBnb29kXC1oZWFsdGg7CivpoJDoqIggPiB0b1wtZm9yZWNhc3Q7CivogbDmmI4gPiBpbnRlbGxpZ2VudDsKK+mHj+ipniA+IG1lYXVyZVwtd29yZDsKK+eri+WNsyA+IGltbWVkaWF0ZWx5Owor5ZCN6JGXID4gbWFzdGVycGllY2U7Civku7vmhI8gPiBhcmJpdHJhcmlseTsKK+WuieWutiA+IHNldHRsZVwtZG93bjsKK+mlkuaBlSA+IGZvcmdpdmVuZXNzOwor5a6H5a6ZID4gb3V0ZXJcLXNwYWNlOwor55Ge5aOrID4gc3dpdHplcmxhbmQ7Civlloflj60gPiBsb3Vkc3BlYWtlcjsKK+aIkOS7vSA+IGNvbXBvc2l0aW9uOwor6aeB5YCSID4gZGVtb2xpc2hcLXNiOwor5rW05rGgID4gcHVibGljXC1iYXRoOwor5Lul5b6AID4gaW5cLXRoZVwtcGFzdDsKK+mhr+ebriA+IG91dHN0YW5kaW5nOwor5aWU6aazID4gcnVuXC1xdWlja2x5Owor54++5bm0ID4gY3VycmVudFwtYWdlOwor6YiU56WoID4gcGFwZXJcLW1vbmV5Owor56S656+EID4gZGVtb25zdHJhdGU7Civmmbrog70gPiBpbnRlbGxpZ2VudDsKK+S6pOaPmyA+IHRvXC1leGNoYW5nZTsKK+miqOazoiA+IGRpc3R1cmJhbmNlOwor6Jel54mpID4gbWVkaWNhbWVudHM7CivphJnpmYsgPiBzdXBlcmZpY2lhbDsKK+iAg+afpSA+IGludmVzdGlnYXRlOwor5aSc6bavID4gbmlnaHRpbmdhbGU7CivppJDlu7MgPiBkaW5pbmdcLWhhbGw7CivljJfpn5MgPiBub3J0aFwta29yZWE7CivkupLmj5sgPiB0b1wtZXhjaGFuZ2U7CivlqIHohIUgPiB0b1wtdGhyZWF0ZW47CivnqbrliY0gPiB1bnByZWNlZGVudDsKK+mgkOe0hCA+IHJlc2VydmF0aW9uOwor56Kw6KaLID4gdG9cLXJ1blwtaW50bzsKK+afpeWHuiA+IHRvXC1maW5kXC1vdXQ7CivljYrpgoogPiBoYWxmXC1vZlwtc3RoOwor5pqX56S6ID4gZHJvcFwtYVwtaGludDsKK+S6pOW+gCA+IGFzc29jaWF0aW9uOwor5rCj6LOqID4gdGVtcGVyYW1lbnQ7Civmm7jms5UgPiBjYWxsaWdyYXBoeTsKK+WNk+i2iiA+IGRpc3RpbmN0aW9uOwor6IKh5YO5ID4gc3RvY2tcLXByaWNlOwor5Lmd5pyIID4gbmludGhcLW1vbnRoOwor5Li75qyKID4gc292ZXJlaWdudHk7CivlpJrppJggPiBzdXBlcmZsdW91czsKK+aBsOeVtiA+IGFwcHJvcHJpYXRlOwor6IG95Y+WID4gaGVhclwtXChuZXdzXCk7CivmhJ/mgKcgPiBzZW5zaWJpbGl0eTsKK+WVhuS6uiA+IGJ1c2luZXNzbWFuOwor56aB5q2iID4gdG9cLXByb2hpYml0Owor56eJ5om/ID4gdGFrZVwtb3JkZXJzOwor5ZSu5YO5ID4gdG9cLXNlbGxcLWZvcjsKK+WsjOWqmiA+IGZsaXJ0YXRpb3VzOwor6aCB56K8ID4gcGFnZVwtbnVtYmVyOwor5Lqk5aq+ID4gdG9cLWhhdmVcLXNleDsKK+S4iua1gSA+IHVwcGVyXC1jbGFzczsKK+mcuOmBkyA+IG92ZXJiZWFyaW5nOwor5rOi54C+ID4gZ3JlYXRcLXdhdmVzOwor5rOi5r+kID4gZ3JlYXRcLXdhdmVzOwor5LiN5q2iID4gaW5jZXNzYW50bHk7CivniK3orbAgPiBjb250cm92ZXJzeTsKK+S4readsSA+IG1pZGRsZVwtZWFzdDsKK+S4ueaWuSA+IGZvbGtcLXJlbWVkeTsKK+mHjeeWiiA+IG92ZXJsYXBwaW5nOwor5Lit5pelID4gY2hpbmFcLWphcGFuOwor5ZCe5rKSID4gdG9cLWVtYmV6emxlOwor6YeN54++ID4gdG9cLXJlYXBwZWFyOwor6aOf5aCCID4gZGluaW5nXC1oYWxsOwor5puy5oqYID4gY29tcGxpY2F0ZWQ7CivpnbboiLkgPiB0YXJnZXRcLXNoaXA7CivljYPokKwgPiB0ZW5cLW1pbGxpb247CivkuIDmnIggPiBmaXJzdFwtbW9udGg7Civniq/nl4UgPiB0b1wtZmFsbFwtaWxsOwor5ZCM5q2lID4gc3luY2hyb25vdXM7Civlk7rkubMgPiBicmVhc3RcLWZlZWQ7Civoqr/oroogPiB0b1wtbW9kdWxhdGU7CivkuLvlvLUgPiB0b1wtYWR2b2NhdGU7CivlqZrmnJ8gPiB3ZWRkaW5nXC1kYXk7CivmmpfmrrogPiBhc3Nhc3NpbmF0ZTsKK+avm+ifsiA+IGNhdGVycGlsbGFyOwor5Li75bitID4gY2hhaXJwZXJzb247CivpgorpmbIgPiBib3JkZXJcLWFyZWE7CivljbHnr6QgPiBkZWF0aGx5XC1pbGw7CivkupLli5UgPiBpbnRlcmFjdGl2ZTsKK+WmlueyviA+IGV2aWxcLXNwaXJpdDsKK+S4reW5tCA+IG1pZGRsZVwtYWdlZDsKK+iyneS4mCA+IHNoZWxsXC1tb3VuZDsKK+aEj+WQkSA+IGRpc3Bvc2l0aW9uOwor5rKI5r6xID4gcHJlY2lwaXRhdGU7Civlj5bmsbogPiBkZXBlbmRcLXVwb247CivnuYHopIcgPiBjb21wbGljYXRlZDsKK+malOmboiA+IHRvXC1zZXBhcmF0ZTsKK+S4ieW5tCA+IHRocmVlXC15ZWFyczsKK+malOmWiyA+IHRvXC1zZXBhcmF0ZTsKK/ChvbEgPiBhXC1oaWdoXC1oaWxsOwor5LiL5bGsID4gc3Vib3JkaW5hdGU7CivkuIrlsaQgPiB1cHBlclwtbGF5ZXI7CivnubznuowgPiB0b1wtY29udGludWU7Civlo6/op4AgPiBzcGVjdGFjdWxhcjsKK+aUv+iuiiA+IGNvdXBcLWQnJ2V0YXQ7CivnpZ7lrbggPiB0aGVvbG9naWNhbDsKK+e5geiPryA+IGZsb3VyaXNoaW5nOwor6aGM5a2XID4gaW5zY3JpcHRpb247CivlkIjlvbEgPiBqb2ludFwtcGhvdG87CivlpoLnlasgPiBwaWN0dXJlc3F1ZTsKK+S4jeWgqiA+IGNhbm5vdFwtYmVhcjsKK+iXpeWTgSA+IG1lZGljYW1lbnRzOwor6aCG5oeJID4gY29tcGx5XC13aXRoOwor57WC6bueID4gZGVzdGluYXRpb247CivniIbnq7kgPiBmaXJlY3JhY2tlcjsKK+W+l+eXhSA+IHRvXC1mYWxsXC1pbGw7CivpgI/pnLIgPiB0b1wtbGVha1wtb3V0Owor6Zi76ZqUID4gdG9cLXNlcGFyYXRlOwor54m55qyKID4gcHJlcm9nYXRpdmU7CivlpKrnqbogPiBvdXRlclwtc3BhY2U7CivliIbpm6IgPiB0b1wtc2VwZXJhdGU7CivnpoHku6QgPiBwcm9oaWJpdGlvbjsKK+S4jeWFjSA+IHVuYXZvaWRhYmxlOwor6KqT57SEID4gaG9ub3JcLWJvdW5kOwor6K2J5pu4ID4gY3JlZGVudGlhbHM7CivmsojmgJ0gPiBjb250ZW1wbGF0ZTsKK+ino+mHiyA+IGV4cGxhbmF0aW9uOwor5YiG6ZaLID4gdG9cLXNlcGFyYXRlOwor56SB5bO2ID4gcmVlZlwtaXNsYW5kOwor6YCa6YGOID4gYnlcLW1lYW5zXC1vZjsKK+i/jumiqCA+IGluXC10aGVcLXdpbmQ7CivkuIrku7sgPiB0YWtlXC1vZmZpY2U7CivlpoLmraQgPiBpblwtdGhpc1wtd2F5Owor6KuW54itID4gY29udHJvdmVyc3k7CivmgqDkuYUgPiBlc3RhYmxpc2hlZDsKK+S4iuS4iyA+IHVwXC1hbmRcLWRvd247CivmgZDlmocgPiB0b1wtdGhyZWF0ZW47CivntKDpo58gPiB2ZWdldGFibGVzOwor57iu55+tID4gdG9cLWN1cnRhaWw7CivmlLnntYQgPiByZW9yZ2FuaXplOwor5pOB6K23ID4gdG9cLWVuZG9yc2U7CivpgLLooYwgPiB0b1wtYWR2YW5jZTsKK+WllOazoiA+IHJ1c2hcLWFib3V0Owor5b6M5q+NID4gc3RlcG1vdGhlcjsKK+aVo+eZvCA+IGRpc3RyaWJ1dGU7CivlpLHngasgPiBjYXRjaFwtZmlyZTsKK+iqleeUnyA+IHRvXC1iZVwtYm9ybjsKK+WkmueIviA+IFwoYm9iXClcLWRvbGU7CivlvbzmraQgPiBlYWNoXC1vdGhlcjsKK+mgkOWFiCA+IGJlZm9yZWhhbmQ7Civpl5zploAgPiBjbG9zZVwtZG93bjsKK+mBleiDjCA+IHRvXC12aW9sYXRlOwor57Wx6KiIID4gc3RhdGlzdGljczsKK+WHveizvCA+IG1haWxcLW9yZGVyOwor6aCQ5YKZID4gdG9cLXByZXBhcmU7Civlo4Hnq4sgPiBcKG9mXC1jbGlmZnM7CivmmKXlraMgPiBzcHJpbmd0aW1lOwor5pGY6YyEID4gdG9cLWV4dHJhY3Q7CivpoJLkvYggPiBwcm9tdWxnYXRlOwor5q+P5qyhID4gZXZlcnlcLXRpbWU7Civnt6jnqIsgPiB0b1wtcHJvZ3JhbTsKK+WIhuipniA+IHBhcnRpY2lwbGU7CivlvozmnJ8gPiBsYXRlXC1zdGFnZTsKK+aViOeUqCA+IHVzZWZ1bG5lc3M7Civns6fpo58gPiBmb29kc3R1ZmZzOwor6I2S6YeOID4gd2lsZGVybmVzczsKK+aSkuisiiA+IHRlbGxcLWFcLWxpZTsKK+eHg+eHkiA+IGNvbWJ1c3Rpb247CivlvITnm7QgPiBzdHJhaWdodGVuOwor6YG356e7ID4gdG9cLW1pZ3JhdGU7CivlpKfmsKMgPiBhdG1vc3BoZXJlOwor6KqN54K6ID4gdG9cLWJlbGlldmU7CivpmY3okL0gPiB0b1wtZGVzY2VuZDsKK+WJjeiAhSA+IHRoZVwtZm9ybWVyOwor5pWI546HID4gZWZmaWNpZW5jeTsKK+mdtuW/gyA+IGJ1bGwnJ3NcLWV5ZTsKK+WLg+eEtiA+IGFnaXRhdGVkbHk7Civnop/lrZAgPiBzbWFsbFwtZGlzaDsKK+ism+W4qyA+IGluc3RydWN0b3I7Civlj5bku6MgPiBzdWJzdGl0dXRlOwor5paw5pWZID4gcHJvdGVzdGFudDsKK+WkmuasoSA+IG1hbnlcLXRpbWVzOwor5aWH5pW4ID4gb2RkXC1udW1iZXI7Civlv4XlsIcgPiBpbmV2aXRhYmx5Owor6Zmw57K+ID4gc2V4XC1mbHVpZHM7CivlppblrIggPiBlbmNoYW50aW5nOwor54uC5LqCID4gaHlzdGVyaWNhbDsKK+e5geamriA+IHByb3NwZXJvdXM7Civnubzmib8gPiB0b1wtaW5oZXJpdDsKK+aTjee4sSA+IHRvXC1vcGVyYXRlOwor5YWo6Z2iID4gYWxsXC1hcm91bmQ7CivljpjljYcgPiBjZW50aWxpdGVyOwor6Kq/5pW0ID4gYWRqdXN0bWVudDsKK+Wmk+WlsyA+IHByb3N0aXR1dGU7CivojZLorKwgPiByaWRpY3Vsb3VzOwor55m96aCtID4gaG9hcnlcLWhlYWQ7CivmsbrkuI0gPiBub3RcLWF0XC1hbGw7CivoqqrmmI4gPiB0b1wtZXhwbGFpbjsKK+WHuuiJsiA+IHJlbWFya2FibGU7CivlpbPlqb8gPiBzb25cLWluXC1sYXc7CivnibnliKUgPiBlc3BlY2lhbGx5Owor5YWN6ZmkID4gdG9cLXByZXZlbnQ7CivlpqXljZQgPiBjb21wcm9taXNlOwor5beo6LyqID4gbGFyZ2VcLXNoaXA7CivnhoTmu4UgPiBleHRpbmd1aXNoOwor54Wn54mHID4gcGhvdG9ncmFwaDsKK+mZhOethiA+IHBvc3RzY3JpcHQ7Civopqroh6ogPiBwZXJzb25hbGx5Owor5pS55q2jID4gdG9cLWNvcnJlY3Q7CivljYrlnJMgPiBzZW1pY2lyY2xlOwor6YGV54qvID4gdG9cLXZpb2xhdGU7CivniK3lpaogPiBmaWdodFwtb3ZlcjsKK+efreacnyA+IHNob3J0XC10ZXJtOwor5q+P5bm0ID4gZXZlcnlcLXllYXI7CivmlbXmiYsgPiBhbnRhZ29uaXN0Owor5Y2w5YOPID4gaW1wcmVzc2lvbjsKK+eyvumAmiA+IHByb2ZpY2llbnQ7CivlvojlpKcgPiB0cmVtZW5kb3VzOwor55m96YWSID4gc3Bpcml0XC11c3U7CivmmI7kuq4gPiBicmlnaHRuZXNzOwor6I2J6I6TID4gc3RyYXdiZXJyeTsKK+WgseeroCA+IG5ld3NwYXBlcnM7CivlpJrlubQgPiBtYW55XC15ZWFyczsKK+iqnuW9mSA+IHZvY2FidWxhcnk7Civml6nlhYggPiBwcmV2aW91c2x5Owor54mM5YO5ID4gbGlzdFwtcHJpY2U7Civlt6vooZMgPiB3aXRjaGNyYWZ0Owor6YGO5rihID4gdHJhbnNpdGlvbjsKK+aOoumaqiA+IHRvXC1leHBsb3JlOwor5aSn5a24ID4gdW5pdmVyc2l0eTsKK+eEoeeQhiA+IGlycmF0aW9uYWw7CivljYrlg7kgPiBoYWxmXC1wcmljZTsKK+WNgOWIpSA+IGRpZmZlcmVuY2U7CivmloflrbggPiBsaXRlcmF0dXJlOwor5b6e5YmNID4gcHJldmlvdXNseTsKK+mXnOiBryA+IGJlXC1yZWxhdGVkOwor5Zyw6ZyHID4gZWFydGhxdWFrZTsKK+ingOecviA+IHNwZWN0YXRvcnM7CivmjpLpmoogPiB0b1wtbGluZVwtdXA7CivliIbnmbwgPiBkaXN0cmlidXRlOwor5pSq5pO+ID4gdG9cLWRpc3R1cmI7CivmlbjlrbggPiBtYXRoZW1hdGljOwor54ax5b+DID4gZW50aHVzaWFzbTsKK+mbu+WtkCA+IGVsZWN0cm9uaWM7Civnmb3oqbEgPiB2ZXJuYWN1bGFyOwor54K457OVID4gZnJpZWRcLWNha2U7CivloIbnqY0gPiBhY2N1bXVsYXRlOwor5pWj5bCEID4gc2NhdHRlcmluZzsKK+iTi+S4liA+IHVucml2ZWxsZWQ7Civnt6jmjpIgPiB0b1wtYXJyYW5nZTsKK+aNlemtmiA+IGNhdGNoXC1maXNoOwor5Ye655SfID4gdG9cLWJlXC1ib3JuOwor5YWB6Ku+ID4gdG9cLXByb21pc2U7Civoqr/lkowgPiBoYXJtb25pb3VzOwor5b6M5L6GID4gYWZ0ZXJ3YXJkczsKK+Wkp+WWnCA+IGV4dWx0YXRpb247CivmlL/lupwgPiBnb3Zlcm5tZW50Owor6Kit5pa9ID4gZmFjaWxpdGllczsKK+aWueS+vyA+IGNvbnZlbmllbnQ7CivmjqXpgJogPiB0b1wtY29ubmVjdDsKK+atpOW+jCA+IGFmdGVyXC10aGlzOwor5bqn5qiZID4gY29vcmRpbmF0ZTsKK+e2k+attyA+IGV4cGVyaWVuY2U7CivmqILop4AgPiBvcHRpbWlzdGljOwor5aSq5Y+kID4gaW1tZW1vcmlhbDsKK+mbouWpmiA+IHRvXC1kaXZvcmNlOwor54eI5aGUID4gbGlnaHRob3VzZTsKK+WHuueJiCA+IHRvXC1wdWJsaXNoOwor6KqH5aSnID4gZXhhZ2dlcmF0ZTsKK+WFteiIuSA+IG1hblwtb2ZcLXdhcjsKK+WKoOW3niA+IGNhbGlmb3JuaWE7CivlgrfpoqggPiBjYXRjaFwtY29sZDsKK+aUvuWwhCA+IHRvXC1yYWRpYXRlOwor5q+U5L6LID4gcHJvcG9ydGlvbjsKK+mBt+W+mSA+IHRvXC1taWdyYXRlOwor6Zqo5b6MID4gc29vblwtYWZ0ZXI7CivliY3mma8gPiBmb3JlZ3JvdW5kOwor6YG35bu2ID4gbG9uZ1wtZGVsYXk7Civoo5zoqp4gPiBjb21wbGVtZW50Owor5Yqg5a+GID4gdG9cLWVuY3J5cHQ7CivmlbTlkIggPiB0b1wtY29uZm9ybTsKK+mBleaKlyA+IHRvXC1kaXNvYmV5Owor55uj552jID4gdG9cLWNvbnRyb2w7CivmloflhbcgPiBzdGF0aW9uZXJ5Owor5q+P5Lq6ID4gcGVyXC1wZXJzb247CivpmLvmraIgPiB0b1wtcHJldmVudDsKK+mYsuawtCA+IHdhdGVycHJvb2Y7CivpmLLmraIgPiB0b1wtcHJldmVudDsKK+mAgOatpSA+IGRlZ2VuZXJhdGU7CivpganluqYgPiBtb2RlcmF0ZWx5Owor6YGg5b6BID4gZXhwZWRpdGlvbjsKK+eZveiHiSA+IHdoaXRlXC1mYWNlOwor57i95YWxID4gYWx0b2dldGhlcjsKK+ino+aekCA+IHRvXC1hbmFseXplOwor6Kmm5ZyWID4gdG9cLWF0dGVtcHQ7CivoiabovIkgPiBzaGlwXC1iYXNlZDsKK+efpeWQjSA+IHdlbGxcLWtub3duOwor5aSa5LqLID4gbWVkZGxlc29tZTsKK+WGsOeQgyA+IGljZVwtaG9ja2V5Owor6Kej5pS+ID4gbGliZXJhdGlvbjsKK+WBvemggiA+IGZhbHNlXC1yb29mOwor6auY6ZqOID4gaGlnaFwtbGV2ZWw7CivmjY/pgKAgPiB0b1wtbWFrZVwtdXA7CivliIbmnpAgPiB0b1wtYW5hbHl6ZTsKK+aTgeaKsSA+IHRvXC1lbWJyYWNlOwor6Zu25LiLID4gYmVsb3dcLXplcm87Civlt67nlbAgPiBkaWZmZXJlbmNlOwor5pS+5Ye6ID4gdG9cLWxldFwtb2ZmOwor5YWs55+zID4gaGVjdG9saXRlcjsKK+aUu+WFiyA+IHRvXC1jYXB0dXJlOwor5aCx5pW4ID4gbnVtYmVyXC1vZmY7CivmlLblhaUgPiB0b1wtdGFrZVwtaW47CivoqZ7lhbggPiBkaWN0aW9uYXJ5Owor6Kit5ZyoID4gbG9jYXRlZFwtYXQ7CivpmZDluqYgPiBsaW1pdGF0aW9uOwor6KOx57OKID4gd2FsbFwtcGFwZXI7CivmqqLmn6UgPiBpbnNwZWN0aW9uOwor54CG6IG3ID4gd3Jvbmdkb2luZzsKK+W6h+W7lSA+IFwob2ZcLWFcLXRyZWU7CivpmbDlpKkgPiBjbG91ZHlcLWRheTsKK+e1guaWvCA+IGV2ZW50dWFsbHk7CivoqILlqZogPiBlbmdhZ2VtZW50Owor6Zm45Z+6ID4gbGFuZFwtYmFzZWQ7Civlu5rlj7ggPiBjb29rXCxcLWNoZWY7CivlgrPoqqogPiBpdFwtaXNcLXNhaWQ7Civpq5jpgJ8gPiBoaWdoXC1zcGVlZDsKK+WItuWumiA+IHRvXC1kcmF3XC11cDsKK+mAn+WwhCA+IHJhcGlkXC1maXJlOwor6YG65YKzID4gaGVyZWRpdGFyeTsKK+iIiei+piA+IHRvXC1jb25kdWN0Owor5Yip5a6zID4gZm9ybWlkYWJsZTsKK+aUquS6giA+IHRvXC1jb25mdXNlOwor5YWl542EID4gZ29cLXRvXC1qYWlsOwor57Gz57KJID4gcmljZVwtZmxvdXI7Civns77mraMgPiB0b1wtY29ycmVjdDsKK+imquaJiyA+IHBlcnNvbmFsbHk7CivovrLmnZEgPiBydXJhbFwtYXJlYTsKK+WJr+WIiiA+IHN1cHBsZW1lbnQ7Civmk43loLQgPiBwbGF5Z3JvdW5kOwor5Z+65pa8ID4gYmVjYXVzZVwtb2Y7CivooY3oroogPiB0b1wtZGV2ZWxvcDsKK+WFqOeEtiA+IGNvbXBsZXRlbHk7CivlnJjogZogPiB0b1wtcmV1bml0ZTsKK+eZveeLkCA+IGFyY3RpY1wtZm94Owor5pOB5aGeID4gY29uZ2VzdGlvbjsKK+iojuWOrSA+IGRpc2d1c3Rpbmc7CivpgZXlgrIgPiB0b1wtZGlzb2JleTsKK+eZveeGviA+IHdoaXRlXC1oZWF0Owor55m954axID4gd2hpdGVcLWhlYXQ7Civnmb3nhoogPiBwb2xhclwtYmVhcjsKK+eZveeFpCA+IGFudGhyYWNpdGU7CivlgJrpnaAgPiB0b1wtbGVhblwtb247CivlubzlpbMgPiB5b3VuZ1wtZ2lybDsKK+ingOWvnyA+IHRvXC1vYnNlcnZlOwor5YW15rOVID4gYXJ0XC1vZlwtd2FyOwor55W26YG4ID4gYmVcLWVsZWN0ZWQ7CivmkZjmioQgPiB0b1wtZXh0cmFjdDsKK+ebo+aOpyA+IHRvXC1tb25pdG9yOwor5aCk5bK4ID4gZW1iYW5rbWVudDsKK+e1kOWxgCA+IGNvbmNsdXNpb247CivmrKDkvbMgPiBzdWJvcHRpbWFsOwor6YCx5YiwID4gdGhvdWdodGZ1bDsKK+imj+W+iyA+IGRpc2NpcGxpbmU7CivnrqHovYQgPiBhZG1pbmlzdGVyOwor5bi45bi4ID4gZnJlcXVlbnRseTsKK+aoueaogSA+IHRyZWVcLXN0dW1wOwor6KWv5omYID4gdG9cLXNldFwtb2ZmOwor5pON5YW4ID4gZHJpbGxcLWJvb2s7Civot5HppqwgPiBob3JzZVwtcmFjZTsKK+aqouWvnyA+IHRvXC1pbnNwZWN0Owor5beo5pifID4gZ2lhbnRcLXN0YXI7CivpmYTliqAgPiBhZGRpdGlvbmFsOwor5pON5L2cID4gdG9cLW9wZXJhdGU7Civnm7jlsI0gPiByZWxhdGl2ZWx5Owor54Sh5YO5ID4gaW52YWx1YWJsZTsKK+Wxj+mZpCA+IGdldFwtcmlkXC1vZjsKK+aQj+aWlyA+IHRvXC13cmVzdGxlOwor5ouc6KiXID4gcmVxdWVzdFwtc2I7CivmjpLnkIMgPiB2b2xsZXliYWxsOwor57SA5b6LID4gZGlzY2lwbGluZTsKK+W6l+S4uyA+IHNob3BcLW93bmVyOwor55O26aC4ID4gYm90dGxlbmVjazsKK+W5q+WKqSA+IGFzc2lzdGFuY2U7Civluavlh7YgPiBhY2NvbXBsaWNlOwor5YiG5YilID4gZGlmZmVyZW5jZTsKK+WFrOaSriA+IG1pbGxpbGl0ZXI7CivntZDlkIggPiB0b1wtY29tYmluZTsKK+exg+eQgyA+IGJhc2tldGJhbGw7CivmirHosqAgPiBhc3BpcmF0aW9uOwor566X6KGTID4gYXJpdGhtZXRpYzsKK+aOqOa4rCA+IGNvbmplY3R1cmU7CivopoHloZ4gPiBzdHJvbmdob2xkOwor55m95peXID4gd2hpdGVcLWZsYWc7CivmvJToroogPiB0b1wtZGV2ZWxvcDsKK+a7v+i2syA+IHRvXC1zYXRpc2Z5Owor6amF6YCQID4gYmFuaXNobWVudDsKK+ihqOekuiA+IHRvXC1leHByZXNzOwor6L6y5ZySID4gcGxhbnRhdGlvbjsKK+mrmOe0miA+IGhpZ2hcLWxldmVsOwor5oqV6LOHID4gaW52ZXN0bWVudDsKK+eci+WIsCA+IHNlZVwtXCh0aGF0XCk7Civmj5DmmIcgPiB0b1wtcHJvbW90ZTsKK+WFjOaPmyA+IHRvXC1jb252ZXJ0Owor5YWs5byVID4gaGVjdG9tZXRlcjsKK+mnlemmrSA+IHRvXC1jb250cm9sOwor5bCI6ZaAID4gc3BlY2lhbGlzdDsKK+eci+S+hiA+IGFwcGFyZW50bHk7Civoh4noibIgPiBjb21wbGV4aW9uOwor6I2J5Y+iID4gdW5kZXJicnVzaDsKK+WFvOWuuSA+IGNvbXBhdGlibGU7Civou43muK8gPiBuYXZhbFwtcG9ydDsKK+aMieeriyA+IG9yZGluYXRpb247CivnlJ/oqIggPiBsaXZlbGlob29kOwor5o6M5quDID4gc2hvcGtlZXBlcjsKK+ihqOePviA+IGV4cHJlc3Npb247CivlhanlsrggPiBiaWxhdGVyaWFsOwor5YWx5a2YID4gdG9cLWNvZXhpc3Q7Civlm5rniq8gPiBhXC1wcmlzb25lcjsKK+WBiee4viA+IGdyZWF0XC1hY3RzOwor55u45LqSID4gZWFjaFwtb3RoZXI7CivooY3nlJ8gPiBkZXJ2aWF0aXZlOwor5Yaw5YiAID4gaWNlXC1za2F0ZXM7CivmjqXmlLYgPiB0b1wtcmVjZWl2ZTsKK+eUqOiZlSA+IHVzZWZ1bG5lc3M7CivmioDooZMgPiB0ZWNobm9sb2d5Owor6Iqx5omYID4gcmVjZXB0YWNsZTsKK+Wuv+mhjCA+IGFzc2lnbm1lbnQ7CivprZrmjpIgPiBmaXNoXC1zdGVhazsKK+aMh+eUsiA+IGZpbmdlcm5haWw7CivlrbjpvaEgPiBzY2hvb2xcLWFnZTsKK+aNqOajhCA+IHRvXC1naXZlXC11cDsKK+W3ruWIpSA+IGRpZmZlcmVuY2U7Civkvb/phokgPiBpbnRveGljYXRlOwor5ouY56aBID4gY29uc3RyYWludDsKK+Wci+acgyA+IHBhcmxpYW1lbnQ7CivotoXotoogPiB0b1wtc3VycGFzczsKK+aOqOW7oyA+IHBvcHVsYXJpemU7CivkvaPph5EgPiBjb21taXNzaW9uOwor55m95ZaJID4gZGlwaHRoZXJpYTsKK+aOiOaEjyA+IHRvXC1pbnNwaXJlOwor5YWs5YiGID4gY2VudGltZXRlcjsKK+ethuiAhSA+IHRoZVwtYXV0aG9yOwor5L+d6IKyID4gY2hpbGRcLWNhcmU7Civnmb3ljYAgPiB3aGl0ZVwtYXJlYTsKK+aPueWCtSA+IGJlXC1pblwtZGVidDsKK+a8q+eVqyA+IGNhcmljYXR1cmU7CivlgZzngasgPiBjZWFzZVwtZmlyZTsKK+iJr+W/gyA+IGNvbnNjaWVuY2U7Civllq7oqr8gPiBtb25vdG9ub3VzOwor6KGo5piOID4gbWFrZVwta25vd247CivmipXnqL8gPiBjb250cmlidXRlOwor5qih5Lu/ID4gdG9cLWltaXRhdGU7CivnmbzkvYggPiB0b1wtcmVsZWFzZTsKK+ainee0hCA+IHRyZWF0eXBhY3Q7CivlsI7oiKogPiBuYXZpZ2F0aW9uOwor5o6S5aSWID4geGVub3Bob2JpYzsKK+WwjuiHtCA+IHRvXC1sZWFkXC10bzsKK+WxleekuiA+IHRvXC1vcGVuXC11cDsKK+Wwi+iIiyA+IHRvXC1wcm92b2tlOwor5YWI5L6LID4gYW50ZWNlZGVudDsKK+a7hee1lSA+IGV4dGluZ3Vpc2g7Civos5PppKggPiBndWVzdGhvdXNlOwor5qiT5LiLID4gZG93bnN0YWlyczsKK+aPkOWAoSA+IHRvXC1wcm9tb3RlOwor5omT57WQID4gdGllXC1hXC1rbm90Owor6IeG5risID4gYXNzdW1wdGlvbjsKK+iIiOaXuiA+IHByb3NwZXJvdXM7CivlsrjmqJkgPiBsaWdodGhvdXNlOwor5ouU5rKzID4gdHVnXC1vZlwtd2FyOwor55Sf55SiID4gdG9cLXByb2R1Y2U7Civoo5zlhJ8gPiBjb21wZW5zYXRlOwor5Lq66auUID4gaHVtYW5cLWJvZHk7Civmjqjlh7ogPiB0b1wtcmVsZWFzZTsKK+iDnuihoyA+IGFmdGVyYmlydGg7CivmjJbmjpggPiBleGNhdmF0aW9uOwor5Zub5bm0ID4gZm91clwteWVhcnM7CivppJDppKggPiByZXN0YXVyYW50Owor5oyH5o+uID4gdG9cLWNvbmR1Y3Q7CivogZbpnYggPiBob2x5XC1naG9zdDsKK+aMh+aOpyA+IGFjY3VzYXRpb247CivmiYvnqL8gPiBtYW51c2NyaXB0Owor5oq55rK5ID4gdG9cLWFubm9pbnQ7CivooajlsLogPiByZWFyXC1zaWdodDsKK+eVoualrSA+IGdyYWR1YXRpb247Civlm7rln7cgPiBwZXJzaXN0ZW50Owor5p+l6KmiID4gdG9cLWlucXVpcmU7Civpo6/ppKggPiByZXN0YXVyYW50Owor55aR5oWuID4gaGVzaXRhdGlvbjsKK+WWieiIjCA+IG1vdXRocGllY2U7Civkvr/nlbYgPiBjb252ZW5pZW50Owor6IGv6YCaID4gY29ubmVjdGlvbjsKK+mnkOe0riA+IHRvXC1zdGF0aW9uOwor57C95Ye6ID4gdG9cLWxvZ1wtb2ZmOwor6auY5bGkID4gaGlnaFwtbGV2ZWw7CivppIXpkLogPiBiYWtpbmdcLXBhbjsKK+WxouasoSA+IHJlcGVhdGVkbHk7CivpjpfnrqEgPiBndW5cLWJhcnJlbDsKK+mQteadvyA+IGlyb25cLXBhbmVsOwor6Y+I55KwID4gY2hhaW5cLWxpbms7CivmjYnlj5YgPiB0b1wtY2FwdHVyZTsKK+erreeboSA+IGV4aGF1c3Rpb247Civou43kurogPiBzZXJ2aWNlbWFuOwor5oSP6aGYID4gYXNwaXJhdGlvbjsKK+iAgemgrSA+IG9sZFwtZmVsbG93Owor54++6LGhID4gYXBwZWFyYW5jZTsKK+mOrueXmyA+IGFuYWxnZXNpYWM7Civoh6rlsIogPiBzZWxmXC1wcmlkZTsKK+Wumue+qSA+IGRlZmluaXRpb247Civnq7bniK0gPiB0b1wtY29tcGV0ZTsKK+WvpuePviA+IHRvXC1hY2hpZXZlOwor5YK35LqhID4gY2FzdWFsdGllczsKK+aIqueEtiA+IGNvbXBsZXRlbHk7Civmpa3kvZkgPiBzcGFyZVwtdGltZTsKK+ihjOWIlyA+IHByb2Nlc3Npb247Civnl4XlgYcgPiBzaWNrXC1sZWF2ZTsKK+acn+mZkCA+IHRpbWVcLWxpbWl0Owor5oqK5oiyID4gYWNyb2JhdGljczsKK+a2iOiyuyA+IHRvXC1jb25zdW1lOwor6KGM5Lq6ID4gcGVkZXN0cmlhbjsKK+abuOmdoiA+IGluXC13cml0aW5nOwor56235a2QID4gY2hvcHN0aWNrczsKK+evgOWItiA+IHRlbXBlcmFuY2U7CivohZDmlZcgPiBjb3JydXB0aW9uOwor54246YarID4gdmV0ZXJpbmFyeTsKK+WBmuWHuiA+IHRvXC1wdXRcLW91dDsKK+S9nOeCuiA+IGFjY29tcGxpc2g7CivmipjlsIQgPiByZWZyYWN0aW9uOwor5ZaJ54KOID4gbGFyeW5naXRpczsKK+S6huinoyA+IHVuZGVyc3RhbmQ7Civkv6Hlv4MgPiBjb25maWRlbmNlOwor6IGv57mrID4gY29ubmVjdGlvbjsKK+ePjeiXjyA+IGNvbGxlY3Rpb247Civoh6rkv6EgPiBjb25maWRlbmNlOwor6IGW6IG3ID4gcHJpZXN0aG9vZDsKK+mMtuebpCA+IGRpYWxcLXBsYXRlOwor5qGD5qi5ID4gcGVhY2hcLXRyZWU7Civllq7mqKEgPiBzaW5nbGVtb2RlOwor5oOz6LGhID4gdG9cLWltYWdpbmU7CivkuIvpmY0gPiB0b1wtZGVjbGluZTsKK+WvqeafpSA+IHRvXC1leGFtaW5lOwor5bGk5aOTID4gbGFtaW5hdGlvbjsKK+WRqOmAnyA+IGN5Y2xlXC10aW1lOwor5pq06aKoID4gc3Rvcm1cLXdpbmQ7CivlsazlnLAgPiBkZXBlbmRlbmN5Owor5ryy5YO5ID4gYXBwcmVjaWF0ZTsKK+iBlue2kyA+IGhvbHlcLWJpYmxlOwor5Lu/55yfID4gdG9cLWVtdWxhdGU7Civlkozoq6cgPiBoYXJtb25pb3VzOwor5LuL57S5ID4gdG9cLXByZXNlbnQ7CivpoLvpoLsgPiByZXBlYXRlZGx5Owor57y66bueID4gd2Vha1wtcG9pbnQ7CivmnKzooYwgPiBvbmUnJ3NcLWxpbmU7Civmu7LlnZEgPiBzZXdhZ2VcLXBpdDsKK+ertuaKgCA+IHRvdXJuYW1lbnQ7CivmirXliLYgPiByZXNpc3RhbmNlOwor6ZC15YygID4gYmxhY2tzbWl0aDsKK+S7u+eUqCA+IHRvXC1hcHBvaW50Owor5Zau5pW4ID4gb2RkXC1udW1iZXI7Civmnb/ntJkgPiBwYXBlcmJvYXJkOwor5ZGI6YGeID4gdG9cLXByZXNlbnQ7Civms6LplbcgPiB3YXZlbGVuZ3RoOwor5bCI5b+DID4gYWJzb3JwdGlvbjsKK+WAi+WIpSA+IGluZGl2aWR1YWw7CivmnIPoqIggPiBhY2NvdW50YW50Owor5rWB6KGAID4gc2hlZFwtYmxvb2Q7CivogonniYcgPiBtZWF0XC1zbGljZTsKK+a6q+WupCA+IGdyZWVuaG91c2U7CivlgJrku5cgPiB0b1wtbGVhblwtb247CivmipHliLYgPiB0b1wtaW5oaWJpdDsKK+S9nOaWmSA+IGNvbmRpbWVudHM7Civkvr/lo7ogPiBiZWRcLXVyaW5hbDsKK+i2qOWliSA+IHRvXC1mYXduXC1vbjsKK+S9v+aAkiA+IGV4YXNwZXJhdGU7Civkvp3lsawgPiBkZXBlbmRlbmNlOwor6aCQ6ZiyID4gdG9cLXByZXZlbnQ7CivlgIvkurogPiBpbmRpdmlkdWFsOwor562J5YiwID4gd2FpdFwtdW50aWw7CivlsI/lp5AgPiB5b3VuZ1wtbGFkeTsKK+ahjOW4gyA+IHRhYmxlY2xvdGg7Civog4zmma8gPiBiYWNrZ3JvdW5kOwor5LiN6K6KID4gdW5jaGFuZ2luZzsKK+S4gOiyqyA+IGNvbnNpc3RlbnQ7Civmibnlh4YgPiB0b1wtYXBwcm92ZTsKK+enkeezuyA+IGRlcGFydG1lbnQ7CivmhIHnt5IgPiBtZWxhbmNob2x5Owor56We6KmxID4gZmFpcnlcLXRhbGU7CivkvY/miYAgPiBoYWJpdGF0aW9uOwor6aGb6KaGID4gc3VidmVyc2lvbjsKK+ahiOWtkCA+IGxvbmdcLXRhYmxlOwor5LqS55u4ID4gZWFjaFwtb3RoZXI7Civkvr/liKkgPiBjb252ZW5pZW50Owor5rKz6YKKID4gcml2ZXJcLWJhbms7CivkuI3omZ4gPiB1bmV4cGVjdGVkOwor5bCk5YW2ID4gZXNwZWNpYWxseTsKK+a3mOaxsCA+IHRvXC1kaWVcLW91dDsKK+iCpeaWmSA+IGZlcnRpbGl6ZXI7CivlronmjpIgPiB0b1wtYXJyYW5nZTsKK+itsOmZoiA+IHBhcmxpYW1lbnQ7Civni6Hovq8gPiB0b1wtcXVpYmJsZTsKK+esrOS6jCA+IG51bWJlclwtdHdvOwor5qC85aSWID4gZXNwZWNpYWxseTsKK+aatOihjCA+IHNhdmFnZVwtYWN0Owor5a+m5ZyoID4gaW5cLXJlYWxpdHk7CivotoXljYcgPiBleGFsdGF0aW9uOwor5Y+b6LuNID4gcmViZWxcLWFybXk7CivnjbjnqbQgPiBhbmltYWxcLWRlbjsKK+WtneaVrCA+IHRvXC1yZXNwZWN0Owor6K2m6ZCYID4gYWxhcm1cLWJlbGw7Civog5blrZAgPiBmYXRcLXBlcnNvbjsKK+WtmOaUviA+IHRvXC1kZXBvc2l0Owor6aST5q27ID4gc3RhcnZhdGlvbjsKK+S9teWQniA+IHN3YWxsb3dcLXVwOwor5a245b6SID4gYXBwcmVudGljZTsKK+aEn+a/gCA+IGFwcHJlY2lhdGU7Civmnb/mqIEgPiBzaGVldFwtcGlsZTsKK+aIkOWIhiA+IGluZ3JlZGllbnQ7CivlrrnlmaggPiByZWNlcHRhY2xlOwor6YeN6KaWID4gaW1wb3J0YW5jZTsKK+aClOe9qiA+IGNvbnZpY3Rpb247Civog73lipsgPiBjYXBhYmlsaXR5Owor5b+F6aCIID4gdG9cLWhhdmVcLXRvOwor6IKv5a6aID4gdG9cLWJlXC1zdXJlOwor5Lu75oCnID4gY2FwcmljaW91czsKK+eOi+eJjCA+IHRydW1wXC1jYXJkOwor5Y2X6Z2iID4gc291dGhcLXNpZGU7CivoloTojbcgPiBmaWVsZFwtbWludDsKK+mmrOWKmyA+IGhvcnNlcG93ZXI7CivmnIjnkIMgPiBcKHRoZVwpXC1tb29uOwor5ama57SEID4gZW5nYWdlbWVudDsKK+ePvuaIkCA+IHJlYWR5XC1tYWRlOwor6aC757mBID4gZnJlcXVlbnRseTsKK+itsOirliA+IHRvXC1jb21tZW50Owor5Lqk5pu/ID4gdG9cLXJlcGxhY2U7CivnpZ7np5ggPiBteXN0ZXJpb3VzOwor6aKo5r+VID4gcmhldW1hdGlzbTsKK+e+pOecviA+IHRoZVwtbWFzc2VzOwor56We56WVID4gbXlzdGVyaW91czsKK+WvhOS6iCA+IHRvXC1leHByZXNzOwor5LuB5oWIID4gYmVuZXZvbGVudDsKK+S7iuW+jCA+IGhlbmNlZm9ydGg7CivomZvmk6wgPiBmaWN0aXRpb3VzOwor6aGv54++ID4gYXBwZWFyYW5jZTsKK+Wkmum7qCA+IG11bHRpcGFydHk7CivkuI3nlbYgPiB1bnN1aXRhYmxlOwor5rKI6JC9ID4gc2lua1wsXC1mYWxsOwor6Kyb6L+wID4gdGFsa1wtYWJvdXQ7CivlrqPkvYggPiB0b1wtZGVjbGFyZTsKK+m8k+aOjCA+IHRvXC1hcHBsYXVkOwor5Lul5aSWID4gYXBhcnRcLWZyb207CivniIbpn7MgPiBzb25pY1wtYm9vbTsKK+S8vOS5jiA+IGFwcGFyZW50bHk7CivlpKfpq5QgPiBpblwtZ2VuZXJhbDsKK+epuuWFkiA+IHNwYXJlXC10aW1lOwor6aOf5oyHID4gZm9yZWZpbmdlcjsKK+eJtOinuCA+IGNvbnRyYWRpY3Q7CivnqIvluo8gPiBwcm9jZWR1cmVzOwor5byx6bueID4gd2Vha1wtcG9pbnQ7CivmmI7oqIAgPiBwcm9ub3VuY2VkOwor5pys5pyIID4gdGhpc1wtbW9udGg7Civlk7LlrbggPiBwaGlsb3NvcGh5Owor5Li55q+SID4gZXJ5c2lwZWxhczsKK+awo+ixoSA+IG1ldGVvcm9sZ3k7CivkupLmg6AgPiByZWNpcHJvY2FsOwor57i96auUID4gY29tcGxldGVseTsKK+iUrOiPnCA+IHZlZ2V0YWJsZXM7Civpo6/lupcgPiByZXN0YXVyYW50Owor5ZCr54eQID4gcGhvc3Bob3JpYzsKK+abtOatoyA+IGNvcnJlY3Rpb247Civpu5Hmnb8gPiBibGFja2JvYXJkOwor5b2Z6ZuGID4gdG9cLWNvbGxlY3Q7CivorJvop6MgPiB0b1wtZXhwbGFpbjsKK+mgkOefpSA+IGFudGljaXBhdGU7Civpg6jploAgPiBkZXBhcnRtZW50Owor5Lul5Y+KID4gYXNcLXdlbGxcLWFzOwor6IGv5ZCIID4gdG9cLWNvbWJpbmU7CivkuLvmoLwgPiBub21pbmF0aXZlOwor6YyE5Y+WID4gdG9cLXJlY3J1aXQ7CivmlrDpg44gPiBicmlkZWdyb29tOwor6ICM5b6MID4gYWZ0ZXJcLXRoYXQ7CivlrZflhbggPiBkaWN0aW9uYXJ5Owor5oKy5q2MID4gc2FkXC1tZWxvZHk7Civnvarni4AgPiBhY2N1c2F0aW9uOwor5q+U6YeNID4gcHJvcG9ydGlvbjsKK+izoOWEnyA+IGNvbXBlbnNhdGU7CivmtYHmlL4gPiBiYW5pc2htZW50Owor5Lq65Z2HID4gcGVyXC1jYXBpdGE7Civlj6/nlpEgPiBzdXNwaWNpb3VzOwor6IGe5ZCNID4gd2VsbFwta25vd247CivogIzlt7IgPiB0aGF0JydzXC1hbGw7CivmtbTlt74gPiBiYXRoXC10b3dlbDsKK+WQiueHiCA+IGNoYW5kZWxpZXI7CivogbLlg7kgPiByZXB1dGF0aW9uOwor6JaE54mHID4gdGhpblwtc2xpY2U7Civmm7TmlrAgPiB1cFwtdG9cLWRhdGU7CivpoavmoJcgPiB0b1wtdHJlbWJsZTsKK+acrOW6lSA+IGJhY2tncm91bmQ7Civpm4bpq5QgPiBjb2xsZWN0aXZlOwor5pWX6ZyyID4gXChvZlwtYVwtcGxvdDsKK+ippumplyA+IGV4cGVyaW1lbnQ7Civkurrlj6MgPiBwb3B1bGF0aW9uOwor5Y6Y57GzID4gY2VudGltZXRlcjsKK+atuOmghiA+IHN1Ym1pc3Npb247CivlpLHouaQgPiBiZVwtbWlzc2luZzsKK+mjveWSjCA+IHNhdHVyYXRpb247CivmraHpqLAgPiBqdWJpbGF0aW9uOwor5b6M6KOUID4gZGVzY2VuZGFudDsKK+awo+iJsiA+IGNvbXBsZXhpb247Civph5HniYwgPiBnb2xkXC1tZWRhbDsKK+S4jeacgyA+IGltcHJvYmFibGU7CivkuIrmnIggPiBsYXN0XC1tb250aDsKK+WQteaetiA+IHRvXC1xdWFycmVsOwor5oSP5aSWID4gdW5leHBlY3RlZDsKK+eip+e2oCA+IGRhcmtcLWdyZWVuOwor5LiN5pmCID4gZnJlcXVlbnRseTsKK+iAgeWllyA+IG9sZFwtdGhpbmdzOwor5Lim5oqKID4gdG9cLWluY2x1ZGU7Civoq4foq5YgPiB0b1wtZGlzY3VzczsKK+WPiueJqSA+IHRyYW5zaXRpdmU7Civpm7vou4ogPiB0cm9sbGV5YnVzOwor5qy66aiZID4gdG9cLWRlY2VpdmU7Civpoafmha4gPiBtaXNnaXZpbmdzOwor5Y+v5q+UID4gY29tcGFyYWJsZTsKK+S6i+WFiCA+IGluXC1hZHZhbmNlOwor6K2m54qsID4gcG9saWNlXC1kb2c7CivliZvpq5QgPiByaWdpZFwtYm9keTsKK+aZr+awoyA+IHByb3NwZXJpdHk7CivljZznra4gPiBkaXZpbmF0aW9uOwor5LiN5b+rID4gYmVcLXVuaGFwcHk7CivmmIznm5sgPiBwcm9zcGVyb3VzOwor5pS56YGOID4gdG9cLWNvcnJlY3Q7CivmlLnpgLIgPiB0b1wtaW1wcm92ZTsKK+S4jeW5uCA+IG1pc2ZvcnR1bmU7Civpm7voppYgPiB0ZWxldmlzaW9uOwor5b6M6ICFID4gdGhlXC1sYXR0ZXI7Civnuo/nuZ4gPiBpbnRlcnR3aW5lOwor5Yqg6YCfID4gYWNjZWxlcmF0ZTsKK+irs+e3tCA+IGNvbnZlcnNhbnQ7CivkuIDluqYgPiBmb3JcLWFcLXRpbWU7CivmraHov44gPiB0b1wtd2VsY29tZTsKK+WMluiCpSA+IGZlcnRpbGl6ZXI7Civloqjpj6EgPiBzdW5nbGFzc2VzOwor5Ymd6ZuiID4gXChvZlwtdGlzc3VlOwor5LiN5bGIID4gdW55aWVsZGluZzsKK+W9iOiXpSA+IGFtbXVuaXRpb247CivpoJDmlpkgPiBhbnRpY2lwYXRlOwor6aCC5pu/ID4gdG9cLXJlcGxhY2U7CivkuI3lrpogPiBpbmRlZmluaXRlOwor5LiN5a6JID4gaW50cmFucXVpbDsKK+iAgeS6uiA+IG9sZFwtcGVvcGxlOwor5pyf5YiKID4gcGVyaW9kaWNhbDsKK+efpeimuiA+IHBlcmNlcHRpb247CivlkIzmg4UgPiBjb21wYXNzaW9uOwor6YGp6YWNID4gYWRhcHRhdGlvbjsKK+WQiOaEjyA+IGFjY2VwdGFibGU7CivlpKfoh6MgPiBjaGFuY2VsbG9yOwor5ZCM5oCnID4gaG9tb3NleHVhbDsKK+aXpeebiiA+IGRheVwtYnlcLWRheTsKK+Wkp+iGvSA+IGNvdXJhZ2VvdXM7CivmnKzku70gPiBvbmUnJ3NcLWR1dHk7CivkuI3lpqUgPiBub3RcLXByb3BlcjsKK+acg+WPiyA+IG1lbWJlcnNoaXA7CivnubPntI0gPiBjb250cmlidXRlOwor5LiN5aSgID4gbm90XC1lbm91Z2g7Civnp4HkuIsgPiBpblwtcHJpdmF0ZTsKK+azouWzsCA+IHdhdmVcLWNyZXN0Owor5LiJ5aSpID4gdGhyZWVcLWRheXM7CivwoICNID4gZ2VuZXJhdGlvbjsKK+mdouebriA+IGFwcGVhcmFuY2U7Civlj43ml6UgPiBhbnRpXC1qYXBhbjsKK+W7uuitsCA+IHRvXC1wcm9wb3NlOwor5rOi5bCOID4gd2F2ZVwtZ3VpZGU7CivlqaLlpbMgPiBzbGF2ZVwtZ2lybDsKK+aykuaUtiA+IGNvbmZpc2NhdGU7Civlv6vmtLsgPiBnYXlcLFwtaGFwcHk7Civlj6/mgrIgPiBsYW1lbnRhYmxlOwor6KmV6Ki7ID4gY29tbWVudGFyeTsKK+WpiuWtkCA+IHByb3N0aXR1dGU7Civlv4XnhLYgPiBpbmV2aXRhYmxlOwor5Y2K55CDID4gaGVtaXNwaGVyZTsKK+mfv+aHiSA+IHJlc3BvbmRcLXRvOwor5b2Z57eoID4gY29sbGVjdGlvbjsKK+itsOacgyA+IHBhcmxpYW1lbnQ7CivlpKfntrEgPiBtYWluXC1wb2ludDsKK+aSnumomSA+IHRvXC1zd2luZGxlOwor54Ok6bSoID4gcm9hc3RcLWR1Y2s7CivmrYzoqZ4gPiBzb25nXC1seXJpYzsKK+S4puWFpSA+IG1lcmdlXC1pbnRvOwor6KiY6LyJID4gd3JpdGVcLWRvd247CivlvLHohIggPiB3ZWFrXC1wdWxzZTsKK+mhq+WLlSA+IHRvXC10cmVtYmxlOwor5Y6f5pysID4gb3JpZ2luYWxseTsKK+WQuOWQriA+IHRvXC1zdWNrXC1pbjsKK+eIhuegtCA+IHRvXC1ibG93XC11cDsKK+mBk+izgCA+IGNvbXBsaW1lbnQ7Civlj5blvpcgPiB0b1wtYWNxdWlyZTsKK+S4iuWNiiA+IGZpcnN0XC1oYWxmOwor5pWZ6IKyID4gdG9cLWVkdWNhdGU7CivkuI3li5UgPiBtb3Rpb25sZXNzOwor5ZCe5ZmsID4gdG9cLXN3YWxsb3c7CivopoHpu54gPiBtYWluXC1wb2ludDsKK+WPjeW+qSA+IHJlcGVhdGVkbHk7Civopb/pu54gPiB3ZXN0XC1wb2ludDsKK+S4puS4jSA+IG5vdFwtYXRcLWFsbDsKK+aWl+ecvCA+IGNyb3NzXC1leWVkOwor5rCj5rCbID4gYXRtb3NwaGVyZTsKK+ecvOmPoSA+IHNwZWN0YWNsZXM7CivkuI3lgpkgPiB1bnByZXBhcmVkOwor5qqi6amXID4gdG9cLWluc3BlY3Q7CivkuIDlho0gPiByZXBlYXRlZGx5Owor5oGr5ZqHID4gaW50aW1pZGF0ZTsKK+S4gOWFsSA+IGFsdG9nZXRoZXI7CivlpYnnjbsgPiBjb25zZWNyYXRlOwor5LiN5L6dID4gbm90XC1jb21wbHk7CivkuI3kvY8gPiByZXBlYXRlZGx5Owor5Y+q5aW9ID4gdG9cLWhhdmVcLXRvOwor6KiO6KuWID4gdG9cLWRpc2N1c3M7Civmlofnm7IgPiBpbGxpdGVyYXRlOwor5piO5pm6ID4gbm90XC11bndpc2U7Civlj6blpJYgPiBhZGRpdGlvbmFsOwor5pKe6YedID4gZmlyaW5nXC1waW47CivljZfmpbUgPiBzb3V0aFwtcG9sZTsKK+S4gOS7oyA+IGdlbmVyYXRpb247CivmlLbnuK4gPiBwdWxsXC1iYWNrOwor5aSa55aRID4gc2tlcHRpY2FsOwor5ZCI5YqbID4gY29vcGVyYXRlOwor54iG54K4ID4gZXhwbG9zaW9uOwor5Ymy6I2JID4gbW93XC1ncmFzczsKK+iuiuWljyA+IHZhcmlhdGlvbjsKK+mgmOWPlyA+IHRvXC1hY2NlcHQ7Civli5Xnm6ogPiBjb21tb3Rpb247Civlj6/lk4AgPiBtaXNlcmFibHk7Civoj6DomL8gPiBwaW5lYXBwbGU7CivljprluqYgPiB0aGlja25lc3M7CivpgJ/oqJggPiBzaG9ydGhhbmQ7CivlvpDmraUgPiB0b1wtc3Ryb2xsOwor6KW/6Z2iID4gd2VzdFwtc2lkZTsKK+aRmOmZpCA+IHRvXC1leGNpc2U7CivorablrpggPiBjb25zdGFibGU7CivlkIzkvLQgPiBjb21wYW5pb247CivlkI3kurogPiBwZXJzb25hZ2U7CivolJPlu7YgPiB0b1wtZXh0ZW5kOwor5ZCM5LqLID4gY29sbGVhZ3VlOwor5Y2K5peXID4gaGFsZlwtbWFzdDsKK+mHkeWMoCA+IGdvbGRzbWl0aDsKK+WQjOS4gCA+IGlkZW50aWNhbDsKK+eisOW3pyA+IGJ5XC1jaGFuY2U7Civmma7lj4ogPiB3aWRlc3BlYWQ7CivoqK3nva4gPiB0b1wtc2V0XC11cDsKK+eHkueHrCA+IGJ1cm5cLWRvd247CivmmI7lubQgPiBuZXh0XC15ZWFyOwor5Y+k5YW4ID4gY2xhc3NpY2FsOwor5Y+r5YGaID4gYmVcLWNhbGxlZDsKK+e2oOiMtiA+IGdyZWVuXC10ZWE7CivliKXomZUgPiBlbHNld2hlcmU7Civov7Doqp4gPiBwcmVkaWNhdGU7CivpmLLooZsgPiB0b1wtZGVmZW5kOwor5pio5aSpID4geWVzdGVyZGF5Owor5pWZ54i2ID4gZ29kZmF0aGVyOwor5Y+X5YOxID4gbWVyY2VuYXJ5Owor5pa85pivID4gdGhlcmV1cG9uOwor6Kqe5rqQID4gZXR5bW9sb2d5Owor6Kqq5rOVID4gc3RhdGVtZW50Owor5Z+O6ZaAID4gY2l0eVwtZ2F0ZTsKK+mdiOaVjyA+IHNlbnNpdGl2ZTsKK+WKqeeQhiA+IGFzc2lzdGFudDsKK+ioreeriyA+IHRvXC1zZXRcLXVwOwor6KuW5pa3ID4gaW5mZXJlbmNlOwor5Y+X5LqLID4gcmVjZXBpZW50Owor54as54WOID4gc3VmZmVyaW5nOwor5YiG6JmfID4gc2VtaWNvbG9uOwor5Y6f5ZGKID4gY29tcGxhaW50Owor55m96a2aID4gd2hpdGVmaXNoOwor5aSa5qijID4gZGl2ZXJzaXR5Owor5aSa5qihID4gbXVsdGltb2RlOwor6ZaL6aCtID4gYmVnaW5uaW5nOwor54Sh6IO9ID4gaW5hYmlsaXR5Owor55m96auUID4gbGVhblwtdHlwZTsKK+aomemrmCA+IGVsZXZhdGlvbjsKK+WmluWqmiA+IHNlZHVjdGl2ZTsKK+eEoeiBsiA+IG5vaXNlbGVzczsKK+WIuue5oSA+IGVtYnJvaWRlcjsKK+WNgeW5tCA+IHRlblwteWVhcnM7CivljYrls7YgPiBwZW5pbnN1bGE7CivpgKPnuowgPiBjb250aW5vdXM7Civljp/liYcgPiBwcmluY2lwbGU7CivphK3lt54gPiB6aGVuZ3pob3U7CivoqIjnrZYgPiBzdHJhdGFnZW07CivlupXnt5ogPiB1bmRlcmxpbmU7CivploPpm7sgPiBsaWdodG5pbmc7CivlvJXmuKEgPiBleHRyYWRpdGU7CivmlZnmr40gPiBnb2Rtb3RoZXI7Civlo4HniJAgPiBmaXJlcGxhY2U7CivmlofmmI4gPiBjaXZpbGl6ZWQ7Civnm7ToprogPiBpbnR1aXRpb247Civlo4Hnh4ggPiB3YWxsXC1sYW1wOwor55m86Z+zID4gcHJvbm91bmNlOwor5Y6Y5YWLID4gY2VudGlncmFtOwor54Sh57GfID4gc2NvdW5kcmVsOwor5Yqg5rexID4gdG9cLWRlZXBlbjsKK+Wft+ihjCA+IGltcGxlbWVudDsKK+mbueaatCA+IGhhaWxzdG9ybTsKK+eiuuS/oSA+IGNvbmZpZGVudDsKK+WloOWumiA+IGVzdGFibGlzaDsKK+mCo+aooyA+IHRoYXRcLWtpbmQ7Civlhazph4wgPiBraWxvbWV0ZXI7CivoqqDmka8gPiBzaW5jZXJlbHk7Civlt67ot50gPiBkaXNwYXJpdHk7Civopa/oo5kgPiBwZXR0aWNvYXQ7CivpsL7ohqAgPiBpc2luZ2xhc3M7CivorYnku7YgPiBwYXBlcndvcms7CivntLDoj4wgPiBiYWN0ZXJpYWw7CivoiqzpppkgPiBmcmFncmFuY2U7CivljaDljZwgPiB0b1wtZGl2aW5lOwor6JK85aSpID4gZmlybWFtZW50Owor57ep5rKWID4gdG9cLWJ1ZmZlcjsKK+mBuOa0viA+IHNldFwtYXBhcnQ7CivmlaPmkq0gPiB0b1wtc3ByZWFkOwor5aSn5b+XID4gaGlnaFwtYWltczsKK+i8lOmfsyA+IGNvbnNvbmFudDsKK+W8teaPmiA+IHB1YmxpY2l6ZTsKK+ino+eivCA+IHRvXC1kZWNvZGU7Civmkq3nqK4gPiBzb3dcLXNlZWRzOwor5YyW5a24ID4gY2hlbWlzdHJ5Owor5aCx57SZID4gbmV3c3BhcGVyOwor54Sh55+lID4gaWdub3JhbmNlOwor5o6l6aeBID4gdG9cLWFjY2VzczsKK+W+iOWkmiA+IHZlcnlcLW1hbnk7CivoqqDmhI8gPiBzaW5jZXJpdHk7Civlu6Pms5sgPiBleHRlbnNpdmU7Civps7PmoqggPiBwaW5lYXBwbGU7Civpm5nmlrkgPiBiaWxhdGVyYWw7CivplbfpgaAgPiBsb25nXC10ZXJtOwor5Y2D5ZGoID4ga2lsb2hlcnR6Owor6YGO5r++ID4gdG9cLWZpbHRlcjsKK+Wlh+WmmSA+IGZhbnRhc3RpYzsKK+WGsOiTiyA+IGljZVwtc2hlZXQ7CivpgZnmuKwgPiB0ZWxlbWV0cnk7CivovrLoiI0gPiBmYXJtaG91c2U7CivntIXok64gPiByZWRcLWxvdHVzOwor5YWx6K2YID4gY29uc2Vuc3VzOwor6Ly46YCBID4gdHJhbnNwb3J0Owor5aSn5bCPID4gZGltZW5zaW9uOwor5aSn5a62ID4gYXV0aG9yaXR5Owor54it5Y+WID4gZmlnaHRcLWZvcjsKK+avj+WkqSA+IGV2ZXJ5XC1kYXk7CivmlLvmk4ogPiB0b1wtYXR0YWNrOwor57SF6Iy2ID4gYmxhY2tcLXRlYTsKK+aWh+WtlyA+IGNoYXJhY3RlcjsKK+W4uOe2oCA+IGV2ZXJncmVlbjsKK+aumOW7oiA+IGRlZm9ybWl0eTsKK+maseaZpiA+IG9ic2N1cml0eTsKK+eFp+aooyA+IGFzXC1iZWZvcmU7CivmlrnlkJEgPiBkaXJlY3Rpb247CivnhLDngasgPiBmaXJld29ya3M7CivmlZHmgakgPiBzYWx2YXRpb247CivlpKnlpKkgPiBldmVyeVwtZGF5Owor5b6M5YukID4gbG9naXN0aWNzOwor5Yqp5omLID4gYXNzaXN0YW50Owor5YWn6KSyID4gdW5kZXJ3ZWFyOwor6L6m572qID4gdG9cLXB1bmlzaDsKK+imgee3iiA+IGltcG9ydGFudDsKK+awkeS4uyA+IGRlbW9jcmFjeTsKK+WLmeWvpiA+IHByYWdtYXRpYzsKK+aOqOmKtyA+IHRvXC1tYXJrZXQ7CivlvZnloLEgPiB0b1wtcmVwb3J0Owor6KaB57SgID4gZXNzZW50aWFsOwor5aSi5aKDID4gZHJlYW1sYW5kOwor6Kqy5aCCID4gY2xhc3Nyb29tOwor6YG45pOHID4gdG9cLXNlbGVjdDsKK+WgseeVjCA+IHRoZVwtcHJlc3M7CivnmbzoqIAgPiBzdGF0ZW1lbnQ7CivljYHkuIMgPiBzZXZlbnRlZW47Civngavol6UgPiBndW5wb3dkZXI7CivoqLrmlrcgPiBkaWFnbm9zaXM7Civmr6vlhYsgPiBtaWxsaWdyYW07Civlia/mnKwgPiBkdXBsaWNhdGU7CivoibHpm6MgPiBkaWZmaWN1bHQ7Civlu6Pmkq0gPiBicm9hZGNhc3Q7CivmlZflsYAgPiBsb3N0XC1nYW1lOwor6YOK5aSWID4gb3V0c2tpcnRzOwor5pWZ5a6kID4gY2xhc3Nyb29tOwor55m96KCfID4gd2hpdGVcLXdheDsKK+WHuuePviA+IHRvXC1hcHBlYXI7CivpgJDmvLggPiBncmFkdWFsbHk7CivlhrDns5UgPiBpY2VcLWNyZWFtOwor5YWB6KixID4gdG9cLXBlcm1pdDsKK+W+jOS7oyA+IHBvc3Rlcml0eTsKK+iJpumVtyA+IGNvbW1hbmRlcjsKK+ani+mAoCA+IHN0cnVjdHVyZTsKK+WLvuWKgyA+IHRvXC1za2V0Y2g7Civlop7mj7QgPiByZWluZm9yY2U7CivnhKHmr5QgPiBtYXRjaGxlc3M7CivmlZnlo6sgPiBjaHVyY2htYW47CivmrKHmlbggPiBmcmVxdWVuY3k7CivlpKflipsgPiBlbmVyZ2V0aWM7Civlo6/lpKcgPiB0b1wtZXhwYW5kOwor5qyK5p+EID4gYXV0aG9yaXR5Owor6YG15b6qID4gdG9cLWZvbGxvdzsKK+mBqeaEjyA+IGFncmVlYWJsZTsKK+iqv+WBnCA+IHJlY29uY2lsZTsKK+W5sua2iSA+IGludGVyZmVyZTsKK+WLpOWLiSA+IGRpbGlnZW5jZTsKK+asvuW+hSA+IGVudGVydGFpbjsKK+eZvOiKvSA+IGdlcm1pbmF0ZTsKK+Wkp+S+vyA+IGV4Y3JlbWVudDsKK+aSpeatoyA+IHNldFwtcmlnaHQ7Civlo73lkb0gPiBsaWZlXC1zcGFuOwor57aT5paHID4gc2NyaXB0dXJlOwor5pWy5YWlID4gdG9cLWtleVwtaW47CivpmorlvaIgPiBmb3JtYXRpb247CivlpKnkuIogPiBjZWxlc3RpYWw7CivovqbnkIYgPiB0b1wtaGFuZGxlOwor6Ki75a6aID4gYmVcLWRvb21lZDsKK+eEoeaVuCA+IGNvdW50bGVzczsKK+aUtuWbniA+IHRvXC1yZWdhaW47CivlpJbkuqQgPiBkaXBsb21hY3k7CivpgY7luqYgPiBleGNlZWRpbmc7CivliKTmlrcgPiB0b1wtZGVjaWRlOwor5pON5oyBID4gdG9cLW1hbmFnZTsKK+aqoua4rCA+IHRvXC1kZXRlY3Q7Civnn67lh7MgPiBsb3dcLXN0b29sOwor6ZqO5bGkID4gaGllcmFyY2h5Owor6Iez6auYID4gcGFyYW1vdW50Owor5o6o6JamID4gcmVjb21tZW5kOwor5o6S6KGMID4gc2VuaW9yaXR5Owor5YmN5b6AID4gbGVhdmVcLWZvcjsKK+aVmeWEgCA+IG9yZGluYW5jZTsKK+e1kOaniyA+IHN0cnVjdHVyZTsKK+Wis+WikyA+IHNlcHVsY2hlcjsKK+aSreaUviA+IGJyb2FkY2FzdDsKK+WFrOeniSA+IGtpbG9saXRlcjsKK+mYu+aSkyA+IHRvXC10aHdhcnQ7CivlgrPpgIEgPiB0b1wtY29udmV5Owor6YG65ZuRID4gdGVzdGFtZW50Owor5q2h5ZG8ID4gY2hlZXJcLWZvcjsKK+WCs+i8uCA+IHRyYW5zcG9ydDsKK+W5suaTviA+IGludGVyZmVyZTsKK+aOqOiNkCA+IHJlY29tbWVuZDsKK+mBiuWuoiA+IHRyYXZlbGxlcjsKK+WfjueJhiA+IGNpdHlcLXdhbGw7CivlhafnorwgPiB0b1wtZW5jb2RlOwor5pGn5q6YID4gdG9cLXJhdmFnZTsKK+aSnuaTiiA+IHRvXC1zdHJpa2U7CivliqDliocgPiBhZ2dyYXZhdGU7CivpmLvmipcgPiBpbXBlZGFuY2U7CivmjZDotIggPiB0b1wtZG9uYXRlOwor6Ieq6aGYID4gdm9sdW50YXJ5Owor5qi555quID4gdHJlZVwtYmFyazsKK+e2k+W6piA+IGxvbmdpdHVkZTsKK+maqOWToSA+IGF0dGVuZGFudDsKK+WFieethiA+IGxpZ2h0XC1wZW47CivloLHmlKQgPiBuZXdzc3RhbmQ7Civlh7rmlrwgPiBiZVwtZHVlXC10bzsKK+aVkeS4liA+IHNhbHZhdGlvbjsKK+aTtOWkpyA+IHRvXC1leHBhbmQ7CivpgY7lpJogPiBleGNlc3NpdmU7CivnhKHlvaIgPiBpbnZpc2libGU7Civoo53nva4gPiBlcXVpcG1lbnQ7CivmlYXkuosgPiBuYXJyYXRpdmU7CivlhbHnlKIgPiBjb21tdW5pc3Q7Civnr6npgbggPiB0b1wtZmlsdGVyOwor5o6o57+7ID4gb3ZlcnRocm93Owor6Zmi5a2QID4gY291cnR5YXJkOwor5ZyS6JedID4gZ2FyZGVuaW5nOwor5buj5Y2aID4gZXh0ZW5zaXZlOwor5qyK5aiBID4gYXV0aG9yaXR5Owor5YqD5YiGID4gdG9cLWRpdmlkZTsKK+WCs+iomCA+IGJpb2dyYXBoeTsKK+i/t+aDkSA+IHRvXC1wdXp6bGU7CivliqDkuIogPiB0b1wtcHV0XC1pbjsKK+W7tuS8uCA+IHRvXC1leHRlbmQ7CivpgJrlrrUgPiBvdmVybmlnaHQ7CivoibHoi6YgPiBkaWZmaWN1bHQ7Civlu6PlgrMgPiBwcm9wYWdhdGU7CivnmbznlJ8gPiB0b1wtaGFwcGVuOwor55mx55iTID4gcGFyYWx5c2lzOwor57WE5oiQID4gY29tcG9uZW50Owor6ZqK5YiXID4gZm9ybWF0aW9uOwor5o6l566hID4gdGFrZVwtb3ZlcjsKK+ioreWCmSA+IGVxdWlwbWVudDsKK+mahuWGrCA+IG1pZHdpbnRlcjsKK+WHueW6piA+IGNvbmNhdml0eTsKK+a8q+mVtyA+IHZlcnlcLWxvbmc7CivnlYzpnaIgPiBpbnRlcmZhY2U7CivlibXkvZwgPiB0b1wtY3JlYXRlOwor6Zmq5ZCMID4gYWNjb21wYW55Owor5pO05YWFID4gdG9cLWV4cGFuZDsKK+aMh+iyrCA+IGNyaXRpY2l6ZTsKK+e2nOWQiCA+IGNvbXBvc2l0ZTsKK+aKq+mcsiA+IHRvXC1yZXZlYWw7CivnnIvlvoUgPiBsb29rXC11cG9uOwor6Zm35YWlID4gc2lua1wtaW50bzsKK+ihsOiQvSA+IGRlY29tcG9zZTsKK+WJm+WBpSA+IGVuZXJnZXRpYzsKK+aSpeWljyA+IHBpenppY2F0bzsKK+mAhuWigyA+IGFkdmVyc2l0eTsKK+i/q+WusyA+IHBlcnNlY3V0ZTsKK+mAsuWMliA+IGV2b2x1dGlvbjsKK+i+r+aJjSA+IGVsb3F1ZW5jZTsKK+iHquiyoCA+IGNvbmNlaXRlZDsKK+W4guaUvyA+IG11bmljaXBhbDsKK+WEvOeEtiA+IGp1c3RcLWxpa2U7CivntZXlppkgPiBleHF1aXNpdGU7CivmipXpmY0gPiBzdXJyZW5kZXI7CivnsL3nq6AgPiBzaWduYXR1cmU7CivpmarkvLQgPiBhY2NvbXBhbnk7CivntoHljKogPiBraWRuYXBwZXI7CivnhKHlipsgPiBwb3dlcmxlc3M7Civmk5Tkv50gPiBndWFyYW50ZWU7CivmjqjnkIYgPiByZWFzb25pbmc7Civlm6DogIwgPiB0aGVyZWZvcmU7CivpgIblkJEgPiBiYWNrd2FyZHM7Civot5/pmqggPiB0b1wtZm9sbG93Owor5oyJ6JqKID4gYW5vcGhlbGVzOwor5qij5qmfID4gcHJvdG90eXBlOwor5Yio5YawID4gd2F0ZXJcLWljZTsKK+W4tuWvrCA+IGJhbmR3aWR0aDsKK+eVsOitsCA+IG9iamVjdGlvbjsKK+imj+WumiA+IHByb3Zpc2lvbjsKK+WxlemWiyA+IHRvXC11bmZvbGQ7CivovKrmtYEgPiBhbHRlcm5hdGU7CivlgrPntbEgPiB0cmFkaXRpb247CivlgY/oposgPiBwcmVqdWRpY2U7CivlnLDnkIYgPiBnZW9ncmFwaHk7CivlnLDnkIMgPiB0aGVcLWVhcnRoOwor6ZmN5L2OID4gdG9cLXJlZHVjZTsKK+S/nemaqiA+IGluc3VyYW5jZTsKK+S/nemanCA+IHRvXC1lbnN1cmU7CivloLTlkIggPiBzaXR1YXRpb247CivloLHlkYogPiB0b1wtaW5mb3JtOwor57Sz5aOrID4gZ2VudGxlbWFuOwor5YWs5paXID4gZGVjYWxpdGVyOwor6YCd5LiWID4gcGFzc1wtYXdheTsKK+i/lOWbniA+IHJldHVyblwtdG87CivpmYTku7YgPiBlbmNsb3N1cmU7CivliIblibIgPiB0b1wtY3V0XC11cDsKK+mVt+acnyA+IGxvbmdcLXRlcm07CivmiYHpqqggPiBmbGF0XC1ib25lOwor5L+d6Y+iID4gYm9keWd1YXJkOwor6LeR6Yy2ID4gc3RvcHdhdGNoOwor57SZ5aS+ID4gcGFwZXJjbGlwOwor55m85piOID4gdG9cLWludmVudDsKK+aooeaTrCA+IGltaXRhdGlvbjsKK+a/gOeZvCA+IHRvXC1hcm91c2U7Civlho3luqYgPiBvbmNlXC1tb3JlOwor57O+5a+fID4gdG9cLXBpY2tldDsKK+aLt+iKsSA+IHRvXC1lbWJvc3M7CivmvZvoiYcgPiBzdWJtYXJpbmU7Civov7fkvY8gPiBmYXNjaW5hdGU7Civoib7ngrcgPiBtb3hhXC1jb25lOwor5Zua56aBID4gY2FwdGl2aXR5Owor5YWn5oiwID4gY2l2aWxcLXdhcjsKK+S+v+mWgCA+IHNpZGVcLWRvb3I7Civoo4HmuJsgPiB0b1wtcmVkdWNlOwor6L+35LqCID4gY29uZnVzaW9uOwor5ZyN54mGID4gZW5jbG9zdXJlOwor55u45ZCMID4gaWRlbnRpY2FsOwor6KaP5Yu4ID4gdG9cLWFkdmlzZTsKK+ihqOeariA+IGVwaWRlcm1pczsKK+ihqOeZvSA+IHZpbmRpY2F0ZTsKK+aItumZkCA+IHRocmVzaG9sZDsKK+eci+WBmiA+IHJlZ2FyZFwtYXM7CivmjZDnjbsgPiB0b1wtZG9uYXRlOwor5YWH5omLID4gYXNzYWlsYW50Owor6J+R6J6CID4gY29ja3JvYWNoOwor5a+s6aC7ID4gYnJvYWRiYW5kOwor6KW/5Y2XID4gc291dGh3ZXN0Owor5L2/6aSoID4gY29uc3VsYXRlOwor6KW/5YyXID4gbm9ydGh3ZXN0Owor5qOJ6KKrID4gY29tZm9ydGVyOwor57K+5benID4gZWxhYm9yYXRlOwor5baE5pawID4gYnJhbmRcLW5ldzsKK+aJk+mAsiA+IHRvXC1icmVhY2g7Civlhazlr7ggPiBkZWNpbWV0ZXI7Civmib/oqo0gPiByZWNvZ25pemU7Civlhazlr5MgPiBhcGFydG1lbnQ7CivluLjku7sgPiBwZXJtYW5lbnQ7CivlhYnlvakgPiBob25vcmFibGU7Civkv53orbcgPiB0b1wtZGVmZW5kOwor5oyH56S6ID4gcG9pbnRcLW91dDsKK+eXheeQhiA+IHBhdGhvbG9neTsKK+i+m+WLniA+IGxhYm9yaW91czsKK+aQjeWjniA+IHRvXC1kYW1hZ2U7Civkv53oqLwgPiBndWFyYW50ZWU7CivlmInoqLEgPiBmYXZvcmFibGU7CivlhavlpKkgPiBlaWdodFwtZGF5Owor5ouS57WVID4gdG9cLXJlZnVzZTsKK+imgeS4jSA+IG90aGVyd2lzZTsKK+aomeWumiA+IGRlbWFyY2F0ZTsKK+iGqOiEuSA+IHRvXC1leHBhbmQ7CivovLvlsIQgPiByYWRpYXRpb247CivmjpLmlL4gPiBkaXNjaGFyZ2U7Civpq5Tnj74gPiB0b1wtZW1ib2R5Owor6KGw5ribID4gdG9cLXdlYWtlbjsKK+exg+advyA+IGJhY2tib2FyZDsKK+mmrOmerSA+IGhvcnNld2hpcDsKK+iLpuWigyA+IGdyaWV2YW5jZTsKK+eVouernyA+IGFmdGVyXC1hbGw7CivkvY7pmo4gPiBsb3dcLWxldmVsOwor5omA6KyCID4gc29cLWNhbGxlZDsKK+a9sOeImyA+IHRvXC1mZXN0ZXI7CivlhLLlrZggPiBzdG9ja3BpbGU7CivohoDoh4IgPiB1cHBlclwtYXJtOwor54CR5biDID4gd2F0ZXJmYWxsOwor5o6b5b+1ID4gY29uY2VybmVkOwor5YWo5ZCMID4gaWRlbnRpY2FsOwor6L2f5YuVID4gc2Vuc2F0aW9uOwor6Ie654eIID4gZGVza1wtbGFtcDsKK+idtOidtiA+IGJ1dHRlcmZseTsKK+eUnOe+jiA+IHN3ZWV0bmVzczsKK+S8tOmaqCA+IHRvXC1mb2xsb3c7Civlr6bos6ogPiBzdWJzdGFuY2U7CivlhazlhakgPiBoZWN0b2dyYW07CivmpI3niakgPiBib3RhbmljYWw7CivnqbrpmLIgPiBhaXJcLWZvcmNlOwor5YWl5L61ID4gdG9cLWludmFkZTsKK+WFi+WItiA+IHJlc3RyYWludDsKK+WFrOS4iCA+IGRlY2FtZXRlcjsKK+i8uOWHuiA+IHRvXC1leHBvcnQ7Civmipjno6ggPiBwZXJzZWN1dGU7CivovLjlhaUgPiB0b1wtaW1wb3J0Owor5a+m6KGMID4gaW1wbGVtZW50Owor562J562JID4gZXRcLWNldGVyYTsKK+a4hemZpCA+IGVsaW1pbmF0ZTsKK+aJk+iBvSA+IGFza1wtYWJvdXQ7Civooajmj5ogPiB0b1wtcHJhaXNlOwor5r+A5oCSID4gaW5mdXJpYXRlOwor5omT57+7ID4gb3ZlcnRocm93Owor5YGc5rOKID4gYW5jaG9yYWdlOwor6Jy76JyTID4gZHJhZ29uZmx5Owor5ry45ry4ID4gZ3JhZHVhbGx5Owor5a2Q6Z+zID4gY29uc29uYW50Owor5ryy5r2uID4gaGlnaFwtdGlkZTsKK+WutuitnCA+IGdlbmVhbG9neTsKK+mpmueVsCA+IGFtYXplbWVudDsKK+i8lOWKqSA+IHRvXC1hc3Npc3Q7Civmj5DkvpsgPiB0b1wtc3VwcGx5Owor56m/6YCPID4gcGVuZXRyYXRlOwor5o6l5Y+jID4gaW50ZXJmYWNlOwor5o6l5Y+XID4gdG9cLWFjY2VwdDsKK+mrlOaTjSA+IGd5bW5hc3RpYzsKK+S+v+euiyA+IG5vdGVwYXBlcjsKK+epuui7jSA+IGFpclwtZm9yY2U7CivotoXoga8gPiBoeXBlcmxpbms7CivogZbppJAgPiBzYWNyYW1lbnQ7Civoo53lgpkgPiBlcXVpcG1lbnQ7CivmibnnmbwgPiB3aG9sZXNhbGU7CivmvLjmrKEgPiBncmFkdWFsbHk7CivotpXnt4ogPiBodXJyaWVkbHk7CivpqqjmnrYgPiBmcmFtZXdvcms7Civku4vpnaIgPiBpbnRlcmZhY2U7CivlgbXmjqIgPiBkZXRlY3RpdmU7Civoh6jmmYIgPiB0ZW1wb3Jhcnk7CivmjJHmiLAgPiBjaGFsbGVuZ2U7CivooqvlkYogPiBkZWZlbmRhbnQ7CivmjpLlh7ogPiBkaXNjaGFyZ2U7Civmi5Tmn5MgPiBkaXNjaGFyZ2U7Civosp3poZ4gPiBzaGVsbGZpc2g7CivlnKjlhacgPiBpbmNsdWRpbmc7Civmi7/miYsgPiBleHBlcnRcLWluOwor56uK6IG9ID4gZWF2ZXNkcm9wOwor5a6/6IiNID4gZG9ybWl0b3J5Owor5bGx5rC0ID4gbGFuZHNjYXBlOwor5Zub5aSpID4gZm91clwtZGF5czsKK+aMuuWlvSA+IHZlcnlcLWdvb2Q7CivnsL3lhaUgPiB0b1wtbG9nXC1vbjsKK+mmrOiDjCA+IGhvcnNlYmFjazsKK+mpleawoyA+IGFycm9nYW5jZTsKK+eWkeW/gyA+IHN1c3BpY2lvbjsKK+a4uuiMqyA+IHVuY2VydGFpbjsKK+a/gOWLtSA+IGVuY291cmFnZTsKK+a/gOWLlSA+IHRvXC1leGNpdGU7CivmiJDnq4sgPiBlc3RhYmxpc2g7Civmt7voo5wgPiBmaWxsXC1cKHVwXCk7Civkv67mraMgPiB0b1wtcmV2aXNlOwor5p+Q6JmVID4gc29tZXdoZXJlOwor6LOT6KmeID4gcHJlZGljYXRlOwor56ix6K6aID4gdG9cLXByYWlzZTsKK+S9jue0miA+IGxvd1wtbGV2ZWw7CivosqjovKogPiBmcmVpZ2h0ZXI7Civpq5TlnJggPiBjb21tdW5pdHk7CivmpbXlhbYgPiBleHRyZW1lbHk7CivmirXmipcgPiB0b1wtcmVzaXN0Owor6aKx6aKoID4gaHVycmljYW5lOwor5Ly457iuID4gdG9cLWV4dGVuZDsKK+iar+iakyA+IGVhcnRod29ybTsKK+i0lue9qiA+IGF0b25lbWVudDsKK+WvteeJqSA+IGhvdXNlXC1wZXQ7CivogZboqpUgPiBjaHJpc3RtYXM7CivlgYflrpogPiB0b1wtYXNzdW1lOwor6KGM5YuVID4gb3BlcmF0aW9uOwor5Li76auUID4gbWFpblwtcGFydDsKK+aJi+azlSA+IHRlY2huaXF1ZTsKK+a2iOmBoyA+IGFtdXNlbWVudDsKK+alteS6hiA+IGV4dHJlbWVseTsKK+WwsealrSA+IGdldFwtYVwtam9iOwor55aG5Z+fID4gdGVycml0b3J5Owor5qGM54eIID4gZGVza1wtbGFtcDsKK+eWhuWcnyA+IHRlcnJpdG9yeTsKK+aJv+aTlCA+IHVuZGVydGFrZTsKK+iGveWwjyA+IGNvd2FyZGljZTsKK+WxrOaApyA+IGF0dHJpYnV0ZTsKK+mrmOWDuSA+IGV4cGVuc2l2ZTsKK+S4u+mggSA+IGhvbWVcLXBhZ2U7Civnvo7pupcgPiBiZWF1dGlmdWw7CivmnIPpnaIgPiBtZWV0XC13aXRoOwor5oiQ54K6ID4gdG9cLWJlY29tZTsKK+S6pOiqvCA+IGNvbW11bmlvbjsKK+mMpue5oSA+IGJlYXV0aWZ1bDsKK+a9m+WKmyA+IHBvdGVudGlhbDsKK+WxheaJgCA+IHJlc2lkZW5jZTsKK+WtuOerpSA+IHNjaG9vbGJveTsKK+iHquWLlSA+IGF1dG9tYXRpYzsKK+igleWLlSA+IHRvXC13aWdnbGU7CivmiZPmlZcgPiB0b1wtZGVmZWF0Owor6LGq6LGsID4gcG9yY3VwaW5lOwor5ZWf55m8ID4gZW5saWdodGVuOwor5rWB6YePID4gZmxvd1wtcmF0ZTsKK+iznOe1piA+IHRvXC1iZXN0b3c7Civmi5vli58gPiB0b1wtcmVjdWl0Owor5a6M55WiID4gdG9cLWZpbmlzaDsKK+WwjeaWvCA+IHJlZ2FyZGluZzsKK+iHs+S7iiA+IHVudGlsXC1ub3c7Civnv7vora8gPiB0cmFuc2xhdGU7CivkuIrpnaIgPiBvblwtdG9wXC1vZjsKK+S6lOiZnyA+IHRoZVwtZmlmdGg7Civkv6Hlt64gPiBtZXNzZW5nZXI7CivohoDlrZAgPiB1cHBlclwtYXJtOwor5ouG5Y24ID4gdG9cLXVubG9hZDsKK+ibi+eZvSA+IGVnZ1wtd2hpdGU7CivlkJ7po58gPiB0b1wtZGV2b3VyOwor5qGG5p62ID4gZnJhbWV3b3JrOwor6IOD54KOID4gZ2FzdHJpdGlzOwor5bCN5oqXID4gd2l0aHN0YW5kOwor5Zmo5YW3ID4gaW1wbGVtZW50Owor6ISr5o6JID4gc3RyaXBcLW9mZjsKK+mmmea4ryA+IGhvbmdcLWtvbmc7Civlr6bmmYIgPiByZWFsXC10aW1lOwor6IK654KOID4gcG5ldW1vbmlhOwor5oW256WdID4gY2VsZWJyYXRlOwor5a6w5q66ID4gc2xhdWdodGVyOwor5rWq6JWpID4gdG9cLWxvaXRlcjsKK+ixquiPryA+IGx1eHVyaW91czsKK+afkOeJqSA+IHNvbWV0aGluZzsKK+a0peiyvCA+IGFsbG93YW5jZTsKK+iCneeCjiA+IGhlcGF0aXRpczsKK+a2iOiAlyA+IHRvXC11c2VcLXVwOwor5LiK6LyJID4gdG9cLXVwbG9hZDsKK+iYreiKsSA+IGN5bWJpZGl1bTsKK+abuOiomCA+IHNlY3JldGFyeTsKK+a1quiIuSA+IHN3aW5nYm9hdDsKK+Wwj+WvqyA+IGxvd2VyY2FzZTsKK+eUqOWFtyA+IGFwcGxpYW5jZTsKK+WPpOmiqCA+IGFudGlxdWl0eTsKK+WuieathyA+IGdvXC10b1wtYmVkOwor5a625pePID4gaG91c2Vob2xkOwor5L2V5pWFID4gd2hlcmVmb3JlOwor6IWz5Y2wID4gZm9vdHByaW50Owor55O35ZmoID4gY2hpbmF3YXJlOwor56ul5bm0ID4gY2hpbGRob29kOwor5L2U5pOaID4gdG9cLW9jY3VweTsKK+i1t+W6iiA+IHRvXC1nZXRcLXVwOwor5a+s5bi2ID4gYnJvYWRiYW5kOwor5L6G5bm0ID4gbmV4dFwteWVhcjsKK+S7iueUnyA+IHRoaXNcLWxpZmU7CivpoLvpgZMgPiBmcmVxdWVuY3k7CivmnKzogbcgPiBvbmUnJ3NcLWpvYjsKK+WxgOWLoiA+IHNpdHVhdGlvbjsKK+iDjOaWnCA+IGFudGljbGluZTsKK+aatOi6gSA+IGlyYXNjaWJsZTsKK+axoOm5vSA+IGxha2VcLXNhbHQ7CivkuI3oqLEgPiBub3RcLWFsbG93Owor5ZWG5qiZID4gdHJhZGVtYXJrOwor6aOv56KXID4gcmljZVwtYm93bDsKK+aZpOmdoiA+IGludGVydmlldzsKK+ahlOWtkCA+IHRhbmdlcmluZTsKK+mHjemWiyA+IHRvXC1yZW9wZW47CivororpnakgPiB0cmFuc2Zvcm07CivmiKrlpaogPiBpbnRlcmNlcHQ7Civmt7HmsLQgPiBkZWVwd2F0ZXI7CivotqjlkJEgPiBkaXJlY3Rpb247Civotbflp4sgPiBvcmlnaW5hdGU7CivnpYforoAgPiByZWFkXC1vbmx5Owor5a245pyDID4gaW5zdGl0dXRlOwor5oe45bSWID4gcHJlY2lwaWNlOwor5qKd5Lu2ID4gY29uZGl0aW9uOwor6beT6bSjID4gcGFydHJpZGdlOwor5pyr56uvID4gZXh0cmVtaXR5Owor55Oc5YiGID4gcGFydGl0aW9uOwor6JmV55CGID4gdG9cLWhhbmRsZTsKK+a2jOePviA+IHNwcmluZ1wtdXA7Civnpq7nr4AgPiBldGlxdWV0dGU7Civmma7pgY0gPiB1bml2ZXJzYWw7CivororphpwgPiBkaXNmaWd1cmU7CivkuKbogqkgPiBhbG9uZ3NpZGU7CivonILlt6IgPiBob25leWNvbWI7CivkuK3nvo4gPiBjaGluYVwtdXNhOwor5pqX6KqeID4gY29kZVwtd29yZDsKK+err+WPoyA+IGludGVyZmFjZTsKK+S9juWxpCA+IGxvd1wtbGV2ZWw7Civph43ouYggPiB0b1wtcmVwZWF0Owor5L2P5a6FID4gcmVzaWRlbmNlOwor5LyR5oiwID4gYXJtaXN0aWNlOwor5omA5LulID4gdGhlcmVmb3JlOwor6K6a6LOeID4gdG9cLWFkbWlyZTsKK+a4m+W8sSA+IHRvXC13ZWFrZW47Civlj5vos6MgPiB0b1wtYmV0cmF5Owor5auM55aRID4gc3VzcGljaW9uOwor5Ly45bGVID4gZXh0ZW5zaW9uOwor5LiA6Ie0ID4gdW5hbmltb3VzOwor6IGy5piOID4gc3RhdGVtZW50Owor6aSK5q6WID4gY3VsdGl2YXRlOwor5p+/5a2QID4gcGVyc2ltbW9uOwor6ICB54mMID4gb2xkXC1icmFuZDsKK+WmlumiqCA+IGV2aWxcLXdpbmQ7CivpjLbluLYgPiB3YXRjaGJhbmQ7Civph43opoEgPiBpbXBvcnRhbnQ7CivmuJvlsJEgPiB0b1wtbGVzc2VuOwor5pyJ55uKID4gd2hvbGVzb21lOwor6YeN6KSHID4gdG9cLXJlcGVhdDsKK+eri+WIuyA+IGZvcnRod2l0aDsKK+a3seaAnSA+IHRvXC1wb25kZXI7Civml6nppJAgPiBicmVha2Zhc3Q7Civph47ooLsgPiBiYXJiYXJvdXM7Civml6npo68gPiBicmVha2Zhc3Q7Civlv4XpnIAgPiBlc3NlbnRpYWw7CivosqHmnbEgPiBzaG9wb3duZXI7CivomZvmp4sgPiBpbWFnaW5hcnk7Civoga/mg7MgPiBhc3NvY2lhdGU7CivmtbjmspIgPiBpbW1lcnNpb247Civmnb/mlqcgPiBicm9hZFwtYXhlOwor5ZCr57OKID4gb2JzY3VyaXR5Owor5reS5oWYID4gbWlzZXJhYmxlOwor5LiA56+HID4gb25lXC1zaWRlZDsKK+mNteWFpSA+IHRvXC1rZXlcLWluOwor5peL6aKoID4gd2hpcmx3aW5kOwor56Wd56aPID4gYmxlc3NpbmdzOwor5pyf5ru/ID4gdG9cLWV4cGlyZTsKK+itpuimuiA+IHZpZ2lsYW5jZTsKK+WOn+irkiA+IHRvXC1leGN1c2U7Civlrrbkv7EgPiBmdXJuaXR1cmU7CivmhJ/mn5MgPiBpbmZlY3Rpb247CivlrZTlrZAgPiBjb25mdWNpdXM7CivlrZDlrasgPiBvZmZzcHJpbmc7CivlrrbkurogPiBob3VzZWhvbGQ7CivlrrbkuosgPiBob3VzZXdvcms7CivlrqPlgrMgPiBwdWJsaWNpemU7Civku4rlubQgPiB0aGlzXC15ZWFyOwor5ZGI54++ID4gdG9cLWFwcGVhcjsKK+S4gOeZviA+IGFcLWh1bmRyZWQ7CivosqvlvrkgPiBpbXBsZW1lbnQ7Civku7LlpI8gPiBtaWRzdW1tZXI7CivorYnoqZ4gPiB0ZXN0aW1vbnk7Civnp5jmm7ggPiBzZWNyZXRhcnk7CivnqoHlh7ogPiBwcm9taW5lbnQ7Civmg6Hmr5IgPiBtYWxpY2lvdXM7CivkvLTkvrYgPiBjb21wYW5pb247CivmmILosrQgPiBleHBlbnNpdmU7CivpnLLpn5MgPiB0b1wtZXhwb3NlOwor5b2x6Z+/ID4gaW5mbHVlbmNlOwor5aSi6a2YID4gbmlnaHRtYXJlOwor5aW96YGLID4gZ29vZFwtbHVjazsKK+aatOeZvCA+IGJyZWFrXC1vdXQ7Civmh4nku5ggPiBkZWFsXC13aXRoOwor5pyJ5q+SID4gcG9pc29ub3VzOwor5byx6bm8ID4gd2Vha1wtYmFzZTsKK+axveiIuSA+IHN0ZWFtYm9hdDsKK+WPr+eskSA+IGxhdWdoYWJsZTsKK+WNiui8iSA+IGhhbGZcLWxvYWQ7Civlvq7ou58gPiBtaWNyb3NvZnQ7Civku5nlooMgPiBmYWlyeWxhbmQ7Civml6jotqMgPiBvYmplY3RpdmU7Civml6XotqggPiBncmFkdWFsbHk7CivkuovmhYsgPiBzaXR1YXRpb247CivlpKfpoZ4gPiBtYWluXC10eXBlOwor5pys5paHID4gdGhpc1wtdGV4dDsKK+eHn+mkiiA+IG51dHJpdGlvbjsKK+mgu+eOhyA+IGZyZXF1ZW5jeTsKK+WNlOitsCA+IGFncmVlbWVudDsKK+S4jea7vyA+IHJlc2VudGZ1bDsKK+mCo+m6vCA+IHNvXC1cKG11Y2hcKTsKK+W/heimgSA+IG5lY2Vzc2FyeTsKK+Wkp+mZuCA+IGNvbnRpbmVudDsKK+eip+iXjSA+IGRhcmtcLWJsdWU7CivlvoXpgYcgPiB0cmVhdG1lbnQ7CivlkIjnkIYgPiByYXRpb25hbGU7CivnjqnlvIQgPiByZXNvcnRcLXRvOwor5pyJ5pmCID4gc29tZXRpbWVzOwor5peB6LevID4gdG9cLWJ5cGFzczsKK+WknOmWkyA+IG5pZ2h0dGltZTsKK+avlOmEsCA+IG5laWdoYm91cjsKK+mdnuitsCA+IGNyaXRpY2l6ZTsKK+abuOaetiA+IGJvb2tzaGVsZjsKK+a3t+S6giA+IGNvbmZ1c2lvbjsKK+acieaViCA+IGVmZmVjdGl2ZTsKK+e8veebgiA+IGFsbXNcLWJvd2w7Civos4fliqkgPiBzdWJzaWRpemU7CivkuIrmrKEgPiBsYXN0XC10aW1lOwor54mM6JmfID4gdHJhZGVtYXJrOwor5LqU5aSpID4gZml2ZVwtZGF5czsKK+a2iOWksSA+IGRpc2FwcGVhcjsKK+aXgeingCA+IHNwZWN0YXRvcjsKK+ejqOefsyA+IG1pbGxzdG9uZTsKK+S7i+WFpSA+IGludGVydmVuZTsKK+S7peS4iiA+IG1vcmVcLXRoYW47Civnn5vpoK0gPiBzcGVhcmhlYWQ7CivlpKLpgbogPiB3ZXRcLWRyZWFtOwor6K6K55WwID4gdmFyaWF0aW9uOwor5rOi5q61ID4gd2F2ZVwtYmFuZDsKK+mboumWiyA+IHRvXC1kZXBhcnQ7CivnjbLlvpcgPiB0b1wtb2J0YWluOwor5ZCQ5rCjID4gYXNwaXJhdGVkOwor5p2x5Y2XID4gc291dGhlYXN0Owor5p2x5YyXID4gbm9ydGhlYXN0Owor5LiN5piOID4gbm90XC1jbGVhcjsKK+Wlh+ingCA+IHNwZWN0YWNsZTsKK+aUuemdqSA+IHRvXC1yZWZvcm07CivmhJvlnIsgPiBwYXRyaW90aWM7CivkuI3mlrcgPiB1bmNlYXNpbmc7Civku4rkuJYgPiB0aGlzXC1saWZlOwor5pyq5amaID4gdW5tYXJyaWVkOwor5byx6YW4ID4gd2Vha1wtYWNpZDsKK+aUtumbhiA+IHRvXC1nYXRoZXI7CivkuZjlrqIgPiBwYXNzZW5nZXI7CivkuIDmmYIgPiB0ZW1wb3Jhcnk7CivliqnplbcgPiBlbmNvdXJhZ2U7CivkuqTlh7ogPiBoYW5kXC1vdmVyOwor6aOf5ZOBID4gZm9vZHN0dWZmOwor6YWN572uID4gdG9cLWRlcGxveTsKK+WkseiqvyA+IGltYmFsYW5jZTsKK+a2iOWOuyA+IGVsaW1pbmF0ZTsKK+acrOWjmCA+IGhvbWVcLWJhc2U7CivkurrkuosgPiBwZXJzb25uZWw7CivmgrLmhZggPiBtaXNlcmFibGU7CivorZjnm7ggPiBzZW5zaXRpdmU7Civmm7jlupcgPiBib29rc3RvcmU7CivpgorploAgPiBzaWRlXC1kb29yOwor5Lit5bqtID4gY291cnR5YXJkOwor5Y+45qmfID4gY2hhdWZmZXVyOwor542o5a62ID4gZXhjbHVzaXZlOwor5p2x5LqeID4gZWFzdFwtYXNpYTsKK+W+qee/kiA+IHRvXC1yZXZpc2U7CivlkIjmoLwgPiBxdWFsaWZpZWQ7CivmmqvmmYIgPiB0ZW1wb3Jhcnk7Civpm5npgoogPiBiaWxhdGVyYWw7CivogJDlipsgPiBlbmR1cmFuY2U7CivmmI7norogPiBjbGVhclwtY3V0Owor5LiN5oOcID4gbm90XC1zdGludDsKK+aDoeWkoiA+IG5pZ2h0bWFyZTsKK+WOn+eQhiA+IHByaW5jaXBsZTsKK+S4u+WppiA+IGhvdXNld2lmZTsKK+eOqeWFtyA+IHBsYXl0aGluZzsKK+mbu+ipsSA+IHRlbGVwaG9uZTsKK+aWveiCpSA+IGZlcnRpbGl6ZTsKK+aUuemAoCA+IHRvXC1jaGFuZ2U7Civni4Dms4EgPiBjb25kaXRpb247CivkuI3lubMgPiBpbmp1c3RpY2U7CivpgJnpurwgPiBzb1wtXChtdWNoXCk7CivkuI3lt7IgPiBlbmRsZXNzbHk7Civpm5zosqggPiBncm9jZXJpZXM7CivmnKjljKAgPiBjYXJwZW50ZXI7CivoqZXpgbggPiB0b1wtY2hvb3NlOwor6Yas5rK5ID4gc295XC1zYXVjZTsKK+W7uumAoCA+IGNvbnN0cnVjdDsKK+inuOmsmiA+IHRlbnRhY2xlczsKK+aTpumfsyA+IGZyaWNhdGl2ZTsKK+WRqOWcjSA+IGVuY29tcGFzczsKK+S4jeWwjSA+IGluY29ycmVjdDsKK+W/g+ebriA+IG1lbnRhbGl0eTsKK+WPr+aVrCA+IHZlbmVyYWJsZTsKK+WPl+agvCA+IG9iamVjdGl2ZTsKK+Wkp+iNsyA+IHNveWFcLWJlYW47CivwoqWeID4gc2FtZVwtYXNcLeW/oTsKK+Wlkee0hCA+IGFncmVlbWVudDsKK+mxt+mtmiA+IGFsbGlnYXRvcjsKK+azouW5hSA+IGFtcGxpdHVkZTsKK+aUueiuiiA+IHRvXC1jaGFuZ2U7Civluq3pmaIgPiBjb3VydHlhcmQ7Civnpq7lhIAgPiBldGlxdWV0dGU7Civlj7PmiYsgPiByaWdodGhhbmQ7CivlibXpgKAgPiB0b1wtY3JlYXRlOwor5rWB5YWlID4gZmxvd1wtaW50bzsKK+azqOWwhCA+IGluamVjdGlvbjsKK+ehrOebpCA+IGhhcmRcLWRpc2s7Civlip/oqrIgPiBjbGFzc3dvcms7CivpgLHplbcgPiBwZXJpbWV0ZXI7CivmnIjlhYkgPiBtb29ubGlnaHQ7CivlpLHnuLEgPiBkaXNhcHBlYXI7CivlqZrlp7sgPiBtYXRyaW1vbnk7Civlj6PmiY0gPiBlbG9xdWVuY2U7CivkuI3lnKggPiBub3RcLWJlXC1pbjsKK+mereavmyA+IGZsYWdlbGx1bTsKK+aSq+mkiiA+IHRvXC1mb3N0ZXI7CivmtL7ku7sgPiBzZXRcLWFwYXJ0Owor5Yiq6ZmkID4gdG9cLWRlbGV0ZTsKK+mBoOi2syA+IGV4Y3Vyc2lvbjsKK+eEoemZkCA+IHVubGltaXRlZDsKK+mgkeW8tyA+IHRlbmFjaW91czsKK+eEoemXnCA+IHVucmVsYXRlZDsKK+iSuOeZvCA+IGV2YXBvcmF0ZTsKK+WPpOaAqiA+IGVjY2VudHJpYzsKK+W+l+eVtiA+IGV4cGVkaWVudDsKK+ayueW4gyA+IHRhcnBhdWxpbjsKK+S4i+WUhyA+IGxvd2VyXC1saXA7Civnvqnli5kgPiB2b2x1bnRlZXI7CivkuIrllIcgPiB1cHBlclwtbGlwOwor6aCB5b+DID4gdHlwZVwtcGFnZTsKK+S4jeWQnSA+IG5vdFwtc3RpbnQ7CivkuI3lkIwgPiBkaWZmZXJlbnQ7CivmsaHmn5MgPiBwb2xsdXRpb247CivliY3pgJQgPiBwcm9zcGVjdHM7CivnhoronIIgPiBidW1ibGViZWU7CivnuL3ntZAgPiBzdW1tYXJpemU7Civnvo7lkbMgPiBkZWxpY2lvdXM7CivlkLjlj5YgPiB0b1wtYWJzb3JiOwor5LiL5Y2IID4gYWZ0ZXJub29uOwor6YCx6YKKID4gcGVyaXBoZXJ5Owor5bm06ZmQID4gYWdlXC1saW1pdDsKK+S4i+WIlyA+IGZvbGxvd2luZzsKK+S4jeWHhiA+IG5vdFwtYWxsb3c7CivpoYzlkI0gPiBhdXRvZ3JhcGg7CivlpJrnq68gPiBtdWx0aXBvcnQ7CivmlYjog70gPiBlZmZpY2llbnQ7CivkuI3lgZwgPiBpbmNlc3NhbnQ7CivlpKfnoLIgPiBhcnRpbGxlcnk7CivkuI3lgLwgPiBub3RcLXdvcnRoOwor5rKZ5bKpID4gc2FuZHN0b25lOwor5rOi5Y+KID4gc3ByZWFkXC10bzsKK+W+ruazoiA+IG1pY3Jvd2F2ZTsKK+S4jeS8kSA+IGVuZGxlc3NseTsKK+eEoei+nCA+IGlubm9jZW5jZTsKK+asoeimgSA+IHNlY29uZGFyeTsKK+S4jeS6iCA+IG5vdFwtZ3JhbnQ7CivljrvlubQgPiBsYXN0XC15ZWFyOwor5LiN5LqGID4gdW5hYmxlXC10bzsKK+mgmOWcnyA+IHRlcnJpdG9yeTsKK+mfjOaApyA+IHRvdWdobmVzczsKK+ekvuWNgCA+IGNvbW11bml0eTsKK+eJiOasiiA+IGNvcHlyaWdodDsKK+WQkeWNlyA+IHNvdXRod2FyZDsKK+awkeatjCA+IGZvbGtcLXNvbmc7CivljbPmmYIgPiBpbW1lZGlhdGU7Civmkq3pgIEgPiBicm9hZGNhc3Q7CivlubjpgYsgPiBmb3J0dW5hdGU7Civnvo7kuK0gPiB1c2FcLWNoaW5hOwor6ZqV6JC9ID4gZmFsbFwtZG93bjsKK+eGn+e3tCA+IHByYWN0aWNlZDsKK+aUuee3qCA+IHRvXC1hZGFwdDsKK+ejgeaApyA+IG1hZ25ldGljOwor5aOT57eKID4gY29tcHJlc3M7CivphqvlrbggPiBtZWRpY2luZTsKK+WQnuS9tSA+IHRvXC1hbm5leDsKK+mdiOa0uyA+IGZsZXhpYmxlOwor5paH5427ID4gZG9jdW1lbnQ7CivlpJbnlKggPiBleHRlcm5hbDsKK+mCiue3miA+IHNpZGVsaW5lOwor5q2j57WxID4gb3J0aG9kb3g7Civlu7bnuowgPiBjb250aW51ZTsKK+mgu+S7jSA+IGZyZXF1ZW50Owor57ev57eaID4gbGF0aXR1ZGU7CivnhKHoqqQgPiB2ZXJpZmllZDsKK+aXpeabhiA+IGNhbGVuZGFyOwor5Ymd6JC9ID4gcGVlbFwtb2ZmOwor6aCQ5Y2cID4gZm9yZXRlbGw7CivlubvosaEgPiBpbGx1c2lvbjsKK+isueaFjiA+IGNhdXRpb3VzOwor54m55oCnID4gcHJvcGVydHk7CivojLbppKggPiB0ZWFob3VzZTsKK+mzpeexoCA+IGJpcmRjYWdlOwor5b6u5piOID4gdHdpbGlnaHQ7Civlu7rnr4kgPiBidWlsZGluZzsKK+WPi+WWhCA+IGZyaWVuZGx5Owor5bu656uLID4gY3JlYXRpb247CivpoIbliKkgPiBzbW9vdGhseTsKK+W/g+aJiyA+IG5ld1wtaGFuZDsKK+WGsOmamSA+IGNyZXZhc3NlOwor6Zy45qyKID4gaGVnZW1vbnk7CivljbHmgKUgPiBjcml0aWNhbDsKK+mamee4qyA+IGFwZXJ0dXJlOwor6Kaq6LqrID4gcGVyc29uYWw7CivnorrlrpogPiBkZWZpbml0ZTsKK+e1gui6qyA+IGxpZmVsb25nOwor6KiY6ICFID4gcmVwb3J0ZXI7Civopo/pgb8gPiB0b1wtZXZhZGU7CivniafluKsgPiBjaGFwbGFpbjsKK+aUtuebiiA+IGVhcm5pbmdzOwor5YW36auUID4gY29uY3JldGU7CivlubPooYwgPiBwYXJhbGxlbDsKK+W/oOWvpiA+IGZhaXRoZnVsOwor5q2l55m8ID4gZm9vdHdvcms7CivliIboo4IgPiBzcGxpdFwtdXA7CivmlrDmm7ggPiBuZXdcLWJvb2s7Civlj6PkuqQgPiBvcmFsXC1zZXg7CivlibXnq4sgPiB0b1wtZm91bmQ7CivnhaTnrrEgPiBjb2FsXC1ib3g7CivnvLrkuY8gPiBzaG9ydGFnZTsKK+aXpeW+jCA+IHNvbWV0aW1lOwor6YKK55WMID4gYm91bmRhcnk7Civngb3pm6MgPiBkaXNhc3RlcjsKK+W+ueW6lSA+IHRob3JvdWdoOwor6bGJ6KOZID4gY2FsaXBhc2g7Civorablj6UgPiBhcGhvcmlzbTsKK+aXqeW3siA+IGxvbmdcLWFnbzsKK+mblueEtiA+IGFsdGhvdWdoOwor56C05puJID4gZGF5YnJlYWs7Civpm6jmu7QgPiByYWluZHJvcDsKK+aYjuWkqSA+IHRvbW9ycm93Owor5aaW5a29ID4gZXZpbGRvZXI7Civpm7vmsKMgPiBlbGVjdHJpYzsKK+mFrOWgsSA+IHRvXC1yZXBheTsKK+mBuueUoiA+IGhlcml0YWdlOwor56Gs5bqmID4gaGFyZG5lc3M7CivnhKHogYogPiBub25zZW5zZTsKK+apq+mBjiA+IHRyYXZlcnNlOwor5b6B5oiwID4gY2FtcGFpZ247CivoqrLmnKwgPiB0ZXh0Ym9vazsKK+WHi+isnSA+IGxhbmd1aXNoOwor6KiI566XID4gdG9cLWNvdW50Owor6ZaL6ZmkID4gdG9cLWV4cGVsOwor6YGp55W2ID4gc3VpdGFibGU7Civnupblt6cgPiBkZWxpY2F0ZTsKK+W5s+iHuiA+IHBsYXRmb3JtOwor5aSn5pa5ID4gZ2VuZXJvdXM7CivnhKHnuKsgPiBzZWFtbGVzczsKK+WGoOi7jSA+IGNoYW1waW9uOwor5YeG6KixID4gdG9cLWFsbG93Owor6YSw5bGFID4gbmVpZ2hib3I7Civpm7vmoq8gPiBlbGV2YXRvcjsKK+iTi+WxpCA+IGNhcFwtcm9jazsKK+mdouWwjSA+IGNvbmZyb250Owor54Sh57eaID4gd2lyZWxlc3M7CivnorrliIcgPiBkZWZpbml0ZTsKK+mAmue0hSA+IHZlcnlcLXJlZDsKK+WMheaKhCA+IG91dGZsYW5rOwor6L6o6KqNID4gaWRlbnRpZnk7Civljp/kvoYgPiBvcmlnaW5hbDsKK+WkmuaVuCA+IG1ham9yaXR5Owor54mp5ZOBID4gYXJ0aWNsZXM7CivmlL/msrsgPiBwb2xpdGljczsKK+WNiuWknCA+IG1pZG5pZ2h0Owor5Y2I5aScID4gbWlkbmlnaHQ7CivmlrDlubQgPiBuZXdcLXllYXI7Civml4XlrqIgPiB0cmF2ZWxlcjsKK+mAvOecnyA+IGxpZmVsaWtlOwor5q2l5rOVID4gZm9vdHdvcms7Civlhazph5AgPiBkZWNpZ3JhbTsKK+auuuaIriA+IG1hc3NhY3JlOwor5Yqb5rCjID4gc3RyZW5ndGg7Civlhafpg6ggPiBpbnRlcmlvcjsKK+imhuiTiyA+IHRvXC1jb3ZlcjsKK+e5oeW4tyA+IHRhcGVzdHJ5Owor5aSq5b+ZID4gdG9vXC1idXN5Owor552h55ygID4gc2xlZXBpbmc7Civoo53po74gPiBkZWNvcmF0ZTsKK+WNgeWbmyA+IGZvdXJ0ZWVuOwor5bmz562JID4gZXF1YWxpdHk7Civnmb3ph5EgPiBwbGF0aW51bTsKK+WMheWxpCA+IGNsYWRkaW5nOwor6L2J6YCBID4gdHJhbnNmZXI7Civlho3oposgPiBnb29kXC1ieWU7CivlpKLlubsgPiBpbGx1c2lvbjsKK+mAleebtCA+IHN0cmFpZ2h0Owor5Y2x5LqhID4gYXRcLXN0YWtlOwor6I2J6I2JID4gY2FyZWxlc3M7Civlt6foqIggPiBtYW5ldXZlcjsKK+iRl+aJiyA+IGNvbW1lbmNlOwor5paZ5a2QID4gbWF0ZXJpYWw7Civnm7LohbggPiBhcHBlbmRpeDsKK+aUr+afsSA+IG1haW5zdGF5Owor5b2i5a65ID4gZGVzY3JpYmU7CivnhKHnlpEgPiBub1wtZG91YnQ7CivlvLfmgo0gPiB2YWxsaWFudDsKK+eyl+mHjiA+IGluc29sZW50Owor6KKL6bygID4ga2FuZ2Fyb287CivlppbkurogPiBtYWdpY2lhbjsKK+i7n+mrlCA+IHNvZnR3YXJlOwor5paw5Z6LID4gbmV3XC10eXBlOwor5Z+56IKyID4gdG9cLXRyYWluOwor54Wk5rK5ID4ga2Vyb3NlbmU7CivliqDmmYIgPiBvdmVydGltZTsKK+WFiei8nSA+IHJhZGlhbmNlOwor5b6p5YWDID4gcmVjb3Zlcnk7CivlvLfluqYgPiBzdHJlbmd0aDsKK+WNgeWFqyA+IGVpZ2h0ZWVuOwor5aWz5YWSID4gZGF1Z2h0ZXI7CivlpJrlsJEgPiBob3dcLW11Y2g7CivljYHlhYsgPiBkZWNhZ3JhbTsKK+WcsOmbtyA+IGxhbmRtaW5lOwor5aaC5LuKID4gbm93YWRheXM7Civpgqrmg6EgPiBzaW5pc3RlcjsKK+ingOeciyA+IHRvXC13YXRjaDsKK+W+l+WIhiA+IHRvXC1zY29yZTsKK+WMheWcjSA+IHN1cnJvdW5kOwor5q+U5Za7ID4gbWV0YXBob3I7Civopo/nr4QgPiBzdGFuZGFyZDsKK+i7gOmrlCA+IHRoZVwtYm9keTsKK+ehrOS7tiA+IGhhcmR3YXJlOwor5aSp5aCCID4gcGFyYWRpc2U7CivljYHkuZ0gPiBuaW5ldGVlbjsKK+WFieitnCA+IHNwZWN0cnVtOwor6KOc6YG6ID4gYWRkZW5kdW07CivpgaDmnbEgPiBmYXJcLWVhc3Q7CivljYHkuIkgPiB0aGlydGVlbjsKK+apn+iDvSA+IGZ1bmN0aW9uOwor6JKZ5Y+kID4gbW9uZ29saWE7CivpgaDmma8gPiBwcm9zcGVjdDsKK+e0kOe0hCA+IG5ld1wteW9yazsKK+aVmeWwjiA+IGluc3RydWN0Owor5o+Q6K2wID4gcHJvcG9zYWw7CivlhKrotoogPiBzdXBlcmlvcjsKK+mAsuatpSA+IHByb2dyZXNzOwor6YGu5o6pID4gdG9cLWNvdmVyOwor6Zu75aCxID4gdGVsZWdyYW07CivmkbnnlasgPiBkZXNjcmliZTsKK+i7iumWkyA+IHdvcmtzaG9wOwor5b6A5L6GID4gZGVhbGluZ3M7Civoqr/li5UgPiB0cmFuc2ZlcjsKK+W8leWwjiA+IHRvXC1ndWlkZTsKK+ijneiyqCA+IHNoaXBwaW5nOwor5Yqb5bqmID4gZHluYW1pc207CivpgY7mlrwgPiB0b29cLW11Y2g7Civnm6PnpoEgPiBpbXByaXNvbjsKK+WGsOeqliA+IGljZWhvdXNlOwor5aCC55qHID4gaW1wb3Npbmc7CivltIfpq5ggPiBtYWplc3RpYzsKK+ecgeeVpSA+IG9taXNzaW9uOwor5q+N5L+CID4gbWF0ZXJuYWw7CivmjqHosrcgPiBwdXJjaGFzZTsKK+i8leimliA+IGNvbnRlbXB0Owor57K+6Ie0ID4gZGVsaWNhY3k7CivpgbLlu7YgPiB0b1wtZGVsYXk7CivmlJzluLYgPiB0b1wtY2Fycnk7Civlu7blsZUgPiB0b1wtc2NhbGU7CivovrLnlLAgPiBmYXJtbGFuZDsKK+mDqOS9jSA+IHBvc2l0aW9uOwor5Ym15bu6ID4gdG9cLWZvdW5kOwor5YWn572uID4gaW50ZXJuYWw7CivpmZDmnJ8gPiBkZWFkbGluZTsKK+e3iuW8tSA+IGNyaXRpY2FsOwor6KiY5oa2ID4gbWVtb3JpZXM7CivpgbflsLEgPiB0b1wteWllbGQ7Civnsr7nvo4gPiBkZWxpY2F0ZTsKK+W8t+WLgSA+IHBvd2VyZnVsOwor5paH5Lu2ID4gZG9jdW1lbnQ7CivmrrrkurogPiBob21pY2lkZTsKK+mCiuWigyA+IGZyb250aWVyOwor5aSW5L6GID4gZXh0ZXJuYWw7CivliZvmgKcgPiByaWdpZGl0eTsKK+WLg+WLgyA+IHRocml2aW5nOwor6YGp5a6cID4gc3VpdGFibGU7Civmk4Hmk6AgPiB0b1wtY3Jvd2Q7CivmjojoqrIgPiB0b1wtdGVhY2g7Civop6PmlaMgPiBkaXNzb2x2ZTsKK+mZsOaApyA+IGZlbWluaW5lOwor5YuV5L2cID4gbW92ZW1lbnQ7Civmlabkv4MgPiB0b1wtcHJlc3M7Civpm4flk6EgPiBlbXBsb3llZTsKK+eAieiXpSA+IGxheGF0aXZlOwor5o+b572uID4gZGlzcGxhY2U7Civpm6jlgpggPiB1bWJyZWxsYTsKK+WcluisgCA+IGNvbnNwaXJlOwor6JGj5LqLID4gZGlyZWN0b3I7Civli5XkurogPiB0b3VjaGluZzsKK+mYu+aTiiA+IHRvXC1jaGVjazsKK+ijnOiKsSA+IGFwcGxpcXVlOwor5aGX5oq5ID4gdG9cLXNtZWFyOwor6aqo6aq8ID4gc2tlbGV0b247Civoo53oiLkgPiBzaGlwbWVudDsKK+asuuWjkyA+IHRvXC1idWxseTsKK+iNkua2vCA+IGRlc29sYXRlOwor5Ye55p2/ID4gaW50YWdsaW87CivliqPli6IgPiBpbmZlcmlvcjsKK+WIhuaVuCA+IGZyYWN0aW9uOwor55uO54S2ID4gYWJ1bmRhbnQ7Civlo5PlipsgPiBwcmVzc3VyZTsKK+mAo+W/mSA+IHByb21wdGx5Owor6YKj5YCLID4gdGhhdFwtb25lOwor54Sh5oOFID4gcGl0aWxlc3M7Civmk6blr6sgPiB0b1wtZXJhc2U7Civlo5PliLYgPiBzdXBwcmVzczsKK+eyvueiuiA+IGFjY3VyYXRlOwor5YSq576OID4gZ3JhY2VmdWw7CivoiKrpgYsgPiBzaGlwcGluZzsKK+WHveaVuCA+IGZ1bmN0aW9uOwor57aT5bi4ID4gZXZlcnlkYXk7CivmraXlhbUgPiBpbmZhbnRyeTsKK+W5s+aIvyA+IGJ1bmdhbG93Owor5Yaw5ra8ID4gaWNlXC1jb2xkOwor5bm75oOzID4gZGVsdXNpb247Civluo/luZUgPiBwcm9sb2d1ZTsKK+WIu+WvqyA+IGluc2NyaWJlOwor5aKT5ZywID4gY2VtZXRlcnk7Civpgb/lhY0gPiB0b1wtYXZlcnQ7Civopo/moLwgPiBzdGFuZGFyZDsKK+WgtOaJgCA+IGxvY2F0aW9uOwor6L+95oK8ID4gbW91cm5pbmc7Civpm4fkuLsgPiBlbXBsb3llcjsKK+aPreeZvCA+IGRpc2Nsb3NlOwor6Kix5Y+vID4gdG9cLWFsbG93Owor5YKz6KiKID4gc3VicG9lbmE7CivoqZXkvLAgPiBldmFsdWF0ZTsKK+aLlumeiyA+IHNsaXBwZXJzOwor5YG96YCgID4gdG9cLWZvcmdlOwor54Gr54mGID4gZmlyZXdhbGw7Civlh7bmiYsgPiBtdXJkZXJlcjsKK+eEoeWusyA+IGhhcm1sZXNzOwor6Luf6IaPID4gb2ludG1lbnQ7CivmjozogbIgPiBhcHBsYXVzZTsKK+ihqOingCA+IGFwcGFyZW50Owor5Z+L5rKSID4gb2JsaXZpb247CivlubPluLggPiBvcmRpbmFyeTsKK+aLlOmZpCA+IHB1bGxcLW91dDsKK+WinuWKoCA+IHRvXC1yYWlzZTsKK+i7jOiMgyA+IHN0YW5kYXJkOwor5pGp5pOmID4gZnJpY3Rpb247CivoprrlvpcgPiB0b1wtdGhpbms7Civpq5josrQgPiBncmFuZGV1cjsKK+WJquWIgCA+IHNjaXNzb3JzOwor5YWF55W2ID4gc2VydmVcLWFzOwor54K65pmCID4gdGltZXdpc2U7CivpgZTliLAgPiB0b1wtcmVhY2g7Civopb/mlrkgPiB0aGVcLXdlc3Q7CivpgYvli5UgPiBtb3ZlbWVudDsKK+asuuS+riA+IHRvXC1idWxseTsKK+mAmuWgsSA+IGJ1bGxldGluOwor5pKl5a2QID4gcGxlY3RydW07CivluorlooogPiBtYXR0cmVzczsKK+aKl+mrlCA+IGFudGlib2R5Owor6Ieo6L+RID4gY2xvc2VcLXRvOwor6I6r5aSnID4gZ3JlYXRlc3Q7CivntITmnZ8gPiByZXN0cmljdDsKK+WIh+WvpiA+IGZlYXNpYmxlOwor55WM6ZmQID4gYm91bmRhcnk7Civpmb3lhYkgPiBzdW5zaGluZTsKK+WIhuWtkCA+IG1vbGVjdWxlOwor55u45oeJID4gcmVsZXZhbnQ7CivnnL7lpJogPiBudW1lcm91czsKK+mYu+WhniA+IHRvXC1ibG9jazsKK+e1leWwjSA+IGFic29sdXRlOwor5YiG5aipID4gZGVsaXZlcnk7CivnrqHpgZMgPiBwaXBlbGluZTsKK+mBiuS8tCA+IHBsYXltYXRlOwor5bel5qWtID4gaW5kdXN0cnk7CivlhrDmjpIgPiBpY2VcLXJhZnQ7CivpgLLlhaUgPiB0b1wtZW50ZXI7Civot6/pnaIgPiBwYXZlbWVudDsKK+ebtOW+kSA+IGRpYW1ldGVyOwor54Sh5ZCNID4gbmFtZWxlc3M7CivntZDlqZogPiB0b1wtbWFycnk7CivloLXloZ4gPiBibG9ja2FnZTsKK+aSpOWbniA+IHdpdGhkcmF3Owor552+5Li4ID4gdGVzdGljbGU7CivntpPlhbggPiBjbGFzc2ljczsKK+mosOmosCA+IHN0ZWFtaW5nOwor6YC85Lq6ID4gcHJlc3Npbmc7CivovJ3nhYwgPiBzcGxlbmRpZDsKK+eEoeWKqSA+IGhlbHBsZXNzOwor5o6h55SoID4gdG9cLWFkb3B0Owor5bey5pWFID4gdGhlXC1sYXRlOwor5bqP5YiXID4gc2VxdWVuY2U7CivnmbzmsZcgPiB0b1wtc3dlYXQ7CivlnIvnq4sgPiBuYXRpb25hbDsKK+eutOiogCA+IHByb3ZlcmJzOwor6KOc54iQID4gZmV0dGxpbmc7Civot53pm6IgPiBkaXN0YW5jZTsKK+iHquijvSA+IGhvbWVtYWRlOwor6Zi75YqbID4gb2JzdGFjbGU7CivnmJ/nlqsgPiBlcGlkZW1pYzsKK+igleiglSA+IHdpZ2dsaW5nOwor6YCB5YilID4gZmFyZXdlbGw7CivnhKHkurogPiB1bm1hbm5lZDsKK+WFrOaWpCA+IGtpbG9ncmFtOwor5YWs5paHID4gZG9jdW1lbnQ7Civmir3osaEgPiBhYnN0cmFjdDsKK+WHuuWPoyA+IHRvXC1zcGVhazsKK+imquWWhCA+IGdvb2R3aWxsOwor6IiI6Ie0ID4gaW50ZXJlc3Q7CivpgJTkuK0gPiBlblwtcm91dGU7CivplpPmjqUgPiBpbmRpcmVjdDsKK+mQtei3ryA+IHJhaWxyb2FkOwor5pCs5byEID4gbW92ZVwtc3RoOwor5qiZ5pysID4gc3BlY2ltZW47CivpgIDkvY0gPiBhYmRpY2F0ZTsKK+e1hOWQiCA+IGFzc2VtYmxlOwor5aGM5LiLID4gY29sbGFwc2U7CivpgIPkuqEgPiBmdWdpdGl2ZTsKK+aIsOmspSA+IHRvXC1maWdodDsKK+e1seS4gCA+IHRvXC11bmlmeTsKK+WIkeS6iyA+IGNyaW1pbmFsOwor5o+Q5qGIID4gcHJvcG9zYWw7CivooZ3nqoEgPiBjb25mbGljdDsKK+i/veS4iiA+IG92ZXJ0YWtlOwor6Iiq56m6ID4gYXZpYXRpb247Civkv67ovq0gPiByaGV0b3JpYzsKK+a/vua2siA+IGZpbHRyYXRlOwor5bCN6Z2iID4gb3Bwb3NpdGU7Civlh73ku7YgPiBsZXR0ZXJlczsKK+ebuOWPjSA+IG9wcG9zaXRlOwor5oyB57qMID4gY29udGludWU7CivpprTpub8gPiByZWluZGVlcjsKK+aJi+mQsiA+IGJyYWNlbGV0Owor6ISr6ZuiID4gc2VwYXJhdGU7CivpqZroqJ0gPiBjb25mb3VuZDsKK+iEiumqqCA+IGJhY2tib25lOwor5o2V542yID4gdG9cLWNhdGNoOwor6aeV6aebID4gdG9cLWRyaXZlOwor5o6h5qijID4gc2FtcGxpbmc7CivntJTlk4EgPiBzdGVybGluZzsKK+mWgOW+kiA+IGRpc2NpcGxlOwor6L+R5L6GID4gcmVjZW50bHk7Civlr7rpmaIgPiBjbG9pc3RlcjsKK+etlOipsSA+IHRvXC1yZXBseTsKK+alreeVjCA+IGluZHVzdHJ5Owor54Gr5bGxID4gdm9sY2FuaWM7Civlhbblr6YgPiBhY3R1YWxseTsKK+eUn+ipniA+IG5ld1wtd29yZDsKK+i/keS5jiA+IGNsb3NlXC10bzsKK+aiteiqniA+IHNhbnNrcml0Owor5L6/6YGTID4gc2hvcnRjdXQ7CivopLLlrZAgPiB0cm91c2VyczsKK+Wvp+mdnCA+IHRyYW5xdWlsOwor55yB5Lu9ID4gcHJvdmluY2U7CivlsIHpjpYgPiBibG9ja2FkZTsKK+S/r+imliA+IG92ZXJsb29rOwor5bSp5r2wID4gY29sbGFwc2U7CivovInmlJwgPiB0b1wtY2Fycnk7Civmv5XmsKMgPiBtb2lzdHVyZTsKK+eyvuWvhiA+IGFjY3VyYWN5Owor6Iy25YyZID4gdGVhc3Bvb247CivlnIvmsJEgPiBuYXRpb25hbDsKK+WFhOW8nyA+IGJyb3RoZXJzOwor5qCh6amXID4gdG9cLWNoZWNrOwor57KX5b+DID4gY2FyZWxlc3M7CivlhrDlhrcgPiBpY2VcLWNvbGQ7CivoiIjnm5sgPiBmbG91cmlzaDsKK+WAmOiLpSA+IHByb3ZpZGVkOwor6Zec5L+CID4gcmVsYXRpb247CivnmbzlsIQgPiB0b1wtc2hvb3Q7CivmiYvotrMgPiBtb3ZlbWVudDsKK+apn+WLlSA+IGZsZXhpYmxlOwor5o6h5o6YID4gZXhjYXZhdGU7CivotorpgY4gPiB0b1wtY3Jvc3M7Civoo4HmkqQgPiBkaXNzb2x2ZTsKK+WFteWZqCA+IHdlYXBvbnJ5Owor5ouU56+AID4gam9pbnRpbmc7CivmvJTnv5IgPiBleGVyY2lzZTsKK+e0iuS6giA+IGRpc29yZGVyOwor6Lez6IieID4gdG9cLWRhbmNlOwor56+E55aHID4gY2F0ZWdvcnk7CivlhbXlk6EgPiBzb2xkaWVyczsKK+a6tuinoyA+IGRpc3NvbHZlOwor5o6Z5omOID4gc3RydWdnbGU7Civmu7LoibIgPiBibGVlZGluZzsKK+ibi+m7gyA+IGVnZ1wteW9sazsKK+WFseWSjCA+IHJlcHVibGljOwor6LuN5pa5ID4gbWlsaXRhcnk7Civmp4vmg7MgPiBjb25jZWl2ZTsKK+iDjOmdoiA+IHRoZVwtYmFjazsKK+i8lOWwjiA+IHRvXC1jb2FjaDsKK+WvtuiytCA+IHZhbHVhYmxlOwor5YWl5Y+jID4gZW50cmFuY2U7CivpqZXnuLEgPiBhcnJvZ2FudDsKK+mWi+WJtSA+IGluaXRpYXRlOwor5L616J2VID4gdG9cLWVyb2RlOwor5YSA5byPID4gY2VyZW1vbnk7CivmiYHon7IgPiBmbGF0d29ybTsKK+WFvOS9tSA+IHRvXC1hbm5leDsKK+aoguWckiA+IHBhcmFkaXNlOwor5a656YePID4gY2FwYWNpdHk7Civmj4/lnJYgPiB0b1wtdHJhY2U7CivotaTotrMgPiBiYXJlZm9vdDsKK+WxgeiCoSA+IGJ1dHRvY2tzOwor55m85YuVID4gdG9cLXN0YXJ0Owor6KO95ZOBID4gcHJvZHVjdHM7CivlhbHkuqsgPiB0b1wtc2hhcmU7Civoi7Hkv4ogPiBoYW5kc29tZTsKK+aNt+W+kSA+IHNob3J0Y3V0Owor6KGM5qWtID4gaW5kdXN0cnk7Civppqzou4ogPiBjYXJyaWFnZTsKK+WFrOS4uyA+IHByaW5jZXNzOwor5o+Q5ZCNID4gbm9taW5hdGU7Civlm5vmlrkgPiBmb3VyXC13YXk7CivnspfljrIgPiBhYnJhc2l2ZTsKK+i7iuW7giA+IGNhcnJpYWdlOwor6Ieq5rK7ID4gYXV0b25vbXk7Civpq5jmnrYgPiBvdmVyaGVhZDsKK+WbsOaDkSA+IGJld2lsZGVyOwor56yR6IGyID4gbGF1Z2h0ZXI7Civmnb7pvKAgPiBzcXVpcnJlbDsKK+WEquWLoiA+IHN1cGVyaW9yOwor57C/5a2QID4gbm90ZWJvb2s7CivlgrLmhaIgPiBhcnJvZ2FudDsKK+WFiOS7pCA+IHNoaWxsaW5nOwor5rig6YGTID4gY2hhbm5lbHM7CivmoKHoqIIgPiByZXZpc2lvbjsKK+ajkueQgyA+IGJhc2ViYWxsOwor5YSq5YWIID4gcHJpb3JpdHk7CivlmbTms4kgPiBmb3VudGFpbjsKK+i7jeWjqyA+IHNlcmdlYW50Owor5L6G6IeoID4gYXBwcm9hY2g7CivooaPlu5ogPiB3YXJkcm9iZTsKK+S7vemHjyA+IHF1YW50aXR5Owor5YOx5ZOhID4gZW1wbG95ZWU7Civmh4noqbIgPiBvdWdodFwtdG87CivmjqHlhYkgPiBsaWdodGluZzsKK+iBmumbhiA+IGFzc2VtYmxlOwor5oyJ5o26ID4gcmVzdHJhaW47Civoo4HliKQgPiBqdWRnbWVudDsKK+S6uumhniA+IGh1bWFuaXR5Owor5Lyw6KiIID4gZXN0aW1hdGU7CivlnZDkuIsgPiBzaXRcLWRvd247CivlronorJAgPiB0cmFucXVpbDsKK+WbnuWutiA+IGhvbWV3YXJkOwor5L2/6ICFID4gZW1pc3Nhcnk7CivltKnloYwgPiBjb2xsYXBzZTsKK+aJk+egtCA+IHRvXC1icmVhazsKK+WwjeeosSA+IHN5bW1ldHJ5Owor5YGH5pyfID4gdmFjYXRpb247Civpo7zppIogPiB0b1wtcmFpc2U7CivooaPlrZAgPiBjb3ZlcmluZzsKK+izvOiytyA+IHB1cmNoYXNlOwor6Lu85LqLID4gYW5lY2RvdGU7CivnqIDpo68gPiBwb3JyaWRnZTsKK+aKseatiSA+IGJlXC1zb3JyeTsKK+a8gua1riA+IHRvXC1mbG9hdDsKK+alteWlvSA+IGZhYnVsb3VzOwor5qW15aSnID4gZW5vcm1vdXM7CivnlYzmqJkgPiBsYW5kbWFyazsKK+WcsOS9jSA+IHBvc2l0aW9uOwor56ix6YeNID4gdG9cLXdlaWdoOwor56+A5oW2ID4gZmVzdGl2YWw7CivooLvlubIgPiByZWNrbGVzczsKK+msp+WNgCA+IGRvd250b3duOwor5rqW56K6ID4gYWNjdXJhdGU7CivkvrXnlaUgPiBpbnZhc2lvbjsKK+S9tee0lyA+IGRvdWJsaW5nOwor55eF5aSrID4gc2lja1wtbWFuOwor5o6I5LqIID4gdG9cLWF3YXJkOwor5a246KGTID4gbGVhcm5pbmc7CivlnIvlhacgPiBkb21lc3RpYzsKK+iytOmHjSA+IHByZWNpb3VzOwor5bGg5q66ID4gbWFzc2FjcmU7Civmi5TmjokgPiB0b1wtcGx1Y2s7CivnsKHljJYgPiBzaW1wbGlmeTsKK+mpleapqyA+IGFycm9nYW50Owor6LK36YCyID4gcHVyY2hhc2U7CivosrfpgJogPiB0b1wtYnJpYmU7CivmhY7ph40gPiBjYXV0aW91czsKK+a7kea6nCA+IHNsaXBwZXJ5Owor5oyH5bCOID4gdG9cLWd1aWRlOwor5L2N572uID4gcG9zaXRpb247Civnr6HlpaogPiB0b1wtdXN1cnA7Civoh6jluoogPiBjbGluaWNhbDsKK+agveeoriA+IHRvXC1wbGFudDsKK+aIsOeVpSA+IHN0cmF0ZWd5Owor5ZyS5LiBID4gZ2FyZGVuZXI7CivmnKzpq5QgPiBub3VtZW5vbjsKK+mqqOW5uSA+IGJhY2tib25lOwor5Lq66YGTID4gaHVtYW5pdHk7CivouqvliIYgPiBwb3NpdGlvbjsKK+S6uumAoCA+IG1hblwtbWFkZTsKK+eUoualrSA+IGluZHVzdHJ5Owor5bGF5rCRID4gcmVzaWRlbnQ7CivohbPmraUgPiBmb290c3RlcDsKK+aLvOWtlyA+IHNwZWxsaW5nOwor5p2x6YOoID4gdGhlXC1lYXN0Owor6auY5ZywID4gaGlnaGxhbmQ7Civlm7rku7YgPiBmaXJtd2FyZTsKK+S6uui6qyA+IHBlcnNvbmFsOwor6ZGy5bWMID4gdG9cLWlubGF5Owor5qWt5YuZID4gYnVzaW5lc3M7Civlr5/nnIsgPiB0b1wtd2F0Y2g7CivlgI3mlbggPiBtdWx0aXBsZTsKK+WwjeeFpyA+IGNvbnRyYXN0Owor5oq15oq8ID4gbW9ydGdhZ2U7CivogqnohoAgPiBzaG91bGRlcjsKK+euseWtkCA+IHN1aXRjYXNlOwor6Lqr5Lu9ID4gaWRlbnRpdHk7CivkvY7nrYkgPiBpbmZlcmlvcjsKK+WwseatpCA+IGFuZFwtdGh1czsKK+ethuaetiA+IHBlblwtcmFjazsKK+WvtueJqSA+IHRyZWFzdXJlOwor55Sf5pelID4gYmlydGhkYXk7CivpkJjmk7ogPiBwZW5kdWx1bTsKK+mpheaVoyA+IGRpc3BlcnNlOwor5oqx5oCoID4gY29tcGxhaW47CivnrYnmlrwgPiBlcXVhbFwtdG87Civlrbjnv5IgPiB0b1wtbGVhcm47CivmipjmiaMgPiBkaXNjb3VudDsKK+aHuOeWkSA+IHN1c3BlbnNlOwor54+N6LK0ID4gcHJlY2lvdXM7Civmh7fnlpEgPiB0b1wtZG91YnQ7CivnlbblpKkgPiB0aGF0XC1kYXk7CivpjbXnm6QgPiBrZXlib2FyZDsKK+aMh+WNlyA+IHRvXC1ndWlkZTsKK+WutueUqCA+IGhvbWVcLXVzZTsKK+eUn+aEjyA+IGJ1c2luZXNzOwor6ICX6LK7ID4gdG9cLXdhc3RlOwor6Ie05YqbID4gd29ya1wtZm9yOwor5Lqb6KixID4gdHJpZmxpbmc7CivkupTop5IgPiBwZW50YWdvbjsKK+etieW+hSA+IHdhaXRcLWZvcjsKK+aIv+adsSA+IGxhbmRsb3JkOwor5L+u5bu6ID4gdG9cLWJ1aWxkOwor5rWq6LK7ID4gdG9cLXdhc3RlOwor56qB55m8ID4gb3V0YnVyc3Q7Civkv6HlvpIgPiBiZWxpZXZlcjsKK+aJk+aOgyA+IHRvXC1jbGVhbjsKK+aKgOW3pSA+IG1lY2hhbmljOwor5oyB5LmFID4gZHVyYXRpb247CivnrZTlsI0gPiB0b1wtcmVwbHk7Civpoqjou4ogPiB3aW5kbWlsbDsKK+aJi+aPkCA+IHBvcnRhYmxlOwor6aOb6KGMID4gYXZpYXRpb247CivkuI3pnYggPiBub3RcLXdvcms7CivlronnlJ8gPiBwZWFjZWZ1bDsKK+aJk+aJriA+IGRyZXNzXC11cDsKK+WAkuWhjCA+IGNvbGxhcHNlOwor55Sf5a2YID4gdG9cLWV4aXN0Owor6LOm56iFID4gdGF4YXRpb247CivlrZTnqbQgPiBhcGVydHVyZTsKK+a1tOihoyA+IGJhdGhyb2JlOwor5LiA6Z2iID4gb25lXC1zaWRlOwor5oGQ6b6NID4gZGlub3NhdXI7CivlsbHlnaEgPiBoaWxsc2lkZTsKK+mQteWZqCA+IGhhcmR3YXJlOwor55Wr5YOPID4gcG9ydHJhaXQ7CivnlbbkvZwgPiB0cmVhdFwtYXM7Civnpq7osowgPiBjb3VydGVzeTsKK+agveakjSA+IHRvXC1wbGFudDsKK+S/oeWwgSA+IGVudmVsb3BlOwor6IGy56ixID4gdG9cLWNsYWltOwor5bCN5omLID4gb3Bwb25lbnQ7Civkv6HlroggPiBhYmlkZVwtYnk7CivogZbntIQgPiBjb3ZlbmFudDsKK+agoeatoyA+IHJlZ3VsYXRlOwor6YeN6bueID4gZW1waGFzaXM7Civogb3nnL4gPiBhdWRpZW5jZTsKK+mojuW4qyA+IGhvcnNlbWFuOwor56en6IuXID4gc2VlZGxpbmc7Civmga3poIYgPiBkZWZlcmVudDsKK+mNteanvSA+IGtleVwtc2xvdDsKK+izvOeJqSA+IHNob3BwaW5nOwor5Zau5pOaID4gcmVjZWlwdHM7CivmnIPoroogPiB2YXJpYWJsZTsKK+WwkeW5tCA+IGp1dmVuaWxlOwor6aiZ5a2QID4gc3dpbmRsZXI7Civoga/nm58gPiBhbGxpYW5jZTsKK+i3r+WPoyA+IGNyb3NzaW5nOwor6JmV572wID4gcGVuYWxpemU7Civph5HprZogPiBnb2xkZmlzaDsKK+WqmuipniA+IGZsYXR0ZXJ5Owor5ZCr6YePID4gY29udGVudHM7CivnlKjlip8gPiBkaWxpZ2VudDsKK+ethuWQjSA+IHBlblwtbmFtZTsKK+S9m+aVmSA+IGJ1ZGRoaXNtOwor5Y+v6Z2gID4gcmVsaWFibGU7Civos4fnlKIgPiBwcm9wZXJ0eTsKK+mpheWLlSA+IHRvXC1kcml2ZTsKK+mpleWCsiA+IGFycm9nYW50Owor5a+T5omAID4gZHdlbGxpbmc7CivnlLHkvZkgPiBvd2luZ1wtdG87CivomJHoj7AgPiBtdXNocm9vbTsKK+mggemdoiA+IHdlYlwtcGFnZTsKK+S4gOi1tyA+IHRvZ2V0aGVyOwor5ri05pybID4gZGVzaXJvdXM7CivotbDlu4ogPiBjb3JyaWRvcjsKK+acrOiDvSA+IGluc3RpbmN0Owor5Zec5aW9ID4gZm9uZG5lc3M7CivlsI3lpJYgPiBleHRlcm5hbDsKK+e8uumZtyA+IGFcLWRlZmVjdDsKK+ibi+auvCA+IGVnZ3NoZWxsOwor5ZCD6YaLID4gamVhbG91c3k7CivlkIjpgakgPiBzdWl0YWJsZTsKK+WumOaWuSA+IG9mZmljaWFsOwor5ruR5YawID4gdG9cLXNrYXRlOwor5ZWG5qWtID4gYnVzaW5lc3M7CivosqHnlKIgPiBwcm9wZXJ0eTsKK+Wul+aVmSA+IHJlbGlnaW9uOwor6Z+M6auUID4gZmlybXdhcmU7Civlkb3ohIggPiBsaWZlbGluZTsKK+S5g+iHsyA+IGFuZFwtZXZlbjsKK+enn+eohSA+IGxhbmRcLXRheDsKK+mghemNiiA+IG5lY2tsYWNlOwor5oGl6L6xID4gZGlzZ3JhY2U7CivkuI3ooYwgPiB3b24nJ3RcLWRvOwor5a6I5pmCID4gcHVuY3R1YWw7CivmmpfovYkgPiBibGFja291dDsKK+aJk+WNsCA+IHRvXC1wcmludDsKK+WujOaVtCA+IGNvbXBsZXRlOwor5L615ZCeID4gdG9cLWFubmV4Owor5rOi6K2cID4gc3BlY3RydW07CivmoL3lrZAgPiBzZWVkbGluZzsKK+iygueariA+IG1pbmtcLWZ1cjsKK+mGq+mZoiA+IGhvc3BpdGFsOwor6LKh54mpID4gcHJvcGVydHk7Civms7PooaMgPiBzd2ltc3VpdDsKK+a3muawtCA+IHRlYXJkcm9wOwor6IKJ5qGCID4gY2lubmFtb247CivmuJvmjokgPiBzdWJ0cmFjdDsKK+m8u+eCjiA+IHJoaW5pdGlzOwor5p+Q5pmCID4gc29tZXRpbWU7Civol6Xoho8gPiBvaW50bWVudDsKK+WujOaIkCA+IGNvbXBsZXRlOwor5rqi5Ye6ID4gb3ZlcmZsb3c7CivlkJHopb8gPiB3ZXN0d2FyZDsKK+iuiumHjyA+IHZhcmlhYmxlOwor5Y+b6YCGID4gdG9cLXJlYmVsOwor5oiw5Y2AID4gd2FyXC16b25lOwor5Y+x6LKsID4gcmVwcm9hY2g7Civnq4vloLQgPiBwb3NpdGlvbjsKK+iynua9lCA+IGNoYXN0aXR5Owor5qCX5a2QID4gY2hlc3RudXQ7CivkuK3nubwgPiB0b1wtcmVsYXk7Civnv7PnnLwgPiBjYXRhcmFjdDsKK+mOruWNgCA+IHRvd25zaGlwOwor5p2/5rK5ID4gbGVhZlwtZmF0Owor5oe45Z6CID4gb3Zlcmhhbmc7CivphZLprLwgPiBkcnVua2FyZDsKK+S4jeiCliA+IHVud29ydGh5Owor54+t5qmfID4gYWlybGluZXI7CivpoJDoqIAgPiBwcm9waGVjeTsKK+eql+WtkCA+IGNhc2VtZW50Owor5a+m5YqbID4gc3RyZW5ndGg7Civmh4nlsI0gPiByZXNwb25zZTsKK+e+mue+iiA+IGFudGVsb3BlOwor5Lqk5rWBID4gZXhjaGFuZ2U7Civlj5voroogPiByZW5lZ2FkZTsKK+aIsOS6iyA+IGZpZ2h0aW5nOwor5Y+v6KGMID4gZmVhc2libGU7CivmhpTmgrQgPiBsYW5ndWlzaDsKK+WNsemboyA+IGNhbGFtaXR5Owor5a6J5a+nID4gcGVhY2VmdWw7CivkuLnnoIIgPiBjaW5uYWJhcjsKK+aguOWHhiA+IHNhbmN0aW9uOwor6K206LKsID4gZGVub3VuY2U7CivmoYjku7YgPiBsYXdcLWNhc2U7Civlp7vopqogPiBhZmZpbml0eTsKK+a1qua8qyA+IHJvbWFudGljOwor5p2R5rCRID4gdmlsbGFnZXI7CivmhbfmhaggPiB2ZWhlbWVudDsKK+irlum7niA+IGFyZ3VtZW50Owor5pyo54KtID4gY2hhcmNvYWw7Civpu4Pnk5wgPiBjdWN1bWJlcjsKK+S4jeerryA+IGltcHJvcGVyOwor5pqX6IeqID4gaW53YXJkbHk7Civmh4rllqogPiBkZWplY3RlZDsKK+eogOaciSA+IHVuY29tbW9uOwor6aOb5qmfID4gYWlycGxhbmU7CivlrqTlj4sgPiByb29tbWF0ZTsKK+iytuaKkSA+IGJlbGl0dGxlOwor6JaE6IacID4gbWVtYnJhbmU7CivmnbHmlrkgPiB0aGVcLWVhc3Q7CivnqIXmlLYgPiB0YXhhdGlvbjsKK+miqOa9riA+IGNhbXBhaWduOwor6IOM5YyFID4ga25hcHNhY2s7Civpu6jmtL4gPiBwYXJ0aXNhbjsKK+WtkOWxpCA+IHN1YmxheWVyOwor6aOy5paZID4gYmV2ZXJhZ2U7CivkurrmiYsgPiBtYW5wb3dlcjsKK+S6jOaciCA+IGZlYnJ1YXJ5Owor5rKS6JC9ID4gZG93bmZhbGw7CivlkKvnorMgPiBjYXJib25pYzsKK+acgOeCuiA+IHRoZVwtbW9zdDsKK+mGq+iXpSA+IG1lZGljaW5lOwor5rex5aWnID4gcHJvZm91bmQ7CivllZ/li5UgPiB0b1wtc3RhcnQ7CivlrbjllY8gPiBsZWFybmluZzsKK+S4jeeUqCA+IG5lZWRcLW5vdDsKK+miqOawtCA+IGZlbmdzaHVpOwor5oSa5pinID4gaWdub3JhbnQ7CivmnZDmlpkgPiBtYXRlcmlhbDsKK+awtOi3ryA+IHdhdGVyd2F5Owor5a2Q5aWzID4gY2hpbGRyZW47CivkuovmlYUgPiBhY2NpZGVudDsKK+mHh+iBsiA+IGFwcGxhdXNlOwor5a6M5YWoID4gY29tcGxldGU7CivnorDop7ggPiB0b1wtdG91Y2g7CivkuI3njaggPiBub3RcLW9ubHk7CivlrprkvY0gPiBwb3NpdGlvbjsKK+WtmOWcqCA+IHRvXC1leGlzdDsKK+iyqOW5oyA+IGN1cnJlbmN5Owor5LiL542EID4gaW1wcmlzb247CivlrbXljJYgPiBicmVlZGluZzsKK+iaiuWtkCA+IG1vc3F1aXRvOwor5LiN54m5ID4gbm90XC1vbmx5Owor6Z6t6J+yID4gd2hpcHdvcm07CivkuI3niL0gPiBub3RcLXdlbGw7CivmgKfog70gPiBmdW5jdGlvbjsKK+a0qua1gSA+IGNhdGFyYWN0Owor5oeC5LqLID4gc2Vuc2libGU7Civpo5/mhb4gPiBhcHBldGl0ZTsKK+mDqOmhniA+IGNhdGVnb3J5Owor5ZCM55ufID4gYWxsaWFuY2U7CivpnIfpqZogPiB0b1wtc2hvY2s7CivlkLjnhZkgPiB0b1wtc21va2U7CivorJ3orJ0gPiB0b1wtdGhhbms7CivkuI3mv58gPiBub3RcLWdvb2Q7CivpoK3nl5sgPiBoZWFkYWNoZTsKK+S8meS8tCA+IHBhcnRpc2FuOwor5pqX55uSID4gbWFnYXppbmU7Civogpblg48gPiBwb3J0cmFpdDsKK+S4reatoiA+IHRvXC1jZWFzZTsKK+ism+ipsSA+IGFcLXNwZWVjaDsKK+ael+WcsCA+IHdvb2RsYW5kOwor5rex5Yi7ID4gcHJvZm91bmQ7Civkuq3lrZAgPiBwYXZpbGlvbjsKK+mfs+evgCA+IHN5bGxhYmxlOwor5p625YuiID4gYXR0aXR1ZGU7CivkuI3muKwgPiBhY2NpZGVudDsKK+WkqumVtyA+IG92ZXJzaXplOwor5Yui6aCtID4gbW9tZW50dW07CivlpKfploAgPiBlbnRyYW5jZTsKK+aEmuW8hCA+IGRlcmlzaW9uOwor5b6A6YKEID4gY29udGFjdHM7CivmsrvnmYIgPiB0b1wtdHJlYXQ7CivnpKbnlKIgPiBtaW5lcmFsczsKK+S4iua1tyA+IHNoYW5naGFpOwor572q54qvID4gY3JpbWluYWw7CivniJDpgoogPiBmaXJlc2lkZTsKK+aEieW/qyA+IGNoZWVyZnVsOwor6K6K56iuID4gbXV0YXRpb247Civoq5bov7AgPiB0cmVhdGlzZTsKK+WLn+mbhiA+IHRvXC1yYWlzZTsKK+a1t+WzvSA+IHN0cmFpZ2h0Owor54it6KuWID4gdG9cLWFyZ3VlOwor6IGW5YyWID4gc2FuY3RpZnk7CivmmI7ohqsgPiBtYW5pZmVzdDsKK+mHjeeUsyA+IHJlYWZmaXJtOwor5pq05rSqID4gYVwtc3VkZGVuOwor5pu/5o+bID4gZXhjaGFuZ2U7CivppKHlhZIgPiBzdHVmZmluZzsKK+acieaJgCA+IHNvbWV3aGF0Owor5pal6LKsID4gZGVub3VuY2U7Civph43njbIgPiByZWNvdmVyeTsKK+S4jeacvSA+IGltbW9ydGFsOwor5rW35aSWID4gb3ZlcnNlYXM7CivnjovlrrYgPiBwcmluY2VseTsKK+WTqOWFtSA+IHNlbnRpbmVsOwor6LK25L2OID4gYmVsaXR0bGU7Civpm4npm54gPiBwaGVhc2FudDsKK+aDs+WutiA+IGhvbWVzaWNrOwor5ZOl5YWSID4gYnJvdGhlcnM7Civoj6/pupcgPiBnb3JnZW91czsKK+iyt+S4uyA+IGN1c3RvbWVyOwor5oWY5LqLID4gZGlzYXN0ZXI7CivpoJDmuKwgPiBmb3JlY2FzdDsKK+e+juaXpSA+IHVzXC1qYXBhbjsKK+iyoOWCtSA+IGluZGVidGVkOwor6Zuo6YePID4gcmFpbmZhbGw7Civlj7jms5UgPiBqdWRpY2lhbDsKK+iqlei+sCA+IGJpcnRoZGF5Owor5ZKz5Ze9ID4gdG9cLWNvdWdoOwor5oKy5oWfID4gbW91cm5mdWw7CivliqDplbcgPiBsZW5ndGhlbjsKK+WQkOajhCA+IHRvXC1zcHVybjsKK+WLuOiqqiA+IHBlcnN1YWRlOwor6JmV5YiGID4gZGlzcG9zYWw7Civml6Xnvo4gPiBqYXBhblwtdXM7Civlop7pq5ggPiBoZWlnaHRlbjsKK+mBsumgkyA+IGluYWN0aXZlOwor6LKh5Li7ID4gcmljaFwtbWFuOwor5LiN5oiQID4gd29uJyd0XC1kbzsKK+WkouipsSA+IGRheWRyZWFtOwor5LiN5oeIID4gdW50aXJpbmc7CivlpKfopoEgPiBhYnN0cmFjdDsKK+acgOWwkSA+IHNtYWxsZXN0Owor6K2354WnID4gcGFzc3BvcnQ7CivkuLvlrrAgPiBkb21pbmF0ZTsKK+WkouimiyA+IHRvXC1kcmVhbTsKK+S4jeaDnyA+IG5vdFwtb25seTsKK+S6i+WFkiA+IGJ1c2luZXNzOwor5aSn6KGjID4gb3ZlcmNvYXQ7Civnp7vkuqQgPiB0cmFuc2ZlcjsKK+abuOWvqyA+IHRvXC13cml0ZTsKK+S4jeaAlSA+IGZlYXJsZXNzOwor5LiN5b+FID4gbmVlZFwtbm90Owor5rKW5rSXID4gdG9cLXJpbnNlOwor5LiN5b6XID4gbXVzdFwtbm90Owor5LiN5b6IID4gbm90XC12ZXJ5Owor5pqX5pqXID4gc2VjcmV0bHk7CivlibfpmaQgPiByb290XC1vdXQ7CivwqLq5ID4gbW91cm5mdWw7CivnpZ7mgKcgPiBkaXZpbml0eTsKK+e4veijgSA+IGNoYWlybWFuOwor5aSW6KGoID4gZXh0ZXJuYWw7CivmsonmtbggPiBwZXJtZWF0ZTsKK+aUr+mFjSA+IGRvbWluYXRlOwor576O5b63ID4gYVwtdmlydHVlOwor6ZuE6L6vID4gZWxvcXVlbnQ7Civpu57lkI0gPiByb2xsY2FsbDsKK+W/veeEtiA+IHN1ZGRlbmx5Owor5pel56iLID4gc2NoZWR1bGU7Civlp6bmt6sgPiBhZHVsdGVyeTsKK+ixquS/oCA+IGNhdmFsaWVyOwor5pe655ubID4gdmlnb3JvdXM7CivlpJbomZ8gPiBuaWNrbmFtZTsKK+Wlh+iBniA+IGFuZWNkb3RlOwor5YmN6aGNID4gZm9yZWhlYWQ7CivmtbfkuIogPiBtYXJpdGltZTsKK+mbnOiqjCA+IG1hZ2F6aW5lOwor57ay6ZqbID4gaW50ZXJuZXQ7CivnhrHoqqAgPiBkZXZvdGlvbjsKK+WQiOaIkCA+IGNvbXBvdW5kOwor5ZG85Y+rID4gdG9cLXNob3V0Owor5aSp6IqxID4gc21hbGxwb3g7Civpm6jooaMgPiByYWluY29hdDsKK+WQjOaEjyA+IHRvXC1hZ3JlZTsKK+acrOS+hiA+IG9yaWdpbmFsOwor5pys5L2NID4gc3RhbmRhcmQ7CivlkJHlvowgPiBiYWNrd2FyZDsKK+acjeWLmSA+IHRvXC1zZXJ2ZTsKK+awkeecviA+IHBvcHVsYWNlOwor5aiB5pybID4gcHJlc3RpZ2U7CivmtLvli5UgPiBhY3Rpdml0eTsKK+WPm+aVmSA+IGFwb3N0YWN5Owor5LiN5aSnID4gbm90XC12ZXJ5Owor5aSn6IO9ID4gYWxtaWdodHk7CivmnInlipsgPiBwb3dlcmZ1bDsKK+aZguapnyA+IG9jY2FzaW9uOwor5ZCm5a6aID4gbmVnYXRpdmU7Civol6XllYYgPiBkcnVnZ2lzdDsKK+WPjeaYoCA+IHJlYWN0aW9uOwor6YG66LSIID4gYmVxdWVhdGg7CivmlofogbcgPiBjaXZpbGlhbjsKK+WpmuWrgSA+IG1hcnJpYWdlOwor57eK6L+rID4gcHJlc3Npbmc7CivorormlbggPiB2YXJpYWJsZTsKK+itsOahiCA+IHByb3Bvc2FsOwor5ZCb5a2QID4gbm9ibGVtYW47Civlu7roqK0gPiB0b1wtYnVpbGQ7CivnibnmtL4gPiBkaXNwYXRjaDsKK+mbu+iFpiA+IGNvbXB1dGVyOwor5ZCM5bGLID4gcm9vbW1hdGU7Civol6XlipEgPiBtZWRpY2luZTsKK+S4gOWcmCA+IHJlZ2ltZW50Owor56Oo5pOmID4gZnJpY3Rpb247Civmkq3pn7MgPiB0cmFuc21pdDsKK+WPsOW6pyA+IHBlZGVzdGFsOwor5qy66LKgID4gdG9cLWJ1bGx5Owor6YGO6LyJID4gb3ZlcmxvYWQ7CivpgbLoqqQgPiB0b1wtZGVsYXk7CivnpZblnIsgPiBob21lbGFuZDsKK+mghuW+niA+IG9iZWRpZW50Owor5Li75Lu7ID4gZGlyZWN0b3I7Civms7DlnIsgPiB0aGFpbGFuZDsKK+ino+mWiyA+IHRvXC11bnRpZTsKK+aal+WupCA+IGRhcmtyb29tOwor5aW254mbID4gbWlsa1wtY293Owor5Y+N5oeJID4gcmVhY3Rpb247CivmgrLliIcgPiBtb3VybmZ1bDsKK+S4jeWPqiA+IG5vdFwtb25seTsKK+W5tOmdkiA+IHlvdXRoZnVsOwor6aCG5bqPID4gc2VxdWVuY2U7CivkuK3kv50gPiBhZHZvY2F0ZTsKK+W5s+mdnCA+IHRyYW5xdWlsOwor5ae/5oWLID4gYXR0aXR1ZGU7CivlkYrliKUgPiB0b1wtbGVhdmU7CivkuIDlkaggPiBvbmVcLXdlZWs7CivmrLroqZAgPiB0b1wtY2hlYXQ7CivkuIDlkJEgPiBhbGxcLWxvbmc7Civmm53lhYkgPiBleHBvc3VyZTsKK+awruawoyA+IG5pdHJvZ2VuOwor6ZmE6YyEID4gYXBwZW5kaXg7CivkuIDljJkgPiBzcG9vbmZ1bDsKK+eil+argyA+IGN1cGJvYXJkOwor56CU56m2ID4gcmVzZWFyY2g7CivmgKDmg7AgPiBpZGxlbmVzczsKK+WMheeariA+IHdyYXBwaW5nOwor54qv5oSBID4gdG9cLXdvcnJ5Owor5Yiw6YGUID4gdG9cLXJlYWNoOwor5Y+l5a2QID4gc2VudGVuY2U7CivlpYnnj74gPiBvZmZlcmluZzsKK+S4jeWApiA+IHRpcmVsZXNzOwor5q+P55W2ID4gd2hlbmV2ZXI7CivoqILos7wgPiB0b1wtb3JkZXI7CivmlpHnmb0gPiBncml6emxlZDsKK+itieaTmiA+IGV2aWRlbmNlOwor56WW5YWIID4gYW5jZXN0b3I7CivluLjpp5AgPiByZXNpZGVudDsKK+aatOWKmyA+IHZpb2xlbmNlOwor6ZuG6IGaID4gYXNzZW1ibGU7CivmmJTml6UgPiBmb3JtZXJseTsKK+WKn+iDvSA+IGZ1bmN0aW9uOwor6K2m5oOVID4gdmlnaWxhbnQ7Civms6Lli5UgPiB1bmR1bGF0ZTsKK+mgkOWgsSA+IGZvcmVjYXN0Owor5aWH54m5ID4gcGVjdWxpYXI7Civlv6DmlrwgPiBsb3lhbFwtdG87CivmmI7ml6UgPiB0b21vcnJvdzsKK+ips+e0sCA+IGRldGFpbGVkOwor5pq05YWJID4gZXhwb3N1cmU7CivpoJHlm7ogPiBzdHViYm9ybjsKK+mBuOiIiSA+IHRvXC1lbGVjdDsKK+mAgOmBvyA+IHdpdGhkcmF3Owor57e057+SID4gZXhlcmNpc2U7Civln7nppIogPiB0b1wtdHJhaW47Civpn4zluLYgPiBsaWdhbWVudDsKK+aSpOmAgCA+IHJldHJlYXQ7Civnib3mia8gPiBpbnZvbHZlOwor5ama5LqLID4gd2VkZGluZzsKK+aqoumWsSA+IGluc3BlY3Q7CivoqLToi6YgPiBncnVtYmxlOwor5pqr5YGcID4gc3VzcGVuZDsKK+inuOinkiA+IGFudGVubmE7CivlvarngrMgPiBzaGluaW5nOwor57235LyRID4gZ2l2ZVwtdXA7CivntLDplbcgPiBzbGVuZGVyOwor6KqN55yfID4gZWFybmVzdDsKK+aZguWwmiA+IGZhc2hpb247CivniYjmnKwgPiB2ZXJzaW9uOwor6L+06L2JID4gcmV2b2x2ZTsKK+W6h+ittyA+IHNoZWx0ZXI7CivphbjmgKcgPiBhY2lkaXR5Owor57eo57qCID4gY29tcGlsZTsKK+WQm+S4uyA+IG1vbmFyY2g7CivnuL3nkIYgPiBwcmVtaWVyOwor5aSp54S2ID4gbmF0dXJhbDsKK+edoeihoyA+IHBhamFtYXM7CivmlbTnkIYgPiBhcnJhbmdlOwor54WZ6I2JID4gdG9iYWNjbzsKK+eHpueImyA+IGdsaXR0ZXI7Civlj6/li5UgPiBtb3ZhYmxlOwor5rC05omLID4gbWFyaW5lcjsKK+WQhOWAiyA+IHZhcmlvdXM7Civlj6PlkIMgPiBzdGFtbWVyOwor6I+P6JitID4gaG9sbGFuZDsKK+mgmOWFiCA+IHRvXC1sZWFkOwor6I+g6I+cID4gc3BpbmFjaDsKK+WNgeaciCA+IG9jdG9iZXI7CivorprlkIwgPiBhcHByb3ZlOwor5q+b5q+vID4gYmxhbmtldDsKK+mZveiHuiA+IGJhbGNvbnk7Civov5Hpg4ogPiBzdWJ1cmJzOwor54uC5ZacID4gZWNzdGFzeTsKK+awuOaBhiA+IGV0ZXJuYWw7Civoq4vmsYIgPiByZXF1ZXN0Owor6YSZ5qOEID4gZGlzZGFpbjsKK+WHuui1sCA+IHRvXC1mbGVlOwor5pWI55uKID4gYmVuZWZpdDsKK+mHjeWKmyA+IGdyYXZpdHk7CivnorzlrZcgPiBudW1lcmFsOwor57Sh6YyYID4gc3BpbmRsZTsKK+W8hOeijiA+IGNydW1ibGU7Civlp5DlprkgPiBzaXN0ZXJzOwor55uu6YyEID4gY2F0YWxvZzsKK+ato+eiuiA+IGNvcnJlY3Q7Civlv4PmhJsgPiBiZWxvdmVkOwor5byE55+tID4gc2hvcnRlbjsKK+eEoeiZlSA+IG5vd2hlcmU7CivororljpogPiB0aGlja2VuOwor5aaW5oCqID4gbW9uc3RlcjsKK+e3iue3iiA+IGNsb3NlbHk7CivpmrHnp4EgPiBwcml2YWN5Owor6Zec6Y21ID4gY3J1Y2lhbDsKK+Wnv+WLoiA+IHBvc3R1cmU7CivlppLlv4wgPiBqZWFsb3VzOwor5by354OIID4gaW50ZW5zZTsKK+WlveaIsCA+IHdhcmxpa2U7CivlubPooaEgPiBiYWxhbmNlOwor54m55a6aID4gc3BlY2lhbDsKK+W8hOeauiA+IGNydW1wbGU7Civnm7jpgKMgPiB0b1wtbGluazsKK+aWh+azlSA+IGdyYW1tYXI7Civlj6TkvoYgPiBvbGR0aW1lOwor5aSp5rCjID4gd2VhdGhlcjsKK+ato+ebtCA+IHVwcmlnaHQ7CivphZLlu6AgPiBicmV3ZXJ5Owor5b6B5pyNID4gY29ucXVlcjsKK+e0oumBkyA+IHJvcGV3YXk7CivpmbjnuowgPiBpblwtdHVybjsKK+maseeeniA+IHRvXC1oaWRlOwor5aSW5rWBID4gb3V0ZmxvdzsKK+W3pemgrSA+IGZvcmVtYW47Civlj6bkuIAgPiBhbm90aGVyOwor6YGg56uvID4gZmFyXC1lbmQ7Civnmq7pnakgPiBsZWF0aGVyOwor5Yqg55ScID4gc3dlZXRlbjsKK+mfs+S/oSA+IG1lc3NhZ2U7CivnhrHnh5kgPiB0b1wtYnVybjsKK+manOekmSA+IGJhcnJpZXI7Civoqp7ms5UgPiBncmFtbWFyOwor6K2m5ZGKID4gdG9cLXdhcm47CivnhLbogIwgPiBob3dldmVyOwor5aSn5qaCID4gcm91Z2hseTsKK+mbu+axoCA+IGJhdHRlcnk7Civlpb3lub4gPiBzZXZlcmFsOwor5q+U5pa5ID4gYW5hbG9neTsKK+mAgOiQvSA+IHN1YnNpZGU7CivororkuoIgPiB0dXJtb2lsOwor6KuL5pWZID4gY29uc3VsdDsKK+eGsea9riA+IHVwc3VyZ2U7CivmrLrnnp4gPiB0b1wtZm9vbDsKK+avlOaTrCA+IGNvbXBhcmU7CivorbDlg7kgPiBiYXJnYWluOwor57qW5byxID4gZnJhZ2lsZTsKK+WNmuWtuCA+IGxlYXJuZWQ7CivopovorYkgPiB3aXRuZXNzOwor5Yqg54axID4gaGVhdGluZzsKK+WfjumDiiA+IHN1YnVyYnM7CivniafloLQgPiBwYXN0dXJlOwor6Z2e5bi4ID4gdW51c3VhbDsKK+WLh+awoyA+IGNvdXJhZ2U7CivlpLHmlYggPiB0b1wtZmFpbDsKK+WFiOmphSA+IHBpb25lZXI7CivprpHprZogPiBhYmFsb25lOwor54qv5Lq6ID4gY29udmljdDsKK+iNt+iYrSA+IGhvbGxhbmQ7Civpm6PmsJEgPiByZWZ1Z2VlOwor6YCj57WQID4gY29ubmVjdDsKK+W+iOW/qyA+IHF1aWNrbHk7CivpgbrniakgPiByZW1uYW50Owor5q+S5omTID4gYmVhdFwtdXA7CivphpzkuosgPiBzY2FuZGFsOwor6ZmN57SaID4gZGVncmFkZTsKK+eEpuezliA+IGNhcmFtZWw7CivmkZjopoEgPiBzdW1tYXJ5Owor6YCy56iLID4gcHJvY2VzczsKK+i+r+inoyA+IGV4cGxhaW47CivmkZTop5IgPiB3cmVzdGxlOwor5YyF5omOID4gd3JhcFwtdXA7Civlu6LniakgPiBydWJiaXNoOwor5aWH5oCqID4gc3RyYW5nZTsKK+WnlOS7uyA+IGFwcG9pbnQ7Civmq4Poh7ogPiBjb3VudGVyOwor5q6Y5qCqID4gc3R1YmJsZTsKK+WlveWlhyA+IGN1cmlvdXM7CivnmbvpmbggPiB0b1wtbGFuZDsKK+avhuaJkyA+IGJlYXRcLXVwOwor55uj6KaWID4gb3ZlcnNlZTsKK+W9ouaIkCA+IHRvXC1mb3JtOwor57i95pW4ID4gYVwtdG90YWw7CivnibnliLYgPiBzcGVjaWFsOwor5by35pq0ID4gdmlvbGVudDsKK+W+t+WciyA+IGdlcm1hbnk7CivntbHntbEgPiB0b3RhbGx5Owor54Sh56quID4gZW5kbGVzczsKK+efruaelyA+IGNvcHBpY2U7CivlooPnlYwgPiBib3VuZHJ5Owor5byE5q2qID4gZGlzdG9ydDsKK+WGsOiiiyA+IGljZVwtYmFnOwor6K2J5Lq6ID4gd2l0bmVzczsKK+mWseiugCA+IHRvXC1yZWFkOwor6YO15beuID4gcG9zdG1hbjsKK+mdouWariA+IHRvXC1mYWNlOwor6Ke455m8ID4gdHJpZ2dlcjsKK+eIreWftyA+IGRpc3B1dGU7CivngJ3pnZIgPiBhc3BoYWx0Owor5Y2z5L6/ID4gZXZlblwtaWY7CivlpKflu4ggPiBlZGlmaWNlOwor55m86YW1ID4gZmVybWVudDsKK+WNs+S9vyA+IGV2ZW5cLWlmOwor6Zax6Ka9ID4gdG9cLXJlYWQ7Civlubjnpo8gPiBibGVzc2VkOwor54Sh55uKID4gbm9cLWdvb2Q7CivliKnnm4ogPiBiZW5lZml0Owor6Ziy56amID4gZGVmZW5zZTsKK+att+aZgiA+IHRvXC1sYXN0Owor54mI5Yi7ID4gY2FydmluZzsKK+e2k+eQhiA+IG1hbmFnZXI7CivphY3lgbYgPiBjb25zb3J0Owor5q2q5puyID4gZGlzdG9ydDsKK+aVkeaPtCA+IHRvXC1zYXZlOwor5pel5Ye6ID4gc3VucmlzZTsKK+awo+WAmSA+IGNsaW1hdGU7CivnuYPluLYgPiBiYW5kYWdlOwor54Sh55SoID4gdXNlbGVzczsKK+mAl+eVmSA+IHN0YXlcLWF0Owor5Yip55SoID4gZXhwbG9pdDsKK+WNgOWNgCA+IHRyaXZpYWw7CivniK3lkLUgPiBkaXNwdXRlOwor5b6u5YWJID4gZ2xpbW1lcjsKK+avj+WknCA+IG5pZ2h0bHk7CivpgZXms5UgPiBpbGxlZ2FsOwor5Ye656efID4gdG9cLXJlbnQ7Civpm4DmlpEgPiBmcmVja2xlOwor5pS25pOaID4gcmVjZWlwdDsKK+WNgeWFrSA+IHNpeHRlZW47CivnuarlnJYgPiB0b1wtZHJhdzsKK+WdpumAlCA+IGhpZ2h3YXk7Civnn6XmgokgPiB0b1wta25vdzsKK+aUr+aSkCA+IHByb3BcLXVwOwor54ax5oOFID4gY29yZGlhbDsKK+aOkumZpCA+IGV4Y2x1ZGU7CivljYHlgI0gPiB0ZW5mb2xkOwor5Ymb5q+bID4gYnJpc3RsZTsKK+apq+iHpSA+IHJlY2xpbmU7CivliLrmv4AgPiBwcm92b2tlOwor57aT5r+fID4gZWNvbm9teTsKK+e0sOevgCA+IGRldGFpbHM7Civnsr7oo70gPiByZWZpbmVkOwor5pWZ5birID4gdGVhY2hlcjsKK+aogui2oyA+IGRlbGlnaHQ7CivmlLbmiJAgPiBoYXJ2ZXN0Owor5Y2B5LqUID4gZmlmdGVlbjsKK+WkmuWkpyA+IGhvd1wtYmlnOwor5YWx6JmVID4gY29leGlzdDsKK+aUquaLjCA+IHRvXC1zdGlyOwor6LyV6LyVID4gbGlnaHRseTsKK+WIqea9pCA+IHByb2ZpdHM7Civoo53ovIkgPiB0b1wtbG9hZDsKK+WMheWQqyA+IGNvbnRhaW47Civmk6/mo4QgPiBhYmFuZG9uOwor55m86KGMID4gcHVibGlzaDsKK+eZveifuyA+IHRlcm1pdGU7CivpgbjmiYsgPiBhdGhsZXRlOwor5aSx5Y67ID4gdG9cLWxvc2U7CivovKroqaIgPiB0b1wtcG9sbDsKK+W9q+WIuyA+IGVuZ3JhdmU7CivoirHosrsgPiBleHBlbnNlOwor6JGJ5a2QID4gZm9saWFnZTsKK+iNieeovyA+IG91dGxpbmU7CivmrabluqsgPiBhcnNlbmFsOwor5byE5bmzID4gZmxhdHRlbjsKK+WItuatoiA+IHRvXC1jdXJiOwor57O+57SbID4gZGlzcHV0ZTsKK+iMheiIjSA+IGNvdHRhZ2U7CivnhafmkKwgPiB0b1wtY29weTsKK+WFteiJpiA+IHdhcnNoaXA7Civoo5zosrwgPiBzdWJzaWR5Owor5q2j5bi4ID4gcmVndWxhcjsKK+W7muaIvyA+IGtpdGNoZW47CivmlofljJYgPiBjdWx0dXJlOwor5bSp6Zm3ID4gZmFsbFwtaW47CivpgJnmrKEgPiBwcmVzZW50Owor5bey57aTID4gYWxyZWFkeTsKK+W3tOe1kCA+IGZhd25cLW9uOwor55q657SLID4gd3JpbmtsZTsKK+asiuadliA+IHNjZXB0ZXI7CivljIbkv4MgPiBoYXN0aWx5Owor5qyE5p+1ID4gYmFycmllcjsKK+eZvuiQrCA+IG1pbGxpb247CivlpJrljYogPiBjaGllZmx5Owor55uu55qEID4gcHVycG9zZTsKK+mAseacqyA+IHdlZWtlbmQ7CivliJ3mraUgPiBpbml0aWFsOwor5qyE5p2GID4gcmFpbGluZzsKK+eFqeaDsSA+IGFnb25pemU7CivlvYjlir4gPiBpbXBlYWNoOwor54Wp5oK2ID4gYW5ndWlzaDsKK+W5q+a0viA+IGZhY3Rpb247CivooajpnaIgPiBzdXJmYWNlOwor57Of57OVID4gdG9vXC1iYWQ7CivnuL3liYcgPiBwcm9maWxlOwor6Zqq5bO7ID4gYXJkdW91czsKK+WItuacjSA+IHVuaWZvcm07Civlg4/pioAgPiBzaWx2ZXJ5Owor5YmN5o+QID4gcHJlbWlzZTsKK+e3qOWvqyA+IGNvbXBpbGU7Civntq3mjIEgPiB0b1wta2VlcDsKK+aOpeinuCA+IGNvbnRhY3Q7Civli53liKkgPiB2aWN0b3J5Owor5aSl5Ly0ID4gcGFydG5lcjsKK+aVmeWToSA+IHRlYWNoZXI7Civpq5XpqqggPiBrbmVlY2FwOwor5pOB5pyJID4gdG9cLWhhdmU7CivmraTlpJYgPiBiZXNpZGVzOwor5by35Yi2ID4gZW5mb3JjZTsKK+i7iui8myA+IHZlaGljbGU7CivpnI3kuoIgPiBjaG9sZXJhOwor6Iqs6JitID4gZmlubGFuZDsKK+aVuOS9jSA+IGRpZ2l0YWw7CivovJXolJEgPiBkaXNkYWluOwor57Wy5p+PID4gY3lwcmVzczsKK+Wft+eFpyA+IGxpY2Vuc2U7Civmq4Pmqq8gPiBjb3VudGVyOwor54Sh5pWIID4gaW5cLXZhaW47Civlo4Hlo5ggPiByYW1wYXJ0Owor6YCj5o6lID4gdG9cLWxpbms7CivoqIrmga8gPiBtZXNzYWdlOwor57SZ54WZID4gY2lnYXJldDsKK+att+WPsiA+IGhpc3Rvcnk7CivnnLrmnJsgPiBsb29rb3V0Owor6Zec54WnID4gY29uY2VybjsKK+WGsOeJhyA+IGJvcm5lb2w7CivliofloLQgPiB0aGVhdGVyOwor54ax5YiHID4gZmVydmVudDsKK+WLleS6giA+IHR1cm1vaWw7Civmjqnok4sgPiBjb25jZWFsOwor6Zi75pSUID4gdG9cLXN0b3A7CivlvJ/lhYQgPiBicm90aGVyOwor6Zi75pOLID4gdG9cLXN0b3A7CivnnInmr5sgPiBleWVicm93Owor5aOr5YW1ID4gc29sZGllcjsKK+iiq+ikpSA+IGJlZGRpbmc7Civmk7rlrZAgPiBtYWxhcmlhOwor6KGw6YCAID4gZGVjbGluZTsKK+W8leWHuiA+IGV4dHJhY3Q7Civmk5Tlv4MgPiBhbnhpb3VzOwor5YWs56S+ID4gY29tbXVuZTsKK+e1kOaenCA+IG91dGNvbWU7Civmkafmr4AgPiBkZXN0cm95Owor5q2y5YWlID4gcmV2ZW51ZTsKK+WIhuaVoyA+IHNjYXR0ZXI7CivloorlrZAgPiBjdXNoaW9uOwor54Sm5oClID4gYW54aWV0eTsKK+aUtuWIsCA+IHJlY2VpdmU7Civnm6PmuKwgPiBtb25pdG9yOwor6ayi6KeSID4gdGVtcGxlczsKK+aPreekuiA+IHRvXC1zaG93Owor6KaB5rGCID4gcmVxdWVzdDsKK+eXlei3oSA+IHZlc3RpZ2U7CivliZ3lpaogPiBkZXByaXZlOwor6L6y5rCRID4gcGVhc2FudDsKK+W7oOWVhiA+IGNvbXBhbnk7CivliLDlupUgPiBmaW5hbGx5Owor5YaS54WZID4gc21va2luZzsKK+ewoeimgSA+IGNvbmNpc2U7CivmlL7ku7sgPiBpbmR1bGdlOwor6YCa5bi4ID4gcmVndWxhcjsKK+ecn+aRryA+IHNpbmNlcmU7CivntIXmtbcgPiByZWRcLXNlYTsKK+WGsOaysyA+IGdsYWNpYWw7CivntJTmraMgPiBnZW51aW5lOwor5Yio5belID4gcGxhbmluZzsKK+eFmeWbqiA+IGNoaW1uZXk7CivlubvlvbEgPiBwaGFudG9tOwor5ouU6aCCID4gdG9wcGluZzsKK+eZveeZvSA+IGluXC12YWluOwor5YWI55+lID4gcHJvcGhldDsKK+eWvui1sCA+IHNjYW1wZXI7Civlt7Lmu4UgPiBleHRpbmN0Owor57Gg572pID4gZW52ZWxvcDsKK+e1seW4pSA+IGNvbW1hbmQ7CivpmbblmaggPiBwb3R0ZXJ5Owor6ZmE5a+EID4gZW5jbG9zZTsKK+e1qOW4gyA+IGZsYW5uZWw7Civov47mjqUgPiB0b1wtbWVldDsKK+WEmOeuoSA+IGRlc3BpdGU7CivpmLvlsLwgPiBkYW1waW5nOwor55Sc6bueID4gZGVzc2VydDsKK+i7jeiJpiA+IHdhcnNoaXA7Civnmbznj74gPiB0b1wtZmluZDsKK+mWg+eIjSA+IGZsaWNrZXI7CivooaPoo50gPiBnYXJtZW50Owor5YKZ6Ki7ID4gcmVtYXJrczsKK+aUlOS9jyA+IHRvXC1zdG9wOwor6KOC57SLID4gY3JhY2tsZTsKK+aMkei1tyA+IHN0aXJcLXVwOwor6Zeh5piOID4gY2xhcmlmeTsKK+WIsOWgtCA+IHNob3dcLXVwOwor6YGO5YmpID4gc3VycGx1czsKK+i5o+i3miA+IHN0YWdnZXI7Civnm5vmnIMgPiBwYWdlYW50Owor5Ymd5YmKID4gZXhwbG9pdDsKK+aPj+eVqyA+IHRvXC1kcmF3Owor6KOo55uKID4gYmVuZWZpdDsKK+mBh+WIsCA+IHRvXC1tZWV0Owor5YG96K2JID4gcGVyanVyeTsKK+apn+aisCA+IG1hY2hpbmU7Civnhafkuq4gPiBsaWdodGVuOwor6Zmz5YiXID4gZGlzcGxheTsKK+WBnOi7iiA+IHRvXC1zdG9wOwor6Zm95YKYID4gcGFyYXNvbDsKK+WxsemggiA+IGhpbGx0b3A7CivmjoznrqEgPiBjb250cm9sOwor6KOc55uKID4gYmVuZWZpdDsKK+aLt+iynSA+IHRvXC1jb3B5Owor5pOg5YWlID4gaW50cnVkZTsKK+asiuWIqSA+IGFcLXBvd2VyOwor6Iqx55KwID4gZ2FybGFuZDsKK+WFrOawkSA+IGNpdGl6ZW47Civlt7TmnpcgPiBiYWhyYWluOwor5YG96KOdID4gdG9cLWZha2U7CivloIXlvLcgPiBzdGF1bmNoOwor5bmz5Z2HID4gYXZlcmFnZTsKK+WIuuWIgCA+IGJheW9uZXQ7CivnsLjnrpUgPiBkdXN0cGFuOwor5YWF5ru/ID4gZnVsbFwtb2Y7CivluLPluJggPiBkcmFwZXJ5Owor5o6l55SfID4gZGVsaXZlcjsKK+a/gOe0oCA+IGhvcm1vbmU7Civop6PliZYgPiBkaXNzZWN0Owor5oyv6IiIID4gcHJvbW90ZTsKK+mZpOS6hiA+IGJlc2lkZXM7CivnmKfnlr4gPiBtYWxhcmlhOwor6I6K5Zq0ID4gc3RhdGVseTsKK+eyl+a3uiA+IHNoYWxsb3c7Civmo7LouqsgPiBzdGF5XC1hdDsKK+W5s+WPsCA+IHRlcnJhY2U7Civmi43os6MgPiBhdWN0aW9uOwor5ruL6aSKID4gbm91cmlzaDsKK+ino+WDsSA+IHRvXC1maXJlOwor5Yiw5L6GID4gYXJyaXZhbDsKK+mWkuaahyA+IGxlaXN1cmU7CivluorlgbQgPiBiZWRzaWRlOwor5qiZ5qeNID4gamF2ZWxpbjsKK+eWq+iLlyA+IHZhY2NpbmU7CivotoXpvaEgPiB0b29cLW9sZDsKK+WHuuWUriA+IHRvXC1zZWxsOwor5Zug57SgID4gZWxlbWVudDsKK+WGsOW3nSA+IGdsYWNpZXI7Civpl4rluqYgPiBicmVhZHRoOwor6LiQ6LiPID4gdHJhbXBsZTsKK+alree2kyA+IGFscmVhZHk7CivovZ/mk4ogPiBib21iYXJkOwor5bm+5YCLID4gc2V2ZXJhbDsKK+WGsOWztiA+IGljZWxhbmQ7CivmjJHoiIsgPiBwcm92b2tlOwor5ZyW55WrID4gZHJhd2luZzsKK+WGsOWxsSA+IGljZWJlcmc7CivmpbXnq68gPiBleHRyZW1lOwor6L6y5aSrID4gcGVhc2FudDsKK+eZveaZnSA+IGRheXRpbWU7CivlhbXmiIggPiB3ZWFwb25zOwor6Lez6LqNID4gdG9cLWp1bXA7CivnmYLms5UgPiB0aGVyYXB5Owor5bCW6aCCID4gc3RlZXBsZTsKK+iFuemDqCA+IGFiZG9tZW47CivnmbzmlL4gPiBwcm92aWRlOwor55iL54uCID4gbWFkbmVzczsKK+eXsueWuSA+IG1lYXNsZXM7CivopqrliIcgPiBhbWlhYmxlOwor5bel5bugID4gZmFjdG9yeTsKK+aPkuabsiA+IGVwaXNvZGU7CivooYDntbEgPiBsaW5lYWdlOwor5r+h5r+VID4gbW9pc3RlbjsKK+aKl+itsCA+IHByb3Rlc3Q7CivntYblgJIgPiBzdHVtYmxlOwor57OK5byEID4gdG9cLWZvb2w7CivluLbli5UgPiB0b1wtc3B1cjsKK+WFrOW8jyA+IGZvcm11bGE7Civngb3lrrMgPiBzY291cmdlOwor6Iqx5p2fID4gYm91cXVldDsKK+W3suWpmiA+IG1hcnJpZWQ7Civmia3ovYkgPiByZXZlcnNlOwor5oiy6ZmiID4gdGhlYXRlcjsKK+eXkueXkiA+IHRvXC1pdGNoOwor5L6L6aGMID4gZXhhbXBsZTsKK+iMheWxiyA+IGNvdHRhZ2U7CivlhKrmlrwgPiBzdXJwYXNzOwor5qmf5aC0ID4gYWlycG9ydDsKK+e1guS6jiA+IGF0XC1sYXN0Owor5qih5b2iID4gcGF0dGVybjsKK+ifi+ifgCA+IGNyaWNrZXQ7Civkv6Hos7QgPiBjb25maWRlOwor6Iql5pyrID4gbXVzdGFyZDsKK+a/gOeDiCA+IGludGVuc2U7Civnl4Xnl4cgPiBkaXNlYXNlOwor5Ya35Y27ID4gY29vbGluZzsKK+ahjOmdoiA+IGRlc2t0b3A7CivlsaXooYwgPiBmdWxmaWxsOwor55qH5bidID4gZW1wZXJvcjsKK+ihqOeOhyA+IGV4YW1wbGU7Civmj63luZUgPiBvcGVuaW5nOwor56+H56ugID4gd3JpdGluZzsKK+aOpeabvyA+IHJlcGxhY2U7CivmqZ/lmaggPiBtYWNoaW5lOwor55a+55eFID4gZGlzZWFzZTsKK+WCmeeUqCA+IHJlc2VydmU7Civlr6zpl4ogPiBleHBhbnNlOwor5o6q5pa9ID4gbWVhc3VyZTsKK+WFp+WuuSA+IGNvbnRlbnQ7CivmjqHmmpYgPiBoZWF0aW5nOwor55u45Lu/ID4gc2ltaWxhcjsKK+WCsueEtiA+IGxvZnRpbHk7Civlm6DngrogPiBiZWNhdXNlOwor5qi15aSrID4gd29vZG1hbjsKK+iHquengSA+IHNlbGZpc2g7CivlhbjlnosgPiB0eXBpY2FsOwor6Iy25YW3ID4gdGVhXC1zZXQ7CivovKrlu5MgPiBvdXRsaW5lOwor57OK5aGXID4gbXVkZGxlZDsKK+amnOaooyA+IGV4YW1wbGU7CivplonloZ4gPiBzdG9wXC11cDsKK+ihqOa8lCA+IHBlcmZvcm07CivotoXpgY4gPiBzdXJwYXNzOwor56+A55uuID4gcHJvZ3JhbTsKK+mRveefsyA+IGRpYW1vbmQ7CivlnJLmnpcgPiBnYXJkZW5zOwor55Sf6I+cID4gbGV0dHVjZTsKK+Wwj+iyqSA+IHBlZGRsZXI7Civou4zmnpUgPiBzbGVlcGVyOwor55m95aSpID4gZGF5dGltZTsKK+iLseWciyA+IGVuZ2xhbmQ7Civpppbpo74gPiBqZXdlbHJ5Owor5bel5YygID4gYXJ0aXNhbjsKK+ebiOS9mSA+IHN1cnBsdXM7Civkv5jomZwgPiBjYXB0aXZlOwor6IeC56ugID4gYXJtYmFuZDsKK+iHqueUsSA+IGZyZWVkb207CivluIPkuIEgPiBwdWRkaW5nOwor5ZyN5pS7ID4gYmVzaWVnZTsKK+WWnemHhyA+IGFjY2xhaW07CivnlJ/ogrIgPiB0b1wtYmVhcjsKK+i1pOmBkyA+IGVxdWF0b3I7Civpq5jmvLIgPiB1cHN1cmdlOwor6ZaA5Y+jID4gZG9vcndheTsKK+aQjeWCtyA+IHRvXC1oYXJtOwor6Lqr5p2QID4gc3RhdHVyZTsKK+iLseWLhyA+IGJyYXZlcnk7CivkvovorYkgPiBleGFtcGxlOwor5ZWP6aGMID4gcHJvYmxlbTsKK+WvhOmAgSA+IHRvXC1zZW5kOwor5YK+5pacID4gaW5jbGluZTsKK+WbsOaTviA+IHBlcnBsZXg7CivopIflkIggPiBjb21wbGV4Owor5oqE57ayID4gZGlwXC1uZXQ7Civnmb7liIYgPiBwZXJjZW50Owor5Zq05q2jID4gc3Rlcm5seTsKK+iho+acjSA+IGNsb3RoZXM7CivmiJboqLEgPiBwZXJoYXBzOwor5oiQ6KqeID4gcHJvdmVyYjsKK+amruW5uCA+IGhvbm9yZWQ7CivmvILnpKsgPiBib3VsZGVyOwor6aas6LmsID4gc3RpcnJ1cDsKK+aooeWAoyA+IGltaXRhdGU7CivkvovooYwgPiByb3V0aW5lOwor5ZWG6ZqKID4gY2FyYXZhbjsKK+WtuOmZoiA+IGNvbGxlZ2U7Civlg7XlsYAgPiBpbXBhc3NlOwor5o2V5omLID4gY2F0Y2hlcjsKK+aKleelqCA+IHRvXC12b3RlOwor6KGM5p2OID4gbHVnZ2FnZTsKK+aPkOWIsCA+IG1lbnRpb247CivpqZXnn5wgPiBoYXVnaHR5Owor5L+h566xID4gbWFpbGJveDsKK+WvhuirhyA+IGNvbW11bmU7CivnlKjnm6EgPiBleGhhdXN0Owor5qaC5b+1ID4gY29uY2VwdDsKK+WBnOatoiA+IHRvXC1zdG9wOwor5YWD5Lu2ID4gZWxlbWVudDsKK+WcsOWdgCA+IGFkZHJlc3M7CivlnIvlrrYgPiBjb3VudHJ5Owor5a2U6ZuAID4gcGVhY29jazsKK+mNteipniA+IGtleXdvcmQ7Civmu5HnqL0gPiBjb21pY2FsOwor5ZWG6YePID4gY29uc3VsdDsKK+S9juiqvyA+IGxvd1wta2V5Owor5oyJ5pmCID4gb25cLXRpbWU7Civoo53lhaUgPiB0b1wtbG9hZDsKK+aJk+eulyA+IHRvXC1wbGFuOwor5bCP57WQID4gc3VtbWFyeTsKK+Wwj+e1hCA+IGFcLWdyb3VwOwor5oyJ5pGpID4gbWFzc2FnZTsKK+WBiealrSA+IGV4cGxvaXQ7Civos6rph48gPiBxdWFsaXR5Owor56+A5pelID4gaG9saWRheTsKK+ijgeWJqiA+IGN1dFwtb3V0Owor55Si54mpID4gcHJvZHVjdDsKK+S+m+e1piA+IGZ1cm5pc2g7CivoiJ7lvIQgPiB0b1wtd2F2ZTsKK+aJk+eijiA+IHNoYXR0ZXI7Civmi6/mlZEgPiB0b1wtc2F2ZTsKK+WcqOWJjSA+IGZvcndhcmQ7CivmnY7ptawgPiBsaVwtcGVuZzsKK+WuieiorSA+IGluc3RhbGw7Civosqzpm6MgPiBjZW5zdXJlOwor5bO25ba8ID4gaXNsYW5kczsKK+afpeiqvyA+IGlucXVpcnk7Civmi4vmo4QgPiBkaXNjYXJkOwor5L6/55uGID4gYmVkXC1wYW47CivooLHmg5EgPiBlbmNoYW50Owor5YGH5pelID4gaG9saWRheTsKK+WuieijnSA+IGluc3RhbGw7Civmu7LmvI8gPiBzZWVwYWdlOwor6Imm5Y+qID4gd2Fyc2hpcDsKK+aLt+aJkyA+IHRvXC1iZWF0Owor6IGv6YKmID4gZmVkZXJhbDsKK+a8guaziiA+IGRyaWZ0ZXI7CivlmbjmlbggPiB0b25uYWdlOwor5ZWG6KiOID4gZGlzY3VzczsKK+WUruizoyA+IHRvXC1zZWxsOwor6aaZ6I+cID4gcGFyc2xleTsKK+a1t+muriA+IHNlYWZvb2Q7Civoh6XmiL8gPiBiZWRyb29tOwor56ug56+AID4gY2hhcHRlcjsKK+a7tOa1gSA+IHRyaWNrbGU7Civnlo/lv70gPiBuZWdsZWN0Owor5YOl5YCWID4gbHVja2lseTsKK+aHsue9sCA+IHBlbmFsdHk7CivlgrPllq4gPiBsZWFmbGV0Owor6aaZ6IW4ID4gc2F1c2FnZTsKK+i1sOengSA+IHNtdWdnbGU7CivlsIjnlKggPiBzcGVjaWFsOwor6b6N6J2mID4gbG9ic3RlcjsKK+aMh+WumiA+IGFwcG9pbnQ7Civlg5XkurogPiBzZXJ2YW50Owor5a6557SNID4gY29udGFpbjsKK+S+r+eItSA+IG1hcnF1aXM7CivmpLDlrZAgPiBjb2NvbnV0Owor6ZGS5oiSID4gd2FybmluZzsKK+S7o+ipniA+IHByb25vdW47CivkuLnpuqUgPiBkZW5tYXJrOwor57Ch5LuLID4gc3VtbWFyeTsKK+eVq+W7iiA+IGdhbGxlcnk7Civoh6XlrqQgPiBiZWRyb29tOwor5omz5qmfID4gdHJpZ2dlcjsKK+ihneWKmyA+IGltcHVsc2U7Civlroznvo4gPiBwZXJmZWN0Owor5bGV5pybID4gb3V0bG9vazsKK+eriuebnCA+IGJ1cmdsYXI7CivnkaPntLAgPiB0cml2aWFsOwor5oyq5YuVID4gdG9cLW1vdmU7Civlrrbnpr0gPiBwb3VsdHJ5Owor56m657y6ID4gdmFjYW5jeTsKK+acgOmrmCA+IGhpZ2hlc3Q7Civpq5jljp8gPiBwbGF0ZWF1Owor55Wr5a62ID4gcGFpbnRlcjsKK+WxiOabsiA+IGNyb29rZWQ7CivlrbjogIUgPiBzY2hvbGFyOwor55ay5YueID4gZmF0aWd1ZTsKK+a7v+aJiyA+IGhhbmRmdWw7CivkuI3pvZIgPiBkZXNwaXNlOwor5oqV5omLID4gcGl0Y2hlcjsKK+a1t+mCiiA+IHNlYXNpZGU7CivmiormjIEgPiBjb250cm9sOwor5ZmB5b+DID4gdG9cLWhhdGU7CivlsIvmsYIgPiB0b1wtc2VlazsKK+acrOmMoiA+IGNhcGl0YWw7Civohr3lrZAgPiBjb3VyYWdlOwor6ICz6KqeID4gd2hpc3BlcjsKK+WZtOWiqCA+IGlua1wtamV0Owor5LmL6ZaTID4gYmV0d2VlbjsKK+aciemZkCA+IGxpbWl0ZWQ7CivmiZjmnrYgPiBicmFja2V0Owor5ZOB6LOqID4gcXVhbGl0eTsKK+acrOmHkSA+IGNhcGl0YWw7CivpjKbnt54gPiBicm9jYWRlOwor6bq76ZuAID4gc3BhcnJvdzsKK+aJtuaMgSA+IHRvXC1oZWxwOwor6JmU6KqgID4gc2luY2VyZTsKK+S/neaMgSA+IHRvXC1rZWVwOwor5om25omLID4gcmFpbGluZzsKK+acgOmVtyA+IGxvbmdlc3Q7CivmibPmiYsgPiBzcGFubmVyOwor5L6/5pa8ID4gZWFzeVwtdG87CivmtbfosZogPiBkb2xwaGluOwor5oSb6K23ID4gY2hlcmlzaDsKK+evgOWEiSA+IHRocmlmdHk7CivnpZ7pq5QgPiBnb2RoZWFkOwor5omT5pO+ID4gZGlzdHVyYjsKK+S4remWkyA+IGJldHdpeHQ7CivkvobmrbcgPiBoaXN0b3J5Owor5oSf6Ka6ID4gdG9cLWZlZWw7Civnr4TkvosgPiBleGFtcGxlOwor5a2k56uLID4gaXNvbGF0ZTsKK+eVtuWJjSA+IGN1cnJlbnQ7CivlsaTlrZAgPiBzdHJhdHVtOwor5pys6LOqID4gZXNzZW5jZTsKK+eUqOWtlyA+IGRpY3Rpb247Civoga/ntrIgPiBuZXR3b3JrOwor5r2b5LyPID4gdG9cLWhpZGU7Civoga/ntZAgPiB0b1wtYmluZDsKK+euoeWItiA+IGNvbnRyb2w7Civkv4PmiJAgPiBwcm9jdXJlOwor5bCK5pWsID4gcmVzcGVjdDsKK+WuieeTvyA+IGFtcG91bGU7Civoh7PkuIogPiBzdXByZW1lOwor5LiA6aCFID4gYW5cLWl0ZW07CivmioTlr6sgPiB0b1wtY29weTsKK+i0heeYpCA+IHVzZWxlc3M7CivmuIXnnJ8gPiBpc2xhbWljOwor55Wr5YWSID4gcGljdHVyZTsKK+WWnOatoSA+IHRvXC1saWtlOwor5LuU57SwID4gY2FyZWZ1bDsKK+WxoOWkqyA+IGJ1dGNoZXI7CivkuIrploAgPiBkcm9wXC1pbjsKK+WtuOeUnyA+IHN0dWRlbnQ7CivnjY7ph5EgPiBwcmVtaXVtOwor5Lq6576kID4gYVwtY3Jvd2Q7Civnlbbku4ogPiBjdXJyZW50Owor5YGH5L2/ID4gc3VwcG9zZTsKK+abtOmBoCA+IGZhcnRoZXI7CivlsIvmib4gPiB0b1wtc2VlazsKK+S9teainSA+IGRyYXdpbmc7CivkuZ/oqLEgPiBwZXJoYXBzOwor6ama5ZqHID4gaG9ycmlmeTsKK+aJs+WtkCA+IHNwYW5uZXI7Civmir3lh7ogPiBleHRyYWN0Owor5bC35bCsID4gYXdrd2FyZDsKK+S4jemMryA+IGNvcnJlY3Q7CivmoLjmn6UgPiBleGFtaW5lOwor5LiZ6YWuID4gYWNldG9uZTsKK+aJjeW5siA+IGFiaWxpdHk7CivpppnmsLQgPiBwZXJmdW1lOwor6aaZ5rCjID4gaW5jZW5zZTsKK+Wwj+W/gyA+IGNhcmVmdWw7CivmiJDmlocgPiB3cml0dGVuOwor5ZCQ6ZyyID4gdG9cLXRlbGw7CivotpXlv6sgPiBhdFwtb25jZTsKK+acg+itsCA+IG1lZXRpbmc7Civpo5voiLkgPiBhaXJzaGlwOwor5pu86LC3ID4gYmFuZ2tvazsKK+WRiOmAgSA+IHByZXNlbnQ7CivkuLvoqZ4gPiBzdWJqZWN0Owor5rKJ6buYID4gc2lsZW5jZTsKK+aJk+WtlyA+IHRvXC10eXBlOwor5rKI6buYID4gc2lsZW5jZTsKK+i3s+WLlSA+IHRvXC1iZWF0Owor5rWB6KGMID4gcG9wdWxhcjsKK+S9lOaciSA+IHRvXC1oYXZlOwor5a605pyDID4gYmFucXVldDsKK+iDjOajhCA+IGFiYW5kb247CivpoJjpmoogPiBjYXB0YWluOwor5pyI6J2VID4gZWNsaXBzZTsKK+aJv+WPlyA+IHRvXC1iZWFyOwor5YCJ5L+DID4gaHVycmllZDsKK+aKk+WCtyA+IHNjcmF0Y2g7CivkuI3os7QgPiBub3RcLWJhZDsKK+iCpeaygyA+IGZlcnRpbGU7CivmhI/nvqkgPiBtZWFuaW5nOwor5Y+s6ZuGID4gY29udmVuZTsKK+elnui3oSA+IG1pcmFjbGU7Civkvb/lvpIgPiBhcG9zdGxlOwor5riF5rSXID4gdG9cLXdhc2g7CivlkYroqLQgPiB0b1wtdGVsbDsKK+iEueWkpyA+IHN3b2xsZW47CivllpzmhJsgPiB0b1wtbGlrZTsKK+WvtuWvtiA+IGRhcmxpbmc7CivnrYnlgJkgPiB3YWl0aW5nOwor6LeM5YiwID4gdG9cLWZhbGw7Civmh7rmgpQgPiBjb25mZXNzOwor5oi25aSWID4gb3V0ZG9vcjsKK+WvrOWuuSA+IGxlbmllbnQ7Civog73lubkgPiBjYXBhYmxlOwor5LiN6KaLID4gbm90XC1zZWU7CivkvY/miL8gPiBob3VzaW5nOwor6ICV56iuID4gdG9cLXRpbGw7CivmiLDlo6sgPiBmaWdodGVyOwor57+h57+gID4gZW1lcmFsZDsKK+WwiuWatCA+IGRpZ25pdHk7Civlr4bluqYgPiBkZW5zaXR5Owor5bCW5Y+rID4gc2NyZWVjaDsKK+S8gealrSA+IGNvbXBhbnk7CivlronmkqsgPiBwbGFjYXRlOwor6aCC6YedID4gdGhpbWJsZTsKK+aguOWtkCA+IG51Y2xlYXI7CivkvJHmnIMgPiBhZGpvdXJuOwor6LKi54mpID4gdHJpYnV0ZTsKK+a3mOaysyA+IHBlbGljYW47Civpo5vnm6QgPiBmcmlzYmVlOwor5reY5rCjID4gbmF1Z2h0eTsKK+mojuWFtSA+IGNhdmFscnk7Civmh4rmg7EgPiBhbm5veWVkOwor56ys5LiDID4gc2V2ZW50aDsKK+aJk+WAkiA+IGZsYXR0ZW47Civkv4Pkvb8gPiBzcHVyXC1vbjsKK+miqOeusSA+IGJlbGxvd3M7CivmtbTnm4YgPiBiYXRodHViOwor576k6IqxID4gYmxvc3NvbTsKK+aJmOS7mCA+IGVudHJ1c3Q7CivmoL3ln7kgPiB0b1wtZ3JvdzsKK+enkeebriA+IHN1YmplY3Q7CivppqzlrZAgPiBjb21tb2RlOwor6LaK5Y2XID4gdmlldG5hbTsKK+WuieaFsCA+IGNvbWZvcnQ7CivnqbrmiLAgPiBhaXJcLXdhcjsKK+aIkOWciCA+IHdyZWF0aGU7Civmh4nlvpcgPiBkZXNlcnZlOwor5oiw5YudID4gcHJldmFpbDsKK+S4jeiLnyA+IG5vdFwtbGF4Owor5L2P5a6/ID4gbG9kZ2luZzsKK+i0iuaIkCA+IGFwcHJvdmU7CivororpgbcgPiBjaGFuZ2VzOwor5pyq55+lID4gdW5rbm93bjsKK+aDhee3kiA+IGZlZWxpbmc7CivlsIHlhaUgPiBpbmNsb3NlOwor6YeO6LKTID4gd2lsZGNhdDsKK+S7o+abvyA+IGluc3RlYWQ7CivmoYjljbcgPiByZWNvcmRzOwor5oKj6ICFID4gcGF0aWVudDsKK+S+huWIsCA+IHRvXC1jb21lOwor5Luj5pW4ID4gYWxnZWJyYTsKK+acqOeTpiA+IHNoaW5nbGU7CivmiJDlip8gPiBzdWNjZXNzOwor5Lit56uLID4gbmV1dHJhbDsKK+ePvuaZgiA+IGN1cnJlbnQ7CivkuJbntIAgPiBjZW50dXJ5Owor5L2O5ZywID4gbG93bGFuZDsKK+a1t+a+oSA+IHNlYXdlZWQ7CivlkKvnvqkgPiBtZWFuaW5nOwor5LuK5pmaID4gdG9uaWdodDsKK+mHkeiejSA+IGJhbmtpbmc7Civlk4DmsYIgPiBlbnRyZWF0Owor5rSX56auID4gYmFwdGlzbTsKK+WtuOWutiA+IHNjaG9sYXI7CivlppPpmaIgPiBicm90aGVsOwor5LiN562JID4gdG9cLXZhcnk7Civpoa/npLogPiB0b1wtc2hvdzsKK+WNmumbhSA+IGxlYXJuZWQ7CivpnZLprZogPiBoZXJyaW5nOwor6aas5YW3ID4gaGFybmVzczsKK+WQjee+qSA+IHRpdHVsYXI7CivkuI3npaUgPiBvbWlub3VzOwor5raI5qW1ID4gcGFzc2l2ZTsKK+awtOmKgCA+IG1lcmN1cnk7CivmmojoiLkgPiBzZWFzaWNrOwor6IG35belID4gd29ya2VyczsKK+aXpemWkyA+IGRheXRpbWU7CivlrZ/lrZAgPiBtZW5jaXVzOwor56We56WWID4gZ29kaGVhZDsKK+abieekuiA+IHRvXC10ZWxsOwor6JK46aS+ID4gZGlzdGlsbDsKK+WujOWWhCA+IHBlcmZlY3Q7CivmgrLnl5sgPiBncmlldmVkOwor5a6Y5Y+4ID4gbGF3c3VpdDsKK+mdnumboyA+IHJlcHJvb2Y7CivmsLjpgaAgPiBmb3JldmVyOwor6YWs6LyJID4gcGF5bG9hZDsKK+iBveWvqyA+IGRpY3RhdGU7Civlp5ToqJcgPiBlbnRydXN0Owor6Jmn5pCNID4gZGVmaWNpdDsKK+m6u+eFqSA+IHRyb3VibGU7CivppqzkuIogPiBhdFwtb25jZTsKK+aZr+iJsiA+IHNjZW5lcnk7CivnpYjnprEgPiB0b1wtcHJheTsKK+W/veimliA+IG5lZ2xlY3Q7CivorY/oqpogPiBjeW5pY2FsOwor56K66KqNID4gY29uZmlybTsKK+eOi+asiiA+IHJveWFsdHk7CivmlrnpnaIgPiByZXNwZWN0Owor5Y+k6ICBID4gYW5jaWVudDsKK+S8geWcliA+IGF0dGVtcHQ7CivpoYznm64gPiBzdWJqZWN0Owor5rGh6KGKID4gc2xhbmRlcjsKK+e+heebpCA+IGNvbXBhc3M7Civnj77lr6YgPiByZWFsaXR5Owor6LOq5ZywID4gdGV4dHVyZTsKK+S5vuaXsSA+IGRyb3VnaHQ7Civnj43mhJsgPiBjaGVyaXNoOwor6LSK5YqpID4gc3BvbnNvcjsKK+W/oOiqoCA+IGRldm90ZWQ7CivmlpHpp64gPiBtb3R0bGVkOwor6YSt6YeNID4gc2VyaW91czsKK+WNh+mBtyA+IHByb21vdGU7CivljYrpgJQgPiBoYWxmd2F5Owor5Y+N6ICMID4gaW5zdGVhZDsKK+Wlvei9iSA+IGltcHJvdmU7CivnjovmnJ0gPiBkeW5hc3R5Owor5oOh5qONID4gdmlsbGFpbjsKK+WNiui3ryA+IGhhbGZ3YXk7CivmlbTpq5QgPiBvdmVyYWxsOwor57695q+bID4gZmVhdGhlcjsKK+aEn+aDhSA+IGZlZWxpbmc7CivpvLvlrZQgPiBub3N0cmlsOwor5ZOA5oCdID4gcGVuc2l2ZTsKK+S7u+WLmSA+IG1pc3Npb247CivmhJvmg5wgPiBjaGVyaXNoOwor54yW542XID4gcmFtcGFudDsKK+aenOWckiA+IG9yY2hhcmQ7Civml4HpgoogPiBsYXRlcmFsOwor6aKo5pmvID4gc2NlbmVyeTsKK+m0lemzpSA+IG9zdHJpY2g7CivphpzogZ4gPiBzY2FuZGFsOwor6aO95a24ID4gbGVhcm5lZDsKK+aumOmquCA+IHJlbWFpbnM7Civmlofpm4UgPiBlbGVnYW50Owor6aOb5b2IID4gbWlzc2lsZTsKK+iBveWKmyA+IGhlYXJpbmc7Civku7/lgpogPiB0b1wtY29weTsKK+aXpeiqjCA+IGpvdXJuYWw7CivlpJbpnaIgPiBvdXRzaWRlOwor6aCR55quID4gbmF1Z2h0eTsKK+aatOeDiCA+IHZpb2xlbnQ7Civpm4Tpu4MgPiByZWFsZ2FyOwor5pyD5pyfID4gc2Vzc2lvbjsKK+S4jeazlSA+IGxhd2xlc3M7CivlkajmnKsgPiB3ZWVrZW5kOwor5reh5YWJID4gc2hpbW1lcjsKK+mhnuavlCA+IGFuYWxvZ3k7Civoq7roqp4gPiBwcm92ZXJiOwor5aSn6YyvID4gYmx1bmRlcjsKK+iAgeW5tCA+IGVsZGVybHk7CivkuJ/mo4QgPiBkaXNjYXJkOwor6ICB5birID4gdGVhY2hlcjsKK+iuiuehrCA+IHN0aWZmZW47CivmtbflsrggPiBjb2FzdGFsOwor5pel6J2VID4gZWNsaXBzZTsKK+ekpueJqSA+IG1pbmVyYWw7CivosbnlrZAgPiBsZW9wYXJkOwor5aWH6LmfID4gbWlyYWNsZTsKK+avlOi8gyA+IGNvbXBhcmU7CivlpYfot6EgPiBtaXJhY2xlOwor5Lul5L6/ID4gc29cLXRoYXQ7CivokZfpmbggPiBsYW5kaW5nOwor5by16ZaLID4gc3RyZXRjaDsKK+Wkp+mDvSA+IGdlbmVyYWw7Civlpb3omZUgPiBiZW5lZml0Owor56eR5a24ID4gc2NpZW5jZTsKK+aEm+WlvSA+IHRvXC1saWtlOwor5ray5YyWID4gbGlxdWlmeTsKK+mEmeimliA+IGRlc3Bpc2U7Civmm7Tmj5sgPiByZXBsYWNlOwor5pa56KiAID4gZGlhbGVjdDsKK+WPpOeJqSA+IGFudGlxdWU7Civml6XokL0gPiBzdW5kb3duOwor56We5qC8ID4gZ29kaGVhZDsKK+acrOWxhiA+IGN1cnJlbnQ7Civpg7XosrsgPiBwb3N0YWdlOwor5puW5pinID4gaWxsaWNpdDsKK+WmguiKsSA+IGZsb3dlcnk7Civpnq3nrZYgPiBzcHVyXC1vbjsKK+aDheaEnyA+IGZlZWxpbmc7CivkuLnlv4MgPiBsb3lhbHR5Owor6ZuE6ZueID4gcm9vc3RlcjsKK+ayv+a1tyA+IGNvYXN0YWw7CivmlL7plosgPiB1bmxlYXNoOwor57mq6KO9ID4gdG9cLWRyYXc7CivkuK3mgKcgPiBuZXV0cmFsOwor6YSZ6JaEID4gZGVzcGlzZTsKK+iqueislyA+IHNsYW5kZXI7CivmgKrniakgPiBtb25zdGVyOwor5b6p6IiIID4gcmVzdG9yZTsKK+a2ieWPiiA+IGludm9sdmU7CivnvqjmhZUgPiBlbnZpb3VzOwor5YyF6KO5ID4gd3JhcFwtdXA7CivokZfov7AgPiB3cml0aW5nOwor5aSW6LKMID4gcHJvZmlsZTsKK+mkheS5viA+IGJpc2N1aXQ7CivmnInlrrMgPiBoYXJtZnVsOwor6YWS57K+ID4gYWxjb2hvbDsKK+ekvuacgyA+IHNvY2lldHk7Civnvp7mhKcgPiBhc2hhbWVkOwor5Li75bCOID4gdG9cLWxlYWQ7CivmmrTmlL8gPiB0eXJhbm55Owor5oSf5YiwID4gdG9cLWZlZWw7CivnjovlnIsgPiBraW5nZG9tOwor5piT56KOID4gYnJpdHRsZTsKK+mHmOatuyA+IGNydWNpZnk7Civpoaflv4wgPiBzY3J1cGxlOwor5oSI5ZCIID4gdG9cLWhlYWw7Civlk4DlgrcgPiBncmlldmVkOwor5pW46KmeID4gbnVtZXJhbDsKK+ips+i/sCA+IHJlY291bnQ7CivlianppJggPiBzdXJwbHVzOwor6aGY5oSPID4gdG9cLXdpc2g7CivljIXol48gPiBjb250YWluOwor546p5YWSID4gdG9cLXBsYXk7CivkuK3lrZAgPiBuZXV0cm9uOwor6YeR5qmYID4ga3VtcXVhdDsKK+mcgOimgSA+IHRvXC1uZWVkOwor5oKU5oGoID4gcmVtb3JzZTsKK+WQq+aEjyA+IG1lYW5pbmc7CivmnIDlpKcgPiBiaWdnZXN0Owor5pyA5aSaID4gYXRcLW1vc3Q7Civmm4nlvpcgPiB0b1wta25vdzsKK+iAleS9nCA+IGZhcm1pbmc7CivmgKXmtYEgPiB0b3JyZW50Owor57235omLID4gZ2l2ZVwtdXA7CivogIHlhbUgPiB2ZXRlcmFuOwor6ICB5YWsID4gaHVzYmFuZDsKK+Wjk+i/qyA+IG9wcHJlc3M7CivnjJzmg7MgPiBzdXBwb3NlOwor5Lit5aSuID4gY2VudHJhbDsKK+maiumVtyA+IGNhcHRhaW47CivnoLLoh7ogPiBiYXR0ZXJ5Owor5LmP5ZGzID4gdGVkaW91czsKK/ChnLEgPiB0b1wtZW52eTsKK+aTr+mZpCA+IGRpc2NhcmQ7Civnt6jpgKAgPiBjb21waWxlOwor5LiK5bCHID4gZ2VuZXJhbDsKK+WRvOWQuCA+IGJyZWF0aGU7Civwopi4ID4gdG9cLWhhdGU7CivnjJzluqYgPiBzdXJtaXNlOwor5ZG75ZCfID4gdG9cLW1vYW47CivniannkIYgPiBwaHlzaWNzOwor6YG06YG4ID4gdG9cLXBpY2s7CivniK3nq68gPiBkaXNwdXRlOwor5aWz56WeID4gZ29kZGVzczsKK+aDs+WDjyA+IGltYWdpbmU7CivlvJXoqIAgPiBmb3J3YXJkOwor5ZCM5b+XID4gY29tcmFkZTsKK+WMhee+hSA+IGluY2x1ZGU7CivkuI3lpb0gPiBub1wtZ29vZDsKK+iujOacgyA+IGJhbnF1ZXQ7Civml4XnqIsgPiBqb3VybmV5Owor5pys5LqLID4gYWJpbGl0eTsKK+mHi+aUviA+IHJlbGVhc2U7CivmspLmnIkgPiBoYXZlbicndDsKK+WNl+eTnCA+IHB1bXBraW47CivorormmpYgPiB3YXJtaW5nOwor5rCj55CDID4gYmFsbG9vbjsKK+eLguaatCA+IGZyYW50aWM7CivkuIjlpKsgPiBodXNiYW5kOwor56We5aWzID4gZ29kZGVzczsKK+WQiuW6iiA+IGhhbW1vY2s7Civlj4rmmYIgPiBpblwtdGltZTsKK+WmlueJqSA+IG1vbnN0ZXI7Civpg6jnvbIgPiBkaXNwb3NlOwor5Lmf5LiNID4gbmVpdGhlcjsKK+WPr+aGkCA+IHBpdGlmdWw7CivlpbPnmocgPiBlbXByZXNzOwor5aKe6YCyID4gcHJvbW90ZTsKK+mBmemBoCA+IGRpc3RhbnQ7CivpgZnpgZkgPiBkaXN0YW50Owor6KmV6KuWID4gY29tbWVudDsKK+S4gOWkqSA+IG9uZVwtZGF5Owor5Y+v5oSbID4gYW1pYWJsZTsKK+aUueijnSA+IHJlbW9kZWw7Civnib3mtokgPiBpbnZvbHZlOwor6Zi/6aObID4gaG9vZGx1bTsKK+WPr+aBqCA+IGhhdGVmdWw7CivmgrLlk4AgPiBncmlldmVkOwor6aGn5ZWPID4gYWR2aXNlcjsKK+Wkqee3miA+IGFudGVubmE7Civli7PnuL4gPiBleHBsb2l0Owor5rOV5a6YID4gYVwtanVkZ2U7Civnvo7lnIsgPiBhbWVyaWNhOwor5pyA5L2zID4gb3B0aW11bTsKK+W5vemdiCA+IHNwZWN0ZXI7CivpgYvovYkgPiB0b1wtd29yazsKK+mbt+iBsiA+IHRodW5kZXI7CivpgYvovLggPiB0cmFuc2l0Owor54m55q6KID4gc3BlY2lhbDsKK+aCsuWKhyA+IHRyYWdlZHk7Civnn7Poho8gPiBwbGFzdGVyOwor5pu45L+hID4gZXBpc3RsZTsKK+W6pumHjyA+IG1lYXN1cmU7CivntpPpircgPiB0b1wtc2VsbDsKK+WKjeihkyA+IGZlbmNpbmc7Civlj5vlvpIgPiB0cmFpdG9yOwor6Ki76KejID4gY29tbWVudDsKK+e2sui3ryA+IG5ldHdvcms7CivkuIrljYggPiBtb3JuaW5nOwor57eS6KiAID4gcHJlZmFjZTsKK+iotOionyA+IGxhd3N1aXQ7CivoqofogIAgPiBwcm91ZGx5Owor5paH56ugID4gYXJ0aWNsZTsKK+e8uuW4rSA+IGFic2VuY2U7CivkuIDlj6MgPiByZWFkaWx5Owor5ZCu5ZC4ID4gdG9cLXN1Y2s7CivkuIPljYEgPiBzZXZlbnR5Owor54uC5oCSID4gZnVyaW91czsKK+aWsOeUnyA+IG5ld2Jvcm47CivpmrHol48gPiB0b1wtaGlkZTsKK+e2k+mBjiA+IHRvXC1wYXNzOwor5LiN5YaNID4gbm9cLW1vcmU7CivpmrHolL0gPiBjb25jZWFsOwor5LiW5L+XID4gcHJvZmFuZTsKK+aAneaDsyA+IHRob3VnaHQ7CivlubTpkZEgPiBhbG1hbmFjOwor5pS56ImvID4gaW1wcm92ZTsKK+aApeW/mSA+IGhhc3RpbHk7CivnuarnlasgPiBkcmF3aW5nOwor5q+U55WrID4gZ2VzdHVyZTsKK+eHiOexoCA+IGxhbnRlcm47Civnt6jokZcgPiBjb21waWxlOwor6K2m5oiSID4gdG9cLXdhcm47Civntq3orbcgPiBkZWZlbnNlOwor6YeP5a2QID4gcXVhbnR1bTsKK+eMv+S6uiA+IGFwZVwtbWFuOwor5Y+r5aW9ID4gYXBwbGF1ZDsKK+mhnuS8vCA+IHNpbWlsYXI7CivpgJDpgIAgPiByZXB1bHNlOwor56Kw5pKeID4gY29sbGlkZTsKK+azqOWFpSA+IHBvdXJcLWluOwor6aCC5aSaID4gYXRcLW1vc3Q7CivliY3oqIAgPiBwcmVmYWNlOwor6Z2e5rOVID4gaWxsZWdhbDsKK+awtOaZtiA+IGNyeXN0YWw7CivmraPnvqkgPiBqdXN0aWNlOwor5pma5a60ID4gYmFucXVldDsKK+WQkeWJjSA+IGZvcndhcmQ7Civovq/pp4EgPiBkaXNwdXRlOwor5b6e5q2kID4gdGhlbmNlOwor6bOl5769ID4gcGluaW9uOwor5aCx6YWsID4gcmV3YXJkOwor57eo6ICFID4gZWRpdG9yOwor6Kqk55SoID4gbWlzdXNlOwor5aSW55SlID4gbmVwaGV3Owor6YeN5ZueID4gcmV0dXJuOwor5by355ucID4gYmFuZGl0Owor6Kmp56+HID4gcHNhbG1zOwor5pa55rOVID4gbWV0aG9kOwor5pS/562WID4gcG9saWN5Owor6YCD6LWwID4gZXNjYXBlOwor6K2m5a+fID4gcG9saWNlOwor5rOV5LukID4gZGVjcmVlOwor5Y2x5oe8ID4gYWZyYWlkOwor572q5Lq6ID4gc2lubmVyOwor5aSn54KuID4gY2Fubm9uOwor5aSn54G9ID4gcGxhZ3VlOwor5YuD55m8ID4gdGhyaXZlOwor5ZCJ5LuWID4gZ3VpdGFyOwor5YyF5ra1ID4gZXhjdXNlOwor5q+A5ruFID4gcGVyaXNoOwor5bi26YemID4gYnVja2xlOwor56K65a+mID4gaW5kZWVkOwor5YuV54mpID4gYW5pbWFsOwor57eK57iuID4gcmVkdWNlOwor54eS54SmID4gc2NvcmNoOwor6aCY5LqLID4gY29uc3VsOwor5aSn5rWqID4gYmlsbG93Owor552h6JGXID4gYXNsZWVwOwor6K6K5YyWID4gY2hhbmdlOwor5rCj5oGvID4gYnJlYXRoOwor5pOx572uID4gc2hlbHZlOwor6K6K5YuVID4gY2hhbmdlOwor5pW05r2UID4gbmVhdGx5Owor5peo5oSPID4gZGVjcmVlOwor5byK55eFID4gbWFsYWR5Owor6YG456WoID4gYVwtdm90ZTsKK+WJveeriiA+IHBpcmF0ZTsKK+e3qOeivCA+IGNvZGluZzsKK+mEieadkSA+IHJ1c3RpYzsKK+W3qOmgrSA+IHR5Y29vbjsKK+mgguS6iyA+IHVzZWZ1bDsKK+aSleijgiA+IG1hbmdsZTsKK+mZhOiRlyA+IGFkaGVyZTsKK+ato+eVtiA+IHRpbWVseTsKK+aAkuWQvCA+IGJlbGxvdzsKK+Wlh+aZryA+IG1hcnZlbDsKK+eJiOW8jyA+IGZvcm1hdDsKK+mBoOeoiyA+IHJlbW90ZTsKK+e4rua4myA+IHRvXC1jdXQ7CivljYrlvpEgPiByYWRpdXM7Civno6jlhYkgPiBwb2xpc2g7Civprq3prZogPiBzYWxtb247CivpmY3oh6ggPiBiZWZhbGw7CivoqrLmpa0gPiBsZXNzb247CivphpzljJYgPiBkZWZhbWU7Civop5LokL0gPiBjb3JuZXI7Civni4LkurogPiBtYWRtYW47CivmmYLliLsgPiBtb21lbnQ7CivlpKfmobYgPiBiYXJyZWw7CivnnIvoposgPiB0b1wtc2VlOwor57ej55SxID4gcmVhc29uOwor6Kej6ISrID4gcmVsaWVmOwor56C05pWXID4gYmVhdGVuOwor5peX5bmfID4gZW5zaWduOwor5rC05aO6ID4ga2V0dGxlOwor5q6W5rCRID4gY29sb255Owor5peL5b6LID4gbWVsb2R5Owor6YO15pS/ID4gcG9zdGFsOwor6Z225a2QID4gdGFyZ2V0Owor5b6M5oKUID4gcmVncmV0Owor5YuV5qmfID4gbW90aXZlOwor5Y6t5YCmID4gZHJlYXJ5Owor5b6Q5b6QID4gc2xvd2x5Owor5YWn6Zm4ID4gaW5sYW5kOwor5bel6YyiID4gc2FsYXJ5Owor5YWs6ZaLID4gcHVibGljOwor5Y6f5YWIID4gZm9ybWVyOwor5YWr6ZaLID4gb2N0YXZvOwor54aK54aKID4gcmFnaW5nOwor6L6v6KuWID4gZGViYXRlOwor55+t5q2MID4gYmFsbGFkOwor5Y2a5aOrID4gZG9jdG9yOwor5aW25a2QID4gYnJlYXN0Owor5b+g5ZGKID4gYWR2aWNlOwor56Cy5omLID4gZ3VubmVyOwor5aSa5pifID4gc3RhcnJ5Owor5b6L5birID4gbGF3eWVyOwor5b6u5aaZID4gc3VidGxlOwor5aW95aW9ID4gbmljZWx5Owor57i95pivID4gYWx3YXlzOwor6ZaL6Y6WID4gdW5sb2NrOwor5q2l5risID4gcGFjaW5nOwor54ef5pWRID4gcmVzY3VlOwor5pWs5pyNID4gYWRtaXJlOwor6YWs5YueID4gcmV3YXJkOwor5b6X5a6cID4gcHJvcGVyOwor5Yid57SaID4ganVuaW9yOwor6LyV6ayGID4gZ2VudGxlOwor54iQ5bqKID4gaGVhcnRoOwor6KyK5aCxID4gdG9cLWxpZTsKK+eiuuS/nSA+IGVuc3VyZTsKK+mBi+eUqCA+IHRvXC11c2U7CivlpKnmiY0gPiB0YWxlbnQ7CivntbLntaggPiB2ZWx2ZXQ7CivpgZPnkIYgPiByZWFzb247CivmlKrmt7cgPiB0b1wtbWl4Owor5aO95p2QID4gY29mZmluOwor6Kej562UID4gYW5zd2VyOwor54mI5ZyWID4gZG9tYWluOwor5pS/5qyKID4gcmVnaW1lOwor5b6I5bCRID4gc2VsZG9tOwor54i15aOrID4ga25pZ2h0Owor6KWv6KOhID4gbGluaW5nOwor6KyZ5ZKMID4gbWVla2x5Owor57ay55CDID4gdGVubmlzOwor6I2S6JWqID4gYmFycmVuOwor5YyF5bqHID4gc2hpZWxkOwor5YiG57WmID4gZGl2aWRlOwor5aSp5oCnID4gaW5ib3JuOwor5q2Q5rSyID4gZXVyb3BlOwor5Yu+5byVID4gc2VkdWNlOwor55m96YqAID4gc2lsdmVyOwor54ax5pybID4gYXNwaXJlOwor57K+6YG4ID4gY2hvc2VuOwor5pWI5p6cID4gcmVzdWx0Owor6KqY5ouQID4gYWJkdWN0Owor6Kqg5oeHID4gaGVhcnR5Owor6YCa55+lID4gbm90aWZ5Owor5Yi655ebID4gdGluZ2xlOwor5b615Y+sID4gZW5saXN0Owor5q2h5qiCID4gZ2FpZXR5Owor57Sr6ImyID4gcHVycGxlOwor6KOh6Z2iID4gaW5zaWRlOwor5YWI6YuSID4gaGVyYWxkOwor5bmz56mpID4gc21vb3RoOwor5pW15oSPID4gZW5taXR5Owor5be06KW/ID4gYnJhemlsOwor54mp5Lu2ID4gb2JqZWN0Owor5Y245LiLID4gdW5sb2FkOwor5YyF5a65ID4gcGFyZG9uOwor6KqY5oORID4gZW50aWNlOwor54mn5Lq6ID4gcGFzdG9yOwor5aKe5re7ID4gYWRkXC10bzsKK+WkluW9oiA+IGZpZ3VyZTsKK+mbhuacgyA+IGdhdGhlcjsKK+maqOapnyA+IHJhbmRvbTsKK+WFteiuiiA+IG11dGlueTsKK+aVj+aNtyA+IG5pbWJsZTsKK+eJm+S7lCA+IGNvd2JveTsKK+aPkOmGkiA+IHJlbWluZDsKK+inuOeKryA+IG9mZmVuZDsKK+WlquWPliA+IHNuYXRjaDsKK+Wkq+WtkCA+IHBlZGFudDsKK+WkquWtkCA+IHByaW5jZTsKK+aOoembhiA+IGdhdGhlcjsKK+ecn+epuiA+IHZhY3VcOm07CivmrrrlrrMgPiBtdXJkZXI7Civmrpjlv40gPiBibG9vZHk7CivplpLoqbEgPiBnb3NzaXA7CivnnLznmq4gPiBleWVsaWQ7CivntLDnt5ogPiBzdHJpbmc7Civovq3ogbcgPiByZXNpZ247CivphJnlkJ0gPiB2dWxnYXI7Civnt5rmop0gPiBzdHJlYWs7CivptL/lrZAgPiBwaWdlb247CivlvpLli54gPiBmdXRpbGU7CivlvpfliLAgPiB0b1wtZ2V0Owor6L2J6K6KID4gY2hhbmdlOwor57Sw57KJID4gcG93ZGVyOwor6Kqg5a+mID4gaG9uZXN0Owor5biM6IeYID4gZ3JlZWNlOwor6Zuj5b6XID4gc2VsZG9tOwor5aSn5aSrID4gZG9jdG9yOwor5pW45a2XID4gbnVtYmVyOwor5r+66ZaLID4gc3BsYXNoOwor5pS75omTID4gYXR0YWNrOwor6YGK5q23ID4gdHJhdmVsOwor5Ymb5q2jID4gaG9uZXN0Owor5b6p5LuHID4gYXZlbmdlOwor6ZqO5qKvID4gbGFkZGVyOwor5aOT5omBID4gc3F1YXNoOwor6Kmp5oSPID4gcG9ldGljOwor57ej5pWFID4gcmVhc29uOwor5pSd5pS/ID4gcmVnZW50Owor5b6e5L6GID4gYWx3YXlzOwor5qiZ6KqeID4gc2xvZ2FuOwor57iu5bCPID4gcmVkdWNlOwor55m86KqTID4gdG9cLXZvdzsKK+apoeiGoCA+IHJ1YmJlcjsKK+WcsOmQtSA+IHN1YndheTsKK+mbjOaApyA+IGZlbWFsZTsKK+WNgeS4gCA+IGVsZXZlbjsKK+W+nuS6iyA+IGdvXC1mb3I7CivnhrHluLYgPiB0cm9waWM7Civpm5zlt6UgPiBwb3J0ZXI7Civlh7rnlKIgPiBvdXRwdXQ7CivlpaLkvoggPiBsdXh1cnk7Civokpnlj5cgPiBzdWZmZXI7CivmjpvpiaQgPiBjb3VwbGU7CivntJTnsrkgPiBwdXJlbHk7CivlpI/lpKkgPiBzdW1tZXI7CivphJnkv5ogPiB2dWxnYXI7CivphJnkv5cgPiB2dWxnYXI7CivpnLLlh7ogPiBleHBvc2U7CivmlIDmmIcgPiByaXNpbmc7Civnhanmk74gPiBib3RoZXI7Civop6PmuLQgPiBxdWVuY2g7Civpgbrmhr4gPiByZWdyZXQ7CivmrYzmiYsgPiBzaW5nZXI7Civlt6HoiKogPiBjcnVpc2U7CivluIPnt5ogPiB3aXJpbmc7CivmraPlvI8gPiBmb3JtYWw7CivlhrDnrrEgPiBpY2Vib3g7Civns7vntbEgPiBzeXN0ZW07CivnhKHms5UgPiB1bmFibGU7CivpgJXmtYEgPiBydW5vZmY7CivlpL7lhYsgPiBqYWNrZXQ7CivlpKflkIMgPiBnb2JibGU7Civmr6vkuI0gPiBoYXJkbHk7CivpgZPmlZkgPiB0YW9pc207CivoqLrmiYAgPiBjbGluaWM7CivpgbrmgaggPiBncnVkZ2U7Civmk7TmlaMgPiBzcHJlYWQ7CivprIbppIUgPiBtdWZmaW47Civmk6/mlqUgPiByZWplY3Q7CivliqDltJkgPiBnYWxsb247CivlpYfkuosgPiBtYXJ2ZWw7CivmlZnloIIgPiBjaHVyY2g7CivoqZ7lsL4gPiBzdWZmaXg7CivpgLHmnJ8gPiBwZXJpb2Q7Civpm7bllK4gPiByZXRhaWw7Civmq7vmoYMgPiBjaGVycnk7CivlnKjou4ogPiBhYm9hcmQ7CivojLbnopcgPiB0ZWFjdXA7Civnt57luLYgPiByaWJib247CivliIbmtL4gPiBhc3NpZ247Civnlr7pprMgPiBnYWxsb3A7Civnt4rmgKUgPiB1cmdlbnQ7Civlu4HmiYAgPiB0b2lsZXQ7CivluqbmlbggPiBkZWdyZWU7CivpmLvmqYggPiB0aHdhcnQ7CivmjqfoqLQgPiBhY2N1c2U7CivmkJbnsYMgPiBjcmFkbGU7CivokZflkI0gPiBmYW1vdXM7CivlvLfli6IgPiBtaWdodHk7CivntK7nh58gPiBlbmNhbXA7CivntoHmnrYgPiBraWRuYXA7Civlh7nmtJ4gPiBjYXZpdHk7CivlvLHljJYgPiB3ZWFrZW47CivpmbDmiLYgPiB2YWdpbmE7Civmk4rmlZcgPiBkZWZlYXQ7CivpgLLmjqUgPiBhY2Nlc3M7Civnn63lj6UgPiBjbGF1c2U7CivntZXmsKMgPiBleHBpcmU7CivoqLzlr6YgPiB2ZXJpZnk7CivpgKPmk4ogPiBiYXR0ZXI7CivmlZnljYAgPiBwYXJpc2g7CivpgK7mjZUgPiBhcnJlc3Q7Civnm6PnjYQgPiBwcmlzb247Civngavnrq0gPiByb2NrZXQ7CivpmrHlo6sgPiBoZXJtaXQ7Civoirnoj5wgPiBjZWxlcnk7Civnn63lio0gPiBkYWdnZXI7Civoiq3olYkgPiBiYW5hbmE7CivlvLflgaUgPiBzdHVyZHk7CivmrablmaggPiB3ZWFwb247CivoiIzpoK0gPiB0b25ndWU7CivnhaTlsZEgPiBjaW5kZXI7CivlubPmnb8gPiB0YWJsZXQ7Civlh7nmp70gPiBzb2NrZXQ7CivoqJjluLMgPiBjaGFyZ2U7CivliK7mjokgPiBzY3JhcGU7CivpmbDlvbEgPiBzaGFkb3c7Civpq5jpm4UgPiBkYWludHk7CivmraHllpwgPiBqb3lmdWw7CivliIbmnp0gPiBicmFuY2g7CivliYrlvLEgPiB3ZWFrZW47CivmraXlk6ggPiBzZW50cnk7CivmkKrnk7cgPiBlbmFtZWw7CivlgrPpgZQgPiBjb252ZXk7Civmk7TlsZUgPiBleHRlbmQ7CivliIbmnIMgPiBicmFuY2g7Civmv4DotbcgPiBhcm91c2U7CivooaHph48gPiB3ZWlnaHQ7Civpqqjpq5MgPiBtYXJyb3c7CivmkJTnmaIgPiB0aWNrbGU7Civpm5Xlg48gPiBzdGF0dWU7CivmraPljYggPiBtaWRkYXk7CivmkqvmirEgPiBjYXJlc3M7CivlhaznnL4gPiBwdWJsaWM7CivmlZHkuLsgPiBzYXZpb3I7CivnspjnspggPiBzdGlja3k7CivmrbfkvoYgPiBhbHdheXM7CivmlKrli5UgPiB0b1wtbWl4Owor6KGX6YGTID4gc3RyZWV0Owor5be054i+ID4gYmFsdGljOwor55qE56K6ID4gcmVhbGx5Owor6YGO5aSxID4gZGVmZWN0Owor6ZW355+tID4gbGVuZ3RoOwor5bmr5omLID4gaGVscGVyOwor5q2j5YC8ID4gaG9uZXN0Owor5YWs55SoID4gcHVibGljOwor6YGt5Y+XID4gc3VmZmVyOwor6ZmE5bq4ID4gdmFzc2FsOwor55uu5qiZID4gdGFyZ2V0Owor6YGp5ZCIID4gdG9cLWZpdDsKK+mrmOmBlCA+IGF0dGFpbjsKK+ijnOe1piA+IHN1cHBseTsKK+iKseeyiSA+IHBvbGxlbjsKK+WFqOeQgyA+IGVudGlyZTsKK+aMkemBuCA+IGNob29zZTsKK+mBreWIsCA+IHN1ZmZlcjsKK+eZveeXtCA+IGlkaW9jeTsKK+WzveiwtyA+IGNhbnlvbjsKK+WZqumfsyA+IHJ1bWJsZTsKK+aNjeihmyA+IGRlZmVuZDsKK+ihqOimqiA+IGNvdXNpbjsKK+ingOW/tSA+IG5vdGlvbjsKK+ijgee4qyA+IHRhaWxvcjsKK+aOoee0jSA+IGFjY2VwdDsKK+ijnOeoriA+IHJlc2VlZDsKK+WFgeeVtiA+IHByb3BlcjsKK+WGsOafsSA+IGljaWNsZTsKK+mWseattyA+IHRvXC1zZWU7Civlnabnmb0gPiBob25lc3Q7CivpmLLlroggPiBkZWZlbmQ7CivpmL/lp6ggPiBhdW50aWU7CivojYnmlpkgPiBmb2RkZXI7Civnt5rkuIogPiBvbmxpbmU7Civlh7rluK0gPiBhdHRlbmQ7CivpqZrpp60gPiBmcmlnaHQ7CivntKDmj48gPiBza2V0Y2g7CivlhYfnjJsgPiBmaWVyY2U7CivplpLmt7cgPiBsb2l0ZXI7CivmkZ/mirEgPiB0b1wtaHVnOwor6Ieq6LqrID4gaXRzZWxmOwor6YCy5Y+jID4gaW1wb3J0Owor5o6h56SmID4gbWluaW5nOwor5pO+5LqCID4gaW5mZXN0Owor57WQ5bC+ID4gZW5kaW5nOwor6Zaj5qiTID4gZ2FycmV0Owor6Iqx55SfID4gcGVhbnV0Owor6YGO5Lu9ID4gdW5kdWx5Owor6amf6ZuoID4gc2hvd2VyOwor5bmD5bmVID4gc2NyZWVuOwor5pC25pWRID4gcmVzY3VlOwor5YWJ5r6kID4gbHVzdGVyOwor5pCc5p+lID4gc2VhcmNoOwor6YCd5Y67ID4gZWxhcHNlOwor5YWJ5ryGID4gZW5hbWVsOwor5pCt5pWRID4gcmVzY3VlOwor5YWJ5ruRID4gZ2xvc3N5Owor6YCV5ZCRID4gcmFkaWFsOwor5bGP6aKoID4gc2NyZWVuOwor6YC85LuEID4gbmFycm93Owor55u45beuID4gZGlmZmVyOwor6Zec5b+DID4gY2FyaW5nOwor5pCW5pmDID4gZmFsdGVyOwor5oq16YGUID4gYXJyaXZlOwor5Zyw55SiID4gZXN0YXRlOwor57Sw5aupID4gdGVuZGVyOwor5bGA6Z2iID4gYXNwZWN0Owor5r6x57KJID4gc3RhcmNoOwor5qiZ5qacID4gZmxhdW50Owor55m95qWKID4gcG9wbGFyOwor5rqQ6bueID4gc291cmNlOwor5ruR6ZuqID4gdG9cLXNraTsKK+Wbnue1lSA+IHJlYnVmZjsKK+ilquW4tiA+IGdhcnRlcjsKK+e2geS9jyA+IGZhc3RlbjsKK+ecvOWFiSA+IHZpc2lvbjsKK+aoo+acrCA+IHNhbXBsZTsKK+eDiOWjqyA+IG1hcnR5cjsKK+eyvuaYjiA+IGFzdHV0ZTsKK+iFs+mQkCA+IGZldHRlcjsKK+eUoumHjyA+IG91dHB1dDsKK+eZveaenCA+IGdpbmtnbzsKK+W4huW4gyA+IGNhbnZhczsKK+W4g+W5lSA+IHNjcmVlbjsKK+i3s+mAsiA+IHBsdW5nZTsKK+WatOiChSA+IHNvbGVtbjsKK+mZhOS4iiA+IGF0dGFjaDsKK+aKrOi1tyA+IHVwbGlmdDsKK+W5vuS5jiA+IGFsbW9zdDsKK+i/q+WIhyA+IHVyZ2VudDsKK+eAiea5liA+IGxhZ29vbjsKK+e0hOWumiA+IGVuZ2FnZTsKK+ewoeebtCA+IHNpbXBseTsKK+i3n+mAsiA+IGZvbGxvdzsKK+WFieaYryA+IHNvbGVseTsKK+e1puS6iCA+IGFjY29yZDsKK+WxseiwtyA+IHZhbGxleTsKK+WgseS/oSA+IG5vdGlmeTsKK+ewoeeVpSA+IHNpbXBsZTsKK+ikh+aVuCA+IHBsdXJhbDsKK+eZveaQrSA+IG5vXC11c2U7Civlt6HlvIsgPiBjcnVpc2U7CivmqZ/lr4YgPiBzZWNyZXQ7CivoiKrnqIsgPiBmbGlnaHQ7CivlhqzlpKkgPiB3aW50ZXI7Civmj7TmiYsgPiBzdWNjb3I7Civpq5Tns7sgPiBzeXN0ZW07CivluJ3lnIsgPiBlbXBpcmU7CivojLblo7ogPiB0ZWFwb3Q7Civnm5/lnIsgPiBhbGxpZXM7CivmqZjlrZAgPiBvcmFuZ2U7Civoo4HmsbogPiBydWxpbmc7CivoppblipsgPiB2aXNpb247Civlr6bpq5QgPiBlbnRpdHk7CivnmbzmipYgPiBzaGl2ZXI7CivntKLlj5YgPiB0b1wtYXNrOwor5bit5Y23ID4gZW5ndWxmOwor5Zyw5q+vID4gY2FycGV0Owor5YWr5bqmID4gb2N0YXZlOwor55So6KqeID4gc3ludGF4Owor5biC5aC0ID4gbWFya2V0Owor5Z+O5aChID4gY2FzdGxlOwor56+A57SEID4gZnJ1Z2FsOwor55Sy6J+yID4gYmVldGxlOwor5om/6Ku+ID4gZWZmb3J0Owor6KGb55SfID4gaGVhbHRoOwor6ZW35bqmID4gbGVuZ3RoOwor6KOc5pWRID4gcmVtZWR5Owor5L+u6KiCID4gcmV2aXNlOwor5bir5YKFID4gbWFzdGVyOwor6L+E5LuKID4gc29cLWZhcjsKK+WvpumamyA+IGFjdHVhbDsKK+WYl+ippiA+IHRvXC10cnk7CivlnoLluZUgPiBjYW5vcHk7CivooJ/nrYYgPiBjcmF5b247CivlhrDlh40gPiBmcmVlemU7Civkvq7ovrEgPiBpbnN1bHQ7CivmqKPlrZAgPiBtYW5uZXI7Civnlqvnl4UgPiBwbGFndWU7Civln7fkuosgPiBkZWFjb247CivmiJDplbcgPiBtYXR1cmU7Civmup3pgZMgPiBncm9vdmU7CivovrLkurogPiBmYXJtZXI7Civmj5LluqcgPiBzb2NrZXQ7Civmu77okL0gPiB0dW1ibGU7CivlsIfov5EgPiBhbG1vc3Q7Civns7vliJcgPiBzZXJpZXM7Civnm4jliKkgPiBwcm9maXQ7CivmjpLmlqUgPiByZWplY3Q7Civmia7oo50gPiBtYWtldXA7Civmi4nnt4ogPiBzdHJhaW47Civkv53ooZsgPiBkZWZlbmQ7Civono3op6MgPiBtb2x0ZW47CivlnJbmoYggPiBkZXNpZ247CivohZToqr8gPiBhY2NlbnQ7CivotbDpjK8gPiBhc3RyYXk7CivllonpoK0gPiB0aHJvYXQ7Civnr4DnnIEgPiBzYXZpbmc7CivovJXlvq4gPiBzbGlnaHQ7CivlnJPmn7EgPiBjb2x1bW47Civmo4noirEgPiBjb3R0b247CivlsY/olL0gPiBzY3JlZW47CivlhaflnLAgPiBpbmxhbmQ7Civkv6HomZ8gPiBzaWduYWw7CivlsI/ospMgPiBraXR0ZW47CivooYzngrogPiBhY3Rpb247CivlsI3osaEgPiB0YXJnZXQ7CivlhbHlkIwgPiBjb21tb247Civln4vkvI8gPiBhbWJ1c2g7CivnlobnlYwgPiBib3JkZXI7CivlsI3oqbEgPiBkaWFsb2c7CivnrKbomZ8gPiBzeW1ib2w7Civog7jph50gPiBicm9vY2g7CivmkK3kuZggPiBlbWJhcms7CivohIXov6sgPiBjb2VyY2U7CivllprphpIgPiBhcm91c2U7CivlhavljYEgPiBlaWdodHk7CivmqKPlk4EgPiBzYW1wbGU7CivnsLjmj5ogPiB3aW5ub3c7Civmo5Lns5YgPiBzdWNrZXI7Civnrpfnm6QgPiBhYmFjdXM7CivnsKHmmJMgPiBzaW1wbGU7CivooJ/nh60gPiBjYW5kbGU7Civnsr7lipsgPiBlbmVyZ3k7CivlhazlhbEgPiBwdWJsaWM7CivlgrPmn5MgPiBpbmZlY3Q7Civlt6XkurogPiB3b3JrZXI7CivlnKjlvowgPiBiZWhpbmQ7Civoh6rnhLYgPiBuYXR1cmU7Civmu77nrZIgPiByb2xsZXI7CivmvaTmu5EgPiBzbW9vdGg7CivotbfoqLQgPiB0b1wtc3VlOwor6J2X6J+yID4gbG9jdXN0Owor5bK454S2ID4gc29sZW1uOwor5YKz5pWZID4gcHJlYWNoOwor6KOB5a6aID4gcnVsaW5nOwor562J57SaID4gZGVncmVlOwor6LyD5aW9ID4gYmV0dGVyOwor6Iqx5ZySID4gZ2FyZGVuOwor6Iqx5ZyIID4gd3JlYXRoOwor6IWO6IefID4ga2lkbmV5Owor5o2V5ou/ID4gYXJyZXN0Owor6Lev56iLID4gY291cnNlOwor5YWI5YmNID4gYmVmb3JlOwor5oaC6ayxID4gc3VsbGVuOwor6aas6LevID4gc3RyZWV0Owor56mX6aO+ID4gdGFzc2VsOwor5YCr55CGID4gZXRoaWNzOwor55Ge6YeRID4gcnVpamluOwor5oqx55eFID4gYmVcLWlsbDsKK+WCs+aOiCA+IGltcGFydDsKK+i7iuW6qyA+IGdhcmFnZTsKK+a4rOmHjyA+IHN1cnZleTsKK+Wtl+mmliA+IHByZWZpeDsKK+mtmuWkqyA+IGZpc2hlcjsKK+eyl+WKoyA+IGNvYXJzZTsKK+iKseWTqCA+IGdhcmlzaDsKK+aJjeiDvSA+IHRhbGVudDsKK+i8leWSrCA+IG5pYmJsZTsKK+ainee0iyA+IHN0cmlwZTsKK+iHtOatuyA+IGRlYWRseTsKK+WatOagvCA+IHN0cmljdDsKK+aPkuWFpSA+IGluc2VydDsKK+a8gueZvSA+IGJsZWFjaDsKK+aMq+aVlyA+IHRod2FydDsKK+i0lumHkSA+IHJhbnNvbTsKK+exg+WtkCA+IGJhc2tldDsKK+ihjOaYnyA+IHBsYW5ldDsKK+WbnuaGtiA+IHJlY2FsbDsKK+WFieS6riA+IGJyaWdodDsKK+a/vuWZqCA+IGZpbHRlcjsKK+eyl+S/lyA+IHZ1bGdhcjsKK+epgOmhniA+IGNlcmVhbDsKK+WBteafpSA+IGRldGVjdDsKK+WCt+W/gyA+IGdyaWV2ZTsKK+WuueiosSA+IHBlcm1pdDsKK+aOp+WRiiA+IGFjY3VzZTsKK+iiluWtkCA+IHNsZWV2ZTsKK+S9juiqniA+IG11dHRlcjsKK+iKseWFkiA+IGZsb3dlcjsKK+icpeictCA+IGxpemFyZDsKK+a8o+a8qiA+IHJpcHBsZTsKK+WbuuWuiCA+IGFkaGVyZTsKK+Wci+WkliA+IGFicm9hZDsKK+a2sumrlCA+IGxpcXVpZDsKK+iDjOiqpiA+IHJlY2l0ZTsKK+aelemgrSA+IHBpbGxvdzsKK+icmOibmyA+IHNwaWRlcjsKK+W0juW2hyA+IHJ1Z2dlZDsKK+mkkemkkSA+IHBhc3RyeTsKK+eWsuaGiiA+IGJlYXRlbjsKK+S+jeiAhSA+IHdhaXRlcjsKK+mkkOmjsiA+IHJlcGFzdDsKK+WCt+WusyA+IGluanVyZTsKK+S/rueQhiA+IHJlcGFpcjsKK+S9leiZlSA+IHdoZW5jZTsKK+a8q+atpSA+IHJhbWJsZTsKK+S/oeeUqCA+IGNyZWRpdDsKK+a2vOmeiyA+IHNhbmRhbDsKK+a1t+m+nCA+IHR1cnRsZTsKK+WboOWtkCA+IGZhY3RvcjsKK+aLs+aTiiA+IGJveGluZzsKK+i7n+WMliA+IHNvZnRlbjsKK+WuieipsyA+IHNlcmVuZTsKK+Wcn+WMqiA+IGJhbmRpdDsKK+aLlOaguSA+IHVwcm9vdDsKK+aJo+eVmSA+IGRldGFpbjsKK+advumbniA+IGdyb3VzZTsKK+mmmeiViSA+IGJhbmFuYTsKK+mrmOW6piA+IGhlaWdodDsKK+ani+S7tiA+IG1lbWJlcjsKK+WVhuirhyA+IGNvbmZlcjsKK+eVsOaVmSA+IGhlcmVzeTsKK+ewoeWWriA+IHNpbXBsZTsKK+ajuuadkCA+IGNvZmZpbjsKK+WcsOS4uyA+IGFcLWhvc3Q7Civpq5jlsbEgPiBhbHBpbmU7Civlg7HkvaMgPiBlbXBsb3k7Civpo6LppJMgPiBodW5nZXI7CivnlJ/mtq8gPiBjYXJlZXI7Civmo67mnpcgPiBmb3Jlc3Q7CivkvZzogIUgPiBhdXRob3I7CivmjKrlqIEgPiBub3J3YXk7CivlsIvnmoQgPiBob21pbmc7CivlmrTlr4YgPiBzdHJpY3Q7Civmi5jmjZUgPiBhcnJlc3Q7CivlgaXlurcgPiBoZWFsdGg7Civooajlk6UgPiBjb3VzaW47CivmnIvpu6ggPiBjbGlxdWU7Civmt7fooYAgPiBoeWJyaWQ7Civot4vmtokgPiB0cnVkZ2U7Civlg4Xlg4UgPiBiYXJlbHk7Civlm57ljrsgPiByZXR1cm47CivmvI/mlpcgPiBmdW5uZWw7Civos5Poqp4gPiBvYmplY3Q7CivkubPpoK0gPiBuaXBwbGU7Civmu7/mnJ8gPiBleHBpcmU7CivnkIboq5YgPiB0aGVvcnk7Civku4vos6ogPiBtZWRpdW07CivnrZTmoYggPiBhbnN3ZXI7Civpkb/lrZAgPiBjaGlzZWw7CivnlLHmlrwgPiBkdWVcLXRvOwor5oqK5p+EID4gaGFuZGxlOwor5ZKM6aKoID4gYnJlZXplOwor5L2/55SoID4gdG9cLXVzZTsKK+iBmOiriyA+IGVuZ2FnZTsKK+aJtuakjSA+IGZvc3RlcjsKK+eSsOeQgyA+IGdsb2JhbDsKK+W0l+S9jSA+IGFcLXBvc3Q7Civkvr/msaAgPiB1cmluYWw7Civlm57kvoYgPiByZXR1cm47Civmi5PlsZUgPiBleHBhbmQ7CivmuqrmtYEgPiBzdHJlYW07CivlmrTljrIgPiBzZXZlcmU7CivmvZvlnKggPiBoaWRkZW47CivoiLnkuIogPiBhYm9hcmQ7CivlrqPnqLEgPiBhc3NlcnQ7Civlk4Dovq0gPiBsYW1lbnQ7CivmiYvmrrUgPiBtZXRob2Q7Civkub7phaogPiBjaGVlc2U7Civmm7Tpq5ggPiBoaWdoZXI7CivlgYzlpKcgPiBzb1wtYmlnOwor5a6j56S6ID4gdG9cLXZvdzsKK+Wwj+awoyA+IHN0aW5neTsKK+mrlOWItiA+IHN5c3RlbTsKK+aIkOeGnyA+IG1hdHVyZTsKK+iCjOiCiSA+IG11c2NsZTsKK+S9nOeUqCA+IGFjdGlvbjsKK+aKveWxnCA+IGRyYXdlcjsKK+mpmuaBkCA+IGFwcGFsbDsKK+aKiuaJiyA+IGhhbmRsZTsKK+aJi+anjSA+IHBpc3RvbDsKK+WutueVnCA+IGNhdHRsZTsKK+emj+mfsyA+IGdvc3BlbDsKK+i1t+a6kCA+IG9yaWdpbjsKK+e+pOmrlCA+IGNvbG9ueTsKK+S6gui3syA+IGJvdW5jZTsKK+eUt+W3qyA+IHdpemFyZDsKK+iGveWkpyA+IGRhcmluZzsKK+WuieelpSA+IHNlcmVuZTsKK+etlOW+qSA+IGFuc3dlcjsKK+i3n+W+niA+IGZvbGxvdzsKK+WBpeWFqCA+IHJvYnVzdDsKK+aguea6kCA+IG9yaWdpbjsKK+iDvea6kCA+IGVuZXJneTsKK+acrOi6qyA+IGl0c2VsZjsKK+aLjOWYtCA+IGJpY2tlcjsKK+aJk+aTiiA+IHRvXC1oaXQ7Civmh4nnlbYgPiBzaG91bGQ7CivmiaPmirwgPiBkZXRhaW47CivnrKjmi5kgPiBjbHVtc3k7CivlgIvlrZAgPiBoZWlnaHQ7Civmh4nnlKggPiB0b1wtdXNlOwor55GV55a1ID4gc3RpZ21hOwor5pud6ZyyID4gZXhwb3NlOwor5rW36KOhID4gbWFyaW5lOwor5ZGz6YGTID4gZmxhdm9yOwor5omL5oyHID4gZmluZ2VyOwor5oqK5a2QID4gaGFuZGxlOwor56eB6KqeID4gbXVybXVyOwor6aSK6IKyID4gZm9zdGVyOwor5pyA6L+RID4gcmVjZW50Owor5riF55imID4gbWVhZ2VyOwor5rS76LqNID4gYWN0aXZlOwor5bK45LiKID4gYXNob3JlOwor5oiQ5p6cID4gcmVzdWx0Owor5Lit6YCUID4gbWlkd2F5Owor6aCC6bueID4gc3VtbWl0Owor5pq06ZyyID4gZXhwb3NlOwor56qB54S2ID4gc3VkZGVuOwor5pyo6KO9ID4gd29vZGVuOwor5a6J54S2ID4gc2FmZWx5Owor6aOi6I2SID4gZmFtaW5lOwor6La+5bCWID4gdGlwdG9lOwor5p2f6IWwID4gZ2lyZGxlOwor5a6u5q6/ID4gcGFsYWNlOwor5p2/57WQID4gaGFyZGVuOwor5L6b5oeJID4gc3VwcGx5Owor5L+h5aWJID4gYmVsaWVmOwor5oiQ5pWIID4gZWZmZWN0Owor55O25a2QID4gYm90dGxlOwor5LiJ6YeNID4gdHJlYmxlOwor5a6i5rCjID4gcG9saXRlOwor5rWu6JGXID4gYWZsb2F0Owor5aqS6LOqID4gbWVkaXVtOwor6K6K6buRID4gZGFya2VuOwor5a2k542oID4gbG9uZWx5Owor5rig5rqdID4gdHJlbmNoOwor6IOh5qSSID4gcGVwcGVyOwor5rWu6I+vID4gdmFuaXR5Owor6aeB5palID4gcmVmdXRlOwor5LiN6YGpID4gdW53ZWxsOwor576e6L6xID4gYmFmZmxlOwor55WZ5LiLID4gcmVtYWluOwor5LiK6YKKID4gdXBzaWRlOwor6Y+h5a2QID4gbWlycm9yOwor6IOh5qGDID4gd2FsbnV0Owor6Y+f5a2QID4gc2hvdmVsOwor5bCB5bu6ID4gZmV1ZGFsOwor5p6c55yfID4gcmVhbGx5Owor5ZKM6Je5ID4ga2luZGx5Owor6bia6bWhID4gcGFycm90Owor56m/5rSeID4gcGllcmNlOwor5a+65bufID4gdGVtcGxlOwor55CG55SxID4gcmVhc29uOwor6Laz5aSgID4gZW5vdWdoOwor6JWB6bq7ID4gbmV0dGxlOwor5a6i5qOnID4gdGF2ZXJuOwor5a+25bqnID4gdGhyb25lOwor5Y+p6aCtID4ga293dG93Owor5oi/5a6iID4gdGVuYW50Owor56ys5ZubID4gZm91cnRoOwor6YeO6aSQID4gcGljbmljOwor5bCI5a62ID4gZXhwZXJ0Owor5p+z5qi5ID4gd2lsbG93Owor55Sx5L6GID4gb3JpZ2luOwor5L2/5b6XID4gdXNhYmxlOwor5ryC5LquID4gcHJldHR5Owor5ZeT5a2QID4gdGhyb2F0Owor6JyD5pmvID4gbWlyYWdlOwor6YeN6Z+zID4gYWNjZW50Owor5Y+N6aeBID4gcmV0b3J0Owor5bCR5aWzID4gbWFpZGVuOwor55Sx5LqOID4gZHVlXC10bzsKK+a1t+e2vyA+IHNwb25nZTsKK+eQg+eLgCA+IHNwaGVyZTsKK+eUqOS6jiA+IHVzZVwtaW47Civmh4nmnIkgPiBwcm9wZXI7CivosqfnmKAgPiBiYXJyZW47CivomZ/norwgPiBudW1iZXI7CivmmZrpo68gPiBzdXBwZXI7Civos63ms6ggPiBzdGFrZXM7CivnpZ7oq60gPiBvcmFjbGU7CivmhJrnrKggPiBzdHVwaWQ7CivmnpznhLYgPiByZWFsbHk7CivkuI3opoEgPiBkb24nJ3RcITsKK+adkOepjSA+IHZvbHVtZTsKK+aJgeWckyA+IG9ibGF0ZTsKK+m7g+iJsiA+IHllbGxvdzsKK+WPrumItCA+IGppbmdsZTsKK+esrOWFqyA+IGVpZ2h0aDsKK+WxheS9jyA+IHJlc2lkZTsKK+WtuOagoSA+IHNjaG9vbDsKK+S4iuihqyA+IGJsb3VzZTsKK+azouiwtyA+IHRyb3VnaDsKK+S4iuihoyA+IGphY2tldDsKK+WvtuWhlCA+IHBhZ29kYTsKK+WuouaItiA+IGNsaWVudDsKK+eql+aItiA+IHdpbmRvdzsKK+WutuW6rSA+IGZhbWlseTsKK+mHjemHjyA+IHdlaWdodDsKK+afj+aelyA+IGJlcmxpbjsKK+aciee9qiA+IGd1aWx0eTsKK+mNteW4vSA+IGtleWNhcDsKK+Wwj+WMhSA+IHBhY2tldDsKK+S6qOeJuSA+IGh1bnRlcjsKK+epjealtSA+IGFjdGl2ZTsKK+aJk+WCtyA+IGJydWlzZTsKK+mggemCiiA+IG1hcmdpbjsKK+aJi+WGiiA+IG1hbnVhbDsKK+WvguWvniA+IGxvbmVseTsKK+a1t+ebnCA+IHBpcmF0ZTsKK+iDjOW+jCA+IGJlaGluZDsKK+eJmem9kiA+IGRlbnRhbDsKK+S9nOWutiA+IGF1dGhvcjsKK+WQjeiogCA+IHNheWluZzsKK+aZrumAmiA+IGNvbW1vbjsKK+iAgOecvCA+IGRhenpsZTsKK+S4u+e3qCA+IGVkaXRvcjsKK+a4r+W9jiA+IGhhcmJvcjsKK+iDjOW4tiA+IGJyYWNlczsKK+eKr+mMryA+IHRvXC1lcnI7CivogZbmrr8gPiB0ZW1wbGU7CivmmrTomZAgPiBicnV0YWw7Civms6LomK0gPiBwb2xhbmQ7Civpp4Hlm54gPiByZWplY3Q7CivmiJDlk6EgPiBtZW1iZXI7Civmg7PnnaEgPiBkcm93c3k7CivmmJ/pm7IgPiBuZWJ1bGE7Civororou58gPiBzb2Z0ZW47CivkuI3og70gPiBjYW5ub3Q7Civmtbfni7ggPiBiZWF2ZXI7Civkvp3lgY4gPiBuZXN0bGU7CivmhqTmhaggPiByZXNlbnQ7Civmh6blpKsgPiBjb3dhcmQ7CivkvJHmg5wgPiByZWNlc3M7Civok6zprIYgPiBmbHVmZnk7Civlj6/opqogPiBraW5kbHk7Civno4HpkLUgPiBtYWduZXQ7CivpoJjoopYgPiBsZWFkZXI7CivkuI3nvoggPiB1bnJ1bHk7CivmoKHlnJIgPiBjYW1wdXM7CivmiJDli6MgPiByZXN1bHQ7CivnpZ7ogZYgPiBkaXZpbmU7CivkuK3nrYkgPiBtZWRpdW07Civororos6ogPiBnb1wtYmFkOwor576K6IKJID4gbXV0dG9uOwor5raI5ruFID4gcGVyaXNoOwor5ZaJ5ZqoID4gdGhyb2F0Owor5oCn6LOqID4gbmF0dXJlOwor5ZCK6JGXID4gZGFuZ2xlOwor5p+x5a2QID4gcGlsbGFyOwor5riF5buJID4gaG9uZXN0Owor5Y2x6ZqqID4gZGFuZ2VyOwor5a6J5a6aID4gc3RhYmxlOwor5oaO5oOhID4gbG9hdGhlOwor5Y+j6KKLID4gcG9ja2V0Owor5oaO5oGoID4gZGV0ZXN0Owor5Zac5YqHID4gY29tZWR5Owor5a+S5YasID4gd2ludHJ5Owor6LK25palID4gZGVtb3RlOwor5aWu6aylID4gc3RyaXZlOwor5Zau5L2NID4gYVwtdW5pdDsKK+acieeUqCA+IHVzZWZ1bDsKK+eQg+aLjSA+IHJhY2tldDsKK+WPpeiZnyA+IHBlcmlvZDsKK+WPo+iZnyA+IHNsb2dhbjsKK+epqeWumiA+IHN0YWJsZTsKK+WWruS4gCA+IHNpbmdsZTsKK+WtkOW9iCA+IGJ1bGxldDsKK+WuieWfuSA+IGFtcGVyZTsKK+ehrOmgmCA+IGNvbGxhcjsKK+mhhueykiA+IGtlcm5lbDsKK+mjn+anvSA+IG1hbmdlcjsKK+WqkueVjCA+IG1lZGl1bTsKK+acrOa6kCA+IG9yaWdpbjsKK+WusOWJsiA+IGludmFkZTsKK+iDjOWPmyA+IGJldHJheTsKK+i0luWbniA+IHJlZGVlbTsKK+azoue0iyA+IHJpcHBsZTsKK+eql+WPoyA+IHdpbmRvdzsKK+eNqOeJuSA+IHVuaXF1ZTsKK+Wtl+WwviA+IHN1ZmZpeDsKK+elnuekviA+IHNocmluZTsKK+iVquiPgSA+IHR1cm5pcDsKK+ayueiEgiA+IGdyZWFzZTsKK+mdm+mdkiA+IGluZGlnbzsKK+meoOi6rCA+IHRvXC1ib3c7Civph5HoibIgPiBnb2xkZW47Civljbfou7ggPiBzY3JvbGw7CivlpKfpuqUgPiBiYXJsZXk7CivptZPptL8gPiBwaWdlb247CivlrqTlhacgPiBpbmRvb3I7CivkvZXku6UgPiB3aGVuY2U7Civlj5foi6YgPiBzdWZmZXI7CivkvLjlh7ogPiBleHRlbmQ7CivkuIDnnqUgPiBnbGFuY2U7CivkvK/li54gPiBzaHJpa2U7CivmtLvmvZEgPiBsaXZlbHk7CivmlqzpppYgPiBiZWhlYWQ7Civos5PlrqIgPiBndWVzdHM7CivljJXpppYgPiBkYWdnZXI7CivnkZ7lhbggPiBzd2VkZW47CivorJvpgZMgPiBwcmVhY2g7CivpvLvmga8gPiBicmVhdGg7CivorJnpgZwgPiBodW1ibGU7Civosqrlv4MgPiBncmVlZHk7CivotIrlkIwgPiBhc3NlbnQ7CivoloTntJkgPiB0aXNzdWU7CivmgrbnhrEgPiBzdWx0cnk7CivpoJLntaYgPiBjb25mZXI7Civorprnvo4gPiBhZG1pcmU7Civnj77lrZggPiBleHRhbnQ7CivppJDlt74gPiBuYXBraW47Civku6XlpKogPiBldGhlclwtOwor5oWL5bqmID4gbWFubmVyOwor5aW26YWqID4gY2hlZXNlOwor54u556qEID4gbmFycm93Owor55Gj5LqLID4gdHJpZmxlOwor6ICB5pivID4gYWx3YXlzOwor6JWD6IyEID4gdG9tYXRvOwor6LKh5bibID4gd2VhbHRoOwor6aCQ566XID4gYnVkZ2V0Owor6Z2S6YqFID4gYnJvbnplOwor5b+Y6KiYID4gZm9yZ2V0Owor6aCR56ulID4gdXJjaGluOwor5re35ZCIID4gdG9cLW1peDsKK+acg+atuyA+IG1vcnRhbDsKK+S4jeeEtiA+IG5vdFwtc287CivoroDogIUgPiByZWFkZXI7CivmtKrmsLQgPiBkZWx1Z2U7CivmhJ/mhaggPiBsYW1lbnQ7Civos63ljZogPiBnYW1ibGU7Civkuovmg4UgPiBhZmZhaXI7CivlrZjlj5YgPiBhY2Nlc3M7CivmnKjmlpkgPiBsdW1iZXI7CivosqHlr4wgPiB3ZWFsdGg7Civmt7HljJYgPiBkZWVwZW47Civmlrnph50gPiBwb2xpY3k7CivpoILnq68gPiBzdW1taXQ7CivlppboqIAgPiBoZXJlc3k7Civnj77lnKggPiBtb2Rlcm47CivororntIUgPiByZWRkZW47CivlkI3nlKIgPiBzdGFwbGU7CivmmIbon7IgPiBpbnNlY3Q7CivlvozpgoogPiBiZWhpbmQ7CivnjJbni4IgPiBzYXZhZ2U7CivlraTlhZIgPiBvcnBoYW47Civmt6jljJYgPiBwdXJpZnk7CivlvozpgIAgPiByZWNvaWw7CivniaHooKMgPiBveXN0ZXI7Civkurrlo6sgPiBwZXJzb247Civogbfli5kgPiBhXC1wb3N0Owor54mH6KqeID4gcGhyYXNlOwor5rCR6KygID4gYmFsbGFkOwor54yb54OIID4gZmllcmNlOwor5rWB5pifID4gbWV0ZW9yOwor5oKy5q2OID4gYmV3YWlsOwor5a2Y5YSyID4gbWVtb3J5Owor5Lul5YmNID4gYmVmb3JlOwor6LGh5b61ID4gZW1ibGVtOwor5LiN5q+bID4gYmFycmVuOwor5LiN5q+UID4gdW5saWtlOwor6LGh5b6BID4gc3ltYm9sOwor5q+X6YCjID4gYWRqb2luOwor5aSn6YyYID4gc2xlZGdlOwor5pyA5pawID4gbGF0ZXN0Owor5rK755CGID4gZ292ZXJuOwor5Li75pWZID4gYmlzaG9wOwor6KyZ6JmbID4gbW9kZXN0Owor54i26KaqID4gZmF0aGVyOwor6JmV5aWzID4gdmlyZ2luOwor6LOj5Li7ID4gc2VsbGVyOwor576K5q+bID4gZmxlZWNlOwor5pS+6ayGID4gbG9vc2VuOwor5ZCr5rC0ID4gd2F0ZXJ5Owor56eY5a+GID4gc2VjcmV0Owor6JmV5aKDID4gcGxpZ2h0Owor6K2w56iLID4gYWdlbmRhOwor54uh54y+ID4gY3JhZnR5Owor546L5bqnID4gdGhyb25lOwor5oOh5oSPID4gbWFsaWNlOwor5byE6auSID4gZGVmaWxlOwor5pys5beeID4gaG9uc2h1Owor5ayw5YWSID4gaW5mYW50Owor6Jaq5rC0ID4gc2FsYXJ5Owor54245oCnID4gYnJ1dGFsOwor5pW46YePID4gYW1vdW50Owor5pa36KiAID4gYWZmaXJtOwor5peF6KGMID4gdHJhdmVsOwor5rWq5a2QID4gbG9hZmVyOwor5pyJ5oSPID4gaW50ZW5kOwor56eL5a2jID4gYXV0dW1uOwor5ZCN5rWBID4gZ2VudHJ5Owor5Y+w54GjID4gdGFpd2FuOwor5LiN5pm6ID4gdW53aXNlOwor5aaC6I2JID4gZ3Jhc3N5Owor5pWF6ZqcID4gZ2xpdGNoOwor6aGY5pybID4gZGVzaXJlOwor5ZCI5rOVID4gbGF3ZnVsOwor5ZCN5rCjID4gcmVwdXRlOwor5aSn6LevID4gYXZlbnVlOwor5rW35aCxID4gcG9zdGVyOwor6Kme6aCtID4gcHJlZml4Owor5Lqm5Y2zID4gbmFtZWx5Owor5ZOA5ZiGID4gbGFtZW50Owor546L5a2QID4gcHJpbmNlOwor57ir6YedID4gbmVlZGxlOwor5q6v6LuKID4gaGVhcnNlOwor6Yar55SfID4gZG9jdG9yOwor56eL5aSpID4gYXV0dW1uOwor5Lq65YCRID4gcGVvcGxlOwor5pqW5rCjID4gaGVhdGVyOwor56e75YuVID4gbW9iaWxlOwor5ZC45pS2ID4gYWJzb3JiOwor5oSP5ZyWID4gaW50ZW50Owor5by36L+rID4gY29tcGVsOwor6aGr5oqWID4gcXVpdmVyOwor57ej6aO+ID4gZnJpbmdlOwor5Lit5b+DID4gY2VudGVyOwor5oKU5pS5ID4gcmVwZW50Owor5ZGo5bm0ID4gYW5udWFsOwor5Y+j5ri0ID4gdGhpcnN0Owor6Yed5rOVID4gc3RpdGNoOwor5raI5YyWID4gZGlnZXN0Owor5q2j6ZaAID4gcG9ydGFsOwor5rW35ZOhID4gc2FpbG9yOwor5LqM5Y2BID4gdHdlbnR5Owor5ZCQ5qC5ID4gaXBlY2FjOwor6ZuZ6YeNID4gZG91YmxlOwor6Z2S6IuUID4gbGljaGVuOwor5aSa6K6KID4gZmlja2xlOwor5rKZ5rygID4gZGVzZXJ0Owor6YmL5bqKID4gcGxhbmVyOwor5bu26ZW3ID4gZXh0ZW5kOwor5ZCN5pybID4gcmVub3duOwor5Y+W5raIID4gY2FuY2VsOwor5aao56SZID4gaGluZGVyOwor5Lqk5LqSID4gbXV0dWFsOwor6YKj6YKKID4geW9uZGVyOwor5q246YKEID4gcmV0dXJuOwor5YqI6ZaLID4gY2xlYXZlOwor6YWS56qpID4gZGltcGxlOwor5ZKW5ZWhID4gY29mZmVlOwor556s6ZaTID4gbW9tZW50Owor5YuV6K2wID4gbW90aW9uOwor6Zmw6ayxID4gZ2xvb215Owor5pS+6YCQID4gYmFuaXNoOwor6YWN56ixID4gd29ydGh5Owor5rS75aGeID4gcGlzdG9uOwor5pyq5Y+vID4gY2Fubm90Owor5aSW6KGMID4gbGF5bWFuOwor8KWcjCA+IGFcLWNvYXQ7CivmnY/ku4EgPiBhbG1vbmQ7Civnoo7nn7MgPiBncmF2ZWw7CivpoJDmnJ8gPiBleHBlY3Q7Civmm7Tlpb0gPiBiZXR0ZXI7CivmhJvkurogPiBzcG91c2U7CivpmobpmoYgPiBydW1ibGU7Civnp4nlhawgPiBqdXN0bHk7CivnprHlkYogPiBwcmF5ZXI7Civmm7TlpKcgPiBiaWdnZXI7CivmnJ3lkJEgPiB0b3dhcmQ7CivkuZ3ljYEgPiBuaW5ldHk7CivnoLToiIogPiBzaGFiYnk7CivkuIDluLYgPiByZWdpb247CivpoaflrqIgPiBjbGllbnQ7Civlj6LmnpcgPiBqdW5nbGU7CivnoqfnjokgPiBqYXNwZXI7CivwpaWFID4gYVwtaG9sZTsKK+WPquaYryA+IG1lcmVseTsKK+eMtOWtkCA+IG1vbmtleTsKK/Cipo8gPiB0b1wtY3V0Owor6Zqn6YGTID4gdHVubmVsOwor5oOh5YyWID4gd29yc2VuOwor5pyo5YG2ID4gcHVwcGV0Owor5pyD5ZOhID4gbWVtYmVyOwor5LiA5bGAID4gaW5uaW5nOwor5pyJ5ZCNID4gZmFtb3VzOwor5pyL5Y+LID4gZnJpZW5kOwor6I+M6aGeID4gZnVuZ3VzOwor5LiA5bCNID4gY291cGxlOwor56Gr56O6ID4gc3VsZnVyOwor5pyq5L6GID4gZnV0dXJlOwor5LiA5a6aID4gc3VyZWx5Owor6YGt6YGHID4gYmVmYWxsOwor5LmL5YmNID4gYmVmb3JlOwor57235belID4gc3RyaWtlOwor6YSJ57SzID4gc3F1aXJlOwor6Kmt6KiIID4gZGVjZWl0Owor6LGB5YWNID4gZXhlbXB0Owor5rWB5YipID4gZmx1ZW50Owor5oCn5qC8ID4gbmF0dXJlOwor5rS75YqbID4gZW5lcmd5Owor6K6K5pu0ID4gY2hhbmdlOwor5b+D55CGID4gbWVudGFsOwor6K6K5pqXID4gZGFya2VuOwor54mi54miID4gZmlybWx5Owor6aKo5L+XID4gY3VzdG9tOwor57ej6LW3ID4gb3JpZ2luOwor6KiY6YyEID4gcmVjb3JkOwor8KCAiSA+IGFcLWhpbGw7CivlibXovqYgPiBsYXVuY2g7CivmmpflvbEgPiBzaGFkb3c7Civpmorpg6ggPiBvZmZpY2U7Civorprmj5ogPiBwcmFpc2U7CivkuZ7kuJAgPiBiZWdnYXI7CivpgY7ph48gPiBleGNlc3M7CivnhpTop6MgPiBmdXNpb247Civpmpjot68gPiBkZWZpbGU7CivpgoDoq4sgPiBpbnZpdGU7CivlvqrnkrAgPiBjaXJjbGU7CivmmbrmhacgPiB3aXNkb207CivnjbXkurogPiBodW50ZXI7CivmgZDmgJYgPiB0ZXJyb3I7CivmlpHntIsgPiBzdHJpcGU7Civnn7Poi7EgPiBxdWFydHo7CivljIXnrqEgPiBhc3N1cmU7CivphbXmr40gPiBsZWF2ZW47Civop6PpmaQgPiByZW1vdmU7Civli5XohIggPiBhcnRlcnk7CivmnIDkvY4gPiBsb3dlc3Q7Civnpa3lj7ggPiBwcmllc3Q7CivnibnmraQgPiBoZXJlYnk7Civpm4zolYogPiBwaXN0aWw7CivlpKnnr7cgPiBjYW5vcHk7CivlubLpoJAgPiBtZWRkbGU7CivljJbnn7MgPiBmb3NzaWw7CivkuI3lj68gPiBjYW5ub3Q7CivmsLTms6UgPiBjZW1lbnQ7CivmsLTms6EgPiBidWJibGU7CivorabmlrkgPiBwb2xpY2U7CivniLjniLggPiBmYXRoZXI7Civok4vniL4gPiBnYWVsaWM7CivliY3ovKkgPiBzZW5pb3I7CivoqJjotbcgPiByZWNhbGw7CivkuInljYEgPiB0aGlydHk7CivnuYPnsKcgPiBzcHJpbmc7CivmkqTpmaQgPiByZW1vdmU7Civph6blrZAgPiBidXR0b247CivlvYjnsKcgPiBzcHJpbmc7Civlia/oqZ4gPiBhZHZlcmI7CivniZvmsrkgPiBidXR0ZXI7CivoqrLnqIsgPiBjb3Vyc2U7CivlubTplbcgPiBzZW5pb3I7CivmgKfmg4UgPiBuYXR1cmU7Civnt6jomZ8gPiBudW1iZXI7CivmsKPms6EgPiBidWJibGU7CivljbHmqZ8gPiBjcmlzaXM7CivkuI3lhawgPiB1bmp1c3Q7CivlupXpg6ggPiBib3R0b207CivkuI3lhYsgPiBjYW5ub3Q7Civms5XlnIsgPiBmcmFuY2U7CivmsonmgJ0gPiBwb25kZXI7CivmmpfloKEgPiBidW5rZXI7Civni5flsYsgPiBrZW5uZWw7CivmmrTlkJsgPiB0eXJhbnQ7Civlh7npmbcgPiBob2xsb3c7CivkuInlgI0gPiB0cmlwbGU7CivlpKfnnL4gPiBwZW9wbGU7CivpnJznmb0gPiBmcm9zdHk7CivlkKbliYcgPiBpZlwtbm90Owor5YiG6ZCYID4gbWludXRlOwor6aCY5Z+fID4gZG9tYWluOwor6JGs56auID4gYnVyaWFsOwor5rC05qG2ID4gYnVja2V0Owor5pKk6Yq3ID4gcmVwZWFsOwor5ZCI5ZSxID4gY2hvcnVzOwor6Yar5birID4gZG9jdG9yOwor5Y+N5bCEID4gcmVmbGV4Owor5LiN5Li5ID4gYmh1dGFuOwor5pWs56auID4gc2FsdXRlOwor6Z2e5rSyID4gYWZyaWNhOwor6YCa6LevID4gYWNjZXNzOwor576O5Lq6ID4gYmVhdXR5Owor6KyA5q66ID4gbXVyZGVyOwor57235YWNID4gcmVjYWxsOwor6KiA6KqeID4gc3BlZWNoOwor5Ymd6J2VID4gZGVudWRlOwor6YCA6YKEID4gcmV0dXJuOwor5pW455uuID4gYW1vdW50Owor5Y+s5ZueID4gcmVjYWxsOwor56C054ibID4gcmFnZ2VkOwor5LiA5LiyID4gc3RyYW5kOwor57qW5q+bID4gY2lsaXVtOwor5oCn5a2QID4gdGVtcGVyOwor6L+96YCQID4gY2hhc2U7CivpgJXos70gPiB0cmFjazsKK+mdnOatoiA+IHN0aWxsOwor5be06buOID4gcGFyaXM7CivlubTovJUgPiB5b3VuZzsKK+i/tOmBvyA+IGF2b2lkOwor6JK45rG9ID4gc3RlYW07CivmrIrooaEgPiB3ZWlnaDsKK+mBiuiVqSA+IHN0cmF5Owor5byE57OfID4gc3BvaWw7CivmganlhbggPiBncmFjZTsKK+Wkp+eIuiA+IHVuY2xlOwor5pel5pysID4gamFwYW47Civlj6/lj68gPiBjb2NvYTsKK+WPr+WPoyA+IHRhc3R5Owor5bu257epID4gZGVmZXI7Civnt6jnuZQgPiB3ZWF2ZTsKK+WNl+aWuSA+IHNvdXRoOwor572u5LqOID4gcGxhY2U7Civlp6rlpbMgPiBuaWVjZTsKK+mZt+iQvSA+IHNsdW1wOwor54mb5o6SID4gc3RlYWs7CivpmrHntIQgPiB2YWd1ZTsKK+mvqOmtmiA+IHdoYWxlOwor5ZCI5L21ID4gYW5uZXg7Civorbflo6sgPiBudXJzZTsKK+aziuS9jSA+IGJlcnRoOwor6YGK6ImHID4gYmFyZ2U7Civpl5zplokgPiBjbG9zZTsKK+mZsOiOliA+IHBlbmlzOwor5pm65YipID4gY2hpbGU7Civnt5rntKIgPiB0cmFpbDsKK+Wjk+eijiA+IGNydXNoOwor5Y6f5aeLID4gZmlyc3Q7Civmr4/mr48gPiBvZnRlbjsKK+WPjeWPmyA+IHJlYmVsOwor6Z+T5ZyLID4ga29yZWE7Civpm5nnlJ8gPiB0d2luczsKK+ebuOmFjSA+IG1hdGNoOwor5Y2w5bqmID4gaW5kaWE7Civnn7Pni4AgPiBzdG9ueTsKK+i/hemAnyA+IHJhcGlkOwor5bm86J+yID4gbGFydmE7Civpr4rprZogPiBzaGFyazsKK+WIpeiZnyA+IGFsaWFzOwor57ag6ImyID4gZ3JlZW47CivlvJXnlKggPiBxdW90ZTsKK+ebuOi/kSA+IGNsb3NlOwor5biC6ZW3ID4gbWF5b3I7CivniJDmnrYgPiBncmF0ZTsKK+apn+mXnCA+IG9yZ2FuOwor5qyK6IO9ID4gcG93ZXI7Civljp/lm6AgPiBjYXVzZTsKK+aApeWKhyA+IHJhcGlkOwor5aSn5qyKID4gcG93ZXI7CivptInniYcgPiBvcGl1bTsKK+iok+e3tCA+IGRyaWxsOwor5YyX5pa5ID4gbm9ydGg7Civoq5bmlocgPiBwYXBlcjsKK+aUvueJpyA+IGdyYXplOwor5Yqf546HID4gcG93ZXI7Civmr4/ml6UgPiBkYWlseTsKK+Wll+aIvyA+IHN1aXRlOwor6YGV56SZID4gdGFib287CivlhKrpu54gPiBtZXJpdDsKK+W+mOW+iiA+IGhvdmVyOwor6KaW6Ka6ID4gc2lnaHQ7Civmk43nt7QgPiBkcmlsbDsKK+W8t+asiiA+IHBvd2VyOwor5YiA6JGJID4gYmxhZGU7Civmkanopb8gPiBtb3NlczsKK+itpuWCmSA+IGd1YXJkOwor6Kqy5pmCID4gY2xhc3M7CivlvZfmmJ8gPiBjb21ldDsKK+aQrOmBiyA+IGNhcnJ5Owor6Z2S5bm0ID4geW91dGg7CivmqJnpoYwgPiB0aXRsZTsKK+aPkOmrmCA+IHJhaXNlOwor5rCo5Z+6ID4gYW1pbm87CivlpJzmmZogPiBuaWdodDsKK+eGseawoyA+IHN0ZWFtOwor5qmf6Lu4ID4gYXJib3I7CivphpLkvoYgPiB3YWtlbjsKK+Wls+WtkCA+IHdvbWFuOwor6ZaA6ZaCID4gbGF0Y2g7CivlvoDlvoAgPiBvZnRlbjsKK+iTi+WtkCA+IGNvdmVyOwor6Z2I5benID4gaGFuZHk7CivlhYPpn7MgPiB2b3dlbDsKK+WFi+mahiA+IGNsb25lOwor5pW05pW0ID4gd2hvbGU7CivljK/lr4QgPiByZW1pdDsKK+WJgeeijiA+IG1pbmNlOwor6Kq/5oOFID4gZmxpcnQ7CivlnLDpu54gPiBwbGFjZTsKK+aVsuaTiiA+IHBvdW5kOwor5YyG5b+ZID4gaGFzdHk7Civmr5vlt74gPiB0b3dlbDsKK+iKs+mmmSA+IGJhbG15Owor5bm057SaID4gZ3JhZGU7CivlvI/mqKMgPiBzdHlsZTsKK+ilr+ihqyA+IHNoaXJ0Owor6KWv6KGjID4gc2hpcnQ7CivljbDliLcgPiBwcmludDsKK+aVo+aWhyA+IHByb3NlOwor6Kmm5qijID4gc3R5bGU7Civlhajpg6ggPiB3aG9sZTsKK+efreaaqyA+IHNob3J0Owor6KW/6JePID4gdGliZXQ7Civli5XmkJYgPiB3YXZlcjsKK+eHg+aUviA+IGxpZ2h0Owor54Gr6LuKID4gdHJhaW47Civlt6Xos4cgPiB3YWdlczsKK+WLh+aVoiA+IGJyYXZlOwor5q275p2/ID4gcmlnaWQ7Civnn5vmn4QgPiBzaGFmdDsKK+mVt+mHmCA+IHNwaWtlOwor5q2l5qeNID4gcmlmbGU7CivliLvnl5UgPiBub3RjaDsKK+WEqumbhSA+IGdyYWNlOwor6YG45rCRID4gdm90ZXI7CivprZTprLwgPiBkZXZpbDsKK+aWsOWomCA+IGJyaWRlOwor5aS+5a2QID4gY3JhbXA7CivorKDlgrMgPiBydW1vcjsKK+aWsOWlhyA+IG5vdmVsOwor5aCx562UID4gcmVwYXk7CivnhaTmuKMgPiBzbGFjazsKK+mCiuahhiA+IGZyYW1lOwor6Iqx6ZaLID4gYmxvb207CivniankuLsgPiBvd25lcjsKK+W9iOW8kyA+IHNsaW5nOwor5aCx56qpID4gYnJvb2Q7Civmk7rmuKEgPiBmZXJyeTsKK+mbu+W9sSA+IG1vdmllOwor5pG457SiID4gZ3JvcGU7CivprLzprYIgPiBnaG9zdDsKK+mAn+eOhyA+IHNwZWVkOwor56C05aOeID4gd3JlY2s7CivntITojqsgPiBhYm91dDsKK+WjgeaetiA+IGxlZGdlOwor6ZqO5q61ID4gc3RhZ2U7CivlpKLlr5AgPiBkcmVhbTsKK+W7tuacnyA+IGRlbGF5Owor5Y2B5YiGID4gZnVsbHk7Civli57lt6UgPiBsYWJvcjsKK+WcmOmrlCA+IGdyb3VwOwor5Zyw6Z2iID4gZmxvb3I7Civoq7fliLogPiBpcm9ueTsKK+eZveiyuyA+IHdhc3RlOwor6YGL5rKzID4gY2FuYWw7Civlhavop5IgPiBhbmlzZTsKK+mZsOa2vCA+IHNoYWR5Owor5pOm5rSXID4gc2NvdXI7CivnhrHlv7EgPiBhcmRvcjsKK+mYv+eJhyA+IG9waXVtOwor54SZ54eSID4gcm9hc3Q7CivlpbPkurogPiB3b21hbjsKK+e2oOa0siA+IG9hc2lzOwor6Ki85piOID4gcHJvdmU7Civnm7jnrYkgPiBlcXVhbDsKK+WEn+mChCA+IHJlcGF5Owor5q+S5ZOBID4gZHJ1Z3M7Civlm7rpq5QgPiBzb2xpZDsKK+imj+eoiyA+IHJ1bGVzOwor55u056uLID4gZXJlY3Q7Civlg6fpmaIgPiBhYmJleTsKK+iovOaTmiA+IHByb29mOwor5o6o6YG4ID4gZWxlY3Q7Civmr5vliLcgPiBicnVzaDsKK+msjemsmiA+IGJlYXJkOwor5o6o6YCyID4gaW1wZWw7Civpl5znr4AgPiBqb2ludDsKK+WDuemMoiA+IHByaWNlOwor5YiH54mHID4gc2xpY2U7CivoiabpmoogPiBmbGVldDsKK+W8t+WkpyA+IGxhcmdlOwor55yf55CGID4gdHJ1dGg7Civmr5TliIYgPiBzY29yZTsKK+aTseadvyA+IHNoZWxmOwor5Ymb5p6cID4gY29uZ287CivliarmlrcgPiBzaGVhcjsKK+eBq+iKsSA+IHNwYXJrOwor5b2x5YOPID4gaW1hZ2U7Civnm5znq4ogPiBzdGVhbDsKK+aomeiZnyA+IGdyYWRlOwor6L+35r+bID4gbWlzdHk7CivnnaHmpIUgPiBjb3VjaDsKK+WKoOWvrCA+IHdpZGVuOwor6ZyH5YuVID4gc2hha2U7Civoqqrlh7ogPiB1dHRlcjsKK+ioiOaVuCA+IGNvdW50Owor5r6z6ZaAID4gYW9tZW47Civmjqjoq5YgPiBpbmZlcjsKK+ezoueziiA+IGZvZ2d5Owor5q+P5LiAID4gZXZlcnk7Civli6LlipsgPiBwb3dlcjsKK+e3nuW4gyA+IHNhdGluOwor5YuV5ZCRID4gdHJlbmQ7CivlpKnkvb8gPiBhbmdlbDsKK+ikkOiJsiA+IGJyb3duOwor6ayG6ZaLID4gbG9vc2U7Civmq7jmnKggPiBiZWVjaDsKK+mDqOS7tiA+IHBhcnRzOwor54OY54OkID4gcm9hc3Q7Civou4zpgZMgPiBvcmJpdDsKK+mWg+iAgCA+IGdsaW50Owor6Iet6bysID4gc2t1bms7CivlhLLol48gPiBzdG9yZTsKK+aTpuaLrSA+IGNsZWFuOwor55a+6aKoID4gYmxhc3Q7CivmlKTlrZAgPiBib290aDsKK+Wkp+S6uiA+IGFkdWx0Owor5Yqf5aSrID4gc2tpbGw7Civli5XlipsgPiBwb3dlcjsKK+ebuOeJhyA+IGltYWdlOwor6auS6auSID4gZGlydHk7Civnh5nlgrcgPiBzY2FsZDsKK+Wdh+ihoSA+IGVxdWFsOwor5Ye65rKSID4gaGF1bnQ7CivpgZPlvrcgPiBtb3JhbDsKK+inuOaRuCA+IHRvdWNoOwor55m86IGyID4gdm9jYWw7CivplbfogIEgPiBlbGRlcjsKK+aoueexrCA+IGhlZGdlOwor5YW456+EID4gbW9kZWw7Civpm4blnJggPiBncm91cDsKK+aVtOWAiyA+IHdob2xlOwor5bid546LID4gcmVnYWw7CivlvLflhYkgPiBnbGFyZTsKK+eblOeUsiA+IGFybW9yOwor6LuM6LehID4gbG9jdXM7Civou4zot50gPiBnYXVnZTsKK+ijnOiXpSA+IHRvbmljOwor5q245ZKOID4gYmxhbWU7CivmlbXkurogPiBlbmVteTsKK+W5veaalyA+IGdsb29tOwor5pOU5oeuID4gd29ycnk7Civmpq7orb0gPiBob25vcjsKK+mtlOihkyA+IG1hZ2ljOwor54Wn5bCEID4gc2hpbmU7CivmkJfnoo4gPiBzbWFzaDsKK+aquOaqrCA+IGxlbW9uOwor6ZaL56uvID4gc3RhcnQ7CivmqKHns4ogPiB2YWd1ZTsKK+mbnuWGoCA+IGNyZXN0Owor5YWJ57qWID4gbGlnaHQ7Civpm5XliLsgPiBjYXJ2ZTsKK+mqr+mrkiA+IGRpcnR5Owor5YiH5pybID4gY3JhdmU7CivoqZvlkpIgPiBjdXJzZTsKK+aomeexpCA+IGxhYmVsOwor54S25b6MID4gYWZ0ZXI7CivpgqPlhZIgPiB0aGVyZTsKK+mVt+esmyA+IGZsdXRlOwor57K+56WeID4gdmlnb3I7CivlnJbooaggPiBjaGFydDsKK+i9ieenuyA+IHNoaWZ0Owor5YWS56ulID4gY2hpbGQ7CivlnI3oo5kgPiBhcHJvbjsKK+aOqOiIiSA+IGVsZWN0Owor5YGc6aCTID4gcGF1c2U7Civnspfns5kgPiBjcnVkZTsKK+WJquWgsSA+IHNjcmFwOwor6auu6L6uID4gYnJhaWQ7CivmrbvkuqEgPiBkZWF0aDsKK+imj+aooSA+IHNjYWxlOwor6YCf5bqmID4gc3BlZWQ7CivpgqPkupsgPiB0aG9zZTsKK+euremgrSA+IGFycm93Owor6ZuE5YGJID4gZ3JhbmQ7Civovqbms5UgPiBtZWFuczsKK+eCuuatoiA+IHVudGlsOwor5Zq06YeNID4gZ3JhdmU7CivoiLnosqggPiBjYXJnbzsKK+mVt+efmyA+IGxhbmNlOwor5q2M5YqHID4gb3BlcmE7Civpq5jpgaAgPiBsb2Z0eTsKK+WHoeaYryA+IGV2ZXJ5Owor54OP5pyoID4gZWJvbnk7CivoiJ7ouYggPiBkYW5jZTsKK+eyieethiA+IGNoYWxrOwor57WV5oqAID4gc3R1bnQ7Civoh4npoLAgPiBjaGVlazsKK+eZveeZoSA+IGlkaW90Owor5o6I6IiHID4gZ3JhbnQ7Civop5LluqYgPiBhbmdsZTsKK+eZvOeXhSA+IG9uc2V0Owor5Z+65pysID4gYmFzaWM7CivngavnhLAgPiBibGF6ZTsKK+WIpOWumiA+IGp1ZGdlOwor5o6i57SiID4gcXVlc3Q7Civoo4LnuKsgPiBjcmFjazsKK+eBq+eCrCA+IHRvcmNoOwor5aGr5aGeID4gc3R1ZmY7CivmkrDlr6sgPiB3cml0ZTsKK+ezlua8vyA+IHN5cnVwOwor57KJ56KOID4gY3Jhc2g7Civpmb3lj7AgPiBwb3JjaDsKK+aTuuWLlSA+IHN3aW5nOwor5oq86Z+7ID4gcmh5bWU7Civlnovni4AgPiBzaGFwZTsKK+iIiei1tyA+IGhlYXZlOwor5Ymy5YK3ID4gc2xhc2g7CivpgJnlpKkgPiB0b2RheTsKK+exrOeshiA+IGZlbmNlOwor5qau6ICAID4gaG9ub3I7CivpgY/liLYgPiBjaGVjazsKK+eZvOeLgiA+IGNyYXp5Owor5Yil5aKFID4gdmlsbGE7CivlsrjpgoogPiBzaG9yZTsKK+WwvOm+jSA+IG55bG9uOwor6ZqK5LyNID4gcmFua3M7CivliIDlrZAgPiBrbmlmZTsKK+W5heW6piA+IHdpZHRoOwor5qmh5pyoID4gb2FrZW47Civnsr7mtrIgPiBzZW1lbjsKK+W6iuWWriA+IHNoZWV0Owor6Iqx55OjID4gcGV0YWw7CivliYPliIAgPiByYXpvcjsKK+WHs+WtkCA+IHN0b29sOwor6Ia96YePID4gbmVydmU7CivpgKDlj40gPiByZWJlbDsKK+iok+S7pCA+IG9yZGVyOwor5YaN5pyDID4gYWRpZXU7CivmqrPlrZAgPiBiaW56aTsKK+i4tOi6jSA+IGVhZ2VyOwor5YWp5qyhID4gdHdpY2U7Civkv67po74gPiBhZG9ybjsKK+aPo+a4rCA+IGd1ZXNzOwor57Si5byVID4gaW5kZXg7Civlg7XnoawgPiBzdGFyazsKK+WCs+iBniA+IHJ1bW9yOwor6Ieq6KqHID4gYm9hc3Q7CivmkZjlvJUgPiBxdW90ZTsKK+W3peacgyA+IHVuaW9uOwor57OW5p6cID4gY2FuZHk7Civoo4Lnl5UgPiBjaGFzbTsKK+eBq+aftCA+IG1hdGNoOwor57Sw5bCPID4gcGV0dHk7CivmrITkvY0gPiBmZW5jZTsKK+mphemZpCA+IHJlcGVsOwor5qi55p6XID4gd29vZHM7CivlsI/puqUgPiB3aGVhdDsKK+a9m+ihjCA+IHNuZWFrOwor5Z6C5q27ID4gZHlpbmc7CivmqLrmnKggPiBiaXJjaDsKK+mAkOWHuiA+IGV4cGVsOwor5beo5pOYID4gdGh1bWI7CivntJfluIMgPiBnYXV6ZTsKK+W5s+WOnyA+IGZpZWxkOwor5YWs5pyDID4gZ3VpbGQ7CivnlLDph44gPiBmaWVsZDsKK+a/q+eUqCA+IGFidXNlOwor6ZW35qSFID4gYmVuY2g7Civpq5joiIggPiBoYXBweTsKK+aQk+aPiSA+IGtuZWFkOwor6ZW35qKdID4gc3RyaXA7CivpgJnkupsgPiB0aGVzZTsKK+W6h+S9kSA+IGJsZXNzOwor5YGH6KOdID4gZmVpZ247Civovq7lrZAgPiBwbGFpdDsKK+mZjeS4iyA+IGxvd2VyOwor5qiT5qKvID4gc3RhaXI7Civpq5jogbMgPiBlcmVjdDsKK+mrmOiBsiA+IGFsb3VkOwor5bCK6a2aID4gdHJvdXQ7CivooYDogokgPiBmbGVzaDsKK+ebm+WutCA+IGZlYXN0Owor5Zue562UID4gcmVwbHk7CivnsKHnn60gPiBicmllZjsKK+WbpOepjSA+IGhvYXJkOwor6ae/6aasID4gc3RlZWQ7Civmpq7njbIgPiBwcml6ZTsKK+ilquWtkCA+IHNvY2tzOwor6J2Z6a2aID4gYnJlYW07CivloLHlhJ8gPiByZXBheTsKK+WCs+elniA+IHZpdmlkOwor6Imy54u8ID4gc2F0eXI7CivmjqLmuKwgPiBwcm9iZTsKK+i9ieaSrSA+IHJlbGF5Owor5om56YePID4gYmF0Y2g7Civpp7Hpp50gPiBjYW1lbDsKK+WclueJhyA+IGltYWdlOwor5Yag5a2QID4gY3Jlc3Q7CivohbDpg6ggPiB3YWlzdDsKK+earuW4tiA+IHN0cmFwOwor57KX5pq0ID4gcm91Z2g7CivmkpLkvYYgPiBzYXRhbjsKK+Wwj+mbniA+IGNoaWNrOwor5Yaw5aGUID4gc2VyYWM7CivnrKjph40gPiBoZWF2eTsKK+i8leafkyA+IHRpbmdlOwor5YWn5b+DID4gaGVhcnQ7CivohbPouJ0gPiBhbmtsZTsKK+aOkuawtCA+IGRyYWluOwor5oub6Ie0ID4gaW5jdXI7CivmoJfpvKAgPiBidW5ueTsKK+aJkumHmCA+IGNyYW1wOwor55u05YiwID4gdW50aWw7Civlt6vlqYYgPiB3aXRjaDsKK+aPtOW8lSA+IHF1b3RlOwor562U6KmeID4gcmVwbHk7CivlsJbpirMgPiBzaGFycDsKK+mWgOW7iiA+IHN0b29wOwor5YG356uKID4gc3RlYWw7Civmp5Pmob8gPiBsZXZlcjsKK+WFtuWugyA+IG90aGVyOwor562U6KaGID4gcmVwbHk7Civng5jkub4gPiBwYXJjaDsKK+WFrOWwuiA+IG1ldGVyOwor5Zmq6IGyID4gbm9pc2U7Civnm47lj7ggPiBvdW5jZTsKK+mojui7iiA+IGN5Y2xlOwor5YO55qC8ID4gcHJpY2U7Civnsr7lrZAgPiBzcGVybTsKK+WcsOadvyA+IGZsb29yOwor5YeM5LqCID4gY2hhb3M7Civkv5roqp4gPiBzbGFuZzsKK+e0heWIqSA+IGJvbnVzOwor6ZaL5aeLID4gYmVnaW47CivmjqHmkZggPiBwbHVjazsKK+Wfg+WPiiA+IGVneXB0Owor5a+C6Z2cID4gcXVpZXQ7CivnrKboqJggPiB0b2tlbjsKK+WWqumQmCA+IGtuZWxsOwor6IS56LW3ID4gYnVsZ2U7Civog4zpqqggPiBzcGluZTsKK+W3puWPsyA+IGFib3V0Owor5YWs5Zm4ID4gdG9ubmU7Civmjozmj6EgPiBncmFzcDsKK+eUn+iLlCA+IG1vc3N5Owor5pCW5YuVID4gc2hha2U7CivovKrlrZAgPiB3aGVlbDsKK+momeihkyA+IHRyaWNrOwor5omT6KO9ID4gZm9yZ2U7CivlsI/oqqogPiBub3ZlbDsKK+iFkOidlSA+IHJ1c3R5Owor6ZaJ5ZCIID4gY2xvc2U7Civpp5Xou4ogPiBkcml2ZTsKK+a7keiQvSA+IHNsaWRlOwor5YWt5Y2BID4gc2l4dHk7CivlhazljYcgPiBsaXRlcjsKK+S8vOmbqiA+IHNub3d5Owor6IO46YOoID4gY2hlc3Q7Civnl4Xmr5IgPiB2aXJ1czsKK+aKgOiDvSA+IHNraWxsOwor5o6o5bSHID4gdmFsdWU7CivlsI/ooosgPiBwb3VjaDsKK+eBq+WFkiA+IGFuZ3J5Owor6KGX5q61ID4gYmxvY2s7Civot6/nt5ogPiByb3V0ZTsKK+W3qOS6uiA+IGdpYW50Owor6KOZ5a2QID4gc2tpcnQ7CivmipPnt4ogPiBncmFzcDsKK+ihgOa2siA+IGJsb29kOwor5a6J6Z2cID4gcXVpZXQ7CivmiYvol50gPiBjcmFmdDsKK+mmrOmBlCA+IG1vdG9yOwor6ZaD5YWJID4gZmxhc2g7Civlhbbku5YgPiBvdGhlcjsKK+Wbm+aciCA+IGFwcmlsOwor5YW25LitID4gYW1vbmc7CivmpZPmqLkgPiBtYXBsZTsKK+eriuiziiA+IHRoaWVmOwor5ruR57+UID4gZ2xpZGU7CivmjoPluJogPiBicm9vbTsKK+ihsOaVlyA+IGRlY2F5Owor6Iub5Yi7ID4gaGFyc2g7CivpkLXnoKcgPiBhbnZpbDsKK+aNleaNiSA+IGNhdGNoOwor56m66ZaTID4gc3BhY2U7CivnmbzlhYkgPiBzaGluZTsKK+aOoOWlqiA+IGhhcnJ5Owor5a+f6Ka6ID4gYXdhcmU7CivlsYvnsLcgPiBlYXZlczsKK+agvOiogCA+IG1heGltOwor55Oj6IacID4gdmFsdmU7CivmjqHloLQgPiBzbG9wZTsKK+iInuacgyA+IGRhbmNlOwor5ZyN5be+ID4gc2NhcmY7Civlr5PoqIAgPiBmYWJsZTsKK+aJi+iFlSA+IHNraWxsOwor6KKr5a2QID4gcXVpbHQ7CivlsI/oiIwgPiB1dnVsYTsKK+Wwsee3kiA+IHJlYWR5Owor6LuA5bm5ID4gdHJ1bms7Civou4DlubIgPiB0cnVuazsKK+eZvOS6riA+IHNoaW5lOwor5omL6IKYID4gZWxib3c7Civoo5zlk4EgPiB0b25pYzsKK+Wuoui7iiA+IGNvYWNoOwor6Im+5aesID4gYWdnaWU7CivlnKjlpJYgPiBvdXRlcjsKK+W0h+aLnCA+IGFkb3JlOwor5YWF5Lu9ID4gYW1wbGU7Civpq5jmmI4gPiBzbWFydDsKK+a8sua7vyA+IHN3ZWxsOwor55eb5oGoID4gYWJob3I7CivogbLpn7MgPiB2b2ljZTsKK+eXm+W/qyA+IGpvbGx5Owor5o6l5ZCIID4gam9pbnQ7CivlnJ/loIYgPiBtb3VuZDsKK+aIsuiAjSA+IHRlYXNlOwor56iu6aGeID4gY2xhc3M7CivnlLfniLUgPiBiYXJvbjsKK+WbuuWumiA+IGZpeGVkOwor5bCW57SwID4gdGFwZXI7CivlnYfliIYgPiBzcGxpdDsKK+iKseS/jyA+IGZhbmN5Owor6LWr6IyyID4gaGVydHo7Civnrq3mob8gPiBzaGFmdDsKK+WcjeWfjiA+IHNpZWdlOwor5YKy5bK4ID4gcHJvdWQ7Civoh7TmlawgPiBncmVldDsKK+i7jeWcmCA+IGNvcnBzOwor6ayN5a2QID4gYmVhcmQ7CivmjpLliJcgPiBhcnJheTsKK+S/j+eariA+IHNhdWN5Owor6Iie5byKID4gZnJhdWQ7CivppIXppIwgPiBjYWtlczsKK+ijnOS4gSA+IHBhdGNoOwor6aeB6Ii5ID4gYmFyZ2U7CivonILonJwgPiBob25leTsKK+a8v+aenCA+IGJlcnJ5Owor6a2F5YqbID4gY2hhcm07Civog7johpsgPiBjaGVzdDsKK+a8gua4uCA+IGRyaWZ0Owor5YO55YC8ID4gdmFsdWU7CivmvZHmjokgPiBzcGlsbDsKK+iIiOW7uiA+IGJ1aWxkOwor6LOH6YeRID4gZnVuZHM7Civmu7Lmup0gPiBzZXdlcjsKK+iDreiEgiA+IHJvdWdlOwor6Ieq5oiRID4gc2VsZlwtOwor6Yyv6KqkID4gZXJyb3I7CivmnpzphZIgPiBjaWRlcjsKK+aNt+WFiyA+IGN6ZWNoOwor55So5rOVID4gdXNhZ2U7Civnr6nlrZAgPiBzaWV2ZTsKK+WcluWDjyA+IGltYWdlOwor5a2Y6LKoID4gc3RvY2s7Civpq5jlsJogPiBub2JseTsKK+WcqOS4iyA+IHVuZGVyOwor5ouN5pOKID4gc21hY2s7Civlmq7lsI4gPiBndWlkZTsKK+WCvuWQkSA+IHRyZW5kOwor55Sf5rCjID4gYW5ncnk7CivlgY/mhJsgPiBmYXZvcjsKK+Wus+e+niA+IGJsdXNoOwor6J2454mbID4gc25haWw7CivllYbomZ8gPiBzdG9yZTsKK+mMouiiiyA+IHB1cnNlOwor5r+A5YWJID4gbGFzZXI7Civlronoj68gPiBhbndhcjsKK+WzreWjgSA+IGNsaWZmOwor5o2Q5YqpID4gb2ZmZXI7Civmi4fmjIcgPiB0aHVtYjsKK+aLguaOgyA+IHdoaXNrOwor6Ii55Y+qID4gc2hpcHM7Civoh7rlrZAgPiB0YWJsZTsKK+acnemuriA+IGtvcmVhOwor5Zub5Y2BID4gZm9ydHk7Civmir3miZMgPiBzdHJhcDsKK+aDoemtlCA+IGRlbW9uOwor5pys6aCYID4gc2tpbGw7Civmo7Lmga8gPiBwZXJjaDsKK+a1gemrlCA+IGZsdWlkOwor5L6d54S2ID4gc3RpbGw7Civogp3oh58gPiBsaXZlcjsKK+evhOWcjSA+IHJhbmdlOwor5Zau542oID4gYWxvbmU7Civkv67mlLkgPiBhbWVuZDsKK+akheWtkCA+IGNoYWlyOwor5pyJ6aKoID4gd2luZHk7Civmiormj6EgPiBncmFzcDsKK+Wwj+aysyA+IGJyb29rOwor5qWt5Li7ID4gb3duZXI7CivpqZrmhYwgPiBwYW5pYzsKK+WBieWkpyA+IGdyZWF0Owor5Li76aGMID4gdGhlbWU7Civlk6roo6EgPiB3aGVyZTsKK+etlOaHiSA+IHJlcGx5Owor5LiA6bueID4gYVwtYml0Owor5a2457SaID4gY2xhc3M7CivnlbblnLAgPiBsb2NhbDsKK+eou+iNiSA+IHN0cmF3Owor5p2x6KW/ID4gdGhpbmc7CivlgInluqsgPiBkZXBvdDsKK+S8iue0oiA+IGFlc29wOwor5bGx5bSWID4gY2xpZmY7CivnrJHmnpcgPiBodW1vcjsKK+WYtOW3tCA+IG1vdXRoOwor6ZCz5bCEID4gbGFzZXI7Civmo5rlrZAgPiBzaGFjazsKK+WQtemspyA+IG5vaXN5Owor55S35a2QID4gYVwtbWFuOwor6IKh56WoID4gc2hhcmU7Civmo5LlrZAgPiBzdGljazsKK+aMh+S7pCA+IG9yZGVyOwor6IKl56KpID4gc3RvdXQ7Civpu4PpioUgPiBicmFzczsKK+ajjeWtkCA+IHN0aWNrOwor6Ie05L2/ID4gY2F1c2U7CivmioDlt6cgPiBza2lsbDsKK+enmOiooyA+IHRyaWNrOwor5ou05L2PID4gaGl0Y2g7CivkuIvpnaIgPiBiZWxvdzsKK+igouS6iyA+IGZvbGx5Owor5oSa6KCiID4gc2lsbHk7CivmiorlroggPiBndWFyZDsKK+S4i+mbqCA+IHJhaW55Owor6ama5aWHID4gYW1hemU7Civoh6XkvY0gPiBiZXJ0aDsKK+WZtOWHuiA+IHNwb3V0Owor6aKo6LajID4gaHVtb3I7CivlsLrluqYgPiBzY2FsZTsKK+WwhOaTiiA+IHNob290Owor6LOE57WhID4gYnJpYmU7CivlsYvlrZAgPiBob3VzZTsKK+iyrOe9tSA+IHNjb2xkOwor6IWx5a2QID4gc2luZXc7Civmm7TpgbIgPiBsYXRlcjsKK+m7keiygiA+IHNhYmxlOwor55W25LitID4gYW1vbmc7CivllqzmnKggPiBhcmJvcjsKK+iAgeiZjiA+IHRpZ2VyOwor5rKZ6b6NID4gc2Fsb247Civkv53lp4YgPiBuYW5ueTsKK+Wwj+W+kSA+IGFsbGV5Owor6aiZ5bGAID4gZnJhdWQ7CivlsI3lvoUgPiB0cmVhdDsKK+aLieS4gSA+IGxhdGluOwor55Cl54+AID4gYW1iZXI7CivmnIPoq4cgPiB0YWxrczsKK+iEiOaQjyA+IHB1bHNlOwor55Si5ZOBID4gZ29vZHM7CivlsIvluLggPiB1c3VhbDsKK+acjeijnSA+IGRyZXNzOwor6YeR6auuID4gYmxvbmQ7CivmiLLlvIQgPiBjYXBlcjsKK+a1quiKsSA+IHNwcmF5Owor5bCP5bGLID4gY2FiaW47CivmuIXmvZQgPiBjbGVhbjsKK+aIv+WxiyA+IGhvdXNlOwor5ZiO5ZiOID4gcXVhY2s7CivnlJ/li5UgPiB2aXZpZDsKK+S4i+i3qiA+IGtuZWVsOwor5bCP5a2pID4gY2hpbGQ7CivmuIXmua8gPiBicm90aDsKK+S+v+WjqyA+IHBlbm55Owor5oi/5a2QID4gaG91c2U7CivogLbnqYwgPiBqZXN1czsKK+mLvOeQtCA+IHBpYW5vOwor6aiO5aOrID4gcmlkZXI7Civpj4jlrZAgPiBjaGFpbjsKK+aJi+WllyA+IGdsb3ZlOwor55S35Lq6ID4gYVwtbWFuOwor6Lef5YmNID4gZnJvbnQ7Civkv67liaogPiBwcnVuZTsKK+WvrOW6piA+IHdpZHRoOwor6aaZ5paZID4gc3BpY2U7CivkvLrmnI0gPiBzZXJ2bzsKK+a7i+WRsyA+IHRhc3RlOwor56ef57SEID4gbGVhc2U7CivlsJbloZQgPiBzcGlyZTsKK+WXtuWYsCA+IHNlcmdlOwor5rGh6bueID4gc3RhaW47Civms5Xpg44gPiBmcmFuYzsKK+a0u+iRlyA+IGFsaXZlOwor5Zac5oKFID4gaGFwcHk7CivmiJDlubQgPiBhZHVsdDsKK+iChea4hSA+IHB1cmdlOwor57+x57+UID4gaG92ZXI7CivlrZ/mtaogPiBoYXN0eTsKK+m7keiJsiA+IGJsYWNrOwor5re55rKSID4gZmx1c2g7Civnp5Xns6AgPiBjaGFmZjsKK+esrOWNgSA+IHRlbnRoOwor5ZOB56iuID4gYnJlZWQ7CivmmYLpq6YgPiB2b2d1ZTsKK+aJk+WRvCA+IHNub3JlOwor5qGM5a2QID4gdGFibGU7Civku43nhLYgPiBzdGlsbDsKK+a4healmiA+IGNsZWFyOwor6aSY54e8ID4gZW1iZXI7CivnrKzlha0gPiBzaXh0aDsKK+mMpuaomSA+IHByaXplOwor542o6IeqID4gYWxvbmU7Civnvr3ojpYgPiBxdWlsbDsKK+ahg+WtkCA+IHBlYWNoOwor5bCB5ZywID4gbWFub3I7Civkv6Hku7sgPiB0cnVzdDsKK+S9nOW8iiA+IGZyYXVkOwor6aGM6KejID4gbm90ZXM7Civkv53kvZEgPiBibGVzczsKK+iyqOeJqSA+IGdvb2RzOwor5a+h5ammID4gd2lkb3c7Civpo7LnlKggPiBkcmluazsKK+S4gOihjCA+IHBhcnR5Owor6Lao5YuiID4gdHJlbmQ7Civni7not68gPiBnb3JnZTsKK+Wwj+WQgyA+IHNuYWNrOwor54+K55GaID4gY29yYWw7Civnj43nj6AgPiBwZWFybDsKK+aHuOWyqSA+IGNsaWZmOwor6by754WZID4gc251ZmY7CivmtIvolKUgPiBvbmlvbjsKK+i2o+WKhyA+IGZhcmNlOwor5L2O5buJID4gY2hlYXA7Civlk4Dnl5sgPiBncmllZjsKK+esrOS6lCA+IGZpZnRoOwor56ys5LmdID4gbmludGg7CivnrKzkuIkgPiB0aGlyZDsKK+esrOS4gCA+IGZpcnN0Owor546755KDID4gZ2xhc3M7CivnqpLmga8gPiBjaG9rZTsKK+aciee3miA+IHdpcmVkOwor5p2/5ruvID4gc3RpZmY7CivmiZPku5cgPiBmaWdodDsKK+aIsuWKhyA+IGRyYW1hOwor5rKJ6YeNID4gaGVhdnk7Civmsojph40gPiBoZWF2eTsKK+acgOe1giA+IGZpbmFsOwor572q6KGMID4gY3JpbWU7CivnvanooasgPiBzbW9jazsKK+S9oOWlvSA+IGhlbGxvOwor5L2N5a2QID4gcGxhY2U7Civms6LolakgPiBoZWF2ZTsKK+i1sOWQkSA+IHRyZW5kOwor6bq157KJID4gZmxvdXI7CivlppbprZQgPiBkZW1vbjsKK+eOh+ebtCA+IGZyYW5rOwor5piO6aGvID4gY2xlYXI7CivpoY/oibIgPiBjb2xvcjsKK+Wwj+S4kSA+IGNsb3duOwor5pmv6LGhID4gc2NlbmU7Civni6HoqZAgPiBjcmFmdDsKK+aGpOaAkiA+IGFuZ3J5Owor6LKd5q68ID4gc2hlbGw7Civkvo3lgJkgPiBzZXJ2ZTsKK+ixoeeJmSA+IGl2b3J5Owor5ZWG5bqXID4gc3RvcmU7Civllp3lj7EgPiBjaGlkZTsKK+a1t+eBmCA+IGJlYWNoOwor55C05bymID4gY2hvcmQ7CivnjY7nq6AgPiBtZWRhbDsKK+WtkOaIvyA+IG92YXJ5Owor6JK86be6ID4gaGVyb247CivotablhY0gPiByZW1pdDsKK+S7iuaXpSA+IHRvZGF5Owor5pyo54mIID4gcGxhbms7CivnpZ7ntpMgPiBuZXJ2ZTsKK+aAquiqlSA+IGZyZWFrOwor56uZ5L2PID4gc3RhbmQ7Civmsr/okZcgPiBhbG9uZzsKK+S5vua3qCA+IGNsZWFuOwor5a+G5YiHID4gY2xvc2U7Civmt7HluqYgPiBkZXB0aDsKK+WNiOmkkCA+IGx1bmNoOwor5oiQ5Lq6ID4gYWR1bHQ7CivljYjpo68gPiBsdW5jaDsKK+a1t+a0iyA+IG9jZWFuOwor6IKa5a2QID4gYmVsbHk7CivnjbXniqwgPiBob3VuZDsKK+eQhuaDsyA+IGlkZWFsOwor6bWq6baJID4gcXVhaWw7Civku6XlvowgPiBhZnRlcjsKK+WtqeWtkCA+IGNoaWxkOwor6IC95pOxID4gdGFycnk7Civkuovmpa0gPiBjYXVzZTsKK+WtouWtkCA+IHNwb3JlOwor5peF6aSoID4gaG90ZWw7CivlpbTpmrggPiBzbGF2ZTsKK+WQiue5qSA+IHNsaW5nOwor6aas5L6GID4gbWFsYXk7CivppqzkvJUgPiBncm9vbTsKK+Wkp+m5vyA+IG1vb3NlOwor6IGW5b6SID4gc2FpbnQ7CivkuJbnlYwgPiB3b3JsZDsKK+a4oeWPoyA+IGZlcnJ5Owor5rib5Y67ID4gbWludXM7CivkurrmgKcgPiBodW1hbjsKK+aFiOaCsiA+IG1lcmN5Owor6Z+/6IGyID4gbm9pc2U7Civoq5bpoYwgPiB0b3BpYzsKK+WNoei7iiA+IHRydWNrOwor5a6i5Lq6ID4gZ3Vlc3Q7CivnvYznsp8gPiBwb3BweTsKK+mhr+eEtiA+IGNsZWFyOwor5paR6aasID4gemVicmE7Civmr43pn7MgPiB2b3dlbDsKK+S7meWlsyA+IGZhaXJ5Owor56ig5a+GID4gZGVuc2U7CivlpZfpkJggPiBjaGltZTsKK+WuiOWAmSA+IGFiaWRlOwor5rSX5r6hID4gYmF0aGU7Civmnb/lsqkgPiBzbGF0ZTsKK+isrOiqpCA+IGVycm9yOwor6aKo5qC8ID4gc3R5bGU7CivmtJfmu4wgPiByaW5zZTsKK+S4gOeJhyA+IHBpZWNlOwor6Yyi5YyFID4gcHVyc2U7CivpoK3nmq4gPiBzY2FscDsKK+adv+WtkCA+IGJvYXJkOwor5Y2R6LOkID4gbG93bHk7Civku4rlpKkgPiB0b2RheTsKK+aEm+aFlSA+IGFkb3JlOwor5oCd6ICDID4gdGhpbms7CivpoqjmmrQgPiBzdG9ybTsKK+WNh+i1tyA+IGhvaXN0Owor6JiL5p6cID4gYXBwbGU7Civosp3lr6cgPiBiZW5pbjsKK+isoOiogCA+IHJ1bW9yOwor5peL6L2JID4gd2hpcmw7Civlj5bnrJEgPiB0ZWFzZTsKK+awtOibrSA+IGxlZWNoOwor6Kqe6Z+zID4gdm9pY2U7CivlpL7piZcgPiB0b25nczsKK+aXpeiomCA+IGRpYXJ5Owor6aCS55m8ID4gaXNzdWU7CivkuYPmmK8gPiB0b1wtYmU7CivmlrDov5EgPiBuZXdseTsKK+WrjOaDoSA+IGFiaG9yOwor5aOB6b6VID4gbmljaGU7CivlkLjmsKMgPiBzbmlmZjsKK+iqmOmZtyA+IHNuYXJlOwor55+z6aCtID4gc3RvbmU7CivnjJzmuKwgPiBndWVzczsKK+S7o+WDuSA+IHByaWNlOwor5p2T5a2QID4gc2Nvb3A7CivmhJ/lrpggPiBzZW5zZTsKK+S4ieasoSA+IHRoaXJkOwor5pys5b2xID4gdW1icmE7Civkurrlk6EgPiBzdGFmZjsKK+S4gOasoSA+IGZpcnN0Owor57qM6KiCID4gcmVuZXc7Civmm7TmlLkgPiBhbHRlcjsKK+ejqOeijiA+IGdyaW5kOwor6K2m56ybID4gc2lyZW47Civnv5LmhaMgPiBoYWJpdDsKK+S7iuWFkiA+IHRvZGF5Owor5Lul5LiLID4gYmVsb3c7Civph47njbggPiBiZWFzdDsKK+WSjOW5syA+IHBlYWNlOwor5pS26aSKID4gYWRvcHQ7CivmgKrnlbAgPiB3ZWlyZDsKK+iyk+WSqiA+IGtpdHR5Owor5b+D6IefID4gaGVhcnQ7CivmsrzmvqQgPiBnbGFkZTsKK+axoeepoiA+IG5hc3R5Owor5LiJ5pyIID4gbWFyY2g7Civno4Xnp6QgPiBzY2FsZTsKK+WTquWFkiA+IHdoZXJlOwor5Lqk5Y+JID4gY3Jvc3M7CivosqzlgpkgPiBibGFtZTsKK+mbu+mDtSA+IGVtYWlsOwor5Lif5o6JID4gdGhyb3c7CivogZbkurogPiBzYWludDsKK+WLnemBjiA+IGV4Y2VsOwor5q6Y6YW3ID4gY3J1ZWw7Civlj5TniLYgPiB1bmNsZTsKK+itieeroCA+IGJhZGdlOwor5rW35ZywID4gaGFpdGk7CivmnIDlvowgPiBmaW5hbDsKK+ato+mdoiA+IGZyb250Owor6Zu36YGUID4gcmFkYXI7Civlk4HlkbMgPiB0YXN0ZTsKK+S4u+W5uSA+IHRydW5rOwor5aSx6KqkID4gbGFwc2U7CivniIboo4IgPiBidXJzdDsKK+mCiumamyA+IGxpbWl0Owor6aGP5paZID4gcGFpbnQ7Civni4LnhrEgPiBjcmF6ZTsKK+S6lOWNgSA+IGZpZnR5Owor56C06KOCID4gYnVyc3Q7CivmsrPmtYEgPiByaXZlcjsKK+aCsuaCvCA+IG1vdXJuOwor6Z2S6I2JID4gZ3Jhc3M7CivmnKjloYogPiBibG9jazsKK+S5meWkqiA+IGV0aGVyOwor6Yqz5YipID4gc2hhcnA7CivomZvlgb0gPiBmYWxzZTsKK+acrOWcsCA+IGxvY2FsOwor5p2x5LqsID4gdG9reW87Civmr5Lom4cgPiB2aXBlcjsKK+mgjOatjCA+IGNhcm9sOwor5ZKV5ZqVID4gZ3J1bnQ7CivmrL7poIUgPiBmdW5kczsKK+S4gOaJkyA+IGRvemVuOwor6Kmm6YeRID4gYXNzYXk7CivpoK3mmoggPiBkaXp6eTsKK+W+veeroCA+IGJhZGdlOwor5Yqb6YePID4gcG93ZXI7CivnhKbpu54gPiBmb2N1czsKK+mJi+WtkCA+IHBsYW5lOwor5piO55m9ID4gY2xlYXI7CivnjovlkI4gPiBxdWVlbjsKK+e6lue2rSA+IGZpYmVyOwor5LqL5Lu2ID4gZXZlbnQ7CivpgJfpu54gPiBjb21tYTsKK+m6peWtkCA+IHdoZWF0Owor5LiA5by1ID4gc2hlZXQ7Civlkoblk64gPiBncm93bDsKK+W+rueskSA+IHNtaWxlOwor56Kn55OmID4gZ3JlZW47CivmsLTnm4YgPiBiYXNpbjsKK+eFmemcpyA+IHNtb2tlOwor6YKP6LyvID4gbG9naWM7Civpn7PmqIIgPiBtdXNpYzsKK+abtOWjniA+IHdvcnNlOwor6YOo6JC9ID4gdHJpYmU7Civlu7bpgbIgPiBkZWxheTsKK+W5vem7mCA+IGh1bW9yOwor546L5YagID4gY3Jvd247CivpmbfpmLEgPiBzbmFyZTsKK+aWt+e1lSA+IHNldmVyOwor5Lit5ZyLID4gY2hpbmE7CivlpJrokYkgPiBsZWFmeTsKK+S4gOWxpCA+IGxheWVyOwor54e76IKJID4gYmFjb247CivlvJXoqLwgPiBxdW90ZTsKK+aToumZniA+IGV4YWx0Owor6YeN5pawID4gYWdhaW47CivlpKfohb8gPiB0aGlnaDsKK+Wkp+iFpiA+IGJyYWluOwor5pys5Lq6ID4gaVwtXChtZTsKK+elreWjhyA+IGFsdGFyOwor6Z+75paHID4gdmVyc2U7Civpgbrot6EgPiB0cmFjZTsKK+mCo+ijoSA+IHRoZXJlOwor54aK6LKTID4gcGFuZGE7CivmlpHnvpogPiBnb3JhbDsKK+mahumHjSA+IGdyYW5kOwor5b2O6IWwID4gc3Rvb3A7CivlqablpbMgPiB3b21hbjsKK+iRoeiQhCA+IGdyYXBlOwor576O5aW9ID4gaGFwcHk7CivoroDmm7ggPiBzdHVkeTsKK+eNjuWTgSA+IGF3YXJkOwor5pyA5YidID4gZmlyc3Q7CivmgZDmhYwgPiBwYW5pYzsKK+m6teWMhSA+IGJyZWFkOwor6aGN5aSWID4gZXh0cmE7Civpu4/kvY8gPiBjbGluZzsKK+S4gOWhiiA+IHBpZWNlOwor5Y+v5oCVID4gYXdmdWw7CivpgY7pgZMgPiBhaXNsZTsKK+axgea2siA+IGp1aWNlOwor56Sm5belID4gbWluZXI7CivmrYzorKAgPiBjaGFudDsKK+aymeaLiSA+IHNhbGFkOwor6bq15YWSID4gY292ZXI7Civmlpfnr7cgPiBjbG9hazsKK+S5i+S4iyA+IHVuZGVyOwor5pyI5Lu9ID4gbW9udGg7CivmsLTmupYgPiBsZXZlbDsKK+Wls+eOiyA+IHF1ZWVuOwor6Zub6I+KID4gZGFpc3k7Civnt6joo70gPiB3ZWF2ZTsKK+WMheepgCA+IG1haXplOwor5b+r5qiCID4gaGFwcHk7CivpgLzov6sgPiBmb3JjZTsKK+WmgueBqyA+IGZpZXJ5Owor5rOl5ZyfID4gZWFydGg7CivlqpLku4sgPiBtZWRpYTsKK+S4gOWQjCA+IGFsb25nOwor5aC06Z2iID4gc2NlbmU7Civlo4HomY4gPiBnZWNrbzsKK+aVmee+qSA+IGNyZWVkOwor5q+b55eFID4gZmF1bHQ7CivpoIHlsqkgPiBzaGFsZTsKK+mHkeWxrCA+IG1ldGFsOwor6K2J5piOID4gcHJvb2Y7Civljq3mg6EgPiBsb2F0aDsKK+aYj+aalyA+IGR1c2t5Owor5q+U546HID4gcmF0aW87CivlpbbmsrkgPiBjcmVhbTsKK+mcjuecvCA+IGJsaW5rOwor5rC05p6cID4gZnJ1aXQ7Civnn63nsKEgPiBicmllZjsKK+Wnv+WuuSA+IGxvb2tzOwor57aT6LK7ID4gZnVuZHM7CivoppbpoLsgPiB2aWRlbzsKK+mBiuihjCA+IG1hcmNoOwor5pm05aSpID4gc3Vubnk7Civph43lpKcgPiBncmVhdDsKK+W4tumgmCA+IGd1aWRlOwor6YCV6LehID4gdHJhY2s7CivniJDngbYgPiBzdG92ZTsKK+aZguW4uCA+IG9mdGVuOwor5by356GsID4gdG91Z2g7CivluLbpnLIgPiBkZXd5Owor5b2i54uAID4gZm9ybTsKK+iWhOWRvSA+IFwodXN1Owor5Yqf57i+ID4gZmVhdDsKK+iomOiZnyA+IHNlYWw7CivopovpnaIgPiBtZWV0Owor6YKK57ejID4gZWRnZTsKK+aatOS6giA+IHJpb3Q7CivniJvms6UgPiBvb3plOwor5pel5pyfID4gZGF0ZTsKK+WnqOWqvSA+IGF1bnQ7Civlub3osLcgPiBkZWxsOwor5Ya36Z2cID4gY2FsbTsKK+aVmeeahyA+IHBvcGU7CivlvrXmlLYgPiBsZXZ5Owor5ZCR5LiLID4gZG93bjsKK+mAn+ihjCA+IHJ1c2g7CivpgJnoo6EgPiBoZXJlOwor57y65Y+jID4gbmljazsKK+mBsue3qSA+IHNsb3c7CivmsI/ml48gPiBjbGFuOwor5Y6f5a2QID4gYXRvbTsKK+avm+awiCA+IGZlbHQ7CivlhrDpm7kgPiBoYWlsOwor6aCQ5YWGID4gb21lbjsKK+WnkeWqvSA+IGF1bnQ7CivmsaDlrZAgPiBwb25kOwor5aeR5aiYID4gZ2lybDsKK+WLu+a3qCA+IGV2ZW47CivmlrnmoYggPiBwbGFuOwor54uC5ZCgID4gaG93bDsKK+W/g+aDhSA+IG1vb2Q7Civph47lhZQgPiBoYXJlOwor6Z6t5a2QID4gd2hpcDsKK+WfuumHkSA+IGZ1bmQ7CivlprvlrZAgPiB3aWZlOwor5Y2K5ouJID4gaGFsZjsKK+mviemtmiA+IGNhcnA7Civnn7PniYcgPiBzbGFiOwor5b+F5b6XID4gbXVzdDsKK+WGsOmOriA+IGljZWQ7CivmsaDloZggPiBwb29sOwor54a+54axID4gZ2xvdzsKK+efs+eBsCA+IGxpbWU7Civnmq7pnq0gPiBsYXNoOwor5Ya36YW3ID4gZ3JpbTsKK+WlkeaTmiA+IGRlZWQ7CivnoazluaMgPiBjb2luOwor5Yed6KaWID4gZ2F6ZTsKK+aVmea0viA+IHNlY3Q7Civlhazpm54gPiBjb2NrOwor6KeS6ImyID4gcm9sZTsKK+e6luW6piA+IHNpemU7CivniYzlrZAgPiBzaWduOwor54mb5aW2ID4gbWlsazsKK+WlieaJvyA+IGZhd247CivmmYLlgJkgPiB0aW1lOwor6Iux6ZuEID4gaGVybzsKK+mWi+mXiiA+IHdpZGU7CivlvY7mm7IgPiBiZW5kOwor6Kqy5paHID4gdGV4dDsKK+mVt+mdtCA+IGJvb3Q7CivniaLlm7ogPiBmaXJtOwor55m+6Z2IID4gbGFyazsKK+aXl+WtkCA+IGZsYWc7CivlpbPlrakgPiBnaXJsOwor57qW5bCPID4gZmluZTsKK+W5tOiAgSA+IGFnZWQ7Civlt6bpgoogPiBsZWZ0Owor54mG5aOBID4gd2FsbDsKK+mAj+e0hSA+IHJvc3k7Civmlbjmk5ogPiBkYXRhOwor6Kmp5q2MID4gcG9lbTsKK+eFrueGnyA+IGJvaWw7Civnn7Pmnb8gPiBzbGFiOwor5aWz5aOrID4gbGFkeTsKK+W/jeWPlyA+IGJlYXI7Civlvq7lnosgPiB0aW55Owor6YKK5rK/ID4gZWRnZTsKK+iLsemHjCA+IG1pbGU7CivmqILpmoogPiBiYW5kOwor5rCj5ZGzID4gb2RvcjsKK+eEoeemriA+IHJ1ZGU7Civpg73luIIgPiBjaXR5Owor5Y2A5Z+fID4gYXJlYTsKK+ioiOeVqyA+IHBsYW47Civnh4PmlpkgPiBmdWVsOwor5b2i5byPID4gZm9ybTsKK+ilv+iWhCA+IGNha2U7Civmk5jnlasgPiBwbGFuOwor54Wk54GwID4gc29vdDsKK+mWi+i+piA+IG9wZW47CivmlbLmiZMgPiBiZWF0Owor6Zuq5pKsID4gc2xlZDsKK+W+iOWlvSA+IHdlbGw7CivpgajmuLggPiByb2FtOwor5aaC5ZCMID4gbGlrZTsKK+Wkp+W7syA+IGhhbGw7Civmr5LlrrMgPiBiYW5lOwor57mp5a2QID4gY29yZDsKK+e5geW/mSA+IGJ1c3k7CivntLDog54gPiBjZWxsOwor5Y2R5YqjID4gYmFzZTsKK+W+qeWOnyA+IGhlYWw7CivliKXnmoQgPiBlbHNlOwor5YWs6LGsID4gYm9hcjsKK+iqv+WtkCA+IHR1bmU7Civli7vlr6YgPiBldmVuOwor5b615YWGID4gb21lbjsKK+aPueiyoCA+IGJlYXI7CivplpLoq4cgPiBjaGF0Owor55y855yLID4gc29vbjsKK+i+m+iLpiA+IGhhcmQ7CivnmbHou58gPiBsaW1wOwor6Z2i5YW3ID4gbWFzazsKK+aSleegtCA+IHRlYXI7Civln4vokawgPiBidXJ5Owor5aSn5aiYID4gYXVudDsKK+atjOabsiA+IHNvbmc7CivlvKflvaIgPiBhcmNoOwor6Lyq6Lu4ID4gYXhsZTsKK+W4huiIuSA+IHNhaWw7CivljZHkuIsgPiBiYXNlOwor5qiZ6K2YID4gbWFyazsKK+W4s+evtyA+IHRlbnQ7CivnmKbplbcgPiBzbGltOwor6Iqx6YKKID4gbGFjZTsKK+Whq+a7vyA+IGNyYW07CivloYrni4AgPiBsdW1wOwor5qiZ6KqMID4gc2lnbjsKK+mbueWtkCA+IGhhaWw7Civoq77kup4gPiBub2FoOwor6KaP56ugID4gcnVsZTsKK+aomeiomCA+IHNpZ247CivlpJblpZcgPiBjb2F0Owor6ZW36KWqID4gaG9zZTsKK+WcmOmaiiA+IHRlYW07Civlvp7kuK0gPiBmcm9tOwor6ZW36KKNID4gZ293bjsKK+mbhOaApyA+IG1hbGU7Civnnavmr5sgPiBsYXNoOwor5by35aemID4gcmFwZTsKK+eFp+aWmSA+IHRlbmQ7CivmjqHpgpEgPiBmaWVmOwor5o6l6L+RID4gbmVhcjsKK+earuiGmiA+IHNraW47CivmjqDpgY4gPiBmbGl0Owor57ep5oWiID4gc2xvdzsKK+WfuuekjiA+IGJhc2U7CivntrLmnrYgPiByYWNrOwor6KaP55+pID4gcnVsZTsKK+eBsOiJsiA+IGdyYXk7CivntLDnnIsgPiBwZWVyOwor6YGy5oWiID4gc2xvdzsKK+ikquiJsiA+IGZhZGU7Civpganmh4kgPiBzdWl0Owor5pWX5aOeID4gcnVpbjsKK+mDqOWIhiA+IHBhcnQ7CivnnLzmt5ogPiB0ZWFyOwor6IuU6JiaID4gbW9zczsKK+W9ouWDjyA+IGZvcm07CivliZ3mjokgPiBwYXJlOwor6YO15Lu2ID4gbWFpbDsKK+atpeWtkCA+IHN0ZXA7Civov73msYIgPiBzZWVrOwor6KGo6ZyyID4gc2hvdzsKK+eekeaDsyA+IG11c2U7Civmk6bmjokgPiB3aXBlOwor6YGK5oiyID4gZ2FtZTsKK+evgOm7niA+IG5vZGU7CivlpKvkurogPiBsYWR5Owor5bua5birID4gY29vazsKK+aNsui7uCA+IHJlZWw7Civpq5jpo5sgPiBzb2FyOwor5pWj5Ye6ID4gc2hlZDsKK+W3oueptCA+IGxhaXI7CivpmL/mm7wgPiBvbWFuOwor5bug5a2QID4geWFyZDsKK+e0oueEtiA+IGR1bGw7CivliZvlvLcgPiBmaXJtOwor55yf5q2jID4gcmVhbDsKK+i6sumBvyA+IHNodW47Civlu5rlrZAgPiBjb29rOwor54ax5YqbID4gaGVhdDsKK+W7o+WkpyA+IHZhc3Q7Civps6XlmLQgPiBiZWFrOwor5Z+65rqWID4gZGF0YTsKK+ewveiovCA+IHZpc2E7Civps7Tlj6sgPiBob290Owor5aCF5rG6ID4gZmlybTsKK+ioseWkmiA+IG1hbnk7CivngbDnmb0gPiBncmV5Owor5pS25YmyID4gcmVhcDsKK+e2suWtlCA+IG1lc2g7Civmi7PpoK0gPiBmaXN0Owor5q2M5ZSxID4gc2luZzsKK+mbnOS6giA+IG1lc3M7Civlhrfmt6EgPiBjb2xkOwor6aqo6aCtID4gYm9uZTsKK+WJm+WlvSA+IGp1c3Q7Civlo4HliqkgPiBoZWxwOwor5o6J6JC9ID4gZmxvcDsKK+ipqeS6uiA+IGJhcmQ7CivokL3kuIsgPiBmYWxsOwor6KGo6LGhID4gaWRlYTsKK+mZteWikyA+IHRvbWI7CivoiJLpgakgPiBjb3p5Owor6Iux55WdID4gYWNyZTsKK+atpeS8kCA+IHBhY2U7CivmqpTmoYggPiBmaWxlOwor57C46JWpID4gcm9sbDsKK+W4tuaciSA+IGhhdmU7CivmrYzlhZIgPiBzb25nOwor5o6l57irID4gc2VhbTsKK+W5q+W/mSA+IGhlbHA7CivntZDmiJAgPiBmb3JtOwor6KGM6LWwID4gd2FsazsKK+WGsOaphyA+IHNsZWQ7CivlhazniZsgPiBidWxsOwor5Z+O5rGgID4gY2l0eTsKK+eyl+eggiA+IGdyaXQ7CivlhazniLUgPiBkdWtlOwor6KaB5pyJID4gbmVlZDsKK+iGs+mjnyA+IG1lYWw7CivourLol48gPiBoaWRlOwor6I+c5ZauID4gbWVudTsKK+apq+aokSA+IGJlYW07CivooZPoqp4gPiB0ZXJtOwor6YGy5LqGID4gbGF0ZTsKK+WJm+WLgSA+IGJvbGQ7CivooZrooZUgPiBsYW5lOwor6Im+57WoID4gbW94YTsKK+ioiOWKgyA+IHBsYW47CivmjInoqp4gPiBub3RlOwor55yf5a+mID4gdHJ1ZTsKK+eXm+iLpiA+IHBhaW47CivoirHnk7YgPiB2YXNlOwor5YW25qyhID4gbmV4dDsKK+apn+aZuiA+IHRhY3Q7Civlgr7ogb0gPiBoYXJrOwor5qOV6ZatID4gcGFsbTsKK+WFrOatoyA+IGp1c3Q7CivlubPlnaYgPiBmbGF0Owor6IeA6YOoID4gYnV0dDsKK+mQmOmgrSA+IGhvdXI7Civmk43liIcgPiByYXNoOwor5Z2m54S2ID4gY2FsbTsKK+imgeW+lyA+IGdvb2Q7CivngrjlvYggPiBib21iOwor5bqn5L2NID4gc2VhdDsKK+iKr+eJhyA+IGNoaXA7Civlm57ogbIgPiBlY2hvOwor6ZC16Yq5ID4gcnVzdDsKK+Wxi+mggiA+IHJvb2Y7CivloKHlo5ggPiBmb3J0Owor5YW35pyJID4gaGF2ZTsKK+mAmeWFkiA+IGhlcmU7Civop6Plh40gPiB0aGF3Owor55Sf6ZW3ID4gZ3JvdzsKK+WgheWumiA+IGZpcm07Civlt7TmjowgPiBwYWxtOwor55ii55eVID4gc2NhcjsKK+W4tuWtkCA+IGJhbmQ7Civplbfmp40gPiBwaWtlOwor5YWt5pyIID4ganVuZTsKK+mAmeWAiyA+IHRoaXM7CivploDmoJMgPiBib2x0Owor6KCV6J+yID4gd29ybTsKK+WDseeUqCA+IGhpcmU7CivlnJPnm6QgPiBkaXNrOwor5Zyw542EID4gaGVsbDsKK+mYv+WAkSA+IGFtZW47CivooJXomasgPiB3b3JtOwor55uk5a2QID4gdHJheTsKK+ethumMoiA+IGZ1bmQ7Civot6/pgoogPiBjdXJiOwor54GM5pyoID4gYnVzaDsKK+imluWcliA+IHZpZXc7CivmkofljrsgPiBza2ltOwor6L6y5aW0ID4gc2VyZjsKK+WfjuW4giA+IGNpdHk7CivloIXlm7ogPiBmaXJtOwor5bCP6aasID4gY29sdDsKK+WFteaIjiA+IGFybXM7CivlhYnmnZ8gPiBiZWFtOwor5qiZ5piOID4gbWFyazsKK+ikh+acrCA+IGNvcHk7Civon77onI0gPiB0b2FkOwor6L6y5aC0ID4gZmFybTsKK+ebkuWtkCA+IGNhc2U7CivlnIvnjosgPiBraW5nOwor5biz5ZauID4gYmlsbDsKK+iNieWdqiA+IGxhd247CivojYnlnLAgPiBsYXduOwor5pC25aWqID4gc25hcDsKK+ihgOeuoSA+IHZlaW47Civou43ngasgPiBhcm1zOwor6Leb6LazID4gbGFtZTsKK+aIv+mWkyA+IHJvb207Civopo/lioMgPiBwbGFuOwor6IWz6LefID4gaGVlbDsKK+i3oeixoSA+IG1hcms7Civopo/liYcgPiBydWxlOwor5YWs5bmzID4gZmFpcjsKK+mOrumdnCA+IGNhbG07Civlg7nmrL4gPiBjb3N0Owor5qij5byPID4gdHlwZTsKK+aQjeWusyA+IGhhcm07CivmqKHlvI8gPiBtb2RlOwor55uf5Y+LID4gYWxseTsKK+WFnOW4vSA+IGhvb2Q7Civlt6jlpKcgPiBodWdlOwor5bel5aSrID4gd29yazsKK+eWvOeXmyA+IGFjaGU7Civot7PomqQgPiBmbGVhOwor5qiT5buCID4gbG9mdDsKK+iGneiTiyA+IGtuZWU7Civkv67oo5wgPiBtZW5kOwor5bGB6KmxID4gc2hpdDsKK+eBsOWhtSA+IGR1c3Q7CivlgbfnnIsgPiBwZWVwOwor5qih5a2QID4gbW9sZDsKK+eWpOeXlSA+IHNjYXI7CivlnLDmlrkgPiBhcmVhOwor5YWU5a2QID4gaGFyZTsKK+Wwj+i3ryA+IGxhbmU7Civpj4jot68gPiBsaW5rOwor55SY6JSXID4gY2FuZTsKK+aOjOaTiiA+IHNsYXA7Civlt67li4EgPiBwb29yOwor5L2O6Z+zID4gYmFzczsKK+a6nOi1sCA+IHNsaXA7CivnlJzoj5wgPiBiZWV0Owor5o2y5puyID4gY3VybDsKK+a4rOmplyA+IHRlc3Q7CivnlKjohrMgPiBkaW5lOwor56yR6KmxID4gam9rZTsKK+Wxsee+iiA+IGdvYXQ7Civnq7bos70gPiByYWNlOwor56yo6JuLID4gZm9vbDsKK+WyqeefsyA+IHJvY2s7CivlhazlkYogPiBwb3N0Owor5bel5YW3ID4gdG9vbDsKK+eUmuiHsyA+IGV2ZW47CivnlaXnorwgPiBjb2RlOwor6LeM6JC9ID4gZmFsbDsKK+a9rua/lSA+IGRhbXA7CivovIPlsJEgPiBsZXNzOwor55m+5ZCIID4gbGlseTsKK+iFsOiCiSA+IGxvaW47CivlnLDluLYgPiB6b25lOwor6KGo5qC8ID4gZm9ybTsKK+mWo+S4iyA+IHNpcmU7Civpvo3pqqggPiBrZWVsOwor6L2J5YuVID4gdHVybjsKK+WFtuS9mSA+IHJlc3Q7Civmva7mtYEgPiB0aWRlOwor5L+d576FID4gcGF1bDsKK+iJsuW9qSA+IHRpbnQ7CivlmLLnrJEgPiBqZWVyOwor5r2u5rGQID4gdGlkZTsKK+aNsuW4tiA+IHRhcGU7CivllaTphZIgPiBiZWVyOwor5r2b5rC0ID4gZGl2ZTsKK+mNjemHkSA+IGdpbGQ7CivlsI/oiLkgPiBib2F0Owor5LuA6bq8ID4gd2hhdDsKK+aMh+aomSA+IG5vcm07CivooZ3mkp4gPiBkYXNoOwor5bKp5ry/ID4gbGF2YTsKK+aPoeS9jyA+IGdyaXA7CivlnLDln58gPiBhcmVhOwor6by06bygID4gbW9sZTsKK+ijveS9nCA+IG1ha2U7CivlnJ/lo6QgPiBzb2lsOwor5bCP576KID4gbGFtYjsKK+aOpeWQuyA+IGtpc3M7Civoia/lpb0gPiBnb29kOwor562W55WlID4gcGxvdDsKK+ihsOW8sSA+IHdlYWs7CivmvKnmuKYgPiBlZGR5Owor5Zyf5ZywID4gbGFuZDsKK+S6num6uyA+IGZsYXg7Civlk7rppIogPiBmZWVkOwor5ZyI5aWXID4gdHJhcDsKK+exg+WciCA+IHJpbmc7Civpj4jntZAgPiBsaW5rOwor6Ia95rGBID4gZ2FsbDsKK+WcsOWNgCA+IGFyZWE7Civmn5Tou58gPiBzb2Z0Owor5ryP5rSeID4gaG9sZTsKK+aOoeS8kCA+IGZlbGw7CivnlbbmmYIgPiB0aGVuOwor5YCf5qy+ID4gbG9hbjsKK+iiluWPoyA+IGN1ZmY7Civmi5vmlLYgPiBoaXJlOwor54++6YeRID4gY2FzaDsKK+mmmeiNiSA+IGhlcmI7CivlmrTls7sgPiBncmltOwor55a55a2QID4gcmFzaDsKK+enmOmtryA+IHBlcnU7CivnqIXpl5wgPiBwaWtlOwor55Sf5rS7ID4gbGlmZTsKK+WDp+S+tiA+IG1vbms7CivmiZPnjbUgPiBodW50Owor5ouW5ouJID4gaGF1bDsKK+aLseW9oiA+IGFyY2g7CivmirHmnIkgPiBoYXZlOwor5ZyN5L2PID4gZ2lyZDsKK+ajjeajkiA+IGNsdWI7CivogbLorb0gPiBmYW1lOwor6Ieq5bexID4gc2VsZjsKK+aLjeaJkyA+IGZsYXA7Civmi43miYsgPiBjbGFwOwor5YK15YuZID4gZGVidDsKK+iBveimiyA+IGhlYXI7Civpo77ph5ggPiBzdHVkOwor5bCP54mbID4gY2FsZjsKK+ihgOWhiiA+IGdvcmU7CivmtarpoK0gPiB3YXZlOwor5YGP5beuID4gYmlhczsKK+WCvuWAkiA+IHBvdXI7CivpqrDlrZAgPiBkaWNlOwor6LKg6LyJID4gbG9hZDsKK+aKmOaWtyA+IHNuYXA7CivogIHpl4YgPiBib3NzOwor6IGW6KmpID4gaHltbjsKK+WCrOS/gyA+IHVyZ2U7Civpi6roqK0gPiBwYXZlOwor56ef6YeRID4gcmVudDsKK+aJk+atuyA+IGtpbGw7CivpoqjpmqogPiByaXNrOwor5p6v6JCOID4gd2lsdDsKK+eUqOaItiA+IHVzZXI7CivmtbjpgI8gPiBzb2FrOwor55ay5YCmID4gdGlyZTsKK+iGoOW4tiA+IHRhcGU7Civos6Log70gPiBzYWdlOwor5rW36LuNID4gbmF2eTsKK+iHreWRsyA+IGZ1bWU7Civlgbblg48gPiBpZG9sOwor5omL5p2WID4gY2FuZTsKK+a1t+ixuSA+IHNlYWw7Civot6jluqYgPiBzcGFuOwor5rqr5pqWID4gd2FybTsKK+Wto+evgCA+IHRpbWU7CivmnpzogokgPiBwdWxwOwor5bCP5pmCID4gaG91cjsKK+aKleWwhCA+IGRhcnQ7Civpu4Pph5EgPiBnb2xkOwor5ZG96YGLID4gZmF0ZTsKK+Wtl+evgCA+IGJ5dGU7Civmtbfop5IgPiBjYXBlOwor5ZiG5oGvID4gc2lnaDsKK+WUp+etkiA+IHB1bXA7CivnlaXljrsgPiBvbWl0Owor5ZO66IKyID4gZmVlZDsKK+e+hemmrCA+IHJvbWU7CivogIPoqaYgPiBleGFtOwor5omL5o6MID4gcGFsbTsKK+iCpeeagiA+IHNvYXA7CivmhI/oposgPiB2aWV3Owor5YCN5aGUID4gYmV0YTsKK+WwvuW3tCA+IHRhaWw7CivotIXnlqMgPiB3YXJ0Owor5oKg6ZaSID4gZWFzZTsKK+S8r+eItSA+IGVhcmw7CivlkajpgYogPiB0b3VyOwor5qKo5a2QID4gcGVhcjsKK+WwuuWvuCA+IHNpemU7CivpoLjpoIUgPiBuZWNrOwor55C155C2ID4gbHV0ZTsKK+ahiOaWhyA+IHRleHQ7CivohqDljbcgPiBmaWxtOwor6YqA6KGMID4gYmFuazsKK+a4uOazsyA+IHN3aW07CivomafnvLogPiB3YW5lOwor5YCf5Ye6ID4gbGVuZDsKK+WvjOaciSA+IHJpY2g7Civkv4LlsI8gPiB0aW55Owor5ZOB6ISrID4gcGludDsKK+Wul+a0viA+IHNlY3Q7CivkuI3pgZwgPiBydWRlOwor6aa05pyNID4gdGFtZTsKK+S4jemBjiA+IG9ubHk7CivkuI3pgYIgPiBmYWlsOwor5bCW5bOwID4gcGVhazsKK+a7vuWLlSA+IHJvbGw7Civosqfnqq4gPiBwb29yOwor5bCP5bO2ID4gaXNsZTsKK+S4u+imgSA+IG1haW47CivmnZ/nuJsgPiBiaW5kOwor5p2f57eKID4gZ2lyZDsKK+iWhOmcpyA+IG1pc3Q7CivmuIXmvoggPiBmYWlyOwor562W5YqDID4gcGxvdDsKK+ixrOiCiSA+IHBvcms7CivkvZXmmYIgPiB3aGVuOwor5a655piTID4gZWFzeTsKK+S4i+i3jCA+IGZhbGw7Civpu4PonIIgPiB3YXNwOwor5Y+j6aCtID4gb3JhbDsKK+e9sOmHkSA+IGZpbmU7Civku6Tni4AgPiB3cml0Owor6JWo6aGeID4gZmVybjsKK+iyu+eUqCA+IGNvc3Q7CivlkYroqqEgPiB3YXJuOwor6JiG6JGmID4gcmVlZDsKK+aKk+S9jyA+IGdyYWI7Civmnb/nmq4gPiBzbGFiOwor6ISG5byxID4gd2VhazsKK+aguOW/gyA+IGNvcmU7CivpoK3pg6ggPiBoZWFkOwor5qC85byPID4gZm9ybTsKK+a3sea3sSA+IGRlZXA7CivmsbrprKUgPiBkdWVsOwor6LGG6IWQID4gdG9mdTsKK+aHtuaDsCA+IGlkbGU7Civmu7TkuIsgPiBkcmlwOwor5omB5Z2vID4gc2xhYjsKK+S+i+WtkCA+IGNhc2U7CivlkpLnvbUgPiBkYW1uOwor6ISW5a2QID4gbmVjazsKK+WQjOi8qSA+IHBlZXI7CivnjqnnrJEgPiBqb2tlOwor6Jek6JSTID4gdmluZTsKK+S+jeWlsyA+IG1haWQ7CivonILmiL8gPiBoaXZlOwor5oiS5a2QID4gcmluZzsKK+a7keWAkiA+IHNsaXA7CivmurbljJYgPiBtZWx0Owor5ri45oiyID4gZ2FtZTsKK+WtuOacnyA+IHRlcm07Civppqzlu4QgPiBiYXJuOwor5Lqe55W2ID4gYWRhbTsKK+e/heiGgCA+IHdpbmc7CivkvIrmnJcgPiBpcmFuOwor5Li7576pID4gXC1pc207CivpuqXoir0gPiBtYWx0Owor5a+G5a6kID4gY2VsbDsKK+eLueiwtyA+IGdsZW47Civnqqnlt6IgPiBuZXN0Owor54mh6bm/ID4gaGFydDsKK+miqOeujyA+IGtpdGU7CivlkI3oqZ4gPiBub3VuOwor5a2Y5qC5ID4gc3R1YjsKK+aZgumWkyA+IHRpbWU7CivmtL7ns7sgPiBzZWN0Owor54++5qy+ID4gY2FzaDsKK+eivOmgrSA+IGRvY2s7Civph4DpgKAgPiBicmV3Owor6JeN6ImyID4gYmx1ZTsKK+WuieaBryA+IHJlc3Q7CivogZbmrYwgPiBoeW1uOwor6aO95ru/ID4gZnVsbDsKK+WTreazoyA+IHdlZXA7Civpo5/niakgPiBmb29kOwor5oW+5pybID4gbHVzdDsKK+WPsuipqSA+IGVwaWM7CivkuIDoiKwgPiBzYW1lOwor5bCP5LiYID4gaGlsbDsKK+aDheevgCA+IHBsb3Q7Civnqb/luLYgPiB3ZWFyOwor5LyR5oGvID4gcmVzdDsKK+mgiOimgSA+IG11c3Q7Civmnb7mqLkgPiBwaW5lOwor6JaU6JaHID4gcm9zZTsKK+S6nua0siA+IGFzaWE7CivlrrblnJIgPiBob21lOwor5oaQ5oarID4gcGl0eTsKK+aal+iXjyA+IGhpZGU7CivniZvpo7IgPiBndWxwOwor6LO65b6XID4gZWFybjsKK+izh+aWmSA+IGRhdGE7CivosY7nkLQgPiBoYXJwOwor5LiA576kID4gZ2FuZzsKK+aenOaWtyA+IGZpcm07CivnqK7ml48gPiByYWNlOwor6buR55ejID4gbW9sZTsKK+mfs+iqvyA+IHRvbmU7CivmtJ7nqbQgPiBjYXZlOwor5p2/5qKdID4gbGF0aDsKK+S4iue1gyA+IHdpbmQ7Civlk4Dms6MgPiB3YWlsOwor6LK05pePID4gbG9yZDsKK+WTiOasoCA+IHlhd247Civmtarmva4gPiB3YXZlOwor56au54mpID4gZ2lmdDsKK+WQhOiHqiA+IGVhY2g7CivosazmsrkgPiBsYXJkOwor6Yyr5a6JID4gemlvbjsKK+eNteeJqSA+IHByZXk7Civlv6vpgJ8gPiBmYXN0Owor6Z2I6a2CID4gc291bDsKK+eKr+imjyA+IGZvdWw7CivlrrDliLYgPiBydWxlOwor5LmD54i+ID4gdGh1czsKK+mjvOaWmSA+IGZlZWQ7Civmsrnoho8gPiBiYWxtOwor54+t5oi/ID4gamFpbDsKK+m+kOWkpyA+IGh1Z2U7CivmuK/lj6MgPiBwb3J0Owor5paR6bueID4gc3BvdDsKK+S4gOeilyA+IGJvd2w7CivlpKfpursgPiBoZW1wOwor5rWu5qiZID4gYnVveTsKK+aDs+azlSA+IGlkZWE7CivlrrbkvJkgPiBjaGFwOwor5Lqk5o6lID4gam9pbjsKK+W+jOmdoiA+IHJlYXI7CivlpKnptZ0gPiBzd2FuOwor5pyD5ryPID4gbGVhazsKK+aVtOm9iiA+IHRpZHk7CivmmIfotbcgPiByaXNlOwor5ZWG5ZOBID4gZ29vZDsKK+WNkemEmSA+IGJhc2U7CivnioTop5IgPiBob3JuOwor5q+N6aasID4gbWFyZTsKK+Wtl+WeiyA+IGZvbnQ7CivlronlhaggPiBzYWZlOwor56iu5a2QID4gc2VlZDsKK+WtpOWWriA+IGxvbmU7CivnqIvlvI8gPiBmb3JtOwor5pyo5qG2ID4gY2FzazsKK+e+uea5ryA+IHNvdXA7CivljbDorYkgPiBzZWFsOwor5pyo5p2/ID4gc2xhYjsKK+WQueeJmyA+IGJyYWc7CivmnKjmnZAgPiB3b29kOwor6aO+5bi2ID4gc2FzaDsKK+iAgeaSviA+IGxhb3M7CivmnKbmnKcgPiBibHVyOwor6Z2g6L+RID4gbmVhcjsKK+iZm+W8sSA+IHdlYWs7Civmtojmga8gPiBuZXdzOwor6Kqy6aGMID4gdGFzazsKK+acn+acmyA+IGhvcGU7Civmt7HljpogPiBkZWVwOwor5Li75qmfID4gY29yZTsKK+m8u+WtkCA+IG5vc2U7Civnj6DlrZAgPiBiZWFkOwor5peF6YGKID4gdHJpcDsKK+epqeWBpSA+IGZpcm07Civpg6jpmoogPiBhcm15Owor5LiK5ryyID4gcmlzZTsKK+azsOeEtiA+IGNhbG07CivpvaflkqwgPiBnbmF3Owor56iA5bCRID4gcmFyZTsKK+m7keaalyA+IGRhcms7Civms6LnibkgPiBiYXVkOwor6YeO56a9ID4gZm93bDsKK+aaiOecqSA+IGRhemU7CivlpZTpgIMgPiBmbGVlOwor6buO5piOID4gZGF3bjsKK+ayu+eZkiA+IGN1cmU7CivmhI/mgJ0gPiBpZGVhOwor5p+Q5LqbID4gc29tZTsKK+aEj+W/tSA+IGlkZWE7CivnuYHpm5wgPiBtYW55Owor5oSP5b+XID4gd2lsbDsKK+eoseWRvCA+IGNhbGw7Civmm7jmoYwgPiBkZXNrOwor5by36aKoID4gZ2FsZTsKK+mbhOm5vyA+IGJ1Y2s7CivpurvmnKggPiBudW1iOwor5pyD5pmkID4gbWVldDsKK+m7g+aYjyA+IGR1c2s7CivpoIXnm64gPiBpdGVtOwor6Z+B57mpID4gcmVpbjsKK+WUr+S4gCA+IG9ubHk7Civpm7Lpm4AgPiBsYXJrOwor54eS6ZaLID4gYm9pbDsKK+epgOWAiSA+IGJhcm47CivmnY7lrZAgPiBwbHVtOwor6IG35L2NID4gcG9zdDsKK+mHjueUnyA+IHdpbGQ7CivlkKbmsbogPiB2ZXRvOwor5rKZ55m8ID4gc29mYTsKK+azoua1qiA+IHdhdmU7CivkuIDmqKMgPiBzYW1lOwor5LuW5YCRID4gdGhleTsKK+azoeayqyA+IGZvYW07CivmraXpqZ8gPiBzdGVwOwor6ICB5amGID4gd2lmZTsKK+S4u+aEjyA+IHBsYW47CivpnZLom5kgPiBmcm9nOwor5pys5a2QID4gYm9vazsKK+eJm+iCiSA+IGJlZWY7CivosZDlr4wgPiByaWNoOwor5LiD5pyIID4ganVseTsKK+mKt+WUriA+IHNlbGw7CivkuIrmmIcgPiByaXNlOwor5ZOO5ZGAID4gZGFtbjsKK+mereesniA+IGZsb2c7CivkuIDmnI0gPiBkb3NlOwor5aSp6LOmID4gZ2lmdDsKK+irh+ipsSA+IHRhbGs7CivosYblrZAgPiBiZWFuOwor5aq95aq9ID4gbWFtYTsKK+WQjOaooyA+IHNhbWU7Civno5rnk6YgPiB0aWxlOwor5pWP6YqzID4ga2VlbjsKK+ayueayuSA+IG9pbHk7Civms6LmnZ8gPiBiZWFtOwor5YyF6KOdID4gcGFjazsKK+azleahiCA+IGJpbGw7CivmsaHnl5UgPiBibG90Owor6Ymk5a2QID4gaG9vazsKK+WNsOeroCA+IHNlYWw7CivpnZzohIggPiB2ZWluOwor55+l6YGTID4ga25vdzsKK+eMm+aSniA+IHNsYW07Civpgbzpl4ogPiB2YXN0Owor5pWF6YSJID4gaG9tZTsKK+mdoue9qSA+IHZlaWw7Civlvp7ogIwgPiB0aHVzOwor5b+Z56KMID4gYnVzeTsKK+mereeXlSA+IHdlbHQ7Civpgorpi5IgPiB3aW5nOwor6YW455ebID4gYWNoZTsKK+W7o+mXiiA+IHdpZGU7CivnpZ7mg4UgPiBsb29rOwor5Lqe5LiBID4gYWRlbjsKK+eNqOWljyA+IHNvbG87CivmspDmtbQgPiBiYXRoOwor5pyA5aW9ID4gYmVzdDsKK+eMluaKqyA+IHdpbGQ7CivlkoDlmrwgPiBjaGV3Owor5aSW6KKNID4gcm9iZTsKK+iqk+ipniA+IG9hdGg7Civli5XoqZ4gPiB2ZXJiOwor546p5YG2ID4gZG9sbDsKK+iqk+iogCA+IG9hdGg7CivoloTmmq4gPiBkdXNrOwor57qW57SwID4gZmluZTsKK+S4i+W3tCA+IGNoaW47CivmlrDogZ4gPiBuZXdzOwor542F5a2QID4gbGlvbjsKK+abtOWkmiA+IG1vcmU7Civlop7plbcgPiBncm93Owor5Y+q5pyJID4gb25seTsKK+WRhuWtkCA+IGZvb2w7CivmmrTlvpIgPiB0aHVnOwor5rG95rC0ID4gc29kYTsKK+mdouepjSA+IGFyZWE7Civlkb3lkI0gPiBuYW1lOwor5q616JC9ID4gcGFydDsKK+efreilqiA+IHNvY2s7CivlvJXorYkgPiBjaXRlOwor6YiV5bi2ID4gYm9uZDsKK+WJjemdoiA+IGZvcmU7CivpmaPpoqggPiBndXN0Owor57eo6LyvID4gZWRpdDsKK+atu+iomCA+IGNyYW07Civmg6HliqMgPiB2aWxlOwor5rWB5YuVID4gZmxvdzsKK+acg+WQiCA+IG1lZXQ7Civmr5vnt5ogPiB5YXJuOwor5YyX57SEID4gbmF0bzsKK+mHjeaTiiA+IGJhbmc7CivmtL7lh7ogPiBzZW5kOwor8KCxgyA+IHRoaW47CivmsaDmsrwgPiBwb29sOwor5q2l6Kq/ID4gZ2FpdDsKK+e5qee0oiA+IHJvcGU7CivpgJrpoqggPiBhaXJ5Owor5oGQ5oe8ID4gZmVhcjsKK+eijueJhyA+IGNoaXA7Civnt5rot68gPiBsaW5lOwor5LiA5aWXID4gc3VpdDsKK+WNoeeJhyA+IGNhcmQ7CivpoZ7lnosgPiB0eXBlOwor5YyF57SuID4gYmluZDsKK+S4reWNiCA+IG5vb247Civmraboo50gPiBhcm1zOwor6JaE5byxID4gd2VhazsKK+S4gOWghiA+IHBpbGU7Civorormj5sgPiB2YXJ5Owor6JK855m9ID4gcGFsZTsKK+awtOa7tCA+IGRyb3A7Civnt6nop6MgPiBlYXNlOwor5pyJ5LqbID4gc29tZTsKK+aciOS6riA+IG1vb247CivlubTpoK0gPiB5ZWFyOwor56Sm5bGxID4gbWluZTsKK+mBk+i3ryA+IHJvYWQ7CivmtJfliLcgPiB3YXNoOwor6Zm46LuNID4gYXJteTsKK+aUtuiXjyA+IGtlZXA7Civmk6DpgLIgPiB0dWNrOwor5LiK5Y+4ID4gYm9zczsKK+mgmOWwjiA+IGxlYWQ7CivmsLTmsaAgPiBwb25kOwor6Zu757eaID4gd2lyZTsKK+S4gOWQuSA+IHB1ZmY7Civmr5vnmq4gPiBwZWx0Owor54OP6bSJID4gY3JvdzsKK+WLnue0ryA+IHRvaWw7CivpgYvosrsgPiBmYXJlOwor5aOB6JmxID4gdGljazsKK+aSpemWiyA+IHBva2U7CivoqK3oqIggPiBwbGFuOwor6L+36ZmjID4gbWF6ZTsKK+WQneWXhyA+IG1lYW47CivkuIDljYogPiBoYWxmOwor6aCC5bOwID4gcGVhazsKK+iXpeS4uCA+IHBpbGw7CivmmJ/mnJ8gPiB3ZWVrOwor5rC05qe9ID4gc2luazsKK+e8uuWwkSA+IGxhY2s7CivkuJbku4cgPiBmZXVkOwor5pKe6Y6WID4gbG9jazsKK+mereaSuyA+IGxhc2g7CivpmbDorIAgPiBwbG90Owor5Y6t5oGoID4gaGF0ZTsKK+mBh+imiyA+IG1lZXQ7CivmmI7mmJ8gPiBzdGFyOwor5LiN5LiAID4gdmFyeTsKK+isgOaxgiA+IHNlZWs7CivpnLLnh58gPiBjYW1wOwor5q+S54mpID4gcGVzdDsKK+aaluWSjCA+IHdhcm07CivkuIDkupsgPiBzb21lOwor6Z6t5omTID4gd2hpcDsKK+WPq+WbgiA+IGhvb3Q7CivngrrpppYgPiBoZWFkOwor5rGC5oSbID4gd29vOwor5ZCM5L2NID4gcGFyOwor6Zyy5rC0ID4gZGV3Owor5Y+X5YiwID4gZ2V0Owor5Y+v5LulID4gY2FuOwor6YWS5buKID4gYmFyOwor5Y2a5b6XID4gd2luOwor5Y+K5YW2ID4gYW5kOwor55+z5rK5ID4gb2lsOwor5pmC5LujID4gYWdlOwor5q+v5a2QID4gcnVnOwor5bm057SAID4gYWdlOwor5aWX5a2QID4gY2FwOwor56C05biDID4gcmFnOwor6a2a6bCtID4gZmluOwor5by35ouJID4gdHVnOwor57aT55SxID4gdmlhOwor5aKo5rC0ID4gaW5rOwor6Kit5rOVID4gdHJ5Owor6ZaT6KucID4gc3B5Owor55y8552bID4gZXllOwor5q2k5pmCID4gbm93Owor5aaC5L2VID4gaG93Owor57WC56uvID4gZW5kOwor55y855WMID4ga2VuOwor5bm85424ID4gY3ViOwor6Zui5a2QID4gaW9uOwor54Sm5rK5ID4gdGFyOwor6YCA5r2uID4gZWJiOwor54Gr6IW/ID4gaGFtOwor6Zmw5pqXID4gZGltOwor57eK5oqxID4gaHVnOwor57i95ZKMID4gc3VtOwor6KaP546HID4gbGF3Owor6Zqx5a+GID4gc2x5Owor56CN5LyQID4gaGV3Owor5Yi65o6iID4gcHJ5Owor6Iq46Iq4ID4gYWxsOwor6Imy6Kq/ID4gaHVlOwor5YGH6auuID4gd2lnOwor6YCU5b6RID4gd2F5Owor5YmN5aSVID4gZXZlOwor5aCF5p6cID4gbnV0Owor5YWI55SfID4gc2lyOwor5qyE5ZyIID4gcGVuOwor5qmh5qi5ID4gb2FrOwor6Iy25p2vID4gY3VwOwor6Kaq5bGsID4ga2luOwor5ouW6LuKID4gdG93Owor5aGr5YWFID4gcGFkOwor5bi95a2QID4gaGF0Owor5pCW5pO6ID4gd2FnOwor55y85YmNID4gbm93Owor5YiA5Y+jID4gY3V0Owor5qiF5qi5ID4gZmlyOwor55So6YCUID4gdXNlOwor55Sc6YWSID4gcnVtOwor55y85LiLID4gbm93Owor5Ye65YO5ID4gYmlkOwor6KWv5aKKID4gcGFkOwor5YKz55yfID4gZmF4Owor6Ium5oOxID4gYWlsOwor6IWz6La+ID4gdG9lOwor5ouW6Ii5ID4gdG93Owor6aqo572IID4gdXJuOwor55m85oCSID4gbWFkOwor6Luf5q+bID4gZnVyOwor6IeC6IaAID4gYXJtOwor6LyV5omTID4gdGFwOwor5pC25YqrID4gcm9iOwor5YWS5a2QID4gc29uOwor5omv6KOCID4gcmlwOwor5bCP6LK7ID4gdGlwOwor5qaG5qi5ID4gZWxtOwor5ZWc6aOyID4gc2lwOwor5bel5L2cID4gam9iOwor5o+05YqpID4gYWlkOwor6IKL6aqoID4gcmliOwor6J2Z6J2gID4gYmF0Owor6b6N6aCtID4gdGFwOwor5omL6IeCID4gYXJtOwor5re36ZucID4gbWl4Owor5Zyw5ZyWID4gbWFwOwor6ayG5bybID4gc2FnOwor55Sf55eFID4gaWxsOwor6KKL5a2QID4gYmFnOwor6aSh6aSFID4gcGllOwor5bCE57eaID4gcmF5Owor6Yuk6aCtID4gaG9lOwor6Yu46ZaLID4gc2F3Owor6ICB6bygID4gcmF0Owor5p6c6YasID4gamFtOwor6KGj5aS+ID4gcGVnOwor5ZyN5YWcID4gYmliOwor5ouW5oqKID4gbW9wOwor5LmI6bueID4gYWNlOwor5bCP54uXID4gcHVwOwor6LKo6LuKID4gdmFuOwor5oiw54itID4gd2FyOwor6bue6aCtID4gbm9kOwor6IKl6IOWID4gZmF0Owor5bCN5rqWID4gYWltOwor5Zm05bCEID4gamV0Owor5YKi5LyZID4gZ3V5Owor6IiJ5YuVID4gYWN0Owor6bqL6bm/ID4gZWxrOwor5pyo6YeYID4gcGVnOwor55Om5pavID4gZ2FzOwor6ami5a2QID4gYXNzOwor55S35a2pID4gYm95Owor5omA5pyJID4gYWxsOwor6ZGw5YyZID4ga2V5Owor5ZO86IGyID4gaHVtOwor5LmF6YGgID4gb2xkOwor6aOb6J+yID4gYnVnOwor562G5bCWID4gbmliOwor6bql6YWSID4gYWxlOwor5L+u5aWzID4gbnVuOwor5L6/5bi9ID4gY2FwOwor5pyD6LK7ID4gZHVlOwor5bC85aeRID4gbnVuOwor5Lm+6I2JID4gaGF5Owor5YCf5YK1ID4gb3dlOwor5oeH5rGCID4gYmVnOwor5bGi5YqgID4gcGx5Owor6aOb57+UID4gZmx5Owor5omH5a2QID4gZmFuOwor6IWQ5aOeID4gcm90Owor56m65rCjID4gYWlyOwor5L2G5pivID4gYnV0Owor6Jed6KGTID4gYXJ0Owor5a6J5pS+ID4gbGF5Owor5Zea5ZK9ID4gc29iOwor5p+T5paZID4gZHllOwor5LuY5qy+ID4gcGF5Owor5LiN6ImvID4gYmFkOwor6LSP5b6XID4gd2luOwor6aCM6KmeID4gb2RlOwor5Lm+54elID4gZHJ5Owor5ZGK57WCID4gZW5kOwor5rG96LuKID4gY2FyOwor5rW354GjID4gYmF5Owor6ICz5py1ID4gZWFyOwor5L2N5YWDID4gYml0Owor5LqU5pyIID4gbWF5Owor5L2V5Lq6ID4gd2hvOwor54eV6bqlID4gb2F0Owor5rCj6LuKID4gYnVzOwor5pyr5pyfID4gZW5kOwor5q+N6ZueID4gaGVuOwor5ZOA5oSBID4gc2FkOwor56Sm55+zID4gb3JlOwor5ZOA5oCoID4gc2FkOwor5aSq6Zm9ID4gc3VuOwor5oCV576eID4gY295Owor5p2v5a2QID4gY3VwOwor6KyK6KmxID4gbGllOwor6KyK6KiAID4gbGllOwor6Zu26aCtID4gb2RkOwor5Lu75L2VID4gYW55Owor5reo5YC8ID4gbmV0Owor5aWU6LeRID4gcnVuOwor5aWU6LWwID4gcnVuOwor5rWB5oSfID4gZmx1Owor5ZOO5ZayID4gaGV5Owor54++5LuKID4gbm93Owor5pqX5rehID4gZGltOwor5piv55qEID4geWVzOwor5LiA5o6SID4gcm93Owor5pa56IifID4gYXJrOwor5paw6IiIID4gbmV3Owor5LiK5bidID4gZ29kOwor6ICM5LuKID4gbm93Owor5Y+v5pivID4gYnV0Owor5rG95rK5ID4gZ2FzOwor54iG6IGyID4gcG9wOwor572q5oOhID4gc2luOwor5pS26LK7ID4gZmVlOwor5q+N576KID4gZXdlOwor5rOV5b6LID4gbGF3Owor5oCO5qijID4gaG93Owor6Zue6JuLID4gZWdnOwor5LiN5ZaEID4gYmFkOwor6bC76a2aID4gZWVsOwor5aSp56m6ID4gc2t5Owor5oKy5YK3ID4gc2FkOwor5bqK6YuqID4gYmVkOwor5Lim5LiUID4gYW5kOwor5Yil6YedID4gcGluOwor57ir57SJID4gc2V3Owor5LiA5YiHID4gYWxsOwor6YCa6YCaID4gYWxsOwor5bmz6Y2LID4gcGFuOwor5pS+572uID4gcHV0Owor5bm06YKBID4gb2xkOwor5q+N54mbID4gY293Owor5aaC5p6cID4gaWY7CivpgoTmmK8gPiBvcjsKK+eahOipsSA+IGlmOwor5YWJ56KfID4gY2Q7CivopoHmmK8gPiBpZjsKK+iLpeaYryA+IGlmOwor5ZqH6IGyID4gaG87CivmiJbogIUgPiBvcjsKK+aIkeeahCA+IG15Owor5YGH5aaCID4gaWY7CivmiJHlgJEgPiB3ZTsKK+WViuWRgCA+IG9oOwor5pan6aCtID4gYXg7CivkuIDkvYYgPiBpZjsKK+S4gOWAiyA+IGE7CivjoY4gPiB0aGVcLWxvbmdcLWJhbmRzXC1vclwtcmliYm9uc1wtYXR0cmFjaGVkXC10b1wtZmxhZ3NcLWFuZFwtYmFubmVyc1wtdGhlXC1mZWF0aGVyXC1kZWNvcmVjdGVkXC1jYXJyaWFnZXNcLW9yXC1kcmVzc2VzOwor6YOvID4gbmFtZVwtb2ZcLWFcLXNtYWxsXC1hbmNpZW50XC1wcmluY2lwYWxpdHlcLXdoaWNoXC13YXNcLXNpdHVhdGVkXC1pblwtd2hhdFwtaXNcLW5vd1wtcGFydFwtb2ZcLXNoYW50dW5nXC1hbmRcLWtpYW5nc3U7CivkkJ4gPiB0aGVcLXRoaW5cLW1lbWJyYW5lXC1iZXR3ZWVuXC1za2luXC1hbmRcLWZsZXNoXC10aGF0XC1wcm90ZWN0c1wtaW50ZXJuYWxcLW9yZ2Fuc1wtb3JcLXRpc3N1ZXNcLWluXC10aGVcLWh1bWFuXC1ib2R5Owor54+qID4gYVwtamFkZVwtdGFibGVcLWNvbmZlcnJlZFwtdXBvblwtZmV1ZGFsXC1wcmluY2VzXC1ieVwtdGhlXC1lbXBlcm9yXC1hc1wtYVwtc3ltYm9sXC1vZlwtZGlnbml0eVwtYW5kXC1hdXRob3JpdHk7CivjurogPiBhXC12ZXJ5XC1wcmVjaW91c1wtcGllY2VcLW9mXC1qYWRlXC13b3JuXC1ieVwtYW5jaWVudFwtZW1wZXJvcnNcLXRvXC1tYXRjaFwtdGFibGVzXC1ib3JuZVwtYnlcLXRoZVwtbm9ibGVzOwor5ICYID4gdG9cLWNvdmVyXC10aGVcLWxpbmVcLW9mXC12aXNpb25cLW9yXC1zaWdodFwtXC1cLXRoZVwtc3RyYWlnaHRcLWxpbmVcLWJldHdlZW5cLWFuXC1vYmplY3RcLWFuZFwtb25lJydzXC1leWVzOwor46inID4gd29vZGVuXC1zdGlja1wtb3JcLWJhbWJvb1wtY2FuZVwtdXNlZFwtdG9cLXN1cHBvcnRcLXRoZVwtY292ZXJpbmdcLW9mXC1hXC1jYXJyaWFnZVwtaW5cLWFuY2llbnRcLXRpbWVzOwor45SjID4gaW5cLWFuY2llbnRcLXRpbWVzXC10b1wtZmlnaHRcLWFnYWluc3RcLXRoZVwtZW5lbXlcLWJ5XC1wdXNoaW5nXC1kb3duXC10aGVcLWJpZ1wtcm9ja3NcLWZyb21cLXVwXC1oaWdoOwor5JqrID4gb3JuYW1lbnRhbFwtYXJ0aWNsZXNcLW1hZGVcLW9mXC1ob3Juc1wtdXNlZFwtdG9cLWRlY29yYXRlXC10aGVcLXRvcFwtb2ZcLWFcLXN0aWNrXC1vclwtaG9yc2V3aGlwOwor56yQID4gYmFtYm9vc1wtcGxhY2VkXC1hY3Jvc3NcLXdvb2RlblwtZnJhbWVzXC1vblwtd2hpY2hcLWdyYWluXC1tYXlcLWJlXC1zdG9yZWRcLWluXC1kYW1wXC1jbGltYXRlczsKK+SjniA+IG5hbWVcLW9mXC1hblwtYW5jaWVudFwtc3RhdGVcLXdoaWNoXC1vY2N1cGllZFwtdGhlXC1zaXRlXC1vZlwtdGhlXC1wcmVzZW50XC1wcm92aW5jZVwtb2ZcLWh1YmVpOwor5Ie2ID4gYVwtc21hbGxcLXJhZnRlcnNcLW1hZGVcLW9mXC1iYW1ib29cLXdoaWNoXC1wcm9qZWN0XC1mb3JtXC10aGVcLWVhdmVzXC1hbmRcLXN1cHBvcnRcLXRoZVwtdGlsZXM7Civos6ggPiB0cmlidXRlXC1wYWlkXC1pblwtY2xvdGhcLWJ5XC10aGVcLXRyaWJlc1wtaW5cLXN6ZWNod2FuXC1hbmRcLXl1bm5hblwtdW5kZXJcLXRoZVwtaGFuXC1keW5hc3R5Owor56arID4gc2FjcmlmaWNlXC1vZmZlcmVkXC1hdFwtdGhlXC1lbmRcLW9mXC10aGVcLXRocmVlXC15ZWFycycnXC1tb3VybmluZ1wtdGhlXC1kZWF0aFwtb2ZcLWFcLXBhcmVudDsKK+SCqSA+IGFuXC1pblwtc2xhYlwtb3JcLWlua1wtc3RvbmVcLXNvdW5kXC1vZlwtcGViYmxlc1wtb3JcLXN0b25lc1wtcnViYmluZ1wtb3JcLWtub2NraW5nXC10b2dldGhlcjsKK+SCjSA+IGFcLWtpbmRcLW9mXC13ZWFwb25cLWNhcnJpZWRcLWJ5XC10aGVcLWhvbm9yXC1ndWFyZFwtYmVmb3JlXC10aGVcLWVtcGVyb3JcLWluXC1hbmNpZW50XC10aW1lczsKK+ihiCA+IHRoZVwtYmxvb2RcLW9mXC1hXC1zYWNyaWZpY2lhbFwtZm93bFwtd2hpY2hcLXdhc1wtc3ByaW5rbGVkXC1vblwtdGhlXC1kb29yc1wtYW5kXC12ZXNzZWxzOwor46+pID4gdG9cLXB1dFwtdGhlXC1ncm93aW5nXC11cFwtc2lsa3dvcm1zXC1pblwtZGlmZmVyZW50XC1mcmFtZXNcLWFjY29yZGluZ1wtdG9cLXRoZWlyXC1zaXplczsKK+OasyA+IGFcLWxhZHlcLXRlYWNoZXJcLXRvXC10ZWFjaFwtdGhlXC1wcm9wZXJcLXJ1bGVzXC1vZlwtZmVtYWxlXC1iZWhhdmlvclwtaW5cLWFuY2llbnRcLXRpbWVzOwor57WlID4gdG9cLWhhcm5lc3NcLWFcLWhvcnNlXC1hXC1ib2FyZFwtaW5cLWZyb250XC1vZlwtYVwtY2FycmlhZ2VcLWZvclwtdGhlXC1kcml2ZXJcLXRvXC1sZWFuXC1vbjsKK+SLrSA+IHRvXC13ZWF2ZVwtc2lsa1wtZmFicmljc1wtd2l0aFwtZ3JlZW5cLWNvbG9yXC1mb3JcLWxvbmdpdHVkZVwtYW5kXC13aGl0ZVwtZm9yXC1sYXRpdHVkZTsKK+OtvCA+IGFcLXJlY3RhbmdsZVwtc2hhcGVkXC1wZWdcLW9yXC1zaG9ydFwtcG9zdFwtYmV0d2VlblwtdGhlXC1iZWFuc1wtYW5kXC10aGVcLXJvb2ZcLXRpbWJlcnM7CivnkYQgPiBhXC1vcm5hbWVudGFsXC1waWVjZVwtb2ZcLWphZGVcLXNldmVyYWxcLWluY2hlc1wtYWNyb3NzXC13aXRoXC1hXC1ob2xlXC1pblwtdGhlXC1jZW50ZXI7CivkrKQgPiB0b1wtcHV0XC10aGVcLXRoaWNrXC1zb3VwXC1vclwtYnJvdGhcLW9uXC10b3BcLW9mXC10aGVcLXJpY2VcLXRoaWNrXC1jb25nZWVcLW9yXC1wb3JyaWRnZTsKK+SlryA+IGFcLWZhcm1cLXRvb2xcLXRvXC1jcnVzaFwtdGhlXC1jbG9kXC1vZlwtZWFydGhcLWludG9cLXBpZWNlc1wtYW5kXC1tYWtlXC10aGVcLWxhbmRcLWZsYXQ7CivkjZYgPiBhXC1raW5kXC1vZlwtbmV0XC1lcXVpcHRlZFwtd2l0aFwtdHJpY2t5XC1tYWNoaW5lXC11c2VkXC10b1wtY2F0Y2hcLWJpcmRzXC1hbmRcLWJlYXN0czsKK+SOrSA+IGFcLWtpbmRcLW9mXC1mYXJtXC10b29sXC1tYWRlXC1vZlwtdHdpc3RlZFwtdGhyb25cLXN0cmlwc1wtdXNlZFwtdG9cLWZsYXRlblwtdGhlXC1sYW5kOwor562TID4gYVwtaGFpcnBpblwtb25cLXdoaWNoXC10aGVcLWhhaXJcLWlzXC1ib3VuZFwtYXRcLXRoZVwtYmFja1wtb2ZcLXRoZVwtaGVhZFwuXC0xNVwtb2ZcLWFnZTsKK+OusiA+IGFcLXNtYWxsXC1yaW5nXC1vclwtYVwtc21hbGxcLXBpZWNlXC1vZlwtYm9hcmRcLWF0dGFjaGVkXC10b1wtdGhlXC1tdXp6bGVcLW9mXC1hblwtb3g7CivktbsgPiBhXC1zbWFsbFwtdHJpcG9kXC1vZlwtYnJvbnplXC13aXRoXC10d29cLWVhcnNcLXRyaXBvZFwtb2ZcLWJyb256ZVwtd2l0aFwtdHdvXC1lYXJzOwor546gID4gbGFyZ2VcLWphZGVcLXRhYmxldFwtdXNlZFwtYnlcLW9mZmljaWFsc1wtYXRcLWNvdXJ0XC10b1wtaW5kaWNhdGVcLXRoZWlyXC1yYW5rczsKK+SCnCA+IHJvY2t5XC1maW5lXC1zdG9uZVwtd2hpY2hcLWlzXC1saXR0bGVcLWxlc3NcLXZhbHVhYmxlXC10aGFuXC1qYWRlXC10b1wtY29sbGFwc2U7CivjoYYgPiBhblwtYXJ0aXNhblwtdG9cLXNvZnRlblwtcmF3XC1zaWxrXC1ieVwtYm9pbGluZ1wtYW5kXC10b1wtZHllXC10aGVcLWRyZXNzZWRcLXNpbGs7CivjoYMgPiBhblwtYXJ0aXNhblwtdG9cLXNvZnRlblwtcmF3XC1zaWxrXC1ieVwtYm9pbGluZ1wtYW5kXC10b1wtZHllXC10aGVcLWRyZXNzZWRcLXNpbGs7Civoo44gPiB0b1wtdGFrZVwtb2ZmXC10aGVcLWNsb3RoZXNcLWFuZFwtZXhwb3NlXC10aGVcLWJvZHlcLlwtdG9cLWNhcnJ5XC1pblwtdGhlXC1naXJkbGU7CivpjosgPiB0aGVcLWxpbmNoXC1waW5cLW9mXC1hXC13aGVlbFwtdG9cLWdvdmVyblwtb3JcLWNvbnRyb2xcLXRoZVwtbm9pc2VcLW9mXC1hXC1iYXJyb3c7CivkqpAgPiBzb21ldGhpbmdcLW1hZGVcLW9mXC1iYW1ib29cLXB1dFwtaW5cLXRoZVwtYm93XC1jYXNlXC10b1wtcHJldGVjdFwtZnJvbVwtZGFtYWdlOwor5IetID4gY29udGFpbmVyc1wtbWFkZVwtb2ZcLXRoaW5cLWFuZFwtbG9uZ1wtc3RyaXBcLW9mXC1iYW1ib29cLW9yXC13aWxsb3dcLWJyYW5jaGVzOwor45+sID4gYVwtbW91bnRhaW5cLWluXC10b2RheScnc1wtc2hhbmRvbmdcLXByb3ZpbmNlXC1zb3V0aHdlc3RcLW9mXC1tZW5neWluXC1jb3VudHk7CivjmqUgPiB0b1wtYmVjb21lXC1hc3NvY2lhdGVkXC13aXRoXC1lYWNoXC1vdGhlclwtaW5cLWdvb2RcLW1hbm5lcnNcLWFuZFwtcG9saXRlbmVzczsKK+SkniA+IGFcLWtpbmRcLW9mXC13ZWFwb25zXC1oZWxkXC1ieVwtdGhlXC1vZmZpY2lhbHNcLWluXC1hdHRlbmRhbmNlXC1pblwtb2xkXC10aW1lczsKK+O5qyA+IGFcLWtpbmRcLW9mXC1hbmltYWxcLWdlbmVyYWxseVwtY2FsbGVkXC1mb3JcLW1pbm9yaXR5XC1ncm91cHNcLWluXC1vbGRcLWNoaW5hOwor47O7ID4gYVwtYmFua1wtb2ZcLWVhcnRoXC1vclwtYW5cLWVtYmFua21lbnRcLXRvXC1ibG9ja1wtdGhlXC1jdXJyZW50XC1vZlwtdGhlXC13YXRlcjsKK+OvoiA+IGFcLXBpZWNlXC1vZlwtY3Jvc3NcLXdpc2VcLWJvYXJkXC11c2VkXC1mb3JcLWZyYW1lXC1vblwtd2hpY2hcLXNpbGt3b3Jtc1wtc3BpbjsKK+SDmCA+IHNpbXBsZVwtYW5kXC1jcnVkZVwtdGhlXC1zb3VuZFwtb2ZcLXBlYmJsZXNcLW9yXC1zdG9uZXNcLWtub2NraW5nXC10b2dldGhlcjsKK+OwsSA+IHRvXC1zbWVhclwtdGhlXC1tb3V0aFwtd2l0aFwtdGhlXC1ibG9vZFwtb2ZcLWFcLXZpY3RpbVwtd2hlblwtdGFraW5nXC1hblwtb2F0aDsKK+eNryA+IGFcLXRyaWJlXC1vZlwtc2N5dGhpYW5zXC13aGljaFwtaW52YWRlZFwtY2hpbmFcLWR1cmluZ1wtdGhlXC1oc2lhXC1keW5hc3R5Owor6Z6UID4gc2lkZXNcLW9yXC11cHBlcnNcLW9mXC1zaG9lc1wtdG9cLXN0cmV0Y2hcLWFcLXNraW5cLW9uXC1hXC1mcmFtZVwtZm9yXC1hXC1kcnVtOwor5JW9ID4gdGhlXC1yaG9kb2RlbmRyb25cLVwtXC1cLWl0XC1pc1wtc2FpZFwtdG9cLWNhdXNlXC1zaGVlcFwtdG9cLXN0YWdnZXJcLWFuZFwtZGllOwor6YOcID4gbmFtZVwtb2ZcLWZpZWZcLWluXC1zaGFudG9uZ1wtYmVzdG93ZWRcLW9uXC10aGVcLWVsZGVzdFwtc29uXC1vZlwtd2VuXC13YW5nOwor5I2/ID4gYVwta2luZFwtb2ZcLWRhbmNlXC1hY2NvbXBhbmllZFwtYnlcLW11c2ljXC1wZXJmb3JtZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+SMniA+IGFcLWtub3RcLXRvXC1oYW5nXC10aGVcLWFwcGFyYXR1c1wtbWFkZVwtb2ZcLXJlZWRcLWZvclwtcmFpc2luZ1wtc2lsa3dvcm1zOwor5IeJID4gY2FwYWNpdHlcLXVuaXRcLWluXC1mcmFuY2VcLWVxdWFsXC10b1wtb25lXC1odW5kcmVkXC10aW1lc1wtb2ZcLW9uZVwtbGl0cmU7CivjvYggPiBhXC1sYXJnZVwtZWFydGhlbndhcmVcLWphclwtd2l0aFwtYVwtc21hbGxcLW1vdXRoXC1hbmRcLXR3b1wtb3JcLWZvdXJcLWVhcnM7CivjuZAgPiB0b1wtdG93XC1hXC1ib2F0XC1hZ2FpbnN0XC10aGVcLWN1cnJlbnRcLWluXC1zd2lmdFwtc3RyZWFtXC1mcm9tXC10aGVcLWJhbms7CivmsoUgPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC13ZXN0ZXJuXC1odW5hblwtdGhhdFwtZmxvd3NcLWludG9cLWRvbmd0aW5nXC1sYWtlOwor57CLID4gYVwtc3F1YXJlXC1iYXNrZXRcLW9mXC1iYW1ib29cLWZvclwtaG9sZGluZ1wtZ3JhaW5cLXVzZWRcLWF0XC1zYWNyaWZpY2VzOwor6be0ID4gc2lsdmVyXC1waGVhc2FudFwtYmFkZ2VcLXdvcm5cLWJ5XC1jaXZpbFwtb2ZmaWNpYWxzXC1vZlwtdGhlXC01dGhcLWdyYWRlOwor6J+VID4gYVwtc3BlY2llc1wtb2ZcLXRvcnRvaXNlXC1mb3VuZFwtbmVhclwtdGhlXC1tb3V0aFwtb2ZcLXRoZVwteWVsbG93XC1yaXZlcjsKK+OshiA+IHBvc3RodW1vdXNcLXRpdGxlXC1jb25mZXJyZWRcLXVwb25cLWVtcGVyb3JzXC1hbmRcLWVtaW5lbnRcLW9mZmljaWFsczsKK+OUsyA+IGFcLXNxdWFyZVwtYmFza2V0XC1vZlwtYmFtYm9vXC1mb3JcLWhvbGRpbmdcLWdyYWluXC11c2VkXC1hdFwtc2FjcmlmaWNlczsKK+menSA+IHRoZVwtcGllY2VcLW9mXC1sZWF0aGVyXC11c2VkXC1mb3JcLXNvbGVzXC1vblwtY2hpbmVzZVwtc2hvZXNcLlwtYVwtcGF0Y2g7CivolJsgPiBhXC1zbWFsbFwtb3JjaGlkXC1saWtlXC1wbGFudFwtaXRcLWJlYXJzXC13aGl0ZVwtZmxvd2Vyc1wtYVwtZGVuZHJvYml1bTsKK+SwmSA+IGFuXC1hbmNpZW50XC11bml0XC1vZlwtY2FwYWNpdHlcLXdpdGhcLXRocmVlXC1mZWV0XC1hbmRcLWFcLWJpZ1wtb3BlbmluZzsKK+SUuSA+IGFcLWZ1bmd1c1wtd2hpY2hcLWdyb3dzXC1vblwtcm90dGVuXC1wbGFudHNcLWFuZFwtaXNcLWVhdGVuXC13aGVuXC1mcmVzaDsKK+OvoyA+IGFcLWtpbmRcLW9mXC1mcmFncmFudFwtdHJlZVwtdXNlZFwtdG9cLXByb2R1Y2VcLXBlcmZ1bWVcLWJ5XC1idXJuaW5nXC1pdDsKK+OvoSA+IHRvXC1sYWNxdWVyXC1zb21lXC1raW5kXC1vZlwtYXNoZXNcLW9uXC13b29kZW5cLWFydGljYWxzXC1vclwtZnVybml0dXJlOwor5bOLID4gcmFuZ2VzXC1vZlwtaGlsbHNcLXN0cmV0Y2hpbmdcLW9uXC1iZXlvbmRcLWFub3RoZXJcLWlycmVndWxhclwtcGVha3M7CivmrYMgPiBzbWVhclwtb25lJydzXC1tb3V0aFwtd2l0aFwtYmxvb2RcLW9mXC1hXC12aWN0aW1cLXdoZW5cLXRha2luZ1wtYW5cLW9hdGg7CivnvpcgPiB0cmliZXNcLWluXC13ZXN0XC1jaGluYVwtc3Ryb25nXC5cLWVkdWNhdGVkXC5cLW9ic3RpbmF0ZVwuXC1hXC1wYXJ0aWNsZTsKK+S4oyA+IGFuY2llbnRcLWZvcm1cLW9mXC10aGVcLXRlbnRoXC1vZlwtdGhlXC10d2VsdmVcLXRlcnJlc3RyaWFsXC1icmFuY2hlczsKK+ShhSA+IHNvbWV0aGluZ1wtdXNlZFwtdG9cLWJpbmRcLXRoZVwtZnJhbWVcLXdvcmtcLWluXC1hXC1jYXJ0XC1vZlwtb2xkXC10aW1lczsKK+SaqCA+IGFcLXN0cmluZ1wtZmFzdGVuZWRcLXRvXC1hblwtYXJyb3dcLXRvXC1kcmF3XC1pdFwtYmFja1wtYWZ0ZXJcLXNob290aW5nOwor5I6gID4gdG9cLXR3aXN0XC1vclwtdG9cLWNydW1wbGVcLWJldHdlZW5cLWhhbmRzXC1hbmRcLW1ha2VcLXNvbWV0aGluZ1wtdHVybjsKK+OfuSA+IHRoZVwtYXBwZWFyYW5jZVwtb2ZcLWFcLW1vdW50YWluXC1pc1wtbG9mdHlcLWFuZFwtc3RlZXBcLWFuZFwtcHJvZm91bmQ7CivjnbggPiBhXC1jb25pY2FsXC1jYXBcLXdvcm5cLW9uXC1jZXJlbW9uaW91c1wtb2NjYXNpb25zXC1pblwtYW5jaWVudFwtdGltZXM7CivjmaggPiB0aGVcLXJveWFsXC1kb21haW5zXC1zZXRcLWFwYXJ0XC1pblwtYW5jaWVudFwtdGltZXNcLWZvclwtdGhlXC1lbXBlcm9yOwor6KGpID4gdGhlXC1vcGVuXC1zZWFtXC1vZlwtYVwtZ2FybWVudFwtd2hpY2hcLWFsbG93c1wtZnJlZWRvbVwtb2ZcLW1vdmVtZW50Owor5bG6ID4gYVwtaGlsbFwtd2l0aFwtdHJlZXNcLW9yXC1ncmFzc1wtXC1cLXNvbWVcLWdpdmVcLXRoZVwtb3Bwb3NpdGVcLW1lYW5pbmc7CivktqYgPiB1cHBlclwtYW5kXC1sb3dlclwtdGVldGhcLWluXC1vcmRlclwtYW5kXC1jb3JyZXNwb25kaW5nXC1lYWNoXC1vdGhlcjsKK+SngiA+IHRvXC10dXJuXC1vdmVyXC10aGVcLWNsb2RcLW9mXC10aGVcLWVhcnRoXC13aXRoXC1hXC1zaG92ZWxcLW9yXC1hXC1zcGFkZTsKK+WZniA+IHRoZVwtbW92ZW1lbnRcLW9mXC1hXC1maXNoJydzXC1tb3V0aFwtYXRcLXRoZVwtc3VyZmFjZVwtb2ZcLXRoZVwtd2F0ZXI7CivllLUgPiB1c2VkXC1pblwtYnVkZGhpc3RcLXRleHRzXC10b1wtdHJhbnNsaXRlcmF0ZVwtbm9uXC1jaGluZXNlXC1zb3VuZHM7CivkoIIgPiBuYW1lXC1vZlwtYVwtcG93ZXJmdWxcLWZldWRhbFwtc3RhdGVcLXdoaWNoXC1leGlzdGVkXC03NDBcLTMzMFwtYlwuY1wuOwor5Ja2ID4gdG9cLXJhaXNlXC11cFwtdGhlXC1ub3NlXC1pblwtb3JkZXJcLXRvXC1nZXRcLXRoZVwtYnVnc1wtaW5cLXRoZVwtZWFydGg7CivkhJsgPiBzZXJ2aWNlXC1vclwtcml0ZXNcLW9mXC1vZmZlcmluZ1wtc2FjcmlmaWNlc1wtZm9yXC1kcmlua1wtYW5kXC1mb29kOwor47ywID4gYW5cLWVhcnRoZW53YXJlXC1qYXJcLXdpdGhcLWFcLXNtYWxsXC1tb3V0aFwtYW5kXC10d29cLW9yXC1mb3VyXC1lYXJzOwor47iWID4gaGlkZVwtb3JcLXRvXC1rZWVwXC1pblwtc3RvcmVcLXRoZVwtdmVnZXRhYmxlXC1pblwtY29sZFwtd2ludGVyXC1kYXlzOwor47efID4gdG9cLXNjYWxkXC10aGVcLWJyaXN0bGVzXC1vZmZcLWFcLXBpZ1wtb3JcLXRoZVwtZmVhdGhlcnNcLW9mZlwtYVwtYmlyZDsKK+OwhyA+IHRoZVwtc3F1YXJlXC1wZWNrXC1zaGFwZWRcLWJveFwtaGFsZlwtd2F5XC11cFwtYVwtY2hpbmVzZVwtZmxhZ3N0YWZmOwor466eID4gdGhlXC1zcXVhcmVcLXBlY2tcLXNoYXBlZFwtYm94XC1oYWxmXC13YXlcLXVwXC1hXC1jaGluZXNlXC1mbGFnc3RhZmY7CivjprwgPiBhXC13b29kZW5cLXBpbGVzXC11c2VkXC1hc1wtYVwtY2FibGVcLXRvXC1tYWtlXC1pbW1vdmFibGVcLW9mXC1hXC1ib2F0Owor46KnID4gYVwtYm9va1wtb3JcLXBhaW50aW5nXC13aGljaFwtY2FuXC1iZVwtZWFzaWx5XC1mb2xkZWRcLW9yXC1yb2xsZWRcLXVwOwor6ZKyID4ga2luZFwtb2ZcLWdvbmdcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lc1wtYnlcLXRyb29wc1wtb25cLXRoZVwtbWFyY2g7CivpiaYgPiBraW5kXC1vZlwtZ29uZ1wtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzXC1ieVwtdHJvb3BzXC1vblwtdGhlXC1tYXJjaDsKK+SqsyA+IHNsYW50ZWRcLWZhY2VcLWNhdXNpbmdcLWJ5XC10aGVcLXBhcmFseXplZFwtb2ZcLXRoZVwtZmFjaWFsXC1uZXJ2ZTsKK+SeiyA+IHRvXC1kb1wtYWxtc1wtZm9yXC10aGVcLWJ1ZGRoaXN0XC1wcmllc3RzXC1vclwtbW9ua3NcLWluXC1vbGRcLXRpbWVzOwor5JmGID4gc2xpdHNcLW9uXC10aGVcLWxvd2VyXC1wYXJ0XC1vZlwtYVwtZ293blwtZm9yXC1mcmVlZG9tXC1vZlwtbW92ZW1lbnQ7CivkgI8gPiB0b1wtbW92ZVwtb25lJydzXC1leWVzXC10b1wtZXhwcmVzc1wtb3JcLWluZGljYXRlXC13aXRoXC1leWVzXC1kaXp6eTsKK+O/hCA+IHRoZVwtZ3JvYW5zXC1vclwtbW9hbnNcLWZyb21cLWFcLXBlcnNvblwtaW5cLWFcLWNyaXRpY2FsXC1jb25kaXRpb247Civjto8gPiBhblwtYW5jaWVudFwtbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtaGVuYW5cLXByb3ZpbmNlXC1kZW5nZmVuZ3hpYW47Civjs4cgPiBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC10b2RheScnc1wtamlhbmdzdVwtcHJvdmluY2VcLXlpeGluZ1wtY291bnR5Owor46uLID4gYVwtc2lsa2VuXC1iYW5uZXJcLWhhbmdpbmdcLWZyb21cLWFcLXN0YWZmXC1iZW50XC1vdmVyXC1hdFwtdGhlXC10b3A7Civni70gPiBhXC1sZWdlbmRhcnlcLWFuaW1hbFwtd2l0aFwtc2hvcnRcLWZvcmVsZWdzXC13aGljaFwtcm9kZVwtYVwtd29sZjsKK+atkCA+IHVzZWRcLWluXC10cmFuc2xpdGVyYXRpbmdcLW5vblwtY2hpbmVzZVwtd29yZHNcLXN1Y2hcLWFzXC1ldXJvcGU7Civni4ggPiBhXC1sZWdlbmRhcnlcLWFuaW1hbFwtd2l0aFwtc2hvcnRcLWZvcmVsZWdzXC13aGljaFwtcm9kZVwtYVwtd29sZjsKK+axqCA+IG1pXC1yaXZlclwtaW5cLWh1bmFuXC1wcm92aW5jZVwtd2hlcmVcLXF1XC15dWFuXC1kcm93bmVkXC1oaW1zZWxmOwor5rGcID4gYVwtc3RyZWFtXC13aGljaFwtbGVhdmVzXC10aGVcLW1haW5cLWJyYW5jaFwtdGhlblwtbGF0ZXJcLXJldHVybnM7CivnsIggPiBiYW1ib29cLW1hdFwtdXNlZFwtdG9cLXByb3RlY3RcLWNhcnJpYWdlXC1wYXNzZW5nZXJzXC1mcm9tXC1kdXN0Owor566zID4gYmFtYm9vXC1tYXRcLXVzZWRcLXRvXC1wcm90ZWN0XC1jYXJyaWFnZVwtcGFzc2VuZ2Vyc1wtZnJvbVwtZHVzdDsKK+eIvCA+IGFcLXNtYWxsXC10YWJsZVwtb3JcLXRpZXJlZFwtc3RhbmRcLWZpbGxlZFwtd2l0aFwtbWVhdFwtb2ZmZXJpbmdzOwor5LOaID4gYVwtc29ydFwtb2ZcLW5pZ2h0aW5nYWxlXC13aGljaFwtaXNcLXNhaWRcLXRvXC1zaW5nXC1mb3JcLXRoZVwtZGF3bjsKK+ShgiA+IHRoZVwtbG9uZ1wtd29vZGVuXC1idW1wZXJcLWF0XC10aGVcLXJlYXJcLW9mXC1hXC1jYXJ0XC1vclwtY2FycmlhZ2U7Civkg74gPiB0b1wtb2ZmZXJcLXNtYWxsXC1waWdcLWFzXC1zYWNyaWZpY2VcLXdoZW5cLXdhcnNoaXBcLWdvZFwtb2ZcLWxpZmU7CivjvKogPiBmcmFnbWVudHNcLW9mXC1hXC10aWxlXC1oYXZlbicndFwtdFwtYmVlblwta2lsblwtZHJpZWRcLWNvbXBsZXRlbHk7CivjtJYgPiBuYW1lXC1vZlwtYVwtc3RyZWFtXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlXC1zb3V0aHdlc3RcLW9mXC1qaW5hbjsKK+OdiSA+IHNwYWNlXC1iZXR3ZWVuXC10aGVcLXRocm9uZVwtYW5kXC10aGVcLXJldGlyaW5nXC1yb29tXC1iZWhpbmRcLWl0Owor45arID4gdXNlZFwtaW5cLW5hbWVzXC1mb3JcLW1pbm9yaXR5XC1ldGhuaWNcLWdyb3VwXC1pblwtYW5jaWVudFwtY2hpbmE7Civngp0gPiBzdGlyXC1mcnlcLW9yXC1ib2lsXC1pblwtd2F0ZXJcLW9yXC1vaWxcLXRoZW5cLWNvb2tcLXdpdGhcLWFcLXNhdWNlOwor54aXID4gc3RpclwtZnJ5XC1vclwtYm9pbFwtaW5cLXdhdGVyXC1vclwtb2lsXC10aGVuXC1jb29rXC13aXRoXC1hXC1zYXVjZTsKK+W8riA+IGFcLWNyb3d3Ym93XC13aGljaFwtZGlzY2hhcmdlZFwtc2V2ZXJhbFwtYm9sdHNcLWluXC1zdWNjZXNzaW9uOwor5KqZID4gbGVhdGhlclwtd3JhcHBlZFwtY29sbGFyXC1mb3JcLWFcLWRyYWZ0XC1hbmltYWxcLW9mXC1hXC1jYXJyaWFnZTsKK+SqliA+IGxlYXRoZXJcLXdyYXBwZWRcLWNvbGxhclwtZm9yXC1hXC1kcmFmdFwtYW5pbWFsXC1vZlwtYVwtY2FycmlhZ2U7Civkp5ogPiB0aGVcLW5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLXRoZVwtc291dGhcLXdlc3RcLW9mXC1oZWJlaVwtcHJvdmluY2U7CivkoZ4gPiBsZWF0aGVyXC10aGF0XC13aW5kXC1yb3VuZFwtb25cLXRoZVwtc2hhZnRzXC1vZlwtYVwtYmlnXC1jYXJyaWFnZTsKK+SNnCA+IGFcLWJhc2tldFwtb3JcLWFcLWNhZ2VcLXVzZWRcLXRvXC1rZWVwXC13aWxkXC1hbmRcLWRvbWVzdGljXC1mb3dsczsKK+SHhiA+IGNhcGFjaXR5XC11bml0XC1pblwtZnJhbmNlXC1lcXVhbFwtdG9cLXRlblwtdGltZXNcLW9mXC1vbmVcLWxpdHJlOwor5IKFID4gdG9cLWhhdmVcLWluc2lnaHRcLW9yXC12aXNpb25cLW9mXC1hXC1zaW1wbGVcLWFuZFwtaG9uZXN0XC1wZXJzb247Civjsr0gPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC10b2RheScnc1wtc291dGh3ZXN0XC1vZlwtc2hhbnhpXC1wcm92aW5jZTsKK+OukCA+IGFcLXJhY2tcLW9yXC1hXC1zdGFuZFwtd2l0aFwtdGhyZWVcLXN0aWNrc1wtdG9cLWNyb3NzXC1lYWNoXC1vdGhlcjsKK+OsuCA+IGFcLWtpbmRcLW9mXC1zZXJ2aWNlc1wtb3JcLWNlcmVtb25pZXNcLW9mXC1vZmZlcmluZ1wtc2FjcmlmaWNlczsKK+mDjCA+IG5hbWVcLW9mXC1hblwtYW5jaWVudFwtaHNpZW5cLWluXC1tb2Rlcm5cLWdhbnN1XC9zaGFhbnhpXC1hcmVhXC47CivogLAgPiB0b290aGxlc3NcLXJha2VcLWZvclwtZHJhd2luZ1wtZWFydGhcLW92ZXJcLW5ld2x5XC1zb3duXC1ncmFpbjsKK+eQgCA+IGdlbXNcLW9mXC1wZWFybHNcLWZvcm1lcmx5XC1wdXRcLWludG9cLXRoZVwtbW91dGhcLW9mXC1hXC1jb3Jwc2U7CivkqoMgPiB3aW5lXC1jb250YWluZXJcLXVzZWRcLWJ5XC1taW5vcml0eVwtdHJpYmVcLWluXC1hbmNpZW50XC10aW1lczsKK+SltyA+IGFcLWhpbmdlZFwtc2hlYXJcLW9yXC1sb25nXC1rbmlmZVwtZm9yXC1jdXR0aW5nXC1mb2RkZXJcLW9yXC1oYXk7CivkpKkgPiBhblwtb3JuYW1lbnRcLWF0XC10aGVcLWVuZFwtb2ZcLWFcLWJlbHRcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+SdqiA+IHRvXC1wcm92aWRlXC1tb25leVwtb3JcLWdpZnRcLWFuZFwtdG9cLWNvbnN1bHRcLWZvcnR1bmVcLXRlbGxlcjsKK+SZmyA+IGNlcmVtb25pYWxcLWRyZXNzXC1vZlwtdGhlXC1lbXBlcm9yXC1vclwtdmVyeVwtaGlnaFwtb2ZmaWNpYWxzOwor5JimID4gYVwta2luZFwtb2ZcLWhlYWRcLWRyZXNzXC13b3JlXC1pblwtZnVuZXJhbFwtcml0ZXNcLWluXC1vbGRcLWRheXM7CivkmJ8gPiBraW5kXC1vZlwtc2lsa1wtd292ZW5cLXdpdGhcLWRvdWJsZVwtdGhyZWFkc1wtYW5kXC13YXRlclwtcHJvb2Y7CivklJEgPiBhXC13aGl0ZVwtY29sb3JlZFwtY2x1c3RlclwtZ3Jvd25cLWF0XC10aGVcLXRpcFwtb2ZcLWNvZ29uZ3Jhc3M7CivkibIgPiB0aGluXC1hbmRcLWZsYXRcLXNsaXBzXC1vZlwtYmFtYm9vXC11c2VkXC1mb3JcLXdlYXZpbmdcLXB1cnBvc2U7CivjvL0gPiBmcmFnbWVudHNcLW9mXC1hXC10aWxlXC1oYXZlbicndFwtYmVlblwta2lsblwtZHJpZWRcLWNvbXBsZXRlbHk7CivjtoEgPiBhZnRlclwtYmxvY2tpbmdcLXRoZVwtd2F0ZXJcLWZsb3dcLXRha2VzXC1kaWZmZXJlbnRcLXdhdGVyd2F5Owor46+AID4gYm9uZHNcLWFuZFwtZmV0dGVyc1wtZm9yXC1mYWxjb25zXC1hbmRcLWRvZ3NcLXVzZWRcLWluXC1odW50aW5nOwor45K+ID4gYVwta2luZFwtb2ZcLXdyYXBwZXJcLXVzZWRcLXRvXC1jb3Zlclwtb3ZlclwtdGhlXC1mYWNlXC1hbmRcLWhlYWQ7CivooLIgPiB0aGVcLW1pbGxpcGVkZVwtc29tZXRpbWVzXC1jb25mb3VuZGVkXC13aXRoXC10aGVcLWdyb3dcLXdvcm07CivomKcgPiBhXC1wbGFudFwtd2hpY2hcLXJlc2VtYmxlc1wtd2hlYXRcLWJ1dFwtaGFzXC1ub1wtZWRpYmxlXC1ncmFpbjsKK+ShtCA+IGNhcnJpYWdlXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXNcLXRvXC10YWtlXC1lbmVteVwtcG9zaXRpb247Civkn7ogPiB3YWxrXC1zbG93bHlcLWJlY2F1c2VcLW9mXC10aGVcLXdyb25nXC1wb3NpdGlvblwtb2ZcLXRoZVwtZmVldDsKK+SJoyA+IHNsaXBzXC1vZlwtYmFtYm9vXC1wcm92aWRlZFwtZm9yXC13cml0aW5nXC1pblwtYW5jaWVudFwtdGltZXM7CivkgbkgPiB0b1wtbG9va1wtYXNrYW5jZVwtXC1cLVwtYVwtZXhwcmVzc2lvblwtb2ZcLWRpc2RhaW5cLW9yXC1kZXNwaXNlOwor47yMID4gbG90XC1vZlwtbWVsb25zXC1ncm93aW5nXC1idXRcLXRoZVwtcm9vdFwtaXNcLXdlYWtcLWFuZFwtZmVlYmxlOwor47ugID4gamFkZVwtaGFuZ2luZ1wtb25cLXRoZVwtc2lkZXNcLW9mXC10aGVcLWNhcFwtaW5cLWFuY2llbnRcLXRpbWVzOwor466jID4gYVwtcGllY2VcLW9mXC13b29kXC11c2VkXC10b1wtc3RyaWtlXC1vZmZcLWdyYWluXC1pblwtYVwtbWVhc3VyZTsKK+OTpCA+IHRvXC1zdHJpcFwtdGhlXC1za2luXC1vZlwtdGhlXC1mYWNlXC1cLVwtXC1hblwtaW1taW5lbnRcLWNhbGFtaXR5Owor56CAID4gYnJpbGxpYW50bHlcLWNvbG9yZWRcLXN0b25lXC13aXRoXC12ZWluZWRcLXBhdHRlcm5zXC1pblwtaXQ7CivomZIgPiBhblwtYW1waGliaW91c1wtYmVhc3RcLXJlc2VtYmxpbmdcLWFcLXRpZ2VyXC13aXRoXC1vbmVcLWhvcm47CivnrYEgPiBhXC1iYW1ib29cLWZyYW1lXC1vblwtd2hpY2hcLXNpbGt3b3Jtc1wtc3BpblwtdGhlaXJcLWNvY29vbnM7Civnoq0gPiBicmlsbGlhbnRseVwtY29sb3JlZFwtc3RvbmVcLXdpdGhcLXZlaW5lZFwtcGF0dGVybnNcLWluXC1pdDsKK+WGiyA+IGFcLWRlc2VydFwtYVwtYm9yZGVyXC1wcmFpcmllXC10aGVcLTFzdFwtZm9ybVwtaXNcLXJhZGljYWxcLTEzOwor5LS3ID4gdXNlXC10aGVcLXdob2xlXC1waWVjZVwtb2ZcLWJhcmxleVwtdG9cLWZlcm1lbnRcLWZvclwtYnJld2luZzsKK+StniA+IGFcLWtpbmRcLW9mXC1zYWNyaWZpY2VzXC1vZmZlcmVkXC10b1wtZ29kc1wtb3JcLXRoZVwtZGVjZWFzZWQ7Civkp6AgPiBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC13aGF0XC1pc1wtdG9kYXknJ3NcLXNoYW5kb25nXC1wcm92aW5jZTsKK+SRqSA+IGFcLWtpbmRcLW9mXC1pbmxhbmRcLXJpdmVyc1wtd2Fyc2hpcFwtdXNlZFwtaW5cLXFpbmdcLWR5bmFzdHk7CivkjbggPiBhXC1sZWdlbmRhcnlcLWdvYXRcLWxpa2VcLWFuaW1hbFwtd2l0aFwtNFwtZWFyc1wtYW5kXC05XC10YWlsczsKK+SNqyA+IGFcLWxlZ2VuZGFyeVwtZ29hdFwtbGlrZVwtYW5pbWFsXC13aXRoXC00XC1lYXJzXC1hbmRcLTlcLXRhaWxzOwor5IOrID4gYVwtc2lsaWNhdGVcLXN1YnN0YW5jZVwtZnJvbVwtdGhlXC1zYWx0XC13ZWxsc1wtaW5cLXN6ZWNod2FuOwor47icID4gdG9cLWdldFwtdGhyb3VnaFwtdGhlXC1zcGFjZVwtZW5jbG9zZWRcLWJ5XC1hXC1jb25zdGVsbGF0aW9uOwor47etID4gYVwtY29uaWNhbFwtYnJpY2tcLXN0cnVjdHVyZVwtaW5cLXdoaWNoXC10b1wtbGlnaHRcLWFcLWJlYWNvbjsKK+O2uyA+IGFcLWNvbmljYWxcLWJyaWNrXC1zdHJ1Y3R1cmVcLWluXC13aGljaFwtdG9cLWxpZ2h0XC1hXC1iZWFjb247CivnlL4gPiBncm91bmRcLXRoYXRcLWhhc1wtYmVlblwtdW5kZXJcLWN1bHRpdmF0aW9uXC1mb3JcLW9uZVwteWVhcjsKK+emoSA+IGFcLXNhY3JpZmljZVwtYXRcLXRoZVwtYmVnaW5uaW5nXC1vZlwtYVwtbWlsaXRhcnlcLWNhbXBhaWduOwor56SuID4gYW5jaWVudFwtYmFsbGlzdGFcLWZvclwtdGhyb3dpbmdcLWhlYXZ5XC1zdG9uZXNcLWFcLWNhbm5vbjsKK+eknyA+IGFuY2llbnRcLWJhbGxpc3RhXC1mb3JcLXRocm93aW5nXC1oZWF2eVwtc3RvbmVzXC1hXC1jYW5ub247Civkr6AgPiB0aGVcLWZpdmVcLWxvd2VzdFwtcGllY2VzXC1vZlwtYm9uZVwtb2ZcLXRoZVwtc3BpbmFsXC1jb2x1bW47Civkr5kgPiB0aGVcLWZpdmVcLWxvd2VzdFwtcGllY2VzXC1vZlwtYm9uZVwtb2ZcLXRoZVwtc3BpbmFsXC1jb2x1bW47CivkrKYgPiBmb29kXC1pdGVtc1wtbWVyZWx5XC1hcnJhbmdlZFwtZm9yXC1kaXNwbGF5XC1wdXJwb3NlXC1vbmx5Owor5JmRID4gYVwtcGllY2VcLW9mXC1zYWNrY2xvdGhcLXdvcm5cLW9uXC10aGVcLWJyZWFzdFwtaW5cLW1vdXJuaW5nOwor5IixID4gYW5cLW9wZW5cLWJhbWJvb1wtYmFza2V0XC11c2VkXC10b1wtZmVlZFwtZG9tZXN0aWNcLWFuaW1hbHM7CivjqrUgPiBoYWxmXC1vZlwtYVwtdW5pdFwtb2ZcLW1lYXN1cmVtZW50XC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivjoYggPiB0aGVcLXJvcGVzXC1hdHRhY2hlZFwtdG9cLXRoZVwtYmllclwtYW5kXC1oZWxkXC1ieVwtbW91cm5lcnM7CivjmqQgPiBhXC1sYWR5XC1vZmZpY2VyXC1vZlwtdGhlXC1tb25hcmNoJydzXC1wYWxhY2VcLWluXC1vbGRcLXRpbWVzOwor5ZGAID4gcGFydGljbGVcLXVzZWRcLXRvXC1leHByZXNzXC1zdXJwcmlzZVwtb3JcLW1pbGRcLWVtcGhhc2lzOwor6Z23ID4gdGhlXC1sZWF0aGVyXC1iZWx0XC10aGF0XC1jb25uZWN0c1wtYVwtaG9yc2VcLXdpdGhcLWFcLWNhcnQ7CivorbwgPiB0b1wtc3VwZXJ2aXNlXC10b1wtY29uZmluZVwtYVwtZ292ZXJubWVudFwtZXN0YWJsaXNobWVudDsKK+WdqyA+IGFcLXN0YW5kXC1vblwtd2hpY2hcLXRvXC1yZXBsYWNlXC1nb2JsZXRzXC1hZnRlclwtZHJpbmtpbmc7CivktL0gPiBhXC1zbWFsbFwtcm91bmRcLXBpZWNlXC1vZlwtZGlzdGlsbGVyJydzXC1ncmFpbnNcLW9yXC15ZWFzdDsKK+SwjiA+IHRvXC10d2lzdFwtdGhlXC1oYWlyXC1pblwtYVwta25vdFwtb25cLXRoZVwtdG9wXC1vZlwtdGhlXC1oZWFkOwor5KqdID4gbGVhdGhlclwtY29yZFwtdGhhdFwtd2luZGluZ1wtb25cLXRoZVwtaGFuZGxlXC1vZlwtYVwta25pZmU7CivkoYcgPiB0aGVcLWNyb3NzXC1iYXJcLWF0XC10aGVcLWVuZFwtb2ZcLXRoZVwtcG9sZVwtb2ZcLWFcLWNhcnJpYWdlOwor5J6AID4gdG9cLWRlc2lyZVwtZm9yXC1tb3JlXC1tb25leVwtdGhhblwtb25lJydzXC1yaWdodGZ1bFwtc2hhcmU7CivkmK0gPiB0aGVcLXBsZWF0ZXNcLW9uXC10aGVcLWxhcGVsXC1vZlwtYVwtZ2FybWVudFwtb2ZcLXRoaW5cLXNpbGs7CivkkIggPiBhXC1waWVjZVwtb2ZcLW9uZVwtZm9vdFwtdHdvXC1pbmNoZXNcLWRyaWVkXC1zZWFzb25lZFwtbWVhdDsKK+SNhSA+IGNvbnRhaW5lcnNcLWZvclwtd2F0ZXJcLW9yXC13aW5lXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7Civki74gPiBjb3R0b25cLWFuZFwtc2lsa1wtdG9cLWJlXC1sYWlkXC1hbmRcLWF0dGFjaGVkXC1lYWNoXC1vdGhlcjsKK+SJkCA+IGFcLXRoaW5cLWFuZFwtbG9uZ1wtc3RyaXBcLW9mXC1iYW1ib29cLWZvclwtbWFraW5nXC1iYXNrZXRzOwor5Ii7ID4gYVwtaGVhdnlcLW1hdHNcLW9mXC1iYW1ib29cLXVzZWRcLWZvclwtZGVlcFwtd2F0ZXJcLWZpc2hpbmc7Civkh6AgPiB3cmVuY2hcLXRvXC1hZGp1c3RcLXRoZVwtc3RyaW5nXC1vblwtc3RyaW5nZWRcLWluc3RydW1lbnQ7CivkhIwgPiB0b1wtcGVyZm9ybVwtcml0aWVzXC1pblwtaG9ub3JcLW9mXC10aGVcLWFuY2VzdHJhbFwtdGVtcGxlOwor5IOmID4gYVwtZmxhdFwtYW5kXC1ncmVhdFwtcm9ja1wtcGVvcGxlXC1zcXVhdFwtb3JcLWNyb3VjaFwtb25cLWl0Owor47uAID4gZmluZVwtc3RvbmVcLXdoaWNoXC1pc1wtbGl0dGxlXC1sZXNzXC12YWx1YWJsZVwtdGhhblwtamFkZTsKK+OyrCA+IGhhaXJcLWRlY29yYXRpb25zXC1vblwtYVwtaGVsbWV0XC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7Civjsa8gPiBnZXRcLXRoZVwtdW5ib3JuXC1iYWJ5XC1nb2F0XC1ieVwta2lsbG5nXC10aGVcLW1vdGhlclwtZ29hdDsKK+OusCA+IHRoZVwtc21hbGxcLWJlYW1cLXN1cHBvcnRpbmdcLXRoZVwtcmFmdGVyc1wtYXRcLXRoZVwtZWF2ZXM7CivjqrYgPiBhXC1kcnlcLW1lYXN1cmVcLTEwXC1vclwtNVwtdGltZXNcLXRoYXRcLW9mXC1hXC1jaGluZXNlXC1wZWNrOwor45+XID4gbmFtZVwtb2ZcLWFcLXNtYWxsXC1wcmluY2lwYWxpdHlcLWluXC13aGF0XC1pc1wtbm93XC1zaGFueGk7CivkvL0gPiB0cmFuc2NyaXB0aW9uXC1vZlwtc2Fuc2tyaXRcLScnZ2hhJydcLWluXC1idWRkaGlzdFwtdGV4dHM7CivlsaMgPiBzdHJhd1wtc2FuZGFsc1wtb3JcLXNsaXBwZXJzXC10aGF0XC1oYXZlXC1ub1wtaGVlbFwtYmFja3M7CivmvI4gPiBhXC1wbGFjZVwtd2hlcmVcLXNtYWxsXC1zdHJlYW1zXC1mbG93XC1pbnRvXC1hXC1sYXJnZVwtb25lOwor5qq+ID4gZ3Jhc3N5XC1wbGFudFwtd2l0aFwtZmlicmVzXC1mcm9tXC13aGljaFwtY2xvdGhcLWlzXC1tYWRlOwor5LCMID4gdG9cLWJpbmRcLXRoZVwtaGFpclwtaW5cLWFcLWtub3RcLW9uXC10aGVcLXRvcFwtb2ZcLXRoZVwtaGVhZDsKK+SptSA+IHRhbm5lclwtd2hvXC1tYWRlXC10aGVcLWxlYXRoZXJcLWRydW1cLWluXC1hbmNpZW50XC10aW1lczsKK+SamSA+IGFcLXNwb29uXC1mb3JcLWNvb2tlZFwtcmljZVwtbWFkZVwtb2ZcLWhvcm5cLW9mXC1hblwtYW5pbWFsOwor5IyzID4gYVwta2luZFwtb2ZcLXVucmVmaW5lZFwtb3JcLXVucG9saXNoZWRcLXNpbGtlblwtdGV4dGlsZXM7CivkjKQgPiBhXC1raW5kXC1vZlwtdW5yZWZpbmVkXC1vclwtdW5wb2xpc2hlZFwtc2lsa2VuXC10ZXh0aWxlczsKK+SKuiA+IGFuXC1pbXBsZW1lbnRcLXRvXC1kcmF3XC1vclwtdG9cLWNvbGxlY3RcLXJvcGVzXC1vclwtY29yZHM7CivkiYMgPiBzbGlwZWRcLW9wZW5cLWJhbWJvb1wtd2l0aFwtdGhlXC1qb2ludHNcLXVzZWRcLWFzXC1hblwtb2FyOwor5ImAID4gcmVjdGFuZ3VsYXJcLWNoZXN0XC1vclwtYm94XC13b3ZlblwtZnJvbVwtYmFtYm9vXC1zdHJpcHM7CivkhIsgPiB0b1wtcHJheVwtZm9yXC1wcmV2ZW50aW5nXC1vclwtZm9yZXN0YWxsaW5nXC1jYWxhbWl0aWVzOwor5IOuID4gYVwtc3RvbmVcLWJ1aWxkXC1oeWRyYXVsaWNcLW1lYXN1cmVzXC1pblwtYW5jaWVudFwtdGltZXM7Civjvr8gPiByb2FyXC1vZlwtYXN0aG1hXC1vclwtZXhwZWN0b3JhdGVcLWZyb21cLWFcLWR5aW5nXC1wZXJzb247Civju6ggPiBpbmVcLXN0b25lXC13aGljaFwtaXNcLWxpdHRsZVwtbGVzc1wtdmFsdWFibGVcLXRoYW5cLWphZGU7CivjupAgPiBnZW5lcmFsbHlcLWNhbGxlZFwtZm9yXC1taW5vcml0eVwtZ3JvdXBzXC1pblwtb2xkXC1jaGluYTsKK+OvgiA+IHBpbGxhclwtb3JcLXBvc3RcLW9mXC1hXC1mcmFtZVwtb25cLXdoaWNoXC1zaWxrd29ybXNcLXNwaW47Civjn4sgPiBkZWVwXC1hbmRcLWxldmVsXC1ncm91bmRcLWd1bGx5XC1hdFwtdGhlXC1mb290XC1vZlwtYVwtaGlsbDsKK+OeqiA+IHRoZVwtYXBwZWFyYW5jZVwtb2ZcLXRoZVwtbW91bnRhaW5cLWlzXC1mbGF0XC1hbmRcLXNtb290aDsKK+ihhSA+IGNvbnNlY3JhdGVcLXNhY3JpZmljaWFsXC12ZXNzZWxzXC1ieVwtc21lYXJpbmdcLWJsb29kOwor6JmiID4gbmFtZVwtb2ZcLWFuY2llbnRcLWZldWRhbFwtc3RhdGVcLWluXC1zaGVueGlcLWFuZFwtaHVuYW47CivpvYkgPiBzdG9wcGFnZVwtb2ZcLXRoZVwtbm9zZVwtdG9cLXNwZWFrXC13aXRoXC1hXC1uYXNhbFwtdHdhbmc7CivopK8gPiBjaGlsZHJlbicnc1wtZ2FybWVudHNcLlwtYVwtbWF0XC1mb3JcLXdyYXBwaW5nXC1nYXJtZW50czsKK+aioCA+IGFcLXNtYWxsXC1iZWFtXC1zdXBwb3J0aW5nXC10aGVcLXJhZnRlcnNcLWF0XC10aGVcLWVhdmVzOwor5pGjID4gYVwtaGFuZGZ1bFwuXC10b1wtcGlja1wtdXBcLXdpdGhcLXRoZVwtZmluZ2Vyc1wuXC10b1wtc2VpemU7CivloJggPiBhXC1yYWlzZWRcLXBhdGhcLWJldHdlZW5cLWZpZWxkXC13aGljaFwtYWN0c1wtYXNcLWFcLWR5a2U7CivktpwgPiB0aGVcLXByb2Nlc3NcLXRvXC13aGl0ZW5cLXRoZVwtaXZvcnlcLW9yXC1lbGVwaGFudFwtdHVzazsKK+SuiSA+IGhvcnNlc1wta2VwdFwtYXRcLWFcLWNvdXJpZXJcLXN0YXRpb25cLWluXC1mb3JtZXJcLXRpbWVzOwor5KK1ID4gbmFtZVwtb2ZcLWFuXC1vbGRcLWNvdW50cnlcLWluXC10b2RheScnc1wtaHViZWlcLXByb3ZpbmNlOwor5KGfID4gYVwtcmluZ1wtb2ZcLXRoZVwtaG9yaXpvbnRhbFwtZnJvbnRcLWJhclwtb25cLWFcLWNhcnJpYWdlOwor5J6bID4gZGFuY2luZ1wtb2ZcLWFcLWVhc3Rlcm5cLW1pbm9yaXR5XC1ncm91cFwtaW5cLW9sZFwtY2hpbmE7CivknYwgPiBhXC1waWdcLXNlZWtcLWZvclwtZm9vZFwtdGhyb3VnaFwtZGlnZ2luZ1wtb25cLXRoZVwtZWFydGg7CivkkoEgPiBhXC1zbWFsbFwtYm9hdFwtY29ubmVjdGVkXC10b1wtdGhlXC1iYWNrXC1vZlwtYVwtYmlnXC1ib2F0Owor5ImLID4gYVwtdmFyaWV0eVwtb2ZcLWJhbWJvb1wtc2hvb3RzXC10aGF0XC1zcHJvdXRcLWluXC13aW50ZXI7CivkiJQgPiB3aGlzdGxlXC1tYWRlXC1vZlwtcmVlZFwtd2l0aG91dFwtaG9sZXNcLWZvclwtZmluZ2VyaW5nOwor472ZID4gb2ZmaWNpYWxcLWluXC1jaGFyZ2VcLW9mXC1mYXJtbGFuZHNcLWluXC1hbmNpZW50XC10aW1lczsKK+OzjiA+IGd1aWRlXC1vclwtbGVhZFwtdG9cLW1ha2VcLXRoZVwtd2F0ZXJcLWZsb3dpbmdcLXNtb290aGx5Owor47KqID4gd29vbGVuXC1ibGFua2V0XC13aXRoXC1kZWNvcmF0aXZlXC1kZXNpZ25cLW9yXC1wYXR0ZXJuOwor47KoID4gYVwtZGVjb3JhdGl2ZVwtZmluZVwtYmxhbmtldFwtb25cLXRoZVwtdG9wXC1vZlwtYVwtc2FkZGxlOwor47KjID4gd29vbGVuXC1ibGFua2V0XC13aXRoXC1kZWNvcmF0aXZlXC1kZXNpZ25cLW9yXC1wYXR0ZXJuOwor47KZID4gd29vbGVuXC1ibGFua2V0XC13aXRoXC1kZWNvcmF0aXZlXC1kZXNpZ25cLW9yXC1wYXR0ZXJuOwor46eLID4gdG9cLWxlbmd0aGVuXC1hbmRcLWV4dGVudWF0ZVwtXC1cLVwtYXNcLWluXC1tYWtpbmdcLW5vb2RsZTsKK+OgnCA+IHlvdW5nXC1raWRzXC1zbWFydFwtYW5kXC1mYW1pbGlhclwtd2l0aFwtaHVtYW5cLWFmZmFpcnM7CivjmbEgPiBlYXJ0aGVud2FyZVwtdXNlZFwtdG9cLWJha2VcLWNha2VzXC1pblwtbm9ydGhlcm5cLWNoaW5hOwor5ZaBID4gdGhlXC1tb3V0aFwtb2ZcLWFcLWZpc2hcLWF0XC10aGVcLXN1cmZhY2VcLW9mXC10aGVcLXdhdGVyOwor5o+OID4gdG9cLXB1bGxcLXVwXC10aGVcLXNsZWV2ZXNcLWFuZFwtc3RyZXRjaFwtb3V0XC10aGVcLWFybXM7CivnrqwgPiB0aGVcLWN1dGljbGVcLW9mXC10aGVcLWJhbWJvb1wtYVwtYnJvYWRcLWxlYXZlZFwtYmFtYm9vOwor6Lu+ID4gaG9yaXpvbnRhbFwtd29vZGVuXC1iYXJcLWluXC1mcm9udFwtb2ZcLWFcLXNlZGFuXC1jaGFpcjsKK+iQhiA+IHRoZVwtY2FzdG9yXC1vaWxcLXBsYW50XC1hbHNvXC11c2VkXC1mb3JcLW90aGVyXC1wbGFudHM7CivnsKAgPiBhblwtYW5jaWVudFwtdmVzc2VsXC11c2VkXC1mb3JcLWhvbGRpbmdcLWJvaWxlZFwtZ3JhaW47CivksrAgPiBhXC1zZWNvbmRcLW5hbWVcLWZvclwtdGhlXC1waWdlb25cLW9yXC10aGVcLXR1cnRsZVwtZG92ZTsKK+SdpSA+IHRvXC1yb2FyXC1vclwtaG93bFwtZnJhbnRpY1wtYmFya3NcLW9mXC1kb2dzXC1vclwtd29sdmVzOwor5JSkID4gdGhlXC1sdXNoXC1hbmRcLWx1eHVyaWFudFwtb2ZcLXRoZVwtZ3Jhc3NcLWFuZFwtZmxvd2VyczsKK+OvriA+IGFcLWtpbmRcLW9mXC10cmVlXC13aXRoXC1iaWdcLWxlYXZlc1wtYW5kXC1pblwtcmVkXC1jb2xvcjsKK+OUjSA+IGFcLWhpbmdlZFwtc2hlYXJcLW9yXC1sb25nXC1rbmlmZVwtZm9yXC1jdXR0aW5nXC1mb2RkZXI7CivnkpwgPiBhXC1zZW1pY2lyY3VsYXJcLWphZGVcLW9ybmFtZW50XC11c2VkXC1hc1wtYVwtcGVuZGFudDsKK+irrCA+IHRvXC1vcGVuXC10b1wtYmVnaW5cLXRvXC1leHBsYWluXC10b1wtaW5mb3JtXC1hXC1sZXR0ZXI7CivnjLkgPiB3aWxkXC1hbmltYWxcLW1lbnRpb25lZFwtaW5cLXNob3J0XC1zdG9yeVwtYnlcLWx1XC14dW47CivnirwgPiBhXC1maWVyY2VcLW1vbmdvbGlhblwtd29sZlwtZHJhZ29uJydzXC1oZWFkXC1vblwtcm9vZnM7CivmuZMgPiBhblwtYWZmbHVlbnRcLW9mXC10aGVcLXJpdmVyXC15YW5ndHplXC1uZWFyXC1raXVraWFuZzsKK+atmiA+IHVzZWRcLWluXC1uYW1lXC1vZlwtZmFtb3VzXC1rb3JlYW5cLXBhaW50ZXJcLWNlbmdcLXNlbjsKK+S2myA+IHRvXC1zZXBhcmF0ZVwtdGhlXC1tZWF0XC1mcm9tXC10aGVcLWJvbmVzXC13aXRoXC10ZWV0aDsKK+SznCA+IGFcLWtpbmRcLW9mXC1iaXJkXC13aGljaFwtc2hhcmVzXC1pdHNcLW5lc3RcLXdpdGhcLXJhdHM7Civks4UgPiBhXC1raW5kXC1vZlwtYmlyZFwtd2hpY2hcLXNoYXJlc1wtaXRzXC1uZXN0XC13aXRoXC1yYXRzOwor5LKNID4gYVwtcGVyY2hcLWxpa2VcLWZpc2hcLXdpdGhcLXdoaXRlXC1ib2R5XC1hbmRcLXJlZFwtdGFpbDsKK+SptiA+IHNhZGRsZVwtYW5kXC1yZWluXC1ldGNcLlwtZm9yXC10aGVcLWltcGVyaWFsXC1jYXJyaWFnZTsKK+SXvSA+IGFcLXNtYWxsXC1nYWRmbHlcLXRoYXRcLXN1Y2tcLWJsb29kXC1vZlwtaG9yc2VcLW9yXC1jb3c7CivkibQgPiBhXC1iYW1ib29cLXdhcmVcLXRvXC1jb2xsZWN0XC1hbmRcLWtlZXBcLXNvbWV0aGluZ1wtaW47CivkiYUgPiBzbWFsbFwtYmFtYm9vXC13aG9zZVwtam9pbnRzXC1hcmVcLXRocmVlXC1mZWV0XC1hcGFydDsKK+SImyA+IHNtYWxsXC1iYW1ib29cLXdob3NlXC1qb2ludHNcLWFyZVwtdGhyZWVcLWZlZXRcLWFwYXJ0Owor5ISmID4gdG9cLXB1dFwtZm9ydGhcLWVhcnNcLWFuZFwtdG9cLWJsb3Nzb21cLW9mXC10aGVcLWdyYWluczsKK+O9qSA+IGNvbm5lY3RlZFwtYmFua3NcLW9mXC1lYXJ0aFwtb3JcLXBhdGhzXC1pblwtdGhlXC1maWVsZDsKK+O5gyA+IHR3b1wtYnJpbmRsZWRcLWNvd3NcLXRvXC1wbG91Z2hcLWZhY2VcLXRvXC1lYWNoXC1vdGhlcjsKK+O2nyA+IGFuXC1hbmNpZW50XC1uZW1lXC1vZlwtYVwtcml2ZXJcLWluXC1zaGFueGlcLWFuZFwtaGViZWk7CivjsoggPiB0aGVcLW5hbWVcLW9mXC10aGVcLW11c2ljXC1vZlwtdGhlXC1sZWdlbmRhcnlcLWVtcGVyb3I7CivjrJAgPiBhXC1zdGF0ZVwtZHVyaW5nXC10aGVcLXBlcmlvZFwtb2ZcLXNwcmluZ1wtYW5kXC1hdXR1bW47CivjoZsgPiBuYW1lXC1mb3JcLWFcLXdvcmttYW5cLXdob1wtYXBwbHlcLWNvbG9yXC1pblwtcGFpbnRpbmc7Civjn6IgPiB0aGVcLXJvY2tzXC1vblwtdGhlXC1oaWxsc1wtYXJlXC1vZlwtZGlmZmVyZW50XC1zaGFwZXM7CivjnLwgPiBjaGlsZHJlblwtb2ZcLW9uZScnc1wtYnJvdGhlclwtXC1cLVwtbmVwaGV3c1wtb3JcLW5pZWNlczsKK+OUvSA+IGFcLWtpbmRcLW9mXC13aW5lXC1wb3RcLW9yXC1qYXJcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lOwor45ODID4gdG9cLXNhY3JpZmljZVwtYnlcLXBvdXJpbmdcLW91dFwtYVwtbGliYXRpb25cLW9mXC13aW5lOwor45GeID4gYVwtbWFpZFwtd2hvXC1hY2NvbXBhbmllc1wtYVwtYnJpZGVcLXRvXC1oZXJcLW5ld1wtaG9tZTsKK+eVsiA+IHRvXC1jdWx0aXZhdGVcLWxhbmRcLWJ5XC1maXJzdFwtc2V0dGluZ1wtZmlyZVwtdG9cLWl0Owor56+aID4gcm91bmRcLW9yXC1vdmFsXC1jb3ZlcmVkXC1iYXNrZXRzXC13aXRoXC1zaG9ydFwtbGVnczsKK+eylCA+IGNha2VzXC1tYWRlXC1mcm9tXC1yaWNlXC1mbG91clwtdHdpc3RlZFwtaW50b1wtcmluZ3M7CivmiKQgPiB0b1wtaW5mcmluZ2VcLWFcLXRyYWRlXC1tYXJrXC10b1wtcGxlZGdlXC1hblwtYXJ0aWNsZTsKK+S5pCA+IGZpcnN0XC1jaGFyYWN0ZXJcLW9mXC1rb3JlYW5cLXBsYWNlXC1uYW1lXC0nJ2hhbHBobycnOwor5LaoID4gaW5cLXRoZVwtbWFubmVyXC1hXC10b290aGxlc3NcLXBlcnNvblwtY2hld2luZ1wtZm9vZDsKK+SumyA+IGV4dHJhXC1ob3JzZVwtaGFybmVzc2VkXC1ieVwtdGhlXC1zaWRlXC1vZlwtdGhlXC10ZWFtOwor5KOgID4gbmFtZVwtb2ZcLWFcLXZpbGxhZ2VcLWluXC10b2RheScnc1wtc2ljaHVhblwtcHJvdmluY2U7Civko58gPiBuYW1lXC1vZlwtcGF2aWxpb25cLWluXC10b2RheScnc1wtc2hhbmRvbmdcLXByb3ZpbmNlOwor5KCSID4gY291cnRlc3lcLW9mXC1hXC1taW5vcml0eVwtZ3JvdXBcLWluXC1hbmNpZW50XC10aW1lczsKK+SdsCA+IHRvXC1zdG9yZVwtb3JcLXRvXC1hY2N1bXVsYXRlXC1yaWNoZXNcLW9yXC12YWx1YWJsZXM7CivknLEgPiBuYW1lXC1vZlwtYVwtcGF2aWxpb25cLWluXC10b2RheScnc1wtc2hhbnhpXC1wcm92aW5jZTsKK+STnSA+IGNoaW5lc2VcLXBlbm5pc2V0dW1cKVwtcGVubmlzZXR1bVwtYWxvcGVjdXJvaWRlc1wpOwor5IuJID4gYVwtbnVtZXJhcnlcLWFkanVuY3RcLWZvclwtcHJhY3RpY2FsbHlcLWV2ZXJ5dGhpbmc7CivkiqMgPiBsaWdodFwteWVsbG93XC1kdXN0XC1saWtlXC1mdW5nb2lkXC1ncm93dGhcLW9uXC13aW5lOwor5IeSID4gbnVtZXJhcnlcLWFkanVuY3RcLWZvclwtcGVyaW9kaWNcLXRlcm1zXC1vclwtZXZlbnRzOwor47+XID4gZGlzZWFzZVwtb2ZcLXRoZVwtcHJpdmF0ZVwtcGFydFwtb2ZcLXRoZVwtaHVtYW5cLWJvZHk7Civjv4kgPiBkaXNlYXNlXC1vZlwtdGhlXC1wcml2YXRlXC1wYXJ0XC1vZlwtdGhlXC1odW1hblwtYm9keTsKK+O+qyA+IGhlbWlwbGVnaWFcLVwtXC1cLXBhcmFseXNpc1wtb2ZcLWhhbGZcLW9mXC1vbmUnJ3NcLWJvZHk7Civju54gPiBmbG91cmlzaGluZ1wtYW5kXC1yYWRpYW50XC1vZlwtdGhlXC1jb2xvcmZ1bFwtamFkZXM7CivjubEgPiBuYW1lXC1vZlwtYVwtZG9nXC1pblwtdGhlXC1wZXJpb2RcLW9mXC13YXJyaW5nXC1zdGF0ZXM7CivjsqUgPiBhXC1raW5kXC1vZlwtd29vbGVuXC10ZXh0aWxlc1wtd2l0aFwtY3VydmVkXC1wYXR0ZXJuOwor4625ID4gbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLXRvZGF5JydzXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civjo68gPiB0aGVcLWRyZXNzZXNcLXRvc3NcLWFuZFwtZmx5aW5nXC1hYm91dFwtaW5cLXRoZVwtd2luZDsKK+OiryA+IGJvd3NcLXVzZWRcLWJ5XC10aGVcLXNvblwtb2ZcLWhlYXZlblwtXC1cLVwtdGhlXC1lbXBlcm9yOwor46GKID4gYVwta2luZFwtb2ZcLWNhcFwtd29yblwtYnlcLWFuXC1vZmZpY2VyXC1pblwtb2xkXC1jaGluYTsKK+OZqyA+IGFcLWZvdW50YWluXC1vclwtc3ByaW5nXC1vdXRcLWZyb21cLXRoZVwtdW5kZXJncm91bmQ7CivjmY0gPiBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC10b2RheScnc1wtZ3Vhbmdkb25nXC1wcm92aW5jZTsKK+mSpyA+IHVuaXRcLW9mXC1tZWFzdXJlXC1lcXVpdmFsZW50XC10b1wtdGhpcnR5XC1jYXR0aWVzOwor5aayID4gY29uY3ViaW5lXC1vZlwtbGFzdFwtcnVsZXJcLW9mXC10aGVcLXNoYW5nXC1keW5hc3R5Owor55O0ID4gY29uY2F2ZVwtY2hhbm5lbHNcLW9mXC10aWxpbmdcLWFcLWxvbmdcLW5lY2tlZFwtamFyOwor5aq1ID4gYVwtbWFpZFwtd2hvXC1hY2NvbXBhbmllc1wtYnJpZGVcLXRvXC1oZXJcLW5ld1wtaG9tZTsKK+iDmSA+IG1lYXRcLW9mZmVyZWRcLWluXC1zYWNyaWZpY2VcLXRvXC1vbmUnJ3NcLWFuY2VzdG9yczsKK+ifiiA+IGFcLWZseVwtd2hpY2hcLWlzXC11c2VkXC1zaW1pbGFybHlcLXRvXC1jYW50aGFyaWRlczsKK+mosiA+IHRoZVwtZmVtYWxlXC1vZlwtY2VydGFpblwtYW5pbWFsc1wtc3VjaFwtYXNcLWhvcnNlczsKK+mIniA+IHVuaXRcLW9mXC1tZWFzdXJlXC1lcXVpdmFsZW50XC10b1wtdGhpcnR5XC1jYXR0aWVzOwor6J2lID4gYVwtZmx5XC13aGljaFwtaXNcLXVzZWRcLXNpbWlsYXJseVwtdG9cLWNhbnRoYXJpZGVzOwor54+TID4gdHdvXC1oZW1pc3BoZXJpY2FsXC1vYmplY3RzXC11c2VkXC1pblwtZGl2aW5hdGlvbjsKK+aVpyA+IHRvXC1waWNrXC11cFwtdGhpbmdcLXdpdGhcLWNob3BzdGlja3NcLW9yXC1waW5jZXJzXC47CivmiYQgPiBsYXJnZVwtcmluZ1wtb25cLWFcLWZyb250XC1kb29yXC11c2VkXC1hc1wtYVwta25vY2tlcjsKK+WrjyA+IHRoZVwtcGxhY2VcLXdoZXJlXC10aGVcLXN1cHJlbWVcLXN0b3Jlc1wtaGlzXC1ib29rczsKK+SxgSA+IGFcLWtpbmRcLW9mXC1tZWRpdW1cLXNpemVkXC1maXNoXC1ncm93blwtaW5cLXRoZVwtc2VhOwor5LCPID4gc3BhcnNlXC1oYWlyXC1vblwtYVwta25vdFwtb25cLXRoZVwtdG9wXC1vZlwtdGhlXC1oZWFkOwor5K6GID4gYVwtaG9yc2VcLXdpdGhcLW1peGVkXC1jb2xvclwtb2ZcLXllbGxvd1wtYW5kXC13aGl0ZTsKK+SpmyA+IGxlYXRoZXJcLWJlbHRcLXVzZWRcLXRvXC1iaW5kXC1vclwtcmVzdHJhaW5cLWFcLWNhcnQ7CivkprkgPiBuYW1lXC1vZlwtYVwtY291bnR5XC1pblwtdG9kYXknJ3NcLXNpY2h1YW5cLXByb3ZpbmNlOwor5KOUID4gbmFtZVwtb2ZcLWFcLXBhdmlsaW9uXC1pblwtdG9kYXknJ3NcLWhlbmFuXC1wcm92aW5jZTsKK+SjkSA+IGxpdmluZ1wtc3BhY2VcLWZvclwtb25lXC1mYW1pbHlcLWluXC1hbmNpZW50XC10aW1lczsKK+SjhCA+IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLXRvZGF5JydzXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civko4EgPiBuYW1lXC1vZlwtYVwtcGF2aWxpb25cLWluXC10b2RheScnc1wtaGVuYW5cLXByb3ZpbmNlOwor5KK5ID4gbmFtZVwtb2ZcLWFcLXBhdmlsaW9uXC1pblwtdG9kYXknJ3NcLWh1bmFuXC1wcm92aW5jZTsKK+SiqiA+IGFcLXNsZWRnZVwtZm9yXC10cmFuc3BvcnRhdGlvblwtb3ZlclwtbXVkXC1vclwtc25vdzsKK+SfhiA+IHRvXC1rZWVwXC1wZXJzb25zXC1vZmZcLXRoZVwtcm91dGVcLW9mXC10aGVcLWVtcGVyb3I7CivkiJAgPiBhblwtYXJjaGVkXC1mcmFtZVwtbWFkZVwtb2ZcLWJhbWJvb1wtb2ZcLXdvb2RcLWJvYXJkOwor5IW/ID4gbHV4dXJpYW50XC1vclwtZXh1YmVyYW50XC1vZlwtdGhlXC1ncmFpbnNcLWZsb3dlcnk7Civkg4ggPiBtb3VudGFpblwtcm9ja3NcLWFcLWJsYWNrXC1zdG9uZVwtcmVzZW1ibGluZ1wtamFkZTsKK+SCrCA+IGJpZ1wtcm9ja3NcLW9uXC10aGVcLXJpdmVyc2lkZVwtYW5cLWFyY2hlZFwtb3BlbmluZzsKK+SBnSA+IGRlbHVkaW5nXC1hbmRcLWNhdXNpbmdcLWRpc29yZGVyXC1saWdodHNcLXNoaW5pbmc7CivjvZ8gPiB0b1wtdGlsbFwtb3JcLXRvXC1wbG91Z2hcLXRoZVwtZmllbGRzXC1hblwtZW5jbG9zdXJlOwor466EID4gcHVibGljbHlcLXBvc3RlZFwtcm9sbFwtb2ZcLXN1Y2Nlc3NmdWxcLWV4YW1pbmVlczsKK+OtuCA+IHRoZVwtYnJhbmNoZXNcLXRvXC1zcHJlYWRcLW91dFwtaW5cLWFsbFwtZGlyZWN0aW9uczsKK+OpiSA+IHRvXC10YWtlXC1hXC1ydWJiaW5nXC1vZlwtYW5cLWluc2NyaXB0aW9uXC1vblwtc3RvbmU7Civjo4EgPiB0b1wtZXF1aXB0XC1hXC1ib3dcLXdpdGhcLXNpbGtcLWFuZFwtbXVzY3VsYXJcLWZpYnJlOwor46KGID4gbGl2aW5nXC1zcGFjZVwtZm9yXC1vbmVcLWZhbWlseVwtaW5cLWFuY2llbnRcLXRpbWVzOwor452ZID4gdGhlXC10aGlyZFwtb2ZcLXRoZVwtdHdlbHZlXC10ZXJyZXN0cmlhbFwtYnJhbmNoZXM7CivjmbsgPiBsaXZpbmdcLXNwYWNlXC1mb3JcLW9uZVwtZmFtaWx5XC1pblwtYW5jaWVudFwtdGltZXM7CivkuY4gPiBpbnRlcnJvZ2F0aXZlXC1vclwtZXhjbGFtYXRvcnlcLWZpbmFsXC1wYXJ0aWNsZTsKK+a+hCA+IHB1cmlmeVwtd2F0ZXJcLWJ5XC1hbGxvd2luZ1wtc2VkaW1lbnRcLXRvXC1zZXR0bGU7CivmrZ8gPiBhXC1maW5hbFwtcGFydGljbGVcLXVzZWRcLXRvXC1leHByZXNzXC1hZG1pcmF0aW9uOwor5qKiID4gcG9pbnRlZFwtdGlwXC1vZlwtc29tZXRoaW5nXC1sb25nXC1saWtlXC1hXC1icmFuY2g7Civlk5IgPiBhXC1zb3VuZFwtbWFkZVwtdG9cLWdldFwtYVwtaG9yc2VcLXRvXC1tb3ZlXC1mb3J3YXJkOwor55CuID4gb2N0YWdvbmFsXC1waWVjZVwtb2ZcLWphZGVcLXdpdGhcLWhvbGVcLWluXC1taWRkbGU7CivmrKQgPiBhXC1maW5hbFwtcGFydGljbGVcLXVzZWRcLXRvXC1leHByZXNzXC1hZG1pcmF0aW9uOwor5ZS8ID4gc3BlYWtpbmdcLWV2aWxcLlwtZ29iYmxpbmdcLXNvdW5kXC1tYWRlXC1ieVwtZHVja3M7CivpgrQgPiBuYW1lXC1vZlwtYVwtY2l0eVwtaW5cLXRoZVwtYW5jaWVudFwtc3RhdGVcLW9mXC1zb25nOwor5LaYID4gdGhlXC1zb3VuZFwtb2ZcLWNoZXdpbmdcLXNvbWV0aGluZ1wtZHJ5XC1hbmRcLWhhcmQ7CivkrrIgPiBob3JzZVwtd2l0aFwtbWl4ZWRcLWNvbG9yc1wtb2ZcLXllbGxvd1wtYW5kXC13aGl0ZTsKK+SmvCA+IHRvXC1kaWdcLWFcLXBhc3NhZ2VcLXRocm91Z2hcLWFcLW1vdW50YWluXC1vclwtaGlsbDsKK+SlkSA+IGFcLWtpbmRcLW9mXC1kZWNvcmF0aW9uXC1vblwtdGhlXC1oZWFkXC1vZlwtYVwtaG9yc2U7Civko68gPiB3aW5lXC1vclwtYW55XC10aGlja1wtZmx1aWRcLW9mXC10aGVcLWJlc3RcLXF1YWxpdHk7Civko5ogPiBuYW1lXC1vZlwtYVwtdmlsbGFnZVwtaW5cLXRvZGF5JydzXC1oZW5hblwtcHJvdmluY2U7Civko5kgPiBuYW1lXC1vZlwtYVwtY291bnR5XC1pblwtdG9kYXknJ3NcLXNoYW54aVwtcHJvdmluY2U7CivkorogPiBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC10b2RheScnc1wtc2ljaHVhblwtcHJvdmluY2U7CivkorggPiBuYW1lXC1vZlwtYVwtY291bnR5XC1pblwtdG9kYXknJ3NcLXNoYW54aVwtcHJvdmluY2U7Civkob8gPiBmcmFtZXNcLW9uXC10aGVcLXNpZGVzXC1hbmRcLWZyb250XC1vZlwtYVwtY2FycmlhZ2U7CivkobwgPiBmcmFtZXNcLW9uXC10aGVcLXNpZGVzXC1hbmRcLWZyb250XC1vZlwtYVwtY2FycmlhZ2U7CivknK8gPiBuYW1lXC1vZlwtYVwtdmFsbGV5XC1pblwtdG9kYXknJ3NcLXNoYW54aVwtcHJvdmluY2U7CivkmL8gPiBzaGlydFwtb3JcLWFcLWphY2tldFwtd2l0aG91dFwtYW55XC1kZWNvcmF0ZWRcLWhlbTsKK+SWgiA+IGFuXC1lZGliXC1sZVwtd2F0ZXJcLXBsYW50XC1cLVwtXC1icmFzZW5pYVwtcHVycHVyY2E7Civkj64gPiB0aGVcLXNpZGVzXC1vZlwtdGhlXC10cnVua1wtZnJvbVwtYXJtcGl0c1wtdG9cLXJpYnM7CivkhY0gPiBzdHJhaWdodFwtdXB3YXJkXC1vZlwtdGhlXC13aGVhdFwtYW5kXC1yaWNlXC1wbGFudDsKK+SCuCA+IHRvXC1zbWFzaFwtb3JcLXRvXC1rbm9ja1wtdG9cLXBpZWNlc1wtb2ZcLXRoZVwtc3RvbmU7CivjvrwgPiB0b1wtc3VmZmVyXC1hXC1zdHJva2VcLW9mXC1wYXJhbHlzaXNcLW9yXC1hcG9wbGV4eTsKK+O+ryA+IHRvXC1zdWZmZXJcLWFcLXN0cm9rZVwtb2ZcLXBhcmFseXNpc1wtb3JcLWFwb3BsZXh5Owor472rID4gc2VlZHNcLW9mXC10aGVcLXBsYW50XC1hbGxpZWRcLXRvXC10aGVcLXdhdGVyXC1saWx5Owor47i3ID4gYVwta2luZFwtb2ZcLWNhdHRsZVwtd2l0aFwtdHdvXC1ob3Juc1wtc3RyYWlnaHRcLXVwOwor47asID4gYnJpZ2h0XC1saWdodHNcLWFuZFwtaWxsdW1pbmF0aW9uc1wtb2ZcLXRoZVwtZmlyZTsKK+O2oSA+IGJyaWdodFwtbGlnaHRzXC1hbmRcLWlsbHVtaW5hdGlvbnNcLW9mXC10aGVcLWZpcmU7CivjtoYgPiBuYW1lXC1vZlwtYVwtc3RyZWFtXC1pblwtaGViZWlcLXByb3ZpbmNlXC1oZW5nc2hhbjsKK+OuqyA+IGFcLXdvb2RlblwtYXJ0aWNhbFwtdG9cLWJlXC11c2VkXC10b1wtYWRqdXN0XC1hXC1ib3c7Civjq40gPiB0aGVcLXNjYWxsb3BzXC1hbG9uZ1wtdGhlXC1sb3dlclwtZWRnZVwtb2ZcLWFcLWZsYWc7Civjp48gPiB0b1wtY2FycnlcLW9uXC10aGVcLXNob3VsZGVyc29mXC10d29cLW9yXC1tb3JlXC1tZW47Civjm7YgPiBkb1wtbm90XC1jYXJlXC1hYm91dFwtYXBwZWFyYW5jZVwtYW5kXC1kZXBvcnRtZW50Owor45unID4gbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLXRvZGF5JydzXC1zaGFueGlcLXByb3ZpbmNlOwor45qUID4gaW5zdHJ1bWVudFwtb2ZcLXRvcnR1cmVcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+OZhyA+IHRoZVwtY2F0dGxlXC1hbmRcLWhvcnNlc1wtdHJhbXBsZWRcLW9uXC10aGVcLWZpZWxkOwor5aiFID4gbXV0dWFsXC10ZXJtXC1vZlwtYWRkcmVzc1wtdXNlZFwtYnlcLXNvbnNcLWluXC1sYXc7CivprqAgPiBhXC1raW5kXC1vZlwtc2hhZFwtd2l0aFwtYVwtaGVhZFwtbGlrZVwtYVwtc3R1cmdlb247Civog5EgPiB0aGVcLWxpbWJzXC5cLXdpbmdzXC1vZlwtYmlyZHNcLlwtbGVnc1wtb2ZcLWFuaW1hbHM7Civnra0gPiBhblwtYW5jaWVudFwtZGV2aWNlXC1mb3JcLXdvcmtpbmdcLXdpdGhcLW51bWJlcnM7Civmu50gPiBvbm9tYXRvcG9laWNcLWZvclwtdGhlXC1zb3VuZFwtb2ZcLWZhbGxpbmdcLXJhaW47Civlqa0gPiBtdXR1YWxcLXRlcm1cLW9mXC1hZGRyZXNzXC11c2VkXC1ieVwtc29uc1wtaW5cLWxhdzsKK+SztSA+IGFcLWtpbmRcLW9mXC13YXRlclwtYmlyZFwtd2l0aFwtY29sb3JmdWxcLWZlYXRoZXI7Civks5sgPiBhXC1zbWFsbFwtYnJvd25cLXNwZWNrbGVkXC1iaXJkXC1saWtlXC10aGVcLXF1YWlsOwor5KmRID4gaG9yaXpvbnRhbFwtZnJvbnRcLWJhclwtb25cLWFcLWNhcnRcLW9yXC1jYXJyaWFnZTsKK+SmkyA+IHRvXC13YWl0XC1mb3JcLXNvbWV0aGluZ1wtdG9oYXBwZW5cLWltbWVkaWF0ZWx5Owor5KOkID4gbmFtZVwtb2ZcLXZpbGxhZ2VcLWluXC10b2RheScnc1wtc2hhbnhpXC1wcm92aW5jZTsKK+SjnSA+IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLXRvZGF5JydzXC1zaGFueGlcLXByb3ZpbmNlOwor5KOCID4gbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLXRvZGF5JydzXC1odW5hblwtcHJvdmluY2U7CivkoakgPiBzb3VuZFwtb2ZcLWNhcnRzXC1vclwtc3RvbmVzXC1rbm9ja2luZ1wtdG9nZXRoZXI7CivkoY8gPiBob3Jpem9udGFsXC1mcm9udFwtYmFyXC1vblwtYVwtY2FydFwtb3JcLWNhcnJpYWdlOwor5KGMID4gaG9yaXpvbnRhbFwtZnJvbnRcLWJhclwtb25cLWFcLWNhcnRcLW9yXC1jYXJyaWFnZTsKK+SggCA+IHRvXC1zaXRcLWNyb3NzXC1sZWdnZWRcLWxpa2VcLWFcLWJ1ZGRoaXN0XC1wcmllc3Q7CivknKsgPiBuYW1lXC1vZlwtYVwtdmFsbGV5XC1pblwtdG9kYXknJ3NcLWhvYmVpXC1wcm92aW5jZTsKK+ScmiA+IHRvXC1zcGVha1wtcmVja2xlc3NseVwtb3JcLXdpdGhvdXRcLWZvcmV0aG91Z2h0Owor5JOlID4gc291bmRcLW9mXC10aGVcLXdyaWdnbGVkXC1pbnNlY3RzXC1vblwtdGhlXC1ncmFzczsKK+SQhCA+IHRoZVwtdW5zYXRpc2ZhY3Rpb25cLW9mXC1odW5nZXJcLXJlcXVpcmVzXC1tZWF0Owor5I20ID4gdG9cLXNxdWVlemVcLWFuZFwtdG9cLWNyb3dkXC1hZ2FpbnN0XC1lYWNoXC1vdGhlcjsKK+SNhiA+IGNvbnRhaW5lclwtZm9yXC1ncmFpbnNcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+SHryA+IGFcLWtpbmRcLW9mXC1iYW1ib29cLXdpdGhcLXBhdHRlcm5zXC1vblwtdGhlXC1oZWFkOwor47yxID4gdG9cLW1hbmFnZVwtb3JcLXJlZ3VsYXRlXC10aGVcLWxlYXRoZXJcLW1hdGVyaWFsOwor46+KID4gZXZlblwtbWVhc3VyaW5nXC1ib2FyZFwtZm9yXC1wZWNrc1wtYW5kXC1idXNoZWxzOwor46iQID4gdG9cLXNsYXBcLWxpZ2h0bHlcLW9uXC10aGVcLWNsb3RoZXNcLW9yXC1jb3ZlcmxldDsKK+OipSA+IGFcLWJpZ1wtcGllY2VcLW9mXC1sb2dcLXRvXC1qb2luXC10aGVcLXRoaWNrXC1yb3BlczsKK+ePiCA+IGFuXC1vcm5hbWVudFwtYXR0YWNoZWRcLXRvXC1hXC13b21hbicnc1wtaGFpcnBpbjsKK+icgyA+IG1hcmluZVwtbW9uc3Rlclwtd2hpY2hcLWNhblwtY2hhbmdlXC1pdHNcLXNoYXBlOwor5pabID4gZHJ5XC1tZWFzdXJlXC1lcXVhbFwtdG9cLXNvbWVcLWZpdmVcLW9yXC10ZW5cLWRvdTsKK+mEryA+IGRpc3RyaWN0XC1pblwtZ2Fuc3VcLWR1cmluZ1wtdGhlXC10YW5nXC1keW5hc3R5Owor5bq5ID4gdGhlXC1sZW5ndGhcLW9mXC1vbmUnJ3NcLXR3b1wtb3V0c3RyZXRjaGVkXC1hcm1zOwor5o+yID4gdG9cLXNvcnRcLW91dFwtdGhlXC1zdGFsa3NcLXVzZWRcLWluXC1kaXZpbmF0aW9uOwor6Z+NID4gYVwtbGVhdGhlclwta25lZVwtcGFkXC13b3JuXC1kdXJpbmdcLXNhY3JpZmljZXM7Civpj54gPiBhXC1sYXJnZVwtYmVsbFwtdXNlZFwtYXNcLWFcLW11c2ljYWxcLWluc3RydW1lbnQ7Civou44gPiBhXC1icmFzc1wtcGFydHNcLWZvclwtYVwtY2FydFwtaW5cLWFuY2llbnRcLWNoaW5hOwor6JmLID4gYXNwYXJhZ3VzXC1hXC12YXJpZXR5XC1vZlwtcmVkXC1zdGFsa2VkXC1taWxsZXQ7Civlu54gPiB0b1wtcHJlcGFyZVwtaG9yc2VzXC1hbmRcLWNoYXJpb3RzXC1mb3JcLWJhdHRsZTsKK+WplyA+IGFcLW5ld1wtYm9yblwtY2hpbGRcLXRoZVwtd2hpbXBlclwtb2ZcLWFuXC1pbmZhbnQ7CivlprogPiB3aWZlXC1vZlwtdGhlXC1sYXN0XC1ydWxlclwtb2ZcLXRoZVwteGlhXC1keW5hc3R5Owor5ZmgID4gc291bmRcLW1hZGVcLXRvXC1nZXRcLWFcLWhvcnNlXC10b1wtbW92ZVwtZm9yd2FyZDsKK+S4giA+IG9ic3RydWN0aW9uXC1vZlwtYnJlYXRoXC1hc1wtaXRcLXNlZWtzXC1yZWxlYXNlOwor5LC/ID4gYVwta2luZFwtb2ZcLXNtYWxsXC1maXNoXC1ncm93blwtaW5cLWZyZXNoXC13YXRlcjsKK+SivyA+IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLXRvZGF5JydzXC1ob2JlaVwtcHJvdmluY2U7CivkoYggPiB0aGVcLWNyb3NzXC1iYXJcLWF0XC10aGVcLXNpZGVzXC1vZlwtYVwtY2Fycml0YWdlOwor5JSJID4gc2NhdHRlcmVkXC1vclwtZGlzcGVyc2VkXC1vZlwtZ3Jhc3NcLWFuZFwtdHJlZXM7CivkkZIgPiBhXC1raW5kXC1vZlwtZmFybVwtdG9vbFwtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor5JCjID4gc291cFwtbWFkZVwtb2ZcLWN1dHRlZFwtbWVhdFwtbWl4ZWRcLXdpdGhcLWJsb29kOwor5IyuID4gc2lsa1wtZmFicmljc1wtd2l0aFwtdGhlXC1jb2xvclwtb2ZcLW5ld1wtbGVhdmVzOwor5ISoID4gZ3JhaW5zXC1wcm9kdWNpbmdcLW5laXRoZXJcLWZsb3dlclwtbm9yXC1mcnVpdDsKK+SEnSA+IHNob3dcLW5vXC1yZXNwZWN0XC10b1wtdGhlXC1zZXJ2aWNlXC1vZlwtd29yc2hpcDsKK+O8rSA+IHRvXC1zdGVhZHlcLWJ5XC1wdXR0aW5nXC1zb21ldGhpbmdcLXVuZGVybmVhdGg7Civju7IgPiBhXC1yaXRlXC1vclwtc2VydmljZVwtZm9yXC1iZWdpbm5pbmdcLW9mXC1hdXR1bW47CivjqqogPiB0b1wtdXNlXC1hXC13b29kZW5cLXBvbGVcLXRvXC1zdXBwb3J0XC1zb21ldGhpbmc7CivjoqYgPiB3b29kZW5cLXBvc3RcLW9yXC1waWxlXC1mb3JcLXRldGhlcmluZ1wtYW5pbWFsczsKK+OcoiA+IGFcLWJhZFwtdGVybVwtYnlcLXdoaWNoXC1vbmVcLWFkZHJlc3Nlc1wtYVwtd29tYW47CivjmpIgPiBjb25jZWFsZWRcLXRoZVwtc3RvbGVuXC1nb29kc1wtaW5cLW9uZScnc1wtZHJlc3M7CivouKMgPiB0b1wtc3R1bWJsZVwtYW5kXC1mYWxsXC1wcm9uZVwtc3RpZmZcLWluXC1kZWF0aDsKK+m7vCA+IGVtYnJvaWRlcmVkXC1vZmZpY2lhbFwtb3JcLXNhY3JpZmljaWFsXC1yb2JlOwor5bOEID4gYVwtcmFuZ2VcLW9mXC1wZWFrc1wtaW5cLXNoYW5kb25nXC1hbmRcLWppYW5nc3U7Civpl5cgPiBhXC1mcm9udGllclwtcGFzc1wtb3JcLWdhdGVcLXRvXC1zaHV0XC1vclwtY2xvc2U7Civpgr4gPiBhXC1mZXVkYWxcLXN0YXRlXC13aGljaFwtZXhpc3RlZFwtYlwuY1wuNzAwXC00Njk7CivolqkgPiB0cmFuc2xpdGVyYXRpb25cLW9mXC0nJ3NhdCcnXC1pblwtJydib2RoaXNhdHR2YTsKK+iGsCA+IHRvXC1jb29rXC1tZWF0XC1mb3JcLWFcLXNhY3JpZmljZVwtb3JcLW9mZmVyaW5nOwor55GMID4gYVwtd2hpdGVcLW9wYXF1ZVwtcXVhcnR6XC11c2VkXC1mb3JcLW9ybmFtZW50czsKK+a9nyA+IGxhbmRcLWltcHJlZ25hdGVkXC13aXRoXC1zYWx0XC1mcm9tXC10aGVcLXRpZGU7CivltqcgPiBhXC1yYW5nZVwtb2ZcLXBlYWtzXC1pblwtc2hhbmRvbmdcLWFuZFwtamlhbmdzdTsKK+S1niA+IGFuY2llbnRcLXB1bmlzaG1lbnRcLW9mXC10YXR0b29pbmdcLXRoZVwtZmFjZTsKK+SxuSA+IGFcLWNvbmRpbWVudFwtbWFkZVwtZnJvbVwtbWluY2VkXC1maXNoXC1zYWx0ZWQ7CivksLwgPiBhXC1jb25kaW1lbnRcLW1hZGVcLWZyb21cLW1pbmNlZFwtZmlzaFwtc2FsdGVkOwor5K+wID4gdXNlXC1hXC1oYWlyXC1waW5cLXRvXC1zZXRcLWFuZFwtZHJlc3NcLXRoZVwtaGFpcjsKK+SsryA+IHRvXC1oYXZlXC1jb25nZWVcLXdpdGhcLWZyaWVuZHNcLWluXC1vbGRcLXRpbWVzOwor5KGLID4gZGVjb3JhdGlvblwtb25cLXRoZVwtbmF2ZVwtb3JcLWh1Ylwtb2ZcLWFcLXdoZWVsOwor5J6DID4gdG9cLXJlbGlldmVcLW9yXC1naXZlXC1haWRcLXRvXC10aGVcLWRpc3RyZXNzZWQ7CivknakgPiB0b1wtcmVsaWV2ZVwtb3JcLWdpdmVcLWFpZFwtdG9cLXRoZVwtZGlzdHJlc3NlZDsKK+SYryA+IHRoZVwtbGFwZWxcLW9yXC1jb2xsYXJcLW9mXC1hXC1nYXJtZW50XC1vclwtcm9iZTsKK+SYpCA+IGFcLXN3b3JkXC1jb3ZlcmluZ1wtdG9cLXByb3RlY3RcLXRoZVwtc2NhYmJhcmQ7CivkkYwgPiBsd2hhdFwtaXNcLWxlZnRcLW92ZXJcLW9mXC10aGVcLWZvb2RcLVwtb3ZlcnJpcGU7Civki6cgPiBvcm5hbWVubnRzXC1mb3JcLXRoZVwtZnJvbnRhbFwtcGFydFwtb2ZcLXNob2VzOwor5IujID4gZGVjb3JhdGlvbnNcLXB1dFwtb25cLXRoZVwtbWFuZVwtb3JcLWhvcnNlaGFpcjsKK+SKvyA+IHRoZVwtbGFwZWxcLW9yXC1jb2xsYXJcLW9mXC1hXC1nYXJtZW50XC1vclwtcm9iZTsKK+SIlSA+IHRoZVwtbWV0YWxcLXRvbmd1ZVwtaW5cLXRoZVwtcmVlZFwtaW5zdHJ1bWVudHM7Civkg7QgPiBhXC13aGV0c3RvbmVcLXVzZWRcLXRvXC1ncmluZFwtcHJlY2lvdXNcLXN0b25lOwor5IG8ID4gdG9cLWxvb2tcLWJ1dFwtc2VlXC1ub3RoaW5nXC1cLVwtXC1hYnNlbnRcLW1pbmRlZDsKK+O/hiA+IGRhbWFnZVwtYnlcLXRoZVwtcGVzdHNcLXRvXC10aGVcLXJpY2VcLXNlZWRsaW5nOwor47u2ID4gYVwtamFkZVwtdHViZVwtd2l0aFwtd2hpdGVcLWFuZFwtbmF0dXJlXC1jb2xvcnM7Civju7AgPiBkZWNvcmF0ZWRcLWphZGVcLW9yXC1vcm5hbWVudFwtb25cLWFcLXNjYWJiYXJkOwor47uhID4gYVwtamFkZVwtcmluZ1wtd2l0aFwtYVwtc21hbGxcLXNlZ21lbnRcLWN1dFwtb2ZmOwor466GID4gZWF2ZXNcLXNwcm91dGluZ1wtZnJvbVwtdGhlXC1zdHVtcFwtb2ZcLWFcLXRyZWU7Civjq5QgPiBvbmVcLW9mXC10aGVcLWVpZ2h0XC1kaWFncmFtc1wtZm9yXC1kaXZpbmF0aW9uOwor46q7ID4gYVwta2luZFwtb2ZcLXV0ZW5zaWxcLXVzZWRcLXRvXC1sYWRsZVwtb3V0XC13aW5lOwor46mKID4gdG9cLXB1bGxcLXVwXC10aGVcLXNsZWV2ZXNcLWFuZFwtc2hvd1wtdGhlXC1hcm1zOwor46etID4gdG9cLWdldFwtc29tZXRoaW5nXC13aXRoXC1ib3RoXC1yYWlzaW5nXC1oYW5kczsKK+OnmiA+IHRoZVwtZ2VzdHVyZVwtb2ZcLXVzaW5nXC1hblwtaW5kZW50ZWRcLWNvbnRhaW47Civjp4YgPiB0b1wtY292ZXJcLXNvbWV0aGluZ1wtd2l0aFwtYVwtcGllY2VcLW9mXC1jbG90aDsKK+OhiyA+IGFcLWtpbmRcLW9mXC1oZWFkZHJlc3NcLWZvclwtbWFuXC1pblwtb2xkXC1jaGluYTsKK+OguCA+IHRoZVwtbGFwZWxcLW9yXC1jb2xsb3JcLW9mXC1hXC1nYXJtZW50XC1vclwtcm9iZTsKK+OcmiA+IGFcLWxvY2FsXC1nb3Zlcm5tZW50XC1wb3N0XC1pblwtYW5jaWVudFwtdGltZXM7CivjmZ8gPiBsb3dcLWx5aW5nXC1vblwtdGhlXC1zaWRlXC1vZlwtYVwtcml2ZXJcLW9yXC1sYWtlOwor5ZaPID4gcmVzcGVjdGZ1bFwtcmVwbHlcLW9mXC1hc3NlbnRcLXRvXC1zdXBlcmlvcnM7CivnrI8gPiB0YWJsZXRcLWhlbGRcLWJ5XC1zb21lb25lXC1oYXZpbmdcLWF1dGhvcml0eTsKK+i2vCA+IGNhbGxvdXNcLXNraW5cLW9uXC1oYW5kc1wtb3JcLWZlZXRcLlwtYmxpc3RlcnM7CivppZ0gPiB0b1wtZmVlZFwtYW5cLWluZmFudFwtYnlcLWhhbmRcLXN0ZWFtZWRcLWJyZWFkOwor6KONID4gYVwtYm9yZGVyXC1vclwtYmFuZFwtb25cLXRoZVwtZWRnZVwtb2ZcLWFcLWRyZXNzOwor57GqID4gYVwtd2Vpclwtb2ZcLWJhbWJvb1wtdG9cLWNhdGNoXC1maXNoXC1vclwtY3JhYnM7CivnmLIgPiBzcGFzbXNcLW9yXC1jb252dWxzaW9uc1wtaW5cLXlvdW5nXC1jaGlsZHJlbjsKK+eRsiA+IHRpbmtsaW5nXC1zb3VuZFwtdGlua2xpbmdcLW9mXC1wZW5kYW50XC1nZW1zOwor5bydID4gdGhlXC1wYXJ0XC1vZlwtYVwtYm93XC1ncmFzcGVkXC13aGVuXC1zaG9vdGluZzsKK+SlnCA+IHByb3RlY3RpdmVcLW1ldGFsXC1vblwtdGhlXC1heGlzXC1vZlwtYVwtd2hlZWw7CivkmZYgPiBhXC1jbG90aFwtdG9cLWNhcnJ5XC1hblwtaWluZmFudFwtb25cLXRoZVwtYmFjazsKK+SZgCA+IGFcLWNsb3RoXC10b1wtY2FycnlcLWFuXC1paW5mYW50XC1vblwtdGhlXC1iYWNrOwor5I+rID4gaW5cLWJldHdlZW5cLW9mXC10aGVcLWFiZG9tZW5cLWFuZFwtdGhlXC1zcGluZTsKK+SNiSA+IHRyYWNlc1wtb3JcLW1hcmtzXC1vZlwtaW5jb21wbGV0ZVwtb3JcLWRhbWFnZTsKK+SMuCA+IGZpbmVcLXNpbGtcLWZhYnJpY1wtb2ZcLWJyaWdodFwtd2hpdGVcLWNvbG91cjsKK+SLvyA+IGFcLWRlY29yYXRpdmVcLWtub3RcLW1hZGVcLW9mXC1jb2xvcmZ1bFwtc2lsazsKK+SInCA+IGFcLXRocmVhZFwtdXNlZFwtYnlcLWNhcnBlbnRlcnNcLWZvclwtbWFya2luZzsKK+SIhiA+IGFcLXNoYWxsb3dcLWFuZFwtbG9uZ1wtc2hhcGVkXC1iYW1ib29cLWJhc2tldDsKK+O/uSA+IGp1dHRpbmdcLW9uXC10aGVcLWVwaWRlcm1pc1wtb3JcLXRoZVwtY3V0aWNsZTsKK+O8qyA+IGVhcnRoZW53YXJlXC1vclwtcG90dGVyeVwtd2l0aFwtYmlnXC1vcGVuaW5nOwor47W7ID4gdG9cLXBlcnNwaXJlXC1mcm9tXC1lbWJhcnJhc3NtZW50XC1vclwtc2hhbWU7CivjrakgPiBhXC1raW5kXC1vZlwtdHJlZVwtY2FuXC1iZVwtdXNlZFwtYXNcLWR5ZVwtc3R1ZmY7Civjo5kgPiB0b1wtd2Fsa1wtaW5cLWFuXC1lYXN5XC1hbmRcLWxlaXN1cmVseVwtbWFubmVyOwor46KqID4gdG9cLWRyYXdcLWFcLWZ1bGxcLWJvd1wtdG9cLWFpbVwtYXRcLXRoZVwtdGFyZ2V0Owor45iKID4gdGhlXC1hYnJ1cHRcLWFuZFwtaGFzdHlcLXNvdW5kXC1vZlwtdGhlXC1jcm93ZDsKK+OWriA+IGFuXC1pbnRlcmplY3Rpb25cLXVzZWRcLWluXC1wb2Vtc1wtYW5kXC1zb25nczsKK+OUriA+IGFcLWtpbmRcLW9mXC1hbmltYWxcLXdoaWNoXC1sb29rc1wtbGlrZVwtYVwtcmF0Owor5ZWnID4gaW50ZXJqZWN0aW9uXC1vZlwtYXBwcm92YWxcLW9yXC1hZG1pcmF0aW9uOwor5o26ID4gdG9cLXByZXNzXC1kb3duXC1oZWF2aWx5XC13aXRoXC10aGVcLWZpbmdlcnM7CivlgqMgPiB0aGVcLWRhaVwtbWlub3JpdHlcLWxpdmluZ1wtaW5cLXNvdXRoXC1jaGluYTsKK+m4qSA+IGFcLWJpcmRcLXJlc2VtYmxpbmdcLXRoZVwtc2VjcmV0YXJ5XC1mYWxjb247Civmt50gPiBuYW1lXC1vZlwtYW5cLWFmZmx1ZW50XC1vZlwtdGhlXC1wb3lhbmdcLWxha2U7Civpg4UgPiB0b1wtZ29cLXVwXC10b1wuXC1mbG91cmlzaGluZ1wtYVwtc3VwZXJsYXRpdmU7CivovasgPiBhXC1ibG9ja1wtdGhhdFwta2VlcHNcLWFcLXdoZWVsXC1mcm9tXC1tb3Zpbmc7CivltrcgPiBhXC1yYW5nZVwtb2ZcLW1vdW50YWluc1wtaW5cLWh1bmFuXC1wcm92aW5jZTsKK+mssiA+IHR5cGVcLW9mXC1jYWxkcm9uXC13aXRoXC10aHJlZVwtaG9sbG93XC1sZWdzOwor5YiWID4gY3V0dGluZ1wtb2ZmXC1mZWV0XC1hc1wtZm9ybVwtb2ZcLXB1bmlzaG1lbnQ7CivnqbggPiB0aGVcLWdsb29tXC1vZlwtdGhlXC1ncmF2ZVwtYVwtdG9tYlwtb3JcLWdyYXZlOwor6JiFID4gYVwtZnJhZ3JhbnRcLXBsYW50XC10aGVcLXJvb3RcLWlzXC1tZWRpY2luYWw7CivptIYgPiBhXC1iaXJkXC1yZXNlbWJsaW5nXC10aGVcLXNlY3JldGFyeVwtZmFsY29uOwor6amGID4gdXNlZFwtaW5cLXRyYW5zbGl0ZXJhdGluZ1wtYnVkZGhpc3RcLWJvb2tzOwor6aePID4gb2Zmc3ByaW5nXC1vZlwtYVwtc3RhbGxpb25cLWFuZFwtYVwtc2hlXC1tdWxlOwor6YmMID4gdGhlXC1iZWxsc1wtb25cLXRoZVwtY2FydFwtaW5cLWFuY2llbnRcLWNoaW5hOwor6LuUID4gYVwtYmxvY2tcLXRoYXRcLWtlZXBzXC1hXC13aGVlbFwtZnJvbVwtbW92aW5nOwor6KmnID4gdG9cLWV4YW1pbmVcLWludG9cLWp1ZGljaWFsbHlcLXRvXC1maW5kXC1vdXQ7CivntrMgPiBhXC1jbG90aFwtdG9cLWNhcnJ5XC1hblwtaW5mYW50XC1vblwtdGhlXC1iYWNrOwor57aWID4gdGhlXC1oYW5naW5nXC1mbGFwXC1pblwtdGhlXC1mcm9udFwtb2ZcLWFcLWhhdDsKK+elqyA+IHRyaWVubmlhbFwtc2FjcmlmaWNlXC10b1wtb25lJydzXC1hbmNlc3RvcnM7Civno7sgPiBhXC10cmlidXRhcnlcLW9mXC10aGVcLXdlaVwtcml2ZXJcLWluXC1zaGFueGk7CivmlrQgPiB0aGVcLXNvdW5kXC1vZlwtd2F0ZXJcLWZsb3dpbmdcLWFtb25nXC1yb2NrczsKK+W0kSA+IGt1bmx1blwtbW91bnRhaW5zXC1pblwtamlhbmdcLXN1XC1wcm92aW5jZVwuOwor5ZiWID4gaW50ZXJqZWN0aW9uXC1vZlwtYXBwcm92YWxcLW9yXC1hZG1pcmF0aW9uOwor5LCYID4gdG9cLWtpbGxcLWJ5XC1oYW5naW5nXC1vclwtdG9cLXN0cmFuZ3VsYXRpb247CivkrpcgPiB3aGl0ZVwtZnJvbVwtZm9yZWhlYWRcLXRvXC1saXBzXC1vZlwtYVwtaG9yc2U7CivkqrIgPiBhbmNpZW50XC1wdW5pc2htZW50XC1vZlwtc2hhdmluZ1wtdGhlXC1oZWFkOwor5Km4ID4gZmluZVwtd29vbGVuXC1ibGFua2V0XC1vblwtdG9wXC1vZlwtYVwtc2FkZGxlOwor5KmrID4gYVwtdW5pdFwtdG9cLWNvdW50XC1zaG9lc1wtaW5cLWFuY2llbnRcLXRpbWVzOwor5KaFID4gYVwta2luZFwtb2ZcLXdlYXBvblwtdXNlZFwtaW5cLWFuY2llbnRcLXRpbWVzOwor5KWQID4gY29va2luZ1wtdXRlbnNpbHNcLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+SihyA+IGFcLXNvblwtd2hvXC1pc1wtbm90XC1zb1wtZ29vZFwtYXNcLWhpc1wtZmF0aGVyOwor5JuXID4gdG9cLXByeVwtaW50b1wtb3JcLWV4cG9zZVwtYW5vdGhlcicnc1wtc2VjcmV0Owor5JqFID4gdG9cLWxvb2tcLWFmdGVyXC1ob21lXC1vclwtZG9tZXN0aWNcLWFmZmFpcnM7CivkmKggPiBzaG9ydFwtbGVnZ2luZ3NcLWRyYXduXC1vdmVyXC10aGVcLXRyb3VzZXJzOwor5Ja/ID4gYVwta2luZFwtb2ZcLWNsYW1cLXdpdGhcLXRoaWNrXC13aGl0ZVwtc2hlbGxzOwor5Ja9ID4gYVwta2luZFwtb2ZcLWNsYW1cLXdpdGhcLXRoaWNrXC13aGl0ZVwtc2hlbGxzOwor5JWwID4gYVwtc2Vjb25kXC1uYW1lXC1mb3JcLXJoaXpvbWVcLW9mXC13aW5kXC13ZWVkOwor5JOtID4gd2VlZFwtb3JcLWdyYXNzXC13aXRoXC1uYXJyb3dcLXRoaWNrXC1nbGFkZXM7CivkjbsgPiB5b3VuZ1wtZ29hdFwtb2ZcLXNoZWVwXC11bmRlclwtb25lXC15ZWFyXC1vbGQ7CivkjaYgPiBhXC1raW5kXC1vZlwtdHVyYmFuXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivkjLkgPiBhXC1nYXJtZW50XC1vZlwtb25lXC1jb2xvdXJcLXdpdGhcLW5vXC1saW5pbmc7CivkhKogPiBoYW5naW5nXC1kb3duXC1vZlwtdGhlXC1lYXJzXC1vZlwtdGhlXC1ncmFpbnM7CivkhI0gPiB5ZWFyXC1lbmRcLXNhY3JpZmljZVwtb2ZcLXRoZVwtemhvdVwtZHluYXN0eTsKK+O9oCA+IGNvbm5lY3Rpb25cLW9mXC10aGVcLWRpdGNoZXNcLW9yXC13YXRlcndheXM7CivjvK4gPiB0b1wtcnViXC1vdXRcLXRoZVwtZmlsdGhcLXdpdGhcLWJyb2tlblwtdGlsZXM7Civjq6kgPiB0aGVcLWZpcnN0XC1vZlwtdGhlXC1mb3VyXC1zZWFzb25cLVwtXC1cLXNwcmluZzsKK++lpCA+IGFcLXRyaWJ1dGFyeVwtb2ZcLXRoZVwtd2VpXC1yaXZlclwtaW5cLXNoYW54aTsKK+OknSA+IHBhbHBpdGF0aW9uXC1vclwtZmx1dHRlcmluZ1wtb2ZcLXRoZVwtaGVhcnQ7CivjpJEgPiBwYWxwaXRhdGlvblwtb3JcLWZsdXR0ZXJpbmdcLW9mXC10aGVcLWhlYXJ0Owor45+MID4gYVwtbW91bnRhaW5cLWluXC10b2RheScnc1wtc2ljaHVhblwtcHJvdmluY2U7CivjlK8gPiBhXC1sYXJnZVwtYmFza2V0XC1mb3JcLWhvbGRpbmdcLWNvb2tlZFwtcmljZTsKK+esmSA+IHNtYWxsXC1nb3VyZFwtc2hhcGVkXC1tdXNpY2FsXC1pbnN0cnVtZW50Owor5ruVID4gYW5cLWFuY2llbnRcLXN0YXRlXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor6ZWbID4gbGFyZ2VcLWJlbGxcLXVzZWRcLWFzXC1tdXNpY2FsXC1pbnN0cnVtZW50Owor6K61ID4gYW5cLWludGVyamVjdGlvblwtdXNlZFwtZXhwcmVzc1wtc3VycHJpc2U7Civms5QgPiB3YXRlclwtZnJvbVwtd2FzaGluZ1wtcmljZVwtdG9cLWJvaWxcLXRoaWNrOwor55iQID4gdG9cLWRpZVwtaW5cLXByaXNvblwtZnJvbVwtY29sZFwtYW5kXC1odW5nZXI7Civmo7wgPiBiZWFtc1wtaW5cLXRoZVwtcm9vZlwtb2ZcLWFcLWhvdXNlXC1jb25mdXNlZDsKK+m6hSA+IGFcLXNtYWxsXC1zcG90dGVkXC1kZWVyXC1mb3VuZFwtaW5cLW5cLmNoaW5hOwor6Zi8ID4gdGhlXC1zdGVwc1wtbGVhZGluZ1wtdG9cLXRoZVwtZWFzdGVyblwtZG9vcjsKK+i8lyA+IGFcLWNyb3NzXC1iYXJcLWF0XC1lbmRcLW9mXC1hXC1jYXJyaWFnZVwtcG9sZTsKK+ipjiA+IGludGVyamVjdGlvblwtdXNlZFwtdG9cLWV4cHJlc3NcLXN1cnByaXNlOwor57yMID4gY29hcnNlXC1jb3R0b25cLWNsb3RoXC11c2VkXC1mb3JcLW1vdXJuaW5nOwor57emID4gY29hcnNlXC1jb3R0b25cLWNsb3RoXC11c2VkXC1mb3JcLW1vdXJuaW5nOwor56GcID4gdGhlXC1zb3VuZFwtb2ZcLXN0b25lc1wta25vY2tpbmdcLXRvZ2V0aGVyOwor54qJID4gYW5cLW94XC13aXRoXC15ZWxsb3dcLWhhaXJcLWFuZFwtYmxhY2tcLWxpcHM7CivnhZ0gPiB0d2lzdGVkXC1wYXBlclwtZm9yXC1saWdodGluZ1wtY2lnYXJldHRlczsKK+W4rCA+IHRoZVwtc2tpcnRcLW9mXC1hXC1sYWR5JydzXC1kcmVzc1wtcGV0dGljb2F0Owor5bWgID4gYVwtdmFsbGV5XC13aXRoXC1hXC1zdHJlYW1cLWluXC1pdFwuXC1hXC1nb3JnZTsKK+SxlyA+IGFcLWxvbmdcLW5hcnJvd1wtZmlzaFwtdHJpY2hpdXJ1c1wtYXJtYXR1czsKK+SxlCA+IGFcLWxvbmdcLW5hcnJvd1wtYW5kXC1zaWx2ZXJcLWNvbG9yZWRcLWZpc2g7CivkqpMgPiBhXC1tZXRhbFwtb3JuYW1lbnRcLW9uXC1zb21lXC1raW5kXC1vZlwtYmVsdDsKK+SomSA+IHRvXC1yYWluXC1jYXRzXC1hbmRcLWRvZ3NcLWZvclwtYVwtbG9uZ1wtdGltZTsKK+SmiiA+IGFuXC1hcHBsaWFuY2VcLWZvclwtd2Fsa2luZ1wtb25cLXRoZVwtc2FuZHM7CivkpYIgPiB0aGVcLXNoYXJwXC1lZGdlXC1vZlwtYVwtc2hvdmVsXC1vclwtYVwtc3BhZGU7CivkoZUgPiB0aGVcLXJlYXJcLXBsYXRmb3JtXC1vZlwtYVwtbGlnaHRcLWNhcnJpYWdlOwor5JyUID4gdG9cLXNwZWFrXC1vblwtdGhlXC1pZGVhc1wtb2ZcLXNvbWVvbmVcLWVsc2U7CivklqAgPiBhXC1raW5kXC1vZlwtbGl6YXJkXC1mb3VuZFwtaW5cLWRhbXBcLXBsYWNlczsKK+SWnCA+IHRoZVwtZmlnaHRpbmdcLXNvdW5kXC1tYWRlXC1ieVwtdHdvXC10aWdlcnM7CivkjpIgPiBmbHlpbmdcLXF1aWNrbHlcLWFuZFwtdG9cLWF0dGFja1wtc3VkZGVubHk7Civki4ogPiBkZWNvcmF0aW9uc1wtb2ZcLXRoZVwtZW1wZXJvcicnc1wtY2FycmlhZ2U7CivkgJsgPiB0b1wtbG9va1wtZmFyXC13aXRoXC10aGVcLWV5ZXNcLWhhbGZcLWNsb3NlZDsKK+O8qCA+IGFcLXdhdGVyXC1qYXJcLXdpdGhcLWVhcnNcLWZvclwtY2FycnlpbmdcLWl0Owor47uOID4gYVwtbGFyZ2VcLWhvcml6b250YWxcLW11c2ljYWxcLWluc3RydW1lbnQ7CivjuqogPiBhblwtdW5jYXJ2ZWRcLW9mXC11bnBvbGlzaGVkXC1qYWRlXC1vclwtZ2VtOwor47W/ID4gZW5kbGVzc2x5XC1sb25nXC1vclwtdmFzdFwtd2F0ZXJcLWN1cnJlbnRzOwor47SpID4gbmFtZVwtb2ZcLWFcLXN0cmVhbVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+OvmCA+IGFcLXNtYWxsXC13b29kZW5cLXN0YW5kXC1oYXZpbmdcLWZvdXJcLWxlZ3M7CivjpI0gPiBuZXZlclwtcmV2ZWFsXC1vbmUnJ3NcLWZlZWxpbmdcLW9yXC1lbW90aW9uOwor46OgID4gYVwtcm9wZVwtZGVjb3JhdGVkXC13aXRoXC1icm9uemVcLW9ybmFtZW50Owor46GRID4gYW5jaWVudFwtbW91cm5pbmdcLXR1cmJhblwtd29yblwtYnlcLXdvbWVuOwor46CRID4gaGlnaFwtbW91bnRhaW5cLXN0ZWVwXC1ydWdnZWRcLWFuZFwtdW5ldmVuOwor46CEID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluXC1pblwteXVubmFuXC1wcm92aW5jZTsKK+OggSA+IGlycmVndWxhclwtb3V0bGluZVwtb2ZcLWFcLXJhbmdlXC1vZlwtaGlsbHM7Civjn5ogPiBuYW1lXC1vZlwtYVwtbW91bnRhaW5cLWluXC1zaGFueGlcLXByb3ZpbmNlOwor456/ID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluXC1pblwtc2hhbnhpXC1wcm92aW5jZTsKK+OeuSA+IG5hbWVcLW9mXC1hXC1tb3VudGFpblwtaW5cLXNoYW54aVwtcHJvdmluY2U7CivjmrYgPiB3aWZlXC1vZlwtb25lJydzXC1odXNiYW5kJydzXC1lbGRlclwtYnJvdGhlcjsKK+OYiCA+IGFibGVcLXRvXC10YWtlXC1hXC1jb3JyZWN0XC12aWV3XC1vZlwtdGhpbmdzOwor45ewID4gdGhlXC1jaGFyYWN0ZXJcLXVzZWRcLWluXC10cmFuc2xpdGVyYXRpb247Civjkr8gPiBhXC1raW5kXC1vZlwtdHVyYmFuXC11c2VkXC1pblwtYW5jaWVudFwtdGltZTsKK+W8gSA+IGNvbmljYWxcLWNhcFwtd29yblwtZHVyaW5nXC16aG91XC1keW5hc3R5Owor6YWJID4gdGVudGhcLW9mXC10aGVcLXR3ZWx2ZVwtZWFydGhseVwtYnJhbmNoZXM7Civml4wgPiBiYW5uZXJcLW9yXC1mbGFnXC1hZG9ybmVkXC13aXRoXC1mZWF0aGVyczsKK+ihriA+IGNlcmVtb25pYWxcLWRyZXNzXC13b3JuXC1ieVwtdGhlXC1lbXBlcm9yOwor5rqnID4gcml2ZXJcLWluXC1hbmh1aVwtYW5kXC1qaWFuZ3N1XC1wcm92aW5jZXM7Civns40gPiBmb29kXC1tYWRlXC1vZlwtY3J1c2hlZFwtYW5kXC1jb29rZWRcLXJpY2U7CivmrpsgPiB0b1wtcHV0XC10b1wtZGVhdGhcLXRvXC1pbXByaXNvblwtZm9yXC1saWZlOwor54uNID4gc3BlY2llc1wtb2ZcLWRlZXJcLWZvdW5kXC1pblwtbm9ydGhcLWNoaW5hOwor57uCID4gcmliYm9uXC1vclwtY29yZFwtdXNlZFwtYXR0YWNoXC1vcm5hbWVudHM7Civno4kgPiB0aGVcLXN0b25lXC1iYXNlXC1vclwtcGxpbnRoXC1vZlwtYVwtcGlsbGFyOwor6JW5ID4gaXBvbW9lYVwtYXF1YXRpY2FcLXVzZWRcLWFzXC1hXC12ZWdldGFibGU7CivpvYggPiBjb2xkXC1pblwtdGhlXC1oZWFkXC1jYXRhcnJoXC1vZlwtdGhlXC1ub3NlOwor6bm7ID4gaW1wdXJlXC1jYXJib25hdGVcLW9mXC1zb2RpdW1cLW9mXC1uYXRyb247CivptqIgPiBhXC1iaXJkXC13aGljaFwtZnJlcXVlbnRzXC10aGVcLXNlYVwtc2hvcmU7Civpg6ogPiBuYW1lXC1vZlwtYVwtc3RyZWFtXC1pblwtc2ljaHVhblwtcHJvdmluY2U7CivovZ4gPiBhXC12ZWhpY2xlXC1mb3JcLXRyYW5zcG9ydGluZ1wtcHJpc29uZXJzOwor6Ly5ID4gdHdvXC1waWVjZXNcLW9mXC13b29kXC11bmRlcm5lYXRoXC1hXC1jYXJ0Owor6KKeID4gY2VyZW1vbmlhbFwtZHJlc3NcLXdvcm5cLWJ5XC10aGVcLWVtcGVyb3I7Civoir8gPiBncmFzc1wtd2hpY2hcLWhhc1wtYmVlblwtY3V0XC1hbmRcLXJlZ3Jvd247Civog6wgPiBhXC1kaXNlYXNlJydzXC1uYW1lXC1pblwtY2hpbmVzZVwtbWVkaWNpbmU7CivntLEgPiByaWJib25cLW9yXC1jb3JkXC11c2VkXC1hdHRhY2hcLW9ybmFtZW50czsKK+emiiA+IHNlbWlcLWFubnVhbFwtY2VyZW1vbnlcLW9mXC1wdXJpZmljYXRpb247CivmiKUgPiBhXC1zbWFsbFwtc3RlZWx5YXJkXC1mb3JcLXdlaWdoaW5nXC1tb25leTsKK+WvjSA+IHVzZWRcLWFzXC1hXC10ZXJtXC1vZlwtY29tcGFyaXNvblw6XC1yYXRoZXI7CivlkpcgPiB2ZXJiYWxcLXBhcnRpY2xlXC1vZlwtcGVyZmVjdGl2ZVwtYXNwZWN0Owor5LixID4gY2hpbGQnJ3NcLWhhaXJzdHlsZVwtYm91bmRcLWluXC10d29cLXR1ZnRzOwor5K6kID4gb25lXC1vZlwtdGhlXC0zNlwtZ2FyZGVuc1wtaW5cLWhhblwtZHluYXN0eTsKK+SsrSA+IG5hbWVcLW9mXC1hXC1sZWdlbmRhcnlcLWZlcm9jaW91c1wtYW5pbWFsOwor5KqUID4gY3Jvc3NcLWJhclwtb2ZcLXdvb2RcLXVuZGVyXC10aGVcLWNhcnJpYWdlOwor5KekID4gbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor5KSMID4gYVwta2luZFwtb2ZcLXdpbmVcLWJlXC1icmV3ZWRcLWZyb21cLWdyYWluczsKK+SgtyA+IHRoZVwtYXBwZWFyYW5jZVwtb2ZcLWhlaWdodFwtaW5cLWFcLXBlcnNvbjsKK+SghSA+IGhhbmRzXC1hbmRcLWZlZXRcLWNoYXBwZWRcLWZyb21cLXRoZVwtY29sZDsKK+SdpCA+IGFcLXByaW1pdGl2ZVwtdHJpYmVcLWluXC1zb3V0aHdlc3RcLWNoaW5hOwor5J2fID4gYVwtZmllcmNlXC1tYW5cLWVhdGluZ1wtYW5pbWFsXC1pblwtbGVnZW5kOwor5J2dID4gYW5cLWV4Y2xhbWF0aW9uXC1pbmRpY2F0aW5nXC1hZG1pcmF0aW9uOwor5JuTID4gYW5cLW9mZmljaWFsXC1wb3NpdGlvblwtaW5cLWZvcm1lclwtdGltZXM7CivkmpggPiB0aGVcLWxvbmdcLWFuZFwtdXByaWdodFwtaG9ybnNcLW9mXC1jYXR0bGU7CivklpIgPiBlYXJ0aGVud2FyZVwtd2l0aFwtdGhlXC1zaGFwZVwtb2ZcLWFcLWJlYW47CivklY4gPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzXC1wZXJlbm5pYWw7Civkk5EgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzXC1kdWNrd2VlZHM7CivkkZcgPiB0b1wtcG91bmRcLWluXC1vcmRlclwtdG9cLXJlbW92ZVwtdGhlXC1odXNrOwor5JGUID4gdG9cLXBvdW5kXC1pblwtb3JkZXJcLXRvXC1yZW1vdmVcLXRoZVwtaHVzazsKK+SQsSA+IHRvXC1waWNrXC10aGVcLW1lYXRcLWluXC1iZXR3ZWVuXC1vZlwtYm9uZXM7Civkj4EgPiB1bmFibGVcLXRvXC1oZWFyXC1kaXN0aW5jdGx5XC1vclwtY2xlYXJseTsKK+SKoCA+IHRvXC1naXZlXC1hXC1zdXBwbHlcLWZcLWdyYWluXC1mb3JcLXJhdGlvbnM7CivkiZ8gPiBhXC1iYW1ib29cLWJhc2tldFwtdXNlZFwtdG9cLWNhdGNoXC1maXNoZXM7CivkiLAgPiBhXC1icnVzaFwtZm9yXC13YXNoaW5nXC1raXRjaGVuXC11dGVuc2lsczsKK+SHvCA+IGFcLWJhbWJvb1wtdmVzc2VsXC11c2VkXC10b1wtY2F0Y2hcLWZpc2hlczsKK+SEqyA+IGFcLWtpbmRcLW9mXC1zb3JnaHVtXC13aXRoXC13aGl0ZVwtc3Byb3V0czsKK+SEiCA+IHNhY3JpZmljZVwtdG9cLWhhcHBpbmVzc1wtYW5kXC1nb29kXC1sdWNrOwor5IOkID4gYmxhY2tcLWNvbG9yZWRcLWdyaW5kc3RvbmVcLW9yXC13aGVzdG9uZTsKK+SDjiA+IG5hbWVcLW9mXC1hXC1wbGFjZVwtXC1zbWFsbFwtcGllY2VcLW9mXC1jb2FsOwor5IK/ID4gdG9cLXBvdW5kXC1pblwtb3JkZXJcLXRvXC1yZW1vdmVcLXRoZVwtaHVzazsKK+SCuSA+IHNvdW5kXC1vZlwtdGhlXC1mYWxsaW5nXC1waWVjZXNcLW9mXC1yb2NrczsKK+SBtiA+IHRvXC1sb29rXC1hdFwtc29tZXRoaW5nXC13aXRob3V0XC13aW5raW5nOwor5IG1ID4gbmV3Ym9yblwtYmFieVwtd2l0aFwtdGhlXC1leWVsaWRzXC1jbG9zZWQ7CivjvYUgPiB2ZXNzZWxcLWZvclwtY2VyZW1vbnlcLWluXC1hbmNpZW50XC10aW1lczsKK+O4uSA+IGNhdHRsZVwtd2l0aFwtd2hpdGVcLXN0cmlwZVwtb25cLXRoZVwtYmFjazsKK+O4lyA+IG5vdFwtYVwtcmVhbFwtZmF0aGVyXC1vclwtYVwtbmF0dXJlXC1mYXRoZXI7Civjs5ggPiBhXC1mb3VudGFpblwtb3JcLXNwcmluZ1wtZmxvd3NcLWRvd253YXJkczsKK+OuryA+IHdob2xlXC1waWVjZVwtb2ZcLW9yXC11bmJyb2tlblwtZmlyZXdvb2RzOwor466cID4gYVwtYmxvY2tzXC1lbmdyYXZlZFwtZm9yXC1ob2xkaW5nXC10aGluZ3M7Civjq6ogPiB0b1wtcG91bmRcLWluXC1vcmRlclwtdG9cLXJlbW92ZVwtdGhlXC1odXNrOwor45+8ID4gbmFtZVwtb2ZcLWFcLXBsYWNlXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor456UID4gdGhlXC11cHJpZ2h0XC1iYXJcLWZvclwtZmFzdGVuaW5nXC1hXC1kb29yOwor452eID4gcHJldGVuZFwtdG9cLWJlXC1kZWxpY2F0ZVwtYW5kXC1iZWF1dGlmdWw7CivjnLkgPiBuYW1lXC1vZlwtYVwtZm9sa1wtc29uZ1wtaW5cLWFuY2llbnRcLXRpbWVzOwor45qBID4gdGhlXC1sb25nXC10YWlsXC1mZWF0aGVyc1wtd2hpY2hcLWN1cmxcLXVwOwor6ZiuID4gYW5jaWVudFwtbXVzaWNhbFwtaW5zdHJ1bWVudFw6XC1zdXJuYW1lOwor5ZaUID4gZGVzY3JpcHRpdmVcLW9mXC1jcnlpbmdcLW9yXC1vZlwtY3Jvd2luZzsKK+eQjyA+IHZlc3NlbFwtdXNlZFwtdG9cLWhvbGRcLWdyYWluXC1vZmZlcmluZ3M7CivpgpUgPiBmb3JtZXJcLW9yXC1saXRlcmFyeVwtbmFtZVwtZm9yXC1uYW5uaW5nOwor6a2RID4gYVwtbW91bnRhaW5cLWRlbW9uXC1yZXNlbWJsaW5nXC1hXC10aWdlcjsKK+aYtiA+IGFcLWxvbmdcLWRheVwuXC1icmlnaHRcLlwtZXh0ZW5kZWRcLlwtY2xlYXI7CivnvKcgPiBhXC1jaGFpblwtb3JcLXJvcGVcLXVzZWRcLWJpbmRcLWNyaW1pbmFsczsKK+ierSA+IGFcLWRyYWdvblwtd2hvc2VcLWhvcm5zXC1oYXZlXC1ub3RcLWdyb3duOwor6b6AID4gbG9zZVwtYmFieVwtdGVldGhcLWFuZFwtZ2V0XC1hZHVsdFwtdGVldGg7CivogpwgPiB0b1wtc2FjcmlmaWNlXC1vblwtdHdvXC1zdWNjZXNzaXZlXC1kYXlzOwor6YKXID4gYW5cLWFuY2llbnRcLXBsYWNlXC1pblwtdGhlXC1zdGF0ZVwtb2ZcLXd1Owor6b6GID4gbG9zZVwtYmFieVwtdGVldGhcLWFuZFwtZ2V0XC1hZHVsdFwtdGVldGg7CivpvaAgPiBsb3NlXC1iYWJ5XC10ZWV0aFwtYW5kXC1nZXRcLWFkdWx0XC10ZWV0aDsKK+m9lCA+IGxvc2VcLWJhYnlcLXRlZXRoXC1hbmRcLWdldFwtYWR1bHRcLXRlZXRoOwor6ZCkID4gaHVnZVwtdHJpcG9kXC1vZlwtYnJvbnplXC13aXRoXC10d29cLWVhcnM7Civop60gPiBvbmVcLXR1cm5pbmdcLXVwXC1hbmRcLW9uZVwtdHVybmluZ1wtZG93bjsKK+iksSA+IHRvXC1jYXJyeVwtaW5cLXRoZVwtYm9zb21cLW9yXC10aGVcLXNsZWV2ZTsKK+ikoiA+IHRvXC1jYXJyeVwtaW5cLXRoZVwtYm9zb21cLW9yXC10aGVcLXNsZWV2ZTsKK+iJnCA+IGFcLWxvbmdcLW5hcnJvd1wtdmVzc2VsXC13aXRoXC10d29cLW1hc3RzOwor6Ie/ID4gdG9cLXNlcGFyYXRlXC10aGVcLWdyYWluXC1mcm9tXC10aGVcLWh1c2s7CivnuLIgPiBhXC1jaGFpblwtb3JcLXJvcGVcLXVzZWRcLWJpbmRcLWNyaW1pbmFsczsKK+e1sCA+IHdoaXRlXC1oZW1wZW5cLWNsb3RoXC13b3JuXC1ieVwtbW91cm5lcnM7CivnoqogPiBzdG9uZVwtc2xhYlwtdXNlZFwtZm9yXC13YXNoaW5nXC1jbG90aGVzOwor55uHID4gd2h5XC1ub3RcP1wtd291bGRcLWl0XC1ub3RcLWJlXC1iZXR0ZXJcLXRvXD87Civmu6sgPiB3YXRlclwtaW5cLXdoaWNoXC1yaWNlXC1oYXNcLWJlZW5cLWJvaWxlZDsKK+aqkSA+IGxvZ3NcLXJvbGxlZFwtZG93blwtaW5cLWRlZmVuc2VcLW9mXC1jaXR5Owor5qOzID4gc21hbGxcLXBpbGxhcnNcLXRoYXRcLXN1cHBvcnRcLXRoZVwtcm9vZjsKK+W4lyA+IGFcLW11bHRpY29sb3JlZFwtcHJvcFwtdXNlZFwtaW5cLWRhbmNpbmc7CivlmKAgPiB0aGVcLWNoaXJwaW5nXC1vZlwtYmlyZHNcLWxvdWRcLWxhdWdodGVyOwor5ZSEID4gZmluYWxcLXBhcnRpY2xlXC1vZlwtYXNzZXJ0aW9uXC1wYXRoYWthOwor5YC7ID4gcGhvbmV0aWNcLXVzZWRcLWluXC1rb3JlYW5cLXBsYWNlXC1uYW1lczsKK+S1uiA+IGJvdW5kYXJ5XC1iZXR3ZWVuXC1hZ3JpY3VsdHVyYWxcLWxhbmRzOwor5LW5ID4gaW5zZWN0c1wtdGhhdFwtYXJlXC1pbmp1cmlvdXNcLXRvXC1jcm9wczsKK+StjSA+IHRvXC1saXZlXC13aXRoXC1hbm90aGVyXC1hdFwtaGlzXC1leHBlbnNlOwor5KylID4gY29va2VkXC1mb29kXC13aGljaFwtaGFzXC1iZWNvbWVcLW1vdWxkeTsKK+SsmSA+IHRvXC1kYW5jZVwtYW5kXC10b3NzXC1hYm91dFwtaW5cLXRoZVwtd2luZDsKK+SgqyA+IHRvXC1zdWNjdW1iXC10b1wtdGhlXC1lZmZlY3RcLW9mXC1hbGNvaG9sOwor5J2mID4gYVwta2luZFwtb2ZcLWFuaW1hbFwtbG9va3NcLWxpa2VcLWxlb3BhcmQ7CivknKAgPiBsYW5ndWFnZVwtb2ZcLXRoZVwtc2F2YWdlXC1vclwtYmFyYmFyaWFuOwor5Ja6ID4gYVwtbGVnZW5kYXJ5XC1hbmltYWxcLWluXC1hbmNpZW50XC10aW1lczsKK+SWpSA+IGluc2VjdHNcLXRoYXRcLWFyZVwtaW5qdXJpb3VzXC10b1wtY3JvcHM7CivkkrwgPiBhXC1iYW1ib29cLXRyYXlcLWZvclwtcmFpc2luZ1wtc2lsa3dvcm1zOwor5JGzID4gYVwtaG9yaXpvbnRhbFwtYmFyXC1pblwtZnJvbnRcLW9mXC1hXC1ib2F0Owor5JCnID4gdG9cLXJld2FyZFwtb3JcLWNoZWVyXC10cm9vcHNcLXdpdGhcLWZvb2Q7CivkjrAgPiBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC1zaWNodWFuXC1wcm92aW5jZTsKK+SNnyA+IGFcLWtpbmRcLW9mXC1maXNoXC1uZXRcLXdpdGhcLWZpbmVcLW1lc2hlczsKK+SHqCA+IGFcLWJhbWJvb1wtYmFza2V0XC1mb3JcLWZvb2RcLWNvbnRhaW5lcnM7Civkho4gPiBncmFzc1wtYW5kXC1ncmFpbnNcLXByb2R1Y2luZ1wtbm9cLWZydWl0Owor5IS7ID4gYVwtc2Vjb25kXC10aW1lXC1ncm93aW5nXC1vZlwtcmljZVwtcGxhbnQ7CivkgJogPiB0b1wtbGlmdFwtdXBcLXRoZVwtZXllc1wtYW5kXC1sb29rXC1hcm91bmQ7Civjv5YgPiBjYXJidW5jbGVcLXVzZWRcLWluXC1uYW1pbmdcLW9mXC1hXC1wbGFjZTsKK+O6myA+IG5hbWVcLW9mXC1hXC12aWxsYWdlXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor47eIID4gZW1iZXJzXC1rZXB0XC1mb3JcLXN0YXJ0aW5nXC1hXC1uZXdcLWZpcmU7CivjtYEgPiB2YXN0XC1hbmRcLWJvdW5kbGVzc1wtb2ZcLWZsb3dpbmdcLXdhdGVyOwor47OVID4gd2F0ZXJcLWluXC13aGljaFwtcmljZVwtaGFzXC1iZWVuXC13YXNoZWQ7Civjr6ogPiBjYXJ2ZWRcLW9yXC1wYXR0ZXJuZWRcLXdpbmRvd1wtcmFpbGluZ3M7Civjq4AgPiBodWdlXC10cmlwb2RcLW9mXC1icm9uemVcLXdpdGhcLXR3b1wtZWFyczsKK++mlCA+IHZlc3NlbFwtdXNlZFwtdG9cLWhvbGRcLWdyYWluXC1vZmZlcmluZ3M7CivjoJkgPiBhXC1tb3VudGFpblwtcGF0aHNcLW5hbWVcLW9mXC1hXC1tb3VudGFpbjsKK+OTrSA+IHRvXC1tYWtlXC1yZWFkeVwtdGhlXC1sZWF0aGVyXC1mb3JcLXNob2VzOwor45C3ID4gYVwta2luZFwtb2ZcLXB1bmlzaG1lbnRcLWluXC1oYW5cLWR5bmFzdHk7CivoorEgPiBhXC1waWVjZVwtb2ZcLWNsb3RoXC11c2VkXC13cmFwXC1idW5kbGVzOwor5oyyID4gdG9cLWZlZWxcLW9yXC1mb25kbGVcLXdpdGhcLXRoZVwtZmluZ2VyczsKK+evkSA+IGFcLWJhbWJvb1wtYmFza2V0XC1mb3JcLWNhcnJ5aW5nXC1lYXJ0aDsKK+iCkyA+IHJlZ2lvblwtYmV0d2VlblwtaGVhcnRcLWFuZFwtZGlhcGhyYWdtOwor5rumID4gcml2ZXJcLWFuZFwtY291bnR5XC1pblwtaGViZWlcLXByb3ZpbmNlOwor6YOXID4gY2l0eVwtdW5kZXJcLXRoZVwtY2hvdVwtZHluXC5cLWFcLXN1cm5hbWU7Civnj48gPiB0d29cLXBpZWNlc1wtb2ZcLWphZGVcLWpvaW5lZFwtdG9nZXRoZXI7CivntqYgPiBkYXJrXC1ncmV5XC5cLXZhcmllZ2F0ZWRcLlwtc3VwZXJsYXRpdmU7CivpuocgPiBnZW5lcmFsXC1uYW1lXC1mb3JcLXRoZVwtaG9ybmxlc3NcLWRlZXI7Civnko4gPiBhXC1uZWNrbGFjZVwtbWFkZVwtb2ZcLXByZWNpb3VzXC1zdG9uZXM7Civmjr4gPiBhXC1nZW5lcmFsXC1kZXNpZ25hdGlvblwtb2ZcLW9mZmljaWFsczsKK+mDhyA+IGFuXC1hbmNpZW50XC1mZXVkYWxcLXN0YXRlXC1pblwtc2hhYW54aTsKK+m+mCA+IHRoZVwtYXBwZWFyYW5jZVwtb2ZcLWFcLWRyYWdvblwtd2Fsa2luZzsKK+m0vSA+IGFcLXNwZWNpZXNcLW9mXC1iaXJkXC1yZXNlbWJsaW5nXC1xdWFpbDsKK+mEqyA+IHN0YXRlXC1pblwtdG9kYXknJ3NcLXNoYW5kb25nXC1wcm92aW5jZTsKK+mEhyA+IGFcLW5hbWVcLW9mXC1hXC10b3duXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor6L+/ID4gdG9cLWJlXC10aGVcLWZpcnN0XC10b1wtYmVnaW5cLWFcLXF1YXJyZWw7CivovZUgPiBncmVhdFwtYXJyYXlcLW9mXC1zcGVhcnNcLWFuZFwtY2hhcmlvdHM7CivovLUgPiBncmVhdFwtYXJyYXlcLW9mXC1zcGVhcnNcLWFuZFwtY2hhcmlvdHM7CivovKAgPiBncmVhc2VcLXBvdFwtaHVuZ1wtdW5kZXJcLWF4bGVcLW9mXC1jYXJ0Owor6IayID4gdGhlXC10aHJlZVwtZGl2aXNpb25zXC1vZlwtdGhlXC12aXNjZXJhOwor57SWID4gYVwtcm9wZVwtZm9yXC1sZWFkaW5nXC1jYXR0bGVcLW9yXC1ob3JzZTsKK+ewoyA+IGFcLWJhbWJvb1wtYmFza2V0XC1mb3JcLWNhcnJ5aW5nXC1lYXJ0aDsKK+esriA+IGJvYXJkc1wtd2hpY2hcLXN1cHBvcnRcLXRpbGVzXC1vblwtcm9vZjsKK+eghSA+IGNyb3NzXC1zdHJlYW1cLWJ5XC1zdGVwcGluZ1wtb25cLXN0b25lczsKK+eTlCA+IGFcLW5lY2tsYWNlXC1tYWRlXC1vZlwtcHJlY2lvdXNcLXN0b25lczsKK+eSiSA+IGFcLXZlc3NlbFwtdXNlZFwtaG9sZFwtZ3JhaW5cLW9mZmVyaW5nczsKK+ePsSA+IGFcLW5lY2tsYWNlXC1tYWRlXC1vZlwtcHJlY2lvdXNcLXN0b25lczsKK+eOqCA+IHR3b1wtcGllY2VzXC1vZlwtamFkZVwtam9pbmVkXC10b2dldGhlcjsKK+eBpCA+IHJpdmVyXC1hbmRcLWNvdW50eVwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+aioSA+IHRyYXlcLWZvclwtY2FycnlpbmdcLXNhY3JpZmljaWFsXC1tZWF0Owor5oyxID4gdG9cLWZlZWxcLW9yXC1mb25kbGVcLXdpdGhcLXRoZVwtZmluZ2VyczsKK+W5tSA+IGV2ZW5cLWxldmVsXC5cLXRvXC1yYWlzZVwtaW5cLWJvdGhcLWhhbmRzOwor5auEID4gYW5cLWFuY2llbnRcLWVtcGVyb3InJ3NcLW1vdGhlcicnc1wtbmFtZTsKK+WbtyA+IHJvdW5kXC1zaGFwZWRcLXN0b3JhZ2VcLWJpblwtZm9yXC1ncmFpbjsKK+S0mSA+IGFcLWtpbmRcLW9mXC1iaXJkXC1yZXNlbWJsaW5nXC10aGVcLWR1Y2s7CivksoMgPiBhXC1jYXJwXC1saWtlXC1maXNoXC13aXRoXC1jaGlja2VuXC1mZWV0Owor5KmXID4gdG9cLXJ1bGVcLWJ5XC1taWdodFwtcmF0aGVyXC10aGFuXC1yaWdodDsKK+SilSA+IGFcLWdyb3VwXC1vZlwtcGVvcGxlXC13YWxraW5nXC10b2dldGhlcjsKK+SaoSA+IGJvbmVzXC1pblwtYVwtaG9yblwtb2ZcLWNhdHRsZVwtYW5kXC1nb2F0Owor5JmsID4gcGxhaXRzXC1vblwtdGhlXC1zaWRlc1wtb2ZcLWFcLXBldHRpY29hdDsKK+SQgCA+IHRvXC1kaXNtZW1iZXJcLWJvZHlcLW9mXC10aGVcLWxpdmVzdG9jazsKK+SOjiA+IHRvXC1nbGlkZVwtb3JcLXRvXC1ob3ZlclwtdXBcLWluXC10aGVcLWFpcjsKK+SNiiA+IGNsYXlcLW1hZGVcLWJsb3dpbmdcLXdpbmRcLWluc3RydW1lbnRzOwor5Ii/ID4gYmVsdFwtb2ZcLXRoZVwtY2FudmFzXC10b3BcLW9uXC12ZWhpY2xlczsKK+SHriA+IGFcLWJhbWJvb1wtbWF0XC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivkhZogPiBjbG9zZWx5XC1ncm93aW5nXC1vZlwtdGhlXC1yaWNlXC1wbGFudHM7CivkhLYgPiByaWNlXC1wbGFudFwtZ3Jvd2luZ1wtdGhlXC1zZWNvbmRcLXRpbWU7Civkgb4gPiByZWRcLWFuZFwtc3dlbGxpbmdcLW9mXC10aGVcLWV5ZVwtc29ja2V0Owor5IGoID4gdG9cLW9wZW5cLXRoZVwtZXllc1wtd2l0aFwtYXN0b25pc2htZW50Owor472bID4gbmFycm93XC10cmFpbFwtb2ZcLXBhdGhcLWluXC10aGVcLWZpZWxkczsKK+O6kSA+IGRvZ3NcLXdvcm1lZFwtdGhyb3VnaFwtYVwtbmFycm93XC1wbGFjZTsKK+O5oiA+IGFcLWxhcmdlXC1hcGVcLWZvdW5kXC1pblwtd2VzdGVyblwtY2hpbmE7CivjuZwgPiB0d29cLWRvZ3NcLWFyZVwtYmFya2luZ1wtdG9cLWVhY2hcLW90aGVyOwor47mJID4gYVwtbGVnZW5kYXJ5XC1hbmltYWxcLXdpdGhcLXRocmVlXC1mZWV0Owor47emID4gdG9cLW9wZW5cLXRoZVwtZXllc1wtd2l0aFwtYXN0b25pc2htZW50Owor47aAID4gZGVlcFwtYW5kXC12YXN0XC1vZlwtdGhlXC1mbG93aW5nXC13YXRlcjsKK+OwtiA+IHRvXC13cmlua2xlXC10aGVcLW5vc2VcLXdpdGhcLXNvcnJvd2Z1bDsKK+OtsiA+IGFcLXdvb2RlblwtZnJhbWVcLWZvclwtY2FycnlpbmdcLXRoaW5nczsKK+OhoSA+IHNjcmVlblwtdG9cLW1ha2VcLWFcLXRlbXBvcmFyeVwta2l0Y2hlbjsKK+OgvyA+IGFcLWtpbmRcLW9mXC1kZWxpY2F0ZVwtYW5kXC1maW5lXC1mYWJyaWM7CivjnLogPiBuaWNlXC13aGl0ZVwtY29sb3JcLWFuZFwtbG9va3NcLXNvXC1nb29kOwor45y1ID4gd2l0aFwtYVwtY2hhcm1pbmdcLXNwcmlnaHRseVwtY2FycmlhZ2U7CivjmqkgPiB3aXRoXC1hXC1jaGFybWluZ1wtc3ByaWdodGx5XC1jYXJyaWFnZTsKK+OZiCA+IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLXNoYW54aVwtcHJvdmluY2U7CivjlqEgPiB0aGVcLWJpcmRzXC1zaW5naW5nXC1kdXJpbmdcLXRoZVwtbmlnaHQ7CivjlbogPiBsb29rc1wtYmlnXC1vdXRzaWRlXC1idXRcLWVtcHR5XC1pbnNpZGU7CivjlYQgPiB0b1wtYXBwbHlcLWtub3dsZWRnZVwtdG9cLWZpbmFsXC1jYXVzZXM7CivnpL4gPiBnb2RcLW9mXC10aGVcLXNvaWxcLWFuZFwtYWx0YXJzXC10b1wtaGltOwor55GfID4gbGFyZ2VcLXN0cmluZ2VkXC1tdXNpY2FsXC1pbnN0cnVtZW50Owor5qWeID4gdXNlZFwtZm9yXC1jZXlsb25cLWluXC1idWRkaGlzdFwtdGV4dHM7Civllr0gPiB1c2VkXC1pblwtb25vbWF0b3BvZXRpY1wtZXhwcmVzc2lvbnM7CivlmoUgPiB0YWxrXC1pbmRpc3RpbmN0bHlcLWFuZFwtZmFsdGVyaW5nbHk7Civoo7EgPiB0b1wtbW91bnRcLW1hcHNcLW9yXC1zY3JvbGxzXC10b1wtcGFzdGU7CivnjKIgPiBhXC1raW5kXC1vZlwtbW9ua2V5XC1mb3VuZFwtaW5cLXdcLmNoaW5hOwor6JyuID4gYVwtZmFidWxvdXNcLWNyZWF0dXJlXC1saWtlXC1hXC10dXJ0bGU7CivlkZYgPiB1c2VkXC1pblwtb25vbWF0b3BvZXRpY1wtZXhwcmVzc2lvbnM7CivnoqEgPiBzdG9uZVwtcm9sbGVyXC11c2VkXC10b1wtbGV2ZWxcLWZpZWxkczsKK+mEoyA+IG5hbWVcLW9mXC1hbmNpZW50XC1jaXR5XC1pblwtblwuamlhbmdzdTsKK+eyoiA+IGdyYWluXC1vZmZlcmVkXC1pblwtcml0dWFsXC1zYWNyaWZpY2U7CivnsKYgPiBsYXJnZVwtdW1icmVsbGFcLXdpdGhcLWFcLWxvbmdcLWhhbmRsZTsKK+iekyA+IGFcLXNtYWxsXC1jaWNhZGFcLXdpdGhcLWFcLXNxdWFyZVwtaGVhZDsKK+mtiiA+IGFcLW15dGhpY2FsXC1jcmVhdHVyZVwtc2FpZFwtaHVybFwtc2FuOwor6Z+QID4ga25lZVwtcGFkXC1tYWRlXC1vZlwtcmVkXC1keWVkXC1sZWF0aGVyOwor6LuPID4gY3Jvc3NcLWJhclwtYXRcLWVuZFwtb2ZcLXBvbGVzXC1vZlwtY2FydDsKK+iWgCA+IHRoZVwtaGlwcHVyaXNcLW9yXC1tYXJlJydzXC10YWlsXC1wbGFudDsKK+iVsCA+IHRoZVwtaGlwcHVyaXNcLW9yXC1tYXJlJydzXC10YWlsXC1wbGFudDsKK+iBnSA+IHRvXC1jdXRcLXRoZVwtbGVmdFwtZWFyc1wtb2ZcLXRoZVwtc2xhaW47CivogJQgPiB0b1wtaG9lXC11cFwtdGhlXC1lYXJ0aFwtYXJvdW5kXC1wbGFudHM7CivnsKsgPiBtdXNpY2FsXC1pbnN0cnVtZW50XC1saWtlXC1wYW5cLXBpcGVzOwor57CoID4gYVwtYmVhbVwtZm9yXC1oYW5naW5nXC1iZWxsc1wtb3JcLWRydW1zOwor57CYID4gbXVzaWNhbFwtaW5zdHJ1bWVudFwtbGlrZVwtcGFuXC1waXBlczsKK+euviA+IG11c2ljYWxcLWluc3RydW1lbnRcLWxpa2VcLXBhblwtcGlwZXM7CivnpLMgPiBuYW1lXC1vZlwtcGxhY2VcLWluXC1zaGFuXC14aVwtcHJvdmluY2U7CivnoqsgPiBjb2Fyc2VcLXN0b25lXC1cKHVzZWRcLWZvclwtd2hldHN0b25lXCk7Civnkq8gPiBqYWRlXC1vcm5hbWVudFwtaW5cLXRoZVwtc2VhbXNcLW9mXC1jYXA7CivnkK8gPiBhXC1qYWRlXC10dWJlXC11c2VkXC1hc1wtYW5cLWluc3RydW1lbnQ7CivnjoEgPiBhXC1kb2dcLXdpdGhcLWFcLWxvbmdcLXNub3V0XC1vclwtbXV6emxlOwor5qOfID4gdGhlXC1tYWluXC1iZWFtc1wtc3VwcG9ydGluZ1wtYVwtaG91c2U7CivmiKAgPiBhXC1zd29yZFwuXC1wb3R0ZXInJ3NcLWNsYXlcLlwtdG9cLWdhdGhlcjsKK+WapiA+IHVzZWRcLWluXC1vbm9tYXRvcG9ldGljXC1leHByZXNzaW9uczsKK+WYjSA+IHVzZWRcLWluXC1vbm9tYXRvcG9ldGljXC1leHByZXNzaW9uczsKK+WRrSA+IGZpbmFsXC1wYXJ0aWNsZVwtZXhwcmVzc2luZ1wtY29uc2VudDsKK+WRoSA+IHRoZVwtY29ybmVyc1wtb2ZcLXRoZVwtbW91dGhcLXRoZVwtbGlwczsKK+S2rCA+IGhhcmRcLWZpbnNcLW9uXC10aGVcLWJhY2tcLW9mXC1hXC1kcmFnb247CivktoUgPiBhXC1tYXJtb3RcLWxpa2VcLXJhdFwtd2l0aFwtYVwtYmlnXC1oZWFkOwor5LSTID4gZ2VuZXJhbFwtdGVybVwtZm9yXC1zbWFsbFwtYmlyZFwtZ3JvdXA7CivkrJcgPiBibG93blwtb3JcLXRvc3NlZFwtYWJvdXRcLWJ5XC10aGVcLXdpbmQ7Civkp4kgPiBuYW1lXC1vZlwtYVwtcGF2aWxpb25cLWluXC1oYW5cLWR5bmFzdHk7CivkpbYgPiBjb29raW5nXC11dGVuc2lsXC11c2VkXC1pblwtb2xkXC10aW1lczsKK+SlrCA+IGFcLW11c2ljYWxcLWluc3RydW1lbnRcLWluXC1vbGRcLXRpbWVzOwor5KOcID4gbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLWFuY2llbnRcLXRpbWVzOwor5KOWID4gbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLWFuY2llbnRcLXRpbWVzOwor5KOVID4gbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLWFuY2llbnRcLXRpbWVzOwor5KOMID4gcmVzaWRlbmNlXC1vZlwtYVwtcHJpbmNlXC1vclwtbm9iaWxpdHk7CivkoZ0gPiBhXC1yZWFyXC1jb3ZlcmluZ1wtb2ZcLWFcLWJpZ1wtY2FycmlhZ2U7CivkoYogPiB0aGVcLXByb3RydWRlZFwtc2lkZXNcLW9mXC1hXC1jYXJyaWFnZTsKK+SgmiA+IHRvXC1zdGVwXC1vblwtdGhlXC1ncm91bmRcLXdpdGhcLWFcLWJhbmc7CivkloMgPiB0aGVcLXdhdGVyXC1pc1wtd2F2aW5nXC1pblwtdGhlXC1icmVlemU7CivklaQgPiBuYW1lXC1vZlwtYVwtY291bnR5XC1pblwtYW5jaWVudFwtdGltZXM7CivkkqcgPiBhXC12ZXNzZWxcLW9yXC11dGVuc2lsXC1tYWRlXC1vZlwtc3RyYXc7CivkjbIgPiBhXC1raW5kXC1vZlwtc2hlZXBcLXdpdGhcLWN1cmxlZFwtaGFpcnM7Civki7ggPiBiYWNrXC1jZW50ZXJcLXN1dHVyZVwtb2ZcLXRoZVwtY2xvdGhlczsKK+SLmyA+IHRoZVwtY2x1c3RlcmVkXC1lbWJyb2lkZXJ5XC1wYXR0ZXJuczsKK+SKliA+IHRvXC1lYXRcLXJpY2VcLWdydWVsXC1taXhlZFwtd2l0aFwtbWVhdDsKK+SGhSA+IHRvXC1hY2N1bXVsYXRlXC1vclwtdG9cLXN0b3JlXC11cFwtcmljZTsKK+SCpyA+IHJvY2tzXC1jbHVzdGVyZWRcLXBpbGVcLXVwXC10b2dldGhlcnM7CivkgL8gPiB0b1wtaGF2ZVwtYVwtY2FzdWFsXC1hbmRcLXNob3J0XC1nbGFuY2U7CivkgLggPiB0b1wtaGF2ZVwtYVwtY2FzdWFsXC1hbmRcLXNob3J0XC1nbGFuY2U7CivjuZcgPiBjYXR0bGVcLWFuZFwtc2hlZXBcLWhhdmVcLW5vXC1jaGlsZHJlbjsKK+O2siA+IG1lYXN1cmluZ1wtdW5pdFwtZm9yXC10aGVybW9keW5hbWljczsKK+O1uiA+IG5hbWVcLW9mXC1hXC1zdHJlYW1cLWluXC1hbmNpZW50XC10aW1lczsKK+O1kCA+IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLWh1YmVpXC1wcm92aW5jZTsKK+O1iyA+IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLWh1bmFuXC1wcm92aW5jZTsKK+OxkiA+IHRvXC1zY29sZFwtb3JcLWJsYW1lXC1pblwtYVwtbG91ZFwtdm9pY2U7Civjrr4gPiBhXC1wbGFjZVwtaW5cLXRvZGF5JydzXC1odW5hblwtcHJvdmluY2U7CivjrIggPiB0aGVcLXN1blwtd2FzXC1zaGluaW5nXC1hbmRcLWl0JydzXC13YXJtOwor46qKID4gaW5mZXN0ZWRcLXdpdGhcLWJhbmRpdHNcLWFuZFwtcm9iYmVyczsKK+OomCA+IHRvXC1ibG93XC10aGVcLW5vc2VcLXdpdGhcLXRoZVwtZmluZ2VyczsKK+OfviA+IG5hbWVcLW9mXC1hXC1tb3VudGFpblwtaW5cLWNvdW50eVwtamlhbjsKK+OfuCA+IG5hbWVcLW9mXC1wYXZpbGlvblwtaW5cLWFuY2llbnRcLWNoaW5hOwor45+JID4gbmFtZVwtb2ZcLXBhdmlsaW9uXC1pblwtYW5jaWVudFwtY2hpbmE7Civjn4IgPiBuYW1lXC1vZlwtY2FwZVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+OaqiA+IHRvXC1tYWtlXC1hXC1kZWNlcHRpdmVcLXNob3dcLW9mXC1wb3dlcjsKK+OSjSA+IHV0dGVybHlcLXdlYXJ5XC1pblwtYm9keVwtYW5kXC1zcGlyaXRzOwor45CMID4gYVwtdHJpYmVcLW9mXC1zYXZhZ2VzXC1pblwtc291dGhcLWNoaW5hOwor5o27ID4gdG9cLXR3aXN0XC1vclwtbmlwXC13aXRoXC10aGVcLWZpbmdlcnM7CivmiIwgPiBlbGV2ZW50aFwtb2ZcLXRlcnJlc3RyaWFsXC1icmFuY2hlczsKK+aQkyA+IHRvXC1ydWJcLW9yXC1yb2xsXC1iZXR3ZWVuXC10aGVcLWhhbmRzOwor5bCnID4gYVwtbGVnZW5kYXJ5XC1hbmNpZW50XC1lbXBlcm9yXC1zYWdlOwor5am2ID4gd2lmZVwtb2ZcLWZhdGhlcicnc1wteW91bmdlclwtYnJvdGhlcjsKK+aOrCA+IHRvXC1ncmFzcFwtb3JcLWhvbGRcLXdpdGhcLWJvdGhcLWhhbmRzOwor5bmbID4gc2Nyb2xsXC1vZlwtc2lsa1wtb3JcLWNsb3RoXC1wcmVzZW50ZTsKK+ajgiA+IGNhcnZlZFwtb3JcLXBhdHRlcm5lZFwtd2luZG93XC1zaWxsczsKK+awsiA+IGxpZmVcLWdpdmluZ1wtaW5mbHVlbmNlc1wtb2ZcLW5hdHVyZTsKK+ianSA+IGhhaXJ5XC1hbmRcLXBvaXNvbm91c1wtY2F0ZXJwaWxsYXJzOwor5r6nID4gcml2ZXJcLWluXC1ub3J0aGVyblwtaHVuYW5cLXByb3ZpbmNlOwor562uID4gZGl2aW5hdGlvblwtd2l0aFwtc3RhbGtzXC1vZlwtcGxhbnRzOwor56yqID4gYVwtY29hcnNlXC1tYXRcLW9mXC1ydXNoZXNcLW9yXC1iYW1ib287CivpppMgPiBmcmllZFwtcm91bmRcLWNha2VzXC1vZlwtd2hlYXRcLWZsb3VyOwor566QID4gdG9cLWRyYXdcLWFcLWJhbWJvb1wtYm93XC1vclwtY3Jvc3Nib3c7CivmiYMgPiBhXC1kb29yXC1iYXJcLXBsYWNlZFwtb3V0c2lkZVwtYVwtZG9vcjsKK+S7iSA+IHN1cm5hbWVcLW9mXC10aGVcLW1vdGhlclwtb2ZcLW1lbmNpdXM7Civpqr4gPiBhbnlcLW9iamVjdFwtdGhhdFwtc3RpY2tzXC1pblwtdGhyb2F0Owor6aWKID4gZnJpZWRcLXJvdW5kXC1jYWtlc1wtb2ZcLXdoZWF0XC1mbG91cjsKK+mGvCA+IG9mZmVyXC1mb29kXC1hbmRcLXdpbmVcLW9uZScnc1wtZ3Vlc3RzOwor6LynID4gY3VydGFpbmVkXC1jYXJyaWFnZVwtdXNlZFwtYnlcLXdvbWVuOwor6Lu/ID4gY3VydGFpbmVkXC1jYXJyaWFnZVwtdXNlZFwtYnlcLXdvbWVuOwor6LuZID4gYVwtY2hpbmVzZVwtZmFtaWx5XC1uYW1lXC10b1wtYXJyYW5nZTsKK+i0gSA+IHRvXC1kZWZlYXRcLXRvXC1zcG9pbFwtb3JcLWJlXC1zcG9pbGVkOwor6LOPID4gcGVhcmxzXC1vclwtc2hlbGxzXC1zdHJ1bmdcLXRvZ2V0aGVyOwor6KuKID4gdG9cLW1ha2VcLWFcLWp1ZGljaWFsXC1pbnZlc3RpZ2F0aW9uOwor6J6GID4gaGFpcnlcLWFuZFwtcG9pc29ub3VzXC1jYXRlcnBpbGxhcnM7CivnupkgPiBzdHJpbmdcLW9uXC13aGljaFwtY29pbnNcLWFyZVwtc3RydW5nOwor57OkID4gZnJpZWRcLXJvdW5kXC1jYWtlc1wtb2ZcLXdoZWF0XC1mbG91cjsKK+ettCA+IHR5cGVcLW9mXC1ncmFzc1wtdXNlZFwtaW5cLWRpdmluYXRpb247CivnkIcgPiBjb2Fyc2VcLXZhcmlldHlcLW9mXC1qYXNwZXJcLW9yXC1qYWRlOwor5rCzID4gbGlmZVwtZ2l2aW5nXC1pbmZsdWVuY2VzXC1vZlwtbmF0dXJlOwor5qu6ID4gY2FydmVkXC1vclwtcGF0dGVybmVkXC13aW5kb3dcLXNpbGxzOwor5qOrID4gdGhvcm55XC1zaHJ1Ylwtd2l0aFwteWVsbG93XC1mbG93ZXJzOwor5peTID4gc2VycmF0ZWRcLWVkZ2VzXC1vblwtYVwtY2hpbmVzZVwtZmxhZzsKK+W2siA+IGFcLW5hbWVcLW9mXC1hblwtb2xkXC10b3duXC1pblwtc2ljaHVhbjsKK+WwrSA+IGFcLWxlZ2VuZGFyeVwtYW5jaWVudFwtZW1wZXJvclwtc2FnZTsKK+WsuCA+IHdpZmVcLW9mXC1mYXRoZXInJ3NcLXlvdW5nZXJcLWJyb3RoZXI7CivlobEgPiBwbGFjZVwtbmFtZVwtaW5cLWd1YW5nZG9uZ1wtcHJvdmluY2U7CivloK8gPiBhXC1sZWdlbmRhcnlcLWFuY2llbnRcLWVtcGVyb3JcLXNhZ2U7CivliaggPiBzb3VuZFwtb2ZcLXNvbWV0aGluZ1wtYmVpbmdcLXNtYXNoZWQ7CivktawgPiBibGFja1wtc291bmRcLW9mXC10aGVcLWZsb3dpbmdcLXdhdGVyOwor5LSNID4gYVwta2luZFwtb2ZcLXN0cmFuZ2VcLWFuZFwtd2VpcmRcLWJpcmQ7CivktIkgPiBnZW5lcmFsXC10ZXJtXC1mb3JcLWFcLWdyb3VwXC1vZlwtYmlyZDsKK+SzsCA+IGFcLWJpcmRcLXJlc2VtYmxpbmdcLXRoZVwtd2lsZFwtZ29vc2U7Civks4ggPiBhXC1iaXJkXC1yZXNlbWJsaW5nXC10aGVcLXdpbGRcLWdvb3NlOwor5LGZID4gYVwtc21hbGxcLWtpbmRcLW9mXC10dW5hXC1vclwtc3R1cmdlb247CivksJQgPiBkcmVzc2VkXC1oYWlyXC1pblwtYVwtaG9yaXpvbnRhbFwtd2F5Owor5LCJID4gZHJlc3NlZFwtaGFpclwtaW5cLWFcLWhvcml6b250YWxcLXdheTsKK+SqrCA+IHNvdW5kXC1vZlwtcHJlc3NpbmdcLXNvbWV0aGluZ1wtZG93bjsKK+SprCA+IGFuXC1vcm5hbWVudGFsXC1pdGVtXC1vblwtYVwtc2NhYmJhcmQ7Civkp7UgPiBhXC1iaXJkXC1saWtlXC10aGVcLXNlY3JldGFyeVwtZmFsY29uOwor5KaOID4gYVwtbWVjaGFuaWNhbFwtZGV2aWNlXC1mb3JcLWxlYWRcLW9yZTsKK+SlviA+IHRvXC1tZWx0XC1vclwtY2FzdFwtYnlcLXVzaW5nXC1hXC1tb3VsZDsKK+SlsSA+IHRvXC1tZWx0XC1vclwtY2FzdFwtYnlcLXVzaW5nXC1hXC1tb3VsZDsKK+SlmSA+IGFcLXNwZWN1bHVtXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivkpLcgPiBhXC1sYW5jZVwtd2l0aFwtdGhyZWVcLW9yXC10d29cLXBvaW50czsKK+SjoiA+IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLWFuY2llbnRcLXRpbWVzOwor5KObID4gbmFtZVwtb2ZcLWFcLXBsYWNlXC1pblwtYW5jaWVudFwtdGltZXM7CivknYEgPiBhXC1raW5kXC1vZlwtd2lsZFwtbGVndW1pbm91c1wtcGxhbnRzOwor5Ju2ID4gd3JpdGluZ3NcLWV1bG9naXppbmdcLWFkZWFkXC1wZXJzb247Civkl6QgPiBhXC1raW5kXC1vZlwtd29ybVwtcHJvZHVjZWRcLWluXC13YXRlcjsKK+SNsCA+IGFcLXBsYWd1ZVwtb3JcLWFcLXBlc3RpbGVuY2VcLW9mXC1nb2F0Owor5IqKID4gd2VsbFwtYm9pbGVkXC1jb25nZWVcLW9yXC1yaWNlXC1ncnVlbDsKK+SJiCA+IGFcLWtpbmRcLW9mXC1iYW1ib29cLXdpdGhcLWFcLXJlZFwtc2tpbjsKK+SIkyA+IGFcLWtpbmRcLW9mXC1iYW1ib29cLXdpdGhcLWFcLXJlZFwtc2tpbjsKK+SHiCA+IHRvXC1wdXRcLWludG9cLWFcLWN1cGJvYXJkXC1vclwtY2xvc2V0Owor5IeAID4gb3JuYW1lbnRzXC1vZlwtZmluZVwtZmVhdGhlclwtb3JcLWZ1cjsKK+SFuSA+IGFcLWtpbmRcLW9mXC1kcmlsbFwtZm9yXC1zb3dpbmdcLWdyYWluOwor5IWpID4gY3Jvb2tlZFwtYW5kXC13aW5kaW5nXC1vZlwtdGhlXC1ncmFzczsKK+SEvCA+IG5hbWVcLW9mXC1hXC1wbGFjZVwtaW5cLWFuY2llbnRcLXRpbWVzOwor5IS3ID4gYVwtbWVhc3VyZW1lbnRcLWVxdWFsXC10b1wtMTIwXC1jYXR0eTsKK+SDqiA+IGFcLXBsYXRmb3JtXC1mb3JcLXNhY3JpZmljaWFsXC1yaXRlczsKK+SCniA+IGFcLXRob3JueVwtdHJlZVwtYWJvdXRcLTE1XC1mZWV0XC1oaWdoOwor47qcID4gZmllcmNlXC1kb2dcLXdpdGhcLWxvbmdcLXNoYWdneVwtaGFpcjsKK+O6iSA+IGFcLWZpZXJjZVwtYW5pbWFsXC1vZlwtdGhlXC1kb2dcLXRyaWJlOwor47mhID4gYVwtcnVzaFwtYW5kXC1pbXBhdGllbnRcLWRpc3Bvc2l0aW9uOwor47ihID4gYm9hcmRcLXRvXC1ibG9ja1wtdGhlXC13YXRlclwtY3VycmVudDsKK+O4miA+IHNjYXR0ZXJlZFwtb3JcLWRpc3BlcnNlZFwtYW5kXC1jbGVhcjsKK+O0rSA+IGltbWVhc3VyYWJsZVwtZGVwdGhcLW9yXC1wcm9mdW5kaXR5Owor47OGID4gbmFtZVwtb2ZcLWFcLXBsYWNlXC1pblwtYW5jaWVudFwtdGltZXM7CivjsaggPiB0b1wtcHJlcGFyZVwtYVwtYm9keVwtZm9yXC10aGVcLWNvZmZpbjsKK+OshyA+IG5hbWVcLW9mXC1hXC1zdGF0ZVwtaW5cLWFuY2llbnRcLWNoaW5hOwor46m9ID4gYnJhbmNoZXNcLXRvXC1iZVwtYVwtcGFyYXNpdGVcLWFcLXRyZWU7CivjqJIgPiB0b1wtY3V0XC1vcGVuXC1hbmRcLWNsZWFuXC1cLVwtXC1hc1wtZmlzaDsKK+OisiA+IHRoZVwtNXRoXC1vZlwtdGhlXC1laWdodFwtZGlhZ3JhbXNcLeWFq+WNpjsKK+OfqCA+IGFcLWZvdW50YWluXC1pblwtdGhlXC1zaWRlXC1vZlwtYVwtaGlsbDsKK+ObjSA+IHRvXC1oYXZlXC1vbmUnJ3NcLWFtYml0aW9uXC1mdWxmaWxsZWQ7CivjmqEgPiBzdGFuZGluZ1wtd2l0aG91dFwtYVwtc3RyYWlnaHRcLWJhY2s7CivjmokgPiB0b1wtbWFrZVwtYVwtcHJvZml0XC1vblwtc2VsbFwtYW5kXC1idXk7CivjmbAgPiBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC1hbmNpZW50XC10aW1lczsKK+OVoyA+IGFcLW1hcnNoXC1hdFwtdGhlXC1mb290XC1vZlwtdGhlXC1oaWxsczsKK+S7rCA+IGFkanVuY3RcLXByb25vdW5cLWluZGljYXRlXC1wbHVyYWw7CivlkaIgPiBpbnRlcnJvZ2F0aXZlXC1vclwtZW1waGF0aWNcLWZpbmFsOwor5qW8ID4gYnVpbGRpbmdcLW9mXC10d29cLW9yXC1tb3JlXC1zdG9yaWVzOwor6I2vID4gbGVhZlwtb2ZcLWRhaHVyaWFuXC1hbmdlbGljYVwtcGxhbnQ7CivpvY4gPiB0YWtlXC1pblwtYm90aFwtaGFuZHNcLWFuZFwtb2ZmZXJcLXRvOwor5LiIID4gdW5pdFwtb2ZcLWxlbmd0aFwtZXF1YWxcLTNcLjNcLW1ldGVyczsKK+aMkSA+IGFcLWxvYWRcLWNhcnJpZWRcLW9uXC10aGVcLXNob3VsZGVyczsKK+aokyA+IGJ1aWxkaW5nXC1vZlwtdHdvXC1vclwtbW9yZVwtc3RvcmllczsKK+elnSA+IHByYXlcLWZvclwtaGFwcGluZXNzXC1vclwtYmxlc3NpbmdzOwor5p2JID4gdmFyaW91c1wtc3BlY2llc1wtb2ZcLXBpbmVcLWFuZFwtZmlyOwor5pynID4gY29uZGl0aW9uXC1vclwtYXBwZWFyYW5jZVwtb2ZcLW1vb247CivmnKYgPiBjb25kaXRpb25cLW9yXC1hcHBlYXJhbmNlXC1vZlwtbW9vbjsKK+mcuCA+IHJ1bGVcLWJ5XC1taWdodFwtcmF0aGVyXC10aGFuXC1yaWdodDsKK+euqiA+IHNtYWxsXC1iYW1ib29cLWJhc2tldFwtZm9yXC1ob2xkaW5nOwor6YakID4gYW55XC1qYW1cLWxpa2VcLW9yXC1wYXN0ZVwtbGlrZVwtZm9vZDsKK+mFsSA+IGFueVwtamFtXC1saWtlXC1vclwtcGFzdGVcLWxpa2VcLWZvb2Q7Civog6cgPiBjb25kaXRpb25cLW9yXC1hcHBlYXJhbmNlXC1vZlwtbW9vbjsKK+eClSA+IHRoZVwtYnJpY2tcLWJlZFwtaW5cLW5vcnRoZXJuXC1jaGluYTsKK+S6pSA+IGxhc3RcLW9mXC10d2VsdmVcLWVhcnRobHlcLWJyYW5jaGVzOwor57KkID4gZ3Vhbmdkb25nXC1hbmRcLWd1YW5neGlcLXByb3ZpbmNlczsKK+eyvSA+IGR1bXBsaW5nXC1tYWRlXC1vZlwtZ2x1dGlub3VzXC1yaWNlOwor6ZmHID4gbW91bnRhaW5cLWxvY2F0ZWRcLWJldHdlZW5cLXNoYW54aTsKK+mXviA+IHZpbGxhZ2VcLW9mXC10d2VudHlcLWZpdmVcLWZhbWlsaWVzOwor6YOmID4gcGxhY2VcLWluXC10b2RheScnc1wtaGVuYW5cLXByb3ZpbmNlOwor6Z6FID4gbGVhdGhlclwtc3RyYXBcLW92ZXJcLWhvcnNlJydzXC1uZWNrOwor6YK6ID4gcGxhY2VcLWluXC10b2RheScnc1wtaGVuYW5cLXByb3ZpbmNlOwor6ZOhID4gc2lja2xlXC1mb3JcLWN1dHRpbmdcLWdyYXNzXC1vclwtaGF5Owor6aqnID4gZ2FsbG9wXC1hYm91dFwtd2l0aFwtaGVhZFwtdXBsaWZ0ZWQ7CivpqqIgPiBob3JzZVwtd2l0aFwtYVwtYmx1aXNoXC13aGl0ZVwtY29sb3I7Civom7MgPiBraW5kXC1vZlwtc25haWxcLXdpdGhcLXNwaXJhbFwtc2hlbGw7CivpgrMgPiBhXC1kZXBhcnRtZW50XC1pblwtdGhlXC1zdGF0ZVwtb2ZcLWx1Owor6YOiID4gc3RhdGVcLWluXC10b2RheScnc1wtaHViZWlcLXByb3ZpbmNlOwor6aqWID4gdHdvXC1vdXRzaWRlXC1vbmVzXC1pblwtdGhyZWVcLWhvcnNlOwor6L24ID4gY3Jvc3NcLWJvYXJkXC1hdFwtcmVhclwtb2ZcLWNhcnJpYWdlOwor566cID4gYW5jaWVudFwtc3RyaW5nXC1tdXNpY1wtaW5zdHJ1bWVudDsKK+mDkCA+IHN0YXRlXC1pblwtdG9kYXknJ3NcLWhlbmFuXC1wcm92aW5jZTsKK+i9uSA+IHJ1blwtb3Zlclwtc29tZXRoaW5nXC13aXRoXC12ZWhpY2xlOwor5qCdID4gYVwtYnVpbGRlcicnc1wtZnJhbWVcLWZvclwtbWVhc3VyaW5nOwor542NID4gYW5cLWFuaW1hbFwtd2hpY2hcLWVhdHNcLWl0c1wtbW90aGVyOwor6byXID4gc21hbGxcLXJldm9sdmluZ1wtZHJ1bVwtd2l0aFwta25vYnM7CivpvJIgPiBsYXJnZVwtdHJpcG9kXC1jYWxkcm9uXC13aXRoXC1zbWFsbDsKK+m2liA+IGxhcmdlXC13YXRlcmZvd2xcLXdpdGhcLW5ha2VkXC1oZWFkOwor6amkID4gZ2FsbG9wXC1hYm91dFwtd2l0aFwtaGVhZFwtdXBsaWZ0ZWQ7CivpqYQgPiBob3JzZVwtd2l0aFwtYVwtYmx1aXNoXC13aGl0ZVwtY29sb3I7CivpqYIgPiB0d29cLW91dHNpZGVcLW9uZXNcLWluXC10aHJlZVwtaG9yc2U7CivpqIQgPiBuYW1lXC1vZlwtYVwtbGVnZW5kYXJ5XC1zd2lmdFwtaG9yc2U7Civpp6wgPiBuYW1lXC1vZlwtYVwtbGVnZW5kYXJ5XC1zd2lmdFwtaG9yc2U7CivppJYgPiBmb29kXC1pdGVtXC1zZXRcLW91dFwtZm9yXC1zaG93XC1vbmx5Owor6aCjID4gdG9cLXZpZXdcLW90aGVyc1wtd2l0aFwtcmFpc2VkXC1leWVzOwor6Zq0ID4gbW91bnRhaW5cLWxvY2F0ZWRcLWJldHdlZW5cLXNoYW54aTsKK+mWrSA+IHZpbGxhZ2VcLW9mXC10d2VudHlcLWZpdmVcLWZhbWlsaWVzOwor6Y2YID4gc2lja2xlXC1mb3JcLWN1dHRpbmdcLWdyYXNzXC1vclwtaGF5Owor6YuQID4gc3RhdGVcLWluXC10b2RheScnc1wtaHViZWlcLXByb3ZpbmNlOwor6YasID4gYW55XC1qYW1cLWxpa2VcLW9yXC1wYXN0ZVwtbGlrZVwtZm9vZDsKK+mFiCA+IHBsYWNlXC1pblwtdG9kYXknJ3NcLWhlbmFuXC1wcm92aW5jZTsKK+mEtiA+IHN0YXRlXC1pblwtdG9kYXknJ3NcLWhlbmFuXC1wcm92aW5jZTsKK+mEtCA+IHBsYWNlXC1pblwtdG9kYXknJ3NcLWhvbmFuXC1wcm92aW5jZTsKK+mEmiA+IHBsYWNlXC1pblwtdG9kYXknJ3NcLWhlYmVpXC1wcm92aW5jZTsKK+mDlCA+IHBsYWNlXC1uYW1lXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor6YK9ID4gbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLWhhblwtZHluYXN0eTsKK+mCtiA+IHBsYWNlXC1pblwtdG9kYXknJ3NcLWhlbmFuXC1wcm92aW5jZTsKK+i9oiA+IHJ1blwtb3Zlclwtc29tZXRoaW5nXC13aXRoXC12ZWhpY2xlOwor6LurID4gY3Jvc3NcLWJvYXJkXC1hdFwtcmVhclwtb2ZcLWNhcnJpYWdlOwor6LuoID4gbGF0dGljZVwtd29ya1wtb25cLWZyb250XC1hbmRcLXNpZGVzOwor6LiLID4gdGhlXC1mb290XC1vclwtZmVldFwtY2FzdFwtb2ZcLWFcLXBsYXk7CivopocgPiBydWxlXC1ieVwtbWlnaHRcLXJhdGhlclwtdGhhblwtcmlnaHQ7Civopa0gPiB0dWNrXC11cFwtaGVtXC1vZlwtZ2FybWVudFwtYW5kXC13cmFwOwor6KOLID4gY290dG9uXC1jbG90aGVzXC1vZlwtYVwtYm95XC1zZXJ2YW50Owor6KG6ID4gc2xpdFwtaW5cLWdhcm1lbnRcLXRvXC1haWRcLW1vdmVtZW50Owor6KCoID4gYVwta2luZFwtb2ZcLXNwaWRlclwtd2l0aFwtbG9uZ1wtbGVnczsKK+ieoyA+IG15dGhvbG9naWNhbFwtd2luZ2xlc3NcLWRyYWdvblwtb2Y7CivonoQgPiBraW5kXC1vZlwtc25haWxcLXdpdGhcLXNwaXJhbFwtc2hlbGw7Civoi6QgPiBicmFzc2ljYVwtY2FtcGVzdHJpc1wtc3Vic3BcLlwtcmFwYTsKK+iJlSA+IHR3b1wtYm9hdHNcLWZhc3RlbmVkXC1zaWRlXC1ieVwtc2lkZTsKK+iGqyA+IHRoZVwtZmF0XC1jb3ZlcmluZ1wtdGhlXC1pbnRlc3RpbmVzOwor57iXID4gc2Fja2Nsb3RoXC13b3JuXC1vblwtYnJlYXN0XC1kdXJpbmc7Civns4kgPiBkdW1wbGluZ1wtbWFkZVwtb2ZcLWdsdXRpbm91c1wtcmljZTsKK+eytSA+IGd1YW5nZG9uZ1wtYW5kXC1ndWFuZ3hpXC1wcm92aW5jZXM7CivnsJ4gPiBzbWFsbFwtYmFtYm9vXC1iYXNrZXRcLWZvclwtaG9sZGluZzsKK+evqiA+IGFcLWJhbWJvb1wtZmx1dGVcLXdpdGhcLXNldmVuXC1ob2xlczsKK+eeliA+IGFcLWNhdGFyYWN0XC1vclwtZmlsbVwtb3ZlclwtdGhlXC1leWU7CivnlaQgPiBwbGFjZVwtZm9yXC13b3JzaGlwcGluZ1wtdGhlXC1oYXZlbjsKK+eUlyA+IGVhcnRoZW53YXJlXC12ZXNzZWxcLWluXC10d29cLXBhcnRzOwor54OzID4gdG9cLXRyYXZlbFwtYnlcLXRoZVwtbGlnaHRcLW9mXC10b3JjaDsKK+eBlSA+IHNob3J0XC1uYW1lXC1mb3JcLWd1YW5neGlcLXByb3ZpbmNlOwor5rK0ID4gZm91bFwtYW5kXC1wb2lzb25vdXNcLWluXC1jb25mdXNpb247CivmqJAgPiBhXC1sb29rb3V0XC10dXJyZXRcLW9uXC1hXC1jaXR5XC13YWxsOwor5qO7ID4ga2luZFwtb2ZcLXdvb2RcLWZyb21cLXdoaWNoXC1wZXJmdW1lOwor5p6MID4gdmFyaWV0eVwtb2ZcLWVsbVwtd2l0aFwtc21hbGxcLXNlZWRzOwor5Z6fID4gY2xheVwtc2hlZXBcLWJ1cmllZFwtd2l0aFwtdGhlXC1kZWFkOwor5ZKgID4gdG9cLXdoaXNwZXJcLlwtdG9cLWJsYW1lXC10b1wtc2xhbmRlcjsKK+WPpyA+IHRvXC1jdXRcLW1lYXRcLW9mZlwtYXdheVwtZnJvbVwtYm9uZXM7CivlhpQgPiBjYXBcLXdvcm5cLWR1cmluZ1wtdGhlXC15aW5cLWR5bmFzdHk7CivlgJEgPiBhZGp1bmN0XC1wcm9ub3VuXC1pbmRpY2F0ZVwtcGx1cmFsOwor5Lq8ID4gdG9cLWFzc2VtYmxlXC5cLXRvXC1nYXRoZXJcLXRvZ2V0aGVyOwor5LmEID4gc2hpbWVcOlwtdG9cLWZpbmRcLWFcLXBsYWNlXC10b1wtZHdlbGw7CivktrUgPiBhXC1iYW1ib29cLWZsdXRlXC13aXRoXC1zZXZlblwtaG9sZXM7CivktbggPiB0aGVcLXRvYWRcLXRoYXRcLWxpdmVzXC1pblwtdGhlXC1tb29uOwor5LOhID4gYVwta2luZFwtb2ZcLWJpcmRcLWluXC1hbmNpZW50XC1ib29rczsKK+SyniA+IGFcLXNlY29uZFwtZ2VuZXJhbFwtbmFtZVwtZm9yXC1wZXJjaDsKK+SxjCA+IGFcLXNlY29uZFwtbmFtZVwtZm9yXC10aGVcLWdsb2JlZmlzaDsKK+SwnSA+IGFcLWxhcmdlXC1lYXJ0aGVuXC1wb3RcLWZvclwtY29va2luZzsKK+SwgCA+IGRyZXNzZWRcLWhhaXJcLW9mXC1hXC1jaGluZXNlXC13b21hbjsKK+SuuCA+IHRvXC1tb3ZlXC1zbG93bHlcLWFuZFwtdGhlblwtc3dpZnRseTsKK+SsuyA+IHRvXC1lbnRlcnRhaW5cLWFcLWRlcGFydGluZ1wtZnJpZW5kOwor5Kq+ID4gdG9cLWRlYWxcLXdpdGhcLWFmZmFpcnNcLWNhdXRpb3VzbHk7Civkqo0gPiBhXC1jb250YWluZXJcLWZvclwtYm93c1wtYW5kXC1hcnJvd3M7CivkqKMgPiBsZWF0aGVyXC10b1wtYmVcLW1vaXN0ZW5lZFwtYnlcLXJhaW47CivkpocgPiBkcmVzc2VkXC1oYWlyXC1vZlwtYVwtY2hpbmVzZVwtd29tYW47Civko6MgPiBuYW1lXC1vZlwtYVwtcGxhY2VcLW5hbWVcLW9mXC1hXC1wbGFjZTsKK+SfmiA+IHRvXC1zaXRcLXdpdGhcLXRoZVwtbGVnc1wtc3ByZWFkXC1vdXQ7CivknLcgPiBmZXJtZW50ZWRcLWFuZFwtc2Vhc29uZWRcLXNveWJlYW5zOwor5JyqID4gbmFtZVwtb2ZcLWFcLXBhdmlsaW9uXC1pblwtb2xkXC10aW1lczsKK+SbgCA+IHJlYXNvbmFibGVcLWF1dGhvcml0eVwtc3RhdGVtZW50czsKK+SYhSA+IGFcLXNtYWxsXC1nYWRmbGllc1wtYW5kXC1tb3NxdWl0b2VzOwor5JCDID4gZmF0XC1pblwtdGhlXC1hYmRvbWVuXC1vclwtaW50ZXN0aW5lOwor5I2bID4gYVwta2luZFwtb2ZcLXRvb2xcLXVzZWRcLXRvXC1nZXRcLWZpc2g7CivkiqQgPiB2ZWdldGFibGVcLW1peGVkXC13aXRoXC10aGlja1wtc291cDsKK+SCsiA+IHN0YW5kYXJkXC13ZWlnaHRzXC11c2VkXC1pblwtc2NhbGVzOwor5IGwID4gdG9cLWxvb2tcLWluXC1hXC1ldmlsXC1vclwtd2lja2VkXC13YXk7CivjvJYgPiBnb3VyZFwtdXNlZFwtYXNcLWFcLWxhZGxlXC1vclwtZGlwcGVyOwor47urID4gYVwtZ2VtXC1vclwtb3JuYW1lbnRcLW9uXC1hXC1zY2FiYmFyZDsKK+OvrSA+IGFcLWxvb2tvdXRcLXR1cnJldFwtb25cLWFcLWNpdHlcLXdhbGw7CivjrocgPiBhXC1idWlsZGVyJydzXC1mcmFtZVwtZm9yXC1tZWFzdXJpbmc7CivjrLkgPiB0ZW5kb25zXC1vZlwtdGhlXC1oZWVsXC1vZlwtdGhlXC1mb290Owor46yBID4gdGhlXC1zdW5cLWlzXC1zaGluaW5nXC1vblwtdGhlXC13YXRlcjsKK+OnvSA+IG5hbWVcLW9mXC1hXC1jb3VudHlcLWluXC1oYW5cLWR5bmFzdHk7Civvpo0gPiBydW5cLW92ZXJcLXNvbWV0aGluZ1wtd2l0aFwtdmVoaWNsZTsKK++mhiA+IHZpbGxhZ2VcLW9mXC10d2VudHlcLWZpdmVcLWZhbWlsaWVzOwor76WMID4gYnVpbGRpbmdcLW9mXC10d29cLW9yXC1tb3JlXC1zdG9yaWVzOwor46WGID4gaW5kdWxnZW50XC1hbmRcLXdpdGhvdXRcLXJlc3RyYWludDsKK+OXmCA+IHRvXC1iaXRlXC10aGVcLWhhcmRcLWFuZFwtc29saWRcLWZvb2Q7Civjk6IgPiB0b1wtY3V0XC10aGVcLWZsZXNoXC1mcm9tXC10aGVcLWJvbmVzOwor45OUID4gZmFkZWRcLWFuZFwtZmFsbGVuXC1cLVwtXC1hc1wtYmxvc3NvbXM7CivjkrsgPiB0b1wtZ29cLWZvcndhcmRcLXdpdGhcLWV5ZXNcLWNvdmVyZWQ7CivlubkgPiB0cnVua1wtb2ZcLXRyZWVcLW9yXC1vZlwtaHVtYW5cLWJvZHk7CivlsLogPiBjaGluZXNlXC1tZWFzdXJlXC1hcHByb3hcLlwtJydmb290Jyc7CivnsbMgPiBodWxsZWRcLW9yXC1odXNrZWRcLXVuY29va2VkXC1yaWNlOwor6bmPID4gZmFidWxvdXNcLWJpcmRcLW9mXC1lbm9ybW91c1wtc2l6ZTsKK+WWgiA+IGludGVyamVjdGlvblwtdG9cLWNhbGxcLWF0dGVudGlvbjsKK+a9hyA+IHNvdW5kXC1vZlwtYmVhdGluZ1wtd2luZFwtYW5kXC1yYWluOwor56a5ID4gbGVnZW5kYXJ5XC1oc2lhXC1keW5hc3R5XC1mb3VuZGVyOwor5pafID4gdG9cLXBvdXJcLXdpbmVcLW9yXC10ZWFcLWludG9cLWFcLWN1cDsKK+iQvCA+IHRoZVwtc3RlbVwtYW5kXC1jYWx5eFwtb2ZcLWFcLWZsb3dlcjsKK+mYgCA+IHBvd2VyZnVsXC1hbmRcLWluZmx1ZW50aWFsXC1ncm91cDsKK+altyA+IG1vZGVsXC1zdHlsZVwtb2ZcLWNoaW5lc2VcLXdyaXRpbmc7CivovoQgPiBzaWRlc1wtb2ZcLWNoYXJpb3RcLXdoZXJlXC13ZWFwb25zOwor5L+RID4gd29vZGVuXC1maWd1cmVcLWJ1cmllZFwtd2l0aFwtZGVhZDsKK+WYuSA+IHVzZWRcLWRlc2NyaWJlXC1jbGFyaXR5XC1vZlwtdm9pY2U7CivovbwgPiBob3Jpem9udGFsXC13b29kZW5cLWJhclwtaW5cLWZyb250Owor6aaRID4gdGltZVwtb2ZcLWZhbWluZVwtb3JcLWNyb3BcLWZhaWx1cmU7CivkvKUgPiBnaG9zdFwtb2ZcLW9uZVwtZGV2b3VyZWRcLWJ5XC10aWdlcjsKK+e7tiA+IHNpbGtcLXJpYmJvblwtYXR0YWNoZWRcLWFzXC1hXC1zZWFsOwor6ayIID4gZmluZVwtZ3Jvd3RoXC1vZlwtaGFpclwtY3VybHlcLWhhaXI7Civno5QgPiBkb3dud2FyZFwtc3Ryb2tlXC1zbGFudGluZ1wtcmlnaHQ7Civoo6IgPiBmb2xkaW5nXC1wdXJzZVwtaW5zZXJ0ZWRcLWluXC1iZWx0Owor5p64ID4ga2luZFwtb2ZcLWFzcGVuXC1mb3VuZFwtaW5cLXNpY2h1YW47CivoioogPiBleHViZXJhbnRcLWFuZFwtdmlnb3JvdXNcLWZvbGlhZ2U7CivphIQgPiBuYW1lXC1vZlwtYVwtZGlzdHJpY3RcLWluXC1zaGFuZG9uZzsKK+m8uSA+IGFcLWtpbmRcLW9mXC1pbnNlY3Rpdm9yb3VzXC1yb2RlbnQ7CivojrwgPiBhblwtZWRpYmxlXC13YXRlclwtcGxhbnRcLWJyYXNlbmlhOwor5ZysID4gcGxhc3Rlclwtb3Zlclwtd2l0aFwtbGF5ZXJcLW9mXC1tdWQ7CivojqkgPiBtZW1icmFuZVwtbGluaW5nXC1pbnNpZGVcLW9mXC1yZWVkOwor6K+2ID4gYW5cLWV4Y2xhbWF0aW9uXC1vZlwtY29uZmlybWF0aW9uOwor6KSZID4gcGFwZXJcLW9yXC1jbG90aFwtcGFzdGVkXC10b2dldGhlcjsKK+iMjCA+IG5hbWVcLW9mXC1hXC1kaXN0cmljdFwtaW5cLXNoYW5kb25nOwor6by0ID4gYVwta2luZFwtb2ZcLWluc2VjdGl2b3JvdXNcLXJvZGVudDsKK+m2iyA+IGFcLXNlYVwtYmlyZFwtd2l0aFwtYVwtd2hpdGVcLWJyZWFzdDsKK+m1rCA+IGZhYnVsb3VzXC1iaXJkXC1vZlwtZW5vcm1vdXNcLXNpemU7Civpr48gPiBhXC1kaWFsZWN0XC5cLlwuXC5cLlwuXC5cLlwtbmFtZVwtb2ZcLWZpc2g7CivppYkgPiB0aW1lXC1vZlwtZmFtaW5lXC1vclwtY3JvcFwtZmFpbHVyZTsKK+mlgSA+IGNhcnJ5XC1tZWFsXC10b1wtd29ya2Vyc1wtaW5cLWZpZWxkOwor6ZalID4gcG93ZXJmdWxcLWFuZFwtaW5mbHVlbnRpYWxcLWdyb3VwOwor6Y6rID4gb3JuYW1lbnRcLW92ZXJcLXRoZVwtaG9yc2UnJ3NcLWhlYWQ7CivovJIgPiBzaWRlc1wtb2ZcLWNoYXJpb3RcLXdoZXJlXC13ZWFwb25zOwor6LWZID4gZ2lmdFwtb2ZcLW1vbmV5XC1oZWxwXC1wYXlcLWZ1bmVyYWw7Civos7sgPiBnaWZ0XC1vZlwtbW9uZXlcLWhlbHBcLXBheVwtZnVuZXJhbDsKK+iqkiA+IGFuXC1leGNsYW1hdGlvblwtb2ZcLWNvbmZpcm1hdGlvbjsKK+ippCA+IHRvXC1tYWtlXC13aWxkXC1zdGF0ZW1lbnRzXC10b1wtbGllOwor6KSzID4gZm9sZGluZ1wtcHVyc2VcLWluc2VydGVkXC1pblwtYmVsdDsKK+iYtCA+IHlvdW5nXC1zaG9vdHNcLW9mXC10aGVcLXJhcGV0dXJuaXA7Civojp0gPiB0b1wtY2hvcFwtc3RyYXdcLWZpbmVcLWZvclwtYW5pbWFsczsKK+iFoCA+IGJldHdlZW5cLXRoZVwtc2tpblwtYW5kXC10aGVcLWZsZXNoOwor57+/ID4gc3RyZWFtZXJcLWFkb3JuZWRcLXdpdGhcLWZlYXRoZXJzOwor57asID4gc2lsa1wtcmliYm9uXC1hdHRhY2hlZFwtYXNcLWFcLXNlYWw7CivnraUgPiByb3VuZFwtc2hhcGVkXC1iYW1ib29cLWJhc2tldFwtZm9yOwor55eEID4gc2Nyb2Z1bG91c1wtc3dlbGxpbmdzXC1hbmRcLXNvcmVzOwor546kID4gYVwta2luZFwtb2ZcLWdlbVwtaW5mZXJpb3JcLXRvXC1qYWRlOwor54WgID4gdG9cLWZyeVwtaW5cLWZhdFwtb3JcLW9pbFwuXC10b1wtc2NhbGQ7CivngJ8gPiBzb3VuZFwtb2ZcLWJlYXRpbmdcLXdpbmRcLWFuZFwtcmFpbjsKK+a9jyA+IGZhcmVzaGFyZVwtcmVjbGFpbWVkXC1mcm9tXC1yaXZlcjsKK+a8vCA+IGhhdmluZ1wtdGhlXC1hcHBlYXJhbmNlXC1vZlwtZGVwdGg7CivmrJ4gPiB0aGVcLWxhdHRpY2VcLW9mXC1hXC13aW5kb3dcLWFcLXNpbGw7Civmm5ogPiB0d2lsaWdodFwtanVzdFwtYmVmb3JlXC1zdW5cLXJpc2VzOwor5paaID4gYVwtc21hbGxcLWN1cFwtb2ZcLXN0b25lXC13aXRoXC1lYXJzOwor5omKID4gdXByaWdodFwtYmFyXC1mb3JcLWZhc3RlbmluZ1wtZG9vcjsKK+aFnCA+IG5hbWVcLW9mXC1hXC1tb25rXC1pblwtdGFuZ1wtZHluYXN0eTsKK+W0oCA+IHBsYWNlXC1uYW1lXC1pblwtZ3Vhbmd4aVwtcHJvdmluY2U7Civlsr0gPiBwbGFjZVwtbmFtZVwtaW5cLWd1YW5neGlcLXByb3ZpbmNlOwor5bKdID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluXC1pblwtc2hhbmRvbmc7CivloK0gPiBhXC1kcnlcLW1vYXRcLW91dHNpZGVcLWFcLWNpdHlcLXdhbGw7CivloI4gPiBjaGFyYWN0ZXJcLXVzZWRcLWZvclwtcGxhY2VcLW5hbWVzOwor5Zq5ID4gYVwtcGFydGljbGVcLWltcGx5aW5nXC1jb21wbGV0aW9uOwor5YyzID4gbGFkaWVzXC10b2lsZXRcLWNhc2VcLXdpdGhcLW1pcnJvcjsKK+WItSA+IHB1bmlzaG1lbnRcLWJ5XC1jdXR0aW5nXC1vZmZcLWVhcnM7CivksoEgPiBnZW5lcmFsXC10ZXJtXC1vZlwtYVwta2luZFwtb2ZcLWZpc2g7CivksJogPiB0aGVcLXRvcFwtcGFydFwtb2ZcLXRoZVwtcmljZVwtZ3J1ZWw7Civkr7UgPiBoYWlyXC1zdHlsZVwtZm9yXC1saXR0bGVcLWNoaWxkcmVuOwor5K+kID4gYm9uZXdhcmVcLXVzZWRcLXRvXC1jb21iXC10aGVcLWhhaXI7Civkr5IgPiB0aGVcLXVwcGVyXC1wYXJ0XC1vZlwtdGhlXC1zaGluYm9uZTsKK+SulCA+IGFcLXlvdW5nXC1hbmRcLWZsZWV0XC1mb290ZWRcLWhvcnNlOwor5K26ID4gYVwtaG9yc2VcLXRvXC1yYWlzZVwtaXRzXC1oZWFkXC1oaWdoOwor5KuuID4gdG9cLWJlbmRcLW9yXC1sb3dlclwtb2ZcLW9uZScnc1wtaGVhZDsKK+SrhiA+IHRoZVwtZnJvbnRcLWFuZFwtYmFja1wtb2ZcLXRoZVwtbmVjazsKK+SnkiA+IHN0ZXBzXC1sZWFkaW5nXC11cFwtdG9cLWFcLWJ1aWxkaW5nOwor5KSbID4gY29tcG9uZW50XC1wYXJ0c1wtb2ZcLWFcLWNyb3NzXC1ib3c7Civko7kgPiB0b1wtYnJld1wtMTBcLXBlcmNlbnRcLW9mXC10aGVcLXdpbmU7Civko7UgPiB0b1wtYnJld1wtdGhlXC13aW5lXC1hXC1zZWNvbmRcLXRpbWU7Civko6wgPiB0aGVcLXNoaW55XC1jb2xvcmZ1bFwtb2ZcLXRoZVwtd2luZTsKK+SiviA+IG5hbWVcLW9mXC1hblwtYW5jaWVudFwtc21hbGxcLXN0YXRlOwor5KGDID4gYVwtdG9vbFwtZm9yXC1icnVzaGluZ1wtdGhlXC10aHJlYWQ7CivknLIgPiBuYW1lXC1vZlwtYVwtdmlsbGFnZVwtaW5cLW9sZFwtY2hpbmE7CivkmJMgPiB0aGlja1wtYmxvb2RcLW9mXC1jYXR0bGVcLWFuZFwtZ29hdDsKK+STvyA+IGFcLXNlY29uZFwtbmFtZVwtZm9yXC1sb3R1c1wtZmxvd2VyOwor5JO5ID4gdG9cLXN0dWZmXC1mdWxsXC1hbmRcLXRvXC1ndWxwXC1kb3duOwor5I2BID4gdGhlXC1oZW1cLW9yXC1ib3JkZXJcLW9mXC1hXC1nYXJtZW50Owor5Iu0ID4gc2lsa1wtZmFicmljc1wtd2l0aFwtbWl4ZWRcLWNvbG9yczsKK+SLsyA+IGNsb3RoXC1vclwtcGFwZXJcLXBhc3RlZFwtdG9nZXRoZXI7CivkiaQgPiBhXC1iYW1ib29cLXdhcmVcLWZvclwtd2FzaGluZ1wtcmljZTsKK+SJmyA+IGJhbWJvb1wtYmFza2V0XC1mb3JcLXdhc2hpbmdcLXJpY2U7CivkiZMgPiBtYXR0cmVzc1wtbWFkZVwtb2ZcLWJhbWJvb1wtc3RyaXBzOwor5Ii5ID4gYVwtYmFtYm9vXC13YXJlXC1mb3JcLXdhc2hpbmdcLXJpY2U7Civkh6wgPiB0aGluXC1iYW1ib29cLWxhdGhzXC1rbml0dGVkXC1zYWlsOwor5IenID4gdG9cLWZpbGxcLWFuXC1vcGVuaW5nXC13aXRoXC1iYW1ib287CivkhKEgPiBub3J0aGVyblwtbWlub3JpdHlcLWV0aG5pY1wtZ3JvdXA7Civkg7YgPiBydWdnZWRcLWFuZFwtdW5ldmVuXC1vZlwtdGhlXC1yb2NrczsKK+SDmiA+IHJ1Z2dlZFwtbGFuZFwtb2ZcLXNhbmRcLWFuZFwtcGViYmxlOwor5IOCID4gZHVsbFwtc291bmRcLW9mXC10aGVcLXRvbGxpbmdcLWJlbGw7CivjvKEgPiBhXC1zbWFsbFwtamFyXC13aXRoXC1hXC1zbWFsbFwtbW91dGg7CivjtbcgPiB0dXJidWxlbnRcLWZsb3dpbmdcLW9mXC10aGVcLXdhdGVyOwor47WPID4gaGF2aW5nXC10aGVcLWFwcGVhcmFuY2VcLW9mXC1kZXB0aDsKK+OyuSA+IHRoZVwtZHJ5XC1zb2lsXC1vblwtdGhlXC1yaXZlclwtc2lkZTsKK+OynSA+IGZpbmVcLWhhaXJcLW9mXC1iaXJkc1wtYW5kXC1hbmltYWxzOwor46+FID4gdGhlXC1icmFuY2hlc1wtZ3Jvd2luZ1wtZG93bndhcmRzOwor466CID4gYW5cLWFwcGxpYW5jZVwtdXNlZFwtdG9cLWxpZnRcLWZvb2Q7CivjrKQgPiB3ZXRcLWNsb3RoZXNcLW5vdFwtY29tcGxldGVseVwtZHJ5Owor46q+ID4gdG9cLWN1dFwtdGhlXC1mbGVzaFwtZnJvbVwtdGhlXC1ib25lOwor46iZID4gdG9cLWNsYXNwXC1vclwtaG9sZFwtdW5kZXJcLXRoZVwtYXJtOwor46ayID4gYVwtcGFydGljbGVcLWV4cHJlc3NpbmdcLXN1cnByaXNlOwor46WLID4gc291bmRcLW9mXC10aGVcLWFuZ3Vpc2hcLW9mXC1zb3Jyb3c7CivjpK8gPiBjbGV2ZXJcLW9yXC1zbWFydFwtaW5cLWFcLXNtYWxsXC13YXk7CivjpJQgPiB0b1wtY29uY2VkZVwtb3JcLXN1Ym1pdFwtd2lsbGluZ2x5Owor46OHID4gYVwta2luZFwtb2ZcLWJlYXN0XC13aXRoXC1sb25nXC1oYWlyOwor46GeID4gYVwtc2Fja1wtdXNlZFwtdG9cLWZlZWRcLXRoZVwtaG9yc2VzOwor46CjID4gYVwtbW91bnRhaW5cLWluXC1qaWFuZ3hpXC1wcm92aW5jZTsKK+OeryA+IHRoZVwtdHVybmluZ1wtYXJlYVwtb2ZcLWFcLW1vdW50YWluOwor45yGID4gY29tbW9ubHlcLWtub3duXC1hc1wtbW90aGVyXC1pblwtd3U7CivjmZogPiByZWRcLWNvbG9yZWRcLWhhcmRcLWFuZFwtc29saWRcLW11ZDsKK+OYniA+IHllbGxpbmdcLXNvdW5kXC1vZlwtdG93aW5nXC1hXC1ib2F0Owor45SpID4gaGFpclwtb3JubWVudHNcLXVzZWRcLWluXC1vbGRcLXRpbWU7CivjlIAgPiB0b1wtYnJhbmRcLWNyaW1pbmFsc1wtb25cLXRoZVwtZmFjZTsKK+i/piA+IGNoYXJhY3RlclwtZm9yXC10cmFuc2xpdGVyYXRpb247CivlurUgPiBidWRkaGlzdFwtbW9uYXN0ZXJ5XC1vclwtbnVubmVyeTsKK+W6miA+IHNldmVudGhcLW9mXC10ZW5cLWN5Y2xpY2FsXC1zdGVtczsKK+i2oyA+IHdoYXRcLWF0dHJhY3RzXC1vbmUnJ3NcLWF0dGVudGlvbjsKK+eVlCA+IGJvdW5kYXJ5XC1wYXRoXC1kaXZpZGluZ1wtZmllbGRzOwor5aS+ID4gYmVcLXdlZGdlZFwtb3JcLWluc2VydGVkXC1iZXR3ZWVuOwor6L6GID4gbnVtZXJhcnlcLWFkanVuY3RcLWZvclwtdmVoaWNsZXM7CivlpLkgPiBiZVwtd2VkZ2VkXC1vclwtaW5zZXJ0ZWRcLWJldHdlZW47CivmgJQgPiBhXC1kaXNlYXNlXC1yZXNlbWJsaW5nXC1uZXVyb3NpczsKK+mZjCA+IGZvb3RcLXBhdGhcLWJldHdlZW5cLXJpY2VcLWZpZWxkczsKK+mqhiA+IGFcLXdoaXRlXC1ob3JzZVwtd2l0aFwtYmxhY2tcLW1hbmU7CivmpaMgPiBjcm9zc2JlYW1cLWFib3ZlXC1vclwtdW5kZXJcLWdhdGU7CivnkqcgPiBwaWVjZVwtb2ZcLWphZGVcLXdpdGhcLWhvbGVcLWluXC1pdDsKK+iGuyA+IHJhbmtcLW9kb3JcLVwob2ZcLXNoZWVwXC1vclwtZ29hdHNcKTsKK+eOkSA+IHBlYXJsXC10aGF0XC1pc1wtbm90XC1xdWl0ZVwtcm91bmQ7CivllKIgPiBmbHV0ZVwtbGlrZVwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+algiA+IGFcLXJhZnRcLlwtdG9cLWhld1wuXC10b1wtZmVsbFwtdHJlZXM7CivnipIgPiBlbnRlcnRhaW5cLXZpY3RvcmlvdXNcLXNvbGRpZXJzOwor55+NID4gbG9va1wtYWJvdXRcLWluXC1mcmlnaHRcLW9yXC1hbGFybTsKK+aTpCA+IHRvXC1ibG93XC10aGVcLW5vc2VcLXdpdGhcLWZpbmdlcnM7CivoiqEgPiBwbGFudFwtYWxsaWVkXC10b1wtdGhlXC13YXRlcmxpbHk7CivnsbwgPiBub25cLWdsdXRpbm91c1wtbG9uZ1wtZ3JhaW5cLXJpY2U7CivmoaEgPiBiZW50XC1vclwtdHdpc3RlZFwtcGllY2VcLW9mXC13b29kOwor6bu7ID4gc3BlY2lhbFwtcGF0dGVyblwtb2ZcLWVtYnJvaWRlcnk7CivltZ0gPiBnb3Vsb3VcLW1vdW50YWluXC1wZWFrXC1pblwtaHVuYW47Civlnq0gPiBjaGFyYWN0ZXJcLXVzZWRcLWluXC1wbGFjZVwtbmFtZXM7CivnoZYgPiBcPGFyY2hcPlwtdG93blwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+mCoSA+IG5hbWVcLW9mXC1hXC1kaXN0cmljdFwtaW5cLXNpY2h1YW47CivorqAgPiBzaW1wbGlmaWVkXC1rYW5neGlcLXJhZGljYWxcLTE0OTsKK+WZuyA+IGNoYXJhY3RlclwtdXNlZFwtaW5cLXRyYW5zbGF0aW9uOwor55asID4gc2Nyb2Z1bG91c1wtbHVtcHNcLW9yXC1zd2VsbGluZ3M7CivolJ8gPiBmcmFtZVwtb25cLXdoaWNoXC1zaWxrd29ybXNcLXNwaW47CivlnqcgPiB2YXJpYWJsZVwtdW5pdFwtb2ZcLWxhbmRcLW1lYXN1cmU7CivprI8gPiBhXC1jb2lmZnVyZVwtb25cLXRvcFwtb2ZcLXRoZVwtaGVhZDsKK+etmCA+IFwoYVwtbWVhc3VyZVwtb2ZcLXdpZHRoXC1vZlwtY2xvdGhcKTsKK+e8kSA+IGNvcmRcLWJpbmRpbmdcLW9uXC1oaWx0XC1vZlwtc3dvcmQ7CivnsJYgPiBiYW1ib29cLXRyYXBcLWZvclwtY2F0Y2hpbmdcLWZpc2g7CivluosgPiBhXC1jdXBib2FyZFwtb3JcLXBhbnRyeVwtdG9cLXN0b3JlOwor55SNID4gcmFmdGVyc1wtc3VwcG9ydGluZ1wtcm9vZlwtdGlsZXM7Civpp7kgPiBibGFja1wtaG9yc2VcLXdpdGhcLWFcLXdoaXRlXC1mYWNlOwor6aexID4gYVwtd2hpdGVcLWhvcnNlXC13aXRoXC1ibGFja1wtbWFuZTsKK+mljiA+IHdpbmVcLWFuZFwtZm9vZFwtZWF0ZW5cLXdpdGhcLXdpbmU7Civph4QgPiB3aW5lXC1icmV3XC1mb3JcLXRoZVwtc2Vjb25kXC10aW1lOwor6YeBID4gc21lYXJcLXdpdGhcLWJsb29kXC1pblwtc2FjcmlmaWNlOwor6L+nID4gYVwtY2hpbmVzZVwtZmFtaWx5XC1uYW1lXC1hcnJhbmdlOwor6L2YID4gdGVhclwtYXN1bmRlclwtYmV0d2VlblwtY2hhcmlvdHM7CivovJsgPiBudW1lcmFyeVwtYWRqdW5jdFwtZm9yXC12ZWhpY2xlczsKK+i8mSA+IHNpZGVzXC1vZlwtY2hhcmlvdFwtd2VyZVwtd2VhcG9uczsKK+i8jCA+IG51bWVyYXJ5XC1hZGp1bmN0XC1mb3JcLXZlaGljbGVzOwor6KmAID4gZ2FycnVsb3VzXC10b1wtd2hpc3BlclwuXC10b1wtam9rZTsKK+iouSA+IHRvXC1iZWd1aWxlXC13aXRoXC1mYWxzZVwtc3RvcmllczsKK+iXiiA+IGFcLWtpbmRcLW9mXC1iZWFuXC13aXRoXC1mbGF0XC1wb2RzOwor6IigID4gbG9uZ1wtbmFycm93XC1rbmlmZVwtc2hhcGVkXC1ib2F0Owor57+jID4gZmVhdGhlcnNcLXVzZWRcLWRlY29yYXRlXC1jb2ZmaW47CivnuJMgPiBvcmFuZ2VcLW9yXC1yZWRkaXNoXC15ZWxsb3dcLXNpbGs7Civnt7EgPiBjb3JkXC1iaW5kaW5nXC1vblwtaGlsdFwtb2ZcLXN3b3JkOwor57OPID4gcmljZVwtZ3JpdHNcLWxlZnRcLWFmdGVyXC1odWxsaW5nOwor56+YID4gYVwtdXRlbnNpbFwtdXNlZFwtdG9cLWZpbHRlclwtd2luZTsKK+eniCA+IG5vblwtZ2x1dGlub3VzXC1sb25nXC1ncmFpblwtcmljZTsKK+ehpCA+IFw8YXJjaFw+XC10b3duXC1pblwtaGViZWlcLXByb3ZpbmNlOwor55+wID4gYXJyb3dcLXdpdGhcLWF0dGFjaGVkXC1zaWxrXC1jb3JkOwor55mnID4gc2Nyb2Z1bG91c1wtbHVtcHNcLW9yXC1zd2VsbGluZ3M7CivnkqMgPiBwZWFybFwtdGhhdFwtaXNcLW5vdFwtcXVpdGVcLXJvdW5kOwor546DID4gYVwtbGFyZ2VcLWFwZVwtZm91bmRcLWluXC13XC5cLWNoaW5hOwor54yHID4gdGhlXC1zY3JlYW1cLW9yXC1yb2FyXC1vZlwtYVwtdGlnZXI7CivnibggPiB0aGVcLWZlbWFsZVwtb2ZcLWNlcnRhaW5cLWFuaW1hbHM7Civmu5kgPiB3YXRlcnNcLWNvbnZlcmdpbmdcLXRvXC1vbmVcLXNwb3Q7Civmu5ggPiBjaGFyYWN0ZXJcLXVzZWRcLWluXC1wbGFjZVwtbmFtZXM7CivmqYggPiBiZW50XC1vclwtdHdpc3RlZFwtcGllY2VcLW9mXC13b29kOwor5qSKID4gdG9cLWZpdFwtYVwtaGFuZGxlXC1pbnRvXC1hXC1zb2NrZXQ7CivmmpAgPiB0aGVcLWJyaWdodFwtc2hpbmluZ1wtb2ZcLXRoZVwtc3VuOwor5pizID4gdGhlXC1kZWNsaW5pbmdcLXN1blwtaW5cLXRoZVwtd2VzdDsKK+aNrCA+IHByZXNzXC1kb3duXC1oZWF2aWx5XC13aXRoXC1oYW5kczsKK+aKlCA+IHRha2VcLW9yXC1ob2xkXC11cFwtaW5cLWJvdGhcLWhhbmRzOwor5baBID4gZ291bG91XC1tb3VudGFpblwtcGVha1wtaW5cLWh1bmFuOwor5bS+ID4gcGxhY2VcLW5hbWVcLWluXC1zaGFueGlcLXByb3ZpbmNlOwor5bOrID4gbW91bnRhaW5cLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civlp4UgPiB3b21hblwtYXRcLXRpbWVcLW9mXC1tZW5zdHJ1YXRpb247Civlo7wgPiBwYWxhY2VcLWNvcnJpZG9yXC1vclwtcGFzc2FnZXdheTsKK+WjjSA+IG1vYXRcLWFyb3VuZFwtYVwtY2l0eVwuXC1hXC1jaGFubmVsOwor5Z+hID4gY2hhcmFjdGVyXC11c2VkXC1pblwtcGxhY2VcLW5hbWVzOwor5ZeqID4gY2hhcmFjdGVyXC11c2VkXC1pblwtdHJhbnNsYXRpb247Civll6kgPiBmbHV0ZVwtbGlrZVwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+WVqSA+IHBhcnRpY2xlXC1pbXBseWluZ1wtcHJvYmFiaWxpdHk7Civlj5AgPiB0b1wtcHJpY2tcLWFcLWRvZ1wtdG9cLW1ha2VcLWhpbVwtZ287CivljZAgPiBzd2FzdGlrYVwtZm91cnRoXC1vZlwtYXVzcGljaW91czsKK+WNjSA+IHN3YXN0aWthXC1mb3VydGhcLW9mXC1hdXNwaWNpb3VzOwor5LaVID4gaXJyZWd1bGFyXC1hbmRcLXByb21pbmVudFwtdGVldGg7CivktZggPiBkb3NlbicndFwtdFwtc3RpY2tcLXRvXC1lYWNoXC1vdGhlcjsKK+SytSA+IGFcLWdlbmVyYWxcLW5hbWVcLW9mXC1zbWFsbFwtYmlyZHM7Civkr4YgPiBzbWFsbFwtYW5kXC10aGluXC1waWVjZVwtb2ZcLWJvbmVzOwor5KuyID4gdGhpblwtYW5kXC1zaWNrbHlcLWluXC1hcHBlYXJhbmNlOwor5KukID4gYmV0d2VlblwtdGhlXC1leWVicm93c1wtYW5kXC1leWVzOwor5KuhID4gYVwtbG9uZ1wtc2hhcGVcLW9mXC1oZWFkXC1hbmRcLWZhY2U7Civkq4sgPiBmZW1hbGVcLWF0dGVuZGFudHNcLW9yXC1zZXJ2YW50czsKK+SnkCA+IGFcLW1vdW50YWluXC1pblwtc2hhbnhpXC1wcm92aW5jZTsKK+SloyA+IGFuXC1pbnN0cnVtZW50XC1mb3JcLWJvcmluZ1wtd29vZDsKK+SliSA+IHRoZVwtY3VydmVkXC1pcm9uXC1wYXJ0XC1vZlwtYVwtaG9lOwor5KSSID4gd2luZVwtbWFkZVwtZnJvbVwtZ2x1dGlub3VzXC1yaWNlOwor5KSNID4gcm90dGVuXC1wYXN0ZVwtb3JcLXNveWJlYW5cLXNhdWNlOwor5KC9ID4gaGVpZ2h0XC1vclwtc3RhdHVyZVwtb2ZcLWFcLXBlcnNvbjsKK+SgsSA+IHRvXC13YWxrXC1zbG93bHlcLWFuZFwtY2F1dGlvdXNseTsKK+SfpyA+IHNvdW5kXC1vZlwtdHJlYWRpbmdcLW9yXC1zdGVwcGluZzsKK+SehyA+IGdpZnRzXC10b1wtc3VwZXJpb3JzXC1vclwtZnJpZW5kczsKK+SdvSA+IG5hbWVcLW9mXC1hXC1wZXJzb25cLWluXC1vbGRcLWNoaW5hOwor5J2ZID4gYVwta2luZFwtb2ZcLWFuaW1hbFwtbGlrZVwtYVwtdGlnZXI7CivknZcgPiBhXC1raW5kXC1vZlwtYW5pbWFsXC1saWtlXC1hXC10aWdlcjsKK+SciCA+IHRvXC1zcGVha1wtb25cLWJlaGFsZlwtb2ZcLWFub3RoZXI7CivkmLMgPiBhXC1nYXJtZW50XC1vZlwtc2luZ2xlXC10aGlja25lc3M7Civkj7wgPiB3aGF0XC1pc1wtbGVmdFwtb3Zlclwtb2ZcLXRoZVwtZm9vZDsKK+SOoiA+IHRvXC1tZWFzdXJlXC1ieVwtcGludHNcLWFuZFwtcGVja3M7CivkjpEgPiBmbHlpbmdcLW92ZXJcLXRoZVwtd2F0ZXJcLXN1cmZhY2U7Civkja4gPiB5b3VuZ1wtZ29hdFwtdW5kZXJcLW9uZVwteWVhclwtb2xkOwor5I2CID4gdG9vbHNcLXRvXC1kcmF3XC13YXRlclwtb3JcLWxpcXVpZDsKK+SMvyA+IHRoZVwtYnJlYWR0aFwtb2ZcLWNsb3RoXC1vclwtcGFwZXI7CivkjJcgPiB0aGVcLWxlZnRcLW92ZXJcLW9mXC1kcmF3aW5nXC1zaWxrOwor5IyIID4gdG9cLWdldFwtc29tZXRoaW5nXC13aXRoXC1hXC1sYXNzbzsKK+SJpSA+IGFcLXNtYWxsXC1iYXNrZXRcLWZvclwtY2hvcHN0aWNrczsKK+SGuiA+IHdoaXJsaW5nXC1vZlwtdGhlXC1mbG93aW5nXC13YXRlcjsKK+SFoiA+IG1hdHVyZVwtb3JcLXJpcGVuXC1vZlwtdGhlXC1ncmFpbnM7Civjv7YgPiB0aGVcLXNpZGVzXC1vZlwtYVwtc2hvZVwtb3JcLWd1dHRlcjsKK+O9sCA+IGNhcnZlZFwtd2luZG93XC1mcmFtZVwtb25cLWFcLWRvb3I7Civjua8gPiBhXC1raW5kXC1vZlwtYW5pbWFsXC1saWtlXC1hXC10aWdlcjsKK+O5giA+IHVudGFtZWRcLWFuZFwtaW5kb2NpbGl0eVwtY2F0dGxlOwor47SEID4gdGhlXC13YXRlclwtZmxvd2luZ1wtaW5cLWFcLXR1cm5lZDsKK+OwiSA+IHRoZVwtaGF6ZWxcLW51dFwtb3JcLWZpbGJlcnRcLXRyZWU7CivjrZ8gPiB0b3J0dXJlXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7Civjq5AgPiBkaXN0YW50XC1hbmRcLWluZGlzdGluZ3Vpc2hhYmxlOwor46G7ID4gbmFtZVwtb2ZcLWFcLXNtYWxsXC1hbmNpZW50XC1zdGF0ZTsKK+ObkCA+IHdpZmVcLW9mXC1vbmUnJ3NcLWVsZGVyJydzXC1icm90aGVyOwor45qGID4gdG9cLWRvXC1zb21ldGhpbmdcLWluXC1hblwtb2xkXC13YXk7Civjlp8gPiB0b1wtZGVsaXZlclwtb3ZlclwtdG9cLXBlcnNvbmFsbHk7Civku7YgPiBudW1lcmFyeVwtYWRqdW5jdFwtZm9yXC1hcnRpY2xlOwor5ZCXID4gZmluYWxcLWludGVycm9nYXRpdmVcLXBhcnRpY2xlOwor6bq9ID4gaW50ZXJyb2dhdGl2ZVwtZmluYWxcLXBhcnRpY2xlOwor55+jID4gcGFydGljbGVcLW9mXC1jb21wbGV0ZWRcLWFjdGlvbjsKK+S5kiA+IHVzZWRcLXdpdGhcLXBvbmdcLWZvclwtcGluZ1wtcG9uZzsKK+S5kyA+IHVzZWRcLXdpdGhcLXBpbmdcLWZvclwtcGluZ1wtcG9uZzsKK+WSmiA+IHVzZWRcLWFzXC1kZXNjcmlwdGlvblwtb2ZcLXNvdW5kOwor55CFID4gYVwtdmFyaWV0eVwtb2ZcLXdoaXRlXC1jYXJuZWxpYW47CivlrbAgPiB3aG9cP1wtd2hpY2hcP1wtd2hhdFw/XC13aGljaFwtb25lXD87CivmiIogPiBmaWZ0aFwtb2ZcLXRlblwtY2VsZXN0aWFsXC1zdGVtczsKK+a4siA+IGFkZFwtcmVwZWF0ZWRcLXdhc2hlc1wtb2ZcLWNvbG9yOwor5ZKrID4gZm9vdFwtbWVhc3VyZVwtb2ZcLXpob3VcLWR5bmFzdHk7CivppbcgPiByYXRpb25zXC1hbmRcLXBheVwtZm9yXC1zb2xkaWVyczsKK+axtiA+IGFcLXJpdmVyXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor5Y+BID4gYmFua1wtZm9ybVwtb2ZcLW51bWVyYWxcLScndGhyZWUnJzsKK+WjrCA+IG5pbnRoXC1vZlwtdGVuXC1jZWxlc3RpYWxcLXN0ZW1zOwor5p+pID4gY29mZmluXC13aGljaFwtY29udGFpbnNcLWNvcnBzZTsKK+ahoCA+IHRoZVwtZm9ya2luZ1wtYnJhbmNoXC1vZlwtYVwtdHJlZTsKK+eUjyA+IGFcLXNxdWF0XC1qYXJcLWZvclwtaG9sZGluZ1wtd2luZTsKK+esniA+IGJhbWJvb1wtcm9kXC11c2VkXC1mb3JcLWJlYXRpbmdzOwor6ZiXID4gYVwtcGxhY2VcLWluXC14aW5qaWFuZ1wtcHJvdmluY2U7Civpk4kgPiBkZXZpY2VcLWZvclwtY2FycnlpbmdcLWFcLXRyaXBvZDsKK+inpSA+IGFcLWN1cFwtbWFkZVwtb2ZcLWhvcm5cLW9ic3RpbmF0ZTsKK+ijoyA+IGRyYXdcLW9uZScnc1wtaGFuZHNcLWludG9cLXNsZWV2ZTsKK+W0gyA+IG1vdW50YWluXC1pblwtc2ljaHVhblwtcHJvdmluY2U7CivnvZggPiBzY3JlZW5cLXVzZWRcLWluXC1hbmNpZW50XC10aW1lczsKK+awhyA+IHRoaWNrXC1yb3VnaFwtc2VyZ2VcLWZyb21cLXRpYmV0Owor5Z+0ID4gc29pbFwtd2l0aFwtbGFyZ2VcLWNsYXlcLWNvbnRlbnQ7CivmmLQgPiBvbmVcLW9mXC10aGVcLTI4XC1jb25zdGVsbGF0aW9uczsKK+iPuSA+IHNhbHRlZFwtb3JcLXBpY2tsZWRcLXZlZ2V0YWJsZXM7CivpurwgPiBpbnRlcnJvZ2F0aXZlXC1maW5hbFwtcGFydGljbGU7Civpta0gPiBhXC1zbWFsbFwtYmlyZFwtd2l0aFwtYmxhY2tcLW5lY2s7CivppZ8gPiByYXRpb25zXC1hbmRcLXBheVwtZm9yXC1zb2xkaWVyczsKK+mkiSA+IHJhdGlvbnNcLWFuZFwtcGF5XC1mb3JcLXNvbGRpZXJzOwor6ZqSID4gdGhlXC1hcHBlYXJhbmNlXC1vZlwtYVwtbW91bnRhaW47Civpl5AgPiBhXC1wbGFjZVwtaW5cLXhpbmppYW5nXC1wcm92aW5jZTsKK+mJiSA+IGRldmljZVwtZm9yXC1jYXJyeWluZ1wtYVwtdHJpcG9kOwor6YaBID4gYVwta2luZFwtb2ZcLWdyZWVuXC1jb2xvcmVkXC13aW5lOwor6YK/ID4gYVwtc3RhdGVcLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7CivovZYgPiBmcmFtZXdvcmtcLW9mXC1sYXR0aWNlXC1vblwtY2FydDsKK+intSA+IGFcLWN1cFwtbWFkZVwtb2ZcLWNvcm5cLW9ic3RpbmF0ZTsKK+ilnSA+IGRyYXdcLW9uZScnc1wtaGFuZHNcLWludG9cLXNsZWV2ZTsKK+iAhyA+IHdyaW5rbGVkXC1mYWNlXC1vZlwtdGhlXC1lbGRlcmx5Owor5760ID4gcmFua1wtb2RvdXJcLW9mXC1zaGVlcFwtb3JcLWdvYXRzOwor57WDID4gc3RyaW5nXC1vblwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+etuyA+IHBsYWNlXC1uYW1lXC1pblwtaHVuYW5cLXByb3ZpbmNlOwor56uaID4gc3RhbmRcLWFuZFwtd2FpdFwtZm9yXC1sb25nXC10aW1lOwor552ZID4gdG9cLXJvbGxcLXRoZVwtZXllYmFsbHNcLXRvXC1sb29rOwor55GCID4gXChzdG9uZVwtd2hpY2hcLXJlc2VtYmxlc1wtamFkZVwpOwor54e6ID4gdGhlXC1kcnlcLWF0XC10aGVcLWZpcmVcLXRvXC1yb2FzdDsKK+eBiSA+IGFcLXJpdmVyXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor54CUID4gcml2ZXJcLW5hbWVcLWluXC1oZW5hblwtcHJvdmluY2U7CivmsacgPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1zaGFuZ2Rvbmc7CivmsIwgPiB0aGlja1wtcm91Z2hcLXNlcmdlXC1mcm9tXC10aWJldDsKK+aptSA+IHdvb2RcLXBsYWNlZFwtdW5kZXJcLXJvb2ZcLXRpbGVzOwor5qSPID4gdGhlXC1mb3JraW5nXC1icmFuY2hcLW9mXC1hXC10cmVlOwor5puIID4gdHdpbGlnaHRcLWp1c3RcLWJlZm9yZVwtc3VucmlzZTsKK+aXnyA+IGFuXC1taWxpdGFyeVwtZmxhZ1wtb2FcLXN0YW5kYXJkOwor5omoID4gcGlja1wtdXBcLXdpdGhcLWZvcmtcLW9yXC1waW5jZXJzOwor5omgID4gcGlja1wtdXBcLXdpdGhcLWZvcmtcLW9yXC1waW5jZXJzOwor5bmwID4gY3VydGFpblwtYXRcLWZyb250XC1vZlwtY2FycmlhZ2U7CivltI0gPiBtb3VudGFpblwtaW5cLXNpY2h1YW5cLXByb3ZpbmNlOwor5bSAID4gcGxhY2VcLW5hbWVcLWluXC1odW5hblwtcHJvdmluY2U7CivlqIAgPiBuYW1lXC1vZlwtYVwtY29uY3ViaW5lXC1vZlwtZGlcLWt1Owor5Z+EID4gd2hpcmxpbmdcLW9mXC1kdXN0XC1pblwtdGhlXC13aW5kOwor5ZeOID4gZmluYWxcLWludGVycm9nYXRpdmVcLXBhcnRpY2xlOwor5LWgID4gcnVzaGVzXC11c2VkXC1mb3JtXC1tYWtpbmdcLW1hdHM7Civks40gPiBhXC1raW5kXC1vZlwtcGhlYXNhbnRcLWxpa2VcLWJpcmQ7CivksbEgPiBhXC1raW5kXC1vZlwtc2xpcHBlcnlcLWxvbmdcLWZpc2g7CivkrocgPiBibGFja1wtaG9yc2VcLXdpdGhcLXdoaXRlXC10aGlnaDsKK+SsoCA+IHRoZVwtZmFsbGluZ1wtb2ZcLXNub3dcLWFuZFwtcmFpbjsKK+SqrSA+IGFcLWtpbmRcLW9mXC1tdXNpY2FsXC1pbnN0cnVtZW50Owor5KqJID4gbWV0YWxcLWRlY29yYXRpb25cLW9uXC1hXC1oYWx0ZXI7CivkqaEgPiBhXC1raW5kXC1vZlwtYm9vdHNcLWluXC1vbGRcLXRpbWVzOwor5KacID4gbmFtZVwtb2ZcLWFcLXN0YXRlXC1pblwtb2xkXC10aW1lczsKK+SluiA+IG5hbWVcLW9mXC1hXC1kb3VibGVcLWVkZ2VkXC1zd29yZDsKK+SllSA+IHRoZVwtYmxhZGVcLW9yXC1lZGdlXC1vZlwtYVwtc3BhZGU7CivkpIkgPiBlbXB0aWVkXC10aGVcLWRyaW5rXC1jb21wbGV0ZWx5Owor5KOhID4gbmFtZVwtb2ZcLWFcLXBsYWNlXC1pblwtb2xkXC10aW1lczsKK+SjjyA+IG5hbWVcLW9mXC1hXC1zdGF0ZVwtaW5cLW9sZFwtdGltZXM7CivkorwgPiBuYW1lXC1vZlwtYVwtc3RhdGVcLWluXC1vbGRcLXRpbWVzOwor5KGRID4gdGhlXC1yaW1cLW9yXC1mZWxsb2VcLW9mXC1hXC13aGVlbDsKK+SgtCA+IHdpdGhcLWFcLXN5bW1ldHJpY1wtd2VsbFwtZm9ybWVkOwor5J21ID4gdG9cLXRoYW5rXC13aXRoXC1tb25leVwtb3JcLWdpZnRzOwor5JmXID4gYVwtc3dhZGRsaW5nXC1jbG90aFwtZm9yXC1pbmZhbnQ7CivkmLsgPiBjdXJ0YWluXC1vblwtYVwtY2FycmlhZ2VcLW9yXC1jYXI7CivkmLogPiBhXC1zZWFtXC13aGljaFwtaGFzXC1jb21lXC11bnNld247CivkmLUgPiBoaXNzaW5nXC1zb3VuZFwtb2ZcLXRoZVwtY2xvdGhlczsKK+SUmyA+IGZpYnJvdXNcLXBsYW50XC1vZlwtd2hpY2hcLWNsb3RoOwor5JOcID4gc2FsdGVkXC1vclwtcGlja2xlZFwtdmVnZXRhYmxlczsKK+SRuSA+IGFcLW51bWVyYXJ5XC1hZGp1bmN0XC1mb3JcLXNoaXBzOwor5I2gID4gdHVyYmFuXC11c2VkXC1pblwtYW5jaWVudFwtdGltZXM7CivkjIsgPiBhXC1oZXJjaGllZlwtaHVuZ1wtYXRcLXRoZVwtd2Fpc3Q7Civki6kgPiBwcmV0dHlcLWFuZFwtZmluZVwtc2lsa1wtZmFicmljczsKK+SLjyA+IHRoaWNrXC1hbmRcLWJpZ1wtcm9wZXNcLW9yXC1jb3JkczsKK+SLiyA+IGFcLWtpbmRcLW9mXC1zcHJpbmdcLWZpc2hpbmdcLW5ldDsKK+SGtiA+IG5vaXNlXC1vZlwtYVwtbW91c2VcLWluXC10aGVcLWNhdmU7CivkhbMgPiBzdGFsa1wtb2ZcLXRoZVwtcGFuaWNsZWRcLW1pbGxldDsKK+SFrSA+IGFcLXZhcmlldHlcLW9mXC1wYW5pY2xlZFwtbWlsbGV0Owor5IWjID4gYVwtdmFyaWV0eVwtb2ZcLXBhbmljbGVkXC1taWxsZXQ7CivkhYwgPiBzdGFsa1wtb2ZcLXdoZWF0XC1vclwtcmljZVwtcGxhbnQ7Civkg4sgPiBhXC1maW5lXC1zdG9uZVwtcmVzZW1ibGluZ1wtamFkZTsKK+SCtSA+IHNvdW5kXC1vZlwtYnVtcGluZ1wtb3JcLXN0cmlraW5nOwor5IKvID4gYVwtZmluZVwtc3RvbmVcLXJlc2VtYmxpbmdcLWphZGU7CivkgqsgPiBub2lzZVwtb2ZcLXN0b25lc1wtcm9sbGluZ1wtZG93bjsKK+SCpSA+IGFcLWZpbmVcLXN0b25lXC1yZXNlbWJsaW5nXC1qYWRlOwor5ICzID4gbm90XC10b1wtbG9va1wtc3RyYWlnaHRcLWZvcndhcmQ7CivjvrQgPiB0aGVcLWVyeXRoZW1hXC1vZlwtYWNuZVwtcm9zYWNlYTsKK+O5pSA+IGFcLXllbGxvd1wtZG9nXC13aXRoXC1ibGFja1wtaGVhZDsKK+O5gSA+IGdlbmVyYWxseVwtY2FsbGVkXC10aGVcLWFuaW1hbHM7CivjtbUgPiBzd2lmdFwtY3VycmVudHNcLW9mXC10aGVcLXN0cmVhbTsKK+O1jiA+IGFcLW1vdW50YWluXC1zdHJlYW1cLW9yXC10b3JyZW50Owor47SaID4gdGhlXC1zbWFsbFwtZGl0Y2hcLWluXC10aGVcLWZpZWxkOwor47CGID4gYW5cLWluc3RydW1lbnRcLXRvXC1ibG93XC1hXC1maXJlOwor47CBID4gYVwtdHJlZVwtd2l0aFwtc2xhbnRlZFwtYnJhbmNoZXM7Civjr7MgPiBhXC1raW5kXC1vZlwtdG9vbFwtdG9cLWFkanVzdFwtYm93Owor4660ID4gYVwtbnVtZXJhcnlcLWFkanVuY3RcLWZvclwtc2hpcHM7CivjpZwgPiB1bnN1Y2Nlc3NmdWxcLWluXC1vbmUnJ3NcLWNhcmVlcjsKK+OhsSA+IHRvXC1jYXV0ZXJpemVcLWJ5XC1idXJuaW5nXC1tb3hhOwor46CxID4gdG9cLXNldFwtd2l0aFwtdGhlXC1sZWdzXC1jbG9zc2VkOwor45yMID4gYVwtZGlmZmVyZW50XC1uYW1lXC1mb3JcLWJyZWFzdHM7Civjmb4gPiBoaWxsc1wtd2l0aFwtbG90c1wtb2ZcLWJpZ1wtcm9ja3M7CivjmZsgPiBhXC1wZXJzb24nJ3NcLW5hbWVcLWluXC1vbGRcLXRpbWVzOwor45e+ID4gdG9cLWdpdmVcLXZlbnRcLXRvXC10aGVcLWZlZWxpbmdzOwor45eGID4gc291bmRcLW9mXC10aGVcLXJpbmdlZFwtcGhlYXNhbnQ7Civjk7MgPiB1c2VcLWtuaWZlXC10b1wtc3BsaXRcLXNvbWV0aGluZzsKK+ORnyA+IGluc2luY2VyZVwtYW5kXC1jdW5uaW5nXC1wZXJzb247CivllaYgPiBmaW5hbFwtcGFydGljbGVcLW9mXC1hc3NlcnRpb247Civnu7wgPiBhcnJhbmdlXC10aHJlYWRzXC1mb3JcLXdlYXZpbmc7Civmi60gPiB3aXBlXC1hd2F5XC1zdGFpbnNcLXdpdGhcLWNsb3RoOwor5Y+uID4gZXhob3J0XC1vclwtZW5qb2luXC1yZXBlYXRlZGx5Owor5oifID4gaGFsYmVyZFwtd2l0aFwtY3Jlc2NlbnRcLWJsYWRlOwor5YebID4gdG9cLXNoaXZlclwtd2l0aFwtY29sZFwtb3JcLWZlYXI7CivmoIsgPiBtYWluXC1iZWFtc1wtc3VwcG9ydGluZ1wtaG91c2U7Civpq6YgPiBmbG93aW5nXC1oYWlyXC1vZlwteW91bmdcLWNoaWxkOwor562dID4gc3RyaW5nZWRcLW11c2ljYWxcLWluc3RydW1lbnQ7CivkuJkgPiB0aGlyZFwtb2ZcLXRoZVwtaGVhdmVubHlcLXN0ZW1zOwor5rKCID4gcml2ZXJcLWluXC1zb3V0aGVhc3RcLXNoYW5kb25nOwor56yIID4gYmFtYm9vXC1ib3hcLXVzZWRcLWNhcnJ5XC1ib29rczsKK+eToiA+IGxhZGxlXC1tYWRlXC1mcm9tXC1kcmllZFwtZ291cmQ7CivlkZcgPiBmaW5hbFwtcGFydGljbGVcLW9mXC1hc3NlcnRpb247CivnsKcgPiByZWVkXC1vZlwtd29vZHdpbmRcLWluc3RydW1lbnQ7Civom58gPiBzY2FseVwtZHJhZ29uXC13aXRoXC1mb3VyXC1sZWdzOwor5pWVID4gYW5cLWltcGVyaWFsXC1vcmRlclwtb3JcLWRlY3JlZTsKK+ijnyA+IGFcLWNhc3NvY2tcLW9yXC1yb2JlXC1vZlwtYVwtbW9uazsKK+eitCA+IGNoaXBwZWRcLWVkZ2VcLW9mXC1hXC1jb250YWluZXI7CivnmLQgPiBtYWxhcmlhXC1wZXN0aWxlbnRpYWxcLXZhcG9yczsKK+e6tiA+IGdyZWVuXC1zaWxrXC10aHJlYWRcLW9yXC10YXNzZWw7CivnvaEgPiB0aGVcLW5hbWVcLW9mXC1hXC1jZXJ0YWluXC1zdGFyczsKK+eZuCA+IGxhc3RcLW9mXC10ZW5cLWNlbGVzdGlhbFwtc3RlbXM7CivmqYcgPiBhXC1zbGVkZ2VcLWZvclwtdHJhbnNwb3J0YXRpb247CivnmosgPiB0aGVcLWhpZ2hcLWxhbmRcLWFsb25nXC1hXC1yaXZlcjsKK+a9jSA+IGNvdW50eVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+a0mSA+IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLXNoYW5kb25nOwor542gID4gdG9cLWh1bnRcLWF0XC1uaWdodFwtYnlcLXRvcmNoZXM7CivpupIgPiBsZWdlbmRhcnlcLWF1c3BpY2lvdXNcLWFuaW1hbDsKK+ePqSA+IHRoZVwtdG9wXC1nZW1cLW9mXC10aGVcLXBlbmRhbnRzOwor6LClID4gdG9cLWNvbmZlclwtcG9zdGh1bW91c1wtdGl0bGVzOwor56erID4gZ2x1dGlub3VzXC12YXJpZXR5XC1vZlwtbWlsbGV0Owor56u9ID4gYW5jaWVudFwtd29vZHdpbmRcLWluc3RydW1lbnQ7CivltK4gPiBcKGVsZW1lbnRcLWluXC1tb3VudGFpblwtbmFtZXNcKTsKK+aEgCA+IHRvXC1jaGFuZ2VcLW9uZScnc1wtY291bnRlbmFuY2U7CivphKIgPiBuYW1lXC1vZlwtYVwtZGlzdHJpY3RcLWluXC1ob25hbjsKK+eZjSA+IHVuaGVhbHRoeVwtbWFya3NcLW9uXC10aGVcLXNraW47CivphJ4gPiBjb3VudHlcLWluXC16aGVqaWFuZ1wtcHJvdmluY2U7Civpm5IgPiBibGFja1wtaG9yc2VcLXdpdGhcLXdoaXRlXC1tYW5lOwor5peSID4gZnJpbmdlc1wtb2ZcLXBlYXJsc1wtb25cLWNyb3duczsKK+eQiiA+IGFcLXBsYWNlXC1pblwtZWFzdGVyblwtc2hhbmRvbmc7CivomqggPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJlZXRsZVwtY2FzaDsKK+avsyA+IGZpbmVcLWhhaXJcLW9yXC1mdXJcLW9uXC1hbmltYWxzOwor55ilID4gdG9cLXJlY292ZXJcLWZyb21cLWFueVwtZGlzZWFzZTsKK+a4kSA+IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLXNoYW5kb25nOwor5rWIID4gcml2ZXJcLWluXC1ndWFuZ2RvbmdcLXByb3ZpbmNlOwor5ZinID4gXChwaG9uZXRpY1wpXC1hc1wtaW5cLXB5cmltaWRpbmU7Civptb4gPiBhXC1iaXJkXC1yZXNlbWJsaW5nXC10aGVcLWNyYW5lOwor6a6oID4gZXBpbmVwaGVsdXNcLXNlcHRlbWZhc2NpYXR1czsKK+mjpiA+IHdlbGxcLWJvaWxlZFwtY29uZ2VlXC1vclwtZ3J1ZWw7Civpm4ogPiB0aGVcLWNyb3dcLW9mXC1hXC1tYWxlXC1waGVhc2FudDsKK+mauiA+IGFcLWJpcmRcLWZseWluZ1wtaGlnaFwtYW1iaXRpb247CivphrEgPiB0b1wtYnJld1wtZm9yXC10aGVcLXNlY29uZFwtdGltZTsKK+mGlyA+IHRvXC1icmV3XC1mb3JcLXRoZVwtc2Vjb25kXC10aW1lOwor6YWWID4gd2luZVwtd2l0aFwtYmlyZFwtcG9pc29uXC1hZGRlZDsKK+mEvyA+IGNvdW50eVwtaW5cLXhpbmppYW5nXC1wcm92aW5jZTsKK+mEqSA+IGNvdW50eVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+mEjSA+IGFcLXRvd25cLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7CivouZogPiB0cmVhZFwtdGhyb3VnaFwtbXVkXC1hbmRcLXdhdGVyOwor6KyaID4gdG9cLWNvbmZlclwtcG9zdGh1bW91c1wtdGl0bGVzOwor6KSYID4gY2VyZW1vbmlhbFwtZ293bnNcLW9mXC1hXC1xdWVlbjsKK+ifsCA+IHNtYWxsXC1zcGlkZXJcLXdpdGhcLWxvbmdcLWxlZ3M7Civom5UgPiB0aGVcLWNvbW1vblwtaW50ZXN0aW5hbFwtd29ybXM7CivogrcgPiBhcmVhXC1iZXR3ZWVuXC13YWlzdFwtYW5kXC1oaXBzOwor57a4ID4gZ3JlZW5cLXNpbGtcLXRocmVhZFwtb3JcLXRhc3NlbDsKK+e2nCA+IGFycmFuZ2VcLXRocmVhZHNcLWZvclwtd2VhdmluZzsKK+exhCA+IGFcLWJhc2tldFwtZm9yXC1jYXJyeWluZ1wtZWFydGg7Civnro8gPiBzdHJpbmdlZFwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+eujiA+IGFuY2llbnRcLXdvb2R3aW5kXC1pbnN0cnVtZW50Owor562OID4gdGhpblwtb3V0c2lkZVwtc2tpblwtb2ZcLWJhbWJvbzsKK+eepCA+IHRvXC1ibGlua1wtb3JcLXR3aXRjaFwtdGhlXC1leWVzOwor55qQID4gdGhlXC1oaWdoXC1sYW5kXC1hbG9uZ1wtYVwtcml2ZXI7Civmv7AgPiBjb3VudHlcLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7CivmvqAgPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1zaGFuZG9uZzsKK+a5niA+IHJpdmVyXC1pblwtZ3Vhbmdkb25nXC1wcm92aW5jZTsKK+a3oCA+IGx1eHVyaWFudFwtXChvZlwtd2F0ZXJcLXBsYW50c1wpOwor5rWwID4gYXR0ZW5kXC1cKG9mZmljaWFsXC1mdW5jdGlvbnNcKTsKK+azkSA+IHRoZVwtdml0cmVvdXNcLWdsYXplXC1vblwtY2hpbmE7CivmrqggPiB0b1wtb3BlblwtYXNcLWFuXC11bGNlclwtb3JcLXNvcmU7Civmno8gPiBhXC12YXJpZXR5XC1vZlwtZXZlcmdyZWVuXC10cmVlOwor5peIID4gZnJpbmdlc1wtb2ZcLXBlYXJsc1wtb25cLWNyb3duczsKK+aQhyA+IHRvXC1wcmVzc1wtZG93blwtd2l0aFwtdGhlXC1oYW5kOwor5by4ID4gYVwtYm93XC1zdHJldGNoZWRcLXRvXC10aGVcLWZ1bGw7Civlt6AgPiBzdHJlYW1zXC1ydW5uaW5nXC11bmRlcmdyb3VuZDsKK+W1myA+IGNvdW50eVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+W0syA+IGNvdW50eVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+W0mSA+IGt1bmx1blwtbW91bnRhaW5zXC1pblwtamlhbmdzdTsKK+W0mCA+IGt1bmx1blwtbW91bnRhaW5zXC1pblwtamlhbmdzdTsKK+W0kCA+IGt1bmx1blwtbW91bnRhaW5zXC1pblwtamlhbmdzdTsKK+WgsyA+IGxhbmRcLWFsbG90bWVudFwtZmV1ZGFsXC1ub2JsZTsKK+WZlSA+IHRvXC1zcGVha1wtZmFsc2VseVwtb3JcLXdyb25nbHk7CivlmYUgPiB0b1wtc3BlYWtcLWZhbHNlbHlcLW9yXC13cm9uZ2x5Owor5LipID4gdG9cLWpvaW5cLW9yXC1jb25uZWN0XC10aGVcLXZpbmU7CivkuJIgPiB0aGVcLXBlcmlvZFwtZnJvbVwtMVwtdG9cLTNcLWFcLm1cLjsKK+S1hSA+IHRvXC1leHRyYWN0XC1ieVwtYXBwbHlpbmdcLWhlYXQ7CivktLMgPiBkaXN0aWxsZXInJ3NcLWdyYWluc1wtb3JcLXllYXN0Owor5LStID4gZGlzdGlsbGVyJydzXC1ncmFpbnNcLW9yXC15ZWFzdDsKK+SzniA+IGJpcmRzXC1mbHlpbmdcLWFsbFwtZGlyZWN0aW9uczsKK+SziiA+IGFcLXdpbGRcLWR1Y2tcLWxpa2VcLXdhdGVyXC1iaXJkOwor5LODID4gYVwta2luZFwtb2ZcLXBob2VuaXhcLWxpa2VcLWJpcmQ7Civks4EgPiBhXC13aWxkXC1kdWNrXC1saWtlXC13YXRlclwtYmlyZDsKK+SqtyA+IHRvXC10b2lsXC1vclwtbGFib3JcLXNlZHVsb3VzbHk7CivkqocgPiBjdXNoaW9uZWRcLXNlYXRcLW9uXC1hXC12ZWhpY2xlOwor5Km/ID4gYVwtYmlnXC1kcnVtXC11c2VkXC1pblwtdGhlXC1hcm15Owor5KeYID4gYVwtbG93XC13YWxsXC1vblwtdGhlXC1yb2FkXC1zaWRlOwor5KayID4gZWF2ZXNcLW9mXC1hXC1hbmNlc3RyYWxcLXRlbXBsZTsKK+SkuyA+IGhlYXZ5XC1pcm9uXC1wYXJ0XC1vZlwtYVwtcGxvdWdoOwor5KOyID4gdG9cLWhlYXRcLXRoZVwtd2luZVwtb3ZlclwtbmlnaHQ7Civkoq8gPiB0b1wtY2hvb3NlXC1vclwtc2VsZWN0XC1jYXJlZnVsOwor5KCLID4gYmVsbFwtc2hhcGVkXC13aXRoXC1sYXJnZVwtYmFzZTsKK+SfriA+IHRvXC1jcmF3bFwtb25cLWhhbmRzXC1hbmRcLWtuZWVzOwor5Jy4ID4gc21hbGxcLXBpZWNlc1wtb2ZcLWJlYW5cLXN0YWxrczsKK+SchyA+IHRvXC1zcGVha1wtbm90XC1pblwtYVwtY2xlYXJcLXdheTsKK+SaoyA+IGNyb29rZWRcLWhvcm5zXC1vZlwtdGhlXC1hbmltYWw7CivkmpwgPiBjYXR0bGVcLXdpdGhcLWNyb3Nzd2lzZVwtaG9ybnM7CivkmaMgPiByYWdnZWRcLWdhcm1lbnRzXC1vclwtY2xvdGhpbmc7CivkmZUgPiBjbG90aGVzXC10aGF0XC1oYXZlXC1ub1wtbGluaW5nOwor5JmUID4gY2xvdGhlc1wtbWFkZVwtb2ZcLXBvb3JcLWZhYnJpYzsKK+SZkyA+IHRoZVwtbG93ZXJcLXBhcnRcLW9mXC1hXC1nYXJtZW50Owor5Ji5ID4gY2xvdGhlc1wtdGhhdFwtaGF2ZVwtbm9cLWxpbmluZzsKK+SYpSA+IHRoZVwtZnJvbnRcLW9mXC1hXC1jaGluZXNlXC1nb3duOwor5JijID4gY2xvdGhlc1wtdGhhdFwtaGF2ZVwtbm9cLWxpbmluZzsKK+SYgSA+IGFcLWJsdWVcLWdyZWVuXC1jb2xvcmVkXC1jaWNhZGE7Civkl7UgPiBhXC1kaXNlYXNlXC1hdHRhY2tlZFwtc2lsa3dvcm07Civkla4gPiBmbG93ZXJcLW9mXC10aGVcLWNocnlzYW50aGVtdW07CivklaYgPiBmbG93ZXJcLW9mXC10aGVcLWNocnlzYW50aGVtdW07CivklKUgPiBjb21tb25cLXZhcmlldHlcLW9mXC1hcnRlbWlzaWE7CivklJ8gPiBzaGFrZVwtYW5kXC13YXZlXC1vZlwtdGhlXC1ncmFzczsKK+SQvCA+IHRoaW5cLW1lbWJyYW5lXC1vZlwtdGhlXC10aHJvYXQ7CivkkK8gPiB1Z2x5XC1hcHBlYXJhbmNlXC1vZlwtYVwtcGVyc29uOwor5JCRID4gdGhpblwtY3V0XC1vZlwtdGhlXC1zbGljZWRcLW1lYXQ7CivkjbogPiBhXC1sZWdlbmRhcnlcLWdvYXRcLWxpa2VcLWJlYXN0Owor5Iy8ID4gYVwta2luZFwtb2ZcLWZpbmVcLXNpbGtcLWZhYnJpY3M7CivkjIQgPiBhXC1yb3BlXC1mb3JcLWRyYXdpbmdcLXVwXC13YXRlcjsKK+SLgSA+IGFcLXJvcGVcLWZvclwtZHJhd2luZ1wtdXBcLXdhdGVyOwor5IqeID4gdG9cLXJvbGxcLXJvdW5kXC13aXRoXC10aGVcLWhhbmQ7CivkipUgPiB3ZWxsXC1ib2lsZWRcLWNvbmdlZVwtb3JcLWdydWVsOwor5IqIID4gZGlzdGlsbGVyJydzXC1ncmFpbnNcLW9yXC15ZWFzdDsKK+SJuiA+IGRldGVyaW9yYXRlZFwtYW5kXC1iZWNvbWVcLXJlZDsKK+SJuSA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5Im4ID4gc2xpcHNcLW9mXC1iYW1ib29cLWZvclwtd3JpdGluZzsKK+SJsyA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5ImtID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiasgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SJpiA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5ImhID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiaAgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SJmiA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5ImZID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiY8gPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SJhiA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5ImEID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiYEgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SIvSA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5Ii8ID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiLIgPiBhXC1iYW1ib29cLWJhc2tldFwtZm9yXC1maXNoaW5nOwor5IivID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiK0gPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SIoyA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5IiiID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiKEgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SInSA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5IiYID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiJcgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SIliA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5IiPID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiI0gPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SIjCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5IiLID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287CivkiIogPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SHuiA+IGJlYW5zXC1hbmRcLXBlYXNcLWNvbGxlY3RpdmVseTsKK+SHtSA+IG9uZVwtb2ZcLXRoZVwtd2luZFwtaW5zdHJ1bWVudHM7Civkh6ogPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SHniA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtYmFtYm9vOwor5IebID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1iYW1ib287Civkh5kgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWJhbWJvbzsKK+SFqiA+IGRpc2Vhc2VcLW9mXC10aGVcLXByaXZhdGVcLXBhcnQ7CivkhLAgPiBmb3J0eVwtYnVuZGxlc1wtb2ZcLXJpY2VcLXBsYW50Owor5IOHID4gaW5rXC1mb3JcLWltcHJpbnRpbmdcLW9mXC1zZWFsczsKK+SAkSA+IHRvXC1nb3VnZVwtb3V0XC1hblwtZXllXC1vclwtZXllczsKK+O/gCA+IHVuaGVhbHRoeVwtbWFya3NcLW9uXC10aGVcLXNraW47CivjvY4gPiB0aGVcLXByb2Z1bmRpdHlcLW9mXC10aGVcLWhhcmVtOwor47ygID4gYVwtY3JvY2tcLXdpdGhcLW5hcnJvd1wtb3BlbmluZzsKK+O6rCA+IGFcLWxhcmdlXC1waWVjZVwtb2ZcLWphZGVcLXN0b25lOwor47qSID4gYmFya2luZ1wtb2ZcLWFcLWZyaWdodGVuZWRcLWRvZzsKK+O5liA+IHRvXC1mZWVkXC1hbmltYWxzXC13aXRoXC1ncmFpbnM7CivjuJIgPiB0b1wtYWJzdXJkXC1wdXJzdWl0XC1vclwtZGVzaXJlOwor466AID4gdG9vbFwtdG9cLWNsZWFyXC1vdXRcLXRoZVwtd2F0ZXI7CivjrZUgPiBhXC1ib2FyZFwtZm9yXC1jYXJyeWluZ1wtdGhpbmdzOwor46mbID4gdG9cLXJvbGxcLXJvdW5kXC13aXRoXC10aGVcLWhhbmQ7CivjqYYgPiB0b1wtYmVcLWluXC1mdWxsXC1wb3NzZXNzaW9uXC1vZjsKK+OoqyA+IHRvXC1iZVwtaW5cLWZ1bGxcLXBvc3Nlc3Npb25cLW9mOwor76eVID4ga3VubHVuXC1tb3VudGFpbnNcLWluXC1qaWFuZ3N1Owor46eVID4gdG9cLWZlZWxcLW9yXC10b3VjaFwtd2l0aFwtaGFuZHM7Civjp4IgPiBhXC1jYXZlXC1hXC1ob2xkXC1pblwtdGhlXC1ncm91bmQ7CivjppAgPiBhXC1zdHJhaWdodGZvcndhcmRcLWNoYXJhY3RlcjsKK+OltCA+IGRvXC1ub3RcLWNhcmVcLWFib3V0XC1zb21ldGhpbmc7CivvpJogPiB3aGl0ZVwtaG9yc2VcLXdpdGhcLWJsYWNrXC1tYW5lOwor46KsID4gYVwtYm93XC1zdHJldGNoZWRcLXRvXC10aGVcLWZ1bGw7CivjobUgPiByb29mXC1vZlwtdGhlXC1ob3VzZVwtY29ubmVjdGVkOwor46CfID4gYVwtbW91bnRhaW5cLWluXC1hbmNpZW50XC10aW1lczsKK+ObvSA+IHRvXC13YWxrXC1zbG93bHlcLWxpa2VcLWFcLXdvbWFuOwor45uuID4gd2lmZVwtb2ZcLW9uZScnc1wtZWxkZXJcLWJyb3RoZXI7Civjk4ggPiBzb3VuZFwtb2ZcLWZseWluZ1wtb3JcLXNwZWVkaW5nOwor45KrID4gY2hva2VkXC1hbmRcLXVuYWJsZVwtdG9cLWJyZWF0aDsKK+OSliA+IHRoZVwtcm9vdFwtc3RvY2tcLW9mXC10aGVcLWxvdHVzOwor55WmID4gc2VjdGlvbnNcLWluXC12ZWdldGFibGVcLWZhcm07CivnlLogPiByYWlzZWRcLXBhdGhcLWJldHdlZW5cLWZpZWxkczsKK+WbgSA+IG1vdmVcLWxpcHNcLWFzXC13aGVuXC1zcGVha2luZzsKK+S8piA+IG5vcm1hbFwtaHVtYW5cLXJlbGF0aW9uc2hpcHM7CivlmJsgPiBmaW5hbFwtZXhjbGFtYXRvcnlcLXBhcnRpY2xlOwor6JCoID4gYnVkZGhpc3RcLWdvZHNcLW9yXC1pbW1vcnRhbHM7CivmoZAgPiBuYW1lXC1hcHBsaWVkXC12YXJpb3VzXC10cmVlczsKK+iSgiA+IHBlZHVuY2xlXC1vclwtc3RlbVwtb2ZcLXBsYW50czsKK+e0uiA+IGRhcmtcLWJsdWVcLW9yXC1yZWRkaXNoXC1jb2xvcjsKK+ajtSA+IG51bWVyYXJ5XC1hZGp1bmN0XC1mb3JcLXRyZWVzOwor5qCqID4gbnVtZXJhcnlcLWFkanVuY3RcLWZvclwtdHJlZXM7Civlk4kgPiBmaW5hbFwtZXhjbGFtYXRvcnlcLXBhcnRpY2xlOwor5oaLID4gdG9cLXN1cHByZXNzXC1pbm5lclwtZmVlbGluZ3M7CivlrZwgPiBiZVwtYXNcLWRpbGlnZW50XC1hc1wtcG9zc2libGU7CivnsrEgPiBiZXR0ZXJcLXZhcmlldGllc1wtb2ZcLW1pbGxldDsKK+WzkiA+IG1vdW50YWluXC1pblwtZ2Fuc3VcLXByb3ZpbmNlOwor5qaoID4gdG9cLXByZXNzXC1vclwtZXh0cmFjdFwtanVpY2VzOwor5ZerID4gbW92ZVwtbGlwc1wtYXNcLXdoZW5cLXNwZWFraW5nOwor6YSxID4gY291bnR5XC1hbmRcLWxha2VcLWluXC1qaWFuZ3hpOwor6I+gID4gc3BpbmFjaFwtYW5kXC1zaW1pbGFyXC1ncmVlbnM7Civmt54gPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1qaWFuZ3N1Owor5reEID4gcml2ZXJcLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civoj48gPiByaXZlclwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+aCsSA+IHRvXC1iZVwtZGVzaXJvdXNcLW9mXC1zcGVha2luZzsKK+a8ryA+IHJpdmVyXC1pblwtbm9ydGhlcm5cLXNoYW5kb25nOwor6JWZID4gc3BlY2llc1wtb2ZcLWZyYWdyYW50XC1vcmNoaWQ7Civmu4EgPiBkaXN0cmljdFwtaW5cLWFuaHVpXC1wcm92aW5jZTsKK+eLgSA+IGFcLXRyaWJlXC1vZlwtc2N5dGhpYW5cLW5vbWFkczsKK+mFoiA+IHRvYXN0XC1vbmUnJ3NcLWhvc3RcLXdpdGhcLXdpbmU7Civoob8gPiBjb2xsYXJcLW9yXC1sYXBlbFwtb2ZcLWdhcm1lbnQ7Civltp0gPiBwYXRoXC1sZWFkaW5nXC11cFwtYVwtbW91bnRhaW47Civml4MgPiBzaWxrXC1iYW5uZXJcLXdpdGhcLWJlbnRcLXBvbGU7CivpvZEgPiBicmVha1wtb3JcLXNtYXNoXC1pbnRvXC1waWVjZXM7Civnu4AgPiBkYXJrXC1ibHVlXC1vclwtcmVkZGlzaFwtY29sb3I7CivohJggPiBpbnRlcm5hbFwtY2F2aXR5XC1vZlwtc3RvbWFjaDsKK+mVkiA+IG1lYXN1cmVcLW9mXC13ZWlnaHRcLWZvclwtZ29sZDsKK+ecrSA+IGV2aWxcLWxvb2tcLW9mXC1kZWVwXC1zZXRcLWV5ZXM7CivplJYgPiB0aGVcLWNvbG9yXC1vZlwtdGhlXC1hXC1taW5lcmFsOwor6YKZID4gbW91bnRhaW5cLWluXC1oZW5hblwtcHJvdmluY2U7CivloY0gPiByYWlzZWRcLXBhdGhcLWJldHdlZW5cLWZpZWxkczsKK+aVqyA+IGFuY2llbnRcLW11c2ljYWxcLWluc3RydW1lbnQ7Civms7ogPiByaXZlclwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+iQkSA+IGdyYXNzXC11c2VkXC1mb3JcLW1ha2luZ1wtbWF0czsKK+inryA+IHdpbmVcLWdvYmxldFwtbWFkZVwtZnJvbVwtaG9ybjsKK+iIoyA+IHRvXC1tb29yXC1hXC1ib2F0XC10b1wtdGhlXC1iYW5rOwor6b2PID4gYnJlYWtcLW9yXC1zbWFzaFwtaW50b1wtcGllY2VzOwor6aa1ID4gaG9yc2VcLXdpdGhcLXdoaXRlXC1iYWNrXC1sZWdzOwor6aOjID4gZGlzcGxheVwtZm9vZFwtZm9yXC1zaG93XC1vbmx5Owor6Z+yID4gYnJlYWtcLW9yXC1zbWFzaFwtaW50b1wtcGllY2VzOwor6ZeSID4gdXBwZXJcLXN0b3J5XC1kb29yXC1vclwtd2luZG93Owor6Y6wID4gbWVhc3VyZVwtb2ZcLXdlaWdodFwtZm9yXC1nb2xkOwor6YqBID4gYVwtd2VpZ2h0XC1vZlwtdGhpcnR5XC1jYXR0aWNzOwor6YaKID4gdG9cLXBvdXJcLXdpbmVcLWluXC1hXC1saWJhdGlvbjsKK+mDvyA+IGNvdW50eVwtaW5cLXNoYWFueGlcLXByb3ZpbmNlOwor6YOzID4gc3RhdGVcLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civpg6AgPiBwbGFjZVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+mDmiA+IHRvd25zXC1pblwtc2hhbmRvbmdcLXByb3ZpbmNlOwor6YOVID4gc3RhdGVcLWluXC1zaGFuZG9uZ1wtcHJvdmluY2U7Civpg4ggPiBwbGFjZVwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+mCoCA+IGNvdW50eVwtaW5cLXNoYWFueGlcLXByb3ZpbmNlOwor6LykID4gYVwtcGFsbFwtdG9cLWNvdmVyXC10aGVcLWhlYXJzZTsKK+i4kiA+IHRvXC1zbGlwXC1hbmRcLXNwcmFpblwtYVwtYmxpbWI7Civop7YgPiB3aW5lXC1nb2JsZXRcLW1hZGVcLWZyb21cLWhvcm47CivoppAgPiBhXC1zbGVlcFwtdG9cLXJlYWxpemVcLXRvXC1mZWVsOwor6JmhID4gc3VwcG9ydFwtc3RydWN0dXJlXC1mb3JcLWJlbGw7Civolr4gPiBsdXh1cmlhbnRcLWdyb3d0aFwtb2ZcLWZsb3dlcjsKK+iUlSA+IHBlZHVuY2xlXC1vclwtc3RlbVwtb2ZcLXBsYW50czsKK+iMiCA+IGFcLXBsYW50XC15aWVsZGluZ1wtYVwtcmVkXC1keWU7CivoiaQgPiB0b1wtbW9vclwtYVwtYm9hdFwtdG9cLXRoZVwtYmFuazsKK+iGhiA+IHRoZVwtY29ycFwtb2ZcLWFcLWJpcmRcLW9yXC1mb3dsOwor572tID4gZHJhZ1wtbmV0XC1tYWRlXC1vZlwtZmluZVwtbWVzaDsKK+e9jyA+IGVhcnRoZW5cLXN0YW5kXC1mb3JcLXdpbmVcLWp1ZzsKK+e9jSA+IGxhcmdlXC1lYXJ0aGVud2FyZVwtd2luZVwtamFyOwor57m4ID4gaGVtXC1vclwtYm9yZGVyXC1vZlwtYVwtZ2FybWVudDsKK+evnyA+IGx1eHVyaWFudFwtZ3Jvd3RoXC1vZlwtYmFtYm9vOwor56qGID4gdG9cLXB1dFwtYVwtY29mZmluXC1pblwtYVwtZ3JhdmU7CivnpbIgPiBvbWlub3VzXC1vclwtc2luaXN0ZXJcLXNwaXJpdDsKK+eZlSA+IGxvc3NcLW9mXC10aGVcLXNlbnNlXC1vZlwtc21lbGw7CivnlbcgPiByYWlzZWRcLXBhdGhcLWJldHdlZW5cLWZpZWxkczsKK+eUvCA+IHJhaXNlZFwtcGF0aFwtYmV0d2VlblwtZmllbGRzOwor55KIID4gYW5jaWVudFwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+ePmyA+IHF1aWNrbHlcLWRldGVyaW9yYXRpbmdcLWphZGU7Civmv7wgPiByaXZlclwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+a+tyA+IHdhdGVyXC1vdmVyZmxvd2luZ1wtZGlmZnVzZWQ7CivmuK4gPiByaXZlclwtaW5cLXNoYW5kb25nXC1wcm92aW5jZTsKK+avqSA+IGFcLWxlYXRoZXJcLWJhbGxcLWZvclwta2lja2luZzsKK+amgyA+IHJhaXNlZFwtcGF0aFwtYmV0d2VlblwtZmllbGRzOwor5o+5ID4gY2FycnlcLXRoaW5nc1wtb25cLW9uZScnc1wtYmFjazsKK+aPgSA+IHNvdW5kXC1vZlwtc2V0dGluZ1wtdXBcLWFcLWtvdG87Civls50gPiBtb3VudGFpblwtaW5cLWdhbnN1XC1wcm92aW5jZTsKK+WqpyA+IG15dGhvbG9naWNhbFwtc25haWxcLWdvZGRlc3M7Civlm4kgPiBleGNsYW1hdG9yeVwtZmluYWxcLXBhcnRpY2xlOwor5Zi3ID4gdGhlXC1yb2FyaW5nXC1vZlwtd2lsZFwtYmVhc3RzOwor5ZiQID4gZmluYWxcLWV4Y2xhbWF0b3J5XC1wYXJ0aWNsZTsKK+WJniA+IGNhcnZpbmdcLW9yXC1lbmdyYXZpbmdcLWtuaWZlOwor5YaPID4gYWJ1dGlsb25cLWF2aWNlbm5hZVwtXChwbGFudFwpOwor5YCrID4gbm9ybWFsXC1odW1hblwtcmVsYXRpb25zaGlwczsKK+S5qyA+IHVzZWRcLWluXC1rb3JlYW5cLXBsYWNlXC1uYW1lczsKK+S1hiA+IGdyYWluc1wtZnJvbVwtdGhlXC1kaXN0aWxsZXJ5Owor5LS/ID4gZ3JhaW5zXC1mcm9tXC10aGVcLWRpc3RpbGxlcnk7Civksq8gPiBhXC1raW5kXC1vZlwtYmxhY2tcLXNtYWxsXC1iaXJkOwor5K+TID4gdGhlXC1oZWFkXC1ib25lXC1vZlwtbGl2ZXN0b2NrOwor5K62ID4gZmxvY2tcLW9mXC1ob3JzZXNcLXN0YW1wZWRpbmc7CivkrqMgPiBhXC15ZWxsb3dcLXdpdGhcLWFcLXdoaXRlXC10YWlsOwor5KyxID4gY29hcnNlXC1ncmFpbnNcLXN1Y2hcLWFzXC1jb3JuOwor5KmyID4gYVwtdG9vbFwtdXNlZFwtdG9cLWN1dFwtbGVhdGhlcjsKK+SpmiA+IHRvXC1tZW5kXC10aGVcLXNvbGVzXC1vZlwtc2hvZXM7CivkqZggPiB0b1wtbWVuZFwtdGhlXC1zb2xlc1wtb2ZcLXNob2VzOwor5KGmID4gdGhlXC1lbXB0eVwtc3BhY2VcLW9mXC1hXC13aGVlbDsKK+SgiSA+IHRvXC1ydW5cLWF3YXlcLW9yXC1lc2NhcGVcLWZyb207CivknpEgPiBhXC1yZWRcLXN3ZWxsaW5nXC1vZlwtdGhlXC1za2luOwor5JuvID4gdGhlXC1yZWFzb25hYmxlXC1vZlwtc3BlZWtpbmc7CivkloUgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JW/ID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SVvCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklbYgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JW1ID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SVsyA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklbEgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JWtID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SVmyA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklZcgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JWVID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SVlCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklZMgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JWSID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SVjSA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklYogPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JWIID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SVhyA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklYUgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JWAID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SUuyA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklLggPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JS2ID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SUtCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklLIgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JSxID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SUsCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklK4gPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JStID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SUqiA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklKEgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JSdID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SUmSA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklJQgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JSSID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SUjiA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklIwgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JSFID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC10cmVlczsKK+SUhCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivklIEgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JO9ID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+STvCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7Civkk7ogPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JOzID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SToyA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7Civkk6IgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JOfID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+STkyA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7Civkk5AgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JOOID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+STiiA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7Civkk4kgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JOCID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SStSA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivkkrQgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JKxID4gdHdpZ3NcLW9mXC1oZW1wXC11c2VkXC1mb1wtZnVlbDsKK+SSqiA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivkkqkgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JKkID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SSoSA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7Civkkp8gPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JKeID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SSnCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivkkpsgPiBuYW1lXC1vZlwtYVwtdmFyaWV0eVwtb2ZcLWdyYXNzOwor5JKaID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFzczsKK+SSlCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3Jhc3M7CivkjrcgPiBhblwtb2xkXC1tYW5cLXdpdGhcLXdoaXRlXC1oYWlyOwor5IygID4gaG9sZFwtb25cLXRvXC1vbmUnJ3NcLW93blwtdmlld3M7Civki4AgPiBzaG9lc1wtbWFkZVwtb2ZcLWhlbXBcLW9yXC1oYWlyOwor5IquID4gbmFtZVwtb2ZcLWFcLXZhcmlldHlcLW9mXC1ncmFpbjsKK+SKrCA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZ3JhaW47CivkiYIgPiBhXC1iYXNrZXRcLWZvclwtZWFydGhcLW9yXC1zb2lsOwor5IeWID4gcm9wZVwtbWFkZVwtb2ZcLWJhbWJvb1wtc3RyaXBzOwor5IaAID4gdG9cLWNvcnJ1cHRcLW9yXC1iZVwtY29ycnVwdGVkOwor5IW+ID4gc3RhcnRpbmdcLXRvXC1wdXRcLWZvcnRoXC1lYXJzOwor5IWsID4gc21hbGxcLWJ1bmRsZVwtb2ZcLXJpY2VcLXBsYW50Owor5IGOID4gdG9cLW1ha2VcLWFcLWNsb3NlXC1pbnNwZWN0aW9uOwor5ICKID4gYVwta2luZFwtb2ZcLXdhdGVyXC1jb250YWluZXJzOwor47ypID4gY29uY2F2ZVwtY2hhbm5lbHNcLW9mXC10aWxpbmc7CivjuqAgPiBhXC1ibGFja1wtYXBlXC13aXRoXC1sb25nXC10YWlsOwor47qVID4gdGhlXC1maWdodGluZ1wtc291bmRcLW9mXC1kb2dzOwor47maID4gc291bmRcLW9mXC1jYWxsaW5nXC10b1wtYVwtY2FsZjsKK+O5mSA+IHNvdW5kXC1vZlwtY2FsbGluZ1wtdG9cLWFcLWNhbGY7Civjt7YgPiB0b1wtZHJ5XC1vclwtd2FybVwtbmVhclwtYVwtZmlyZTsKK+O3gyA+IGZpcmVcLWJ1cm5zXC1mb3JcLWFcLWxvbmdcLXRpbWU7CivjtJQgPiB0aGVcLW5vaXNlXC1vZlwtZmxvd2luZ1wtd2F0ZXI7CivjtIsgPiBkZWVwXC1hbmRcLWNsZWFyXC1cLXRvXC11cmluYXRlOwor47OnID4gdGhlXC13YXRlclwtZmxvd2luZ1wtZnJvbVwtXC5cLlwuOwor47G9ID4gdG9cLWhpdFwtb3JcLXRvXC1zdHJpa2VoZWF2aWx5Owor47G7ID4gZGlzZWFzZXNcLW9mXC1kdW1iXC1jcmVhdHVyZXM7CivjsaEgPiB0aGVcLXNvdWxcLW91dFwtb2ZcLW9uZScnc1wtYm9keTsKK+OxlCA+IGFcLXNtYWxsXC1xdWFudGl0eVwtb3JcLW51bWJlcjsKK+OvnyA+IGZvb3RcLW9mXC1hXC1oaWxsXC1vclwtbW91bnRhaW47Civjra4gPiBhXC1raW5kXC1vZlwtbGlxdW9yXC1jb250YWluZXI7CivvqIwgPiBkdXBsaWNhdGVcLW9mXC1iaWdcLWZpdmVcLWE0NjE7Civvp5QgPiBub3JtYWxcLWh1bWFuXC1yZWxhdGlvbnNoaXBzOwor76eGID4gYW5jaWVudFwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+OmgyA+IHBlcmZlY3RcLXBlcnNvbmFsXC1jaGFyYWN0ZXI7CivjpbEgPiB0b1wtYmVcLWRlc2lyb3VzXC1vZlwtc3BlYWtpbmc7CivjpY0gPiB0b1wtYmVhclwtamVhbG91c1wtaGF0cmVkXC1mb3I7CivjpKwgPiBmdWxsXC1vZlwtYW5nZXJcLWFuZFwtdmV4YXRpb247CivjpI4gPiBhXC1tb2RlbFwtb3JcLXR5cGljYWxcLWV4YW1wbGU7CivjpIQgPiByYWdpbmdcLWFuaW1vc2l0eVwtb3JcLWhhdHJlZDsKK+OjpyA+IHRoZVwtc3VjY2Vzc2lvblwtaW5cLWFcLWZhbWlseTsKK+OjoyA+IHRvXC13YWxrXC1pblwtYW5cLXVuc3RlYWR5XC13YXk7CivjorggPiBkZXZpY2VcLWZvclwtcmVndWxhdGluZ1wtYm93czsKK+OitiA+IGRldmljZVwtZm9yXC1yZWd1bGF0aW5nXC1ib3dzOwor46KSID4gYW5cLWFsbW9zdFwtY29sbGFwc2luZ1wtaG91c2U7CivjnKogPiBuYW1lXC1vZlwtYVwtZmFtaWx5XC1vclwtYVwtY2xhbjsKK+OclSA+IHJlbGF0aXZlc1wtdGhyb3VnaFwtbWFycmlhZ2U7Civjm7IgPiB0aGVcLWhhaXJcLW9uXC10aGVcLWh1bWFuXC1oZWFkOwor45q/ID4gYVwtZ29kZGVzcycnc1wtbmFtZVwtaW5cLWxlZ2VuZDsKK+OZoSA+IGFcLWtpbmRcLW9mXC1lYXRhYmxlXC1tdXNocm9vbTsKK+OYuSA+IHRvXC1zcHJlYWRcLXNvaWxcLW9uXC10aGVcLXJvYWQ7CivjmKQgPiBjaXJjbGVcLW9mXC10aGVcLW1vdmluZ1wtd2F0ZXI7CivjlqggPiBpbmRpc3RpbmN0XC1uYXNhbFwtdXR0ZXJhbmNlOwor45K9ID4gYVwta2luZFwtb2ZcLWNhcFwtZm9yXC1jaGlsZHJlbjsKK+OQliA+IGFcLXRyYW5zbGF0ZWRcLW5hbWVcLW9mXC1pbmRpYTsKK+WxiiA+IG51bWVyYXJ5XC1hZGp1bmN0XC1mb3JcLXRpbWU7CivlsYYgPiBudW1lcmFyeVwtYWRqdW5jdFwtZm9yXC10aW1lOwor6LCBID4gd2hvXD9cLXdob21cP1wtd2hvc2VcP1wtYW55b25lXD87CivoqrAgPiB3aG9cP1wtd2hvbVw/XC13aG9zZVw/XC1hbnlvbmVcPzsKK+mYvyA+IHByZWZpeFwtZm9yXC1wZW9wbGUnJ3NcLW5hbWVzOwor6I6iID4gcG9kc1wtb2ZcLWxlZ3VtaW5vdXNcLXBsYW50czsKK+eLhCA+IHRyaWJlXC1mcm9tXC1ub3J0aGVyblwtY2hpbmE7CivnubAgPiB0b1wtcmVlbFwtc2lsa1wtZnJvbVwtY29jb29uczsKK+a8kyA+IHJpdmVyXC1pblwtZ3Vhbmd4aVwtcHJvdmluY2U7CivlkosgPiBxdWVzdGlvblwtZm9ybWluZ1wtcGFydGljbGU7Civpup8gPiBmZW1hbGVcLW9mXC1jaGluZXNlXC11bmljb3JuOwor5ritID4gbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtc2hhbnhpOwor6IqcID4gbHV4dXJpb3VzXC1ncm93dGhcLW9mXC13ZWVkczsKK+e7jiA+IHRvXC11bnJhdmVsXC1vclwtdW5yZWVsXC1zaWxrOwor55KQID4gYmVhdXRpZnVsXC12YXJpZXR5XC1vZlwtamFkZTsKK+mftiA+IG11c2ljXC1vZlwtdGhlXC1lbXBlcm9yXC1zaHVuOwor6ayfID4gZHJlc3NcLWhhaXJcLWluXC1jb2lsZWRcLWtub3Q7CivnvYIgPiBsb25nXC1uZWNrZWRcLWphclwtb3JcLWJvdHRsZTsKK+mdsyA+IHN0cmFwXC1vblwtYVwtaG9yc2UnJ3NcLWJyZWFzdDsKK+a3piA+IHJpdmVyXC1pblwtamlhbmd4aVwtcHJvdmluY2U7CivmkKEgPiB0b1wtcHVzaFwtb3Zlclwtb3JcLXB1c2hcLWJhY2s7Civoia4gPiBzZXZlbnRoXC1vZlwtZWlnaHRcLWRpYWdyYW1zOwor5rmfID4gcml2ZXJcLWluXC1xaW5naGFpXC1wcm92aW5jZTsKK+azuCA+IHJpdmVyXC1pblwtamlhbmd4aVwtcHJvdmluY2U7CivojZogPiBwb2RzXC1vZlwtbGVndW1pbm91c1wtcGxhbnRzOwor54yxID4gYVwtbW9ua2V5XC13aXRoXC15ZWxsb3dcLWhhaXI7CivmtqogPiByaXZlclwtaW5cLXNpY2h1YW5cLXByb3ZpbmNlOwor5LqzID4gbmFtZVwtb2ZcLWRpc3RyaWN0XC1pblwtYW5odWk7CivolLogPiBydXNoXC11c2VkXC1mb3JcLW1ha2luZ1wtbWF0czsKK+eQrCA+IHRoZVwtdmlydHVlXC1vZlwtYVwtZ2VudGxlbWFuOwor5rKpID4gbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtc2hhbnhpOwor54yXID4gZXhjbGFtYXRpb25cLW9mXC1hZG1pcmF0aW9uOwor6byZID4gZHJ1bVwtY2FycmllZFwtb25cLWhvcnNlYmFjazsKK+iVsiA+IHZhcmlldHlcLW9mXC1hcnRlbWlzaWFcLXNlZWs7Civnk54gPiB5b3VuZ1wtbWVsb25zXC1qdXN0XC1mb3JtaW5nOwor6L6BID4gY2FydFwtd2hlZWxcLXdpdGhcLW5vXC1zcG9rZXM7CivphYYgPiBuYW1lXC1vZlwtemhvdVwtcGVyaW9kXC1zdGF0ZTsKK+m6kCA+IGZlbWFsZVwtb2ZcLWNoaW5lc2VcLXVuaWNvcm47CivpsLwgPiB0aGVcLXdlYXRoZXJcLW9yXC1kb2pvXC1sb2FjaDsKK+mflCA+IGFcLXdyYXBwZXJcLW9yXC1jYXNlXC1mb3JcLWJvdzsKK+mZlyA+IGFcLXN0ZWVwXC1oaWxsXC5cLXByZWNpcGl0b3VzOwor6Y++ID4gdGhlXC10cmlnZ2VyXC1vZlwtYVwtY3Jvc3Nib3c7CivphKAgPiBjb3VudHlcLWluXC1zaGFueGlcLXByb3ZpbmNlOwor6YScID4gY291bnR5XC1pblwtc2hhbnhpXC1wcm92aW5jZTsKK+mEjiA+IGFcLXBsYWNlXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor6YODID4gY291bnR5XC1pblwtc2hhbnhpXC1wcm92aW5jZTsKK+i8hyA+IGNhcnRcLXdoZWVsXC13aXRoXC1ub1wtc3Bva2VzOwor6Ke3ID4gdG9cLXByb2Nlc3NcLW9yXC1jYXJ2ZVwtaG9ybnM7CivonbAgPiB2aXBlcmFcLXJ1c3NlbGlpXC1zaWFtZW5zaXM7CivomIQgPiB2YXJpZXR5XC1vZlwtYXJ0ZW1pc2lhXC1zZWVrOwor6JWqID4gbHV4dXJpb3VzXC1ncm93dGhcLW9mXC13ZWVkczsKK+iRtiA+IGRyYWJhXC1uZW1lcm9zYVwtYmViZVwtY2FycGE7CivoipQgPiBhXC1nZW5lcmFsXC10ZXJtXC1mb3JcLXBsYW50czsKK+iGpSA+IGVnZ3NcLW9mXC1iaXJkc1wtb3JcLXJlcHRpbGVzOwor572MID4gbG9uZ1wtbmVja2VkXC1qYXJcLW9yXC1ib3R0bGU7CivnvYMgPiBsb25nXC1uZWNrZWRcLWphclwtb3JcLWJvdHRsZTsKK+e6kSA+IHRvXC1zb2Z0ZW5cLWhlbXBcLWJ5XC1ib2lsaW5nOwor57m5ID4gdG9cLXVucmF2ZWxcLW9yXC11bnJlZWxcLXNpbGs7CivnsakgPiBiYW1ib29cLWNvbnRhaW5lclwtZm9yXC1mb29kOwor57GdID4gYVwtdHViZVwtdG9cLWhvbGRcLWNob3BzdGlja3M7CivnrL4gPiBiYW1ib29cLWNvbnRhaW5lclwtZm9yXC1mb29kOwor56yOID4gYmFtYm9vXC13aXRoXC1ibGFja1wtcGF0Y2hlczsKK+emmCA+IGltcGVyaWFsXC1hbmNlc3Rvclwtd29yc2hpcDsKK+ekhCA+IHBsYWNlXC1pblwtc2ljaHVhblwtcHJvdmluY2U7CivnkqogPiBwZWFybFwtcGVuZGFudHNcLW9uXC1jb3JvbmV0Owor55G9ID4gdGlua2xpbmdcLW9mXC1qYWRlXC1wZW5kYW50czsKK+eMsiA+IHNtb2tlXC1vclwtZmxhbWVzXC1mcm9tXC1maXJlOwor54CYID4gcml2ZXJcLWluXC1qaWFuZ3hpXC1wcm92aW5jZTsKK+a6jiA+IHJpdmVyXC1pblwtZ3Vhbmd4aVwtcHJvdmluY2U7CivmuoggPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1zaGFueGk7Civms5wgPiBhXC1yaXZlclwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+azkiA+IGFcLXJpdmVyXC1pblwtaHViZWlcLXByb3ZpbmNlOwor5rGtID4gY29uZmx1ZW5jZVwtb2ZcLXR3b1wtc3RyZWFtczsKK+arvSA+IHNoYXBlXC13b29kXC1ieVwtdXNlXC1vZlwtaGVhdDsKK+aZrCA+IGZpcnN0XC1iaXJ0aGRheVwtb2ZcLWFcLWNoaWxkOwor5oKKID4gd2lzZVwuXC10b1wta25vd1wtaW50dWl0aXZlbHk7CivlvY0gPiB0b1wtZHJhd1wtYVwtYm93XC10b1wtdGhlXC1mdWxsOwor5bqFID4gYW5cLWludGVycm9nYXRpdmVcLXBhcnRpY2xlOwor5ayAID4gbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtc2hhbnhpOwor5LW1ID4geWVsbG93aXNoXC1ibGFja1wtYW5kXC13aGl0ZTsKK+S1qyA+IGxpZ2h0XC1yZWRcLXllbGxvd2lzaFwtYmxhY2s7CivktJsgPiB0b1wtbWFrZVwtZGVjb2N0aW9uXC1vZlwtc2FsdDsKK+SztyA+IGFcLXNlY29uZFwtbmFtZVwtZm9yXC1jaGlja2VuOwor5LOGID4gYVwta2luZFwtb2ZcLXNwZWNpZXNcLW9mXC1teW5hOwor5LCCID4gYVwtY29pZmZ1cmVcLXdpdGhcLWFcLXRvcGtub3Q7Civkr78gPiBhXC1jb2lmZnVyZVwtd2l0aFwtYVwtdG9wa25vdDsKK+SvvCA+IGFcLWNvaWZmdXJlXC13aXRoXC1hXC10b3Brbm90Owor5K+0ID4gYVwtY29pZmZ1cmVcLXdpdGhcLWFcLXRvcGtub3Q7Civkr7IgPiBhXC1jb2lmZnVyZVwtd2l0aFwtYVwtdG9wa25vdDsKK+SulSA+IGhvcnNlXC13aXRoXC13aGl0ZVwtZm9yZWhlYWQ7CivkraggPiB3aW5lXC1wb3VyZWRcLWluXC1hXC1saWJhdGlvbjsKK+SsvSA+IHdpbmVcLXBvdXJlZFwtaW5cLWFcLWxpYmF0aW9uOwor5KuAID4gdGhlXC1sb3dlclwtZW5kXC1vZlwtdGhlXC1qYXdzOwor5KmoID4gYVwtd3JhcHBlclwtb3JcLWNhc2VcLWZvclwtYm93Owor5KmdID4gdG9cLXRhblwtYW5kXC1zb2Z0ZW5cLWxlYXRoZXI7CivkpIIgPiBhXC1zZWNvbmRcLW5hbWVcLWZvclwtdmluZWdhcjsKK+SjtCA+IHRvXC1sb3NlXC10ZW1wZXJcLXdoZW5cLWRydW5rOwor5KOGID4gbmFtZVwtb2ZcLWFcLWNvdW50eVwtaW5cLWdhb21pOwor5KKyID4gdG9cLWdvXC1hbGxcLXRoZVwtd2F5XC1mb3J3YXJkOwor5KKuID4gcmFwaWRcLW1hcmNoaW5nXC1vclwtcnVubmluZzsKK+SioSA+IHRvXC1zdGFtcFwtdGhlXC1mb290XC1mb3J3YXJkOwor5KG5ID4gdGhlXC1sb3dcLXJlYXJcLW9mXC1hXC1jaGFyaW90Owor5KGvID4gc291bmRcLW9mXC1tb3ZpbmdcLWNhcnJpYWdlczsKK+ShqyA+IHNvdW5kXC1vZlwtbW92aW5nXC1jYXJyaWFnZXM7CivkoaEgPiB0b1wtZ2V0XC11cFwtaW50b1wtYVwtY2FycmlhZ2U7CivkoZggPiBzb3VuZFwtb2ZcLW1vdmluZ1wtY2FycmlhZ2VzOwor5KGSID4gc291bmRcLW9mXC1tb3ZpbmdcLWNhcnJpYWdlczsKK+SglSA+IHJhcGlkXC1tYXJjaGluZ1wtb3JcLXJ1bm5pbmc7CivkmLggPiB0aGVcLWxvd2VyXC1mcm9udFwtb2ZcLWFcLXJvYmU7CivkmJIgPiBib3knJ3NcLXJlcHJvZHVjdGl2ZVwtb3JnYW5zOwor5JWEID4gbWVhdFwtaW5cLXRoZVwtZm9ybVwtb2ZcLXBhc3RlOwor5JOLID4gZWxtXC1zZWVkc1wtXC1cLVwtdXNlZFwtYXNcLWZvb2Q7CivkkaIgPiBhXC1rbmlmZVwtc2hhcGVkXC1zbWFsbFwtYm9hdDsKK+SRiCA+IG1lYXRcLXRvXC1vZmZlclwtZm9yXC13b3JzaGlwOwor5I2vID4gZ2FvdFwtd2l0aFwtZGlmZmVyZW50XC1ob3JuczsKK+SNoiA+IG5ldHRlZFwtdmVpbmVkXC13aW5kb3dcLXNpbGw7Civki58gPiB0aGVcLXdlaWdodFwtb25cLWFcLXN0ZWVseWFyZDsKK+SKtiA+IGFcLXJvcGVcLWZvclwtbGVhZGluZ1wtY2F0dGxlOwor5ImXID4gYVwtcmVjZXB0YWNsZVwtb3JcLWNvbnRhaW5lcjsKK+SEuCA+IGdyYWluc1wtcHJvZHVjaW5nXC1ub1wtZnJ1aXQ7CivkhJIgPiByaXBlbmluZ1wtb2ZcLXBhZGR5XC1vclwtcmljZTsKK+SDgSA+IHVuZXZlblwtb3JcLXJ1Z2dlZFwtdGVycmFpbnM7CivkgZQgPiBiaWdcLWV5ZXNcLXByb3R1YmVyYW50XC1leWVzOwor47+wID4gZHVyYWJsZVwtYW5kXC1zb2xpZFwtbGVhdGhlcjsKK+O/giA+IG9ic3RyYWN0aW9uXC1vZlwtdGhlXC1ib3dlbHM7CivjvrUgPiBhXC1kYXJrXC1jb2xvcmVkXC1iaXJ0aFwtbWFyazsKK+O+nCA+IHdlYWtcLWJyZWF0aFwtb2ZcLWFcLXNpY2tcLW1hbjsKK+O9viA+IGFcLWtpbmRcLW9mXC13b21hbicnc1wtZGlzZWFzZTsKK+O7jyA+IHRpbmtsaW5nXC1vZlwtamFkZVwtcGVuZGFudHM7CivjuoAgPiBhXC1tb25rZXlcLXdpdGhcLXllbGxvd1wtaGFpcjsKK+O4siA+IGFcLWtpbmRcLW9mXC1tb3VudGFpblwtY2F0dGxlOwor47evID4gc21va2VcLWFuZFwtZHVzdFwtZXZlcnl3aGVyZTsKK+O2uiA+IHRoZVwtbGlnaHRcLW9yXC1nbG93XC1vZlwtZmlyZTsKK+O2miA+IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLXNoYW54aTsKK+O1vSA+IHRoZVwtc3RyZW5ndGhcLW9mXC1hXC1jdXJyZW50Owor47GlID4gdGhlXC1ldmlsXC1zcGlyaXRzXC1jb21lXC1vdXQ7CivjsKYgPiB0b1wtYnJlYXRoXC13aXRoXC1tb3V0aFwtb3BlbjsKK+OwlCA+IGFcLWtpbmRcLW9mXC1lZGlibGVcLW11c2hyb29tOwor47COID4gYVwtd29vZGVuXC1wZXN0bGVcLW9yXC1yYW1tZXI7CivjrZsgPiBhXC1raW5kXC1vZlwtY2xpbWJpbmdcLXBsYW50czsKK+OpoCA+IGFcLWZpZXJjZVwtb3JcLWJsb29keVwtYmF0dGxlOwor76ezID4gZmVtYWxlXC1vZlwtY2hpbmVzZVwtdW5pY29ybjsKK+OmmyA+IHRvXC13YWxrXC1pblwtYVwtY29tcG9zZWRcLXdheTsKK+OgnSA+IGxvZnR5XC1hbmRcLXN0ZWVwXC1tb3VudGFpbnM7CivjoJAgPiBoaWdoXC1hbmRcLXBvaW50ZWRcLW1vdW50YWluOwor456aID4gdG9cLXBpbGVcLXVwXC1sYXllclwtYnlcLWxheWVyOwor45yvID4gYVwtd29yZFwtdG9cLWRlc2lnbmF0ZVwtd29tYW47CivjnK4gPiB0b1wtZ29cLWJleW9uZFwtbm9ybWFsXC1saW1pdDsKK+OakyA+IHRpZVwtYmVhbXNcLW9mXC1hXC1zbWFsbFwtYm9hdDsKK+OYjCA+IHRvXC1sYXVnaFwtd2l0aG91dFwtc3RvcHBpbmc7Civjl6YgPiBhXC1sb3VkXC1hbmRcLWNvbmZ1c2VkXC1ub2lzZTsKK+OXmiA+IHZleGluZ2x5XC12ZXJib3NlXC1vclwtd29yZHk7Civjl5UgPiB0aGVcLWNyb3dpbmdcLW9mXC1hXC1waGVhc2FudDsKK+OWhCA+IHNvdW5kXC1vZlwtY2FsbGluZ1wtY2hpY2tlbnM7CivjlZogPiBjbGF3c1wtb2ZcLWJpcmRzXC1vclwtYW5pbWFsczsKK+OQsyA+IGhpZ2hcLWFuZFwtbGV2ZWxcLW9uXC10aGVcLXRvcDsKK+icgCA+IG5hbWVcLW9mXC1hblwtYW5jaWVudFwtc3RhdGU7CivmtJsgPiByaXZlclwtaW5cLXNoYW54aVwtcHJvdmluY2U7Civlj5QgPiBmYXRoZXInJ3NcLXlvdW5nZXJcLWJyb3RoZXI7CivntbkgPiBraW5kXC1vZlwtdGhpY2tcLXN0aWZmXC1zaWxrOwor572pID4gYmFza2V0XC1mb3JcLWNhdGNoaW5nXC1maXNoOwor5aS3ID4gYW5jaWVudFwtYmFyYmFyaWFuXC10cmliZXM7CivnoLAgPiBzb3VuZFwtb2ZcLWNyYXNoaW5nXC1zdG9uZXM7Civlk44gPiBpbnRlcmplY3Rpb25cLW9mXC1zdXJwcmlzZTsKK+aclCA+IGZpcnN0XC1kYXlcLW9mXC1sdW5hclwtbW9udGg7Civmj6MgPiBwdXRcLXRoaW5nc1wtdW5kZXJcLWNsb3RoZXM7CivltYsgPiBvbWVpXC1tb3VudGFpblwtaW5cLXNpY2h1YW47CivpgrkgPiBuYW1lXC1vZlwtYW5cLWFuY2llbnRcLXN0YXRlOwor57yJID4gdG9cLXNld1wtaW5cLWNsb3NlXC1zdGl0Y2hlczsKK+e7oiA+IGtpbmRcLW9mXC10aGlja1wtc3RpZmZcLXNpbGs7CivlmbYgPiB1c2VkXC1pblwtdHJhbnNsaXRlcmF0aW9uczsKK+axlSA+IGJhc2tldFwtZm9yXC1jYXRjaGluZ1wtZmlzaDsKK+aOsCA+IHRvXC1icmVha1wtd2l0aFwtYm90aFwtaGFuZHM7CivpnIYgPiBhXC1zdWRkZW5cLXBlYWxcLW9mXC10aHVuZGVyOwor5ryzID4gbmFtZVwtb2ZcLWFcLXJpdmVyXC1pblwtaGVuYW47Civmsb4gPiByaXZlclwtaW5cLXNoYW54aVwtcHJvdmluY2U7Civlt7MgPiBzaXh0aFwtb2ZcLXR3ZWx2ZVwtYnJhbmNoZXM7CivmsbQgPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1oZW5hbjsKK+WXnSA+IGNhY2tsaW5nXC1vZlwtZm93bHNcLXRvXC1nYWc7Civlp5ggPiBpbGxpY2l0XC1zZXh1YWxcLXJlbGF0aW9uczsKK+mcjyA+IGZhbGxpbmdcLW9mXC1zbm93XC1hbmRcLXJhaW47Civpg7ggPiBjb3VudHlcLWluXC1oZWJlaVwtcHJvdmluY2U7CivlkaYgPiB0aGVcLWJsZWF0aW5nXC1vZlwtdGhlXC1kZWVyOwor5o6uID4gdG9cLWJlYXJcLW9uXC10aGVcLXNob3VsZGVyczsKK+iOhiA+IGFcLWtpbmRcLW9mXC1sZWdlbmRhcnlcLXRyZWU7CivpmKEgPiBmb290cGF0aHNcLWJldHdlZW5cLWZpZWxkczsKK+m4qiA+IHNwZWNpZXNcLW9mXC10YWl3YW5cLXBpZ2VvbjsKK+WTlCA+IHVzZWRcLWluXC10cmFuc2xpdGVyYXRpb25zOwor5rCQID4gbmFtZVwtb2ZcLWFuXC1hbmNpZW50XC10cmliZTsKK+WRpCA+IHB1cmluZVwtaW5cLWNoZW1cLlwtY29tcG91bmQ7CivlrJcgPiBzdWNjZXNzaW9uXC10b1wtdGhlXC10aHJvbmU7CivmsqMgPiByaXZlclwtaW5cLXNoYW54aVwtcHJvdmluY2U7Civop48gPiBtZWV0XC1vclwtc2VlXC11bmV4cGVjdGVkbHk7Civmv64gPiBjb3VudHlcLWluXC1oZW5hblwtcHJvdmluY2U7Civpg7QgPiBjb3VudHlcLWluXC1odW5hblwtcHJvdmluY2U7Civovb4gPiBsb3dcLXJlYXJcLXBvcnRpb25cLW9mXC1jYXJ0Owor56ieID4gZ3JhaW5cLXJlYWR5XC1mb3JcLWdyaW5kaW5nOwor54GeID4gcml2ZXJcLWluXC1zaGFueGlcLXByb3ZpbmNlOwor6YOnID4gY291bnR5XC1pblwtaHViZWlcLXByb3ZpbmNlOwor6Lm8ID4gd2ViYmVkXC1mZWV0XC1vZlwtd2F0ZXJmb3dsOwor55SRID4gYm9pbGVyXC1mb3JcLXN0ZWFtaW5nXC1yaWNlOwor5aaXID4gd2lmZVwtb2ZcLW1vdGhlcicnc1wtYnJvdGhlcjsKK+a1oCA+IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLWh1YmVpOwor6bOUID4gc3dpbW1pbmdcLWJsYWRkZXJcLW9mXC1maXNoOwor56+MID4gYW5jaWVudFwtbXVzaWNcLWluc3RydW1lbnQ7Civnp5UgPiBlbXB0eVwtZ3JhaW5cLW9yXC1yaWNlXC1odXNrOwor55CaID4gb3JuYW1lbnRhbFwtZ2Vtc1wtZm9yXC1iZWx0Owor6bK1ID4gY3J5cHRvYnJhbmNodXNcLWphcG9uaWN1czsKK+iJqCA+IGxvbmdcLWFuZFwtbmFycm93XC13YXJcLWJvYXQ7CivmtpEgPiByaXZlclwtaW5cLXNoYW5zaVwtcHJvdmluY2U7Civpg48gPiBjb3VudHlcLWluXC1oZW5hblwtcHJvdmluY2U7Civpm6kgPiBvZmZlclwtc2FjcmlmaWNlXC1mb3JcLXJhaW47Civkvb4gPiBhXC1yb3dcLW9yXC1maWxlXC1vZlwtZGFuY2VyczsKK+e8giA+IHRoZVwtd29vZlwtb2ZcLWFcLXdvdmVuXC1pdGVtOwor6Im0ID4gdGhlXC1jb3VudGVuYW5jZVwtY2hhbmdpbmc7Civmu48gPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1oZWJlaTsKK+mDviA+IGNvdW50eVwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+m3niA+IHRoZVwtdHVycXVvaXNlXC1raW5nZmlzaGVyOwor6bWBID4gbXljdGljb3JheFwtcHJhc2lub3NjZWxlczsKK+m0oyA+IHNwZWNpZXNcLW9mXC10YWl3YW5cLXBpZ2VvbjsKK+mwviA+IHN3aW1taW5nXC1ibGFkZGVyXC1vZlwtZmlzaDsKK+mvoiA+IGNyeXB0b2JyYW5jaHVzXC1qYXBvbmljdXM7CivprrAgPiBhXC1zbWFsbFwta2luZFwtb2ZcLXN0dXJnZW9uOwor6augID4gc2hhdmVcLWhlYWRcLWFzXC1wdW5pc2htZW50Owor6aiVID4gbmFtZVwtb2ZcLWFcLWZhYnVsb3VzXC1ob3JzZTsKK+mfgiA+IGFcLXNhZGRsZVwtZmxhcFwuXC10cmFwcGluZ3M7CivpmbQgPiBhXC1wYXJhcGV0XC1vblwtYVwtY2l0eVwtd2FsbDsKK+mXpCA+IHdhbGxcLWFyb3VuZFwtbWFya2V0XC1wbGFjZTsKK+mEsiA+IGNvdW50eVwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+mElyA+IGNvdW50eVwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+mEliA+IGNvdW50eVwtaW5cLWh1YmVpXC1wcm92aW5jZTsKK+mEkiA+IG5hbWVcLW9mXC1hblwtYW5jaWVudFwtc3RhdGU7Civpg58gPiBjb3VudHlcLWluXC1oZW5hblwtcHJvdmluY2U7CivovIogPiBsb3dcLXJlYXJcLXBvcnRpb25cLW9mXC1jYXJ0Owor6LSRID4gXDxhYmJydlw+XC1qaWFuZ3hpXC1wcm92aW5jZTsKK+iooSA+IHRvXC1jaGFudFwtdG9cLW1vYW5cLXRvXC1zaWdoOwor6KavID4gbWVldFwtb3JcLXNlZVwtdW5leHBlY3RlZGx5Owor6JuBID4gcG9tcG9uaWFcLW1hY3VsYXRpb2NvbGxpczsKK+iYgCA+IGZhbGxpbmdcLWxlYXZlc1wtYW5kXC1iYXJrczsKK+iXuiA+IHJ1c2hcLXVzZWRcLWluXC1tYWtpbmdcLW1hdHM7Civoj7QgPiBzbWFsbFwtYnVkZGhpc3RcLW1vbmFzdGVyeTsKK+iOlCA+IGZyaXRpbGxhcmlhXC12ZXJ0aWNpbGxhdGE7CivojLwgPiBjaHJ5c2FudGhlbXVtXC1jb3JvbmFyaXVtOwor6ImlID4gYW5cLW9hclwtb3JcLXBhZGRsZVwuXC10b1wtcm93Owor6IaZID4gY2FsbG91c1wtc2tpblwtb25cLXRoZVwtZmVldDsKK+iFnCA+IHF1aWNrZW5pbmdcLW9mXC10aGVcLWZvZXR1czsKK+iCsyA+IHRoZVwtY29ybmVyc1wtb2ZcLXRoZVwtbW91dGg7Civnv5sgPiBsb29rXC1vZlwtcnVtcGxlZFwtZmVhdGhlcnM7CivnvZ0gPiBuZXRcLWZvclwtY2F0Y2hpbmdcLXJhYmJpdHM7Civnt50gPiB0b1wtc2V3XC1pblwtY2xvc2VcLXN0aXRjaGVzOwor57eZID4gdGhlXC13b29mXC1vZlwtYVwtd292ZW5cLWl0ZW07Civnt4wgPiB0YXNzZWxzXC1oYW5naW5nXC1mcm9tXC1oYXQ7CivnrbggPiBuYW1lXC1vZlwtYVwtcGxhY2VcLWluXC1ob25hbjsKK+eomSA+IGdyYWluXC1yZWFkeVwtZm9yXC1ncmluZGluZzsKK+eSoCA+IGFcLXBpZWNlXC1vZlwtcHJlY2lvdXNcLWphZGU7CivnjrYgPiBuYW1lXC1vZlwtb25lXC1raW5kXC1vZlwtamFkZTsKK+eNniA+IG5hbWVcLW9mXC1hXC12YXJpZXR5XC1vZlwtZG9nOwor54yUID4gbmFtZVwtb2ZcLWFuXC1hbmNpZW50XC10cmliZTsKK+eBqCA+IHRoZVwtcml2ZXJcLWdhblwtaW5cLWppYW5neGk7CivngYMgPiByaXZlclwtaW5cLXNoYW54aVwtcHJvdmluY2U7Civmv7IgPiBuYW1lXC1vZlwtYVwtcml2ZXJcLWluXC1odW5hbjsKK+a5iyA+IHJpdmVyXC1pblwtc2hhbnhpXC1wcm92aW5jZTsKK+a0pyA+IG5hbWVcLW9mXC1hXC1yaXZlclwtaW5cLWhvbmFuOwor5qinID4gemFudGhveHlsdW1cLWFpbGFudGhvaWRlczsKK+ampCA+IHBlcmNoXC1mb3JcLWZvd2xzXC1yb29zdFwtb247CivmoIIgPiBhXC1raW5kXC1vZlwtZXZlcmdyZWVuXC10cmVlOwor5pehID4gY2hva2VcLW9uXC1zb21ldGhpbmdcLWVhdGVuOwor5pKLID4gdG9cLXJ1YlwtYmV0d2VlblwtdGhlXC1oYW5kczsKK+aDjCA+IHRvXC1iZWFyXC1hXC1ncnVkZ2VcLWFnYWluc3Q7CivltLYgPiBuYW1lXC1vZlwtYVwtbGVnZW5kYXJ5XC1oaWxsOwor5bSBID4gYVwtcGxhY2VcLWluXC10YWl3YW5cLXRhaW5hbjsKK+WwniA+IGZ1ZWxcLXVzZWRcLWZvclwtc2FjcmlmaWNlczsKK+WnuiA+IG5hbWVcLW9mXC1hblwtYW5jaWVudFwtc3RhdGU7CivlpZ4gPiB0aGVcLXN0cmlkZVwtbWFkZVwtYnlcLWFcLW1hbjsKK+WklyA+IHRvXC10dXJuXC1vdmVyXC13aGVuXC1hc2xlZXA7Civll7YgPiB1c2VkXC1pblwtdHJhbnNsaXRlcmF0aW9uczsKK+WHnCA+IHNoaXZlclwtd2l0aFwtY29sZFwtb3JcLWZlYXI7Civlg7AgPiBhbmNpZW50XC1hYm9yaWdpbmFsXC10cmliZTsKK+S6gyA+IG5hbWVcLW9mXC1hXC1raW5kXC1vZlwtYW5pbWFsOwor5Lm6ID4gcGFpbnRpbmdcLXRvb2xcLXBsYWNlXC1uYW1lOwor5Lm2ID4ga29yZWFuXC1wbGFjZVwtbmFtZVwtcGhvbGhhOwor5LWCID4gdG9cLWdyaW5kXC13aGVhdFwtdG9cLXBvd2RlcjsKK+SysyA+IGJpcmRzXC1mbHlpbmdcLXVwXC1hbmRcLWRvd247CivkspsgPiBhblwtYW5jaWVudFwtbmFtZVwtZm9yXC10dW5hOwor5LKEID4gYVwta2luZFwtb2ZcLWZpaXNoXC1pblwtb2NlYW47CivksI0gPiBhXC1raW5kXC1vZlwtZGFya1wtcmVkXC1wYWludDsKK+SwhiA+IGJlYXV0aWZ1bFwtYW5kXC1oYWlyeVwtbWFuZTsKK+SvliA+IHRoZVwtbXVzY2xlc1wtb2ZcLXRoZVwtdGhpZ2g7CivkrLMgPiBjYWtlc1wtbWFkZVwtb2ZcLXJpY2VcLWZsb3VyOwor5KuvID4gdG9cLXRha2VcLWFcLWNhc3VhbFwtbG9va1wtYXQ7CivkqoAgPiBrbm93blwtdG9nZXRoZXJcLWFzXC1zYWRkbGU7CivkqaogPiBrbm93blwtdG9nZXRoZXJcLWFzXC1zYWRkbGU7CivkqJIgPiBzb3VuZFwtb2ZcLXRoZVwtd2F0ZXJcLWRyb3BzOwor5KaoID4gYVwtZG9vclwtY3VydGFpblwtb3JcLXNjcmVlbjsKK+SkryA+IGNvbnRhaW5lclwtZm9yXC10aGlja1wtc291cDsKK+SjjSA+IG5hbWVcLW9mXC1hblwtYW5jaWVudFwtc3RhdGU7Civko4UgPiBuYW1lXC1vZlwtYW5cLWFuY2llbnRcLXN0YXRlOwor5KGNID4gdGhlXC1saW5jaFwtcGluXC1vZlwtYVwtc2hlZWw7Civkn5cgPiB0b1wtc3RhbmRcLWZvclwtYVwtbG9uZ1wtdGltZTsKK+SfgyA+IHRvXC1tb3ZlXC1vclwtbWFyY2hcLXN3aWZ0bHk7CivkmrYgPiB0b1wtc2NvbGRcLWluXC1hXC1sb3VkXC12b2ljZTsKK+SZnCA+IGxlZ2VuZGFyeVwtbW91bnRhaW5cLWRlaXR5Owor5JmIID4gYVwtbG9vc2VcLWdhcm1lbnRcLW9yXC1jbG9hazsKK+SZhyA+IGNsb3RoZXNcLW9mXC1jb2Fyc2VcLWZhYnJpYzsKK+SXgiA+IGRpZW15Y3R5bHVzXC1weXJyaG9nYXN0ZXI7CivklKMgPiBhXC10cmliZVwtaW5cLWFuY2llbnRcLXRpbWVzOwor5JO0ID4gZWRpYmxlXC1mdW5ndXNcLWZyb21cLXRyZWVzOwor5JGOID4gc291cFwtb2ZcLXBpZycnc1wtaW50ZXN0aW5lczsKK+SQuyA+IGJpZ1wtcGllY2VzXC1vZlwtZHJpZWRcLW1lYXQ7CivkkLkgPiBwZXJzZXJ2ZWRcLWFuZFwtZHJpZWRcLW1lYXQ7CivkkLAgPiB0b1wtb2ZmZXJcLWZvb2RcLWFzXC10cmlidXRlOwor5JCCID4gZmF0XC1vZlwtYW5pbWFsc1wtb3JcLXBsYW50czsKK+SPpiA+IGZhdFwtb2ZcLWFuaW1hbHNcLW9yXC1wbGFudHM7CivkjrUgPiB0b1wtbG9va1wtc3RyYWlnaHRcLWZvcndhcmQ7CivkirEgPiBjYWtlc1wtbWFkZVwtb2ZcLXJpY2VcLWZsb3VyOwor5IqQID4gZmx1ZmZ5XC1zdHVmZmVkXC1kdW1wbGluZ3M7Civkio0gPiB0aGlja1wtY29uZ2VlXC1vclwtcG9ycmlkZ2U7Civkh48gPiB0b1wtcGlsZVwtb25lXC11cG9uXC1hbm90aGVyOwor5IScID4gaGFwcGluZXNzXC1hbmRcLXdlbGxcLWJlaW5nOwor5ISWID4gdXNlZFwtaW5cLW5hbWVcLW9mXC1hXC1wZXJzb247Civkg6IgPiBuYW1lXC1vZlwtYVwtbW91bnRhaW5cLWxvZnR5Owor5IGHID4gdG9cLWxvb2tcLWZvclwtYVwtc2hvcnRcLXRpbWU7CivkgLQgPiB0b1wtbG9va1wtc3RyYWlnaHRcLWZvcndhcmQ7CivkgKsgPiBuYXJyb3dcLWFuZFwtZGltXC1leWVcLXNpZ2h0Owor5ICqID4gYmlyZHNcLWZseWluZ1wtdXBcLWFuZFwtZG93bjsKK+O/uiA+IGp1dHRpbmdcLW9uXC10aGVcLWVwaWRlcm1pczsKK+O9kiA+IHRoZVwtY2hpbGRyZW5cLW9mXC1hXC1zaXN0ZXI7CivjvL8gPiB0aGVcLWJyaWNrXC13YWxsXC1vZlwtYVwtd2VsbDsKK+O8myA+IGxvbmdcLW5lY2tlZFwtd2luZVwtdmVzc2VsczsKK+O7qiA+IGFcLWtpbmRcLW9mXC1qYWRlXC1maW5lXC1qYWRlOwor47aFID4gZHJpZWRcLXVwXC1tb3VudGFpblwtY3JlZWtzOwor47WiID4gYVwtbWFyc2hcLWluXC1hbmNpZW50XC10aW1lczsKK+O0sCA+IGFcLXJpdmVyXC1pblwtYW5jaWVudFwtdGltZXM7CivjtKwgPiBhXC1yaXZlclwtaW5cLWFuY2llbnRcLXRpbWVzOwor47OlID4gYVwtcml2ZXJcLWluXC1hbmNpZW50XC10aW1lczsKK+OznSA+IGFcLXJpdmVyXC1pblwtYW5jaWVudFwtdGltZXM7Civjs48gPiBhXC1yaXZlclwtaW5cLWFuY2llbnRcLXRpbWVzOwor47ONID4gYVwtcGxhY2VcLWluXC1hbmNpZW50XC10aW1lczsKK+OziyA+IGFcLXJpdmVyXC1pblwtYW5jaWVudFwtdGltZXM7Civjs4ogPiB0aGVcLWZsb3dpbmdcLW9mXC10aGVcLXdhdGVyOwor47OAID4gYVwtcml2ZXJcLWluXC1hbmNpZW50XC10aW1lczsKK+OyiiA+IHRvXC11bmRlcnN0YW5kXC10aG9yb3VnaGx5Owor47C+ID4gc29uZ3NcLW9mXC10aGVcLXBlb3BsZVwtb2ZcLealmjsKK+OwvSA+IHRvXC1leGVydFwtb25lc2VsZlwtdG9cLXllbGw7Civjr6sgPiBhXC13YXR0bGVcLW9yXC1iYW1ib29cLWZlbmNlOwor466mID4gYnJhbmNoZXNcLWdyb3dpbmdcLXVwd2FyZHM7CivjqpsgPiB0b1wtcG91bmRcLXJvY2tzXC10b1wtcGllY2VzOwor46qZID4gdG9cLWdvXC10b1wtdGhlXC12ZXJ5XC1zb3VyY2U7Civjqa0gPiB0b1wtZGlzdHVyYlwtb3JcLXRvXC1hZ2l0YXRlOwor76ewID4gcnVzaFwtdXNlZFwtaW5cLW1ha2luZ1wtbWF0czsKK++llCA+IHNoaXZlclwtd2l0aFwtY29sZFwtb3JcLWZlYXI7CivvpJUgPiByaXZlclwtaW5cLXNoYW54aVwtcHJvdmluY2U7CivjoaogPiB0aGVcLXZhcm5pc2hcLW9uXC10aGVcLWZsb29yOwor46GnID4gdG9cLXN0cmV0Y2hcLW9wZW5cLXBhaW50aW5nOwor46CHID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluXC1yaWRnZTsKK+OcvyA+IG5hbWVcLW9mXC1hXC1maXNoXC1pblwtbGVnZW5kOwor45qdID4gdGhlXC1zdHJpZGVcLW1hZGVcLWJ5XC1hXC1tYW47Civjl6kgPiBzb3VuZFwtb2ZcLWVuZHVyZVwtY29sZG5lc3M7Civjl6cgPiB0b1wtc2NvbGRcLXdpdGhcLWxvdWRcLXZvaWNlOwor45eMID4gdG9cLXNjb2xkXC13aXRoXC1sb3VkXC12b2ljZTsKK+OXgCA+IHRoZVwtYmxlYXRpbmdcLW9mXC10aGVcLWRlZXI7Civjk6EgPiB0aGVcLW1pZGRsZVwtcGFydFwtb2ZcLWFcLWJvdzsKK+OQqCA+IGFcLWtpbmRcLW9mXC1maXNoXC1pblwtbGVnZW5kOwor556lID4gdGFrZVwtZmxlZXRpbmdcLWdsYW5jZVwtYXQ7Civlt54gPiBhZG1pbmlzdHJhdGl2ZVwtZGl2aXNpb247CivlkKcgPiBlbXBoYXRpY1wtZmluYWxcLXBhcnRpY2xlOwor5p+QID4gY2VydGFpblwtdGhpbmdcLW9yXC1wZXJzb247CivnpaggPiBzbGlwXC1vZlwtcGFwZXJcLW9yXC1iYW1ib287CivogLYgPiB1c2VkXC1pblwtdHJhbnNsaXRlcmF0aW9uOwor5Y6YID4gdGhvdXNhbmR0aFwtcGFydFwtb2ZcLXRhZWw7Civlva0gPiBuYW1lXC1vZlwtYW5jaWVudFwtY291bnRyeTsKK+iCtCA+IGNvb2tlZFwtb3JcLXByZXBhcmVkXC1tZWF0Owor5L+OID4gY2hvcHBpbmdcLWJvYXJkXC1vclwtYmxvY2s7Civmt64gPiByaXZlclwtaW5cLWFuaHVpXC1wcm92aW5jZTsKK+mDoSA+IGFkbWluaXN0cmF0aXZlXC1kaXZpc2lvbjsKK+WTpiA+IG9oXD9cLXJlYWxseVw/XC1pc1wtdGhhdFwtc29cPzsKK+mUpCA+IGJhbGFuY2VcLXdlaWdodFwtb25cLXNjYWxlOwor5LueID4gYW5jaWVudFwtdW5pdFwtb2ZcLW1lYXN1cmU7Civoiq0gPiBwbGFudGFpblwtb3JcLWJhbmFuYVwtcGFsbTsKK+ejiiA+IHBpbGVcLW9mXC1yb2Nrc1wtb3JcLXN0b25lczsKK+WRuCA+IGV4cHJlc3Npb25cLW9mXC1yZXByaW1hbmQ7Civmi7cgPiB0b3J0dXJlXC1hbmRcLWludGVycm9nYXRlOwor5oq/ID4gcHVja2VyXC11cFwtbGlwc1wtaW5cLXNtaWxlOwor5Y2JID4gZ2VuZXJhbFwtdGVybVwtZm9yXC1wbGFudHM7Civpq7sgPiBoYWlyXC1yb2xsZWRcLXVwXC1pblwtYVwtYnVuOwor6KOGID4gY3JvdGNoXC1vclwtc2VhdFwtb2ZcLXBhbnRzOwor6JiRID4gdHlwZVwtb2ZcLWVkaWJsZVwtbXVzaHJvb207Civlkr8gPiBkZXNjcmlwdGl2ZVwtb2ZcLWNyZWFraW5nOwor56++ID4gYmFtYm9vXC1zcGxpbnRzXC1vclwtc2xhdHM7Civmt4cgPiByaXZlclwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+iTkSA+IHJhaW5cLWNvYXRcLW1hZGVcLW9mXC1zdHJhdzsKK+aqrCA+IHR5cGVcLW9mXC1sb2N1c3RcLW9yYWNhY2lhOwor5reZID4gZ3VyZ2xpbmdcLXNvdW5kXC1vZlwtd2F0ZXI7CivmrpMgPiBkcmVzc1wtY29ycHNlXC1mb3JcLWJ1cmlhbDsKK+eQpSA+IGpld2VsXC1pblwtc2hhcGVcLW9mXC10aWdlcjsKK+a9niA+IHJpdmVyXC1pblwtbm9ydGhlcm5cLWNoaW5hOwor6YaNID4gZXNzZW50aWFsXC1vaWxcLW9mXC1idXR0ZXI7Civlpq8gPiB3aXZlc1wtb2ZcLW9uZScnc1wtYnJvdGhlcnM7CivluI8gPiBjdXJ0YWluXC10aGF0XC1mb3Jtc1wtd2FsbDsKK+eTkiA+IGNlcmVtb25pYWxcLWxpYmF0aW9uXC1jdXA7CivmtLkgPiByaXZlclwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+eRlyA+IGxhcmdlXC1yaW5nXC1vZlwtZmluZVwtamFkZTsKK+a2niA+IHJpdmVyXC1pblwtaGViZWlcLXByb3ZpbmNlOwor54i7ID4gZGlhZ3JhbXNcLWZvclwtZGl2aW5hdGlvbjsKK+mUnyA+IGFuY2llbnRcLXRyZWFzdXJlZFwtc3dvcmQ7CivoipcgPiBmcmFncmFudFwtc21lbGxcLW9mXC1ncmFpbjsKK+alpiA+IGFcLWxhc3RcLWZvclwtbWFraW5nXC1zaG9lczsKK+iIgSA+IGNhcnJ5XC1vblwtb25lJydzXC1zaG91bGRlcjsKK+a7oCA+IHJpdmVyXC1pblwtaHViZWlcLXByb3ZpbmNlOwor6byPID4gY292ZXJcLW9mXC10cmlwb2RcLWNhbGRyb247Civpu7AgPiB5b3VuZ1wtZ2lybCcnc1wtaGFpclwtc3R5bGU7CivprIIgPiB0aGVcLWhhaXJcLW9uXC10aGVcLXRlbXBsZXM7Civpp64gPiBhXC1raW5kXC1vZlwtZmllcmNlXC1hbmltYWw7CivpjJggPiBiYWxhbmNlXC13ZWlnaHRcLW9uXC1zY2FsZTsKK+mMlSA+IGFuY2llbnRcLXRyZWFzdXJlZFwtc3dvcmQ7CivphL4gPiBwbGFjZVwtaW5cLWh1YmVpXC1wcm92aW5jZTsKK+mErCA+IHBsYWNlXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor6YSkID4gcGxhY2VcLWluXC1oZW5hblwtcHJvdmluY2U7CivphJggPiBzdGF0ZVwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+mEjyA+IHBsYWNlXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor6YSAID4gc3RhdGVcLWluXC1oZW5hblwtcHJvdmluY2U7Civpg7AgPiBiaXJ0aHBsYWNlXC1vZlwtY29uZnVjaXVzOwor6YKnID4gdG93blwtaW5cLXNoYW54aVwtcHJvdmluY2U7CivpgpggPiBzdGF0ZVwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+iloCA+IGNyb3RjaFwtb3JcLXNlYXRcLW9mXC1wYW50czsKK+iauyA+IHNtYWxsXC1zcGVjaWVzXC1vZlwtY2ljYWRhOwor6JaMID4gZnJhZ3JhbnRcLXNtZWxsXC1vZlwtZ3JhaW47CivokrEgPiBnYW1ibGluZ1wtZ2FtZVwtd2l0aFwtZGljZTsKK+iRpyA+IGhlbGVvY2hhcmlzXC1wbGFudGFnaW5lYTsKK+iIsiA+IHNtYWxsXC1ib2F0XC13aXRoXC13aW5kb3dzOwor576rID4gdGhlXC1za2VsZXRvblwtb2ZcLWFcLXNoZWVwOwor5729ID4gYVwta2luZFwtb2ZcLXdvb2xlblwtZmFicmljOwor57K6ID4gcG9saXNoZWRcLXJpY2VcLW9yXC1taWxsZXQ7Civnr6cgPiBjcmVlbFwtZm9yXC10cmFwcGluZ1wtZmlzaDsKK+evmyA+IGN1dGljbGVcLW9mXC1iYW1ib29cLXBsYW50Owor56WUID4gd29yc2hpcFwtb25lJydzXC1hbmNlc3RvcnM7CivnnZYgPiB0b1wtc3RhcmVcLXN0cmFpZ2h0XC1haGVhZDsKK+ecoiA+IGV5ZXNcLXdpdGhvdXRcLWJyaWdodG5lc3M7Civnlb4gPiBmaWVsZHNcLWRpdmlkZWRcLWJ5XC1kaWtlczsKK+eTmiA+IGNlcmVtb25pYWxcLWxpYmF0aW9uXC1jdXA7CivnkrIgPiBwZW5kYW50XC1naXJkbGVcLW9ybmFtZW50Owor55G/ID4gYVwtYmxhY2tcLXN0b25lXC1saWtlXC1qYWRlOwor55GvID4ga2luZFwtb2ZcLXdoaXRlXC1jb3JuZWxpYW47CivnkaIgPiBnZW1cLW9ybmFtZW50c1wtZm9yXC1iZWx0czsKK+ePtiA+IHdoaXRlXC1qYWRlXC13b3JuXC1vblwtYmVsdDsKK+eOlSA+IGluZmVyaW9yXC12YXJpZXR5XC1vZlwtZ2VtOwor54yIID4gZG9nXC13aXRoXC1zaG9ydFwtc2hpbmJvbmU7CivngYQgPiByaXZlclwtaW5cLWh1YmVpXC1wcm92aW5jZTsKK+eAvCA+IHJpdmVyXC1pblwtaGVuYW5cLXByb3ZpbmNlOwor54CNID4gcml2ZXJcLWluXC1oZW5hblwtcHJvdmluY2U7Civmv5wgPiByaXZlclwtaW5cLWh1YmVpXC1wcm92aW5jZTsKK+a+tCA+IHJpdmVyXC1pblwtaHViZWlcLXByb3ZpbmNlOwor5r6JID4gdG9cLXdhc2hcLW5hbWVcLW9mXC1hXC1wbGFjZTsKK+a9liA+IG5hbWVcLW9mXC1hXC1jZXJ0YWluXC1yaXZlcjsKK+a8tyA+IHJpdmVyXC1pblwtaGViZWlcLXByb3ZpbmNlOwor5ryKID4gcml2ZXJcLWluXC1odWJlaVwtcHJvdmluY2U7Civmuq4gPiByaXZlclwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+a6oCA+IHJpdmVyXC1pblwtaHViZWlcLXByb3ZpbmNlOwor5re2ID4gcml2ZXJcLWluXC1oZWJlaVwtcHJvdmluY2U7CivmtpYgPiByaXZlclwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+a1rSA+IHJpdmVyXC1pblwtaGViZWlcLXByb3ZpbmNlOwor5rS6ID4gcml2ZXJcLWluXC1oZWJlaVwtcHJvdmluY2U7CivmtKggPiByaXZlclwtaW5cLWhlYmVpXC1wcm92aW5jZTsKK+auriA+IGRyZXNzXC1jb3Jwc2VcLWZvclwtYnVyaWFsOwor5q6ZID4gdG9cLWRpZVwtYnlcLXRha2luZ1wtcG9pc29uOwor5q2BID4gdW5zYXRpc2ZpZWRcLVwob2ZcLWVhdGluZ1wpOwor5qyoID4gdG9cLWJsb3dcLW9yXC1icmVhdGhlXC11cG9uOwor5qyPID4gdHJlZVwtdGhlXC1ob3JzZVwtY2hlc3RudXQ7CivmqocgPiB3b29kZW5cLXJhbW1lclwtb3JcLXBlc3RsZTsKK+aplCA+IGFcLXdvb2RlblwtY2hvcHBpbmdcLWJsb2NrOwor5qWlID4gYVwtbGFzdFwtZm9yXC1tYWtpbmdcLXNob2VzOwor5pq8ID4gdGFrZVwtZmxlZXRpbmdcLWdsYW5jZVwtYXQ7CivmgLggPiBjbnNcLTJcLTJhNDBcLWlzXC1kaWZmZXJlbnQ7CivluYMgPiBjdXJ0YWluXC10aGF0XC1mb3Jtc1wtd2FsbDsKK+WihCA+IHRoZVwtc3RlcHNcLW9mXC1hXC1zdGFpcndheTsKK+WVqyA+IGludGVyamVjdGlvblwtb2ZcLXdhcm5pbmc7CivlkJogPiB1c2VkXC10b1wtcmVwcmVzZW50XC1zb3VuZDsKK+WMgSA+IGphcGFuZXNlXC11bml0XC1vZlwtd2VpZ2h0Owor5Lu+ID4gdG9cLWhhbmdcLW9yXC1ib3dcLXRoZVwtaGVhZDsKK+S7rSA+IGFuY2llbnRcLXVuaXRcLW9mXC1tZWFzdXJlOwor5LadID4gZ3Jvd2luZ1wtaXJyZWd1bGFyXC10ZWV0aDsKK+S1iCA+IHVuc21lbHRlZFwtaGVtcFwtYW5kXC1zaWxrOwor5LWAID4gY29hcnNlXC1jcnVtYnNcLW9mXC1iYXJsZXk7CivktJEgPiBhXC1sZWdlbmRhcnlcLXdlaXJlZFwtYmlyZDsKK+S0hyA+IGFcLXNlY29uZFwtbmFtZVwtZm9yXC1jcmFuZTsKK+S0gSA+IGFcLWtpbmRcLW9mXC1yYXRcLWxpa2VcLWJpcmQ7Civks7IgPiBhXC1zd2FybVwtb2ZcLWZseWluZ1wtYmlyZHM7CivksrQgPiBhXC1raW5kXC1vZlwtdmVub21vdXNcLWJpcmQ7Civksb4gPiBhXC1jYXJwXC1saWtlXC1zYXZvcnlcLWZpc2g7CivksKsgPiBuaW1ibGVcLWFuZFwtYWN0aXZlXC1naG9zdDsKK+SthyA+IHRvXC1iZVwtY2hvY2tlZFwtd2l0aFwtZm9vZDsKK+SthiA+IHNtYWxsXC1jaGlsZHJlblwtZWF0XC1sZXNzOwor5KyyID4gdG9cLWVhdFwtdG9cLXRoZVwtaGFsZlwtZnVsbDsKK+SsqiA+IGFcLWtpbmRcLW9mXC1jb29rZWRcLW5vb2RsZTsKK+SsmyA+IHRoZVwtcm9hcmluZ1wtb2ZcLXRoZVwtd2luZDsKK+SolyA+IGV4Y2Vzc2l2ZVwtcmFpblwtYW5kXC1zbm93Owor5KiFID4gc21hbGxcLWJpcmRzXC1cLVwtXC10aGVcLXdyZW47CivkpZYgPiBzaWx2ZXJcLW9mXC1nb2xkXC1maWxhZ3JlZTsKK+SljyA+IHVuZml0dGVkXC1mb3JcLWVhY2hcLW90aGVyOwor5KSlID4gYWdyaWN1bHR1cmFsXC1pbXBsZW1lbnRzOwor5KKcID4gdGhlXC1tYXJyaWFnZVwtb2ZcLWFcLXdvbWFuOwor5KG9ID4gdGhlXC1zaGFmdHNcLW9mXC1hXC12ZWhpY2xlOwor5KG6ID4gdGhlXC1lbmRcLW9mXC1hblwtYXhsZVwtdHJlZTsKK+ShoyA+IGFcLXBpZWNlXC1vZlwtY3VydmVkXC1ib2FyZDsKK+SgoyA+IG5ldFwtdG9cLXRyYXBcLXRoZVwtYW5pbWFsczsKK+SdiCA+IGFcLWJpZ1wtYW5kXC1zdHJlbnVvdXNcLXBpZzsKK+SakCA+IGdldHRpbmdcLXJlZFwtaW5cLXRoZVwtZXllczsKK+SaiiA+IHRvXC1sb29rXC1mcm9tXC1hXC1kaXN0YW5jZTsKK+SZkCA+IGZ1cnNcLWFuZFwtbGluZW5cLWdhcm1lbnRzOwor5JiGID4gYVwtc2Vjb25kXC1mb3JtXC1lYXJ0aHdvcm07Civkl6AgPiB0aGVcLWxhcnZhXC1vZlwtbW9zcXVpdG9lczsKK+SXlCA+IGFcLWhvdXNlXC1saXphcmRcLW9yXC1nZWNrbzsKK+SWsSA+IGxhcmdlXC1zaHJpbXBcLWluXC10aGVcLXNlYTsKK+SUviA+IGFcLWtpbmRcLW9mXC1mcmFncmFudFwtaGVyYjsKK+STsSA+IGFcLWtpbmRcLW9mXC1oZXJiXC1tZWRpY2luZTsKK+SSliA+IGFcLWtpbmRcLW9mXC1oZXJiXC1tZWRpY2luZTsKK+SSlSA+IGFcLWtpbmRcLW9mXC1oZXJiXC1tZWRpY2luZTsKK+SQpCA+IGRyaWVkXC1hbmRcLXNlYXNvbmVkXC1tZWF0Owor5JCQID4gY3VydmVkXC1wYXJ0XC1vZlwtdGhlXC1rbmVlOwor5I+ZID4gYnJpbmVcLWZyb21cLXBpY2tsZWRcLW1lYXQ7Civkj5UgPiB0b1wtY29va1wtZm9vZFwtdGhvcm91Z2hseTsKK+SOpyA+IGFncmljdWx0dXJhbFwtaW1wbGVtZW50czsKK+SNuSA+IG9kb3JcLW9mXC1hXC1zaGVlcFwtb3JcLWdvYXQ7CivkjZkgPiBuZXRzXC1mb3JcLWNhdGNoaW5nXC1iaXJkczsKK+SNmCA+IGFcLWdlbmVyYWxcLXRlcm1cLWZvclwtbmV0czsKK+SNkyA+IG5ldFwtZm9yXC1jYXRjaGluZ1wtcmFiYml0Owor5IurID4gdG9cLXdpbmRcLXJvdW5kXC10aGVcLXJvcGVzOwor5IuoID4gdG9cLXNldFwtaW5cLW9yZGVyXC10aGVcLW9sZDsKK+SKtCA+IGZvb2RcLW1hZGVcLW9mXC1yaWNlXC1mbG91cjsKK+SKqiA+IGNvYXJzZVwtcmljZVwtXC1cLVwtdW5odWxsZWQ7CivkiZwgPiB5b3VuZ1wtYW5kXC10ZW5kZXJcLWJhbWJvbzsKK+SJliA+IGZyYW1ld29ya1wtb2ZcLWFcLWNhcnJpYWdlOwor5IeXID4gYmFtYm9vXC13aXRoXC1sb25nXC1qb2ludHM7Civkh5EgPiBhXC1zdGFuZGluZ1wtc2hvcnRcLXBlcnNvbjsKK+SGiiA+IHVuaHVza2VkXC1nbHV0aW5vdXNcLXJpY2U7CivkhokgPiB0aGVcLXN3aW5nXC1vZlwtcmljZVwtcGxhbnQ7Civkg4kgPiBhXC1zdG9uZVwtcmVzZW1ibGluZ1wtamFkZTsKK+SBjCA+IHRvXC1zZWVcLWZvclwtYVwtc2hvcnRcLXRpbWU7CivjvoAgPiB0b1wtYmVcLXdlYWtlZFwtYnlcLWRpc2Vhc2U7CivjvbogPiB0b1wtYmVcLXdlYWtlZFwtYnlcLWRpc2Vhc2U7CivjvbggPiBkaXNlYXNlc1wtb2ZcLXRoZVwtYWJkb21lbjsKK+O9miA+IGFncmljdWx0dXJhbFwtaW1wbGVtZW50czsKK+O8pyA+IHRpbGVzXC1pblwtY3lsaW5kZXJcLXNoYXBlOwor47myID4gYVwtZnJpZ2h0ZW5lZFwtcGlnXC1vclwtZG9nOwor47muID4gYVwta2luZFwtb2ZcLWFuaW1hbFwtXC10YXBpcjsKK+O5nSA+IGFcLWxlZ2VuZGFyeVwtd2lsZFwtYW5pbWFsOwor47mRID4gYVwtZm91clwteWVhcnNcLW9sZFwtY2F0dGxlOwor47mKID4gYVwtY2F0dGxlXC1vZlwtd2hpdGVcLWNvbG9yOwor47mGID4gdGhlXC1jb3VsdGVyXC1vZlwtYVwtcGxvdWdoOwor47iLID4gbWVhdHNcLXVzZWRcLWluXC1zYWNyaWZpY2U7Civjt64gPiBzY29yY2hlZFwtb3JcLWJ1cm5lZFwtd29vZDsKK+O3qyA+IGZpcmVcLWNhdXNpbmdcLWJ5XC1kcnluZXNzOwor47a1ID4gdG9cLWNvb2tcLWZvb2RcLXRob3JvdWdobHk7CivjtpIgPiB0aGVcLWN1cnJlbnRcLW9mXC1hXC1zdHJlYW07CivjtLIgPiBhXC1yaXZlclwtaW5cLWFuY2llbnRcLXRpbWU7CivjtJEgPiB0b1wtdHJhY2VcLXVwXC10b1wtYVwtc291cmNlOwor47SPID4gdGhlXC1wb25kXC13YXRlclwtaXNcLXN0aWxsOwor47K/ID4gZXh0ZW5zaXZlXC1ib2R5XC1vZlwtd2F0ZXI7CivjsoQgPiB1bmJ1cm50XC1icmlja3NcLW9yXC10aWxlczsKK+OxrCA+IGNhbm5vdFwtcmVjb2duaXplXC1wZW9wbGU7CivjsZUgPiB0aGVcLW1hcnJpYWdlXC1vZlwtYVwtd29tYW47Civjr5kgPiB0aGVcLWJ1Y2t0aG9yblwtb3JcLWp1anViZTsKK+OtviA+IHRvXC1jdXRcLXRoZVwtdGltYmVyXC1hcGFydDsKK+OtgyA+IHRoZVwtbGFyZ2VcLXJvcGVcLW9mXC1hXC1uZXQ7CivjrYIgPiBoZWlnaHRcLW9mXC10aGVcLWVuZFwtcG9pbnQ7CivjrLsgPiBpblwtYmV0d2Vlblwtb2ZcLXRoZVwtZmxlc2g7Civjp68gPiBhXC1idWNrZXRcLW1hZGVcLW9mXC13aWxsb3c7Civjp6UgPiB0b1wtbmlwXC13aXRoXC10aGVcLWZpbmdlcnM7Civjpr0gPiB3aXRoXC1lbGVnYW50XC1hcHBlYXJhbmNlOwor46a6ID4gYVwtbGFuY2VcLXdpdGhcLXR3b1wtcG9pbnRzOwor46a4ID4gYVwtbGFuY2VcLXdpdGhcLXR3b1wtcG9pbnRzOwor76alID4gZHJlc3NcLWNvcnBzZVwtZm9yXC1idXJpYWw7CivjpocgPiBhXC1wZWFjZWZ1bFwtb3JcLWVhc3lcLW1vb2Q7CivvpYcgPiBwaWxlXC1vZlwtcm9ja3NcLW9yXC1zdG9uZXM7CivjpYUgPiB1c2VkXC1pblwtYVwtcGVyc29uJydzXC1uYW1lOwor46SMID4gdG9cLWhhdmVcLW9uZScnc1wtaGVhcnRcLW93bjsKK+OjuyA+IHRvXC1yZW1lZHlcLWJ5XC1wdW5pc2htZW50Owor46OqID4gdG9cLXdhbGtcLXdpdGhcLXNsb3dcLXN0ZXBzOwor46OGID4gdG9cLWxvb3NlXC10aGVcLWJvd1wtc3RyaW5nOwor46K+ID4gdGhlXC1jdXJ2ZWRcLWVuZFwtb2ZcLWFcLWJvdzsKK+OitSA+IHBvd2VyZnVsXC1hbmRcLXN0cm9uZ1wtYm93Owor46G5ID4gdG9cLXJlbHlcLXVwb25cLWVhY2hcLW90aGVyOwor46GSID4gYVwtY2FsaWNvXC1zYWNrXC1mb3JcLWdyYWluOwor46GPID4gdG9cLWN1dFwtYVwtc3RyaXBcLW9mXC1jbG90aDsKK+OevCA+IHRvXC1yZXNwZWN0ZnVsbHlcLXJlY2VpdmU7CivjmqwgPiBhXC1sYWR5XC1zdGFydFwtdG9cLWRvbGxcLXVwOwor45qWID4gdG9cLWNvbWVcLW91dFwtdG9cLXRoZVwtb3BlbjsKK+OZiiA+IGFuXC1hcmVhXC1vZlwtbGV2ZWxcLWdyb3VuZDsKK+OVuCA+IHNvdW5kXC1vZlwtcm9sbGluZ1wtYVwtYm9hdDsKK+OVpyA+IHVzZWRcLXRvXC1yZXByZXNlbnRcLXNvdW5kOwor45SkID4gdG9cLWV4ZXJ0XC1vbmUnJ3NcLXN0cmVuZ3RoOwor45OnID4gYWdyaWN1bHR1cmFsXC1pbXBsZW1lbnRzOwor45KkID4gdG9cLWhhdmVcLW9uZScnc1wtaGVhcnRcLXdvbjsKK+OSmSA+IHRvXC1oYW5kXC1vclwtYm93XC10aGVcLWhlYWQ7CivkuYggPiBpbnRlcnJvZ2F0aXZlXC1wYXJ0aWNsZTsKK+iiqyA+IHBhc3NpdmVcLWluZGljYXRvclwtJydieScnOwor55SzID4gdG9cLXN0YXRlXC10b1wtYVwtc3VwZXJpb3I7CivlsqEgPiByaWRnZVwtb3JcLWNyZXN0XC1vZlwtaGlsbDsKK+eQtCA+IGNoaW5lc2VcLWx1dGVcLW9yXC1ndWl0YXI7CivlrIwgPiBzZWR1Y3RpdmVcLWFuZFwtbG92ZWFibGU7CivnvZcgPiBuZXRcLWZvclwtY2F0Y2hpbmdcLWJpcmRzOwor5pG4ID4gZ2VudGx5XC10b3VjaFwtd2l0aFwtaGFuZDsKK+S7sCA+IHJhaXNlXC10aGVcLWhlYWRcLXRvXC1sb29rOwor6IeNID4gYWJkb21pbmFsXC1hcmVhXC1vZlwtY3JhYjsKK+mDkSA+IHN0YXRlXC1pblwtdG9kYXknJ3NcLWhlbmFuOwor576FID4gbmV0XC1mb3JcLWNhdGNoaW5nXC1iaXJkczsKK+i0ryA+IGFcLXN0cmluZ1wtb2ZcLTEwMDBcLWNvaW5zOwor5aiHID4gc2VkdWN0aXZlXC1hbmRcLWxvdmVhYmxlOwor56utID4gcHV0XC1mb3J0aFwtZ3JlYXRcLWVmZm9ydDsKK+enkiA+IGJlYXJkXC1vZlwtZ3JhaW5cLW9yXC1jb3JuOwor5aWaID4gd2hlcmVcP1wtd2hhdFw/XC1ob3dcP1wtd2h5XD87CivlhoggPiByaWRnZVwtb3JcLWNyZXN0XC1vZlwtaGlsbDsKK+ebjyA+IHNtYWxsXC1jdXBcLW9yXC1jb250YWluZXI7CivokJ0gPiB0eXBlXC1vZlwtY3JlZXBpbmdcLXBsYW50Owor5qKnID4gc3RlcmN1bGlhXC1wbGF0YW5pZm9saWE7CivlkqYgPiBleHByZXNzaW9uXC1vZlwtc3VycHJpc2U7CivnrZAgPiBiYW1ib29cLWJhc2tldFwtb3JcLWNoZXN0Owor6LCNID4gYW5cLWludGVsbGlnZW5jZVwtcmVwb3J0Owor56+xID4gYmFtYm9vXC1vclwtd29vZGVuXC1mZW5jZTsKK+eQtiA+IGd1aXRhclwtbGlrZVwtaW5zdHJ1bWVudDsKK+eQtSA+IGd1aXRhclwtbGlrZVwtaW5zdHJ1bWVudDsKK+a9uiA+IHNvdW5kXC1vZlwtZmxvd2luZ1wtd2F0ZXI7CivlnbMgPiBhXC1ob2xsb3dcLWluXC10aGVcLWdyb3VuZDsKK+iEkCA+IGFiZG9taW5hbFwtYXJlYVwtb2ZcLWNyYWI7Civln4IgPiBkaXRjaGVzXC1mb3JcLWlycmlnYXRpb247CivlgIwgPiBhc3Npc3RhbnRcLWluXC13aW5lXC1zaG9wOwor6ZyBID4gdG9cLWNsZWFyXC11cFwtYWZ0ZXJcLXJhaW47Civpgq8gPiBjaXR5XC1pblwtaGViZWlcLXByb3ZpbmNlOwor57KRID4gdHNhbWJhXC1cKGZvb2RcLWluXC10aWJldFwpOwor6JuAID4gaW5zZWN0c1wtdGhhdFwtZWF0XC1ib29rczsKK+WrpiA+IG5hbWVcLW9mXC1hXC1tb29uXC1nb2RkZXNzOwor6LWKID4gYnV5XC1hbmRcLXNlbGxcLW9uXC1jcmVkaXQ7CivlvJEgPiB0b1wta2lsbFwtb25lJydzXC1zdXBlcmlvcjsKK+aRgSA+IHRvXC1wcmVzc1wtd2l0aFwtdGhlXC1oYW5kOwor55W5ID4gYVwtZmllbGRcLW9mXC0yMFwtb3JcLTMwXC1tdTsKK+inkCA+IGhhdmVcLWltcGVyaWFsXC1hdWRpZW5jZTsKK+iupiA+IGV4cG9zZVwtb3RoZXInJ3NcLXNlY3JldHM7Civml4QgPiBhXC1raW5kXC1vZlwtYW5jaWVudFwtZmxhZzsKK+i2tSA+IG5vaXNlXC1vZlwtdHJhbXBpbmdcLWZlZXQ7CivphbkgPiB0b1wtcG91clwtb3V0XC1hXC1saWJhdGlvbjsKK+WtsyA+IGJyZWVkXC1pblwtbGFyZ2VcLW51bWJlcnM7CivloYQgPiBlbGV2YXRlZFwtYmFua1wtaW5cLWZpZWxkOwor6J6IID4gZGllbXllbGlsdXNcLXB5cm9nYXN0ZXI7CivnqqwgPiBhXC1zbWFsbFwtZG9vclwtb3JcLXdpbmRvdzsKK+essSA+IGFcLWJhc2tldFwtdHJhcFwtZm9yXC1maXNoOwor54m/ID4gc2hlZFwtb3JcLXBlblwtZm9yXC1jYXR0bGU7Civom5ggPiBhXC13ZWV2aWxcLWZvdW5kXC1pblwtcmljZTsKK+eVjiA+IGFcLWRyYWluXC1iZXR3ZWVuXC1maWVsZHM7Civpva8gPiB0ZWV0aFwtZ3Jvd25cLWluXC1vbGRcLWFnZTsKK+m5oyA+IGZhYnVsb3VzXC1teXRoaWNhbFwtYmlyZDsKK+m2vCA+IGZhYnVsb3VzXC1teXRoaWNhbFwtYmlyZDsKK+mwhiA+IHNjb21iZXJvbW9ydXNcLXNpbmVuc2lzOwor6a+ZID4gc2NvbWJlcm9tb3J1c1wtc2luZW5zaXM7CivprpMgPiBtaW5jZWRcLWFuZFwtc2FsdGVkXC1maXNoOwor6amMID4gbmFtZVwtb2ZcLWFcLWZhbW91c1wtaG9yc2U7Civpn7kgPiBtdXNpY1wtb2ZcLWJlbGxcLWFuZFwtZHJ1bTsKK+mcvSA+IHRvXC1jbGVhclwtdXBcLWFmdGVyXC1yYWluOwor6ZuYID4gZHllXC1tYWRlXC1mcm9tXC1yZWRcLXNvaWw7CivpmIcgPiBhXC1idWRkaGlzdFwtaGlnaFwtcHJpZXN0Owor6ZGQID4gYm9sdFwtb2ZcLWFcLWNoaW5lc2VcLWxvY2s7CivpjIYgPiB0aGVcLWNvbG9yXC1vZlwtYVwtbWluZXJhbDsKK+mErSA+IHN0YXRlXC1pblwtdG9kYXknJ3NcLWhlbmFuOwor6YSQID4gdG93blwtaW5cLWhlbmFuXC1wcm92aW5jZTsKK+mBsCA+IGdydW50aW5nXC1zb3VuZFwtb2ZcLXBpZ3M7CivovqUgPiB2YXJpZXR5XC1vZlwtbWFyc2hcLWdyYXNzOwor6LOSID4gYnV5XC1hbmRcLXNlbGxcLW9uXC1jcmVkaXQ7CivosqsgPiBhXC1zdHJpbmdcLW9mXC0xMDAwXC1jb2luczsKK+iwgiA+IGNvbnN1bHRcLWNhcmVmdWxseVwtd2l0aDsKK+irnCA+IGFuXC1pbnRlbGxpZ2VuY2VcLXJlcG9ydDsKK+irlyA+IGNvbnN1bHRcLWNhcmVmdWxseVwtd2l0aDsKK+ipqiA+IGRpZmZpY3VsdHlcLWluXC1zcGVha2luZzsKK+iokCA+IGV4cG9zZVwtb3RoZXInJ3NcLXNlY3JldHM7Civop78gPiBhXC1ib2RraW5cLW1hZGVcLW9mXC1pdm9yeTsKK+imsiA+IGhhdmVcLWltcGVyaWFsXC1hdWRpZW5jZTsKK+imgCA+IHZhcmlhbnRcLW9mXC1yYWRpY2FsXC0xNDY7CivopJ8gPiBpbm5lclwtc2hpcnRcLW9yXC1zaW5nbGV0Owor6KGtID4gdGhlXC1sYXBlbFwtb2ZcLWFcLWdhcm1lbnQ7CivooaYgPiBzbW9vdGhcLW91dFwtdGhlXC1jbG90aGVzOwor6Ji/ID4gdHlwZVwtb2ZcLWNyZWVwaW5nXC1wbGFudDsKK+iVlSA+IGNhcnlvcHRlcmlzXC1kaXZhcmljYXRhOwor6JSvID4gYVwtdmFyaWV0eVwtb2ZcLWFydGVtaXNpYTsKK+iQtCA+IG1lZGljaW5hbFwtcG9pc29uXC1wbGFudDsKK+iPtiA+IHNwZWNpZXNcLW9mXC13YXRlclwtcGxhbnQ7CivojrggPiBjYXJ5b3B0ZXJpc1wtZGl2YXJpY2F0YTsKK+iOmSA+IHNwZWNpZXNcLW9mXC13YXRlclwtcGxhbnQ7CivohKQgPiByYXdcLW1lYXRcLWZvclwtc2FjcmlmaWNlOwor6ICsID4gZHJpbGxcLWZvclwtc293aW5nXC1ncmFpbjsKK+iApyA+IGRyaWxsXC1mb3JcLXNvd2luZ1wtZ3JhaW47CivogIIgPiB2YXJpYW50XC1vZlwtcmFkaWNhbFwtMTI1Owor57mmID4gc3RyaW5nXC1vZlwtY29wcGVyXC1jb2luczsKK+e5iCA+IHN0cmluZ1wtb2ZcLWNvcHBlclwtY29pbnM7Civnt4UgPiBzaWxrXC1vZlwtcHVycGxpc2hcLWNvbG9yOwor57GsID4gYmFtYm9vXC1vclwtd29vZGVuXC1mZW5jZTsKK+evoiA+IHRoZVwtbmFtZVwtb2ZcLWJhbWJvb1wtaGF0Owor5626ID4gYmFtYm9vXC1iYXNrZXRcLW9yXC1jaGVzdDsKK+ebniA+IHNtYWxsXC1jdXBcLW9yXC1jb250YWluZXI7CivnmYogPiBhXC1kaXNlYXNlXC1vZlwtdGhlXC1oZWFydDsKK+eRsSA+IGFcLWdlbVwtdXNlZFwtYXNcLWVhclwtcGx1ZzsKK+eQoCA+IGFcLWdlbVwtdXNlZFwtYXNcLWVhclwtcGx1ZzsKK+ePoyA+IG5hbWVcLW9mXC1hXC1raW5kXC1vZlwtamFkZTsKK+eOvCA+IGJlYXV0aWZ1bFwtY29sb3JcLW9mXC1nZW07CivnibcgPiBjb3dcLW9yXC1veFwtb2ZcLW9uZVwtY29sb3I7CivnhIQgPiByaXNpbmdcLWZsYW1lc1wtb3JcLWZ1bWVzOwor54OWID4gY2FsYW1pdGllc1wtZnJvbVwtaGVhdmVuOwor5q6iID4gYmVcLWluXC1ncmVhdFwtZGlmZmljdWx0eTsKK+ansSA+IGZpcmV3b29kXC1mb3JcLXNhY3JpZmljZTsKK+acjyA+IGxpZ2h0XC1vZlwtY3Jlc2NlbnRcLW1vb247Civml5AgPiBhblwtZW1icm9pZGVyZWRcLXBlbm5hbnQ7CivmlJkgPiB0b1wtZ2l2ZVwtYVwtaGVscGluZ1wtaGFuZDsKK+aRsCA+IHRvXC1zZWl6ZVwtd2l0aFwtdGhlXC1oYW5kOwor5pGAID4gdG9cLWNvdmVyXC13aXRoXC10aGVcLWhhbmQ7CivmkL4gPiB0b1wtY3J1c2hcLXdpdGhcLXRoZVwtaGFuZDsKK+aAuSA+IGFcLXBvbGl0ZVwtdmVyc2lvblwtb2ZcLWhlOwor5bySID4gdG9cLWtpbGxcLW9uZScnc1wtc3VwZXJpb3I7CivluoggPiB1c2VkXC1pblwtcGVyc29uJydzXC1uYW1lczsKK+W1tiA+IGxvd1wtcGFydFwtb2ZcLWFcLW1vdW50YWluOwor5a2SID4gbGFydmFlXC1vZlwtdGhlXC1tb3NxdWl0bzsKK+WjliA+IG9wZW5cLXNwYWNlXC1hbG9uZ1wtd2F0ZXI7CivlmYAgPiBzcGlydFwtb3V0XC1vZlwtdGhlXC1tb3V0aDsKK+WPnSA+IHRvXC1yZXNwZWN0ZnVsbHlcLWluZm9ybTsKK+S8riA+IHRvXC1tYWtlXC1hXC1ncmVhdFwtZWZmb3J0Owor5LalID4gdW5ldmVubHlcLWZpdHRpbmdcLXRlZXRoOwor5LakID4gc291bmRcLW9mXC1jaGV3aW5nXC1ib25lczsKK+S2giA+IGFcLXNxdWlycmVsXC1saWtlXC1hbmltYWw7Civks64gPiB0b1wtbG9va1wtYXRcLWluXC1zdXJwcmlzZTsKK+SymiA+IGFcLXNlY29uZFwtbmFtZVwtZm9yXC1zaGFkOwor5LC1ID4gbG9va3NcLWxpa2VcLWNvbW1vblwtY2FycDsKK+SwsCA+IGRyZWFyeVwtY3JpZXNcLW9mXC1naG9zdHM7CivksK0gPiBkcmVhcnlcLWNyaWVzXC1vZlwtZ2hvc3RzOwor5K66ID4gbHV4dXJpYW50XC1vZlwtdGhlXC1ncmFzczsKK+SurSA+IHRvXC1sb29rXC1hdFwtaW5cLXN1cnByaXNlOwor5K6qID4gdG9cLWdlbGRcLWFcLWhvcnNlXC1vclwtYXNzOwor5Km8ID4gc3RpdGNoZXNcLW9uXC1hXC1jb3ZlcmxldDsKK+SpjSA+IHRvXC1sb29rXC1wYWxlXC1vclwtcGFsbGlkOwor5Ki1ID4gcmFpbmVkXC1mb3JcLWFcLWxvbmdcLXRpbWU7CivkqKwgPiByYWluZWRcLWZvclwtYVwtbG9uZ1wtdGltZTsKK+SooSA+IHJhaW5lZFwtZm9yXC1hXC1sb25nXC10aW1lOwor5KaIID4gdG9cLXNpZ2hcLWluXC1sYW1lbnRhdGlvbjsKK+SlnyA+IGFcLW1ldGFsXC1tYXJraW5nXC1cLXN0YWtlOwor5KKOID4gaW5kaWNhdGluZ1wtZXhjbGFtYXRpb247CivkobUgPiBkZWNvcmF0aW9uXC1vblwtY2FycmlhZ2U7CivkobAgPiBzdHJvbmdcLWFuZFwtZHVyYWJsZVwtaHViOwor5KGsID4gY292ZXJpbmdcLW9mXC1hXC1jYXJyaWFnZTsKK+ShgSA+IG5vdFwtd2VsbFwtZm9ybWVkXC1maWd1cmU7Civkn70gPiBzY2F0dGVyZWRcLW9yXC1kaXNwZXJzZWQ7CivknpggPiB0b1wtZ29cLXN0cmFpZ2h0XC1mb3J3YXJkOwor5J2iID4gYW5cLWFuaW1hbFwtaW5cLW9sZFwtdGltZXM7CivknaEgPiBhblwtYW5pbWFsXC1pblwtb2xkXC10aW1lczsKK+SdkyA+IGxvbmdcLWJlYXJkXC1vclwtd2hpc2tlcnM7CivknLogPiBodXNraW5nXC1iZWFuc1wtZm9yXC1jYWtlOwor5JyhID4gdG9cLXNtZWxsXC10aGVcLWZyYWdyYW50czsKK+SbmSA+IHRvXC1zbWVsbFwtdGhlXC1mcmFncmFuY2U7Civkmp4gPiB0aGVcLW1pZGRsZVwtb2ZcLXRoZVwtaG9ybjsKK+SZhCA+IGNsb3RoZXNcLXdpdGhcLXRoaWNrXC1oZW07CivkmL0gPiBjbG90aGluZ1wtYW5kXC1vcm5hbWVudHM7Civkl5AgPiBhXC13ZWV2aWxcLWZvdW5kXC1pblwtcmljZTsKK+SVtCA+IGFcLXNlY29uZFwtZm9yXC1tb25rc2hvb2Q7CivklKAgPiB0aGluXC1yb290XC1vZlwtdGhlXC1sb3R1czsKK+SPqSA+IHRvXC1zaHJ1Z1wtdGhlXC1zaG91bGRlcnM7CivkjbEgPiB0aGVcLXdpbGRcLWdvYXRcLW9yXC1zaGVlcDsKK+SLqiA+IGZpbmVcLWFuZFwtZGVsaWNhdGVcLXNpbGs7Civki40gPiBmaW5lXC1hbmRcLWRlbGljYXRlXC1zaWxrOwor5IqPID4gbWl4aW5nXC1yaWNlXC13aXRoXC1icm90aDsKK+SKgyA+IG1peGluZ1wtcmljZVwtd2l0aFwtYnJvdGg7CivkiIQgPiBhXC1raW5kXC1vZlwtc29saWRcLWJhbWJvbzsKK+SHoyA+IGJhbWJvb1wtd2l0aFwtd2hpdGVcLWJhcms7CivkhKAgPiB0b1wtc2FjcmlmaWNlXC10b1wtaGVhdmVuOwor5IOnID4gc291bmRcLW9mXC1mYWxsaW5nXC1yb2NrczsKK+SDlCA+IHNvdW5kXC1vZlwtZmFsbGluZ1wtcm9ja3M7CivkgqIgPiBzb3VuZFwtb2ZcLWZhbGxpbmdcLXJvY2tzOwor5IKgID4gc291bmRcLW9mXC1mYWxsaW5nXC1yb2NrczsKK+SAhCA+IGNvbnRhaW5lclwtZnVsbFwtb2ZcLWZvb2Q7Civjv4sgPiBhXC1raW5kXC1vZlwtc2tpblwtZGlzZWFzZTsKK+O8niA+IGphclwtd2l0aFwtYVwtc21hbGxcLW1vdXRoOwor47qeID4gdG9cLXNpZ25cLWluXC1sYW1lbnRhdGlvbjsKK+O4ryA+IGFcLWZpbmVcLWJyZWVkXC1vZlwtY2F0dGxlOwor47WvID4gc291bmRcLW9mXC13YXRlclwtZmxvd2luZzsKK+OzryA+IGdvZGRlc3NcLW9mXC1hblwtaW5rXC1zbGFiOwor47KxID4gbG9uZ1wtYmVhcmRcLW9yXC13aGlza2VyczsKK+OxhiA+IHRvXC1zbWlsZVwtYXRcLWVhY2hcLW90aGVyOwor47C/ID4gdG9cLXNpZ2hcLWluXC1sYW1lbnRhdGlvbjsKK+OwqCA+IHRvXC10YWtlXC1icmVhdGhcLW9yXC1yZXN0Owor466RID4gc291bmRcLW9mXC1icm9rZW5cLXN0aWNrczsKK+OtryA+IHRyZWVcLXdpdGhcLXNtYWxsXC1sZWF2ZXM7Civjq4ogPiBmbHV0dGVyaW5nXC1vZlwtdGhlXC1mbGFnOwor46qjID4gYVwtcGxhY2VcLWluXC1oYW5cLWR5bmFzdHk7Civjqp8gPiB0b1wtcmVnYXJkXC1hc1wtaW1wb3J0YW50Owor46qeID4gdG9cLWJlXC1oZWxkXC1ieVwtdGhlXC1oYW5kOwor46m6ID4gYVwtY3JhY2tcLW9uXC10aGVcLXV0ZW5zaWw7CivjqZwgPiB0b1wtYmVcLWluXC1wb3NzZXNzaW9uXC1vZjsKK+OpjiA+IHRvXC1wcmVzc1wtd2l0aFwtYVwtZmluZ2VyOwor46e2ID4gdGhlXC1qaW5nbGluZ1wtb2ZcLW1ldGFsczsKK+OnmSA+IHRvXC1naXZlXC1hXC1wbGF5ZnVsXC1ibG93Owor46eDID4gdG9cLXJlY2VpdmVcLXdoYXRcLWlzXC1kdWU7CivjpqMgPiB0b1wtdGFsa1wtaW5cLW9uZScnc1wtc2xlZXA7CivjpoQgPiBoYXJkXC10b1wtc2F5XC1vclwtcHJlZGljdDsKK++kkCA+IHR5cGVcLW9mXC1jcmVlcGluZ1wtcGxhbnQ7CivvpI8gPiBuZXRcLWZvclwtY2F0Y2hpbmdcLWJpcmRzOwor46SKID4gY2hlZXJmdWxcLWFuZFwtZXh1YmVyYW50Owor46OaID4gdG9cLWdvXC1zdHJhaWdodFwtZm9yd2FyZDsKK+OiiSA+IGFcLXJvb21cLXdpdGhcLW9wZW5cLXNwYWNlOwor46CUID4gc2hhcGVzXC1vZlwtdGhlXC1tb3VudGFpbjsKK+OfuyA+IHRoZVwtbW9hdFwtYXJvdW5kXC1hXC1jaXR5Owor45uzID4gYW5cLWFibm9tYWxcLXVuYm9yblwtYmFieTsKK+OatyA+IHRoZVwtYnJlYXN0c1wtb2ZcLWFcLXdvbWFuOwor45mzID4gcnVnZ2VkbmVzc1wtb2ZcLXRoZVwtcm9hZDsKK+OZpCA+IGFcLWNyYWNrXC1pblwtZWFydGhlbndhcmU7CivjmZggPiB1c2VkXC1pblwtbmFtaW5nXC1hXC1wbGFjZTsKK+OYrSA+IGFcLWhvbGxvd1wtaW5cLXRoZVwtZ3JvdW5kOwor45isID4gYVwtaG9sbG93XC1pblwtdGhlXC1ncm91bmQ7Civjl4IgPiB0b1wta2VlcFwtdGhlXC1tb3V0aFwtc2h1dDsKK+OWkCA+IHNvdW5kXC1vZlwtY2FsbGluZ1wtZHVja3M7CivjlLQgPiBhZ3JpY3VsdHVyYWxcLWltcGxlbWVudDsKK+OTuSA+IGFcLXNoYXJwXC1wb2ludGVkXC13ZWFwb247Civjk6YgPiB0b1wtZGVsaWJlcmF0ZVwtYW5kXC1wbGFuOwor45OYID4gamFkZVwtd2l0aFwtc29tZVwtZGVmZWN0czsKK+iniSA+IHRvXC13YWtlXC11cFwtZnJvbVwtc2xlZXA7CivnkrAgPiBqYWRlXC1yaW5nXC1vclwtYnJhY2VsZXQ7CivoprogPiB0b1wtd2FrZVwtdXBcLWZyb21cLXNsZWVwOwor6KaaID4gdG9cLXdha2VcLXVwXC1mcm9tXC1zbGVlcDsKK+WIkiA+IHRvXC1yb3dcLW9yXC1wYWRkbGVcLWJvYXQ7CivloKogPiBhZGVxdWF0ZWx5XC1jYXBhYmxlXC1vZjsKK+eOryA+IGphZGVcLXJpbmdcLW9yXC1icmFjZWxldDsKK+WQtCA+IG5hbWVcLW9mXC13YXJyaW5nXC1zdGF0ZTsKK+mztCA+IGNyeVwtb2ZcLWJpcmRcLW9yXC1hbmltYWw7CivlkYkgPiBvbmVcLW9mXC13YXJyaW5nXC1zdGF0ZXM7CivpprMgPiBnb1wtcXVpY2tseVwtb3JcLXN3aWZ0bHk7Civmpo4gPiBzbWFsbFwtZXZlcmdyZWVuXC1zaHJ1YjsKK+m4oyA+IGNyeVwtb2ZcLWJpcmRcLW9yXC1hbmltYWw7CivpqbAgPiBnb1wtcXVpY2tseVwtb3JcLXN3aWZ0bHk7Civlp7sgPiByZWxhdGl2ZXNcLWJ5XC1tYXJyaWFnZTsKK+etkiA+IHRoaWNrXC1waWVjZVwtb2ZcLWJhbWJvbzsKK+W4mCA+IGZsYWdcLXNpZ25cLW9mXC1hXC10YXZlcm47CivnqLsgPiByaWNlXC1ncm93aW5nXC1pblwtZmllbGQ7CivnqLIgPiByaWNlXC1ncm93aW5nXC1pblwtZmllbGQ7CivnprAgPiBvbmUnJ3NcLWRlY2Vhc2VkXC1mYXRoZXI7CivliYIgPiBtZWRpY2luYWxcLXByZXBhcmF0aW9uOwor54+CID4gaW5mZXJpb3JcLWtpbmRcLW9mXC1qYWRlOwor5ZifID4gc291bmRcLW9mXC1ob3JuXC10b290aW5nOwor55GcID4gZmxhd2xlc3NcLWdlbVwtb3JcLWpld2VsOwor54+RID4gYVwtZ2VtXC1jdXRcLWxpa2VcLWRyYWdvbjsKK+ivrCA+IG1ha2VcLWZhbHNlXC1hY2N1c2F0aW9uOwor5auWID4gcGF0cm9uaXplXC1wcm9zdGl0dXRlczsKK+mjkiA+IHRoZVwtc291bmRcLW9mXC10aGVcLXdpbmQ7CivplKIgPiBydW5cLW1ldGFsXC1pbnRvXC1jcmFja3M7CivmjpYgPiBzdXBwb3J0XC13aXRoXC10aGVcLWFybXM7Civmo6MgPiBrZXJyaWFcLWphcG9uaWNhXC1wbGFudDsKK+iPgSA+IGZsb3dlclwtb2ZcLWxlZWtcLWZhbWlseTsKK+WSqSA+IHRoZVwtYmxlYXRpbmdcLW9mXC1zaGVlcDsKK+ePiSA+IHN0b25lXC1yZXNlbWJsaW5nXC1qYWRlOwor6ZKOID4gdG9vbFwtZm9yXC1ib3JpbmdcLWhvbGVzOwor5oqfID4gcm9sbFwtYXJvdW5kXC13aXRoXC1oYW5kOwor6La4ID4gc2VsbFwtb3JcLWJ1eVwtd2hvbGVzYWxlOwor5aajID4gb25lJydzXC1kZWNlYXNlZFwtbW90aGVyOwor5bWKID4gZGlzdHJpY3RcLWluXC1zaGFvaHNpbmc7CivnrLggPiBmbGF0XC1iYXNrZXRcLWZvclwtZ3JhaW47CivnpaIgPiBvbmUnJ3NcLWRlY2Vhc2VkXC1mYXRoZXI7CivogqsgPiB0aGVcLWdpenphcmRcLW9mXC1hXC1mb3dsOwor6IurID4gcnVzaFwtb3JcLXN0cmF3XC1tYXR0aW5nOwor5bOkID4gaGlnaFwtcG9pbnRlZFwtbW91bnRhaW47Civnp60gPiBvbmVcLXRob3VzYW5kXC1taWxsaW9uczsKK+WnkiA+IHdpZmVcLW9mXC1lbGRlclwtYnJvdGhlcjsKK+iTsCA+IHRvXC1pbmNyZWFzZVwtZml2ZVwtZm9sZDsKK+iSjCA+IGFydGVtaXNpYVwtc3RlbGxlcmlhbmE7CivphYMgPiB0aGVcLXNwaXJpdFwtb2ZcLWFcLWJlaW5nOwor57OXID4gcGFyY2hlZFwtd2hlYXRcLW9yXC1yaWNlOwor6L6LID4gZXh0ZXJpb3JcLXJpbVwtb2ZcLXdoZWVsOwor6aurID4gY2hpbGRyZW4nJ3NcLWhhaXJcLXN0eWxlOwor6Jm6ID4gbGFyZ2VcLXBvaXNvbm91c1wtc25ha2U7CivphrUgPiBjb250cmlidXRlXC1mb3JcLWRyaW5rczsKK+iarCA+IGFcLXZhcmlldHlcLW9mXC1iaXZhbHZlczsKK+ijvCA+IHRvXC10YWtlXC1vZmZcLW9uZScnc1wtdG9wOwor55y1ID4gZXllc1wtZGlzZWFzZWRcLWFuZFwtZGltOwor5p61ID4gaG9sbG9cLXN0dW1wXC1vZlwtYVwtdHJlZTsKK+iYqSA+IGFydGVtaXNpYVwtc3RlbGxhcmlhbmE7CivpvIMgPiB0aGVcLWVkaWJsZVwtd2F0ZXJcLWZyb2c7Civpt4AgPiB0aGVcLWZpc2hpbmdcLWNvcm1vcmFudDsKK+m0oCA+IGFcLWtpbmRcLW9mXC1uaWdodGluZ2FsZTsKK+mwpCA+IHNlcmlvbGFcLXFpbnF1ZXJhZGlhdGE7Civpr4QgPiBsZXBpZG90cmlnbGFcLXN0cmF1Y2hpOwor6auIID4gZGVmaW5lZFwtYXNcLXRoZVwtcGVsdmlzOwor6aK4ID4gY29vbFwtYnJlZXplXC1vZlwtYXV0dW1uOwor6aKvID4gdGhlXC1zb3VuZFwtb2ZcLXRoZVwtd2luZDsKK+mMriA+IHJ1blwtbWV0YWxcLWludG9cLWNyYWNrczsKK+mHuiA+IHRvb2xcLWZvclwtYm9yaW5nXC1ob2xlczsKK+mFjiA+IGRvdWJsZVwtZmVybWVudGVkXC13aW5lOwor6LyuID4gZXh0ZXJpb3JcLXJpbVwtb2ZcLXdoZWVsOwor6LyeID4gZXh0ZXJpb3JcLXJpbVwtb2ZcLXdoZWVsOwor6LqJID4gc2VsbFwtb3JcLWJ1eVwtd2hvbGVzYWxlOwor6LC6ID4gdGhlXC1tb3V0aFwtb2ZcLWFcLXZhbGxleTsKK+iqoyA+IG1ha2VcLWZhbHNlXC1hY2N1c2F0aW9uOwor6KC4ID4gYXVsYWNvcGhvcmFcLWZlbW9yYWxpczsKK+iekiA+IGF1bGFjb3Bob3JhXC1mZW1vcmFsaXM7CivonLogPiByZWZsZWN0aW9uXC1vZlwtcmFpbmJvdzsKK+ichiA+IGFcLXZhcmlldHlcLW9mXC1iaXZhbHZlczsKK+iYmCA+IGFcLWtpbmRcLW9mXC13aWxkXC1naW5nZXI7CivolZogPiB0aGVcLWNhbHl4XC1vZlwtYVwtZmxvd2VyOwor6JSeID4gYXJ0ZW1pc2lhXC1zdGVsbGVyaWFuYTsKK+iRuSA+IGtpbmRcLW9mXC1jaHJ5c2FudGhlbXVtOwor6JC7ID4gc21hbGxcLWJ1ZGRoaXN0XC10ZW1wbGU7CivoiJogPiB0b1wtcHV0XC1vdXRcLXRoZVwtdG9uZ3VlOwor57+PID4gdGhlXC1zb3VuZFwtb2ZcLXRoZVwtd2luZDsKK+e5tCA+IGFcLWtpbmRcLW9mXC1maXNoaW5nXC1uZXQ7Civnq7wgPiBiYW1ib29cLWNvdmVyXC1mb3JcLWJvYXQ7CivnpqggPiBwcmF5XC1mb3JcLWdvb2RcLWZvcnR1bmU7CivnmaUgPiBvYnN0cnVjdGlvblwtb2ZcLWJvd2VsczsKK+eXjyA+IGFcLWJydWlzZVwtb3JcLWNvbnR1c2lvbjsKK+eTjyA+IGFcLWdlbVwtY3V0XC1saWtlXC1kcmFnb247CivnkqEgPiBqYWRlXC1sb29rXC1hbGlrZVwtc3RvbmU7CivnkaggPiBqYWRlXC1sb29rXC1hbGlrZVwtc3RvbmU7CivnkYAgPiBzdG9uZVwtcmVzZW1ibGluZ1wtamFkZTsKK+a+giA+IGNsZWFyXC1hbmRcLXN0aWxsXC13YXRlcjsKK+a3nCA+IHJvYXJcLW9mXC1kYXNoaW5nXC13YXZlczsKK+ayhyA+IGZsb3dpbmdcLWFuZFwtZW5ndWxmaW5nOwor5qqfID4gc21hbGxcLWV2ZXJncmVlblwtc2hydWI7Civmmo4gPiBzdW5cLWJlZ2lubmluZ1wtZGVjbGluZTsKK+aRtiA+IHJvbGxcLWFyb3VuZFwtd2l0aFwtaGFuZDsKK+W2oCA+IGhpZ2hcLXBvaW50ZWRcLW1vdW50YWluOwor5bW8ID4gd2luZGluZ1wtbW91bnRhaW5cLXBhdGg7Civln7UgPiBoYXJkZW5lZFwtZGlydFwtb3JcLWNsYXk7Civll7sgPiB0b1wtc2NyZWVuXC5cLWxvcXVhY2lvdXM7CivlkLMgPiBvbmVcLW9mXC13YXJyaW5nXC1zdGF0ZXM7CivljJ8gPiBkaXZhblwtZm9yXC10d29cLXBlcnNvbnM7CivlipEgPiBtZWRpY2luYWxcLXByZXBhcmF0aW9uOwor5Ym+ID4gdG9cLXBpY2tcLXVwXC13aXRoXC1rbmlmZTsKK+WJpCA+IG1lZGljaW5hbFwtcHJlcGFyYXRpb247CivktZcgPiB0b1wtY2xlYW5cLXRoZVwtd2l0aGVyZWQ7CivktYQgPiB0b1wtYm9pbFwtb3JcLXN0ZXdcLXdoZWF0Owor5LS2ID4gdG9cLWJvaWxcLW9yXC1zdGV3XC13aGVhdDsKK+S0lCA+IHRoZVwtZmlzaGluZ1wtY29ybW9yYW50Owor5LO5ID4gYVwta2luZFwtZG92ZVwtbGlrZVwtYmlyZDsKK+SznSA+IGFcLWtpbmRcLW9mXC1zbWFsbFwtYmlyZHM7CivksZ8gPiBhXC1raW5kXC1vZlwtc2lsdmVyXC1maXNoOwor5K+vID4gaGFuZ1wtZG93blwtb2ZcLXRoZVwtaGFpcjsKK+SvrSA+IG9mXC1uaWNlXC1hbmRcLWdvb2RcLWhhaXI7CivkroQgPiBhblwtb25lXC15ZWFyXC1vbGRcLWhvcnNlOwor5K20ID4gYW5cLW9uZVwteWVhclwtb2xkXC1ob3JzZTsKK+SruSA+IHRoZVwtc291bmRcLW9mXC10aGVcLXdpbmQ7CivkqqUgPiBzaGFsbG90c1wtb3JcLXNjYWxsaW9uczsKK+SpqSA+IGFcLW1lYXN1cmVcLW9mXC1jYXBhY2l0eTsKK+SmvSA+IGFuXC1lYXN0XC1hbmRcLXdlc3RcLXdhbGw7CivkppogPiB3aWRlXC1vcGVuXC1vZlwtdGhlXC1kb29yOwor5KaMID4gdGhlXC1kb29yXC1pc1wtd2lkZVwtb3BlbjsKK+SliCA+IHRoZVwtc3ltYm9sXC1mb3JcLWNvYmFsdDsKK+SklyA+IHRhc3RlXC1vZlwtc3Ryb25nXC1kcmluazsKK+SiqSA+IHRvXC1mb3JiaWRcLXRvXC1wcm9oaWJpdDsKK+ShtiA+IHZlaGljbGVzXC1hbmRcLWdhcm1lbnRzOwor5J6aID4gdG9cLWhhbmdcLW9uXC1hXC1iaWdcLXRyZWU7CivknZYgPiByZXB0aWxlc1wtd2l0aG91dFwtZmVldDsKK+SbsSA+IHRvXC10YWxrXC11bnJlbWl0dGluZ2x5Owor5JuKID4gY2hlZXJmdWxcLWFsbFwtdGhlXC10aW1lOwor5JuDID4gdXNlZFwtaW5cLXBlcnNvbicnc1wtbmFtZTsKK+SYkCA+IHRoZVwtYmxlZWRcLWF0XC10aGVcLW5vc2U7Civkl4ogPiB0b1wtcHV0XC1vdXRcLXRoZVwtdG9uZ3VlOwor5JeJID4gYVwtc21hbGxcLXNvbGl0YXJ5XC13YXNwOwor5JaUID4gYVwta2luZFwtb2ZcLXdoaXRlXC10aWdlcjsKK+SWjSA+IHRvXC1hY3RcLXdpdGhcLXJldmVyZW5jZTsKK+SUtSA+IGZyYWdyYW50XC10aG9yb3VnaHdvcnQ7CivklIogPiBkZW5zZVwtZ3Jvd3RoXC1vZlwtZ3Jhc3M7Civkk5IgPiBzY2lycHVzXC1jeXBlcmludXNcLXZhcjsKK+SSpiA+IGdyYXNzXC1mbG9hdHNcLW9uXC13YXRlcjsKK+SShCA+IGZ1bGx5XC1sYWRlblwtb2ZcLWFcLWJvYXQ7CivkkZ0gPiBhXC1zbWFsbFwtY3VwXC13aXRoXC1lYXJzOwor5I+kID4gdG9wXC1vZlwtdGhlXC1odW1hblwtaGVhZDsKK+SOtiA+IG9mZmVyaW5nXC1ibG9vZFwtdG9cLWdvZDsKK+SOmiA+IHRoZVwtZW5kXC1vZlwtYmlyZFwtd2luZ3M7CivkjpYgPiBzb2FyaW5nXC11cFwtaW5cLXRoZVwtc2t5Owor5I6BID4gdXNlZFwtaW5cLXBlcnNvbicnc1wtbmFtZTsKK+SMpyA+IGFcLWtpbmRcLW9mXC1zaWxrXC1mYWJyaWM7CivkjJ8gPiB0b1wtd2VhdmVcLXNpbGtcLXJpYmJvbnM7Civki4IgPiBkcmVzc2VzXC1mb3JcLXRoZVwtYnJpZGU7CivkiKcgPiBza2luXC1vZlwtYmFtYm9vXC1zaG9vdHM7CivkiJ4gPiBhbmNpZW50XC1uYW1lXC1vZlwtaW5kaWE7Civkh74gPiBhXC1mbHV0ZVwtd2l0aFwtMjNcLXR1YmVzOwor5IewID4gYVwtYmFtYm9vXC1iaW5kZWRcLXRvcmNoOwor5IehID4gdGhlXC1zaHV0dGxlXC1vZlwtYVwtbG9vbTsKK+SGoCA+IGFcLWdvdmVybm1lbnRcLW9mZmljaWFsOwor5IabID4gc29tZXRoaW5nXC1pblwtdGhlXC1jYXZlOwor5IWXID4gZm91clwtYnVuZGxlXC1vZlwtZ3JhaW5zOwor5IWRID4gZm91clwtYnVuZGxlXC1vZlwtZ3JhaW5zOwor5IGtID4gdG9cLWdpdmVcLWFuXC1hbmdyeVwtbG9vazsKK+SBmiA+IGFcLWtpbmRcLW9mXC1leWVcLWRpc2Vhc2U7CivkgL0gPiB0b1wtbG9va1wtYXRcLWVhY2hcLW90aGVyOwor5ICgID4gYVwtY2hpbmVzZVwtZmFtaWx5XC1uYW1lOwor5ICTID4gdG9cLXR1cm5cLW9uZScnc1wtZXllc1wtdG87Civjv7QgPiB3aWRlXC1waWVjZVwtb2ZcLWxlYXRoZXI7Civjv68gPiB3aWRlXC1waWVjZVwtb2ZcLWxlYXRoZXI7Civjv6sgPiB0b1wtc3BsaXRcLXRhbmdsZWRcLWhlbXA7Civjv48gPiBwYXJhbHlzaXNcLW9mXC10aGVcLWJvZHk7Civjvr4gPiBkaXNlYXNlXC1vZlwtdGhlXC10aHJvYXQ7CivjvqQgPiBkaXNlYXNlXC1vZlwtdGhlXC10aHJvYXQ7CivjvLIgPiBzb3VuZFwtb2ZcLWJyb2tlblwtdGlsZXM7CivjvJAgPiBhXC1raW5kXC1vZlwtd2hpdGVcLW1lbG9uOwor47m2ID4gYVwta2luZFwtb2ZcLXdpbGRcLWFuaW1hbDsKK+O5piA+IGRvZ1wtd2l0aFwtYVwtc2hvcnRcLXRhaWw7CivjuZQgPiBjYXR0bGVcLXdpdGhcLWxvbmdcLWJhY2s7Civjt5cgPiB1c2VkXC1pblwtcGVyc29uJydzXC1uYW1lOwor47ePID4gdXNlZFwtaW5cLXBlcnNvbicnc1wtbmFtZTsKK+O1rCA+IHVzZWRcLWluXC1wZXJzb24nJ3NcLW5hbWU7CivjtaggPiBhXC1kcnlcLWxhbmRcLWluXC1hXC1yaXZlcjsKK+OziCA+IGFcLWdyZWF0XC1mbG93XC1vZlwtd2F0ZXI7CivjsZ8gPiB0b1wtcmlwXC1vcGVuXC10aGVcLWZsZXNoOwor47CEID4gYVwtc21hbGxcLWNoZXN0bnV0XC10cmVlOwor46+lID4gYVwtY2hpbmVzZVwtZmFtaWx5XC1uYW1lOwor466XID4gdGhlXC1oYW5kbGVcLW9mXC1hXC1zcGVhcjsKK+OtjSA+IGNhcGl0YWxcLWZvcm1cLW9mXC1zZXZlbjsKK+OsoCA+IHRvXC1leHBvc2VcLXRvXC1zdW5saWdodDsKK+OskyA+IHRvXC1leHBvc2VcLXRvXC1zdW5saWdodDsKK+OsgiA+IHVzZWRcLWluXC1wZXJzb24nJ3NcLW5hbWU7CivjqZ8gPiB0b1wtc2V3XC1zb21lXC1vcm5hbWVudHM7CivjqIwgPiB0b1wtbWlsa1wtYVwtY293XC1vclwtZ29hdDsKK+OjnSA+IGFcLWNoaW5lc2VcLWZhbWlseVwtbmFtZTsKK+OgiyA+IGFcLWxvZnR5XC1tb3VudGFpblwtcGVhazsKK+OfniA+IHByZWNpcGl0b3VzXC1hbmRcLWxvZnR5Owor45+dID4gdG9cLWJhbmtcLXVwXC13aXRoXC1lYXJ0aDsKK+OfnCA+IHNoYXBlXC1vZlwtdGhlXC1tb3VudGFpbjsKK+OfmSA+IHNoYXBlXC1vZlwtdGhlXC1tb3VudGFpbjsKK+OfliA+IGFcLWRpYWxlY3RcLW9mXC1taW5vcml0eTsKK+OfjiA+IGFcLWxvbmdcLW1vdW50YWluXC1yaWRnZTsKK+OegSA+IGNhblwtbm90XC13YWxrXC1ub3JtYWxseTsKK+OdviA+IGNhblwtbm90XC13YWxrXC1ub3JtYWxseTsKK+OYsCA+IG5hbWVcLW9mXC1hXC1vbGRcLWNvdW50cnk7CivjmKEgPiBhXC1wZW5cLWZvclwtd2lsZFwtYmVhc3RzOwor45iWID4gdG9cLW1ha2VcLWFcLWRpc3R1cmJhbmNlOwor45eBID4gdGhlXC1yb29mXC1vZlwtdGhlXC1tb3V0aDsKK+OWlyA+IGhpZ2hcLXJpZGdlc1wtb2ZcLWNsaWZmczsKK+OVoiA+IHByb2ZvdW5kXC1zaWduaWZpY2FuY2U7CivjkoYgPiB0b1wtZ2F0aGVyXC10aGVcLWhhcnZlc3Q7Civku4AgPiBmaWxlXC1vZlwtdGVuXC1zb2xkaWVyczsKK+iyrCA+IG9uZScnc1wtcmVzcG9uc2liaWxpdHk7CivniLUgPiBmZXVkYWxcLXRpdGxlXC1vclwtcmFuazsKK+i0oyA+IG9uZScnc1wtcmVzcG9uc2liaWxpdHk7CivllYogPiBleGNsYW1hdG9yeVwtcGFydGljbGU7CivmpZogPiBuYW1lXC1vZlwtZmV1ZGFsXC1zdGF0ZTsKK+aJmCA+IHRvXC1ob2xkXC11cFwtd2l0aFwtcGFsbTsKK+axsiA+IGRyYXdcLXdhdGVyXC1mcm9tXC13ZWxsOwor6a2FID4ga2luZFwtb2ZcLWZvcmVzdFwtZGVtb247CivkvIogPiB0aGlyZFwtcGVyc29uXC1wcm9ub3VuOwor6bi/ID4gc3BlY2llc1wtb2ZcLXdpbGRcLXN3YW47Civlp6UgPiBtYXRlcm5hbFwtZ3JhbmRtb3RoZXI7CivmjacgPiBob2xkXC11cFwtaW5cLXR3b1wtaGFuZHM7CivkuZkgPiBzZWNvbmRcLWhlYXZlbicnc1wtc3RlbTsKK+WQgSA+IGludGVyamVjdGlvblwtJydhbGFzXCEnJzsKK+WnqCA+IG1vdGhlclwvd2lmZScnc1wtc2lzdGVyOwor5LqpID4gY2hpbmVzZVwtbGFuZFwtbWVhc3VyZTsKK+WDtSA+IHN0aWZmXC1hbmRcLW1vdGlvbmxlc3M7Civmi7EgPiBmb2xkXC1oYW5kc1wtb25cLWJyZWFzdDsKK+emviA+IGdyYWluXC1zdGlsbFwtb25cLXN0YWxrOwor5ZehID4gc291bmRcLW9mXC1mbHlpbmdcLWJlZXM7Civlha4gPiBleGNsYW1hdG9yeVwtcGFydGljbGU7CivnjKkgPiBzcGVjaWVzXC1vZlwtb3Jhbmd1dGFuOwor54ueID4gZmVyb2Npb3VzXC1hcHBlYXJhbmNlOwor5ouIID4gcGlja1wtdXBcLXdpdGhcLWZpbmdlcnM7CivpmZsgPiBzdGVwc1wtbGVhZGluZ1wtdGhyb25lOwor6bivID4gZmVtYWxlXC1tYW5kYXJpblwtZHVjazsKK+WNryA+IHRoXC1vZlwtZWFydGhcLWJyYW5jaGVzOwor54agID4gYnJpZ2h0XC1hbmRcLXNwYXJrbGluZzsKK+mYgiA+IGJsb2NrZWRcLW9yXC1zZXBhcmF0ZWQ7Civmt4UgPiB3YXRlclwtdXNlZFwtd2FzaFwtcmljZTsKK+S9miA+IGluZHVsZ2VcLWluXC1wbGVhc3VyZXM7CivovpogPiBydW1ibGluZ1wtb2ZcLXZlaGljbGVzOwor5be9ID4gdGhcLW9mXC10aGVcLThcLXRyaWdyYW1zOwor6KiHID4gdGhlXC1zb3VuZFwtb2ZcLWFcLWNyYXNoOwor54u6ID4gdGhlXC1zbmFybGluZ1wtb2ZcLWRvZ3M7CivmtZQgPiBzdGVlcFwtYmFua1wtYnlcLXN0cmVhbTsKK+iTiiA+IGx1eHVyaWFudFwtdmVnZXRhdGlvbjsKK+iToCA+IGdyYWNpbGFyaWFcLXZlcnJ1Y29zYTsKK+iPgCA+IGx1eHVyaWFuY2VcLW9mXC1ncm93dGg7Civog5cgPiBwdXN0dWxlc1wtb2ZcLWFueVwta2luZDsKK+migyA+IGZseVwtZG93blwtb3JcLWRvd253YXJkOwor5Z6GID4gYmxhY2tcLWNsb2RzXC1vZlwtZWFydGg7CivmqJcgPiBhaWxhbnRodXNcLWdsYW5kdWxvc2E7CivomqcgPiBhXC1yZWRcLXNwb3R0ZWRcLWxpemFyZDsKK+e8tiA+IGVhcnRoZW5cLWNyb2NrXC1vclwtamFyOwor6LGzID4gYVwtemhvdVwtZHluYXN0eVwtc3RhdGU7CivovbogPiBzbWFsbFwtbGlnaHRcLWNhcnJpYWdlOwor6YCvID4gbGVhdmVcLXdpdGhvdXRcLXJlYXNvbjsKK+m9niA+IHRvXC1kaXNwbGF5XC10aGVcLXRlZXRoOwor6byIID4gYVwtZnJlc2hcLXdhdGVyXC10dXJ0bGU7CivpvIIgPiBhXC1raW5kXC1vZlwtc2VhXC10dXJ0bGU7CivpuIcgPiBraW5kXC1vZlwtYmlyZFwtb2ZcLXByZXk7CivpuIIgPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7Civpt6sgPiB0dXJxdW9pc2VcLWtpbmdmaXNoZXI7Civpt4EgPiBmaXNoaGF3a1wtYm93XC1vclwtcHJvdzsKK+m0uyA+IHNwZWNpZXNcLW9mXC13aWxkXC1zd2FuOwor6bSmID4gZmVtYWxlXC1tYW5kYXJpblwtZHVjazsKK+mwnCA+IGJpZ1wtbW91dGhlZFwtZmxvdW5kZXI7Civpq7ogPiB0aGVcLWhhaXJcLWRpc2hldmVsbGVkOwor6aqjID4gaG9yc2VcLXdpdGhvdXRcLXNhZGRsZTsKK+mpjyA+IGhvcnNlXC13aXRob3V0XC1zYWRkbGU7CivppL0gPiBtYWtlXC1wcmVzZW50XC1vZlwtZm9vZDsKK+mgjyA+IGZseVwtZG93blwtb3JcLWRvd253YXJkOwor6Z+xID4gd2lsZFwtb25pb25zXC1vclwtbGVla3M7Civpn68gPiB3aWxkXC1vbmlvbnNcLW9yXC1sZWVrczsKK+mcgyA+IGxvbmdcLWNvbnRpbnVlZFwtcmFpbnM7Civpl40gPiB0b3dlclwtb3ZlclwtY2l0eVwtZ2F0ZTsKK+mWoSA+IGJsb2NrZWRcLW9yXC1zZXBhcmF0ZWQ7CivpjbEgPiB0aGluXC1wbGF0ZXNcLW9mXC1tZXRhbDsKK+mJtiA+IHNhY3JpZmljaWFsXC1jYXVsZHJvbjsKK+mGsCA+IGJpdHRlclwtdGFzdGVcLWluXC13aW5lOwor6L2UID4gcnVtYmxpbmdcLW9mXC12ZWhpY2xlczsKK+i7uiA+IHNtYWxsXC1saWdodFwtY2FycmlhZ2U7CivotoIgPiB0b1wtdGFrZVwtYWR2YW50YWdlXC1vZjsKK+ilrCA+IGxvd2VyXC1wYXJ0XC1vZlwtYVwtcm9iZTsKK+iisyA+IHNwcmVhZFwtb25lJydzXC1jbG90aGVzOwor6JybID4gaHlkcm9waGlsdXNcLWNvZ25hdHVzOwor6JuaID4gY3lydG94aXBodXNcLXJpdHNlbWFlOwor6Ji6ID4gZ3JhY2lsYXJpYVwtdmVycnVjb3NhOwor6JaiID4gd29vZHlcLWNsaW1iaW5nXC1wbGFudDsKK+iMgCA+IG92ZXJncm93blwtd2l0aFwtZ3Jhc3M7CivoioQgPiBtZXRhcGxleGlzXC1zdGF1bnRvbmk7CivoiLogPiBwbGFjZVwtbmFtZVwtaW5cLXRhaXdhbjsKK+iEoSA+IHN0cmlwc1wtb2ZcLWRyaWVkXC1tZWF0Owor57KDID4gZW1wdHlcLWh1c2tzXC1vZlwtZ3JhaW47CivnqqMgPiB0b1wtcnVzaFwtb3V0XC1vZlwtYVwtZGVuOwor56mHID4gcGFuaWN1bVwtZnJ1bWVudGFjZXVtOwor56OSID4gdG9cLWZhbGxcLWZyb21cLW9yXC1pbnRvOwor55+RID4gdGhlXC1wdXBpbFwtb2ZcLXRoZVwtZXllOwor552NID4gdG9cLWxvb2tcLWF0XC1mZWFyZnVsbHk7CivnlZ0gPiBjaGluZXNlXC1sYW5kXC1tZWFzdXJlOwor55WSID4gY2hpbmVzZVwtbGFuZFwtbWVhc3VyZTsKK+eVhiA+IGNoaW5lc2VcLWxhbmRcLW1lYXN1cmU7CivnlL0gPiBkcmFpblwtYmV0d2VlblwtZmllbGRzOwor55SDID4gYnJpY2tcLXdhbGxcLW9mXC1hXC13ZWxsOwor55CWID4gY2FydmVkXC1qYWRlXC13aW5lXC1jdXA7CivnjqYgPiBicm9rZW5cLXBpZWNlXC1vZlwtamFkZTsKK+eNsCA+IGZlcm9jaW91c1wtYXBwZWFyYW5jZTsKK+eAsyA+IHRvXC1hcnJpdmVcLVwob2ZcLXdhdGVyXCk7CivmvqwgPiB0b1wtcmFpblwtY29udGludW91c2x5Owor5r2vID4gc3RlZXBcLWJhbmtcLWJ5XC1zdHJlYW07CivmtKQgPiBhXC1mb3VudGFpblwtb3JcLXNwcmluZzsKK+anviA+IHBhc3RlXC13YWxsXC13aXRoXC1kaXJ0Owor5qOoID4gdGFsbHlcLW9yXC13b29kZW5cLXBhc3M7CivmoawgPiBwZWFyXC1hbmRcLW90aGVyXC10cmVlczsKK+aVsyA+IHRvXC1nb3Zlcm5cLWZvcmNlZnVsbHk7CivmlYEgPiB0b1wtd2VpZ2hcLWluXC10aGVcLWhhbmQ7CivmkI4gPiB0b1wtcnViXC13aXRoXC10aGVcLWhhbmQ7CivmiLwgPiB0aFwtb2ZcLWVhcnRoXC1icmFuY2hlczsKK+W3uiA+IHRoXC1vZlwtdGhlXC04XC10cmlncmFtczsKK+W1jyA+IGFcLW1vdW50YWluXC1pblwtc2hlbnhpOwor5a2tID4gdG9cLWNhcnJ5XC1vblwtdGhlXC1iYWNrOwor5auLID4gc2xlbmRlclwtYW5kXC1kZWxpY2F0ZTsKK+WpoyA+IG1hcnJpYWdlXC1jb25uZWN0aW9uczsKK+WkmCA+IHRoXC1vZlwtZWFydGhcLWJyYW5jaGVzOwor5aOaID4gYmxhY2tcLWNsb2RzXC1vZlwtZWFydGg7Civlm6wgPiB0b1wtcmV0dXJuXC10b1wtb3JcLWZyb207CivlioIgPiBjaGlzZWxcLWZvclwtZW5ncmF2aW5nOwor5LaZID4gc3dlbGxpbmdcLW9mXC10aGVcLWd1bXM7CivktoogPiB0b1wtYmxlZWRcLWF0XC10aGVcLW5vc2U7CivktJ8gPiBhblwtb25lXC15ZWFyXC1vbGRcLWRlZXI7CivktJYgPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7CivktIwgPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7CivktIsgPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7CivktIggPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7CivktIIgPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7CivktIAgPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7Civks7YgPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7Civks7MgPiBhXC1raW5kXC1vZlwtc21hbGxcLWJpcmQ7Civks5MgPiBhXC1raW5kXC1vZlwtd2F0ZXJcLWJpcmQ7Civks5EgPiBhXC1waGVhc2FudFwtbGlrZVwtYmlyZDsKK+SziyA+IGFcLXBoZWFzYW50XC1saWtlXC1iaXJkOwor5LOJID4gYVwta2luZFwtb2ZcLXdhdGVyXC1iaXJkOwor5LOEID4gYVwta2luZFwtb2ZcLXdhdGVyXC1iaXJkOwor5LOCID4gYVwta2luZFwtb2ZcLXNtYWxsXC1iaXJkOwor5LKxID4gYVwta2luZFwtb2ZcLWJsYWNrXC1iaXJkOwor5LKVID4gdGhlXC15YW5ndHplXC1wb3Jwb2lzZTsKK+SxkCA+IGFcLWtpbmRcLW9mXC1ibGFja1wtZmlzaDsKK+SxgCA+IGFcLWtpbmRcLW9mXC1zbWFsbFwtZmlzaDsKK+SvuiA+IHRoZVwtaGFpclwtZGlzaGV2ZWxsZWQ7CivkrqEgPiBhXC1zdXBlcm5hdHVyYWxcLWhvcnNlOwor5K6CID4gaG9yc2VcLXdpdGhcLWxvbmdcLWhhaXI7Civkrb4gPiB0b1wtY2FycnlcLW9uXC10aGVcLWJhY2s7CivkrbcgPiBob3JzZVwtd2l0aFwtbG9uZ1wtbWFuZTsKK+SsqSA+IHRvXC1hYnN0YWluXC1mcm9tXC1tZWF0Owor5KyjID4gYVwtc2FjcmlmaWNpYWxcLXZpY3RpbTsKK+SroCA+IHNob3J0XC1oYWlyXC1hbmRcLWJlYXJkOwor5Km9ID4gYVwtcXVpdmVyXC1vbmVcLWFcLWhvcnNlOwor5KmCID4gdG9cLWNvbWVcLXRvXC10aGVcLWZyb250Owor5KeXID4gbW91bnRhaW5zXC1jb2xsYXBzaW5nOwor5KamID4gYVwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+SlpCA+IHRoZVwtbmVja1wtb2ZcLWFcLXBlc3RsZTsKK+SloSA+IHRoaW5cLXBsYXRlc1wtb2ZcLW1ldGFsOwor5KWGID4gYVwtbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+SlhSA+IGFcLW11c2ljYWxcLWluc3RydW1lbnQ7CivkpYQgPiB0b1wtcGxhc3Rlclwtd2l0aFwtZ29sZDsKK+SkuCA+IHNob3J0XC1zcGVhclwtb3JcLWxhbmNlOwor5KCRID4gYmV0d2VlblwtdGhlXC1idXR0b2NrczsKK+SgiCA+IGhhcmRcLXRvXC1tb3ZlXC1mb3J3YXJkOwor5J+pID4gaGFyZFwtb2ZcLXdhbGtcLWZvcndhcmQ7CivknpkgPiB0b1wtd2Fsa1wtaW5cLWh1cnJpZWRseTsKK+SdkSA+IGFcLWxvY2FsXC1wcm9kdWNlZFwtcGlnOwor5JynID4gdG9cLWluc3VsdFwtd2l0aFwtd29yZHM7CivknJMgPiBhXC1zbGlwXC1vZlwtdGhlXC10b25ndWU7CivknIAgPiB0b1wtaW5zdWx0XC13aXRoXC13b3JkczsKK+SbjCA+IHRvXC1wcm92b2tlXC1vclwtYXJvdXNlOwor5JmuID4gc3RyaXBcLW9mXC10aGVcLWNsb3RoZXM7CivkmL4gPiBsZWdzXC1vZlwtdGhlXC10cm91c2VyczsKK+SVqyA+IGFcLW9uZVwtbGVnZ2VkXC1tb25zdGVyOwor5JSIID4gbHVzaFwtZ3Jvd3RoXC1vZlwtZ3Jhc3M7CivkkaAgPiBsb25nXC1hbmRcLW5hcnJvd1wtYm9hdDsKK+SQuCA+IHRoZVwtYmFja1wtb2ZcLXRoZVwta25lZTsKK+SPvyA+IHRoZVwtY2FsZlwtb2ZcLXRoZVwtbGVnczsKK+SPoSA+IHVuY29va2VkXC1vclwtcmF3XC1tZWF0Owor5IqzID4gdG9cLWJyZWFrXC1pbnRvXC1waWVjZXM7CivkirIgPiB0b1wtaHVsbFwtcmljZVwtcm91Z2hseTsKK+SKgiA+IHBvb3JcLXF1YWxpdHlcLW9mXC1yaWNlOwor5ImRID4gYmxhY2tcLXNraW5uZWRcLWJhbWJvbzsKK+SIpiA+IGFcLWN1cnZlZFwtYmFtYm9vXC13aGlwOwor5IiRID4gdG9vbHNcLXRvXC11bnJlZWxcLXNpbGs7CivkiIUgPiB0b29sc1wtdG9cLXVucmVlbFwtc2lsazsKK+SIgSA+IHRvb2xzXC11c2VkXC1vblwtYVwtYm9hdDsKK+SHmCA+IHRvb2xcLXRvXC1jb2xsZWN0XC1yb3BlOwor5IajID4gYWJvZGVcLW9mXC10aGVcLWVtcGVyb3I7Civkho8gPiBhXC1raW5kXC1vZlwtcmljZVwtcGxhbnQ7CivkhoMgPiBhXC1raW5kXC1vZlwtcmljZVwtcGxhbnQ7Civkha4gPiBhXC1mdWxsXC1oZWFkXC1vZlwtZ3JhaW47CivkhZMgPiBjdXJ2ZWRcLXBpZWNlXC1vZlwtd29vZDsKK+SFjyA+IHJpY2VcLWJvaWxlZFwtdG9cLWdydWVsOwor5IWJID4gYVwta2luZFwtb2ZcLXJpY2VcLXBsYW50Owor5IS/ID4gYVwta2luZFwtb2ZcLXJpY2VcLXBsYW50Owor5ISvID4gdGVuXC1oYW5kbGVcLW9mXC1ncmFpbnM7CivkhIIgPiB0b1wtcHJheVwtYW5kXC10b1wtY3Vyc2U7Civkg7AgPiBicmlja1wtb3JcLXN0b25lXC1zdGVwczsKK+SCkiA+IHNob3J0XC10b1wtY3VycnlcLWZhdm9yOwor5IKCID4gdG9cLWdhemVcLWF0XC1pblwtdGVycm9yOwor5IGsID4gdG9cLWFjdFwtcHJldGVudGlvdXNseTsKK+SAtyA+IHRvXC1oYXZlXC1xdWlja1wtZ2xhbmNlOwor5ICyID4gZGlzZWFzZXNcLWluXC10aGVcLWV5ZXM7Civjv7ggPiB0b1wtY2FzdFwtb2ZmXC10aGVcLXNraW47Civjv54gPiBhblwtb2xkXC1tYW5cLW9mXC1laWdodHk7CivjvaQgPiBhXC1zbWFsbFwtcGxvdFwtb2ZcLWxhbmQ7CivjvaIgPiB0b1wtcGxvdWdoXC10aGVcLWZpZWxkczsKK+O9lSA+IG5ld1wtYnJhbmNoZXNcLWdyb3dpbmc7CivjvYMgPiBhXC1iaWdcLXBpZWNlXC1vZlwtYnJpY2s7CivjvKIgPiBicmlja3NcLWFuXC1lYXRoZW5cLWphcjsKK+O8iSA+IGdyZWVuXC1jb2xvcmVkXC1tZWxvbnM7Civju64gPiBicmlnaHRcLWFuZFwtYnJpbGxpYW50Owor47quID4gZmluZVwtc3RvbmVcLWxpa2VcLWphZGU7CivjuqggPiBmaW5lXC1zdG9uZVwtbGlrZVwtamFkZTsKK+O6giA+IGJpZ1wtYW5kXC1zdHJvbmdcLXNoZWVwOwor47mYID4gc2hpbmJvbmVcLW9mXC1hXC1jYXR0bGU7CivjuKogPiBhblwtb3hcLXdhbGtpbmdcLXNsb3dseTsKK+O3mSA+IHRvXC1mcnlcLWluXC1mYXRcLW9yXC1vaWw7CivjtpQgPiBzd2lmdFwtYW5kXC10b3JyZW50aWFsOwor47aOID4gc3dpZnRcLWFuZFwtdG9ycmVudGlhbDsKK+O1oSA+IHN3aWZ0XC1hbmRcLXRvcnJlbnRpYWw7CivjtZ4gPiBiZWxsaWVkXC1pblwtd2F0ZXJcLWdhczsKK+OzvCA+IGJ1YmJsaW5nXC1vZlwtZm91bnRhaW47Civjs5ogPiBmbG93aW5nXC1vZlwtdGhlXC13YXRlcjsKK+OzlCA+IHRvXC1zb2FrXC1vclwtYmVcLXNvYWtlZDsKK+OzkCA+IGZsb3dpbmdcLW9mXC10aGVcLXdhdGVyOwor47KrID4gaGFpclwta25vdHNcLWluXC1hXC1tZXNzOwor47KiID4gaGFpclwta25vdHNcLWluXC1hXC1tZXNzOwor47CLID4gYVwta2luZFwtb2ZcLWZydWl0XC10cmVlOwor46+MID4gdG9cLW9wZXJhdGVcLW9yXC1tYW5hZ2U7CivjrZ4gPiBhXC1raW5kXC1pbmZlcmlvclwtd29vZDsKK+OtkiA+IGFcLWZhcm1pbmdcLWluc3RydW1lbnQ7CivjqrAgPiB0b1wtYWJzdGFpblwtZnJvbVwtbWVhdDsKK+OpuyA+IHJ1Z2dlZFwtbW91bnRhaW5cLXBhdGg7CivjqZQgPiBhXC10b29sXC10b1wtbWFrZVwtYVwtYm93Owor76e9ID4gZmlsZVwtb2ZcLXRlblwtc29sZGllcnM7Civjp7kgPiB0b1wtc3RyaWtlXC13aXRoXC1maXN0czsKK+OhmSA+IGN1cnRhaW5cLWZvclwtY2FycmlhZ2U7CivjoJcgPiBkZWVwXC1pblwtdGhlXC1tb3VudGFpbjsKK+OepSA+IGRlZXBcLWluXC10aGVcLW1vdW50YWluOwor456fID4gc2F2aW5nc1wtYW5kXC1yZXNlcnZlczsKK+OckiA+IG1hdGVybmFsXC1ncmFuZG1vdGhlcjsKK+OZoyA+IHRvXC1waWxlXC1hXC1zYW5kXC1oaWxsczsKK+OZkSA+IHRoZVwtY2Fub3B5XC1vZlwtaGVhdmVuOwor45iOID4gdGhlXC1yb2Fyc1wtb2ZcLWFcLXRpZ2VyOwor45iFID4gdG9cLWhvbGRcLWluXC10aGVcLW1vdXRoOwor45WhID4gdGhlXC1iZWRcLW9mXC1hXC10b3JyZW50Owor45WMID4gdG9cLXJhaXNlXC10aGVcLWN1cnRhaW47CivjlIsgPiBjdXRcLWludG9cLXRoaW5cLXNsaWNlczsKK+OShSA+IHRvXC11bmJpbmRcLXRoZVwtY29sbGFyOwor45GJID4gY2Fubm90XC1zdHJhaWdodGVuXC11cDsKK+W5viA+IGhvd1wtbWFueVw/XC1ob3dcLW11Y2hcPzsKK+WljyA+IG1lbW9yaWFsaXplXC1lbXBlcm9yOwor5oKoID4gaG9ub3JpZmljXC1mb3JcLScneW91Jyc7CivlkI8gPiBnb3Zlcm5tZW50XC1vZmZpY2lhbDsKK+WFgCA+IHRvXC1jdXRcLW9mZlwtdGhlXC1mZWV0Owor6IO0ID4gdGhlXC1sYXJnZVwtaW50ZXN0aW5lOwor56emID4gZmV1ZGFsXC1zdGF0ZVwtb2ZcLXFpbjsKK+ahgSA+IGNyb3NzXC1iZWFtc1wtb2ZcLXJvb2Y7Civojo4gPiBraW5kXC1vZlwtc2VkZ2VcLWdyYXNzOwor6JabID4ga2luZFwtb2ZcLW1hcnNoXC1ncmFzczsKK+e1oyA+IHRvXC1iYXN0ZVwtZm9yXC1zZXdpbmc7CivmgpYgPiBiZVwtY29udHJhZGljdG9yeVwtdG87CivoipIgPiBtaXNjYW50aHVzXC1zaW5lbnNpczsKK+WYtiA+IG5laWdoaW5nXC1vZlwtYVwtaG9yc2U7Civlj70gPiBzaWdoXC1pblwtZGlzYXBwcm92YWw7CivljqUgPiBwZXJzb25hbFwtcHJvbm91blwtaGU7CivlnK0gPiBqYWRlXC1wb2ludGVkXC1hdFwtdG9wOwor5b6YID4gd2Fsa1wtYmFja1wtYW5kXC1mb3J0aDsKK+aZpCA+IGhhdmVcLWludGVydmlld1wtd2l0aDsKK+iItyA+IHRoZVwtc2lkZXNcLW9mXC1hXC1ib2F0Owor6YKsID4gdmFyaW91c1wtcGxhY2VcLW5hbWVzOwor6KSQID4gY29hcnNlXC13b29sZW5cLWNsb3RoOwor6aaIID4gb2ZmZXJcLWZvb2RcLXN1cGVyaW9yOwor5ZSnID4gY2hpcnBpbmdcLW9mXC1pbnNlY3RzOwor5ZKUID4gdXNlZFwtaW5cLXRyYW5zbGF0aW9uOwor54G4ID4gY2F1dGVyaXplXC13aXRoXC1tb3hhOwor6am3ID4gdGVhbVwtb2ZcLWZvdXJcLWhvcnNlczsKK+eyvCA+IGNsZWFyXC1cKGFzXC1vZlwtd2F0ZXJcKTsKK+e+miA+IHNwZWNpZXNcLW9mXC1hbnRlbG9wZTsKK+WRkyA+IHRhbGtcLWluXC1vbmUnJ3NcLXNsZWVwOwor56+ZID4gcG9sZVwtdXNlZFwtcHVudFwtYm9hdDsKK+a5jSA+IHJhcGlkXC13YXRlclwtY3VycmVudDsKK+iEjSA+IG1pbmNlZFwtbWVhdFwtb3JcLWZpc2g7Civpj5YgPiB0b1wtZmlnaHRcLXRvXC10aGVcLWVuZDsKK+iCvSA+IGFcLWNoZW1pY2FsXC1jb21wb3VuZDsKK+WNnyA+IGFcLWNoZW1pY2FsXC1jb21wb3VuZDsKK+mKriA+IGJlbGxzXC1odW5nXC1vblwtaG9yc2U7CivnrLMgPiBhXC1yZWVkXC1sZWFmXC13aGlzdGxlOwor6JaPID4gc2VlZFwtb2ZcLWpvYicnc1wtdGVhcnM7Civmgp0gPiB0b1wtbGF1Z2hcLWF0XC10b1wtcGl0eTsKK+ixhyA+IGFcLXNtYWxsXC1raWRuZXlcLWJlYW47CivmoYkgPiBldWNhbHlwdHVzXC1nbG9idWx1czsKK+i5gSA+IHRvXC13YWxrXC13aXRoXC1hXC1saW1wOwor6IWIID4gYW5cLW9yZ2FuaWNcLWNvbXBvdW5kOwor6J6fID4ga2luZFwtb2ZcLWNhdGVycGlsbGFyOwor5rOuID4gemhvdVwtZHluYXN0eVwtc2Nob29sOwor6bKzID4gdGhlXC1zaWx2ZXJ5XC1wb21mcmV0Owor6ZyqID4gbG9uZ1wtYW5kXC1oZWF2eVwtcmFpbjsKK+aemCA+IHRoZVwtaGFuZGxlXC1vZlwtdG9vbHM7Civmu7kgPiB0aGVcLWJhbmtcLW9mXC1hXC1zdGVhbTsKK+W9syA+IHN0ZXBcLXdpdGhcLWxlZnRcLWZvb3Q7Civkuo0gPiB0b1wtdGFrZVwtc21hbGxcLXN0ZXBzOwor56CYID4gYVwta2luZFwtb2ZcLWZhcm1cLXRvb2w7CivmoI4gPiBjaGVzdG51dFwtbGVhdmVkXC1vYWs7CivpuYcgPiB0aGVcLXNpbHZlclwtcGhlYXNhbnQ7Civoi4wgPiBhdmVycmhvcmFcLWNhcmFtYm9sYTsKK+mDmyA+IG91dGVyXC13YWxsc1wtb2ZcLWNpdHk7CivphqIgPiBtaW5jZWRcLXBpY2tsZWRcLW1lYXQ7CivnnJogPiBkaXNlYXNlXC1vZlwtdGhlXC1leWVzOwor6ICxID4gYVwta2luZFwtb2ZcLWZhcm1cLXRvb2w7Civoo4kgPiBzXC1zZWFtXC1pblwtYVwtZ2FybWVudDsKK+W0piA+IGFcLW1vdW50YWluXC1pblwta2Fuc3U7CivlhZUgPiBhXC1mZW1hbGVcLXJoaW5vY2Vyb3M7CivpuJIgPiB0aGVcLWVhc3Rlcm5cLWphY2tkYXc7Civpt7MgPiB0aGVcLXNpbHZlclwtcGhlYXNhbnQ7CivptrIgPiBzaWJlcmlhblwtZmx5Y2F0Y2hlcjsKK+mwtiA+IGtvbm9zaXJ1c1wtcHVuY3RhdHVzOwor6a+nID4gdGhlXC1zaWx2ZXJ5XC1wb21mcmV0Owor6a+lID4gcG9tYXRvbXVzXC1zYWx0YXRyaXg7Civpr5UgPiBjb3J5cGhhZW5hXC1oaXBwdXJ1czsKK+mutiA+IHNlYmFzdG9kZXNcLWd1bnRoZXJpOwor6aefID4gdGVhbVwtb2ZcLWZvdXJcLWhvcnNlczsKK+mliyA+IG9mZmVyXC1mb29kXC1zdXBlcmlvcjsKK+mjgiA+IHdpbmRcLWluXC1oaWdoXC1wbGFjZXM7Civpor4gPiBibG93aW5nXC1vZlwtdGhlXC13aW5kOwor6aCWID4gemhvdVwtZHluYXN0eVwtc2Nob29sOwor6aCNID4gdG9cLXJhaXNlXC1vbmUnJ3NcLWhlYWQ7Civpn5ggPiBhcmNoZXInJ3NcLXRodW1iXC1yaW5nOwor6Z6sID4gYVwtcXVpdmVyXC1vblwtYVwtaG9yc2U7CivpnLYgPiBkb3ducG91cmluZ1wtb2ZcLXJhaW47CivpnK4gPiBkZW5zZW5lc3NcLW9mXC1jbG91ZHM7Civpkb4gPiBiZWxsc1wtaHVuZ1wtb25cLWhvcnNlOwor6ZG0ID4gdG9cLWVuZ3JhdmVcLW9yXC1jYXJ2ZTsKK+mOhCA+IGlyaWRpdW1cLWVpbnN0ZWluaXVtOwor6YuRID4gdG9cLWVuZ3JhdmVcLW9yXC1jYXJ2ZTsKK+mIgyA+IGFuY2llbnRcLXdpbmVcLXZlc3NlbDsKK+mFpyA+IHRvXC1wbGVkZ2VcLXdpdGhcLXdpbmU7CivphJQgPiB2YXJpb3VzXC1wbGFjZVwtbmFtZXM7CivopbQgPiBhXC1vbmVcLXBpZWNlXC1nYXJtZW50Owor6KSDID4gYVwtc2VhbVwtaW5cLWFcLWdhcm1lbnQ7CivooLAgPiBjZXJhbWJ5eFwtcnVnaWNvbGxpczsKK+ifqCA+IHRoZVwtc2liZXJpYW5cLWplcmJvYTsKK+idnSA+IHRoZVwtbGFydmFcLW9mXC1sb2N1c3Q7CivolIogPiBuYXN0dXJ0aXVtXC1tb250YW51bTsKK+iThyA+IGZvbGxpY2xlc1wtb2ZcLXBsYW50czsKK+iSiCA+IGFuXC1vcmdhbmljXC1jb21wb3VuZDsKK+iRhyA+IGVsc2hvbHRyaWFcLXBhbHRyaW5pOwor6JCHID4gYXZlcnJob3JhXC1jYXJhbWJvbGE7CivojpUgPiBueW1waG9pZGVzXC1wZWx0YXR1bTsKK+iMsyA+IGN5cGVydXNcLW1hbGFjY2Vuc2lzOwor6IyaID4gYW5cLW9yZ2FuaWNcLWNvbXBvdW5kOwor6IuzID4gcGV0YXNpdGVzXC1qYXBvbmljdXM7Civoi4ogPiBhblwtb3JnYW5pY1wtY29tcG91bmQ7CivoiasgPiBib3dcLW9yXC1wcm93XC1vZlwtYm9hdDsKK+iIuyA+IGJvd1wtb3JcLXByb3dcLW9mXC1ib2F0Owor6IiuID4gYm93XC1vclwtcHJvd1wtb2ZcLWJvYXQ7Civohr4gPiBtaW5jZWRcLW1lYXRcLW9yXC1maXNoOwor6IWZID4gYW5cLW9yZ2FuaWNcLWNvbXBvdW5kOwor6ISOID4gYW5cLW9yZ2FuaWNcLWNvbXBvdW5kOwor6IOpID4gYW5cLW9yZ2FuaWNcLWNvbXBvdW5kOwor6IK8ID4gYW5cLW9yZ2FuaWNcLWNvbXBvdW5kOwor6IKfID4gYW5cLW9yZ2FuaWNcLWNvbXBvdW5kOwor6ICiID4gYVwta2luZFwtb2ZcLWZhcm1cLXRvb2w7CivnvqIgPiBmaW5lXC13b29sZW5cLWZhYnJpY3M7CivnvpEgPiBhXC1ndWlkZVwtdG9cLWdvb2RuZXNzOwor57myID4gdG9cLXdvcmtcLWFzXC1hXC10YWlsb3I7CivntoAgPiBhXC1raW5kXC1vZlwtc2Fja2Nsb3RoOwor56uRID4gYmVcLXZhc3RcLWFuZFwtZW5kbGVzczsKK+emkyA+IHRvXC1kcml2ZVwtb3V0XC1kZW1vbnM7CivnpZAgPiBkaXZpbmVcLWludGVydmVudGlvbjsKK+egnCA+IGFuXC1vcmdhbmljXC1jb21wb3VuZDsKK+eflCA+IGJyaWxsaWFudFwtXChvZlwtZXllc1wpOwor556VID4gY2F0YXJhY3RcLWluXC10aGVcLWV5ZTsKK+arnyA+IGNoZXN0bnV0XC1sZWF2ZWRcLW9hazsKK+aqqiA+IGNoZXN0bnV0XC1sZWF2ZWRcLW9hazsKK+ahqiA+IG15dGhpY2FsXC1naWFudFwtdHJlZTsKK+afriA+IGZsYXRcLXBpZWNlc1wtb2ZcLXdvb2Q7CivmmrUgPiBkcnlcLWJ5XC1leHBvc2luZ1wtc3VuOwor5padID4gc21hbGxcLWphZGVcLXdpbmVcLWN1cDsKK+aVhCA+IHRvXC1wdXRcLWZvcnRoXC1lZmZvcnQ7Civmko0gPiB0b1wtaG9sZFwtaW5cLXRoZVwtaGFuZDsKK+aPnSA+IHRvXC1ob2xkXC1pblwtdGhlXC1oYW5kOwor5o+VID4gcm9sbFwtdXBcLXRoZVwtc2xlZXZlczsKK+WwlyA+IHlvdW5nZXJcLW9mXC1icm90aGVyczsKK+WjkCA+IHRoZVwtaW1wZXJpYWxcLXNpZ25ldDsKK+WelSA+IHVzZWRcLWluXC1wbGFjZVwtbmFtZXM7CivlnJsgPiB1c2VkXC1pblwtcGxhY2VcLW5hbWVzOwor5ZuIID4gdGFsa1wtaW5cLW9uZScnc1wtc2xlZXA7CivlmLAgPiBzaWdoXC1pblwtZGlzYXBwcm92YWw7Civllp4gPiBjaGlycGluZ1wtb2ZcLWluc2VjdHM7CivllJogPiB2b21pdGluZ1wtb2ZcLWFuaW1hbHM7Civlk4wgPiB1c2VkXC1pblwtdHJhbnNsYXRpb247CivlkbogPiB2b2ljZVwtb2ZcLWFuZ2VyXC12YXN0Owor5ZCWID4gdXNlZFwtaW5cLXRyYW5zbGF0aW9uOwor5YGYID4gYW5jaWVudFwtZmFtaWx5XC1uYW1lOwor5LavID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7CivktpIgPiBvdXRzdGFuZGluZ1wtYWJpbGl0eTsKK+S2jCA+IGFcLXB1c3R1bGVcLW9yXC1waW1wbGU7CivktoQgPiBzdHJpcGVkXC1tb3R0bGVkXC1yYXQ7CivktbEgPiByZWRcLWFuZFwtYmxhY2tcLWNvbG9yOwor5LWuID4gcmVkXC1hbmRcLWJsYWNrXC1jb2xvcjsKK+S1lCA+IHRvXC10dXJuXC1vblwtdGhlXC1oZWVsOwor5LSqID4gYVwtZmFidWxvdXNcLWNyZWF0dXJlOwor5LSgID4gYVwteW91bmdcLXRhaWxlZFwtZGVlcjsKK+SxpyA+IGFcLWtpbmRcLW9mXC1maXNoXC1lZWxzOwor5LCcID4gYVwtbGFyZ2VcLWVhcnRoZW5cLXBvdDsKK+SwmyA+IGFcLWxhcmdlXC1lYXJ0aGVuXC1wb3Q7CivkrrcgPiBtb3ZlbWVudFwtb2ZcLWFcLWhvcnNlOwor5K6DID4gdG9cLWdvXC1iZWZvcmVcLW90aGVyczsKK+StuSA+IG1vdmVtZW50XC1vZlwtYVwtaG9yc2U7Civkq7EgPiBhXC1wYXJ0XC1vZlwtdGhlXC1za3VsbDsKK+SrqSA+IHRvXC1zaGFrZVwtb25lJydzXC1oZWFkOwor5KuFID4gdG9cLXNoYWtlXC1vbmUnJ3NcLWhlYWQ7Civkqr8gPiB0aGVcLXRvcFwtb2ZcLXRoZVwtaGVhZDsKK+SqvSA+IGhvYXJ5XC1oYWlyZWRcLXBlcnNvbjsKK+SptyA+IHRoZVwtc2lkZXNcLW9mXC1hXC1zaG9lOwor5KmnID4gdG9cLXRpZVwtdXBcLWh1cnJpZWRseTsKK+SpjCA+IHRvXC1oYXZlXC1hXC13b3JuXC1sb29rOwor5KeUID4gdG9cLW1lZXRcLWF0XC10aGVcLWJhbms7CivkppkgPiBhXC1nb3Zlcm5tZW50XC1hZ2VuY3k7CivkpbQgPiB0b1wtZW5ncmF2ZVwtb3JcLWNhcnZlOwor5KWnID4gYVwtZmluZVwta2luZFwtb2ZcLWphZGU7CivkpIYgPiBhXC1raW5kXC1vZlwtcmljZVwtd2luZTsKK+SkgSA+IGNvb2tlZFwtb3JcLXdlbGxcLWRvbmU7Civko60gPiBhblwtb3JnYW5pY1wtY29tcG91bmQ7CivkoosgPiBhXC1tYXJzaGFsXC1vclwtaGVyYWxkOwor5KCKID4gdG9cLWN1dFwtb2ZmXC10aGVcLWZlZXQ7Civkn6MgPiBhblwtYW5pbWFsXC1pblwtbGVnZW5kOwor5J6zID4gdG9cLXN0dW1ibGVcLWFuZFwtZmFsbDsKK+SdoCA+IGFcLWtpbmRcLW9mXC13aWxkXC1ib2FyOwor5Jy2ID4gYVwtc21hbGxcLWtpZG5leVwtYmVhbjsKK+ScgSA+IHRvXC1hYnVzZVwtYW5kXC1pbnN1bHQ7CivkmZIgPiB0b1wtc3RvcmVcLW9yXC1zYXZlXC11cDsKK+SZjyA+IHNob3J0XC1zbGVldmVzXC1zaGlydDsKK+SZgSA+IGNoaWxkcmVuJydzXC1nYXJtZW50czsKK+SYqiA+IGNsb3RoZXNcLXdpdGhvdXRcLWhlbTsKK+SWoiA+IGZpcnN0XC1ib3JuXC1zaWxrd29ybTsKK+SWliA+IHRvXC1zaG93XC1mYW1pbGlhcml0eTsKK+SVviA+IGFcLWtpbmRcLW9mXC12ZWdldGFibGU7CivklZ8gPiBhXC1raW5kXC1vZlwtdmVnZXRhYmxlOwor5JWYID4gYVwtdmFyaWV0eVwtb2ZcLWZ1bmd1czsKK+SVgyA+IHRoZVwtc2hhZGVcLW9mXC1hXC10cmVlOwor5JSXID4gYVwta2luZFwtb2ZcLXZlZ2V0YWJsZTsKK+STtyA+IG55bXBob2lkZXNcLXBlbHRhbHVtOwor5JOaID4gYVwta2luZFwtb2ZcLXZlZ2V0YWJsZTsKK+STjSA+IGNydWNpZmVyb3VzXC1mbG93ZXJzOwor5JKoID4gYVwta2luZFwtb2ZcLXZlZ2V0YWJsZTsKK+SSiCA+IHNpZGVcLWJlYW1cLW9mXC1hXC1ib2F0Owor5JKAID4gc2hvcnRcLWFuZFwtZGVlcFwtYm9hdDsKK+SRhyA+IG1lZGljaW5lXC1mb3JcLWFcLXNvcmU7CivkkK0gPiBhXC1kaXNjaGFyZ2VcLW9yXC1mbHV4Owor5I+5ID4gdG9cLXdhdGNoXC1zdGVhbHRoaWx5Owor5I+3ID4gbWVkaWNpbmVcLWZvclwtYVwtc29yZTsKK+SPqCA+IHRvXC1zd2VsbFwtdXBcLWdyZWF0bHk7Civkj4YgPiBidXp6aW5nXC1pblwtdGhlXC1lYXJzOwor5I6/ID4gYnV6emluZ1wtaW5cLXRoZVwtZWFyczsKK+SNtyA+IHRvXC1jaGFzZVwtZWFjaFwtb3RoZXI7CivkjYAgPiBjbG90aGVzXC13aXRob3V0XC1oZW07CivkjI4gPiB0b1wtYmFzdGVcLWZvclwtc2V3aW5nOwor5Iu5ID4gYnJlYWR0aFwtb2ZcLW1hdGVyaWFsOwor5IuwID4gdG9cLWJpbmRcLW9yXC1yZXN0cmFpbjsKK+SKmSA+IGNvb2tlZFwtb3JcLXdlbGxcLWRvbmU7Civkh70gPiBhXC1jb2Fyc2VcLWJhbWJvb1wtbWF0Owor5IavID4gYVwtc2hvcnRcLXNoYXBlZFwtZmFjZTsKK+SFryA+IGFcLXZhcmlldHlcLW9mXC1taWxsZXQ7CivkhZ8gPiB2YXJpZXRpZXNcLW9mXC1taWxsZXQ7CivkhZUgPiBhXC12YXJpZXR5XC1vZlwtbWlsbGV0Owor5IWSID4gYVwtc2hhcnBcLWVkZ2VkXC1ncmFzczsKK+SBiyA+IHdpdGhcLW9uZVwtZXllXC1jbG9zZWQ7CivkgYMgPiB0b1wtbG9va1wtYXR0ZW50aXZlbHk7CivkgKQgPiBpbnNpZ2h0XC1vZlwtamVhbG91c3k7CivkgKMgPiB0b1wtbG9va1wtc3RlYWRpbHlcLWF0Owor47+TID4gZGlzZWFzZVwtb2ZcLXRoZVwtaG9vZjsKK+O+uyA+IG5vdFwtYW55XC1wcm9ncmVzc2l2ZTsKK+O+tiA+IGRpc2Vhc2VcLW9mXC10aGVcLWtuZWU7CivjvqIgPiBhXC1tYWxpZ25hbnRcLWRpc2Vhc2U7Civjva0gPiB2YWNhbnRcLWxvdFwtb3JcLXNwYWNlOwor472MID4gdGhlXC1yaWRnZVwtb2ZcLWFcLXJvb2Y7CivjvYIgPiBhXC1jcmFja2VkXC1jb250YWluZXI7CivjvYEgPiBhXC1sYXJnZVwtZWFydGhlblwtcG90Owor47yZID4gYnJpY2t3b3JrXC1vZlwtYVwtd2VsbDsKK+O8kiA+IGFcLWtpbmRcLW9mXC1iaWdcLW1lbG9uOwor47i2ID4gY29sb3JcLW9mXC10aGVcLW94dGFpbDsKK+O4tSA+IHRoZVwtbG93aW5nXC1vZlwtYW5cLW94Owor47ilID4gaG91c2Vob2xkXC1yZWdpc3RlcnM7CivjuKIgPiBjcm9zc1wtYmVhbVwtb2ZcLWFcLWJlZDsKK+O4niA+IGJsb2Nrc1wtZm9yXC1wcmludGluZzsKK+O4kyA+IHRvXC1oYXZlXC1kaXNhcHBlYXJlZDsKK+O4jyA+IGNvb2tlZFwtb3JcLXdlbGxcLWRvbmU7CivjuIAgPiBibGFja2VuZWRcLXdpdGhcLXNvb3Q7Civjt6QgPiByb3N5XC1jbG91ZHNcLW9mXC1kYXduOwor47KHID4gdGhlXC1yYXR0bGVcLW9mXC1kcnVtczsKK+OxviA+IGFcLWtpbmRcLW9mXC1vcm5hbWVudHM7CivjsbwgPiBhXC1raW5kXC1vZlwtb3JuYW1lbnRzOwor47G5ID4gdG9cLWRpZVwtZnJvbVwtZGlzZWFzZTsKK+OxqyA+IGRlc3Ryb3llZFwtb3JcLXJ1aW5lZDsKK+OxqiA+IHN0dXBpZFwtYW5kXC1jb25mdXNlZDsKK+OxiiA+IGFzdGhtYXRpY1wtYnJlYXRoaW5nOwor47GJID4gbW92aW5nXC1vZlwtdGhlXC1tb3V0aDsKK+OwtCA+IHRvXC1ncmF0ZVwtb25cLXRoZVwtZWFyOwor47CwID4gYXN0aG1hdGljXC1icmVhdGhpbmc7CivjsK8gPiB0aGVcLXdheVwtb2ZcLXNwZWFraW5nOwor46+BID4gaG91c2Vob2xkXC1yZWdpc3RlcnM7Civjq68gPiBpblwtY29udHJhdmVudGlvblwtb2Y7CivjqaYgPiB0b1wtbGVhZFwtYnlcLXRoZVwtaGFuZDsKK+OpmCA+IHRvXC1tb29yXC10b1wtdGhlXC1iYW5rOwor46mXID4gdG9cLWxlYWRcLWJ5XC10aGVcLWhhbmQ7CivjqJ0gPiB0aGVcLXZlcnlcLWhhcmRcLXN0dWZmOwor46iAID4gdG9cLWhvbGRcLWluXC10aGVcLWhhbmQ7Civvp54gPiBnb3Zlcm5tZW50XC1vZmZpY2lhbDsKK+OnhSA+IHRvXC10dXJuXC11cHNpZGVcLWRvd247Civvpq8gPiBzcGVjaWVzXC1vZlwtYW50ZWxvcGU7CivjppMgPiBkaWZmaWN1bHRcLWludGVudGlvbjsKK+OlnSA+IHRvXC1hcm91c2VcLXRvXC1hY3Rpb247CivjooogPiB0b1wtc2V0XC1zaWRlXC1ieVwtc2lkZTsKK+OigiA+IG9mXC1oaWdobHlcLXN0cmF0ZWdpYzsKK+OfsSA+IHNoYXBlXC1vZlwtYVwtbW91bnRhaW47Civjn5MgPiBsb2Z0eVwtYW5kXC1kYW5nZXJvdXM7Civjn5IgPiBtb3VudGFpbnNcLWFkam9pbmluZzsKK+OdnyA+IGluXC1jb250cmF2ZW50aW9uXC1vZjsKK+OcsSA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45ymID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7CivjnKEgPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+OcoCA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45yZID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7CivjnJAgPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+OcjSA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45yLID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7CivjnIIgPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+ObuCA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45u3ID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7Civjm7UgPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+ObrSA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45usID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7Civjm6sgPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+ObniA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45udID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7Civjm5wgPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+ObmSA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45uYID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7Civjm5YgPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+ObkyA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45uPID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7Civjm4UgPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+ObhCA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45q9ID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7CivjmrggPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+OatSA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45qxID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7Civjmq0gPiB1c2VkXC1pblwtZ2lybCcnc1wtbmFtZTsKK+OaqyA+IHVzZWRcLWluXC1naXJsJydzXC1uYW1lOwor45qoID4gdXNlZFwtaW5cLWdpcmwnJ3NcLW5hbWU7CivjmKsgPiB0b1wtZmFsbFwtaW50b1wtYVwtd2VsbDsKK+OXtiA+IHRvXC1leHBlbFwtdGhlXC1icmVhdGg7CivjlqogPiBzb3VuZFwtb2ZcLXN1cnByaXNpbmc7CivjlLkgPiBhXC1zdXJwbHVzXC1vclwtZXhjZXNzOwor45SHID4gYVwta2luZFwtb2ZcLWZhcm1cLXRvb2w7Civjk70gPiBhXC1raW5kXC1vZlwtZmFybVwtdG9vbDsKK+OTtyA+IHRvXC1jdXRcLW9mZlwtdGhlXC1ub3NlOwor45KUID4gdG9cLXNoYWtlXC1vbmUnJ3NcLWhlYWQ7CivjkoQgPiBicml0dGxlXC1hbmRcLWZyaWFibGU7CivjkoMgPiBjYXBpdGFsXC1mb3JtXC1vZlwtdHdvOwor45GbID4gdG9cLXNoYWtlXC1vbmUnJ3NcLWhlYWQ7CivnjpYgPiBibGFja1wtY29sb3JlZFwtamFkZTsKK+WTqiA+IHdoaWNoXD9cLXdoZXJlXD9cLWhvd1w/Owor54myID4gc2FjcmlmaWNpYWxcLWFuaW1hbDsKK+a8oiA+IHRoZVwtY2hpbmVzZVwtcGVvcGxlOwor5ryVID4gdHJhbnNwb3J0XC1ieVwtd2F0ZXI7CivpmLQgPiAnJ2ZlbWFsZScnXC1wcmluY2lwbGU7Civku5kgPiB0YW9pc3RcLXN1cGVyXC1iZWluZzsKK+mpuyA+IHRvXC1iZVwtc3RhdGlvbmVkXC1hdDsKK+mnkCA+IHRvXC1iZVwtc3RhdGlvbmVkXC1hdDsKK+iFriA+IGxvd2VyXC1wYXJ0XC1vZlwtZmFjZTsKK+aLkiA+IHdhcmRcLW9mZlwtd2l0aFwtaGFuZDsKK+ahgiA+IGNhc3NpYVwtb3JcLWNpbm5hbW9uOwor5py1ID4gY2x1c3Rlclwtb2ZcLWZsb3dlcnM7Civmm7kgPiBtaW5pc3RyeVwtb2ZmaWNpYWxzOwor572OID4gYW5cLWVhcnRoZW53YXJlXC1qYXI7CivpmbAgPiAnJ2ZlbWFsZScnXC1wcmluY2lwbGU7CivkuLggPiBzbWFsbFwtcm91bmRcLW9iamVjdDsKK+efqSA+IGNhcnBlbnRlcicnc1wtc3F1YXJlOwor6IWKID4geWVhclwtZW5kXC1zYWNyaWZpY2U7Civpvp8gPiB0dXJ0bGVcLW9yXC10b3J0b2lzZTsKK+mCuCA+IG9mZmljaWFsXC1yZXNpZGVuY2U7CivkvoMgPiB1cHJpZ2h0XC1hbmRcLXN0cm9uZzsKK+mCgiA+IHVuZXhwZWN0ZWRcLW1lZXRpbmc7CivmgK8gPiBsYWNraW5nXC1pblwtY291cmFnZTsKK+eUuCA+IHN1YnVyYnNcLW9mXC1jYXBpdGFsOwor5o2eID4gc2Nvb3BcLW91dFwtb2ZcLXdhdGVyOwor5ombID4gY2FycnlcLW9uXC1zaG91bGRlcnM7CivomZQgPiBhY3RcLXdpdGhcLXJldmVyZW5jZTsKK+mcliA+IGxvbmdcLXNwZWxsXC1vZlwtcmFpbjsKK+mfpyA+IHN0cm9uZ1wtYW5kXC1wbGlhYmxlOwor55G+ID4gYnJpbGxpYW5jZVwtb2ZcLWdlbXM7CivmoZQgPiBjaGluZXNlXC1iZWxsZmxvd2VyOwor6bizID4gbWFsZVwtbWFuZGFyaW5cLWR1Y2s7CivpkpcgPiBvcm5hbWVudGFsXC1oYWlycGluOwor5beFID4gc3VtbWl0XC1vZlwtbW91bnRhaW47CivmqKggPiBvc21hbnRodXNcLWZyYWdyYW5zOwor6KChID4gd29vZFwtYm9yaW5nXC1pbnNlY3Q7CivouYIgPiB0cmFtcGxlXC11bmRlclwtZm9vdDsKK+mqpSA+IHRob3JvdWdoYnJlZFwtaG9yc2U7CivllIEgPiBleHByZXNzXC1jb25kb2xlbmNlOwor6aqFID4gYW5cLWV4Y2VsbGVudFwtaG9yc2U7CivnookgPiByb29tXC1tYWRlXC1vZlwtc3RvbmU7Civnlp8gPiBpbnRlcm1pdHRlbnRcLWZldmVyOwor57qjID4gbmFtZVwtb2ZcLWFuXC1lbXBlcm9yOwor56OsID4gbXVzaWNhbFwtaW5zdHJ1bWVudDsKK+eIvyA+IGhhbGZcLW9mXC10cmVlXC10cnVuazsKK+aXjiA+IGZsdXR0ZXJpbmdcLW9mXC1mbGFnOwor5aSUID4gb25lXC1sZWdnZWRcLW1vbnN0ZXI7Civmro0gPiB0b1wtc3RhcnZlXC10b1wtZGVhdGg7CivpqoogPiBhXC1wdXJlXC1ibGFja1wtaG9yc2U7CivmuY4gPiBmbHVzaGVkXC13aXRoXC1kcmluazsKK+WWtSA+IHRoZVwtbWV3XC1vZlwtdGhlXC1jYXQ7CivnhJkgPiBkcnlcLW92ZXJcLXNsb3dcLWZpcmU7Civnu74gPiB0b1wtc3RyaW5nXC10b2dldGhlcjsKK+ecpiA+IGNvcm5lclwtb2ZcLXRoZVwtZXllczsKK+eRgSA+IGZpbmVcLXBpZWNlXC1vZlwtamFkZTsKK+ammCA+IGNhcnBlbnRlcicnc1wtc3F1YXJlOwor57KzID4gbm9uXC1nbHV0aW5vdXNcLXJpY2U7CivppK4gPiBhXC1sZWdlbmRhcnlcLWFuaW1hbDsKK+axiiA+IGFcLWJyYW5jaGluZ1wtc3RyZWFtOwor57yDID4gbGlnaHRcLXllbGxvd1wtY29sb3I7CivmqqkgPiB0aGVcLWJvbGVcLW9mXC1hXC10cmVlOwor5aWBID4gbGFkeScnc1wtdmFuaXR5XC1jYXNlOwor5qW4ID4gbWFsbG90dXNcLWphcG9uaWN1czsKK+mquiA+IHRpcFwtb2ZcLWFcLWxvbmdcLWJvbmU7Civol78gPiBsb3BoYW50aHVzXC1ydWdvc3VzOwor5qi+ID4gdGhlXC1zaGFkZVwtb2ZcLXRyZWVzOwor6YWkID4gdG9cLWRlYWxcLWluXC1zcGlyaXRzOwor6IeMID4gZHJvcHNpY2FsXC1zd2VsbGluZzsKK+i3qyA+IHNvdW5kXC1vZlwtZm9vdHN0ZXBzOwor57auID4gZW1icm9pZGVyZWRcLWJhbm5lcjsKK+insyA+IGFuXC1hbmNpZW50XC1tZWFzdXJlOwor5p2MID4gdGhlXC1zdHVtcFwtZlwtYVwtdHJlZTsKK+W1qyA+IGFcLWhpbGxcLWluXC1zaGFudHVuZzsKK+aTlyA+IHRvXC1iZWF0XC10aGVcLWJyZWFzdDsKK+iElCA+IHNtYWxsXC1sdW1wXC1vZlwtbWVhdDsKK+mGhSA+IHVuc3RyYWluZWRcLXNwaXJpdHM7CivnvrAgPiBjYXJib255bFwtXChyYWRpY2FsXCk7Civom7ggPiBsb25nXC1sZWdnZWRcLXNwaWRlcjsKK+eegCA+IHRvXC1sb29rXC1hdFwtY2xvc2VseTsKK+ausyA+IG5hbWVcLW9mXC1vbGRcLXdlYXBvbjsKK+W0niA+IG1vdW50YWluXC1pblwtc2hhbnhpOwor5Z6yID4gaGlnaFwtYW5kXC1kcnlcLXBsYWNlOwor6Jm/ID4gYVwta2luZFwtb2ZcLXNjb3JwaW9uOwor55azID4gY2hpbGRob29kXC1kaXNlYXNlczsKK+e9viA+IGFcLWxhcmdlXC1zcXVhcmVcLW5ldDsKK+eNrCA+IGFcLWZhYnVsb3VzXC1tb25zdGVyOwor6b6cID4gdHVydGxlXC1vclwtdG9ydG9pc2U7CivpvpYgPiBmbGlnaHRcLW9mXC1hXC1kcmFnb247CivpuJwgPiBhXC1zcGVjaWVzXC1vZlwtbXluYWg7Civpt70gPiBvcmllbnRhbFwtYnVsbGZpbmNoOwor6bSbID4gbWFsZVwtbWFuZGFyaW5cLWR1Y2s7CivptJcgPiBhbGNlZG9cLWJlbmdhbGVuc2lzOwor6bG1ID4gaHlwb3JoYW1wdXNcLXNhanVyaTsKK+msoCA+IHRvXC1tYWtlXC1hXC10b3BcLWtub3Q7CivpqaogPiBhXC1wdXJlXC1ibGFja1wtaG9yc2U7CivpqaUgPiB0aG9yb3VnaGJyZWRcLWhvcnNlOwor6amKID4gYW5cLWV4Y2VsbGVudFwtaG9yc2U7CivppLwgPiBzYWNyaWZpY2lhbFwtdmljdGltOwor6aGLID4gbG93ZXJcLXBhcnRcLW9mXC1mYWNlOwor6aCUID4gZ29vZFwtYW5kXC1iZWF1dGlmdWw7Civpn4wgPiBzdHJvbmdcLWFuZFwtcGxpYWJsZTsKK+mdsSA+IHN0cm9uZ1wtYW5kXC1wbGlhYmxlOwor6Z2tID4gc3Ryb25nXC1hbmRcLXBsaWFibGU7CivpnasgPiBzdHJvbmdcLWFuZFwtcGxpYWJsZTsKK+mHtSA+IG9ybmFtZW50YWxcLWhhaXJwaW47Civph5IgPiBrYW5neGlcLXJhZGljYWxcLTE2NzsKK+mEriA+IGFuY2llbnRcLXBsYWNlXC1uYW1lOwor6L2ZID4gcmluZ3NcLW9uXC10aGVcLXlva2VzOwor6LuwID4gYVwtcm93XC1vZlwtY2FycmlhZ2VzOwor6LC9ID4gYVwtbW91dGhcLW9yXC1vcGVuaW5nOwor6KiBID4ga2FuZ3hpXC1yYWRpY2FsXC0xNDk7CivopbUgPiBhXC1wbGVhdFwtaW5cLWFcLXNraXJ0Owor6KSwID4gbGlmdFwtdXBcLXRoZVwtc2tpcnRzOwor6KCGID4gYVwta2luZFwtb2ZcLXNjb3JwaW9uOwor6Jq5ID4gZXVsb3RhXC1wZWxpb21waGFsYTsKK+iYtyA+IG9uZVwtbGVnZ2VkXC1tb25zdGVyOwor6Ja3ID4gZWxzaG90cmlhXC1wYWx0cmluaTsKK+iVuiA+IGhvdXR0dXluaWFcLWNvcmRhdGE7Civok7QgPiBlZGlibGVcLXdhdGVyXC1wbGFudDsKK+iRtCA+IHBoeXNhbGlzXC1hbGtla2VuZ2k7CivojYUgPiBhbnN3ZXJcOlwtc21hbGxcLWJlYW47CivojJYgPiBhbGxpdW1cLXZpY3RvcmlhbGlzOwor6IqjID4gbWVkaWNpbmFsXC1wbGFudGFnbzsKK+iHoCA+IHNtYWxsXC1sdW1wXC1vZlwtbWVhdDsKK+iHmCA+IHllYXJcLWVuZFwtc2FjcmlmaWNlOwor6IeIID4geWVhclwtZW5kXC1zYWNyaWZpY2U7Civnv68gPiBnbGlzdGVuaW5nXC1wbHVtYWdlOwor57+WID4ga3NjXC1leHRlbnNpb25cLTMxMDg7CivnvqcgPiBjYXJib3h5bFwtXChyYWRpY2FsXCk7CivnvYggPiBhblwtZWFydGhlbndhcmVcLWphcjsKK+e3lyA+IGxpZ2h0XC15ZWxsb3dcLWNvbG9yOwor57awID4gdG9cLXN0cmluZ1wtdG9nZXRoZXI7CivntIIgPiBuYW1lXC1vZlwtYW5cLWVtcGVyb3I7Civns5IgPiBmb29kXC1mb3JcLWFcLWpvdXJuZXk7CivnqIkgPiBub25cLWdsdXRpbm91c1wtcmljZTsKK+enlCA+IG5vblwtZ2x1dGlub3VzXC1yaWNlOwor56KeID4gcm9vbVwtbWFkZVwtb2ZcLXN0b25lOwor55qqID4gbHVzdGVyXC1cKG9mXC1wZWFybHNcKTsKK+eYpyA+IGludGVybWl0dGVudFwtZmV2ZXI7Civnl5wgPiBhXC1zY2FiYnlcLWJhbGRcLWhlYWQ7CivnlL8gPiBmYXJtaW5nXC1wb3B1bGF0aW9uOwor55SLID4gYVwtamFyXC13aXRob3V0XC1lYXJzOwor55CkID4gamFkZVwtb2ZcLWphZGVcLWJlaW5nOwor546YID4gY291cnRcLWRyZXNzXC1qZXdlbHM7CivnjbMgPiBmaWVyY2VcLWRvZ1wtbG9va2luZzsKK+eFjSA+IHRvXC1jb2xvdXJcLWJ5XC1zbW9rZTsKK+eBpSA+IGFcLWdyb3VwXC1vZlwtc3ByaW5nczsKK+azsiA+IGtpbmRcLW9mXC13aGl0ZVwtd2luZTsKK+awjSA+IGZpbmVcLXdvb2xsZW5cLWNsb3RoOwor5qqBID4gdGhlXC1ib2xlXC1vZlwtYVwtdHJlZTsKK+afuiA+IGFuXC1vbGRcLW1hbicnc1wtc3RhZmY7CivmnbsgPiBsaWd1c3RydW1cLXNpbmVuZXNlOwor5p2ZID4gYVwtdGlueVwtd29vZGVuXC1wb3N0Owor5py2ID4gY2x1c3Rlclwtb2ZcLWZsb3dlcnM7CivmmLcgPiB0b1wtZmVlZFwtYVwtcHJpc29uZXI7Civml7wgPiBnZW50bGVcLWFuZFwtYWZmYWJsZTsKK+aTrSA+IHRyYXBcLWNhdGNoXC1hbmltYWxzOwor5pKIID4gc2Nvb3BcLW91dFwtb2ZcLXdhdGVyOwor5b2EID4gbm9ja1wtYXRcLWVuZFwtb2ZcLWJvdzsKK+W3lCA+IHN1bW1pdFwtb2ZcLW1vdW50YWluOwor5beTID4gc3VtbWl0XC1vZlwtbW91bnRhaW47CivltqggPiBiaWdcLXJvY2t5XC1tb3VudGFpbjsKK+W1liA+IG5hbWVcLW9mXC1hXC1tb3VudGFpbjsKK+WzuSA+IG5hbWVcLW9mXC1hXC1tb3VudGFpbjsKK+WzsSA+IG5hbWVcLW9mXC1hXC1tb3VudGFpbjsKK+WyoiA+IG5hbWVcLW9mXC1hXC1tb3VudGFpbjsKK+WyjSA+IG5hbWVcLW9mXC1hXC1tb3VudGFpbjsKK+WlqSA+IGxhZHknJ3NcLXZhbml0eVwtY2FzZTsKK+WjnCA+IGVhcnRoZW5cLWphclwtb3JcLWp1ZzsKK+WisCA+IGFuXC1lYXJ0aGVud2FyZVwtamFyOwor5aKQID4gdG9cLWJ1aWxkXC13aXRoXC1zb2lsOwor5aGPID4gaGlnaFwtYW5kXC1kcnlcLXBsYWNlOwor5ZmLID4gdG9cLXN3YWxsb3dcLWhhc3RpbHk7Civlk7AgPiBpbmNvaGVyZW50XC1jaGF0dGVyOwor5YOKID4gdGFvaXN0XC1zdXBlclwtYmVpbmc7CivkvbcgPiB0b1wtYWN0XC1jb250cmFyeVwtdG87CivkuoAgPiB0dXJ0bGVcLW9yXC10b3J0b2lzZTsKK+S5kSA+IHN0YW5kXC1zaWRlXC1ieVwtc2lkZTsKK+S4rCA+IGhhbGZcLW9mXC10cmVlXC10cnVuazsKK+S2oyA+IHRvXC1ncmluZFwtdGhlXC10ZWV0aDsKK+S2nyA+IHRvXC1nbmFzaFwtdGhlXC10ZWV0aDsKK+S1lSA+IGFcLXZhcmlldHlvZlwtbWlsbGV0Owor5LSxID4gY2FrZXNcLWFuZFwtYmlzY3VpdHM7CivktKYgPiBhXC1sZWdlbmRhcnlcLWFuaW1hbDsKK+SzqCA+IHRoZVwtZmVtYWxlXC1waG9lbml4Owor5LOUID4gYVwtcGlnZW9uXC1saWtlXC1iaXJkOwor5LOOID4gYVwtcGlnZW9uXC1saWtlXC1iaXJkOwor5LGzID4gYVwta2luZFwtb2ZcLXN0dXJnZW9uOwor5LGjID4gYVwtbG9uZ1wtbmFycm93XC1maXNoOwor5LCqID4gbWlzY2hpZXZvdXNcLXNwaXJpdDsKK+SwqCA+IG1pc2NoaWV2b3VzXC1zcGlyaXQ7Civkr7EgPiB0aGVcLWhhaXJcLXN0YW5kc1wtdXA7Civkr48gPiB0aGVcLXNob3VsZGVyXC1ibGFkZTsKK+SviyA+IHRoZVwtc2hvdWxkZXJcLWJsYWRlOwor5K6lID4gY29sb3JcLW9mXC10aGVcLWhvcnNlOwor5K6dID4gYVwtbGVnZW5kYXJ5XC1hbmltYWw7CivkrbAgPiBzdHJvbmdcLXN3ZWV0XC1zbWVsbDsKK+StryA+IHN0cm9uZ1wtc3dlZXRcLXNtZWxsOwor5K2LID4gdG9cLWVhdFwtdG9cLXRoZVwtZnVsbDsKK+StgyA+IHRvXC1lYXRcLXRvXC10aGVcLWZvb2w7CivkrL4gPiBjYWtlc1wtYW5kXC1iaXNjdWl0czsKK+SstCA+IGZvZGRlclwtZm9yXC1hbmltYWxzOwor5KysID4gdG9cLWVhdFwtdG9cLXRoZVwtZnVsbDsKK+SsqCA+IHRvXC1lYXRcLXRvXC10aGVcLWZ1bGw7CivkrKcgPiByb3VuZFwtc2hhcGVkXC1jYWtlczsKK+SrkCA+IHRvXC1iZW5kXC1vbmUnJ3NcLWhlYWQ7CivkqowgPiBjdXNoaW9uXC1mb3JcLXNhZGRsZTsKK+SohiA+IGFcLWtpbmRcLW9mXC1waGVhc2FudDsKK+SnvCA+IHRoZVwtdGhlXC1zbm93XC1nb29zZTsKK+SnpiA+IG5hbWVcLW9mXC1hXC1oaWxsc2lkZTsKK+SnhyA+IG5hbWVcLW9mXC1hXC1oaWxsc2lkZTsKK+SmriA+IGRvb3JcLW9mXC10aGVcLWNlbnRlcjsKK+SmkiA+IHRoZVwtZG9vclwtaXNcLWNsb3NlZDsKK+SmkCA+IHRoZVwtYm9sdFwtb2ZcLWFcLWRvb3I7CivkpbMgPiBhXC1jaGVtaWNhbFwtZWxlbWVudDsKK+SlsiA+IGFcLWNoZW1pY2FsXC1lbGVtZW50Owor5KWeID4gdG9cLWN1dFwtd2l0aFwtc2hlYXJzOwor5KWdID4gZGVzcGVyYXRlXC1maWdodGluZzsKK+SkhCA+IGZsdXNoZWRcLXdpdGhcLWRyaW5rOwor5KO6ID4gZmlsdHJhdGVkXC10aGVcLXdpbmU7Civko4AgPiBuYW1lXC1vZlwtYVwtbW91bnRhaW47CivkoaAgPiBzdHJvbmdcLWFuZFwtZHVyYWJsZTsKK+ShmyA+IG5hbWVcLW9mXC1hXC1jYXJyaWFnZTsKK+SgpyA+IGhhcmRcLXRvXC1nb1wtZm9yd2FyZDsKK+SgoSA+IHNvdW5kXC1vZlwtZm9vdHN0ZXBzOwor5J+dID4gdG9cLXdhbGtcLXJpZ2h0XC1pbnRvOwor5J2eID4gbmFtZVwtb2ZcLWFcLWltbW9ydGFsOwor5JuJID4gdG9cLWluZHVjZVwtYnlcLXdvcmRzOwor5JqnID4gY3VydmVkXC13aXRoXC1hbmdsZXM7CivkmYMgPiBzbGVldmVsZXNzXC1jbG90aGVzOwor5JiNID4gYVwta2luZFwtb2ZcLXNjb3JwaW9uOwor5Je7ID4gYVwta2luZFwtb2ZcLXNlYVwtY3JhYjsKK+SXqCA+IGxlcHNpbWFcLXNhY2NoYXJpbmE7Civkl6MgPiBpbnNlY3RcLW9mXC1tdWxiZXJyeTsKK+SXjSA+IHdvb2RcLWJvcmluZ1wtaW5zZWN0Owor5JanID4gYVwtcG9pc29ub3VzXC1pbnNlY3Q7CivklpMgPiBvZlwtYVwtd2Fsa2luZ1wtdGlnZXI7CivklaogPiB0aGVcLXdhdGVyXC1wbGFudGFpbjsKK+SUvCA+IHNvdW5kXC1vZlwtdGhlXC1ncmFzczsKK+SUgyA+IGNvcmRhdGVcLWhvdXR0dXluaWE7Civkk6sgPiBuYW1lXC1vZlwtYVwtbW91bnRhaW47Civkk6ggPiBsb25nXC1uZWNrZWRcLWJvdHRsZTsKK+SToCA+IHRoZVwtd2F0ZXJcLXBsYW50YWluOwor5JOWID4gY25pZGl1bVwtb2ZmaWNpbmFsZTsKK+STgyA+IG1lbGFuY2hvbHlcLWFuZFwtc2FkOwor5JKdID4gcm9vdFwtb2ZcLXRoZVwtdGhhdGNoOwor5JGZID4gcHV0XC1vdXRcLXRoZVwtdG9uZ3VlOwor5JGGID4gZmVlbFwtbGlrZVwtdm9taXRpbmc7CivkkJQgPiBtdXNjbGVcLW9mXC10aGVcLWNhbGY7Civkjr4gPiBiaWdcLWFuZFwtcm91bmRcLWV5ZXM7CivkjrQgPiBhXC1sZWdlbmRhcnlcLXNwaXJpdDsKK+SOqiA+IHRoZVwtc3RhbGtcLW9mXC1ncmFpbjsKK+SOlCA+IGZpbmVcLWFuZFwtc29mdFwtaGFpcjsKK+SOjyA+IHlvdW5nXC1iaXJkc1wtZmx5aW5nOwor5I6NID4gZmluZVwtYW5kXC1zb2Z0XC1oYWlyOwor5I2pID4gdG9cLW9mZmVyXC1wcm92aXNpb247CivkjaMgPiBhXC1raW5kXC1vZlwtZmlzaFwtbmV0Owor5IyNID4gZmluZVwtd292ZW5cLXBhdHRlcm47CivkjIkgPiB0aGVcLWxhcmdlXC1vZlwtYVwtbmV0Owor5IuXID4gc3Ryb25nXC1hbmRcLWR1cmFibGU7Civki4ggPiB0b1wtYmluZFwtbG9vc2VcLWhlbXA7CivkiawgPiBjb2Fyc2VcLWJhbWJvb1wtbWF0czsKK+SIriA+IGFcLXdvdmVuXC1pbnN0cnVtZW50Owor5IezID4gYVwtbWVtb3JhZHVtXC10YWJsZXQ7CivkhqogPiBjb2xvclwtb2ZcLXRoZVwtbGlnaHQ7CivkhqUgPiB0b1wtcGllcmNlXC10aHJvdWdoajsKK+SGpCA+IHRvXC1waWVyY2VcLXRocm91Z2hqOwor5IaRID4gYVwtbGl0dGxlXC1wcm90cnVkZWQ7Civkhb0gPiBmcmFncmFuY2VcLW9yXC1hcm9tYTsKK+SFsSA+IHRvXC1lYXRcLXRvXC10aGVcLWZ1bGw7CivkhacgPiBmaW5lXC1yaWNlXC1zZWVkbGluZzsKK+SFnSA+IHRoZVwtc3RhbGtcLW9mXC1ncmFpbjsKK+SFnCA+IHRvXC1zdG9yZVwtdXBcLWdyYWluczsKK+SFgCA+IHRoZVwtc3RhbGtcLW9mXC1ncmFpbjsKK+SEmiA+IHRvXC13b3JzaGlwXC10aGVcLWdvZDsKK+SDvSA+IG5hbWVcLW9mXC1hXC1tb3VudGFpbjsKK+SDnCA+IGFcLWZpbmVcLWJsYWNrXC1zdG9uZTsKK+SBiiA+IGRhcmtcLWFuZFwtZGVlcFwtZXllZDsKK+SAniA+IHdpdGhcLWhlYXZ5XC1leWVsaWRzOwor5ICXID4gdG9cLWxvb2tcLWFza2FuY2VcLWF0Owor47+MID4gbHVtcFwtaW5cLXRoZVwtdGhyb2F0Owor47yjID4gYnJpY2tzXC1vZlwtdGhlXC13ZWxsOwor47yHID4gZmluZVwtamFkZVwtb3JcLWFnYXRlOwor47uXID4gYVwtc3RyaW5nXC1vZlwtcGVhcmxzOwor47uKID4gYVwtcmVkXC1jb2xvcmVkXC1qYWRlOwor47uFID4gamFkZVwtZGVjb3JhdGVkXC1jYXA7CivjuqcgPiBhXC13aGl0ZVwteWVsbG93XC1kb2c7CivjuaQgPiBsYWNraW5nXC1pblwtY291cmFnZTsKK+O4vSA+IGFcLXR3b1wteWVhcnNcLW9sZFwtb3g7CivjuKwgPiBhXC10d29cLXllYXJzXC1vbGRcLW94Owor47iIID4gc2NvcmNoZWRcLW9yXC1idXJuZWQ7Civjt7MgPiBjb2xvclwtb2ZcLXRoZVwtZmxhbWU7Civjt6IgPiBidW5kbGVcLW9mXC1jaGFyY29hbDsKK+O3oCA+IGFcLXdpbGxcLW8nJ1wtdGhlXC13aXNwOwor47a2ID4gc2NvcmNoZWRcLW9yXC1idXJuZWQ7CivjtZMgPiB0aGVcLXdhdGVyXC1pc1wtY2xlYXI7CivjtL4gPiBzd2VsbGluZ1wtb3JcLXJpc2luZzsKK+OzgiA+IHRvXC1mb2xsb3dcLWFcLWNvdXJzZTsKK+OyoSA+IHRoaWNrXC1jb2F0XC1vZlwtaGFpcjsKK+OylyA+IHRvXC1zbW9vdGhcLXRoZVwtaGFpcjsKK+OvtiA+IHRoZVwtY29pclwtcGFsbVwtdHJlZTsKK+OvsiA+IGFcLXdvb2RlblwtZnJhbWV3b3JrOwor46+bID4gZ291cmRcLXNoYXBlZFwtZGF0ZXM7CivjrrsgPiB0b1wtc2NyYXRjaFwtbGlnaHRseTsKK+OujSA+IGFtZW1vcmFuZHVtXC10YWJsZXQ7CivjraggPiB0aGVcLWNvY29hXC1udXRcLXBhbG07CivjraEgPiBuYW1lXC1vZlwtYVwtbW91bnRhaW47CivjrZ0gPiBuYW1lXC1vZlwtYVwtcGF2aWxpb247CivjrLQgPiB0aGVcLW1vb25cLWlzXC1kaW1tZWQ7CivjrJIgPiB0aGVcLXN1blwtYXJlXC1kaW1tZWQ7CivjrI4gPiBtb3Rlc1wtaW5cLWFcLXN1bmJlYW07Civjq6YgPiBvZlwtbG9va1wtb2ZcLXRoZVwtc3VuOwor46ueID4gb2ZcLWxvb2tcLW9mXC10aGVcLXN1bjsKK+OquCA+IHRvXC1maWxsXC1hXC1jdXBcLXdpdGg7CivjqYMgPiB0b1wtdGFrZVwtb3JcLWNhcHR1cmU7CivjqL0gPiB0b1wtY3V0XC1vclwtcmlwXC1vcGVuOwor46ihID4gdG9cLXB1c2hcLXdpdGhcLWhhbmRzOwor46icID4gdG9cLWhlbHBcLWVhY2hcLW90aGVyOwor76eIID4gbGlndXN0cnVtXC1zaW5lbmVzZTsKK+OngCA+IHRoZVwtYm9sdFwtb2ZcLWFcLWRvb3I7Civjpr4gPiB0aGVcLWJvbHRcLW9mXC1hXC1kb29yOwor76aHID4gYVwtcHVyZVwtYmxhY2tcLWhvcnNlOwor46W4ID4gdG9cLXN5bXBhdGhpemVcLXdpdGg7CivjpaggPiB1bmhhcHB5XC1kaXNwbGVhc2VkOwor46SqID4gdG9cLWZpbmRcLWZhdWx0XC13aXRoOwor76SmID4geWVhclwtZW5kXC1zYWNyaWZpY2U7CivvpIggPiB0dXJ0bGVcLW9yXC10b3J0b2lzZTsKK++khyA+IHR1cnRsZVwtb3JcLXRvcnRvaXNlOwor46OMID4gdG9cLWpvaW5cLXR3b1wtdGhpbmdzOwor46GvID4gd2FsbFwtb2ZcLWFcLWJ1aWxkaW5nOwor46CmID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor46CgID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor46CTID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor46CPID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor46CGID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+zID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+wID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+qID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+mID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+YID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+NID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+KID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+IID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+GID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+EID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45+AID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor4567ID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor4560ID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor456zID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor456yID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor456wID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor456oID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor456mID4gbmFtZVwtb2ZcLWFcLW1vdW50YWluOwor45izID4gYVwtaGlsbG9ja1wtb3JcLW1vdW5kOwor45ixID4gdG9cLWZhbGxcLWludG9cLXJ1aW5zOwor45icID4gYVwta2luZFwtb2ZcLXNpbGt3b3JtOwor45aFID4gc291bmRcLW9mXC1hXC13aGlzdGxlOwor45aDID4gdG9cLXJvYXJcLW9mXC1hbmltYWxzOwor45SiID4gdG9cLWJyZWFrXC1zb21ldGhpbmc7Civnmr8gPiBzaGFsbG93XC1jb250YWluZXI7CivlsZMgPiBnaWdhbnRpY1wtc3RyZW5ndGg7CivmtL4gPiBzY2hvb2xcLW9mXC10aG91Z2h0Owor5aeTID4gb25lJydzXC1mYW1pbHlcLW5hbWU7CivnhY4gPiBmcnlcLWluXC1mYXRcLW9yXC1vaWw7CivopYEgPiBzd2FkZGxpbmdcLWNsb3RoZXM7Civlk4ggPiBzb3VuZFwtb2ZcLWxhdWdodGVyOwor6biaID4gc3BlY2llc1wtb2ZcLXBhcnJvdDsKK+aspyA+IHRyYW5zbGl0XC5cOlwtZXVyb3BlOwor6bWhID4gc3BlY2llc1wtb2ZcLXBhcnJvdDsKK+iuoiA+IGRyYXdcLXVwXC1hZ3JlZW1lbnQ7CivlgY8gPiBpbmNsaW5lZFwtb25lXC1zaWRlOwor5q2UID4gYmxvd1wtdGhyb3VnaFwtbm9zZTsKK+WfuSA+IGJhbmtcLXVwXC13aXRoXC1kaXJ0Owor5ryrID4gb3ZlcmZsb3dcLW9mXC13YXRlcjsKK+S+oCA+IGNoaXZhbHJvdXNcLXBlcnNvbjsKK+WnhiA+IGNoaWxkJydzXC1nb3Zlcm5lc3M7Civnm5IgPiBzbWFsbFwtYm94XC1vclwtY2FzZTsKK+WEkiA+IGNvbmZ1Y2lhblwtc2Nob2xhcjsKK+mYqiA+IGhpbGxzaWRlXC1mYXJtbGFuZDsKK+i/iCA+IHRha2VcLWFcLWJpZ1wtc3RyaWRlOwor5o2PID4gcGlja1wtd2l0aFwtZmluZ2VyczsKK+a1mSA+IHpoZWppYW5nXC1wcm92aW5jZTsKK+etpyA+IGJhbWJvb1wtd2F0ZXJcLXBpcGU7CivoiZggPiBjb3VudGVyXC1mb3JcLXNoaXBzOwor6LaBID4gdGFrZVwtYWR2YW50YWdlXC1vZjsKK+mJoiA+IGVhcnRoZW53YXJlXC1iYXNpbjsKK+iTrCA+IHR5cGVcLW9mXC1yYXNwYmVycnk7CivovpYgPiBsaW5jaHBpblwtb2ZcLXdoZWVsOwor6YCFID4gbWVldFwtdW5leHBlY3RlZGx5Owor5ZiOID4gc291bmRcLW9mXC1sYXVnaHRlcjsKK+mFoyA+IGVuam95XC1pbnRveGljYW50czsKK+mluiA+IHN0dWZmZWRcLWR1bXBsaW5nczsKK+WSjyA+IHNpbmdcLXNvbmdcLW9yXC1wb2VtOwor6ZK1ID4gZWFydGhlbndhcmVcLWJhc2luOwor5pCAID4gZ2l2ZVwtaGVscGluZ1wtaGFuZDsKK+aNtiA+IHN0cmlrZVwtd2l0aFwtc3RpY2s7CivliKggPiBjYXJwZW50ZXInJ3NcLXBsYW5lOwor6KCVID4gZXVtZW5lc1wtcG9saWZvbWlzOwor6aWoID4gc3R1ZmZlZFwtZHVtcGxpbmdzOwor5bSGID4ga29uZ3RvbmdcLW1vdW50YWluOwor55uFID4gc21hbGxcLWN1cFwtb3JcLWJvd2w7CivmooYgPiB3YXRjaG1hbicnc1wtcmF0dGxlOwor5bWHID4gbW91bnRhaW5cLWluXC1oZW5hbjsKK+iAtyA+IGVhcnNcLWhhbmdpbmdcLWRvd247CivnvowgPiBxaWFuZ1wtbmF0aW9uYWxpdHk7Civoi54gPiBhXC12YXJpZXR5XC1vZlwtcnVzaDsKK+m5piA+IHNwZWNpZXNcLW9mXC1wYXJyb3Q7Civol5wgPiBjaGVub3BvZGl1bVwtYWxidW07CivoiYQgPiBzdGVyblwtb2ZcLWFcLXZlc3NlbDsKK+m5iSA+IHNwZWNpZXNcLW9mXC1wYXJyb3Q7Civls4EgPiB5ZWxsb3dcLWRpcnRcLW1vdW50Owor6ZWUID4gaGlnaFwtcXVhbGl0eVwtaXJvbjsKK+myqyA+IGNhcmFzc2l1c1wtYXVyYXR1czsKK+m+hyA+IHRvXC1zaG93XC10aGVcLXRlZXRoOwor5rKtID4gcml2ZXJcLWluXC1zaGFudHVuZzsKK+amqyA+IG1vcnRpc2VcLWFuZFwtdGVub247CivokIsgPiBsdXh1cmlhbnRcLWZvbGlhZ2U7Civphq4gPiByZWxpZ2lvdXNcLXNlcnZpY2U7CivniZ0gPiBmZW1hbGVcLW9mXC1zcGVjaWVzOwor5pu3ID4gd2h5XD9cLXdoYXRcP1wtd2hlcmVcPzsKK+eRtyA+IGZpbmVcLXF1YWxpdHlcLWphZGU7CivogKYgPiBwbG93XC1zaWRlXC1ieVwtc2lkZTsKK+m4tiA+IHRoZVwtZWFzdGVyblwtZWdyZXQ7Civnr6YgPiBmaW5lXC10b290aGVkXC1jb21iOwor5aaBID4gYWN0XC1hc1wtZ29cLWJldHdlZW47CivojaUgPiBhXC1jb3VudHlcLWluXC1oZW5hbjsKK+aIvSA+IHRvXC1iYWxlXC1vdXRcLXdhdGVyOwor5p6zID4gdHJpZm9saWF0ZVwtb3JhbmdlOwor5qSQID4gemVsa293YVwtYWN1bWluYXRhOwor5bSkID4gbW91bnRhaW5cLWluXC1oZW5hbjsKK+mtiSA+IGFcLWtpbmRcLW9mXC1tb25zdGVyOwor6aKeID4gdGhlXC10ZW1wb3JhbFwtYm9uZTsKK+mUtCA+IGhpZ2hcLXF1YWxpdHlcLWlyb247CivnrJUgPiBiYW1ib29cLXdhdGVyXC1waXBlOwor6ICpID4gdG9cLXBsb3VnaFwuXC10b1wtc293Owor5buoID4gZ292ZXJubWVudFwtb2ZmaWNlOwor6J+uID4gdHlwZVwtb2ZcLWVhcnRod29ybTsKK+ibsSA+IGtpbmRcLW9mXC1idXR0ZXJmbHk7CivnprMgPiBwcmF5XC1vclwtc2FjcmlmaWNlOwor556iID4gZXllc2lnaHRcLW9ic2N1cmVkOwor6JS4ID4gY291bnRlclwtZm9yXC1wbGFudDsKK+iehSA+IFwoaW50ZXN0aW5hbFwtd29ybVwpOwor56WnID4gYW5cLWFuY2VzdHJhbFwtaGFsbDsKK+afnSA+IHdhdGNobWFuJydzXC1yYXR0bGU7CivooIMgPiB0aGVcLXNvbGl0YXJ5XC13YXNwOwor6Jy+ID4gdGhlXC1zb2xpdGFyeVwtd2FzcDsKK+iBgyA+IGVhcnNcLXdpdGhvdXRcLXJpbXM7CivogJwgPiBzcGFkZVwtc2hhcGVkXC10b29sOwor5oWdID4gZG9cLWV2aWxcLWluXC1zZWNyZXQ7CivlurMgPiBhXC1sb3dcLWJ1aWx0XC1ob3VzZTsKK+m8oiA+IGFcLXZhcmlldHlcLW9mXC1tb2xlOwor6Jq6ID4gYVwtYm9hXC1jb25zdHJpY3RvcjsKK+mipSA+IHRoZVwtdGVtcG9yYWxcLWJvbmU7CivnoYcgPiBhXC1raW5kXC1vZlwtbWluZXJhbDsKK+ehrSA+IGFcLWNydWRlXC1zYWx0cGV0cmU7Civog6ggPiBhXC1raW5kXC1vZlwtcHJvdGVpbjsKK+m9nCA+IHRvXC1zaG93XC10aGVcLXRlZXRoOwor6b2EID4gcmVkXC1zb3Jlc1wtb25cLW5vc2U7Civpu58gPiBibGFja1wtYW5kXC1zaGluaW5nOwor6bmBID4gc3BlY2llc1wtb2ZcLXBpZ2VvbjsKK+m1tSA+IHNjb3BzXC1zZW1pdG9ycXVlczsKK+m1kyA+IHNwZWNpZXNcLW9mXC1waWdlb247Civpr70gPiBjYXJhc3NpdXNcLWF1cmF0dXM7CivprrggPiBzY2lhZW5hXC1hbGJpZmxvcmE7CivprasgPiB0aGVcLXlvdW5nXC1vZlwtZmlzaDsKK+mtjiA+IGFcLWtpbmRcLW9mXC1tb25zdGVyOwor6au9ID4gdG9cLWRyZXNzXC10aGVcLWhhaXI7CivppakgPiBzYWNyZmljaWFsXC12aWN0aW07CivppIMgPiBzdHVmZmVkXC1kdW1wbGluZ3M7CivppIIgPiB0b1wtb2J0YWluXC1ieVwtaG9vazsKK+mjqSA+IHN0dWZmZWRcLWR1bXBsaW5nczsKK+mhsyA+IHRoZVwtdGVtcG9yYWxcLWJvbmU7CivpoawgPiB0aGVcLXRlbXBvcmFsXC1ib25lOwor6Z64ID4gbGVhdGhlclwtYXJtXC1ndWFyZDsKK+mesiA+IGxlYXRoZXJcLWFybVwtZ3VhcmQ7Civpnb8gPiB0aGVcLWxlZ1wtb2ZcLWFcLWJvb3Q7CivpmrggPiBiZVwtc3Vic2VydmllbnRcLXRvOwor6Zq3ID4gYmVcLXN1YnNlcnZpZW50XC10bzsKK+mWqiA+IHRvXC1sb3NlXC1sb3N0XC1pdGVtOwor6ZGkID4gY2FycGVudGVyJydzXC1wbGFuZTsKK+mRjCA+IGhpZ2hcLXF1YWxpdHlcLWlyb247CivpjYcgPiBoaWdoXC1xdWFsaXR5XC1pcm9uOwor6YqgID4gcmhvZGl1bVwtcnV0aGVuaXVtOwor6YmVID4gcHJvbWV0aGl1bVwtYnJvbnplOwor6YmLID4gY2FycGVudGVyJydzXC1wbGFuZTsKK+mIsyA+IGNvbHVtYml1bVwtbmlvYml1bTsKK+mGrSA+IG1vdWxkc1wtb25cLWxpcXVpZHM7CivphpEgPiB0b1wtc3RyYWluXC1zcGlyaXRzOwor6YW6ID4gZHJpbmtcLXdpdGhcLW90aGVyczsKK+mCgSA+IHRha2VcLWFcLWJpZ1wtc3RyaWRlOwor6L2EID4gbGluY2hwaW5cLW9mXC13aGVlbDsKK+iyjSA+IGFcLWZveFwtbGlrZVwtYW5pbWFsOwor6LGLID4gY2VyZW1vbmlhbFwtdmVzc2VsOwor6KiCID4gZHJhd1wtdXBcLWFncmVlbWVudDsKK+imvCA+IGV4cGxhaW5cLWluXC1kZXRhaWw7CivoppkgPiBleHBsYWluXC1pblwtZGV0YWlsOwor6J2hID4gZXVtZW5lc1wtcG9saWZvbWlzOwor6JyUID4gaW5sYWlkXC1zaGVsbFwtd29yazsKK+ibuiA+IGtpbmRcLW9mXC1idXR0ZXJmbHk7CivomqYgPiBhXC1ib2FcLWNvbnN0cmljdG9yOwor6Ji1ID4gcGh5c2FsaXNcLWFuZ3VsYXRhOwor6JeoID4ga2luZFwtb2ZcLXJhc3BiZXJyeTsKK+iVuCA+IHdhdGVyXC1saWx5JydzXC1sZWFmOwor6JWRID4gdmFsZXJpYW5hXC12aWxsb3NhOwor6JGOID4gaHVtdWx1c1wtamFwb25pY3VzOwor6I+jID4gYXJ0ZW1pc2lhXC1hcGlhY2VhOwor6I6bID4gc3RhbGtzXC1vZlwtZ3Jhc3NlczsKK+iMjSA+IHRvXC1iZVwtY2lyY3Vtc3BlY3Q7CivnvZsgPiBsYXJnZVwtZmlzaGluZ1wtbmV0Owor57y9ID4gZWFydGhlbndhcmVcLWJhc2luOwor57iwID4gYmFuZFwtZm9yXC10aGVcLWhhaXI7Civnto4gPiBzaWxrXC1icmFpZGVkXC1jb3JkOwor57SsID4ga2luZFwtb2ZcLXRoaW5cLXNpbGs7CivnsbggPiBwb3dkZXJ5XC1zdWJzdGFuY2U7CivnsZMgPiBiaWdcLXdpbm5vd1wtYmFza2V0Owor56+oID4gY29hcnNlXC1iYW1ib29cLW1hdDsKK+euhiA+IGZpbmVcLXRvb3RoZWRcLWNvbWI7CivnpYogPiByaXZlclwtaW5cLXNoYW5kb25nOwor55i1ID4gYVwtd2FzdGluZ1wtZGlzZWFzZTsKK+eSqyA+IHBlbmRhbnRcLW9ybmFtZW50czsKK+eSpiA+IGZpbmVcLXF1YWxpdHlcLWphZGU7Civnjp4gPiBhblwtaW5mZXJpb3JcLWFnYXRlOwor54aAID4gdGhlXC1ibGF6ZVwtb2ZcLWZpcmU7CivngY4gPiBtb3ZlbWVudFwtb2ZcLXdhdGVyOwor5rmRID4gdG9cLXN0cmFpblwtc3Bpcml0czsKK+a4sCA+IGZvcm1pbmdcLW9yXC1yaXNpbmc7CivmtLYgPiB0aGVcLXJ1c2hcLW9mXC13YXRlcjsKK+acoCA+IGNvbG9yXC1vZlwtdGhlXC1tb29uOwor5pqUID4gbmFtZVwtb2ZcLWFcLWNvdW50cnk7CivmlLAgPiB0b3RhbGx5XC1leGhhdXN0ZWQ7CivmjqsgPiBiZVwtb25cLW5pZ2h0XC13YXRjaDsKK+aNpSA+IHRvXC1iZW5kXC10aGVcLXdyaXN0Owor5oqMID4gdG9cLWJhbGVcLW91dFwtd2F0ZXI7CivmhLAgPiBjbGVhcm5lc3NcLW9mXC1taW5kOwor5byWID4gcGhvbmV0aWNcLWZvclwtJyd0ZScnOwor5bWGID4gbW91bnRhaW5cLWluXC1oZW5hbjsKK+WxrSA+IGdpZ2FudGljXC1zdHJlbmd0aDsKK+WwqCA+IHNoYWdneVwtaGFpcmVkXC1kb2c7CivlpIogPiBrYW5neGlcLXJhZGljYWxcLTM1Owor5Za/ID4gY2hpcnBpbmdcLW9mXC1iaXJkczsKK+WWvCA+IHVzZWRcLXBob25ldGljYWxseTsKK+WWuSA+IGNoZW1pY2FsXC1jb21wb3VuZDsKK+WTtSA+IHRoZVwtY3J5XC1vZlwtYVwtYmlyZDsKK+WTtCA+IGNyeWluZ1wtb2ZcLWluZmFudHM7CivlkKIgPiB2b21pdGluZ1wtb2ZcLWFcLWRvZzsKK+WAiCA+IHRvXC1pbmR1Y2VcLXRvXC1jb21lOwor5L+gID4gY2hpdmFscm91c1wtcGVyc29uOwor5L+IID4gdG9cLWluZm9ybVwtcXVpY2tseTsKK+S7giA+IHN1cnBsdXNcLW9yXC1leGNlc3M7CivkuaogPiBhXC1iZW5kXC1pblwtYVwtcml2ZXI7CivktrAgPiBmZWF0aGVyXC1vcm5hbWVudHM7CivktpYgPiBkaXNlYXNlXC1vZlwtdG9uZ3VlOwor5LWcID4gdG9cLXBsb3VnaFwtYW5kXC1zb3c7CivktIogPiB0aGVcLWNyb3dcLXBoZWFzYW50Owor5LOkID4gYVwta2luZFwtb2ZcLXN0cmFuZ2U7Civks5kgPiBhXC1lZ3JldFwtbGlrZVwtYmlyZDsKK+SvpSA+IHdpdGhcLWFcLWhpZ2hcLXNrdWxsOwor5K+iID4gcGFydGlhbFwtcGFyYWx5c2lzOwor5K6rID4gYVwtYmlnXC1tdWxlXC1hblwtYXNzOwor5K6aID4gZGlzZWFzZXNcLW9mXC1ob3JzZTsKK+SukCA+IGluXC1nb29kXC1jb25kaXRpb247CivkrZQgPiBzdGVhbWVkXC1kdW1wbGluZ3M7CivkrLAgPiBsaWdodFwtcmVmcmVzaG1lbnQ7CivkrJUgPiBzb3VuZFwtb2ZcLXRoZVwtd2luZDsKK+SsjSA+IHRoZVwtc291bmRcLW9mXC13aW5kOwor5KyGID4gYVwtYmx1c3RlcmluZ1wtZ2FsZTsKK+SsgyA+IHRoZVwtc291bmRcLW9mXC13aW5kOwor5KyAID4gc291bmRcLW9mXC10aGVcLXdpbmQ7Civkq6YgPiB0aGVcLWxvd2VyXC1qYXdib25lOwor5KufID4gZmFjaWFsXC1jb21wbGV4aW9uOwor5KuNID4gdG9cLWJvd1wtb25lJydzXC1oZWFkOwor5KuJID4gZmFjaWFsXC1hcHBlYXJhbmNlOwor5KiVID4gcG91cmluZ1wtd2l0aFwtcmFpbjsKK+SnuiA+IHRoZVwtbWFsZVwtb2ZcLWJpcmRzOwor5KaqID4gc291bmRcLW9mXC10aGVcLWRvb3I7Civkpp0gPiBzb3VuZFwtb2ZcLXRoZVwtZG9vcjsKK+SmliA+IHNvdW5kXC1vZlwtdGhlXC1kb29yOwor5KaDID4gdG9cLWRpZ1wtd2l0aFwtYVwtaG9lOwor5KO7ID4gY29sb3JcLW9mXC10aGVcLXdpbmU7Civko6ogPiBjb2xvclwtb2ZcLXRoZVwtd2luZTsKK+SinSA+IHRoZVwtbmV4dFwtaW5cLW9yZGVyOwor5KG3ID4gbm9pc2VcLW9mXC12ZWhpY2xlczsKK+ShqiA+IGZhblwtb2ZcLWFcLWNhcnJpYWdlOwor5KGZID4gYW5cLWFybWVkXC1jYXJyaWFnZTsKK+SelSA+IGNvbG9yXC1vZlwtdGhlXC1maXJlOwor5J6CID4gZmFpcmx5XC1wcm9zcGVyb3VzOwor5J26ID4gdG9cLXBpZXJjZVwtdGhyb3VnaDsKK+SduSA+IGZhaXJseVwtcHJvc3Blcm91czsKK+SdsyA+IHRvXC1raWxsXC1mb3JcLW1vbmV5Owor5J2yID4gZmFyZXdlbGxcLXByZXNlbnRzOwor5JyiID4gY3J1ZWxcLWFuZFwtdmlvbGVudDsKK+SaoCA+IHVuYnJva2VuXC1maXJld29vZDsKK+SanSA+IG5ld1wtZ3Jvd2luZ1wtaG9ybnM7CivkmpogPiBob3JuXC1vZlwtYW5cLWFuaW1hbDsKK+SakSA+IHRvXC1zdGVhbFwtYVwtZ2xhbmNlOwor5JqAID4gdG9cLXNlZVwtc3RlYWx0aGlseTsKK+SZtCA+IHRvXC1zb2FyXC1hc1wtYVwtYmlyZDsKK+SZqiA+IGFcLWxvb3BcLWZvclwtYnV0dG9uOwor5JiOID4gbmFtZVwtb2ZcLWFuXC1pbnNlY3Q7Civkl7kgPiBoYWlyeVwtY2F0ZXJwaWxsYXI7Civkl6UgPiB0aGVcLXNvbGl0YXJ5XC13YXNwOwor5JWnID4geml6YW5pYVwtbGF0aWZvbGlhOwor5JWgID4gY29hcnNlXC1iYW1ib29cLW1hdDsKK+SVhiA+IHJvdW5kXC1zdHJhd1wtcXVpbHQ7Civkk5sgPiBtb2xlY3VsYXJcLWZvcm11bGE7Civkkr0gPiBpbGxpY2l1bVwtYW5pc2F0dW07CivkkpAgPiBkaXN0dXJiZWRcLWluXC1taW5kOwor5JKPID4gZGlzdHVyYmVkXC1pblwtbWluZDsKK+SRvCA+IG9jZWFuXC1nb2luZ1wtbGluZXI7CivkkKAgPiBiZXR3ZWVuXC10aGVcLWZsZXNoOwor5JCYID4gdG9cLWxhdWdoXC1oZWFydGlseTsKK+SQliA+IHRvXC1sYXVnaFwtaGVhcnRpbHk7Civkj7AgPiBhXC1raW5kXC1vZlwtaW5zZWN0czsKK+SPmyA+IGFcLWtpbmRcLW9mXC1pbnNlY3RzOwor5I6oID4gdG9cLXBsb3VnaFwtYW5kXC1zb3c7Civkja0gPiBhXC1ld2VcLW9yXC1zaGVcLWdvYXQ7CivkjacgPiBhXC1ld2VcLW9yXC1zaGVcLWdvYXQ7CivkjYcgPiBmbGF0XC1ib3R0b21cLWNyb2NrOwor5IyoID4gdGhpblwtc2lsa1wtZmFicmljczsKK+SLuyA+IHRvXC1zcGluXC1hbmRcLXdlYXZlOwor5Iu6ID4gYVwtc3dpbmdcLWFcLWNydXBwZXI7Civki5ggPiB0b1wtaGFuZFwtYnlcLWFcLXJvcGU7Civkiq8gPiBncmFpbnNcLXdpdGhcLWJlYXJkOwor5IqaID4gc3RlYW1lZFwtZHVtcGxpbmdzOwor5ImMID4gY3J1ZGVcLWJhbWJvb1wtbWF0czsKK+SIoCA+IGJvb2tzXC1hbmRcLXZvbHVtZXM7CivkhpUgPiB0b1wtcGllcmNlXC10aHJvdWdoOwor5IaUID4gdG9cLXBpZXJjZVwtdGhyb3VnaDsKK+SEiSA+IGFcLXJpdGVcLW9yXC1zZXJ2aWNlOwor5IO/ID4gYVwtcml0ZVwtb3JcLXNlcnZpY2U7CivkgqMgPiBhXC1raW5kXC1vZlwtbWluZXJhbDsKK+SBvSA+IGV5ZXNpZ2h0XC1vYnNjdXJlZDsKK+SBuCA+IGV5ZXNpZ2h0XC1vYnNjdXJlZDsKK+SBhCA+IHRvXC1jbG9zZVwtdGhlXC1leWVzOwor5IC5ID4gdG9cLXdpbmtcLWV5ZWxhc2hlczsKK+O/gyA+IGFuXC1veFwtaGVhZGVkXC1ib2lsOwor476xID4gaW5jdXJhYmxlXC1kaXNlYXNlOwor472NID4gYW5cLWVhcnRoZW5cLXZlc3NlbDsKK+O8tCA+IGFuXC1lYXJ0aGVuXC12ZXNzZWw7Civjur8gPiBhXC1qYWRlXC1saWtlXC1zdG9uZTsKK+O2vyA+IHRoZVwtc21va2VcLXdlbnRcLXVwOwor47a0ID4gYVwtdmVyeVwtZ3JlYXRcLWZpcmU7CivjtasgPiB3YXRlclwtZ3VzaGluZ1wtb3V0Owor47WNID4gZmlsbGVkXC13aXRoXC13YXRlcjsKK+O1hCA+IG5hbWVcLW9mXC1hXC1keW5hc3R5Owor47OcID4gdGhlXC1mbG93aW5nXC13YXRlcjsKK+OysiA+IGZpbmVcLWNvdHRvblwtY2xvdGg7CivjspggPiBmaW5lXC13b29sZW5cLWNsb3RoOwor47KLID4gYVwta2luZFwtb2ZcLWFuaW1hbHM7CivjsoMgPiBzbW9vdGhcLWFuZFwtY3VydmVkOwor47CpID4gc291bmRcLW9mXC1sYXVnaHRlcjsKK+OvvyA+IGhhbmRsZVwtb2ZcLWFcLWxhZGxlOwor46+mID4gdGhlXC1nYW1lXC1vZlwtY2hlc3M7CivjrrUgPiBjb21tb25cLXNhbmRhbHdvb2Q7CivjrqggPiBjb2RpdW1cLW1hY3JvbmF0dW07CivjrpogPiB0aGVcLWNoZXN0bnV0XC10cmVlOwor46ybID4gdG9cLWRyeVwtaW5cLXRoZVwtc3VuOwor46muID4gdG9cLWxpZnRcLXVwXC1vclwtb2ZmOwor46mpID4gdG9cLWNvbWVcLXRvXC1hblwtZW5kOwor46mZID4gYVwtY29ya1wtb3JcLXN0b3BwZXI7CivjqKIgPiB0b1wtcmlwXC1vcGVuXC1mbGVzaDsKK++muCA+IGJlXC1zdWJzZXJ2aWVudFwtdG87Civjo6IgPiB0b1wtcmVzdFwtZnJvbVwtd29yazsKK+OjkyA+IGxpdGVyYXJ5XC1pblwtdGFzdGU7Civjo40gPiBhXC1yYWlzZWRcLXBsYXRmb3JtOwor46KuID4gdG9cLXVuc3RyaW5nXC1hXC1ib3c7CivjopEgPiBhXC1jb2xsYXBzZWRcLWhvdXNlOwor46KIID4gYVwtY29sbGFwc2VkXC1ob3VzZTsKK+OihCA+IGFcLWtpbmRcLW9mXC11dGVuc2lsOwor46GfID4gYmVkXC1tYXRzXC1mb3JcLWJhYnk7CivjoLcgPiBhXC12ZXNzZWxcLWZvclwtcmljZTsKK+OgpSA+IHJ1Z2dlZFwtYW5kXC11bmV2ZW47CivjoKIgPiBydWdnZWRcLWFuZFwtdW5ldmVuOwor45+0ID4gbHVtcFwtb25cLXRoZVwtaGlsbHM7Civjn6QgPiB6aHVhbmdcLWluXC1ndWFuZ3hpOwor45+DID4gdG9cLWhhdmVcLWNoYXJnZVwtb2Y7Civjnq0gPiBuYW1lXC1vZlwtYW5cLWlzbGFuZDsKK+OdjCA+IHByb2xvbmdlZFwtaWxsbmVzczsKK+ObtCA+IHRvXC1hbmdlclwtdG9cLWFubm95Owor45qFID4gdG9cLXdvcnNoaXBcLW9mXC1nb2Q7CivjmakgPiBhblwtZW5jbG9zaW5nXC13YWxsOwor45imID4gd2FsbFwtbWFkZVwtb2ZcLXNvaWw7CivjmJogPiBhbmdyeVwtYWlyXC1vZlwtbG9vazsKK+OXvCA+IGVhdGluZ1wtb3JcLXRhbGtpbmc7Civjl6UgPiBzb3VuZFwtb2ZcLXN0cmlraW5nOwor45a4ID4gdG9cLWxhdWdoXC1oZWFydGlseTsKK+OWpyA+IGNhblwtbm90XC1zZWVcLWNsZWFyOwor45SdID4gc3Ryb25nXC1yZXNpc3RhbmNlOwor45O+ID4gdG9cLXdvdW5kXC10aGVcLXNraW47CivjkZ0gPiB0b1wtbWFrZVwtYVwtZm9vbFwtb2Y7CivjkY8gPiB0b1wtc3RhbmRcLWFuZFwtd2FpdDsKK+ORiiA+IGFcLWtpbmRcLW9mXC1kaXNlYXNlOwor45CyID4gbmFtZVwtb2ZcLWFuXC1pc2xhbmQ7CivkuKogPiBudW1lcmFyeVwtYWRqdW5jdDsKK+mHjCA+IHVuaXRcLW9mXC1kaXN0YW5jZTsKK+mYsyA+ICcnbWFsZScnXC1wcmluY2lwbGU7CivoqJ0gPiBleHByZXNzXC1zdXJwcmlzZTsKK+m7jSA+IGdsdXRpbm91c1wtbWlsbGV0Owor5YmnID4gdGhlYXRyaWNhbFwtcGxheXM7CivomIIgPiBzdGFtZW5cLW9yXC1waXN0aWw7CivmjLogPiB0b1wtc3RhbmRcLXVwcmlnaHQ7CivnoYAgPiBmb3VuZGF0aW9uXC1zdG9uZTsKK+WKhyA+IHRoZWF0cmljYWxcLXBsYXlzOwor6IiFID4gbW90aGVyJydzXC1icm90aGVyOwor6JCnID4gY29tbW9uXC1hcnRlbWlzaWE7CivlgIsgPiBudW1lcmFyeVwtYWRqdW5jdDsKK+S/uiA+IHBlcnNvbmFsXC1wcm9ub3VuOwor546yID4gdGlua2xpbmdcLW9mXC1qYWRlOwor6Zm9ID4gJydtYWxlJydcLXByaW5jaXBsZTsKK+euhyA+IG51bWVyYXJ5XC1hZGp1bmN0Owor5o2pID4gdHdpc3RcLXdpdGhcLWhhbmRzOwor6K62ID4gZXhwcmVzc1wtc3VycHJpc2U7Civpu5sgPiBibGFja2VuXC1leWVicm93czsKK+WmhiA+IHRvXC1hZG9yblwtb25lc2VsZjsKK+W5oiA+IGNhcnJpYWdlXC1jdXJ0YWluOwor5qKtID4gd2VhdmVyJydzXC1zaHV0dGxlOwor5ryqID4gcmlwcGxlc1wtb25cLXdhdGVyOwor55y3ID4gdGFrZVwtaW50ZXJlc3RcLWluOwor5YuLID4gbWVyaXRvcmlvdXNcLWRlZWQ7CivnlK0gPiB0aGVyZVwtaXNcLW5vXC1uZWVkOwor56WgID4gYW5jZXN0cmFsXC10ZW1wbGU7CivoiJQgPiBsaWNrXC13aXRoXC10b25ndWU7CivolYogPiB1bm9wZW5lZFwtZmxvd2VyczsKK+i1oyA+IGppYW5neGlcLXByb3ZpbmNlOwor6Le3ID4gcmFpc2VcLW9uZScnc1wtZm9vdDsKK+WJgSA+IGNob3BcLWJ5XC1wb3VuZGluZzsKK+iWsCA+IGFcLW1lZGljaW5hbFwtaGVyYjsKK+WPvCA+IGhvbGRpbmdcLWluXC1tb3V0aDsKK+iNvCA+IGJpdHRlclwtdmVnZXRhYmxlOwor5b6ZID4gbW92ZVwtb25lJydzXC1hYm9kZTsKK+a2lCA+IHJpdmVyXC1pblwtc2hhYW54aTsKK+a9oiA+IGV4cGFuc2VcLW9mXC13YXRlcjsKK+enuCA+IHN0YWxrc1wtb2ZcLW1pbGxldDsKK+iiiCA+IGJ1ZGRoaXN0XC1jYXNzb2NrOwor54+eID4ga2luZFwtb2ZcLW5lY2tsYWNlOwor5ZW+ID4gd2FpbGluZ1wtb2ZcLWNoaWxkOwor5Lq7ID4gcmFkaWNhbFwtbnVtYmVyXC05Owor6IiQID4gbGlja1wtd2l0aFwtdG9uZ3VlOwor5aSZID4gZWFybHlcLWluXC1tb3JuaW5nOwor6bmYID4gYVwta2luZFwtb2ZcLXBpZ2VvbjsKK+WoqSA+IGdpdmVcLWJpcnRoXC1jaGlsZDsKK+WnnSA+IGFcLWJlYXV0aWZ1bFwtZ2lybDsKK+aHkSA+IGJlXC1zaWNrXC1hdFwtaGVhcnQ7CivplIkgPiBjYXJwZW50ZXInJ3NcLWZpbGU7CivmtLEgPiBhXC1sYWtlXC1pblwteXVubmFuOwor6J2IID4gc21hbGxcLWdyZWVuXC1mcm9nOwor5bi8ID4gd29tZW4nJ3NcLWhlYWRnZWFyOwor54uOID4gYmVcLWZhbWlsaWFyXC13aXRoOwor6IOqID4gYXJyYW5nZVwtaW5cLW9yZGVyOwor6LGiID4gZG9tZXN0aWNcLWFuaW1hbHM7CivnnIcgPiBibGluZFwtaW5cLW9uZVwtZXllOwor576/ID4gbGVnZW5kYXJ5XC1hcmNoZXI7CivoiqkgPiBzYWx0XC1tYXJzaFwtcGxhbnQ7CivojK0gPiBhblwtYXF1YXRpY1wtZ3Jhc3M7Civok5YgPiBjYXN0b3JcLW9pbFwtcGxhbnQ7CivlgqcgPiBlbnRlcnRhaW5cLWd1ZXN0czsKK+iWnCA+IGV2ZXJncmVlblwtc2hydWJzOwor6La6ID4gc2l0XC1jcm9zc1wtbGVnZ2VkOwor5qS5ID4gYVwtY2hvcHBpbmdcLWJvYXJkOwor6ZyIID4gdG9ycmVudGlhbFwtcmFpbnM7Civot48gPiBzaXRcLWNyb3NzXC1sZWdnZWQ7Civmm6kgPiBpblwtYW5jaWVudFwtdGltZXM7CivmoIwgPiBzdXBwb3J0aW5nXC1ibG9jazsKK+WTmiA+IGNoZW1pY2FsXC1lbGVtZW50Owor562MID4gYmFtYm9vXC1maXNoXC10cmFwOwor5rWNID4gaXJyaWdhdGlvblwtZGl0Y2g7CivnjIEgPiBhXC1raW5kXC1vZlwtbW9ua2V5Owor5ZW2ID4gXC1kXC1cK1wtaW5lXC1cKGNoZW1cLlwpOwor6ayvID4gc2FjcmlmaWNpYWxcLXdpbmU7CivpsrcgPiBwYWdyb3NvbXVzXC1tYWpvcjsKK+iBsSA+IGJlbnRcLWFuZFwtdHdpc3RlZDsKK+WKoiA+IHB1dFwtZm9ydGhcLWVmZm9ydDsKK+ifqiA+IGFcLWtpbmRcLW9mXC1jaWNhZGE7CivonpcgPiBhXC1raW5kXC1vZlwtY2ljYWRhOwor6LWGID4gZmFyZXdlbGxcLXByZXNlbnQ7Civln68gPiBjb3Zlclwtd2l0aFwtZWFydGg7CivpspQgPiBraW5kXC1vZlwtc3R1cmdlb247CivnvaggPiBtZWRpY2FsXC1jb21wcmVzczsKK+WrnCA+IGh1c2JhbmQnJ3NcLXBhcmVudDsKK+a8pCA+IG1hcmluYXRlXC1pblwtc2FsdDsKK+WahiA+IGdpdmVcLWZvcnRoXC1zb3VuZDsKK+iWuSA+IGN5cGVydXNcLXJvdHVuZHVzOwor6IyGID4gc3BlY2llc1wtb2ZcLWdyYXNzOwor6b2ZID4gcHJvamVjdGluZ1wtdGVldGg7CivpubYgPiBzYWx0eVwtYW5kXC1iaXR0ZXI7CivptrsgPiBhXC1raW5kXC1vZlwtcGlnZW9uOwor6a+bID4gcGFncm9zb211c1wtbWFqb3I7Civpr4YgPiB0aGVcLXNrYXRlXC1vclwtcmF5Owor6a6qID4ga2luZFwtb2ZcLXN0dXJnZW9uOwor6a2sID4gc29sZVwtb3JcLWZsb3VuZGVyOwor6aq0ID4gYVwtcHV0cmlkXC1jYXJjYXNlOwor6aaYID4gY3V0XC1vZmZcLWxlZnRcLWVhcjsKK+mjgCA+IHNvdWdoaW5nXC1vZlwtd2luZDsKK+mfnSA+IGxlYXRoZXJcLWFybVwtYmFuZDsKK+mfiiA+IGFcLWNhc2VcLWZvclwtYVwtYm93Owor6Z62ID4gYmlnXC1sZWF0aGVyXC1iZWx0Owor6ZuXID4gYVwtd2hpdGVcLXBoZWFzYW50Owor6ZqkID4gdG9cLWZhbGxcLWluXC1ydWluczsKK+mXoCA+IGdhdGVcLW9mXC1hXC1tYXJrZXQ7CivpirwgPiBjYXJwZW50ZXInJ3NcLWZpbGU7CivpirsgPiBhbnRpbW9ueVwtc3RpYml1bTsKK+mKpyA+IHBvaW50XC1vZlwtYVwtc3dvcmQ7CivpiYAgPiBwb3Rhc3NpdW1cLWthbGl1bTsKK+i6tyA+IG9mXC1zaG9ydFwtc3RhdHVyZTsKK+i5uiA+IHJhaXNlXC1vbmUnJ3NcLWZvb3Q7CivoubEgPiB0b1wtc3RhZ2dlclwtYWxvbmc7CivouZAgPiB0YWtlXC1zaG9ydFwtc3RlcHM7CivotJsgPiBqaWFuZ3hpXC1wcm92aW5jZTsKK+i0kCA+IGZhcmV3ZWxsXC1wcmVzZW50Owor6LOZID4gZ2l2ZVwtZm9yXC1jaGFyaXR5Owor6LGPID4gaGFsZlwtZ3Jvd25cLWJlYW5zOwor6KqVID4gdG9cLWJlYXJcLWNoaWxkcmVuOwor6KaCID4gdG9cLXRocm93XC1hXC1yaWRlcjsKK+ilsSA+IGxlZ3NcLW9mXC10cm91c2VyczsKK+ijmyA+IHRvXC13cmFwXC1hbmRcLWJpbmQ7CivoopcgPiB1bmxpbmVkXC1nYXJtZW50czsKK+ihjiA+IHRvXC1naXZlXC1wbGVhc3VyZTsKK+ifvyA+IGFjcmlkYVwtY2hpbmVuc2lzOwor6J+IID4gc21hbGxcLWdyZWVuXC1mcm9nOwor6J6LID4gc3BpZGVyXC1taWxsaXBlZGU7CivonbsgPiBpbW1hdHVyZVwtbG9jdXN0czsKK+iZpSA+IHN0cmlwZWRcLXdpbGRcLWNhdDsKK+iXpiA+IGVkaWJsZVwtbXVzaHJvb21zOwor6JeLID4gc2FtYnVjdVwtamF2aW5pY2E7CivolqsgPiBhXC1tZWRpY2luYWxcLWhlcmI7CivoloMgPiBjeXBlcnVzXC1hbXVyaWN1czsKK+iVrSA+IGNvbW1vblwtYXJ0ZW1pc2lhOwor6JWLID4gdW5vcGVuZWRcLWZsb3dlcnM7CivolIcgPiBsdXh1cmlhbnRcLWdyb3d0aDsKK+iRmSA+IGNlbG9zaWFcLWFyZ2VudGVhOwor6I+JID4gdGhlXC1ncmVlblwtYmFtYm9vOwor6IqYID4gbWFsdmFcLXN5bHZlc3RyaXM7CivoioMgPiBsdXh1cmlhbnRcLWdyb3d0aDsKK+iHmiA+IGFycmFuZ2VcLWluXC1vcmRlcjsKK+iAvCA+IGVhcnNcLXdpdGhvdXRcLXJpbTsKK+e2tSA+IHZhcmljb2xvcmVkXC1zaWxrOwor57S9ID4gYVwtc3RyYW5kXC1vZlwtc2lsazsKK+eztSA+IGZlcm1lbnRpbmdcLWdyYWluOwor57OxID4gZmVybWVudGluZ1wtZ3JhaW47Civns4ggPiBzYWNyaWZpY2lhbFwtcmljZTsKK+expyA+IGNydWRlXC1iYW1ib29cLW1hdDsKK+euryA+IGJhbWJvb1wtcGFsYW5xdWluOwor566KID4gYmFtYm9vXC13aXRoXC10aGluOwor56e3ID4gc291bmRcLW9mXC1yZWFwaW5nOwor56SOID4gZm91bmRhdGlvblwtc3RvbmU7Civno6UgPiBhXC1oZWFwXC1vZlwtc3RvbmVzOwor56CrID4gYW5jZXN0cmFsXC10YWJsZXQ7CivnnpggPiBkZWVwbHlcLXN1bmtcLWV5ZXM7CivnnosgPiBnbGFyZVwtd2l0aFwtYW5nZXI7CivnnZwgPiB0b1wtb3BlblwtdGhlXC1leWVzOwor55umID4gbGlkXC1vZlwtYVwtY2FsZHJvbjsKK+eZiSA+IHRvXC1oYXRlXC1iaXR0ZXJseTsKK+eYhSA+IHRvXC1oYXRlXC1iaXR0ZXJseTsKK+eTnyA+IHRoZVwtYm90dGxlXC1nb3VyZDsKK+eMuCA+IGFcLWtpbmRcLW9mXC1hbmltYWw7Civni7sgPiBhXC1mYWJ1bG91c1wtYmVhc3Q7Civng5wgPiBsaWdodFwtb2ZcLXRoZVwtc3VuOwor54GgID4gbWFyaW5hdGVcLWluXC1zYWx0Owor5r6uID4gaXJyaWdhdGlvblwtZGl0Y2g7CivmvqYgPiBwbGFjZVwtaW5cLXNpY2h1YW47CivmvqUgPiBhXC1ibG9ja2VkXC1zdHJlYW07CivmvpQgPiByYWRpYW5jZVwtb2ZcLWdlbXM7CivmuKsgPiBiZWF0aW5nXC1vZlwtb2NlYW47CivmtaQgPiBiZWF0aW5nXC1vZlwtb2NlYW47Civmr64gPiB0b1wtcHVsbFwtb3V0XC1oYWlyOwor5q+qID4gc2VyZ2VcLWZyb21cLXRpYmV0Owor5quoID4gc3VwcG9ydGluZ1wtYmxvY2s7CivmqJsgPiBiZW5kaW5nXC1icmFuY2hlczsKK+aesiA+IG1hbGVcLW5ldHRsZVwtaGVtcDsKK+aekiA+IHRoZVwtY29jb251dFwtdHJlZTsKK+aZhSA+IGxpZ2h0XC1vZlwtdGhlXC1zdW47CivmlrUgPiB0b1wtY3V0XC10b1wtcGllY2VzOwor5paeID4gYVwtc3RhY2tcLW9mXC1ncmFpbjsKK+aSmiA+IHR3aXJsXC1pblwtZmluZ2VyczsKK+aMtyA+IHRvXC1wcm9wZWxcLWFcLWJvYXQ7Civmh6MgPiBiZVwtc2lja1wtYXRcLWhlYXJ0Owor5byzID4gY2lyY3VsYXJcLW1lYXN1cmU7CivlvKogPiBjaXJjdWxhclwtbWVhc3VyZTsKK+W7tSA+IHRvXC1nb1wtb25cLWNpcmN1aXQ7CivluZcgPiB3b21lbicnc1wtaGVhZGdlYXI7CivlrI4gPiB0b1wtYmVhclwtbXVsdGlwbGU7CivlqqQgPiBodXNiYW5kJydzXC1mYW1pbHk7Civlpp0gPiB0b1wtYWRvcm5cLW9uZXNlbGY7CivloqQgPiB0b1wtZmFsbFwtaW5cLXJ1aW5zOwor5ZuNID4gZG91YmxlXC1oYXBwaW5lc3M7CivlmrMgPiBteXRoaWNhbFwtZW1wZXJvcjsKK+WYhSA+IHNvdW5kXC1vZlwtc2lnaGluZzsKK+WXniA+IHRvXC1jb25zdWx0XC1hYm91dDsKK+WXgSA+IGdpdmVcLWZvcnRoXC1zb3VuZDsKK+WWuiA+IHRvXC1iZVwtbG9jYXRlZFwtYXQ7Civli7MgPiBtZXJpdG9yaW91c1wtZGVlZDsKK+WLsiA+IG1lcml0b3Jpb3VzXC1kZWVkOwor5YuxID4gcHV0XC1mb3J0aFwtZWZmb3J0Owor5YubID4gbWVyaXRvcmlvdXNcLWRlZWQ7CivliLQgPiBjaG9wXC1ieVwtcG91bmRpbmc7CivlhpMgPiBhXC1zZWNsdWRlZFwtcGxhY2U7CivlhJAgPiBlbnRlcnRhaW5cLWd1ZXN0czsKK+WEiiA+IHJvdWdoXC1hbmRcLXJ1Z2dlZDsKK+WCnCA+IGFcLW1pbm9yaXR5XC10cmliZTsKK+S2sSA+IGFcLWtpbmRcLW9mXC10dXJ0bGU7CivktaQgPiB0b1wtY3JhY2tcLW9yXC1jaGFwOwor5LWjID4gd2hpdGVcLXdpdGhcLWJsYWNrOwor5LWhID4gdG9cLWNyYWNrXC1vclwtY2hhcDsKK+S1gyA+IGFcLWtpbmRcLW9mXC1iYXJsZXk7CivktKwgPiBjcnVtYnNcLW9mXC1iYXJsZXk7CivktKQgPiBhXC1raW5kXC1vZlwtYW5pbWFsOwor5LSjID4gYVwta2luZFwtb2ZcLWFuaW1hbDsKK+S0hSA+IGFcLWxlZ2VuZGFyeVwtYmlyZDsKK+SzoiA+IHNtYWxsXC13aWxkXC1nb29zZTsKK+SznyA+IGFcLWxlZ2VuZGFyeVwtYmlyZDsKK+SzkCA+IGFuXC1vd2xcLWxpa2VcLWJpcmQ7CivksrIgPiBhXC1oYXdrXC1saWtlXC1iaXJkOwor5LKmID4gYVwtbGVnZW5kYXJ5XC1iaXJkOwor5LCDID4gZGlzaGV2ZWxsZWRcLWhhaXI7Civkr7MgPiBsb29zZWx5XC1hcnJhbmdlZDsKK+SvriA+IGRpc2hldmVsbGVkXC1oYWlyOwor5K+HID4gdG9cLWV4ZXJ0XC1vbmVzZWxmOwor5K60ID4gdW5zdGFibGVcLXdhbGtpbmc7CivkrrMgPiB0b1wtZ2l2ZVwtYmlydGhcLXRvOwor5K6pID4gYVwta2luZFwtb2ZcLWFuaW1hbDsKK+SuoCA+IGFcLWtpbmRcLW9mXC1hbmltYWw7CivkroEgPiBhXC1wYWlyXC1vZlwtaG9yc2VzOwor5K6AID4gYVwta2luZFwtb2ZcLWFuaW1hbDsKK+SrjCA+IGJvd2VkXC1vbmUnJ3NcLWhlYWQ7Civkqo4gPiBzdHJpbmdzXC1vZlwtYVwtY2FwOwor5KmlID4gYVwtYmVsdFwtZm9yXC1ob3JzZTsKK+SouyA+IHJvYXJcLW9mXC10aHVuZGVyczsKK+SotCA+IGdhdGhlcmluZ1wtY2xvdWRzOwor5KizID4gdGhlXC1yYWluXC1zdG9wcGVkOwor5KiPID4gc291bmRcLW9mXC1yYWluaW5nOwor5KiKID4gYVwtZmxvY2tcLW9mXC1iaXJkczsKK+SnuCA+IGFcLWtpbmRcLW9mXC1waWdlb247Civkp6EgPiBhXC1mb3J0aWZpZWRcLXdhbGw7Civkp4QgPiBuYW1lXC1vZlwtYVwtcGVyc29uOwor5KaVID4gYmFuZ1wtb2ZcLXRoZVwtZG9vcjsKK+SmgiA+IGNoZW1pY2FsXC1lbGVtZW50Owor5KWbID4gYVwta2luZFwtb2ZcLXNpY2tsZTsKK+SlhyA+IGNoZW1pY2FsXC1lbGVtZW50Owor5KSyID4gY2hlbWljYWxcLWVsZW1lbnQ7CivkpKAgPiBjaGVtaWNhbFwtZWxlbWVudDsKK+SjriA+IHNtZWxsXC1vZlwtYWxjb2hvbDsKK+SjqyA+IHNvdXJlZFwtYmVhblwtY3VyZDsKK+SiniA+IHJvd3NcLWFuZFwtY29sdW1uczsKK+ShriA+IHRyYWNlXC1vZlwtYVwtd2hlZWw7CivkoaIgPiBhXC1zbWFsbFwtY2FycmlhZ2U7CivkoL8gPiBuYW1lXC1vZlwtYVwtcGVyc29uOwor5KC7ID4gdG9cLWJlbmRcLXRoZVwtYm9keTsKK+SfiyA+IHRvXC1wcmVzc1wtZm9yd2FyZDsKK+SeliA+IG5hbWVcLW9mXC1hXC1wZXJzb247CivknowgPiB0b1wtbG9zZVwtaW5cLXRyYWRlOwor5J2jID4gYVwta2luZFwtb2ZcLWFuaW1hbDsKK+SdmiA+IGFcLWtpbmRcLW9mXC1hbmltYWw7CivknYsgPiBhXC1saXR0bGVcLW9mXC1waWdzOwor5J2HID4gZ3J1bnRpbmdcLW9mXC1waWdzOwor5JuPID4gdG9cLWNhbGxcLXNvbWVib2R5Owor5JuOID4gdG9cLXNob3V0XC1pblwtcmFnZTsKK+SbgiA+IHRvXC1zZXBhcmF0ZVwtZnJvbTsKK+SavyA+IHRvXC1zaG91dFwtaW5cLXJhZ2U7CivkmpQgPiB0b1wtbG9va1wtc3VkZGVubHk7CivkmpIgPiBleWVzaWdodFwtYmx1cnJlZDsKK+SajiA+IGV5ZXNpZ2h0XC1ibHVycmVkOwor5JqLID4gZXllc2lnaHRcLWJsdXJyZWQ7CivkmoMgPiB0b1wtcmVhbGl6ZVwtZnVsbHk7Civkma0gPiB0b1wtbGlmdFwtb3JcLXJhaXNlOwor5JiLID4gYVwta2luZFwtb2ZcLWluc2VjdDsKK+SYgiA+IGFcLWtpbmRcLW9mXC1pbnNlY3Q7Civkl78gPiBhXC1raW5kXC1vZlwtaW5zZWN0Owor5Je8ID4gYVwta2luZFwtb2ZcLWluc2VjdDsKK+SXuCA+IGFcLWtpbmRcLW9mXC1pbnNlY3Q7Civkl7EgPiBhXC1raW5kXC1vZlwtaW5zZWN0Owor5JevID4gYVwta2luZFwtb2ZcLWluc2VjdDsKK+SXriA+IGFcLWtpbmRcLW9mXC1pbnNlY3Q7Civkl6EgPiBhXC1raW5kXC1vZlwtaW5zZWN0Owor5JefID4gYVwta2luZFwtb2ZcLWluc2VjdDsKK+SXmyA+IGFcLWtpbmRcLW9mXC1pbnNlY3Q7Civkl48gPiBuYW1lXC1vZlwtYVwtaW5zZWN0Owor5JeOID4gYVwta2luZFwtb2ZcLWluc2VjdDsKK+SXhiA+IGFcLWtpbmRcLW9mXC1pbnNlY3Q7Civkl4QgPiBhXC1raW5kXC1vZlwtaW5zZWN0Owor5JeBID4gYVwta2luZFwtb2ZcLWNpY2FkYTsKK+SWtyA+IGFcLWtpbmRcLW9mXC1pbnNlY3Q7CivklrQgPiBhXC1raW5kXC1vZlwtaW5zZWN0Owor5JayID4gYVwta2luZFwtb2ZcLWluc2VjdDsKK+SWryA+IHBvaXNvbm91c1wtaW5zZWN0Owor5JaQID4gc291bmRcLW9mXC1hXC10aWdlcjsKK+SUtyA+IGN5cGVydXNcLXJvdHVuZHVzOwor5JKjID4gbHVzaFwtb3JcLWRlbGljYXRlOwor5JG4ID4gYVwtZ3JvdXBcLW9mXC1ib2F0czsKK+SRhSA+IGRpenp5XC1hbmRcLXNsZWVweTsKK+SQqCA+IGJhY2tcLW9mXC10aGVcLWZvb3Q7Civkj5IgPiBoYWxmXC1vZlwtdGhlXC1ib2R5Owor5I+PID4gc2lnbnNcLWFuZFwtZ3JvYW5zOwor5I68ID4gYVwta2luZFwtb2ZcLWluc2VjdDsKK+SOryA+IHdpbnRlclwtcGxvdWdoaW5nOwor5I6CID4gY29sb3JmdWxcLWZlYXRoZXI7CivkjL0gPiB2YXJpY29sb3JlZFwtc2lsazsKK+SMgiA+IGluXC1hbmNpZW50XC10aW1lczsKK+SLpCA+IHBsYWluXC13aGl0ZVwtc2lsazsKK+SLlCA+IHRvXC1iYW5kXC10b2dldGhlcjsKK+SKiyA+IHRvXC1hZG9yblwtb25lc2VsZjsKK+SJtyA+IGFcLWZlYXRoZXJcLXNjcmVlbjsKK+SJiSA+IGFcLXdyaXRpbmdcLXRhYmxldDsKK+SImSA+IGJhbWJvb1wtdG9cLXdpdGhlcjsKK+SIiCA+IGFcLWtpbmRcLW9mXC1iYW1ib287CivkiIMgPiBhXC1raW5kXC1vZlwtYmFtYm9vOwor5IiCID4gYVwta2luZFwtb2ZcLWJhbWJvbzsKK+SHuyA+IGFcLWtpbmRcLW9mXC1iYW1ib287Civkh7kgPiBhXC1raW5kXC1vZlwtYmFtYm9vOwor5Ie3ID4gaW5cLWFuY2llbnRcLXRpbWVzOwor5IemID4gYVwta2luZFwtb2ZcLWJhbWJvbzsKK+SGvyA+IHRvXC10YWxrXC1pblwtc2xlZXA7CivkhrIgPiBhXC1zcGFjaW91c1wtaG91c2U7CivkhoggPiB5b3VuZ1wtYW5kXC10ZW5kZXI7CivkhbwgPiBhXC1raW5kXC1vZlwtZ3JhaW5zOwor5IW6ID4gZ3JhaW5cLWluXC10aGVcLWVhcjsKK+SFiiA+IGFcLXNwYWNpb3VzXC1ob3VzZTsKK+SEuiA+IHlvdW5nXC1hbmRcLXRlbmRlcjsKK+SCqiA+IGhhcmRcLWJhcnJlblwtbGFuZDsKK+SAgyA+IGFcLWtpbmRcLW9mXC12ZXNzZWw7CivjvqYgPiBzY2FiXC1vdmVyXC1hXC1zb3JlOwor476BID4gd2Fsa2luZ1wtbGlrZVwtbWFkOwor472uID4gYVwtcG9pbnRcLW9mXC1saWdodDsKK+O9iiA+IGNyYWNraW5nXC1vZlwtdGlsZTsKK+O7kiA+IHJlZFwtY29sb3JlZFwtamFkZTsKK+O7gSA+IGFcLWtpbmRcLW9mXC1qYXNwZXI7CivjurUgPiBibGFja1wtamFkZVwtc3RvbmU7CivjurQgPiBuYW1lXC1vZlwtYVwtc3Bpcml0Owor47qmID4gYVwtcnVubmluZ1wtYW5pbWFsOwor47qjID4gYVwta2luZFwtb2ZcLWFuaW1hbDsKK+O6oiA+IGFcLWtpbmRcLW9mXC1hbmltYWw7Civjup0gPiBzb3VuZFwtb2ZcLWFcLXRpZ2VyOwor47qYID4gYVwta2luZFwtb2ZcLWFuaW1hbDsKK+O5vCA+IGFcLWtpbmRcLW9mXC1hbmltYWw7CivjubogPiBkb2dcLXRvXC10YWtlXC1mb29kOwor47m0ID4gYVwta2luZFwtb2ZcLWFuaW1hbDsKK+O5rSA+IGFcLWtpbmRcLW9mXC1tb25rZXk7CivjuawgPiBhXC1raW5kXC1vZlwtYW5pbWFsOwor47moID4gYVwta2luZFwtb2ZcLWFuaW1hbDsKK+O5nyA+IGFcLWtpbmRcLW9mXC1hbmltYWw7CivjuZMgPiBhXC1raW5kXC1vZlwtYW5pbWFsOwor47mHID4gYVwta2luZFwtb2ZcLWNhdHRsZTsKK+O5hCA+IGFcLWtpbmRcLW9mXC1jYXR0bGU7CivjuLsgPiBhXC1raW5kXC1vZlwtY2F0dGxlOwor47izID4gYVwta2luZFwtb2ZcLWNhdHRsZTsKK+O4oyA+IGluXC1hbmNpZW50XC1jaGluYTsKK+O2viA+IHRvdWdoXC1hbmRcLWhvbmVzdDsKK+O2jSA+IG5hbWVcLW9mXC1hXC1zdHJlYW07CivjtowgPiBuYW1lXC1vZlwtYVwtc3RyZWFtOwor47WwID4gbmFtZVwtb2ZcLWFcLXN0cmVhbTsKK+O1hiA+IHJhZGlhbmNlXC1vZlwtZ2VtczsKK+O1gyA+IG5hbWVcLW9mXC1hXC1zdHJlYW07CivjtKcgPiBvZlwtZmxvd2luZ1wtd2F0ZXI7Civjs70gPiBhXC13YXRlcnlcLWV4cGFuc2U7CivjsbYgPiBhXC1zd2VsbGVuXC1jb3Jwc2U7Civjsa0gPiBhblwtaW5mZXJ0aWxlXC1lZ2c7CivjsYggPiBuYW1lXC1vZlwtYVwtcGVyc29uOwor47CkID4gdG9cLWxhdWdoXC1oZXJ0aWx5Owor47CbID4gbmFtZVwtb2ZcLWFcLWNvdW50eTsKK+OwhSA+IGVhdmVzXC1vZlwtYVwtaG91c2U7Civjr5UgPiBzdGlja3NcLW9yXC1mcmFtZXM7Civjr4MgPiB0aGVcLXZhcm5pc2hcLXRyZWU7CivjrpMgPiBhblwtZXh0cmVtZVwtbGltaXQ7CivjrbogPiB0aGVcLWNoZXJyeVwtYXBwbGU7Civjqq0gPiB0b1wtZHJhd1wtdG9nZXRoZXI7CivjqpggPiB0b1wtZHJhd1wtdG9nZXRoZXI7CivjqpYgPiBzb3VuZFwtb2ZcLWJlYXRpbmc7CivjqLwgPiB0b1wtdGFrZVwtYnlcLWZvcmNlOwor46e6ID4gYVwtZmluZ2VyXC13cmFwcGVyOwor76epID4gdW5pdFwtb2ZcLWRpc3RhbmNlOwor76atID4gdGlua2xpbmdcLW9mXC1qYWRlOwor46acID4gdG9cLW1vdmVcLXRoZVwtbWluZDsKK++mkSA+IHR3aXJsXC1pblwtZmluZ2VyczsKK+OllCA+IHRvXC1tb3ZlXC10aGVcLW1pbmQ7CivvpL4gPiB0aGVcLWdyZWVuXC1iYW1ib287CivjpLQgPiB0b1wtbW92ZVwtdGhlXC1taW5kOwor46SiID4gdG9cLW1vdmVcLXRoZVwtbWluZDsKK++klyA+IGtpbmRcLW9mXC1uZWNrbGFjZTsKK+OjiCA+IGFcLWtpbmRcLW9mXC1hbmltYWw7CivjorAgPiB0b1wtc3RyZXRjaFwtYVwtYm93Owor46G9ID4gZGVwcmF2ZWRcLXRhbGtpbmc7CivjoYkgPiBhXC1raW5kXC1vZlwtZmFicmljOwor46CnID4gYVwtbGl0dGxlXC1zbGFudGVkOwor46COID4gYVwtbG9mdHlcLW1vdW50YWluOwor452rID4gc2hhcGVcLW9mXC10aGVcLXNreTsKK+OdqiA+IGFcLXNsYW50aW5nXC1ob3VzZTsKK+OdqSA+IHNwYWNpb3VzbHlcLXJvb21zOwor452XID4gc3BhY2lvdXNseVwtcm9vbXM7CivjnLQgPiBkYXJrXC1hbmRcLW9ic2N1cmU7CivjnJ0gPiB0b1wtY2hlcmlzaFwtYW5nZXI7CivjnIggPiBhXC1iZWF1Z2lmdWxcLWZhY2U7Civjmp8gPiBhXC1raW5kXC1vZlwtYW5pbWFsOwor45qcID4gd2l0aFwtZ3JlYXRcLXBvd2VyOwor45qXID4gd2l0aFwtYVwtYmlnXC1tb3V0aDsKK+OahyA+IGRyYXdcLXRoZVwtZmVldFwtdXA7CivjmZ4gPiBhXC1zbWFsbFwtbW91bnRhaW47CivjmY4gPiBicmVhY2hcLW9mXC1hXC10YW5rOwor45mFID4gYVwtd2FsbGVkXC12aWxpYWdlOwor45mAID4gYVwtdmVnZXRhYmxlXC1wbG90Owor45e7ID4gYmFieScnc1wtYW5zd2VyaW5nOwor45eZID4gdG9cLXNob3V0XC1vclwtYmF3bDsKK+OVrSA+IHRvXC1iYXJrXC1hc1wtYVwtZG9nOwor45WpID4gc291bmRcLW9mXC10YXBwaW5nOwor45WHID4gcm9ja3NcLWNvbGxhcHNpbmc7CivjlLUgPiBhXC1raW5kXC1vZlwtdmVzc2VsOwor45SxID4gYVwtc3RhY2tcLW9mXC1ncmFpbjsKK+OUqCA+IG5hbWVcLW9mXC1hXC1wZXJzb247CivjlJogPiB0b1wtZXhlcnRcLW9uZXNlbGY7CivjlJEgPiBhblwtaW5jaXNlZFwtd291bmQ7Civjk7wgPiBhblwtaW5jaXNlZFwtd291bmQ7Civjk7ggPiB0b1wtY3V0XC10b1wtcGllY2VzOwor45KtID4gYW5cLWVsZGVyXC1icm90aGVyOwor45KhID4gbmFtZVwtb2ZcLWFcLXBlcnNvbjsKK+OSgSA+IG9mXC1ncmVhdFwtc3RhdHVyZTsKK+ORsSA+IGFcLWtpbmRcLW9mXC1tb25rZXk7CivjkLsgPiBuYW1lXC1vZlwtYVwtcGVyc29uOwor45CAID4gaGlsbG9ja1wtb3JcLW1vdW5kOwor552oID4gbG9va1wtYXNrYW5jZVwtYXQ7CivmgI4gPiB3aGF0XD9cLXdoeVw/XC1ob3dcPzsKK+aUtiA+IGdhdGhlclwtdG9nZXRoZXI7CivlhZogPiBwb2xpdGljYWxcLXBhcnR5Owor54mIID4gcHJpbnRpbmdcLWJsb2NrczsKK+WtoyA+IHF1YXJ0ZXJcLW9mXC15ZWFyOwor54mhID4gbWFsZVwtb2ZcLWFuaW1hbHM7CivoqLogPiBleGFtaW5lXC1wYXRpZW50Owor5aeRID4gZmF0aGVyJydzXC1zaXN0ZXI7CivopJMgPiBzd2FkZGxpbmdcLWNsb3RoOwor6aaGID4gcHVibGljXC1idWlsZGluZzsKK+a8vyA+IGFueVwtdGhpY2tcLWZsdWlkOwor6ZuEID4gbWFsZVwtb2ZcLXNwZWNpZXM7Civkur8gPiBodW5kcmVkXC1taWxsaW9uOwor5Zu6ID4gdG9cLWJlY29tZVwtc29saWQ7Civpu6ggPiBwb2xpdGljYWxcLXBhcnR5Owor5rqqID4gbW91bnRhaW5cLXN0cmVhbTsKK+iZniA+IGNvbmNlcm5lZFwtYWJvdXQ7Civll5ogPiBzb3VuZFwtb2ZcLWNyeWluZzsKK+iWhyA+IG9zbXVuZGFcLXJlZ2FsaXM7CivmiI8gPiB0aGVhdHJpY2FsXC1wbGF5Owor5Y+sID4gaW1wZXJpYWxcLWRlY3JlZTsKK+WPjiA+IGdhdGhlclwtdG9nZXRoZXI7CivnkZ4gPiBmZWxpY2l0b3VzXC1vbWVuOwor6ayiID4gaGFpclwtb25cLXRlbXBsZXM7Civlg6cgPiBidWRkaGlzdFwtcHJpZXN0Owor5qqcID4gY2hpbmVzZVwtY3lwcmVzczsKK+aqjiA+IHNtYWxsXC1yZWRcLWFwcGxlOwor6amFID4gc3B1clwtYVwtaG9yc2VcLW9uOwor6IefID4gaW50ZXJuYWxcLW9yZ2FuczsKK+mniCA+IHNwdXJcLWFcLWhvcnNlXC1vbjsKK+mnhiA+IHNwdXJcLWFcLWhvcnNlXC1vbjsKK+mkqCA+IHB1YmxpY1wtYnVpbGRpbmc7CivlhIQgPiBodW5kcmVkXC1taWxsaW9uOwor5qGnID4gY2hpbmVzZVwtY3lwcmVzczsKK+iEjyA+IGludGVybmFsXC1vcmdhbnM7CivpqbEgPiBzcHVyXC1hXC1ob3JzZVwtb247CivlnLMgPiBmdXJyb3dcLWluXC1maWVsZDsKK+e5uyA+IGZpbmVcLXNpbGtcLWd1YXplOwor5a2fID4gZmlyc3RcLWluXC1zZXJpZXM7CivnuIsgPiBjbGltYlwtZG93blwtcm9wZTsKK+mWpCA+IHNtYWxsXC1zaWRlXC1kb29yOwor5paOID4gdmVnZXRhcmlhblwtZGlldDsKK+ebryA+IHJpdmV0XC1nYXplXC11cG9uOwor57KfID4gdW5odXNrZWRcLW1pbGxldDsKK+exkCA+IGNsaW1iaW5nXC1wbGFudHM7CivmjrsgPiBzY3JhdGNoXC1saWdodGx5Owor5L+YID4gcHJpc29uZXJcLW9mXC13YXI7CivmjL4gPiBjbGFzcFwtdW5kZXJcLWFybTsKK+iviiA+IGV4YW1pbmVcLXBhdGllbnQ7CivlqrMgPiBkYXVnaHRlclwtaW5cLWxhdzsKK+WumSA+IHRpbWVcLWFzXC1jb25jZXB0Owor5ZGcID4gc291bmRcLW9mXC1jcnlpbmc7CivljZwgPiBmb3J0dW5lXC10ZWxsaW5nOwor5oiyID4gdGhlYXRyaWNhbFwtcGxheTsKK+aIryA+IHRoZWF0cmljYWxcLXBsYXk7CivluJYgPiBpbnZpdGF0aW9uXC1jYXJkOwor6YCeID4gaW5kdWxnZVwtb25lc2VsZjsKK+aPqiA+IGdyYXNwXC13aXRoXC1oYW5kOwor5LuRID4gbG9naWNhbFwtcmVhc29uczsKK+a1hiA+IGFueVwtdGhpY2tcLWZsdWlkOwor5oyfID4gY2xhc3BcLXVuZGVyXC1hcm07CivnhZ4gPiBtYWxpZ25hbnRcLWRlaXR5Owor5paLID4gdmVnZXRhcmlhblwtZGlldDsKK+mzjCA+IGh1Z2VcLXNlYVwtdHVydGxlOwor5Y2mID4gZm9ydHVuZVwtdGVsbGluZzsKK+eeqSA+IHdhdGNoXC1jYXJlZnVsbHk7CivnlpogPiBjaHJvbmljXC1kaXNlYXNlOwor6JSTID4gY3JlZXBpbmdcLXBsYW50czsKK+mqjyA+IGV4Y2VsbGVudFwtaG9yc2U7Civpl70gPiBmdWppYW5cLXByb3ZpbmNlOwor6KKFID4gY3VybGluZ1wtdXB3YXJkczsKK+i+kCA+IHNwb2tlc1wtb2ZcLXdoZWVsOwor55CJID4gc3BhcmtsaW5nXC1zdG9uZTsKK+iInCA+IGxlZ2VuZGFyeVwtcnVsZXI7CivovacgPiBjcnVzaFwtYnlcLXdlaWdodDsKK+a7hyA+IHl1bm5hblwtcHJvdmluY2U7CivprJMgPiBoYWlyXC1vblwtdGVtcGxlczsKK+ahkyA+IHZhcmlldHlcLW9mXC10cmVlOwor5qOgID4gY3JhYlwtYXBwbGVcLXRyZWU7CivlkK4gPiBzdWNrXC13aXRoXC1tb3V0aDsKK+ictyA+IGNyZWVwXC1saWtlXC13b3JtOwor5p63ID4gY2FuZ3VlXC1zY2FmZm9sZDsKK+e+siA+IGFuY2llbnRcLWVtcGVyb3I7CivlrZogPiBicm9vZFwtb3ZlclwtZWdnczsKK+mqgSA+IGV4Y2VsbGVudFwtaG9yc2U7CivnmpEgPiBicmlsbGlhbnRcLXdoaXRlOwor57ylID4gbGlnaHRcLWJsdWVcLXNpbGs7Civor4wgPiBwbGF5XC13aXRoXC13b3JkczsKK+azviA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+aBoyA+IGluZHVsZ2VcLW9uZXNlbGY7Civop44gPiBkZXNpcmVcLXN0cm9uZ2x5Owor5466ID4gaW1wZXJpYWxcLXNpZ25ldDsKK+WNniA+IHRvXC1iZVwtaW1wYXRpZW50Owor6L6UID4gYnJpZGxlXC1vZlwtaG9yc2U7CivotpQgPiBub3RcLXByb2dyZXNzaW5nOwor5b6cID4gd2Fsa2luZ1wtYW5kXC1mcm87CivojaAgPiB3YXRlclwtY2hlc3RudXRzOwor5rGeID4gZWxlbWVudFwtbWVyY3VyeTsKK+eVvyA+IGltcGVyaWFsXC1kb21haW47CivoiIIgPiBncmluZFwtaW5cLW1vcnRhcjsKK+extCA+IHB1cmNoYXNlXC1ncmFpbnM7CivnqbAgPiBzdGFsa3NcLW9mXC1ncmFpbjsKK+e8kiA+IGNsaW1iXC1kb3duXC1yb3BlOwor5ZeEID4gaG9hcnNlXC1vZlwtdm9pY2U7CivnnaUgPiBsb29rXC1hc2thbmNlXC1hdDsKK+a4miA+IHNtYWxsXC1zYW5kXC1iYW5rOwor56CdID4gYmFsYW5jZVwtd2VpZ2h0czsKK+advCA+IHNodXR0bGVcLW9mXC1sb29tOwor6b6DID4gaXJyZWd1bGFyXC10ZWV0aDsKK+WLkCA+IGltcGVyaWFsXC1kZWdyZWU7Civnn7ggPiBhXC1yb2NrXC1vclwtY2xpZmY7Civnl7wgPiBjaHJvbmljXC1kaXNlYXNlOwor6JWoID4gcHRlcmlzXC1hcXVpbGluYTsKK+ixiSA+IGZlcm1lbnRlZFwtYmVhbnM7Civlvq0gPiBjb25zY3JpcHRcLWxhYm9yOwor6bqIID4gc3BlY2llc1wtb2ZcLWRlZXI7CivolaQgPiBkcm9vcGluZ1wtbGVhdmVzOwor6bqCID4gc3BlY2llc1wtb2ZcLWRlZXI7Civnu6EgPiByYXdcLXNpbGtcLWZhYnJpYzsKK+iKqCA+IG5hbWVcLW9mXC1hXC1wbGFudDsKK+iLoyA+IGtpbmRcLW9mXC1sZXR0dWNlOwor56KbID4gc2FuZFwtYW5kXC1ncmF2ZWw7CivojpIgPiBoZW1wXC1saWtlXC1wbGFudDsKK+a/iSA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+iQgSA+IGtpbmRcLW9mXC1ncmFzc2VzOwor55yEID4gdG9cLWxvb2tcLWFza2FuY2U7Civlm58gPiB0b3BcLW9mXC10aGVcLWhlYWQ7CivlsqMgPiBhXC1oaWxsXC1pblwtaHVuYW47Civll74gPiB0b1wtc2V0XC1hXC1kb2dcLW9uOwor6I2cID4gc3BlY2llc1wtb2ZcLWJlYW47Civns4EgPiBhXC1ncmFpblwtb2ZcLXJpY2U7Civnsp0gPiB1bnBvbGlzaGVkXC1yaWNlOwor6KOwID4gdG9cLW1lbmRcLWNsb3RoZXM7Civmn7AgPiBjcmFiXC1hcHBsZVwtdHJlZTsKK+iWqCA+IGRlYXRoXC1vZlwtcHJpbmNlOwor6IyRID4gdGhlXC1jb252b3Z1bHZ1czsKK+e/riA+IHN0ZW1cLW9mXC1mZWF0aGVyOwor6ImfID4gYW5jaWVudFwtd2Fyc2hpcDsKK+m8ryA+IGZseWluZ1wtc3F1aXJyZWw7CivnoKkgPiBuYW1lXC1vZlwtYVwtc3RvbmU7CivngrsgPiBhXC1raW5kXC1vZlwtY2hpbmE7CivmqqsgPiBzYXNzYWZyYXNcLXR6dW11Owor54u0ID4gYVwta2luZFwtb2ZcLXRhcGlyOwor6b6RID4gaGlnaFwtYW5kXC1icmlnaHQ7CivpvZ8gPiBpcnJlZ3VsYXJcLXRlZXRoOwor6b2LID4gdmVnZXRhcmlhblwtZGlldDsKK+m8lSA+IHJhdHRsZVwtb2ZcLWRydW1zOwor6byHID4gaHVnZVwtc2VhXC10dXJ0bGU7CivpuJMgPiBmbHlpbmdcLXNxdWlycmVsOwor6bSSID4gc3BlY2llc1wtb2ZcLWxhcms7CivptIIgPiB0aGVcLXRhaWxvclwtYmlyZDsKK+mzuyA+IHRoZVwtd2lsZFwtcGlnZW9uOwor6bOTID4gY2hpbmVzZVwtaGVycmluZzsKK+mxoSA+IHRoZVwtY3V0dGxlXC1maXNoOwor6bGFID4gYVwta2luZFwtb2ZcLXRlbmNoOwor6bCzID4gY2hpbmVzZVwtaGVycmluZzsKK+mwsiA+IGh1Z2VcLXNlYVwtdHVydGxlOwor6a2wID4gdGhlXC1mbHlpbmdcLWZpc2g7Civpq74gPiB0YWlsXC1vZlwtYVwtY29tZXQ7Civpq7QgPiBkaXNoZXZlbGVkXC1oYWlyOwor6am1ID4gZXhjZWxsZW50XC1ob3JzZTsKK+mpjSA+IGV4Y2VsbGVudFwtaG9yc2U7CivpqJggPiBhXC1waWViYWxkXC1ob3JzZTsKK+mnvyA+IGV4Y2VsbGVudFwtaG9yc2U7Civpp5QgPiBleGNlbGxlbnRcLWhvcnNlOwor6aWHID4gdG9cLWVhdFwtdG9vXC1tdWNoOwor6aK7ID4gZmxvYXRpbmdcLWluXC1haXI7Civpoq4gPiBzdG9ybVwtd2hpcmx3aW5kOwor6aGWID4gdG9wXC1vZlwtdGhlXC1oZWFkOwor6Z+eID4gYW5cLW9yYW5nZVwtY29sb3I7CivpnrQgPiBzYWRkbGVcLXVwXC1ob3JzZTsKK+mduCA+IGFcLWNoaWxkJydzXC1zaG9lczsKK+mbsSA+IHNub3dpbmdcLWhlYXZpbHk7CivplqkgPiBmdWppYW5cLXByb3ZpbmNlOwor6Y6kID4gc291bmRcLW9mXC1hXC1iZWxsOwor6Yq+ID4gZWxlbWVudFwtbWVyY3VyeTsKK+mGviA+IHVuZmlsdGVyZWRcLXdpbmU7CivphLkgPiBuYW1lXC1vZlwtYVwtc3RhdGU7CivovaEgPiBicmlkbGVcLW9mXC1ob3JzZTsKK+i8uyA+IHNwb2tlc1wtb2ZcLXdoZWVsOwor6LuLID4gY3J1c2hcLWJ5XC13ZWlnaHQ7CivouoAgPiB0b1wtc3R1bWJsZVwtb3ZlcjsKK+i2riA+IGVhc2lseVwtcHJvdm9rZWQ7CivorIUgPiBwbGF5XC13aXRoXC13b3JkczsKK+iroSA+IHBvc3RodW1vdXNcLW5hbWU7CivoqJIgPiBoZXNpdGF0ZVwtdG9cLXNheTsKK+impiA+IGRlc2lyZVwtc3Ryb25nbHk7CivopbwgPiAnJ2tpbW9ubycnXC1zbGVldmU7CivopYwgPiB1bmxpbmVkXC1nYXJtZW50Owor6KSnID4gdW5saW5lZFwtY2xvdGhlczsKK+iknSA+IHVubGluZWRcLWdhcm1lbnQ7Civoo4ogPiBjdXJsaW5nXC11cHdhcmRzOwor6J6aID4gZXJpc3RhbGlzXC10ZW5heDsKK+iXtiA+IGFcLWtpbmRcLW9mXC1wbGFudDsKK+iWuiA+IHdhdGVyXC1jaGVzdG51dHM7CivolaIgPiBlZGlibGVcLWFtYXJhbnRoOwor6JWNID4gYWxpc21hXC1wbGFudGFnczsKK+iUviA+IGtpbmRcLW9mXC1icmFtYmxlOwor6JSmID4gdGhlXC1jb252b3Z1bHZ1czsKK+iTvSA+IHNwZWNpZXNcLW9mXC1iZWFuOwor6JKoID4gbHVzaFwtdmVnZXRhdGlvbjsKK+iSkyA+IGFuXC1lZGlibGVcLXdhdGVyOwor6JKJID4gZWRpYmxlXC1hbWFyYW50aDsKK+iRkSA+IHRoZVwtcmFwZVwtdHVybmlwOwor6JCVID4gd2F0ZXJcLWNoZXN0bnV0czsKK+iLiCA+IGFcLWtpbmRcLW9mXC1wbGFudDsKK+iJhSA+IGFcLWRlc3BhdGNoXC1ib2F0Owor6IeTID4gaW50ZXJuYWxcLW9yZ2FuczsKK+iFoiA+IHRoZVwtY29sbGFyXC1ib25lOwor572/ID4gbmV0XC1jYXRjaFwtYmlyZHM7CivnuLkgPiBsaWdodFwtYmx1ZVwtc2lsazsKK+e2gyA+IHJhd1wtc2lsa1wtZmFicmljOwor57WNID4gdG9cLWxheVwtdGhlXC13YXJwOwor57WFID4gdW5saW5lZFwtZ2FybWVudDsKK+eztCA+IHB1cmNoYXNlXC1ncmFpbnM7Civns7IgPiB1bnBvbGlzaGVkXC1yaWNlOwor57GYID4gY2xpbWJpbmdcLXBsYW50czsKK+ewlCA+IGFcLWNvYXRcLXJhaW5jb2F0Owor57CRID4gYVwtY29hdFwtcmFpbmNvYXQ7Civnr7AgPiBhXC1iYW1ib29cLWJhc2tldDsKK+epoyA+IHN0YWxrc1wtb2ZcLWdyYWluOwor56mEID4gcGFuaWNsZWRcLW1pbGxldDsKK+emiyA+IG9mZmVyXC1zYWNyaWZpY2U7Civno6ogPiBhXC1oaWdoXC1tb3VudGFpbjsKK+ejpyA+IHNhbmRcLWFuZFwtZ3JhdmVsOwor56OOID4gbW91bnRhaW5cLXN0cmVhbTsKK+efmiA+IHdhdGNoXC1jYXJlZnVsbHk7CivnmpogPiBicmlsbGlhbnRcLXdoaXRlOwor55iIID4gcHJvbG9uZ2VkXC1mZXZlcjsKK+eYgyA+IHNvcmVzXC1mcm9tXC1jb2xkOwor55e+ID4gY2hyb25pY1wtaWxsbmVzczsKK+eXtSA+IGFcLWhlYXJ0XC1zeW1wdG9tOwor55euID4gYVwtc3dlbGxlZFwtYmVsbHk7Civnl6AgPiBhY2hpbmdcLW9mXC1saW1iczsKK+eXgSA+IGNocm9uaWNcLW1hbGFyaWE7CivnlqIgPiBhY2hpbmdcLW9mXC1saW1iczsKK+eVrCA+IHJlY2xhaW1lZFwtZmllbGQ7CivnlKQgPiBkcm9vcGluZ1wtbGVhdmVzOwor55K9ID4gaW1wZXJpYWxcLXNpZ25ldDsKK+eQrSA+IGphZGVcLWxpa2VcLXN0b25lOwor54+nID4gbW90aGVyXC1vZlwtcGVhcmw7Civnj4cgPiBjYXJ2aW5nXC1vblwtamFkZTsKK+eOnyA+IHN0cmVha3NcLWluXC1qYWRlOwor542xID4gYVwta2luZFwtb2ZcLW90dGVyOwor54urID4gbmFtZVwtb2ZcLWFcLXRyaWJlOwor54mEID4gdG9cLXdhbGtcLXJhcGlkbHk7CivnhpMgPiB0aGVcLWJhbmtcLWFcLWZpcmU7CivnhLUgPiB0b1wtdGVtcGVyXC1zdGVlbDsKK+eAtSA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+eAniA+IHBvb2xcLWluXC1hXC1yaXZlcjsKK+a9mSA+IHJpdmVyXC1pblwtc2hhbnhpOwor5ry1ID4gbmFtZVwtb2ZcLWFcLXJpdmVyOwor5ruOID4gY291bnR5XC1pblwtaGVuYW47CivmuqQgPiBuYW1lXC1vZlwtYVwtcml2ZXI7CivmuJMgPiBtb3VudGFpblwtc3RyZWFtOwor5reTID4gbmFtZVwtb2ZcLWFcLXJpdmVyOwor5raHID4gbmFtZVwtb2ZcLWFcLXJpdmVyOwor5rOpID4gcmlzaW5nXC1vZlwtd2F0ZXI7CivmspogPiBpc2xldFwtaW5cLXN0cmVhbTsKK+aymCA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+amoSA+IHF1ZXJjdXNcLWRlbnRhdGE7CivmpLogPiBiZWFtXC1vZlwtYVwtaG91c2U7Civmn44gPiBjYWx5eFwtb2ZcLWZsb3dlcjsKK+afgSA+IGxhcmdlXC10aWVcLWJlYW1zOwor5p6sID4gYW5cLWV2ZW5cLWdyYWluZWQ7CivmnKMgPiB0aGVcLXJpc2luZ1wtbW9vbjsKK+aRuyA+IGFcLWRlbGljYXRlXC1oYW5kOwor5o+rID4gZ3Jhc3BcLXdpdGhcLWhhbmQ7CivmiLEgPiB0aGVhdHJpY2FsXC1wbGF5Owor5oiEID4gdG9cLWJlXC1pblwtYXdlXC1vZjsKK+W/kyA+IGNvbmNlcm5lZFwtYWJvdXQ7CivlvqwgPiB0b1wtd2FuZGVyXC1hYm91dDsKK+W8tCA+IHJlZFwtbGFjcXVlclwtYm93Owor5be5ID4gbnVwdGlhbFwtd2luZWN1cDsKK+W1jiA+IG1vdW50YWluXC1yZWNlc3M7Civls54gPiBoaWdoXC1hbmRcLXVuZXZlbjsKK+WksiA+IGFkdmFuY2VcLXF1aWNrbHk7CivlnbQgPiBhXC1jbG9kXC1vZlwtZWFydGg7CivllqMgPiB0b1wtYnJlYXRoZVwtdXBvbjsKK+WUsiA+IGZvcmNlZFwtbGF1Z2h0ZXI7CivljpwgPiBhXC1tb3VudGFpblwtcGVhazsKK+WMiSA+IG5vaXNlXC1vZlwtd2F0ZXJzOwor5YyEID4gdG9cLWJlZ1wtZm9yXC1hbG1zOwor5YuFID4gaW1wZXJpYWxcLWRlZ3JlZTsKK+WKmCA+IG1ha2VcLWludG9cLW1pbmNlOwor5YqWID4gbWFrZVwtaW50b1wtbWluY2U7Civlgr0gPiB0ZXJyb3JcLXN0cmlja2VuOwor5L6WID4gbG9naWNhbFwtcmVhc29uczsKK+S9lCA+IG9jY3VweVwtYnlcLWZvcmNlOwor5Lm4ID4gZmVtaW5pbmVcLXN1ZmZpeDsKK+S2oSA+IHNvdW5kXC1vZlwtYml0aW5nOwor5LaOID4gc291bmRcLW9mXC1icmVhdGg7CivktZsgPiBwYW5pY2xlZFwtbWlsbGV0Owor5LWWID4gcGFuaWNsZWRcLW1pbGxldDsKK+S0viA+IHRvXC1ncmluZFwtYmFybGV5Owor5LSuID4gY2FrZXNcLXBmXC1sZWF2ZW47CivktI4gPiBmbHlpbmdcLXNxdWlycmVsOwor5LK+ID4gdGhlXC10YWlsb3JcLWJpcmQ7Civkr4QgPiBhXC1waWViYWxrXC1ob3JzZTsKK+SuvSA+IGJpdFwtZm9yXC1hXC1ob3JzZTsKK+SutSA+IG5hbWVcLW9mXC1hXC1ob3JzZTsKK+SusSA+IGFcLWtpbmRcLW9mXC1iZWFzdDsKK+SusCA+IGFcLWtpbmRcLW9mXC1iZWFzdDsKK+SurCA+IG5hbWVcLW9mXC1hXC1ob3JzZTsKK+SuqCA+IGFcLXBpZWJhbGRcLWhvcnNlOwor5K6nID4gbG9uZ1wtaGFpclwtaG9yc2U7CivkrqIgPiBhXC13YWxraW5nXC1ob3JzZTsKK+SuniA+IGFcLXBpZWJhbGRcLWhvcnNlOwor5K6ZID4gbmFtZVwtb2ZcLWFcLWhvcnNlOwor5K6WID4gbmFtZVwtb2ZcLWFcLWhvcnNlOwor5K6TID4gYVwtd2Fsa2luZ1wtaG9yc2U7CivkrpIgPiBuYW1lXC1vZlwtYVwtaG9yc2U7Civkro8gPiBuYW1lXC1vZlwtYVwtaG9yc2U7Civkro4gPiBhXC1ydW5uaW5nXC1ob3JzZTsKK+SuiyA+IG5hbWVcLW9mXC1hXC1ob3JzZTsKK+SuiiA+IG5hbWVcLW9mXC1hXC1ob3JzZTsKK+StvCA+IGRhcmtcLWJsdWVcLWhvcnNlOwor5K22ID4gZGFya1wtYmx1ZVwtaG9yc2U7CivkrKsgPiBjbGFyZmllZFwtYnV0dGVyOwor5KyBID4gYVwtbGlnaHRcLWN5Y2xvbmU7Civkqq4gPiBiZWF1dGlmdWxcLXNvdW5kOwor5KqVID4gdG9cLXdyYXBcLW9yXC1iYW5kOwor5Km5ID4gdG9cLXJlcGFpclwtc2hvZXM7CivkqZIgPiBkcmVzc2VkXC1sZWF0aGVyOwor5KmEID4gdG9cLWZhY2VcLXRvXC1mYWNlOwor5KimID4gc25vd2luZ1wtaGVhdmlseTsKK+SooiA+IGFcLXBhc3NpbmdcLWNsb3VkOwor5KiWID4gdG9cLXN0b3BcLXJhaW5pbmc7CivkqJEgPiB0b1wtc3RvcFwtcmFpbmluZzsKK+SogCA+IHRvXC1sYXlcLWluXC1ncmFpbjsKK+SnryA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+SnriA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+SnnSA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+SnjCA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+SniyA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+SngyA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+SmuyA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+SmqyA+IGluc2lkZVwtdGhlXC1kb29yOwor5KagID4gbmFtZVwtb2ZcLWFcLXJpdmVyOwor5KWXID4gYVwtYnJhbmRpbmdcLWlyb247CivkpLEgPiBhXC1zb2xlbW5cLXBsZWRnZTsKK+SjtiA+IHVuc3RyYWluZWRcLXdpbmU7Civko7MgPiB1bnN0cmFpbmVkXC13aW5lOwor5KOTID4gbmFtZVwtb2ZcLWFcLXN0YXRlOwor5KOQID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor5KOLID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor5KOKID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor5KOHID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor5KK7ID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor5KK0ID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor5KKzID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor5KKmID4gdG9cLWxlYWRcLXRoZVwtd2F5Owor5KKWID4gdG9cLWJlXC1zY2F0dGVyZWQ7CivkooEgPiB0aXJlXC1vZlwtYVwtd2hlZWw7CivkobsgPiBzaGFrZVwtb2ZcLWFcLWNhcnQ7CivkoaggPiBjb25uZWN0ZWRcLWNhcnRzOwor5KGTID4gc2hha2VcLW9mXC1hXC1jYXJ0Owor5KGQID4gdG9cLW1vdmVcLXN3aWZ0bHk7CivkoLUgPiB0b1wtd2VhclwtY2xvdGhlczsKK+SgqCA+IHdhbGtpbmdcLXJhcGlkbHk7Civkn5sgPiB3YWxraW5nXC1yYXBpZGx5Owor5J+RID4gd2Fsa2luZ1wtcmFwaWRseTsKK+SetyA+IHdhbGtpbmdcLXJhcGlkbHk7CivknrYgPiB3YWxraW5nXC1yYXBpZGx5Owor5J6wID4gd2Fsa2luZ1wtcmFwaWRseTsKK+SerSA+IHdhbGtpbmdcLXJhcGlkbHk7CivknqwgPiB0b1wtcGFzc1wtdGhyb3VnaDsKK+SeqiA+IHdhbGtpbmdcLXJhcGlkbHk7Civkna8gPiB0b1wtY2hhbmdlXC1oYW5kczsKK+SdkCA+IGFcLWNhc3RyYXRlZFwtaG9nOwor5Jy+ID4gZmVybWVudGVkXC1iZWFuczsKK+ScuyA+IGZlcm1lbnRlZFwtYmVhbnM7CivknLUgPiBmZXJtZW50ZWRcLWJlYW5zOwor5JyEID4gc2xvd1wtb25cLXRhbGtpbmc7Civkm7UgPiB0b1wtdGVhY2hcLW9yYWxseTsKK+SbnyA+IHdpbGRcLXN0YXRlbWVudHM7Civkm5QgPiB0b1wtaG9sZFwtaW5cLWhhbmQ7CivkmqYgPiBzbGFudGVkXC1jb3JuZXJzOwor5JqlID4gdG9cLWFkanVzdFwtYVwtYm93Owor5Jm7ID4gdG9cLXN0ZWFsXC1hXC1sb29rOwor5JmoID4gdG9cLXdyYXBcLW9yXC1iaW5kOwor5JmdID4gdW5kZXJcLWdhcnJtZW50czsKK+SXviA+IGNvcmJpY3VsYVwtbGVhbmE7CivklrwgPiB0aGVcLWR1bmdcLWJlZXRsZTsKK+SWmSA+IGFcLXJlc3RpbmdcLXRpZ2VyOwor5JaJID4gdG9cLXJvYXJcLW9yXC1ob3dsOwor5JW3ID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JWZID4gdG9cLXNldFwtaW5cLW9yZGVyOwor5JWJID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JSnID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JSHID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JO2ID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JOeID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JOYID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JOIID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JK3ID4gYVwta2luZFwtb2ZcLXBsYW50Owor5JKSID4gbmFtZVwtb2ZcLWFcLXBsYW50Owor5JKMID4gZGFya1wtYmx1ZVwtY29sb3I7CivkkJwgPiBhXC1zd2VsbGVkXC1iZWxseTsKK+SPsiA+IHByb3RydWRlZFwtYm9uZXM7CivkjrMgPiBsb3NlXC1vZlwtdGhlXC1lYXI7CivkjokgPiB0b1wtd2Fsa1wtc3dpZnRseTsKK+SMviA+IHRvXC1sYXlcLXRoZVwtd2FycDsKK+SLtyA+IGFcLWtpbmRcLW9mXC10aGljazsKK+SLlSA+IHRvXC1sYXlcLXRoZVwtd2FycDsKK+SKtSA+IHlvdW5nXC1hbmRcLXNtYWxsOwor5IqXID4gYVwta2luZFwtb2ZcLWdyYWluOwor5IqJID4gcHJlc2VydmVkXC1mcnVpdDsKK+SJpyA+IHNvdW5kXC1vZlwtYmFtYm9vOwor5IaCID4gYVwta2luZFwtb2ZcLWdyYWluOwor5IW3ID4gYW5cLWVhclwtb2ZcLWdyYWluOwor5IWwID4gYVwta2luZFwtb2ZcLWdyYXNzOwor5IWhID4gYVwta2luZFwtb2ZcLWdyYXNzOwor5IWgID4gYVwta2luZFwtb2ZcLWdyYXNzOwor5IWeID4gc3RhbGtzXC1vZlwtZ3JhaW47CivkhYsgPiBhXC1raW5kXC1vZlwtZ3JhaW47CivkhYIgPiBhXC1raW5kXC1vZlwtZ3JhaW47CivkhLEgPiBhXC1raW5kXC1vZlwtZ3JhaW47CivkhK4gPiBkYXJrXC1yaWNlXC1wbGFudDsKK+SEpyA+IGFcLWtpbmRcLW9mXC1ncmFpbjsKK+SElSA+IGdvZFwtb2ZcLXRoZVwtbGFuZDsKK+SDtyA+IGFcLWtpbmRcLW9mXC1zdG9uZTsKK+SDtSA+IGFcLWtpbmRcLW9mXC1zdG9uZTsKK+SDniA+IGFcLWtpbmRcLW9mXC1zdG9uZTsKK+SDkiA+IHBvb3JcLWFuZFwtYmFycmVuOwor5IKtID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor5IKaID4gYVwta2luZFwtb2ZcLXN0b25lOwor5IG0ID4ga2VlcFwtb25cLWxvb2tpbmc7CivkgbMgPiB0b1wtbG9zZVwtb25lXC1leWU7CivkgKkgPiB0b1wtbG9va1wtYXNrYW5jZTsKK+SAjiA+IHRvXC1sb29rXC1hc2thbmNlOwor5ICJID4gZm9vZFwtY29udGFpbmVyczsKK+O/sSA+IGRyeVwtYW5kXC1kZWNheWVkOwor476pID4gbWFsaWduYW50XC1ib2lsczsKK+O9vSA+IGNocm9uaWNcLWRpc2Vhc2U7CivjvacgPiBuYW1lXC1vZlwtYVwtcGxhY2U7CivjvJUgPiBwdWxwXC1vZlwtYVwtbWVsb247CivjvJQgPiBhXC1raW5kXC1vZlwtbWVsb247CivjvJEgPiBwdWxwXC1vZlwtYVwtbWVsb247CivjvI0gPiBwdWxwXC1vZlwtYVwtbWVsb247CivjvIogPiBhXC1raW5kXC1vZlwtbWVsb247CivjvIIgPiBhXC1jcmFja1wtaW5cLWphZGU7Civju7ggPiBqYWRlXC1saWtlXC1zdG9uZTsKK+O7tyA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+O7jSA+IG5hbWVcLW9mXC1hXC1zd29yZDsKK+O6pCA+IGFcLWtpbmRcLW9mXC1iZWFzdDsKK+O6oSA+IGFcLWtpbmRcLW9mXC1iZWFzdDsKK+O6nyA+IGFcLWtpbmRcLW9mXC1iZWFzdDsKK+O6lCA+IGFcLWtpbmRcLW9mXC1iZWFzdDsKK+O6jSA+IGFcLWtpbmRcLW9mXC1vdHRlcjsKK+O6jCA+IGVuZGxlc3NcLWJhcmtpbmc7CivjuoQgPiBhXC1raW5kXC1vZlwtYmVhc3Q7CivjuoEgPiBhXC1raW5kXC1vZlwtYmVhc3Q7CivjuacgPiBmb3hcLWxpa2VcLWFuaW1hbDsKK+O4sSA+IGhvcm5sZXNzXC1jYXR0bGU7CivjuLAgPiBob3JubGVzc1wtY2F0dGxlOwor47ipID4gdG9cLWRlc2lzdFwtYW5cLW94Owor47iRID4gYVwtY29va2luZ1wtc3RvdmU7Civjt40gPiBhXC1jaGVtaWNhbFwtdGVybTsKK+O2myA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+O1siA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+O1pyA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+O1kSA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+O1giA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+O0qiA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+OzvyA+IHJvbGxpbmdcLWJpbGxvd3M7Civjs74gPiBuYW1lXC1vZlwtYVwtcml2ZXI7Civjs7ggPiBuYW1lXC1vZlwtYVwtcml2ZXI7Civjs7cgPiBkYXJrXC1ibHVlXC1jb2xvcjsKK+OztiA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+OztSA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+OzoSA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+OzlyA+IGJhbmtcLW9mXC1hXC1yaXZlcjsKK+OzliA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+OyvCA+IG5hbWVcLW9mXC1hXC1yaXZlcjsKK+OylCA+IHdvb2xlblwtdGV4dGlsZXM7Civjso4gPiB3b29sZW5cLXRleHRpbGVzOwor47KNID4gd29vbGVuXC10ZXh0aWxlczsKK+OxjiA+IGNhbm5vdFwtYmVcLWtub3duOwor47CsID4gc2hvcnR3aW5kZWRuZXNzOwor47CXID4gYVwta2luZFwtb2ZcLW1hcGxlOwor47CIID4gbmljZVwtYW5kXC1wcmV0dHk7Civjr7EgPiBhblwtZW5sYXJnZWRcLWJhZzsKK+OvpCA+IHRoZVwtanVqdWJlXC10cmVlOwor46+UID4gdG9cLWh1bGxcLWhlYXZpbHk7CivjrqEgPiB0b1wtbGlnaHRcLWFcLWZpcmU7CivjraQgPiB0aGVcLWNvbnZvbHZ1bHVzOwor46ugID4gYVwta2luZFwtb2ZcLXdhdGVyOwor46qrID4gd2lzZVwtYW5kXC1jbGV2ZXI7CivvqKwgPiBwdWJsaWNcLWJ1aWxkaW5nOwor76iHID4gc3Bva2VzXC1vZlwtd2hlZWw7Civjp44gPiBmb3JrZWRcLWJyYW5jaGVzOwor76eMID4gc3BhcmtsaW5nXC1zdG9uZTsKK+OlniA+IHRvXC10aGlua1wtZGVlcGx5Owor46WbID4gd2l0aFwtZXhwZWRpdGlvbjsKK+OiniA+IHJvb21zXC1jb25uZWN0ZWQ7Civjoo0gPiBhXC1sb25nXC12ZXJhYmRhaDsKK+OhsiA+IHRpbGVzXC1vblwtYVwtcm9vZjsKK+OhgCA+IHJhZ2dlZFwtY2xvdGhpbmc7CivjoIggPiBuYW1lXC1vZlwtYVwtcGxhY2U7CivjoIIgPiBuYW1lXC1vZlwtYVwtcGxhY2U7Civjn5QgPiBzdGVlcFwtYW5kXC1sb2Z0eTsKK+OfjyA+IHN0ZWVwXC1hbmRcLWxvZnR5Owor452lID4gaGF2ZVwtYVwtbmlnaG1hcmU7CivjnYUgPiB0b1wtZ2l2ZVwtc3Vja1wtdG87CivjnLIgPiB0b1wtaGF2ZVwtc3VycGx1czsKK+ObsCA+IHRvXC1tYXJyeVwtYVwtd2lmZTsKK+OapiA+IGFcLWNoYXJtaW5nXC1naXJsOwor45m8ID4gYVwtbWlsaXRhcnlcLXdhbGw7CivjmbggPiBhXC1jbG9kXC1vZlwtZWFydGg7CivjmZcgPiBhXC1sdW1wXC1vZlwtZWFydGg7CivjmLogPiBjdWx0aXZhdGVkXC1sYW5kOwor45i1ID4gbmFtZVwtb2ZcLWFcLXBsYWNlOwor45e/ID4gdG9cLWxhdWdoXC1sb3VkbHk7CivjlbIgPiB0b1wtZ2FnXC1vclwtYnJpYmU7CivjlZggPiB0b1wtdGFrZVwtcGFydFwtaW47Civjkp8gPiB3aXRoXC1hXC1jaGFybWluZzsKK+OQvSA+IG5hbWVcLW9mXC1hXC1wbGFjZTsKK+i6hSA+IHdhbGtcLWNhcmVmdWxseTsKK+W3tCA+IGdyZWF0bHlcLWRlc2lyZTsKK+acnyA+IHBlcmlvZFwtb2ZcLXRpbWU7Civlj7ggPiB0YWtlXC1jaGFyZ2VcLW9mOwor55SlID4gc2lzdGVyJydzXC1jaGlsZDsKK+WxjyA+IGZvbGRpbmdcLXNjcmVlbjsKK+eLkCA+IHNwZWNpZXNcLW9mXC1mb3g7CivmsYkgPiBjaGluZXNlXC1wZW9wbGU7CivlprkgPiB5b3VuZ2VyXC1zaXN0ZXI7CivkvIEgPiBwbGFuXC1hXC1wcm9qZWN0Owor6KWWID4gb3V0ZXJcLWdhcm1lbnRzOwor5aOBID4gcGFydGl0aW9uXC13YWxsOwor6Z+mID4gdGFubmVkXC1sZWF0aGVyOwor5r2wID4gZmxvb2RpbmdcLXJpdmVyOwor54+gID4gcHJlY2lvdXNcLXN0b25lOwor6ZSLID4gcG9pbnRcLW9mXC1zcGVhcjsKK+S/lyA+IHNvY2lhbFwtY3VzdG9tczsKK+aqkCA+IGVhdmVzXC1vZlwtaG91c2U7CivpqpEgPiByaWRlXC1ob3JzZWJhY2s7Civlh70gPiBjb3JyZXNwb25kZW5jZTsKK+mtjyA+IGtpbmdkb21cLW9mXC13ZWk7CivmnpogPiBzdGFsa1wtb2ZcLXNocnViOwor5LuyID4gbWlkZGxlXC1icm90aGVyOwor55CzID4gYmVhdXRpZnVsXC1qYWRlOwor5YeRID4gcGllY2VcLXRvZ2V0aGVyOwor6YOBID4gc3dlZXRcLXNtZWxsaW5nOwor6IqvID4gcGl0aFwtZnJvbVwtcnVzaDsKK+e4niA+IHdoaXRlXC1yYXdcLXNpbGs7Civml6wgPiB0ZW5cLWRheVwtcGVyaW9kOwor57a6ID4gZmluZVwtdGhpblwtc2lsazsKK+WmqCA+IGludGVyZmVyZVwtd2l0aDsKK+mqhCA+IHNwaXJpdGVkXC1ob3JzZTsKK+ewtyA+IGVhdmVzXC1vZlwtaG91c2U7CivmjrQgPiBib3hcLW9uZScnc1wtZWFyczsKK+WXryA+IGZpbmFsXC1wYXJ0aWNsZTsKK+WyrSA+IG1vdW50YWluXC1yaWRnZTsKK+a5mCA+IGh1bmFuXC1wcm92aW5jZTsKK+mKgyA+IGFuY2llbnRcLXdlYXBvbjsKK+a6gyA+IGZsb29kaW5nXC1yaXZlcjsKK+mTriA+IGNsYW5naW5nXC1zb3VuZDsKK+iOuSA+IGx1c3Rlclwtb2ZcLWdlbXM7Civlg7sgPiBvdXRcLW9mXC10aGVcLXdheTsKK+e7riA+IGZpbmVcLXRoaW5cLXNpbGs7CivmuLogPiBlbmRsZXNzbHlcLWxvbmc7CivkvaMgPiBjb21taXNzaW9uXC1mZWU7Civlkq8gPiBmaW5hbFwtcGFydGljbGU7CivlkZsgPiBjaG9rZVwtYnlcLXNtb2tlOwor5YewID4gZmVtYWxlXC1waG9lbml4Owor6Ze6ID4gc21hbGxcLWVudHJhbmNlOwor57yAID4gcGF0Y2hcLXRvZ2V0aGVyOwor6KKEID4gb3V0ZXJcLWdhcm1lbnRzOwor55KLID4gamFkZVwtcGxheXRoaW5nOwor5ou0ID4gYmluZFwtd2l0aFwtcm9wZTsKK+enpyA+IHJpY2VcLXNlZWRsaW5nczsKK+iVgyA+IGZvcmVpZ25cLXRoaW5nczsKK+mEgiA+IGh1YmVpXC1wcm92aW5jZTsKK+ajsSA+IHNxdWFyZWRcLXRpbWJlcjsKK+ailyA+IHN0ZW1cLW9mXC1mbG93ZXI7Civoj7EgPiB3YXRlclwtY2hlc3RudXQ7CivplZEgPiBwb3VuZFwtc3Rlcmxpbmc7CivmoKkgPiBzcGVjaWVzXC1vZlwtb2FrOwor5ZS3ID4gZmluYWxcLXBhcnRpY2xlOwor55KeID4gdW5wb2xpc2hlZFwtZ2VtOwor6ZuvID4gY2xvdWRcLXBhdHRlcm5zOwor6K63ID4gc2xvd1wtb2ZcLXNwZWVjaDsKK+eShyA+IGJlYXV0aWZ1bFwtamFkZTsKK+eLsCA+IGZpZXJjZVwtbG9va2luZzsKK+WzpiA+IG1vdW50YWluXC1yYW5nZTsKK+a5gyA+IHNvdW5kXC1vZlwtd2F2ZXM7CivlqKMgPiB5b3VuZ2VyXC1zaXN0ZXI7CivonZcgPiBraW5kXC1vZlwtbG9jdXN0Owor55qWID4gYW5odWlcLXByb3ZpbmNlOwor6YWLID4gY2hpZWZcLW9mXC10cmliZTsKK+WjkSA+IGJlZFwtb2ZcLXRvcnJlbnQ7Civns68gPiBnbHV0aW5vdXNcLXJpY2U7CivnqLcgPiBnb2RcLW9mXC1jZXJlYWxzOwor5aG+ID4gdmlsbGFnZVwtc2Nob29sOwor54upID4gd2ludGVyXC1odW50aW5nOwor5oiNID4gZGVmZW5kXC1ib3JkZXJzOwor55KAID4gbHVzdHJlXC1vZlwtZ2VtczsKK+eJjSA+IHdyaXRpbmdcLXRhYmxldDsKK+mVjCA+IGVuZ3JhdmluZ1wtdG9vbDsKK+mlryA+IGZhcmV3ZWxsXC1wYXJ0eTsKK+m5giA+IGNoaW5lc2VcLW9yaW9sZTsKK+WboSA+IG9uZScnc1wtZGF1Z2h0ZXI7Civmup8gPiBkcml6emxpbmdcLXJhaW47CivplI8gPiBraW5kXC1vZlwtcmFwaWVyOwor5bGZID4gdG9cLWVhc2VcLW5hdHVyZTsKK+eQqCA+IGJlYXV0aWZ1bFwtamFkZTsKK+eOsyA+IHRvcnRvaXNlXC1zaGVsbDsKK+eRrSA+IGFcLWtpbmRcLW9mXC1qYWRlOwor5p2IID4gZm9ya1wtb2ZcLWFcLXRyZWU7CivljJAgPiBmYWxsXC1wcm9zdHJhdGU7CivnoKMgPiBhXC1zdG9uZVwtcm9sbGVyOwor6ZOiID4gdW5pdFwtb2ZcLXdlaWdodDsKK+mqiCA+IHRlYW1cLW9mXC1ob3JzZXM7CivlmbEgPiBsYXVnaFwtaGVhcnRpbHk7Civpk7MgPiBhbmNpZW50XC13ZWFwb247Civnm7EgPiB3aWRlXC1vcGVuXC1leWVzOwor6ICEID4gZWxkZXJseVwtcGVyc29uOwor5qaUID4gYmV0ZWxcLW51dFwtdHJlZTsKK+ivpCA+IHRvXC1leHBvc3R1bGF0ZTsKK+idriA+IHZlbm9tb3VzXC1zbmFrZTsKK+mijSA+IHJpdmVyXC1pblwtYW5odWk7CivmpZ0gPiBtZWxpYVwtamFwb25pY2E7CivonbwgPiBhXC1tb2xlXC1jcmlja2V0Owor6I2qID4gYXJvbWF0aWNcLWdyYXNzOwor5aiMID4gYnJvdGhlcicnc1wtd2lmZTsKK+e8nyA+IHdoaXRlXC1yYXdcLXNpbGs7CivmmbcgPiBzaGFkb3dzXC1vZlwtc3VuOwor5Ze1ID4gdXNlZFwtZm9yXC1zb3VuZDsKK+i4hSA+IHRvXC13YWxrXC1hcm91bmQ7Civmj4YgPiBwcmltZVwtbWluaXN0ZXI7CivnjJUgPiBtYWNhY3VzXC1tb25rZXk7Civljp0gPiBjdXRcLW9yXC1lbmdyYXZlOwor6JGaID4gbXVsYmVycnlcLWZydWl0Owor6ICSID4gaGFuZGxlXC1vZlwtcGxvdzsKK+WYniA+IGZpbmFsXC1wYXJ0aWNsZTsKK+mMviA+IGVuZ3JhdmluZ1wtdG9vbDsKK+ePmSA+IHByZWNpb3VzXC1zdG9uZTsKK+iNuCA+IHdhdGVyXC1jaGVzdG51dDsKK+S/hSA+IG9ybmFtZW50YWxcLWNhcDsKK+iPvSA+IGJlYW5zXC1hbmRcLXBlYXM7Civpnq8gPiBzYWRkbGVcLWJsYW5rZXQ7CivpvJAgPiBpbmNlbnNlXC10cmlwb2Q7CivosLAgPiBhY2N1c2VcLWZhbHNlbHk7CivpqrEgPiBqb2ludFwtb2ZcLWJvbmVzOwor6KymID4gdFwtc3BlYWtcLXNvZnRseTsKK+ejtCA+IHN0ZXBzXC1vblwtbGVkZ2U7CivlqbogPiBuYW1lXC1vZlwtYVwtc3RhcjsKK+WgjSA+IHNpZGVcLW9mXC1icmlkZ2U7CivmoasgPiBob3JzZVwtY2hlc3RudXQ7CivmvLYgPiBpbmRlY2lwaGVyYWJsZTsKK+WtpSA+IG9uZScnc1wtY2hpbGRyZW47CivmurEgPiByaXZlclwtaW5cLWhlbmFuOwor5bqgID4gdmlsbGFnZVwtc2Nob29sOwor6bulID4gdGF0dG9vaW5nXC1mYWNlOwor6LqQID4gdG9cLXN0cmlkZVwtb3ZlcjsKK+i5ryA+IHBhd3NcLW9mXC1hbmltYWw7Civnm40gPiB3aGF0XD9cLXdoeVwtbm90XD87CivmuoYgPiByaXZlclwtaW5cLWh1bmFuOwor56OyID4gdHJpZGFjbmFcLWdpZ2FzOwor5pidID4gYVwtZHVhbFwtcHJvbm91bjsKK+afvSA+IHR5cGVcLW9mXC13aWxsb3c7CivnvKwgPiBwYXR0ZXJuZWRcLXNpbGs7CivpqbogPiBtb3VudGVkXC1lc2NvcnQ7CivpmIogPiBnYXRlXC1vZlwtaGVhdmVuOwor6I2pID4gYVwta2luZFwtb2ZcLXdlZWQ7Civoio4gPiBhXC1raW5kXC1vZlwtaGVyYjsKK+mLiCA+IHNpbHZlclwtcGxhdGluZzsKK+m+hSA+IHRlZXRoXC1wcm90cnVkZTsKK+aZoSA+IGxhdGVcLWFmdGVybm9vbjsKK+aqoCA+IHN0YW5kXC1mb3JcLWxhbXA7CivpgK0gPiB0b1wtZXNjYXBlXC1mcm9tOwor6bidID4gY2hpbmVzZVwtb3Jpb2xlOwor6biOID4gdGhlXC1tYW5nb1wtYmlyZDsKK+m2lyA+IGFcLWtpbmRcLW9mXC1oYXdrOwor6a6nID4gdGhlXC1zaGVhdFwtZmlzaDsKK+msmCA+IGJlYXV0aWZ1bFwtaGFpcjsKK+mslyA+IGhlYWRcLW9ybmFtZW50czsKK+mrhiA+IHNob3VsZGVyXC1ibGFkZTsKK+mplSA+IHNwaXJpdGVkXC1ob3JzZTsKK+motiA+IG1vdW50ZWRcLWVzY29ydDsKK+mojiA+IHJpZGVcLWhvcnNlYmFjazsKK+mojCA+IGFcLWhvcnNlJydzXC1tYW5lOwor6aiIID4gdGVhbVwtb2ZcLWhvcnNlczsKK+mnoiA+IHRlYW1cLW9mXC1ob3JzZXM7CivppKEgPiBwYXN0cnlcLWZpbGxpbmc7CivppJ4gPiBmYXJld2VsbFwtcGFydHk7CivppJcgPiBmb29kXC1pblwtdHJpcG9kOwor6Z+LID4gdGFubmVkXC1sZWF0aGVyOwor6Z+JID4gc2FkZGxlXC1ibGFua2V0Owor6ZyhID4gZHJpenpsaW5nXC1yYWluOwor6Za2ID4gZ2F0ZVwtb2ZcLWhlYXZlbjsKK+mWqCA+IHNtYWxsXC1lbnRyYW5jZTsKK+mUqiA+IGFcLWtpbmRcLW9mXC10b29sOwor6ZCrID4gZW5ncmF2aW5nXC10b29sOwor6ZCnID4ga2luZFwtb2ZcLXJhcGllcjsKK+mPtCA+IHRvXC1wbHVnXC1hXC1ob2xlOwor6Y+oID4gZW5ncmF2aW5nXC10b29sOwor6Y6pID4gbW91bHRcLXNhbWFyaXVtOwor6Y6KID4gcG91bmRcLXN0ZXJsaW5nOwor6Y2GID4gbWRcLW1lbmRlbGV2aXVtOwor6YyaID4gY2xhbmdpbmdcLXNvdW5kOwor6YupID4gcG9pbnRcLW9mXC1zd29yZDsKK+mLkiA+IHBvaW50XC1vZlwtc3BlYXI7Civpi4MgPiBsb2NrXC1sYW50aGFudW07CivpipYgPiB1bml0XC1vZlwtd2VpZ2h0Owor6YevID4gcG9pbnRcLW9mXC1zd29yZDsKK+mAqSA+IHRvXC1ydW5cLXF1aWNrbHk7CivovLYgPiBsaWdodFwtY2FycmlhZ2U7CivouZwgPiB3YWxrXC1jYXJlZnVsbHk7CivotrkgPiBraWNrXC13aXRoXC1ob29mOwor6LGjID4gcGlnXC1vZlwtM1wteWVhcnM7CivosZwgPiBwaWdcLW9mXC0zXC15ZWFyczsKK+ixliA+IGFcLXNoYWNrbGVkXC1waWc7CivorpUgPiBhY2N1c2VcLWZhbHNlbHk7CivoroUgPiBrbm93XC1pblwtZGV0YWlsOwor6KuNID4gdG9cLWV4cG9zdHVsYXRlOwor6KmoID4ga2luZFwtb2ZcLWNpY2FkYTsKK+iopSA+IHNsb3dcLW9mXC1zcGVlY2g7CivopIkgPiBzaG9ydFwtZ2FybWVudHM7CivooYIgPiB0b1wtYmVcLWRlZmVhdGVkOwor6KCCID4gcG9kaXNtYVwtbWlrYWRvOwor6J+zID4gYVwta2luZFwtb2ZcLWNyYWI7Civon60gPiB2ZXJ5XC1zbWFsbFwtYnVnOwor6J6/ID4ga2luZFwtb2ZcLWNpY2FkYTsKK+ieuyA+IGFcLW1vbGVcLWNyaWNrZXQ7CivonqwgPiBncnVic1wtaW5cLWZydWl0Owor6JyOID4gbW9zcXVpdG9cLWxhcnZhOwor6JmAID4gbWluY2VkXC1waWNrbGVzOwor6JeOID4gYVwta2luZFwtb2ZcLXdlZWQ7CivolrMgPiBuYW1lXC1vZlwtYVwtaGVyYjsKK+iWmCA+IHBsYW50YWdvXC1tYWpvcjsKK+iUhiA+IHdhdGVyXC1jaGVzdG51dDsKK+iTryA+IG1lZGljaW5hbFwtaGVyYjsKK+iTjyA+IGZydWl0XC1vZlwtcGxhbnQ7Civok4AgPiBhcm9tYXRpY1wtZ3Jhc3M7CivokaUgPiBydWJ1c1wtcGFsbWF0dXM7Civoj44gPiBiZWF1dGlmdWxcLWphZGU7CivojJ4gPiBmcmFncmFudFwtcGxhbnQ7Civoi4EgPiBtZWRpY2luYWxcLWhlcmI7CivoioggPiBibGVhdFwtb2ZcLXNoZWVwOwor6ISmID4gdXNlZFwtaW5cLScnbGVkZScnOwor576LID4gYmxlYXRcLW9mXC1zaGVlcDsKK+e6iCA+IHBhdHRlcm5lZFwtc2lsazsKK+e2tCA+IHBhdGNoXC10b2dldGhlcjsKK+e1nCA+IGFcLW1hcmtpbmdcLWxpbmU7CivntL4gPiB0dXJuc1wtb3JcLXR3aXN0Owor57O6ID4gdG9cLWNvbGxhYm9yYXRlOwor57GrID4gYmFtYm9vXC11dGVuc2lsOwor562sID4gcmVlZFwtb2ZcLWFcLWxvb207CivnqK0gPiBzdGFsa1wtb2ZcLWdyYWluOwor56iMID4gZ2x1dGlub3VzXC1yaWNlOwor56iIID4gc3RhbGtcLW9mXC1ncmFpbjsKK+egoiA+IHBpbGVcLW9mXC1zdG9uZXM7Civnn4kgPiBhblwtYW5ncnlcLWdsYXJlOwor552xID4gdG9cLWdhemVcLXNsb3dseTsKK+edryA+IHRvXC1iZVwtYWdvbml6ZWQ7CivnnKMgPiBwcm9taW5lbnRcLWV5ZXM7CivnkrggPiBqYWRlJydzXC1zdHJlYWtzOwor55K1ID4gYmVhdXRpZnVsXC1qYWRlOwor55KlID4gYVwta2luZFwtb2ZcLWphZGU7CivnkqIgPiBwcmVjaW91c1wtc3RvbmU7CivnkpggPiBsdXN0ZXJcLW9mXC1qYWRlOwor55KGID4gYmVhdXRpZnVsXC1qYWRlOwor55GpID4gbHVzdHJlXC1vZlwtZ2VtczsKK+eRoCA+IHByZWNpb3VzXC1zdG9uZTsKK+eRhyA+IHRvcnRvaXNlXC1zaGVsbDsKK+eQgSA+IGJlYXV0aWZ1bFwtamFkZTsKK+ePuiA+IGJlYXV0aWZ1bFwtamFkZTsKK+ePpiA+IGFcLWtpbmRcLW9mXC1qYWRlOwor54+iID4gcHJlY2lvdXNcLXN0b25lOwor546lID4gbXlzdGVyaW91c1wtZ2VtOwor5428ID4gbWFjYWN1c1wtbW9ua2V5Owor54yZID4gZmllcmNlXC1sb29raW5nOwor54uoID4gaGFwYWxlXC1qYWNjaHVzOwor54qoID4gcGFudGluZ1wtb2ZcLWNvdzsKK+eJmCA+IHdyaXRpbmdcLXRhYmxldDsKK+eHiSA+IGhlYXRcLXdpdGhcLWZpcmU7Civnh4AgPiB0b1wtbWFrZVwtYVwtZmlyZTsKK+eGiSA+IFwoeWVsbG93XC1jb2xvclwpOwor5r2VID4gcml2ZXJcLWluXC1oZW5hbjsKK+a9gSA+IHJpdmVyXC1pblwtYW5odWk7CivmupsgPiB0b1wtZm9ybVwtaG9sbG93Owor5rmxID4gc291bmRcLW9mXC13YXRlcjsKK+a5iiA+IHBpZWNlXC10b2dldGhlcjsKK+a4oiA+IHBsZWFzYW50XC1zb3VuZDsKK+a2rCA+IHdhdGVyeVwtZXhwYW5zZTsKK+a0vyA+IHN0YWduYW50XC13YXRlcjsKK+azgyA+IHJpdmVyXC1pblwtaGVuYW47Civms4IgPiBjbGVhclwtYW5kXC1kZWVwOwor5rK3ID4gdG9cLXJlbW92ZVwtZXZpbDsKK+aurSA+IGFcLXN0aWZmXC1jb3Jwc2U7CivmqpYgPiB3aWxkXC1wZWFyXC10cmVlOwor5qqJID4gdHlwZVwtb2ZcLXdpbGxvdzsKK+apvyA+IHF1ZXJjdXNcLWdsYXVjYTsKK+amviA+IHBpZWNlc1wtb2ZcLXdvb2Q7CivmpqAgPiBjaGluZXNlXC1xdWluY2U7CivmppYgPiBwYXBlclwtbXVsYmVycnk7CivmpKogPiBtYWNoaWx1c1wtbmFubXU7Civmo5AgPiBzcGVjaWVzXC1vZlwteWV3Owor5qKKID4gc3F1ZWV6ZVwtb3V0XC1vZjsKK+afviA+IHN0cmFpZ2h0XC1ncmFpbjsKK+afnyA+IG1hY2hpbHVzXC1uYW5tdTsKK+afgyA+IGV1cnlhXC1qYXBvbmljYTsKK+abjyA+IG9uY2VcLXVwb25cLXRpbWU7CivmmaUgPiBhbmh1aVwtcHJvdmluY2U7CivmmaIgPiBsaWdodFwtb2ZcLXN0YXJzOwor5piwID4gdmFyXC1vZlwtJyd0b1wtYmUnJzsKK+aUgiA+IHRvXC1iZWF0XC1hXC1kcnVtOwor5pG0ID4gdG9cLXN0cmV0Y2hcLW91dDsKK+aRkSA+IGJveFwtb25lJydzXC1lYXJzOwor5bmxID4gb2ZmaWNpYWxcLWRyZXNzOwor5befID4gYVwtd2F0ZXJ5XC13YXN0ZTsKK+W3kiA+IG1vdW50YWluXC1yYW5nZTsKK+W2uiA+IG1vdW50YWluXC1yaWRnZTsKK+W1tCA+IG1vdW50YWluXC1yaWRnZTsKK+WyuiA+IG1vdW50YWluXC1yaWRnZTsKK+WxmyA+IGZvbGRpbmdcLXNjcmVlbjsKK+WimiA+IG1vdW50YWluXC1yYW5nZTsKK+WhlSA+IGFcLWd1c3RcLW9mXC13aW5kOwor5Z+HID4gbmFtZVwtb2ZcLWJyaWRnZTsKK+WchSA+IGNvcnJlc3BvbmRlbmNlOwor5Zm5ID4gc291bmRcLW9mXC1iZWxsczsKK+WYkyA+IGd1cmdsaW5nXC1zb3VuZDsKK+WXhiA+IGNob2tlXC1ieVwtc21va2U7CivllpIgPiBhXC1kdWFsXC1wcm9ub3VuOwor5ZWMID4gYW5pbWFsXC1kaXNlYXNlOwor5Y6DID4gdG9cLWxvb2tcLXVwd2FyZDsKK+WNrSA+IGhpZ2hcLlwtdG9cLXJhaXNlOwor5Y2CID4gdG9cLWZseVwtcmFwaWRseTsKK+WHviA+IGNvcnJlc3BvbmRlbmNlOwor5LyVID4gY29tbW9uXC1sYWJvcmVyOwor5LqHID4ga3d1a3llbFwtaGFtbWVyOwor5LaUID4gcHJvbWluZW50XC1ndW1zOwor5LaQID4gdG9cLXRha2VcLWJyZWF0aDsKK+S2gCA+IHNvdW5kXC1vZlwtZHJ1bXM7Civktb4gPiBzb3VuZFwtb2ZcLWRydW1zOwor5LW9ID4gc291bmRcLW9mXC1kcnVtczsKK+S1tiA+IGFcLWtpbmRcLW9mXC1mcm9nOwor5LWMID4gcmVkZGlzaFwteWVsbG93Owor5LS0ID4gYVwta2luZFwtb2ZcLWNha2U7CivktK8gPiBhXC1raW5kXC1vZlwtY2FrZTsKK+S0qSA+IGFcLWtpbmRcLW9mXC1kZWVyOwor5LSiID4gYVwta2luZFwtb2ZcLWRlZXI7CivktJggPiBhXC1raW5kXC1vZlwtYmlyZDsKK+S0kCA+IGFcLWtpbmRcLW9mXC1iaXJkOwor5LSGID4gYVwta2luZFwtb2ZcLWJpcmQ7CivktIQgPiBhXC1raW5kXC1vZlwtYmlyZDsKK+SzvyA+IGFcLWtpbmRcLW9mXC1iaXJkOwor5LO4ID4gdGhlXC13aWxkXC1nb29zZTsKK+SztCA+IGFcLWtpbmRcLW9mXC1iaXJkOwor5LOvID4gYVwta2luZFwtb2ZcLWJpcmQ7Civks6wgPiBhXC1raW5kXC1vZlwtYmlyZDsKK+SzqyA+IGFcLXNtYWxsXC1waWdlb247Civks6ogPiBhXC1raW5kXC1vZlwtYmlyZDsKK+SzqSA+IGFcLWtpbmRcLW9mXC1iaXJkOwor5LOSID4gYVwta2luZFwtb2ZcLWJpcmQ7Civksr0gPiBhXC1raW5kXC1vZlwtYmlyZDsKK+SyvCA+IGFcLWtpbmRcLW9mXC1iaXJkOwor5LK4ID4gYVwta2luZFwtb2ZcLWJpcmQ7Civksq4gPiBhXC1raW5kXC1vZlwtYmlyZDsKK+SyqiA+IGFcLWtpbmRcLW9mXC1iaXJkOwor5LKiID4gYVwta2luZFwtb2ZcLWZpc2g7CivksqAgPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SynyA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LKZID4gYVwta2luZFwtb2ZcLWZpc2g7CivkspggPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SylyA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LKTID4gYVwta2luZFwtb2ZcLWZpc2g7CivkspAgPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SyjyA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LKLID4gYVwta2luZFwtb2ZcLWZpc2g7CivksokgPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SygiA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LKAID4gYVwta2luZFwtb2ZcLWZpc2g7Civksb8gPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SxvCA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LG7ID4gYVwta2luZFwtb2ZcLWZpc2g7CivksbUgPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SxsiA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LGwID4gYVwta2luZFwtb2ZcLWZpc2g7Civksa8gPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SxriA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LGsID4gYVwta2luZFwtb2ZcLWZpc2g7CivksasgPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SxqCA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LGlID4gYVwta2luZFwtb2ZcLWZpc2g7CivksaQgPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SxoiA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LGgID4gYVwta2luZFwtb2ZcLWZpc2g7CivksZ4gPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SxmyA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LGaID4gYVwta2luZFwtb2ZcLWZpc2g7CivksZMgPiBhXC1raW5kXC1vZlwtZmlzaDsKK+SwviA+IGFcLWtpbmRcLW9mXC1maXNoOwor5LC5ID4gdGhlXC1jdXR0bGVmaXNoOwor5LC0ID4gYVwtd2FmdGluZ1wtZmlzaDsKK+SwsiA+IHRoZVwtc2hlYXRcLWZpc2g7CivksKEgPiBhXC1maWVyY2VcLWdob3N0Owor5K+bID4gdGhlXC1rbmVlXC1ib25lczsKK+SuuSA+IGFuXC1hbmdyeVwtaG9yc2U7Civkrq4gPiBhXC1raW5kXC1vZlwtbXVsZTsKK+StuyA+IGFcLXN3aWZ0eVwtaG9yc2U7CivkrbMgPiBhXC1raW5kXC1vZlwtaGVyYjsKK+StsiA+IHN3ZWV0XC1zbWVsbGluZzsKK+StrSA+IHRoZVwtZWxkZXN0XC1zb247CivkrakgPiB0b1wtZmVlZFwtYVwtYmFieTsKK+StpyA+IHRvXC1mZWVkXC1hXC1iYWJ5Owor5K2BID4gc3RpbmtpbmdcLXNtZWxsOwor5Ky6ID4gc2FtZVwtYXNcLXVcKzRiNTA7CivkrJggPiB0aGVcLXdpbmRcLWJsb3dzOwor5KySID4gdG9cLWJsb3dcLWNoaWxseTsKK+SsjCA+IHRoZVwtd2luZFwtYmxvd3M7Civkq6sgPiBodW1hblwtc2tlbGV0b247CivkqrwgPiB0aGVcLWNoZWVrXC1ib25lOwor5KqIID4gYVwtbGVhdGhlclwtYmVsdDsKK+SpkCA+IHRpZVwtaXRcLXRpZ2h0bHk7CivkqKsgPiBkcml6emxpbmdcLXJhaW47CivkqKUgPiBhXC1wb3VyaW5nXC1yYWluOwor5KicID4gYVwtcG91cmluZ1wtcmFpbjsKK+SnviA+IGFcLWtpbmRcLW9mXC1iaXJkOwor5Ke3ID4gYVwta2luZFwtb2ZcLWJpcmQ7Civkp6cgPiBoaWdoXC1tb3VudGFpbnM7CivkprogPiBuYW1lXC1vZlwtYVwtaGlsbDsKK+SmpCA+IHNlZWRcLW9mXC1ncmFpbnM7CivkppEgPiB3aXRob3V0XC1hXC1kb29yOwor5KaPID4gd2luZ1wtb2ZcLWFcLWRvb3I7CivkpaIgPiBzb3VuZFwtb2ZcLWRydW1zOwor5KSWID4gYVwta2luZFwtb2ZcLXdpbmU7Civko6UgPiBhXC1raW5kXC1vZlwtd2luZTsKK+SjjiA+IG5hbWVcLW9mXC1jb3VudHk7CivkoqggPiB0b1wtd2Fsa1wtc2xvd2x5Owor5KG+ID4gaGlnaFwtY2FydGxvYWRzOwor5KGyID4gcmltXC1vZlwtYVwtd2hlZWw7CivkoZcgPiByaW1cLW9mXC1hXC13aGVlbDsKK+ShiSA+IGFcLWtpbmRcLW9mXC1jYXJ0Owor5J+TID4gdG9cLXdhbGtcLXNsb3dseTsKK+SduCA+IGFcLWtpbmRcLW9mXC10b29sOwor5Jy9ID4gYVwta2luZFwtb2ZcLWJlYW47CivknLwgPiBhXC1raW5kXC1vZlwtYmVhbjsKK+ScnCA+IHdvcmRzXC1vZlwtYW5nZXI7Civkm6AgPiB1bmFibGVcLXRvXC10YWxrOwor5JqWID4gbW91bnRhaW5cLWRlaXR5Owor5JqEID4gdG9cLW1ha2VcLWZ1blwtb2Y7CivkmbMgPiBzcGl0aW5nXC1mbGFtZXM7CivkmaYgPiB1cHBlclwtZ2FybWVudHM7CivkmKIgPiBvbGRcLWFuZFwtc2hhYmJ5Owor5JiDID4gYVwta2luZFwtb2ZcLWNyYWI7Civkl7cgPiBhXC1raW5kXC1vZlwtd2FzcDsKK+SXqiA+IGFcLWtpbmRcLW9mXC13b3JtOwor5JecID4gYVwtbW9sZVwtY3JpY2tldDsKK+SXmiA+IGVnZ3NcLW9mXC1tYW50aXM7Civkl5IgPiBhXC1raW5kXC1vZlwtY2xhbTsKK+SXgCA+IGFcLWtpbmRcLW9mXC1jbGFtOwor5JawID4gYVwta2luZFwtb2ZcLWduYXQ7CivkloYgPiBtZWRpY2luYWxcLWhlcmI7CivklZogPiBhXC1zdHJhd1wtYmFza2V0Owor5JSVID4gY2hpY2tlblwtYnJlYXN0Owor5JSLID4gYVwta2luZFwtb2ZcLXRyZWU7CivklIYgPiBhXC1raW5kXC1vZlwtYmVhbjsKK+SUgiA+IHZlZ2V0YWJsZVwtc291cDsKK+SToSA+IGFcLW1lZGljYWxcLWhlcmI7CivkkrsgPiBhXC1tZWRpY2FsXC1oZXJiOwor5JKyID4gYVwtbWVkaWNhbFwtaGVyYjsKK+SSkyA+IHRvXC1kb1wtdmlvbGVuY2U7CivkkocgPiBuYW1lXC1vZlwtYVwtc2hpcDsKK+SShiA+IG5hbWVcLW9mXC1hXC1zaGlwOwor5JKFID4gYmVhdXRpZnVsXC1leWVzOwor5JG2ID4gc3ByaWdodGx5XC1ib2F0Owor5JGrID4gdG9vbHNcLWZvclwtYm9hdDsKK+SRoyA+IGFcLXNhaWxpbmdcLWJvYXQ7CivkkZwgPiB0b1wtZWF0XC1oZWF2aWx5Owor5JCVID4gb2lsXC1hbmRcLWdyZWFzZTsKK+SQjSA+IGV4Y2VsbGVudFwtZm9vZDsKK+SNoSA+IHNtYWxsXC1maXNoXC1uZXQ7CivkjZEgPiBhXC1uZXRcLW9yXC1zbmFyZTsKK+SNkCA+IGFcLW5ldFwtb3JcLXNuYXJlOwor5I2NID4gdW5idXJudFwtYnJpY2tzOwor5Iy1ID4gbGFwZWxcLWFuZFwtYmVsdDsKK+SMsCA+IGNvbm5lY3RlZFwtc2lsazsKK+SMpSA+IHRvXC1zZXdcLWNsb3RoZXM7CivkjKEgPiB0b1wtd2luZFwtYXJvdW5kOwor5Iu9ID4gaGVtcGVuXC1zYW5kYWxzOwor5IuvID4gY3J1Y2lhbFwtcG9pbnRzOwor5IuiID4gdG9cLXR3aXN0XC1yb3BlczsKK+SLnCA+IGNydWNpYWxcLXBvaW50czsKK+SKvCA+IG1lYXN1cmluZ1wtdW5pdDsKK+SKqCA+IHN0b3JpbmdcLWdyYWluczsKK+SItyA+IGFcLWJhbWJvb1wtZmVuY2U7CivkiJogPiBhXC1iYW1ib29cLXNob290Owor5IerID4gYmFtYm9vXC1zcGxpbnRzOwor5IeFID4gdG9cLXN0YW5kXC1zdGlsbDsKK+SFpSA+IHJpcGVuaW5nXC1jcm9wczsKK+SFliA+IHN3ZWV0XC1zbWVsbGluZzsKK+SDuSA+IGphZGVcLWFuZFwtc3RvbmU7Civkg7ggPiBlbGVjdHJpY1wtbGlnaHQ7Civkg7EgPiBlbGVjdHJpY1wtbGlnaHQ7Civkg6EgPiBhXC1zbWFsbFwtcGViYmxlOwor5IOPID4gYVwta2luZFwtb2ZcLXJvY2s7Civkg4wgPiByb2NreVwtbW91bnRhaW47CivkgpsgPiBhXC1raW5kXC1vZlwtcm9jazsKK+SCjCA+IGFcLXNob3J0XC13ZWFwb247CivkgaQgPiBtb2lzdGVuZWRcLWV5ZXM7CivkgY8gPiBmYXJzaWdodGVkbmVzczsKK+SAuiA+IHNxdWludGluZ1wtZXllczsKK+SApSA+IGJlYXV0aWZ1bFwtZXllczsKK+O9piA+IHJlY2xhaW1lZFwtbGFuZDsKK+O9pSA+IGZlcnRpbGVcLWZpZWxkczsKK+O9iyA+IGFcLWtpbmRcLW9mXC10aWxlOwor472EID4gYW5cLWVhcnRoZW5cLWphcjsKK+O7vyA+IGFcLWtpbmRcLW9mXC1qYWRlOwor47u6ID4gYVwta2luZFwtb2ZcLWphZGU7Civju7UgPiBhXC1raW5kXC1vZlwtamFkZTsKK+O7ryA+IGFcLWtpbmRcLW9mXC1qYWRlOwor47usID4gYVwta2luZFwtb2ZcLWphZGU7Civju6cgPiBhXC1raW5kXC1vZlwtamFkZTsKK+O7nyA+IGFcLWtpbmRcLW9mXC1qYWRlOwor47udID4gYVwta2luZFwtb2ZcLWphZGU7Civju5YgPiBhXC1raW5kXC1vZlwtamFkZTsKK+O7lSA+IGFcLWtpbmRcLW9mXC1qYWRlOwor47uUID4gYVwta2luZFwtb2ZcLWphZGU7Civju5EgPiBhXC1raW5kXC1vZlwtamFkZTsKK+O7iyA+IGFcLWtpbmRcLW9mXC1qYWRlOwor47uCID4gYVwta2luZFwtb2ZcLWphZGU7CivjurkgPiBhXC1raW5kXC1vZlwtamFkZTsKK+O6uCA+IGFcLWtpbmRcLW9mXC1qYWRlOwor47q3ID4gYVwta2luZFwtb2ZcLWphZGU7CivjurEgPiBhXC1raW5kXC1vZlwtamFkZTsKK+O6sCA+IGFcLWtpbmRcLW9mXC1qYWRlOwor47qtID4gYVwta2luZFwtb2ZcLWphZGU7CivjuqsgPiBhXC1raW5kXC1vZlwtamFkZTsKK+O4qyA+IGNhc3RyYXRlZFwtYnVsbDsKK+O4pCA+IGJyb2tlblwtbGVhdGhlcjsKK+O4iiA+IGZpZXJjZVwtb2ZcLWZpcmU7CivjtqAgPiB3YXRlclwtY3VycmVudHM7Civjtp4gPiB3YXRlclwtY3VycmVudHM7CivjtaUgPiB3YXRlclwtY3VycmVudHM7CivjtZggPiBncmVhdFwtY3VycmVudHM7CivjtLggPiBzd2lmdFwtY3VycmVudHM7CivjtJkgPiB3YXRlclwtZHJpcHBpbmc7Civjs4MgPiB0b1wtdGVtcGVyXC1pcm9uOwor47KPID4gZmx5aW5nXC1mZWF0aGVyOwor47GnID4gc3RpbmtpbmdcLXNtZWxsOwor47GPID4gdGhlXC1yaWdodFwtc2lkZTsKK+OwmiA+IGFcLWJhbWJvb1wtZmVuY2U7CivjsJggPiBhXC1raW5kXC1vZlwtdHJlZTsKK+OwiiA+IGFcLWtpbmRcLW9mXC10cmVlOwor47CCID4gYVwta2luZFwtb2ZcLXRyZWU7CivjsIAgPiBhXC1raW5kXC1vZlwtdHJlZTsKK+OvniA+IGFcLWtpbmRcLW9mXC10cmVlOwor46+aID4gYVwta2luZFwtb2ZcLXRyZWU7Civjr5cgPiBhXC1raW5kXC1vZlwtdHJlZTsKK+OuiyA+IGFcLWtpbmRcLW9mXC10cmVlOwor466FID4gYVwta2luZFwtb2ZcLXRyZWU7CivjrbsgPiB0aGVcLWNyYWJcLWFwcGxlOwor462tID4gYVwta2luZFwtb2ZcLXRyZWU7CivjrZwgPiBhXC1raW5kXC1vZlwtdHJlZTsKK+OtmiA+IGFcLWtpbmRcLW9mXC10cmVlOwor462UID4gYVwta2luZFwtb2ZcLXRyZWU7CivjrZEgPiBhXC1raW5kXC1vZlwtdHJlZTsKK+OtjyA+IGFcLWtpbmRcLW9mXC13b29kOwor462HID4gYVwta2luZFwtb2ZcLXRyZWU7CivjrYQgPiBhXC1raW5nXC1vZlwtdHJlZTsKK+OtgSA+IGFcLWtpbmRcLW9mXC10cmVlOwor46yLID4gbmFtZVwtb2ZcLWFcLXN0YXI7Civjq48gPiBhXC1raW5kXC1vZlwtZmxhZzsKK+OrgiA+IHRvXC1jaG9wXC1vclwtY3V0Owor46qHID4gdG9cLWRpc3NlbWluYXRlOwor46iHID4gdG9cLXN3ZWVwXC1jbGVhbjsKK++nryA+IGx1c3Rlclwtb2ZcLWphZGU7Civvpq4gPiBsdXN0cmVcLW9mXC1nZW1zOwor76arID4gbW91bnRhaW5cLXJpZGdlOwor46aNID4gdG9cLWJlXC1zdGFydGxlZDsKK+OluiA+IHRvXC1ibG93XC1hXC1maXJlOwor76WYID4gd2F0ZXJcLWNoZXN0bnV0Owor46WJID4gYVwtbGl0dGxlXC1hbmdyeTsKK+OlhyA+IHRvXC1iZVwtcGVydmVyc2U7CivjpL4gPiBub3RcLWRvaW5nXC13ZWxsOwor46SWID4gdG9cLWhhdmVcLXdpc2RvbTsKK+OjpiA+IGFcLXdpbmRpbmdcLXBhdGg7Civjop8gPiB0b1wtd2Fsa1wtc2xvd2x5Owor46GcID4gcmFnZ2VkXC1jbG90aGVzOwor46CoID4gbWlzdHlcLW1vdW50YWluOwor46ChID4gaGlnaFwtYW5kXC1sb2Z0eTsKK+OgmiA+IGhpZ2hcLWFuZFwtbG9mdHk7Civjn78gPiBoaWdoXC1hbmRcLXN0ZWVwOwor45+bID4gaGlnaFwtYW5kXC1zdGVlcDsKK+OeqSA+IG1vdW50YWluXC12YXBvcjsKK+OenCA+IGhlbXBlblwtc2FuZGFsczsKK+OelyA+IHRoZVwtbWFsZVwtb3JnYW47CivjnowgPiB0b1wtYmVcLXByZWduYW50Owor456KID4gdW5hYmxlXC10b1wtd2FsazsKK+OdsCA+IHVuYWJsZVwtdG9cLW1lZXQ7CivjnZsgPiBhaGFsdGluZ1wtcGxhY2U7CivjnKQgPiBmb29saW5nXC1hcm91bmQ7CivjnJEgPiBhblwtb2xkZXJcLXdvbWFuOwor45upID4gc2lzdGVyc1wtaW5cLWxhdzsKK+ObgiA+IHdlYWtcLWFuZFwtc21hbGw7CivjmrogPiB0b1wtYmVcLXByZWduYW50Owor45qyID4gc21hbGxcLWFuZFwtd2VhazsKK+OagyA+IHRvXC10YWtlXC1hXC1oaW50Owor45m3ID4gbG93XC1seWluZ1wtYXJlYTsKK+OXiiA+IHB1YmxpY1wtb3BpbmlvbjsKK+OWviA+IHRvXC1iZWF0XC1hXC1kcnVtOwor45aiID4gdG9cLXJlamVjdFwtZm9vZDsKK+OVrCA+IHB1YmxpY1wtb3BpbmlvbjsKK+OVpCA+IGFcLXByb3VkXC10ZW1wZXI7CivjlJkgPiBncmVhdFwtc3RyZW5ndGg7CivjlIEgPiBhXC1raW5kXC1vZlwtdG9vbDsKK+OSmyA+IHRvXC1zdGFuZFwtYWxvbmU7CivjkoAgPiBkb1wtbm90XC1mZWFyXC10bzsKK+e7jyA+IGNsYXNzaWNcLXdvcmtzOwor5byfID4geW91bmdcLWJyb3RoZXI7Civlu7sgPiBjaXJjbGVcLWFyb3VuZDsKK+WFsyA+IGZyb250aWVyXC1wYXNzOwor5bidID4gc3VwcmVtZVwtcnVsZXI7CivnlaogPiB0b1wtdGFrZVwtdHVybnM7CivnlaUgPiBhcHByb3hpbWF0ZWx5Owor5YWxID4gdG9nZXRoZXJcLXdpdGg7CivkuYkgPiByaWdodFwtY29uZHVjdDsKK+WrgiA+IHNpc3RlclwtaW5cLWxhdzsKK+WTpSA+IGVsZGVyXC1icm90aGVyOwor5ammID4gbWFycmllZFwtd29tZW47CivoqKMgPiB0YWtlXC1sZWF2ZVwtb2Y7Civml48gPiBhXC1mYW1pbHlcLWNsYW47CivlpaogPiB0YWtlXC1ieVwtZm9yY2U7CivlhYQgPiBlbGRlclwtYnJvdGhlcjsKK+eslCA+IHdyaXRpbmdcLWJydXNoOwor6KK3ID4gbGluZWRcLWdhcm1lbnQ7CivngKwgPiBzd2lmdFwtY3VycmVudDsKK+WmhyA+IG1hcnJpZWRcLXdvbWVuOwor5LyvID4gb2xkZXJcLWJyb3RoZXI7CivmvLIgPiByaXNlXC1pblwtcHJpY2U7CivnpLwgPiBzb2NpYWxcLWN1c3RvbTsKK+WYqSA+IHJ1c2hpbmdcLXNvdW5kOwor5ZWjID4gaG9sZFwtaW5cLW1vdXRoOwor5rOKID4gYW5jaG9yXC12ZXNzZWw7Civmsr8gPiBmb2xsb3dcLWNvdXJzZTsKK+WShCA+IG5vaXNlXC1vZlwtcmFnZTsKK+WQqyA+IGhvbGRcLWluXC1tb3V0aDsKK+WkuiA+IHRha2VcLWJ5XC1mb3JjZTsKK+iPiiA+IGNocnlzYW50aGVtdW07CivlsrMgPiBtb3VudGFpblwtcGVhazsKK+WMuSA+IGJvbHRcLW9mXC1jbG90aDsKK+mihyA+IGxlYW5cLW9uZVwtc2lkZTsKK+WKqyA+IHRha2VcLWJ5XC1mb3JjZTsKK+aZqCA+IGVhcmx5XC1tb3JuaW5nOwor5pKeID4ga25vY2tcLWFnYWluc3Q7CivmhIggPiBtb3JlXC1hbmRcLW1vcmU7Civmp4cgPiB0aXBcLW9mXC1hXC10cmVlOwor6aeFID4gcmVsYXlcLXN0YXRpb247CivppYUgPiBzdGVhbWVkXC1icmVhZDsKK+eCuCA+IHRvXC1mcnlcLWluXC1vaWw7CivohIggPiBibG9vZFwtdmVzc2VsczsKK+e7qiA+IGVuZFwtb2ZcLXRocmVhZDsKK+mjvCA+IHJhaXNlXC1hbmltYWxzOwor5qKTID4gY2F0YWxwYVwtb3ZhdGE7CivogowgPiBtdXNjbGVcLXRpc3N1ZTsKK+S9qSA+IGJlbHRcLW9ybmFtZW50Owor572yID4gcHVibGljXC1vZmZpY2U7CivmkK0gPiBqb2luXC10b2dldGhlcjsKK+mglyA+IGxlYW5cLW9uZVwtc2lkZTsKK+aglyA+IGNoZXN0bnV0XC10cmVlOwor5qGRID4gbXVsYmVycnlcLXRyZWU7CivohIkgPiBibG9vZFwtdmVzc2VsczsKK+e+qSA+IHJpZ2h0XC1jb25kdWN0Owor6Z6EID4gdG9cLXdvcmtcLWhpZGVzOwor5p2TID4gaGFuZGxlXC1vZlwtY3VwOwor5L2DID4gdGVuYW50XC1mYXJtZXI7CivmmIYgPiBlbGRlclwtYnJvdGhlcjsKK+i0oSA+IG9mZmVyXC10cmlidXRlOwor5ou8ID4gam9pblwtdG9nZXRoZXI7Civmm4cgPiBiZWNvbWVcLWNsb3VkeTsKK+S6mSA+IGV4dGVuZFwtYWNyb3NzOwor5LqYID4gZXh0ZW5kXC1hY3Jvc3M7Civor54gPiBiZWFyXC1jaGlsZHJlbjsKK+aZtCA+IGNsZWFyXC13ZWF0aGVyOwor5raoID4gcmlzZVwtaW5cLXByaWNlOwor6ZecID4gZnJvbnRpZXJcLXBhc3M7Civnt5IgPiBlbmRcLW9mXC10aHJlYWQ7CivplqIgPiBmcm9udGllclwtcGFzczsKK+WhkSA+IG1vZGVsXC1pblwtY2xheTsKK+e2kyA+IGNsYXNzaWNcLXdvcmtzOwor57WMID4gY2xhc3NpY1wtd29ya3M7CivmtaYgPiBiYW5rXC1vZlwtcml2ZXI7Civnv7AgPiB3cml0aW5nXC1icnVzaDsKK+exlCA+IGJhbWJvb1wtYmFza2V0Owor6L6wID4gZWFybHlcLW1vcm5pbmc7CivmhY4gPiBhY3RcLXdpdGhcLWNhcmU7CivojokgPiB3aGl0ZVwtamFzbWluZTsKK+aNlyA+IG1ha2VcLXByb2dyZXNzOwor562GID4gd3JpdGluZ1wtYnJ1c2g7Civlk5cgPiBydXNoaW5nXC1zb3VuZDsKK+WhjCA+IGZhbGxcLWluXC1ydWluczsKK+erliA+IHBlcnBlbmRpY3VsYXI7Civnpq4gPiBzb2NpYWxcLWN1c3RvbTsKK+mZlSA+IG1vdW50YWluXC1wYXNzOwor5oOaID4gYWJzZW50XC1taW5kZWQ7Civor4AgPiB0YWtlXC1sZWF2ZVwtb2Y7Civmt4AgPiBzaGFsbG93XC13YXRlcjsKK+a3mCA+IHdhc2hcLWluXC1zaWV2ZTsKK+eRsCA+IGV4dHJhb3JkaW5hcnk7CivlnqsgPiBhZHZhbmNlXC1tb25leTsKK+eBtiA+IGtpdGNoZW5cLXJhbmdlOwor5q+TID4gZ2l2ZVwtYmlydGhcLXRvOwor5ZKnID4gc3RyZXRjaFwtbW91dGg7CivlpY4gPiBzdHJpZGVcLW9mXC1tYW47CivmtL0gPiB0b1wtYmxlbmRcLXdpdGg7CivnkbYgPiBwcmVjaW91c1wtamFkZTsKK+mSsCA+IHJhcmVcLXRyZWFzdXJlOwor55GbID4gbHVzdGVyXC1vZlwtZ2VtOwor6aaSID4gc3RlYW1lZFwtYnJlYWQ7CivppbIgPiByYWlzZVwtYW5pbWFsczsKK+auiSA+IGRpZVwtZm9yXC1jYXVzZTsKK+ihmSA+IHB1YmxpY1wtb2ZmaWNlOwor5ZSsID4gdG9cLWludGltaWRhdGU7CivnmKogPiBzaHJpdmVsbGVkXC11cDsKK+WUhiA+IG1ha2VcLW1pc2NoaWVmOwor5bKaID4gbW91bnRhaW5cLW1pc3Q7CivmoaYgPiB0eXBlXC1vZlwtYmlyY2g7Civmtp8gPiBmbG93aW5nXC13YXRlcjsKK+WUlCA+IGhvbGRcLWluXC1tb3V0aDsKK+mjlSA+IHNvdW5kXC1vZlwtd2luZDsKK+WdtyA+IGNsb2RcLW9mXC1lYXJ0aDsKK+mRqyA+IHVzZWRcLWluXC1uYW1lczsKK+esiyA+IGJhbWJvb1wtc2hvb3RzOwor6I2DID4gYXJvbWF0aWNcLWhlcmI7Civnr5MgPiBiYW1ib29cLWJhc2tldDsKK+mmhCA+IGR1bXBsaW5nXC1zb3VwOwor56m5ID4gaGlnaFwtYW5kXC12YXN0Owor5byIID4gY2hpbmVzZVwtY2hlc3M7Civogb8gPiB3cml0aW5nXC1icnVzaDsKK+mpriA+IGNhcnJ5XC1vblwtYmFjazsKK+euqSA+IGJhbWJvb1wtYmFza2V0Owor6IqlID4gbXVzdGFyZFwtcGxhbnQ7Civpqb8gPiByZWxheVwtc3RhdGlvbjsKK+eCnCA+IGJyaWxsaWFudFwtcmVkOwor5bKcID4gcm9ja1wtbW91bnRhaW47CivnuqsgPiB0aHJlYWRcLW5lZWRsZTsKK+ahgCA+IGNoaWNrZW5cLXJvb3N0Owor5ZmZID4gaG9sZFwtaW5cLW1vdXRoOwor56+dID4gYmFtYm9vXC1iYXNrZXQ7Civmi64gPiBsYWJvcmluZ1wtaGFyZDsKK+iMiSA+IHdoaXRlXC1qYXNtaW5lOwor57qlID4gaW5mZXJpb3JcLXNpbGs7CivmmJkgPiBiZWNvbWVcLWNsb3VkeTsKK+W/pCA+IGluc3Vib3JkaW5hdGU7CivpuL4gPiBmYWJ1bG91c1wtYmlyZDsKK+WYgSA+IHRvXC1iZVwtZ3JpZXZlZDsKK+i+jiA+IGFcLXN1cHBseVwtY2FydDsKK+iKqyA+IGRhcGhuZVwtZ2Vua3dhOwor5LynID4gdnVsZ2FyXC1wZXJzb247Civms6AgPiBuaWNlXC1hbmRcLWNvb2w7CivnuLsgPiBoYWx0ZXJcLWZvclwtb3g7CivouL0gPiB0b1wtd2Fsa1wtYWxvbmU7Civota0gPiByZWRkaXNoXC1icm93bjsKK+migCA+IHRhbGxcLWFuZFwtc2xpbTsKK+afmCA+IGFcLXRob3JueVwtdHJlZTsKK+iwlCA+IGhvbmVzdFwtc3BlZWNoOwor6aqTID4gcGllYmFsZFwtaG9yc2U7CivlsqsgPiBtb3VudGFpblwtcGVhazsKK+W0pyA+IGhpZ2hcLW1vdW50YWluOwor6YWaID4gY2FyYm9saWNcLWFjaWQ7CivlpKQgPiBkaXN0YW50XC1wbGFjZTsKK+aajCA+IGluXC1vcHBvc2l0aW9uOwor5r+RID4gc3dpZnRcLWN1cnJlbnQ7CivmgI0gPiB0b1wtYmVcLWFzaGFtZWQ7CivotL0gPiBnaWZ0XC1zdXBlcmlvcjsKK+avliA+IGd1YXJkXC1hZ2FpbnN0Owor6L+TID4gdG9cLWdvXC10b1wtbWVldDsKK+avtSA+IGxvbmdcLWZlYXRoZXJzOwor552aID4gY29ybmVyXC1vZlwtZXllOwor5q+9ID4gYVwtc2h1dHRsZWNvY2s7Civlg7MgPiBtaW5vcml0eVwtbmFtZTsKK+mqkCA+IHBpZWJhbGRcLWhvcnNlOwor6L6PID4gaHVic1wtb2ZcLXdoZWVsOwor5peGID4gZmxhZ1wtb3JuYW1lbnQ7CivojYcgPiBhXC13YXRlclwtcGxhbnQ7Civlja4gPiBtZWFzdXJpbmdcLWN1cDsKK+mroSA+IHRvXC1zaGVhclwtdHJlZTsKK+mznCA+IG1hbmRhcmluXC1maXNoOwor6byNID4gbGFyZ2VcLXJlcHRpbGU7CivnrKsgPiBwbGFua3NcLW9mXC1iZWQ7CivnvKEgPiBhXC1icmlkYWxcLXZlaWw7Civnu6ggPiBjb2Fyc2VcLXBvbmdlZTsKK+iKsCA+IHdhdGVyXC1jYWx0cm9wOwor6a2DID4gZHJvdWdodFwtZGVtb247CivoiLMgPiBzdGVyblwtb2ZcLXNoaXA7CivlsaYgPiBzdHJhd1wtc2FuZGFsczsKK+iTkCA+IHN0cmF3XC1iZWRcLW1hdDsKK+mKjiA+IGV5ZVwtb2ZcLWFuXC1heGU7CivphqMgPiBjYXJib2h5ZHJhdGVzOwor6JuRID4gYVwtbWFyaW5lXC1jcmFiOwor5qSgID4gd29vZGVuXC10YWJsZXQ7CivlqrggPiBhblwtdWdseVwtd29tYW47CivppocgPiBzdGlyXC1hbmRcLWNvb2s7CivnlJkgPiBzdWdhclwtcHJvZHVjdDsKK+iWpCA+IGFsbGl1bVwtYmFrZXJpOwor5aGlID4gZHJ5XC1jbGF5XC1sdW1wOwor6byJID4gbGFyZ2VcLXJlcHRpbGU7CivpuJ4gPiBmYWJ1bG91c1wtYmlyZDsKK+m1qSA+IG93bFwtbGlrZVwtYmlyZDsKK+mxliA+IG1hbmRhcmluXC1maXNoOwor6auDID4gc2hvdWxkZXJcLWJvbmU7CivpqqogPiBjcm9va2VkXC1ib25lczsKK+mpmyA+IHJlbGF5XC1zdGF0aW9uOwor6aiPID4gcGllYmFsZFwtaG9yc2U7CivpqIUgPiBwaWViYWxkXC1ob3JzZTsKK+mmsSA+IGNhcnJ5XC1vblwtYmFjazsKK+mmoyA+IGZyYWdyYW50XC1vZG9yOwor6aSnID4gc3RlYW1lZFwtYnJlYWQ7CivppJsgPiBkdW1wbGluZ1wtc291cDsKK+mkmiA+IHByZXBhcmVkXC1tZWF0Owor6aK8ID4gc291bmRcLW9mXC13aW5kOwor6aCOID4gdGFsbFwtYW5kXC1zbGltOwor6Z6uID4gbGVhdGhlclwtc2hvZXM7CivpnJ0gPiBkcm9wc1wtb2ZcLXJhaW47CivpmZ0gPiBtb3VudGFpblwtcGFzczsKK+mTliA+IHBlcnNvbicnc1wtbmFtZTsKK+mMoSA+IGFcLWtpbmRcLW9mXC1wZW47Civpi64gPiBwZXJzb24nJ3NcLW5hbWU7CivpiLogPiByYXJlXC10cmVhc3VyZTsKK+mIhCA+IGFcLXdpbmVcLWZsYWdvbjsKK+mHrSA+IHRpcmVcLW9mXC13aGVlbDsKK+mGqCA+IGRyZWdzXC1vZlwtd2luZTsKK+i+oSA+IHJlY3JpbWluYXRpb247CivovY8gPiBzbGVlcGluZ1wtY2FydDsKK+i8syA+IGh1YnNcLW9mXC13aGVlbDsKK+i8nCA+IGFcLXN1cHBseVwtY2FydDsKK+i3riA+IGhhc3R5XC13YWxraW5nOwor6LSJID4gZWFybmVzdFwtbW9uZXk7CivotIQgPiBnaWZ0XC1zdXBlcmlvcjsKK+izriA+IGZhcmV3ZWxsXC1naWZ0Owor6LKiID4gb2ZmZXJcLXRyaWJ1dGU7Civoro0gPiBob25lc3RcLXNwZWVjaDsKK+iuhiA+IHRvXC1leGFnZ2VyYXRlOwor6KyNID4gaHVtbWluZ1wtc291bmQ7Civoq6QgPiBob25lc3RcLXNwZWVjaDsKK+irlSA+IHRvXC1pbnRpbWlkYXRlOwor6Ka2ID4gdG9cLWxvb2tcLWFib3V0Owor6KaUID4gdG9cLXNlYXJjaFwtZm9yOwor6KWaID4gZ3JhdmVcLWNsb3RoZXM7Civoo4wgPiBsaW5lZFwtZ2FybWVudDsKK+ihhyA+IGJsb29kXC12ZXNzZWxzOwor6KC1ID4gbGFyZ2VcLXR1cnRsZXM7Civonr4gPiB0aGVcLWVhcnRod29ybTsKK+iepSA+IHRoZVwtaG91c2VcLWZseTsKK+iemSA+IGdydWJzXC1pblwtd29vZDsKK+ibhSA+IGFcLWNhdGVycGlsbGFyOwor6JqgID4gcGVyc29uJydzXC1uYW1lOwor6JivID4gdG9cLXRvc3NcLWFib3V0Owor6JSOID4gdGhlYVwtc2luZW5zaXM7Civok6cgPiBiYW1ib29cLWJhc2tldDsKK+iRvSA+IHR5cGVcLW9mXC1ncmFpbjsKK+iPvCA+IHJ1c2hcLW9yXC1zZWRnZTsKK+iPuiA+IGFsdGhhZWFcLXJvc2VhOwor6I+RID4gdG9cLXdlZWRcLWdyYXNzOwor6I6nID4gZWRpYmxlXC1ncmVlbnM7CivojYggPiB0aGVhXC1zaW5lbnNpczsKK+iMpSA+IHJ1YnVzXC10b2trdXJhOwor6IuYID4gaW5kaWFuXC1tYWxsb3c7CivohKUgPiBwZWx2aWNcLWNhdml0eTsKK+iDsiA+IGh5ZHJveHlsYW1pbmU7CivnvbMgPiB3b29kZW5cLXNjcmVlbjsKK+e8hyA+IHJlZGRpc2hcLWNvbG9yOwor57itID4gYVwtYnJpZGFsXC12ZWlsOwor57e5ID4gcmVkZGlzaFwtY29sb3I7Civnt5YgPiBlbmRcLW9mXC10aHJlYWQ7CivntoggPiBjb2Fyc2VcLXBvbmdlZTsKK+e0iSA+IHRocmVhZFwtbmVlZGxlOwor57SHID4gaW5mZXJpb3JcLXNpbGs7Civns60gPiByaWNlXC1kdW1wbGluZzsKK+exviA+IHVuaHVsbGVkXC1yaWNlOwor57GuID4gYmFtYm9vXC1iYXNrZXQ7CivnsZwgPiBiYW1ib29cLXNoZWF0aDsKK+ewjSA+IGJhbWJvb1wtYmFza2V0Owor566oID4gYmFtYm9vXC1zaGVhdGg7CivnrLUgPiBhXC1iYW1ib29cLWZvcm07CivnrK0gPiBiYW1ib29cLXNjcmVlbjsKK+erqiA+IHBlcnBlbmRpY3VsYXI7CivnoJ4gPiB0b1wtc21hc2hcLXJvY2s7Civnn54gPiBib3JlXC13aXRoXC1hd2w7Civnm6ogPiB0b1wtdG9zc1wtYWJvdXQ7CivnmZ8gPiBzaHJpdmVsbGVkXC11cDsKK+eVpyA+IGFwcHJveGltYXRlbHk7Civnk4wgPiBleHRyYW9yZGluYXJ5Owor55KfID4gbHVzdGVyXC1vZlwtZ2VtOwor55KCID4gamFkZVwtb3JuYW1lbnQ7CivnkbMgPiBsdXN0ZXJcLW9mXC1nZW07CivnkaQgPiBwcmVjaW91c1wtamFkZTsKK+eQlSA+IHR5cGVcLW9mXC1wZWFybDsKK+ePriA+IGphZGVcLW9ybmFtZW50Owor542ZID4gZGllXC12aW9sZW50bHk7CivniYEgPiBtb29yaW5nXC1zdGFrZTsKK+eGsCA+IGdyZWF0XC1kcm91Z2h0Owor54WSID4gYnJpbGxpYW50XC1yZWQ7CivngKggPiBzd2lmdFwtY3VycmVudDsKK+a8oyA+IGZsb3dpbmdcLXdhdGVyOwor5rWsID4gbmF1dGljYWxcLW1pbGU7CivmtIogPiBmbG93aW5nXC13YXRlcjsKK+avvyA+IGxvbmdcLWZlYXRoZXJzOwor5qy1ID4gdG9cLXRyZWF0XC13ZWxsOwor5qyTID4gYVwtY3Jvc3NcLXBpZWNlOwor5quMID4gYVwta2luZFwtb2ZcLWhvZTsKK+aqriA+IGJsb2NrXC1vZlwtd29vZDsKK+aouiA+IHR5cGVcLW9mXC1iaXJjaDsKK+anpyA+IHdvb2RlblwtdGFibGV0Owor5qaMID4gd29vZGVuXC1sYWRkZXI7CivmpZkgPiBuYW1lXC1vZlwtcGxhbnQ7CivmpJsgPiB0eXBlXC1vZlwtYmlyY2g7CivmorwgPiBibG9ja1wtb2ZcLXdvb2Q7CivmorkgPiB0aGVcLWFyZWNhXC1udXQ7Civmoo4gPiBzaWNrbGVcLWhhbmRsZTsKK+agsCA+IGFcLWJhbWJvb1wtcmFmdDsKK+adriA+IHdvb2RcLXNoYXZpbmdzOwor5pypID4ga3d1a3llbFw6XC1yYW5rOwor5pCiID4gdG9cLXN0aWNrXC1pbnRvOwor5o6tID4gdG9cLW1hbmlwdWxhdGU7CivmjLYgPiBob2xkXC1pblwtaGFuZHM7Civmi5UgPiB0b1wtZHJhZ1wtYWZ0ZXI7CivmioMgPiB0b1wtY2xhcFwtaGFuZHM7CivmiLogPiBzdG9uZVwtYm9hcmRlcjsKK+aIuSA+IGluXC1kaWZmaWN1bHR5Owor5oS8ID4gYWN0XC13aXRoXC1jYXJlOwor5oSqID4gdG9cLWJlXC1ncmlldmVkOwor5oShID4gYWJzZW50XC1taW5kZWQ7CivmgL4gPiBtb3VudGFpblwtbmFtZTsKK+W9vSA+IGdvXC10b1wtYW5kXC1mcm87CivlvbIgPiB5ZWxsb3dcLWRyYWdvbjsKK+W9lCA+IHRvXC1jYXJ2ZVwtd29vZDsKK+W3tSA+IG1lYXN1cmluZ1wtY3VwOwor5bewID4gYW5cLWF0b21cLWdyb3VwOwor5bevID4gYW5cLWF0b21cLWdyb3VwOwor5beqID4gcGVyc29uJydzXC1uYW1lOwor5ba9ID4gbW91bnRhaW5cLXBlYWs7CivltZAgPiBtb3VudGFpblwtbWlzdDsKK+W0jCA+IG1vdW50YWluXC1uYW1lOwor5bOgID4gbW91bnRhaW5cLXBhc3M7Civls4IgPiBuYW1lXC1vZlwtcGxhY2U7Civls4AgPiBtb3VudGFpblwtcGVhazsKK+WyviA+IG1vdW50YWluXC1wYXNzOwor5bGpID4gc3RyYXdcLXNhbmRhbHM7CivlsaggPiBzdHJhd1wtc2FuZGFsczsKK+WvgCA+IGZldWRhbFwtZXN0YXRlOwor5aqiID4gYmVcLWplYWxvdXNcLW9mOwor5aKKID4gYWR2YW5jZVwtbW9uZXk7CivloZAgPiBtb2RlbFwtaW5cLWNsYXk7CivloLogPiBwZXJzb24nJ3NcLW5hbWU7CivlnrsgPiBhblwtZW1iYW5rbWVudDsKK+WamiA+IGFyZ3VtZW50YXRpdmU7CivlkqEgPiBzaWRlXC1vZlwtbW91dGg7Civlh58gPiB0b1wtYmVcLXJ1ZGVcLXRvOwor5YS5ID4gdG9cLWFjY3VtdWxhdGU7CivlhLIgPiB0b1wtc2F2ZVwtbW9uZXk7CivlhJsgPiB0b1wtc2tpcFwtYWJvdXQ7CivlgpYgPiB2dWxnYXJcLXBlcnNvbjsKK+WCkiA+IHBlcnNvbmFsXC1uYW1lOwor5YGKID4gdG9cLXdhbGtcLWFsb25lOwor5L6CID4gdG9cLWNvbW1pc3Npb247CivkuaggPiB0aGVcLWJlZ2lubmluZzsKK+S2miA+IGRlY2F5ZWRcLXRvb3RoOwor5LaIID4gYVwta2luZFwtb2ZcLXJhdDsKK+S2gyA+IGFcLWtpbmRcLW9mXC1yYXQ7Civktb8gPiBhXC1zaWxlbnRcLWRydW07CivktYEgPiBkZWNheWVkXC1kb3VnaDsKK+S0sCA+IGFcLWZhbWlseVwtbmFtZTsKK+SyuiA+IGJpcmRzXC1zaW5naW5nOwor5LKFID4gdGhlXC1nbG9iZWZpc2g7CivksbggPiBhXC1mYW1pbHlcLW5hbWU7CivksaYgPiB0aGVcLWdsb2JlZmlzaDsKK+SxoSA+IHRoZVwtZ2xvYmVmaXNoOwor5LC9ID4gdGhlXC1nbG9iZWZpc2g7CivksLsgPiB0b1wtY2F0Y2hcLWZpc2g7CivksLEgPiBuYW1lXC1vZlwtYVwtZ29kOwor5K+FID4gYVwtc3dpZnRcLWhvcnNlOwor5K+AID4gYVwtc3dpZnRcLWhvcnNlOwor5K6IID4gdG9cLWdvXC1zd2lmdGx5Owor5K2/ID4gYVwtc3dpZnRcLWhvcnNlOwor5K21ID4gYVwtc3dpZnRcLWhvcnNlOwor5KyfID4gc291bmRcLW9mXC13aW5kOwor5Ku/ID4gYVwtY29vbFwtYnJlZXplOwor5Ku0ID4gd2Vha1wtYW5kXC1kdWxsOwor5KuBID4gdGhlXC1maXJzdFwtc29uOwor5KqrID4gYW5jaWVudFwtbXVzaWM7CivkqqcgPiBhbmNpZW50XC1tdXNpYzsKK+SqkiA+IGxlYXRoZXJcLXBhbnRzOwor5Km+ID4gaGVyYlwtbWVkaWNpbmU7CivkqaQgPiB0b1wtbGVhZFwtYW5cLW94Owor5KmjID4gc2hvZVwtY3VzaGlvbnM7CivkqZ4gPiBhXC1zYWRkbGVcLWZsYXA7CivkqI4gPiBkZWVwXC1hbmRcLWRhcms7Civkp5wgPiBhblwtZW1iYW5rbWVudDsKK+SnliA+IGFcLXNtYWxsXC1tb3VuZDsKK+SmtCA+IG9wZW5cLXRoZVwtZG9vcjsKK+SmsyA+IGJldHdlZW5cLXN0ZXBzOwor5KaxID4gb3BlblwtdGhlXC1kb29yOwor5KajID4gb3BlblwtdGhlXC1kb29yOwor5KahID4gYVwtZG9vclwta2VlcGVyOwor5KWpID4gaG9va3NcLXRvXC1oYW5nOwor5KWaID4gdGhlXC1iZWdpbm5pbmc7CivkpLUgPiBhXC10aW55XC1uZWVkbGU7CivkpJQgPiBkcmVnc1wtb2ZcLXdpbmU7CivkpI4gPiBzb3liZWFuXC1zYXVjZTsKK+SkgyA+IGRydW5rZW5cLXNvdW5kOwor5KOwID4gdG9cLXBvb2xcLW1vbmV5Owor5KKnID4gdG9cLWdvXC1mb3J3YXJkOwor5KKaID4gYVwtbmFycm93XC1wYXRoOwor5KKDID4gdG9cLWFkbWluaXN0ZXI7CivkoaUgPiBhXC1tb3ZpbmdcLWNhcnQ7CivkoYYgPiBhXC1tb3ZpbmdcLWNhcnQ7Civkn5ggPiB0b1wtc3RyYWlnaHRlbjsKK+SfiiA+IHNob3J0XC1zdHJpZGVzOwor5J6BID4gY29ycmVzcG9uZGluZzsKK+SdtiA+IHRvXC1sZXZ5XC10YXhlczsKK+SdrCA+IGFcLXdlYWx0aHlcLW1hbjsKK+SclSA+IHRvXC1leGFnZ2VyYXRlOwor5Ju+ID4gZmFtaWxpYXJcLXdpdGg7Civkm5AgPiBhblwtZXhwcmVzc2lvbjsKK+SalSA+IHRvXC1zZWFyY2hcLW91dDsKK+SZuSA+IHRvXC12b21pdFwtbWlsazsKK+SZpSA+IHNoaW55XC1kcmVzc2VzOwor5JmiID4gc2hvcnRcLXRcLXNoaXJ0Owor5JmgID4gc2hvcnRcLWNsb3RoZXM7CivkmZ8gPiBoZWF2eVwtY2xvdGhlczsKK+SZniA+IHdvb2xlblwtc3RyaW5nOwor5JmFID4gdGhlXC13YWlzdGxpbmU7Civkl5cgPiB0aGVcLW1pbGxpcGVkZTsKK+SXiyA+IGFcLW1hcmluZVwtY3JhYjsKK+SXgyA+IHRoZVwtbWlsbGlwZWRlOwor5JapID4gYVwta2luZFwtb2ZcLWJlZTsKK+SWkSA+IGFcLXdoaXRlXC10aWdlcjsKK+SWhyA+IGZyYWdyYW50XC1oZXJiOwor5JWlID4gaGVyYlwtbWVkaWNpbmU7CivklZYgPiBmcmFncmFudFwtaGVyYjsKK+SUniA+IHRoZVwtYmVnaW5uaW5nOwor5JScID4gaGVyYlwtbWVkaWNpbmU7CivklJogPiBoZXJiXC1tZWRpY2luZTsKK+SUliA+IHdhdGVyXC1jYWx0cm9wOwor5JSTID4gaGVyYlwtbWVkaWNpbmU7CivkkqUgPiBjb3JyZXNwb25kaW5nOwor5JKXID4gZnJhZ3JhbnRcLWhlcmI7Civkko4gPiB3aXRob3V0XC1jb2xvcjsKK+SSjSA+IHdpdGhvdXRcLWNvbG9yOwor5JGyID4gdG9cLXJvd1wtYVwtYm9hdDsKK+SRpSA+IGFcLW1vdmluZ1wtYm9hdDsKK+SQsiA+IGhhbGZcLXJhd1wtbWVhdDsKK+SQmSA+IHRoZVwtZGlhcGhyYWdtOwor5I+YID4gYVwtYmlnXC1hYmRvbWVuOwor5I+EID4gbm90XC10b1wtbGlzdGVuOwor5I29ID4gYVwtZmllcmNlXC1nb2F0Owor5I28ID4gc2FsdGVkXC1tdXR0b247CivkjaogPiBjYXN0cmF0ZWRcLXJhbTsKK+SNpCA+IHRvXC1zdHJhaW5cLW91dDsKK+SMoyA+IHRvXC1hY2N1bXVsYXRlOwor5IyZID4gaGFua1wtb2ZcLXJvcGVzOwor5IyFID4gYVwtdGhpY2tcLXJvcGVzOwor5IumID4gcmF2ZWxsZWRcLXNpbGs7Civki50gPiBhXC10aHJvYXRcLWJhbmQ7Civkir0gPiBhXC1maW5lXC10aHJlYWQ7CivkiqEgPiBzdGVhbWVkXC1icmVhZDsKK+SKlCA+IHBvbGlzaGVkXC1yaWNlOwor5IqEID4gcG9saXNoZWRcLXJpY2U7CivkibAgPiBiYW1ib29cLXNob290czsKK+SJqSA+IGFcLWJhbWJvb1wtd2FyZTsKK+SJqCA+IGJhbWJvb1wtam9pbnRzOwor5Ii+ID4gbW92ZVwtYVwtbGl0dGxlOwor5IizID4gYVwtd2luZG93XC1sZWFmOwor5IeLID4gbmFtZVwtb2ZcLWFcLWdvZDsKK+SGniA+IGRlZXBcLWFuZFwtZGFyazsKK+SGmiA+IHRvXC1nb1wtdGhyb3VnaDsKK+SGlyA+IGRlZXBcLWFuZFwtZGFyazsKK+SFmyA+IGh1c2tzXC1vZlwtcmljZTsKK+SElCA+IGFcLWZhbWlseVwtbmFtZTsKK+SEhyA+IGFcLWZhbWlseVwtbmFtZTsKK+SDuyA+IGFuXC1lbWJhbmttZW50Owor5IOzID4gZmFsbGluZ1wtc3RvbmU7CivkgrYgPiB0aGVcLWNydXN0YWNlYTsKK+SClyA+IHRvXC1iZVwtY2FyZWZ1bDsKK+SCjiA+IGFcLXNob3J0XC1zcGVhcjsKK+SCgSA+IGFuXC1hbmdyeVwtbG9vazsKK+SBmSA+IGVsb3F1ZW50XC1leWVzOwor5ICuID4gc2lnaHRcLWJsdXJyZWQ7CivkgK0gPiB3aXRoXC1iaWdcLWV5ZXM7CivkgKcgPiBzaWdodFwtYmx1cnJlZDsKK+SAnyA+IHNpZ2h0XC1ibHVycmVkOwor5ICWID4gdG9cLWxvb2tcLXVwXC10bzsKK+SAlSA+IGFuZ3J5XC1nbGFuY2VzOwor47+sID4gbmFzYWxcLWRpc2Vhc2U7Civjv5wgPiBzaHJpdmVsbGVkXC11cDsKK+O+vSA+IHN3ZWxsaW5nXC1mZWV0Owor472yID4gZ3JpcGluZ1wtY29saWM7CivjvbEgPiBncmlwaW5nXC1jb2xpYzsKK+O9hyA+IHVuYnVybnRcLXRpbGVzOwor47y1ID4gYVwtc21hbGxcLWJhc2luOwor47yfID4gYVwtdGlsZWRcLWhvdXNlOwor47yOID4gYVwtc21hbGxcLW1lbG9uOwor47u+ID4gamFkZVwtYXJ0aWNsZXM7CivjuqkgPiBqYWRlXC1hcnRpY2xlczsKK+O6iCA+IHRvXC1nb1wtaHVudGluZzsKK+O5uSA+IGFcLWtpbmRcLW9mXC1kb2c7CivjubUgPiBhXC1odW50aW5nXC1kb2c7CivjubMgPiBhXC1raW5kXC1vZlwtYXBlOwor47mjID4gYVwta2luZFwtb2ZcLWRvZzsKK+O4hCA+IGFcLXJhZ2luZ1wtZmlyZTsKK+O3viA+IGJsYXplXC1vZlwtZmlyZTsKK+O3uCA+IGJsYXplXC1vZlwtZmlyZTsKK+O3liA+IHRvXC1zaGluZVwtdXBvbjsKK+O3lSA+IGhlYXJpbmdcLXNvdW5kOwor47eSID4gdG9cLWNvb2tcLW1lYWxzOwor47aYID4gZnVsbFwtb2ZcLXdhdGVyOwor47WzID4gY3J5c3RhbFwtY2xlYXI7CivjtbEgPiBmbG93aW5nXC13YXRlcjsKK+O1oCA+IHRvXC1ndXNoXC1mb3J0aDsKK+O0vSA+IHdhdGVyXC1jdXJyZW50Owor47S1ID4gd2F0ZXJcLWN1cnJlbnQ7CivjtK8gPiB3YXRlclwtY3VycmVudDsKK+O0riA+IHdhdGVyXC1jdXJyZW50Owor47SrID4gZ3JlYXRcLWZsb3dpbmc7CivjtKggPiB3YXRlclwtY3VycmVudDsKK+O0piA+IHRvXC13YXNoXC1oYW5kczsKK+O0pSA+IGdyZWF0XC1iaWxsb3dzOwor47SSID4gd2F0ZXJcLWN1cnJlbnQ7CivjtJAgPiBncmVhdFwtY3VycmVudDsKK+O0giA+IGdyZWF0XC1iaWxsb3dzOwor47OpID4gZ3JlYXRcLWJpbGxvd3M7CivjspsgPiBoYWlyeVwtYW5pbWFsczsKK+OwuyA+IGFzc2VzXC1icmF5aW5nOwor47CzID4gYXNzZXNcLWJyYXlpbmc7CivjsI8gPiBhXC1iYW1ib29cLXBvbGU7CivjsIwgPiB0b1wtbW9ub3BvbGl6ZTsKK+OvvSA+IHRoZVwtYXJlY2FcLW51dDsKK+OtvyA+IG9ibGlxdWVcLWFuZ2xlOwor462TID4gYVwtcGlsbGFyXC1hcmNoOwor46ysID4gYVwtZmFtaWx5XC1uYW1lOwor46ylID4gdG9cLXN1blwtdG9cLWFpcjsKK+OshCA+IHdhcm1cLWFuZFwtZGFtcDsKK+OrnyA+IGRheVwtYWZ0ZXJcLWRheTsKK+OrmiA+IGVhcmx5XC1tb3JuaW5nOwor46mlID4gZGVsaWNhdGVcLWhhbmQ7CivvqKsgPiByYWlzZVwtYW5pbWFsczsKK+OoniA+IHRvXC1mZWVsXC1hYm91dDsKK++omCA+IHNvY2lhbFwtY3VzdG9tOwor76iSID4gY2xlYXJcLXdlYXRoZXI7Civjp7wgPiB0b1wtZGlzdHJpYnV0ZTsKK+OntyA+IHRvXC13aXBlXC10ZWFyczsKK++nmiA+IGNoZXN0bnV0XC10cmVlOwor46eYID4gdG9cLWFjY3VtdWxhdGU7CivvprYgPiBzb2NpYWxcLWN1c3RvbTsKK+OmqyA+IGxheFwtYW5kXC1jcnVkZTsKK++mkiA+IGZsb3dpbmdcLXdhdGVyOwor46aMID4ga2Vlblwtb3JcLXNoYXJwOwor46aGID4gdG9cLWV4YWdnZXJhdGU7CivjpbwgPiB0b1wtYmVcLW5lYXJcLXRvOwor76W2ID4gYXBwcm94aW1hdGVseTsKK++lsSA+IGVhcmx5XC1tb3JuaW5nOwor46WlID4gYWJzZW50XC1taW5kZWQ7CivjpLAgPiB0b1wtYmVcLWFzaGFtZWQ7CivvpKEgPiBtb3VudGFpblwtbWlzdDsKK++koCA+IGZhYnVsb3VzXC1iaXJkOwor46O/ID4gcGFpbmZ1bGx5XC1zYWQ7Civjo7EgPiBjb21tb25cLXBlb3BsZTsKK+OjpCA+IHRvXC10cmVhZFwtdXBvbjsKK+OjlCA+IHRvXC13YWxrXC1hbG9uZTsKK+OiuyA+IHRvXC1kcmF3XC1hXC1ib3c7CivjopYgPiBhXC1zdG9yZVwtaG91c2U7CivjobcgPiBhXC1mYW1pbHlcLW5hbWU7CivjoLogPiBhXC1maW5lXC10aHJlYWQ7CivjoLQgPiBhXC1waWxsb3dcLWNhc2U7CivjoJsgPiBuYW1lXC1hXC1jb3VudHk7Civjn7YgPiBtb3VudGFpblwtcGVhazsKK+OfsiA+IG1vdW50YWluXC1wZWFrOwor45+tID4gdGhlXC1taW5cLXJpdmVyOwor45+pID4gdGhlXC1taW5cLXJpdmVyOwor4562ID4gdGhlXC1taW5cLXJpdmVyOwor456sID4gY2xvc2VcLW9yXC1uZWFyOwor456LID4gc29mdFwtYW5kXC1tZWVrOwor4527ID4gYmFyZWx5XC1lbm91Z2g7CivjnaYgPiB0b1wtYWNjdW11bGF0ZTsKK+OdkyA+IGNvcnJlc3BvbmRpbmc7CivjnYMgPiB0b1wtYmVhclwtYVwtc29uOwor45uSID4gY2FuXC1ub3RcLXNwZWFrOwor45uOID4gYW5cLXVnbHlcLXdvbWFuOwor45q0ID4gYVwtcHJldHR5XC1naXJsOwor45ibID4gYVwtZGVlcFwtdmFsbGV5Owor45iTID4gcHJvbGl4XC1zcGVlY2g7CivjmIkgPiB0b1wtbWFrZVwtc291bmQ7Civjl7QgPiBkb2dzXC1maWdodGluZzsKK+OVsCA+IHNvdW5kXC1hbmdyaWx5Owor45WqID4gYmlyZHMnJ1wtY2hpcnBzOwor45WZID4gYVwtd2lseVwtcmFiYml0Owor45WJID4gdG9cLWRpZ1wtYVwtaG9sZTsKK+OUpSA+IGZ1bGxcLW9mXC1hbmdlcjsKK+OTtCA+IHRvXC1jdXRcLWluXC10d287Civjk5YgPiBiaXR0ZXJseVwtY29sZDsKK+OTjyA+IGJpdHRlcmx5XC1jb2xkOwor45OMID4gYml0dGVybHlcLWNvbGQ7CivjkocgPiB0b1wtc2tpcFwtYWJvdXQ7CivjkbwgPiBuYW1lXC1vZlwtYVwtZ29kOwor45GlID4gZGlzcmVzcGVjdGZ1bDsKK+OQsCA+IHRvXC1iZWxpZXZlXC1pbjsKK+eesyA+IHB1cGlsXC1vZlwtZXllOwor5LiHID4gdGVuXC10aG91c2FuZDsKK+W4gyA+IGNvdHRvblwtY2xvdGg7CivpgJogPiBwYXNzXC10aHJvdWdoOwor5o+QID4gaG9sZFwtaW5cLWhhbmQ7CivkuqwgPiBjYXBpdGFsXC1jaXR5Owor55SaID4gZ3JlYXRcLWV4dGVudDsKK+WRqCA+IHpob3VcLWR5bmFzdHk7CivlsLsgPiBlbmRcLW9mXC1zcGluZTsKK+WutCA+IHRvXC1lbnRlcnRhaW47CivlrrAgPiB0b1wtc2xhdWdodGVyOwor54qvID4gY29tbWl0XC1jcmltZTsKK+WpoiA+IHNlcnZhbnRcLWdpcmw7Civlj4IgPiB0YWtlXC1wYXJ0XC1pbjsKK+aOjCA+IHBhbG1cLW9mXC1oYW5kOwor5ae/ID4gb25lJydzXC1tYW5uZXI7Civlp4kgPiBlbGRlclwtc2lzdGVyOwor5paXID4gY2hpbmVzZVwtcGVjazsKK+WRvCA+IGJyZWF0aGVcLXNpZ2g7Civlp5AgPiBlbGRlclwtc2lzdGVyOwor6KGdID4gcnVzaFwtYWdhaW5zdDsKK+WftyA+IGhvbGRcLWluXC1oYW5kOwor6J66ID4gc3BpcmFsXC1zaGVsbDsKK+WdiiA+IG5laWdoYm9yaG9vZDsKK+WwvCA+IGJ1ZGRoaXN0XC1udW47CivpvL4gPiBzbm9yZVwtbG91ZGx5Owor5Y+2ID4gdG9cLWhhcm1vbml6ZTsKK+mHjiA+IG9wZW5cLWNvdW50cnk7Civnp7sgPiBjaGFuZ2VcLXBsYWNlOwor5ZSQID4gdGFuZ1wtZHluYXN0eTsKK+engCA+IGVhclwtb2ZcLWdyYWluOwor5omnID4gaG9sZFwtaW5cLWhhbmQ7CivokrIgPiB0eXBlXC1vZlwtcnVzaDsKK+W6hiA+IGNvbmdyYXR1bGF0ZTsKK+iSnyA+IGJldGVsXC1wZXBwZXI7CivmsZcgPiBwZXJzcGlyYXRpb247CivokKwgPiB0ZW5cLXRob3VzYW5kOwor5oucID4gZG9cLW9iZWlzYW5jZTsKK+WPgyA+IHRha2VcLXBhcnRcLWluOwor6JmRID4gYmVcLWNvbmNlcm5lZDsKK+WuiyA+IHNvbmdcLWR5bmFzdHk7Civog4YgPiBnYWxsXC1ibGFkZGVyOwor5YmWID4gc3BsaXRcLWluXC10d287Civlh6QgPiBtYWxlXC1waG9lbml4Owor6K+iID4gaW5xdWlyZVwtaW50bzsKK+iGvSA+IGdhbGxcLWJsYWRkZXI7CivnrZEgPiBhbmNpZW50XC1sdXRlOwor5YG2ID4gYWNjaWRlbnRhbGx5Owor6aO9ID4gZWF0XC1oZWFydGlseTsKK+iDjiA+IHVuYm9yblwtY2hpbGQ7Civmgp8gPiB0b1wtYXBwcmVoZW5kOwor6IKFID4gcGF5XC1yZXNwZWN0czsKK+iCgyA+IHBheVwtcmVzcGVjdHM7Civlp4ogPiBlbGRlclwtc2lzdGVyOwor5L6YID4gZGlzYXBwb2ludGVkOwor56WtID4gc2FjcmlmaWNlXC10bzsKK+i0uiA+IGNvbmdyYXR1bGF0ZTsKK+mlsSA+IGVhdFwtaGVhcnRpbHk7CivlrqogPiBjb25zdGl0dXRpb247CivnopEgPiBzdG9uZVwtdGFibGV0Owor5piMID4gbGlnaHRcLW9mXC1zdW47CivmkLogPiBsZWFkXC1ieVwtaGFuZDsKK+WOpiA+IGJpZ1wtYnVpbGRpbmc7Civku4YgPiBmYWxsXC1mb3J3YXJkOwor5aalID4gc2F0aXNmYWN0b3J5Owor5p2tID4gY3Jvc3NcLXN0cmVhbTsKK+i1oCA+IGdpdmVcLXByZXNlbnQ7CivohZQgPiBjaGVzdFwtY2F2aXR5Owor5a2dID4gZmlsaWFsXC1waWV0eTsKK+esuSA+IHNtYWxsXC1iYW1ib287CivnrJsgPiBiYW1ib29cLWZsdXRlOwor5q2nID4gZm9ya1wtb2ZcLXJvYWQ7Civmi50gPiBkb1wtb2JlaXNhbmNlOwor6YmbID4gbGVhZFwtcGx1bWJ1bTsKK+eplyA+IGVhclwtb2ZcLWdyYWluOwor56mCID4gZWFyXC1vZlwtZ3JhaW47CivlloMgPiBrZWVwXC10YWxraW5nOwor6IixID4gaG9sZFwtb2ZcLXNoaXA7CivphpwgPiB1Z2x5XC1sb29raW5nOwor5oWuID4gYmVcLWNvbmNlcm5lZDsKK+ijmCA+IGZ1clwtZ2FybWVudHM7CivmoL0gPiB0b1wtY3VsdGl2YXRlOwor6K+nID4gYmVcLXN1cnByaXNlZDsKK+mYjiA+IHZpbGxhZ2VcLWdhdGU7CivmhKMgPiBiZVwtaW5cLWFcLWRhemU7CivnkKogPiB0eXBlXC1vZlwtamFkZTsKK+euqyA+IGJhbWJvb1wtZmx1dGU7CivlqKUgPiBiZVwtYmVhdXRpZnVsOwor5ZKqID4gc291bmRcLW9mXC1jYXQ7CivmuJcgPiBzb2FrXC10aHJvdWdoOwor6JGrID4gYm90dGxlXC1nb3VyZDsKK+WdqiA+IGxldmVsXC1ncm91bmQ7CivlnZ4gPiBlbnRyZW5jaG1lbnQ7CivmgIUgPiBkaXNhcHBvaW50ZWQ7CivmqaEgPiBjaGVzdG51dFwtb2FrOwor57WuID4gd2FzdGVcLWNvdHRvbjsKK+i3hCA+IHdhbGtcLXJhcGlkbHk7CivlsbkgPiB0b1wtcmlzZVwtaGlnaDsKK+aDmCA+IGRpc2NvbmNlcnRlZDsKK+ecuCA+IHB1cGlsXC1vZlwtZXllOwor5o+pID4gcnViXC1hbmRcLXdpcGU7CivmpaAgPiBuYW1lXC1vZlwtdHJlZTsKK+m6kyA+IGZvb3RcLW9mXC1oaWxsOwor546uID4gdHlwZVwtb2ZcLWphZGU7CivmgbsgPiBmZWVsXC1hbmd1aXNoOwor5qGFID4gbWFzdFwtb2ZcLXNoaXA7CivpqosgPiBnYWxsb3BcLWhvcnNlOwor6ZerID4gdmlsbGFnZVwtZ2F0ZTsKK+i5kiA+IHRvXC1qdW1wXC1vdmVyOwor56WAID4gdG9cLXNhY3JpZmljZTsKK+exgSA+IGJhbWJvb1wtZmx1dGU7Civlr7AgPiBncmVhdFwtZG9tYWluOwor5paTID4gbXVsdGljb2xvcmVkOwor5LyrID4gbG9va1wtdG93YXJkczsKK+i6jyA+IHRyYW1wbGVcLWRvd247Civmsr0gPiBidXlcLWFuZFwtc2VsbDsKK+ePpSA+IGVhclwtb3JuYW1lbnQ7CivnrIYgPiBiYW1ib29cLWZlbmNlOwor6JmsID4geW91bmdcLWRyYWdvbjsKK+aDrCA+IGJlXC1zYXRpc2ZpZWQ7CivnvKggPiBhXC1jaGluXC1zdHJhcDsKK+WKviA+IGV4YW1pbmVcLWludG87CivlmKQgPiBzZWVrXC1mcmllbmRzOwor6K+DID4gc2NvbGRcLWxvdWRseTsKK+WGvSA+IGNvbGRcLWFuZFwtcmF3Owor6aOoID4gaG9zdFwtYmFucXVldDsKK+aAjyA+IGRpc2NvbnRlbnRlZDsKK+WGoiA+IGJ1cmlhbFwtbW91bmQ7CivlqYAgPiBiZVwtYmVhdXRpZnVsOwor5ZezID4gaW50ZXJqZWN0aW9uOwor56KjID4gc3RvbmVcLXRhYmxldDsKK+WulSA+IHN0b25lXC1xdWFycnk7CivogIYgPiBtYW5cLW9mXC1zaXh0eTsKK+mdkyA+IG1ha2VcLXVwXC1mYWNlOwor6JuwID4gdG9cLWhpYmVybmF0ZTsKK+aOvCA+IHRocm93XC1ncm91bmQ7Civlm6QgPiBncmFpblwtYmFza2V0Owor562xID4gZHdhcmZcLWJhbWJvbzsKK+aonyA+IGNhbXBob3JcLXRyZWU7CivpsqUgPiByZWV2ZXMnJ1wtc2hhZDsKK+mAtSA+IHRob3JvdWdoZmFyZTsKK+WytyA+IG1pblwtbW91bnRhaW47CivmnrAgPiBzbW9vdGhcLWJvYXJkOwor5bGQID4gd29vZGVuXC1zaG9lczsKK+iDmyA+IHRoZVwtc2hvdWxkZXI7CivpuZ4gPiBzcGFycm93XC1oYXdrOwor54qEID4gYW5pbWFsXC1ob3JuczsKK+i3uSA+IHdhbmRlclwtYWJvdXQ7CivmmLEgPiBicmlnaHRcLWxpZ2h0Owor5qC+ID4gbmFtZVwtb2ZcLXRyZWU7CivmuYQgPiB3YXRlcicnc1wtZWRnZTsKK+iPhSA+IGNvYXJzZVwtZ3Jhc3M7Civnu7sgPiBhZmZlY3Rpb25hdGU7Civnr4EgPiBiYW1ib29cLWdyb3ZlOwor6LWFID4gcHJlcGFyZWRcLWZvcjsKK+akgSA+IG91dGVyXC1jb2ZmaW47CivnurAgPiBzcG9pbGVkXC1zaWxrOwor6byLID4gbGFyZ2VcLXR1cnRsZTsKK+mGkCA+IHB1cmVzdFwtY3JlYW07CivpvokgPiB1bmV2ZW5cLXRlZXRoOwor6Iu7ID4ga2luZFwtb2ZcLWhlcmI7CivprKMgPiBob3JzZScnc1wtbWFuZTsKK+e8lyA+IGZpc2hpbmdcLWxpbmU7CivmuasgPiBhXC1zbWFsbFwtcG9uZDsKK+S7nyA+IG9uZVwtdGhvdXNhbmQ7CivomrYgPiBraW5kXC1vZlwtY2xhbTsKK+eToCA+IGJvdHRsZVwtZ291cmQ7Civom4QgPiBtb2xlXC1jcmlja2V0Owor5q+CID4gaHViXC1vZlwtd2hlZWw7CivnlZogPiBzdHJhd1wtYmFza2V0Owor5rSEID4gYVwtYmFja1wtd2F0ZXI7Civpo6cgPiBldmVuaW5nXC1tZWFsOwor6YaqID4gdW5jbGVhclwtd2luZTsKK+mqnSA+IGZhbW91c1wtaG9yc2U7CivpqpIgPiBtb3RoZXJcLWhvcnNlOwor5oeUID4gYmVcLWFmcmFpZFwtb2Y7CivlipMgPiBjdXRcLW9mZlwtbm9zZTsKK+i4lCA+IHRvXC1nZXRcLWFoZWFkOwor6aKhID4gdGhlXC1mb3JlaGVhZDsKK+a9siA+IGRyaXZpbmdcLXJhaW47CivnvK8gPiBzaWxrXC1mYWJyaWNzOwor5oOdID4gZGlzYXBwb2ludGVkOwor55STID4gZ2xhemVkXC10aWxlczsKK+iNrCA+IGFcLXBsYW50XC1uYW1lOwor5p+SID4gbnVtYmVyXC1zZXZlbjsKK+eYsyA+IHRvXC1iZVwtaGVhbGVkOwor6LCHID4gc3BlYWtcLWlsbFwtb2Y7CivkuYcgPiB0b1wtZGVwZW5kXC1vbjsKK+m+pCA+IHRvXC1oYXJtb25pemU7CivpvawgPiB1bmV2ZW5cLXRlZXRoOwor6b2GID4gc3R1ZmZlZFwtbm96ZTsKK+m9gSA+IHNub3JlXC1sb3VkbHk7CivpvL0gPiBjbG9nZ2VkXC1ub3NlOwor6bu/ID4gbGFyZ2VcLXR1cnRsZTsKK+m6lSA+IG11bnRqYWNcLWRlZXI7Civpt4IgPiBzcGFycm93XC1oYXdrOwor6bOzID4gbWFsZVwtcGhvZW5peDsKK+mzryA+IG1hbGVcLXBob2VuaXg7Civps5AgPiB0aGVcLW5hdXRpbHVzOwor6bGRID4gdGhlXC1zdHVyZ2VvbjsKK+mxgiA+IG5hbWVcLW9mXC1maXNoOwor6bCpID4gdGhlXC1uYXV0aWx1czsKK+mwoyA+IHJlZXZlcycnXC1zaGFkOwor6bCDID4gbmFtZVwtb2ZcLWZpc2g7CivpsIEgPiBuYW1lXC1vZlwtZmlzaDsKK+mtpiA+IHNoYXJrXC1mYW1pbHk7CivpraIgPiBuYW1lXC1vZlwtZmlzaDsKK+mtnyA+IHRoZVwtbmF1dGlsdXM7CivprLUgPiBiaWdcLWlyb25cLXBvdDsKK+mskCA+IGhvcnNlJydzXC1tYW5lOwor6ayFID4gdW5rZW1wdFwtaGFpcjsKK+mpiCA+IGJsYWNrXC1ob3JzZXM7CivpqK4gPiBmYW1vdXNcLWhvcnNlOwor6aiNID4gbW90aGVyXC1ob3JzZTsKK+mohiA+IGRpdmluZVwtaG9yc2U7CivpqIEgPiBnYWxsb3BcLWhvcnNlOwor6aecID4gc3Ryb25nXC1ob3JzZTsKK+mnlyA+IGNoYXR0ZXJcLW1hcms7CivppZcgPiBob3N0XC1iYW5xdWV0Owor6aSAID4gdGFpbnRlZFwtZm9vZDsKK+mjsSA+IGV2ZW5pbmdcLW1lYWw7Civpoq0gPiBzd2F5XC1pblwtd2luZDsKK+mhmSA+IHRoZVwtZm9yZWhlYWQ7CivpoJ8gPiB0aGVcLWZvcmVoZWFkOwor6Z6mID4gbGVhdGhlclwtc3RhcDsKK+mdmiA+IG1ha2VcLXVwXC1mYWNlOwor6ZyRID4gYmVcLW1vaXN0ZW5lZDsKK+maliA+IGVudHJlbmNobWVudDsKK+mZgSA+IGFcLXN0ZWVwXC1iYW5rOwor6ZeRID4gdGhlXC1kb29yc2lsbDsKK+mWuyA+IHZpbGxhZ2VcLWdhdGU7CivploYgPiB2aWxsYWdlXC1nYXRlOwor6ZWoID4gcHJhc2VvZHltaXVtOwor6ZCgID4gcHJhc2VvZHltaXVtOwor6Y+3ID4gcHJvdGFjdGluaXVtOwor6Y2KID4gc21lbHRcLW1ldGFsczsKK+mMrCA+IHNtZWx0XC1tZXRhbHM7CivpjIggPiB0b1wtYmVuZFwtaXJvbjsKK+mHqiA+IGFuXC1hbG1zXC1ib3dsOwor6Ya9ID4ga2luZFwtb2ZcLXdpbmU7Civpg5kgPiB0b1wtYmVcLWV4aWxlZDsKK+mCsiA+IGdvb2RcLWxvb2tpbmc7Civov6MgPiB0b1wtbGVhcFwtb3ZlcjsKK+i9giA+IGh1Ylwtb2ZcLXdoZWVsOwor6LqqID4gdHJhbXBsZVwtZG93bjsKK+i6miA+IHdhbmRlclwtYWJvdXQ7CivoupkgPiB0cmFtcGxlXC1kb3duOwor6LmjID4gdG9cLWp1bXBcLW92ZXI7CivouYwgPiB3YWxrXC1yYXBpZGx5Owor6Li8ID4gdG9cLWZhbGxcLWZsYXQ7CivouKQgPiBidXR0XC1hZ2FpbnN0Owor6LSIID4gZ2l2ZVwtcHJlc2VudDsKK+iziSA+IHRvXC1naXZlXC1hbG1zOwor6LOFID4gcHJlcGFyZWRcLWZvcjsKK+izgCA+IGNvbmdyYXR1bGF0ZTsKK+iyhiA+IHNtYWxsXC1iYWRnZXI7CivosbYgPiBjYXN0cmF0ZVwtcGlnOwor6Kq+ID4gc3BlYWtcLWdlbnRseTsKK+iqtiA+IHNwZWFrXC1pbGxcLW9mOwor6KmiID4gaW5xdWlyZVwtaW50bzsKK+iotiA+IHNjb2xkXC1sb3VkbHk7CivopZsgPiBmaW5lXC1jbG90aGVzOwor6KWGID4gaG9vZFwtb3JcLWNvd2w7Civon4QgPiB0b1wtaGliZXJuYXRlOwor6JmvID4geW91bmdcLWRyYWdvbjsKK+iRnCA+IHNtaWxheFwtY2hpbmE7CivokKkgPiBzY2FuZGVudFwtaG9wOwor6JCYID4gbmFwaHRoYW5sZW5lOwor6I+dID4gc21pbGF4XC1jaGluYTsKK+iOpiA+IGp1bmdsZVwtZ3Jhc3M7CivoiqcgPiBjaGVzdG51dFwtb2FrOwor6IqaID4gZ3JlZW5cLXNwcm91dDsKK+iKkSA+IHdoaXRlXC1taWxsZXQ7CivoiZkgPiBob2xkXC1vZlwtc2hpcDsKK+iGlyA+IHVnbHlcLWFuZFwtZmF0Owor6IKZID4gYVwtc21hbGxcLXdvcm07CivnvoAgPiBmaXNoaW5nXC10cmFwOwor5722ID4gZmlzaGluZ1wtdHJhcDsKK+e6kyA+IGFcLWNoaW5cLXN0cmFwOwor57qBID4gc2hhZGVcLW9mXC1yZWQ7CivnuZkgPiB0b1wtaW50ZXJwcmV0Owor57mSID4gc2lsa1wtZmFicmljczsKK+e4lSA+IHRhbmdsZWRcLWhlbXA7Civnt6EgPiBmaXNoaW5nXC1saW5lOwor57ajID4gYWZmZWN0aW9uYXRlOwor57SVID4gc3BvaWxlZFwtc2lsazsKK+eymyA+IHBheVwtcmVzcGVjdHM7Civnsa8gPiBiYW1ib29cLWNoZXN0Owor57GfID4gYmFtYm9vXC1mbHV0ZTsKK+evtCA+IGJhbWJvb1wtZmx1dGU7Civnr6AgPiBkd2FyZlwtYmFtYm9vOwor562kID4geW91bmdcLWJhbWJvbzsKK+etjSA+IGJhbWJvb1wtc2hvb3Q7CivnrYUgPiBiYW1ib29cLWJydXNoOwor56mfID4gZWFyXC1vZlwtZ3JhaW47Civnp6wgPiBibGFja1wtbWlsbGV0Owor56WYID4gdG9cLWNhbGN1bGF0ZTsKK+ejoCA+IHNhbFwtYW1tb25pYWM7CivnorYgPiBhXC1mbG9vZFwtZ2F0ZTsKK+egnyA+IHN0b25lXC10YWJsZXQ7Civnn7wgPiBzdG9uZVwtYnJpZGdlOwor552SID4gdG9cLWdsYW5jZVwtYXQ7CivnmqYgPiBicmlnaHRcLXdoaXRlOwor55i6ID4gYW5hbFwtZmlzdHVsYTsKK+eWvyA+IHByaWNrbHlcLWhlYXQ7CivnkYsgPiB0eXBlXC1vZlwtamFkZTsKK+ePuSA+IHR5cGVcLW9mXC1qYWRlOwor546NID4gaWxsXC10ZW1wZXJlZDsKK+eLhiA+IHBla2luZXNlXC1kb2c7CivniYIgPiBmZW1hbGVcLXNoZWVwOwor54e3ID4gZGlzYXBwb2ludGVkOwor54ejID4gZGlzYXBwb2ludGVkOwor5ruyID4gc29ha1wtdGhyb3VnaDsKK+a7iiA+IGFcLXJpdmVyXC1uYW1lOwor5rOWID4gc3RpbGxcLXdhdGVyczsKK+aviCA+IGZlcnRpbGVcLWVnZ3M7CivmrpwgPiBoYWxmXC1zaXR0aW5nOwor5qy/ID4gZGlzY29udGVudGVkOwor5qySID4gbmFtZVwtb2ZcLXRyZWU7CivmqZIgPiB3b29kXC1zdHJlYWtzOwor5qe7ID4gemVsa292YVwtdHJlZTsKK+anqCA+IG91dGVyXC1jb2ZmaW47Civmp5QgPiB3YXRlclwtcHVsbGV5Owor5qWAID4gbmFtZVwtb2ZcLXRyZWU7Civmnp8gPiB3b29kXC1zdHJlYWtzOwor5paVID4gbXVsdGljb2xvcmVkOwor5pScID4gbGVhZFwtYnlcLWhhbmQ7CivmkZwgPiB0aHJvd1wtZ3JvdW5kOwor5pGZID4gdG9cLXRyYW5zcG9ydDsKK+aPkSA+IHRvXC1mYWJyaWNhdGU7CivmiIkgPiBhXC1iYXR0bGVcLWF4ZTsKK+aHjSA+IGJlXC1hZnJhaWRcLW9mOwor5oayID4gY29uc3RpdHV0aW9uOwor5oW2ID4gY29uZ3JhdHVsYXRlOwor5oScID4gYmVcLXNhdGlzZmllZDsKK+aDuyA+IGZlZWxcLWFuZ3Vpc2g7CivmgrUgPiBkaXNhcHBvaW50ZWQ7Civlu7kgPiB0b1wtcGVyc2VjdXRlOwor5buIID4gYmlnXC1idWlsZGluZzsKK+W4qCA+IGhhbmRrZXJjaGllZjsKK+W2oiA+IGhpZ2hcLW9yXC10YWxsOwor5bGnID4gd29vZGVuXC1zaG9lczsKK+WxmCA+IHRoZVwteW91bmdlc3Q7Civlq7IgPiBncmFuZFwtbW90aGVyOwor5aOIID4gZGlzYXBwb2ludGVkOwor5aGiID4gZW50cmVuY2htZW50Owor5Z+cID4gb3BlblwtY291bnRyeTsKK+WatiA+IHNlZWtcLWZyaWVuZHM7Civlma8gPiBpbnRlcmplY3Rpb247Civllq0gPiBjb25kb2xlXC13aXRoOwor5ZKlID4gc291bmRcLW9mXC1jYXQ7CivlkbkgPiB0b1wtZWF0XC1ncmFzczsKK+WPhCA+IHRha2VcLXBhcnRcLWluOwor5Y63ID4gdGhlXC1mb3JlXC1hcm07CivljqQgPiB0b1wtY2FsY3VsYXRlOwor5YujID4gYWNoaWV2ZW1lbnRzOwor5Ym3ID4gdG9cLWxldmVsXC1vZmY7CivliZcgPiB0b1wtbGV2ZWxcLW9mZjsKK+WElyA+IGNvbXBhcmVcLXdpdGg7Civkva0gPiB1bnN1Ym1pc3NpdmU7CivkurAgPiBjYXBpdGFsXC1jaXR5Owor5Li8ID4gYm93bFwtb2ZcLWZvb2Q7CivktLwgPiB0b1wtZXh0aXJwYXRlOwor5LSVID4gYVwtd29vZHBlY2tlcjsKK+SzliA+IGZseWluZ1wtYmlyZHM7CivkspwgPiBsb3RzXC1vZlwtZmlzaDsKK+SxiiA+IHJvZVwtb3JcLXNwYXduOwor5LC4ID4gdGhlXC1uYXV0aWx1czsKK+SvtiA+IGZhaXJcLW9mXC1oYWlyOwor5K+sID4gdG9cLWhhbmdcLWRvd247Civkr6cgPiBhXC1zbWFsbFwtaGFsbDsKK+SunyA+IGJpZ1wtYW5kXC10YWxsOwor5K6RID4gYVwtZ3JheVwtaG9yc2U7CivkrZggPiB3ZWxsXC1zdGFja2VkOwor5K2XID4gd2VsbFwtc3RhY2tlZDsKK+StliA+IGFuaW1hbFwtZmVlZHM7CivkrYogPiB3ZWxsXC1zdGFja2VkOwor5K2JID4gbWFzaGVkXC1iZWFuczsKK+SsnCA+IGV2aWxcLXNwaXJpdHM7CivkrJogPiB0b1wtbW92ZVwtZmFzdDsKK+SsiyA+IHZpb2xlbnRcLXdpbmQ7Civkq6ggPiB0YWxsXC1hbmRcLWJpZzsKK+SrmiA+IHNob3J0XC1oZWFkZWQ7Civkq5kgPiB0aGVcLWZvcmVoZWFkOwor5KuVID4gc21hbGxcLWhlYWRlZDsKK+SrhyA+IHRoZVwtd2hpc2tlcnM7CivkqrkgPiBhXC1sYXJnZVwtZmFjZTsKK+SqsCA+IGludGVyamVjdGlvbjsKK+SqoSA+IHRvXC1mYWxsXC1kb3duOwor5KqLID4gc2lsa1wtY29yZGFnZTsKK+SpjyA+IGFcLXNtYWxsXC1mYWNlOwor5KmLID4gYVwtZ3JlZW5cLWZhY2U7CivkqYogPiBnb29kXC1sb29raW5nOwor5KmHID4gYVwtc21hbGxcLWhlYWQ7CivkqLYgPiB0aHVuZGVyc3Rvcm07CivkqLIgPiBhXC1zbWFsbFwtaGFyZTsKK+SoqiA+IGFcLWR1c3RcLXN0b3JtOwor5KidID4gYVwtcHVyZVwtd29tYW47CivkqIggPiBhXC1zbWFsbFwtYmlyZDsKK+SnrCA+IHdhdGVyJydzXC1lZGdlOwor5KeiID4gYVwtcm91Z2hcLXJvYWQ7Civkp5kgPiBhXC1oaWdoXC1tb3VuZDsKK+SlgyA+IGFcLWJpZ1wtaGFtbWVyOwor5KSsID4gYVwtc21hbGxcLWdvbmc7CivkpKYgPiBhXC1iYXR0bGVcLWF4ZTsKK+SkoyA+IGFcLW1ldGFsXC1yaW5nOwor5KSLID4geWVsbG93XC1mYWNlZDsKK+SjvyA+IHRvXC1lbnRlcnRhaW47Civko74gPiBjaGVlc2VcLWRyZWdzOwor5KO8ID4gbWl4ZWRcLXN0YXJjaDsKK+SglCA+IGZhclwtYW5kXC1kZWVwOwor5J+/ID4gdG9cLXJldmVyZW5jZTsKK+SfuSA+IHRvXC1ob3BcLWFib3V0Owor5J+VID4gdG9cLXN0ZXBcLXVwb247CivknrEgPiB0b1wtZmFsbFwtb3ZlcjsKK+SepyA+IGhhcmRcLXRvXC13YWxrOwor5JypID4gdG9cLWVudGVydGFpbjsKK+SaqiA+IGN1cnZlZFwtaG9ybnM7CivkmIQgPiBjaWNhZGFcLWZhbWl5Owor5JiAID4gZ3Jhc3Nob3BwZXJzOwor5JewID4gc3BpcmFsXC1zaGVsbDsKK+SXpyA+IGxpYmVsbHVsaWRhZTsKK+SWniA+IGFcLXNlYVwtaW5zZWN0Owor5JW7ID4gdG9cLWFkaGVyZVwtdG87CivklbogPiBkZW5zZVwtZ3Jvd3RoOwor5JWdID4gbWVkaWNhbFwtaGVyYjsKK+SViyA+IG9mXC1lbG1cLWdyb3VwOwor5JOvID4gd2F0ZXJcLXBlcHBlcjsKK+SRvSA+IGFcLWxhcmdlXC1ib2F0Owor5JG1ID4gYVwtc21hbGxcLWJvYXQ7CivkkIUgPiB0aGVcLWJ1dHRvY2tzOwor5JCBID4gdGhlXC1idXR0b2NrczsKK+SPlyA+IHVuZXhwZWN0ZWRseTsKK+SPkCA+IHRoZVwtYnV0dG9ja3M7Civkj40gPiBhXC1zbWFsbFwtd29ybTsKK+SPgCA+IGluaGFybW9uaW91czsKK+SOmCA+IGJpcmRzXC1mbHlpbmc7CivkjpUgPiBmbHlpbmdcLWJpcmRzOwor5I2EID4gYW5cLWluZGVudHVyZTsKK+SMtiA+IFwpXC1ibGFja1wtc2lsazsKK+SMhyA+IGFcLXRoaWNrXC1yb3BlOwor5IyGID4gc2lsa1wtZmFicmljczsKK+SKhSA+IHRvXC1zb2FrXC1yaWNlOwor5ImvID4gZHJpZWRcLWJhbWJvbzsKK+SJlSA+IGFcLWJhbWJvb1wtaGF0Owor5ImUID4gYmFtYm9vXC1zbGlwczsKK+SInyA+IGJyb2tlblwtc291bmQ7Civkh7ggPiBhXC1iYW1ib29cLW1hdDsKK+SHnSA+IHRvXC1icmVha1wtb2ZmOwor5IecID4gc21hbGxcLWJhbWJvbzsKK+SGrCA+IHRvXC1mYWxsXC1kb3duOwor5IaiID4gdG9cLXBlbmV0cmF0ZTsKK+SGnyA+IGNvcmVzcG9uZGluZzsKK+SGjSA+IGN1dHRlZFwtY3JvcHM7CivkhYEgPiB0b1wtaHVza1wtcmljZTsKK+SDsiA+IGFcLWdyZWF0XC1yb2NrOwor5IOvID4gc21hbGxcLXN0b25lczsKK+SDnSA+IHJ1Z2dlZFwtcm9ja3M7Civkg40gPiB0b1wtZmFsbFwtZG93bjsKK+SCkCA+IHNob3J0XC1zdHVwaWQ7CivkgacgPiB0b1wtb3Blblwtd2lkZTsKK+SBoCA+IHRvXC1oYW5nXC1kb3duOwor5ICBID4gYVwtc21hbGxcLWJvd2w7Civjv70gPiBhXC1zbWFsbFwtYm93bDsKK+O/tSA+IHNvZnRcLWxlYXRoZXI7Civjv7IgPiBhXC1maWVyY2VcLWRvZzsKK+O/qiA+IHNraW5cLWRpc2Vhc2U7Civjv6ggPiBzbWFsbFwtc3RvbmVzOwor47+KID4gdmVyeVwtcGFpbmZ1bDsKK+O+lCA+IGxvbmdcLWlsbG5lc3M7CivjvIsgPiB0aGVcLWN1Y3VtYmVyOwor47qWID4gZG9nc1wtYmFya2luZzsKK+O6jiA+IGZpZXJjZVwtYmVhc3Q7Civjub8gPiBhXC1maWVyY2VcLWRvZzsKK+O5qiA+IGFcLWZpZXJjZVwtZG9nOwor47i+ID4gdG9cLWZpbGxlZFwtdXA7CivjuK0gPiB0aGVcLW9wcG9zaXRlOwor47iYID4gdGVuXC10aG91c2FuZDsKK+O3uSA+IGludGVuc2VcLWhlYXQ7CivjtpUgPiB0b1wtd2FzaFwtcmljZTsKK+O1iiA+IG1vdmluZ1wtaW1hZ2U7CivjtJUgPiB0b1wtYm9pbFwtYXdheTsKK+O0kyA+IHRvXC13YXNoXC1yaWNlOwor47OeID4gZGVlcFwtYW5kXC1mYXI7Civjs5EgPiB0b1wtZmxvd1wtb3ZlcjsKK+OwtyA+IHJlc3VycmVjdGlvbjsKK+OvrCA+IGFjaGlldmVtZW50czsKK+OvoCA+IGFcLWNyb3NzXC1iZWFtOwor46+cID4gZGVjYXllZFwtd29vZDsKK+OuriA+IGFcLXdlbGxcLXN3ZWVwOwor466sID4gYVwtZnJ1aXRcLXRyZWU7CivjrqogPiBhXC1zbWFsbFwtYm9hdDsKK+OujyA+IGFcLWZydWl0XC10cmVlOwor462rID4gYVwtZnJ1aXRcLXRyZWU7CivjrLUgPiB0aGVcLXNoaW5ib25lOwor46uSID4gaGFuZHNcLWpvaW5lZDsKK+OrgyA+IGZsYWdzXC1mbHlpbmc7Civjq4EgPiB0b1wtY3V0XC1hcGFydDsKK+OorSA+IHVucmVhc29uYWJsZTsKK+OntCA+IHRvXC1ydWJcLWhhbmRzOwor46eiID4gdG9cLWRlcGVuZFwtb247CivjprAgPiB0b1wtYnJlYWtcLW9mZjsKK+OmpiA+IGFwcHJlaGVuc2l2ZTsKK++mmyA+IHNtZWx0XC1tZXRhbHM7Civjpo4gPiBjYW50YW5rZXJvdXM7CivjpbUgPiB0b1wtZGlzaG9ub3VyOwor76WrID4gdGFrZVwtcGFydFwtaW47CivjpaAgPiBpbnRlbGxpZ2VuY2U7CivjpLMgPiB0b1wtZGVwZW5kXC1vbjsKK+OkpyA+IGNvbmNpbGlhdGlvbjsKK+OkniA+IGRpc2FwcG9pbnRlZDsKK++kkSA+IHNwaXJhbFwtc2hlbGw7Civjo5IgPiBoYWlyXC1yYWlzaW5nOwor46ORID4gZG91YmxlXC1pbWFnZTsKK+OilyA+IGFcLWhpZ2hcLWhvdXNlOwor46GUID4gb2lsZWRcLWNhbGljbzsKK+OhhSA+IHN0b3JhZ2VcLXJvb207CivjoL4gPiBhXC1kaXNoXC1jbG90aDsKK+OgvSA+IGFcLWRpc2hcLWNsb3RoOwor46CSID4gbW91bnRhaW5cLXRvcDsKK+OfvSA+IG1vdW50YWluXC10b3A7Civjn7ogPiBtb3VudGFpblwtdG9wOwor45+QID4gYmlnXC1hbmRcLWhpZ2g7Civjn4cgPiBhXC1sYW5kXC1zbGlkZTsKK+OeoiA+IHRvXC1hcnJpdmVcLWF0Owor456bID4gcmVkXC1zbGlwcGVyczsKK+OekyA+IHRoZVwtYnV0dG9ja3M7CivjnoUgPiBub3RcLXN0cmFpZ2h0Owor45yXID4gY292ZXRvdXNuZXNzOwor45u8ID4gdG9cLWludGVycnVwdDsKK+ObpSA+IHRvXC1wcm9zdHJhdGU7Civjm4ogPiB0b1wtc3BlY3VsYXRlOwor45uGID4gdG9cLXNwZWN1bGF0ZTsKK+OYoiA+IGFcLXJvdW5kXC1jYXZlOwor45iNID4gc291bmRcLW9mXC1yYXQ7Civjl5IgPiBpbnRlcmplY3Rpb247CivjlrcgPiBiaXJkXC1zaW5naW5nOwor45agID4gYW5cLWF1eGlsaWFyeTsKK+OVryA+IHNsb3dcLXRvbmd1ZWQ7CivjlZIgPiBhXC1sb2Z0eVwtcGVhazsKK+OVgyA+IHRvXC1mYWxsXC1vdmVyOwor45SsID4gdG9cLWVzdGFibGlzaDsKK+OUpiA+IHRvXC1lbmNvdXJhZ2U7CivjlJUgPiB3aXRoXC1wdXJwb3NlOwor45SOID4gdG9cLWN1dFwtYXBhcnQ7CivjlIMgPiB0b1wtY3V0XC1zaG9ydDsKK+OToyA+IHRvXC1zaW5rXC1pbnRvOwor45GqID4gYVwtZ2VuZXJhdGlvbjsKK+ORpCA+IGdvb2RcLWxvb2tpbmc7CivjkZQgPiBhbGxcLXRvZ2V0aGVyOwor45C4ID4gdG9cLW93blwtbW9uZXk7CivjkLQgPiB0b1wtZHJhZ1wtZG93bjsKK+S7pSA+IGJ5XC1tZWFuc1wtb2Y7CivovrIgPiBhZ3JpY3VsdHVyZTsKK+W+hCA+IG5hcnJvd1wtcGF0aDsKK+WHoCA+IHNtYWxsXC10YWJsZTsKK+S+vyA+IGNvbnZlbmllbmNlOwor55S1ID4gZWxlY3RyaWNpdHk7Civnmb4gPiBvbmVcLWh1bmRyZWQ7Civot6MgPiBiYXJlXC1mb290ZWQ7CivotIUgPiB1bm5lY2Vzc2FyeTsKK+WKnyA+IGFjaGlldmVtZW50Owor5rGfID4gbGFyZ2VcLXJpdmVyOwor5rOoID4gY29uY2VudHJhdGU7CivniacgPiB0ZW5kXC1jYXR0bGU7CivlqZogPiBnZXRcLW1hcnJpZWQ7CivliIogPiBwdWJsaWNhdGlvbjsKK+WGnCA+IGFncmljdWx0dXJlOwor54afID4gd2VsbFwtY29va2VkOwor6aWtID4gY29va2VkXC1yaWNlOwor5aWiID4gZXh0cmF2YWdhbnQ7Civmn6UgPiBpbnZlc3RpZ2F0ZTsKK+eroCA+IGNvbXBvc2l0aW9uOwor5oyJID4gcHV0XC1oYW5kXC1vbjsKK+idoCA+IGtpbmRcLW9mXC1iYXQ7CivonZUgPiBuaWJibGVcLWF3YXk7Civlm7AgPiB0b1wtc3Vycm91bmQ7CivpmakgPiBuYXJyb3dcLXBhc3M7Civnu4MgPiB0b1wtcHJhY3RpY2U7Civmuq8gPiBnb1wtdXBzdHJlYW07CivmuIkgPiBmb3JkXC1zdHJlYW07CivotKUgPiBiZVwtZGVmZWF0ZWQ7CivnurcgPiBpblwtZGlzb3JkZXI7CivnvLogPiBiZVwtc2hvcnRcLW9mOwor6YGtID4gY29tZVwtYWNyb3NzOwor5oi0ID4gd2Vhclwtb25cLXRvcDsKK+WLpCA+IGluZHVzdHJpb3VzOwor5YuYID4gaW52ZXN0aWdhdGU7Civpq4QgPiBib25lXC1tYXJyb3c7CivlirkgPiBlZmZpY2FjaW91czsKK+iyjCA+IGNvdW50ZW5hbmNlOwor57mBID4gY29tcGxpY2F0ZWQ7Civmn7MgPiB3aWxsb3dcLXRyZWU7Civlh4QgPiBiaXR0ZXJcLWNvbGQ7CivmtokgPiBmb3JkXC1zdHJlYW07CivpnJ4gPiByb3N5XC1jbG91ZHM7Civpo7QgPiBzd2VldFwtbWVhdHM7Civpo68gPiBjb29rZWRcLXJpY2U7CivogaogPiBpbnRlbGxpZ2VudDsKK+WApiA+IGJlXC10aXJlZFwtb2Y7CivmkZQgPiBmYWxsXC1ncm91bmQ7CivphokgPiBpbnRveGljYXRlZDsKK+afuyA+IGludmVzdGlnYXRlOwor5rabID4gbGFyZ2VcLXdhdmVzOwor6ZSFID4gY29va2luZ1wtcG90Owor5LuUID4gc21hbGxcLXRoaW5nOwor5pyDID4gdG9cLWFzc2VtYmxlOwor6Zu7ID4gZWxlY3RyaWNpdHk7Civmi4YgPiB0b1wtYnJlYWtcLXVwOwor57+gID4gY29sb3JcLWdyZWVuOwor6ZqqID4gbmFycm93XC1wYXNzOwor5pmVID4gaGFsb1wtaW5cLXNreTsKK+mZuiA+IG5hcnJvd1wtcGFzczsKK+e6oCA+IGludmVzdGlnYXRlOwor5aS4ID4gZXh0cmF2YWdhbnQ7CivovqggPiBkaXN0aW5ndWlzaDsKK+iRmyA+IGVkaWJsZVwtYmVhbjsKK+i9vyA+IHNlZGFuXC1jaGFpcjsKK+aVlyA+IGJlXC1kZWZlYXRlZDsKK+aUqyA+IHNuYXRjaFwtYXdheTsKK+e0myA+IGluXC1kaXNvcmRlcjsKK+mNmyA+IGZvcmdlXC1tZXRhbDsKK+WOlSA+IG1pbmdsZVwtd2l0aDsKK+mNiyA+IGNvb2tpbmdcLXBvdDsKK+ervyA+IGJhbWJvb1wtcG9sZTsKK+WIuCA+IGNlcnRpZmljYXRlOwor56mJID4geW91bmdcLWdyYWluOwor6amzID4gdmFyaWNvbG9yZWQ7CivmhpQgPiBiZVwtd29yblwtb3V0Owor57KeID4gZ3JvdW5kXC1yaWNlOwor6YWUID4gaW50b3hpY2F0ZWQ7CivpgYIgPiBjb21wbHlcLXdpdGg7CivpmrYgPiBzdWJzZXJ2aWVudDsKK+e8uCA+IGVhcnRoZW5cLWp1ZzsKK+iCoiA+IGh1bWFuXC1saW1iczsKK+WwtCA+IGVtYmFycmFzc2VkOwor5ZGQID4gcmFpc2VcLXZvaWNlOwor6aKWID4gcmljZVwtdGFzc2VsOwor56ClID4gYVwtd2hldHN0b25lOwor5a2VID4gYmVcLXByZWduYW50Owor6ZKeID4gcGFwZXJcLW1vbmV5Owor5Z6uID4gYmVcLWRlZmVhdGVkOwor55CiID4gcG9saXNoXC1qYWRlOwor57u9ID4gcmlwcGVkXC1zZWFtOwor5aWgID4gcGF5XC1yZXNwZWN0Owor5r6cID4gb3ZlcmZsb3dpbmc7Civmg5UgPiBiZVwtY2F1dGlvdXM7CivplLsgPiBmb3JnZVwtbWV0YWw7CivomoAgPiBuaWJibGVcLWF3YXk7CivotrQgPiBseWluZ1wtcHJvbmU7CivnqpggPiBlbWJhcnJhc3NlZDsKK+maiyA+IHN1aVwtZHluYXN0eTsKK+eehCA+IHRha2VcLWFpbVwtYXQ7CivnpZ8gPiBldmlsXC1zcGlyaXQ7Civll5QgPiBiZVwtYW5ncnlcLWF0Owor5aWVID4gaW5cLXNlcXVlbmNlOwor5qa0ID4gcG9tZWdyYW5hdGU7Civmo5ggPiBqdWp1YmVcLXRyZWU7Civls5kgPiBzdGFuZFwtZXJlY3Q7CivnoIwgPiBzdG9uZVwtc3RlcHM7Civmp5AgPiBsb2N1c3RcLXRyZWU7Civps54gPiBmaXNoXC1zY2FsZXM7Civmg7ogPiBpbnRlbGxpZ2VudDsKK+mrkyA+IGJvbmVcLW1hcnJvdzsKK+eCvSA+IGJ1cm5pbmdcLWhvdDsKK+i/giA+IGRvY3RyaW5haXJlOwor57yqID4gd2luZFwtYXJvdW5kOwor5YeLID4gYmVcLXdpdGhlcmVkOwor57ykID4gZmxvdXJpc2hpbmc7Civpm7MgPiB0aHVuZGVyY2xhcDsKK+i1mCA+IHVubmVjZXNzYXJ5Owor6am4ID4gZXh0cmFcLWhvcnNlOwor5Ze3ID4gbG91ZFwtY2xhbW9yOwor54KWID4gc3Rld1wtc2xvd2x5Owor6LCPID4gcmVtb25zdHJhdGU7Civnr4YgPiBzZWFsXC1zY3JpcHQ7CivlrqYgPiBvZmZpY2lhbGRvbTsKK+eTriA+IGVhcnRoZW5cLWphcjsKK+aclSA+IHByb25vdW5cLScnaScnOwor6ZiRID4gZG9vclwtc2NyZWVuOwor5Y2kID4gc2FsaW5lXC1zb2lsOwor5ZSPID4gd2VlcFwtb3JcLXNvYjsKK+axqSA+IHJ1blwtc3dpZnRseTsKK+amlSA+IGJhbnlhblwtdHJlZTsKK+mXsCA+IGludGVyY2FsYXJ5Owor5piKID4gc3VtbWVyXC10aW1lOwor5463ID4gZmxhd1wtaW5cLWdlbTsKK+mYmSA+IHdhdGNoXC10b3dlcjsKK+eRlSA+IGZsYXdcLWluXC1nZW07Civms4wgPiB0b1wtc2VlcFwtb3V0Owor54O9ID4gc2lnbmFsXC1maXJlOwor5a21ID4gc2l0XC1vblwtZWdnczsKK+akrSA+IG92YWxcLXNoYXBlZDsKK+eXiSA+IGNvbnZ1bHNpb25zOwor5YydID4gZnVsbFwtY2lyY2xlOwor6aWqID4gY29va2VkXC1mb29kOwor5baZID4gcHJlY2lwaXRvdXM7CivpoqcgPiBjaGVla1wtYm9uZXM7CivplZcgPiBib3JpbmdcLXRvb2w7Civmj7YgPiBtYWtlXC1mdW5cLW9mOwor54K3ID4gY2FuZGxlXC13aWNrOwor6LSyID4gZm9yZ2VcLWFoZWFkOwor6JqxID4gZ3Jhc3Nob3BwZXI7Civnl6ggPiBjb25zdW1wdGlvbjsKK+a/giA+IGFcLXdhdGVyZmFsbDsKK+axkCA+IG5pZ2h0XC10aWRlczsKK+etoCA+IGJhbWJvb1wtc2tpbjsKK+awpCA+IGhhbmdpbmdcLWZvZzsKK+eXlCA+IGhlbW9ycmhvaWRzOwor6La/ID4gdG9cLXRyZWFkXC1vbjsKK+inniA+IHdpbmVcLXZlc3NlbDsKK+aMuSA+IHRvXC1iYWxlXC1vdXQ7CivohpEgPiB0aGVcLWtuZWVjYXA7CivlvocgPiBjb21wbHlcLXdpdGg7CivllLMgPiBjcnlcLW9mXC1iaXJkOwor56SFID4gc3RvbmVcLWJsb2NrOwor566UID4gcmVlZFwtc2NyZWVuOwor6LG4ID4gcmFkaWNhbFwtMTUzOwor5rufID4gb3ZlcmZsb3dpbmc7Civng4MgPiBoeWRyb2NhcmJvbjsKK+egrSA+IHN0b25lXC1wcm9iZTsKK+a+jSA+IHRpbWVseVwtcmFpbjsKK+m+iyA+IHRvb3RoXC1kZWNheTsKK+e8sSA+IGF0dGFjaGVkXC10bzsKK+WlgiA+IGJlXC1udW1lcm91czsKK+m7qSA+IHRvXC1kaXNob25vcjsKK+mltCA+IHN3ZWV0XC1tZWF0czsKK+WjhSA+IHRvXC1vYnN0cnVjdDsKK+a+tiA+IHN0aWxsXC13YXRlcjsKK+mkjSA+IGJlXC1zYXRpYXRlZDsKK+aepSA+IHR5cGVcLW9mXC1vYWs7CivonKIgPiBncmFzc2hvcHBlcjsKK+eFhSA+IGZvcmdlXC1tZXRhbDsKK+ahlSA+IHRhbGxvd1wtdHJlZTsKK+myoiA+IHNpbHZlclwtY2FycDsKK+i2sSA+IGdvXC1pblwtaHVycnk7CivlpqsgPiBmYW1pbHlcLW5hbWU7Civmmr4gPiBtb3JuaW5nXC1zdW47CivojaYgPiBicmluZGxlZFwtb3g7CivpgpsgPiBpblwtZGlzdHJlc3M7CivmiKIgPiB0b1wtcHV0XC1hd2F5Owor5qanID4gdHlwZVwtb2ZcLXlldzsKK+WghyA+IHllbGxvd1wtbG9hbTsKK+WKrCA+IGJlXC1kaWxpZ2VudDsKK+mtiCA+IG1pc2NoZXZpb3VzOwor6Y2qID4gYW5cLWlyb25cLXBhbjsKK+icoyA+IGR1bmdcLWJlZXRsZTsKK+eXpiA+IFwoZmxhdFwpXC1tb2xlOwor5oisID4gZXh0ZXJtaW5hdGU7Civll4kgPiBiaXJkJydzXC1jcm9wOwor5YSLID4gYVwtc21hbGxcLWphcjsKK+ianCA+IHBsYW50XC1sb3VzZTsKK+eynCA+IHNlbGxcLWdyYWluczsKK+aUriA+IHRvXC1mZW5kXC1vZmY7Civoi44gPiBjaGluYVwtZ3Jhc3M7Civln5UgPiBlYXJ0aGVuXC1qYXI7CivlnakgPiBlYXJ0aGVud2FyZTsKK+amiSA+IHR5cGVcLW9mXC1lbG07CivnjqIgPiBwb3JwaHlyaXRlczsKK+e7gSA+IHRvXC1jb250cmFjdDsKK+a9hiA+IHRpbnlcLXN0cmVhbTsKK+mruSA+IHJlZFwtbGFjcXVlcjsKK+inliA+IHRvXC1sb25nXC1mb3I7CivonrUgPiBhXC1jaHJ5c2FsaXM7CivmnaogPiB0aXBcLW9mXC10d2lnOwor5bmCID4gY292ZXJcLWNsb3RoOwor56GXID4gYmFycmVuXC1sYW5kOwor6ISeID4gbWluY2VkXC1tZWF0Owor6L21ID4gZW5kXC1vZlwtYXhsZTsKK+allyA+IGJhclwtb2ZcLWRvb3I7CivmoYQgPiBhXC1jb2lyXC1wYWxtOwor5aCgID4gYmF0dGxlbWVudHM7Civkv5wgPiB0b1wtdHJ1c3RcLXRvOwor6b2yID4gdG9vdGhcLWRlY2F5Owor6bu3ID4gdG9cLWRpc2hvbm9yOwor6bqAID4gZmVtYWxlXC1kZWVyOwor6bm1ID4gc2FsaW5lXC1zb2lsOwor6biPID4gdHJvcGljXC1iaXJkOwor6bS6ID4gdGhlXC1wZWxpY2FuOwor6bGgID4gbWluY2VkXC1maXNoOwor6bGXID4gZmlzaFwtc2NhbGVzOwor6bCxID4gc2lsdmVyXC1jYXJwOwor6ayZID4gbWF0dGVkXC1oYWlyOwor6amUID4gYmxhY2tcLWhvcnNlOwor6amHID4gaGVhdnlcLWhvcnNlOwor6ai6ID4gaGVhdnlcLWhvcnNlOwor6aeZID4gZXh0cmFcLWhvcnNlOwor6aeBID4gdmFyaWNvbG9yZWQ7CivppZwgPiBiZVwtc2F0aWF0ZWQ7CivppIEgPiBjb29rZWRcLWZvb2Q7Civpo6ogPiBjb29rZWRcLWZvb2Q7CivpobQgPiBjaGVla1wtYm9uZXM7CivpoaYgPiBiZVwtd29yblwtb3V0Owor6aGHID4gYmVcLXdvcm5cLW91dDsKK+mgtCA+IHJpY2VcLXRhc3NlbDsKK+mgiyA+IHRvXC1jYXJlXC1mb3I7CivpnqsgPiBpbnRlcnJvZ2F0ZTsKK+mdgiA+IHRodW5kZXJjbGFwOwor6ZqJID4gaW5cLWRpc29yZGVyOwor6ZioID4gaW5cLWRpc3RyZXNzOwor6ZeVID4gd2F0Y2hcLXRvd2VyOwor6ZeMID4gZG9vclwtc2NyZWVuOwor6ZagID4gaW50ZXJjYWxhcnk7Civplo8gPiBpbnRlcmNhbGFyeTsKK+mQpiA+IGNhbGlmb3JuaXVtOwor6Y+7ID4gcGhvc3Bob25pdW07Civpj5wgPiBib3JpbmdcLXRvb2w7CivpjpAgPiBmYW1pbHlcLW5hbWU7CivpjZAgPiBhXC1oZWFkc3RhbGw7CivpiJQgPiBwYXBlclwtbW9uZXk7Civph4YgPiBkaXN0aW5ndWlzaDsKK+mGuSA+IHN0cm9uZ1wtd2luZTsKK+mGsiA+IHN0cm9uZ1wtd2luZTsKK+mGkyA+IHNhbHRlZFwtbWVhdDsKK+mFjyA+IG1pbGxldFwtd2luZTsKK+mBuSA+IGNvbXBseVwtd2l0aDsKK+mBoSA+IGdvXC11cHN0cmVhbTsKK+i/iiA+IHRvXC1nb1wtcm91bmQ7CivovY4gPiBzZWRhblwtY2hhaXI7CivovYcgPiBjb21wbGljYXRlZDsKK+i8piA+IGFcLWhhbmRcLWNhcnQ7Civou7kgPiBlbmRcLW9mXC1heGxlOwor6Lm5ID4gdG9cLXRyZWFkXC1vbjsKK+i5tSA+IHRvXC10cmVhZFwtb247CivotrIgPiBnb1wtaW5cLWh1cnJ5Owor6LSXID4gY291bnRlcmZlaXQ7Civos4EgPiBmb3JnZVwtYWhlYWQ7CivospggPiB0aGVcLXBhbnRoZXI7CivosaYgPiBhXC13aWxkXC1ib2FyOwor6LGYID4gYVwtc21hbGxcLXBpZzsKK+irqyA+IHJlbW9uc3RyYXRlOwor6KuMID4gcmVtb25zdHJhdGU7Civop7QgPiB3aW5lXC12ZXNzZWw7Civop7EgPiB0YXJ0YXJcLWhvcm47CivopoggPiBpbnZlc3RpZ2F0ZTsKK+iktSA+IGJyaWRhbFwtdmVpbDsKK+ignCA+IGdyYXNzaG9wcGVyOwor6KCLID4gY2F0ZXJwaWxsYXI7Civon5sgPiBhXC1sYW5kXC1jcmFiOwor6J2bID4gdGhlXC1zb3dcLWJ1ZzsKK+idjSA+IGFcLWNlbnRpcGVkZTsKK+ibkyA+IGNhdGVycGlsbGFyOwor6JeaID4gd2F0ZXJcLXBsYW50Owor6JeEID4gZWRpYmxlXC1mZXJuOwor6JOqID4gcGFwZXJcLXBsYW50Owor6JOCID4gbHVja3lcLXBsYWNlOwor6JKtID4gdG9cLWN1dGdyYXNzOwor6JCQID4gbHVja3lcLXBsYW50Owor6I+iID4gdG9cLWluY3ViYXRlOwor6IunID4gY2hpbmFcLWdyYXNzOwor6ImXID4gYm93XC1vZlwtanVuazsKK+iHjyA+IHRoZVwta25lZWNhcDsKK+iDviA+IG1pbmNlZFwtbWVhdDsKK+iDlCA+IHJvdHRlblwtbWVhdDsKK+iCiCA+IHRvXC1jb21tZW5jZTsKK+iBsCA+IGludGVsbGlnZW50Owor6IGmID4gdGhlXC1oZWFyaW5nOwor6IGhID4gaW50ZWxsaWdlbnQ7CivogJEgPiBzcGVjaWFsaXplZDsKK+e/hiA+IGNvbG9yXC1ncmVlbjsKK+e+liA+IGFcLWJsYWNrXC1yYW07CivnvoMgPiBjb3ZlclwtY2xvdGg7CivnvbEgPiBmaXNoaW5nXC1uZXQ7CivnvaAgPiBhbmltYWxcLXRyYXA7CivnvZIgPiByYWRpY2FsXC0xMjI7CivnvYsgPiBlYXJ0aGVuXC1qYXI7Civnub4gPiBhdHRhY2hlZFwtdG87Civnub0gPiBmbG91cmlzaGluZzsKK+e5hiA+IHdpbmRcLWFyb3VuZDsKK+e2uyA+IHJpcHBlZFwtc2VhbTsKK+ezviA+IGludmVzdGlnYXRlOwor57O2ID4gc2VsbFwtZ3JhaW5zOwor57OiID4gcmljZVwtc25hY2tzOwor57C5ID4gdGFsbFwtYmFtYm9vOwor57C1ID4gZmluZVwtYmFtYm9vOwor57CwID4gYmFtYm9vXC1yYWZ0Owor56+UID4gdGFsbFwtYmFtYm9vOwor566YID4gZmluZVwtYmFtYm9vOwor562pID4gYmFtYm9vXC1waXBlOwor562KID4gYmFtYm9vXC1yb3BlOwor562HID4gYmFtYm9vXC1uYW1lOwor56yvID4gYVwtYmlyZFwtY2FnZTsKK+equCA+IGZhaW50XC1zb3VuZDsKK+eptSA+IGRlZXBcLWhvbGxvdzsKK+epjiA+IHJpY2VcLXRhc3NlbDsKK+ejvSA+IGJhcnJlblwtbGFuZDsKK+ejuSA+IHN0b25lXC13ZWRnZTsKK+eilCA+IFwvMlwtcHJcLXN0b25lOwor56CGID4gXC8yXC1wclwtc3RvbmU7CivnoIMgPiB3aGl0ZVwtc3RvbmU7CivnnrUgPiB0b1wtc3RhcmVcLWF0Owor552gID4gdG9cLWNhcmVcLWZvcjsKK+edjiA+IHRvXC1sb25nXC1mb3I7CivnnKUgPiBleWVcLXNvY2tldHM7CivnnJEgPiBzdW5rZW5cLWV5ZXM7CivnnIogPiBkaW1cLXNpZ2h0ZWQ7CivnmoMgPiBjb3VudGVuYW5jZTsKK+eZhiA+IGNvbnN1bXB0aW9uOwor55iaID4gdG9cLWhpY2NvdWdoOwor55ezID4gcG9ja1wtbWFya2VkOwor55eyID4gcG9ja1wtbWFya2VkOwor55etID4gbWVub3JyaGFnaWE7Civnl5kgPiBjb252dWxzaW9uczsKK+eXgyA+IGluZGlnZXN0aW9uOwor55SVID4gZWFydGhlblwtamFyOwor54+9ID4gamFkZVwtdGFibGV0Owor546XID4gXC8yXC1wclwtc3RvbmU7CivnjY8gPiB0aGVcLXBhbnRoZXI7Civni6IgPiBhbmltYWxcLW5hbWU7CivnipYgPiBicmluZGxlZFwtb3g7Civnh5YgPiByZWhlYXRcLWZvb2Q7Civnhr4gPiBidXJuaW5nXC1ob3Q7CivnhZ8gPiBicmlnaHRcLXJvb207CivnhY8gPiBkcnlcLWJ5XC1maXJlOwor54WGID4gcmFnaW5nXC1maXJlOwor54O0ID4gaHlkcm9jYXJib247CivngakgPiBvdmVyZmxvd2luZzsKK+eBpyA+IG92ZXJmbG93aW5nOwor54C+ID4gb3ZlcmZsb3dpbmc7CivngKAgPiB0aW55XC1zdHJlYW07Civmv6QgPiBsYXJnZVwtd2F2ZXM7CivmvrAgPiBvdmVyZmxvd2luZzsKK+a9vyA+IHN0aWxsXC13YXRlcjsKK+a9viA+IGNsZWFyXC13YXRlcjsKK+a9oCA+IHRvXC1ibG93XC1vdXQ7Civmu7cgPiB0aGlja1wtZ3Jhdnk7CivmuZwgPiB0cmFuc3BhcmVudDsKK+a4nyA+IG5vdFwtZmxvd2luZzsKK+a3kiA+IGJpdHRlclwtY29sZDsKK+a2oCA+IHN0aWxsXC13YXRlcjsKK+a1oSA+IGJ1cnN0XC1mb3J0aDsKK+aznSA+IGdvXC11cHN0cmVhbTsKK+aysCA+IHRvXC1sZXRcLWRyb3A7CivmrrAgPiBhblwtYWJvcnRpb247CivmrK4gPiB0b1wtaGljY291Z2g7Civmq7ggPiB0eXBlXC1vZlwtZWxtOwor5quqID4gdHlwZVwtb2ZcLW9hazsKK+apoiA+IG92YWxcLXNoYXBlZDsKK+ansiA+IHR5cGVcLW9mXC1vYWs7Civmp6IgPiBhXC1oYXJkXC13b29kOwor5qWVID4gb3ZhbFwtc2hhcGVkOwor5qOvID4ganVqdWJlXC10cmVlOwor5qKYID4gYmFtYm9vXC10dWJlOwor5qKWID4gYVwtcGFsbVwtdHJlZTsKK+aihCA+IGFcLXNvZnRcLXdvb2Q7CivmoJ4gPiBwdWJsaWNhdGlvbjsKK+aggyA+IHR5cGVcLW9mXC1vYWs7CivmnqcgPiBiYW1ib29cLXR1YmU7CivmnaQgPiB0eXBlXC1vZlwtb2FrOwor5pqIID4gaGFsb1wtaW5cLXNreTsKK+aYnCA+IHRvXC1vcGVuXC1vdXQ7CivmmIkgPiBicmlnaHRcLWRhd247Civml70gPiBtb3JuaW5nXC1zdW47Civml4kgPiB0b1wtc3RhdGVcLXRvOwor5pGhID4gdG9cLWlycmlnYXRlOwor5pGOID4gdG9cLXN0cmFuZ2xlOwor5oyTID4gdG9cLW9wZW5cLW91dDsKK+aIqSA+IGV4dGVybWluYXRlOwor5oWJID4gdG9cLWJyaW5nXC11cDsKK+aElCA+IGNvbWZvcnRhYmxlOwor5b+yID4gZXh0cmF2YWdhbnQ7CivlvrsgPiBhXC13aWRlXC1yb29tOwor5b6RID4gbmFycm93XC1wYXRoOwor5bywID4gZW5kc1wtb2ZcLWJvdzsKK+W5jiA+IGNvdmVyXC1jbG90aDsKK+W4gCA+IHRvXC1nb1wtcm91bmQ7CivltKogPiByb2NreVwtcGVha3M7CivltJIgPiByb2NreVwtcGVha3M7CivlsbAgPiBkaXNvYmVkaWVudDsKK+WxnSA+IHN0cmF3XC1zaG9lczsKK+WwtyA+IGVtYmFycmFzc2VkOwor5bC2ID4gZW1iYXJyYXNzZWQ7CivlsJwgPiBhXC1jaGlsZFwtdG95Owor5bCDID4gdG9cLXN0YXRlXC10bzsKK+WslCA+IGJhYnlcLXJhYmJpdDsKK+WqryA+IGZhbWlseVwtbmFtZTsKK+WlkyA+IGV4dHJhdmFnYW50Owor5aWQID4gYmVcLW51bWVyb3VzOwor5aG/ID4gc21hbGxcLW1vdW5kOwor5aCKID4gd2hpdGVcLWVhcnRoOwor5aCIID4gZWFydGhlblwtanVnOwor5Z6eID4gc21hbGxcLW1vdW5kOwor5Z6dID4gZGlsYXBpZGF0ZWQ7CivlnpQgPiB0b1wtcmVzdHJhaW47CivlnbUgPiBlYXJ0aGVud2FyZTsKK+WXsSA+IGV4Y2xhbWF0aW9uOwor5ZaOID4gYVwtd3J5XC1tb3V0aDsKK+WUuSA+IHRvXC1zbWlsZVwtYXQ7CivlkoUgPiB0b1wtc3BpdFwtb3V0Owor5ZC2ID4gcmFpc2VcLXZvaWNlOwor5Y+7ID4gcGxhY2VcLW5hbWVzOwor5Y6+ID4gbGlnaHRseVwtdGFwOwor5Y6gID4gbWluZ2xlXC13aXRoOwor5YyvID4gYVwtY29uY291cnNlOwor5Yu9ID4gdG9cLWluY3ViYXRlOwor5YugID4gam9pblwtZm9yY2VzOwor5Yq8ID4gYmVcLWRpc2NyZWV0Owor5Yq1ID4gY2VydGlmaWNhdGU7CivliaYgPiB0b1wtY2FzdHJhdGU7CivliIsgPiBwdWJsaWNhdGlvbjsKK+WHqSA+IHdpbnRyeVwtd2luZDsKK+WGqiA+IGNvdmVyXC1jbG90aDsKK+WFpiA+IGRlc3RydWN0aW9uOwor5YSBID4gb3V0c3RhbmRpbmc7Civlgo8gPiB0b1wtd2FyZFwtb2ZmOwor5YGiID4gdG9cLXN0YXJlXC1hdDsKK+S/myA+IG1ha2VcLWVmZm9ydDsKK+S9uSA+IGRlcGVuZFwtdXBvbjsKK+S9oSA+IG1ha2VcLWVmZm9ydDsKK+S2qiA+IHNoYXJwXC10ZWV0aDsKK+S1tCA+IGJsYWNrXC1jb2xvcjsKK+S1syA+IGxpZ2h0XC1ibGFjazsKK+S1sCA+IGJsYWNrXC1jb2xvcjsKK+S1qSA+IGRhcmtcLXllbGxvdzsKK+S1oiA+IGxpZ2h0XC1ibGFjazsKK+S1jiA+IGRhcmtcLXllbGxvdzsKK+SyuyA+IHRoZVwtc3dhbGxvdzsKK+SxvSA+IHRoZVwtcG9tZnJldDsKK+SxuiA+IGFcLW1hbGVcLWNyYWI7CivksbYgPiBhXC1tYWxlXC1jcmFiOwor5LGSID4gc2FsdGVkXC1maXNoOwor5K+jID4gdGhlXC1rbmVlY2FwOwor5K+YID4gdGhlXC1rbmVlY2FwOwor5K6YID4geW91bmdcLWhvcnNlOwor5KuzID4gaHVtYW5cLXNrdWxsOwor5KuwID4gc3BhcnNlXC1oYWlyOwor5KutID4gYmFsZFwtaGVhZGVkOwor5KucID4gc3Vua2VuXC1leWVzOwor5KuEID4gYmV0dGVyXC10aGFuOwor5Kq0ID4gdGhlXC1vY2NpcHV0Owor5KqEID4gZ3JlYXRcLWJsYXplOwor5Km7ID4gdG9cLWJlXC1jaGllZjsKK+SpnCA+IGRlc2NlbmRhbnRzOwor5KixID4gc3BpbHRcLXdhdGVyOwor5Ke2ID4gdG9cLWNhcmVcLWZvcjsKK+SnqCA+IHByZWNpcGl0b3VzOwor5KeeID4gdG9cLWluY3JlYXNlOwor5KeTID4gYVwtYmlnXC1tb3VuZDsKK+SniiA+IGFcLWJpZ1wtbW91bmQ7CivkprcgPiB0b1wtc3RydWdnbGU7CivkprYgPiB0b1wtc3RydWdnbGU7Civkpp8gPiB0b1wtc3RydWdnbGU7CivkppsgPiB0b1wtc3RydWdnbGU7CivkppggPiBhXC10aHJlc2hvbGQ7CivkpYAgPiB0b1wtcHVsbFwtb3V0Owor5KStID4gdG9cLW9ybmFtZW50Owor5KSFID4gc291dGhlcndvb2Q7CivkookgPiBhZ3JpY3VsdHVyZTsKK+SgnSA+IHRvXC1zdGFuZFwtdXA7CivkoI0gPiBhdFwtdGhlXC1mZWV0Owor5J+1ID4gdG9cLXRyZWFkXC1vbjsKK+SfryA+IHRvXC10cmVhZFwtb247Civkn4UgPiB0b1wtZ29cLWFoZWFkOwor5J+BID4gYVwtZm9vdFwtcmFjZTsKK+SevSA+IHRvXC1saWVcLWZsYXQ7CivknqggPiBoYWxmXC1hXC1wYWNlOwor5J6mID4gdG9cLWxpZVwtZmxhdDsKK+SeiiA+IHRvXC1pbmNyZWFzZTsKK+SehCA+IHRvXC1kaXNwZXJzZTsKK+SdjSA+IGFcLXdpbGRcLWJvYXI7CivknYAgPiBnYXJkZW5cLXBlYXM7CivknLAgPiBkZWVwXC12YWxsZXk7CivknK4gPiBkZWVwXC12YWxsZXk7CivknJcgPiBhbmdyeVwtd29yZHM7CivknI8gPiB0b1wtd2l0aGRyYXc7CivknIYgPiBoYXN0eVwtd29yZHM7Civkm5ggPiB0b1wtdGhpbmtcLW9mOwor5Jq+ID4gdG9cLXRoaW5rXC1vZjsKK+SasyA+IGRvXC1ub3RcLWtub3c7CivkmrIgPiB0b1wtbGF1Z2hcLWF0Owor5Jm+ID4gdG9cLXdhaXRcLWZvcjsKK+SZsSA+IGFcLWxvbmdcLWNvYXQ7CivkmbAgPiBuZXdcLWZlYXRoZXI7CivkmYIgPiBzaG9ydFwtcGFudHM7CivkmLQgPiBzaG9ydFwtcGFudHM7Civkl5YgPiB0aGVcLXJhaW5ib3c7CivklbggPiB3aGVhdFwtc3RyYXc7CivklaMgPiB3YXRlclwtcGxhbnQ7CivklYwgPiB5b3VuZ1wtZ3JhaW47CivklL8gPiBsdXNoXC1ncm93dGg7Civkk64gPiBsdXNoXC1ncm93dGg7Civkk48gPiBmbG91cmlzaGluZzsKK+SSiyA+IGFpclwtY3VycmVudDsKK+SQmiA+IGdvb2RcLWdyYWNlczsKK+SPtiA+IHRoZVwtc3RvbWFjaDsKK+SPlCA+IHRvXC1lYXRcLW1lYXQ7Civkj5MgPiB0aGVcLXN0b21hY2g7CivkjaggPiB0b1wtY2FzdHJhdGU7CivkjLogPiBmbG91cmlzaGluZzsKK+SMqiA+IHRvXC1jb250aW51ZTsKK+SMpiA+IGdyZWVuXC1jb2xvcjsKK+SKrSA+IHRvXC1vdmVydHVybjsKK+SKqyA+IGNvYXJzZVwtcmljZTsKK+SKoiA+IHRoaWNrXC1mbHVpZDsKK+SKkyA+IHRvXC1wYXN0ZVwtdXA7CivkiZ0gPiBiYW1ib29cLXdhcmU7CivkiYogPiBiYW1ib29cLXdhcmU7CivkiLggPiBhXC1iaWdcLWNoZXN0Owor5IiAID4gYmFtYm9vXC13YXJlOwor5IeVID4gdG9cLXdhaXRcLWZvcjsKK+SHkyA+IHRvXC13YWl0XC1mb3I7Civkh4MgPiB0b1wtd2FpdFwtZm9yOwor5IazID4gZmFyXC1kaXN0YW50Owor5IaYID4gYWN1cHVuY3R1cmU7CivkhpYgPiBhXC1iaWdcLWhvdXNlOwor5IW7ID4gbWVhc3VyZW1lbnQ7CivkhYQgPiBsb25nXC1ncmFpbnM7CivkhL0gPiBjb21tb25cLXJpY2U7CivkhIQgPiBhY2hpZXZlbWVudDsKK+SDrSA+IGFcLXN0b25lXC1ib3g7CivkgrEgPiB0b1wtd2Vhclwtb3V0Owor5IKkID4gd2hpdGVcLXN0b25lOwor5IKhID4gYVwtd2hldHN0b25lOwor5IKTID4gcmVndWxhdGlvbnM7CivkgbsgPiBwcmV0dHlcLWV5ZXM7CivkgbcgPiBicmlnaHRcLWV5ZXM7CivkgbEgPiBob2xsb3dcLWV5ZWQ7CivkgZEgPiBwcmV0dHlcLWV5ZXM7CivkgKYgPiB0b1wtc3RhcmVcLWF0Owor5ICCID4gYVwtYmlnXC1iYXNpbjsKK+O/oyA+IHdoaXRlXC1jb2xvcjsKK+O/mCA+IHRvXC1nZXRcLXNpY2s7CivjvrogPiBleWVcLWRpc2Vhc2U7Civjvp0gPiB0b1wtbGVha1wtb3V0Owor476XID4gZXllXC1kaXNlYXNlOwor476IID4gaHVuY2hiYWNrZWQ7CivjvoMgPiBodW1wXC1iYWNrZWQ7CivjvaogPiBwYWRkeVwtZmllbGQ7CivjvYYgPiBlYXJ0aGVud2FyZTsKK+O9gCA+IGVhcnRoZW53YXJlOwor47y7ID4gZWFydGhlbndhcmU7CivjvLggPiBlYXJ0aGVud2FyZTsKK+O8tiA+IGVhcnRoZW53YXJlOwor47yzID4gZWFydGhlbndhcmU7CivjvK8gPiBlYXJ0aGVud2FyZTsKK+O8rCA+IGVhcnRoZW53YXJlOwor47ymID4gZWFydGhlbndhcmU7CivjvKQgPiBlYXJ0aGVud2FyZTsKK+O8mCA+IG9mXC1tb3VudGFpbjsKK+O8kyA+IG1lbG9uXC1zZWVkczsKK+O7kyA+IGFcLWZpbmVcLWphZGU7CivjuaAgPiBhXC1zbWFsbFwtYmlnOwor47igID4gdGhpY2tcLXN0aWNrOwor47aRID4gb3ZlcmZsb3dpbmc7Civjta4gPiBjbGVhclwtd2F0ZXI7CivjtaQgPiB0b1wtb3ZlcmZsb3c7CivjtZUgPiB0b1wtcGVybWVhdGU7CivjtJggPiB0b1wtb296ZVwtb3V0Owor47KwID4gYVwtaGFpcnlcLWRvZzsKK+OykiA+IHRvXC1pbmN1YmF0ZTsKK+OxqSA+IGFuXC1hYm9ydGlvbjsKK+OwsiA+IHRvXC1ibG93XC1vZmY7CivjsK4gPiB0b1wtbGF1Z2hcLWF0Owor47CeID4gdG9cLWxhdWdoXC1hdDsKK+OviCA+IHNtYWxsXC10cmVlczsKK+OunyA+IGFcLXdoZXRzdG9uZTsKK+OunSA+IGFuZ2xlXC1zdGVlbDsKK+OttCA+IHRoZVwtb3NjaW5lczsKK+OtjiA+IGFcLXRhbGxcLXRyZWU7CivjrLIgPiB0b1wtaW5jcmVhc2U7CivjrKkgPiBhXC10aW55XC1zdGFyOwor46u1ID4gd2hpdGVcLWNvbG9yOwor46uYID4gZGlzYXBwZWFyZWQ7CivjqrogPiB0b1wtYmFsZVwtb3V0Owor46mIID4gdG9cLXJlc3RyYWluOwor46mFID4gdG9cLWRyYXdcLW91dDsKK+OouiA+IHRvXC1vcm5hbWVudDsKK+OotSA+IHRvXC1jdXRcLWF3YXk7CivjqLQgPiB0b1wtdHVybm92ZXI7CivvqKogPiBjb29rZWRcLXJpY2U7CivjqJUgPiB0b1wtc2hvdWxkZXI7Civvp7IgPiBmaXNoXC1zY2FsZXM7Civjp5QgPiB0b1wtZGlzdHVyYmU7Civvp4kgPiB3aWxsb3dcLXRyZWU7Civvp4UgPiBoYWxvXC1pblwtc2t5Owor46afID4gaW50ZWxsaWdlbnQ7CivvppggPiBhXC1oYW5kXC1jYXJ0Owor46aSID4gdG9cLWRlY2VpdmVkOwor76WoID4gdG9cLXNlZXBcLW91dDsKK++lpSA+IGNvbnZlbmllbmNlOwor46ShID4gdG9cLXN1cnByaXNlOwor46SbID4gdG9cLXJlbWVtYmVyOwor46SVID4gbWVsYW5jaG9sb3k7CivjpIEgPiB0b1wtZGlzZ3JhY2U7Civjo74gPiBkb1wtbm90XC1jYXJlOwor46O1ID4gdG9cLXJ1blwtYXdheTsKK+OjpSA+IHRvXC1zdG9yZVwtdXA7CivjorMgPiBibGFja1wtY29sb3I7CivjopMgPiB0b1wtc2VwYXJhdGU7Civjob4gPiBhXC10aHJlc2hvbGQ7CivjoJYgPiBwcmVjaXBpdG91czsKK+OemCA+IGFcLXNtYWxsXC1waWc7CivjnbQgPiBhXC1yb3VuZFwtb2ZmOwor452UID4gZGVlcFwtYm90dG9tOwor45yjID4gYVwtbGFzdFwtbmFtZTsKK+OcjiA+IHNsYXZlXC1naXJsczsKK+ObkSA+IHRocmVlXC13b21lbjsKK+OaviA+IHRvXC1oYXZlXC1mdW47CivjmacgPiBlYXJ0aGVud2FyZTsKK+OYtiA+IGFcLWhlblwtcm9vc3Q7CivjmKUgPiB0b1wtaW52ZWlnbGU7CivjmIYgPiB0b1wtbGF1Z2hcLWF0Owor45eXID4gdG9cLXNlcGFyYXRlOwor45a9ID4gdG9cLWNhbGxcLW91dDsKK+OWoyA+IHRvXC1zcGl0XC1vdXQ7Civjlp4gPiBhXC13cnlcLW1vdXRoOwor45aWID4gdG9cLXNwaXRcLW91dDsKK+OWlSA+IHRvXC1zcGl0XC1vdXQ7CivjlpEgPiB0b1wtc2hvdXRcLWF0Owor45S8ID4gdG9cLWZpdFwtaW50bzsKK+OUtiA+IGFcLXNtYWxsXC1jdXA7CivjlI8gPiB0b1wtY3V0XC1vcGVuOwor45OsID4gdG9cLWN1dFwtb3BlbjsKK+OTqSA+IGhvcm5lZFwtaGFpcjsKK+OSqCA+IGFuXC1pbW1vcnRhbDsKK+OSpSA+IGFuXC1pbW1vcnRhbDsKK+ORvSA+IHRvXC13YXJkXC1vZmY7CivnmoQgPiBwb3NzZXNzaXZlOwor6L68ID4gY3Jvd2RcLWludG87CivovrsgPiBjcm9zc3JvYWRzOwor6IO9ID4gdG9cLWJlXC1hYmxlOwor6YO9ID4gbWV0cm9wb2xpczsKK+aWhyA+IGxpdGVyYXR1cmU7CivovY0gPiB3YWdvblwtcnV0czsKK+i8qSA+IGdlbmVyYXRpb247CivnnKkgPiB0b1wtY29uZnVzZTsKK+ecoCA+IGNsb3NlXC1leWVzOwor6LydID4gYnJpZ2h0bmVzczsKK+W8kCA+IG51bWJlclwtdHdvOwor6ICFID4gdGhhdFwtd2hpY2g7CivkuJogPiBwcm9mZXNzaW9uOwor5bqcID4gcHJlZmVjdHVyZTsKK+aUvyA+IGdvdmVybm1lbnQ7CivkuJYgPiBnZW5lcmF0aW9uOwor5LqnID4gZ2l2ZVwtYmlydGg7CivlnLogPiBvcGVuXC1zcGFjZTsKK+avlCA+IHRvXC1jb21wYXJlOwor55ayID4gZmVlbFwtdGlyZWQ7CivnlLsgPiBhXC1wYWludGluZzsKK+eUoyA+IGdpdmVcLWJpcnRoOwor5pybID4gdG9cLWxvb2tcLWF0Owor6LO6ID4gbWFrZVwtbW9uZXk7Civlha0gPiBudW1iZXJcLXNpeDsKK+WxoSA+IGZyZXF1ZW50bHk7CivlsKQgPiBlc3BlY2lhbGx5Owor5bCIID4gbW9ub3BvbGl6ZTsKK+WfuiA+IGZvdW5kYXRpb247Civlj4wgPiBzZXRcLW9mXC10d287CivlrasgPiBncmFuZGNoaWxkOwor5LiTID4gbW9ub3BvbGl6ZTsKK+WsqiA+IGNvdXJ0XC1sYWR5Owor56a7ID4gcmFyZVwtYmVhc3Q7CivlqpIgPiBnb1wtYmV0d2VlbjsKK+iqjCA+IHdyaXRlXC1kb3duOwor6KqHID4gZXhhZ2dlcmF0ZTsKK+WTjSA+IG1ha2VcLXNvdW5kOwor5am/ID4gc29uXC1pblwtbGF3Owor54itID4gdG9cLWRpc3B1dGU7CivlmaggPiByZWNlcHRhY2xlOwor54efID4gZW5jYW1wbWVudDsKK+WmmSA+IG15c3RlcmlvdXM7Civog6EgPiByZWNrbGVzc2x5Owor5aaTID4gcHJvc3RpdHV0ZTsKK+ilpiA+IHNob3J0XC1jb2F0Owor5aWnID4gbXlzdGVyaW91czsKK+WlpSA+IG15c3RlcmlvdXM7Civlo7sgPiBzb25cLWluXC1sYXc7Civlo7EgPiBudW1iZXJcLW9uZTsKK+WtmSA+IGdyYW5kY2hpbGQ7CivokKUgPiBlbmNhbXBtZW50Owor5aC0ID4gb3Blblwtc3BhY2U7Civpg60gPiBvdXRlclwtcGFydDsKK+iuqCA+IHRvXC1kaXNjdXNzOwor5ruFID4gZXh0aW5ndWlzaDsKK+iZnCA+IHRvXC1jYXB0dXJlOwor56evID4gYWNjdW11bGF0ZTsKK+iPnCA+IHZlZ2V0YWJsZXM7Civll6MgPiB0b1wtY29ubmVjdDsKK+WXnCA+IGJlXC1mb25kXC1vZjsKK+S7iyA+IGZvcmVydW5uZXI7CivntKIgPiBsYXJnZVwtcm9wZTsKK+S4gSA+IG1hbGVcLWFkdWx0Owor6YGNID4gZXZlcnl3aGVyZTsKK+i+iCA+IGdlbmVyYXRpb247CivokpQgPiB0cmFuc3BsYW50Owor5oeCID4gdW5kZXJzdGFuZDsKK+mHiiA+IGludGVycHJldGU7CivnurUgPiBpbmR1bGdlXC1pbjsKK+eBrSA+IGV4dGluZ3Vpc2g7CivmrbQgPiB0YWtlXC1wbGFjZTsKK+S7gSA+IGh1bWFuZW5lc3M7CivmqoAgPiBzYW5kYWx3b29kOwor5YmKID4gc2NyYXBlXC1vZmY7CivliJEgPiBwdW5pc2htZW50Owor5bKCID4gaG93XD9cLXdoYXRcPzsKK+mahiA+IHByb3NwZXJvdXM7CivovokgPiBicmlnaHRuZXNzOwor5YiDID4gZWRnZWRcLXRvb2w7CivmnpAgPiBzcGxpdFwtd29vZDsKK+iFuCA+IGludGVzdGluZXM7Civmpa0gPiBwcm9mZXNzaW9uOwor5qWTID4gbWFwbGVcLXRyZWU7CivppIUgPiByaWNlXC1jYWtlczsKK+aeqyA+IG1hcGxlXC10cmVlOwor5YKNID4gYnlcLXNpZGVcLW9mOwor6IC9ID4gaW5kdWxnZVwtaW47CivpoLsgPiBmcmVxdWVudGx5Owor5qCTID4gd29vZGVuXC1wZWc7Civpn78gPiBtYWtlXC1zb3VuZDsKK+WHryA+IHRyaXVtcGhhbnQ7Civmga0gPiByZXNwZWN0ZnVsOwor56W4ID4gbWlzZm9ydHVuZTsKK+mikSA+IGZyZXF1ZW50bHk7CivnpoUgPiBtZWRpdGF0aW9uOwor5p+vID4gYXhlXC1oYW5kbGU7CivmjZAgPiBjb250cmlidXRlOwor6LiqID4gZm9vdHByaW50czsKK+WxgSA+IGJyZWFrXC13aW5kOwor6LCKID4gZnJpZW5kc2hpcDsKK+WCqCA+IHNhdmVcLW1vbmV5Owor6ZuBID4gd2lsZFwtZ29vc2U7CivmkYogPiBzcHJlYWRcLW91dDsKK+WQqCA+IG1ldHJpY1wtdG9uOwor5LmNID4gZmlyc3RcLXRpbWU7CivpmYAgPiBzdGVlcFwtYmFuazsKK+e4sSA+IGluZHVsZ2VcLWluOwor57imID4gaW5kdWxnZVwtaW47CivogqAgPiBpbnRlc3RpbmVzOwor6LWaID4gbWFrZVwtbW9uZXk7Civntr8gPiBjb3R0b25cLXdhZDsKK+e2sSA+IGhlYXZ5XC1yb3BlOwor57u1ID4gY290dG9uXC13YWQ7CivmipEgPiBwcmVzc1wtZG93bjsKK+mlvCA+IHJpY2VcLWNha2VzOwor5b2sID4gY3VsdGl2YXRlZDsKK+aSriA+IGxpdHRsZVwtYml0Owor57KlID4gcmljZVwtZ3J1ZWw7Civom64gPiBiYXJiYXJpYW5zOwor5664ID4gY2hvcHN0aWNrczsKK+ettSA+IGJhbWJvb1wtbWF0Owor6ImHID4gc21hbGxcLWJvYXQ7CivmjYwgPiBicmVha1wtb3BlbjsKK+esoCA+IGJhbWJvb1wtaGF0Owor5bqeID4gZGlzb3JkZXJseTsKK+mLqiA+IHNwcmVhZFwtb3V0Owor56udID4gdG9cLWNvbWJpbmU7CivnqY0gPiBhY2N1bXVsYXRlOwor5omJID4gZG9vclwtcGFuZWw7CivnurIgPiBoZWF2eVwtcm9wZTsKK+mHiyA+IGludGVycHJldGU7Civph4ggPiBpbnRlcnByZXRlOwor5Z2dID4gZW1iYW5rbWVudDsKK+aGpyA+IGlycmVzb2x1dGU7CivnlKkgPiB0aHJvd1wtYXdheTsKK+ellSA+IG15c3RlcmlvdXM7CivphYwgPiBzZXJ2ZVwtd2luZTsKK+ejkCA+IGxhcmdlXC1yb2NrOwor6L6FID4gY2hlZWtcLWJvbmU7CivmjaEgPiB0b1wtcGlja1wtdXA7CivnrbcgPiBjaG9wc3RpY2tzOwor6LmIID4gc3RhbXBcLWZlZXQ7CivmmZIgPiBkcnlcLWluXC1zdW47CivmrbwgPiBhbm5paGlsYXRlOwor5rapID4gYXN0cmluZ2VudDsKK+mcjiA+IGxpZ2h0XC1yYWluOwor5pOFID4gbW9ub3BvbGl6ZTsKK+iUrCA+IHZlZ2V0YWJsZXM7Civnu7ggPiBzaWxrXC1jbG90aDsKK+ecryA+IGJlXC1ibGluZGVkOwor5a+FID4gdG9cLXJlc3BlY3Q7CivomY8gPiB0b1wtY2FwdHVyZTsKK+ectiA+IGV5ZVwtc29ja2V0Owor56KfID4gc21hbGxcLWRpc2g7CivolbQgPiB0b1wtY29sbGVjdDsKK+i/rSA+IHJlcGVhdGVkbHk7Civml60gPiByaXNpbmdcLXN1bjsKK+aCjSA+IGNvdXJhZ2VvdXM7CivmnqIgPiBkb29yXC1oaW5nZTsKK+i3iyA+IGdvXC1ieVwtZm9vdDsKK+WcqiA+IFwocGhvbmV0aWNcKTsKK+aQlCA+IHRvXC1zY3JhdGNoOwor5ZqOID4gY3J5XC1sb3VkbHk7CivovpkgPiB3YWdvblwtcnV0czsKK+axmyA+IGhpZ2hcLXdhdGVyOwor6ISvID4gZHJpZWRcLW1lYXQ7Civll5IgPiB0b1wtZGVzcGFpcjsKK+WinyA+IGhpZ2hcLW1vdW5kOwor6aaLID4gZ2x1dHRvbm91czsKK+WovCA+IHByb3N0aXR1dGU7Civoua0gPiB0b1wtc2h1ZmZsZTsKK+a+iCA+IHRob3JvdWdobHk7CivnvK0gPiB3aW5kXC1yb3VuZDsKK+WWsyA+IHdoaXNwZXJpbmc7CivlvKcgPiB3b29kZW5cLWJvdzsKK+i3uiA+IHN0YW1wXC1mZWV0Owor5oOGID4gZGlzdHJlc3NlZDsKK+aStSA+IGRyaXZlXC1hd2F5Owor5q6DID4gbWlzZm9ydHVuZTsKK+aBqiA+IHJlc3BlY3RmdWw7CivovbYgPiBydXNoXC1mb3J0aDsKK+iFhiA+IHByb3NwZXJvdXM7Civnqr8gPiBtaW5lXC1zaGFmdDsKK+aotSA+IHdvb2RjdXR0ZXI7CivnioAgPiByaGlub2Nlcm9zOwor57uaID4gdmFyaWVnYXRlZDsKK+iXlSA+IGxvdHVzXC1yb290Owor5pGeID4gdG9cLXBpbGVcLXVwOwor5rukID4gc3RyYWluXC1vdXQ7CivnvIggPiBpbmRpc3RpbmN0Owor6IKqID4gYW5pbWFsXC1mYXQ7CivnlIQgPiB0b1wtZXhhbWluZTsKK+mTmyA+IGZyeWluZ1wtcGFuOwor5auhID4gbGVnYWxcLXdpZmU7CivnmIEgPiBmZWVsXC10aXJlZDsKK+ejtyA+IHBob3NwaG9ydXM7Civnv6EgPiBraW5nZmlzaGVyOwor556RID4gY2xvc2VcLWV5ZXM7CivpnK0gPiBjbG91ZHlcLXNreTsKK+iIqyA+IGZhbmN5XC1ib2F0Owor57qoID4gd2hpdGVcLXNpbGs7CivmprcgPiBmb290YnJpZGdlOwor57OcID4gcmljZVwtZ3J1ZWw7Civlo7kgPiBudW1iZXJcLW9uZTsKK+iUlyA+IHN1Z2FyXC1jYW5lOwor5b2XID4gYnJvb21zdGljazsKK+WWnyA+IGhlYXZlXC1zaWdoOwor5ZaRID4gdG9cLWJlXC1kdW1iOwor6bG/ID4gY3V0dGxlZmlzaDsKK+WAnCA+IHJhaXNlXC1oaWdoOwor5L6pID4gZ29cLWJldHdlZW47Civmu4IgPiB0b3JyZW50aWFsOwor6LSwID4gbnVtYmVyXC10d287Civlv7sgPiBkZWxpZ2h0ZnVsOwor54enID4gZmxpbnRzdG9uZTsKK+eolCA+IHJpcGVcLWdyYWluOwor5auUID4gY291cnRcLWxhZHk7CivpookgPiBmbHlcLXVwd2FyZDsKK+iIuCA+IGxhcmdlXC1ib2F0Owor55yZID4gdG9cLWdhemVcLWF0Owor55iAID4gYVwtaGVtYXRvbWE7CivlpK8gPiBoZWF2eVwtbG9hZDsKK+mllSA+IGdsdXR0b25vdXM7CivpsqAgPiBmaXNoXC1ib25lczsKK+iMjyA+IHRhbGxcLWdyYXNzOwor6IyvID4gY2hpbmFcLXJvb3Q7CivpsqcgPiBnaWFudFwtZmlzaDsKK+mApiA+IG1lYW5kZXJpbmc7CivpqpwgPiB3aWxkXC1ob3JzZTsKK+asuSA+IGZpZXJjZVwtZG9nOwor57ybID4gZGVjb3JhdGl2ZTsKK+iLlSA+IHJ1c2hcLXBsYW50Owor6aG4ID4gbGFyZ2VcLWZhY2U7CivlsJUgPiBcKHBob25ldGljXCk7CivnvKYgPiBwbGFpblwtc2lsazsKK+W4mSA+IGJvb2tcLWNvdmVyOwor6bODID4gZmlzaFwtZ2lsbHM7CivphrQgPiBzd2VldFwtd2luZTsKK+i+iiA+IHR1cm5cLXJvdW5kOwor5bKYID4gc3RlZXBcLWhpbGw7CivlgKwgPiBub3RpY2VhYmxlOwor6bKeID4gZHJpZWRcLWZpc2g7CivnsJ8gPiBiYW1ib29cLW1hdDsKK+eouSA+IGFjY3VtdWxhdGU7CivnvIEgPiBibGFja1wtc2lsazsKK+eupyA+IHJhdHRhblwtYm94Owor5aKBID4gdG9cLXBsYXN0ZXI7CivnvbQgPiBicm93blwtYmVhcjsKK+eIsCA+IGxlYWRcLW9uXC10bzsKK+adsiA+IGJyaWdodFwtc3VuOwor55mUID4gaHlzdGVyaWNhbDsKK+aeiyA+IHNhbmRhbHdvb2Q7CivojpwgPiBhdmVuYVwtbnVkYTsKK+WfmSA+IGluc3RydW1lbnQ7Civnjb4gPiB0aGVcLWJhZGdlcjsKK+iOsyA+IHRyYW5zcGxhbnQ7Civpg6sgPiBwbGFjZVwtbmFtZTsKK+ibjyA+IHJhem9yXC1jbGFtOwor5qmlID4gd29vZGVuXC1wZWc7CivluJEgPiBhXC10cmVhc3VyeTsKK+aPoCA+IHRvXC1wdWxsXC11cDsKK+i2kSA+IGNhbicndFwtbW92ZTsKK+mYjSA+IGdhdGVrZWVwZXI7CivmjoogPiB0b1wtZXh0cmFjdDsKK+mVnSA+IGR5c3Byb3NpdW07CivnoJcgPiBnaWFudFwtY2xhbTsKK+WrqyA+IHVnbHlcLXdvbWFuOwor6JSMID4gdmVnZXRhYmxlczsKK+i3lyA+IHRoZVwtaW5zdGVwOwor5rW8ID4gdG9cLXJlcXVlc3Q7Civll4wgPiB0aGVcLXRocm9hdDsKK+WUkSA+IFwocGhvbmV0aWNcKTsKK+axhiA+IHRvXC1wYXJib2lsOwor5YitID4gY3V0XC10aHJvYXQ7Civpq4IgPiB0aGVcLXBlbHZpczsKK+iJiyA+IHNtYWxsXC1ib2F0Owor6ZK8ID4gbW9seWJkZW51bTsKK+aGnSA+IHRvXC1kaXNsaWtlOwor54KFID4gYnJpbGxpYW5jZTsKK+masyA+IHRvXC1kZXN0cm95Owor6IybID4gcmFudW5jdWx1czsKK+ezhyA+IGRyaWVkXC1yaWNlOwor6ZKGID4gZ2Fkb2xpbml1bTsKK+a+jCA+IHRvXC1leGhhdXN0Owor5bqAID4gdG9cLXByZXBhcmU7CivnirQgPiBhXC13aWxkXC1kb2c7Civln48gPiBhXC1ib3VuZGFyeTsKK+WHtSA+IHJlY2VwdGFjbGU7CivosK4gPiB0b1wtc2xhbmRlcjsKK+m+oiA+IGluXC1oYXJtb255Owor6b6QID4gZGlzb3JkZXJseTsKK+m+jiA+IGRpc29yZGVybHk7CivpvKcgPiB0aGVcLW1hcm1vdDsKK+m8hCA+IHRoZVwtc3BpZGVyOwor6bu5ID4gZW1icm9pZGVyeTsKK+m7siA+IGdyZXlcLWJsYWNrOwor6buqID4gZ3JleVwtYmxhY2s7Civpu6QgPiBibHVlXC1ibGFjazsKK+m4uiA+IGhvcm5lZFwtb3dsOwor6bWSID4gbXluYWhcLWJpcmQ7CivptYIgPiBob3JuZWRcLW93bDsKK+m0tyA+IHdvb2RwZWNrZXI7CivptIggPiB3aWxkXC1nb29zZTsKK+mzsiA+IHR1cnRsZWRvdmU7Civps6sgPiB3aWxkXC1nb29zZTsKK+mysCA+IHNtYWxsXC1maXNoOwor6bGQID4gZHJpZWRcLWZpc2g7CivpsYcgPiBhbmdsZXJmaXNoOwor6bCTID4gZmlzaFwtZ2lsbHM7CivpsIIgPiBjdXR0bGVmaXNoOwor6a+rID4gc21hbGxcLWZpc2g7Civpr5cgPiBkcmllZFwtZmlzaDsKK+mvgSA+IGZpc2hcLWJvbmVzOwor6a+AID4gZ2lhbnRcLWZpc2g7Civprr8gPiBkcmllZFwtZmlzaDsKK+munyA+IGFuZ2xlcmZpc2g7Civprp0gPiBkcmllZFwtZmlzaDsKK+mugSA+IHRoZVwtYm9uaXRvOwor6a23ID4gY3V0dGxlZmlzaDsKK+mtmyA+IHRoZVwtbXVsbGV0Owor6ayoID4gYm9pc3Rlcm91czsKK+msnCA+IHRvXC1nb1wtYmFsZDsKK+mroyA+IHNpbWlsYXJcLXRvOwor6auBID4gdGhpZ2hcLWJvbmU7CivpqYEgPiB3aWxkXC1ob3JzZTsKK+molyA+IHRvXC1zd2luZGxlOwor6aiLID4gdGFsbFwtaG9yc2U7CivpqIkgPiBmaW5lXC1ob3JzZTsKK+mnsCA+IGdyZXlcLWhvcnNlOwor6aa5ID4gcG9zdFwtaG9yc2U7CivppZ4gPiBnbHV0dG9ub3VzOwor6aSgID4gcmljZVwtY2FrZXM7CivpoKEgPiBmbHlcLXVwd2FyZDsKK+mghyA+IGxhcmdlXC1mYWNlOwor6Z6hID4gbGVnXC13YXJtZXI7CivpnbAgPiBsZWdcLXdhcm1lcjsKK+mdnSA+IHRoZVwtaGVhdmVuOwor6Z2JID4gY2xvdWR5XC1za3k7CivpnYYgPiBjbG91ZHlcLXNreTsKK+mdhCA+IGNsb3VkeVwtc2t5Owor6ZuwID4gYXRtb3NwaGVyZTsKK+mbmSA+IHNldFwtb2ZcLXR3bzsKK+mariA+IHRpXC1yaXNlXC11cDsKK+mZuyA+IHNtYWxsXC1oaWxsOwor6ZmRID4gcGxhY2VcLW5hbWU7CivpmK8gPiBmb3VuZGF0aW9uOwor6ZefID4gcGVhY2VmdWxseTsKK+mWvSA+IGdhdGVrZWVwZXI7CivplqcgPiBib2lzdGVyb3VzOwor6ZWaID4gc21hbGxcLWNvaW47CivplKwgPiBsb25nXC1zcGVhcjsKK+mStyA+IHByb21ldGhpdW07CivpkLogPiBmcnlpbmdcLXBhbjsKK+mQtiA+IG1ldGFsXC1yaW5nOwor6ZCaID4gc29mdFwtc3RlZWw7CivpkJIgPiBsYXdyZW5jaXVtOwor6ZCAID4gYVwtY3VwYm9hcmQ7Civpj5EgPiBkeXNwcm9zaXVtOwor6Y6qID4gdG9cLWVuZ3JhdmU7CivpjpsgPiBsYXJnZVwtYmVsbDsKK+mNgCA+IHRlY2huZXRpdW07CivpjJ8gPiBsb25nXC1zcGVhcjsKK+mMniA+IGluc3RydW1lbnQ7CivpjI8gPiBzb2Z0XC1zdGVlbDsKK+mJrCA+IG1vbHliZGVudW07CivpiIogPiBjYWRvbGluaXVtOwor6YeTID4gZ2Fkb2xpbml1bTsKK+mGoSA+IHdpbmVcLXByZXNzOwor6YadID4gd2hpdGVcLXdpbmU7CivphYUgPiByYWlzZVwtZmVldDsKK+mDuSA+IHBsYWNlXC1uYW1lOwor6YKQID4gbWVhbmRlcmluZzsKK+mArCA+IHRvXC1zY2F0dGVyOwor6LylID4gdHVyblwtcm91bmQ7CivovJQgPiBjaGVla1wtYm9uZTsKK+i7vCA+IHJ1c2hcLWZvcnRoOwor6LqpID4gdGFrZVwtcXVpY2s7CivoupsgPiBleGFnZ2VyYXRlOwor6LqXID4gZXhhZ2dlcmF0ZTsKK+i5pCA+IGZvb3RwcmludHM7CivouKcgPiB1bmVhc2luZXNzOwor6LicID4gdG9cLXN0dW1ibGU7CivouJYgPiB0cmFtcGxlXC1vbjsKK+i3pSA+IHN0YW1wXC1mZWV0Owor6LeQID4gdG9cLXRyYW1wbGU7Civot4EgPiB0cmFtcGxlXC1vbjsKK+i2piA+IGNhbicndFwtbW92ZTsKK+iysyA+IG51bWJlclwtdHdvOwor6LKuID4gbnVtYmVyXC10d287CivosYggPiBob3dcP1wtd2hhdFw/Owor6LGAID4gdG9cLXF1YXJyZWw7Civora0gPiB0b1wtc2xhbmRlcjsKK+itmyA+IHRvXC1zbGFuZGVyOwor6K2WID4gdG9cLXNsYW5kZXI7CivorZIgPiBwcm9tdWxnYXRlOwor6KyqID4gdG9cLWNvbnN1bHQ7Civoq7QgPiBpblwtaGFybW9ueTsKK+irnyA+IHRvXC1leGFtaW5lOwor6Kq8ID4gZnJpZW5kc2hpcDsKK+iqqSA+IHRvXC1xdWFycmVsOwor6KiOID4gdG9cLWRpc2N1c3M7Civop4MgPiBwbGFjZVwtbmFtZTsKK+imuCA+IHN0ZWFsXC1sb29rOwor6Ka1ID4gc3RlYWxcLWxvb2s7CivopaEgPiBzaG9ydFwtY29hdDsKK+ijqiA+IHRoZVwtc2xlZXZlOwor6KKyID4gcGxhY2VcLW5hbWU7CivooqAgPiBib29rXC1jb3ZlcjsKK+iinyA+IGJvb2tcLWNvdmVyOwor6KC7ID4gYmFyYmFyaWFuczsKK+iftiA+IHJhem9yXC1jbGFtOwor6J+rID4gc2lsdmVyZmlzaDsKK+ifoyA+IGxvdXNlXC1lZ2dzOwor6J+BID4gYVwtbW9zcXVpdG87Civom5wgPiB3b29kXC1sb3VzZTsKK+iYoiA+IHRhbGxcLWdyYXNzOwor6JanID4gZHJpZWRcLWZvb2Q7CivolaEgPiBoZW1wXC1zZWVkczsKK+iTtyA+IG1vdGhlcndvcnQ7Civokr0gPiBhbnRocmFjZW5lOwor6JKmID4gdG9cLW1lYXN1cmU7CivokpYgPiBwbGFudFwtbmFtZTsKK+iRryA+IG9ycmlzXC1yb290Owor6I6aID4gYmFtYm9vXC1tYXQ7CivojbUgPiBwb2xlbW9uaXVtOwor6ImsID4gbGFyZ2VcLXNoaXA7CivoiZEgPiBzbWFsbFwtYm9hdDsKK+iItCA+IHNtYWxsXC1ib2F0Owor6IaTID4gaW50ZXN0aW5lczsKK+iEqiA+IGVyeXNpcGVsYXM7CivohKkgPiBkcmllZFwtbWVhdDsKK+iElyA+IGNvaW5jaWRpbmc7CivogrggPiBzcHJlYWRcLW91dDsKK+iCpiA+IGxhcmdlXC1oZWFkOwor6IGfID4gc29uXC1pblwtbGF3Owor57+AID4gZmx5XC11cHdhcmQ7CivnvoYgPiBicm93blwtYmVhcjsKK+e7iyA+IGxhcmdlXC1yb3BlOwor57maID4gd2luZFwtcm91bmQ7CivnuZAgPiBmaW5lXC1jbG90aDsKK+e4tSA+IHBsYWluXC1zaWxrOwor57ifID4gZGVjb3JhdGl2ZTsKK+e4hyA+IGRlY29yYXRpb247Civnt7IgPiBpbmRpc3RpbmN0Owor57ecID4gY290dG9uXC13YWQ7Civnt4cgPiBibGFja1wtc2lsazsKK+e2oiA+IHNpbGtcLWNsb3RoOwor57W6ID4gZmluZVwtbGluZW47CivntaIgPiB2YXJpZWdhdGVkOwor57WbID4gc2lsa1wtYnJhaWQ7CivntZYgPiBmaW5lXC1zaWxrczsKK+e1kyA+IG9ic3RydWN0ZWQ7CivntLwgPiBsYXJnZVwtcm9wZTsKK+e0iCA+IHdoaXRlXC1zaWxrOwor57K7ID4gcHJvdmlzaW9uczsKK+eypiA+IHBob3NwaG9ydXM7CivnsKUgPiBsYXJnZVwtcGlwZTsKK+evuSA+IHRvXC1jb2xsZWN0Owor56+yID4gYnJvb21zdGljazsKK+eviyA+IHJhdHRvblwtYm94Owor566gID4gaG9yc2VcLXdoaXA7CivnrpogPiBicmllZlwtbm90ZTsKK+etryA+IGNob3BzdGlja3M7Civnq7AgPiBjZW50aWxpdGVyOwor56uhID4gaGVjdG9saXRlcjsKK+erkyA+IG1pbGxpbGl0ZXI7CivnqrAgPiBicmlja1wta2lsbjsKK+eprSA+IHdpbGRcLWdyYWluOwor56iGID4gd2lsZFwtZ3JhaW47CivnpqogPiBtZWRpdGF0aW9uOwor56aaID4gcGxhY2VcLW5hbWU7Civnpo0gPiBtaXNmb3J0dW5lOwor56WFID4gY2FsYW1pdGllczsKK+ejkSA+IHN0b25lXC1taWxsOwor56GoID4gZ2lhbnRcLWNsYW07CivnoZkgPiBzdG9uZVwtbWlsbDsKK+ehgyA+IGFcLXJlZFwtbW9sZTsKK+efgSA+IHRvXC1sb29rXC1hdDsKK+ednyA+IGNsZWFyXC1leWVkOwor55yGID4gaW5kaXN0aW5jdDsKK+eWlSA+IGhlYWRcLXNvcmVzOwor55WTID4gcmljZVwtZmllbGQ7CivnlYEgPiB0b1wtZ2l2ZVwtdG87CivnlKIgPiBnaXZlXC1iaXJ0aDsKK+eOlCA+IGdyZWVuXC1qYWRlOwor546FID4gbXlzdGVyaW91czsKK+eMmCA+IGZpZXJjZVwtZG9nOwor54qbID4gYVwtYmxhY2tcLW94Owor54mPID4gcHJpdnlcLWhvbGU7CivniYsgPiBtZW1vcmFuZHVtOwor54irID4gcmFkaWNhbFwtODc7Civnh5AgPiBwaG9zcGhvcnVzOwor54aFID4gc21vb3RoXC1vdXQ7Civng5UgPiB0b1wtZGVzdHJveTsKK+eBuiA+IGNhbmRsZVwtZW5kOwor54GSID4gdG9cLXNwYXR0ZXI7Civmv74gPiBzdHJhaW5cLW91dDsKK+a/mSA+IHRvXC1yZXZvbHZlOwor5r+HID4gYXN0cmluZ2VudDsKK+a/hiA+IHJpdmVyXC1iYW5rOwor5r6BID4gYXN0cmluZ2VudDsKK+a+gCA+IGFzdHJpbmdlbnQ7Civmur4gPiBsaWdodFwtcmFpbjsKK+a4iyA+IGFzdHJpbmdlbnQ7CivmtpggPiByaXZlclwtYmFuazsKK+azhiA+IGxpY2VudGlvdXM7CivmrrIgPiBhbm5paGlsYXRlOwor5q6xID4gYW5uaWhpbGF0ZTsKK+attyA+IHRha2VcLXBsYWNlOwor5qyDID4gc2FuZGFsd29vZDsKK+arviA+IHRoZVwtcG9tZWxvOwor5qurID4gd29vZGVuXC1wZWc7CivmqrwgPiByaWRnZVwtcG9sZTsKK+aptCA+IHBsYWNlXC1uYW1lOwor5qieID4gZG9vclwtaGluZ2U7CivmprwgPiB3aW5lXC1nbGFzczsKK+ampiA+IHRyZWVcLXRydW5rOwor5qWqID4gc21hbGxcLWRpc2g7CivmpLUgPiBwb21wZWxtb3VzOwor5qSzID4gdGhlXC1waXZvdHM7CivmpIwgPiBpbnN0cnVtZW50Owor5qC0ID4gc2FuZGFsd29vZDsKK+agmyA+IHRoZVwtbGljaGVlOwor5qCYID4gZnJ1aXRcLXRyZWU7Civmn7cgPiBpbnN0cnVtZW50Owor5p2iID4gd29vZHdvcmtlcjsKK+acjCA+IGRpc3RyaWJ1dGU7Civmm6wgPiBkcnlcLWluXC1zdW47CivmmpggPiByaXNpbmdcLXN1bjsKK+aXlSA+IHBsYWNlXC1uYW1lOwor5peAID4gcGxhY2VcLW5hbWU7CivmlqIgPiB0b1wtcGx1bmRlcjsKK+aWkiA+IHZhcmllZ2F0ZWQ7CivmlKQgPiBzcHJlYWRcLW91dDsKK+aUhiA+IGRyaXZlXC1hd2F5Owor5pOqID4gdG9cLXR1Y2tcLWluOwor5pOlID4gZHJpdmVcLWF3YXk7Civmkr8gPiB0b1wtcGlja1wtdXA7CivmkrEgPiB0b1wtc2hvcnRlbjsKK+aOsSA+IHBpY2twb2NrZXQ7Civmjo4gPiBkcmFnXC1hc2lkZTsKK+aMrSA+IGZpc2hcLWJvbmVzOwor5oqFID4gdG9cLWNvbGxlY3Q7CivmiaEgPiBkcmFnXC1hbG9uZzsKK+aGuCA+IHRvXC1mbGF0dGVyOwor5oaNID4gYmVcLWhhdWdodHk7CivmhoAgPiB0b1wtcmVseVwtb247CivmhK4gPiBkaXN0cmVzc2VkOwor5oSTID4gcHJvZmxpZ2F0ZTsKK+aDjyA+IGF2YXJpY2lvdXM7CivmgZsgPiBkaXNvcmRlcmVkOwor5oCyID4gYmVcLWFueGlvdXM7Civlv4sgPiB0b1wtcmVseVwtb247CivlvqcgPiBldmVyeXdoZXJlOwor5b2/ID4gcmVzZW1ibGluZzsKK+W8jSA+IG51bWJlclwtdHdvOwor5byMID4gbnVtYmVyXC1vbmU7CivlvIcgPiBjb3Zlclwtb3ZlcjsKK+W7sSA+IGhhcm1vbmlvdXM7Civlu4AgPiB0b1wtY29uY2VhbDsKK+W6tCA+IHBsYWNlXC1uYW1lOwor5be8ID4gcGxhY2VcLW5hbWU7Civlt4IgPiBwbGFjZVwtbmFtZTsKK+W1mSA+IHBsYWNlXC1uYW1lOwor5bO0ID4gc3RlZXBcLWhpbGw7Civls5MgPiBwbGFjZVwtbmFtZTsKK+WxoiA+IGZyZXF1ZW50bHk7CivlsYQgPiB0aGVcLXZhZ2luYTsKK+WwgiA+IG1vbm9wb2xpemU7CivlrrwgPiB0eXJhbm5pY2FsOwor5a28ID4gbWlzZm9ydHVuZTsKK+WqnyA+IGx1c3RcLWFmdGVyOwor5aSFID4gdG9cLWRlc2NlbmQ7Civlo6kgPiBlbWJhbmttZW50Owor5aOOID4gaW5zdHJ1bWVudDsKK+WhsiA+IG9wZW5cLXNwYWNlOwor5aGkID4gaW5zdHJ1bWVudDsKK+WgriA+IGFcLWJvdW5kYXJ5Owor5aCDID4gY29tcGxpYW5jZTsKK+WdkiA+IHRvXC1jb21wYXJlOwor5ZymID4gd2F0ZXJcLWdhdGU7Civlm4wgPiBsb3F1YWNpb3VzOwor5Zq1ID4gZ2x1dHRvbm91czsKK+WasiA+IHJlYWRcLWFsb3VkOwor5Zm4ID4gbWV0cmljXC10b247CivlmZAgPiByZWNlcHRhY2xlOwor5ZiCID4gY3J5XC1sb3VkbHk7Civll60gPiBwbGFjZVwtbmFtZTsKK+WWuCA+IHBsYWNlXC1uYW1lOwor5Za2ID4gZW5jYW1wbWVudDsKK+WUvSA+IHRvXC10d2l0dGVyOwor5ZSfID4gcGxhY2VcLW5hbWU7CivlkbQgPiBicmVhdGhlXC1vbjsKK+WPhiA+IGNsb3VkeVwtc2t5Owor5Y2dID4gaGFpclwtc3R5bGU7Civlio8gPiB0b1wtYnV0Y2hlcjsKK+WKhCA+IGJyaWVmXC1ub3RlOwor5YmzID4gYnJpZWZcLW5vdGU7CivliYQgPiBjdXRcLXRocm9hdDsKK+WIvCA+IHRvXC1wbHVuZGVyOwor5YiEID4gZWRnZWRcLXRvb2w7Civlh7QgPiB0b1wtcmVseVwtb247Civlh7EgPiB0cml1bXBoYW50Owor5YeCID4gdG9cLXJlcXVlc3Q7CivlhpggPiB0b1wtbW92ZVwtb247CivlhZ8gPiB0b1wtYWR2YW5jZTsKK+WEiCA+IGdvXC1iZXR3ZWVuOwor5YOpID4gY291cmFnZW91czsKK+WBrSA+IHRyYW5zZ3Jlc3M7CivlgZ0gPiBub3RcLWZhY2luZzsKK+WAgCA+IGJld2lsZGVyZWQ7Civkv7sgPiB0b1wtcHJlcGFyZTsKK+S8tyA+IGRlc2NlbmRlbnQ7Civku5sgPiB5b3VuZ1wtZ2lybDsKK+S6ryA+IHRvXC1yZWNlaXZlOwor5LioID4gbnVtYmVyXC1vbmU7CivktqsgPiBmaW5lXC10ZWV0aDsKK+S2iSA+IGd1aW5lYVwtcGlnOwor5LWqID4gcHVyZVwtYmxhY2s7CivktZ0gPiBkYXJrXC1ibGFjazsKK+S1hyA+IHRvXC1kaXNsaWtlOwor5LOVID4gdGhlXC1waWdlb247Civks4wgPiB0aGVcLWN1Y2tvbzsKK+SzgCA+IHRoZVwtY3Vja29vOwor5LKrID4gdGhlXC1waWdlb247CivksqkgPiB0aGVcLWN1Y2tvbzsKK+SypSA+IHRoZVwtcGlnZW9uOwor5LGdID4gYmxhY2tcLWNhcnA7CivksYYgPiBzbWFsbFwtZmlzaDsKK+SxhSA+IHRoZVwtbXVsbGV0Owor5LGEID4gYVwtZmxhdGZpc2g7CivksLogPiBhXC1mbGF0ZmlzaDsKK+SwrCA+IHdpbGRcLWdob3N0Owor5LCEID4gc2hvcnRcLWhhaXI7Civkr5QgPiB0b1wtaW5jbGluZTsKK+SvkSA+IHRoZVwtcGVsdmlzOwor5K+MID4gdGhlXC1zYWNydW07Civkr4ogPiB0aGVcLXBlbHZpczsKK+SviCA+IHRoZVwtcGVsdmlzOwor5K6vID4gZmluZVwtaG9yc2U7Civkro0gPiBjdXJsaW5nXC11cDsKK+SujCA+IGZpbmVcLWhvcnNlOwor5K24ID4gYVwtc3RhbGxpb247CivkraMgPiByaWNlXC1jYWtlczsKK+SthCA+IGdsdXR0b25vdXM7CivkrLcgPiB3ZWxsXC1mZWVkXC47CivkrKIgPiBnbHV0dG9ub3VzOwor5KulID4gYVwtd3J5XC1uZWNrOwor5KujID4gYVwtd3J5XC1uZWNrOwor5KueID4gbGFyZ2VcLWhlYWQ7Civkq5MgPiBsYXJnZVwtaGVhZDsKK+SquiA+IHRlZXRocmlkZ2U7CivkqqAgPiBwdWx2ZXJpemVkOwor5KmxID4gYVwtc2NhYmJhcmQ7CivkqbAgPiBhXC1zY2FiYmFyZDsKK+SpoiA+IGFcLXNjYWJiYXJkOwor5KmZID4gYVwtc2NhYmJhcmQ7CivkqYMgPiBhcHBlYXJhbmNlOwor5KmBID4gdGhpblwtaGFpcnM7CivkqL0gPiB0b1wtcmVzb2x2ZTsKK+SoqSA+IHRoZVwtc3Bpcml0Owor5KigID4gY2xvdWR5XC1za3k7Civkp78gPiB0aGVcLW1hZ3BpZTsKK+SnsiA+IHRoZVwtbWFncGllOwor5KexID4gdGhlXC1waWdlb247Civkp6MgPiB0b1wtc3RvcFwtdXA7Civkpq8gPiB2ZXJ5XC1kZW5zZTsKK+SmpyA+IHRvXC1xdWFycmVsOwor5KaNID4gdG9cLWluY2x1ZGU7CivkpY4gPiBpbnN0cnVtZW50Owor5KS+ID4gdG9cLWNvbnRhaW47CivkpL0gPiBmYXJtXC10b29sczsKK+SkvCA+IG1ldGFsXC13aXJlOwor5KS5ID4gdG9cLWVuZ3JhdmU7CivkpIcgPiB3aGl0ZVwtd2luZTsKK+SipSA+IGluXC1oYXJtb255Owor5KGnID4gYVwtY2FycmlhZ2U7CivkoaQgPiBhXC1jYXJyaWFnZTsKK+ShmiA+IGltcGxlbWVudHM7CivkoY4gPiBhXC13aW5kbGFzczsKK+SguCA+IG9ic2VxdWlvdXM7CivkoLYgPiB0b1wtcHJvamVjdDsKK+SgqiA+IGZvb3RwcmludHM7CivkoKkgPiB0b1wtdXJpbmF0ZTsKK+SgpiA+IHRvXC1zdHVtYmxlOwor5KCfID4gdG9cLXRyaXBcLXVwOwor5KCYID4gb25lXC1sZWdnZWQ7Civkn7wgPiBmb290cHJpbnRzOwor5J+qID4gcmVwZWF0ZWRseTsKK+SfoSA+IHRvXC10cmFtcGxlOwor5J+ZID4gdG9cLXN0YWdnZXI7Civkn4QgPiBpblwtYVwtaHVycnk7CivknoUgPiB0b1wtZ2l2ZVwtdG87Civknb8gPiBob25vdXJhYmVsOwor5J23ID4gc2VjdXJpdGllczsKK+SdtCA+IHRvXC1wcmVzZW50Owor5J2xID4gdG9cLXRyb3VibGU7CivknZQgPiB0aGVcLWJhZGdlcjsKK+ScmyA+IHRvXC1zbGFuZGVyOwor5JyZID4gbm90XC1jbGV2ZXI7CivknJIgPiBleHByZXNzaW9uOwor5JyRID4gdG9cLXNsYW5kZXI7CivknIsgPiB0b1wtc3VzcGVuZDsKK+SbvSA+IGxvcXVhY2lvdXM7Civkm7wgPiB0b1wtc2xhbmRlcjsKK+SbsiA+IHRvXC1kZWNlaXZlOwor5JuuID4gdG9cLWRlc3Ryb3k7Civkm6sgPiB0b1wtZGVjZWl2ZTsKK+SbqSA+IHRvXC1zbGFuZGVyOwor5JumID4gbGl0aWdhdGlvbjsKK+SbliA+IGxvcXVhY2lvdXM7Civkm5UgPiB0b1wtZmxhdHRlcjsKK+SbjSA+IGxvcXVhY2lvdXM7Civkm4UgPiBsb3F1YWNpb3VzOwor5JuEID4gdG9cLWNvbnNvbGU7CivkmrkgPiB0b1wtcHJlcGFyZTsKK+SasCA+IHRvXC1wcmVwYXJlOwor5JqTID4gdG9cLW9ic2VydmU7Civkmo0gPiB0b1wtbG9va1wtYXQ7CivkmocgPiB0b1wtb2JzZXJ2ZTsKK+SZuiA+IHRvXC1vYnNlcnZlOwor5JmaID4gY3VybGluZ1wtdXA7CivkmKEgPiB0aGVcLXNsZWV2ZTsKK+SYlSA+IHByb3N0aXR1dGU7CivklrMgPiBqZWxseVwtZmlzaDsKK+SVoSA+IGNvbXBvc2l0YWU7CivklJggPiBmaXNoXC1wYXN0ZTsKK+STtSA+IHRvXC1ibG9zc29tOwor5JOkID4gdmVnZXRhdGlvbjsKK+SThiA+IHRvXC1jdXRcLXRoZTsKK+SSoiA+IHN3ZWV0XC1mbGFnOwor5JG/ID4gc21hbGxcLWJvYXQ7CivkkbAgPiBzbWFsbFwtYm9hdDsKK+SRrSA+IHdhclwtdmVzc2VsOwor5JGhID4gc21hbGxcLWJvYXQ7CivkkY0gPiB0b1wtc3dhbGxvdzsKK+SQoiA+IHRvXC13cmlua2xlOwor5I+tID4gdGhlXC1jaGVla3M7Civkj4wgPiB0b1wtdmlicmF0ZTsKK+SPiyA+IHJlc3BlY3RmdWw7Civkjp8gPiB0b1wtZmF3blwtb247CivkjbUgPiB5b3VuZ1wtZ29hdDsKK+SNniA+IGFcLWRyYWdcLW5ldDsKK+SNlyA+IHRvXC1oYW5nXC11cDsKK+SNlCA+IGFcLWZ1bGxcLW5ldDsKK+SMgCA+IHRvXC1hcnJhbmdlOwor5Iu2ID4gdG9cLXN0dW1ibGU7Civki7EgPiBhXC13aWxkXC15YWs7CivkircgPiBibGFja1wtc2lsazsKK+SKqSA+IHJpY2VcLWdyYXZ5Owor5ImNID4gdG9cLW9ic2VydmU7Civkh44gPiB0b1wtc3RhcnRsZTsKK+SHhyA+IHRoZVwtcGVvcGxlOwor5IaSID4gdG9cLWV4YW1pbmU7CivkhosgPiB0aGVcLWF1dHVtbjsKK+SFlCA+IGRlYWRcLWNyb3BzOwor5ISfID4gdG9cLXdvcnNoaXA7CivkhJMgPiB0b1wtd29yc2hpcDsKK+SEkSA+IHRvXC13b3JzaGlwOwor5ISQID4gdG9cLXdvcnNoaXA7CivkhIYgPiB0b1wtd29yc2hpcDsKK+SEhSA+IHRvXC13b3JzaGlwOwor5ISDID4gbWlzZm9ydHVuZTsKK+SEgSA+IHRvXC13b3JzaGlwOwor5IKEID4gdG9cLXN0YXJ0bGU7CivkgbogPiB0b1wtbG9va1wtYXQ7Civkga8gPiB0b1wtbG9va1wtYXQ7CivkgZ4gPiBhXC1wcm92aW5jZTsKK+SBmCA+IHRvXC1sb29rXC1hdDsKK+SBlSA+IHRvXC1sb29rXC1hdDsKK+SBkyA+IHRvXC1sb29rXC1hdDsKK+SBiSA+IHRvXC1leGFtaW5lOwor5IGIID4gdG9cLWV4YW1pbmU7CivkgYEgPiBzdHJhYmlzbXVzOwor5IC2ID4gc3RyYWJpc211czsKK+SAsSA+IHRvXC1leGFtaW5lOwor5ICvID4gdG9cLWxvb2tcLWF0Owor5ICZID4gdG9cLWxvb2tcLWF0Owor5ICGID4gdG9cLWV4aGF1c3Q7CivjvpkgPiBlcnlzaXBlbGFzOwor472oID4gZnJhZ21lbnRlZDsKK+O9oyA+IGFcLWZyb250aWVyOwor472YID4gYm9yZGVybGFuZDsKK+O8uSA+IGVhcnRlbndhcmU7CivjurMgPiBibGFja1wtbWljYTsKK+O6kyA+IGZvb3RwcmludHM7Civjuo8gPiB0aGVcLWJhZGdlcjsKK+O6hSA+IHRoZVwtbW9ua2V5Owor47mIID4gYVwtYmxhY2tcLW94Owor47ioID4gYVwtYmlnXC1idWxsOwor47iMID4gdG9cLXR3aW5rbGU7Civjt7cgPiB0aGlja1wtc291cDsKK+O3oSA+IHRvXC1zdGFydGxlOwor47atID4gYWxtb3N0XC1kcnk7CivjtpwgPiBkZWVwXC13YXRlcjsKK+O1nyA+IGxpZ2h0XC1yYWluOwor47WAID4gd2F0ZXJcLWZsb3c7CivjtJwgPiBldmVyeXdoZXJlOwor47OBID4gd2F0ZXJcLWZsb3c7Civjsq8gPiBsb25nXC1oYWlyeTsKK+OyniA+IHNob3J0XC1oYWlyOwor47KVID4gdmFyaWVnYXRlZDsKK+OyjCA+IGRvZycnc1wtaGFpcjsKK+OyiSA+IGVnZ1wtc2hlbGxzOwor47G4ID4gdG9cLWV4aGF1c3Q7CivjsbAgPiB0b1wtZGVzdHJveTsKK+OxpiA+IHRvXC1kaXNjYXJkOwor47GkID4gdG9cLWV4aGF1c3Q7CivjsZwgPiBwZXN0aWxlbmNlOwor47GbID4gdG9cLWRlc3Ryb3k7CivjsZogPiB0b1wtZGVzdHJveTsKK+OwuCA+IHRvXC1jb2xsZWN0Owor47CRID4gZnJ1aXRcLXRyZWU7Civjr4cgPiBhXC1zdG9ja2FkZTsKK+OtmCA+IGFcLXNjYWJiYXJkOwor462JID4gZmFybVwtdG9vbHM7CivjrLEgPiB0b1wtcmVwbGFjZTsKK+OsqiA+IHRvXC1mb2xkXC11cDsKK+OsnCA+IHRvXC1hZHZhbmNlOwor46ukID4gYVwtbG9uZ1wtZGF5Owor46q0ID4gdG9cLW1lYXN1cmU7CivjqpwgPiB0b1wtbWVhc3VyZTsKK+OqmiA+IHRvXC1zY2F0dGVyOwor46qUID4gdG9cLXNjYXR0ZXI7CivjqowgPiB0b1wtbGVhZFwtb247CivjqokgPiB0b1wtY29tYmluZTsKK+OpuSA+IHRvXC1waWxlXC1vbjsKK+OpuCA+IHRvXC1waWxlXC1vbjsKK+OpqiA+IHRvXC1jb2xsZWN0Owor46meID4gdG9cLWJhY2tcLXVwOwor46mdID4gdG9cLWNvbXBhcmU7CivjqZogPiB0b1wtY29sbGVjdDsKK+OpliA+IHRvXC1iYWNrXC11cDsKK+OpjSA+IHRvXC1iYWNrXC11cDsKK+OpgCA+IHRvXC1yZWNlaXZlOwor46i/ID4gdG9cLXJlY2VpdmU7CivjqLMgPiBhXC1jdXBib2FyZDsKK+OosiA+IHRvXC1iYWNrXC11cDsKK+OoryA+IHRvXC1lbmxhcmdlOwor46iuID4gdG9cLWxpZnRcLXVwOwor76imID4gbWV0cm9wb2xpczsKK+OoiiA+IHRvXC1kaXNjYXJkOwor76e4ID4gYmFtYm9vXC1oYXQ7Civvp64gPiBwaG9zcGhvcnVzOwor76ecID4gcHJvc3Blcm91czsKK++nkSA+IG51bWJlclwtc2l4Owor76a3ID4gc3dlZXRcLXdpbmU7CivjprYgPiByZXBlYXRlZGx5Owor46apID4gbWVsYW5jaG9seTsKK+OmmiA+IG1lbGFuY2hvbHk7CivvpowgPiB0YWtlXC1wbGFjZTsKK++mhCA+IHN0cmFpblwtb3V0Owor46aCID4gY29uc3RhbnRseTsKK+OltiA+IHRvXC1maWxsXC11cDsKK++lqiA+IGxhcmdlXC1yb3BlOwor46WjID4gdG9cLWJlbmVmaXQ7CivjpZogPiBtZWxhbmNob2x5Owor76WLID4gZnJlcXVlbnRseTsKK+OktyA+IHRvXC1kZWJhdWNoOwor46SpID4gdG9cLXJlc3BlY3Q7CivjpJAgPiBkaXNoYXJtb255Owor76SAID4gaG93XD9cLXdoYXRcPzsKK+OjvSA+IHRvXC1mb3JnaXZlOwor46OFID4gYm93XC1zdHJpbmc7Civjo4AgPiB0b1wtcmVib3VuZDsKK+OirSA+IGFcLWJvd1wtY2FzZTsKK+OimiA+IGFcLWNvcnJpZG9yOwor46KPID4gYVwtY2Vzc3Bvb2w7CivjoaUgPiB0b1wtY3VybFwtdXA7CivjnqAgPiBtYWxlXC1vcmdhbjsKK+OejiA+IGJvZHlcLXdhc3RlOwor456GID4gb25lXC1sZWdnZWQ7Civjna8gPiB0b1wtc29qb3VybjsKK+OchSA+IHRvXC1mYXduXC1vbjsKK+ObqiA+IHRvXC1zbGFuZGVyOwor45qgID4gZnVsbFwtZ3Jvd247Civjmo8gPiB0b1wtc2NhdHRlcjsKK+OZuiA+IGNyb3NzXC1yb2FkOwor45m0ID4gdG9cLWNvbmNlYWw7CivjmbIgPiB0b1wtc3RvcFwtdXA7CivjmYkgPiBwcm9zcGVyb3VzOwor45i/ID4gdG9cLWZpbGxcLXVwOwor45i7ID4gdG9cLXN0b3BcLXVwOwor45inID4gcHJlY2VkZW5jZTsKK+OYnSA+IHRvXC10YWtlXC1pbjsKK+OXrCA+IHRoaWNrXC1saXBzOwor45erID4gdG9cLXdoaXNwZXI7Civjl6IgPiBsb3F1YWNpb3VzOwor45eLID4gdGhlXC10aHJvYXQ7Civjl4cgPiB0b1wtc3dhbGxvdzsKK+OXhCA+IHRvXC1kZWNlaXZlOwor45a2ID4gdG9cLXN3YWxsb3c7CivjlpggPiB0b1wtc3RhcnRsZTsKK+OWhiA+IHRvXC1jb25kZW1uOwor45WrID4gdG9cLWltaXRhdGU7CivjlY0gPiB0b1wtaGVhcFwtdXA7CivjlYYgPiBmaW5lXC1zdG9uZTsKK+OUtyA+IHRvXC1zZWNyZXRlOwor45SYID4gdG9cLWRlZ3JhZGU7CivjlJMgPiB0b1wtc3RhbW1lcjsKK+OUjCA+IHRvXC1jdXRcLW9mZjsKK+OTuiA+IGNhc3RyYXRpb247Civjk64gPiB0b1wtZW5ncmF2ZTsKK+OTniA+IHRvXC1lbmdyYXZlOwor45OCID4gdHlyYW5uaWNhbDsKK+OStyA+IHRvXC1wcm9zcGVyOwor45KdID4gdG9cLWRlY2VpdmU7CivjkpwgPiByZXNwZWN0ZnVsOwor45KKID4gbG9xdWFjaW91czsKK+ORnCA+IHRvXC1lbmdyYXZlOwor45GCID4gdG9cLWltaXRhdGU7CivjkKQgPiB0b1wtaW1wbG9yZTsKK+S6hiA+IHRvXC1maW5pc2g7CivlrZAgPiBvZmZzcHJpbmc7CivlvrkgPiBwZW5ldHJhdGU7CivopoEgPiBuZWNlc3Nhcnk7CivovrEgPiBodW1pbGlhdGU7CivnnYAgPiBtYWtlXC1tb3ZlOwor5oiQID4gY29tcGxldGVkOwor552jID4gc3VwZXJ2aXNlOwor6LyvID4gZ2F0aGVyXC11cDsKK+W8pSA+IGV4dGVuc2l2ZTsKK+eboyA+IHN1cGVydmlzZTsKK+e+jiA+IGJlYXV0aWZ1bDsKK+W7giA+IHNpZGVcLXJvb207Civpl64gPiBhc2tcLWFib3V0Owor5bqtID4gY291cnR5YXJkOwor55mCID4gYmVcLWhlYWxlZDsKK+eXuiA+IHBhcmFseXNpczsKK+W3riA+IHRvXC1kaWZmZXI7Civpmr4gPiBkaWZmaWN1bHQ7CivotoUgPiBqdW1wXC1vdmVyOwor55WwID4gZGlmZmVyZW50Owor5LqyID4gcmVsYXRpdmVzOwor55WrID4gZGVsaW5lYXRlOwor55WcID4gbGl2ZXN0b2NrOwor55WRID4gZHJ5XC1maWVsZDsKK+eUmCA+IHN3ZWV0bmVzczsKK+iupCA+IHJlY29nbml6ZTsKK+iytCA+IGV4cGVuc2l2ZTsKK+iynSA+IHNlYVwtc2hlbGw7CivpmaIgPiBjb3VydHlhcmQ7Civovr4gPiBhcnJpdmVcLWF0Owor5LyXID4gbXVsdGl0dWRlOwor6K+GID4gcmVjb2duaXplOwor5YCSID4gZmFsbFwtb3ZlcjsKK+eOqSA+IHBsYXlcLXdpdGg7Civlg48gPiBhXC1waWN0dXJlOwor5a6FID4gcmVzaWRlbmNlOwor5o2uID4gdG9cLW9jY3VweTsKK+itryA+IHRyYW5zbGF0ZTsKK+itqyA+IHRhbGthdGl2ZTsKK+itmCA+IHJlY29nbml6ZTsKK+mAoCA+IGNvbnN0cnVjdDsKK+WqvCA+IG9sZFwtd29tYW47CivniqAgPiBzYWNyaWZpY2U7Civoqo0gPiByZWNvZ25pemU7CivniZIgPiBkb2N1bWVudHM7CivniYwgPiBzaWduYm9hcmQ7CivlqYYgPiBvbGRcLXdvbWFuOwor6KizID4gdHJhbnNsYXRlOwor54iQID4gZmlyZXBsYWNlOwor5LmFID4gbG9uZ1wtdGltZTsKK+WmviA+IGNvbmN1YmluZTsKK+WInSA+IGJlZ2lubmluZzsKK+imqiA+IHJlbGF0aXZlczsKK+mZpCA+IGVsaW1pbmF0ZTsKK+WGtSA+IGNvbmRpdGlvbjsKK+S5sSA+IGNvbmZ1c2lvbjsKK+WImyA+IGVzdGFibGlzaDsKK+emjyA+IGhhcHBpbmVzczsKK+i+kSA+IGdhdGhlclwtdXA7CivlgYcgPiBmYWxzZWhvb2Q7Civnqb8gPiBwZW5ldHJhdGU7CivooYYgPiBtdWx0aXR1ZGU7Civpob4gPiBsb29rXC1iYWNrOwor6KC2ID4gc2lsa3dvcm1zOwor5Li9ID4gYmVhdXRpZnVsOwor5riQID4gZ3JhZHVhbGx5Owor5byCID4gZGlmZmVyZW50Owor556nID4gZ2xhbmNlXC1hdDsKK+WfkiA+IGVuY2xvc3VyZTsKK+WfgyA+IGZpbmVcLWR1c3Q7CivonqIgPiBnbG93XC13b3JtOwor6YCAID4gc3RlcFwtYmFjazsKK+icuyA+IGRyYWdvbmZseTsKK+a8uCA+IGdyYWR1YWxseTsKK+e/uyA+IGZsaXBcLW92ZXI7CivlnI8gPiB0b1wtY2lyY2xlOwor5pmuID4gdW5pdmVyc2FsOwor6Ju5ID4gY2hyeXNhbGlzOwor5Li0ID4gZHJhd1wtbmVhcjsKK+ibiSA+IGRyYWdvbmZseTsKK+WNjyA+IGJlXC11bml0ZWQ7CivpupcgPiBiZWF1dGlmdWw7CivompUgPiBzaWxrd29ybXM7Civmua8gPiBob3RcLXdhdGVyOwor5L6LID4gcHJlY2VkZW50Owor6LS1ID4gZXhwZW5zaXZlOwor5rSyID4gY29udGluZW50Owor5p2+ID4gcGluZVwtdHJlZTsKK+S8mSA+IGNvbXBhbmlvbjsKK+avqyA+IGZpbmVcLWhhaXI7CivolY4gPiBidWNrd2hlYXQ7CivovpMgPiB0cmFuc3BvcnQ7Civms4EgPiBjb25kaXRpb247Civnm5EgPiBzdXBlcnZpc2U7CivmipggPiBicmVha1wtb2ZmOwor5rGwID4gZXhjZXNzaXZlOwor5ZCbID4gc292ZXJlaWduOwor5Y2xID4gZGFuZ2Vyb3VzOwor5qaCID4gZ2VuZXJhbGx5Owor6YCPID4gcGVuZXRyYXRlOwor5ZyIID4gdG9cLWNpcmNsZTsKK+auiiA+IGRpZmZlcmVudDsKK+auhiA+IGRhbmdlcm91czsKK+WOhCA+IGFkdmVyc2l0eTsKK+axhyA+IGNvbmNvdXJzZTsKK+WOiSA+IHdoZXRzdG9uZTsKK+mZhCA+IGFkaGVyZVwtdG87CivogqkgPiBzaG91bGRlcnM7CivprZggPiBuaWdodG1hcmU7CivljZQgPiBiZVwtdW5pdGVkOwor6I2SID4gd2FzdGVsYW5kOwor6ayxID4gbHV4dXJpYW50Owor6K+RID4gdHJhbnNsYXRlOwor5YygID4gY3JhZnRzbWFuOwor5qydID4gbHV4dXJpYW50Owor5Ly0ID4gY29tcGFuaW9uOwor5YyCID4gZnJhZ3JhbmNlOwor5Yu4ID4gcmVjb21tZW5kOwor5YunID4gcmVjb21tZW5kOwor6aOYID4gd2hpcmx3aW5kOwor6Im2ID4gYmVhdXRpZnVsOwor5Ym1ID4gZXN0YWJsaXNoOwor54KuID4gbGFyZ2VcLWd1bjsKK+i0nSA+IHNlYVwtc2hlbGw7Civpg44gPiBnZW50bGVtYW47CivpmaogPiBhY2NvbXBhbnk7Civoh6ggPiBkcmF3XC1uZWFyOwor5YedID4gY29hZ3VsYXRlOwor5YaXID4gZXhjZXNzaXZlOwor5YqdID4gcmVjb21tZW5kOwor5YmpID4gbGVmdG92ZXJzOwor6aWSID4gYm91bnRpZnVsOwor55aXID4gYmVcLWhlYWxlZDsKK+axpCA+IGhvdFwtd2F0ZXI7CivlvbsgPiBwZW5ldHJhdGU7Civpo5wgPiBmbGlwXC1vdmVyOwor5YOaID4gY29tcGFuaW9uOwor6IKYID4gdGhlXC1lbGJvdzsKK+iCliA+IGxvb2tcLWxpa2U7CivmmKggPiB5ZXN0ZXJkYXk7CivmmoIgPiB0ZW1wb3Jhcnk7CivpgJIgPiBoYW5kXC1vdmVyOwor6aGnID4gbG9va1wtYmFjazsKK+elpSA+IGdvb2RcLWx1Y2s7CivlgLkgPiB0ZW1wZXJhdGU7CivoibAgPiBkaWZmaWN1bHQ7Civku5cgPiByZWx5XC11cG9uOwor5p+/ID4gcGVyc2ltbW9uOwor6ZSuID4gZG9vclwtYm9sdDsKK+aeryA+IGRyaWVkXC1vdXQ7CivojrEgPiBnb29zZWZvb3Q7CivotZQgPiBpbmRlbW5pZnk7CivpgKIgPiBjb21lXC11cG9uOwor552BID4gb3BlblwtZXllczsKK+WYvyA+IGJlXC1zaWxlbnQ7Civku64gPiBmYWxzZWhvb2Q7Civpm6MgPiBkaWZmaWN1bHQ7CivotKogPiBiZVwtZ3JlZWR5Owor5pqrID4gdGVtcG9yYXJ5Owor6YCdID4gcGFzc1wtYXdheTsKK+S6giA+IGNvbmZ1c2lvbjsKK+iJviA+IGFydGVtaXNpYTsKK+iKrCA+IGZyYWdyYW5jZTsKK+iijSA+IGxvbmdcLWdvd247CivlhqQgPiBncmlldmFuY2U7CivppbYgPiBib3VudGlmdWw7CivngokgPiBmaXJlcGxhY2U7Civov6ogPiBlbmxpZ2h0ZW47CivlmIkgPiBleGNlbGxlbnQ7Civplr4gPiB0aHJlc2hvbGQ7Civntr4gPiB0aGluXC1zaWxrOwor6ImzID4gYmVhdXRpZnVsOwor6IaAID4gdXBwZXJcLWFybTsKK+eJuiA+IHNhY3JpZmljZTsKK+mhvSA+IG9ic3RpbmF0ZTsKK+atiSA+IGRlZmljaWVudDsKK+W4hSA+IGNvbW1hbmRlcjsKK+aGviA+IHRvXC1yZWdyZXQ7CivlioggPiBjdXRcLWFwYXJ0Owor5ouCID4gc2hha2VcLW9mZjsKK+mNtSA+IGRvb3JcLWJvbHQ7CivnrYggPiBhcnJvd1wtZW5kOwor5ougID4gdG9cLW9jY3VweTsKK+WOoiA+IHNpZGVcLXJvb207CivnhqwgPiBjb29rXC1kb3duOwor5omVID4gc2hha2VcLW9mZjsKK+WvkyA+IHJlc2lkZW5jZTsKK+eovCA+IHNvd1wtZ3JhaW47CivmgY0gPiBzZWVtaW5nbHk7Civnu6MgPiBlbWJyb2lkZXI7Civmh4MgPiBjb3VydGVvdXM7CivooawgPiB1bmRlcndlYXI7CivmhYogPiB0b1wtcmVzZW50Owor6IaKID4gc2hvdWxkZXJzOwor5r2tID4gZGVlcFwtcG9vbDsKK+aXtyA+IGV4dGVuc2l2ZTsKK+ehnSA+IHNhbHRwZXRlcjsKK+mBlCA+IGFycml2ZVwtYXQ7CivpgLkgPiBhcnJpdmVcLWF0Owor6aqkID4gcHJvY2VkdXJlOwor6Iu5ID4gYXJ0ZW1pc2lhOwor5b+/ID4gZ2V0XC1hbmdyeTsKK+WdoCA+IGZhbGxcLWRvd247CivonbYgPiBidXR0ZXJmbHk7CivnhIkgPiB0aGVyZXVwb247CivnpoAgPiByZXBvcnRcLXRvOwor5oyrID4gcHVzaFwtZG93bjsKK+mzhCA+IGFsbGlnYXRvcjsKK+iwkCA+IGhhcm1vbml6ZTsKK+WxjiA+IGV4Y3JlbWVudDsKK+WPqCA+IHRhbGthdGl2ZTsKK+iRsSA+IHNjYWxsaW9uczsKK+aeoyA+IGRhdGVcLXRyZWU7CivkvqMgPiBjb21wYW5pb247CivosLQgPiByZXByaW1hbmQ7CivmsbkgPiB0dXJidWxlbnQ7CivnmKsgPiBwYXJhbHlzaXM7CivolJogPiBsdXh1cmlhbnQ7Civms7sgPiBkcmFpblwtb2ZmOwor5L+tID4gdGVtcGVyYXRlOwor54CRID4gd2F0ZXJmYWxsOwor6J20ID4gYnV0dGVyZmx5Owor5qiKID4gYVwtcmFpbGluZzsKK+aVmyA+IGRyYXdcLWJhY2s7CivnpqcgPiBoYXBwaW5lc3M7CivojLUgPiBhXC1jdXNoaW9uOwor5qOVID4gaGVtcFwtcGFsbTsKK+WonyA+IGJlYXV0aWZ1bDsKK+WAqSA+IGJlYXV0aWZ1bDsKK+i+lyA+IHR1cm5cLW92ZXI7CivmgaQgPiBzaG93XC1waXR5Owor5L6IID4gbHV4dXJpb3VzOwor5aSlID4gY29tcGFuaW9uOwor5rKBID4gc29ha1wtaW50bzsKK+anmyA+IHRocmVzaG9sZDsKK+WMoyA+IHNtYWxsXC1ib3g7CivmjY4gPiB0b1wtc2VsZWN0Owor55eqID4gcGFyYWx5c2lzOwor55eeID4gZHlzcGVwc2lhOwor552QID4gc3F1aW50XC1hdDsKK+WepiA+IGN1bHRpdmF0ZTsKK+a1kiA+IHJpdmVyYmFuazsKK+iRtSA+IHN1bmZsb3dlcjsKK+edqyA+IGV5ZWxhc2hlczsKK+eXiiA+IGJlXC1oZWFsZWQ7Civlk7ogPiBjaGV3XC1mb29kOwor56ujID4gdGVybWluYXRlOwor5ZuUID4gbXV0dGVyaW5nOwor6JeQID4gZGlzcmVnYXJkOwor5b+SID4gZXhjZXNzaXZlOwor5Z+gID4gcG9ydFwtY2l0eTsKK+iNpCA+IG1lYXRcLWRpZXQ7CivnpbogPiBnb29kXC1sdWNrOwor6JySID4gbWlsbGlwZWRlOwor6I+HID4gbXVzaHJvb21zOwor6LGaID4gc21hbGxcLXBpZzsKK+aykyA+IGNvbm5lY3RlZDsKK+W8qSA+IGNyb3NzXC1ib3c7CivmrocgPiBkaWVcLXlvdW5nOwor6JCkID4gZ2xvd1wtd29ybTsKK+agiCA+IHdhcmVob3VzZTsKK+mGuiA+IGdldFwtZHJ1bms7CivonIggPiBjZW50aXBlZGU7CivkvbwgPiBiZWF1dGlmdWw7CivomqMgPiBjZW50aXBlZGU7CivmhKsgPiBndWlsZWxlc3M7CivosJkgPiB2ZXJzZWRcLWluOwor54a5ID4gZGltXC1saWdodDsKK+aAgiA+IGluc3RpZ2F0ZTsKK+mmpSA+IGZyYWdyYW5jZTsKK+aBvyA+IGluc3RpZ2F0ZTsKK+mBmyA+IHRha2VcLXdhbGs7Civnl7kgPiBwYXJhbHlzaXM7Civpur4gPiBhXC1wZW5uYW50Owor5aqyID4gbWFycnlcLW9mZjsKK+ickyA+IGRyYWdvbmZseTsKK+mVgSA+IG1hZ25lc2l1bTsKK+aksCA+IHBhbG1cLXRyZWU7CivnoLogPiB3aGV0c3RvbmU7Civnl6IgPiBkeXNlbnRlcnk7Civll5EgPiBlYXRcLXNlZWRzOwor6JqvID4gZWFydGh3b3JtOwor6JyaID4gY29ja3JvYWNoOwor6JqTID4gZWFydGh3b3JtOwor6a2HID4gbmlnaHRtYXJlOwor6ZiGID4gaGlnaFwtZG9vcjsKK+WmqiA+IG9sZFwtd29tYW47Civmk4AgPiByb2xsXC1mbGF0Owor5aaNID4gYmVhdXRpZnVsOwor5aejID4gYmVhdXRpZnVsOwor6KKkID4gbG9uZ2l0dWRlOwor6bqdID4gbXVza1wtZGVlcjsKK+iNnyA+IGx1eHVyaWFudDsKK+S9uyA+IGZyaXZvbG91czsKK+mSviA+IHBvdGFzc2l1bTsKK+mjmSA+IHdoaXJsd2luZDsKK+WtkSA+IHJlbWFpbmluZzsKK+aqhCA+IGNhbGxcLWFybXM7Civpmo0gPiBkcnlcLWRpdGNoOwor6K+/ID4gcGFzc1wtYnVjazsKK+e7qyA+IHRoaW5cLXNpbGs7CivpgIQgPiBhXC1zdXJuYW1lOwor5qKPID4gaGFuZGN1ZmZzOwor56WJID4gaGFwcGluZXNzOwor6J+RID4gY29ja3JvYWNoOwor6ZK6ID4gYnJvYWRcLWF4ZTsKK+iNniA+IGJ1Y2t3aGVhdDsKK+afkSA+IHRhbmdlcmluZTsKK+WptSA+IGJlYXV0aWZ1bDsKK+WoiSA+IGJlYXV0aWZ1bDsKK+iupyA+IGNvbmZ1c2lvbjsKK+S5nCA+IHRvXC1zcXVpbnQ7Civkv6YgPiBjb21wYW5pb247Civnh64gPiBoYXJtb25pemU7Civpo5ogPiB3aGlybHdpbmQ7Civlp7kgPiBiZWF1dGlmdWw7CivmhI4gPiBvYnN0aW5hdGU7CivlqLIgPiBhXC1nb2RkZXNzOwor5b+dID4gZGlzZ3JhY2VkOwor6JGzID4gbHV4dXJpYW50Owor6K+uID4gY3JpdGljaXplOwor6bOPID4gaHVnZVwtZmlzaDsKK+ichyA+IGplbGx5ZmlzaDsKK+WKrSA+IGVuY291cmFnZTsKK+WFliA+IGVzdGFibGlzaDsKK+WRtiA+IHRhbGthdGl2ZTsKK+eZoyA+IHJpbmd3b3JtczsKK+e7piA+IHNpbGtcLWNvcmQ7CivpkrggPiBwbHV0b25pdW07CivpppcgPiBjaGVla2JvbmU7CivplLAgPiBtYW5nYW5lc2U7CivkvqogPiBhXC1jb21wYW55Owor5YerID4gd2lsZFwtZHVjazsKK+eXsSA+IGhlYXRcLXJhc2g7Civnl4ggPiBjYXJidW5jbGU7CivmgowgPiBicm90aGVybHk7CivlhrwgPiBcKHN1cm5hbWVcKTsKK+m5pyA+IHBhcnRyaWRnZTsKK+aCkiA+IHNvcnJvd2Z1bDsKK+aAgyA+IHJlZ3JldGZ1bDsKK+WikiA+IHdldFwtdGlsdGg7CivoqL4gPiBiYWRcLW1vdXRoOwor5ZyuID4gZGVzdHJveWVkOwor6bKIID4gc2VhXC1wZXJjaDsKK+mSmiA+IHBsdXRvbml1bTsKK+eXvyA+IHBhcmFseXNpczsKK+aUiSA+IHRvXC1iZWNrb247CivpsocgPiBzaGVhdGZpc2g7CivohoggPiBkaWFwaHJhZ207Civnio0gPiBhXC1idWxsb2NrOwor5aakID4gYmVhdXRpZnVsOwor6ZSXID4gZ2VybWFuaXVtOwor6Y6PID4gcHVyZVwtZ29sZDsKK+mVhSA+IGFtZXJpY2l1bTsKK+i+giA+IGFcLWNoYXJpb3Q7CivlqqogPiBvbGRcLXdvbWFuOwor5a2TID4gYmVhdXRpZnVsOwor6Le4ID4gY2xlYXJcLXdheTsKK+eWlCA+IGNhcmJ1bmNsZTsKK+eFsyA+IGJlXC1idXJuZWQ7Civnib4gPiB0b1wtb3Bwb3NlOwor5piAID4gc3VuXC1saWdodDsKK+S5qSA+IHRvXC1kaXZpbmU7Civnvp8gPiBoeWRyb3hpZGU7Civojb0gPiBjb3JpYW5kZXI7CivosLUgPiB0YWxrYXRpdmU7Civnu6AgPiB3ZWxsXC1yb3BlOwor5ZOTID4gZ2FycnVsb3VzOwor6ISsID4gYVwtYmxhZGRlcjsKK+aIoSA+IHN1Ymp1Z2F0ZTsKK+i+hyA+IGhhbmRcLWNhcnQ7CivpmIggPiB0aHJlc2hvbGQ7CivpuZogPiBjb3Jtb3JhbnQ7CivplZ4gPiBhcnJvd2hlYWQ7Civoj7AgPiB3aWxkXC1yaWNlOwor6KCWID4gaW5jaFwtd29ybTsKK+mTqyA+IGxhcmdlXC1ob2U7CivmsJggPiBkZXV0ZXJpdW07Civpu74gPiB0b1wtc3RyaXZlOwor6ZWnID4gbGFudGhhbnVtOwor5Z6hID4gcGxvd1wtc29pbDsKK+eClCA+IGFjZXR5bGVuZTsKK+m4rCA+IGNvcm1vcmFudDsKK+mVsSA+IHl0dGVyYml1bTsKK+mSlSA+IG5lb2R5bWl1bTsKK+W/rSA+IGRlbGlnaHRlZDsKK+iOqiA+IGFydGVtaXNpYTsKK+iLtCA+IHNhY2tjbG90aDsKK+iwsyA+IHRvXC1kZWNpZGU7Civpkq8gPiBwYWxsYWRpdW07CivnorIgPiB0ZWxsdXJpdW07CivnkqkgPiBqYWRlXC1yaW5nOwor6ZiDID4gdGhyZXNob2xkOwor6aWrID4gc3VyZmVpdGVkOwor5pKZID4gZWNvbm9taXplOwor6JO8ID4gc21hcnR3ZWVkOwor6aWUID4gYnJlYWtmYXN0Owor6ZS2ID4gc3Ryb250aXVtOwor56GOID4gd2hldHN0b25lOwor5piDID4gYWZ0ZXJub29uOwor5ZSqID4gdG9cLXJlY2l0ZTsKK+iViCA+IG11c2hyb29tczsKK+WEhyA+IGluZ2VuaW91czsKK+mytCA+IGZpc2hcLWd1dHM7CivpsoUgPiBmaXNoXC1uYW1lOwor6KCKID4gY29ja3JvYWNoOwor6JqwID4gbWlsbGlwZWRlOwor6ZONID4gYmVyeWxsaXVtOwor54azID4gdG9cLXNwcmVhZDsKK+iDjSA+IGd1YW5pZGluZTsKK+i/lSA+IG9ic3RpbmF0ZTsKK+mykCA+IGdsb2JlZmlzaDsKK+mFkCA+IGFuaHlkcmlkZTsKK+ihhCA+IGVwaXN0YXhpczsKK+efpyA+IG11Y2hcLW1vcmU7CivmgqsgPiBzaW5jZXJpdHk7CivohqYgPiBwaG9zcGhpbmU7CivnvKMgPiBmaW5lXC1zaWxrOwor5a6EID4gYVwtdHJhaXRvcjsKK+mYjCA+IHdlblwteGlhbmc7Civlk78gPiBleGNlbGxlbnQ7CivpmL0gPiBkYW5nZXJvdXM7CivljKYgPiBzbWFsbFwtYm94Owor6YWeID4gcGh0aGFsZWluOwor6b2zID4gdG9vdGhsZXNzOwor6b2tID4gdG9vdGhhY2hlOwor6bu9ID4gdG9cLXN0cml2ZTsKK+m4lSA+IGNvcm1vcmFudDsKK+m3viA+IGFcLXN3YWxsb3c7Civpt60gPiB3YXRlclwtaGVuOwor6benID4gY29ybW9yYW50Owor6belID4gdGhlXC1lZ3JldDsKK+m3kyA+IHBhcnRyaWRnZTsKK+m3jyA+IGJpcmRcLW5hbWU7Civpt4YgPiBiaXJkXC1uYW1lOwor6ba/ID4gY29ybW9yYW50Owor6bahID4gY3Jvc3NiaWxsOwor6bW3ID4gY29cLXdvcmtlcjsKK+mzrCA+IHdpbGRcLWR1Y2s7Civps6cgPiB3aWxkXC1kdWNrOwor6bOiID4gc25ha2VoZWFkOwor6bKOID4ga2luZ1wtY3JhYjsKK+mxuCA+IHNlYVwtcGVyY2g7CivpsbcgPiBjcm9jb2RpbGU7CivpsacgPiBzbmFrZWhlYWQ7CivpsZ8gPiBraW5nXC1jcmFiOwor6bGbID4gZmlzaFwtbmFtZTsKK+mwpSA+IGh1Z2VcLWZpc2g7CivpsJAgPiBhbGxpZ2F0b3I7Civpr6AgPiB0b1wtY29uZmVyOwor6a+dID4gZmlzaFwtZ3V0czsKK+mupiA+IHNuYWtlZmlzaDsKK+mujiA+IHNoZWF0ZmlzaDsKK+mugCA+IHNuYWtlZmlzaDsKK+mtsiA+IGZpc2hcLW5hbWU7CivprZ4gPiBmaXNoXC10cmFwOwor6aywID4gbHV4dXJpYW50Owor6ayWID4gd2lsZFwtaGFpcjsKK+mrpyA+IGxvbmdcLWhhaXI7Civpq5cgPiB0aGVcLXNrdWxsOwor6aqtID4gc2hpblwtYm9uZTsKK+mpnyA+IHByb2NlZHVyZTsKK+mopyA+IHRhblwtaG9yc2U7CivpqJAgPiB0b1wtdmVyaXR5Owor6ae4ID4gZ2FsbG9waW5nOwor6aadID4gZnJhZ3JhbmNlOwor6aabID4gZnJhZ3JhbmNlOwor6aaCID4gbGVmdG92ZXJzOwor6aWgID4gcmljZVwtY2FrZTsKK+mkuiA+IHJpY2VcLWNha2U7CivppLEgPiBkcnlcLWdvb2RzOwor6aSVID4gbGVmdG92ZXJzOwor6aSIID4gcmljZVwtY2FrZTsKK+mjqyA+IHN1cmZlaXRlZDsKK+mjpSA+IHJpY2VcLWNha2U7Civpo4ggPiB3aGlybHdpbmQ7Civpo4cgPiB3aGlybHdpbmQ7Civpo4YgPiB3aGlybHdpbmQ7Civpo4QgPiB3aGlybHdpbmQ7Civpo4MgPiB3aGlybHdpbmQ7CivporcgPiB3aGlybHdpbmQ7CivporQgPiB3aGlybHdpbmQ7CivpoK8gPiBjaGVla2JvbmU7CivpoJEgPiBvYnN0aW5hdGU7CivpoIQgPiBjaGVla2JvbmU7CivpnaogPiB0b1wtY29iYmxlOwor6Z2nID4gd2FzaFwtZmFjZTsKK+mdgCA+IGRyaXp6bGluZzsKK+mcgiA+IGZpbmVcLXJhaW47CivpmoMgPiB0b1wtZXhjZWVkOwor6Za/ID4gd2VuXC14aWFuZzsKK+mWuiA+IGxvb2tcLWRvd247CivplqwgPiBoaWdoXC1kb29yOwor6ZarID4gdGhyZXNob2xkOwor6ZSrID4gYmVya2VsaXVtOwor6ZSGID4gemlyY29uaXVtOwor6ZK2ID4gY29sdW1iaXVtOwor6ZKMID4gcnV0aGVuaXVtOwor6ZKBID4gYVwtbWF0dG9jazsKK+mRrSA+IGxhbnRoYW51bTsKK+mRqiA+IGZpcmVwbGFjZTsKK+mQvyA+IHl0dGVyYml1bTsKK+mQuyA+IGRydW1zdGljazsKK+mPmyA+IHRvXC1wb2xpc2g7Civpj5AgPiBwdXJlXC1nb2xkOwor6Y+DID4gYXJyb3doZWFkOwor6Y6/ID4gbmVwdHVuaXVtOwor6Y6eID4gcGxvd3NoYXJlOwor6Y6HID4gYW1lcmljaXVtOwor6Y6CID4gbWFnbmVzaXVtOwor6Y26ID4gZ2VybWFuaXVtOwor6Y22ID4gc3Ryb250aXVtOwor6YyzID4gbWFuZ2FuZXNlOwor6YyHID4gYmVya2VsaXVtOwor6YuvID4gemlyY29uaXVtOwor6YuNID4gYmVyeWxsaXVtOwor6YqkID4gYW1lcmljaXVtOwor6YqaID4gbGFyZ2VcLWhvZTsKK+mJniA+IGJyb2FkXC1heGU7CivpiL0gPiBwbHV0b25pdW07CivpiLkgPiBiZXJ5bGxpdW07CivpiKkgPiBmaXJlcGxhY2U7CivpiIwgPiB0b1wtcGllcmNlOwor6YiIID4gcGx1dG9uaXVtOwor6YiAID4gcGFsbGFkaXVtOwor6Ye5ID4gbmVvZHltaXVtOwor6YeVID4gcnV0aGVuaXVtOwor6YOeID4gZ2VudGxlbWFuOwor6YGeID4gaGFuZFwtb3ZlcjsKK+mAkyA+IGhhbmRcLW92ZXI7CivovL4gPiB0dXJuXC1vdmVyOwor6Ly4ID4gdHJhbnNwb3J0Owor6LyYID4gYVwtY2FyXC1ydXQ7CivovIUgPiBhXC1jaGFyaW90Owor6Lu3ID4gc2FjcmlmaWNlOwor6LuEID4gdG9cLWdvdmVybjsKK+i6lCA+IGZvbGxvd1wtaW47CivouZUgPiBjbGVhclwtd2F5Owor6LmUID4gdGVtcG9yYXJ5Owor6LepID4gdG9cLXdhZGRsZTsKK+i2nSA+IHRvXC1wdXJzdWU7Civotb8gPiBsYXRlXC1zbG93Owor6LO4ID4gbGVmdG92ZXJzOwor6LOgID4gaW5kZW1uaWZ5Owor6LG1ID4geW91bmdcLXBpZzsKK+ixkyA+IGJlYXV0aWZ1bDsKK+iuniA+IHRvXC1kZWNpZGU7CivorbQgPiByZXByaW1hbmQ7CivorYogPiB3cmFuZ2xpbmc7CivorYUgPiB3cmlnZ2xpbmc7Civoq7MgPiB2ZXJzZWRcLWluOwor6KunID4gaGFybW9uaXplOwor6KudID4ga25vd2xlZGdlOwor6KuJID4gcGFzc1wtYnVjazsKK+iqmiA+IGNyaXRpY2l6ZTsKK+iqliA+IG9ic3RpbmF0ZTsKK+iooCA+IG11Y2hcLW1vcmU7CivoqIwgPiBjb25mdXNpb247Civopa8gPiB1bmRlcndlYXI7Civoo7IgPiB3YWlzdGNvYXQ7Civon7ogPiBlYXJ0aHdvcm07CivonowgPiBhXC1zdHJpcGVkOwor6JyoID4gYnV0dGVyZmx5Owor6Ju1ID4gZHJhZ29uZmx5Owor6JuNID4gZ2xvd1wtd29ybTsKK+iavyA+IG1pbGxpcGVkZTsKK+iYniA+IHdpbGRcLXZpbmU7CivologgPiBsdXh1cmlhbnQ7CivolZcgPiBsZXVjYWNlbmU7CivolLkgPiB3aWxkXC12aW5lOwor6JSlID4gc2NhbGxpb25zOwor6JOGID4gc3RyYXdcLW1hdDsKK+iSoiA+IGhlZHlzYXJ1bTsKK+iRtyA+IG1lYXRcLWRpZXQ7CivokZMgPiB2ZWdldGFibGU7CivokIogPiBnb29zZWZvb3Q7Civoj7sgPiBhcnRlbWlzaWE7CivojY0gPiBidWNrd2hlYXQ7Civoi6AgPiBtdWx0aXR1ZGU7Civoi5kgPiBhXC1waWdcLXN0eTsKK+iKvCA+IHRvXC1jaG9vc2U7CivoibcgPiBiZWF1dGlmdWw7CivoibEgPiBkaWZmaWN1bHQ7CivoiaMgPiBzdGVyblwtb2FyOwor6ImOID4gZmFzdFwtYm9hdDsKK+iInSA+IGxpbmNoXC1waW47CivoiJggPiBhXC1tYW5zaW9uOwor6IevID4gdG9cLXByYWlzZTsKK+iDpiA+IHRoZVwtbmF2ZWw7CivogKUgPiBmYXJtXC10b29sOwor5762ID4gcmFua1wtb2RvcjsKK+e+pSA+IGh5ZHJveGlkZTsKK+e9gSA+IGFcLWNpc3Rlcm47CivnuaMgPiBvYnN0aW5hdGU7CivnuaEgPiBlbWJyb2lkZXI7CivnuY0gPiBlbWJyb2lkZXI7CivnuJEgPiBmaW5lXC1zaWxrOwor57iDID4gZmluZVwtc2lsazsKK+e3pSA+IHN3YWRkbGluZzsKK+e2iSA+IGVtYnJvaWRlcjsKK+e2hiA+IHdlbGxcLXJvcGU7Civns7AgPiByaWNlXC1iYWxsOwor57OdID4gc2NhdHRlcmVkOwor57K/ID4gcmljZVwtY2FrZTsKK+exqCA+IHRyb3Vzc2VhdTsKK+ewgyA+IHNpZGVcLXJvb207Civnq5UgPiBkZWNpbGl0ZXI7Civnq48gPiBraWxvbGl0ZXI7Civnq40gPiBkZWNhbGl0ZXI7Civnq4YgPiBleGhhdXN0ZWQ7CivnqrQgPiBnbGFuY2VcLWF0Owor56qLID4gaW5cLWFcLWhvbGU7CivnqaogPiB0b1wtcHJhaXNlOwor56isID4gZ2x1dGlub3VzOwor56ifID4gcmVwb3J0XC10bzsKK+emtCA+IHNhY3JpZmljZTsKK+empCA+IFwoc3VybmFtZVwpOwor56acID4gc2FjcmlmaWNlOwor56aWID4gc2FjcmlmaWNlOwor56aVID4gZXhjZWxsZW50Owor56aUID4gaGFwcGluZXNzOwor56WmID4gaGFwcGluZXNzOwor56WOID4gZXhjZWxsZW50Owor56S/ID4gc2FjcmlmaWNlOwor56S9ID4gYmxlc3NpbmdzOwor56SqID4gd2hldHN0b25lOwor56SeID4gXChtaW5lcmFsXCk7CivnoqwgPiB3aGV0c3RvbmU7CivnooYgPiBhcnJvd1wtdGlwOwor56G7ID4gb2JzdGluYXRlOwor56CuID4gYXJyb3dcLXRpcDsKK+egrCA+IGJpZ1wtc3RvbmU7CivnnZ4gPiBzcXVpbnRcLWF0Owor55yVID4gcmVzdHJhaW50Owor55u1ID4gXChzdXJuYW1lXCk7Civnm5ogPiBcKHN1cm5hbWVcKTsKK+eZsSA+IHBhcmFseXNpczsKK+eZsCA+IGNhcmJ1bmNsZTsKK+eZrCA+IHJpbmd3b3JtczsKK+eYrSA+IGFcLXdoaXRsb3c7CivnmJwgPiBhXC1wb2x5cHVzOwor55iTID4gcGFyYWx5c2lzOwor55ehID4gYVwtZGlzZWFzZTsKK+eXkCA+IHdoaXJsd2luZDsKK+eWtiA+IGR5c2VudGVyeTsKK+eVtSA+IGRlbGluZWF0ZTsKK+eVsSA+IHRvXC1kZXRhaW47CivnlYsgPiB0aWxsXC1sYW5kOwor55S0ID4gY29ja3JvYWNoOwor55SqID4gXChzdXJuYW1lXCk7CivnlKYgPiBiZVwtcmVib3JuOwor55SFID4gY2VudGlncmFtOwor55O4ID4gaGVjdG9ncmFtOwor55OxID4gbWlsbGlncmFtOwor55K/ID4gZmluZVwtamFkZTsKK+eRtCA+IHR3aW5cLWdlbXM7CivnkaMgPiBmcmFnbWVudHM7CivnjYAgPiB0b1wtZ2F0aGVyOwor54uzID4gYXJtYWRpbGxvOwor54qwID4gYXJtYWRpbGxvOwor54qnID4gc2FjcmlmaWNlOwor54e2ID4gdG9cLXNjb3JjaDsKK+eHrCA+IGJ1cm5cLWRvd247Civnh4ogPiBsdXh1cmlhbnQ7Civnhr8gPiBicmlsbGlhbnQ7CivnhrogPiBkaW1cLWxpZ2h0Owor54KYID4gYnJpbGxpYW50Owor54CJID4gZHJhaW5cLW9mZjsKK+a/qSA+IHBvdXJcLWRvd247Civmv5sgPiBkcml6emxpbmc7Civmu7ggPiByaXZlcmJhbms7CivmubwgPiBibGFja1wtbXVkOwor5rmPID4gd2FzaFwtZmFjZTsKK+a5hSA+IGJvaWxcLXNpbGs7Civmt6kgPiBwYXNzXC1vdmVyOwor5ra3ID4gcmFpbnN0b3JtOwor5rSRID4gd2hpcmxwb29sOwor5rK6ID4gdHVyYnVsZW50Owor5q6kID4gZGllXC15b3VuZzsKK+auiCA+IGluZmVydGlsZTsKK+augCA+IGRpZVwteW91bmc7CivmrZsgPiBkcmF3XC1iYWNrOwor5qyVID4gdHJlZVwtbmFtZTsKK+aquyA+IHRocmVzaG9sZDsKK+apmiA+IHRhbGxcLXRyZWU7CivmqLMgPiB0YWxsXC10cmVlOwor5qiLID4gdHJlZVwtbmFtZTsKK+anqiA+IGdlbmVyYWxseTsKK+anqSA+IGdlbmVyYWxseTsKK+amqiA+IGhlYWRib2FyZDsKK+aktiA+IHBhbG1cLXRyZWU7Civmo6cgPiB3YXJlaG91c2U7Civmo6UgPiBhXC1yYWlsaW5nOwor5qOXID4gZGF0ZVwtdHJlZTsKK+ajliA+IGRvb3JcLXN0b3A7CivmopwgPiBjaG9wc3RpY2s7Civmoo0gPiB0cmVlXC1uYW1lOwor5qCxID4gbGFyZ2VcLXBlZzsKK+agrSA+IGtpbmdcLXBvc3Q7CivmoJ8gPiBoZW1wXC1wYWxtOwor5qCSID4gY3Jvc3NcLWJhcjsKK+afuSA+IHBlcnNpbW1vbjsKK+afiCA+IGNvbnRhaW5lcjsKK+aeviA+IHBlcnNpbW1vbjsKK+aeuSA+IGRydW1zdGljazsKK+aeqSA+IHBpbmVcLXRyZWU7CivmnqggPiBkb29yXC1zdG9wOwor5p6ZID4gdHJlZVwta25vdDsKK+adqSA+IGhlYWRib2FyZDsKK+acniA+IGZ1bGxcLXllYXI7CivmnJMgPiBzYWNyaWZpY2U7Civmm7EgPiBjb2Nrcm9hY2g7Civmm6AgPiBleHRlbnNpdmU7Civmmo0gPiBzdW5zdHJva2U7CivmmL8gPiBleHRlbnNpdmU7CivmmKogPiBkZWxpZ2h0ZWQ7Civml6ogPiB1bml0ZWRcLWluOwor5pebID4gYVwtcGVubmFudDsKK+aXmSA+IGFcLXBlbm5hbnQ7CivmloIgPiBkcmF3XC1iYWNrOwor5pWLID4gdG9cLXN0cmlrZTsKK+aUiyA+IHRvXC1jbHV0Y2g7CivmlIMgPiBwcmVjZWRpbmc7Civmk78gPiB0b1wtc2VsZWN0Owor5pOaID4gdG9cLW9jY3VweTsKK+aTkCA+IHRvXC1wdXRcLW9uOwor5pOJID4gdG9cLXBpZXJjZTsKK+aRvSA+IHRocm93XC1vdXQ7Civmka4gPiB0b1wtcmF0dGxlOwor5pGbID4gdG9cLXNwcmVhZDsKK+aQmSA+IHRvXC1oYW5kbGU7CivmkJUgPiB0b1wtc3RyaWtlOwor5o+mID4gdG9cLWNsdXRjaDsKK+aPpSA+IHNjcmF0Y2hlcjsKK+aOmSA+IHRvXC1zdHJpdmU7CivmibsgPiB0b1wtc3RyaWtlOwor5omkID4gdG9cLXRocnVzdDsKK+aInCA+IHRvXC1zY3JhcGU7Civmhq8gPiBzb3Jyb3dmdWw7Civmhq4gPiByZWdyZXRmdWw7Civmhb0gPiBzb3Jyb3dmdWw7CivmhbwgPiBzb3Jyb3dmdWw7CivmhaQgPiBzaW5jZXJpdHk7CivmhYYgPiBleGNlc3NpdmU7CivmhKggPiBzaW5jZXJpdHk7Civmgr0gPiBzb3Jyb3dmdWw7CivmgoEgPiBpcnJpdGFibGU7CivmgZEgPiB0b1wtY2hhbmdlOwor5oGKID4gYmVcLXVuaXRlZDsKK+aAuiA+IHRvXC1lbmR1cmU7CivmgJ4gPiB0b1wtZ3JpZXZlOwor5oCXID4gb2JzZXJ2YW50Owor5b+AID4gdG9cLXN0cm9sbDsKK+W9jCA+IGV4dGVuc2l2ZTsKK+W7viA+IHR3b1wtaGFuZHM7Civlu7ggPiBlbmxpZ2h0ZW47CivluokgPiBhXC12aWxsYWdlOwor5bmpID4gdHJhcHBpbmdzOwor5bmZID4gYVwtY3VydGFpbjsKK+W4pSA+IGNvbW1hbmRlcjsKK+W2jiA+IGx1eHVyaWFudDsKK+WvvSA+IGFcLWhhbmRmdWw7Civlr5ggPiBwdXRcLWFzaWRlOwor5a+XID4gYVwtc3VybmFtZTsKK+WvliA+IGdyYWR1YWxseTsKK+WvgyA+IGdyaWV2YW5jZTsKK+WugiA+IHNjYXR0ZXJlZDsKK+WsiyA+IGJlYXV0aWZ1bDsKK+WrvSA+IHBsYXlcLXdpdGg7Civlq5sgPiBjb21wbGlhbnQ7Civlq5cgPiBvbGRcLXdvbWFuOwor5auVID4gY29tcGxpYW50Owor5aq6ID4gYmVhdXRpZnVsOwor5aqsID4gZ292ZXJuZXNzOwor5aqVID4gdW5kZWNpZGVkOwor5aqEID4gYmVhdXRpZnVsOwor5amlID4gYmVhdXRpZnVsOwor5ae4ID4gYmVhdXRpZnVsOwor5aexID4gYmVhdXRpZnVsOwor5aeiID4gYmVhdXRpZnVsOwor5aeeID4gY29uY3ViaW5lOwor5aS7ID4gZmlzaFwtbmFtZTsKK+WkjCA+IHRvXC1kYXdkbGU7Civlor4gPiBjdWx0aXZhdGU7CivlopwgPiBmYWxsXC1kb3duOwor5aGdID4gZmxhdFwtYmFuazsKK+WfkyA+IGVuY2xvc3VyZTsKK+WelyA+IHNhY3JpZmljZTsKK+WciiA+IHJlc3RcLXJvb207CivlmpwgPiBiZVwtc2lsZW50Owor5ZmBID4gbmFzdGluZXNzOwor5Zi1ID4gZ2FycnVsb3VzOwor5ZiRID4gdG9cLW1lbmFjZTsKK+WWpiA+IHRhbGthdGl2ZTsKK+WVjiA+IG9ic3RpbmF0ZTsKK+WTqyA+IHRvXC1jYWpvbGU7CivlkrUgPiB0b1wtcmV2aWxlOwor5ZGnID4gdG9cLXJlYnVrZTsKK+WPhSA+IHRvXC1jb3VuZWw7CivljrIgPiB3aGV0c3RvbmU7CivljpMgPiBwcmVjaXBpY2U7CivljK0gPiBzbWFsbFwtYm94Owor5YyYID4gdGhlXC1icmFpbjsKK+WLryA+IGV4aGF1c3RlZDsKK+WLqSA+IHdvcmtcLWhhcmQ7CivlibAgPiBsZWZ0b3ZlcnM7CivliZkgPiBlc3RhYmxpc2g7CivliY8gPiBlc3RhYmxpc2g7CivliLEgPiBlc3RhYmxpc2g7CivliKEgPiB0b1wtc2NyYXBlOwor5YiUID4gc2Nvb3BcLW91dDsKK+WIhSA+IHRvXC1jcmVhdGU7Civlh7cgPiBkaXJ0XC1jbG9kOwor5YeZID4gYW5cLWljaWNsZTsKK+WFlyA+IGVzdGFibGlzaDsKK+WFhyA+IGF0cm9jaW91czsKK+WEsyA+IG9ic3RpbmF0ZTsKK+WErSA+IHRvXC1hc3Npc3Q7CivlhJUgPiBhXC1jb21wYW55Owor5YSUID4gY29tcGFuaW9uOwor5YSJID4gdGVtcGVyYXRlOwor5YOdID4gdG9cLXJldmlsZTsKK+WDhyA+IGh1bWlsaWF0ZTsKK+WCuiA+IHRvXC1oaW5kZXI7CivlgKIgPiBiZWF1dGlmdWw7CivkvrYgPiBjb21wYW5pb247Civkvo4gPiB0b1wtc29vdGhlOwor5L2rID4gXChzdXJuYW1lXCk7CivkvLsgPiBtZXNzZW5nZXI7CivkvIsgPiBkZWNlcHRpdmU7Civku4ggPiBcKHN1cm5hbWVcKTsKK+S5hiA+IGxvbmdcLXRpbWU7CivktrMgPiB0b1wtbG9va3VwOwor5LaRID4gdG9cLXNuZWV6ZTsKK+S2jSA+IHRvXC1zbmVlemU7Civkta8gPiBhXC12aWxsYWdlOwor5LShID4gYmVhdXRpZnVsOwor5LSPID4gYVwtc3dhbGxvdzsKK+SzuiA+IHRoZVwtcXVhaWw7Civksr8gPiBjb3Jtb3JhbnQ7CivksqggPiB3aWxkXC1zd2FuOwor5LGIID4gZmlzaFwtcHVscDsKK+SwpSA+IGFcLWN5Y2xvbmU7CivksJYgPiBmaW5lXC1oYWlyOwor5LCQID4gbG9uZ1wtaGFpcjsKK+SwiCA+IGZpbmVcLWhhaXI7Civkr70gPiBmaW5lXC1oYWlyOwor5K+3ID4gZmluZVwtaGFpcjsKK+SvpiA+IHRpbnlcLWJvbmU7CivkrpwgPiB0b1wtZ2FsbG9wOwor5K2sID4gdG9cLWtvd3RvdzsKK+StqyA+IHRvXC1rb3d0b3c7CivkrZsgPiB0YXN0ZWxlc3M7CivkrZkgPiBleHF1aXNpdGU7CivkrZUgPiB0YXN0ZWxlc3M7CivkrZEgPiBpbmNvcnJ1cHQ7CivkrLYgPiB0b1wtc3RyYXZlOwor5KyUID4gaHVycmljYW5lOwor5KyTID4gaHVycmljYW5lOwor5Ku7ID4gYVwtdHlwaG9vbjsKK+SruiA+IGFcLXR5cGhvb247Civkq50gPiBmcmFncmFuY2U7Civkq5QgPiBhXC1zZXJ2YW50Owor5KmmID4gdGhlXC1yZWluczsKK+SorSA+IHRoZVwtc2tpZXM7CivkqJAgPiB0b1wtc3ByZWFkOwor5KiNID4gZGVlcFwtcG9uZDsKK+SnhSA+IGRhbmdlcm91czsKK+SmtSA+IGluY2FwYWJsZTsKK+SmrCA+IGFcLXZhY2FuY3k7CivkpoYgPiBhXC1iaWdcLWhvZTsKK+SlvSA+IGZhcm1cLXRvb2w7CivkpKQgPiBpbXBsZW1lbnQ7CivkpI8gPiBkZXN0cm95ZWQ7Civko7ggPiB0YXN0ZWxlc3M7Civko6kgPiBiZWF1dGlmdWw7CivkorEgPiB0b1wtc2xpZ2h0Owor5KKrID4gdG9cLWZvbGxvdzsKK+SinyA+IHRvXC10cmF2ZWw7Civkoo0gPiB0b1wtaGFzdGVuOwor5KKKID4gdG9cLXRyYXZlbDsKK+ShlCA+IHRvXC1oaW5kZXI7CivkoLIgPiB0b1wtbGlzdGVuOwor5KCvID4gdG9cLWFzY2VuZDsKK+SgriA+IHRvXC1wcmFuY2U7CivkoIYgPiB0b1wta293dG93Owor5J+7ID4gYmFyZVwtZmVldDsKK+SfpSA+IGx1eHVyaWFudDsKK+SfniA+IHRvXC1mYWx0ZXI7Civkn4wgPiBkaXZlcmdpbmc7Civknr4gPiBmcml2b2xvdXM7CivknrwgPiB0b1wtZXNjYXBlOwor5J6jID4gdG9cLXJlc2lzdDsKK+SelyA+IHN1c3BpY2lvbjsKK+SekiA+IHJlZFwtY29sb3I7CivknpAgPiBwbGVudGlmdWw7Civkno0gPiB0b1wtYmVzdG93Owor5J6JID4gYVwtc3VycGx1czsKK+SdviA+IHRvXC1iZXN0b3c7CivknbwgPiB0b1wtYmVzdG93Owor5JytID4gdG9cLWRyZWRnZTsKK+ScnyA+IHRvXC12ZXJpZnk7CivknJ0gPiB1bmNlcnRhaW47CivknIUgPiB0b1wtZm9sbG93Owor5Ju7ID4gdG9cLWluZHVjZTsKK+SbuSA+IHRvXC1hY2N1c2U7Civkm7ggPiBnYXJydWxvdXM7Civkm7MgPiB0b1wtbWFsaWduOwor5JusID4gYmFieVwtdGFsazsKK+SbqiA+IGxvcXVhY2l0eTsKK+SbniA+IGxvcXVhY2l0eTsKK+SbmiA+IHRvXC1wcmFpc2U7Civkm4sgPiB0b1wtc2NoZW1lOwor5JuBID4gdG9cLW11cm11cjsKK+SatSA+IHRvXC1pbmR1Y2U7CivkmbggPiB0b1wtb2J0YWluOwor5Jm3ID4gdG9cLW9idGFpbjsKK+SZryA+IGV4cXVpc2l0ZTsKK+SZpyA+IHJlZFwtY29sb3I7CivkmZggPiBleHF1aXNpdGU7CivkmLwgPiBzdG9ja2luZ3M7CivkmJogPiBhXC1zZXJ2YW50Owor5JiXID4gYmVhdXRpZnVsOwor5JiRID4gdGhlXC1wdWxzZTsKK+SXmSA+IGVhcnRod29ybTsKK+SXkyA+IGRyYWdvbmZseTsKK+SXjCA+IGRyYWdvbmZseTsKK+SXhSA+IG1pbGxpcGVkZTsKK+SWoSA+IG1pbGxpcGVkZTsKK+SVuSA+IGFcLWN1cnRhaW47CivklbIgPiBhcnRlbWlzaWE7CivklakgPiBkcnlcLWZydWl0Owor5JWPID4gYXJ0ZW1pc2lhOwor5JSzID4gY2hpY2tsaW5nOwor5JOwID4gYWJzaW50aGluOwor5JOXID4gc2NhbGxpb25zOwor5JOHID4gbHV4dXJpYW50Owor5JKwID4gdG9cLWZvbGxvdzsKK+SSoCA+IGx1eHVyaWFudDsKK+SSiiA+IGFcLXBhdGllbnQ7CivkkaogPiBhXC1zYWlsaW5nOwor5JGfID4gbHV4dXJpYW50Owor5JGTID4gYVwtbG9va291dDsKK+SRkSA+IGFcLXNlcnZhbnQ7CivkkYkgPiBleGNyZW1lbnQ7CivkkYAgPiB0aGVcLW5hdmVsOwor5JC6ID4gZGVsaWNpb3VzOwor5JChID4gdGhlXC1uYXZlbDsKK+SQmyA+IHRvXC1sb29zZW47CivkkIwgPiBsdXh1cmlhbnQ7CivkkIYgPiBiaWdcLWJlbGx5Owor5I+9ID4gbWVhdFwtcHVscDsKK+SPrCA+IHRoZVwtc3BpbmU7Civkj6AgPiBtZWF0XC1zb3VwOwor5I+eID4gdGhlXC1iZWxseTsKK+SOoSA+IHRvXC1zaHJpbms7CivkjoMgPiBmaW5lXC1kb3duOwor5I2OID4gYVwtc3BpbmRsZTsKK+SMsiA+IGxpZ2h0XC1yZWQ7CivkjJsgPiBlbnRvdXJhZ2U7CivkjJYgPiB0b1wtZ2F0aGVyOwor5IyKID4gZW50b3VyYWdlOwor5IugID4gdG9cLXJlcGFpcjsKK+SKsCA+IGZvb2RzdHVmZjsKK+SKnCA+IGR1bXBsaW5nczsKK+SJvSA+IHJpY2VcLWNha2U7CivkibwgPiBtYXRlcmlhbHM7CivkiZggPiB0b1wtcGllcmNlOwor5Ii1ID4gbHV4dXJpYW50Owor5IeQID4gdG9cLWFycml2ZTsKK+SGkCA+IGFcLWNvdW50cnk7CivkhY4gPiBkaWZmZXJlbnQ7CivkhYUgPiBmYXJtXC10b29sOwor5IWDID4gbGF0ZVwtY3JvcDsKK+SErCA+IHRvXC1jaGFuZ2U7CivkhJkgPiBoYXBwaW5lc3M7Civkg6kgPiBhXC1taW5lcmFsOwor5IOVID4gc3RvbmV3YXJlOwor5IOTID4gdG9cLXB1bmlzaDsKK+SDgCA+IG1pbGxzdG9uZTsKK+SCviA+IHRvXC1wb2xpc2g7CivkgoggPiB0b1wtcGllcmNlOwor5IKHID4gdG9cLXBpZXJjZTsKK+SBoiA+IGV4cXVpc2l0ZTsKK+SBkCA+IGRlZXBcLWV5ZWQ7CivkgLAgPiBvcGVuXC1leWVzOwor5ICsID4gdG9cLWdsYW5jZTsKK+SAoiA+IHRvXC1nbGFuY2U7CivkgKEgPiB0b1wtc3B5XC1vbjsKK+SAkCA+IHRvXC1yZWdhcmQ7Civjv78gPiB3aW5lXC1jdXBzOwor47+fID4gaGVcLWJyaWdodDsKK+O/myA+IGNhcmJ1bmNsZTsKK+O/hyA+IHBhcmFseXNpczsKK+O+rSA+IHRvXC1zaHJpbms7CivjvqUgPiBiZWxseWFjaGU7CivjvqMgPiB0b1wtc2hpdmVyOwor476LID4gZHlzZW50ZXJ5Owor472sID4gdG9cLWFzc2lzdDsKK+O9niA+IHRvXC1yZW1haW47CivjvZEgPiBkZWxpY2lvdXM7CivjvYkgPiBhXC1iaWdcLWphcjsKK+O8uiA+IHBvcmNlbGFpbjsKK+O8miA+IGVhcnRod2FyZTsKK+O7vSA+IGZpbmVcLWphZGU7Civju7EgPiB0b1wtY2lyY2xlOwor47uMID4gZmluZVwtamFkZTsKK+O7iSA+IGZpbmVcLWphZGU7Civjt7wgPiBhXC1zd2FsbG93Owor47eOID4gc3Vuc3Ryb2tlOwor47WXID4gdHVyYnVsZW50Owor47WUID4gbm90XC1jbGVhcjsKK+O0gSA+IHRvXC1hZGRcLXRvOwor47OoID4gdG9cLXNwbGFzaDsKK+OytSA+IHRoZVwtc2tpZXM7CivjsqYgPiBsb25nXC1oYWlyOwor47KkID4gbG9uZ1wtaGFpcjsKK+OymiA+IGxvbmdcLWhhaXI7CivjsZggPiBuaWdodG1hcmU7CivjsJYgPiB0aGVcLW9saXZlOwor46+6ID4gYVwtY2FiaW5ldDsKK+OvryA+IHNtYWxsXC1jdXA7Civjr50gPiBwYXVsb3duaWE7Civjr4QgPiBsdXh1cmlhbnQ7CivjrpkgPiBhXC1waXRmYWxsOwor466UID4gdmVnZXRhYmxlOwor466DID4gZmFybVwtdG9vbDsKK+OtoiA+IG1lY2hhbmljczsKK+OsvyA+IG1vb25saWdodDsKK+OsqyA+IGNsZWFyXC1za3k7CivjrKMgPiBsdXh1cmlhbnQ7CivjrJ4gPiBzdW5zdHJva2U7CivjqqwgPiB0b1wtcGllcmNlOwor46qpID4gdG9cLXN0cmlrZTsKK+OqpCA+IHRvXC1maW5pc2g7CivjqpEgPiB0b1wtZm9sbG93Owor46qOID4gdW5jZXJ0YWluOwor46qLID4gdG9cLXJlc2lzdDsKK+OqiCA+IHRvXC1sZXRcLWdvOwor46qFID4gdG9cLWNoYW5nZTsKK+OpsSA+IHRvXC1zZWxlY3Q7CivjqacgPiB0b1wtc3RyaWtlOwor46mSID4gdG9cLWFycmVzdDsKK+OpjCA+IHRvXC1zdHJpa2U7CivjqYcgPiB0aGVcLXRodW1iOwor46mEID4gdG9cLXN0cmlrZTsKK+OotiA+IHRvXC10aHJlc2g7CivvqJsgPiBoYXBwaW5lc3M7CivvqJogPiBnb29kXC1sdWNrOwor46iaID4gdG9cLXNlbGVjdDsKK+OojSA+IHRvXC1kZWZlbmQ7CivjqIkgPiB0b1wtc21vb3RoOwor76iEID4gcmVzaWRlbmNlOwor46iEID4gdG9cLXBpZXJjZTsKK+OnviA+IHRvXC1zdHJpa2U7Civvp7wgPiByZWNvZ25pemU7Civvp7YgPiBkcmF3XC1uZWFyOwor46ewID4gdG9cLXN0cmlrZTsKK+OnqSA+IHRvXC1kaXNwZWw7Civvp6UgPiBkeXNlbnRlcnk7Civjp6YgPiB0b1wtc3RyaWtlOwor46eXID4gdG9cLWNsYXRjaDsKK+OnliA+IHRvXC1jbHV0Y2g7Civjp4wgPiB0b1wtc2VsZWN0Owor76eCID4gc21hcnR3ZWVkOwor76eBID4gYmVcLWhlYWxlZDsKK++muyA+IG9mZmljaWFsczsKK++muiA+IHRvXC1maW5pc2g7CivjprsgPiB0b1wtcHV0XC1vbjsKK++mtSA+IHByZWNlZGVudDsKK+OmtCA+IHRvXC1hcnJlc3Q7Civjpq8gPiBhXC1jZXJ0YWluOwor46aqID4gY29tcGxhaW50Owor46adID4gYmVhdXRpZnVsOwor46aWID4gcmVzZW50ZnVsOwor76aIID4gYmVhdXRpZnVsOwor76aFID4gd2hldHN0b25lOwor46W+ID4gbW9ydGlmaWVkOwor46WzID4gdG9cLXN1cnZleTsKK+OlriA+IG9ic3RpbmF0ZTsKK+OlpyA+IHRvXC1mb2xsb3c7CivjpaYgPiBzYXRpc2ZpZWQ7CivvpaIgPiBkaWZmZXJlbnQ7CivvpZcgPiB0aGluXC1zaWxrOwor46WWID4gcmVkXC1jb2xvcjsKK+OljiA+IHRvXC1yZXNlbnQ7CivjpYAgPiBleGNsdXNpdmU7CivjpLUgPiBjb3Bhc3Npb247CivvpLIgPiBmaXJlcGxhY2U7CivvpKwgPiBnZW50bGVtYW47CivjpKUgPiBzb3Jyb3dmdWw7CivvpJsgPiBjb25mdXNpb247CivjpJggPiBvYnN0aW5hdGU7CivjpJIgPiBrbm93bGVkZ2U7CivjpIsgPiBjb25mdXNpb247CivjpIcgPiB0ZXJyaWZpZWQ7CivjpIYgPiBuYXVzZWF0ZWQ7Civjo7wgPiB0b1wtZW5kdXJlOwor46O6ID4gdGhlXC1oZWFydDsKK+OjkCA+IHRvXC1jaGFuZ2U7CivjoqggPiB0b1wtZGVmZW5kOwor46KhID4gdG9cLWV4aG9ydDsKK+OigCA+IHNpZGVcLXJvb207Civjob8gPiB0b1wtYWNjdXNlOwor46G8ID4gYVwtZ3JhbmFyeTsKK+OhuiA+IGFcLWNvdHRhZ2U7CivjoaIgPiBhXC1jdXJ0YWluOwor46GgID4gYVwtcGljdHVyZTsKK+OhlyA+IHJlZFwtcGFwZXI7CivjoK4gPiB0b1wtZXhwYW5kOwor46CYID4gYW5cLWlzbGFuZDsKK+OetSA+IGZyaXZvbG91czsKK+OeoyA+IGZyYWdyYW5jZTsKK+OdjiA+IHRvXC1kZWNpZGU7CivjnLsgPiB0b1wtYWRtaXJlOwor45ywID4gZXhxdWlzaXRlOwor45yoID4gYmVhdXRpZnVsOwor45yeID4gYmVhdXRpZnVsOwor45yYID4gZGVsaWNhdGVkOwor45yWID4gZXhxdWlzaXRlOwor45yPID4gbGFzdFwtbmFtZTsKK+OciiA+IGV4cXVpc2l0ZTsKK+OchCA+IGxhc3RcLW5hbWU7Civjm74gPiBub3RcLWNsZWFuOwor45u6ID4gbm90XC1jbGVhbjsKK+ObsSA+IGV4cXVpc2l0ZTsKK+OblyA+IGZyaXZvbG91czsKK+OblCA+IGV4cXVpc2l0ZTsKK+OasCA+IGFuXC1lbWJyeW87Civjmq8gPiBsYXN0XC1uYW1lOwor45qbID4gY29ycHVsZW50Owor45qYID4gYVwtcGFydG5lcjsKK+OZtSA+IGFcLWxvb2tvdXQ7CivjmZwgPiBhXC1sb29rb3V0Owor45ijID4gY29tcGFzc2VzOwor45ezID4gZm9yZ2V0ZnVsOwor45ejID4gdG9cLXNuZWV6ZTsKK+OWvCA+IHRvXC1zY2hlbWU7CivjlqYgPiBsb3F1YWNpdHk7CivjloIgPiBsb3F1YWNpdHk7CivjlbsgPiB0b1wtcmVmdXNlOwor45W5ID4gYVwtYnVja2xlcjsKK+OVlyA+IHRvXC1pbmR1Y2U7CivjlZUgPiBkZWNlcHRpb247CivjlZEgPiBhXC1raXRjaGVuOwor45WPID4gYVwta2l0Y2hlbjsKK+OViyA+IHJvY2tcLWxhbmQ7CivjlYggPiB0b1wtbGluZ2VyOwor45S+ID4gbGFzdFwtbmFtZTsKK+OUpyA+IHRvXC1pbmNpdGU7Civjk68gPiB0b1wtZGl2aWRlOwor45OoID4gdG9cLXBpZXJjZTsKK+OTiyA+IHRvXC1mcmVlemU7Civjk4QgPiB0b1wtcGxvdWdoOwor45KXID4gYVwtc2VydmFudDsKK+OSkyA+IHRvXC1lc2NhcGU7CivjkosgPiBhXC1zZXJ2YW50Owor45KIID4gZGFuZ2Vyb3VzOwor45KCID4gdG9cLWJlc3RvdzsKK+ORryA+IGxhc3RcLW5hbWU7Civjka4gPiBsYXN0XC1uYW1lOwor45GnID4gcGVydHVyYmVkOwor45GZID4gZnJpdm9sb3VzOwor45GYID4gYVwtc2VydmFudDsKK+ORjiA+IGxhc3RcLW5hbWU7CivjkYQgPiB0b1wtaW5zdWx0Owor45CvID4gdG9cLWVtcGxveTsKK+OQrSA+IGFcLWdyYW5hcnk7CivjkKkgPiB3aW5lXC1jdXBzOwor45CGID4gdG9cLWZvbGxvdzsKK+W/tSA+IHRoaW5rXC1vZjsKK+S8miA+IGFzc2VtYmxlOwor5a2mID4gbGVhcm5pbmc7CivlvpIgPiBkaXNjaXBsZTsKK+edpiA+IGZyaWVuZGx5Owor5pegID4gbmVnYXRpdmU7CivmlrkgPiBhXC1zcXVhcmU7CivliY0gPiBpblwtZnJvbnQ7CivnnIkgPiBleWVicm93czsKK+ecgSA+IHByb3ZpbmNlOwor55u0ID4gc3RyYWlnaHQ7Civlu6IgPiBhYnJvZ2F0ZTsKK+ebmyA+IGFidW5kYW50Owor6LuSID4gY2FycmlhZ2U7CivlhaggPiBtYWludGFpbjsKK+W7iiA+IGNvcnJpZG9yOwor5buDID4gYWJyb2dhdGU7CivnmrogPiB3cmlua2xlczsKK+W6tyA+IHBlYWNlZnVsOwor6Ze0ID4gbWlkcG9pbnQ7CivouoogPiBoZXNpdGF0ZTsKK+i6hyA+IGhlc2l0YXRlOwor56ysID4gc2VxdWVuY2U7CivlubsgPiBpbGx1c2lvbjsKK+eZhyA+IGVwaWxlcHN5Owor5bGxID4gbW91bnRhaW47CivouJ8gPiBoZXNpdGF0ZTsKK+W3viA+IGtlcmNoaWVmOwor5benID4gc2tpbGxmdWw7CivlrokgPiBwZWFjZWZ1bDsKK+i3nSA+IGRpc3RhbmNlOwor55WMID4gYm91bmRhcnk7Civku7sgPiB0cnVzdFwtdG87Civlj7AgPiBwbGF0Zm9ybTsKK+ixoSA+IGVsZXBoYW50Owor6aKYID4gZm9yZWhlYWQ7Civos6IgPiB2aXJ0dW91czsKK+izhyA+IHByb3BlcnR5Owor6LK8ID4gcGFzdGVcLXRvOwor6LK7ID4gZXhwZW5zZXM7Civosp4gPiB2aXJ0dW91czsKK+i1hCA+IHByb3BlcnR5Owor5bGlID4gZm9vdHdlYXI7CivosZAgPiBhYnVuZGFudDsKK+ixiiA+IGFidW5kYW50Owor5q2mID4gbWlsaXRhcnk7CivnkLIgPiBuZWNrbGFjZTsKK+WwoCA+IHZlcnlcLWZldzsKK+WujCA+IGNvbXBsZXRlOwor5Y2zID4gcHJvbXB0bHk7Civlr7UgPiBmYXZvcml0ZTsKK+ivrSA+IGxhbmd1YWdlOwor54+NID4gcHJlY2lvdXM7Civlr4wgPiBhYnVuZGFudDsKK+WVhiA+IGNvbW1lcmNlOwor5a6dID4gdHJlYXN1cmU7CivljYMgPiB0aG91c2FuZDsKK+WunCA+IHN1aXRhYmxlOwor5a6YID4gb2ZmaWNpYWw7Civnq5kgPiBzdGFuZFwtdXA7CivlrbggPiBsZWFybmluZzsKK+itrCA+IG1ldGFwaG9yOwor6aaZID4gZnJhZ3JhbnQ7CivkvLwgPiByZXNlbWJsZTsKK+WsoiA+IHRyb3VibGVkOwor6Jm9ID4gYWx0aG91Z2g7Civpm4YgPiBhc3NlbWJsZTsKK+S4lCA+IG1vcmVvdmVyOwor6LCDID4gdHJhbnNmZXI7Civlq4kgPiBqZWFsb3VzeTsKK+eLgyA+IHRvXC1jb3ZldDsKK+WrgSA+IHRvXC1tYXJyeTsKK+iqvyA+IHRyYW5zZmVyOwor6KqeID4gbGFuZ3VhZ2U7CivlqpogPiBjaGFybWluZzsKK+iqmCA+IHBlcnN1YWRlOwor6LS5ID4gZXhwZW5zZXM7CivoqoQgPiBldWxvZ2l6ZTsKK+ipsyA+IGRldGFpbGVkOwor6KmwID4gcXVlc3Rpb247Civmg4ogPiBmcmlnaHRlbjsKK+aUryA+IGRpc3BlcnNlOwor56qBID4gc3VkZGVubHk7CivoqZUgPiBhcHByYWlzZTsKK+WooCA+IHByZWduYW50Owor5Y+lID4gc2VudGVuY2U7CivmmL4gPiBtYW5pZmVzdDsKK+WiniA+IGluY3JlYXNlOwor5paZID4gY29uc2lkZXI7CivokZcgPiBtYW5pZmVzdDsKK+WmiiA+IGNvbmNlaXZlOwor5aKDID4gYm91bmRhcnk7Civnu60gPiBjb250aW51ZTsKK+eEoSA+IG5lZ2F0aXZlOwor6KOVID4gYWJ1bmRhbnQ7Civngq0gPiBjaGFyY29hbDsKK+WbtCA+IHN1cnJvdW5kOwor5aKXID4gaW5jcmVhc2U7Civngb0gPiBjYWxhbWl0eTsKK+WhmiA+IGNlbWV0ZXJ5Owor5b+9ID4gc3VkZGVubHk7CivngJUgPiBhcHByb2FjaDsKK+e7tCA+IG1haW50YWluOwor5r+6ID4gc3ByaW5rbGU7Civmv68gPiB3YXNoXC1vdXQ7CivlnqMgPiBsb3dcLXdhbGw7CivkuaAgPiBwcmFjdGljZTsKK+WegiA+IGxldFwtZG93bjsKK+WdgiA+IGhpbGxzaWRlOwor56WWID4gYW5jZXN0b3I7Civor4QgPiBhcHByYWlzZTsKK+WcjSA+IHN1cnJvdW5kOwor57unID4gY29udGludWU7Civlm7IgPiBzdXJyb3VuZDsKK+S8mCA+IHN1cGVyaW9yOwor5ruvID4gYmxvY2tcLXVwOwor6ZmQID4gYm91bmRhcnk7CivmuqIgPiBvdmVyZmxvdzsKK+a4qSA+IGx1a2V3YXJtOwor6JqKID4gbW9zcXVpdG87CivpubggPiBhbGthbGluZTsKK+WZqiA+IGJlXC1ub2lzeTsKK+WYsiA+IHJpZGljdWxlOwor5ribID4gZGVjcmVhc2U7CivlmJQgPiB0b1wtdm9taXQ7CivmgakgPiBraW5kbmVzczsKK+iEsSA+IHRha2VcLW9mZjsKK+a2uCA+IGRyaWVkXC11cDsKK+WWqiA+IG1vdXJuaW5nOwor5aWUID4gcnVuXC1mYXN0Owor5raMID4gc3VyZ2VcLXVwOwor56aBID4gcmVzdHJpY3Q7Civmta4gPiB0b1wtZmxvYXQ7CivkupIgPiBtdXR1YWxseTsKK+a0kiA+IHNwcmlua2xlOwor5pCeID4gdG9cLWNsZWFyOwor5pyxID4gY2lubmFiYXI7Civln58gPiBkaXN0cmljdDsKK+adkCA+IG1hdGVyaWFsOwor6aKdID4gZm9yZWhlYWQ7CivlgbcgPiB0b1wtc3RlYWw7CivkuLkgPiBjaW5uYWJhcjsKK+iTiSA+IGhpYmlzY3VzOwor5oq9ID4gZHJhd1wtb3V0Owor5LuqID4gY2VyZW1vbnk7Civnu40gPiBjb250aW51ZTsKK+S4sCA+IGFidW5kYW50Owor5Y24ID4gbGF5XC1kb3duOwor5b+GID4gcmVtZW1iZXI7CivpmpQgPiBzZXBhcmF0ZTsKK+WHjyA+IGRlY3JlYXNlOwor5Y2TID4gcHJvZm91bmQ7Civngb4gPiBjYWxhbWl0eTsKK+iBmiA+IGFzc2VtYmxlOwor5o2fID4gZGltaW5pc2g7CivojIQgPiBlZ2dwbGFudDsKK+WLvyA+IG11c3RcLW5vdDsKK+mrrSA+IG11c3RhY2hlOwor6YGlID4gZmFyXC1hd2F5Owor5qubID4gY29tYlwtb3V0Owor5biBID4gY3VycmVuY3k7Civli4kgPiBlbmRlYXZvcjsKK+mquCA+IHNrZWxldG9uOwor6IqzID4gZnJhZ3JhbnQ7CivliqogPiB0b1wtZXhlcnQ7CivotLQgPiBwYXN0ZVwtdG87CivpqZogPiBmcmlnaHRlbjsKK+WIpSA+IHNlcGFyYXRlOwor6JCNID4gZHVja3dlZWQ7CivmqIUgPiBmaXJcLXRyZWU7CivnvKkgPiBjb250cmFjdDsKK+iHpSA+IGxpZVwtZG93bjsKK+aFlSA+IGxvbmdcLWZvcjsKK+iHoyA+IG1pbmlzdGVyOwor5oyhID4gb2JzdHJ1Y3Q7CivohpwgPiBtZW1icmFuZTsKK+ammyA+IGhhemVsbnV0Owor5L+KID4gdGFsZW50ZWQ7Civmnp0gPiBicmFuY2hlczsKK+mZtyA+IHN1Ym1lcmdlOwor5LinID4gbW91cm5pbmc7Civli5IgPiBzdHJhbmdsZTsKK+i6uiA+IGxpZVwtZG93bjsKK+WEqiA+IHN1cGVyaW9yOwor6IGKID4gc29tZXdoYXQ7Civpo74gPiBkZWNvcmF0ZTsKK+WEgCA+IGNlcmVtb255Owor5pacID4gc2xhbnRpbmc7CivmlpAgPiBncmFjZWZ1bDsKK+W6nyA+IGFicm9nYXRlOwor6K+mID4gZGV0YWlsZWQ7CivmkKwgPiB0cmFuc2ZlcjsKK+ainyA+IG93bFwtdGh1czsKK+WCmCA+IHVtYnJlbGxhOwor6aGvID4gbWFuaWZlc3Q7Civkuq0gPiBwYXZpbGlvbjsKK+mhlSA+IG1hbmlmZXN0Owor5rObID4gdG9cLWRyaWZ0Owor6aGNID4gZm9yZWhlYWQ7CivpoYwgPiBmb3JlaGVhZDsKK+espiA+IGlcLmRcLlwtdGFnOwor5YWBID4gdG9cLWdyYW50Owor6I+yID4gZnJhZ3JhbnQ7Civot6ggPiBzdHJhZGRsZTsKK+aOqSA+IHRvXC1jb3ZlcjsKK+mggyA+IGFcLW1vbWVudDsKK+manCA+IHNlcGFyYXRlOwor5p+0ID4gZmlyZXdvb2Q7Civkv68gPiBib3dcLWRvd247Civkv6UgPiByaWNrc2hhdzsKK+mCuyA+IG5laWdoYm9yOwor57+SID4gcHJhY3RpY2U7Civpqb4gPiB0b1wtZHJpdmU7Civkvq0gPiBjb21wbGV0ZTsKK+e+niA+IGRpc2dyYWNlOwor6KOkID4gdHJvdXNlcnM7CivkvLAgPiBtZXJjaGFudDsKK+memCA+IHNjYWJiYXJkOwor5YuDID4gc3VkZGVubHk7CivlkpAgPiBpbnN0cnVjdDsKK+aBkiA+IGNvbnN0YW50Owor57OfID4gc2VkaW1lbnQ7Civmia4gPiBkcmVzc1wtdXA7CivotKQgPiB2aXJ0dW91czsKK+mlsCA+IGRlY29yYXRlOwor5pucID4gZ2xvcmlvdXM7Civpm5YgPiBhbHRob3VnaDsKK+S7lSA+IG9mZmljaWFsOwor5Y2nID4gbGllXC1kb3duOwor5LuEID4gc2xhbnRpbmc7CivpmqMgPiBuZWlnaGJvcjsKK+eijSA+IG9ic3RydWN0Owor5pqiID4gc21vb3RobHk7Civmi6YgPiBvYnN0cnVjdDsKK+aKvCA+IG1vcnRnYWdlOwor5oiaID4gcmVsYXRpdmU7CivnuowgPiBjb250aW51ZTsKK+e5vCA+IGNvbnRpbnVlOwor56mGID4gbWFqZXN0aWM7CivnloYgPiBib3VuZGFyeTsKK+mZpSA+IHN1Ym1lcmdlOwor55qxID4gd3JpbmtsZXM7CivnlYUgPiBzbW9vdGhseTsKK+WYuyA+IG1pcnRoZnVsOwor57iuID4gY29udHJhY3Q7CivkuKYgPiBlcXVhbFwtdG87CivmmJQgPiBmb3JtZXJseTsKK+e3tCA+IHByYWN0aWNlOwor6ZeYID4gc3RydWdnbGU7CivnnqogPiBzdGFyZVwtYXQ7CivmlqUgPiB0b1wtc2NvbGQ7CivliaogPiBzY2lzc29yczsKK+WnmiA+IGhhbmRzb21lOwor5o6PID4gdGFrZVwtb3V0Owor57atID4gbWFpbnRhaW47Civor7EgPiBwZXJzdWFkZTsKK+e2miA+IGNvbnRpbnVlOwor57aZID4gY29udGludWU7CivplpMgPiBpbnRlcnZhbDsKK+e0uSA+IGNvbnRpbnVlOwor6IqZID4gaGliaXNjdXM7Civmg7kgPiBpcnJpdGF0ZTsKK+ewvyA+IHJlZ2lzdGVyOwor5pCNID4gZGltaW5pc2g7CivoircgPiBhbmdlbGljYTsKK+ejgSA+IG1hZ25ldGljOwor5q+FID4gcmVzb2x1dGU7CivnrKUgPiBhXC1oYW1wZXI7Civmi5ggPiByZXN0cmFpbjsKK+S8kCA+IGN1dFwtZG93bjsKK+eriiA+IHNlY3JldGx5Owor6YqYID4gaW5zY3JpYmU7CivmhIkgPiBwbGVhc2FudDsKK+eqnCA+IHJ1blwtYXdheTsKK+WvqCA+IHN0b2NrYWRlOwor5oi7ID4gcGVydmVyc2U7CivmsqogPiBzaGFuZ2hhaTsKK+mHnCA+IGNhdWxkcm9uOwor5ZekID4gbGF1Z2hcLWF0Owor5aixID4gcGxlYXN1cmU7Civlq6MgPiBjaGFybWluZzsKK+WuoCA+IGZhdm9yaXRlOwor5oa2ID4gcmVtZW1iZXI7Civpk60gPiBpbnNjcmliZTsKK+mmqCA+IGZyYWdyYW50Owor5riKID4gc3VyZ2VcLXVwOwor56aEID4gYmxlc3Npbmc7CivnqoMgPiBzZWNyZXRseTsKK+mhtyA+IGFcLW1vbWVudDsKK+ekmSA+IG9ic3RydWN0Owor5oSVID4gc3RhcnRsZWQ7CivllaEgPiBtb3JwaGluZTsKK+i0niA+IHZpcnR1b3VzOwor5ZuaID4gcHJpc29uZXI7CivotKYgPiBhY2NvdW50czsKK+mBmSA+IGZhclwtYXdheTsKK+WWuyA+IG1ldGFwaG9yOwor55O3ID4gY3JvY2tlcnk7Civok6YgPiBzdWRkZW5seTsKK+a7niA+IGJsb2NrXC11cDsKK+i0rCA+IGRlY3JlYXNlOwor5LyeID4gdW1icmVsbGE7CivohaUgPiByYXdcLW1lYXQ7Civmu5QgPiBvdmVyZmxvdzsKK+a6hSA+IHNwcmlua2xlOwor5ZK4ID4gdG9nZXRoZXI7CivnlqsgPiBlcGlkZW1pYzsKK+WVqiA+IHN5bGxhYmxlOwor5rKbID4gYWJ1bmRhbnQ7CivohqggPiB0b1wtc3dlbGw7CivlkLEgPiBjaGlycGluZzsKK+i9qSA+IGNhcnJpYWdlOwor6K6lID4gcmlkaWN1bGU7Civoj4wgPiBtdXNocm9vbTsKK+ihjSA+IG92ZXJmbG93Owor5LqoID4gc21vb3RobHk7CivnkJAgPiB0cmlmbGluZzsKK+e7sCA+IGdyYWNlZnVsOwor6IufID4gY2FyZWxlc3M7CivltJsgPiB0b3dlcmluZzsKK+WHuCA+IHByb3RydWRlOwor5ZqjID4gYmVcLW5vaXN5Owor55CbID4gdHJlYXN1cmU7CivlmIAgPiBiYWNrYml0ZTsKK+mTkCA+IHNoYWNrbGVzOwor6LiMID4gaGVzaXRhdGU7CivosJUgPiBwcm9jbGFpbTsKK+i/uCA+IGd1c2hcLW91dDsKK+WJlCA+IHBpY2tcLW91dDsKK+WGgCA+IGhvcGVcLWZvcjsKK+egmiA+IGlua3N0b25lOwor5o2NID4gd2FyZFwtb2ZmOwor6IeAID4gYnV0dG9ja3M7CivlgJQgPiBzdHViYm9ybjsKK+WlhCA+IGVyZVwtbG9uZzsKK+S+pSA+IGJlXC1sdWNreTsKK+aitSA+IGJ1ZGRoaXN0Owor6KSlID4gbWF0dHJlc3M7CivmmZYgPiBzdW5zaGluZTsKK+a8viA+IG92ZXJmbG93Owor55W0ID4gZmFybWxhbmQ7Civnnp8gPiBnbGFyZVwtYXQ7CivnmLggPiBsYW1lbmVzczsKK+a+jiA+IHNwbGF0dGVyOwor5r2mID4gdG9cLWZsb29kOwor5r+SID4gYXBwcm9hY2g7CivlgY4gPiBjbGluZ1wtdG87CivonY4gPiBzY29ycGlvbjsKK+ewuCA+IHdpbm5vd2VyOwor55ifID4gZXBpZGVtaWM7CivlurYgPiBudW1lcm91czsKK+aDpiA+IHRoaW5rXC1vZjsKK+aSgiA+IHB1dFwtZG93bjsKK+ivmCA+IHF1ZXN0aW9uOwor5pmXID4gcHJlXC1kYXduOwor6LmKID4gZm9vdHBhdGg7CivnorEgPiBhbGthbGluZTsKK+mYiSA+IGNhc3RyYXRlOwor5reGID4gY29uZnVzZWQ7CivokKYgPiBlbnRhbmdsZTsKK+amhiA+IGVsbVwtdHJlZTsKK+eMnSA+IGFicnVwdGx5Owor6LWTID4gY29udGludWU7Civmnq0gPiBvd2xcLXRodXM7Civmm6YgPiBzdW5saWdodDsKK+mSiiA+IGVuZGVhdm9yOwor5pKFID4gcHJvdHJ1ZGU7CivmuKQgPiBzd2VsbGluZzsKK+i+mCA+IHdpbmRsYXNzOwor6ZOdID4gYWx1bWludW07CivmjYsgPiB0b1wtcGx1Y2s7Civnn5cgPiBzdHJhaWdodDsKK+iZuyA+IGhvcnNlZmx5Owor556MID4gZG96ZVwtb2ZmOwor5LqfID4gdXJnZW50bHk7CivmkKogPiB3YXJkXC1vZmY7CivlvqggPiBkb3VidGZ1bDsKK+WVkCA+IHRvXC10YXN0ZTsKK+mVryA+IGJyYWNlbGV0Owor5Yi9ID4gYW1wdXRhdGU7Civol7sgPiBzcGxlbmRpZDsKK+aDsCA+IGluZG9sZW50Owor54eUID4gdG9cLXJvYXN0Owor5radID4gaW51bmRhdGU7CivlgZUgPiB0b2dldGhlcjsKK+mqtyA+IHNrZWxldG9uOwor57ubID4gZGVlcFwtcmVkOwor57SKID4gY29uZnVzZWQ7CivpgoMgPiBwcm9mb3VuZDsKK+awryA+IGNobG9yaW5lOwor5Z2NID4gY29sbGFwc2U7CivlpqkgPiBjaGFybWluZzsKK+WYrSA+IHN5bGxhYmxlOwor5b+QID4gdGltb3JvdXM7CivmrqEgPiBlbmNvZmZpbjsKK+aYtSA+IGludGltYXRlOwor57qtID4gY29uZnVzZWQ7Civkv58gPiB3YWl0XC1mb3I7CivmoaIgPiBoYXJkd29vZDsKK+m7jyA+IHN0aWNrXC10bzsKK+aZjyA+IHBlYWNlZnVsOwor6Zq9ID4gc3VwZXJpb3I7CivnprogPiBkaXN0cmljdDsKK+eXmCA+IHNtYWxscG94Owor5qefID4gYmV0ZWxudXQ7Civpn60gPiBzY2FsbGlvbjsKK+aIviA+IHBlcnZlcnNlOwor6JSrID4gd2l0aGVyZWQ7CivohoIgPiBiYWNrYm9uZTsKK+WeoCA+IGJvdW5kYXJ5Owor6ZWsID4gY2F1bGRyb247Civog6sgPiBzaGluYm9uZTsKK+WTkCA+IHN5bGxhYmxlOwor56G3ID4gYWxrYWxpbmU7Civoh4MgPiBzd2VsbFwtdXA7CivlsowgPiBwZXJpbG91czsKK+eKnyA+IHN0dWJib3JuOwor546OID4gamluZ2xpbmc7CivpgaIgPiBjYXJlbGVzczsKK+WZlCA+IHN5bGxhYmxlOwor5ruTID4gc2VkaW1lbnQ7CivpmrwgPiBhcXVpbGluZTsKK+e/piA+IHNjaXNzb3JzOwor6ZmyID4gZnJvbnRpZXI7CivosLYgPiBwcm9waGVjeTsKK+WBuyA+IGh1bXBiYWNrOwor6ZOCID4gcGxhdGludW07CivnupsgPiBhXC1iYW5uZXI7Civmh78gPiB2aXJ0dW91czsKK+mTrCA+IGNocm9taXVtOwor5aiGID4gZ3JhY2VmdWw7CivmhbUgPiBpbmRvbGVudDsKK+iDsCA+IHBhbmNyZWFzOwor6KaDID4gcmVhY2hcLXRvOwor6YG9ID4gc3VkZGVubHk7Civnnb4gPiB0ZXN0aWNsZTsKK+e8nCA+IGRldGFpbGVkOwor5YCoID4gYXJyb2dhbnQ7CivorqMgPiBvYml0dWFyeTsKK+mSmyA+IHRpdGFuaXVtOwor5rWDID4gc2F0dXJhdGU7Civml5YgPiByb21hbnRpYzsKK+e8mSA+IHJlZFwtc2lsazsKK+WYoyA+IHN5bGxhYmxlOwor5oeLID4gc3BsZW5kaWQ7Civoob4gPiBjb3ZlcmxldDsKK+WuuCA+IGltcGVyaWFsOwor5L2eID4gZmxhdHRlcnk7Civom5QgPiB0YXBld29ybTsKK+elnCA+IGJsZXNzaW5nOwor5rCFID4gb3ZlcmNvYXQ7CivmsJ8gPiBmbHVvcmluZTsKK+awsCA+IGN5YW5vZ2VuOwor6bKfID4gc3R1cmdlb247CivlqZUgPiBoYW5kc29tZTsKK+ehkiA+IHNlbGVuaXVtOwor6IioID4gYVwtc2FtcGFuOwor54OKID4gdG9cLXNtZWx0Owor6JCxID4gZGF5XC1saWx5Owor55a4ID4gamF1bmRpY2U7Civpk4ogPiB0aGFsbGl1bTsKK+ivgiA+IGV4ZWdlc2lzOwor6ZuJID4gcGhlYXNhbnQ7CivpoqIgPiBsdW1pbm91czsKK+mSjyA+IGJyYWNlbGV0Owor5qCAID4gZ2FyZGVuaWE7Civnu5QgPiB0cm91c2VyczsKK+e8tSA+IGNvbnRpbnVlOwor5rqYID4gYWJydXB0bHk7Civor5IgPiBiZXF1ZWF0aDsKK+awpiA+IGZsdW9yaW5lOwor6aKfID4gZGF3ZGxpbmc7Civnl6sgPiBlcGlsZXBzeTsKK+iLiyA+IGFtYXJhbnRoOwor54CjID4gc2VhXC1taXN0Owor566dID4gdHdlZXplcnM7CivoubAgPiBoZXNpdGF0ZTsKK+i1gCA+IHByb3BlcnR5Owor5qWuID4gbXVsYmVycnk7CivplYogPiB0d2VlemVyczsKK+mBhCA+IHRvXC1odXJyeTsKK+mSkiA+IHZhbmFkaXVtOwor6Iu3ID4gbGljb3JpY2U7Civli7AgPiBwZWFjZWZ1bDsKK+awvSA+IHRvXC1mbG9hdDsKK+mSqCA+IHR1bmdzdGVuOwor5oSmID4gY29uZnVzZWQ7Civln7ggPiBhXC1ib3JkZXI7Civpq4AgPiBidXR0b2NrczsKK+WrkiA+IGRhdWdodGVyOwor5LybID4gaHVtcGJhY2s7CivnmZwgPiBlcnl0aGVtYTsKK+egpiA+IHN0b2NrYWRlOwor6bi5ID4gdGhlXC1jcm93Owor5pubID4gdHdpbGlnaHQ7Civmp78gPiBoaWJpc2N1czsKK+mqmCA+IHN0YWxsaW9uOwor5bqRID4gY29ycmlkb3I7CivlnbsgPiBhblwtaXNsZXQ7Civop6sgPiB0b1wtc3RhcnQ7Civpk7UgPiBhbW1vbml1bTsKK+awqSA+IGFyZ29uaXVtOwor5ayWID4gZmF2b3JpdGU7CivljaMgPiB3aW5lXC1wb3Q7CivplJEgPiBhbnRpbW9ueTsKK+mGmyA+IGFsZGVoeWRlOwor6ZK9ID4gdGFudGFsdW07CivnoLwgPiBjb25jcmV0ZTsKK+eGmCA+IHRvXC1zdGVhbTsKK+iTgSA+IGFidW5kYW50Owor6K+UID4gZXVsb2dpemU7CivnqqggPiBhXC1jZWxsYXI7CivmoLIgPiBtYW5ncm92ZTsKK+S7syA+IHNlcGFyYXRlOwor6bKjID4gc2tpcGphY2s7CivnmL8gPiBzd2VsbGluZzsKK+mTtyA+IHJ1YmlkaXVtOwor6ZOVID4gZXVyb3BpdW07CivpkosgPiBwb2xvbml1bTsKK+egkSA+IHRvXC1ncmluZDsKK+aeniA+IGZpclwtdHJlZTsKK+a0qyA+IHRvXC1kaXRjaDsKK+aPniA+IHRvXC1jb3ZlcjsKK+WfmiA+IGNydWNpYmxlOwor5Z6kID4gYW50XC1oaWxsOwor5Y26ID4gd2luZWN1cHM7CivlmI8gPiBmZWxpY2l0eTsKK+myvSA+IGZsYXRmaXNoOwor6bKtID4gbWFja2VyZWw7CivpkqogPiBzY2FuZGl1bTsKK+mSqyA+IGZyYW5jaXVtOwor6ZKQID4gc2FtYXJpdW07CivnpZMgPiBleG9yY2lzZTsKK+agsyA+IGFcLWJhc2tldDsKK+W+vCA+IGZyb250aWVyOwor5ZCyID4gc21pbGVcLWF0Owor6I6wID4gY2FtcGhhbmU7CivoirQgPiBmbHVvcmVuZTsKK+S7nSA+IHRvZ2V0aGVyOwor6LWcID4gYWJzdHJ1c2U7CivpvpMgPiBhXC1oYWx0ZXI7CivpvJogPiBkcnVtbWluZzsKK+m6riA+IHBvcnJpZGdlOwor6bm8ID4gYWxrYWxpbmU7Civpt6kgPiBwaGVhc2FudDsKK+m3iiA+IHBoZWFzYW50Owor6bWrID4gcGhlYXNhbnQ7CivptZkgPiBhXC1zaHJpa2U7CivptLAgPiB0aGVcLWNyb3c7Civps64gPiBjaGlja2VuczsKK+mzhyA+IHN0dXJnZW9uOwor6bK6ID4gY2F0XC1maXNoOwor6bGjID4gc3R1cmdlb247CivpsZggPiBzdHVyZ2VvbjsKK+mwuSA+IHNraXBqYWNrOwor6bCJID4gc3R1cmdlb247CivpsIggPiBmbGF0ZmlzaDsKK+mvuiA+IGJsb3dmaXNoOwor6a+4ID4gYmxvd2Zpc2g7Civpr5YgPiBtYWNrZXJlbDsKK+mukCA+IGJsb3dmaXNoOwor6a2oID4gYmxvd2Zpc2g7CivprK0gPiBzdHJ1Z2dsZTsKK+msrCA+IHN0cnVnZ2xlOwor6ayqID4gc3RydWdnbGU7CivprKYgPiBzdHJ1Z2dsZTsKK+mspSA+IHN0cnVnZ2xlOwor6ayLID4gZm9yZWxvY2s7CivprIAgPiB0b1wtc2hhdmU7Civpq7UgPiB3aGlza2VyczsKK+mrjiA+IGhpcFwtYm9uZTsKK+mpgCA+IHN1ZGRlbmx5Owor6aitID4gc3RhbGxpb247Civpp74gPiBydW5cLWF3YXk7Civpp6YgPiB0b1wtbW91bnQ7Civpp5UgPiB0b1wtZHJpdmU7CivppqkgPiBhcm9tYXRpYzsKK+mmnyA+IGZyYWdyYW50Owor6aaaID4gYXJvbWF0aWM7CivppKwgPiBwb3JyaWRnZTsKK+mkqyA+IGR1bXBsaW5nOwor6aSpID4gaGljY291Z2g7CivppJ8gPiBsaWJhdGlvbjsKK+mkmSA+IHRvXC1hZG9ybjsKK+misSA+IHRhaXBob29uOwor6aGlID4gbHVtaW5vdXM7CivpoaIgPiBkYXdkbGluZzsKK+mgsiA+IHN0cmFpZ2h0Owor6Z+uID4gc2NhbGxpb247Civpn6EgPiBnb3JnZW91czsKK+mfoCA+IGtuZWVcLXBhZDsKK+mduiA+IHN0b2NraW5nOwor6ZyoID4gY2xvdWRpbmc7Civpm54gPiBjaGlja2VuczsKK+mbiyA+IHN1cGVyaW9yOwor6ZqyID4gc3RhbGxpb247CivpmqkgPiBwcm9mb3VuZDsKK+mYuCA+IGRpc3RyZXNzOwor6Za5ID4gY2FzdHJhdGU7CivplpIgPiBwZWFjZWZ1bDsKK+mVpSA+IGx1dGV0aXVtOwor6ZG3ID4gdHdlZXplcnM7CivpkaUgPiBsdXRldGl1bTsKK+mRlSA+IHR1bmdzdGVuOwor6ZGKID4gY2F1bGRyb247CivpkLIgPiBicmFjZWxldDsKK+mQhyA+IHZhbmFkaXVtOwor6Y6iID4gdHVuZ3N0ZW47CivpjokgPiB0aGFsbGl1bTsKK+mNqSA+IG5vYmVsaXVtOwor6Y2aID4gZnJvbnRsZXQ7CivpjJIgPiBhY3Rpbml1bTsKK+mLgSA+IGFsdW1pbnVtOwor6YqsID4gc2hhY2tsZXM7CivpiqogPiBldXJvcGl1bTsKK+mKqCA+IGFtbW9uaXVtOwor6YqjID4gcnViaWRpdW07Civpio0gPiBhXC1zaWNrbGU7CivpibsgPiBjaHJvbWl1bTsKK+mJrSA+IHRhbnRhbHVtOwor6YmRID4gcGxhdGludW07CivpiYggPiB0aGFsbGl1bTsKK+mJhiA+IHRyZWFzdXJlOwor6YiqID4gYnJhY2VsZXQ7CivpiKcgPiBzY2FuZGl1bTsKK+mIpiA+IHRpdGFuaXVtOwor6YiBID4gZnJhbmNpdW07Civph6kgPiB2YW5hZGl1bTsKK+mHpyA+IGJyYWNlbGV0Owor6YekID4gc2FtYXJpdW07Civph6EgPiBjYXVsZHJvbjsKK+mHmSA+IHBvbG9uaXVtOwor6YeXID4gZW5kZWF2b3I7CivphqkgPiBzZWRpbWVudDsKK+mGhiA+IHdpbmVcLWN1cDsKK+mGgyA+IG1hcmluYXRlOwor6YWyID4gaGFuZ292ZXI7CivphLAgPiBuZWlnaGJvcjsKK+mEiCA+IHNsaXBwZXJzOwor6YKFID4gaGVzaXRhbnQ7Civov7sgPiB0b1wtc2hpZnQ7CivovYogPiBheGxlXC10aXA7CivovYYgPiB3aW5kbGFzczsKK+i8rSA+IGZsZXhpYmxlOwor6LysID4gYVwtaGVhcnNlOwor6LudID4gYXhsZVwtdGlwOwor6LqtID4gdG9cLWRlbGF5Owor6LqVID4gaGVzaXRhdGU7Civoub4gPiB0b1wtc3F1YXQ7CivouacgPiB0b1wtc3BvaWw7CivouKYgPiB0aGVcLXNoaW47Civot4UgPiBjYXJlbGVzczsKK+i3giA+IGNyZWVwaW5nOwor6LWsID4gZGVlcFwtcmVkOwor6LSSID4gdmlydHVvdXM7Civos74gPiBhYnN0cnVzZTsKK+izrCA+IGFjY291bnRzOwor6LOhID4gY29udGludWU7CivosrYgPiBkZWNyZWFzZTsKK+iysiA+IHByb3BlcnR5Owor6LGOID4gdmVydGljYWw7CivorpYgPiBwcm9waGVjeTsKK+ituSA+IHRvXC1zaG91dDsKK+itnCA+IHJlZ2lzdGVyOwor6K2UID4gZXVsb2dpemU7CivorY8gPiByaWRpY3VsZTsKK+isvyA+IHJpZGljdWxlOwor6Ky8ID4gdG9cLXNob3V0Owor6KutID4gcHJvY2xhaW07Civoq4YgPiB0b1wtY2hlYXQ7CivoqZIgPiBiZXF1ZWF0aDsKK+ipiyA+IHRvXC1jdXJzZTsKK+ipiiA+IHBsZWFzaW5nOwor6KmBID4gZXhlZ2VzaXM7CivoqIMgPiBvYml0dWFyeTsKK+iltiA+IGlnbm9yYW50Owor6KWrID4gcmFpbmNvYXQ7CivopY8gPiByYWluY29hdDsKK+iksiA+IHRyb3VzZXJzOwor6KSMID4gdHJvdXNlcnM7Civoo68gPiBjb3ZlcmxldDsKK+igjSA+IHNjb3JwaW9uOwor6J2xID4gaG9yc2VmbHk7CivonZ8gPiBoZWRnZWhvZzsKK+idjyA+IFwoaW5zZWN0XCk7CivonLEgPiBcKGluc2VjdFwpOwor6JyWID4gdGFwZXdvcm07CivomrMgPiBhbnRcLWVnZ3M7CivompggPiB0YXBld29ybTsKK+ialCA+IGFudFwtZWdnczsKK+iWuCA+IGR1Y2t3ZWVkOwor6JaGID4gdG9cLWNvdmVyOwor6JWjID4gaGliaXNjdXM7CivolIkgPiBlYXJ0aFwtdXA7CivokZYgPiBmb2xsaWNsZTsKK+iLkCA+IHNlcXVlbmNlOwor6ImpID4gdGhvbGVwaW47CivoiYwgPiB0b1wtY2F1bGs7CivohrUgPiBwYW5jcmVhczsKK+iEsCA+IHRoZVwtbmVjazsKK+iEqyA+IHRha2VcLW9mZjsKK+iEmyA+IHNoaW5ib25lOwor6IOuID4gdG9cLXN3ZWxsOwor6IKoID4gdG9cLXN3ZWxsOwor6IKPID4gY29wdWxhdGU7CivogI8gPiB3aGlza2VyczsKK+e/rCA+IHBoZWFzYW50Owor57+rID4gY2FyZWxlc3M7CivnvYcgPiBhXC1nb2JsZXQ7CivnvLcgPiBsYXlcLWRvd247CivnupggPiBjb250aW51ZTsKK+e5liA+IHVtYnJlbGxhOwor57i/ID4gc3RyZWFtZXI7CivnuLQgPiB0b3dcLWxpbmU7CivnuJ0gPiBkZXRhaWxlZDsKK+e4iSA+IHJlZFwtc2lsazsKK+e4iCA+IGVudGFuZ2xlOwor57e7ID4gZGVsaWNhdGU7Civntr0gPiBncmFjZWZ1bDsKK+e2ryA+IHRvXC1icmFpZDsKK+e2qiA+IGRhcmtcLXJlZDsKK+e1uyA+IG1vdXJuaW5nOwor57WzID4gZGVlcFwtcmVkOwor57WdID4gdHJvdXNlcnM7CivntJ4gPiBhXC1mcmluZ2U7CivntJwgPiBjb25mdXNlZDsKK+exoyA+IGJvd1wtY2FzZTsKK+ewrCA+IFwoYmFtYm9vXCk7CivnroIgPiBcKGJhbWJvb1wpOwor56uiID4gd2FpdFwtZm9yOwor56uEID4gcnVuXC1hd2F5Owor56ePID4gdG9cLXdhc3RlOwor56W/ID4gYmxlc3Npbmc7CivnpbwgPiBsaWJhdGlvbjsKK+ejnyA+IG1lZGlvY3JlOwor56KPID4gY29sb3VyZWQ7Civnoa8gPiBpbmtzdG9uZTsKK+eguSA+IGFzdGF0aW5lOwor56C1ID4gc3lsbGFibGU7Civnn4sgPiB0b1wtc3RhcmU7CivnnpMgPiB0b1wtc2xlZXA7CivnnY8gPiBiZVwtdGlyZWQ7CivnnYUgPiBiaWdcLWV5ZWQ7Civnm6wgPiBzYWx0XC1waXQ7Civnm5kgPiBhXC1iYXNrZXQ7Civnmp0gPiBsdW1pbm91czsKK+eZrSA+IHN3ZWxsaW5nOwor55mSID4gZ2V0XC13ZWxsOwor55mOID4gZXBpbGVwc3k7CivnmYggPiBhYnJvZ2F0ZTsKK+eZgyA+IHdlYWtuZXNzOwor55mAID4gamF1bmRpY2U7CivnmLwgPiBzaWNrbmVzczsKK+eYtiA+IHRvXC1jb3VnaDsKK+eYsCA+IHNjcm9mdWxhOwor55iJID4gZ2V0XC13ZWxsOwor55aHID4gZmFybWxhbmQ7CivnlbogPiBib3VuZGFyeTsKK+eUryA+IHBlYWNlZnVsOwor55ShID4gYWJ1bmRhbnQ7Civnk6kgPiBraWxvd2F0dDsKK+eTpyA+IGRlY2FncmFtOwor55KaID4gc3BsZW5kaWQ7CivnkKsgPiBvcm5hbWVudDsKK+ePtyA+IFwvMlwtcHJcLXN0Owor54+kID4gdHJlYXN1cmU7Civnj44gPiBwcmVjaW91czsKK+ePjCA+IG9ybmFtZW50Owor542YID4gY29sbGFwc2U7CivnirUgPiByZXNvbHV0ZTsKK+eKqyA+IHByb3RydWRlOwor54qOID4gdGhlXC16ZWJ1Owor54qHID4gcnVuXC1mYXN0Owor54mzID4gXChib3ZpbmVcKTsKK+eGpCA+IFwocGVyc29uXCk7CivnhZAgPiBcKHBlcnNvblwpOwor54SMID4gdG9cLWxpZ2h0Owor54KkID4gaWxsdW1pbmU7CivngZEgPiBzcHJpbmtsZTsKK+eAsCA+IG92ZXJmbG93Owor54ChID4gc2xpcHBlcnk7Civmvr4gPiBzbGlwcGVyeTsKK+a+sSA+IHNlZGltZW50Owor5r6HID4gaW51bmRhdGU7CivmvZcgPiBmcmllbmRseTsKK+a9jiA+IHJpcHBsaW5nOwor5rusID4gc2hhbmdoYWk7Civmu4MgPiBzd2VsbGluZzsKK+a6qyA+IGx1a2V3YXJtOwor5rmiID4gYmF0aHJvb207CivmuJUgPiBzdXJnZVwtdXA7CivmtbkgPiBzYXR1cmF0ZTsKK+azkCA+IHRvXC13cml0ZTsKK+ayjSA+IGZyZWV6aW5nOwor5rC+ID4gb3ZlcmZsb3c7CivmsKwgPiBhcmdvbml1bTsKK+awiSA+IHJlc3RsZXNzOwor5q++ID4gYVwtY29hcnNlOwor5q+7ID4gdG9cLW1vdWx0Owor5q+3ID4gcmVzdGxlc3M7Civmrr0gPiBtaXhlZFwtdXA7Civmrq8gPiBlbmNvZmZpbjsKK+aulyA+IHNpY2tuZXNzOwor5qybID4gYVwtaGFuZGxlOwor5quDID4gY3VwYm9hcmQ7Civmqr8gPiBtdWxiZXJyeTsKK+aqsyA+IGJldGVsbnV0Owor5qiaID4gYVwtcHVsbGV5Owor5qWoID4gaGFyZHdvb2Q7CivmpaEgPiBlbG1cLXRyZWU7CivmpIQgPiB0b1wtZ3JhZnQ7CivmorEgPiBkb29yc2lsbDsKK+ailCA+IGdhcmRlbmlhOwor5p+kID4gaGF3dGhvcm47Civmn4UgPiBmbG91cmlzaDsKK+aeuyA+IGxvbmdcLW9hcjsKK+abhiA+IGNhbGVuZGFyOwor5pqxID4gaW50aW1hdGU7CivmmqYgPiBjYWxlbmRhcjsKK+aaoCA+IGRheWJyZWFrOwor5pqJID4gc3Vuc2hpbmU7CivmmacgPiBkYXlicmVhazsKK+aZmyA+IHN1bmxpZ2h0Owor5pikID4gc3Vuc2hpbmU7CivmmKEgPiBsb25nXC1kYXk7Civml5ggPiBhXC1wZW5ub247Civmlr4gPiBhXC1wZW5ub247CivmloggPiBsZWFybmluZzsKK+aVqiA+IHRvXC13ZWlnaDsKK+aVoCA+IHRvXC13ZWlnaDsKK+aUqSA+IG9ic3RydWN0Owor5pSeID4gdG9cLXNwbGl0Owor5pSUID4gb2JzdHJ1Y3Q7Civmk6kgPiB0b1wtc3RhaW47Civmk4sgPiBvYnN0cnVjdDsKK+aSjyA+IHB1bGxcLW91dDsKK+aRtyA+IHRvXC1rbm9jazsKK+aQtSA+IHdpcGVcLW9mZjsKK+aQsiA+IHRvXC1zZWl6ZTsKK+aQryA+IHRha2VcLW91dDsKK+aQiyA+IHRvXC10aHVtcDsKK+aPviA+IHdpcGVcLW9mZjsKK+aPsCA+IHBva2VcLW91dDsKK+aPoiA+IHRvXC1zZWl6ZTsKK+aPnCA+IGNvdmVyXC11cDsKK+aPjCA+IHRvXC1zaGFrZTsKK+aOuSA+IHRvXC1wbHVjazsKK+aNpiA+IHRvXC1zZWl6ZTsKK+aLkSA+IHRvXC1jbGFtcDsKK+aJniA+IHdhcmRcLW9mZjsKK+aJhSA+IGdhdGVcLWJhcjsKK+aHlSA+IHNhdGlhdGVkOwor5oaqID4gY29tcG9zZWQ7CivmhpYgPiBjYXV0aW91czsKK+aGkiA+IGNvbmZ1c2VkOwor5oWtID4gY2F1dGlvdXM7CivmhasgPiB0b1wtYWxhcm07CivmhYUgPiBhZ2l0YXRlZDsKK+aFgSA+IGRpc2hvbm9yOwor5oO9ID4gY29uZnVzZWQ7Civmg7ggPiB0cm91YmxlZDsKK+aDmyA+IGNvbmZ1c2VkOwor5oOUID4gY2hlZXJmdWw7Civmg4QgPiBsb25nXC1mb3I7CivmgqQgPiBhZ2l0YXRlZDsKK+aBnSA+IGNhcmVmcmVlOwor5oGUID4gY2hlZXJmdWw7CivmgYwgPiB0b1wtd29ycnk7CivmgYYgPiBjb25zdGFudDsKK+W/riA+IHN0dWJib3JuOwor5b6vID4gd2FpdFwtZm9yOwor5b24ID4gcmVzdGxlc3M7CivlvYogPiBzdHViYm9ybjsKK+W8oiA+IGJvd1wtY2FzZTsKK+W7pCA+IHRvXC1wbGFjZTsKK+W7oSA+IGNvcnJpZG9yOwor5bq7ID4gbnVtZXJvdXM7CivluqwgPiBhYnVuZGFudDsKK+W5rCA+IGNvdmVyXC11cDsKK+W5oyA+IGN1cnJlbmN5Owor5bi1ID4gcmVtbmFudHM7CivluLEgPiBjb3ZlclwtdXA7Civltq0gPiBlbGV2YXRlZDsKK+W2kiA+IHRvd2VyaW5nOwor5bO/ID4gbW91bnRhaW47CivlsoogPiBmb290aGlsbDsKK+WxvCA+IG1vdW50YWluOwor5a+2ID4gdHJlYXN1cmU7Civlr7MgPiB0cmVhc3VyZTsKK+WvmiA+IHByZWNpb3VzOwor5a6sID4gYXJjaGl2ZXM7CivlrYMgPiB0cm91YmxlZDsKK+WsrCA+IG1pc3RyZXNzOwor5ayhID4gZGF1Z2h0ZXI7CivlrJ0gPiBkZWxpY2F0ZTsKK+WsiCA+IGdyYWNlZnVsOwor5au/ID4gdHJhbnF1aWw7Civlq7UgPiBjaGFybWluZzsKK+WqriA+IGhhbmRzb21lOwor5am+ID4gaGFuZHNvbWU7CivlqK8gPiBwbGVhc3VyZTsKK+WomyA+IHBsZWFzdXJlOwor5aemID4gYWR1bHRlcnk7Civlp5kgPiBjb25jZWl2ZTsKK+WloSA+IGFycm9nYW50Owor5aCdID4gY3J1Y2libGU7Civln7wgPiBoZWFkbGFuZDsKK+WfgCA+IGxldFwtZG93bjsKK+WdriA+IHBsYXRmb3JtOwor5ZylID4gbXVzaHJvb207Civlm64gPiBpbnZlaWdsZTsKK+WbgiA+IGJlXC1ub2lzeTsKK+WauyA+IGJlXC1ub2lzeTsKK+WYpSA+IHRvXC13YXN0ZTsKK+WXgyA+IHRvXC1mbHV0ZTsKK+WWqSA+IG1ldGFwaG9yOwor5ZaTID4gY2hpcnBpbmc7CivllowgPiBzeWxsYWJsZTsKK+WVvSA+IHRvXC1zcGVhazsKK+WVhyA+IHRvXC1zdGFsazsKK+WUpSA+IGFcLWJ1bmRsZTsKK+WToiA+IHN5bGxhYmxlOwor5ZK6ID4gbWFqZXN0aWM7CivlkpwgPiB0b1wtc2NvbGQ7CivlkocgPiBmcmFncmFudDsKK+WRoCA+IHRvXC1zcHVydDsKK+WPkiA+IG9iZWRpZW50Owor5Y61ID4gYVwtc3ByaW5nOwor5Y29ID4gcHJvbXB0bHk7CivljbwgPiB1bnN0ZWFkeTsKK+WNuSA+IHN5bXBhdGh5Owor5YuUID4gZW5kZWF2b3I7Civli4wgPiB0b1wtbGFib3I7CivlirsgPiBmbHVycmllZDsKK+WKmSA+IGFcLWRpdmlkZTsKK+WKiiA+IGFtcHV0YXRlOwor5YmfID4gdG9cLXByaWNrOwor5YinID4gZGlzYXN0ZXI7Civlh6UgPiB0b1wtZHdlbGw7Civlh4UgPiBkcmllZFwtdXA7CivlhrQgPiBmcmVlemluZzsKK+WGsSA+IGZyZWV6aW5nOwor5YaoID4gYWJ1bmRhbnQ7Civlhp0gPiBzdWl0YWJsZTsKK+WGhyA+IGhhdmVcLW5vdDsKK+WFoyA+IGRlY2lncmFtOwor5YWbID4ga2lsb2dyYW07CivlhZkgPiBkZWNhZ3JhbTsKK+WEqSA+IGNvbXBsZXRlOwor5YOlID4gYmVcLWx1Y2t5Owor5YODID4gcHJlcGFyZWQ7Civlg4IgPiBodW1wYmFjazsKK+WCtCA+IGh1bXBiYWNrOwor5YKiID4gc3R1YmJvcm47Civlgp4gPiB1bnN0ZWFkeTsKK+WCjCA+IHRvXC1jdXJzZTsKK+WBuCA+IHRvXC1zdGVhbDsKK+WBsiA+IHRhbGVudGVkOwor5YGrID4gd2FpdFwtZm9yOwor5YGfID4gYWdpdGF0ZWQ7Civkv5MgPiBzdHJhaWdodDsKK+S+qyA+IGZsYXR0ZXJ5Owor5L20ID4gYVwtc2Vjb25kOwor5L2qID4gaGVzaXRhdGU7CivkvYsgPiBjb250aW51ZTsKK+S9gCA+IHJlc2VtYmxlOwor5LyDID4gaGFuZHNvbWU7CivkurkgPiBwcm9ncmVzczsKK+S5tSA+IHRvXC1lbnRlcjsKK+S2siA+IHRoZVwtZWRnZTsKK+S1siA+IHJhd1wtaGVtcDsKK+S1piA+IHRvXC1zdGFpbjsKK+S1miA+IGthb2xpYW5nOwor5LWTID4gdGhlXC1tb2xlOwor5LWJID4gYWJ1dGlsb247CivktLsgPiBkcnlcLWZvb2Q7CivktKsgPiBhbnRlbG9wZTsKK+S0miA+IHNhbHRwb25kOwor5LSXID4gYVwtc2hyaWtlOwor5LO7ID4gYW5cLWVhZ2xlOwor5LOnID4gYW5cLWVhZ2xlOwor5LKWID4gYmlnXC1maXNoOwor5LKOID4gdG9cLXNwb2lsOwor5LCnID4gc2luaXN0ZXI7CivksJ8gPiB0aGVcLXNvdWw7Civkr6ogPiBiaWdcLWhlYWQ7Civkr5ogPiB0aGVcLXJpYnM7Civkr5cgPiBidXR0b2NrczsKK+SvkCA+IHNoaW5ib25lOwor5K+OID4gc2hpbmJvbmU7Civkr4kgPiB0b1wtY2hva2U7Civkr4IgPiBudW1lcm91czsKK+StsSA+IGFcLWxpdHRsZTsKK+SsvCA+IHNhdGlhdGVkOwor5Ky5ID4gYVwtc2lja2xlOwor5KyJID4gaG90XC13aW5kOwor5Ku3ID4gdGhlXC1qb3dsOwor5KubID4gcmVja2xlc3M7Civkq5cgPiByZWNrbGVzczsKK+SrgyA+IHRoZVwtbGlwczsKK+SqtiA+IHRoZVwtY2hpbjsKK+SqqSA+IHRvXC1jaGFudDsKK+SqnCA+IGFcLXNoaWVsZDsKK+SqkSA+IHRvXC1zdGljazsKK+SqiiA+IGFcLWhhbHRlcjsKK+SqhSA+IGFcLXF1aXZlcjsKK+SqgSA+IGFcLWhhbHRlcjsKK+SptCA+IGFcLXF1aXZlcjsKK+SpriA+IGFcLXF1aXZlcjsKK+SpoCA+IGFcLWdpcmRsZTsKK+SpiSA+IHRoZVwtZmFjZTsKK+SpiCA+IGFcLXBsdW1weTsKK+SovCA+IGR5ZXN0dWZmOwor5KerID4gYVwtdHJlbmNoOwor5KeVID4gYm91bmRhcnk7Civkp4EgPiB0b1wtbGVhdmU7CivkpqUgPiB0b1wtbGVhcm47CivkpbggPiBhXC1zaWNrbGU7Civkpa0gPiBldmlkZW5jZTsKK+SlpSA+IGFcLXNpY2tsZTsKK+SljCA+IGV2aWRlbmNlOwor5KWLID4gdG9cLXNtZWx0Owor5KS/ID4gdG9cLWNhcnZlOwor5KS2ID4gYVwtaGFtbWVyOwor5KSzID4gYVwtbWlycm93Owor5KSwID4gdG9cLXNtZWx0Owor5KSrID4gYVwtY2hpc2VsOwor5KSoID4gdG9cLXNwbGl0Owor5KSdID4gYnJhY2VsZXQ7CivkpJAgPiB0b1wtZHJpbms7Civkoq0gPiB0b1wtY292ZXI7CivkopAgPiB0b1wtZ29cLXRvOwor5KKFID4gZGF5YnJlYWs7Civkoa0gPiBhXC1oZWFyc2U7CivkoL4gPiB0b1wtZG9kZ2U7CivkoLkgPiBzaGluYm9uZTsKK+SgrCA+IGluc29tbmlhOwor5KCeID4gd3JpbmtsZWQ7CivkoJAgPiB0b1wtc3F1YXQ7CivkoIMgPiB0b1wtc3F1YXQ7CivkoIEgPiB0b1wtZ29cLXVwOwor5J+4ID4gdGhlXC1jYWxmOwor5J+2ID4gdG9cLXNxdWF0Owor5J+0ID4gdG9cLXNoYWtlOwor5J+UID4gdG9cLWdvXC10bzsKK+SeuCA+IHRvXC1yZWFjaDsKK+SeriA+IHRvXC1jcmF3bDsKK+SenyA+IHRvXC1wcmVzczsKK+SenCA+IHRvXC1yZWFjaDsKK+SelCA+IGRlZXBcLXJlZDsKK+SekyA+IGRlZXBcLXJlZDsKK+SdqCA+IHZpcnR1b3VzOwor5J2CID4gdG9cLWVyZWN0Owor5JysID4gYVwtY2F2ZXJuOwor5JyYID4gdG9cLWd1YXJkOwor5JyQID4gdG9cLWxpYmVsOwor5JyDID4gdG9cLWJsYW1lOwor5JukID4gdXJnZW50bHk7Civkm5IgPiB0b1wtYXJndWU7Civkm4cgPiB0b1wtbGF1Z2g7Civkm4YgPiB0b1wtY3Vyc2U7CivkmrcgPiB0b1wtdHJlYXQ7Civkmq8gPiB0b1wtcXVlbGw7CivkmpsgPiByZWd1bGF0ZTsKK+SYqyA+IG9sZFwtcmFnczsKK+SYnCA+IGFcLW5hcGtpbjsKK+SYmSA+IHRvXC1ndWFyZDsKK+SYmCA+IHRvXC1kcml2ZTsKK+SYlCA+IHRvXC12b21pdDsKK+SYjyA+IHN5bXBhdGh5Owor5JiJID4gc2lsa3dvcm07CivkmIcgPiBtb3NxdWl0bzsKK+SXuiA+IGNyZWVwaW5nOwor5JeeID4gc2lsa3dvcm07Civkl50gPiBzaWxrd29ybTsKK+SXmCA+IGFcLXdlZXZpbDsKK+SXiCA+IGFcLWdhZGZseTsKK+SXhyA+IHRoZVwtdG9hZDsKK+SWuyA+IGVwaGVtZXJhOwor5JamID4gc2NvcnBpb247CivklqQgPiB0b1wtY3JlZXA7Civklp8gPiBhXC1nYWRmbHk7CivklpsgPiBvZlwtdGlnZXI7Civklo8gPiB0b1wtZHdlbGw7CivklowgPiBvZlwtdGlnZXI7CivkloogPiBvZlwtdGlnZXI7CivkloAgPiBhbmdlbGljYTsKK+SVryA+IGR1Y2t3ZWVkOwor5JWBID4gc3VkZGVubHk7CivklL0gPiB0b1wtY292ZXI7CivklJAgPiBkZWxpY2F0ZTsKK+STmSA+IHNsYW50aW5nOwor5JOVID4gcG9seWdhbGE7Civkk4wgPiBwb2x5Z2FsYTsKK+SSsyA+IGFcLWZsb3dlcjsKK+SSgyA+IHRvXC1idWlsZDsKK+SRuyA+IGNvdmVyaW5nOwor5JGYID4gdG9cLXBvdW5kOwor5JGDID4gZGltXC1tb29uOwor5JCSID4gbm90XC1maW5lOwor5I++ID4gdG9cLXN3ZWxsOwor5I+6ID4gdG9cLXN3ZWxsOwor5I+fID4gZmF0XC1tZWF0Owor5I+JID4gdG9cLXdhdmVyOwor5I+IID4gdG9cLXVuaXRlOwor5I66ID4gdG9cLWxlYXJuOwor5I6yID4gZWFyXC1sb2JlOwor5I6uID4gdG9cLXBsYW50Owor5I6rID4gdG9cLXBsYW50Owor5I6jID4gYVwtcGxvdWdoOwor5Iy3ID4gYVwtdGhyZWFkOwor5IyvID4gYVwtdHJ1YmFuOwor5IytID4gcmF3XC1oZW1wOwor5IysID4gc3RyYWlnaHQ7CivkjKsgPiBhXC1oYXdzZXI7CivkjJogPiB3cmlua2xlczsKK+SMgyA+IHJhd1wtc2lsazsKK+SLoSA+IHRvXC1yZWxheDsKK+SLkyA+IHdyaW5rbGVkOwor5IuSID4gdG9cLXJlbGF4Owor5IuDID4gc3Rpbmdpbmc7CivkirggPiB0b1wtdHdpc3Q7Civkip0gPiB0b1wtZXhpbGU7CivkioEgPiBsZWF2aW5nczsKK+SJuyA+IHJlZFwtcmljZTsKK+SJsSA+IGFcLWNyYWRsZTsKK+SJriA+IHRvXC1wbGFudDsKK+SJqiA+IHRvXC1ncmluZDsKK+SJkiA+IGFcLXdpbm5vdzsKK+SItiA+IGFuXC1hcnJvdzsKK+SIqyA+IGFcLWhhd3NlcjsKK+SHsSA+IGFcLWhhd3NlcjsKK+SHjCA+IHRvXC1zdGFuZDsKK+SGuCA+IHNwYWNpb3VzOwor5IaEID4gYVwtYnVuZGxlOwor5IWyID4gdG9cLXBsYW50Owor5IWoID4gZnJhZ3JhbnQ7CivkhaQgPiB0b1wtcGxhbnQ7CivkhZAgPiBhXC1idW5kbGU7CivkhIAgPiBjYWxhbWl0eTsKK+SDuiA+IHRvXC1ncmluZDsKK+SDkSA+IHNwZWNrbGVzOwor5IOFID4gZHllc3R1ZmY7CivkgrsgPiB0b1wtYmxvY2s7CivkgaUgPiB0b1wtYmxpbms7CivkgZwgPiBiaWdcLWV5ZXM7CivkgYIgPiBiaWdcLWV5ZXM7CivkgLUgPiB0b1wtYmxpbms7CivkgIggPiBhXC12ZXNzZWw7Civjv6IgPiB0b1wtc2hpbmU7Civjv6EgPiBhXC1oZWxtZXQ7Civjv5ogPiBzaWNrbmVzczsKK+O/iCA+IGFuXC11bGNlcjsKK+O/hSA+IHJpbmd3b3JtOwor4764ID4gYVwtc2NhYmJ5Owor476uID4gamF1bmRpY2U7Civjvo4gPiBzaWNrbmVzczsKK+O+jSA+IGRpc2Vhc2VzOwor476MID4gcmluZ3dvcm07CivjvoQgPiB0b1wtbGliZWw7CivjvbsgPiBkaXNlYXNlczsKK+O9uSA+IHRvXC1mYWludDsKK+O9kCA+IGZyYWdyYW50Owor47uEID4gdHJlYXN1cmU7CivjupogPiBhblwtb3R0ZXI7CivjuocgPiBhXC13YXJkZW47CivjubggPiB0aGVcLWxpb247CivjuZUgPiBpbmZlcmlvcjsKK+O4vCA+IHRoZVwtemVidTsKK+O4piA+IG11dHVhbGx5Owor47ifID4gdG9cLWNvdmVyOwor47idID4gYVwtc2hvdmVsOwor47iVID4gdG9cLXNlaXplOwor47iJID4gdG9cLWFkYXB0Owor47eGID4gdGhyaXZpbmc7Civjt4AgPiBzb2xpdGFyeTsKK+O2vCA+IHZlcnlcLWhvdDsKK+O2hCA+IHRvXC1zdGFpbjsKK+O1rSA+IGFuXC1pc2xldDsKK+O1piA+IHNsaXBwZXJ5Owor47S2ID4gdG9cLXdhdGVyOwor47SzID4gdG9cLXNtZWFyOwor47SKID4gYW5cLWFieXNzOwor47SIID4gc2VkaW1lbnQ7Civjs6sgPiByZXBlYXRlZDsKK+OzoCA+IHNsaXBwZXJ5Owor47OSID4gc3RhdHV0ZXM7CivjsrggPiBkcmllZFwtdXA7CivjsrcgPiBuaXRyb2dlbjsKK+OytiA+IGNobG9yaW5lOwor47KzID4gdG9cLXRvdWNoOwor47G/ID4gdGhlXC1odXNrOwor47G6ID4gdGhlXC1za2luOwor47GyID4gd2l0aGVyZWQ7CivjsaIgPiB0aGVcLWRlYWQ7CivjsaAgPiB3aXRoZXJlZDsKK+OxlyA+IGFcLWJyZWF0aDsKK+OxhSA+IHZpcnR1b3VzOwor47GDID4gdG9cLWRyaW5rOwor47C6ID4gdG9cLWRyaW5rOwor47C5ID4gdG9cLWxhdWdoOwor47CtID4gcGxlYXN1cmU7CivjsKcgPiB0b1wtZHJpbms7CivjsKMgPiB0b1wtdm9taXQ7CivjsKAgPiB0b1wtY292ZXQ7CivjsJ0gPiB0b1wtY291Z2g7Civjr7AgPiB0b1wtcGxhbnQ7Civjrq0gPiBhXC1jYXNrZXQ7CivjroEgPiBnYXJkZW5pYTsKK+OtmSA+IGFcLWhhbW1lcjsKK+OtiiA+IHRvXC1zcGxpdDsKK+OssCA+IGFcLW1vbWVudDsKK+OspyA+IGFcLWNvbGxhcjsKK+OsoiA+IHN1bnNoaW5lOwor46yhID4gc3Vuc2hpbmU7CivjrJkgPiBzdW5zaGluZTsKK+OslyA+IHN1bnNoaW5lOwor46yMID4gc3Vuc2hpbmU7Civjq70gPiBkYXJrbmVzczsKK+OruyA+IHN1bmxpZ2h0Owor46q/ID4gdG9cLWJyZWFrOwor46qhID4gdG9cLXF1ZWxsOwor46qTID4gZGlzYXN0ZXI7CivjqpAgPiB1bnN0YWJsZTsKK+OqjSA+IHN1ZGRlbmx5Owor46qDID4gdG9cLXRodW1wOwor46qCID4gdW5zdGFibGU7CivjqoAgPiB0b1wtZW50ZXI7Civjqb8gPiB1bnN0YWJsZTsKK+OptCA+IHRvXC1zZWl6ZTsKK+OpqCA+IHRvXC1jcmFjazsKK+OpkyA+IHRvXC13b3VuZDsKK+OpgSA+IHRvXC1rbm9jazsKK+OouSA+IHRvXC1jcmFjazsKK+OosSA+IHRvXC1zaGFrZTsKK+OoqiA+IHRvXC1zaGFrZTsKK+OooCA+IHRvXC1zbWVhcjsKK+OonyA+IHRvXC10b3VjaDsKK+OolCA+IHRvXC1zaGFrZTsKK+OokyA+IHRvXC1jbG9zZTsKK++okCA+IGNlbWV0ZXJ5Owor46iRID4gdG9cLWNvdW50Owor46iIID4gdG9cLWNyb3dkOwor46iBID4gdG9cLXRocm93Owor46e1ID4gdG9cLWV4YWN0Owor76exID4gbmVpZ2hib3I7Civjp7IgPiB0b1wtc2hha2U7Civjp7EgPiB0b1wtYnJpbmc7Civjp6wgPiB0b1wtcmFpc2U7Civvp58gPiBmb290d2VhcjsKK+OngSA+IHRvXC1jbG9zZTsKK++mviA+IGNvbnNpZGVyOwor46a/ID4gYVwtd2luZG93Owor76akID4gdG9cLXR3aXN0Owor46alID4gdGFsZW50ZWQ7CivvpqMgPiB0aGlua1wtb2Y7CivjpqQgPiB2aXJ0dW91czsKK++mliA+IHByYWN0aWNlOwor46aXID4gZGlsaWdlbnQ7CivvposgPiBjYWxlbmRhcjsKK+OmiSA+IHZpcnR1b3VzOwor46WwID4gbW91cm5mdWw7Civvpa0gPiBwcm92aW5jZTsKK+OlqiA+IGRpbGlnZW50Owor76WeID4gY2lubmFiYXI7CivvpZIgPiBzdHJhbmdsZTsKK+OlgyA+IG1vdXJuZnVsOwor46WBID4gbW9yYWxpdHk7CivvpLwgPiBibGVzc2luZzsKK+OksiA+IHRvXC10aGluazsKK+OkriA+IGFuXC1lcnJvcjsKK++kqCA+IGNvcnJpZG9yOwor46SmID4gbW91cm5mdWw7CivjpKQgPiBtb3VybmZ1bDsKK+OkjyA+IGdyaWV2b3VzOwor76SGID4gc2VudGVuY2U7Civjo7AgPiB0b1wtc2hha2U7Civjo6sgPiB0aGVcLWhlZWw7Civjo54gPiB0b1wtd2Fsa2k7Civjo4sgPiBjaW5uYWJhcjsKK+OjhCA+IHBvd2VyZnVsOwor46K0ID4gdGhlXC13ZXN0Owor46KpID4gdG9cLXNob290Owor46KFID4gYVwtc2hpZWxkOwor46GzID4gbW91bnRhaW47CivjoakgPiBhXC1naXJkbGU7CivjoZ0gPiBhXC1uYXBraW47CivjoZYgPiB0b1wtY292ZXI7CivjoLkgPiBhXC10dXJiYW47CivjoLUgPiBhXC10dXJiYW47CivjoIogPiBhXC1ydWdnZWQ7CivjoIkgPiBtb3VudGFpbjsKK+OghSA+IHRvXC1jb3ZlcjsKK+OfkSA+IG1vdW50YWluOwor4569ID4gbW91bnRhaW47CivjnrcgPiBsdXh1aWFudDsKK+OekSA+IHRoZVwtdGFpbDsKK+OeiSA+IGJpZ1wtZm9vdDsKK+OeiCA+IGJpZ1wtZm9vdDsKK+OdsiA+IHRvXC1zbGVlcDsKK+OdriA+IHRvXC1leGlsZTsKK+OdrSA+IHRvXC1hd2FrZTsKK+OdmCA+IGhhcm1vbm95Owor452SID4gdG9cLWR3ZWxsOwor452NID4gdG9cLXdyaXRlOwor452KID4gdG9cLWd1aWRlOwor45y2ID4gYVwtY291cGxlOwor45yzID4gcGVhY2VmdWw7Civjm5sgPiBwcmVnbmFudDsKK+OaoyA+IGhhbmRzb21lOwor45miID4gYVwtdHJvd2VsOwor45mZID4gdG9cLXNtZWFyOwor45mDID4gYVwtY2F2aXR5Owor45iqID4gdG9cLXdhc3RlOwor45igID4gdG9cLWNsb3NlOwor45iZID4gdG9cLWdyb2FuOwor45iRID4gdG9cLWN1cnNlOwor45iAID4gdG9cLXNvdW5kOwor45eqID4gbW91dGhmdWw7Civjl6ggPiB0b1wtbGF1Z2g7Civjl5wgPiB0b1wtc21lbGw7Civjl5sgPiB0b1wtbGF1Z2g7Civjl5MgPiBtb3V0aGZ1bDsKK+OXiSA+IGluY2lzaXZlOwor45a5ID4gdG9cLXNwdXJ0Owor45apID4gbm90XC1wdXJlOwor45aTID4gdG9cLXNob3V0Owor45aHID4gdGhlXC1saXBzOwor45W8ID4gdG9cLWJyYXdsOwor45WbID4gYVwtZnJpZW5kOwor45WQID4gaW5jbGluZWQ7CivjlYogPiB0b1wtc2xhbnQ7CivjlLAgPiBjb25zdGFudDsKK+OUqiA+IHRvXC1jcmF3bDsKK+OUoCA+IGluZHVzdHJ5Owor45SeID4gdmlnb3JvdXM7Civjk7YgPiB0b1wtY2FydmU7Civjk5ogPiBhXC1zaWNrbGU7Civjk5MgPiB0aGluXC1pY2U7CivjkrkgPiB0b1wtdXBzZXQ7CivjkbogPiBzdXBlcmlvcjsKK+ORtCA+IHRvXC11c3VycDsKK+ORsCA+IGRpc3RyZXNzOwor45GNID4gaW5mZXJpb3I7CivjkJwgPiBhblwtZW5lbXk7Civov7cgPiBiZXdpdGNoOwor6L+wID4gbmFycmF0ZTsKK+i/pSA+IGRpc3RhbnQ7CivkuK0gPiBjZW50cmFsOwor5b+XID4gcHVycG9zZTsKK+i/jiA+IHJlY2VpdmU7Civlv4wgPiBqZWFsb3VzOwor5ZKMID4gaGFybW9ueTsKK+i+ryA+IGRpc3B1dGU7CivljrsgPiBnb1wtYXdheTsKK+WvuSA+IGNvcnJlY3Q7CivnnqAgPiBsb29rXC1hdDsKK+W+iyA+IHN0YXR1dGU7CivlvbkgPiBzZXJ2aWNlOwor55y6ID4gbG9va1wtYXQ7CivlvLUgPiBzdHJldGNoOwor5beyID4gYWxyZWFkeTsKK+W8mCA+IGVubGFyZ2U7CivlvJUgPiB0b1wtcHVsbDsKK+W8lCA+IGNvbmRvbGU7CivovIMgPiBjb21wYXJlOwor5oSPID4gdGhvdWdodDsKK+i/myA+IGFkdmFuY2U7Civnm6EgPiBleGhhdXN0Owor5buJID4gdXByaWdodDsKK+aDhSA+IGZlZWxpbmc7CivnmrAgPiBwaW1wbGVzOwor5bqWID4ga2l0Y2hlbjsKK+i6kyA+IHN0dW1ibGU7CivluoQgPiB2aWxsYWdlOwor5bm2ID4gY29tYmluZTsKK+i5oCA+IHN0ZXBcLW9uOwor55mWID4gY3JhdmluZzsKK+W5lSA+IGN1cnRhaW47Civku6MgPiByZXBsYWNlOwor5birID4gdGVhY2hlcjsKK+aAuyA+IGNvbGxlY3Q7CivouI8gPiBzdGVwXC1vbjsKK+W4iCA+IHRlYWNoZXI7Civnl7QgPiBmb29saXNoOwor5Y2OID4gZmxvd2VyeTsKK+W8oCA+IHN0cmV0Y2g7Civnl4cgPiBkaXNlYXNlOwor55eFID4gaWxsbmVzczsKK+eWviA+IGlsbG5lc3M7Civlj40gPiByZXZlcnNlOwor5ZCIID4gY29tYmluZTsKK+eWjiA+IG5lZ2xlY3Q7Civlj5cgPiByZWNlaXZlOwor5YqhID4gYWZmYWlyczsKK+aOpSA+IHJlY2VpdmU7CivltKkgPiBydXB0dXJlOwor54m5ID4gc3BlY2lhbDsKK+acjSA+IGNsb3RoZXM7Civos70gPiBjb21wZXRlOwor6LORID4gcmVsaWV2ZTsKK+enkSA+IHNlY3Rpb247Civov5wgPiBkaXN0YW50Owor6LGrID4gcmVsYXhlZDsKK+iBlCA+IGNvbm5lY3Q7Civkv50gPiBwcm90ZWN0Owor5bC9ID4gZXhoYXVzdDsKK+mdqSA+IGxlYXRoZXI7CivlsI0gPiBjb3JyZWN0Owor5bCKID4gcmVzcGVjdDsKK+WTgSA+IGFydGljbGU7CivlsIkgPiBvZmZpY2VyOwor5aOrID4gc2Nob2xhcjsKK+mHjyA+IG1lYXN1cmU7Civlr74gPiBjb3JyZWN0Owor56iLID4gam91cm5leTsKK+WvqSA+IGV4YW1pbmU7Civlr58gPiBleGFtaW5lOwor5p6BID4gZXh0cmVtZTsKK+S7pCA+IGNvbW1hbmQ7CivmnKogPiBub3RcLXlldDsKK+aMgSA+IHN1c3RhaW47CivljoYgPiBoaXN0b3J5Owor5a6jID4gZGVjbGFyZTsKK+WPsiA+IGhpc3Rvcnk7CivlrpcgPiBsaW5lYWdlOwor6K6uID4gY29uc3VsdDsKK+eOhyA+IHRvXC1sZWFkOwor5aeUID4gYXBwb2ludDsKK+ittyA+IHByb3RlY3Q7CivorbAgPiBjb25zdWx0Owor5YW1ID4gc29sZGllcjsKK+WtlCA+IG9wZW5pbmc7CivkuokgPiBkaXNwdXRlOwor56m2ID4gZXhhbWluZTsKK+isuSA+IHBydWRlbnQ7Civop4YgPiBsb29rXC1hdDsKK+ismyA+IGV4cGxhaW47CivmoLwgPiBwYXR0ZXJuOwor6Ku4ID4gc2V2ZXJhbDsKK+iusiA+IGV4cGxhaW47Civoq6YgPiBjYXJlZnVsOwor5oCVID4gdG9cLWZlYXI7Civni6EgPiBjdW5uaW5nOwor5pu+ID4gYWxyZWFkeTsKK+WHhiA+IGFwcHJvdmU7CivmrrUgPiBzZWN0aW9uOwor57K+ID4gZXNzZW5jZTsKK+ernyA+IGZpbmFsbHk7CivoqqAgPiBzaW5jZXJlOwor6KmuID4gZXhwbGFpbjsKK+aVtCA+IG9yZGVybHk7CivlqYkgPiBhbWlhYmxlOwor5aSHID4gcHJlcGFyZTsKK+WPpiA+IGFub3RoZXI7CivpmYggPiBleGhpYml0Owor5pWFID4gYW5jaWVudDsKK+iomyA+IHN3aW5kbGU7CivoqJcgPiBlbnRydXN0Owor6KGjID4gY2xvdGhlczsKK+ioiiA+IGlucXVpcmU7CivniIYgPiBjcmFja2xlOwor5om5ID4gY29tbWVudDsKK+mAgSA+IHNlZVwtb2ZmOwor5oS/ID4gc2luY2VyZTsKK+WlhyA+IHN0cmFuZ2U7Civnh5UgPiBzd2FsbG93Owor54eIID4gbGFudGVybjsKK+imvSA+IGxvb2tcLWF0Owor5aasID4gamVhbG91czsKK+a4uCA+IHRvXC1zd2ltOwor6KanID4gbG9va1wtYXQ7Civku70gPiBwb3J0aW9uOwor5pWiID4gdG9cLWRhcmU7CivoppYgPiBsb29rXC1hdDsKK+WmliA+IHN0cmFuZ2U7Civnhb0gPiBzdGlyXC11cDsKK+iAgyA+IGV4YW1pbmU7CivmnZEgPiB2aWxsYWdlOwor5pydID4gZHluYXN0eTsKK+iCsiA+IHByb2R1Y2U7CivmiqQgPiBwcm90ZWN0Owor5Zu+ID4gZGlhZ3JhbTsKK+WImCA+IHN1cm5hbWU7CivlpJUgPiBldmVuaW5nOwor5om/ID4gaW5oZXJpdDsKK+ijsyA+IGNsb3RoZXM7CivkuaEgPiBjb3VudHJ5Owor6KOBID4gY3V0XC1vdXQ7Civml6IgPiBhbHJlYWR5Owor5ryUID4gcGVyZm9ybTsKK+aAqiA+IHN0cmFuZ2U7CivoooIgPiBzbGVldmVzOwor6YeHID4gY29sbGVjdDsKK+ihsCA+IGRlY2xpbmU7CivotZsgPiBjb21wZXRlOwor54GvID4gbGFudGVybjsKK+i+gyA+IGNvbXBhcmU7CivooaEgPiBtZWFzdXJlOwor5aGeID4gc3RvcFwtdXA7Civmma8gPiBzY2VuZXJ5Owor6KCiID4gd3JpZ2dsZTsKK+S+nSA+IHJlbHlcLW9uOwor54CdID4gdHJpY2tsZTsKK+iDnCA+IHZpY3Rvcnk7Civmv6EgPiBpbW1lcnNlOwor5r+fID4gdG9cLWhlbHA7Civon4sgPiBjcmlja2V0Owor6J+AID4gY3JpY2tldDsKK+WeiyA+IHBhdHRlcm47CivlnJYgPiBkaWFncmFtOwor5ryGID4gdmFybmlzaDsKK+a8gSA+IHRvXC1maXNoOwor5ZuzID4gZGlhZ3JhbTsKK+aVoyA+IHNjYXR0ZXI7Civom4YgPiBtYWdnb3RzOwor5puyID4gY3Jvb2tlZDsKK+a6tiA+IHRvXC1tZWx0Owor5Y6CID4gZmFjdG9yeTsKK+iCryA+IHdpbGxpbmc7CivmipMgPiBzY3JhdGNoOwor6JmrID4gaW5zZWN0czsKK+a5pyA+IHdlbGxcLXVwOwor6IyDID4gc3VybmFtZTsKK+mdoCA+IGxlYW5cLW9uOwor5risID4gbWVhc3VyZTsKK+aOiCA+IGdpdmVcLXRvOwor5riHID4gdGhpcnN0eTsKK+aJrCA+IHNjYXR0ZXI7Civmt7ogPiBzaGFsbG93Owor5rerID4gb2JzY2VuZTsKK+mCkyA+IHN1cm5hbWU7Civpt4QgPiBjaGlja2VuOwor5ZeHID4gbWlzZXJseTsKK+aKsSA+IGVtYnJhY2U7CivpooQgPiBwcmVwYXJlOwor552bID4gZXllYmFsbDsKK+aLrCA+IGluY2x1ZGU7CivpmY0gPiBkZXNjZW5kOwor6baPID4gY2hpY2tlbjsKK+iuryA+IGlucXVpcmU7CivotbUgPiBzdXJuYW1lOwor5rWFID4gc2hhbGxvdzsKK+engSA+IHByaXZhdGU7CivolJEgPiBkaXNkYWluOwor5a6hID4gZXhhbWluZTsKK+azoSA+IGJ1YmJsZXM7Civpl7kgPiBxdWFycmVsOwor5pWsID4gcmVzcGVjdDsKK+mGkiA+IHdha2VcLXVwOwor5rKMID4gY2hhb3RpYzsKK+aatCA+IHZpb2xlbnQ7CivpsoEgPiBmb29saXNoOwor5oqiID4gcGx1bmRlcjsKK+WRkSA+IHN3YWxsb3c7Civnr4cgPiBjaGFwdGVyOwor6bGIID4gY29kZmlzaDsKK+WRgiA+IHN1cm5hbWU7Civmi6UgPiBlbWJyYWNlOwor5ZCKID4gY29uZG9sZTsKK+ivuCA+IHZhcmlvdXM7Civoj68gPiBmbG93ZXJ5Owor5Y+tID4gdHJ1bXBldDsKK+a1iyA+IG1lYXN1cmU7CivpmIUgPiBleGFtaW5lOwor5Y+ZID4gZXhwcmVzczsKK+eMmyA+IHZpb2xlbnQ7Civljq0gPiBkaXNsaWtlOwor5Y6oID4ga2l0Y2hlbjsKK+mbhSA+IGVsZWdhbnQ7Civpm7cgPiB0aHVuZGVyOwor6a2vID4gZm9vbGlzaDsKK+m4oSA+IGNoaWNrZW47Civor5ogPiBzaW5jZXJlOwor56ueID4gY29udGVuZDsKK+aTjSA+IGNvbmR1Y3Q7CivljZIgPiBzb2xkaWVyOwor6K+6ID4gcHJvbWlzZTsKK+WMhiA+IGhhc3RpbHk7CivmrIUgPiB6ZWxrb3ZhOwor6Iu6ID4gYmVycmllczsKK+WLnSA+IHZpY3Rvcnk7Civlh60gPiBsZWFuXC1vbjsKK+WLmSA+IGFmZmFpcnM7Civoi5cgPiBzcHJvdXRzOwor56KwID4gY29sbGlkZTsKK+iLkSA+IHBhc3R1cmU7Civku78gPiBpbWl0YXRlOwor5qmfID4gbWFjaGluZTsKK+agjyA+IHJhaWxpbmc7CivpqJkgPiBzd2luZGxlOwor5YiIID4gY3V0XC1vZmY7Civni6AgPiB2aWNpb3VzOwor5pigID4gcHJvamVjdDsKK+aIqiA+IGN1dFwtb2ZmOwor5b+gID4gbG95YWx0eTsKK+aJjiA+IHB1bGxcLXVwOwor6IW5ID4gc3RvbWFjaDsKK+altSA+IGV4dHJlbWU7CivoiJIgPiBvcGVuXC11cDsKK+mqlyA+IHN3aW5kbGU7Civlh7YgPiBjdWxwcml0Owor5oWwID4gY29tZm9ydDsKK+mkmCA+IHN1cnBsdXM7CivmkpIgPiByZWxlYXNlOwor5oSBID4gYW54aWV0eTsKK+aWpCA+IGFcLWNhdHR5Owor5YORID4gc29qb3VybjsKK+aJtiA+IHN1cHBvcnQ7Civmr4EgPiBkZXN0cm95Owor6L6pID4gZGlzcHV0ZTsKK+iDgyA+IHN0b21hY2g7CivmorAgPiB3ZWFwb25zOwor6JKLID4gc3VybmFtZTsKK+WCmSA+IHByZXBhcmU7Civov50gPiBkaXNvYmV5Owor5LiiID4gZGlzY2FyZDsKK+iChiA+IGluZHVsZ2U7CivlgrsgPiBmb29saXNoOwor57uVID4gZW50d2luZTsKK+iBsyA+IHVyZ2VcLW9uOwor5raCID4gc3VybmFtZTsKK+iIsCA+IHdhcnNoaXA7CivmgbwgPiBhbmdlcmVkOwor6L6jID4gcGVwcGVyeTsKK+WAmiA+IHJlbHlcLW9uOwor6aCQID4gcHJlcGFyZTsKK+aXiyA+IHJldm9sdmU7CivlgIkgPiBncmFuYXJ5Owor6L69ID4gZGlzdGFudDsKK+e9miA+IHBlbmFsdHk7Civmi74gPiBwaWNrXC11cDsKK+aBoiA+IHJlc3RvcmU7Civnv4EgPiBvbGRcLW1hbjsKK+e+vSA+IGZlYXRoZXI7CivmipYgPiB0cmVtYmxlOwor6KeIID4gbG9va1wtYXQ7Civkvq8gPiBtYXJxdWlzOwor5oORID4gY29uZnVzZTsKK+S9tSA+IGNvbWJpbmU7CivnvbAgPiBwZW5hbHR5Owor6ZuVID4gZW5ncmF2ZTsKK+WOjCA+IGRpc2xpa2U7Civlr78gPiBvbGRcLWFnZTsKK+i3jCA+IHN0dW1ibGU7CivplKYgPiBicm9jYWRlOwor5p2PID4gYXByaWNvdDsKK+m7jiA+IHN1cm5hbWU7CivmhYwgPiBuZXJ2b3VzOwor5bGgID4gYnV0Y2hlcjsKK+afjyA+IGN5cHJlc3M7CivpnI0gPiBxdWlja2x5Owor6Zm2ID4gcG90dGVyeTsKK+aRhCA+IHRha2VcLWluOwor5peoID4gcHVycG9zZTsKK+mXryA+IHJ1c2hcLWluOwor5YavID4gc3VybmFtZTsKK+aJsCA+IGRpc3R1cmI7Civpm4AgPiBzcGFycm93Owor5aicID4gZWxlZ2FudDsKK+aariA+IGV2ZW5pbmc7CivpmIEgPiBjaGFtYmVyOwor5Y2iID4gY290dGFnZTsKK+WQniA+IHN3YWxsb3c7Civmn5wgPiBjYWJpbmV0Owor5pqHID4gbGVpc3VyZTsKK+aEpyA+IGFzaGFtZWQ7CivmmbYgPiBjcnlzdGFsOwor57meID4gZW50d2luZTsKK+aZnSA+IGRheXRpbWU7CivnrYsgPiBtdXNjbGVzOwor57i9ID4gY29sbGVjdDsKK+aYvCA+IGRheXRpbWU7CivlkqggPiBpbnF1aXJlOwor5pKRID4gcHJvcFwtdXA7CivpgIYgPiBkaXNvYmV5Owor5aGrID4gZmlsbFwtaW47Civml7ogPiBwcm9zcGVyOwor57esID4gZGlzdGFudDsKK+iwqCA+IHBydWRlbnQ7CivmuLQgPiB0aGlyc3R5Owor55aPID4gbmVnbGVjdDsKK+iAlyA+IGNvbnN1bWU7Civnt48gPiBjb2xsZWN0Owor6ZayID4gZXhhbWluZTsKK+mSpiA+IHJlc3BlY3Q7CivplqMgPiBjaGFtYmVyOwor5pmLID4gYWR2YW5jZTsKK+aCpiA+IHBsZWFzZWQ7CivmlpEgPiBtb3R0bGVkOwor6Le1ID4gdHJhbXBsZTsKK+i0viA+IHN1cm5hbWU7CivmuJQgPiB0b1wtZmlzaDsKK+iUoSA+IHN1cm5hbWU7Civmg7YgPiBmZWFyZnVsOwor57C+ID4gYVwtYmxpbmQ7CivotKkgPiBwZWRkbGVyOwor5oiIID4gaGFsYmVyZDsKK+mQkCA+IGZldHRlcnM7Civmj5ogPiBzY2F0dGVyOwor6Jm5ID4gcmFpbmJvdzsKK+evhCA+IHBhdHRlcm47Civlr6EgPiB3aWRvd2VkOwor5ZCVID4gc3VybmFtZTsKK+mDiiA+IHN1YnVyYnM7Civlvr0gPiBhXC1iYWRnZTsKK+iwrSA+IHN1cm5hbWU7CivmjaggPiBkaXNjYXJkOwor6bKNID4gYWJhbG9uZTsKK+S7kyA+IGdyYW5hcnk7CivpjKYgPiBicm9jYWRlOwor56yEID4gaGFpcnBpbjsKK+ayviA+IG1vaXN0ZW47Civnq7YgPiBjb250ZW5kOwor5L+eID4gc3VybmFtZTsKK+eekiA+IGRlY2VpdmU7Civnq4MgPiBmdXJuYWNlOwor5L6oID4gc29qb3VybjsKK+aBsyA+IHNpbmNlcmU7CivmipIgPiBleHByZXNzOwor5aecID4gc3VybmFtZTsKK+aJsSA+IGNvbGxlY3Q7CivnqL0gPiBleGFtaW5lOwor6KOUID4gcHJvZ2VueTsKK+eduSA+IGxvb2tcLWF0Owor5YyqID4gYmFuZGl0czsKK+a9mCA+IHN1cm5hbWU7CivmhpEgPiBsZWFuXC1vbjsKK+amnCA+IHBsYWNhcmQ7CivmnokgPiB1c2VsZXNzOwor57yFID4gZGlzdGFudDsKK+aFpSA+IHNpbmNlcmU7CivpqocgPiB0ZXJyaWZ5Owor5oWHID4gY2FyZWZ1bDsKK+esqCA+IGZvb2xpc2g7CivogLggPiB1cmdlXC1vbjsKK+i4qSA+IHN0ZXBcLW9uOwor6YO3ID4gY291bnRyeTsKK+aDsSA+IGFuZ2VyZWQ7CivmgrggPiBmZWFyZnVsOwor5pKwID4gY29tcG9zZTsKK+aDrSA+IGFzaGFtZWQ7CivlnoMgPiBnYXJiYWdlOwor6am8ID4gYVwtY2FtZWw7CivpgaAgPiBkaXN0YW50Owor6YGVID4gZGlzb2JleTsKK+mBkSA+IGxlaXN1cmU7CivlnL4gPiBnYXJiYWdlOwor6LG5ID4gbGVvcGFyZDsKK+e8tCA+IGRlbGl2ZXI7Civlk6ggPiB3aGlzdGxlOwor6YCyID4gYWR2YW5jZTsKK+WavCA+IHByYXR0bGU7CivmmKcgPiBvYnNjdXJlOwor5ouiID4gY29sbGVjdDsKK+aXsSA+IGRyb3VnaHQ7Civor6EgPiBkZWNlaXZlOwor5pCFID4gZGlzdHVyYjsKK+iBgiA+IHdoaXNwZXI7Civojr0gPiB0aGlja2V0Owor6aaAID4gc3VycGx1czsKK+aAoSA+IGhhcm1vbnk7Civljq4gPiBzZXJ2YW50Owor6IyoID4gY2FsdHJvcDsKK+eymCA+IHZpc2NvdXM7CivmkacgPiBkZXN0cm95Owor5py9ID4gZGVjYXllZDsKK+WotCA+IGVsZWdhbnQ7CivnhJUgPiBzaGluaW5nOwor6LGBID4gb3BlblwtdXA7CivoqbkgPiBzdXJuYW1lOwor54aEID4gcHV0XC1vdXQ7CivpgL4gPiBnb1wtb3ZlcjsKK+WmkiA+IGplYWxvdXM7CivpgrEgPiBzdXJuYW1lOwor6YaLID4gdmluZWdhcjsKK+aWjCA+IHJlZmluZWQ7Civlr4cgPiBiYW5kaXRzOwor5bGvID4gdmlsbGFnZTsKK+aBlSA+IGZvcmdpdmU7CivmsqYgPiBiZVwtbG9zdDsKK+WysSA+IGRhaXNoYW47CivmkocgPiBkaXNjYXJkOwor6K6zID4gY29uY2VhbDsKK+a3jCA+IHRyaWNrbGU7CivlspQgPiBkaXZlcmdlOwor5YCPID4gaGFzdGlseTsKK+mckyA+IHJhaW5ib3c7CivlnpIgPiByYW1wYXJ0Owor6YK1ID4gc3VybmFtZTsKK+WFoiA+IGZlYXJmdWw7CivotaYgPiBmb3JnaXZlOwor5b2mID4gZWxlZ2FudDsKK+e/mCA+IHR1cm5cLXVwOwor5oyaID4gc2luY2VyZTsKK+mDnSA+IHN1cm5hbWU7Civop5EgPiBwZWVwXC1hdDsKK+aLjiA+IHRvXC1oYXVsOwor5ZmcID4gdmVyYm9zZTsKK+mYkCA+IGV4cGxhaW47CivmiZIgPiBzY3JhdGNoOwor5Ye5ID4gY29uY2F2ZTsKK+aSqSA+IGxpZnRcLXVwOwor5oygID4gc2NyYXRjaDsKK+W0vSA+IGFcLWNoaWxkOwor5buWID4gc3VybmFtZTsKK+efqyA+IGNvcnJlY3Q7CivmtoUgPiBibGFja2VuOwor5qmxID4gY2FiaW5ldDsKK+WThiA+IHRyZW1ibGU7CivouawgPiBzdGVwXC1vbjsKK+aBgyA+IHJlbHlcLW9uOwor5ouXID4gdG9cLXB1bGw7Civlib8gPiBkZXN0cm95Owor57CMID4gZmFsbGluZzsKK+ivmyA+IGV4ZWN1dGU7CivmjrMgPiBjYXB0dXJlOwor5bmMID4gY3VydGFpbjsKK+eqkiA+IHN0b3BcLXVwOwor6ZuNID4gaGFybW9ueTsKK+mmhSA+IGZpbGxpbmc7Civnnr8gPiBzdXJuYW1lOwor56GFID4gc2lsaWNvbjsKK+eYqSA+IHBpbXBsZXM7CivmuKUgPiBtb2lzdGVuOwor6YKiID4gc3VybmFtZTsKK+i5iyA+IHN0ZXBcLW9uOwor5oqoID4gaW1wZWFjaDsKK+aTjiA+IGxpZnRcLXVwOwor5oaoID4gZm9vbGlzaDsKK+iCviA+IGtpZG5leXM7CivplK0gPiBzcGluZGxlOwor56qmID4gc3VybmFtZTsKK+iwmyA+IGNhcmVmdWw7CivmgZkgPiBpbGxuZXNzOwor6IysID4gaGFydmVzdDsKK+ibkCA+IGNyaWNrZXQ7CivplaMgPiBmZXR0ZXJzOwor5rKlID4gdHJpY2tsZTsKK+iwpCA+IHNsYW5kZXI7CivpkrMgPiBwaW5jZXJzOwor5529ID4gc3RhcmluZzsKK+mYsSA+IHBpdGZhbGw7Civlp5cgPiBzbGFuZGVyOwor6LekID4gc3R1bWJsZTsKK+axgCA+IHNhbmRiYXI7Civnp6QgPiBiYWxhbmNlOwor5pm+ID4gYWlyXC1kcnk7CivpnLkgPiB0aHVuZGVyOwor6LeaID4gc3RhZ2dlcjsKK+i4uSA+IHRyYW1wbGU7Civojp4gPiBzbWlsaW5nOwor6bilID4gc2VhZ3VsbDsKK+iRhiA+IHJlc2VydmU7CivmsKIgPiBhbW1vbmlhOwor5binID4gcGljdHVyZTsKK+azryA+IGRlc3Ryb3k7CivljKEgPiBjb3JyZWN0Owor5L2vID4gcHJldGVuZDsKK+aapyA+IG9ic2N1cmU7Civng6wgPiBjaW5kZXJzOwor6JqMID4gb3lzdGVyczsKK+i0uyA+IGdpdmVcLXRvOwor6LCGID4gcGF0aWVudDsKK+WTnSA+IHdoaXNwZXI7Civoo7QgPiBzdXJuYW1lOwor6K+9ID4gc2xhbmRlcjsKK+eZniA+IGxlcHJvc3k7CivllYQgPiB0b1wtcGVjazsKK+aLhCA+IGxlYW5cLW9uOwor57+OID4gZmVhdGhlcjsKK+eHjiA+IHRvXC1idXJuOwor6L+zID4gcGFzc1wtYnk7CivmlqEgPiByZXZvbHZlOwor5oG4ID4gc2FkbmVzczsKK+WVrCA+IG1pc2VybHk7Civlv5EgPiBmZWFyZnVsOwor5ZKCID4gdG9cLXN1Y2s7Civnm7kgPiB0b1wtZG96ZTsKK+S/viA+IHNvXC10aGF0Owor57CqID4gaGFpcnBpbjsKK+i1iCA+IHJlbGlldmU7Civor6AgPiBleHBsYWluOwor6LCaID4gcHJvdmVyYjsKK+aOuCA+IHRvXC1kdXN0Owor5YyuID4gdG9cLWxhY2s7CivluaEgPiBwZW5uYW50Owor6K65ID4gc3dpbmRsZTsKK+WbsSA+IGNoaW1uZXk7CivltIIgPiBsYW9zaGFuOwor5aiEID4gc3VybmFtZTsKK+WPnyA+IG9sZFwtbWFuOwor6J2MID4gdGFkcG9sZTsKK+iaqiA+IHRhZHBvbGU7CivmsKggPiBhbW1vbmlhOwor6ZOAID4gdXJhbml1bTsKK+aMmyA+IHRhbmdsZWQ7Civor4sgPiBzbGFuZGVyOwor57uvID4gc2NhcmxldDsKK+aUuCA+IGRpc3RhbnQ7CivpuKggPiBidXN0YXJkOwor6JyXID4gYVwtc25haWw7CivosKkgPiBkZWNlaXZlOwor5oGrID4gaW5cLXBhaW47CivosIAgPiBmbGF0dGVyOwor6LiuID4gdGlwXC10b2U7CivppoogPiBzcG9pbGVkOwor552HID4gbG9va1wtYXQ7CivpkpkgPiBjYWxjaXVtOwor5o2xID4gcHV0XC1vZmY7Civokr8gPiBtdWd3b3J0Owor6YW2ID4gZW56eW1lczsKK+a2oyA+IHNjYXR0ZXI7CivmnbMgPiBvYnNjdXJlOwor6KGiID4gaGlnaHdheTsKK+i1oSA+IHN1cHBvcnQ7Civno7ogPiBzdWxwaHVyOwor6Lm2ID4gc3R1bWJsZTsKK+iwhCA+IGZsYXR0ZXI7CivouakgPiB0b1wtbGltcDsKK+e/nyA+IHN1cm5hbWU7CivmtaMgPiB0b1wtd2FzaDsKK+eWuSA+IG1lYXNsZXM7CivnqoggPiBvYnNjdXJlOwor5bmUID4gY3VydGFpbjsKK+mdpSA+IGRpbXBsZXM7CivmjocgPiBjb2xsZWN0Owor5oSGID4gYVwtZmF1bHQ7CivpuLUgPiBvc3RyaWNoOwor56WXID4gcmVzcGVjdDsKK+S9mCA+IHN1cm5hbWU7CivnqpUgPiBzbGVuZGVyOwor6L+pID4gYmVcLW5lYXI7CivkvbAgPiBodW5kcmVkOwor6YKwID4gc3VybmFtZTsKK+mCnSA+IHN1cm5hbWU7CivpkrkgPiBjeW1iYWxzOwor5LyJID4gY29tcGFyZTsKK+mdvCA+IHRhcnRhcnM7CivnhbIgPiB0b1wtaGVhdDsKK+eNkCA+IHJvZWJ1Y2s7CivkvZ0gPiByaWNrZXRzOwor6JOfID4gY2lyY2l1bTsKK+m7nCA+IGRpc21pc3M7CivosLIgPiBjdW5uaW5nOwor5pGIID4gZXhjbHVkZTsKK+mjkyA+IGN5Y2xvbmU7CivosJcgPiBzbGFuZGVyOwor6IOxID4gYmxhZGRlcjsKK+mlvSA+IGZlcnJ1bGU7Civor7MgPiBkZWNlaXZlOwor6aaPID4gZGlzdGlsbDsKK+iLryA+IGJlbnplbmU7Civmt7wgPiBhXC1mbG9vZDsKK+ahjiA+IGZldHRlcnM7CivnvYQgPiBleGhhdXN0Owor6I2AID4gc3VybmFtZTsKK+mTsSA+IGlyaWRpdW07CivokakgPiBmbG93ZXJzOwor6YChID4gcmV0cmVhdDsKK+mAtiA+IHdpbmRpbmc7CivlrqUgPiBmb3JnaXZlOwor6JC4ID4gZG9nd29vZDsKK+aMnSA+IHRvXC1iZWF0Owor6ZK/ID4gaGFpcnBpbjsKK+eGtSA+IGVudHJvcHk7CivnhaggPiB0b1wtc3RldzsKK+egkiA+IGFyc2VuaWM7CivmmYEgPiBtb3JuaW5nOwor6LCYID4gY29uc3VsdDsKK+WHhyA+IGRld2Ryb3A7CivlmZggPiBwb3V0aW5nOwor5ZSjID4gY2hhdHRlcjsKK+mqoCA+IGNoYXJnZXI7CivmkrcgPiBwaWNrXC11cDsKK+aAhCA+IGFubm95ZWQ7CivplIIgPiBsaXRoaXVtOwor55alID4gc2NhYmllczsKK+eolyA+IGRhcm5lbHM7CivmtK4gPiBjbGVhbnNlOwor5oKtID4gbWlzZXJseTsKK+mFriA+IGtldG9uZXM7CivohZogPiBidXR0b2NrOwor6YCRID4gY29sbGVjdDsKK+iFsSA+IHRlbmRvbnM7CivpppQgPiB0b1wtZmVlZDsKK+aQoCA+IHRvXC1kYXViOwor6IyxID4gZG9nd29vZDsKK+egtyA+IGFyc2VuaWM7CivphaEgPiBmbHVzaGVkOwor55a0ID4gaWxsbmVzczsKK+aIlyA+IHN1cHBvcnQ7CivlkZIgPiB1bmNsZWFyOwor6LCMID4gc2luY2VyZTsKK+eXpyA+IGNob2xlcmE7CivmgYIgPiBjYXJlZnVsOwor56ykID4gYVwtYnJvb207Civpn6sgPiBzZWNyZXRlOwor5oCbID4gZ3JpZXZlZDsKK+aAmSA+IHJlbHlcLW9uOwor55q0ID4gY2hhcHBlZDsKK+ihpCA+IGNsb3RoZXM7Civlu6ogPiBncmFuYXJ5Owor5bq+ID4gZ3JhbmFyeTsKK+aMoiA+IGNvcnJlY3Q7CivnnaIgPiBnYXplXC1hdDsKK+WhrCA+IHBsYXRlYXU7Civonq8gPiBuaXBwZXJzOwor542SID4gbWFzdGlmZjsKK+ayhiA+IGFcLWZlcnJ5Owor5biUID4gYVwtc2tpcnQ7Civmk6IgPiBwdWxsXC11cDsKK+iWhSA+IHRvXC13ZWVkOwor6I60ID4gbGV0dHVjZTsKK+e+vCA+IGNvbmZ1c2U7Civmja0gPiB0b1wtb3BlbjsKK+iRrSA+IGJ1bHJ1c2g7CivlgKUgPiBib29yaXNoOwor5rq0ID4gYnJvbWluZTsKK+W7myA+IGFcLXN0b3JlOwor5o+4ID4gaGFuZGZ1bDsKK+S7tSA+IHNpbWlsYXI7Civpq4sgPiBoaXBib25lOwor6IKxID4gZm9yZWFybTsKK+WOtiA+IHByaXZhdGU7Civomo0gPiBtdXNzZWxzOwor5ZOZID4gc3dhbGxvdzsKK+mVkyA+IGdhbGxpdW07Civpk4sgPiBiaXNtdXRoOwor6IOdID4gY2FsbG91czsKK+aCgyA+IHNpbmNlcmU7Civnn70gPiBzaWxpY29uOwor6LWNID4gcHJlc2VudDsKK+e/pSA+IHRvXC1zb2FyOwor6JyeID4gZ3JhcHN1czsKK+ibqSA+IGNyaWNrZXQ7CivosKAgPiBjb3Vuc2VsOwor6bOVID4gY29kZmlzaDsKK+i3hiA+IHRyYW1wbGU7Civnn6wgPiBhXC1kd2FyZjsKK+atmSA+IHRvXC1zdWNrOwor6aG8ID4gZ3JpZXZlZDsKK+a6siA+IHVyaW5hdGU7CivolbsgPiBidWRkaW5nOwor5YizID4gY3V0XC1vdXQ7CivpuYggPiBwZWxpY2FuOwor6ZOZID4gY3ltYmFsczsKK+aknyA+IGNhYmluZXQ7CivplYkgPiBjYWRtaXVtOwor5auYID4gc3VybmFtZTsKK+ishyA+IHN0dXR0ZXI7CivmhrcgPiBwYWluZnVsOwor5pGtID4gcGlja1wtdXA7CivosKEgPiByaXNlXC11cDsKK+ikiiA+IGNyYW1wZWQ7CivpuZUgPiBwZWxpY2FuOwor6ZWyID4gY3ltYmFsczsKK+mSjSA+IHRob3JpdW07CivmsKogPiBrcnlwdG9uOwor6L+uID4gdG9cLXJpc2U7Civlv4kgPiBncmlldmVkOwor6JONID4gbWlsZm9pbDsKK+i4rCA+IHN0dW1ibGU7Civphq8gPiB2aW5lZ2FyOwor6J69ID4ga2F0eWRpZDsKK+iNkSA+IHNwcm91dHM7Civpg5MgPiBzdXJuYW1lOwor5YmAID4gc2hhcnBlbjsKK+i5gCA+IHRvXC1za2lwOwor6ZSOID4gY2Flc2l1bTsKK+mShyA+IHl0dHJpdW07CivmsJogPiB0cml0aXVtOwor54q4ID4gbWFtbW90aDsKK+iPuCA+IHRvXC1mYWRlOwor5Y6NID4gc3VybmFtZTsKK+mysSA+IGhlcnJpbmc7CivosoogPiBsZW9wYXJkOwor6LqeID4gdG9cLXdhbGs7Civom7QgPiBtYWdnb3RzOwor6ZS+ID4gbWVhc3VyZTsKK+mTjCA+IG5pb2JpdW07CivnlYAgPiB0b1wtZ2l2ZTsKK+mBmCA+IHRvXC1tZWV0Owor5rO3ID4gcmFpbmluZzsKK+iSoSA+IGJ1cmRvY2s7Civor7wgPiBzbGFuZGVyOwor6auMID4ga25lZWNhcDsKK+mzmSA+IGJpZ2hlYWQ7Civps5ggPiBjb2RmaXNoOwor6bOGID4gYWJhbG9uZTsKK+e1tyA+IGNvbmZpbmU7CivnrqYgPiBiZWRcLW1hdDsKK+eYmCA+IGZpc3R1bGE7CivpuLggPiBzd2FsbG93Owor6ZWEID4gZmVybWl1bTsKK+aBpyA+IGFzaGFtZWQ7CivnpYYgPiBvcm1hemRhOwor5augID4gYVwtd2lkb3c7CivmkLQgPiBleHRyYWN0Owor5buSID4gZ3JhbmFyeTsKK+mDhCA+IHN1cm5hbWU7Civor5wgPiBpbnF1aXJlOwor5YOmID4gdG9cLWhlaXI7CivpvqEgPiB0b1wtYmxvdzsKK+m9sCA+IHRvXC1iaXRlOwor6b2pID4gdG9cLWNoZXc7CivpvZogPiB0b1wtY2hldzsKK+m8tyA+IGFcLW1vdXNlOwor6bqeID4gcm9lYnVjazsKK+m4kSA+IGFcLWxhcmdlOwor6befID4gcGhvZW5peDsKK+m3lyA+IHNlYWd1bGw7Civpt5YgPiBzZWFndWxsOwor6ba6ID4gd2FndGFpbDsKK+m2uSA+IHRoZVwtb3dsOwor6bamID4gcGVsaWNhbjsKK+m2mCA+IHBlbGljYW47Civpta4gPiB0b1wtcGVjazsKK+m1nCA+IHBlbGljYW47CivptK8gPiBzd2FsbG93Owor6bSrID4gYVwtc25pcGU7CivptJUgPiBvc3RyaWNoOwor6bSOID4gc2VhZ3VsbDsKK+m0hyA+IGJ1c3RhcmQ7Civps6YgPiBzd2FsbG93Owor6bKaID4gYW5jaG92eTsKK+mxrSA+IGFuY2hvdnk7CivpsaggPiBjb2RmaXNoOwor6bGEID4gYW5jaG92eTsKK+mwvSA+IGhlcnJpbmc7CivpsLUgPiBjb2RmaXNoOwor6bCuID4gc2FyZGluZTsKK+mwmyA+IHNhcmRpbmU7CivpsJIgPiBhYmFsb25lOwor6a+3ID4gYW5jaG92eTsKK+mvoSA+IGhlcnJpbmc7CivprpEgPiBhYmFsb25lOwor6a2cID4gbWVybWFpZDsKK+mspyA+IHF1YXJyZWw7Civpq5YgPiBoaXBib25lOwor6auVID4ga25lZWNhcDsKK+mqqyA+IGJlXC1iZW50Owor6aqJID4gcnVubmluZzsKK+mpmSA+IFwoaG9yc2VcKTsKK+mpkiA+IGRhcHBsZWQ7CivpqYMgPiBjaGFyZ2VyOwor6aioID4gZGFwcGxlZDsKK+mnrSA+IHRlcnJpZnk7Civpp50gPiBhXC1jYW1lbDsKK+mniyA+IFwoaG9yc2VcKTsKK+mmriA+IHN1cm5hbWU7CivppZAgPiBzcG9pbGVkOwor6aS/ID4gc3BvaWxlZDsKK+mkviA+IGRpc3RpbGw7CivppLUgPiB0b1wtZmVlZDsKK+mksiA+IHNwb2lsZWQ7CivppJEgPiBmZXJydWxlOwor6aOkID4gdG9cLWZlZWQ7CivporYgPiBjeWNsb25lOwor6aKzID4gdG9cLWJsb3c7CivpoqsgPiBhXC1zdG9ybTsKK+mgmSA+IGNvcnJlY3Q7CivpoIogPiBncmlldmVkOwor6Z+jID4gYm93XC1iYWc7Civpn4UgPiBoYXJuZXNzOwor6Z2oID4gZGltcGxlczsKK+mchSA+IHRodW5kZXI7Civpm58gPiBzcGFycm93Owor6ZuaID4gYVwtaGVyb247Civpmb4gPiBpblwtZmlsZTsKK+mZsyA+IGV4aGliaXQ7CivpmZ4gPiBwcm9tb3RlOwor6ZinID4gc2xvcGluZzsKK+mXoSA+IGV4cGxhaW47Civpl5YgPiBydXNoXC1pbjsKK+mWsSA+IGV4YW1pbmU7CivplpkgPiBxdWFycmVsOwor6ZaIID4gdmlsbGFnZTsKK+mVpiA+IGZlcnJ1bGU7Civpk70gPiB0ZXJiaXVtOwor6ZO8ID4gcmhlbml1bTsKK+mTqiA+IGhhZm5pdW07Civpk6UgPiB0aHVsaXVtOwor6ZORID4gcmhvZGl1bTsKK+mSrCA+IGhvbG1pdW07CivpkKggPiBmZXJtaXVtOwor6ZCTID4gZmVycnVsZTsKK+mQgyA+IGN5bWJhbHM7CivpjrUgPiBnYWxsaXVtOwor6Y6YID4gY2FkbWl1bTsKK+mNsCA+IG1lYXN1cmU7CivpjLggPiByaGVuaXVtOwor6Yy2ID4gYVwtd2F0Y2g7CivpjKAgPiBzcGluZGxlOwor6YyAID4gXChtZXRhbFwpOwor6YuxID4gdGVyYml1bTsKK+mLsCA+IGxpdGhpdW07Civpi5UgPiBlbmdyYXZlOwor6YuKID4gYVwtcG9rZXI7Civpi4IgPiBiaXRcLWN1cDsKK+mKqSA+IHRodWxpdW07CivpiqUgPiBpcmlkaXVtOwor6Ym/ID4gaGFmbml1bTsKK+mJtyA+IHRyaWdnZXI7CivpibIgPiBjYWRtaXVtOwor6YmXID4gcGluY2VyczsKK+mJjSA+IGJpc211dGg7CivpiL8gPiBoYWlycGluOwor6Yi+ID4gdXJhbml1bTsKK+mIuCA+IGN5bWJhbHM7CivpiK4gPiBuaW9iaXVtOwor6YilID4gaG9sbWl1bTsKK+mIoyA+IGNhbGNpdW07Civph7ggPiBzaWxpY29uOwor6Ye3ID4gdGhvcml1bTsKK+mHsSA+IGZldHRlcnM7Civph5QgPiB5dHRyaXVtOwor6YWHID4gY29sbGVjdDsKK+mEuiA+IHN1cm5hbWU7CivphKcgPiBzdXJuYW1lOwor6YSVID4gY291bnRyeTsKK+mEiSA+IGNvdW50cnk7CivphIYgPiBzdXJuYW1lOwor6YOJID4gc3VybmFtZTsKK+mCqCA+IHZpbGxhZ2U7CivpgocgPiBiZVwtbmVhcjsKK+mBvCA+IGRpc3RhbnQ7CivpgbYgPiBlbnR3aW5lOwor6YGvID4gZGVjZWl2ZTsKK+mAuiA+IGRpc3RhbnQ7CivpgLcgPiBkaXN0YW50Owor6YCVID4gcGFzc1wtYnk7CivpgIggPiBkaXN0YW50Owor6L+0ID4gcmV2b2x2ZTsKK+i9tyA+IHN1cm5hbWU7CivovZIgPiBjaGFyaW90Owor6Ly9ID4gdmVoaWNsZTsKK+i7siA+IGFcLXdoZWVsOwor6LuYID4gd2FyXC1jYXI7CivouqYgPiB0b1wtanVtcDsKK+i6oCA+IHRvXC1saW1wOwor6LqdID4gdG9cLXBhc3M7CivoupggPiB0b1wtd2FsazsKK+i6hCA+IGNyaXBwbGU7CivouoIgPiBzdHVtYmxlOwor6LmhID4gdG9cLWxpbXA7CivouKsgPiBjb2xsaWRlOwor6LiQID4gdHJhbXBsZTsKK+i4iCA+IG5lZ2xlY3Q7Civot7QgPiBzdGVwXC1vbjsKK+i3rCA+IHRvXC1zdGVwOwor6LeVID4gc2h1ZmZsZTsKK+i2tyA+IHRvXC1qb2x0Owor6LaZID4gc3VybmFtZTsKK+i2kiA+IHRvXC1qdW1wOwor6LSNID4gc3VwcG9ydDsKK+i0hyA+IGFmZmFibGU7CivotIMgPiB0b1wtZWFybjsKK+izqyA+IHByZXNlbnQ7Civos50gPiBwcmVpb3VzOwor6LOIID4gc3VybmFtZTsKK+iyvSA+IGdpdmVcLXRvOwor6LKpID4gcGVkZGxlcjsKK+ixlyA+IGNsYW1vdXI7CivosKsgPiBzaGFsbG93Owor6K+5ID4gY29uc3VsdDsKK+iunyA+IHNsYW5kZXI7CivorpwgPiBjb3Vuc2VsOwor6K6SID4gc2xhbmRlcjsKK+iujCA+IGFcLWZlYXN0Owor6K6HID4gZmxhdHRlcjsKK+itviA+IHNoYWxsb3c7CivorbggPiBkZWNlaXZlOwor6K2aID4gc3VybmFtZTsKK+itjiA+IGN1bm5pbmc7CivorYggPiBkaXNsaWtlOwor6Ky+ID4gZGVjZWl2ZTsKK+istyA+IHNsYW5kZXI7CivorLMgPiB0b1wtc2luZzsKK+isrSA+IHNoYWxsb3c7CivorJ8gPiBmbGF0dGVyOwor6KyXID4gc2xhbmRlcjsKK+isliA+IHJpc2VcLXVwOwor6KyMID4gc2xhbmRlcjsKK+ishiA+IGJlZ3VpbGU7Civoq74gPiBwcm9taXNlOwor6Ku6ID4gcHJvdmVyYjsKK+irtiA+IHNpbmNlcmU7Civoq7EgPiBjb25jZWFsOwor6KuuID4gY29uc3VsdDsKK+irmyA+IGZsYXR0ZXI7Civoq5ogPiBjb21tYW5kOwor6KuRID4gc2xhbmRlcjsKK+irjyA+IGNvbnN1bHQ7Civoq4QgPiBwYXRpZW50Owor6KuCID4gZmxhdHRlcjsKK+iquSA+IHNsYW5kZXI7CivoqpEgPiBkZWNlaXZlOwor6KqFID4gZXhlY3V0ZTsKK+ipviA+IG5vaXNpbHk7CivoqbUgPiBpbnF1aXJlOwor6KmtID4gZGVjZWl2ZTsKK+ipqyA+IHRvXC1icmFnOwor6KmGID4gc2xhbmRlcjsKK+iphSA+IHRvXC1zZWxsOwor6Ki7ID4gZXhwbGFpbjsKK+iorCA+IGNsYW1vdXI7CivoqKkgPiBub2lzaWx5Owor6KimID4gc2luY2VyZTsKK+iooiA+IHBsZWFzZWQ7CivoqJEgPiBkZWNlaXZlOwor6KehID4gYW50bGVyczsKK+imtyA+IHBlZXBcLWF0Owor6KalID4gYXNoYW1lZDsKK+imnCA+IG1pc3Npb247CivopZwgPiBmbHV0dGVyOwor6KWDID4gY29tbWVuZDsKK+ikvSA+IGN1c2hpb247CivopJQgPiBjb21wbGV4Owor6KO1ID4gc3VybmFtZTsKK+ijkiA+IGNvbGxlY3Q7Civoor0gPiBjbG90aGVzOwor6KK6ID4gaG9sZFwtdXA7CivooqogPiBzbGVldmVzOwor6KG1ID4gY2hlbWlzZTsKK+igkCA+IG1hZ2dvdHM7Civonq4gPiByYWluYm93Owor6J24ID4gYVwtc25haWw7CivonYMgPiByYWluYm93Owor6J2AID4gcmFpbmJvdzsKK+icqyA+IGluc2VjdHM7CivomqsgPiBhYmFsb25lOwor6JqRID4gdGlwXC10b2U7CivomYYgPiBlbnR3aW5lOwor6JiKID4gY29sbGVjdDsKK+iXtCA+IGNvbGxlY3Q7Civol5kgPiBkb2d3b29kOwor6Ja9ID4gXChncmFzc1wpOwor6Ja2ID4gdG9cLWJ1cnk7CivolpMgPiBnaW5zZW5nOwor6JaQID4gc3BpbmFjaDsKK+iWiiA+IGNpcmNpdW07CivolZ0gPiBoYW5kZnVsOwor6JS/ID4gc3VybmFtZTsKK+iUoyA+IHN1cm5hbWU7CivolJggPiBnaW5zZW5nOwor6JOMID4gcHJldGVuZDsKK+iSkCA+IGNvbGxlY3Q7CivokaAgPiBnaW5zZW5nOwor6JGKID4gY290dGFnZTsKK+iQtSA+IGxldHR1Y2U7Civoj6ogPiBoZW5iYW5lOwor6I+nID4gc3RpYmVuZTsKK+iOiiA+IHZpbGxhZ2U7CivojoAgPiB0b1wtZmFybTsKK+iNmCA+IHZpbGxhZ2U7CivojLcgPiBmbHV0dGVyOwor6IygID4gdG9cLXdlZWQ7Civoi70gPiBidWxydXNoOwor6IuFID4gY3V0XC1vZmY7CivoiaYgPiB3YXJzaGlwOwor6IiTID4gdG9cLWxpY2s7Civoh50gPiBiZVwtYmFyZTsKK+iFliA+IHBlcHRvbmU7CivohY4gPiBraWRuZXlzOwor6ISdID4gZGlzdGVuZDsKK+iBtiA+IHdoaXNwZXI7Civoga8gPiBjb25uZWN0Owor6IGuID4gY29ubmVjdDsKK+iBqyA+IGNvbm5lY3Q7CivogaggPiBjb25uZWN0Owor6ICJID4gb2xkXC1hZ2U7CivogIggPiBvbGRcLWFnZTsKK+e/uSA+IHR1cm5cLXVwOwor57+qID4gZmx1dHRlcjsKK+e+kCA+IHRvXC1sZWFkOwor5724ID4gcGVuYWx0eTsKK+e9liA+IGt3dWt5ZWw7CivnvLsgPiBwb3R0ZXJ5Owor57yyID4gdG9cLXJlZWw7CivnubMgPiBkZWxpdmVyOwor57i2ID4gY29uZmluZTsKK+e4giA+IGNvbGxlY3Q7Civnt4sgPiBzY2FybGV0Owor57eBID4gdG9cLWpvaW47CivntaogPiBtYXR0aW5nOwor57KCID4gc3VybmFtZTsKK+exmyA+IHN1cm5hbWU7CivnsZEgPiB0b1wtZmVlZDsKK+ewgCA+IGJlZFwtbWF0Owor56ywID4gY3VydGFpbjsKK+eskyA+IHRvXC1jb21iOwor56u4ID4gY29udGVuZDsKK+erkiA+IHN0cmFuZ2U7Civnq4ggPiBmdXJuYWNlOwor56uHID4gc3VybmFtZTsKK+eqgCA+IHRvXC1idXJ5Owor56mrID4gaGFydmVzdDsKK+eoiiA+IGRhcm5lbHM7CivnqIcgPiB0b1wtYmluZDsKK+enkCA+IHRvXC13ZWVkOwor56aiID4gc3VybmFtZTsKK+emgiA+IHRvXC1wcmF5Owor56S1ID4gYXJzZW5pYzsKK+ejhyA+IGFyc2VuaWM7CivnooMgPiBcKHN0b25lXCk7Civnn7EgPiBtZWFzdXJlOwor55+vID4gY29ycmVjdDsKK+efnyA+ICcnXC1sYW5jZTsKK+eeryA+IHRvXC1wZWVwOwor556eID4gZGVjZWl2ZTsKK+ecvSA+IHRvXC1nYXplOwor55y0ID4gZGF6emxlZDsKK+ecjiA+IGxvb2tcLWF0Owor55unID4gY290dGFnZTsKK+eZqSA+IGxlcHJvc3k7CivnmaggPiBxdWlja2x5Owor55i7ID4gZmlzdHVsYTsKK+eYnSA+IGlsbG5lc3M7CivnlZAgPiB0b1wtZmlsbDsKK+eUlCA+IGJpZ1wtamFyOwor55ObID4gc2NhcHRyZTsKK+eSuiA+IGFcLWNyYWNrOwor55KKID4gcmVkZGlzaDsKK+eQsSA+IGVuZ3JhdmU7CivnjqcgPiByZWRkaXNoOwor5425ID4gYVwtaG91bmQ7CivnjZogPiBzcGFuaWVsOwor54uJID4gZm94XC1jdWI7CivnioYgPiBzcGVjaWFsOwor54muID4gcHJvcFwtdXA7Civnh7wgPiBjaW5kZXJzOwor54a7ID4gdG9cLWhlYXQ7CivnhrggPiBwdXRcLW91dDsKK+eGryA+IGJ5XC1maXJlOwor54W7ID4gdG9cLXdhcm07CivnhaUgPiBzaGluaW5nOwor54OJID4gc2hpbmluZzsKK+eBtCA+IHRvXC1iYWtlOwor54C5ID4gdG9cLWJvaWw7CivngKcgPiByYWluaW5nOwor5r6jID4gY2xlYW5zZTsKK+a+kCA+IGJpbGxvd3M7CivmvawgPiBhXC1yYXBpZDsKK+a6piA+IGRyaXp6bGU7CivmuLwgPiByaXBwbGVzOwor5rinID4gdG9cLWRyb3A7CivmuJkgPiBzY2F0dGVyOwor5reqID4gYmVcLWxvc3Q7CivmtrYgPiB0b1wtc3BpdDsKK+a2kiA+IG1lYW5kZXI7CivmtLggPiBzcGFya2xlOwor5rKEID4gYmlsbG93czsKK+axiyA+IHRvXC1wb3VyOwor5rC8ID4gdG9cLXNpbms7CivmsJUgPiBwcm90aXVtOwor5q+aID4gY3VubmluZzsKK+avgCA+IGRlc3Ryb3k7CivmrbogPiB2aWNpb3VzOwor5q2cID4gZnVyaW91czsKK+asvSA+IHJlc3BlY3Q7CivmrIQgPiByYWlsaW5nOwor5qulID4gY2FiaW5ldDsKK+arnSA+IGNhYmluZXQ7CivmqYYgPiB3aXRob3V0Owor5qaiID4gYVwtZnJhbWU7CivmpJcgPiBcKHBsYW50XCk7Civmo7ggPiBzdXJuYW1lOwor5qCiID4gY3lwcmVzczsKK+aevCA+IGFcLXRhYmxlOwor5p6TID4gY2FwaXRhbDsKK+aduCA+IHRvXC1raWxsOwor5p22ID4gdmFybmlzaDsKK+acviA+IHRvXC1idW1wOwor5pywID4ga3d1a3llbDsKK+acoiA+IGxvb2tcLWF0Owor5pyKID4gcHJvdGVpbjsKK+abvSA+IGFscmVhZHk7Civmm5YgPiBvYnNjdXJlOwor5pmJID4gYWR2YW5jZTsKK+aXoyA+IGFscmVhZHk7Civmlr8gPiB0b1wtc3dpbTsKK+aWriA+IGN1dFwtb2ZmOwor5pagID4gbWVhc3VyZTsKK+aWgSA+IGRpc2xpa2U7Civmlb4gPiB0b1wtcnVsZTsKK+aVryA+IHRvXC1kZWZ5Owor5pWtID4gc2NhdHRlcjsKK+aVnCA+IGZpbGxcLXVwOwor5pWYID4gZXhwcmVzczsKK+aVjSA+IGV4cHJlc3M7CivmlLcgPiBleGFtaW5lOwor5pSqID4gZGlzdHVyYjsKK+aUoyA+IHRhbmdsZWQ7CivmlJ0gPiB0YWtlXC1pbjsKK+aUjyA+IGNvbGxlY3Q7Civmk74gPiBkaXN0dXJiOwor5pO4ID4gdG9cLWhvbGQ7Civmk7cgPiBwaWNrXC11cDsKK+aTryA+IGV4Y2x1ZGU7Civmk50gPiB0b1wtcHVsbDsKK+aThCA+IGNhcHR1cmU7Civmk4EgPiBlbWJyYWNlOwor5pK+ID4gdG9cLWJlYXQ7CivmkrkgPiBkaXN0dXJiOwor5pK0ID4gdG9cLWpvbHQ7CivmkqMgPiB0b1wtZHVzdDsKK+aSoiA+IHRvXC1kdXN0Owor5pKfID4gY29ycmVjdDsKK+aSkyA+IHNjcmF0Y2g7CivmkpAgPiBwcm9wXC11cDsKK+aRryA+IHNpbmNlcmU7CivmkaAgPiBnZW5lcmFsOwor5pGCID4gdGFrZVwtaW47CivmkLcgPiB0b1wtYmVhdDsKK+aQtiA+IHBsdW5kZXI7Civmjr0gPiBjb2xsaWRlOwor5o6vID4gb3BwcmVzczsKK+aMjSA+IGNvbGxhdGU7Civmi6sgPiB0b1wtcHVsbDsKK+aKiCA+IHRvXC1iZW5kOwor5om9ID4gdG9cLW1vdmU7CivmiKcgPiBzdXBwb3J0Owor5oewID4gYmVcLWdsYWQ7Civmh6sgPiBlbnJhZ2VkOwor5oekID4gZ3JpZXZlZDsKK+aHmyA+IGFsYXJtZWQ7Civmh4cgPiBzaW5jZXJlOwor5oeGID4gYW54aW91czsKK+aHhSA+IGJhc2hmdWw7CivmhoMgPiBmb29saXNoOwor5oWzID4gbWlzZXJseTsKK+aFqiA+IGFubm95ZWQ7CivmhZ8gPiBzYWRuZXNzOwor5oWaID4gYXNoYW1lZDsKK+aFmSA+IGFzaGFtZWQ7CivmhJAgPiBiYXNoZnVsOwor5oSKID4gc2luY2VyZTsKK+aDtyA+IHdyaWdnbGU7Civmg6MgPiBvdmVyYWxsOwor5oOWID4gcmVzcGVjdDsKK+aDkyA+IGNhcmVmdWw7Civmg4cgPiBiZVwta2luZDsKK+aCqSA+IGFuZ2VyZWQ7CivmgpwgPiBvYnNjdXJlOwor5oKQID4gcmVzcGVjdDsKK+aChSA+IHBsZWFzZWQ7CivmgaAgPiBzdHJhbmdlOwor5oGJID4gbWVhbmluZzsKK+aAsSA+IGhhc3RpbHk7CivlvacgPiByZWZpbmVkOwor5b2lID4gZWxlZ2FudDsKK+W9miA+IGNvbGxlY3Q7CivlvZkgPiBjb2xsZWN0Owor5b2GID4gYXdrd2FyZDsKK+W7qSA+IGdyYW5hcnk7Civlu6AgPiBmYWN0b3J5Owor5budID4gc2VydmFudDsKK+W7miA+IGtpdGNoZW47Civlu4wgPiB1bmljb3JuOwor5buLID4gY29uY2VhbDsKK+W6pCA+IHByZXBhcmU7CivlubcgPiBjb21iaW5lOwor5bmrID4gdG9cLWhlbHA7CivluaggPiBjdXJ0YWluOwor5bmAID4gcGljdHVyZTsKK+W4vyA+IG1hcnF1aXM7CivluLIgPiBzaGVsdGVyOwor5bihID4gc2hlbHRlcjsKK+W3vyA+IHJldm9sdmU7Civlt4cgPiBhXC1jcmFjazsKK+W2lyA+IGxhb3NoYW47CivltIsgPiBmbG93ZXJ5Owor5bCfID4gc3VybmFtZTsKK+WvqiA+IHN1cm5hbWU7CivlrYUgPiBzbGVuZGVyOwor5au7ID4gZWxlZ2FudDsKK+WruiA+IHJlZmluZWQ7Civlqr8gPiBhc2hhbWVkOwor5aq7ID4gdG9cLW1vdmU7Civlqp4gPiBhdFwtZWFzZTsKK+WprCA+IG9ic2NlbmU7CivlqYEgPiBzdXJuYW1lOwor5aeNID4gc2xhbmRlcjsKK+WlmyA+IG9wZW5pbmc7CivlpKMgPiBhXC1kcmVhbTsKK+WjvSA+IG9sZFwtYWdlOwor5aOtID4ga3d1a3llbDsKK+WjnSA+IGFcLW1vdW5kOwor5aOYID4gcmFtcGFydDsKK+WjlCA+IGFcLW1vdW5kOwor5aG9ID4gcGxhdGVhdTsKK+WhoSA+IGZpbGxcLWluOwor5aGTID4gcGxhc3RlcjsKK+WhgSA+IHJhbXBhcnQ7CivloIQgPiBwYXJhcGV0Owor5Z+XID4gYVwtd2hhcmY7CivlnJcgPiBkaWFncmFtOwor5ZyVID4gbGlicmFyeTsKK+WcgiA+IHBpZ1wtc3R5Owor5ZuqID4gY2hpbW5leTsKK+WapSA+IHN3YWxsb3c7CivlmpUgPiB2ZXJib3NlOwor5ZqKID4gdG9cLXBhbnQ7CivlmbIgPiBzd2FsbG93Owor5ZmlID4gd2hpc3BlcjsKK+WYuCA+IHVuY2xlYXI7Civll7kgPiBjaGF0dGVyOwor5Za+ID4gZW1wZXJvcjsKK+WWpSA+IGFcLXBsYWNlOwor5ZWxID4gY29ycmVjdDsKK+WUniA+IHRvXC1nYXNwOwor5ZSFID4gYVwtc291bmQ7Civlkr4gPiBhXC1ub2lzZTsKK+WSiiA+IGhhcm1vbnk7CivlkokgPiBhblwtZWNobzsKK+WRvyA+IHRvXC15YXduOwor5ZGsID4gdG9cLXJlc3Q7CivlkasgPiB3aGlzcGVyOwor5ZGMID4gdG9cLWNhbGw7Civlj5wgPiBvbGRcLW1hbjsKK+WOvCA+IGt3dWt5ZWw7CivljrAgPiBmYWN0b3J5Owor5Y6rID4gZ3JhbmFyeTsKK+WOmSA+IHN1cm5hbWU7CivljbIgPiBlbWluZW50Owor5Y2qID4ga3d1a3llbDsKK+WNhiA+IHNvbGRpZXI7CivljL0gPiB0b1wtaGlkZTsKK+WMsSA+IHRvXC1sYWNrOwor5YynID4gYVwtdHJ1bms7CivljIsgPiBwb3R0ZXJ5Owor5YyKID4gaGFuZGZ1bDsKK+WLpiA+IGRlc3Ryb3k7CivlipAgPiBkZXN0cm95Owor5YqJID4gc3VybmFtZTsKK+WJtCA+IHNoYXJwZW47Civlh4ogPiBzdXJuYW1lOwor5YamID4gYmFuZGl0czsKK+WFryA+IGt3dWt5ZWw7CivlhaogPiBzdXJuYW1lOwor5YWCID4gaGFpcnBpbjsKK+WEtiA+IHZhbGlhbnQ7CivlhKYgPiBtaWxsaW5nOwor5YSkID4gb25cLWR1dHk7CivlhJMgPiBzZXJ2YW50Owor5YSNID4gZm9vbGlzaDsKK+WDryA+IGFzaGFtZWQ7Civlg6QgPiBzaW5jZXJlOwor5YOOID4gY29sbGVjdDsKK+WCvCA+IHN1cm5hbWU7CivlgpogPiBpbWl0YXRlOwor5YKUID4gc2VydmFudDsKK+WCgSA+IG9sZFwtbWFuOwor5YG5ID4gcHJlcGFyZTsKK+WAoyA+IGltaXRhdGU7CivlgJ0gPiBzdW5yaXNlOwor5YCQID4gaGFzdGlseTsKK+WAgiA+IGNvbWJpbmU7CivkvrQgPiBzdXJuYW1lOwor5L6HID4gYVwtY2xhc3M7CivkvoUgPiB0b1wtZ2l2ZTsKK+S9iSA+IHN1cm5hbWU7CivkvIggPiBuZXJ2b3VzOwor5LyAID4gZXhjaXRlZDsKK+S7kiA+IGt3dWt5ZWw7Civkur0gPiBrd3VreWVsOwor5Lq3ID4gdXByaWdodDsKK+S6tiA+IHNpbmNlcmU7CivkuqogPiBrd3VreWVsOwor5LqXID4gaGFydmVzdDsKK+S5vyA+IHRvXC1jdXJlOwor5LmsID4gdG9cLWhhbmc7CivkuaUgPiBrd3VreWVsOwor5LmbID4ga3d1a3llbDsKK+S5iiA+IGt3dWt5ZWw7CivkuYAgPiBzdHJldGNoOwor5Li3ID4ga3d1a3llbDsKK+S4nyA+IGRpc2NhcmQ7CivkuI8gPiBwYXJhcGV0Owor5LiGID4ga3d1a3llbDsKK+S2tCA+IHRvXC1ibG93Owor5LapID4gdG9cLWduYXc7CivktqcgPiB0b1wtZ25hdzsKK+S2oiA+IHRvXC1nbmF3Owor5LagID4gdG9cLWduYXc7Civktp4gPiB0b1wtZ25hdzsKK+S2lyA+IHRvXC1iaXRlOwor5LW8ID4gdG9cLWJvaWw7CivktKcgPiB2ZW5pc29uOwor5LSSID4gd2FndGFpbDsKK+SzrSA+IHdhZ3RhaWw7CivksqwgPiBjaGlja2VuOwor5LKjID4gdG9cLWZpc2g7Civksp0gPiBwb21mcmV0Owor5LKUID4gYVwtd2hhbGU7CivksbcgPiB0b1wtZmlzaDsKK+SxiSA+IHRoZVwtZWVsOwor5LGHID4gdGhlXC1lZWw7CivksK8gPiB0b1wtZmVhcjsKK+SwniA+IHRvXC1jb29rOwor5LCBID4gdG9cLW1lZXQ7CivkrrwgPiBwaWViYWxkOwor5K67ID4gdG9cLXByYXk7CivkrqYgPiB1bnRhbWVkOwor5K2uID4gamV3ZWxyeTsKK+StpCA+IHRvXC1jaGV3Owor5K2gID4gYVwtc25hY2s7CivkrKEgPiB0b1wtc29hcjsKK+SsnSA+IGFcLXN0b3JtOwor5KyWID4gYVwtc3Rvcm07CivkrI4gPiBob3RcLWFpcjsKK+SruCA+IHRvXC1ibG93Owor5KuYID4gaGVhbHRoeTsKK+SrkiA+IGRpc2Vhc2U7CivkqqMgPiBzbWFzaGVkOwor5KqiID4gc21hc2hlZDsKK+SpsyA+IHRhbm5pbmc7CivkqZ8gPiBsZWF0aGVyOwor5KmUID4gdGhlXC1oZW07CivkqKggPiB0aHVuZGVyOwor5KieID4gdG9cLXJhaW47CivkqJsgPiB0b1wtcmFpbjsKK+SomiA+IHRvXC1yYWluOwor5KiTID4gdGh1bmRlcjsKK+SogiA+IGFcLWNoaWNrOwor5KewID4gYVwtbW91bmQ7Civkp58gPiB0b1wtc2tpbjsKK+SnjSA+IGFcLWNyYWNrOwor5KatID4gdG9cLW9wZW47CivkposgPiB0b1wtZ3JvdzsKK+SlsCA+IHRvXC1tZWx0Owor5KWuID4gdG9cLWJlYXQ7CivkpYogPiByZWZpbmVkOwor5KSfID4gYVwtc3BhZGU7CivkpJggPiB2aW5lZ2FyOwor5KSVID4gdmluZWdhcjsKK+SkiCA+IHZpbmVnYXI7Civko7cgPiB0b1wtcG91cjsKK+SitiA+IGFcLXN0YXRlOwor5KKwID4gdG9cLWp1bXA7CivkoqwgPiB0b1wtbW92ZTsKK+SioyA+IGRpc3RhbnQ7CivkoqIgPiB0b1wtcGFzczsKK+SioCA+IHRvXC1zZW5kOwor5KKZID4gdG9cLXJ1aW47CivkopIgPiB0b1wtbWVldDsKK+SijCA+IHRvXC13YWxrOwor5KC8ID4gdG9cLXdlYXI7CivkoLMgPiB0b1wtd2FsazsKK+SgpSA+IHRvXC1saW1wOwor5KCcID4gdG9cLXdhbGs7CivkoJsgPiB0b1wtanVtcDsKK+SgkyA+IHRvXC13YWxrOwor5KCEID4gdG9cLXdhbGs7Civkn74gPiB0b1wtanVtcDsKK+SftyA+IHRvXC1qdW1wOwor5J+wID4gdG9cLXdhbGs7Civkn60gPiB0b1wtanVtcDsKK+SfrCA+IHRvXC13YWxrOwor5J+mID4gdG9cLXdhbGs7Civkn5AgPiB0b1wtd2FsazsKK+SfjyA+IHRvXC1qdW1wOwor5J+NID4gdG9cLXdhbGs7Civkn4kgPiB0b1wtd2FsazsKK+SfiCA+IHRvXC13YWxrOwor5J+HID4gdG9cLXdhbGs7Civkn4AgPiB0b1wtd2FsazsKK+SeuyA+IHRvXC13YWxrOwor5J66ID4gdG9cLXdhbGs7CivknrkgPiB0b1wtd2FsazsKK+SetSA+IHRvXC1qdW1wOwor5J60ID4gdG9cLWp1bXA7Civknq8gPiB0b1wtd2FsazsKK+SeqyA+IHRvXC13YWxrOwor5J6lID4gdG9cLXdhbGs7CivknqQgPiB0b1wtd2FsazsKK+SeoiA+IHRvXC13YWxrOwor5J6hID4gdG9cLXdhbGs7CivknqAgPiB0b1wtd2FsazsKK+SeniA+IHRvXC13YWxrOwor5J27ID4gdG9cLXNlbGw7Civkna4gPiB0b1wtYnJhZzsKK+SdpyA+IGNhcGl0YWw7CivknJYgPiB0b1wtdGFsazsKK+SciSA+IHRvXC1qZXN0Owor5Ju/ID4gY3VubmluZzsKK+SbuiA+IHRvXC13YXJuOwor5Ju3ID4gdG9cLW9iZXk7Civkm7AgPiBza2V0Y2h5Owor5JuiID4gY3VubmluZzsKK+SbnSA+IHRvXC1saWtlOwor5JubID4gY291cmFnZTsKK+SavCA+IGFzaGFtZWQ7CivkmrsgPiB0b1wtc2luZzsKK+SasSA+IGhvbmVzdHk7Civkmq4gPiB0aGlja2VyOwor5JqXID4gdG9cLWxpZnQ7Civkmo8gPiB0b1wtbG92ZTsKK+SZsiA+IHRvXC1tb3ZlOwor5JmpID4gY2xvdGhlczsKK+SZmSA+IGNsb3RoZXM7CivkmY4gPiBzbGVldmVzOwor5JmJID4gY2xvdGhlczsKK+SYtyA+IHNsZWV2ZXM7CivkmLYgPiBzbGVldmVzOwor5JixID4gd2VhbHRoeTsKK+SYriA+IHRvXC1sb3NlOwor5JigID4gZ3JlYXZlczsKK+SYnSA+IGFcLXNoaXJ0Owor5JeyID4gZmlyZWZseTsKK+SXkSA+IGZpcmVmbHk7CivklrUgPiBpbnNlY3RzOwor5JadID4gaW5zZWN0czsKK+SWmiA+IGFcLXRpZ2VyOwor5JaYID4gYVwtdGlnZXI7CivklpUgPiBhXC10aWdlcjsKK+SWhCA+IHRvXC1idXJuOwor5JWeID4gaGVuYmFuZTsKK+SVkSA+IHBhcnNsZXk7CivklLogPiBoZWFkaW5nOwor5JSAID4gcGFyc2xleTsKK+SStiA+IHRoZVwtc2t5Owor5JKYID4gcGFyc2xleTsKK+SRpyA+IGFcLXNob3J0Owor5JGbID4gdG9cLWxpY2s7CivkkL8gPiBnaXp6YXJkOwor5JC3ID4gcGF1bmNoeTsKK+SQtiA+IHRvXC1jb29rOwor5JC0ID4gbHVtYmFnbzsKK+SQqyA+IG9iZXNpdHk7CivkkIogPiBpbnNlY3RzOwor5I+dID4gc2luY2VyZTsKK+SPliA+IGFcLXdvdW5kOwor5I+RID4gdG9cLWJ1cm47Civkj4cgPiB0b1wtaGVhcjsKK+SPhSA+IHRvXC1oZWFyOwor5I+DID4gdG9cLWhlYXI7Civkjr0gPiB0b1wtaGVhcjsKK+SOuyA+IHRvXC1oZWFyOwor5I65ID4gdG9cLWhlYXI7CivkjrggPiB0b1wtaGVhcjsKK+SOqSA+IHRvXC10aWxsOwor5I6mID4gdG9cLXRpbGw7CivkjqQgPiB0b1wtdGlsbDsKK+SOnSA+IHRvXC1zb2FyOwor5I6MID4gZmVhdGhlcjsKK+SNtiA+IHVuaWNvcm47CivkjbMgPiBkaXNlYXNlOwor5IyYID4gdG9cLWtuaXQ7CivkjJQgPiB0b1wtc29hazsKK+SMgSA+IGFcLXBsZWF0Owor5IuOID4gdG9cLW1lbmQ7Civkip8gPiBhZG9ybmVkOwor5IqYID4gYVwtZ3JhaW47CivkipIgPiByZWZpbmVkOwor5IqHID4gdG9cLWZlZWQ7CivkibUgPiB0b1wtZmVlZDsKK+SJoiA+IGFcLXNpZXZlOwor5ImOID4gYVwtY292ZXI7CivkiKwgPiBhXC1zbWFsbDsKK+SIqiA+IGFcLXNtYWxsOwor5IilID4gdGVuZG9uczsKK+SIpCA+IHBpbmNlcnM7CivkiJIgPiBmcmFnaWxlOwor5IiHID4gYVwtY292ZXI7Civkh5QgPiBhdHJvcGh5Owor5IeNID4gdG9cLXdhaXQ7CivkhrUgPiBhblwtZWNobzsKK+SGqCA+IHRoZVwtc2t5Owor5IW4ID4gYVwtZ3JhaW47CivkhKQgPiB0b1wtc2luazsKK+SEjyA+IGJpemFycmU7Civkg6MgPiB0b1wtcnVpbjsKK+SCiiA+IHdlYXBvbnM7CivkgokgPiB3ZWFwb25zOwor5IKGID4gd2VhcG9uczsKK+SCgCA+IHRvXC13aW5rOwor5IGyID4gdG9cLXBlZXA7CivkgaogPiB0b1wtd2luazsKK+SBoyA+IHRvXC13aW5rOwor5IGbID4gdG9cLWxvb2s7CivkgZIgPiB0b1wtd2luazsKK+SAuyA+IHRvXC1sb29rOwor5ICoID4gdG9cLWxvb2s7CivkgJQgPiB0b1wtbG9vazsKK+O/piA+IHRvXC10ZWxsOwor47+SID4gaWxsbmVzczsKK+O/kSA+IGlsbG5lc3M7Civjv40gPiBzY2FiaWVzOwor4763ID4gdG9cLWFjaGU7CivjvqwgPiBtYWxhcmlhOwor476gID4gYVwtZmV2ZXI7Civjvp8gPiByZWxhcHNlOwor476eID4gaWxsbmVzczsKK+O+mCA+IGFpbG1lbnQ7CivjvpYgPiBncmlldmVkOwor476VID4gYVwtY2hpbGw7CivjvpMgPiBmYXRpZ3VlOwor476SID4gaWxsbmVzczsKK+O+jyA+IGlsbG5lc3M7CivjvocgPiBpbGxuZXNzOwor476GID4gZWNkeXNpczsKK+O+hSA+IGRlZmVjdHM7CivjvoIgPiBpbGxuZXNzOwor4720ID4gaWxsbmVzczsKK+O9syA+IGlsbG5lc3M7CivjvZ0gPiB0b1wtc2luazsKK+O9liA+IGFcLWh1bWFuOwor47y8ID4gYVwtbGFkbGU7CivjvLcgPiBhXC1iYXNpbjsKK+O8nCA+IGFcLWJhc2luOwor47yXID4gYVwtYnJpY2s7Civju7kgPiBhXC1jcmFjazsKK+O7gyA+IGNyb29rZWQ7CivjurIgPiBidXR0b25zOwor47qXID4gdG9cLWJpdGU7CivjuoogPiBhXC1iZWFzdDsKK+O5viA+IGN1bm5pbmc7Civjub0gPiB0b1wtYml0ZTsKK+O5niA+IHRvXC1iYXJrOwor47mbID4gYVwtdGFtZWQ7CivjuKcgPiB0b1wtYml0ZTsKK+O4kCA+IHRvXC1idXJuOwor47iNID4gdG9cLWJ1cm47Civjt7sgPiB3aXRob3V0Owor47eTID4gYVwtdG9yY2g7Civjt4ogPiB0b1wtYnVybjsKK+O3iSA+IHRvXC1pcm9uOwor47eFID4gdG9cLWNvb2s7Civjtq4gPiB0b1wtYnVybjsKK+O2qyA+IHRvXC1idXJuOwor47ajID4gdG9cLWJ1cm47CivjtpcgPiB3ZWxsXC11cDsKK+O2kyA+IHRvXC1zaW5rOwor47aHID4gYVwtZmVycnk7CivjtbggPiB0b1wtYm9pbDsKK+O1tCA+IHRvXC1zaW5rOwor47WjID4gdGhpcnN0eTsKK+O1kiA+IGJvaWxpbmc7CivjtYwgPiB0b1wtZmxvdzsKK+O1hSA+IGFcLXJpdmVyOwor47S/ID4gYm9pbGluZzsKK+O0iSA+IHZhcmlvdXM7CivjtIcgPiB0b1wtd2FkZTsKK+O0hSA+IHRvXC1tZWx0Owor47O6ID4gdG9cLXN3aW07Civjs60gPiBzcGl0dGxlOwor47OsID4gYW5cLWVkZHk7Civjs6ogPiBhXC1yaXZlcjsKK+OzpiA+IGFcLXJpdmVyOwor47OZID4gYVwtYnJvb2s7Civjs4UgPiB0b1wtZmxvdzsKK+OzhCA+IHNwaXR0bGU7CivjsrogPiB0b1wtd2FzaDsKK+OyhSA+IHRvXC1iaW5kOwor47KCID4gdG9cLXB1c2g7CivjsoEgPiB0b1wtYmVhdDsKK+OygCA+IHRvXC1iZWF0Owor47GuID4gdG9cLW9wZW47CivjsZYgPiB0b1wtc3RheTsKK+OxjCA+IHRvXC10YWtlOwor47GEID4gdG9cLXNwaXQ7CivjsYAgPiB0b1wtYml0ZTsKK+OwtSA+IHRvXC1zdWNrOwor47CVID4gYVwtbGFkbGU7Civjr7sgPiB0b1wtYmluZDsKK+OvuSA+IHRvXC1zaG93Owor46+4ID4gYVwtYmFzaW47Civjr5MgPiBhXC1jb3VjaDsKK+OvkCA+IHR1YnVsYXI7Civjr4sgPiBhXC1jaGVzdDsKK+OuuCA+IHRvXC1zZW5kOwor466bID4gYVwtc3Bvb247CivjrbAgPiB0b1wta25vdzsKK+OtrCA+IHRvXC1iZWF0Owor462qID4gYVwtc2hydWI7CivjrYwgPiBhXC1iYXNpbjsKK+OtiCA+IGFcLWJhc2luOwor46y8ID4gdG9cLWhhdmU7CivjrJ0gPiBvYnNjdXJlOwor46yUID4gdG9cLWRlZnk7CivjrIMgPiBzdW5yaXNlOwor46u0ID4gdG9cLXJvYXI7Civjq7MgPiBtb3JuaW5nOwor46unID4gdmlvbGVudDsKK+OrnSA+IHRoZVwtc3VuOwor46uZID4gdGhlXC1zdW47Civjq5EgPiBwdXJwb3NlOwor46q8ID4gdG9cLXB1bGw7CivjqrEgPiBlbGVnYW50Owor46qvID4gdG9cLWxpZnQ7Civjqq4gPiB0b1wtYmVhdDsKK+OqqCA+IHRvXC1tZW5kOwor46qnID4gdG9cLWJlYXQ7CivjqqYgPiB0b1wtYmVhdDsKK+OqpSA+IHRvXC10YWtlOwor46qiID4gdG9cLWJlYXQ7CivjqqAgPiB0b1wtcGVjazsKK+OqnSA+IHRvXC1iZWF0Owor46qXID4gdG9cLW9wZW47CivjqpUgPiB0b1wtYmVhdDsKK+OqkiA+IHRvXC1ydWluOwor46qPID4gdG9cLXJ1aW47CivjqoEgPiB0b1wtaG9sZDsKK+OptiA+IHRvXC1ob2xkOwor46m1ID4gdG9cLWJlYXQ7CivjqbMgPiB0b1wtaG9sZDsKK+OpsCA+IHRvXC1zdGFiOwor46mvID4gdG9cLW1vdmU7CivjqawgPiB0b1wtYmVhdDsKK+OppCA+IHRvXC1vcGVuOwor46mjID4gdG9cLW1vdmU7CivjqaIgPiB0b1wtYmVhdDsKK+OplSA+IHRvXC1oYXVsOwor46mLID4gdG9cLWJlYXQ7CivjqLcgPiB0b1wtd2lwZTsKK+OosCA+IHRvXC10dXJuOwor46imID4gdG9cLWhvbGQ7CivjqKQgPiB0b1wtd2lwZTsKK++ooiA+IHNldmVyYWw7CivvqJ4gPiBmZWF0aGVyOwor76idID4gZXNzZW5jZTsKK+OoliA+IHRvXC1zdGFiOwor46iPID4gdG9cLWJlYXQ7CivjqIsgPiB0b1wtYmVhdDsKK++oiSA+IGRlc2NlbmQ7CivvqIYgPiB2aW9sZW50Owor46iGID4gdG9cLWtpbGw7CivjqIIgPiB0b1wtYmVhdDsKK+OnvyA+IHRvXC1idW1wOwor46e7ID4gYVwtdGhvcm47Civjp6sgPiB0b1wtaG9sZDsKK+OnqiA+IHRvXC1ydWluOwor46ekID4gdG9cLWp1bXA7Civjp6MgPiB0b1wtc3RvcDsKK+OnoSA+IHRvXC1tb3ZlOwor46efID4gdG9cLXdpcGU7Civjp50gPiB0b1wtdGFrZTsKK++nmyA+IHRvXC1sZWFkOwor46ecID4gdG9cLWhvbGQ7Civvp5ggPiBzdGF0dXRlOwor76eWID4gYmVcLWxvc3Q7Civjp5MgPiB0b1wtbGVhZDsKK+OnkiA+IHRvXC1iZWF0Owor46eRID4gdG9cLXdhdmU7Civjp5AgPiB0b1wtaG9sZDsKK+OniiA+IHRvXC1wdXNoOwor76eHID4gc3VybmFtZTsKK+OniCA+IHRvXC1wdWxsOwor46eHID4gdG9cLWhvbGQ7Civvp4MgPiBkaXN0YW50Owor46eEID4gdG9cLXRha2U7Civvp4AgPiB0b1wtYnVybjsKK+OmuSA+IGFcLXNwZWFyOwor46a1ID4gdG9cLWtpbGw7Civjpq0gPiB0b1wtcGl0eTsKK+OmrCA+IGFzaGFtZWQ7CivvpqggPiBjb21tYW5kOwor76amID4gYVwtYmxpbmQ7CivvpqIgPiB1cHJpZ2h0Owor46aeID4gZ3JpZXZlZDsKK++mlyA+IGNvbm5lY3Q7CivjppUgPiB0aG91Z2h0Owor76aJID4gc3VybmFtZTsKK++mgCA+IHN1cm5hbWU7Civvpb4gPiBtZWFzdXJlOwor46W9ID4gZmVlbGluZzsKK+OluSA+IHRvXC1tb3ZlOwor76WzID4gcGlja1wtdXA7Civjpa8gPiBjYXJlZnVsOwor76WsID4gc3RvcFwtdXA7CivjpaQgPiB0b1wtcGl0eTsKK++loSA+IHRvXC1sZWFkOwor76WdID4gcHJvbWlzZTsKK+OllSA+IHRvXC1waXR5Owor46WSID4gY29ycnVwdDsKK+OljyA+IGJhc2hmdWw7CivjpYwgPiBwcnVkZW50Owor76WKID4gcmFtcGFydDsKK++liSA+IHRodW5kZXI7CivjpYQgPiB0b1wtcGl0eTsKK+OkvyA+IHRvXC1sb3ZlOwor46S9ID4gZ3JpZXZlZDsKK++kuSA+IGZvb2xpc2g7CivjpLogPiBibHVycmVkOwor76S2ID4gY2FwdHVyZTsKK+OktiA+IGNvbmZ1c2U7CivvpLMgPiBjb3R0YWdlOwor76SwID4gY2FwdHVyZTsKK+OkrSA+IHVudGFtZWQ7CivjpKAgPiBncmlldmVkOwor76SdID4gcmFpbGluZzsKK++kjiA+IGxlcHJvc3k7CivjpIUgPiB0b1wtbG92ZTsKK++kgyA+IHN1cm5hbWU7CivjpIMgPiBqZWFsb3VzOwor46SCID4gYW54aW91czsKK+OjtyA+IHdhbGtpbmc7Civjo7YgPiB0b1wtd2FsazsKK+OjrCA+IHRvXC13YWxrOwor46OcID4gdG9cLXdhbGs7Civjo5sgPiB3YWxraW5nOwor46ODID4gdG9cLXNlbGw7Civjo4IgPiB0b1wtYmluZDsKK+OivCA+IGF3a3dhcmQ7CivjoqMgPiB0b1wtbGlmdDsKK+OinSA+IGNvdHRhZ2U7CivjopUgPiBoYXJtb255Owor46G4ID4gYVwtaG91c2U7CivjobAgPiBhXC1ob3VzZTsKK+OhqyA+IGFueGlvdXM7CivjoaggPiBhXC1sYWJlbDsKK+OhmCA+IHNjcmVlbnM7CivjoZMgPiBkcmF3ZXJzOwor46GCID4gcmVtYWluczsKK+OgrSA+IHRvXC1vcGVuOwor45+nID4gYVwtY2xpZmY7CivjnrogPiBhXC10cmliZTsKK+OeqyA+IHRvXC13YWxrOwor456nID4gdG9cLW1lZXQ7CivjnqQgPiB0b1wtaGVscDsKK+OeoSA+IHRvXC1vcGVuOwor456AID4gdG9cLWJ1bXA7CivjnbwgPiBjcm9va2VkOwor452xID4gYVwtZHJlYW07CivjnaIgPiBhXC1ob3VzZTsKK+OdgCA+IHRvXC1saWtlOwor45y+ID4gYVwtY2hpbGQ7CivjnKkgPiBqZWFsb3VzOwor45yTID4gd29tYW5seTsKK+OciSA+IHdvbWFubHk7CivjnIcgPiB1bmhhcHB5Owor45u/ID4gY3VubmluZzsKK+ObuyA+IHdvbWFubHk7Civjm68gPiB0b1wtc29hcjsKK+OblSA+IHdvbWFubHk7CivjmqIgPiBhXC1zbGF2ZTsKK+OZlCA+IGFcLWZlbmNlOwor45mQID4gdG9cLW1vdmU7CivjmY8gPiBjYXZlcm5zOwor45i4ID4gdG9cLWJ1cnk7CivjmLcgPiBtdWd3b3J0Owor45ipID4gdG9cLW1hdGU7CivjmJcgPiB3aGlzcGVyOwor45iVID4gdG9cLWNhbGw7CivjmIIgPiBhc2hhbWVkOwor45iBID4gdG9cLWNhbGw7Civjl70gPiBhblwtZWNobzsKK+OXsiA+IHRvXC1jYWxsOwor45exID4gdG9cLXN1Y2s7Civjl60gPiBhXC1zb3VuZDsKK+OXpCA+IGFzaGFtZWQ7Civjl40gPiB0b1wtZ25hdzsKK+OXgyA+IHRoZVwtbGlwOwor45a/ID4gYVwtc291bmQ7CivjlrsgPiB3aGlzcGVyOwor45a6ID4gdG9cLWJsb3c7Civjlq0gPiB0b1wtbGljazsKK+OWpSA+IHRvXC1zcGl0Owor45W3ID4gdG9cLWNhbGw7CivjlbEgPiB0b1wtYmFyazsKK+OVriA+IHRvXC1jaGV3Owor45WfID4gdG9cLXNpZ247CivjlZ4gPiBhXC1icnVzaDsKK+OVnCA+IGhpc3Rvcnk7CivjlL8gPiBhXC10YWxseTsKK+OUrSA+IGFcLXNwb29uOwor45ShID4gZ3JlYXRseTsKK+OUgiA+IHRvXC1wYXJlOwor45OyID4gdG9cLXBhcmU7Civjk7AgPiB0b1wtcml2ZTsKK+OTpSA+IHRvXC1raWxsOwor45OfID4gdG9cLXBlZWw7Civjk5AgPiB0b1wtcmFpbjsKK+OSvCA+IGF2ZXJhZ2U7CivjkrggPiB0b1wtb2JleTsKK+OStCA+IHRvXC1jb21lOwor45KmID4gcHVwcGV0czsKK+OSniA+IHZhbGlhbnQ7CivjkpUgPiB1bnlpZWxkOwor45KSID4gYVwtc2xhdmU7CivjkpEgPiBncm93XC11cDsKK+OSiSA+IGFsYXJtZWQ7CivjkbkgPiB0b1wtbWVldDsKK+ORkCA+IHRvXC1tb3ZlOwor45GFID4gdG9cLW1ha2U7CivjkYMgPiB0b1wtcHVsbDsKK+OQvCA+IHRvXC1zYXZlOwor45CuID4gdG9cLWhlbHA7CivjkIEgPiB0b1wtbGljazsKK+aYryA+IGluZGVlZDsKK+i/qyA+IGNvZXJjZTsKK+W/nCA+IHNob3VsZDsKK+W/mCA+IGZvcmdldDsKK+WbvSA+IG5hdGlvbjsKK+i/lCA+IHJldHVybjsKK+W/jSA+IGVuZHVyZTsKK+i/hCA+IGV4dGVuZDsKK+W/hSA+IHN1cmVseTsKK+WHuiA+IGdvXC1vdXQ7Civovr8gPiBmb2xsb3c7CivnnrwgPiBleWVsaWQ7CivlvpcgPiBvYnRhaW47CivovrcgPiBzbW9vdGg7CivlvrQgPiBzdW1tb247CivlvrMgPiB2aXJ0dWU7Civnnq0gPiBicmlnaHQ7CivlvqkgPiByZXR1cm47CivovpsgPiBiaXR0ZXI7CivlvpAgPiBzbG93bHk7CivlvowgPiBiZWhpbmQ7CivlvoogPiBsaW5nZXI7CivlvbEgPiBzaGFkb3c7CivkuosgPiBhZmZhaXI7CivovZ8gPiBydW1ibGU7CivlvYggPiBwZWxsZXQ7CivkuLsgPiBtYXN0ZXI7CivlvLcgPiBzdHJvbmc7CivlvJsgPiBsb29zZW47CivmsJEgPiBwZW9wbGU7CivnnIwgPiBjb3VudHk7CivnjrAgPiBhcHBlYXI7CivliIYgPiBkaXZpZGU7CivkupsgPiBsaXR0bGU7Civnm7ggPiBtdXR1YWw7Civlm54gPiByZXR1cm47CivnkIYgPiByZWFzb247CivmmI4gPiBicmlnaHQ7Civnm4ogPiBwcm9maXQ7Civor50gPiBzcGVlY2g7CivlkJEgPiB0b3dhcmQ7CivlrpogPiBkZWNpZGU7CivluqsgPiBhcm1vcnk7CivluqYgPiBkZWdyZWU7CivlupUgPiBib3R0b207CivmiZMgPiBzdHJpa2U7CivkvY0gPiB0aHJvbmU7Civluo8gPiBzZXJpZXM7CivlubwgPiBpbmZhbnQ7CivlubIgPiBvcHBvc2U7CivlhoUgPiBpbnNpZGU7CivnmaogPiBzcGFzbXM7CivliqAgPiBhZGRcLXRvOwor5YyWID4gY2hhbmdlOwor55mMID4gY2FuY2VyOwor5bi4ID4gY29tbW9uOwor6LiwID4gZXhjZWVkOwor5biCID4gbWFya2V0Owor5biwID4gcmV0dXJuOwor5omNID4gdGFsZW50Owor5L2PID4gcmVzaWRlOwor5ZGYID4gbWVtYmVyOwor5be7ID4gc2Nyb2xsOwor5oCnID4gbmF0dXJlOwor5oqlID4gcmVwb3J0Owor56WeID4gc3Bpcml0Owor5pWwID4gbnVtYmVyOwor6LehID4gc2VhcmNoOwor5Y6fID4gc291cmNlOwor5behID4gcGF0cm9sOwor5bedID4gc3RyZWFtOwor5bqUID4gc2hvdWxkOwor6LaKID4gZXhjZWVkOwor55aKID4gcmVwZWF0Owor57O7ID4gc3lzdGVtOwor55WzID4gcmVwZWF0Owor6LWrID4gYnJpZ2h0Owor5Y+KID4gZXh0ZW5kOwor5Yi2ID4gc3lzdGVtOwor55WgID4gZ2FyZGVuOwor6KejID4gbG9vc2VuOwor6K6wID4gcmVjb3JkOwor5p6XID4gZm9yZXN0Owor6LSUID4gc3Ryb25nOwor57ufID4gZ292ZXJuOwor5a2XID4gbGV0dGVyOwor5bO2ID4gaXNsYW5kOwor6LOqID4gbWF0dGVyOwor6K66ID4gZGViYXRlOwor6LKwID4gYm9ycm93Owor5oyHID4gZmluZ2VyOwor6LKhID4gd2VhbHRoOwor6IqxID4gZmxvd2VyOwor5bGkID4gc3RvcmV5Owor5p2hID4gY2xhdXNlOwor5Y+YID4gY2hhbmdlOwor6K+lID4gc2hvdWxkOwor5bGNID4gY29ycHNlOwor5LygID4gc3VtbW9uOwor5rK7ID4gZ292ZXJuOwor5YazID4gZGVjaWRlOwor5bGAID4gYnVyZWF1Owor5YqeID4gbWFuYWdlOwor6LC3ID4gdmFsbGV5Owor5Z+OID4gY2FzdGxlOwor54i2ID4gZmF0aGVyOwor5by6ID4gc3Ryb25nOwor5bCOID4gZGlyZWN0Owor5bCBID4gbGV0dGVyOwor54++ID4gYXBwZWFyOwor5a+nID4gcmVwb3NlOwor6buEID4geWVsbG93Owor5b63ID4gZXRoaWNzOwor5a6zID4gaW5qdXJlOwor5a6uID4gcGFsYWNlOwor5om+ID4gc2VhcmNoOwor5Y+LID4gZnJpZW5kOwor6K6KID4gY2hhbmdlOwor5pS5ID4gY2hhbmdlOwor5a6IID4gZGVmZW5kOwor6K6DID4gcHJhaXNlOwor6ZmFID4gYm9yZGVyOwor5Y2VID4gc2luZ2xlOwor5a+8ID4gZGlyZWN0Owor542yID4gb2J0YWluOwor5a2kID4gb3JwaGFuOwor5qChID4gc2Nob29sOwor542EID4gcHJpc29uOwor54y+ID4gY3JhZnR5Owor6KyZID4gaHVtYmxlOwor6KyOID4gcmlkZGxlOwor6ZqPID4gZm9sbG93Owor54u5ID4gbmFycm93Owor54utID4gbmFycm93Owor5q+NID4gbW90aGVyOwor54uZID4gYW5cLWFwZTsKK+irliA+IGRlYmF0ZTsKK+WboiA+IHNwaGVyZTsKK+eLgiA+IGluc2FuZTsKK+iqsiA+IGxlc3NvbjsKK+iLpiA+IGJpdHRlcjsKK+aLmyA+IGJlY2tvbjsKK+WFtCA+IHRocml2ZTsKK+ipsiA+IHNob3VsZDsKK+e6piA+IHRyZWF0eTsKK+ipsSA+IHNwZWVjaDsKK+ipqSA+IHBvZXRyeTsKK+eJoiA+IHByaXNvbjsKK+e7nSA+IHRvXC1jdXQ7CivpgIkgPiBjaG9vc2U7CivlpI0gPiByZXR1cm47CivmmJ8gPiBhXC1zdGFyOwor54i6ID4gZmF0aGVyOwor6Ki0ID4gYWNjdXNlOwor6KifID4gYWNjdXNlOwor5aaIID4gbW90aGVyOwor54ibID4gcm90dGVuOwor6KiYID4gcmVjb3JkOwor5raIID4gdmFuaXNoOwor5aiYID4gbW90aGVyOwor54etID4gY2FuZGxlOwor5aerID4gYmVhdXR5Owor5p2oID4gd2lsbG93Owor5piTID4gY2hhbmdlOwor5LilID4gc3RyaWN0Owor54aKID4gYVwtYmVhcjsKK+WmhCA+IGFic3VyZDsKK+e6qiA+IHJlY29yZDsKK+iLjyA+IHJldml2ZTsKK+etlCA+IGFuc3dlcjsKK+WlriA+IHN0cml2ZTsKK+eFqSA+IGJvdGhlcjsKK+ilpCA+IHJhZ2dlZDsKK+WHuyA+IHN0cmlrZTsKK+aciyA+IGZyaWVuZDsKK+S+myA+IHN1cHBseTsKK+WkriA+IGNlbnRlcjsKK+WIlyA+IGFcLWxpbmU7CivnhKYgPiBidXJuZWQ7CivniLcgPiBmYXRoZXI7CivpvpkgPiBkcmFnb247CivopJIgPiBwcmFpc2U7CivlpI8gPiBzdW1tZXI7CivlpIkgPiBjaGFuZ2U7CivmmKUgPiBzcHJpbmc7CivopIcgPiByZXBlYXQ7CivngbUgPiBzcGlyaXQ7Civoo6EgPiBpbnNpZGU7Civor4kgPiBhY2N1c2U7CivmgIEgPiBtYW5uZXI7Civoo48gPiBpbnNpZGU7CivotKggPiBtYXR0ZXI7CivoopYgPiBzbGVldmU7Civlm60gPiBnYXJkZW47CivooosgPiBwb2NrZXQ7Civlia8gPiBhc3Npc3Q7CivlpJ8gPiBlbm91Z2g7CivojrcgPiBvYnRhaW47Civor5cgPiBwb2V0cnk7CivooZcgPiBzdHJlZXQ7CivloLEgPiByZXBvcnQ7Civmv4AgPiBhcm91c2U7Civpk7YgPiBzaWx2ZXI7CivpmLUgPiBjb2x1bW47CivlsYIgPiBzdG9yZXk7Civkuq4gPiBicmlnaHQ7CivnroAgPiBzaW1wbGU7Civmr5IgPiBwb2lzb247CivlvZIgPiByZXR1cm47CivmjaIgPiBjaGFuZ2U7CivmuZYgPiBhXC1sYWtlOwor6J2JID4gY2ljYWRhOwor6L+9ID4gcHVyc3VlOwor6bysID4gd2Vhc2VsOwor57ucID4gZW5tZXNoOwor5rygID4gZGVzZXJ0Owor6JyYID4gc3BpZGVyOwor5ZyYID4gc3BoZXJlOwor5Y2gID4gZGl2aW5lOwor5ZyTID4gY2lyY2xlOwor5ZySID4gZ2FyZGVuOwor6LW2ID4gcHVyc3VlOwor5YWwID4gb3JjaGlkOwor5ZyLID4gbmF0aW9uOwor5ZyDID4gZ2FyZGVuOwor5rqQID4gc3ByaW5nOwor5ZujID4gc3BoZXJlOwor6Zi2ID4gc3RhaXJzOwor6JubID4gc3BpZGVyOwor6buZID4gc2lsZW50Owor5Ly4ID4gZXh0ZW5kOwor6buYID4gc2lsZW50Owor5L2bID4gYnVkZGhhOwor5Zq0ID4gc3RyaWN0Owor5oylID4gZGlyZWN0Owor5pWIID4gcmVzdWx0Owor5pS7ID4gYXR0YWNrOwor562WID4gc2NoZW1lOwor6ZiyID4gZGVmZW5kOwor6IKhID4gdGhpZ2hzOwor6JitID4gb3JjaGlkOwor6I6rID4gZG9cLW5vdDsKK+WYmCA+IGV4aGFsZTsKK+WOvyA+IGNvdW50eTsKK+iYhyA+IHJldml2ZTsKK+eqlyA+IHdpbmRvdzsKK+a3uyA+IGFwcGVuZDsKK+a3tyA+IHRvXC1taXg7Civpt7IgPiBjb25kb3I7CivljZogPiBnYW1ibGU7CivlvLkgPiBwZWxsZXQ7Civol6QgPiByYXR0YW47CivlnY8gPiByb3R0ZW47CivmmbogPiB3aXNkb207CivlspsgPiBpc2xhbmQ7CivmipcgPiByZXNpc3Q7CivllrAgPiB0b1wtZWF0Owor5ZauID4gc2luZ2xlOwor54i5ID4gZmF0aGVyOwor5ZanID4gbGl2ZWx5Owor5ZaJID4gdGhyb2F0Owor54i4ID4gZmF0aGVyOwor5rWaID4gZHJlZGdlOwor6YCDID4gZXNjYXBlOwor6aqCID4gYWNjdXNlOwor5ZS4ID4gcmVjaXRlOwor6Z2WID4gcGFjaWZ5Owor56eYID4gc2VjcmV0Owor6LSiID4gd2VhbHRoOwor5qyyID4gZGVzaXJlOwor5b6BID4gaW52YWRlOwor56eLID4gYXV0dW1uOwor5ZC4ID4gaW5oYWxlOwor6bOpID4gcGlnZW9uOwor5ZOhID4gbWVtYmVyOwor5oKyID4gc29ycm93Owor5rOJID4gc3ByaW5nOwor5qGlID4gYnJpZGdlOwor5YqyID4gc3Ryb25nOwor5ZK9ID4gdGhyb2F0Owor6JK7ID4gcnVzaGVzOwor5bqTID4gYXJtb3J5Owor5YCfID4gYm9ycm93Owor5rG6ID4gZGVjaWRlOwor6JGjID4gZGlyZWN0Owor6JGhID4gZ3JhcGVzOwor5rGaID4gZmlsdGh5Owor5o6nID4gYWNjdXNlOwor6IO4ID4gYnJlYXN0Owor6K++ID4gbGVzc29uOwor6YKuID4gcG9zdGFsOwor5ZCdID4gc3Rpbmd5Owor5qiqID4gYWNyb3NzOwor5YGlID4gc3Ryb25nOwor6JCOID4gd2l0aGVyOwor6JCEID4gZ3JhcGVzOwor5ZyGID4gY2lyY2xlOwor5Y23ID4gc2Nyb2xsOwor6I+rID4gY2VsZXJ5Owor5oupID4gc2VsZWN0Owor5oGoID4gaGF0cmVkOwor56u5ID4gYmFtYm9vOwor6I+TID4gZnJ1aXRzOwor5a6rID4gcGFsYWNlOwor5peXID4gYmFubmVyOwor5q67ID4gY2FzaW5nOwor5Y6zID4gc3RyaWN0Owor5q6YID4gaW5qdXJlOwor5q6LID4gaW5qdXJlOwor5q24ID4gcmV0dXJuOwor56izID4gc3RhYmxlOwor6L+5ID4gdHJhY2VzOwor6ZKIID4gbmVlZGxlOwor5pu/ID4gY2hhbmdlOwor5Y2RID4gaHVtYmxlOwor5oKEID4gc2lsZW50Owor5aWLID4gc3RyaXZlOwor5qu7ID4gY2hlcnJ5Owor5byDID4gcmVqZWN0Owor54OmID4gYm90aGVyOwor5oq1ID4gcmVzaXN0Owor56CBID4gbnVtYmVyOwor5YqxID4gc3RyaXZlOwor57SrID4gcHVycGxlOwor5ouUID4gdXByb290Owor6IqdID4gc2VzYW1lOwor5qKBID4gYnJpZGdlOwor6LWPID4gcmV3YXJkOwor5YqDID4gZGl2aWRlOwor5o+SID4gaW5zZXJ0Owor6amiID4gZG9ua2V5Owor5YasID4gd2ludGVyOwor5ompID4gZXhwYW5kOwor5qmYID4gb3JhbmdlOwor5qmLID4gYnJpZGdlOwor6YC8ID4gY29tcGVsOwor6ai3ID4gaGFyYXNzOwor5Yi5ID4gdGVtcGxlOwor6ZWcID4gbWlycm9yOwor5rGhID4gZmlsdGh5Owor5qiZID4gYVwtbWFyazsKK+eLsSA+IHByaXNvbjsKK+mokiA+IGhhcmFzczsKK+iIjCA+IHRvbmd1ZTsKK+ajriA+IGZvcmVzdDsKK+iIiCA+IHRocml2ZTsKK+anvSA+IHRyb3VnaDsKK+aAqCA+IGhhdHJlZDsKK+iHvCA+IG1vcnRhcjsKK+S8jyA+IGNyb3VjaDsKK+aEpCA+IHJlc2VudDsKK+S/hCA+IHN1ZGRlbjsKK+WHjSA+IGZyZWV6ZTsKK+anjCA+IGhhbW1lcjsKK+eojSA+IGxpdHRsZTsKK+exjSA+IHJlY29yZDsKK+S+tSA+IGludmFkZTsKK+mYuyA+IGltcGVkZTsKK+aFpyA+IGJyaWdodDsKK+mlkSA+IHN0YXJ2ZTsKK+aZgyA+IGJyaWdodDsKK+iFkSA+IGJvd2VsczsKK+eDgiA+IHJvdHRlbjsKK+WFjiA+IHJhYmJpdDsKK+iFiyA+IGFybXBpdDsKK+WwuCA+IGNvcnBzZTsKK+akvyA+IGZhdGhlcjsKK+WEmCA+IHV0bW9zdDsKK+W0hyA+IGVzdGVlbTsKK+mkkyA+IGh1bmdyeTsKK+akjiA+IGhhbW1lcjsKK+ajuiA+IGNvZmZpbjsKK+eyiSA+IHBvd2RlcjsKK+ebviA+IHNoaWVsZDsKK+mjoiA+IGh1bmdlcjsKK+i9sCA+IHJ1bWJsZTsKK+WluCA+IGNyYWZ0eTsKK+mCpiA+IG5hdGlvbjsKK+ajhCA+IHJlamVjdDsKK+mlvyA+IGh1bmdyeTsKK+aNlSA+IGFycmVzdDsKK+WCsyA+IHN1bW1vbjsKK+airyA+IGxhZGRlcjsKK+aMoyA+IHN0cml2ZTsKK+iBmCA+IGVuZ2FnZTsKK+ainSA+IGNsYXVzZTsKK+iAkCA+IGVuZHVyZTsKK+aigyA+IGFcLWNsdWI7CivpoasgPiBzaGl2ZXI7CivmoZwgPiBjaGVycnk7Civpl7cgPiBnbG9vbXk7CivpoZggPiBkZXNpcmU7CivmgpQgPiByZXBlbnQ7CivpgoAgPiBpbnZpdGU7CivpoqQgPiBzaGl2ZXI7CivpoKwgPiBjaGVla3M7CivpoKQgPiBjaGVla3M7CivmgqMgPiBzdWZmZXI7CivkuJAgPiBiZWdnYXI7Civmn7EgPiBwaWxsYXI7Civmn5ogPiBwb21lbG87Civnv4wgPiBicmlnaHQ7Civmn4QgPiBoYW5kbGU7Civkvq4gPiBpbnN1bHQ7Civpk5wgPiBjb3BwZXI7CivmnpUgPiBwaWxsb3c7CivnvbkgPiBzb3Jyb3c7CivnvbUgPiBhY2N1c2U7CivmnbUgPiBwZXN0bGU7CivmlbIgPiBzdHJpa2U7CivpnaEgPiBkaXZpZGU7Civmia8gPiByaXBcLXVwOwor6Ym0ID4gbWlycm9yOwor6LaLID4gaGFzdGVuOwor5L2QID4gYXNzaXN0Owor6YCKID4gaHVtYmxlOwor6Z2IID4gc3Bpcml0Owor5py0ID4gc2ltcGxlOwor5pytID4gbGV0dGVyOwor5LydID4gc3VtbW9uOwor5LyOID4gdGFsZW50Owor5LiyID4gc3RyaW5nOwor6ZyKID4gc3Bpcml0Owor6ZuyID4gY2xvdWRzOwor54aZID4gYnJpZ2h0Owor5bqZID4gdGVtcGxlOwor5LuPID4gYnVkZGhhOwor6ZuMID4gZmVtYWxlOwor6ZuHID4gZW1wbG95Owor6ZqoID4gZm9sbG93Owor6ZqbID4gYm9yZGVyOwor6ZqOID4gc3RhaXJzOwor6ZqFID4gY29ybmVyOwor6YW3ID4gc3Ryb25nOwor5LmzID4gYnJlYXN0Owor56ijID4gcmV2aXZlOwor6ZmjID4gY29sdW1uOwor57mVID4gcmVwYWlyOwor5pitID4gYnJpZ2h0Owor5qOJID4gY290dG9uOwor5pCcID4gc2VhcmNoOwor57ibID4gdG9cLXRpZTsKK+iwhSA+IGV4Y3VzZTsKK+eDmyA+IGNhbmRsZTsKK+WRiCA+IHN1Ym1pdDsKK+e3miA+IHRocmVhZDsKK+aLkyA+IGV4cGFuZDsKK+aVpiA+IGVzdGVlbTsKK+aVuCA+IG51bWJlcjsKK+aVtyA+IHNwcmVhZDsKK+e1sSA+IGdvdmVybjsKK+iEviA+IHNwbGVlbjsKK+e1oSA+IGVubWVzaDsKK+e0syA+IGdpcmRsZTsKK+m5sCA+IGZhbGNvbjsKK+e0hCA+IHRyZWF0eTsKK+e0gCA+IHJlY29yZDsKK+aEmiA+IHN0dXBpZDsKK+ezniA+IG1hbnVyZTsKK+eypyA+IHRvaWxldDsKK+aSgyA+IHN0cmlrZTsKK+mlpSA+IGh1bmdlcjsKK+mRkiA+IG1pcnJvcjsKK+mAuyA+IHBhdHJvbDsKK+ewoSA+IHNpbXBsZTsKK+mPoSA+IG1pcnJvcjsKK+aPmyA+IGNoYW5nZTsKK+aOoSA+IGdhdGhlcjsKK+W4lSA+IHR1cmJhbjsKK+WGuyA+IGZyZWV6ZTsKK+iwpiA+IGh1bWJsZTsKK+aNnCA+IHNlYXJjaDsKK+S4qyA+IGZvcmtlZDsKK+eFjCA+IGJyaWdodDsKK+aMvyA+IGluc2VydDsKK+aLkCA+IGtpZG5hcDsKK+iNkCA+IHJlcGVhdDsKK+WAqiA+IGZlZWJsZTsKK+mMkCA+IGdpbWxldDsKK+mqmiA+IGhhcmFzczsKK+WvniA+IHNpbGVudDsKK+evriA+IGJhc2tldDsKK+S+hCA+IG5lcGhldzsKK+aLmSA+IHN0dXBpZDsKK+WPiSA+IGNyb3RjaDsKK+aAliA+IHRlcnJvcjsKK+aKnCA+IHVwcm9vdDsKK+eqkyA+IHdpbmRvdzsKK+aKiSA+IGNob29zZTsKK+mKhSA+IGNvcHBlcjsKK+mKgCA+IHNpbHZlcjsKK+iwnCA+IHJpZGRsZTsKK+migSA+IGNvbmZlcjsKK+miiiA+IGNoZWVrczsKK+WSlSA+IG11bWJsZTsKK+iItSA+IHJ1ZGRlcjsKK+aDqSA+IHB1bmlzaDsKK+WSliA+IGNvZmZlZTsKK+mHnSA+IG5lZWRsZTsKK+aHiSA+IHNob3VsZDsKK+WwuSA+IGdvdmVybjsKK+aGpCA+IHJlc2VudDsKK+a3syA+IGhvbmVzdDsKK+eMtCA+IG1vbmtleTsKK+W8piA+IHN0cmluZzsKK+e8miA+IHRvXC10aWU7CivmhYsgPiBtYW5uZXI7CivmhYQgPiBzaGl2ZXI7CivpmYsgPiBuYXJyb3c7Civpg7UgPiBwb3N0YWw7CivnqoQgPiBuYXJyb3c7CivpqbQgPiBkb25rZXk7Civlo7MgPiBjYXNpbmc7CivpnIkgPiBtaWxkZXc7CivoiqYgPiBydXNoZXM7Civog7MgPiBhcm1waXQ7CivmgrwgPiBncmlldmU7CivmgrYgPiBnbG9vbXk7CivpgI0gPiByYW1ibGU7CivmgrQgPiBzdWZmZXI7CivogI0gPiBmcm9saWM7CivnsqogPiBtYW51cmU7CivmjYYgPiB0aWVcLXVwOwor6YG4ID4gY2hvb3NlOwor6YGcID4gaHVtYmxlOwor5YWUID4gcmFiYml0Owor6YGKID4gd2FuZGVyOwor6YCbID4gcmFtYmxlOwor5YyIID4gYnJlYXN0Owor6K69ID4gcmVjaXRlOwor5oujID4gY2hvb3NlOwor6IC/ID4gYnJpZ2h0Owor5bu/ID4gdHdlbnR5Owor6K+1ID4gcmVjaXRlOwor6IW7ID4gZ3JlYXN5Owor57yGID4gaGF3c2VyOwor6Z6RID4gdGF0YXJzOwor5rCTID4gcGVvcGxlOwor5oW3ID4gYXJkZW50Owor56+3ID4gYXduaW5nOwor6I2GID4gdGhvcm5zOwor6IaPID4gZ3JlYXNlOwor6Z6NID4gc2FkZGxlOwor6bigID4gcGlnZW9uOwor57yVID4gdGhyZWFkOwor552sID4gbm90aWNlOwor57ulID4gc29vdGhlOwor5rCnID4gb3h5Z2VuOwor5am3ID4gcHJldHR5Owor5aesID4gYmVhdXR5Owor5ZCtID4gdGhyb2F0Owor5Ye/ID4gY2hpc2VsOwor5o2CID4gcmVzaXN0Owor5berID4gd2l6YXJkOwor6Jm+ID4gc2hyaW1wOwor57uFID4gZ2lyZGxlOwor6ZW2ID4gaW5zZXJ0Owor6aKQID4gY2hlZWtzOwor5YigID4gdG9cLWN1dDsKK+iuvCA+IGFjY3VzZTsKK+S8tiA+IGxvbmVseTsKK+eCryA+IGJyaWdodDsKK+m4vSA+IHBpZ2VvbjsKK+a4nSA+IGNoYW5nZTsKK+akkiA+IHBlcHBlcjsKK+aPliA+IHNhbHV0ZTsKK+WGiSA+IHRlbmRlcjsKK+WSmSA+IHRocm9hdDsKK+i4sSA+IHN0cm9sbDsKK+eMrCA+IHZ1bGdhcjsKK+WxvyA+IGlzbGFuZDsKK+S/kCA+IHNtb290aDsKK+ikgiA+IGphY2tldDsKK+ezmSA+IGNvYXJzZTsKK+mXuCA+IHNsdWljZTsKK+mikyA+IHJ1aW5lZDsKK+WxiSA+IGRyYXdlcjsKK+iKuSA+IGNlbGVyeTsKK+mUpSA+IGdpbWxldDsKK+WIgSA+IHRyaWNreTsKK+abmSA+IGJyaWdodDsKK+a0vCA+IGhvbGxvdzsKK+eakyA+IGJyaWdodDsKK+iSnCA+IGdhcmxpYzsKK+eCsyA+IGJyaWdodDsKK+a4oyA+IHJlZnVzZTsKK+aFkSA+IGFmcmFpZDsKK+aosSA+IGNoZXJyeTsKK+W/jyA+IHJlZ3JldDsKK+eiviA+IHJvbGxlcjsKK+eWmSA+IHBpbXBsZTsKK+a8iSA+IGZpbHRlcjsKK+mapyA+IHR1bm5lbDsKK+mFpSA+IGJ1dHRlcjsKK+mSriA+IGJ1dHRvbjsKK+mamCA+IG5hcnJvdzsKK+a8sSA+IGdhcmdsZTsKK+eblCA+IGhlbG1ldDsKK+ejiyA+IHBvbGlzaDsKK+aDtCA+IGFmcmFpZDsKK+iViSA+IGJhbmFuYTsKK+aDiyA+IHJlZ3JldDsKK+eXsCA+IHBobGVnbTsKK+e+gSA+IGhhbHRlcjsKK+ivjyA+IGRlY3JlZTsKK+mdtiA+IHRhcmdldDsKK+mFnSA+IGxpcXVvcjsKK+afrCA+IGxldHRlcjsKK+S6tSA+IHNsaWdodDsKK+iygiA+IG1hcnRlbjsKK+iBhiA+IGxpc3RlbjsKK+aviyA+IGRvXC1ub3Q7Civpn6wgPiBzaGVhdGg7CivpuYogPiBtYWdwaWU7CivmlZYgPiByYW1ibGU7CivohrogPiBicmVhc3Q7CivmgpogPiBhZnJhaWQ7CivljYUgPiB0aGlydHk7CivlvrUgPiBzdW1tb247CivnorMgPiBjYXJib247Civmh7UgPiBzdHVwaWQ7CivpuasgPiBjb25kb3I7CivnoasgPiBzdWxmdXI7CivouJ4gPiBjcm91Y2g7CivplbAgPiBzaWNrbGU7Civmto4gPiBzYWxpdmE7Civlo5UgPiB0cmVuY2g7CivplJogPiBhbmNob3I7CivpkqAgPiBzb2RpdW07Civnnb8gPiBzaHJld2Q7CivojrogPiBvcmlvbGU7Civom4ogPiBwb2lzb247Civng6ggPiBicmlnaHQ7Civog68gPiBwZWx2aXM7Civot7sgPiBhc2NlbmQ7Civps5YgPiB0dXJ0bGU7CivohbwgPiBtb2Rlc3Q7CivmqZkgPiBvcmFuZ2U7CivkuJ4gPiBhc3Npc3Q7CivlqJMgPiBjb21wbHk7CivliI4gPiBiZWhlYWQ7CivouZkgPiB1cmdlbnQ7Civog5ogPiBlbWJyeW87CivojZQgPiBsaWNoZWU7Civpk78gPiBzdHJpa2U7CivplLUgPiB0aW5rbGU7CivojKcgPiBjb2Nvb247Civon5IgPiBweXRob247CivopLQgPiByYWdnZWQ7CivpuYMgPiBjdWNrb287CivnjKUgPiB2dWxnYXI7CivnjZcgPiB1bnJ1bHk7Civokq8gPiBhXC1ydXNoOwor5rKPID4gaW5mdXNlOwor5bOqID4gdmFsbGV5Owor5ZqPID4gc25lZXplOwor56C+ID4gZ3JhdmVsOwor6aaBID4gaHVuZ3J5Owor5L2fID4gYVwtbmFtZTsKK+iMnCA+IG1hZGRlcjsKK+aJiCA+IGVzY29ydDsKK+WSmyA+IGVuam9pbjsKK+azlyA+IG11Y291czsKK+iDhCA+IGhlbG1ldDsKK+mUuSA+IHNob3ZlbDsKK+m5lyA+IG9zcHJleTsKK+WEoSA+IHB1cHBldDsKK+eaiCA+IGZvbGxvdzsKK+iegiA+IG1hbnRpczsKK+iLkyA+IGZ1bmd1czsKK+WqmyA+IGJlYXV0eTsKK+eutCA+IG5lZWRsZTsKK+WPtSA+IGNhbm5vdDsKK+S7gyA+IGxvbmVseTsKK+adniA+IHdpbGxvdzsKK+WvriA+IHNoYW50eTsKK+e8riA+IHJlcGFpcjsKK+eKtyA+IGZpZXJjZTsKK+aysSA+IHJpdmVyczsKK+WOqSA+IHN0YWJsZTsKK+eWoSA+IHVsY2VyczsKK+WekyA+IGJvcmRlcjsKK+W+lSA+IGluZHVjZTsKK+angSA+IHdpdGhlcjsKK+mBtCA+IHNlbGVjdDsKK+WcuyA+IGJvcmRlcjsKK+m+iiA+IG5hcnJvdzsKK+m+jCA+IG5hcnJvdzsKK+mBqCA+IHJhbWJsZTsKK+mqmyA+IGdhbGxvcDsKK+W+iSA+IHdvbmRlcjsKK+iwqiA+IGNoYXJnZTsKK+S/miA+IHJ1c3RpYzsKK+mUqCA+IHNob3ZlbDsKK+mUgyA+IHBvbGlzaDsKK+S/qiA+IHNwb3VzZTsKK+mUsiA+IHNpY2tsZTsKK+elmiA+IHRocm9uZTsKK+iHviA+IG1vbWVudDsKK+mBkiA+IHN0cm9uZzsKK+WbuSA+IHByaXNvbjsKK+WstCA+IHRvXC13aW47Civng6kgPiByYWdvdXQ7CivlnIQgPiBwcmlzb247CivonqsgPiBwb2lzb247Civpk6QgPiBpbmdvdHM7CivonrMgPiBtYW50aXM7CivojIEgPiBzcHJvdXQ7CivoiKIgPiBzYW1wYW47Civoir4gPiBmbG93ZXI7Civni7IgPiBtb25rZXk7CivnopwgPiBncml0dHk7Civlg60gPiBhc3N1bWU7CivnopggPiBpb2RpbmU7Civng68gPiBhbGtlbmU7Civlm78gPiBwZW5cLXVwOwor5ZurID4gZW50aXJlOwor6KShID4gZ2lyZGxlOwor6ZWNID4gbmlja2VsOwor54WcID4gYnJpZ2h0Owor5qmQID4gYVwtc2FjazsKK+adtyA+IGxvcXVhdDsKK+aBuSA+IGZlZWJsZTsKK+W9gCA+IGVub3VnaDsKK+iBkiA+IGNsYW1vcjsKK+e+ryA+IHdldGhlcjsKK+eysiA+IHBvbGlzaDsKK+aehyA+IGxvcXVhdDsKK+enoyA+IGZvZGRlcjsKK+aovSA+IGdvYmxldDsKK+aluSA+IGNvbHVtbjsKK+eEliA+IHNpbW1lcjsKK+edkSA+IGV5ZWxpZDsKK+i9syA+IHB1bGxleTsKK+aumiA+IHV0bW9zdDsKK+mVrSA+IHJhZGl1bTsKK+auhCA+IHRvXC1lbmQ7Civor7AgPiBpbmZvcm07CivpuYQgPiB0YXJnZXQ7CivojoUgPiBhdHRlbmQ7CivosJ8gPiBzY2hlbWU7CivorqsgPiBmaW5pc2g7Civnj7IgPiBicmlnaHQ7Civmt6wgPiB0ZW1wZXI7CivlmKwgPiB0b1wtbGFwOwor5L22ID4gc3Ryb25nOwor5pmUID4gYnJpZ2h0Owor6IibID4gb3Bwb3NlOwor54O3ID4gYWxrYW5lOwor6JuOID4gb3lzdGVyOwor54SxID4gZmxhbWVzOwor6JylID4gbGl6YXJkOwor5ZycID4gY2lyY2xlOwor6Jy0ID4gbGl6YXJkOwor6JG6ID4gdGhhdGNoOwor5oiGID4gc3R1cGlkOwor5ay3ID4gbW90aGVyOwor5oG9ID4gZGV2aXNlOwor6JO/ID4gY2xvdmVyOwor55iMID4gc2V2ZXJlOwor5ZaxID4gZ3JhbW1lOwor6ZK0ID4gY29iYWx0Owor5bKZID4gaXNsYW5kOwor6LKJID4gYmFkZ2VyOwor57mHID4gcmVhc29uOwor6JyJID4gbWF5Zmx5Owor55aWID4gcGltcGxlOwor57q+ID4gbG9vc2VuOwor6bKRID4gc2FsbW9uOwor5aiIID4gbG92ZWx5Owor6I2oID4gbmV0dGxlOwor56umID4gcmV2ZXJlOwor54uSID4gYmFib29uOwor5pKEID4gb3Bwb3NlOwor6Ji8ID4gbWlsbGV0Owor6Iy0ID4gZmVubmVsOwor6bKmID4gbWlubm93Owor5riMID4gc3RyYWluOwor6ZiaID4gZ2xhbmNlOwor6IucID4gY2xvdmVyOwor5YGsID4gdXJnZW50Owor54+QID4gZW5hbWVsOwor6Z2bID4gaW5kaWdvOwor6bunID4gYVwtZGFyazsKK+eihyA+IGFuY2hvcjsKK+igkyA+IG1pZGdlczsKK+apvCA+IGNpdHJ1czsKK+iVniA+IGxpdHRsZTsKK+WcryA+IGJyaWRnZTsKK+mtjSA+IGRlbW9uczsKK+e/iiA+IGZseWluZzsKK+mVjyA+IGRpc3RpbDsKK+eikyA+IHBlc3RsZTsKK+iDvCA+IGNhbGx1czsKK+aMiCA+IGFzc2lzdDsKK+eKjyA+IHlha1wtb3g7CivmgpsgPiByZXBlbnQ7Civli5YgPiBlbmpvaW47CivnsYAgPiByZWNpdGU7CivnopogPiBzdWJ1cmI7Civoha0gPiBwYWxhdGU7Civps58gPiBiYXJiZWw7Civpm44gPiBvc3ByZXk7CivmroIgPiB0b1wtZGllOwor562aID4gd2lja2VyOwor55adID4gaGVybmlhOwor6aqAID4gYW5cLW9sZDsKK+iSlyA+IFwoaGVyYlwpOwor6JG4ID4gYWZyYWlkOwor6I+fID4gZG9kZGVyOwor6ZmJID4gZGVmaWxlOwor562yID4gYmFza2V0Owor55agID4gYVwtc29yZTsKK+eVmyA+IGJvcmRlcjsKK+aXsCA+IHN1bnNldDsKK+iKqiA+IGNlbGVyeTsKK+iwliA+IGZvcmdldDsKK+aViSA+IHBhY2lmeTsKK+iBjSA+IGVhcndheDsKK+mUhyA+IG9zbWl1bTsKK+eDgCA+IHNpbW1lcjsKK+WppyA+IG1vZGVzdDsKK+iPmCA+IGNlbGVyeTsKK+mSoSA+IGJhcml1bTsKK+idoyA+IG1heWZseTsKK+iatSA+IG95c3RlcjsKK+iluyA+IGFcLWxvb3A7Civpk5IgPiBlcmJpdW07Civpk4ggPiBjZXJpdW07CivmpLQgPiBwb3BsYXI7CivlrLIgPiBmcm9saWM7Civoi6EgPiBiYXJsZXk7CivoiIQgPiBhXC1zaG9lOwor6J2+ID4gbGl6YXJkOwor6JypID4gY2ljYWRhOwor6birID4gdGhydXNoOwor6ZSUID4gY3VyaXVtOwor6ZOfID4gaW5kaXVtOwor55yNID4gc3Vua2VuOwor54mWID4gd2luZG93Owor5qaHID4gY29mZmluOwor5qG3ID4gcmFmdGVyOwor5bmeID4gdHVyYmFuOwor5bi7ID4gdHVyYmFuOwor5ZyJID4gc3RhYmxlOwor5pGFID4gc3ByZWFkOwor6IuEID4gYmVuenlsOwor6ZmUID4gYVwtc3RlcDsKK+WIvyA+IHRvXC1jdXQ7CivpqrYgPiBjb2NjeXg7CivpsrsgPiBtdWxsZXQ7CivonqggPiBpbnNlY3Q7CivombwgPiBhXC1mbGVhOwor55iVID4gYXN0aG1hOwor6ZWYID4gdHJvd2VsOwor56OZID4gcm9sbGVyOwor6IOCID4gYXJzaW5lOwor6KeLID4gd2l6YXJkOwor6JOlID4gcG9saXNoOwor6I+UID4gdHVybmlwOwor5LuhID4gc3Ryb25nOwor6b6eID4gdHVydGxlOwor6b6dID4gYXV0dW1uOwor6b6NID4gZHJhZ29uOwor6b23ID4gbmFycm93Owor6b22ID4gcGFsYXRlOwor6b21ID4gdW5ldmVuOwor6b2qID4gbmFycm93Owor6byrID4gbWFybW90Owor6byqID4gd2Vhc2VsOwor6byUID4gYVwtZHJ1bTsKK+m8hSA+IHNwaWRlcjsKK+m7jCA+IHNjaG9vbDsKK+m7iSA+IHNjaG9vbDsKK+m7iCA+IHllbGxvdzsKK+m7gyA+IHllbGxvdzsKK+m6sCA+IGJhcmxleTsKK+m6hCA+IGNvYXJzZTsKK+m5qCA+IGFudGh1czsKK+m3miA+IGFudGh1czsKK+m3hyA+IGNoaWNrczsKK+m2vSA+IGFcLWhhd2s7CivptrggPiBzaXNraW47Civptq8gPiBvcmlvbGU7CivptqwgPiBvcmlvbGU7CivptqsgPiB0aHJ1c2g7CivptpogPiBvc3ByZXk7CivptoogPiBvcmlvbGU7CivptocgPiB0aHJ1c2g7CivptbsgPiBwaWdlb247CivptbIgPiBtYWdwaWU7CivptaAgPiB0YXJnZXQ7CivptZEgPiBjdWNrb287CivptYAgPiBob29wb2U7CivptL8gPiBwaWdlb247CivptKwgPiBvcmlvbGU7CivptKIgPiBcKGR1Y2tcKTsKK+m0gyA+IHNocmlrZTsKK+mxkiA+IGJhcmJlbDsKK+mxjiA+IFwoZmlzaFwpOwor6bGJID4gdHVydGxlOwor6bGGID4gcG91bHBlOwor6bC3ID4gbWlubm93Owor6bCVID4gc2hyaW1wOwor6a+UID4gbXVsbGV0Owor6a6tID4gc2FsbW9uOwor6a21ID4gc2hyaW1wOwor6amrID4gaG9yc2VzOwor6aikID4gbGl2ZWx5Owor6aiWID4gZ2FsbG9wOwor6aiDID4gc3R1cGlkOwor6aehID4gYWNjdXNlOwor6aeYID4gYW5cLW9sZDsKK+mnkyA+IGdhbGxvcDsKK+mngyA+IGdhbGxvcDsKK+mmvyA+IGFuXC1hc3M7CivppKQgPiBpbmNpdGU7CivppJIgPiBodW5ncnk7CivpoZwgPiBob25lc3Q7CivpoZIgPiBzb2xlbW47CivpoZEgPiB5ZWxsb3c7CivpoL0gPiBydWluZWQ7CivpoLkgPiBydWluZWQ7CivpoLAgPiBjaGVla3M7CivpoJ4gPiBicmlkZ2U7CivpoJIgPiBjb25mZXI7CivpoIkgPiBjaGVla3M7Civpn5wgPiBzaGVhdGg7Civpn4MgPiB0YXRhcnM7Civpnp4gPiBzaGVhdGg7CivpnpogPiBicmlkbGU7Civpna4gPiBicmlkbGU7Civpm4IgPiBcKGJpcmRcKTsKK+mauyA+IHNpbmdsZTsKK+mZrCA+IGNvcm5lcjsKK+mZnCA+IG5hcnJvdzsKK+mZmCA+IGRlZmlsZTsKK+mXniA+IGdsYW5jZTsKK+mXiSA+IGN1cnZlZDsKK+mWmCA+IHNsdWljZTsKK+mVoSA+IGRhZ2dlcjsKK+mTryA+IGNlc2l1bTsKK+mRvyA+IGNoaXNlbDsKK+mRsiA+IGluc2VydDsKK+mRniA+IHNvbGRlcjsKK+mRkSA+IG1pcnJvcjsKK+mRgCA+IGlvbml1bTsKK+mQsyA+IHJhZGl1bTsKK+mQriA+IHNpY2tsZTsKK+mQnSA+IGFcLXBpY2s7CivpkJQgPiBkYWdnZXI7Civpj50gPiB0cm93ZWw7Civpj5ggPiB0aW5rbGU7Civpj5cgPiBzdHJpa2U7CivpjrMgPiBuaWNrZWw7CivpjqYgPiBkaXN0aWw7CivpjqMgPiBwb2xpc2g7CivpjpogPiBoYW1tZXI7CivpjpIgPiB0b1wtaG9lOwor6Y6MID4gc2lja2xlOwor6Y6FID4gdG9cLXNhdzsKK+mNvCA+IG5lZWRsZTsKK+mNrCA+IHNob3ZlbDsKK+mNqyA+IHNob3ZlbDsKK+mNpSA+IHNpY2tsZTsKK+mNoCA+IHdlYXBvbjsKK+mMqSA+IHZlc3NlbDsKK+mMqCA+IGFuY2hvcjsKK+mLqCA+IG9zbWl1bTsKK+mLpiA+IGN1cml1bTsKK+mLmSA+IG1pc2ZpdDsKK+mLjCA+IGluZ290czsKK+mLhyA+IGJhcml1bTsKK+mLhSA+IHppbmN1bTsKK+mKtiA+IGNoaXNlbDsKK+mKsiA+IHNvbGRlcjsKK+mKqyA+IGNlc2l1bTsKK+mKpiA+IGluZGl1bTsKK+mJuiA+IGVyYml1bTsKK+mJpSA+IG5lZWRsZTsKK+mItyA+IGNvYmFsdDsKK+mIsCA+IGNlcml1bTsKK+mIlSA+IGJ1dHRvbjsKK+mIiSA+IHNvZGl1bTsKK+mHrCA+IHNvbGRlcjsKK+mHpiA+IGJ1dHRvbjsKK+mHkCA+IG1hbmFnZTsKK+mHgyA+IHN0cmFpbjsKK+mGniA+IGxpcXVvcjsKK+mGliA+IGxpcXVvcjsKK+mFviA+IHN0cmFpbjsKK+mFtCA+IGxlYXZlbjsKK+mEiyA+IGNvdW50eTsKK+mCjyA+IHBhdHJvbDsKK+mAsCA+IHdhbmRlcjsKK+mApSA+IHJldHVybjsKK+mAjiA+IHN0cm9uZzsKK+mAjCA+IHBsZWFzZTsKK+i/ryA+IGVzY2FwZTsKK+i/jSA+IGZhbHRlcjsKK+i/iyA+IHRyYXZlbDsKK+i+pyA+IG1hbmFnZTsKK+i+piA+IG1hbmFnZTsKK+i+oiA+IGJpdHRlcjsKK+i9pCA+IHB1bGxleTsKK+i9nCA+IGhlYXJzZTsKK+i9gCA+IGhlYXJzZTsKK+i8gCA+IGhlYXJzZTsKK+i7oyA+IHJ1bWJsZTsKK+i6pyA+IHNhbmRhbDsKK+i6iyA+IGFzY2VuZDsKK+i5uyA+IHN0cm9uZzsKK+i5nSA+IHNhbmRhbDsKK+i5kyA+IHN0cm9sbDsKK+i4oSA+IGN1cmxlZDsKK+i3pyA+IGNyb3VjaDsKK+i2qyA+IG5pbWJsZTsKK+i2qCA+IGhhc3RlbjsKK+i2lSA+IHB1cnN1ZTsKK+i0syA+IGJvcnJvdzsKK+izniA+IHJld2FyZDsKK+iyrSA+IG1hdHRlcjsKK+iyqiA+IGdyZWVkeTsKK+iynyA+IG1lbWJlcjsKK+iymyA+IGJhZGdlcjsKK+ixuyA+IHByaXNvbjsKK+iwvyA+IHZhbGxleTsKK+iumiA+IHByYWlzZTsKK+iugSA+IHB1bmlzaDsKK+itnyA+IGNsYW1vcjsKK+itjSA+IGFuc3dlcjsKK+ithiA+IHNjcmVhbTsKK+isqyA+IGNoYXJnZTsKK+isqCA+IHNjaGVtZTsKK+irvCA+IGZvcmdldDsKK+irtyA+IHJlY2l0ZTsKK+irtSA+IG11dHRlcjsKK+irkiA+IGV4Y3VzZTsKK+iqpiA+IHJlY2l0ZTsKK+iqpSA+IGluZm9ybTsKK+ipuyA+IG9yZGVyczsKK+iplyA+IHRvXC1zcHk7CivoqZQgPiBkZWNyZWU7CivoqJYgPiBmaW5pc2g7Civop7wgPiBidWNrbGU7Civop6kgPiBzdHJvbmc7Civop6cgPiBsb29zZW47Civop5UgPiBjb2Fyc2U7CivoprAgPiB0b1wtc3B5Owor6KahID4gd2l6YXJkOwor6KaKID4gaGFsdGVyOwor6KWuID4gY29sbGFyOwor6KWLID4gY29sbGFyOwor6KSmID4gc3R1cGlkOwor6KSPID4gc2xlZXZlOwor6KSOID4gc2xlZXZlOwor6KKaID4gZ3JlYXZlOwor6KCxID4gcG9pc29uOwor6KCpID4gYVwtdG9hZDsKK+igoyA+IG95c3RlcjsKK+igmSA+IG95c3RlcjsKK+iglCA+IG95c3RlcjsKK+igkSA+IGxpemFyZDsKK+igjiA+IHB5dGhvbjsKK+iggSA+IGxhcnZhZTsKK+iftyA+IG1hbnRpczsKK+ifrCA+IGNpY2FkYTsKK+ifnCA+IGluc2VjdDsKK+idpiA+IHNocmltcDsKK+iciyA+IG1hbnRpczsKK+ibryA+IHNocmltcDsKK+iboyA+IGJlZXRsZTsKK+ibjCA+IGNyaWNrZTsKK+iZqSA+IGZyaWdodDsKK+iZliA+IHRvXC1jcnk7CivomKQgPiBmbG93ZXI7CivomIYgPiBydXNoZXM7Civol5ggPiBtYWRkZXI7Civolr8gPiBmbG93ZXI7CivolpcgPiBnYXJkZW47CivolpEgPiBnaW5nZXI7CivolYYgPiBmaW5pc2g7CivolYIgPiBzZXNhbWU7CivolYEgPiBuZXR0bGU7CivolJkgPiBcKGhlcmJcKTsKK+iUlCA+IHJhZGlzaDsKK+iUgiA+IGJhc2tldDsKK+iUgCA+IHNjcmVlbjsKK+iTmiA+IG94YWxpYzsKK+iSjiA+IHBpbmFuZTsKK+iShyA+IGZpbmlzaDsKK+iRgSA+IGdpbmdlcjsKK+iQhSA+IHNwcmluZzsKK+iPhiA+IGp1bmdsZTsKK+iOtSA+IGRvZGRlcjsKK+iNiiA+IHRob3JuczsKK+iNgSA+IGNlbGVyeTsKK+iMpiA+IHRob3JuczsKK+iMoiA+IHNlZGdlczsKK+iLqiA+IGJyaWdodDsKK+iLoiA+IGJhcmxleTsKK+iKpCA+IGhvbGxvdzsKK+iJoiA+IGFcLW1hc3Q7CivoiKYgPiBydWRkZXI7CivoiIMgPiBhXC1zaG9lOwor6IeEID4gcGFsYXRlOwor6IapID4gZ3JlYXN5Owor6IajID4gdmFnaW5hOwor6IaVID4gaG9sbG93Owor6IWvID4gc3Ryb25nOwor6IWfID4gdmFnaW5hOwor6IWBID4gY2FsbHVzOwor6IS3ID4gdG9uZ3VlOwor6IS1ID4gdGhpZ2hzOwor6ISnID4gcmVkdWNlOwor6IO5ID4gY29va2VkOwor6IO3ID4gYnJlYXN0Owor6IKnID4gZW1icnlvOwor6IKQID4gYXJtcGl0Owor6IG5ID4gZWFyd2F4Owor6ICkID4gcGxvdWdoOwor5761ID4gc3Bpcml0Owor576IID4gaGFsdGVyOwor572rID4gaGluZGVyOwor572lID4gaW1wZXRlOwor572jID4gaGluZGVyOwor57qpID4gY290dG9uOwor57qcID4gaGF3c2VyOwor57qUID4gdGFsZW50Owor57qKID4gY290dG9uOwor57mtID4gY29jb29uOwor57mrID4gYXR0YWNoOwor57moID4gYVwta25vdDsKK+e5iyA+IGF0dGFjaDsKK+e4tyA+IHRocmVhZDsKK+e4oyA+IGNvdW50eTsKK+e4oSA+IG1hdHRlcjsKK+e4hiA+IGFcLXJvcGU7Civnt6ogPiBhXC1yb3BlOwor57aPID4gc29vdGhlOwor57aFID4gdGhyZWFkOwor57W/ID4gdXJnZW50Owor57WaID4gYVwtcm9wZTsKK+e0siA+IGJyaWRsZTsKK+e0qSA+IHRvXC1zZXc7CivntJ8gPiBhXC1zYXNoOwor57SYID4gc3RyaW5nOwor57STID4gbG9vc2VuOwor57SDID4gYVwtY29yZDsKK+ezqCA+IHN0YXJjaDsKK+ezoSA+IHN0YXJjaDsKK+exsiA+IGFwcGVhbDsKK+exmiA+IGJhbWJvbzsKK+exgyA+IGJhc2tldDsKK+ewnCA+IGJhbWJvbzsKK+ewiSA+IGRlcHV0eTsKK+evsyA+IHdpY2tlcjsKK+evpSA+IGJ1bGdsZTsKK+evnCA+IGJhbWJvbzsKK+eumSA+IHF1aXZlcjsKK+essiA+IGJhc2tldDsKK+ernCA+IGRyYWdvbjsKK+eriSA+IGFcLWhvbGU7CivnqqogPiBob2xsb3c7CivnqpQgPiBjb3JuZXI7CivnqakgPiBzdGFibGU7CivnqaggPiBydWluZWQ7CivnqYwgPiByZXZpdmU7CivnqYggPiBtaWxsZXQ7CivnqJwgPiBjb3JuZXI7Civnp6AgPiBtaWxsZXQ7CivnpqYgPiBkZWZlbmQ7CivnpY8gPiBzaHJpbmU7CivnpKsgPiBncmF2ZWw7Civno6MgPiBncml0dHk7CivnorwgPiBudW1iZXI7Civnob4gPiB3ZWlnaHQ7CivnoY0gPiBzdHJpa2U7Civnn7QgPiBhbmNob3I7Civnn4cgPiBzdHVwaWQ7CivnnrcgPiB0b1wtc3B5Owor552qID4gc3B5XC1vbjsKK+edhiA+IGJyaWdodDsKK+ecviA+IG1hc3NlczsKK+ebqSA+IGNhbGx1czsKK+eapSA+IGJyaWdodDsKK+eaoSA+IGJyaWdodDsKK+eaniA+IGJyaWdodDsKK+eagCA+IGtlcm5lbDsKK+eZpCA+IHBpbXBsZTsKK+eZmCA+IGFcLXNvcmU7CivnmI0gPiB1bGNlcnM7Civnl7sgPiBzdWZmZXI7Civnl5ogPiBhc3RobWE7CivnlokgPiByZXBlYXQ7CivnloMgPiBoYW1sZXQ7CivnloIgPiByZXBlYXQ7Civnlb0gPiBncm91bmQ7Civnla8gPiBydXN0aWM7CivnlZ8gPiBwbG91Z2g7CivnkL8gPiBicmlnaHQ7CivnkLogPiBlbmFtZWw7Civnj5QgPiBcKGphZGVcKTsKK+eOkyA+IHBlYXJseTsKK+eNtyA+IGZpZXJjZTsKK+eNiSA+IGp1bmdsZTsKK+eMuyA+IG1vbmtleTsKK+eMuiA+IGphY2thbDsKK+eMkyA+IG1vbmtleTsKK+eLpSA+IGZvbGxvdzsKK+eKuiA+IGFuaW1hbDsKK+eJlSA+IHdpbmRvdzsKK+eJkyA+IHRhYmxldDsKK+eJkCA+IHNsdWljZTsKK+eIpSA+IHNpbW1lcjsKK+eImiA+IGJyaWdodDsKK+eHtCA+IHJhZ291dDsKK+eHoSA+IGJyaWdodDsKK+eHnCA+IHNpbW1lcjsKK+eHiyA+IHNjb3JjaDsKK+eHgSA+IGJyaWdodDsKK+eGsiA+IGJyaWdodDsKK+eGiCA+IGJyaWdodDsKK+eFlSA+IGJyaWdodDsKK+eFgyA+IHJlbW92ZTsKK+eFgSA+IGhlYXJ0aDsKK+eEuyA+IGJyZWF0aDsKK+eEtCA+IGJyaWdodDsKK+eEoCA+IHRlbXBlcjsKK+eDuiA+IGJyaWdodDsKK+eDsSA+IGJyaWdodDsKK+eCgSA+IGJyZWF0aDsKK+eAkiA+IGNvYXJzZTsKK+eAjCA+IHBsZW50eTsKK+a/tSA+IGFcLWJhbms7Civmv6wgPiBkcmVkZ2U7CivmvrwgPiBibGVhY2g7CivmvaggPiBnYXRoZXI7CivmvYAgPiBnYXRoZXI7CivmvKYgPiBzYWxpdmE7CivmuKggPiBhXC1jb3ZlOwor5relID4gc3RyYWluOwor5refID4gdHVyYmlkOwor5rSfID4gc25pdmVsOwor5rOtID4gYVwtcmFmdDsKK+axmSA+IGZpbHRoeTsKK+awvyA+IHNwcmluZzsKK+awqyA+IGFtb25pYTsKK+auvCA+IGNhc2luZzsKK+auqyA+IHV0bW9zdDsKK+asuyA+IHN1ZGRlbjsKK+askSA+IGdhdGhlcjsKK+arrCA+IGNvZmZpbjsKK+arniA+IGNpdHJ1czsKK+arnCA+IHF1aXZlcjsKK+apsCA+IGFcLXNwYXI7CivmqasgPiBhY3Jvc3M7CivmqaQgPiBzdGFtZW47CivmqZwgPiBhXC1wb3N0Owor5qmVID4gYVwtcHJvcDsKK+aovyA+IGNvZmZpbjsKK+aouCA+IHNpbXBsZTsKK+aosiA+IGp1anViZTsKK+aokSA+IGJyaWRnZTsKK+anpSA+IGNvZmZpbjsKK+amsiA+IHBpbGxhcjsKK+amsSA+IHJhZnRlcjsKK+ampSA+IHNjcmVlbjsKK+amhSA+IHBpbGxhcjsKK+alryA+IHNoaWVsZDsKK+alrCA+IHRhYmxldDsKK+aloiA+IHRpbmRlcjsKK+almyA+IGNvYXJzZTsKK+aliiA+IHdpbGxvdzsKK+akpyA+IGd1dHRlcjsKK+akkyA+IHN0cmlrZTsKK+ajnCA+IGJyYW5jaDsKK+ajhSA+IGhhbmRsZTsKK+ajgyA+IGFcLXBlYXI7CivmobIgPiBxdWluY2U7Civmn7IgPiBoYW5kbGU7CivmnbQgPiBzaG92ZWw7CivmnYcgPiBsb3F1YXQ7CivmnJkgPiBicmlnaHQ7Civmm6EgPiByZXBlYXQ7Civmm40gPiBicmlnaHQ7Civmm4UgPiBicmlnaHQ7Civmm4QgPiBicmlnaHQ7Civmm4AgPiBzdG9ybXk7CivmmrsgPiBicmlnaHQ7CivmmrggPiBicmlnaHQ7CivmmrIgPiBicmlnaHQ7CivmmosgPiBzdHJvbmc7CivmmZwgPiBpbnNlY3Q7CivmmYQgPiBicmlnaHQ7CivmmLogPiBicmlnaHQ7CivmmJ4gPiBicmlnaHQ7CivmmJEgPiBicmlnaHQ7Civml7sgPiBoZWF2ZW47Civml50gPiBiYW5uZXI7CivmlbkgPiB0b1wtc2V3Owor5pWhID4gcmVidWtlOwor5pWDID4gc3Ryb25nOwor5pWCID4gZGVkdWN0Owor5pSWID4gb3Bwb3NlOwor5pSEID4gc3ByZWFkOwor5pO9ID4gdGlja2xlOwor5pO0ID4gZXhwYW5kOwor5pOWID4gc2NyYXBlOwor5pOTID4gdG9cLXJ1YjsKK+aTiiA+IHN0cmlrZTsKK+aThyA+IHNlbGVjdDsKK+aSpiA+IHJpcFwtdXA7CivmkoogPiBmaWVyY2U7CivmkL8gPiB0b1wtaHVnOwor5o+3ID4gaW5zZXJ0Owor5o+uID4gZGlyZWN0Owor5o+XID4gc3RyaWtlOwor5o+AID4gY2hvb3NlOwor5o6kID4gcXVpdmVyOwor5o6UID4gc3R1cmR5Owor5o29ID4gY2x1dGNoOwor5o28ID4gdG9cLXJ1YjsKK+aNkyA+IHN0cml2ZTsKK+aNgyA+IGdhdGhlcjsKK+aLoSA+IGV4cGFuZDsKK+aKniA+IHNlbGVjdDsKK+aJkCA+IGRpdmluZTsKK+aJhiA+IHNjcmVlbjsKK+aInSA+IHBpcmF0ZTsKK+aIhyA+IHN0dXBpZDsKK+aHviA+IGFmcmFpZDsKK+aHuiA+IHJlZ3JldDsKK+aHtCA+IHJlZ3JldDsKK+aHsiA+IHB1bmlzaDsKK+aHqCA+IGZlZWJsZTsKK+aGpiA+IHJlZ3JldDsKK+aEvSA+IGdhbWJsZTsKK+aErCA+IGFjY3VzZTsKK+aDsiA+IGRldmlzZTsKK+aDqiA+IGV0aGljczsKK+aDjiA+IGluanVyZTsKK+aCsyA+IGV0aGljczsKK+aCpyA+IHNtb290aDsKK+aCniA+IGltcGVkZTsKK+aCiyA+IHN0aW5neTsKK+aBoSA+IHN0aW5neTsKK+aBnyA+IHNjYXJlZDsKK+W/sCA+IHN1ZmZlcjsKK+W+oCA+IGluZHVjZTsKK+W9tCA+IGJyaWRnZTsKK+W8oyA+IG1pZGRsZTsKK+W7vSA+IHJldHVybjsKK+W7nyA+IHRlbXBsZTsKK+W7kCA+IHN0YWJsZTsKK+W7jyA+IHN0YWJsZTsKK+W7hiA+IGFcLXJvb207Civlu4QgPiBzdGFibGU7Civlu4EgPiB0b2lsZXQ7CivluZggPiB0dXJiYW47Civlt6QgPiBhXC1tYW5lOwor5beYID4gc3VtbWl0Owor5ba8ID4gaXNsYW5kOwor5ba0ID4gaXNsYW5kOwor5baTID4gYm9zaGFuOwor5baMID4gaXNsYW5kOwor5baLID4gaXNsYW5kOwor5bW+ID4gdW5ldmVuOwor5bS/ID4gY2xpZmZzOwor5bSfID4gY2xpZmZzOwor5bKoID4gdW5ldmVuOwor5bKAID4gZ29cLW91dDsKK+WxriA+IHNwcm91dDsKK+WxnCA+IGRyYXdlcjsKK+WwhSA+IHN1YmR1ZTsKK+WwgCA+IGNhbm5vdDsKK+WvnCA+IHJlcG9zZTsKK+WvlSA+IHJlcG9zZTsKK+WvjiA+IGRyb3dzeTsKK+WupyA+IGNvcm5lcjsKK+WtviA+IGFcLWJhYnk7CivlrYwgPiBsb3ZlbHk7CivlrL8gPiBsb3ZlbHk7CivlrKQgPiBtb3RoZXI7CivlrIMgPiBzaXN0ZXI7Civlq6ogPiBoYW5rZXI7Civlq5AgPiBmcm9saWM7Civlqr0gPiBtb3RoZXI7CivlqpYgPiBiZWF1dHk7CivlqbwgPiBwZXJzb247CivlqaQgPiBsb3ZlbHk7CivlqKwgPiBsb3ZlbHk7CivlqJIgPiBtYXRyb247Civlp4EgPiBiZWF1dHk7CivlprggPiBwZXJzb247CivlpKwgPiBwYXJ0ZWQ7CivlpKAgPiBlbm91Z2g7CivlpIYgPiByZXNpc3Q7Civlo78gPiBnb2JsZXQ7CivloqAgPiBzbW9vdGg7CivloKcgPiBhZGpvaW47CivloKYgPiBzdGFpcnM7CivloIkgPiBncm91bmQ7CivlnJ4gPiBlbnRpcmU7CivlnJ0gPiBlbnRpcmU7CivlnI4gPiBjaXJjbGU7CivlnIAgPiBuYXRpb247Civlm5ggPiByZXR1cm47Civlmr8gPiBhXC1sdW1wOwor5ZqoID4gdGhyb2F0Owor5ZqUID4gc25lZXplOwor5ZqDID4gZ29iYmxlOwor5ZqAID4gZW5qb2luOwor5ZmaID4gZmF0aG9tOwor5ZmTID4gZXhoYWxlOwor5ZmPID4gaW5oYWxlOwor5Ze/ID4gZ29iYmxlOwor5ZaGID4gYVwtc2FnZTsKK+WViSA+IHN0dXBpZDsKK+WUqyA+IHRvXC1odW07CivllIggPiB0b1wtc29iOwor5ZOkID4gamFyZ29uOwor5ZOLID4gcGx1cmFsOwor5ZKIID4gb3Bwb3NlOwor5ZGuID4gdG9cLXNpdDsKK+WRjyA+IGdhbGxvbjsKK+WPoSA+IGFzdHV0ZTsKK+WPkyA+IGFmZmFpcjsKK+WOjiA+IHNldHRsZTsKK+WNhCA+IHR3ZW50eTsKK+WMgyA+IGJlZ2dhcjsKK+WLtyA+IHVyZ2VudDsKK+WLtSA+IHN0cml2ZTsKK+WLlyA+IGVuam9pbjsKK+WLkSA+IHJld2FyZDsKK+WLjSA+IHN0cm9uZzsKK+WLhCA+IGFjdGl2ZTsKK+WLgSA+IHN0cm9uZzsKK+WKpCA+IHN0cm9uZzsKK+WKjCA+IHRvXC1jdXQ7CivlioYgPiBzaWNrbGU7CivliY4gPiB0ZW1wbGU7CivliYsgPiBzdWJkdWU7CivliKogPiB0b1wtY3V0Owor5YeeID4gYnJpZ2h0Owor5YeTID4gc2hpdmVyOwor5YaRID4gaGVsbWV0Owor5YaEID4gdGVuZGVyOwor5YWyID4gaGVhdmVuOwor5YWnID4gaW5zaWRlOwor5YS4ID4gYmFuZGl0Owor5YS3ID4gc3BvdXNlOwor5YOxID4gZW1wbG95Owor5YOsID4gY2xldmVyOwor5YOjID4gYXNzdW1lOwor5YKvID4gdXJnZW50Owor5YKuID4gZmluaXNoOwor5YKOID4gdG9wcGxlOwor5YGqID4gY29tcGVsOwor5YGpID4gZm9sbG93Owor5YGoID4gdW5ldmVuOwor5YGWID4gcmlwXC11cDsKK+WAhiA+IGNsZXZlcjsKK+WAhSA+IGRlcHV0eTsKK+WAgyA+IGRhbWFnZTsKK+S/tSA+IGRpdmlkZTsKK+S+tyA+IG5hcnJvdzsKK+S9iCA+IHNwcmVhZDsKK+S8viA+IG1pZ2h0eTsKK+S8nCA+IGRlcHV0eTsKK+S7miA+IHRvXC1mbHk7CivkuoogPiBhZmZhaXI7CivkuoQgPiBncmVlZHk7CivkuZogPiBoaWRkZW47CivkuYIgPiBnb3Zlcm47CivkuJcgPiB0aGlydHk7Civktq4gPiBjbGV2ZXI7CivktoEgPiBub2lzZXM7CivktacgPiB0b1wtZHllOwor5LWZID4gc3RpY2t5Owor5LWQID4geWVsbG93Owor5LWPID4geWVsbG93Owor5LWNID4geWVsbG93Owor5LWLID4geWVsbG93Owor5LWKID4geWVsbG93Owor5LSlID4gYVwtc3RhZzsKK+SzviA+IGFuXC1vd2w7Civks48gPiBjdWNrb287Civks4cgPiBwYXJyb3Q7CivksrkgPiBvc3Blcnk7CivksqcgPiBjdWNrb287CivksowgPiBhXC1maXNoOwor5LGVID4gbGFicnVzOwor5LGRID4gYVwtZmlzaDsKK+SxjyA+IGFcLWZpc2g7CivksYMgPiBhXC1maXNoOwor5LGCID4gYVwtZmlzaDsKK+SwtyA+IGFcLWZpc2g7CivksKMgPiBhblwtZWxmOwor5K+rID4gYnJpZ2h0Owor5K+oID4gdG9cLXJhcDsKK+SvnSA+IG1hcnJvdzsKK+SvnCA+IG1hcnJvdzsKK+SvgyA+IHNhZGRsZTsKK+SvgSA+IGFcLW11bGU7CivkraogPiBncmFpbnM7CivkraUgPiBhXC1iYWl0Owor5K2dID4gdG9cLWVhdDsKK+StmiA+IHRvXC1lYXQ7CivkrZIgPiBicmVhdGg7CivkrYwgPiBjb25nZWU7CivkrYggPiBjb25nZWU7CivkrLggPiBhXC1tZWFsOwor5KyRID4gYVwtZ2FsZTsKK+SskCA+IGJyZWV6ZTsKK+SsiiA+IGFcLWdhbGU7CivkrIggPiBicmVlemU7CivkrIcgPiBicmVlemU7CivkrIUgPiBhXC1nYWxlOwor5KyEID4gYnJlZXplOwor5KyCID4gYnJlZXplOwor5Ku+ID4gYnJlZXplOwor5Ku9ID4gYnJlZXplOwor5Ku8ID4gYnJlZXplOwor5KusID4gdG9cLWJvdzsKK+SquCA+IHN0cm9uZzsKK+SqpCA+IGdhcmxpYzsKK+SpryA+IHVyZ2VudDsKK+SprSA+IGhhbHRlcjsKK+SoviA+IGhpZGRlbjsKK+SouiA+IGNsb3VkeTsKK+SouCA+IGNsb3VkeTsKK+SoryA+IGNsb3VkeTsKK+SonyA+IHB1ZGRsZTsKK+SoiSA+IHBhcnJvdDsKK+SohyA+IGFcLXBhaXI7Civkp7QgPiBhXC1iaXJkOwor5KezID4gZmVtYWxlOwor5KelID4gYm9yZGVyOwor5KebID4gYmVzaWRlOwor5KeRID4gYVwtZGlrZTsKK+SlqiA+IHRvXC1jdXA7CivkpaggPiBhXC1maWxlOwor5KWgID4gbmVlZGxlOwor5KWNID4gYVwtd2hpcDsKK+SjpiA+IHRvXC1jdXQ7Civko5ggPiBhXC1oYWxsOwor5KOIID4gYVwtbGFuZTsKK+SivSA+IGFcLWxhbmU7CivkoLAgPiBjb2lsZWQ7CivkoKQgPiB0b2RkbGU7CivkoJkgPiB1cmdlbnQ7CivkoI4gPiBuYXJyb3c7CivkoIcgPiBzdHJvbmc7Civkn7EgPiB0cmFjZXM7Civkn58gPiB1cmdlbnQ7Civkn5IgPiBjb2lsZWQ7CivknZwgPiBhXC1saW9uOwor5J2EID4gY293cGVhOwor5JyeID4gYVwtZG9zZTsKK+SbpyA+IHJpZGRsZTsKK+SbpSA+IHNwZWVjaDsKK+SboyA+IHNwZWVjaDsKK+SbnCA+IHRvXC1hc2s7Civkm5EgPiBzaWxlbnQ7Civkm4ggPiB0b1wtdm93Owor5Jq6ID4gYmFsbGFkOwor5JqIID4gdG9cLXNlZTsKK+SahiA+IHRvXC1zZWU7CivkmoIgPiB0b1wtc2VlOwor5JqBID4gdG9cLXNlZTsKK+SZvyA+IHRvXC1zZWU7Civkmb0gPiB0b1wtc2VlOwor5Jm8ID4gdG9cLXNlZTsKK+SZtSA+IHJ1c3RpYzsKK+SZoSA+IGFcLWtub3Q7CivkmYwgPiBhXC1rbm90Owor5JiwID4gYVwtaG9vZDsKK+SYrCA+IGFybW91cjsKK+SYqSA+IGNvbGxhcjsKK+SYjCA+IGdhZGZseTsKK+SYiCA+IG95c3RlcjsKK+SXqyA+IGFcLWZyb2c7CivklrkgPiB3ZWV2aWw7Civklq4gPiBsYXJ2YWU7CivklqsgPiBveXN0ZXI7CivklqggPiBtYW50aXM7CivklpcgPiBzdHJvbmc7CivkloEgPiBudW1iZXI7CivklawgPiBnaW5nZXI7CivklaggPiByYXR0YW47CivklK8gPiBzYWx0ZWQ7CivklKIgPiBjYXRoYXk7CivklI8gPiBhXC1sdXNoOwor5JOnID4gdXJnZW50Owor5JOmID4gYVwtcnVsZTsKK+SThSA+IGNlbGVyeTsKK+SThCA+IGdyYXNzeTsKK+SSuSA+IGdyYXNzeTsKK+SSqyA+IGdyYXNzeTsKK+SSiSA+IGFcLWxvbmc7CivkkoIgPiBhblwtb2FyOwor5JG6ID4gYVwtc2FpbDsKK+SRtCA+IGFcLWJvYXQ7CivkkbEgPiBhXC1ib2F0Owor5JGvID4gYVwtYm9hdDsKK+SRqCA+IHJ1ZGRlcjsKK+SRpiA+IGFcLWJvYXQ7CivkkaQgPiBhXC1ib2F0Owor5JGQID4gYnJpZ2h0Owor5JCmID4gc2xlZXB5Owor5JClID4gc3Rpbmt5Owor5I+qID4gdGVuZG9uOwor5I+jID4gbWFnZ290Owor5I+CID4gY2xldmVyOwor5I6xID4gYVwtZHJhZzsKK+SOrCA+IGFcLWRyYWc7CivkjpkgPiBmbHlpbmc7CivkjpcgPiBmbHlpbmc7CivkjpMgPiBmbHlpbmc7CivkjoogPiBmbHlpbmc7CivkjoggPiBmbHlpbmc7CivkjoYgPiBmbHlpbmc7CivkjoUgPiBmbHlpbmc7CivkjoAgPiBmbHlpbmc7Civkjb4gPiBmbHlpbmc7CivkjawgPiB0b1wtdXNlOwor5I2LID4gYm90dGxlOwor5I2IID4gYm90dGxlOwor5I2DID4gYVwtdmFzZTsKK+SMtCA+IHVuZXZlbjsKK+SMsSA+IHVuZXZlbjsKK+SMnCA+IHRvXC1zZXc7CivkjJUgPiB0b1wtdGllOwor5IuyID4gYVwtcm9wZTsKK+SLkSA+IHRvXC10aWU7Civki5AgPiBmYWJyaWM7Civki4wgPiBzdHJvbmc7CivkiqcgPiBhXC1mYXJ0Owor5IqlID4gY29uZ2VlOwor5IqbID4gc2hyZWRzOwor5IqOID4gcG93ZGVyOwor5IqGID4gY29va2VkOwor5Im2ID4gYVwtc2FpbDsKK+SIuiA+IGJhbWJvbzsKK+SItCA+IGFcLWNhZ2U7CivkiI4gPiBhXC1sZWFmOwor5IelID4gbmFycm93Owor5IeiID4gYmFtYm9vOwor5IefID4gdGVuZG9uOwor5IeaID4gdG9cLXRhcDsKK+SHgSA+IGFcLWNhdmU7Civkhr0gPiBhXC1ob2xlOwor5Ia8ID4gYVwtbmVzdDsKK+SGuyA+IGFcLWhvbGU7CivkhrcgPiBhXC1ob2xlOwor5IawID4gYVwtY2F2ZTsKK+SGriA+IHRvXC1kaXA7CivkhqsgPiB3aW5kb3c7CivkhqcgPiBhXC1jYXZlOwor5IahID4gYVwtY2F2ZTsKK+SGnSA+IGFcLWNhdmU7CivkhpkgPiBhXC1raWxuOwor5IaTID4gYVwtaG9sZTsKK+SFtiA+IHRvXC1ob2U7CivkhbQgPiBncmFpbnM7CivkhaYgPiBmZWVibGU7CivkhYcgPiBncmFpbnM7CivkhLkgPiBhXC15ZWFyOwor5ISyID4gaW5zaWRlOwor5IStID4gYVwteWVhcjsKK+SEmCA+IGFcLXJpdGU7CivkhI4gPiBwcmV0dHk7Civkg6UgPiBzdG9uZXM7Civkg5YgPiBhXC1iYW5rOwor5IOKID4gdG9cLXJ1YjsKK+SCtyA+IGJyb2tlbjsKK+SCtCA+IHRvXC1ydWI7CivkgrMgPiBncmF2ZWw7Civkgp0gPiB0b1wtcmFwOwor5IKYID4gcGViYmxlOwor5IG/ID4gc2xlZXB5Owor5IGmID4gdG9cLXNlZTsKK+SBliA+IHRvXC1zZWU7CivkgJIgPiBnbG9vbXk7CivkgI0gPiB2ZXNzZWw7CivkgIUgPiB2ZXNzZWw7Civjv74gPiB2ZXNzZWw7Civjv7wgPiBhXC1ib3dsOwor47+7ID4gYVwtdHJheTsKK+O/rSA+IGNyYWNrczsKK+O/pyA+IGZpZWxkczsKK+O/lCA+IGFcLXdhcnQ7CivjvbcgPiBkcm9wc3k7CivjvbUgPiBzb2xlbW47CivjvL4gPiBicmlja3M7CivjvKUgPiBib3R0bGU7CivjvJ0gPiBhXC1ib3dsOwor47yEID4gcGVhcmxzOwor47mMID4gY2F0dGxlOwor47i/ID4gYVwtY2FsZjsKK+O4mSA+IGZhdGhlcjsKK+O3sCA+IGZsYW1lczsKK+O3qSA+IGJyaWdodDsKK+O3iyA+IGVtYmVyczsKK+O3giA+IGJyaWdodDsKK+O2pCA+IHRvXC1mcnk7CivjtoggPiBjcmVla3M7CivjtaogPiBzYWxpdmE7CivjtZ0gPiBtb3Zpbmc7CivjtJ4gPiBmbHVlbnQ7CivjtIYgPiB0b1wtZGlwOwor47OMID4gbWFyc2h5Owor47G1ID4gdG9cLWRpZTsKK+OxsyA+IGxvbmVseTsKK+OxsSA+IHVuZXZlbjsKK+OxoyA+IHVuZXZlbjsKK+OxniA+IGRhbmdlcjsKK+OxmSA+IHJvdHRlbjsKK+OxjSA+IHRvXC1vd2U7CivjsYIgPiBodW5ncnk7CivjsYEgPiB0b1wtYXNrOwor47CNID4gYVwtY2FnZTsKK+OwgyA+IGFcLXRyZWU7Civjr74gPiBhXC10cmVlOwor46+WID4gYVwtdHJlZTsKK+OvjyA+IGdyYWluczsKK+OvjiA+IHN0dXBpZDsKK+OvjSA+IGFuXC1vYXI7Civjr4kgPiBhXC10cmVlOwor46+GID4gYVwtdHJlZTsKK+OuvyA+IGFcLXRyZWU7CivjrrkgPiBhXC10cmVlOwor4663ID4gYVwtdHJlZTsKK+OutiA+IGFcLXRyZWU7CivjrrMgPiBhXC10cmVlOwor466pID4gYVwtdHJlZTsKK+OupyA+IGFcLXRyZWU7CivjrpggPiBhXC10cmVlOwor466WID4gdG9cLWxheTsKK+OujCA+IGNvdHRvbjsKK+OtsSA+IGFcLWNhc2U7CivjrYsgPiBhXC1jbHViOwor46yvID4gc3Vuc2V0Owor46yuID4gZ2VudGxlOwor46yNID4gZmllcmNlOwor46u6ID4gYnlnb25lOwor46u4ID4gc3Vuc2V0Owor46u3ID4gYmVoaW5kOwor46uhID4gd2ludGVyOwor46uFID4gYVwtZmxhZzsKK+OquSA+IHRvXC1yb2I7CivjqoYgPiBoaWRkZW47CivjqoQgPiBicm9rZW47Civjqb4gPiB1bmV2ZW47CivjqbIgPiBhXC1maXN0Owor46i+ID4gYVwtdHlwZTsKK+OouyA+IHRvXC1jdXQ7CivjqLggPiB0b1wtaGl0Owor46ipID4gdG9cLXdpbjsKK+OopSA+IHRvXC1oaXQ7CivvqJwgPiBwYWNpZnk7CivvqJkgPiBzcGlyaXQ7CivvqJcgPiBwcm9maXQ7CivvqJUgPiBicmlnaHQ7CivjqI4gPiB0b1wtZHllOwor46iFID4gaW5zaWRlOwor76iCID4gZXhwYW5kOwor76iBID4gZGVncmVlOwor46e4ID4gdG9cLWhpdDsKK++ntCA+IGZvcmVzdDsKK+OnsyA+IHRvXC1taXg7Civvp60gPiBzdGluZ3k7Civvp6ggPiBpbnNpZGU7Civvp6cgPiBpbnNpZGU7Civvp6YgPiBzb3Jyb3c7Civjp6cgPiBhXC1jb21iOwor76ekID4gcmVhc29uOwor76egID4gY2hhbmdlOwor76eZID4gc2hpdmVyOwor76eOID4gc3VsZnVyOwor46eJID4gdG9cLXJ1YjsKK++nhCA+IGRyYWdvbjsKK++mvCA+IHNoYW50eTsKK++msyA+IHNwaXJpdDsKK++msCA+IGxpc3RlbjsKK++mqiA+IHJlcG9zZTsKK++mqSA+IHByaXNvbjsKK++mniA+IHRocm9hdDsKK++mnCA+IGFcLWxpbmU7CivjppQgPiBzaWxrbHk7CivjposgPiBhYnN1cmQ7CivjpoogPiBsYXZpc2g7CivjpoUgPiB1bmVhc3k7CivjpoEgPiB0b1wtc29iOwor76W/ID4gc3RyaXZlOwor76W9ID4gZXhjdXNlOwor76W6ID4gYnJpZGdlOwor76W3ID4gYnJpZ2h0Owor46WtID4gbHV4dXJ5Owor46WrID4gaG9uZXN0Owor76WpID4gbnVtYmVyOwor76WmID4gcmV0dXJuOwor76WfID4gcmVwb3NlOwor46WfID4gZW5taXR5Owor76WWID4gY29ybmVyOwor76WRID4gbmFycm93Owor76WQID4gdGhyZWFkOwor46WQID4gaGF0cmVkOwor46WIID4gYWZyYWlkOwor76WGID4gcHJpc29uOwor76WBID4gZGViYXRlOwor46S7ID4gc3R1cGlkOwor46S5ID4gaGF0cmVkOwor46S4ID4gdW5lYXN5Owor76S1ID4gcnVzaGVzOwor46SoID4gc2NhcmVkOwor76SkID4gcmFnZ2VkOwor76SfID4gb3JjaGlkOwor76SeID4gcm90dGVuOwor76STID4gcGF0cm9sOwor46STID4gc3R1cGlkOwor76SFID4gc3RyaW5nOwor46OtID4gbnVtYmVyOwor46OYID4gc3Bhc21zOwor46K9ID4gYVwtYmFpdDsKK+OiuiA+IHN0cmluZzsKK+OhriA+IGRhbmdlcjsKK+OhoyA+IGRyYWdvbjsKK+OhmiA+IGFybW91cjsKK+OhgSA+IGFcLXJvYmU7CivjoLYgPiBhXC1zYWlsOwor46CyID4gcmlwcGVkOwor46CAID4gaXNsYW5kOwor45+3ID4gYVwtd2FydDsKK+OfqyA+IHNwcmluZzsKK+OfpSA+IHVuZXZlbjsKK+OfnyA+IGFcLWxhbmU7CivjnrggPiBhXC15ZWFyOwor456HID4gdWxjZXJzOwor456CID4gdWxjZXJzOwor4525ID4gYVwtaGFyZTsKK+OdtiA+IHRvXC1nZXQ7CivjnbUgPiB0b1wtZ2V0Owor452nID4gc3RhYmxlOwor452CID4gbG9jdXN0Owor452BID4gbG9uZWx5Owor45yrID4gcHJldHR5Owor45ylID4gY3JhZnR5Owor45u5ID4gcHJldHR5Owor45q8ID4gYVwtZ2lybDsKK+OauyA+IHNvZG9teTsKK+OauSA+IHByZXR0eTsKK+OaniA+IHRlcnJvcjsKK+OakCA+IGFcLWNhc2U7CivjmowgPiBhXC1iYW5kOwor45m5ID4gYVwtZGFtcDsKK+OZtiA+IGFcLWhhbGw7CivjmawgPiBhXC1iYW5rOwor45mdID4gYVwtZGlrZTsKK+OZlSA+IGFcLWx1bXA7CivjmLQgPiB0b1wtc2l0Owor45iyID4gYVwtY292ZTsKK+OXtyA+IHRvXC1lYXQ7Civjl7UgPiBicmVhdGg7Civjl5YgPiB0b1wtZWF0Owor45aSID4gdG9cLWNyeTsKK+OWgSA+IHN0aW5neTsKK+OVoCA+IGFcLXBhaXI7CivjlZQgPiBhXC1oYWxsOwor45WCID4gdG9cLWh1bTsKK+OUuiA+IGFuXC1hZ2U7CivjlLggPiBhXC10cmF5Owor45ScID4gc3VkZGVuOwor45SXID4gc3Ryb25nOwor45SSID4gdG9cLWN1dDsKK+OUkCA+IHRvXC1jdXQ7CivjlIogPiB0b1wtY3V0Owor45SJID4gdG9cLWRpZzsKK+OUhiA+IHRvXC1jdXQ7CivjlIUgPiB0b1wtY3V0Owor45O1ID4gc3dvcmRzOwor45OxID4gdG9cLWN1dDsKK+OTqiA+IGJyaWdodDsKK+OToCA+IGFcLWZsYXc7Civjk4UgPiBmcm96ZW47CivjkrYgPiBwdWJsaWM7CivjkrUgPiBtYW5uZXI7CivjkrIgPiB3ZWFsdGg7CivjkqcgPiBhXC1wYWlyOwor45KgID4gbmFycm93Owor45G7ID4gc3Ryb25nOwor45G3ID4gbWFubmVyOwor45GzID4gY2xldmVyOwor45GjID4gc3R1cGlkOwor45GHID4gY2xldmVyOwor45C5ID4gc3Ryb25nOwor55+zID4gc3RvbmU7Civnn60gPiBzaG9ydDsKK+W/qyA+IHJhcGlkOwor5ZyoID4gYmVcLWF0Owor5LuWID4gb3RoZXI7Civnn6IgPiBhcnJvdzsKK+WIsCA+IGdvXC10bzsKK+ivtCA+IHNwZWFrOwor6L+FID4gcXVpY2s7CivlnLAgPiBlYXJ0aDsKK+W/gyA+IGhlYXJ0Owor5LiLID4gdW5kZXI7Civovq0gPiB3b3JkczsKK+W+riA+IHNtYWxsOwor5a62ID4gaG91c2U7CivlvqEgPiBkcml2ZTsKK+i+niA+IHdvcmRzOwor5ZCOID4gcXVlZW47CivlsI8gPiBzbWFsbDsKK+W+hSA+IHRyZWF0Owor6L+YID4gc3RpbGw7Civlj5EgPiBpc3N1ZTsKK+W9qyA+IGNhcnZlOwor5oOzID4gdGhpbms7CivnnaEgPiBzbGVlcDsKK+i9iSA+IHNoaWZ0Owor5omAID4gcGxhY2U7CivovKogPiB3aGVlbDsKK+S4iSA+IHRocmVlOwor6LyVID4gbGlnaHQ7CivlvI8gPiBzdHlsZTsKK+agtyA+IHNoYXBlOwor6Lu9ID4gbGlnaHQ7Civlu7ogPiBidWlsZDsKK+W7tiA+IGRlbGF5Owor55uyID4gYmxpbmQ7Civou6IgPiBzaGlmdDsKK+W7oyA+IGJyb2FkOwor5aOwID4gc291bmQ7Civlt6UgPiBsYWJvcjsKK+ebhiA+IGJhc2luOwor55uDID4gZ2xhc3M7CivmraMgPiByaWdodDsKK+W6uCA+IHVzdWFsOwor5aWzID4gd29tYW47CivlipsgPiBwb3dlcjsKK+i6kSA+IHdhdmVyOwor5ZugID4gY2F1c2U7Civph40gPiBoZWF2eTsKK+eahyA+IHJveWFsOwor5bqHID4gY292ZXI7CivmrKEgPiBvcmRlcjsKK+W6gyA+IGJyb2FkOwor5Y+jID4gbW91dGg7Civkvb8gPiBjYXVzZTsKK+eZvSA+IHdoaXRlOwor5bm9ID4gcXVpZXQ7CivmlZkgPiB0ZWFjaDsKK+eZvCA+IGlzc3VlOwor5YaNID4gYWdhaW47CivnmbogPiBpc3N1ZTsKK+awlCA+IHN0ZWFtOwor5L+hID4gdHJ1c3Q7CivljJcgPiBub3J0aDsKK+i5siA+IHNxdWF0Owor6LmfID4gdHJhY2U7CivnlLEgPiBjYXVzZTsKK+WNtCA+IHN0aWxsOwor5bmFID4gcGllY2U7CivlhaUgPiBlbnRlcjsKK+WFiCA+IGZpcnN0Owor5rC0ID4gd2F0ZXI7CivlpIQgPiBwbGFjZTsKK+W3tyA+IGFsbGV5Owor56yRID4gc21pbGU7Civnq4sgPiBzdGFuZDsKK+i3qiA+IGtuZWVsOwor6amsID4gaG9yc2U7Civlt6ggPiBsYXJnZTsKK+eWkSA+IGRvdWJ0Owor5YipID4gZ2FpbnM7CivotbQgPiBnb1wtdG87CivlhYkgPiBsaWdodDsKK+aenCA+IGZydWl0Owor6LWnID4gYmx1c2g7Civoh7MgPiByZWFjaDsKK+a4hSA+IGNsZWFyOwor54mpID4gdGhpbmc7CivltYwgPiBpbmxheTsKK+eUsiA+IGFybW9yOwor55SwID4gZmllbGQ7CivorrggPiBhbGxvdzsKK+WFqyA+IGVpZ2h0Owor5bSWID4gY2xpZmY7CivltI4gPiByb3VnaDsKK+WNlyA+IHNvdXRoOwor6ImyID4gY29sb3I7CivorqkgPiBhbGxvdzsKK+eTnCA+IG1lbG9uOwor566XID4gY291bnQ7Civos4ogPiB0aGllZjsKK+WFgyA+IGZpcnN0Owor6LKvID4gc3RvcmU7CivmgJ0gPiB0aGluazsKK+iyqCA+IGdvb2RzOwor5bKpID4gY2xpZmY7Civmr48gPiBldmVyeTsKK+WxrCA+IGNsYXNzOwor6LGqID4gYnJhdmU7CivlsZ4gPiBjbGFzczsKK+iogCA+IHdvcmRzOwor5p2DID4gcG93ZXI7CivlsYsgPiBob3VzZTsKK+ixhiA+IGJlYW5zOwor5LiDID4gc2V2ZW47CivlsJogPiBzdGlsbDsKK+WwliA+IHNoYXJwOwor6L2sID4gc2hpZnQ7CivlsIQgPiBzaG9vdDsKK+epuiA+IGVtcHR5Owor5oqAID4gc2tpbGw7CivovbsgPiBsaWdodDsKK+WvuiA+IGNvdXJ0Owor5a+rID4gd3JpdGU7Civoi7EgPiBwZXRhbDsKK+WvoiA+IHNsZWVwOwor5YaZID4gd3JpdGU7Civlr50gPiBzbGVlcDsKK+WvkCA+IHNsZWVwOwor5a+GID4gZGVuc2U7Civlr4IgPiBzdGlsbDsKK+mSsSA+IG1vbmV5Owor5a65ID4gbG9va3M7CivlrrUgPiBuaWdodDsKK+iuviA+IGJ1aWxkOwor5aeLID4gYmVnaW47CivlrqIgPiBndWVzdDsKK+eJhyA+IHNsaWNlOwor56CUID4gZ3JpbmQ7CivlrocgPiBob3VzZTsKK+aXqSA+IGVhcmx5Owor5oi/ID4gaG91c2U7Civpn7MgPiBzb3VuZDsKK+eNuyA+IG9mZmVyOwor5426ID4gb3R0ZXI7CivnjbggPiBiZWFzdDsKK+itsiA+IGFsbG93Owor542oID4gYWxvbmU7CivoraYgPiBndWFyZDsKK+eNoyA+IGJlYXN0Owor5a2YID4gZXhpc3Q7CivorYkgPiBwcm9vZjsKK+e7hCA+IGNsYXNzOwor6KydID4gdGhhbms7CivnjJwgPiBndWVzczsKK+WsiSA+IGVuam95Owor6buRID4gYmxhY2s7CivorIEgPiB2aXNpdDsKK+WJkSA+IHN3b3JkOwor54usID4gYWxvbmU7CivkuZAgPiBoYXBweTsKK+e6pyA+IGxldmVsOwor6KqsID4gc3BlYWs7CivkuL4gPiByYWlzZTsKK+ivgSA+IHByb3ZlOwor54WnID4gc2hpbmU7CivoqpMgPiBzd2VhcjsKK+e+pCA+IGdyb3VwOwor5pmaID4gbmlnaHQ7CivoqoIgPiB0ZW1wdDsKK+ipniA+IHdvcmRzOwor5LykID4gd291bmQ7CivnsbsgPiBjbGFzczsKK+asoiA+IGhhcHB5Owor54i9ID4gaGFwcHk7Civlir8gPiBwb3dlcjsKK+iovCA+IHByb3ZlOwor5Yi7ID4gY2FydmU7Civmlq0gPiBzZXZlcjsKK+WknCA+IG5pZ2h0Owor6KixID4gYWxsb3c7CivoqK0gPiBidWlsZDsKK+S7tyA+IHByaWNlOwor6ISRID4gYnJhaW47CivoqKogPiB2aXNpdDsKK+inhCA+IHJ1bGVzOwor5aiRID4gZGFuY2U7CivnoLQgPiBicmVhazsKK+azvSA+IG1hcnNoOwor54e7ID4gc21va2U7CivntKcgPiB0ZW5zZTsKK+inuCA+IHRvdWNoOwor6KOFID4gZHJlc3M7CivmgKUgPiBxdWljazsKK+aysyA+IHJpdmVyOwor6KGAID4gYmxvb2Q7CivmipUgPiB0aHJvdzsKK+imhiA+IGNvdmVyOwor5Y+zID4gcmlnaHQ7CivlpbQgPiBzbGF2ZTsKK+WIgCA+IGtuaWZlOwor6KWfID4gbGFwZWw7CivnhZkgPiBzbW9rZTsKK+WliSA+IG9mZmVyOwor5ZadID4gZHJpbms7CivopLggPiBsYXBlbDsKK+ikqiA+IHN0cmlwOwor5Y2rID4gZ3VhcmQ7CivlpKIgPiBkcmVhbTsKK+mUmSA+IGVycm9yOwor6KO+ID4gbGFwZWw7CivmoYggPiB0YWJsZTsKK+eDnyA+IHNtb2tlOwor6KOdID4gZHJlc3M7CivljbAgPiBwcmludDsKK+WjkyA+IHByZXNzOwor54OIID4gZmllcnk7Civlo4cgPiBhbHRhcjsKK+WdlyA+IHBpZWNlOwor6KOCID4gc3BsaXQ7CivoorQgPiBwYW50czsKK+WikyA+IGdyYXZlOwor6Z2ZID4gcXVpZXQ7Civngo4gPiBmbGFtZTsKK+ihtyA+IGhlYXJ0Owor54GwID4gYXNoZXM7CivooZ4gPiBndWFyZDsKK+ihmyA+IGd1YXJkOwor6YCfID4gcXVpY2s7CivloZcgPiBzbWVhcjsKK+aVjCA+IGVuZW15Owor5aGUID4gdG93ZXI7CivosKIgPiB0aGFuazsKK+WhiiA+IHBpZWNlOwor5oCAID4gYm9zb207CivlhbsgPiByYWlzZTsKK+e9qiA+IGNyaW1lOwor5r+2ID4gYnJvYWQ7Civon7IgPiB3b3JtczsKK+a/sSA+IGJlYWNoOwor5pGYID4gcGx1Y2s7Civmlr0gPiBncmFudDsKK+aooSA+IG1vZGVsOwor6I2JID4gZ3Jhc3M7Civmv4MgPiB0aGljazsKK+WAvCA+IHByaWNlOwor5r+BID4gbXVkZHk7Civnj60gPiBjbGFzczsKK+S/riA+IHN0dWR5Owor5ZGzID4gdGFzdGU7CivmvqQgPiBtYXJzaDsKK+e7hyA+IHdlYXZlOwor6b6VID4gbmljaGU7Civonb8gPiBmbGllczsKK+WFjSA+IHNwYXJlOwor5rOiID4gd2F2ZXM7CivmvZQgPiBjbGVhbjsKK+a0iyA+IG9jZWFuOwor5YqzID4gbGFib3I7CivlnYcgPiBlcXVhbDsKK+WOiyA+IHByZXNzOwor5aWWID4gcHJpemU7Civpob8gPiBwYXVzZTsKK+a8giA+IGZsb2F0Owor5YikID4ganVkZ2U7CivntKAgPiB3aGl0ZTsKK+WYtCA+IG1vdXRoOwor5ouFID4gY2Fycnk7Civmnb8gPiBwbGFuazsKK+mSnyA+IGNsb2NrOwor6K6/ID4gdmlzaXQ7Civpu5IgPiBibGFjazsKK+m7kCA+IHN0aWNrOwor6JuHID4gc25ha2U7CivmnoQgPiBmcmFtZTsKK+a6uiA+IGRyb3duOwor6bqmID4gd2hlYXQ7CivpuqUgPiB3aGVhdDsKK+a6nSA+IGRpdGNoOwor5rqcID4gc2xpZGU7CivogokgPiBmbGVzaDsKK+e6uCA+IHBhcGVyOwor5qKmID4gZHJlYW07CivomZogPiBmYWxzZTsKK+iSmSA+IGNvdmVyOwor6JmVID4gcGxhY2U7CivomY4gPiB0aWdlcjsKK+WZjCA+IHNjb2xkOwor5p2CID4gbWl4ZWQ7CivmgJIgPiBhbmdlcjsKK+eovyA+IGRyYWZ0Owor5rimID4gc3dpcmw7CivmuKEgPiBjcm9zczsKK+a4oCA+IGRpdGNoOwor5ZiXID4gdGFzdGU7CivnvaIgPiBjZWFzZTsKK+m3uiA+IGhlcm9uOwor6be5ID4gZWFnbGU7Civmt7kgPiBkcm93bjsKK+iXqSA+IGZlbmNlOwor6JelID4gZHJ1Z3M7CivpspwgPiBmcmVzaDsKK+e9riA+IHBsYWNlOwor5ZeFID4gc21lbGw7Civol4EgPiBzdHJhdzsKK+m2tCA+IGNyYW5lOwor5p6qID4gc3BlYXI7Civmtq8gPiBzaG9yZTsKK+iWriA+IG1hcnNoOwor6JasID4gZHJ1Z3M7CivolqYgPiBvZmZlcjsKK+a2nCA+IGRpdGNoOwor5raZID4gdGVhcnM7CivphY0gPiBtYXRjaDsKK+a1tCA+IGJhdGhlOwor5Y2HID4gYXJpc2U7CivmtZwgPiBjcmVlazsKK+iUvSA+IGNvdmVyOwor6K+NID4gd29yZHM7Civms6ogPiB0ZWFyczsKK+iUrSA+IHNoYWRlOwor5rSlID4gZmVycnk7CivprLwgPiBnaG9zdDsKK+iIniA+IGRhbmNlOwor6JOuID4gbG90dXM7Civpgb8gPiBhdm9pZDsKK+ahjCA+IHRhYmxlOwor6JOLID4gY292ZXI7CivkuqEgPiBkZWF0aDsKK+iThCA+IHN0b3JlOwor6ZeqID4gZmxhc2g7CivokrggPiBzdGVhbTsKK+mchyA+IHNoYWtlOwor5ZKzID4gY291Z2g7CivlkrIgPiBzbWlsZTsKK+ayoiA+IG1hcnNoOwor57u/ID4gZ3JlZW47Civlko4gPiBmYXVsdDsKK+e6syA+IGFkbWl0Owor5rG9ID4gc3RlYW07CivotKcgPiBnb29kczsKK+WRqiA+IGN1cnNlOwor56ulID4gY2hpbGQ7CivkvJ8gPiBncmVhdDsKK+axgSA+IGp1aWNlOwor6I2jID4gZ2xvcnk7CivnjK4gPiBvZmZlcjsKK+WQkCA+IHZvbWl0Owor5Y6aID4gdGhpY2s7CivpsIwgPiBsb2FjaDsKK+WWiiA+IHNob3V0Owor6L2uID4gd2hlZWw7CivlkIkgPiBsdWNreTsKK+iurSA+IHRlYWNoOwor5Y+xID4gc2NvbGQ7CivpgJAgPiBjaGFzZTsKK+ebliA+IGNvdmVyOwor5Y+pID4ga25vY2s7CivoiI0gPiBob3VzZTsKK+avjiA+IGV2ZXJ5Owor5qOAID4gY2hlY2s7Civmj6EgPiBncmFzcDsKK+eJmSA+IHRvb3RoOwor6a6uID4gZnJlc2g7Civlrr0gPiBicm9hZDsKK+auliA+IGJyZWVkOwor5Y2/ID4gbm9ibGU7CivojbcgPiBsb3R1czsKK+atryA+IHRlZXRoOwor5q2qID4gc2xhbnQ7CivmraEgPiBoYXBweTsKK+ajiyA+IGNoZXNzOwor6a2UID4gZGVtb247CivohbAgPiB3YWlzdDsKK+aihSA+IHBsdW1zOwor6ZKiID4gc3RlZWw7CivojLkgPiByb290czsKK+S7hyA+IGVuZW15Owor5qy6ID4gY2hlYXQ7CivprJogPiBiZWFyZDsKK+WMmSA+IHNwb29uOwor5YeAID4gY2xlYW47CivljI0gPiBjcmF3bDsKK+asiiA+IHBvd2VyOwor6IyFID4gcmVlZHM7CivntK8gPiB0aXJlZDsKK+S6qyA+IGVuam95Owor6IyCID4gdGhpY2s7Civli4cgPiBicmF2ZTsKK+acqyA+IGZpbmFsOwor57OKID4gcGFzdGU7CivnqI4gPiB0YXhlczsKK+WLoiA+IHBvd2VyOwor5YueID4gbGFib3I7Civoi5sgPiBzbWFsbDsKK+aDryA+IGhhYml0Owor5YC+ID4gdXBzZXQ7CivlirQgPiBsYWJvcjsKK+mfqSA+IGZlbmNlOwor6LS4ID4gdHJhZGU7CivmqqIgPiBjaGVjazsKK+WKjSA+IHN3b3JkOwor5omrID4gc3dlZXA7CivoibggPiBncmFzczsKK+WJoyA+IHN3b3JkOwor5ZCTID4gc2NhcmU7CivliYMgPiBzaGF2ZTsKK+mXsiA+IGZlbmNlOwor6Ii2ID4gbGFyZ2U7CivliLcgPiBicnVzaDsKK+e+iiA+IHNoZWVwOwor5qipID4gcG93ZXI7CivmqKMgPiBzaGFwZTsKK+aJkSA+IHBvdW5kOwor6IiOID4gaG91c2U7Civnoo4gPiBicmVhazsKK+aogiA+IGhhcHB5Owor56OoID4gZ3JpbmQ7Civoh7ogPiB0b3dlcjsKK+iHrSA+IHNtZWxsOwor5YemID4gcGxhY2U7Civmp5ggPiBzaGFwZTsKK+WAjSA+IHRpbWVzOwor57KXID4gcm91Z2g7Civmp4sgPiBmcmFtZTsKK+WGtiA+IHNtZWx0Owor6IazID4gbWVhbHM7Civppq0gPiBkcml2ZTsKK+aclyA+IGNsZWFyOwor6aasID4gaG9yc2U7CivlhbwgPiB1bml0ZTsKK+meiyA+IHNob2VzOwor5qyjID4gaGFwcHk7CivmjKQgPiBjcm93ZDsKK+alvSA+IGhhcHB5Owor5rSBID4gY2xlYW47CivpopcgPiBncmFpbjsKK+aDoCA+IGZhdm9yOwor5oyvID4gcmFpc2U7CivohaYgPiBicmFpbjsKK+eIrCA+IGNyYXdsOwor6IWVID4gd3Jpc3Q7CivmoYMgPiBwZWFjaDsKK+aOqiA+IHBsYWNlOwor5rOwID4gZ3JlYXQ7CivlnaEgPiBzbG9wZTsKK+iEsyA+IGJyYWluOwor5Z2bID4gYWx0YXI7CivlhJ8gPiByZXBheTsKK+aknCA+IGNoZWNrOwor5b2qID4gdGlnZXI7Civppa4gPiBkcmluazsKK+akjSA+IHBsYW50Owor6aSKID4gcmFpc2U7CivohIogPiBzcGluZTsKK+akhSA+IGNoYWlyOwor55+bID4gc3BlYXI7Civlrr4gPiBndWVzdDsKK+iCmiA+IGJlbGx5Owor5YO5ID4gcHJpY2U7CivotLwgPiB0aGllZjsKK+mjsiA+IGRyaW5rOwor5qOyID4gcGVyY2g7Civpo64gPiBkcmluazsKK+WDniA+IGZhbHNlOwor5YOVID4gc2xhdmU7Civmo5IgPiBzdGljazsKK+WDjSA+IGxhYm9yOwor5YK+ID4gdXBzZXQ7CivlgrcgPiB3b3VuZDsKK+WCrCA+IHByZXNzOwor6IKdID4gbGl2ZXI7Civnm58gPiBzd2VhcjsKK+WBvSA+IGZhbHNlOwor566tID4gYXJyb3c7CivogbIgPiBzb3VuZDsKK+mhniA+IGNsYXNzOwor6ICAID4gc2hpbmU7CivpoYYgPiBncmFpbjsKK+WBiSA+IGdyZWF0Owor55avID4gY3Jhenk7CivogLsgPiBzaGFtZTsKK+S+jSA+IHNlcnZlOwor5YCkID4gcHJpY2U7CivooasgPiBzaGlydDsKK+mgkyA+IHBhdXNlOwor5o+tID4gcmFpc2U7CivojrIgPiBsb3R1czsKK+mSuyA+IGRyaWxsOwor5qCEID4gZ2xvcnk7Civls6EgPiBnb3JnZTsKK+mfuyA+IHJoeW1lOwor5p+1ID4gZmVuY2U7CivkuJEgPiBjbG93bjsKK+e/syA+IHNoYWRlOwor5rWTID4gdGhpY2s7CivmjYkgPiBncmFzcDsKK+a+syA+IGlubGV0Owor55a8ID4gYWNoZXM7CivmoaMgPiBzaGVsZjsKK+aKmyA+IHRocm93Owor5L6hID4gcHJpY2U7CivpmJQgPiBicm9hZDsKK+eOmyA+IGFnYXRlOwor6Z20ID4gYm9vdHM7CivlsJ0gPiB0YXN0ZTsKK+aJoyA+IGtub2NrOwor6Z2cID4gcXVpZXQ7CivlgrIgPiBwcm91ZDsKK+S8uiA+IHNlcnZlOwor6ZSQID4gc2hhcnA7CivpnJwgPiBmcm9zdDsKK+WQtSA+IGFyZ3VlOwor5rKfID4gZGl0Y2g7CivmtZEgPiBtdWRkeTsKK+mCqiA+IHdyb25nOwor6ISGID4gY3Jpc3A7Civlgb8gPiByZXBheTsKK+aLnyA+IGRyYWZ0Owor5puzID4gdHJhaWw7Civpm6IgPiBsZWF2ZTsKK+mbnCA+IG1peGVkOwor5Y+bID4gcmViZWw7CivngrwgPiBzbWVsdDsKK+mbkSA+IG1peGVkOwor57+8ID4gd2luZ3M7CivlkbUgPiBzY29sZDsKK+eUnCA+IHN3ZWV0Owor5oq5ID4gc21lYXI7CivpmpkgPiBjcmFjazsKK+aJlCA+IHRocm93Owor5bu3ID4gY291cnQ7CivmjrcgPiB0aHJvdzsKK+WChSA+IHR1dG9yOwor5pmpID4gbmlnaHQ7CivnuZQgPiB3ZWF2ZTsKK+WWtyA+IHNwdXJ0Owor5rWpID4gZ3JlYXQ7CivlkKkgPiBvcmRlcjsKK+S8qiA+IGZhbHNlOwor556OID4gYmxpbmQ7Civnn64gPiBzaG9ydDsKK+m9vyA+IHRlZXRoOwor57eRID4gZ3JlZW47CivlqLYgPiBtYXJyeTsKK+e3iiA+IHRlbnNlOwor6ZeHID4gY2xvc2U7CivnkoMgPiBnbGFzczsKK+aWtyA+IHNldmVyOwor57OWID4gc3VnYXI7Civnj4ogPiBjb3JhbDsKK+ajjSA+IHN0aWNrOwor6ZaRID4gZmVuY2U7CivnjrsgPiBnbGFzczsKK+eguCA+IHNtYXNoOwor5Zq3ID4gc2hvdXQ7CivploMgPiBmbGFzaDsKK+aVtSA+IGVuZW15Owor57WeID4gdHdpc3Q7CivlnZ8gPiBncmF2ZTsKK+m5pCA+IGNyYW5lOwor57WEID4gY2xhc3M7CivkuZYgPiByZWJlbDsKK+e0miA+IGxldmVsOwor57SZID4gcGFwZXI7CivntI0gPiBhZG1pdDsKK+i9qCA+IHRyYWNrOwor5pOxID4gcGxhY2U7Civmk6wgPiBkcmFmdDsKK+ehlSA+IGdyZWF0Owor5pOnID4gcmFpc2U7Civmk6EgPiBjYXJyeTsKK+aTlCA+IGNhcnJ5Owor5pKyID4gcG91bmQ7Civlhb0gPiBiZWFzdDsKK+exliA+IHRhbGx5Owor6ZCYID4gY2xvY2s7Civpga4gPiBjb3ZlcjsKK+aTkiA+IGNhdGNoOwor56+JID4gYnVpbGQ7Civmj4MgPiBzaGVhcjsKK+eukiA+IGJyb29tOwor6byOID4gbGFyZ2U7CivmjoMgPiBzd2VlcDsKK+mNriA+IGJyYXNzOwor5ZeTID4gdm9pY2U7CivnspIgPiBncmFpbjsKK+mMryA+IGVycm9yOwor5ZWlID4gd2hhdFw/Owor6YyiID4gbW9uZXk7CivonJwgPiBob25leTsKK+aMmSA+IHJhaXNlOwor6Yu8ID4gc3RlZWw7Civmi7YgPiBwcmVzczsKK+mLrSA+IHNoYXJwOwor5pCBID4gcGxhY2U7Civpi48gPiB0b25nczsKK+iCvyA+IHN3ZWxsOwor6YqtID4gbW9uZXk7Civoo5kgPiBza2lydDsKK+iDgCA+IHN3ZWxsOwor6L6cID4gY3JpbWU7Civlk4cgPiB2b21pdDsKK+WwvyA+IHVyaW5lOwor6YCuID4gc2VpemU7CivliK4gPiBzaGF2ZTsKK+WYsSA+IG9yZGVyOwor5YChID4gZ3VpZGU7CivmkI8gPiBzZWl6ZTsKK+WFnCA+IHBvdWNoOwor6a2EID4gdmlnb3I7CivmmbAgPiBjbGVhcjsKK+ezlSA+IGNha2VzOwor56epID4gb3JkZXI7CivnqJogPiB5b3VuZzsKK+mIjSA+IGJsdW50Owor5oe3ID4gYm9zb207Civmu6ggPiBiZWFjaDsKK+aHkCA+IGJvc29tOwor6LqBID4gdGVuc2U7CivnlKsgPiBiZWdpbjsKK+emvSA+IGJpcmRzOwor5oa6ID4gcGVhY2U7Civpk74gPiBjaGFpbjsKK+aGrCA+IHJvdXNlOwor5rKQID4gYmF0aGU7Civlh7MgPiBiZW5jaDsKK+mFrCA+IHRvYXN0Owor5oWjID4gaGFiaXQ7Civngb8gPiB2aXZpZDsKK+mftSA+IHJoeW1lOwor5pSAID4gY2xpbWI7CivlkpIgPiBjdXJzZTsKK+ayqyA+IGZyb3RoOwor56KMID4gcm91Z2g7CivlnaQgPiBlYXJ0aDsKK+eEsCA+IGZsYW1lOwor6YCXID4gdGVtcHQ7CivpgoQgPiBzdGlsbDsKK+mtgSA+IGNoaWVmOwor5rulID4gZmxvb2Q7CivpgakgPiBtYXRjaDsKK+aBpSA+IHNoYW1lOwor5qGGID4gZnJhbWU7CivlloAgPiB2b21pdDsKK+eglSA+IGJyZWFrOwor57+FID4gd2luZ3M7CivmiLMgPiBwcmljazsKK+ahqSA+IHN0YWtlOwor6IK6ID4gbHVuZ3M7CivnurEgPiBnYXV6ZTsKK+mZoSA+IHN0ZWVwOwor54OrID4gc2NhbGQ7CivljJUgPiBzcG9vbjsKK+m5hSA+IGdvb3NlOwor5pWeID4gcm9vbXk7CivmtY8gPiBjbGVhcjsKK+eDgSA+IHNoaW5lOwor6K+IID4gY2hlYXQ7Civls6ggPiBsb2Z0eTsKK+iZkCA+IGNydWVsOwor6L6rID4gYnJhaWQ7Civll70gPiBjb3VnaDsKK+aApiA+IGVhZ2VyOwor5rWHID4gc3ByYXk7CivohpsgPiBjaGVzdDsKK+mXtSA+IG1vdXJuOwor6JCDID4gZGVuc2U7CivoopwgPiBzb2NrczsKK+aPvSA+IGdyYXNwOwor6I2rID4gc2hhZGU7CivotL8gPiBicmliZTsKK+aVnSA+IGJyZWFrOwor54aPID4gc21va2U7CivljIAgPiBlcXVhbDsKK+aygyA+IHdhdGVyOwor6J2HID4gZmxpZXM7Civnu54gPiB0d2lzdDsKK+WRlSA+IHZvbWl0Owor5aKFID4gdmlsbGE7Civnp70gPiBkaXJ0eTsKK+iwrCA+IGVycm9yOwor5Z6EID4gZ3JhdmU7CivlkbsgPiBncm9hbjsKK+aLpyA+IHBpbmNoOwor5b2wID4gY2xlYXI7CivmoJYgPiBwZXJjaDsKK+aJvCA+IGdyYXNwOwor5rWKID4gbXVkZHk7CivmnaAgPiBsZXZlcjsKK+aDqyA+IHRpcmVkOwor5pSYID4gc2VpemU7CivnvI4gPiBzYXRpbjsKK+aDriA+IGRyZWFkOwor5ZmXID4gYnVyc3Q7Civnn7YgPiBqZXR0eTsKK+eToyA+IHBldGFsOwor6budID4gYmxhY2s7CivnsIcgPiBzd2FybTsKK+aHiiA+IHZleGVkOwor5Yu6ID4gc3Bvb247CivlpK0gPiB5b3VuZzsKK+aLhyA+IHRodW1iOwor6ZOyID4gc3BhZGU7Civogq4gPiBkaXJ0eTsKK+WTvSA+IGNob2tlOwor6K+jID4gcmVhY2g7CivngqsgPiBzaGluZTsKK+mSnSA+IGJsdW50Owor5qCFID4gZmVuY2U7CivlhpUgPiBjcm93bjsKK+W7kyA+IGJyb2FkOwor5bOtID4gc3RlZXA7Civno4UgPiBwb3VuZDsKK+eWriA+IHR1bW9yOwor6LWDID4gYm9vdHk7CivnmKQgPiB0dW1vcjsKK+WpiiA+IHdob3JlOwor6ZSvID4gYVwtc2F3Owor56eJID4gZ3Jhc3A7Civoh7sgPiByZWFjaDsKK+WYiCA+IG5vaXN5Owor6K+FID4gY3Vyc2U7CivnvLAgPiByZWluczsKK+iuqiA+IGFidXNlOwor5b+hID4gYVwtc2FkOwor5rahID4gc3dpcmw7Civppo0gPiBicmVhZDsKK+mihSA+IHNrdWxsOwor56WvID4gbHVja3k7Civlv5YgPiBndWVzczsKK+eDmSA+IGJyYW5kOwor5Z+UID4gcGxhaW47Civms5MgPiBjbGVhcjsKK+WZjiA+IGNob2tlOwor6ZicID4gbW91bmQ7Civkv6ggPiBncmF2ZTsKK+eCrCA+IHRvcmNoOwor6LSuID4gc3RvcmU7CivmuI4gPiBkaXRjaDsKK+eZqyA+IGNyYXp5Owor54KZID4gcm9hc3Q7CivogocgPiBiZWdpbjsKK+W4miA+IGJyb29tOwor5oGsID4gcXVpZXQ7CivlqaogPiBjb3ZldDsKK+i5kSA+IHRyZWFkOwor56u6ID4gaW5kaWE7CivliYwgPiBzbGFzaDsKK+iNpyA+IHNoaW5lOwor6LWCID4gYnJpYmU7Civor7IgPiB0ZWFjaDsKK+etmyA+IHNpZXZlOwor56+hID4gdXN1cnA7CivpsrggPiB3aGFsZTsKK+aKoSA+IHN3aW5nOwor5rauID4gcmluc2U7CivmjI4gPiBjYXJyeTsKK+mFtSA+IHllYXN0Owor5qmEID4gb2xpdmU7CivmpoQgPiBvbGl2ZTsKK+eooCA+IGRlbnNlOwor5oK7ID4gYW5nZXI7Civpm48gPiBjaGljazsKK+aRuSA+IHRyYWNlOwor5ranID4gYnJvb2s7CivohbogPiBnbGFuZDsKK+WTriA+IGNvdWdoOwor6KKSID4gc3RyaXA7CivmiqAgPiByYWlzZTsKK+W/sSA+IHRydXRoOwor5ZmkID4gY2xvc2U7Civpq68gPiBiZWFyZDsKK+icvyA+IGNyZWVwOwor6ZWAID4gcGxhdGU7Civog60gPiByb3VnZTsKK+mrhSA+IHNrdWxsOwor54SYID4gc2hpbmU7CivkvZcgPiBvdGhlcjsKK+i1syA+IGdyYW5kOwor57OgID4gY2hhZmY7CivluJsgPiBzaWxrczsKK+S+jyA+IHNtYWxsOwor5LiVID4gZ3JlYXQ7CivpsqggPiBzaGFyazsKK+i4nSA+IGFua2xlOwor6amtID4gZHJpdmU7CivnnIggPiBnbG9hdDsKK+WArSA+IGR3YXJmOwor6ZWQID4gc3RvdmU7Civoh4YgPiBjaGVzdDsKK+WtuiA+IGNoaWxkOwor6JmxID4gbG91c2U7CivnkZkgPiBhZ2F0ZTsKK+ikmyA+IGxhcGVsOwor5oG6ID4gZW5qb3k7Civmk54gPiBzaGFrZTsKK+eulSA+IHNpZXZlOwor5raTID4gYnJvb2s7CivlmbwgPiBzb3VuZDsKK+aQkCA+IGNyYW1wOwor5oibID4gbGFuY2U7Civpu5QgPiBibGFjazsKK+mYliA+IGNsb3NlOwor5ZGDID4gYmVsY2g7CivmuokgPiB3YXRlcjsKK+eCgCA+IHJvYXN0Owor55qOID4gd2hpdGU7Civmpq0gPiBraW9zazsKK+mFqiA+IGNyZWFtOwor5YKAID4gZ3JlYXQ7CivlrYAgPiB3aWRvdzsKK+WtqiA+IHR3aW5zOwor5rOxID4gZ3JlYXQ7CivlspYgPiBzdGVlcDsKK+W/uCA+IGJsdXNoOwor556wID4gd2F0Y2g7CivosJIgPiB2aXNpdDsKK+iniiA+IGNvdmV0Owor5rCuID4geGVub247Civnl6MgPiBzcG90czsKK+aRkiA+IGV4cGVsOwor5L+4ID4gd2FnZXM7CivmhKAgPiBhbmdyeTsKK+WykSA+IHN0ZWVwOwor5pC9ID4gc21lYXI7CivmiaogPiBzdG9rZTsKK+eRmiA+IGNvcmFsOwor55qZID4gd2hpdGU7Civnu4kgPiBjcmVwZTsKK+W/viA+IGFuZ2VyOwor55uCID4gYmFzaW47Civnj4AgPiBhbWJlcjsKK+WBiCA+IGJyYXZlOwor5rKUID4gZmxvb2Q7Civor6kgPiBib2FzdDsKK+iKjSA+IHBlb255Owor6KS2ID4gcGxlYXQ7CivphZcgPiBkcnVuazsKK+WSpCA+IHNjb2xkOwor5p+gID4gbGVtb247Civor5kgPiB0ZWFzZTsKK+WBgyA+IGNlYXNlOwor57u6ID4gc2tlaW47Civmj78gPiBwcmVzczsKK+mHiSA+IGdsYXplOwor6bmtID4gaGVyb247CivlrpMgPiBxdWlldDsKK+WtmyA+IGNvbWV0Owor5ZmrID4gYmVsY2g7CivlvIsgPiBjYXRjaDsKK+m+myA+IG5pY2hlOwor5b+qID4gcXVpZXQ7CivplYIgPiBjYXJ2ZTsKK+mqniA+IHJhaXNlOwor6aKMID4gbW91dGg7Civpk6AgPiBhcm1vcjsKK+mzhSA+IGxvYWNoOwor56eGID4gc3RyYXc7CivltoIgPiBjbGlmZjsKK+akvSA+IGJlYW1zOwor6aKmID4gZnJvd247Civmt5YgPiBzbHVzaDsKK+aBmiA+IGFuZ2VyOwor6I6gID4gd2VlZHM7CivmqZsgPiBhXC1wZWc7CivpmJUgPiBjbG9zZTsKK+WSuyA+IHNob3V0Owor56WbID4gZXhwZWw7CivokrogPiBmdXJ6ZTsKK+ihvSA+IGxhcGVsOwor57+VID4gYWdyZWU7CivpnL4gPiBtaXN0eTsKK+egpyA+IGFudmlsOwor6LmJID4gZXJyb3I7Civlk4IgPiBzbWlsZTsKK+iDuiA+IGFtaW5lOwor6JutID4gbGVlY2g7Civpn6ogPiByaWdodDsKK+ivqCA+IGpva2VzOwor6LWdID4gZmFsc2U7Civlsr8gPiBncmFuZDsKK+aAqyA+IHNvcnJ5Owor6I2PID4gYmVhbnM7CivmpZQgPiB3ZWRnZTsKK+aTmCA+IHRodW1iOwor6L2xID4gd2hlZWw7Civlqr4gPiBtYXJyeTsKK+eXjSA+IHdvdW5kOwor542tID4gb3R0ZXI7Civpu6IgPiBibGFjazsKK+mTpyA+IHNwYWRlOwor5ZCSID4gc2hvdXQ7Civnlr0gPiB1bGNlcjsKK+ivnyA+IGFidXNlOwor6IyUID4gZ3JhdmU7CivmoaQgPiBhbGRlcjsKK+mThiA+IHJpdmV0Owor6YWpID4gZHJ1bms7CivmsLUgPiB3YXRlcjsKK+aSuiA+IGh1cnJ5Owor5aWYID4gbGFyZ2U7CivogoQgPiBsZWFybjsKK+i4ryA+IHdhdmVyOwor5a2iID4gc3BvcmU7CivpsrIgPiBzcGF3bjsKK+mFiiA+IGRydW5rOwor6ZOoID4gd2VpZ2g7Civphb0gPiB0aGljazsKK+mYkiA+IGFsb25lOwor6aWsID4gb3JkZXI7CivosZUgPiBhXC1waWc7CivnrIogPiBsYWRsZTsKK+e9hSA+IGNyYWNrOwor6ZKcID4gc3RlZWw7CivnlYggPiBmaWVsZDsKK+WblyA+IGVyZWN0Owor5bqlID4gc2hhZGU7Civnk6QgPiBmbGVzaDsKK+mTqSA+IG1vdWx0Owor5riWID4ganVpY2U7Civlv4QgPiBoZWFydDsKK+ivkyA+IGNoZWF0Owor6bmRID4gcXVhaWw7CivojJUgPiBhbG9uZTsKK+WehSA+IG1vdW5kOwor6J+lID4gbGVlY2g7CivpubMgPiBjcmFuZTsKK+m5jCA+IHF1YWlsOwor5pmfID4gY2xlYXI7CivllYEgPiBjaGlycDsKK+mGmiA+IGV0aGVyOwor55CwID4gamV3ZWw7Civov6ggPiB1bnRpbDsKK+ikqyA+IHN0cmlwOwor6bmsID4gc25pcGU7Civnnr0gPiBibGluZDsKK+WCiCA+IHRyaWJlOwor6am9ID4gdGlyZWQ7CivosK8gPiB0b3dlcjsKK+mTsCA+IGhpbmdlOwor5rSMID4gY2xlYXI7CivloJ4gPiBwbGF0ZTsKK+ehvCA+IGJvcmF4Owor6KmIID4gc2NvbGQ7Civpha8gPiBlc3RlcjsKK+mVqiA+IGNvaW5zOwor6ZS4ID4gc3BhZGU7CivmiIsgPiBzbWFsbDsKK+aJpiA+IHByb2JlOwor5rq3ID4gcHJpdnk7Civkv7MgPiBhY3RvcjsKK+mboCA+IGVuZW15Owor56C7ID4gZ3JpbmQ7CivomJYgPiBzdHVtcDsKK+WigCA+IHBvcmNoOwor6bq0ID4geWVhc3Q7CivnqrMgPiBkaXJ0eTsKK+a9iyA+IHdhdmVzOwor5rSOID4gdW50aWw7CivppacgPiBzdWdhcjsKK+WWiCA+IG11c2ljOwor5ZChID4gYmxhbWU7CivpmZ8gPiBjbGltYjsKK+mymyA+IHNoYXJrOwor55qyID4gY3JhY2s7CivnmIogPiB3YXJ0czsKK+mmlSA+IGJyZWFkOwor5pCmID4gZ3Jhc3A7CivlnrQgPiBzbWFsbDsKK+mYnSA+IHBsYWNlOwor5Y6jID4gc2hlbGw7Civns4UgPiBibGVuZDsKK+mTlyA+IHRvbmdzOwor6ZiPID4gYmxvY2s7CivliaEgPiBzaGFycDsKK+mygiA+IGJyZWFtOwor5rq9ID4gbW9pc3Q7CivmgL8gPiBlbmpveTsKK+iJuSA+IGdyYXNzOwor6auRID4gc2t1bGw7Civot70gPiBrbmVlbDsKK+ewjyA+IGFcLWJveDsKK+ijpSA+IGZvbGRzOwor6ZKjID4gcGxhdGU7Civmp4ogPiBzcGVhcjsKK+akiyA+IGZydWl0Owor57yzID4gbm9vc2U7Civnu5AgPiBjaGVhdDsKK+a7oiA+IGNsZWFyOwor6b6gID4gZmx1dGU7CivonaQgPiBsYXJ2YTsKK+awhiA+IHRoaWNrOwor5Z+tID4gYVwtZGFtOwor5Z+9ID4gYnJvb207CivlnbwgPiBzcGxpdDsKK+ivliA+IGVycm9yOwor6bK2ID4gc2hlYXQ7CivosoUgPiBicmF2ZTsKK+eapCA+IHdoaXRlOwor56iCID4gZ3Jhc3M7CivplYYgPiBzd29yZDsKK+mUniA+IGluZ290Owor54idID4gdG9yY2g7CivmsKEgPiByYWRvbjsKK+anrSA+IG1hcGxlOwor5b2YID4gc3dpbmU7CivlvZYgPiBhXC1ob2c7Civmu5cgPiBkcmFpbjsKK+W7kSA+IGFcLWh1dDsKK+WMjyA+IGdvdXJkOwor6JWWID4gbG90dXM7CivkvpQgPiBlcXVhbDsKK+mziiA+IGJyZWFtOwor56+8ID4gc2VkYW47Civom54gPiBzbmFpbDsKK+ibsiA+IHdvcm1zOwor6JmNID4gdGlnZXI7CivmsJkgPiB4ZW5vbjsKK+i1hyA+IGJyaWJlOwor55KBID4gXChnZW1cKTsKK+e7lyA+IGJhc3RlOwor6JCPID4gbG90dXM7Civln5ggPiByb29zdDsKK+m9kiA+IHRlZXRoOwor6b2FID4gc21lbGw7Civpu64gPiBibGFjazsKK+m7kyA+IGJsYWNrOwor6bq6ID4gZmxvdXI7CivpurkgPiB5ZWFzdDsKK+m6tSA+IGZsb3VyOwor6bqvID4geWVhc3Q7CivpuqsgPiBmbG91cjsKK+m6qiA+IGZsb3VyOwor6bqkID4gcm91Z2g7CivpupggPiBzY2VudDsKK+m6gSA+IHJvdWdoOwor6bm+ID4gc2FsdHk7CivpubogPiBzYWx0eTsKK+m5uSA+IHNhbHR5Owor6biyID4gbXluYWg7CivpuJsgPiBjcmFuZTsKK+m4mCA+IGVhZ2xlOwor6be4ID4gc25pcGU7Civpt4MgPiBxdWFpbDsKK+m2tSA+IGNoaWNrOwor6baJID4gcXVhaWw7CivptbAgPiBlYWdsZTsKK+m1qiA+IHF1YWlsOwor6bWeID4gZ29vc2U7CivptZ0gPiBnb29zZTsKK+m0syA+IHF1YWlsOwor6bSqID4gc3dvb3A7CivptKUgPiBzd29vcDsKK+m0nSA+IG15bmFoOwor6bG7ID4gZnJlc2g7Civpsa4gPiBicmVhbTsKK+mwniA+IHNxdWlkOwor6bCNID4gbG9hY2g7CivpsIsgPiBzaGVhdDsKK+mvvyA+IGJyZWFtOwor6a+wID4gc2hlYXQ7Civpr6ggPiB3aGFsZTsKK+mvpCA+IHNwYXduOwor6a+LID4gc2hhcms7Civpr4ogPiBzaGFyazsKK+muqyA+IHNoYXJrOwor6a6JID4gYnJlYW07CivprbQgPiBicmVhbTsKK+mthiA+IGJsYWNrOwor6aySID4gYmxhY2s7CivprI4gPiBmYXZ1czsKK+msjSA+IGJlYXJkOwor6ayBID4gZmF2dXM7Civpq7MgPiBzdGF0ZTsKK+mrsiA+IGFcLXdpZzsKK+mrpSA+IGJlYXJkOwor6auSID4gZGlydHk7Civpq48gPiBza3VsbDsKK+mqryA+IGRpcnR5Owor6ampID4gaGFwcHk7CivpqaYgPiBob3JzZTsKK+mpliA+IGJsYWNrOwor6ai7ID4gaG9yc2U7CivpqKsgPiByYWlzZTsKK+mooCA+IGhvcnNlOwor6aiRID4gaG9yc2U7Civpp6ogPiBjcm93ZDsKK+mnniA+IGNhbWVsOwor6aeRID4gdGlyZWQ7CivppqEgPiBzY2VudDsKK+mloiA+IGJyZWFkOwor6aWYID4gZ3J1ZWw7CivppY0gPiBtZWFsczsKK+mlgyA+IGJyZWFkOwor6aS7ID4gY2FrZXM7CivppLkgPiBzdWdhcjsKK+mksyA+IHN1Z2FyOwor6aSqID4gZmVhc3Q7CivppKYgPiBjYW5keTsKK+mknCA+IGNha2VzOwor6aO2ID4gb2RvdXI7Civpo60gPiBvcmRlcjsKK+mjkSA+IHN0b3JtOwor6aK9ID4gYmFsbXk7CivpobEgPiBza3VsbDsKK+mhsCA+IGZyb3duOwor6aGjID4gZnJvd247CivpoZcgPiBxdWlldDsKK+mgviA+IGJlYXJkOwor6aCgID4gcXVpZXQ7CivpoJwgPiBtb3V0aDsKK+mggCA+IG11c2ljOwor6Z+6ID4gbXVzaWM7Civpn6QgPiBzb2NrczsKK+mfmSA+IHJpZ2h0Owor6Z+TID4gZmVuY2U7Civpn4ggPiBzb2NrczsKK+mfhiA+IHN3aW5nOwor6Z+BID4gcmVpbnM7Civpnr4gPiBib290czsKK+metSA+IHNob2VzOwor6Z6oID4gdHJpYmU7CivpnpcgPiByZWluczsKK+megyA+IGJvYXJkOwor6Z2mID4gdGltaWQ7CivpnYEgPiB0aGljazsKK+mcsSA+IGNsb3VkOwor6ZyZID4gc2xlZXQ7Civpm50gPiBtYXJzaDsKK+mbmyA+IGNoaWNrOwor6ZqCID4gc2hhZHk7CivpmbwgPiBpc2xldDsKK+mYuSA+IGFcLXBlbjsKK+mXmiA+IGZsYXNoOwor6ZeUID4gY2xvc2U7Civpl4sgPiBjbG9zZTsKK+mXiiA+IGJyb2FkOwor6ZeDID4gYWxvbmU7CivplrwgPiBibG9jazsKK+mWtCA+IHF1aWV0Owor6ZamID4gY3Jvd2Q7CivplpQgPiBtb3VybjsKK+mVnyA+IGxhdGhlOwor6ZS8ID4gY2FydmU7CivplJMgPiBjYXJ2ZTsKK+mTmCA+IHN3b3JkOwor6ZKDID4gbWV0YWw7Civpkb0gPiBkcmlsbDsKK+mRsSA+IHNwYWRlOwor6ZGaID4gZHJpbGw7CivpkZMgPiBzcGVhcjsKK+mPuSA+IGNvaW5zOwor6Y+1ID4gc3BhZGU7Civpj6YgPiBzcGVhcjsKK+mPpCA+IGNhcnZlOwor6Y+fID4gc3BhZGU7Civpj4wgPiBzd29yZDsKK+mPiCA+IGNoYWluOwor6Y+HID4gbGF0aGU7CivpjqwgPiBzdG92ZTsKK+mOpyA+IGFybW9yOwor6Y6XID4gcmlmbGU7Civpjo0gPiBjaGFpbjsKK+mNuSA+IHNwYWRlOwor6Y2tID4gYXJyb3c7CivpjaQgPiBzcGFkZTsKK+mNjyA+IHNwYWRlOwor6Y2NID4gcGxhdGU7CivpjYkgPiBzcG9vbjsKK+mMgSA+IGluZ290Owor6Yu5ID4gc2hhcnA7Civpi7ggPiBhXC1zYXc7Civpi7IgPiByaXZldDsKK+mLnyA+IGNhcnZlOwor6YuYID4gc3dvcmQ7CivpirMgPiBzaGFycDsKK+mKmyA+IHNoYXJwOwor6YqTID4gd2VpZ2g7Civpib4gPiBzcGVhcjsKK+mJvCA+IHBsYXRlOwor6Ym4ID4gaGluZ2U7CivpiZogPiByaXZldDsKK+mJhSA+IHN0ZWVsOwor6YiSID4gc3BlYXI7CivpiJEgPiBwbGF0ZTsKK+mIhyA+IGFuXC1heDsKK+mHvCA+IHN3b3JkOwor6YeWID4ga25pZmU7Civph4UgPiB0aGljazsKK+mHgiA+IGRyYWluOwor6YS7ID4gc3BvaWw7Civpg6QgPiBjcmFjazsKK+mBqyA+IHNwZWVkOwor6YGdID4gbWl4ZWQ7CivpgLQgPiBhcmd1ZTsKK+i+riA+IGJyYWlkOwor6L6kID4gd29yZHM7CivovqAgPiBjcmltZTsKK+i8kyA+IG1vdXJuOwor6LyPID4gbGlnaHQ7CivovIggPiBzaGFmdDsKK+i7sSA+IHdoZWVsOwor6LucID4gcmVpbnM7Civou4wgPiB0cmFjazsKK+i6oSA+IHRyZWFkOwor6LiGID4gc3F1YXQ7CivotqEgPiBwbGFjZTsKK+i0nCA+IGJvb3R5Owor6LSTID4gYm9vdHk7CivotIsgPiBmYWxzZTsKK+izlSA+IGJyaWJlOwor6LOUID4gZ3Vlc3Q7Civos5MgPiBndWVzdDsKK+izjSA+IGJvb3R5Owor6LOEID4gYnJpYmU7Civos4IgPiBicmliZTsKK+iyvyA+IHRyYWRlOwor6LKkID4gc3RlcHM7CivosZQgPiBwbHVtcDsKK+iumSA+IGNoZWVyOwor6K6TID4gYWxsb3c7CivorpAgPiBlbmVteTsKK+iujiA+IGVuZW15Owor6K2ZID4gdG93ZXI7CivorYwgPiBmYWxzZTsKK+itgSA+IG5vaXNlOwor6KysID4gZXJyb3I7CivorJEgPiBzaGFtZTsKK+isjyA+IHNjb2xkOwor6KuiID4gam9rZXM7Civoq6AgPiBub2lzeTsKK+irkCA+IGZhdWx0Owor6KqqID4gc3BlYWs7CivoqqggPiB0ZWFjaDsKK+iqhiA+IGNoZWF0Owor6Km/ID4gZXJyb3I7CivoqbwgPiB0ZWFzZTsKK+iprCA+IGFidXNlOwor6KmjID4gcmVhY2g7CivoqaEgPiBib2FzdDsKK+ipmyA+IGN1cnNlOwor6KmWID4gYXJndWU7CivoqZEgPiBjaGVhdDsKK+ipkCA+IGNoZWF0Owor6Ki9ID4gYmxhbWU7CivoqKcgPiBmYXVsdDsKK+iolSA+IGFidXNlOwor6KiTID4gdGVhY2g7CivoqI8gPiBib2FzdDsKK+inlCA+IGNhdHR5Owor6KasID4gY292ZXQ7Civopo8gPiBydWxlczsKK+ilviA+IGNvdmVyOwor6KWqID4gc29ja3M7CivopaIgPiBzdHJpcDsKK+iljSA+IG1peGVkOwor6KS7ID4gZGlydHk7CivopLogPiBkaXJ0eTsKK+iklSA+IHNoaXJ0Owor6KK1ID4gbGFwZWw7CivooZUgPiBhbGxleTsKK+ihiiA+IHNtZWFyOwor6KGBID4gYmxvb2Q7CivooJsgPiBmbGllczsKK+iglyA+IFwoYXBlXCk7CivooIUgPiBmbGllczsKK+ifryA+IHdvcm1zOwor6J+iID4gY2F1bGs7CivonaggPiBsb3VzZTsKK+idmCA+IGdlY2tvOwor6J2TID4gc25haWw7CivomrQgPiBsYXJ2YTsKK+iZoyA+IGNydWVsOwor6JmbID4gZmFsc2U7CivomJcgPiBzdHVtcDsKK+iYkyA+IHRoeW1lOwor6JiLID4gYXBwbGU7Civol74gPiBzaGFkZTsKK+iXqiA+IG1hcnNoOwor6JaWID4gZW1wdHk7CivolokgPiBkaXJ0eTsKK+iSniA+IHJlYWNoOwor6JGiID4gY292ZXI7CivokY0gPiBwbGFudDsKK+iQuSA+IGdyYXNzOwor6I6/ID4gdGhvcm47CivojbMgPiBiZWFuczsKK+iNriA+IGdyYXNzOwor6I2EID4gcm9vdHM7CivojIcgPiBncmFzczsKK+iLviA+IHNtZWxsOwor6Iu2ID4gd2Vhcnk7CivoiJcgPiBzdG9yZTsKK+iIliA+IHN0b3JlOwor6IiLID4gc3BsaXQ7CivoiIkgPiByYWlzZTsKK+iHvSA+IGFcLXBpdDsKK+iHsiA+IGp1bXB5Owor6IeiID4gZGlydHk7Civoh5sgPiBicm90aDsKK+iHmSA+IHJvdWdlOwor6IeQID4gYnJvdGg7CivohrYgPiBsaXZlcjsKK+iGhyA+IHN3ZWxsOwor6IWrID4gc3dlbGw7CivohaEgPiBsaW5lczsKK+iEuSA+IHN3ZWxsOwor6IS2ID4gbGluZXM7CivohKIgPiBmbGVzaDsKK+iEgyA+IGdsYW5kOwor6IK1ID4gdGFibGU7CivogpUgPiB0b3VnaDsKK+iAniA+IGZsYWlsOwor57+9ID4gd2hpcnI7Civnv4QgPiB3aW5kczsKK+e+sSA+IHNoZWVwOwor576jID4gZ3JvdXA7CivnvbcgPiBjZWFzZTsKK+e9iSA+IGFcLXBvdDsKK+e6uyA+IHJhbWllOwor57mvID4gbm9vc2U7Civnua4gPiByZWluczsKK+e4oCA+IGNyZXBlOwor57iQID4gY3JlcGU7CivnuI8gPiBwdXJzZTsKK+e3niA+IHNhdGluOwor57a5ID4gc2tlaW47CivntqAgPiBncmVlbjsKK+e2jCA+IGNsb3RoOwor57WOID4gYmFzdGU7CivntYEgPiByb3VnaDsKK+e0vyA+IGNoZWF0Owor57S1ID4gcmFtaWU7CivntJ0gPiB3ZWF2ZTsKK+e0lyA+IGdhdXplOwor57SRID4gZnJlc2g7Civns5QgPiBqdWljZTsKK+ezkyA+IGdyYWluOwor57KOID4gbWV0cmU7CivnsaQgPiB0YWxseTsKK+ewuyA+IGVtcHR5Owor57CbID4gc2lldmU7CivnsJIgPiB1c3VycDsKK+ewgSA+IHNpZXZlOwor56+pID4gc2lldmU7Civnr48gPiBpbmxheTsKK+eumyA+IGJ1Z2xlOwor562zID4gZmVhc3Q7CivnrbAgPiBjYWJsZTsKK+etpiA+IGFcLWtleTsKK+erviA+IGZsdXRlOwor56uUID4gbGl0cmU7Civnqr0gPiBlbXB0eTsKK+eppyA+IHNoZWFmOwor56miID4gZGlydHk7CivnqaAgPiB0aGljazsKK+ephSA+IGNoYWZmOwor56i+ID4gZHJhZnQ7CivnqIUgPiB0YXhlczsKK+enhyA+IHNraWxsOwor56agID4gaGFwcHk7Civnpo4gPiBsdWNreTsKK+elmSA+IGRlbW9uOwor56S2ID4gYVwtanVnOwor56SxID4gZ3JpbmQ7Civno7UgPiBicm9vazsKK+ejryA+IGpldHR5Owor56OhID4gY2xpZmY7Civno5sgPiBjbGlmZjsKK+ejiCA+IHJvY2t5Owor56K7ID4gc29saWQ7Civnoq8gPiBhZ2F0ZTsKK+eiqSA+IGdyZWF0Owor56KBID4gY2hlc3M7CivnoY8gPiBncmluZDsKK+egsyA+IHJvY2t5Owor56CgID4gcm9ja3k7Civnn5MgPiBmYWludDsKK+efiCA+IGRlbnNlOwor556PID4gcm91bmQ7Civnno0gPiBibGluZDsKK+eehyA+IGNsb3NlOwor552YID4gcm91bmQ7CivnnLkgPiBwdXBpbDsKK+echSA+IGlubGF5Owor55u7ID4gZ2xhcmU7Civnm60gPiBjcnVlbDsKK+eavSA+IHNjdXJmOwor55q5ID4gY3JhY2s7CivnmrggPiBjcmFjazsKK+earSA+IHdoaXRlOwor55qrID4gd2hpdGU7CivnmpwgPiB3aGl0ZTsKK+eagSA+IGJsYWNrOwor55myID4gY3Jhenk7CivnmaEgPiBzaWxseTsKK+eYoSA+IHR1bW9yOwor55iLID4gY3Jhenk7CivnlJ4gPiB0YXN0ZTsKK+eUmyA+IHN3ZWV0Owor55SWID4gYVwtcG90Owor55SOID4gYnJpY2s7Civnk5YgPiBpbmxheTsKK+eTiCA+IGdsYXNzOwor55GqID4gYWdhdGU7CivnkZQgPiBcKGphZGU7CivnkZEgPiBjYXJ2ZTsKK+ePliA+IGNhcmF0Owor546IID4gYmxhY2s7CivnjZ0gPiBkZXZpbDsKK+eNjiA+IHByaXplOwor54u1ID4gYmxlbmQ7CivniZwgPiBhblwtb3g7CivniZQgPiBnYWJsZTsKK+eIkyA+IGZsYW1lOwor54iNID4gc2hpbmU7Civnh78gPiBzaGluZTsKK+eHviA+IHNoaW5lOwor54emID4gdml2aWQ7Civnh5kgPiBzY2FsZDsKK+eHjyA+IGJsYXplOwor54eEID4gZmxhbWU7Civnh4IgPiBzbW9rZTsKK+eGmyA+IGJsYXplOwor54aSID4gc2hpbmU7CivnhawgPiByb2FzdDsKK+eFoiA+IGFsb25lOwor54WJID4gc21lbHQ7CivnhJQgPiBmbGFtZTsKK+eDkyA+IHN0b3ZlOwor54OLID4gYm9hc3Q7CivngrAgPiByb2FzdDsKK+eCpyA+IGFzaGVzOwor54GjID4gYVwtYmF5Owor54GiID4gbXVkZHk7CivngZQgPiB3YXZlczsKK+eAuiA+IHNvdW5kOwor54CyID4gd2F2ZXM7CivngI8gPiBjbGVhcjsKK+eAiyA+IGp1aWNlOwor54CGID4gZGl0Y2g7CivngIUgPiBjbGVhcjsKK+eAgSA+IHdhdmVzOwor5r+rID4gZmxvb2Q7CivmvqggPiBzaG9yZTsKK+a+lyA+IGJyb29rOwor5r6RID4gc2xpZGU7CivmvoYgPiBzcHJheTsKK+a9tyA+IGRyYWluOwor5r2dID4gYWdyZWU7CivmvJEgPiB3YXRlcjsKK+a8iCA+IHNob3JlOwor5rmpID4gbXVkZHk7CivmuaMgPiBtaXhlZDsKK+a4viA+IG11ZGR5Owor5re4ID4gY2xlYXI7Civmt6IgPiBkaXRjaDsKK+a3miA+IHRlYXJzOwor5reKID4gZHJvd247CivmtaUgPiBtb2lzdDsKK+a0tCA+IHNvdW5kOwor5rSaID4gZmxvb2Q7CivmtI8gPiB0ZWFyczsKK+azmiA+IGNsZWFyOwor5rKyID4gZmxvYXQ7CivmsbMgPiBoZW5hbjsKK+axjiA+IGZsb2F0Owor5rC5ID4gZGl0Y2g7CivmsKUgPiB4ZW5vbjsKK+awnCA+IGNsZWFyOwor5q6RID4gc3dvb247Civmrb4gPiBkcm93bjsKK+atlSA+IHNwdXJ0Owor5q2TID4gaGFwcHk7CivmrYggPiBzb25nczsKK+asvCA+IGRyaW5rOwor5qy4ID4gc2lnaHM7CivmrKwgPiBjb3VnaDsKK+asmSA+IHNlZGFuOwor5qyWID4gb2xpdmU7Civmq7EgPiB5ZWFzdDsKK+ariCA+IGJlbmNoOwor5qq4ID4gbGVtb247Civmqq8gPiB0YWJsZTsKK+aqqCA+IG1hbmdvOwor5qqUID4gc2hlbGY7CivmqLQgPiBzdGFrZTsKK+aolSA+IHNocnViOwor5qiPID4gc2VkYW47CivmqIEgPiBzdGFrZTsKK+anvCA+IHJ1bGVzOwor5qeTID4gbGV2ZXI7Civmp40gPiBzcGVhcjsKK+amvyA+IGFsZGVyOwor5qauID4gZ2xvcnk7CivmpbMgPiBwbHVtczsKK+alhSA+IGJ1YXJkOwor5qWEID4gYmxvY2s7CivmpIggPiBjZWRhcjsKK+ajiiA+IGNoZXNzOwor5qOBID4gam9pc3Q7CivmorIgPiBqb2lzdDsKK+aikCA+IGZlbmNlOwor5qGvID4gdGFibGU7Civmoa0gPiBlYXZlczsKK+ahmiA+IHByZXNzOwor5qC1ID4gaGVkZ2U7CivmoKsgPiBmZW5jZTsKK+aglCA+IGNhcnZlOwor5qCNID4gYVwtbG90Owor5p+2ID4gbGFkbGU7CivmnacgPiBtYW5nbzsKK+adlSA+IGFsb25lOwor5pyuID4gc2tpbGw7CivmnJYgPiBjbGVhcjsKK+achSA+IGJyYXZlOwor5pu1ID4gdHJhaWw7Civmm6ggPiB2YWd1ZTsKK+aWhiA+IHRlYWNoOwor5paFID4gdGVhY2g7CivmlbogPiBleHBlbDsKK+aVlCA+IGdhdmVsOwor5pWOID4gdGVhY2g7CivmlKwgPiBncmFzcDsKK+aUmyA+IGh1cnJ5Owor5pO7ID4gc2hha2U7Civmk7IgPiB0aHJvdzsKK+aTsCA+IHBpbmNoOwor5pOgID4gY3Jvd2Q7CivmkrMgPiBwcmVzczsKK+aRsyA+IHJhaXNlOwor5pGPID4gcG91bmQ7CivmkKQgPiBzZWl6ZTsKK+aQiiA+IHBsdWNrOwor5pCJID4ga25vY2s7Civmj7UgPiBjYXJyeTsKK+aPhSA+IGdyaW5kOwor5o6EID4gc3dpbmc7Civmjb8gPiBwZXJjaDsKK+aNqyA+IHN0b2tlOwor5oyMID4gZmlnaHQ7Civmi4sgPiB0aHJvdzsKK+aLgyA+IGdyb3BlOwor5omiID4gY2FwZXI7CivmiK0gPiBzcGVhcjsKK+aIoyA+IGxhbmNlOwor5oieID4gbGFuY2U7CivmiJQgPiBzbWFsbDsKK+aHvSA+IGhhcHB5Owor5oelID4gYW5ncnk7Civmh6AgPiBhbmdyeTsKK+aHjCA+IGVuam95Owor5oatID4gY2xlYXI7CivmhpogPiBkcmVhZDsKK+aGiiA+IHRpcmVkOwor5oWsID4gYnJhdmU7CivmhY0gPiBhbmdyeTsKK+aEviA+IGFuZ2VyOwor5oS3ID4gZW5qb3k7CivmhJ4gPiB0aW1pZDsKK+aEgyA+IHJlbGF4Owor5oK+ID4gbmFpdmU7CivmgrAgPiBlbmpveTsKK+aChiA+IGhhcHB5Owor5oG1ID4gZmF2b3I7CivmgZMgPiB2ZXhlZDsKK+W9kSA+IHNub3V0Owor5b2QID4gc25vdXQ7CivlvYIgPiBpc3N1ZTsKK+W8iSA+IGxhcmdlOwor5buVID4gc2hhZGU7Civlua0gPiBjb3ZlcjsKK+W5qiA+IGNvdmVyOwor5bmmID4gY292ZXI7CivluaAgPiBjb3ZlcjsKK+W4kiA+IGFcLWJhZzsKK+W4iyA+IHBhcGVyOwor5betID4gc3R1ZHk7Civlt5sgPiByaXZlcjsKK+W3liA+IGNsaWZmOwor5beMID4gY2xpZmY7Civlt4sgPiBncmFuZDsKK+W3iSA+IHN0ZWVwOwor5beDID4gbG9mdHk7CivltrAgPiBnb3JnZTsKK+W2oSA+IHRhYmxlOwor5baeID4gcmlkZ2U7CivltpQgPiBsb2Z0eTsKK+W2hyA+IHN0ZWVwOwor5bWcID4gcm91Z2g7CivltZIgPiBjbGlmZjsKK+W1giA+IGxvZnR5Owor5bSxID4gbG9mdHk7CivltJogPiBoaWxseTsKK+W0lSA+IGNsaWZmOwor5bO9ID4gZ29yZ2U7Civls6kgPiBsb2Z0eTsKK+WxtiA+IGxvZnR5Owor5bG0ID4gbG9mdHk7CivlsaogPiBwZW5pczsKK+WxjCA+IHBlbmlzOwor5bCwID4gc3dlbGw7CivlsJkgPiBzdGlsbDsKK+WvrCA+IGJyb2FkOwor5a+bID4gYnJvYWQ7Civlr4EgPiBxdWljazsKK+WuuyA+IGRlbnNlOwor5a6NID4gZmxlc2g7Civlrb8gPiB0d2luczsKK+WtliA+IHR3aW5zOwor5auaID4gc2Nvcm47Civlp6ogPiBuaWVjZTsKK+WlsCA+IGFuZ2VyOwor5aWsID4gcHJpemU7CivlpaggPiBwcml6ZTsKK+WlnSA+IGxhcmdlOwor5aOgID4gbW91bmQ7Civlo58gPiBncmF2ZTsKK+WjhiA+IHN0aWZmOwor5aK6ID4gd2FsbHM7CivlorMgPiBncmF2ZTsKK+WinSA+IHN0b255Owor5aKNID4gcGFpbnQ7CivlooggPiBjbGlmZjsKK+WhvCA+IGJyaWNrOwor5aGcID4gZHVzdHk7CivloZkgPiB0cnVseTsKK+WhkiA+IHJvb3N0Owor5aGLID4gZ3JhdmU7CivloYggPiBwYWludDsKK+WgvyA+IHNhbHR5Owor5aC9ID4gbW91bmQ7CivloJYgPiBzbWFsbDsKK+WfsyA+IGFcLXBpdDsKK+WfjCA+IHdhc3RlOwor5Z+GID4gc3Rvbnk7CivlnpogPiBtb3VuZDsKK+WdvyA+IG1vdW5kOwor5Z2wID4gd2lsZHM7CivlnIwgPiBmZW5jZTsKK+WbkSA+IG9yZGVyOwor5ZuFID4gc21pbGU7Civlmq4gPiBndWlkZTsKK+WarSA+IG1vdW5kOwor5ZqsID4gZnJvd247CivlmqEgPiByb3VnaDsKK+WakCA+IHRhc3RlOwor5ZqHID4gc2NhcmU7CivlmbogPiBzdG9yeTsKK+WZtCA+IHNwdXJ0Owor5ZmtID4gc2hvdXQ7CivlmaYgPiBiZWxjaDsKK+WYoiA+IHRoaW5nOwor5ZiSID4gc2hhcnA7Civll5sgPiBwb3VjaDsKK+WXmSA+IGJvYXN0Owor5ZeQID4gYWxhc1whOwor5Za0ID4gaGVsbG87CivllbIgPiBhXC1mZXc7CivllaIgPiBvdW5jZTsKK+WVjSA+IGNyZWFrOwor5ZShID4gb3VuY2U7CivllI4gPiBzb3VuZDsKK+WTtiA+IGJsZWF0Owor5ZOVID4gYmVsY2g7CivlkqIgPiBzb3VuZDsKK+WSjSA+IGxhdWdoOwor5ZCwID4gY2xhbmc7CivlkKMgPiB2b21pdDsKK+WPmiA+IGZhbHNlOwor5Y66ID4gdG9cLWdvOwor5Y65ID4gc3BlYXI7CivljrQgPiBzaGVsbDsKK+WOqiA+IGFcLWh1dDsKK+WOliA+IGJ1bGt5Owor5Y27ID4gc3RpbGw7CivljawgPiBsb2Z0eTsKK+WMnCA+IGJhc2luOwor5Yu7ID4gZXF1YWw7CivlipQgPiBzd29yZDsKK+WKkiA+IHN3b3JkOwor5YqOID4gc3dvcmQ7CivlibEgPiBzd29yZDsKK+WJoCA+IGJyYW5kOwor5YiCID4ga25pZmU7Civlh7wgPiBkaXRjaDsKK+WHiCA+IGNsZWFuOwor5YapID4gd3JpdGU7CivlhqcgPiBhXC1idWQ7CivlhpogPiBjb3ZlcjsKK+WGliA+IGNvdmVyOwor5YaBID4gc21pbGU7CivlhLwgPiBncmF2ZTsKK+WEjiA+IGNhcnJ5Owor5YSMID4gbHVja3k7Civlg78gPiBzbWFsbDsKK+WDhCA+IGxpZ2h0Owor5YKrID4gdGlyZWQ7CivlgZAgPiBmYWxzZTsKK+WBgSA+IHN0YXRlOwor5YCWID4gbHVja3k7Civkv7YgPiBzdGFydDsKK+S+kCA+IHF1aWV0Owor5L6BID4gY3Jvd2Q7CivkvbogPiBmYWlyeTsKK+S9jCA+IHNtYWxsOwor5LypID4gdHJ1c3Q7Civku6sgPiB0cmliZTsKK+S6viA+IGRlYXRoOwor5LqxID4gbmlnaHQ7CivkuZUgPiB0aWdlcjsKK+S4tSA+IHRoaWNrOwor5LivID4gZGVuc2U7CivkuK4gPiBjYXRjaDsKK+S4jCA+IHRhYmxlOwor5LiFID4gdW5kZXI7CivkuIQgPiBhYm92ZTsKK+S2kyA+IHJhbWllOwor5LaPID4gdGVhcnM7CivktosgPiBzb3VuZDsKK+S2hyA+IGFcLXJhdDsKK+S2hiA+IGFcLXJhdDsKK+S1rSA+IGJsYWNrOwor5LWlID4gYmxhY2s7CivktZ8gPiBibGFjazsKK+S0uiA+IGNha2VzOwor5LS5ID4gY2FrZXM7CivktLUgPiBjYWtlczsKK+S0siA+IGZsb3VyOwor5LSeID4gc2FsdHk7Civks70gPiBjcmFuZTsKK+SzsSA+IGR1Y2tzOwor5LOYID4gZ29vc2U7Civks5cgPiBnb29zZTsKK+SyoSA+IGxvYWNoOwor5LKRID4gc3Bhd247CivksZwgPiBzaGFyazsKK+SxliA+IHNoYXJrOwor5LGLID4gc3Bhd247CivksKIgPiBnaG9zdDsKK+SwlyA+IGFcLWxvdDsKK+SwkiA+IHZhZ3VlOwor5LCRID4gYmVhcmQ7CivksIUgPiBiZWFyZDsKK+SvviA+IGhhaXJ5Owor5K+4ID4gYVwtd2lnOwor5K+NID4gYm9uZXM7Civkrb0gPiBncm91cDsKK+StpiA+IGNha2VzOwor5K2fID4gY2FrZXM7CivkrZAgPiBjYWtlczsKK+StjiA+IGNha2VzOwor5K2FID4gY2FrZXM7CivkrL8gPiBzbWFsbDsKK+SstSA+IHN5cnVwOwor5KyuID4gc3lydXA7Civkq7UgPiB0d2luczsKK+SrliA+IHRpbWlkOwor5KuOID4gc2hvcnQ7CivkqrsgPiBhXC1jYXA7CivkqrEgPiBjaGVlazsKK+SqryA+IHNvdW5kOwor5KqbID4gZ3JvdXA7CivkqpggPiByaWdodDsKK+SqlyA+IHNob2VzOwor5KqCID4gcmVpbnM7CivkqbogPiBib290czsKK+SpliA+IHNob2VzOwor5KmVID4gY2xvZ3M7CivkqZMgPiBib290czsKK+SphSA+IGJyb2FkOwor5Ki5ID4gc3dpZnQ7CivkqLcgPiBzbGVldDsKK+SomCA+IHNsZWV0Owor5KiLID4gY3J1ZWw7CivkqIQgPiBxdWFpbDsKK+SogSA+IGR1Y2tzOwor5Ke9ID4gc21hbGw7Civkp6ogPiBzaXNzeTsKK+SnjiA+IGFcLXBpdDsKK+SnhiA+IGFcLXBpdDsKK+SmviA+IGxvZnR5Owor5KaiID4gYnJvYWQ7Civkpp4gPiBleHRyYTsKK+SmlyA+IHF1aWV0Owor5KaUID4gYVwtcGVnOwor5KW1ID4gbGluZXM7CivkpZggPiB3cm9uZzsKK+SlkyA+IGFcLWhvZTsKK+SlgSA+IGFybW9yOwor5KS6ID4gYW5cLWF4Owor5KS0ID4gYXJtb3I7CivkpKogPiBzaG9ydDsKK+SkoiA+IG1ldGFsOwor5KScID4gYmx1bnQ7CivkpJogPiBwbHVtczsKK+SkmSA+IGRyZWdzOwor5KOxID4gZHJ1bms7Civko6cgPiBibGFjazsKK+SilCA+IG1peGVkOwor5KKRID4gYW5ncnk7CivkoZYgPiBzdGlsbDsKK+SgoiA+IHdlYXJ5Owor5KCgID4gdG9cLWdvOwor5J+gID4gc3dpZnQ7Civkn5wgPiBicmVhazsKK+SeiCA+IG1vbmV5Owor5J2tID4gd2FnZXM7CivknasgPiBtb25leTsKK+SdkiA+IGFcLXNvdzsKK+SdjyA+IGFcLXNvdzsKK+SdjiA+IGFcLXBpZzsKK+SdiiA+IGFcLXNvdzsKK+SdhSA+IGFcLXBpZzsKK+SdgyA+IGJlYW5zOwor5Jy0ID4gYnJhdmU7CivknI4gPiBzb3VuZDsKK+ScjSA+IHN3ZWV0Owor5JyMID4gY2hhb3M7CivknIogPiBub2lzZTsKK+SbrSA+IGFuZ3J5Owor5JuhID4gd29yZHM7CivkmrQgPiBhbmdlcjsKK+SanyA+IGhvcm5zOwor5JqJID4gb1wtc2VlOwor5JiKID4gZmxpZXM7Civkl5UgPiBiZW5kczsKK+SWjiA+IHRpZ2VyOwor5JaLID4gY3J1ZWw7CivkloggPiBjcnVlbDsKK+SSuCA+IGdyYXNzOwor5JKRID4gZ3Jhc3M7CivkkZogPiBzd2VldDsKK+SRlSA+IGFcLXJhdDsKK+SRgSA+IGZhdHR5Owor5JCsID4gY3Jpc3A7CivkkJ0gPiB0aGljazsKK+SQlyA+IGFcLXBpZzsKK+SQhyA+IGNsZWFyOwor5I+1ID4gcGx1bXA7Civkj7MgPiBvbGVpbjsKK+SPryA+IG1vbGVzOwor5I+nID4gZmF0dHk7Civkj5ogPiBzbWFsbDsKK+SOkCA+IGhhaXJ5Owor5I6HID4gcXVpY2s7CivkjoQgPiBoYWlyeTsKK+SNpSA+IHNtb2t5Owor5I2MID4gYVwtamFyOwor5Iy7ID4gd2luZ3M7CivkjJEgPiB0aWdodDsKK+SMkCA+IHJvcGVzOwor5Iu1ID4gcXVpY2s7Civki6UgPiBsaW5lczsKK+SLmiA+IHdpbmdzOwor5IuZID4gcmVpbnM7Civkir4gPiByb3BlczsKK+SKuyA+IHNpbGt5Owor5Iq5ID4gc21hbGw7CivkioAgPiBwYXN0ZTsKK+SJvyA+IHBhc3RlOwor5ImeID4gYVwtYm94Owor5IiJID4gYVwtZmFuOwor5IeyID4gdG9uZ3M7Civkh6QgPiBzaGFycDsKK+SHgiA+IGZhdWx0Owor5Ia5ID4gZW1wdHk7CivkhpwgPiBlbXB0eTsKK+SGgSA+IHN5cnVwOwor5IW1ID4gY2hhZmY7CivkhZkgPiBncmFzczsKK+SFmCA+IHdoZWF0Owor5IWGID4gZGVuc2U7CivkhL4gPiB0aGljazsKK+SEpSA+IGFcLWdvZDsKK+SEoiA+IHBpb3VzOwor5IOsID4gcm9ja3k7Civkg5sgPiBjaGFpbjsKK+SDmSA+IHJvY2tzOwor5IOXID4gcm9ja3M7Civkgr0gPiByb2NrczsKK+SCvCA+IHJvY2tzOwor5IK6ID4gcm9ja3M7CivkgrAgPiByb2NrczsKK+SCriA+IHN0b25lOwor5IKmID4gdGlyZWQ7Civkgp8gPiByb2NrczsKK+SCliA+IHJvY2tzOwor5IKVID4gc2hvcnQ7CivkgpQgPiBzaG9ydDsKK+SCkSA+IHNob3J0Owor5IKPID4gc2hvcnQ7CivkgasgPiBtdWRkeTsKK+SBnyA+IHdyb25nOwor5IGXID4gbGlnaHQ7CivkgY0gPiBibGluZDsKK+SAvCA+IGFuZ3J5Owor5ICHID4gYVwtcG90Owor47+3ID4gcm91Z2g7Civjv64gPiBncmVlbjsKK+O/qSA+IGxpZ2h0Owor47+lID4gc2hpbmU7Civjv6QgPiB3aGl0ZTsKK+O/nSA+IHN3ZWV0Owor47+VID4gdWxjZXI7CivjvrAgPiBjaG9rZTsKK+O+pyA+IGZhdnVzOwor476hID4gdWxjZXI7CivjvpogPiBpdGNoeTsKK+O+kCA+IHVsY2VyOwor472/ID4gdWxjZXI7CivjvaEgPiBmaWVsZDsKK+O8jyA+IGFcLWJhZDsKK+O7rSA+IGNsZWFyOwor47qDID4gYVwtZG9nOwor47m7ID4gcHVwcHk7CivjubcgPiBzd2luZTsKK+O5iyA+IGFcLWNvdzsKK+O5gCA+IGFcLWNvdzsKK+O4uiA+IGFcLWNvdzsKK+O4hSA+IGFzaGVzOwor47iDID4gYVwtZG90Owor47e/ID4gZmxhbWU7Civjt6UgPiBzdGVhbTsKK+O3lCA+IGZsYW1lOwor47eRID4gc21va2U7Civjt4cgPiBncmVhdDsKK+O2syA+IGFzaGVzOwor47awID4gZmxhbWU7CivjtqYgPiBhc2hlczsKK+O2liA+IHJhcGlkOwor47W5ID4gd2F2ZXM7CivjtIMgPiB0ZWFyczsKK+OzuSA+IGZsb29kOwor47OwID4gZGl0Y2g7Civjs64gPiB1cmluZTsKK+OzmyA+IGRpcnR5Owor47KnID4gaGFpcnk7CivjsoYgPiBub2lzZTsKK+OwvCA+IGdyZWVkOwor47CqID4gc291bmQ7CivjsKUgPiBsYXVnaDsKK+OwoiA+IGNvdWdoOwor46+3ID4gZGF0ZXM7CivjrqUgPiBzYWlsczsKK+OuoiA+IGZydWl0Owor466VID4gZnJ1aXQ7CivjrLYgPiBmbGVzaDsKK+OssyA+IGxpZ2h0Owor46ymID4gYnJhdmU7CivjrJogPiBsaWdodDsKK+OslSA+IGxpZ2h0Owor46yPID4gbGlnaHQ7CivjrIogPiBsaWdodDsKK+OrvCA+IGNsZWFyOwor46u5ID4gbGlnaHQ7Civjq7YgPiBsaWdodDsKK+OrsCA+IGxpZ2h0Owor46urID4gY2xlYXI7Civjq5wgPiBsaWdodDsKK+OrmyA+IGxpZ2h0Owor46uXID4gdGhpY2s7Civjq5UgPiBsaWdodDsKK+OpoSA+IHNoYWtlOwor76itID4gY3JhbmU7CivjqJsgPiBzd2lmdDsKK+OolyA+IGFsZXJ0Owor76iNID4gdm9taXQ7CivvqIsgPiBicm9hZDsKK++ogyA+IHN1Z2FyOwor46iDID4gYVwtcm93Owor76e7ID4gcm9hc3Q7Civvp7kgPiBncmFpbjsKK++ntyA+IHN0YW5kOwor76esID4gZHJvd247Civvp6ogPiBsZWF2ZTsKK++nnSA+IGdhaW5zOwor46ebID4gdGhpY2s7Civvp5cgPiB3aGVlbDsKK++nkCA+IGNsYXNzOwor46eNID4gYWxpa2U7Civvp4sgPiBzbGlkZTsKK++mvyA+IGhhcHB5Owor76a9ID4gdXJpbmU7CivjprcgPiBicmF2ZTsKK+OmriA+IG1vbmV5Owor76ahID4gc3BlYWs7CivvpqAgPiBzcGxpdDsKK+OmoSA+IGhhcHB5Owor76afID4gZmllcnk7CivvppkgPiBsb3R1czsKK+OmmCA+IHN3aWZ0Owor76aTID4gc21lbHQ7CivjppEgPiBhbmdlcjsKK++miiA+IHBvd2VyOwor76aBID4gd29tYW47Civjpb8gPiBwcm91ZDsKK+OltyA+IHF1aWV0Owor46WyID4gYW5nZXI7Civvpa8gPiBzcGVhazsKK++loyA+IG5vcnRoOwor76WgID4gYW5nZXI7CivvpZwgPiBoYXBweTsKK+OlkyA+IGhhcHB5Owor76WPID4gdGlyZWQ7CivvpY0gPiB0ZWFyczsKK+OliiA+IGFuZ3J5Owor76WIID4gYnJpYmU7CivvpYIgPiBncmF2ZTsKK+OlgiA+IHF1aWNrOwor76S9ID4gZ3JlZW47CivvpLsgPiByb3VnaDsKK++kuiA+IGhlcm9uOwor46SxID4gYW5nZXI7CivvpK8gPiBsYWJvcjsKK++kqSA+IGNsZWFyOwor76SiID4gZmxvb2Q7CivjpKMgPiBub2JsZTsKK+OknCA+IGNyYXp5Owor76SZID4gY3JlYW07CivjpJkgPiBncmFjZTsKK++kliA+IGJyYW5kOwor76SUID4gaGFwcHk7Civjo7IgPiBzbWFsbDsKK+OjnyA+IHRvXC1nbzsKK+OjjyA+IHN0aWxsOwor46OJID4gbGFib3I7CivjopsgPiBzbWFsbDsKK+OimSA+IGFcLWh1dDsKK+OhtiA+IGR3ZWxsOwor46G0ID4gc291bmQ7CivjoZUgPiBzaGFycDsKK+OhkCA+IGZsYWdzOwor46GMID4gYVwtaGF0Owor46GHID4gY29sYXI7CivjoYQgPiBjb2xhcjsKK+OgqiA+IGdyZWF0Owor46CVID4gbG9mdHk7CivjoI0gPiBsb2Z0eTsKK+OftSA+IHJpZGdlOwor45+uID4gbG9mdHk7Civjn6AgPiByaWRnZTsKK+OfhSA+IGxvZnR5Owor45+BID4gc2hvcmU7Civjnr4gPiBhXC1udW47CivjnpkgPiB1cmluZTsKK+OelSA+IGNoaXBzOwor456SID4gbHVzdHk7Civjno8gPiBzbWFsbDsKK+OegyA+IHRpcmVkOwor4529ID4gc2hvcnQ7CivjnbogPiBzbWFsbDsKK+OdpCA+IG5pZ2h0Owor452jID4gc3RpbGw7CivjnZwgPiBuaWdodDsKK+OdliA+IHJpZ2h0Owor452VID4gcGVhY2U7CivjnY8gPiBhbG9uZTsKK+OdhyA+IHF1YWlsOwor45y9ID4gY2hpbGQ7CivjnKcgPiBwbHVtcDsKK+OcnCA+IHByb3VkOwor45uoID4gY2hhb3M7Civjm5ogPiBlcXVhbDsKK+ObgyA+IGNsZWFuOwor45uBID4gcXVpY2s7Civjmq4gPiBoYXBweTsKK+OalSA+IGdyZWF0Owor45qAID4gbG9mdHk7Civjma8gPiBza2lsbDsKK+OZpSA+IG11ZGR5Owor45mTID4gZWFydGg7CivjmYQgPiBiZWxvdzsKK+OYiyA+IHNvdW5kOwor45eFID4gYW5ncnk7CivjlqQgPiB3cmF0aDsKK+OWlCA+IHNpbGx5Owor45aPID4gYW5ncnk7CivjloAgPiBzb3VuZDsKK+OVsyA+IG5vaXN5Owor45WWID4gcGxhaW47CivjlY4gPiBjYXZlczsKK+OVgSA+IHN0aWxsOwor45S7ID4gZ3JlYXQ7Civjk7sgPiB0b3VnaDsKK+OTnSA+IGFcLWxhdzsKK+OTnCA+IHlvdW5nOwor45ObID4gbWVyaXQ7Civjk5kgPiBjcnVlbDsKK+OTlyA+IGNsZWFuOwor45OBID4gYVwtbmV0Owor45KpID4gbmFrZWQ7CivjkowgPiBhbG9uZzsKK+ORtiA+IGFuZ2VyOwor45GpID4gc21hcnQ7CivjkaggPiBncmVhdDsKK+ORpiA+IGFuZ2VyOwor45GXID4gYVwtZ29kOwor45GLID4gc21hbGw7CivjkYEgPiBzaG9ydDsKK+OQsSA+IGJ1c2h5Owor45CrID4gY3J1ZWw7CivmnIkgPiBoYXZlOwor55+lID4ga25vdzsKK+i/mSA+IHRoaXM7Civnn5wgPiBwaXR5Owor5b+ZID4gYnVzeTsKK+adpSA+IGNvbWU7Civov5EgPiBuZWFyOwor6YGTID4gcGF0aDsKK+S5nyA+IGFsc287Civml7YgPiB0aW1lOwor5bm0ID4geWVhcjsKK+eeuyA+IGxvb2s7CivovrogPiBlZGdlOwor5bCxID4ganVzdDsKK+mCoyA+IHRoYXQ7CivnlJ8gPiBsaWZlOwor6IeqID4gc2VsZjsKK+eerCA+IHdpbms7Civov4cgPiBwYXNzOwor5b6qID4gb2JleTsKK+W+niA+IGZyb207CivlvpMgPiBmcm9tOwor5aSaID4gbXVjaDsKK+WlvSA+IGdvb2Q7CivlvbwgPiB0aGF0Owor6LW3ID4gcmlzZTsKK+WPqiA+IG9ubHk7CivkvZwgPiBtYWtlOwor5b2TID4gYmVhcjsKK+W9oiA+IGZvcm07CivnnIsgPiBsb29rOwor5byAID4gb3BlbjsKK+aJiyA+IGhhbmQ7CivlvLEgPiB3ZWFrOwor5pysID4gcm9vdDsKK+WktCA+IGhlYWQ7CivnnJ8gPiByZWFsOwor6Z2iID4gZmFjZTsKK+WFrCA+IGZhaXI7CivlkIwgPiBzYW1lOwor55yeID4gcmVhbDsKK+S7jiA+IGZyb207CivliqggPiBtb3ZlOwor6ZW/ID4gbG9uZzsKK+i8iSA+IGxvYWQ7CivlsIYgPiB3aWxsOwor5L2GID4gb25seTsKK+i6qyA+IGJvZHk7Civpq5ggPiBoaWdoOwor5oqKID4gaG9sZDsKK+atpCA+IHRoaXM7Civlrp4gPiByZWFsOwor55ulID4gd2FzaDsKK+aciCA+IG1vb247Civnp40gPiBzZWVkOwor6LuNID4gYXJteTsKK+i7iiA+IGNhcnQ7Civlt7EgPiBzZWxmOwor6YOoID4gcGFydDsKK+WQjSA+IG5hbWU7Civnmq4gPiBza2luOwor5py6ID4gZGVzazsKK+e7mSA+IGdpdmU7CivnrYkgPiByYW5rOwor5bqnID4gc2VhdDsKK+W+iCA+IHZlcnk7CivmnIAgPiBtb3N0Owor5bqXID4gc2hvcDsKK+i6jSA+IHNraXA7CivotbAgPiB3YWxrOwor5ZubID4gZm91cjsKK+mXqCA+IGdhdGU7CivkuJwgPiBlYXN0Owor5bqBID4gaGFsbDsKK+ilvyA+IHdlc3Q7CivlubMgPiBmbGF0Owor55m7ID4gcmlzZTsKK+WQrCA+IGhlYXI7CivlubggPiBsdWNrOwor6Lm0ID4ga2ljazsKK+WGmyA+IGFybXk7CivkupQgPiBmaXZlOwor5bi3ID4gdGVudDsKK+WkqiA+IHZlcnk7CivluLYgPiBiZWx0Owor5bizID4gdGVudDsKK+W4ryA+IGJlbHQ7CivkvZMgPiBib2R5Owor5bitID4gc2VhdDsKK+W4jCA+IHJhcmU7CivouIogPiBsZWFwOwor5LmmID4gYm9vazsKK+S5nSA+IG5pbmU7Civot7MgPiBqdW1wOwor6LevID4gcm9hZDsKK+WRvSA+IGxpZmU7Civnl6kgPiB0aGluOwor5rS7ID4gbGl2ZTsKK+W3piA+IGxlZnQ7Civlt6MgPiBuZXN0Owor6KGoID4gc2hvdzsKK+i3nyA+IGhlZWw7CivovaYgPiBjYXJ0Owor55ebID4gcGFpbjsKK+eXlSA+IHNjYXI7Civnl5IgPiBpdGNoOwor5oSfID4gZmVlbDsKK+i2syA+IGZvb3Q7Civph5EgPiBnb2xkOwor5L2VID4gd2hhdDsKK+W2riA+IGhpZ2g7Civmm7QgPiBtb3JlOwor55aLID4gcm9sbDsKK+WBmiA+IHdvcms7CivorqEgPiBwbGFuOwor55W2ID4gYmVhcjsKK+eOiyA+IGtpbmc7CivlkIQgPiBlYWNoOwor55WZID4gc3RvcDsKK+eVjyA+IGZlYXI7CivovrkgPiBlZGdlOwor55S3ID4gbWFsZTsKK+mjjiA+IHdpbmQ7CivltJcgPiBwb3N0Owor5q+bID4gaGFpcjsKK+WzsCA+IHBlYWs7CivniLEgPiBsb3ZlOwor55OmID4gdGlsZTsKK+izoyA+IHNlbGw7Civos4MgPiByZW50Owor6LK4ID4gbGVuZDsKK+WyuCA+IGJhbms7Civnu5MgPiBrbm90Owor5bKsID4gY2FwZTsKK+a1gSA+IGZsb3c7CivosqcgPiBwb29yOwor6Z2SID4gYmx1ZTsKK+euoSA+IHBpcGU7CivosqAgPiBsb2FkOwor6L+eID4gam9pbjsKK+mYnyA+IHRlYW07CivluKYgPiBiZWx0Owor5bGVID4gb3BlbjsKK+WxkSA+IGJpdHM7CivpooYgPiBuZWNrOwor5bGIID4gYmVuZDsKK+WxhSA+IGxpdmU7CivlsL4gPiB0YWlsOwor5Y2KID4gaGFsZjsKK+WAmSA+IHdhaXQ7CivmraUgPiBzdGVwOwor5rexID4gZGVlcDsKK+WMuiA+IGFyZWE7CivlsIsgPiBzZWVrOwor5rGCID4gc2VlazsKK+eQgyA+IGJhbGw7CivlkYogPiB0ZWxsOwor5a+4ID4gaW5jaDsKK+WvpiA+IHJlYWw7Civmu6EgPiBmaWxsOwor5p2OID4gcGx1bTsKK+aBryA+IHJlc3Q7Civlr5IgPiBjb2xkOwor5a+EID4gc2VuZDsKK+iEuCA+IGZhY2U7Civlrr8gPiBzdG9wOwor5Y+WID4gdGFrZTsKK+WupCA+IHJvb207Civlrp8gPiByZWFsOwor5a6bID4gc2VlbTsKK+WtqSA+IGJhYnk7Civlub8gPiB3aWRlOwor546JID4gamFkZTsKK+eOhCA+IGRlZXA7CivngasgPiBmaXJlOwor6K6AID4gcmVhZDsKK+itvSA+IGZhbWU7CivliJkgPiBydWxlOwor6aaWID4gaGVhZDsKK+WksSA+IGxvc2U7Civmi78gPiB0YWtlOwor5pavID4gdGhpczsKK+ivuyA+IHJlYWQ7CivljIUgPiB3cmFwOwor54y2ID4gbGlrZTsKK+iQvSA+IGZhbGw7CivmtY4gPiBoZWxwOwor5ZacID4gbGlrZTsKK+isoSA+IHNpbmc7CivnvJYgPiBrbml0Owor6LCIID4gdGFsazsKK+aLiSA+IHB1bGw7CivorIAgPiBwbGFuOwor54u8ID4gd29sZjsKK+adgCA+IGtpbGw7CivmoLkgPiByb290Owor5auMID4gaGF0ZTsKK+irhyA+IHRhbGs7CivlhYsgPiBncmFtOwor54q2ID4gZm9ybTsKK+ekuiA+IHNob3c7CivlhrIgPiBzb2FyOwor6KqtID4gcmVhZDsKK+iqiSA+IGZhbWU7CivmjqggPiBwdXNoOwor56ewID4gY2FsbDsKK+ippiA+IHRlc3Q7Civlj7cgPiBtYXJrOwor5LqaID4gYXNpYTsKK+a4ryA+IHBvcnQ7CivoiKwgPiBzb3J0Owor54iqID4gY2xhdzsKK+WImiA+IGhhcmQ7CivpmYYgPiBsYW5kOwor56GuID4gc3VyZTsKK+ioiCA+IHBsYW47CivlhbcgPiB0b29sOwor5aiBID4gcG9tcDsKK+W4riA+IGhlbHA7Civnur8gPiBsaW5lOwor6KemID4gYnV0dDsKK+inkiA+IGhvcm47Civnh5IgPiBidXJuOwor6IqCID4ga25vdDsKK+eHgyA+IGJ1cm47CivlsoEgPiB5ZWFyOwor5aa7ID4gd2lmZTsKK+mcgCA+IG5lZWQ7CivphZIgPiB3aW5lOwor6ZOBID4gaXJvbjsKK+imlyA+IHBlZWs7Civpl7sgPiBoZWFyOwor5qCHID4gbWFyazsKK+WMuyA+IGN1cmU7CivopbIgPiByYWlkOwor54WuID4gY29vazsKK+WcnyA+IHNvaWw7Civova8gPiBzb2Z0Owor54WkID4gY29hbDsKK+S7hSA+IG9ubHk7CivlpZcgPiBjYXNlOwor5oi3ID4gZG9vcjsKK+eEvCA+IGJ1cm47CivpobkgPiBuZWNrOwor6IOMID4gYmFjazsKK+eEmiA+IGJ1cm47CivmmpcgPiBkYXJrOwor6aG7ID4gbXVzdDsKK+ijvSA+IG1ha2U7Civoo7ggPiBiYXJlOwor5aOyID4gc2VsbDsKK+agkSA+IHRyZWU7CivmsokgPiBzaW5rOwor6IGMID4gZHV0eTsKK+e7hiA+IGZpbmU7Civoo5wgPiBtZW5kOwor5YGcID4gc3RvcDsKK+WKqSA+IGhlbHA7CivlhrcgPiBjb2xkOwor5aKuID4gZmFsbDsKK+iHtCA+IHNlbmQ7CivmnKggPiB0cmVlOwor6KKiID4gcm9iZTsKK+aXgSA+IHNpZGU7CivngoogPiBjb29rOwor54G8ID4gYnVybjsKK+WhtSA+IGR1c3Q7CivloakgPiBzYWx0Owor5q2MID4gc29uZzsKK+WggiA+IGhhbGw7Civor5UgPiB0ZXN0Owor54GMID4gcG91cjsKK+mqjCA+IHRlc3Q7CivloYAgPiB3YWxsOwor5q2iID4gc3RvcDsKK+WgtSA+IHdhbGw7CivloKQgPiBkaWtlOwor5aCVID4gZmFsbDsKK+aBtiA+IGV2aWw7CivloIYgPiBoZWFwOwor5oWiID4gc2xvdzsKK+WghSA+IGhhcmQ7CivloIAgPiBjYXZlOwor6J+7ID4gYW50czsKK+iXjyA+IGhpZGU7CivotJ8gPiBsb2FkOwor5Z+LID4gYnVyeTsKK+a+uSA+IGNhbG07CivlnqIgPiBkaXJ0Owor6J6NID4gbWVsdDsKK+a9riA+IHRpZGU7CivlnaYgPiBmbGF0Owor5r2cID4gaGlkZTsKK+aVkSA+IHNhdmU7CivkuJ0gPiBzaWxrOwor6b2KID4gZXZlbjsKK+m8uyA+IG5vc2U7CivmvKwgPiBzb2FrOwor6byTID4gZHJ1bTsKK+awuCA+IGxvbmc7CivmvI8gPiBsZWFrOwor5b2VID4gY29weTsKK+mBhyA+IG1lZXQ7Civmu78gPiBmaWxsOwor6Ii5ID4gc2hpcDsKK+m7tCA+IG1vbGQ7Civmu7QgPiBkcmlwOwor6ZuoID4gcmFpbjsKK+ibmSA+IGZyb2c7Civmu5EgPiBzbGlwOwor6bq7ID4gaGVtcDsKK+iapCA+IGZsZWE7CivpvZAgPiBldmVuOwor5rqWID4gcnVsZTsKK+a6jCA+IHBvdXI7CivlhYUgPiBmaWxsOwor6bm/ID4gZGVlcjsKK+WvuyA+IHNlZWs7CivlroEgPiBjYWxtOwor6bm9ID4gc2FsdDsKK+aymSA+IHNhbmQ7CivljZYgPiBzZWxsOwor6aG6ID4gb2JleTsKK+iZnyA+IG1hcms7CivlloQgPiBnb29kOwor5ZmbID4gYml0ZTsKK+iJryA+IGdvb2Q7CivlnZogPiBoYXJkOwor5ZmCID4gbWVldDsKK+aLjSA+IGNsYXA7CivmjokgPiB0dXJuOwor5riIID4gaGVscDsKK+WTrSA+IHdlZXA7CivlmIYgPiBzaWdoOwor5Y2IID4gbm9vbjsKK+WNoSA+IGNhcmQ7Civpm6ogPiBzbm93Owor5re1ID4gZ3VsZjsKK+a3oSA+IHdlYWs7Civll58gPiBzaWdoOwor5reRID4gZ29vZDsKK+iXjSA+IGJsdWU7Civmt4sgPiBkcmlwOwor5ra8ID4gY29vbDsKK+i9vSA+IGxvYWQ7CivliLogPiBzdGFiOwor6JaqID4gZnVlbDsKK+mUgCA+IG1lbHQ7CivpsbwgPiBmaXNoOwor5ZaaID4gY2FsbDsKK+WWmCA+IHBhbnQ7Civnm5ggPiB0cmF5Owor6JaUID4gcm9zZTsKK+WWhyA+IGhvcm47CivoloQgPiB0aGluOwor5ZW8ID4gd2VlcDsKK+aetiA+IHJhY2s7CivmtbggPiBzb2FrOwor5qy+ID4gaXRlbTsKK+a1qiA+IHdhdmU7CivolakgPiBwb25kOwor5rSqID4gdmFzdDsKK+mVhyA+IHRvd247CivmtYQgPiBwdXJlOwor5peFID4gdHJpcDsKK+WUviA+IHNwaXQ7CivllLEgPiBzaW5nOwor6JS1ID4gaGlkZTsKK+WUryA+IG9ubHk7CivmtKkgPiBsZWFrOwor5rSeID4gY2F2ZTsKK+mqqCA+IGJvbmU7CivmtJcgPiB3YXNoOwor5ZSWID4gZHVtYjsKK+m0iSA+IGNyb3c7CivllIcgPiBsaXBzOwor5rOzID4gZGl2ZTsKK+WTsiA+IHdpc2U7Civlk6kgPiBtaWxlOwor5aKZID4gd2FsbDsKK+WcoyA+IGhvbHk7Civps6UgPiBiaXJkOwor6LeDID4gc2tpcDsKK+aZkyA+IGRhd247Civms4QgPiBsZWFrOwor6ZqQID4gaGlkZTsKK+iSvCA+IGJsdWU7CivmgZAgPiBmZWFyOwor5rK8ID4gbGFrZTsKK+S7mCA+IGdpdmU7CivljoUgPiBoYWxsOwor5ZKsID4gYml0ZTsKK+iFvyA+IGxlZ3M7CivmspYgPiBwb3VyOwor56GsID4gaGFyZDsKK+ayiCA+IHNpbms7CivllK4gPiBzZWxsOwor6YGXID4gbG9zZTsKK+aOoiA+IGZpbmQ7CivokawgPiBidXJ5Owor57yTID4gc2xvdzsKK+iRpiA+IHJlZWQ7CivmsaAgPiBwb29sOwor54OnID4gYnVybjsKK+iRiSA+IGxlYWY7CivmnZ8gPiBiaW5kOwor5ZGGID4gZHVsbDsKK+WQuyA+IGtpc3M7CivlkLkgPiBibG93Owor5LyRID4gcmVzdDsKK+WPuSA+IHNpZ2g7CivmsI8gPiBjbGFuOwor562+ID4gc2lnbjsKK+awiCA+IGZlbHQ7CivlpbYgPiBtaWxrOwor5q+sID4gYmFsbDsKK+iPqSA+IGhlcmI7Civlj6IgPiBidXNoOwor5oyCID4gaGFuZzsKK+iIqiA+IHNhaWw7Civmr5ggPiBoZWxwOwor5ouzID4gZmlzdDsKK+S5mCA+IHJpZGU7CivoooEgPiByb2JlOwor5Z2AID4gc2l0ZTsKK+avhiA+IGJlYXQ7Civmrr8gPiBoYWxsOwor5q66ID4ga2lsbDsKK+aguCA+IHNlZWQ7CivooaUgPiBtZW5kOwor6LWeID4gaGVscDsKK+S6piA+IGFsc287CivmrbMgPiB5ZWFyOwor5p+UID4gc29mdDsKK+atqSA+IHN0ZXA7Civmg5wgPiBwaXR5Owor6a2aID4gZmlzaDsKK+atjiA+IHNpZ2g7CivprYIgPiBzb3VsOwor5LmUID4gdGFsbDsKK+eyriA+IGZvb2Q7CivojKsgPiB2YXN0Owor6LCLID4gcGxhbjsKK+aVjyA+IGZhc3Q7CivojI4gPiBzdGVtOwor6Zu2ID4gemVybzsKK+iNoSA+IHBvbmQ7Civli74gPiBob29rOwor54q5ID4gbGlrZTsKK+mrriA+IGhhaXI7Civpq6ogPiBoYWlyOwor5LmDID4gdGhlbjsKK+aKrCA+IGxpZnQ7Civpq5QgPiBib2R5Owor6IuUID4gbW9zczsKK+WLlSA+IG1vdmU7CivlkK8gPiBvcGVuOwor5YaSID4gcmlzazsKK+eptyA+IHBvb3I7CivmqqMgPiBtYXN0Owor5L6nID4gc2lkZTsKK+aXpiA+IGRhd247Civnuq8gPiBwdXJlOwor6ZetID4gc2h1dDsKK+WHiSA+IGNvb2w7CivnopcgPiBib3dsOwor5YmlID4gcGVlbDsKK+a7miA+IHR1cm47CivmtqYgPiBzb2Z0Owor5YmbID4gaGFyZDsKK+mplyA+IHRlc3Q7CivliYcgPiBydWxlOwor6JOdID4gYmx1ZTsKK+aouSA+IHRyZWU7Civom4sgPiBlZ2dzOwor5L+DID4gdXJnZTsKK+minCA+IGZhY2U7CivotKsgPiBwb29yOwor5p2wID4gaGVybzsKK+iInyA+IGJvYXQ7CivpqJMgPiB0ZXN0Owor5oGLID4gbG92ZTsKK+i/nyA+IGxhdGU7CivnqbQgPiBjYXZlOwor6LWWID4gcmVseTsKK+mnmyA+IHNhaWw7Civpp5IgPiBjb2x0Owor5YeMID4gcHVyZTsKK+S5jCA+IGNyb3c7CivlspcgPiBwb3N0Owor6ZO6ID4gc2hvcDsKK+mmtCA+IHRhbWU7CivkvI0gPiBmaXZlOwor6LqyID4gaGlkZTsKK+eusSA+IGNhc2U7CivluJAgPiB0ZW50Owor6IadID4ga25lZTsKK+iGmiA+IHNraW47CivmgokgPiBrbm93Owor5YaMID4gYm9vazsKK+WGiiA+IGJvb2s7Civnm4ggPiBmaWxsOwor5ouWID4gZHJhZzsKK+aYjyA+IGR1c2s7CivmiJIgPiB3YXJuOwor6aG1ID4gcGFnZTsKK+WwmCA+IGR1c3Q7CivohKMgPiBsaXBzOwor5LqVID4gd2VsbDsKK+axqiA+IHZhc3Q7CivohIcgPiByaWJzOwor6ISFID4gcmliczsKK+aBsCA+IGp1c3Q7CivmpIAgPiBib3dsOwor5o+PID4gY29weTsKK+S5jyA+IGxhY2s7Civog54gPiB3b21iOwor5qOaID4gdGVudDsKK+aAnCA+IHBpdHk7CivkvbMgPiBnb29kOwor6bifID4gYmlyZDsKK+WDhSA+IG9ubHk7CivpoqggPiB3aW5kOwor5qKoID4gcGVhcjsKK+W8ryA+IGJlbmQ7Civkuo8gPiBsb3NlOwor5YKRID4gaGVybzsKK+mFuCA+IHRhcnQ7Civogb0gPiBoZWFyOwor6IG3ID4gZHV0eTsKK+ahtiA+IHBhaWw7CivogbQgPiBoZWFyOwor55imID4gdGhpbjsKK+WBtCA+IHNpZGU7Civnu6kgPiBzcGluOwor6IGeID4gaGVhcjsKK+iBliA+IGhvbHk7CivpoZQgPiBmYWNlOwor6aGPID4gZmFjZTsKK+eJtSA+IGRyYWc7CivpoLwgPiByZWx5Owor56efID4gcmVudDsKK+mguCA+IG5lY2s7Civmia0gPiB0dXJuOwor6aCtID4gaGVhZDsKK+aTpiA+IHdpcGU7CivmrrcgPiBtYW55Owor6aCaID4gbmVjazsKK+mgmCA+IG5lY2s7Civnm7wgPiBsb29rOwor5ZCfID4gc2luZzsKK+iAlSA+IHBsb3c7Civoi40gPiBibHVlOwor6aCGID4gb2JleTsKK+mghSA+IG5lY2s7Civlro8gPiB3aWRlOwor6aCBID4gcGFnZTsKK+WogyA+IGJhYnk7CivmmpYgPiB3YXJtOwor6ZSBID4gbG9jazsKK+egjSA+IGhhY2s7Civkv4IgPiBiaW5kOwor5oyoID4gbmVhcjsKK+aFiCA+IGtpbmQ7CivnvrkgPiBzb3VwOwor576uID4gc291cDsKK+merSA+IHdoaXA7CivnvqggPiBlbnZ5Owor56qdID4gbmVzdDsKK+adnCA+IHN0b3A7CivmkqQgPiBvbWl0Owor5L6GID4gY29tZTsKK+adsSA+IGVhc3Q7CivnrbkgPiBjaGlwOwor56iAID4gcmFyZTsKK+adliA+IGNhbmU7Civmi6ggPiBtb3ZlOwor6LiiID4ga2ljazsKK+i/gSA+IG1vdmU7CivkvYcgPiB3YWl0Owor6KKtID4gcmFpZDsKK+mptiA+IHNhaWw7CivpnLAgPiBoYWlsOwor5oOnID4gZmVhcjsKK+e6vSA+IGtub3Q7CivkuJsgPiBidXNoOwor5oKgID4gbG9uZzsKK+abvCA+IGxvbmc7Civmm7ggPiBib29rOwor57ygID4gd3JhcDsKK+a7iyA+IGdyb3c7CivnoqcgPiBqYWRlOwor5ZSkID4gY2FsbDsKK+iDgSA+IHJpYnM7CivosLEgPiBsaXN0Owor6ZqxID4gaGlkZTsKK+S4mCA+IGhpbGw7Civkup4gPiBhc2lhOwor57qSID4gd3JhcDsKK+adhiA+IHBvbGU7Civnuo8gPiB3cmFwOwor6ZqKID4gdGVhbTsKK+aCrCA+IGhhbmc7CivpmoggPiBjb3ZlOwor5bSUID4gaGlnaDsKK+e6giA+IGVkaXQ7CivllIkgPiBhbGFzOwor5pqBID4gZGF3bjsKK+esvCA+IGNhZ2U7CivpmbggPiBsYW5kOwor57mqID4gZHJhdzsKK+e5qSA+IHJvcGU7CivmhaggPiBzaWdoOwor5LmXID4gcmlkZTsKK+e7syA+IHJvcGU7CivmmYIgPiB0aW1lOwor55+/ID4gbWluZTsKK+mBoyA+IHNlbmQ7CivplZYgPiBkYXJ0Owor6YG1ID4gb2JleTsKK+WFhiA+IG9tZW47CivpkpMgPiBmaXNoOwor5oqrID4gd2VhcjsKK+aYhyA+IHJpc2U7CivnuIQgPiByb3BlOwor5piCID4gcmlzZTsKK+e3qSA+IHNsb3c7Civnt6ggPiBrbml0Owor5oqEID4gY29weTsKK+WAuiA+IGRlYnQ7CivogqQgPiBza2luOwor5q2HID4gcmVzdDsKK+mWiyA+IG9wZW47CivplokgPiBzaHV0Owor5paJID4gZXZlbjsKK+aWgyA+IGtpbGw7CivnvZUgPiByYXJlOwor6ZaAID4gZ2F0ZTsKK+mVtyA+IGxvbmc7CivotLcgPiBsZW5kOwor57W1ID4gZHJhdzsKK+miiCA+IG5lY2s7CivntbIgPiBzaWxrOwor6ISWID4gbmVjazsKK+WgoSA+IGZvcnQ7CivntaggPiBzaWxrOwor57WmID4gZ2l2ZTsKK+i1kCA+IGdpdmU7CivpooIgPiBsYXVkOwor57WQID4ga25vdDsKK+egliA+IHRpbGU7CivntYYgPiBsb29wOwor5ZORID4gZHVtYjsKK+e0sCA+IGZpbmU7Civmu6kgPiBiYW5rOwor6ZKJID4gbmFpbDsKK+WThCA+IGNvYXg7Civpk4MgPiBiZWxsOwor57SUID4gcHVyZTsKK+e0kCA+IGtub3Q7CivntIsgPiBsaW5lOwor5ouaID4gcmlzazsKK+ezuCA+IHNpbGs7Civns6cgPiBmb29kOwor5aWRID4gZGVlZDsKK+aHkiA+IGxhenk7CivnjI4gPiBodW50Owor5bWpID4gaGlnaDsKK+ebkCA+IHNhbHQ7CivmkbogPiBmb2xkOwor57GgID4gY2FnZTsKK+mZtSA+IGhpbGw7Civoo7kgPiB3cmFwOwor57uYID4gZHJhdzsKK+mQtSA+IGlyb247CivpkKEgPiBpcm9uOwor56+tID4gY2FnZTsKK+evpCA+IGRlZXA7CivmjL0gPiBwdWxsOwor57K5ID4gcHVyZTsKK+evgCA+IGtub3Q7CivmjqMgPiBkcmFnOwor5o6bID4gaGFuZzsKK+mOliA+IGxvY2s7CivnrosgPiBub3RlOwor5o2yID4gY3VybDsKK+azvCA+IHBvdXI7Civnp4MgPiBiYWxkOwor6YyyID4gY29weTsKK+e7kSA+IGJpbmQ7CivpuK0gPiBkdWNrOwor5o6AID4gbGlmdDsKK+e6uSA+IGxpbmU7Civotp8gPiB0aW1lOwor5ZC8ID4gcm9hcjsKK+equiA+IHBlZXA7CivnqrYgPiBwb29yOwor5Y+gID4gcGlsZTsKK+WVuCA+IHJvYXI7Civnqq4gPiBwb29yOwor6YqRID4gbWlsbDsKK+WptCA+IGJhYnk7CivouqwgPiBib2R5Owor5q+ZID4ga2lsbDsKK+mAuCA+IGZsZWU7CivnkLwgPiBqYWRlOwor6YmEID4gaXJvbjsKK+aMqiA+IG1vdmU7CivmmYwgPiBub29uOwor5oi4ID4gZG9vcjsKK+mItCA+IGJlbGw7CivnqLEgPiBjYWxsOwor6LSxID4gbWVhbjsKK+eoriA+IHNlZWQ7CivpkqkgPiBob29rOwor5oiAID4gbG92ZTsKK+aHvCA+IGZlYXI7Civmh7ggPiBoYW5nOwor6YejID4gZmlzaDsKK+mHmCA+IG5haWw7CivpuKYgPiBjcm93Owor54uuID4gbGlvbjsKK+WmriA+IG1haWQ7Civnpr8gPiBiYWxkOwor56qRID4ga2lsbjsKK+WhmCA+IHBvbmQ7CivnuqQgPiBmaW5lOwor6YarID4gY3VyZTsKK+aGqSA+IHJlc3Q7CivmhpAgPiBwaXR5Owor5oaOID4gaGF0ZTsKK+e+oSA+IGVudnk7Civmhb4gPiBsdXN0Owor56W3ID4gcHJheTsKK+iIhiA+IGNhcnQ7CivnpYggPiBwcmF5Owor5aupID4gc29mdDsKK+i5hCA+IGhvb2Y7CivmhJsgPiBsb3ZlOwor6YSZID4gbWVhbjsKK+aDoSA+IGV2aWw7CivmsqcgPiBibHVlOwor56K6ID4gc3VyZTsKK+aCqiA+IGV2aWw7CivluIYgPiBzYWlsOwor5ra1ID4gc29hazsKK+mCiiA+IGVkZ2U7CivmvqEgPiB3YXNoOwor6YG6ID4gbG9zZTsKK+mBsiA+IGxhdGU7Civng6QgPiBiYWtlOwor5bO7ID4gaGlnaDsKK+mBjiA+IHBhc3M7CivpgYsgPiBsdWNrOwor5bCsID4gbGltcDsKK+mBhSA+IGxhdGU7CivpgYEgPiBoaWRlOwor6YCxID4gd2VlazsKK+S9kSA+IGhlbHA7CivpgKMgPiBqb2luOwor5oCgID4gaWRsZTsKK+mAmSA+IHRoaXM7CivnoIIgPiBzYW5kOwor6IO2ID4gZ2x1ZTsKK+iwoyA+IHNpbmc7CivmorMgPiBjb21iOwor56WBID4gcHJheTsKK+WVpCA+IGJlZXI7Civpk7ggPiBtZWx0Owor6LqvID4gYm9keTsKK+mFvyA+IGJyZXc7CivmjaMgPiBodWxsOwor546rID4gcm9zZTsKK+WZoiA+IG1vYW47CivnurogPiBzcGluOwor56qfID4gaG9sZTsKK+WFkSA+IGNhc2g7CivlhqUgPiBkYXJrOwor6KeFID4gc2VlazsKK+ayuCA+IGJvaWw7CivmiYEgPiBmbGF0Owor55yoID4gd2luazsKK+eYviA+IHJhc2g7Civpu68gPiBkYXJrOwor5aaeID4gZ2lybDsKK+S/jyA+IGxpa2U7Civlrb0gPiBldmlsOwor5byKID4gZXZpbDsKK+WmgyA+IHdpZmU7Civlo6QgPiBzb2lsOwor57+UID4gc29hcjsKK+W3qSA+IGJpbmQ7CivluJwgPiBmbGFnOwor6JW+ID4gYnVkczsKK+mThSA+IGxlYWQ7Civnu5IgPiBzaWxrOwor56qlID4gcGVlcDsKK+mUoyA+IGdvbmc7CivmkrwgPiBtb3ZlOwor5ZemID4gc3VjazsKK+i9tCA+IGF4bGU7CivmtpUgPiB0ZWFyOwor56yDID4gZGVlcDsKK+eqjSA+IGhvbGU7CivmibMgPiBwdWxsOwor6YGPID4gc3RvcDsKK+WQhiA+IGJhd2w7CivnhpQgPiBtZWx0Owor6IGLID4gZGVhZjsKK+WLnyA+IGxldnk7CivnlqQgPiBzY2FyOwor6JqBID4gYW50czsKK+aCryA+IHBpdHk7Civng5ggPiBiYWtlOwor54mfID4gbWFrZTsKK+W0rSA+IGhpZ2g7Civlt6IgPiBuZXN0Owor5rKuID4gc3RvcDsKK+a5myA+IGRlZXA7CivmmaYgPiBkYXJrOwor6am5ID4gY29sdDsKK+ivqyA+IHdhcm47CivloqkgPiBoZWFwOwor5beNID4gaGlnaDsKK+aUkiA+IHNhdmU7Civnu4ogPiBsb29wOwor5oeIID4gaWRsZTsKK+autCA+IGJlYXQ7CivnmoIgPiBzb2FwOwor6J+5ID4gY3JhYjsKK+e7tyA+IGJpbmQ7CivljL8gPiBoaWRlOwor5ZSgID4gY2hhdDsKK+iLhyA+IHJlZWQ7Civmi70gPiBkcmFnOwor54O5ID4gYm9pbDsKK+WVgyA+IGduYXc7CivnvpQgPiBsYW1iOwor6ZSIID4gcnVzdDsKK+S6oiA+IGhpZ2g7CivogosgPiByaWJzOwor6KGyID4gbWVuZDsKK+aOkCA+IGhvbGQ7Civmh6YgPiB3ZWFrOwor6IWTID4gY2FsZjsKK+W9tyA+IGxpa2U7CivpqqEgPiBtdWxlOwor6YaHID4gcmljaDsKK+mpryA+IHRhbWU7CivnuqwgPiB3b29mOwor54qBID4gcGxvdzsKK+aLryA+IGhlbHA7CivpvpogPiBnaXZlOwor6JukID4gY2xhbTsKK+aIriA+IGtpbGw7Civmr6EgPiBmZWx0Owor5ZKAID4gc3VjazsKK+WRsSA+IHdhaWw7CivmiI4gPiBhcm1zOwor6JS8ID4gbHVzaDsKK+iMuCA+IHNvZnQ7CivnpIEgPiByZWVmOwor6ZepID4gYm9sdDsKK+a2pCA+IHdhc2g7CivmuI0gPiBzb2FrOwor6LebID4gbGFtZTsKK+ifhiA+IGZyb2c7CivlgYwgPiB0aHVzOwor6YKRID4gYXJlYTsKK+WMviA+IGZsYXQ7CivnrLogPiBub3RlOwor566NID4gaG9vcDsKK+WZrCA+IGJpdGU7Civon6AgPiBjb2lsOwor6LWBID4gcmVudDsKK+iFjCA+IHNhbHQ7CivmjoIgPiBoZWZ0Owor6YGQID4gYWZhcjsKK+eUrCA+IHBhdGg7Civlg64gPiBwYWdlOwor5Z6bID4gaGVhcDsKK+WQoCA+IGJhcms7CivouLUgPiBoZWVsOwor6Ju+ID4gbW90aDsKK+iAmCA+IHdlZWQ7CivmmoQgPiB3YXJtOwor6J6DID4gY3JhYjsKK+WVlSA+IHdhaWw7Civon74gPiB0b2FkOwor562PID4gcmFmdDsKK+exvSA+IHNlZWQ7CivnioogPiBjYWxmOwor54WmID4ga2luZDsKK+iHiiA+IHJhbms7CivmkqwgPiBsaWZ0Owor5q+XID4gaGVscDsKK+i5vyA+IGxlYXA7CivlkoYgPiByb2FyOwor6bKkID4gY2FycDsKK+i+lSA+IGF4bGU7CivngJogPiB2YXN0Owor6IqLID4gdGFybzsKK+mbuSA+IGhhaWw7CivpuaogPiB3cmVuOwor6aq8ID4gYm9uZTsKK+iOmCA+IGxvbmc7CivosKcgPiBjYWxtOwor6JyVID4gbW9sdDsKK+eEiiA+IHdlbGQ7CivogJkgPiByYWtlOwor57yEID4gc2VhbDsKK+a8qSA+IGVkZHk7CivppbUgPiBiYWl0Owor6L6NID4gc3RvcDsKK+iwkSA+IGplZXI7CivmgYEgPiB0aGF0Owor5YKpID4gcmljaDsKK+eYoCA+IHRoaW47CivltZggPiBoaWdoOwor5bOlID4gaGlnaDsKK+mShSA+IGdvbGQ7Civmua4gPiBidXJ5Owor6aKPID4gY2hpbjsKK+mTjiA+IGJlbGw7CivolLcgPiByb3NlOwor6LG6ID4gd29sZjsKK+eGqCA+IGlyb247CivlkbcgPiBzdWNrOwor6ZezID4gZ2F0ZTsKK+iKriA+IHRpbnk7CivpmaggPiBmYWxsOwor55KoID4gZ2VtczsKK+aztSA+IHB1bXA7Civnv7EgPiBzb2FyOwor5oiVID4ga2lsbDsKK+iOkyA+IG1vc3M7CivosYwgPiBwZWFzOwor5aCRID4gbW9hdDsKK+a9vCA+IGhpZ2g7CivnlrUgPiBmbGF3Owor6L+kID4gd2luZDsKK+aAtSA+IGZlYXI7CivmpoggPiBwYWxtOwor5YSGID4gd2FybjsKK+WXpSA+IHJvYXI7CivnpLQgPiBmaWxsOwor6ayDID4gbWFuZTsKK+WykCA+IGhpZ2g7CivllbsgPiBvbmx5Owor5ZKdID4gaGlzczsKK+aPhCA+IGxpZnQ7CivmvbggPiB3ZWVwOwor6K60ID4gc2luZzsKK+i2hCA+IHdlYWs7CivpgosgPiByYWdzOwor6IOkID4gaGVpcjsKK+agiSA+IGNvbWI7CivnspUgPiBsZWVzOwor6aKUID4gY2hpbjsKK+WVriA+IGJpdGU7CivovbIgPiBheGxlOwor5a2xID4gd2VhazsKK+aMniA+IGZsb2c7CivplasgPiBsYW1wOwor6IenID4gZ29vZDsKK+m5nCA+IGR1Y2s7CivmmJUgPiBkYXduOwor6ZS3ID4gaGlnaDsKK+mThCA+IG1lbHQ7CivovrYgPiB3YWxrOwor6ZiEID4gbG90czsKK+mUjCA+IHppbmM7CivojbsgPiByZWVkOwor5ZaZID4gYmVhazsKK+icjSA+IHRvYWQ7CivnvKIgPiBoYW5nOwor5p+iID4gcm9vdDsKK+eqoCA+IG5lc3Q7CivogpsgPiBhbnVzOwor6KqKID4gY29weTsKK+i3jiA+IHNsaXA7CivogakgPiBkZWFmOwor55eCID4gc2NhYjsKK+m4oiA+IGtpdGU7CivmirsgPiBwdWxsOwor5rKkID4gc29hazsKK+a2vyA+IGRyaXA7CivniaYgPiB0YWlsOwor54y3ID4gcGxhbjsKK+WiiSA+IHdhbGw7CivmmrkgPiByaXNlOwor6ZexID4gZ2F0ZTsKK+i9rSA+IHlva2U7CivlvK0gPiBzdG9wOwor5rS1ID4gdHJ1ZTsKK+eTryA+IGJvd2w7Civmv6AgPiBtb2F0Owor5ZypID4gZGlrZTsKK+e+uCA+IHdlYWs7Civnma8gPiB0aGluOwor55iiID4gc2NhcjsKK+W5hCA+IHRlbnQ7Civms4UgPiBzd2ltOwor55++ID4gYWx1bTsKK+iaqSA+IHdvcm07CivpuLcgPiBoYXdrOwor6LmHID4gbGFtZTsKK+iAiyA+IGFnZWQ7Civoi5IgPiBsdXNoOwor6YCLID4gZmxlZTsKK+iXkyA+IG1vc3M7CivprLsgPiBzZWxsOwor5rOrID4gd2VlcDsKK+WVrSA+IHNpbmc7CivlnaggPiBsdW1wOwor6KC5ID4gbW90aDsKK+eWsSA+IGFjbmU7CivplJIgPiBsb2NrOwor5pqdID4gZGFyazsKK+eFiiA+IHdhcm07CivniKggPiBvdmVuOwor5ZudID4gYmFieTsKK+WeqSA+IGhvbHk7CivmgLwgPiBoYXRlOwor5bS0ID4gaGlnaDsKK+aLiiA+IHNsYXA7CivmiYwgPiBoYW5kOwor6ZKkID4gbG9jazsKK+aoryA+IG1hc3Q7Civpqp8gPiBnZWxkOwor54e5ID4gZmlyZTsKK+mmkCA+IGZvb2Q7CivlnLkgPiB0b21iOwor6b6IID4gZ3VtczsKK+iciiA+IGNsYW07Civnl5YgPiBkdW1iOwor5q2GID4gbGlrZTsKK+i1iSA+IGdpdmU7Civpk6MgPiBtaWxsOwor54GPID4gdmFzdDsKK+eYmSA+IGl0Y2g7Civpl7wgPiBkb29yOwor5Z2MID4gZHVzdDsKK+akpCA+IHRyZWU7CivpmIsgPiBmZXVkOwor5bWvID4gaGlnaDsKK+mFsCA+IGFjeWw7CivnmJcgPiBidXJ5Owor55ajID4gd2FydDsKK+epkSA+IGZhcm07Civmp44gPiByYWZ0Owor5qG0ID4gcmFmdDsKK+a6jyA+IHBvb2w7CivnpLsgPiBjdWx0Owor5qOwID4gZmxvZzsKK+eLtyA+IHJhc2g7CivokrkgPiByZWVkOwor5L2kID4ga2F3YTsKK+m6uCA+IGJyYW47CivpuLEgPiBraXRlOwor57yrID4gZHJhdzsKK+e6oSA+IGJlbmQ7CivltawgPiBoaWdoOwor6I+WID4gaXJpczsKK+aEjSA+IHBpdHk7Civlq7EgPiBsYWR5Owor6I6oID4gaGVyYjsKK+iwnSA+IGJyYWc7CivmsJYgPiBuZW9uOwor6aKbID4gZ29vZDsKK+eHoCA+IHdhcm07CivmvbQgPiBwb25kOwor5aCZID4gYnVyeTsKK+malyA+IGhpZ2g7CivkuL8gPiBsaW5lOwor6bKuID4gY2FycDsKK+i3liA+IHNvbGU7CivomosgPiBnbmF0Owor5rGUID4gbmVhcjsKK+eXpCA+IGFjbmU7CivotLYgPiBnaXZlOwor57qfID4gc2lsazsKK+S+kSA+IGhlbHA7CivogKogPiBwbG93Owor6KecID4gYmVhazsKK+etoiA+IHJha2U7CivmnJAgPiB3YXJtOwor6KeHID4gcGVlazsKK+aqlyA+IHRyZWU7Civoj6EgPiBidWRzOwor5YG+ID4gcnVpbjsKK+mauSA+IGJpcmQ7CivoiKEgPiBib2F0Owor55aSID4gc2ljazsKK+WZjSA+IGNoZXc7Civln50gPiBiYW5rOwor6bKpID4gY2FycDsKK+mykiA+IGNsYW07CivopZ4gPiBmb2xkOwor54GsID4gZmlyZTsKK+iEkiA+IG9wZW47Civmn5kgPiBjYWdlOwor5rmUID4gd2FzaDsKK+a0syA+IGRhbXA7CivlsKIgPiB3ZWFrOwor6aufID4gaGFpcjsKK+mzjiA+IHNvbGU7CivoiZogPiBzaGlwOwor6bmpID4gd3JlbjsKK+eCsSA+IHNvb3Q7CivohqogPiBwb3JrOwor5qCKID4gY2FnZTsKK+e7siA+IGNvcmQ7CivlroAgPiByb29mOwor6Ze2ID4gZG9vcjsKK+eMiiA+IGxpb247CivlsrUgPiBoaWxsOwor5Y2pID4gc2VhbDsKK+ivjiA+IGJlbmQ7CivlgK4gPiBiYXJlOwor6b6UID4gZ2l2ZTsKK+m9riA+IGJpdGU7CivpvacgPiBiaXRlOwor6b2mID4gZ3VtczsKK+m9lyA+IGd1bXM7CivpvZUgPiBnbmF3Owor6bybID4gZHJ1bTsKK+m8liA+IGRydW07Civpu7YgPiBtb2xlOwor6bqpID4gYnJhbjsKK+m6myA+IGZhd247CivpupogPiBidWNrOwor6bqRID4gZmF3bjsKK+m6jCA+IHN0YWc7CivpuoMgPiB0aWxsOwor6bmOID4gYmlyZDsKK+m5hiA+IG15bmE7Civpt68gPiB3cmVuOwor6bemID4gd3JlbjsKK+m3mSA+IGhhd2s7Civpt5UgPiBjYWxsOwor6baxID4gc29hcjsKK+m2qSA+IGR1Y2s7CivptoMgPiBoYXdrOwor6baCID4gaGF3azsKK+m1ryA+IGJpcmQ7CivptYQgPiBraXRlOwor6bSoID4gZHVjazsKK+m0nyA+IGtpdGU7CivptIQgPiBkdWNrOwor6bO3ID4gYmlyZDsKK+mztiA+IGtpdGU7Civps4sgPiBjYXJwOwor6bK8ID4gZmlzaDsKK+myiyA+IGNhcnA7CivpsoYgPiBzb2xlOwor6bCoID4gc29sZTsKK+mvqiA+IGNhcnA7Civpr4kgPiBjYXJwOwor6a+IID4gZmlzaDsKK+mvhyA+IGNhcnA7CivprpogPiBjbGFtOwor6a6SID4gY2FycDsKK+muhiA+IGZpc2g7CivprYsgPiBiZWFyOwor6ayuID4gbG90czsKK+msqSA+IGZldWQ7CivprJEgPiBsb25nOwor6aueID4gaGlnaDsKK+mpmCA+IG11bGU7CivpqL4gPiBtdWxlOwor6ai4ID4gZ2VsZDsKK+moryA+IGxvdWQ7CivpqKMgPiBtYW5lOwor6ae9ID4gZ3JleTsKK+mntCA+IGRydW07CivppYwgPiBmZWVkOwor6aWIID4gZm9vZDsKK+mkjCA+IGJhaXQ7CivppIcgPiBmb29kOwor6aOhID4gbWVhbDsKK+mjjCA+IHdpbmQ7Civpor8gPiBzYWlsOwor6aK6ID4gc29hcjsKK+mhkyA+IGdvb2Q7CivpoLcgPiBjaGluOwor6aCuID4gd2FzaDsKK+mgpiA+IGNoaW47CivpoIwgPiBsYXVkOwor6aCIID4gbXVzdDsKK+meuSA+IHNraW47Civpnp8gPiBza2luOwor6Z6ZID4gZmluZTsKK+mejyA+IGJpbmQ7CivpnokgPiBkcnVtOwor6Z6AID4gZHJ1bTsKK+mdkSA+IGJsdWU7CivpnKQgPiBkcmlwOwor6ZyjID4gZmFsbDsKK+mcoiA+IGR1c3Q7CivpmpUgPiBmYWxsOwor6ZqEID4gZGlrZTsKK+mYpCA+IGhpbGw7CivpmJ4gPiB2ZWluOwor6ZelID4gZG9vcjsKK+mXoiA+IG9wZW47Civpl5MgPiBvcGVuOwor6ZeIID4gZ2F0ZTsKK+mXhiA+IGJvc3M7Civplp8gPiBoaWRlOwor6ZaOID4gZ2F0ZTsKK+mWjCA+IGRvb3I7CivplocgPiBzaHV0Owor6ZaCID4gYm9sdDsKK+mVuCA+IGxvbmc7CivplakgPiBwaWNrOwor6ZWVID4gZnVzZTsKK+mTtCA+IGdvbmc7CivpkbwgPiBnb25nOwor6ZGiID4gZmlsZTsKK+mRoCA+IG1lbHQ7CivpkZsgPiBtaW5lOwor6ZGEID4gbWVsdDsKK+mQuCA+IGJlbGw7CivpkKkgPiBsZW5zOwor6ZCZID4gbGFtcDsKK+mQiyA+IGdvbmc7CivpkIQgPiBiZWxsOwor6Y+9ID4gcnVzdDsKK+mPsCA+IGNvaW47Civpj6UgPiBydXN0Owor6Y+iID4gZGFydDsKK+mOuyA+IGxvY2s7Civpjq4gPiB0b3duOwor6Y6tID4gdG93bjsKK+mOlCA+IGZ1c2U7CivpjZQgPiBoaWdoOwor6YyEID4gY29weTsKK+mLsyA+IG1lbHQ7Civpi5ogPiBpcm9uOwor6YuGID4gZ29sZDsKK+mKuSA+IHJ1c3Q7CivpircgPiBtZWx0Owor6YqVID4gaXJvbjsKK+mJsSA+IG1pbmU7CivpiaQgPiBob29rOwor6YisID4gYmVsbDsKK+mIkCA+IGxvY2s7CivpiI4gPiBob29rOwor6YiGID4gbGVhZDsKK+mHgCA+IGJyZXc7CivphrggPiBicmV3Owor6YSRID4ga2ljazsKK+mCiSA+IGVkZ2U7CivpgbsgPiBtZWV0Owor6YG3ID4gbW92ZTsKK+mBnyA+IGxhdGU7Civov7ogPiB0aGVuOwor6L+aID4gdmVyeTsKK+i/hiA+IHdpbmQ7CivovrUgPiB3YWxrOwor6L2dID4gZW52eTsKK+i9lyA+IGZhaWw7CivovYwgPiBzbGVkOwor6L2FID4gYXhsZTsKK+i8vyA+IGNhcnQ7CivovLQgPiBzbGVkOwor6LyfID4gc3RvcDsKK+i7uyA+IGF4bGU7Civou7ggPiBheGxlOwor6LulID4geW9rZTsKK+i7nyA+IHNvZnQ7Civou5sgPiB5b2tlOwor6LuGID4gYm9keTsKK+i7gCA+IGJvZHk7Civour8gPiB0YWxsOwor6Lq2ID4gYmFyZTsKK+i6tCA+IHRhbGw7CivourMgPiBib2R5Owor6LqxID4gaGlkZTsKK+i6sCA+IGJvZHk7CivouqUgPiBsZWFwOwor6LqSID4gd2FsazsKK+i5oiA+IGhvb2Y7CivouY8gPiBob29mOwor6Li0ID4gbGVhcDsKK+i4rSA+IGhlZWw7CivouJggPiBiYWxsOwor6Le8ID4gYmVudDsKK+i3siA+IGhvb2Q7Civot7EgPiBzdG9wOwor6LeeID4gd2FsazsKK+i3mSA+IHdlYWs7Civotq8gPiBqdW1wOwor6LWxID4gd2FsazsKK+i1lSA+IGZpbmU7CivotIogPiBoZWxwOwor6LO1ID4gZ2lmdDsKK+iztCA+IHJlbHk7Civos6cgPiBmaW5lOwor6LOkID4gbWVhbjsKK+iznCA+IGdpdmU7Civos5sgPiBoZWxwOwor6LOaID4gZ2l2ZTsKK+izjiA+IG1lYW47CivosrogPiBnaXZlOwor6LKOID4gbGlvbjsKK+ixrSA+IGJvYXI7CivorosgPiBmZWFyOwor6KygID4gc2luZzsKK+islCA+IGplZXI7CivorJAgPiBjYWxtOwor6KyEID4gY29weTsKK+irniA+IGJyYWc7CivoqqcgPiBodWdlOwor6KqhID4gd2FybjsKK+iqgyA+IHBhcnQ7CivoqaAgPiBzaW5nOwor6KmfID4gZmVhcjsKK+ipmCA+IGJlbmQ7Civop50gPiBnb3JlOwor6KaYID4gcGVlazsKK+imkyA+IHNlZWs7Civoor8gPiBnb3duOwor6KG5ID4gb25seTsKK+ihmiA+IGxhbmU7CivooZYgPiBsYW5lOwor6KGSID4gYnJhZzsKK+igrSA+IGJlZXM7CivooKcgPiBtb3RoOwor6KCPID4gY3JhYjsKK+ifhyA+IGZyb2c7CivonokgPiB3YXNwOwor6Jy5ID4gZ25hdDsKK+ichSA+IGNyYWI7Civom7sgPiBtb2x0Owor6JqhID4gbW9sZTsKK+iZtyA+IHdvcm07CivomacgPiBsb3NlOwor6JmTID4gcm9hcjsKK+iYmiA+IG1vc3M7CivomJIgPiBcOjE0MzsKK+iXuSA+IGx1c2g7Civol58gPiB2aW5lOwor6JeHID4gZmluZTsKK+iWnyA+IHZpbmU7CivolpkgPiB3ZWVkOwor6JaBID4gdmluZTsKK+iVmCA+IGZ1ZWw7CivolLQgPiBoZW1wOwor6JOrID4gZG9jazsKK+iRkiA+IGhlcmI7CivokJwgPiBjNWg4Owor6I++ID4gYmVldDsKK+iOuyA+IGxhdGU7CivojrYgPiB2aW5lOwor6I6WID4gc3RlbTsKK+iNrSA+IGhlcmI7CivojZsgPiBmdWVsOwor6ImtID4gc2hpcDsKK+iJliA+IHJhZnQ7CivoiKkgPiBib2F0Owor6IeRID4gc29mdDsKK+iHiSA+IGZhY2U7Civoh4EgPiBjYWxmOwor6Ia3ID4gc291cDsKK+iGtCA+IGZpbmU7CivohqAgPiBnbHVlOwor6IW2ID4gbWVhdDsKK+iFsyA+IGZvb3Q7CivohZIgPiBnYW1lOwor6IWNID4gc29mdDsKK+iEsiA+IHVyZWE7Civog6AgPiBvcGVuOwor6IOPID4gbWVhdDsKK+iDiiA+IHlva2U7CivogqwgPiB3YXJ0Owor6IG+ID4gZGVhZjsKK+iBvCA+IGhlYXI7CivogbUgPiBkZWFmOwor6ICtID4gcGxvdzsKK+iAoCA+IHRpbGw7CivogI4gPiB3ZWFrOwor57+6ID4gc29hcjsKK+e+rSA+IGdvb2Q7CivnvpwgPiBsYW1iOwor57yLID4gZHJhdzsKK+e6miA+IGxvbmc7CivnupYgPiBmaW5lOwor57qVID4gYmVsdDsKK+e6jiA+IGZpbmU7Civnuo0gPiBiaW5kOwor57qHID4ga25vdDsKK+e6hiA+IGNvcmQ7CivnuaQgPiBlZGl0Owor57miID4gZHJhdzsKK+e5oCA+IGhhbmc7CivnuZggPiByb3BlOwor57mKID4gZmluZTsKK+e5hSA+IGRyYXc7CivnuYMgPiBiaW5kOwor57i+ID4gc3BpbjsKK+e4syA+IHdyYXA7CivnuK8gPiBsb25nOwor57iiID4gYmluZDsKK+e4miA+IGJhbmQ7CivnuIogPiBoYW5nOwor57evID4gd29vZjsKK+e3pCA+IGNvcmQ7Civnt5ggPiBzZWFsOwor57eOID4gc2VhbTsKK+e3hCA+IGNvcmQ7CivntqsgPiBsaW5lOwor57aRID4gY29pbDsKK+e2jSA+IHJvcGU7CivntoEgPiBiaW5kOwor57WPID4gcm9wZTsKK+e0oSA+IHNwaW47CivntIYgPiBiZW5kOwor57O5ID4gc2lsazsKK+eyiyA+IHB1cmU7CivnsbkgPiBjYWtlOwor57GZID4gYm9vazsKK+exjyA+IGZsYWc7CivnsYwgPiBjaGlwOwor57GKID4gbG9uZzsKK+ewvSA+IHNpZ247CivnsIYgPiByZWVkOwor56uFID4gaG9sZTsKK+ergSA+IGJvcmU7Civnqr4gPiBob2xlOwor56q1ID4gZGVlcDsKK+eqryA+IGtpbG47Civnqq0gPiBwb29yOwor56qpID4gbmVzdDsKK+epvSA+IGhvbGU7Civnqa4gPiB3ZWVkOwor56mhID4gZmFybTsKK+epnCA+IHJpY2U7CivnqZAgPiBmYWxsOwor56mLID4gcmljZTsKK+epgCA+IGNvcm47CivnqJsgPiBiaW5kOwor56iRID4gcmljZTsKK+enqiA+IG9ubHk7Civnp4ogPiB5ZWFyOwor56a4ID4gcnVtcDsKK+emsSA+IHByYXk7CivnpYcgPiBvbmx5Owor56SsID4gYWx1bTsKK+ekpyA+IHJvbGw7CivnpKYgPiBtaW5lOwor56ShID4gZmlsbDsKK+ejmiA+IHRpbGU7CivnoL8gPiBtaW5lOwor55+7ID4gdG9pbDsKK+efmSA+IHZpZXc7CivnnqsgPiBsb29rOwor55ukID4gdHJheTsKK+ebnSA+IGRyaXA7Civnm4wgPiBib3dsOwor55q3ID4gZHJ1bTsKK+eZtiA+IGxlZ3M7Civnma4gPiByYXNoOwor55miID4gaXRjaDsKK+eZoCA+IHNpY2s7CivnmK8gPiBpdGNoOwor55ieID4gYnVyeTsKK+eYliA+IGR1bWI7CivnmIIgPiBkdW1iOwor55evID4gc2ljazsKK+eXjCA+IGFjaGU7CivnlqcgPiBzaWNrOwor55aYID4gYW51czsKK+eWkCA+IGZhbGw7CivnlYogPiBwbG93Owor55WHID4gbGFuZDsKK+eVhCA+IHN0b3A7CivnlIwgPiBib3dsOwor55OYID4gamFkZTsKK+eTiiA+IGphZGU7CivnjbUgPiBodW50Owor542uID4gaHVudDsKK+eNpyA+IHJhc2g7CivnjYsgPiByb2FyOwor542FID4gbGlvbjsKK+eNgyA+IGR1bGw7CivnjJ8gPiBodW50Owor54yLID4gd2luZDsKK+eLmCA+IGp1bXA7Civni4AgPiBmb3JtOwor54qyID4gd29sZjsKK+eKoiA+IGNhbGY7CivnioIgPiBwbG93Owor54m9ID4gZHJhZzsKK+eJtCA+IGdvcmU7CivniaMgPiBmaWxsOwor54mGID4gd2FsbDsKK+eInyA+IGZpcmU7CivniJYgPiBmaXJlOwor54iHID4gYnVybjsKK+eHqCA+IGZpcmU7CivnhocgPiBiYWtlOwor54WaID4gZmlyZTsKK+eFliA+IHdhcm07CivnhZEgPiBjb29rOwor54WHID4gd2VsZDsKK+eEriA+IGhlYXQ7CivnhJwgPiBmaXJlOwor54OdID4gcmlzZTsKK+eDlCA+IGhlYXQ7Civng48gPiBjcm93Owor54GdID4gdmFzdDsKK+eBmCA+IGJhbms7CivngKYgPiBwb25kOwor5r+zID4gaGlkZTsKK+a/lCA+IG1hbnk7Civmv4ogPiB2YXN0Owor5r+IID4gbWFueTsKK+a+kiA+IHZhc3Q7CivmvaQgPiBzb2Z0Owor5r2bID4gaGlkZTsKK+a9kSA+IHBvdXI7CivmvYUgPiBwb3VyOwor5rywID4gcm9hcjsKK+a8rSA+IHZhc3Q7CivmvJogPiBzb2FrOwor5ryZID4gZGV3eTsKK+a8mCA+IGJhbms7Civmu74gPiB0dXJuOwor5ru6ID4gZmxvdzsKK+a7riA+IGZsb3c7Civmu4wgPiB3YXNoOwor5ruJID4gZGVlcDsKK+a7hCA+IGJsdWU7CivmurwgPiBkYW1wOwor5rm7ID4gcHVyZTsKK+a5siA+IGZsb3c7CivmuZ0gPiBmbG93Owor5rewID4gZmlzaDsKK+a3qCA+IHB1cmU7CivmtrQgPiBkYXViOwor5raKID4gZGlydDsKK+azmSA+IHJvYXI7CivmsqwgPiBkdXNrOwor5rKVID4gZGVlcDsKK+axjSA+IHdlZXA7CivmsJ0gPiBuZW9uOwor5rCKID4gZmVsdDsKK+awhCA+IGRvd247CivmsIIgPiB0YWlsOwor5q2yID4geWVhcjsKK+atlyA+IHJvYXI7CivmrYogPiBzaWdoOwor5qyQID4gYmVhbTsKK+arsyA+IGNhZ2U7Civmq5ogPiBwYWxtOwor5qq0ID4gdHJlZTsKK+aqjSA+IGlsZXg7CivmqaYgPiB0cmVlOwor5qmBID4gdHJlZTsKK+anuSA+IHNwYXI7Civmp4MgPiB0cmF5Owor5qWwID4gdHJlZTsKK+alqSA+IHRyZWU7CivmpZ8gPiB0cmVlOwor5qWYID4gYmFuZDsKK+akuCA+IHJhY2s7CivmpJEgPiBvdmFsOwor5qOsID4gYm93bDsKK+ajqiA+IHRyZWU7Civmo5EgPiByYWZ0Owor5qK0ID4gbG9uZzsKK+ahvyA+IHBvbGU7CivmobkgPiBwYWxtOwor5qGLID4gdHJlZTsKK+aguyA+IHRyZWU7Civmn6MgPiBzaWxsOwor5p+CID4gaGVsbTsKK+aetCA+IGNhbmU7CivmnZ0gPiB0cmVlOwor5p2XID4gYmVhbTsKK+acvyA+IHN0YWI7CivmnLMgPiB0cmVlOwor5pyYID4gd2FuZTsKK+abiSA+IGRhd247CivmmbMgPiBmYWlyOwor5pi7ID4gcmlzZTsKK+aYrCA+IGR1c2s7CivmmKsgPiB3YXJtOwor5pe5ID4gdGltZTsKK+aXtCA+IGRhd247Civml5wgPiBmbGFnOwor5peCID4gZmxhZzsKK+aVvyA+IGJpbmQ7Civmlb0gPiBiaW5kOwor5pW7ID4gbG9uZzsKK+aUoiA+IHNhdmU7CivmlIUgPiBzYXZlOwor5pOrID4gdHVjazsKK+aToyA+IGh1bGw7CivmkrsgPiBmbG9nOwor5pKlID4gbW92ZTsKK+aSnSA+IHdhdmU7CivmkbIgPiByYXplOwor5pGmID4gd2lkZTsKK+aQpSA+IGJlYXQ7CivmkJggPiBwcm9wOwor5pCXID4gaHVsbDsKK+aQkiA+IHBvbGU7CivmkIwgPiBiaW5kOwor5pCGID4gcHVsbDsKK+aOniA+IGVhc3k7CivmjpcgPiB0YWtlOwor5o2YID4gcHVzaDsKK+aNhCA+IGxvbmc7CivmjJAgPiBkcmFnOwor5ouPID4gdGFrZTsKK+aKtiA+IGJlYXQ7CivmioYgPiB3aXBlOwor5oi2ID4gZG9vcjsKK+aIgSA+IGZlYXI7Civmh7YgPiBsYXp5Owor5oeuID4gY2FsbTsKK+aHnyA+IGhhdGU7Civmh5wgPiBkdWxsOwor5oawID4gd2lseTsKK+aGqyA+IHBpdHk7CivmhpkgPiBsaWtlOwor5oaYID4gbGlrZTsKK+aGhyA+IHJlc3Q7CivmhbQgPiBmZWFyOwor5oWCID4gdXJnZTsKK+aEkiA+IHJlc3Q7CivmgYcgPiBmZWFyOwor5oCzID4gd2lsZDsKK+aArSA+IHJ1ZGU7CivmgJogPiBkdWxsOwor5b2hID4gaGFpcjsKK+W9jiA+IGJlbmQ7Civlu7wgPiB0aGVuOwor5buzID4gaGFsbDsKK+W7sCA+IGhhbGw7Civlu6cgPiB3YWxsOwor5buOID4gcm9vbTsKK+W5ryA+IHdpcGU7CivluaQgPiBldmlsOwor5bmfID4gZmxhZzsKK+W5miA+IGhlbHA7CivluYsgPiBiZWx0Owor5bmHID4gaGVscDsKK+W4nyA+IHRlbnQ7CivltrggPiBoaWdoOwor5baEID4gaGlnaDsKK+W1syA+IGhpZ2g7CivltKIgPiBoaWdoOwor5bOvID4gcGVhazsKK+WzhyA+IGNhdmU7CivlsqcgPiBwZWFrOwor5bGHID4gY2F2ZTsKK+WwsiA+IGxpbXA7CivlsKsgPiBsYW1lOwor5bCqID4gbGFtZTsKK+WwqSA+IHdlYWs7CivlsKMgPiBsYW1lOwor5bCHID4gd2lsbDsKK+WvoCA+IHBvb3I7Civlr5QgPiByZWFsOwor5a27ID4gbGFzdDsKK+WsviA+IGxhenk7CivlrLAgPiBiYWJ5Owor5aytID4gbWlsazsKK+WsmSA+IGxhZHk7Civlq4ggPiBsYWR5Owor5aqKID4gc3RhcjsKK+WpniA+IGhhdGU7CivlqZAgPiBtYWlkOwor5ai4ID4gdWdseTsKK+WotSA+IHN0YXI7Civlp70gPiBnb29kOwor5aeuID4gbGFkeTsKK+WnpCA+IG1hdGU7CivlpJsgPiBtdWNoOwor5aSQID4gbG9uZzsKK+WjmSA+IHRvbWI7Civlo5IgPiBkdXN0Owor5aOMID4gc29pbDsKK+WiuyA+IHdhbGw7CivloqYgPiB0b21iOwor5aG5ID4gbW9hdDsKK+WgsiA+IGhhdGU7CivloKggPiBkYXViOwor5aCLID4gYnVyeTsKK+WfsCA+IGZpZWY7Civln4ggPiBoaWdoOwor5Z6cID4gaGVhcDsKK+WdsSA+IGR1c3Q7CivlnYsgPiBkdXN0Owor5ZulID4gaGlkZTsKK+WbkyA+IGduYXc7Civlm4AgPiBzaW5nOwor5ZqkID4gc2xvdzsKK+WamSA+IGJpdGU7CivlmoQgPiByb2FyOwor5ZmzID4gbWFueTsKK+WZnSA+IGhpc3M7CivlmYkgPiBiaXRlOwor5Zi9ID4gcGFudDsKK+WYryA+IHJvYXI7CivlmK4gPiBjaGF0Owor5ZioID4gcm9hcjsKK+WYnCA+IG1hcms7Civll7AgPiB0aGF0Owor5ZeKID4gc2luZzsKK+WWrCA+IHRhbGw7CivllqggPiB3YWlsOwor5ZWfID4gb3BlbjsKK+WVniA+IGR1bWI7CivllZkgPiBwb29yOwor5ZWTID4gb3BlbjsKK+WVgCA+IGduYXc7CivllLYgPiBzaWdoOwor5ZSbID4gbWFyazsKK+WSvCA+IGNoYXQ7CivlkrcgPiBob3dsOwor5ZKuID4gYmVhazsKK+WRmSA+IGNoYXQ7CivlkY4gPiBmb290Owor5ZGHID4gc3RhcjsKK+WQvyA+IHRlbGw7CivlkL0gPiAnJ29tJyc7CivlkKogPiBtb3ZlOwor5ZCLID4gaW5jaDsKK+WOlCA+IHN0b3A7CivljYAgPiBhcmVhOwor5Yy1ID4gY2FzZTsKK+WLuSA+IHdyYXA7CivlibogPiBtYXJrOwor5YmdID4gcGVlbDsKK+WJmiA+IHN0YWI7CivliL4gPiBzdGFiOwor5YicID4gY2hvcDsKK+WIkyA+IHRyaW07Civlh64gPiB3aW5kOwor5YeqID4gY2FsbTsKK+WHqCA+IHdpbmQ7Civlh6cgPiBraXRlOwor5YeaID4gY29sZDsKK+WHliA+IHJ1bGU7Civlh5QgPiBjb2xkOwor5YaQID4gcmlzazsKK+WGgiA+IHdpZGU7CivlhYwgPiBjYXNoOwor5YS+ID4gc2xvdzsKK+WEvSA+IGxhenk7CivlhLogPiByaWNoOwor5YSxID4gcnVkZTsKK+WEnCA+IHdlYWs7CivlhIUgPiBzdG9wOwor5YO+ID4gbGlrZTsKK+WDqCA+IHJ1aW47CivlgrUgPiBkZWJ0Owor5YKtID4gaGlyZTsKK+WBhCA+IHdlYWs7CivlgL0gPiB3aGF0Owor5L+0ID4gdGhpbjsKK+S/lCA+IGxpa2U7CivkvqIgPiBsb2FkOwor5L6cID4gbGllczsKK+S+miA+IGZhc3Q7CivkvoAgPiBmb3JtOwor5L24ID4gbWVldDsKK+S8uSA+IGR1bGw7CivkvLEgPiB0aG91Owor5Lu4ID4gYmVudDsKK+S6oCA+IGhlYWQ7Civkup0gPiBldmVuOwor5LqcID4gYXNpYTsKK+S6liA+IGZvdXI7CivkuoUgPiBob29rOwor5Lm8ID4gcm9wZTsKK+S5rSA+IHJvY2s7CivkuLMgPiBzcGl0Owor5LigID4gaGlsbDsKK+S1tyA+IGZyb2c7CivktaggPiBkYXJrOwor5LWSID4gZ2x1ZTsKK+S1kSA+IGdsdWU7CivktLggPiBicmFuOwor5LSdID4gc2FsdDsKK+S0nCA+IHNhbHQ7CivktIMgPiB3cmVuOwor5LO8ID4gZ3VsbDsKK+SzpiA+IHdyZW47Civks6MgPiBraXRlOwor5LKtID4ga2l0ZTsKK+SykiA+IGNyYWI7CivksbQgPiB0dW5hOwor5LGtID4gdHVuYTsKK+SxjiA+IHR1bmE7CivksY0gPiB0dW5hOwor5LCpID4gdWdseTsKK+SwpiA+IHVnbHk7CivksKQgPiB1Z2x5Owor5LCVID4gbWFuZTsKK+SwkyA+IGhhaXI7CivksIsgPiBoYWlyOwor5LCKID4gaGFpcjsKK+SwhyA+IG1hbmU7Civkr7kgPiBoYWlyOwor5K+fID4gYm9uZTsKK+SvniA+IGJvbmU7Civkr5UgPiBib255Owor5K6/ID4gbGFtZTsKK+SuviA+IGh1Z2U7CivkraIgPiByaWNoOwor5K2hID4gZm9vZDsKK+StkyA+IGZvb2Q7CivkrYIgPiBkYW1wOwor5K2AID4gZm9vZDsKK+SsniA+IHdpbmQ7CivkrI8gPiB3aW5kOwor5Ku2ID4gdWdseTsKK+SrqiA+IHVnbHk7Civkq6IgPiBnb29kOwor5KuRID4gZ29vZDsKK+SrjyA+IHVnbHk7Civkq4ogPiBjaGluOwor5KuIID4gdWdseTsKK+SrgiA+IHVnbHk7CivkqqYgPiBsb3VkOwor5KqPID4gd2VhazsKK+SqhiA+IHNvZnQ7CivkqLAgPiByYWluOwor5KiuID4gc25vdzsKK+SopCA+IHJhaW47CivkqJQgPiBoYWlsOwor5KiMID4gaGFpbDsKK+SnuyA+IGRvdmU7Civkp7kgPiBoYXdrOwor5KawID4gbG90czsKK+SlqyA+IGlyb247CivkpZQgPiBnb2xkOwor5KWSID4gbGVhZDsKK+SkriA+IGlyb247CivkpKEgPiBpcm9uOwor5KSRID4gd2luZTsKK+SkiiA+IHdpbmU7Civko70gPiB3aW5lOwor5KOoID4gcmljaDsKK+ShsyA+IGNhcnQ7CivkoYAgPiBudWRlOwor5KCtID4gbGFtZTsKK+SglyA+IGxhbWU7CivkoI8gPiBmZWV0Owor5J+oID4gbGFtZTsKK+SfgiA+IHNsb3c7Civknr8gPiBsYW1lOwor5J6pID4gbGFtZTsKK+SenSA+IGxhbWU7CivknoYgPiBib25lOwor5J2YID4gZmlybTsKK+SdlSA+IGdvb2Q7Civkm7QgPiBqb2tlOwor5Jq9ID4gbmV3czsKK+SauCA+IGdvb2Q7CivkmqkgPiBoaWdoOwor5JqiID4gaG9ybjsKK+SZpCA+IGdvb2Q7CivkmYogPiBhcmlkOwor5JepID4gdG9hZDsKK+SXoiA+IGZsZWE7CivklrggPiBtb3RoOwor5JatID4gZ3J1YjsKK+SWqiA+IGdydWI7CivklqMgPiBmbGVhOwor5JWiID4gd2VhazsKK+SUrCA+IGhlbXA7Civkk74gPiBsdXNoOwor5JO4ID4gd2VlZDsKK+STsiA+IGZpbmU7CivkkrogPiBjbGF5Owor5JKtID4gcmFuazsKK+SRrCA+IGJvYXQ7CivkkZ4gPiBzaHVuOwor5JGPID4gdWdseTsKK+SRhCA+IHJpY2g7CivkkLMgPiBmaXNoOwor5JCuID4gc2tpbjsKK+SQkyA+IHNvZnQ7CivkkIsgPiBzaWNrOwor5I+4ID4gZmlzaDsKK+SPsSA+IGJvZHk7Civkj6IgPiBtZWF0Owor5I+OID4gbWlsazsKK+SPiiA+IGRlYWY7CivkjpwgPiBhZ2VkOwor5I2aID4gdmFzdDsKK+SMqSA+IGZpbmU7CivkjJ0gPiBzaWxrOwor5IyTID4gbWFueTsKK+SMkiA+IHB1cmU7CivkjIwgPiBsYWNlOwor5Iu8ID4gc2xvdzsKK+SLliA+IGxvbmc7CivkiqYgPiBmb29kOwor5IepID4gbG9uZzsKK+SGrSA+IGNhdmU7CivkhqkgPiBkYXJrOwor5IamID4gZGVlcDsKK+SEqSA+IGJyYW47CivkgoMgPiBkYXJrOwor5IGpID4gZmlzaDsKK+SBhiA+IGV5ZXM7CivkgYUgPiByYWdlOwor5IC+ID4gbWFueTsKK+SAnCA+IGRvd247CivkgIsgPiBzYWx0Owor5ICAID4gY3VwczsKK+O/mSA+IGZ1bGw7Civjv44gPiBzaWNrOwor4765ID4gbGVhbjsKK+O+qiA+IGxlYW47CivjvqggPiB3ZWFrOwor476bID4gdWdseTsKK+O+iiA+IHRoaW47CivjvokgPiB0aGluOwor47qlID4gYmFyazsKK+O5kiA+IGJ1bGw7CivjuY8gPiBnb29kOwor47mOID4gYnVsbDsKK+O5jSA+IGJ1bGw7CivjuLggPiBjYWxmOwor47iuID4gYnVsbDsKK+O4jiA+IHdhcm07Civjt7UgPiBmaXJlOwor47e0ID4gZmlyZTsKK+O3rCA+IGZpcmU7Civjt5ggPiBjb2FsOwor47eQID4gZmlyZTsKK+O3hCA+IGZpcmU7CivjtrkgPiBmaXJlOwor47avID4gZmlyZTsKK+O2qCA+IGZpcmU7CivjtqcgPiB3YXJtOwor47W+ID4gY29sZDsKK+O1tiA+IGZ1bGw7CivjtakgPiBtYW55Owor47WZID4gcHVyZTsKK+O1liA+IGRhbXA7CivjtLQgPiBzaW5rOwor47SxID4gZGVlcDsKK+O0nSA+IG1hbnk7CivjtJsgPiBkYW1wOwor47SXID4gZGVlcDsKK+O0gCA+IGRlZXA7Civjs6QgPiBnb29kOwor47K+ID4gcmFpbjsKK+OyuyA+IHN1bms7CivjsrQgPiBtaW5kOwor47KfID4gaGFpcjsKK+OynCA+IHJ1Z3M7CivjspMgPiBmaW5lOwor47G0ID4gc2ljazsKK+OxiyA+IGhpZ2g7CivjsYcgPiBmZWFyOwor47CrID4gZ2xhZDsKK+OwoSA+IHJhc2g7CivjsJ8gPiBob3BlOwor47CZID4gd2VhazsKK+OwkCA+IG92YWw7CivjrrogPiBzdGVtOwor466kID4gcGluZTsKK+OukiA+IHdvb2Q7Civjrb0gPiByb290Owor46yYID4gYXJpZDsKK+OsiSA+IHdhcm07CivjrIUgPiBsb25nOwor46uyID4gZGFyazsKK+OrsSA+IG1pbGQ7Civjq6UgPiBkYXJrOwor46uOID4gbWFyazsKK+OrhCA+IHNpZGU7CivjqbwgPiBtYW55Owor76ilID4gZmxlZTsKK++ohSA+IGNhdmU7Civvp78gPiBzdGFiOwor76e6ID4gZm9ybTsKK++ntSA+IGRyaXA7Civjp64gPiBoaWdoOwor76erID4gaGlkZTsKK+OnqCA+IHNsb3c7Civvp6IgPiBwZWFyOwor76ehID4gcGx1bTsKK++nkyA+IGxhbmQ7Civvp5IgPiBraWxsOwor76ePID4ga25vdDsKK++njSA+IHN0b3A7Civvp4ogPiBmbG93Owor76a5ID4gZXZpbDsKK++mtCA+IG5lY2s7CivvprIgPiB6ZXJvOwor76axID4gYmVsbDsKK++mrCA+IHBpdHk7CivvpqcgPiBodW50Owor46aoID4gbGF6eTsKK+OmoiA+IHB1cmU7CivvppogPiBqb2luOwor76aVID4geWVhcjsKK++mkCA+IGxvdmU7Civvpo8gPiBwaXR5Owor76aOID4geWVhcjsKK+OmjyA+IHdlYWs7CivvpoMgPiB0cmlwOwor76W8ID4gZ29vZDsKK++luyA+IGZvb2Q7CivvpbkgPiBjb29sOwor76WyID4gc2luazsKK++lsCA+IGtpbGw7Civvpa4gPiBsZWFmOwor46WsID4gZmVhcjsKK+OlqSA+IGlkbGU7CivjpaEgPiBpZGxlOwor76WbID4gdGFrZTsKK++lmiA+IHJlYWQ7CivvpZkgPiBoaWxsOwor76WVID4gcHVyZTsKK++lkyA+IHJpYnM7CivvpY4gPiBsZWFrOwor76WFID4gZGVhZjsKK++lhCA+IGNhZ2U7CivvpYAgPiBkZWVyOwor76S/ID4gY29weTsKK++ktyA+IHJvYWQ7CivvpK4gPiBjb2xkOwor76StID4gY29tZTsKK++kqyA+IHdvbGY7CivvpKogPiB3YXZlOwor76SlID4gcHVsbDsKK++koyA+IGJsdWU7CivjpJ8gPiBmZWFyOwor76SYID4gZmFsbDsKK++kkiA+IGJhcmU7CivvpI0gPiBsYXp5Owor76SLID4gaG9ybjsKK++kiiA+IGdvbGQ7CivvpIkgPiBkZWVkOwor46SJID4gZmVhcjsKK++khCA+IHNsaXA7CivvpIIgPiBjYXJ0Owor76SBID4gbW9yZTsKK+OjjiA+IGZpbmU7CivjopwgPiB2YXN0Owor46KYID4gcHVyZTsKK+OilCA+IG1hbnk7Civjoo4gPiBoaWRlOwor46KLID4gdmFzdDsKK+OigyA+IGhpZ2g7CivjooEgPiB2YXN0Owor46GmID4gbWVzczsKK+OguyA+IHJhcmU7CivjoKkgPiB2YXN0Owor46CMID4gaGlnaDsKK+OesSA+IGR1c2s7CivjnpYgPiB0aGlzOwor456EID4gbGFtZTsKK+OdvyA+IGxhbWU7CivjnaEgPiB2ZXJ5Owor452gID4gZGFyazsKK+OdnSA+IGRlZXA7CivjnZEgPiBzaWRlOwor452QID4gZmFjZTsKK+OdiCA+IHR3aW47CivjnYQgPiBwdXJlOwor45y3ID4gbWlsazsKK+OcmyA+IHNvZnQ7CivjnIMgPiBmcm9tOwor45umID4gZ29vZDsKK+OapyA+IGFnaWw7Civjmo0gPiBtdWNoOwor45qLID4gbXVjaDsKK+OaiiA+IG11Y2g7CivjmoIgPiBkdXN0Owor45mqID4gZGFyazsKK+OZoCA+IGR1c3Q7CivjmZIgPiB3aWxkOwor45mCID4gd2FsbDsKK+OZgSA+IGR1c3Q7CivjmKggPiBkZWVwOwor45iQID4gbG91ZDsKK+OXiCA+IGxvbmc7CivjlaYgPiBsb3VkOwor45SEID4gdGhpbjsKK+OTkSA+IGNvbGQ7Civjk44gPiBjb2xkOwor45OKID4gY29sZDsKK+OSmiA+IGZpcm07Civjko4gPiBldmlsOwor45G/ID4gbG9uZzsKK+ORtSA+IGVudnk7CivjkZogPiB0aGF0Owor45GMID4gd2VhazsKK+ORiCA+IHJ1ZGU7CivjkKEgPiB3ZWFrOwor45CFID4gZml2ZTsKK+S4gCA+IG9uZTsKK+S6uiA+IG1hbjsKK+aIkSA+IG91cjsKK+WkpyA+IGJpZzsKK+S4iiA+IHRvcDsKK+S9oCA+IHlvdTsKK+WPryA+IG1heTsKK+WluSA+IHNoZTsKK+WkqSA+IHNreTsKK+iAjCA+IGFuZDsKK+eEtiA+IHllczsKK+ayoSA+IG5vdDsKK+aXpSA+IHN1bjsKK+W9qSA+IGh1ZTsKK+WNgSA+IHRlbjsKK+eUqCA+IHVzZTsKK+ecvCA+IGV5ZTsKK+WPiCA+IGFuZDsKK+ingSA+IHNlZTsKK+iAgSA+IG9sZDsKK+S4pCA+IHR3bzsKK+WkliA+IG91dDsKK+S4jiA+IGFuZDsKK+azlSA+IGxhdzsKK+ebriA+IGV5ZTsKK+S6jCA+IHR3bzsKK+eCuSA+IGRvdDsKK+ebnCA+IHJvYjsKK+WFtiA+IGhpczsKK+eblyA+IHJvYjsKK+WEvyA+IHNvbjsKK+aWsCA+IG5ldzsKK+W6iiA+IGJlZDsKK+eahiA+IGFsbDsKK+a1tyA+IHNlYTsKK+WwkSA+IGZldzsKK+W4vSA+IGhhdDsKK+WPqyA+IGNyeTsKK+atuyA+IGRpZTsKK+aUviA+IHB1dDsKK+S7iiA+IG5vdzsKK+i1pCA+IHJlZDsKK+eVoiA+IGVuZDsKK+aImCA+IHdhcjsKK+izvCA+IGJ1eTsKK+eTtiA+IGp1ZzsKK+ivtyA+IGFzazsKK+S6pCA+IG1peDsKK+WQgyA+IGVhdDsKK+iytyA+IGJ1eTsKK+mdniA+IG5vdDsKK+WkqyA+IG1hbjsKK+e6oiA+IHJlZDsKK+i/kCA+IHJ1bjsKK+WvpSA+IGZldzsKK+e9kSA+IG5ldDsKK+mjniA+IGZseTsKK+ingiA+IHNlZTsKK+eMvyA+IGFwZTsKK+eMqyA+IGNhdDsKK+eMqiA+IHBpZzsKK+WdkCA+IHNpdDsKK+isgiA+IHNheTsKK+eLlyA+IGRvZzsKK+iriyA+IGFzazsKK+e7iCA+IGVuZDsKK+WIhyA+IGN1dDsKK+eKrCA+IGRvZzsKK+iqpCA+IGVycjsKK+WwlCA+IHlvdTsKK+eDrSA+IGhvdDsKK+WPpCA+IG9sZDsKK+eJmyA+IGNvdzsKK+eJgCA+IGJlZDsKK+ingCA+IHNlZTsKK+S9jiA+IGxvdzsKK+imsyA+IHNlZTsKK+eGsSA+IGhvdDsKK+S7jSA+IHlldDsKK+imiyA+IHNlZTsKK+iEmiA+IGxlZzsKK+S6kSA+IHNheTsKK+S5sCA+IGJ1eTsKK+WliCA+IGJ1dDsKK+aOkiA+IHJvdzsKK+WjryA+IGJpZzsKK+WjniA+IGJhZDsKK+WjiiA+IGJhZDsKK+a5viA+IGJheTsKK+WiqCA+IGluazsKK+WQpiA+IG5vdDsKK+mjnyA+IGVhdDsKK+ihkyA+IGFydDsKK+a/mCA+IG11ZDsKK+a/lSA+IHdldDsKK+mcsiA+IGRldzsKK+m9oiA+IGFnZTsKK+m9oSA+IGFnZTsKK+idmSA+IGJhdDsKK+idiyA+IHdheDsKK+m8oCA+IHJhdDsKK+i3kSA+IHJ1bjsKK+icgiA+IGJlZTsKK+iJuiA+IGFydDsKK+m7niA+IGRvdDsKK+aRhyA+IHdhZzsKK+mhtiA+IHRvcDsKK+a5vyA+IHdldDsKK+erryA+IGVuZDsKK+aXpyA+IG9sZDsKK+ayuSA+IG9pbDsKK+iXnSA+IGFydDsKK+avlSA+IGVuZDsKK+iXiSA+IG1hdDsKK+a2siA+IHNhcDsKK+iWryA+IHlhbTsKK+iAsyA+IGVhcjsKK+WWiyA+IG5hZzsKK+WVnCA+IHNpcDsKK+WVjyA+IGFzazsKK+azpSA+IG11ZDsKK+azoyA+IGNyeTsKK+WTgCA+IHNhZDsKK+WGsCA+IGljZTsKK+ivryA+IGVycjsKK+WHoSA+IGFsbDsKK+axnSA+IHlvdTsKK+iwkyA+IHNheTsKK+adryA+IGN1cDsKK+awtyA+IGljZTsKK+awoyA+IGFpcjsKK+awlyA+IGFpcjsKK+iQjCA+IGJ1ZDsKK+i0rSA+IGJ1eTsKK+mAlCA+IHdheTsKK+aRhiA+IHB1dDsKK+WFuCA+IGxhdzsKK+iMtiA+IHRlYTsKK+WNtSA+IGVnZzsKK+aSrSA+IHNvdzsKK+iHgiA+IGFybTsKK+astyA+IHNvYjsKK+WMmiA+IGJveDsKK+aRqSA+IHJ1YjsKK+mkkCA+IGVhdDsKK+WGoCA+IGNhcDsKK+iKvSA+IGJ1ZDsKK+iKuCA+IHJ1ZTsKK+WKoyA+IGJhZDsKK+WJvSA+IHJvYjsKK+WJsiA+IGN1dDsKK+e8mCA+IGhlbTsKK+S/qSA+IHR3bzsKK+WjriA+IGJpZzsKK+W/pyA+IHNhZDsKK+iIiiA+IG9sZDsKK+iIhyA+IGFuZDsKK+m+hCA+IGFnZTsKK+aDqCA+IHNhZDsKK+iFviA+IGZseTsKK+afkyA+IGR5ZTsKK+iGvyA+IHB1czsKK+amuyA+IGNvdDsKK+WGhiA+IHllbjsKK+WFqSA+IHR3bzsKK+WFkiA+IHNvbjsKK+iFkCA+IHJvdDsKK+WFkCA+IHNvbjsKK+iEgiA+IGZhdDsKK+mjmyA+IGZseTsKK+iCpSA+IGZhdDsKK+aPtCA+IGFpZDsKK+iDliA+IGZhdDsKK+WTvCA+IGh1bTsKK+WBtSA+IHNweTsKK+mhmyA+IHRvcDsKK+mhjiA+IGphdzsKK+WAtiA+IGFsbDsKK+mggiA+IHRvcDsKK+e9kCA+IGphcjsKK+aNtyA+IHdpbjsKK+mcpyA+IGZvZzsKK+S5viA+IGRyeTsKK+S/sSA+IGFsbDsKK+i1oiA+IHdpbjsKK+e8nSA+IHNldzsKK+aKmiA+IHBhdDsKK+aMliA+IGRpZzsKK+abnSA+IHN1bjsKK+mbviA+IGZvZzsKK+aakSA+IGhvdDsKK+mioCA+IHRvcDsKK+aJhyA+IGZhbjsKK+absCA+IHNheTsKK+S5niA+IGJlZzsKK+i1jCA+IGJldDsKK+e4qyA+IHNldzsKK+S4oSA+IHR3bzsKK+asoCA+IG93ZTsKK+awmyA+IGdhczsKK+e4gSA+IGhlbTsKK+e3oCA+IHRpZTsKK+W8lyA+IG5vdDsKK+e2siA+IG5ldDsKK+aWrCA+IGN1dDsKK+e1tiA+IGN1dDsKK+i+nyA+IGxhdzsKK+e1giA+IGVuZDsKK+ilhCA+IGFpZDsKK+eCkiA+IGZyeTsKK+mUoSA+IHRpbjsKK+e0hSA+IHJlZDsKK+aSqyA+IHBhdDsKK+mRtSA+IGphcjsKK+WdkSA+IHBpdDsKK+aQliA+IHdhZzsKK+aPuiA+IHdhZzsKK+aSlSA+IHJpcDsKK+aPiSA+IHJ1YjsKK+ejlSA+IGhpdDsKK+aWqSA+IGN1dDsKK+aOoCA+IHJvYjsKK+aOmCA+IGRpZzsKK+iwjiA+IGxpZTsKK+mKnCA+IGJpdDsKK+i1iyA+IHRheDsKK+WbiiA+IGJhZzsKK+aIsCA+IHdhcjsKK+aIpiA+IHdhcjsKK+aGgiA+IHNhZDsKK+aQgiA+IGh1ZzsKK+aFmCA+IHNhZDsKK+S+piA+IHNweTsKK+WjtiA+IGphcjsKK+W8kyA+IGJvdzsKK+icoSA+IHdheDsKK+W6kCA+IGh1dDsKK+atuSA+IGJhZDsKK+aDnyA+IGJ1dDsKK+ihlCA+IGJpdDsKK+WdjiA+IHBpdDsKK+WFuSA+IG5vdzsKK+avryA+IHJ1ZzsKK+mSpSA+IGtleTsKK+aWpyA+IGF4ZTsKK+i1jiA+IGJ1eTsKK+W9pCA+IHJlZDsKK+eHpSA+IGRyeTsKK+S9rCA+IG1hbjsKK+eehSA+IHNlZTsKK+i5piA+IGhvcDsKK+mchCA+IHNreTsKK+e/qSA+IGZseTsKK+aaqCA+IGFuZDsKK+i/oiA+IGZhcjsKK+e8lCA+IHRpZTsKK+ikmiA+IGJhZzsKK+iagiA+IGFudDsKK+aPjSA+IGhpdDsKK+aTgiA+IHJ1YjsKK+mUhCA+IGhvZTsKK+aNhSA+IGphYjsKK+meoCA+IGJvdzsKK+mqsCA+IGRpZTsKK+i4iSA+IGhvcDsKK+ahqCA+IG9hcjsKK+aLjCA+IG1peDsKK+eLuCA+IGZveDsKK+eAmyA+IHNlYTsKK+WZqSA+IGJhZDsKK+iTkyA+IGJ1ZDsKK+eqliA+IHBpdDsKK+aOuiA+IG1peDsKK+eMliA+IG1hZDsKK+i2viA+IHRvZTsKK+iYuCA+IGRpcDsKK+a3pCA+IG11ZDsKK+eQpiA+IGdlbTsKK+iEkyA+IHB1czsKK+eVuCA+IG9kZDsKK+ebjiA+IGN1cDsKK+iMlyA+IHRlYTsKK+iDpSA+IGFsbDsKK+aAhiA+IHNhZDsKK+azniA+IG11ZDsKK+WJkCA+IGN1dDsKK+iIgCA+IGRpcDsKK+WdryA+IGRhbTsKK+WgsCA+IGRhbTsKK+W5uiA+IG9uZTsKK+eJryA+IGNvdzsKK+W8vCA+IGFpZDsKK+mznSA+IGVlbDsKK+aWqyA+IGN1dDsKK+aAqSA+IHNoeTsKK+a6pSA+IGJpZzsKK+apuSA+IG9hcjsKK+m7oCA+IHNseTsKK+e7jCA+IHNldzsKK+WJnCA+IGN1dDsKK+e9lCA+IG5ldDsKK+mimiA+IGphdzsKK+WUvyA+IHNhZDsKK+iAqCA+IGhvZTsKK+iGmCA+IGZhdDsKK+mVsyA+IGJpdDsKK+iFtCA+IGZhdDsKK+eLryA+IHNseTsKK+mVoiA+IGhvZTsKK+ijqCA+IGFpZDsKK+mUmyA+IGFkejsKK+WbtSA+IGFsbDsKK+mCiCA+IGZhcjsKK+aukiA+IGRpZTsKK+WVliA+IGVhdDsKK+m6iyA+IGVsazsKK+mzjSA+IGZpbjsKK+WIjSA+IG1vdzsKK+S+lyA+IGJpZzsKK+alqyA+IG9hcjsKK+eMoSA+IHBpZzsKK+afniA+IG9hazsKK+S9pSA+IGFsbDsKK+mzlyA+IGVlbDsKK+meoyA+IHRhbjsKK+ajuSA+IG9hcjsKK+mZgiA+IGRhbTsKK+augSA+IGRpZTsKK+inmiA+IGp1ZzsKK+iHrCA+IGxhdzsKK+eMgyA+IGRvZzsKK+WvpCA+IGZldzsKK+WDliA+IGpveTsKK+eKrSA+IGRvZzsKK+e+nSA+IHJhbTsKK+iylCA+IGZveDsKK+injCA+IHNlZTsKK+anoCA+IG9hazsKK+a6uyA+IHdldDsKK+iKnyA+IG1vdzsKK+S/oyA+IGJpZzsKK+eTvyA+IGphcjsKK+mAliA+IGZhcjsKK+WTnCA+IHNpcDsKK+masCA+IGxvdzsKK+myoSA+IGVlbDsKK+avuSA+IHJ1ZzsKK+auqiA+IGRpZTsKK+e8jyA+IGhlbTsKK+mloyA+IGVhdDsKK+WfpCA+IGFkZDsKK+WdrSA+IG11ZDsKK+m+pSA+IGJlZzsKK+m9oyA+IGFjdDsKK+m8oSA+IHJhdDsKK+m7lSA+IHJlZDsKK+m5iyA+IGVtdTsKK+m0niA+IG93bDsKK+mylSA+IHJvZTsKK+mxuiA+IGVlbDsKK+mxlCA+IGVlbDsKK+mxkyA+IGVlbDsKK+mwuyA+IGVlbDsKK+mwrSA+IGZpbjsKK+muniA+IHJvZTsKK+mstyA+IHBvdDsKK+mstCA+IHBvdDsKK+mshiA+IGxheDsKK+mroiA+IHdpZzsKK+mqvSA+IGxlZzsKK+motSA+IGJheTsKK+mosyA+IHJ1bjsKK+mosCA+IGZseTsKK+mooiA+IGJheTsKK+mogiA+IHJlZDsKK+mniSA+IGJpZzsKK+mklCA+IGVhdDsKK+mjoCA+IGVhdDsKK+mhmiA+IHRvcDsKK+mgsyA+IHJlZDsKK+mgqyA+IGJvdzsKK+mfliA+IHRhbjsKK+mfjiA+IHJlZDsKK+mYrCA+IHBpdDsKK+mRsCA+IGtleTsKK+mRryA+IGF3bDsKK+mRoyA+IGJpdDsKK+mQjyA+IGNhcDsKK+mPmiA+IGF4ZTsKK+mOoSA+IGhvZTsKK+mNviA+IGN1cDsKK+mMqyA+IHRpbjsKK+mMpCA+IGhvZTsKK+mMmyA+IGFkejsKK+mMlCA+IGNhcDsKK+mLpCA+IGhvZTsKK+mJjyA+IGhvZTsKK+mBiSA+IHNweTsKK+i9kSA+IHJ1dDsKK+i4tiA+IHBhdzsKK+i3piA+IGhvcDsKK+i0liA+IGJ1eTsKK+i0jyA+IHdpbjsKK+izrSA+IGJldDsKK+izpiA+IHRheDsKK+iynCA+IGFwZTsKK+iykyA+IGNhdDsKK+ixvCA+IGZveDsKK+ixtyA+IG1hbjsKK+ixrCA+IHBpZzsKK+ixqCA+IHBpZzsKK+ixnSA+IHNvdzsKK+isiiA+IGxpZTsKK+imvyA+IHNlZTsKK+imqSA+IHNlZTsKK+imjCA+IHNlZTsKK+ijgCA+IG1hdDsKK+ihnCA+IHdheTsKK+igriA+IGJlZTsKK+ignyA+IHdheDsKK+ieniA+IGFudDsKK+iemCA+IGFudDsKK+idryA+IGFwZTsKK+ickSA+IGVnZzsKK+iXtyA+IHlhbTsKK+iVtyA+IHlhbTsKK+iVkyA+IHJ1ZTsKK+iUiyA+IGRyeTsKK+iTuiA+IGFydDsKK+iToyA+IHlhbTsKK+iStCA+IHBvZDsKK+iRhCA+IG1hdDsKK+iQoCA+IGJ1ZDsKK+iMsiA+IG5vdzsKK+iKuyA+IG1vdzsKK+iJqiA+IG9hcjsKK+iHlSA+IGZhdDsKK+iHhyA+IGZhdDsKK+iGnyA+IGZhdDsKK+iGiyA+IGZhdDsKK+iGgyA+IGZhdDsKK+iCrSA+IGZhdDsKK+iCgCA+IHBlbjsKK+iAoSA+IGhvZTsKK+e/viA+IGZseTsKK+e/gyA+IGZseTsKK+e+mCA+IHJhbTsKK+e+hyA+IGlubjsKK+e9uyA+IG5ldDsKK+e9piA+IG5ldDsKK+e9nyA+IG5ldDsKK+e9hiA+IGphcjsKK+e8viA+IGphcjsKK+e3tiA+IGhlbTsKK+e3tSA+IG5ldDsKK+e3sCA+IG5ldDsKK+e3oyA+IGhlbTsKK+e1lSA+IGN1dDsKK+e1gCA+IHNldzsKK+e0riA+IHRpZTsKK+expSA+IGtleTsKK+eukSA+IGZhbjsKK+eqniA+IHBpdDsKK+eqjCA+IHBpdDsKK+eqiiA+IHBpdDsKK+eqhSA+IGZhcjsKK+egsiA+IGd1bjsKK+eetiA+IGRpbTsKK+ediiA+IHNlZTsKK+ecmyA+IGRpbTsKK+eZmSA+IGlsbDsKK+eYqCA+IG1hZDsKK+eYjyA+IGlsbDsKK+eXlyA+IGlsbDsKK+eUkiA+IGphcjsKK+eUhyA+IGphcjsKK+eUgSA+IGp1ZzsKK+eUgCA+IGphcjsKK+eTuyA+IGphcjsKK+eTgCA+IGdlbTsKK+eShSA+IGdlbTsKK+eOhiA+IG5vdzsKK+eOgCA+IHBpZzsKK+eNqyA+IGRvZzsKK+eNqiA+IHNseTsKK+eNoiA+IGRvZzsKK+eMrSA+IGFwZTsKK+eMqCA+IGFwZTsKK+eJvCA+IG1hbjsKK+eIviA+IHlvdTsKK+eEniA+IGRpbTsKK+eBiyA+IGxhdzsKK+a+nSA+IG11ZDsKK+a9miA+IGdheTsKK+aykiA+IG5vdDsKK+avpyA+IGZ1cjsKK+auoyA+IGRpZTsKK+auniA+IGRpZTsKK+atvyA+IGRpZTsKK+atoCA+IHNpcDsKK+arpyA+IG9hazsKK+arkyA+IG9hcjsKK+argiA+IG9hcjsKK+aqnSA+IG9hcjsKK+appyA+IGh1dDsKK+aooCA+IGVsbTsKK+ansyA+IG9hcjsKK+aljiA+IHBlZzsKK+aktyA+IGJveDsKK+ajkyA+IGhpdDsKK+aitiA+IG9hcjsKK+aiqSA+IGhvZDsKK+ahriA+IGN1cDsKK+afuCA+IGN1cDsKK+adhSA+IHR1YjsKK+abgSA+IGFuZDsKK+aZniA+IGRyeTsKK+aYhCA+IGJpZzsKK+aWuCA+IGN1dDsKK+aWsiA+IGN1dDsKK+aWqCA+IGF4ZTsKK+aUtSA+IHJhcDsKK+aUtCA+IHJhcDsKK+aTuiA+IHB1dDsKK+aRnyA+IGh1ZzsKK+aQsCA+IGRpZzsKK+aQqCA+IHJ1YjsKK+aQpyA+IGZhbjsKK+aQgyA+IGFsbDsKK+aMvCA+IHJ1YjsKK+aFsSA+IHNhZDsKK+aEtCA+IHNhZDsKK+aDmSA+IHNhZDsKK+W8qCA+IGJvdzsKK+W8pCA+IGJvdzsKK+W7rCA+IGh1dDsKK+W4oyA+IGJhZzsKK+WwkyA+IHlvdTsKK+WwkiA+IHlvdTsKK+WvmSA+IGJhZDsKK+WsmyA+IGFwdDsKK+WmtSA+IG1hbjsKK+WmsyA+IHlvdTsKK+WlrSA+IHJlZDsKK+WlnCA+IGJpZzsKK+WljCA+IGRvdDsKK+WjuiA+IGphcjsKK+WjtyA+IGphcjsKK+WiqyA+IGN1cDsKK+WgjCA+IGRhbTsKK+WftiA+IGFydDsKK+WfpyA+IGRhbTsKK+WchyA+IGFsbDsKK+WaoiA+IGJhZzsKK+WajCA+IHNpcDsKK+WWqyA+IGVhdDsKK+WVlyA+IGVhdDsKK+WMuCA+IGJveDsKK+WKmiA+IGN1dDsKK+WJuCA+IGN1dDsKK+WJriA+IGN1dDsKK+WJiSA+IGN1dDsKK+WIsiA+IGN1dDsKK+WHoyA+IGFsbDsKK+WHoiA+IGFsbDsKK+WHgyA+IG11ZDsKK+WGqyA+IGljZTsKK+WGniA+IGZhcjsKK+WDiSA+IGFsbDsKK+WBryA+IHNvYjsKK+WAniA+IGZhcjsKK+S/gSA+IGJpZzsKK+S+iiA+IGJpZzsKK+S9vSA+IGFpZDsKK+S6kyA+IGhpczsKK+S6gSA+IGRyeTsKK+S5oiA+IGxpZDsKK+S4tiA+IGRvdDsKK+SzoCA+IG93bDsKK+SyiiA+IGZyeTsKK+SwoCA+IGdvZDsKK+SqniA+IGJhZDsKK+SqmiA+IGhvdDsKK+SphiA+IG9sZDsKK+SovyA+IGJhZDsKK+SimyA+IGZhcjsKK+SikyA+IGJlZDsKK+ShnCA+IGNhcjsKK+SdhiA+IGhvZzsKK+ScoyA+IGpveTsKK+SXtiA+IHdheDsKK+SXrCA+IGJlZTsKK+SXpiA+IGJlZTsKK+SSrCA+IG5vdDsKK+SRiyA+IGZhdDsKK+SRiiA+IGZhdDsKK+SRgiA+IGZhdDsKK+SQviA+IGZhdDsKK+SQtSA+IGZhdDsKK+SQqiA+IGZhdDsKK+SQqSA+IGZhdDsKK+SQnyA+IGZhdDsKK+SQjyA+IGZhdDsKK+SQjiA+IGZhdDsKK+SQiSA+IGZhdDsKK+SPuyA+IGNhbjsKK+SPtCA+IGRpbTsKK+SPpSA+IGRyeTsKK+SPnCA+IGZhdDsKK+SOiyA+IGZseTsKK+SNnSA+IG5ldDsKK+SNlSA+IG5ldDsKK+SNkiA+IG5ldDsKK+SMoiA+IHJhdzsKK+SLrCA+IHJ1ZzsKK+SLniA+IHdlYjsKK+SLhCA+IHdlYjsKK+SKkSA+IHBheTsKK+SJviA+IGJhZDsKK+SGviA+IGJpZzsKK+SGsSA+IGJpZzsKK+SBriA+IHNhZDsKK+O+kSA+IGZhdDsKK+O6iyA+IHBpZzsKK+O5hSA+IGFsbDsKK+O4gSA+IGRyeTsKK+O3qiA+IGZhdDsKK+O3oyA+IHJlZDsKK+O0vCA+IHdldDsKK+O0tyA+IHdldDsKK+OztCA+IG11ZDsKK+OyrSA+IHJ1ZzsKK+OyliA+IGZ1cjsKK+OujiA+IGN1cDsKK+OuiCA+IGJ1dDsKK+OrkyA+IGFpcjsKK++oliA+IHBpZzsKK++oiiA+IHNlZTsKK++ogCA+IGN1dDsKK++nviA+IHRlYTsKK++noyA+IG11ZDsKK+OmpyA+IHNhZDsKK++mnSA+IGJhZDsKK++mgiA+IGh1dDsKK+OmgCA+IGpveTsKK++luCA+IHR3bzsKK++ltSA+IHJvYjsKK+OloiA+IGJhZDsKK+OlkSA+IHNhZDsKK++kuCA+IGRldzsKK++ktCA+IG9sZDsKK++ksSA+IG9hcjsKK++kpyA+IHdheDsKK++knCA+IGVnZzsKK+OkmiA+IGpveTsKK++kjCA+IGJ1dDsKK+OkiCA+IHNhZDsKK+OioCA+IGZhcjsKK+OcuCA+IHNpbjsKK+OamiA+IGJpZzsKK+OYlCA+IGVhdDsKK+OXlCA+IGpveTsKK+OVhSA+IGJpZzsKK+OTiSA+IGljZTsKK+OSsyA+IHR3bzsKK+OSqiA+IHRpbjsKK+ORviA+IGpveTsKK+OQuiA+IGFsbDsKK+S4jSA+IG5vOwor5Li6ID4gZG87CivkuYsgPiAnJ3M7CivlvoMgPiBnbzsKK+W+gCA+IGdvOwor5LqOID4gaW47CivooYwgPiBnbzsKK+WmgiA+IGlmOwor5byEID4gZG87CivmiJYgPiBvcjsKK+WugyA+IGl0Owor6IulID4gaWY7CivniLIgPiBkbzsKK+WSsSA+IHVzOwor54K6ID4gZG87CivpgIIgPiBnbzsKK+WAmCA+IGlmOwor5pa8ID4gaW47Civlk58gPiBhaDsKK+WXqCA+IGhpOwor5b2dID4geWk7CivlgqUgPiBpZjsKK+mUsSA+IG96Owor5b6CID4gZ287CivpkpQgPiBtZDsKK+S8siA+IHdlOwor6ZWkID4gcGE7CivplY4gPiBucDsKK+mTuSA+IGxyOwor5aSCID4gZ287CivplL8gPiBlczsKK+mUnSA+IHRjOwor6ZSYID4gbm87CivplJUgPiBhYzsKK+mUiiA+IG96Owor6Y6dID4gdGM7CivpjLwgPiBucDsKK+mMmSA+IG96Owor6YudID4gb3o7Civov6wgPiBnbzsKK+e5hCA+IGJlOwor57OOID4gbW07CivnsqggPiBobTsKK+eyjSA+IG1tOwor57KBID4ga207CivnsbUgPiBkbTsKK+elgiA+IGhlOwor54mgID4gaXQ7CivmnIEgPiBpZjsKK+aUsiA+IHVwOwor5om1ID4gaW47CivlvZ4gPiB5aTsKK+W9nCA+IHlpOwor5b2bID4geWk7Civlu7QgPiBnbzsKK+WXiCA+IG9oOwor5ZayID4gYWg7CivllqQgPiBhaDsKK+WSgSA+IHNvOwor5YWhID4gaGc7CivlhZ4gPiBtZzsKK+WFnSA+IGRnOwor5YS7ID4gaWY7CivlgbogPiB1czsKK+S9oiA+IGhlOwor76iIID4gZ287CivvpbQgPiBpZjsKK++lpyA+IG5vOwor76WDID4gZG87CivkvZkgPiBpOwor5ZC+ID4gaTsKK+S6iCA+IGk7CivkvqwgPiBpOwor6bq/ID4gaTsKK+aotiA+IGM7CivlhIIgPiBpOwor44CCIDw+ICcuJzsKKzo6IGZ1bGx3aWR0aC1oYWxmd2lkdGggKCk7CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hhbl9MYXRpbl9FRElDVC50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hhbl9MYXRpbl9FRElDVC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyZmY0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSGFuX0xhdGluX0VESUNULnR4dApAQCAtMCwwICsxLDExNjAyMCBAQAor77u/Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9IYW5fTGF0aW5fRURJQ1QudHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wNy8yMSAwODoyNjo0MCAkCisjICRSZXZpc2lvbjogMS4xICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIENvbnZlcnQgQ0pLIGNoYXJhY3RlcnMKKyMgTm90ZTogYWRkcyBzcGFjZSBiZXR3ZWVuIHRoZW0gYW5kIGxldHRlcnMuCis6OiAoaGFsZndpZHRoLWZ1bGx3aWR0aCk7Cis6OiAoa2F0YWthbmEtbGF0aW4pOworOjogKGhpcmFnYW5hLWxhdGluKTsKKworJHRlcm1pbmFsUHVuY3QgPSBbXC5cLFw6XDtcP1wh77yO77yM77ya77yf77yB44CC44CB77ybWzpQZTpdWzpQZjpdXTsKKyR0ZXJtaW5hbFB1bmN0IHsgfSBbOkw6XSA+ICcgJzsKK1s6TDpdIHsgfSBbWzpIYW46XVs6UHM6XVs6UGk6XV0+ICcgJzsKKworJGthdGEgPSBbW+++nu++n++9sOODvF1bOmthdGFrYW5hOl1dOworJGthdGEgeyB9IFtbOkw6XS0ka2F0YV0+ICcgJzsKK1tbOkw6XS0ka2F0YV0geyB9ICRrYXRhID4gJyAnOworCitbOmhpcmFnYW5hOl0geyB9IFtbOkw6XS1bOmhpcmFnYW5hOl1dID4gJyAnOworW1s6TDpdLVs6aGlyYWdhbmE6XV0geyB9IFs6aGlyYWdhbmE6XT4gJyAnOworCisjIFN0YXJ0IFJBVyBkYXRhIGZvciBjb252ZXJ0aW5nIENKSyBjaGFyYWN0ZXJzCivms5Xlrabns7vlpKflrabpmaLlhbHpgJrlhaXlraboqabpqJMgPCBob3VnYWt1a2VpZGFpZ2FrdWlua3lvdXRzdXVueXV1Z2FrdXNoaWtlblwgOwor57Gz5Zu95aSn5a2m5YWl5a2m5YWx6YCa6Kmm6aiTIDwgYmVpa29rdWRhaWdha3VueXV1Z2FrdWt5b3V0c3V1c2hpa2VuXCA7CivmnJ3prq7msJHkuLvkuLvnvqnkurrmsJHlhbHlkozlm70gPCBjaG91c2VubWluc2h1c2h1Z2lqaW5taW5reW91d2Frb2t1XCA7Civoh6rli5Xou4rmkI3lrrPos6DlhJ/osqzku7vkv53pmbogPCBqaWRvdXNoYXNvbmdhaWJhaXNob3VzZWtpbmluaG9rZW5cIDsKK+iHqOWFtemXmOiAheeahumZo+ijguWcqOWJjSA8IHJpbnB5b3V0b3VzaGFrYWlqaW5yZXRzdXphaXplblwgOwor5pel5pys5Yq05YON57WE5ZCI57eP6KmV6K2w5LyaIDwgbmlob25yb3Vkb3VrdW1pYWlzb3VoeW91Z2lrYWlcIDsKK+WkquW5s+a0i+apn+aisOe/u+ios+WNlOS8miA8IHRhaWhlaXlvdWtpa2FpaG9uJyd5YWt1a3lvdWthaVwgOwor5Yuk5Yq06ICF6LKh55Sj5b2i5oiQ5L+D6YCyIDwga2lucm91c2hhemFpc2Fua2Vpc2Vpc29rdXNoaW5cIDsKK+i2hei2heWkp+imj+aooembhuepjeWbnui3ryA8IGNob3VjaG91ZGFpa2lib3NodXVzZWtpa2Fpcm9cIDsKK+e1jOa4iOWNlOWKm+mWi+eZuuapn+aniyA8IGtlaXphaWt5b3VyeW9rdWthaWhhdHN1a2lrb3VcIDsKK+WMl+a1t+mBk+mWi+eZuuW6gemVt+WumCA8IGhva2thaWRvdWthaWhhdHN1Y2hvdWNob3VrYW5cIDsKK+aLmOadn+WQjeewv+W8j+avlOS+i+S7o+ihqOWItiA8IGtvdXNva3VtZWlib2hpcmVpZGFpaHlvdXNlaVwgOwor55+l6K2Y6ZuG57SE5Z6L55Sj5qWtIDwgY2hpc2hpa2lzaHV1eWFrdWdhdGFzYW5neW91XCA7CivlpJblm73kurrnmbvpjLLoqLzmmI7mm7ggPCBnYWlrb2t1amludG91cm9rdXNob3VtZWlzaG9cIDsKK+WkquW5s+a0i+WuieWFqOS/nemanOadoee0hCA8IHRhaWhlaXlvdWFuemVuaG9zaG91am91eWFrdVwgOwor5pON57im5bit6Z+z5aOw6KiY6Yyy6KOF572uIDwgc291anV1c2VraW9uc2Vpa2lyb2t1c291Y2hpXCA7CivmiKbnlaXlhbXlmajliYrmuJvmnaHntIQgPCBzZW5yeWFrdWhlaWtpc2FrdWdlbmpvdXlha3VcIDsKK+iIquepuuWuh+WumeaKgOihk+eglOeptuaJgCA8IGtvdWt1dXVjaHV1Z2lqdXRzdWtlbmt5dXVqb1wgOwor5Zu96Zqb5qmf5qKw57+76Kiz5Y2U5LyaIDwga29rdXNhaWtpa2FpaG9uJyd5YWt1a3lvdWthaVwgOwor6Ieq5b6L56We57WM5aSx6Kq/55eHIDwgamlyaXRzdXNoaW5rZWlzaGl0Y2hvdXNob3VcIDsKK+Wbvemam+mbu+awl+mAmuS/oemAo+WQiCA8IGtva3VzYWlkZW5raXRzdXVzaGlucmVuZ291XCA7CivmspbnuITplovnmbrluoHplbflrpggPCBva2luYXdha2FpaGF0c3VjaG91Y2hvdWthblwgOwor5rW35aSW57WM5riI5Y2U5Yqb5Z+66YeRIDwga2FpZ2Fpa2VpemFpa3lvdXJ5b2t1a2lraW5cIDsKK+aXpeexs+WuieWFqOS/nemanOadoee0hCA8IG5pY2hpYmVpYW56ZW5ob3Nob3Vqb3V5YWt1XCA7Civmta7li5XlsI/mlbDngrnmvJTnrpfmqZ/mp4sgPCBmdWRvdXNob3VzdXV0ZW4nJ2VuemFua2lrb3VcIDsKK+ePvumHkeiHquWLlemgkOmHkeaUr+aJleapnyA8IGdlbmtpbmppZG91eW9raW5zaGloYXJhaWtpXCA7CivlvIHoqLzms5XnmoTllK/nianoq5YgPCBiZW5zaG91aG91dGVraXl1aWJ1dHN1cm9uXCA7CivmiKbmsqHogIXov73mgrzoqJjlv7Xml6UgPCBzZW5ib3RzdXNoYXRzdWl0b3VraW5lbmJpXCA7Civlm73pmpvljZTlipvkuovmpa3lm6MgPCBrb2t1c2Fpa3lvdXJ5b2t1amlneW91ZGFuXCA7CivmiKbooZPoiKrnqbrntbHliLbmnKzpg6ggPCBzZW5qdXRzdWtvdWt1dXRvdXNlaWhvbmJ1XCA7Civlt6Xmpa3pq5jnrYnlsILploDlrabmoKEgPCBrb3VneW91a291dG91c2VubW9uZ2Fra291XCA7CivljJflpKfopb/mtIvmnaHntITmqZ/mp4sgPCBraXRhdGFpc2VpeW91am91eWFrdWtpa291XCA7CivotoXlpKfopo/mqKHpm4bnqY3lm57ot68gPCBjaG91ZGFpa2lib3NodXVzZWtpa2Fpcm9cIDsKK+Wul+aVmeeahOeLrOeri+aApyA8IHNodXVreW91dGVraWRva3VyaXRzdXNlaVwgOwor5YyW5a2m5YW15Zmo56aB5q2i5p2h57SEIDwga2FnYWt1aGVpa2lraW5zaGlqb3V5YWt1XCA7CivplqLnqI7osr/mmJPkuIDoiKzljZTlrpogPCBrYW56ZWlib3Vla2lpcHBhbmt5b3V0ZWlcIDsKK+S4u+i+numnhuWLleWPpeani+mAoOaWh+azlSA8IHNodWppa3Vkb3VrdWtvdXpvdWJ1bnBvdVwgOwor55u05o6l54Wn5rqW5bCE5pKDIDwgY2hva3VzZXRzdXNob3VqdW5zaGFnZWtpXCA7Civnt4/lkIjnmoTlk4Hos6rnrqHnkIYgPCBzb3Vnb3V0ZWtpaGluc2hpdHN1a2FucmlcIDsKK+eWkeS8vOebtOaOpeebrueahOiqniA8IGdpamljaG9rdXNldHN1bW9rdXRla2lnb1wgOwor5Zyo55WZ5pyf6ZaT5pu05paw6Kix5Y+vIDwgemFpcnl1dWtpa2Fua291c2hpbmt5b2thXCA7Civnibnmrorlj5bmibHpg7Xkvr8gPCB0b2t1c2h1dG9yaWF0c3VrYWl5dXViaW5cIDsKK+S5vua5v+eQg+a5v+W6puioiCA8IGthbnNoaXRzdWt5dXVzaGl0c3Vkb2tlaVwgOwor5LiH5Zu96JGX5L2c5qip5p2h57SEIDwgYmFua29rdWNob3Nha3VrZW5qb3V5YWt1XCA7CivkuIflm73lm73pmpvpn7PmqJnmloflrZcgPCBiYW5rb2t1a29rdXNhaW9ucHlvdW1vamlcIDsKK+iogOiqnuWtpueahOWun+WcqOirliA8IGdlbmdvZ2FrdXRla2lqaXRzdXphaXJvblwgOwor5Yag54q25YuV6ISI6KGA5qCT55eHIDwga2Fuam91ZG91bXlha3VrZXNzZW5zaG91XCA7Civnp5HlrabmioDooZPluoHplbflrpggPCBrYWdha3VnaWp1dHN1Y2hvdWNob3VrYW5cIDsKK+a1t+a0i+aKleajhOimj+WItuadoee0hCA8IGthaXlvdXRvdWtpa2lzZWlqb3V5YWt1XCA7CivlnKflr4bpmY3kvI/lv5zlipsgPCBhdHN1bWl0c3Vrb3VmdWt1b3VyeW9rdVwgOwor5YWs6KqN5Y245aOy5qWt6ICFIDwga291bmluJydvcm9zaGl1cmlneW91c2hhXCA7CivotaTooYDnkIPmsojpmY3pgJ/luqYgPCBzZWtrZWtreXV1Y2hpbmtvdXNva3Vkb1wgOwor55+z5rK56Ly45Ye65Zu95qmf5qeLIDwgc2VraXl1eXVzaHV0c3Vrb2t1a2lrb3VcIDsKK+WFrOWFseiBt+alreWuieWumuaJgCA8IGtvdWt5b3VzaG9rdWd5b3VhbnRlaWpvXCA7CivmiKbooZPoiKrnqbrntbHliLbnj60gPCBzZW5qdXRzdWtvdWt1dXRvdXNlaWhhblwgOwor6YeO55Sf5YuV54mp5L+d6K235Zuj5L2TIDwgeWFzZWlkb3VidXRzdWhvZ29kYW50YWlcIDsKK+iHquWLleWIl+i7iuWItuW+oeijhee9riA8IGppZG91cmVzc2hhc2VpZ3lvc291Y2hpXCA7Civoh6rli5Xph5Hpiq3lh7rlhaXmqZ8gPCBqaWRvdWtpbnNlbnNodXRzdW55dXVraVwgOwor5aSp54S26LOH5rqQ5L+d6K236KuW6ICFIDwgdGVuJyduZW5zaGlnZW5ob2dvcm9uc2hhXCA7CivlnLDpnIfpm7fngavkuovopqrniLYgPCBqaXNoaW5rYW1pbmFyaWthamlveWFqaVwgOwor6Z2e5bi45LqL5oWL5a++5Yem6KiI55S7IDwgaGlqb3VqaXRhaXRhaXNob2tlaWtha3VcIDsKK+aguOWIhuijgueUn+aIkOeJqSA8IGtha3VidW5yZXRzdXNlaXNlaWJ1dHN1XCA7CivlpJrogqLpgbjmip7lvI/oqabllY8gPCB0YXNoaXNlbnRha3VzaGlraXNoaW1vblwgOwor5paw6Zai6KW/5Zu96Zqb56m65rivIDwgc2hpbmthbnNhaWtva3VzYWlrdXVrb3VcIDsKK+iBt+alreWIpembu+ipseW4syA8IHNob2t1Z3lvdWJldHN1ZGVud2FjaG91XCA7Civoh6rli5XliJfou4rlgZzmraLoo4Xnva4gPCBqaWRvdXJlc3NoYXRlaXNoaXNvdWNoaVwgOwor6KiA6Kqe5a2m55qE6Kaz5b+16KuWIDwgZ2VuZ29nYWt1dGVraWthbicnbmVucm9uXCA7CivlvoznmbrnmbrlsZXpgJTkuIrlm70gPCBrb3VoYXRzdWhhdHRlbnRvam91a29rdVwgOwor5oq55raI55m76Yyy6Ki85piO5pu4IDwgbWFzaG91dG91cm9rdXNob3VtZWlzaG9cIDsKK+e1jOa4iOS8geeUu+W6gemVt+WumCA8IGtlaXphaWtpa2FrdWNob3VjaG91a2FuXCA7Civlho3nlJ/kuI3oia/mgKfosqfooYAgPCBzYWlzZWlmdXJ5b3VzZWloaW5rZXRzdVwgOwor54Gr5Yqb5pSv5o+06Kq/5pW057eaIDwga2FyeW9rdXNoaWVuY2hvdXNlaXNlblwgOwor5YWl5a2m5YWx6YCa6Kmm6aiTIDwgbnl1dWdha3VreW91dHN1dXNoaWtlblwgOwor56C05aOK5rS75YuV6Ziy5q2i5rOVIDwgaGFrYWlrYXRzdWRvdWJvdXNoaWhvdVwgOwor5a6k5YaF566h5bym5qW95ZujIDwgc2hpdHN1bmFpa2FuZ2VuZ2FrdWRhblwgOwor5p2x5Lqs5qCq5byP5biC5aC0IDwgdG91a3lvdWthYnVzaGlraXNoaWpvdVwgOwor56K6546H5a+G5bqm6Zai5pWwIDwga2FrdXJpdHN1bWl0c3Vkb2thbnN1dVwgOwor5Y6f5a2Q5Yqb55m66Zu75omAIDwgZ2Vuc2hpcnlva3VoYXRzdWRlbnNob1wgOwor5Luj6KGo5Y+W57eg5b25IDwgZGFpaHlvdXRvcmlzaGltYXJpeWFrdVwgOwor5Y+W5omx6Kqs5piO5pu4IDwgdG9yaWF0c3VrYWlzZXRzdW1laXNob1wgOwor6LWk5Y2B5a2X5Zu96Zqb5aeU5ZOh5LyaIDwgc2VraWp1dWppa29rdXNhaWlpbmthaVwgOwor5Yun5ZaE5oey5oKq5bCP6KqsIDwga2FuemVuY2hvdWFrdXNob3VzZXRzdVwgOwor5Zu96Zqb6L+U5L+h5YiH5omL5Yi4IDwga29rdXNhaWhlbnNoaW5raXR0ZWtlblwgOwor6KuH6Kmx6KGo56S65qeL6YCg55CG6KuWIDwgZGFud2FoeW91amlrb3V6b3VyaXJvblwgOwor5YWx55Sj5YWa5Lit5aSu5aeU5ZOh5LyaIDwga3lvdXNhbnRvdWNodXVvdWlpbmthaVwgOwor5p2t5ZGo6Z2i5pGp5pOm5YqbIDwga3Vpc2h1dW1lbm1hc2F0c3VyeW9rdVwgOwor5Lit6I+v5Lq65rCR5YWx5ZKM5Zu9IDwgY2h1dWthamlubWlua3lvdXdha29rdVwgOwor5p2x5rW36YGT5LqU5Y2B5LiJ5qyhIDwgdG91a2FpZG91Z29qdXVzYW50c3VnaVwgOwor5a6H5a6Z6ZaL55m65LqL5qWt5ZujIDwgdWNodXVrYWloYXRzdWppZ3lvdWRhblwgOwor5rCR5Li75YWa5YWo5Zu95aeU5ZOh5LyaIDwgbWluc2h1dG91emVua29rdWlpbmthaVwgOwor6Iux6Kqe5Z+656SO6IO95Yqb6Kmm6aiTIDwgZWlnb2tpc29ub3VyeW9rdXNoaWtlblwgOwor6ZaT5o6l54Wn5rqW5bCE5pKDIDwga2Fuc2V0c3VzaG91anVuc2hhZ2VraVwgOwor5LiJ6Lu45Zyn57iu6Kmm6aiT5qmfIDwgc2FuamlrdWFzc2h1a3VzaGlrZW5raVwgOwor6KaW6IG06ICF5Y+C5Yqg55Wq57WEIDwgc2hpY2hvdXNoYXNhbmthYmFuZ3VtaVwgOwor5bee6Zqb6YCa5ZWG5aeU5ZOh5LyaIDwgc2h1dXNhaXRzdXVzaG91aWlua2FpXCA7CivmlrDopo/moKrlvI/lhazplosgPCBzaGlua2lrYWJ1c2hpa2lrb3VrYWlcIDsKK+WRqOazouaVsOWkieaPm+ijhee9riA8IHNodXVoYXN1dWhlbmthbnNvdWNoaVwgOwor5a2m57+S5oyH5bCO6KaB6aCYIDwgZ2FrdXNodXVzaGlkb3V5b3VyeW91XCA7CivmhaLmgKfnlrLlirTnl4flgJnnvqQgPCBtYW5zZWloaXJvdXNob3Vrb3VndW5cIDsKK+WFrOWus+WvvuetluWfuuacrOazlSA8IGtvdWdhaXRhaXNha3VraWhvbmhvdVwgOwor5pep55m65oCn55e05ZGG55eHIDwgc291aGF0c3VzZWljaGlob3VzaG91XCA7CivntYzmuIjlm6PkvZPpgKPlkIjkvJogPCBrZWl6YWlkYW50YWlyZW5nb3VrYWlcIDsKK+aIpumXmOmbu+WtkOaIpuaDheWgsSA8IHNlbnRvdWRlbnNoaXNlbmpvdWhvdVwgOwor5L+h55So5Y2U5ZCM57WE5ZCIIDwgc2hpbicneW91a3lvdWRvdWt1bWlhaVwgOwor54++6YeR6Ieq5YuV5pSv5omV5qmfIDwgZ2Vua2luamlkb3VzaGloYXJhaWtpXCA7CivlvKbmpb3lm5vph43lpY/mm7IgPCBnZW5nYWt1c2hpanV1c291a3lva3VcIDsKK+a8lOe5ueeahOiqrOaYjuazlSA8IGVuJydla2l0ZWtpc2V0c3VtZWlob3VcIDsKK+acgOmrmOe1jOWWtuiyrOS7u+iAhSA8IHNhaWtvdWtlaWVpc2VraW5pbnNoYVwgOwor5rex5Zyo5oCn55yf6I+M55eHIDwgc2hpbnphaXNlaXNoaW5raW5zaG91XCA7Civoo4XnlLLkurrlk6HpgYvmkKzou4ogPCBzb3Vrb3VqaW4nJ2luJyd1bnBhbnNoYVwgOwor5LiA6Iis5ZG95Luk5ryU566X5qmf5qeLIDwgaXBwYW5tZWlyZWllbnphbmtpa291XCA7CivntbHnjofmnZ/nuJvnkIboq5YgPCB0b3Vzb3RzdXNva3ViYWt1cmlyb25cIDsKK+acrOaFi+aAp+mrmOihgOWcpyA8IGhvbnRhaXNlaWtvdWtldHN1YXRzdVwgOwor5pel5pys6Kqe6IO95Yqb6Kmm6aiTIDwgbmlob25nb25vdXJ5b2t1c2hpa2VuXCA7CivpmbjkuIrnq6/lsYDoo4Xnva4gPCByaWt1am91dGFua3lva3Vzb3VjaGlcIDsKK+mfs+evgOS4u+mfs+eahOWtkOmfsyA8IG9uc2V0c3VzaHVvbnRla2lzaGlpblwgOwor5pel57Gz6LK/5piT5pGp5pOmIDwgbmljaGliZWlib3Vla2ltYXNhdHN1XCA7CivoqLzliLjlj5blvJXlp5Tlk6HkvJogPCBzaG91a2VudG9yaWhpa2lpaW5rYWlcIDsKK+mAmuWVhueUo+alreWkp+iHoyA8IHRzdXVzaG91c2FuZ3lvdWRhaWppblwgOwor5pyA6auY6LKh5YuZ6LKs5Lu76ICFIDwgc2Fpa291emFpbXVzZWtpbmluc2hhXCA7Civnn63ot53pm6Lpm6LnnYDpmbjmqZ8gPCB0YW5reW9yaXJpY2hha3VyaWt1a2lcIDsKK+mAmuWVhuiIqua1t+adoee0hCA8IHRzdXVzaG91a291a2Fpam91eWFrdVwgOwor5qmf6IO95Y2Y5LiA5YyW5paH5rOVIDwga2lub3V0YW4nJ2l0c3VrYWJ1bnBvdVwgOwor55+l6IO95oOF5aCx56CU56m26YOoIDwgY2hpbm91am91aG91a2Vua3l1dWJ1XCA7CivliqDlnKfmsLTlnovljp/lrZDngokgPCBrYWF0c3VzdWlnYXRhZ2Vuc2hpcm9cIDsKK+eSsOWkquW5s+a0i+WcsOmch+W4ryA8IGthbnRhaWhlaXlvdWppc2hpbnRhaVwgOwor6Luf5Yik5a6a6K2Y5Yil5ZmoIDwgbmFuaGFudGVpc2hpa2liZXRzdWtpXCA7Civlm73nq4vljZrnianppKggPCBrb2t1cml0c3VoYWt1YnV0c3VrYW5cIDsKK+epuuaDs+enkeWtpuWwj+iqrCA8IGt1dXNvdWthZ2FrdXNob3VzZXRzdVwgOwor5Lq656iu5beu5Yil5Li7576p6ICFIDwgamluc2h1c2FiZXRzdXNodWdpc2hhXCA7CivmlrDlhaXnpL7lk6HmlZnogrIgPCBzaGluJydueXV1c2hhaW5reW91aWt1XCA7CivmjqjlpajmlofnjK7nm67pjLIgPCBzdWlzaG91YnVua2VubW9rdXJva3VcIDsKK+mbhuS4reayu+eZguWupCA8IHNodXVjaHV1Y2hpcnlvdXNoaXRzdVwgOwor5b6z5bed5LiJ5Luj5a625YWJIDwgdG9rdWdhd2FzYW5kYWlpZW1pdHN1XCA7Civoh6rnhLbnkrDlooPkv53lhajms5UgPCBzaGl6ZW5rYW5reW91aG96ZW5ob3VcIDsKK+eUn+a0u+WNlOWQjOe1hOWQiCA8IHNlaWthdHN1a3lvdWRvdWt1bWlhaVwgOwor55Kw5aSq5bmz5rSL6YCg5bGx5bivIDwga2FudGFpaGVpeW91em91emFudGFpXCA7CivooYzli5XkuLvnvqnlv4PnkIblraYgPCBrb3Vkb3VzaHVnaXNoaW5yaWdha3VcIDsKK+aWmemHkeWIpee0jemDteS+vyA8IHJ5b3VraW5iZXRzdW5vdXl1dWJpblwgOwor5Lit6Led6Zui5qC45oim5YqbIDwgY2h1dWt5b3Jpa2FrdXNlbnJ5b2t1XCA7CivnrKzkuIDmrKHkuJbnlYzlpKfmiKYgPCBkYWlpY2hpamlzZWthaXRhaXNlblwgOwor6L6y5qWt5Y2U5ZCM57WE5ZCIIDwgbm91Z3lvdWt5b3Vkb3VrdW1pYWlcIDsKK+Wkp+mZuOaoquaWremJhOmBkyA8IHRhaXJpa3VvdWRhbnRldHN1ZG91XCA7Civnm7TovYTmpI3msJHlnLAgPCBjaG9ra2F0c3VzaG9rdW1pbmNoaVwgOwor5aSJ5YuV54K65pu/55u45aC05Yi2IDwgaGVuZG91a2F3YXNlc291YmFzZWlcIDsKK+acqOmAoOW7uuevieeJqSA8IG1va3V6b3VrZW5jaGlrdWJ1dHN1XCA7Civpq5jliIblrZDlkLjlj47kvZMgPCBrb3VidW5zaGlreXV1c2h1dXRhaVwgOwor5q2v5YaF55mC5rOV5bCC6ZaA5Yy7IDwgc2hpa2FyeW91aG91c2VubW9uJydpXCA7Civml6XnsbPmp4vpgKDljZTorbAgPCBuaWNoaWJlaWtvdXpvdWt5b3VnaVwgOwor5qmf5qKw57+76Kiz5Y2U5LyaIDwga2lrYWlob24nJ3lha3VreW91a2FpXCA7CivmpI3nianmgKfom4vnmb0gPCBzaG9rdWJ1dHN1c2VpdGFucGFrdVwgOwor5L+h55So5Y+W5byV5YWIIDwgc2hpbicneW91dG9yaWhpa2lzYWtpXCA7CivkuK3lpK7ooYzmlL/lrpjluoEgPCBjaHV1b3VneW91c2Vpa2FuY2hvdVwgOwor5YyX5aSn6KW/5rSL5p2h57SEIDwga2l0YXRhaXNlaXlvdWpvdXlha3VcIDsKK+W4uOWLmeWPlue3oOW9uSA8IGpvdW11dG9yaXNoaW1hcml5YWt1XCA7CivnkrDlpKrlubPmtIvngavlsbHluK8gPCBrYW50YWloZWl5b3VrYXphbnRhaVwgOwor6Zu75rCX6YCa5L+h5aSn5a2mIDwgZGVua2l0c3V1c2hpbmRhaWdha3VcIDsKK+iKs+mmmeaXj+WMluWQiOeJqSA8IGhvdWtvdXpva3VrYWdvdWJ1dHN1XCA7CivkuIPmmJ/lpKnpgZPomasgPCBuYW5haG9zaGl0ZW50b3VtdXNoaVwgOwor5YaF6Zaj5a6Y5oi/6ZW35a6YIDwgbmFpa2FrdWthbmJvdWNob3VrYW5cIDsKK+Wun+aDheiqv+afu+WnlOWToeS8miA8IGppdHN1am91Y2hvdXNhaWlua2FpXCA7CivlvKbmpb3kupTph43lpY/mm7IgPCBnZW5nYWt1Z29qdXVzb3VreW9rdVwgOwor5rCR5peP5aSn6JmQ5q66IDwgbWluem9rdWRhaWd5YWt1c2F0c3VcIDsKK+enkeWtpuWfuuekjueglOeptuaJgCA8IGthZ2FrdWtpc29rZW5reXV1c2hvXCA7CivotorlubTnlJ/mpI3niakgPCBldHN1bmVuc2Vpc2hva3VidXRzdVwgOwor5aSJ5b2i55Sf5oiQ57Wx6Kqe6KuWIDwgaGVua2Vpc2Vpc2VpdG91Z29yb25cIDsKK+ani+aIkOe0oOe1seW+oSA8IGtvdXNlaXNva291em91dG91Z3lvXCA7CivlroflrpnplovnmbroqIjnlLsgPCB1Y2h1dWthaWhhdHN1a2Vpa2FrdVwgOwor57Gz6YCj6YKm6Iiq56m65bGAIDwgYmVpcmVucG91a3V1a291a3lva3VcIDsKK+Wkp+imj+aooembhuepjeWbnui3ryA8IGRhaWtpYm9zaHV1c2VraWthaXJvXCA7CivljZfnhKHlppnms5Xok67oj6/ntYwgPCBuYW11bXlvdWhvdXJlbmdla3lvdVwgOwor5aSW5Zu95Lq655m76Yyy5rOVIDwgZ2Fpa29rdWppbnRvdXJva3Vob3VcIDsKK+WFseeUo+WFmuaUv+ayu+WxgCA8IGt5b3VzYW50b3VzZWlqaWt5b2t1XCA7CivmnKrnorroqo3po5vooYzniankvZMgPCBtaWtha3VuaW5oaWtvdWJ1dHRhaVwgOwor5LiA6YW45YyW54Kt57Sg5Lit5q+SIDwgaXNzYW5rYXRhbnNvY2h1dWRva3VcIDsKK+adn+e4m+e2meaJv+WOn+eQhiA8IHNva3ViYWt1a2Vpc2hvdWdlbnJpXCA7Civnm7TmjqXnm67nmoToqp4gPCBjaG9rdXNldHN1bW9rdXRla2lnb1wgOwor5bCC5YuZ5Y+W57eg5b25IDwgc2VubXV0b3Jpc2hpbWFyaXlha3VcIDsKK+S4gOW5tOeUn+akjeeJqSA8IGljaGluZW5zZWlzaG9rdWJ1dHN1XCA7Civpurvolqzlj5bnt6Dnj60gPCBtYXlha3V0b3Jpc2hpbWFyaWhhblwgOwor5LiJ6Lu45Zyn57iu6Kmm6aiTIDwgc2FuamlrdWFzc2h1a3VzaGlrZW5cIDsKK+m6u+iWrOWPlue3oOazlSA8IG1heWFrdXRvcmlzaGltYXJpaG91XCA7Civnqbrou43pgKPntaHlsIbmoKEgPCBrdXVndW5yZW5yYWt1c2hvdWtvdVwgOwor5Y245aOy54mp5L6h5oyH5pWwIDwgb3Jvc2hpdXJpYnVra2FzaGlzdXVcIDsKK+WGmeecn+WIpOWumuaxuuWLnSA8IHNoYXNoaW5oYW50ZWlrZXNzaG91XCA7CivliY3nq4vohbrogqXlpKfnl4cgPCB6ZW5yaXRzdXNlbmhpZGFpc2hvdVwgOwor5YWs5q2j5Y+W5byV5aeU5ZOh5LyaIDwga291c2VpdG9yaWhpa2lpaW5rYWlcIDsKK+iqrOaYjueahOWmpeW9k+aApyA8IHNldHN1bWVpdGVraWRhdG91c2VpXCA7CivkuK3lv4PnmoTlvbnlibIgPCBjaHV1c2hpbnRla2l5YWt1d2FyaVwgOwor56iO5byV5YmN5b2T5pyf5Yip55uKIDwgemVpYmlraW1hZXRvdWtpcmlla2lcIDsKK+mAo+mCpuWPluW8leWnlOWToeS8miA8IHJlbnBvdXRvcmloaWtpaWlua2FpXCA7CivlhbHpgJrkuIDmrKHoqabpqJMgPCBreW91dHN1dWljaGlqaXNoaWtlblwgOwor56ys5LiJ56iu6YO15L6/54mpIDwgZGFpc2Fuc2h1eXV1YmluYnV0c3VcIDsKK+WPi+WlvemAmuWVhuiIqua1tyA8IHl1dWtvdXRzdXVzaG91a291a2FpXCA7CivnhKHmi4Xkv53osrjku5jph5EgPCBtdXRhbnBva2FzaGl0c3VrZWtpblwgOwor5rWB6KGM5oCn6ICz5LiL6IW654KOIDwgcnl1dWtvdXNlaWppa2FzZW4nJ2VuXCA7Civlv4XopoHljYHliIbmnaHku7YgPCBoaXRzdXlvdWp1dWJ1bmpvdWtlblwgOwor57K+56We55qE5oyH5bCO6ICFIDwgc2Vpc2hpbnRla2lzaGlkb3VzaGFcIDsKK+WOn+WtkOeJqeeQhuWtpuiAhSA8IGdlbnNoaWJ1dHN1cmlnYWt1c2hhXCA7Civnsr7lr4bmqZ/morDlt6Xmpa0gPCBzZWltaXRzdWtpa2Fpa291Z3lvdVwgOwor5YaN5YWl5Zu96Kix5Y+v5pu4IDwgc2Fpbnl1dWtva3VreW91a2FzaG9cIDsKK+WumuW9ouWklumDteS+v+eJqSA8IHRlaWtlaWdhaXl1dWJpbmJ1dHN1XCA7CivotoXkuKbliJfoqIjnrpfmqZ8gPCBjaG91aGVpcmV0c3VrZWlzYW5raVwgOwor5Lit5p6i56We57WM57O757WxIDwgY2h1dXN1dXNoaW5rZWlrZWl0b3VcIDsKK+S8nemAgeWItuW+oeaLoeW8tSA8IGRlbnNvdXNlaWd5b2tha3VjaG91XCA7Civlj47nuK7mnJ/ooYDlnKcgPCBzaHV1c2h1a3VraWtldHN1YXRzdVwgOwor5pel5Lit5Y+L5aW95Y2U5LyaIDwgbml0Y2h1dXl1dWtvdWt5b3VrYWlcIDsKK+e3j+eQhuW6nOe3j+WLmemVt+WumCA8IHNvdXJpZnVzb3VtdWNob3VrYW5cIDsKK+WbveawkemHkeiejeWFrOW6qyA8IGtva3VtaW5raW4nJ3l1dWtvdWtvXCA7CivljZjlrZDokYnmpI3niakgPCB0YW5zaGl5b3VzaG9rdWJ1dHN1XCA7Civlj6PovrrljZjntJTnlrHnlrkgPCBrb3VoZW50YW5qdW5ob3VzaGluXCA7CivpgKPnq4vmlrnnqIvlvI8gPCByZW5yaXRzdWhvdXRlaXNoaWtpXCA7Civpm4blm6Plronlhajkv53pmpwgPCBzaHV1ZGFuJydhbnplbmhvc2hvdVwgOwor5ZCN56We6auY6YCf6YGT6LevIDwgbWVpc2hpbmtvdXNva3Vkb3Vyb1wgOwor5pS+5bCE5oCn6ZmN5LiL54mpIDwgaG91c2hhc2Vpa291a2FidXRzdVwgOwor55Kw5aKD5L+d6K235Li7576p6ICFIDwga2Fua3lvdWhvZ29zaHVnaXNoYVwgOwor5Yqj5oCn6YG65Lyd5b2i6LOqIDwgcmVzc2VpaWRlbmtlaXNoaXRzdVwgOwor5pel5pys6Zm45LiK6Ieq6KGb6ZqKIDwgbmlob25yaWt1am91amllaXRhaVwgOwor6YCa5ZWG55Sj5qWt55yBIDwgdHN1dXNob3VzYW5neW91c2hvdVwgOwor5Yid5pyf6YG45oqe6aCF55uuIDwgc2hva2lzZW50YWt1a291bW9rdVwgOwor5YWo5Zu95rSl5rSl5rWm5rWmIDwgemVua29rdXRzdXRzdXVyYXVyYVwgOwor5L+h5Lu757Wx5rK75Yi25bqmIDwgc2hpbicnbmludG91Y2hpc2VpZG9cIDsKK+S4u+imgemDqOe1guerr+WeiyA8IHNodXlvdWJ1c2h1dXRhbmdhdGFcIDsKK+WQiOaIkOWMluWtpuW3pealrSA8IGdvdXNlaWthZ2FrdWtvdWd5b3VcIDsKK+WOn+WtkOWKm+eZuumbuyA8IGdlbnNoaXJ5b2t1aGF0c3VkZW5cIDsKK+WbveawkeS9k+iCsuWkp+S8miA8IGtva3VtaW50YWlpa3V0YWlrYWlcIDsKK+Wbvemam+mbu+S/oembu+ipsSA8IGtva3VzYWlkZW5zaGluZGVud2FcIDsKK+mbu+WtkOizh+mHkeaMr+abvyA8IGRlbnNoaXNoaWtpbmZ1cmlrYWVcIDsKK+ebtOaOpeawkeS4u+WItiA8IGNob2t1c2V0c3VtaW5zaHVzZWlcIDsKK+mAsuWHuuWItumZkOe3miA8IHNoaW5zaHV0c3VzZWlnZW5zZW5cIDsKK+agquW8j+WPluW8leaJgCA8IGthYnVzaGlraXRvcmloaWtpam9cIDsKK+W8pualveWbm+mHjeWlj+WboyA8IGdlbmdha3VzaGlqdXVzb3VkYW5cIDsKK+iIquepuuS6pOmAmueuoeWItiA8IGtvdWt1dWtvdXRzdXVrYW5zZWlcIDsKK+iyoeaUv+Wdh+ihoeioiOeUuyA8IHphaXNlaWtpbmtvdWtlaWtha3VcIDsKK+ebtOaOpeaVmeaOiOazlSA8IGNob2t1c2V0c3VreW91anVob3VcIDsKK+aXpeacrOimj+agvOWNlOS8miA8IG5pcHBvbmtpa2FrdWt5b3VrYWlcIDsKK+WLleeJqeaEm+itt+WNlOS8miA8IGRvdWJ1dHN1YWlnb2t5b3VrYWlcIDsKK+WPjOWtkOiRieakjeeJqSA8IHNvdXNoaXlvdXNob2t1YnV0c3VcIDsKK+exs+iIquepuuWuh+WumeWxgCA8IGJlaWtvdWt1dXVjaHV1a3lva3VcIDsKK+aXpeacrOWtpuihk+S8muitsCA8IG5paG9uZ2FrdWp1dHN1a2FpZ2lcIDsKK+iKpeW3nem+jeS5i+S7iyA8IGFrdXRhZ2F3YXJ5dXVub3N1a2VcIDsKK+iyuOWAn+WvvueFp+ihqCA8IHRhaXNoYWt1dGFpc2hvdWh5b3VcIDsKK+WFrOWumuWJsuW8leeOhyA8IGtvdXRlaXdhcmliaWtpcml0c3VcIDsKK+S6uumWk+eSsOWig+Wuo+iogCA8IG5pbmdlbmthbmt5b3VzZW5nZW5cIDsKK+W8t+i/q+elnue1jOeXhyA8IGt5b3VoYWt1c2hpbmtlaXNob3VcIDsKK+WutuWuheaNnOe0ouS7pOeKtiA8IGthdGFrdXNvdXNha3VyZWlqb3VcIDsKK+WVhualreS/oeeUqOeKtiA8IHNob3VneW91c2hpbicneW91am91XCA7CivlronlnJ/moYPlsbHmmYLku6MgPCBhenVjaGltb21veWFtYWppZGFpXCA7CivnlJ/nkIbnmoTpo5/loanmsLQgPCBzZWlyaXRla2lzaG9rdWVuc3VpXCA7CivnkrDlpKrlubPmtIvoq7jlm70gPCBrYW50YWloZWl5b3VzaG9rb2t1XCA7CivngavlipvmlK/mj7ToqIjnlLsgPCBrYXJ5b2t1c2hpZW5rZWlrYWt1XCA7CivovLjlh7rkv6HnlKjnirYgPCB5dXNodXRzdXNoaW4nJ3lvdWpvdVwgOwor6YeR5Zyw6YeR5pys5L2N5Yi25bqmIDwga2luamlnYW5laG9uJydpc2VpZG9cIDsKK+iRl+S9nOaoqeaJgOacieiAhSA8IGNob3Nha3VrZW5zaG95dXVzaGFcIDsKK+aVsOWtpueahOW4sOe0jeazlSA8IHN1dWdha3V0ZWtpa2lub3Vob3VcIDsKK+aXp+aWsOe0hOWFqOabuCA8IGt5dXVzaGluJyd5YWt1emVuc2hvXCA7Civml6XmnKzlm73nibnoqLHluoEgPCBuaWhvbmtva3V0b2treW9jaG91XCA7Civlh7rlhaXlm73nrqHnkIYgPCBzaHV0c3VueXV1a29rdWthbnJpXCA7Civpo5/ns6fnrqHnkIbliLbluqYgPCBzaG9rdXJ5b3VrYW5yaXNlaWRvXCA7CivnlJ/nianljJblrablhbXlmaggPCBzZWlidXRzdWthZ2FrdWhlaWtpXCA7CivpmpzlrrPniannq7botbAgPCBzaG91Z2FpYnV0c3VreW91c291XCA7CivmmLzlhYnoibLpm7vnkIMgPCBjaHV1a291c2hva3VkZW5reXV1XCA7Civplbfml6XmpI3niakgPCBjaG91aml0c3VzaG9rdWJ1dHN1XCA7CivlpbPmqKnmi6HlvLXoq5bogIUgPCBqb2tlbmtha3VjaG91cm9uc2hhXCA7Civph43opoHnhKHlvaLmlofljJbosqEgPCBqdXV5b3VtdWtlaWJ1bmthemFpXCA7CivntYzmuIjnpL7kvJrnkIbkuovkvJogPCBrZWl6YWlzaGFrYWlyaWppa2FpXCA7CivntbHlkIjluZXlg5rkvJrorbAgPCB0b3Vnb3ViYWt1cnlvdWthaWdpXCA7Civlvovku6TmoLzlvI8gPCByaXRzdXJ5b3VreWFrdXNoaWtpXCA7CivlpKnnhLboibLlhpnnnJ8gPCB0ZW4nJ25lbnNob2t1c2hhc2hpblwgOwor5bCE5pKD56aB5q2i5Zyw5Z+fIDwgc2hhZ2VraWtpbnNoaWNoaWlraVwgOwor6aOf6IKJ5qSN54mpIDwgc2hva3VuaWt1c2hva3VidXRzdVwgOwor5Li76Kqe5Yqp5YuV6Kme5YCS572uIDwgc2h1Z29qb2RvdXNoaXRvdWNoaVwgOwor54m55ZG95YWo5qip5YWs5L2/IDwgdG9rdW1laXplbmtlbmtvdXNoaVwgOwor5rC05Yqb55m66Zu75omAIDwgc3Vpcnlva3VoYXRzdWRlbnNob1wgOwor57Sg5Ye65Yqb5p2h5Lu2IDwgc29zaHV0c3VyeW9rdWpvdWtlblwgOwor5Zu95rCR57eP5pSv5Ye6IDwga29rdW1pbnNvdXNoaXNodXRzdVwgOwor5qSN54mp5oCn6ISC6IKqIDwgc2hva3VidXRzdXNlaXNoaWJvdVwgOwor5paw6IGe5YCr55CG57ax6aCYIDwgc2hpbmJ1bnJpbnJpa291cnlvdVwgOwor6KiY6L+w55qE5aal5b2T5oCnIDwga2lqdXRzdXRla2lkYXRvdXNlaVwgOwor5pen5paw57SE6IGW5pu4IDwga3l1dXNoaW4nJ3lha3VzZWlzaG9cIDsKK+S4h+WbvemDteS+v+mAo+WQiCA8IGJhbmtva3V5dXViaW5yZW5nb3VcIDsKK+mVt+acn+iyuOS7mOmHkSA8IGNob3VraWthc2hpdHN1a2VraW5cIDsKK+ebtOaOpeaOpee2miA8IGNob2t1c2V0c3VzZXRzdXpva3VcIDsKK+S9j+WuhemHkeiejeWFrOW6qyA8IGp1dXRha3VraW4nJ3l1dWtvdWtvXCA7CivljZjkvY3kvZPnqY3ph43ph48gPCB0YW4nJ2l0YWlzZWtpanV1cnlvdVwgOwor57Wx5LiA5Zyw5pa56YG45oyZIDwgdG91aXRzdWNoaWhvdXNlbmt5b1wgOwor5YWs6ZaL5biC5aC05pS/562WIDwga291a2Fpc2hpam91c2Vpc2FrdVwgOwor5Zyw55CD6Kaz5ris6KGb5pifIDwgY2hpa3l1dWthbnNva3VlaXNlaVwgOwor55Sf54mp54mp55CG5a2mIDwgc2VpYnV0c3VidXRzdXJpZ2FrdVwgOwor5bmz5a6254mp6Kqe5oqEIDwgaGVpa2Vtb25vZ2F0YXJpc2hvdVwgOwor5ZCI5ZCM5oqA6KGT5aeU5ZOh5LyaIDwgZ291ZG91Z2lqdXRzdWlpbmthaVwgOwor6YeN6YeP5ouz6ZeY6YG45omLIDwganV1cnlvdWtlbnRvdXNlbnNodVwgOwor5Lq65bel5rCX6IO455mC5rOVIDwgamlua291a2lreW91cnlvdWhvdVwgOwor5Zyw5pa55YWs5YWx5Zuj5L2TIDwgY2hpaG91a291a3lvdWRhbnRhaVwgOwor5omL5qC5566h55eH5YCZ576kIDwgc2h1a29ua2Fuc2hvdWtvdWd1blwgOwor6auY5YiG5a2Q5YyW5ZCI54mpIDwga291YnVuc2hpa2Fnb3VidXRzdVwgOwor6aOf6Jmr5qSN54mpIDwgc2hva3VjaHV1c2hva3VidXRzdVwgOwor6Zm45LiK5L2c5oim5pys6YOoIDwgcmlrdWpvdXNha3VzZW5ob25idVwgOwor6Kaz5a+f55qE56CU56m2IDwga2Fuc2F0c3V0ZWtpa2Vua3l1dVwgOwor5pS+5bCE5oCn5buD5qOE54mpIDwgaG91c2hhc2VpaGFpa2lidXRzdVwgOwor6YCG6Lui5YiG5biD5L+C5pWwIDwgZ3lha3V0ZW5idW5wdWtlaXN1dVwgOwor6JyY6Jub6Iac5LiL5Ye66KGAIDwga3Vtb21ha3VrYXNodWtrZXRzdVwgOwor6Ieq5YuV5pa55ZCR5o6i55+l5qmfIDwgamlkb3Vob3Vrb3V0YW5jaGlraVwgOwor5YWx5ZCM5pWR5riI5Z+66YeRIDwga3lvdWRvdWt5dXVzYWlraWtpblwgOwor6LOD6LK45YCf5aWR57SEIDwgY2hpbnRhaXNoYWt1a2VpeWFrdVwgOwor5b6z5bed5YWs54i16YK4IDwgdG9rdWdhd2Frb3VzaGFrdXRlaVwgOwor5biw6YKE5LiN6IO96ZmQ55WM54K5IDwga2lrYW5mdW5vdWdlbmthaXRlblwgOwor5L+d6Zm66YeR5Y+X5Y+W5Lq6IDwgaG9rZW5raW4nJ3VrZXRvcmluaW5cIDsKK+mZuOi7jeWjq+WumOWtpuagoSA8IHJpa3VndW5zaGlrYW5nYWtrb3VcIDsKK+a8gealreWwgueuoeawtOWfnyA8IGd5b2d5b3VzZW5rYW5zdWlpa2lcIDsKK+eyvuelnuWIhuijgueXhyA8IHNlaXNoaW5idW5yZXRzdXNob3VcIDsKK+iKuOihk+iHs+S4iuS4u+e+qSA8IGdlaWp1dHN1c2hpam91c2h1Z2lcIDsKK+eJueWRveWFqOaoqeWkp+S9vyA8IHRva3VtZWl6ZW5rZW50YWlzaGlcIDsKK+i/keaOpeiIquepuuaUr+aPtCA8IGtpbnNldHN1a291a3V1c2hpZW5cIDsKK+WkqumZveeGseeZuumbuyA8IHRhaXlvdW5ldHN1aGF0c3VkZW5cIDsKK+a1t+WklueVmeWtpueGsSA8IGthaWdhaXJ5dXVnYWt1bmV0c3VcIDsKK+acieapn+awtOmKgOS4reavkiA8IHl1dWtpc3VpZ2luY2h1dWRva3VcIDsKK+WmiuWooOS4reavkueXhyA8IG5pbnNoaW5jaHV1ZG9rdXNob3VcIDsKK+eSsOWkquW5s+a0i+ani+aDsyA8IGthbnRhaWhlaXlvdWtvdXNvdVwgOwor54us56uL5o6h566X5Yi2IDwgZG9rdXJpdHN1c2Fpc2Fuc2VpXCA7CivluILloLTljaDmnInnjocgPCBzaGlqb3VzZW4nJ3l1dXJpdHN1XCA7CivlhaznmoTkuI3ms5XlpqjlrrMgPCBrb3V0ZWtpZnVob3Vib3VnYWlcIDsKK+imluiBtOimmuaVmeadkCA8IHNoaWNob3VrYWt1a3lvdXphaVwgOwor5YaF6Zaj5rOV5Yi25bGAIDwgbmFpa2FrdWhvdXNlaWt5b2t1XCA7Civlm73lrrblhazlronlp5Tlk6HplbcgPCBrb2trYWtvdWFuJydpaW5jaG91XCA7CivmiKbpl5jmlK/mj7ToqIjnlLsgPCBzZW50b3VzaGllbmtlaWtha3VcIDsKK+S4reWwj+S8gealreW6gSA8IGNodXVzaG91a2lneW91Y2hvdVwgOwor5Zue57ea5Yi25b6h6KaP5YmHIDwga2Fpc2Vuc2VpZ3lva2lzb2t1XCA7Civmm7jnsKHkvZPlsI/oqqwgPCBzaG9rYW50YWlzaG91c2V0c3VcIDsKK+ekvuS8mueUn+eJqeWtpiA8IHNoYWthaXNlaWJ1dHN1Z2FrdVwgOwor5LiA5pel5LiA5pelIDwgaWNoaW5pY2hpaWNoaW5pY2hpXCA7Civou43pmorooYzpgLLmm7IgPCBndW50YWlrb3VzaGlua3lva3VcIDsKK+iRrOmAgeihjOmAsuabsiA8IHNvdXNvdWtvdXNoaW5reW9rdVwgOwor5riv5rm+6YGL6YCB5LqL5qWtIDwga291d2FuJyd1bnNvdWppZ3lvdVwgOwor54mp55CG55qE54++6LGhIDwgYnV0c3VyaXRla2lnZW5zaG91XCA7Civlv4Poh5PlvIHohpznl4cgPCBzaGluem91YmVubWFrdXNob3VcIDsKK+iGneiTi+iFseWPjeWwhCA8IHNoaXRzdWdhaWtlbmhhbnNoYVwgOwor6ZaA5oi46ZaL5pS+5pS/562WIDwgbW9ua29rYWlob3VzZWlzYWt1XCA7Civkv7jntabnlJ/mtLvogIUgPCBob3VreXV1c2Vpa2F0c3VzaGFcIDsKK+adseWQjemrmOmAn+mBk+i3ryA8IHRvdW1laWtvdXNva3Vkb3Vyb1wgOwor5YaF6Zaj57eP55CG5aSn6IejIDwgbmFpa2FrdXNvdXJpZGFpamluXCA7Civml6XmnKzmlL7pgIHljZTkvJogPCBuaWhvbmhvdXNvdWt5b3VrYWlcIDsKK+iIquepuuWuh+WumeW3pealrSA8IGtvdWt1dXVjaHV1a291Z3lvdVwgOwor55Sf54mp5oOF5aCx5a2mIDwgc2VpYnV0c3Vqb3Vob3VnYWt1XCA7CivlpJrlubTnlJ/mpI3niakgPCB0YW5lbnNlaXNob2t1YnV0c3VcIDsKK+mHj+WtkOeJqeeQhuWtpiA8IHJ5b3VzaGlidXRzdXJpZ2FrdVwgOwor5YyX57Gz5ZCI6KGG5Zu9IDwgaG9rdWJlaWdhc3NodXVrb2t1XCA7CivmnaXlrqLoirPlkI3pjLIgPCByYWlreWFrdWhvdW1laXJva3VcIDsKK+WcsOaWueaknOWvn+W6gSA8IGNoaWhvdWtlbnNhdHN1Y2hvdVwgOwor55+t5pel5qSN54mpIDwgdGFuaml0c3VzaG9rdWJ1dHN1XCA7CivmqJnmupblh7rlipsgPCBoeW91anVuc2h1dHN1cnlva3VcIDsKK+WwgumWgOeahOefpeitmCA8IHNlbm1vbnRla2ljaGlzaGlraVwgOwor57WQ5ama6KGM6YCy5puyIDwga2Vra29ua291c2hpbmt5b2t1XCA7Civlronlhajkv53pmpzmnaHntIQgPCBhbnplbmhvc2hvdWpvdXlha3VcIDsKK+agquW8j+mFjeW9k+mHkSA8IGthYnVzaGlraWhhaXRvdWtpblwgOwor54m55Yil6YWN5b2T6YeRIDwgdG9rdWJldHN1aGFpdG91a2luXCA7CivkuLvlg43lnJ/lnKfkv4LmlbAgPCBzaHVkb3Vkb2F0c3VrZWlzdXVcIDsKK+WPjeWwhOeahOWNiumghuW6jyA8IGhhbnNoYXRla2loYW5qdW5qb1wgOwor57WM5riI5oiQ6ZW3546HIDwga2VpemFpc2VpY2hvdXJpdHN1XCA7CivnlKPmpa3liKXntYTlkIggPCBzYW5neW91YmV0c3VrdW1pYWlcIDsKK+Wbvemam+mAmuiyqOWfuumHkSA8IGtva3VzYWl0c3V1a2FraWtpblwgOwor5YSq562J5Y2S5qWt55SfIDwgeXV1dG91c290c3VneW91c2VpXCA7Civnn63mnJ/pm4bkuK3orJvluqcgPCB0YW5raXNodXVjaHV1a291emFcIDsKK+WFpeWbveeuoeeQhuWxgCA8IG55dXVrb2t1a2FucmlreW9rdVwgOwor5L+h6LOe5b+F572wIDwgc2hpbnNob3VoaXRzdWJhdHN1XCA7Civml6XmnKzovrLmnpfopo/moLwgPCBuaWhvbicnbm91cmlua2lrYWt1XCA7CivoiKrnqbrlroflrpnnlKPmpa0gPCBrb3VrdXV1Y2h1dXNhbmd5b3VcIDsKK+WTgeizquS/neaMgeacn+mZkCA8IGhpbnNoaXRzdWhvamlraWdlblwgOwor5pel5pys5bel5qWt6KaP5qC8IDwgbmlob25rb3VneW91a2lrYWt1XCA7CivplpPmjqXmkq7lvbHms5UgPCBrYW5zZXRzdXNhdHN1ZWlob3VcIDsKK+Wun+eJqeWkp+aooeWeiyA8IGppdHN1YnV0c3VkYWltb2tlaVwgOwor6LuN5LqL55qE5L6155WlIDwgZ3Vuaml0ZWtpc2hpbnJ5YWt1XCA7CivkuK3ot53pm6LmoLjlhbXlmaggPCBjaHV1a3lvcmlrYWt1aGVpa2lcIDsKK+mFuOWMlumChOWFg+WPjeW/nCA8IHNhbmtha2FuZ2VuaGFuJydub3VcIDsKK+eJueW+tOaKveWHuiA8IHRva3VjaG91Y2h1dXNodXRzdVwgOwor5a+/5pWZ5a6kIDwga290b2J1a2lreW91c2hpdHN1XCA7Civlhazli5nln7fooYzlpqjlrrMgPCBrb3VtdXNoaWtrb3Vib3VnYWlcIDsKK+epjeWIhuaWueeoi+W8jyA8IHNla2lidW5ob3V0ZWlzaGlraVwgOwor6auY562J5bCC6ZaA5a2m5qChIDwga291dG91c2VubW9uZ2Fra291XCA7CivnqY3nrpfpm7vlipvoqIggPCBzZWtpc2FuZGVucnlva3VrZWlcIDsKK+S6jOW5tOeUn+akjeeJqSA8IG5pbmVuc2Vpc2hva3VidXRzdVwgOwor5Zu95Lya5a++562W5aeU5ZOh5LyaIDwga29ra2FpdGFpc2FrdWlua2FpXCA7CivnrKzkuozmrKHkuJbnlYzlpKfmiKYgPCBkYWluaWppc2VrYWl0YWlzZW5cIDsKK+atqeWFteaIpumXmOi7iuS4oSA8IGhvaGVpc2VudG91c2hhcnlvdVwgOwor5Y2D5Lmd55m+5bm05LujIDwgc2Vua3l1dWh5YWt1bmVuZGFpXCA7CivlhbHlkIzoqJjogIXkvJroposgPCBreW91ZG91a2lzaGFrYWlrZW5cIDsKK+enkeWtpuWNmueJqemkqCA8IGthZ2FrdWhha3VidXRzdWthblwgOwor5Lit5Zu95YWx55Sj5YWaIDwgY2h1dWdva3VreW91c2FudG91XCA7Civpq5jliIblrZDnianos6ogPCBrb3VidW5zaGlidXNzaGl0c3VcIDsKK+eZuumBlOW/g+eQhuWtpiA8IGhhdHRhdHN1c2hpbnJpZ2FrdVwgOwor57K+56We6JaE5byx6ICFIDwgc2Vpc2hpbmhha3VqYWt1c2hhXCA7CivlpKrpmb3nhrHmuKnmsLTlmaggPCB0YWl5b3VuZXRzdW9uc3Vpa2lcIDsKK+eJueWIpeihjOaUv+WMuiA8IHRva3ViZXRzdWd5b3VzZWlrdVwgOwor6Z2Z5q2i5Zyf5Zyn5L+C5pWwIDwgc2Vpc2hpZG9hdHN1a2Vpc3V1XCA7CivkuInoibLljbDliLfms5UgPCBzYW5zaG9rdWluc2F0c3Vob3VcIDsKK+aOkuWNteiqmOeZuuWJpCA8IGhhaXJhbicneXV1aGF0c3V6YWlcIDsKK+eUn+a0u+W/hemcgOWTgSA8IHNlaWthdHN1aGl0c3VqdWhpblwgOwor5bCR5bm06ZGR5Yil5omAIDwgc2hvdW5lbmthbmJldHN1c2hvXCA7Civkurrlj6Pli5XmhYvntbHoqIggPCBqaW5rb3Vkb3V0YWl0b3VrZWlcIDsKK+W6p+mqqOelnue1jOeXmyA8IHpha290c3VzaGlua2VpdHN1dVwgOwor5qSN5rCR5Zyw5pS/562WIDwgc2hva3VtaW5jaGlzZWlzYWt1XCA7CivoqLzliLjlj5blvJXms5UgPCBzaG91a2VudG9yaWhpa2lob3VcIDsKK+engeWwj+iqrCA8IHdhdGFrdXNoaXNob3VzZXRzdVwgOwor5ZWG5ZOB5Zue6Lui546HIDwgc2hvdWhpbmthaXRlbnJpdHN1XCA7Civlm73pgKPkuovli5nnt4/plbcgPCBrb2t1cmVuamltdXNvdWNob3VcIDsKK+evgOi2s+WLleeJqemWgCA8IHNlc3Nva3Vkb3VidXRzdW1vblwgOwor552A55Sf5qSN54mpIDwgY2hha3VzZWlzaG9rdWJ1dHN1XCA7CivkuI3li5XnlKPlj5blvpfnqI4gPCBmdWRvdXNhbnNodXRva3V6ZWlcIDsKK+W5tOasoeaciee1puS8keaahyA8IG5lbmppeXV1a3l1dWt5dXVrYVwgOwor5a6f54mp5Y+W5byVIDwgaml0c3VidXRzdXRvcmloaWtpXCA7CivljYHkuozmjIfohbjmvbDnmI0gPCBqdXVuaXNoaWNob3VrYWl5b3VcIDsKK+ioiOeul+eUn+eJqeWtpiA8IGtlaXNhbnNlaWJ1dHN1Z2FrdVwgOwor5bCx6IG35oOF5aCx6KqMIDwgc2h1dXNob2t1am91aG91c2hpXCA7Civlu7roqK3nmoTplqLkv4IgPCBrZW5zZXRzdXRla2lrYW5rZWlcIDsKK+WuouWupOS5l+WLmeWToSA8IGt5YWt1c2hpdHN1am91bXVpblwgOwor5pSv5oyB5Yqb5a6a5byPIDwgc2hpamlyeW9rdXRlaXNoaWtpXCA7Civli5XnianooYzli5XlraYgPCBkb3VidXRzdWtvdWRvdWdha3VcIDsKK+aIpuS6ieeKr+e9quazleW7tyA8IHNlbnNvdWhhbnphaWhvdXRlaVwgOwor6IG36IO95Luj6KGo5Yi2IDwgc2hva3Vub3VkYWloeW91c2VpXCA7CivmnIDpq5jmpJzlr5/luoEgPCBzYWlrb3VrZW5zYXRzdWNob3VcIDsKK+W/g+elnuiAl+W8seiAhSA8IHNoaW5zaGlubW91amFrdXNoYVwgOwor5bm05Yqf5bqP5YiX5Yi25bqmIDwgbmVua291am9yZXRzdXNlaWRvXCA7CivkupznsbPliKnliqDlkIjooYblm70gPCBhbWVyaWthZ2Fzc2h1dWtva3VcIDsKK+eEoeiEiuakjuWLleeJqSA8IG11c2VraXRzdWlkb3VidXRzdVwgOwor6L6y5p6X5rC055Sj5aSn6IejIDwgbm91cmluc3Vpc2FuZGFpamluXCA7Civnm7TmjqXmjqXop6YgPCBjaG9rdXNldHN1c2Vzc2hva3VcIDsKK+WutuWuheS+teWFpee9qiA8IGthdGFrdXNoaW4nJ255dXV6YWlcIDsKK+WIhuWtkOeUn+eJqeWtpiA8IGJ1bnNoaXNlaWJ1dHN1Z2FrdVwgOwor5Li76KaB6YOo5YWI5bCO5Z6LIDwgc2h1eW91YnVzZW5kb3VnYXRhXCA7CivlpKnkvZPlhpnnnJ/ooZMgPCB0ZW50YWlzaGFzaGluanV0c3VcIDsKK+enmOWvhua8j+a0qee9qiA8IGhpbWl0c3Vyb3VzZXRzdXphaVwgOwor6LK45LuY5L+h6KiXIDwga2FzaGl0c3VrZXNoaW50YWt1XCA7CivplpPmjqXnm67nmoToqp4gPCBrYW5zZXRzdW1va3V0ZWtpZ29cIDsKK+eymOa2suWIhuazjOiFuiA8IG5lbicnZWtpYnVucGl0c3VzZW5cIDsKK+eerOmWk+aOpeedgOWJpCA8IHNodW5rYW5zZXRjaGFrdXphaVwgOwor5Lq65Y+j5a+G6ZuG546HIDwgamlua291bWlzc2h1dXJpdHN1XCA7Civlm73msJHlgaXlurfkv53pmbogPCBrb2t1bWlua2Vua291aG9rZW5cIDsKK+WOn+iJsuWGmeecn+eJiCA8IGdlbnNob2t1c2hhc2hpbmJhblwgOwor5LiN5a6a6KiI6YeP56m66ZaTIDwgZnV0ZWlrZWlyeW91a3V1a2FuXCA7Civph4/lrZDoibLlipvlraYgPCByeW91c2hpaXJvcmlraWdha3VcIDsKK+WcqOaXpeexs+mZuOi7jSA8IHphaW5pY2hpYmVpcmlrdWd1blwgOwor6aOf5ZOB5re75Yqg54mpIDwgc2hva3VoaW50ZW5rYWJ1dHN1XCA7Civlj43luJ3lm73kuLvnvqnogIUgPCBoYW50ZWlrb2t1c2h1Z2lzaGFcIDsKK+WLleeJqeaAp+ibi+eZvSA8IGRvdWJ1dHN1c2VpdGFucGFrdVwgOwor54m55a6a6YO15L6/5bGAIDwgdG9rdXRlaXl1dWJpbmt5b2t1XCA7Civml6XmnKzoiKrnqbroh6rooZvpmoogPCBuaWhvbmtvdWt1dWppZWl0YWlcIDsKK+eBq+WKm+eZuumbu+aJgCA8IGthcnlva3VoYXRzdWRlbnNob1wgOwor5aSa6KeS5byP6L6y5qWtIDwgdGFrYWt1c2hpa2lub3VneW91XCA7Civpm7vojbfntZDlkIjntKDlrZAgPCBkZW5rYWtldHN1Z291c29zaGlcIDsKK+awuOS4luS4reeri+WbvSA8IGVpc2VpY2h1dXJpdHN1a29rdVwgOwor56ym5Y+35YyW5paH5a2X6ZuG5ZCIIDwgZnVnb3VrYW1vamlzaHV1Z291XCA7CivllK/nianlvIHoqLzms5UgPCB5dWlidXRzdWJlbnNob3Vob3VcIDsKK+aXpeacrOa1t+S4iuiHquihm+maiiA8IG5paG9ua2Fpam91amllaXRhaVwgOwor5Y+y55qE5ZSv54mp6KuWIDwgc2hpdGVraXl1aWJ1dHN1cm9uXCA7CivlrqPoqpPkvpvov7Dmm7ggPCBzZW5zZWlreW91anV0c3VzaG9cIDsKK+eGseiGqOW8teS/guaVsCA8IG5ldHN1Ym91Y2hvdWtlaXN1dVwgOwor5pyJ6ZmQ54q25oWL5paH5rOVIDwgeXV1Z2Vuam91dGFpYnVucG91XCA7CivljbPml6XpgJ/pgZQgPCBzb2t1aml0c3Vzb2t1dGF0c3VcIDsKK+akjeeJqeaAp+e5iue2rSA8IHNob2t1YnV0c3VzZWlzZW4nJ2lcIDsKK+mBjuWkseWCt+Wus+e9qiA8IGthc2hpdHN1c2hvdWdhaXphaVwgOwor5L+u5q2j6LOH5pys5Li7576pIDwgc2h1dXNlaXNoaWhvbnNodWdpXCA7CivkuIDljbXmgKflj4znlJ/lhZAgPCBpY2hpcmFuc2Vpc291c2VpamlcIDsKK+WFseWQjOWJteioreiAhSA8IGt5b3Vkb3Vzb3VzZXRzdXNoYVwgOwor5Zyw5Lit5rW35oCn5rCX5YCZIDwgY2hpY2h1dWthaXNlaWtpa291XCA7CivmipXos4fmnInkvqHoqLzliLggPCB0b3VzaGl5dXVrYXNob3VrZW5cIDsKK+S4iue0muWJr+ekvumVtyA8IGpvdWt5dXVmdWt1c2hhY2hvdVwgOwor5oim55Wl55qE5o+Q5pC6IDwgc2Vucnlha3V0ZWtpdGVpa2VpXCA7CivliY3mlrnlho3oo5zntabngrkgPCB6ZW5wb3VzYWlob2t5dXV0ZW5cIDsKK+eZvueZuueZvuS4rSA8IGh5YXBwYXRzdWh5YWt1Y2h1dVwgOwor55Kw5aKD5bqB6ZW35a6YIDwga2Fua3lvdWNob3VjaG91a2FuXCA7Civlj5bnt6DlvbnkvJogPCB0b3Jpc2hpbWFyaXlha3VrYWlcIDsKK+Wcp+WKm+iqv+aVtOWZqCA8IGF0c3VyeW9rdWNob3VzZWlraVwgOwor55Sf6a6u6aOf5paZ5ZOBIDwgc2Vpc2Vuc2hva3VyeW91aGluXCA7CivmlL7lsITmgKfnianos6ogPCBob3VzaGFzZWlidXNzaGl0c3VcIDsKK+WcsOeQg+eJqeeQhuWtpiA8IGNoaWt5dXVidXRzdXJpZ2FrdVwgOwor5Y+N5a6X5pWZ5pS56Z2pIDwgaGFuc2h1dWt5b3VrYWlrYWt1XCA7CivlraborZjntYzpqJPogIUgPCBnYWt1c2hpa2lrZWlrZW5zaGFcIDsKK+eri+aGsuWQm+S4u+aUv+S9kyA8IHJpa2tlbmt1bnNodXNlaXRhaVwgOwor5pS+6YCB56aB5q2i55So6KqeIDwgaG91c291a2luc2hpeW91Z29cIDsKK+i1pOmdouaBkOaAlueXhyA8IHNla2ltZW5reW91ZnVzaG91XCA7Civpo5/lk4HooZvnlJ/ms5UgPCBzaG9rdWhpbicnZWlzZWlob3VcIDsKK+aVmeiBt+WToee1hOWQiCA8IGt5b3VzaG9rdWlua3VtaWFpXCA7CivljYHkuIDpnaLoprPkuJbpn7MgPCBqdXVpY2hpbWVua2FuemVvblwgOwor5q+b5rKi5p2x5Li75bitIDwgbW91dGFrdXRvdXNodXNla2lcIDsKK+WIpemAlOepjeeri+mHkSA8IGJldHRvdHN1bWl0YXRla2luXCA7Civov5Tkv6HmlpnokYnmm7ggPCBoZW5zaGlucnlvdWhhZ2FraVwgOwor6Ku46LuK6YCa6KGM5q2iIDwgc2hvc2hhdHN1dWtvdWRvbWVcIDsKK+W9oueKtuiomOaGtuWQiOmHkSA8IGtlaWpvdWtpb2t1Z291a2luXCA7Civlm73lnJ/luoHplbflrpggPCBrb2t1ZG9jaG91Y2hvdWthblwgOwor5Ye65Yqb6KOF572uIDwgc2h1dHN1cnlva3Vzb3VjaGlcIDsKK+ikh+mbkemqqOaKmCA8IGZ1a3V6YXRzdWtvc3NldHN1XCA7CivkuIvkvY3nr4TnlofljJbntKDmgKcgPCBrYWloYW5jaHV1a2Fzb3NlaVwgOwor5Yun5ZaE5oey5oKq5YqHIDwga2FuemVuY2hvdWFrdWdla2lcIDsKK+WMu+WtpueUn+eJqeWtpiA8IGlnYWt1c2VpYnV0c3VnYWt1XCA7CivpnZ7mqJnmupbmi6HlvLUgPCBoaWh5b3VqdW5rYWt1Y2hvdVwgOwor6KGM5YuV55m66LW35pmC5Yi7IDwga291ZG91aGFra2lqaWtva3VcIDsKK+WNgemDqOmWgOWIhumhnuazlSA8IGp1dWJ1bW9uYnVucnVpaG91XCA7CivlpKrpmb3lhYnnmbrpm7sgPCB0YWl5b3Vrb3VoYXRzdWRlblwgOwor5LiW55WM5LiA5ZGo5peF6KGMIDwgc2VrYWlpc3NodXVyeW9rb3VcIDsKK+i/lOS/oeeUqOiRieabuCA8IGhlbnNoaW4nJ3lvdWhhZ2FraVwgOwor5LiW55WM5Lq65qip5a6j6KiAIDwgc2VrYWlqaW5rZW5zZW5nZW5cIDsKK+WFrOeahOWMu+eZguapn+mWoiA8IGtvdXRla2lpcnlvdWtpa2FuXCA7CivniannmoTmtYHpgJogPCBidXRzdXRla2lyeXV1dHN1dVwgOwor5Y2B5bm05LiA5piUIDwganV1bmVuaGl0b211a2FzaGlcIDsKK+elpeaciOWRveaXpSA8IHNob3V0c3VraW1laW5pY2hpXCA7CivnnJ/nj6DppIrmrpbloLQgPCBzaGluanV5b3VzaG9rdWpvdVwgOwor5oim55Wl54mp6LOqIDwgc2Vucnlha3VidXNzaGl0c3VcIDsKK+iCi+mWk+elnue1jOeXmyA8IHJva2thbnNoaW5rZWl0c3V1XCA7CivmtbfmtIvniannkIblraYgPCBrYWl5b3VidXRzdXJpZ2FrdVwgOwor57K+56We55qE6Ium55ebIDwgc2Vpc2hpbnRla2lrdXRzdXVcIDsKK+S6pOa1geeZuumbu+apnyA8IGtvdXJ5dXVoYXRzdWRlbmtpXCA7CivlsLHogbfmtLvli5UgPCBzaHV1c2hva3VrYXRzdWRvdVwgOwor5Y+X5YON5Zyf5Zyn5L+C5pWwIDwganVkb3Vkb2F0c3VrZWlzdXVcIDsKK+eLqeeMn+aOoembhuawkSA8IHNodXJ5b3VzYWlzaHV1bWluXCA7CivkuI3norrlrprmgKfljp/nkIYgPCBmdWtha3V0ZWlzZWlnZW5yaVwgOwor5oim6ZeY5q2j6Z2i5bmFIDwgc2VudG91c2hvdW1lbmhhYmFcIDsKK+S4jeS/oeS7u+aKleelqCA8IGZ1c2hpbicnbmludG91aHlvdVwgOwor6YCB6YeR5Y+X5Y+W5Lq6IDwgc291a2luJyd1a2V0b3JpbmluXCA7CivlvLHogonlvLfpo58gPCBqYWt1bmlrdWt5b3VzaG9rdVwgOwor5Ly457iu56iO546HIDwgc2hpbnNodWt1emVpcml0c3VcIDsKK+S6jOetiei+uuS4ieinkuW9oiA8IG5pdG91aGVuc2Fua2Fra2VpXCA7CivvvKTvvLLvvLPnkIboq5YgPCBkaVwgzIRhXCDMhHJ1ZXN1cmlyb25cIDsKK+mjn+ezp+euoeeQhuazlSA8IHNob2t1cnlvdWthbnJpaG91XCA7Civnm7Lohbjngo7miYvooZMgPCBtb3VjaG91ZW5zaHVqdXRzdVwgOwor56We5Ye66ay85rKhIDwgc2hpbnNodXRzdWtpYm90c3VcIDsKK+esrOS4gOe0muauuuS6uiA8IGRhaWlra3l1dXNhdHN1amluXCA7CivmiKbnlaXmoLjlhbXlmaggPCBzZW5yeWFrdWtha3VoZWlraVwgOwor5LiD5LiD5pelIDwgc2hpY2hpc2hpY2hpbmljaGlcIDsKK+e0q+mcsuiNiSA8IG11cmFzYWtpdHN1eXVrdXNhXCA7Civlh43ntZDpmLLmraLliaQgPCB0b3VrZXRzdWJvdXNoaXphaVwgOwor5Lit6ZaT6YWN5b2T6aGNIDwgY2h1dWthbmhhaXRvdWdha3VcIDsKK+aUv+S7pOaMh+WumumDveW4giA8IHNlaXJlaXNoaXRlaXRvc2hpXCA7CivlkLjooYDli5XniakgPCBreXV1a2V0c3Vkb3VidXRzdVwgOwor6auY6YCf5aKX5q6W54KJIDwga291c29rdXpvdXNob2t1cm9cIDsKK+i/lOS/oeaWmeWwgeetkiA8IGhlbnNoaW5yeW91ZnV1dG91XCA7CivooZvmmJ/lnLDnkIPlsYAgPCBlaXNlaWNoaWt5dXVreW9rdVwgOwor5Zyo55WZ5aSW5Zu95Lq6IDwgemFpcnl1dWdhaWtva3VqaW5cIDsKK+eGseWKm+WtpueahCA8IG5ldHN1cmlraWdha3V0ZWtpXCA7CivmpI3nianmjqHpm4YgPCBzaG9rdWJ1dHN1c2Fpc2h1dVwgOwor5Ye65Yqb56uv5a2QIDwgc2h1dHN1cnlva3V0YW5zaGlcIDsKK+aomea6luWFpeWKmyA8IGh5b3VqdW4nJ255dXVyeW9rdVwgOwor55Sj5qWt5buD5qOE54mpIDwgc2FuZ3lvdWhhaWtpYnV0c3VcIDsKK+eEoeaLheS/neWAn+WFpemHkSA8IG11dGFucG9rYXJpaXJla2luXCA7CivoprPokYnmpI3niakgPCBrYW4nJ3lvdXNob2t1YnV0c3VcIDsKK+WkqeeEtuiomOW/teeJqSA8IHRlbicnbmVua2luZW5idXRzdVwgOwor5Y2Y5L2N5Yq05YON57WE5ZCIIDwgdGFuJydpcm91ZG91a3VtaWFpXCA7CivkuK3lpK7lh6bnkIboo4Xnva4gPCBjaHV1b3VzaG9yaXNvdWNoaVwgOwor5Ye655Sf6Ki85piO5pu4IDwgc2h1c3NlaXNob3VtZWlzaG9cIDsKK+mBuOaMmeeuoeeQhuWnlOWToeS8miA8IHNlbmt5b2thbnJpaWlua2FpXCA7CivkuIrntJrnrqHnkIbogbcgPCBqb3VreXV1a2FucmlzaG9rdVwgOwor56iO6Zai55Sz5ZGK5pu4IDwgemVpa2Fuc2hpbmtva3VzaG9cIDsKK+S4g+eUn+WgseWbvSA8IHNoaWNoaXNob3Vob3Vrb2t1XCA7Civov5Tkv6HnlKjlsIHnrZIgPCBoZW5zaGluJyd5b3VmdXV0b3VcIDsKK+eGseeLgueahOS/oeiAhSA8IG5la2t5b3V0ZWtpc2hpbmphXCA7CivkvIHmpa3plpPkv6HnlKggPCBraWd5b3VrYW5zaGluJyd5b3VcIDsKK+asp+W3numAmuiyqOWNmOS9jSA8IG91c2h1dXRzdXVrYXRhbicnaVwgOwor6ZaL5ouT6ICF57K+56WeIDwga2FpdGFrdXNoYXNlaXNoaW5cIDsKK+Wun+eJqeaPj+WGmSA8IGppdHN1YnV0c3VieW91c2hhXCA7Civmt7HlnKjmgKfnnJ/oj4wgPCBzaGluemFpc2Vpc2hpbmtpblwgOwor6Ieq55Sx6LK/5piT5biv5Z+fIDwgaml5dXVib3Vla2l0YWlpa2lcIDsKK+adkeiQveWFseWQjOS9kyA8IHNvbnJha3VreW91ZG91dGFpXCA7CivkuIrpmbjnlKjoiJ/oiYcgPCBqb3VyaWt1eW91c2h1dXRlaVwgOwor5Y+k55Sf54mp5a2m6ICFIDwga29zZWlidXRzdWdha3VzaGFcIDsKK+auuuecn+iPjOiWrCA8IHNhdHN1c2hpbmtpbicneWFrdVwgOwor6ZaL55m66YCU5LiK5Zu9IDwga2FpaGF0c3V0b2pvdWtva3VcIDsKK+ihgOWcp+mZjeS4i+WJpCA8IGtldHN1YXRzdWtvdWthemFpXCA7CivnhKHlt67liKXniIbmkoMgPCBtdXNhYmV0c3ViYWt1Z2VraVwgOwor5bmz5ZKM55qE6Kej5rG6IDwgaGVpd2F0ZWtpa2Fpc2V0c3VcIDsKK+S4i+S9jeevhOeWh+WMluWOn+eQhiA8IGthaWhhbmNodXVrYWdlbnJpXCA7Civpo5/lk4HliqDlt6Xmpa0gPCBzaG9rdWhpbmtha291Z3lvdVwgOwor5oGL5oSb6Iez5LiK5Li7576pIDwgcmVuJydhaXNoaWpvdXNodWdpXCA7Civpq5jntJrkvY/lroXlnLAgPCBrb3VreXV1anV1dGFrdWNoaVwgOwor6Ieq5YuV6LuK5L+d6Zm65paZIDwgamlkb3VzaGFob2tlbnJ5b3VcIDsKK+mBjuWkseiHtOatu+e9qiA8IGthc2hpdHN1Y2hpc2hpemFpXCA7Civpq5jpoY3miYDlvpfogIUgPCBrb3VnYWt1c2hvdG9rdXNoYVwgOwor5Y2B5LiA6Z2i6Kaz6Z+zIDwganV1aWNoaW1lbmthbicnbm9uXCA7CivogLPpvLvlkr3llonlsILploDljLsgPCBqaWJpaW5rb3VzZW5tb24nJ2lcIDsKK+aciOe1jOWbsOmbo+eXhyA8IGdla2tlaWtvbicnbmFuc2hvdVwgOwor5Zu96Zqb6KaL5pys5biCIDwga29rdXNhaW1paG9uJydpY2hpXCA7Civnt5HlnLDljJboqIjnlLsgPCByeW9rdWNoaWtha2Vpa2FrdVwgOwor5qiZ5pys5oq95Ye6IDwgaHlvdWhvbmNodXVzaHV0c3VcIDsKK+aIpuWgtOiIquepuumYu+atoiA8IHNlbmpvdWtvdWt1dXNvc2hpXCA7CivkuK3mnqLnpZ7ntYzns7sgPCBjaHV1c3V1c2hpbmtlaWtlaVwgOwor57Wx5ZCI5Y+C6KyA5pys6YOoIDwgdG91Z291c2FuYm91aG9uYnVcIDsKK+e3j+aLrOizquWVjyA8IHNvdWthdHN1c2hpdHN1bW9uXCA7Civlrp/pqJPnmoTnoJTnqbYgPCBqaWtrZW50ZWtpa2Vua3l1dVwgOwor5bCC55So6aeQ6LuK5aC0IDwgc2VuJyd5b3VjaHV1c2hham91XCA7Civmva7lipvnmbrpm7sgPCBjaG91cnlva3VoYXRzdWRlblwgOwor54Sh6YGO5aSx6LKs5Lu7IDwgbXVrYXNoaXRzdXNla2luaW5cIDsKK+S4gOasoeaWueeoi+W8jyA8IGljaGlqaWhvdXRlaXNoaWtpXCA7CivlsLHmpa3mmYLplpPkuK0gPCBzaHV1Z3lvdWppa2FuY2h1dVwgOwor5Zu95rCR5LyR5pqH5p2RIDwga29rdW1pbmt5dXVrYW11cmFcIDsKK+WtkOWuruWkluWmiuWooCA8IHNoaWt5dXVnYWluaW5zaGluXCA7CivnhKHmi4Xkv53osrjku5ggPCBtdXRhbnBva2FzaGl0c3VrZVwgOwor5LiA57KS5a2Q5pei57SEIDwgaWNoaXJ5dXVzaGlraXlha3VcIDsKK+S8gealreWIpee1hOWQiCA8IGtpZ3lvdWJldHN1a3VtaWFpXCA7CivkuI3ms5XkvrXlhaXogIUgPCBmdWhvdXNoaW4nJ255dXVzaGFcIDsKK+ebtOaOpeizvOWFpSA8IGNob2t1c2V0c3Vrb3VueXV1XCA7Civlj47nqavmhJ/orJ3npa0gPCBzaHV1a2FrdWthbnNoYXNhaVwgOwor5oyH5ZCR5oCn54iG6JasIDwgc2hpa291c2VpYmFrdXlha3VcIDsKK+W/g+WboOaAp+WPjeW/nCA8IHNoaW4nJ2luc2VpaGFuJydub3VcIDsKK+acgOmVt+S4jeWAkui3nemboiA8IHNhaWNob3VmdXRvdWt5b3JpXCA7CivkupznhrHluK/mpI3niakgPCBhbmV0dGFpc2hva3VidXRzdVwgOwor56qu5qW155uu55qEIDwga3l1dWt5b2t1bW9rdXRla2lcIDsKK+WGhemWo+e3j+i+nuiBtyA8IG5haWtha3Vzb3VqaXNob2t1XCA7CivlpKnnhaflpKfnpZ4gPCBhbWF0ZXJhc3Vvb21pa2FtaVwgOwor5Y2w6LGh5Li7576p6Z+z5qW9IDwgaW5zaG91c2h1Z2lvbmdha3VcIDsKK+i/keS7o+S6lOeoruertuaKgCA8IGtpbmRhaWdvc2h1a3lvdWdpXCA7Civos6rlrp/liZvlgaUgPCBzaGl0c3VqaXRzdWdvdWtlblwgOwor6Ki85Yi45Y+W5byV5omAIDwgc2hvdWtlbnRvcmloaWtpam9cIDsKK+WxiOaKmOacm+mBoOmPoSA8IGt1c3NldHN1Ym91ZW5reW91XCA7CivlsYDlpJbkuK3nq4sgPCBreW9rdWdhaWNodXVyaXRzdVwgOwor5b6M5pa55Zyw5Z+f6K2m5YKZIDwga291aG91Y2hpaWtpa2VpYmlcIDsKK+atr+eJmeefr+ato+ihkyA8IHNoaWdha3lvdXNlaWp1dHN1XCA7CivljZjntLDog57nlJ/niakgPCB0YW5zYWlib3VzZWlidXRzdVwgOwor5pel5pys6Jas5bGA5pa5IDwgbmlob24nJ3lha2t5b2t1aG91XCA7Civoh6rli5Xmk43nuKboo4Xnva4gPCBqaWRvdXNvdWp1dXNvdWNoaVwgOwor5rex5bGk5b+D55CG5a2mIDwgc2hpbnNvdXNoaW5yaWdha3VcIDsKK+mDveW4guWvvuaKl+mHjueQgyA8IHRvc2hpdGFpa291eWFreXV1XCA7Civph5HliZvlpJzlj4nlppnnjosgPCBrb25nb3V5YXNoYW15b3VvdVwgOwor57K+56We6JaE5byx5YWQIDwgc2Vpc2hpbmhha3VqYWt1amlcIDsKK+iJsuW9qeiqv+evgCA8IHNoaWtpc2FpY2hvdXNldHN1XCA7CivolqznlKjmpI3niakgPCB5YWt1eW91c2hva3VidXRzdVwgOwor5YyW5a2m5pa556iL5byPIDwga2FnYWt1aG91dGVpc2hpa2lcIDsKK+aApemZjeS4i+eIhuaSgyA8IGt5dXVrb3VrYWJha3VnZWtpXCA7CivmsLTkuIrnlJ/mtLvogIUgPCBzdWlqb3VzZWlrYXRzdXNoYVwgOwor5Zyo5a2m6Ki85piO5pu4IDwgemFpZ2FrdXNob3VtZWlzaG9cIDsKK+akjeawkeWcsOe1seayuyA8IHNob2t1bWluY2hpdG91Y2hpXCA7CivplqLmlbDmlrnnqIvlvI8gPCBrYW5zdXVob3V0ZWlzaGlraVwgOwor56eL6Zyc54OI5pelIDwgc2h1dXNvdXJldHN1aml0c3VcIDsKK+ebtOaOpeiri+axgiA8IGNob2t1c2V0c3VzZWlreXV1XCA7CivmjqjpgLLnoJTnqbbmiYAgPCBzdWlzaGlua2Vua3l1dXNob1wgOwor5a6X5pWZ5ZOy5a2mIDwgc2h1dWt5b3V0ZXRzdWdha3VcIDsKK+aIpuihk+aguOWFteWZqCA8IHNlbmp1dHN1a2FrdWhlaWtpXCA7Civpq5jpgJ/mvJTnrpfmqZ/mp4sgPCBrb3Vzb2t1ZW56YW5raWtvdVwgOwor55m65bGV55qE6Kej5raIIDwgaGF0dGVudGVraWthaXNob3VcIDsKK+mjm+ihjOemgeatouepuuWfnyA8IGhpa291a2luc2hpa3V1aWtpXCA7Civlm73nq4vlm7Pmm7jppKggPCBrb2t1cml0c3V0b3Nob2thblwgOwor5LiJ6KGM5bqD5ZGK5qyEIDwgc2FuZ3lvdWtvdWtva3VyYW5cIDsKK+WLp+alreWNmuimp+S8miA8IGthbmd5b3VoYWt1cmFua2FpXCA7CivolqzniankuK3mr5IgPCB5YWt1YnV0c3VjaHV1ZG9rdVwgOwor5YiG5p6Q5b+D55CG5a2mIDwgYnVuc2VraXNoaW5yaWdha3VcIDsKK+aVmeiCsuW/g+eQhuWtpiA8IGt5b3Vpa3VzaGlucmlnYWt1XCA7Civmpa3li5nkuIrpgY7lpLEgPCBneW91bXVqb3VrYXNoaXRzdVwgOwor55Kw5aKD5L+d6K236KuW6ICFIDwga2Fua3lvdWhvZ29yb25zaGFcIDsKK+aIkOe4vuiovOaYjuabuCA8IHNlaXNla2lzaG91bWVpc2hvXCA7CivpgLHplpPlpKnmsJfkuojloLEgPCBzaHV1a2FudGVua2l5b2hvdVwgOwor5pS+5bCE57ea5oSf5Y+X5oCnIDwgaG91c2hhc2Vua2FuanVzZWlcIDsKK+ekvuS8muawkeS4u+S4u+e+qSA8IHNoYWthaW1pbnNodXNodWdpXCA7CivlsI/lv4Pnv7znv7wgPCBzaG91c2hpbicneW9rdXlva3VcIDsKK+eJueWIpeW5leWDmiA8IHRva3ViZXRzdWJha3VyeW91XCA7CivlhaXlrablv5fpoZjogIUgPCBueXV1Z2FrdXNoaWdhbnNoYVwgOwor6YOo5YiG5oOF5aCx5qeL6YCgIDwgYnVidW5qb3Vob3Vrb3V6b3VcIDsKK+S4gOaMmeaJi+S4gOaKlei2syA8IGlra3lvc2h1aXR0b3Vzb2t1XCA7CivliIboo4Lnianos6ogPCBidW5yZXRzdWJ1c3NoaXRzdVwgOwor5pyJ5b2i5Zu65a6a6LOH55SjIDwgeXV1a2Vpa290ZWlzaGlzYW5cIDsKK+S4reWkruaUvumAgeWxgCA8IGNodXVvdWhvdXNvdWt5b2t1XCA7Civnm7TmjqXnhafmmI4gPCBjaG9rdXNldHN1c2hvdW1laVwgOwor6aOb6KGM6KiY6Yyy6KOF572uIDwgaGlrb3VraXJva3Vzb3VjaGlcIDsKK+iiq+aLheS/neWCteaoqemhjSA8IGhpdGFucG9zYWlrZW5nYWt1XCA7CivlhbHlkIznm7jntprkurogPCBreW91ZG91c291em9rdW5pblwgOwor5Zix6KiX5q665Lq6IDwgc2hva3V0YWt1c2F0c3VqaW5cIDsKK+eglOeptueZuuihqOS8miA8IGtlbmt5dXVoYXBweW91a2FpXCA7CivkuozkuqTmm7/liLblirTlg40gPCBuaWtvdXRhaXNlaXJvdWRvdVwgOwor5rm/55Sf5qSN54mpIDwgc2hpc3NlaXNob2t1YnV0c3VcIDsKK+S4g+WNgeS6uuiosyA8IHNoaWNoaWp1dW5pbicneWFrdVwgOwor5L+d5a6I57O754Sh5omA5bGeIDwgaG9zaHVrZWltdXNob3pva3VcIDsKK+WkqeS9k+WIhuWFieihkyA8IHRlbnRhaWJ1bmtvdWp1dHN1XCA7CivnkIPpnaLkuInop5Lms5UgPCBreXV1bWVuc2Fua2FrdWhvdVwgOwor6KiI6YeP57WM5riI5a2mIDwga2VpcnlvdWtlaXphaWdha3VcIDsKK+WPjei7ouWIhuW4g+S/guaVsCA8IGhhbnRlbmJ1bnB1a2Vpc3V1XCA7CivokZfkvZzmqKnkvrXlrrMgPCBjaG9zYWt1a2Vuc2hpbmdhaVwgOwor54m55Yil5byB6K235Lq6IDwgdG9rdWJldHN1YmVuZ29uaW5cIDsKK+WvjOWbveW8t+WFteetliA8IGZ1a29rdWt5b3VoZWlzYWt1XCA7CivnqbrmjLrpmY3kuIvlnLDln58gPCBrdXV0ZWlrb3VrYWNoaWlraVwgOwor5LqI5oOz5Y+O56mr6auYIDwgeW9zb3VzaHV1a2FrdWRha2FcIDsKK+eBq+WKm+aUr+aPtOmDqOmaiiA8IGthcnlva3VzaGllbmJ1dGFpXCA7CivooYDlj4vnl4XmgqPogIUgPCBrZXRzdXl1dWJ5b3VrYW5qYVwgOwor55m655mM54mp6LOqIDwgaGF0c3VnYW5idXNzaGl0c3VcIDsKK+ebtOinkuS4ieinkuW9oiA8IGNob2trYWt1c2Fua2Fra2VpXCA7Civnmb3plbfpoIjpr6ggPCBzaGlyb25hZ2FzdWt1amlyYVwgOwor6ZeH5L6h5qC85Y2U5a6aIDwgeWFtaWtha2FrdWt5b3V0ZWlcIDsKK+ims+iznuakjeeJqSA8IGthbnNob3VzaG9rdWJ1dHN1XCA7CivotaTlpJbnt5rlhpnnnJ8gPCBzZWtpZ2Fpc2Vuc2hhc2hpblwgOwor5b+D56We5Zaq5aSxIDwgc2hpbnNoaW5zb3VzaGl0c3VcIDsKK+mAmuS/l+Wwj+iqrCA8IHRzdXV6b2t1c2hvdXNldHN1XCA7CivmrYzoiJ7kvI7ljYHlhavnlaogPCBrYWJ1a2lqdXVoYWNoaWJhblwgOwor55m+5oim55m+5YudIDwgaHlha3VzZW5oeWFrdXNob3VcIDsKK+Wkqeeah+apn+mWouiqrCA8IHRlbicnbm91a2lrYW5zZXRzdVwgOwor5YWs6Ki85Lq65b255aC0IDwga291c2hvdW5pbicneWFrdWJhXCA7CivotoXnj77lrp/kuLvnvqkgPCBjaG91Z2Vuaml0c3VzaHVnaVwgOwor5LqM5qW155yf56m6566hIDwgbmlreW9rdXNoaW5rdXVrYW5cIDsKK+aPkOeBr+ihjOWIlyA8IGNob3VjaGluZ3lvdXJldHN1XCA7CivpmKrnpZ7lpKfpnIfngb0gPCBoYW5zaGluZGFpc2hpbnNhaVwgOwor5aSx5qWt5a++562WIDwgc2hpdHN1Z3lvdXRhaXNha3VcIDsKK+azleWumuW+l+elqOaVsCA8IGhvdXRlaXRva3VoeW91c3V1XCA7CivoqK3nq4votqPmhI/mm7ggPCBzZXRzdXJpdHN1c2h1aXNob1wgOwor5aSW5Zu95Lq655m76YyyIDwgZ2Fpa29rdWppbnRvdXJva3VcIDsKK+i6q+S9k+manOWus+iAhSA8IHNoaW50YWlzaG91Z2Fpc2hhXCA7CivlpKfph4/noLTlo4rlhbXlmaggPCB0YWlyeW91aGFrYWloZWlraVwgOwor5raI6LK76ICF5L+h55SoIDwgc2hvdWhpc2hhc2hpbicneW91XCA7Civlj43lsITkv4LmlbDnt5rlm7MgPCBoYW5zaGFrZWlzdXVzZW56dVwgOwor6YiN6KeS5LiJ6KeS5b2iIDwgZG9ua2FrdXNhbmtha3VrZWlcIDsKK+a1t+mbo+WvqeWIpOW6gSA8IGthaW5hbnNoaW5wYW5jaG91XCA7Civniq/nvarnmbrnlJ/njocgPCBoYW56YWloYXNzZWlyaXRzdVwgOwor5b6u55Sf54mp5a2m6ICFIDwgYmlzZWlidXRzdWdha3VzaGFcIDsKK+S4g+iJsuWUkOi+m+WtkCA8IG5hbmFpcm90b3VnYXJhc2hpXCA7CivntKDnspLlrZDliqDpgJ/lmaggPCBzb3J5dXVzaGlrYXNva3VraVwgOwor5YWs6IG36YG45oyZ5rOVIDwga291c2hva3VzZW5reW9ob3VcIDsKK+WumuW9oumDteS+v+eJqSA8IHRlaWtlaXl1dWJpbmJ1dHN1XCA7Civoh6rnlLHosr/mmJPlnLDln58gPCBqaXl1dWJvdWVraWNoaWlraVwgOwor5a++5Lit5Zu96Zai5L+CIDwgdGFpY2h1dWdva3VrYW5rZWlcIDsKK+WFrOmWi+W4guWgtOaTjeS9nCA8IGtvdWthaXNoaWpvdXNvdXNhXCA7Civnp5HlrabmioDooZPluoEgPCBrYWdha3VnaWp1dHN1Y2hvdVwgOwor5bem5YG06YCa6KGMIDwgaGlkYXJpZ2F3YXRzdXVrb3VcIDsKK+Wkp+iLseWNmueJqemkqCA8IGRhaWVpaGFrdWJ1dHN1a2FuXCA7Civli5XohIjnoazljJbnl4cgPCBkb3VteWFrdWtvdWthc2hvdVwgOwor5bid546L56We5qip6KqsIDwgdGVpb3VzaGlua2Vuc2V0c3VcIDsKK+aVkeWHuuS9nOaIpiA8IGt5dXVzaHV0c3VzYWt1c2VuXCA7CivlroflrpnlpKfniIbnmbogPCB1Y2h1dWRhaWJha3VoYXRzdVwgOwor6aaW55u45YW85aSW55u4IDwgc2h1c2hvdWtlbmdhaXNob3VcIDsKK+eUn+eJqeWcsOeQhuWtpiA8IHNlaWJ1dHN1Y2hpcmlnYWt1XCA7Civkurrouqvkv53orbfku6TnirYgPCBqaW5zaGluaG9nb3JlaWpvdVwgOwor5Y6f5a2Q54mp55CG5a2mIDwgZ2Vuc2hpYnV0c3VyaWdha3VcIDsKK+avjeWtkOWBpeW6t+aJi+W4syA8IGJvc2hpa2Vua291dGVjaG91XCA7CivnlaXlj5boqpjmi5DnvaogPCByeWFrdXNodXl1dWthaXphaVwgOwor5a6k5YaF6KOF6aO+IDwgc2hpdHN1bmFpc291c2hva3VcIDsKK+WOmueUn+W5tOmHkeS/nemZuiA8IGtvdXNlaW5lbmtpbmhva2VuXCA7Civnm7TmjqXnq7bkuokgPCBjaG9rdXNldHN1a3lvdXNvdVwgOwor5aSp5L2T54mp55CG5a2mIDwgdGVudGFpYnV0c3VyaWdha3VcIDsKK+mZjeWcp+WkieWcp+WZqCA8IGtvdWF0c3VoZW4nJ2F0c3VraVwgOwor5p2x5Y2w5bqm5Lya56S+IDwgaGlnYXNoaWluZG9nYWlzaGFcIDsKK+eJqeizquS4u+e+qeiAhSA8IGJ1c3NoaXRzdXNodWdpc2hhXCA7Civlm73pmpvnmoTosr/mmJMgPCBrb2t1c2FpdGVraWJvdWVraVwgOwor5Lit5oCn5a2Q54iG5by+IDwgY2h1dXNlaXNoaWJha3VkYW5cIDsKK+S7o+aVsOaWueeoi+W8jyA8IGRhaXN1dWhvdXRlaXNoaWtpXCA7CivlubPlnYflpKrpmb3ml6UgPCBoZWlraW50YWl5b3VqaXRzdVwgOwor5oCn6KGM54K65oSf5p+T55eHIDwgc2Vpa291aWthbnNlbnNob3VcIDsKK+aXreaXpeaYh+WkqSA8IGt5b2t1aml0c3VzaG91dGVuXCA7CivkubPlhZDmrbvkuqHnjocgPCBueXV1amlzaGlib3VyaXRzdVwgOwor5LiH5Zu95Y2a6Kan5LyaIDwgYmFua29rdWhha3VyYW5rYWlcIDsKK+mYsuihm+aWveioreW6gSA8IGJvdWVpc2hpc2V0c3VjaG91XCA7CivmnInmlpnpp5Dou4rloLQgPCB5dXVyeW91Y2h1dXNoYWpvdVwgOwor6Ieo5bqK5b+D55CG5a2mIDwgcmluc2hvdXNoaW5yaWdha3VcIDsKK+eUn+WRveS/nemZuuS8muekviA8IHNlaW1laWhva2VuZ2Fpc2hhXCA7CivlhpnnnJ/pgLHliIroqowgPCBzaGFzaGluc2h1dWthbnNoaVwgOwor56eB5pyJ6LKh55Sj5Yi25bqmIDwgc2hpeXV1emFpc2Fuc2VpZG9cIDsKK+W3qOefs+iomOW/teeJqSA8IGt5b3Nla2lraW5lbmJ1dHN1XCA7CivkuozlhYPmlrnnqIvlvI8gPCBuaWdlbmhvdXRlaXNoaWtpXCA7CivomJroi5TmpI3niakgPCBzZW50YWlzaG9rdWJ1dHN1XCA7CivpgZPnvqnnmoTosqzku7sgPCBkb3VnaXRla2lzZWtpbmluXCA7CivnjYXlrZDllJDovpvlrZAgPCBzaGlzaGl0b3VnYXJhc2hpXCA7CivnoJTnqbblrqTmo58gPCBrZW5reXV1c2hpdHN1dG91XCA7CivmsJfosaHoprPmuKzoiLkgPCBraXNob3VrYW5zb2t1c2VuXCA7Civou73lj6PoqbEgPCBrYXJ1a3VjaGliYW5hc2hpXCA7CivkurrnjL/lkIznpZboqqwgPCBqaW4nJ2VuZG91c29zZXRzdVwgOwor5Zuj5L2T5Lqk5riJ5qipIDwgZGFudGFpa291c2hvdWtlblwgOwor5a++5Lq65oGQ5oCW55eHIDwgdGFpamlua3lvdWZ1c2hvdVwgOwor6ISz6ISK6auE6Iac54KOIDwgbm91c2VraXp1aW1ha3VlblwgOwor6KaB5rOo5oSP5Lq654mpIDwgeW91Y2h1dWlqaW5idXRzdVwgOwor5a2m5qCh5pWZ6IKy5rOVIDwgZ2Fra291a3lvdWlrdWhvdVwgOwor6KW/5YG06Ku45Zu9IDwgbmlzaGlnYXdhc2hva29rdVwgOwor546L5qip56We5o6I6KqsIDwgb3VrZW5zaGluanVzZXRzdVwgOwor55yf6YOo5YiG6ZuG5ZCIIDwgc2hpbmJ1YnVuc2h1dWdvdVwgOwor54us5Y2g56aB5q2i5rOVIDwgZG9rdXNlbmtpbnNoaWhvdVwgOwor6ISK5qSO5YuV54mpIDwgc2VraXRzdWlkb3VidXRzdVwgOwor5bGF6ZaT5YW85a+d5a6kIDwgaW1ha2Vuc2hpbnNoaXRzdVwgOwor5qGR5Y6f5qGR5Y6fIDwga3V3YWJhcmFrdXdhYmFyYVwgOwor5YWs56ew6LOH5pys6YeRIDwga291c2hvdXNoaWhvbmtpblwgOwor6Zu75YuV55m65YuV5qmfIDwgZGVuZG91aGF0c3Vkb3VraVwgOwor5b+c55So54mp55CG5a2mIDwgb3V5b3VidXRzdXJpZ2FrdVwgOwor5Lqr5qW955Sf5rS7IDwga3lvdXJha3VzZWlrYXRzdVwgOwor5YWl5Yqb6Zu75rWBIDwgbnl1dXJ5b2t1ZGVucnl1dVwgOwor5LiJ5Y2B5YWr5bqm57eaIDwgc2FuanV1aGFjaGlkb3NlblwgOwor5Y2B5bm05LiA5pelIDwganV1bmVuJydpY2hpaml0c3VcIDsKK+iqjeefpeW/g+eQhuWtpiA8IG5pbmNoaXNoaW5yaWdha3VcIDsKK+miqOS/l+Wwj+iqrCA8IGZ1dXpva3VzaG91c2V0c3VcIDsKK+S9juihgOWcp+eXhyA8IHRlaWtldHN1YXRzdXNob3VcIDsKK+W3pealreaJgOacieaoqSA8IGtvdWd5b3VzaG95dXVrZW5cIDsKK+WkmuWkiemHj+ino+aekCA8IHRhaGVucnlvdWthaXNla2lcIDsKK+iZmuOAheWun+OAhSA8IGt5b2t5b2ppdHN1aml0c3VcIDsKK+a4hea2vOmjsuaWmeawtCA8IHNlaXJ5b3VpbnJ5b3VzdWlcIDsKK+aKgOihk+WNlOWKmyA8IGdpanV0c3VreW91cnlva3VcIDsKK+epuuS4reihneeqgSA8IGt1dWNodXVzaG91dG90c3VcIDsKK+S4gOWbveS4gOWFmuS4u+e+qSA8IGlra29rdWl0dG91c2h1Z2lcIDsKK+aXpeacrOmBk+i3r+WFrOWboyA8IG5paG9uZG91cm9rb3VkYW5cIDsKK+mHkeWIqeeUn+a0u+iAhSA8IGtpbnJpc2Vpa2F0c3VzaGFcIDsKK+WNg+evh+S4gOW+iyA8IHNlbnBlbicnaWNoaXJpdHN1XCA7CivmlpnnkIbmlZnlrqQgPCByeW91cmlreW91c2hpdHN1XCA7CivpgbroqIDln7fooYzogIUgPCB5dWlnb25zaGlra291c2hhXCA7CivmnKzmoLzlsI/oqqwgPCBob25rYWt1c2hvdXNldHN1XCA7Civosr/mmJPlpJblj47mlK8gPCBib3Vla2lnYWlzaHV1c2hpXCA7Civlm73nq4vliofloLQgPCBrb2t1cml0c3VnZWtpam91XCA7Civlrp/ot7XnkIbmgKfmibnliKQgPCBqaXNzZW5yaXNlaWhpaGFuXCA7Civmn5PoibLkvZPlnLDlm7MgPCBzZW5zaG9rdXRhaWNoaXp1XCA7CivkuLvluK3noJTnqbblk6EgPCBzaHVzZWtpa2Vua3l1dWluXCA7Civpq5jpgJ/luqblhpnnnJ8gPCBrb3Vzb2t1ZG9zaGFzaGluXCA7CivojYnpo5/li5XniakgPCBzb3VzaG9rdWRvdWJ1dHN1XCA7Civpq5jmrKHmlrnnqIvlvI8gPCBrb3VqaWhvdXRlaXNoaWtpXCA7Civlvq7liIbmlrnnqIvlvI8gPCBiaWJ1bmhvdXRlaXNoaWtpXCA7Civnm7TmjqXpgbjmjJkgPCBjaG9rdXNldHN1c2Vua3lvXCA7Civpg7Xkvr/np4Hmm7jnrrEgPCB5dXViaW5zaGlzaG9iYWtvXCA7CivmlpzmoLzmgKfntbHlvqEgPCBzaGFrYWt1c2VpdG91Z3lvXCA7CivntYzlj6Ppgb/lporolqwgPCBrZWlrb3VoaW5pbicneWFrdVwgOwor5Lq65p2Q6ZaL55m66YOoIDwgamluemFpa2FpaGF0c3VidVwgOwor5aSa6YeN5ZCN5YmN56m66ZaTIDwgdGFqdXVuYW1hZWt1dWthblwgOwor55Sf6ICF5b+F5ruFIDwgc2hvdWphaGl0c3VtZXRzdVwgOwor54ax5biv5qSN54mpIDwgbmV0dGFpc2hva3VidXRzdVwgOwor5LiH5Zu95qiZ5rqW5pmCIDwgYmFua29rdWh5b3VqdW5qaVwgOwor5p2+5LiL6Zu75belIDwgbWF0c3VzaGl0YWRlbmtvdVwgOwor6Ziy6KGb5bqB6ZW35a6YIDwgYm91ZWljaG91Y2hvdWthblwgOwor5ZCr5rC05YyW5ZCI54mpIDwgZ2Fuc3Vpa2Fnb3VidXRzdVwgOwor6Zai5p2x5aSn6ZyH54G9IDwga2FudG91ZGFpc2hpbnNhaVwgOwor5ZWG5qWt566X6KGTIDwgc2hvdWd5b3VzYW5qdXRzdVwgOwor6KOF55Sy5Zue5Y+O6LuKIDwgc291a291a2Fpc2h1dXNoYVwgOwor5Zyw5pa56KGM6LKh5pS/IDwgY2hpaG91Z3lvdXphaXNlaVwgOwor5oCn6KGo54++5oOF5aCxIDwgc2VpaHlvdWdlbmpvdWhvdVwgOwor5oim5oim5qCX5qCXIDwgc2Vuc2Vucml0c3VyaXRzdVwgOwor5biM5pyb55qE6Kaz5risIDwga2lib3V0ZWtpa2Fuc29rdVwgOwor5Y+N5bCE5rib6KGw6YePIDwgaGFuc2hhZ2Vuc3VpcnlvdVwgOwor5o+u55m654mp6LOqIDwga2loYXRzdWJ1c3NoaXRzdVwgOwor5aSJ5oWL5b+D55CG5a2mIDwgaGVudGFpc2hpbnJpZ2FrdVwgOwor55m65YWJ5qSN54mpIDwgaGFra291c2hva3VidXRzdVwgOwor5qyn5bee5YWx5ZCM5L2TIDwgb3VzaHV1a3lvdWRvdXRhaVwgOwor57Sr5aSW57ea55mC5rOVIDwgc2hpZ2Fpc2VucnlvdWhvdVwgOwor6Z2e5q2m6KOF5Lit56uLIDwgaGlidXNvdWNodXVyaXRzdVwgOwor5Li75bit5aSW5Lqk5a6YIDwgc2h1c2VraWdhaWtvdWthblwgOwor57Sw6IOe6LOq6YG65LydIDwgc2FpYm91c2hpdHN1aWRlblwgOwor5YWx55Sj5YWa5a6j6KiAIDwga3lvdXNhbnRvdXNlbmdlblwgOwor6Zu75Yqb5L6b57WmIDwgZGVucnlva3VreW91a3l1dVwgOwor5beh5Zue6Ki655mC5omAIDwganVua2Fpc2hpbnJ5b3Vqb1wgOwor5rqQ5rOJ5omA5b6X56iOIDwgZ2Vuc2Vuc2hvdG9rdXplaVwgOwor57WE6IG35Yq05YON6ICFIDwgc29zaG9rdXJvdWRvdXNoYVwgOwor5Yq05YON6ICF6ZqO57SaIDwgcm91ZG91c2hha2Fpa3l1dVwgOwor5oim55Wl54iG5pKDIDwgc2Vucnlha3ViYWt1Z2VraVwgOwor5aaK5aig5Lit57W2IDwgbmluc2hpbmNodXV6ZXRzdVwgOwor5ouh5aSn5YaN55Sf55SjIDwga2FrdWRhaXNhaXNlaXNhblwgOwor5bmz5ZKM57at5oyB5rS75YuVIDwgaGVpd2FpamlrYXRzdWRvdVwgOwor5LiK57Sa6KOB5Yik5omAIDwgam91a3l1dXNhaWJhbnNob1wgOwor56aB5qyy5Li7576p6ICFIDwga2luJyd5b2t1c2h1Z2lzaGFcIDsKK+eJueauiua9nOiIquiJhyA8IHRva3VzaHVzZW5rb3V0ZWlcIDsKK+acgOaBteWbveW+hemBhyA8IHNhaWtlaWtva3V0YWlndXVcIDsKK+WFseeUo+S4u+e+qeWbvSA8IGt5b3VzYW5zaHVnaWtva3VcIDsKK+WOn+WRiuWvvuiiq+WRiiA8IGdlbmtva3V0YWloaWtva3VcIDsKK+WPl+iol+WPjuizhOe9qiA8IGp1dGFrdXNodXV3YWl6YWlcIDsKK+a1geihjOaAp+aEn+WGkiA8IHJ5dXVrb3VzZWlrYW5ib3VcIDsKK+Wbveawkee3j+eUn+eUoyA8IGtva3VtaW5zb3VzZWlzYW5cIDsKK+S4rei3nembouertui1sCA8IGNodXVreW9yaWt5b3Vzb3VcIDsKK+WFqOWbveeahOevhOWbsiA8IHplbmtva3V0ZWtpaGFuJydpXCA7CivpgKPpgqblhbHlkozlm70gPCByZW5wb3VreW91d2Frb2t1XCA7Civmma7pgY3nmoTms5XliYcgPCBmdWhlbnRla2lob3Vzb2t1XCA7CivlpKfntbHpoJjpgbjmjJkgPCBkYWl0b3VyeW91c2Vua3lvXCA7CivkuozljbXmgKflj4znlJ/lhZAgPCBuaXJhbnNlaXNvdXNlaWppXCA7Civml6XnjLblkIznpZboq5YgPCBuaWNoaXl1dWRvdXNvcm9uXCA7CivkuKHmm7/miYvmlbDmlpkgPCByeW91Z2FldGVzdXVyeW91XCA7Civos4fmnKzliKnnm4rnjocgPCBzaGlob25yaWVraXJpdHN1XCA7CivorbDpmaLpgYvllrblp5Tlk6HkvJogPCBnaWluJyd1bicnZWlpaW5rYWlcIDsKK+aIpui7iuaPmumZuOiJpiA8IHNlbnNoYXlvdXJpa3VrYW5cIDsKK+S4u+i+nue0oOaAp+imj+e0hCA8IHNodWppc29zZWlraXlha3VcIDsKK+Wls+aAp+ino+aUvumBi+WLlSA8IGpvc2Vpa2FpaG91dW5kb3VcIDsKK+WjsuaYpemYsuatouazlSA8IGJhaXNodW5ib3VzaGlob3VcIDsKK+WFieWMluWtpuWPjeW/nCA8IGtvdWthZ2FrdWhhbicnbm91XCA7Civnm7TmjqXkvJroq4cgPCBjaG9rdXNldHN1a2FpZGFuXCA7CivlibLlopfos4Pph5EgPCB3YXJpbWFzaGljaGluZ2luXCA7Civou43kuovlvZPlsYDogIUgPCBndW5qaXRvdWt5b2t1c2hhXCA7CivogonkvZPlirTlg43ogIUgPCBuaWt1dGFpcm91ZG91c2hhXCA7Civoh6rkuLvmtYHpgJrnsbMgPCBqaXNodXJ5dXV0c3V1bWFpXCA7CivkvZzku5jpnaLnqY0gPCBzYWt1ZHp1a2VtZW5zZWtpXCA7Civml6Xni6zljZTkvJogPCBuaWNoaWRva3VreW91a2FpXCA7Civml6XluLjnlJ/mtLsgPCBuaWNoaWpvdXNlaWthdHN1XCA7CivnrKzkuIDmrKHnlKPmpa0gPCBkYWlpY2hpamlzYW5neW91XCA7Civlrp/lrZjkuLvnvqnogIUgPCBqaXRzdXpvbnNodWdpc2hhXCA7CivmrbPlhaXmrbPlh7ogPCBzYWlueXV1c2Fpc2h1dHN1XCA7CivnibnliKXmgKXooYwgPCB0b2t1YmV0c3VreXV1a291XCA7Civnj77lrp/kuLvnvqnogIUgPCBnZW5qaXRzdXNodWdpc2hhXCA7Civlj43mlL/lupzli6LlipsgPCBoYW5zZWlmdXNlaXJ5b2t1XCA7CivlhY3nlqvkuI3lhajnl4cgPCBtZW4nJ2VraWZ1emVuc2hvdVwgOwor6Lui5Ye66Ki85piOIDwgdGVuc2h1dHN1c2hvdW1laVwgOwor5Y2B6YCy5YiG6aGe5rOVIDwgamlzc2hpbmJ1bnJ1aWhvdVwgOwor5YG25YOP5pWZ5b6S55qEIDwgZ3V1em91a3lvdXRvdGVraVwgOwor57SF55m95q2M5ZCI5oimIDwga291aGFrdXV0YWdhc3NlblwgOwor57WM5riI56CU56m25omAIDwga2VpemFpa2Vua3l1dXNob1wgOwor6LuN5LqL6YCa5L+h5ZOhIDwgZ3Vuaml0c3V1c2hpbicnaW5cIDsKK+Wfuua6luWGheizg+mHkSA8IGtpanVuJyduYWljaGluZ2luXCA7CivnnIzluoHmiYDlnKjlnLAgPCBrZW5jaG91c2hvemFpY2hpXCA7CivmlZHojZLkvZzniakgPCBreXV1a291c2FrdW1vdHN1XCA7CivnnJ/lrpflpKfosLfmtL4gPCBzaGluc2h1dW9vdGFuaWhhXCA7CivlnLDnhrHnmbrpm7sgPCBjaGluZXRzdWhhdHN1ZGVuXCA7CivolqzniannmYLms5UgPCB5YWt1YnV0c3VyeW91aG91XCA7Civlho3lhaXlm73oqLHlj68gPCBzYWlueXV1a29rdWt5b2thXCA7Civoi7Hlm73lm73mlZnkvJogPCBlaWtva3Vrb2treW91a2FpXCA7Civpo5/ns6fphY3ntaYgPCBzaG9rdXJ5b3VoYWlreXV1XCA7Civngq3phbjlkIzljJbkvZznlKggPCB0YW5zYW5kb3VrYXNheW91XCA7CivmuIXmlZnlvpLpnanlkb0gPCBzZWlreW91dG9rYWt1bWVpXCA7CivlpKrpmb3npZ7ntYzlj6IgPCB0YWl5b3VzaGlua2Vpc291XCA7Civnm7Tns7vooYDml48gPCBjaG9ra2Vpa2V0c3V6b2t1XCA7Civos6rllY/nlKjntJkgPCBzaGl0c3Vtb24nJ3lvdXNoaVwgOwor57WM5Za25a2m5L+u5aOrIDwga2VpZWlnYWt1c2h1dXNoaVwgOwor5YGl5bq36Ki85piO5pu4IDwga2Vua291c2hvdW1laXNob1wgOwor56S+5Lya5b+D55CG5a2mIDwgc2hha2Fpc2hpbnJpZ2FrdVwgOwor5LqM5aSn5pS/5YWa5Li7576pIDwgbmlkYWlzZWl0b3VzaHVnaVwgOwor54us6Lqr55Sf5rS7IDwgZG9rdXNoaW5zZWlrYXRzdVwgOwor6K2m5a+f5b2T5bGAIDwga2Vpc2F0c3V0b3VreW9rdVwgOwor5YWs5YWx5LyB5qWt5L2TIDwga291a3lvdWtpZ3lvdXRhaVwgOwor55u05o6l5Lyd5p+TIDwgY2hva3VzZXRzdWRlbnNlblwgOwor6YO95biC5YaN6ZaL55m6IDwgdG9zaGlzYWlrYWloYXRzdVwgOwor6Z2S56m65pWZ5a6kIDwgYW96b3Jha3lvdXNoaXRzdVwgOwor5pS+5bCE57ea55mC5rOVIDwgaG91c2hhc2VucnlvdWhvdVwgOwor5Zu96YCj5YiG5ouF6YeRIDwga29rdXJlbmJ1bnRhbmtpblwgOwor6Z2e5auh5Ye65a2QIDwgaGljaGFrdXNodXRzdXNoaVwgOwor55Sf5rS75qeY5byPIDwgc2Vpa2F0c3V5b3VzaGlraVwgOwor5a6a5pyf5YiK6KGM54mpIDwgdGVpa2lrYW5rb3VidXRzdVwgOwor5pS75pKD6ZaL5aeL57eaIDwga291Z2VraWthaXNoaXNlblwgOwor5bmz6Z2i5LiJ6KeS5rOVIDwgaGVpbWVuc2Fua2FrdWhvdVwgOwor5rOV5a6a5Lyd5p+T55eFIDwgaG91dGVpZGVuc2VuYnlvdVwgOwor54mH6YGT5paZ6YeRIDwga2F0YW1pY2hpcnlvdWtpblwgOwor5Y6f5rK55rWB5Ye6IDwgZ2VuJyd5dXJ5dXVzaHV0c3VcIDsKK+eVpeW8j+WRveS7pCA8IHJ5YWt1c2hpa2ltZWlyZWlcIDsKK+iKuOihk+a0u+WLlSA8IGdlaWp1dHN1a2F0c3Vkb3VcIDsKK+S4ieWPieelnue1jOeXmyA8IHNhbnNhc2hpbmtlaXRzdXVcIDsKK+attOWPsuWTsuWtpiA8IHJla2lzaGl0ZXRzdWdha3VcIDsKK+WEquWLneaxuuWumuaIpiA8IHl1dXNob3VrZXR0ZWlzZW5cIDsKK+S4i+eUuuiogOiRiSA8IHNoaXRhbWFjaGlrb3RvYmFcIDsKK+acgOS9jueUn+a0u+iyuyA8IHNhaXRlaXNlaWthdHN1aGlcIDsKK+S4jee0lOeVsOaAp+S6pOmBiiA8IGZ1anVuJydpc2Vpa291eXV1XCA7Civpqqjnmq7nrYvlj7PooZvploAgPCBob25la2F3YXN1amllbW9uXCA7CivlupznnIzliKXkurrlj6MgPCBmdWtlbmJldHN1amlua291XCA7Civnt4rmgKXnnYDpmbggPCBraW5reXV1Y2hha3VyaWt1XCA7Civmjqjlrprnm7jntprkurogPCBzdWl0ZWlzb3V6b2t1bmluXCA7CivlhrfooYDli5XniakgPCByZWlrZXRzdWRvdWJ1dHN1XCA7CivlpJrlm73nsY3kvIHmpa0gPCB0YWtva3VzZWtpa2lneW91XCA7Civlj5bmibHms6jmhI8gPCB0b3JpYXRzdWthaWNodXVpXCA7CivmtYXplpPlsbHojZjkuovku7YgPCBhc2FtYXNhbnNvdWppa2VuXCA7CivmmbTkuIDmmYLlsI/pm6ggPCBoYXJlaWNoaWppa29zYW1lXCA7CivlibLlopfmlpnph5EgPCB3YXJpbWFzaGlyeW91a2luXCA7CivlraPnr4DlirTlg43ogIUgPCBraXNldHN1cm91ZG91c2hhXCA7CivkuK3lsI/oq7jlm73lrrYgPCBjaG91c2hvdXNob2tva2thXCA7CivkuI3lubPnrYnmnaHntIQgPCBmdWJ5b3Vkb3Vqb3V5YWt1XCA7Civnm7TmiKrnsKHmmI4gPCBjaG9rdXNldHN1a2FubWVpXCA7Civpu4TpgZPlkInml6UgPCBrb3Vkb3VraWNoaW5pY2hpXCA7CivmnIDkvY7os4Pph5HliLYgPCBzYWl0ZWljaGluZ2luc2VpXCA7CivluJ3lm73kuLvnvqnnmoQgPCB0ZWlrb2t1c2h1Z2l0ZWtpXCA7CivkuIDop6bljbPnmbogPCBpc3Nob2t1c29rdWhhdHN1XCA7CivljbPml6XplovnpaggPCBzb2t1aml0c3VrYWloeW91XCA7CivmpI3nianos6ogPCBzaG9rdWJ1dHN1c2hpdHN1XCA7CivntI3nqI7pgJrnn6Xmm7ggPCBub3V6ZWl0c3V1Y2hpc2hvXCA7CivplqLnqI7libLlvZPliLYgPCBrYW56ZWl3YXJpYXRlc2VpXCA7Civlrp/os6ros4Pph5EgPCBqaXNzaGl0c3VjaGluZ2luXCA7CivlsYXkvY/oqLzmmI7mm7ggPCBreW9qdXVzaG91bWVpc2hvXCA7CivlpKfkvb/ntJrkvJroq4cgPCB0YWlzaGlreXV1a2FpZGFuXCA7CivmlZnppIrlsI/oqqwgPCBreW91eW91c2hvdXNldHN1XCA7CivmsJHkuLvmtLvli5XlrrYgPCBtaW5zaHVrYXRzdWRvdWthXCA7CivlrqLlk6HnoJTnqbblk6EgPCBreWFrdWlua2Vua3l1dWluXCA7Civmir3osaHoirjooZMgPCBjaHV1c2hvdWdlaWp1dHN1XCA7Civnm7TmjqXmlK/phY0gPCBjaG9rdXNldHN1c2hpaGFpXCA7CivnkrDlooPkv53orbfkuLvnvqkgPCBrYW5reW91aG9nb3NodWdpXCA7CivkuJbnlYzosr/mmJPmqZ/plqIgPCBzZWthaWJvdWVraWtpa2FuXCA7CivmlK/mjIHlipvkv4LmlbAgPCBzaGlqaXJ5b2t1a2Vpc3V1XCA7Civnm7TkuIvlnovlnLDpnIcgPCBjaG9ra2FnYXRhamlzaGluXCA7CivmnKrop6PmsbrllY/poYwgPCBtaWthaWtldHN1bW9uZGFpXCA7Civlu7rnr4nln7rmupbms5UgPCBrZW5jaGlrdWtpanVuaG91XCA7CivnhKHlvaLlm7rlrpros4fnlKMgPCBtdWtlaWtvdGVpc2hpc2FuXCA7Civnn6XnmoTmiYDmnInmqKkgPCBjaGl0ZWtpc2hveXV1a2VuXCA7Civogbfmpa3lronlrprmiYAgPCBzaG9rdWd5b3VhbnRlaWpvXCA7CivlhbHnlKPlhZrntLDog54gPCBreW91c2FudG91c2FpYm91XCA7CivkuIDlubTnlJ/ojYnmnKwgPCBpY2hpbmVuc2Vpc291aG9uXCA7CivmnaHntITliqDnm5/lm70gPCBqb3V5YWt1a2FtZWlrb2t1XCA7Civnq4vmraPkvbzmiJDkvJogPCByaXNzaG91a291c2Vpa2FpXCA7Civpm4blm6PlsLHogbcgPCBzaHV1ZGFuc2h1dXNob2t1XCA7CivlhbHoprPnpo/pn7Pmm7ggPCBreW91a2FuZnVrdWluc2hvXCA7CivmsLTnlJ/mpI3niakgPCBzdWlzZWlzaG9rdWJ1dHN1XCA7Civlrr/nm7TlrqQgPCBzaHVrdWNob2t1c2hpdHN1XCA7Civpq5jmiYDmgZDmgJbnl4cgPCBrb3VzaG9reW91ZnVzaG91XCA7CivmlrDogZ7osqnlo7LlupcgPCBzaGluYnVuaGFuYmFpdGVuXCA7CivovrLmnpfmsLTnlKPnnIEgPCBub3VyaW5zdWlzYW5zaG91XCA7CivkuozogIXpgbjkuIDms5UgPCBuaXNoYXNlbicnaXRzdWhvdVwgOwor5aKD55WM5YCk5ZWP6aGMIDwga3lvdWthaWNoaW1vbmRhaVwgOwor56S+5Lya5Lq66YeO55CDIDwgc2hha2FpamluJyd5YWt5dXVcIDsKK+iBt+WLmeizquWVjyA8IHNob2t1bXVzaGl0c3Vtb25cIDsKK+S5vueUn+akjeeJqSA8IGthbnNlaXNob2t1YnV0c3VcIDsKK+iPnOmjn+S4u+e+qeiAhSA8IHNhaXNob2t1c2h1Z2lzaGFcIDsKK+Wuv+aziuioreWCmSA8IHNodWt1aGFrdXNldHN1YmlcIDsKK+Wbveeri+Wkp+WtpiA8IGtva3VyaXRzdWRhaWdha3VcIDsKK+S4gOiogOS6jOiogCA8IGhpdG9rb3RvZnV0YWtvdG9cIDsKK+i7jeeUo+ikh+WQiOS9kyA8IGd1bnNhbmZ1a3Vnb3V0YWlcIDsKK+eyvuelnuWMu+WtpuiAhSA8IHNlaXNoaW4nJ2lnYWt1c2hhXCA7CivntYzmuIjkvIHnlLvluoEgPCBrZWl6YWlraWtha3VjaG91XCA7CivlhYjnq6/mlK/mjIHlipsgPCBzZW50YW5zaGlqaXJ5b2t1XCA7Civkv53lgaXniannkIblraYgPCBob2tlbmJ1dHN1cmlnYWt1XCA7CivmraPpnaLooZ3nqoEgPCBzaG91bWVuc2hvdXRvdHN1XCA7CivliIbop6Pokrjmupzms5UgPCBidW5rYWlqb3VyeXV1aG91XCA7CivoqIjph4/oqIDoqp7lraYgPCBrZWlyeW91Z2VuZ29nYWt1XCA7CivlnLDln5/mjK/oiIjliLggPCBjaGlpa2lzaGlua291a2VuXCA7CivmgKXpgLLkuLvnvqnogIUgPCBreXV1c2hpbnNodWdpc2hhXCA7CivkuIDml6XljYPnp4sgPCBpY2hpbmljaGlzZW5zaHV1XCA7CivkuqTpgJrpgYvovLjmpa0gPCBrb3V0c3V1dW4nJ3l1Z3lvdVwgOwor5ZWG5qWt55uu55qEIDwgc2hvdWd5b3Vtb2t1dGVraVwgOwor54Sh5Yi26ZmQ5L6b57WmIDwgbXVzZWlnZW5reW91a3l1dVwgOwor57Wm5LiO5omA5b6X6ICFIDwga3l1dXlvc2hvdG9rdXNoYVwgOwor5oim6ZeY54iG5pKD5qmfIDwgc2VudG91YmFrdWdla2lraVwgOwor6KSH5byP5a2m57SaIDwgZnVrdXNoaWtpZ2Fra3l1dVwgOwor5p6X5qWt6Kmm6aiT5aC0IDwgcmluZ3lvdXNoaWtlbmpvdVwgOwor5Y2S5qWt6Ki85pu4IDwgc290c3VneW91c2hvdXNob1wgOwor5pOy5by+55m65bCE562SIDwgdGVraWRhbmhhc3NoYXRvdVwgOwor55Sj6LuN6KSH5ZCI5L2TIDwgc2FuZ3VuZnVrdWdvdXRhaVwgOwor5pyA5aSn5YWs57SE5pWwIDwgc2FpZGFpa291eWFrdXN1dVwgOwor5Zu95YaF5raI6LK756iOIDwga29rdW5haXNob3VoaXplaVwgOwor5bCR5bm05a+p5Yik5omAIDwgc2hvdW5lbnNoaW5wYW5qb1wgOwor54S86IKJ5a6a6aOfIDwgeWFraW5pa3V0ZWlzaG9rdVwgOwor5rWB6KGM5oCn6IKd54KOIDwgcnl1dWtvdXNlaWthbicnZW5cIDsKK+ihqOmdouW8teWKmyA8IGh5b3VtZW5jaG91cnlva3VcIDsKK+a6lua6luaxuuWLneaIpiA8IGp1bmp1bmtlc3Nob3VzZW5cIDsKK+S4jeWujOWFqOeHg+eEvCA8IGZ1a2FuemVuJyduZW5zaG91XCA7Civljp/lrZDlipvmmYLku6MgPCBnZW5zaGlyeW9rdWppZGFpXCA7CivovrLmpa3oqabpqJPloLQgPCBub3VneW91c2hpa2Vuam91XCA7Civpq5jpgJ/luqbmkq7lvbEgPCBrb3Vzb2t1ZG9zYXRzdWVpXCA7CivnibnliKXnlarntYQgPCB0b2t1YmV0c3ViYW5ndW1pXCA7Civlrabnv5Log73lipsgPCBnYWt1c2h1dW5vdXJ5b2t1XCA7Civlpb3msJfmgKfnlJ/niakgPCBrb3VraXNlaXNlaWJ1dHN1XCA7Civlrrbluq3lhoXmmrTlipsgPCBrYXRlaW5haWJvdXJ5b2t1XCA7Civkv6HnlKjlj5blvJUgPCBzaGluJyd5b3V0b3JpaGlraVwgOwor6Z+z5aOw5aSa6YeN5pS+6YCBIDwgb25zZWl0YWp1dWhvdXNvdVwgOwor6auY6KGA5Zyn55eHIDwga291a2V0c3VhdHN1c2hvdVwgOwor5Zyo57GN5bCC5b6T6ICFIDwgemFpc2VraXNlbmp1dXNoYVwgOwor5LiA5Y+j6KmxIDwgaGl0b2t1Y2hpYmFuYXNoaVwgOwor5a6Y6LK755WZ5a2m55SfIDwga2FucGlyeXV1Z2FrdXNlaVwgOwor5Y2X5YyX5pyd5pmC5LujIDwgbmFuYm9rdWNob3VqaWRhaVwgOwor5q275Lqh6Ki65pat5pu4IDwgc2hpYm91c2hpbmRhbnNob1wgOwor5bym5qW95Zub6YeN5aWPIDwgZ2VuZ2FrdXNoaWp1dXNvdVwgOwor5Luy6KOB6KOB5Yik5omAIDwgY2h1dXNhaXNhaWJhbnNob1wgOwor55CG6KuW54mp55CG5a2mIDwgcmlyb25idXRzdXJpZ2FrdVwgOwor5YWo6Iis5YmN5ZOo57eaIDwgemVucGFuemVuc2hvdXNlblwgOwor562N55Sf5rS7IDwgdGFrZW5va29zZWlrYXRzdVwgOwor5Y2B5LqM5oyH6IW46JmrIDwganV1bmlzaGljaG91Y2h1dVwgOwor5Lit5b+D5Lq654mpIDwgY2h1dXNoaW5qaW5idXRzdVwgOwor5Zyf5pyo5bel5a2m6ICFIDwgZG9ib2t1a291Z2FrdXNoYVwgOwor6aOf5paZ5ZOB5ZWGIDwgc2hva3VyeW91aGluc2hvdVwgOwor5pel5Lit6Z+T57Wx5ZCIIDwgbml0Y2h1dWthbnRvdWdvdVwgOwor5ouh5by15YCN57K+5bqmIDwga2FrdWNob3ViYWlzZWlkb1wgOwor5Yq05YON5Y+O5a655omAIDwgcm91ZG91c2h1dXlvdXNob1wgOwor6LaF54++5a6f55qEIDwgY2hvdWdlbmppdHN1dGVraVwgOwor5Y2z6Lqr5oiQ5LuPIDwgc29rdXNoaW5qb3VidXRzdVwgOwor5Zu95aSW6ISx5Ye6IDwga29rdWdhaWRhc3NodXRzdVwgOwor54Sh552A6Zm46aOb6KGMIDwgbXVjaGFrdXJpa3VoaWtvdVwgOwor5pel5LuY5aSJ5pu057eaIDwgaGlkenVrZWhlbmtvdXNlblwgOwor55u05o6l5Zue562UIDwgY2hva3VzZXRzdWthaXRvdVwgOwor5b2T5LqL6ICF6IO95YqbIDwgdG91amlzaGFub3VyeW9rdVwgOwor6ISz5oCn5bCP5YWQ6bq755e6IDwgbm91c2Vpc2hvdW5pbWFoaVwgOwor5YWI54mp5Y+W5byVIDwgc2FraW1vbm90b3JpaGlraVwgOwor5aSn5p2x5Lqc5YWx5qCE5ZyPIDwgZGFpdG91YWt5b3VlaWtlblwgOwor5q205Y+y5bCP6KqsIDwgcmVraXNoaXNob3VzZXRzdVwgOwor54Wu5rK45raI5q+SIDwgc2hhZnV0c3VzaG91ZG9rdVwgOwor5rW35aSW6YCy5Ye6IDwga2FpZ2Fpc2hpbnNodXRzdVwgOwor5rC05Yqb55m66Zu7IDwgc3Vpcnlva3VoYXRzdWRlblwgOwor5pCN55uK6KiI566X5pu4IDwgc29uJydla2lrZWlzYW5zaG9cIDsKK+Wwj+WjsueJqeS+oeaMh+aVsCA8IGtvdXJpYnVra2FzaGlzdXVcIDsKK+aApeihjOWBnOi7iumnhSA8IGt5dXVrb3V0ZWlzaGFla2lcIDsKK+WPjeakjeawkeS4u+e+qSA8IGhhbnNob2t1bWluc2h1Z2lcIDsKK+alteS9jua4qeenkeWtpiA8IGt5b2t1dGVpb25rYWdha3VcIDsKK+iHqueUseS4u+e+qee1jOa4iCA8IGppeXV1c2h1Z2lrZWl6YWlcIDsKK+WGmeecn+acm+mBoOmPoSA8IHNoYXNoaW5ib3Vlbmt5b3VcIDsKK+W9ouizquWwjuWFpSA8IGtlaXNoaXRzdWRvdW55dXVcIDsKK+WmmeazleiTruiPr+e1jCA8IG15b3Vob3VyZW5nZWt5b3VcIDsKK+Wun+eUqOS4u+e+qeiAhSA8IGppdHN1eW91c2h1Z2lzaGFcIDsKK+W+jOaWuemAo+e1oee3miA8IGtvdWhvdXJlbnJha3VzZW5cIDsKK+Wun+mok+W/g+eQhuWtpiA8IGppa2tlbnNoaW5yaWdha3VcIDsKK+WknOmWk+mgkOmHkeOAheW6qyA8IHlha2FuJyd5b2tpbmtpbmtvXCA7Civnm7TmjqXplqLkv4IgPCBjaG9rdXNldHN1a2Fua2VpXCA7CivmjK/mm7/kvJHml6UgPCBmdXJpa2Fla3l1dWppdHN1XCA7CivpgKPpgqbmupblgpnliLbluqYgPCByZW5wb3VqdW5iaXNlaWRvXCA7Civpg7Xkvr/lsI/ljIUgPCB5dXViaW5rb2R6dXRzdW1pXCA7CivkuI3ms5XlhaXlm73ogIUgPCBmdWhvdW55dXVrb2t1c2hhXCA7CivljZjkuIDnpZ7mlZkgPCB0YW4nJ2l0c3VzaGlua3lvdVwgOwor6Jma5byx5L2T6LOqIDwga3lvamFrdXRhaXNoaXRzdVwgOwor5aSa5YWD5pa556iL5byPIDwgdGFnZW5ob3V0ZWlzaGlraVwgOwor5Zu95YaF57eP55Sf55SjIDwga29rdW5haXNvdXNlaXNhblwgOwor6ISK57Si5YuV54mpIDwgc2VraXNha3Vkb3VidXRzdVwgOwor5q2m5Yqb6KGd56qBIDwgYnVyeW9rdXNob3V0b3RzdVwgOwor54ax5qC45Y+N5b+cIDwgbmV0c3VrYWt1aGFuJydub3VcIDsKK+mJhOmBk+WFrOWuieWumCA8IHRldHN1ZG91a291YW5rYW5cIDsKK+eoruWtkOakjeeJqSA8IHNodXNoaXNob2t1YnV0c3VcIDsKK+W5s+WPsOWei+iyqOi7iiA8IGhpcmFkYWlnYXRha2FzaGFcIDsKK+S6uuensOS7o+WQjeipniA8IG5pbnNob3VkYWltZWlzaGlcIDsKK+Wun+alreS5i+aXpeacrCA8IGppdHN1Z3lvdW5vbmlob25cIDsKK+epjeWxpOS5vumbu+axoCA8IHNla2lzb3VrYW5kZW5jaGlcIDsKK+ihjOaUv+euoeeQhuW6gSA8IGd5b3VzZWlrYW5yaWNob3VcIDsKK+i1pOWNgeWtl+adoee0hCA8IHNla2lqdXVqaWpvdXlha3VcIDsKK+WFieWtpumhleW+rumPoSA8IGtvdWdha3VrZW5iaWt5b3VcIDsKK+i2hemBjuWLpOWLmeaJi+W9kyA8IGNob3VrYWtpbm11dGVhdGVcIDsKK+S6iOWCmeWjq+WumOWtpuagoSA8IHlvYmlzaGlrYW5nYWtrb3VcIDsKK+W8t+WItuWPjuWuueaJgCA8IGt5b3VzZWlzaHV1eW91am9cIDsKK+eKr+e9quW/g+eQhuWtpiA8IGhhbnphaXNoaW5yaWdha3VcIDsKK+mAo+mCpuaNnOafu+WxgCA8IHJlbnBvdXNvdXNha3lva3VcIDsKK+Wkp+mZuOenu+WLleiqrCA8IHRhaXJpa3VpZG91c2V0c3VcIDsKK+ebtOaOpeihjOWLlSA8IGNob2t1c2V0c3Vrb3Vkb3VcIDsKK+S8gealreWGheaVmeiCsiA8IGtpZ3lvdW5haWt5b3Vpa3VcIDsKK+axguiBt+W6g+WRiiA8IGt5dXVzaG9rdWtvdWtva3VcIDsKK+Wun+iovOWTsuWtpiA8IGppc3Nob3V0ZXRzdWdha3VcIDsKK+iKseWrgeiKseWpvyA8IGhhbmF5b21laGFuYW11a29cIDsKK+eUu+WDj+WHpueQhuijhee9riA8IGdhem91c2hvcmlzb3VjaGlcIDsKK+eqkue0oOmFuOWMlueJqSA8IGNoaXNzb3NhbmthYnV0c3VcIDsKK+W4neeOi+WIh+mWi+ihkyA8IHRlaW91c2Vra2FpanV0c3VcIDsKK+WFreWNgeWbm+WIhumfs+espiA8IHJva3VqdXVzaGlidW9ucHVcIDsKK+aYpeapn+eZuuWLleacnyA8IHNodW5raWhhdHN1ZG91a2lcIDsKK+Wkp+WQjeihjOWIlyA8IGRhaW15b3VneW91cmV0c3VcIDsKK+mrmOWxseakjeeJqSA8IGtvdXphbnNob2t1YnV0c3VcIDsKK+aUvuWwhOaAp+WQjOS9jeS9kyA8IGhvdXNoYXNlaWRvdWl0YWlcIDsKK+WkqeW5leijvemAoOS6uiA8IHRlbm1ha3VzZWl6b3VuaW5cIDsKK+acgOWEquengOmBuOaJiyA8IHNhaXl1dXNodXVzZW5zaHVcIDsKK+eJueWIpeaWmemHkSA8IHRva3ViZXRzdXJ5b3VraW5cIDsKK+WLneWIqeWPiOWLneWIqSA8IHNob3VyaW1hdGFzaG91cmlcIDsKK+Wls+a1geaWh+WtpuiAhSA8IGpvcnl1dWJ1bmdha3VzaGFcIDsKK+S4remWk+Wwj+iqrCA8IGNodXVrYW5zaG91c2V0c3VcIDsKK+iAkOS5hea2iOiyu+iyoSA8IHRhaWt5dXVzaG91aGl6YWlcIDsKK+mdnuWFrOW8j+WNlOitsCA8IGhpa291c2hpa2lreW91Z2lcIDsKK+eUn+eJqea/g+e4riA8IHNlaWJ1dHN1bm91c2h1a3VcIDsKK+WFpeWKm+S/oeWPtyA8IG55dXVyeW9rdXNoaW5nb3VcIDsKK+epuua4r+S9v+eUqOaWmSA8IGt1dWtvdXNoaXlvdXJ5b3VcIDsKK+W9q+WIu+WupOW6pyA8IGNob3Vrb2t1c2hpdHN1emFcIDsKK+eiuueOh+aomeacrCA8IGtha3VyaXRzdWh5b3Vob25cIDsKK+eEoemHjeWKm+eKtuaFiyA8IG11anV1cnlva3Vqb3V0YWlcIDsKK+WkqeeFp+eah+Wkp+elniA8IHRlbnNob3Vrb3VkYWlqaW5cIDsKK+W3nueri+Wkp+WtpiA8IHNodXVyaXRzdWRhaWdha3VcIDsKK+eyvuelnuWuieWumuWJpCA8IHNlaXNoaW4nJ2FudGVpemFpXCA7CivphbjmgKfphbjljJbniakgPCBzYW5zZWlzYW5rYWJ1dHN1XCA7Civlhpnlrp/kuLvnvqnogIUgPCBzaGFqaXRzdXNodWdpc2hhXCA7CivlhrfmiKblnovmgJ3ogIMgPCByZWlzZW5nYXRhc2hpa291XCA7CivkupznhrHluK/pq5jmsJflnKcgPCBhbmV0dGFpa291a2lhdHN1XCA7CivlpJrogonmpI3niakgPCB0YW5pa3VzaG9rdWJ1dHN1XCA7Civpm7vlrZDlt6Xmpa3kvJogPCBkZW5zaGlrb3VneW91a2FpXCA7Civpm7vlrZDlt6XlrabogIUgPCBkZW5zaGlrb3VnYWt1c2hhXCA7CivorbLmuKHkurogPCB5dXp1cml3YXRhc2hpbmluXCA7CivnhrHkvJ3lsI7njocgPCBuZXRzdWRlbmRvdXJpdHN1XCA7CivmsJHkuLvlhbHlkozlm70gPCBtaW5zaHVreW91d2Frb2t1XCA7Civno4HmsJflhbHps7TnlLvlg48gPCBqaWtpa3lvdW1laWdhem91XCA7Civni6znq4voqJjlv7Xml6UgPCBkb2t1cml0c3VraW5lbmJpXCA7CivljJblraboqr/lkbPmlpkgPCBrYWdha3VjaG91bWlyeW91XCA7CivmpI3niankurrplpMgPCBzaG9rdWJ1dHN1bmluZ2VuXCA7Civps6XnjaPkv53orbfljLrln58gPCBjaG91anV1aG9nb2t1aWtpXCA7CivntYLouqvpm4fnlKjliLYgPCBzaHV1c2hpbmtveW91c2VpXCA7CivkuI3lrprmlrnnqIvlvI8gPCBmdXRlaWhvdXRlaXNoaWtpXCA7CivnianniankuqTmj5sgPCBidXRzdWJ1dHN1a291a2FuXCA7Civlrp/lipvooYzkvb8gPCBqaXRzdXJ5b2t1a291c2hpXCA7CivlnovlvI/oqLzmmI4gPCBrYXRhc2hpa2lzaG91bWVpXCA7CivpgKPli53opIflvI8gPCByZW5zaG91ZnVrdXNoaWtpXCA7CivlpKfkv67pgZPpmaLplbcgPCBkYWlzaHV1ZG91aW5jaG91XCA7Civnm7TmjqXljZTorbAgPCBjaG9rdXNldHN1a3lvdWdpXCA7Civnvarpmpzmtojmu4UgPCB6YWlzaG91c2hvdW1ldHN1XCA7CivmmannlJ/mpI3niakgPCBiYW5zZWlzaG9rdWJ1dHN1XCA7CivmvZzlnKjlpLHmpa0gPCBzZW56YWlzaGl0c3VneW91XCA7CivmuK/mub7pgYvpgIHmpa0gPCBrb3V3YW4nJ3Vuc291Z3lvdVwgOwor5ZGo5rOi5pWw5aSJ6Kq/IDwgc2h1dWhhc3V1aGVuY2hvdVwgOwor5Lm+54el5Zyw6L6y5qWtIDwga2Fuc291Y2hpbm91Z3lvdVwgOwor55Kw5aKD6YWN5oWu5pu4IDwga2Fua3lvdWhhaXJ5b3Nob1wgOwor55u05o6l5q+U6LyDIDwgY2hva3VzZXRzdWhpa2FrdVwgOwor5Zu65L2T54mp55CG5a2mIDwga290YWlidXRzdXJpZ2FrdVwgOwor5qC45oqR5q2i5YqbIDwga2FrdXlva3VzaGlyeW9rdVwgOwor5Zu96Zqb5o+05Yqp5qmf6ZaiIDwga29rdXNhaWVuam9raWthblwgOwor57WE57mU5Yq05YON6ICFIDwgc29zaGlraXJvdWRvdXNoYVwgOwor5Za25qWt5aCx5ZGK5pu4IDwgZWlneW91aG91a29rdXNob1wgOwor5LiH54mp5rWB6LuiIDwgYmFuYnV0c3VyeXV1dGVuXCA7Civou5/lvI/luq3nkIMgPCBuYW5zaGlraXRlaWt5dXVcIDsKK+W6g+WRiuS7o+eQhuW6lyA8IGtvdWtva3VkYWlyaXRlblwgOwor5L+u6YGT55Sf5rS7IDwgc2h1dWRvdXNlaWthdHN1XCA7CivmiKbmmYLlm73pmpvms5UgPCBzZW5qaWtva3VzYWlob3VcIDsKK+enmOWvhuitpuWvnyA8IGhpbWl0c3VrZWlzYXRzdVwgOwor5rOV5Lq65qCq5Li7IDwgaG91amlua2FidW51c2hpXCA7CivlhoXluZXoqbEgPCB1Y2hpbWFrdWJhbmFzaGlcIDsKK+mWk+aOpeeFp+aYjiA8IGthbnNldHN1c2hvdW1laVwgOwor57Sb6aqo56CV6LqrIDwgZnVua290c3VzYWlzaGluXCA7CivkuKHmo7Lli5XniakgPCByeW91c2VpZG91YnV0c3VcIDsKK+Wkmumhjee0jeeojuiAhSA8IHRhZ2FrdW5vdXplaXNoYVwgOwor5aSq5YWD5bil5aaZ546LIDwgZGFpZ2Vuc3VpbXlvdW91XCA7Civpm4bntITovrLmpa0gPCBzaHV1eWFrdW5vdWd5b3VcIDsKK+W7g+eWvuadoeS7tiA8IGhhaXNoaXRzdWpvdWtlblwgOwor6IO9546H6LOD6YeRIDwgbm91cml0c3VjaGluZ2luXCA7CivkuK3pg6jlpKrlubPmtIsgPCBjaHV1YnV0YWloZWl5b3VcIDsKK+S8gealreWGhee1hOWQiCA8IGtpZ3lvdW5haWt1bWlhaVwgOwor5Y2Y5YiA55u05YWlIDwgdGFudG91Y2hva3VueXV1XCA7CivlpKrlubPmtIvmiKbkuokgPCB0YWloZWl5b3VzZW5zb3VcIDsKK+S4ieaWh+Wwj+iqrCA8IHNhbm1vbnNob3VzZXRzdVwgOwor562L6IKJ5rOo5bCEIDwga2luJyduaWt1Y2h1dXNoYVwgOwor5Zub6YCa5YWr6YGUIDwgc2hpdHN1dWhhdHRhdHN1XCA7CivpgKPluK/kv53oqLzkurogPCByZW50YWlob3Nob3VuaW5cIDsKK+i7jeWbveS4u+e+qeiAhSA8IGd1bmtva3VzaHVnaXNoYVwgOwor5Ymy5aKX6YGL6LODIDwgd2FyaW1hc2hpdW5jaGluXCA7CivljZfmpbXoprPmuKwgPCBuYW5reW9rdWthbnNva3VcIDsKK+S4gOebrueereeEtiA8IGljaGltb2t1cnlvdXplblwgOwor57Sg5Lq65LiL5a6/IDwgc2hpcm91dG9nZXNodWt1XCA7CivlrabmoKHntabpo58gPCBnYWtrb3VreXV1c2hva3VcIDsKK+WPjeW4neWbveS4u+e+qSA8IGhhbnRlaWtva3VzaHVnaVwgOwor6ZaT5o6l5pKu5b2xIDwga2Fuc2V0c3VzYXRzdWVpXCA7CivkvJrnpL7mm7TnlJ/ms5UgPCBrYWlzaGFrb3VzZWlob3VcIDsKK+WbvemBuOW8geitt+S6uiA8IGtva3VzZW5iZW5nb25pblwgOwor55m95bed5aSc6Ii5IDwgc2hpcmFrYXdheW9mdW5lXCA7Civoh6rnhLblnLDnkIblraYgPCBzaGl6ZW5jaGlyaWdha3VcIDsKK+WcsOWfn+eahOWIhuW4gyA8IGNoaWlraXRla2lidW5wdVwgOwor54Sh5pS/5bqc5Li7576p6ICFIDwgbXVzZWlmdXNodWdpc2hhXCA7Civliarmlq3lronlrprmgKcgPCBzZW5kYW4nJ2FudGVpc2VpXCA7CivnibnnrYblpKfmm7ggPCB0b2t1aGl0c3V0YWlzaG9cIDsKK+mrmOWIhuWtkOWMluWtpiA8IGtvdWJ1bnNoaWthZ2FrdVwgOwor5oOF5aCx5YWs6ZaL5rOVIDwgam91aG91a291a2FpaG91XCA7Civlj43lsITmnJvpgaDpj6EgPCBoYW5zaGFib3Vlbmt5b3VcIDsKK+mjn+WTgeW3pealrSA8IHNob2t1aGlua291Z3lvdVwgOwor5qOY55qu5YuV54mpIDwga3lva3VoaWRvdWJ1dHN1XCA7CivmgKrlipvkubHnpZ4gPCBrYWlyeW9rdXJhbnNoaW5cIDsKK+S6uueUn+WTsuWtpiA8IGppbnNlaXRldHN1Z2FrdVwgOwor54m55Yil5aeU5ZOh5LyaIDwgdG9rdWJldHN1aWlua2FpXCA7CivlhoXpnIDkuLvlsI7lnosgPCBuYWlqdXNodWRvdWdhdGFcIDsKK+aZtOWkqeS5seawl+a1gSA8IHNlaXRlbnJhbmtpcnl1dVwgOwor5paw5ama55Sf5rS7IDwgc2hpbmtvbnNlaWthdHN1XCA7CivvvJLvvJDvvJDvvJDlubTllY/poYwgPCBuaXNlbicnbmVubW9uZGFpXCA7CivlhazplovlhaXmnK0gPCBrb3VrYWlueXV1c2F0c3VcIDsKK+WfuuacrOeahOS6uuaoqSA8IGtpaG9udGVraWppbmtlblwgOwor5qCq5byP5biC5aC0IDwga2FidXNoaWtpc2hpam91XCA7Civlrabmpa3miJDnuL4gPCBnYWt1Z3lvdXNlaXNla2lcIDsKK+aIpuS6ieeKr+e9quS6uiA8IHNlbnNvdWhhbnphaW5pblwgOwor54mp6LOq5ZCN6KmeIDwgYnVzc2hpdHN1bWVpc2hpXCA7Civlj43lr77osr/mmJPpoqggPCBoYW50YWlib3Vla2lmdXVcIDsKK+efree3qOWwj+iqrCA8IHRhbnBlbnNob3VzZXRzdVwgOwor6YGT6Lev5Lqk6YCa5rOVIDwgZG91cm9rb3V0c3V1aG91XCA7CivlhbHnlKPlm73lrrbpg6EgPCBreW91c2Fua29ra2FndW5cIDsKK+WVhualreaVsOWtpiA8IHNob3VneW91c3V1Z2FrdVwgOwor5Luu6KOF5beh5rSL6ImmIDwga2Fzb3VqdW4nJ3lvdWthblwgOwor5pWZ6IKy5Z+65pys5rOVIDwga3lvdWlrdWtpaG9uaG91XCA7CivnlJ/nlKPogIXkvqHmoLwgPCBzZWlzYW5zaGFrYWtha3VcIDsKK+acgOWwj+S6jOS5l+azlSA8IHNhaXNob3VuaWpvdWhvdVwgOwor6ISx5Ye66YCf5bqmIDwgZGFzc2h1dHN1c29rdWRvXCA7CivnibnliKXnt4/kvJogPCB0b2t1YmV0c3Vzb3VrYWlcIDsKK+esrOS4gOalveeroCA8IGRhaWljaGlnYWt1c2hvdVwgOwor5Li75bm556CU56m25ZOhIDwgc2h1a2Fua2Vua3l1dWluXCA7Civlrpjlg5rkuLvnvqnogIUgPCBrYW5yeW91c2h1Z2lzaGFcIDsKK+Wwj+mBuOaMmeWMuuWItiA8IHNob3VzZW5reW9rdXNlaVwgOwor57Si5p2h6YmE6YGTIDwgc2FrdWpvdXRldHN1ZG91XCA7Civou43oqJjnianoqp4gPCBndW5raW1vbm9nYXRhcmlcIDsKK+WOs+ato+S4reeriyA8IGdlbnNlaWNodXVyaXRzdVwgOwor5LiA5pel5LiA5aScIDwgaWNoaW5pY2hpaWNoaXlhXCA7CivpmbDpmbDmu4Xmu4UgPCBpbicnaW5tZXRzdW1ldHN1XCA7CivlsLHogbfmtarkurogPCBzaHV1c2hva3Vyb3VuaW5cIDsKK+iHqui7oui7iuaTjealrSA8IGppdGVuc2hhc291Z3lvdVwgOwor57SU5r2U5pWZ6IKyIDwganVua2V0c3VreW91aWt1XCA7CivkuJbnlYzmlrDoqJjpjLIgPCBzZWthaXNoaW5raXJva3VcIDsKK+Wul+aVmeaUuemdqSA8IHNodXVreW91a2Fpa2FrdVwgOwor5ZWG5bel5Lya6K2w5omAIDwgc2hvdWtvdWthaWdpc2hvXCA7CivlvL7lir7oo4HliKTmiYAgPCBkYW5nYWlzYWliYW5zaG9cIDsKK+aUr+mboua7heijgiA8IHNoaXJpbWV0c3VyZXRzdVwgOwor5Zu95rCR5a6/6IiOIDwga29rdW1pbnNodWt1c2hhXCA7Civkv53orbfplqLnqI7njocgPCBob2dva2FuemVpcml0c3VcIDsKK+eLrOeri+Wuo+iogCA8IGRva3VyaXRzdXNlbmdlblwgOwor5Ymv6IWO55qu6LOqIDwgZnVrdWppbmhpc2hpdHN1XCA7Civlm73msJHnlJ/mtLsgPCBrb2t1bWluc2Vpa2F0c3VcIDsKK+epjei8ieiDveWKmyA8IHNla2lzYWlub3VyeW9rdVwgOwor5Y+O5a656IO95YqbIDwgc2h1dXlvdW5vdXJ5b2t1XCA7CivohbDpq5jpmpzlrZAgPCBrb3NoaWRha2FzaG91amlcIDsKK+W5tOmgg+aXpemggyA8IHRvc2hpZ29yb2hpZ29yb1wgOwor6ZuG5pyt5L+CIDwgc2h1dXNhdHN1Z2FrYXJpXCA7CivmupbnpoHmsrvnlKPogIUgPCBqdW5raW5jaGlzYW5zaGFcIDsKK+itsOmZouWGhemWo+WItiA8IGdpaW4nJ25haWtha3VzZWlcIDsKK+mAmuS/l+aWh+WtpiA8IHRzdXV6b2t1YnVuZ2FrdVwgOwor6YeR5qeM6aCtIDwga2FuYWR6dWNoaWF0YW1hXCA7CivlhKrlhYjmoKrkuLsgPCB5dXVzZW5rYWJ1bnVzaGlcIDsKK+WGmeecn+a4rOmHjyA8IHNoYXNoaW5zb2t1cnlvdVwgOwor5LyB5qWt5L2T6LOqIDwga2lneW91dGFpc2hpdHN1XCA7CivnlJ/mtLvkv53orbfms5UgPCBzZWlrYXRzdWhvZ29ob3VcIDsKK+eMqueqgeeMm+mAsiA8IGNob3RvdHN1bW91c2hpblwgOwor5YWx55Sj5Li7576p6ICFIDwga3lvdXNhbnNodWdpc2hhXCA7CivmraPlronmga/pppnphbggPCBzZWlhbnNva3Vrb3VzYW5cIDsKK+WFrOWus+eXheaCo+iAhSA8IGtvdWdhaWJ5b3VrYW5qYVwgOwor5LiW55WM5L+d5YGl5qmf6ZaiIDwgc2VrYWlob2tlbmtpa2FuXCA7CivlrabnlJ/libLlvJUgPCBnYWt1c2Vpd2FyaWJpa2lcIDsKK+iyoeaUv+aKleiejeizhyA8IHphaXNlaXRvdXl1dXNoaVwgOwor5L6h5qC85Zyn5YqbIDwga2FrYWt1YXRzdXJ5b2t1XCA7CivmuK/mub7lirTlg43ogIUgPCBrb3V3YW5yb3Vkb3VzaGFcIDsKK+WGhemZuOaAp+awl+WAmSA8IG5haXJpa3VzZWlraWtvdVwgOwor5Lit5aSu5qiZ5rqW5pmCIDwgY2h1dW91aHlvdWp1bmppXCA7Civooajnj77lvaLlvI8gPCBoeW91Z2Vua2Vpc2hpa2lcIDsKK+aKleWFieeFp+aYjuWZqCA8IHRvdWtvdXNob3VtZWlraVwgOwor5Ye66aGY5pu46aGeIDwgc2h1dHN1Z2Fuc2hvcnVpXCA7Civnt4/lkIznm5/nvbfmpa0gPCBzb3Vkb3VtZWloaWd5b3VcIDsKK+Wul+aVmeaVmeiCsiA8IHNodXVreW91a3lvdWlrdVwgOwor5L2Z6KOV57a957a9IDwgeW95dXVzaGFrdXNoYWt1XCA7Civnn6XnmoTog73lipsgPCBjaGl0ZWtpbm91cnlva3VcIDsKK+WPjemqqOeyvuelniA8IGhhbmtvdHN1c2Vpc2hpblwgOwor5q2j56K654iG5pKDIDwgc2Vpa2FrdWJha3VnZWtpXCA7Civml6Xoi7HpgJroqLMgPCBuaWNoaWVpdHN1dXlha3VcIDsKK+acgOmrmOijgeWIpOaJgCA8IHNhaWtvdXNhaWJhbnNob1wgOwor6aOf54mp57mK57atIDwgc2hva3Vtb3RzdXNlbicnaVwgOwor566X6KGT57Sa5pWwIDwgc2FuanV0c3VreXV1c3V1XCA7CivlhaXlipvoo4Xnva4gPCBueXV1cnlva3Vzb3VjaGlcIDsKK+iBt+alreiok+e3tCA8IHNob2t1Z3lvdWt1bnJlblwgOwor5o6i5YG15bCP6KqsIDwgdGFudGVpc2hvdXNldHN1XCA7CivnlJ/mtLvlj43lv5wgPCBzZWlrYXRzdWhhbicnbm91XCA7Civllrblm6PlnLDkuIvpiYQgPCBlaWRhbmNoaWthdGV0c3VcIDsKK+advuS4i+mbu+WZqCA8IG1hdHN1c2hpdGFkZW5raVwgOwor55+l6K2Y6ZqO57SaIDwgY2hpc2hpa2lrYWlreXV1XCA7CivmoKrlvI/kvJrnpL4gPCBrYWJ1c2hpa2lnYWlzaGFcIDsKK+S4gOaZgumgkOaJgCA8IGljaGlqaWF6dWthcmlqb1wgOwor6aO95ZKM5YyW5ZCI54mpIDwgaG91d2FrYWdvdWJ1dHN1XCA7Civmi6HlpKfop6Pph4ggPCBrYWt1ZGFpa2Fpc2hha3VcIDsKK+mHkeWxnuaOouefpeapnyA8IGtpbnpva3V0YW5jaGlraVwgOwor5rWu5YuV5bCP5pWw54K5IDwgZnVkb3VzaG91c3V1dGVuXCA7Civlk4Hos6rkv53oqLwgPCBoaW5zaGl0c3Vob3Nob3VcIDsKK+iogOiqnuW/g+eQhuWtpiA8IGdlbmdvc2hpbnJpZ2FrdVwgOwor5L+h5Luw5ZGK55m9IDwgc2hpbmtvdWtva3VoYWt1XCA7CivmoLznianoh7Tnn6UgPCBrYWt1YnV0c3VjaGljaGlcIDsKK+S4gOWnq+S6jOWkqumDjiA8IGljaGloaW1lbml0YXJvdVwgOwor55WM6Z2i5rS75oCn5YmkIDwga2FpbWVua2Fzc2VpemFpXCA7CivnsbPnqYDpgJrluLMgPCBiZWlrb2t1dHN1dWNob3VcIDsKK+S6uueUn+ahiOWGheashCA8IGppbnNlaWFuJyduYWlyYW5cIDsKK+Wun+eUqOaWsOahiCA8IGppdHN1eW91c2hpbicnYW5cIDsKK+W/g+i6q+manOWusyA8IHNoaW5zaGluc2hvdWdhaVwgOwor5LiA5YiG5LqM5Y2B56eSIDwgaXBwdW4nJ25panV1YnlvdVwgOwor6YCf5oim5Y2z5rG6IDwgc29rdXNlbnNva2tldHN1XCA7CivljJblrablkLjnnYAgPCBrYWdha3VreXV1Y2hha3VcIDsKK+Wbm+aWueWxseipsSA8IHlvbW95YW1hYmFuYXNoaVwgOwor55qH5a6k5YW456+EIDwga291c2hpdHN1dGVucGFuXCA7CivljZfpmL/lhbHlkozlm70gPCBuYW4nJ2FreW91d2Frb2t1XCA7CivkuozljYHlm5vmmYLplpPliLYgPCBuaWp1dXlvamlrYW5zZWlcIDsKK+eJueWIpeWbveS8miA8IHRva3ViZXRzdWtva2thaVwgOwor5LiA5Z2q5pys56S+IDwgaGl0b3RzdWJvaG9uc2hhXCA7Civml6nlj6PoqIDokYkgPCBoYXlha3VjaGlrb3RvYmFcIDsKK+a3seWxseW5veiwtyA8IHNoaW56YW4nJ3l1dWtva3VcIDsKK+mAmuWVhueUo+alrSA8IHRzdXVzaG91c2FuZ3lvdVwgOwor5Li75oim6ZeY5oim6LuKIDwgc2h1c2VudG91c2Vuc2hhXCA7Civlu7rnr4npnaLnqY0gPCBrZW5jaGlrdW1lbnNla2lcIDsKK+avlOi8g+iogOiqnuWtpiA8IGhpa2FrdWdlbmdvZ2FrdVwgOwor55uk5qC56Yyv56+AIDwgYmFua29uc2FrdXNldHN1XCA7CivlhoXnmoTnlJ/mtLsgPCBuYWl0ZWtpc2Vpa2F0c3VcIDsKK+WGheaUv+S4jeW5sua4iSA8IG5haXNlaWZ1a2Fuc2hvdVwgOwor56eY5a+G5ryP5rSpIDwgaGltaXRzdXJvdXNldHN1XCA7Civpq5jnrYnoo4HliKTmiYAgPCBrb3V0b3VzYWliYW5zaG9cIDsKK+WHuuacreaOmyA8IHNodXNzYXRzdWdha2FyaVwgOwor546J55+z5re35reGIDwgZ3lva3VzZWtpa29ua291XCA7Civpm5vpkZHliKXogIUgPCBoaW5ha2FuYmV0c3VzaGFcIDsKK+e1gui6q+W5tOmHkSA8IHNodXVzaGluJyduZW5raW5cIDsKK+S6uueJqeWvuOaPjyA8IGppbmJ1dHN1c3VuYnlvdVwgOwor5ZWG5ZOB55uu6YyyIDwgc2hvdWhpbm1va3Vyb2t1XCA7CivlpJbpo5/nlKPmpa0gPCBnYWlzaG9rdXNhbmd5b3VcIDsKK+izh+a6kOevgOe0hCA8IHNoaWdlbnNldHN1eWFrdVwgOwor55CD6Z2i5bm+5L2V5a2mIDwga3l1dW1lbmtpa2FnYWt1XCA7CivpnZnohIjms6jlsIQgPCBqb3VteWFrdWNodXVzaGFcIDsKK+WGkumZuuWwj+iqrCA8IGJvdWtlbnNob3VzZXRzdVwgOwor54ax56Gs5YyW54mpIDwgbmV0c3Vrb3VrYWJ1dHN1XCA7Civpm7vlrZDpoZXlvq7pj6EgPCBkZW5zaGlrZW5iaWt5b3VcIDsKK+WbveaciemJhOmBkyA8IGtva3V5dXV0ZXRzdWRvdVwgOwor56K6546H5aSJ5pWwIDwga2FrdXJpdHN1aGVuc3V1XCA7CivplovnmbroqIjnlLsgPCBrYWloYXRzdWtlaWtha3VcIDsKK+WKtOWDjeeUn+eUo+aApyA8IHJvdWRvdXNlaXNhbnNlaVwgOwor5pyJ5a6z54mp6LOqIDwgeXV1Z2FpYnVzc2hpdHN1XCA7Civmg4XnirbphYzph48gPCBqb3Vqb3VzaGFrdXJ5b3VcIDsKK+S+teeVpeaIpuS6iSA8IHNoaW5yeWFrdXNlbnNvdVwgOwor5bmz6KGM5Zub6L665b2iIDwgaGVpa291c2hpaGVua2VpXCA7CivlhpLpoK3pmbPov7AgPCBib3V0b3VjaGluanV0c3VcIDsKK+eEvOi6q+iHquauuiA8IHNob3VzaGluamlzYXRzdVwgOwor5oSf5YK35Li7576p6ICFIDwga2Fuc2hvdXNodWdpc2hhXCA7CivlrabnlJ/oh6rmsrvkvJogPCBnYWt1c2VpamljaGlrYWlcIDsKK+Wkp+WuieWQieaXpSA8IHRhaWFua2ljaGluaWNoaVwgOwor55+v5q2j6KaW5YqbIDwga3lvdXNlaXNoaXJ5b2t1XCA7CivlubTph5Hlj5fntabogIUgPCBuZW5raW5qdWt5dXVzaGFcIDsKK+eglOeptumWi+eZuiA8IGtlbmt5dXVrYWloYXRzdVwgOwor5LiJ5oyH6bSOIDwgbWl0c3V5dWJpa2Ftb21lXCA7Civoq4flkIjlhaXmnK0gPCBkYW5nb3VueXV1c2F0c3VcIDsKK+mdnuWQjOacn+mAmuS/oSA8IGhpZG91a2l0c3V1c2hpblwgOwor5LiJ5Y2B5bm05oim5LqJIDwgc2FuanV1bmVuc2Vuc291XCA7CivplonmiYDmgZDmgJbnl4cgPCBoZWlqb2t5b3VmdXNob3VcIDsKK+WPuOazleeglOS/ruaJgCA8IHNoaWhvdWtlbnNodXVqb1wgOwor6Zm455Sf5YuV54mpIDwgcmlrdXNlaWRvdWJ1dHN1XCA7CivkvY7ph5HliKnmlL/nrZYgPCB0ZWlraW5yaXNlaXNha3VcIDsKK+eci+itt+WppumkiuaIkOaJgCA8IGthbmdvZnV5b3VzZWlqb1wgOwor5Y2X5aSq5bmz5rSLIDwgbWluYW1pdGFpaGVpeW91XCA7CivpurvolqzluLjnlKjogIUgPCBtYXlha3Vqb3V5b3VzaGFcIDsKK+WtpueUn+eUn+a0uyA8IGdha3VzZWlzZWlrYXRzdVwgOwor6ZW36Led6Zui5YiX6LuKIDwgY2hvdWt5b3JpcmVzc2hhXCA7Civmh7LnvbDlp5Tlk6HkvJogPCBjaG91YmF0c3VpaW5rYWlcIDsKK++8ke+8ke+8meeVqiA8IGh5YWt1anV1a3l1dWJhblwgOwor5pyJ5qmf5YyW5ZCI54mpIDwgeXV1a2lrYWdvdWJ1dHN1XCA7CivntZDlkIjntYTnuZQgPCBrZXRzdWdvdXNvc2hpa2lcIDsKK+S4jeW9k+WKtOWDjeihjOeCuiA8IGZ1dG91cm91ZG91a291aVwgOwor5b2r5b+D6Y+k6aqoIDwgY2hvdXNoaW5ydWtvdHN1XCA7CivnuIHml6XllYbkurogPCBlbicnbmljaGlzaG91bmluXCA7Civlv4PnpZ7ogJflvLEgPCBzaGluc2hpbm1vdWpha3VcIDsKK+efreacn+iyuOS7mCA8IHRhbmtpa2FzaGl0c3VrZVwgOwor5qW95aSp5Li7576p6ICFIDwgcmFrdXRlbnNodWdpc2hhXCA7Civlt6bkuK3mi6zlvKcgPCBoaWRhcmljaHV1a2Fra29cIDsKK+eEoeadoeS7tumZjeS8jyA8IG11am91a2Vua291ZnVrdVwgOwor6YGL6Lui5YWN6Kix6Ki8IDwgdW50ZW5tZW5reW9zaG91XCA7CivmoLzpl5jmiKbpg6jpmoogPCBrYWt1dG91c2VuYnV0YWlcIDsKK+m7kuiJsuS6uueoriA8IGtva3VzaG9rdWppbnNodVwgOwor5YWs5byP55m66KGoIDwga291c2hpa2loYXBweW91XCA7CivlsZXnpLrljbPlo7LkvJogPCB0ZW5qaXNva3ViYWlrYWlcIDsKK+i7jeS6i+Wig+eVjOe3miA8IGd1bmppa3lvdWthaXNlblwgOwor6Luf6aqo57WE57mUIDwgbmFua290c3Vzb3NoaWtpXCA7CivohbDotaTnh5UgPCBrb3NoaWFrYXRzdWJhbWVcIDsKK+a2iOiyu+iAheWbo+S9kyA8IHNob3VoaXNoYWRhbnRhaVwgOwor5YWo5L2T5Li7576p5Zu9IDwgemVudGFpc2h1Z2lrb2t1XCA7CivmmJ/plpPnianos6ogPCBzZWlrYW5idXNzaGl0c3VcIDsKK+S4jeWPr+S+teadoee0hCA8IGZ1a2FzaGluam91eWFrdVwgOwor55Sf5rav5a2m57+SIDwgc2hvdWdhaWdha3VzaHV1XCA7Civnn6XorZjooajnj74gPCBjaGlzaGlraWh5b3VnZW5cIDsKK+a6kOawj+eJqeiqniA8IGdlbmppbW9ub2dhdGFyaVwgOwor5LiD6Lui5YWr5YCSIDwgc2hpY2hpdGVuYmF0dG91XCA7CivluqfluK3mjIflrprliLggPCB6YXNla2lzaGl0ZWlrZW5cIDsKK+eZveiJsuS6uueoriA8IGhha3VzaG9rdWppbnNodVwgOwor5bmz5a6254mp6KqeIDwgaGVpa2Vtb25vZ2F0YXJpXCA7Civmi5Lntbblj43lv5wgPCBreW96ZXRzdWhhbicnbm91XCA7CivluLDlm73lrZDlpbPmnqAgPCBraWtva3VzaGlqb3dha3VcIDsKK+eJueWIpeW+hemBhyA8IHRva3ViZXRzdXRhaWd1dVwgOwor6Z2S5aSp55m95pelIDwgc2VpdGVuaGFrdWppdHN1XCA7CivlpKnnvbDopr/pnaIgPCB0ZW5iYXRzdXRla2ltZW5cIDsKK+ihgOaXj+e1kOWpmiA8IGtldHN1em9rdWtla2tvblwgOwor55m66Imy54++5YOPIDwgaGFzc2hva3VnZW5zaG91XCA7CivlhaXmnK3kvqHmoLwgPCBueXV1c2F0c3VrYWtha3VcIDsKK+mAo+eri+WGhemWoyA8IHJlbnJpdHN1bmFpa2FrdVwgOwor6IW55byP5ZG85ZC4IDwgZnVrdXNoaWtpa29reXV1XCA7CivpgbroqIDoo5zotrPmm7ggPCB5dWlnb25ob3Nva3VzaG9cIDsKK+S9jumWi+eZuuWbvSA8IHRlaWthaWhhdHN1a29rdVwgOwor6Lu95aaZ5rSS6ISxIDwga2VpbXlvdXNoYWRhdHN1XCA7Civpi7zntKLpiYTpgZMgPCBrb3VzYWt1dGV0c3Vkb3VcIDsKK+eCremJseWKtOWDjeiAhSA8IHRhbmtvdXJvdWRvdXNoYVwgOwor6Kej5p6Q5bm+5L2V5a2mIDwga2Fpc2VraWtpa2FnYWt1XCA7Civnj77mnInli6LlipsgPCBnZW4nJ3l1dXNlaXJ5b2t1XCA7CivntYzmuIjmgKflkJHkuIogPCBrZWl6YWlzZWlrb3Vqb3VcIDsKK+mBiuS8keaWveiorSA8IHl1dWt5dXVzaGlzZXRzdVwgOwor6Lez6LqN5oyv5YuVIDwgY2hvdXlha3VzaGluZG91XCA7CivlnLDkuIvmoLjlrp/pqJMgPCBjaGlrYWtha3VqaWtrZW5cIDsKK+avlOS+i+S7o+ihqOWItiA8IGhpcmVpZGFpaHlvdXNlaVwgOwor56uL5oay5ZCb5Li75pS/IDwgcmlra2Vua3Vuc2h1c2VpXCA7CivprZrpm7fnmbrlsITnrqEgPCBneW9yYWloYXNzaGFrYW5cIDsKK+aQjeebiuWIhuWykOeCuSA8IHNvbicnZWtpYnVua2l0ZW5cIDsKK+ekvuS8muS/nemZuuW6gSA8IHNoYWthaWhva2VuY2hvdVwgOwor6LaF54S25YaF6ZajIDwgY2hvdXplbicnbmFpa2FrdVwgOwor5q2p6KGM6ICF5aSp5Zu9IDwgaG9rb3VzaGF0ZW5nb2t1XCA7Civlrp/mpa3lrabmoKEgPCBqaXRzdWd5b3VnYWtrb3VcIDsKK+engeeri+Wkp+WtpiA8IHNoaXJpdHN1ZGFpZ2FrdVwgOwor5pyA5L2O6KGA5ZynIDwgc2FpdGVpa2V0c3VhdHN1XCA7CivlsIrlsZ7mrrrkurogPCBzb256b2t1c2F0c3VqaW5cIDsKK+WbveawkeeahuS/nemZuiA8IGtva3VtaW5rYWlob2tlblwgOwor6Ki65a+f5a6kIDwgc2hpbnNhdHN1c2hpdHN1XCA7CivkuK3nq4vlnLDluK8gPCBjaHV1cml0c3VjaGl0YWlcIDsKK+S4oealteWcsOaWuSA8IHJ5b3VreW9rdWNoaWhvdVwgOwor6YCj57aa5q665Lq6IDwgcmVuem9rdXNhdHN1amluXCA7CivlnoLnm7TliIbmpa0gPCBzdWljaG9rdWJ1bmd5b3VcIDsKK+a0l+a/r+efs+m5uCA8IHNlbnRha3VzZXRzdWtlblwgOwor6ZeY55eF55Sf5rS7IDwgdG91YnlvdXNlaWthdHN1XCA7CivlkIzmlofpgJrpgZQgPCBkb3VidW50c3V1dGF0c3VcIDsKK+WGhui7oua7keiEsSA8IGVudGVua2F0c3VkYXRzdVwgOwor5Y2Y57SU5YaN55Sf55SjIDwgdGFuanVuc2Fpc2Vpc2FuXCA7CivooqvpgbjmjJnos4fmoLwgPCBoaXNlbmt5b3NoaWtha3VcIDsKK+eUn+eJqeW3peWtpiA8IHNlaWJ1dHN1a291Z2FrdVwgOwor5Z+65rqW5aSW6LOD6YeRIDwga2lqdW5nYWljaGluZ2luXCA7CivkuIDlvovmuJvlj40gPCBpY2hpcml0c3VnZW50YW5cIDsKK+S6uuWToee4ruWwkSA8IGppbicnaW5zaHVrdXNob3VcIDsKK+itmOWIpeWKmyA8IHNoaWtpYmV0c3VyeW9rdVwgOwor54ax5biv5L2O5rCX5ZynIDwgbmV0dGFpdGVpa2lhdHN1XCA7Civni6znq4vlpInmlbAgPCBkb2t1cml0c3VoZW5zdXVcIDsKK+S6uuWumuizquWVjyA8IGppbnRlaXNoaXRzdW1vblwgOwor5paw57SE6IGW5pu4IDwgc2hpbicneWFrdXNlaXNob1wgOwor55Sf5q665LiO5aWqIDwgc2Vpc2F0c3V5b2RhdHN1XCA7Civnp4Hoh6rouqsgPCB3YXRha3VzaGlqaXNoaW5cIDsKK+W5s+a4heebmyA8IHRhaXJhbm9raXlvbW9yaVwgOwor5q6/5qeY5LuV5LqLIDwgdG9ub3NhbWFzaGlnb3RvXCA7Civlj7DmiYDnlKjlk4EgPCBkYWlkb2tvcm95b3VoaW5cIDsKK+iytOmHkeWxnuWNuCA8IGtpa2luem9rdW9yb3NoaVwgOwor5LiK5pa56LSF5YWtIDwga2FtaWdhdGF6ZWlyb2t1XCA7CivooYDml4/plqLkv4IgPCBrZXRzdXpva3VrYW5rZWlcIDsKK+WtkOWuruW+jOWxiCA8IHNoaWt5dXVrb3VrdXRzdVwgOwor5Y2X5b6B5YyX5LyQIDwgbmFuc2VpaG9rdWJhdHN1XCA7Civnj77lnKjlrozkuobmmYIgPCBnZW56YWlrYW5yeW91amlcIDsKK+ecn+Wun+S4gOi3ryA8IHNoaW5qaXRzdWljaGlyb1wgOwor54m55Yil6YGL6LODIDwgdG9rdWJldHN1dW5jaGluXCA7CivnrYnovrrkuInop5LlvaIgPCB0b3VoZW5zYW5rYWtrZWlcIDsKK+aXpeW4uOiMtumjr+S6iyA8IG5pY2hpam91c2FoYW5qaVwgOwor6YCa5bi45oim5YqbIDwgdHN1dWpvdXNlbnJ5b2t1XCA7CivpgKPpjpbnirbnkIPoj4wgPCByZW5zYWpvdWt5dXVraW5cIDsKK+WIqeWus+W+l+WksSA8IHJpZ2FpdG9rdXNoaXRzdVwgOwor5rWF6YWM5L2O5ZSxIDwgc2Vuc2hha3V0ZWlzaG91XCA7Civoo7jlrZDmpI3niakgPCByYXNoaXNob2t1YnV0c3VcIDsKK+WAn+eUqOiovOabuCA8IHNoYWt1eW91c2hvdXNob1wgOwor5YWx5pyJ57WQ5ZCIIDwga3lvdXl1dWtldHN1Z291XCA7Civljp/niIbniqDnibLogIUgPCBnZW5iYWt1Z2lzZWlzaGFcIDsKK+WbnuaKmOmgmOWfnyA8IGthaXNldHN1cnlvdWlraVwgOwor6IG35qWt5oSP6K2YIDwgc2hva3VneW91aXNoaWtpXCA7CivlpJblm73mipXos4flrrYgPCBnYWlrb2t1dG91c2hpa2FcIDsKK+WNmOW8j+Wtpue0miA8IHRhbnNoaWtpZ2Fra3l1dVwgOwor5a2m6KGT6ZuR6KqMIDwgZ2FrdWp1dHN1emFzc2hpXCA7CivlhaXlh7rlipsgPCBueXV1c2h1dHN1cnlva3VcIDsKK+e0m+WkseWxiiA8IGZ1bnNoaXRzdXRvZG9rZVwgOwor6Zu75rOi5aSp5paH5a2mIDwgZGVucGF0ZW5tb25nYWt1XCA7CivljZLmpa3oqabpqJMgPCBzb3RzdWd5b3VzaGlrZW5cIDsKK+WEquaAp+W9ouizqiA8IHl1dXNlaWtlaXNoaXRzdVwgOwor5oiQ6ZW35puy57eaIDwgc2VpY2hvdWt5b2t1c2VuXCA7Civnmb7lhavljYHluqYgPCBoeWFrdWhhY2hpanV1ZG9cIDsKK+Wkp+WSjOaSq+WtkCA8IHlhbWF0b25hZGVzaGlrb1wgOwor5aW96Imy5paH5a2mIDwga291c2hva3VidW5nYWt1XCA7CivpnIrprYLmtojmu4UgPCByZWlrb25zaG91bWV0c3VcIDsKK+eJueWIpemFjeW9kyA8IHRva3ViZXRzdWhhaXRvdVwgOwor5qeL6YCg6KiA6Kqe5a2mIDwga291em91Z2VuZ29nYWt1XCA7Civpoqjlipvpmo7ntJogPCBmdXVyeW9rdWthaWt5dXVcIDsKK+WcsOWfn+WGt+aaluaIvyA8IGNoaWlraXJlaWRhbmJvdVwgOwor5rWB5L2T5Yqb5a2mIDwgcnl1dXRhaXJpa2lnYWt1XCA7Civkurrlt6XlkbzlkLjms5UgPCBqaW5rb3Vrb2t5dXVob3VcIDsKK+WKo+W8seaEj+itmCA8IHJldHN1amFrdWlzaGlraVwgOwor5a6f6Ki85Li7576p6ICFIDwgamlzc2hvdXNodWdpc2hhXCA7CivmsYLogbfkv4IgPCBreXV1c2hva3VnYWthcmlcIDsKK+S6jOiCoeiGj+iWrCA8IGZ1dGFtYXRha291eWFrdVwgOwor5pSv5oyB5Yqb55CG6KuWIDwgc2hpamlyeW9rdXJpcm9uXCA7Civnianos6rku6PorJ0gPCBidXNzaGl0c3V0YWlzaGFcIDsKK+euoei9hOWumOW6gSA8IGthbmthdHN1a2FuY2hvdVwgOwor5YWs6ZaL6KiO6KuW5LyaIDwga291a2FpdG91cm9ua2FpXCA7Civkv67mraPnlLPlkYogPCBzaHV1c2Vpc2hpbmtva3VcIDsKK+W/g+eQhuWwj+iqrCA8IHNoaW5yaXNob3VzZXRzdVwgOwor552A6Zm45Zyw54K5IDwgY2hha3VyaWt1Y2hpdGVuXCA7Civmlofpg6jnp5HlrabnnIEgPCBtb25idWthZ2FrdXNob3VcIDsKK+eJueioseaYjue0sOabuCA8IHRva2t5b21laXNhaXNob1wgOwor5a6f6aiT5bCP6KqsIDwgamlra2Vuc2hvdXNldHN1XCA7Civljp/lrZDniIbnmbogPCBnZW5zaGliYWt1aGF0c3VcIDsKK+eojuWItuiqv+afu+S8miA8IHplaXNlaWNob3VzYWthaVwgOwor5YWl5Yqb5oOF5aCxIDwgbnl1dXJ5b2t1am91aG91XCA7Civph4/lrZDlipvlraYgPCByeW91c2hpcmlraWdha3VcIDsKK+WlquS4ieaMr+eOiyA8IGRhdHN1c2Fuc2hpbicnb3VcIDsKK+eZuuWxlemAlOS4iuWbvSA8IGhhdHRlbnRvam91a29rdVwgOwor5YWs5YWx5Zuz5pu46aSoIDwga291a3lvdXRvc2hva2FuXCA7CivlubTmnKvoqr/mlbQgPCBuZW5tYXRzdWNob3VzZWlcIDsKK+Wtpuihk+irluaWhyA8IGdha3VqdXRzdXJvbmJ1blwgOwor55Sf54mp5a2m6ICFIDwgc2VpYnV0c3VnYWt1c2hhXCA7Civlha3nmb7lha3lj7cgPCByb3BweWFrdXJva3Vnb3VcIDsKK+aAneW8geWTsuWtpiA8IHNoaWJlbnRldHN1Z2FrdVwgOwor5Zu95YaF6KaP5qC85YyWIDwga29rdW5haWtpa2FrdWthXCA7CivlibXnq4voqJjlv7Xml6UgPCBzb3VyaXRzdWtpbmVuYmlcIDsKK+mHkemKreeZu+mMsuWZqCA8IGtpbnNlbnRvdXJva3VraVwgOwor5oqX55Sf54mp6LOqIDwga291c2VpYnVzc2hpdHN1XCA7CivlirTlg43ntYTlkIjms5UgPCByb3Vkb3VrdW1pYWlob3VcIDsKK+e0oOW9ouadkOeUo+alrSA8IHNva2VpemFpc2FuZ3lvdVwgOwor5rS75YuV5YaZ55yfIDwga2F0c3Vkb3VzaGFzaGluXCA7CivkuqTmj5vosr/mmJPliLYgPCBrb3VrYW5ib3Vla2lzZWlcIDsKK+ePvuWcsOmnkOWcqOWToSA8IGdlbmNoaWNodXV6YWlpblwgOwor5pyA5bCP6Ieq5LmX5rOVIDwgc2Fpc2hvdWppam91aG91XCA7CivlsI/lnovkuZfnlKjou4ogPCBrb2dhdGFqb3V5b3VzaGFcIDsKK+WxnuaAp+WApOihjOWIlyA8IHpva3VzZWd5b3VyZXRzdVwgOwor5rW36LuN5YW15a2m5qChIDwga2FpZ3VuaGVpZ2Fra291XCA7Civnsr7npZ7oloTlvLEgPCBzZWlzaGluaGFrdWpha3VcIDsKK+W8t+i/q+ims+W/tSA8IGt5b3VoYWt1a2FuJyduZW5cIDsKK+m7hOmBk+WNgeS6jOWuriA8IGtvdWRvdWp1dW5pa3l1dVwgOwor6Ium5oOF5Yem55CG5qmf6ZaiIDwga3Vqb3VzaG9yaWtpa2FuXCA7Civou43nuK7ljZTlrpogPCBndW5zaHVrdWt5b3V0ZWlcIDsKK+edgOmZuOWcsOW4ryA8IGNoYWt1cmlrdWNoaXRhaVwgOwor54Kt5aG154iG55m6IDwgdGFuamluYmFrdWhhdHN1XCA7Civoo5zliqnoqJjmhrboo4Xnva4gPCBob2pva2lva3Vzb3VjaGlcIDsKK+eUn+a0u+eSsOWigyA8IHNlaWthdHN1a2Fua3lvdVwgOwor5Ye65p2l6auY5LuV5LqLIDwgZGVraWRha2FzaGlnb3RvXCA7CivmioDooZPpnanmlrAgPCBnaWp1dHN1a2FrdXNoaW5cIDsKK+izh+eUo+iyoOWCteihqCA8IHNoaXNhbmZ1c2FpaHlvdVwgOwor57Kf57KS57WQ5qC4IDwgem9rdXJ5dXVrZWtrYWt1XCA7CivniYjmqKnmiYDmnInogIUgPCBoYW5rZW5zaG95dXVzaGFcIDsKK+S/oeW+kuS8neWLleiAhSA8IHNoaW50b2RlbmRvdXNoYVwgOwor5Luu5Y+X5Y+W6Ki8IDwga2FyaXVrZXRvcmlzaG91XCA7CivmlrDogZ7phY3pgZQgPCBzaGluYnVuaGFpdGF0c3VcIDsKK+WNkualreirluaWhyA8IHNvdHN1Z3lvdXJvbmJ1blwgOwor55m76Yyy5ZWG5qiZIDwgdG91cm9rdXNob3VoeW91XCA7Civkv6HnlKjpipjmn4QgPCBzaGluJyd5b3VtZWlnYXJhXCA7Civmk43mtYTnkaDnkoMgPCBheWF0c3VyaWpvdXJ1cmlcIDsKK+WFseWQjOeUn+a0uyA8IGt5b3Vkb3VzZWlrYXRzdVwgOwor5a6Y6IO95Li7576p6ICFIDwga2FuJydub3VzaHVnaXNoYVwgOwor5Lyd6YGU54m55oCnIDwgZGVudGF0c3V0b2t1c2VpXCA7Civph5Hlo7rnnLwgPCBrYW5hdHN1Ym9tYW5ha29cIDsKK+S/oeS7sOeUn+a0uyA8IHNoaW5rb3VzZWlrYXRzdVwgOwor6YO35Zyf5bCP6KqsIDwga3lvdWRvc2hvdXNldHN1XCA7Civpm4blm6PnlJ/mtLsgPCBzaHV1ZGFuc2Vpa2F0c3VcIDsKK+iBlumciumZjeiHqOelrSA8IHNlaXJlaWtvdXJpbnNhaVwgOwor6aeQ5pel5aSn5L2/IDwgY2h1dW5pY2hpdGFpc2hpXCA7Civls7blm73moLnmgKcgPCBzaGltYWd1bmlrb25qb3VcIDsKK+a1geihjOaAp+iEs+eCjiA8IHJ5dXVrb3VzZWlub3VlblwgOwor6KiY5b+16KuW5paH6ZuGIDwga2luZW5yb25idW5zaHV1XCA7Civoh6rli5XpgKPntZDmqZ8gPCBqaWRvdXJlbmtldHN1a2lcIDsKK+Wkp+mZuOaAp+awl+WAmSA8IHRhaXJpa3VzZWlraWtvdVwgOwor5bem5bCP5ous5bynIDwgaGlkYXJpc2hvdWtha2tvXCA7CivmoLjlhbXlmajlrp/pqJMgPCBrYWt1aGVpa2lqaWtrZW5cIDsKK+awkeaXj+Wul+aVmSA8IG1pbnpva3VzaHV1a3lvdVwgOwor5pel5Lit6Z+T6LaKIDwgbml0Y2h1dWthbicnZXRzdVwgOwor6KqH5aSn5aaE5oOz54uCIDwga29kYWltb3Vzb3VreW91XCA7Civpu5LoibLngavolqwgPCBrb2t1c2hva3VrYXlha3VcIDsKK+S4h+acieelnuaVmSA8IGJhbicneXV1c2hpbmt5b3VcIDsKK+mgreiEs+a1geWHuiA8IHp1bm91cnl1dXNodXRzdVwgOwor55u05o6l6Kmx5rOVIDwgY2hva3VzZXRzdXdhaG91XCA7CivouqvliIboqLzmmI7mm7ggPCBtaWJ1bnNob3VtZWlzaG9cIDsKK+aWh+Wtl+WkmumHjeaUvumAgSA8IG1vaml0YWp1dWhvdXNvdVwgOwor5Yy75bir5Zu95a626Kmm6aiTIDwgaXNoaWtva2thc2hpa2VuXCA7CivmlofljJbkurrpoZ7lraYgPCBidW5rYWppbnJ1aWdha3VcIDsKK+W9ouizqui7ouaPmyA8IGtlaXNoaXRzdXRlbmthblwgOwor56ys5LiJ5qyh55Sj5qWtIDwgZGFpc2FuamlzYW5neW91XCA7CivmraPnnJ/mraPpipggPCBzaG91c2hpbnNob3VtZWlcIDsKK+eIhuW8vueZuuiogCA8IGJha3VkYW5oYXRzdWdlblwgOwor5paH5YyW5aSn6Z2p5ZG9IDwgYnVua2FkYWlrYWt1bWVpXCA7Civnm7Tnq4vkuI3li5UgPCBjaG9rdXJpdHN1ZnVkb3VcIDsKK+WVhualremBk+W+syA8IHNob3VneW91ZG91dG9rdVwgOwor6Zmz5YiX5a6kIDwgY2hpbnJldHN1c2hpdHN1XCA7CivnibnoqK3kvJrloLQgPCB0b2t1c2V0c3VrYWlqb3VcIDsKK+mdnuWxgOaJgOWIhuWykCA8IGhpa3lva3VzaG9idW5raVwgOwor5qC454mp55CG5a2mIDwga2FrdWJ1dHN1cmlnYWt1XCA7CivogqLkvZPkuI3oh6rnlLHlhZAgPCBzaGl0YWlmdWppeXV1amlcIDsKK+S7ruWQjea8ouWtl+WkieaPmyA8IGthbmFrYW5qaWhlbmthblwgOwor55u056uL54y/5Lq6IDwgY2hva3VyaXRzdWVuamluXCA7CivplqLkv4Lku6PlkI3oqZ4gPCBrYW5rZWlkYWltZWlzaGlcIDsKK+WkmuWbveexjeiogOiqniA8IHRha29rdXNla2lnZW5nb1wgOwor6LaF6YCj57WQ5a2QIDwgY2hvdXJlbmtldHN1c2hpXCA7CivmsLTpioDmsJflnKfoqIggPCBzdWlnaW5raWF0c3VrZWlcIDsKK+eUsuirluS5memngSA8IGtvdXJvbicnb3RzdWJha3VcIDsKK+WFkOerpeW/g+eQhuWtpiA8IGppZG91c2hpbnJpZ2FrdVwgOwor54mp55qE6LOH5rqQIDwgYnV0c3V0ZWtpc2hpZ2VuXCA7Civnm7TmjqXmlK/mj7QgPCBjaG9rdXNldHN1c2hpZW5cIDsKK+epuua0nuWMluePvuixoSA8IGt1dWRvdWthZ2Vuc2hvdVwgOwor54Sh55CG5pa556iL5byPIDwgbXVyaWhvdXRlaXNoaWtpXCA7CivmlrDliLbkuK3lraYgPCBzaGluc2VpY2h1dWdha3VcIDsKK+Wcp+WKm+Wbo+S9kyA8IGF0c3VyeW9rdWRhbnRhaVwgOwor5rip6KGA5YuV54mpIDwgb25rZXRzdWRvdWJ1dHN1XCA7CivkuqTlt67lr77np7DmgKcgPCBrb3VzYXRhaXNob3VzZWlcIDsKK+S4reeri+WKtOmAoyA8IGNodXVyaXRzdXJvdXJlblwgOwor54m55Yil5a6kIDwgdG9rdWJldHN1c2hpdHN1XCA7CivnoJTnqbbmtLvli5UgPCBrZW5reXV1a2F0c3Vkb3VcIDsKK+iHqueEtuWTsuWtpiA8IHNoaXplbnRldHN1Z2FrdVwgOwor5qCq5Li757eP5LyaIDwga2FidW51c2hpc291a2FpXCA7CivmgKfmoLzliKTliKUgPCBzZWlrYWt1aGFuYmV0c3VcIDsKK+WWp+WYqeS4oeaIkOaVlyA8IGtlbmthcnlvdXNlaWJhaVwgOwor6YGO5aSx5YK35a6zIDwga2FzaGl0c3VzaG91Z2FpXCA7CivpgJrkv6Hlt6XlraYgPCB0c3V1c2hpbmtvdWdha3VcIDsKK+WQjOS4gOS6uueJqSA8IGRvdWl0c3VqaW5idXRzdVwgOwor5Zu95a625YWs5YuZ5ZOh5rOVIDwga29ra2Frb3VtdWluaG91XCA7CivllYblrabljZrlo6sgPCBzaG91Z2FrdWhha3VzaGlcIDsKK+W/g+mgrea7heWNtCA8IHNoaW50b3VtZWtreWFrdVwgOwor5by36KGM5o6h5rG6IDwga3lvdWtvdXNhaWtldHN1XCA7CivoppbogbTopprmqZ/lmaggPCBzaGljaG91a2FrdWtpa2lcIDsKK+WwseS7u+a8lOiqrCA8IHNodXVuaW4nJ2VuemV0c3VcIDsKK+afk+iJsuS9k+eVsOW4uCA8IHNlbnNob2t1dGFpaWpvdVwgOwor5ZCN6KuW5Y2T6KqsIDwgbWVpcm9udGFrdXNldHN1XCA7Civms6jlhaXmlZnogrIgPCBjaHV1bnl1dWt5b3Vpa3VcIDsKK+WQkeeyvuelnuiWrCA8IGtvdXNlaXNoaW4nJ3lha3VcIDsKK+e1kOWpmumBqem9ouacnyA8IGtla2tvbnRla2lyZWlraVwgOwor5ry46L+R55qE6Ieq55SxIDwgemVua2ludGVraWppeXV1XCA7CivliIbliJfooYzpgLIgPCBidW5yZXRzdWtvdXNoaW5cIDsKK+mjn+aWmeWTgeW6lyA8IHNob2t1cnlvdWhpbnRlblwgOwor5oSP5b+X5rG65a6a5qmf6ZaiIDwgaXNoaWtldHRlaWtpa2FuXCA7CivkuLvovp7ntKDmgKfljp/nkIYgPCBzaHVqaXNvc2VpZ2VucmlcIDsKK+a9ruaxkOaRqeaTpiA8IGNob3VzZWtpbWFzYXRzdVwgOwor56+A6Laz5YuV54mpIDwgc2Vzc29rdWRvdWJ1dHN1XCA7Civpo5/nianpgKPpjpYgPCBzaG9rdW1vdHN1cmVuc2FcIDsKK+S4reiCieS4reiDjCA8IGNodXVuaWt1Y2h1dXplaVwgOwor56S+5Lya5rCR5Li75YWaIDwgc2hha2FpbWluc2h1dG91XCA7Civpm4bkuK3mlLvmkoMgPCBzaHV1Y2h1dWtvdWdla2lcIDsKK+eiuuWumuWIpOaxuiA8IGtha3V0ZWloYW5rZXRzdVwgOwor5bCR5aWz5bCP6KqsIDwgc2hvdWpvc2hvdXNldHN1XCA7Civnp4HoqK3lv5zmj7Tlm6MgPCBzaGlzZXRzdW91ZW5kYW5cIDsKK+WNmuWtpuWKm+ihjCA8IGhha3VnYWt1cnlva2tvdVwgOwor57WM5riI5ZCM5Y+L5LyaIDwga2VpemFpZG91eXV1a2FpXCA7Civlj43oqLzlj6/og73mgKcgPCBoYW5zaG91a2Fub3VzZWlcIDsKK+WCjeezu+ihgOaXjyA8IGJvdWtlaWtldHN1em9rdVwgOwor5Lit6ZaT5YaF6ZajIDwgY2h1dWthbicnbmFpa2FrdVwgOwor5Y2Y54us5L6b57WmIDwgdGFuZG9rdWt5b3VreXV1XCA7CivmkKzpgIHlkajms6LmlbAgPCBoYW5zb3VzaHV1aGFzdXVcIDsKK+WksealreS/nemZuiA8IHNoaXRzdWd5b3Vob2tlblwgOwor54m55Yil5Lya6KiIIDwgdG9rdWJldHN1a2Fpa2VpXCA7CivmjK/luYXlpInoqr8gPCBzaGlucHVrdWhlbmNob3VcIDsKK+W6g+WRiuWPjuWFpSA8IGtvdWtva3VzaHV1bnl1dVwgOwor5Lit5Zu95aSn6Zm4IDwgY2h1dWdva3V0YWlyaWt1XCA7CivmnIDpq5jmjIflsI7ogIUgPCBzYWlrb3VzaGlkb3VzaGFcIDsKK+aUvuWHuueJqeizhyA8IGhvdXNodXRzdWJ1c3NoaVwgOwor6YWN6YGU6Ki85piOIDwgaGFpdGF0c3VzaG91bWVpXCA7CivmnIDntYLnm67nmoQgPCBzYWlzaHV1bW9rdXRla2lcIDsKK+iRoeiQhOeKtueQg+iPjCA8IGJ1ZG91am91a3l1dWtpblwgOwor5YWo57+86aOb6KGM5qmfIDwgemVuJyd5b2t1aGlrb3VraVwgOwor5LiA6JOu5omY55SfIDwgaWNoaXJlbnRha3VzaG91XCA7CivpgJ/lirnmgKfogqXmlpkgPCBzb2trb3VzZWloaXJ5b3VcIDsKK+S4ieinkua4rOmHjyA8IHNhbmtha3Vzb2t1cnlvdVwgOwor5YuV54mp5a2m6ICFIDwgZG91YnV0c3VnYWt1c2hhXCA7CivljJblrabnianos6ogPCBrYWdha3VidXNzaGl0c3VcIDsKK+mBheWKueaAp+iCpeaWmSA8IGNoaWtvdXNlaWhpcnlvdVwgOwor5Zu957KL5Li7576p6ICFIDwga29rdXN1aXNodWdpc2hhXCA7CivnhrHljp/lrZDmoLggPCBuZXRzdWdlbnNoaWtha3VcIDsKK+WcsOizquiqv+afuyA8IGNoaXNoaXRzdWNob3VzYVwgOwor5pat5by+5oCn5L+C5pWwIDwgZGFuZGFuc2Vpa2Vpc3V1XCA7Civmra/liJfnn6/mraMgPCBzaGlyZXRzdWt5b3VzZWlcIDsKK+Wbm+WNgeS4g+WjqyA8IHNoaWp1dXNoaWNoaXNoaVwgOwor5LqM5qyh5pa556iL5byPIDwgbmlqaWhvdXRlaXNoaWtpXCA7CivljYHmnIjpnanlkb0gPCBqdXVnYXRzdWtha3VtZWlcIDsKK+W/nOeUqOW/g+eQhuWtpiA8IG91eW91c2hpbnJpZ2FrdVwgOwor5paH6LOq5b2s5b2sIDwgYnVuc2hpdHN1aGlucGluXCA7Civnsr7npZ7nlbDluLjogIUgPCBzZWlzaGluJydpam91c2hhXCA7CivntKvmsLTmmbYgPCBtdXJhc2FraXp1aXNob3VcIDsKK+S/oeiol+Wlkee0hCA8IHNoaW50YWt1a2VpeWFrdVwgOwor5Ye655Sf5bm05pyI5pelIDwgc2h1c3NlaW5lbmdhcHBpXCA7Civni6znq4vmiKbkuokgPCBkb2t1cml0c3VzZW5zb3VcIDsKK+eBq+WKm+eZuumbuyA8IGthcnlva3VoYXRzdWRlblwgOwor6YCf6YGU6YO15L6/IDwgc29rdXRhdHN1eXV1YmluXCA7CivlvIHorbflo6vkuovli5nmiYAgPCBiZW5nb3NoaWppbXVzaG9cIDsKK+Wbm+eZvuWbm+eXhSA8IHNoaWh5YWt1c2hpYnlvdVwgOwor5YuV6Kme54q25ZCN6KmeIDwgZG91c2hpam91bWVpc2hpXCA7CivlhYPluLPmrovpq5ggPCBtb3RvY2hvdXphbmRha2FcIDsKK+iHqueUseijgemHj+aoqSA8IGppeXV1c2FpcnlvdWtlblwgOwor5Lit5aSu6ZuG5qip5YyWIDwgY2h1dW91c2h1dWtlbmthXCA7CivnhKHliKnmga/oqLzliLggPCBtdXJpc29rdXNob3VrZW5cIDsKK+aKveixoee+juihkyA8IGNodXVzaG91YmlqdXRzdVwgOwor54mp6LOq5paH5piOIDwgYnVzc2hpdHN1YnVubWVpXCA7CivotoXniannkIblraYgPCBjaG91YnV0c3VyaWdha3VcIDsKK+S7gee+qeekvOaZuuS/oSA8IGppbmdpcmVpY2hpc2hpblwgOwor5pu05bm05pyf6Zqc5a6zIDwga291bmVua2lzaG91Z2FpXCA7Civlm73oqp7lr6norbDkvJogPCBrb2t1Z29zaGluZ2lrYWlcIDsKK+WcsOaWueijgeWIpOaJgCA8IGNoaWhvdXNhaWJhbnNob1wgOwor6aOf57On5LiN6LazIDwgc2hva3VyeW91YnVzb2t1XCA7CivlhazlhbHmlr3oqK0gPCBrb3VreW91c2hpc2V0c3VcIDsKK+iHquWLleaUueacreapnyA8IGppZG91a2Fpc2F0c3VraVwgOwor5Y2X5qW15p2h57SEIDwgbmFua3lva3Vqb3V5YWt1XCA7CivmnKrlsLHlrablhZDnq6UgPCBtaXNodXVnYWt1amlkb3VcIDsKK+WFteWKm+WJiua4myA8IGhlaXJ5b2t1c2FrdWdlblwgOwor5Y+W57eg5b25IDwgdG9yaXNoaW1hcml5YWt1XCA7Civlhazogbfov73mlL4gPCBrb3VzaG9rdXRzdWlob3VcIDsKK+Wtpuihk+Wbo+S9kyA8IGdha3VqdXRzdWRhbnRhaVwgOwor5a6f5pmC6ZaT5Yem55CGIDwgaml0c3VqaWthbnNob3JpXCA7CivlhbHnlJ/nlJ/niakgPCBreW91c2Vpc2VpYnV0c3VcIDsKK+iiq+WtkOakjeeJqSA8IGhpc2hpc2hva3VidXRzdVwgOwor5pyJ55Wc6L6y5qWtIDwgeXV1Y2hpa3Vub3VneW91XCA7Civlr4TnlJ/mpI3niakgPCBraXNlaXNob2t1YnV0c3VcIDsKK+mgkOmHkea6luWCmeeOhyA8IHlva2luanVuYmlyaXRzdVwgOwor5aSp5L2T5pyb6YGg6Y+hIDwgdGVudGFpYm91ZW5reW91XCA7CivnpL7kvJroq7jnp5HlraYgPCBzaGFrYWlzaG9rYWdha3VcIDsKK+atpuS+oOWwj+iqrCA8IGJ1a3lvdXNob3VzZXRzdVwgOwor5pyo6LOq57mK57atIDwgbW9rdXNoaXRzdXNlbicnaVwgOwor55u06YCa5YiX6LuKIDwgY2hva3V0c3V1cmVzc2hhXCA7Civou6Lnva7ooYzliJcgPCB0ZW5jaGlneW91cmV0c3VcIDsKK+azleW+i+S6i+WLmeaJgCA8IGhvdXJpdHN1amltdXNob1wgOwor5Ye65YuV5ZG95LukIDwgc2h1dHN1ZG91bWVpcmVpXCA7CivoiIzlhYjkuInlr7ggPCBzaGl0YXNha2lzYW56dW5cIDsKK+Wkp+ihhumjn+WggiA8IHRhaXNodXVzaG9rdWRvdVwgOwor5a6f5Yip5Li7576p6ICFIDwgaml0c3VyaXNodWdpc2hhXCA7CivlhoXplqPplqPlg5ogPCBuYWlrYWt1a2FrdXJ5b3VcIDsKK+acqueiuuiqjeaDheWgsSA8IG1pa2FrdW5pbmpvdWhvdVwgOwor6ICB5Lq65oCn55e05ZGGIDwgcm91amluc2VpY2hpaG91XCA7CivlnKjlpJbnoJTnqbblk6EgPCB6YWlnYWlrZW5reXV1aW5cIDsKK+S6uuWPo+eIhueZuiA8IGppbmtvdWJha3VoYXRzdVwgOwor5a6i6Kaz5Li7576p6ICFIDwga3lha2thbnNodWdpc2hhXCA7CivniYflj6PpsK8gPCBrYXRha3VjaGlpd2FzaGlcIDsKK+Wcp+e4ruWKueeOhyA8IGFzc2h1a3Vrb3VyaXRzdVwgOwor5Zu956uL6YqA6KGMIDwga29rdXJpdHN1Z2lua291XCA7CivkuIDnl4Xmga/ngb0gPCBpY2hpYnlvdXNva3VzYWlcIDsKK+mBuOaJi+aoqeWkp+S8miA8IHNlbnNodWtlbnRhaWthaVwgOwor5q2j6YeR5Y+W5byVIDwgc2hvdWtpbnRvcmloaWtpXCA7CivmtYHpgJrpnanlkb0gPCByeXV1dHN1dWtha3VtZWlcIDsKK+iKuOihk+S9nOWTgSA8IGdlaWp1dHN1c2FrdWhpblwgOwor5LiL57Sa6KOB5Yik5omAIDwga2FreXV1c2FpYmFuc2hvXCA7CivpgJPpmY3lpInlnKflmaggPCB0ZWlrb3VoZW5hdHN1a2lcIDsKK+mZkOeVjOmhleW+rumPoSA8IGdlbmthaWtlbmJpa3lvdVwgOwor5paw6IiI5a6X5pWZIDwgc2hpbmtvdXNodXVreW91XCA7Civnn6XorZjlt6XlraYgPCBjaGlzaGlraWtvdWdha3VcIDsKK+S9k+izquaUueWWhCA8IHRhaXNoaXRzdWthaXplblwgOwor54mH5YG06YCa6KGMIDwga2F0YWdhd2F0c3V1a291XCA7CivljZfmpbXlpKfpmbggPCBuYW5reW9rdXRhaXJpa3VcIDsKK+iJtueskeWwj+ipsSA8IGVuc2hvdWtvYmFuYXNoaVwgOwor6KaB5pKD5oim6ZeY5qmfIDwgeW91Z2VraXNlbnRvdWtpXCA7CivllYbmpa3nvo7ooZMgPCBzaG91Z3lvdWJpanV0c3VcIDsKK+elnuiJsuiHquiLpSA8IHNoaW5zaG9rdWppamFrdVwgOwor5rC06Zqb5L2c5oimIDwgbWl6dWdpd2FzYWt1c2VuXCA7CivkuI3lhazlubPnq7bkuokgPCBmdWtvdWhlaWt5b3Vzb3VcIDsKK+eJqeeahOiovOaLoCA8IGJ1dHN1dGVraXNob3Vrb1wgOwor5YWs6KqN5Lya6KiI5aOrIDwga291bmlua2Fpa2Vpc2hpXCA7Civmk43mpa3nn63nuK4gPCBzb3VneW91dGFuc2h1a3VcIDsKK+S4jeWAkue/gSA8IG9raWFnYXJpa29ib3NoaVwgOwor5YaF6IKh6IaP6JasIDwgdWNoaW1hdGFnb3V5YWt1XCA7Civniq/ooYzlo7DmmI7mlocgPCBoYW5rb3VzZWltZWlidW5cIDsKK+a2iOiyu+iAheS+oeagvCA8IHNob3VoaXNoYWtha2FrdVwgOwor6Z+z5qW96KmV6KuW5a62IDwgb25nYWt1aHlvdXJvbmthXCA7CivoibLlvanmhJ/oppogPCBzaGlraXNhaWthbmtha3VcIDsKK+WFrOWuieiqv+afu+W6gSA8IGtvdWFuY2hvdXNhY2hvdVwgOwor5LmX6ZmN6LuK5YSq5YWIIDwgam91a291c2hheXV1c2VuXCA7Civkurrlt6XnlJjlkbPmlpkgPCBqaW5rb3VrYW5taXJ5b3VcIDsKK+WcqOmDt+i7jeS6uuS8miA8IHphaWdvdWd1bmppbmthaVwgOwor6Ieq6KiY5rm/5bqm6KiIIDwgamlraXNoaXRzdWRva2VpXCA7CivlpKfntbHkuIDnkIboq5YgPCBkYWl0b3VpdHN1cmlyb25cIDsKK+i2heiDveWKm+iAhSA8IGNob3Vub3VyeW9rdXNoYVwgOwor5qSc5a6a5pWZ56eR5pu4IDwga2VudGVpa3lvdWthc2hvXCA7CivljLvlrabmioDooZPlo6sgPCBpZ2FrdWdpanV0c3VzaGlcIDsKK+Wkqeeah+iqleeUn+aXpSA8IHRlbicnbm91dGFuam91YmlcIDsKK+WkquW5s+a0i+WcsOWfnyA8IHRhaWhlaXlvdWNoaWlraVwgOwor5pyo6aOf5LiK5Lq6IDwgbW9rdWppa2lzaG91bmluXCA7Civoh6rnlLHkuLvnvqnlm73lrrYgPCBqaXl1dXNodWdpa29ra2FcIDsKK+mAo+i8ieWwj+iqrCA8IHJlbnNhaXNob3VzZXRzdVwgOwor6LOH55Sj5YaN6KmV5L6hIDwgc2hpc2Fuc2FpaHlvdWthXCA7Civmg4Xnt5LpmpzlrrPlhZAgPCBqb3VjaG9zaG91Z2FpamlcIDsKK+aXpeacrOWbveaGsuazlSA8IG5paG9ua29rdWtlbnBvdVwgOwor5Lq65rCR6Kej5pS+6LuNIDwgamlubWlua2FpaG91Z3VuXCA7CivnhKbnhrHlnLDnjYQgPCBzaG91bmV0c3VqaWdva3VcIDsKK+mqqOeyl+mshueXhyA8IGtvdHN1c29zaG91c2hvdVwgOwor5rWB6YCa6Ki85Yi4IDwgcnl1dXRzdXVzaG91a2VuXCA7Civlt67lvJXli5jlrpogPCBzYXNoaWhpa2lrYW5qb3VcIDsKK+mWi+iFueaJi+ihkyA8IGthaWZ1a3VzaHVqdXRzdVwgOwor5Y2z5pel5Ye66I23IDwgc29rdWppdHN1c2h1a2thXCA7Civntbblr77lkJvkuLvliLYgPCB6ZXR0YWlrdW5zaHVzZWlcIDsKK+agquW8j+mFjeW9kyA8IGthYnVzaGlraWhhaXRvdVwgOwor6JuN5YWJ54mp6LOqIDwga2Vpa291YnVzc2hpdHN1XCA7CivogbTopprnpZ7ntYwgPCBjaG91a2FrdXNoaW5rZWlcIDsKK+aHsuaIkuWFjeiBtyA8IGNob3VrYWltZW5zaG9rdVwgOwor6Iq46KGT5oSb5aW95a62IDwgZ2VpanV0c3VhaWtvdWthXCA7CivnorrlrprnlLPlkYogPCBrYWt1dGVpc2hpbmtva3VcIDsKK+iBt+alrei7jeS6uiA8IHNob2t1Z3lvdWd1bmppblwgOwor56eB55Sf5YWQ5Ye655SjIDwgc2hpc2VpamlzaHVzc2FuXCA7CivnlJ/lkb3ntq3mjIHoo4Xnva4gPCBzZWltZWlpamlzb3VjaGlcIDsKK+agquW8j+WFrOmWiyA8IGthYnVzaGlraWtvdWthaVwgOwor5buD5LuP5q+A6YeIIDwgaGFpYnV0c3VraXNoYWt1XCA7CivkuKHpmaLljZTorbDkvJogPCByeW91aW5reW91Z2lrYWlcIDsKK+Wwj+eUsOWOn+aPkOeBryA8IG9kYXdhcmFkam91Y2hpblwgOwor55y85bqV5Ye66KGAIDwgZ2FudGVpc2h1a2tldHN1XCA7Civkv6Hku7vmipXnpaggPCBzaGluJyduaW50b3VoeW91XCA7CivplqLpgKPos6rllY8gPCBrYW5yZW5zaGl0c3Vtb25cIDsKK+W7uueviealreiAhSA8IGtlbmNoaWt1Z3lvdXNoYVwgOwor5ZOy5a2m5Y+y6KaBIDwgdGV0c3VnYWt1c2hpeW91XCA7Civnn6XorZjnlKPmpa0gPCBjaGlzaGlraXNhbmd5b3VcIDsKK+iyqOeJqeiHquWLlei7iiA8IGthbW90c3VqaWRvdXNoYVwgOwor54mH5omL6ZaT5LuV5LqLIDwga2F0YXRlbWFzaGlnb3RvXCA7CivnpZ7ntYzlm57ot6/ntrIgPCBzaGlua2Vpa2Fpcm9tb3VcIDsKK+a1mua4q+S9nOalrSA8IHNodW5zZXRzdXNhZ3lvdVwgOwor5Y245aOy5biC5aC0IDwgb3Jvc2hpdXJpc2hpam91XCA7CivpgJrkv6HmlZnogrIgPCB0c3V1c2hpbmt5b3Vpa3VcIDsKK+WMl+aWl+S4g+aYnyA8IGhva3V0b3NoaWNoaXNlaVwgOwor5q2j5byP55m66KGoIDwgc2Vpc2hpa2loYXBweW91XCA7Civngq3ntKDljJblkIjniakgPCB0YW5zb2thZ291YnV0c3VcIDsKK+aatOWKm+mdqeWRvSA8IGJvdXJ5b2t1a2FrdW1laVwgOwor5rCX566h5pSv5ZaY5oGvIDwga2lrYW5zaGl6ZW5zb2t1XCA7CivlhbHnlKPkuK3lm70gPCBreW91c2FuY2h1dWdva3VcIDsKK+ajruael+mJhOmBkyA8IHNoaW5yaW50ZXRzdWRvdVwgOwor57WM5riI5Y2U5YqbIDwga2VpemFpa3lvdXJ5b2t1XCA7CivniannmoTmkI3lrrMgPCBidXRzdXRla2lzb25nYWlcIDsKK+S4jeiCluengSA8IGZ1c2hvdXdhdGFrdXNoaVwgOwor56m65Lit54iG5pKDIDwga3V1Y2h1dWJha3VnZWtpXCA7CivkuI3li5XnlKPmpa3ogIUgPCBmdWRvdXNhbmd5b3VzaGFcIDsKK+a1t+a0i+awl+ixoeWPsCA8IGthaXlvdWtpc2hvdWRhaVwgOwor5aSx5qWt546HIDwgc2hpdHN1Z3lvdXJpdHN1XCA7CivlubTkuK3lpLHoqIAgPCBuZW5qdXVzaGl0c3VnZW5cIDsKK+aKveWHuueJqSA8IGNodXVzaHV0c3VidXRzdVwgOwor5q2j5pa56KGM5YiXIDwgc2VpaG91Z3lvdXJldHN1XCA7Civoh6rli5Xnv7voqLPmqZ8gPCBqaWRvdWhvbicneWFrdWtpXCA7CivogIHoi6XnlLflpbMgPCByb3VueWFrdW5hbicnbnlvXCA7CivnuITmloflvI/lnJ/lmaggPCBqb3Vtb25zaGlraWRva2lcIDsKK+S/ruS6huiovOabuCA8IHNodXVyeW91c2hvdXNob1wgOwor5LiL562J5qSN54mpIDwga2F0b3VzaG9rdWJ1dHN1XCA7CivovLjlhaXoqrLlvrTph5EgPCB5dW55dXVrYWNob3VraW5cIDsKK+mhleiKseakjeeJqSA8IGtlbmthc2hva3VidXRzdVwgOwor6YeN5ZWG5Li7576p6ICFIDwganV1c2hvdXNodWdpc2hhXCA7CivlnLDlhYPorablr58gPCBqaW1vdG9rZWlzYXRzdVwgOwor5Lit5Zu95Zyw5pa5IDwgY2h1dWdva3VjaGlob3VcIDsKK+Wls+WPi+mBlCA8IG9uJyduYXRvbW9kYWNoaVwgOwor5LiJ5qCh57WC5LqGIDwgc2Fua291c2h1dXJ5b3VcIDsKK+S6uuW3peihgOa2siA8IGppbmtvdWtldHN1ZWtpXCA7CivmnInmgKfnlJ/mrpYgPCB5dXVzZWlzZWlzaG9rdVwgOwor6Yys6YeR6KGT5birIDwgcmVua2luanV0c3VzaGlcIDsKK+mBuueUo+ebuOe2mueojiA8IGlzYW5zb3V6b2t1emVpXCA7Civlr77ml6XmhJ/mg4UgPCB0YWluaWNoaWthbmpvdVwgOwor5q+Y5bus6YGu6YKj5LuPIDwgYmlydXNoYW5hYnV0c3VcIDsKK+eMpeiku+aWh+abuCA8IHdhaXNldHN1YnVuc2hvXCA7Civnmb7ml6XlkrMgPCBoeWFrdW5pY2hpemVraVwgOwor5Luu6KOF6KGM5YiXIDwga2Fzb3VneW91cmV0c3VcIDsKK+ato+W8puabsue3miA8IHNlaWdlbmt5b2t1c2VuXCA7CivmsqHlgIvmgKfnmoQgPCBib3RzdWtvc2VpdGVraVwgOwor54us56uL6YGL5YuVIDwgZG9rdXJpdHN1dW5kb3VcIDsKK+mWoueojuiHquS4u+aoqSA8IGthbnplaWppc2h1a2VuXCA7CivohLHohILnsonkubMgPCBkYXNzaGlmdW4nJ255dXVcIDsKK+WfuuacrOWRqOazouaVsCA8IGtpaG9uc2h1dWhhc3V1XCA7Civljp/lrZDlipvoiLkgPCBnZW5zaGlyeW9rdXNlblwgOwor5Zub6Lyq6aeG5YuV6LuKIDwgeW9ucmlua3Vkb3VzaGFcIDsKK+S4ieeQg+S4ieaMryA8IHNhbmt5dXVzYW5zaGluXCA7CivpnaLnmb3ljYrliIYgPCBvbW9zaGlyb2hhbmJ1blwgOwor5ZWG6Ii55aSn5a2mIDwgc2hvdXNlbmRhaWdha3VcIDsKK+WkqeWcsOS4h+eJqSA8IHRlbmNoaWJhbmJ1dHN1XCA7CivooYzliJflvI8gPCBneW91cmV0c3VzaGlraVwgOwor6ICQ54ax5ZCI6YeRIDwgdGFpbmV0c3Vnb3VraW5cIDsKK+mdmembu+awl+mYsuatoiA8IHNlaWRlbmtpYm91c2hpXCA7CivmlL/nlaXntZDlqZogPCBzZWlyeWFrdWtla2tvblwgOwor54m56auY6K2m5a+fIDwgdG9ra291a2Vpc2F0c3VcIDsKK+eFmeeqgeaOg+mZpOWkqyA8IGVudG90c3Vzb3VqaWZ1XCA7CivllYbmhaPnv5Lms5UgPCBzaG91a2Fuc2h1dWhvdVwgOwor5piG6Jmr5o6h6ZuGIDwga29uY2h1dXNhaXNodXVcIDsKK+S4reWbveaLs+azlSA8IGNodXVnb2t1a2VucG91XCA7Civnvo7ooZPnm6PnnaMgPCBiaWp1dHN1a2FudG9rdVwgOwor5Y+W5omx5Lq6IDwgdG9yaWF0c3VrYWluaW5cIDsKK+WJr+Wkp+e1semgmCA8IGZ1a3VkYWl0b3VyeW91XCA7CivkvJHmiKboqJjlv7Xml6UgPCBreXV1c2Vua2luZW5iaVwgOwor54Sm5oCn56Gr6YW4IDwgc2hvdXNlaXJ5dXVzYW5cIDsKK+Wtpuagoee+pOWItuW6piA8IGdha2tvdWd1bnNlaWRvXCA7Civlkajml4vmpa3ogIUgPCBzaHV1c2VuZ3lvdXNoYVwgOwor5Y2X5Zue5biw57eaIDwgbWluYW1pa2Fpa2lzZW5cIDsKK+aUvuWwhOe3muaKgOW4qyA8IGhvdXNoYXNlbmdpc2hpXCA7Civog47nlJ/li5XniakgPCB0YWlzZWlkb3VidXRzdVwgOwor5YWo5Zu95Lit57aZIDwgemVua29rdWNodXVrZWlcIDsKK+eJm+atqeaIpuihkyA8IGd5dXVob3Nlbmp1dHN1XCA7CivnqoHmkoPpmorlk6EgPCB0b3RzdWdla2l0YWlpblwgOwor57SE55m+5LiH5YaGIDwgeWFrdWh5YWt1bWFuZW5cIDsKK+S6uua1t+aIpuihkyA8IGppbmthaXNlbmp1dHN1XCA7Civlh7rlhaXlm70gPCBzaHV0c3VueXV1a29rdVwgOwor5a625bqt6KOB5Yik5omAIDwga2F0ZWlzYWliYW5zaG9cIDsKK+WkqeaWh+WtpueahCA8IHRlbm1vbmdha3V0ZWtpXCA7CivmgJ3moYjmipXpppYgPCBzaGlhbicnbmFnZWt1YmlcIDsKK+mVt+i3nembouaJk+iAhSA8IGNob3VreW9yaWRhc2hhXCA7Civoo4/lj6Pllrbmpa0gPCB1cmFndWNoaWVpZ3lvdVwgOwor5Lyd5aWH5bCP6KqsIDwgZGVua2lzaG91c2V0c3VcIDsKK+S4reeri+S4u+e+qSA8IGNodXVyaXRzdXNodWdpXCA7CivmiY3mp4zpoK0gPCBzYWlkenVjaGlhdGFtYVwgOwor56CU56m26LOH5paZIDwga2Vua3l1dXNoaXJ5b3VcIDsKK+WPpOeUn+eJqeWtpiA8IGtvc2VpYnV0c3VnYWt1XCA7Civmm7TnlJ/mlr3oqK0gPCBrb3VzZWlzaGlzZXRzdVwgOwor54mH6YGT5YiH56ymIDwga2F0YW1pY2hpa2lwcHVcIDsKK+aXpeacrOaomea6luaZgiA8IG5paG9uaHlvdWp1bmppXCA7CivmjqXntprliqnoqZ4gPCBzZXRzdXpva3Vqb3NoaVwgOwor6KqY5bCO6Zu75YuV5qmfIDwgeXV1ZG91ZGVuZG91a2lcIDsKK+mAhuiqrOeahCA8IGd5YWt1c2V0c3V0ZWtpXCA7Civoi7Hku4/mtbfls6EgPCBlaWZ1dHN1a2Fpa3lvdVwgOwor56iU5a6f5LiN6ImvIDwgbmVuaml0c3VmdXJ5b3VcIDsKK+W7uuWbveiomOW/teaXpSA8IGtlbmtva3VraW5lbmJpXCA7CivlhazooYbmtbTloLQgPCBrb3VzaHV1eW9rdWpvdVwgOwor5Ymv6aOf54mpIDwgZnVrdXNob2t1YnV0c3VcIDsKK+err+acq+ijhee9riA8IHRhbm1hdHN1c291Y2hpXCA7CivmloflrZfnrKblj7fljJbms5UgPCBtb2ppZnVnb3VrYWhvdVwgOwor5Lyd57Wx5Li7576p6ICFIDwgZGVudG91c2h1Z2lzaGFcIDsKK+mnkOi7iuaWmemHkSA8IGNodXVzaGFyeW91a2luXCA7Civos4fmnKzlj5blvJUgPCBzaGlob250b3JpaGlraVwgOwor5qCq5byP55u45aC0IDwga2FidXNoaWtpc291YmFcIDsKK+eZu+iomOeVquWPt+ashCA8IHRvdWtpYmFuZ291cmFuXCA7CivmranooYzogIXlhKrlhYggPCBob2tvdXNoYXl1dXNlblwgOwor54Sh5Lq65a6H5a6Z6Ii5IDwgbXVqaW4nJ3VjaHV1c2VuXCA7CivlhY3nlqvlj43lv5wgPCBtZW4nJ2VraWhhbicnbm91XCA7Civlu7roqK3kvJrnpL4gPCBrZW5zZXRzdWdhaXNoYVwgOwor5pys5pyr6aGb5YCSIDwgaG9ubWF0c3V0ZW50b3VcIDsKK+WIneW/l+iyq+W+uSA8IHNob3NoaWthbnRldHN1XCA7CivnvoXokITml6Xovp7lhbggPCByYXBvbmljaGlqaXRlblwgOwor55Sj5qWt6Z2p5ZG9IDwgc2FuZ3lvdWtha3VtZWlcIDsKK+WumuW5tOmAgOiBtyA8IHRlaW5lbnRhaXNob2t1XCA7Civlm73pmpvopqrlloQgPCBrb2t1c2Fpc2hpbnplblwgOwor5oCn5qC86Ki65patIDwgc2Vpa2FrdXNoaW5kYW5cIDsKK+WFqOi6q+ihsOW8sSA8IHplbnNoaW5zdWlqYWt1XCA7CivllY/poYzop6PmsbogPCBtb25kYWlrYWlrZXRzdVwgOwor5rip5pqW5YyW54++6LGhIDwgb25kYW5rYWdlbnNob3VcIDsKK+WTuuS5s+WLleeJqSA8IGhvbnl1dWRvdWJ1dHN1XCA7Civos4fmnKzms6jlhaUgPCBzaGlob25jaHV1bnl1dVwgOwor5L+u5qWt5bm06ZmQIDwgc2h1dWd5b3VuZW5nZW5cIDsKK+WppuS6uuWPguaUv+aoqSA8IGZ1amluc2Fuc2Vpa2VuXCA7Civoh6rnlLHmsJHkuLvlhZogPCBqaXl1dW1pbnNodXRvdVwgOwor57eR57as6KSS56ugIDwgcnlva3VqdWhvdXNob3VcIDsKK+eglOeptumhjOebriA8IGtlbmt5dXVkYWltb2t1XCA7Civnl4Xluorml6XoqowgPCBieW91c2hvdW5pc3NoaVwgOwor566X6KGT6KiI566XIDwgc2FuanV0c3VrZWlzYW5cIDsKK+W4sOWMluakjeeJqSA8IGtpa2FzaG9rdWJ1dHN1XCA7Civph5Hono3mgZDmhYwgPCBraW4nJ3l1dWt5b3Vrb3VcIDsKK+WAi+S9k+eZuueUn+irliA8IGtvdGFpaGFzc2Vpcm9uXCA7CivlpKflqIHlvrPlppnnjosgPCBkYWlpdG9rdW15b3VvdVwgOwor54m55Yil5o6q572uIDwgdG9rdWJldHN1c29jaGlcIDsKK+W8m+W8teaMr+WLlSA8IHNoaWNob3VzaGluZG91XCA7CivmiKbmiKblhaLlhaIgPCBzZW5zZW5reW91a3lvdVwgOwor5aSn6Z+T6Iiq56m65qmfIDwgdGFpa2Fua291a3V1a2lcIDsKK+ims+WFieaWveiorSA8IGthbmtvdXNoaXNldHN1XCA7CivlloTnlLflloTlpbMgPCB6ZW4nJ25hbnplbicnbnlvXCA7Civkv6HnlKjosqnlo7IgPCBzaGluJyd5b3VoYW5iYWlcIDsKK+acq+aiouelnue1jCA8IG1hc3Nob3VzaGlua2VpXCA7Civpqqjpq4Tnp7vmpI0gPCBrb3RzdXp1aWlzaG9rdVwgOwor6YGT5b6z5pWZ6IKyIDwgZG91dG9rdWt5b3Vpa3VcIDsKK+mHkeauv+eOiealvCA8IGtpbmRlbmd5b2t1cm91XCA7CivkuI3nibnlrprlpJrmlbAgPCBmdXRva3V0ZWl0YXN1dVwgOwor55Oi566q6a+wIDwgaHlvdXRhbicnbmFtYXp1XCA7CivmnbHljYrnkIMgPCBoaWdhc2hpaGFua3l1dVwgOwor5YuV54mp6LOqIDwgZG91YnV0c3VzaGl0c3VcIDsKK+eCuea7tOazqOWwhCA8IHRlbnRla2ljaHV1c2hhXCA7Civlt6Xlrabkv67lo6sgPCBrb3VnYWt1c2h1dXNoaVwgOwor6ZaA5aSW5LiN5Ye6IDwgbW9uZ2FpZnVzaHV0c3VcIDsKK+S4u+aDheS4u+e+qeiAhSA8IHNodWpvdXNodWdpc2hhXCA7Civms5Xlrprku6PnkIbkurogPCBob3V0ZWlkYWlyaW5pblwgOwor6YCa5L+h6KOF572uIDwgdHN1dXNoaW5zb3VjaGlcIDsKK+S9nOaIpuioiOeUuyA8IHNha3VzZW5rZWlrYWt1XCA7Civlhazplovlm7Pmm7jppKggPCBrb3VrYWl0b3Nob2thblwgOwor5aC05aSW5Y+W5byVIDwgam91Z2FpdG9yaWhpa2lcIDsKK+S/oeiol+mKgOihjCA8IHNoaW50YWt1Z2lua291XCA7CivkuIDmmYLplpPku6XlhoUgPCBpY2hpamlrYW4nJ2luYWlcIDsKK+Wig+eVjOiqv+aVtCA8IGt5b3VrYWljaG91c2VpXCA7CivkuLvlipvoiabpmoogPCBzaHVyeW9rdWthbnRhaVwgOwor5pWw55CG6KiA6Kqe5a2mIDwgc3V1cmlnZW5nb2dha3VcIDsKK+iBt+WgtOeSsOWigyA8IHNob2t1YmFrYW5reW91XCA7CivotorkuK3opIwgPCBldGNodXVmdW5kb3NoaVwgOwor5Ymy5byV5L6h5qC8IDwgd2FyaWJpa2lrYWtha3VcIDsKK+aVtOW9ouaJi+ihkyA8IHNlaWtlaXNodWp1dHN1XCA7CivphbjmgKfpo5/lk4EgPCBzYW5zZWlzaG9rdWhpblwgOwor5Y6f5a2Q5Yqb5a2mIDwgZ2Vuc2hpcmlraWdha3VcIDsKK+awtOS4ree/vOiIuSA8IHN1aWNodXV5b2t1c2VuXCA7CivpgbrnlKPnm7jntprkurogPCBpc2Fuc291em9rdW5pblwgOwor55m66YGU5q616ZqOIDwgaGF0dGF0c3VkYW5rYWlcIDsKK+aWueWQkeaOouefpeWZqCA8IGhvdWtvdXRhbmNoaWtpXCA7Civoq7joqqzntJvntJsgPCBzaG9zZXRzdWZ1bnB1blwgOwor5Lmz6YW46aOy5paZIDwgbnl1dXNhbicnaW5yeW91XCA7CivlgIvjgIXliKXliKUgPCBrb2tvYmV0c3ViZXRzdVwgOwor5Y+j5LiN6Kq/5rOVIDwga3VjaGlidWNob3Vob3VcIDsKK+i2heiHqueEtueahCA8IGNob3VzaGl6ZW50ZWtpXCA7CivnhrHlj6/loZHmqLnohIIgPCBuZXRzdWthc29qdXNoaVwgOwor5Zu96Ziy6ZW35a6YIDwga29rdWJvdWNob3VrYW5cIDsKK+ato+e1seS/oeaVmSA8IHNlaXRvdXNoaW5reW91XCA7CivlvLfljJblkIjlrr8gPCBreW91a2FnYXNzaHVrdVwgOwor5pyd6a6u5Lq65Y+CIDwgY2hvdXNlbicnbmluamluXCA7CivljbDljYrnuo8gPCBzaGlydXNoaWJhbnRlblwgOwor5p2f57ib5aSJ6aCFIDwgc29rdWJha3VoZW5rb3VcIDsKK+elnue1jOe1hOe5lCA8IHNoaW5rZWlzb3NoaWtpXCA7CivotoXotorplqLmlbAgPCBjaG91ZXRzdWthbnN1dVwgOwor5Yq5546H5ZCR5LiKIDwga291cml0c3Vrb3Vqb3VcIDsKK+eEoeapn+WMluWQiOeJqSA8IG11a2lrYWdvdWJ1dHN1XCA7Civku5XmlrnoqbEgPCBzaGlrYXRhYmFuYXNoaVwgOwor5aSn6ISz55qu6LOqIDwgZGFpbm91aGlzaGl0c3VcIDsKK+aUueacreS/giA8IGthaXNhdHN1Z2FrYXJpXCA7CivnlJ/kvZPlipvlraYgPCBzZWl0YWlyaWtpZ2FrdVwgOwor6YeN6KaB5paH5YyW6LKhIDwganV1eW91YnVua2F6YWlcIDsKK+WxseS4i+WFrOWckiA8IHlhbWFzaGl0YWtvdWVuXCA7CivlsYXplpPlhbzpo5/loIIgPCBpbWFrZW5zaG9rdWRvdVwgOwor5Y+j6L+w6Kmm6aiTIDwga291anV0c3VzaGlrZW5cIDsKK+S4gOaXpeeJh+aZgiA8IGljaGluaWNoaWhlbmppXCA7CivnpL7kvJrnlJ/mtLsgPCBzaGFrYWlzZWlrYXRzdVwgOwor5Ye654mI55uu6YyyIDwgc2h1cGFubW9rdXJva3VcIDsKK+WIpemAlOaUr+WHuiA8IGJldHRvc2hpc2h1dHN1XCA7CivnlLPlkYrntI3nqI4gPCBzaGlua29rdW5vdXplaVwgOwor5YmD5YiA6KemIDwga2FtaXNvcmlrYWJ1cmVcIDsKK+Wjsua4oeiovCA8IHVyaXdhdGFzaGlzaG91XCA7CivljbPmsbroo4HliKQgPCBzb2trZXRzdXNhaWJhblwgOwor55Ww5pa55bCO6Zu76IacIDwgaWhvdWRvdWRlbm1ha3VcIDsKK+eLrOeri+iHquWwiiA8IGRva3VyaXRzdWppc29uXCA7CivlqZrntITmjIfovKogPCBrb24nJ3lha3V5dWJpd2FcIDsKK+ihgOa2suWHneWbuiA8IGtldHN1ZWtpZ3lvdWtvXCA7Civlh7rlh6bpgLLpgIAgPCBzaHVzc2hvc2hpbnRhaVwgOwor5byT55+i5YWr5bmhIDwgeXVtaXlhaGFjaGltYW5cIDsKK+itpuWvn+aJi+W4syA8IGtlaXNhdHN1dGVjaG91XCA7Civogbfmpa3lqabkurogPCBzaG9rdWd5b3VmdWppblwgOwor5oyH56S65Luj5ZCN6KmeIDwgc2hpamlkYWltZWlzaGlcIDsKK+WbnuW+qeS4jeWPr+iDvSA8IGthaWZ1a3VmdWthbm91XCA7Civoh7Pnpo/ljYPlubQgPCBzaGlmdWt1c2VuJyduZW5cIDsKK+WkqeWcsOmWi+mXoiA8IHRlbmNoaWthaWJ5YWt1XCA7Civlhrflh43po5/lk4EgPCByZWl0b3VzaG9rdWhpblwgOwor6KOc6Laz6Kqs5piOIDwgaG9zb2t1c2V0c3VtZWlcIDsKK+S/oeeUqOeKtuaFiyA8IHNoaW4nJ3lvdWpvdXRhaVwgOwor57W25a++5rm/5bqmIDwgemV0dGFpc2hpdHN1ZG9cIDsKK+aYjuaYjueZveeZvSA8IG1laW1laWhha3VoYWt1XCA7Civmi53ph5HkuLvnvqnogIUgPCBoYWlraW5zaHVnaXNoYVwgOwor6LuN5YKZ57iu5bCPIDwgZ3VuYmlzaHVrdXNob3VcIDsKK+WNl+eEoemYv+W8pemZgOS7jyA8IG5hbXVhbWlkYWJ1dHN1XCA7CivmmrTlipvlm6Plk6EgPCBib3VyeW9rdWRhbicnaW5cIDsKK+Wkp+WtpuaVmeiCsiA8IGRhaWdha3VreW91aWt1XCA7CivnrKzkuInkurrnp7AgPCBkYWlzYW4nJ25pbnNob3VcIDsKK+S6uumBk+S4u+e+qeiAhSA8IGppbmRvdXNodWdpc2hhXCA7CivmsLjkuJbkuK3nq4sgPCBlaXNlaWNodXVyaXRzdVwgOwor56CU56m26aCY5Z+fIDwga2Vua3l1dXJ5b3Vpa2lcIDsKK+aVmeiCsuWLheiqniA8IGt5b3Vpa3VjaG9rdWdvXCA7CivlkYrliKXlvI8gPCBrb2t1YmV0c3VzaGlraVwgOwor57K+56We6Zqc5a6zIDwgc2Vpc2hpbnNob3VnYWlcIDsKK+Wkqeepuua1t+a/tiA8IHRlbmt1dWthaWthdHN1XCA7Civpo5/ppIznmYLms5UgPCBzaG9rdWppcnlvdWhvdVwgOwor5Lit5aSu5YiG6Zui5bivIDwgY2h1dW91YnVucml0YWlcIDsKK+a4qeW4r+S9juawl+WcpyA8IG9udGFpdGVpa2lhdHN1XCA7CivotoXlm73lrrbkuLvnvqkgPCBjaG91a29ra2FzaHVnaVwgOwor5L2c6ICF5LiN55+lIDwgc2FrdXNoYXNoaXJhenVcIDsKK+eUn+a0u+awtOa6liA8IHNlaWthdHN1c3VpanVuXCA7CivljbXnlJ/li5XniakgPCByYW5zZWlkb3VidXRzdVwgOwor562L6IKJ5Yq05YONIDwga2luJyduaWt1cm91ZG91XCA7CivljZfmlK/pgqPmtbcgPCBtaW5hbWlzaGluYWthaVwgOwor5a2m6KGT55So6KqeIDwgZ2FrdWp1dHN1eW91Z29cIDsKK+iHqueEtumjn+WTgSA8IHNoaXplbnNob2t1aGluXCA7CivllYbmpa3ntYTlkIggPCBzaG91Z3lvdWt1bWlhaVwgOwor6Kqe5b2Z5qmf6IO95paH5rOVIDwgZ29pa2lub3VidW5wb3VcIDsKK+iBt+aoqeS5seeUqCA8IHNob2trZW5yYW4nJ3lvdVwgOwor5Ly06aOf5aSn6IejIDwgYmFuc2hva3VkYWlqaW5cIDsKK+WkvumbkeeJqSA8IGt5b3V6YXRzdWJ1dHN1XCA7CivliKnlrrPplqLkv4LogIUgPCByaWdhaWthbmtlaXNoYVwgOwor6KGG6K2w5ZOh6K2w6ZW3IDwgc2h1dWdpaW5naWNob3VcIDsKK+WyoeebruWFq+ebriA8IG9rYW1laGFjaGltb2t1XCA7CivlsI7ms6LnrqHlrprmlbAgPCBkb3VoYWthbnRlaXN1dVwgOwor5pas5paw5aWH5oqcIDwgemFuc2hpbmtpYmF0c3VcIDsKK+ebtOaDheW+hOihjCA8IGNob2t1am91a2Vpa291XCA7Civnp4Hnq4vlrabmoKEgPCBzaGlyaXRzdWdha2tvdVwgOwor5Lit5pel6L6e5YW4IDwgY2h1dW5pY2hpaml0ZW5cIDsKK+S4geWtl+W9ouWumuimjyA8IHRlaWppZ2F0YWpvdWdpXCA7CivnsKHmmJPoo4HliKTmiYAgPCBrYW4nJ2lzYWliYW5zaG9cIDsKK+WIhumhnuebrumMsiA8IGJ1bnJ1aW1va3Vyb2t1XCA7CivlhoXliIbms4zohbogPCBuYWlidW5waXRzdXNlblwgOwor5Y+N5YuV5Li7576p6ICFIDwgaGFuZG91c2h1Z2lzaGFcIDsKK+a0u+i3r+mWi+aLkyA8IGthdHN1cm9rYWl0YWt1XCA7CivlubPmnb/muKzph48gPCBoZWliYW5zb2t1cnlvdVwgOwor5rqQ5rOJ5b605Y+OIDwgZ2Vuc2VuY2hvdXNodXVcIDsKK+mAmuS/oeihm+aYnyA8IHRzdXVzaGluJydlaXNlaVwgOwor5riF566X5Y+W5byVIDwgc2Vpc2FudG9yaWhpa2lcIDsKK+eJueauiuWtpue0miA8IHRva3VzaHVnYWtreXV1XCA7Civkv6HnlKjoqr/mn7sgPCBzaGluJyd5b3VjaG91c2FcIDsKK+WFiOeJqeWjsuiytyA8IHNha2ltb25vYmFpYmFpXCA7CivkuIPpm6Plhavoi6YgPCBzaGljaGluYW5oYWtrdVwgOwor6KeS6Iac56e75qSNIDwga2FrdW1ha3Vpc2hva3VcIDsKK+mfs+alveWbs+abuOmkqCA8IG9uZ2FrdXRvc2hva2FuXCA7CivmlZHmgKXnl4XpmaIgPCBreXV1a3l1dWJ5b3VpblwgOwor5o6l6Kem5oSf5p+TIDwgc2Vzc2hva3VrYW5zZW5cIDsKK+eojumHkeeUs+WRiiA8IHplaWtpbnNoaW5rb2t1XCA7Civntajmr6/niIbmkoMgPCBqdXV0YW5iYWt1Z2VraVwgOwor5LiD6Lui5YWr6LW3IDwgc2hpY2hpdGVuaGFra2lcIDsKK+S5l+eUqOiHquWLlei7iiA8IGpvdXlvdWppZG91c2hhXCA7CivmsLTpioDkuK3mr5IgPCBzdWlnaW5jaHV1ZG9rdVwgOwor6Zyy5Ye65LiN6LazIDwgcm9zaHV0c3VidXNva3VcIDsKK+W5s+S4iuWOu+WFpSA8IGh5b3Vqb3VreW9ueXV1XCA7Civlm73nq4vlhazlnJIgPCBrb2t1cml0c3Vrb3VlblwgOwor5YWs56uL5a2m5qChIDwga291cml0c3VnYWtrb3VcIDsKK+mAmuS/oeWcj+WkliA8IHRzdXVzaGlua2VuZ2FpXCA7CivntITmnZ/miYvlvaIgPCB5YWt1c29rdXRlZ2F0YVwgOwor5Y+s6ZuG5Luk54q2IDwgc2hvdXNodXVyZWlqb3VcIDsKK+Wcp+WAkueahOWkmuaVsCA8IGF0dG91dGVraXRhc3V1XCA7CivmlrDlhaXnpL7lk6EgPCBzaGluJydueXV1c2hhaW5cIDsKK+aXpeWNl+a1t+WyuCA8IG5pY2hpbmFua2FpZ2FuXCA7CivpnZ7mlL/lupzntYTnuZQgPCBoaXNlaWZ1c29zaGlraVwgOwor5rGO5pW05pWw5byPIDwgaGFuc2Vpc3V1c2hpa2lcIDsKK+iHqueUseWKtOWDjeiAhSA8IGppeXV1cm91ZG91c2hhXCA7Civlj6TnianllYbkurogPCBrb2J1dHN1c2hvdW5pblwgOwor57eR55m96ImyIDwgcnlva3VoYWt1c2hva3VcIDsKK+iGnemWouevgCA8IHNoaXRzdWthbnNldHN1XCA7CivmrablipvlubLmuIkgPCBidXJ5b2t1a2Fuc2hvdVwgOwor5YWs6KGG6YGT5b6zIDwga291c2h1dWRvdXRva3VcIDsKK+aAquWlh+Wwj+iqrCA8IGthaWtpc2hvdXNldHN1XCA7CivljZrmhJvkuLvnvqnogIUgPCBoYWt1YWlzaHVnaXNoYVwgOwor56eY5a+G5oqV56WoIDwgaGltaXRzdXRvdWh5b3VcIDsKK+Wcp+WKm+WuueWZqCA8IGF0c3VyeW9rdXlvdWtpXCA7CivmsYLlqZrluoPlkYogPCBreXV1a29ua291a29rdVwgOwor5b+D5Zug5Y+N5b+cIDwgc2hpbicnaW5oYW4nJ25vdVwgOwor5a6a5pyf5LmX6LuK5Yi4IDwgdGVpa2lqb3VzaGFrZW5cIDsKK+mbu+awl+a0l+a/r+apnyA8IGRlbmtpc2VudGFrdWtpXCA7Civpuqbol4HluL3lrZAgPCBtdWdpd2FyYWJvdXNoaVwgOwor57SN56iO55Sz5ZGKIDwgbm91emVpc2hpbmtva3VcIDsKK+WPjeWvvuensOeahCA8IGhhbnRhaXNob3V0ZWtpXCA7CivntYLmiKboqJjlv7Xml6UgPCBzaHV1c2Vua2luZW5iaVwgOwor5L2P5Y+L6YqA6KGMIDwgc3VtaXRvbW9naW5rb3VcIDsKK+WwsealreS6uuWPoyA8IHNodXVneW91amlua291XCA7Civlhajli53lhKrli50gPCB6ZW5zaG91eXV1c2hvdVwgOwor5bu66Kit5aSn6IejIDwga2Vuc2V0c3VkYWlqaW5cIDsKK+mdnuiJr+W/g+eahCA8IGhpcnlvdXNoaW50ZWtpXCA7Civntbblr77lv4XopoEgPCB6ZXR0YWloaXRzdXlvdVwgOwor56S+5Lya5Li7576p6ICFIDwgc2hha2Fpc2h1Z2lzaGFcIDsKK+ibuOi2s+mFjee3miA8IHRha29hc2hpaGFpc2VuXCA7Civlt6Xmpa3lpKflraYgPCBrb3VneW91ZGFpZ2FrdVwgOwor6YeR5aOx5LiH5YaGIDwga2luJydpY2hpbWFuJydlblwgOwor5peF5a6i5YiX6LuKIDwgcnlva3lha3VyZXNzaGFcIDsKK+Wwj+Wei+iHquWLlei7iiA8IGtvZ2F0YWppZG91c2hhXCA7Civnq4vkvJrmvJToqqwgPCB0YWNoaWFpZW56ZXRzdVwgOwor5aWo5a2m6LOH6YeRIDwgc2hvdWdha3VzaGlraW5cIDsKK+awkeS6i+iotOion+azlSA8IG1pbmppc29zaG91aG91XCA7Civnj77ph5Hlj47lhaUgPCBnZW5raW5zaHV1bnl1dVwgOwor56ys5LqM6YeP5a2Q5YyWIDwgZGFpbmlyeW91c2hpa2FcIDsKK+S6jOWOn+WtkOWIhuWtkCA8IG5pZ2Vuc2hpYnVuc2hpXCA7CivlrabooZPkvJrorbAgPCBnYWt1anV0c3VrYWlnaVwgOwor5rOV5b6L5ZWP6aGMIDwgaG91cml0c3Vtb25kYWlcIDsKK+ebtOmAmumbu+ipsSA8IGNob2t1dHN1dWRlbndhXCA7Civlj7DmiYDpgZPlhbcgPCBkYWlkb2tvcm9kb3VndVwgOwor6Zu75rqQ5L6b57WmIDwgZGVuZ2Vua3lvdWt5dXVcIDsKK+W4uOS7u+aMh+aPruiAhSA8IGpvdW5pbnNoaWtpc2hhXCA7CivmsLTpmbjkuKHnlKggPCBzdWlyaWt1cnlvdXlvdVwgOwor6YCa5L+h5omL5q61IDwgdHN1dXNoaW5zaHVkYW5cIDsKK+S4i+iri+S8muekviA8IHNoaXRhdWtlZ2Fpc2hhXCA7CivnrKzkuIDkurrnp7AgPCBkYWlpY2hpbmluc2hvdVwgOwor5a2m5q2056S+5LyaIDwgZ2FrdXJla2lzaGFrYWlcIDsKK+i+suS6i+ippumok+WgtCA8IG5vdWppc2hpa2Vuam91XCA7Civmg4XloLHljJbnpL7kvJogPCBqb3Vob3VrYXNoYWthaVwgOwor5ryU5aWP5puy55uuIDwgZW5zb3VreW9rdW1va3VcIDsKK+aAneaDs+itpuWvnyA8IHNoaXNvdWtlaXNhdHN1XCA7Civlhaznm4ros6rlsYsgPCBrb3Vla2lzaGljaGl5YVwgOwor5o6l57aa5Y+jIDwgc2V0c3V6b2t1Z3VjaGlcIDsKK+WBleiAgeWQjOeptCA8IGthaXJvdWRvdWtldHN1XCA7CivkuLvoprPkuLvnvqnogIUgPCBzaHVrYW5zaHVnaXNoYVwgOwor54Sh5pWZ5Lya5Li7576pIDwgbXVreW91a2Fpc2h1Z2lcIDsKK+exs+S+oeWvqeitsOS8miA8IGJlaWthc2hpbmdpa2FpXCA7CivlgaXlurfpo5/lk4EgPCBrZW5rb3VzaG9rdWhpblwgOwor5oq96LGh5ZCN6KmeIDwgY2h1dXNob3VtZWlzaGlcIDsKK+Wwj+S5l+S7j+aVmSA8IHNob3Vqb3VidWtreW91XCA7CivmmYLplpPlpJblirTlg40gPCBqaWthbmdhaXJvdWRvdVwgOwor5ZCI55uu55qE5oCnIDwgZ291bW9rdXRla2lzZWlcIDsKK+mbu+WKm+S8muekviA8IGRlbnJ5b2t1Z2Fpc2hhXCA7Civnmb7np5Hlhajmm7jmtL4gPCBoeWFra2F6ZW5zaG9oYVwgOwor5LqM55m+5LqM5Y2B5pelIDwgbmloeWFrdWhhdHN1a2FcIDsKK+a1t+a0i+mWi+eZuiA8IGthaXlvdWthaWhhdHN1XCA7CivntLDog57liIboo4IgPCBzYWlib3VidW5yZXRzdVwgOwor5oCl6KGM5paZ6YeRIDwga3l1dWtvdXJ5b3VraW5cIDsKK+S4geS4geeZuuatoiA8IGNob3VjaG91aGFzc2hpXCA7CivmlZnogbfoqrLnqIsgPCBreW91c2hva3VrYXRlaVwgOwor5LqM6YeN5L6h5qC85Yi2IDwgbmlqdXVrYWtha3VzZWlcIDsKK+WIkeS6i+iotOion+azlSA8IGtlaWppc29zaG91aG91XCA7Civlh53nnYDlipsgPCBneW91Y2hha3VyeW9rdVwgOwor5oeQ5YuY5a6aIDwgZnV0b2tvcm9rYW5qb3VcIDsKK+WHuueJiOalreiAhSA8IHNodXBwYW5neW91c2hhXCA7CivlsLHogbfpgYvli5UgPCBzaHV1c2hva3V1bmRvdVwgOwor55Wl5aWq6KGM54K6IDwgcnlha3VkYXRzdWtvdWlcIDsKK+eQhumdnuabsuebtCA8IHJpaGlreW9rdWNob2t1XCA7Civmj5Dlh7rniakgPCB0ZWlzaHV0c3VidXRzdVwgOwor5Yil5YaK5LuY6YyyIDwgYmVzc2F0c3VmdXJva3VcIDsKK+S4ieaoqeWIhueriyA8IHNhbmtlbmJ1bnJpdHN1XCA7Civlh7rmnK3lj6MgPCBzaHVzc2F0c3VndWNoaVwgOwor6LKp5aOy5Luj55CG5bqXIDwgaGFuYmFpZGFpcml0ZW5cIDsKK+WFseWQjOeglOeptiA8IGt5b3Vkb3VrZW5reXV1XCA7CivmlrDliIrntLnku4sgPCBzaGlua2Fuc2hvdWthaVwgOwor5qOf5Ymy6ZW35bGLIDwgbXVuZXdhcmluYWdheWFcIDsKK+S/ruWlveadoee0hCA8IHNodXVrb3Vqb3V5YWt1XCA7CivlhqDnirbli5XohIggPCBrYW5qb3Vkb3VteWFrdVwgOwor56m656m65ryg5rygIDwga3V1a3V1YmFrdWJha3VcIDsKK+aCquaAp+iyp+ihgCA8IGFrdXNlaWhpbmtldHN1XCA7CivkvJHmiKbljZTlrpogPCBreXV1c2Vua3lvdXRlaVwgOwor56We57WM6KGw5byxIDwgc2hpbmtlaXN1aWpha3VcIDsKK+WbnuaKmOagvOWtkCA8IGthaXNldHN1a291c2hpXCA7CivlhYjmsbrllY/poYwgPCBzZW5rZXRzdW1vbmRhaVwgOwor5p2x5Lqc6Ku45rCR5pePIDwgdG91YXNob21pbnpva3VcIDsKK+WwsealreaXpeaVsCA8IHNodXVneW91bmlzc3V1XCA7Civlrp/pqJPli5XniakgPCBqaWtrZW5kb3VidXRzdVwgOwor5Y2Y6JGJ6aOb6KGM5qmfIDwgdGFuJyd5b3VoaWtvdWtpXCA7Civlv6DlkJvmhJvlm70gPCBjaHV1a3VuJydhaWtva3VcIDsKK+axguS6uuW6g+WRiiA8IGt5dXVqaW5rb3Vrb2t1XCA7Civni6znq4vni6zmrakgPCBkb2t1cml0c3Vkb3Bwb1wgOwor5pyJ5a6z6aOf5ZOBIDwgeXV1Z2Fpc2hva3VoaW5cIDsKK+WbveS8muitsOS6i+mMsiA8IGtva2thaWdpamlyb2t1XCA7CivpurvolqzkuK3mr5IgPCBtYXlha3VjaHV1ZG9rdVwgOwor6YeR5bGe5bel5qWtIDwga2luem9rdWtvdWd5b3VcIDsKK+WNuOWjsueJqeS+oSA8IG9yb3NoaXVyaWJ1a2thXCA7CivlhbHlkIzlh7ros4cgPCBreW91ZG91c2h1c3NoaVwgOwor54ut6LuM6YmE6YGTIDwga3lvdWtpdGV0c3Vkb3VcIDsKK+WVhualreaJi+W9oiA8IHNob3VneW91dGVnYXRhXCA7Civpg7Xkvr/phY3pgZQgPCB5dXViaW5oYWl0YXRzdVwgOwor5riv5rm+5b2T5bGAIDwga291d2FudG91a3lva3VcIDsKK+WVhualremKgOihjCA8IHNob3VneW91Z2lua291XCA7CivnnIHnlaXoqJjlj7cgPCBzaG91cnlha3VraWdvdVwgOwor5aSp5pel55OmIDwgdGVuaml0c3VnYXdhcmFcIDsKK+S4remWk+WgseWRiiA8IGNodXVrYW5ob3Vrb2t1XCA7CivlpKLnianoqp4gPCB5dW1lbW9ub2dhdGFyaVwgOwor5Lit5b+D5oCd5oOzIDwgY2h1dXNoaW5zaGlzb3VcIDsKK+S6lOaciOS6uuW9oiA8IGdvZ2F0c3VuaW5neW91XCA7CivkvJ3mib/mloflraYgPCBkZW5zaG91YnVuZ2FrdVwgOwor5pS/5bqc5L+d6Ki85YK1IDwgc2VpZnVob3Nob3VzYWlcIDsKK+i7n+S9k+WLleeJqSA8IG5hbnRhaWRvdWJ1dHN1XCA7CivkuIDmmJTliY0gPCBoaXRvbXVrYXNoaW1hZVwgOwor5by35Yi25Y+O5a65IDwga3lvdXNlaXNodXV5b3VcIDsKK+S+v+S5l+S4u+e+qeiAhSA8IGJpbmpvdXNodWdpc2hhXCA7CivkuIDpmb3mnaXohbkgPCBpY2hpeW91cmFpZnVrdVwgOwor5ryB5qWt5Y2U5a6aIDwgZ3lvZ3lvdWt5b3V0ZWlcIDsKK+awtOeUn+WLleeJqSA8IHN1aXNlaWRvdWJ1dHN1XCA7CivmpZTlvaLmloflrZcgPCBrdXNhYmlnYXRhbW9qaVwgOwor55m+5Y2S6ZW3IDwgaHlha3Vzb3RzdWNob3VcIDsKK+S/oeeUqOe1hOWQiCA8IHNoaW4nJ3lvdWt1bWlhaVwgOwor56CU56m25aCx5ZGKIDwga2Vua3l1dWhvdWtva3VcIDsKK+mAhuihjOWIlyA8IGd5YWt1Z3lvdXJldHN1XCA7CivkuozlpKfmlL/lhZrliLYgPCBuaWRhaXNlaXRvdXNlaVwgOwor5rC05aSp5b235b2/IDwgc3VpdGVuaG91ZnV0c3VcIDsKK+S9j+WuheeUo+alrSA8IGp1dXRha3VzYW5neW91XCA7Civms6HmsqvkvJrnpL4gPCBob3VtYXRzdWdhaXNoYVwgOwor54Sh5Yip5oGv5YWs5YK1IDwgbXVyaXNva3Vrb3VzYWlcIDsKK+irh+irlumiqOeZuiA8IGRhbnJvbmZ1dWhhdHN1XCA7CivotrPntKDmgKfljp/nkIYgPCBhc2hpc3Vqb3VnZW5yaVwgOwor6LOH5pys5Li7576p6ICFIDwgc2hpaG9uc2h1Z2lzaGFcIDsKK+WFiOeZuuaKleaJiyA8IHNlbnBhdHN1dG91c2h1XCA7CivmjqjnkIblsI/oqqwgPCBzdWlyaXNob3VzZXRzdVwgOwor57Sz5aOr5Y2U5a6aIDwgc2hpbnNoaWt5b3V0ZWlcIDsKK+Wkp+WQjeWxi+aVtyA8IGRhaW15b3V5YXNoaWtpXCA7CivnibnnlbDkvZPos6ogPCB0b2t1aXRhaXNoaXRzdVwgOwor5Lit6ZaT5pC+5Y+WIDwgY2h1dWthbnNha3VzaHVcIDsKK+aWh+WMluWcsOeQhuWtpiA8IGJ1bmthY2hpcmlnYWt1XCA7CivljZToqr/kvZzmpa0gPCBreW91Y2hvdXNhZ3lvdVwgOwor5oyH5Zyn55mC5rOVIDwgc2hpYXRzdXJ5b3Vob3VcIDsKK+WFrOiqjeWAmeijnOiAhSA8IGtvdW5pbmtvdWhvc2hhXCA7Civlt6Xmpa3mioDooZMgPCBrb3VneW91Z2lqdXRzdVwgOwor57eP5ZCI6Iq46KGTIDwgc291Z291Z2VpanV0c3VcIDsKK+aXreaXpeeroCA8IGt5b2t1aml0c3VzaG91XCA7CivkuJbnlYzpgbjmiYvmqKkgPCBzZWthaXNlbnNodWtlblwgOwor5Lit55Sj6ZqO57SaIDwgY2h1dXNhbmthaWt5dXVcIDsKK+WNl+WNgeWtl+aYnyA8IG1pbmFtaWp1dWppc2VpXCA7CivmlrDnn7PlmajmmYLku6MgPCBzaGluc2Vra2lqaWRhaVwgOwor5b+D6ZyK5omL6KGTIDwgc2hpbnJlaXRlanV0c3VcIDsKK+aIkOmVt+eUo+alrSA8IHNlaWNob3VzYW5neW91XCA7Civlj5fpqJPlj4LogIPmm7ggPCBqdWtlbnNhbmtvdXNob1wgOwor5Zu96Zqb5Y+O5pSvIDwga29rdXNhaXNodXVzaGlcIDsKK+mdmeatoueUu+aUvumAgSA8IHNlaXNoaWdhaG91c291XCA7CivkuIrpmbjkvZzmiKYgPCBqb3VyaWt1c2FrdXNlblwgOwor5YuV5Yqb6LOH5rqQIDwgZG91cnlva3VzaGlnZW5cIDsKK+W/heimgeadoeS7tiA8IGhpdHN1eW91am91a2VuXCA7CivlsJHlubTmhJ/ljJbpmaIgPCBzaG91bmVua2Fua2FpblwgOwor5Lit5rWB5oSP6K2YIDwgY2h1dXJ5dXVpc2hpa2lcIDsKK+mVt+i3nemboui8uOmAgSA8IGNob3VreW9yaXl1c291XCA7Civlho3luLDku6PlkI3oqZ4gPCBzYWlraWRhaW1laXNoaVwgOwor5Ye65ryB5Yy65Z+fIDwgc2h1dHN1Z3lva3Vpa2lcIDsKK+iyoeW9ouiyr+iThCA8IHphaWtlaWNob2NoaWt1XCA7CivogbfkurrmsJfos6ogPCBzaG9rdW5pbmthdGFnaVwgOwor5o6n6Ki06KOB5Yik5omAIDwga291c29oYWliYW5zaG9cIDsKK+WNmOS9jeihjOWIlyA8IHRhbicnaWd5b3VyZXRzdVwgOwor5paH5YyW5Yqf5Yq06ICFIDwgYnVua2Frb3Vyb3VzaGFcIDsKK+WbvemAo+aGsueroCA8IGtva3VyZW5rZW5zaG91XCA7CivmsLTlhYjmoYjlhoUgPCBtaXp1c2FraWFuJyduYWlcIDsKK+ecn+epuuaOg+mZpOapnyA8IHNoaW5rdXVzb3VqaWtpXCA7Civlj47lrrnoqK3lgpkgPCBzaHV1eW91c2V0c3ViaVwgOwor5rex5rW35ryB5qWtIDwgc2hpbmthaWd5b2d5b3VcIDsKK+S6uuW9oua1hOeRoOeSgyA8IG5pbmd5b3Vqb3VydXJpXCA7Civnm7TlvoDpgoHpgLIgPCBjaG9rdW91bWFpc2hpblwgOwor5aSp5L2T5Yqb5a2mIDwgdGVudGFpcmlraWdha3VcIDsKK+aYlOipsSA8IG11a2FzaGliYW5hc2hpXCA7CivmlL/msrvoqZXoq5blrrYgPCBzZWlqaWh5b3Vyb25rYVwgOwor5Lyd5om/5Y+Z5LqL6KmpIDwgZGVuc2hvdWpvamlzaGlcIDsKK+acieimlueVjOmjm+ihjCA8IHl1dXNoaWthaWhpa291XCA7Civlubzlj4vpgZQgPCBvc2FuYXRvbW9kYWNoaVwgOwor55yf56m66Zu755CDIDwgc2hpbmt1dWRlbmt5dXVcIDsKK+mZjeS4ieS4luWmmeeOiyA8IGdvdXphbnplbXlvdW91XCA7CivnrYnpq5jnt5rlnLDlm7MgPCB0b3Vrb3VzZW5jaGl6dVwgOwor5LiK5bGk5bu656+JIDwgam91c291a2VuY2hpa3VcIDsKK+W9ueiBt+aJi+W9kyA8IHlha3VzaG9rdXRlYXRlXCA7Civpq5jlnKfpm7vmtYEgPCBrb3VhdHN1ZGVucnl1dVwgOwor5bC76Lu95aWzIDwgc2hpcmlnYXJ1b24nJ25hXCA7CivkuqXlubQgPCBpbm9zaGlzaGlkb3NoaVwgOwor55m96Ymi5be7IDwgc2hpcm9oYWNoaW1ha2lcIDsKK+S6pOmAmumBk+W+syA8IGtvdXRzdXVkb3V0b2t1XCA7CivmsLTmupbmuKzph48gPCBzdWlqdW5zb2t1cnlvdVwgOwor6KO96YCg5bm05pyI5pelIDwgc2Vpem91bmVuZ2FwcGlcIDsKK+W8geiovOazleeahCA8IGJlbnNob3Vob3V0ZWtpXCA7Civmnb7ojLjlvqHpo68gPCBtYXRzdXRha2Vnb2hhblwgOwor6Zai56iO6Zqc5aOBIDwga2FuemVpc2hvdWhla2lcIDsKK+e1seaLrOmDqOmVtyA8IHRvdWthdHN1YnVjaG91XCA7CivlnLDmlrnkuqTku5jnqI4gPCBjaGlob3Vrb3VmdXplaVwgOwor6JaE57Sr6ImyIDwgdXN1bXVyYXNha2lpcm9cIDsKK+aQjeWkseijnOWhqyA8IHNvbnNoaXRzdWhvdGVuXCA7Civml6XmnKzoqp7mlZnmnKwgPCBuaWhvbmdva3lvdWhvblwgOwor5Ye65aGB546HIDwgc2h1dHN1cnVpcml0c3VcIDsKK+S6i+S6i+eJqeeJqSA8IGppamlidXRzdWJ1dHN1XCA7CivpgKPntprlhpnnnJ8gPCByZW56b2t1c2hhc2hpblwgOwor5L+Y6Jmc5Y+O5a655omAIDwgZnVyeW9zaHV1eW91am9cIDsKK+epuuawl+Wcp+e4ruapnyA8IGt1dWtpYXNzaHVrdWtpXCA7Civlm5vnmb7kvZnlt54gPCBzaGloeWFrdXlvc2h1dVwgOwor5Zu96YCj6KiY5b+15pelIDwga29rdXJlbmtpbmVuYmlcIDsKK+W/g+eti+ail+WhniA8IHNoaW5raW5rb3Vzb2t1XCA7CivlrpfmlZnoo4HliKQgPCBzaHV1a3lvdXNhaWJhblwgOwor6Zu75L+h5p+xIDwgZGVuc2hpbmJhc2hpcmFcIDsKK+WGmeecn+efs+eJiCA8IHNoYXNoaW5zZWtpYmFuXCA7CivpmqDoirHmpI3niakgPCBpbmthc2hva3VidXRzdVwgOwor54Sh6KiY5ZCN5oqV56WoIDwgbXVraW1laXRvdWh5b3VcIDsKK+W+rueUn+eJqeWtpiA8IGJpc2VpYnV0c3VnYWt1XCA7CivmiKbnlaXnqbrou40gPCBzZW5yeWFrdWt1dWd1blwgOwor5oGt6LOA5paw5bm0IDwga3lvdWdhc2hpbicnbmVuXCA7Civlm73pmpvljZTlrpogPCBrb2t1c2Fpa3lvdXRlaVwgOwor6Ieq54S25Li7576p6ICFIDwgc2hpemVuc2h1Z2lzaGFcIDsKK+iJsuWNs+aYr+epuiA8IHNoaWtpc29rdXpla3V1XCA7CivpoK3lr5LotrPnhrEgPCB6dWthbnNva3VuZXRzdVwgOwor5Yy65qSc5a+f5bqBIDwga3VrZW5zYXRzdWNob3VcIDsKK+aguOmYsuihm+WKmyA8IGtha3Vib3VlaXJ5b2t1XCA7Civlrozlhajnh4PnhLwgPCBrYW56ZW4nJ25lbnNob3VcIDsKK+mHjemHj+aEn+immiA8IGp1dXJ5b3VrYW5rYWt1XCA7Civpm4zpm4TpkZHliKUgPCBzaGl5dXVrYW5iZXRzdVwgOwor566h5Yy65rCX6LGh5Y+wIDwga2Fua3VraXNob3VkYWlcIDsKK+WOn+eUn+WLleeJqSA8IGdlbnNlaWRvdWJ1dHN1XCA7Civnm67nmoTmhI/orZggPCBtb2t1dGVraWlzaGlraVwgOwor5rOV5a6a5rqW5YKZ6YeRIDwgaG91dGVpanVuYmlraW5cIDsKK+a1t+eUn+WLleeJqSA8IGthaXNlaWRvdWJ1dHN1XCA7CivmlLvmkoPnsr7npZ4gPCBrb3VnZWtpc2Vpc2hpblwgOwor5L2c5oiQ5oqA6KGTIDwgc2FrdXNlaWdpanV0c3VcIDsKK+mHkemKreS/oeiolyA8IGtpbnNlbnNoaW50YWt1XCA7CivlkLjlj47lkIjkvbUgPCBreXV1c2h1dWdhcHBlaVwgOwor5o+b6aqo5aWq6IOOIDwga2Fua290c3VkYXR0YWlcIDsKK+ehrOizqumZtuWZqCA8IGtvdXNoaXRzdXRvdWtpXCA7Civlr53lj7Dmlpnph5EgPCBzaGluZGFpcnlvdWtpblwgOwor6LO85YWl5rOo5paHIDwga291bnl1dWNodXVtb25cIDsKK+eEpuWcn+aIpuihkyA8IHNob3Vkb3Nlbmp1dHN1XCA7CivmnInogbfmlYXlrp8gPCB5dXVzb2t1a29qaXRzdVwgOwor6Kmx6KmxIDwgaGFuYXNoaWJhbmFzaGlcIDsKK+eEoeWEn+S/oeiolyA8IG11c2hvdXNoaW50YWt1XCA7CivmtojosrvnlJ/mtLsgPCBzaG91aGlzZWlrYXRzdVwgOwor5a6k5YaF6YGK5oivIDwgc2hpdHN1bmFpeXV1Z2lcIDsKK+Wul+aVmeWbo+S9kyA8IHNodXVreW91ZGFudGFpXCA7CivpgLLooYznirbms4EgPCBzaGlua291am91a3lvdVwgOwor6auY562J5YuV54mpIDwga291dG91ZG91YnV0c3VcIDsKK+S4gOiGs+mjr+WxiyA8IGljaGl6ZW5tZXNoaXlhXCA7CivmmYLku6PlsI/oqqwgPCBqaWRhaXNob3VzZXRzdVwgOwor5YaF6Ki86KmxIDwgbmFpc2hvdWJhbmFzaGlcIDsKK+a1t+a0i+aAp+awl+WAmSA8IGthaXlvdXNlaWtpa291XCA7Civmm7Lnt5rluqfmqJkgPCBreW9rdXNlbnphaHlvdVwgOwor5b2T6Kmy5Lq654mpIDwgdG91Z2FpamluYnV0c3VcIDsKK+WkluiyqOa6luWCmemrmCA8IGdhaWthanVuYmlkYWthXCA7CivopoHmsYLpgIHkv6EgPCB5b3VreXV1c291c2hpblwgOwor55m+5Lq65LiA6aaWIDwgaHlha3VuaW4nJ2lzc2h1XCA7Civpm4blm6PmpJzoqLogPCBzaHV1ZGFua2Vuc2hpblwgOwor5peF6KGM5Luj55CG5bqXIDwgcnlva291ZGFpcml0ZW5cIDsKK+WuieWvp+enqeW6jyA8IGFuJyduZWljaGl0c3Vqb1wgOwor5LiL5ZSHIDwgc2hpdGFrdWNoaWJpcnVcIDsKK+altealvemzpeiKsSA8IGdva3VyYWt1Y2hvdWthXCA7CivkuK3otorntJvkuokgPCBjaHV1ZXRzdWZ1bnNvdVwgOwor5LiA5ous6LO85YWlIDwgaWtrYXRzdWtvdW55dXVcIDsKK+awkeaXj+iHquaxuiA8IG1pbnpva3VqaWtldHN1XCA7CivlgLbmoqjkvL3nvoXntIvntIsgPCBrdXJpa2FyYW1vbm1vblwgOwor5q2j6Z2i5pS75pKDIDwgc2hvdW1lbmtvdWdla2lcIDsKK+aVmeiCsueUo+alrSA8IGt5b3Vpa3VzYW5neW91XCA7Civnqbroqr/oqK3lgpkgPCBrdXVjaG91c2V0c3ViaVwgOwor5Y2Y54us5YaF6ZajIDwgdGFuZG9rdW5haWtha3VcIDsKK+e3keeOieefsyA8IHJ5b2t1Z3lva3VzZWtpXCA7CivmlZnogrLlrp/nv5IgPCBreW91aWt1amlzc2h1dVwgOwor5bCx5qWt6KaP5YmHIDwgc2h1dWd5b3VraXNva3VcIDsKK+aVmemkiueVque1hCA8IGt5b3V5b3ViYW5ndW1pXCA7Civlh43ntZDos4fnlKMgPCB0b3VrZXRzdXNoaXNhblwgOwor6ZuG5Zuj6L6y5aC0IDwgc2h1dWRhbicnbm91am91XCA7CivmmJTmmJQgPCBtdWthc2hpbXVrYXNoaVwgOwor5ZGo6L666Ku45Zu9IDwgc2h1dWhlbnNob2tva3VcIDsKK+WbveexjeadoemghSA8IGtva3VzZWtpam91a291XCA7Civnj77nianntabkuI4gPCBnZW5idXRzdWt5dXV5b1wgOwor5LqI6YG46YCa6YGO6ICFIDwgeW9zZW50c3V1a2FzaGFcIDsKK+ixqumbquWcsOW4ryA8IGdvdXNldHN1Y2hpdGFpXCA7CivmtbfljYPlsbHljYMgPCB1bWlzZW4nJ3lhbWFzZW5cIDsKK+mdqeaWsOaUv+WFmiA8IGtha3VzaGluc2VpdG91XCA7CivlsJHmlbDmsJHml48gPCBzaG91c3V1bWluem9rdVwgOwor5Yq05YON5Y2U57SEIDwgcm91ZG91a3lvdXlha3VcIDsKK+mbu+aSg+S9nOaIpiA8IGRlbmdla2lzYWt1c2VuXCA7Civohp3ok4vpqqggPCBzaGl0c3VnYWlrb3RzdVwgOwor5aWz5oCn6Kej5pS+6KuWIDwgam9zZWlrYWlob3Vyb25cIDsKK+iEiumrhOelnue1jCA8IHNla2l6dWlzaGlua2VpXCA7Civnvo7ooZPlpKflraYgPCBiaWp1dHN1ZGFpZ2FrdVwgOwor6YG65Lyd5a2Q5rK755mCIDwgaWRlbnNoaWNoaXJ5b3VcIDsKK+mBuOaKnumgheebriA8IHNlbnRha3Vrb3Vtb2t1XCA7CivplpPmjqXpgbjmjJkgPCBrYW5zZXRzdXNlbmt5b1wgOwor6LKd5q676L+95pS+IDwga2FpZ2FyYXRzdWlob3VcIDsKK+e+pOeZuuWcsOmchyA8IGd1bnBhdHN1amlzaGluXCA7Civntbblr77kuLvnvqnogIUgPCB6ZXR0YWlzaHVnaXNoYVwgOwor57eK6KSM5LiA55WqIDwga2lua29uJydpY2hpYmFuXCA7CivlhbHlkIzngorkuovloLQgPCBreW91ZG91c3VpamliYVwgOwor54us6Lqr6LK05pePIDwgZG9rdXNoaW5raXpva3VcIDsKK+emj+elieS6i+WLmeaJgCA8IGZ1a3VzaGlqaW11c2hvXCA7Civnp5Hlrabnn6XorZggPCBrYWdha3VjaGlzaGlraVwgOwor55+z6YOo6YeR5ZCJIDwgaXNoaWJla2lua2ljaGlcIDsKK+iKsemzpemiqOaciCA8IGthY2hvdWZ1dWdldHN1XCA7Civmj5Dlh7rmnJ/pmZAgPCB0ZWlzaHV0c3VraWdlblwgOwor5LiJ6KeS57O755Ww5bi4IDwgc2Fua2FrdWtlaWlqb3VcIDsKK+WkqemVt+WcsOS5hSA8IHRlbmNob3VjaGlreXV1XCA7Civnmb7kuIfplbfogIUgPCBoeWFrdW1hbmNob3VqYVwgOwor5a++55eH55mC5rOVIDwgdGFpc2hvdXJ5b3Vob3VcIDsKK+awtOeUo+ippumok+aJgCA8IHN1aXNhbnNoaWtlbmpvXCA7CivkuK3mnqLnpZ7ntYwgPCBjaHV1c3V1c2hpbmtlaVwgOwor5ZWG5bel5qWt6ICFIDwgc2hvdWtvdWd5b3VzaGFcIDsKK+mWi+elqOmAn+WgsSA8IGthaWh5b3Vzb2t1aG91XCA7CivmgKfnmoTooZ3li5UgPCBzZWl0ZWtpc2hvdWRvdVwgOwor6LuN5LqL6KOB5Yik5omAIDwgZ3VuamlzYWliYW5zaG9cIDsKK+eJueauiuaSruW9sSA8IHRva3VzaHVzYXRzdWVpXCA7CivovLjlh7rmiYvlvaIgPCB5dXNodXRzdXRlZ2F0YVwgOwor5Y+y5paZ6aSo5a2mIDwgc2hpcnlvdWthbmdha3VcIDsKK+epuuS4realvOmWoyA8IGt1dWNodXVyb3VrYWt1XCA7CivpmqDpgIDolLXnianos4cgPCBpbnRhaXpvdWJ1c3NoaVwgOwor5bCR5bm05paH5a2mIDwgc2hvdW5lbmJ1bmdha3VcIDsKK+iqv+aVtOaUu+aSgyA8IGNob3VzZWlrb3VnZWtpXCA7Civnsr7npZ7lubTpvaIgPCBzZWlzaGluJyduZW5yZWlcIDsKK+WxheS4reiqv+WBnCA8IGt5b2NodXVjaG91dGVpXCA7CivnqI7liKXkvqHmoLwgPCB6ZWliZXRzdWtha2FrdVwgOwor6LuN5Lq655Sf5rS7IDwgZ3Vuamluc2Vpa2F0c3VcIDsKK+eah+WuruitpuWvnyA8IGtvdWd1dWtlaXNhdHN1XCA7CivnspLjgIXovpvoi6YgPCByeXV1cnl1dXNoaW5rdVwgOwor5p2x5Lqs5aSn5a2mIDwgdG91a3lvdWRhaWdha3VcIDsKK+WPguiAg+Wbs+abuOmkqCA8IHNhbmtvdXRvc2hva2FuXCA7CivoiIjlkbPmtKXmtKUgPCBreW91bWlzaGluc2hpblwgOwor54Sh57ea5ZGo5rOi5pWwIDwgbXVzZW5zaHV1aGFzdXVcIDsKK+WNg+WuouS4h+adpSA8IHNlbmt5YWt1YmFucmFpXCA7CivpgbjmipzoqabpqJMgPCBzZW5iYXRzdXNoaWtlblwgOwor6Iiq6Lev5qiZ6K2YIDwga291cm9oeW91c2hpa2lcIDsKK+e3iuaApeeZuumAsiA8IGtpbmt5dXVoYXNzaGluXCA7CivnqbrkuK3lhpnnnJ8gPCBrdXVjaHV1c2hhc2hpblwgOwor5Za25qWt5rS75YuVIDwgZWlneW91a2F0c3Vkb3VcIDsKK+aVkeaPtOa0u+WLlSA8IGt5dXVlbmthdHN1ZG91XCA7CivlpKnnhLbnoZ3lrZAgPCB0ZW4nJ25lbnNob3VzaGlcIDsKK+S/oeiol+izh+mHkSA8IHNoaW50YWt1c2hpa2luXCA7CivluILmsJHnlJ/mtLsgPCBzaGltaW5zZWlrYXRzdVwgOwor6YeN6L6y5Li7576p6ICFIDwganV1bm91c2h1Z2lzaGFcIDsKK+S5l+WQiOiHquWLlei7iiA8IG5vcmlhaWppZG91c2hhXCA7Civntbblr77mqKnlipsgPCB6ZXR0YWlrZW5yeW9rdVwgOwor5ZGo56ug54u854u9IDwgc2h1dXNob3Vyb3ViYWlcIDsKK+awkeaXj+WtpuiAhSA8IG1pbnpva3VnYWt1c2hhXCA7CivohqDnnYDnirbmhYsgPCBrb3VjaGFrdWpvdXRhaVwgOwor57Sw6IOe6YG65Lyd5a2mIDwgc2FpYm91aWRlbmdha3VcIDsKK+mdouaOpeippumokyA8IG1lbnNldHN1c2hpa2VuXCA7CivmlL/nrZbljZTlrpogPCBzZWlzYWt1a3lvdXRlaVwgOwor6LKp5aOy5oim55WlIDwgaGFuYmFpc2Vucnlha3VcIDsKK+WFrOioreW4guWgtCA8IGtvdXNldHN1aWNoaWJhXCA7CivkurrnianntYzmuIggPCBqaW5idXRzdWtlaXphaVwgOwor5b+D55qE54q25oWLIDwgc2hpbnRla2lqb3V0YWlcIDsKK+S4mOmZteWcsOW4ryA8IGt5dXVyeW91Y2hpdGFpXCA7CivotoXpn7Pms6LmtJfmtYQgPCBjaG91b25wYXNlbmpvdVwgOwor5YiR5LqL6KKr5ZGK5Lq6IDwga2VpamloaWtva3VuaW5cIDsKK+S7ruWHuueNhCA8IGthcmlzaHV0c3Vnb2t1XCA7CivnibnliKXogbcgPCB0b2t1YmV0c3VzaG9rdVwgOwor576k5Lyd5pCs5pmC6ZaTIDwgZ3VuZGVucGFuamlrYW5cIDsKK+eUn+a2r+aVmeiCsiA8IHNob3VnYWlreW91aWt1XCA7Civml6fntITlhajmm7ggPCBreXV1eWFrdXplbnNob1wgOwor5aSn5qC55b256ICFIDwgZGFpa29uJyd5YWt1c2hhXCA7CivkuIflubTmlrDpgKAgPCBtYW4nJ25lbnNoaW56b3VcIDsKK+WBpeW6t+S/nemZuuazlSA8IGtlbmtvdWhva2VuaG91XCA7CivluLjku7vnkIbkuovlm70gPCBqb3VuaW5yaWppa29rdVwgOwor5bqn6aqo56We57WMIDwgemFrb3RzdXNoaW5rZWlcIDsKK+mdnumHkeWxnuWFg+e0oCA8IGhpa2luem9rdWdlbnNvXCA7CivplbfogIHmlZnkvJogPCBjaG91cm91a3lvdWthaVwgOwor6Zm45LiK6Ieq6KGb6ZqKIDwgcmlrdWpvdWppZWl0YWlcIDsKK+iyr+iThOWCteWIuCA8IGNob2NoaWt1c2Fpa2VuXCA7Civmrablipvku4vlhaUgPCBidXJ5b2t1a2Fpbnl1dVwgOwor5L+d6Zm65Yun6KqY5ZOhIDwgaG9rZW5rYW4nJ3l1dWluXCA7Civnsr7lr4bnp5HlraYgPCBzZWltaXRzdWthZ2FrdVwgOwor56eB6YmE57eP6YCjIDwgc2hpdGV0c3Vzb3VyZW5cIDsKK+S8nemAgee1guS6hiA8IGRlbnNvdXNodXVyeW91XCA7CivnqpLntKDlm7rlrprms5UgPCBjaGlzc29rb3RlaWhvdVwgOwor6Jar6JK45raI5q+SIDwga3Vuam91c2hvdWRva3VcIDsKK+azleW+i+ebuOirhyA8IGhvdXJpdHN1c291ZGFuXCA7CivlnLDln5/plovnmbogPCBjaGlpa2lrYWloYXRzdVwgOwor5Zu95YaF55Sj5qWtIDwga29rdW5haXNhbmd5b3VcIDsKK+S4gOaJk+mAhui7oiA8IGljaGlkYWd5YWt1dGVuXCA7CivmsLTnlJ/nlJ/niakgPCBzdWlzZWlzZWlidXRzdVwgOwor5pyJ57ea6YCa5L+hIDwgeXV1c2VudHN1dXNoaW5cIDsKK+ebuOWvvuaAp+WOn+eQhiA8IHNvdXRhaXNlaWdlbnJpXCA7Civnvo7ooZPmhJvlpb3lrrYgPCBiaWp1dHN1YWlrb3VrYVwgOwor6LW35om/6Lui57WQIDwga2lzaG91dGVua2V0c3VcIDsKK+eJqeizquS4u+e+qSA8IGJ1c3NoaXRzdXNodWdpXCA7Civkv6HoqJfkvJrnpL4gPCBzaGludGFrdWdhaXNoYVwgOwor5Lit55+z5Zmo5pmC5LujIDwgY2h1dXNla2tpamlkYWlcIDsKK+S4u+efpeS4u+e+qeiAhSA8IHNodWNoaXNodWdpc2hhXCA7CivompXns7joqabpqJPmiYAgPCBzYW5zaGlzaGlrZW5qb1wgOwor5Lit6ZaT5ZWG5Lq6IDwgY2h1dWthbnNob3VuaW5cIDsKK+mdmembu+WuuemHjyA8IHNlaWRlbicneW91cnlvdVwgOwor5Lit5rWB56S+5LyaIDwgY2h1dXJ5dXVzaGFrYWlcIDsKK+engeeri+aOouWBtSA8IHNoaXJpdHN1dGFudGVpXCA7Civlkb3ovpvovpsgPCBpbm9jaGlnYXJhZ2FyYVwgOwor5Zu95rCR5oqV56WoIDwga29rdW1pbnRvdWh5b3VcIDsKK+aciee9quWIpOaxuiA8IHl1dXphaWhhbmtldHN1XCA7CivlvLfljJbpo5/lk4EgPCBreW91a2FzaG9rdWhpblwgOwor5Ly457iu6Ieq5ZyoIDwgc2hpbnNodWt1aml6YWlcIDsKK+mZuOi7jeWkp+WtpiA8IHJpa3VndW5kYWlnYWt1XCA7CivpgJrkv6HpgJ/luqYgPCB0c3V1c2hpbnNva3Vkb1wgOwor6buS6YeR5Ymb55+zIDwga3Vyb2tvbmdvdXNla2lcIDsKK+eri+S9k+W5vuS9leWtpiA8IHJpdHRhaWtpa2FnYWt1XCA7CivkuK3lm73kurrooZcgPCBjaHV1Z29rdWppbmdhaVwgOwor5a2m6Iq45aSn5a2mIDwgZ2FrdWdlaWRhaWdha3VcIDsKK+Wkp+ays+Wwj+iqrCA8IHRhaWdhc2hvdXNldHN1XCA7CivpiYTpgZPkvJrnpL4gPCB0ZXRzdWRvdWdhaXNoYVwgOwor6Z+z5qW95b2i5byPIDwgb25nYWt1a2Vpc2hpa2lcIDsKK+aAp+agvOWIhuaekCA8IHNlaWtha3VidW5zZWtpXCA7Civou6LlhaXlsYogPCB0ZW4nJ255dXV0b2Rva2VcIDsKK+S4jeWLleeUo+mRkeWumiA8IGZ1ZG91c2Fua2FudGVpXCA7Civlj5fku5jkv4IgPCB1a2V0c3VrZWdha2FyaVwgOwor5bCx6IG3546HIDwgc2h1dXNob2t1cml0c3VcIDsKK+ePvumHkeabuOeVmSA8IGdlbmtpbmtha2l0b21lXCA7CivkvJHmiKbmnaHntIQgPCBreXV1c2Vuam91eWFrdVwgOwor5LqM6Laz5YuV54mpIDwgbmlzb2t1ZG91YnV0c3VcIDsKK+W/g+eQhuWtpueahCA8IHNoaW5yaWdha3V0ZWtpXCA7CivkvoPjgIXoq6Toq6QgPCBrYW5rYW5nYWt1Z2FrdVwgOwor55u057ea6YGL5YuVIDwgY2hva3VzZW4nJ3VuZG91XCA7CivmgqrlvrPmlrDogZ4gPCBha3V0b2t1c2hpbmJ1blwgOwor5pyq5rG65ouY55WZIDwgbWlrZXRzdWtvdXJ5dXVcIDsKK+WumumHj+WIhuaekCA8IHRlaXJ5b3VidW5zZWtpXCA7CivntabmlpnooosgPCBreXV1cnlvdWJ1a3Vyb1wgOwor57SZ5bGR5ZCM54S2IDwga2FtaWt1enVkb3V6ZW5cIDsKK+a4qeWupOagveWfuSA8IG9uc2hpdHN1c2FpYmFpXCA7Civph53lsI/mo5LlpKcgPCBzaGluc2hvdWJvdWRhaVwgOwor5qSN54mp5a2mIDwgc2hva3VidXRzdWdha3VcIDsKK+WkquWIgOS6jOiFsCA8IHRhY2hpZnV0YWtvc2hpXCA7Civoqo3orZjkuI3otrMgPCBuaW5zaGlraWJ1c29rdVwgOwor5Zuj5L2T5Y2U57SEIDwgZGFudGFpa3lvdXlha3VcIDsKK+S/oemgvOWbnuW+qSA8IHNoaW5yYWlrYWlmdWt1XCA7Civkv67lrabml4XooYwgPCBzaHV1Z2FrdXJ5b2tvdVwgOwor6ZW36Led6Zui6aOb6KGMIDwgY2hvdWt5b3JpaGlrb3VcIDsKK+esrOS6jOasoeaAp+W+tCA8IGRhaW5pamlzZWljaG91XCA7Civpm7vmupDplovnmbogPCBkZW5nZW5rYWloYXRzdVwgOwor5qih5byP5qiZ5pysIDwgbW9zaGlraWh5b3Vob25cIDsKK+i/vei3oeiqv+afuyA8IHRzdWlzZWtpY2hvdXNhXCA7CivlibLlvJXmiYvlvaIgPCB3YXJpYmlraXRlZ2F0YVwgOwor5Y+l5qeL6YCg5paH5rOVIDwga3Vrb3V6b3VidW5wb3VcIDsKK+ebtOa1geWbnui3ryA8IGNob2t1cnl1dWthaXJvXCA7CivoiIjooYzmiJDnuL4gPCBrb3VneW91c2Vpc2VraVwgOwor5YyX5rSL5ryB5qWtIDwgaG9rdXlvdWd5b2d5b3VcIDsKK+WbveaWh+WtpuWPsiA8IGtva3VidW5nYWt1c2hpXCA7CivmsLjkuYXohLHmr5sgPCBlaWt5dXVkYXRzdW1vdVwgOwor5o6S5Ye65Z+65rqWIDwgaGFpc2h1dHN1a2lqdW5cIDsKK+e1hOiBt+aUuemdqSA8IHNvc2hva3VrYWlrYWt1XCA7CivpgY7lpLHoh7TmrbsgPCBrYXNoaXRzdWNoaXNoaVwgOwor5Lqk6YCa5L+h5Y+3IDwga291dHN1dXNoaW5nb3VcIDsKK+WLleeJqeWun+mokyA8IGRvdWJ1dHN1amlra2VuXCA7CivmsLTkuIrorablr58gPCBzdWlqb3VrZWlzYXRzdVwgOwor5Yq05L2c5pWZ6IKyIDwgcm91c2FrdWt5b3Vpa3VcIDsKK+aguOW7g+ajhOeJqSA8IGtha3VoYWlraWJ1dHN1XCA7Civpjq7prYLmm7LmrYwgPCBjaGlua29ua3lva3VrYVwgOwor6Z2e6YmE6YeR5bGeIDwgaGl0ZXRzdWtpbnpva3VcIDsKK+Wjq+WumOWAmeijnOeUnyA8IHNoaWthbmtvdWhvc2VpXCA7Civlt6Hlm57lm7Pmm7jppKggPCBqdW5rYWl0b3Nob2thblwgOwor5LiJ55m+5Luj6KiAIDwgc2FuYnlha3VkYWlnZW5cIDsKK+W+tOWFteW/jOmBv+iAhSA8IGNob3VoZWlraWhpc2hhXCA7Civlh7roqLTmnJ/pmZDms5UgPCBzaHVzc29raWdlbmhvdVwgOwor5Lit5Zu95Lyd5p2lIDwgY2h1dWdva3VkZW5yYWlcIDsKK+eti+eEoeWKm+eXhyA8IGtpbm11cnlva3VzaG91XCA7CivmtYHpgJros4fmnKwgPCByeXV1dHN1dXNoaWhvblwgOwor56m65Y2z5piv6ImyIDwga3V1c29rdXplc2hpa2lcIDsKK+aVmeiCsuaUuemdqSA8IGt5b3Vpa3VrYWlrYWt1XCA7CivliIfplovmiYvooZMgPCBzZWtrYWlzaHVqdXRzdVwgOwor5aSn5ZKM6a2CIDwgeWFtYXRvZGFtYXNoaWlcIDsKK+S4i+WPsOaJgCA8IHNoaW1vZGFpZG9rb3JvXCA7CivmlZHorbfmtLvli5UgPCBreXV1Z29rYXRzdWRvdVwgOwor6LuN55So6Ly46YCB5qmfIDwgZ3VuJyd5b3V5dXNvdWtpXCA7CivlrqPkvJ3mtLvli5UgPCBzZW5kZW5rYXRzdWRvdVwgOwor6LKh55Sj55uu6YyyIDwgemFpc2FubW9rdXJva3VcIDsKK+iogOiqnuWcsOeQhuWtpiA8IGdlbmdvY2hpcmlnYWt1XCA7CivmraPluLjntYLkuoYgPCBzZWlqb3VzaHV1cnlvdVwgOwor5YmN5pa55b6M5YaG5aKzIDwgemVucG91a291ZW5mdW5cIDsKK+iZq+anmOeqgei1t+eCjiA8IGNodXV5b3V0b2traWVuXCA7CivkuqHlkb3nlJ/mtLsgPCBib3VtZWlzZWlrYXRzdVwgOwor5YSq6LaK6KSH5ZCIIDwgeXV1ZXRzdWZ1a3Vnb3VcIDsKK+e0lOaXpeacrOW8jyA8IGp1bicnbmlob25zaGlraVwgOwor5pyJ5b2i5paH5YyW6LKhIDwgeXV1a2VpYnVua2F6YWlcIDsKK+aXp+efs+WZqOaZguS7oyA8IGt5dXVzZWtraWppZGFpXCA7CivmiYvlvaLlibLlvJUgPCB0ZWdhdGF3YXJpYmlraVwgOwor5YuV54mp5bSH5oudIDwgZG91YnV0c3VzdXVoYWlcIDsKK+iHqueUseawkeaoqeirliA8IGppeXV1bWlua2Vucm9uXCA7CivlhbHlkIzkvY/lroUgPCBreW91ZG91anV1dGFrdVwgOwor5pyJ6KKL5YuV54mpIDwgeXV1dGFpZG91YnV0c3VcIDsKK+S4ieWNgeS6jOWIhumfs+espiA8IHNhbmp1dW5pYnVvbnB1XCA7CivnoLTnlKPoo4HliKTmiYAgPCBoYXNhbnNhaWJhbnNob1wgOwor5Lq66Lqr5L+d6K235rOVIDwgamluc2hpbmhvZ29ob3VcIDsKK+iii+Wwj+i3r+aWhyA8IGZ1a3Vyb2tvdWppYnVuXCA7CivmlL7lsITmgKflhYPntKAgPCBob3VzaGFzZWlnZW5zb1wgOwor55m956CC6Z2S5p2+IDwgaGFrdXNoYXNlaXNob3VcIDsKK+iKseWrgeW+oeWvriA8IGhhbmF5b21lZ29yeW91XCA7CivmlrDpmbPku6PorJ0gPCBzaGluY2hpbnRhaXNoYVwgOwor5LiA5YWt6YqA6KGMIDwgaWNoaXJva3VnaW5rb3VcIDsKK+WwseiBt+aWoeaXiyA8IHNodXVzaG9rdWFzc2VuXCA7Civpnq3mr5vomavnl4cgPCBiZW5tb3VjaHV1c2hvdVwgOwor57W25L2T57W25ZG9IDwgemV0dGFpemV0c3VtZWlcIDsKK+eyvuelnuWIhuaekCA8IHNlaXNoaW5idW5zZWtpXCA7Civns7vliJfkvJrnpL4gPCBrZWlyZXRzdWdhaXNoYVwgOwor5YiG5a2Q6ZaT5YqbIDwgYnVuc2hpa2Fucnlva3VcIDsKK+S8gealreaIpueVpSA8IGtpZ3lvdXNlbnJ5YWt1XCA7Civlm73msJHmiYDlvpcgPCBrb2t1bWluc2hvdG9rdVwgOwor6Ly45Ye65Yi26ZmQIDwgeXVzaHV0c3VzZWlnZW5cIDsKK+eJueWumumKmOafhCA8IHRva3V0ZWltZWlnYXJhXCA7CivosqHli5nkvZPos6ogPCB6YWltdXRhaXNoaXRzdVwgOwor6K2m5a+f5a2m5qChIDwga2Vpc2F0c3VnYWtrb3VcIDsKK+S4jeazleS+teWFpSA8IGZ1aG91c2hpbicnbnl1dVwgOwor5bCx6IG35Y+jIDwgc2h1dXNob2t1Z3VjaGlcIDsKK+eUn+a0u+ioreioiCA8IHNlaWthdHN1c2Vra2VpXCA7CivmjZXomZzlj47lrrnmiYAgPCBob3J5b3NodXV5b3Vqb1wgOwor6Lu96JaE55+t5bCPIDwga2VpaGFrdXRhbnNob3VcIDsKK+eul+ihk+W5s+WdhyA8IHNhbmp1dHN1aGVpa2luXCA7CivljbPluK3mlpnnkIYgPCBzb2t1c2VraXJ5b3VyaVwgOwor54mp55CG55mC5rOVIDwgYnV0c3VyaXJ5b3Vob3VcIDsKK+eUn+ioiOiyu+aMh+aVsCA8IHNlaWtlaWhpc2hpc3V1XCA7CivpnZLphbjkuK3mr5IgPCBzZWlzYW5jaHV1ZG9rdVwgOwor5a6X5pWZ5rOV5Lq6IDwgc2h1dWt5b3Vob3VqaW5cIDsKK+WGmeecn+akjeWtlyA8IHNoYXNoaW5zaG9rdWppXCA7Civnt4rnuK7osqHmlL8gPCBraW5zaHVrdXphaXNlaVwgOwor5Y2Y5oCn55Sf5q6WIDwgdGFuc2Vpc2Vpc2hva3VcIDsKK+WbveS8muWbs+abuOmkqCA8IGtva2thaXRvc2hva2FuXCA7Civpq5jnrYnnlJ/niakgPCBrb3V0b3VzZWlidXRzdVwgOwor6auY562J5byB5YuZ5a6YIDwga291dG91YmVubXVrYW5cIDsKK+aZgumWk+mghuW6j+epjSA8IGppa2FuanVuam9zZWtpXCA7Civkv53oqLzniZvkubMgPCBob3Nob3VneXV1bnl1dVwgOwor562L6IKJ6LOqIDwga2luJyduaWt1c2hpdHN1XCA7Civlipvku5XkuosgPCBjaGlrYXJhc2hpZ290b1wgOwor5Y+X6IOO6Kq/56+AIDwganV0YWljaG91c2V0c3VcIDsKK+WcsOeQg+a4qeaaluWMliA8IGNoaWt5dXVvbmRhbmthXCA7CivpgI/mnpDnmYLms5UgPCB0b3VzZWtpcnlvdWhvdVwgOwor6Z2e5bi45Yuk6Kyb5birIDwgaGlqb3VraW5rb3VzaGlcIDsKK+WroeWHuuWtkCA8IGNoYWt1c2h1dHN1c2hpXCA7CivmhJ/opprnpZ7ntYwgPCBrYW5rYWt1c2hpbmtlaVwgOwor6Ieq5YuV6LuK5a2m5qChIDwgamlkb3VzaGFnYWtrb3VcIDsKK+eojumHkemBv+mbo+WcsCA8IHplaWtpbmhpbmFuY2hpXCA7CivkurrpgZPnmoTmj7TliqkgPCBqaW5kb3V0ZWtpZW5qb1wgOwor5bCC6ZaA55+l6K2YIDwgc2VubW9uY2hpc2hpa2lcIDsKK+i7jeaLoeertuS6iSA8IGd1bmtha3VreW91c291XCA7CivniYfoopbmnLogPCBrYXRhc29kZWR6dWt1ZVwgOwor55m75aC05Lq654mpIDwgdG91am91amluYnV0c3VcIDsKK+a2iOiyu+iAhemBi+WLlSA8IHNob3VoaXNoYXVuZG91XCA7CivpnZ7nj77lrp/nmoQgPCBoaWdlbmppdHN1dGVraVwgOwor6YCG5oCn55+z6bm4IDwgZ3lha3VzZWlzZWtrZW5cIDsKK+WKtOWDjeWfuua6luazlSA8IHJvdWRvdWtpanVuaG91XCA7Civlub3ploDni63nqoQgPCB5dXVtb25reW91c2FrdVwgOwor6YCj6YKm5b2T5bGAIDwgcmVucG91dG91a3lva3VcIDsKK+ebtOWwhOaXpeWFiSA8IGNob2t1c2hhbmlra291XCA7CivlhYjku7vlsIbmoKEgPCBzZW4nJ25pbnNob3Vrb3VcIDsKK+isueWOs+Wun+ebtCA8IGtpbmdlbmppdGNob2t1XCA7CivmvKLlrZfliLbpmZDoq5YgPCBrYW5qaXNlaWdlbnJvblwgOwor5bqX6aCt5Y+W5byVIDwgdGVudG91dG9yaWhpa2lcIDsKK+WNkualreW8jyA8IHNvdHN1Z3lvdXNoaWtpXCA7Civnmbrlo7LnpoHmraIgPCBoYXRzdWJhaWtpbnNoaVwgOwor5ZOB6LOq566h55CGIDwgaGluc2hpdHN1a2FucmlcIDsKK+e3qOWFpeippumokyA8IGhlbicnbnl1dXNoaWtlblwgOwor5Lyd6YGU6Zai5pWwIDwgZGVudGF0c3VrYW5zdXVcIDsKK+WwveW/oOWgseWbvSA8IGppbmNodXVob3Vrb2t1XCA7CivlirTkvb/ljZToqr8gPCByb3VzaGlreW91Y2hvdVwgOwor5ZGo5rOi5pWw5YGP56e7IDwgc2h1dWhhc3V1aGVuJydpXCA7Civnmb7oibLnnLzpj6EgPCBoeWFrdWlyb21lZ2FuZVwgOwor5Lit5oCn5a2Q5p2fIDwgY2h1dXNlaXNoaXNva3VcIDsKK+eEoeWItumZkOiyv+aYkyA8IG11c2VpZ2VuYm91ZWtpXCA7Civnt4rmgKXlr77nrZYgPCBraW5reXV1dGFpc2FrdVwgOwor5Y2w5Yi35oqA6KGTIDwgaW5zYXRzdWdpanV0c3VcIDsKK+asoeWFg+ato+WJh+WMliA8IGppZ2Vuc2Vpc29rdWthXCA7Civlv4PnmoTooajnpLogPCBzaGludGVraWh5b3VqaVwgOwor5YWJ6YCa5L+hIDwgaGlrYXJpdHN1dXNoaW5cIDsKK+WQjeaJgOaXp+i3oSA8IG1laXNob2t5dXVzZWtpXCA7CivmipXos4fkv6HoqJcgPCB0b3VzaGlzaGludGFrdVwgOwor5Lq65ZCN55So5ryi5a2XIDwgamlubWVpeW91a2FuamlcIDsKK+aWsOmfk+WbveWFmiA8IHNoaW5rYW5rb2t1dG91XCA7Civlm73pmpvmnaHntIQgPCBrb2t1c2Fpam91eWFrdVwgOwor5LiD5aCC5Ly96JeNIDwgc2hpY2hpZG91Z2FyYW5cIDsKK+imquaXj+mWouS/giA8IHNoaW56b2t1a2Fua2VpXCA7CivlvoHlpLflpKflsIbou40gPCBzZWlpdGFpc2hvdWd1blwgOwor5YKY5b2i56KN5a2QIDwga2FzYWdhdGFnYWlzaGlcIDsKK+eUo+alreS6iOWCmei7jSA8IHNhbmd5b3V5b2JpZ3VuXCA7CivmgqrmvKLlsI/oqqwgPCBha2thbnNob3VzZXRzdVwgOwor5Yip5a2Q5bmz6KGh56iOIDwgcmlzaGloZWlrb3V6ZWlcIDsKK+eEoeS7u+aJgOWkp+iHoyA8IG11bmluc2hvZGFpamluXCA7CivlhazmlbXkuIDlj7cgPCBrb3V0ZWtpaWNoaWdvdVwgOwor5rC06LOq5rGa5r+BIDwgc3Vpc2hpdHN1b2Rha3VcIDsKK+eyvuelnueZguazlSA8IHNlaXNoaW5yeW91aG91XCA7Civlj5bnt6Dms5UgPCB0b3Jpc2hpbWFyaWhvdVwgOwor6Iyr54S26Ieq5aSxIDwgYm91emVuamlzaGl0c3VcIDsKK+WcsOizquaZguS7oyA8IGNoaXNoaXRzdWppZGFpXCA7Civnq4vlhaXnpoHmraIgPCB0YWNoaWlyaWtpbnNoaVwgOwor5aSn5ZCM5Zuj57WQIDwgZGFpZG91ZGFua2V0c3VcIDsKK+S6jOmHjeebsuaknOazlSA8IG5panV1bW91a2VuaG91XCA7Civosq/ph5HpgJrluLMgPCBjaG9raW50c3V1Y2hvdVwgOwor5paO5oiS5rKQ5rW0IDwgc2Fpa2FpbW9rdXlva3VcIDsKK+aWsOWItuWkp+WtpiA8IHNoaW5zZWlkYWlnYWt1XCA7CivlhbHlkIzosqzku7sgPCBreW91ZG91c2VraW5pblwgOwor5paw6IGe55m66KGoIDwgc2hpbmJ1bmhhcHB5b3VcIDsKK+i7iuWGheaUueacrSA8IHNoYW5haWthaXNhdHN1XCA7Civoh6ros6Dosqzkv53pmbogPCBqaWJhaXNla2lob2tlblwgOwor5piG6Jmr5a2m6ICFIDwga29uY2h1dWdha3VzaGFcIDsKK+mAgOiBt+W5tOmHkSA8IHRhaXNob2t1bmVua2luXCA7CivliIblibLntbHmsrsgPCBidW5rYXRzdXRvdWNoaVwgOwor56K6546H6YGO56iLIDwga2FrdXJpdHN1a2F0ZWlcIDsKK+mHjeeCremFuOabuemBlCA8IGp1dXRhbnNhbnNvdWRhXCA7CivnoJTnqbbnmbrooaggPCBrZW5reXV1aGFwcHlvdVwgOwor5pen57SE6IGW5pu4IDwga3l1dXlha3VzZWlzaG9cIDsKK+aJi+ihk+WupCA8IHNodWp1dHN1c2hpdHN1XCA7CivokrLpib7lhbXoiI4gPCBrYW1hYm9rb2hlaXNoYVwgOwor57WM6LK756+A57SEIDwga2VpaGlzZXRzdXlha3VcIDsKK+eti+iQjue4rueXhyA8IGtpbicnaXNodWt1c2hvdVwgOwor5YSq55Sf5omL6KGTIDwgeXV1c2Vpc2h1anV0c3VcIDsKK+WFrOWFseaWmemHkSA8IGtvdWt5b3VyeW91a2luXCA7CivlvLfliLbkuK3mlq0gPCBreW91c2VpY2h1dWRhblwgOwor5LiH5pyJ5byV5YqbIDwgYmFuJyd5dXVpbnJ5b2t1XCA7Civnq4vlpKrlrZDlvI8gPCByaXR0YWlzaGlzaGlraVwgOwor5pel5YaF5ZGo5pyfIDwgbmljaGluYWlzaHV1a2lcIDsKK+aGsuazleino+mHiCA8IGtlbnBvdWthaXNoYWt1XCA7Civplbfot53pm6Lpm7voqbEgPCBjaG91a3lvcmlkZW53YVwgOwor576O55qE55Sf5rS7IDwgYml0ZWtpc2Vpa2F0c3VcIDsKK+Wbo+S9k+WJsuW8lSA8IGRhbnRhaXdhcmliaWtpXCA7Civlm73pmpvkuqTmtYEgPCBrb2t1c2Fpa291cnl1dVwgOwor6Kmm552A5a6kIDwgc2hpY2hha3VzaGl0c3VcIDsKK+WGoOeKtumdmeiEiCA8IGthbmpvdWpvdW15YWt1XCA7CivpgIbkuInop5LlvaIgPCBneWFrdXNhbmtha2tlaVwgOwor6KSH6ZuR5oCq5aWHIDwgZnVrdXphdHN1a2Fpa2lcIDsKK+mBuuS8neWtkOW3peWtpiA8IGlkZW5zaGlrb3VnYWt1XCA7Civpq5jlsaTlu7rnr4kgPCBrb3Vzb3VnZW5jaGlrdVwgOwor5LiN5Y+v6IO96YG45oqeIDwgZnVrYW5vdXNlbnRha3VcIDsKK+ecn+ePoOmkiuauliA8IHNoaW5qdXlvdXNob2t1XCA7CivnlLPlkYrnlKjntJkgPCBzaGlua29rdXlvdXNoaVwgOwor5bGA5Zyw5oim5LqJIDwga3lva3VjaGlzZW5zb3VcIDsKK+eIhueZuueJqSA8IGJha3VoYXRzdWJ1dHN1XCA7Civph43opoHkurrniakgPCBqdXV5b3VqaW5idXRzdVwgOwor5rS754mI5Y2w5Yi3IDwga2FwcGFuJydpbnNhdHN1XCA7CivpgKPml6XpgKPlpJwgPCByZW5qaXRzdXJlbicneWFcIDsKK+S4ieiAheWvvueriyA8IHNhbnNoYXRhaXJpdHN1XCA7CivmsYLlprvluoPlkYogPCBreXV1c2Fpa291a29rdVwgOwor54uC6KiA6Ieq5q66IDwga3lvdWdlbmppc2F0c3VcIDsKK+eMquatpuiAhSA8IGlub3NoaXNoaW11c2hhXCA7CivmgKfmn5PoibLkvZMgPCBzZWlzZW5zaG9rdXRhaVwgOwor5Ye454mI5Y2w5Yi3IDwgdG9wcGFuJydpbnNhdHN1XCA7CivliLrouqvljIXkuIEgPCBzYXNoaW1pYm91Y2hvdVwgOwor5pel57Gz6LK/5piTIDwgbmljaGliZWlib3Vla2lcIDsKK+WPpeani+mAoOimj+WJhyA8IGt1a291em91a2lzb2t1XCA7CivmiYvlvaLkuqTmj5vmiYAgPCB0ZWdhdGFrb3VrYW5qb1wgOwor6LuN5LqL5Y2U5YqbIDwgZ3VuamlreW91cnlva3VcIDsKK+Wkp+m7kuafsSA8IGRhaWtva3ViYXNoaXJhXCA7CivmpbXpmZDnirbmhYsgPCBreW9rdWdlbmpvdXRhaVwgOwor54mp55CG54++6LGhIDwgYnV0c3VyaWdlbnNob3VcIDsKK+WcsOaWueiHquayu+S9kyA8IGNoaWhvdWppY2hpdGFpXCA7CivkurrouqvmlLvmkoMgPCBqaW5zaGlua291Z2VraVwgOwor6KiY5oa25Zaq5aSxIDwga2lva3Vzb3VzaGl0c3VcIDsKK+S4jeimj+WJh+WLleipniA8IGZ1a2lzb2t1ZG91c2hpXCA7CivnpL7kvJrnp6nluo8gPCBzaGFrYWljaGl0c3Vqb1wgOwor5a6M5YWo5Li7576p6ICFIDwga2FuemVuc2h1Z2lzaGFcIDsKK+a4m+S+oeWEn+WNtCA8IGdlbmthc2hvdWt5YWt1XCA7CivpjpbluLflrZAgPCBrdXNhcmlrYXRhYmlyYVwgOwor56m65Lit5p+75a+fIDwga3V1Y2h1dXNhc2F0c3VcIDsKK+e0oOS6uuiKneWxhSA8IHNoaXJvdXRvc2hpYmFpXCA7CivkuIDlha3li53osqAgPCBpY2hpcm9rdXNob3VidVwgOwor5Lqk6Z+/5qW95ZujIDwga291a3lvdWdha3VkYW5cIDsKK+ihgOa2sumKgOihjCA8IGtldHN1ZWtpZ2lua291XCA7CivllYblk4HlnKjpq5ggPCBzaG91aGluemFpZGFrYVwgOwor54mp55CG5a2m6ICFIDwgYnV0c3VyaWdha3VzaGFcIDsKK+S4jei6vuiAhSA8IGJ1c2hpdHN1a2Vtb25vXCA7CivlubTnmb7lubTkuK0gPCBuZW5ieWFrdW5lbmp1dVwgOwor5p6d6JGJ5pyr56+AIDwgc2hpeW91bWFzc2V0c3VcIDsKK+i7jemaiueUn+a0uyA8IGd1bnRhaXNlaWthdHN1XCA7Civmr5TovIPnmoTlsI8gPCBoaWtha3V0ZWtpc2hvdVwgOwor5qeL5oiQ57Sg5qeL6YCgIDwga291c2Vpc29rb3V6b3VcIDsKK+a9nOWcqOiDveWKmyA8IHNlbnphaW5vdXJ5b2t1XCA7Civlt6XlrabljZrlo6sgPCBrb3VnYWt1aGFrdXNoaVwgOwor5pyJ5YSf5aWR57SEIDwgeXV1c2hvdWtlaXlha3VcIDsKK+aWsOiBnuW6g+WRiiA8IHNoaW5idW5rb3Vrb2t1XCA7CivkuIrntJrmm7nplbcgPCBqb3VreXV1c291Y2hvdVwgOwor5Lmx6Ki65Lmx55mCIDwgcmFuc2hpbnJhbnJ5b3VcIDsKK+i8ieiyqOWQg+awtOe3miA8IHNhaWtha2lzc3Vpc2VuXCA7Civpm4blkIjkvY/lroUgPCBzaHV1Z291anV1dGFrdVwgOwor5b6h6aOf5LqL5YemIDwgb3Nob2t1amlkb2tvcm9cIDsKK+mkiuauluecn+ePoCA8IHlvdXNob2t1c2hpbmp1XCA7CivlhoXpg6jlkYrnmbogPCBuYWlidWtva3VoYXRzdVwgOwor5ZCN55uu6LOD6YeRIDwgbWVpbW9rdWNoaW5naW5cIDsKK+S4ieiJsuiPqyA8IHNhbnNob2t1c3VtaXJlXCA7Civnm7jlr77mub/luqYgPCBzb3V0YWlzaGl0c3Vkb1wgOwor5a2m5qCh55Sf5rS7IDwgZ2Fra291c2Vpa2F0c3VcIDsKK+WFpeWbveafu+iovCA8IG55dXVrb2t1c2FzaG91XCA7Civoh6rlvovnpZ7ntYwgPCBqaXJpdHN1c2hpbmtlaVwgOwor5rC06YqA5rip5bqm6KiIIDwgc3VpZ2luJydvbmRva2VpXCA7Civlp4nmp5jkurrlvaIgPCBhbmVzYW1hbmluZ3lvdVwgOwor6KGd5pKD6Zai5pWwIDwgc2hvdWdla2lrYW5zdXVcIDsKK+W3p+iogOS7pOiJsiA8IGtvdWdlbnJlaXNob2t1XCA7CivlpInmuKnli5XniakgPCBoZW4nJ29uZG91YnV0c3VcIDsKK+aVsOeQhuirlueQhuWtpiA8IHN1dXJpcm9ucmlnYWt1XCA7Civljp/lp4vli5XniakgPCBnZW5zaGlkb3VidXRzdVwgOwor56m66ZaT6Iq46KGTIDwga3V1a2FuZ2VpanV0c3VcIDsKK+eah+WkquWtkOauv+S4iyA8IGtvdXRhaXNoaWRlbmthXCA7Civlh7rlipvnt5ogPCBzaHV0c3VyeW9rdXNlblwgOwor6ZaL5bqX5LyR5qWtIDwga2FpdGVua3l1dWd5b3VcIDsKK+Wor+alveaWveiorSA8IGdvcmFrdXNoaXNldHN1XCA7CivljYrmsLjkuYXnmoQgPCBoYW4nJ2Vpa3l1dXRla2lcIDsKK+engeeriyA8IHdhdGFrdXNoaXJpdHN1XCA7CivmiKbkuonmnKrkuqHkurogPCBzZW5zb3VtaWJvdWppblwgOwor6aOf57On5LqL5oOFIDwgc2hva3VyeW91amlqb3VcIDsKK+WPr+mAhuWPjeW/nCA8IGthZ3lha3VoYW4nJ25vdVwgOwor56C055Sj566h6LKh5Lq6IDwgaGFzYW5rYW56YWluaW5cIDsKK+eJueWIpeS8muWToSA8IHRva3ViZXRzdWthaWluXCA7CivmrbvmtLvllY/poYwgPCBzaGlrYXRzdW1vbmRhaVwgOwor57O757Wx56We5a2mIDwga2VpdG91c2hpbmdha3VcIDsKK+i7n+mqqOmtmumhniA8IG5hbmtvdHN1Z3lvcnVpXCA7CivlkITkurrlkITmp5ggPCBrYWt1amlua2FrdXlvdVwgOwor6YCa5L+h5LqL5qWtIDwgdHN1dXNoaW5qaWd5b3VcIDsKK+WNlOWumuS4lueVjOaZgiA8IGt5b3V0ZWlzZWthaWppXCA7Civosr/mmJPpmpzlo4EgPCBib3Vla2lzaG91aGVraVwgOwor5Y2Y5LiA6YCa6LKoIDwgdGFuJydpdHN1dHN1dWthXCA7CivljYPkuKHlvbnogIUgPCBzZW5yeW91eWFrdXNoYVwgOwor5Yiw552A5pmC5Yi7IDwgdG91Y2hha3VqaWtva3VcIDsKK+a1t+S4iuS/neWuieW6gSA8IGthaWpvdWhvYW5jaG91XCA7CivmpoLnrpfopoHmsYIgPCBnYWlzYW4nJ3lvdWt5dXVcIDsKK+eIhueZuuWKmyA8IGJha3VoYXRzdXJ5b2t1XCA7Civlm73msJHlubTph5EgPCBrb2t1bWluJyduZW5raW5cIDsKK+azpeawtOeovOalrSA8IGRvcm9taXp1a2FneW91XCA7CivnibnnlbDlgKTliIbop6MgPCB0b2t1aWNoaWJ1bmthaVwgOwor5Zyo5pel57Gz6LuNIDwgemFpbmljaGliZWlndW5cIDsKK+i2iuWig+WFpeWtpiA8IGVra3lvdW55dXVnYWt1XCA7CivmsJHllrbljJbkvIHmpa0gPCBtaW4nJ2Vpa2FraWd5b3VcIDsKK+aVsOeQhuWTsuWtpiA8IHN1dXJpdGV0c3VnYWt1XCA7CivllK/nianlj7LoprMgPCB5dWlidXRzdXNoaWthblwgOwor5ZWG5qWt5a2m5qChIDwgc2hvdWd5b3VnYWtrb3VcIDsKK+W3puWkp+aLrOW8pyA8IGhpZGFyaWRhaWtha2tvXCA7CivmsJHml4/nsr7npZ4gPCBtaW56b2t1c2Vpc2hpblwgOwor5a6f5Yqb6KGM54K6IDwgaml0c3VyeW9rdWtvdWlcIDsKK+Wkp+ilv+a0i+aoquaWrSA8IHRhaXNlaXlvdW91ZGFuXCA7Civmtbfntr/li5XniakgPCBrYWltZW5kb3VidXRzdVwgOwor57Gz6LuN5YW15YqbIDwgYmVpZ3VuaGVpcnlva3VcIDsKK+edgOS/oeWxgCA8IGNoYWt1c2hpbmt5b2t1XCA7Civkurrlt6Xpgb/lporms5UgPCBqaW5rb3VoaW5pbmhvdVwgOwor5bCx5a2m5bm06b2iIDwgc2h1dWdha3VuZW5yZWlcIDsKK+mJseeJqeizh+a6kCA8IGtvdWJ1dHN1c2hpZ2VuXCA7Civou5/lvI/ph47nkIMgPCBuYW5zaGlraXlha3l1dVwgOwor5L+h6KiX57Wx5rK7IDwgc2hpbnRha3V0b3VjaGlcIDsKK+e1jOa4iOa0u+WLlSA8IGtlaXphaWthdHN1ZG91XCA7CivlhbXlvI/kvZPmk40gPCBoZWlzaGlraXRhaXNvdVwgOwor6a2a576k5o6i55+l5qmfIDwgZ3lvZ3VudGFuY2hpa2lcIDsKK+eUn+aulue0sOiDniA8IHNlaXNob2t1c2FpYm91XCA7CivlnLDlvaLmuKzph48gPCBjaGlrZWlzb2t1cnlvdVwgOwor5ZWG5qWt6LOH5pysIDwgc2hvdWd5b3VzaGlob25cIDsKK+mBiumbouWfuuWPjeW/nCA8IHl1dXJpa2loYW4nJ25vdVwgOwor5bCP55Sw5Y6f6KmV5a6aIDwgb2Rhd2FyYWh5b3Vqb3VcIDsKK+aVsOWApOebruaomSA8IHN1dWNoaW1va3VoeW91XCA7CivpqJLpn7PpmLLmraLms5UgPCBzb3VvbmJvdXNoaWhvdVwgOwor5LiA5b6X5LiA5aSxIDwgaXR0b2t1aXNzaGl0c3VcIDsKK+mAmuS/oeiyqeWjsiA8IHRzdXVzaGluaGFuYmFpXCA7CivlvLfliLbln7fooYwgPCBreW91c2Vpc2hpa2tvdVwgOwor5bm76Kaa55eH54q2IDwgZ2Vua2FrdXNob3Vqb3VcIDsKK+aHkOWIgCA8IGZ1dG9rb3JvZ2F0YW5hXCA7CivnlpHllY/ku6PlkI3oqZ4gPCBnaW1vbmRhaW1laXNoaVwgOwor5YyX6Zm45Zyw5pa5IDwgaG9rdXJpa3VjaGlob3VcIDsKK+WJsuW8leeZuuihjCA8IHdhcmliaWtpaGFra291XCA7CivluoPloLHmtLvli5UgPCBrb3Vob3VrYXRzdWRvdVwgOwor5bGx6auY5bi95a2QIDwgeWFtYXRha2Fib3VzaGlcIDsKK+afk+iJsuW3peWgtCA8IHNlbnNob2t1a291am91XCA7CivlhazlvI/oqKrllY8gPCBrb3VzaGlraWhvdW1vblwgOwor5o6S5Ye654mpIDwgaGFpc2h1dHN1YnV0c3VcIDsKK+e3j+WQiOmWi+eZuiA8IHNvdWdvdWthaWhhdHN1XCA7CivpgKPnq4vmlL/mqKkgPCByZW5yaXRzdXNlaWtlblwgOwor5beu5Yil6KGo54++IDwgc2FiZXRzdWh5b3VnZW5cIDsKK+aoqeWKm+mXmOS6iSA8IGtlbnJ5b2t1dG91c291XCA7Civnm7jlr77mgKfnkIboq5YgPCBzb3V0YWlzZWlyaXJvblwgOwor6KO95ZOB5oim55WlIDwgc2VpaGluc2Vucnlha3VcIDsKK+WIhuawtOWxseiEiCA8IGJ1bnN1aXNhbm15YWt1XCA7CivphbjljJbpmLLmraLliaQgPCBzYW5rYWJvdXNoaXphaVwgOwor56ys5LqM5qyh55Sj5qWtIDwgZGFpbmlqaXNhbmd5b3VcIDsKK+mJseeJqeizqiA8IGtvdWJ1dHN1c2hpdHN1XCA7CivmnInmqZ/loanmurblqpIgPCB5dXVraWVuJyd5b3ViYWlcIDsKK+iqmOmbu+ato+aOpSA8IHl1dWRlbnNlaXNldHN1XCA7Civnn6XopprnpZ7ntYwgPCBjaGlrYWt1c2hpbmtlaVwgOwor6YCQ5p2h5a+p6K2wIDwgY2hpa3Vqb3VzaGluZ2lcIDsKK+WNg+WztuWIl+WztiA8IGNoaXNoaW1hcmV0dG91XCA7CivovLjlh7rotoXpgY4gPCB5dXNodXRzdWNob3VrYVwgOwor6Zu75a2Q6KiI566X5qmfIDwgZGVuc2hpa2Vpc2Fua2lcIDsKK+WwiueOi+iojuW5lSA8IHNvbicnbm91dG91YmFrdVwgOwor5oim6ZeY54qg54my6ICFIDwgc2VudG91Z2lzZWlzaGFcIDsKK+aDheWgsemAmuS/oSA8IGpvdWhvdXRzdXVzaGluXCA7CivmjK/lh7rlsYAgPCBmdXJpZGFzaGlreW9rdVwgOwor5rCR6ZaT6Iiq56m65qmfIDwgbWlua2Fua291a3V1a2lcIDsKK+i2hei2iuS6pOS7oyA8IGNob3VldHN1a291dGFpXCA7Civlj43miKbkuLvnvqnogIUgPCBoYW5zZW5zaHVnaXNoYVwgOwor55Sf5rS756m66ZaTIDwgc2Vpa2F0c3VrdXVrYW5cIDsKK+WJjeeri+iFuueCjiA8IHplbnJpdHN1c2VuJydlblwgOwor5Z+35YuZ5a6kIDwgc2hpdHN1bXVzaGl0c3VcIDsKK+ihjOaUv+aUuemdqSA8IGd5b3VzZWlrYWlrYWt1XCA7Civlvovku6Tlm73lrrYgPCByaXRzdXJ5b3Vrb2trYVwgOwor5b+D6ZyK54++6LGhIDwgc2hpbnJlaWdlbnNob3VcIDsKK+eUn+iqleeZvuW5tCA8IHNlaXRhbmh5YWt1bmVuXCA7Civoh6rli5XnnYDkv6EgPCBqaWRvdWNoYWt1c2hpblwgOwor55m654ax6YePIDwgaGF0c3VuZXRzdXJ5b3VcIDsKK+esrOS4ieWLouWKmyA8IGRhaXNhbnNlaXJ5b2t1XCA7CivlpKflhavou4ogPCBkYWloYWNoaWd1cnVtYVwgOwor5pu455WZ6YO15L6/IDwga2FraXRvbWV5dXViaW5cIDsKK+ims+WFieahiOWGheaJgCA8IGthbmtvdWFuJyduYWlqb1wgOwor55+l6K2Y5L2T57O7IDwgY2hpc2hpa2l0YWlrZWlcIDsKK+mbhuWQiOiomOi/sCA8IHNodXVnb3VraWp1dHN1XCA7CivkuInnmb7oq7jkvq8gPCBzYW5ieWFrdXNob2tvdVwgOwor6auY6b2i5YyW56S+5LyaIDwga291cmVpa2FzaGFrYWlcIDsKK+iomOWPt+irlueQhuWtpiA8IGtpZ291cm9ucmlnYWt1XCA7CivlpKfooYbmloflraYgPCB0YWlzaHV1YnVuZ2FrdVwgOwor5Lit562J5pWZ6IKyIDwgY2h1dXRvdWt5b3Vpa3VcIDsKK+aVmeiCsuihjOaUvyA8IGt5b3Vpa3VneW91c2VpXCA7Civnm7TmjqXnmoQgPCBjaG9rdXNldHN1dGVraVwgOwor5q2m6KOF5Lit56uLIDwgYnVzb3VjaHV1cml0c3VcIDsKK+W5s+WSjOWNlOWKmyA8IGhlaXdha3lvdXJ5b2t1XCA7CivmjIflkI3miYvphY3kurogPCBzaGltZWl0ZWhhaWppblwgOwor6Zu76YmE5Lya56S+IDwgZGVudGV0c3VnYWlzaGFcIDsKK+iHqui7oui7iuaXheihjCA8IGppdGVuc2hhcnlva291XCA7Civlh7rluK3ml6XmlbAgPCBzaHVzc2VraW5pc3N1dVwgOwor55yM56uL55eF6ZmiIDwga2Vucml0c3VieW91aW5cIDsKK+W5s+Wdh+WkqumZveaZgiA8IGhlaWtpbnRhaXlvdWppXCA7CivlgY/ml4HlhqDohJogPCBoZW5ib3VrYW5reWFrdVwgOwor5aW95rCX5oCn57Sw6I+MIDwga291a2lzZWlzYWlraW5cIDsKK+iyqeWjsuS/g+mAsiA8IGhhbmJhaXNva3VzaGluXCA7Civkv6HoqJfmipXos4cgPCBzaGludGFrdXRvdXNoaVwgOwor6Zu75rOi5pyb6YGg6Y+hIDwgZGVucGFib3Vlbmt5b3VcIDsKK+S4reWwj+S8gealrSA8IGNodXVzaG91a2lneW91XCA7CivkuInooYzluoPlkYogPCBzYW5neW91a291a29rdVwgOwor6KGA5ray5b6q55KwIDwga2V0c3Vla2lqdW5rYW5cIDsKK+mAo+e1kOaxuueulyA8IHJlbmtldHN1a2Vzc2FuXCA7CivOuOeQhuirliA8IHNoaVwgzIR0YVwgzIRyaXJvblwgOwor5pS55pyt6YuPIDwga2Fpc2F0c3VoYXNhbWlcIDsKK+mqqOi7n+WMlueXhyA8IGtvdHN1bmFua2FzaG91XCA7CivlirTlg43pgYvli5XogIUgPCByb3Vkb3V1bmRvdXNoYVwgOwor5pS/5rK75ZOy5a2mIDwgc2Vpaml0ZXRzdWdha3VcIDsKK+WVhualreaUvumAgSA8IHNob3VneW91aG91c291XCA7Civlm73pmLLnt4/nnIEgPCBrb2t1Ym91c291c2hvdVwgOwor55Sf5rS75oyH5bCOIDwgc2Vpa2F0c3VzaGlkb3VcIDsKK+eCjueGseWcsOeNhCA8IGVuJyduZXRzdWppZ29rdVwgOwor5YWr6Z2i546y55OPIDwgaGFjaGltZW5yZWlyb3VcIDsKK+mdouS8muisnee1tiA8IG1lbmthaXNoYXpldHN1XCA7CivpgZPot6/mqJnorZggPCBkb3Vyb2h5b3VzaGlraVwgOwor5Zu95Za26YCa5L+hIDwga29rdWVpdHN1dXNoaW5cIDsKK+mch+eBveiomOW/teaXpSA8IHNoaW5zYWlraW5lbmJpXCA7CivpganmnZDpganmiYAgPCB0ZWtpemFpdGVraXNob1wgOwor5YqH55eH6IKd54KOIDwgZ2VraXNob3VrYW4nJ2VuXCA7Civnianmg4XpqJLnhLYgPCBidXRzdWpvdXNvdXplblwgOwor5b+d5raZIDwga2F0YWppa2VuYW1pZGFcIDsKK+WFrOawkeeUn+a0uyA8IGtvdW1pbnNlaWthdHN1XCA7CivlhaXlraboqabpqJMgPCBueXV1Z2FrdXNoaWtlblwgOwor5oKq5b6z5pS/5rK75a62IDwgYWt1dG9rdXNlaWppa2FcIDsKK+aDheWgseS4u+imgee0oCA8IGpvdWhvdXNodXlvdXNvXCA7CivlkIjllLHpmorplbcgPCBnYXNzaG91dGFpY2hvdVwgOwor5Lm+54el54mb5LmzIDwga2Fuc291Z3l1dW55dXVcIDsKK+ebtOezu+WwiuWxniA8IGNob2trZWlzb256b2t1XCA7CivlhaXlrabpoZjmm7ggPCBueXV1Z2FrdWdhbnNob1wgOwor5Ye655m65pmC6ZaTIDwgc2h1cHBhdHN1amlrYW5cIDsKK+S4u+imgeS6uueJqSA8IHNodXlvdWppbmJ1dHN1XCA7CivlhazmrablkIjkvZPoq5YgPCBrb3VidWdhdHRhaXJvblwgOwor5LiN5p2f6ICFIDwgZnV0c3V0c3VrYW1vbm9cIDsKK+eHleWNg+mzpSA8IHRzdWJhbWVjaGlkb3JpXCA7CivmloflrabkvZzlk4EgPCBidW5nYWt1c2FrdWhpblwgOwor6Zu75YWJ5o6y56S65p2/IDwgZGVua291a2VpamliYW5cIDsKK+i7veS+v+mJhOmBkyA8IGtlaWJlbnRldHN1ZG91XCA7CivlibLlvJXluILloLQgPCB3YXJpYmlraXNoaWpvdVwgOwor5aSx6Liq5a6j5ZGKIDwgc2hpc3NvdXNlbmtva3VcIDsKK+WMluWtpue1kOWQiCA8IGthZ2FrdWtldHN1Z291XCA7Civkv53pmbrmlpnnjocgPCBob2tlbnJ5b3VyaXRzdVwgOwor5L6h6Zu75a2Q54q25oWLIDwga2FkZW5zaGlqb3V0YWlcIDsKK+S/oei2iuacrOe3miA8IHNoaW5ldHN1aG9uc2VuXCA7CivnpZ7ntYzkuK3mnqIgPCBzaGlua2VpY2h1dXN1dVwgOwor55m65YWJ5YuV54mpIDwgaGFra291ZG91YnV0c3VcIDsKK+awtOeUo+WKoOW3peWTgSA8IHN1aXNhbmtha291aGluXCA7CivlubPpnaLlub7kvZXlraYgPCBoZWltZW5raWthZ2FrdVwgOwor6KSH5byP54Gr5bGxIDwgZnVrdXNoaWtpa2F6YW5cIDsKK+WgheW/jeS4jeaKnCA8IGtlbicnbmluZnViYXRzdVwgOwor6ICQ5LmP55Sf5rS7IDwgdGFpYm91c2Vpa2F0c3VcIDsKK+ekvuS8mumAmuW/tSA8IHNoYWthaXRzdXVuZW5cIDsKK+aOpeWuouaFi+W6piA8IHNla2t5YWt1dGFpZG9cIDsKK+i7veeIhuaSg+apnyA8IGtlaWJha3VnZWtpa2lcIDsKK+WNl+adsSA8IG1pbmFtaWhpZ2FzaGlcIDsKK+e9suWQjeaNuuWNsCA8IHNob21laW5hdHN1aW5cIDsKK+S8keaGqeWupCA8IGt5dXVrZWlzaGl0c3VcIDsKK+iDuOmDqOeWvuaCoyA8IGt5b3VidXNoaWtrYW5cIDsKK+ixoeeJmeWPluW8lSA8IHpvdWdldG9yaWhpa2lcIDsKK+aXpeabnOWkp+W3pSA8IG5pY2hpeW91ZGFpa3VcIDsKK+ebrueOieWVhuWTgSA8IG1lZGFtYXNob3VoaW5cIDsKK+ijveiWrOS8muekviA8IHNlaXlha3VnYWlzaGFcIDsKK+aKleWFieeFp+aYjiA8IHRvdWtvdXNob3VtZWlcIDsKK+a4heW7iea9lOeZvSA8IHNlaXJlbmtlcHBha3VcIDsKK+iHqui7oui7iue9ruWgtCA8IGppdGVuc2hhb2tpYmFcIDsKK+aVteWJjemAg+S6oSA8IHRla2l6ZW50b3Vib3VcIDsKK+aXpeWIiuaWsOiBniA8IG5pa2thbnNoaW5idW5cIDsKK+aKseiFuee1tuWAkiA8IGhvdWZ1a3V6ZXR0b3VcIDsKK+aXpeayoeWJjSA8IG5pY2hpYm90c3V6ZW5cIDsKK+aVmeiCsuWnlOWToeS8miA8IGt5b3Vpa3VpaW5rYWlcIDsKK+aCquiZkOeEoemBkyA8IGFrdWd5YWt1bXVkb3VcIDsKK+awtOS4iumjm+ihjOapnyA8IHN1aWpvdWhpa291a2lcIDsKK+WOreS4luaCsuims+iAhSA8IGVuc2VpaGlrYW5zaGFcIDsKK+WbveWutuaoqeWKmyA8IGtva2tha2Vucnlva3VcIDsKK+WNl+a0i+iruOWztiA8IG5hbicneW91c2hvdG91XCA7CivlvozmnJ/ljbDosaHmtL4gPCBrb3VraWluc2hvdWhhXCA7Civlm5rkurrlirTlg40gPCBzaHV1amlucm91ZG91XCA7Civni5DmoLzlrZAgPCBraXRzdW5lZ291c2hpXCA7CivliqPnrYnoprPlv7UgPCByZXR0b3VrYW4nJ25lblwgOwor6Zai5L+C5a6Y5bqBIDwga2Fua2Vpa2FuY2hvdVwgOwor6L6y5rCR5paH5a2mIDwgbm91bWluYnVuZ2FrdVwgOwor6Ieq54S254++6LGhIDwgc2hpemVuZ2Vuc2hvdVwgOwor6IWO6IeT57WQ55+zIDwgamluem91a2Vzc2VraVwgOwor5Y+k5YW1IDwgZnVydXRzdXdhbW9ub1wgOwor5pa95pS/5pa56YedIDwgc2hpc2VpaG91c2hpblwgOwor6Zay6Kan5a6kIDwgZXRzdXJhbnNoaXRzdVwgOwor5aSp56u65rWq5Lq6IDwgdGVuamlrdXJvdW5pblwgOwor5bu656+J54mpIDwga2VuY2hpa3VidXRzdVwgOwor6ZyK6a2C5LiN5ruFIDwgcmVpa29uZnVtZXRzdVwgOwor5YWs5YWx57WE5ZCIIDwga291a3lvdWt1bWlhaVwgOwor5pyJ57ea6Zu75L+hIDwgeXV1c2VuZGVuc2hpblwgOwor6KGA6KGM6Zqc5a6zIDwga2Vra291c2hvdWdhaVwgOwor5Lq655qE6LOH5rqQIDwgamludGVraXNoaWdlblwgOwor5Zyw5pa56KGM5pS/IDwgY2hpaG91Z3lvdXNlaVwgOwor6ZyH5aSp5YuV5ZywIDwgc2hpbnRlbmRvdWNoaVwgOwor56ys5LiJ5bid5Zu9IDwgZGFpc2FudGVpa29rdVwgOwor5aSn6KaP5qih5oim5LqJIDwgZGFpa2lib3NlbnNvdVwgOwor5a6f6LOq55qEIDwgamlzc2hpdHN1dGVraVwgOwor5aSp5paH5a2m6ICFIDwgdGVubW9uZ2FrdXNoYVwgOwor5rex5aSc5pS+6YCBIDwgc2hpbicneWFob3Vzb3VcIDsKK+mfs+WjsOW9ouW8jyA8IG9uc2Vpa2Vpc2hpa2lcIDsKK+S6pOmAmuWVj+mhjCA8IGtvdXRzdXVtb25kYWlcIDsKK+WFrOWFseaKleizhyA8IGtvdWt5b3V0b3VzaGlcIDsKK+WKg+aZguS7o+eahCA8IGtha3VqaWRhaXRla2lcIDsKK+WQjOaXj+S8muekviA8IGRvdXpva3VnYWlzaGFcIDsKK+W/g+eQhuaPj+WGmSA8IHNoaW5yaWJ5b3VzaGFcIDsKK+aKgOihk+awtOa6liA8IGdpanV0c3VzdWlqdW5cIDsKK+eEoeaLheS/neekvuWCtSA8IG11dGFucG9zaGFzYWlcIDsKK+eQhuWtpuWNmuWjqyA8IHJpZ2FrdWhha3VzaGlcIDsKK+WxgOaJgOm6u+mFlCA8IGt5b2t1c2hvbWFzdWlcIDsKK+eUo+WIpeS8muitsCA8IHNhbmJldHN1a2FpZ2lcIDsKK+e/jOOAheaXpSA8IHlva3V5b2t1aml0c3VcIDsKK+WwseWtpuWFkOerpSA8IHNodXVnYWt1amlkb3VcIDsKK+epuuS4ree1puayuSA8IGt1dWNodXVreXV1eXVcIDsKK+Wbvemam+imj+agvCA8IGtva3VzYWlraWtha3VcIDsKK+WtpuagoeaWsOiBniA8IGdha2tvdXNoaW5idW5cIDsKK+ippuiBtOWupCA8IHNoaWNob3VzaGl0c3VcIDsKK+aDheWgseeUo+alrSA8IGpvdWhvdXNhbmd5b3VcIDsKK+eZu+mMsueVquWPtyA8IHRvdXJva3ViYW5nb3VcIDsKK+Wcn+acqOW3peWtpiA8IGRvYm9rdWtvdWdha3VcIDsKK+eUn+S9k+WPjeW/nCA8IHNlaXRhaWhhbicnbm91XCA7Civni7jlm4PlrZAgPCB0YW51a2liYXlhc2hpXCA7CivosaHlvrTkuLvnvqkgPCBzaG91Y2hvdXNodWdpXCA7Civpn7Pmpb3mlZnogrIgPCBvbmdha3VreW91aWt1XCA7CivoprPmuKzlnLDngrkgPCBrYW5zb2t1Y2hpdGVuXCA7CivpgaDlv4PliIbpm6LmqZ8gPCBlbnNoaW5idW5yaWtpXCA7CivmpI3mr5vooZMgPCBzaG9rdW1vdWp1dHN1XCA7CivmioDooZPlkIzlo6sgPCBnaWp1dHN1ZG91c2hpXCA7Civlv5zmgKXmlLvmkoMgPCBvdWt5dXVrb3VnZWtpXCA7CivlkIzku4HmlZnkvJogPCBkb3VqaW5reW91a2FpXCA7Civlrp/lg43mmYLplpMgPCBqaXRzdWRvdWppa2FuXCA7CivpnZLnqbrpp5Dou4ogPCBhb3pvcmFjaHV1c2hhXCA7Civpm7vlipvovLjpgIEgPCBkZW5yeW9rdXl1c291XCA7Civou43pmormlZnogrIgPCBndW50YWlreW91aWt1XCA7CivpgaDmtIvmvIHmpa0gPCBlbicneW91Z3lvZ3lvdVwgOwor5pen5q2j5pyIIDwga3l1dXNob3VnYXRzdVwgOwor5L+d6Zqc5Y2g6aCYIDwgaG9zaG91c2VucnlvdVwgOwor5Lqk5o+b5rOV5YmHIDwga291a2FuaG91c29rdVwgOwor54m95byV55mC5rOVIDwga2VuJydpbnJ5b3Vob3VcIDsKK+mnheS8neertui1sCA8IGVraWRlbmt5b3Vzb3VcIDsKK+WIh+atr+aJvOiFlSA8IHNlc3NoaXlha3V3YW5cIDsKK+S4uOm8u+icgiA8IG1hcnVoYW5hYmFjaGlcIDsKK+Wbo+S9k+S6pOa4iSA8IGRhbnRhaWtvdXNob3VcIDsKK+iEmuiJsuiAhSA8IGt5YWt1c2hva3VzaGFcIDsKK+S6reS4u+mWoueZvSA8IHRlaXNodWthbnBha3VcIDsKK+S4gOauteWLleipniA8IGljaGlkYW5kb3VzaGlcIDsKK+S4gOiIrOW5leWDmiA8IGlwcGFuYmFrdXJ5b3VcIDsKK+WvneWPsOWIl+i7iiA8IHNoaW5kYWlyZXNzaGFcIDsKK+aKleaTsuertuaKgCA8IHRvdXRla2lreW91Z2lcIDsKK+adsea1t+WyuCA8IGhpZ2FzaGlrYWlnYW5cIDsKK+awl+ixoemAmuWgsSA8IGtpc2hvdXRzdXVob3VcIDsKK+mWi+aekOWPsOWcsCA8IGthaXNla2lkYWljaGlcIDsKK+WGhei4nSA8IHVjaGlrdXJ1YnVzaGlcIDsKK+Wun+eUqOS4u+e+qSA8IGppdHN1eW91c2h1Z2lcIDsKK+ebtOeri+iMjiA8IGNob2t1cml0c3VrZWlcIDsKK+eZvembquWnqyA8IHNoaXJheXVraWhpbWVcIDsKK+W3peWgtOWun+e/kiA8IGtvdWpvdWppc3NodXVcIDsKK+S4ree2meiyv+aYkyA8IGNodXVrZWlib3Vla2lcIDsKK+aAp+iDveeJueaApyA8IHNlaW5vdXRva3VzZWlcIDsKK+mbu+awl+WGt+iUteW6qyA8IGRlbmtpcmVpem91a29cIDsKK+acgOW+jOmAmueJkiA8IHNhaWdvdHN1dWNob3VcIDsKK+acgOS9jua4qeW6puioiCA8IHNhaXRlaW9uZG9rZWlcIDsKK+Wbvemam+e1kOWpmiA8IGtva3VzYWlrZWtrb25cIDsKK+mAoOacrOaKgOihkyA8IHpvdWhvbmdpanV0c3VcIDsKK+WmqOWus+W3peS9nCA8IGJvdWdhaWtvdXNha3VcIDsKK+aWreeGseeahCA8IGRhbicnbmV0c3V0ZWtpXCA7CivmsJHml4/mhI/orZggPCBtaW56b2t1aXNoaWtpXCA7Civms6XnuITlvI8gPCBkb3JvbmF3YXNoaWtpXCA7CivotIXmsqLkuInmmKcgPCB6ZWl0YWt1emFubWFpXCA7CivlhpnnnJ/oo73niYggPCBzaGFzaGluc2VpaGFuXCA7CivoprPplrLlvI8gPCBrYW4nJ2V0c3VzaGlraVwgOwor5a2m5qCh5pWZ6IKyIDwgZ2Fra291a3lvdWlrdVwgOwor6Zyn5Lit5L+h5Y+3IDwgbXVjaHV1c2hpbmdvdVwgOwor57K+56We54q25oWLIDwgc2Vpc2hpbmpvdXRhaVwgOwor5ZWG56eR5aSn5a2mIDwgc2hvdWthZGFpZ2FrdVwgOwor5ZC45rm/5oCnIDwga3l1dXNoaXRzdXNlaVwgOwor5raI5qW155qEIDwgc2hvdWt5b2t1dGVraVwgOwor6aGn5ZWP5byB6K235aOrIDwga29tb25iZW5nb3NoaVwgOwor5YaZ55yf57WQ5amaIDwgc2hhc2hpbmtla2tvblwgOwor5YWx5ZCM5oim57eaIDwga3lvdWRvdXNlbnNlblwgOwor54Gr5bGx5rS75YuVIDwga2F6YW5rYXRzdWRvdVwgOwor6bqm56iI57Sw5belIDwgbXVnaXdhcmF6YWlrdVwgOwor5oiR5Yip5oiR5Yip5Lqh6ICFIDwgZ2FyaWdhcmltb3VqYVwgOwor5Yuk5Yq05omA5b6XIDwga2lucm91c2hvdG9rdVwgOwor6aaW55u45a6Y6YK4IDwgc2h1c2hvdWthbnRlaVwgOwor6Kqt5pu45LiJ5pinIDwgZG9rdXNob3phbm1haVwgOwor5Lit562J5pWZ5ZOhIDwgY2h1dXRvdWt5b3VpblwgOwor5LiA5qyh6Zu75rWBIDwgaWNoaWppZGVucnl1dVwgOwor5Y+w5Lit6Zai5L+CIDwgdGFpY2h1dWthbmtlaVwgOwor56eY5a+G57WQ56S+IDwgaGltaXRzdWtlc3NoYVwgOwor5p2x5pa55ouh5aSnIDwgdG91aG91a2FrdWRhaVwgOwor5ryC5rWB54mpIDwgaHlvdXJ5dXVidXRzdVwgOwor6L+R6Zqj6Ku45Zu9IDwga2lucmluc2hva29rdVwgOwor5Yq05YON6ZqO57SaIDwgcm91ZG91a2Fpa3l1dVwgOwor6LKe5pON6Kaz5b+1IDwgdGVpc291a2FuJyduZW5cIDsKK+awkemWk+S8neaJvyA8IG1pbmthbmRlbnNob3VcIDsKK+iGgOiDsee1kOefsyA8IGJvdWtvdWtlc3Nla2lcIDsKK+i7ouWxhemAmuefpSA8IHRlbmt5b3RzdXVjaGlcIDsKK+e0lOato+aVsOWtpiA8IGp1bnNlaXN1dWdha3VcIDsKK+eUt+eIteWkq+S6uiA8IGRhbnNoYWt1ZnVqaW5cIDsKK+S4i+S6jOahgSA8IHNoaW1vZnV0YWtldGFcIDsKK+S6jOehq+WMlueCree0oCA8IG5pcnl1dWthdGFuc29cIDsKK+WhqeiUtemjn+WTgSA8IGVuem91c2hva3VoaW5cIDsKK+S4gOiHtOWbo+e1kCA8IGl0Y2hpZGFua2V0c3VcIDsKK+itpuWvn+WbveWutiA8IGtlaXNhdHN1a29ra2FcIDsKK+e1jOa4iOeZveabuCA8IGtlaXphaWhha3VzaG9cIDsKK+epgOWAieWcsOW4ryA8IGtva3Vzb3VjaGl0YWlcIDsKK+aGgumsseizqiA8IHl1dXV0c3VzaGl0c3VcIDsKK+aXqeacn+itpuaIkuapnyA8IHNvdWtpa2Vpa2Fpa2lcIDsKK+eSsOWig+S6i+alrSA8IGthbmt5b3VqaWd5b3VcIDsKK+e3j+WQiOWVhuekviA8IHNvdWdvdXNob3VzaGFcIDsKK+S/hOaIkOmHkSA8IG5pd2FrYW5hcmlraW5cIDsKK+WwkeW5tOWKtOWDjSA8IHNob3VuZW5yb3Vkb3VcIDsKK+S4gOaMmeS4oeW+lyA8IGlra3lvcnlvdXRva3VcIDsKK+a4rOWumuijhee9riA8IHNva3V0ZWlzb3VjaGlcIDsKK+WJjeihm+e+juihkyA8IHplbicnZWliaWp1dHN1XCA7Civmp4vpgKDpgbrkvJ3lrZAgPCBrb3V6b3VpZGVuc2hpXCA7Civnmobml6LmnIjpo58gPCBrYWlraWdlc3Nob2t1XCA7Civlhazlm6PkvY/lroUgPCBrb3VkYW5qdXV0YWt1XCA7CivoqK3lgpnmipXos4cgPCBzZXRzdWJpdG91c2hpXCA7Civml6XluLjojLbpo68gPCBuaWNoaWpvdXNhaGFuXCA7CivnvqTpm4blv4PnkIYgPCBndW5zaHV1c2hpbnJpXCA7Civnmb7miKbnt7Tno6ggPCBoeWFrdXNlbnJlbm1hXCA7CivljbPoiIjoqankurogPCBzb2treW91c2hpamluXCA7CivlloTpmqPmlL/nrZYgPCB6ZW5yaW5zZWlzYWt1XCA7CivliY3lj5flj47nm4ogPCBtYWV1a2VzaHV1ZWtpXCA7CivpnZLpioXlmajmmYLku6MgPCBzZWlkb3VraWppZGFpXCA7Civlm73msJHnmoblhbUgPCBrb2t1bWlua2FpaGVpXCA7Civpqqjnm7jlrabogIUgPCBrb3Nzb3VnYWt1c2hhXCA7CivmiLjliKXoqKrllY8gPCBrb2JldHN1aG91bW9uXCA7CivniIblvL7lo7DmmI4gPCBiYWt1ZGFuc2VpbWVpXCA7CivpgZPmpb3mga/lrZAgPCBkb3VyYWt1bXVzdWtvXCA7CivoiIzpvJMgPCBzaGl0YXRzdWR6dW1pXCA7Civlj47nqavniakgPCBzaHV1a2FrdWJ1dHN1XCA7Civosrjku5jph5EgPCBrYXNoaXRzdWtla2luXCA7CivnmZLlgrfntYTnuZQgPCB5dXNob3Vzb3NoaWtpXCA7CivnlLflrZDlrabnlJ8gPCBkYW5zaGlnYWt1c2VpXCA7Civli5XnianpgZQgPCBkb3VidXRzdXRhY2hpXCA7CivosqvpgJrpioPlibUgPCBrYW50c3V1anV1c291XCA7Civpo5/ns6fluoEgPCBzaG9rdXJ5b3VjaG91XCA7CivkvJroqIjmpJzmn7vpmaIgPCBrYWlrZWlrZW5zYWluXCA7CivmlrDpg47mlrDlqaYgPCBzaGlucm91c2hpbnB1XCA7CivnqbrmjLrkvZzmiKYgPCBrdXV0ZWlzYWt1c2VuXCA7CivphY3nrqHlt6Xmpa0gPCBoYWlrYW5rb3VneW91XCA7CivlroflrpnpgJrkv6EgPCB1Y2h1dXRzdXVzaGluXCA7Civohbrnl4Xos6ogPCBzZW5ieW91c2hpdHN1XCA7CivnrYnmr5TmlbDliJcgPCB0b3VoaXN1dXJldHN1XCA7CivluorkuIrmtbjmsLQgPCB5dWthdWVzaGluc3VpXCA7Civoh6rnhLbnkrDlooMgPCBzaGl6ZW5rYW5reW91XCA7Civml6XkuK3miKbkuokgPCBuaXRjaHV1c2Vuc291XCA7CivmsJHntIToqqwgPCBtaW4nJ3lha3VzZXRzdVwgOwor5ZC45rm/5YmkIDwga3l1dXNoaXRzdXphaVwgOwor5LqM562L6YGTIDwgZnV0YXN1amltaWNoaVwgOwor5Y2K6ZW36Z20IDwgaGFuJyduYWdhZ3V0c3VcIDsKK+aomemhjOmfs+alvSA8IGh5b3VkYWlvbmdha3VcIDsKK+agoemVt+WupCA8IGtvdWNob3VzaGl0c3VcIDsKK+WKo+etieikh+WQiCA8IHJldHRvdWZ1a3Vnb3VcIDsKK+ecvOeQg+mKgOihjCA8IGdhbmt5dXVnaW5rb3VcIDsKK+axuuaWreWKmyA8IGtldHN1ZGFucnlva3VcIDsKK+W4guWgtOWIhuaekCA8IHNoaWpvdWJ1bnNla2lcIDsKK+S4remWk+ippumokyA8IGNodXVrYW5zaGlrZW5cIDsKK+iovOWIuOS8muekviA8IHNob3VrZW5nYWlzaGFcIDsKK+a8j+ipsee1kOWQiCA8IHJvdXdhZ2V0c3Vnb3VcIDsKK+Wbvemam+e0m+S6iSA8IGtva3VzYWlmdW5zb3VcIDsKK+mbhuWbo+ihjOWLlSA8IHNodXVkYW5rb3Vkb3VcIDsKK+i7iuS4oee4pumaiiA8IHNoYXJ5b3VqdXV0YWlcIDsKK+S6pOS7o+aTjealrSA8IGtvdXRhaXNvdWd5b3VcIDsKK+S9nOiAheacquipsyA8IHNha3VzaGFtaXNob3VcIDsKK+ilv+acrOmhmOWvuiA8IG5pc2hpaG9uZ2FuamlcIDsKK+awuOS7o+WAn+WcsCA8IGVpdGFpc2hha3VjaGlcIDsKK+W3ruWHuuS6uiA8IHNhc2hpZGFzaGluaW5cIDsKK+S4g+abnOihqCA8IHNoaWNoaXlvdWh5b3VcIDsKK+WtkOWurueti+iFqyA8IHNoaWt5dXVraW5zaHVcIDsKK+WIh+aJi+iSkOmbhiA8IGtpdHRlc2h1dXNodXVcIDsKK+mmluS9jeaUu+mYsuaIpiA8IHNodWlrb3Vib3VzZW5cIDsKK+WFqOaWueS9jeWkluS6pCA8IHplbmhvdWlnYWlrb3VcIDsKK+WumOiyu+eVmeWtpiA8IGthbnBpcnl1dWdha3VcIDsKK+e3qOmbhuS4u+W5uSA8IGhlbnNodXVzaHVrYW5cIDsKK+eUn+eUo+aKgOihkyA8IHNlaXNhbmdpanV0c3VcIDsKK+awtOW5s+W/nOWKmyA8IHN1aWhlaW91cnlva3VcIDsKK+WFiOerr+aKgOihkyA8IHNlbnRhbmdpanV0c3VcIDsKK+elnuWurueQg+WgtCA8IGppbmd1dWt5dXVqb3VcIDsKK+eBsOe3keiJsiA8IGthaXJ5b2t1c2hva3VcIDsKK+acrOizqueahCA8IGhvbnNoaXRzdXRla2lcIDsKK+eEoeS6uuWMluW3peWgtCA8IG11amlua2Frb3Vqb3VcIDsKK+mfs+alveWkp+WtpiA8IG9uZ2FrdWRhaWdha3VcIDsKK+S+teeVpeihjOeCuiA8IHNoaW5yeWFrdWtvdWlcIDsKK+WFpeWwhOWFiee3miA8IG55dXVzaGFrb3VzZW5cIDsKK+S4ieinkuWHveaVsCA8IHNhbmtha3VrYW5zdXVcIDsKK+eri+S9k+WGmeecnyA8IHJpdHRhaXNoYXNoaW5cIDsKK+Wbvemam+mWouS/giA8IGtva3VzYWlrYW5rZWlcIDsKK+a1hOWcn+ecn+WulyA8IGpvdWRvc2hpbnNodXVcIDsKK+S4ieWbveWQjOebnyA8IHNhbmdva3Vkb3VtZWlcIDsKK+eBq+S6i+WgtOazpeajkiA8IGthamliYWRvcm9ib3VcIDsKK+mpmuWkqeWLleWcsCA8IGt5b3V0ZW5kb3VjaGlcIDsKK+epuuS4rea7kei1sCA8IGt1dWNodXVrYXNzb3VcIDsKK+Wbvemam+WVj+mhjCA8IGtva3VzYWltb25kYWlcIDsKK+axguW/g+WKmyA8IGt5dXVzaGlucnlva3VcIDsKK+ekvuWklueZuuS/oSA8IHNoYWdhaWhhc3NoaW5cIDsKK+i3s+aigei3i+aJiCA8IGNob3VyeW91YmFra29cIDsKK+mbhuS4reegsueBqyA8IHNodXVjaHV1aG91a2FcIDsKK+S6uuW3peaghOmkiuWFkCA8IGppbmtvdWVpeW91amlcIDsKK+S6uumWk+W3peWtpiA8IG5pbmdlbmtvdWdha3VcIDsKK+i6q+WFg+eiuuiqjSA8IG1pbW90b2tha3VuaW5cIDsKK+e1kOWbo+W8jyA8IGtldHN1ZGFuc2hpa2lcIDsKK+W3ruWIpeW+hemBhyA8IHNhYmV0c3V0YWlndXVcIDsKK+WNg+mzpeagvOWtkCA8IGNoaWRvcmlnb3VzaGlcIDsKK+S7j+WDj+S6jOS9kyA8IGJ1dHN1em91bml0YWlcIDsKK+WFqOaZr+WGmeecnyA8IHplbmtlaXNoYXNoaW5cIDsKK+WFrOWFseWbo+S9kyA8IGtvdWt5b3VkYW50YWlcIDsKK+aUueacreWPoyA8IGthaXNhdHN1Z3VjaGlcIDsKK+Wghuepjei8quW7uyA8IHRhaXNla2lyaW4nJ25lXCA7CivkuIDoiKznlJ/mtLsgPCBpcHBhbnNlaWthdHN1XCA7CivmrKfnsbPoq7joqIDoqp4gPCBvdWJlaXNob2dlbmdvXCA7CivmqKrmsrPpm7vmqZ8gPCB5b2tvZ2F3YWRlbmtpXCA7CivkuK3ntpnmlL7pgIEgPCBjaHV1a2VpaG91c291XCA7CivnpoHmraLmnaHntIQgPCBraW5zaGlqb3V5YWt1XCA7Civlhajlm73mlL7pgIEgPCB6ZW5rb2t1aG91c291XCA7Civkurrlt6XlrbXljJbms5UgPCBqaW5rb3VmdWthaG91XCA7CivlhZrliKnlhZrnlaUgPCB0b3VyaXRvdXJ5YWt1XCA7CivnuYHmrpblipsgPCBoYW5zaG9rdXJ5b2t1XCA7CivlpJbkuqTkuqTmuIkgPCBnYWlrb3Vrb3VzaG91XCA7Civlrablo6vpmaLos54gPCBnYWt1c2hpaW5zaG91XCA7CivooYzli5XoqIjnlLsgPCBrb3Vkb3VrZWlrYWt1XCA7CivlhbHmnInosqHnlKMgPCBreW91eXV1emFpc2FuXCA7CivpgLjlpLHliKnnm4ogPCBpc3NoaXRzdXJpZWtpXCA7CivovrLlnLDmlLnpnakgPCBub3VjaGlrYWlrYWt1XCA7Civlm4PlrZDoqZ4gPCBoYXlhc2hpa290b2JhXCA7CivkuqTpgJrmuIvmu54gPCBrb3V0c3V1anV1dGFpXCA7CivnpZ7ntYzntLDog54gPCBzaGlua2Vpc2FpYm91XCA7Civkurrlt67mjIcgPCBoaXRvc2FzaGl5dWJpXCA7CivkuIPpnaLps6UgPCBzaGljaGltZW5jaG91XCA7Civmpa3nlYzlm6PkvZMgPCBneW91a2FpZGFudGFpXCA7Civli6flloTmh7LmgqogPCBrYW56ZW5jaG91YWt1XCA7CivlhbHnlKPpmaPllrYgPCBreW91c2FuamluJydlaVwgOwor5qyg5bit6KOB5YikIDwga2Vzc2VraXNhaWJhblwgOwor5Y2K6Z2p6KOF5LiBIDwgaGFua2F3YXNvdXRlaVwgOwor56u25LqJ5biC5aC0IDwga3lvdXNvdXNoaWpvdVwgOwor55m66KiA5YqbIDwgaGF0c3VnZW5yeW9rdVwgOwor55+l55qE6LKh55SjIDwgY2hpdGVraXphaXNhblwgOwor5Y2X5YyX5ZWP6aGMIDwgbmFuYm9rdW1vbmRhaVwgOwor6LuN5LqL6aGn5ZWP5ZujIDwgZ3Vuamlrb21vbmRhblwgOwor6auY5bGk5aSp5rCX5ZuzIDwga291c291dGVua2l6dVwgOwor56qB54S25aSJ55WwIDwgdG90c3V6ZW5oZW4nJ2lcIDsKK+mBqeW/nOmanOWusyA8IHRla2lvdXNob3VnYWlcIDsKK+WHuuS4lumgrSA8IHNodXNzZWdhc2hpcmFcIDsKK+a3t+i8ieiyqOeJqSA8IGtvbnNhaWthbW90c3VcIDsKK+mbhuS4reWKmyA8IHNodXVjaHV1cnlva3VcIDsKK+iAkOmanOWus+aApyA8IHRhaXNob3VnYWlzZWlcIDsKK+i/keimquebuOWnpiA8IGtpbnNoaW5zb3VrYW5cIDsKK+WxiOi+seeahCA8IGt1dHN1am9rdXRla2lcIDsKK+Wkp+mBk+WVhuS6uiA8IGRhaWRvdXNob3VuaW5cIDsKK+S4jeS/oeS7u+ahiCA8IGZ1c2hpbicnbmluJydhblwgOwor5Luu6Z2i6Iie6LiP5LyaIDwga2FtZW5idXRvdWthaVwgOwor5a6u5bu36Z+z5qW9IDwga3l1dXRlaW9uZ2FrdVwgOwor5ZWG5aOy5pW1IDwgc2hvdWJhaWdhdGFraVwgOwor5Ye655Sf5bGKIDwgc2h1c3NlaXRvZG9rZVwgOwor57ep6KGd5Zyw5bivIDwga2Fuc2hvdWNoaXRhaVwgOwor6KGA5riF5rOo5bCEIDwga2Vzc2VpY2h1dXNoYVwgOwor6ISx542E5ZuaIDwgZGF0c3Vnb2t1c2h1dVwgOwor5Yqg57OW57KJ5LmzIDwga2F0b3VmdW4nJ255dXVcIDsKK+Wcn+eUo+ipsSA8IG1peWFnZWJhbmFzaGlcIDsKK+S/oeiyqeS8muekviA8IHNoaW5wYW5nYWlzaGFcIDsKK+WNgeS4gOeMrumHkSA8IGp1dWljaGlrZW5raW5cIDsKK+emj+elieS6i+alrSA8IGZ1a3VzaGlqaWd5b3VcIDsKK+aaluiho+mjvemjnyA8IGRhbicnaWhvdXNob2t1XCA7Civmupbmsbrli53miKYgPCBqdW5rZXNzaG91c2VuXCA7Civph47nlJ/li5XniakgPCB5YXNlaWRvdWJ1dHN1XCA7CivnpL7kvJrnj77osaEgPCBzaGFrYWlnZW5zaG91XCA7CivljJfmrKfoq7jlm70gPCBob2t1b3VzaG9rb2t1XCA7Civoh6rnhLbkvJHkvJogPCBzaGl6ZW5reXV1a2FpXCA7Civoia/kuozljYPnn7MgPCByeW91bmlzZW5zZWtpXCA7CivmloflrabpnZLlubQgPCBidW5nYWt1c2VpbmVuXCA7Civnmb3oo4XmnZ8gPCBzaGlyb3Nob3V6b2t1XCA7CivkvZzmpa3pg6jkvJrmoYggPCBzYWd5b3VidWthaWFuXCA7Civkv67pgZPoqpPpoZggPCBzaHV1ZG91c2VpZ2FuXCA7Civpo5/ns6fmj7TliqkgPCBzaG9rdXJ5b3VlbmpvXCA7CivooYborbDkuIDmsbogPCBzaHV1Z2lpa2tldHN1XCA7CivphbjntKDlkLjlhaUgPCBzYW5zb2t5dXVueXV1XCA7CivnlJ/oh63lnYrkuLsgPCBuYW1hZ3VzYWJvdXp1XCA7Civou43kuovmlr3oqK0gPCBndW5qaXNoaXNldHN1XCA7CivmmKDnlLvoqZXoq5blrrYgPCBlaWdhaHlvdXJvbmthXCA7Civpg7Xkvr/mjK/mm78gPCB5dXViaW5mdXJpa2FlXCA7Civmlrnph53msbrlrpogPCBob3VzaGlua2V0dGVpXCA7CivlsLHmpa3mmYLplpMgPCBzaHV1Z3lvdWppa2FuXCA7Civkurrlj6PmipHliLYgPCBqaW5rb3V5b2t1c2VpXCA7Civou43kurrmganntaYgPCBndW5qaW4nJ29ua3l1dVwgOwor5Lq65bel5rWB55SjIDwgamlua291cnl1dXphblwgOwor55yf5Ymj5Yud6LKgIDwgc2hpbmtlbnNob3VidVwgOwor6Zqg6YCA55Sf5rS7IDwgaW50YWlzZWlrYXRzdVwgOwor5a6I56eY576p5YuZ6YGV5Y+NIDwgc2h1aGlnaW11aWhhblwgOwor6IWw5be+552AIDwga29zaGlnaW5jaGFrdVwgOwor5b255ZOh5aCx6YWsIDwgeWFrdWluaG91c2h1dVwgOwor5Ymy5byV5pmC6ZaTIDwgd2FyaWJpa2lqaWthblwgOwor55m96JGh6JCE6YWSIDwgc2hpcm9idWRvdXNodVwgOwor5Y2K54af5Y21IDwgaGFuanVrdXRhbWFnb1wgOwor5Yi25pyN5Yi25bi9IDwgc2VpZnVrdXNlaWJvdVwgOwor5Y+k6Imy6JK854S2IDwga29zaG9rdXNvdXplblwgOwor55WZ572u6YO15L6/IDwgdG9tZW9raXl1dWJpblwgOwor6KiI55S75YCS55SjIDwga2Vpa2FrdXRvdXNhblwgOwor55qG5pei5pel6aOfIDwga2Fpa2luaXNzaG9rdVwgOwor5rKh5bi46K2YIDwgYm90c3Vqb3VzaGlraVwgOwor6ZuG5aG16KKLIDwgc2h1dWppbmJ1a3Vyb1wgOwor6YCj5oim6YCj5YudIDwgcmVuc2VucmVuc2hvdVwgOwor5Lqr5qW95Li7576pIDwga3lvdXJha3VzaHVnaVwgOwor5LiJ5LiL5aW0IDwgc2Fuc2hpdGF5YWtrb1wgOwor5bqD5ZGK5aqS5L2TIDwga291a29rdWJhaXRhaVwgOwor5Zu95rCR5a+p5p+7IDwga29rdW1pbnNoaW5zYVwgOwor5YGl6ICFIDwgc2hpdGF0YWthbW9ub1wgOwor5re35aOw5ZCI5ZSxIDwga29uc2VpZ2Fzc2hvdVwgOwor56We6YGT5L+h6ICFIDwgc2hpbnRvdXNoaW5qYVwgOwor5a6f5rOB5pS+6YCBIDwgamlra3lvdWhvdXNvdVwgOwor5YiG5YWJ5YiG5p6QIDwgYnVua291YnVuc2VraVwgOwor55Sj5qWt57WE5ZCIIDwgc2FuZ3lvdWt1bWlhaVwgOwor5Y+W5o2o6YG45oqeIDwgc2h1c2hhc2VudGFrdVwgOwor5Zyw6ZyH5a2m6ICFIDwgamlzaGluZ2FrdXNoYVwgOwor5aSn6Ziq5aSn5a2mIDwgb29zYWthZGFpZ2FrdVwgOwor56ys5LqM5qyh5aSn5oimIDwgZGFpbmlqaXRhaXNlblwgOwor56CU56m25pa55rOVIDwga2Vua3l1dWhvdWhvdVwgOwor5Zyw6LOq5a2mIDwgY2hpc2hpdHN1Z2FrdVwgOwor5pat6YOK56u26LWwIDwgZGFua291a3lvdXNvdVwgOwor5qW95bGL6KmxIDwgZ2FrdXlhYmFuYXNoaVwgOwor5q+U6LyD5paH5a2mIDwgaGlrYWt1YnVuZ2FrdVwgOwor5aOr6L6y5bel5ZWGIDwgc2hpbm91a291c2hvdVwgOwor5Lm+5Z2k5LiA5pOyIDwga2Vua29uJydpdHRla2lcIDsKK+WBnOatouS/oeWPtyA8IHRlaXNoaXNoaW5nb3VcIDsKK+W7uuevieePvuWgtCA8IGtlbmNoaWt1Z2VuYmFcIDsKK+WbvemAo+Wkp+S9vyA8IGtva3VyZW50YWlzaGlcIDsKK+ecieebruengOm6lyA8IGJpbW9rdXNodXVyZWlcIDsKK+aDhee3kumanOWusyA8IGpvdXNob3Nob3VnYWlcIDsKK+isueizgOaWsOW5tCA8IGtpbmdhc2hpbicnbmVuXCA7Civnt7Tnv5LllY/poYwgPCByZW5zaHV1bW9uZGFpXCA7CivkurrnlZznhKHlrrMgPCBqaW5jaGlrdW11Z2FpXCA7CivkuIrmtYHnpL7kvJogPCBqb3VyeXV1c2hha2FpXCA7CivlvLflparniakgPCBnb3VkYXRzdWJ1dHN1XCA7CivplpHml6XmnIggPCBrYW5qaXRzdWdldHN1XCA7Civpmbjmtbfnqbrou40gPCByaWt1a2Fpa3V1Z3VuXCA7Civph47mrKHppqzmoLnmgKcgPCB5YWppdW1ha29uam91XCA7CivnnJ/nm7joqr/mn7sgPCBzaGluc291Y2hvdXNhXCA7CivooajmlazoqKrllY8gPCBoeW91a2VpaG91bW9uXCA7Civmma7pgJrmlZnogrIgPCBmdXRzdXVreW91aWt1XCA7CivlhazmsJHmlZnogrIgPCBrb3VtaW5reW91aWt1XCA7CivmjJHnmbrnmoQgPCBjaG91aGF0c3V0ZWtpXCA7CivmsLTlrrPlr77nrZYgPCBzdWlnYWl0YWlzYWt1XCA7CivlsIbmnaXlsZXmnJsgPCBzaG91cmFpdGVuYm91XCA7CivlsIvllY/oqr/mm7ggPCBqaW5tb25jaG91c2hvXCA7CivnnYDlvL7ot53pm6IgPCBjaGFrdWRhbmt5b3JpXCA7CivlpKnnnJ/niJvmvKsgPCB0ZW5zaGlucmFubWFuXCA7Civlj43lsITnpZ7ntYwgPCBoYW5zaGFzaGlua2VpXCA7CivpnZLoibLnlLPlkYogPCBhb2lyb3NoaW5rb2t1XCA7CivpgKDlvaLnvo7ooZMgPCB6b3VrZWliaWp1dHN1XCA7Civlj7LnmoTnj77lnKggPCBzaGl0ZWtpZ2VuemFpXCA7CivnpZ3npa3ml6UgPCBzaHVrdXNhaWppdHN1XCA7CivlhoXpg6jnlJ/mtLsgPCBuYWlidXNlaWthdHN1XCA7Civmp4vpgKDoqJjov7AgPCBrb3V6b3VraWp1dHN1XCA7CivlhbHlrZjlhbHmoIQgPCBreW91em9ua3lvdWVpXCA7CivluK/nirbnlrHnlrkgPCB0YWlqb3Vob3VzaGluXCA7Civnj77lrp/kuLvnvqkgPCBnZW5qaXRzdXNodWdpXCA7CivlubTjgIXmrbPjgIUgPCBuZW4nJ25lbnNhaXNhaVwgOwor56CU56m26KuW5paHIDwga2Vua3l1dXJvbmJ1blwgOwor5pyA57WC57eo5oiQIDwgc2Fpc2h1dWhlbnNlaVwgOwor5bCC5L+u5a2m5qChIDwgc2Vuc2h1dWdha2tvdVwgOwor5b2r5Yi76KGTIDwgY2hvdWtva3VqdXRzdVwgOwor5Y+z5Lit5ous5bynIDwgbWlnaWNodXVrYWtrb1wgOwor5L+u6YGT6Zmi6ZW3IDwgc2h1dWRvdWluY2hvdVwgOwor5a62552j55u457aaIDwga2F0b2t1c291em9rdVwgOwor5a6/5ZG96KuW6ICFIDwgc2h1a3VtZWlyb25qYVwgOwor5rip5bqm6Kq/56+AIDwgb25kb2Nob3VzZXRzdVwgOwor6Iux5Lya6Kmx5a2m5qChIDwgZWlrYWl3YWdha2tvdVwgOwor6KiA6Kqe6IO95YqbIDwgZ2VuZ29ub3VyeW9rdVwgOwor5Yip5r2k6L+95rGCIDwgcmlqdW50c3Vpa3l1dVwgOwor57Wx546H55CG6KuWIDwgdG91c290c3VyaXJvblwgOwor5Lit56uL5Zu9IDwgY2h1dXJpdHN1a29rdVwgOwor5Zar54WZ5a6kIDwga2l0c3VlbnNoaXRzdVwgOwor6Imv6aKo576O5L+XIDwgcnlvdWZ1dWJpem9rdVwgOwor5Zu95rCR5a2m5qChIDwga29rdW1pbmdha2tvdVwgOwor5Y2Y54K655Sf5q6WIDwgdGFuJydpc2Vpc2hva3VcIDsKK+WJjeaWueS4jeazqOaEjyA8IHplbnBvdWZ1Y2h1dWlcIDsKK+S6jOWNgeaXpem8oCA8IGhhdHN1a2FuZXp1bWlcIDsKK+iyv+aYk+WPjuaUryA8IGJvdWVraXNodXVzaGlcIDsKK+S6uuW3peW/g+iHkyA8IGppbmtvdXNoaW56b3VcIDsKK+Wkqea0peaXpeWXoyA8IGFtYXRzdWhpdHN1Z2lcIDsKK+S4gOS4oeaXpSA8IGljaGlyeW91aml0c3VcIDsKK+e+pOmbhOWJsuaLoCA8IGd1bicneXV1a2Fra3lvXCA7CivlhYjlpKnmooXmr5IgPCBzZW50ZW5iYWlkb2t1XCA7Civkurrlt6Xlv4PogrogPCBqaW5rb3VzaGluYmFpXCA7CivlkbzlkLjkuK3mnqIgPCBrb2t5dXVjaHV1c3V1XCA7Civpp5DnlZnpg6jpmoogPCBjaHV1cnl1dWJ1dGFpXCA7CivmrrrnlJ/npoHmlq0gPCBzZXNzaG91a2luZGFuXCA7CivnhKHpiq3pgYroiIggPCBtdXNlbicneXV1a3lvdVwgOwor5Li75bit5YWo5qipIDwgc2h1c2VraXplbmtlblwgOwor5Zyw5pa55YWs5YuZ5ZOhIDwgY2hpaG91a291bXVpblwgOwor55Sy5LmZ5LiZ5LiBIDwga291b3RzdWhlaXRlaVwgOwor6KOc5qyg6YG45oyZIDwgaG9rZXRzdXNlbmt5b1wgOwor5qmL6ISa6IifIDwga3lvdWt5YWt1c2h1dVwgOwor5b6u6YeP5YiG5p6QIDwgYmlyeW91YnVuc2VraVwgOwor6Ieq5YuV6LKp5aOy5qmfIDwgamlkb3VoYW5iYWlraVwgOwor5Zyw5Z+f5Luj6KGoIDwgY2hpaWtpZGFpaHlvdVwgOwor55S75LiA5Li7576pIDwga2FrdWl0c3VzaHVnaVwgOwor5Lqs6YO95aSn5a2mIDwga3lvdXRvZGFpZ2FrdVwgOwor5rys54mp55+zIDwgdHN1a2Vtb25vaXNoaVwgOwor5aSW5Ye65LitIDwgZ2Fpc2h1dHN1Y2h1dVwgOwor6YmE5p+T6ImyIDwgdGV0c3VzZW5zaG9rdVwgOwor55Sf5L2T5bel5a2mIDwgc2VpdGFpa291Z2FrdVwgOwor54us56uL5b+DIDwgZG9rdXJpdHN1c2hpblwgOwor5rOh5rKr5YCZ6KOcIDwgaG91bWF0c3Vrb3Vob1wgOwor55u457aa6LKh55SjIDwgc291em9rdXphaXNhblwgOwor5a++5oim5oiQ57i+IDwgdGFpc2Vuc2Vpc2VraVwgOwor5Zu96Zqb56m65rivIDwga29rdXNhaWt1dWtvdVwgOwor5Zu96YCj57eP5LyaIDwga29rdXJlbnNvdWthaVwgOwor5LuK5pyI5pyrIDwga29uZ2V0c3VtYXRzdVwgOwor5bCC6ZaA5pWZ6IKyIDwgc2VubW9ua3lvdWlrdVwgOwor5Za25qWt5aCx5ZGKIDwgZWlneW91aG91a29rdVwgOwor6KGA5ray5qSc5p+7IDwga2V0c3Vla2lrZW5zYVwgOwor6Z2p5paw5Li7576pIDwga2FrdXNoaW5zaHVnaVwgOwor6Zyy5Ye65pmC6ZaTIDwgcm9zaHV0c3VqaWthblwgOwor6Zu756OB6Kq/55CG5ZmoIDwgZGVuamljaG91cmlraVwgOwor5oqV56Wo55So57SZIDwgdG91aHlvdXlvdXNoaVwgOwor5a6f54mp5aSnIDwgaml0c3VidXRzdWRhaVwgOwor6Jas55So55+z6bm4IDwgeWFrdXlvdXNla2tlblwgOwor5Y2Y54us6KGM5YuVIDwgdGFuZG9rdWtvdWRvdVwgOwor6Iiq56m66Ieq6KGb6ZqKIDwga291a3V1amllaXRhaVwgOwor5aSr5amm55Sf5rS7IDwgZnV1ZnVzZWlrYXRzdVwgOwor6IKJ5L2T6Zai5L+CIDwgbmlrdXRhaWthbmtlaVwgOwor6LuN5LqL6K2m5a+fIDwgZ3VuamlrZWlzYXRzdVwgOwor5paw5ama5peF6KGMIDwgc2hpbmtvbnJ5b2tvdVwgOwor6Zm95oCn5Y+N5b+cIDwgeW91c2VpaGFuJydub3VcIDsKK+i7uOW3ruW/nOWKmyA8IGppa3VzYW91cnlva3VcIDsKK+S6uumhnuWtpuiAhSA8IGppbnJ1aWdha3VzaGFcIDsKK+aLvuW+l+eJqSA8IHNodXV0b2t1YnV0c3VcIDsKK+atpuWjq+awl+izqiA8IGJ1c2hpa2lzaGl0c3VcIDsKK+esrOS4gOS6uuiAhSA8IGRhaWljaGluaW5zaGFcIDsKK+WAieaVt+aWmSA8IGt1cmFzaGlraXJ5b3VcIDsKK+izh+aWmeWupCA8IHNoaXJ5b3VzaGl0c3VcIDsKK+apn+mWouaKleizh+WutiA8IGtpa2FudG91c2hpa2FcIDsKK+WutuW6reeUn+a0uyA8IGthdGVpc2Vpa2F0c3VcIDsKK+WNsemZuuS6uueJqSA8IGtpa2VuamluYnV0c3VcIDsKK+Wkp+WtpuaVmeaOiCA8IGRhaWdha3VreW91anVcIDsKK+WJjemAsumBi+WLlSA8IHplbnNoaW4nJ3VuZG91XCA7CivmtLvli5XmiJDmnpwgPCBrYXRzdWRvdXNlaWthXCA7Civnt4/lkIjlj47mlK8gPCBzb3Vnb3VzaHV1c2hpXCA7CivosrfnianooosgPCBrYWltb25vYnVrdXJvXCA7CivlkLjlj47lipsgPCBreXV1c2h1dXJ5b2t1XCA7CivlkITpp4XlgZzou4ogPCBrYWt1ZWtpdGVpc2hhXCA7Civni6znq4vlm70gPCBkb2t1cml0c3Vrb2t1XCA7Civop6blqpLkvZznlKggPCBzaG9rdWJhaXNheW91XCA7Civnp5HlrabmioDooZMgPCBrYWdha3VnaWp1dHN1XCA7CivljbDliLfnlKjntJkgPCBpbnNhdHN1eW91c2hpXCA7Civlm57ot6/pga7mlq3mqZ8gPCBrYWlyb3NoYWRhbmtpXCA7CivkurrnmoToqLzmi6AgPCBqaW50ZWtpc2hvdWtvXCA7CivmipforbDmtLvli5UgPCBrb3VnaWthdHN1ZG91XCA7CivlhYjlj5blvpfngrkgPCBzZW5zaHV0b2t1dGVuXCA7CivmoZznpa0gPCBzYWt1cmFtYXRzdXJpXCA7CivopIflkIjkvIHmpa0gPCBmdWt1Z291a2lneW91XCA7CivnhKHlt67liKXntJogPCBtdXNhYmV0c3VreXV1XCA7CivlpJrlm73nsY3ou40gPCB0YWtva3VzZWtpZ3VuXCA7Civnq7bkuonkvqHmoLwgPCBreW91c291a2FrYWt1XCA7CivnpL7kvJrkurrmnqAgPCBzaGFrYWlqaW53YWt1XCA7CivllYbmpa3lnLDljLogPCBzaG91Z3lvdWNoaWt1XCA7CivooajlsaTmp4vpgKAgPCBoeW91c291a291em91XCA7Civnsr7npZ7ooZvnlJ8gPCBzZWlzaGluJydlaXNlaVwgOwor6KGA5bC/55eHIDwga2V0c3VueW91c2hvdVwgOwor6Iiq56m65YaZ55yfIDwga291a3V1c2hhc2hpblwgOwor5LiK5piH5rCX5rWBIDwgam91c2hvdWtpcnl1dVwgOwor5YyX5aSn6KW/5rSLIDwga2l0YXRhaXNlaXlvdVwgOwor6KGM5pS/5oyH5bCOIDwgZ3lvdXNlaXNoaWRvdVwgOwor5a6a572u5ryB5qWtIDwgdGVpY2hpZ3lvZ3lvdVwgOwor5pyA6auY57Sa5ZOBIDwgc2Fpa291a3l1dWhpblwgOwor5b2r5Yi754mpIDwgY2hvdWtva3VidXRzdVwgOwor5Ye66aCt5ZG95LukIDwgc2h1dHRvdW1laXJlaVwgOwor5aCq5b+N6KKLIDwga2FuJyduaW5idWt1cm9cIDsKK+WHuuihgOmBjuWkmiA8IHNodWtrZXRzdWthdGFcIDsKK+mbu+WtkOWHuueJiCA8IGRlbnNoaXNodXBwYW5cIDsKK+ekvumVt+WupCA8IHNoYWNob3VzaGl0c3VcIDsKK+iJsue0oOe0sOiDniA8IHNoaWtpc29zYWlib3VcIDsKK+iBlui3r+WKoOeXhemZoiA8IHNlaXJva2FieW91aW5cIDsKK+iKseWrgeiho+ijsyA8IGhhbmF5b21laXNob3VcIDsKK+Wwj+WPo+ePvumHkSA8IGtvZ3VjaGlnZW5raW5cIDsKK+WIhumbouS4u+e+qeiAhSA8IGJ1bnJpc2h1Z2lzaGFcIDsKK+WNmuWtpuWkmuaJjSA8IGhha3VnYWt1dGFzYWlcIDsKK+WkluanmOWkp+WQjSA8IHRvemFtYWRhaW15b3VcIDsKK+WbveawkeS4u+aoqSA8IGtva3VtaW5zaHVrZW5cIDsKK+WFrOmHkeaoqumgmCA8IGtvdWtpbicnb3VyeW91XCA7CivmhrLms5XoqJjlv7Xml6UgPCBrZW5wb3VraW5lbmJpXCA7Civov5Hpg4rovrLmpa0gPCBraW5rb3Vub3VneW91XCA7Civlhajlm73lpKfkvJogPCB6ZW5rb2t1dGFpa2FpXCA7CivlkJ/pgYroqankurogPCBnaW4nJ3l1dXNoaWppblwgOwor5Ya35rC05pGp5pOmIDwgcmVpc3VpbWFzYXRzdVwgOwor5puy5a2m6Zi/5LiWIDwga3lva3VnYWt1YXNlaVwgOwor5L6h5qC856u25LqJIDwga2FrYWt1a3lvdXNvdVwgOwor5Yqg5rib5oq15oqX5ZmoIDwga2FnZW50ZWlrb3VraVwgOwor56aB5pat55eH54q2IDwga2luZGFuc2hvdWpvdVwgOwor56uc5pSY6JmO5pCPIDwgcnl1dWpvdWtvaGFrdVwgOwor5q2j5ZGz6YeN6YePIDwgc2hvdW1panV1cnlvdVwgOwor5YWs6Ki85b255aC0IDwga291c2hvdXlha3ViYVwgOwor5riF5ra86aOy5paZIDwgc2VpcnlvdWlucnlvdVwgOwor5Li85YuY5a6aIDwgZG9uYnVyaWthbmpvdVwgOwor5q+b566h54++6LGhIDwgbW91a2FuZ2Vuc2hvdVwgOwor5L2c5oim5Zyw5Z+fIDwgc2FrdXNlbmNoaWlraVwgOwor546J5a2Q5Li8IDwgdGFtYWdvZG9uYnVyaVwgOwor5Ye65by15peF6LK7IDwgc2h1dGNob3VyeW9oaVwgOwor5pS+6YCB55Wq57WEIDwgaG91c291YmFuZ3VtaVwgOwor54Sh5YWN6Kix6YGL6LuiIDwgbXVtZW5reW91bnRlblwgOwor57iu5Yi354mIIDwgc2h1a3VzYXRzdWJhblwgOwor5rC45LmF56OB55+zIDwgZWlreXV1amlzaGFrdVwgOwor5aOy5o6b5YuY5a6aIDwgdXJpa2FrZWthbmpvdVwgOwor5LuK5pel55qEIDwga29uJyduaWNoaXRla2lcIDsKK+mWk+Wurua1t+WzoSA8IG1hbWl5YWthaWt5b3VcIDsKK+eNhOS4reaXpeiomCA8IGdva3VjaHV1bmlra2lcIDsKK+ayiOaAnem7meiAgyA8IGNoaW5zaGltb2trb3VcIDsKK+i2heWbveWutueahCA8IGNob3Vrb2trYXRla2lcIDsKK+a0nuWvn+WKmyA8IGRvdXNhdHN1cnlva3VcIDsKK+mYsueBq+W7uueviSA8IGJvdWtha2VuY2hpa3VcIDsKK+mHkeiejeW4guWgtCA8IGtpbicneXV1c2hpam91XCA7Civpm4blm6Plv4PnkIYgPCBzaHV1ZGFuc2hpbnJpXCA7CivlhaXnpL7oqabpqJMgPCBueXV1c2hhc2hpa2VuXCA7Civpgbjmip7lgKTnvqQgPCBzZW50YWt1Y2hpZ3VuXCA7CivkuI3lj6/oppblhYnnt5ogPCBmdWthc2hpa291c2VuXCA7CivnorrnjofoqqTlt64gPCBrYWt1cml0c3Vnb3NhXCA7Civosr/mmJPoh6rnlLHljJYgPCBib3Vla2lqaXl1dWthXCA7CivnrKzlm5vpmo7ntJogPCBkYWl5b25rYWlreXV1XCA7CivnqbrmsJfliLbli5XmqZ8gPCBrdXVraXNlaWRvdWtpXCA7CivpgI3pgaXlrabmtL4gPCBzaG91eW91Z2FrdWhhXCA7Civpu5LngrnlkajmnJ8gPCBrb2t1dGVuc2h1dWtpXCA7Civnvo7ooZPlrabmoKEgPCBiaWp1dHN1Z2Fra291XCA7CivljYrmrbvljYrnlJ8gPCBoYW5zaGloYW5zaG91XCA7Civlv6vpgJ/pm7vou4ogPCBrYWlzb2t1ZGVuc2hhXCA7CivljZfljJfmiKbkuokgPCBuYW5ib2t1c2Vuc291XCA7CivlsI/lhZDllpjmga8gPCBzaG91bml6ZW5zb2t1XCA7CivlhoXmlL/lubLmuIkgPCBuYWlzZWlrYW5zaG91XCA7CivlhazlubPmlL/nrZYgPCBrb3VoZWlzZWlzYWt1XCA7Civlt6Xmpa3opo/moLwgPCBrb3VneW91a2lrYWt1XCA7Civlm5vop5Llm5vpnaIgPCBzaGlrYWt1c2hpbWVuXCA7CivlsJHlubTlsJHlpbMgPCBzaG91bmVuc2hvdWpvXCA7Civlho3osqnmpa3ogIUgPCBzYWloYW5neW91c2hhXCA7CivotoXpq5jpgJ/luqYgPCBjaG91a291c29rdWRvXCA7Civoqr/mn7vloLHlkYogPCBjaG91c2Fob3Vrb2t1XCA7Civmtbfpm6Plr6nliKQgPCBrYWluYW5zaGlucGFuXCA7CivnkIblrabkv67lo6sgPCByaWdha3VzaHV1c2hpXCA7CivlpJbnmoTmoLnmi6AgPCBnYWl0ZWtpa29ua3lvXCA7Civmnb7po5/omasgPCBtYXRzdWt1aW11c2hpXCA7CivnlJ/lkb3lt6XlraYgPCBzZWltZWlrb3VnYWt1XCA7CivlpKnkvZHnpZ7liqkgPCB0ZW4nJ3l1dXNoaW5qb1wgOwor5aSW5Zu95peF6KGMIDwgZ2Fpa29rdXJ5b2tvdVwgOwor5YWx5ZCM5rC05qCTIDwga3lvdWRvdXN1aXNlblwgOwor5ouh5aSn5Z2H6KGhIDwga2FrdWRhaWtpbmtvdVwgOwor6IqL6JST5byPIDwgaW1vZHp1cnVzaGlraVwgOwor5LqU5Y2B5q2p55m+5q2pIDwgZ29qdXBwb2h5YXBwb1wgOwor6LOq6YeP5pWwIDwgc2hpdHN1cnlvdXN1dVwgOwor5Yex5peL5bCG6LuNIDwgZ2Fpc2Vuc2hvdWd1blwgOwor5Y6f55CG5Li7576p6ICFIDwgZ2VucmlzaHVnaXNoYVwgOwor6ZuG56mN5Zue6LevIDwgc2h1dXNla2lrYWlyb1wgOwor6KO+6YeO55Sj5qWtIDwgc3Vzb25vc2FuZ3lvdVwgOwor6Y6u6a2C5biw56WeIDwgY2hpbmtvbmtpc2hpblwgOwor5ZCI5qC86ICF5ZCNIDwgZ291a2FrdXNoYW1laVwgOwor5pyJ6LOH5qC86ICFIDwgeXV1c2hpa2FrdXNoYVwgOwor5YyW5a2m5Y+N5b+cIDwga2FnYWt1aGFuJydub3VcIDsKK+mcgOimgeS+m+e1piA8IGp1eW91a3lvdWt5dXVcIDsKK+WIpemFjemBlCA8IGJldHN1aGFpdGF0c3VcIDsKK+WPrOWWmuS7pOeKtiA8IHNob3VrYW5yZWlqb3VcIDsKK+ippumok+WLieW8tyA8IHNoaWtlbmJlbmt5b3VcIDsKK+a4qeWupOWKueaenCA8IG9uc2hpdHN1a291a2FcIDsKK+S7iuaXpeanmCA8IGtvbicnbmljaGlzYW1hXCA7CivmnInpiaTmnaHomasgPCB5dXVrb3Vqb3VjaHV1XCA7CivlhoXnmoTmoLnmi6AgPCBuYWl0ZWtpa29ua3lvXCA7Civov5HmtbfmvIHmpa0gPCBraW5rYWlneW9neW91XCA7CivlhqDlpKfkvJogPCBrYW5tdXJpdGFpa2FpXCA7CivmsbrmiKbmipXnpaggPCBrZXNzZW50b3VoeW91XCA7CivlhbHlkIznpL7kvJogPCBreW91ZG91c2hha2FpXCA7Civov73opIfmm7IgPCB0c3VpZnVrdWt5b2t1XCA7CivllJDojYnmqKHmp5ggPCBrYXJha3VzYW1veW91XCA7CivljIXnmq7liIfmlq0gPCBob3VoaXNldHN1ZGFuXCA7CivlrprmnJ/lj5blvJUgPCB0ZWlraXRvcmloaWtpXCA7Civkub7nh6XmtJfmv68gPCBrYW5zb3VzZW50YWt1XCA7Civpm4blkIjlkI3oqZ4gPCBzaHV1Z291bWVpc2hpXCA7CivlsI/lnovmlrDogZ4gPCBrb2dhdGFzaGluYnVuXCA7CivlpJrlhYPmlofljJboq5YgPCB0YWdlbmJ1bmthcm9uXCA7CivorbLmuKHmgKfpoJDph5EgPCBqb3V0b3NlaXlva2luXCA7CivljLvnmYLmlr3oqK0gPCBpcnlvdXNoaXNldHN1XCA7Civli5XnianmsrnohIIgPCBkb3VidXRzdXl1c2hpXCA7Civlj43pnaLmlZnluKsgPCBoYW5tZW5reW91c2hpXCA7CivntYTlkIjpoK0gPCBrdW1pYWlnYXNoaXJhXCA7Civml6XluLjkvJroqbEgPCBuaWNoaWpvdWthaXdhXCA7CivovLjlhaXmpa3ogIUgPCB5dW55dXVneW91c2hhXCA7CivmqJnmupbkvqHmoLwgPCBoeW91anVua2FrYWt1XCA7CivkuI3lpormiYvooZMgPCBmdW5pbnNodWp1dHN1XCA7CivlsbHnjKvkuonorbAgPCB5YW1hbmVrb3NvdWdpXCA7Civlh7rkuJbplpPnmoQgPCBzaHVzc2VrZW50ZWtpXCA7CivlubTkuK3ooYzkuosgPCBuZW5jaHV1Z3lvdWppXCA7CivpjozlgInmmYLku6MgPCBrYW1ha3VyYWppZGFpXCA7CivmlaPmranml4EgPCBzYW5wb2thdGFnYXRhXCA7CivkvpvoqJfniakgPCBreW91dGFrdWJ1dHN1XCA7Civngo7nl4fnl4Xlt6MgPCBlbnNob3VieW91c291XCA7Civms6jmhI/kurrniakgPCBjaHV1aWppbmJ1dHN1XCA7Civlm73lrrbkuLvnvqnogIUgPCBrb2trYXNodWdpc2hhXCA7Civml6XmtKropqrlloQgPCBuaWtrb3VzaGluemVuXCA7Civov73liqDms6jmlocgPCB0c3Vpa2FjaHV1bW9uXCA7CivnrYblhpnnlaXlrZcgPCBoaXNzaGFyeWFrdWppXCA7CivnjK7ooYDpgYvli5UgPCBrZW5rZXRzdXVuZG91XCA7CivoiJ7lj7DoirjooZMgPCBidXRhaWdlaWp1dHN1XCA7Civlh7rpoZjkurogPCBzaHV0c3VnYW4nJ25pblwgOwor6Kmm6aiT55uj552jIDwgc2hpa2Vua2FudG9rdVwgOwor5pKk6aCt5b655bC+IDwgdGV0dG91dGV0c3ViaVwgOwor55a+6aKo6L+F6Zu3IDwgc2hpcHB1dWppbnJhaVwgOwor5biC5aC055Kw5aKDIDwgc2hpam91a2Fua3lvdVwgOwor5Y6f5oiQ5bKp55+zIDwgZ2Vuc2VpZ2Fuc2VraVwgOwor5YmN5aSn57Wx6aCYIDwgemVuZGFpdG91cnlvdVwgOwor5by35Yi26YCB6YKEIDwga3lvdXNlaXNvdWthblwgOwor5ZCM5qWt57WE5ZCIIDwgZG91Z3lvdWt1bWlhaVwgOwor6Zu75rCX5YmD5YiAIDwgZGVua2lrYW1pc29yaVwgOwor5LqL5YuZ5bGA6ZW3IDwgamltdWt5b2t1Y2hvdVwgOwor57WM5riI5pS56Z2pIDwga2VpemFpa2Fpa2FrdVwgOwor5rK/5bK46K2m5YKZ6ZqKIDwgZW5nYW5rZWliaXRhaVwgOwor5rCR5L+X6Iq46IO9IDwgbWluem9rdWdlaW5vdVwgOwor57KY552A5YqbIDwgbmVuY2hha3VyeW9rdVwgOwor5YCL5Lq65Li7576p6ICFIDwga29qaW5zaHVnaXNoYVwgOwor5Y+O56mr5LqI5oOzIDwgc2h1dWtha3V5b3NvdVwgOwor5aGp6L6b6Jy76JuJIDwgc2hpb2thcmF0b25ib1wgOwor5a6/5rOK5paZIDwgc2h1a3VoYWt1cnlvdVwgOwor57SG5L2Z5puy5oqYIDwgdXlva3lva3VzZXRzdVwgOwor5qW16LaF55+t5rOiIDwgZ29rdWNob3V0YW5wYVwgOwor5Lmz56qEIDwgY2hpY2hpc2hpYm9yaVwgOwor5Li75qip5L6154qvIDwgc2h1a2Vuc2hpbnBhblwgOwor5Lit5oCn5rSX5YmkIDwgY2h1dXNlaXNlbnphaVwgOwor6LKo54mp5YiX6LuKIDwga2Ftb3RzdXJlc3NoYVwgOwor6KGA5riF55mC5rOVIDwga2Vzc2VpcnlvdWhvdVwgOwor5paw5qGI54m56KixIDwgc2hpbicnYW50b2treW9cIDsKK+aYr+aYr+mdnumdnuS4u+e+qSA8IHplemVoaWhpc2h1Z2lcIDsKK+atu+W+jOehrOebtCA8IHNoaWdva291Y2hva3VcIDsKK+WUr+eJqeS4u+e+qSA8IHl1aWJ1dHN1c2h1Z2lcIDsKK+aXpemcsuaIpuS6iSA8IG5pY2hpcm9zZW5zb3VcIDsKK+WQjOebn+adoee0hCA8IGRvdW1laWpvdXlha3VcIDsKK+S4gOaUq+WNg+mHkSA8IGlra2Fra3VzZW5raW5cIDsKK+majue0mumXmOS6iSA8IGthaWt5dXV0b3Vzb3VcIDsKK+eGseehrOWMluWJpCA8IG5ldHN1a291a2F6YWlcIDsKK+WwgueUqOWbnue3miA8IHNlbicneW91a2Fpc2VuXCA7CivkuqTmj5vlrabnlJ8gPCBrb3VrYW5nYWt1c2VpXCA7Civli5Xnt5roqIjnlLsgPCBkb3VzZW5rZWlrYWt1XCA7CivlpJbkuqTlp5Tlk6HplbcgPCBnYWlrb3VpaW5jaG91XCA7CivmsJHmlL/plbflrpggPCBtaW5zZWljaG91a2FuXCA7CivliKTmlq3kuK3mraIgPCBoYW5kYW5jaHV1c2hpXCA7Civmnp3lnoLmoZwgPCBzaGlkYXJlemFrdXJhXCA7Civlj6Tku6PntKsgPCBrb2RhaW11cmFzYWtpXCA7CivlsYDmiYDliIblspAgPCBreW9rdXNob2J1bmtpXCA7CivpgJrluLjlm73kvJogPCB0c3V1am91a29ra2FpXCA7Civmnp3lnoLmn7MgPCBzaGlkYXJleWFuYWdpXCA7Civmt7Hnt5HoibIgPCBmdWthbWlkb3JpaXJvXCA7CivmlbDlgKTop6PmnpAgPCBzdXVjaGlrYWlzZWtpXCA7CivnhKHmirXmipfkuLvnvqkgPCBtdXRlaWtvdXNodWdpXCA7Civou43lgpnmi6HlvLUgPCBndW5iaWtha3VjaG91XCA7CivpganogIXnlJ/lrZggPCB0ZWtpc2hhc2Vpem9uXCA7Civnsr7npZ7pkZHlrpogPCBzZWlzaGlua2FudGVpXCA7CivnqY3pm6rph48gPCBzZWtpc2V0c3VyeW91XCA7CivpiYTpgZPovLjpgIEgPCB0ZXRzdWRvdXl1c291XCA7CivnoJTnqbblrqQgPCBrZW5reXV1c2hpdHN1XCA7CivnrKzkuInpmo7ntJogPCBkYWlzYW5rYWlreXV1XCA7CivljYPmhYvkuIfmp5ggPCBzZW50YWliYW4nJ3lvdVwgOwor6Zu75a2Q5bel5a2mIDwgZGVuc2hpa291Z2FrdVwgOwor57WM5riI54q25rOBIDwga2VpemFpam91a3lvdVwgOwor56S+5Lya5pWZ6IKyIDwgc2hha2Fpa3lvdWlrdVwgOwor6L6y6ICV5rCR5pePIDwgbm91a291bWluem9rdVwgOwor5YWo6Lqr5YWo6ZyKIDwgemVuc2hpbnplbnJlaVwgOwor5YWs56ew6LOH5pysIDwga291c2hvdXNoaWhvblwgOwor5aSn5a2X54mH5bGxIDwgb29hemFrYXRheWFtYVwgOwor6Jas5bir5aaC5p2lIDwgeWFrdXNoaW55b3JhaVwgOwor5pS+5bCE6IO95rGa5p+TIDwgaG91c2hhbm91b3NlblwgOwor6Zu75rCX6Ieq5YuV6LuKIDwgZGVua2lqaWRvdXNoYVwgOwor6LOi5omAIDwga2FzaGlrb2Rva29yb1wgOwor5ZCM55uf5LyR5qChIDwgZG91bWVpa3l1dWtvdVwgOwor5bel5L2c5a6kIDwga291c2FrdXNoaXRzdVwgOwor5Lit5aSu6KiI55S7IDwgY2h1dW91a2Vpa2FrdVwgOwor5Lit5aSu6ZuG5qipIDwgY2h1dW91c2h1dWtlblwgOwor5LiJ6KeS6LK/5piTIDwgc2Fua2FrdWJvdWVraVwgOwor5YiG5p6Q5YyW5a2mIDwgYnVuc2VraWthZ2FrdVwgOwor5bCR5aOu5aOr5a6YIDwgc2hvdXNvdXNoaWthblwgOwor5rOV55qE5qC55ougIDwgaG91dGVraWtvbmt5b1wgOwor5q665a6z5LqL5Lu2IDwgc2F0c3VnYWlqaWtlblwgOwor6Z2i6a2CIDwgdHN1cmFkYW1hc2hpaVwgOwor6Ieq54S25aKX5Y+OIDwgc2hpemVuem91c2h1dVwgOwor6Imv5oCn6IWr55iNIDwgcnlvdXNlaXNodXlvdVwgOwor5L2c5YqH6KGTIDwgc2FrdWdla2lqdXRzdVwgOwor55+t5pel5pyIIDwgdGFuaml0c3VnZXRzdVwgOwor6LuK5o6M5a6kIDwgc2hhc2hvdXNoaXRzdVwgOwor6YCa5Yuk6Zu76LuKIDwgdHN1dWtpbmRlbnNoYVwgOwor5bCR5bm054qv572qIDwgc2hvdW5lbmhhbnphaVwgOwor5rC06YW45YyW54mpIDwgc3Vpc2Fua2FidXRzdVwgOwor6Kaq5oia55+l5bexIDwgc2hpbnNla2ljaGlraVwgOwor5Y2Y54us5rG6566XIDwgdGFuZG9rdWtlc3NhblwgOwor5Zu96Zqb5oOF5YuiIDwga29rdXNhaWpvdXNlaVwgOwor6KGX6aCt5ryU6KqsIDwgZ2FpdG91ZW56ZXRzdVwgOwor5qyj5Zac6ZuA6LqNIDwga2lua2lqYWt1eWFrdVwgOwor5ZOB56iu5pS56ImvIDwgaGluc2h1a2FpcnlvdVwgOwor5YWs56ew6aas5YqbIDwga291c2hvdWJhcmlraVwgOwor5Zub5YWt5pmC5LitIDwgc2hpcm9rdWppY2h1dVwgOwor5Lqk6YCa6YGu5patIDwga291dHN1dXNoYWRhblwgOwor5aSn5a2m57Sb5LqJIDwgZGFpZ2FrdWZ1bnNvdVwgOwor6LKh5pS/5Y+O5pSvIDwgemFpc2Vpc2h1dXNoaVwgOwor6KGG5Y+C5Lih6ZmiIDwgc2h1dXNhbnJ5b3VpblwgOwor6ICQ54Gr5bu656+JIDwgdGFpa2FrZW5jaGlrdVwgOwor6KaW5Yqb5qSc5p+7IDwgc2hpcnlva3VrZW5zYVwgOwor5bCP5YiA57Sw5belIDwga29nYXRhbmF6YWlrdVwgOwor6LOq55aR5b+c562UIDwgc2hpdHN1Z2lvdXRvdVwgOwor5o2c5p+75b2T5bGAIDwgc291c2F0b3VreW9rdVwgOwor6Ki65a+f5paZIDwgc2hpbnNhdHN1cnlvdVwgOwor5L+457Wm6KKLIDwgaG91a3l1dWJ1a3Vyb1wgOwor54Wn6JGJ54uC6KiAIDwgdGVyaWhha3lvdWdlblwgOwor5Ye65b6B6LuN5Lq6IDwgc2h1c3NlaWd1bmppblwgOwor5YSq55Sf5L+d6K235rOVIDwgeXV1c2VpaG9nb2hvdVwgOwor5raI5aSx54K5IDwgc2hvdXNoaXRzdXRlblwgOwor5pS+5bCE6IO96ZuyIDwgaG91c2hhbm91Z3Vtb1wgOwor56S+5Lya5pS/562WIDwgc2hha2Fpc2Vpc2FrdVwgOwor6Zu75qW16Zu75L2NIDwgZGVua3lva3VkZW4nJ2lcIDsKK+S6uuW3pemAj+aekCA8IGppbmtvdXRvdXNla2lcIDsKK+ikh+WQiOWqkuS9kyA8IGZ1a3Vnb3ViYWl0YWlcIDsKK+S9j+awkeaKleelqCA8IGp1dW1pbnRvdWh5b3VcIDsKK+W3pealreWcsOW4ryA8IGtvdWd5b3VjaGl0YWlcIDsKK+WRvOWQuOWbsOmboyA8IGtva3l1dWtvbicnbmFuXCA7Civoqq3mm7jlrqQgPCBkb2t1c2hvc2hpdHN1XCA7CivppIrorbfmlr3oqK0gPCB5b3Vnb3NoaXNldHN1XCA7CivovLjlh7ropo/liLYgPCB5dXNodXRzdWtpc2VpXCA7CivlnLDmlrnkuovli5nmiYAgPCBjaGlob3VqaW11c2hvXCA7CivmiKblipvntYTmiJAgPCBzZW5yeW9rdXNvc2VpXCA7CivntbHkuIDopovop6MgPCB0b3VpdHN1a2Vua2FpXCA7CivlgqznnKDnmYLms5UgPCBzYWltaW5yeW91aG91XCA7Civlt6Xmpa3oo73lk4EgPCBrb3VneW91c2VpaGluXCA7CivlvbnkurrmoLnmgKcgPCB5YWt1bmlua29uam91XCA7Civni6zmiL/nm6PnpoEgPCBkb2t1Ym91a2Fua2luXCA7Civlrr/ms4rlhYggPCBzaHVrdWhha3VzYWtpXCA7CivlsI7pgJrmirXmipcgPCBkb3V0c3V1dGVpa291XCA7CivljZToqr/kuLvnvqkgPCBreW91Y2hvdXNodWdpXCA7CivkvJroqIjloLHlkYogPCBrYWlrZWlob3Vrb2t1XCA7Civlj7Dmub7mtbfls6EgPCB0YWl3YW5rYWlreW91XCA7Civml6XmuIXmiKbkuokgPCBuaXNzaGluc2Vuc291XCA7CivlrqPoqIDnmbrooaggPCBzZW5nZW5oYXBweW91XCA7CivlpKnkvZPlhpnnnJ8gPCB0ZW50YWlzaGFzaGluXCA7CivovLjlhaXoh6rnlLHljJYgPCB5dW55dXVqaXl1dWthXCA7Civph43ph4/lmbjmlbAgPCBqdXVyeW91dG9uc3V1XCA7CivorZjliKXlrZAgPCBzaGlraWJldHN1c2hpXCA7CivljZfljYrnkIMgPCBtaW5hbWloYW5reXV1XCA7CivmmI7pj6HmraLmsLQgPCBtZWlreW91c2hpc3VpXCA7CivlubTplpPoqIjnlLsgPCBuZW5rYW5rZWlrYWt1XCA7CivnhKHliKnmga/lgrXli5kgPCBtdXJpc29rdXNhaW11XCA7Civlj6Pov7DnrYboqJggPCBrb3VqdXRzdWhpa2tpXCA7Civlm73pmpvpgJrosqggPCBrb2t1c2FpdHN1dWthXCA7Civogbflk6HlrqQgPCBzaG9rdWluc2hpdHN1XCA7Civnoavpu4TphbjljJbniakgPCBpb3VzYW5rYWJ1dHN1XCA7CivlgaXlurfoqLrmlq0gPCBrZW5rb3VzaGluZGFuXCA7CivmoYPlsbHmmYLku6MgPCBtb21veWFtYWppZGFpXCA7CivogbfloLTntZDlqZogPCBzaG9rdWJha2Vra29uXCA7CivnkrDlooPllY/poYwgPCBrYW5reW91bW9uZGFpXCA7CivoqLzkurrllprllY8gPCBzaG91bmlua2FubW9uXCA7Civkv6HnjoTooosgPCBzaGluZ2VuYnVrdXJvXCA7CivmlLvmkoPmlrnlkJEgPCBrb3VnZWtpaG91a291XCA7Civnq7bkuonlo7LosrcgPCBreW91c291YmFpYmFpXCA7CivokZfkvZzmqKnms5UgPCBjaG9zYWt1a2VuaG91XCA7Civlm73pmpvnpL7kvJogPCBrb2t1c2Fpc2hha2FpXCA7CivmlrDliLbpq5jmoKEgPCBzaGluc2Vpa291a291XCA7Civlr4TnlJ/omavnl4cgPCBraXNlaWNodXVzaG91XCA7CivkuK3mipjluL3lrZAgPCBuYWthb3JlYm91c2hpXCA7Civlhazplovnt7Tnv5IgPCBrb3VrYWlyZW5zaHV1XCA7CivntYzmuIjmlL/nrZYgPCBrZWl6YWlzZWlzYWt1XCA7CivlkIjmiJDlhpnnnJ8gPCBnb3VzZWlzaGFzaGluXCA7CivmlrDpgLLkvZzlrrYgPCBzaGluc2hpbnNha2thXCA7CivmgYvnianoqp4gPCBrb2ltb25vZ2F0YXJpXCA7CivphbjntKDkvpvntaYgPCBzYW5zb2t5b3VreXV1XCA7CivkuqTpgJrlhaznpL4gPCBrb3V0c3V1a291c2hhXCA7CivmtLvmrrroh6rlnKggPCBrYXNzYXRzdWppemFpXCA7Civpm7vpgIHlhpnnnJ8gPCBkZW5zb3VzaGFzaGluXCA7Civlhajnn6Xlhajog70gPCB6ZW5jaGl6ZW4nJ25vdVwgOwor5LiA57KS56iuIDwgaGl0b3RzdWJ1ZGFuZVwgOwor5Zu95Yui6Kq/5p+7IDwga29rdXNlaWNob3VzYVwgOwor5rWB6YCa5qmf5qeLIDwgcnl1dXRzdXVraWtvdVwgOwor5YW15Zmo6Ly45Ye6IDwgaGVpa2l5dXNodXRzdVwgOwor5aSp55qH5bSH5oudIDwgdGVuJydub3VzdXVoYWlcIDsKK+S/neiovOS6uuimgSA8IGhvc2hvdW5pbicneW91XCA7Civmta7pgYrnlJ/niakgPCBmdXl1dXNlaWJ1dHN1XCA7CivntYLouqvkv53pmbogPCBzaHV1c2hpbmhva2VuXCA7Civnt5Hmn7Hnn7MgPCByeW9rdWNodXVzZWtpXCA7Civmh7jos57oq5bmlocgPCBrZW5zaG91cm9uYnVuXCA7CivpgZPot6/mjoPpmaTkurogPCBkb3Vyb3NvdWppamluXCA7CivluILloLTmlLnpnakgPCBzaGlqb3VrYWlrYWt1XCA7Civpm7vlipvpnIDopoEgPCBkZW5yeW9rdWp1eW91XCA7Civoh6jluorlsIvllY8gPCByaW5zaG91amlubW9uXCA7CivpmbDmpbXnt5rnrqEgPCBpbmt5b2t1c2Vua2FuXCA7Civml4vlhYnliIbmnpAgPCBzZW5rb3VidW5zZWtpXCA7CivljJbnn7Pnh4PmlpkgPCBrYXNla2luZW5yeW91XCA7Civpm7vkv6Hngrrmm78gPCBkZW5zaGlua2F3YXNlXCA7Civku4/kvZwgPCBob3Rva2VkenVrdXJ1XCA7Civmh5DkuK3pm7vnga8gPCBrYWljaHV1ZGVudG91XCA7CivmiY3oibLlhbzlgpkgPCBzYWlzaG9rdWtlbmJpXCA7CivmnbHljZcgPCBoaWdhc2hpbWluYW1pXCA7CivmjIflsI7opoHpoJggPCBzaGlkb3V5b3VyeW91XCA7Civpg7Xkvr/lubTph5EgPCB5dXViaW4nJ25lbmtpblwgOwor6Zai6YCj5ZWG5ZOBIDwga2FucmVuc2hvdWhpblwgOwor6ZmQ55WM54q25rOBIDwgZ2Vua2Fpam91a3lvdVwgOwor5LuB6Lyq5Yqg54uC6KiAIDwgbml3YWtha3lvdWdlblwgOwor54++5Zyo5a6M5LqGIDwgZ2VuemFpa2FucnlvdVwgOwor5Yi257SE5Lyd5pCsIDwgc2VpeWFrdWRlbnBhblwgOwor5Li45LiA6YCx6ZaTIDwgbWFydWlzc2h1dWthblwgOwor5bel5qWt5Zuj5ZywIDwga291Z3lvdWRhbmNoaVwgOwor5qW15qW95rWE5ZyfIDwgZ29rdXJha3Vqb3Vkb1wgOwor6Ieq6Ieq5YWs77yT5YWaIDwgamlqaWtvdXNhbnRvdVwgOwor5rCX566h5pSv6IK654KOIDwga2lrYW5zaGloYWllblwgOwor5aSa6YeN5YK15YuZ6ICFIDwgdGFqdXVzYWltdXNoYVwgOwor5YyW5a2m5YiG5p6QIDwga2FnYWt1YnVuc2VraVwgOwor6Kuu5ZWP5aeU5ZOh5LyaIDwgc2hpbW9uJydpaW5rYWlcIDsKK+WQjOeCueaxuuWLnSA8IGRvdXRlbmtlc3Nob3VcIDsKK+S9k+WklumbouiEsSA8IHRhaWdhaXJpZGF0c3VcIDsKK+eUn+eJqeWFteWZqCA8IHNlaWJ1dHN1aGVpa2lcIDsKK+WNmOmfs+evgOiqniA8IHRhbicnb25zZXRzdWdvXCA7CivmlLvmkoPpmorlvaIgPCBrb3VnZWtpdGFpa2VpXCA7Civms5XkurrmiYDlvpcgPCBob3VqaW5zaG90b2t1XCA7CivlpKfpgIbkuovku7YgPCB0YWlneWFrdWppa2VuXCA7Civljp/lp4vmlZnkvJogPCBnZW5zaGlreW91a2FpXCA7CivkvqHmoLzljZTlrpogPCBrYWtha3VreW91dGVpXCA7Civlr5PmhI/lsI/oqqwgPCBndXVpc2hvdXNldHN1XCA7CivmmJTmsJfos6ogPCBtdWthc2hpa2F0YWdpXCA7CivlsILploDmioDooZMgPCBzZW5tb25naWp1dHN1XCA7Civmi6HlvLXlj6/og70gPCBrYWt1Y2hvdWthbm91XCA7Civkv4Tli4nlvLcgPCBuaXdha2FiZW5reW91XCA7CivmgKXpgLLkuLvnvqkgPCBreXV1c2hpbnNodWdpXCA7CivoqJjlv7XlvI/lhbggPCBraW5lbnNoaWtpdGVuXCA7Civnq7blkIjohLHnt5ogPCBreW91Z291ZGFzc2VuXCA7CivmmpHkuK3kvJHmmocgPCBzaG9jaHV1a3l1dWthXCA7CivnuYHmlofnuJ/npLwgPCBoYW5idW5qb2t1cmVpXCA7Civnm67mqJnnrqHnkIYgPCBtb2t1aHlvdWthbnJpXCA7CivmlrnlkJHoprPlv7UgPCBob3Vrb3VrYW4nJ25lblwgOwor5rW35bqV6Zu75L+hIDwga2FpdGVpZGVuc2hpblwgOwor5qWt55WM5YuV5ZCRIDwgZ3lvdWthaWRvdWtvdVwgOwor5b+F6KaB57WM6LK7IDwgaGl0c3V5b3VrZWloaVwgOwor5rC0546J5qih5qeYIDwgbWl6dXRhbWFtb3lvdVwgOwor6YCy5a2m546HIDwgc2hpbmdha3VyaXRzdVwgOwor5Ye65b6B5a625pePIDwgc2h1c3NlaWthem9rdVwgOwor57WM5bi45Y+O5pSvIDwga2Vpam91c2h1dXNoaVwgOwor5Zyw55CD56eR5a2mIDwgY2hpa3l1dWthZ2FrdVwgOwor5oOF5aCx5oqA6KGTIDwgam91aG91Z2lqdXRzdVwgOwor5q6/5qeY6JuZIDwgdG9ub3NhbWFnYWVydVwgOwor6auY6auY5bqm6aOb6KGMIDwga291a291ZG9oaWtvdVwgOwor56m65Lit5YiG6KejIDwga3V1Y2h1dWJ1bmthaVwgOwor5by35Yi25Yq05YONIDwga3lvdXNlaXJvdWRvdVwgOwor6ZqO57Sa5oSP6K2YIDwga2Fpa3l1dWlzaGlraVwgOwor5Y2a5aOr6KuW5paHIDwgaGFrdXNoaXJvbmJ1blwgOwor5Lq65qC85b2i5oiQIDwgamlua2FrdWtlaXNlaVwgOwor57W557O457Sh57i+IDwga2Vuc2hpYm91c2VraVwgOwor6IG35aC06ZeY5LqJIDwgc2hva3ViYXRvdXNvdVwgOwor6Z2Z6ISI6KGAIDwgam91bXlha3VrZXRzdVwgOwor5pWZ6IKy5a2m6YOoIDwga3lvdWlrdWdha3VidVwgOwor5aSJ6YCf6KOF572uIDwgaGVuc29rdXNvdWNoaVwgOwor55yf5YaG55yf54+gIDwgc2hpbicnZW5zaGluanVcIDsKK+Wbveawkee1jOa4iCA8IGtva3VtaW5rZWl6YWlcIDsKK+S4gOeti+mBkyA8IGhpdG9zdWppbWljaGlcIDsKK+WGhemdouaPj+WGmSA8IG5haW1lbmJ5b3VzaGFcIDsKK+WqkuS9k+e1guerryA8IGJhaXRhaXNodXV0YW5cIDsKK+W/g+eQhueZguazlSA8IHNoaW5yaXJ5b3Vob3VcIDsKK+aAp+eahOmWouS/giA8IHNlaXRla2lrYW5rZWlcIDsKK+eEoemKremjsumjnyA8IG11c2VuJydpbnNob2t1XCA7CivlsLHmpa3njocgPCBzaHV1Z3lvdXJpdHN1XCA7Civnr4Tnlofmlofms5UgPCBoYW5jaHV1YnVucG91XCA7CivlhoXnt5LoqbEgPCBuYWlzaG9iYW5hc2hpXCA7CivplbfmnJ/lgJ/mrL4gPCBjaG91a2lzaGFra2FuXCA7CivlhajkvZPpm4blkIggPCB6ZW50YWlzaHV1Z291XCA7Civlj7PlsI/mi6zlvKcgPCBtaWdpc2hvdWtha2tvXCA7Civku67mg7PmlbXlm70gPCBrYXNvdXRla2lrb2t1XCA7CivouoHprLHos6ogPCBzb3V1dHN1c2hpdHN1XCA7CivmpbXmpb3lvoDnlJ8gPCBnb2t1cmFrdW91am91XCA7CivliJ3nrYnmlZnogrIgPCBzaG90b3VreW91aWt1XCA7CivooYzmlL/lkb3ku6QgPCBneW91c2VpbWVpcmVpXCA7Civlr77lnLDmlLvmkoMgPCB0YWljaGlrb3VnZWtpXCA7Civoh6rnhLbmj4/lhpkgPCBzaGl6ZW5ieW91c2hhXCA7Civph5Hono3os4fmnKwgPCBraW4nJ3l1dXNoaWhvblwgOwor54Sh6IO95Yqb6ICFIDwgbXVub3VyeW9rdXNoYVwgOwor5YyW5a2m5bel5qWtIDwga2FnYWt1a291Z3lvdVwgOwor6KGM5pS/5Yy655S7IDwgZ3lvdXNlaWt1a2FrdVwgOwor5a2m57+S6L6e5YW4IDwgZ2FrdXNodXVqaXRlblwgOwor5Zu95Lya6K2w5LqL5aCCIDwga29ra2FpZ2lqaWRvdVwgOwor6Zao6Zal5pS/5rK7IDwga2VpYmF0c3VzZWlqaVwgOwor5LqM5Y2B5Zub56+A5rCXIDwgbmlqdXVzaGlzZWtraVwgOwor5LqL5qWt5ouh5YWFIDwgamlneW91a2FrdWp1dVwgOwor6L6y5p2R5bel5qWtIDwgbm91c29ua291Z3lvdVwgOwor56eL6Zuo5YmN57eaIDwgYWtpc2FtZXplbnNlblwgOwor54Sh5b2i5paH5YyW6LKhIDwgbXVrZWlidW5rYXphaVwgOwor5YWx5ZCM6L6y5aC0IDwga3lvdWRvdW5vdWpvdVwgOwor5aWz5qip5ouh5by1IDwgam9rZW5rYWt1Y2hvdVwgOwor6Kyb57+S5Lya5aC0IDwga291c2h1dWthaWpvdVwgOwor5rGa5p+T54mp6LOqIDwgb3NlbmJ1c3NoaXRzdVwgOwor54q25rOB5Yik5patIDwgam91a3lvdWhhbmRhblwgOwor5b2T6Kmy5a6Y5bqBIDwgdG91Z2Fpa2FuY2hvdVwgOwor5Luy5LuL6LK/5piTIDwgY2h1dWthaWJvdWVraVwgOwor5Zu95YaF5biC5aC0IDwga29rdW5haXNoaWpvdVwgOwor5LiA5p6a55yL5p2/IDwgaWNoaW1haWthbmJhblwgOwor5biC5aC06Ieq55Sx5YyWIDwgc2hpam91aml5dXVrYVwgOwor57WM5Za25aSa6KeS5YyWIDwga2VpZWl0YWtha3VrYVwgOwor54Sh57ea6YCa5L+hIDwgbXVzZW50c3V1c2hpblwgOwor57WM5riI5aSn5Zu9IDwga2VpemFpdGFpa29rdVwgOwor5Li75oiR5Li7576p6ICFIDwgc2h1Z2FzaHVnaXNoYVwgOwor5pqX5Y+35YyW5omL5rOVIDwgYW5nb3VrYXNodWhvdVwgOwor5Y+N56S+5Lya55qEIDwgaGFuc2hha2FpdGVraVwgOwor5LiA5Yip5LiA5a6zIDwgaWNoaXJpaWNoaWdhaVwgOwor5LqM5b6L6IOM5Y+NIDwgbmlyaXRzdWhhaWhhblwgOwor5b6p5YWD5L2c5qWtIDwgZnVrdWdlbnNhZ3lvdVwgOwor5Lq66ZaT54iG5by+IDwgbmluZ2VuYmFrdWRhblwgOwor5a2j56+A5Yq05YONIDwga2lzZXRzdXJvdWRvdVwgOwor6Zm46LuN5aSn6IejIDwgcmlrdWd1bmRhaWppblwgOwor5pat5oq15oqX6KeSIDwgZGFudGVpa291a2FrdVwgOwor54ax5Yq5546HIDwgbmV0c3Vrb3VyaXRzdVwgOwor5LiN6KaL6Lui6Iq46ICFIDwgbWl6dXRlbmdlaXNoYVwgOwor55uu55qE54mpIDwgbW9rdXRla2lidXRzdVwgOwor6YCa5L+h5qmf6ZaiIDwgdHN1dXNoaW5raWthblwgOwor5Y+N55m65YqbIDwgaGFucGF0c3VyeW9rdVwgOwor5YaZ55yf5Ye454mIIDwgc2hhc2hpbnRvcHBhblwgOwor5qSN54mp6KqMIDwgc2hva3VidXRzdXNoaVwgOwor5YyW5a2m55mC5rOVIDwga2FnYWt1cnlvdWhvdVwgOwor5Yqf5Yip5Li7576p6ICFIDwga291cmlzaHVnaXNoYVwgOwor57ax57SA57Kb5q2jIDwga291a2lzaHVrdXNlaVwgOwor56iO5Yi25pS56Z2pIDwgemVpc2Vpa2Fpa2FrdVwgOwor6Kq/5YGc6KOB5YikIDwgY2hvdXRlaXNhaWJhblwgOwor54Sh572q5Yik5rG6IDwgbXV6YWloYW5rZXRzdVwgOwor5aSp54mbIDwga2FtaWtpcmltdXNoaVwgOwor6LuN5LqL5oim55WlIDwgZ3VuamlzZW5yeWFrdVwgOwor6K2m5a+f5YqbIDwga2Vpc2F0c3VyeW9rdVwgOwor6Ieo5bqK6Kmm6aiTIDwgcmluc2hvdXNoaWtlblwgOwor6Ziy5q2i5oyH6YedIDwgYm91c2hpc2hpc2hpblwgOwor5rCX6LGh6Kaz5risIDwga2lzaG91a2Fuc29rdVwgOwor6Iie5Y+w55Sf5rS7IDwgYnV0YWlzZWlrYXRzdVwgOwor5aSn5ZCN5peF6KGMIDwgZGFpbXlvdXJ5b2tvdVwgOwor5L2c5qWt55mC5rOVIDwgc2FneW91cnlvdWhvdVwgOwor5aSW5Zu954K65pu/IDwgZ2Fpa29rdWthd2FzZVwgOwor6YO956uL6auY5qChIDwgdG9yaXRzdWtvdWtvdVwgOwor5b2i5byP5Li7576pIDwga2Vpc2hpa2lzaHVnaVwgOwor5YyW5a2m5bel5a2mIDwga2FnYWt1a291Z2FrdVwgOwor6KeS6YGL5YuV6YePIDwga2FrdXVuZG91cnlvdVwgOwor5a6M5YWo54Sh5qygIDwga2FuemVubXVrZXRzdVwgOwor5pS/562W5rG65a6aIDwgc2Vpc2FrdWtldHRlaVwgOwor6LKo54mp5a6kIDwga2Ftb3RzdXNoaXRzdVwgOwor5b6q55Kw5bCP5pWwIDwganVua2Fuc2hvdXN1dVwgOwor5aSn6Z+T5rCR5Zu9IDwgZGFpa2FubWlua29rdVwgOwor5oeQ5Lit6Y+hIDwga2FpY2h1dWthZ2FtaVwgOwor6YGp55So5qWt5YuZIDwgdGVraXlvdWd5b3VtdVwgOwor5oim5LqJ5paH5a2mIDwgc2Vuc291YnVuZ2FrdVwgOwor5Lmd5aSp55u05LiLIDwga3l1dXRlbmNob2trYVwgOwor5reh57eR6ImyIDwgdGFucnlva3VzaG9rdVwgOwor6Z2i5b6T6IW56IOMIDwgbWVuanV1ZnVrdWhhaVwgOwor56K65L+d5aSx5pWXIDwga2FrdWhvc2hpcHBhaVwgOwor5YWx6YCa6KiA6KqeIDwga3lvdXRzdXVnZW5nb1wgOwor6Ieq5YuV6LuK5L+d6Zm6IDwgamlkb3VzaGFob2tlblwgOwor5by35Yi25Yem5YiGIDwga3lvdXNlaXNob2J1blwgOwor5pat5bSW57W25aOBIDwgZGFuZ2FpemVwcGVraVwgOwor55Sj5qWt56S+5LyaIDwgc2FuZ3lvdXNoYWthaVwgOwor5ZCE56iu5a2m5qChIDwga2FrdXNodWdha2tvdVwgOwor5YiG6Kej5YaZ55yfIDwgYnVua2Fpc2hhc2hpblwgOwor5Y2w5Yi35aqS5L2TIDwgaW5zYXRzdWJhaXRhaVwgOwor56CU56m25omA5aCxIDwga2Vua3l1dXNob2hvdVwgOwor5Lmx5bCE5Lmx5pKDIDwgcmFuc2hhcmFuZ2VraVwgOwor54m56Kix5L615a6zIDwgdG9ra3lvc2hpbmdhaVwgOwor5a6a6aGN6LKv6YeRIDwgdGVpZ2FrdWNob2tpblwgOwor5YWs6KGG5Lyd5YuVIDwga291c2h1dWRlbmRvdVwgOwor5aSp56u66bygIDwgdGVuamlrdW5lenVtaVwgOwor6YmE6YGT6aas6LuKIDwgdGV0c3Vkb3ViYXNoYVwgOwor5YaF5Zu954K65pu/IDwgbmFpa29rdWthd2FzZVwgOwor56iu56iu5qeY5qeYIDwgc2h1anVzYW1hemFtYVwgOwor5Zac6Imy5rqA6Z2iIDwga2lzaG9rdW1hbm1lblwgOwor5byB5Yil57Sg5oCnIDwgYmVuYmV0c3Vzb3NlaVwgOwor5L2c5oim5ZG95LukIDwgc2FrdXNlbm1laXJlaVwgOwor6K2w6ZW36IG35qipIDwgZ2ljaG91c2hva2tlblwgOwor57Wx546H5YqbIDwgdG91cml0c3VyeW9rdVwgOwor5a6f6Yyy54mpIDwgaml0c3Vyb2t1bW9ub1wgOwor5ZWT6JKZ5oCd5r2uIDwga2VpbW91c2hpY2hvdVwgOwor5YWs5ai85YWo5buDIDwga291c2hvdXplbnBhaVwgOwor5a++6Z2i5Lqk6YCaIDwgdGFpbWVua291dHN1dVwgOwor6Ieq5bex6aGV56S65qyyIDwgamlrb2tlbmppeW9rdVwgOwor5a+G5YWl5Zu9IDwgbWl0c3VueXV1Z29rdVwgOwor5LiA5ZWP5LiA562UIDwgaWNoaW1vbicnaXR0b3VcIDsKK+ebtOi8uOWHuiA8IGNob2t1eXVzaHV0c3VcIDsKK+eEoemFjeW9k+S/nemZuiA8IG11aGFpdG91aG9rZW5cIDsKK+mbu+WtkOWvhuW6piA8IGRlbnNoaW1pdHN1ZG9cIDsKK+i2heS9juS+oeagvCA8IGNob3V0ZWlrYWtha3VcIDsKK+S4gOaLrOWjsuiytyA8IGlra2F0c3ViYWliYWlcIDsKK+aDmuawl+ipsSA8IG5vcm9rZWJhbmFzaGlcIDsKK+WItue0hOadoeS7tiA8IHNlaXlha3Vqb3VrZW5cIDsKK+S8keaIpuS8muirhyA8IGt5dXVzZW5rYWlkYW5cIDsKK+S8kemkiuWupCA8IGt5dXV5b3VzaGl0c3VcIDsKK+eJiOaoqeS+teWusyA8IGhhbmtlbnNoaW5nYWlcIDsKK+mZs+WIl+eqkyA8IGNoaW5yZXRzdW1hZG9cIDsKK+eZvuWIhueOhyA8IGh5YWt1YnVucml0c3VcIDsKK+malOmboueXheajnyA8IGtha3VyaWJ5b3V0b3VcIDsKK+eUn+muruaWmeWTgSA8IHNlaXNlbnJ5b3VoaW5cIDsKK+WHuuihgOeXhyA8IHNodWtrZXRzdXNob3VcIDsKK+S4iuaYh+WCvuWQkSA8IGpvdXNob3VrZWlrb3VcIDsKK+S4jeazleWFpeWbvSA8IGZ1aG91bnl1dWdva3VcIDsKK+aVmemkiuWtpumDqCA8IGt5b3V5b3VnYWt1YnVcIDsKK+mrmOS/oemgvOaApyA8IGtvdXNoaW5yYWlzZWlcIDsKK+aenOaoueagveWfueiAhSA8IGthanVzYWliYWlzaGFcIDsKK+WutuWuheaNnOe0oiA8IGthdGFrdXNvdXNha3VcIDsKK+ioiOeUu+e1jOa4iCA8IGtlaWtha3VrZWl6YWlcIDsKK+S4iei7uOippumokyA8IHNhbmppa3VzaGlrZW5cIDsKK+acgOe1guautemajiA8IHNhaXNodXVkYW5rYWlcIDsKK+WPjuWFpeWNsOe0mSA8IHNodXVueXV1aW5zaGlcIDsKK+WNiueGn+e3tOW3pSA8IGhhbmp1a3VyZW5rb3VcIDsKK+WGmeecn+WIpOWumiA8IHNoYXNoaW5oYW50ZWlcIDsKK+e1jOa4iOims+W/tSA8IGtlaXphaWthbicnbmVuXCA7Civos4Pph5HmsLTmupYgPCBjaGluZ2luc3VpanVuXCA7Civllrbmpa3lj47mlK8gPCBlaWd5b3VzaHV1c2hpXCA7CivkuInnm7jkuqTmtYEgPCBzYW5zb3Vrb3VyeXV1XCA7CivntYzllrbmiKbnlaUgPCBrZWllaXNlbnJ5YWt1XCA7CivmmKXlpI/np4vlhqwgPCBzaHVua2FzaHV1dG91XCA7CivnhKbngrnmt7HluqYgPCBzaG91dGVuc2hpbmRvXCA7CivkuIDmmYLmiYDlvpcgPCBpY2hpamlzaG90b2t1XCA7CivmnYnoirHnsonnl4cgPCBzdWdpa2FmdW5zaG91XCA7CivkurrmsJHmipXnpaggPCBqaW5taW50b3VoeW91XCA7Civlr4bovLjlh7ogPCBtaXRzdXl1c2h1dHN1XCA7CivlkIjlvpPpgKPooaEgPCBnYXNzaG91cmVua291XCA7Civng4/ph47osYzosYYgPCBrYXJhc3Vub2VuZG91XCA7CivnhKHoirjlpKfpo58gPCBtdWdlaXRhaXNob2t1XCA7Civlm73pmpvpgKPlkIggPCBrb2t1c2FpcmVuZ291XCA7CivliKTliKXlvI8gPCBoYW5iZXRzdXNoaWtpXCA7CivnhrHkuqTmj5vlmaggPCBuZXRzdWtvdWthbmtpXCA7CivlroflrpnplovnmbogPCB1Y2h1dWthaWhhdHN1XCA7CivmvKLmlofoqJPoqq0gPCBrYW5idW5rdW5kb2t1XCA7CivnqbrplpPmhJ/oppogPCBrdXVrYW5rYW5rYWt1XCA7CivkuozkurrkuInohJogPCBuaW5pbnNhbmt5YWt1XCA7CivmqKnlipvkuLvnvqkgPCBrZW5yeW9rdXNodWdpXCA7CivmpI3niannlYwgPCBzaG9rdWJ1dHN1a2FpXCA7Civli5/pm4bluoPlkYogPCBib3NodXVrb3Vrb2t1XCA7Civlrabnv5LnkIboq5YgPCBnYWt1c2h1dXJpcm9uXCA7Civpp5Dou4rnpoHmraIgPCBjaHV1c2hha2luc2hpXCA7CivlhbHlkIzlrqPoqIAgPCBreW91ZG91c2VuZ2VuXCA7Civoo4HliKTlrpjlv4zpgb8gPCBzYWliYW5rYW5raWhpXCA7CivlpKnlnLDnpZ7mmI4gPCB0ZW5jaGlzaGlubWVpXCA7CivlpKLlubsgPCB5dW1lbWFib3Jvc2hpXCA7CivoqbPntLDmg4XloLEgPCBzaG91c2Fpam91aG91XCA7CivniZvpo7Lppqzpo58gPCBneXV1aW5iYXNob2t1XCA7CivpnZ7mraboo4XlnLDluK8gPCBoaWJ1c291Y2hpdGFpXCA7Civph5Hln47piYTlo4EgPCBraW5qb3V0ZXBwZWtpXCA7Civpm4bkuK3orJvnvqkgPCBzaHV1Y2h1dWtvdWdpXCA7CivlpInlvaLomavpoZ4gPCBoZW5rZWljaHV1cnVpXCA7CivlhaznmoTlubTph5EgPCBrb3V0ZWtpbmVua2luXCA7CivpgLHliIrpm5HoqowgPCBzaHV1a2FuemFzc2hpXCA7CivntKHnuL7lt6XloLQgPCBib3VzZWtpa291am91XCA7CivliJ3nrYnmlbDlraYgPCBzaG90b3VzdXVnYWt1XCA7CivmrovlrZjml6XmlbAgPCB6YW5zb24nJ25pc3N1dVwgOwor56m65rCX5riF5rWE5qmfIDwga3V1a2lzZWlqb3VraVwgOwor5Zu96Zqb5bGV6ZaLIDwga29rdXNhaXRlbmthaVwgOwor5bm05Yqf5bqP5YiXIDwgbmVua291am9yZXRzdVwgOwor54ax5Yqb5a2mIDwgbmV0c3VyaWtpZ2FrdVwgOwor5ZWG5qWt6YO95biCIDwgc2hvdWd5b3V0b3NoaVwgOwor5Lit6YCU6YCA5a2mIDwgY2h1dXRvdGFpZ2FrdVwgOwor5YWx5ZCM5Lya6KaLIDwga3lvdWRvdWthaWtlblwgOwor5oay5rOV5a2m6ICFIDwga2VucG91Z2FrdXNoYVwgOwor5LiA5LqL5LiN5YaN6K2wIDwgaWNoaWppZnVzYWlnaVwgOwor5Ym15bu66KiY5b+15pelIDwgc291a2Vua2luZW5iaVwgOwor5pmu6YGN5aal5b2T5oCnIDwgZnVoZW5kYXRvdXNlaVwgOwor5Y6f5a2Q54iG5by+IDwgZ2Vuc2hpYmFrdWRhblwgOwor5Y6f5a2Q56C05aOK5qmfIDwgZ2Vuc2hpaGFrYWlraVwgOwor55m75bGx6YmE6YGTIDwgdG96YW50ZXRzdWRvdVwgOwor5paw5q2j5pyIIDwgc2hpbnNob3VnYXRzdVwgOwor54mp55CG5YyW5a2mIDwgYnV0c3VyaWthZ2FrdVwgOwor57Wm5rC05Yi26ZmQIDwga3l1dXN1aXNlaWdlblwgOwor5pyd6a6u5oim5LqJIDwgY2hvdXNlbnNlbnNvdVwgOwor5auM5rCX55Sf54mpIDwga2Vua2lzZWlidXRzdVwgOwor6YG45oqe54q25oWLIDwgc2VudGFrdWpvdXRhaVwgOwor5Li76aOf54mpIDwgc2h1c2hva3VidXRzdVwgOwor6auY5bOw5YWr5bqnIDwga291aG91aGFjaGl6YVwgOwor5LiN5raI5YyW54mpIDwgZnVzaG91a2FidXRzdVwgOwor5rOV55qE5paH5pu4IDwgaG91dGVraWJ1bnNob1wgOwor56eY5a+G6YG45oyZIDwgaGltaXRzdXNlbmt5b1wgOwor6Zmz5YiX5qOaIDwgY2hpbnJldHN1ZGFuYVwgOwor5paw54ax5biv5Yy6IDwgc2hpbicnbmV0dGFpa3VcIDsKK+e1kOWpmuaMh+i8qiA8IGtla2tvbicneXViaXdhXCA7CivlloTpmqPlj4vlpb0gPCB6ZW5yaW4nJ3l1dWtvdVwgOwor5Y+X5Y+W5omL5b2iIDwgdWtldG9yaXRlZ2F0YVwgOwor5rG6566X5aCx5ZGKIDwga2Vzc2FuaG91a29rdVwgOwor5b+D55CG5a2m6ICFIDwgc2hpbnJpZ2FrdXNoYVwgOwor6ZuR5Y+O5YWlIDwgemF0c3VzaHV1bnl1dVwgOwor6KuW55CG5b2i5byPIDwgcm9ucmlrZWlzaGlraVwgOwor5L2O6aCt5bmz6LqrIDwgdGVpdG91aGVpc2hpblwgOwor5re35ZCI6L6y5qWtIDwga29uZ291bm91Z3lvdVwgOwor5paH6Iq45L2c5ZOBIDwgYnVuZ2Vpc2FrdWhpblwgOwor5pyJ6ZaR6ZqO57SaIDwgeXV1a2Fua2Fpa3l1dVwgOwor5Y+L5aW95p2h57SEIDwgeXV1a291am91eWFrdVwgOwor5YmH5aSp5Y6756eBIDwgc29rdXRlbmt5b3NoaVwgOwor5YaZ5a6f5Li7576pIDwgc2hhaml0c3VzaHVnaVwgOwor5Zu96Zqb5biC5aC0IDwga29rdXNhaXNoaWpvdVwgOwor5LqM6YeN55Sf5rS7IDwgbmlqdXVzZWlrYXRzdVwgOwor6Ieo5qmf55uu5qiZIDwgcmlua2ltb2t1aHlvdVwgOwor5ZWG5qWt55m76KiYIDwgc2hvdWd5b3V0b3VraVwgOwor6buE6Imy5Lq656iuIDwgb3VzaG9rdWppbnNodVwgOwor5ZGo5rOi5aSJ6Kq/IDwgc2h1dWhhaGVuY2hvdVwgOwor5qyg6Zml5ZWG5ZOBIDwga2Vra2Fuc2hvdWhpblwgOwor5b6T5bGe5aSJ5pWwIDwganV1em9rdWhlbnN1dVwgOwor5pei57SE6KGo54++IDwga2l5YWt1aHlvdWdlblwgOwor6Kmx5Y2K5YiGIDwgaGFuYXNoaWhhbmJ1blwgOwor5LiN6Imv5bCR5bm0IDwgZnVyeW91c2hvdW5lblwgOwor5ris6YeP5oqA5birIDwgc29rdXJ5b3VnaXNoaVwgOwor5qOu576F5LiH6LGhIDwgc2hpbnJhYmFuc2hvdVwgOwor55Sj5qWt5qeL6YCgIDwgc2FuZ3lvdWtvdXpvdVwgOwor5qyn5bee6Ku45Zu9IDwgb3VzaHV1c2hva29rdVwgOwor6YCa5Yuk5Zyw542EIDwgdHN1dWtpbmppZ29rdVwgOwor5pi86ZaT5Lq65Y+jIDwgY2h1dWthbmppbmtvdVwgOwor5Yqb5LiN6LazIDwgY2hpa2FyYWJ1c29rdVwgOwor5oCn5qC85Yik5patIDwgc2Vpa2FrdWhhbmRhblwgOwor5L+h6aC86Zai5L+CIDwgc2hpbnJhaWthbmtlaVwgOwor5bCx5a2m546HIDwgc2h1dWdha3VyaXRzdVwgOwor5ZCM5pyf6YCa5L+hIDwgZG91a2l0c3V1c2hpblwgOwor5LiJ6YeN54Sm54K5IDwgc2FuanV1c2hvdXRlblwgOwor5oqV56Wo57eP5pWwIDwgdG91aHlvdXNvdXN1dVwgOwor5aSn5bmF5Yi35pawIDwgb29oYWJhc2Fzc2hpblwgOwor5rC05LiK55S6IDwgbWluYWthbWltYWNoaVwgOwor57WQ5ama6KiY5b+15pelIDwga2Vra29ua2luZW5iaVwgOwor5aSn6Zuo5rOo5oSP5aCxIDwgb29hbWVjaHV1aWhvdVwgOwor5YiH5pat5oKj6ICFIDwgc2V0c3VkYW5rYW5qYVwgOwor6KKW5omL5YKN6KazIDwgc2h1dXNodWJvdWthblwgOwor5ouN5omL5Zad6YeHIDwgaGFrdXNodWthc3NhaVwgOwor5L2c5qWt5Luu6KqsIDwgc2FneW91a2FzZXRzdVwgOwor57WM5riI5oiQ6ZW3IDwga2VpemFpc2VpY2hvdVwgOwor57Gz5p2x6YOo5pmC6ZaTIDwgYmVpdG91YnVqaWthblwgOwor5ZCI5oiQ5a6d55+zIDwgZ291c2VpaG91c2VraVwgOwor57WQ57eg57WE57mUIDwga2V0dGVpc29zaGlraVwgOwor6Kaq5YiH5b+DIDwgc2hpbnNldHN1c2hpblwgOwor5YaG6YyQ5puy57eaIDwgZW5zdWlreW9rdXNlblwgOwor6IGW5L2T5oud6aCYIDwgc2VpdGFpaGFpcnlvdVwgOwor5bq25rCR6YeR6J6NIDwgc2hvbWlua2luJyd5dXVcIDsKK+S9k+epjeaKteaKlyA8IHRhaXNla2l0ZWlrb3VcIDsKK+WNlOWQjOe1hOWQiCA8IGt5b3Vkb3VrdW1pYWlcIDsKK+WFiOS9j+awkeaXjyA8IHNlbmp1dW1pbnpva3VcIDsKK+e1seS4gOaIpue3miA8IHRvdWl0c3VzZW5zZW5cIDsKK+WQjOaZgumAmuiosyA8IGRvdWppdHN1dXlha3VcIDsKK+WRqOefpeW+ueW6lSA8IHNodXVjaGl0ZXR0ZWlcIDsKK+iJsembo+i+m+iLpiA8IGthbicnbmFuc2hpbmt1XCA7CivmlL/lhZrlhoXplqMgPCBzZWl0b3VuYWlrYWt1XCA7CivliLbkvZzlrqQgPCBzZWlzYWt1c2hpdHN1XCA7CivljbPniannmoQgPCBzb2t1YnV0c3V0ZWtpXCA7Civnj77lnLDloLHlkYogPCBnZW5jaGlob3Vrb2t1XCA7Civmh7jos57llY/poYwgPCBrZW5zaG91bW9uZGFpXCA7CivliqPmgKfpgbrkvJ3lrZAgPCByZXNzZWlpZGVuc2hpXCA7CivmsbLlj5blj6MgPCBrdW1pdG9yaWd1Y2hpXCA7Civlgq3oiLnlpZHntIQgPCB5b3VzZW5rZWl5YWt1XCA7Civku4rkuIrlpKnnmocgPCBraW5qb3V0ZW4nJ25vdVwgOwor5LuW6Kaa55eH54q2IDwgdGFrYWt1c2hvdWpvdVwgOwor5qyg6aOf5YWQ56ulIDwga2Vzc2hva3VqaWRvdVwgOwor5aiv5qW955Wq57WEIDwgZ29yYWt1YmFuZ3VtaVwgOwor57K+56We5Yy75a2mIDwgc2Vpc2hpbicnaWdha3VcIDsKK+WGheWuueiovOaYjiA8IG5haXlvdXNob3VtZWlcIDsKK+WHuua4r+WBnOatoiA8IHNodWtrb3V0ZWlzaGlcIDsKK+Wkq+Wppue0hOadnyA8IGZ1dWZ1eWFrdXNva3VcIDsKK+aXheihjOalreiAhSA8IHJ5b2tvdWd5b3VzaGFcIDsKK+S9v+W+kuS/oee1jCA8IHNoaXRvc2hpbmt5b3VcIDsKK+Wkluizh+WwjuWFpSA8IGdhaXNoaWRvdW55dXVcIDsKK+eEoeS+oeWApOizh+eUoyA8IG11a2FjaGlzaGlzYW5cIDsKK+WBpeW6t+S/nemZuuWMuyA8IGtlbmtvdWhva2VuJydpXCA7CivluLjku7vlp5Tlk6HkvJogPCBqb3VuaW4nJ2lpbmthaVwgOwor5oiQ5Lq65pWZ6IKyIDwgc2Vpamlua3lvdWlrdVwgOwor5YWs5byP5Li7576pIDwga291c2hpa2lzaHVnaVwgOwor6KSH5pWw5qWt5YuZIDwgZnVrdXN1dWd5b3VtdVwgOwor56aB5qyy5Li7576pIDwga2luJyd5b2t1c2h1Z2lcIDsKK+epuuilsuitpuWgsSA8IGt1dXNodXVrZWlob3VcIDsKK+eUo+alreWGjeeUnyA8IHNhbmd5b3VzYWlzZWlcIDsKK+izg+iyuOS+oeagvCA8IGNoaW50YWlrYWtha3VcIDsKK+aIpumXmOWJjeWTqCA8IHNlbnRvdXplbnNob3VcIDsKK+S4gOiogOS4gOihjCA8IGljaGlnZW4nJ2lra291XCA7Civou5YgPCB0c3VtdWdpa3VydW1hXCA7CivlkLnlpY/mpb3lm6MgPCBzdWlzb3VnYWt1ZGFuXCA7Civnm7Tnt5rot53pm6IgPCBjaG9rdXNlbmt5b3JpXCA7Civov5HopqrntZDlqZogPCBraW5zaGlua2Vra29uXCA7CivnsbPoi7Hku4/omK0gPCBiZWllaWJ1dHN1cmFuXCA7Civoh6rnlLHkuLvnvqnogIUgPCBqaXl1dXNodWdpc2hhXCA7Civnn63ms6Llj5fkv6HmqZ8gPCB0YW5wYWp1c2hpbmtpXCA7CivlhbHlkIzkvZzmpa0gPCBreW91ZG91c2FneW91XCA7CivmuJvlj43mlL/nrZYgPCBnZW50YW5zZWlzYWt1XCA7Civlv4PnkIbkvZzmiKYgPCBzaGlucmlzYWt1c2VuXCA7Civnt4/poJjlqJggPCBzb3VyeW91bXVzdW1lXCA7CivkuIPnpo/npZ4gPCBzaGljaGlmdWt1amluXCA7Civlv4Poh5Pnp7vmpI0gPCBzaGluem91aXNob2t1XCA7CivmnInpmZDosqzku7sgPCB5dXVnZW5zZWtpbmluXCA7CivntYTnuZTlho3nt6ggPCBzb3NoaWtpc2FpaGVuXCA7Civnpo/pn7PmlZnkvJogPCBmdWt1aW5reW91a2FpXCA7CivplqLkv4Llia/oqZ4gPCBrYW5rZWlmdWt1c2hpXCA7Civlj7Lmlpnnt6jnuoIgPCBzaGlyeW91aGVuc2FuXCA7CivnibnliKXluK0gPCB0b2t1YmV0c3VzZWtpXCA7CivnjJ/lrpjpgYvli5UgPCByeW91a2FuJyd1bmRvdVwgOwor6IKJ5L2T5Yq05YONIDwgbmlrdXRhaXJvdWRvdVwgOwor56C05aOK5Li7576p6ICFIDwgaGFrYWlzaHVnaXNoYVwgOwor5Y+C54Wn5paH54yuIDwgc2Fuc2hvdWJ1bmtlblwgOwor6Z+z5qW955uj552jIDwgb25nYWt1a2FudG9rdVwgOwor5bmz6Lqr5L2O6aCtIDwgaGVpc2hpbnRlaXRvdVwgOwor5YWx55Sj5YiG5a2QIDwga3lvdXNhbmJ1bnNoaVwgOwor5LqI57SE5Ye654mIIDwgeW95YWt1c2h1cHBhblwgOwor54Kt5rC05YyW54mpIDwgdGFuc3Vpa2FidXRzdVwgOwor5b6h6YO95ZCI5Li7576pIDwgZ290c3Vnb3VzaHVnaVwgOwor5aSa6KGA6LOqIDwgdGFrZXRzdXNoaXRzdVwgOwor6L+R5Luj5paH5a2mIDwga2luZGFpYnVuZ2FrdVwgOwor5LqM5Y2B5pel5aSn5qC5IDwgaGF0c3VrYWRhaWtvblwgOwor5Zyw5pa55a6Y5bqBIDwgY2hpaG91a2FuY2hvdVwgOwor5Zub5YiG5LqU6KOCIDwgc2hpYnVuZ29yZXRzdVwgOwor57WM5riI5Zue5b6pIDwga2VpemFpa2FpZnVrdVwgOwor5a6f5a2Y5Li7576pIDwgaml0c3V6b25zaHVnaVwgOwor5oGS5rip5YuV54mpIDwga291b25kb3VidXRzdVwgOwor6YeO6I+c5LiA55q/IDwgeWFzYWloaXRvc2FyYVwgOwor5b2i5byP6KuW55CGIDwga2Vpc2hpa2lyb25yaVwgOwor5aSn5a2m5rWq5Lq6IDwgZGFpZ2FrdXJvdW5pblwgOwor5pqr5a6a5Y2U5a6aIDwgemFudGVpa3lvdXRlaVwgOwor6JC95LiL5YKY6YOo6ZqKIDwgcmFra2FzYW5idXRhaVwgOwor5pS+6YCB5aSn5a2mIDwgaG91c291ZGFpZ2FrdVwgOwor5rOV5b6L5Yi25bqmIDwgaG91cml0c3VzZWlkb1wgOwor6ZW36Led6Zui5L6d5a2YIDwgY2hvdWt5b3JpaXpvblwgOwor5L+h55So6YeR5bqrIDwgc2hpbicneW91a2lua29cIDsKK+acieWQjeeEoeWunyA8IHl1dW1laW11aml0c3VcIDsKK+e1gui6q+S8muWToSA8IHNodXVzaGlua2FpaW5cIDsKK+eskeatouWNg+S4hyA8IHNob3VzaGlzZW5iYW5cIDsKK+aWh+WtpuWNmuWjqyA8IGJ1bmdha3VoYWthc2VcIDsKK+W6reWFiOebuOWgtCA8IG5pd2FzYWtpc291YmFcIDsKK+a2iOiyu+iAheWBtCA8IHNob3VoaXNoYWdhd2FcIDsKK+eyvuelnuani+mAoCA8IHNlaXNoaW5rb3V6b3VcIDsKK+mJhOmqqOW3peS6iyA8IHRla2tvdHN1a291amlcIDsKK+WbveWIqeawkeemjyA8IGtva3VyaW1pbnB1a3VcIDsKK+i7veS9u+a1ruiWhCA8IGtlaWNob3VmdWhha3VcIDsKK+ayluepjeW5s+mHjiA8IGNodXVzZWtpaGVpeWFcIDsKK+mFqui+suijveWTgSA8IHJha3Vub3VzZWloaW5cIDsKK+isnee9quW6g+WRiiA8IHNoYXphaWtvdWtva3VcIDsKK+WvjOWbveW8t+WFtSA8IGZ1a29rdWt5b3VoZWlcIDsKK+WklumDreWbo+S9kyA8IGdhaWtha3VkYW50YWlcIDsKK+WFseWQjOS8gealrSA8IGt5b3Vkb3VraWd5b3VcIDsKK+majue0muekvuS8miA8IGthaWt5dXVzaGFrYWlcIDsKK+WvvuWkluaUv+etliA8IHRhaWdhaXNlaXNha3VcIDsKK+eyvumciuS/oeS7sCA8IHNlaXJlaXNoaW5rb3VcIDsKK++8p++8oueQhuirliA8IGppXCDMhGJpXCDMhHJpcm9uXCA7CivmmKXpoqjpp5jolakgPCBzaHVucHV1dGFpdG91XCA7CivmrbvliJHln7fooYwgPCBzaGlrZWlzaGlra291XCA7CivkuozogIXmip7kuIAgPCBuaXNoYXRha3VpdHN1XCA7CivphbjmgKflj43lv5wgPCBzYW5zZWloYW4nJ25vdVwgOwor5qC454iG55m6IDwga2FrdWJha3VoYXRzdVwgOwor5rC06YGT5paZ6YeRIDwgc3VpZG91cnlvdWtpblwgOwor56m65rCX5Yqb5a2mIDwga3V1a2lyaWtpZ2FrdVwgOwor5ZWG5aOy5rCX6LOqIDwgc2hvdWJhaWthdGFnaVwgOwor6KiY6Yyy5paH5a2mIDwga2lyb2t1YnVuZ2FrdVwgOwor56ym5Y+35aSJ5o+b5ZmoIDwgZnVnb3VoZW5rYW5raVwgOwor5b285pa55q2k5pa5IDwgYWNoaXJha29jaGlyYVwgOwor56uL6Lqr5Ye65LiWIDwgcmlzc2hpbnNodXNzZVwgOwor5q2j6YeR6YqA6KGMIDwgc2hvdWtpbmdpbmtvdVwgOwor5YWx5riI5LqL5qWtIDwga3lvdXNhaWppZ3lvdVwgOwor5YWI6KGM5oqA6KGTIDwgc2Vua291Z2lqdXRzdVwgOwor5Zuz5pu455uu6YyyIDwgdG9zaG9tb2t1cm9rdVwgOwor6Ki85oug6Zqg5ruFIDwgc2hvdWtvaW5tZXRzdVwgOwor6YCB6YeR5bCP5YiH5omLIDwgc291a2lua29naXR0ZVwgOwor56u25LqJ6Zai5L+CIDwga3lvdXNvdWthbmtlaVwgOwor5b6X56Wo546HIDwgdG9rdWh5b3VyaXRzdVwgOwor6KGo5b2w5byPIDwgaHlvdXNob3VzaGlraVwgOwor5YWl5a2m5byPIDwgbnl1dWdha3VzaGlraVwgOwor5LqL5YmN5qSc6ZayIDwgaml6ZW5rZW4nJ2V0c3VcIDsKK+ihjOaUv+WHpuWIhiA8IGd5b3VzZWlzaG9idW5cIDsKK+WFqOmdouW6g+WRiiA8IHplbm1lbmtvdWtva3VcIDsKK+ezjiA8IHNlbmNoaW1laXRvcnVcIDsKK+WbveWLmemVt+WumCA8IGtva3VtdWNob3VrYW5cIDsKK+eyqCA8IGhla3V0b21lZXRvcnVcIDsKK+eyvuelnueXhemZoiA8IHNlaXNoaW5ieW91aW5cIDsKK+Wbm+WNgeS5neaXpSA8IHNoaWp1dWt1bmljaGlcIDsKK+adk+WtkOWumuimjyA8IHNoYWt1c2hpam91Z2lcIDsKK+WPr+WhkeeJqeizqiA8IGthc29idXNzaGl0c3VcIDsKK+eBsOeZveizqiA8IGthaWhha3VzaGl0c3VcIDsKK+WNiui+suWNiua8gSA8IGhhbicnbm91aGFuZ3lvXCA7Civpo5/nlKjmsrkgPCBzaG9rdXlvdWFidXJhXCA7Civogbfmpa3nmoQgPCBzaG9rdWd5b3V0ZWtpXCA7Civpo5/nlJ/mtLsgPCBzaG9rdXNlaWthdHN1XCA7CivmmrTpo7LmmrTpo58gPCBib3VpbmJvdXNob2t1XCA7CivnoJTnqbbliIbph44gPCBrZW5reXV1YnVuJyd5YVwgOwor5Lq65Y+j5a+G5bqmIDwgamlua291bWl0c3Vkb1wgOwor5Lq66Lqr5aOy6LK3IDwgamluc2hpbmJhaWJhaVwgOwor5q665Lq65pyq6YGCIDwgc2F0c3VqaW5taXN1aVwgOwor5Li45LiA5pyIIDwgbWFydWhpdG90c3VraVwgOwor6Laz5Yip5pmC5LujIDwgYXNoaWthZ2FqaWRhaVwgOwor5by+552A6Led6ZuiIDwgZGFuY2hha3VreW9yaVwgOwor6IG35qWt55eFIDwgc2hva3VneW91YnlvdVwgOwor5YuV54mp5qSc5p+7IDwgZG91YnV0c3VrZW5zYVwgOwor6Jas6aSM55mC5rOVIDwgeWFrdWppcnlvdWhvdVwgOwor5Lq66ZaT5Zu95a6dIDwgbmluZ2Vua29rdWhvdVwgOwor5Li45LiA5pelIDwgbWFydWljaGluaWNoaVwgOwor57eK6KaB5Zyw5b2iIDwga2luJyd5b3VjaGlrZWlcIDsKK+W4guWgtOaIkOmVtyA8IHNoaWpvdXNlaWNob3VcIDsKK+aMh+WQjeaKleelqCA8IHNoaW1laXRvdWh5b3VcIDsKK+WRiei2iuWQjOiInyA8IGdvZXRzdWRvdXNodXVcIDsKK+WuheWcsOmAoOaIkCA8IHRha3VjaGl6b3VzZWlcIDsKK+eyvuelnuWKtOWDjSA8IHNlaXNoaW5yb3Vkb3VcIDsKK+WutuaXj+ioiOeUuyA8IGthem9rdWtlaWtha3VcIDsKK+mWi+WPo+S4gOeVqiA8IGthaWtvdWljaGliYW5cIDsKK+ebtOezu+WNkeWxniA8IGNob2trZWloaXpva3VcIDsKK+WJsuizpuaWueW8jyA8IGthcHB1aG91c2hpa2lcIDsKK+avkueJqeWtpiA8IGRva3VidXRzdWdha3VcIDsKK+WLpOWKtOWkp+ihhiA8IGtpbnJvdXRhaXNodXVcIDsKK+acquWPjuWFpemHkSA8IG1pc2h1dW55dXVraW5cIDsKK+miqOS/l+WWtualrSA8IGZ1dXpva3VlaWd5b3VcIDsKK+awkeS/l+mfs+alvSA8IG1pbnpva3Vvbmdha3VcIDsKK+a1t+awtOa1tOWgtCA8IGthaXN1aXlva3Vqb3VcIDsKK+mAo+WQiOS9nOaIpiA8IHJlbmdvdXNha3VzZW5cIDsKK+S4oeiTi+aZguioiCA8IHJ5b3VidXRhZG9rZWlcIDsKK+S4u+Wuoui7ouWAkiA8IHNodWtha3V0ZW50b3VcIDsKK+WwseiBt+WFiCA8IHNodXVzaG9rdXNha2lcIDsKK+aQjeebiuWLmOWumiA8IHNvbicnZWtpa2Fuam91XCA7Civli5XlipvpmY3kuIsgPCBkb3VyeW9rdWtvdWthXCA7CivkuInop5Lpl5jkuokgPCBzYW5rYWt1dG91c291XCA7CivpgIDlrablh6bliIYgPCB0YWlnYWt1c2hvYnVuXCA7Civlrp/pqJPmnZDmlpkgPCBqaWtrZW56YWlyeW91XCA7Civlj6PntITmnZ8gPCBrdWNoaXlha3Vzb2t1XCA7Civlr77miKbou4rngavlmaggPCB0YWlzZW5zaGFrYWtpXCA7CivlvJfljJbmsLTntKDphbggPCBmdWtrYXN1aXNvc2FuXCA7Civph43opoHnlKPmpa0gPCBqdXV5b3VzYW5neW91XCA7CivmtrLkvZPnh4PmlpkgPCBla2l0YWluZW5yeW91XCA7CivkvJ3pgZPpm4bkvJogPCBkZW5kb3VzaHV1a2FpXCA7CivlhavpnaLlha3oh4IgPCBoYWNoaW1lbnJvcHBpXCA7Civlrp/lipvogIUgPCBqaXRzdXJ5b2t1c2hhXCA7CivmiY3msJfnhaXnmbogPCBzYWlraWthbnBhdHN1XCA7CivmhJ/mg4Xooajnj74gPCBrYW5qb3VoeW91Z2VuXCA7Civmuaflh7rph48gPCB5dXVzaHV0c3VyeW91XCA7CivkurrnqK7lt67liKUgPCBqaW5zaHVzYWJldHN1XCA7Civoi7Hlm73nmbrpn7MgPCBlaWtva3VoYXRzdW9uXCA7CivnhKHpmZDmlbDliJcgPCBtdWdlbnN1dXJldHN1XCA7Civnhp/mha7mlq3ooYwgPCBqdWt1cnlvZGFua291XCA7CivnrZLkupXnrZIgPCB0c3V0c3VpZHp1dHN1XCA7Civnm7TkuqTluqfmqJkgPCBjaG9ra291emFoeW91XCA7CivljJflpKrlubPmtIsgPCBraXRhdGFpaGVpeW91XCA7CivnlLflo7DlkIjllLEgPCBkYW5zZWlnYXNzaG91XCA7Civog4Pohbjnl4XlraYgPCBpY2hvdWJ5b3VnYWt1XCA7CivkuInop5LplqLkv4IgPCBzYW5rYWt1a2Fua2VpXCA7Civnm7joo5zmgKfljp/nkIYgPCBzb3Vob3NlaWdlbnJpXCA7CivokrjmsJfmqZ/plqLou4ogPCBqb3VraWtpa2Fuc2hhXCA7CivljZjni6zkvJroposgPCB0YW5kb2t1a2Fpa2VuXCA7CivkvJrloILlj7ggPCBrYWlkb3VkenVrYXNhXCA7CivplpPmrYfnhrEgPCBrYW5rZXRzdW5ldHN1XCA7CivosqHnlKPnm7jntpogPCB6YWlzYW5zb3V6b2t1XCA7CivkuIrmmbrlpKflraYgPCBqb3VjaGlkYWlnYWt1XCA7CivmlofljJbkuovmpa3pg6ggPCBidW5rYWppZ3lvdWJ1XCA7CivnhKHoqJjlkI3npL7lgrUgPCBtdWtpbWVpc2hhc2FpXCA7Civlg6flurXnlJ/mtLsgPCBzb3VhbnNlaWthdHN1XCA7Civms5XlvovnlKjoqp4gPCBob3VyaXRzdXlvdWdvXCA7Civpm4zpm4Tpgbjmip4gPCBzaGl5dXVzZW50YWt1XCA7Civnmb7oirHnuZrkubEgPCBoeWFra2FyeW91cmFuXCA7Civpn7Pmpb3nmYLms5UgPCBvbmdha3VyeW91aG91XCA7CivkvY/msJHnmbvpjLIgPCBqdXVtaW50b3Vyb2t1XCA7Civmlq3lsaTlhpnnnJ8gPCBkYW5zb3VzaGFzaGluXCA7CivljaDpoJjlnLDluK8gPCBzZW5yeW91Y2hpdGFpXCA7Civolqzlk4HkvJrnpL4gPCB5YWt1aGluZ2Fpc2hhXCA7Civlh7rlj6Poqr/mn7sgPCBkZWd1Y2hpY2hvdXNhXCA7CivlkIjlkIzmhbDpnIrnpa0gPCBnb3Vkb3VpcmVpc2FpXCA7Civog73li5XlhY3nlqsgPCBub3Vkb3VtZW4nJ2VraVwgOwor5Zyo55WZ6YKm5Lq6IDwgemFpcnl1dWhvdWppblwgOwor6bqm6JeB57Sw5belIDwgbXVnaXdhcmFzYWlrdVwgOwor5ZOy5a2m55qEIDwgdGV0c3VnYWt1dGVraVwgOwor5bel6Iq4576O6KGTIDwga291Z2VpYmlqdXRzdVwgOwor6Kqt5ZSH6KGTIDwgZG9rdXNoaW5qdXRzdVwgOwor6Iiq56m65pS75pKDIDwga291a3V1a291Z2VraVwgOwor6KO46Zu755CDIDwgaGFkYWthZGVua3l1dVwgOwor6YeN6YeP6YG45omLIDwganV1cnlvdXNlbnNodVwgOwor6LWk56uL57696J22IDwgYWthdGF0ZWhhY2hvdVwgOwor54Gr54G95aCx55+l5qmfIDwga2FzYWlob3VjaGlraVwgOwor6JuL55m96LOqIDwgdGFucGFrdXNoaXRzdVwgOwor5oSb6bOl6YCx6ZaTIDwgYWljaG91c2h1dWthblwgOwor5bel5qWt5YyW5a2mIDwga291Z3lvdWthZ2FrdVwgOwor5oqA6KGT5o+Q5pC6IDwgZ2lqdXRzdXRlaWtlaVwgOwor5Lit5oCn5a2Q5pifIDwgY2h1dXNlaXNoaXNlaVwgOwor5o6S5rOE54mpIDwgaGFpc2V0c3VidXRzdVwgOwor6aOf6IKJ55uuIDwgc2hva3VuaWt1bW9rdVwgOwor5YWs5YWx5LqL5qWtIDwga291a3lvdWppZ3lvdVwgOwor5LiK6LaK5pys57eaIDwgam91ZXRzdWhvbnNlblwgOwor5rS75YuV5YqbIDwga2F0c3Vkb3VyeW9rdVwgOwor54Sh5YSf5aWR57SEIDwgbXVzaG91a2VpeWFrdVwgOwor6Zu75rOi5o6i55+l5qmfIDwgZGVucGF0YW5jaGlraVwgOwor6ZaD5YWJ6Zu755CDIDwgc2Vua291ZGVua3l1dVwgOwor5Zu957GN6KiA6KqeIDwga29rdXNla2lnZW5nb1wgOwor5a6a5rip5YuV54mpIDwgdGVpb25kb3VidXRzdVwgOwor56m65YmN57W25b6MIDwga3V1emVuemV0c3Vnb1wgOwor5L6155Wl55qEIDwgc2hpbnJ5YWt1dGVraVwgOwor5q2m5Yqb5aSW5LqkIDwgYnVyeW9rdWdhaWtvdVwgOwor5Yed6ZuG5YqbIDwgZ3lvdXNodXVyeW9rdVwgOwor5oi457GN5oqE5pysIDwga29zZWtpc2hvdWhvblwgOwor5pyd6a6u5Y2K5bO2IDwgY2hvdXNlbmhhbnRvdVwgOwor5Y+v5aSJ5oq15oqX5ZmoIDwga2FoZW50ZWlrb3VraVwgOwor6Z2e5bi45Y+s6ZuGIDwgaGlqb3VzaG91c2h1dVwgOwor5YWo6Iis5YmN5ZOoIDwgemVucGFuemVuc2hvdVwgOwor5aSn5LmX5LuP5pWZIDwgZGFpam91YnVra3lvdVwgOwor5YiG5p6Q6Kmm6aiTIDwgYnVuc2VraXNoaWtlblwgOwor5YWs5YuZ5ZOh6Kmm6aiTIDwga291bXVpbnNoaWtlblwgOwor5bm96ZyK5bGL5pW3IDwgeXV1cmVpeWFzaGlraVwgOwor5pyJ55Sj6ZqO57SaIDwgeXV1c2Fua2Fpa3l1dVwgOwor5qip5Yqb5pS/5rK7IDwga2Vucnlva3VzZWlqaVwgOwor6ISF6L+r6Zu76KmxIDwga3lvdWhha3VkZW53YVwgOwor6Ii56I236Ki85Yi4IDwgZnVuYW5pc2hvdWtlblwgOwor5omL5peX5L+h5Y+3IDwgdGViYXRhc2hpbmdvdVwgOwor5qCE6aSK5aSx6Kq/IDwgZWl5b3VzaGl0Y2hvdVwgOwor5L2c5rOB5oyH5pWwIDwgc2Fra3lvdXNoaXN1dVwgOwor55u45LqS6YCa5L+hIDwgc291Z290c3V1c2hpblwgOwor6KGo5bGk6Zuq5bSpIDwgaHlvdXNvdW5hZGFyZVwgOwor54G95a6z5a++562WIDwgc2FpZ2FpdGFpc2FrdVwgOwor5LqL5a6f6Kq/5p+7IDwgamlqaXRzdWNob3VzYVwgOwor5pel57WM5paw6IGeIDwgbmlra2Vpc2hpbmJ1blwgOwor5Lit6ZaT6YG45oyZIDwgY2h1dWthbnNlbmt5b1wgOwor5biC6ZW36YG45oyZIDwgc2hpY2hvdXNlbmt5b1wgOwor5rKI6ZmN5rW35bK4IDwgY2hpbmtvdWthaWdhblwgOwor542F5a2Q6aCtIDwgc2hpc2hpZ2FzaGlyYVwgOwor5a6H5a6Z6aOb6KGM5aOrIDwgdWNodXVoaWtvdXNoaVwgOwor56S+5Lya56aP56WJIDwgc2hha2FpZnVrdXNoaVwgOwor6KuW5Yqf6KGM6LOeIDwgcm9ua291a291c2hvdVwgOwor5a6f6Le16Lqs6KGMIDwgamlzc2Vua3l1dWtvdVwgOwor6Kaz5a+f5YqbIDwga2Fuc2F0c3VyeW9rdVwgOwor5q2j5Ymv5LqM6YCaIDwgc2VpZnVrdW5pdHN1dVwgOwor5Lqk5oSf56We57WMIDwga291a2Fuc2hpbmtlaVwgOwor5raI6LK76Z2p5ZG9IDwgc2hvdWhpa2FrdW1laVwgOwor6ISx5Yqb5oSfIDwgZGF0c3VyeW9rdWthblwgOwor5bCC5Lu76Kyb5birIDwgc2VuJyduaW5rb3VzaGlcIDsKK+aUr+WHuumhjSA8IHNoaXNodXRzdWdha3VcIDsKK+Wkp+mHj+eUn+eUoyA8IHRhaXJ5b3VzZWlzYW5cIDsKK+acgOmrmOapn+WvhiA8IHNhaWtvdWtpbWl0c3VcIDsKK+euoeW8pualveazlSA8IGthbmdlbmdha3Vob3VcIDsKK+aWsOWTgeWQjOanmCA8IHNoaW5waW5kb3V5b3VcIDsKK+Wkp+iZkOauuiA8IGRhaWd5YWt1c2F0c3VcIDsKK+WJjea4oemHkSA8IG1hZXdhdGFzaGlraW5cIDsKK+eci+itt+WppuWtpumZoiA8IGthbmdvZnVnYWt1aW5cIDsKK+WCmeiNkuiyr+iThCA8IGJpa291Y2hvY2hpa3VcIDsKK+iWhOW/l+W8seihjCA8IGhha3VzaGlqYWtrb3VcIDsKK+WLpOWKtOmajue0miA8IGtpbnJvdWthaWt5dXVcIDsKK+S5s+eZveiJsiA8IG55dXVoYWt1c2hva3VcIDsKK+aXpeWNsOmWouS/giA8IG5pY2hpaW5rYW5rZWlcIDsKK+e1gualreW8jyA8IHNodXVneW91c2hpa2lcIDsKK+mVt+acn+ioiOeUuyA8IGNob3VraWtlaWtha3VcIDsKK+eIhueZuueahCA8IGJha3VoYXRzdXRla2lcIDsKK+S4jeaZguedgOmZuCA8IGZ1amljaGFrdXJpa3VcIDsKK+aOkuazhOWZqOWumCA8IGhhaXNldHN1a2lrYW5cIDsKK+iLseaWh+ino+mHiCA8IGVpYnVua2Fpc2hha3VcIDsKK+WFjeiyrOadoemghSA8IG1lbnNla2lqb3Vrb3VcIDsKK+mJhOmBk+e3mui3ryA8IHRldHN1ZG91c2Vucm9cIDsKK+WNgeWtl+i7jemojuWjqyA8IGp1dWppZ3Vua2lzaGlcIDsKK+aUu+aSg+aFi+WLoiA8IGtvdWdla2l0YWlzZWlcIDsKK+Wumuacn+aYh+e1piA8IHRlaWtpc2hvdWt5dXVcIDsKK+iomOi/sOaWh+azlSA8IGtpanV0c3VidW5wb3VcIDsKK+iHo+exjemZjeS4iyA8IHNoaW5zZWtpa291a2FcIDsKK+eCremFuOmjsuaWmSA8IHRhbnNhbicnaW5yeW91XCA7CivluILloLTmi6HlpKcgPCBzaGlqb3VrYWt1ZGFpXCA7Civnsr7lr4bmqZ/morAgPCBzZWltaXRzdWtpa2FpXCA7CivnhKHmqZ/pq5jliIblrZAgPCBtdWtpa291YnVuc2hpXCA7CivmqZ/li5Xorablr58gPCBraWRvdWtlaXNhdHN1XCA7CivmuIXlhYPnr4AgPCBraXlvbW90b2J1c2hpXCA7CivlubTplpPlj47nm4ogPCBuZW5rYW5zaHV1ZWtpXCA7Civku7Loo4Hoo4HlrpogPCBjaHV1c2Fpc2FpdGVpXCA7Civpm7fopqrniLYgPCBrYW1pbmFyaW95YWppXCA7CivlgbXlr5/opoHlk6EgPCB0ZWlzYXRzdXlvdWluXCA7CivnpZ7ntYzos6ogPCBzaGlua2Vpc2hpdHN1XCA7Civmlofol53mmKXnp4sgPCBidW5nZWlzaHVuanV1XCA7CivkurrlvaLoip3lsYUgPCBuaW5neW91c2hpYmFpXCA7CivmsLTkuK3nnLzpj6EgPCBzdWljaHV1bWVnYW5lXCA7Civlhazluo/oia/kv5cgPCBrb3Vqb3J5b3V6b2t1XCA7CivmjqXnnYDlipsgPCBzZXRjaGFrdXJ5b2t1XCA7CivkupTmnIjluZ8gPCBzYXRzdWtpbm9ib3JpXCA7CivlqZrliY3kuqTmuIkgPCBrb256ZW5rb3VzaG91XCA7CivlpKrpmb3pu5LngrkgPCB0YWl5b3Vrb2t1dGVuXCA7CivkuIrlvqHkuIDkurogPCBrYW1pZ29pY2hpbmluXCA7CivkuLvopoHlt6Xmpa0gPCBzaHV5b3Vrb3VneW91XCA7CivkuIvnrYnli5XniakgPCBrYXRvdWRvdWJ1dHN1XCA7CivpgIbovLjlh7ogPCBneWFrdXl1c2h1dHN1XCA7CivnmoTkuK3njocgPCB0ZWtpY2h1dXJpdHN1XCA7Civlu7roqK3osrsgPCBrZW5zZXRzdWhpeW91XCA7Civoh6XolqrlmJfog4YgPCBnYXNoaW5zaG91dGFuXCA7CivmjIfmj67miYDmvJTnv5IgPCBzaGlraWpvZW5zaHV1XCA7CivoqLrnmYLmlK/mj7QgPCBzaGlucnlvdXNoaWVuXCA7Civou6LlnLDnmYLppIogPCB0ZW5jaGlyeW91eW91XCA7CivkuIfog73pgbjmiYsgPCBiYW4nJ25vdXNlbnNodVwgOwor5pWZ5Lya6Z+z5qW9IDwga3lvdWthaW9uZ2FrdVwgOwor5Y2D6LyJ5LiA6YGHIDwgc2VuemFpaWNoaWd1dVwgOwor5bGI5oqY546HIDwga3Vzc2V0c3VyaXRzdVwgOwor5aOy6LK35aWR57SEIDwgYmFpYmFpa2VpeWFrdVwgOwor5L2P5a6F5Zyw5bivIDwganV1dGFrdWNoaXRhaVwgOwor5rib6YCf6KOF572uIDwgZ2Vuc29rdXNvdWNoaVwgOwor5L2P5a6F5ZWP6aGMIDwganV1dGFrdW1vbmRhaVwgOwor6Ii56ZW35a6kIDwgc2VuY2hvdXNoaXRzdVwgOwor5YWN55ar6KGA5riFIDwgbWVuJydla2lrZXNzZWlcIDsKK+aguOWPjeW/nOeCiSA8IGtha3VoYW4nJ25vdXJvXCA7CivkuLvmlZnlrqQgPCBzaHVreW91c2hpdHN1XCA7CivmlL7lsITnt5rlraYgPCBob3VzaGFzZW5nYWt1XCA7CivmtYHpgJrntYzot68gPCByeXV1dHN1dWtlaXJvXCA7CivkuozphbjljJbnqpLntKAgPCBuaXNhbmthY2hpc3NvXCA7CivlsIvluLjkuIDmp5ggPCBqaW5qb3VpY2hpeW91XCA7Civlm73mnInosqHnlKMgPCBrb2t1eXV1emFpc2FuXCA7CivluILmsJHpmo7ntJogPCBzaGltaW5rYWlreXV1XCA7CivoqIDoqp7nn6XorZggPCBnZW5nb2NoaXNoaWtpXCA7CivlhazlhbHmlL7pgIEgPCBrb3VreW91aG91c291XCA7CivlrqTlhoXmpb0gPCBzaGl0c3VuYWlnYWt1XCA7CivmlpHnirbntYTnuZQgPCBoYW5qb3Vzb3NoaWtpXCA7Civkurrmg4XoqbEgPCBuaW5qb3ViYW5hc2hpXCA7Civph43niIbmkoPmqZ8gPCBqdXViYWt1Z2VraWtpXCA7CivlqZrlpJbkuqTmuIkgPCBrb25nYWlrb3VzaG91XCA7Civku7Loo4Hoo4HliKQgPCBjaHV1c2Fpc2FpYmFuXCA7Civkvq/niLXlpKvkurogPCBrb3VzaGFrdWZ1amluXCA7Civmv4Pnt5HoibIgPCBub3VyeW9rdXNob2t1XCA7CivmnInoibLph47oj5wgPCB5dXVzaG9rdXlhc2FpXCA7Civpm4blm6PoqLToqJ8gPCBzaHV1ZGFuc29zaG91XCA7CivkuIDmrKHnlKPmpa0gPCBpY2hpamlzYW5neW91XCA7Civnt7Tnv5LkuI3otrMgPCByZW5zaHV1YnVzb2t1XCA7CivllYboiLnlrabmoKEgPCBzaG91c2VuZ2Fra291XCA7Civpuqbol4HonLvom4kgPCBtdWdpd2FyYXRvbmJvXCA7Civoh6rli5Xou4rpm7voqbEgPCBqaWRvdXNoYWRlbndhXCA7CivmnInpmZDpm4blkIggPCB5dXVnZW5zaHV1Z291XCA7Civov73liqDmlpnph5EgPCB0c3Vpa2FyeW91a2luXCA7CivOoOS4remWk+WtkCA8IHBhaWNodXVrYW5zaGlcIDsKK+mBoOmalOaVmeiCsiA8IGVua2FrdWt5b3Vpa3VcIDsKK+iEs+iEiumrhOa2siA8IG5vdXNla2l6dWlla2lcIDsKK+aDheWgseWPr+imluWMliA8IGpvdWhvdWthc2hpa2FcIDsKK+adseilv+WNl+WMlyA8IHRvdXphaW5hbmJva3VcIDsKK+ioseWuuee3mumHjyA8IGt5b3lvdXNlbnJ5b3VcIDsKK+ato+acreWApOautSA8IHNob3VmdWRhbmVkYW5cIDsKK+W/nOaOpeWupCA8IG91c2V0c3VzaGl0c3VcIDsKK+W3ruWIpemWoueojiA8IHNhYmV0c3VrYW56ZWlcIDsKK+S4reetieWtpuagoSA8IGNodXV0b3VnYWtrb3VcIDsKK+euoeW8pualveWboyA8IGthbmdlbmdha3VkYW5cIDsKK+S+teeVpeWbvSA8IHNoaW5yeWFrdWtva3VcIDsKK+WvhOeUn+eUn+eJqSA8IGtpc2Vpc2VpYnV0c3VcIDsKK+S4u+aoqeWbnuW+qSA8IHNodWtlbmthaWZ1a3VcIDsKK+S4oemDqOelnumBkyA8IHJ5b3VidXNoaW50b3VcIDsKK+S+jeawl+izqiA8IHNhbXVyYWlrYXRhZ2lcIDsKK+eUs+i+vOabuCA8IG1vdXNoaWtvbWlzaG9cIDsKK+e1ueW4g+S4gOW3uyA8IGtlbnB1aGl0b21ha2lcIDsKK+mBjuWcp+WvhuavlCA8IGthYXRzdW1pdHN1aGlcIDsKK+aRguawj++8ku+8kOW6piA8IHNlc3NoaW5panV1ZG9cIDsKK+iHqueEtumBuOaKniA8IHNoaXplbnNlbnRha3VcIDsKK+ebtOiqrOazlSA8IGNob2t1c2V0c3Vob3VcIDsKK+S4i+eUuumiqCA8IHNoaXRhbWFjaGlmdXVcIDsKK+WPjeW/nOmAn+W6piA8IGhhbicnbm91c29rdWRvXCA7CivlsI/lnovotaTlrrbomoogPCBrb2dhdGFha2FpZWthXCA7CivlgbXlr5/ooZvmmJ8gPCB0ZWlzYXRzdWVpc2VpXCA7Civpo5/kuK3mr5IgPCBzaG9rdWNodXVkb2t1XCA7CivmraPlia/orbDplbcgPCBzZWlmdWt1Z2ljaG91XCA7CivnlKPlh7rpq5ggPCBzYW5zaHV0c3VkYWthXCA7CivnpZ7liY3ntZDlqZogPCBzaGluemVua2Vra29uXCA7Civms5XnmoTmiYvmrrUgPCBob3V0ZWtpc2h1ZGFuXCA7CivkvZzmpa3poJjln58gPCBzYWd5b3VyeW91aWtpXCA7CivlubTph5HoqLzmm7ggPCBuZW5raW5zaG91c2hvXCA7CivkuqTpgJrlpqjlrrMgPCBrb3V0c3V1Ym91Z2FpXCA7CivnlLrmnZHlkIjkvbUgPCBjaG91c29uZ2FwcGVpXCA7CivmlZnkvJrml4vms5UgPCBreW91a2Fpc2VucG91XCA7CivluZXol6nkvZPliLYgPCBiYWt1aGFudGFpc2VpXCA7CivnrKzkuIDljbDosaEgPCBkYWlpY2hpaW5zaG91XCA7CivnnJ/nqbrljIXoo4UgPCBzaGlua3V1aG91c291XCA7Civnm6Pmn7voqLzot6EgPCBrYW5zYXNob3VzZWtpXCA7CivoqpjlsI7pm7vmtYEgPCB5dXVkb3VkZW5yeXV1XCA7Civlvqnml6fkvZzmpa0gPCBmdWtreXV1c2FneW91XCA7Civkvpvlh7rnsbMgPCBreW91c2h1dHN1bWFpXCA7CivmkI3lrrPos6DlhJ8gPCBzb25nYWliYWlzaG91XCA7Civmg7Plg4/lporlqKAgPCBzb3V6b3VuaW5zaGluXCA7CivomZrlv4Plnabmh5AgPCBreW9zaGludGFua2FpXCA7CivogJDpnIfmp4vpgKAgPCB0YWlzaGlua291em91XCA7CivmnInpmZDntJrmlbAgPCB5dXVnZW5reXV1c3V1XCA7CivlopfoqK3njocgPCB6b3VzZXRzdXJpdHN1XCA7Civlm73lnJ/oqIjnlLsgPCBrb2t1ZG9rZWlrYWt1XCA7CivnlJ/lrZjnq7bkuokgPCBzZWl6b25reW91c291XCA7CivntZDlqZrmiqvpnLLlrrQgPCBrZWtrb25oaXJvdWVuXCA7CivluILmsJHpnanlkb0gPCBzaGltaW5rYWt1bWVpXCA7CivlnKflipvpjYsgPCBhdHN1cnlva3VuYWJlXCA7CivlpKfntbHpoJjpgbggPCBkYWl0b3VyeW91c2VuXCA7Civoo5znv5LmlZnogrIgPCBob3NodXVreW91aWt1XCA7Civlj7jku6TplbflrpggPCBzaGlyZWljaG91a2FuXCA7Civos4Pph5HkvZPns7sgPCBjaGluZ2ludGFpa2VpXCA7CivmtbfkuIroh6rooZvpmoogPCBrYWlqb3VqaWVpdGFpXCA7CivlhajkurrmlZnogrIgPCB6ZW5qaW5reW91aWt1XCA7CivlrpjmiL/plbflrpggPCBrYW5ib3VjaG91a2FuXCA7CivkvIHmpa3np5jlr4YgPCBraWd5b3VoaW1pdHN1XCA7Civmrrrkurrkuovku7YgPCBzYXRzdWppbmppa2VuXCA7Civlm6PmoJfnnLwgPCBkb25ndXJpbWFuYWtvXCA7CivlnKflipvph5wgPCBhdHN1cnlva3VnYW1hXCA7Civlh7bmgqrniq/nvaogPCBreW91YWt1aGFuemFpXCA7CivlpKnnhLbos4fmupAgPCB0ZW4nJ25lbnNoaWdlblwgOwor55m+5aeT5LiA5o+GIDwgaHlha3VzaG91aWtraVwgOwor5Y6f5qGI5aeU5ZOh5LyaIDwgZ2VuJydhbicnaWlua2FpXCA7CivmsJflr4blrqQgPCBraW1pdHN1c2hpdHN1XCA7Civnt4/lkIjlpKflraYgPCBzb3Vnb3VkYWlnYWt1XCA7Civku4/poILlsIrli50gPCBidWNob3Vzb25zaG91XCA7CivljYPlt67kuIfliKUgPCBzZW5zYWJhbmJldHN1XCA7CivpgbjmiYvmqKnoqablkIggPCBzZW5zaHVrZW5qaWFpXCA7CivntrLnirbntYTnuZQgPCBtb3Vqb3Vzb3NoaWtpXCA7CivnrKzkuIDpg6jplbcgPCBkYWlpY2hpYnVjaG91XCA7Civmupbmupbmsbrli50gPCBqdW5qdW5rZXNzaG91XCA7CivlpKflkozmsJHml48gPCB5YW1hdG9taW56b2t1XCA7Civlv5zmjqXkv4IgPCBvdXNldHN1Z2FrYXJpXCA7CivlnLDmrrvlpInli5UgPCBjaGlrYWt1aGVuZG91XCA7CivosqHmlL/mlLnpnakgPCB6YWlzZWlrYWlrYWt1XCA7CivlhbHlkIzoqIjnrpcgPCBreW91ZG91a2Vpc2FuXCA7CivlpbPmiL/oqZ4gPCBueW91Ym91a290b2JhXCA7CivlhpnnnJ/pm7vpgIEgPCBzaGFzaGluZGVuc291XCA7CivliIbliJflvI8gPCBidW5yZXRzdXNoaWtpXCA7CivkuI3oia/oqLrmlq0gPCBmdXJ5b3VzaGluZGFuXCA7CivmsLTnlKPlpKflraYgPCBzdWlzYW5kYWlnYWt1XCA7CivljZjlvI/ngavlsbEgPCB0YW5zaGlraWthemFuXCA7CivkuIDliIbkuIDljpggPCBpY2hpYnVpY2hpcmluXCA7Civlrp/lnLDmpJzoqLwgPCBqaXRjaGlrZW5zaG91XCA7CivljJfmuIXkuovlpIkgPCBob2t1c2hpbmppaGVuXCA7CivkurrpnaLnjaPlv4MgPCBuaW5tZW5qdXVzaGluXCA7Civopqrku7vlvI8gPCBzaGluJyduaW5zaGlraVwgOwor6KiI55S75q616ZqOIDwga2Vpa2FrdWRhbmthaVwgOwor55Sf5rS75YqbIDwgc2Vpa2F0c3VyeW9rdVwgOwor56S+5ZOh6aOf5aCCIDwgc2hhaW5zaG9rdWRvdVwgOwor6YO15L6/5paZ6YeRIDwgeXV1YmlucnlvdWtpblwgOwor5LqU5Y2B5LiJ5qyhIDwgZ29qdXVzYW50c3VnaVwgOwor5YSq5Yud5Yqj5pWXIDwgeXV1c2hvdXJlcHBhaVwgOwor5b+r6YCf5YiX6LuKIDwga2Fpc29rdXJlc3NoYVwgOwor6Zuj5rCR5p2h57SEIDwgbmFubWluam91eWFrdVwgOwor5Zu96Zqb5pS+6YCBIDwga29rdXNhaWhvdXNvdVwgOwor5YWt5Y2B5L2Z5beeIDwgcm9rdWp1dXlvc2h1dVwgOwor5oCl6KGM5YiX6LuKIDwga3l1dWtvdXJlc3NoYVwgOwor5pel5ZKM6KaL5Li7576pIDwgaGl5b3JpbWlzaHVnaVwgOwor5qOu5p6X5Zyw5bivIDwgc2hpbnJpbmNoaXRhaVwgOwor6Y6W5Zu95pS/562WIDwgc2Frb2t1c2Vpc2FrdVwgOwor5YW36LGh576O6KGTIDwgZ3VzaG91YmlqdXRzdVwgOwor5oeQ55+z5paZ55CGIDwga2Fpc2VraXJ5b3VyaVwgOwor57Ch5piT6aOf5aCCIDwga2FuJydpc2hva3Vkb3VcIDsKK+aal+m7kuWkp+mZuCA8IGFua29rdXRhaXJpa3VcIDsKK+mnhemVt+WupCA8IGVraWNob3VzaGl0c3VcIDsKK+WPjeWLlemdqeWRvSA8IGhhbmRvdWtha3VtZWlcIDsKK+WFreaguea4hea1hCA8IHJva2tvbnNob3Vqb3VcIDsKK+WVhualreS4u+e+qSA8IHNob3VneW91c2h1Z2lcIDsKK+S7ruijheiInui4j+S8miA8IGthc291YnV0b3VrYWlcIDsKK+S/oemgvOmGuOaIkCA8IHNoaW5yYWlqb3VzZWlcIDsKK+WFseWQjOWjsOaYjiA8IGt5b3Vkb3VzZWltZWlcIDsKK+mBruWFieWZqOWcn+WBtiA8IHNoYWtvdWtpZG9ndXVcIDsKK+WJsuW8leWIh+espiA8IHdhcmliaWtpa2lwcHVcIDsKK+S4i+awtOWHpueQhuWgtCA8IGdlc3Vpc2hvcmlqb3VcIDsKK+WGt+WNtOacn+mWkyA8IHJlaWt5YWt1a2lrYW5cIDsKK+aBmeiZqyA8IHRzdXRzdWdhbXVzaGlcIDsKK+S5neatu+S4gOeUnyA8IGt5dXVzaGlpc3Nob3VcIDsKK+S4reiPr+awkeWbvSA8IGNodXVrYW1pbmtva3VcIDsKK+WQiOeQhuS4u+e+qeiAhSA8IGdvdXJpc2h1Z2lzaGFcIDsKK+aLoeWjsOijhee9riA8IGtha3VzZWlzb3VjaGlcIDsKK+mBk+i3r+W7uuiorSA8IGRvdXJva2Vuc2V0c3VcIDsKK+S6uumAoOWuneefsyA8IGppbnpvdWhvdXNla2lcIDsKK+i8uOWHuuS/nemZuiA8IHl1c2h1dHN1aG9rZW5cIDsKK+W/heS/ruenkeebriA8IGhpc3NodXVrYW1va3VcIDsKK+e1puS4juaJgOW+lyA8IGt5dXV5b3Nob3Rva3VcIDsKK+attOWPsuWtpua0viA8IHJla2lzaGlnYWt1aGFcIDsKK+etieW3ruaVsOWIlyA8IHRvdXNhc3V1cmV0c3VcIDsKK+WQm+WtkOixueWkiSA8IGt1bnNoaWh5b3VoZW5cIDsKK+S4i+ihqOWPgueFpyA8IGthaHlvdXNhbnNob3VcIDsKK+WLouWKm+evhOWbsiA8IHNlaXJ5b2t1aGFuJydpXCA7CivpgJrosqjmlL/nrZYgPCB0c3V1a2FzZWlzYWt1XCA7Civni6zljaDkvIHmpa0gPCBkb2t1c2Vua2lneW91XCA7CivnibnmqKnpmo7ntJogPCB0b2trZW5rYWlreXV1XCA7CivmraPopo/mm7Lnt5ogPCBzZWlraWt5b2t1c2VuXCA7Civlgo3ogbTnhKHmlpkgPCBib3VjaG91bXVyeW91XCA7CivnlKPmpa3os4fmnKwgPCBzYW5neW91c2hpaG9uXCA7Civmpb3lmajmvJTlpY/ogIUgPCBnYWtraWVuc291c2hhXCA7Civnq4vnn7Ppm7vmqZ8gPCB0YXRlaXNoaWRlbmtpXCA7CivlpJzplpPkuK3lraYgPCB5YWthbmNodXVnYWt1XCA7Civosr/mmJPmkanmk6YgPCBib3Vla2ltYXNhdHN1XCA7CivlubTovKrlj7LlraYgPCBuZW5yaW5zaGlnYWt1XCA7Civlrrbku5jlqJggPCBpZXRzdWtpbXVzdW1lXCA7CivmqZ/morDnv7voqLMgPCBraWthaWhvbicneWFrdVwgOwor6YeR56eR546J5p2hIDwga2lua2FneW9rdWpvdVwgOwor5rCR6ZaT55mC5rOVIDwgbWlua2FucnlvdWhvdVwgOwor5oOF5rOB6Ki85ougIDwgam91a3lvdXNob3Vrb1wgOwor5Y+k5YW45Li7576p6ICFIDwga290ZW5zaHVnaXNoYVwgOwor5b+D5oK45Lqi6YCyIDwgc2hpbmtpa291c2hpblwgOwor5Zu95Zyf5Zyw55CG6ZmiIDwga29rdWRvY2hpcmlpblwgOwor5a6a5oCn5YiG5p6QIDwgdGVpc2VpYnVuc2VraVwgOwor5biC6KGX5YyW5Yy65Z+fIDwgc2hpZ2Fpa2FrdWlraVwgOwor54m56Kix5oqA6KGTIDwgdG9ra3lvZ2lqdXRzdVwgOwor5aCx6YGT5YaZ55yfIDwgaG91ZG91c2hhc2hpblwgOwor5pyA5L2O6LOD6YeRIDwgc2FpdGVpY2hpbmdpblwgOwor55m+5pel6I2JIDwgaHlha3VuaWNoaXNvdVwgOwor556s6ZaT6Zu75patIDwgc2h1bmthbmRlbmRhblwgOwor5bm06aCt5pWZ5pu4IDwgbmVudG91a3lvdXNob1wgOwor5p2x5rSL5q616YCaIDwgdG91eW91ZGFudHN1dVwgOwor54us5Y2g6LOH5pysIDwgZG9rdXNlbnNoaWhvblwgOwor5p2x5pa55pWZ5LyaIDwgdG91aG91a3lvdWthaVwgOwor6Zu75rCX5qmf6Zai6LuKIDwgZGVua2lraWthbnNoYVwgOwor6Ieq6Kaa55eH54q2IDwgamlrYWt1c2hvdWpvdVwgOwor5aSp5L2T6Kaz5risIDwgdGVudGFpa2Fuc29rdVwgOwor576k6ZuG6KGM5YuVIDwgZ3Vuc2h1dWtvdWRvdVwgOwor6KGG5Lq655Kw6KaWIDwgc2h1dWppbmthbnNoaVwgOwor6L+36LWw56We57WMIDwgbWVpc291c2hpbmtlaVwgOwor5oim55Wl5YW15ZmoIDwgc2Vucnlha3VoZWlraVwgOwor5YWI5Yi25pS75pKDIDwgc2Vuc2Vpa291Z2VraVwgOwor5pyJ57Wm5LyR5pqHIDwgeXV1a3l1dWt5dXVrYVwgOwor6KaL5a2m5peF6KGMIDwga2VuZ2FrdXJ5b2tvdVwgOwor5Zu95YaF57WM5riIIDwga29rdW5haWtlaXphaVwgOwor5a++56m65bCE5pKDIDwgdGFpa3V1c2hhZ2VraVwgOwor5q+U6LyD5a++54WnIDwgaGlrYWt1dGFpc2hvdVwgOwor5biC5Lit6YqA6KGMIDwgc2hpY2h1dWdpbmtvdVwgOwor5a6a54K56Kaz5risIDwgdGVpdGVua2Fuc29rdVwgOwor5L+D5oiQ5qC95Z+5IDwgc29rdXNlaXNhaWJhaVwgOwor5Lih5LiJ5pelIDwgcnlvdXNhbicnbmljaGlcIDsKK+izg+mHkeagvOW3riA8IGNoaW5naW5rYWt1c2FcIDsKK+aUr+mFjemajue0miA8IHNoaWhhaWthaWt5dXVcIDsKK+S6jOmHjemcsuWHuiA8IG5panV1cm9zaHV0c3VcIDsKK+WLleiEiOehrOWMliA8IGRvdW15YWt1a291a2FcIDsKK+mao+aOpemDqOmaiiA8IHJpbnNldHN1YnV0YWlcIDsKK+W7uuioreapn+aisCA8IGtlbnNldHN1a2lrYWlcIDsKK+S4iuWxpOmajue0miA8IGpvdXNvdWthaWt5dXVcIDsKK+S4ieaLneS5neaLnSA8IHNhbnBhaWt5dXVoYWlcIDsKK+mWi+agoeiomOW/teaXpSA8IGthaWtvdWtpbmVuYmlcIDsKK+S4jeWPr+efpeirluiAhSA8IGZ1a2FjaGlyb25zaGFcIDsKK+aXl+ihjOWIlyA8IGhhdGFneW91cmV0c3VcIDsKK+eJueauiuazleS6uiA8IHRva3VzaHVob3VqaW5cIDsKK+Wjq+mtguWVhuaJjSA8IHNoaWtvbnNob3VzYWlcIDsKK+WCt+eXheaNleiZnCA8IHNob3VieW91aG9yeW9cIDsKK+eEoeaAp+eUn+auliA8IG11c2Vpc2Vpc2hva3VcIDsKK+ecieWUvueJqSA8IG1heXV0c3ViYW1vbm9cIDsKK+iyoeaUv+aUv+etliA8IHphaXNlaXNlaXNha3VcIDsKK+mZuOS4iuertuaKgCA8IHJpa3Vqb3VreW91Z2lcIDsKK+WNmuimp+W8t+iomCA8IGhha3VyYW5reW91a2lcIDsKK+S6uuaoqeS+teWusyA8IGppbmtlbnNoaW5nYWlcIDsKK+e3j+mgmOaBr+WtkCA8IHNvdXJ5b3VtdXN1a29cIDsKK+mAsuihjOS/giA8IHNoaW5rb3VnYWthcmlcIDsKK+iPnOmjn+S4u+e+qSA8IHNhaXNob2t1c2h1Z2lcIDsKK+eEoeiomOWQjeWCteaoqSA8IG11a2ltZWlzYWlrZW5cIDsKK+i1pOWklueZuuaVoyA8IHNla2lnYWloYXNzYW5cIDsKK+ihm+aYn+mAmuS/oSA8IGVpc2VpdHN1dXNoaW5cIDsKK+S6uuWToeWJiua4myA8IGppbicnaW5zYWt1Z2VuXCA7Civli5XmpI3niakgPCBkb3VzaG9rdWJ1dHN1XCA7CivnjoflhYjouqzooYwgPCBzb3NzZW5reXV1a291XCA7CivlhY3nqI7miYDlvpcgPCBtZW56ZWlzaG90b2t1XCA7CivpmLLnuK7liqDlt6UgPCBib3VzaHVrdWtha291XCA7CivopIflvI/nsL/oqJggPCBmdWt1c2hpa2lib2tpXCA7Civosqzku7vliIbmi4UgPCBzZWtpbmluYnVudGFuXCA7CivmrablipvooYzkvb8gPCBidXJ5b2t1a291c2hpXCA7CivnlarntYTnt6jmiJAgPCBiYW5ndW1paGVuc2VpXCA7Civlhajms6Llj5fkv6HmqZ8gPCB6ZW5wYWp1c2hpbmtpXCA7Civlv4XopoHniakgPCBoaXRzdXlvdWJ1dHN1XCA7CivkvJHmga/mmYLplpMgPCBreXV1c29rdWppa2FuXCA7CivkuInou7jlrqQgPCBzYW5qaWt1c2hpdHN1XCA7Civkuozph43plqLnr4AgPCBuaWp1dWthbnNldHN1XCA7CivlvoXlkIjlrqQgPCBtYWNoaWFpc2hpdHN1XCA7CivljZrnianlraYgPCBoYWt1YnV0c3VnYWt1XCA7CivoprPlhYnnlKPmpa0gPCBrYW5rb3VzYW5neW91XCA7CivntZDntK7ooZMgPCBrZXNzYXRzdWp1dHN1XCA7CivljZrlvJXml4HoqLwgPCBoYWt1aW5ib3VzaG91XCA7Civmt7flhaXniakgPCBrb24nJ255dXVidXRzdVwgOwor5YWx6LKp5Lya56S+IDwga3lvdWhhbmdhaXNoYVwgOwor5o+a6Zm46Imm6ImHIDwgeW91cmlrdWthbnRlaVwgOwor5YWs5a6z5a++562WIDwga291Z2FpdGFpc2FrdVwgOwor6Zm95YuV5L2c5oimIDwgeW91ZG91c2FrdXNlblwgOwor5bmz5ZKM5Li7576p6ICFIDwgaGVpd2FzaHVnaXNoYVwgOwor6KqY5ouQ54qv5Lq6IDwgeXV1a2FpaGFuJyduaW5cIDsKK+WGheiHk+eWvuaCoyA8IG5haXpvdXNoaWtrYW5cIDsKK+S/ruWjq+irluaWhyA8IHNodXVzaGlyb25idW5cIDsKK+mrmOetieaVmeiCsiA8IGtvdXRvdWt5b3Vpa3VcIDsKK+a4rOmHj+apn+aisCA8IHNva3VyeW91a2lrYWlcIDsKK+mciuaEn+WVhuazlSA8IHJlaWthbnNob3Vob3VcIDsKK+WRqueJqeW0h+aLnSA8IGp1YnV0c3VzdXVoYWlcIDsKK+aWh+S6uuWiqOWuoiA8IGJ1bmppbmJva2tha3VcIDsKK+aJv+efpeS5i+WKqSA8IHNob3VjaGlub3N1a2VcIDsKK+i2iuW5tOiNieacrCA8IGV0c3VuZW5zb3Vob25cIDsKK+mdkuWkqeS6leS6iOeulyA8IGFvdGVuam91eW9zYW5cIDsKK+eKtuazgeaEj+WRs+irliA8IGpvdWt5b3VpbWlyb25cIDsKK+mAmuWLpOWIl+i7iiA8IHRzdXVraW5yZXNzaGFcIDsKK+WHuuW4reeOhyA8IHNodXNzZWtpcml0c3VcIDsKK+eyvumAsuaWmeeQhiA8IHNob3VqaW5yeW91cmlcIDsKK+S4u+WKm+mDqOmaiiA8IHNodXJ5b2t1YnV0YWlcIDsKK+a8ouWtl+aWh+WMluWcjyA8IGthbmppYnVua2FrZW5cIDsKK+mDt+Wcn+aWh+WtpiA8IGt5b3Vkb2J1bmdha3VcIDsKK+ebtOaOpeeojiA8IGNob2t1c2V0c3V6ZWlcIDsKK+WksealreiAhSA8IHNoaXRzdWd5b3VzaGFcIDsKK+atr+enkeaKgOW3peWjqyA8IHNoaWthZ2lrb3VzaGlcIDsKK+acn+acq+ippumokyA8IGtpbWF0c3VzaGlrZW5cIDsKK+mAo+mCpummluebuCA8IHJlbnBvdXNodXNob3VcIDsKK+aDheWgseW3peWtpiA8IGpvdWhvdWtvdWdha3VcIDsKK+eJp+eVnOalrSA8IGJva3VjaGlrdWd5b3VcIDsKK+S4g+WIhuS4ieWIhiA8IHNoaWNoaWJ1c2FuYnVcIDsKK+WPguiAg+izh+aWmSA8IHNhbmtvdXNoaXJ5b3VcIDsKK+a1t+S4iui8uOmAgei3ryA8IGthaWpvdXl1c291cm9cIDsKK+eLrOaWreWwguihjCA8IGRva3VkYW5zZW5rb3VcIDsKK+WFpeWtpuiAg+afuyA8IG55dXVnYWt1a291c2FcIDsKK+mBrembo+S/oeWPtyA8IHNvdW5hbnNoaW5nb3VcIDsKK+a1geWLleizh+eUoyA8IHJ5dXVkb3VzaGlzYW5cIDsKK+ani+evieeJqSA8IGtvdWNoaWt1YnV0c3VcIDsKK+S4i+Wbm+WNiuacnyA8IHNoaW1vc2hpaGFua2lcIDsKK+mBuOaKnuenkeebriA8IHNlbnRha3VrYW1va3VcIDsKK+ioreeri+iAhSA8IHNldHN1cml0c3VzaGFcIDsKK+aDheWgseaknOe0oiA8IGpvdWhvdWtlbnNha3VcIDsKK+mgguS4iuS8muirhyA8IGNob3Vqb3VrYWlkYW5cIDsKK+WFsea4iOe1hOWQiCA8IGt5b3VzYWlrdW1pYWlcIDsKK+WPguiAg+abuOebriA8IHNhbmtvdXNob21va3VcIDsKK+ayu+WuieitpuWvnyA8IGNoaWFua2Vpc2F0c3VcIDsKK+iIiOalremKgOihjCA8IGtvdWd5b3VnaW5rb3VcIDsKK+iqv+WBnOWnlOWToeS8miA8IGNob3V0ZWlpaW5rYWlcIDsKK+ihjOaUv+abuOWjqyA8IGd5b3VzZWlzaG9zaGlcIDsKK+mWoumAo+mgheebriA8IGthbnJlbmtvdW1va3VcIDsKK+mbo+ihjOiLpuihjCA8IG5hbmd5b3VrdWd5b3VcIDsKK+ihjOaWueS4jeaYjuiAhSA8IHl1a3VlZnVtZWlzaGFcIDsKK+mgkOmHkemAmuW4syA8IHlva2ludHN1dWNob3VcIDsKK+e2suiGnOWJpemboiA8IG1vdW1ha3VoYWt1cmlcIDsKK+i8uOWHuuaknOafuyA8IHl1c2h1dHN1a2Vuc2FcIDsKK+engeWFsSA8IHdhdGFrdXNoaWRvbW9cIDsKK+aMh+WumumKmOafhCA8IHNoaXRlaW1laWdhcmFcIDsKK+mFkuaxoOiCieaelyA8IHNodWNoaW5pa3VyaW5cIDsKK+WEquetieiznueKtiA8IHl1dXRvdXNob3Vqb3VcIDsKK+m7hOmHkeWIhuWJsiA8IG91Z29uYnVua2F0c3VcIDsKK+S/rue5leW3peWgtCA8IHNodXV6ZW5rb3Vqb3VcIDsKK+i2s+mVt+icgiA8IGFzaGluYWdhYmFjaGlcIDsKK+S6jOiAhemBuOS4gCA8IG5pc2hhc2VuJydpdHN1XCA7CivnspjmtrLos6ogPCBuZW4nJ2VraXNoaXRzdVwgOwor56eB5LqLIDwgd2F0YWt1c2hpZ290b1wgOwor6I+M6aGe5a2m6ICFIDwga2lucnVpZ2FrdXNoYVwgOwor5aSW5Zu96YO15L6/IDwgZ2Fpa29rdXl1dWJpblwgOwor5Lqk6YCa5Zyw542EIDwga291dHN1dWppZ29rdVwgOwor6ZuG5Zuj57WQ5amaIDwgc2h1dWRhbmtla2tvblwgOwor5oSb546p5YuV54mpIDwgYWlnYW5kb3VidXRzdVwgOwor6ZaT5o6l6Kmx5rOVIDwga2Fuc2V0c3V3YWhvdVwgOwor5a2m55Sf6YOo6ZW3IDwgZ2FrdXNlaWJ1Y2hvdVwgOwor6Zuy5b2i5a6a6KaPIDwga3Vtb2dhdGFqb3VnaVwgOwor5YCL5Lq655qE5oSP6KaLIDwga29qaW50ZWtpaWtlblwgOwor5bGL5aSW5bqD5ZGKIDwgb2t1Z2Fpa291a29rdVwgOwor5Lqh5ZG95paH5a2mIDwgYm91bWVpYnVuZ2FrdVwgOwor5YyX5Zu96LWk5rW36ICBIDwgaG9ra29rdWFrYWViaVwgOwor6YCj57aa6Zai5pWwIDwgcmVuem9rdWthbnN1dVwgOwor5bm96ZyK6KmxIDwgeXV1cmVpYmFuYXNoaVwgOwor562G6Leh6ZGR5a6aIDwgaGlzc2VraWthbnRlaVwgOwor5ZCM6LOq55qEIDwgZG91c2hpdHN1dGVraVwgOwor5buD54mp5Yip55SoIDwgaGFpYnV0c3VyaXlvdVwgOwor6LuK5Lih5Lya56S+IDwgc2hhcnlvdWdhaXNoYVwgOwor6bq76Jas5bi457+SIDwgbWF5YWt1am91c2h1dVwgOwor5LiN5b6X6KaB6aCYIDwgZnV0b2t1eW91cnlvdVwgOwor5bGx5bKz5Zyw5bivIDwgc2FuZ2FrdWNoaXRhaVwgOwor5ZWP6aGM6aCY5Z+fIDwgbW9uZGFpcnlvdWlraVwgOwor5Z+3552A5b+DIDwgc2h1dWNoYWt1c2hpblwgOwor5YCL5Yil6LKp5aOyIDwga29iZXRzdWhhbmJhaVwgOwor5bmz6KGh5oSf6KaaIDwgaGVpa291a2Fua2FrdVwgOwor5YaF5Zu96YO15L6/IDwgbmFpa29rdXl1dWJpblwgOwor5Yqb6Zai5L+CIDwgY2hpa2FyYWthbmtlaVwgOwor5aCx6YGT55Wq57WEIDwgaG91ZG91YmFuZ3VtaVwgOwor57SZ5LiK6KiI55S7IDwgc2hpam91a2Vpa2FrdVwgOwor5LqM6YeN5Zu957GNIDwgbmlqdXVrb2t1c2VraVwgOwor6KGM5pS/6Ki06KifIDwgZ3lvdXNlaXNvc2hvdVwgOwor57W257iB5oq15oqXIDwgemV0c3VlbnRlaWtvdVwgOwor5Yy/5ZCN5om56KmVIDwgdG9rdW1laWhpaHlvdVwgOwor6ZW35pyf5Zu95YK1IDwgY2hvdWtpa29rdXNhaVwgOwor5YWJ57ea55mC5rOVIDwga291c2VucnlvdWhvdVwgOwor5rWB5YuV6LOH5pysIDwgcnl1dWRvdXNoaWhvblwgOwor6Ki85Yi45biC5aC0IDwgc2hvdWtlbnNoaWpvdVwgOwor54OP6Iq75rKZ5pGp5aaZ546LIDwgdXN1c2FtYW15b3VvdVwgOwor5bu66Kit5bel5LqLIDwga2Vuc2V0c3Vrb3VqaVwgOwor5aSJ5oWL5oCn5qyyIDwgaGVudGFpc2VpeW9rdVwgOwor56m65Lit57Sw6I+MIDwga3V1Y2h1dXNhaWtpblwgOwor5Luj6YeR5byV5o+bIDwgZGFpa2luaGlraWthZVwgOwor6Iy255Wq54uC6KiAIDwgY2hhYmFua3lvdWdlblwgOwor5Lqk6YCa6KaP5YmHIDwga291dHN1dWtpc29rdVwgOwor54mp6LOq55qEIDwgYnVzc2hpdHN1dGVraVwgOwor54++54mp55u45aC0IDwgZ2VuYnV0c3Vzb3ViYVwgOwor5p2f57ib55CG6KuWIDwgc29rdWJha3VyaXJvblwgOwor5YWs5q2j6Ki85pu4IDwga291c2Vpc2hvdXNob1wgOwor5ZCM55uf5oCg5qWtIDwgZG91bWVpdGFpZ3lvdVwgOwor6KGM5YuV5pa56YedIDwga291ZG91aG91c2hpblwgOwor6YGp5q2j5L6h5qC8IDwgdGVraXNlaWtha2FrdVwgOwor5Lq656iu5pS56ImvIDwgamluc2h1a2FpcnlvdVwgOwor5L2/6YCU5LiN5piO6YeRIDwgc2hpdG9mdW1laWtpblwgOwor5Y2K5rWB5YuV5L2TIDwgaGFucnl1dWRvdXRhaVwgOwor5pmu5LuP5oim5LqJIDwgZnVmdXRzdXNlbnNvdVwgOwor6JK455m654axIDwgam91aGF0c3VuZXRzdVwgOwor5LqM6YeN57WQ5ZCIIDwgbmlqdXVrZXRzdWdvdVwgOwor5YWN6LKs54m55qipIDwgbWVuc2VraXRva2tlblwgOwor5oey5oiS5Yem5YiGIDwgY2hvdWthaXNob2J1blwgOwor5LiN5b+D5b6X6ICFIDwgZnVrb2tvcm9lbW9ub1wgOwor6LGq5pS+56OK6JC9IDwgZ291aG91cmFpcmFrdVwgOwor6Imm56Cy5bCE5pKDIDwga2FucG91c2hhZ2VraVwgOwor6Zai5pWw6Kej5p6QIDwga2Fuc3V1a2Fpc2VraVwgOwor5rCR5Li75YyW6YGL5YuVIDwgbWluc2h1a2F1bmRvdVwgOwor5aSp5rCX55u46KuH5omAIDwgdGVua2lzb3VkYW5qb1wgOwor6YCa5L+h6Kyb5bqnIDwgdHN1dXNoaW5rb3V6YVwgOwor5aSW6LKo542y5b6XIDwgZ2Fpa2FrYWt1dG9rdVwgOwor5Y+C5Yqg5biM5pyb6ICFIDwgc2Fua2FraWJvdXNoYVwgOwor5oeQ55aR5Li7576p6ICFIDwga2FpZ2lzaHVnaXNoYVwgOwor6Zu75rCX5rq25o6lIDwgZGVua2l5b3VzZXRzdVwgOwor5ZCu55mw6IiQ55eUIDwgc2VuJyd5b3VzaGlqaVwgOwor5Yq05YON5p2h5Lu2IDwgcm91ZG91am91a2VuXCA7CivlpJblm73oiKrot68gPCBnYWlrb2t1a291cm9cIDsKK+S8nemAgemAn+W6piA8IGRlbnNvdXNva3Vkb1wgOwor5LiA5pys6Kq/5a2QIDwgaXBwb25kam91c2hpXCA7CivlopzokL3kuovmlYUgPCB0c3VpcmFrdWppa29cIDsKK+iWqeaRqemWpSA8IHNhdHN1bWFiYXRzdVwgOwor6KaW6IG0546HIDwgc2hpY2hvdXJpdHN1XCA7Civnt5rpppnoirHngasgPCBzZW5rb3VoYW5hYmlcIDsKK+adseS6rOmDveaUvyA8IHRvdWt5b3V0b3NlaVwgOwor6LuN5LqL55Sj5qWtIDwgZ3VuamlzYW5neW91XCA7Civku6PnkIbniafluKsgPCBkYWlyaWJva3VzaGlcIDsKK+S4ieWNgeS4ieaJgCA8IHNhbmp1dXNhbnNob1wgOwor5LiA5qyh57ea6LyqIDwgaWNoaWppc2VucmluXCA7CivnlbPmsLTnt7QgPCB0YXRhbWlzdWlyZW5cIDsKK+S+oeagvOWkieWLlSA8IGtha2FrdWhlbmRvdVwgOwor5oKg5oKg6Ieq6YGpIDwgeXV1eXV1aml0ZWtpXCA7CivlsbHntKvmsLTmmI4gPCBzYW5zaGlzdWltZWlcIDsKK+W5leWDmumVtyA8IGJha3VyeW91Y2hvdVwgOwor56m66Ly46LKo54mpIDwga3V1eXVrYW1vdHN1XCA7CivoprPlhYnos4fmupAgPCBrYW5rb3VzaGlnZW5cIDsKK+imluimmuiogOiqniA8IHNoaWtha3VnZW5nb1wgOwor6bq76Jas5bi455SoIDwgbWF5YWt1am91eW91XCA7Civml6XmnJ3ovp7lhbggPCBuaXRjaG91aml0ZW5cIDsKK+W6l+mgreWCteWIuCA8IHRlbnRvdXNhaWtlblwgOwor54mI5qip5omA5pyJIDwgaGFua2Vuc2hveXV1XCA7CivkuIDms4rooYzou40gPCBpcHBha3Vrb3VndW5cIDsKK+mdkuepuuW4guWgtCA8IGFvem9yYXNoaWpvdVwgOwor6ZaL56Wo57WQ5p6cIDwga2FpaHlvdWtla2thXCA7CivljZjni6zorJvlkowgPCB0YW5kb2t1a291d2FcIDsKK+i/keS7o+enkeWtpiA8IGtpbmRhaWthZ2FrdVwgOwor54Sh56We6KuW6ICFIDwgbXVzaGlucm9uc2hhXCA7CivluILorbDkvJrorbDlk6EgPCBzaGlnaWthaWdpaW5cIDsKK+ePvuWun+eahCA8IGdlbmppdHN1dGVraVwgOwor55S75LiA55qEIDwga2FrdWl0c3V0ZWtpXCA7CivmnInlvaLosqHnlKMgPCB5dXVrZWl6YWlzYW5cIDsKK+ays+WyuOauteS4mCA8IGthZ2FuZGFua3l1dVwgOwor5aSq6Zm95YWJ57eaIDwgdGFpeW91a291c2VuXCA7CivljbjphZLosqkgPCBvcm9zaGlzaHVoYW5cIDsKK+WEhOS4h+mVt+iAhSA8IG9rdW1hbmNob3VqYVwgOwor5YyW57Kn55+z6bm4IDwga2VzaG91c2Vra2VuXCA7CivoqIDoqp7nmYLms5UgPCBnZW5nb3J5b3Vob3VcIDsKK+WuieWumuaIkOmVtyA8IGFudGVpc2VpY2hvdVwgOwor56We5qip5pS/5rK7IDwgc2hpbmtlbnNlaWppXCA7Civopqrml6XlrrYgPCBzaGluJyduaWNoaWthXCA7Civoh7PkuIrlkb3ku6QgPCBzaGlqb3VtZWlyZWlcIDsKK+WGheWHuuihgCA8IG5haXNodWtrZXRzdVwgOwor5Lit5aSu5aeU5ZOh5LyaIDwgY2h1dW91aWlua2FpXCA7CivmvaTnrYbmlpkgPCBqdW5waXRzdXJ5b3VcIDsKK+mfs+alvee+juWtpiA8IG9uZ2FrdWJpZ2FrdVwgOwor5Yq05YON5aSn6IejIDwgcm91ZG91ZGFpamluXCA7CivnlLDoiI7kvo0gPCBpbmFrYXphbXVyYWlcIDsKK+mZjeagvOS6uuS6iyA8IGtvdWtha3VqaW5qaVwgOwor6YeR6YeY5rWBIDwga2FuYWt1Z2lyeXV1XCA7CivnqpLntKDogqXmlpkgPCBjaGlzc29oaXJ5b3VcIDsKK+i7jemDqOeLrOijgSA8IGd1bmJ1ZG9rdXNhaVwgOwor5YWs5YuZ55a+55eFIDwga291bXVzaGlwcGVpXCA7CivoirHngavlpKfkvJogPCBoYW5hYml0YWlrYWlcIDsKK+WJteS9nOWKmyA8IHNvdXNha3VyeW9rdVwgOwor5Y2z5oim5YqbIDwgc29rdXNlbnJ5b2t1XCA7CivooYzpm7LmtYHmsLQgPCBrb3V1bnJ5dXVzdWlcIDsKK+WPjeWvvuioiuWVjyA8IGhhbnRhaWppbm1vblwgOwor5pa55ZCR6Lui5o+bIDwgaG91a291dGVua2FuXCA7CivnhKHnt5rmioDooZMgPCBtdXNlbmdpanV0c3VcIDsKK+iJruS4i+iJruS4iiA8IGdvbmthZ29uc2hvdVwgOwor5ous57SE562LIDwga2F0c3V5YWt1a2luXCA7CivmnKrmnaXlrozkuoYgPCBtaXJhaWthbnJ5b3VcIDsKK+WJjemAsumDqOmaiiA8IHplbnNoaW5idXRhaVwgOwor5pei57SE5YiG5pWwIDwga2l5YWt1YnVuc3V1XCA7CivoqqzlvpflipsgPCBzZXR0b2t1cnlva3VcIDsKK+WFrOWWtuS9j+WuhSA8IGtvdWVpanV1dGFrdVwgOwor55uj5p+75aCx5ZGKIDwga2Fuc2Fob3Vrb2t1XCA7CivpkJjmkp7loIIgPCBrYW5ldHN1a2lkb3VcIDsKK+aciOe1jOWRqOacnyA8IGdla2tlaXNodXVraVwgOwor56eR5a2m6ZuR6KqMIDwga2FnYWt1emFzc2hpXCA7CivpgJrosqjntbHlkIggPCB0c3V1a2F0b3Vnb3VcIDsKK+WvvuWcsOmAn+W6piA8IHRhaWNoaXNva3Vkb1wgOwor5a6Y5YOa5Li7576pIDwga2FucnlvdXNodWdpXCA7Civml6flvaLlvI8gPCBreXV1a2Vpc2hpa2lcIDsKK+m7hOeOieefsyA8IGtvdWd5b2t1c2VraVwgOwor5b6h6Kq/5a2Q6ICFIDwgb2Nob3VzaGltb25vXCA7Civlrp/pqJPlrqQgPCBqaWtrZW5zaGl0c3VcIDsKK+S6jOi2s+S4ieaWhyA8IG5pc29rdXNhbm1vblwgOwor6YW45oCn6IKl5paZIDwgc2Fuc2VpaGlyeW91XCA7CivoqIDmlofkuIDoh7QgPCBnZW5idW4nJ2l0Y2hpXCA7Civlr4bmvIHogIUgPCBtaXRzdXJ5b3VzaGFcIDsKK+WFseWQjOeuoeeQhiA8IGt5b3Vkb3VrYW5yaVwgOwor6IOD6YW46YGO5aSa55eHIDwgaXNhbmthdGFzaG91XCA7CivmtbflpJbml4XooYwgPCBrYWlnYWlyeW9rb3VcIDsKK+S4jeWvqeWwi+WVjyA8IGZ1c2hpbmppbm1vblwgOwor6LKs5Lu76Lui5auBIDwgc2VraW5pbnRlbmthXCA7CivplbfmnJ/miYvlvaIgPCBjaG91a2l0ZWdhdGFcIDsKK+a9ruaxkOihqCA8IGNob3VzZWtpaHlvdVwgOwor57Wm5LiO5rC05rqWIDwga3l1dXlvc3VpanVuXCA7Civnmb3nhrHmiKYgPCBoYWt1bmV0c3VzZW5cIDsKK+W+k+WxnuevgCA8IGp1dXpva3VzZXRzdVwgOwor5bCR5pWw57K+6YutIDwgc2hvdXN1dXNlaWVpXCA7Civou6Lmj5vnpL7lgrUgPCB0ZW5rYW5zaGFzYWlcIDsKK+ayv+WyuOa8gealrSA8IGVuZ2FuZ3lvZ3lvdVwgOwor5oq85YiH5bizIDwgb3NoaWtpcmljaG91XCA7CivpibHnianlraYgPCBrb3VidXRzdWdha3VcIDsKK+S6pOmam+ekvuS8miA8IGtvdXNhaXNoYWthaVwgOwor5Yi26ZmQ5LqL6aCFIDwgc2VpZ2Vuamlrb2t1XCA7Civlt6blv4PlrqQgPCBzYXNoaW5zaGl0c3VcIDsKK+WIkeS6i+iyrOS7uyA8IGtlaWppc2VraW5pblwgOwor5re35ZCI54Gr6JasIDwga29uZ291a2F5YWt1XCA7CivmpbXlvanoibIgPCBnb2t1c2Fpc2hpa2lcIDsKK+WPjOWLmeWlkee0hCA8IHNvdW11a2VpeWFrdVwgOwor6IKd5b+D6KaBIDwga2Fuamlua2FuYW1lXCA7Civlj6TlhbjlrabogIUgPCBrb3Rlbmdha3VzaGFcIDsKK+eUn+a0u+aJtuWKqSA8IHNlaWthdHN1ZnVqb1wgOwor5bu656+J5qWtIDwga2VuY2hpa3VneW91XCA7Civmi5Lpo5/nl4cgPCBreW9zaG9rdXNob3VcIDsKK+eUqOebiueJqeaoqSA8IHlvdWVraWJ1a2tlblwgOwor54ax6Zu75a++IDwgbmV0c3VkZW50c3VpXCA7Civlh7rli6TmmYLplpMgPCBzaHVra2luamlrYW5cIDsKK+mOluS8neWLlSA8IGt1c2FyaWRlbmRvdVwgOwor5ouh5aSn546HIDwga2FrdWRhaXJpdHN1XCA7Civnm7jplqLkv4LmlbAgPCBzb3VrYW5rZWlzdXVcIDsKK+mDveW/mCA8IG1peWFrb3dhc3VyZVwgOwor56S+5Lya5L+d6ZqcIDwgc2hha2FpaG9zaG91XCA7CivljZTlkIzli5XkvZwgPCBreW91ZG91ZG91c2FcIDsKK+aDhee3kue6kue2vyA8IGpvdWNob3Rlbm1lblwgOwor56uL5oay5ZCb5Li7IDwgcmlra2Vua3Vuc2h1XCA7Civni4Lkv6HnmoQgPCBreW91c2hpbnRla2lcIDsKK+ihqOePvuWKmyA8IGh5b3VnZW5yeW9rdVwgOwor5Lit56uL6Z2iIDwgY2h1dXJpdHN1bWVuXCA7Civml4XliLjmn7voqLwgPCByeW9rZW5zYXNob3VcIDsKK+iyneauu+iZqyA8IGthaWdhcmFtdXNoaVwgOwor6JC96Iqx54u86JeJIDwgcmFra2Fyb3V6ZWtpXCA7CivkuIDnlarmmJ8gPCBpY2hpYmFuYm9zaGlcIDsKK+WMluWtpuijveWTgSA8IGthZ2FrdXNlaWhpblwgOwor6YGp5oCn5qSc5p+7IDwgdGVraXNlaWtlbnNhXCA7Civos4PlgJ/kurogPCBjaGluc2hha3VuaW5cIDsKK+eUn+WRveenkeWtpiA8IHNlaW1laWthZ2FrdVwgOwor5bel5L2c5qmf5qKwIDwga291c2FrdWtpa2FpXCA7Civlm7Pmm7jppKjlraYgPCB0b3Nob2thbmdha3VcIDsKK+S6uuWPo+WVj+mhjCA8IGppbmtvdW1vbmRhaVwgOwor5b6h55So5a2m6ICFIDwgZ295b3VnYWt1c2hhXCA7CivmsJflnKfphY3nva4gPCBraWF0c3VoYWljaGlcIDsKK+aZgumZkOeIhuW8viA8IGppZ2VuYmFrdWRhblwgOwor6Ieq54S25a++5pWwIDwgc2hpemVudGFpc3V1XCA7CivlpJzplpPmkq7lvbEgPCB5YWthbnNhdHN1ZWlcIDsKK+elnue1jOe5iue2rSA8IHNoaW5rZWlzZW4nJ2lcIDsKK+a1geWLleiyoOWCtSA8IHJ5dXVkb3VmdXNhaVwgOwor5pyA6auY6KiY6YyyIDwgc2Fpa291a2lyb2t1XCA7CivmlrDopo/kuovmpa0gPCBzaGlua2lqaWd5b3VcIDsKK+Wnk+WQjeWIpOaWrSA8IHNlaW1laWhhbmRhblwgOwor6KOF6aO+55qEIDwgc291c2hva3V0ZWtpXCA7Civlj43lr77ntabku5ggPCBoYW50YWlreXV1ZnVcIDsKK+a+seeyieizqiA8IGRlbnB1bnNoaXRzdVwgOwor5pWX5oim5oqV5omLIDwgaGFpc2VudG91c2h1XCA7CivmrabmvKLkuInpjq4gPCBidWthbnNhbmNoaW5cIDsKK+mbu+awl+mZsOaAp+W6piA8IGRlbmtpaW5zZWlkb1wgOwor5LiA5pyd5LiA5aSVIDwgaXRjaG91aXNzZWtpXCA7CivnhKHoqJjlkI3poJDph5EgPCBtdWtpbWVpeW9raW5cIDsKK+WutuWGheW3pealrSA8IGthbmFpa291Z3lvdVwgOwor5Y2D5pel6I2JIDwgc2VuJyduaWNoaXNvdVwgOwor5rWF5a2m6I+y5omNIDwgc2VuZ2FrdWhpc2FpXCA7Civmt7flkIjntYzmuIggPCBrb25nb3VrZWl6YWlcIDsKK+W4guawkeWbo+S9kyA8IHNoaW1pbmRhbnRhaVwgOwor5LyB5qWt6YCj5ZCIIDwga2lneW91cmVuZ291XCA7CivmmYLku6PmhJ/oppogPCBqaWRhaWthbmtha3VcIDsKK+S4g+S6lOiqvyA8IHNoaWNoaWdvY2hvdVwgOwor5Yip5bex5Li7576p6ICFIDwgcmlrb3NodWdpc2hhXCA7CivlhbHlkIzlm6DlrZAgPCBreW91ZG91aW5zaGlcIDsKK+S4gOaEj+WwguW/gyA8IGljaGlpc2Vuc2hpblwgOwor5qyn57Gz6Ku45Zu9IDwgb3ViZWlzaG9rb2t1XCA7Civpnanlkb3pgYvli5UgPCBrYWt1bWVpdW5kb3VcIDsKK+e0lOeyi+WfuemkiiA8IGp1bnN1aWJhaXlvdVwgOwor5YaN5LiJ5YaN5ZubIDwgc2Fpc2Fuc2Fpc2hpXCA7CivkuK3lm73mnI0gPCBjaHV1Z29rdWZ1a3VcIDsKK+W9ouiAjOS4iuWtpiA8IGtlaWppam91Z2FrdVwgOwor5Zyw5pa55Zuj5L2TIDwgY2hpaG91ZGFudGFpXCA7CivlhazmsJHlrabmoKEgPCBrb3VtaW5nYWtrb3VcIDsKK+S+oeagvOe1seWItiA8IGtha2FrdXRvdXNlaVwgOwor5oSP5Yyg55m76YyyIDwgaXNob3V0b3Vyb2t1XCA7Civpq5jlpKnljp8gPCB0YWthbWFnYWhhcmFcIDsKK+WPl+WLleWWq+eFmSA8IGp1ZG91a2l0c3VlblwgOwor6KO957y25bel5aC0IDwgc2Vpa2Fua291am91XCA7Civlm7rlvaLnh4PmlpkgPCBrb2tlaW5lbnJ5b3VcIDsKK+mDteS+v+eCuuabvyA8IHl1dWJpbmthd2FzZVwgOwor5YuY5a6a5L+CIDwga2Fuam91Z2FrYXJpXCA7Civlj6PpoK3lvIHoq5YgPCBrb3V0b3ViZW5yb25cIDsKK+eri+S9k+WMluWtpiA8IHJpdHRhaWthZ2FrdVwgOwor5ouY5p2f5YqbIDwga291c29rdXJ5b2t1XCA7Civlk4HooYzmlrnmraMgPCBoaW5rb3Vob3VzZWlcIDsKK+ayiOa+seeJqSA8IGNoaW5kZW5idXRzdVwgOwor6YGT5qiZIDwgbWljaGlzaGlydWJlXCA7Civlmajos6rnmoQgPCBraXNoaXRzdXRla2lcIDsKK+iyqeWjsuS+oeagvCA8IGhhbmJhaWtha2FrdVwgOwor5oGL5oSb57WQ5amaIDwgcmVuJydhaWtla2tvblwgOwor5YyX57Gz5Zyf5Lq6IDwgaG9rdWJlaWRvamluXCA7CivljYPml6XntIUgPCBzZW4nJ25pY2hpa291XCA7Civoh6jmtbflrabmoKEgPCByaW5rYWlnYWtrb3VcIDsKK+S4gOiqnuS4gOiqniA8IGljaGlnb2ljaGlnb1wgOwor5Zu95a625YWs5YuZ5ZOhIDwga29ra2Frb3VtdWluXCA7CivljYrlrpjljYrmsJEgPCBoYW5rYW5oYW5taW5cIDsKK+W7uuevieWtpiA8IGtlbmNoaWt1Z2FrdVwgOwor5pWX6KGA55eHIDwgaGFpa2V0c3VzaG91XCA7CivlpKflm73kuLvnvqkgPCB0YWlrb2t1c2h1Z2lcIDsKK+a0i+acjeeuquespSA8IHlvdWZ1a3VkYW5zdVwgOwor5LiA5pa56YCa6KGMIDwgaXBwb3V0c3V1a291XCA7Civlj4LogIPmlofnjK4gPCBzYW5rb3VidW5rZW5cIDsKK+S/oeS7sOeuh+adoSA8IHNoaW5rb3VrYWpvdVwgOwor6L6756S+IDwgdHN1aml5YXNoaXJvXCA7CivljYHkuIDmnIggPCBqdXVpY2hpZ2F0c3VcIDsKK+iii+aIuOajmiA8IGZ1a3Vyb3RvZGFuYVwgOwor5oud54mp5pWZIDwgaGFpYnV0c3VreW91XCA7CivmsJHplpPos4fmnKwgPCBtaW5rYW5zaGlob25cIDsKK+W+qeiukOW/gyA8IGZ1a3VzaHV1c2hpblwgOwor5LiA5rGB5LiA6I+cIDwgaWNoaWp1dWlzc2FpXCA7CivljYHnqK7nq7bmioAgPCBqaXNzaHVreW91Z2lcIDsKK+aXp+W5tOacqyA8IGt5dXVuZW5tYXRzdVwgOwor5aSx6IG36ICFIDwgc2hpc3Nob2t1c2hhXCA7CivlhoXlibLlvJUgPCB1Y2hpd2FyaWJpa2lcIDsKK+W4jOWcn+mhnuWFg+e0oCA8IGtpZG9ydWlnZW5zb1wgOwor5bmz5ZKM5YWx5a2YIDwgaGVpd2FreW91em9uXCA7CivljZjnt5rpgYvou6IgPCB0YW5zZW4nJ3VudGVuXCA7Civkuovlvozmib/oq74gPCBqaWdvc2hvdWRha3VcIDsKK+WHuueUo+eOhyA8IHNodXNzYW5yaXRzdVwgOwor5YaZ5a6f55qEIDwgc2hhaml0c3V0ZWtpXCA7CivmmKDlg4/kv6Hlj7cgPCBlaXpvdXNoaW5nb3VcIDsKK+WuieWFqOWvvuetliA8IGFuemVudGFpc2FrdVwgOwor55Sf55Sj57WE5ZCIIDwgc2Vpc2Fua3VtaWFpXCA7CivmjqXntprpp4UgPCBzZXRzdXpva3Vla2lcIDsKK+WxheS9j+awtOa6liA8IGt5b2p1dXN1aWp1blwgOwor6KO96YmE5qWtIDwgc2VpdGV0c3VneW91XCA7CivnrpfnlKjmlbDlrZcgPCBzYW4nJ3lvdXN1dWppXCA7Civlh7rnlJ/njocgPCBzaHVzc2Vpcml0c3VcIDsKK+WnieWmueS8muekviA8IHNoaW1haWdhaXNoYVwgOwor6YG45oyZ5YWs5aCxIDwgc2Vua3lva291aG91XCA7Civku4/lg4/kuozluqcgPCBidXRzdXpvdW5pemFcIDsKK+ims+WFieaXheihjCA8IGthbmtvdXJ5b2tvdVwgOwor56CU56m26Kqy6aGMIDwga2Vua3l1dWthZGFpXCA7Civph5Hmi77kuIflhoYgPCBraW5qdXVtYW4nJ2VuXCA7CivlsY7lsL/lh6bnkIYgPCBzaGlueW91c2hvcmlcIDsKK+edgOeJqeWnvyA8IGtpbW9ub3N1Z2F0YVwgOwor5ZWG5LqL5Lya56S+IDwgc2hvdWppZ2Fpc2hhXCA7CivnqY3mpbXnrZYgPCBzZWtreW9rdXNha3VcIDsKK+mbhuWQiOWgtOaJgCA8IHNodXVnb3ViYXNob1wgOwor5b2i5a656Kme5bm5IDwga2VpeW91c2hpa2FuXCA7CivmnaHku7blj43lsIQgPCBqb3VrZW5oYW5zaGFcIDsKK+Wwj+aWh+evgCA8IHNob3VidW5zZXRzdVwgOwor57WE57mU5YqbIDwgc29zaGlraXJ5b2t1XCA7Civkv6HlvpLkvJ3li5UgPCBzaGludG9kZW5kb3VcIDsKK+acieaWmemBk+i3ryA8IHl1dXJ5b3Vkb3Vyb1wgOwor5qWt5YuZ5aao5a6zIDwgZ3lvdW11Ym91Z2FpXCA7CivpmL/niYfkuK3mr5IgPCBhaGVuY2h1dWRva3VcIDsKK+e0sOiDnuiejeWQiCA8IHNhaWJvdXl1dWdvdVwgOwor5pat54ax5p2QIDwgZGFuJyduZXRzdXphaVwgOwor5ZCN5Lq65rCX6LOqIDwgbWVpamlua2F0YWdpXCA7Civpg7XmlL/lpKfoh6MgPCB5dXVzZWlkYWlqaW5cIDsKK+mbu+awl+aOg+mZpOapnyA8IGRlbmtpc291amlraVwgOwor5Lq65qip5pOB6K23IDwgamlua2VuJyd5b3Vnb1wgOwor5YWE5byf5Zan5ZipIDwga3lvdWRhaWdlbmthXCA7CivokZfkvZzniakgPCBjaG9zYWt1YnV0c3VcIDsKK+ebsua7heazlSA8IG1la3VyYW1lcHBvdVwgOwor5beh6Iiq6YCf5bqmIDwganVua291c29rdWRvXCA7CivkuIDlpJzlpKfoh6MgPCBpY2hpeWFkYWlqaW5cIDsKK+mZhOedgOWKmyA8IGZ1Y2hha3VyeW9rdVwgOwor542F5a2Q5aWu6L+FIDwgc2hpc2hpZnVuamluXCA7CivmvILmtYHmnKggPCBoeW91cnl1dWJva3VcIDsKK+e0s+Wjq+mdtCA8IHNoaW5zaGlndXRzdVwgOwor6Zao56eA5L2c5a62IDwga2Vpc2h1dXNha2thXCA7CivmtZrmuKvoiLkgPCBzaHVuc2V0c3VzZW5cIDsKK+a3seWxseeDjyA8IG1peWFtYWdhcmFzdVwgOwor5bCC6ZaA5a2m5qChIDwgc2VubW9uZ2Fra291XCA7CivmlLnpnanpgY7nqIsgPCBrYWlrYWt1a2F0ZWlcIDsKK+e3iuaApeaOque9riA8IGtpbmt5dXVzb2NoaVwgOwor55S756uc5aSp552bIDwgZ2FyeW91dGVuc2VpXCA7CivkuIDpgLLkuIDpgIAgPCBpc3NoaW4nJ2l0dGFpXCA7CivnlJ/oh63niakgPCBuYW1hZ3VzYW1vbm9cIDsKK+WumuW4uOeKtuaFiyA8IHRlaWpvdWpvdXRhaVwgOwor5a+p5Yik5b25IDwgc2hpbnBhbicneWFrdVwgOwor5oyH5pWw6Zai5pWwIDwgc2hpc3V1a2Fuc3V1XCA7CivnqY3mpbXnmoQgPCBzZWtreW9rdXRla2lcIDsKK+ippumok+enkeebriA8IHNoaWtlbmthbW9rdVwgOwor54G95a6z5pWR5YqpIDwgc2FpZ2Fpa3l1dWpvXCA7Civnmbrlo7LlhYMgPCBoYXRzdWJhaW1vdG9cIDsKK+WGtumHkeWtpuiAhSA8IHlha2luZ2FrdXNoYVwgOwor5Zyw5pa56YqA6KGMIDwgY2hpaG91Z2lua291XCA7Civku4/poILpnaIgPCBidXRjaG91ZHp1cmFcIDsKK+e1jOa4iOeZuuWxlSA8IGtlaXphaWhhdHRlblwgOwor54m55q6K5YW15ZmoIDwgdG9rdXNodWhlaWtpXCA7CivmtbfkuK3lhazlnJIgPCBrYWljaHV1a291ZW5cIDsKK+Wbo+S9k+aXheihjCA8IGRhbnRhaXJ5b2tvdVwgOwor5LiJ5Y+J56We57WMIDwgc2Fuc2FzaGlua2VpXCA7CivmrLLmsYLkuI3muoAgPCB5b2treXV1ZnVtYW5cIDsKK+iLpee0qyA8IHdha2FtdXJhc2FraVwgOwor57WC5aSc5Za25qWtIDwgc2h1dXlhZWlneW91XCA7CivlnLDkuIvntYTnuZQgPCBjaGlrYXNvc2hpa2lcIDsKK+iAkOmch+WutuWxiyA8IHRhaXNoaW5rYW9rdVwgOwor5q2j5LiJ6KeS5b2iIDwgc2Vpc2Fua2Fra2VpXCA7CivotbDooYzou4rnt5ogPCBzb3Vrb3VzaGFzZW5cIDsKK+epuuawl+iqv+aVtCA8IGt1dWtpY2hvdXNlaVwgOwor6YGL5YuV56We57WMIDwgdW5kb3VzaGlua2VpXCA7Civlj5fog47lkYrnn6UgPCBqdXRhaWtva3VjaGlcIDsKK+WPluW8lemrmCA8IHRvcmloaWtpZGFrYVwgOwor6Kej562U55So57SZIDwga2FpdG91eW91c2hpXCA7CivkuI3miYDlrZjogIUgPCBmdXNob3pvbm1vbm9cIDsKK+eVs+mwryA8IHRhdGFtaWl3YXNoaVwgOwor6ZeW5YWl6ICFIDwgY2hpbicnbnl1dXNoYVwgOwor5q+s5qCX6aCtIDwgaWdhZ3VyaWF0YW1hXCA7Civlu7rnr4nkuK0gPCBrZW5jaGlrdWNodXVcIDsKK+W8seWwj+WbvSA8IGpha3VzaG91a29rdVwgOwor5Yqg5bel55Sj5qWtIDwga2Frb3VzYW5neW91XCA7Civnmbrlo7LkuK0gPCBoYXRzdWJhaWNodXVcIDsKK+imj+agvOWOn+ahiCA8IGtpa2FrdWdlbicnYW5cIDsKK+WSjOmtgua0i+aJjSA8IHdha29uJyd5b3VzYWlcIDsKK+WPjeaIpumBi+WLlSA8IGhhbnNlbicndW5kb3VcIDsKK+iruOihjOeEoeW4uCA8IHNob2d5b3VtdWpvdVwgOwor5aWR57SE5pyf6ZaTIDwga2VpeWFrdWtpa2FuXCA7Civkurrmlofnp5HlraYgPCBqaW5idW5rYWdha3VcIDsKK+S4gOS6uuS4gOS6uiA8IGhpdG9yaWJpdG9yaVwgOwor5Yqx5oyv57Sg5a2QIDwgcmVpc2hpbnNvc2hpXCA7CivlvqnorpDliocgPCBmdWt1c2h1dWdla2lcIDsKK+Wuh+WumeW3peWtpiA8IHVjaHV1a291Z2FrdVwgOwor5LqL5YmN5pel5LuYIDwgaml6ZW5oaWR6dWtlXCA7Civoh6rlrrbmkp7nnYAgPCBqaWthZG91Y2hha3VcIDsKK+efs+eBsOiCpeaWmSA8IHNla2thaWhpcnlvdVwgOwor5YWs55uK5YSq5YWIIDwga291ZWtpeXV1c2VuXCA7CivkuIvku5XkuosgPCBzaGl0YXNoaWdvdG9cIDsKK+iWlOiWh+WNgeWtl+WboyA8IGJhcmFqdXVqaWRhblwgOwor5pel6LGK5pys57eaIDwgbmlwcG91aG9uc2VuXCA7Civnn7PmsrnljJblraYgPCBzZWtpeXVrYWdha3VcIDsKK+a2iOalteaApyA8IHNob3VreW9rdXNlaVwgOwor55u45a++6YCf5bqmIDwgc291dGFpc29rdWRvXCA7Civpu5LlrZflgJLnlKMgPCBrdXJvaml0b3VzYW5cIDsKK+mHkeasoOeXhSA8IGtpbmtldHN1YnlvdVwgOwor6IG06KaW546HIDwgY2hvdXNoaXJpdHN1XCA7CivlhoXmhoLlpJbmgqMgPCBuYWl5dXVnYWlrYW5cIDsKK+mWouaVsOepuumWkyA8IGthbnN1dWt1dWthblwgOwor5LuY5bGe55eF6ZmiIDwgZnV6b2t1YnlvdWluXCA7Civoh6jluorljLvlraYgPCByaW5zaG91aWdha3VcIDsKK+exs+a1t+WFtemaiiA8IGJlaWthaWhlaXRhaVwgOwor5rex5bGx5qGcIDwgbWl5YW1hemFrdXJhXCA7Civmi7HmiYvlgo3oprMgPCBrb3VzaHVib3VrYW5cIDsKK+mghuazlemXmOS6iSA8IGp1bnBvdXRvdXNvdVwgOwor6LOq5ZWP6ICFIDwgc2hpdHN1bW9uc2hhXCA7CivmiKbpl5jpmaPlnLAgPCBzZW50b3VqaW5jaGlcIDsKK+S4gOaMmeS4gOWLlSA8IGlra3lvaWNoaWRvdVwgOwor5aiB5ZqH5bCE5pKDIDwgaWtha3VzaGFnZWtpXCA7Civlrp/lnLDoqabpqJMgPCBqaXRjaGlzaGlrZW5cIDsKK+S4remWk+aZr+awlyA8IGNodXVrYW5rZWlraVwgOwor5Y+45pWZ5qip5bqnIDwgc2hpa3lvdWtlbnphXCA7CivnqbrntITmnZ8gPCBrYXJheWFrdXNva3VcIDsKK+WkieabtOWxpeattCA8IGhlbmtvdXJpcmVraVwgOwor6YCj5oim6YCj5pWXIDwgcmVuc2VucmVucGFpXCA7Civmra/mp73ohr/mvI8gPCBzaGlzb3Vub3Vyb3VcIDsKK+e0oOeykuWtkOirliA8IHNvcnl1dXNoaXJvblwgOwor6KGb5pif5Lit57aZIDwgZWlzZWljaHV1a2VpXCA7CivmjqXntproqZ4gPCBzZXRzdXpva3VzaGlcIDsKK+Wcp+W7tuW3peWgtCA8IGF0c3VlbmtvdWpvdVwgOwor5YiG5aip6Iel5bqKIDwgYnVuYmVuZ2FzaG91XCA7CivkurrpgKDntbnns7ggPCBqaW56b3VrZW5zaGlcIDsKK+eXlei3oeWZqOWumCA8IGtvbnNla2lraWthblwgOwor5oq56aaZ6a+oIDwgbWFra291a3VqaXJhXCA7Civom43lhYnloZfmlpkgPCBrZWlrb3V0b3J5b3VcIDsKK+WFrOWIpOiqv+afuyA8IGtvdWhhbmNob3VzYVwgOwor6YCj57Wh5Lya6K2wIDwgcmVucmFrdWthaWdpXCA7CivlhazmlZnopoHnkIYgPCBrb3VreW91eW91cmlcIDsKK+iKseebl+S6uiA8IGhhbmFudXN1Yml0b1wgOwor5Lm+54el5a6kIDwga2Fuc291c2hpdHN1XCA7CivpqqjokaPlk4HlupcgPCBrb3R0b3VoaW50ZW5cIDsKK+WNgeS6jOaMh+iFuCA8IGp1dW5pc2hpY2hvdVwgOwor55uy5pqmIDwgbWVrdXJhZ295b21pXCA7CivosqHmlL/llY/poYwgPCB6YWlzZWltb25kYWlcIDsKK+iogOiqnuWtpuiAhSA8IGdlbmdvZ2FrdXNoYVwgOwor5bC/5q+S55eHIDwgbnlvdWRva3VzaG91XCA7Civph5Hono3mqZ/plqIgPCBraW4nJ3l1dWtpa2FuXCA7CivnlLDlnJLoqankurogPCBkZW4nJ2Vuc2hpamluXCA7CivnrYnmr5TntJrmlbAgPCB0b3VoaWt5dXVzdXVcIDsKK+iFuem8kyA8IGhhcmF0c3VkenVtaVwgOwor6YGT5YyW5b256ICFIDwgZG91a2V5YWt1c2hhXCA7CivnmYfnmarnjokgPCBrYW5zaGFrdWRhbWFcIDsKK+a0pea0pea1pua1piA8IHRzdWR6dXVyYXVyYVwgOwor5Lm+54el5Zyw5bivIDwga2Fuc291Y2hpdGFpXCA7Civpn7Pnr4DkuLvpn7MgPCBvbnNldHN1c2h1b25cIDsKK+iIqua1t+aXpeiqjCA8IGtvdWthaW5pc3NoaVwgOwor5Y2K5bCB5bu65oCnIDwgaGFuaG91a2Vuc2VpXCA7CivmgYvmhJvplqLkv4IgPCByZW4nJ2Fpa2Fua2VpXCA7CivmiJDplbfpgY7nqIsgPCBzZWljaG91a2F0ZWlcIDsKK+mAo+W4r+S/neiovCA8IHJlbnRhaWhvc2hvdVwgOwor5b+D6IeT6IKl5aSnIDwgc2hpbnpvdWhpZGFpXCA7CivkuIDkurrniakgPCBpY2hpamluYnV0c3VcIDsKK+WNlOe0hOWbvSA8IGt5b3V5YWt1a29rdVwgOwor5aSp5aOM54Sh56quIDwgdGVuam91bXVreXV1XCA7CivlhajouqvpurvphZQgPCB6ZW5zaGlubWFzdWlcIDsKK+acq+S7o+eJqSA8IG1hdHN1ZGFpbW9ub1wgOwor5Zue57ea5Lqk5o+bIDwga2Fpc2Vua291a2FuXCA7CivovLjlhaXliLbpmZAgPCB5dW55dXVzZWlnZW5cIDsKK+WJg+WIgOiyoCA8IGthbWlzb3JpbWFrZVwgOwor5LiA6Laz5YWIIDwgaGl0b2FzaGlzYWtpXCA7CivmnpzniannsaAgPCBrdWRhbW9ub2thZ29cIDsKK+S4lumWk+ipsSA8IHNla2VuYmFuYXNoaVwgOwor6KGM5qW95a6iIDwga291cmFrdWt5YWt1XCA7Civmp4vpgKDkuI3ms4EgPCBrb3V6b3VmdWt5b3VcIDsKK+e0i+eZveidtiA8IG1vbnNoaXJvY2hvdVwgOwor5YWl5rmv5a6iIDwgbnl1dXRvdWt5YWt1XCA7Civoh6rlt7HlhbHlvbkgPCBqaWtva3lvdXlha3VcIDsKK+WvjOWjq+eBq+WxseW4ryA8IGZ1amlrYXphbnRhaVwgOwor6ZeH5Y+W5byVIDwgeWFtaXRvcmloaWtpXCA7Civmp4vmiJDliIblrZAgPCBrb3VzZWlidW5zaGlcIDsKK+aYn+W6p+aKleW9seapnyA8IHNlaXphdG91ZWlraVwgOwor5biC5aC05bGV6ZaLIDwgc2hpam91dGVua2FpXCA7CivlupfpoK3osqnlo7IgPCB0ZW50b3VoYW5iYWlcIDsKK+mAsuawtOW8jyA8IHNoaW5zdWlzaGlraVwgOwor5Luu5omV6YeRIDwga2FyaWJhcmFpa2luXCA7CivntJnlsZHnsaAgPCBrYW1pa3V6dWthZ29cIDsKK+S5vueHpeWNtSA8IGthbnNvdXRhbWFnb1wgOwor5ZCI5ZSx6ZqK5ZOhIDwgZ2Fzc2hvdXRhaWluXCA7CivntYzosrvliYrmuJsgPCBrZWloaXNha3VnZW5cIDsKK+aWh+iKuOW+qeiIiCA8IGJ1bmdlaWZ1a2tvdVwgOwor55Kw5aSq5bmz5rSLIDwga2FudGFpaGVpeW91XCA7CivlkI3nvqnmm7jmj5sgPCBtZWlnaWtha2lrYWVcIDsKK+e3keWGhemanCA8IHJ5b2t1bmFpc2hvdVwgOwor6YeN5aSn5ZWP6aGMIDwganV1ZGFpbW9uZGFpXCA7CivpnZ7np5HlrabnmoQgPCBoaWthZ2FrdXRla2lcIDsKK+mZkOWumuaIpuS6iSA8IGdlbnRlaXNlbnNvdVwgOwor5qW15qW96bOlIDwgZ29rdXJha3VjaG91XCA7CivmrKflt57lp5Tlk6HkvJogPCBvdXNodXVpaW5rYWlcIDsKK+S4jeWcqOiovOaYjiA8IGZ1emFpc2hvdW1laVwgOwor6LOD6LK45YCfIDwgY2hpbnRhaXNoYWt1XCA7CivljLvlrabljZrlo6sgPCBpZ2FrdWhha3VzaGlcIDsKK+ahiOWGheabuOWRiCA8IGFuJyduYWlzaG90ZWlcIDsKK+WwguWItuWQm+S4uyA8IHNlbnNlaWt1bnNodVwgOwor5Yuk5YuZ5a6f57i+IDwga2lubXVqaXNzZWtpXCA7CivmqZ/lr4bkuovpoIUgPCBraW1pdHN1amlrb3VcIDsKK+aXqeacn+iouuaWrSA8IHNvdWtpc2hpbmRhblwgOwor5ZGK55m66ICFIDwga29rdWhhdHN1c2hhXCA7CivlgZzmraLkvqHmoLwgPCB0ZWlzaGlrYWtha3VcIDsKK+iomOaGtuWuuemHjyA8IGtpb2t1eW91cnlvdVwgOwor5Ye655Sf6YGO5YmwIDwgc2h1c3NlaWtham91XCA7CivlvJXpgIDoiIjooYwgPCBpbnRhaWtvdWd5b3VcIDsKK+S4ieWRs+e3muW8viA8IHNoYW1pc2VuaGlraVwgOwor6Kmm6aiT5q616ZqOIDwgc2hpa2VuZGFua2FpXCA7Civnmb3ooYDnl4UgPCBoYWtrZXRzdWJ5b3VcIDsKK+i7jeS6i+S7i+WFpSA8IGd1bmppa2Fpbnl1dVwgOwor5pS/5rK76YGT5b6zIDwgc2Vpamlkb3V0b2t1XCA7Civlm73llrbkvIHmpa0gPCBrb2t1ZWlraWd5b3VcIDsKK+W4sOW3o+acrOiDvSA8IGtpc291aG9uJydub3VcIDsKK+S4oeaAp+WFt+aciSA8IHJ5b3VzZWlndXl1dVwgOwor6buE6YeR5LiH6IO9IDwgb3Vnb25iYW4nJ25vdVwgOwor55yf54+g6LOqIDwgc2hpbmp1c2hpdHN1XCA7Civmi4XlvZPoqrLplbcgPCB0YW50b3VrYWNob3VcIDsKK+a3t+aIkOertuaKgCA8IGtvbnNlaWt5b3VnaVwgOwor5Yq05YON5pS75YuiIDwgcm91ZG91a291c2VpXCA7CivniYflsbHph4wgPCBrYXRheWFtYXphdG9cIDsKK+eLrOeri+elrSA8IGRva3VyaXRzdXNhaVwgOwor6ZaR6Kmx5LyR6aGMIDwga2Fud2FreXV1ZGFpXCA7CivlhoXmh5AgPCB1Y2hpYnV0b2tvcm9cIDsKK+S6iOe0hOS/giA8IHlveWFrdWdha2FyaVwgOwor5b255YuZ6LOg5YSfIDwgZWtpbXViYWlzaG91XCA7CivlubPlkoznlKPmpa0gPCBoZWl3YXNhbmd5b3VcIDsKK+WNsOixoeaJueiplSA8IGluc2hvdWhpaHlvdVwgOwor5YGc5rue5YmN57eaIDwgdGVpdGFpemVuc2VuXCA7CivmsJHplpPmlL7pgIEgPCBtaW5rYW5ob3Vzb3VcIDsKK+WxnuWcsOS4u+e+qSA8IHpva3VjaGlzaHVnaVwgOwor5LiK5L2N5LqS5o+b5oCnIDwgam91aWdva2Fuc2VpXCA7Civlh7rniYjpg6jmlbAgPCBzaHVwcGFuYnVzdXVcIDsKK+iHquWLleS6uuW9oiA8IGppZG91bmluZ3lvdVwgOwor5oSP5b+X6JaE5byxIDwgaXNoaWhha3VqYWt1XCA7Civlv4PnkIbmiKbkuokgPCBzaGlucmlzZW5zb3VcIDsKK+iqsueojuaJgOW+lyA8IGthemVpc2hvdG9rdVwgOwor5rWB6KGM5L2c5a62IDwgcnl1dWtvdXNha2thXCA7CivmoLnmsJfku5XkuosgPCBrb25raXNoaWdvdG9cIDsKK+m7hOe3keiJsiA8IG91cnlva3VzaG9rdVwgOwor6Lu954qv572q5rOVIDwga2VpaGFuemFpaG91XCA7Civmj6PmkanmhrbmuKwgPCBzaGltYW9rdXNva3VcIDsKK+aUueS/ruW3peS6iyA8IGthaXNodXVrb3VqaVwgOwor5a++5oqX5oSP6K2YIDwgdGFpa291aXNoaWtpXCA7CivliY3pgLLlipsgPCB6ZW5zaGlucnlva3VcIDsKK+mBk+i3r+S6pOmAmiA8IGRvdXJva291dHN1dVwgOwor5rOV5bu35L6u6L6xIDwgaG91dGVpYnVqb2t1XCA7CivlhYnlrabmqZ/morAgPCBrb3VnYWt1a2lrYWlcIDsKK+iEseWtl+iomOWPtyA8IGRhdHN1amlraWdvdVwgOwor56K6546H6KuWIDwga2FrdXJpdHN1cm9uXCA7Civni6znq4vnj60gPCBkb2t1cml0c3VoYW5cIDsKK+WFrOacieawtOmdoiA8IGtvdXl1dXN1aW1lblwgOwor562J5Zyn5byPIDwgdG91YXRzdXNoaWtpXCA7CivpmbDmgKflj43lv5wgPCBpbnNlaWhhbicnbm91XCA7CivntKDkurrnrYsgPCBzaGlyb3V0b3N1amlcIDsKK+e+juS6uuWxgCA8IHRzdXRzdW1vdGFzZVwgOwor5YCf5Zyw5paZIDwgc2hha3VjaGlyeW91XCA7Civpu4TnhrHnl4UgPCBrb3VuZXRzdWJ5b3VcIDsKK+Wdh+ihoee1jOa4iCA8IGtpbmtvdWtlaXphaVwgOwor5oqV56Wo546HIDwgdG91aHlvdXJpdHN1XCA7CivpsLvkuLwgPCB1bmFnaWRvbmJ1cmlcIDsKK+iYreagveWfueazlSA8IHJhbnNhaWJhaWhvdVwgOwor5q2m6KOF6ZuG5ZujIDwgYnVzb3VzaHV1ZGFuXCA7CivohIXov6vnmoQgPCBreW91aGFrdXRla2lcIDsKK+WNsOmRkeiovOaYjiA8IGlua2Fuc2hvdW1laVwgOwor5Z+f5YaF6LK/5piTIDwgaWtpbmFpYm91ZWtpXCA7Civkvb/lvpLooYzkvJ0gPCBzaGl0b2d5b3VkZW5cIDsKK+S9s+S6uuiWhOWRvSA8IGthamluaGFrdW1laVwgOwor5pS+5bCE57ea56eR5Yy7IDwgaG91c2hhc2Vua2FpXCA7CivmnInkvZPos4fnlKMgPCB5dXV0YWlzaGlzYW5cIDsKK+WvvuazsOmWouS/giA8IHRhaXRhaWthbmtlaVwgOwor5qyn5bee6YCj5ZCIIDwgb3VzaHV1cmVuZ291XCA7CivlpbPlrZDlrabnlJ8gPCBqb3NoaWdha3VzZWlcIDsKK+Wbo+e1kOW/gyA8IGRhbmtldHN1c2hpblwgOwor5Y2Y57SU5bmz5Z2HIDwgdGFuanVuaGVpa2luXCA7Civos6rllY/mm7ggPCBzaGl0c3Vtb25zaG9cIDsKK+WGjeW6pueiuuiqjSA8IHNhaWRva2FrdW5pblwgOwor6ay86Z2i5Lyd5b+DIDwga2ltZW5kZW5zaGluXCA7Civosr/mmJPpu5LlrZcgPCBib3Vla2lrdXJvamlcIDsKK+e1hOWQiOWToeiovCA8IGt1bWlhaWluc2hvdVwgOwor54af5p+/5Li7576pIDwganVrdXNoaXNodWdpXCA7CivkuK3nq4vmgKcgPCBjaHV1cml0c3VzZWlcIDsKK+WGt+aIv+ijhee9riA8IHJlaWJvdXNvdWNoaVwgOwor54++5Zyw55Sf55SjIDwgZ2VuY2hpc2Vpc2FuXCA7CivmlrDogZ7oqJjogIUgPCBzaGluYnVua2lzaGFcIDsKK+WRiueZuueKtiA8IGtva3VoYXRzdWpvdVwgOwor5aSn5bGx6bO05YuVIDwgdGFpemFubWVpZG91XCA7Civms6LnirbmlLvmkoMgPCBoYWpvdWtvdWdla2lcIDsKK+WNmOiomOaKleelqCA8IHRhbmtpdG91aHlvdVwgOwor5LiA5qyh6Zai5pWwIDwgaWNoaWppa2Fuc3V1XCA7CivlubzlvaLpgLLljJYgPCB5b3VrZWlzaGlua2FcIDsKK+WPjeW+qeiqrCA8IGhhbnB1a3VzZXRzdVwgOwor5Y2w5Yi36KGTIDwgaW5zYXRzdWp1dHN1XCA7Civog73lipvntaYgPCBub3VyeW9rdWt5dXVcIDsKK+mdkueJqeW4guWgtCA8IGFvbW9ub2ljaGliYVwgOwor5a2m55Sf6YGL5YuVIDwgZ2FrdXNlaXVuZG91XCA7CivloLHlvqnmjqrnva4gPCBob3VmdWt1c29jaGlcIDsKK+WbnuW+qeWPr+iDvSA8IGthaWZ1a3VrYW5vdVwgOwor5q2j6KeS5a6a5pyoIDwgc2Vpa2FrdWpvdWdpXCA7CivmrbTlj7LlnLDnkIYgPCByZWtpc2hpY2hpcmlcIDsKK+e3tOe/kuabsiA8IHJlbnNodXVreW9rdVwgOwor5bm05Lit54Sh5LyRIDwgbmVuanV1bXVreXV1XCA7Civku6PmlbDnmoTlkowgPCBkYWlzdXV0ZWtpd2FcIDsKK+i2heiDveWKmyA8IGNob3Vub3VyeW9rdVwgOwor5bem5Y+z55u456ewIDwgc2F5dXVzb3VzaG91XCA7CivmoLjliIboo4IgPCBrYWt1YnVucmV0c3VcIDsKK+W4neWbveS4u+e+qSA8IHRlaWtva3VzaHVnaVwgOwor6KW/5rSL5p2+6ZyyIDwgc2VpeW91c2hvdXJvXCA7Civlm57ou6Lli5jlrpogPCBrYWl0ZW5rYW5qb3VcIDsKK+S+neiol+WwhOaSgyA8IGl0YWt1c2hhZ2VraVwgOwor5q2j6KaP6KGo54++IDwgc2Vpa2loeW91Z2VuXCA7Civni6znq4vmqKkgPCBkb2t1cml0c3VrZW5cIDsKK+e3j+mgmOS6i+mkqCA8IHNvdXJ5b3VqaWthblwgOwor5b6F5a616I2JIDwgbWF0c3V5b2lndXNhXCA7CivkuIDkurrlqJggPCBoaXRvcmltdXN1bWVcIDsKK+ebl+mbo+mYsuatoiA8IHRvdW5hbmJvdXNoaVwgOwor5ruF56eB5aWJ5YWsIDwgbWVzc2hpaG91a291XCA7Civlm73nqI7lsYAgPCBrb2t1emVpa3lva3VcIDsKK+e3j+WQiOenkeWtpiA8IHNvdWdvdWthZ2FrdVwgOwor5ouY5p2f5pmC6ZaTIDwga291c29rdWppa2FuXCA7Civlm5vmlrnlhavmlrkgPCBzaGlob3VoYXBwb3VcIDsKK+S4u+imgeiruOWFgyA8IHNodXlvdXNob2dlblwgOwor5Y2B5YiG5p2h5Lu2IDwganV1YnVuam91a2VuXCA7CivmmYLku6PmgJ3mva4gPCBqaWRhaXNoaWNob3VcIDsKK+S7o+eQhuaKleelqCA8IGRhaXJpdG91aHlvdVwgOwor5Y+k5YW46Z+z5qW9IDwga290ZW4nJ29uZ2FrdVwgOwor6YqA6KGM5by355uXIDwgZ2lua291Z291dG91XCA7CivkuIDpnaLorZggPCBpY2hpbWVuc2hpa2lcIDsKK+WHuumhmOiAhSA8IHNodXRzdWdhbnNoYVwgOwor6LW354iG6KOF572uIDwga2liYWt1c291Y2hpXCA7CivpgK7mjZXoqLHoq74gPCB0YWlob2t5b2Rha3VcIDsKK+i6vuaWuSA8IHNoaXRzdWtla2F0YVwgOwor5q2v54mZ55a+5oKjIDwgc2hpZ2FzaGlra2FuXCA7Civli7/lv5jojYkgPCB3YXN1cmVuYWd1c2FcIDsKK+W8t+e2v+iWrCA8IGt5b3VtZW4nJ3lha3VcIDsKK+WFseWQjOellueVjCA8IGt5b3Vkb3Vzb2thaVwgOwor5rK55pat5aSn5pW1IDwgeXVkYW50YWl0ZWtpXCA7Civlg7vlv4MgPCBoaWdhbWlnb2tvcm9cIDsKK+Wwgualrei+suWutiA8IHNlbmd5b3Vub3VrYVwgOwor54ax5Y+v5aGR5oCnIDwgbmV0c3VrYXNvc2VpXCA7CivmorbmnKjprqogPCBrYWppa2ltYWd1cm9cIDsKK+W4guacieiyoeeUoyA8IHNoaXl1dXphaXNhblwgOwor5Zu95a626LOg5YSfIDwga29ra2FiYWlzaG91XCA7CivlpLHmmI7ogIUgPCBzaGl0c3VtZWlzaGFcIDsKK+mdmeaFi+e3j+ioiCA8IHNlaXRhaXNvdWtlaVwgOwor5bCC6ZaA6ZuR6KqMIDwgc2VubW9uemFzc2hpXCA7CivlvL7kuLjliJfou4ogPCBkYW5nYW5yZXNzaGFcIDsKK+Wls+mBk+alvSA8IG9uJyduYWRvdXJha3VcIDsKK+Wkp+ato+aZguS7oyA8IHRhaXNob3VqaWRhaVwgOwor6Kit6KiI5aSJ5pu0IDwgc2Vra2VpaGVua291XCA7Civkuobop6PkuovpoIUgPCByeW91a2Fpamlrb3VcIDsKK+Wun+mok+autemajiA8IGppa2tlbmRhbmthaVwgOwor5oiQ6ZW3546HIDwgc2VpY2hvdXJpdHN1XCA7Civnorrlrp/mgKcgPCBrYWt1aml0c3VzZWlcIDsKK+WumOWDmuaUv+ayuyA8IGthbnJ5b3VzZWlqaVwgOwor5Lq656iu5ZWP6aGMIDwgamluc2h1bW9uZGFpXCA7CivmvJTnv5LllY/poYwgPCBlbnNodXVtb25kYWlcIDsKK+WKtOWDjee1hOWQiCA8IHJvdWRvdWt1bWlhaVwgOwor54Gr54KO5pS+5bCE5ZmoIDwga2FlbmhvdXNoYWtpXCA7CivlkIjlkIzlp5Tlk6HkvJogPCBnb3Vkb3VpaW5rYWlcIDsKK+mGh+miqOe+juS/lyA8IGp1bnB1dWJpem9rdVwgOwor5qS/5rK5IDwgdHN1YmFraWFidXJhXCA7Civpu5Loo4XmnZ8gPCBrdXJvc2hvdXpva3VcIDsKK+afj+mkhSA8IGthc2hpd2Ftb2NoaVwgOwor6YCg5Y+N5pyJ55CGIDwgem91aGFuJyd5dXVyaVwgOwor5raI6LK75oCn5ZCRIDwgc2hvdWhpc2Vpa291XCA7CivlvqHnlKjmlrDogZ4gPCBnb3lvdXNoaW5idW5cIDsKK+WFrOWumuS+oeagvCA8IGtvdXRlaWtha2FrdVwgOwor5aCG56mN5L2c55SoIDwgdGFpc2VraXNheW91XCA7CivmlLvlrojlkIznm58gPCBrb3VzaHVkb3VtZWlcIDsKK+W3peenkeWkp+WtpiA8IGtvdWthZGFpZ2FrdVwgOwor56S+5YWs6YCj5ZCIIDwgc2hha291cmVuZ291XCA7Civou43kuovmlZnnt7QgPCBndW5qaWt5b3VyZW5cIDsKK+W5s+WSjOadoee0hCA8IGhlaXdham91eWFrdVwgOwor54Sh6LOH5qC86ICFIDwgbXVzaGlrYWt1c2hhXCA7CivnhrHmi6HmlaMgPCBuZXRzdWtha3VzYW5cIDsKK+ebuOauuumWoueojiA8IHNvdXNhaWthbnplaVwgOwor5Y2z5pmC5YGc5oimIDwgc29rdWppdGVpc2VuXCA7Civmn4TpoK0gPCB0c3VrYWdhc2hpcmFcIDsKK+a4rOWcsOihm+aYnyA8IHNva3VjaGllaXNlaVwgOwor56m65Lit5rWu6YGKIDwga3V1Y2h1dWZ1eXV1XCA7Civlv6Doh6PolLUgPCBjaHV1c2hpbmd1cmFcIDsKK+WLleeJqeWtpiA8IGRvdWJ1dHN1Z2FrdVwgOwor5LiA5p6a5LiLIDwgaWNoaW1haXNoaXRhXCA7Civkv6HnlKjoqZDmrLogPCBzaGluJyd5b3VzYWdpXCA7Civoh7PmnbHkuqwgPCBpdGFydXRvdWt5b3VcIDsKK+eLrOeri+aApyA8IGRva3VyaXRzdXNlaVwgOwor5piO55y455qT5q2vIDwgbWVpYm91a291c2hpXCA7CivkuIrnrYnlhbXmm7kgPCBqb3V0b3VoZWlzb3VcIDsKK+mHkeWIqeaUv+etliA8IGtpbnJpc2Vpc2FrdVwgOwor6I2J5qC55pyo55quIDwgc291a29ubW9rdWhpXCA7Civpm6jlvozpm6ogPCBhbWVub2NoaXl1a2lcIDsKK+WKtOWDjeeBveWusyA8IHJvdWRvdXNhaWdhaVwgOwor5o6o5a6a5bm06b2iIDwgc3VpdGVpbmVucmVpXCA7CivpgbrnlKPnrqHnkIbkurogPCBpc2Fua2FucmluaW5cIDsKK+iyv+aYk+S+neWtmOW6piA8IGJvdWVraWl6b25kb1wgOwor5pel5pys5paH5a2mIDwgbmlob25idW5nYWt1XCA7Civlhavnm67psLsgPCB5YXRzdW1ldW5hZ2lcIDsKK+Wun+mok+enkeWtpiA8IGppa2tlbmthZ2FrdVwgOwor5Yq05YON5aeU5ZOh5LyaIDwgcm91ZG91aWlua2FpXCA7CivlpKnni5foqbEgPCB0ZW5ndWJhbmFzaGlcIDsKK+ahiOWGheS/giA8IGFuJyduYWlnYWthcmlcIDsKK+WNsemZuuS/oeWPtyA8IGtpa2Vuc2hpbmdvdVwgOwor5rWB6KGM6ImyIDwgcnl1dWtvdXNob2t1XCA7Civpjb7kubPnn7MgPCBzaG91bnl1dXNla2lcIDsKK+ilv+asp+iruOWbvSA8IHNlaW91c2hva29rdVwgOwor5o6l57aa5oCnIDwgc2V0c3V6b2t1c2VpXCA7CivlpJzplpPllrbmpa0gPCB5YWthbicnZWlneW91XCA7CivmqKHlnovpo5vooYzmqZ8gPCBtb2tlaWhpa291a2lcIDsKK+ecn+Wun+aApyA8IHNoaW5qaXRzdXNlaVwgOwor5L2/5b6S5om/5LydIDwgc2hpdG9zaG91ZGVuXCA7Civlm73lrrbkuLvluK0gPCBrb2trYXNodXNla2lcIDsKK+mbquimi+eBr+exoCA8IHl1a2ltaWRvdXJvdVwgOwor5Li75bit5Yik5LqLIDwgc2h1c2VraWhhbmppXCA7CivpqqjogonohasgPCBrb3RzdW5pa3VzaHVcIDsKK+eKrOeVnOeUnyA8IGludWNoaWt1c2hvdVwgOwor5a6Y6KO96JGJ5pu4IDwga2Fuc2VpaGFnYWtpXCA7CivkvJ3oqJjmloflraYgPCBkZW5raWJ1bmdha3VcIDsKK+WItuWLleaUvuWwhCA8IHNlaWRvdWhvdXNoYVwgOwor6aCY5Y+O6Ki8IDwgcnlvdXNodXVzaG91XCA7Civms5XlvovooYzngrogPCBob3VyaXRzdWtvdWlcIDsKK+WFseeUo+WbveWutiA8IGt5b3VzYW5rb2trYVwgOwor5pWZ6IKy5qmf6ZaiIDwga3lvdWlrdWtpa2FuXCA7CivpnZ7luLjkv6Hlj7cgPCBoaWpvdXNoaW5nb3VcIDsKK+mbquimi+manOWtkCA8IHl1a2ltaXNob3VqaVwgOwor5qmf5qeL5pS56Z2pIDwga2lrb3VrYWlrYWt1XCA7CivmmLzlhYnoibIgPCBjaHV1a291c2hva3VcIDsKK+W+oeeOieadk+WtkCA8IG90YW1hamFrdXNoaVwgOwor5pyA57WC57WQ5p6cIDwgc2Fpc2h1dWtla2thXCA7CivnibnmgbXplqLnqI4gPCB0b2trZWlrYW56ZWlcIDsKK+WcsOmch+S6iOefpSA8IGppc2hpbicneW9jaGlcIDsKK+WFseWQjOWLn+mHkSA8IGt5b3Vkb3Vib2tpblwgOwor5LqL5YuZ5b2T5bGAIDwgamltdXRvdWt5b2t1XCA7CivkuInlj7fpm5HoqowgPCBzYW5nb3V6YXNzaGlcIDsKK+a8j+a0qembu+a1gSA8IHJvdWVpZGVucnl1dVwgOwor5a6j5oim5biD5ZGKIDwgc2Vuc2VuZnVrb2t1XCA7CivlhbHnlKPlnLDljLogPCBreW91c2FuY2hpa3VcIDsKK+S7o+eUqOaVmeWToSA8IGRhaXlvdWt5b3VpblwgOwor5YyX5qW154aKIDwgaG9ra3lva3VndW1hXCA7CivkuInop5Llrpropo8gPCBzYW5rYWt1am91Z2lcIDsKK+ilv+a0i+WwhuajiyA8IHNlaXlvdXNob3VnaVwgOwor5L+h5Y+354Sh6KaWIDwgc2hpbmdvdW11c2hpXCA7CivlnJ/lnLDmlLnpnakgPCB0b2NoaWthaWtha3VcIDsKK+eArOaIuOeJqeW4giA8IHNldG9tb25vaWNoaVwgOwor5Y+45Luk5a6kIDwgc2hpcmVpc2hpdHN1XCA7CivlronlgI3lt53ppIUgPCBhYmVrYXdhbW9jaGlcIDsKK+adseasp+iruOWbvSA8IHRvdW91c2hva29rdVwgOwor6Leh55uu55u457aaIDwgYXRvbWVzb3V6b2t1XCA7Civkurrlt6XlkbzlkLggPCBqaW5rb3Vrb2t5dXVcIDsKK+S/hOebsiA8IG5pd2FrYW1la3VyYVwgOwor6Iiq56m66YO15L6/IDwga291a3V1eXV1YmluXCA7CivkuKbooYzovLjlhaUgPCBoZWlrb3V5dW55dXVcIDsKK+e1jOa4iOagvOW3riA8IGtlaXphaWtha3VzYVwgOwor56S+5Lya6LOH5pysIDwgc2hha2Fpc2hpaG9uXCA7CivlpJbkuqTnibnmqKkgPCBnYWlrb3V0b2trZW5cIDsKK+WNsOWIt+eJqSA8IGluc2F0c3VidXRzdVwgOwor5qWt5YuZ5o+Q5pC6IDwgZ3lvdW11dGVpa2VpXCA7CivmvZzlnKjmhI/orZggPCBzZW56YWlpc2hpa2lcIDsKK+aKveixoeeahCA8IGNodXVzaG91dGVraVwgOwor5Yi25b6h6KOF572uIDwgc2VpZ3lvc291Y2hpXCA7Civnmb3mi43lrZAgPCBzaGlyYWJ5b3VzaGlcIDsKK+aPkOWHuuiAhSA8IHRlaXNodXRzdXNoYVwgOwor5omA5omA5pa55pa5IDwgc2hvc2hvaG91Ym91XCA7CivogJDlnKflipsgPCB0YWlhdHN1cnlva3VcIDsKK+WHuOmdoumPoSA8IHRvdHN1bWVua3lvdVwgOwor6auY6KGA5ZynIDwga291a2V0c3VhdHN1XCA7Civmn7HmmYLoqIggPCBoYXNoaXJhZG9rZWlcIDsKK+WbuuS9k+eHg+aWmSA8IGtvdGFpbmVucnlvdVwgOwor5YKY5q2v6LuKIDwga2FzYWhhZ3VydW1hXCA7CivpvLvlhYPmgJ3moYggPCBoYW5hbW90b2ppYW5cIDsKK+WPs+aKmOemgeatoiA8IHVzZXRzdWtpbnNoaVwgOwor6LuN5Zu96ImyIDwgZ3Vua29rdXNob2t1XCA7Civlhavpg47mvZ8gPCBoYWNoaXJvdWdhdGFcIDsKK+WNg+aAneS4h+iAgyA8IHNlbnNoaWJhbmtvdVwgOwor5L6d6aGY6YCA6IG3IDwgaWdhbnRhaXNob2t1XCA7CivkuInpg6jlkIjllLEgPCBzYW5idWdhc3Nob3VcIDsKK+iogOiqnuS4reaeoiA8IGdlbmdvY2h1dXN1dVwgOwor54++5Luj5paH5piOIDwgZ2VuZGFpYnVubWVpXCA7CivppIrorbflrabntJogPCB5b3Vnb2dha2t5dXVcIDsKK+Wuv+WRveeahCA8IHNodWt1bWVpdGVraVwgOwor5Zue6Lui6YGL5YuVIDwga2FpdGVuJyd1bmRvdVwgOwor6YGL6Ly45qWt6ICFIDwgdW4nJ3l1Z3lvdXNoYVwgOwor5Lit5b+D6KeSIDwgY2h1dXNoaW5rYWt1XCA7CivplbfpoIjpr6ggPCBuYWdhc3VrdWppcmFcIDsKK+efs+ayueWFrOWboyA8IHNla2l5dWtvdWRhblwgOwor5bGA6YOo6bq76YWUIDwga3lva3VidW1hc3VpXCA7CivnvqnlpKrlpKvnr4AgPCBnaWRheXV1YnVzaGlcIDsKK+mHkeWxnuWKoOW3pSA8IGtpbnpva3VrYWtvdVwgOwor5oKq5oCn6IWr55iNIDwgYWt1c2Vpc2h1eW91XCA7Civkv67kuoboqLwgPCBzaHV1cnlvdXNob3VcIDsKK+mmrOm5v+ato+ebtCA8IGJha2FzaG91amlraVwgOwor5ZCI5byB5Lya56S+IDwgZ291YmVuZ2Fpc2hhXCA7CivmrrXjgIXnlaAgPCBkYW5kYW5iYXRha2VcIDsKK+WFrOebiuS6i+alrSA8IGtvdWVraWppZ3lvdVwgOwor5L+h5Y+36Zu75rOiIDwgc2hpbmdvdWRlbnBhXCA7CivlpJrogonos6ogPCB0YW5pa3VzaGl0c3VcIDsKK+mAsuWFpeeBryA8IHNoaW4nJ255dXV0b3VcIDsKK+mbhue0hOeahCA8IHNodXV5YWt1dGVraVwgOwor5YW15YWt546JIDwgaHlvdXJva3VkYW1hXCA7Civmkanmk6bnhrEgPCBtYXNhdHN1bmV0c3VcIDsKK+WGhei8quWQjOW/lyA8IHVjaGl3YWRvdXNoaVwgOwor56S+5Lya5LqL5qWtIDwgc2hha2FpamlneW91XCA7CivmioDooZPlipsgPCBnaWp1dHN1cnlva3VcIDsKK+mbtue0sOS8gealrSA8IHJlaXNhaWtpZ3lvdVwgOwor5Luu5rq25o6lIDwga2FyaXlvdXNldHN1XCA7Civlm73lrprlhazlnJIgPCBrb2t1dGVpa291ZW5cIDsKK+W/nOWKm+W+hOi3ryA8IG91cnlva3VrZWlyb1wgOwor5LiL5L2N56+E55aH5YyWIDwga2FpaGFuY2h1dWthXCA7CivmjqfoqLTmo4TljbQgPCBrb3Vzb2tpa3lha3VcIDsKK+mAmuWLpOWumuacnyA8IHRzdXVraW50ZWlraVwgOwor6auY5ZOB6LOqIDwga291aGluc2hpdHN1XCA7CivmrbTlj7LlnLDlm7MgPCByZWtpc2hpY2hpenVcIDsKK+mbu+WtkOmDteS+vyA8IGRlbnNoaXl1dWJpblwgOwor5pmS5pyo57a/IDwgc2FyYXNoaW1vbWVuXCA7CivkvLjnuK7ms5UgPCBzaGluc2h1a3Vob3VcIDsKK+S6uuW3peefpeiDvSA8IGppbmtvdWNoaW5vdVwgOwor56m65Lit5oqV5LiLIDwga3V1Y2h1dXRvdWthXCA7Civmpb3lpKnkuLvnvqkgPCByYWt1dGVuc2h1Z2lcIDsKK+WFremAo+eZuiA8IHJva3VyZW5wYXRzdVwgOwor5rW35aSW5oqV6LOHIDwga2FpZ2FpdG91c2hpXCA7CivkvbXnmbrnl4cgPCBoZWloYXRzdXNob3VcIDsKK+aal+iovOeVquWPtyA8IGFuc2hvdWJhbmdvdVwgOwor5qyg5LmP55eHIDwga2V0c3Vib3VzaG91XCA7CivmnpXoqZ4gPCBtYWt1cmFrb3RvYmFcIDsKK+mWouevgOaKgCA8IGthbnNldHN1d2F6YVwgOwor5rKI5rKh6Ii5IDwgY2hpbmJvdHN1c2VuXCA7CivlgJnmiYAgPCBzb3Vyb3V0b2tvcm9cIDsKK+WuueepjeeOhyA8IHlvdXNla2lyaXRzdVwgOwor5qGC55S3IDwga2F0c3VyYW90b2tvXCA7CivkuLvlipvmoKogPCBzaHVyeW9rdWthYnVcIDsKK+W5tOm9ouWItumZkCA8IG5lbnJlaXNlaWdlblwgOwor5L6h5qC85oim5LqJIDwga2FrYWt1c2Vuc291XCA7Civpq5jpgJ/luqbpi7wgPCBrb3Vzb2t1ZG9rb3VcIDsKK+WxseaHkCA8IHlhbWFmdXRva29yb1wgOwor5Lm+5rm/6KiIIDwga2Fuc2hpdHN1a2VpXCA7CivpnZ7llrbliKnlm6PkvZMgPCBoaWVpcmlkYW50YWlcIDsKK+eBq+WKm+aUr+aPtCA8IGthcnlva3VzaGllblwgOwor6auY6YCf6YGT6LevIDwga291c29rdWRvdXJvXCA7Civkvb/nlKjnpoHmraIgPCBzaGl5b3VraW5zaGlcIDsKK+WGoOWpmuiRrOelrSA8IGthbmtvbnNvdXNhaVwgOwor5rC05bmz5bC+57+8IDwgc3VpaGVpYml5b2t1XCA7CivkuLzpo68gPCBkb25idXJpbWVzaGlcIDsKK+axuuitsOapn+mWoiA8IGtldHN1Z2lraWthblwgOwor5Lmd5pif6KGTIDwga3l1dXNlaWp1dHN1XCA7Civlj6PlhavkuIEgPCBrdWNoaWhhdGNob3VcIDsKK+mAo+mOluWPjeW/nCA8IHJlbnNhaGFuJydub3VcIDsKK+W4guawkeekvuS8miA8IHNoaW1pbnNoYWthaVwgOwor5qSc5a+f5bqBIDwga2Vuc2F0c3VjaG91XCA7CivooajooajntJkgPCBvbW90ZWJ5b3VzaGlcIDsKK+mDqOWIhumbhuWQiCA8IGJ1YnVuc2h1dWdvdVwgOwor5Zub5o2o5LqU5YWlIDwgc2hpc2hhZ29ueXV1XCA7Civlj5foqJfkvJrnpL4gPCBqdXRha3VnYWlzaGFcIDsKK+WVj+mhjOaEj+itmCA8IG1vbmRhaWlzaGlraVwgOwor6YeR6J6N5YWs5bqrIDwga2luJyd5dXVrb3Vrb1wgOwor55u05Y+W5byVIDwgamlraXRvcmloaWtpXCA7Civlj4vpgZTnlLLmlpAgPCB0b21vZGFjaGlnYWlcIDsKK+Wkp+WtpuWNkiA8IGRhaWdha3Vzb3RzdVwgOwor5LiA6Iis5pWZ6aSKIDwgaXBwYW5reW91eW91XCA7CivlpLHoqp7nl4cgPCBzaGl0c3Vnb3Nob3VcIDsKK+mZjembqumHjyA8IGtvdXNldHN1cnlvdVwgOwor5a6J5a6a5oGQ5oWMIDwgYW50ZWlreW91a291XCA7CivmsLTntKDljJbniakgPCBzdWlzb2thYnV0c3VcIDsKK+eSsOWig+WkieWMliA8IGthbmt5b3VoZW5rYVwgOwor5L2T5qC85qSc5p+7IDwgdGFpa2FrdWtlbnNhXCA7CivmvIHluKvnlLogPCByeW91c2hpbWFjaGlcIDsKK+WMluWtpuWQiOaIkCA8IGthZ2FrdWdvdXNlaVwgOwor5bmz5bmz5Yeh5YehIDwgaGVpaGVpYm9uYm9uXCA7CivluILloLTkvqHmoLwgPCBzaGlqb3VrYWtha3VcIDsKK+eJqeimi+arkyA8IG1vbm9taXlhZ3VyYVwgOwor5ZaE6Zqj6Zai5L+CIDwgemVucmlua2Fua2VpXCA7CivlkIjmiJDmtJfliaQgPCBnb3VzZWlzZW56YWlcIDsKK+ims+W/teS4u+e+qSA8IGthbicnbmVuc2h1Z2lcIDsKK+mAmuWLpOaZgumWkyA8IHRzdXVraW5qaWthblwgOwor57WM5riI5L2T5Yi2IDwga2VpemFpdGFpc2VpXCA7CivkvY/miYDmsI/lkI0gPCBqdXVzaG9zaGltZWlcIDsKK+eWvumiqOaAkua/pCA8IHNoaXBwdXVkb3RvdVwgOwor5Yy755mC5p2Q5paZIDwgaXJ5b3V6YWlyeW91XCA7CivmnInmqZ/ovrLmpa0gPCB5dXVraW5vdWd5b3VcIDsKK+WmqOWus+aUvumAgSA8IGJvdWdhaWhvdXNvdVwgOwor6YeR5bGe5YWD57SgIDwga2luem9rdWdlbnNvXCA7Civlj5bmrKHlupcgPCB0b3JpdHN1Z2l0ZW5cIDsKK+atr+WGheeZguazlSA8IHNoaWthcnlvdWhvdVwgOwor5oKq5oiv5bCP5YOnIDwgaXRhenVyYWtvem91XCA7CivlhajmqKnlpKfkvb8gPCB6ZW5rZW50YWlzaGlcIDsKK+WNseaApeWtmOS6oSA8IGtpa3l1dXNvbmJvdVwgOwor5a6H5a6Z5Lit57aZIDwgdWNodXVjaHV1a2VpXCA7CivpnZ7kurrplpPnmoQgPCBoaW5pbmdlbnRla2lcIDsKK+WPl+S/oeijhee9riA8IGp1c2hpbnNvdWNoaVwgOwor5pWw5YCk6KiI566XIDwgc3V1Y2hpa2Vpc2FuXCA7CivniYfoqIDpmrvoqp4gPCBoZW5nZW5zZWtpZ29cIDsKK+aHkOS4reaZguioiCA8IGthaWNodXVkb2tlaVwgOwor5pyn5pyI5aScIDwgb2Jvcm9kenVraXlvXCA7Civnq7bovKrpgbjmiYsgPCBrZWlyaW5zZW5zaHVcIDsKK+S6q+alveeahCA8IGt5b3VyYWt1dGVraVwgOwor5pqX5Y+36Kej6KqtIDwgYW5nb3VrYWlkb2t1XCA7Civlj43li5XmgJ3mg7MgPCBoYW5kb3VzaGlzb3VcIDsKK+Wun+iovOS4u+e+qSA8IGppc3Nob3VzaHVnaVwgOwor5qiZ5rqW5YGP5beuIDwgaHlvdWp1bmhlbnNhXCA7Civos4fmupDllY/poYwgPCBzaGlnZW5tb25kYWlcIDsKK+mBi+mAgealreiAhSA8IHVuc291Z3lvdXNoYVwgOwor6KGM5YuV5Zyw5bivIDwga291ZG91Y2hpdGFpXCA7CivmsLTlipvlraYgPCBzdWlyeW9rdWdha3VcIDsKK+W5s+etieS4u+e+qSA8IGJ5b3Vkb3VzaHVnaVwgOwor5Y+W5byV5YWIIDwgdG9yaWhpa2lzYWtpXCA7CivkuqTku6PmipXmiYsgPCBrb3V0YWl0b3VzaHVcIDsKK+S4vOmJoiA8IGRvbmJ1cmliYWNoaVwgOwor5YWl5Yqb57eaIDwgbnl1dXJ5b2t1c2VuXCA7CivkvY7ooYDlnKcgPCB0ZWlrZXRzdWF0c3VcIDsKK+WbveWutueLrOWNoCA8IGtva2thZG9rdXNlblwgOwor5Zyf5Zyw5pS56ImvIDwgdG9jaGlrYWlyeW91XCA7CivnkrDlooPln7rmupYgPCBrYW5reW91a2lqdW5cIDsKK+WkluS6pOaWh+abuCA8IGdhaWtvdWJ1bnNob1wgOwor6Lu95oyZ5aaE5YuVIDwga2Vpa3lvbW91ZG91XCA7CivpmLLomavliqDlt6UgPCBib3VjaHV1a2Frb3VcIDsKK+S4jeWcqOaKleelqCA8IGZ1emFpdG91aHlvdVwgOwor5Ly457iu5oCnIDwgc2hpbnNodWt1c2VpXCA7Civlvovku6TliLYgPCByaXRzdXJ5b3VzZWlcIDsKK+WrjOeFmemBi+WLlSA8IGtlbicnZW4nJ3VuZG91XCA7CivlsIHnt5jokYnmm7ggPCBmdXVrYW5oYWdha2lcIDsKK+W9ouW8j+eahCA8IGtlaXNoaWtpdGVraVwgOwor5rOw54S26Ieq6IulIDwgdGFpemVuamlqYWt1XCA7CivmlZfljJfkuLvnvqkgPCBoYWlib2t1c2h1Z2lcIDsKK+S+oeagvOaAp+iDvSA8IGtha2FrdXNlaW5vdVwgOwor5pu46aGe6YCB5qScIDwgc2hvcnVpc291a2VuXCA7CivkurrmqKnllY/poYwgPCBqaW5rZW5tb25kYWlcIDsKK+S7sueri+S6uiA8IG5ha2FkYWNoaW5pblwgOwor5piH6ZmN5Y+jIDwgc2hvdWtvdWd1Y2hpXCA7CivkuIDmrbvloLHlm70gPCBpc3NoaWhvdWtva3VcIDsKK+iomOmMsuS/giA8IGtpcm9rdWdha2FyaVwgOwor5bel5L2c54mpIDwga291c2FrdWJ1dHN1XCA7Civnt7TppqzlpKfmoLkgPCBuZXJpbWFkYWlrb25cIDsKK+S4gOezuOS4gOavqyA8IGlzc2hpaWNoaWdvdVwgOwor54m55q6K5LqL5oOFIDwgdG9rdXNodWppam91XCA7CivmraPnm7TogIUgPCBzaG91amlraW1vbm9cIDsKK+iAgeWwkeS4jeWumiA8IHJvdXNob3VmdXRlaVwgOwor5Lit5b+D55qEIDwgY2h1dXNoaW50ZWtpXCA7Civoh6rnv5LlrqQgPCBqaXNodXVzaGl0c3VcIDsKK+S7iuaYjuaXpSA8IGtvbm15b3VuaWNoaVwgOwor55u45LmX5bmz5Z2HIDwgc291am91aGVpa2luXCA7CivkuIflubTlgJnoo5wgPCBtYW4nJ25lbmtvdWhvXCA7CivlronlhajmlZnogrIgPCBhbnplbmt5b3Vpa3VcIDsKK+eEoeizg+S5l+i7iiA8IG11Y2hpbmpvdXNoYVwgOwor54mH5YuZ5aWR57SEIDwgaGVubXVrZWl5YWt1XCA7CivkuIDoiKzlpKfooYYgPCBpcHBhbnRhaXNodXVcIDsKK+WPpOWFuOaWh+WtpiA8IGtvdGVuYnVuZ2FrdVwgOwor6auY5qCh6YeO55CDIDwga291a291eWFreXV1XCA7CivplpPmjqXnmoQgPCBrYW5zZXRzdXRla2lcIDsKK+S4reiPr+aWmeeQhiA8IGNodXVrYXJ5b3VyaVwgOwor5Ye654mI54mpIDwgc2h1cHBhbmJ1dHN1XCA7CivlgaXlurfnirbmhYsgPCBrZW5rb3Vqb3V0YWlcIDsKK+aguOi7jee4riA8IGtha3VndW5zaHVrdVwgOwor6bm/5YWQ5bO255yMIDwga2Fnb3NoaW1ha2VuXCA7Civmupblgpnnirbms4EgPCBqdW5iaWpvdWt5b3VcIDsKK+mBuOWkluS9s+S9nCA8IHNlbmdhaWthc2FrdVwgOwor6KiA6Kqe5pWZ6IKyIDwgZ2VuZ29reW91aWt1XCA7CivlkIzmloflkIznqK4gPCBkb3VidW5kb3VzaHVcIDsKK+e1puS4juS9k+ezuyA8IGt5dXV5b3RhaWtlaVwgOwor6bq76Jas54qv572qIDwgbWF5YWt1aGFuemFpXCA7CivmnJ3ku6Tmmq7mlLkgPCBjaG91cmVpYm9rYWlcIDsKK+S4gOimi+itmCA8IGljaGlrZW5zaGlraVwgOwor5pS75pKD5YqbIDwga291Z2VraXJ5b2t1XCA7CivkupLmgbXmnaHntIQgPCBnb2tlaWpvdXlha3VcIDsKK+S4gOWbveS4gOelqCA8IGlra29rdWlwcHlvdVwgOwor56Cy6Imm5aSW5LqkIDwgaG91a2FuZ2Fpa291XCA7CivmlbTpq6rmlpkgPCBzZWloYXRzdXJ5b3VcIDsKK+a1geihjOiogOiRiSA8IGhheWFyaWtvdG9iYVwgOwor5Lqk6YCa5qmf6ZaiIDwga291dHN1dWtpa2FuXCA7CivmsLTpioDpm7vmsaAgPCBzdWlnaW5kZW5jaGlcIDsKK+WAkuS6iyA8IHNha2FzYW1hZ290b1wgOwor6L+95ZaE5L6b6aSKIDwgdHN1aXplbmt1eW91XCA7Civku5blipvmnKzpoZggPCB0YXJpa2lob25nYW5cIDsKK+espuWPt+ino+iqrSA8IGZ1Z291a2FpZG9rdVwgOwor55+l6IO95oyH5pWwIDwgY2hpbm91c2hpc3V1XCA7CivkupznhrHluK/msJflgJkgPCBhbmV0dGFpa2lrb3VcIDsKK+W9k+WWtualreaJgCA8IHRvdWVpZ3lvdXNob1wgOwor6IG35ZOh5Lya6K2wIDwgc2hva3VpbmthaWdpXCA7CivoqIDoqp7nibnmnIkgPCBnZW5nb3Rva3V5dXVcIDsKK+acgOWwj+mZkOW6piA8IHNhaXNob3VnZW5kb1wgOwor5p+T5LqV5ZCJ6YeOIDwgc29tZWl5b3NoaW5vXCA7Civlrozlhajniq/nvaogPCBrYW56ZW5oYW56YWlcIDsKK+aagemXhyA8IGFrYXRzdWtpeWFtaVwgOwor5pWZ6IKy5Yi25bqmIDwga3lvdWlrdXNlaWRvXCA7CivmiKblm73mmYLku6MgPCBzZW5nb2t1amlkYWlcIDsKK+WJjemnhueXh+eKtiA8IHplbmt1c2hvdWpvdVwgOwor5LiD6Z2i5YCSIDwgc2hpY2hpbWVuZG91XCA7CivogJDmub/mgKcgPCB0YWlzaGl0c3VzZWlcIDsKK+e0q+e2rOikkuizniA8IHNoaWp1aG91c2hvdVwgOwor5LiA6KiA5Y2K5Y+lIDwgaWNoaWdvbmhhbmt1XCA7CivkuI3ms5XljaDmnIkgPCBmdWhvdXNlbicneXV1XCA7Civku4/mloflraYgPCBmdXRzdWJ1bmdha3VcIDsKK+WutuW6reeSsOWigyA8IGthdGVpa2Fua3lvdVwgOwor55WR5rC057e0IDwgaGF0YWtlc3VpcmVuXCA7Civli4XmkrDpm4YgPCBjaG9rdXNlbnNodXVcIDsKK+S4g+mdouS9kyA8IHNoaWNoaW1lbnRhaVwgOwor6Iie5Y+w55uj552jIDwgYnV0YWlrYW50b2t1XCA7CivlkIjmiJDnmq7pnakgPCBnb3VzZWloaWtha3VcIDsKK+WcqOWuheWLpOWLmSA8IHphaXRha3VraW5tdVwgOwor54Sh5pS/5bqc5Li7576pIDwgbXVzZWlmdXNodWdpXCA7CivkuI3lnKjlnLDkuLsgPCBmdXphaWppbnVzaGlcIDsKK+S4gOWuv+S4gOmjryA8IGlzc2h1a3VpcHBhblwgOwor6ICB5Lq655eF6ZmiIDwgcm91amluYnlvdWluXCA7CivniYfogrrpo5vooYwgPCBrYXRhaGFpaGlrb3VcIDsKK+Wvvua9nOawtOiJpiA8IHRhaXNlbnN1aWthblwgOwor6K2m5oiS6K2m5aCxIDwga2Vpa2Fpa2VpaG91XCA7CivlirnnjofnmoQgPCBrb3VyaXRzdXRla2lcIDsKK+e0r+epjei1pOWtlyA8IHJ1aXNla2lha2FqaVwgOwor5a625peP5qeL5oiQIDwga2F6b2t1a291c2VpXCA7CivlhoXmn5TlpJbliZsgPCBuYWlqdXVnYWlnb3VcIDsKK+WxnuS6uuS4u+e+qSA8IHpva3VqaW5zaHVnaVwgOwor54ax6YeP6KiIIDwgbmV0c3VyeW91a2VpXCA7Civnoazou5/kuKHmtL4gPCBrb3VuYW5yeW91aGFcIDsKK+W6p+W4reeVquWPtyA8IHphc2VraWJhbmdvdVwgOwor56m65Lit5rWu5o+aIDwga3V1Y2h1dWZ1eW91XCA7CivkuIHnqJrlpYnlhawgPCBkZXRjaGlib3Vrb3VcIDsKK+S4gOaWueS6pOmAmiA8IGlwcG91a291dHN1dVwgOwor5LiJ5pel5pyI5b2iIDwgbWlrYWR6dWtpa2VpXCA7Civnp7vli5Xlm7Pmm7jppKggPCBpZG91dG9zaG9rYW5cIDsKK+aknOS6i+e3j+mVtyA8IGtlbmppc291Y2hvdVwgOwor5rOo6YeI6ICFIDwgY2h1dXNoYWt1c2hhXCA7Civni63lv4Pnl4cgPCBreW91c2hpbnNob3VcIDsKK+aWsOimj+aKleizhyA8IHNoaW5raXRvdXNoaVwgOwor5Y2Y6Kqe5qSc57SiIDwgdGFuZ29rZW5zYWt1XCA7CivlvKXnjJvlv4MgPCB5YXRha2Vnb2tvcm9cIDsKK+maoOWMv+eJqeizhyA8IGludG9rdWJ1c3NoaVwgOwor5aWz5Lq656aB5Yi2IDwgbnlvbmlua2luc2VpXCA7CivlpKfkv67pgZPpmaIgPCBkYWlzaHV1ZG91aW5cIDsKK+ajruael+WFrOWckiA8IHNoaW5yaW5rb3VlblwgOwor57eP6Iqx5byPIDwgc291YmFuYXNoaWtpXCA7CivljZTllYblm70gPCBreW91c2hvdWtva3VcIDsKK+WPl+mok+izh+agvCA8IGp1a2Vuc2hpa2FrdVwgOwor5LiD57WD55C0IDwgc2hpY2hpZ2Vua2luXCA7CivlpKflkozoqIDokYkgPCB5YW1hdG9rb3RvYmFcIDsKK+WEgOW8j+S4u+e+qSA8IGdpc2hpa2lzaHVnaVwgOwor6YCg5bGx6YGL5YuVIDwgem91emFuJyd1bmRvdVwgOwor5LiA6Iis5pWZ6IKyIDwgaXBwYW5reW91aWt1XCA7CivniIboo4LlvL4gPCBiYWt1cmV0c3VkYW5cIDsKK+eri+S9k+mfs+mfvyA8IHJpdHRhaW9ua3lvdVwgOwor5a6X5pWZ5b+DIDwgc2h1dWt5b3VzaGluXCA7Civnibnpm4boqJjkuosgPCB0b2t1c2h1dWtpamlcIDsKK+S7mOW4r+axuuitsCA8IGZ1dGFpa2V0c3VnaVwgOwor6KO957SZ5bel5aC0IDwgc2Vpc2hpa291am91XCA7CivlhazlhbHniakgPCBrb3VreW91YnV0c3VcIDsKK+aVkeaApeeusSA8IGt5dXVreXV1YmFrb1wgOwor5pWR5o+05oqV5omLIDwga3l1dWVudG91c2h1XCA7CivosqHlm6Pms5XkurogPCB6YWlkYW5ob3VqaW5cIDsKK+awkeS/l+iInui4iiA8IG1pbnpva3VidXlvdVwgOwor5oim5LqJ54qv572qIDwgc2Vuc291aGFuemFpXCA7Civpm6Pnh4PliqDlt6UgPCBuYW4nJ25lbmtha291XCA7CivljZfoiLnljJfppqwgPCBuYW5zZW5ob2t1YmFcIDsKK+apn+iDvemanOWusyA8IGtpbm91c2hvdWdhaVwgOwor5a6f6KGM5aeU5ZOh5LyaIDwgamlra291aWlua2FpXCA7Civni4Loqanmm7IgPCBreW91c2hpa3lva3VcIDsKK+aXpeacrOWbveawkSA8IG5paG9ua29rdW1pblwgOwor5L+E5YiG6ZmQIDwgbml3YWthYnVuZ2VuXCA7CivoiJ7ouI/mlZnluKsgPCBidXRvdWt5b3VzaGlcIDsKK+ael+mWk+WtpuagoSA8IHJpbmthbmdha2tvdVwgOwor5p2+5q+sIDwgbWF0c3Vwb2trdXJpXCA7CivoirHprYHpgZPkuK0gPCBvaXJhbmRvdWNodXVcIDsKK+a7kemZjeertuaKgCA8IGtha2tvdWt5b3VnaVwgOwor5Zyo5aSW5YWs6aSoIDwgemFpZ2Fpa291a2FuXCA7CivlrpfmlZnlraYgPCBzaHV1a3lvdWdha3VcIDsKK+mgreiZsSA8IGF0YW1hc2hpcmFtaVwgOwor5LiA5pel5LitIDwgaWNoaW5pY2hpanV1XCA7CivlnLDmlrnpgbjmjJkgPCBjaGlob3VzZW5reW9cIDsKK+axguiBt+iAhSA8IGt5dXVzaG9rdXNoYVwgOwor55Wc5q665aC0IDwgY2hpa3VzYXRzdWJhXCA7CivlkIjmiJDljJblraYgPCBnb3VzZWlrYWdha3VcIDsKK+engeijveiRieabuCA8IHNoaXNlaWhhZ2FraVwgOwor5a2m5bm05pyrIDwgZ2FrdW5lbm1hdHN1XCA7CivkuI3lrprnqY3liIYgPCBmdXRlaXNla2lidW5cIDsKK+ato+OAheWgguOAhSA8IHNlaXNlaWRvdWRvdVwgOwor5Y2K5L+h5Y2K55aRIDwgaGFuc2hpbmhhbmdpXCA7CivnqYDosaHomasgPCBrb2t1em91bXVzaGlcIDsKK+i8uOWFpei2hemBjiA8IHl1bnl1dWNob3VrYVwgOwor54Sh6Z+/5a6kIDwgbXVreW91c2hpdHN1XCA7CivnrY3ljLvogIUgPCB0YWtlbm9rb2lzaGFcIDsKK+Wbm+WFg+mAn+W6piA8IHNoaWdlbnNva3Vkb1wgOwor5LuY5bGe5a2m5qChIDwgZnV6b2t1Z2Fra291XCA7Civkurrlt6XnnJ/nj6AgPCBqaW5rb3VzaGluanVcIDsKK+a9m+W/g+WKmyA8IHNlbnNoaW5yeW9rdVwgOwor6IiI6KGM5Li7IDwga291Z3lvdW51c2hpXCA7CivkurrmqKnlm6PkvZMgPCBqaW5rZW5kYW50YWlcIDsKK+acrOaWh+aJueiplSA8IGhvbm1vbmhpaHlvdVwgOwor5Lm+5Zyw6L6y5rOVIDwga2FuY2hpbm91aG91XCA7Civllqfllqflm4Llm4IgPCBrZW5rZW5nb3Vnb3VcIDsKK+advuaelyA8IG1hdHN1YmF5YXNoaVwgOwor5Lq65a6a5bCL5ZWPIDwgamludGVpamlubW9uXCA7Civku7vmnJ/muoDkuoYgPCBuaW5raW1hbnJ5b3VcIDsKK+ertummrOaWsOiBniA8IGtlaWJhc2hpbmJ1blwgOwor5L+u6aO+5a2QIDwgc2h1dXNob2t1c2hpXCA7Civlj47nm4rnjocgPCBzaHV1ZWtpcml0c3VcIDsKK+elneWEgOiiiyA8IHNodXVnaWJ1a3Vyb1wgOwor6Zu75rCX5bel5a2mIDwgZGVua2lrb3VnYWt1XCA7CivlqZrlp7vlsYogPCBrb24nJ2ludG9kb2tlXCA7CivkvpvntabpgY7lpJogPCBreW91a3l1dWthdGFcIDsKK+WPo+mgreWvqeeQhiA8IGtvdXRvdXNoaW5yaVwgOwor6Zqc5a6z54mpIDwgc2hvdWdhaWJ1dHN1XCA7CivlubPlkozmlZnogrIgPCBoZWl3YWt5b3Vpa3VcIDsKK+m7kumKueeXhSA8IGt1cm9zYWJpYnlvdVwgOwor5Lq654mp6KmVIDwgamluYnV0c3VoeW91XCA7Civnt4/lkIjnl4XpmaIgPCBzb3Vnb3VieW91aW5cIDsKK+S4iuWxpOawl+a1gSA8IGpvdXNvdWtpcnl1dVwgOwor6ICB6b2i5bm06YeRIDwgcm91cmVpbmVua2luXCA7Civpm5HmiYDlvpcgPCB6YXRzdXNob3Rva3VcIDsKK+WJpeijveihkyA8IGhha3VzZWlqdXRzdVwgOwor5ryU5aWP57e057+SIDwgZW5zb3VyZW5zaHV1XCA7Civni6zljaDmrLIgPCBkb2t1c2VuJyd5b2t1XCA7Civku5XmjpvlnLDpm7cgPCBzaGlrYWtlamlyYWlcIDsKK+adn+afsSA8IHRzdWthYmFzaGlyYVwgOwor5Zue6Lui6LOH6YeRIDwga2FpdGVuc2hpa2luXCA7CivntbbmnJvnmoQgPCB6ZXRzdWJvdXRla2lcIDsKK+aal+S4reaooee0oiA8IGFuY2h1dW1vc2FrdVwgOwor5aSp54S26ImyIDwgdGVuJyduZW5zaG9rdVwgOwor5ZSv5oiR54us5bCKIDwgeXVpZ2Fkb2t1c29uXCA7Civpm4bmlaPkuLvnvqkgPCBzaHV1c2Fuc2h1Z2lcIDsKK+Wcn+eUo+eJqeWxiyA8IG1peWFnZW1vbm95YVwgOwor6Ieq57Wm6Ieq6LazIDwgamlreXV1amlzb2t1XCA7CivohILogqros6ogPCBzaGlib3VzaGl0c3VcIDsKK+Wul+aVmeWKhyA8IHNodXVreW91Z2VraVwgOwor5ZKM5bmz5Y2U5a6aIDwgd2FoZWlreW91dGVpXCA7Civku4/lv4MgPCBob3Rva2Vnb2tvcm9cIDsKK+WHuuWgtOiAhSA8IHNodXRzdWpvdXNoYVwgOwor5Zyw5pa55YiG5qipIDwgY2hpaG91YnVua2VuXCA7Civkub7mvIblg48gPCBrYW5zaGl0c3V6b3VcIDsKK+W4guWGheims+WFiSA8IHNoaW5haWthbmtvdVwgOwor5pS+5bCE6IO96ZuoIDwgaG91c2hhbm91YW1lXCA7CivlhoXnvbDnmoQgPCBuYWliYXRzdXRla2lcIDsKK+S4g+inkuW9oiA8IHNoaWNoaWtha2tlaVwgOwor6Kuc5aCx5qmf6ZaiIDwgY2hvdWhvdWtpa2FuXCA7CivljbPoiIjmm7IgPCBzb2treW91a3lva3VcIDsKK+WwseWtpue+qeWLmSA8IHNodXVnYWt1Z2ltdVwgOwor6Iiq56m65YSq5YuiIDwga291a3V1eXV1c2VpXCA7CivkurrmiY3nmbvnlKggPCBqaW56YWl0b3V5b3VcIDsKK+aVo+eZuueahCA8IHNhbnBhdHN1dGVraVwgOwor6KSH5pys5L2N5Yi2IDwgZnVrdWhvbicnaXNlaVwgOwor55Sf5rS75L+d6K23IDwgc2Vpa2F0c3Vob2dvXCA7Civpm4bkuK3osarpm6ggPCBzaHV1Y2h1dWdvdXVcIDsKK+W+tOWFteWFjemZpCA8IGNob3VoZWltZW5qb1wgOwor5YWs5a6z5ZWP6aGMIDwga291Z2FpbW9uZGFpXCA7CivljZjouqvotbTku7sgPCB0YW5zaGluZnVuaW5cIDsKK+W6g+WPo+eTtiA8IGhpcm9rdWNoaWJpblwgOwor5beu5Yil55So6KqeIDwgc2FiZXRzdXlvdWdvXCA7Civkurrlj6Pli5XmhYsgPCBqaW5rb3Vkb3V0YWlcIDsKK+Wuh+WumeeJqeeQhiA8IHVjaHV1YnV0c3VyaVwgOwor5YWo6Z2i5oim5LqJIDwgemVubWVuc2Vuc291XCA7CivntYzmuIjnirbmhYsgPCBrZWl6YWlqb3V0YWlcIDsKK+WnlOiol+eglOeptiA8IGl0YWt1a2Vua3l1dVwgOwor5Y2D6L6b5LiH6IumIDwgc2Vuc2hpbmJhbmt1XCA7CivljLvnmYLloLHphawgPCBpcnlvdWhvdXNodXVcIDsKK+awtOaZtuaZguioiCA8IHN1aXNob3Vkb2tlaVwgOwor5LiJ5paH5paH5aOrIDwgc2FubW9uYnVuc2hpXCA7Civlm57ou6LmnKjppqwgPCBrYWl0ZW5tb2t1YmFcIDsKK+S4jeaIpuadoee0hCA8IGZ1c2Vuam91eWFrdVwgOwor5LiA55Sf5oe45ZG9IDwgaXNzaG91a2VubWVpXCA7CivlnKfnuK7njocgPCBhc3NodWt1cml0c3VcIDsKK+aXpemAsuaciOatqSA8IG5pc3NoaW5nZXBwb1wgOwor5Y+X6KiX6LKp5aOyIDwganV0YWt1aGFuYmFpXCA7CivmlofljJbli7Lnq6AgPCBidW5rYWt1bnNob3VcIDsKK+aCoOaCoOmWkemWkSA8IHl1dXl1dWthbmthblwgOwor5LuP6Iux6L6e5YW4IDwgZnV0c3VlaWppdGVuXCA7Civlrr/ms4rkurogPCBzaHVrdWhha3VuaW5cIDsKK+eVmeWuiOeVqumbu+ipsSA8IHJ1c3ViYW5kZW53YVwgOwor6KGb55Sf5bel5a2mIDwgZWlzZWlrb3VnYWt1XCA7CivmlL/opovmlL7pgIEgPCBzZWlrZW5ob3Vzb3VcIDsKK+awtOaAp+Whl+aWmSA8IHN1aXNlaXRvcnlvdVwgOwor54yp57SF54axIDwgc2hvdWtvdW5ldHN1XCA7CivlhYjpgLLlhbXlmaggPCBzZW5zaGluaGVpa2lcIDsKK+iHquW3seS4reW/gyA8IGppa29jaHV1c2hpblwgOwor5Y2U5Yqb6Yu8IDwga3lvdXJ5b2t1a291XCA7CivlkIzlkozmlZnogrIgPCBkb3V3YWt5b3Vpa3VcIDsKK+Wtpum9ouWFkOerpSA8IGdha3VyZWlqaWRvdVwgOwor6IGW5Zyw5beh56S8IDwgc2VpY2hpanVucmVpXCA7CivnpL7lm6Pms5XkurogPCBzaGFkYW5ob3VqaW5cIDsKK+aJgOeVquWcsCA8IHRva29yb2JhbmNoaVwgOwor5rOo6YeI5pu4IDwgY2h1dXNoYWt1c2hvXCA7CivosqjnianovLjpgIEgPCBrYW1vdHN1eXVzb3VcIDsKK+eJueW+tOmHjyA8IHRva3VjaG91cnlvdVwgOwor5q2j5aSa6KeS5b2iIDwgc2VpdGFrYWt1a2VpXCA7Civmh5Dlt6XlkIggPCBmdXRva29yb2d1YWlcIDsKK+mbu+awl+WuuemHjyA8IGRlbmtpeW91cnlvdVwgOwor5rqW56aB5rK755SjIDwganVua2luY2hpc2FuXCA7Civmj4/lhpnlipsgPCBieW91c2hhcnlva3VcIDsKK+WMluWtpuani+mAoCA8IGthZ2FrdWtvdXpvdVwgOwor55Sf54mp5a2mIDwgc2VpYnV0c3VnYWt1XCA7CivkuIDlhZrni6zoo4EgPCBpdHRvdWRva3VzYWlcIDsKK+eEoemZkOWwj+aVsCA8IG11Z2Vuc2hvdXN1dVwgOwor5ri+54S25LiA5L2TIDwga29uemVuJydpdHRhaVwgOwor5rW35bqV5Zyw6ZyHIDwga2FpdGVpamlzaGluXCA7CivljZrlo6voqrLnqIsgPCBoYWt1c2hpa2F0ZWlcIDsKK+W5s+Wdh+Wvv+WRvSA8IGhlaWtpbmp1bXlvdVwgOwor5biC5rCR6YGL5YuVIDwgc2hpbWluJyd1bmRvdVwgOwor6KiY5b+15Ye654mIIDwga2luZW5zaHVwcGFuXCA7Civoo4Xnva7liLblvqEgPCBzb3VjaGlzZWlneW9cIDsKK+WOn+ijgeWIpOaJgCA8IGdlbnNhaWJhbnNob1wgOwor5qSc6KiO5aeU5ZOh5LyaIDwga2VudG91aWlua2FpXCA7CivljprnlJ/lpKfoh6MgPCBrb3VzZWlkYWlqaW5cIDsKK+ayueiEguW3pealrSA8IHl1c2hpa291Z3lvdVwgOwor57eP5pSv6YWN5Lq6IDwgc291c2hpaGFpbmluXCA7Civoqq3mm7jlipsgPCBkb2t1c2hvcnlva3VcIDsKK+aXpeeFp+aZgumWkyA8IG5pc3Nob3VqaWthblwgOwor5LiA6Iis5pWZ5pu4IDwgaXBwYW5reW91c2hvXCA7CivkuIDpg6jlp4vntYIgPCBpY2hpYnVzaGlqdXVcIDsKK+mWouaVsOWOn+WeiyA8IGthbnN1dWdlbmtlaVwgOwor55+l6K2Y5qyyIDwgY2hpc2hpa2l5b2t1XCA7CivkuInph43lrp3lhqAgPCBzYW5qdXVob3VrYW5cIDsKK+WFqOmAn+WKmyA8IHplbnNva3VyeW9rdVwgOwor5q2T6YCB6L+O5LyaIDwga2Fuc291Z2Vpa2FpXCA7Civnt4rmgKXpgb/pm6MgPCBraW5reXV1aGluYW5cIDsKK+WIuemCo+S4u+e+qSA8IHNldHN1bmFzaHVnaVwgOwor5bel5qWt5Zyw5Yy6IDwga291Z3lvdWNoaWt1XCA7CivmiJHmpb3lpJrluIIgPCBnYXJha3V0YWljaGlcIDsKK+ihhuitsOmZouitsOWToSA8IHNodXVnaWluZ2lpblwgOwor6Lui5YaZ5o265p+TIDwgdGVuc2hhbmFzc2VuXCA7Civoh6rnhLbngb3lrrMgPCBzaGl6ZW5zYWlnYWlcIDsKK+a3see0heiJsiA8IHNoaW5rb3VzaG9rdVwgOwor5aSp5LqV5qOn5pW3IDwgdGVuam91c2FqaWtpXCA7CivlhYjooYzmnaHku7YgPCBzZW5rb3Vqb3VrZW5cIDsKK+aciOS4i+awt+S6uiA8IGdla2thaHlvdWppblwgOwor5pyq5bm0IDwgaGl0c3VqaWRvc2hpXCA7CivosLfmh5AgPCB0YW5pYnV0b2tvcm9cIDsKK+mBuOiAg+WnlOWToeS8miA8IHNlbmtvdWlpbmthaVwgOwor5Yy76Jas5YiG5qWtIDwgaXlha3VidW5neW91XCA7Civpm4HpqqggPCBrYXJpZ2FuZWJvbmVcIDsKK+i6q+WFg+S/neiovCA8IG1pbW90b2hvc2hvdVwgOwor6Luf552A6Zm4IDwgbmFuY2hha3VyaWt1XCA7CivntJTmraPnp5HlraYgPCBqdW5zZWlrYWdha3VcIDsKK+S6jOmHjemBk+W+syA8IG5panV1ZG91dG9rdVwgOwor5oKy5Zac5Lqk5LqkIDwgaGlraWtvbW9nb21vXCA7Civnt4rmgKXli5XorbAgPCBraW5reXV1ZG91Z2lcIDsKK+WkqumZvembu+axoCA8IHRhaXlvdWRlbmNoaVwgOwor6KGX6aCt6Yyy6Z+zIDwgZ2FpdG91cm9rdW9uXCA7Civlm73pmpvmqZ/plqIgPCBrb2t1c2Fpa2lrYW5cIDsKK+adseWPoyA8IGhpZ2FzaGlndWNoaVwgOwor5YmN5YK+5ae/5YuiIDwgemVua2Vpc2hpc2VpXCA7CivluLDlsZ7mhI/orZggPCBraXpva3Vpc2hpa2lcIDsKK+WFrOihhuS+v+aJgCA8IGtvdXNodXViZW5qb1wgOwor5pel5pys5Zu95YaFIDwgbmlob25rb2t1bmFpXCA7CivoibLmg4Xni4IgPCBzaGlraWpvdWt5b3VcIDsKK+mDteS+v+iiiyA8IHl1dWJpbmJ1a3Vyb1wgOwor6YG45rCR5oCd5oOzIDwgc2VubWluc2hpc291XCA7CivlkoDlmrzpgYvli5UgPCBzb3NoYWt1dW5kb3VcIDsKK+iomOW/teWGmeecnyA8IGtpbmVuc2hhc2hpblwgOwor6Ki65a+f5Y+wIDwgc2hpbnNhdHN1ZGFpXCA7Civms6HmsqvnmoQgPCBob3VtYXRzdXRla2lcIDsKK+eBq+eHteW4g+WboyA8IGtvdGF0c3VidXRvblwgOwor5Luu6YeI5pS+IDwga2FyaXNoYWt1aG91XCA7CivlhajpnaLnpoHmraIgPCB6ZW5tZW5raW5zaGlcIDsKK+WMl+WbnuW4sOe3miA8IGtpdGFrYWlraXNlblwgOwor6YCj5ZCI6Imm6ZqKIDwgcmVuZ291a2FudGFpXCA7CivmgKXpgLLnmoQgPCBreXV1c2hpbnRla2lcIDsKK+S6uuWRveaVkeWKqSA8IGppbm1laWt5dXVqb1wgOwor5oim5LqJ54q25oWLIDwgc2Vuc291am91dGFpXCA7CivlpbPlrZDlpKflraYgPCBqb3NoaWRhaWdha3VcIDsKK+WbveWjq+eEoeWPjCA8IGtva3VzaGltdXNvdVwgOwor5bmz5Z2H5L2Z5ZG9IDwgaGVpa2luJyd5b21laVwgOwor5LqL5L6L56CU56m2IDwgamlyZWlrZW5reXV1XCA7CivliIbmlaPmipXos4cgPCBidW5zYW50b3VzaGlcIDsKK+iouuWvn+WIuCA8IHNoaW5zYXRzdWtlblwgOwor5qW15bCP5YCkIDwga3lva3VzaG91Y2hpXCA7Civlgbblg4/npLzmi50gPCBndXV6b3VyZWloYWlcIDsKK+WKueaenOimv+mdoiA8IGtvdWthdGVraW1lblwgOwor57eK5by157ep5ZKMIDwga2luY2hvdWthbndhXCA7CivkuI3oqLHopIfoo70gPCBmdWt5b2Z1a3VzZWlcIDsKK+WMl+asp+elnuipsSA8IGhva3VvdXNoaW53YVwgOwor5Lq65LqL6KGM5pS/IDwgamluamlneW91c2VpXCA7CivmmK3lkozlubTplpMgPCBzaG91d2FuZW5rYW5cIDsKK+WbveWtl+WVj+mhjCA8IGtva3VqaW1vbmRhaVwgOwor5L6b6KGA6ICFIDwga3lvdWtldHN1c2hhXCA7Civlm73li5nlpKfoh6MgPCBrb2t1bXVkYWlqaW5cIDsKK+adr+S6iyA8IHNha2F6dWtpZ290b1wgOwor6KiA6Kqe6Zqc5a6zIDwgZ2VuZ29zaG91Z2FpXCA7Civlho3osqnkvqHmoLwgPCBzYWloYW5rYWtha3VcIDsKK+W5s+Wdh+agquS+oSA8IGhlaWtpbmthYnVrYVwgOwor5a6J5oGv6aaZ6YW4IDwgYW5zb2t1a291c2FuXCA7CivorZzku6PlpKflkI0gPCBmdWRhaWRhaW15b3VcIDsKK+WPjuWFpeW9uSA8IHNodXVueXV1eWFrdVwgOwor56+A55So6ZuGIDwgc2V0c3V5b3VzaHV1XCA7CivphY3pgZTmlpkgPCBoYWl0YXRzdXJ5b3VcIDsKK+mhnue+qeiqnui+nuWFuCA8IHJ1aWdpZ29qaXRlblwgOwor6YGT6Lev6KiI55S7IDwgZG91cm9rZWlrYWt1XCA7Civlj6Toh6rli5Xou4ogPCBmdXJ1amlkb3VzaGFcIDsKK+eLrOaelSA8IGhpdG9yaW1ha3VyYVwgOwor5a655ae/56uv6bqXIDwgeW91c2hpdGFucmVpXCA7CivmlrDljZLogIUgPCBzaGluc290c3VzaGFcIDsKK+iri+iyoOalreiAhSA8IHVrZW9pZ3lvdXNoYVwgOwor6YCa5bi45Y+j6KqeIDwgdHN1dWpvdWtvdWdvXCA7CivlnKjlpJbpgqbkurogPCB6YWlnYWlob3VqaW5cIDsKK+WPjuebo+WKmyA8IHNodXVrYW5yeW9rdVwgOwor6ZaL5pS+57WM5riIIDwga2FpaG91a2VpemFpXCA7Civnmb7okYnnrrEgPCBoeWFrdXlvdWJha29cIDsKK+S9k+aTjeertuaKgCA8IHRhaXNvdWt5b3VnaVwgOwor5Yq05YON5ZCM55ufIDwgcm91ZG91ZG91bWVpXCA7Civlm73pmpvpg73luIIgPCBrb2t1c2FpdG9zaGlcIDsKK+acieWIuumJhOe3miA8IHl1dXNoaXRlc3NlblwgOwor5Zuj5L2T6KGM5YuVIDwgZGFudGFpa291ZG91XCA7Civlv5znlKjmlbDlraYgPCBvdXlvdXN1dWdha3VcIDsKK+WNlOWKm+iAhSA8IGt5b3VyeW9rdXNoYVwgOwor5Lqk6YCa5beh5p+7IDwga291dHN1dWp1bnNhXCA7CivpgJ/pgZTkvr8gPCBzb2t1dGF0c3ViaW5cIDsKK+eEoeaVteiJpumaiiA8IG11dGVraWthbnRhaVwgOwor6Iiq56m65Lya56S+IDwga291a3V1Z2Fpc2hhXCA7CivpioDnmb3oibIgPCBnaW5oYWt1c2hva3VcIDsKK+Wkp+aUv+WliemChCA8IHRhaXNlaWhvdWthblwgOwor5LiN5pKT5LiN5bGIIDwgZnV0b3VmdWt1dHN1XCA7Civnm7jplqLplqLkv4IgPCBzb3VrYW5rYW5rZWlcIDsKK+WQjOebn+e9t+alrSA8IGRvdW1laWhpZ3lvdVwgOwor5aS+56u55qGDIDwga3lvdWNoaWt1dG91XCA7Civou43lgpnnq7bkuokgPCBndW5iaWt5b3Vzb3VcIDsKK+W9ouWuueWLleipniA8IGtlaXlvdWRvdXNoaVwgOwor6KOc57Wm5bm557eaIDwgaG9reXV1a2Fuc2VuXCA7CivnlZznlJ/pgZMgPCBjaGlrdXNob3Vkb3VcIDsKK+mbqui+seaIpiA8IHNldHN1am9rdXNlblwgOwor54K65pu/6KOB5a6aIDwga2F3YXNlc2FpdGVpXCA7Civooajnj77kuLvnvqkgPCBoeW91Z2Vuc2h1Z2lcIDsKK+adseS6rOedgCA8IHRvdWt5b3VjaGFrdVwgOwor6Zu75L+h5bGAIDwgZGVuc2hpbmt5b2t1XCA7CivmlofmlZnlnLDljLogPCBidW5reW91Y2hpa3VcIDsKK+mdkuiJsueXhyA8IHNlaXNob2t1c2hvdVwgOwor5bqD5ZGK5Li7IDwga291a29rdW51c2hpXCA7Civph5HlsZ7nlrLlirQgPCBraW56b2t1aGlyb3VcIDsKK+WPs+aWuemrmOm6l+alvSA8IHVob3Vrb21hZ2FrdVwgOwor5by35Yi255aO6ZaLIDwga3lvdXNlaXNva2FpXCA7CivmnbHkuqznmbogPCB0b3VreW91aGF0c3VcIDsKK+itpuimlue3j+eboyA8IGtlaXNoaXNvdWthblwgOwor5Luj6KGo56S+5ZOhIDwgZGFpaHlvdXNoYWluXCA7CivlgJ/lsYvkvY/lsYUgPCBzaGFrdXlhenVtYWlcIDsKK+W+tOWFteWItuW6piA8IGNob3VoZWlzZWlkb1wgOwor55+t5pyf5aSn5a2mIDwgdGFua2lkYWlnYWt1XCA7Civnq4vkvZPmlL7pgIEgPCByaXR0YWlob3Vzb3VcIDsKK+WFqOi6q+a1tCA8IHplbnNoaW4nJ3lva3VcIDsKK+Wcp+i/q+WMheW4ryA8IGFwcGFrdWhvdXRhaVwgOwor5aSJ6LOq6ICFIDwgaGVuc2hpdHN1c2hhXCA7CivpgJrnlKjmnJ/plpMgPCB0c3V1eW91a2lrYW5cIDsKK+WLieW8t+aZgumWkyA8IGJlbmt5b3VqaWthblwgOwor5oi457GN6KyE5pysIDwga29zZWtpdG91aG9uXCA7Civlrrbluq3mlZnogrIgPCBrYXRlaWt5b3Vpa3VcIDsKK+WcsOmch+aOoumJsSA8IGppc2hpbnRhbmtvdVwgOwor6YG/6Zuj5qKv5a2QIDwgaGluYW5iYXNoaWdvXCA7CivlpI/mnKjnq4sgPCBuYXRzdWtvZGFjaGlcIDsKK+ekvuS8muWlieS7lSA8IHNoYWthaWhvdXNoaVwgOwor5ama5aSW5oCn5LqkIDwga29uZ2Fpc2Vpa291XCA7CivkuI3lj6/mipflipsgPCBmdWtha291cnlva3VcIDsKK+S4gOWhiiA8IGhpdG9rYXRhbWFyaVwgOwor6K2m5a+f5bqBIDwga2Vpc2F0c3VjaG91XCA7Civmpa3nlYzliJ0gPCBneW91a2FpaGF0c3VcIDsKK+Wft+ihjOapn+mWoiA8IHNoaWtrb3VraWthblwgOwor5Yuk5YuZ6KmV5a6aIDwga2lubXVoeW91dGVpXCA7CivlpKnplbfnr4AgPCB0ZW5jaG91c2V0c3VcIDsKK+W4uOeUqOWvvuaVsCA8IGpvdXlvdXRhaXN1dVwgOwor5aiY5b+DIDwgbXVzdW1lZ29rb3JvXCA7CivlpKfpgZPoirjkurogPCBkYWlkb3VnZWluaW5cIDsKK+m7kumiqOeZvembqCA8IGtva3VmdXVoYWt1dVwgOwor6IKl5Y6a5oCn6by754KOIDwgaGlrb3VzZWliaWVuXCA7CivpioDooYzmpa3li5kgPCBnaW5rb3VneW91bXVcIDsKK+ePvuWcsOiqv+afuyA8IGdlbmNoaWNob3VzYVwgOwor6YGg5rSL6Iiq5rW3IDwgZW4nJ3lvdWtvdWthaVwgOwor5aSW5Lqk6Zai5L+CIDwgZ2Fpa291a2Fua2VpXCA7Civnp4HlrabliqnmiJAgPCBzaGlnYWt1am9zZWlcIDsKK+eUo+ikpeeGsSA8IHNhbmpva3VuZXRzdVwgOwor54Sh55eb5YiG5aipIDwgbXV0c3V1YnVuYmVuXCA7CivkuI3oia/lgrXmqKkgPCBmdXJ5b3VzYWlrZW5cIDsKK+WcsOWfn+aZguWIuyA8IGNoaWlraWppa29rdVwgOwor5Ye554mI5Y2w5Yi3IDwgb3VoYW5pbnNhdHN1XCA7Civln7rlubnnlKPmpa0gPCBraWthbnNhbmd5b3VcIDsKK+i3r+S4iumnkOi7iiA8IHJvam91Y2h1dXNoYVwgOwor5Y2Y5Yud5byPIDwgdGFuc2hvdXNoaWtpXCA7CivkupzphbjljJbnqpLntKAgPCBhc2Fua2FjaGlzc29cIDsKK+mmluiEs+S8muirhyA8IHNodW5vdWthaWRhblwgOwor54us6KOB5pS/5rK7IDwgZG9rdXNhaXNlaWppXCA7CivlpJbkuqTllY/poYwgPCBnYWlrb3Vtb25kYWlcIDsKK+mgremggumqqCA8IHRvdWNob3Vrb3RzdVwgOwor56C055Sj55Sz6KuLIDwgaGFzYW5zaGluc2VpXCA7Civpg7flnJ/oirjog70gPCBreW91ZG9nZWlub3VcIDsKK+W+jOaWueWcsOWfnyA8IGtvdWhvdWNoaWlraVwgOwor5aSq6Zm95pS+5bCEIDwgdGFpeW91aG91c2hhXCA7Civlo4rooYDnl4UgPCBrYWlrZXRzdWJ5b3VcIDsKK+ilv+a0i+aWh+aYjiA8IHNlaXlvdWJ1bm1laVwgOwor5oyv5pu/6Ly46YCBIDwgZnVyaWthZXl1c291XCA7CivkuqTmj5vmnaHku7YgPCBrb3VrYW5qb3VrZW5cIDsKK+eZuuihjOW4guWgtCA8IGhha2tvdXNoaWpvdVwgOwor5LiA5pio5pio5bm0IDwgc2FraW90b3Rvc2hpXCA7Civoo73oj5Pmpa3ogIUgPCBzZWlrYWd5b3VzaGFcIDsKK+eci+adv+WomCA8IGthbmJhbm11c3VtZVwgOwor5oSb5Zu95Zuj5L2TIDwgYWlrb2t1ZGFudGFpXCA7CivlpInlvaLopo/liYcgPCBoZW5rZWlraXNva3VcIDsKK+S6uuawl+aKleelqCA8IG5pbmtpdG91aHlvdVwgOwor55S35aWz5bmz562JIDwgZGFuam9ieW91ZG91XCA7Civpg7Xkvr/okYnmm7ggPCB5dXViaW5oYWdha2lcIDsKK+e3qOmbhuWxgCA8IGhlbnNodXVreW9rdVwgOwor5pm05b6M6ZuoIDwgaGFyZW5vY2hpYW1lXCA7CivluILloLTmkqTpgIAgPCBzaGlqb3V0ZXR0YWlcIDsKK+WuieWumuWQjOS9jeS9kyA8IGFudGVpZG91aXRhaVwgOwor5a6a5pyf5qSc6Ki6IDwgdGVpa2lrZW5zaGluXCA7CivmtYHli5Xpo58gPCByeXV1ZG91c2hva3VcIDsKK+Wkj+elrSA8IG5hdHN1bWF0c3VyaVwgOwor5Zuj5L2T56u25oqAIDwgZGFudGFpa3lvdWdpXCA7Civpo5/pgZPmpb0gPCBzaG9rdWRvdXJha3VcIDsKK+awkemWk+Wbo+S9kyA8IG1pbmthbmRhbnRhaVwgOwor5bCB5bu65oCd5oOzIDwgaG91a2Vuc2hpc291XCA7CivoiKrntprot53pm6IgPCBrb3V6b2t1a3lvcmlcIDsKK+WPjOWzsOmnsemnnSA8IHNvdWhvdXJha3VkYVwgOwor55m+56eR5YWo5pu4IDwgaHlha2themVuc2hvXCA7CivoqabooYzpjK/oqqQgPCBzaGlrb3VzYWt1Z29cIDsKK+W3peWgtOWcsOW4ryA8IGtvdWpvdWNoaXRhaVwgOwor5q+b57mU6YymIDwga2VvcmluaXNoaWtpXCA7CivmlL/msrvmlLnpnakgPCBzZWlqaWthaWtha3VcIDsKK+W4guawkeS8mumkqCA8IHNoaW1pbmthaWthblwgOwor5rGC5Lq65Y+jIDwga3l1dWppbmd1Y2hpXCA7CivmnInpmZDkvJrnpL4gPCB5dXVnZW5nYWlzaGFcIDsKK+mHjeWVhuS4u+e+qSA8IGp1dXNob3VzaHVnaVwgOwor6aeF5YmN5bqD5aC0IDwgZWtpbWFlaGlyb2JhXCA7CivntYLnnYDpp4UgPCBzaHV1Y2hha3Vla2lcIDsKK+aUv+ayu+iyrOS7uyA8IHNlaWppc2VraW5pblwgOwor6buS5rC054axIDwga29rdXN1aW5ldHN1XCA7Civku67pgLLntJogPCBrYXJpc2hpbmt5dXVcIDsKK+WwgualreS4u+WppiA8IHNlbmd5b3VzaHVmdVwgOwor54++5aC055uj552jIDwgZ2VuYmFrYW50b2t1XCA7Civlhazou6LlkajmnJ8gPCBrb3V0ZW5zaHV1a2lcIDsKK+WPo+S4ieWRs+e3miA8IGt1Y2hpamFtaXNlblwgOwor6YWN6YGU5YWIIDwgaGFpdGF0c3VzYWtpXCA7Civlr53nianoqp4gPCBuZW1vbm9nYXRhcmlcIDsKK+S4gOaYqOaYqOWknCA8IGlzc2FrdXNha3V5YVwgOwor6Iul5q6/5Y6fIDwgd2FrYXRvbm9iYXJhXCA7CivooYDmuIXogp3ngo4gPCBrZXNzZWlrYW4nJ2VuXCA7Civkurrot6HmnKrouI8gPCBqaW5zZWtpbWl0b3VcIDsKK+W8t+WItuS/nemZuiA8IGt5b3VzZWlob2tlblwgOwor5LiA5pyb5Y2D6YeMIDwgaWNoaWJvdXNlbnJpXCA7CivlhrfolLXlrqQgPCByZWl6b3VzaGl0c3VcIDsKK+WIkeWLmeaJgOmVtyA8IGtlaW11c2hvY2hvdVwgOwor5aC05YaF5pS+6YCBIDwgam91bmFpaG91c291XCA7CivmnJ3kuInmmq7lm5sgPCBjaG91c2FuYm9zaGlcIDsKK+emj+elieWbveWutiA8IGZ1a3VzaGlrb2trYVwgOwor5rKh5Lqk5riJIDwgYm90c3Vrb3VzaG91XCA7CivplbfliIDkuIDmnp0gPCBjaG91dG91aXNzaGlcIDsKK+mdmeiEiOeYpCA8IGpvdW15YWt1cnl1dVwgOwor54Sh57ea5bel5a2mIDwgbXVzZW5rb3VnYWt1XCA7Civli53liKnmipXmiYsgPCBzaG91cml0b3VzaHVcIDsKK+Wkqeawl+amguazgSA8IHRlbmtpZ2Fpa3lvdVwgOwor6aqo57WE57mUIDwga290c3Vzb3NoaWtpXCA7CivljYPljZLplbcgPCBzZW5zb3RzdWNob3VcIDsKK+eEoeW4uOi/hemAnyA8IG11am91amluc29rdVwgOwor6KGM5YuV56eR5a2mIDwga291ZG91a2FnYWt1XCA7Civnm7TovYTlnLAgPCBjaG9ra2F0c3VjaGlcIDsKK+S6iOmYsuazqOWwhCA8IHlvYm91Y2h1dXNoYVwgOwor5piU5byPIDwgbXVrYXNoaXNoaWtpXCA7CivmpbXnp5jmg4XloLEgPCBnb2t1aGlqb3Vob3VcIDsKK+WwgeW7uuekvuS8miA8IGhvdWtlbnNoYWthaVwgOwor5LiA562L57mpIDwgaGl0b3N1amluYXdhXCA7CivlirTkvb/ntJvkuokgPCByb3VzaGlmdW5zb3VcIDsKK+iHquWtpuiHque/kiA8IGppZ2FrdWppc2h1dVwgOwor5LiN6YCj57aa57eaIDwgZnVyZW56b2t1c2VuXCA7CivmsrvlpJbms5XmqKkgPCBjaGlnYWlob3VrZW5cIDsKK+e1jOa4iOWkluS6pCA8IGtlaXphaWdhaWtvdVwgOwor5YiD54mp5LiJ5pinIDwgaGFtb25vemFubWFpXCA7CivlhYnlrabnuYrntq0gPCBrb3VnYWt1c2VuJydpXCA7CivlsLHogbfpm6MgPCBzaHV1c2hva3VuYW5cIDsKK+WFqOS8keatouespiA8IHplbmt5dXVzaGlmdVwgOwor5ZKM5rSL5oqY6KG3IDwgd2F5b3VzZXRjaHV1XCA7CivmuIXnrpfkvJrnpL4gPCBzZWlzYW5nYWlzaGFcIDsKK+W7g+iXqee9ruecjCA8IGhhaWhhbmNoaWtlblwgOwor6Ieo5bqK6Kyb576pIDwgcmluc2hvdWtvdWdpXCA7CivoqqzntYznr4AgPCBzZWtreW91YnVzaGlcIDsKK+e0lOaXpeacrOmiqCA8IGp1bicnbmlob25mdXVcIDsKK+aWh+Wtl+espuWPt+ezuyA8IG1vamlmdWdvdWtlaVwgOwor5oyZ5Zu95LiA6Ie0IDwga3lva29rdWl0Y2hpXCA7CivlpKfooYbpgYvli5UgPCB0YWlzaHV1dW5kb3VcIDsKK+W/g+i6q+eXhyA8IHNoaW5zaGluc2hvdVwgOwor5biC5aC06Kq/5p+7IDwgc2hpam91Y2hvdXNhXCA7CivlhazplovlpJbkuqQgPCBrb3VrYWlnYWlrb3VcIDsKK+mdouS8muWupCA8IG1lbmthaXNoaXRzdVwgOwor54us5Ym15YqbIDwgZG9rdXNvdXJ5b2t1XCA7CivlprnlqJggPCBpbW91dG9tdXN1bWVcIDsKK+Wkp+iUteWkp+iHoyA8IG9va3VyYWRhaWppblwgOwor5L+u5q2j5LqI566XIDwgc2h1dXNlaXlvc2FuXCA7Civlp4vmpa3lvI8gPCBzaGlneW91c2hpa2lcIDsKK+ihjOaUv+apn+mWoiA8IGd5b3VzZWlraWthblwgOwor5Yy755mC6Ly46YCB5qmfIDwgaXJ5b3V5dXNvdWtpXCA7CivmnaXlrqLnrYsgPCByYWlreWFrdXN1amlcIDsKK+mAsuWtpuWhviA8IHNoaW5nYWt1anVrdVwgOwor55uu55qE5qC8IDwgbW9rdXRla2lrYWt1XCA7CivmlL/mlZnliIbpm6IgPCBzZWlreW91YnVucmlcIDsKK+aQreS5l+ahiOWGhSA8IHRvdWpvdWFuJyduYWlcIDsKK+S6lOS6uuWbg+WtkCA8IGdvbmluYmF5YXNoaVwgOwor54us5ZaE5Li7576pIDwgZG9rdXplbnNodWdpXCA7CivoiKrnqbrmm7jnsKEgPCBrb3VrdXVzaG9rYW5cIDsKK+izm+WQpuWQjOelqCA8IHNhbnBpZG91aHlvdVwgOwor5Lq65paH5a2m5rS+IDwgamluYnVuZ2FrdWhhXCA7Civmj7TnlKjnlJ/nlKMgPCBlbicneW91c2Vpc2FuXCA7CivkuI3ogJXkvZzlnLAgPCBmdWtvdXNha3VjaGlcIDsKK+Wkp+S9v+WFrOmCuCA8IHRhaXNoaWtvdXRlaVwgOwor5rG66K2w5LqL6aCFIDwga2V0c3VnaWppa291XCA7CivmoKHmraPkv4IgPCBrb3VzZWlnYWthcmlcIDsKK+WKm+iHquaFoiA8IGNoaWthcmFqaW1hblwgOwor6YGO6YW45YyW5rC057SgIDwga2FzYW5rYXN1aXNvXCA7CivlsYvmlbfnlLogPCB5YXNoaWtpbWFjaGlcIDsKK+a4qeazieeZguazlSA8IG9uc2VucnlvdWhvdVwgOwor5LiA6aGw5LiA56yRIDwgaXBwaW4nJ2lzc2hvdVwgOwor6Zu75rCX5L+h5Y+3IDwgZGVua2lzaGluZ291XCA7CivpnJzmn7EgPCBzaGltb2Jhc2hpcmFcIDsKK+acjemjvuWTgSA8IGZ1a3VzaG9rdWhpblwgOwor6Iao5by1546HIDwgYm91Y2hvdXJpdHN1XCA7CivlsILnrqHmsLTln58gPCBzZW5rYW5zdWlpa2lcIDsKK+WkqeS9k+W0h+aLnSA8IHRlbnRhaXN1dWhhaVwgOwor6Imv5b+D55qEIDwgcnlvdXNoaW50ZWtpXCA7Civnm7jkupLlj4LnhacgPCBzb3Vnb3NhbnNob3VcIDsKK+WJsueDueaWmeeQhiA8IGthcHBvdXJ5b3VyaVwgOwor56m65b+15LuPIDwgc29yYW5lbmJ1dHN1XCA7Civpg4rlpJbpm7vou4ogPCBrb3VnYWlkZW5zaGFcIDsKK+eahueahuanmCA8IG1pbmFtaW5hc2FtYVwgOwor5L+u5q2j5Li7576pIDwgc2h1dXNlaXNodWdpXCA7Civog73njofntaYgPCBub3VyaXRzdWt5dXVcIDsKK+ijnOW8t+iovOaLoCA8IGhva3lvdXNob3Vrb1wgOwor5pif5Y2wIDwgaG9zaGlqaXJ1c2hpXCA7CivloIbnqY3niakgPCB0YWlzZWtpYnV0c3VcIDsKK+S6uuadkOmKgOihjCA8IGppbnphaWdpbmtvdVwgOwor6L+R5Luj6Z+z5qW9IDwga2luZGFpb25nYWt1XCA7Civoo4/pnaLlt6XkvZwgPCByaW1lbmtvdXNha3VcIDsKK+azleayu+ekvuS8miA8IGhvdWNoaXNoYWthaVwgOwor5Ye657SN5L+CIDwgc3VpdG91Z2FrYXJpXCA7CivlpKfnm6TmjK/oiJ4gPCBvb2JhbmJ1cnVtYWlcIDsKK+S4ieWykOS7o+ihqCA8IHNhbmdpZGFpaHlvdVwgOwor6JOE56mN566hIDwgY2hpa3VzZWtpa2FuXCA7Civni6zouqvogIUgPCBkb2t1c2hpbm1vbm9cIDsKK+aVmeWToee1hOWQiCA8IGt5b3Vpbmt1bWlhaVwgOwor5rW36Zuj5pWR5YqpIDwga2FpbmFua3l1dWpvXCA7CivpjLLpn7PmlL7pgIEgPCByb2t1b25ob3Vzb3VcIDsKK+S4ieiAheWHoemAgCA8IHNhbnNoYWJvbnRhaVwgOwor55+z56u56ImyIDwgc2VraWNoaWt1aXJvXCA7Civnm7TohbjnmYwgPCBjaG9rdWNob3VnYW5cIDsKK+eqgeeZuueahCA8IHRvcHBhdHN1dGVraVwgOwor5pel5pys5rW35rWBIDwgbmlob25rYWlyeXV1XCA7Civlj7LkuIrmnIDlpKcgPCBzaGlqb3VzYWlkYWlcIDsKK+iKuOihk+eahCA8IGdlaWp1dHN1dGVraVwgOwor6Z2e5pm26LOqIDwgaGlzaG91c2hpdHN1XCA7CivoqJjmhrbpmpzlrrMgPCBraW9rdXNob3VnYWlcIDsKK+S4jeWKtOaJgOW+lyA8IGZ1cm91c2hvdG9rdVwgOwor6ICB6I2Y5oCd5oOzIDwgcm91c291c2hpc291XCA7CivnjononIDpu40gPCB0b3Vtb3Jva29zaGlcIDsKK+i7jemcgOW3pealrSA8IGd1bmp1a291Z3lvdVwgOwor5bCP5b+D6ICFIDwgc2hvdXNoaW5tb25vXCA7Civpm6LlkIjpm4bmlaMgPCByaWdvdXNodXVzYW5cIDsKK+iJr+Wmu+izouavjSA8IHJ5b3VzYWlrZW5ib1wgOwor6LuN5Y+45Luk5a6YIDwgZ3Vuc2hpcmVpa2FuXCA7Civpu5LmsLTlvJUgPCBrdXJvbWl6dWhpa2lcIDsKK+iyv+aYk+S8muekviA8IGJvdWVraWdhaXNoYVwgOwor54eQ6YW46IKl5paZIDwgcmluc2FuaGlyeW91XCA7CivmhJ/nhrHliaQgPCBrYW4nJ25ldHN1emFpXCA7CivnhKHpmZDosqzku7sgPCBtdWdlbnNla2luaW5cIDsKK+Wor+alveWupCA8IGdvcmFrdXNoaXRzdVwgOwor6Y6u55eb6JasIDwgY2hpbnRzdXV5YWt1XCA7Civnp5HlrabmgJ3mg7MgPCBrYWdha3VzaGlzb3VcIDsKK+Wbm+a1t+WQjOiDniA8IHNoaWthaWRvdWhvdVwgOwor5Luj55CG5aeU5Lu754q2IDwgZGFpcmlpbmluam91XCA7CivlgaXlurfllY/poYwgPCBrZW5rb3Vtb25kYWlcIDsKK+aEn+WCt+S4u+e+qSA8IGthbnNob3VzaHVnaVwgOwor6aas6aCt6Kaz6Z+zIDwgYmF0b3VrYW4nJ25vblwgOwor5aSp6aCC6Led6ZuiIDwgdGVuY2hvdWt5b3JpXCA7Civog73njofnmoQgPCBub3VyaXRzdXRla2lcIDsKK+iqv+afu+mDqOmVtyA8IGNob3VzYWJ1Y2hvdVwgOwor5ZCI5ZSx5puyIDwgZ2Fzc2hvdWt5b2t1XCA7CivkuLnpoILptrQgPCB0YW5jaG91ZHp1cnVcIDsKK+ihjOWLleWRveS7pCA8IGtvdWRvdW1laXJlaVwgOwor54K65pu/5omL5b2iIDwga2F3YXNldGVnYXRhXCA7CivotaTpgZPmsJflm6MgPCBzZWtpZG91a2lkYW5cIDsKK+epuuS4reiQveS4iyA8IGt1dWNodXVyYWtrYVwgOwor6Z2p5paw55qEIDwga2FrdXNoaW50ZWtpXCA7CivlrprmoLzojbfph40gPCB0ZWlrYWt1a2FqdXVcIDsKK+eCuuabv+mKgOihjCA8IGthd2FzZWdpbmtvdVwgOwor5a6Y6IO95Li7576pIDwga2FuJydub3VzaHVnaVwgOwor5a625bqt5pWZ5birIDwga2F0ZWlreW91c2hpXCA7CivmmLzlpJzlhbzooYwgPCBjaHV1eWFrZW5rb3VcIDsKK+WuouWVhuWjsiA8IGt5YWt1c2hvdWJhaVwgOwor5LiA5ous5byPIDwgaWtrYXRzdXNoaWtpXCA7CivnlZznlKPmpa0gPCBjaGlrdXNhbmd5b3VcIDsKK+S8muekvuWWtualrSA8IGthaXNoYWVpZ3lvdVwgOwor6KKL6bygIDwgZnVrdXJvbmV6dW1pXCA7CivllZPokpnmgJ3mg7MgPCBrZWltb3VzaGlzb3VcIDsKK+mdnuW+queSsOeahCA8IGhpanVua2FudGVraVwgOwor5paH5rCR57Wx5Yi2IDwgYnVubWludG91c2VpXCA7CivpgY7phbjljJbniakgPCBrYXNhbmthYnV0c3VcIDsKK+S4gOW/teeZuui1tyA8IGljaGluZW5ob2traVwgOwor5Ye66KGA5q27IDwgc2h1a2tldHN1c2hpXCA7CivogrLmiJDmoL3ln7kgPCBpa3VzZWlzYWliYWlcIDsKK+ePvuWgtOaknOiovCA8IGdlbmJha2Vuc2hvdVwgOwor5pmC5Luj6ICD6Ki8IDwgamlkYWlrb3VzaG91XCA7CivmhJ/luqboia/lpb0gPCBrYW5kb3J5b3Vrb3VcIDsKK+eZvemrqumgrSA8IHNoaXJhZ2FhdGFtYVwgOwor6YCP5piO5Lq66ZaTIDwgdG91bWVpbmluZ2VuXCA7CivmlrDlvaLlvI8gPCBzaGlua2Vpc2hpa2lcIDsKK+W4uOWll+aJi+autSA8IGpvdXRvdXNodWRhblwgOwor5YWx5pyJ54mpIDwga3lvdXl1dWJ1dHN1XCA7CivlkozlubPlt6XkvZwgPCB3YWhlaWtvdXNha3VcIDsKK+eUs+WRiueusSA8IHNoaW5rb2t1YmFrb1wgOwor5pqX5Lit6aOb6LqNIDwgYW5jaHV1aGl5YWt1XCA7Civkupzlr5LluK/msJflgJkgPCBha2FudGFpa2lrb3VcIDsKK+abuOeVmeaWmSA8IGtha2l0b21lcnlvdVwgOwor6auY6Z+z6YOo6KiY5Y+3IDwga291b25idWtpZ291XCA7CivkurrmsJHoo4HliKQgPCBqaW5taW5zYWliYW5cIDsKK+aWveihjOimj+WJhyA8IHNoaWtvdWtpc29rdVwgOwor5Y2K6Lqr5LiN6ZqPIDwgaGFuc2hpbmZ1enVpXCA7CivluIzph4jnhrEgPCBraXNoYWt1bmV0c3VcIDsKK+aZrumAmuWQjeipniA8IGZ1dHN1dW1laXNoaVwgOwor5bGx5Y+j55yMIDwgeWFtYWd1Y2hpa2VuXCA7Civln7fnrYbogIUgPCBzaGlwcGl0c3VzaGFcIDsKK+WvvuixoeevhOWbsiA8IHRhaXNob3VoYW4nJ2lcIDsKK+S6uuawkeaIpue3miA8IGppbm1pbnNlbnNlblwgOwor57Ch5piO5by35Zu6IDwga2FubWVpa3lvdWtvXCA7Civlj6/og73pgbjmip4gPCBrYW5vdXNlbnRha3VcIDsKK+Wxi+WGheertuaKgCA8IG9rdW5haWt5b3VnaVwgOwor5aSa5oOF5LuP5b+DIDwgdGFqb3VidXNzaGluXCA7CivljZjntJToqIjnrpcgPCB0YW5qdW5rZWlzYW5cIDsKK+WFrOihhumbu+ipsSA8IGtvdXNodXVkZW53YVwgOwor5ZWG5Y+W5byVIDwgc2hvdXRvcmloaWtpXCA7CivoirHoh6rli5Xou4ogPCBoYW5hamlkb3VzaGFcIDsKK+S9jeebuOW5vuS9leWtpiA8IGlzb3VraWthZ2FrdVwgOwor5qSN54mp5rK5IDwgc2hva3VidXRzdXl1XCA7CivmlL7olanmga/lrZAgPCBob3V0b3VtdXN1a29cIDsKK+WHuuihgOaWkSA8IHNodWtrZXRzdWhhblwgOwor5LyB55S75a6kIDwga2lrYWt1c2hpdHN1XCA7CivkvrXlhaXou40gPCBzaGluJydueXV1Z3VuXCA7CivlhpnnnJ/mqZ/lupcgPCBzaGFzaGlua2l0ZW5cIDsKK+a8geeNsueJqSA8IGd5b2tha3VidXRzdVwgOwor5LiJ562J6LuN5pu5IDwgc2FudG91Z3Vuc291XCA7Civnt4rmgKXpgK7mjZUgPCBraW5reXV1dGFpaG9cIDsKK+WKm+WtpueahCA8IHJpa2lnYWt1dGVraVwgOwor6LKe5pON6LmC6LqqIDwgdGVpc291anV1cmluXCA7Civlv4PogrrmqZ/og70gPCBzaGlucGFpa2lub3VcIDsKK+e0hOadn+S6iyA8IHlha3Vzb2t1Z290b1wgOwor6ZuM6ZuE5ZCM5qCqIDwgc2hpeXV1ZG91c2h1XCA7CivpoIbpoqjmuoDluIYgPCBqdW5wdXVtYW5wYW5cIDsKK+WtpuagoeazleS6uiA8IGdha2tvdWhvdWppblwgOwor5aSJ5L2N6Zu75rWBIDwgaGVuJydpZGVucnl1dVwgOwor5YmN5ZOo5Yuk5YuZIDwgemVuc2hvdWtpbm11XCA7CivntYzluLflrZAgPCBreW91a2F0YWJpcmFcIDsKK+a1t+a0i+enkeWtpiA8IGthaXlvdWthZ2FrdVwgOwor6L6y5rCR6YGL5YuVIDwgbm91bWluJyd1bmRvdVwgOwor54Gr5raI5aO3IDwgaGlrZXNoaXRzdWJvXCA7Civosqzku7vnr4Tlm7IgPCBzZWtpbmluaGFuJydpXCA7CivnmbrlhYnloZfmlpkgPCBoYWtrb3V0b3J5b3VcIDsKK+aEn+W/nOS9nOeUqCA8IGthbicnbm91c2F5b3VcIDsKK+WIqeS8kem8oCA8IHJpa3l1dW5lenVtaVwgOwor5a2Q5oyB5piG5biDIDwga29tb2NoaWtvbmJ1XCA7CivluILllrbkvY/lroUgPCBzaGllaWp1dXRha3VcIDsKK+mghuW/nOWKmyA8IGp1bicnbm91cnlva3VcIDsKK+S6i+alremDqOmVtyA8IGppZ3lvdWJ1Y2hvdVwgOwor5aSn6IOG5LiN5pW1IDwgZGFpdGFuZnV0ZWtpXCA7CivkvIrli6LlpKfnpZ7lrq4gPCBpc2VkYWlqaW5ndXVcIDsKK+WkqeWcsOWJtemAoCA8IHRlbmNoaXNvdXpvdVwgOwor5biC5aC057WM5riIIDwgc2hpam91a2VpemFpXCA7Civntprmn4QgPCB0c3VkenVraWdhcmFcIDsKK+S6iOWumuacn+aXpSA8IHlvdGVpa2lqaXRzdVwgOwor5Yy755mC5oqA6KGTIDwgaXJ5b3VnaWp1dHN1XCA7CivkuIvljYrouqsgPCBzaGltb2hhbnNoaW5cIDsKK+ihqOaxuuaoqSA8IGh5b3VrZXRzdWtlblwgOwor5oqe5LiA55qEIDwgdGFrdWl0c3V0ZWtpXCA7Civkvb/lvbnli5XoqZ4gPCBzaGlla2lkb3VzaGlcIDsKK+a1geWLleeJqSA8IHJ5dXVkb3VidXRzdVwgOwor6Zmz6L+w5pu4IDwgY2hpbmp1dHN1c2hvXCA7CivlvrTlhbXmpJzmn7sgPCBjaG91aGVpa2Vuc2FcIDsKK+iHquWutueZuumbuyA8IGppa2FoYXRzdWRlblwgOwor6L+95oK85byPIDwgdHN1aXRvdXNoaWtpXCA7CivlkIzoqp7lj43lvqkgPCBkb3Vnb2hhbnB1a3VcIDsKK+W8geirluWkp+S8miA8IGJlbnJvbnRhaWthaVwgOwor5LiA6Iis5oqV56WoIDwgaXBwYW50b3VoeW91XCA7CivkuIDkurrmga/lrZAgPCBoaXRvcmltdXN1a29cIDsKK+mjsumjn+eJqSA8IGluc2hva3VidXRzdVwgOwor6YCA5b256LuN5Lq6IDwgdGFpZWtpZ3VuamluXCA7CivkurrnlJ/mnIDmgqogPCBqaW5zZWlzYWlha3VcIDsKK+WNsOWKoOmbu+WcpyA8IGlua2FkZW4nJ2F0c3VcIDsKK+a2suaAp+mZkOeVjCA8IGVraXNlaWdlbmthaVwgOwor5LqM6YW45YyW54Kt57SgIDwgbmlzYW5rYXRhbnNvXCA7CivmoITppIrlrabogIUgPCBlaXlvdWdha3VzaGFcIDsKK+aYvOmjn+S8miA8IGNodXVzaG9rdWthaVwgOwor6YO95biC5Lqk6YCaIDwgdG9zaGlrb3V0c3V1XCA7CivnlZznlKPlraYgPCBjaGlrdXNhbmdha3VcIDsKK+S6pOaPm+aVmeaOiCA8IGtvdWthbmt5b3VqdVwgOwor5a2m55Sf5pmC5LujIDwgZ2FrdXNlaWppZGFpXCA7CivorZjlrZfnjocgPCBzaGlraWppcml0c3VcIDsKK+aEm+ekvueyvuelniA8IGFpc2hhc2Vpc2hpblwgOwor6ICB5YyW54++6LGhIDwgcm91a2FnZW5zaG91XCA7CivpvLvpq5jpq5ggPCBoYW5hdGFrYWRha2FcIDsKK+ekvuS8muWVj+mhjCA8IHNoYWthaW1vbmRhaVwgOwor55uy566h6YqD5Ym1IDwgbW91a2FuanV1c291XCA7CivnibnliKXms5UgPCB0b2t1YmV0c3Vob3VcIDsKK+adsea1t+WcsOaWuSA8IHRvdWthaWNoaWhvdVwgOwor5Ye65ryB5qipIDwgc2h1dHN1Z3lva2VuXCA7CivnmbrooYzkvJrnpL4gPCBoYWtrb3VnYWlzaGFcIDsKK+i/keaJgOWQiOWjgSA8IGtpbmpvZ2FwcGVraVwgOwor6Z+z5aOw5Zyn57iuIDwgb25zZWlhc3NodWt1XCA7CivmsJHml4/kuLvnvqkgPCBtaW56b2t1c2h1Z2lcIDsKK+WwgumWgOenkeebriA8IHNlbm1vbmthbW9rdVwgOwor5rib6YeP57WM5Za2IDwgZ2VucnlvdWtlaWVpXCA7CivnnaHnnKDkuI3otrMgPCBzdWltaW5idXNva3VcIDsKK+mBi+mAgeWlkee0hCA8IHVuc291a2VpeWFrdVwgOwor6Iie5Y+w5Lit57aZIDwgYnV0YWljaHV1a2VpXCA7CivkuIvlsaTpmo7ntJogPCBrYXNvdWthaWt5dXVcIDsKK+mztuiBt+S6uiA8IHRvYmlzaG9rdW5pblwgOwor57WM5riI6ZeY5LqJIDwga2VpemFpdG91c291XCA7CivkuI3oia/lsJHlpbMgPCBmdXJ5b3VzaG91am9cIDsKK+W/nOaPtOa8lOiqrCA8IG91ZW4nJ2VuemV0c3VcIDsKK+mOrumtguabsiA8IGNoaW5rb25reW9rdVwgOwor6KGM5YuV5Y2K5b6EIDwga291ZG91aGFua2VpXCA7Civlh7rmvJTmlpkgPCBzaHV0c3VlbnJ5b3VcIDsKK+WcsOmch+WcsOW4ryA8IGppc2hpbmNoaXRhaVwgOwor6YCa6YGO6LK/5piTIDwgdHN1dWthYm91ZWtpXCA7CivntbHoqIjlubTpkZEgPCB0b3VrZWluZW5rYW5cIDsKK+S6uuaJi+S4jei2syA8IGhpdG9kZWJ1c29rdVwgOwor6YCa5L+X55qEIDwgdHN1dXpva3V0ZWtpXCA7CivljYHkuK3lhavkuZ0gPCBqaXRjaHV1aGFra3VcIDsKK+a7i+W8t+mjsuaWmSA8IGppa3lvdWlucnlvdVwgOwor5Zub6KeS5Y+356K8IDwgc2hpa2FrdWdvdW1hXCA7Civlm7rlrproprPlv7UgPCBrb3RlaWthbicnbmVuXCA7CivkvY7pn7Ppg6joqJjlj7cgPCB0ZWlvbmJ1a2lnb3VcIDsKK+e1jOmok+enkeWtpiA8IGtlaWtlbmthZ2FndVwgOwor6I236Zu757KS5a2QIDwga2FkZW5yeXV1c2hpXCA7Civkurrlt6XnlJ/lkb0gPCBqaW5rb3VzZWltZWlcIDsKK+mbu+awl+aWmemHkSA8IGRlbmtpcnlvdWtpblwgOwor5b6A5b6p6JGJ5pu4IDwgb3VmdWt1aGFnYWtpXCA7CivkurrpgKDnn7PmsrkgPCBqaW56b3VzZWtpeXVcIDsKK+Wcn+ibjSA8IHRzdWNoaWJvdGFydVwgOwor5aSp56u654mh5Li5IDwgdGVuamlrdWJvdGFuXCA7CivlvqHpprPotbDmp5ggPCBnb2NoaXNvdXNhbWFcIDsKK+S+teWFpeiAhSA8IHNoaW4nJ255dXVzaGFcIDsKK+Wkqei3r+attOeoiyA8IHRlbnJvcmVraXRlaVwgOwor5YWx5ZCM5L6/5omAIDwga3lvdWRvdWJlbmpvXCA7CivmmpfmrrrmnKrpgYIgPCBhbnNhdHN1bWlzdWlcIDsKK+acquaJleiyu+eUqCA8IG1paGFyYWloaXlvdVwgOwor56m65Ye65by1IDwga2FyYXNodXRjaG91XCA7Civnm7jkupLphY3lsZ4gPCBzb3Vnb2hhaXpva3VcIDsKK+egtOmhlOS4gOeskSA8IGhhZ2FuJydpc3Nob3VcIDsKK+ihgOWcp+ioiCA8IGtldHN1YXRzdWtlaVwgOwor6IOG5rGB6LOqIDwgdGFuanV1c2hpdHN1XCA7CivmsrvnmYLlirnmnpwgPCBjaGlyeW91a291a2FcIDsKK+eMn+WumOWItuW6piA8IHJ5b3VrYW5zZWlkb1wgOwor5Y+O5a655oKj6ICFIDwgc2h1dXlvdWthbmphXCA7CivmrabpmbXmoYPmupAgPCBidXJ5b3V0b3VnZW5cIDsKK+S6uuawkeaJgOaciSA8IGppbm1pbnNob3l1dVwgOwor5Y+N5bCE5L+C5pWwIDwgaGFuc2hha2Vpc3V1XCA7Civlt6Xmpa3mhI/ljKAgPCBrb3VneW91aXNob3VcIDsKK+ebuOWvvuipleS+oSA8IHNvdXRhaWh5b3VrYVwgOwor57WM5riI5ZWP6aGMIDwga2VpemFpbW9uZGFpXCA7Civpu4TnoqfnjokgPCBrb3VoZWtpZ3lva3VcIDsKK+malOaciOWIiiA8IGtha3VnZXRzdWthblwgOwor5LiJ5Y2B5YWt6KiIIDwgc2FuanV1cm9ra2VpXCA7Civmrovmpa3miYvlvZMgPCB6YW5neW91dGVhdGVcIDsKK+aKleeQg+WLleS9nCA8IHRvdWt5dXVkb3VzYVwgOwor6Ziy54G96KiT57e0IDwgYm91c2Fpa3VucmVuXCA7CivogJDnlKjlubTmlbAgPCB0YWl5b3VuZW5zdXVcIDsKK+awkeWumuaGsuazlSA8IG1pbnRlaWtlbnBvdVwgOwor56aP5Yip5Y6a55SfIDwgZnVrdXJpa291c2VpXCA7CivmtojogJflk4HosrsgPCBzaG91bW91aGluaGlcIDsKK+Wtpue0mumWiemOliA8IGdha2t5dXVoZWlzYVwgOwor5Lq655Sf6KiY6YyyIDwgamluc2Vpa2lyb2t1XCA7Civlrp/liKnkuLvnvqkgPCBqaXRzdXJpc2h1Z2lcIDsKK+W+qeWOn+WKmyA8IGZ1a3VnZW5yeW9rdVwgOwor56uj5bel5byPIDwgc2h1bmtvdXNoaWtpXCA7Civlhazkvb/ppKjlk6EgPCBrb3VzaGlrYW4nJ2luXCA7Civnq7bkuonnjocgPCBreW91c291cml0c3VcIDsKK+epjeeri+mHkSA8IHRzdW1pdGF0ZWtpblwgOwor5qSN54mp5ZySIDwgc2hva3VidXRzdWVuXCA7CivpgLLljJboq5bogIUgPCBzaGlua2Fyb25zaGFcIDsKK+epuuS4reapn+WLlSA8IGt1dWNodXVraWRvdVwgOwor5oqV56Wo57WQ5p6cIDwgdG91aHlvdWtla2thXCA7CivliY3mj5DmnaHku7YgPCB6ZW50ZWlqb3VrZW5cIDsKK+WkluS6uumBuOaJiyA8IGdhaWppbnNlbnNodVwgOwor5beo5aSn5YiG5a2QIDwga3lvZGFpYnVuc2hpXCA7CivotIvpgKDntJnluaMgPCBnYW56b3VzaGloZWlcIDsKK+eLrOi6q+WvriA8IGRva3VzaGlucnlvdVwgOwor5qSc5a6a6Kmm6aiTIDwga2VudGVpc2hpa2VuXCA7Civol43ntqzopJLnq6AgPCByYW5qdWhvdXNob3VcIDsKK+WPuOazleippumokyA8IHNoaWhvdXNoaWtlblwgOwor5p+U6Luf5L2T5pONIDwganV1bmFudGFpc291XCA7CivkuI3oia/lsI7kvZMgPCBmdXJ5b3Vkb3V0YWlcIDsKK+WvvuaIpui7iuegsiA8IHRhaXNlbnNoYWhvdVwgOwor5YWl5pyt6ICFIDwgbnl1dXNhdHN1c2hhXCA7CivmrbvkvZPop6PliZYgPCBzaGl0YWlrYWlib3VcIDsKK+WFvOalrei+suWutiA8IGtlbmd5b3Vub3VrYVwgOwor5paw5YWl55SfIDwgc2hpbicnbnl1dXNlaVwgOwor5YWs6ZaL6Yyy6Z+zIDwga291a2Fpcm9rdW9uXCA7Civmtbfou43lpKfoh6MgPCBrYWlndW5kYWlqaW5cIDsKK+WNl+S6rOiKseeBqyA8IG5hbmtpbmhhbmFiaVwgOwor56We6Kyh6ZuGIDwgc2hpbicneW91c2h1dVwgOwor5omB5qGD6IW654KOIDwgaGVudG91c2VuJydlblwgOwor5Lit5aSu6YqA6KGMIDwgY2h1dW91Z2lua291XCA7CivkuKHmpbXnq68gPCByeW91a3lva3V0YW5cIDsKK+Wcp+e4ruepuuawlyA8IGFzc2h1a3VrdXVraVwgOwor5biz6Z2i6Z2iIDwgY2hvdW1lbmR6dXJhXCA7CivopovnqY3mm7ggPCBtaXRzdW1vcmlzaG9cIDsKK+eglOWJiuS7oyA8IGtlbnNha3VzaGlyb1wgOwor5rG65riI5omL5q61IDwga2Vzc2Fpc2h1ZGFuXCA7Civku6PnkIbmpa3ogIUgPCBkYWlyaWd5b3VzaGFcIDsKK+mFjee9rui7ouaPmyA8IGhhaWNoaXRlbmthblwgOwor56aB5rK755Sj6ICFIDwga2luY2hpc2Fuc2hhXCA7CivmtLvli5XnmoQgPCBrYXRzdWRvdXRla2lcIDsKK+WFqOi6q+S4jemajyA8IHplbnNoaW5mdXp1aVwgOwor5oSb5LuW5Li7576p6ICFIDwgYWl0YXNodWdpc2hhXCA7Civlhajog73lipsgPCB6ZW4nJ25vdXJ5b2t1XCA7CivpgYvou6LmioDooZMgPCB1bnRlbmdpanV0c3VcIDsKK+mbu+WtkOmfs+alvSA8IGRlbnNoaW9uZ2FrdVwgOwor5Y2D5LiH54Sh6YePIDwgc2VubWFubXVyeW91XCA7Civoh6rmrrrluYfliqkgPCBqaXNhdHN1aG91am9cIDsKK+S7o+aVsOmWouaVsCA8IGRhaXN1dWthbnN1dVwgOwor6Z+z6Z+/6Kit6KiIIDwgb25reW91c2Vra2VpXCA7CivkubPmp5jnqoHotbcgPCBueXV1eW91dG9ra2lcIDsKK+S6i+WJjeWJsuW9kyA8IGppemVud2FyaWF0ZVwgOwor5YW15b255YWN54q2IDwgaGVpZWtpbWVuam91XCA7CivlpKnmtq/lraTni6wgPCB0ZW5nYWlrb2Rva3VcIDsKK+S4jeaJv+S4jeaJvyA8IGZ1c2hvdWJ1c2hvdVwgOwor54Sh5omA5bGe54++IDwgbXVzaG96b2t1Z2VuXCA7CivmnKjpgKDlrrblsYsgPCBtb2t1em91a2Fva3VcIDsKK+mkiuiAgeW5tOmHkSA8IHlvdXJvdW5lbmtpblwgOwor5LqL5YmN56CU5L+uIDwgaml6ZW5rZW5zaHV1XCA7Civpo5/ogonpoZ4gPCBzaG9rdW5pa3VydWlcIDsKK+S9k+ezu+aWh+azlSA8IHRhaWtlaWJ1bnBvdVwgOwor6IK65rS76YePIDwgaGFpa2F0c3VyeW91XCA7Civpm4zpm4TlkIzkvZMgPCBzaGl5dXVkb3V0YWlcIDsKK+mWi+elqOeOhyA8IGthaWh5b3VyaXRzdVwgOwor5bi46K2Y55qEIDwgam91c2hpa2l0ZWtpXCA7Civmp4vpgKDmsZrogbcgPCBrb3V6b3Vvc2hva3VcIDsKK+WfuuekjuefpeitmCA8IGtpc29jaGlzaGlraVwgOwor5Y+O5a655YqbIDwgc2h1dXlvdXJ5b2t1XCA7CivlnLDln5/ntJvkuokgPCBjaGlpa2lmdW5zb3VcIDsKK+WNmOWzsOmnsemnnSA8IHRhbnBvdXJha3VkYVwgOwor6LGh5b6055qEIDwgc2hvdWNob3V0ZWtpXCA7CivkurrmsJfllYblo7IgPCBuaW5raXNob3ViYWlcIDsKK+WNg+Wnv+S4h+aFiyA8IHNlbnNoaWJhbnRhaVwgOwor5YWs5pyJ6LKh55SjIDwga291eXV1emFpc2FuXCA7Civoh6rmhaLoqbEgPCBqaW1hbmJhbmFzaGlcIDsKK+aLm+W+heWuoiA8IHNob3V0YWlreWFrdVwgOwor5YWI6KGM5oqV6LOHIDwgc2Vua291dG91c2hpXCA7Civoo73pgKDlt6XnqIsgPCBzZWl6b3Vrb3V0ZWlcIDsKK+iHqueUseertuS6iSA8IGppeXV1a3lvdXNvdVwgOwor5bed6a2a5paZ55CGIDwga2F3YXVvcnlvdXJpXCA7CivkuqTpn7/mm7IgPCBrb3VreW91a3lva3VcIDsKK+mbu+ino+izqiA8IGRlbmthaXNoaXRzdVwgOwor54++5Luj56eR5a2mIDwgZ2VuZGFpa2FnYWt1XCA7CivlubPlupXoiLkgPCBoaXJhc29rb2J1bmVcIDsKK+eUo+alreapn+aisCA8IHNhbmd5b3VraWthaVwgOwor5LiN5ZCI5qC86ICFIDwgZnVnb3VrYWt1c2hhXCA7CivmmpHkuK3opovoiJ4gPCBzaG9jaHV1bWltYWlcIDsKK+iqmOWwjuWwi+WVjyA8IHl1dWRvdWppbm1vblwgOwor5bCx5Lu75byPIDwgc2h1dW5pbnNoaWtpXCA7Civlhrflh43lrqQgPCByZWl0b3VzaGl0c3VcIDsKK+eRoOeSg+WUkOiNiSA8IHJ1cmlrYXJha3VzYVwgOwor5a6a5b2i5YuV6KmeIDwgdGVpa2VpZG91c2hpXCA7CivphY3ohrPlrqQgPCBoYWl6ZW5zaGl0c3VcIDsKK+S6uumWk+mWouS/giA8IG5pbmdlbmthbmtlaVwgOwor6LWk5Y2B5a2X56S+IDwgc2VraWp1dWppc2hhXCA7CivluoPls7bnnIwgPCBoaXJvc2hpbWFrZW5cIDsKK+aapuaUueatoyA8IGtveW9taWthaXNlaVwgOwor54Sh55Sj6ZqO57SaIDwgbXVzYW5rYWlreXV1XCA7CivlvrPlt53mlrkgPCB0b2t1Z2F3YWdhdGFcIDsKK+WFreazleWFqOabuCA8IHJvcHBvdXplbnNob1wgOwor6ZuG5qip5o6S6ZmkIDwgc2h1dWtlbmhhaWpvXCA7Civlm73pmpvkvJrorbAgPCBrb2t1c2Fpa2FpZ2lcIDsKK+WFkOerpeaWh+WtpiA8IGppZG91YnVuZ2FrdVwgOwor6LuN5LqL56eY5a+GIDwgZ3VuamloaW1pdHN1XCA7Civku67lhaXlraYgPCBrYXJpbnl1dWdha3VcIDsKK+S7u+aEj+WHuumgrSA8IG5pbicnaXNodXR0b3VcIDsKK+S7mOmaj+ePvuixoSA8IGZ1enVpZ2Vuc2hvdVwgOwor5Y6f5b2i6LOqIDwgZ2Vua2Vpc2hpdHN1XCA7CivllIfmra/ovJTou4ogPCBzaGluc2hpaG9zaGFcIDsKK+WOn+WboOiqv+afuyA8IGdlbicnaW5jaG91c2FcIDsKK+aLheW9k+mDqOmVtyA8IHRhbnRvdWJ1Y2hvdVwgOwor5Li75Lu75pWZ5o6IIDwgc2h1bmlua3lvdWp1XCA7Civou43lgpnliYrmuJsgPCBndW5iaXNha3VnZW5cIDsKK+WFrOmWi+ijgeWIpCA8IGtvdWthaXNhaWJhblwgOwor5YiG6Kej5L+u55CGIDwgYnVua2Fpc2h1dXJpXCA7Civnmb7oirHmlonmlL4gPCBoeWFra2FzZWlob3VcIDsKK+m7kuiJsuiFqyA8IGtva3VzaG9rdXNodVwgOwor5Lq66YCg55yf54+gIDwgamluem91c2hpbmp1XCA7CivljZLmpa3nlJ8gPCBzb3RzdWd5b3VzZWlcIDsKK+elnue1jOmBjuaVjyA8IHNoaW5rZWlrYWJpblwgOwor6YCB6YeR54K65pu/IDwgc291a2lua2F3YXNlXCA7Civlm57lvqnlipsgPCBrYWlmdWt1cnlva3VcIDsKK+WOs+ato+enkeWtpiA8IGdlbnNlaWthZ2FrdVwgOwor5YWl5Lya5byPIDwgbnl1dWthaXNoaWtpXCA7Civlj7jms5Xmm7jlo6sgPCBzaGlob3VzaG9zaGlcIDsKK+WcqOWkluizh+eUoyA8IHphaWdhaXNoaXNhblwgOwor5rOV5b6L6YGV5Y+NIDwgaG91cml0c3VpaGFuXCA7CivlkJHlv4PlipsgPCBrb3VzaGlucnlva3VcIDsKK+eOieiZq+iJsiA8IHRhbWFtdXNoaWlyb1wgOwor54m55Yil5Y+3IDwgdG9rdWJldHN1Z291XCA7CivpgLLot6/mjIflsI4gPCBzaGlucm9zaGlkb3VcIDsKK+S6iOWCmeWNlOe0hCA8IHlvYmlreW91eWFrdVwgOwor6ISx5q+b55eHIDwgZGF0c3Vtb3VzaG91XCA7Civlp4vnkIPlvI8gPCBzaGlreXV1c2hpa2lcIDsKK+aVmeiCsueOqeWFtyA8IGt5b3Vpa3VnYW5ndVwgOwor5paH5rOV6KaP5YmHIDwgYnVucG91a2lzb2t1XCA7CivkvZXoibLmkKggPCBuYW5zaG9rdXp1cmlcIDsKK+WujOS6huaZguWItiA8IGthbnJ5b3VqaXNlaVwgOwor5L+h6KiX5qWtIDwgc2hpbnRha3VneW91XCA7Civkuovlrp/oqqToqo0gPCBqaWppdHN1Z29uaW5cIDsKK+i7jemcgOeUo+alrSA8IGd1bmp1c2FuZ3lvdVwgOwor5Zyf54WZIDwgdHN1Y2hpa2VtdXJpXCA7Civlg7vmoLnmgKcgPCBoaWdhbWlrb25qb3VcIDsKK+WlquS4ieaMryA8IGRhdHN1c2Fuc2hpblwgOwor6YmE54Gr5Li8IDwgdGVra2Fkb25idXJpXCA7Civoh6rnhLbnp5HlraYgPCBzaGl6ZW5rYWdha3VcIDsKK+Wkp+emj+mkhSA8IGRhaWZ1a3Vtb2NoaVwgOwor5q2m6ICF5L+u6KGMIDwgbXVzaGFzaHVneW91XCA7CivkvrXnlaXou40gPCBzaGlucnlha3VndW5cIDsKK+eUn+aIkOaWh+azlSA8IHNlaXNlaWJ1bnBvdVwgOwor5Y+N54mp6LOqIDwgaGFuYnVzc2hpdHN1XCA7Civlj7jms5XlpKfoh6MgPCBzaGlob3VkYWlqaW5cIDsKK+S4u+aEj+S4u+e+qeiAhSA8IHNodWlzaHVnaXNoYVwgOwor5Yi255CD5YqbIDwgc2Vpa3l1dXJ5b2t1XCA7CivlvqHnlKjllYbkurogPCBnb3lvdXNob3VuaW5cIDsKK+S9v+W+kuS/oeadoSA8IHNoaXRvc2hpbmpvdVwgOwor6Ki85oug54mp5Lu2IDwgc2hvdWtvYnVra2VuXCA7CivpmbjnlKPniakgPCByaWt1c2FuYnV0c3VcIDsKK+S6iOWCmeefpeitmCA8IHlvYmljaGlzaGlraVwgOwor5ZCI5ZCN5Lya56S+IDwgZ291bWVpZ2Fpc2hhXCA7CivlhbHlkIzkuIDoh7QgPCBreW91ZG91aXRjaGlcIDsKK+atpuWKm+aUv+ayuyA8IGJ1cnlva3VzZWlqaVwgOwor6LuM6YGT5L+u5q2jIDwga2lkb3VzaHV1c2VpXCA7CivovrLkvZzniakgPCBub3VzYWt1YnV0c3VcIDsKK+a5vuWyuOaIpuS6iSA8IHdhbmdhbnNlbnNvdVwgOwor5ZCI5qC856WI6aGYIDwgZ291a2FrdWtpZ2FuXCA7CivljJblrabogqXmlpkgPCBrYWdha3VoaXJ5b3VcIDsKK+ernOiIjOiYrSA8IHJ5dXV6ZXRzdXJhblwgOwor54us6KOB5Zu95a62IDwgZG9rdXNhaWtva2thXCA7CivkvY7liKnph5Hono0gPCB0ZWlyaWtpbicneXV1XCA7Civllrbmpa3nlZEgPCBlaWd5b3ViYXRha2VcIDsKK+Wcn+mhnumHkeWxniA8IGRvcnVpa2luem9rdVwgOwor6IKJ6aOf542jIDwgbmlrdXNob2t1anV1XCA7CivlhbHlkozmlL/kvZMgPCBreW91d2FzZWl0YWlcIDsKK+azleW+i+WtpiA8IGhvdXJpdHN1Z2FrdVwgOwor5rOV5bu36ZeY5LqJIDwgaG91dGVpdG91c291XCA7Civlho3nlJ/oo4Xnva4gPCBzYWlzZWlzb3VjaGlcIDsKK+aWsOeZuuaYjiA8IHNoaW5oYXRzdW1laVwgOwor5YyX5pa56aCY5ZyfIDwgaG9wcG91cnlvdWRvXCA7CivpgJfnlZnlrqIgPCB0b3VyeXV1a3lha3VcIDsKK+WFqOW7g+irluiAhSA8IHplbnBhaXJvbnNoYVwgOwor57Sv6YCy6Kqy56iOIDwgcnVpc2hpbmthemVpXCA7Civlm73pmLLkvJrorbAgPCBrb2t1Ym91a2FpZ2lcIDsKK+W+s+WztuecjCA8IHRva3VzaGltYWtlblwgOwor5LqM55m+5Y2B5pelIDwgbmloeWFrdXRvb2thXCA7CivkuovliY3pgJrloLEgPCBqaXplbnRzdXVob3VcIDsKK+ekvuS8muaEj+itmCA8IHNoYWthaWlzaGlraVwgOwor5o+05Yqp5YeN57WQIDwgZW5qb3RvdWtldHN1XCA7CivmuIXmsLTlr7ogPCBraXlvbWl6dWRlcmFcIDsKK+WuieWFqOesrOS4gCA8IGFuemVuZGFpaWNoaVwgOwor5YCL5Lq65pS75pKDIDwga29qaW5rb3VnZWtpXCA7CivmgqrmiK/lnYrkuLsgPCBpdGF6dXJhYm91enVcIDsKK+mBiuWLleWGhuacqCA8IHl1dWRvdWVuYm9rdVwgOwor5YaG5b2i5YqH5aC0IDwgZW5rZWlnZWtpam91XCA7CivnhrHlrrnph48gPCBuZXRzdXlvdXJ5b3VcIDsKK+aWh+ethualrSA8IGJ1bnBpdHN1Z3lvdVwgOwor6Iqt6JWJ5qK25pyoIDwgYmFzaG91a2FqaWtpXCA7CivohLPlh7rooYAgPCBub3VzaHVra2V0c3VcIDsKK+mcsuWHuueXhyA8IHJvc2h1dHN1c2hvdVwgOwor6auY6Laz6J+5IDwgdGFrYWFzaGlnYW5pXCA7Civmg4XloLHnp5HlraYgPCBqb3Vob3VrYWdha3VcIDsKK+engeWovOeqnyA8IHNoaXNob3VrdXRzdVwgOwor5YK35a6z5L+d6Zm6IDwgc2hvdWdhaWhva2VuXCA7CivnoLTnlKPlrqPlkYogPCBoYXNhbnNlbmtva3VcIDsKK+eZqeeXheaCo+iAhSA8IHJhaWJ5b3VrYW5qYVwgOwor6buS6Imy55mMIDwga29rdXNob2t1Z2FuXCA7Civlm6DlrZDliIbmnpAgPCBpbnNoaWJ1bnNla2lcIDsKK+iyp+ihgOeXhyA8IGhpbmtldHN1c2hvdVwgOwor6KqN6K2Y56WoIDwgbmluc2hpa2loeW91XCA7CivlvoXlkIjmlL/msrsgPCBtYWNoaWFpc2VpamlcIDsKK+acq+azleaAneaDsyA8IG1hcHBvdXNoaXNvdVwgOwor6Iiq57aa5pmC6ZaTIDwga291em9rdWppa2FuXCA7CivlsILlo7LnibnoqLEgPCBzZW5iYWl0b2treW9cIDsKK+WQjOeoruWQjOaWhyA8IGRvdXNodWRvdWJ1blwgOwor6YmE6YGT5LqL5pWFIDwgdGV0c3Vkb3VqaWtvXCA7CivnnJ/nkIbplqLmlbAgPCBzaGlucmlrYW5zdXVcIDsKK+eWq+eXheelniA8IHlha3VieW91Z2FtaVwgOwor6Zyy5Ye654uCIDwgcm9zaHV0c3VreW91XCA7CivlrZDlrZDlravlrasgPCBzaGlzaGlzb25zb25cIDsKK+WFq+S4iOWztiA8IGhhY2hpam91amltYVwgOwor6ZmN56We6KGTIDwga291c2hpbmp1dHN1XCA7Civoi7Hlm73nn7PmsrkgPCBlaWtva3VzZWtpeXVcIDsKK+S/neitt+ims+WvnyA8IGhvZ29rYW5zYXRzdVwgOwor56eY5a+G5YW15ZmoIDwgaGltaXRzdWhlaWtpXCA7Civpg7Xkvr/osq/ph5EgPCB5dXViaW5jaG9raW5cIDsKK+WTsuWtpuiAhSA8IHRldHN1Z2FrdXNoYVwgOwor5LqM6YeN5Lq65qC8IDwgbmlqdXVqaW5rYWt1XCA7Civnmb3ooaPmmI7lpoMgPCBieWFrdWVteW91aGlcIDsKK+eUn+S9k+ino+WJliA8IHNlaXRhaWthaWJvdVwgOwor54irIDwgdHN1bWVrYW5tdXJpXCA7CivlipvkuIDmna8gPCBjaGlrYXJhaXBwYWlcIDsKK+WHuuWTgeeJqSA8IHNodXBwaW5idXRzdVwgOwor56uL5aSq5a2Q56S8IDwgcml0dGFpc2hpcmVpXCA7Civlrp/pmpvllY/poYwgPCBqaXNzYWltb25kYWlcIDsKK+WFrOi7oumAn+W6piA8IGtvdXRlbnNva3Vkb1wgOwor5LiA55+z5LqM6bOlIDwgaXNzZWtpbmljaG91XCA7CivmlZnogrLoqrLnqIsgPCBreW91aWt1a2F0ZWlcIDsKK+S6uuS7o+WQjeipniA8IGppbmRhaW1laXNoaVwgOwor5qyh6YW45YyW54Kt57SgIDwgamlzYW5rYXRhbnNvXCA7CivngbDnmb3oibIgPCBrYWloYWt1c2hva3VcIDsKK+eLrOWxheWupCA8IGRva2t5b3NoaXRzdVwgOwor5YSq55Sf57WQ5amaIDwgeXV1c2Vpa2Vra29uXCA7Civlj6PpoK3oqabllY8gPCBrb3V0b3VzaGltb25cIDsKK+S6pOmAmuWuieWFqCA8IGtvdXRzdXVhbnplblwgOwor5o6l5b6F5L+CIDwgc2V0dGFpZ2FrYXJpXCA7CivkuIflubTpm6ogPCBtYW4nJ25lbicneXVraVwgOwor54uC5oOz5puyIDwga3lvdXNvdWt5b2t1XCA7Civlkozmlofoi7HoqLMgPCB3YWJ1bicnZWl5YWt1XCA7CivmnKzlrrbmnKzlhYMgPCBob25rZWhvbm1vdG9cIDsKK+ebsuebrumjm+ihjCA8IG1vdW1va3VoaWtvdVwgOwor5rue56m66KiY6YyyIDwgdGFpa3V1a2lyb2t1XCA7Civnq4vkvZPoo4Hmlq0gPCByaXR0YWlzYWlkYW5cIDsKK+WbveWGheS6i+aDhSA8IGtva3VuYWlqaWpvdVwgOwor5L6155Wl6ICFIDwgc2hpbnJ5YWt1c2hhXCA7CivmjqXop6bkuovmlYUgPCBzZXNzaG9rdWppa29cIDsKK+eUuuW9ueS6uiA8IG1hY2hpeWFrdW5pblwgOwor5Lm+54el6IWQ5py9IDwga2Fuc291ZnVreXV1XCA7CivomrDonJLnnIkgPCBnZWppZ2VqaW1heXVcIDsKK+WQiOizh+S8muekviA8IGdvdXNoaWdhaXNoYVwgOwor5b2r5Yi75YW35bqnIDwgY2hvdWtva3VndXphXCA7Civmsrvlronntq3mjIHms5UgPCBjaGlhbicnaWppaG91XCA7Civlrabnv5Llob4gPCBnYWt1c2h1dWp1a3VcIDsKK+aIuOWkluaSruW9sSA8IGtvZ2Fpc2F0c3VlaVwgOwor5b+c5oCl5L+u55CGIDwgb3VreXV1c2h1dXJpXCA7CivpurvphZTms6jlsIQgPCBtYXN1aWNodXVzaGFcIDsKK+acq+err+S+oeagvCA8IG1hdHRhbmtha2FrdVwgOwor5YG25YOP5bSH5oudIDwgZ3V1em91c3V1aGFpXCA7Civmma7pgJrliJfou4ogPCBmdXRzdXVyZXNzaGFcIDsKK+aWsOeZuuWjsiA8IHNoaW5oYXRzdWJhaVwgOwor5ZKM5bmz5Lqk5riJIDwgd2FoZWlrb3VzaG91XCA7Civnq7bkuonlipsgPCBreW91c291cnlva3VcIDsKK+W+queSsOirluazlSA8IGp1bmthbnJvbnBvdVwgOwor5aSx5ZCN5rCPIDwgc2hpdHN1bWVpc2hpXCA7CivooajluqfmlbcgPCBvbW90ZXphc2hpa2lcIDsKK+mjvemjn+aaluihoyA8IGhvdXNob2t1ZGFuaVwgOwor5qmf5qKw5bel5qWtIDwga2lrYWlrb3VneW91XCA7CivnhKHpmZDpm4blkIggPCBtdWdlbnNodXVnb3VcIDsKK+W+tOeZuuS7pCA8IGNob3VoYXRzdXJlaVwgOwor5pyJ5L6h6Ki85Yi4IDwgeXV1a2FzaG91a2VuXCA7Civmh5Dpiq0gPCBmdXRva29yb3plbmlcIDsKK+S6leaIuOerr+S8muitsCA8IGlkb2JhdGFrYWlnaVwgOwor5Ymv5Y+O5YWlIDwgZnVrdXNodXVueXV1XCA7CivmgZDllp3nvaogPCBreW91a2F0c3V6YWlcIDsKK+WxiOaKmOi7uCA8IGt1c3NldHN1amlrdVwgOwor5ZCI5YiH6KKLIDwgZ2Fzc2FpYnVrdXJvXCA7Civmtojmga/pgJogPCBzaG91c29rdXRzdXVcIDsKK+e3j+e1semBuOaMmSA8IHNvdXRvdXNlbmt5b1wgOwor5qCq5Li75qipIDwga2FidW51c2hpa2VuXCA7CivkurrmsJflvbnogIUgPCBuaW5raXlha3VzaGFcIDsKK+W4guWGhemAmuipsSA8IHNoaW5haXRzdXV3YVwgOwor5Y2g5pyJ546HIDwgc2VuJyd5dXVyaXRzdVwgOwor5Y2X5Lqs6KKLIDwgbmFua2luYnVrdXJvXCA7Civpq5jpq5jmjIcgPCB0YWthdGFrYXl1YmlcIDsKK+eZveiJsuWFiSA8IGhha3VzaG9rdWtvdVwgOwor5LiA562J6Zm45aOrIDwgaXR0b3VyaWt1c2hpXCA7CivorJvlkozmnaHntIQgPCBrb3V3YWpvdXlha3VcIDsKK+W3pealremDveW4giA8IGtvdWd5b3V0b3NoaVwgOwor5Y2T5LiK6Zu76KmxIDwgdGFrdWpvdWRlbndhXCA7CivlrqLoprPkuLvnvqkgPCBreWFra2Fuc2h1Z2lcIDsKK+WFseWQjOisgOitsCA8IGt5b3Vkb3Vib3VnaVwgOwor6LO86LK357WE5ZCIIDwga291YmFpa3VtaWFpXCA7Civoq4vosqDku5XkuosgPCB1a2VvaXNoaWdvdG9cIDsKK+mLuOmuqyA8IG5va29naXJpemFtZVwgOwor6ZuH55So5aWR57SEIDwga295b3VrZWl5YWt1XCA7CivlvZPmhI/ljbPlppkgPCB0b3Vpc29rdW15b3VcIDsKK+aXpeexs+WNlCA8IG5pY2hpYmVpa3lvdVwgOwor5Yq05YON5biC5aC0IDwgcm91ZG91c2hpam91XCA7Civlo6vlrpjlrabmoKEgPCBzaGlrYW5nYWtrb3VcIDsKK+WQjeiqieS8mumVtyA8IG1laXlva2FpY2hvdVwgOwor5bqm5pWw5YiG5biD5ZuzIDwgZG9zdXVidW5wdXp1XCA7CivlsYjmipjop5IgPCBrdXNzZXRzdWtha3VcIDsKK+auuuS6uueahCA8IHNhdHN1amludGVraVwgOwor5bmz5Z2H57Wm5LiOIDwgaGVpa2lua3l1dXlvXCA7Civlt6blm6PmiYcgPCBoaWRhcml1Y2hpd2FcIDsKK+mYsuWhteWupCA8IGJvdWppbnNoaXRzdVwgOwor5bCP5L6/5bCP5YOnIDwgc2hvdWJlbmtvem91XCA7CivlnJ/ln4MgPCB0c3VjaGlib2tvcmlcIDsKK+S6uuaoqei5gui6qiA8IGppbmtlbmp1dXJpblwgOwor5Zyn57iu6YW457SgIDwgYXNzaHVrdXNhbnNvXCA7CivlkKvmnInnjocgPCBnYW4nJ3l1dXJpdHN1XCA7CivlubTmrKHloLHlkYogPCBuZW5qaWhvdWtva3VcIDsKK+iEiOaQj+aVsCA8IG15YWt1aGFrdXN1dVwgOwor6YO15L6/55Wq5Y+3IDwgeXV1YmluYmFuZ291XCA7CivmjqjpgLLlipsgPCBzdWlzaGlucnlva3VcIDsKK+iBvuahn+aVtyA8IHRzdW5ib3NhamlraVwgOwor6KiI566X5ZWP6aGMIDwga2Vpc2FubW9uZGFpXCA7Civnt4/lkIjpm5HoqowgPCBzb3Vnb3V6YXNzaGlcIDsKK+e4rue3rOeauiA8IGNoaXJpbWVuaml3YVwgOwor5Zyf5Zyw5Y+O55SoIDwgdG9jaGlzaHV1eW91XCA7CivluoPlkYrlirnmnpwgPCBrb3Vrb2t1a291a2FcIDsKK+auuuS6uueLgiA8IHNhdHN1amlua3lvdVwgOwor6Ly45Ye65YWlIDwgeXVzaHV0c3VueXV1XCA7CivlubzlhZDmlZnogrIgPCB5b3VqaWt5b3Vpa3VcIDsKK+i/keaJgOi/t+aDkSA8IGtpbmpvbWVpd2FrdVwgOwor6Kaz5a6i5bitIDwga2Fua3lha3VzZWtpXCA7CivnhKHpmZDntJrmlbAgPCBtdWdlbmt5dXVzdXVcIDsKK+S4gOWIu+WNg+mHkSA8IGlra29rdXNlbmtpblwgOwor6Zmq5a+p5Yi25bqmIDwgYmFpc2hpbnNlaWRvXCA7Civnt6jpm4bmqZ/og70gPCBoZW5zaHV1a2lub3VcIDsKK+WFiOWPlueJueaoqSA8IHNlbnNodXRva2tlblwgOwor5bCC6ZaA5YiG6YeOIDwgc2VubW9uYnVuJyd5YVwgOwor5b+EIDwgcml0c3VzaGluYmVuXCA7Civlkb3lhqXliqAgPCBpbm9jaGlteW91Z2FcIDsKK+aLheWtkOiPjOmhniA8IHRhbnNoaWtpbnJ1aVwgOwor6Zai5L+C5by35YyWIDwga2Fua2Vpa3lvdWthXCA7Civmo67mnpfmtbQgPCBzaGlucmluJyd5b2t1XCA7CivmlLvmkoPpg6jpmoogPCBrb3VnZWtpYnV0YWlcIDsKK+enmOWvhuS8muitsCA8IGhpbWl0c3VrYWlnaVwgOwor6Ieq5YuV6LuK5LqL5pWFIDwgamlkb3VzaGFqaWtvXCA7Civmtojpn7Poo4Xnva4gPCBzaG91b25zb3VjaGlcIDsKK+a6gOW3nuS6i+WkiSA8IG1hbnNodXVqaWhlblwgOwor54iG55m6566hIDwgYmFrdWhhdHN1a2FuXCA7Civos4fnlKPoqZXkvqEgPCBzaGlzYW5oeW91a2FcIDsKK+WHuueJiOioseWPryA8IHNodXBwYW5reW9rYVwgOwor6buS5YWr5LiIIDwga3Vyb2hhY2hpam91XCA7Civlm73lhoXpnIDopoEgPCBrb2t1bmFpanV5b3VcIDsKK+WNiui6q+a1tCA8IGhhbnNoaW4nJ3lva3VcIDsKK+WNg+S4h+mVt+iAhSA8IHNlbmJhbmNob3VqYVwgOwor5YyW5a2m6Kmm6aiTIDwga2FnYWt1c2hpa2VuXCA7CivntLDog57ln7nppIogPCBzYWlib3ViYWl5b3VcIDsKK+mfs+mfu+e1hOe5lCA8IG9uJydpbnNvc2hpa2lcIDsKK+W6p+aomeWkieaPmyA8IHphaHlvdWhlbmthblwgOwor5qmf5qKw5bel5a2mIDwga2lrYWlrb3VnYWt1XCA7CivnrKzkuInpg6jplbcgPCBkYWlzYW5idWNob3VcIDsKK+Wlh+WyqeaAquefsyA8IGtpZ2Fua2Fpc2VraVwgOwor6ICQ6aKo5qeL6YCgIDwgdGFpZnV1a291em91XCA7Civmmpfnt5HoibIgPCBhbnJ5b2t1c2hva3VcIDsKK+efs+m5uOW3peWgtCA8IHNla2tlbmtvdWpvdVwgOwor5Zyo6YO36LuN5Lq6IDwgemFpZ291Z3VuamluXCA7Civlub3pnIrkvJrnpL4gPCB5dXVyZWlnYWlzaGFcIDsKK+eSsOWig+egtOWjiiA8IGthbmt5b3VoYWthaVwgOwor5Zu96Zqb5Li7576pIDwga29rdXNhaXNodWdpXCA7CivlvqHnr4DmlpnnkIYgPCBvc2VjaGlyeW91cmlcIDsKK+eti+iCieeXmyA8IGtpbicnbmlrdXRzdXVcIDsKK+S/rueQhuW3peWgtCA8IHNodXVyaWtvdWpvdVwgOwor6IG36IO957WmIDwgc2hva3Vub3VreXV1XCA7CivmlrDnlJ/niakgPCBzaGluc2VpYnV0c3VcIDsKK+WHjOmchOiKsSA8IG5vdXplbmthenVyYVwgOwor6buS6Imy5bCJIDwga29rdXNoaWtpam91XCA7Civom43ooosgPCBob3RhcnVidWt1cm9cIDsKK+WBtueZuueahCA8IGd1dWhhdHN1dGVraVwgOwor5ouS5ZCm5Y+N5b+cIDwga3lvaGloYW4nJ25vdVwgOwor54m555Sj54mpIDwgdG9rdXNhbmJ1dHN1XCA7CivkuIDoqIDkuIDlj6UgPCBpY2hpZ29uJydpa2t1XCA7CivljZjni6zpo5vooYwgPCB0YW5kb2t1aGlrb3VcIDsKK+S4u+aoqeWcqOawkSA8IHNodWtlbnphaW1pblwgOwor5YyW57Kn5a6kIDwga2VzaG91c2hpdHN1XCA7Civnt4/mlK/lh7ogPCBzb3VzaGlzaHV0c3VcIDsKK+S6uuagvOS4u+e+qSA8IGppbmtha3VzaHVnaVwgOwor6Ieq5q665pyq6YGCIDwgamlzYXRzdW1pc3VpXCA7Civlh7rlrrbpgYHkuJYgPCBzaHVra2V0b25zZWlcIDsKK+WTsuWtpuabuCA8IHRldHN1Z2FrdXNob1wgOwor5Y2a54mp6aSoIDwgaGFrdWJ1dHN1a2FuXCA7CivntJDpnanppYLpo6kgPCBoaW1va2F3YXVkb25cIDsKK+aEmuawkeaUv+etliA8IGd1bWluc2Vpc2FrdVwgOwor5Y2Y56eR5aSn5a2mIDwgdGFua2FkYWlnYWt1XCA7CivpganmraPliKnmvaQgPCB0ZWtpc2VpcmlqdW5cIDsKK+eZuumfs+iomOWPtyA8IGhhdHN1b25raWdvdVwgOwor6LuN5LqL5Y2U5a6aIDwgZ3VuamlreW91dGVpXCA7CivovrLlnLDlp5Tlk6HkvJogPCBub3VjaGlpaW5rYWlcIDsKK+S7suS7i+eJqSA8IGNodXVrYWlidXRzdVwgOwor6KW/6auY5p2x5L2OIDwgc2Vpa291dG91dGVpXCA7CivmkI3ogJfkurrlk6EgPCBzb25tb3VqaW4nJ2luXCA7Civnmb3poK3pt7IgPCBoYWt1dG91d2FzaGlcIDsKK+Wun+WLouS+oeagvCA8IGppc3NlaWtha2FrdVwgOwor5o+055So6Kit6KiIIDwgZW4nJ3lvdXNla2tlaVwgOwor54++5aC05Lit57aZIDwgZ2VuYmFjaHV1a2VpXCA7CivmnIDmlrDlvI8gPCBzYWlzaGluc2hpa2lcIDsKK+Wxsei6kei6hSA8IHlhbWF0c3V0c3VqaVwgOwor5oSf55+l6KOF572uIDwga2FuY2hpc291Y2hpXCA7CivorbDmsbrmqZ/plqIgPCBnaWtldHN1a2lrYW5cIDsKK+ecgembu+WKmyA8IHNob3VkZW5yeW9rdVwgOwor5a6J5b+D56uL5ZG9IDwgYW5qaW5yeW91bWVpXCA7CivlkIjlkIzkuovmpa0gPCBnb3Vkb3VqaWd5b3VcIDsKK+WQjOacn+S/oeWPtyA8IGRvdWtpc2hpbmdvdVwgOwor5Luy6ZaT5oSP6K2YIDwgbmFrYW1haXNoaWtpXCA7CivlqpLku4vlpInmlbAgPCBiYWlrYWloZW5zdXVcIDsKK+WvkuS4reawtOazsyA8IGthbmNodXVzdWllaVwgOwor5LiA5Yy554u8IDwgaXBwaWtpb29rYW1pXCA7Civooqvkv53pmbrniakgPCBoaWhva2VuYnV0c3VcIDsKK+a2iOaBr+etiyA8IHNob3Vzb2t1c3VqaVwgOwor5oeQ57SZIDwgZnV0b2tvcm9nYW1pXCA7Civmmpfmrrrkuovku7YgPCBhbnNhdHN1amlrZW5cIDsKK+aKmOiht+S4u+e+qSA8IHNldGNodXVzaHVnaVwgOwor5Y2Y5byP57C/6KiYIDwgdGFuc2hpa2lib2tpXCA7CivmlZnppIroqrLnqIsgPCBreW91eW91a2F0ZWlcIDsKK+S4h+W5tOethiA8IG1hbicnbmVuaGl0c3VcIDsKK+S4ieiAheS8muirhyA8IHNhbnNoYWthaWRhblwgOwor6YCj6KiY5oqV56WoIDwgcmVua2l0b3VoeW91XCA7Civlv4PnkIbnirbmhYsgPCBzaGlucmlqb3V0YWlcIDsKK+S7h+WQjOawjyA8IGthdGFraWRvdXNoaVwgOwor5rW35aSW5biC5aC0IDwga2FpZ2Fpc2hpam91XCA7Civml6LmiJDkuovlrp8gPCBraXNlaWppaml0c3VcIDsKK+S6i+WLmee3j+WxgCA8IGppbXVzb3VreW9rdVwgOwor5YmN6YCy5Z+65ZywIDwgemVuc2hpbmtpY2hpXCA7CivlkIzlt6XnlbDmm7IgPCBkb3Vrb3Vpa3lva3VcIDsKK+WRvemhjOmWouaVsCA8IG1laWRhaWthbnN1dVwgOwor5YyX6KW/6Iiq6LevIDwgaG9rdXNlaWtvdXJvXCA7CivlsYDlnLDnmoQgPCBreW9rdWNoaXRla2lcIDsKK+WQiOWQjOS8muWQiCA8IGdvdWRvdWthaWdvdVwgOwor56uL5Zyw5p2h5Lu2IDwgcml0Y2hpam91a2VuXCA7CivpnanmiYvooosgPCBrYXdhdGVidWt1cm9cIDsKK+WcsOeQhuWtpuiAhSA8IGNoaXJpZ2FrdXNoYVwgOwor5aSn5omA6auY5omAIDwgdGFpc2hva291c2hvXCA7Civph43opIfkv53pmbogPCBqdXVmdWt1aG9rZW5cIDsKK+mAmuW4uOWFteWZqCA8IHRzdXVqb3VoZWlraVwgOwor5aSW5Zu96YOo6ZqKIDwgZ2Fpa29rdWJ1dGFpXCA7CivmlofljJbkuqTmtYEgPCBidW5rYWtvdXJ5dXVcIDsKK+S4g+WIhuiiliA8IHNoaWNoaWJ1c29kZVwgOwor5biC5aSW6YCa6KmxIDwgc2hpZ2FpdHN1dXdhXCA7Civmr5vntLDooYDnrqEgPCBtb3VzYWlrZWtrYW5cIDsKK+WLleaFi+e1seioiCA8IGRvdXRhaXRvdWtlaVwgOwor56S+5YaF5oOF5aCxIDwgc2hhbmFpam91aG91XCA7CivkuK3lhazmlofluqsgPCBjaHV1a291YnVua29cIDsKK+Wcp+mbu+WKueaenCA8IGF0c3VkZW5rb3VrYVwgOwor6a2R6a2F6a2N6a2OIDwgY2hpbWltb3VyeW91XCA7CivlvqrnkrDns7vntbEgPCBqdW5rYW5rZWl0b3VcIDsKK+engemBlCA8IHdhdGFzaGl0YWNoaVwgOwor5a++5Lq66Zai5L+CIDwgdGFpamlua2Fua2VpXCA7Civmma7pgJrpgbjmjJkgPCBmdXRzdXVzZW5reW9cIDsKK+W/g+mciuihkyA8IHNoaW5yZWlqdXRzdVwgOwor5p2h5Lu26ZeY5LqJIDwgam91a2VudG91c291XCA7Civmnb7nq7nmooUgPCBzaG91Y2hpa3ViYWlcIDsKK+WNg+eKtuS4h+aFiyA8IHNlbmpvdWJhbnRhaVwgOwor5qC46ZaL55m6IDwga2FrdWthaWhhdHN1XCA7CivljJbmiJDlt6Xmpa0gPCBrYXNlaWtvdWd5b3VcIDsKK+e1jOa4iOWOn+irliA8IGtlaXphaWdlbnJvblwgOwor5qip6KyA6KGT5pWwIDwga2VuYm91anVzc3V1XCA7CivkuI3mj67nmbrmgKcgPCBmdWtpaGF0c3VzZWlcIDsKK+mrmOetieWtpuagoSA8IGtvdXRvdWdha2tvdVwgOwor6YCj5ZCI546L5Zu9IDwgcmVuZ291b3Vrb2t1XCA7Civlm73pmpvoibIgPCBrb2t1c2Fpc2hva3VcIDsKK+mDteS+v+abuOewoSA8IHl1dWJpbnNob2thblwgOwor5a2Q5L6b5b+DIDwga29kb21vZ29rb3JvXCA7Civnsr7npZ7lipsgPCBzZWlzaGlucnlva3VcIDsKK+a3seisgOmBoOaFriA8IHNoaW5ib3VlbnJ5b1wgOwor5L2P5rCR6YGL5YuVIDwganV1bWluJyd1bmRvdVwgOwor5rOV5paH5a2m6YOoIDwgaG91YnVuZ2FrdWJ1XCA7Civmma7pgJrpg7Xkvr8gPCBmdXRzdXV5dXViaW5cIDsKK+WGjeeqgeWFpSA8IHNhaXRvdHN1bnl1dVwgOwor5ZCb5Li75pS/5L2TIDwga3Vuc2h1c2VpdGFpXCA7Civnmbrkv6HlsYAgPCBoYXNzaGlua3lva3VcIDsKK+Wkp+WSjOW/gyA8IHlhbWF0b2dva29yb1wgOwor5o2y5Zyf6YeN5p2lIDwga2VuZG9jaG91cmFpXCA7CivlpbPlo7DlkIjllLEgPCBqb3NlaWdhc3Nob3VcIDsKK+exs+ilv+aIpuS6iSA8IGJlaXNlaXNlbnNvdVwgOwor6auY5bqm5oiQ6ZW3IDwga291ZG9zZWljaG91XCA7Civoqr/lvovluKsgPCBjaG91cml0c3VzaGlcIDsKK+S5vuW4g+aRqeaTpiA8IGthbnB1bWFzYXRzdVwgOwor5Lit6I+v5oCd5oOzIDwgY2h1dWthc2hpc291XCA7Civovp7ogbfpoZggPCBqaXNob2t1bmVnYWlcIDsKK+i0iOS4juiovOabuCA8IHpvdXlvc2hvdXNob1wgOwor5YK15YuZ5LiN5bGl6KGMIDwgc2FpbXVmdXJpa291XCA7CivlhazooYbooZvnlJ8gPCBrb3VzaHV1ZWlzZWlcIDsKK+aJgOaJgCA8IHRva29yb2Rva29yb1wgOwor56S+5Lya56eR5a2mIDwgc2hha2Fpa2FnYWt1XCA7CivovrLoirjljJblraYgPCBub3VnZWlrYWdha3VcIDsKK+S6pOmAmuaVtOeQhiA8IGtvdXRzdXVzZWlyaVwgOwor6Kaq5a+G5oSfIDwgc2hpbm1pdHN1a2FuXCA7Civnibnmrorpg6jpmoogPCB0b2t1c2h1YnV0YWlcIDsKK+eqk+mam+aXjyA8IG1hZG9naXdhem9rdVwgOwor5LqL5a6f54Sh5qC5IDwgamlqaXRzdW11a29uXCA7CivlhpnnnJ/ooZMgPCBzaGFzaGluanV0c3VcIDsKK+WtlOmbgOWmmeeOiyA8IGt1amFrdW15b3VvdVwgOwor6LKh55Sj5YiG5LiOIDwgemFpc2FuYnVuJyd5b1wgOwor6YKm5a2X5paw6IGeIDwgaG91amlzaGluYnVuXCA7CivmqZ/li5XoqIjnlLsgPCBraWRvdWtlaWtha3VcIDsKK+i8u+WwhOeGsSA8IGZ1a3VzaGFuZXRzdVwgOwor5a2k56uL5Li7576pIDwga29yaXRzdXNodWdpXCA7Civkvpvov7DogIUgPCBreW91anV0c3VzaGFcIDsKK+aYjuayu+WkqeeahyA8IG1laWppdGVuJydub3VcIDsKK+eEpueCuei3nemboiA8IHNob3V0ZW5reW9yaVwgOwor6ZuG5ZCI5pmC6ZaTIDwgc2h1dWdvdWppa2FuXCA7CivkvY/lroXlnLDljLogPCBqdXV0YWt1Y2hpa3VcIDsKK+Wkmuinkuiyv+aYkyA8IHRha2FrdWJvdWVraVwgOwor6Z2e5Zar54WZ6ICFIDwgaGlraXRzdWVuc2hhXCA7CivmtojljJbkuI3oia8gPCBzaG91a2FmdXJ5b3VcIDsKK+elnue1jOevgCA8IHNoaW5rZWlzZXRzdVwgOwor6Iie5Y+w54Wn5piOIDwgYnV0YWlzaG91bWVpXCA7CivkuI3nlJ/nlKPnmoQgPCBmdXNlaXNhbnRla2lcIDsKK+eIhueZuuaApyA8IGJha3VoYXRzdXNlaVwgOwor6Z2e55Sf55Sj55qEIDwgaGlzZWlzYW50ZWtpXCA7Civli5/pm4bkurrlk6EgPCBib3NodXVqaW4nJ2luXCA7Civljp/nqL/nlKjntJkgPCBnZW5rb3V5b3VzaGlcIDsKK+eEoeaEj+itmOeahCA8IG11aXNoaWtpdGVraVwgOwor57eP5Y+45Luk5a6YIDwgc291c2hpcmVpa2FuXCA7CivorbLmuKHmiYDlvpcgPCBqb3V0b3Nob3Rva3VcIDsKK+WtpuerpeS/neiCsiA8IGdha3Vkb3Vob2lrdVwgOwor5pyA57WC5YW15ZmoIDwgc2Fpc2h1dWhlaWtpXCA7Civmu5HotbDou4rovKogPCBrYXNzb3VzaGFyaW5cIDsKK+aciOWIiumbkeiqjCA8IGdla2thbnphc3NoaVwgOwor5YKN6Iul54Sh5Lq6IDwgYm91amFrdWJ1amluXCA7Civlhajml6XliLYgPCB6ZW4nJ25pY2hpc2VpXCA7Civli6TlirTlpYnku5UgPCBraW5yb3Vob3VzaGlcIDsKK+aAp+iFuuaRmOmZpCA8IHNlaXNlbnRla2lqb1wgOwor5raI5q+S6JasIDwgc2hvdWRva3V5YWt1XCA7CivmhrLms5XmlLnmraMgPCBrZW5wb3VrYWlzZWlcIDsKK+ihjOi3r+eXheiAhSA8IGtvdXJvYnlvdXNoYVwgOwor5LiA5Lq66Iqd5bGFIDwgaGl0b3Jpc2hpYmFpXCA7CivlhbHlkIzpmLLooZsgPCBreW91ZG91Ym91ZWlcIDsKK+mXmOW/l+a6gOa6gCA8IHRvdXNoaW1hbm1hblwgOwor5biC5Yui6Kq/5p+7IDwgc2hpc2VpY2hvdXNhXCA7CivkvJrljq3ou5/pqqggPCBlZW4nJ25hbmtvdHN1XCA7Civou43nlKjlnLDlm7MgPCBndW4nJ3lvdWNoaXp1XCA7CivmnbHlpZTopb/otbAgPCB0b3Vob25zZWlzb3VcIDsKK+mBk+W+s+W+iyA8IGRvdXRva3VyaXRzdVwgOwor5Lqk5Luj5L2c5qWtIDwga291dGFpc2FneW91XCA7Civlm73pmLLoibIgPCBrb2t1Ym91c2hva3VcIDsKK+aXpeiomOaWh+WtpiA8IG5pa2tpYnVuZ2FrdVwgOwor57WC5pyr6KuWIDwgc2h1dW1hdHN1cm9uXCA7Civml6Xns7vnsbPkurogPCBuaWtrZWliZWlqaW5cIDsKK+Wwhui7jeiBtyA8IHNob3VndW5zaG9rdVwgOwor6Iez5YWs6Iez5bmzIDwgc2hpa291c2hpaGVpXCA7CivplqLpgKPkvJrnpL4gPCBrYW5yZW5nYWlzaGFcIDsKK+S6uuaoqeWuo+iogCA8IGppbmtlbnNlbmdlblwgOwor5Lq66YCg5Lq66ZaTIDwgamluem91bmluZ2VuXCA7Civlgr7mlpzlrrbos4MgPCBrZWlzaGF5YWNoaW5cIDsKK+iHquawkeWFmuWJhyA8IGppbWludG91c29rdVwgOwor5Y+N5b6p6KiY5Y+3IDwgaGFucHVrdWtpZ291XCA7Civml6XmnKzoiKrnqbogPCBuaXBwb25rb3VrdXVcIDsKK+iLseaJjeaVmeiCsiA8IGVpc2Fpa3lvdWlrdVwgOwor6I2J5pyI5rWBIDwgc291Z2V0c3VyeXV1XCA7CivmjpLmsLTmnaHku7YgPCBoYWlzdWlqb3VrZW5cIDsKK+iLseWbveiIquepuiA8IGVpa29rdWtvdWt1dVwgOwor5piO6LWk6ImyIDwgbWVpc2VraXNob2t1XCA7Civop6PmsbrnrZYgPCBrYWlrZXRzdXNha3VcIDsKK+WPo+WUh+ijgiA8IGtvdXNoaW5yZXRzdVwgOwor5LiD6I2J57KlIDwgbmFuYWt1c2FnYXl1XCA7CivliY3lk6jpqI7lhbUgPCB6ZW5zaG91a2loZWlcIDsKK+awtOe0oOeIhuW8viA8IHN1aXNvYmFrdWRhblwgOwor5r2F5ryR55So5rC0IDwga2FuZ2FpeW91c3VpXCA7CivllYbmpa3lraYgPCBzaG91Z3lvdWdha3VcIDsKK+W7uuioreecgSA8IGtlbnNldHN1c2hvdVwgOwor5YiG5Yil5b+DIDwgZnVuYmV0c3VzaGluXCA7Civlu7roqK3nmoQgPCBrZW5zZXRzdXRla2lcIDsKK+mHkemLuCA8IGthbmVub2tvZ2lyaVwgOwor5LqM57+75b25IDwgcnlhbmZhbicneWFrdVwgOwor5LiA5paJ5bCE5pKDIDwgaXNzZWlzaGFnZWtpXCA7CivkuIDphbjljJbngq3ntKAgPCBpc3NhbmthdGFuc29cIDsKK+Wfuui7uOmAmuiyqCA8IGtpamlrdXRzdXVrYVwgOwor5YK+5pac55Sf55SjIDwga2Vpc2hhc2Vpc2FuXCA7CivlooPnlYznkIboq5YgPCBreW91a2Fpcmlyb25cIDsKK+Wkqeeah+mZm+S4iyA8IHRlbicnbm91aGVpa2FcIDsKK+WkqeeEtuaenOaxgSA8IHRlbicnbmVua2FqdXVcIDsKK+WPo+aLjeWtkCA8IGt1Y2hpYnlvdXNoaVwgOwor6ZyK6IKJ5LiA6Ie0IDwgcmVpbmlrdWl0Y2hpXCA7Civku5jliqDkvqHlgKTnqI4gPCBmdWtha2FjaGl6ZWlcIDsKK+e1jOa4iOW+qeiIiCA8IGtlaXphaWZ1a2tvdVwgOwor5Lq65Y+j57Wx6KiIIDwgamlua291dG91a2VpXCA7CivmiKbmmYLnlKPmpa0gPCBzZW5qaXNhbmd5b3VcIDsKK+WPpOmKreWtpuiAhSA8IGtvc2VuZ2FrdXNoYVwgOwor5a++5by+6YGT5by+IDwgdGFpZGFuZG91ZGFuXCA7Civoqo3oqLzlvI8gPCBuaW5zaG91c2hpa2lcIDsKK+ijvemAoOeVquWPtyA8IHNlaXpvdWJhbmdvdVwgOwor57eP5ous55qEIDwgc291a2F0c3V0ZWtpXCA7CivlpJrph43kurrmoLwgPCB0YWp1dWppbmtha3VcIDsKK+S4gOWIgOS4oeaWrSA8IGl0dG91cnlvdWRhblwgOwor5omY6Ymi5YOnIDwgdGFrdWhhdHN1em91XCA7CivlhbHnlKPkuLvnvqkgPCBreW91c2Fuc2h1Z2lcIDsKK+iomOWQjeaKleelqCA8IGtpbWVpdG91aHlvdVwgOwor5ZWG5qWt5Zu9IDwgc2hvdWd5b3Vrb2t1XCA7Civku7Lkurrlj6MgPCBuYWtvdWRvZ3VjaGlcIDsKK+ahnOWJjee3miA8IHNha3VyYXplbnNlblwgOwor5LyR5oap5pmC6ZaTIDwga3l1dWtlaWppa2FuXCA7CivkuLjlpKrotrPloLQgPCBtYXJ1dGFhc2hpYmFcIDsKK+ahg+iJsumBiuaIryA8IG1vbW9pcm95dXVnaVwgOwor5q2m5aOr6ZqO57SaIDwgYnVzaGlrYWlreXV1XCA7CivluLjnva7lp5Tlk6HkvJogPCBqb3VjaGlpaW5rYWlcIDsKK+Wbvemam+mbu+ipsSA8IGtva3VzYWlkZW53YVwgOwor5Lq65bel5Zyw6ZyHIDwgamlua291amlzaGluXCA7CivmvZzlnKjkuLvmqKkgPCBzZW56YWlzaHVrZW5cIDsKK+mBjuWwj+ipleS+oSA8IGthc2hvdWh5b3VrYVwgOwor56+E55aH6YOo6ZaAIDwgaGFuY2h1dWJ1bW9uXCA7Civkv67pgZPliLbluqYgPCBzaHV1ZG91c2VpZG9cIDsKK+e1seiqnuevhOeWhyA8IHRvdWdvaGFuY2h1dVwgOwor6KGb55Sf6Kit5YKZIDwgZWlzZWlzZXRzdWJpXCA7CivkuIDmrKHnlKPlk4EgPCBpY2hpamlzYW5waW5cIDsKK+W8t+WItuWKmyA8IGt5b3VzZWlyeW9rdVwgOwor5YWs5piO5q2j5aSnIDwga291bWVpc2VpZGFpXCA7Civlv4Xoqq3mm7ggPCBoaXRzdWRva3VzaG9cIDsKK+iKseeBq+e3mummmSA8IGhhbmFiaXNlbmtvdVwgOwor5Zyn5Yqb6KiIIDwgYXRzdXJ5b2t1a2VpXCA7CivoiLbnlKjmqZ/plqIgPCBoYWt1eW91a2lrYW5cIDsKK+maj+ethumbhiA8IHp1aWhpdHN1c2h1dVwgOwor5YWs5rCR5qip5rOVIDwga291bWlua2VuaG91XCA7CivnjKvnm67nn7MgPCBuZWtvbW9rdXNla2lcIDsKK+WLieW8t+acuiA8IGJlbmt5b3V6dWt1ZVwgOwor5piP552h54q25oWLIDwga29uc3Vpam91dGFpXCA7Civlr77lkJHou4rnt5ogPCB0YWlrb3VzaGFzZW5cIDsKK+mJhOaLs+WItuijgSA8IHRla2tlbnNlaXNhaVwgOwor5qGC5Yag6Kmp5Lq6IDwga2Vpa2Fuc2hpamluXCA7Civkurrlj6Poqr/mn7sgPCBqaW5rb3VjaG91c2FcIDsKK+WPuOazleino+WJliA8IHNoaWhvdWthaWJvdVwgOwor5Lq65Y+j6Z2Z5oWLIDwgamlua291c2VpdGFpXCA7CivmnInkvZPli5XnlKMgPCB5dXV0YWlkb3VzYW5cIDsKK+aOoeeUqOippumokyA8IHNhaXlvdXNoaWtlblwgOwor55m9546J5qW8IDwgaGFrdWd5b2t1cm91XCA7CivmsJfosaHmg4XloLEgPCBraXNob3Vqb3Vob3VcIDsKK+aciee3muaUvumAgSA8IHl1dXNlbmhvdXNvdVwgOwor6ZaL6YCa5byPIDwga2FpdHN1dXNoaWtpXCA7CivmiK/kuosgPCB0YXdhbXVyZWdvdG9cIDsKK+WWgOeXsOaknOafuyA8IGtha3V0YW5rZW5zYVwgOwor6YO35Zyf5paZ55CGIDwga3lvdWRvcnlvdXJpXCA7CivkuInmrrXoq5bms5UgPCBzYW5kYW5yb25wb3VcIDsKK+ilv+WNiueQgyA8IG5pc2hpaGFua3l1dVwgOwor5pmC5Luj57K+56WeIDwgamlkYWlzZWlzaGluXCA7CivoqoflpKfluoPlkYogPCBrb2RhaWtvdWtva3VcIDsKK+mDveW4guioiOeUuyA8IHRvc2hpa2Vpa2FrdVwgOwor6Zai5p2x5LiA5YaGIDwga2FudG91aWNoaWVuXCA7Civoh6rnhLbnmbrnlJ8gPCBzaGl6ZW5oYXNzZWlcIDsKK+WVhOacqOmzpSA8IHRha3Vib2t1Y2hvdVwgOwor5Y2Y5LiA5b2iIDwgdGFuJydpY2hpZ2F0YVwgOwor5qy95a6a5oay5rOVIDwga2ludGVpa2VucG91XCA7Civlv4XnhLbnmoQgPCBoaXRzdXplbnRla2lcIDsKK+aVsOWApOWItuW+oSA8IHN1dWNoaXNlaWd5b1wgOwor5q2m6ICF5Lq65b2iIDwgbXVzaGFuaW5neW91XCA7CivliIblkajlm57ot68gPCBidW5zaHV1a2Fpcm9cIDsKK+W4guawkeWkp+S8miA8IHNoaW1pbnRhaWthaVwgOwor6LWk5a2X5Zu95YK1IDwgYWthamlrb2t1c2FpXCA7Civkvb/nlKjmlrnms5UgPCBzaGl5b3Vob3Vob3VcIDsKK+awtOift+iegiA8IG1penVrYW1ha2lyaVwgOwor5bCP5pil5pel5ZKMIDwga29oYXJ1Yml5b3JpXCA7CivmmJ/mnIjlpJwgPCBob3NoaWR6dWt1eW9cIDsKK+e4nue5lOeJqSA8IHNoaW1hb3JpbW9ub1wgOwor5YWs5byP6Kmm5ZCIIDwga291c2hpa2lqaWFpXCA7CivnhaflsITlh6bnkIYgPCBzaG91c2hhc2hvcmlcIDsKK+W7uuiorealrSA8IGtlbnNldHN1Z3lvdVwgOwor5Y+C5Yuk5Lqk5pu/IDwgc2Fua2lua291dGFpXCA7CivnvorpoK3ni5fogokgPCB5b3V0b3VrdW5pa3VcIDsKK+aWoeaXi+alreiAhSA8IGFzc2VuZ3lvdXNoYVwgOwor5Lya56S+5qaC6KaBIDwga2Fpc2hhZ2FpeW91XCA7CivllYbkurrooZcgPCBzaG91bmlubWFjaGlcIDsKK+S4gOW5leeJqSA8IGhpdG9tYWt1bW9ub1wgOwor5rCR5Li75pS/5L2TIDwgbWluc2h1c2VpdGFpXCA7CivnspfmlL7ovrLmpa0gPCBzb2hvdW5vdWd5b3VcIDsKK+iyoeWLmeiruOihqCA8IHphaW11c2hvaHlvdVwgOwor6JqK5Y+W57ea6aaZIDwga2F0b3Jpc2Vua291XCA7CivluoPloLHmg4XloLEgPCBrb3Vob3Vqb3Vob3VcIDsKK+e3iuaApeS6i+aFiyA8IGtpbmt5dXVqaXRhaVwgOwor5Z2H6KGh5L6h5qC8IDwga2lua291a2FrYWt1XCA7Civlhazlronlp5Tlk6HkvJogPCBrb3VhbicnaWlua2FpXCA7CivlraPnr4DlpInnlbAgPCBraXNldHN1aGVuJydpXCA7CivmnInmhJ/lnLDpnIcgPCB5dXVrYW5qaXNoaW5cIDsKK+e3qeWSjOaMr+WLlSA8IGthbndhc2hpbmRvdVwgOwor5bm96ZyK5Lq65Y+jIDwgeXV1cmVpamlua291XCA7CivntbHoqp7mjIfmqJkgPCB0b3Vnb3NoaWh5b3VcIDsKK+acgOmrmOS+oeagvCA8IHNhaWtvdWtha2FrdVwgOwor55m+5Lq65YqbIDwgaHlha3VuaW5yaWtpXCA7CivphbjmgKfnmb3lnJ8gPCBzYW5zZWloYWt1ZG9cIDsKK+awkeaXj+iho+ijhSA8IG1pbnpva3Vpc2hvdVwgOwor5L6b6L+w5pu4IDwga3lvdWp1dHN1c2hvXCA7CivpnZ7llrbliKnkuovmpa0gPCBoaWVpcmlqaWd5b3VcIDsKK+Wun+alreeVjCA8IGppdHN1Z3lvdWthaVwgOwor5L+u5aOr6Kqy56iLIDwgc2h1dXNoaWthdGVpXCA7CivooYzlubPpjYsgPCB5dWtpaGlyYW5hYmVcIDsKK+WFrOebiuazleS6uiA8IGtvdWVraWhvdWppblwgOwor5q205Y+y5Li7576pIDwgcmVraXNoaXNodWdpXCA7CivlvIHmhbbmoLzlrZAgPCBiZW5rZWlnb3VzaGlcIDsKK+esrOS6jOS6uuensCA8IGRhaW5pbmluc2hvdVwgOwor5LiL5rWB56S+5LyaIDwga2FyeXV1c2hha2FpXCA7Civlv6vmpb3kuLvnvqkgPCBrYWlyYWt1c2h1Z2lcIDsKK+iQveaIkOW8jyA8IHJha3VzZWlzaGlraVwgOwor5p+z5bed6Y2LIDwgeWFuYWdhd2FuYWJlXCA7CivoiKrntprlipsgPCBrb3V6b2t1cnlva3VcIDsKK+WItumZkOmAn+W6piA8IHNlaWdlbnNva3Vkb1wgOwor5paH5q2m5Lih6YGTIDwgYnVuYnVyeW91ZG91XCA7CivkuIrmmIfpmZDluqYgPCBqb3VzaG91Z2VuZG9cIDsKK+S9nOeUqOepjeWIhiA8IHNheW91c2VraWJ1blwgOwor55u05o6l6LK7IDwgY2hva3VzZXRzdWhpXCA7CivohbnnrYvpgYvli5UgPCBmdWtraW4nJ3VuZG91XCA7Civlhazoqo3oqJjpjLIgPCBrb3VuaW5raXJva3VcIDsKK+WxseaiqOecjCA8IHlhbWFuYXNoaWtlblwgOwor5LiA57ay5omT5bC9IDwgaWNoaW1vdWRhamluXCA7Civmo5fmpLDlrZAgPCBuYXRzdW1leWFzaGlcIDsKK+WtpuagoeeUqOWTgSA8IGdha2tvdXlvdWhpblwgOwor5L2P5a6F5omL5b2TIDwganV1dGFrdXRlYXRlXCA7Civoqo3nn6Xnp5HlraYgPCBuaW5jaGlrYWdha3VcIDsKK+WVhuWjsumBk+WFtyA8IHNob3ViYWlkb3VndVwgOwor5Yi65r+A54mpIDwgc2hpZ2VraWJ1dHN1XCA7Civljp/lrZDmiKbkuokgPCBnZW5zaGlzZW5zb3VcIDsKK+a8q+mBiuWuoiA8IG1hbicneXV1a3lha3VcIDsKK+S6jOmHjeeEpueCuSA8IG5panV1c2hvdXRlblwgOwor55Om54WO6aSFIDwga2F3YXJhc2VuYmVpXCA7Civlm7Pmm7jppKjplbcgPCB0b3Nob2thbmNob3VcIDsKK+WcqOW6q+iqv+aVtCA8IHphaWtvY2hvdXNlaVwgOwor5a++5pWw6Zai5pWwIDwgdGFpc3V1a2Fuc3V1XCA7CivopqrlrZDkuLwgPCBveWFrb2RvbmJ1cmlcIDsKK+aUv+aVmeS4gOiHtCA8IHNlaWt5b3VpdGNoaVwgOwor5paH6Iq45om56KmVIDwgYnVuZ2VpaGloeW91XCA7Civnt5rlvaLku6PmlbAgPCBzZW5rZWlkYWlzdXVcIDsKK+mAo+WQiOaUv+aoqSA8IHJlbmdvdXNlaWtlblwgOwor6aC85q+N5a2Q6KybIDwgdGFub21vc2hpa291XCA7CivlnKjpn5PnsbPou40gPCB6YWlrYW5iZWlndW5cIDsKK+iRl+i/sOalrSA8IGNob2p1dHN1Z3lvdVwgOwor5LiA5aSc5Lme6aOfIDwgaWNoaXlha29qaWtpXCA7CivnlbDluLjntYLkuoYgPCBpam91c2h1dXJ5b3VcIDsKK+WTgeW9oiA8IHNoaW5ha2F0YWNoaVwgOwor6Kmm6aiT5Zyw542EIDwgc2hpa2Vuamlnb2t1XCA7CivnpL7lk6HmlZnogrIgPCBzaGFpbmt5b3Vpa3VcIDsKK+iSvOeZveiJsiA8IHNvdWhha3VzaG9rdVwgOwor5LyB5qWt5bm06YeRIDwga2lneW91bmVua2luXCA7CivkuZ7po5/moLnmgKcgPCBrb2ppa2lrb25qb3VcIDsKK+S8gealreWQiOWQjCA8IGtpZ3lvdWdvdWRvdVwgOwor6Ieq5Li75oyH6YedIDwgamlzaHVzaGlzaGluXCA7CivmhJ/mhajnhKHph48gPCBrYW5nYWltdXJ5b3VcIDsKK+S4g+i+uuW9oiA8IHNoaWNoaWhlbmtlaVwgOwor5pW15oCn5Zu95a62IDwgdGVraXNlaWtva2thXCA7CivnrYnlt67ntJrmlbAgPCB0b3VzYWt5dXVzdXVcIDsKK+W5tOacq+i/hCA8IG5lbm1hdHN1bWFkZVwgOwor5bir56+E5a2m5qChIDwgc2hpaGFuZ2Fra291XCA7CivntYzmuIjnpL7kvJogPCBrZWl6YWlzaGFrYWlcIDsKK+aUueiJr+S4u+e+qSA8IGthaXJ5b3VzaHVnaVwgOwor57WM5riI5Yi26KOBIDwga2VpemFpc2Vpc2FpXCA7CivkuLvmiKbmipXmiYsgPCBzaHVzZW50b3VzaHVcIDsKK+WjsuaYpeWuvyA8IGJhaXNodW4nJ3lhZG9cIDsKK+mBiuaSg+maiuWToSA8IHl1dWdla2l0YWlpblwgOwor5LiA5pmC5biw5LyRIDwgaWNoaWppa2lreXV1XCA7Civos6rngrnns7sgPCBzaGl0c3V0ZW5rZWlcIDsKK+WPl+ebiuiovOWIuCA8IGp1ZWtpc2hvdWtlblwgOwor5b6h5Ly96KmxIDwgb3RvZ2liYW5hc2hpXCA7Civmi5npgJ/kuLvnvqkgPCBzZXNzb2t1c2h1Z2lcIDsKK+acqumWi+aLk+WcsCA8IG1pa2FpdGFrdWNoaVwgOwor5YWo5qip5YWs5L2/IDwgemVua2Vua291c2hpXCA7CivntbHliLbntYzmuIggPCB0b3VzZWlrZWl6YWlcIDsKK+eUsOWckumiqOaZryA8IGRlbicnZW5mdXVrZWlcIDsKK+aXheihjOaXpeeoiyA8IHJ5b2tvdW5pdHRlaVwgOwor5pON5qWt546HIDwgc291Z3lvdXJpdHN1XCA7CivnhKHph4/lpKfmlbAgPCBtdXJ5b3VkYWlzdXVcIDsKK+WJsuW8leatqeWQiCA8IHdhcmliaWtpYnVhaVwgOwor5Y+N5qC46YGL5YuVIDwgaGFua2FrdXVuZG91XCA7CivmnpXlsY/poqggPCBtYWt1cmFieW91YnVcIDsKK+ihgOa2suWtpiA8IGtldHN1ZWtpZ2FrdVwgOwor6aaZ5riv6L+U6YKEIDwgaG9ua29uaGVua2FuXCA7CivkvIHmpa3lkIjkvbUgPCBraWd5b3VnYXBwZWlcIDsKK+mdnuihjOWwkeW5tCA8IGhpa291c2hvdW5lblwgOwor5Z+6552j5pWZIDwga2lyaXN1dG9reW91XCA7Civph47lpJbmkq7lvbEgPCB5YWdhaXNhdHN1ZWlcIDsKK+m8oOiKseeBqyA8IG5lenVtaWhhbmFiaVwgOwor5Y2D5omL6Kaz6Z+zIDwgc2VuanVrYW4nJ25vblwgOwor57K+56We5Li7576pIDwgc2Vpc2hpbnNodWdpXCA7CivntYLlp4vkuIDosqsgPCBzaHV1c2hpaWtrYW5cIDsKK+aNleeJqeW4syA8IHRvcmltb25vY2hvdVwgOwor55yM5rCR5Lya6aSoIDwga2VubWlua2Fpa2FuXCA7CivmlZnmnaHkuLvnvqkgPCBreW91am91c2h1Z2lcIDsKK+abtOeUn+S8muekviA8IGtvdXNlaWdhaXNoYVwgOwor57mK57at5bel5qWtIDwgc2VuJydpa291Z3lvdVwgOwor5Lq66ZaT5ZCM5aOrIDwgbmluZ2VuZG91c2hpXCA7Civosq/olLXlrqQgPCBjaG96b3VzaGl0c3VcIDsKK+WLmOWQiOiyv+aYkyA8IGthbmdvdWJvdWVraVwgOwor55m+5a625LqJ6bO0IDwgaHlha2thc291bWVpXCA7CivkuJbnlYzmlL/nrZYgPCBzZWthaXNlaXNha3VcIDsKK+W8lOWVj+WuoiA8IGNob3Vtb25reWFrdVwgOwor5a625bGL5Y+w5bizIDwga2Fva3VkYWljaG91XCA7CivmnbHmtbfpgZPnt5ogPCB0b3VrYWlkb3VzZW5cIDsKK+mBuuWkseeJqSA8IGlzaGl0c3VidXRzdVwgOwor5YuV6ISI6KGAIDwgZG91bXlha2tldHN1XCA7CivpgY7lvZPnq7bkuokgPCBrYXRvdWt5b3Vzb3VcIDsKK+a2suS9k+eqkue0oCA8IGVraXRhaWNoaXNzb1wgOwor5bmz5ZKM5Y2U5a6aIDwgaGVpd2FreW91dGVpXCA7CivnhKHnt5rpm7vkv6EgPCBtdXNlbmRlbnNoaW5cIDsKK+WFpeWgtOW8jyA8IG55dXVqb3VzaGlraVwgOwor57Sw6IOe6LOqIDwgc2FpYm91c2hpdHN1XCA7CivlsILploDnlKjoqp4gPCBzZW5tb24nJ3lvdWdvXCA7CivkurrpgKDogqXmlpkgPCBqaW56b3VoaXJ5b3VcIDsKK+Wkp+egsuS4iemWgCA8IHRhaWhvdXNhbm1vblwgOwor5a6f6aiT6KOF572uIDwgamlra2Vuc291Y2hpXCA7CivooYDmtrLlnosgPCBrZXRzdWVraWdhdGFcIDsKK+S4reWkruWKtOWDjSA8IGNodXVvdXJvdWRvdVwgOwor5YaF57ea55Wq5Y+3IDwgbmFpc2VuYmFuZ291XCA7CivkvJ3oqJjkvZzogIUgPCBkZW5raXNha3VzaGFcIDsKK+S6uuawkeWFrOekviA8IGppbm1pbmtvdXNoYVwgOwor6YCj57Wh5YiH56ymIDwgcmVucmFrdWtpcHB1XCA7CivmqJnorZjnga8gPCBoeW91c2hpa2l0b3VcIDsKK+e1jOWWtuWQiOeQhuWMliA8IGtlaWVpZ291cmlrYVwgOwor5YWx5ZCM5aKT5ZywIDwga3lvdWRvdWJvY2hpXCA7Civlrp/mhYvoqr/mn7sgPCBqaXR0YWljaG91c2FcIDsKK+e3j+WLmemVt+WumCA8IHNvdW11Y2hvdWthblwgOwor5re35Lmx54q25oWLIDwga29ucmFuam91dGFpXCA7Civli6Lou4ogPCBoYXp1bWlndXJ1bWFcIDsKK+WTgOWTiSA8IGthbmFzaGlpa2FuYVwgOwor5YyF5ous55qEIDwgaG91a2F0c3V0ZWtpXCA7CivliofkuK3liocgPCBnZWtpY2h1dWdla2lcIDsKK+WutuaXj+aEj+itmCA8IGthem9rdWlzaGlraVwgOwor5aSW5p+U5YaF5YmbIDwgZ2FpanV1bmFpZ291XCA7CivoqKrllY/osqnlo7IgPCBob3Vtb25oYW5iYWlcIDsKK+Wun+eUqOeahCA8IGppdHN1eW91dGVraVwgOwor5L6N5YWr6aiOIDwgc2FtdXJhaWhha2tpXCA7CivkuK3plpPoibIgPCBjaHV1a2Fuc2hva3VcIDsKK+aOkuaWpemBi+WLlSA8IGhhaXNla2l1bmRvdVwgOwor6ZaL6IW56KGTIDwga2FpZnVrdWp1dHN1XCA7Civljp/lrZDlvL7poK0gPCBnZW5zaGlkYW50b3VcIDsKK+ebtOaSg+W8viA8IGNob2t1Z2VraWRhblwgOwor5Za25qWt5qGI5YaFIDwgZWlneW91YW4nJ25haVwgOwor5aSp5paH6Iiq5rOVIDwgdGVubW9ua291aG91XCA7CivpnZ7lrp/pmpvnmoQgPCBoaWppc3NhaXRla2lcIDsKK+ijj+abuOitsua4oSA8IHVyYWdha2lqb3V0b1wgOwor5Ymv55Sj54mpIDwgZnVrdXNhbmJ1dHN1XCA7Civlkb3kuK3njocgPCBtZWljaHV1cml0c3VcIDsKK+ihgOWPi+eXhSA8IGtldHN1eXV1YnlvdVwgOwor6Zai5L+C5pu46aGeIDwga2Fua2Vpc2hvcnVpXCA7CivlhY3oqLHnmobkvJ0gPCBtZW5reW9rYWlkZW5cIDsKK+Wbnui7ouertuaKgCA8IGthaXRlbmt5b3VnaVwgOwor57WM5riI5rC05Z+fIDwga2VpemFpc3VpaWtpXCA7CivnhKHmrLLmgazmt6EgPCBtdXlva3V0ZW50YW5cIDsKK+iHquaIkeWun+ePviA8IGppZ2FqaXRzdWdlblwgOwor5Z+36KGM54y25LqIIDwgc2hpa2tvdXl1dXlvXCA7Civono3pgJrmiYvlvaIgPCB5dXV6dXV0ZWdhdGFcIDsKK+WOmueUn+W5tOmHkSA8IGtvdXNlaW5lbmtpblwgOwor6Zmi5YaF5oSf5p+TIDwgaW4nJ25haWthbnNlblwgOwor5oKq5oCn5rC06IWrIDwgYWt1c2Vpc3Vpc2h1XCA7Civlm6PljYHpg47kuIggPCBkYW5qdXVyb3Vqb3VcIDsKK+eyvueZveeOhyA8IHNlaWhha3VyaXRzdVwgOwor5Lul5b+D5Lyd5b+DIDwgaXNoaW5kZW5zaGluXCA7CivkuIDlrZfljYPph5EgPCBpY2hpamlzZW5raW5cIDsKK+alree4vuaCquWMliA8IGd5b3VzZWtpYWtrYVwgOwor5YW15Zmo5ouh5pWjIDwgaGVpa2lrYWt1c2FuXCA7CivkuqTlj4vplqLkv4IgPCBrb3V5dXVrYW5rZWlcIDsKK+Wbvemam+aUv+ayuyA8IGtva3VzYWlzZWlqaVwgOwor5Z2H6LOq5oCnIDwga2luc2hpdHN1c2VpXCA7Civmm7jpnaLlr6nnkIYgPCBzaG9tZW5zaGlucmlcIDsKK+S6uumWk+ekvuS8miA8IG5pbmdlbnNoYWthaVwgOwor6LuN5Zu95Li7576pIDwgZ3Vua29rdXNodWdpXCA7CivmsLTkuIrnq7bmioAgPCBzdWlqb3VreW91Z2lcIDsKK+ays+WOn+S5numjnyA8IGthd2FyYWtvamlraVwgOwor5oi457GN5L+CIDwga29zZWtpZ2FrYXJpXCA7Civkuozph43mkq7lvbEgPCBuaWp1dXNhdHN1ZWlcIDsKK+e1tuWvvuipleS+oSA8IHpldHRhaWh5b3VrYVwgOwor5Zyo57Gz6YKm5Lq6IDwgemFpYmVpaG91amluXCA7Civlm5vmnIjppqzpub8gPCBzaGlnYXRzdWJha2FcIDsKK+aWsOmAsuawl+mLrSA8IHNoaW5zaGlua2llaVwgOwor5omA5b6X5o6n6ZmkIDwgc2hvdG9rdWtvdWpvXCA7CivplqLkv4LkvJrnpL4gPCBrYW5rZWlnYWlzaGFcIDsKK+iHquS/oea6gOa6gCA8IGppc2hpbm1hbm1hblwgOwor5pel5pys5a2m6ICFIDwgbmlob25nYWt1c2hhXCA7CivmjqXlrqLmpa0gPCBzZWtreWFrdWd5b3VcIDsKK+aYpeaXpeWkp+ekviA8IGthc3VnYXRhaXNoYVwgOwor5rC055uDIDwgbWl6dXNha2F6dWtpXCA7CivmlofmmI7npL7kvJogPCBidW5tZWlzaGFrYWlcIDsKK+iThOiGv+eXhyA8IGNoaWt1bm91c2hvdVwgOwor5ZCM5Lq66ZuR6KqMIDwgZG91amluemFzc2hpXCA7CivoirHlvaLmoKogPCBoYW5hZ2F0YWthYnVcIDsKK+WPuOazleijgeWIpCA8IHNoaWhvdXNhaWJhblwgOwor5Lq65L2T5a6f6aiTIDwgamludGFpamlra2VuXCA7CivkuqHlkb3mlL/mqKkgPCBib3VtZWlzZWlrZW5cIDsKK+aMr+WHuuS6uiA8IGZ1cmlkYXNoaW5pblwgOwor5Luy6ZaT5ZCM5aOrIDwgbmFrYW1hZG91c2hpXCA7CivntYzllrblt6XlraYgPCBrZWllaWtvdWdha3VcIDsKK+W8geitt+S+nemgvOS6uiA8IGJlbmdvaXJhaW5pblwgOwor6LOb5ZCm5Lih6KuWIDwgc2FucGlyeW91cm9uXCA7CivkuI3ms5Xpm4bkvJogPCBmdWhvdXNodXVrYWlcIDsKK+ecvOmrmOaJi+S9jiA8IGdhbmtvdXNodXRlaVwgOwor56aB5qyy55qEIDwga2luJyd5b2t1dGVraVwgOwor6Ieq5YuV5bCP6YqDIDwgamlkb3VzaG91anV1XCA7CivlnLDln5/npL7kvJogPCBjaGlpa2lzaGFrYWlcIDsKK+S6pOa1geS6uuS6iyA8IGtvdXJ5dXVqaW5qaVwgOwor54m55q6K5Yq55p6cIDwgdG9rdXNodWtvdWthXCA7CivkuIDliIbliKUgPCBoaXRvZnVuYmV0c3VcIDsKK+iHquWutuS4reavkiA8IGppa2FjaHV1ZG9rdVwgOwor5Lq65rCX55Wq57WEIDwgbmlua2liYW5ndW1pXCA7CivmlbXmnKzkuLvnvqkgPCB0ZWtpaG9uc2h1Z2lcIDsKK+WPo+WGheaAp+S6pCA8IGtvdW5haXNlaWtvdVwgOwor6ISz6Luf5YyW55eHIDwgbm91bmFua2FzaG91XCA7CivljYrni6znq4sgPCBoYW5kb2t1cml0c3VcIDsKK+ePvuWcsOazleS6uiA8IGdlbmNoaWhvdWppblwgOwor6Ieq5YuV6LuK5rOlIDwgamlkb3VzaGFkb3JvXCA7CivkuIDmmYLlgZzmraIgPCBpY2hpaml0ZWlzaGlcIDsKK+WtpuWckue0m+S6iSA8IGdha3VlbmZ1bnNvdVwgOwor5pyA6auY5a2m5bqcIDwgc2Fpa291Z2FrdWZ1XCA7Civkv53pmbrlpZHntIQgPCBob2tlbmtlaXlha3VcIDsKK+Wls+aAp+W3ruWIpSA8IGpvc2Vpc2FiZXRzdVwgOwor5YWQ56ul56aP56WJIDwgamlkb3VmdWt1c2hpXCA7Civln7fli5nkuK0gPCBzaGl0c3VtdWNodXVcIDsKK+ippumok+WVj+mhjCA8IHNoaWtlbm1vbmRhaVwgOwor5ry46YCy5Li7576pIDwgemVuc2hpbnNodWdpXCA7Civpn7Pkv6HkuI3pgJogPCBvbnNoaW5mdXRzdXVcIDsKK+WLh+W+gOmCgemAsiA8IHl1dW91bWFpc2hpblwgOwor6Z2Z5q2i54q25oWLIDwgc2Vpc2hpam91dGFpXCA7CivljJfmlK/kuovlpIkgPCBob2t1c2hpamloZW5cIDsKK+WvuOWAn+ipkOasuiA8IHN1bnNoYWt1c2FnaVwgOwor5oyH5ZCN6YCa6KmxIDwgc2hpbWVpdHN1dXdhXCA7Civoi6blv4Pmg6jmhrogPCBrdXNoaW5zYW50YW5cIDsKK+eJveW8t+S7mOS8miA8IGtlbmt5b3VmdWthaVwgOwor5a+S5Ya35YmN57eaIDwga2FucmVpemVuc2VuXCA7CivliKnku5bkuLvnvqnogIUgPCByaXRhc2h1Z2lzaGFcIDsKK+imquaXpea0viA8IHNoaW4nJ25pY2hpaGFcIDsKK+mAn+W6puWItumZkCA8IHNva3Vkb3NlaWdlblwgOwor5Zub6YOo5ZCI5ZSxIDwgc2hpYnVnYXNzaG91XCA7Civpm7vpm7vlhaznpL4gPCBkZW5kZW5rb3VzaGFcIDsKK+emj+WztuecjCA8IGZ1a3VzaGltYWtlblwgOwor6Kq/6Imy5p2/IDwgY2hvdXNob2t1YmFuXCA7CivlhKrli53lgJnoo5wgPCB5dXVzaG91a291aG9cIDsKK+WPi+WlvemWouS/giA8IHl1dWtvdWthbmtlaVwgOwor5pWR5o+054mp6LOHIDwga3l1dWVuYnVzc2hpXCA7Civliarlrprpi48gPCBzZW50ZWliYXNhbWlcIDsKK+e3kem7hOiJsiA8IHJ5b2t1b3VzaG9rdVwgOwor5YyF57SZIDwgdHN1dHN1bWlnYW1pXCA7CivkuIvlsYvmlbcgPCBzaGltb3lhc2hpa2lcIDsKK+elnuekvuS7j+mWoyA8IGppbmphYnVra2FrdVwgOwor6LuK55So5ZOBIDwga3VydW1heW91aGluXCA7CivogJDkuYXlipsgPCB0YWlreXV1cnlva3VcIDsKK+awtOW5s+aAneiAgyA8IHN1aWhlaXNoaWtvdVwgOwor6Z+z5oSf5pWZ6IKyIDwgb25rYW5reW91aWt1XCA7Civlr53lj7DomasgPCBzaGluZGFpbXVzaGlcIDsKK+WXnOiZkOeahCA8IHNoaWd5YWt1dGVraVwgOwor5rue57SN5Yem5YiGIDwgdGFpbm91c2hvYnVuXCA7CivkuK3ntpnlsYAgPCBjaHV1a2Vpa3lva3VcIDsKK+WFseWQjOe1jOWWtiA8IGt5b3Vkb3VrZWllaVwgOwor6ZW35bqD6IiMIDwgY2hvdWtvdXpldHN1XCA7Civkuozlha3mmYLkuK0gPCBuaXJva3VqaWNodXVcIDsKK+S4gOaZguiznOmHkSA8IGljaGlqaXNoaWtpblwgOwor6Ieq54S25bSH5oudIDwgc2hpemVuc3V1aGFpXCA7Civlr6norbDmnKrkuoYgPCBzaGluZ2ltaXJ5b3VcIDsKK+mkiuWtkOe4gee1hCA8IHlvdXNoaWVuZ3VtaVwgOwor5pel5rKh5b6MIDwgbmljaGlib3RzdWdvXCA7CivmsI/ml4/liLbluqYgPCBzaGl6b2t1c2VpZG9cIDsKK+WLleiEiOeYpCA8IGRvdW15YWt1cnl1dVwgOwor5LiA6Lyq5oy/IDwgaWNoaXJpbnphc2hpXCA7Civou43pmaPljLvlraYgPCBndW5qaW4nJ2lnYWt1XCA7Civokrjnmbrnmr8gPCBqb3VoYXRzdXphcmFcIDsKK+ato+Wbm+mdouS9kyA8IHNlaXNoaW1lbnRhaVwgOwor5a6a5qC86KuL6LKgIDwgdGVpa2FrdXVrZW9pXCA7Civos4PlgJ/mqKkgPCBjaGluc2hha3VrZW5cIDsKK+WNuOWVj+WxiyA8IG9yb3NoaWRvbicneWFcIDsKK+mYsua5v+WJpCA8IGJvdXNoaXRzdXphaVwgOwor5Y+O56mr6auYIDwgc2h1dWtha3VkYWthXCA7Civlho3lh7rnmbogPCBzYWlzaHVwcGF0c3VcIDsKK+W+hemBh+aUueWWhCA8IHRhaWd1dWthaXplblwgOwor57mK57at5YWJ5a2mIDwgc2VuJydpa291Z2FrdVwgOwor6buS5Lq66ZyK5q2MIDwga29rdWppbnJlaWthXCA7CivlkajmpbXmmJ8gPCBzaHV1a3lva3VzZWlcIDsKK+mbtuihjOWIlyA8IHJlaWd5b3VyZXRzdVwgOwor54m55q6K5qmf6IO9IDwgdG9rdXNodWtpbm91XCA7CivntYzot6/nqY3liIYgPCBrZWlyb3Nla2lidW5cIDsKK+WbveWWtui+suWgtCA8IGtva3VlaW5vdWpvdVwgOwor5Zu957KL5Li7576pIDwga29rdXN1aXNodWdpXCA7Civlh7rnmbrngrkgPCBzaHVwcGF0c3V0ZW5cIDsKK+eUsueKtuiFuueCjiA8IGtvdWpvdXNlbicnZW5cIDsKK+WQiOagvOeOhyA8IGdvdWtha3VyaXRzdVwgOwor6LOH55Sj5ZCI6KiIIDwgc2hpc2FuZ291a2VpXCA7Civpr6jpo7Lppqzpo58gPCBnZWlpbmJhc2hva3VcIDsKK+W/g+iHk+eZuuS9nCA8IHNoaW56b3Vob3NzYVwgOwor5paw5Lq65q2M5omLIDwgc2hpbmppbmthc2h1XCA7CivovLjlhaXmiYvlvaIgPCB5dW55dXV0ZWdhdGFcIDsKK+Wcp+edgOerr+WtkCA8IGF0c3VnaXRhbnNoaVwgOwor5pyq5pS55b+D6ICFIDwgbWlrYWlzaGluc2hhXCA7CivnhKHlirnmipXnpaggPCBtdWtvdXRvdWh5b3VcIDsKK+ihjOmAsuabsiA8IGtvdXNoaW5reW9rdVwgOwor6Zuj5pS75LiN6JC9IDwgbmFua291ZnVyYWt1XCA7CivkuIDlv4PlkIzkvZMgPCBpc3NoaW5kb3V0YWlcIDsKK+WupeWSjOaUv+etliA8IHl1dXdhc2Vpc2FrdVwgOwor6ZmQ55WM5Yq555SoIDwgZ2Vua2Fpa291eW91XCA7CivljYHkuIflhITlnJ8gPCBqdXVtYW4nJ29rdWRvXCA7CivlpInmhYvlv4PnkIYgPCBoZW50YWlzaGlucmlcIDsKK+eZveeGseeBryA8IGhha3VuZXRzdXRvdVwgOwor5ouN5a2Q6KiY5Y+3IDwgaHlvdXNoaWtpZ291XCA7CivlhazkvJrllY/nrZQgPCBrb3VrYWltb25kb3VcIDsKK+iAg+WPpOWtpuiAhSA8IGtvdWtvZ2FrdXNoYVwgOwor6aOf5paZ5ZOBIDwgc2hva3VyeW91aGluXCA7Civph47nkIPpgbjmiYsgPCB5YWt5dXVzZW5zaHVcIDsKK+aTjei7iuS/giA8IHNvdXNoYWdha2FyaVwgOwor5aSi6YGK55eF6ICFIDwgbXV5dXVieW91c2hhXCA7CivopoHmiYDopoHmiYAgPCB5b3VzaG95b3VzaG9cIDsKK+a5v+mbu+axoCA8IHNoaXRzdWRlbmNoaVwgOwor6Kaz5o6M6KGTIDwga2Fuc2hvdWp1dHN1XCA7Civkvb/lvpLntpnmib8gPCBzaGl0b2tlaXNob3VcIDsKK+WKseejgembu+a1gSA8IHJlaWppZGVucnl1dVwgOwor5b+XIDwga29rb3JvemFzaGlcIDsKK+aUvyA8IG1hdHN1cmlnb3RvXCA7CivnpL7kvJrliLbluqYgPCBzaGFrYWlzZWlkb1wgOwor5Luj55CG6aCY5LqLIDwgZGFpcmlyeW91amlcIDsKK+eCueaVsOWIh+espiA8IHRlbnN1dWtpcHB1XCA7CivljJbmiJDogqXmlpkgPCBrYXNlaWhpcnlvdVwgOwor5pyq5oiQ5bm06ICFIDwgbWlzZWluZW5zaGFcIDsKK+ecn+mqqOmggiA8IHNoaW5rb3RjaG91XCA7Civlv4XopoHlk4EgPCBoaXRzdXlvdWhpblwgOwor55S75LiW55qEIDwga2FrdXNlaXRla2lcIDsKK+S4gOWkqeS4h+S5lyA8IGl0dGVuYmFuam91XCA7CivnhqjmlpfooosgPCBub3NoaWJ1a3Vyb1wgOwor5ris5Zyw5a2mIDwgc29rdWNoaWdha3VcIDsKK+imquWtkOmWouS/giA8IG95YWtva2Fua2VpXCA7Civpm4HmnKjpkaIgPCBnYW5naXlhc3VyaVwgOwor5YaN5Ymy5byVIDwgc2Fpd2FyaWJpa2lcIDsKK+aBkOaAluaUv+ayuyA8IGt5b3VmdXNlaWppXCA7CivlpYnnjK7lvI8gPCBob3VrZW5zaGlraVwgOwor6Jma5pWw5Y2Y5L2NIDwga3lvc3V1dGFuJydpXCA7CivpgbjmjJnliLbluqYgPCBzZW5reW9zZWlkb1wgOwor5Yid6KqV55SfIDwgaGF0c3V0YW5qb3VcIDsKK+S4ieacrOi2syA8IHNhbmJvbicnYXNoaVwgOwor5Yik5pat5YqbIDwgaGFuZGFucnlva3VcIDsKK+Wkp+mhmOaIkOWwsSA8IGRhaWdhbmpvdWp1XCA7CivljZToqr/mgKcgPCBreW91Y2hvdXNlaVwgOwor5YaG5Y2T5Lya6K2wIDwgZW50YWt1a2FpZ2lcIDsKK+WkqemBk+S5viA8IHRlbnRvdWJvc2hpXCA7CivlpKflrq7lvqHmiYAgPCBvb21peWFnb3Nob1wgOwor55m95pel5aSiIDwgaGFrdWppdHN1bXVcIDsKK+WIhuaekOihqCA8IGJ1bnNla2loeW91XCA7CivkuIrkuIvplqLkv4IgPCBqb3VnZWthbmtlaVwgOwor5om/6Ku+5pu4IDwgc2hvdWRha3VzaG9cIDsKK+Wwkemjn+WutiA8IHNob3VzaG9rdWthXCA7Civku67ln7fooYwgPCBrYXJpc2hpa2tvdVwgOwor5o+h5Yqb6KiIIDwgYWt1cnlva3VrZWlcIDsKK+WFrOWWtuS8gealrSA8IGtvdWVpa2lneW91XCA7Civph43mtrLliIbpm6IgPCBqdXVla2lidW5yaVwgOwor5LiN6Laz5YudIDwgZnVzb2t1Z2FjaGlcIDsKK+Wun+i3teeQhuaApyA8IGppc3NlbnJpc2VpXCA7CivluK/pi7ggPCBvYmlub2tvZ2lyaVwgOwor5b6M6YCy5Zu9IDwga291c2hpbmtva3VcIDsKK+ihjOS9j+WdkOiHpSA8IGd5b3VqdXV6YWdhXCA7CivoqIDooYzkuIDoh7QgPCBnZW5rb3VpdGNoaVwgOwor5rSX55y86JasIDwgc2VuZ2FuJyd5YWt1XCA7Civlvqnnv5LmlocgPCBmdWt1c2h1dWJ1blwgOwor5bqD5aSn54Sh6L66IDwga291ZGFpbXVoZW5cIDsKK+WEquWFiOS6i+mghSA8IHl1dXNlbmppa291XCA7CivmkLrluK/pm7voqbEgPCBrZWl0YWlkZW53YVwgOwor5q2i6KGA5bivIDwgc2hpa2V0c3V0YWlcIDsKK+S4i+Wuv+aWmSA8IGdlc2h1a3VyeW91XCA7CivmmYLku6PpjK/oqqQgPCBqaWRhaXNha3Vnb1wgOwor5Lq65bel6KGb5pifIDwgamlua291ZWlzZWlcIDsKK+mHjemHj+e0miA8IGp1dXJ5b3VreXV1XCA7Civnt5rlvaLpoIbluo8gPCBzZW5rZWlqdW5qb1wgOwor5Y+s5L2/IDwgbWVzaGl0c3VrYWlcIDsKK+WJjemAsui7uCA8IHplbnNoaW5qaWt1XCA7CivpiYTnn7Plv4MgPCB0ZXNzZWtpc2hpblwgOwor55SY6Iy26JSTIDwgYW1hY2hhZHp1cnVcIDsKK+WkluS6pOWumOijnCA8IGdhaWtvdWthbmhvXCA7CivnvbLlkI3lvI8gPCBzaG9tZWlzaGlraVwgOwor5Lq65b+D5ZywIDwgaGl0b2dva29jaGlcIDsKK+WbmuS6uuacjSA8IHNodXVqaW5mdWt1XCA7CivlvovlhIDogIUgPCByaWNoaWdpbW9ub1wgOwor5Yqb55+zIDwgY2hpa2FyYWlzaGlcIDsKK+S9j+WxheaJi+W9kyA8IGp1dWt5b3RlYXRlXCA7Civpm4HmnKjou4ogPCBnYW5naWd1cnVtYVwgOwor6YGT6Lev5qiZ56S6IDwgZG91cm9oeW91amlcIDsKK+eZvem8oCA8IHNoaXJvbmV6dW1pXCA7CivkuojlgpnlsIbmoKEgPCB5b2Jpc2hvdWtvdVwgOwor5oaC5qyd55eHIDwgeXV1dXRzdXNob3VcIDsKK+awkemWk+mjm+ihjCA8IG1pbmthbmhpa291XCA7Civlrp/pqJPlvI8gPCBqaWtrZW5zaGlraVwgOwor5rC45a2Q5L2c5qipIDwgZWlrb3Nha3VrZW5cIDsKK+ekvuS8mumBi+WLlSA8IHNoYWthaXVuZG91XCA7Civnp7vooYzoqIjnlLsgPCBpa291a2Vpa2FrdVwgOwor54uC5L+h6ICFIDwga3lvdXNoaW5zaGFcIDsKK+aOpei/kee1jOi3ryA8IHNla2tpbmtlaXJvXCA7CivkuJbnlYzntYzmuIggPCBzZWthaWtlaXphaVwgOwor5rWu5LiW6I2J5a2QIDwgdWtpeW96b3VzaGlcIDsKK+awkeaXj+eahCA8IG1pbnpva3V0ZWtpXCA7CivlrprmlbDmmK/mraMgPCB0ZWlzdXV6ZXNlaVwgOwor55m66KiA6ICFIDwgaGF0c3VnZW5zaGFcIDsKK+WKm+eYpCA8IGNoaWthcmFrb2J1XCA7CivljZjnuKbliJcgPCB0YW5qdXVyZXRzdVwgOwor5a6J5L+d5p2h57SEIDwgYW5wb2pvdXlha3VcIDsKK+iyqeWjsuWApOautSA8IGhhbmJhaW5lZGFuXCA7Civln7rlupXmp4vpgKAgPCBraXRlaWtvdXpvdVwgOwor5b+F6aCI5p2h5Lu2IDwgaGlzc3Vqb3VrZW5cIDsKK+S4ieS6uue1hCA8IHNhbicnbmluZ3VtaVwgOwor6buS5paR55eFIDwga29rdWhhbmJ5b3VcIDsKK+WMuuijgeWIpOaJgCA8IGt1c2FpYmFuc2hvXCA7CivkuojooYzmvJTnv5IgPCB5b2tvdWVuc2h1dVwgOwor6YG45oyZ6YGL5YuVIDwgc2Vua3lvdW5kb3VcIDsKK+Wbvemam+imj+aooSA8IGtva3VzYWlraWJvXCA7CivmgqrmgqrmiK8gPCB3YXJ1aXRhenVyYVwgOwor6YGL6Lui5YWN6KixIDwgdW50ZW5tZW5reW9cIDsKK+e3muW9ouirlueQhiA8IHNlbmtlaXJvbnJpXCA7Civlrp/nlKjlk4EgPCBqaXRzdXlvdWhpblwgOwor5aSn6IW/6aqoIDwgZGFpdGFpa290c3VcIDsKK+W5tOizgOmDteS+vyA8IG5lbmdheXV1YmluXCA7CivmuKnpoqjmmpbmiL8gPCBvbnB1dWRhbmJvdVwgOwor5YaF6YOo5qeL6YCgIDwgbmFpYnVrb3V6b3VcIDsKK+awtOicnOahgyA8IHN1aW1pdHN1dG91XCA7CivkuI3lrprlnovoqakgPCBmdXRlaWtlaXNoaVwgOwor5ryC5rWB6Ii5IDwgaHlvdXJ5dXVzZW5cIDsKK+m7hOmHkeW0h+aLnSA8IG91Z29uc3V1aGFpXCA7CivkuJboqbHlpbPmiL8gPCBzZXdhbnlvdWJvdVwgOwor54qs5YSS5a2m5rS+IDwga2VuanVnYWt1aGFcIDsKK+mguOWLleiEiCA8IGtlaWRvdW15YWt1XCA7CivkuIDlk4HmlpnnkIYgPCBpcHBpbnJ5b3VyaVwgOwor5Lqc56Gr6YW45aGpIDwgYXJ5dXVzYW4nJ2VuXCA7CivnlJ/lhbXms5UgPCBuYW1hYnlvdWhvdVwgOwor54OP57696ImyIDwga2FyYXN1YmFpcm9cIDsKK+W8n+W8n+WtkCA8IG90b3V0b2Rlc2hpXCA7CivliofmloflraYgPCBnZWtpYnVuZ2FrdVwgOwor5Yqg6Jas6aOvIDwga2F5YWt1bWVzaGlcIDsKK+WMl+WNiueQgyA8IGtpdGFoYW5reXV1XCA7Civpm4bkuK3nt5ogPCBzaHV1Y2h1dXNlblwgOwor5pyJ5aOw5a2Q6Z+zIDwgeXV1c2Vpc2hpaW5cIDsKK+W+l+alreWjqyA8IHRva3VneW91c2hpXCA7CivnmoblhbXliLbluqYgPCBrYWloZWlzZWlkb1wgOwor5YmN6YCy6KeSIDwgemVuc2hpbmtha3VcIDsKK+acque1jOmok+iAhSA8IG1pa2Vpa2Vuc2hhXCA7CivppIrmrpbmsaAgPCB5b3VzaG9rdWNoaVwgOwor5Zec6JmQ5oCnIDwgc2hpZ3lha3VzZWlcIDsKK+Wwiueah+eOi+aUmOWktyA8IHNvbicnbm91am91aVwgOwor5LiK5oSP5LiL6YGUIDwgam91aWthdGF0c3VcIDsKK+i7iumWk+i3nemboiA8IHNoYWthbmt5b3JpXCA7CivmsLfmsrPmmYLku6MgPCBoeW91Z2FqaWRhaVwgOwor5LiJ5Lq656ewIDwgc2FuJyduaW5zaG91XCA7Civmg4XloLHnkIboq5YgPCBqb3Vob3VyaXJvblwgOwor5b6h5aSa5b+Z5LitIDwgZ290YWJvdWNodXVcIDsKK+S4ree0muWTgSA8IGNodXVreXV1aGluXCA7CivmvILmtYHogIUgPCBoeW91cnl1dXNoYVwgOwor5oSb5p+T5piO546LIDwgYWl6ZW5teW91b3VcIDsKK+iqmOaDkeeJqSA8IHl1dXdha3Vtb25vXCA7CivpoK3ok4vpqqggPCB0b3VnYWlrb3RzdVwgOwor55m65piO5ZOBIDwgaGF0c3VtZWloaW5cIDsKK+W5s+mdouS6pOW3riA8IGhlaW1lbmtvdXNhXCA7CivlpLHmoLzogIUgPCBzaGlra2FrdXNoYVwgOwor5oiQ57i+6KGoIDwgc2Vpc2VraWh5b3VcIDsKK+e1jOmok+S4u+e+qSA8IGtlaWtlbnNodWdpXCA7CivlvIHorbflo6vkvJogPCBiZW5nb3NoaWthaVwgOwor5rOo5paH5YWIIDwgY2h1dW1vbnNha2lcIDsKK+e0lOaDheWPr+aGkCA8IGp1bmpvdWthcmVuXCA7CivovInosqjlkIPmsLQgPCBzYWlrYWtpc3N1aVwgOwor5pei5rG65ZuaIDwga2lrZXRzdXNodXVcIDsKK+WNiua/gemfs+espiA8IGhhbmRha3VvbmZ1XCA7Civplqjnp4DnlLvlrrYgPCBrZWlzaHV1Z2FrYVwgOwor5pGC5YuV6KuWIDwgc2V0c3Vkb3Vyb25cIDsKK+S8j+a1geawtCA8IGZ1a3VyeXV1c3VpXCA7Civni6zoo4HnmoQgPCBkb2t1c2FpdGVraVwgOwor6auY6Kq/5a2QIDwgdGFrYWNob3VzaGlcIDsKK+eri+iEmuWcsCA8IHJpa2t5YWt1Y2hpXCA7CivkuInljYropo/nrqEgPCBzYW5oYW5raWthblwgOwor5bCB5bu65pmC5LujIDwgaG91a2VuamlkYWlcIDsKK+i2iuWGrOizh+mHkSA8IGV0dG91c2hpa2luXCA7Civlho3mp4vnr4kgPCBzYWlrb3VjaGlrdVwgOwor5omA5biv6YGT5YW3IDwgc2hvdGFpZG91Z3VcIDsKK+WCsuWyuOeEoeekvCA8IGdvdWdhbmJ1cmVpXCA7CivnpL7kvJrkv53pmbogPCBzaGFrYWlob2tlblwgOwor5quT5aSq6byTIDwgeWFndXJhZGFpa29cIDsKK+atouihgOWJpCA8IHNoaWtldHN1emFpXCA7CivovIPlhKrkvY3oq5YgPCBrYWt1eXV1aXJvblwgOwor5LiW6KuW6Kq/5p+7IDwgeW9yb25jaG91c2FcIDsKK+WGrOacn+S8keaahyA8IHRvdWtpa3l1dWthXCA7CivkuKHmlrnlhbEgPCByeW91aG91dG9tb1wgOwor5LiK6YOo5qeL6YCgIDwgam91YnVrb3V6b3VcIDsKK+advuiRieadliA8IG1hdHN1YmFkenVlXCA7CivosaHlvaLmloflrZcgPCBzaG91a2VpbW9qaVwgOwor5Yqb5rC0IDwgY2hpa2FyYW1penVcIDsKK+ayluepjee1sSA8IGNodXVzZWtpdG91XCA7Civku5XkuovnrrEgPCBzaGlnb3RvYmFrb1wgOwor5rC36YaL6YW4IDwgaHlvdXNha3VzYW5cIDsKK+i+suacrOS4u+e+qSA8IG5vdWhvbnNodWdpXCA7Civmm7jnsY3llYYgPCBzaG9zZWtpc2hvdVwgOwor5LiA5YiH6KGG55SfIDwgaXNzYWlzaHVqb3VcIDsKK+aXp+aFi+S+neeEtiA8IGt5dXV0YWlpemVuXCA7CivmlbTnkIbnlarlj7cgPCBzZWlyaWJhbmdvdVwgOwor5Luu57a05pysIDwga2FyaXRvamlob25cIDsKK+eZuumbu+aJgCA8IGhhdHN1ZGVuc2hvXCA7CivlvZPluqfos4fnlKMgPCB0b3V6YXNoaXNhblwgOwor5a6Y6IO955qEIDwga2FuJydub3V0ZWtpXCA7Civmrovlk4HmlbTnkIYgPCB6YW5waW5zZWlyaVwgOwor5pyr5qKi55qEIDwgbWFzc2hvdXRla2lcIDsKK+S4remWk+WbvSA8IGNodXVrYW5rb2t1XCA7CivlroflrpnpgJ/luqYgPCB1Y2h1dXNva3Vkb1wgOwor5oCd57Si55qEIDwgc2hpc2FrdXRla2lcIDsKK+WNl+WPoyA8IG1pbmFtaWd1Y2hpXCA7CivliqDmsLTliIbop6MgPCBrYXN1aWJ1bmthaVwgOwor5Ye66Lqr5qChIDwgc2h1c3NoaW5rb3VcIDsKK+eBsOmdkuiJsiA8IGhhaXNlaXNob2t1XCA7CivoiKrmtbfooZMgPCBrb3VrYWlqdXRzdVwgOwor5bCP5p2x5LqsIDwgc2hvdXRvdWt5b3VcIDsKK+Wuo+S8neS+oeWApCA8IHNlbmRlbmthY2hpXCA7CivlubTlraPlpYnlhawgPCBuZW5raWJvdWtvdVwgOwor5Y2D5Lq65YqbIDwgc2VuJyduaW5yaWtpXCA7Civkurrlt6Xoip0gPCBqaW5rb3VzaGliYVwgOwor6Lu96YeP57SaIDwga2VpcnlvdWt5dXVcIDsKK+WKm+alrSA8IGNoaWthcmF3YXphXCA7CivosqjluaPntYzmuIggPCBrYWhlaWtlaXphaVwgOwor54Sh5pyf5oey5b25IDwgbXVraWNob3Vla2lcIDsKK+aLmOadn+WcpyA8IGtvdXNva3VhdHN1XCA7CivmiKbpl5jlipsgPCBzZW50b3VyeW9rdVwgOwor5biC5aC05Yy65YiGIDwgc2hpam91a3VidW5cIDsKK+eQg+mdoumPoSA8IGt5dXVtZW5reW91XCA7CivliJ3mnJ/oqK3lrpogPCBzaG9raXNldHRlaVwgOwor5Lq66YCg57mK57atIDwgamluem91c2VuJydpXCA7Civmma7pgJrpoJDph5EgPCBmdXRzdXV5b2tpblwgOwor5L2O5Yip6LOH6YeRIDwgdGVpcmlzaGlraW5cIDsKK+S6uuW9ouWKhyA8IG5pbmd5b3VnZWtpXCA7CivnhKHpqqjogIUgPCBidWtvdHN1bW9ub1wgOwor55yf54+g57Sw5belIDwgc2hpbmp1emFpa3VcIDsKK+S4u+efpeS4u+e+qSA8IHNodWNoaXNodWdpXCA7CivpgIbnnasgPCBzYWthbWF0c3VnZVwgOwor55S65aWJ6KGMIDwgbWFjaGlidWd5b3VcIDsKK+epuuiovOaWhyA8IGthcmFzaG91bW9uXCA7CivkuozpoIXkv4LmlbAgPCBuaWtvdWtlaXN1dVwgOwor57Sg5oCn5qeL6YCgIDwgc29zZWlrb3V6b3VcIDsKK+aEm+WbveS4u+e+qSA8IGFpa29rdXNodWdpXCA7CivmiKbpl5jmlK/mj7QgPCBzZW50b3VzaGllblwgOwor5Lq65ZCN6L6e5pu4IDwgamlubWVpamlzaG9cIDsKK+WJjei8qumnhuWLlSA8IHplbnJpbmt1ZG91XCA7CivkvqHmoLzmk43kvZwgPCBrYWtha3Vzb3VzYVwgOwor5pS+54mp57eaIDwgaG91YnV0c3VzZW5cIDsKK+W9ouiAjOS4i+WtpiA8IGtlaWppa2FnYWt1XCA7CivkuIDmnJ/kuIDkvJogPCBpY2hpZ29pY2hpZVwgOwor6Kq/5a2Q6ICFIDwgY2hvdXNoaW1vbm9cIDsKK+ePvuWun+aEnyA8IGdlbmppdHN1a2FuXCA7CivpsLnnr4AgPCBrYXRzdW9idXNoaVwgOwor56mN5YiG5a2mIDwgc2VraWJ1bmdha3VcIDsKK+Wcn+acqOW3peS6iyA8IGRvYm9rdWtvdWppXCA7CivlpbPlrZDpq5jnlJ8gPCBqb3NoaWtvdXNlaVwgOwor54++5a6f5oCnIDwgZ2Vuaml0c3VzZWlcIDsKK+mrmOmbu+WcpyA8IGtvdWRlbicnYXRzdVwgOwor5a2m5ZWP55qEIDwgZ2FrdW1vbnRla2lcIDsKK+eOi+mBk+alveWcnyA8IG91ZG91cmFrdWRvXCA7CivmgqrmiKboi6bpl5ggPCBha3VzZW5rdXRvdVwgOwor56We57WM5aSW56eRIDwgc2hpbmtlaWdla2FcIDsKK+WtpueptueahCA8IGdha2t5dXV0ZWtpXCA7CivpnZ7plovnpLrlkIjmhI8gPCBoaWthaWppZ291aVwgOwor5Y+O56mr56WtIDwgc2h1dWtha3VzYWlcIDsKK+eJqeeQhuWtpiA8IGJ1dHN1cmlnYWt1XCA7CivkuI3nnKDkuI3kvJEgPCBmdW1pbmZ1a3l1dVwgOwor5Z6C55u057eaIDwgc3VpY2hva3VzZW5cIDsKK+WQjeiqieaVmeaOiCA8IG1laXlva3lvdWp1XCA7Civlm7Pmm7jppKjlk6EgPCB0b3Nob2thbicnaW5cIDsKK+attOWPsuWtpiA8IHJla2lzaGlnYWt1XCA7CivmvaTmu5HliaQgPCBqdW5rYXRzdXphaVwgOwor57WE57mU5a2mIDwgc29zaGlraWdha3VcIDsKK+mrmOatjOaUvuWQnyA8IGtvdWthaG91Z2luXCA7Civnmbrpm7vlrZAgPCBoYXRzdWRlbnNoaVwgOwor5LiJ5bCK5LuPIDwgc2Fuem9uYnV0c3VcIDsKK+W8leWPluS6uiA8IGhpa2l0b3JpbmluXCA7Civmp4vmiJDljZjkvY0gPCBrb3VzZWl0YW4nJ2lcIDsKK+WkluS6uuiomOiAhSA8IGdhaWppbmtpc2hhXCA7CivmvILms4rogIUgPCBoeW91aGFrdXNoYVwgOwor5L6L5aSW5Yem55CGIDwgcmVpZ2Fpc2hvcmlcIDsKK+Wkq+WppuiMtueilyA8IG1lb3RvZGphd2FuXCA7CivnnJ/nlLDomasgPCBzYW5hZGFtdXNoaVwgOwor6ZeH5ZWG5Lq6IDwgeWFtaXNob3VuaW5cIDsKK+WFpea8geaWmSA8IG55dXVneW9yeW91XCA7CivlhajpnaLorJvlkowgPCB6ZW5tZW5rb3V3YVwgOwor5LiD5a6d54S8IDwgc2hpcHBvdXlha2lcIDsKK+mLvOmJhOadvyA8IGtvdXRldHN1YmFuXCA7CivlhKroia/moKogPCB5dXVyeW91a2FidVwgOwor5pys5qC855qEIDwgaG9ua2FrdXRla2lcIDsKK+W+qeiukOaIpiA8IGZ1a3VzaHV1c2VuXCA7CivmmrTlipvlm6MgPCBib3VyeW9rdWRhblwgOwor5Yid6Ki65paZIDwgc2hvc2hpbnJ5b3VcIDsKK+e+qeWLmeaVmeiCsiA8IGdpbXVreW91aWt1XCA7Civlj6PpgZTogIUgPCBrdWNoaWRhc3NoYVwgOwor6ICQ54ax5oCnIDwgdGFpbmV0c3VzZWlcIDsKK+Wil+ihgOWJpCA8IHpvdWtldHN1emFpXCA7CivmgrLoprPoq5bogIUgPCBoaWthbnJvbnNoYVwgOwor5YCL5Lq65oOF5aCxIDwga29qaW5qb3Vob3VcIDsKK+WMl+WMl+adsSA8IGhva3Vob2t1dG91XCA7CivnmbroqIDmqKkgPCBoYXRzdWdlbmtlblwgOwor55S65q6155Wd5q2pIDwgY2hvdXRhbnNlYnVcIDsKK+aApeaIkOmVtyA8IGt5dXVzZWljaG91XCA7Civku6PnkIblpKfkvb8gPCBkYWlyaXRhaXNoaVwgOwor5qeL6YCg5Li7576pIDwga291em91c2h1Z2lcIDsKK+WHuuizh+mhjSA8IHNodXNzaGlnYWt1XCA7CivlhoXliIbms4wgPCBuYWlidW5waXRzdVwgOwor5YWc6JmrIDwga2FidXRvbXVzaGlcIDsKK+WGhee3mumbu+ipsSA8IG5haXNlbmRlbndhXCA7CivlhaznpLrkvqHmoLwgPCBrb3VqaWtha2FrdVwgOwor5ray5L2T6YW457SgIDwgZWtpdGFpc2Fuc29cIDsKK+Wbm+aXrOevgCA8IHNoaWp1bnNldHN1XCA7CivmsoPluqbkuIHlub4gPCB5b3Vkb2NoaW5raVwgOwor5Lmd5a6Y6bOlIDwga3l1dWthbmNob3VcIDsKK+WIkeS6i+iotOionyA8IGtlaWppc29zaG91XCA7CivogIHkurrlipsgPCByb3VqaW5yeW9rdVwgOwor56i85YON5Lq65Y+jIDwga2Fkb3VqaW5rb3VcIDsKK+i7veapn+mWoumKgyA8IGtlaWtpa2FuanV1XCA7CivmqZ/lr4bkv53orbcgPCBraW1pdHN1aG9nb1wgOwor5bu656+J5aOrIDwga2VuY2hpa3VzaGlcIDsKK+WkqualteaLsyA8IHRhaWt5b2t1a2VuXCA7CivnlJ/nlarntYQgPCBuYW1hYmFuZ3VtaVwgOwor6aSK5q6W5aC0IDwgeW91c2hva3Vqb3VcIDsKK+S6iOWCmeS6pOa4iSA8IHlvYmlrb3VzaG91XCA7CivomZrohLHmhJ8gPCBreW9kYXRzdWthblwgOwor6LGh54mZ6LOqIDwgem91Z2VzaGl0c3VcIDsKK+mahum8u+ihkyA8IHJ5dXViaWp1dHN1XCA7CivooajpnaLnqY0gPCBoeW91bWVuc2VraVwgOwor6YCP6KaW5Zuz5rOVIDwgdG91c2hpenVob3VcIDsKK+e3tOe/kuippuWQiCA8IHJlbnNodXVqaWFpXCA7Civliqrlipvos54gPCBkb3J5b2t1c2hvdVwgOwor5Y2B5Lq65LimIDwganV1bmluJyduYW1pXCA7CivolqzpkbXpoK0gPCB5YWthbicnYXRhbWFcIDsKK+WPr+imluWFiee3miA8IGthc2hpa291c2VuXCA7CivnrYboqJjoqabpqJMgPCBoaWtraXNoaWtlblwgOwor5YWs5a6a55u45aC0IDwga291dGVpc291YmFcIDsKK+S+oeagvOimj+WItiA8IGtha2FrdWtpc2VpXCA7CivliqDph43lubPlnYcgPCBrYWp1dWhlaWtpblwgOwor5q2m6KOF6K2m5a6YIDwgYnVzb3VrZWlrYW5cIDsKK+WVhuWjsuetiyA8IHNob3ViYWlzdWppXCA7CivmsLTlrZDkvpvppIogPCBtaXp1Z29rdXlvdVwgOwor5riv5rm+5bGAIDwga291d2Fua3lva3VcIDsKK+WNg+WkieS4h+WMliA8IHNlbnBlbmJhbmthXCA7CivmsLTllYblo7IgPCBtaXp1c2hvdWJhaVwgOwor6YmE6YGT5L6/IDwgdGV0c3Vkb3ViaW5cIDsKK+afu+WumuS+oeagvCA8IHNhdGVpa2FrYWt1XCA7CivmsJHml4/lraYgPCBtaW56b2t1Z2FrdVwgOwor5q205Y+y5YqHIDwgcmVraXNoaWdla2lcIDsKK+a6neW9oumLvCA8IG1pem9nYXRha291XCA7CivmmI7mmbDlpKIgPCBtZWlzZWtpeXVtZVwgOwor5b2i5L2TIDwgbmFyaWthdGFjaGlcIDsKK+S4i+WxpOekvuS8miA8IGthc291c2hha2FpXCA7Civmlq3ntprnmoQgPCBkYW56b2t1dGVraVwgOwor5byP6YOo55yBIDwgc2hpa2lidXNob3VcIDsKK+altemBk+iAhSA8IGdva3Vkb3Vtb25vXCA7CivplovmoKHlvI8gPCBrYWlrb3VzaGlraVwgOwor5rCR57SE6KuWIDwgbWluJyd5YWt1cm9uXCA7CivpmLLlvqHnjocgPCBib3VneW9yaXRzdVwgOwor6KGo6Z2i55qEIDwgaHlvdW1lbnRla2lcIDsKK+ioiOaZguS/giA8IGtlaWppZ2FrYXJpXCA7Civlvoznmbrlk4EgPCBrb3VoYXRzdWhpblwgOwor6Ieq54S25Li7576pIDwgc2hpemVuc2h1Z2lcIDsKK+iWqeaRqeeEvCA8IHNhdHN1bWF5YWtpXCA7Civluormn7EgPCB0b2tvYmFzaGlyYVwgOwor6IiI5ZGz5pys5L2NIDwga3lvdW1paG9uJydpXCA7Civlh7rouqvlnLAgPCBzaHVzc2hpbmNoaVwgOwor54Sh5L2T6LOH55SjIDwgbXV0YWlzaGlzYW5cIDsKK+itt+i6q+ihkyA8IGdvc2hpbmp1dHN1XCA7CivntYzmuIjlsIHpjpYgPCBrZWl6YWlmdXVzYVwgOwor56u25LqJ55u45omLIDwga3lvdXNvdWFpdGVcIDsKK+WHuuayoSA8IHNodXRzdWJvdHN1XCA7CivkuI7lpKroqbEgPCB5b3RhYmFuYXNoaVwgOwor5bem56uvIDwgaGlkYXJpaGFzaGlcIDsKK+WGjeWFpeWtpiA8IHNhaW55dXVnYWt1XCA7CivkupTovKrlpKfkvJogPCBnb3JpbnRhaWthaVwgOwor5Y2U57SE5pu4IDwga3lvdXlha3VzaG9cIDsKK+aXpeacrOS4ieaZryA8IG5paG9uc2Fua2VpXCA7CivkuInnvr3ng48gPCBzYW5iYWdhcmFzdVwgOwor6Kiq5ZWP5a6iIDwgaG91bW9ua3lha3VcIDsKK+ayueaAp+Whl+aWmSA8IHl1c2VpdG9yeW91XCA7CivmsrvpqJPolqwgPCBjaGlrZW4nJ3lha3VcIDsKK+aAp+WWhOiqrCA8IHNlaXplbnNldHN1XCA7Civku5Xkuovmn4QgPCBzaGlnb3RvZ2FyYVwgOwor5aSn5qC56LazIDwgZGFpa29uJydhc2hpXCA7CivmlLnoqILlopfoo5wgPCBrYWl0ZWl6b3Vob1wgOwor5LiA6Iis5qaC5b+1IDwgaXBwYW5nYWluZW5cIDsKK+WFieeArOm+jSA8IG1pdHN1c2VyeXV1XCA7Civni7zol4nogIUgPCByb3V6ZWtpbW9ub1wgOwor5b+D5ouN5pWwIDwgc2hpbnBha3VzdXVcIDsKK+Wwj+S4gOaZgumWkyA8IGtvaWNoaWppa2FuXCA7CivkuInohJrmpIXlrZAgPCBzYW5reWFrdWlzdVwgOwor5YuV54mp6KqMIDwgZG91YnV0c3VzaGlcIDsKK+i/lOWNtOWApCA8IGhlbmt5YWt1Y2hpXCA7Civnmq7ohprmhJ/oppogPCBoaWZ1a2Fua2FrdVwgOwor54Sh6aeE6KmxIDwgbXVkYWJhbmFzaGlcIDsKK+WIhuWtkOW8jyA8IGJ1bnNoaXNoaWtpXCA7CivpmY3ou4rlj6MgPCBrb3VzaGFndWNoaVwgOwor5qSc5Ye65ZmoIDwga2Vuc2h1dHN1a2lcIDsKK+aoqeWIqeihjOS9vyA8IGtlbnJpa291c2hpXCA7CivokL3okYnmnb4gPCByYWt1eW91c2hvdVwgOwor5qW15YmN57eaIDwga3lva3V6ZW5zZW5cIDsKK+i2hei2iueCuSA8IGNob3VldHN1dGVuXCA7Civpu5LnjKnjgIUgPCBrdXJvc2hvdWpvdVwgOwor5ryi5a2X5aSJ5o+bIDwga2FuamloZW5rYW5cIDsKK+WbveaFtuevgCA8IGtva2tlaXNldHN1XCA7CivnhKHkvZPosqHnlKMgPCBtdXRhaXphaXNhblwgOwor5be055OmIDwgdG9tb2VnYXdhcmFcIDsKK+WkqeeUo+eJqSA8IHRlbnNhbmJ1dHN1XCA7CivntLPlo6vpjLIgPCBzaGluc2hpcm9rdVwgOwor5YaN5YWl5Zu9IDwgc2Fpbnl1dWtva3VcIDsKK+WFqOS9k+S8muitsCA8IHplbnRhaWthaWdpXCA7Civkuozph43mirXlvZMgPCBuaWp1dXRlaXRvdVwgOwor5YiH5pelIDwgc2hpbWVraXJpYmlcIDsKK+apn+aisOaWh+aYjiA8IGtpa2FpYnVubWVpXCA7CivnsKHmvZTmgKcgPCBrYW5rZXRzdXNlaVwgOwor5aSp5rSl5LmZ5aWzIDwgYW1hdHN1b3RvbWVcIDsKK+WIh+aWremdoiA8IHNldHN1ZGFubWVuXCA7CivlvJXovrznt5ogPCBoaWtpa29taXNlblwgOwor5Yip5a6z6Zai5L+CIDwgcmlnYWlrYW5rZWlcIDsKK+Wkmuinkue1jOWWtiA8IHRha2FrdWtlaWVpXCA7CivlpKvlqabliKXlp5MgPCBmdXVmdWJlc3NlaVwgOwor57KX5b+96ICFIDwgc29rb3RzdW1vbm9cIDsKK+mWi+S8muW8jyA8IGthaWthaXNoaWtpXCA7Civml6XmnKzoqp7oqLMgPCBuaWhvbmdveWFrdVwgOwor5Lqk5o+b5qmf6IO9IDwga291a2Fua2lub3VcIDsKK+eUo+WNteWgtOaJgCA8IHNhbnJhbmJhc2hvXCA7CivmhJ/lgrfnmoQgPCBrYW5zaG91dGVraVwgOwor5biC5pyJ54mpIDwgc2hpeXV1YnV0c3VcIDsKK+i1sOihjOi3nemboiA8IHNvdWtvdWt5b3JpXCA7CivnhKHlsL3ntYTlkIggPCBtdWppbmt1bWlhaVwgOwor5YaN55Sf5Yip55SoIDwgc2Fpc2Vpcml5b3VcIDsKK+iBluiBt+iAhSA8IHNlaXNob2t1c2hhXCA7CivoiKrnqbrmr43oiaYgPCBrb3VrdXVib2thblwgOwor5Lit6KGj5ZqiIDwgbmFrYWdha3VzaGlcIDsKK+eLrOeri+iqniA8IGRva3VyaXRzdWdvXCA7CivkurrlkI3ovp7lhbggPCBqaW5tZWlqaXRlblwgOwor5pio6Z2e5LuK5pivIDwgc2FrdWhpa29uemVcIDsKK+iCsuWFkOWupCA8IGlrdWppc2hpdHN1XCA7CivmlrDlj6TlhbjmtL4gPCBzaGlua290ZW5oYVwgOwor57mB5q6W5ZywIDwgaGFuc2hva3VjaGlcIDsKK+S4gOS6uuensCA8IGljaGluaW5zaG91XCA7CivplbfltI7nnIwgPCBuYWdhc2FraWtlblwgOwor57WM5Za26LOH5rqQIDwga2VpZWlzaGlnZW5cIDsKK+W5vOW/gyA8IG9zYW5hZ29rb3JvXCA7CivooqvlrrPlpoTmg7MgPCBoaWdhaW1vdXNvdVwgOwor6Zu75Yqb6KiIIDwgZGVucnlva3VrZWlcIDsKK+ijveawt+eavyA8IHNlaWh5b3V6YXJhXCA7CivntLDoj4zlhbXlmaggPCBzYWlraW5oZWlraVwgOwor6aO95ZKM5rq25rayIDwgaG91d2F5b3Vla2lcIDsKK+S4gOiIrOS8muioiCA8IGlwcGFua2Fpa2VpXCA7Civmupblgpnos4fph5EgPCBqdW5iaXNoaWtpblwgOwor5Li756iO5bGAIDwgc2h1emVpa3lva3VcIDsKK+aUv+WFmuaUv+ayuyA8IHNlaXRvdXNlaWppXCA7Civmr43lrZDlubTph5EgPCBib3NoaW5lbmtpblwgOwor5o6l57aa6KqeIDwgc2V0c3V6b2t1Z29cIDsKK+eJuembhuWPtyA8IHRva3VzaHV1Z291XCA7Civpu5LopJDoibIgPCBrb2trYXNzaG9rdVwgOwor576O5a655pW05b2iIDwgYml5b3VzZWlrZWlcIDsKK+S4reWbveS6uiA8IGNodXVnb2t1amluXCA7CivoirHnrbUgPCBoYW5hbXVzaGlyb1wgOwor5Yid5pyf5oqV6LOHIDwgc2hva2l0b3VzaGlcIDsKK+acgOefrei3nemboiA8IHNhaXRhbmt5b3JpXCA7CivlkajovrrmqZ/lmaggPCBzaHV1aGVua2lraVwgOwor5Yi26ZmQ5pmC6ZaTIDwgc2VpZ2VuamlrYW5cIDsKK+WLpOWKtOaEj+assiA8IGtpbnJvdWl5b2t1XCA7CivlvpPlsZ7lm70gPCBqdXV6b2t1a29rdVwgOwor5Y+j6L+U562UIDwga3VjaGloZW50b3VcIDsKK+WAieW6q+S8muekviA8IHNvdWtvZ2Fpc2hhXCA7CivnlLfpsKUgPCBvdG9rb3lhbW9tZVwgOwor5pyq6ZaL56S+5LyaIDwgbWlrYWlzaGFrYWlcIDsKK+a4m+ihsOeOhyA8IGdlbnN1aXJpdHN1XCA7CivlsI7pm7vnjocgPCBkb3VkZW5yaXRzdVwgOwor5LiA5LqG57ChIDwgaWNoaXJ5b3VrYW5cIDsKK+mBjuWkp+ipleS+oSA8IGthZGFpaHlvdWthXCA7CivoirHnpa0gPCBoYW5hbWF0c3VyaVwgOwor5YaN6Ly45Ye6IDwgc2FpeXVzaHV0c3VcIDsKK+mdkumKheiJsiA8IHNlaWRvdXNob2t1XCA7CivnoLTlu4nmgaXnvaogPCBoYXJlbmNoaXphaVwgOwor6ZqK5ZWG5a6/IDwgdGFpc2hvdXlhZG9cIDsKK+aZgumZkOijhee9riA8IGppZ2Vuc291Y2hpXCA7Civmma/msJflpInli5UgPCBrZWlraWhlbmRvdVwgOwor5byP5qyh56ysIDwgc2hpa2lzaGlkYWlcIDsKK+S4gOasoeiomOaGtiA8IGljaGlqaWtpb2t1XCA7CivnlJ/nlKPniakgPCBzZWlzYW5idXRzdVwgOwor6KGd5YuV6KGM54K6IDwgc2hvdWRvdWtvdWlcIDsKK+ioseWuueevhOWbsiA8IGt5b3lvdWhhbicnaVwgOwor5bm76Kaa55eHIDwgZ2Vua2FrdXNob3VcIDsKK+eUn+eUo+euoeeQhiA8IHNlaXNhbmthbnJpXCA7CivmipXmiYvlipsgPCB0b3VzaHVyeW9rdVwgOwor6ZaJ5Lya5byPIDwgaGVpa2Fpc2hpa2lcIDsKK+ayluepjeWxpCA8IGNodXVzZWtpc291XCA7CivljLvnmYLkvJ3pgZMgPCBpcnlvdWRlbmRvdVwgOwor5YKs55yg6KGTIDwgc2FpbWluanV0c3VcIDsKK+idmeidoOWCmCA8IGtvdW1vcmlnYXNhXCA7CivnqoHosqvlt6XkuosgPCB0b2trYW5rb3VqaVwgOwor5ZCR5pel5oCnIDwga291bmljaGlzZWlcIDsKK+WIneWnvyA8IGhhdHN1c3VnYXRhXCA7CivlkLjlj5bntJkgPCBzdWl0b3JpZ2FtaVwgOwor6YG46ICD5Z+65rqWIDwgc2Vua291a2lqdW5cIDsKK+mrmOipsSA8IHRha2FiYW5hc2hpXCA7Civpq5jlnKfnmoQgPCBrb3VhdHN1dGVraVwgOwor5pyJ5Yqb6ICFIDwgeXV1cnlva3VzaGFcIDsKK+WIpeWVj+mhjCA8IGJldHN1bW9uZGFpXCA7Civku6PmlbDlvI8gPCBkYWlzdXVzaGlraVwgOwor5YWl5riv5paZIDwgbnl1dWtvdXJ5b3VcIDsKK+iGnemgrSA8IGhpemFnYXNoaXJhXCA7CivnhKHlrr/ogIUgPCBtdXNodWt1bW9ub1wgOwor6YO95biC6YqA6KGMIDwgdG9zaGlnaW5rb3VcIDsKK+WOn+WtkOWKmyA8IGdlbnNoaXJ5b2t1XCA7CivmiJDmloflvosgPCBzZWlidW5yaXRzdVwgOwor55S35LiA5Yy5IDwgb3Rva29pcHBpa2lcIDsKK+Whnuagk+eXhyA8IHNva3VzZW5zaG91XCA7CivllYblo7Lmn4QgPCBzaG91YmFpZ2FyYVwgOwor6IW56Laz6aGeIDwgZnVrdXNva3VydWlcIDsKK+adseWNsOW6piA8IGhpZ2FzaGlpbmRvXCA7Civos4fmnKzlipsgPCBzaGlob25yeW9rdVwgOwor5be75p+xIDwgbWFraWJhc2hpcmFcIDsKK+elh+WckuelrSA8IGdpb25tYXRzdXJpXCA7CivkuIrkuqzkuK0gPCBqb3VreW91Y2h1dVwgOwor5YKs55yg6JasIDwgc2FpbWluJyd5YWt1XCA7CivlrqPkvJ3mmKDnlLsgPCBzZW5kZW4nJ2VpZ2FcIDsKK+aFiOWWhOS6i+alrSA8IGppemVuamlneW91XCA7Civnj77osaHlraYgPCBnZW5zaG91Z2FrdVwgOwor56eL5rSl5bO2IDwgYWtpdHN1c2hpbWFcIDsKK+e+iuWwj+WxiyA8IGhpdHN1amlnb3lhXCA7Civoo4Xpo77lk4EgPCBzb3VzaG9rdWhpblwgOwor5Y2D5pel5omLIDwgc2VuJyduaWNoaXRlXCA7CivliqDpgJ/luqboqIggPCBrYXNva3Vkb2tlaVwgOwor5YKy5oWi5LiN6YGcIDwgZ291bWFuZnVzb25cIDsKK+WIkeWLmeS9nOalrSA8IGtlaW11c2FneW91XCA7CivlnLDnkIPopo/mqKEgPCBjaGlreXV1a2lib1wgOwor5qSN5rCR5ZywIDwgc2hva3VtaW5jaGlcIDsKK+mAlOS4reioiOaZgiA8IHRvY2h1dWtlaWppXCA7CivlpJbliIbms4wgPCBnYWlidW5waXRzdVwgOwor6Zqj6L+R5omAIDwgdG9uYXJpa2luam9cIDsKK+WvvumgguinkiA8IHRhaWNob3VrYWt1XCA7Civpq5jlsITnibnnp5EgPCBrb3VzaGF0b2trYVwgOwor6IKp55Sy6aqoIDwga2Vua291a290c3VcIDsKK+S4iemdouWFreiHgiA8IHNhbm1lbnJvcHBpXCA7Civlvq7liIbmlq3pnaIgPCBiaWJ1bmRhbm1lblwgOwor5YiG5aip5L2c55SoIDwgYnVuYmVuc2F5b3VcIDsKK+iFsOW8geW9kyA8IGtvc2hpYmVudG91XCA7Civlj6Plt6fogIUgPCBrdWNoaWdvdXNoYVwgOwor5L+d5YGl5L2T6IKyIDwgaG9rZW50YWlpa3VcIDsKK+aatOi1sOmBi+i7oiA8IGJvdXNvdXVudGVuXCA7CivlupXlipsgPCBzb2tvZGppa2FyYVwgOwor5LiN5LiW5Ye6IDwgZnVzZWlzaHV0c3VcIDsKK+irruWVj+apn+mWoiA8IHNoaW1vbmtpa2FuXCA7CivlhYjml6Xku5ggPCBzYWtpaGlkenVrZVwgOwor6YCP6KaW5YqbIDwgdG91c2hpcnlva3VcIDsKK+WJteioreiAhSA8IHNvdXNldHN1c2hhXCA7CivnlLDoiI7oip3lsYUgPCBpbmFrYXNoaWJhaVwgOwor6YeR6a2a6YmiIDwga2luZ3lvYmFjaGlcIDsKK+eZjOmBuuS8neWtkCA8IGdhbicnaWRlbnNoaVwgOwor55m+6ay85aSc6KGMIDwgaHlha2tpeWFrb3VcIDsKK+eEoeatu+a6gOWhgSA8IG11c2hpbWFucnVpXCA7CivkuoznlarmirXlvZMgPCBuaWJhbnRlaXRvdVwgOwor6KGS5a2m55qEIDwgZ2VuZ2FrdXRla2lcIDsKK+e3j+WLmemDqOmVtyA8IHNvdW11YnVjaG91XCA7Civph5Hnn7PlraYgPCBraW5zZWtpZ2FrdVwgOwor6YeO6I+c55WRIDwgeWFzYWliYXRha2VcIDsKK+iHqueUseiyv+aYkyA8IGppeXV1Ym91ZWtpXCA7CivlubPlkozmnaHpoIUgPCBoZWl3YWpvdWtvdVwgOwor55u05oSf55qEIDwgY2hva2thbnRla2lcIDsKK+WLleeJqeebuCA8IGRvdWJ1dHN1c291XCA7CivmsJfliIbou6Lmj5sgPCBraWJ1bnRlbmthblwgOwor6LOD5LuV5LqLIDwgY2hpbnNoaWdvdG9cIDsKK+eJueioseS4uyA8IHRva2t5b251c2hpXCA7CivlhJLmlZnkuLvnvqkgPCBqdWt5b3VzaHVnaVwgOwor5aWJ57SN54mpIDwgaG91bm91YnV0c3VcIDsKK+Wls+atjOiInuS8jiA8IG9uJyduYWthYnVraVwgOwor5L+d6YeI5LitIDwgaG9zaGFrdWNodXVcIDsKK+mjm+ihjOapn+mbsiA8IGhpa291a2lndW1vXCA7CivpnZLol43oibIgPCBzZWlyYW5zaG9rdVwgOwor6ISF6L+r6ICFIDwga3lvdWhha3VzaGFcIDsKK+WLleeJqeeVjCA8IGRvdWJ1dHN1a2FpXCA7Civot6/pnaLpm7vou4ogPCByb21lbmRlbnNoYVwgOwor6YCa6KGM5LiKIDwgdHN1dWtvdWRvbWVcIDsKK+W8t+WlquiAhSA8IGdvdWRhdHN1c2hhXCA7CivohIXov6vnvaogPCBreW91aGFrdXphaVwgOwor5Y2Y54us6KGM54K6IDwgdGFuZG9rdWtvdWlcIDsKK+Wbo+e1kOaoqSA8IGRhbmtldHN1a2VuXCA7CivoqqDlv4PoqqDmhI8gPCBzZWlzaGluc2VpaVwgOwor57SE5Y2K5bm0IDwgeWFrdWhhbicnbmVuXCA7Civml6XmnKzmlpnnkIYgPCBuaWhvbnJ5b3VyaVwgOwor5oqV56Wo566xIDwgdG91aHlvdWJha29cIDsKK+e0oOS6uuiKuCA8IHNoaXJvdXRvZ2VpXCA7CivnqY3mpbXmgKcgPCBzZWtreW9rdXNlaVwgOwor5qW15bqn5qiZIDwga3lva3V6YWh5b3VcIDsKK+Wvneato+aciCA8IG5lc2hvdWdhdHN1XCA7CivmtZrmuKvmqZ8gPCBzaHVuc2V0c3VraVwgOwor57+86Z2i56mNIDwgeW9rdW1lbnNla2lcIDsKK+eVs+ihqCA8IHRhdGFtaW9tb3RlXCA7Civnt4/nm67pjLIgPCBzb3Vtb2t1cm9rdVwgOwor5qC45Y+N5b+cIDwga2FrdWhhbicnbm91XCA7CivliLbphbjolqwgPCBzZWlzYW4nJ3lha3VcIDsKK+i2heS6uueahCA8IGNob3VqaW50ZWtpXCA7CivnrKzkuIDmtYEgPCBkYWlpY2hpcnl1dVwgOwor5pWF5LqL5p2l5q20IDwga29qaXJhaXJla2lcIDsKK+WGhei8quWWp+WYqSA8IHVjaGl3YWdlbmthXCA7CivotrPmi43lrZAgPCBhc2hpYnlvdXNoaVwgOwor5byx5p2Q5paZIDwgeW93YXphaXJ5b3VcIDsKK+aOpeinpue3miA8IHNlc3Nob2t1c2VuXCA7CivkupznoZ3phbjloakgPCBhc2hvdXNhbicnZW5cIDsKK+S4gOinkueNo+W6pyA8IGlra2FrdWp1dXphXCA7Civlh7rlipsgPCBzaHV0c3VyeW9rdVwgOwor5b255Yqb5aOrIDwgeWFrdXJpa2lzaGlcIDsKK+e1sei9hOiAhSA8IHRvdWthdHN1c2hhXCA7Civlj43kvZPliLbmtL4gPCBoYW50YWlzZWloYVwgOwor5Yy65YqD5pW055CGIDwga3VrYWt1c2VpcmlcIDsKK+S7leS6i+S4rSA8IHNoaWdvdG9jaHV1XCA7CivlnJ/nmb7lp5MgPCBkb2J5YWt1c2hvdVwgOwor5paH5a2m6LOeIDwgYnVuZ2FrdXNob3VcIDsKK+aLm+iri+WbvSA8IHNob3VzZWlrb2t1XCA7Civnt4/lj47lhaUgPCBzb3VzaHV1bnl1dVwgOwor5ris6YeP6Ii5IDwgc29rdXJ5b3VzZW5cIDsKK+aUvuS7u+S4u+e+qSA8IGhvdW5pbnNodWdpXCA7Civpgbrml4/ntabku5ggPCBpem9rdWt5dXVmdVwgOwor5aSJ5L2N5Yi25b6hIDwgaGVuJydpc2VpZ3lvXCA7CivlgJ/lnLDmqKkgPCBzaGFrdWNoaWtlblwgOwor5paH6YOo5aSn6IejIDwgbW9uYnVkYWlqaW5cIDsKK+Wls+aoqeirluiAhSA8IGpva2Vucm9uc2hhXCA7CivkuIvlo6vlrpjlhbUgPCBrYXNoaWthbmhlaVwgOwor5rKW56mN5LiWIDwgY2h1dXNla2lzZWlcIDsKK+S4reemheWvuua5liA8IGNodXV6ZW5qaWtvXCA7Civlj6Pov7Dmm7ggPCBrb3VqdXRzdXNob1wgOwor5q6J6IG36ICFIDwganVuc2hva3VzaGFcIDsKK+ijveWTgeWOn+S+oSA8IHNlaWhpbmdlbmthXCA7CivkurrmsJHkuLvnvqkgPCBqaW5taW5zaHVnaVwgOwor5YuJ5by36YOo5bGLIDwgYmVua3lvdWJleWFcIDsKK+eXheiZq+WusyA8IGJ5b3VjaHV1Z2FpXCA7CivnpZ7lrq7lpJboi5EgPCBqaW5ndXVnYWllblwgOwor5qGc6aSFIDwgc2FrdXJhbW9jaGlcIDsKK+ahnOmjryA8IHNha3VyYW1lc2hpXCA7CivmioDooZPnmoQgPCBnaWp1dHN1dGVraVwgOwor5bCP6Kqs5a62IDwgc2hvdXNldHN1a2FcIDsKK+eJuee0hOW6lyA8IHRva3V5YWt1dGVuXCA7CivkuqTpgJrph48gPCBrb3V0c3V1cnlvdVwgOwor5YWo6Iis5pSv5o+0IDwgemVucGFuc2hpZW5cIDsKK+WwkeWjruacieeCuiA8IHNob3Vzb3V5dXVpXCA7CivntYzlj6PmipXkuI4gPCBrZWlrb3V0b3V5b1wgOwor6YGT5qGI5YaFIDwgbWljaGlhbicnbmFpXCA7Civmj5vmsJfoo4Xnva4gPCBrYW5raXNvdWNoaVwgOwor5YWx5ZKM5Yi25bqmIDwga3lvdXdhc2VpZG9cIDsKK+mBk+aZruiriyA8IG1pY2hpYnVzaGluXCA7Civlpb3oibLogIUgPCBrb3VzaG9rdXNoYVwgOwor5LqM6Kqy5YuJ5by3IDwgbmlrYWJlbmt5b3VcIDsKK+a2iOiHreWJpCA8IHNob3VzaHV1emFpXCA7CivkuojpmLLmjqXnqK4gPCB5b2JvdXNlc3NodVwgOwor54us5ZaE55qEIDwgZG9rdXplbnRla2lcIDsKK+eVsOWbveaDhee3kiA8IGlrb2t1am91Y2hvXCA7Civop6Plg4/lipsgPCBrYWl6b3VyeW9rdVwgOwor6YGL6Lui5YGc5q2iIDwgdW50ZW50ZWlzaGlcIDsKK+aCquWPo+mbkeiogCA8IGFra291em91Z29uXCA7Civou43ms5XkvJrorbAgPCBndW5wb3VrYWlnaVwgOwor55u05Ye6IDwgY2hva3VzaHV0c3VcIDsKK+a1uOmAj+WcpyA8IHNoaW50b3VhdHN1XCA7CivnhrHooYDmvKIgPCBuZWtrZXRzdWthblwgOwor5aSp5Zyw54Sh55SoIDwgdGVuY2hpbXV5b3VcIDsKK+eVs+iBtyA8IHRhdGFtaXNob2t1XCA7CivnlbDluLjmgKfmrLIgPCBpam91c2VpeW9rdVwgOwor5bKp55+z5a2mIDwgZ2Fuc2VraWdha3VcIDsKK+icnOafkeeVkSA8IG1pa2FuYmF0YWtlXCA7Civng4/lpKnni5cgPCBrYXJhc3V0ZW5ndVwgOwor57Sz5aOr55qEIDwgc2hpbnNoaXRla2lcIDsKK+S6uuW3peWPl+iDjiA8IGppbmtvdWp1dGFpXCA7Civml6XmnKzmlofms5UgPCBuaWhvbmJ1bnBvdVwgOwor56qS5oGv5q27IDwgY2hpc3Nva3VzaGlcIDsKK+S4iuS4i+awtOmBkyA8IGpvdWdlc3VpZG91XCA7CivkuInlpKfnr4AgPCBzYW5kYWlzZXRzdVwgOwor5rS75pat5bGkIDwga2F0c3VkYW5zb3VcIDsKK+mKgOihjOWPo+W6pyA8IGdpbmtvdWtvdXphXCA7Civnm67pvLvnq4sgPCBtZWhhbmFkYWNoaVwgOwor5ZGo5pyf5b6LIDwgc2h1dWtpcml0c3VcIDsKK+iNieWGoCA8IGt1c2FrYW5tdXJpXCA7CivpgIDntIXoibIgPCB0YWlrb3VzaG9rdVwgOwor5aSP5pyf5aSn5a2mIDwga2FraWRhaWdha3VcIDsKK+mAo+mCpuitsOS8miA8IHJlbnBvdWdpa2FpXCA7Civmkq7lg4/nrqEgPCBzYXRzdXpvdWthblwgOwor6IW55YWr5YiGIDwgaGFyYWhhY2hpYnVcIDsKK+acq+acn+eXh+eKtiA8IG1ha2tpam91dGFpXCA7CivkupTmrrXli5XoqZ4gPCBnb2RhbmRvdXNoaVwgOwor56uL5rOV5qmf6ZaiIDwgcmlwcG91a2lrYW5cIDsKK+WboOW+quWnkeaBryA8IGluanVua29zb2t1XCA7CivpgLLlhaXot68gPCBzaGluJydueXV1cm9cIDsKK+Wkp+WxseakkumtmiA8IG9vc2Fuc2hvdXVvXCA7CivomY7oppbnnIjnnIggPCBrb3NoaXRhbnRhblwgOwor6IOM5pel5oCnIDwgaGFpaml0c3VzZWlcIDsKK+iDjOmdoumjm+ihjCA8IGhhaW1lbmhpa291XCA7CivlvL7kuLjpgZPot68gPCBkYW5nYW5kb3Vyb1wgOwor6ZaT5aWP5puyIDwga2Fuc291a3lva3VcIDsKK+WEquWFiOWkluiyqCA8IHl1dXNlbmdhaWthXCA7CivlvZPnlKjmvKLlrZcgPCB0b3V5b3VrYW5qaVwgOwor5oyH5Y2X5b25IDwgc2hpbmFuJyd5YWt1XCA7CivohIXov6vnirYgPCBreW91aGFrdWpvdVwgOwor5rCR5pys5Li7576pIDwgbWlucG9uc2h1Z2lcIDsKK+WKn+WQjeW/gyA8IGtvdW15b3VzaGluXCA7Civlm57mlZnlm70gPCBrYWlreW91a29rdVwgOwor6aqo6Iac54KOIDwga290c3VtYWt1ZW5cIDsKK+S6uuW3peWPl+e0myA8IGppbmtvdWp1ZnVuXCA7CivkuLvopoHniankvqEgPCBzaHV5b3VidWtrYVwgOwor5rKi5bq15rysIDwgdGFrdWFuZHp1a2VcIDsKK+agueWIh+iZqyA8IG5la2lyaW11c2hpXCA7Civkurrlt6Xlj5fnsr4gPCBqaW5rb3VqdXNlaVwgOwor6YCB5paZ5YWxIDwgc291cnlvdXRvbW9cIDsKK+W8teacrOS6uiA8IGNob3Vob24nJ25pblwgOwor55m75bGx6Zu76LuKIDwgdG96YW5kZW5zaGFcIDsKK+aaq+WumuaUv+W6nCA8IHphbnRlaXNlaWZ1XCA7CivkuZfou4rlj6MgPCBqb3VzaGFndWNoaVwgOwor5LmX5ZCI6aas6LuKIDwgbm9yaWFpYmFzaGFcIDsKK+S4gOaXpei3ryA8IGljaGluaWNoaWppXCA7CivlnLDos6rlm7MgPCBjaGlzaGl0c3V6dVwgOwor5pyf5oiQ5ZCM55ufIDwga2lzZWlkb3VtZWlcIDsKK+eri+aYjuaIpiA8IHJpdHN1bWVpc2VuXCA7Civmir3osaHoq5YgPCBjaHV1c2hvdXJvblwgOwor5pWj5YWJ5pif6ZuyIDwgc2Fua291c2VpdW5cIDsKK+S7leios+ihqCA8IHNoaXdha2VoeW91XCA7Civpo6LppJPnmYLms5UgPCBraWdhcnlvdWhvdVwgOwor5Zu956iO5bqBIDwga29rdXplaWNob3VcIDsKK+ezuOWBj+aZr+awlyA8IGl0b2hlbmtlaWtpXCA7CivniankvqHlpInli5UgPCBidWtrYWhlbmRvdVwgOwor5oCn5oKq6KqsIDwgc2VpYWt1c2V0c3VcIDsKK+i/kemDiumDveW4giA8IGtpbmtvdXRvc2hpXCA7Civmh5Dpg7fnl4UgPCBrYWlreW91YnlvdVwgOwor5YWs6ZaL5pyf6ZaTIDwga291a2Fpa2lrYW5cIDsKK+WJjeW+jOS4jeimmiA8IHplbmdvZnVrYWt1XCA7CivmupblgpnkvZPmk40gPCBqdW5iaXRhaXNvdVwgOwor5q+N57O75a625pePIDwgYm9rZWlrYXpva3VcIDsKK+atr+enkeWMu+ihkyA8IHNoaWthaWp1dHN1XCA7Civph5HnrqHmpb3lmaggPCBraW5rYW5nYWtraVwgOwor5YiH56OL55Ci56OoIDwgc2Vzc2F0YWt1bWFcIDsKK+S4gOaZguino+mbhyA8IGljaGlqaWthaWtvXCA7Civmn5HmqZjpoZ4gPCBrYW5raXRzdXJ1aVwgOwor6YGL6Lui6LOH6YeRIDwgdW50ZW5zaGlraW5cIDsKK+WhkeaAp+mZkOeVjCA8IHNvc2VpZ2Vua2FpXCA7Civph5HmqKnmlL/msrsgPCBraW5rZW5zZWlqaVwgOwor6Ziy5b6h6YOo6ZqKIDwgYm91Z3lvYnV0YWlcIDsKK+mdmeatouihm+aYnyA8IHNlaXNoaWVpc2VpXCA7CivkuIDpn7Pnr4AgPCBpY2hpb25zZXRzdVwgOwor5YaN5bqm5Y2U6K2wIDwgc2FpZG9reW91Z2lcIDsKK+iEseeCremFuCA8IGRhdHN1dGFuc2FuXCA7CivmlrDmioDooZMgPCBzaGluZ2lqdXRzdVwgOwor6YCG5o6i55+lIDwgZ3lha3V0YW5jaGlcIDsKK+S4gOWIh+WQiOiyoSA8IGlzc2FpZ2Fzc2FpXCA7CivpgbrnlKPnm7jntpogPCBpc2Fuc291em9rdVwgOwor5ou+5b6X6ICFIDwgc2h1dXRva3VzaGFcIDsKK+WuneeJqeauvyA8IGhvdW1vdHN1ZGVuXCA7CivllqvnhZnluK0gPCBraXRzdWVuc2VraVwgOwor5Ya36KGA5ryiIDwgcmVpa2V0c3VrYW5cIDsKK+WhkeaAp+WkieW9oiA8IHNvc2VpaGVua2VpXCA7Civopovmp5jopovnnJ/kvLwgPCBtaXlvdW1pbWFuZVwgOwor5Li75Yqb6ImmIDwgc2h1cnlva3VrYW5cIDsKK+S4gOWkqeWbm+a1tyA8IGl0dGVuc2hpa2FpXCA7Civou4rlpKflt6UgPCBrdXJ1bWFkYWlrdVwgOwor6YGO6aOf55eHIDwga2FzaG9rdXNob3VcIDsKK+mfs+mfv+WKueaenCA8IG9ua3lvdWtvdWthXCA7Civlrr/lkb3oq5YgPCBzaHVrdW1laXJvblwgOwor5YWl6YeR56WoIDwgbnl1dWtpbmh5b3VcIDsKK+WNmOacrOS9jeaApyA8IHRhbmhvbicnaXNlaVwgOwor6Zuy5pWj6Zyn5raIIDwgdW5zYW5tdXNob3VcIDsKK+WFqOS9k+S4u+e+qSA8IHplbnRhaXNodWdpXCA7CivoirHlsYvmlbcgPCBoYW5heWFzaGlraVwgOwor5YWx55m96auqIDwgdG9tb3NoaXJhZ2FcIDsKK+WBnOatouaZgumWkyA8IHRlaXNoaWppa2FuXCA7CivkvY7nqbrpo5vooYwgPCB0ZWlrdXVoaWtvdVwgOwor5Y+j5bqn5L+CIDwga291emFrYWthcmlcIDsKK+eTouiZqyA8IHRlbnRvdW11c2hpXCA7CivnlJ/lrZjnjocgPCBzZWl6b25yaXRzdVwgOwor5pSv5bqm6YOo5bGLIDwgc2hpdGFrdWJleWFcIDsKK+eGiuacrOecjCA8IGt1bWFtb3Rva2VuXCA7Civnm7Tpiq3lvaIgPCBjaG9rdXNlbmtlaVwgOwor5YuV54mp5oCnIDwgZG91YnV0c3VzZWlcIDsKK+WOn+eIhueXhyA8IGdlbmJha3VzaG91XCA7CivliqDlt6Xosr/mmJMgPCBrYWtvdWJvdWVraVwgOwor6KGb5pif5pS+6YCBIDwgZWlzZWlob3Vzb3VcIDsKK+mbu+awl+WIhuinoyA8IGRlbmtpYnVua2FpXCA7Civlt6bkuIsgPCBoaWRhcmlzaGl0YVwgOwor6aKo6Ie05Zyw5Yy6IDwgZnV1Y2hpY2hpa3VcIDsKK+WvhumWieWuueWZqCA8IG1pcHBlaXlvdWtpXCA7CivpgKPluK/lgrXli5kgPCByZW50YWlzYWltdVwgOwor6YeR5Ymb6Jap5aCVIDwga29uZ291c2F0dGFcIDsKK+S4gOS6uuWkqeS4iyA8IGhpdG9yaWRlbmthXCA7Civpm7vli5XlvI8gPCBkZW5kb3VzaGlraVwgOwor5pmC6ZaT5Y+N6LuiIDwgamlrYW5oYW50ZW5cIDsKK+eUn+eUo+WKmyA8IHNlaXNhbnJ5b2t1XCA7Civlia/niafluKsgPCBmdWt1Ym9rdXNoaVwgOwor6IGW6aSQ5byPIDwgc2Vpc2Fuc2hpa2lcIDsKK+mAhumWouaVsCA8IGd5YWt1a2Fuc3V1XCA7CivkuIPkupTkuIkgPCBzaGljaGlnb3NhblwgOwor6aeQ55WZ6LuNIDwgY2h1dXJ5dXVndW5cIDsKK+WUr+eJqeirliA8IHl1aWJ1dHN1cm9uXCA7Civml4XllYbkurogPCB0YWJpc2hvdW5pblwgOwor6KW/5qyn5paH5piOIDwgc2Vpb3VidW5tZWlcIDsKK+S4i+mDqOe1hOe5lCA8IGthYnVzb3NoaWtpXCA7Civnm7jkuZflirnmnpwgPCBzb3Vqb3Vrb3VrYVwgOwor5rC05bmz6Led6ZuiIDwgc3VpaGVpa3lvcmlcIDsKK+eZvuWHuiA8IGh5YWt1c2h1dHN1XCA7CivmioDooZPmlpkgPCBnaWp1dHN1cnlvdVwgOwor6LuN5YKZ5pKk5buDIDwgZ3VuYml0ZXBwYWlcIDsKK+WbuuacieWQjeipniA8IGtveXV1bWVpc2hpXCA7Civnt7Tnv5LluLMgPCByZW5zaHV1Y2hvdVwgOwor6YCg55+z6auYIDwgem91a29rdWRha2FcIDsKK+i7jemaiuW8jyA8IGd1bnRhaXNoaWtpXCA7Civnv7voqLPogIUgPCBob24nJ3lha3VzaGFcIDsKK+a9pOebrumwryA8IHVydW1laXdhc2hpXCA7CivkurrplpPnlo7lpJYgPCBuaW5nZW5zb2dhaVwgOwor6Iy26KSQ6ImyIDwgY2hha2Fzc2hva3VcIDsKK+eiuuWun+W6piA8IGtha3VqaXRzdWRvXCA7CivmnInmqZ/ljJblraYgPCB5dXVraWthZ2FrdVwgOwor57eP5Yqb5oimIDwgc291cnlva3VzZW5cIDsKK+S7sumWk+WApOautSA8IG5ha2FtYW5lZGFuXCA7Civlpb3oibLmvKIgPCBrb3VzaG9rdWthblwgOwor5rip5pWF55+l5pawIDwgb25rb2NoaXNoaW5cIDsKK+WIneaKleeovyA8IGhhdHN1dG91a291XCA7CivkuIfkuIfkuIAgPCBtYW5tYW4nJ2ljaGlcIDsKK+aal+imluijhee9riA8IGFuc2hpc291Y2hpXCA7Civlm73lrrboqabpqJMgPCBrb2trYXNoaWtlblwgOwor6Z2S5p6c5biC5aC0IDwgc2Vpa2FpY2hpYmFcIDsKK+iLpeS+jSA8IHdha2F6YW11cmFpXCA7CivntLPlo6vmnI0gPCBzaGluc2hpZnVrdVwgOwor5rCR5LqL6KOB5YikIDwgbWluamlzYWliYW5cIDsKK+WOn+WtkOWFteWZqCA8IGdlbnNoaWhlaWtpXCA7CivkuIDku5XkuosgPCBoaXRvc2hpZ290b1wgOwor5ZeF56We57WMIDwga3l1dXNoaW5rZWlcIDsKK+iCr+WumuW/nOetlCA8IGtvdXRlaW91dG91XCA7CivlpInmm7TkuI3og70gPCBoZW5rb3VmdW5vdVwgOwor57aZ57aa55qEIDwga2Vpem9rdXRla2lcIDsKK+aWh+WtpueahCA8IGJ1bmdha3V0ZWtpXCA7CivntIDli6LmnKznt5ogPCBraXNlaWhvbnNlblwgOwor5YCZ55SxIDwgc291cm91eW9zaGlcIDsKK+m6u+ijj+iNieWxpSA8IGFzYXVyYXpvdXJpXCA7Civlha3ph43llLEgPCByb2t1anV1c2hvdVwgOwor5Y+w5rm+5Z2K5Li7IDwgdGFpd2FuYm91enVcIDsKK+Wto+WIiumbkeiqjCA8IGtpa2FuemFzc2hpXCA7CivljZfpmL/miKbkuokgPCBuYW4nJ2FzZW5zb3VcIDsKK+eEoee3muWRqOazoiA8IG11c2Vuc2h1dWhhXCA7CivnjoTkurrnrYsgPCBrdXJvdXRvc3VqaVwgOwor6ZW35pyf6YeR5YipIDwgY2hvdWtpa2lucmlcIDsKK+Wbg+WtkOaWuSA8IGhheWFzaGlrYXRhXCA7CivlpKfkurrniakgPCBkYWlqaW5idXRzdVwgOwor6aOb6KGM5qmf562JIDwgaGlrb3VraW5hZG9cIDsKK+WCgOWEoeaUv+W6nCA8IGthaXJhaXNlaWZ1XCA7CivlkIzns7voibIgPCBkb3VrZWlzaG9rdVwgOwor57SF55m957KJIDwgYmVuaW9zaGlyb2lcIDsKK+Wuo+iqk+W8jyA8IHNlbnNlaXNoaWtpXCA7CivluILlpJbpm7voqbEgPCBzaGlnYWlkZW53YVwgOwor6YCj6YKm5pS/5bqcIDwgcmVucG91c2VpZnVcIDsKK+aUvuatjOmrmOWQnyA8IGhvdWtha291Z2luXCA7CivkuK3lkoznhrEgPCBjaHV1d2FuZXRzdVwgOwor5b6u6YeP5YWD57SgIDwgYmlyeW91Z2Vuc29cIDsKK+iLseWtl+aWsOiBniA8IGVpamlzaGluYnVuXCA7CivmuoDouqvlibXnl40gPCBtYW5zaGluc291aVwgOwor56ys5LqM57WE5ZCIIDwgZGFpbmlrdW1pYWlcIDsKK+a2iOiAl+eahCA8IHNob3Vrb3V0ZWtpXCA7CivmlLvmkoPnmoQgPCBrb3VnZWtpdGVraVwgOwor5Z+L6JS154mpIDwgbWFpem91YnV0c3VcIDsKK+WJr+iqreacrCA8IGZ1a3Vkb2t1aG9uXCA7Civpup3pppnpvKAgPCBqYWtvdW5lenVtaVwgOwor5pyo6LOD5a6/IDwga2ljaGluJyd5YWRvXCA7Civlm5vop5Lmn7EgPCBzaGlrYWt1Y2h1dVwgOwor5Lit56m65aOBIDwgY2h1dWt1dWthYmVcIDsKK+WppuS6uuitpuWumCA8IGZ1amlua2Vpa2FuXCA7CivogIPoqLzlraYgPCBrb3VzaG91Z2FrdVwgOwor56ys5LiJ5LiW55WMIDwgZGFpc2Fuc2VrYWlcIDsKK+avmOaymemWgOWkqSA8IGJpc2hhbW9udGVuXCA7CivnpL7kvJrkuLvnvqkgPCBzaGFrYWlzaHVnaVwgOwor5a2m5L2N6KuW5paHIDwgZ2FrdWlyb25idW5cIDsKK+Wun+iovOeahCA8IGppc3Nob3V0ZWtpXCA7CivmlZHmuIjnrZYgPCBreXV1c2Fpc2FrdVwgOwor6LuN5Zu96Kq/IDwgZ3Vua29rdWNob3VcIDsKK+eZveidi+eXhSA8IGhha3Vyb3VieW91XCA7CivnpL7kuqTovp7ku6QgPCBzaGFrb3VqaXJlaVwgOwor5b605YW15b+M6YG/IDwgY2hvdWhlaWtpaGlcIDsKK+eLgueKrOeXhSA8IGt5b3VrZW5ieW91XCA7CivmsJHooYbnmoQgPCBtaW5zaHV1dGVraVwgOwor5qmf5Lya5Z2H562JIDwga2lrYWlraW50b3VcIDsKK+aaq+WumuaOque9riA8IHphbnRlaXNvY2hpXCA7CivmlrnlkJHpn7Pnl7QgPCBob3Vrb3VvbmNoaVwgOwor5LiA5Lih5bm0IDwgaWNoaXJ5b3VuZW5cIDsKK+S4lueVjOmKgOihjCA8IHNla2FpZ2lua291XCA7CivlpKfku4/mrr8gPCBkYWlidXRzdWRlblwgOwor5Yi56YKj55qEIDwgc2V0c3VuYXRla2lcIDsKK+WFqOaoqeWnlOS7uyA8IHplbmtlbicnaW5pblwgOwor5Ly96KmxIDwgdG9naWJhbmFzaGlcIDsKK+iHqueEtuiogOiqniA8IHNoaXplbmdlbmdvXCA7Civli4Xku7vlrpggPCBjaG9rdW5pbmthblwgOwor6KqH5aSn5aaE5oOzIDwga29kYWltb3Vzb3VcIDsKK+WPjOWNgeevgCA8IHNvdWp1dXNldHN1XCA7Civlpb3oibLmnKwgPCBrb3VzaG9rdWJvblwgOwor5YyW57Kn6YGT5YW3IDwga2VzaG91ZG91Z3VcIDsKK+S4jeWkieizh+acrCA8IGZ1aGVuc2hpaG9uXCA7CivnqpLljJbniakgPCBjaGlra2FidXRzdVwgOwor5p2+6aO+IDwgbWF0c3VrYXphcmlcIDsKK+S4ieinkue/vCA8IHNhbmtha3V5b2t1XCA7Civos57lkbPmnJ/pmZAgPCBzaG91bWlraWdlblwgOwor5oiQ6ZW35qCqIDwgc2VpY2hvdWthYnVcIDsKK+efs+adkOWVhiA8IHNla2l6YWlzaG91XCA7CivkvpvoqJfph5EgPCBreW91dGFrdWtpblwgOwor5b+D6IeT5aSW56eRIDwgc2hpbnpvdWdla2FcIDsKK+eMq+mhjeWkpyA8IGJ5b3VnYWt1ZGFpXCA7CivlnLDmlrnoibIgPCBjaGlob3VzaG9rdVwgOwor5bm+5L2V57Sa5pWwIDwga2lrYWt5dXVzdXVcIDsKK+S4iemDqOWQiOWljyA8IHNhbmJ1Z2Fzc291XCA7CivnlJ/kuK3ntpkgPCBuYW1hY2h1dWtlaVwgOwor5ZC45Y+O5YmkIDwga3l1dXNodXV6YWlcIDsKK+iSmeWPpOS6uueoriA8IG1vdWtvamluc2h1XCA7Civpm7vmsJfljJblraYgPCBkZW5raWthZ2FrdVwgOwor5p2x6aKoIDwgaGlnYXNoaWthemVcIDsKK+W7uuiUveeOhyA8IGtlbnBlaXJpdHN1XCA7CivlrqLoprPnmoQgPCBreWFra2FudGVraVwgOwor6LGG6IWQ5LiA5LiBIDwgdG91ZnVpdGNob3VcIDsKK+a2iOiyu+mDveW4giA8IHNob3VoaXRvc2hpXCA7CivkuIvntJrogbcgPCBrYWt5dXVzaG9rdVwgOwor5LiA5LiA44CH55WqIDwgaHlha3V0b29iYW5cIDsKK+S/rumjvuiqniA8IHNodXVzaG9rdWdvXCA7Civlrrbml4/liLbluqYgPCBrYXpva3VzZWlkb1wgOwor55Sf5a2Y5pyf6ZaTIDwgc2Vpem9ua2lrYW5cIDsKK+Wkp+mjn+a8oiA8IHRhaXNob2t1a2FuXCA7CivlhrfnrJHnmoQgPCByZWlzaG91dGVraVwgOwor5pSv57Wm6aGNIDwgc2hpa3l1dWdha3VcIDsKK+S4jeWdh+izqiA8IGZ1a2luc2hpdHN1XCA7Civku6PooajnmoQgPCBkYWloeW91dGVraVwgOwor5YWl6YGT6ZuyIDwgbnl1dWRvdWd1bW9cIDsKK+mHjuiJr+S7leS6iyA8IG5vcmFzaGlnb3RvXCA7CivlhbHpgJrngrkgPCBreW91dHN1dXRlblwgOwor5pel5LyK6L6e5YW4IDwgbmljaGlpaml0ZW5cIDsKK+WFrOW+s+W/gyA8IGtvdXRva3VzaGluXCA7CivkuI3mraPkuZfou4ogPCBmdXNlaWpvdXNoYVwgOwor6Kq/5p+757WQ5p6cIDwgY2hvdXNha2Vra2FcIDsKK+W9ouW8j+irliA8IGtlaXNoaWtpcm9uXCA7CivkuI3lvZPlu4nlo7IgPCBmdXRvdXJlbmJhaVwgOwor6YeR55Kw6aOfIDwga2lua2Fuc2hva3VcIDsKK+WHuuacreaJgCA8IHNodXNzYXRzdWpvXCA7Civmu4XlpJrnn6LpsYggPCBtZXR0YXlhdGFyYVwgOwor5YyX5qW15rW3IDwgaG9ra3lva3VrYWlcIDsKK+WJjeS6uuacqui4jyA8IHplbmppbm1pdG91XCA7CivooYzlrpjluoEgPCBneW91a2FuY2hvdVwgOwor5LiN5b2T5Yip5b6XIDwgZnV0b3VyaXRva3VcIDsKK+WbnuaVmeWvuumZoiA8IGthaWt5b3VqaWluXCA7Civkv53ouqvooZMgPCBob3NoaW5qdXRzdVwgOwor6ZGR6K2Y55y8IDwga2Fuc2hpa2lnYW5cIDsKK+WMl+altea0iyA8IGhva2t5b2t1eW91XCA7CivotaTntKsgPCBha2FtdXJhc2FraVwgOwor6LuN5LqL6KiT57e0IDwgZ3VuamlrdW5yZW5cIDsKK+W9q+WIu+eVjCA8IGNob3Vrb2t1a2FpXCA7Civppqzpub/oqbEgPCBiYWthYmFuYXNoaVwgOwor57eP5ZCI5Y+j5bqnIDwgc291Z291a291emFcIDsKK+eJqee0jeeojiA8IGJ1dHN1bm91emVpXCA7Civpg6HnnIzliLbluqYgPCBndW5rZW5zZWlkb1wgOwor5L2/55So5Y+v6IO9IDwgc2hpeW91a2Fub3VcIDsKK+S4i+Wls+S4rSA8IHNoaW1vam9jaHV1XCA7CivlhoXpg6jnlZnkv50gPCBuYWlidXJ5dXVob1wgOwor5Zyw5LiL5a6kIDwgY2hpa2FzaGl0c3VcIDsKK+WGjeiyqeWItuW6piA8IHNhaWhhbnNlaWRvXCA7CivooqvpgbjmjJnmqKkgPCBoaXNlbmt5b2tlblwgOwor6LK45pys5bGLIDwga2FzaGlob24nJ3lhXCA7CivniankvqHntbHliLYgPCBidWtrYXRvdXNlaVwgOwor6Zi/5ZGG6ZmA576F57WMIDwgYWhvZGFyYWt5b3VcIDsKK+WboOaVsOWIhuinoyA8IGluc3V1YnVua2FpXCA7Civpjb7kubPmtJ4gPCBzaG91bnl1dWRvdVwgOwor6IG35ZOh6YyyIDwgc2hva3VpbnJva3VcIDsKK+eUn+eUn+a1gei7oiA8IHNlaXNlaXJ1dGVuXCA7CivnhKHnn6XokpnmmKcgPCBtdWNoaW1vdW1haVwgOwor5qKv5a2Q6YWSIDwgaGFzaGlnb3pha2VcIDsKK+a7nuWcqOWuoiA8IHRhaXphaWt5YWt1XCA7Civok4Tpm7vmsaAgPCBjaGlrdWRlbmNoaVwgOwor6Kmm5o6Y6ICFIDwgc2hpa3V0c3VzaGFcIDsKK+Wkp+WtpuWvriA8IGRhaWdha3VyeW91XCA7Civlp6vlsI/mnb4gPCBoaW1la29tYXRzdVwgOwor55yf5a6f5ZGzIDwgc2hpbmppdHN1bWlcIDsKK+aXheW9ueiAhSA8IHRhYml5YWt1c2hhXCA7Civlm73msJHnmoQgPCBrb2t1bWludGVraVwgOwor5oim5rKh6ICFIDwgc2VuYm90c3VzaGFcIDsKK+a1geihjOeXhSA8IHJ5dXVrb3VieW91XCA7CivlvavliLvniYggPCBjaG91a29rdWJhblwgOwor5aCV6JC95Z2K5Li7IDwgZGFyYWt1Ym91enVcIDsKK+iInuWPsOW6puiDuCA8IGJ1dGFpZG9reW91XCA7Civlkajml4vmpa0gPCBzaHV1c2VuZ3lvdVwgOwor5Zuj5omH6JmrIDwgdWNoaXdhbXVzaGlcIDsKK+azsOilv+WQjeeUuyA8IHRhaXNlaW1laWdhXCA7Civmn7PohbAgPCB5YW5hZ2lnb3NoaVwgOwor5Y+j5bCP6KiAIDwga3VjaGlrb2dvdG9cIDsKK+azleayu+WbveWutiA8IGhvdWNoaWtva2thXCA7CivlhKrlhYjpoIbkvY0gPCB5dXVzZW5qdW4nJ2lcIDsKK+S7u+WRveW8jyA8IG5pbm1laXNoaWtpXCA7Civpm7vlipvlgrUgPCBkZW5yeW9rdXNhaVwgOwor5Y2Y5L2N57WE5ZCIIDwgdGFuJydpa3VtaWFpXCA7Civlipvli5XnmoQgPCByaWtpZG91dGVraVwgOwor5aSP5bi95a2QIDwgbmF0c3Vib3VzaGlcIDsKK+edoeecoOiWrCA8IHN1aW1pbicneWFrdVwgOwor5Y2455u45aC0IDwgb3Jvc2hpc291YmFcIDsKK+WNsOWIt+alrSA8IGluc2F0c3VneW91XCA7CivnrqHnkIbmg4XloLEgPCBrYW5yaWpvdWhvdVwgOwor5Lyd5bCO546HIDwgZGVuZG91cml0c3VcIDsKK+ibuOWFpemBkyA8IHRha29ueXV1ZG91XCA7Civoq4foqbHlrqQgPCBkYW53YXNoaXRzdVwgOwor5a6M5YWo5Li7576pIDwga2FuemVuc2h1Z2lcIDsKK+WuieaciOe1piA8IHlhc3VnZWtreXV1XCA7CivljJfmpbXmmJ8gPCBob2treW9rdXNlaVwgOwor5b6h6ZyK5LujIDwgbWl0YW1hc2hpcm9cIDsKK+S4g+S4jeaAneitsCA8IG5hbmFmdXNoaWdpXCA7CivmuKzph4/lo6sgPCBzb2t1cnlvdXNoaVwgOwor5Ye66aGY5pmCIDwgc2h1dHN1Z2FuamlcIDsKK+WgseW+qeihjOeCuiA8IGhvdWZ1a3Vrb3VpXCA7CivkuInop5LnkLQgPCBzYW5rYWt1Z290b1wgOwor6YmE5p2h57ayIDwgdGV0c3Vqb3Vtb3VcIDsKK+Wuo+S8neaWh+WPpSA8IHNlbmRlbm1vbmt1XCA7CivkuozmiJDmlofns7sgPCBuaXNlaWJ1bmtlaVwgOwor5L2T5YaF5pmC6KiIIDwgdGFpbmFpZG9rZWlcIDsKK+e/u+ios+aoqSA8IGhvbicneWFrdWtlblwgOwor546J5p2T5a2QIDwgdGFtYWpha3VzaGlcIDsKK+W3pealreWbvSA8IGtvdWd5b3Vrb2t1XCA7CivntYLlpJzpgYvou6IgPCBzaHV1eWF1bnRlblwgOwor5ZGo5peL5paZIDwgc2h1dXNlbnJ5b3VcIDsKK+i/veaSg+aIpiA8IHRzdWlnZWtpc2VuXCA7CivliqDpgJ/pgYvli5UgPCBrYXNva3V1bmRvdVwgOwor5YK355eF5YW1IDwgc2hvdWJ5b3VoZWlcIDsKK+W9vOWyuOahnCA8IGhpZ2FuemFrdXJhXCA7Civlr77mipfpg6jpmoogPCB0YWlrb3VidXRhaVwgOwor57WQ5ama6LK755SoIDwga2Vra29uaGl5b3VcIDsKK+S4gOaZguaJlSA8IGljaGlqaWJhcmFpXCA7CivlhoXlrrnniakgPCBuYWl5b3VidXRzdVwgOwor6LuN5LqL5pS/5qipIDwgZ3VuamlzZWlrZW5cIDsKK+acieapn+i+suazlSA8IHl1dWtpbm91aG91XCA7CivpmLLooZvpg6jplbcgPCBib3VlaWJ1Y2hvdVwgOwor6YGL5Za26LOH6YeRIDwgdW4nJ2Vpc2hpa2luXCA7CivmnIjopovolY7puqYgPCB0c3VraW1pc29iYVwgOwor5Lq655Sf6Iiq6LevIDwgamluc2Vpa291cm9cIDsKK+eEoeS4gOeJqSA8IG11aWNoaW1vdHN1XCA7CivnlJ/lkb3kv53pmbogPCBzZWltZWlob2tlblwgOwor5Yq05YON5YqbIDwgcm91ZG91cnlva3VcIDsKK+W/nOaApeaJi+W9kyA8IG91a3l1dXRlYXRlXCA7CivmnInlvaLnhKHlvaIgPCB5dXVrZWltdWtlaVwgOwor6Iul56u55LqtIDwgd2FrYXRha2V0ZWlcIDsKK+e/u+ios+abuCA8IGhvbicneWFrdXNob1wgOwor5Yiw552A6aeFIDwgdG91Y2hha3Vla2lcIDsKK+eUt+W/gyA8IG90b2tvZ29rb3JvXCA7CivlsJHlm73msJEgPCBzaG91a29rdW1pblwgOwor5Y+X5L+h5Zue6LevIDwganVzaGlua2Fpcm9cIDsKK+WPguiAg+Wbs+abuCA8IHNhbmtvdXRvc2hvXCA7CivnlJ/lrabllY8gPCBuYW1hZ2FrdW1vblwgOwor6Iux6ZuE5bSH5oudIDwgZWl5dXVzdXVoYWlcIDsKK+S7iuaciOWIhiA8IGtvbmdldHN1YnVuXCA7CivliIbmlbDlvI8gPCBidW5zdXVzaGlraVwgOwor5Y+X6aiT55Wq5Y+3IDwganVrZW5iYW5nb3VcIDsKK+mHjei+suS4u+e+qSA8IGp1dW5vdXNodWdpXCA7Civmjojos57lvI8gPCBqdXNob3VzaGlraVwgOwor5o6M5Lit5pysIDwgc2hvdWNodXVib25cIDsKK+ecgeWKm+WMliA8IHNob3VyeW9rdWthXCA7Civku6PooajmoLwgPCBkYWloeW91a2FrdVwgOwor6K235Zu956We56S+IDwgZ29rb2t1amluamFcIDsKK+aYvOiIiOihjCA8IGhpcnVrb3VneW91XCA7Civpu5nnpLrpjLIgPCBtb2t1c2hpcm9rdVwgOwor5piO5rK756We5a6uIDwgbWVpamlqaW5ndXVcIDsKK+WwkeaVsOaEj+imiyA8IHNob3VzdXVpa2VuXCA7CivkurrombEgPCBoaXRvc2hpcmFtaVwgOwor5q+U57+86YCj55CGIDwgaGl5b2t1cmVucmlcIDsKK+aknOWvn+WumCA8IGtlbnNhdHN1a2FuXCA7CivkvpvoqJfogIUgPCBreW91dGFrdXNoYVwgOwor5rW355Sj54mpIDwga2Fpc2FuYnV0c3VcIDsKK+acieacn+W5tOmHkSA8IHl1dWtpbmVua2luXCA7Civov5Tkv6HnlKggPCBoZW5zaGluJyd5b3VcIDsKK+S6jOWFg+aUvumAgSA8IG5pZ2VuaG91c291XCA7Civoh6rkv6HpgY7libAgPCBqaXNoaW5rYWpvdVwgOwor6YGB6LWw5puyIDwgdG9uc291a3lva3VcIDsKK+Wliee0jeebuOaSsiA8IGhvdW5vdXp1bW91XCA7CivovrvlvLfnm5cgPCB0c3VqaWdvdXRvdVwgOwor5Lq66Lqr5b6h5L6bIDwgaGl0b21pZ29rdXVcIDsKK+WFrOW8j+aIpiA8IGtvdXNoaWtpc2VuXCA7Civkv53orbfmpJzmnZ8gPCBob2dva2Vuc29rdVwgOwor5YiG55yM5Zyw5ZuzIDwgYnVua2VuY2hpenVcIDsKK+mdtOS4gOi2syA8IGt1dHN1aXNzb2t1XCA7CivpmL/oq5vov73lvpMgPCBheXV0c3Vpc2hvdVwgOwor6Zu75YWJ55+z54GrIDwgZGVua291c2Vra2FcIDsKK+azoueAvuS4h+S4iCA8IGhhcmFuYmFuam91XCA7Civnm7jkupLplqLkv4IgPCBzb3Vnb2thbmtlaVwgOwor5rWq6Iqx56+AIDwgbmFuaXdhYnVzaGlcIDsKK+WGhemDqOS7leanmCA8IG5haWJ1c2hpeW91XCA7CivlkITlpKflraYgPCBrYWt1ZGFpZ2FrdVwgOwor57eP6YCA5Y20IDwgc291dGFpa3lha3VcIDsKK+earuS4i+azqOWwhCA8IGhpa2FjaHV1c2hhXCA7Civkub7nh6Xph47oj5wgPCBrYW5zb3V5YXNhaVwgOwor55+t5qmf6Zai6YqDIDwgdGFua2lrYW5qdXVcIDsKK+ePvuWcsOaZgumWkyA8IGdlbmNoaWppa2FuXCA7Civlm73msJHmnI0gPCBrb2t1bWluZnVrdVwgOwor5LiA562J6LuN5pu5IDwgaXR0b3VndW5zb3VcIDsKK+Wun+WcqOirliA8IGppdHN1emFpcm9uXCA7CivmlZHmgKXou4ogPCBreXV1a3l1dXNoYVwgOwor6ZaT5o6l56iOIDwga2Fuc2V0c3V6ZWlcIDsKK+eNo+mBkyA8IGtlbW9ub21pY2hpXCA7Civlrrbluq3nlKjlk4EgPCBrYXRlaXlvdWhpblwgOwor5Lmx6ZaL55m6IDwgcmFua2FpaGF0c3VcIDsKK+aJgOW4r+S4uyA8IHNob3RhaW51c2hpXCA7CivpibHlsbHmioDluKsgPCBrb3V6YW5naXNoaVwgOwor6Ziy5a+S6Z20IDwgYm91a2FuZ3V0c3VcIDsKK+S4gOWtkOebuOS8nSA8IGlzc2hpc291ZGVuXCA7CivkuInop5Lmn7EgPCBzYW5rYWt1Y2h1dVwgOwor5LiA6ZurIDwgaGl0b3NoaXp1a3VcIDsKK+S7leios+W4syA8IHNoaXdha2VjaG91XCA7CivnspjnnYDmgKcgPCBuZW5jaGFrdXNlaVwgOwor5pmC6ZmQ56uL5rOVIDwgamlnZW5yaXBwb3VcIDsKK+e+iumbsiA8IGhpdHN1amlndW1vXCA7CivmhJvliKXpm6Loi6YgPCBhaWJldHN1cmlrdVwgOwor5a+G6YCg6YWSIDwgbWl0c3V6b3VzaHVcIDsKK+WbuuWumuizh+eUoyA8IGtvdGVpc2hpc2FuXCA7CivkuIDlpJzmvKwgPCBpY2hpeWFkenVrZVwgOwor5ZKM54us6L6e5YW4IDwgd2Fkb2t1aml0ZW5cIDsKK+eZu+agoeaLkuWQpiA8IHRvdWtvdWt5b2hpXCA7Civmlpzop5Lmn7EgPCBzaGFrYWt1Y2h1dVwgOwor5ryU5aWP5peF6KGMIDwgZW5zb3VyeW9rb3VcIDsKK+abuOeUu+mqqOiRoyA8IHNob2dha290dG91XCA7Civlr77nhafnmoQgPCB0YWlzaG91dGVraVwgOwor5b255Lq66aKoIDwgeWFrdW5pbmthemVcIDsKK+iIueiItualrSA8IHNlbnBha3VneW91XCA7CivpgYvli5XpgbjmiYsgPCB1bmRvdXNlbnNodVwgOwor5a2m5ZyS6YO95biCIDwgZ2FrdWVudG9zaGlcIDsKK+awtOmBk+WxgCA8IHN1aWRvdWt5b2t1XCA7Civlp4vnmbrpp4UgPCBzaGloYXRzdWVraVwgOwor5p2x5rSL5Li7576pIDwgdG91eW91c2h1Z2lcIDsKK+WMl+alteWcjyA8IGhva2t5b2t1a2VuXCA7Civml6XnlKjlk4EgPCBuaWNoaXlvdWhpblwgOwor5Y+N6YCG6ICFIDwgaGFuZ3lha3VzaGFcIDsKK+Wkp+miqOWRguaVtyA8IG9vYnVyb3NoaWtpXCA7CivmnInok4vosqjou4ogPCB5dXVnYWlrYXNoYVwgOwor5pS/5rK76LOH6YeRIDwgc2VpamlzaGlraW5cIDsKK+eZu+mMsua4iCA8IHRvdXJva3V6dW1pXCA7CivlsILlo7LlsYAgPCBzZW5iYWlreW9rdVwgOwor5qip5Yqb6ICFIDwga2Vucnlva3VzaGFcIDsKK+iogOirluapn+mWoiA8IGdlbnJvbmtpa2FuXCA7CivppIrorbflrabmoKEgPCB5b3Vnb2dha2tvdVwgOwor5oGS5LmF55qEIDwga291a3l1dXRla2lcIDsKK+i1sOihjOaZgumWkyA8IHNvdWtvdWppa2FuXCA7Civlj43pgIbnvaogPCBoYW5neWFrdXphaVwgOwor6KmV5L6h5Z+65rqWIDwgaHlvdWtha2lqdW5cIDsKK+eJueetieW4rSA8IHRva3V0b3VzZWtpXCA7CivlhoXmnI3olqwgPCBuYWlmdWt1eWFrdVwgOwor6IeG55eF6aKoIDwgb2t1YnlvdWthemVcIDsKK+S+m+e1puiAhSA8IGt5b3VreXV1c2hhXCA7CivlvavliLvluKsgPCBjaG91a29rdXNoaVwgOwor5paw6IGe6KiY5LqLIDwgc2hpbmJ1bmtpamlcIDsKK+Wkq+WUseWppumajyA8IGZ1c2hvdWZ1enVpXCA7Civpm7vlrZDovp7mm7ggPCBkZW5zaGlqaXNob1wgOwor5rGC5Lq66ZujIDwga3l1dWppbicnbmFuXCA7CivnjL/ovaEgPCBzYXJ1Z3V0c3V3YVwgOwor6Kmm5o6Y5qipIDwgc2hpa3V0c3VrZW5cIDsKK+WQjOaZgumMsumfsyA8IGRvdWppcm9rdW9uXCA7CivnrqHnkIbnpL7kvJogPCBrYW5yaXNoYWthaVwgOwor5LiA6KaW5ZCM5LuBIDwgaXNzaGlkb3VqaW5cIDsKK+ani+mAoOWkieWMliA8IGtvdXpvdWhlbmthXCA7CivlnKjkuqzkuK0gPCB6YWlreW91Y2h1dVwgOwor5pa556iL5byPIDwgaG91dGVpc2hpa2lcIDsKK+mdmeWKm+WtpiA8IHNlaXJpa2lnYWt1XCA7CivlpbPmtYHkvZzlrrYgPCBqb3J5dXVzYWtrYVwgOwor5LiA6Kan6KGoIDwgaWNoaXJhbmh5b3VcIDsKK+WMl+acnemuriA8IGtpdGFjaG91c2VuXCA7Civlj7jms5XliLbluqYgPCBzaGlob3VzZWlkb1wgOwor6ISI5omAIDwgbXlha3Vkb2tvcm9cIDsKK+eZvuWNg+mzpSA8IG1vbW9jaGlkb3JpXCA7Civli6Tli5nkuqTku6MgPCBraW5tdWtvdXRhaVwgOwor55+t57eo5pig55S7IDwgdGFucGVuJydlaWdhXCA7CivpioPliaPooZMgPCBqdXVrZW5qdXRzdVwgOwor5Lya5ZOh6KaP57SEIDwga2FpaW5raXlha3VcIDsKK+e0jemqqOWggiA8IG5vdWtvdHN1ZG91XCA7CivogLPlsI/pqqggPCBqaXNob3Vrb3RzdVwgOwor5aSn6Z2Z6ISIIDwgZGFpam91bXlha3VcIDsKK+e1jOa4iOWKmyA8IGtlaXphaXJ5b2t1XCA7CivlrabljZTkvJogPCBnYWt1a3lvdWthaVwgOwor5Lit5b+D54K5IDwgY2h1dXNoaW50ZW5cIDsKK+S6jOeCueWFiOWPliA8IG5pdGVuc2Vuc2h1XCA7Civlj43miKbkuLvnvqkgPCBoYW5zZW5zaHVnaVwgOwor5pq06JmO6aau5rKzIDwgYm91a29oeW91Z2FcIDsKK+WMl+alteWFiSA8IGhva2t5b2t1a291XCA7Civpo5/lk4HlupcgPCBzaG9rdWhpbnRlblwgOwor6aCY5Y+O5pu4IDwgcnlvdXNodXVzaG9cIDsKK+W3puiFleaKleaJiyA8IHNhd2FudG91c2h1XCA7CivkvYbmm7ggPCB0YWRhc2hpZ2FraVwgOwor5YmN5pyf6Kmm6aiTIDwgemVua2lzaGlrZW5cIDsKK+mAmuefpeihqCA8IHRzdXVjaGloeW91XCA7CivpgKPnmbrpioMgPCByZW5wYXRzdWp1dVwgOwor5pS75pKD5YG0IDwga291Z2VraWdhd2FcIDsKK+Wkp+S4reWwjyA8IGRhaWNodXVzaG91XCA7CivlubPlnYflvosgPCBoZWlraW5yaXRzdVwgOwor6LWk5qOf6JuHIDwgeWFtYWthZ2FzaGlcIDsKK+iiq+mBuOaMmeS6uiA8IGhpc2Vua3lvbmluXCA7CivoprPlv7XnmoQgPCBrYW4nJ25lbnRla2lcIDsKK+WwgumWgOiBtyA8IHNlbm1vbnNob2t1XCA7CivlhbHpgLLkvJogPCBreW91c2hpbmthaVwgOwor5L+h55So54q2IDwgc2hpbicneW91am91XCA7CivnuZTnianmpa0gPCBvcmltb25vZ3lvdVwgOwor6IOM5b6M6Zai5L+CIDwgaGFpZ29rYW5rZWlcIDsKK+iFsOWIgCA8IGtvc2hpZ2F0YW5hXCA7CivotoXnibnmgKUgPCBjaG91dG9ra3l1dVwgOwor6L+U5L+h5paZIDwgaGVuc2hpbnJ5b3VcIDsKK+WjgeaWsOiBniA8IGthYmVzaGluYnVuXCA7CivppJPprLzlpKflsIYgPCBnYWtpZGFpc2hvdVwgOwor55Wq5Y+36KiY5Y+3IDwgYmFuZ291a2lnb3VcIDsKK+iejeino+eGsSA8IHl1dWthaW5ldHN1XCA7Civnr4DljZrlo6sgPCBmdXNoaWhha2FzZVwgOwor6KaL54mp5Lq6IDwga2VuYnV0c3VuaW5cIDsKK+eZu+mMsuaWmSA8IHRvdXJva3VyeW91XCA7Civlkajml4vkurogPCBzaHV1c2VuJyduaW5cIDsKK+WIkeS6i+ijnOWEnyA8IGtlaWppaG9zaG91XCA7Civpq5jpupfoip0gPCBrb3VyYWlzaGliYVwgOwor5LiN6Kaq5YiHIDwgZnVzaGluc2V0c3VcIDsKK+imquWRiue9qiA8IHNoaW5rb2t1emFpXCA7CivolKbntIXokYkgPCB0c3V0YW1vbWlqaVwgOwor5LqU55uu6a6oIDwgZ29tb2t1enVzaGlcIDsKK+e3qOmbhumVtyA8IGhlbnNodXVjaG91XCA7Civlh7rniYjmpa0gPCBzaHVwcGFuZ3lvdVwgOwor6Kq/5pWZ5birIDwgY2hvdWt5b3VzaGlcIDsKK+mAsumnkOi7jSA8IHNoaW5jaHV1Z3VuXCA7CivliKXli5XpmoogPCBiZXRzdWRvdXRhaVwgOwor6YCG5Zm05bCEIDwgZ3lha3VmdW5zaGFcIDsKK+S4gOS9k+WFqOS9kyA8IGl0dGFpemVudGFpXCA7Civkuozlj6Pnm64gPCBmdXRha3VjaGltZVwgOwor5rW36YGL5ZCM55ufIDwga2FpdW5kb3VtZWlcIDsKK+WwguWuiOmYsuihmyA8IHNlbnNodWJvdWVpXCA7CivljZfpmL/pgKPpgqYgPCBuYW4nJ2FyZW5wb3VcIDsKK+mAhuWRvemhjCA8IGd5YWt1bWVpZGFpXCA7CivnmbrooYzpg6jmlbAgPCBoYWtrb3VidXN1dVwgOwor5YiR5LqL6KOB5YikIDwga2VpamlzYWliYW5cIDsKK+WFrOW5s+eEoeengSA8IGtvdWhlaW11c2hpXCA7CivniankvqHmjIfmlbAgPCBidWtrYXNoaXN1dVwgOwor57KY552A5YmkIDwgbmVuY2hha3V6YWlcIDsKK+WIkeS6i+iiq+WRiiA8IGtlaWppaGlrb2t1XCA7CivnlJ/niannlYwgPCBzZWlidXRzdWthaVwgOwor6KiY6ICF5Lya6KaLIDwga2lzaGFrYWlrZW5cIDsKK+W+k+i7jeiomOiAhSA8IGp1dWd1bmtpc2hhXCA7CivnqbrmsJfmirXmipcgPCBrdXVraXRlaWtvdVwgOwor5LqU55uu6aOvIDwgZ29tb2t1bWVzaGlcIDsKK+iyoueJqSA8IG1pdHN1Z2ltb25vXCA7Civnj77ph5HmraPkvqEgPCBnZW5raW5zZWlrYVwgOwor5o6h5o6Y5qipIDwgc2Fpa3V0c3VrZW5cIDsKK+Wkp+WQjOWwj+eVsCA8IGRhaWRvdXNob3VpXCA7CivnlJ/lkb3lgKvnkIYgPCBzZWltZWlyaW5yaVwgOwor5YWo5bmF55qEIDwgemVucHVrdXRla2lcIDsKK+mnhuWLleijhee9riA8IGt1ZG91c291Y2hpXCA7CivlvavliLvliIAgPCBjaG91a29rdXRvdVwgOwor5Y2D6LuN5LiH6aasIDwgc2VuZ3VuYmFuYmFcIDsKK+WkieW5u+iHquWcqCA8IGhlbmdlbmppemFpXCA7CivnoJTnqbblv4MgPCBrZW5reXV1c2hpblwgOwor55u45a++5Li7576pIDwgc291dGFpc2h1Z2lcIDsKK+eLrOWNoOeahCA8IGRva3VzZW50ZWtpXCA7CivphbjkuK3mr5IgPCBzYW5jaHV1ZG9rdVwgOwor6LuN5Yy75a2m5qChIDwgZ3VuJydpZ2Fra291XCA7CivotoXmlrDmmJ8gPCBjaG91c2hpbnNlaVwgOwor6YO95rCR5Lya6aSoIDwgdG9taW5rYWlrYW5cIDsKK+W4guWgtOS+oeWApCA8IHNoaWpvdWthY2hpXCA7CivpoILmiLTniakgPCBjaG91ZGFpbW9ub1wgOwor5bmz5ZKM6KuW6ICFIDwgaGVpd2Fyb25zaGFcIDsKK+Wuv+aziuaJgCA8IHNodWt1aGFrdWpvXCA7CivlsL/ntKDmqLnohIIgPCBueW91c29qdXNoaVwgOwor5aOy5Y2055uKIDwgYmFpa3lha3Vla2lcIDsKK+aOg+mZpOW9k+eVqiA8IHNvdWppdG91YmFuXCA7Civmp4vpgKDlvI8gPCBrb3V6b3VzaGlraVwgOwor5Luj55CG5oim5LqJIDwgZGFpcmlzZW5zb3VcIDsKK+S7o+ihqOS9nCA8IGRhaWh5b3VzYWt1XCA7CivlnLDnm6TmsojkuIsgPCBqaWJhbmNoaW5rYVwgOwor5qeL5oiQ5Li7576pIDwga291c2Vpc2h1Z2lcIDsKK+ato+WkmumdouS9kyA8IHNlaXRhbWVudGFpXCA7CivpgY7lpLHniq8gPCBrYXNoaXRzdWhhblwgOwor57SZ5LiA5p6aIDwga2FtaWljaGltYWlcIDsKK+S/neeojuWcsOWfnyA8IGhvemVpY2hpaWtpXCA7Civlho3oqo3orZggPCBzYWluaW5zaGlraVwgOwor5Lq65ZOh5pW055CGIDwgamluJydpbnNlaXJpXCA7CivpoqjnianoqakgPCBmdXVidXRzdXNoaVwgOwor5Lq66ZaT5Lul5YmNIDwgbmluZ2VuJydpemVuXCA7Civlrp/plqLmlbAgPCBqaXRzdWthbnN1dVwgOwor5aSn5aW954mpIDwgZGFpa291YnV0c3VcIDsKK+S5s+a/gea2siA8IG55dXVkYWt1ZWtpXCA7CivmsLTlhrflvI8gPCBzdWlyZWlzaGlraVwgOwor5bmz6Z2i5Zuz5b2iIDwgaGVpbWVuenVrZWlcIDsKK+W/g+mFjeaApyA8IHNoaW5wYWlzaG91XCA7CivlrqLlrqQgPCBreWFrdXNoaXRzdVwgOwor5a6H5a6Z5peF6KGMIDwgdWNodXVyeW9rb3VcIDsKK+W+jOWni+acqyA8IGF0b3NoaW1hdHN1XCA7Civlhajli6LlipsgPCB6ZW5zZWlyeW9rdVwgOwor6I2Y5ZyS5Yi25bqmIDwgc2hvdWVuc2VpZG9cIDsKK+mbouW/g+eOhyA8IHJpc2hpbnJpdHN1XCA7CivkvpvntabmupAgPCBreW91a3l1dWdlblwgOwor6Ieq56S+6KO95ZOBIDwgamlzaGFzZWloaW5cIDsKK+WIneacn+autemajiA8IHNob2tpZGFua2FpXCA7CivliY3pgJTpgbzpgaAgPCB6ZW50b3J5b3VlblwgOwor5aSn5paH56+AIDwgZGFpYnVuc2V0c3VcIDsKK+S4gOWknOWmuyA8IGhpdG95b2R6dW1hXCA7CivntZDlkIjlrZAgPCBrZXRzdWdvdXNoaVwgOwor5q275Lqh546HIDwgc2hpYm91cml0c3VcIDsKK+aZguWxgOafhCA8IGppa3lva3VnYXJhXCA7CivotaTokaHokITphZIgPCBha2FidWRvdXNodVwgOwor5Y6f5aeL5pmC5LujIDwgZ2Vuc2hpamlkYWlcIDsKK+mFjeW9k+eOhyA8IGhhaXRvdXJpdHN1XCA7CivmlbTpqqjluKsgPCBzZWlrb3RzdXNoaVwgOwor5Y+C6KyA5pys6YOoIDwgc2FuYm91aG9uYnVcIDsKK+Wls+WtkOWkp+eUnyA8IGpvc2hpZGFpc2VpXCA7CivplqLnqI7njocgPCBrYW56ZWlyaXRzdVwgOwor5o6S5aSW6YGL5YuVIDwgaGFpZ2FpdW5kb3VcIDsKK+S4reavkuatuyA8IGNodXVkb2t1c2hpXCA7CivmsLTlubPpo5vooYwgPCBzdWloZWloaWtvdVwgOwor5pyA5YmN5YiXIDwgc2FpemVucmV0c3VcIDsKK+S9juWbnui2o+WRsyA8IHRlaWthaXNodW1pXCA7CivkupLmgbXosr/mmJMgPCBnb2tlaWJvdWVraVwgOwor5Lq66ZaT5Lul5LiKIDwgbmluZ2VuJydpam91XCA7CivlvqHmiYDou4ogPCBnb3Nob2d1cnVtYVwgOwor5YKy5oWi54Sh56S8IDwgZ291bWFuYnVyZWlcIDsKK+S6uuafsSA8IGhpdG9iYXNoaXJhXCA7Civms5Xli5nlp5Tlk6HkvJogPCBob3VtdWlpbmthaVwgOwor5YaF5puy55CDIDwgbmFpa3lva2t5dXVcIDsKK+W+kuaJi+epuuaLsyA8IHRvc2h1a3V1a2VuXCA7Civkupzngq3ljJbniakgPCBhdGFua2FidXRzdVwgOwor5rC05rOz5aSn5LyaIDwgc3VpZWl0YWlrYWlcIDsKK+ino+aVo+iqrCA8IGthaXNhbnNldHN1XCA7CivnlLflpbPlkIzmqKkgPCBkYW5qb2RvdWtlblwgOwor5bm06YeR5Yi25bqmIDwgbmVua2luc2VpZG9cIDsKK+epuui7jeWfuuWcsCA8IGt1dWd1bmtpY2hpXCA7CivlpKflkozmmYLku6MgPCB5YW1hdG9qaWRhaVwgOwor5bu66YCg54mpIDwga2Vuem91YnV0c3VcIDsKK+W4neeOi+WIh+mWiyA8IHRlaW91c2Vra2FpXCA7CivnjK7ooYDou4ogPCBrZW5rZXRzdXNoYVwgOwor5bCP5ZOB6ZuGIDwgc2hvdWhpbnNodXVcIDsKK+mciuWuieWupCA8IHJlaWFuc2hpdHN1XCA7Civlj43mlL/lupzlhZogPCBoYW5zZWlmdXRvdVwgOwor6Zui552A6Zm4IDwgcmljaGFrdXJpa3VcIDsKK+iEium7hOmdkum4muWTpSA8IHNla2lzZWlpbmtvXCA7Civmra/np5Hnl4XpmaIgPCBzaGlrYWJ5b3VpblwgOwor6auY6YeO6IGWIDwga291eWFoaWppcmlcIDsKK+i8ieiyqOWxr+aVsCA8IHNhaWthdG9uc3V1XCA7CivmlbTpq6rliaQgPCBzZWloYXRzdXphaVwgOwor5Yem5LiW6KGTIDwgc2hvc2VpanV0c3VcIDsKK+irluiqrOWnlOWToSA8IHJvbnNldHN1aWluXCA7Civli53miYvmrKHnrKwgPCBrYXR0ZXNoaWRhaVwgOwor56m65oy66ZqK5ZOhIDwga3V1dGVpdGFpaW5cIDsKK+iHqueUsee1jOa4iCA8IGppeXV1a2VpemFpXCA7Civml5fpoK0gPCBoYXRhZ2FzaGlyYVwgOwor5a2Q5bm0IDwgbmV6dW1pZG9zaGlcIDsKK+WFq+W5oeWuriA8IGhhY2hpbWFuZ3V1XCA7CivosqHmlL/noLTntrsgPCB6YWlzZWloYXRhblwgOwor5q2M5ZSx5YqbIDwga2FzaG91cnlva3VcIDsKK+WbnuaKmOaQjSA8IGthaXNldHN1c29uXCA7CivmlL/msrvnjK7ph5EgPCBzZWlqaWtlbmtpblwgOwor6aqo5LuV5LqLIDwgaG9uZXNoaWdvdG9cIDsKK+iHhueXheiAhSA8IG9rdWJ5b3Vtb25vXCA7Civml4vpoqggPCB0c3VtdWppa2F6ZVwgOwor5omL6ZaT5LuV5LqLIDwgdGVtYXNoaWdvdG9cIDsKK+S4gOacrOWLneiyoCA8IGlwcG9uc2hvdWJ1XCA7CivmnJ3po6/liY0gPCBhc2FtZXNoaW1hZVwgOwor6LOq5a6fIDwgc2hpdHN1aml0c3VcIDsKK+WIiuihjOeJqSA8IGthbmtvdWJ1dHN1XCA7CivnnLzpj6HmqYsgPCBtZWdhbmViYXNoaVwgOwor6LO85YWl5YWIIDwga291bnl1dXNha2lcIDsKK+S4remAlOWNiuerryA8IGNodXV0b2hhbnBhXCA7CivpgJrpgY7lhIDnpLwgPCB0c3V1a2FnaXJlaVwgOwor5Li854mpIDwgZG9uYnVyaW1vbm9cIDsKK+W8mOS7geagvCA8IGtvdW5pbmt5YWt1XCA7Civoi7HlrZfpm4blkIggPCBlaWppc2h1dWdvdVwgOwor572y5ZCN6YGL5YuVIDwgc2hvbWVpdW5kb3VcIDsKK+WhkeaAp+aMh+aVsCA8IHNvc2Vpc2hpc3V1XCA7CivlkIjlkIzlirTntYQgPCBnb3Vkb3Vyb3Vzb1wgOwor5p2W5p+xIDwgdHN1ZWhhc2hpcmFcIDsKK+aXp+Wkp+mZuCA8IGt5dXV0YWlyaWt1XCA7CivkuLvnrqHmqZ/plqIgPCBzaHVrYW5raWthblwgOwor5aSp5rCX6YO95ZCIIDwgdGVua2l0c3Vnb3VcIDsKK+WFteWZqOW3peWgtCA8IGhlaWtpa291am91XCA7CivkuIvnnrwgPCBzaGl0YW1hYnV0YVwgOwor6Ki65a+f5pelIDwgc2hpbnNhdHN1YmlcIDsKK+W5s+awkeS4u+e+qSA8IGhlaW1pbnNodWdpXCA7Civlrrbml4/kvJrorbAgPCBrYXpva3VrYWlnaVwgOwor5p2x5a6u6IG3IDwgdG91Z3V1c2hva3VcIDsKK+a4m+WCteWfuumHkSA8IGdlbnNhaWtpa2luXCA7Civorablr5/nvbIgPCBrZWlzYXRzdXNob1wgOwor5YaX6KuH5Y+jIDwgam91ZGFuZ3VjaGlcIDsKK+e5lOeJqeWVhiA8IG9yaW1vbm9zaG91XCA7CivnpZblhYjltIfmi50gPCBzb3NlbnN1dWhhaVwgOwor5YWr6L665b2iIDwgaGFjaGloZW5rZWlcIDsKK+mHneS7leS6iyA8IGhhcmlzaGlnb3RvXCA7CivkuovlpKfmgJ3mg7MgPCBqaWRhaXNoaXNvdVwgOwor5aW95Lq654mpIDwga291amluYnV0c3VcIDsKK+WcsOWgtOeUo+alrSA8IGppYmFzYW5neW91XCA7CivlvoHmnI3mrLIgPCBzZWlmdWt1eW9rdVwgOwor6YCj6YKm5Zu95a62IDwgcmVucG91a29ra2FcIDsKK+eri+aGsuS4u+e+qSA8IHJpa2tlbnNodWdpXCA7CivmnYnmnpcgPCBzdWdpYmF5YXNoaVwgOwor6Kej6Kqs6ICFIDwga2Fpc2V0c3VzaGFcIDsKK+W6g+WRiualrSA8IGtvdWtva3VneW91XCA7Civlhavmlrnnvo7kurogPCBoYXBwb3ViaWppblwgOwor5Ym156uL6ICFIDwgc291cml0c3VzaGFcIDsKK+ino+eGseiWrCA8IGdlbmV0c3V5YWt1XCA7Civml6Xmm5zniYggPCBuaWNoaXlvdWJhblwgOwor5paw5b+r6YCfIDwgc2hpbmthaXNva3VcIDsKK+Wxi+agueijj+mDqOWxiyA8IHlhbmV1cmFiZXlhXCA7CivkuJbnlYzmg4Xli6IgPCBzZWthaWpvdXNlaVwgOwor5LiN5b+r5oyH5pWwIDwgZnVrYWlzaGlzdXVcIDsKK+mBoOa0i+iIqui3ryA8IGVuJyd5b3Vrb3Vyb1wgOwor5Lit5bm06ICFIDwgY2h1dW5lbm1vbm9cIDsKK+WbveWutue1jOa4iCA8IGtva2tha2VpemFpXCA7CivmiLTlhqDlvI8gPCB0YWlrYW5zaGlraVwgOwor6Ieo5pmC5aKX5YiKIDwgcmluaml6b3VrYW5cIDsKK+i7vealreW4qyA8IGthcnV3YXphc2hpXCA7CivkuK3lv4PlnLAgPCBjaHV1c2hpbmNoaVwgOwor5ZWG5oWj57+SIDwgc2hvdWthbnNodXVcIDsKK+eUn+eJqeaIpiA8IHNlaWJ1dHN1c2VuXCA7CivmlZHmgKXms5UgPCBreXV1a3l1dWhvdVwgOwor6aOf5YmN6YWSIDwgc2hva3V6ZW5zaHVcIDsKK+WFrOatpuWQiOS9kyA8IGtvdWJ1Z2F0dGFpXCA7Civmt7HlpJzml48gPCBzaGluJyd5YXpva3VcIDsKK+S6iOiumuacrOe3miA8IHlvc2FuaG9uc2VuXCA7CivmoLnmnKzkuLvnvqkgPCBrb25wb25zaHVnaVwgOwor6L+r5pKD56CyIDwgaGFrdWdla2lob3VcIDsKK+mdnuW4uOitpuaIkiA8IGhpam91a2Vpa2FpXCA7CivkuK3lpK7mlL/lupwgPCBjaHV1b3VzZWlmdVwgOwor6YCy6LuN5LitIDwgc2hpbmd1bmNodXVcIDsKK+WqkumFjOS6uiA8IGJhaXNoYWt1bmluXCA7CivkuKHmgKfnmoQgPCByeW91c2VpdGVraVwgOwor5Yi654q256qB6LW3IDwgc2hpam91dG9ra2lcIDsKK+a9nOWLouWKmyA8IHNlbnNlaXJ5b2t1XCA7CivlhaznmoTmibbliqkgPCBrb3V0ZWtpZnVqb1wgOwor5ZCI5oiQ5qi56ISCIDwgZ291c2VpanVzaGlcIDsKK+WJsuizpuizvOiytyA8IGthcHB1a291YmFpXCA7Civkv53lgaXlrqQgPCBob2tlbnNoaXRzdVwgOwor5bqD5ZGK5paZIDwga291a29rdXJ5b3VcIDsKK+mAn+WKm+W6piA8IHNva3VyeW9rdWRvXCA7Civnm4bmj5Dnga8gPCBib25kam91Y2hpblwgOwor5pyq5p2l5oyH5ZCRIDwgbWlyYWlzaGlrb3VcIDsKK+iHqueUseaUvuS7uyA8IGppeXV1aG91bmluXCA7Civoh6rou6LlkajmnJ8gPCBqaXRlbnNodXVraVwgOwor6IG056We57WMIDwgY2hvdXNoaW5rZWlcIDsKK+i2heWkp+WbvSA8IGNob3V0YWlrb2t1XCA7Civlh7rniYjlhYMgPCBzaHVwcGFubW90b1wgOwor6aas6bm/5YqbIDwgYmFrYWRqaWthcmFcIDsKK+iHquW3seS4u+W8tSA8IGppa29zaHVjaG91XCA7CivmmZLogIUgPCBzYXJhc2hpbW9ub1wgOwor6Zm45Y2K55CDIDwgcmlrdWhhbmt5dXVcIDsKK+WNg+iogOS4h+iqniA8IHNlbmdlbmJhbmdvXCA7CivntbHnjofogIUgPCB0b3Vzb3RzdXNoYVwgOwor5YWs5YWx5b+DIDwga291a3lvdXNoaW5cIDsKK+W+kuatqeertui1sCA8IHRvaG9reW91c291XCA7CivopqrlloToqablkIggPCBzaGluemVuamlhaVwgOwor56qS57Sg5Zu65a6aIDwgY2hpc3Nva290ZWlcIDsKK+S4reWFsei7jSA8IGNodXVreW91Z3VuXCA7CivmvILnmb3liaQgPCBoeW91aGFrdXphaVwgOwor5Y+O5YWl5rqQIDwgc2h1dW55dXVnZW5cIDsKK+a1t+S4iuS/nemZuiA8IGthaWpvdWhva2VuXCA7Civmrr/mp5jpoqggPCB0b25vc2FtYWZ1dVwgOwor5b+D6YWN5LqLIDwgc2hpbnBhaWdvdG9cIDsKK+mjm+ihjOeUsuadvyA8IGhpa291a291YmFuXCA7CivmjIflsI7kuLvkuosgPCBzaGlkb3VzaHVqaVwgOwor55u45LqS6YqA6KGMIDwgc291Z29naW5rb3VcIDsKK+i7jeWPuOS7pOmDqCA8IGd1bnNoaXJlaWJ1XCA7Civoq7jkuovkuIfnq68gPCBzaG9qaWJhbnRhblwgOwor5Yq054G95L+d6Zm6IDwgcm91c2FpaG9rZW5cIDsKK+WkqumZveeGsSA8IHRhaXlvdW5ldHN1XCA7CivliKTmsbrmlocgPCBoYW5rZXRzdWJ1blwgOwor5pmC6Lyq6YeR5YmbIDwgamlyaW5rb25nb3VcIDsKK+aEj+awl+mKt+ayiCA8IGlraXNob3VjaGluXCA7Civkv6Hku7DnmoQgPCBzaGlua291dGVraVwgOwor6Iad5ouN5a2QIDwgaGl6YWJ5b3VzaGlcIDsKK+mWoueojuWbnumBvyA8IGthbnplaWthaWhpXCA7Civnm7Lnm67nmoQgPCBtb3Vtb2t1dGVraVwgOwor56We6YCa5YqbIDwgamludHN1dXJpa2lcIDsKK+WFseWSjOS4u+e+qSA8IGt5b3V3YXNodWdpXCA7CivmgZDlprvnl4UgPCBreW91c2FpYnlvdVwgOwor6Zi/5aSa56aP6aKo6YKqIDwgb3RhZnVrdWthemVcIDsKK+S6iOmYsuaIpuS6iSA8IHlvYm91c2Vuc291XCA7CivphbjmgKflnJ/lo4wgPCBzYW5zZWlkb2pvdVwgOwor5b+g5a6f5bqmIDwgY2h1dWppdHN1ZG9cIDsKK+S/oeS7u+eKtiA8IHNoaW4nJ25pbmpvdVwgOwor5Lq66Lqr5L+d6K23IDwgamluc2hpbmhvZ29cIDsKK+S4reafsSA8IG5ha2FiYXNoaXJhXCA7CivmlrDlj4LogIUgPCBzaGluemFubW9ub1wgOwor5bm06YeR5L+d6Zm6IDwgbmVua2luaG9rZW5cIDsKK+aMh+WQkeiogOiqniA8IHNoaWtvdWdlbmdvXCA7Civlt6Hmn7vpg6jplbcgPCBqdW5zYWJ1Y2hvdVwgOwor55yf54qv5Lq6IDwgc2hpbmhhbicnbmluXCA7Civni7jniLogPCB0YW51a2lqaWppaVwgOwor5L+d6Ki85pyf6ZaTIDwgaG9zaG91a2lrYW5cIDsKK+S4jeazleebo+emgSA8IGZ1aG91a2Fua2luXCA7CivlvqHoi6blirTmp5ggPCBnb2t1cm91c2FtYVwgOwor6K2m5a+f54qsIDwga2Vpc2F0c3VrZW5cIDsKK+iHquayu+Wkp+iHoyA8IGppY2hpZGFpamluXCA7Civnq4vkvZPkuqTlt64gPCByaXR0YWlrb3VzYVwgOwor56uc6aCt6JuH5bC+IDwgcnl1dXRvdWRhYmlcIDsKK+WFhembu+acn+mWkyA8IGp1dWRlbmtpa2FuXCA7Civlj6LmmYLpm6ggPCBtdXJhc2hpZ3VyZVwgOwor5rW36aOf5rSeIDwga2Fpc2hva3Vkb3VcIDsKK+iomOaGtuWqkuS9kyA8IGtpb2t1YmFpdGFpXCA7Civlq6HlrqQgPCBjaGFrdXNoaXRzdVwgOwor5Y+C5YiX6ICFIDwgc2FucmV0c3VzaGFcIDsKK+mkiuitt+aVmeirrSA8IHlvdWdva3lvdXl1XCA7CivkurrmnKzkuLvnvqkgPCBqaW5wb25zaHVnaVwgOwor5rW35rSL5oqV5qOEIDwga2FpeW91dG91a2lcIDsKK+eUn+eJqeWcjyA8IHNlaWJ1dHN1a2VuXCA7CivkvpvntablnLAgPCBreW91a3l1dWNoaVwgOwor5bmy5riJ57ieIDwga2Fuc2hvdWppbWFcIDsKK+eLrOWJteeahCA8IGRva3Vzb3V0ZWtpXCA7CivkuI3pmo/mhI/pgYvli5UgPCBmdXp1aWl1bmRvdVwgOwor5ZKM5q2M5bGx55yMIDwgd2FrYXlhbWFrZW5cIDsKK+WkqumZvembu+azoiA8IHRhaXlvdWRlbnBhXCA7CivnkIbnp5HlpKflraYgPCByaWthZGFpZ2FrdVwgOwor5p+T6Imy5L2TIDwgc2Vuc2hva3V0YWlcIDsKK+W6p+mgremvqCA8IHphdG91a3VqaXJhXCA7Civov5HooZvluKvlm6MgPCBrb25vZXNoaWRhblwgOwor5LiA6KGj5biv5rC0IDwgaWNoaWl0YWlzdWlcIDsKK+izh+acrOS4u+e+qSA8IHNoaWhvbnNodWdpXCA7Civni5DnjL8gPCBraXRzdW5lemFydVwgOwor6Ieq55Sx57WQ5amaIDwgaml5dXVrZWtrb25cIDsKK+W/hemgiOenkeebriA8IGhpc3N1a2Ftb2t1XCA7Civov5Hku6PkuLvnvqkgPCBraW5kYWlzaHVnaVwgOwor5p2x5YyXIDwgaGlnYXNoaWtpdGFcIDsKK+WuiOitt+WkqeS9vyA8IHNodWdvdGVuc2hpXCA7Civml6XmnKzoqp7mloflrZcgPCBuaWhvbmdvbW9qaVwgOwor5L2c5qWt6YOo5LyaIDwgc2FneW91YnVrYWlcIDsKK+mDveW4guWGjeeUnyA8IHRvc2hpc2Fpc2VpXCA7Civnm67nmoToq5YgPCBtb2t1dGVraXJvblwgOwor55yB55Wl5pmCIDwgc2hvdXJ5YWt1amlcIDsKK+S4g+aciCA8IHNoaWNoaWdhdHN1XCA7CivlubznlJ/lmajlrpggPCB5b3VzZWlraWthblwgOwor5b6h55So57WE5ZCIIDwgZ295b3VrdW1pYWlcIDsKK+i7jeS6i+a8lOe/kiA8IGd1bmppZW5zaHV1XCA7Civnn7Pngq3mrrsgPCBzZWtpdGFuZ2FyYVwgOwor5YiG6KOC5oCnIDwgYnVucmV0c3VzZWlcIDsKK+efree4ruW9oiA8IHRhbnNodWt1a2VpXCA7CivkurrpgZPkuLvnvqkgPCBqaW5kb3VzaHVnaVwgOwor5YmN5Y+y5pmC5LujIDwgemVuc2hpamlkYWlcIDsKK+a1t+S4iuWwgemOliA8IGthaWpvdWZ1dXNhXCA7CivmnInogbfogIUgPCB5dXVzaG9rdXNoYVwgOwor5oSP5ZGz5rex6ZW3IDwgaW1pc2hpbmNob3VcIDsKK+S4gOaYlCA8IGhpdG9tdWthc2hpXCA7CivopqrlkozlipsgPCBzaGlud2FyeW9rdVwgOwor5Lqk6YCa6YGV5Y+NIDwga291dHN1dWloYW5cIDsKK+WFiOOAheaciCA8IHNlbnNlbmdldHN1XCA7Civlm5vljYHlhavmiYsgPCB5b25qdXVoYXR0ZVwgOwor5omL5be75a+/5Y+4IDwgdGVtYWtpenVzaGlcIDsKK+acieS9k+eJqSA8IHl1dXRhaWJ1dHN1XCA7CivmnbHlgbQgPCBoaWdhc2hpZ2F3YVwgOwor55+t57Wh55qEIDwgdGFucmFrdXRla2lcIDsKK+WFrOmWi+ism+W6pyA8IGtvdWthaWtvdXphXCA7CivniYfoqIDpmrvlj6UgPCBoZW5nZW5zZWtrdVwgOwor6a2F5Yqb55qEIDwgbWlyeW9rdXRla2lcIDsKK+WMluWtpuW8jyA8IGthZ2FrdXNoaWtpXCA7CivkuIDmkq4gPCBoaXRvdHN1bWFtaVwgOwor5aSq6Zm95pelIDwgdGFpeW91aml0c3VcIDsKK+mrmOmWoueojuWMliA8IGtvdWthbnplaWthXCA7CivpgYvpgIHkvJrnpL4gPCB1bnNvdWdhaXNoYVwgOwor5p2x5a6u5b6h5omAIDwgdG91Z3V1Z29zaG9cIDsKK+W7tua7nuWIqeaBryA8IGVudGFpcmlzb2t1XCA7Civph47nkIPnhrEgPCB5YWt5dXVuZXRzdVwgOwor54Gr54G96K2m5aCxIDwga2FzYWlrZWlob3VcIDsKK+mjvuS7mCA8IGthemFyaXRzdWtlXCA7Civnt4/mjIfmj67lrpggPCBzb3VzaGlraWthblwgOwor5pS+6YCB5pmC6ZaTIDwgaG91c291amlrYW5cIDsKK+eGseawl+eQgyA8IG5ldHN1a2lreXV1XCA7Civnqbrmg7PlipsgPCBrdXVzb3VyeW9rdVwgOwor5pyJ5a6z54Sh55uKIDwgeXV1Z2FpbXVla2lcIDsKK+mdmeWyoeecjCA8IHNoaXp1b2tha2VuXCA7CivlqabkurrllY/poYwgPCBmdWppbm1vbmRhaVwgOwor5pm06ICV6Zuo6KqtIDwgc2Vpa291dWRva3VcIDsKK+WPjemAhuS6uiA8IGhhbmd5YWt1bmluXCA7Civmn5Ppq6rliaQgPCBzZW5wYXRzdXphaVwgOwor5YWo6Lqr55eFIDwgemVuc2hpbmJ5b3VcIDsKK+S4jeaWh+aGsuazlSA8IGZ1YnVua2VucG91XCA7CivohbnoqbHooZMgPCBmdWt1d2FqdXRzdVwgOwor5LiA5a+45rOV5birIDwgaXNzdW5ib3VzaGlcIDsKK+WPr+iDveWLleipniA8IGthbm91ZG91c2hpXCA7CivmtYHph4/oqIggPCByeXV1cnlvdWtlaVwgOwor5a6M5YWo6ZuH55SoIDwga2FuemVua295b3VcIDsKK+e3mue5lOmdoiA8IHNlbnNoaWtpbWVuXCA7CivlrozntZDnt6ggPCBrYW5rZXRzdWhlblwgOwor5Ymv6by76IWU54KOIDwgZnVrdWJpa3V1ZW5cIDsKK+WtpueUn+iovCA8IGdha3VzZWlzaG91XCA7CivpgKDluaPlsYAgPCB6b3VoZWlreW9rdVwgOwor6Kqs5piO5pu4IDwgc2V0c3VtZWlzaG9cIDsKK+iHque1pueOhyA8IGppa3l1dXJpdHN1XCA7CivlpJrlhYPmlL7pgIEgPCB0YWdlbmhvdXNvdVwgOwor5omT54mp5birIDwgdWNoaW1vbm9zaGlcIDsKK+awl+aBr+WlhOWlhCA8IGtpc29rdWVuJydlblwgOwor5oOo5q666ICFIDwgemFuc2F0c3VzaGFcIDsKK+ejr+W3vuedgCA8IGlzb2dpbmNoYWt1XCA7Civph4jov6blpoLmnaUgPCBzaGFrYW55b3JhaVwgOwor5LqI57SE5ZCN57C/IDwgeW95YWt1bWVpYm9cIDsKK+iovOS6uuW4rSA8IHNob3VuaW5zZWtpXCA7Civlq6Hlh7ogPCBjaGFrdXNodXRzdVwgOwor5LiN6LK35ZCM55ufIDwgZnViYWlkb3VtZWlcIDsKK+S4i+W/gyA8IHNoaXRhZ29rb3JvXCA7Civoi6Xnmb3pq6ogPCB3YWthc2hpcmFnYVwgOwor6Z2e6LK35ZCM55ufIDwgaGliYWlkb3VtZWlcIDsKK+aVsOWtpueahCA8IHN1dWdha3V0ZWtpXCA7Civnm7Tlhobmn7EgPCBjaG9rdWVuY2h1dVwgOwor6Kqs5piO5paHIDwgc2V0c3VtZWlidW5cIDsKK+ebuOWvvuaVrOiqniA8IHNvdXRhaWtlaWdvXCA7CivntYzmuIjnibnljLogPCBrZWl6YWl0b2trdVwgOwor5Lu75oSP5Zuj5L2TIDwgbmluJydpZGFudGFpXCA7CivmsLTnlKPniakgPCBzdWlzYW5idXRzdVwgOwor5o6l5pW156e75YuVIDwgc2V0dGVraWlkb3VcIDsKK+aVmeWJh+acrCA8IGt5b3Vzb2t1Ym9uXCA7CivpsKXlr6HlraTni6wgPCBrYW5rYWtvZG9rdVwgOwor5LmZ5aWz5b+DIDwgb3RvbWVnb2tvcm9cIDsKK+ebuOWvvuWjsuiytyA8IGFpdGFpYmFpYmFpXCA7CivnhKHkurrlt6XloLQgPCBtdWppbmtvdWpvdVwgOwor5oim5Yud5Zu9IDwgc2Vuc2hvdWtva3VcIDsKK+WNl+WMl+acnSA8IG5hbmJva3VjaG91XCA7CivlpI/ooaMgPCBuYXRzdWdvcm9tb1wgOwor5bm75oOz5puyIDwgZ2Vuc291a3lva3VcIDsKK+S4jeaPm+e0meW5oyA8IGZ1a2Fuc2hpaGVpXCA7Civml4XoiIjooYwgPCB0YWJpa291Z3lvdVwgOwor55u45LmX5L2c55SoIDwgc291am91c2F5b3VcIDsKK+S6iOeul+S4jei2syA8IHlvc2FuZnVzb2t1XCA7CivosYbpm7vnkIMgPCBtYW1lZGVua3l1dVwgOwor6Kej6Kqs5pu4IDwga2Fpc2V0c3VzaG9cIDsKK+iWrOeQhuS9nOeUqCA8IHlha3VyaXNheW91XCA7Civnv7zmiYvnm64gPCB5b2t1c2h1bW9rdVwgOwor5ama57SE6ICFIDwga29uJyd5YWt1c2hhXCA7Civngrrmm7/nrqHnkIYgPCBrYXdhc2VrYW5yaVwgOwor6YOh5b255omAIDwgZ3VuJyd5YWt1c2hvXCA7Civnn6XorZjlsaQgPCBjaGlzaGlraXNvdVwgOwor5LqL5YmN5Y2U6K2wIDwgamlzZW5reW91Z2lcIDsKK+WOmumhlOeEoeaBpSA8IGtvdWdhbm11Y2hpXCA7Civmkp7mnKjprqsgPCBzaHVtb2t1emFtZVwgOwor56G86YW45pyrIDwgaG91c2FubWF0c3VcIDsKK+WuieWFqOijhee9riA8IGFuemVuc291Y2hpXCA7CivlppbooZPogIUgPCB5b3VqdXRzdXNoYVwgOwor5L2Z55m96aCBIDwgeW9oYWt1cGVlamlcIDsKK+e1seS4gOeahCA8IHRvdWl0c3V0ZWtpXCA7CivnqbrmsJfmhJ/mn5MgPCBrdXVraWthbnNlblwgOwor5rC06YGT5bel5LqLIDwgc3VpZG91a291amlcIDsKK+S4gOe0meWNiumKrSA8IGlzc2hpaGFuc2VuXCA7Civlj43lsITpgYvli5UgPCBoYW5zaGF1bmRvdVwgOwor6Lqr6Zqc6ICFIDwgc2hpbnNob3VzaGFcIDsKK+mjn+WNk+WhqSA8IHNob2t1dGFrdWVuXCA7CivlhavlrZfpq60gPCBoYWNoaWppaGlnZVwgOwor5b6p5rS756WtIDwgZnVra2F0c3VzYWlcIDsKK+S4u+eUo+eJqSA8IHNodXNhbmJ1dHN1XCA7Civnvo7ooZPnmoQgPCBiaWp1dHN1dGVraVwgOwor5aGp6aGe5rq25rayIDwgZW5ydWl5b3Vla2lcIDsKK+ePjeePvuixoSA8IGNoaW5nZW5zaG91XCA7CivkuInnqJzpj6EgPCBzYW5yeW91a3lvdVwgOwor5aSW5Lq66YOo6ZqKIDwgZ2FpamluYnV0YWlcIDsKK+aLnemHkeS4u+e+qSA8IGhhaWtpbnNodWdpXCA7CivlpKfpmbjmo5ogPCB0YWlyaWt1ZGFuYVwgOwor5q6/5qeY6Iq4IDwgdG9ub3NhbWFnZWlcIDsKK+a1t+mjn+W0liA8IGthaXNob2t1Z2FpXCA7CivlhYPnpoToopYgPCBnZW5yb2t1c29kZVwgOwor55Ww5L2T5ZCM5b+DIDwgaXRhaWRvdXNoaW5cIDsKK+S5l+aVsOWKueaenCA8IGpvdXN1dWtvdWthXCA7Civlhajnm5vmmYLku6MgPCB6ZW5zZWlqaWRhaVwgOwor5paH5pWZ5pePIDwgYnVua3lvdXpva3VcIDsKK+mdouWQkeS4jeiDjCA8IG1lbmtvdWZ1aGFpXCA7CivlubPlkozntq3mjIHou40gPCBoZWl3YWlqaWd1blwgOwor5rm/5bqm6KiIIDwgc2hpdHN1ZG9rZWlcIDsKK+WPrOmbhuiAhSA8IHNob3VzaHV1c2hhXCA7CivnqbrnkIbnqbroq5YgPCBrdXVyaWt1dXJvblwgOwor5YWr5qW15ouzIDwgaGFra3lva3VrZW5cIDsKK+S/oeS7sOW/gyA8IHNoaW5rb3VzaGluXCA7CivkurrkuIDlgI0gPCBoaXRvaWNoaWJhaVwgOwor5ZCI6KGG5Zu9IDwgZ2Fzc2h1dWtva3VcIDsKK+apn+mWouWupCA8IGtpa2Fuc2hpdHN1XCA7CivpnZ7luLjpmo7mrrUgPCBoaWpvdWthaWRhblwgOwor5YK355eN6LuN5Lq6IDwgc2hvdWlndW5qaW5cIDsKK+WGt+WNtOa2siA8IHJlaWt5YWt1ZWtpXCA7CivmvIHnjbLpq5ggPCBneW9rYWt1ZGFrYVwgOwor5YWs55So54mpIDwga291eW91YnV0c3VcIDsKK+WNmOeZuumKgyA8IHRhbnBhdHN1anV1XCA7CivkuI3ll5wgPCBidXRhc2hpbmFtaVwgOwor5pyI6LOm6LKp5aOyIDwgZ2VwcHVoYW5iYWlcIDsKK+S4h+S4luS4gOezuyA8IGJhbnNlaWlra2VpXCA7CivnrKzkuozpg6jplbcgPCBkYWluaWJ1Y2hvdVwgOwor6ZuA6JyCIDwgc3V6dW1lYmFjaGlcIDsKK+ihjOWEgOS9nOazlSA8IGd5b3VnaXNhaG91XCA7Civph43liqDnrpfnqI4gPCBqdXVrYXNhbnplaVwgOwor5Ya35Y205rC0IDwgcmVpa3lha3VzdWlcIDsKK+eMrueri+ihqCA8IGtvbmRhdGVoeW91XCA7CivkuIDlv4PkuI3kubEgPCBpc3NoaW5mdXJhblwgOwor6LuN5LqL6KOB5YikIDwgZ3VuamlzYWliYW5cIDsKK+iLpeiNieiJsiA8IHdha2FrdXNhaXJvXCA7CivnhafmmI7lmajlhbcgPCBzaG91bWVpa2lndVwgOwor5LiJ5Zu95LiAIDwgc2FuZ29rdWljaGlcIDsKK+edo+S/g+eKtiA8IHRva3Vzb2t1am91XCA7CivlsY3pmYDmnpfnjosgPCBzaGlkYXJpbicnb3VcIDsKK+S7ruWPl+WPliA8IGthcml1a2V0b3JpXCA7CivpgY7ljrvlrozkuoYgPCBrYWtva2FucnlvdVwgOwor5oim5b6M5qyn5beeIDwgc2VuZ29vdXNodXVcIDsKK+iii+Wwj+i3ryA8IGZ1a3Vyb2tvdWppXCA7Civorablr5/lrpggPCBrZWlzYXRzdWthblwgOwor6aaW6ISz5Lya6K2wIDwgc2h1bm91a2FpZ2lcIDsKK+WutuW6reaWmeeQhiA8IGthdGVpcnlvdXJpXCA7Civml6XmnKzpioDooYwgPCBuaWhvbmdpbmtvdVwgOwor6Ieq54S25b6LIDwgc2hpemVucml0c3VcIDsKK+iBt+WLmee1piA8IHNob2t1bXVreXV1XCA7CivpgaDkuqTov5HmlLsgPCBlbmtvdWtpbmtvdVwgOwor5peL5Zue6YGL5YuVIDwgc2Vua2FpdW5kb3VcIDsKK+eZgumkiuS4rSA8IHJ5b3V5b3VjaHV1XCA7CivlkIjmiJDniakgPCBnb3VzZWlidXRzdVwgOwor5biw5Zu95a2Q5aWzIDwga2lrb2t1c2hpam9cIDsKK+S4ieihjOWNiiA8IG1pa3VkYXJpaGFuXCA7CivooYzmlL/lraYgPCBneW91c2VpZ2FrdVwgOwor5a6f6KGM5YqbIDwgamlra291cnlva3VcIDsKK+mVt+eBq+mJoiA8IG5hZ2FoaWJhY2hpXCA7Civpm4zpm4Tmt5jmsbAgPCBzaGl5dXV0b3V0YVwgOwor5rW36aOf5Y+wIDwga2Fpc2hva3VkYWlcIDsKK+mDteS+v+eJqSA8IHl1dWJpbmJ1dHN1XCA7CivpioDmnKzkvY3liLYgPCBnaW5ob24nJ2lzZWlcIDsKK+epuuawl+aelSA8IGt1dWtpbWFrdXJhXCA7Civlpajlrabph5EgPCBzaG91Z2FrdWtpblwgOwor57WE6aCtIDwga3VtaWdhc2hpcmFcIDsKK+iHqualreiHquW+lyA8IGppZ291aml0b2t1XCA7CivlhaznlJ/mtLsgPCBrb3VzZWlrYXRzdVwgOwor6YGu6JS954mpIDwgc2hhaGVpYnV0c3VcIDsKK+S4u+agvOijnOiqniA8IHNodWtha3Vob2dvXCA7CivntbnnuZTniakgPCBraW51b3JpbW9ub1wgOwor6Iq46KGT6KuWIDwgZ2VpanV0c3Vyb25cIDsKK+WCmOW9ouWZqOWumCA8IHNhbmtlaWtpa2FuXCA7CivolqzlirnniakgPCB5YWtrb3VidXRzdVwgOwor57eR6JmrIDwgbWlkb3JpbXVzaGlcIDsKK+mbu+WMluijveWTgSA8IGRlbmthc2VpaGluXCA7Civluq3ku5XkuosgPCBuaXdhc2hpZ290b1wgOwor6LOH55Sj5L6h5YCkIDwgc2hpc2Fua2FjaGlcIDsKK+aCquizquWMliA8IGFrdXNoaXRzdWthXCA7CivkuK3lpK7nq7bppqwgPCBjaHV1b3VrZWliYVwgOwor55+l6K2Y5Lq6IDwgY2hpc2hpa2lqaW5cIDsKK+i1pOWtl+iyoeaUvyA8IGFrYWppemFpc2VpXCA7Civnmb3lhoXpmpwgPCBoYWt1bmFpc2hvdVwgOwor5pS/5rK75Lqh5ZG9IDwgc2Vpamlib3VtZWlcIDsKK+S6lOWNgeW5tOelrSA8IGdvanV1bmVuc2FpXCA7Civpgbrml4/lubTph5EgPCBpem9rdW5lbmtpblwgOwor5Lq65bel5qCE6aSKIDwgamlua291ZWl5b3VcIDsKK+aTrOWPpOWFuOeahCA8IGdpa290ZW50ZWtpXCA7Civmpb3lpKnnmoQgPCByYWt1dGVudGVraVwgOwor6Zu75rCX5Lya56S+IDwgZGVua2lnYWlzaGFcIDsKK+awl+maj+awl+WEmCA8IGtpenVpa2ltYW1hXCA7CivliKXli5jlrpogPCBiZXRzdWthbmpvdVwgOwor6YeR5p2T5a2QIDwga2FuYWpha3VzaGlcIDsKK+mVt+Wkp+aBryA8IGNob3V0YWlzb2t1XCA7CivogbTlj5bmlpkgPCBjaG91c2h1cnlvdVwgOwor54Sh5Y+N5YuV6YqDIDwgbXVoYW5kb3VqdXVcIDsKK+mBoOW/g+WIhumboiA8IGVuc2hpbmJ1bnJpXCA7CivloLTlpJbppqzliLggPCBqb3VnYWliYWtlblwgOwor6Z2S5bm05pmC5LujIDwgc2VpbmVuamlkYWlcIDsKK+mguOmdmeiEiCA8IGtlaWpvdW15YWt1XCA7CivmvIHnjbLph48gPCBneW9rYWt1cnlvdVwgOwor6Kqe5a2m5YqbIDwgZ29nYWt1cnlva3VcIDsKK+a6luWCmeWupCA8IGp1bmJpc2hpdHN1XCA7CivkuK3lubTlopcgPCBjaHV1ZG9zaGltYVwgOwor6Ieq55Sx5ZWP6aGMIDwgaml5dXVtb25kYWlcIDsKK+a8q+eUu+mbkeiqjCA8IG1hbmdhemFzc2hpXCA7CivkupzpiZvkuK3mr5IgPCBhZW5jaHV1ZG9rdVwgOwor6IOM562L5YqbIDwgaGFpa2lucnlva3VcIDsKK+aJgOacieeJqSA8IHNob3l1dWJ1dHN1XCA7CivnpZblhYjkvJ3mnaUgPCBzb3NlbmRlbnJhaVwgOwor55Sj5Zyf56WeIDwgdWJ1c3VuYWdhbWlcIDsKK+mbquekqyA8IHl1a2l0c3VidXRlXCA7CivmmpfotaToibIgPCBhbnNla2lzaG9rdVwgOwor5LuV56uL54mpIDwgc2hpdGF0ZW1vbm9cIDsKK+S4gOWFmuaUr+mFjSA8IGl0dG91c2hpaGFpXCA7Civml5fmqJkgPCBoYXRhamlydXNoaVwgOwor5aSi54++IDwgeXVtZXV0c3V0c3VcIDsKK+S4g+WbnuW/jCA8IHNoaWNoaWthaWtpXCA7CivkuLvoprPkuLvnvqkgPCBzaHVrYW5zaHVnaVwgOwor5rq26Kej54axIDwgeW91a2FpbmV0c3VcIDsKK+exs+WNgeeykiA8IGtvbWVqdXVyeXV1XCA7CivlkbzlkLjlmajns7sgPCBrb2t5dXVraWtlaVwgOwor54m55rOo5ZOBIDwgdG9rdWNodXVoaW5cIDsKK+mbm+elrSA8IGhpbmFtYXRzdXJpXCA7Civngrrmm7/mipXmqZ8gPCBrYXdhc2V0b3VraVwgOwor5LiA55+l5Y2K6KejIDwgaXRjaGloYW5rYWlcIDsKK+S4jeWumuWGoOipniA8IGZ1dGVpa2Fuc2hpXCA7Civku6PorbDmlL/kvZMgPCBkYWlnaXNlaXRhaVwgOwor5bmz5ZKM5pS75YuiIDwgaGVpd2Frb3VzZWlcIDsKK+S9juS+oeagvOWMliA8IHRlaWtha2FrdWthXCA7Civlj6TmlrDogZ4gPCBmdXJ1c2hpbmJ1blwgOwor6YWN6YGU5Lq6IDwgaGFpdGF0c3VuaW5cIDsKK+S6rOS6uuW9oiA8IGt5b3VuaW5neW91XCA7CivogpjmjpvmpIXlrZAgPCBoaWppa2FrZWlzdVwgOwor5YWs5YuZ54G95a6zIDwga291bXVzYWlnYWlcIDsKK+aZr+awl+W+queSsCA8IGtlaWtpanVua2FuXCA7CivplqLkv4Lms5Xopo8gPCBrYW5rZWlob3VraVwgOwor6LOA6Kme5Lqk5o+bIDwgZ2FzaGlrb3VrYW5cIDsKK+iAleWcsOaVtOeQhiA8IGtvdWNoaXNlaXJpXCA7CivlrozntZDmlocgPCBrYW5rZXRzdWJ1blwgOwor6KGo6KOP5LiA5L2TIDwgaHlvdXJpaXR0YWlcIDsKK+WPjeWvvuiJsiA8IGhhbnRhaXNob2t1XCA7CivllYblk4HlraYgPCBzaG91aGluZ2FrdVwgOwor5aW06Zq36Kej5pS+IDwgZG9yZWlrYWlob3VcIDsKK+WFpeWwhOinkiA8IG55dXVzaGFrYWt1XCA7CivmtojpmLLluoEgPCBzaG91Ym91Y2hvdVwgOwor6Zi/5aSa56aP6LGGIDwgb3RhZnVrdW1hbWVcIDsKK+Wlh+m6l+aJgCA8IGtpcmVpZG9rb3JvXCA7CivlpbPml7EgPCBvbicnbmFoaWRlcmlcIDsKK+WxseWQueiJsiA8IHlhbWFidWtpaXJvXCA7CivkvIHmpa3mlbTlgpkgPCBraWd5b3VzZWliaVwgOwor6LuN5LqL6KGM5YuVIDwgZ3Vuamlrb3Vkb3VcIDsKK+aJk+aSg+eOhyA8IGRhZ2VraXJpdHN1XCA7CivlnLDmlrnoh6rmsrsgPCBjaGlob3VqaWNoaVwgOwor6KuL5rGC6aGNIDwgc2Vpa3l1dWdha3VcIDsKK+eZvuW5tOelrSA8IGh5YWt1bmVuc2FpXCA7CivkuJbkv5fkuLvnvqkgPCBzZXpva3VzaHVnaVwgOwor6auY54Kt57Sg6Yu8IDwga291dGFuc29rb3VcIDsKK+aKkeeVmeiAhSA8IHlva3VyeXV1c2hhXCA7Civpo5/pgKPmmJ8gPCBzaG9rdXJlbnNlaVwgOwor6JC95pyt5YCkIDwgcmFrdXNhdHN1bmVcIDsKK+iHqueEtuWKmyA8IHNoaXplbnJ5b2t1XCA7CivmnInmqZ/ogqXmlpkgPCB5dXVraWhpcnlvdVwgOwor56eY5pu45a6kIDwgaGlzaG9zaGl0c3VcIDsKK+WNg+eni+alvSA8IHNlbnNodXVyYWt1XCA7Civmr5TkvovphY3liIYgPCBoaXJlaWhhaWJ1blwgOwor5o6i56m25b+DIDwgdGFua3l1dXNoaW5cIDsKK+WPjeWvvumBi+WLlSA8IGhhbnRhaXVuZG91XCA7Civmt7vku5jmm7jpoZ4gPCB0ZW5wdXNob3J1aVwgOwor5oGL5oSb6YGK5oivIDwgcmVuJydhaXl1dWdpXCA7Civlia/npL7plbcgPCBmdWt1c2hhY2hvdVwgOwor5oqV5bCE5Y6f55CGIDwgdG91c2hhZ2VucmlcIDsKK+Wkp+iogOWjruiqniA8IHRhaWdlbnNvdWdvXCA7CivmnIjkvovkvJogPCBnZXRzdXJlaWthaVwgOwor5pWw5pel6ZaTIDwgc3V1aml0c3VrYW5cIDsKK+WRveWQjeW8jyA8IG1laW1laXNoaWtpXCA7CivmjIflsI7lipsgPCBzaGlkb3VyeW9rdVwgOwor5oSf6Kaa55qEIDwga2Fua2FrdXRla2lcIDsKK+mHkeacrOS9jeWItiA8IGtpbmhvbicnaXNlaVwgOwor6YCg6Kqe5oiQ5YiGIDwgem91Z29zZWlidW5cIDsKK+WGjemWi+eZuiA8IHNhaWthaWhhdHN1XCA7CivlhaXlrabpm6MgPCBueXV1Z2FrdW5hblwgOwor5YiG5oqY5a2mIDwgYnVuc2VraWdha3VcIDsKK+eZvuenkei+nuWFuCA8IGh5YWtrYWppdGVuXCA7Civoi6XovKnogIUgPCBqYWt1aGFpbW9ub1wgOwor5LiH5Luj5LiN5piTIDwgYmFuZGFpZnVla2lcIDsKK+W5heWkieiqvyA8IGhhYmFoZW5jaG91XCA7CivljbHpmbrop5LluqYgPCBraWtlbmtha3Vkb1wgOwor5YyW5a2m5YW15ZmoIDwga2FnYWt1aGVpa2lcIDsKK+Wls+W/gyA8IG9uJyduYWdva29yb1wgOwor5bCP5oOR5pifIDwgc2hvdXdha3VzZWlcIDsKK+a8ouWtl+WItumZkCA8IGthbmppc2VpZ2VuXCA7CivlubTlip/liLbluqYgPCBuZW5rb3VzZWlkb1wgOwor5Lq654mp5YOPIDwgamluYnV0c3V6b3VcIDsKK+i6gemsseeXhSA8IHNvdXV0c3VieW91XCA7Civnm7TovLjlhaUgPCBjaG9rdXl1bnl1dVwgOwor5L+D6YCy5YmkIDwgc29rdXNoaW56YWlcIDsKK+a1t+W6leeBq+WxsSA8IGthaXRlaWthemFuXCA7CivpmpTpnbTmjrvnl5IgPCBrYWtrYXNvdXlvdVwgOwor5o+h6a6oIDwgbmlnaXJpenVzaGlcIDsKK+m8u+WHuuihgCA8IGJpc2h1a2tldHN1XCA7CivpnZnlv4MgPCBzaGl6dWdva29yb1wgOwor6Z2e5oim6KuW6ICFIDwgaGlzZW5yb25zaGFcIDsKK+aApemAsuWFmiA8IGt5dXVzaGludG91XCA7CivkuIfkuJbkuI3mmJMgPCBiYW5zZWlmdWVraVwgOwor5YaN55Sf57mK57atIDwgc2Fpc2Vpc2VuJydpXCA7CivpgYvou6Lns7vntbEgPCB1bnRlbmtlaXRvdVwgOwor5Lu75oSP5ZCM6KGMIDwgbmluJydpZG91a291XCA7CivpmqPnlLogPCB0b25hcmltYWNoaVwgOwor6Ieo5pmC5Zu95LyaIDwgcmluamlrb2trYWlcIDsKK+ippumok+acn+mWkyA8IHNoaWtlbmtpa2FuXCA7Civph5HlqZrlvI8gPCBraW5rb25zaGlraVwgOwor5rqA6Imm6aO+IDwgbWFua2Fuc2hva3VcIDsKK+W5tOWKn+WKoOS/uCA8IG5lbmtvdWthaG91XCA7Civlv5zmj7Tlm6PplbcgPCBvdWVuZGFuY2hvdVwgOwor5aSn5pmmIDwgb290c3Vnb21vcmlcIDsKK+WCjei/t+aDkSA8IGhhdGFtZWl3YWt1XCA7Civou43ljLvnt4/nm6MgPCBndW4nJ2lzb3VrYW5cIDsKK+aYvOmjn+aZgiA8IGNodXVzaG9rdWppXCA7CivoirjooZPnpa0gPCBnZWlqdXRzdXNhaVwgOwor5oWI5ZaE5Zuj5L2TIDwgaml6ZW5kYW50YWlcIDsKK+iHque/kuaZgumWkyA8IGppc2h1dWppa2FuXCA7Civmj6Hpo68gPCBuaWdpcmltZXNoaVwgOwor5Zu95a626KOc5YSfIDwga29ra2Fob3Nob3VcIDsKK+ebm+iAheW/heihsCA8IHNlaWphaGlzc3VpXCA7CivlrabnlJ/mnI0gPCBnYWt1c2VpZnVrdVwgOwor5Lq65paH5Li7576pIDwgamluYnVuc2h1Z2lcIDsKK+mbu+ipseeVquWPtyA8IGRlbndhYmFuZ291XCA7CivlsLHmpa3lnLAgPCBzaHV1Z3lvdWNoaVwgOwor6KGo56S654mpIDwgaHlvdWppYnV0c3VcIDsKK+i7ouWFpeeUnyA8IHRlbicnbnl1dXNlaVwgOwor55CG6KuW5L2T57O7IDwgcmlyb250YWlrZWlcIDsKK+WFpeWtpumHkSA8IG55dXVnYWt1a2luXCA7Civml6XmnKzmtbfmup0gPCBuaWhvbmthaWtvdVwgOwor57WM5bi45Yip55uKIDwga2Vpam91cmlla2lcIDsKK+mdqeaWsOezuyA8IGtha3VzaGlua2VpXCA7CivlvJXosqzovp7ku7sgPCBpbnNla2lqaW5pblwgOwor6Zm95qW157eaIDwgeW91a3lva3VzZW5cIDsKK+WHuua8lOiAhSA8IHNodXRzdWVuc2hhXCA7CivkvJrorbDlrqQgPCBrYWlnaXNoaXRzdVwgOwor5Yem5aWz6Iiq5rW3IDwgc2hvam9rb3VrYWlcIDsKK+mZuOmBi+WxgCA8IHJpa3V1bmt5b2t1XCA7Civov73lvrTph5EgPCB0c3VpY2hvdWtpblwgOwor5q666I+M5YqbIDwgc2Fra2lucnlva3VcIDsKK+aKleWuv+iAhSA8IHRvdXNodWt1c2hhXCA7CivmlrDluoHoiI4gPCBzaGluY2hvdXNoYVwgOwor5Ya35Y205YmkIDwgcmVpa3lha3V6YWlcIDsKK+S4gOi7kuS4gOi7kiA8IGlra2VuJydpa2tlblwgOwor6YGK6Kan5a6iIDwgeXV1cmFua3lha3VcIDsKK+m7hOmHkeiZqyA8IGtvZ2FuZW11c2hpXCA7CivllY/nrZTnhKHnlKggPCBtb25kb3VtdXlvdVwgOwor6YGL5ZG96KuW6ICFIDwgdW5tZWlyb25zaGFcIDsKK+m7kuatu+eXhSA8IGtva3VzaGlieW91XCA7Civpg7Xkvr/lsYAgPCB5dXViaW5reW9rdVwgOwor6I+c56iu5qKF6ZuoIDwgbmF0YW5lZHp1eXVcIDsKK+iqsuWkluaOiOalrSA8IGthZ2FpanVneW91XCA7Civlj43lsITnjocgPCBoYW5zaGFyaXRzdVwgOwor6Zuj5rCR5biw6YKEIDwgbmFubWlua2lrYW5cIDsKK+WBtuWDj+egtOWjiiA8IGd1dXpvdWhha2FpXCA7CivmlZnnmofluoEgPCBreW91a291Y2hvdVwgOwor6Iul6bOl5Li8IDwgd2FrYWRvcmlkb25cIDsKK+aMh+ekuuijhee9riA8IHNoaWppc291Y2hpXCA7CivlronlhajlnLDluK8gPCBhbnplbmNoaXRhaVwgOwor6Ieq5bex6KSH6KO9IDwgamlrb2Z1a3VzZWlcIDsKK+e+juihk+WVhiA8IGJpanV0c3VzaG91XCA7Civku5bkurrooYzlhIAgPCB0YW5pbmd5b3VnaVwgOwor5Yik5a6Y6LSU5bGTIDwgaG91Z2FuYmlpa2lcIDsKK+a7tOWumumHjyA8IHRla2l0ZWlyeW91XCA7CivlnKfmkL7nqbrmsJcgPCBhc3Nha3VrdXVraVwgOwor56We5a2m6ICFIDwgc2hpbmdha3VzaGFcIDsKK+Wvhui8uOWFpSA8IG1pdHN1eXVueXV1XCA7CivlgaXlurfnrqHnkIYgPCBrZW5rb3VrYW5yaVwgOwor6LiP5YiH55WqIDwgZnVtaWtpcmliYW5cIDsKK+ippumok+mjm+ihjCA8IHNoaWtlbmhpa291XCA7CivnlJ/nlKPpgY7libAgPCBzZWlzYW5rYWpvdVwgOwor5YmN5aWP5puyIDwgemVuc291a3lva3VcIDsKK+iAs+m8u+WSveWWieenkSA8IGppYmlpbmtvdWthXCA7CivnlJ/nkIbkvJHmmocgPCBzZWlyaWt5dXVrYVwgOwor5Lqk6Zqb5aC06KOPIDwga291c2Fpam91cmlcIDsKK+ijuOS4gOiyqyA8IGhhZGFrYWlra2FuXCA7CivlpY/ps7Tmm7IgPCBzb3VtZWlreW9rdVwgOwor6LGK6IKl5pys57eaIDwgaG91aGlob25zZW5cIDsKK+engeeUn+a0uyA8IHNoaXNlaWthdHN1XCA7CivntKvoibIgPCBtdXJhc2FraWlyb1wgOwor5Yik5pat6KaP5rqWIDwgaGFuZGFua2lqdW5cIDsKK+eUsumJhOiJpiA8IGtvdXRldHN1a2FuXCA7Civlv4Poh5Pnl4UgPCBzaGluem91YnlvdVwgOwor6Yys6YeR6KGTIDwgcmVua2luanV0c3VcIDsKK+m7kuWGhemanCA8IGtva3VuYWlzaG91XCA7CivmnInorZjogIUgPCB5dXVzaGlraXNoYVwgOwor5bGx5rSl5rOiIDwgeWFtYXRzdW5hbWlcIDsKK+iiluePjeacrCA8IHNodXVjaGluYm9uXCA7CivlpKnos4foi7HpgoEgPCB0ZW5zaGllaW1haVwgOwor5YWI552A6aCGIDwgc2VuY2hha3VqdW5cIDsKK+aKteaKl+mBi+WLlSA8IHRlaWtvdXVuZG91XCA7Civpg7Xkvr/liIfmiYsgPCB5dXViaW5raXR0ZVwgOwor5a6f5ZCN6KmeIDwgaml0c3VtZWlzaGlcIDsKK+mYsumjn+WJpCA8IGJvdXNob2t1emFpXCA7Civlr77np7Dou7ggPCB0YWlzaG91amlrdVwgOwor6L+R5pel54K5IDwga2luaml0c3V0ZW5cIDsKK+eUsOWckumDveW4giA8IGRlbicnZW50b3NoaVwgOwor6KGj5paZ5ZOB5bqXIDwgaXJ5b3VoaW50ZW5cIDsKK+S6jOmDqOWQiOWUsSA8IG5pYnVnYXNzaG91XCA7Civol43mmbbnn7MgPCByYW5zaG91c2VraVwgOwor5aWz5a2Q5L6bIDwgb24nJ25ha29kb21vXCA7CivmsqHpo5/lrZAgPCBtb3NzaG9rdXNoaVwgOwor6Zu75a2Q6aCt6ISzIDwgZGVuc2hpenVub3VcIDsKK+S/rue5leS4rSA8IHNodXV6ZW5jaHV1XCA7CivlibLos6bosqnlo7IgPCBrYXBwdWhhbmJhaVwgOwor6ICz5a2m5ZWPIDwgbWltaWdha3Vtb25cIDsKK+mqqOiRo+i2o+WRsyA8IGtvdHRvdXNodW1pXCA7Civou43lgpnliLbpmZAgPCBndW5iaXNlaWdlblwgOwor6ZW357KS57GzIDwgY2hvdXJ5dXVtYWlcIDsKK+mBi+WLleS4jei2syA8IHVuZG91YnVzb2t1XCA7CivliLbpmZDmvKLlrZcgPCBzZWlnZW5rYW5qaVwgOwor56We5L+h5b+DIDwga2FtaXNoaW5qaW5cIDsKK+eEoeWPjeWLleegsiA8IG11aGFuZG91aG91XCA7CivlpajlrabnlJ8gPCBzaG91Z2FrdXNlaVwgOwor5Y6f5Zug5LiN5piOIDwgZ2VuJydpbmZ1bWVpXCA7CivoprPlhbXlvI8gPCBrYW5wZWlzaGlraVwgOwor6Iul5bm05Z6LIDwgamFrdW5lbmdhdGFcIDsKK+i7veiHquWLlei7iiA8IGtlaWppZG91c2hhXCA7CivpvKDmtbfosZogPCBuZXp1bWlpcnVrYVwgOwor54uQ55aR6YCh5behIDwga29naXNodW5qdW5cIDsKK+mbhuepjeWgtCA8IHNodXVzZWtpam91XCA7CivmjIfkurrlvaIgPCB5dWJpbmluZ3lvdVwgOwor56iL5bqm5ZWP6aGMIDwgdGVpZG9tb25kYWlcIDsKK+imj+WumuaJk+W4rSA8IGtpdGVpZGFzZWtpXCA7Civmm7LoirjluKsgPCBreW9rdWdlaXNoaVwgOwor6bqm57KS6IWrIDwgYmFrdXJ5dXVzaHVcIDsKK+ebrueahOWcsCA8IG1va3V0ZWtpY2hpXCA7CivpoqjntIDntIrkubEgPCBmdXVraWJpbnJhblwgOwor5a2m55Sf5a+uIDwgZ2FrdXNlaXJ5b3VcIDsKK+WQiOaIkOWKmyA8IGdvdXNlaXJ5b2t1XCA7CivluILlj4LkuovkvJogPCBzaGlzYW5qaWthaVwgOwor6KiY5oa26KOF572uIDwga2lva3Vzb3VjaGlcIDsKK+aPkOS+m+WBtCA8IHRlaWt5b3VnYXdhXCA7Civpm6rluocgPCB5dWtpYmlzYXNoaVwgOwor6Zu75rCX5Lyd5bCOIDwgZGVua2lkZW5kb3VcIDsKK+a1t+Wklua0vuWFtSA8IGthaWdhaWhhaGVpXCA7CivlpKnos6bkurrmqKkgPCB0ZW5wdWppbmtlblwgOwor5oe45Z6C6YGL5YuVIDwga2Vuc3VpdW5kb3VcIDsKK+elnuenmOS4u+e+qSA8IHNoaW5waXNodWdpXCA7CivkuZfpmY3lrqIgPCBqb3Vrb3VreWFrdVwgOwor5YaF6Kaq546LIDwgbmFpc2hpbicnbm91XCA7CivpgaDmha7kvJrph4ggPCBlbnJ5b2VzaGFrdVwgOwor57Oe5YuJ5by3IDwga3Vzb2Jlbmt5b3VcIDsKK+aal+WPt+aJi+azlSA8IGFuZ291c2h1aG91XCA7Civnn6Lntpnml6kgPCB5YXRzdWdpYmF5YVwgOwor6ZW36KmxIDwgbmFnYWJhbmFzaGlcIDsKK+mBi+i8uOWkp+iHoyA8IHVuJyd5dWRhaWppblwgOwor6Z2e6KuW55CG55qEIDwgaGlyb25yaXRla2lcIDsKK+WkieabsueCuSA8IGhlbmt5b2t1dGVuXCA7Civlj7Pnv7zlm6PkvZMgPCB1eW9rdWRhbnRhaVwgOwor6ZW35Zub6KeSIDwgbmFnYXNoaWtha3VcIDsKK+imquWIh+awlyA8IHNoaW5zZXRzdWdpXCA7Civkv53lgaXooZvnlJ8gPCBob2tlbicnZWlzZWlcIDsKK+ebl+WTgeaVheiytyA8IHRvdWhpbmtvYmFpXCA7Civlia/npZ7ntYwgPCBmdWt1c2hpbmtlaVwgOwor6JGJ57eR5L2TIDwgeW91cnlva3V0YWlcIDsKK+mdmeatoui7jOmBkyA8IHNlaXNoaWtpZG91XCA7Civmhbbmh4nnvqnlob4gPCBrZWlvdWdpanVrdVwgOwor5b+r5YiA5Lmx6bq7IDwga2FpdG91cmFubWFcIDsKK+iPiuS6uuW9oiA8IGtpa3VuaW5neW91XCA7CivnjqnlvITniakgPCBnYW5yb3VidXRzdVwgOwor5Y+j6KiA6JGJIDwga3VjaGlrb3RvYmFcIDsKK+mbhuWQiOeahCA8IHNodXVnb3V0ZWtpXCA7Civoh7Pov5Hot53pm6IgPCBzaGlraW5reW9yaVwgOwor5Ymy5b2T6aGNIDwgd2FyaWF0ZWdha3VcIDsKK+W4uOe/kueahCA8IGpvdXNodXV0ZWtpXCA7CivmkI3lrrPkv53pmbogPCBzb25nYWlob2tlblwgOwor5qeL5oiQ6KaB57SgIDwga291c2VpeW91c29cIDsKK+aEn+Wcp+e0mSA8IGthbicnYXRzdXNoaVwgOwor5Y2U6K2w5LqL6aCFIDwga3lvdWdpamlrb3VcIDsKK+e0heeMv+WtkCA8IGJlbmltYXNoaWtvXCA7CivlvL7mgKfnjocgPCBkYW5zZWlyaXRzdVwgOwor6Iie5Y+w5L+z5YSqIDwgYnV0YWloYWl5dXVcIDsKK+WNseapn+S4gOmrqiA8IGtpa2lpcHBhdHN1XCA7CivljLvlrabpm5HoqowgPCBpZ2FrdXphc3NoaVwgOwor5reh57SF6ImyIDwgdGFua291c2hva3VcIDsKK+afs+ihjOadjiA8IHlhbmFnaWdvdXJpXCA7CivniankvqHmsLTmupYgPCBidWtrYXN1aWp1blwgOwor6LWk5Y2B5a2X6ZmEIDwgc2VraWp1dWppZnVcIDsKK+aJtumkiuWutuaXjyA8IGZ1eW91a2F6b2t1XCA7CivmtYHli5XnmoQgPCByeXV1ZG91dGVraVwgOwor55Kw5aKD5bqBIDwga2Fua3lvdWNob3VcIDsKK+eri+aGsuaUv+ayuyA8IHJpa2tlbnNlaWppXCA7CivmmIbomavlraYgPCBrb25jaHV1Z2FrdVwgOwor5bi45pel6aCDIDwgdHN1bmVoaWdvcm9cIDsKK+avlOe/vOWhmiA8IGhpeW9rdWR6dWthXCA7Civmt7fmiJDniakgPCBrb25zZWlidXRzdVwgOwor5Lq65bel6IeT5ZmoIDwgamlua291em91a2lcIDsKK+a6tuino+WKmyA8IHlvdWthaXJ5b2t1XCA7CivntJnnpKsgPCBrYW1pdHN1YnV0ZVwgOwor5pWZ6IKy6ZW3IDwga3lvdWlrdWNob3VcIDsKK+eEvOWNtOeCiSA8IHNob3VreWFrdXJvXCA7Civnpa3mlL/kuIDoh7QgPCBzYWlzZWlpdGNoaVwgOwor55m95qqA5rK5IDwgYnlha3VkYW4nJ3l1XCA7Civnib3lvJXlipsgPCBrZW4nJ2lucnlva3VcIDsKK+ims+WFieWxgCA8IGthbmtvdWt5b2t1XCA7CivkuI3oqIDlrp/ooYwgPCBmdWdlbmppa2tvdVwgOwor5YWl5a2m6ICFIDwgbnl1dWdha3VzaGFcIDsKK+WbveWtpuiAhSA8IGtva3VnYWt1c2hhXCA7Civku5Xkuovpg6jlsYsgPCBzaGlnb3RvYmV5YVwgOwor5rS75YuV6KqMIDwga2F0c3Vkb3VzaGlcIDsKK+WHuuWcn+WTgSA8IHNodXRzdWRvaGluXCA7CivntJnooajntJkgPCBrYW1pYnlvdXNoaVwgOwor6Kaz5YWJ5a6iIDwga2Fua291a3lha3VcIDsKK+aIkOS6uuaYoOeUuyA8IHNlaWppbicnZWlnYVwgOwor6Ieq55Sx5Za25qWtIDwgaml5dXVlaWd5b3VcIDsKK+WFseWtpuWItiA8IGt5b3VnYWt1c2VpXCA7Civpto4gPCBraWt1aXRhZGFraVwgOwor5qiZ5rqW6Kqk5beuIDwgaHlvdWp1bmdvc2FcIDsKK+e+nuaBpeW/gyA8IHNodXVjaGlzaGluXCA7Civlj4LorbDpmaLorbDlk6EgPCBzYW5naWluZ2lpblwgOwor6Jmr55y86Y+hIDwgbXVzaGltZWdhbmVcIDsKK+iogOiRieizqiA8IGtvdG9iYWppY2hpXCA7CivlrabogIXohpogPCBnYWt1c2hhaGFkYVwgOwor6YCa5L+h57ayIDwgdHN1dXNoaW5tb3VcIDsKK+aZruWPiueOhyA8IGZ1a3l1dXJpdHN1XCA7CivkubPlhZDohJrmsJcgPCBueXV1amlrYWtrZVwgOwor5Y2D6bOl6LazIDwgY2hpZG9yaWFzaGlcIDsKK+i7jemcgOW3peWgtCA8IGd1bmp1a291am91XCA7Civnm7jliqDlubPlnYcgPCBzb3VrYWhlaWtpblwgOwor57KX6KO95Lmx6YCgIDwgc29zZWlyYW56b3VcIDsKK+W+oeWQjeW+oeeSvSA8IGd5b21laWd5b2ppXCA7Civoo7jomasgPCBoYWRha2FtdXNoaVwgOwor6Lui6L2N5omLIDwgdGVudGV0c3VzaHVcIDsKK+izvOiyt+WKmyA8IGtvdWJhaXJ5b2t1XCA7CivlhaXos57ogIUgPCBueXV1c2hvdXNoYVwgOwor6Zm46LuN55yBIDwgcmlrdWd1bnNob3VcIDsKK+S7ruWHuuaJgCA8IGthcmlzaHVzc2hvXCA7CivmlofmsrvkuLvnvqkgPCBidW5jaGlzaHVnaVwgOwor5Y+k54mp5ZWGIDwga29idXRzdXNob3VcIDsKK+iHqueEtua3mOaxsCA8IHNoaXplbnRvdXRhXCA7CivlrrblroXmjZzmn7sgPCBrYXRha3Vzb3VzYVwgOwor5pei5oiQ5qaC5b+1IDwga2lzZWlnYWluZW5cIDsKK+aVtOWCmeW3peWgtCA8IHNlaWJpa291am91XCA7Civlr77nqbrnoLLngasgPCB0YWlrdXVob3VrYVwgOwor5rue56m65pmC6ZaTIDwgdGFpa3V1amlrYW5cIDsKK+ixoeW+tOipqSA8IHNob3VjaG91c2hpXCA7CivkuIvljZTorbAgPCBzaGl0YWt5b3VnaVwgOwor5Y+s6ZuG5LukIDwgc2hvdXNodXVyZWlcIDsKK+iyv+aYk+i1pOWtlyA8IGJvdWVraWFrYWppXCA7CivkuIDoqIDlsYXlo6sgPCBpY2hpZ2Vua29qaVwgOwor54Wn5Lya5YWIIDwgc2hvdWthaXNha2lcIDsKK+Wxi+S4iuW6reWckiA8IG9rdWpvdXRlaWVuXCA7CivloIbnqY3lraYgPCB0YWlzZWtpZ2FrdVwgOwor6Kqt6Kej5YqbIDwgZG9ra2Fpcnlva3VcIDsKK+mfs+WjsOihqOiomCA8IG9uc2VpaHlvdWtpXCA7CivohbjntZDmoLggPCBjaG91a2Vra2FrdVwgOwor5bm05oGw5aW9IDwgdG9zaGlrYWtrb3VcIDsKK+Wvqee+juS4u+e+qSA8IHNoaW5iaXNodWdpXCA7CivpgJrnlKPnnIEgPCB0c3V1c2Fuc2hvdVwgOwor5b+c55So5ZWP6aGMIDwgb3V5b3Vtb25kYWlcIDsKK+S6kuaBtemWoueojiA8IGdva2Vpa2FuemVpXCA7CivnnaPlrablrpggPCB0b2t1Z2FrdWthblwgOwor5oeQ5Lit54mpIDwga2FpY2h1dW1vbm9cIDsKK+mAmuS/oeekviA8IHRzdXVzaGluc2hhXCA7Civou5/mgKfkuIvnlrMgPCBuYW5zZWlnZWthblwgOwor5Zu96Kqe6L6e5YW4IDwga29rdWdvaml0ZW5cIDsKK+WFrOiqjeWAmeijnCA8IGtvdW5pbmtvdWhvXCA7CivnlJ/lubTmnIjml6UgPCBzZWluZW5nYXBwaVwgOwor5aWH562W57im5qiqIDwga2lzYWt1anV1b3VcIDsKK+WFieWtpuaWh+WtlyA8IGtvdWdha3Vtb2ppXCA7CivljYPnn7PoiLkgPCBzZW5nb2t1YnVuZVwgOwor5YGc6LuK5pmC6ZaTIDwgdGVpc2hhamlrYW5cIDsKK+mHkeeJm+WuriA8IGtpbmd5dXVreXV1XCA7CivmjqXlkIjlrZAgPCBzZXRzdWdvdXNoaVwgOwor55qH5a6k6LK7IDwga291c2hpdHN1aGlcIDsKK+WFseWSjOaUv+ayuyA8IGt5b3V3YXNlaWppXCA7Civlm73luqvlgrXmqKkgPCBrb2trb3NhaWtlblwgOwor6L+95b6056iOIDwgdHN1aWNob3V6ZWlcIDsKK+WjsOW4r+aooeWGmSA8IHNlaXRhaW1vc2hhXCA7CivmnIDlpKfpmZDluqYgPCBzYWlkYWlnZW5kb1wgOwor5bGA5aSW6ICFIDwga3lva3VnYWlzaGFcIDsKK+WFq+WIhumfs+espiA8IGhhY2hpYnVvbnB1XCA7Civnv4znv4zlubQgPCB5b2t1eW9rdW5lblwgOwor54m55Yil5qmfIDwgdG9rdWJldHN1a2lcIDsKK+a3oeikkOiJsiA8IHRhbmthc3Nob2t1XCA7CivlgY/ln7fnl4UgPCBoZW5zaHV1YnlvdVwgOwor5Luu5oOz56m66ZaTIDwga2Fzb3VrdXVrYW5cIDsKK+Wtpue/kuiAhSA8IGdha3VzaHV1c2hhXCA7CivpmLLpn7PlrqQgPCBib3VvbnNoaXRzdVwgOwor5bmz5oiQ5pmC5LujIDwgaGVpc2VpamlkYWlcIDsKK+WIqeebiuekvuS8miA8IHJpZWtpc2hha2FpXCA7CivogonkvZPnmoQgPCBuaWt1dGFpdGVraVwgOwor5a625bqt6Kiq5ZWPIDwga2F0ZWlob3Vtb25cIDsKK+aWmemHkeihqCA8IHJ5b3VraW5oeW91XCA7CivlhoXpmbjlm70gPCBuYWlyaWt1a29rdVwgOwor5YyF5a655YqbIDwgaG91eW91cnlva3VcIDsKK+WHuua8geacnyA8IHNodXRzdWd5b2tpXCA7CivoloTliKnlpJrlo7IgPCBoYWt1cml0YWJhaVwgOwor5Li75Lq65b25IDwgc2h1amluJyd5YWt1XCA7CivmsJHkuLvkuLvnvqkgPCBtaW5zaHVzaHVnaVwgOwor5aWz5oCn5ZCN6KmeIDwgam9zZWltZWlzaGlcIDsKK+aEm+aGjuS9teWtmCA8IGFpem91aGVpc29uXCA7CivmiJDlip/njocgPCBzZWlrb3VyaXRzdVwgOwor5YWs5pyJ54mpIDwga291eXV1YnV0c3VcIDsKK+ims+iJpuW8jyA8IGthbmthbnNoaWtpXCA7Civlj43lsITkvZznlKggPCBoYW5zaGFzYXlvdVwgOwor5pyI5aSc6Iy4IDwgdHN1a2l5b3Rha2VcIDsKK+acieS6i+eri+azlSA8IHl1dWppcmlwcG91XCA7CivlhaXlrabnlJ8gPCBueXV1Z2FrdXNlaVwgOwor5piO5b6M5pelIDwgbXlvdWdvbmljaGlcIDsKK+a0u+WLleiAhSA8IGthdHN1ZG91c2hhXCA7CivkuInljp/oibIgPCBzYW5nZW5zaG9rdVwgOwor55m65aOw5Zmo5a6YIDwgaGFzc2Vpa2lrYW5cIDsKK+WBj+Wft+eLgiA8IGhlbnNodXVreW91XCA7CivlqZrnpLzooaPoo4UgPCBrb25yZWlpc2hvdVwgOwor5Lit5aSu56qB56C0IDwgY2h1dW91dG9wcGFcIDsKK+S4iemgreaUv+ayuyA8IHNhbnRvdXNlaWppXCA7CivljbHpmbrlnLDluK8gPCBraWtlbmNoaXRhaVwgOwor5YyW5a2m5L2c55SoIDwga2FnYWt1c2F5b3VcIDsKK+eEoemWk+WcsOeNhCA8IG11Z2Vuamlnb2t1XCA7CivoqbHkuK0gPCBoYW5hc2hpY2h1dVwgOwor5b6A5b6p5YiH56ymIDwgb3VmdWt1a2lwcHVcIDsKK+iSi+S7i+efsyA8IHNob3VrYWlzZWtpXCA7CivnlLPlkYrmm7ggPCBzaGlua29rdXNob1wgOwor5a2Y5Zyo55CG55SxIDwgc29uemFpcml5dXVcIDsKK+e3qOesoOiMuCA8IGFtaWdhc2F0YWtlXCA7CivlsI/ljYrml6UgPCBrb2hhbicnbmljaGlcIDsKK+mdnuekvuS6pOeahCA8IGhpamFrb3V0ZWtpXCA7CivooajlvbDnirYgPCBoeW91c2hvdWpvdVwgOwor5YaF6Ki85LqLIDwgbmFpc2hvdWdvdG9cIDsKK+WwgeW7uuWItuW6piA8IGhvdWtlbnNlaWRvXCA7CivoqLrmlq3lraYgPCBzaGluZGFuZ2FrdVwgOwor5Y2X5qW154K5IDwgbmFua3lva3V0ZW5cIDsKK+S6uui6q+S6i+aVhSA8IGppbnNoaW5qaWtvXCA7Civmm7LlsITnoLIgPCBreW9rdXNoYWhvdVwgOwor5YWs6ZaL5o2c5p+7IDwga291a2Fpc291c2FcIDsKK+aIkeeUsOW8leawtCA8IGdhZGVuJydpbnN1aVwgOwor5YuV5L2c6KiY6YyyIDwgZG91c2FraXJva3VcIDsKK+WFiOeZuumaiiA8IHNlbnBhdHN1dGFpXCA7CivmiJDlsaTngavlsbEgPCBzZWlzb3VrYXphblwgOwor5oCn55Sf5rS7IDwgc2Vpc2Vpa2F0c3VcIDsKK+aknOmWsuWumCA8IGtlbicnZXRzdWthblwgOwor5rWB6YCa56iOIDwgcnl1dXRzdXV6ZWlcIDsKK+WIqeebiumFjeW9kyA8IHJpZWtpaGFpdG91XCA7CivmtJfmv6/ns4ogPCBzZW50YWt1bm9yaVwgOwor5Y2K55u057eaIDwgaGFuY2hva3VzZW5cIDsKK+a0l+a/r+exoCA8IHNlbnRha3VrYWdvXCA7CivmjqXlkIjliaQgPCBzZXRzdWdvdXphaVwgOwor5LiA5omA5oe45ZG9IDwgaXNzaG9rZW5tZWlcIDsKK+i+sueUo+eJqSA8IG5vdXNhbmJ1dHN1XCA7CivmupDms4noqrLnqI4gPCBnZW5zZW5rYXplaVwgOwor5pS/5rK757WQ56S+IDwgc2VpamlrZXNzaGFcIDsKK+WhteWfgyA8IGNoaXJpaG9rb3JpXCA7CivpqI7ppqzmsJHml48gPCBraWJhbWluem9rdVwgOwor6ZqU5LiW6YG65LydIDwga2FrdXNlaWlkZW5cIDsKK+WPpOmBk+WFt+WxiyA8IGZ1cnVkb3VndXlhXCA7CivlkLnlpY/mpb3lmaggPCBzdWlzb3VnYWtraVwgOwor5qmf6YqD5o6D5bCEIDwga2lqdXVzb3VzaGFcIDsKK+aOpeWPl+WbvSA8IHNldHN1anVrb2t1XCA7CivmrablrrblsYvmlbcgPCBidWtleWFzaGlraVwgOwor5Y2X5qW15rW3IDwgbmFua3lva3VrYWlcIDsKK+edoeecoOaZgumWkyA8IHN1aW1pbmppa2FuXCA7CivntZDohpzngo4gPCBrZXRzdW1ha3VlblwgOwor6Kaq552m5LyaIDwgc2hpbmJva3VrYWlcIDsKK+ehq+WMlueJqSA8IHJ5dXVrYWJ1dHN1XCA7Civmg7Plg4/lipsgPCBzb3V6b3VyeW9rdVwgOwor6Iq46KGT5ZOBIDwgZ2VpanV0c3VoaW5cIDsKK+eEoeiomOWQjeagqiA8IG11a2ltZWlrYWJ1XCA7CivljZfmpbXmtIsgPCBuYW5reW9rdXlvdVwgOwor5LqL5YuZ57eP6ZW3IDwgamltdXNvdWNob3VcIDsKK+WGjea4rOmHjyA8IHNhaXNva3VyeW91XCA7CivkuLvmsrvlirnog70gPCBzaHVqaWtvdW5vdVwgOwor5aSp5rSl5b6h56WWIDwgYW1hdHN1bWlveWFcIDsKK+awl+ixoeihm+aYnyA8IGtpc2hvdWVpc2VpXCA7CivmnInlirnmnJ/pmZAgPCB5dXVrb3VraWdlblwgOwor6L6y5aW06Kej5pS+IDwgbm91ZG9rYWlob3VcIDsKK+mcsuWHuuioiCA8IHJvc2h1dHN1a2VpXCA7Civlv4Poh5Ppurvnl7ogPCBzaGluem91bWFoaVwgOwor6YWU55Sf5aSi5q27IDwgc3Vpc2VpbXVzaGlcIDsKK+eEoeazleWcsOW4ryA8IG11aG91Y2hpdGFpXCA7CivooZfpoK3li5/ph5EgPCBnYWl0b3Vib2tpblwgOwor55WZ5a2m55SfIDwgcnl1dWdha3VzZWlcIDsKK+awtOS7leS6iyA8IG1penVzaGlnb3RvXCA7Civlrabnv5LnlKggPCBnYWt1c2h1dXlvdVwgOwor6I2S5ZSQ54Sh56i9IDwga291dG91bXVrZWlcIDsKK+azqOWwhOmHnSA8IGNodXVzaGFiYXJpXCA7CivoprPlr5/ogIUgPCBrYW5zYXRzdXNoYVwgOwor5qCE6aSK5LiN6LazIDwgZWl5b3VmdXNva3VcIDsKK+mAmuS/oeashCA8IHRzdXVzaGlucmFuXCA7CivlkI3oqonluILmsJEgPCBtZWl5b3NoaW1pblwgOwor6LuN5LqL5ZCM55ufIDwgZ3Vuamlkb3VtZWlcIDsKK+acieWKueS9nOeUqCA8IHl1dWtvdXNheW91XCA7CivkupTmnIjpl4cgPCBzYXRzdWtpeWFtaVwgOwor55m6552A5aC0IDwgaGF0Y2hha3Vqb3VcIDsKK+WFiOmBo+mDqOmaiiA8IHNlbmtlbmJ1dGFpXCA7CivlmInoqIDlloTooYwgPCBrYWdlbnplbmtvdVwgOwor6Ly45Ye656iOIDwgeXVzaHV0c3V6ZWlcIDsKK+WQiOWQjOS8muitsCA8IGdvdWRvdWthaWdpXCA7Civotbfmrbvlm57nlJ8gPCBraXNoaWthaXNlaVwgOwor6YCP6KaW55S75rOVIDwgdG91c2hpZ2Fob3VcIDsKK+eEoemKreaXheihjCA8IG11c2Vucnlva291XCA7CivlsLHogbfmmYIgPCBzaHV1c2hva3VqaVwgOwor5L+d5a6J6Kit5YKZIDwgaG9hbnNldHN1YmlcIDsKK+edgOecvOeCuSA8IGNoYWt1Z2FudGVuXCA7CivnqbrlhrflvI8gPCBrdXVyZWlzaGlraVwgOwor5rq25o6l5belIDwgeW91c2V0c3Vrb3VcIDsKK+S4uOacqOapiyA8IG1hcnVraWJhc2hpXCA7CivlhoXpg6jpl5jkuokgPCBuYWlidXRvdXNvdVwgOwor5LiN5q2j6J6N6LOHIDwgZnVzZWl5dXVzaGlcIDsKK+WxseW9ouecjCA8IHlhbWFnYXRha2VuXCA7CivkuqTpnIrooZMgPCBrb3VyZWlqdXRzdVwgOwor5ryi6Iux6L6e5YW4IDwga2FuJydlaWppdGVuXCA7CivlibXpgKDoqqwgPCBzb3V6b3VzZXRzdVwgOwor6aCY5Zyf5L+d5YWoIDwgcnlvdWRvaG96ZW5cIDsKK+aLm+W+heW4rSA8IHNob3V0YWlzZWtpXCA7CivnhKHkuovmga/ngb0gPCBidWppc29rdXNhaVwgOwor6Zuq5LiK6LuKIDwgc2V0c3Vqb3VzaGFcIDsKK+S6pOmfv+alvSA8IGtvdWt5b3VnYWt1XCA7CivovrLmpa3lm70gPCBub3VneW91a29rdVwgOwor5Y2T6LaK6aKoIDwgdGFrdWV0c3VmdXVcIDsKK+aMh+WQjeaJi+mFjSA8IHNoaW1laXRlaGFpXCA7Civpjq7nl5vmgKcgPCBjaGludHN1dXNlaVwgOwor6YGK6Kan6aOb6KGMIDwgeXV1cmFuaGlrb3VcIDsKK+iqjeitmOirliA8IG5pbnNoaWtpcm9uXCA7Civlj5fpqJPlnLDnjYQgPCBqdWtlbmppZ29rdVwgOwor6K2m5YKZ5by35YyWIDwga2VpYmlreW91a2FcIDsKK+WwseWvneWJjSA8IHNodXVzaGluemVuXCA7Civlv4PnkIbkuLvnvqkgPCBzaGlucmlzaHVnaVwgOwor5Y+M5puy57eaIDwgc291a3lva3VzZW5cIDsKK+mbouWpmuiotOionyA8IHJpa29uc29zaG91XCA7CivlpI/mmYLliLsgPCBuYXRzdWppa29rdVwgOwor5aSP5aSn5qC5IDwgbmF0c3VkYWlrb25cIDsKK+mfs+iok+e0ouW8lSA8IG9ua3Vuc2FrdWluXCA7CivljbHpmbrlm6DlrZAgPCBraWtlbicnaW5zaGlcIDsKK+adkeWFq+WIhiA8IG11cmFoYWNoaWJ1XCA7CivotoXpgY7li6Tli5kgPCBjaG91a2FraW5tdVwgOwor5YKY5LyQ5p6XIDwgc2FuYmF0c3VyaW5cIDsKK+W4uOioremkqCA8IGpvdXNldHN1a2FuXCA7CivljZfmpbXmmJ8gPCBuYW5reW9rdXNlaVwgOwor56We5a2m5aOrIDwgc2hpbmdha3VzaGlcIDsKK+mAsuatqeS4u+e+qSA8IHNoaW5wb3NodWdpXCA7CivkuIrlkYrlr6kgPCBqb3Vrb2t1c2hpblwgOwor5YWI5YWl6KazIDwgc2VuJydueXV1a2FuXCA7CivlhYjlhaXoposgPCBzZW4nJ255dXVrZW5cIDsKK+S/neWFqOS8muekviA8IGhvemVua2Fpc2hhXCA7CivmtJfmv6/niakgPCBzZW50YWt1bW9ub1wgOwor5LiH6JGJ6ZuGIDwgbWFuJyd5b3VzaHV1XCA7Civoh6rlt7HntLnku4sgPCBqaWtvc2hvdWthaVwgOwor5Lq66YGT5pSv5o+0IDwgamluZG91c2hpZW5cIDsKK+a6gOW3nuWbvSA8IG1hbnNodXVrb2t1XCA7CivluIzlsJHkvqHlgKQgPCBraXNob3VrYWNoaVwgOwor6KGo5b+g5aGUIDwgaHlvdWNodXV0b3VcIDsKK+S4iemHjeauuiA8IHNhbmp1dXNhdHN1XCA7Civlqabkurrnp5HlraYgPCBmdWppbmthZ2FrdVwgOwor5pSv5o+05Zuj5L2TIDwgc2hpZW5kYW50YWlcIDsKK+WIhuazjOa2siA8IGJ1bnBpdHN1ZWtpXCA7CivlroflrpnnqbrplpMgPCB1Y2h1dWt1dWthblwgOwor6Zqj5o6l55yMIDwgcmluc2V0c3VrZW5cIDsKK+WYmOWFq+eZviA8IHVzb2hhcHB5YWt1XCA7CivoiJ7ouI/lrqQgPCBidXRvdXNoaXRzdVwgOwor5b2T5bGA6ICFIDwgdG91a3lva3VzaGFcIDsKK+WMlueyp+eFieeTpiA8IGtlc2hvdXJlbmdhXCA7Civnt6nooZ3lm70gPCBrYW5zaG91a29rdVwgOwor5pep5pyf55m66KaLIDwgc291a2loYWtrZW5cIDsKK+iHqueEtuayu+eZkiA8IHNoaXplbmNoaXl1XCA7CivkuI3lj6/nn6XnmoQgPCBmdWthY2hpdGVraVwgOwor6Ki06Kif6LK755SoIDwgc29zaG91aGl5b3VcIDsKK+iXgeS6uuW9oiA8IHdhcmFuaW5neW91XCA7CivlvbHpn7/lipsgPCBlaWt5b3VyeW9rdVwgOwor54G95a6z5L+d6Zm6IDwgc2FpZ2FpaG9rZW5cIDsKK+Wkp+WZqOaZqeaIkCA8IHRhaWtpYmFuc2VpXCA7Civmlofnr4DmlbAgPCBidW5zZXRzdXN1dVwgOwor5pWw54+g5LiA6YCjIDwganV6dWljaGlyZW5cIDsKK+aWh+aYjumWi+WMliA8IGJ1bm1laWthaWthXCA7Civmgqrmjqjph48gPCB3YXJ1enVpcnlvdVwgOwor5ZCr5pyJ6YePIDwgZ2FuJyd5dXVyeW91XCA7Civoqpjpm7vnjocgPCB5dXVkZW5yaXRzdVwgOwor5Y+N5YuV5Li7576pIDwgaGFuZG91c2h1Z2lcIDsKK+ims+Wvn+ecvCA8IGthbnNhdHN1Z2FuXCA7CivmlL/lupzpq5jlrpggPCBzZWlmdWtvdWthblwgOwor6Y+h6aSFIDwga2FnYW1pbW9jaGlcIDsKK+ijj+WIh+iAhSA8IHVyYWdpcmltb25vXCA7Civkuqzpg73lupzoraYgPCBreW91dG9mdWtlaVwgOwor6Ziy6Zuq5p6XIDwgYm91c2V0c3VyaW5cIDsKK+WkqeelnumrrSA8IHRlbnNoaW5oaWdlXCA7CivmrrrlrrPogIUgPCBzYXRzdWdhaXNoYVwgOwor5Yuk546L5pSY5aS3IDwga2luJydub3Vqb3VpXCA7CivnqbrmjLrpg6jpmoogPCBrdXV0ZWlidXRhaVwgOwor5pWZ6IKy55yBIDwga3lvdWlrdXNob3VcIDsKK+mbouS5s+mjnyA8IHJpbnl1dXNob2t1XCA7CivmlZnogrLnmoQgPCBreW91aWt1dGVraVwgOwor5aSa5aOr5riI5riIIDwgdGFzaGlzZWlzZWlcIDsKK+S4jeWZqOeUqOiAhSA8IGJ1a2l5b3Vtb25vXCA7CivlhbXnq5nln7rlnLAgPCBoZWl0YW5raWNoaVwgOwor5pyJ55CG6Zai5pWwIDwgeXV1cmlrYW5zdXVcIDsKK+S6uuW3pemgreiEsyA8IGppbmtvdXp1bm91XCA7CivnibnliKXljLogPCB0b2t1YmV0c3VrdVwgOwor6LKh5pS/5YqbIDwgemFpc2Vpcnlva3VcIDsKK+WNgeWFremfs+espiA8IGp1dXJva3VvbnB1XCA7CivlvLfnoaznrZYgPCBreW91a291c2FrdVwgOwor5paw5bm05Y+3IDwgc2hpbicnbmVuZ291XCA7Civno6/pprTmnb4gPCBzb25hcmVtYXRzdVwgOwor5aWH5oOz5aSp5aSWIDwga2lzb3V0ZW5nYWlcIDsKK+WGheWuueimi+acrCA8IG5haXlvdW1paG9uXCA7CivlhaXppKjmlpkgPCBueXV1a2FucnlvdVwgOwor54mp55u46aOvIDwgbW9zc291bWVzaGlcIDsKK+ijvemdqealrSA8IHNlaWtha3VneW91XCA7CivkuK3lrabnlJ8gPCBjaHV1Z2FrdXNlaVwgOwor6Ly45Ye65rivIDwgeXVzaHV0c3Vrb3VcIDsKK+WNl+alteW4ryA8IG5hbmt5b2t1dGFpXCA7CivmlpnnkIbpgZPlhbcgPCByeW91cmlkb3VndVwgOwor5aSn5ZyP6Iiq6LevIDwgdGFpa2Vua291cm9cIDsKK+a6tuaOpeWJpCA8IHlvdXNldHN1emFpXCA7CivmgKXnl4XkurogPCBreXV1YnlvdW5pblwgOwor5a+E5a6/5paZIDwga2lzaHVrdXJ5b3VcIDsKK+mrmOWztueUsCA8IHRha2FzaGltYWRhXCA7CivlsI/mraPmnIggPCBrb3Nob3VnYXRzdVwgOwor5YuV5Yqb6KiIIDwgZG91cnlva3VrZWlcIDsKK+alteWkp+WApCA8IGt5b2t1ZGFpY2hpXCA7CivmupblgpnnrqHliLYgPCBqdW5iaWthbnNlaVwgOwor54OP5Y+jIDwga2FyYXN1Z3VjaGlcIDsKK+WHuumHkemhjSA8IHNodWtraW5nYWt1XCA7CivnlLPlkYrliLYgPCBzaGlua29rdXNlaVwgOwor57KNIDwgbWlyaW1laXRvcnVcIDsKK+mZo+mgreaMh+aPriA8IGppbnRvdXNoaWtpXCA7CivnsoEgPCBraXJvbWVpdG9ydVwgOwor57G1IDwgZGVrYW1lZXRvcnVcIDsKK+iHk+WZqOenu+akjSA8IHpvdWtpaXNob2t1XCA7Civln7rmnKzmpoLlv7UgPCBraWhvbmdhaW5lblwgOwor5a2Q5L6b6YGUIDwga29kb21vdGFjaGlcIDsKK+S8muitsOaXpeeoiyA8IGthaWdpbml0dGVpXCA7CivlhazlrprlnLDkvqEgPCBrb3V0ZWljaGlrYVwgOwor5Z+656SO56CU56m2IDwga2lzb2tlbmt5dXVcIDsKK+eSsOWig+axmuafkyA8IGthbmt5b3Vvc2VuXCA7CivlqpLku4vniakgPCBiYWlrYWlidXRzdVwgOwor55aR5b+D5pqX6ay8IDwgZ2lzaGluJydhbmtpXCA7Civpu4TpgZPoibIgPCBrb3Vkb3VzaG9rdVwgOwor5LiJ6JGJ6JmrIDwgc2FuJyd5b3VjaHV1XCA7Civlhajos6rljJYgPCB6ZW5zaGl0c3VrYVwgOwor55Sf5rS76ZujIDwgc2Vpa2F0c3VuYW5cIDsKK+e0sOWLleiEiCA8IHNhaWRvdW15YWt1XCA7CivmsZ/miLjliY3lr7/lj7ggPCBlZG9tYWV6dXNoaVwgOwor57eP55CG5aSn6IejIDwgc291cmlkYWlqaW5cIDsKK+ikh+mbkeWMliA8IGZ1a3V6YXRzdWthXCA7Civoh6rlt7HmuoDotrMgPCBqaWtvbWFuem9rdVwgOwor5Yui5Yqb5ZyPIDwgc2Vpcnlva3VrZW5cIDsKK+e1tuWvvuS4u+e+qSA8IHpldHRhaXNodWdpXCA7Civnq7AgPCBzZW5jaGlyaXR0b1wgOwor5q2j5ZGz5YCk5q61IDwgc2hvdW1pbmVkYW5cIDsKK+eroSA8IGhla3V0b3JpdHRvXCA7Civnq5MgPCBtaXJpcml0dG9ydVwgOwor56uPIDwga2lyb3JpdHRvcnVcIDsKK+WAi+S6uuaVmeaOiCA8IGtvamlua3lvdWp1XCA7CivopIfopIfnt5ogPCBmdWt1ZnVrdXNlblwgOwor5bCR5aOu5rCX6YutIDwgc2hvdXNvdWtpZWlcIDsKK+aWsOW5tOS8miA8IHNoaW4nJ25lbmthaVwgOwor5LiN56K65a6fIDwgZnVrYWt1aml0c3VcIDsKK+adseS6nOiruOWbvSA8IHRvdWFzaG9rb2t1XCA7Civlloflj63msLTku5kgPCByYXBwYXp1aXNlblwgOwor6Y6u55eb5YmkIDwgY2hpbnRzdXV6YWlcIDsKK+aAquS6uueJqSA8IGthaWppbmJ1dHN1XCA7CivpgJrlrabnlJ8gPCB0c3V1Z2FrdXNlaVwgOwor54iG5b+D5ZywIDwgYmFrdXNoaW5jaGlcIDsKK+Wun+ihjOWPr+iDvSA8IGppa2tvdWthbm91XCA7CivkuovliY3pgYvli5UgPCBqaXplbicndW5kb3VcIDsKK+Wni+acq+abuCA8IHNoaW1hdHN1c2hvXCA7CivlpJbmnaXmgqPogIUgPCBnYWlyYWlrYW5qYVwgOwor56u25LqJ5b+DIDwga3lvdXNvdXNoaW5cIDsKK+mBv+mbo+iok+e3tCA8IGhpbmFua3VucmVuXCA7Civlib3ou73ogIUgPCBoeW91a2lubW9ub1wgOwor6IW46ZaJ5aGeIDwgY2hvdWhlaXNva3VcIDsKK+iyqeWjsumDqOmWgCA8IGhhbmJhaWJ1bW9uXCA7Civou43lvZPlsYAgPCBndW50b3VreW9rdVwgOwor5Yq05YON6YGL5YuVIDwgcm91ZG91dW5kb3VcIDsKK+a6luWCmemKgOihjCA8IGp1bmJpZ2lua291XCA7Civlubnnt5rpgZPot68gPCBrYW5zZW5kb3Vyb1wgOwor5LiN6YCP5piO5oCnIDwgZnV0b3VtZWlzZWlcIDsKK+eZveWtkOmzqSA8IHNoaXJha29iYXRvXCA7CivnlLrlvbnloLQgPCBtYWNoaXlha3ViYVwgOwor5Yqg5Zyn5rC054KJIDwga2FhdHN1c3Vpcm9cIDsKK+S4jeW/oOWunyA8IGZ1Y2h1dWppdHN1XCA7Civooajpn7PmloflrZcgPCBoeW91b25tb25qaVwgOwor5oyH5ZCN5omT6ICFIDwgc2hpbWVpZGFzaGFcIDsKK+e3j+WPuOS7pOmDqCA8IHNvdXNoaXJlaWJ1XCA7CivljZrlrabogIUgPCBoYWt1Z2FrdXNoYVwgOwor5Lyd57Wx5Li7576pIDwgZGVudG91c2h1Z2lcIDsKK+aIpueVpeS4iiA8IHNlbnJ5YWt1am91XCA7CivkuLvopoHpg73luIIgPCBzaHV5b3V0b3NoaVwgOwor5Y2X5qW15ZyPIDwgbmFua3lva3VrZW5cIDsKK+S4oeiEmuimjyA8IHJ5b3VreWFrdWtpXCA7CivkvY7muKnmrrroj4wgPCB0ZWlvbnNha2tpblwgOwor5YWx6Kiz6ICFIDwga3lvdXlha3VzaGFcIDsKK+Wkq+WppumWouS/giA8IGZ1dWZ1a2Fua2VpXCA7Civlv43ogJDlipsgPCBuaW50YWlyeW9rdVwgOwor5L2c5qWt5pmC6ZaTIDwgc2FneW91amlrYW5cIDsKK+mbhumHkeS6uiA8IHNodXVraW4nJ25pblwgOwor6Z2e5bi45omL5q61IDwgaGlqb3VzaHVkYW5cIDsKK+WNgeWFq+mHkSA8IGp1dWhhY2hpa2luXCA7CivlsILliLbmlL/msrsgPCBzZW5zZWlzZWlqaVwgOwor5pig55S755uj552jIDwgZWlnYWthbnRva3VcIDsKK+WAn+eUqOiAhSA8IHNoYWt1eW91c2hhXCA7Civnk7AgPCBkZXNoaWd1cmFtdVwgOwor5r+D5reh55S75YOPIDwgbm91dGFuZ2F6b3VcIDsKK+err+mHkSA8IGhhc2hpdGFnYW5lXCA7Civnga/ngavnrqHliLYgPCB0b3VrYWthbnNlaVwgOwor6YeN6KaB5LqL6aCFIDwganV1eW91amlrb3VcIDsKK+mdnuW4uOWRvOmbhiA8IGhpam91a29zaHV1XCA7CivmjIHkuYXlipsgPCBqaWt5dXVyeW9rdVwgOwor5bGA5Zyw6aKoIDwga3lva3VjaGlmdXVcIDsKK+eZuueZjOaApyA8IGhhdHN1Z2Fuc2VpXCA7Civmj5rpmbjmlpkgPCB5b3VyaWt1cnlvdVwgOwor5a+G6LK/5piTIDwgbWl0c3Vib3Vla2lcIDsKK+mAmuS/oeWToSA8IHRzdXVzaGluJydpblwgOwor56uL5YCZ6KOc6ICFIDwgcmlra291aG9zaGFcIDsKK+WGoOWLleiEiCA8IGthbmRvdW15YWt1XCA7CivlpInlpY/mm7IgPCBoZW5zb3VreW9rdVwgOwor5rWE5YyW6KOF572uIDwgam91a2Fzb3VjaGlcIDsKK+W+oeeUn+aGjuanmCA8IG9haW5pa3VzYW1hXCA7CivooajlvbDlj7AgPCBoeW91c2hvdWRhaVwgOwor5Lq65ZOh5reY5rGwIDwgamluJydpbnRvdXRhXCA7CivokazpgIHmm7IgPCBzb3Vzb3VreW9rdVwgOwor5Lqk6YCa5LqL5pWFIDwga291dHN1dWppa29cIDsKK+WNg+WIhueOhyA8IHNlbmJ1bnJpdHN1XCA7Civlm5vovKrpp4bli5UgPCB5b25yaW5rdWRvdVwgOwor5Li45LiA5bm0IDwgbWFydWljaGluZW5cIDsKK+S7o+eQhuWFrOS9vyA8IGRhaXJpa291c2hpXCA7CivlpJbli5nlpKfoh6MgPCBnYWltdWRhaWppblwgOwor6ICB5buD54mpIDwgcm91aGFpYnV0c3VcIDsKK+WNl+alteWFiSA8IG5hbmt5b2t1a291XCA7Civnmq7nrpfnlKggPCBrYXdhemFuJyd5b3VcIDsKK+mHjuaIpuegsuWFtSA8IHlhc2VuaG91aGVpXCA7Civov73liIbnr4AgPCBvaXdha2VidXNoaVwgOwor5b6z5bed5YuiIDwgdG9rdWdhd2F6ZWlcIDsKK+WcsOWQjei+nuWFuCA8IGNoaW1laWppdGVuXCA7CivkuI3li5XnlKPlsYsgPCBmdWRvdXNhbicneWFcIDsKK+WJtemAoOeJqSA8IHNvdXpvdWJ1dHN1XCA7CivliJ3oiKrmtbcgPCBoYXRzdWtvdWthaVwgOwor6LO86Kqt5paZIDwga291ZG9rdXJ5b3VcIDsKK+W+l+elqOaVsCA8IHRva3VoeW91c3V1XCA7CivkvZPmhJ/muKnluqYgPCB0YWlrYW4nJ29uZG9cIDsKK+mbquaZr+iJsiA8IHl1a2lnZXNoaWtpXCA7CivoprPlhYnpg73luIIgPCBrYW5rb3V0b3NoaVwgOwor5ZCM5oCn5oSb6ICFIDwgZG91c2VpYWlzaGFcIDsKK+mDqOmaiuaSpOmAgCA8IGJ1dGFpdGV0dGFpXCA7Civnsr7npZ7nmoQgPCBzZWlzaGludGVraVwgOwor5Y2U6K2w5Lya5ZOhIDwga3lvdWdpa2FpaW5cIDsKK+WVk+iSmemBi+WLlSA8IGtlaW1vdXVuZG91XCA7CivlvrPlt53lhawgPCB0b2t1Z2F3YWtvdVwgOwor6Ieq56uL5b+DIDwgamlyaXRzdXNoaW5cIDsKK+S6gOeUsuaooeanmCA8IGtpa2tvdW1veW91XCA7CivooZvnlJ/nirbmhYsgPCBlaXNlaWpvdXRhaVwgOwor5ry46YCy55qEIDwgemVuc2hpbnRla2lcIDsKK+aVmeS8muaapiA8IGt5b3VrYWlyZWtpXCA7CivmrrrkurrogIUgPCBzYXRzdWppbnNoYVwgOwor6Y6W5Zu95Li7576pIDwgc2Frb2t1c2h1Z2lcIDsKK+eyvuelnueXhSA8IHNlaXNoaW5ieW91XCA7CivmrrrkurrnvaogPCBzYXRzdWppbnphaVwgOwor5oiQ5bm05byPIDwgc2VpbmVuc2hpa2lcIDsKK+WZqOeUqOiyp+S5jyA8IGtpeW91YmluYm91XCA7CivohLHnn7PmsrkgPCBkYXRzdXNla2l5dVwgOwor5YWI6YCy5Zu9IDwgc2Vuc2hpbmtva3VcIDsKK+ecvOeyvueWsuWKtCA8IGdhbnNlaWhpcm91XCA7CivlrqPkvJ3mqZ/plqIgPCBzZW5kZW5raWthblwgOwor5Zyf5Zuj5a2QIDwgdHN1Y2hpZGFuZ29cIDsKK+S9leaZguS9leaZgiA8IGl0c3VuYW5kb2tpXCA7CivmjqflrqQgPCBoaWthZXNoaXRzdVwgOwor5rCR5qip5Li7576pIDwgbWlua2Vuc2h1Z2lcIDsKK+W5tOasoee3j+S8miA8IG5lbmppc291a2FpXCA7Civmt7flkIjniakgPCBrb25nb3VidXRzdVwgOwor6LuN5qW96ZW3IDwgZ3VuZ2FrdWNob3VcIDsKK+azleW+i+S4iiA8IGhvdXJpdHN1am91XCA7CivnlZzniqznqI4gPCBjaGlrdWtlbnplaVwgOwor54Sh5YSf5Lqk5LuYIDwgbXVzaG91a291ZnVcIDsKK+efreacn+aJi+W9oiA8IHRhbmtpdGVnYXRhXCA7CivlhoXli5nlpKfoh6MgPCBuYWltdWRhaWppblwgOwor5LiA5LiW5LiA5LujIDwgaXNzZWljaGlkYWlcIDsKK+S6i+mghee0ouW8lSA8IGppa291c2FrdWluXCA7CivmlL7lsITnt5rnp5EgPCBob3VzaGFzZW5rYVwgOwor55qH5aSq5a2Q5aaDIDwga291dGFpc2hpaGlcIDsKK+aigeWxseaziiA8IHJ5b3V6YW5wYWt1XCA7CivlvavloZHooZMgPCBjaG91c29qdXRzdVwgOwor5Luj55So6aOfIDwgZGFpeW91c2hva3VcIDsKK+WmluaAquWkieWMliA8IHlvdWthaWhlbmdlXCA7CivkuKbmnKjpgZMgPCBuYW1pa2ltaWNoaVwgOwor5a6d55+z566xIDwgaG91c2VraWJha29cIDsKK+WNkualreW+jCA8IHNvdHN1Z3lvdWdvXCA7Civlj6Pop5LlipsgPCBrdWNoaWR6dW1vdVwgOwor5LqL5qWt5Li7IDwgamlneW91bnVzaGlcIDsKK+iHquiZkOeahCA8IGppZ3lha3V0ZWtpXCA7CivkuIvnm7joq4cgPCBzaGl0YXNvdWRhblwgOwor5aSJ5b2i6YOo6ZaAIDwgaGVua2VpYnVtb25cIDsKK+mHjuaIpueXhemZoiA8IHlhc2VuYnlvdWluXCA7Civnpr/poK3nl4UgPCB0b2t1dG91YnlvdVwgOwor5oim54G95Zyw5Yy6IDwgc2Vuc2FpY2hpa3VcIDsKK+W8vuedgOeCuSA8IGRhbmNoYWt1dGVuXCA7Civnibnli5nmqZ/plqIgPCB0b2t1bXVraWthblwgOwor5LqU5pyI55eFIDwgZ29nYXRzdWJ5b3VcIDsKK+egguezluWkp+aguSA8IHNhdG91ZGFpa29uXCA7CivlvL7lipvmgKcgPCBkYW5yeW9rdXNlaVwgOwor5qC454iG5by+IDwga2FrdWJha3VkYW5cIDsKK+WVhualreihlyA8IHNob3VneW91Z2FpXCA7CivpoK3mloflrZcgPCBrYXNoaXJhbW9qaVwgOwor5Y2K5Yqg5bel5ZOBIDwgaGFua2Frb3VoaW5cIDsKK+iHquiomOa4qeW6puioiCA8IGppa2lvbmRva2VpXCA7CivnuK7nt6zntJkgPCBjaGlyaW1lbnNoaVwgOwor5LqM562J5YiG57eaIDwgbml0b3VidW5zZW5cIDsKK+aOiOalreaZgumWkyA8IGp1Z3lvdWppa2FuXCA7CivlpKnnpZ7lnLDnpYcgPCB0ZW5qaW5jaGlnaVwgOwor6L+95Yqg5LqI566XIDwgdHN1aWtheW9zYW5cIDsKK+mdnuWQiOeQhueahCA8IGhpZ291cml0ZWtpXCA7CivlirTovrLmlL/lupwgPCByb3Vub3VzZWlmdVwgOwor5Y2X5Lqs6JmrIDwgbmFua2lubXVzaGlcIDsKK+ijgeaxuuabuCA8IHNhaWtldHN1c2hvXCA7CivkuIvmhI/kuIrpgZQgPCBrYWlqb3V0YXRzdVwgOwor5qC454eD5paZIDwga2FrdW5lbnJ5b3VcIDsKK+S5l+i7iuaLkuWQpiA8IGpvdXNoYWt5b2hpXCA7CivpgJDlrZfoqLMgPCBjaGlrdWppeWFrdVwgOwor5rC05rSX5L6/5omAIDwgc3Vpc2VuYmVuam9cIDsKK+WPjue0jeWutuWFtyA8IHNodXVub3VrYWd1XCA7CivmnKrplovlor7lnLAgPCBtaWthaWtvbmNoaVwgOwor5q2j5b2T6Ziy6KGbIDwgc2VpdG91Ym91ZWlcIDsKK+S4gOW+ueiAhSA8IGl0dGV0c3Vtb25vXCA7CivlvqHljZTlipsgPCBnb2t5b3VyeW9rdVwgOwor5a2m56eR6Kmm6aiTIDwgZ2Fra2FzaGlrZW5cIDsKK+S/guWxnuS4rSA8IGtlaXpva3VjaHV1XCA7CivmvZzmsLTmr43oiaYgPCBzZW5zdWlib2thblwgOwor57Gz5Y2wIDwga29tZWppcnVzaGlcIDsKK+eXheS4reWQnyA8IGJ5b3VjaHV1Z2luXCA7Civkvb/nlKjkvqHlgKQgPCBzaGl5b3VrYWNoaVwgOwor5qW16ZmQ5YCkIDwga3lva3VnZW5jaGlcIDsKK+aVmeiCsuWtpiA8IGt5b3Vpa3VnYWt1XCA7Civpm7voqbHlrqQgPCBkZW53YXNoaXRzdVwgOwor6YGg5b+D5YqbIDwgZW5zaGlucnlva3VcIDsKK+WumOWwiuawkeWNkSA8IGthbnNvbm1pbnBpXCA7Civlrq7ltI7nnIwgPCBtaXlhemFraWtlblwgOwor5ZWG5bel5qWtIDwgc2hvdWtvdWd5b3VcIDsKK+ihneWLleeahCA8IHNob3Vkb3V0ZWtpXCA7Civog4bnn7Pnl4cgPCB0YW5zZWtpc2hvdVwgOwor6Ly45Ye65ZOBIDwgeXVzaHV0c3VoaW5cIDsKK+aZrumBjeaWh+azlSA8IGZ1aGVuYnVucG91XCA7CivpgY7libDkurrlj6MgPCBrYWpvdWppbmtvdVwgOwor5LiJ55yg6JqVIDwgc2FubWlua2Fpa29cIDsKK+mWk+asoOaziSA8IGthbmtldHN1c2VuXCA7Civlh7rlhYjmqZ/plqIgPCBkZXNha2lraWthblwgOwor5rqW5YKZ5aeU5ZOh5LyaIDwganVuYmlpaW5rYWlcIDsKK+Wkqem+jeW3nSA8IHRlbnJ5dXVrYXdhXCA7CivmlZnnv5LnlJ8gPCBreW91c2h1dXNlaVwgOwor6Zqj5o6l5ZywIDwgcmluc2V0c3VjaGlcIDsKK+eZuueUn+eOhyA8IGhhc3NlaXJpdHN1XCA7CivokaHokITnlZEgPCBidWRvdWJhdGFrZVwgOwor5aKD55WM5qiZIDwga3lvdWthaWh5b3VcIDsKK+epuui7jeWKmyA8IGt1dWd1bnJ5b2t1XCA7CivkuqTlo7Dmm7IgPCBrb3VzZWlreW9rdVwgOwor54++5YaF6ZajIDwgZ2VuJyduYWlrYWt1XCA7CivljaDmmJ/ooZMgPCBzZW5zZWlqdXRzdVwgOwor6aaZ6L6b5paZIDwga291c2hpbnJ5b3VcIDsKK+eUuumBk+WgtCA8IG1hY2hpZG91am91XCA7CivlrqPkvJ3lirnmnpwgPCBzZW5kZW5rb3VrYVwgOwor5pmC44CF5Yi744CFIDwgamlqaWtva2tva3VcIDsKK+i/keS8vOioiOeulyA8IGtpbmppa2Vpc2FuXCA7Civli5XlipvmupAgPCBkb3VyeW9rdWdlblwgOwor5oGS562J5byPIDwga291dG91c2hpa2lcIDsKK+iojuS8kOi7jSA8IHRvdWJhdHN1Z3VuXCA7CivooajnnIvmnb8gPCBvbW90ZWthbmJhblwgOwor6K235oay6YGL5YuVIDwgZ29rZW4nJ3VuZG91XCA7Civmv4PpnZLoibIgPCBub3VzZWlzaG9rdVwgOwor5q665Lq654qvIDwgc2F0c3VqaW5oYW5cIDsKK+aui+W/teizniA8IHphbicnbmVuc2hvdVwgOwor5Y6f5Zug57WQ5p6cIDwgZ2VuJydpbmtla2thXCA7Civlj4vou43pg6jpmoogPCB5dXVndW5idXRhaVwgOwor6ISz5YWF6KGAIDwgbm91anV1a2V0c3VcIDsKK+mjn+S6uueoriA8IHNob2t1amluc2h1XCA7CivotaTopJDoibIgPCBzZWtrYXNzaG9rdVwgOwor54Sh5bC95Lya56S+IDwgbXVqaW5nYWlzaGFcIDsKK+iIiOS/oemMsiA8IGtvdXNoaW5yb2t1XCA7Civpm7vnhrHlmaggPCBkZW4nJ25ldHN1a2lcIDsKK+S9nOabsuiAhSA8IHNha2t5b2t1c2hhXCA7Civlj6Tku4rmnbHopb8gPCBrb2tvbnRvdXphaVwgOwor5ZSQ6YymIDwga2FyYW5pc2hpa2lcIDsKK+eci+itt+WppumVtyA8IGthbmdvZnVjaG91XCA7CivllYbmqJnmqKkgPCBzaG91aHlvdWtlblwgOwor5oKy5oak5oW35oWoIDwgaGlmdW5rb3VnYWlcIDsKK+W4uOitmOS6uiA8IGpvdXNoaWtpamluXCA7Civlj6Tku6PmlofmmI4gPCBrb2RhaWJ1bm1laVwgOwor6Kaz5a6i5bGkIDwga2Fua3lha3Vzb3VcIDsKK+eEoeeUo+aUv+WFmiA8IG11c2Fuc2VpdG91XCA7CivkuIDph43moZwgPCBoaXRvZXpha3VyYVwgOwor6YG45oyZ5rqW5YKZIDwgc2Vua3lvanVuYmlcIDsKK+WcsOWLleiqrCA8IGNoaWRvdXNldHN1XCA7CivmhI/orZjkuI3mmI4gPCBpc2hpa2lmdW1laVwgOwor55m95Lqc6LOqIDwgaGFrdWFzaGl0c3VcIDsKK+iGoOedgOWJpCA8IGtvdWNoYWt1emFpXCA7CivkuIDmrrXokL0gPCBpY2hpZGFucmFrdVwgOwor57WE5ZCI5Li7576pIDwga3VtaWFpc2h1Z2lcIDsKK+i7jeeUqOmzqSA8IGd1bicneW91YmF0b1wgOwor5L+X5paH5a2mIDwgem9rdWJ1bmdha3VcIDsKK+WAi+S9k+eZuueUnyA8IGtvdGFpaGFzc2VpXCA7Civpm7vlnKfoqIggPCBkZW4nJ2F0c3VrZWlcIDsKK+iWrOWxgOaWuSA8IHlha2t5b2t1aG91XCA7Civms5XliLblsYAgPCBob3VzZWlreW9rdVwgOwor6Jas5a2m6ICFIDwgeWFrdWdha3VzaGFcIDsKK+S/guS6ieeJqSA8IGtlaXNvdWJ1dHN1XCA7Civlm5vliIbpn7PnrKYgPCBzaGlidW4nJ29ucHVcIDsKK+S9v+W+kuabuOewoSA8IHNoaXRvc2hva2FuXCA7CivlhKrmn5TkuI3mlq0gPCB5dXVqdXVmdWRhblwgOwor6ISx5q+b5YmkIDwgZGF0c3Vtb3V6YWlcIDsKK+eFjumkheiSsuWboyA8IHNlbmJlaWJ1dG9uXCA7CivnrqHovYTmqKkgPCBrYW5rYXRzdWtlblwgOwor5YCf55So5pu4IDwgc2hha3V5b3VzaG9cIDsKK+S6iOWumuiqv+WSjCA8IHlvdGVpY2hvdXdhXCA7CivlpYnlhazlj6MgPCBob3Vrb3VndWNoaVwgOwor5YWI56WW5Lyd5p2lIDwgc2Vuem9kZW5yYWlcIDsKK+aUvumAgeWxgCA8IGhvdXNvdWt5b2t1XCA7Civkuovmpa3pg6jliLYgPCBqaWd5b3VidXNlaVwgOwor6buE55m96ImyIDwga29oYWt1c2hva3VcIDsKK+iHqOaZguWIl+i7iiA8IHJpbmppcmVzc2hhXCA7CivlrprmnJ/oqabpqJMgPCB0ZWlraXNoaWtlblwgOwor576957mU6KK0IDwgaGFvcmloYWthbWFcIDsKK+e3j+WQiOiqsueojiA8IHNvdWdvdWthemVpXCA7CivpgaDpmpTorJvnvqkgPCBlbmtha3Vrb3VnaVwgOwor6Zmk5bmV5byPIDwgam9tYWt1c2hpa2lcIDsKK+a1t+W6leayueeUsCA8IGthaXRlaXl1ZGVuXCA7CivnnJ/kuIDmloflrZcgPCBtYWljaGltb25qaVwgOwor6J2454mbIDwgZGVuZGVubXVzaGlcIDsKK+mbu+ipseiqv+afuyA8IGRlbndhY2hvdXNhXCA7CivmioDooZPmj7TliqkgPCBnaWp1dHN1ZW5qb1wgOwor5by35Yi255qEIDwga3lvdXNlaXRla2lcIDsKK+W8t+W/g+WJpCA8IGt5b3VzaGluemFpXCA7CivnlJ/mtLvnkrAgPCBzZWlrYXRzdWthblwgOwor5pil5LiA55WqIDwgaGFydWljaGliYW5cIDsKK+WNgeWFq+eVqiA8IGp1dWhhY2hpYmFuXCA7Civpu5LptqsgPCBrdXJvdHN1Z3VtaVwgOwor5YGP5ZCR5Zue6LevIDwgaGVua291a2Fpcm9cIDsKK+S6iOWumue0jeeojiA8IHlvdGVpbm91emVpXCA7CivnmoflkI7pmZvkuIsgPCBrb3Vnb3VoZWlrYVwgOwor6YCj6YKm5Yi25bqmIDwgcmVucG91c2VpZG9cIDsKK+mMpuibhyA8IG5pc2hpa2loZWJpXCA7CivntYLouqvlrpggPCBzaHV1c2hpbmthblwgOwor5Zu95L6NIDwga3VuaXphbXVyYWlcIDsKK+mbu+awl+mbu+WtkCA8IGRlbmtpZGVuc2hpXCA7Civku6PooYzmqZ/plqIgPCBkYWlrb3VraWthblwgOwor55ay5Yq05Zuw5oaKIDwgaGlyb3Vrb25wYWlcIDsKK+ebl+mbo+S/nemZuiA8IHRvdW5hbmhva2VuXCA7CivntJTnnJ/nhKHlnqIgPCBqdW5zaGlubXVrdVwgOwor5pyI6ZW355+zIDwgZ2V0Y2hvdXNla2lcIDsKK+aVmeiBt+WToSA8IGt5b3VzaG9rdWluXCA7CivkuIvkvY3kupLmj5vmgKcgPCBrYWlnb2thbnNlaVwgOwor5rOV5YuZ5aSn6IejIDwgaG91bXVkYWlqaW5cIDsKK+mAgeWIpeS8miA8IHNvdWJldHN1a2FpXCA7Civlh7rlk4Hlm70gPCBzaHVwcGlua29rdVwgOwor5YiR5LqL5Yem5YiGIDwga2VpamlzaG9idW5cIDsKK+mnkOi7iumBleWPjSA8IGNodXVzaGFpaGFuXCA7CivljZfkuqznlLogPCBuYW5raW5tYWNoaVwgOwor5pmC5qmf5bCa5pepIDwgamlraXNob3Vzb3VcIDsKK+mBk+W+s+eahCA8IGRvdXRva3V0ZWtpXCA7CivllYbmpa3nlYwgPCBzaG91Z3lvdWthaVwgOwor5Y+O57SN6aGNIDwgc2h1dW5vdWdha3VcIDsKK+m8jueri+aIpiA8IHRlaXJpdHN1c2VuXCA7Civljp/liYfnmoQgPCBnZW5zb2t1dGVraVwgOwor5bm06YeR5Z+66YeRIDwgbmVua2lua2lraW5cIDsKK+WCjeiBtOaWmSA8IGJvdWNob3VyeW91XCA7CivljYPlhobmnK0gPCBzZW4nJ2Vuc2F0c3VcIDsKK+WumuWPjuWFpSA8IHRlaXNodXVueXV1XCA7Civpganms5XooYzngrogPCB0ZWtpaG91a291aVwgOwor54mp6KaL6YGK5bGxIDwgbW9ub21peXVzYW5cIDsKK+W+l+aEj+a6gOmdoiA8IHRva3VpbWFubWVuXCA7CivmmYLlt67lh7rli6QgPCBqaXNhc2h1a2tpblwgOwor5pS/5rK75ZWP6aGMIDwgc2Vpamltb25kYWlcIDsKK+e1tuWvvuaVrOiqniA8IHpldHRhaWtlaWdvXCA7CivpjbXnm6Tmpb3lmaggPCBrZW5iYW5nYWtraVwgOwor6Ki06Kif5LqL5Lu2IDwgc29zaG91amlrZW5cIDsKK+aEj+WRs+W9ueWJsiA8IGltaXlha3V3YXJpXCA7Civlha3lpKflt54gPCByb2t1ZGFpc2h1dVwgOwor5Ymy5byV5Yi4IDwgd2FyaWJpa2lrZW5cIDsKK+S9j+eUn+a0uyA8IGp1dXNlaWthdHN1XCA7CivkvqHmoLzlronlrpogPCBrYWtha3VhbnRlaVwgOwor5LuK5LiK6Zmb5LiLIDwga2luam91aGVpa2FcIDsKK+mbu+awl+ezu+e1sSA8IGRlbmtpa2VpdG91XCA7CivliY3nq4vohbogPCB6ZW5yaXRzdXNlblwgOwor5YWM5o+b6YqA6KGMIDwgZGFrYW5naW5rb3VcIDsKK+WGmeecn+mbhiA8IHNoYXNoaW5zaHV1XCA7CivlhajkvJrkuIDoh7QgPCB6ZW5rYWlpdGNoaVwgOwor55m+5LiH6YGNIDwgaHlha3VtYW5iZW5cIDsKK+idieaZgumbqCA8IHNlbWlzaGlndXJlXCA7CivpurvolqzmgqPogIUgPCBtYXlha3VrYW5qYVwgOwor5Ymy5byV5YK1IDwgd2FyaWJpa2lzYWlcIDsKK+W/g+apn+S4gOi7oiA8IHNoaW5raWl0dGVuXCA7CivnhKHlkI3miKblo6sgPCBtdW1laXNlbnNoaVwgOwor5ZSv5LiA54Sh5LqMIDwgeXVpaXRzdW11bmlcIDsKK+aOpeedgOWJpCA8IHNldGNoYWt1emFpXCA7CivmiYvooZPlj7AgPCBzaHVqdXRzdWRhaVwgOwor6Ziy54Gr5omJIDwgYm91a2F0b2JpcmFcIDsKK+S5seWFpeiAhSA8IHJhbicnbnl1dXNoYVwgOwor6KiI55S755qEIDwga2Vpa2FrdXRla2lcIDsKK+iyoeaUv+WuieWumiA8IHphaXNlaWFudGVpXCA7Civoqr/ljbDlvI8gPCBjaG91aW5zaGlraVwgOwor55yL6K235a2m5qChIDwga2FuZ29nYWtrb3VcIDsKK+mAhui7ouWxpCA8IGd5YWt1dGVuc291XCA7CivnlJ/mtLvms5UgPCBzZWlrYXRzdWhvdVwgOwor57KY5Zyf6LOqIDwgbmVuZG9zaGl0c3VcIDsKK+WIhumhnuWfuua6liA8IGJ1bnJ1aWtpanVuXCA7CivpgIbovLjlhaUgPCBneWFrdXl1bnl1dVwgOwor5paH5pu45YG96YCgIDwgYnVuc2hvZ2l6b3VcIDsKK+WtpOi7jeWlrumXmCA8IGtvZ3VuZnVudG91XCA7CivmlrDoiIjlm70gPCBzaGlua291a29rdVwgOwor5pWw5qyh5peF5Yi4IDwgc3V1amlyeW9rZW5cIDsKK+WQiOebrueahCA8IGdvdW1va3V0ZWtpXCA7CivlkIjmiJDnuYrntq0gPCBnb3VzZWlzZW4nJ2lcIDsKK+aWsOS6uuizniA8IHNoaW5qaW5zaG91XCA7Civpm7vloLHlsYAgPCBkZW5wb3VreW9rdVwgOwor6LK05peP5pS/5rK7IDwga2l6b2t1c2VpamlcIDsKK+WNmuaEm+S4u+e+qSA8IGhha3VhaXNodWdpXCA7CivkuIDmlonmpJzmjJkgPCBpc3NlaWtlbmt5b1wgOwor5Lqc6Ymb6I+v6Luf6IaPIDwgYWVua2FuYW5rb3VcIDsKK+S4ieW5leeJqSA8IHNhbm1ha3Vtb25vXCA7Civnmb3mnKjok64gPCBoYWt1bW9rdXJlblwgOwor5ZWG5qWt5rivIDwgc2hvdWd5b3Vrb3VcIDsKK+S4gOmHjOWhmiA8IGljaGlyaWR6dWthXCA7CivntYLouqvliJEgPCBzaHV1c2hpbmtlaVwgOwor5L2O5rip6Ly46YCBIDwgdGVpb24nJ3l1c291XCA7CivpoqjlhYnmmI7lqpogPCBmdXVrb3VtZWliaVwgOwor5b6M6YOo5bqn5bitIDwga291YnV6YXNla2lcIDsKK+WLleWKm+WtpiA8IGRvdXJpa2lnYWt1XCA7Civnr4DmlpnnkIYgPCBzZWNoaXJ5b3VyaVwgOwor5Ye65ZOB5Lq6IDwgc2h1cHBpbicnbmluXCA7Civlgo3ogbTluK0gPCBib3VjaG91c2VraVwgOwor5LiN6YGp5YiHIDwgZnV0ZWtpc2V0c3VcIDsKK+WAi+S6uuaKleizhyA8IGtvamludG91c2hpXCA7CivlrabpmpvnmoQgPCBnYWt1c2FpdGVraVwgOwor56uc6aqo5bqnIDwgcnl1dWtvdHN1emFcIDsKK+S/nemZuuS8muekviA8IGhva2VuZ2Fpc2hhXCA7CivnoavljJbmsLTntKAgPCByeXV1a2FzdWlzb1wgOwor5Luu5p2h57SEIDwga2FyaWpvdXlha3VcIDsKK+aXpeacrOWIl+WztiA8IG5paG9ucmV0dG91XCA7Civpmo7ntJrnq6AgPCBrYWlreXV1c2hvdVwgOwor5oim5pmC5YWs5YK1IDwgc2Vuamlrb3VzYWlcIDsKK+aKteaKl+WKmyA8IHRlaWtvdXJ5b2t1XCA7Civmo67mnpflraYgPCBzaGlucmluZ2FrdVwgOwor5rW35ZOh57WE5ZCIIDwga2FpaW5rdW1pYWlcIDsKK+eZvuS4h+iogCA8IGh5YWt1bWFuZ2VuXCA7Civkv67ovp7nlpHllY8gPCBzaHV1amlnaW1vblwgOwor5riv55S6IDwgbWluYXRvbWFjaGlcIDsKK+azleWumuiyqOW5oyA8IGhvdXRlaWthaGVpXCA7CivkvZPlhoXlj5fnsr4gPCB0YWluYWlqdXNlaVwgOwor5YyW57Kn5LiLIDwga2VzaG91c2hpdGFcIDsKK+iZq+iWrCA8IG11c2hpZ3VzdXJpXCA7Civmpb3oprPkuLvnvqkgPCByYWtrYW5zaHVnaVwgOwor6LWk5o+Q54GvIDwgYWthY2hvdWNoaW5cIDsKK+WFpemZouaCo+iAhSA8IG55dXVpbmthbmphXCA7CivlibXpgKDkuLsgPCBzb3V6b3VudXNoaVwgOwor6Zai6YCj5LqL6aCFIDwga2FucmVuamlrb3VcIDsKK+WOn+S+oeioiOeulyA8IGdlbmtha2Vpc2FuXCA7Civpm7vlrZDlm57ot68gPCBkZW5zaGlrYWlyb1wgOwor5YCZ5a2d6LOiIDwgaG91c2hhdXNoZW5cIDsKK+mHjeeCueS4u+e+qSA8IGp1dXRlbnNodWdpXCA7CivkvqHpm7vlrZDluK8gPCBrYWRlbnNoaXRhaVwgOwor5pyJ5Yq56ZyA6KaBIDwgeXV1a291anV5b3VcIDsKK+S6i+alreW5tOW6piA8IGppZ3lvdW5lbmRvXCA7Civnm7jlj43lrprnkIYgPCBzb3VoYW50ZWlyaVwgOwor5YWt5YiG5YSA5bqnIDwgcm9rdWJ1bmdpemFcIDsKK+WGrOWwhui7jSA8IGZ1eXVzaG91Z3VuXCA7CivlronlrprnirbmhYsgPCBhbnRlaWpvdXRhaVwgOwor5rCR5Li75pS/5rK7IDwgbWluc2h1c2VpamlcIDsKK+eLrOe/kuabuCA8IGRva3VzaHV1c2hvXCA7CivlhazoqLzmlpkgPCBrb3VzaG91cnlvdVwgOwor5ZSQ57SFIDwga2FyYWt1cmVuYWlcIDsKK+e2v+e5lOeJqSA8IG1lbicnb3JpbW9ub1wgOwor5YyW5a2m57mK57atIDwga2FnYWt1c2VuJydpXCA7Civntbblr77pn7PmhJ8gPCB6ZXR0YWlvbmthblwgOwor5YWI5YWl5Li7IDwgc2VuJydueXV1c2h1XCA7CivmnIDntYLnmoQgPCBzYWlzaHV1dGVraVwgOwor5pys5bu656+JIDwgaG9ua2VuY2hpa3VcIDsKK+iHqueEtuegtOWjiiA8IHNoaXplbmhha2FpXCA7CivloLHpgZPmqZ/plqIgPCBob3Vkb3VraWthblwgOwor5o2V6Jmc5Lqk5o+bIDwgaG9yeW9rb3VrYW5cIDsKK+eLl+WwvuiNiSA8IGVub2tvcm9ndXNhXCA7CivkupznsbPliKnliqDmnYkgPCBhbWVyaWthc3VnaVwgOwor5L6h5YCk5Yik5patIDwga2FjaGloYW5kYW5cIDsKK+ihjOWVhuS6uiA8IGd5b3VzaG91bmluXCA7CivliIfliIbms5UgPCBzZXRzdWJ1bmhvdVwgOwor5omL57e05omL566hIDwgdGVyZW50ZWt1ZGFcIDsKK+WZqOaisOS9k+aTjSA8IGtpa2FpdGFpc291XCA7CivppIrogIHkv53pmbogPCB5b3Vyb3Vob2tlblwgOwor5bCP55m+5aeTIDwga29ieWFrdXNob3VcIDsKK+W/g+S4iOWkqyA8IGtva29yb2pvdWJ1XCA7Civps6XpoZ7lraYgPCBjaG91cnVpZ2FrdVwgOwor5byx5bm06ICFIDwgamFrdW5lbm1vbm9cIDsKK+S4remaiumVtyA8IGNodXV0YWljaG91XCA7CivkuI3lvZPooajnpLogPCBmdXRvdWh5b3VqaVwgOwor5a6J5YWo6YGL6LuiIDwgYW56ZW4nJ3VudGVuXCA7Civnm7joq4flvbkgPCBzb3VkYW4nJ3lha3VcIDsKK+S6pOmam+evhOWbsiA8IGtvdXNhaWhhbicnaVwgOwor5b+c55So56eR5a2mIDwgb3V5b3VrYWdha3VcIDsKK+mjn+S6i+aZgiA8IHNob2t1amlkb2tpXCA7CivlhavpnaLkvZMgPCBoYWNoaW1lbnRhaVwgOwor5LiN5pW05ZCI5Lq6IDwgZnVzZWlnb3VqaW5cIDsKK+WOn+WIpOaxuiA8IGdlbmhhbmtldHN1XCA7CivljZjlhYPliLbluqYgPCB0YW5nZW5zZWlkb1wgOwor5LiA5q2p5YmN6YCyIDwgaXBwb3plbnNoaW5cIDsKK+WbveeOi+mZm+S4iyA8IGtva3VvdWhlaWthXCA7CivmpbXlnLDlnI8gPCBreW9rdWNoaWtlblwgOwor5pS+6YCB6KGb5pifIDwgaG91c291ZWlzZWlcIDsKK+WvguWFiea1hOWcnyA8IGpha2tvdWpvdWRvXCA7Civnm6Plr5/lrpggPCBrYW5zYXRzdWthblwgOwor5b6M55Sf5aSn5LqLIDwgZ29zaG91ZGFpamlcIDsKK+S4ieawkeS4u+e+qSA8IHNhbm1pbnNodWdpXCA7Civnmb3njonnsokgPCBzaGlyYXRhbWFrb1wgOwor5ZWG5qWt5paHIDwgc2hvdWd5b3VidW5cIDsKK+awl+euoeWIh+mWiyA8IGtpa2Fuc2Vra2FpXCA7CivlpKnli5XoqqwgPCB0ZW5kb3VzZXRzdVwgOwor5YKy5bK45LiN6YGcIDwgZ291Z2FuZnVzb25cIDsKK+i+u+iqrOazlSA8IHRzdWppc2VwcG91XCA7CivlrrbniLbplbfliLYgPCBrYWZ1Y2hvdXNlaVwgOwor5pqX6buS5pif6ZuyIDwgYW5rb2t1c2VpdW5cIDsKK+i/keS7o+WbveWutiA8IGtpbmRhaWtva2thXCA7CivnhYnkuLnooZMgPCByZW50YW5qdXRzdVwgOwor6KW/5rW35bK4IDwgbmlzaGlrYWlnYW5cIDsKK+WJjemAlOacieacmyA8IHplbnRveXV1Ym91XCA7CivmgKXkuIrmmIcgPCBreXV1am91c2hvdVwgOwor5a6d55+z5ZWGIDwgaG91c2VraXNob3VcIDsKK+aPm+eul+eOhyA8IGthbnNhbnJpdHN1XCA7Civlu7roqK3ogIUgPCBrZW5zZXRzdXNoYVwgOwor5YyX44CF6KW/IDwgaG9rdWhva3VzZWlcIDsKK+mfs+alveeQhuirliA8IG9uZ2FrdXJpcm9uXCA7Civlp5ToqJfosqnlo7IgPCBpdGFrdWhhbmJhaVwgOwor6YqA5ama5byPIDwgZ2lua29uc2hpa2lcIDsKK+S4ieWvkuWbm+a4qSA8IHNhbmthbnNoaW9uXCA7CivosqfkuY/miYDluK8gPCBiaW5ib3Vqb3RhaVwgOwor5b6h5Ly96I2J5a2QIDwgb3RvZ2l6b3VzaGlcIDsKK+elnuWliOW3neecjCA8IGthbmFnYXdha2VuXCA7Civpm7vmsJfoo4Xnva4gPCBkZW5raXNvdWNoaVwgOwor5Zyw5pa56K2w5LyaIDwgY2hpaG91Z2lrYWlcIDsKK+WOn+WLleWKmyA8IGdlbmRvdXJ5b2t1XCA7Civkv4Tmma/msJcgPCBuaXdha2FnZWlraVwgOwor6KOF55Sy6YOo6ZqKIDwgc291a291YnV0YWlcIDsKK+S4jeWPr+WFpeaApyA8IGZ1a2FueXV1c2VpXCA7CivmgqrmiK/ogIUgPCBpdGF6dXJhbW9ub1wgOwor5aSn56aP5bizIDwgZGFpZnVrdWNob3VcIDsKK+aZguevgOafhCA8IGppc2V0c3VnYXJhXCA7CivljZfkuqzmnKjntr8gPCBuYW5raW5tb21lblwgOwor56Ov6bWvIDwgaXNvaGl5b2RvcmlcIDsKK+WNsOixoeS4u+e+qSA8IGluc2hvdXNodWdpXCA7CivlkLjooYDprLwgPCBreXV1a2V0c3VraVwgOwor57OW5bC/55eFIDwgdG91bnlvdWJ5b3VcIDsKK+S4gOW8teS4gOW8myA8IGl0Y2hvdWlzc2hpXCA7CivljLrplpPliJfou4ogPCBrdWthbnJlc3NoYVwgOwor6Lui5Lu75YWIIDwgdGVuJyduaW5zYWtpXCA7CivmlK/phY3lipsgPCBzaGloYWlyeW9rdVwgOwor55u45oCd55u45oSbIDwgc291c2hpc291YWlcIDsKK+iIquepuuWfuuWcsCA8IGtvdWt1dWtpY2hpXCA7Civnm6Pmn7voqJjpjLIgPCBrYW5zYWtpcm9rdVwgOwor5oqA6KGT56e76LuiIDwgZ2lqdXRzdWl0ZW5cIDsKK+eUo+WFkOWItumZkCA8IHNhbmppc2VpZ2VuXCA7CivljZjpn7Pnr4AgPCB0YW4nJ29uc2V0c3VcIDsKK+aWsOiBnueoriA8IHNoaW5idW5kYW5lXCA7Civpo73lkoznirbmhYsgPCBob3V3YWpvdXRhaVwgOwor5L2O5LiY6Zm1IDwgdGVpa3l1dXJ5b3VcIDsKK+Wbvemam+eahCA8IGtva3VzYWl0ZWtpXCA7Civpg7flnJ/oibIgPCBreW91ZG9zaG9rdVwgOwor56uc55Sw5aerIDwgdGF0c3V0YWhpbWVcIDsKK+Wwj+WtpumkqCA8IHNob3VnYWt1a2FuXCA7Civnn6Xog73mpJzmn7sgPCBjaGlub3VrZW5zYVwgOwor5L2/56+A5ZujIDwgc2hpc2V0c3VkYW5cIDsKK+a2iOaBr+aWhyA8IHNob3Vzb2t1YnVuXCA7Civnt4vooaPojYkgPCBoaWdvcm9tb3NvdVwgOwor5Li76KiI5bGAIDwgc2h1a2Vpa3lva3VcIDsKK+mBk+W+s+W/gyA8IGRvdXRva3VzaGluXCA7CivmnKrmsbrlm5ogPCBtaWtldHN1c2h1dVwgOwor5oSb5ZSx5puyIDwgYWlzaG91a3lva3VcIDsKK+WtpOW9seaChOeEtiA8IGtvZWlzaG91emVuXCA7CivkupTnqK7nq7bmioAgPCBnb3NodWt5b3VnaVwgOwor5YG15a+f6ZqKIDwgdGVpc2F0c3V0YWlcIDsKK+Wbo+S9k+S/nemZuiA8IGRhbnRhaWhva2VuXCA7Civnmbrkv6HlgbQgPCBoYXNzaGluZ2F3YVwgOwor5aeJ5aa56YO95biCIDwgc2hpbWFpdG9zaGlcIDsKK+mBoOWxsemHjCA8IHRvb3lhbWF6YXRvXCA7CivnpZ7ntYznl5sgPCBzaGlua2VpdHN1dVwgOwor5LiN6YCa566H5omAIDwgZnV0c3V1a2FzaG9cIDsKK+elnue1jOeXhyA8IHNoaW5rZWlzaG91XCA7CivnpZ7ntYznl4UgPCBzaGlua2VpYnlvdVwgOwor56C06YKq6aGV5q2jIDwgaGFqYWtlbnNob3VcIDsKK+aUv+ayu+Wbo+S9kyA8IHNlaWppZGFudGFpXCA7CivkuIDllpzkuIDmhoIgPCBpa2tpaWNoaXl1dVwgOwor5a6a552A5rayIDwgdGVpY2hha3Vla2lcIDsKK+W8geiovOWtpiA8IGJlbnNob3VnYWt1XCA7Civmupblgpnlkb3ku6QgPCBqdW5iaW1laXJlaVwgOwor5Y+X6aiT56eR55uuIDwganVrZW5rYW1va3VcIDsKK+acqOeuoealveWZqCA8IG1va2thbmdha2tpXCA7Civnmbrkv6HkurogPCBoYXNzaGluJyduaW5cIDsKK+S4remrmOmfs+mDqCA8IGNodXVrb3VvbmJ1XCA7Civlj4vmhJvntZDlqZogPCB5dXVhaWtla2tvblwgOwor57eR5Zyw5bivIDwgcnlva3VjaGl0YWlcIDsKK+a1t+i7jeWfuuWcsCA8IGthaWd1bmtpY2hpXCA7CivnlJ/mtLvlnI8gPCBzZWlrYXRzdWtlblwgOwor6Zu75a2Q57Sg5a2QIDwgZGVuc2hpc29zaGlcIDsKK+eGseS8neWwjiA8IG5ldHN1ZGVuZG91XCA7CivpgZPlvrPlraYgPCBkb3V0b2t1Z2FrdVwgOwor5oSb5Zu96YGL5YuVIDwgYWlrb2t1dW5kb3VcIDsKK+mBqeagvOiAhSA8IHRla2lrYWt1c2hhXCA7Civlm7Pmm7jlrqQgPCB0b3Nob3NoaXRzdVwgOwor6Kaz6Z+z5qeYIDwga2FuJydub25zYW1hXCA7CivntZDlqZrlvI8gPCBrZWtrb25zaGlraVwgOwor6KW/5rSL5byPIDwgc2VpeW91c2hpa2lcIDsKK+S6uuaWh+WcsOeQhiA8IGppbm1vbmNoaXJpXCA7CivlirTlg43kuonorbAgPCByb3Vkb3Vzb3VnaVwgOwor5oOF5aCx5Yem55CGIDwgam91aG91c2hvcmlcIDsKK+WPr+Wkieizh+acrCA8IGthaGVuc2hpaG9uXCA7Civngrrmm7/lt67nm4ogPCBrYXdhc2VzYWVraVwgOwor6KqY5ouQ5LqL5Lu2IDwgeXV1a2FpamlrZW5cIDsKK+S4ieWkp+mDveW4giA8IHNhbmRhaXRvc2hpXCA7CivnlLflhqXliKkgPCBvdG9rb215b3VyaVwgOwor5omA6KaB5pmC6ZaTIDwgc2hveW91amlrYW5cIDsKK+Wls+aoqemBi+WLlSA8IGpva2VuJyd1bmRvdVwgOwor5YiG5pWj5Yem55CGIDwgYnVuc2Fuc2hvcmlcIDsKK+i1sOihjOWPr+iDvSA8IHNvdWtvdWthbm91XCA7Civlkb3ntrEgPCBpbm9jaGlkenVuYVwgOwor5rWB6KiA6aOb6KqeIDwgcnl1dWdlbmhpZ29cIDsKK+S4gOaWsOe0gOWFgyA8IGlzc2hpbmtpZ2VuXCA7CivlvpLmiYvkvZPmk40gPCB0b3NodXRhaXNvdVwgOwor5LiK6IWV6aqoIDwgam91d2Fua290c3VcIDsKK+eUn+WRveWKmyA8IHNlaW1laXJ5b2t1XCA7CivnoazpqqjmvKIgPCBrb3Vrb3RzdWthblwgOwor5ZWG5qWt5ZywIDwgc2hvdWd5b3VjaGlcIDsKK+mHkei9oSA8IGthbmFndXRzdXdhXCA7CivkuIflubTluoogPCBtYW4nJ25lbmRva29cIDsKK+WPo+i7iiA8IGt1Y2hpZ3VydW1hXCA7CivorJvph4jluKsgPCBrb3VzaGFrdXNoaVwgOwor5LiJ5bmF5a++IDwgc2FucHVrdXRzdWlcIDsKK+ibi+eZveWwvyA8IHRhbnBha3VueW91XCA7CivliLrmv4Doh60gPCBzaGlnZWtpc2h1dVwgOwor6I2J6Z6L6JmrIDwgd2FyYWppbXVzaGlcIDsKK+mHkeiejealrSA8IGtpbicneXV1Z3lvdVwgOwor5bCB5bu65Li7576pIDwgaG91a2Vuc2h1Z2lcIDsKK+iPnOeoruayuSA8IG5hdGFuZWFidXJhXCA7Civlj5fpqJPmiKbkuokgPCBqdWtlbnNlbnNvdVwgOwor5Ye66Zuy5aSn56S+IDwgaXp1bW90YWlzaGFcIDsKK+mbm+S6uuW9oiA8IGhpbmFuaW5neW91XCA7CivmqKnploDli6LlrrYgPCBrZW5tb25zZWlrYVwgOwor54Sh552A6Zm4IDwgbXVjaGFrdXJpa3VcIDsKK+S4iuWIhuWIpSA8IGpvdWZ1bmJldHN1XCA7CivlpKfli5XohIggPCBkYWlkb3VteWFrdVwgOwor54Sh57ea5pON57imIDwgbXVzZW5zb3VqdXVcIDsKK+elnueEoeaciCA8IGthbicnbmFkenVraVwgOwor5bm86aa05p+TIDwgb3NhbmFuYWppbWlcIDsKK+WGhuWRqOeOhyA8IGVuc2h1dXJpdHN1XCA7CivlgJ/lrrbkuonorbAgPCBzaGFra2Fzb3VnaVwgOwor5a6H5a6Z56eR5a2mIDwgdWNodXVrYWdha3VcIDsKK+WVhualreWPsiA8IHNob3VneW91c2hpXCA7Civlj6Tlhbjoirjog70gPCBrb3RlbmdlaW5vdVwgOwor5bGx5bKz55eFIDwgc2FuZ2FrdWJ5b3VcIDsKK+imquS7u+WumCA8IHNoaW4nJ25pbmthblwgOwor6L+96Leh6ICFIDwgdHN1aXNla2lzaGFcIDsKK+ixquiPr+e1oueImyA8IGdvdWtha2VucmFuXCA7CivnmbrkvJrlvI8gPCBoYWtrYWlzaGlraVwgOwor5amm5Lq66YGL5YuVIDwgZnVqaW4nJ3VuZG91XCA7CivluorpnaLnqY0gPCB5dWthbWVuc2VraVwgOwor5LiN5YuV5piO546LIDwgZnVkb3VteW91b3VcIDsKK+S9k+WkluWPl+eyviA8IHRhaWdhaWp1c2VpXCA7Civni7jopqrniLYgPCB0YW51a2lveWFqaVwgOwor5pyo55+z5ryiIDwgYm9rdXNla2lrYW5cIDsKK+WbvemYsuecgSA8IGtva3Vib3VzaG91XCA7Civli6Tli5nlubTpmZAgPCBraW5tdW5lbmdlblwgOwor5Zu95paH5a2mIDwga29rdWJ1bmdha3VcIDsKK+eUn+auluiFuiA8IHNlaXNob2t1c2VuXCA7CivmuoDloLTkuIDoh7QgPCBtYW5qb3VpdGNoaVwgOwor5YmN5LiW55Sf5a2YIDwgemVuc2VzZWl6b25cIDsKK+iHquauuueahCA8IGppc2F0c3V0ZWtpXCA7CivkvJroqIjlubTluqYgPCBrYWlrZWluZW5kb1wgOwor6YCg54mp5Li7IDwgem91YnV0c3VzaHVcIDsKK+S4h+iRieS7ruWQjSA8IG1hbicneW91Z2FuYVwgOwor5YKN6IG06ZqP5oSPIDwgYm91Y2hvdXp1aWlcIDsKK+eUqOWFteihkyA8IHlvdWhlaWp1dHN1XCA7Civntbblr77lpJrmlbAgPCB6ZXR0YWl0YXN1dVwgOwor5Y+W6Kq/IDwgdG9yaXNoaXJhYmVcIDsKK+mAgOiBt+mHkSA8IHRhaXNob2t1a2luXCA7CivntIXnmb3oqablkIggPCBrb3VoYWt1amlhaVwgOwor5Lya6KiI55uj5p+7IDwga2Fpa2Vpa2Fuc2FcIDsKK+W9juaciOeKtiA8IHdhbmdldHN1am91XCA7CivlhavntJjkuIDlrocgPCBoYWtrb3VpY2hpdVwgOwor6Iie5Y+w6KOF572uIDwgYnV0YWlzb3VjaGlcIDsKK+eUn+ayoeW5tCA8IHNlaWJvdHN1bmVuXCA7CivljZjkuIDmgKcgPCB0YW4nJ2l0c3VzZWlcIDsKK+m8u+afsSA8IGhhbmFiYXNoaXJhXCA7CivmjIHntprlipsgPCBqaXpva3VyeW9rdVwgOwor5LqL5YuZ6ZW35a6YIDwgamltdWNob3VrYW5cIDsKK+S4gOiIrOekvuS8miA8IGlwcGFuc2hha2FpXCA7Civml6XluJ3mmYLku6MgPCBuaXR0ZWlqaWRhaVwgOwor5paw6IGe5qWtIDwgc2hpbmJ1bmd5b3VcIDsKK+eZu+Wdgui7iue3miA8IHRvaGFuc2hhc2VuXCA7CivnpZ7ntYzmoLggPCBzaGlua2Vpa2FrdVwgOwor5LiW55WM5pyA5aSnIDwgc2VrYWlzYWlkYWlcIDsKK+aMh+WwjuWOn+eQhiA8IHNoaWRvdWdlbnJpXCA7CivmnqLou7jlm70gPCBzdXVqaWt1a29rdVwgOwor6YCg5qyh6aGb5rKbIDwgem91aml0ZW5wYWlcIDsKK+iIquepuueuoeeQhiA8IGtvdWt1dWthbnJpXCA7CivkuInoibLniYggPCBzYW5zaG9rdWJhblwgOwor56qv5Y2wIDwga2FtYWppcnVzaGlcIDsKK+S4remWk+mnhSA8IGNodXVrYW4nJ2VraVwgOwor6IO96KOF5p2fIDwgbm91c2hvdXpva3VcIDsKK+e1kOaZtuWtpiA8IGtlc3Nob3VnYWt1XCA7CivmhJ/mn5PntYzot68gPCBrYW5zZW5rZWlyb1wgOwor6Kej5rG65rOVIDwga2Fpa2V0c3Vob3VcIDsKK+itpuaIkuiJsiA8IGtlaWthaXNob2t1XCA7CivkuoznrYnou43mm7kgPCBuaXRvdWd1bnNvdVwgOwor5LiA5q+b5L2cIDwgaWNoaW1vdXNha3VcIDsKK+a4qeeGseaApyA8IG9uJyduZXRzdXNlaVwgOwor6Ziy54Gr5aGX5paZIDwgYm91a2F0b3J5b3VcIDsKK+iHque4hOiHque4myA8IGppam91amliYWt1XCA7CivpgJTkuK3kuIvou4ogPCB0b2NodXVnZXNoYVwgOwor55Kw5aKD5L+d6K23IDwga2Fua3lvdWhvZ29cIDsKK+WYmOeZuuimi+WZqCA8IHVzb2hha2tlbmtpXCA7CivpnaLkvJrmmYLplpMgPCBtZW5rYWlqaWthblwgOwor6YeN5qmf6Zai6YqDIDwganV1a2lrYW5qdXVcIDsKK+WGheWPjeiEmiA8IG5haWhhbmt5YWt1XCA7Civms5XmoYjlr6norbAgPCBob3VhbnNoaW5naVwgOwor5bu257iE5ryBIDwgaGFlbmF3YXJ5b3VcIDsKK+ebtOaWueS9kyA8IGNob2t1aG91dGFpXCA7Civoh6rli5XliLblvqEgPCBqaWRvdXNlaWd5b1wgOwor5a625peP6YGUIDwga2F6b2t1dGFjaGlcIDsKK+WIuua/gOeahCA8IHNoaWdla2l0ZWtpXCA7CivlgIvkurrmjIflsI4gPCBrb2ppbnNoaWRvdVwgOwor6Ieq54S255m654GrIDwgc2hpemVuaGFra2FcIDsKK+S4u+WLmeWkp+iHoyA8IHNodW11ZGFpamluXCA7Civnn63mnJ/msbrmiKYgPCB0YW5raWtlc3NlblwgOwor6KiA6Kqe6YGL55SoIDwgZ2VuZ291bicneW91XCA7CivkuqTmj5vlsYAgPCBrb3VrYW5reW9rdVwgOwor5Y2x6Zm65oCd5oOzIDwga2lrZW5zaGlzb3VcIDsKK+epuuWfn+euoeeQhiA8IGt1dWlraWthbnJpXCA7CivlvqHmrr/lpbPkuK0gPCBnb3RlbmpvY2h1dVwgOwor5LiD5bm05b+MIDwgc2hpY2hpbmVua2lcIDsKK+mao+S/neS6i+alrSA8IHJpbnBvamlneW91XCA7CivmgqrmiK/mm7ggPCBpdGF6dXJhZ2FraVwgOwor5Y2D5Lq66YedIDwgc2VuJyduaW5iYXJpXCA7CivlkIjmhI/lv4PkuK0gPCBnb3Vpc2hpbmp1dVwgOwor5LiW55WM6KiY6YyyIDwgc2VrYWlraXJva3VcIDsKK+WfuuacrOadoeS7tiA8IGtpaG9uam91a2VuXCA7CivovrLmsJHkuIDmj4YgPCBub3VtaW4nJ2lra2lcIDsKK+WJjeS7o+acquiBniA8IHplbmRhaW1pbW9uXCA7Civmtojmr5LmtrIgPCBzaG91ZG9rdWVraVwgOwor6KSH5ZCI5rGa5p+TIDwgZnVrdWdvdW9zZW5cIDsKK+e1tuWvvumbtuW6piA8IHpldHRhaXJlaWRvXCA7Civmp4vmiJDlj6/og70gPCBrb3VzZWlrYW5vdVwgOwor5LiA5Lq66Iie5Y+wIDwgaGl0b3JpYnV0YWlcIDsKK+earuS4i+e1hOe5lCA8IGhpa2Fzb3NoaWtpXCA7CivmsrnnoKXnn7MgPCBhYnVyYXRvaXNoaVwgOwor5Zyw5LiL6LOH5rqQIDwgY2hpa2FzaGlnZW5cIDsKK+eLkOmlgumjqSA8IGtpdHN1bmV1ZG9uXCA7Civmv4PopJDoibIgPCBub3VrYXNzaG9rdVwgOwor5p2Q5pyo5ZWGIDwgemFpbW9rdXNob3VcIDsKK+eZveWMluWAi+S9kyA8IGhha3VrYWtvdGFpXCA7Civpm7voqbHlm57nt5ogPCBkZW53YWthaXNlblwgOwor5LiN5q2j5ZKs5ZCIIDwgZnVzZWlrb3Vnb3VcIDsKK+aRqeiotuS4jeaAneitsCA8IG1ha2FmdXNoaWdpXCA7Civljp/oibLniYggPCBnZW5zaG9rdWJhblwgOwor576O5a655L2T5pONIDwgYml5b3V0YWlzb3VcIDsKK+WNlOitsOmbouWpmiA8IGt5b3VnaXJpa29uXCA7CivolKbomL8gPCB0c3V0YWthenVyYVwgOwor5rip5pqW5YmN57eaIDwgb25kYW56ZW5zZW5cIDsKK+WNmOmgheW8jyA8IHRhbmtvdXNoaWtpXCA7CivmlrDopo/kv53nrqEgPCBzaGlua2lob2thblwgOwor5Zyf5rCX6ImyIDwgdHN1Y2hpa2Vpcm9cIDsKK+WPlue3oCA8IHRvcmlzaGltYXJpXCA7Civku5jlsZ7nr4AgPCBmdXpva3VzZXRzdVwgOwor5LiA6LKr55Wq5Y+3IDwgaWtrYW5iYW5nb3VcIDsKK+ePvuihjOazleimjyA8IGdlbmtvdWhvdWtpXCA7CivkuIDnlarpto8gPCBpY2hpYmFuZG9yaVwgOwor57SL56ug5a2mIDwgbW9uc2hvdWdha3VcIDsKK+ecn+WPquS4rSA8IG1hdHRhZGFuYWthXCA7CivnpZblm73lvqnluLAgPCBzb2tva3VmdWtraVwgOwor5ZCr5rC054Kt57SgIDwgZ2Fuc3VpdGFuc29cIDsKK+WKtOWDjeaZgumWkyA8IHJvdWRvdWppa2FuXCA7Civlh7rluK3ogIUgPCBzaHVzc2VraXNoYVwgOwor54K65pu/55u45aC0IDwga2F3YXNlc291YmFcIDsKK+S4lueVjOS4gOWRqCA8IHNla2FpaXNzaHV1XCA7CivljLvnmYLms5XkurogPCBpcnlvdWhvdWppblwgOwor6ZaA5YmN55S6IDwgbW9uemVubWFjaGlcIDsKK+awt+iiiyA8IGtvb3JpYnVrdXJvXCA7CivpvJPoiJ7mv4DlirEgPCBrb2J1Z2VraXJlaVwgOwor5pWZ6KiT55qEIDwga3lvdWt1bnRla2lcIDsKK+iyr+mHkeWxgCA8IGNob2tpbmt5b2t1XCA7Civlrpjlg5roh60gPCBrYW5yeW91c2h1dVwgOwor6LmE6YmE5belIDwgdGVpdGV0c3Vrb3VcIDsKK+eykuW6puWIhuW4gyA8IHJ5dXVkb2J1bnB1XCA7CivnpZ7ntYzlraYgPCBzaGlua2VpZ2FrdVwgOwor5oqV5LiL6LOH5pysIDwgdG91a2FzaGlob25cIDsKK+eUqOaEj+WRqOWIsCA8IHlvdWlzaHV1dG91XCA7CivooajnjoTplqIgPCBvbW90ZWdlbmthblwgOwor5YaF54eD5qmf6ZaiIDwgbmFpbmVua2lrYW5cIDsKK+WHuuW8teW6lyA8IHNodXRjaG91dGVuXCA7Civml4XooYzpnoQgPCByeW9rb3VrYWJhblwgOwor5rib5aGp6aOfIDwgZ2VuJydlbnNob2t1XCA7Civlm6PkvZPlrqIgPCBkYW50YWlreWFrdVwgOwor6Ziy5rC05Yqg5belIDwgYm91c3Vpa2Frb3VcIDsKK+W/g+mciuWtpiA8IHNoaW5yZWlnYWt1XCA7CivlgIvkurrmtojosrsgPCBrb2ppbnNob3VoaVwgOwor5Luu5oCn6L+R6KaWIDwga2FzZWlraW5zaGlcIDsKK+Wkp+ato+eQtCA8IHRhaXNob3Vnb3RvXCA7CivmrKDli6TnjocgPCBrZWtraW5yaXRzdVwgOwor5a6a552A5YmkIDwgdGVpY2hha3V6YWlcIDsKK+WNl+ilvyA8IG1pbmFtaW5pc2hpXCA7CivlhaXloLTmlpkgPCBueXV1am91cnlvdVwgOwor6YCQ6Kqe6KizIDwgY2hpa3Vnb3lha3VcIDsKK+aAneiAg+WKmyA8IHNoaWtvdXJ5b2t1XCA7CivkubPnlKjniZsgPCBueXV1eW91Z3l1dVwgOwor5q2j6Kaa5Z2KIDwgc2hvdWdha3Vib3VcIDsKK+e3keiXu+mhniA8IHJ5b2t1c291cnVpXCA7Civnm67mkoPogIUgPCBtb2t1Z2VraXNoYVwgOwor6buS5puc55+zIDwga29rdXlvdXNla2lcIDsKK+epuuawl+S8neafkyA8IGt1dWtpZGVuc2VuXCA7CivmuoDkuIDlubQgPCBtYW4nJ2ljaGluZW5cIDsKK+ayoeaIkeeahCA8IGJvdHN1Z2F0ZWtpXCA7CivlkKvlobXnjocgPCBnYW5qaW5yaXRzdVwgOwor5bm85bm05pmC5LujIDwgeW91bmVuamlkYWlcIDsKK+mAgOiBt+iAhSA8IHRhaXNob2t1c2hhXCA7CivolLXlsYvmlbcgPCBrdXJheWFzaGlraVwgOwor56S+5Lya5b6p5biwIDwgc2hha2FpZnVra2lcIDsKK+mbu+awl+ijveWTgSA8IGRlbmtpc2VpaGluXCA7CivljIXph5EgPCB0c3V0c3VtaWtpblwgOwor5YaN5bu656+JIDwgc2Fpa2VuY2hpa3VcIDsKK+eUo+WppuS6uuenkeWMuyA8IHNhbmZ1amlua2FpXCA7CivkuIDosqvkvZzmpa0gPCBpa2thbnNhZ3lvdVwgOwor5rue5Zyo5pyf6ZaTIDwgdGFpemFpa2lrYW5cIDsKK+eMrui6q+eahCA8IGtlbnNoaW50ZWtpXCA7CivnhKHlvaLosqHnlKMgPCBtdWtlaXphaXNhblwgOwor5aao5a6z54mpIDwgYm91Z2FpYnV0c3VcIDsKK+eCueecvOiWrCA8IHRlbmdhbicneWFrdVwgOwor5YWD6aaW55u4IDwgbW90b3NodXNob3VcIDsKK+eEoeaWrei7oui8iSA8IG11ZGFudGVuc2FpXCA7CivmgZDmsLTnl4UgPCBreW91c3VpYnlvdVwgOwor5Z2H6KGh5LqI566XIDwga2lua291eW9zYW5cIDsKK+WvhuWjsuWTgSA8IG1pdHN1YmFpaGluXCA7Civnn7Plt53nnIwgPCBpc2hpa2F3YWtlblwgOwor5LuY5biv5p2h5Lu2IDwgZnV0YWlqb3VrZW5cIDsKK+WJr+S8mumVtyA8IGZ1a3VrYWljaG91XCA7CivnmbrmmI7ogIUgPCBoYXRzdW1laXNoYVwgOwor6LuN5LqL5bel5aC0IDwgZ3Vuamlrb3Vqb3VcIDsKK+acieWKueaVsOWtlyA8IHl1dWtvdXN1dWppXCA7CivlibXkvZznmoQgPCBzb3VzYWt1dGVraVwgOwor6IeN5LiL5Li555SwIDwgc2Vpa2F0YW5kZW5cIDsKK+Wkp+mAhue9qiA8IHRhaWd5YWt1emFpXCA7CivoqabnlKjmnJ/plpMgPCBzaGl5b3VraWthblwgOwor5LiA5YWD55qEIDwgaWNoaWdlbnRla2lcIDsKK+WMluWtpuWkieWMliA8IGthZ2FrdWhlbmthXCA7Civoh6rli5Xou4rnqI4gPCBqaWRvdXNoYXplaVwgOwor6KiA6Kqe6YGT5patIDwgZ29uZ29kb3VkYW5cIDsKK+eZvumdouebuCA8IGh5YWt1bWVuc291XCA7CivkuI3kvrXnlaUgPCBmdXNoaW5yeWFrdVwgOwor5Y+k54uQIDwgZnVydWdpdHN1bmVcIDsKK+S7mOWxnueJqSA8IGZ1em9rdWJ1dHN1XCA7Civmi4Xkv53nianmqKkgPCB0YW5wb2J1a2tlblwgOwor5Za25qWt5pmC6ZaTIDwgZWlneW91amlrYW5cIDsKK+WLieW8t+S4rSA8IGJlbmt5b3VjaHV1XCA7CivlhpnnnJ/luLMgPCBzaGFzaGluY2hvdVwgOwor5LiA55uu5pWjIDwgaWNoaW1va3VzYW5cIDsKK+miqOWKm+ioiCA8IGZ1dXJ5b2t1a2VpXCA7CivmtLvnlKjlvaIgPCBrYXRzdXlvdWtlaVwgOwor6Ieq5YuV5omJIDwgamlkb3V0b2JpcmFcIDsKK+aEm+Wmu+W8geW9kyA8IGFpc2FpYmVudG91XCA7CivkvJrnpL7nq4sgPCBrYWlzaGFyaXRzdVwgOwor576O55qE5auM5oKqIDwgYml0ZWtpa2VuJydvXCA7Civopovnm67lvaIgPCBtaW1la2F0YWNoaVwgOwor5LiJ5Y2D5LiW55WMIDwgc2FuemVuc2VrYWlcIDsKK+mRkeWIpeaJgCA8IGthbmJldHN1c2hvXCA7CivlpJrph43mlL7pgIEgPCB0YWp1dWhvdXNvdVwgOwor5LqM6YeN5aSW5LqkIDwgbmlqdXVnYWlrb3VcIDsKK+S7ruWlkee0hCA8IGthcmlrZWl5YWt1XCA7CivmoLjmi6HmlaMgPCBrYWt1a2FrdXNhblwgOwor5ZGo6L665Zu9IDwgc2h1dWhlbmtva3VcIDsKK+S6iOWCmeW3peS9nCA8IHlvYmlrb3VzYWt1XCA7Civnn63ms6LmlL7pgIEgPCB0YW5wYWhvdXNvdVwgOwor6aKo5YWJ57W25L2zIDwgZnV1a291emVra2FcIDsKK+W/heeEtuaApyA8IGhpdHN1emVuc2VpXCA7CivkuLvmg4XkuLvnvqkgPCBzaHVqb3VzaHVnaVwgOwor5Lih5pu/5ZWGIDwgcnlvdWdhZXNob3VcIDsKK+ihjOWLleS4u+e+qSA8IGtvdWRvdXNodWdpXCA7Civoh6rliIboh6rouqsgPCBqaWJ1bmppc2hpblwgOwor6ISx6Imy5YmkIDwgZGFzc2hva3V6YWlcIDsKK+WknOWFieWhl+aWmSA8IHlha291dG9yeW91XCA7Civlj7Plv4PlrqQgPCB1c2hpbnNoaXRzdVwgOwor5Yqb6Z2pIDwgY2hpa2FyYWdhd2FcIDsKK+S4reWkruWPoyA8IGNodXVvdWd1Y2hpXCA7CivnnJ/oj4znl4cgPCBzaGlua2luc2hvdVwgOwor5Zyn5Yqb5rOiIDwgYXRzdXJ5b2t1aGFcIDsKK+W4sOeEoeS7ruiqrCA8IGtpbXVrYXNldHN1XCA7CivluILloLTljp/nkIYgPCBzaGlqb3VnZW5yaVwgOwor5YWo5Zu955qEIDwgemVua29rdXRla2lcIDsKK+S6rOa7i+WcsOaWuSA8IGtlaWppY2hpaG91XCA7CivnuITmoq/lrZAgPCBuYXdhYmFzaGlnb1wgOwor5aSn576p5ZCN5YiGIDwgdGFpZ2ltZWlidW5cIDsKK+WRvOWQuOmBi+WLlSA8IGtva3l1dXVuZG91XCA7Civonrrml4vpmo7mrrUgPCByYXNlbmthaWRhblwgOwor6Iux6Kqe5pWZ6IKyIDwgZWlnb2t5b3Vpa3VcIDsKK+ixoeeJmea1t+WyuCA8IHpvdWdla2FpZ2FuXCA7CivmiJHnianpoZQgPCB3YWdhbW9ub2dhb1wgOwor5pel5pys6ISz54KOIDwgbmlob24nJ25vdWVuXCA7Civpo5/loILou4ogPCBzaG9rdWRvdXNoYVwgOwor6YGL5Za25aeU5ZOh5LyaIDwgdW4nJ2VpaWlua2FpXCA7CivlloTnn6XorZggPCB6ZW5jaGlzaGlraVwgOwor5ZKM6a2C5ryi5omNIDwgd2Frb25rYW5zYWlcIDsKK+e1jOWWtuWGjeW7uiA8IGtlaWVpc2Fpa2VuXCA7CivohLPkuIvlnoLkvZMgPCBub3VrYXN1aXRhaVwgOwor5LiA5YaG5pytIDwgaWNoaWVuc2F0c3VcIDsKK+imluiBtOimmiA8IHNoaWNob3VrYWt1XCA7Civli5/ph5HpgYvli5UgPCBib2tpbicndW5kb3VcIDsKK+iAkOeGsemLvCA8IHRhaW5ldHN1a291XCA7CivliLvoi6bli4nlirEgPCBrb2trdWJlbnJlaVwgOwor5pei5ama55S35oCnIDwga2lrb25kYW5zZWlcIDsKK+mdqeWRveeahCA8IGtha3VtZWl0ZWtpXCA7CivmsrvmsLTlt6XkuosgPCBjaGlzdWlrb3VqaVwgOwor5bCP5LyR5q2iIDwgc2hvdWt5dXVzaGlcIDsKK+aXpeacrOS6uuirliA8IG5paG9uamlucm9uXCA7Civlpb3lj5bntYQgPCBrb3V0b3Jpa3VtaVwgOwor5Y2a5aWV5a6/IDwgYmFrdWNoaXlhZG9cIDsKK+i7jeS6i+WFrOWCtSA8IGd1bmppa291c2FpXCA7CivljYHkurrljYHoibIgPCBqdXVuaW50b2lyb1wgOwor54Sh6YWN5Lya56S+IDwgbXVoYWlnYWlzaGFcIDsKK+iEs+iyp+ihgCA8IG5vdWhpbmtldHN1XCA7Civlrrbml4/miYvlvZMgPCBrYXpva3V0ZWF0ZVwgOwor5rSX56S85byPIDwgc2VucmVpc2hpa2lcIDsKK+eUsumqqOaWhyA8IGtvdWtvdHN1YnVuXCA7Civml6XpioDliLggPCBuaWNoaWdpbmtlblwgOwor576F6Yed55uk5bqnIDwgcmFzaGluYmFuemFcIDsKK+emj+elieapn+WZqCA8IGZ1a3VzaGlraWtpXCA7CivosqfmsJHnqp8gPCBoaW5taW5rdXRzdVwgOwor5aWJ54yu54mpIDwgaG91a2VuYnV0c3VcIDsKK+Wun+alreWutiA8IGppdHN1Z3lvdWthXCA7Civog7jnrpfnlKggPCBtdW5lemFuJyd5b3VcIDsKK+aaq+WumuS6iOeulyA8IHphbnRlaXlvc2FuXCA7Civoh6rosrvlh7rniYggPCBqaWhpc2h1cHBhblwgOwor5Yas5pyo56uLIDwgZnV5dWtvZGFjaGlcIDsKK+W4uOeUqOa8ouWtlyA8IGpvdXlvdWthbmppXCA7CivntZDntK7ns7ggPCBrZXNzYXRzdXNoaVwgOwor546L5L6v6LK05pePIDwgb3Vrb3VraXpva3VcIDsKK+mAhuWuo+S8nSA8IGd5YWt1c2VuZGVuXCA7CivkurrkvZPmqKHlnosgPCBqaW50YWltb2tlaVwgOwor6a6u57SF6ImyIDwgc2Vua291c2hva3VcIDsKK+WFpeWbveeojiA8IG55dXVrb2t1emVpXCA7Civml6Xopb/ovp7lhbggPCBuaXNzZWlqaXRlblwgOwor56eB5YSAIDwgd2F0YWt1c2hpZ2lcIDsKK+aEn+aDheenu+WFpSA8IGthbmpvdWlueXV1XCA7Civmi6HlpKfpj6EgPCBrYWt1ZGFpa3lvdVwgOwor5Zyw5pa556u26aasIDwgY2hpaG91a2VpYmFcIDsKK+mBk+alveiAhSA8IGRvdXJha3Vtb25vXCA7CivlpbPmiL/lvbkgPCBueW91Ym91eWFrdVwgOwor5p2h57SE5Zu9IDwgam91eWFrdWtva3VcIDsKK+WKm+i2syA8IGNoaWthcmFhc2hpXCA7CivntYzmuIjlirnmnpwgPCBrZWl6YWlrb3VrYVwgOwor5Luj5pu/54mpIDwgZGFpdGFpYnV0c3VcIDsKK+a3t+WHneWcnyA8IGtvbmt1cml6ZXRvXCA7CivmsJHkuovoqLToqJ8gPCBtaW5qaXNvc2hvdVwgOwor5YyW5a2m6KiY5Y+3IDwga2FnYWt1a2lnb3VcIDsKK+engeS+myA8IHdhdGFzaGlkb21vXCA7Civlj4LliqDmhI/orZggPCBzYW5rYWlzaGlraVwgOwor5oim5pmC5L2T5Yi2IDwgc2Vuaml0YWlzZWlcIDsKK+iHqueUseW4guWgtCA8IGppeXV1c2hpam91XCA7CivlhrfmiL/lrozlgpkgPCByZWlib3VrYW5iaVwgOwor6Ieq5bex5Y+M5a++IDwgamlrb3NvdXRzdWlcIDsKK+a2iOavkuWJpCA8IHNob3Vkb2t1emFpXCA7CivlipvosqAgPCBjaGlrYXJhbWFrZVwgOwor54Gr54e15o6b5biDIDwga290YXRzdWdha2VcIDsKK+S4h+iDveiWrCA8IG1hbicnbm91eWFrdVwgOwor5L+h5oaR5oCnIDwgc2hpbnB5b3VzZWlcIDsKK+W4jOacm+S+oeagvCA8IGtpYm91a2FrYWt1XCA7CivliJfkvJ3kvZMgPCByZXRzdWRlbnRhaVwgOwor5Y+j5Y+v56yRIDwga3VjaGlva2FzaGlcIDsKK+mBuOWvvuacrOmDqCA8IHNlbnRhaWhvbmJ1XCA7CivlhYjpoK3miZPogIUgPCBzZW50b3VkYXNoYVwgOwor5a6f55Sf5rS7IDwgamlzc2Vpa2F0c3VcIDsKK+WQjeWJjeepuumWkyA8IG5hbWFla3V1a2FuXCA7Civnmb7lp5PlrrYgPCBoeWFrdXNob3V5YVwgOwor5rWF6I2J5rW36IuUIDwgYXNha3VzYW5vcmlcIDsKK+S6i+alreacrOmDqCA8IGppZ3lvdWhvbmJ1XCA7CivnkIboq5bpl5jkuokgPCByaXJvbnRvdXNvdVwgOwor5Lq65Y+j5aKX5YqgIDwgamlua291em91a2FcIDsKK+WkluS6pOi+nuS7pCA8IGdhaWtvdWppcmVpXCA7CivlkIzpn7PnlbDnvqnoqp4gPCBkb3VvbicnaWdpZ29cIDsKK+awj+Wnk+WItuW6piA8IHNoaXNlaXNlaWRvXCA7CivkuIDlsYDpg6ggPCBpY2hpa3lva3VidVwgOwor57iE5paH5pmC5LujIDwgam91bW9uamlkYWlcIDsKK+mWk+S4gOmrqiA8IGthbicnaXBwYXRzdVwgOwor5LiW55WM5aSn5oimIDwgc2VrYWl0YWlzZW5cIDsKK+apn+WLlea8lOe/kiA8IGtpZG91ZW5zaHV1XCA7Civoh6rorablm6Plk6EgPCBqaWtlaWRhbicnaW5cIDsKK+mbu+awl+aKteaKlyA8IGRlbmtpdGVpa291XCA7CivpjqfkuIDlhbcgPCB5b3JvaWljaGlndVwgOwor55S65Lq654mpIDwgY2hvdW5pbm1vbm9cIDsKK+mAmuios+WumCA8IHRzdXV5YWt1a2FuXCA7Civlv4XopoHmgqogPCBoaXRzdXlvdWFrdVwgOwor6YmE6YGT57ayIDwgdGV0c3Vkb3Vtb3VcIDsKK+WOn+eUo+eJqSA8IGdlbnNhbmJ1dHN1XCA7Civlmajmpb3mm7IgPCBraWdha3VreW9rdVwgOwor5b+F6KaB5oCnIDwgaGl0c3V5b3VzZWlcIDsKK+mYsumfs+ijhee9riA8IGJvdW9uc291Y2hpXCA7CivljYrpnaLorZggPCBoYW5tZW5zaGlraVwgOwor5rC05r6EIDwgbWl6dXN1bWFzaGlcIDsKK+WPluaJsSA8IHRvcmlhdHN1a2FpXCA7CivlpKLlv4PlnLAgPCB5dW1lZ29rb2NoaVwgOwor6LKg5YK15ZCI6KiIIDwgZnVzYWlnb3VrZWlcIDsKK+S7iumAseS4rSA8IGtvbnNodXVjaHV1XCA7CivoqbHkuIvmiYsgPCBoYW5hc2hpYmV0YVwgOwor6YGK6LuN6KiY6ICFIDwgeXV1Z3Vua2lzaGFcIDsKK+S+oeWApOS9k+ezuyA8IGthY2hpdGFpa2VpXCA7Civkuozph43ntZDlqZogPCBuaWp1dWtla2tvblwgOwor5LiA6ZW35LiA55+tIDwgaXRjaG91aXR0YW5cIDsKK+itt+mAgeiIueWboyA8IGdvc291c2VuZGFuXCA7Civniq/ooYznj77loLQgPCBoYW5rb3VnZW5iYVwgOwor5oSP6KaL5bqD5ZGKIDwgaWtlbmtvdWtva3VcIDsKK+Wwj+S5l+eahCA8IHNob3Vqb3V0ZWtpXCA7CivlloTlm6DlloTmnpwgPCB6ZW4nJ2luemVua2FcIDsKK+eri+iEmueCuSA8IHJpa2t5YWt1dGVuXCA7CivpiYTlhZwgPCB0ZXRzdWthYnV0b1wgOwor54Sh5Lq65Zyw5bivIDwgbXVqaW5jaGl0YWlcIDsKK+e1jOWWtui7ouaPmyA8IGtlaWVpdGVua2FuXCA7CivkuI3kv6Hlrp8gPCBmdXNoaW5qaXRzdVwgOwor6LKp5aOy5qmf5LyaIDwgaGFuYmFpa2lrYWlcIDsKK+S6ieWlquaIpiA8IHNvdWRhdHN1c2VuXCA7CivllYblrablo6sgPCBzaG91Z2FrdXNoaVwgOwor5LiK5bGL5pW3IDwga2FtaXlhc2hpa2lcIDsKK+iLpeWkp+WwhiA8IHdha2FkYWlzaG91XCA7CivpgaDpmpTmk43kvZwgPCBlbmtha3Vzb3VzYVwgOwor5pON6Ii15a6kIDwgc291ZGFzaGl0c3VcIDsKK+aIkOS6uuW8jyA8IHNlaWppbnNoaWtpXCA7CivmhaPnlKjoqp7lj6UgPCBrYW4nJ3lvdWdva3VcIDsKK+a2suS9k+epuuawlyA8IGVraXRhaWt1dWtpXCA7CivmlrDpnaLnm64gPCBzaGlubWVubW9rdVwgOwor5rOo5paH5pyNIDwgY2h1dW1vbmZ1a3VcIDsKK+S4iuajn+W8jyA8IGpvdXRvdXNoaWtpXCA7CivotaTpioXoibIgPCBzaGFrdWRvdWlyb1wgOwor5Ye65YiD5YyF5LiBIDwgZGViYWJvdWNob3VcIDsKK+WQkeWtpuW/gyA8IGtvdWdha3VzaGluXCA7CivmuIfmnJvogIUgPCBrYXRzdWJvdXNoYVwgOwor5Zyf6K6a5pys57eaIDwgZG9zYW5ob25zZW5cIDsKK+iyoeaUv+aUr+aPtCA8IHphaXNlaXNoaWVuXCA7Civlrq7lu7fnlLvlrrYgPCBreXV1dGVpZ2FrYVwgOwor5Z+36YGU5ZCPIDwgc2hpdHRhdHN1cmlcIDsKK+acgOW+jOWIl+i7iiA8IHNhaWdvcmVzc2hhXCA7CivnkIblt6Xlrabpg6ggPCByaWtvdWdha3VidVwgOwor5L+d566h5Lya56S+IDwgaG9rYW5nYWlzaGFcIDsKK+S5l+W/g+WcsCA8IG5vcmlnb2tvY2hpXCA7CivphY3lkIjnpoHlv4wgPCBoYWlnb3VraW5raVwgOwor5byU56Wt5paZIDwgY2hvdXNhaXJ5b3VcIDsKK+mBjuWJsOaKleizhyA8IGtham91dG91c2hpXCA7CivlrrbplbfliLbluqYgPCBrYWNob3VzZWlkb1wgOwor5Y+v6IG06Led6ZuiIDwga2FjaG91a3lvcmlcIDsKK+S4i+aknOWIhiA8IHNoaXRha2VuYnVuXCA7CivopqrpoZ7nuIHogIUgPCBzaGlucnVpZW5qYVwgOwor6ZaL5YKs5byPIDwga2Fpc2Fpc2hpa2lcIDsKK+eUsOiIjuWomCA8IGluYWthbXVzdW1lXCA7CivnrrHngavpiaIgPCBoYWtvaGliYWNoaVwgOwor54Sh55CG5b+D5LitIDwgbXVyaXNoaW5qdXVcIDsKK+WJr+mmluebuCA8IGZ1a3VzaHVzaG91XCA7CivlubTos4DokYnmm7ggPCBuZW5nYWhhZ2FraVwgOwor5pW15oS+5b+DIDwgdGVraWdhaXNoaW5cIDsKK+mHiOepuua1tyA8IHNoYWt1a3V1a2FpXCA7CivpgKPpgqbkuojnrpcgPCByZW5wb3V5b3NhblwgOwor57WE57mU56WoIDwgc29zaGlraWh5b3VcIDsKK+WHuui6q+iAhSA8IHNodXNzaGluc2hhXCA7CivlibXkvqHlrabkvJogPCBzb3VrYWdha2thaVwgOwor5LuV5LqL6YePIDwgc2hpZ290b3J5b3VcIDsKK+WNiuaciOW9oiA8IGhhbmdldHN1a2VpXCA7CivliIblrZDoqqwgPCBidW5zaGlzZXRzdVwgOwor5Y2K5pyI5byBIDwgaGFuZ2V0c3ViZW5cIDsKK+ato+etlOeOhyA8IHNlaXRvdXJpdHN1XCA7CivliKnlrZDoo5zntaYgPCByaXNoaWhva3l1dVwgOwor5a2j56+A55qEIDwga2lzZXRzdXRla2lcIDsKK+awt+aelSA8IGtvb3JpbWFrdXJhXCA7CivmsLTmn7EgPCBtaXp1YmFzaGlyYVwgOwor5qC55pys5Y6f55CGIDwga29ucG9uZ2VucmlcIDsKK+WuieWFqOS/nemanCA8IGFuemVuaG9zaG91XCA7Civljp/lrZDoqqwgPCBnZW5zaGlzZXRzdVwgOwor5YGl5bq35L+d6Zm6IDwga2Vua291aG9rZW5cIDsKK+aal+m7kuaZguS7oyA8IGFua29rdWppZGFpXCA7CivkuJbku6PkuqTku6MgPCBzZWRhaWtvdXRhaVwgOwor56We5ZiX56WtIDwga2FuJyduYW1lc2FpXCA7CivmoafoiJ7lj7AgPCBoaW5va2lidXRhaVwgOwor6Lui6YCB6Zu76KmxIDwgdGVuc291ZGVud2FcIDsKK+WvvuWxgOiAhSA8IHRhaWt5b2t1c2hhXCA7Civosp3mrrvpqqggPCBrYWlnYXJhYm9uZVwgOwor5Y2D5Lih566xIDwgc2VucnlvdWJha29cIDsKK+aYreWSjOaZguS7oyA8IHNob3V3YWppZGFpXCA7CivntJTlj47lhaUgPCBqdW5zaHV1bnl1dVwgOwor54mp55CG55qEIDwgYnV0c3VyaXRla2lcIDsKK+ael+eUo+eJqSA8IHJpbnNhbmJ1dHN1XCA7CivnqoHnhLbmrbsgPCB0b3RzdXplbnNoaVwgOwor5L2/55So6Kix5Y+vIDwgc2hpeW91a3lva2FcIDsKK+iovOWPluazlSA8IHNob3V0b3JpaG91XCA7CivmrbTlj7LnmoQgPCByZWtpc2hpdGVraVwgOwor57WE57mU55qEIDwgc29zaGlraXRla2lcIDsKK+i0iOWRiOW8jyA8IHpvdXRlaXNoaWtpXCA7CivnqY3ovInph48gPCBzZWtpc2FpcnlvdVwgOwor6Ieq55m655qEIDwgamloYXRzdXRla2lcIDsKK+W3sSA8IHRzdWNoaW5vdG9cIDsKK+WxoSA8IHNoaWJhc2hpYmFcIDsKK+isgCA8IGhha2FyaWdvdG9cIDsKK+eGnyA8IHRzdWt1ZHp1a3VcIDsKK+WYtCA8IGt1Y2hpYmFzaGlcIDsKK+OAhSA8IGt1cmlrYWVzaGlcIDsKK+Wcn+efs+a1gSA8IGRvc2VraXJ5dXVcIDsKK+W4gueUuuadkSA8IHNoaWNob3Vzb25cIDsKK+mfs+alveaYoOeUuyA8IG9uZ2FrdWVpZ2FcIDsKK+mjn+WhqeawtCA8IHNob2t1ZW5zdWlcIDsKK+a9pOa7keayuSA8IGp1bmthdHN1eXVcIDsKK+a1geaYn+e+pCA8IHJ5dXVzZWlndW5cIDsKK+Wlkee0hOmHkSA8IGtlaXlha3VraW5cIDsKK+axuuitsOaWhyA8IGtldHN1Z2lidW5cIDsKK+iSuOeVmemFkiA8IGpvdXJ5dXVzaHVcIDsKK+mHneiRieaouSA8IHNoaW4nJ3lvdWp1XCA7CivnjJvli4nlvLcgPCBtb3ViZW5reW91XCA7CivlroflrpnpgYrms7MgPCB1Y2h1dXl1dWVpXCA7Civmt7HliLvljJYgPCBzaGlua29rdWthXCA7CivliIfpgJogPCBraXJpZG9vc2hpXCA7CivmiYDlvpfpoZQgPCB0b2tvcm9lZ2FvXCA7CivlvqHlrqLmp5ggPCBva3lha3VzYW1hXCA7CivolLXmm7jnpaggPCB6b3VzaG9oeW91XCA7Civkurrlt6Xpm6ogPCBqaW5rb3V5dWtpXCA7CivlkIzohbnku5QgPCBkb3VmdWt1c2hpXCA7CivlsITlgJblv4MgPCBzaGFrb3VzaGluXCA7Civkv53lgaXliLbluqYgPCBob2tlbnNlaWRvXCA7CivmupblgpnpgYvli5UgPCBqdW5iaXVuZG91XCA7Civku6PorbDliLbluqYgPCBkYWlnaXNlaWRvXCA7CivljZrlo6vlj7cgPCBoYWt1c2hpZ291XCA7CivlhaXmvIHogIUgPCBueXV1Z3lvc2hhXCA7CivliKXpmaTmqKkgPCBiZXRzdWpva2VuXCA7CivmiKbpl5jmnI0gPCBzZW50b3VmdWt1XCA7CivmqKHlnovlnLDlm7MgPCBtb2tlaWNoaXp1XCA7CivppIrpto/mpa0gPCB5b3VrZWlneW91XCA7CivorbDmsbrmqKkgPCBnaWtldHN1a2VuXCA7CivlhaXlnJLmlpkgPCBueXV1ZW5yeW91XCA7CivlhKrlhYjnmoQgPCB5dXVzZW50ZWtpXCA7CivnhKHojLboi6bojLYgPCBtdWNoYWt1Y2hhXCA7CivlkIzkuIDoppYgPCBkb3VpdHN1c2hpXCA7Civlj6TlvoDku4rmnaUgPCBrb291a29ucmFpXCA7Civpm6PooYzpgZMgPCBuYW5neW91ZG91XCA7CivpgbrlpLHlk4EgPCBpc2hpdHN1aGluXCA7Civpo5/mlofljJYgPCBzaG9rdWJ1bmthXCA7Civpr7Dpq60gPCBuYW1henVoaWdlXCA7CivmsJHkuLvlm70gPCBtaW5zaHVrb2t1XCA7Civlho3luLDnhrEgPCBzYWlraW5ldHN1XCA7Civngq3ljJbniakgPCB0YW5rYWJ1dHN1XCA7Civmlq3niYfnmoQgPCBkYW5wZW50ZWtpXCA7CivmurrmrbvkvZMgPCBkZWtpc2hpdGFpXCA7CivmtbfmtIvlraYgPCBrYWl5b3VnYWt1XCA7Civmra/npZ7ntYwgPCBzaGlzaGlua2VpXCA7Civlj6Plj6MgPCBrdWNoaWd1Y2hpXCA7Civlj43mipfnmoQgPCBoYW5rb3V0ZWtpXCA7Civplovlgqzlm70gPCBrYWlzYWlrb2t1XCA7CivlvqHkuKHopqogPCBnb3J5b3VzaGluXCA7CivmkanliKnmlK/lpKkgPCBtYXJpc2hpdGVuXCA7Civkv67mraPmtrIgPCBzaHV1c2VpZWtpXCA7CivliJ3oqaMgPCBoYXRzdW1vdWRlXCA7Civnn7PnlbMgPCBpc2hpZGF0YW1pXCA7Civkurrngrrmt5jmsbAgPCBqaW4nJ2l0b3V0YVwgOwor5Y6a55Sf55yBIDwga291c2Vpc2hvdVwgOwor6YCG6KqsIDwgZ3lha3VzZXRzdVwgOwor6auY57Sa6LuKIDwga291a3l1dXNoYVwgOwor6Luf5paH5a2mIDwgbmFuYnVuZ2FrdVwgOwor56i85YON5pmC6ZaTIDwga2Fkb3VqaWthblwgOwor6Kmm5L2c5ZOBIDwgc2hpc2FrdWhpblwgOwor6Kaz6Kan5paZIDwga2FucmFucnlvdVwgOwor5LiN5L+h5Lu7IDwgZnVzaGluJyduaW5cIDsKK+iMuOmbsiA8IGtpbm9rb2d1bW9cIDsKK+i/kemBkyA8IGNoaWthbWljaGlcIDsKK+S4ieiEmuaetiA8IHNhbmt5YWt1a2FcIDsKK+WkieaFi+eahCA8IGhlbnRhaXRla2lcIDsKK+WMu+eZguWItuW6piA8IGlyeW91c2VpZG9cIDsKK+i/kei/kSA8IGNoaWthZGppa2FcIDsKK+S5numrmOiplSA8IGtvdWtvdWh5b3VcIDsKK+awtOW/gyA8IG1penVnb2tvcm9cIDsKK+avm+awiOiLlCA8IG1vdXNlbmdva2VcIDsKK+mdoue9tee9teWAkiA8IG1lbmJhYmF0b3VcIDsKK+S4ieWwuuW4ryA8IHNhbmpha3VvYmlcIDsKK+W/nOaApeetliA8IG91a3l1dXNha3VcIDsKK+eggueFmSA8IHN1bmFrZW11cmlcIDsKK+S6uumBk+eahCA8IGppbmRvdXRla2lcIDsKK+a1t+mFuOa8vyA8IHVtaWhvb3p1a2lcIDsKK+aJv+iqjeeKtiA8IHNob3VuaW5qb3VcIDsKK+maj+ethuWutiA8IHp1aWhpdHN1a2FcIDsKK+aguOiejeWQiCA8IGtha3V5dXVnb3VcIDsKK+aKvemBuOWIuCA8IGNodXVzZW5rZW5cIDsKK+W3nemtmiA8IGthd2F6YWthbmFcIDsKK+WFjeioseiovCA8IG1lbmt5b3Nob3VcIDsKK+e+juWuueihkyA8IGJpeW91anV0c3VcIDsKK+ijj+iyuOWxiyA8IHVyYWdhc2hpeWFcIDsKK+mYsuavkumdoiA8IGJvdWRva3VtZW5cIDsKK+W8geaFtuifuSA8IGJlbmtlaWdhbmlcIDsKK+WNr+W5tCA8IHVzYWdpZG9zaGlcIDsKK+S6jOe3muW8jyA8IG5pc2Vuc2hpa2lcIDsKK+W/heimgeS6iyA8IGhpdHN1eW91amlcIDsKK+eZuuaYjuWutiA8IGhhdHN1bWVpa2FcIDsKK+eLrOijgeiAhSA8IGRva3VzYWlzaGFcIDsKK+ecuuacm+aoqSA8IGNob3Vib3VrZW5cIDsKK+WGhemAmuiAhSA8IG5haXRzdXVzaGFcIDsKK+S4remVt+acnyA8IGNodXVjaG91a2lcIDsKK+mBuOaMmemBleWPjSA8IHNlbmt5b2loYW5cIDsKK+ePvuixoeirliA8IGdlbnNob3Vyb25cIDsKK+mtlOihk+W4qyA8IG1hanV0c3VzaGlcIDsKK+WbveWcn+W6gSA8IGtva3Vkb2Nob3VcIDsKK+epjeWIhuazlSA8IHNla2lidW5ob3VcIDsKK+S/oeWPt+eBryA8IHNoaW5nb3V0b3VcIDsKK+WNiumZsOmZvSA8IGhhbicnaW4nJ3lvdVwgOwor5pel5pys5pmC6ZaTIDwgbmlob25qaWthblwgOwor6L676L67IDwgdHN1aml0c3VqaVwgOwor5bmz6Z2i6Y+hIDwgaGVpbWVua3lvdVwgOwor5YyX5p6VIDwga2l0YW1ha3VyYVwgOwor5a6F6YWN5L6/IDwgdGFrdWhhaWJpblwgOwor6JCO57iu55eHIDwgaXNodWt1c2hvdVwgOwor5aSp55uu5bGxIDwgdGVubW9rdXphblwgOwor5YGP5bmz6LazIDwgaGVucGVpc29rdVwgOwor5rOV5a2m5aOrIDwgaG91Z2FrdXNoaVwgOwor5aW06Zq35Yi25bqmIDwgZG9yZWlzZWlkb1wgOwor5qeL6YCg5L+d5oyBIDwga291em91aG9qaVwgOwor56K65Z+3IDwga2FrdXNoaXRzdVwgOwor5rC35a6kIDwgaHlvdXNoaXRzdVwgOwor55m654WZ562SIDwgaGF0c3VlbnRvdVwgOwor5YG06aCt6JGJIDwgc29rdXRvdXlvdVwgOwor5aSp55qH5p2vIDwgdGVuJydub3VoYWlcIDsKK+e0sOiDnuaguCA8IHNhaWJvdWtha3VcIDsKK+iHquWLlei7iuWMliA8IGppZG91c2hha2FcIDsKK+eLrOaTheWgtCA8IGRva3VzZW5qb3VcIDsKK+aXpeacrOabuOe0gCA8IG5paG9uc2hva2lcIDsKK+ijvemLvOalrSA8IHNlaWtvdWd5b3VcIDsKK+WFieeGseiyuyA8IGtvdW5ldHN1aGlcIDsKK+aEm+mDt+W/gyA8IGFpa3lvdXNoaW5cIDsKK+axuuWIpSA8IGtldHN1YmV0c3VcIDsKK+eUn+eUo+mrmCA8IHNlaXNhbmRha2FcIDsKK+a1t+awtOa1tCA8IGthaXN1aXlva3VcIDsKK+S7rue5g+W4ryA8IGthcmlob3V0YWlcIDsKK+WPiuesrOiAhSA8IGt5dXVkYWlzaGFcIDsKK+W+jOaKgCA8IHVzaGlyb3dhemFcIDsKK+WNjeW3tCA8IG1hbmppZG9tb2VcIDsKK+exs+mZuOi7jSA8IGJlaXJpa3VndW5cIDsKK+W/g+WupCA8IHNoaW5zaGl0c3VcIDsKK+azqOaWh+WTgSA8IGNodXVtb25oaW5cIDsKK+aBkuW4uOeahCA8IGtvdWpvdXRla2lcIDsKK+S6uuW9ouW4qyA8IG5pbmd5b3VzaGlcIDsKK+amtOaVo+W8viA8IHJ5dXVzYW5kYW5cIDsKK+eZuumbu+apnyA8IGhhdHN1ZGVua2lcIDsKK+S4jeepuuaIkOWwsSA8IGZ1a3V1am91anVcIDsKK+aXp+W4guihlyA8IGt5dXVzaGlnYWlcIDsKK+ims+imp+W4rSA8IGthbnJhbnNla2lcIDsKK+Wun+eUqOWMliA8IGppdHN1eW91a2FcIDsKK+iAg+ePvuWtpiA8IGtvdWdlbmdha3VcIDsKK+W5s+WSjOmBi+WLlSA8IGhlaXdhdW5kb3VcIDsKK+WFrOWumuatqeWQiCA8IGtvdXRlaWJ1YWlcIDsKK+Wkqeiho+eEoee4qyA8IHRlbicnaW11aG91XCA7CivplovlgqzkuK0gPCBrYWlzYWljaHV1XCA7CivnkIbot6/mlbTnhLYgPCByaXJvc2VpemVuXCA7CivnnYDoibIgPCBjaGFrdXNob2t1XCA7CivljZfkuqznubvlrZAgPCBuYW5raW5qdXN1XCA7Civlhobpj6EgPCBtYXJ1a2FnYW1pXCA7CivnlKPmpa3nlYwgPCBzYW5neW91a2FpXCA7CivpgaPnm7QgPCB5YXJpbmFvc2hpXCA7CivomZrnhKHkuLvnvqkgPCBreW9tdXNodWdpXCA7CivlurbmsJHliocgPCBzaG9taW5nZWtpXCA7CivkuI3ku5XmnKsgPCBmdXNoaW1hdHN1XCA7CivlkYbmsJfogIUgPCB1dHN1a2Vtb25vXCA7Civop6PliZblraYgPCBrYWlib3VnYWt1XCA7Civku67ln4vokawgPCBrYXJpbWFpc291XCA7Civph6PpgZPlhbcgPCB0c3VyaWRvdWd1XCA7CivnlJ/nlKPpoY0gPCBzZWlzYW5nYWt1XCA7CivmgrLliofnmoQgPCBoaWdla2l0ZWtpXCA7CivnnYDohLEgPCBjaGFrdWRhdHN1XCA7CivljJfmsLfmtIsgPCBob3BweW91eW91XCA7CivljYHkuozmnIggPCBqdXVuaWdhdHN1XCA7CivlkIzlrablubQgPCBkb3VnYWt1bmVuXCA7CivlvZfmmJ8gPCBob3VraWJvc2hpXCA7Civnj77ku6PnmoQgPCBnZW5kYWl0ZWtpXCA7CivlpKLliKTmlq0gPCB5dW1laGFuZGFuXCA7CivlsrPlj4vkvJogPCBnYWt1eXV1a2FpXCA7Civli5jlrprlsLsgPCBrYW5qb3VqaXJpXCA7CivlhobpiYsgPCBtYXJ1Z2FuJyduYVwgOwor5b6M5b6MIDwgbm9jaGlub2NoaVwgOwor5ZCI5a6/5omAIDwgZ2Fzc2h1a3Vqb1wgOwor6KCx5oOR55qEIDwga293YWt1dGVraVwgOwor56m66ZaT6Lu4IDwga3V1a2FuamlrdVwgOwor5Lit6ZaT5bGkIDwgY2h1dWthbnNvdVwgOwor54m557Sa6YWSIDwgdG9ra3l1dXNodVwgOwor5qip5aiB5Li7576pIDwga2VuJydpc2h1Z2lcIDsKK+WNuOWVhiA8IG9yb3NoaXNob3VcIDsKK+e9suWQjeWbvSA8IHNob21laWtva3VcIDsKK+i+u+ikhCA8IHRzdWppdHN1bWFcIDsKK+awl+eCjuS4h+S4iCA8IGtpZW5iYW5qb3VcIDsKK+a8lOWKh+eahCA8IGVuZ2VraXRla2lcIDsKK+S6pOaIpuWbvSA8IGtvdXNlbmtva3VcIDsKK+WkluW9oueahCA8IGdhaWtlaXRla2lcIDsKK+S4remWk+WtkCA8IGNodXVrYW5zaGlcIDsKK+iKsemwuSA8IGhhbmFnYXRzdW9cIDsKK+aVtOa1geWtkCA8IHNlaXJ5dXVzaGlcIDsKK+WEquWFiOagqiA8IHl1dXNlbmthYnVcIDsKK+efreWFteaApSA8IHRhbnBlaWt5dXVcIDsKK+W8geaFtue4niA8IGJlbmtlaWppbWFcIDsKK+eJoeS4uembqiA8IGJvdGFuJyd5dWtpXCA7CivmlpzmoLzmgKcgPCBzaGFrYWt1c2VpXCA7CivptrTlmLQgPCB0c3VydWhhc2hpXCA7Civpq5jop5LnoLIgPCBrb3VrYWt1aG91XCA7CivmrbTlubTpvaIgPCByZWtpbmVucmVpXCA7CivnhKHliIbliKUgPCBtdWZ1bmJldHN1XCA7CivliLrmiJ/mgKcgPCBzaGlnZWtpc2VpXCA7CivlhYjpmqMgPCBzYWtpZG9uYXJpXCA7CivpgJrooYznqI4gPCB0c3V1a291emVpXCA7CivotoXoh6rnhLYgPCBjaG91c2hpemVuXCA7CivliYrmsLfmqZ8gPCBzYWt1aHlvdWtpXCA7CivlpZHntITogIUgPCBrZWl5YWt1c2hhXCA7CivlpJznm5fomasgPCB5b3RvdW11c2hpXCA7CivkuInkuInkuZ3luqYgPCBzYW5zYW5rdWRvXCA7CivlronlhajnjocgPCBhbnplbnJpdHN1XCA7Civljp/lrZDnl4cgPCBnZW5zaGlzaG91XCA7Civljp/lrZDnl4UgPCBnZW5zaGlieW91XCA7CivoqIjnrpfmqZ/plpMgPCBrZWlzYW5raW1hXCA7CivlraPnr4DmhJ8gPCBraXNldHN1a2FuXCA7Civml6fli5jlrpogPCBreXV1a2Fuam91XCA7Civku67oqr/ljbAgPCBrYXJpY2hvdWluXCA7CivnpLzlhIDkvZzms5UgPCByZWlnaXNhaG91XCA7Civmu4XojLboi6bojLYgPCBtZWNoYWt1Y2hhXCA7CivkuZfou4ros4MgPCBqb3VzaGFjaGluXCA7Civlt6botrMgPCBoaWRhcmlhc2hpXCA7CivpmLLomavliaQgPCBib3VjaHV1emFpXCA7CivlvpflpLEgPCB0b2t1c2hpdHN1XCA7CivmoLjmiKbkuokgPCBrYWt1c2Vuc291XCA7Civnmbrlo7Lml6UgPCBoYXRzdWJhaWJpXCA7CivogLPkuIvohbrngo4gPCBqaWthc2VuJydlblwgOwor5a6a6Laz5pWwIDwgdGVpc29rdXN1dVwgOwor55+z5rK55Y2x5qmfIDwgc2VraXl1a2lraVwgOwor6YeM56We5qW9IDwgc2F0b2thZ3VyYVwgOwor5ZKE44CFIDwgdG90c3V0b3RzdVwgOwor6Jap5pGp6IqLIDwgc2F0c3VtYWltb1wgOwor5aem6YCa572qIDwga2FudHN1dXphaVwgOwor5bGx5p6X5a2mIDwgc2FucmluZ2FrdVwgOwor5Ymv6K2w6ZW3IDwgZnVrdWdpY2hvdVwgOwor5YiR5LqL5LqL5Lu2IDwga2VpamlqaWtlblwgOwor6Iiq56m655eFIDwga291a3V1YnlvdVwgOwor5ryi6LaK6Z+zIDwga2FuJydldHN1b25cIDsKK+WHuuWFpeWPoyA8IGRlaXJpZ3VjaGlcIDsKK+WIqeeUqOS+oeWApCA8IHJpeW91a2FjaGlcIDsKK+mFkuWHpiA8IHNha2Vkb2tvcm9cIDsKK+S7rue0jeeojiA8IGthcmlub3V6ZWlcIDsKK+e3j+WQiOeahCA8IHNvdWdvdXRla2lcIDsKK+S7suijgeiAhSA8IGNodXVzYWlzaGFcIDsKK+WHuuWxleiAhSA8IHNodXR0ZW5zaGFcIDsKK+a0u+Wtl+S9kyA8IGthdHN1aml0YWlcIDsKK+iCmOmJhOegsiA8IGhpamlkZXBwb3VcIDsKK+Wvvui5oOWcsCA8IHRhaXNla2ljaGlcIDsKK+Wbnue3muiyoOiNtyA8IGthaXNlbmZ1a2FcIDsKK+W7u+a8lealrSA8IGthaXNvdWd5b3VcIDsKK+S9jumanOeijSA8IHRlaXNob3VnYWlcIDsKK+ats+aciCA8IHRvc2hpdHN1a2lcIDsKK+aui+S9memhjSA8IHphbicneW9nYWt1XCA7CivmqKrou4ogPCB5b2tvZ3VydW1hXCA7CivmsrvnmYLms5UgPCBjaGlyeW91aG91XCA7CivmqZ/morDmsrkgPCBraWthaWFidXJhXCA7Civoh6rnmbrmgKcgPCBqaWhhdHN1c2VpXCA7Civkv6Hlj7fmiYsgPCBzaGluZ291c2h1XCA7CivpppblsL7kuIDosqsgPCBzaHViaWlra2FuXCA7CivljLvnmYLkv53pmbogPCBpcnlvdWhva2VuXCA7CivmoIPmnKjnnIwgPCB0b2NoaWdpa2VuXCA7Civoqr/mn7vnpaggPCBjaG91c2FoeW91XCA7Civmraboo4Xop6PpmaQgPCBidXNvdWthaWpvXCA7Civnt6jlubTlj7IgPCBoZW4nJ25lbnNoaVwgOwor5Zyf552A5rCRIDwgZG9jaGFrdW1pblwgOwor5Y2T5Ye6IDwgdGFrdXNodXRzdVwgOwor6YCy5ZGI5pysIDwgc2hpbnRlaWJvblwgOwor55Ge5a6d56ugIDwgenVpaG91c2hvdVwgOwor6KGo5oSP5paH5a2XIDwgaHlvdWltb25qaVwgOwor6JC96YG46ICFIDwgcmFrdXNlbnNoYVwgOwor5YaF5YuY5a6aIDwgdWNoaWthbmpvdVwgOwor5aWJ57SN6aGNIDwgaG91bm91Z2FrdVwgOwor5byP5pelIDwgc2hpa2lqaXRzdVwgOwor57Sw6IOe5a2mIDwgc2FpYm91Z2FrdVwgOwor6YO95biC5Zu95a62IDwgdG9zaGlrb2trYVwgOwor5p6c5a6f5bqXIDwga2FqaXRzdXRlblwgOwor54Sh54K65b6S6aOfIDwgbXVpdG9zaG9rdVwgOwor5pig55S76Z+z5qW9IDwgZWlnYW9uZ2FrdVwgOwor5a6f5pmC6ZaTIDwgaml0c3VqaWthblwgOwor5YWl5ryB5qipIDwgbnl1dWd5b2tlblwgOwor5YWl6LOqIDwgbnl1dXNoaWNoaVwgOwor6JGX5L2c6ICFIDwgY2hvc2FrdXNoYVwgOwor552A552AIDwgY2hha3VjaGFrdVwgOwor5Y2X5YG0IDwgbWluYW1pZ2F3YVwgOwor6ISx6ISC5LmzIDwgZGFzc2hpbnl1dVwgOwor5YmN5b6M5bem5Y+zIDwgemVuZ29zYXl1dVwgOwor56Wt56WA5paZIDwgc2Fpc2hpcnlvdVwgOwor6YeO5oim54m556eRIDwgeWFzZW50b2trYVwgOwor5LiN576I5aWU5pS+IDwgZnVraWhvbnBvdVwgOwor5YaF5byB5oW2IDwgdWNoaWJlbmtlaVwgOwor5ZCR5LiK5b+DIDwga291am91c2hpblwgOwor5LiA5omL6LKp5aOyIDwgaXR0ZWhhbmJhaVwgOwor54mn576K6ICFIDwgYm9rdXlvdXNoYVwgOwor5Y+C6Kaz5Lq6IDwgc2Fua2FuJyduaW5cIDsKK+earuihoyA8IGthd2Fnb3JvbW9cIDsKK+Wdh+S4gOWMliA8IGtpbicnaXRzdWthXCA7CivlhbHlkIzogIUgPCBreW91ZG91c2hhXCA7CivmmI7mnJ3kvZMgPCBtaW5jaG91dGFpXCA7Civloanog6HmpJIgPCBzaGlva29zaG91XCA7CivogJDpnIfmgKcgPCB0YWlzaGluc2VpXCA7CivmlrDopb/omK0gPCBuecWrasSrcmFuZG9cIDsKK+WMuuWMuiA8IG1hY2hpbWFjaGlcIDsKK+edgOeZuiA8IGNoYWt1aGF0c3VcIDsKK+S4gOaemuiynSA8IGljaGltYWlnYWlcIDsKK+S5seaatOiAhSA8IHJhbmJvdW1vbm9cIDsKK+WQhOS4gOmDqCA8IGtha3VpY2hpYnVcIDsKK+mZsOaXpeWQkSA8IGthZ2VoaW5hdGFcIDsKK+e0q+WuuOauvyA8IHNoaXNoaW5kZW5cIDsKK+W5vemciuagqiA8IHl1dXJlaWthYnVcIDsKK+aJgOW+l+iAhSA8IHNob3Rva3VzaGFcIDsKK+i7jeS6i+WKmyA8IGd1bmppcnlva3VcIDsKK+WLneiyoOS6iyA8IHNob3VidWdvdG9cIDsKK+W9k+W6p+mgkOmHkSA8IHRvdXpheW9raW5cIDsKK+iKsemLjyA8IGhhbmFiYXNhbWlcIDsKK+e1puawtOi7iiA8IGt5dXVzdWlzaGFcIDsKK+e0sOiDnuWjgSA8IHNhaWJvdWhla2lcIDsKK+W6rea8hiA8IG5pd2F1cnVzaGlcIDsKK+ahnOiKseeIm+a8qyA8IG91a2FyYW5tYW5cIDsKK+WPr+mAhuaApyA8IGthZ3lha3VzZWlcIDsKK+iHqueUseiHquWcqCA8IGppeXV1aml6YWlcIDsKK+S5vueHpeeEoeWRsyA8IGthbnNvdW11bWlcIDsKK+S6jOmgheWumueQhiA8IG5pa291dGVpcmlcIDsKK+aHuOiznumHkSA8IGtlbnNob3VraW5cIDsKK+egguW1kCA8IHN1bmFhcmFzaGlcIDsKK+WQq+WXveiWrCA8IGdhbnNvdXlha3VcIDsKK+imi+WtpuiAhSA8IGtlbmdha3VzaGFcIDsKK+WEquWFiOW4rSA8IHl1dXNlbnNla2lcIDsKK+WwkeaVsOiAhSA8IHNob3VzdXVzaGFcIDsKK+WFseWQjOe3miA8IGt5b3Vkb3VzZW5cIDsKK+W5tOeUtyA8IHRvc2hpb3Rva29cIDsKK+WPiuesrOeCuSA8IGt5dXVkYWl0ZW5cIDsKK+a0u+aAp+axmuazpSA8IGthc3NlaW9kZWlcIDsKK+WIhumhnuihqCA8IGJ1bnJ1aWh5b3VcIDsKK+i/keecvOmPoSA8IGtpbmdhbmt5b3VcIDsKK+mWouaVsOaXjyA8IGthbnN1dXpva3VcIDsKK+eUuuadkeWItiA8IGNob3Vzb25zZWlcIDsKK+alteaCquS6uiA8IGdva3Vha3VuaW5cIDsKK+W8leWPl+S6uiA8IGhpa2l1a2VuaW5cIDsKK+e3qOW5tOS9kyA8IGhlbicnbmVudGFpXCA7Civku6PpoZjkurogPCBkYWlnYW4nJ25pblwgOwor5pyJ5Yqb6aasIDwgeXV1cnlva3ViYVwgOwor5qyh5qyhIDwgdHN1Z2l0c3VnaVwgOwor5LiJ5LiJ5LqU5LqUIDwgc2Fuc2FuZ29nb1wgOwor6Zmk6Zuq6LuKIDwgam9zZXRzdXNoYVwgOwor5aSn5a+p6ZmiIDwgZGFpc2hpbicnaW5cIDsKK+eojumWoumVtyA8IHplaWthbmNob3VcIDsKK+S4remWk+S9kyA8IGNodXVrYW50YWlcIDsKK+a7i+mkiueJqSA8IGppeW91YnV0c3VcIDsKK+S5neW3peWkpyA8IGt5dXVrb3VkYWlcIDsKK+WIgOeWtSA8IGthdGFuYWtpenVcIDsKK+WKoOa5v+WZqCA8IGthc2hpdHN1a2lcIDsKK+aWsOiogueJiCA8IHNoaW50ZWliYW5cIDsKK+mBleajmiA8IGNoaWdhaWRhbmFcIDsKK+WNgeS6uuWKmyA8IGp1dW5pbnJpa2lcIDsKK+S4i+Wuv+S6uiA8IGdlc2h1a3VuaW5cIDsKK+Wkp+alreeJqSA8IG9vd2F6YW1vbm9cIDsKK+ebtOethiA8IGNob2t1aGl0c3VcIDsKK+WBtOmdouimsyA8IHNva3VtZW5rYW5cIDsKK+W8kOW/gyA8IGZ1dGFnb2tvcm9cIDsKK+ePvuixoeeVjCA8IGdlbnNob3VrYWlcIDsKK+i/veippumokyA8IHRzdWlzaGlrZW5cIDsKK+WFiOWkqeeahCA8IHNlbnRlbnRla2lcIDsKK+W7uuevieWutiA8IGtlbmNoaWt1a2FcIDsKK+awtOmHj+ioiCA8IHN1aXJ5b3VrZWlcIDsKK+ebtOeriyA8IGNob2t1cml0c3VcIDsKK+WFnOifuSA8IGthYnV0b2dhbmlcIDsKK+imquihm+maiiA8IHNoaW4nJ2VpdGFpXCA7Civnm7LnqpMgPCBtZWt1cmFtYWRvXCA7CivlhYjlpKnnl4UgPCBzZW50ZW5ieW91XCA7CivnuYHmrpbmnJ8gPCBoYW5zaG9rdWtpXCA7CivoiLnlub3pnIogPCBmdW5heXV1cmVpXCA7CivmsJHml4/mgKcgPCBtaW56b2t1c2VpXCA7CivlvqHkuobmib8gPCBnb3J5b3VzaG91XCA7CivmsLTom4fluqcgPCBtaXp1aGViaXphXCA7Civmi53lpJbnmoQgPCBoYWlnYWl0ZWtpXCA7CivliLrmiJ/liaQgPCBzaGlnZWtpemFpXCA7CivmiYDlvpfnqI4gPCBzaG90b2t1emVpXCA7Civmo4nlrp/msrkgPCBtZW5qaXRzdXl1XCA7Civlh7rnjYQgPCBzaHV0c3Vnb2t1XCA7Civlh7rnjJ8gPCBzaHV0c3VyeW91XCA7Civli6TntprogIUgPCBraW56b2t1c2hhXCA7CivlpKnnmofliLYgPCB0ZW4nJ25vdXNlaVwgOwor5Zar54WZ6LuKIDwga2l0c3VlbnNoYVwgOwor5a6f57+S55SfIDwgamlzc2h1dXNlaVwgOwor5L2T57O755qEIDwgdGFpa2VpdGVraVwgOwor6YGK6IiI56iOIDwgeXV1a3lvdXplaVwgOwor5L+u6YGT5aOrIDwgc2h1dWRvdXNoaVwgOwor5paw5pWZ5b6SIDwgc2hpbmt5b3V0b1wgOwor56CC5Z+DIDwgc3VuYWJva29yaVwgOwor5Y2a6Kan5LyaIDwgaGFrdXJhbmthaVwgOwor5YmN55m76YyyIDwgemVudG91cm9rdVwgOwor5p2x5rSL5a2mIDwgdG91eW91Z2FrdVwgOwor5aSn5bCG6LuNIDwgZGFpc2hvdWd1blwgOwor5Zyo5bqr566h55CGIDwgemFpa29rYW5yaVwgOwor5Y6f5a2Q5qC4IDwgZ2Vuc2hpa2FrdVwgOwor5aSn5YWs5Zu9IDwgdGFpa291a29rdVwgOwor5LyR5oGv5omAIDwga3l1dXNva3Vqb1wgOwor5bem6ICzIDwgaGlkYXJpbWltaVwgOwor6auY6Zqc5a6zIDwga291c2hvdWdhaVwgOwor5Yqb5bivIDwgY2hpa2FyYW9iaVwgOwor5rGC6YGT6ICFIDwga3l1dWRvdXNoYVwgOwor5aSp5a6I6ZajIDwgdGVuc2h1a2FrdVwgOwor56CC5ZqiIDwgc3VuYWJ1a3Vyb1wgOwor5Lm+54mp5bGLIDwga2FuYnV0c3V5YVwgOwor5rC06YmE56CyIDwgbWl6dWRlcHBvdVwgOwor5Y2D5LiJ5bGLIDwgc2VubWl0c3V5YVwgOwor5YWl5riv56iOIDwgbnl1dWtvdXplaVwgOwor6YqA6KGM5qWtIDwgZ2lua291Z3lvdVwgOwor54Gr54G95L+d6Zm6IDwga2FzYWlob2tlblwgOwor5LyR5rOK5omAIDwga3l1dWhha3Vqb1wgOwor5Lq65bel55qEIDwgamlua291dGVraVwgOwor57216KmI6ZuR6KiAIDwgYmFyaXpvdWdvblwgOwor5YWJ6JiaIDwgaGlrYXJpZ29rZVwgOwor6IG06KaW6ICFIDwgY2hvdXNoaXNoYVwgOwor5Lih5Zu96KqeIDwgcnlvdWtva3Vnb1wgOwor6YGT6Lev5bCB6Y6WIDwgZG91cm9mdXVzYVwgOwor6Iqx6KmeIDwgaGFuYWtvdG9iYVwgOwor6auY54Cs6IifIDwgdGFrYXNlYnVuZVwgOwor57WE57mU5ZCNIDwgc29zaGlraW1laVwgOwor5Yid5rC3IDwgaGF0c3Vnb29yaVwgOwor5ZCM5pyf5byPIDwgZG91a2lzaGlraVwgOwor5aSn6IW46I+MIDwgZGFpY2hvdWtpblwgOwor5Y2K54uC5LmxIDwgaGFua3lvdXJhblwgOwor6LSF5rKi5ZOBIDwgemVpdGFrdWhpblwgOwor5bCP5aeU5ZOh5LyaIDwgc2hvdWlpbmthaVwgOwor5LiA5pys6YGTIDwgaXBwb25taWNoaVwgOwor5Yip5r2k546HIDwgcmlqdW5yaXRzdVwgOwor6L+r5a6z6ICFIDwgaGFrdWdhaXNoYVwgOwor5aSn5qW15q6/IDwgZGFpZ29rdWRlblwgOwor6YeN6YeP5oSfIDwganV1cnlvdWthblwgOwor576O5a2m55qEIDwgYmlnYWt1dGVraVwgOwor5YaZ55Sf5bizIDwgc2hhc2VpY2hvdVwgOwor5Lqk5riJ5aeU5ZOhIDwga291c2hvdWlpblwgOwor5buD5qOE54mpIDwgaGFpa2lidXRzdVwgOwor6Zu756OB55+zIDwgZGVuamlzaGFrdVwgOwor6YCg5Za254mpIDwgem91ZWlidXRzdVwgOwor5oqA6KGT6Z2iIDwgZ2lqdXRzdW1lblwgOwor5LuV572u6ICFIDwgc2hpb2tpbW9ub1wgOwor6Ium6Im+IDwgbmlnYXlvbW9naVwgOwor5pmC5Yi76KGoIDwgamlrb2t1aHlvdVwgOwor5ZCI5ZCM6KGM54K6IDwgZ291ZG91a291aVwgOwor54KJ6L666KuH6KmxIDwgcm9oZW5kYW53YVwgOwor5q+S56eR5a2mIDwgZG9rdWthZ2FrdVwgOwor55u06KGM5L6/IDwgY2hva2tvdWJpblwgOwor5omL5YaF6IG3IDwgdGVuYWlzaG9rdVwgOwor5peF6KGM5YWIIDwgcnlva291c2FraVwgOwor5qC45by+6aCtIDwga2FrdWRhbnRvdVwgOwor6YGO5Y675YiG6KmeIDwga2Frb2J1bnNoaVwgOwor56m66ZuG5ZCIIDwga3V1c2h1dWdvdVwgOwor55q/56ekIDwgc2FyYWJha2FyaVwgOwor54m56Kix5paZIDwgdG9ra3lvcnlvdVwgOwor5Li75oOF55qEIDwgc2h1am91dGVraVwgOwor5Za25Yip5Lya56S+IDwgZWlyaWdhaXNoYVwgOwor5pu06KGj5a6kIDwga291aXNoaXRzdVwgOwor5q665LyQIDwgc2F0c3ViYXRzdVwgOwor5Lya5bit6IazIDwga2Fpc2VraXplblwgOwor5Y2D5LiA5aScIDwgc2VuJydpY2hpeWFcIDsKK+ecn+eUsOe0kCA8IHNhbmFkYWhpbW9cIDsKK+mBk+WtpuiAhSA8IGRvdWdha3VzaGFcIDsKK+aPrueZuuaApyA8IGtpaGF0c3VzZWlcIDsKK+ayuOOAhSA8IGZ1dHN1ZnV0c3VcIDsKK+WHuuizh+mHkSA8IHNodXNzaGlraW5cIDsKK+eJp+e+iueKrCA8IGJva3V5b3VrZW5cIDsKK+S6uuS6i+S4jeecgSA8IGppbmppZnVzZWlcIDsKK+iSuOeVmeawtCA8IGpvdXJ5dXVzdWlcIDsKK+eVsOaAp+mWouS/giA8IGlzZWlrYW5rZWlcIDsKK+etieWcp+e3miA8IHRvdWF0c3VzZW5cIDsKK+avkuWRs+W9uSA8IGRva3VtaXlha3VcIDsKK+WFjuiEoyA8IG1pdHN1a3VjaGlcIDsKK+S6i+aVheWOn+WboCA8IGppa29nZW4nJ2luXCA7CivlhKroia/lupcgPCB5dXVyeW91dGVuXCA7CivlhoXoirjogIUgPCB1Y2hpZ2Vpc2hhXCA7CivmgqrpgZTogIUgPCB3YXJ1ZGFzc2hhXCA7CivkuInpnaLpj6EgPCBzYW5tZW5reW91XCA7Civni7jolY7puqYgPCB0YW51a2lzb2JhXCA7Civoo4/mm7jkurogPCB1cmFnYWtpbmluXCA7CivnibnlpKflj7cgPCB0b2t1ZGFpZ291XCA7CivntYTnuZTkvZMgPCBzb3NoaWtpdGFpXCA7Civnj77lrp/ljJYgPCBnZW5qaXRzdWthXCA7CivlpJrnm67nmoQgPCB0YW1va3V0ZWtpXCA7CivlsIbmnaXmgKcgPCBzaG91cmFpc2VpXCA7CivkuIDkurrohbkgPCBoaXRvcmliYXJhXCA7CivluqfmioAgPCBzdXdhcml3YXphXCA7CivnlLvkuIDljJYgPCBrYWt1aXRzdWthXCA7Civph43ph5HlsZ4gPCBqdXVraW56b2t1XCA7Civoia/os6ogPCByeW91c2hpdHN1XCA7Civmp43oob4gPCB5YXJpYnVzdW1hXCA7Civlrrblh7rlsJHlpbMgPCBpZWRlc2hvdWpvXCA7Civnq4vkvJrkurogPCB0YWNoaWFpbmluXCA7Civlj6TlhbjkuLvnvqkgPCBrb3RlbnNodWdpXCA7CivkuI3ms5XmipXmo4QgPCBmdWhvdXRvdWtpXCA7CivpgJDml6UgPCBjaGlrdWppdHN1XCA7CivmrbTlj7LkuIogPCByZWtpc2hpam91XCA7Civoo73piYTmiYAgPCBzZWl0ZXRzdWpvXCA7Civoi6Xnt5EgPCB3YWthbWlkb3JpXCA7CivkuIDkurrogIUgPCBoaXRvcmltb25vXCA7Civou4ros4MgPCBrdXJ1bWFjaGluXCA7Civkuozph43onrrml4sgPCBuaWp1dXJhc2VuXCA7Civpga7mlq3lo4EgPCBzaGFkYW5wZWtpXCA7Civnibnlo7LloLQgPCB0b2t1YmFpam91XCA7CivlkYrnn6Xmnb8gPCBrb2t1Y2hpYmFuXCA7CivmspbnqY3mnJ8gPCBjaHV1c2VraWtpXCA7Civku67oqJjlhaUgPCBrYXJpa2lueXV1XCA7Civkv67pgZPkvJogPCBzaHV1ZG91a2FpXCA7CivkvY3nm7jpgJ/luqYgPCBpc291c29rdWRvXCA7CivmoZ/moq/lrZAgPCBzYW5iYXNoaWdvXCA7Civnlarlj7fmnK0gPCBiYW5nb3VmdWRhXCA7CivlsJHmlbDngrkgPCBzaG91c3V1dGVuXCA7CivlsbHnjKvluqcgPCB5YW1hbmVrb3phXCA7Civlr53lj7DliLggPCBzaGluZGFpa2VuXCA7CivmsLTpioDmn7EgPCBzdWlnaW5jaHV1XCA7CivotaTmtbfkuoAgPCBha2F1bWlnYW1lXCA7Civpqqjnm7jlraYgPCBrb3Nzb3VnYWt1XCA7Civpn7Ppn7vpg6jploAgPCBvbicnaW5idW1vblwgOwor5qmf6IO95Li7576pIDwga2lub3VzaHVnaVwgOwor5aSn6Ie85q2vIDwgZGFpa3l1dXNoaVwgOwor5qmf5qKw6K2m5YKZIDwga2lrYWlrZWliaVwgOwor5rCR5peP5Y+yIDwgbWluem9rdXNoaVwgOwor5LqU56ic6YOtIDwgZ29yeW91a2FrdVwgOwor5aWR57SE5pu4IDwga2VpeWFrdXNob1wgOwor5b2x5rOV5birIDwga2FnZWJvdXNoaVwgOwor6YeR5Ymb55+zIDwga29uZ291c2VraVwgOwor55WR6bygIDwgaGF0YW5lenVtaVwgOwor54m56Kix5bqBIDwgdG9ra3lvY2hvdVwgOwor5Z+656SO6Kmm6aiTIDwga2lzb3NoaWtlblwgOwor5a625bqt6I+c5ZySIDwga2F0ZWlzYWllblwgOwor54m55aOy5ZOBIDwgdG9rdWJhaWhpblwgOwor6YGT6Lev5bel5LqLIDwgZG91cm9rb3VqaVwgOwor5LiL6KuL6LKgIDwgc2hpdGF1a2VvaVwgOwor5Y+O56mr5pyfIDwgc2h1dWtha3VraVwgOwor5Lqc54i+54S25LiBIDwgYXJ1emVuY2hpblwgOwor5Zub6Ium5YWr6IumIDwgc2hpa3VoYWtrdVwgOwor552A5omVIDwgY2hha3ViYXJhaVwgOwor6Zm45oim6ZqKIDwgcmlrdXNlbnRhaVwgOwor57Wm5rC0566hIDwga3l1dXN1aWthblwgOwor5aeU57Sw6Z2i6KuHIDwgaXNhaW1lbmRhblwgOwor56We56eY55qEIDwgc2hpbnBpdGVraVwgOwor6YeN6YeP5Zm4IDwganV1cnlvdXRvblwgOwor5a++5qCh6Kmm5ZCIIDwgdGFpa291amlhaVwgOwor5Y+O56mr5pmCIDwgc2h1dWtha3VqaVwgOwor6auY5Zyn57iuIDwga291YXNzaHVrdVwgOwor6JGX5L2c5qipIDwgY2hvc2FrdWtlblwgOwor5Lq65rCX5L2c5a62IDwgbmlua2lzYWtrYVwgOwor5Luj5Z+36KGMIDwgZGFpc2hpa2tvdVwgOwor6ZmQ5a6a55qEIDwgZ2VudGVpdGVraVwgOwor6auY5Zyn57eaIDwga291YXRzdXNlblwgOwor5Luu5o6h55SoIDwga2FyaXNhaXlvdVwgOwor5pqW5Yas55Ww5aSJIDwgZGFudG91aWhlblwgOwor5Ye65pKDIDwgc2h1dHN1Z2VraVwgOwor5pS56Z2p6ICFIDwga2Fpa2FrdXNoYVwgOwor5Zyw5LiL6YmEIDwgY2hpa2F0ZXRzdVwgOwor5bCK546L5YWaIDwgc29uJydub3V0b3VcIDsKK+Wcn+S/temamyA8IGRvaHlvdWdpd2FcIDsKK+Wkp+WxseeMqyA8IG9veWFtYW5la29cIDsKK+iIquepuuWtpiA8IGtvdWt1dWdha3VcIDsKK+WOn+adkOaWmSA8IGdlbnphaXJ5b3VcIDsKK+WHuueUo+aVsCA8IHNodXNzYW5zdXVcIDsKK+ashOWPgueFpyA8IHJhbnNhbnNob3VcIDsKK+WHuueUn+aVsCA8IHNodXNzZWlzdXVcIDsKK+WuiOWCmeeOhyA8IHNodWJpcml0c3VcIDsKK+aWh+iKuOWtpiA8IGJ1bmdlaWdha3VcIDsKK+Wls+aAp+S4gOiIrCA8IGpvc2VpaXBwYW5cIDsKK+e0heWGoOmzpSA8IGtvdWthbmNob3VcIDsKK+WIneWgtOaJgCA8IGhhdHN1YmFzaG9cIDsKK+S5s+eKtua2siA8IG55dXVqb3Vla2lcIDsKK+WNmOWdkOW8jyA8IHRhbnphc2hpa2lcIDsKK+WcqOeVmeawkSA8IHphaXJ5dXVtaW5cIDsKK+e+jumhlOihkyA8IGJpZ2FuanV0c3VcIDsKK+eFruayuOWZqCA8IHNoYWZ1dHN1a2lcIDsKK+WEquiJr+WTgSA8IHl1dXJ5b3VoaW5cIDsKK+aAqueNo+aYoOeUuyA8IGthaWp1dWVpZ2FcIDsKK+WkmueoruWkmuanmCA8IHRhc2h1dGF5b3VcIDsKK+WzoOmBkyA8IHRvdWdlbWljaGlcIDsKK+S6jOmDqOaVmeaOiCA8IG5pYnVreW91anVcIDsKK+aIpuihk+WutiA8IHNlbmp1dHN1a2FcIDsKK+mAn+W6pumBleWPjSA8IHNva3Vkb2loYW5cIDsKK+S7leS6i+W4qyA8IHNoaWdvdG9zaGlcIDsKK+W5tOW8tyA8IHRvc2hpZHp1eW9cIDsKK+aoquaWreatqemBkyA8IG91ZGFuaG9kb3VcIDsKK+eEoeeUn+eJqSA8IG11c2VpYnV0c3VcIDsKK+mbkeaWh+WutiA8IHphdHN1YnVua2FcIDsKK+WQjOiqv+iAhSA8IGRvdWNob3VzaGFcIDsKK+S6iOe0hOW4rSA8IHlveWFrdXNla2lcIDsKK+mHkeefs+aWhyA8IGtpbnNla2lidW5cIDsKK+e3tOe/kuiIuSA8IHJlbnNodXVzZW5cIDsKK+iIl+ijhemBk+i3ryA8IGhvc291ZG91cm9cIDsKK+a4rOa3seapnyA8IHNva3VzaGlua2lcIDsKK+iJtuiJtiA8IHRzdXlhdHN1eWFcIDsKK+eZuuimi+aWmSA8IGhha2tlbnJ5b3VcIDsKK+ihkuWtpuiAhSA8IGdlbmdha3VzaGFcIDsKK+W8leWHuueJqSA8IGhpa2lkZW1vbm9cIDsKK+mWi+aetuW8jyA8IGthaWthc2hpa2lcIDsKK+WMheWQq+eahCA8IGhvdWdhbnRla2lcIDsKK+WQiOWlj+iqvyA8IGdhc3NvdWNob3VcIDsKK+eUsOm1kSA8IGhvdG90b2dpc3VcIDsKK+WFseWSjOWbvSA8IGt5b3V3YWtva3VcIDsKK+WvqeWIpOWToSA8IHNoaW5wYW4nJ2luXCA7CivnhKHnt5rmioDluKsgPCBtdXNlbmdpc2hpXCA7CivmuIXmnJ3kvZMgPCBzZWljaG91dGFpXCA7Civpo5vps6XmmYLku6MgPCBhc3VrYWppZGFpXCA7Civooajml6XmnKwgPCBvbW90ZW5paG9uXCA7Civnj77ku6PliocgPCBnZW5kYWlnZWtpXCA7CivlsbHpr6ggPCB5YW1ha3VqaXJhXCA7CivljbPlirnolqwgPCBzb2trb3V5YWt1XCA7Civml6XpgYvli5UgPCBuaWNoaXVuZG91XCA7CivojYnmnpUgPCBrdXNhbWFrdXJhXCA7Civogbfpmo7liLYgPCBzaG9ra2Fpc2VpXCA7CivliY3ou4rou7ggPCB6ZW5zaGFqaWt1XCA7Civlm57ot6/ln7rmnb8gPCBrYWlyb2tpYmFuXCA7CivkuIrmmIfnt5ogPCBqb3VzaG91c2VuXCA7CivmqZ/lr4bmgKcgPCBraW1pdHN1c2VpXCA7CivmmI7ntLDooaggPCBtZWlzYWloeW91XCA7CivlvaLmiJDlpJbnp5EgPCBrZWlzZWlnZWthXCA7Civkv67ovp7lraYgPCBzaHV1amlnYWt1XCA7CivlkI3oqonogbcgPCBtZWl5b3Nob2t1XCA7CivlroflrpnlhbXlmaggPCB1Y2h1dWhlaWtpXCA7Civlm5vlpKnnjosgPCBzaGl0ZW4nJ25vdVwgOwor55Ww5bi45rCX6LGhIDwgaWpvdWtpc2hvdVwgOwor5Lq655u45a2mIDwgbmluc291Z2FrdVwgOwor552A5a6fIDwgY2hha3VqaXRzdVwgOwor5o6I5qWt5paZIDwganVneW91cnlvdVwgOwor6Ymb5Lit5q+SIDwgZW5jaHV1ZG9rdVwgOwor54Sh5qmf5YyW5a2mIDwgbXVraWthZ2FrdVwgOwor6Ieq55Sx5Li7576pIDwgaml5dXVzaHVnaVwgOwor5rK755mC5LujIDwgY2hpcnlvdWRhaVwgOwor5YK36JasIDwga2l6dWd1c3VyaVwgOwor5L2N6KiY6L+96LSIIDwgaWtpdHN1aXNvdVwgOwor5biv6buE6ImyIDwgdGFpb3VzaG9rdVwgOwor6Iy25p+xIDwgY2hhYmFzaGlyYVwgOwor55u05o6lIDwgY2hva3VzZXRzdVwgOwor5bqV5ZyfIDwgc29rb3RzdWNoaVwgOwor5a6f5YaZ5pig55S7IDwgamlzc2hhZWlnYVwgOwor6LW35bel5byPIDwga2lrb3VzaGlraVwgOwor6Ieq55Sx5pmC6ZaTIDwgaml5dXVqaWthblwgOwor55Wz6YedIDwgdGF0YW1paGFyaVwgOwor55m654axIDwgaGF0c3VuZXRzdVwgOwor5YiH5a6fIDwgc2V0c3VqaXRzdVwgOwor5Y+W5b6X6ICFIDwgc2h1dG9rdXNoYVwgOwor5b6h56S85aWJ5YWsIDwgb3JlaWJvdWtvdVwgOwor5bGx6aKqIDwgeWFtYW9yb3NoaVwgOwor5oKq5bmz562JIDwgYWt1YnlvdWRvdVwgOwor5YWJ54mpIDwgaGlrYXJpbW9ub1wgOwor5YmU5Ye6IDwgdGVraXNodXRzdVwgOwor55Sf6a2aIDwgbmFtYXpha2FuYVwgOwor5pyx5a2Q5a2mIDwgc2h1c2hpZ2FrdVwgOwor6Lu96YeR5bGeIDwga2Vpa2luem9rdVwgOwor5YGl6ISa5a62IDwga2Vua3lha3VrYVwgOwor5YWI6Kaa6ICFIDwgc2Vua2FrdXNoYVwgOwor5LiN5pW06ISIIDwgZnVzZWlteWFrdVwgOwor5Luy6ZaT5YaFIDwgbmFrYW1hdWNoaVwgOwor5bCG5p2l5YOPIDwgc2hvdXJhaXpvdVwgOwor5L2O5pWZ5LyaIDwgdGVpa3lvdWthaVwgOwor5oCn6KGd5YuVIDwgc2Vpc2hvdWRvdVwgOwor5ZyS6Iq455So5YW3IDwgZW5nZWl5b3VndVwgOwor57SZ6Iqd5bGFIDwga2FtaXNoaWJhaVwgOwor5YGP6L66IDwga2F0YWhvcm9yaVwgOwor5L2c5oiQ6ICFIDwgc2FrdXNlaXNoYVwgOwor5Zue5pil5YmkIDwga2Fpc2h1bnphaVwgOwor5raI6LK76YePIDwgc2hvdWhpcnlvdVwgOwor5Lim6KO95ZOBIDwgbmFtaXNlaWhpblwgOwor6Iqx55WRIDwgaGFuYWJhdGFrZVwgOwor56C06Iy255uu6Iy2IDwgaGFjaGFtZWNoYVwgOwor5bCC5pyJ5qipIDwgc2VuJyd5dXVrZW5cIDsKK+S5l+mmrOmdtCA8IGpvdWJhZ3V0c3VcIDsKK+WAmemWkyA8IHNvdXJvdWFpZGFcIDsKK+S4jeepj+aWh+abuCA8IGZ1b25idW5zaG9cIDsKK+WHuuizh+iAhSA8IHNodXNzaGlzaGFcIDsKK+WMluefs+WtpiA8IGthc2VraWdha3VcIDsKK+a8ouWtl+aWh+WMliA8IGthbmppYnVua2FcIDsKK+iBtOiouuWZqCA8IGNob3VzaGlua2lcIDsKK+mAsuWHuiA8IHNoaW5zaHV0c3VcIDsKK+eMqeeMqeighSA8IHNob3Vqb3ViYWVcIDsKK+S5seaVsOihqCA8IHJhbnN1dWh5b3VcIDsKK+S6iOWCmeippumokyA8IHlvYmlzaGlrZW5cIDsKK+WKtOWLmeeuoeeQhiA8IHJvdW11a2FucmlcIDsKK+W6l+WNuCA8IHRhbmFvcm9zaGlcIDsKK+Wfi+eri+WcsCA8IHVtZXRhdGVjaGlcIDsKK+WFseWQjOaApyA8IGt5b3Vkb3VzZWlcIDsKK+eGn+e3tOiAhSA8IGp1a3VyZW5zaGFcIDsKK+adseWMl+adsSA8IHRvdWhva3V0b3VcIDsKK+W5s+WSjOS8muitsCA8IGhlaXdha2FpZ2lcIDsKK+eVpei/sCA8IHJ5YWt1anV0c3VcIDsKK+eUn+S9k+iGnCA8IHNlaXRhaW1ha3VcIDsKK+S7u+WLmemDqOmaiiA8IG5pbm11YnV0YWlcIDsKK+awkeihhumnhSA8IG1pbnNodXVla2lcIDsKK+Wuh+WumemjnyA8IHVjaHV1c2hva3VcIDsKK+W4uOW4uCA8IHRzdW5lZHp1bmVcIDsKK+aXpeWFiea1tCA8IG5pa2tvdXlva3VcIDsKK+S7o+aVsOWtpiA8IGRhaXN1dWdha3VcIDsKK+Wwj+mWk+eJqeWxiyA8IGtvbWFtb25veWFcIDsKK+iDveW9ueiAhSA8IG5vdXlha3VzaGFcIDsKK+ayluepjeWcnyA8IGNodXVzZWtpZG9cIDsKK+W8leWKm+WcjyA8IGlucnlva3VrZW5cIDsKK+WIpeWPoyA8IGJldHN1a3VjaGlcIDsKK+S4reaKmOW4vSA8IG5ha2FvcmVib3VcIDsKK+mdnua0u+WLlSA8IGhpa2F0c3Vkb3VcIDsKK+e4puaoqueEoeWwvSA8IGp1dW91bXVqaW5cIDsKK+WFq+apiyA8IHlhdHN1aGFzaGlcIDsKK+WbveWutuS4u+e+qSA8IGtva2thc2h1Z2lcIDsKK+mBjuWJsOaKleS4jiA8IGtham91dG91eW9cIDsKK+irlueQhuWbnui3ryA8IHJvbnJpa2Fpcm9cIDsKK+acieWKn+eroCA8IHl1dWtvdXNob3VcIDsKK+aKleelqOiAhSA8IHRvdWh5b3VzaGFcIDsKK+aUu+aSg+maiiA8IGtvdWdla2l0YWlcIDsKK+WgseWRiuiAhSA8IGhvdWtva3VzaGFcIDsKK+eZuuihqOiAhSA8IGhhcHB5b3VzaGFcIDsKK+aDo+euoemgmCA8IHNvdWthbnJ5b3VcIDsKK+iHquWjiuS9nOeUqCA8IGppa2Fpc2F5b3VcIDsKK+mBuOaKnuiCoiA8IHNlbnRha3VzaGlcIDsKK+aKgOihk+iAhSA8IGdpanV0c3VzaGFcIDsKK+mAsuatqeeahCA8IHNoaW5wb3Rla2lcIDsKK+Wfi+iUtemHjyA8IG1haXpvdXJ5b3VcIDsKK+S7leS6i+WPsCA8IHNoaWdvdG9kYWlcIDsKK+aAp+aIkOeGnyA8IHNlaXNlaWp1a3VcIDsKK+awuOW5tOmWkyA8IG5hZ2FuZW5rYW5cIDsKK+iDjOaVmeiAhSA8IGhhaWt5b3VzaGFcIDsKK+i+sOW5tCA8IHRhdHN1ZG9zaGlcIDsKK+aJi+W3pealrSA8IHNodWtvdWd5b3VcIDsKK+a6luWCmeacn+mWkyA8IGp1bmJpa2lrYW5cIDsKK+WIpeWIpSA8IGJldHN1YmV0c3VcIDsKK+Wwu+mkoCA8IHNoaXJpbW9jaGlcIDsKK+eUs+iri+iAhSA8IHNoaW5zZWlzaGFcIDsKK+a8lOWHuuWutiA8IGVuc2h1dHN1a2FcIDsKK+S4gOWuieW/gyA8IGhpdG9hbnNoaW5cIDsKK+WkqeS4i+eEoeWPjCA8IHRlbmthbXVzb3VcIDsKK+ihjOalveWcsCA8IGtvdXJha3VjaGlcIDsKK+mjn+euoeazlSA8IHNob2trYW5ob3VcIDsKK+ims+a4rOiIuSA8IGthbnNva3VzZW5cIDsKK+ertuWQiOiAhSA8IGt5b3Vnb3VzaGFcIDsKK+WBpeiEs+WJpCA8IGtlbicnbm91emFpXCA7CivkuIDngInljYPph4wgPCBpc3NoYXNlbnJpXCA7Civnmb3mqLogPCBzaGlyYWthbmJhXCA7Civph5HliZvmnZYgPCBrb25nb3VkenVlXCA7CivmqKrooYzpl4rmrakgPCBvdWtvdWthcHBvXCA7CivorJ3ogonnpa0gPCBzaGFuaWt1c2FpXCA7CivopIflhpnntJkgPCBmdWt1c2hhc2hpXCA7CivpgLHliIroqowgPCBzaHV1a2Fuc2hpXCA7Civlj47nqI7miYAgPCBzaHV1emVpc2hvXCA7CivlibDkvZnkvqHlgKQgPCBqb3V5b2thY2hpXCA7CivlhavmnIggPCBoYWNoaWdhdHN1XCA7CivpgJrooYzkurogPCB0c3V1a291bmluXCA7CivpkZHlrprmlpkgPCBrYW50ZWlyeW91XCA7CivouI/ou4ogPCBmdW1pZ3VydW1hXCA7CivmlofljJblm73lrrYgPCBidW5rYWtva2thXCA7CivoiJ7lj7DnqL3lj6QgPCBidXRhaWdlaWtvXCA7CivlkIzkuIDkurogPCBkb3VpdHN1bmluXCA7Civpq5jmva7nt5ogPCBrb3VjaG91c2VuXCA7CivmtbjpgI/mgKcgPCBzaGludG91c2VpXCA7CivooYDoibLntKAgPCBrZXNzaGlraXNvXCA7CivohLPpnIfnm6ogPCBub3VzaGludG91XCA7CivkvIrli6LlpKflu58gPCBpc2V0YWlieW91XCA7Civos4PosrjkurogPCBjaGludGFpbmluXCA7Civlh7rnlJ/lnLAgPCBzaHVzc2VpY2hpXCA7CivnlaXoqqwgPCByeWFrdXNldHN1XCA7Civnt7Tnv5LnlJ8gPCByZW5zaHV1c2VpXCA7CivluqfluK3ooaggPCB6YXNla2loeW91XCA7CivoprPmuKzogIUgPCBrYW5zb2t1c2hhXCA7Civnm7jkupLmlK/mj7QgPCBzb3Vnb3NoaWVuXCA7CivlnLDnjYTogLMgPCBqaWdva3VtaW1pXCA7Civpq5jntJrlk4EgPCBrb3VreXV1aGluXCA7CivpgaDml6XngrkgPCBlbmppdHN1dGVuXCA7CivmvKLlrabogIUgPCBrYW5nYWt1c2hhXCA7CivniafloLTps6UgPCBtYWtpYmF0b3JpXCA7CivnlLPovrwgPCBtb3VzaGlrb21pXCA7CivliIfliIcgPCBzZXRzdXNldHN1XCA7CivmrbvliJHlm5ogPCBzaGlrZWlzaHV1XCA7CivmsLfnoILns5YgPCBrb29yaXphdG91XCA7Civmma7pgY3ljp/nkIYgPCBmdWhlbmdlbnJpXCA7CivlhbHokZfogIUgPCBreW91Y2hvc2hhXCA7Civpqqjpq4Tngo4gPCBrb3RzdXp1aWVuXCA7CivkuI3ljbPkuI3pm6IgPCBmdXNva3VmdXJpXCA7CivmlL7niaflnLAgPCBob3Vib2t1Y2hpXCA7Civmgqrlm6DmgqrmnpwgPCBha3VpbicnYWtrYVwgOwor55m96KGA55CDIDwgaGFra2Vra3l1dVwgOwor55uy5aOBIDwgbWVrdXJha2FiZVwgOwor5rq25bKp5rWBIDwgeW91Z2Fucnl1dVwgOwor5q275YK36ICFIDwgc2hpc2hvdXNoYVwgOwor5byP6YOo5a6YIDwgc2hpa2lidWthblwgOwor6ISG5byx5oCnIDwgemVpamFrdXNlaVwgOwor57Wm5rC05qCTIDwga3l1dXN1aXNlblwgOwor6a+o5bmVIDwga3VqaXJhbWFrdVwgOwor6Kaz5ris57ayIDwga2Fuc29rdW1vdVwgOwor5oCl6KGM5Yi4IDwga3l1dWtvdWtlblwgOwor55m95pifIDwgc2hpcm9ib3NoaVwgOwor55m+5pelIDwgaHlha3VuaWNoaVwgOwor6ZmE5ZKM6Zu35ZCMIDwgZnV3YXJhaWRvdVwgOwor5b6h6Z6t5pK7IDwgZ29iZW50YXRzdVwgOwor57eR5Y2B5a2XIDwgcnlva3VqdXVqaVwgOwor5YyW57Kn6YOo5bGLIDwga2VzaG91YmV5YVwgOwor5rWB57ea5b2iIDwgcnl1dXNlbmtlaVwgOwor6Iac6LOqIDwgbWFrdXNoaXRzdVwgOwor5Y6f5aeL55qEIDwgZ2Vuc2hpdGVraVwgOwor54mn576K5ZywIDwgYm9rdXlvdWNoaVwgOwor5Ye65YWlIDwgc2h1dHN1bnl1dVwgOwor56Oo6KO955+z5ZmoIDwgbWFzZWlzZWtraVwgOwor54i25a2Q5a625bqtIDwgZnVzaGlrYXRlaVwgOwor5Z+8546J55yMIDwgc2FpdGFtYWtlblwgOwor5L2Z6Z+75auL5auLIDwgeW9pbmpvdWpvdVwgOwor5pS75pKD6LuNIDwga291Z2VraWd1blwgOwor5pW16Imm6ZqKIDwgdGVraWthbnRhaVwgOwor5bm05LiLIDwgdG9zaGlzaGl0YVwgOwor6aOf5Zmo5qOaIDwgc2hva2tpZGFuYVwgOwor5Lyd6YCB5YWIIDwgZGVuc291c2FraVwgOwor56iy6I236a6oIDwgaW5hcml6dXNoaVwgOwor5L+C6ZW3IDwga2FrYXJpY2hvdVwgOwor5b6p6Kq/5ZmoIDwgZnVrdWNob3VraVwgOwor5aSn55eF5Lq6IDwgZGFpYnlvdW5pblwgOwor5YWx5Yq06ICFIDwga3lvdXJvdXNoYVwgOwor5YCZ6Kq/IDwgc291cm91Y2hvdVwgOwor55eF5Y6f6I+MIDwgYnlvdWdlbmtpblwgOwor5pyd6a6u5Lq6IDwgY2hvdXNlbmppblwgOwor57iE5paH5Zyf5ZmoIDwgam91bW9uZG9raVwgOwor5YSq6LaK5qipIDwgeXV1ZXRzdWtlblwgOwor6a+o5bC6IDwga3VqaXJhamFrdVwgOwor5LiA5Lq65peFIDwgaGl0b3JpdGFiaVwgOwor5paH5a2m6KuWIDwgYnVuZ2FrdXJvblwgOwor6IKJ5oSf55qEIDwgbmlra2FudGVraVwgOwor5oCl6KGM5L6/IDwga3l1dWtvdWJpblwgOwor55Sy5LmZ5LiZIDwga291b3RzdWhlaVwgOwor5Lit5rOi6ZW3IDwgY2h1dWhhY2hvdVwgOwor54Sh6IG36ICFIDwgbXVzaG9rdXNoYVwgOwor5Y+O56iO5a6YIDwgc2h1dXplaWthblwgOwor5a2m6YOo6ZW3IDwgZ2FrdWJ1Y2hvdVwgOwor6LKh5YuZ566h55CGIDwgemFpbXVrYW5yaVwgOwor6LaF5qC85a2QIDwgY2hvdWtvdXNoaVwgOwor56mC54q26Iqx5bqPIDwgc3Vpam91a2Fqb1wgOwor6ZeK6JGJ5qi5IDwga2F0c3V5b3VqdVwgOwor55ub5ZyfIDwgbW9yaXRzdWNoaVwgOwor5YWx6bO06ICFIDwga3lvdW1laXNoYVwgOwor54Sh5L2T54mpIDwgbXV0YWlidXRzdVwgOwor5rWu5rCX5aWzIDwgdXdha2lvbicnbmFcIDsKK+eZu+ernOmWgCA8IHRvdXJ5dXVtb25cIDsKK+S4gOe+qeeahCA8IGljaGlnaXRla2lcIDsKK+esrOS4gOadoSA8IGRhaWljaGlqb3VcIDsKK+i+nuabuOmDqOmWgCA8IGppc2hvYnVtb25cIDsKK+WGheeUqOiWrCA8IG5haXlvdXlha3VcIDsKK+apn+WLlemDqOmaiiA8IGtpZG91YnV0YWlcIDsKK+S/neWuieWHpuWIhiA8IGhvYW5zaG9idW5cIDsKK+iKseaapiA8IGhhbmFnb3lvbWlcIDsKK+W6p+aomei7uCA8IHphaHlvdWppa3VcIDsKK+etlua6kOWcsCA8IHNha3VnZW5jaGlcIDsKK+ebtOWIlyA8IGNob2t1cmV0c3VcIDsKK+WEqueUn+WtpiA8IHl1dXNlaWdha3VcIDsKK+aEj+aAneihqOekuiA8IGlzaGloeW91amlcIDsKK+WIhumaiumVtyA8IGJ1bnRhaWNob3VcIDsKK+WWtuWIqeS6i+alrSA8IGVpcmlqaWd5b3VcIDsKK+WJjeWAn+mHkSA8IHplbnNoYWtraW5cIDsKK+earuiGmuenu+akjSA8IGhpZnVpc2hva3VcIDsKK+S7suijgeS6uiA8IGNodXVzYWluaW5cIDsKK+i1pOmBk+elrSA8IHNla2lkb3VzYWlcIDsKK+adseWMl+WkpyA8IHRvdWhva3VkYWlcIDsKK+Wun+iovOirliA8IGppc3Nob3Vyb25cIDsKK+S4jeeHg+eJqSA8IGZ1bmVuYnV0c3VcIDsKK+WFqOW8t+miqCA8IHplbmt5b3VmdXVcIDsKK+itsOS6i+WmqOWusyA8IGdpamlib3VnYWlcIDsKK+Wwj+WkqeWcsCA8IHNob3V0ZW5jaGlcIDsKK+mFoumFuOWhqSA8IHNha3VzYW4nJ2VuXCA7CivotoXpn7PpgJ8gPCBjaG91b25zb2t1XCA7Civlr4blkYrogIUgPCBtaWtrb2t1c2hhXCA7CivliIbpoZ7lraYgPCBidW5ydWlnYWt1XCA7Civlvavph5HluKsgPCBjaG91a2luc2hpXCA7CivkuIDpqI7lvZPljYMgPCBpa2tpdG91c2VuXCA7CivpmL/pvLvlj6vllpogPCBhYmlreW91a2FuXCA7Civntbblr77muKnluqYgPCB6ZXR0YWlvbmRvXCA7Civpu4Tph5HkuJbnlYwgPCBvdWdvbnNla2FpXCA7CivlhbHpgJroqp4gPCBreW91dHN1dWdvXCA7Civlhr3lhr0gPCByZXRzdXJldHN1XCA7CivnpZ7np5jlraYgPCBzaGluaGlnYWt1XCA7CivkuIDmnKzmqYsgPCBpcHBvbmJhc2hpXCA7CivnrKzkupTliJcgPCBkYWlnb3JldHN1XCA7CivntLPlo6vnlKggPCBzaGluc2hpeW91XCA7CivkuIDmnprlsqkgPCBpY2hpbWFpaXdhXCA7CivkuIDmnKzmp40gPCBpcHBvbicneWFyaVwgOwor5Zuw56qu6ICFIDwga29ua3l1dXNoYVwgOwor5YWl5a6kIDwgbnl1dXNoaXRzdVwgOwor5qOS5rip5bqm6KiIIDwgYm91b25kb2tlaVwgOwor5Yas5pSv5bqmIDwgZnV5dWppdGFrdVwgOwor5YWx5ZCM5L2TIDwga3lvdWRvdXRhaVwgOwor5bCR5pWw5YWaIDwgc2hvdXN1dXRvdVwgOwor5YWo5rCR6KGGIDwgemVubWluc2h1dVwgOwor55u45Y+N55qEIDwgc291aGFudGVraVwgOwor5rWu6YGK54mpIDwgZnV5dXVidXRzdVwgOwor5Yq05YON55yBIDwgcm91ZG91c2hvdVwgOwor5a2r5oGv5a2QIDwgbWFnb211c3Vrb1wgOwor5Y+N5a++5oSP6KaLIDwgaGFudGFpaWtlblwgOwor5L6b6aSK5aGaIDwga3V5b3VkenVrYVwgOwor6aeG6YCQ6ImmIDwga3VjaGlrdWthblwgOwor57Sg5Lq655uuIDwgc2hpcm91dG9tZVwgOwor57K+6IKJ5bqXIDwgc2VpbmlrdXRlblwgOwor5Y+M5q676aGeIDwgc291a2FrdXJ1aVwgOwor5qyj5rGC5rWE5ZyfIDwgZ29uZ3Vqb3Vkb1wgOwor6YeR6LKo5rqW5YKZIDwga2lua2FqdW5iaVwgOwor5aWo5Yqx6YeRIDwgc2hvdXJlaWtpblwgOwor5LiN57K+6autIDwgYnVzaG91aGlnZVwgOwor6KuW55CG57Sg5a2QIDwgcm9ucmlzb3NoaVwgOwor6IO95YuV55qEIDwgbm91ZG91dGVraVwgOwor57SE5Y2K5YiGIDwgeWFrdWhhbmJ1blwgOwor5bGx6I2SIDwgeWFtYWFyYXNoaVwgOwor57ay5ryB5qWtIDwgYW1pZ3lvZ3lvdVwgOwor5o6I5qWt5LitIDwganVneW91Y2h1dVwgOwor5bKp55+z5ZyPIDwgZ2Fuc2VraWtlblwgOwor6Zyy5Zyw5qC95Z+5IDwgcm9qaXNhaWJhaVwgOwor5b2555uu5p+EIDwgeWFrdW1lZ2FyYVwgOwor5Y+k5aKz5pmC5LujIDwga29mdW5qaWRhaVwgOwor5LiA5pys5p2+IDwgaXBwb25tYXRzdVwgOwor5aGp54WO6aSFIDwgc2hpb3NlbmJlaVwgOwor5Y2X44CF6KW/IDwgbmFuJyduYW5zZWlcIDsKK+WcqOWtpueUnyA8IHphaWdha3VzZWlcIDsKK+WJg+WIgOegpSA8IGthbWlzb3JpZG9cIDsKK+WkmueZuuaApyA8IHRhaGF0c3VzZWlcIDsKK+eEoeeFmeeBq+iWrCA8IG11ZW5rYXlha3VcIDsKK+WEqui2iuaEnyA8IHl1dWV0c3VrYW5cIDsKK+eJuee0muWTgSA8IHRva2t5dXVoaW5cIDsKK+S4ieinkumMkCA8IHNhbmtha3VzdWlcIDsKK+WCkeeJqSA8IGtldHN1YnV0c3VcIDsKK+W/heayu+iWrCA8IGhpdGNoaXlha3VcIDsKK+WNmOaMr+WLlSA8IHRhbnNoaW5kb3VcIDsKK+S4u+W8teiAhSA8IHNodWNob3VzaGFcIDsKK+aOkuS7luW+iyA8IGhhaXRhcml0c3VcIDsKK+aUv+ayu+apn+aniyA8IHNlaWppa2lrb3VcIDsKK+aEj+W/l+axuuWumiA8IGlzaGlrZXR0ZWlcIDsKK+WEqui2iuaApyA8IHl1dWV0c3VzZWlcIDsKK+W9ouaFi+WtpiA8IGtlaXRhaWdha3VcIDsKK+W3pealreeVjCA8IGtvdWd5b3VrYWlcIDsKK+W3pealreeUqCA8IGtvdWd5b3V5b3VcIDsKK+epjeS5sembsiA8IHNla2lyYW4nJ3VuXCA7Civmi53oprPmlpkgPCBoYWlrYW5yeW91XCA7CivpoJjmtbfnt5ogPCByeW91a2Fpc2VuXCA7Civop5LliIbmlaMgPCBrYWt1YnVuc2FuXCA7CivkuI3opovorZggPCBmdWtlbnNoaWtpXCA7CivlpKflrabnlJ8gPCBkYWlnYWt1c2VpXCA7CivmnIDljJfnq68gPCBzYWlob2t1dGFuXCA7CivooajpnaLkuIogPCBoeW91bWVuam91XCA7Civmv4PnoavphbggPCBub3VyeXV1c2FuXCA7CivnlaXnrYYgPCByeWFrdWhpdHN1XCA7CivmsLTljJbniakgPCBzdWlrYWJ1dHN1XCA7CivotoXkvJ3lsI4gPCBjaG91ZGVuZG91XCA7CivmloflrabogIUgPCBidW5nYWt1c2hhXCA7Civnspfnm67pm6ogPCB6YXJhbWV5dWtpXCA7Civlj7LlrabogIUgPCBzaGlnYWt1c2hhXCA7Civlm73msJHou40gPCBrb2t1bWluZ3VuXCA7CivlkoDlmrznrYsgPCBzb3NoYWt1a2luXCA7CivkvY/miYDpjLIgPCBqdXVzaG9yb2t1XCA7Civpp5DlgZzou4ogPCBjaHV1dGVpc2hhXCA7CivmpI3mqLnnpa0gPCBzaG9rdWp1c2FpXCA7CivosqDojbfliIbmlaMgPCBmdWthYnVuc2FuXCA7Civop5LpgJ/luqYgPCBrYWt1c29rdWRvXCA7Civlt6bliKkgPCBoaWRhcmlraWtpXCA7CivlpKfotaTmlpEgPCBkYWlzZWtpaGFuXCA7CivlnLDkuK3mtbcgPCBjaGljaHV1a2FpXCA7CivkvLjppIUgPCBub3NoaW1vY2hpXCA7CivkuI3lgY/kuI3lhZogPCBmdWhlbmZ1dG91XCA7CivlhoXlhpEgPCB1Y2hpa2FidXRvXCA7CivllYblo7LkurogPCBzaG91YmFpbmluXCA7CivlkIzluornlbDlpKIgPCBkb3VzaG91aW11XCA7Civlj5flj5bkurogPCB1a2V0b3JpbmluXCA7CivopovmnKzluIIgPCBtaWhvbicnaWNoaVwgOwor54Sh6ZmQ6LuM6YGTIDwgbXVnZW5raWRvdVwgOwor5oqV56Wo5qipIDwgdG91aHlvdWtlblwgOwor5o6i54Wn54GvIDwgdGFuc2hvdXRvdVwgOwor5YWo5Yud6LuNIDwgemVuc2hvdWd1blwgOwor57Wm5rC05aGUIDwga3l1dXN1aXRvdVwgOwor5r2u5bmy54upIDwgc2hpb2hpZ2FyaVwgOwor6LuN5LqL6aGn5ZWPIDwgZ3Vuamlrb21vblwgOwor54mh576K5bqnIDwgb2hpdHN1aml6YVwgOwor6IC9576O5Li7576pIDwgdGFuYmlzaHVnaVwgOwor5Y+O56iO5Lq6IDwgc2h1dXplaW5pblwgOwor5Zac5YqH5pig55S7IDwga2lnZWtpZWlnYVwgOwor5bem5YG0IDwgaGlkYXJpZ2F3YVwgOwor6YG45oqe5qipIDwgc2VudGFrdWtlblwgOwor5o6h54K56KGoIDwgc2FpdGVuaHlvdVwgOwor5bel5bel5ZubIDwga3Vua3Vuc2hpaVwgOwor5YWl5Y+jIDwgaGFpcmlndWNoaVwgOwor6KiY6Yyy55qEIDwga2lyb2t1dGVraVwgOwor6LGG5p2/6YqAIDwgbWFtZWl0YWdpblwgOwor57W25a++6YePIDwgemV0dGFpcnlvdVwgOwor5p2x5YyX5Lq6IDwgdG91aG9rdWppblwgOwor5rW36LuN55yBIDwga2FpZ3Vuc2hvdVwgOwor6YeR5Ymb5YqbIDwga29uZ291cmlraVwgOwor55yf5pqX6ZeHIDwgbWFrdXJheWFtaVwgOwor5qSc55ar5a6YIDwga2VuJydla2lrYW5cIDsKK+WupOmVtyA8IHNoaXRzdWNob3VcIDsKK+WvvuixoeWkliA8IHRhaXNob3VnYWlcIDsKK+aWsOa9n+ecjCA8IG5paWdhdGFrZW5cIDsKK+mXh+WGjeiyqSA8IHlhbWlzYWloYW5cIDsKK+WLleeJqeaEmyA8IGRvdWJ1dHN1YWlcIDsKK+abvOePoOaymeiPryA8IG1hbmp1c2hhZ2VcIDsKK+S9v+eUqOmHjyA8IHNoaXlvdXJ5b3VcIDsKK+WEquWnvyA8IHlhc2FzdWdhdGFcIDsKK+iXgeWNiue0mSA8IHdhcmFiYW5zaGlcIDsKK+aooeaTrOippumokyA8IG1vZ2lzaGlrZW5cIDsKK+aWsOmWi+WcsCA8IHNoaW5rYWljaGlcIDsKK+mdnuW4uOitmCA8IGhpam91c2hpa2lcIDsKK+S4gOmdouimsyA8IGljaGltZW5rYW5cIDsKK+euoee1g+alvSA8IGthbmdlbmdha3VcIDsKK+imj+WJh+mBleWPjSA8IGtpc29rdWloYW5cIDsKK+acgOaBteWbvSA8IHNhaWtlaWtva3VcIDsKK+aFouaAp+eahCA8IG1hbnNlaXRla2lcIDsKK+Wkj+eCieWGrOaJhyA8IGthcm90b3VzZW5cIDsKK+aOqOioiOWtpiA8IHN1aWtlaWdha3VcIDsKK+WJr+mgmOS6iyA8IGZ1a3VyeW91amlcIDsKK+WNsOWIt+iAhSA8IGluc2F0c3VzaGFcIDsKK+iAkOeBq+WKmyA8IHRhaWthcnlva3VcIDsKK+WPi+emheafkyA8IHl1dXplbnpvbWVcIDsKK+WgseWRiuabuCA8IGhvdWtva3VzaG9cIDsKK+mqqOagvOetiyA8IGtva2tha3VraW5cIDsKK+mbqOWkqeaxuuihjCA8IHV0ZW5rZWtrb3VcIDsKK+iXu+WhqeiNiSA8IG1vc2hpb2d1c2FcIDsKK+mbhuWkp+aIkCA8IHNodXV0YWlzZWlcIDsKK+aFouaAp+eXhSA8IG1hbnNlaWJ5b3VcIDsKK+Wuo+iogOeahCA8IHNlbmdlbnRla2lcIDsKK+WFremHjeWljyA8IHJva3VqdXVzb3VcIDsKK+mfs+mfv+WtpiA8IG9ua3lvdWdha3VcIDsKK+eUs+eriyA8IG1vdXNoaXRhdGVcIDsKK+W3pealrea4ryA8IGtvdWd5b3Vrb3VcIDsKK+e3j+i+nuiBtyA8IHNvdWppc2hva3VcIDsKK+i7jeWbo+mVtyA8IGd1bmRhbmNob3VcIDsKK+aEj+imi+S6pOaPmyA8IGlrZW5rb3VrYW5cIDsKK+W5tOmVt+iAhSA8IG5lbmNob3VzaGFcIDsKK+e3j+WLmeWxgCA8IHNvdW11a3lva3VcIDsKK+S4jeS5vuaAp+ayuSA8IGZ1a2Fuc2VpeXVcIDsKK+mdouebuOethiA8IG1lbnNvdWZ1ZGVcIDsKK+aVo+atqemBkyA8IHNhbnBvbWljaGlcIDsKK+ekuuWcp+ioiCA8IHNoaWF0c3VrZWlcIDsKK+S4lue0gOacqyA8IHNlaWtpbWF0c3VcIDsKK+esrOS4ieWbvSA8IGRhaXNhbmdva3VcIDsKK+aKleelqOaVsCA8IHRvdWh5b3VzdXVcIDsKK+S9leeuh+aciCA8IG5hbmthZ2V0c3VcIDsKK+eUs+iri+abuCA8IHNoaW5zZWlzaG9cIDsKK+akjeeJqSA8IHNob2t1YnV0c3VcIDsKK+iFueiGnOeCjiA8IGZ1a3VtYWt1ZW5cIDsKK+a4qeazieeUuiA8IG9uc2VubWFjaGlcIDsKK+S4u+WLleeahCA8IHNodWRvdXRla2lcIDsKK+azjOWwv+WZqOenkSA8IGhpbnlvdWtpa2FcIDsKK+S4jeaWh+W+iyA8IGZ1YnVucml0c3VcIDsKK+W8geW9k+eusSA8IGJlbnRvdWJha29cIDsKK+WyqeeHlSA8IGl3YXRzdWJhbWVcIDsKK+WkqeS9k+WtpiA8IHRlbnRhaWdha3VcIDsKK+WNsOWIt+e0mSA8IGluc2F0c3VzaGlcIDsKK+S9juaIkOmVtyA8IHRlaXNlaWNob3VcIDsKK+S/r+S7sOinkiA8IGZ1Z3lvdWtha3VcIDsKK+W4t+W5hOS4iuWljyA8IGlha3Vqb3Vzb3VcIDsKK+aUvueGseWZqCA8IGhvdW5ldHN1a2lcIDsKK+e0lOiJr+WTgSA8IGp1bnJ5b3VoaW5cIDsKK+WCmeW+jOihqCA8IGJpbmdvb21vdGVcIDsKK+aal+auuuiAhSA8IGFuc2F0c3VzaGFcIDsKK+W5s+aVmeWToSA8IGhpcmFreW91aW5cIDsKK+S4jeimmuiAhSA8IGZ1a2FrdW1vbm9cIDsKK+aIkOmVt+eCuSA8IHNlaWNob3V0ZW5cIDsKK+adseaoque3miA8IHRvdXlva29zZW5cIDsKK+aVkea4iOiAhSA8IGt5dXVzYWlzaGFcIDsKK+efpeiDveeahCA8IGNoaW5vdXRla2lcIDsKK+WEsuWPoyA8IG1vdWtlZ3VjaGlcIDsKK+WFqOaoqeWnlOWToSA8IHplbmtlbicnaWluXCA7CivlubvopprliaQgPCBnZW5rYWt1emFpXCA7CivmnpznianlsYsgPCBrdWRhbW9ub3lhXCA7CivmvJTnrpfmqZ/mp4sgPCBlbnphbmtpa291XCA7CivkurrmoLzogIUgPCBqaW5rYWt1c2hhXCA7CivnhKHok4vosqjou4ogPCBtdWdhaWthc2hhXCA7Civph5HlsZ7plpMgPCBraW56b2t1a2FuXCA7CivoirHmn7Pnl4UgPCBrYXJ5dXVieW91XCA7Civmo5/nk6YgPCBtdW5hZ2F3YXJhXCA7Civpq5jmnpUgPCB0YWthbWFrdXJhXCA7CivogIHlpKflm70gPCByb3V0YWlrb2t1XCA7Civku6PoqIDkurogPCBkYWlnZW4nJ25pblwgOwor5b+D5b6X6aGUIDwga29rb3JvZWdhb1wgOwor5Luj6KGo6ICFIDwgZGFpaHlvdXNoYVwgOwor5Li755+l55qEIDwgc2h1Y2hpdGVraVwgOwor5paH5a2m55WMIDwgYnVuZ2FrdWthaVwgOwor5YiH5pat5qmfIDwgc2V0c3VkYW5raVwgOwor5LiA5pmC55qEIDwgaWNoaWppdGVraVwgOwor5Lqk6YCa57ayIDwga291dHN1dW1vdVwgOwor5LqM5Y2B5LiW57SAIDwgbmlqaXNzZWlraVwgOwor5L+d6K235Yem5YiGIDwgaG9nb3Nob2J1blwgOwor5Zyw55CD5Lq6IDwgY2hpa3l1dWppblwgOwor6IS56ISbIDwgZnVrdXJhaGFnaVwgOwor6auY5puHIDwgdGFrYWd1bW9yaVwgOwor55qu6Iaa56eR5a2mIDwgaGlmdWthZ2FrdVwgOwor5Zyw55CD5LiKIDwgY2hpa3l1dWpvdVwgOwor6YCG5o+Q5qGIIDwgZ3lha3V0ZWlhblwgOwor5a++5pWw6KGoIDwgdGFpc3V1aHlvdVwgOwor6KGG5oSa5pS/5rK7IDwgc2h1Z3VzZWlqaVwgOwor5pWX5oim5Zu9IDwgaGFpc2Vua29rdVwgOwor5L6N5b6T5q2m5a6YIDwgamlqdXVidWthblwgOwor5paw6KO95ZOBIDwgc2hpbnNlaWhpblwgOwor5o6n6Ki05pyf6ZaTIDwga291c29raWthblwgOwor5LiK5L2N5qeL6YCgIDwgam91aWtvdXpvdVwgOwor5qW16Led6ZuiIDwga3lva3VreW9yaVwgOwor5bi45Lu75aeU5ZOhIDwgam91bmluJydpaW5cIDsKK+iKneWxheWwj+WxiyA8IHNoaWJhaWdveWFcIDsKK+ahnOiKsSA8IHNha3VyYWJhbmFcIDsKK+WFrOenn+WFrOiqsiA8IGtvdXNva291a2FcIDsKK+eGn+e3tOW3pSA8IGp1a3VyZW5rb3VcIDsKK+iJsue0oOS9kyA8IHNoaWtpc290YWlcIDsKK+S4uOegpeefsyA8IG1hcnV0b2lzaGlcIDsKK+WQjOaXj+S8miA8IGRvdXpva3VrYWlcIDsKK+e1jOa4iOeahCA8IGtlaXphaXRla2lcIDsKK+aYk+aEn+afk+aApyA8IGlrYW5zZW5zZWlcIDsKK+eJm+S5s+WxiyA8IGd5dXVueXV1eWFcIDsKK+e3tOe/kuWgtCA8IHJlbnNodXVqb3VcIDsKK+e0gOS8iuWci+WxiyA8IGtpbm9rdW5peWFcIDsKK+ahkeiLuiA8IGt1d2FpY2hpZ29cIDsKK+WknOm3ueiVjum6piA8IHlvdGFrYXNvYmFcIDsKK+eJueijveWTgSA8IHRva3VzZWloaW5cIDsKK+WLpOWLmeaZgumWkyA8IGtpbm11amlrYW5cIDsKK+WOreS4luS4u+e+qSA8IGVuc2Vpc2h1Z2lcIDsKK+WNmOS9jeiomOWPtyA8IHRhbicnaWtpZ291XCA7CivohJroibIgPCBreWFrdXNob2t1XCA7CivkuI3oqqDlrp8gPCBmdXNlaWppdHN1XCA7CivlvpPmnaXlnosgPCBqdXVyYWlnYXRhXCA7Civlr77osaHkvZMgPCB0YWlzaG91dGFpXCA7Civnsonnn7PpubggPCBrb25hc2Vra2VuXCA7CivlpJzlsL/nl4cgPCB5YW55b3VzaG91XCA7CivotoXmlofpnaIgPCBjaG91YnVubWVuXCA7CivmjpLku5bkuLvnvqkgPCBoYWl0YXNodWdpXCA7Civli5XnianlnJIgPCBkb3VidXRzdWVuXCA7Civnt4/nm6PnnaMgPCBzb3VrYW50b2t1XCA7Civlrp/pmpvnmoQgPCBqaXNzYWl0ZWtpXCA7CivpoLzkv6HntJkgPCByYWlzaGluc2hpXCA7Civlroflrpnpo5vooYwgPCB1Y2h1dWhpa291XCA7CivlrqPmlZnluKsgPCBzZW5reW91c2hpXCA7CivmoZzogokgPCBzYWt1cmFuaWt1XCA7Civosqzku7vogIUgPCBzZWtpbmluc2hhXCA7CivplqLnr4Dngo4gPCBrYW5zZXRzdWVuXCA7Civogqnou4ogPCBrYXRhZ3VydW1hXCA7CivlhbHps7Tmnb8gPCBreW91bWVpYmFuXCA7CivlrpfkuLvlm70gPCBzb3VzaHVrb2t1XCA7Civku67lkI3ojYnntJkgPCBrYW5hem91c2hpXCA7Civml6fou43kurogPCBreXV1Z3VuamluXCA7CivljYrmv4HngrkgPCBoYW5kYWt1dGVuXCA7CivlnZHlhoXkuovmlYUgPCBrb3VuYWlqaWtvXCA7CivljYrplbflvaIgPCBoYW5jaG91a2VpXCA7CivkuK3msLTpgZMgPCBjaHV1c3VpZG91XCA7CivpgbjmiYvmnZEgPCBzZW5zaHVtdXJhXCA7Civoq5bnkIbmvJTnrpcgPCByb25yaWVuemFuXCA7Civos6rph48gPCBzaGl0c3VyeW91XCA7CivljbDliLfnlKggPCBpbnNhdHN1eW91XCA7CivpnIrmn6nou4ogPCByZWlreXV1c2hhXCA7Civmtbflsrjnq68gPCBrYWlnYW5iYXRhXCA7CivlpJbnlKjolqwgPCBnYWl5b3V5YWt1XCA7CivntKvmlpHnl4UgPCBzaGloYW5ieW91XCA7Civom7jphY3lvZMgPCB0YWtvaGFpdG91XCA7Civpq5jmiYDnl4UgPCBrb3VzaG9ieW91XCA7CivnlZzmrrogPCBjaGlrdXNhdHN1XCA7CivlpKflsI/kvr8gPCBkYWlzaG91YmVuXCA7Civpm7vmsJfmr5vluIMgPCBkZW5raW1vdWZ1XCA7CivnsbPlm73msJEgPCBiZWlrb2t1bWluXCA7CivlkLjmsLTmgKcgPCBreXV1c3Vpc2VpXCA7Civpm7LprKLoirHpoZQgPCB1bmJpbmthZ2FuXCA7Civlv7XkupTml6UgPCBuZW5nb25pY2hpXCA7Civlh7rmnaXlv4MgPCBkZWtpZ29rb3JvXCA7CivkuK3lv4Ppg6ggPCBjaHV1c2hpbmJ1XCA7CivlvqHliY3kvJrorbAgPCBnb3plbmthaWdpXCA7CivohIjohIggPCBteWFrdW15YWt1XCA7CivnlJ/kvZPlraYgPCBzZWl0YWlnYWt1XCA7CivmpZTlvaIgPCBrdXNhYmlnYXRhXCA7Civkuojlgpnoqr/mn7sgPCB5b2JpY2hvdXNhXCA7CivlubPlkozkuLvnvqkgPCBoZWl3YXNodWdpXCA7Civogq/lrprnmoQgPCBrb3V0ZWl0ZWtpXCA7CivmoZzntJkgPCBzYWt1cmFnYW1pXCA7Civms6jmhI/kuovpoIUgPCBjaHV1aWppa291XCA7Civli5XnianljJYgPCBkb3VidXRzdWthXCA7CivmsLTlubPnv7wgPCBzdWloZWl5b2t1XCA7Civosr/mmJPmpa0gPCBib3Vla2lneW91XCA7CivohbDluIPlm6MgPCBrb3NoaWJ1dG9uXCA7CivniIbmkoPmqZ8gPCBiYWt1Z2VraWtpXCA7CivoqIDooYzpjLIgPCBnZW5rb3Vyb2t1XCA7Civlm6PlnLDml48gPCBkYW5jaGl6b2t1XCA7CivkubHoqr/lrZAgPCByYW5jaG91c2hpXCA7Civlgpnok4TnsbMgPCBiaWNoaWt1bWFpXCA7CivlpKfkuZfnmoQgPCBkYWlqb3V0ZWtpXCA7CivnhKHog73lipsgPCBtdW5vdXJ5b2t1XCA7CivpharovrLloLQgPCByYWt1bm91am91XCA7Civog7jpg6jlpJbnp5EgPCBreW91YnVnZWthXCA7CivosqjlrqLoiLkgPCBrYWt5YWt1c2VuXCA7CivmhJ/mn5Pnl4cgPCBrYW5zZW5zaG91XCA7CivnnJ/nkIbmlZkgPCBzaGlucmlreW91XCA7CivmhYjlloTpjYsgPCBqaXplbicnbmFiZVwgOwor55eF5a6kIDwgYnlvdXNoaXRzdVwgOwor5oqA6KGT5aOrIDwgZ2lqdXRzdXNoaVwgOwor6IqL5L6NIDwgaW1vemFtdXJhaVwgOwor5ZOo5oiS6ImHIDwgc2hvdWthaXRlaVwgOwor6YWS55+z6YW4IDwgc2h1c2VraXNhblwgOwor5pW35biD5ZujIDwgc2hpa2lidXRvblwgOwor6Z2e5Y+v5o+b576kIDwgaGlrYWthbmd1blwgOwor5Y+N5YmH6YeRIDwgaGFuc29rdWtpblwgOwor6YG65Lyd5oOF5aCxIDwgaWRlbmpvdWhvdVwgOwor5pyJ5qmf54mpIDwgeXV1a2lidXRzdVwgOwor6IKJ6LOqIDwgbmlrdXNoaXRzdVwgOwor5a+E55Sf54Gr5bGxIDwga2lzZWlrYXphblwgOwor5oq96LGh55S7IDwgY2h1dXNob3VnYVwgOwor56ef5YCf5qipIDwgc29zaGFrdWtlblwgOwor5YaF55Sz5pu4IDwgbmFpc2hpbnNob1wgOwor5ZCM57Sa55SfIDwgZG91a3l1dXNlaVwgOwor5ZCR57Gz55qEIDwga291YmVpdGVraVwgOwor6Kaq6KGb5YW1IDwgc2hpbicnZWloZWlcIDsKK+S7j+aWh+enkSA8IGZ1dHN1YnVua2FcIDsKK+S6jOmDqOaOiOalrSA8IG5pYnVqdWd5b3VcIDsKK+WPluW8leaJgCA8IHRvcmloaWtpam9cIDsKK+mbu+i7iuizgyA8IGRlbnNoYWNoaW5cIDsKK+mbhuaVo+WcsCA8IHNodXVzYW5jaGlcIDsKK+e2uuaDs+absiA8IGtpc291a3lva3VcIDsKK+S4iuiqv+WtkCA8IHV3YWNob3VzaGlcIDsKK+WGheiHk+W8kyA8IG5haXpvdWt5dXVcIDsKK+WNiumWi+WbvSA8IGhhbmthaWtva3VcIDsKK+ijvemAoOalrSA8IHNlaXpvdWd5b3VcIDsKK+i/veaSg+apnyA8IHRzdWlnZWtpa2lcIDsKK+S4ieinkuetiyA8IHNhbmtha3VraW5cIDsKK+mdnuWWtuWIqeeahCA8IGhpZWlyaXRla2lcIDsKK+etiea3see3miA8IHRvdXNoaW5zZW5cIDsKK+mnhuWLleWKmyA8IGt1ZG91cnlva3VcIDsKK+ays+W3neW3peS6iyA8IGthc2Vua291amlcIDsKK+mHjeW3pealrSA8IGp1dWtvdWd5b3VcIDsKK+m6u+e5lOeJqSA8IGFzYW9yaW1vbm9cIDsKK+aXpeWwhOeXhSA8IG5pc3NoYWJ5b3VcIDsKK+eGseihgOWFkCA8IG5la2tldHN1amlcIDsKK+mHkeWxnuijvSA8IGtpbnpva3VzZWlcIDsKK+acrOWlkee0hCA8IGhvbmtlaXlha3VcIDsKK+ebuOaJi+asoeesrCA8IGFpdGVzaGlkYWlcIDsKK+m7hOikkOiJsiA8IG91a2Fzc2hva3VcIDsKK+izvOWFpeiAhSA8IGtvdW55dXVzaGFcIDsKK+S4jeeyvuiAhSA8IGJ1c2hvdW1vbm9cIDsKK+S4u+W/nOWKmyA8IHNodW91cnlva3VcIDsKK+S+v+WunOS4u+e+qSA8IGJlbmdpc2h1Z2lcIDsKK+WfvOeOieWLoiA8IHNhaXRhbWF6ZWlcIDsKK+WuneiIuSA8IHRha2FyYWJ1bmVcIDsKK+mHjeWCt+iAhSA8IGp1dXNob3VzaGFcIDsKK+earuiGmuWRvOWQuCA8IGhpZnVrb2t5dXVcIDsKK+WxseahnCA8IHlhbWF6YWt1cmFcIDsKK+S6nOaIkOWxpOWcjyA8IGFzZWlzb3VrZW5cIDsKK+WCt+Wus+e9qiA8IHNob3VnYWl6YWlcIDsKK+S9nOaIpuS4iiA8IHNha3VzZW5qb3VcIDsKK+WBtOWupCA8IHNva3VzaGl0c3VcIDsKK+iGneaelSA8IGhpemFtYWt1cmFcIDsKK+a9nOawtOeXhSA8IHNlbnN1aWJ5b3VcIDsKK+S4reaAp+e0mSA8IGNodXVzZWlzaGlcIDsKK+S5s+mmliA8IGNoaWNoaWt1YmlcIDsKK+iouueZguaJgCA8IHNoaW5yeW91am9cIDsKK+epuui7jeWkp+WwiSA8IGt1dWd1bnRhaWlcIDsKK+aXpeacrOmjnyA8IG5paG9uc2hva3VcIDsKK+eovOWDjeeOhyA8IGthZG91cml0c3VcIDsKK+mAo+WQiOWbvSA8IHJlbmdvdWtva3VcIDsKK+WFrOawkeWtpiA8IGtvdW1pbmdha3VcIDsKK+eglOeptuiAhSA8IGtlbmt5dXVzaGFcIDsKK+mdmeawtOWcpyA8IHNlaXN1aWF0c3VcIDsKK+eZu+mMsuiAhSA8IHRvdXJva3VzaGFcIDsKK+a6luaxuuWLnSA8IGp1bmtlc3Nob3VcIDsKK+alteWKmyA8IGt5b2t1cnlva3VcIDsKK+air+WtkOi7iiA8IGhhc2hpZ29zaGFcIDsKK+S4ieimquetiSA8IHNhbnNoaW50b3VcIDsKK+S4jee0lOeJqSA8IGZ1anVuYnV0c3VcIDsKK+S4iuWls+S4rSA8IGthbWlqb2NodXVcIDsKK+mzpeWPluecjCA8IHRvdHRvcmlrZW5cIDsKK+ahkeeVkSA8IGt1d2FiYXRha2VcIDsKK+iyp+S5j+msriA8IGJpbmJvdWt1amlcIDsKK+WUr+S4gOW6piA8IHRhZGFpY2hpZG9cIDsKK+aiteWSjOi+nuWFuCA8IGJvbndhaml0ZW5cIDsKK+WlveiJsuWutiA8IGtvdXNob2t1a2FcIDsKK+avm+earuWVhiA8IGtlZ2F3YXNob3VcIDsKK+avlOi8g+e0miA8IGhpa2FrdWt5dXVcIDsKK+ePvuWcqOmrmCA8IGdlbnphaWRha2FcIDsKK+eVpeW8jyA8IHJ5YWt1c2hpa2lcIDsKK+mZuOa1t+epuiA8IHJpa3VrYWlrdXVcIDsKK+WPjOecvOmPoSA8IHNvdWdhbmt5b3VcIDsKK+aOp+iotOeQhueUsSA8IGtvdXNvcml5dXVcIDsKK+mnkOi8quWgtCA8IGNodXVyaW5qb3VcIDsKK+mDqOmaiuWMuuWIhiA8IGJ1dGFpa3VidW5cIDsKK+aeleiosSA8IG1ha3VyYW1vdG9cIDsKK+eZvemJhOmJsSA8IGhha3V0ZWtrb3VcIDsKK+Wkp+WuruS6uiA8IG9vbWl5YWJpdG9cIDsKK+aCqumtlOS4u+e+qSA8IGFrdW1hc2h1Z2lcIDsKK+mbquWQiOaIpiA8IHl1a2lnYXNzZW5cIDsKK+eJh+agl+eyiSA8IGthdGFrdXJpa29cIDsKK+eZuuihqOS8miA8IGhhcHB5b3VrYWlcIDsKK+WuneexpCA8IHRha2FyYWt1amlcIDsKK+WQkOeAieeJqSA8IHRvc2hhYnV0c3VcIDsKK+itt+WyuOW3peS6iyA8IGdvZ2Fua291amlcIDsKK+ijj+ihqOe0mSA8IHVyYWJ5b3VzaGlcIDsKK+WIh+aWreWbsyA8IHNldHN1ZGFuenVcIDsKK+aAneaDkeiytyA8IG9tb3dha3VnYWlcIDsKK+ims+W/teirliA8IGthbicnbmVucm9uXCA7Civnjonpn7Pnm6QgPCBneW9rdW9uYmFuXCA7Civlrp3nrrEgPCB0YWthcmFiYWtvXCA7Civlj43li5XnmoQgPCBoYW5kb3V0ZWtpXCA7Civos6rojYkgPCBzaGljaGlndXNhXCA7CivmlZHlkb3oiYcgPCBreXV1bWVpdGVpXCA7Civntbblr77nmoQgPCB6ZXR0YWl0ZWtpXCA7Civpqqjlo7cgPCBrb3RzdXRzdWJvXCA7CivmuKzph4/lm7MgPCBzb2t1cnlvdXp1XCA7CivkuInlpKflm70gPCBzYW5kYWlrb2t1XCA7CivlnLDmlrnnl4UgPCBjaGlob3VieW91XCA7Civlrr/nm7QgPCBzaHVrdWNob2t1XCA7Civlh7rniYjogIUgPCBzaHVwcGFuc2hhXCA7Civkvpvntabot68gPCBreW91a3l1dXJvXCA7Civnq5zmto7pppkgPCByeXV1emVua291XCA7CivlsITniIbloLQgPCBzaGFiYWt1am91XCA7CivmuKzph4/lmaggPCBzb2t1cnlvdWtpXCA7CivlnJ/kv5flraYgPCBkb3pva3VnYWt1XCA7Civnvo7lpbPmoZwgPCBiaWpvemFrdXJhXCA7CivljZfjgIXmnbEgPCBuYW4nJ25hbnRvdVwgOwor5Lq65qC85qipIDwgamlua2FrdWtlblwgOwor5YiG6Kej55qEIDwgYnVua2FpdGVraVwgOwor55Sw5aSr6YeO5Lq6IDwgZGVucHV5YWppblwgOwor5LuW6Kaa55qEIDwgdGFrYWt1dGVraVwgOwor5aSp5Li75pWZIDwgdGVuc2h1a3lvdVwgOwor6Zuq5YyW57KnIDwgeXVraWdlc2hvdVwgOwor5b2i5byP576OIDwga2Vpc2hpa2liaVwgOwor5aWH5aWH5oCq5oCqIDwga2lraWthaWthaVwgOwor6Zu76YCa5aSnIDwgZGVudHN1dWRhaVwgOwor5LiJ6KeS54K5IDwgc2Fua2FrdXRlblwgOwor5Lyd5pu46bOpIDwgZGVuc2hvYmF0b1wgOwor5LuW6Kaa55eHIDwgdGFrYWt1c2hvdVwgOwor5raI6ICX5oimIDwgc2hvdW1vdXNlblwgOwor5LuV6Kiz5pu4IDwgc2hpd2FrZXNob1wgOwor6YGK5LyR5ZywIDwgeXV1a3l1dWNoaVwgOwor5YKZ5LuYIDwgc29uYWV0c3VrZVwgOwor5Y+N5b+c5oCnIDwgaGFuJydub3VzZWlcIDsKK+aatOi1sOaXjyA8IGJvdXNvdXpva3VcIDsKK+e0gOWFg+evgCA8IGtpZ2Vuc2V0c3VcIDsKK+a4qeazieWuvyA8IG9uc2VuJyd5YWRvXCA7CivllJDovpvlrZAgPCB0b3VnYXJhc2hpXCA7Civml6XkuK3pn5MgPCBuaXRjaHV1a2FuXCA7CivnkIbop6PlipsgPCByaWthaXJ5b2t1XCA7CivnlaXlpaogPCByeWFrdWRhdHN1XCA7CivlhazlhbHosqEgPCBrb3VreW91emFpXCA7CivmpJzlrprmlpkgPCBrZW50ZWlyeW91XCA7CivluILplbfpgbggPCBzaGljaG91c2VuXCA7Civlronmma7oq4sgPCB5YXN1YnVzaGluXCA7CivnpZ7ku6PmloflrZcgPCBqaW5kYWltb2ppXCA7Civlj6TlhbjmmYLku6MgPCBrb3RlbmppZGFpXCA7CivluILkvJrorbDlk6EgPCBzaGlrYWlnaWluXCA7CivmsLTpgZPmlpkgPCBzdWlkb3VyeW91XCA7CivkuKHmiJDmlZcgPCByeW91c2VpYmFpXCA7CivljbHpmbrosqDmi4UgPCBraWtlbmZ1dGFuXCA7CivliJ3nr4Dlj6UgPCBoYXRzdXpla2t1XCA7Civmr5TovIPnmoQgPCBoaWtha3V0ZWtpXCA7Civlm73pgKPou40gPCBrb2t1cmVuZ3VuXCA7CivkuIrntJrnlJ8gPCBqb3VreXV1c2VpXCA7CivnhKHpoJPnnYAgPCBtdXRvbmNoYWt1XCA7Civlho3mnaXmnIggPCBzYXJhaWdldHN1XCA7Civlvozml6Xoq4cgPCBnb2ppdHN1ZGFuXCA7CivlgpnojZLpo58gPCBiaWtvdXNob2t1XCA7CivlgaXlurfkuI3lrokgPCBrZW5rb3VmdWFuXCA7Civmnb7omasgPCBtYXRzdW11c2hpXCA7CivkuI3ooYzot6EgPCBmdWd5b3VzZWtpXCA7Civmlpzpmb3ml48gPCBzaGF5b3V6b2t1XCA7CivpnZLljJbniakgPCBzZWlrYWJ1dHN1XCA7Civlv5zmgKXmuKHmsrMgPCBvdWt5dXV0b2thXCA7CivlpKnnjovlsbEgPCB0ZW4nJ25vdXphblwgOwor5LqM6YeN5ZCm5a6aIDwgbmlqdXVoaXRlaVwgOwor5Y6E5LuL6ICFIDwgeWFra2FpbW9ub1wgOwor5YuH54yb5b+DIDwgeXV1bW91c2hpblwgOwor5q2m5Yqb5oimIDwgYnVyeW9rdXNlblwgOwor5LiJ6KeS5rOVIDwgc2Fua2FrdWhvdVwgOwor5oSP5rCX6KGd5aSpIDwgaWtpc2hvdXRlblwgOwor5a6X5pWZ55S7IDwgc2h1dWt5b3VnYVwgOwor56CU56m255SfIDwga2Vua3l1dXNlaVwgOwor5Ye65aWU6ICFIDwgc2h1cHBvbnNoYVwgOwor5Y+O55uK6YeRIDwgc2h1dWVraWtpblwgOwor5rC36I+T5a2QIDwga29vcmlnYXNoaVwgOwor5Yy75a2m55So6KqeIDwgaWdha3V5b3Vnb1wgOwor6Iie5Y+w5Yq55p6cIDwgYnV0YWlrb3VrYVwgOwor6Lu95bel5qWtIDwga2Vpa291Z3lvdVwgOwor6KiY5oa25YqbIDwga2lva3VyeW9rdVwgOwor5Y2z6IiI6KmpIDwgc29ra3lvdXNoaVwgOwor5Y+k55Sf54mpIDwga29zZWlidXRzdVwgOwor54ax5oSb6ICFIDwgbmV0c3VhaXNoYVwgOwor5aSp6aCC54K5IDwgdGVuY2hvdXRlblwgOwor54Sh6LOH5YqbIDwgbXVzaGlyeW9rdVwgOwor6IiI6KGM5qipIDwga291Z3lvdWtlblwgOwor5p2+5qC55rK5IDwgc2hvdWtvbicneXVcIDsKK+S4oemaoyA8IHJ5b3Vkb25hcmlcIDsKK+eZvua4iOalvSA8IGt1ZGFyYWdha3VcIDsKK+WcqOS7u+S4rSA8IHphaW5pbmNodXVcIDsKK+a7nuWcqOS4rSA8IHRhaXphaWNodXVcIDsKK+ijveiMtualrSA8IHNlaWNoYWd5b3VcIDsKK+iyv+aYk+WVhiA8IGJvdWVraXNob3VcIDsKK+WbveWLmeecgSA8IGtva3VtdXNob3VcIDsKK+S4reWNl+exsyA8IGNodXVuYW5iZWlcIDsKK+e+pOmbgCA8IG11cmFzdXp1bWVcIDsKK+ahkOS4gOiRiSA8IGtpcmloaXRvaGFcIDsKK+mbu+S9jeW3ruioiCA8IGRlbicnaXNha2VpXCA7CivlhaXpgbjogIUgPCBueXV1c2Vuc2hhXCA7CivnuKbnpL7kvJogPCB0YXRlc2hha2FpXCA7CivluqbmlbDliIbluIMgPCBkb3N1dWJ1bnB1XCA7Civmk43nuKbluK0gPCBzb3VqdXVzZWtpXCA7Civlkajml4vlsYsgPCBzaHV1c2VuJyd5YVwgOwor5paH5a2m5aOrIDwgYnVuZ2FrdXNoaVwgOwor6YGL6YCB5L+d6Zm6IDwgdW5zb3Vob2tlblwgOwor5bel5a2m6ICFIDwga291Z2FrdXNoYVwgOwor5Y+k5Lyd6KqsIDwga29kZW5zZXRzdVwgOwor5Y2w5Yi35belIDwgaW5zYXRzdWtvdVwgOwor5r2c5rC05pyNIDwgc2Vuc3VpZnVrdVwgOwor5pyo6LOqIDwgbW9rdXNoaXRzdVwgOwor5aSn5Li75pWZIDwgZGFpc2h1a3lvdVwgOwor5LiK5aC05qCqIDwgam91am91a2FidVwgOwor6aGe5Z6L55qEIDwgcnVpa2VpdGVraVwgOwor5a6f54mpIDwgaml0c3VidXRzdVwgOwor5LiL6ZyyIDwgc2hpdGF0c3V5dVwgOwor5ZC55Ye654mpIDwgZnVraWRlbW9ub1wgOwor5oqX55yf6I+MIDwga291c2hpbmtpblwgOwor6Zuj5rOi5r2fIDwgbmFuaXdhZ2F0YVwgOwor56ef5YCf5ZywIDwgc29zaGFrdWNoaVwgOwor5Yqg6L6y56CyIDwga2FuJydub25ob3VcIDsKK+mAoOefs+eojiA8IHpvdWtva3V6ZWlcIDsKK+mnkOi7iuWgtCA8IGNodXVzaGFqb3VcIDsKK+ippueul+ihqCA8IHNoaXNhbmh5b3VcIDsKK+e1jOa4iOWtpiA8IGtlaXphaWdha3VcIDsKK+aApeWLvumFjSA8IGt5dXVrb3ViYWlcIDsKK+WEgOW8j+eUqCA8IGdpc2hpa2l5b3VcIDsKK+mrmOaJi+Wwj+aJiyA8IHRha2F0ZWtvdGVcIDsKK+ihgOagk+eXhyA8IGtlc3NlbnNob3VcIDsKK+S8iumBlOWnvyA8IGRhdGVzdWdhdGFcIDsKK+eXheWOn+S9kyA8IGJ5b3VnZW50YWlcIDsKK+eEoeWRs+S5vueHpSA8IG11bWlrYW5zb3VcIDsKK+S4i+mZouitsOmVtyA8IGthaW5naWNob3VcIDsKK+WFq+WIhuebriA8IGhhY2hpYnVubWVcIDsKK+ino+aekOaApyA8IGthaXNla2lzZWlcIDsKK+i7jeWCmeeuoeeQhiA8IGd1bmJpa2FucmlcIDsKK+Wuouims+aApyA8IGt5YWtrYW5zZWlcIDsKK+eVnOWKmyA8IGNoaWt1cnlva3VcIDsKK+i2heWqkuS9kyA8IGNob3ViYWl0YWlcIDsKK+awtOiKreiViSA8IG1penViYXNob3VcIDsKK+mVt+acn+eahCA8IGNob3VraXRla2lcIDsKK+ecvOmPoeibhyA8IG1lZ2FuZWhlYmlcIDsKK+aoueiEguWKoOW3pSA8IGp1c2hpa2Frb3VcIDsKK+WHuueJiOeVjCA8IHNodXBwYW5rYWlcIDsKK+W8geWEn+mHkSA8IGJlbnNob3VraW5cIDsKK+acqueGn+iAhSA8IG1panVrdW1vbm9cIDsKK+WIhuaVo+WeiyA8IGJ1bnNhbmdhdGFcIDsKK+efree3qOmbhiA8IHRhbnBlbnNodXVcIDsKK+WvkuakvyA8IGthbnRzdWJha2lcIDsKK+WIqeawtOW3peS6iyA8IHJpc3Vpa291amlcIDsKK+a3oei3r+WztiA8IGF3YWppc2hpbWFcIDsKK+Wil+aulueCiSA8IHpvdXNob2t1cm9cIDsKK+S4i+imi+advyA8IHNoaXRhbWlpdGFcIDsKK+WIhuaVmeWgtCA8IGJ1bmt5b3Vqb3VcIDsKK+mdnuW4uOS6i+aFiyA8IGhpam91aml0YWlcIDsKK+atpuijheicgui1tyA8IGJ1c291aG91a2lcIDsKK+WPsuaWmemkqCA8IHNoaXJ5b3VrYW5cIDsKK+acieWjsOmfs+WMliA8IHl1dXNlaW9ua2FcIDsKK+ihgOWwj+advyA8IGtlc3Nob3ViYW5cIDsKK+izqueahCA8IHNoaXRzdXRla2lcIDsKK+mHkeiJsuWggiA8IGtvbmppa2lkb3VcIDsKK+a8ouaWueiWrCA8IGthbnBvdXlha3VcIDsKK+S+oeWApOWfuua6liA8IGthY2hpa2lqdW5cIDsKK+iqv+eQhuWZqOWFtyA8IGNob3VyaWtpZ3VcIDsKK+egsueFmeW8vumbqCA8IGhvdWVuZGFuJyd1XCA7Civnv7voqLPlrrYgPCBob24nJ3lha3VrYVwgOwor5bmz562J6KazIDwgYnlvdWRvdWthblwgOwor5qSc5p+75a6YIDwga2Vuc2hvdWthblwgOwor5aSJ5YiG5a2mIDwgaGVuYnVuZ2FrdVwgOwor5YmN5qC954mpIDwgc2VuemFpbW9ub1wgOwor5by35aOu5YmkIDwga3lvdXNvdXphaVwgOwor5rW355Sj5qWtIDwga2Fpc2FuZ3lvdVwgOwor6aas6ICz5p2x6aKoIDwgYmFqaXRvdWZ1dVwgOwor54yu57SN6ICFIDwga2VuJydub3VzaGFcIDsKK+WFremAo+aYnyA8IHJva3VyZW5zZWlcIDsKK+ailOWtkCA8IGt1Y2hpbmFzaGlcIDsKK+WLhemhmOWvuiA8IGNob2t1Z2FuamlcIDsKK+S8neafk+eXhSA8IGRlbnNlbmJ5b3VcIDsKK+mpgOWcsCA8IG1hc3NoaWd1cmFcIDsKK+S4reiPr+mNiyA8IGNodXVrYW5hYmVcIDsKK+WkqeS4iuW3nSA8IHRlbmpvdWdhd2FcIDsKK+a0i+iKpeWtkCA8IHlvdWdhcmFzaGlcIDsKK+eahuWLpOizniA8IGthaWtpbnNob3VcIDsKK+mHkeWxnueJhyA8IGtpbnpva3VoZW5cIDsKK+Wlh+ihk+W4qyA8IGtpanV0c3VzaGlcIDsKK+Wil+WKoOeOhyA8IHpvdWthcml0c3VcIDsKK+aomea6luWeiyA8IGh5b3VqdW5rZWlcIDsKK+mHkei1pOiJsiA8IGtpbicnYWthaXJvXCA7Civosqzku7vmhJ8gPCBzZWtpbmlua2FuXCA7Civmt4vlt7Tnr4AgPCByaW5wYXNldHN1XCA7Civkvpvnianlj7AgPCBrdW1vdHN1ZGFpXCA7CivnsbPlm73kurogPCBiZWlrb2t1amluXCA7CivnrYnmuKnlvI8gPCB0b3VvbnNoaWtpXCA7CivliY3ku7vogIUgPCB6ZW4nJ25pbnNoYVwgOwor6KO96YCg5YWDIDwgc2Vpem91bW90b1wgOwor5oOF5aCx6YePIDwgam91aG91cnlvdVwgOwor5bmz6KGM56e75YuVIDwgaGVpa291aWRvdVwgOwor5raI6ICX5ZOBIDwgc2hvdW1vdWhpblwgOwor5Lih5omL5YipIDwgcnlvdXRla2lraVwgOwor6JOE6Zu75ZmoIDwgY2hpa3VkZW5raVwgOwor5a++6KeS57eaIDwgdGFpa2FrdXNlblwgOwor5bGx5YiAIDwgeWFtYWdhdGFuYVwgOwor5LiA5pmp5LitIDwgaGl0b2Jhbmp1dVwgOwor5LiL6YGTIDwgc2hpdGFtaWNoaVwgOwor5pqX5Ymj5q66IDwgYW5rZW5zYXRzdVwgOwor6aCt6Laz6aGeIDwgdG91c29rdXJ1aVwgOwor5Zyo5p2x5LqsIDwgemFpdG91a3lvdVwgOwor5qOE6KiA6JGJIDwgc3V0ZWtvdG9iYVwgOwor5YWN56iO6KGoIDwgbWVuemVpaHlvdVwgOwor5Zu95rCR5oCnIDwga29rdW1pbnNlaVwgOwor6KOc5Yqp5YuV6KmeIDwgaG9qb2RvdXNoaVwgOwor5b2r5Yi75a62IDwgY2hvdWtva3VrYVwgOwor5LiN6Lq+IDwgYnVzaGl0c3VrZVwgOwor55Sf5Y21IDwgbmFtYXRhbWFnb1wgOwor6Kqt5pu455WMIDwgZG9rdXNob2thaVwgOwor6aKo6JasIDwga2F6ZWd1c3VyaVwgOwor5puy6KqsIDwga3lva3VzZXRzdVwgOwor5bGF55WZ5rCRIDwga3lvcnl1dW1pblwgOwor5Li46KO4IDwgbWFydWhhZGFrYVwgOwor5peL5YWJ6KeSIDwgc2Vua291a2FrdVwgOwor6aOv57KSIDwgbWVzaGl0c3VidVwgOwor5bCP6ZaT5L2/IDwga29tYWR6dWthaVwgOwor6KeS6Iac54KOIDwga2FrdW1ha3VlblwgOwor54yr6LuKIDwgbmVrb2d1cnVtYVwgOwor6bCt6ISa6aGeIDwga2lreWFrdXJ1aVwgOwor6ZGR6K2Y5a62IDwga2Fuc2hpa2lrYVwgOwor6IiI6KGM5birIDwga291Z3lvdXNoaVwgOwor5LiJ6LaKIDwgbWl0c3Vrb3NoaVwgOwor5ay25aSp5LiLIDwga2FrYWFkZW5rYVwgOwor5Zu65b2i54mpIDwga29rZWlidXRzdVwgOwor57Sh57i+57O4IDwgYm91c2VraWl0b1wgOwor5ZCm5a6a5b+c562UIDwgaGl0ZWlvdXRvdVwgOwor5ZCd5ZeH5a62IDwgcmluc2hva3VrYVwgOwor54K65pu/5bC7IDwga2F3YXNlamlyaVwgOwor6Kqt6ICF5qyEIDwgZG9rdXNoYXJhblwgOwor5Ye65LiW5L2cIDwgc2h1c3Nlc2FrdVwgOwor5YuV5pGp5pOmIDwgZG91bWFzYXRzdVwgOwor6YOo5YiG6aOfIDwgYnVidW5zaG9rdVwgOwor5Ye654mI5rOVIDwgc2h1cHBhbmhvdVwgOwor6Kqy6aGM5puyIDwga2FkYWlreW9rdVwgOwor5a6i5pyIIDwga3lha3VnZXRzdVwgOwor5q666Jmr5YmkIDwgc2F0Y2h1dXphaVwgOwor6JaE6Zuq6I2JIDwgdXN1eXVraXNvdVwgOwor5Lq65L2T5a2mIDwgamludGFpZ2FrdVwgOwor5bmz5Z+O5LqsIDwgaGVpam91a3lvdVwgOwor5LiJ6KeS5bi9IDwgc2Fua2FrdWJvdVwgOwor6KGd5pKD5rOiIDwgc2hvdWdla2loYVwgOwor6Ieq5bex6LOH5pysIDwgamlrb3NoaWhvblwgOwor6YO16YCB5paZIDwgeXV1c291cnlvdVwgOwor55+z54Kt6YW4IDwgc2VraXRhbnNhblwgOwor5b6B5pyN6ICFIDwgc2VpZnVrdXNoYVwgOwor6aGU6LKMIDwga2Fva2F0YWNoaVwgOwor6buE6YeR5pmC5LujIDwgb3Vnb25qaWRhaVwgOwor5ZG95Luk5LiA5LiLIDwgbWVpcmVpaWtrYVwgOwor5by36KGM6LuNIDwga3lvdWtvdWd1blwgOwor57SN5LuY5pyf6ZmQIDwgbm91ZnVraWdlblwgOwor5Luj6KGo5ZujIDwgZGFpaHlvdWRhblwgOwor5bCP5YWQ6bq755e6IDwgc2hvdW5pbWFoaVwgOwor6ISa5pys5a62IDwga3lha3Vob25rYVwgOwor6I+T5a2Q6YmiIDwga2FzaGliYWNoaVwgOwor55u05YaG6YyQIDwgY2hva3VlbnN1aVwgOwor5a6j5Lyd6KiY5LqLIDwgc2VuZGVua2lqaVwgOwor5Ye654mI5qipIDwgc2h1cHBhbmtlblwgOwor5YaN5pyN5b25IDwgc2FpZnVrdWVraVwgOwor55Sf5pS+6YCBIDwgbmFtYWhvdXNvdVwgOwor6KiI566X5bC6IDwga2Vpc2FuamFrdVwgOwor5aSP5a2j5LyR5pqHIDwga2FraWt5dXVrYVwgOwor6YCa5Yuk6ICFIDwgdHN1dWtpbnNoYVwgOwor5LiA5aGB57eaIDwgaWNoaXJ1aXNlblwgOwor6Ieo5pmC5pS/5bqcIDwgcmluamlzZWlmdVwgOwor5bC65YWrIDwgc2hha3VoYWNoaVwgOwor5ray6YeP6KiIIDwgZWtpcnlvdWtlaVwgOwor5LiJ5pel5LiJ5pmpIDwgbWlra2FtaWJhblwgOwor5YiH5pSv5Li5IDwga2lyaXNoaXRhblwgOwor6ZeH5biC5aC0IDwgeWFtaXNoaWpvdVwgOwor5p2x55S3IDwgYXp1bWFvdG9rb1wgOwor6Zqc5a6z6ICFIDwgc2hvdWdhaXNoYVwgOwor6LK05peP55qEIDwga2l6b2t1dGVraVwgOwor5Y2w5Yi35Lq6IDwgaW5zYXRzdW5pblwgOwor5rW36LOK6Ii5IDwga2Fpem9rdXNlblwgOwor5oq96LGh5YyWIDwgY2h1dXNob3VrYVwgOwor6Kyb57+S5LyaIDwga291c2h1dWthaVwgOwor5oSb546p54mpIDwgYWlnYW5idXRzdVwgOwor6bq76ZuA5bGLIDwgbWF6ZWphbicneWFcIDsKK+S8neafk+avkiA8IGRlbnNlbmRva3VcIDsKK+eEoeeQhumbo+mhjCA8IG11cmluYW5kYWlcIDsKK+S7luWbveiAhSA8IHRha29rdW1vbm9cIDsKK+S6iOWCmeijhee9riA8IHlvYmlzb3VjaGlcIDsKK+aenOaoueagveWfuSA8IGthanVzYWliYWlcIDsKK+mHjeWxpOeahCA8IGp1dXNvdXRla2lcIDsKK+izquaouCA8IHNoaXRzdWJva3VcIDsKK+S6lOmHjeWhlCA8IGdvanV1bm90b3VcIDsKK+S4i+e0muWvqSA8IGtha3l1dXNoaW5cIDsKK+iCmOaelSA8IGhpamltYWt1cmFcIDsKK+eyl+iho+eyl+mjnyA8IHNvaXNvc2hva3VcIDsKK+S9juaJgOW+lyA8IHRlaXNob3Rva3VcIDsKK+S7j+a7hSA8IGJ1dHN1bWV0c3VcIDsKK+WwgumWgOeroCA8IHNlbm1vbnNob3VcIDsKK+mLs+mAoOaJgCA8IGNodXV6b3VzaG9cIDsKK+efreaZguaXpSA8IHRhbmppaml0c3VcIDsKK+S8kealreaXpSA8IGt5dXVneW91YmlcIDsKK+WFiOerr+eahCA8IHNlbnRhbnRla2lcIDsKK+S6uuawkeWnlOWToSA8IGppbm1pbicnaWluXCA7CivllqflmKnohbAgPCBrZW5rYWdvc2hpXCA7CivojYnlj4zntJkgPCBrdXNhem91c2hpXCA7Civnqbrmg7PnmoQgPCBrdXVzb3V0ZWtpXCA7Civpo73lkozokrjmsJcgPCBob3V3YWpvdWtpXCA7Civpm6rpgZTno6ggPCB5dWtpZGFydW1hXCA7CivljLnlpKvljLnlqaYgPCBoaXBwdWhpcHB1XCA7CivlhoXkuqTmuIkgPCBuYWlrb3VzaG91XCA7CivluoPlkYrnpL4gPCBrb3Vrb2t1c2hhXCA7CivlsI/ljIUgPCBrb2R6dXRzdW1pXCA7Civlr4blr4YgPCBtaXRzdW1pdHN1XCA7CivkuozliIbpn7PnrKYgPCBuaWJ1bicnb25wdVwgOwor6LKo54mp6aeFIDwga2Ftb3RzdWVraVwgOwor5Y2D5rOi5LiH5rOiIDwgc2VucGFiYW5wYVwgOwor6LKn5LmP57GkIDwgYmluYm91Z3VqaVwgOwor5a++6Kmx5byPIDwgdGFpd2FzaGlraVwgOwor5bCx5LitIDwgbmFrYW5kenVrdVwgOwor5YWx55Sj6LuNIDwga3lvdXNhbmd1blwgOwor5LiK6JOGIDwgdXdhbXVzaGlyb1wgOwor5LiN5om/6Ku+IDwgZnVzaG91ZGFrdVwgOwor5rGC5Lq66KqMIDwga3l1dWppbnNoaVwgOwor6Z6t5q+b6JmrIDwgYmVubW91Y2h1dVwgOwor57Ch5Y2Y5pyNIDwga2FudGFuZnVrdVwgOwor6buS56mC55eFIDwga3Vyb2hvYnlvdVwgOwor6ISx5YqbIDwgZGF0c3VyeW9rdVwgOwor6LOq5pytIDwgc2hpY2hpZnVkYVwgOwor5YiG5ouF6aGNIDwgYnVudGFuZ2FrdVwgOwor55Ww5bi455m655SfIDwgaWpvdWhhc3NlaVwgOwor5rK75a6J6YOo6ZqKIDwgY2hpYW5idXRhaVwgOwor5aSq6Zm96JmrIDwgdGFpeW91Y2h1dVwgOwor5pqr5a6a55qEIDwgemFudGVpdGVraVwgOwor5Luj6KGo5L6LIDwgZGFpaHlvdXJlaVwgOwor5LiJ6I+xIDwgbWl0c3ViaXNoaVwgOwor5YiD5YK35rKZ5rGwIDwgbmluam91emF0YVwgOwor5ZCM5Zu95rCRIDwgZG91a29rdW1pblwgOwor6KiY5b+154mpIDwga2luZW5idXRzdVwgOwor5pen5L2T5Yi2IDwga3l1dXRhaXNlaVwgOwor5Luu5p6VIDwga2FyaW1ha3VyYVwgOwor5Y2X5rSL5p2QIDwgbmFuJyd5b3V6YWlcIDsKK+mdnuW4uOWPoyA8IGhpam91Z3VjaGlcIDsKK+S4iuihqOe0mSA8IHV3YWJ5b3VzaGlcIDsKK+mdoueZveWRsyA8IG9tb3NoaXJvbWlcIDsKK+S/neWtmOmjnyA8IGhvem9uc2hva3VcIDsKK+S4jea0u+aAp+WMliA8IGZ1a2Fzc2Vpa2FcIDsKK+WNiuaEj+itmCA8IGhhbicnaXNoaWtpXCA7Civkvpvlh7ogPCBreW91c2h1dHN1XCA7Civlrq7lrqQgPCBreXV1c2hpdHN1XCA7CivmnKzoqr/lrZAgPCBob25jaG91c2hpXCA7CivnuZTlpbPmmJ8gPCBzaG9rdWpvc2VpXCA7CivmmKXpnJ4gPCBoYXJ1Z2FzdW1pXCA7CivlsILploDnmoQgPCBzZW5tb250ZWtpXCA7Civpo5/niakgPCBzaG9rdW1vdHN1XCA7CivloLHlhJ/ph5EgPCBob3VzaG91a2luXCA7Civmk7LlvL7nrZIgPCB0ZWtpZGFudG91XCA7CivosqfkuY/npZ4gPCBiaW5ib3VnYW1pXCA7CivmmJTpoqggPCBtdWthc2hpZnV1XCA7CivlpKfntbHpoJggPCBkYWl0b3VyeW91XCA7Civph4/lrZDoq5YgPCByeW91c2hpcm9uXCA7CivkuK3lipvnsokgPCBjaHV1cmlraWtvXCA7Civlrp3ls7YgPCB0YWthcmFqaW1hXCA7Civlt6Xkuovnj77loLQgPCBrb3VqaWdlbmJhXCA7CivnnLzpj6HnjL8gPCBtZWdhbmV6YXJ1XCA7Civku4/mp5ggPCBob3Rva2VzYW1hXCA7CivohJrlipsgPCBreWFrdXJ5b2t1XCA7Civmpa3nlYzntJkgPCBneW91a2Fpc2hpXCA7CivpnZ7lhazlvI8gPCBoaWtvdXNoaWtpXCA7CivmsLTlhbXmnI0gPCBzdWloZWlmdWt1XCA7Civosq/mnKjloLQgPCBjaG9ib2t1am91XCA7Civmoq/lrZDmrrUgPCBoYXNoaWdvZGFuXCA7CivlvZPmrbPpp5IgPCB0b3VzYWlnb21hXCA7CivlrpfmlZnlrrYgPCBzaHV1a3lvdWthXCA7CivnoJTnqbblrpggPCBrZW5reXV1a2FuXCA7CivmronmlZnogIUgPCBqdW5reW91c2hhXCA7Civmronpm6PogIUgPCBqdW4nJ25hbnNoYVwgOwor5aOB6Ki06KifIDwga2FiZXpvc2hvdVwgOwor5LiL6IG3IDwgc2hpdGFzaG9rdVwgOwor6Ieq5bex5a6j5LydIDwgamlrb3NlbmRlblwgOwor546J5pW055CGIDwgZ3lva3VzZWlyaVwgOwor6Iyo5Z+O55yMIDwgaWJhcmFraWtlblwgOwor5bGI5puy6YOoIDwga3Vra3lva3VidVwgOwor5raI6Ziy6ZqKIDwgc2hvdWJvdXRhaVwgOwor5pyn5piG5biDIDwgb2Jvcm9rb25idVwgOwor5rCX566h5pSv54KOIDwga2lrYW5zaGllblwgOwor55yL55eF5Lq6IDwga2FuYnlvdW5pblwgOwor6Iqx6Zu76LuKIDwgaGFuYWRlbnNoYVwgOwor5Zyw5paH5a2mIDwgY2hpbW9uZ2FrdVwgOwor5Y+j5L6b5pu4IDwga291a3lvdXNob1wgOwor5puy562GIDwga3lva3VoaXRzdVwgOwor5omL5YmN5Yud5omLIDwgdGVtYWVnYXR0ZVwgOwor5L+d5a6I5Li7576pIDwgaG9zaHVzaHVnaVwgOwor6I2J6YeO55CDIDwga3VzYXlha3l1dVwgOwor5qSc5LqL5bGAIDwga2VuamlreW9rdVwgOwor5pyo56uv5b6u5aG1IDwga29wcGFtaWppblwgOwor5YWt6L665b2iIDwgcm9rdWhlbmtlaVwgOwor5q275Lqh6KiY5LqLIDwgc2hpYm91a2lqaVwgOwor6Kqt6ICF5bGkIDwgZG9rdXNoYXNvdVwgOwor5YKs5L+D54q2IDwgc2Fpc29rdWpvdVwgOwor5YK+5pac6KeSIDwga2Vpc2hha2FrdVwgOwor6YGO5Ymw5Yip55uKIDwga2Fqb3VyaWVraVwgOwor5Y+O55uj54q2IDwgc2h1dWthbmpvdVwgOwor5Zyw6ZyH5a2mIDwgamlzaGluZ2FrdVwgOwor5Zyo5LiW5LitIDwgemFpc2VpY2h1dVwgOwor5aWl5bqn5pW3IDwgb2t1emFzaGlraVwgOwor5LiA57qPIDwgaGl0b21hdG9tZVwgOwor576O6KGT6aSoIDwgYmlqdXRzdWthblwgOwor6Kix5a656YePIDwga3lveW91cnlvdVwgOwor5aWz5bCK55S35Y2RIDwgam9zb25kYW5waVwgOwor5bCE5pKD5aC0IDwgc2hhZ2VraWpvdVwgOwor5b6M5aSp55qEIDwga291dGVudGVraVwgOwor6aeQ5bGv5ZywIDwgY2h1dXRvbmNoaVwgOwor6aOv5quDIDwgbWVzaGliaXRzdVwgOwor6ISz5rqi6KGAIDwgbm91aWtrZXRzdVwgOwor5a2Y5ZG95LitIDwgem9ubWVpY2h1dVwgOwor57O75YiX5YyWIDwga2VpcmV0c3VrYVwgOwor5Ye654mI5bGLIDwgc2h1cHBhbicneWFcIDsKK+Wvqee+jueahCA8IHNoaW5iaXRla2lcIDsKK+aBkuS5heaApyA8IGtvdWt5dXVzZWlcIDsKK+iyneafsSA8IGthaWJhc2hpcmFcIDsKK+eJh+iyv+aYkyA8IGthdGFib3Vla2lcIDsKK+aWh+eMruWtpiA8IGJ1bmtlbmdha3VcIDsKK+WNgeS6jOWNmOihoyA8IGp1dW5paGl0b2VcIDsKK+aZguS7o+iJsiA8IGppZGFpc2hva3VcIDsKK+WIhumbouiqsueojiA8IGJ1bnJpa2F6ZWlcIDsKK+Wkp+Wkp+eahCA8IGRhaWRhaXRla2lcIDsKK+S6jOmHjeapiyA8IG5panV1YmFzaGlcIDsKK+WcsOiqjOWtpiA8IGNoaXNoaWdha3VcIDsKK+WMluWtpueahCA8IGthZ2FrdXRla2lcIDsKK+absuebtCA8IGt5b2t1Y2hva3VcIDsKK+iCieW8vuaIpiA8IG5pa3VkYW5zZW5cIDsKK+S4gOe1g+eQtCA8IGljaGlnZW5raW5cIDsKK+mBiueJp+awkSA8IHl1dWJva3VtaW5cIDsKK+S4uOeTpiA8IG1hcnVnYXdhcmFcIDsKK+aguOWun+mokyA8IGtha3VqaWtrZW5cIDsKK+iyqOeJqei7iiA8IGthbW90c3VzaGFcIDsKK+S7u+aEj+aNnOafuyA8IG5pbicnaXNvdXNhXCA7CivmsYLkurrogIUgPCBreXV1amluc2hhXCA7CivkuIPnq4ggPCBuYW5ha2FtYWRvXCA7CivlnLDpnIflm70gPCBqaXNoaW5rb2t1XCA7CivlsYXnlZnlnLAgPCBreW9yeXV1Y2hpXCA7CivkuIrkvY3mpoLlv7UgPCBqb3VpZ2FpbmVuXCA7CivpmpzlrZDntJkgPCBzaG91amlnYW1pXCA7CivoiJ7lj7DpgZPlhbcgPCBidXRhaWRvdWd1XCA7CivmvZzlh73nl4UgPCBzZW5rYW5ieW91XCA7CivkuIDnqbQgPCBoaXRvdHN1YW5hXCA7CivlvJXnjofogIUgPCBpbnNvdHN1c2hhXCA7CivkuIrmmKDmmYLplpMgPCBqb3VlaWppa2FuXCA7CivlravlqJggPCBtYWdvbXVzdW1lXCA7Civmtbfos4rniYggPCBrYWl6b2t1YmFuXCA7Civkv6Hku7DogIUgPCBzaGlua291c2hhXCA7CivmtojpmLLou4ogPCBzaG91Ym91c2hhXCA7CivkuInnrYnos54gPCBzYW50b3VzaG91XCA7CivnhKHorablr58gPCBtdWtlaXNhdHN1XCA7Civku4/mgKcgPCBob3Rva2VzaG91XCA7CivpnZnpnZkgPCBzaGl6dXNoaXp1XCA7CivlvanoibLnlLsgPCBzYWlzaG9rdWdhXCA7Civli6flkYrogIUgPCBrYW5rb2t1c2hhXCA7CivoqIjlmajpo5vooYwgPCBrZWlraWhpa291XCA7Civlrp/lipsgPCBqaXRzdXJ5b2t1XCA7Civmm7LnjocgPCBreW9rdXJpdHN1XCA7CivlpKfpvJMgPCBvb3RzdWR6dW1pXCA7CivluoPlkYrmrIQgPCBrb3Vrb2t1cmFuXCA7Civos57ph5HnjosgPCBzaG91a2luJydvdVwgOwor5oim54G95a2k5YWQIDwgc2Vuc2Fpa29qaVwgOwor6YCa55+l54q2IDwgdHN1dWNoaWpvdVwgOwor5bel5L2c5ZOBIDwga291c2FrdWhpblwgOwor5Zyw5pS/5a2mIDwgY2hpc2VpZ2FrdVwgOwor5aSq6Zm956WeIDwgdGFpeW91c2hpblwgOwor57aZ5om/6ICFIDwga2Vpc2hvdXNoYVwgOwor5Z+65pys5Y6f55CGIDwga2lob25nZW5yaVwgOwor5Lmz6KO95ZOBIDwgbnl1dXNlaWhpblwgOwor54uQ6ImyIDwga2l0c3VuZWlyb1wgOwor6YGK5pKD6ZqKIDwgeXV1Z2VraXRhaVwgOwor5Y2R5oCv6ICFIDwgaGlreW91bW9ub1wgOwor5YaN5pWZ6IKyIDwgc2Fpa3lvdWlrdVwgOwor5Zu95YaF57eaIDwga29rdW5haXNlblwgOwor5Zmb54WZ6I2JIDwga2FtaXRhYmFrb1wgOwor5LiA552hIDwgaGl0b25lbXVyaVwgOwor5oWI5ZaE5biCIDwgaml6ZW4nJ2ljaGlcIDsKK+WbnuaDs+mMsiA8IGthaXNvdXJva3VcIDsKK+WkluS6pOeahCA8IGdhaWtvdXRla2lcIDsKK+aDheaEj+aKleWQiCA8IGpvdWl0b3Vnb3VcIDsKK+S4i+eUuiA8IHNoaXRhbWFjaGlcIDsKK+euoeeQhuapn+iDvSA8IGthbnJpa2lub3VcIDsKK+S6uuW/gyA8IGhpdG9nb2tvcm9cIDsKK+S/rueQhuS4rSA8IHNodXVyaWNodXVcIDsKK+iHqOaZguiomOWPtyA8IHJpbmppa2lnb3VcIDsKK+S4ieetieimqiA8IHNhbnRvdXNoaW5cIDsKK+WcsOihqOmdoiA8IGNoaWh5b3VtZW5cIDsKK+W5sua4ieioiCA8IGthbnNob3VrZWlcIDsKK+eglOeptuS8miA8IGtlbmt5dXVrYWlcIDsKK+iCluWDj+aoqSA8IHNob3V6b3VrZW5cIDsKK+S4g+eUnyA8IHNoaWNoaXNob3VcIDsKK+WFteW9ueW/jOmBvyA8IGhlaWVraWtpaGlcIDsKK+eHlem6piA8IGthcmFzdW11Z2lcIDsKK+W9ueS4jei2syA8IHlha3VidXNva3VcIDsKK+S4gOeVqiA8IGhpdG90c3VnYWlcIDsKK+azqOaEj+WKmyA8IGNodXVpcnlva3VcIDsKK+iFueS4iuatuyA8IGZ1a3Vqb3VzaGlcIDsKK+e3qOmbhuiAhSA8IGhlbnNodXVzaGFcIDsKK+W6g+WRiuadvyA8IGtvdWtva3ViYW5cIDsKK+a4ieemvemhniA8IHNob3VraW5ydWlcIDsKK+WAkumMr+iAhSA8IHRvdXNha3VzaGFcIDsKK+awtOeWseeYoSA8IG1penVib3Vzb3VcIDsKK+W5s+etieaoqSA8IGJ5b3Vkb3VrZW5cIDsKK+Wkp+mch+eBvSA8IGRhaXNoaW5zYWlcIDsKK+mHjeeXh+S+iyA8IGp1dXNob3VyZWlcIDsKK+WcsOWfn+eahCA8IGNoaWlraXRla2lcIDsKK+WFseeUo+ezuyA8IGt5b3VzYW5rZWlcIDsKK+mWi+mWieapiyA8IGthaWhlaWt5b3VcIDsKK+aIpuS6ieaYoOeUuyA8IHNlbnNvdWVpZ2FcIDsKK+mZs+aDheabuCA8IGNoaW5qb3VzaG9cIDsKK+iyoeaUv+WNseapnyA8IHphaXNlaWtpa2lcIDsKK+aKleapn+eGsSA8IHRvdWtpbmV0c3VcIDsKK+aciemZkOiKseW6jyA8IHl1dWdlbmtham9cIDsKK+eJqeiqniA8IG1vbm9nYXRhcmlcIDsKK+WGl+irh+S6iyA8IGpvdWRhbmtvdG9cIDsKK+acgOmrmOe0miA8IHNhaWtvdWt5dXVcIDsKK+aAneaDkeW4qyA8IG9tb3dha3VzaGlcIDsKK+Wls+mBlCA8IG9uJyduYXRhY2hpXCA7Civopb/ml6XmnKwgPCBuaXNoaW5paG9uXCA7Civov5Hku6PnmoQgPCBraW5kYWl0ZWtpXCA7CivotoXlpKflnosgPCBjaG91b29nYXRhXCA7CivnoJXmsLfoiLkgPCBzYWloeW91c2VuXCA7CivmvIHmpa3ms5UgPCBneW9neW91aG91XCA7CivmnKfmnIggPCBvYm9yb2R6dWtpXCA7CivmnKrop6PmsbogPCBtaWthaWtldHN1XCA7CivniYfot5sgPCBrYXRhY2hpbmJhXCA7Civou43kuovln7rlnLAgPCBndW5qaWtpY2hpXCA7Civlt6jkurrlm70gPCBreW9qaW5rb2t1XCA7CivmnIDlsI/pmZAgPCBzYWlzaG91Z2VuXCA7CivmnKvml6UgPCBtYXRzdWppdHN1XCA7CivlhazlhbHmgKcgPCBrb3VreW91c2VpXCA7CivkuI3mraPkuovku7YgPCBmdXNlaWppa2VuXCA7Civlh7rmnaXmrKHnrKwgPCBkZWtpc2hpZGFpXCA7Civlt6Xlrablo6sgPCBrb3VnYWt1c2hpXCA7CivphZLpgKDmpa0gPCBzaHV6b3VneW91XCA7CivlpInkvZPku67lkI0gPCBoZW50YWlnYW5hXCA7CivoibLpiZvnrYYgPCBpcm9lbnBpdHN1XCA7CivmnJvmnIggPCBtb2NoaWR6dWtpXCA7Civoi7Hpm4TkuLvnvqkgPCBlaXl1dXNodWdpXCA7CivngavmiZPnn7MgPCBoaXVjaGlpc2hpXCA7CivphrjpgKDmpa0gPCBqb3V6b3VneW91XCA7CivlpKfpmrwgPCBvb2hheWFidXNhXCA7CivljZjnnLzpj6EgPCB0YW5nYW5reW91XCA7Civnl7ToqbHllqflmKkgPCBjaGl3YWdlbmthXCA7CivmvIHmpa3mqKkgPCBneW9neW91a2VuXCA7Civnn7Pnga/nsaAgPCBpc2hpZG91cm91XCA7CivljZfmsLfmtIsgPCBuYW5weW91eW91XCA7CivpsYjloLTon7kgPCB0YXJhYmFnYW5pXCA7CivlsqHlsbHnnIwgPCBva2F5YW1ha2VuXCA7Civng4/mnInlhYjnlJ8gPCB1eXV1c2Vuc2VpXCA7CivntKHnuL7lt6UgPCBib3VzZWtpa291XCA7CivotbfniIbolqwgPCBraWJha3V5YWt1XCA7Civnorroqo3mm7ggPCBrYWt1bmluc2hvXCA7CivmhrLms5XpgZXlj40gPCBrZW5wb3VpaGFuXCA7Civlm57ou6LmpIXlrZAgPCBrYWl0ZW4nJ2lzdVwgOwor6KqV55Sf55+zIDwgdGFuam91c2VraVwgOwor6Ziy6Iet5YmkIDwgYm91c2h1dXphaVwgOwor6Yyr6KO95ZOBIDwgc3V6dXNlaWhpblwgOwor5pyI5pyIIDwgdHN1a2lkenVraVwgOwor6LKo54mp6Ii5IDwga2Ftb3RzdXNlblwgOwor5LiA5aGB5omLIDwgaWNoaXJ1aXNodVwgOwor6ISa57ea576OIDwga3lha3VzZW5iaVwgOwor6IO955m75Y2K5bO2IDwgbm90b2hhbnRvdVwgOwor5Yqj5oCn6YG65LydIDwgcmVzc2VpaWRlblwgOwor5pyJ5L6h54mpIDwgeXV1a2FidXRzdVwgOwor6KuL6LKg5Yi25bqmIDwgdWtlb2lzZWlkb1wgOwor5qSN55Sf5ZuzIDwgc2hva3VzZWl6dVwgOwor5LiA5rihIDwgaGl0b3dhdGFyaVwgOwor55m65oOF5pyfIDwgaGF0c3Vqb3VraVwgOwor55m95rC056S+IDwgaGFrdXN1aXNoYVwgOwor5rC06LuK5bCP5bGLIDwgc3Vpc2hhZ295YVwgOwor5o6h566X5qCqIDwgc2Fpc2Fua2FidVwgOwor6KSQ5q+b5ZKM56iuIDwgYWthZ2V3YXNodVwgOwor6ZW35LiB5aC0IDwgbmFnYWNob3ViYVwgOwor5aa+6IW5IDwgbWVrYWtlYmFyYVwgOwor5pyJ5a2U6JmrIDwgeXV1a291Y2h1dVwgOwor5Zu65a6a6LKg5YK1IDwga290ZWlmdXNhaVwgOwor5aSp54S255eYIDwgdGVuJyduZW50b3VcIDsKK+S+nemhmOWFjeWumCA8IGlnYW5tZW5rYW5cIDsKK+Wbm+aLjeWtkCA8IHlvbmJ5b3VzaGlcIDsKK+WGl+mVt+ezuyA8IGpvdWNob3VrZWlcIDsKK+aXpeacrOW8jyA8IG5paG9uc2hpa2lcIDsKK+a6gOW5tOm9oiA8IG1hbicnbmVucmVpXCA7CivmtojpmLLoiYcgPCBzaG91Ym91dGVpXCA7CivlsI/mtrLog54gPCBzaG91ZWtpaG91XCA7CivpppbllLHogIUgPCBzaHVzaG91c2hhXCA7Civpm7LpnJ4gPCBrdW1va2FzdW1pXCA7Civml6XmnKzlubMgPCBuaWhvbmRhaXJhXCA7CivpnanooosgPCBrYXdhYnVrdXJvXCA7CivpiYTpnaLnmq4gPCB0ZXRzdW1lbnBpXCA7CivkuLvmqKnlm70gPCBzaHVrZW5rb2t1XCA7Civosrfmjpvph5EgPCBrYWlrYWtla2luXCA7Civnn7PngbDnn7MgPCBzZWtrYWlzZWtpXCA7CivnsbPllY/lsYsgPCBrb21lZG9uJyd5YVwgOwor5oCd5oOz5YqHIDwgc2hpc291Z2VraVwgOwor5LiH5Zu95rCRIDwgYmFua29rdW1pblwgOwor5Yun5ZGK54q2IDwga2Fua29rdWpvdVwgOwor5pWX5YyX5oSfIDwgaGFpYm9rdWthblwgOwor5a+G6Ly46Ii5IDwgbWl0c3V5dXNlblwgOwor5Ye65p2l5LiN5Ye65p2lIDwgZGVraWZ1ZGVraVwgOwor5Y+v5aSJ57+8IDwga2FoZW4nJ3lva3VcIDsKK+aUv+W6nOapn+mWoiA8IHNlaWZ1a2lrYW5cIDsKK+WBj+mgreeXmyA8IGhlbnRvdXRzdXVcIDsKK+W5tOm9oue1piA8IG5lbnJlaWt5dXVcIDsKK+mAj+ejgeeOhyA8IHRvdWppcml0c3VcIDsKK+S6i+S7tuiomOiAhSA8IGppa2Vua2lzaGFcIDsKK+W5s+WuieW+jOacnyA8IGhlaWFua291a2lcIDsKK+WOhOS7i+S6iyA8IHlha2thaWdvdG9cIDsKK+S8j+WwhOa/oCA8IGZ1a3VzaGFnb3VcIDsKK+aekOWHuiA8IHNla2lzaHV0c3VcIDsKK+aHuOWjheWegiA8IGtlbicneW91c3VpXCA7CivnlYzno4HmpbUgPCBrYWlqaWt5b2t1XCA7Civlv5znlKjlipsgPCBvdXlvdXJ5b2t1XCA7Civml6Xmm5zml6UgPCBuaWNoaXlvdWJpXCA7CivmtojpmLLnvbIgPCBzaG91Ym91c2hvXCA7Civpm4fnlKjkv53pmbogPCBrb3lvdWhva2VuXCA7CivosqfkuY/mgKcgPCBiaW5ib3VzaG91XCA7CivmoLjltKnlo4ogPCBrYWt1aG91a2FpXCA7CivkuI3mvZTmhJ8gPCBmdWtldHN1a2FuXCA7CivmlbDlrabogIUgPCBzdXVnYWt1c2hhXCA7CivogbTlj5bogIUgPCBjaG91c2h1c2hhXCA7Civoqq3mm7jkurogPCBkb2t1c2hvamluXCA7Civkv53orbfosr/mmJMgPCBob2dvYm91ZWtpXCA7CivliY3ku7vlnLAgPCB6ZW4nJ25pbmNoaVwgOwor5ryB6Imy5a62IDwgZ3lvc2hva3VrYVwgOwor5LiW55WM5Yi26KaHIDwgc2VrYWlzZWloYVwgOwor6KO95L2c6ICFIDwgc2Vpc2FrdXNoYVwgOwor5LiN5p2fIDwgZnV0c3V0c3VrYVwgOwor5rKh5YCL5oCnIDwgYm90c3Vrb3NlaVwgOwor54Sh5qmf6IKl5paZIDwgbXVraWhpcnlvdVwgOwor5YWo5bqX5LitIDwgemVudGVuY2h1dVwgOwor6auY6YeO6LGG6IWQIDwga291eWFkb3VmdVwgOwor5a6Y57Wm5ZOBIDwga2Fua3l1dWhpblwgOwor55m96YeR5pePIDwgaGFra2luem9rdVwgOwor5aSp5paH5a2mIDwgdGVubW9uZ2FrdVwgOwor5YW15a2m6ICFIDwgaGVpZ2FrdXNoYVwgOwor5ZCI5ZSx6ZqKIDwgZ2Fzc2hvdXRhaVwgOwor5Luj6K2w5pS/5rK7IDwgZGFpZ2lzZWlqaVwgOwor5LiN5oiQ56uLIDwgZnVzZWlyaXRzdVwgOwor54yr5p+zIDwgbmVrb3lhbmFnaVwgOwor54yu57SN5ZOBIDwga2VuJydub3VoaW5cIDsKK+e0sOeykuWIhiA8IHNhaXJ5dXVidW5cIDsKK+aEj+mmrOW/g+eMvyA8IGliYXNoaW4nJ2VuXCA7CivnjJvnt7Tnv5IgPCBtb3VyZW5zaHV1XCA7CivkuqTpgJrpgbrlhZAgPCBrb3V0c3V1aWppXCA7CivkvovlpJbnmoQgPCByZWlnYWl0ZWtpXCA7CivlirnnjofljJYgPCBrb3VyaXRzdWthXCA7CivpmaTomavoj4ogPCBqb2NodXVnaWt1XCA7CivntIXnlJ/lp5wgPCBiZW5pc2hvdWdhXCA7CivlubLmi5PlnLAgPCBrYW50YWt1Y2hpXCA7Civlh43lgrfogIUgPCB0b3VzaG91c2hhXCA7CivlkIzlm73kurogPCBkb3Vrb2t1amluXCA7Civnm67nmoToqp4gPCBtb2t1dGVraWdvXCA7Civosrjku5ggPCBrYXNoaXRzdWtlXCA7CivkuInlm73lv5cgPCBzYW5nb2t1c2hpXCA7CivkurrniannlLsgPCBqaW5idXRzdWdhXCA7CivlkLjlhaXlmaggPCBreXV1bnl1dWtpXCA7CivpmLLlr5LmnI0gPCBib3VrYW5mdWt1XCA7Civkv67pmaLplbcgPCBzaHV1aW5jaG91XCA7Civlm73lhoXms5UgPCBrb2t1bmFpaG91XCA7CivmjqLnqbbogIUgPCB0YW5reXV1c2hhXCA7CivliJ3lv4PogIUgPCBzaG9zaGluc2hhXCA7Civni7jmsYEgPCB0YW51a2lqaXJ1XCA7CivmnKrplovnmbogPCBtaWthaWhhdHN1XCA7CivluoPlkYrloZQgPCBrb3Vrb2t1dG91XCA7Civplovmi5PogIUgPCBrYWl0YWt1c2hhXCA7CivkurrpoZ7lraYgPCBqaW5ydWlnYWt1XCA7Civnn6Xml6XmtL4gPCBjaGluaWNoaWhhXCA7CivmnIDpq5jmva4gPCBzYWlrb3VjaG91XCA7CivlpKnnhLbmuK8gPCB0ZW4nJ25lbmtvdVwgOwor5Y+N6YCG5YWQIDwgaGFuZ3lha3VqaVwgOwor5LiA5Zu96ICFIDwgaWtrb2t1bW9ub1wgOwor5aW95p2Q5paZIDwga291emFpcnlvdVwgOwor5aSq6Zm95pqmIDwgdGFpeW91cmVraVwgOwor5bi455So55mWIDwgam91eW91aGVraVwgOwor5pep5pWZ6IKyIDwgc291a3lvdWlrdVwgOwor5qC85a2Q57ieIDwga291c2hpamltYVwgOwor5Y+N6LuN55qEIDwgaGFuZ3VudGVraVwgOwor6Jas5YyF57SZIDwgeWFrdWhvdXNoaVwgOwor5YW15pu56ZW3IDwgaGVpc291Y2hvdVwgOwor5ryi5paH5a2mIDwga2FuYnVuZ2FrdVwgOwor5oCl5YWI6YuSIDwga3l1dXNlbnBvdVwgOwor5LiN5oqxIDwga2FrYXdhcmF6dVwgOwor5Y+j5aWH6bqXIDwga3VjaGlnaXJlaVwgOwor6KGM5pS/5rOVIDwgZ3lvdXNlaWhvdVwgOwor6YCB6YeR6aGNIDwgc291a2luZ2FrdVwgOwor5rGC5ama6ICFIDwga3l1dWtvbnNoYVwgOwor5YaN6Kq/5pW0IDwgc2FpY2hvdXNlaVwgOwor6aKo6KaL6baPIDwga2F6YW1pZG9yaVwgOwor5Z+35pS/5a6YIDwgc2hpc3NlaWthblwgOwor6IO95qW95aCCIDwgbm91Z2FrdWRvdVwgOwor5aW95LiL54mpIDwga291a2FidXRzdVwgOwor5Y+M55m65qmfIDwgc291aGF0c3VraVwgOwor6YG65qOE6LKo54mpIDwgaWtpa2Ftb3RzdVwgOwor5YWs5YWx5YK1IDwga291a3lvdXNhaVwgOwor5pio5bm05p2lIDwgc2FrdW5lbnJhaVwgOwor5o+Q5L6b6ICFIDwgdGVpa3lvdXNoYVwgOwor6Ya46YCg5a2mIDwgam91em91Z2FrdVwgOwor5LiA5omAIDwgaGl0b3Rva29yb1wgOwor5b6X54K55ZyPIDwgdG9rdXRlbmtlblwgOwor54Kt5YyW5rC057SgIDwgdGFua2FzdWlzb1wgOwor5a+p576O5a2mIDwgc2hpbmJpZ2FrdVwgOwor5aWz5L6/5omAIDwgb24nJ25hYmVuam9cIDsKK+WRieacjeeJqSA8IGdvZnVrdW1vbm9cIDsKK+eXh+WAmee+pCA8IHNob3Vrb3VndW5cIDsKK+WbsueigeS4iee0miA8IGlnb3Nhbmt5dXVcIDsKK+eUo+WppuS6uuenkSA8IHNhbmZ1amlua2FcIDsKK+absuWwuiA8IGt5b2t1c2hha3VcIDsKK+agvOWtkOeqkyA8IGtvdXNoaW1hZG9cIDsKK+aWh+aYjuWbvSA8IGJ1bm1laWtva3VcIDsKK+ihjOaUv+aoqSA8IGd5b3VzZWlrZW5cIDsKK+mHkeacqOeKgCA8IGtpbm1va3VzZWlcIDsKK+eQhuaDs+S4u+e+qSA8IHJpc291c2h1Z2lcIDsKK+WNgeWtl+egsueBqyA8IGp1dWppaG91a2FcIDsKK+mbquizqiA8IHl1a2lzaGl0c3VcIDsKK+mDvemBk+W6nOecjCA8IHRvZG91ZnVrZW5cIDsKK+m6nemmmeixjOixhiA8IGpha291ZW5kb3VcIDsKK+aJi+acreWeiyA8IHRlZnVkYWdhdGFcIDsKK+WFqOiIrOeahCA8IHplbnBhbnRla2lcIDsKK+eJueauiumLvCA8IHRva3VzaHVrb3VcIDsKK+Wcp+e4ruaApyA8IGFzc2h1a3VzZWlcIDsKK+ebsuWUluWtpuagoSA8IG1vdWFnYWtrb3VcIDsKK+S/neWuieadoeS+iyA8IGhvYW5qb3VyZWlcIDsKK+efs+WZqOaZguS7oyA8IHNla2tpamlkYWlcIDsKK+S8vOmdnueQhuWxiCA8IGVzZXJpa3V0c3VcIDsKK+WumOaIv+mVtyA8IGthbmJvdWNob3VcIDsKK+iomOW/teWIh+aJiyA8IGtpbmVua2l0dGVcIDsKK+eZveegguezliA8IHNoaXJvemF0b3VcIDsKK+WAi+S6uuWAi+S6uiA8IGtvamlua29qaW5cIDsKK+aYpeWIhueCuSA8IHNodW5idW50ZW5cIDsKK+aXp+S4u+S6uiA8IGt5dXVzaHVqaW5cIDsKK+eKh+eKhyA8IGhpc2hpaGlzaGlcIDsKK+mbm+ixhiA8IGhpeW9rb21hbWVcIDsKK+W7tua7nuWIqeWtkCA8IGVudGFpcmlzaGlcIDsKK+iRiee3kee0oCA8IHlvdXJ5b2t1c29cIDsKK+e2sumgrSA8IGFtaWdhc2hpcmFcIDsKK+WIhua0vuS4u+e+qSA8IGJ1bnBhc2h1Z2lcIDsKK+WGhemdoueahCA8IG5haW1lbnRla2lcIDsKK+avgOiqieikkuiytiA8IGtpeW9ob3VoZW5cIDsKK+iCuue1kOaguCA8IGhhaWtla2tha3VcIDsKK+WUr+e+juS4u+e+qSA8IHl1aWJpc2h1Z2lcIDsKK+WhqemtmiA8IHNoaW96YWthbmFcIDsKK+WbnuWPjumHkSA8IGthaXNodXVraW5cIDsKK+e2v+W4veWtkCA8IHdhdGFib3VzaGlcIDsKK+S4reWftyA8IGNodXVzaGl0c3VcIDsKK+Wkj+iZqyA8IG5hdHN1bXVzaGlcIDsKK+aApemAsua0viA8IGt5dXVzaGluaGFcIDsKK+i7jeS6i+ihm+aYnyA8IGd1bmppZWlzZWlcIDsKK+iKuOihk+mZoiA8IGdlaWp1dHN1aW5cIDsKK+amtOW8vuegsiA8IHJ5dXVkYW5wb3VcIDsKK+WGkumZuuW/gyA8IGJvdWtlbnNoaW5cIDsKK+WPr+eHg+eJqSA8IGthbmVuYnV0c3VcIDsKK+aXpeacrOS4gCA8IG5paG9uJydpY2hpXCA7Civkv67nt7TogIUgPCBzaHV1cmVuc2hhXCA7Civlj43lsITpj6EgPCBoYW5zaGFreW91XCA7Civkuoznm7Top5IgPCBuaWNob2trYWt1XCA7CivnhKHmiJHlpKLkuK0gPCBtdWdhbXVjaHV1XCA7CivlnovlpInmj5sgPCBrYXRhaGVua2FuXCA7Civljrvli6LniZsgPCBreW9zZWl1c2hpXCA7CivkuojlrprmnJ/pmZAgPCB5b3RlaWtpZ2VuXCA7Civniq/nvarlraYgPCBoYW56YWlnYWt1XCA7Civljp/nsY3lnLAgPCBnZW5zZWtpY2hpXCA7Civntr7pjKYgPCBheWFuaXNoaWtpXCA7CivmgKfpgZPlvrMgPCBzZWlkb3V0b2t1XCA7CivlubPmu5HljJYgPCBoZWlrYXRzdWthXCA7Civnq4vkvZPmmKDnlLsgPCByaXR0YWllaWdhXCA7Civpg7Xkvr/nrrEgPCB5dXViaW5iYWtvXCA7Civlj5fkv6HmlpkgPCBqdXNoaW5yeW91XCA7Civlho3ntYTnuZQgPCBzYWlzb3NoaWtpXCA7Civnvo7ooZPnlYwgPCBiaWp1dHN1a2FpXCA7CivlpKnmsJfmqKHmp5ggPCB0ZW5raW1veW91XCA7CivkuI3nrYnlvI8gPCBmdWRvdXNoaWtpXCA7Civngavlj6Pljp/muZYgPCBrYWtvdWdlbmtvXCA7CivmnIjliKUgPCB0c3VraWJldHN1XCA7Civooajpn7PlrZfmr40gPCBoeW91b25qaWJvXCA7CivntITlrprmm7ggPCB5YWt1am91c2hvXCA7CivkuInnrofml6UgPCBzYW5nYW5pY2hpXCA7Civpn7Plo7DoqIDoqp4gPCBvbnNlaWdlbmdvXCA7CivnmbrnpaXlnLAgPCBoYXNzaG91Y2hpXCA7CivkuIDmmKjmmKjml6UgPCBzYWtpb3RvdG9pXCA7Civli53miYvlj6MgPCBrYXR0ZWd1Y2hpXCA7CivlpJXpo5/lvowgPCB5dXVzaG9rdWdvXCA7CivmkKzlhaXml6UgPCBoYW4nJ255dXViaVwgOwor6LGq5ZWG5bGkIDwgZ291c2hvdXNvdVwgOwor5aW06LGG6IWQIDwgeWFra29kb3VmdVwgOwor6ISx5rOV6KGM54K6IDwgZGFwcG91a291aVwgOwor5oSf6Kaa6KuWIDwga2Fua2FrdXJvblwgOwor5Zu955Sj6LuKIDwga29rdXNhbnNoYVwgOwor5LiN5rWB6YCaIDwgZnVyeXV1dHN1dVwgOwor5qmL6aCt5aChIDwga3lvdXRvdWhvdVwgOwor5YCL5Lq65Li7576pIDwga29qaW5zaHVnaVwgOwor5aSP5pmC6ZaTIDwgbmF0c3VqaWthblwgOwor55+z54Kt5bGkIDwgc2VraXRhbnNvdVwgOwor57W55LiA5Yy5IDwga2ludWlwcGlraVwgOwor5bu655m95pu4IDwga2VucGFrdXNob1wgOwor5raI6Ziy5rOVIDwgc2hvdWJvdWhvdVwgOwor5Lit6L+R5p2xIDwgY2h1dWtpbnRvdVwgOwor5LiN5q2j6KaP6LuNIDwgZnVzZWlraWd1blwgOwor5aWq55WlIDwgZGF0c3VyeWFrdVwgOwor6Ki85Lq65Y+wIDwgc2hvdW5pbmRhaVwgOwor5rC055Sj5qWtIDwgc3Vpc2FuZ3lvdVwgOwor5q+U5L6L5byPIDwgaGlyZWlzaGlraVwgOwor55S35omA5bivIDwgb3Rva29qb3RhaVwgOwor5L+u5pW054mIIDwgc2h1dXNlaWhhblwgOwor5YeG55yL6K235ammIDwganVua2FuZ29mdVwgOwor5Ya35rC05rW0IDwgcmVpc3VpeW9rdVwgOwor5aSP576957mUIDwgbmF0c3ViYW9yaVwgOwor6KSS6KiA6JGJIDwgaG9tZWtvdG9iYVwgOwor57mB57mBIDwgc2hpZ2VzaGlnZVwgOwor5LqL5YuZ5py6IDwgamltdWR6dWt1ZVwgOwor5Li75YKs5Zu9IDwgc2h1c2Fpa29rdVwgOwor5aSn5aSW5YiIIDwgb29zb3RvZ2FyaVwgOwor5riF566X5Lq6IDwgc2Vpc2FuJyduaW5cIDsKK+S9j+awkeelqCA8IGp1dW1pbmh5b3VcIDsKK+avjeWtkOWutuW6rSA8IGJvc2hpa2F0ZWlcIDsKK+eEoee3muWxgCA8IG11c2Vua3lva3VcIDsKK+aCquadkOaWmSA8IGFrdXphaXJ5b3VcIDsKK+aXpeeFp+ioiCA8IG5pc3Nob3VrZWlcIDsKK+aUr+aMgeeOhyA8IHNoaWppcml0c3VcIDsKK+S6jOmAo+eZuiA8IG5pcmVucGF0c3VcIDsKK+WQjOWQjeeVsOS6uiA8IGRvdW1laWlqaW5cIDsKK+WFt+ixoeeahCA8IGd1c2hvdXRla2lcIDsKK+WJr+aKteW9kyA8IGZ1a3V0ZWl0b3VcIDsKK+iCsuWFkOaZgumWkyA8IGlrdWppamlrYW5cIDsKK+aZguS+oeeZuuihjCA8IGppa2FoYWtrb3VcIDsKK+iDuOiGnOeCjiA8IGt5b3VtYWt1ZW5cIDsKK+mZpOa5v+WZqCA8IGpvc2hpdHN1a2lcIDsKK+S5l+aPm+mnhSA8IG5vcmlrYWVla2lcIDsKK+S4gOWRqCA8IGhpdG9tZWd1cmlcIDsKK+WPpOacrOWxiyA8IGZ1cnVob24nJ3lhXCA7Civlt6jlpKfnl4cgPCBreW9kYWlzaG91XCA7CivkvJrorbDkuovpoIUgPCBrYWlnaWppa291XCA7Civnn6Xml6XlrrYgPCBjaGluaWNoaWthXCA7Civnmb3nnLzoppYgPCBoYWt1Z2Fuc2hpXCA7CivnhaflsITms5UgPCBzaG91c2hhaG91XCA7Civku67mg7PoqJjmhrYgPCBrYXNvdWtpb2t1XCA7Civng4/ps6kgPCBrYXJhc3ViYXRvXCA7CivotaTkv6Hlj7cgPCBha2FzaGluZ291XCA7CivplbfmlrnlvaIgPCBjaG91aG91a2VpXCA7CivkuIflm73lj7IgPCBiYW5rb2t1c2hpXCA7CivpgKDlhbXlu6AgPCB6b3VoZWlzaG91XCA7CivmnbHkuqzmub4gPCB0b3VreW91d2FuXCA7Civni6zlibXmgKcgPCBkb2t1c291c2VpXCA7Civpg6jliIbpurvphZQgPCBidWJ1bm1hc3VpXCA7CivmpJzkuovmjqfoqLQgPCBrZW5qaWtvdXNvXCA7CivmlL7mtarnmZYgPCBob3Vyb3VoZWtpXCA7CivooYzmlL/lrpggPCBneW91c2Vpa2FuXCA7CivmsqHotqPlkbMgPCBib3RzdXNodW1pXCA7CivpmbbphZTlooMgPCB0b3VzdWlreW91XCA7Civlj43lsITop5IgPCBoYW5zaGFrYWt1XCA7Civml4Xng48gPCB0YWJpZ2FyYXN1XCA7CivkuIPlhYkgPCBuYW5haGlrYXJpXCA7CivnibnlirnolqwgPCB0b2trb3V5YWt1XCA7CivlqJjlqb8gPCBtdXN1bWVtdWtvXCA7Civml6XmsqEgPCBuaWNoaWJvdHN1XCA7CivlpJrpoIXlvI8gPCB0YWtvdXNoaWtpXCA7Civooajmg4XnrYsgPCBoeW91am91a2luXCA7CivntYzllrbnrqHnkIYgPCBrZWllaWthbnJpXCA7CivliKnnm4rnjocgPCByaWVraXJpdHN1XCA7CivkuInmi43lrZAgPCBzYW5ieW91c2hpXCA7Civph4/osqnlupcgPCByeW91aGFudGVuXCA7Civnt6jpm4blrZAgPCBoZW5zaHV1c2hpXCA7CivlhpfplbfmgKcgPCBqb3VjaG91c2VpXCA7CivpvLvnnLzpj6EgPCBoYW5hbWVnYW5lXCA7CivlhoXoppbpj6EgPCBuYWlzaGlreW91XCA7CivotaTnv6Hnv6AgPCBha2FzaG91YmluXCA7Civpo5vooYzmmYLplpMgPCBoaWtvdWppa2FuXCA7CivnhrHmqZ/plqIgPCBuZXRzdWtpa2FuXCA7CivmkYLorbfohbogPCBzZXRzdWdvc2VuXCA7Civlr77mipfnrZYgPCB0YWlrb3VzYWt1XCA7Civov5Hku6PliocgPCBraW5kYWlnZWtpXCA7CivlvrnlupXnmoQgPCB0ZXR0ZWl0ZWtpXCA7Civlm5vlrZfnhp/oqp4gPCB5b2ppanVrdWdvXCA7CivmrbTku6Plj7IgPCByZWtpZGFpc2hpXCA7Civml6nopovooaggPCBoYXlhbWloeW91XCA7Civoh6jmqZ/lv5zlpIkgPCByaW5raW91aGVuXCA7CivmipXlsITop5IgPCB0b3VzaGFrYWt1XCA7CivlrprmnJ/kv53pmbogPCB0ZWlraWhva2VuXCA7Civnm6PnnaPogIUgPCBrYW50b2t1c2hhXCA7CivlhbHnlKPlnI8gPCBreW91c2Fua2VuXCA7Civlrp/ooYzkuK0gPCBqaWtrb3VjaHV1XCA7CivnjJvmlLvmkoMgPCBtb3Vrb3VnZWtpXCA7Civpm7vlrZDmrrsgPCBkZW5zaGlrYWt1XCA7CivpgKDoqIDpo5voqp4gPCB6b3VnZW5oaWdvXCA7CivmnZHlvbnloLQgPCBtdXJheWFrdWJhXCA7CivntLDpm6ogPCBzYXNhbWV5dWtpXCA7Civpmbjou5/poqggPCByaWt1bmFucHV1XCA7CivmlL/msrvoibIgPCBzZWlqaXNob2t1XCA7Civmr43lrZDojYkgPCBoYWhha29ndXNhXCA7CivnibnlvoXnlJ8gPCB0b2t1dGFpc2VpXCA7CivpoK3liIYgPCBrYXNoaXJhYnVuXCA7CivkuK3nm6TmiKYgPCBjaHV1YmFuc2VuXCA7Civkuovli5nnlKjlk4EgPCBqaW11eW91aGluXCA7CivoiJ7ouI/pnbQgPCBidXRvdWd1dHN1XCA7CivoqIDoqp7lnLDnkIYgPCBnZW5nb2NoaXJpXCA7CivlpKfpmarlr6kgPCBkYWliYWlzaGluXCA7CivnhKHnuIHku48gPCBtdWVuYm90b2tlXCA7CivmlpHniZsgPCBtYWRhcmF1c2hpXCA7Civnt5HoibIgPCByeW9rdXNob2t1XCA7Civoqo3lrproqLwgPCBuaW50ZWlzaG91XCA7Civnvo7ooZPmm7ggPCBiaWp1dHN1c2hvXCA7CivoqIjph4/ms5UgPCBrZWlyeW91aG91XCA7Civljp/mjK/li5UgPCBnZW5zaGluZG91XCA7CivlraboirjkvJogPCBnYWt1Z2Vpa2FpXCA7CivohILogqrlv4MgPCBzaGlib3VzaGluXCA7Civni7jppYLpo6kgPCB0YW51a2l1ZG9uXCA7CivmsLTnlKPluoEgPCBzdWlzYW5jaG91XCA7CivlkIjmhrLnmoQgPCBnb3VrZW50ZWtpXCA7CivkuLvkvZPnmoQgPCBzaHV0YWl0ZWtpXCA7Civniq/nvarooYzngrogPCBoYW56YWlrb3VpXCA7Civml6XmnIggPCBuaWNoaWdldHN1XCA7CivnqoPnm5fni4IgPCBzZXR0b3VreW91XCA7CivlpbPkuIDoiKwgPCBvbicnbmFpcHBhblwgOwor5rG65Yud57eaIDwga2Vzc2hvdXNlblwgOwor5pet5pelIDwga3lva3VqaXRzdVwgOwor6Ly46YCB5qmf6ZaiIDwgeXVzb3VraWthblwgOwor5Y+j5LiK5omLIDwga3VjaGlqb3V6dVwgOwor5bel5aC06ZW3IDwga291am91Y2hvdVwgOwor5peX5LqM5rWBIDwgaGF0YW5pcnl1dVwgOwor6KOc5Yqp6Imm6ImHIDwgaG9qb2thbnRlaVwgOwor5Y2z5L2N5byPIDwgc29rdWlzaGlraVwgOwor5LqU6YeM6Zyn5LitIDwgZ29yaW11Y2h1dVwgOwor5oeQ5p+U562WIDwga2FpanV1c2FrdVwgOwor5LiJ5pel5aSp5LiLIDwgbWlra2F0ZW5rYVwgOwor5bm75oOz5YqHIDwgZ2Vuc291Z2VraVwgOwor5Z+65pys5Y2Y5L2NIDwga2lob250YW4nJ2lcIDsKK+S6i+WLmeWupCA8IGppbXVzaGl0c3VcIDsKK+i2heimj+WJhyA8IGNob3VraXNva3VcIDsKK+aguOWutuaXjyA8IGtha3VrYXpva3VcIDsKK+WkleaciOWknCA8IHl1dWR6dWtleW9cIDsKK+eMtuS6iOacn+mWkyA8IHl1dXlva2lrYW5cIDsKK+Wkp+ihhui7iiA8IGRhaXNodXVzaGFcIDsKK+eEoeexjeiAhSA8IG11c2VraW1vbm9cIDsKK+aXpeeLrOS8iiA8IG5pY2hpZG9rdWlcIDsKK+mao+e1hCA8IHRvbmFyaWd1bWlcIDsKK+aCque/kuaFoyA8IGFrdXNodXVrYW5cIDsKK+ehq+mFuOmKhSA8IHJ5dXVzYW5kb3VcIDsKK+awtOeUo+WtpiA8IHN1aXNhbmdha3VcIDsKK+eDj+mHkSA8IGthcmFzdWdhbmVcIDsKK+W5uOemj+aEnyA8IGtvdWZ1a3VrYW5cIDsKK+izoOWEn+mHkSA8IGJhaXNob3VraW5cIDsKK+iri+iyoOW3peS6iyA8IHVrZW9pa291amlcIDsKK+mavOenkSA8IGhheWFidXNha2FcIDsKK+WFseeUo+WFmiA8IGt5b3VzYW50b3VcIDsKK+eJqeW/gyA8IG1vbm9nb2tvcm9cIDsKK+aXheaelSA8IHRhYmltYWt1cmFcIDsKK+e0hembgCA8IGJlbmlzdXp1bWVcIDsKK+eItuaWuSA8IGNoaWNoaWthdGFcIDsKK+W+jOmAgOaWh+WtlyA8IGtvdXRhaW1vamlcIDsKK+iIueadv+WhgCA8IGZ1bmFpdGFiZWlcIDsKK+WFqOWtpumAoyA8IHplbmdha3VyZW5cIDsKK+ebtOi1sOi3ryA8IGNob2t1c291cm9cIDsKK+eUt+WwiuWls+WNkSA8IGRhbnNvbmpvaGlcIDsKK+awt+ixhuiFkCA8IGtvb3JpZG91ZnVcIDsKK+WFpeWxheiAhSA8IG55dXVreW9zaGFcIDsKK+aXpemZsOiAhSA8IGhpa2FnZW1vbm9cIDsKK+e1tue4gee3miA8IHpldHN1ZW5zZW5cIDsKK+Wkp+aFiOWkp+aCsiA8IGRhaWppZGFpaGlcIDsKK+WhteiKpSA8IGNoaXJpYWt1dGFcIDsKK+WTgeipleS8miA8IGhpbnB5b3VrYWlcIDsKK+awtOeTtuW6pyA8IG1penVnYW1lemFcIDsKK+WQhOWbo+S9kyA8IGtha3VkYW50YWlcIDsKK+adpeadpemAsSA8IHJhaXJhaXNodXVcIDsKK+Wbm+WNgembgCA8IHNoaWp1dWthcmFcIDsKK+WmguS9leanmOW4qyA8IGlrYXNhbWFzaGlcIDsKK+mAmueUqOmWgCA8IHRzdXV5b3Vtb25cIDsKK+eIqualiuaenSA8IHRzdW1heW91amlcIDsKK+aVo+mrquWxiyA8IHNhbnBhdHN1eWFcIDsKK+agoeato+WItyA8IGtvdXNlaXp1cmlcIDsKK+m7kuecvOmPoSA8IGt1cm9tZWdhbmVcIDsKK+iHqOeVjOS6i+aVhSA8IHJpbmthaWppa29cIDsKK+mbqOeHlSA8IGFtYXRzdWJhbWVcIDsKK+WmueWpvyA8IGltb3V0b211a29cIDsKK+mAoOiIuealrSA8IHpvdXNlbmd5b3VcIDsKK+ims+WKh+S8miA8IGthbmdla2lrYWlcIDsKK+mbqueFmSA8IHl1a2lrZW11cmlcIDsKK+WFrOWus+eXhSA8IGtvdWdhaWJ5b3VcIDsKK+WPl+S/oeWBtCA8IGp1c2hpbmdhd2FcIDsKK+S8gealreW/gyA8IGtpZ3lvdXNoaW5cIDsKK+WboOaenOmWouS/giA8IGluZ2FrYW5rZWlcIDsKK+S/rue5leW3pSA8IHNodXV6ZW5rb3VcIDsKK+WNmOi6q+mKgyA8IHRhbnNoaW5qdXVcIDsKK+inkuibmSA8IHRzdW5vZ2FlcnVcIDsKK+eVsOeoruS6pOmFjSA8IGlzaHVrb3VoYWlcIDsKK+WknOmWk+WLpOWLmSA8IHlha2Fua2lubXVcIDsKK+eZvuW5tOebriA8IGh5YWt1bmVubWVcIDsKK+ayoeeQhuaDsyA8IGJvdHN1cmlzb3VcIDsKK+mdmeiEiOeCjiA8IGpvdW15YWt1ZW5cIDsKK+W+oeWbveiHquaFoiA8IG9rdW5pamltYW5cIDsKK+WFqOiDveiAhSA8IHplbicnbm91c2hhXCA7CivlkYnmnI3llYYgPCBnb2Z1a3VzaG91XCA7CivnnIHos4fmupAgPCBzaG91c2hpZ2VuXCA7Civpm4blkIjoq5YgPCBzaHV1Z291cm9uXCA7CivnpoHnhZnluK0gPCBraW4nJ2Vuc2VraVwgOwor5aSx5qWtIDwgc2hpdHN1Z3lvdVwgOwor6Kit56uLIDwgc2V0c3VyaXRzdVwgOwor6ZW35pa55L2TIDwgY2hvdWhvdXRhaVwgOwor5Y+X5L+h5Lq6IDwganVzaGluJyduaW5cIDsKK+aApeWBnOi7iiA8IGt5dXV0ZWlzaGFcIDsKK+mbkeeJqSA8IHphdHN1YnV0c3VcIDsKK+elnue1jOenkeWMuyA8IHNoaW5rZWlrYWlcIDsKK+eznuW6puiDuCA8IGt1c29kb2t5b3VcIDsKK+a2iOmYsuWjqyA8IHNob3Vib3VzaGlcIDsKK+acieeQhuW8jyA8IHl1dXJpc2hpa2lcIDsKK+e1guWIl+i7iiA8IHNodXVyZXNzaGFcIDsKK+aJgOacieagvCA8IHNob3l1dWtha3VcIDsKK+efpeimmuefpSA8IGNoaWtha3VjaGlcIDsKK+mBiuaSg+aJiyA8IHl1dWdla2lzaHVcIDsKK+ino+eGseWJpCA8IGdlbmV0c3V6YWlcIDsKK+W6l+Wxi+eJqSA8IHRlbicneWFtb25vXCA7CivnhrHng4ggPCBuZXRzdXJldHN1XCA7CivpgYrmkoPmiKYgPCB5dXVnZWtpc2VuXCA7CivlsbHmsLTplqMgPCBzYW5zdWlrYWt1XCA7CivoqqzmlZnluKsgPCBzZWtreW91c2hpXCA7Civls7bluJ3lm70gPCB0b3V0ZWlrb2t1XCA7CivljZHliqPmvKIgPCBoaXJldHN1a2FuXCA7Civpmo/npZ4gPCBrYW4nJ25hZ2FyYVwgOwor6KO46bqmIDwgaGFkYWthbXVnaVwgOwor5YWo55Sf5ravIDwgemVuc2hvdWdhaVwgOwor5YWo5Lya6KGGIDwgemVua2Fpc2h1dVwgOwor5Y+O5a656ICFIDwgc2h1dXlvdXNoYVwgOwor6Kej6ZuG5ZCIIDwga2Fpc2h1dWdvdVwgOwor55u45a++55qEIDwgc291dGFpdGVraVwgOwor55+z54Gw5LmzIDwgc2Vra2Fpbnl1dVwgOwor5YWx5pyJ6ICFIDwga3lvdXl1dXNoYVwgOwor5oyH5a6a5bitIDwgc2hpdGVpc2VraVwgOwor5ZWG5ZOB5ZCNIDwgc2hvdWhpbm1laVwgOwor5qC55pys55qEIDwga29ucG9udGVraVwgOwor576O6KGT5bGVIDwgYmlqdXRzdXRlblwgOwor57ie5qih5qeYIDwgc2hpbWFtb3lvdVwgOwor5raI6Ziy5ZujIDwgc2hvdWJvdWRhblwgOwor5Lm+6JGh6JCEIDwgaG9zaGlidWRvdVwgOwor6Zyc5pyIIDwgc2hpbW90c3VraVwgOwor57695qC56LuKIDwgaGFuZWd1cnVtYVwgOwor5a6M5YWo6Kmm5ZCIIDwga2FuemVuamlhaVwgOwor55m65YuV5qmfIDwgaGF0c3Vkb3VraVwgOwor6ZeY54mb5aOrIDwgdG91Z3l1dXNoaVwgOwor5ZCM5oOF56WoIDwgZG91am91aHlvdVwgOwor5YWl5Lya6YeRIDwgbnl1dWthaWtpblwgOwor54ax56Gs5YyWIDwgbmV0c3Vrb3VrYVwgOwor5aSi5p6VIDwgeXVtZW1ha3VyYVwgOwor5peF5b+DIDwgdGFiaWdva29yb1wgOwor6ZeY54mb5aC0IDwgdG91Z3l1dWpvdVwgOwor5Y+N5a++56WoIDwgaGFudGFpaHlvdVwgOwor54qs5L6NIDwgaW51emFtdXJhaVwgOwor5Ya35Y205ZmoIDwgcmVpa3lha3VraVwgOwor5YCf5YWl6YeRIDwga2FyaWlyZWtpblwgOwor5ZWG5ZOB5Yi4IDwgc2hvdWhpbmtlblwgOwor5YWs56S65Zyw5L6hIDwga291amljaGlrYVwgOwor5q2T5qW96KGXIDwga2FucmFrdWdhaVwgOwor56CU5YmK55ukIDwga2Vuc2FrdWJhblwgOwor5LiA5a2X5LiA5Y+lIDwgaWNoaWppaWtrdVwgOwor6K2Y5YilIDwgc2hpa2liZXRzdVwgOwor5Y6f55CG5Li7576pIDwgZ2VucmlzaHVnaVwgOwor5pys57GN5ZywIDwgaG9uc2VraWNoaVwgOwor5rCX5qyd55eHIDwga2l1dHN1c2hvdVwgOwor5oGL5aWz5oi/IDwga29pbnlvdWJvdVwgOwor6ISz56We57WMIDwgbm91c2hpbmtlaVwgOwor6Iag5Y6f55eFIDwga291Z2VuYnlvdVwgOwor54m95Yi255CDIDwga2Vuc2Vpa3l1dVwgOwor5paw6YCg6Ii5IDwgc2hpbnpvdXNlblwgOwor5oSf6Kaa54K5IDwga2Fua2FrdXRlblwgOwor5YG95ZCb5a2QIDwgbmlzZWt1bnNoaVwgOwor5rG65Yud54K5IDwga2Vzc2hvdXRlblwgOwor5aSa5pWw5rG6IDwgdGFzdXVrZXRzdVwgOwor5oSP6K2Y55qEIDwgaXNoaWtpdGVraVwgOwor5Y+N5bCE55qEIDwgaGFuc2hhdGVraVwgOwor5LiN5rS755m6IDwgZnVrYXBwYXRzdVwgOwor5Y+X6aCY6Ki8IDwganVyeW91c2hvdVwgOwor57SU5paH5a2mIDwganVuYnVuZ2FrdVwgOwor54m55oCl5Yi4IDwgdG9ra3l1dWtlblwgOwor5aa+5Ye6IDwgc2hvdXNodXRzdVwgOwor6buE6YeR6KGTIDwgb3Vnb25qdXRzdVwgOwor5Luu5YuY5a6aIDwga2FyaWthbmpvdVwgOwor57eR546JIDwgcnlva3VneW9rdVwgOwor54OP6JuHIDwga2FyYXN1aGViaVwgOwor6ZyK6ZW36aGeIDwgcmVpY2hvdXJ1aVwgOwor5YWo6Lqr5YOPIDwgemVuc2hpbnpvdVwgOwor5a+G6Ly45ZOBIDwgbWl0c3V5dWhpblwgOwor5pei6Kit57eaIDwga2lzZXRzdXNlblwgOwor5LqM6YCj5byPIDwgbmlyZW5zaGlraVwgOwor56ul6Kmx5L2c5a62IDwgZG91d2FzYWtrYVwgOwor5rib6YCf5p2QIDwgZ2Vuc29rdXphaVwgOwor5YWJ56OB5rCXIDwgaGlrYXJpamlraVwgOwor6Ki85piO5pu4IDwgc2hvdW1laXNob1wgOwor6ZaL5ouT5ZywIDwga2FpdGFrdWNoaVwgOwor5Luu5YWN6KixIDwga2FyaW1lbmt5b1wgOwor54m55Ye6IDwgdG9rdXNodXRzdVwgOwor57SZ6KKLIDwga2FtaWJ1a3Vyb1wgOwor5Y2w6LGh55qEIDwgaW5zaG91dGVraVwgOwor5pen5pWZ5b6SIDwga3l1dWt5b3V0b1wgOwor6LKo54mp5L6/IDwga2Ftb3RzdWJpblwgOwor5aao5a6z6KGM54K6IDwgYm91Z2Fpa291aVwgOwor6Zuq5p+zIDwgeXVraXlhbmFnaVwgOwor5pyJ5pyb5qCqIDwgeXV1Ym91a2FidVwgOwor5oWj5L6L55qEIDwga2FucmVpdGVraVwgOwor6Kaz55u45a2mIDwga2Fuc291Z2FrdVwgOwor6IKJ55So56iuIDwgbmlrdXlvdXNodVwgOwor6YGL5Za257WM6LK7IDwgdW4nJ2Vpa2VpaGlcIDsKK+aYpeS8kSA8IGhhcnV5YXN1bWlcIDsKK+WfuuWcsOWxgCA8IGtpY2hpa3lva3VcIDsKK+mBqeW/nOeXhyA8IHRla2lvdXNob3VcIDsKK+S4remrmOeUnyA8IGNodXVrb3VzZWlcIDsKK+S4i+a6luWCmSA8IHNoaXRhanVuYmlcIDsKK+S/oemgvOaEnyA8IHNoaW5yYWlrYW5cIDsKK+eZuumFteS5syA8IGhha2tvdW55dXVcIDsKK+aXheiKuOS6uiA8IHRhYmlnZWluaW5cIDsKK+S6uumbquW0qSA8IGhpdG9uYWRhcmVcIDsKK+S4u+S/oeWPtyA8IHNodXNoaW5nb3VcIDsKK+S6jOmDqOWQiOWljyA8IG5pYnVnYXNzb3VcIDsKK+S/oeWlieiAhSA8IHNoaW5wb3VzaGFcIDsKK+WQjeiqieavgOaQjSA8IG1laXlva2lzb25cIDsKK+Wwuuiyq+azlSA8IHNoYWtrYW5ob3VcIDsKK+e+juihk+WTgSA8IGJpanV0c3VoaW5cIDsKK+iomOmMsuaYoOeUuyA8IGtpcm9rdWVpZ2FcIDsKK+mAmuS/oeiyuyA8IHRzdXVzaGluaGlcIDsKK+S/oemgvOaApyA8IHNoaW5yYWlzZWlcIDsKK+aEn+immuavmyA8IGthbmtha3Vtb3VcIDsKK+mghuW/nOaApyA8IGp1bicnbm91c2VpXCA7CivluLjnv5LogIUgPCBqb3VzaHV1c2hhXCA7Civnvo7ooZPlj7IgPCBiaWp1dHN1c2hpXCA7CivmqoDpgqPlr7ogPCBkYW4nJ25hZGVyYVwgOwor5Y2D5q2z6aO0IDwgY2hpdG9zZWFtZVwgOwor6KO95p2Q5qWtIDwgc2VpemFpZ3lvdVwgOwor5paw5qmf6Lu4IDwgc2hpbmtpamlrdVwgOwor6IKJ6aWF6aCtIDwgbmlrdW1hbmp1dVwgOwor5rC06LOH5rqQIDwgbWl6dXNoaWdlblwgOwor55m96bOl5bqnIDwgaGFrdWNob3V6YVwgOwor55m+5YiG5q+UIDwgaHlha3VidW5oaVwgOwor6Kmm6YeR55+zIDwgc2hpa2luc2VraVwgOwor6YGL5pCs566h55CGIDwgdW5wYW5rYW5yaVwgOwor5YSq562J6LOeIDwgeXV1dG91c2hvdVwgOwor5Yy756eR5aSn5a2mIDwgaWthZGFpZ2FrdVwgOwor5aSn6KGG57SZIDwgdGFpc2h1dXNoaVwgOwor6Iqx6KaL5pmCIDwgaGFuYW1pZG9raVwgOwor5Yqg5rib5LmX6ZmkIDwga2FnZW5qb3Vqb1wgOwor5aGX5pOm5YmkIDwgdG9zYXRzdXphaVwgOwor6Zi/54mH5oim5LqJIDwgYWhlbnNlbnNvdVwgOwor5pyo6KO95ZOBIDwgbW9rdXNlaWhpblwgOwor5YaF6KeS55CDIDwgbmFpa2Fra3l1dVwgOwor6aWS6IiM5a62IDwgam91emV0c3VrYVwgOwor54ax5Yem55CGIDwgbmV0c3VzaG9yaVwgOwor6Kem55m6IDwgc2hva3VoYXRzdVwgOwor5paw5bm557eaIDwgc2hpbmthbnNlblwgOwor5YuV5ZCR6KGoIDwgZG91a291aHlvdVwgOwor5Lqk6Z+/6KmpIDwga291a3lvdXNoaVwgOwor5oyo5ou254q2IDwgYWlzYXRzdWpvdVwgOwor6Zml5rKh5rmWIDwga2FuYm90c3Vrb1wgOwor5ZSv5ZSv6Ku+6Ku+IDwgaWlkYWt1ZGFrdVwgOwor5L+h5aSp57+BIDwgc2hpbnRlbicnb3VcIDsKK+i1t+mbu+WKmyA8IGtpZGVucnlva3VcIDsKK+mOrumtguelrSA8IGNoaW5rb25zYWlcIDsKK+iItuadpeWTgSA8IGhha3VyYWloaW5cIDsKK+aJi+WhqeeavyA8IHRlc2hpb3phcmFcIDsKK+m7kuW6lee/syA8IGt1cm9zb2tvaGlcIDsKK+WtpueUn+W4vSA8IGdha3VzZWlib3VcIDsKK+e2meeItiA8IG1hbWFjaGljaGlcIDsKK+awtOagveWfuSA8IG1penVzYWliYWlcIDsKK+WWtumAoOeJqSA8IGVpem91YnV0c3VcIDsKK+aXpeeFp+aoqSA8IG5pc3Nob3VrZW5cIDsKK+ebuOWvvuiqpOW3riA8IHNvdXRhaWdvc2FcIDsKK+WFiemHj+WtkCA8IGtvdXJ5b3VzaGlcIDsKK+S4h+aEmuevgCA8IGJhbmd1c2V0c3VcIDsKK+iDveeLguiogCA8IG5vdWt5b3VnZW5cIDsKK+mjsumFkumBi+i7oiA8IGluc2h1dW50ZW5cIDsKK+eDj+e0mSA8IGthcmFzdWdhbWlcIDsKK+aUr+aMgeWKmyA8IHNoaWppcnlva3VcIDsKK+e1seioiOihqCA8IHRvdWtlaWh5b3VcIDsKK+WFiOWPsuWtpiA8IHNlbnNoaWdha3VcIDsKK+aMh+WQjeippuWQiCA8IHNoaW1laWppYWlcIDsKK+aXpeS7jyA8IG5pY2hpZnV0c3VcIDsKK+ehq+mFuOe0mSA8IHJ5dXVzYW5zaGlcIDsKK+aAp+W3ruWIpSA8IHNlaXNhYmV0c3VcIDsKK+mdtOS4iyA8IGt1dHN1c2hpdGFcIDsKK+acrOWbveS6uiA8IGhvbmdva3VqaW5cIDsKK+W3qOimlueahCA8IGt5b3NoaXRla2lcIDsKK+i7oui9jeapnyA8IHRlbnRldHN1a2lcIDsKK+ihqOW/oOeikSA8IGh5b3VjaHV1aGlcIDsKK+WPjuizhOe9qiA8IHNodXV3YWl6YWlcIDsKK+iWrOWJpOW4qyA8IHlha3V6YWlzaGlcIDsKK+W+jOimi+S6uiA8IGtvdWtlbicnbmluXCA7CivpgKPnlKjlvaIgPCByZW4nJ3lvdWtlaVwgOwor5L2Z55m95rOoIDwgeW9oYWt1Y2h1dVwgOwor5Lyd57Wx55qEIDwgZGVudG91dGVraVwgOwor57iu5bC6IDwgc2h1a3VzaGFrdVwgOwor5b6S5byf5Yi25bqmIDwgdG90ZWlzZWlkb1wgOwor6Kaq5qip6ICFIDwgc2hpbmtlbnNoYVwgOwor57SL57695LqM6YeNIDwgbW9uaGFidXRhZVwgOwor5YaG5aSp5LqVIDwgbWFydXRlbmpvdVwgOwor5aWz5Li7IDwgb24nJ25hYXJ1amlcIDsKK+WwkeW5tOmZoiA8IHNob3VuZW4nJ2luXCA7CivmrbTpnZLngq0gPCByZWtpc2VpdGFuXCA7CivosqjluaPliLbluqYgPCBrYWhlaXNlaWRvXCA7CivooI/lt6XoiLkgPCBrYW5pa291c2VuXCA7Civnm67lhavliIYgPCBtZWhhY2hpYnVuXCA7Civlm5vljYHogqkgPCBzaGlqdXVrYXRhXCA7Civmpb3oprPnmoQgPCByYWtrYW50ZWtpXCA7Civlv4PlgZzmraIgPCBzaGludGVpc2hpXCA7CivpgJ/lsITnoLIgPCBzb2t1c2hhaG91XCA7CivmlbXlpLEgPCB0ZWtpc2hpdHN1XCA7Civml6XlkozkuIvpp4QgPCBoaXlvcmlnZXRhXCA7CivmlrDlu7rmnZAgPCBzaGlua2VuemFpXCA7CivkuI3lv4XopoEgPCBmdWhpdHN1eW91XCA7CivmiYHpnZLnn7MgPCBoZW5zZWlzZWtpXCA7Civlj4znkIPoj4wgPCBzb3VreXV1a2luXCA7CivkuJbnlYzlubPlkowgPCBzZWthaWhlaXdhXCA7CivmsLTnvornvq4gPCBtaXp1eW91a2FuXCA7CivmipzmnKznmoQgPCBiYXBwb250ZWtpXCA7CivmlZnlrqQgPCBreW91c2hpdHN1XCA7CivljZjnmbrmqZ8gPCB0YW5wYXRzdWtpXCA7CivnhKHnkIbplqLmlbAgPCBtdXJpa2Fuc3V1XCA7Civou6LpgIHlhYggPCB0ZW5zb3VzYWtpXCA7CivlhaXkvJrogIUgPCBueXV1a2Fpc2hhXCA7CivkuLjmnKjoiLkgPCBtYXJ1a2lidW5lXCA7Civpn7PlkJDmnJfmnJcgPCBvbnRvcm91cm91XCA7CivluIzph4jmtrIgPCBraXNoYWt1ZWtpXCA7CivmooXpm6jliY3nt5ogPCBiYWl1emVuc2VuXCA7CivmnIjmm5zml6UgPCBnZXRzdXlvdWJpXCA7CivmnIDos4Pms5UgPCBzYWljaGluaG91XCA7Civpm7vmsJfmmYLoqIggPCBkZW5raWRva2VpXCA7CivpnanmlrDmtL4gPCBrYWt1c2hpbmhhXCA7Civntbbmu4UgPCB6ZXRzdW1ldHN1XCA7CivkuozljYHlm5vml6UgPCBuaWp1dXlva2thXCA7CivmiKbnl4XmrbsgPCBzZW5ieW91c2hpXCA7CivnlLfmgKfnmoQgPCBkYW5zZWl0ZWtpXCA7CivkubPphbjoj4wgPCBueXV1c2Fua2luXCA7CivliY3nhafnga8gPCB6ZW5zaG91dG91XCA7CivmgrLmrYzmhbfmhaggPCBoaWtha291Z2FpXCA7Civohbjmjbvou6IgPCBjaG91bmVudGVuXCA7CivopqrliIbmoKogPCBveWFidW5rYWJ1XCA7CivlrabnlKjlk4EgPCBnYWt1eW91aGluXCA7CivnibnmrormgKcgPCB0b2t1c2h1c2VpXCA7CivljZjoibLnlLsgPCB0YW5zaG9rdWdhXCA7Civku5Xnq4vliLggPCBzaGl0YXRla2VuXCA7CivkuojpmLLljLvlraYgPCB5b2JvdWlnYWt1XCA7CivlvZPmnJ/liKnnm4ogPCB0b3VraXJpZWtpXCA7CivopoHnn7MgPCBrYW5hbWVpc2hpXCA7Civnmq7kuIvohILogqogPCBoaWthc2hpYm91XCA7CivpmbDlvIHmhbYgPCBrYWdlYmVua2VpXCA7Civmt7fooYDlhZAgPCBrb25rZXRzdWppXCA7Civosqnlo7LlhYMgPCBoYW5iYWltb3RvXCA7CivluLjnv5Lniq8gPCBqb3VzaHV1aGFuXCA7Civpmbbno4HlmajlupcgPCB0b3VqaWtpdGVuXCA7CivmuIXmtrzliaQgPCBzZWlyeW91emFpXCA7CivmnIDlsI/lgKQgPCBzYWlzaG91Y2hpXCA7CivliIfnrKblo7LloLQgPCBraXBwdXVyaWJhXCA7Civoo7jkvZPkuLvnvqkgPCByYXRhaXNodWdpXCA7CivmsLTml4/ppKggPCBzdWl6b2t1a2FuXCA7CivlhbHniq/ogIUgPCBreW91aGFuc2hhXCA7Civlr7/lj7jpo68gPCBzdXNoaW1lc2hpXCA7CivmgKXou6Lmj5sgPCBreXV1dGVua2FuXCA7Civmi5vlvoXnirYgPCBzaG91dGFpam91XCA7CivmiZPmkrLlgrcgPCBkYWJva3VzaG91XCA7Civpn7PmqJnmloflrZcgPCBvbnB5b3Vtb2ppXCA7CivnibnlvoXliLggPCB0b2t1dGFpa2VuXCA7Civmr5Lkurrlj4IgPCBkb2t1bmluamluXCA7CivkuI3mraPopo/miKYgPCBmdXNlaWtpc2VuXCA7CivlpKnnq7rokbUgPCB0ZW5qaWt1YW9pXCA7CivlpbPkuJbluK8gPCBvbicnbmFqb3RhaVwgOwor5Lq66ZaT55qEIDwgbmluZ2VudGVraVwgOwor6Ki65pat5pu4IDwgc2hpbmRhbnNob1wgOwor6Jia6IuU5a2mIDwgc2VudGFpZ2FrdVwgOwor57W25a++5L2N572uIDwgemV0dGFpaWNoaVwgOwor5Y6f56i/5paZIDwgZ2Vua291cnlvdVwgOwor55uj552j5a6YIDwga2FudG9rdWthblwgOwor5ZWG5YuZ55yBIDwgc2hvdW11c2hvdVwgOwor5a6j5ZGK5pu4IDwgc2Vua29rdXNob1wgOwor5aSc5aSc5LitIDwgeW9ydXlvbmFrYVwgOwor6KOP6KmxIDwgdXJhYmFuYXNoaVwgOwor6YCa5L+h57C/IDwgdHN1dXNoaW5ib1wgOwor5aCG56mN5bKpIDwgdGFpc2VraWdhblwgOwor5oqR55WZ5omAIDwgeW9rdXJ5dXVqb1wgOwor5pKe5pyo5p2WIDwgc2h1bW9rdXp1ZVwgOwor6buE6YeR546HIDwgb3Vnb25yaXRzdVwgOwor5aCG56mN5bGkIDwgdGFpc2VraXNvdVwgOwor5ZCI5ZSx5ZujIDwgZ2Fzc2hvdWRhblwgOwor5aW95pW15omLIDwga291dGVraXNodVwgOwor57Ch5piT5L+d6Zm6IDwga2FuJydpaG9rZW5cIDsKK+eyieiWrCA8IGtvbmFndXN1cmlcIDsKK+aWh+eroOmhjCA8IGJ1bnNob3VkYWlcIDsKK+WvoemgreaUv+ayuyA8IGthdG91c2VpamlcIDsKK+mHkeeJqeWxiyA8IGthbmFtb25veWFcIDsKK+Wbo+iPiuelrSA8IGRhbmdpa3VzYWlcIDsKK+e3qeihnea2siA8IGthbnNob3Vla2lcIDsKK+WvhOWuv+iIjiA8IGtpc2h1a3VzaGFcIDsKK+e4ruWItyA8IHNodWt1c2F0c3VcIDsKK+a9nOacm+mPoSA8IHNlbmJvdWt5b3VcIDsKK+aWsOW3pue/vCA8IHNoaW5zYXlva3VcIDsKK+mBoeWPiueahCA8IHNva3l1dXRla2lcIDsKK+WQjOaDheW/gyA8IGRvdWpvdXNoaW5cIDsKK+S4i+eoveWPpCA8IHNoaXRhZ2Vpa29cIDsKK+ertuS6ieiAhSA8IGt5b3Vzb3VzaGFcIDsKK+WVhuW6l+ihlyA8IHNob3V0ZW5nYWlcIDsKK+eOieaJi+eusSA8IHRhbWF0ZWJha29cIDsKK+Wcn+ixmiA8IHRzdWNoaWJ1dGFcIDsKK+S4iuWNiui6qyA8IGpvdWhhbnNoaW5cIDsKK+S4i+awtOWHpueQhiA8IGdlc3Vpc2hvcmlcIDsKK+a4rOWumuazlSA8IHNva3V0ZWlob3VcIDsKK+mZjeWcp+WJpCA8IGtvdWF0c3V6YWlcIDsKK+aApeWCvuaWnCA8IGt5dXVrZWlzaGFcIDsKK+S4oeajsumhniA8IHJ5b3VzZWlydWlcIDsKK+acgOS4iue0miA8IHNhaWpvdWt5dXVcIDsKK+WBg+aciOWIgCA8IGVuZ2V0c3V0b3VcIDsKK+eci+itt+WNkiA8IGthbmdvc290c3VcIDsKK+iomOaGtue0oOWtkCA8IGtpb2t1c29zaGlcIDsKK+mfs+WjsOiomOWPtyA8IG9uc2Vpa2lnb3VcIDsKK+WSjOW5s+S8muitsCA8IHdhaGVpa2FpZ2lcIDsKK+e9q+e3muihqCA8IGtlaXNlbmh5b3VcIDsKK+egtOWjiuS4u+e+qSA8IGhha2Fpc2h1Z2lcIDsKK+mHneWcn+ernCA8IGhhcmltb2d1cmFcIDsKK+Wuh+WumeWfuuWcsCA8IHVjaHV1a2ljaGlcIDsKK+eBr+WPsOWuiCA8IHRvdWRhaW1vcmlcIDsKK+S7ruWFjeeKtiA8IGthcmltZW5qb3VcIDsKK+W8vuiWrOW6qyA8IGRhbicneWFrdWtvXCA7CivlkIjms5XnmoQgPCBnb3Vob3V0ZWtpXCA7CivkuI3lj6/nn6Xoq5YgPCBmdWthY2hpcm9uXCA7Civoh6rooZvmiYvmrrUgPCBqaWVpc2h1ZGFuXCA7CivmjKvmipjmhJ8gPCB6YXNldHN1a2FuXCA7CivlsI/lo7LlgKTmrrUgPCBrb3VyaW5lZGFuXCA7CivmlZHlh7ogPCBreXV1c2h1dHN1XCA7Civlo4HlnJ8gPCBrYWJldHN1Y2hpXCA7CivotaTmlrDogZ4gPCBha2FzaGluYnVuXCA7CivohqDnnYDoqp4gPCBrb3VjaGFrdWdvXCA7CivntYLmraLlvaIgPCBzaHV1c2hpa2VpXCA7Civlh7rmuK/oiLkgPCBzaHVra291c2VuXCA7CivovLjlhaXpoY0gPCB5dW55dXVnYWt1XCA7CivnlLLmrrvpoZ4gPCBrb3VrYWt1cnVpXCA7CivluILloLTopo/mqKEgPCBzaGlqb3VraWJvXCA7CivorbDlk6Hnq4vms5UgPCBnaWlucmlwcG91XCA7Civpmpzlo4HnlLsgPCBzaG91aGVraWdhXCA7CivmurbmjqXmqZ8gPCB5b3VzZXRzdWtpXCA7CivkuZfntYTlk6EgPCBub3Jpa3VtaWluXCA7CivohY7oh5Pnl4UgPCBqaW56b3VieW91XCA7Civlj6/mkKzlvI8gPCBrYWhhbnNoaWtpXCA7CivlgaXnrYblrrYgPCBrZW5waXRzdWthXCA7CivmraPkuK3nt5ogPCBzZWljaHV1c2VuXCA7CivljYPlubTplpMgPCBzZW4nJ25lbmthblwgOwor5qOS56OB55+zIDwgYm91amlzaGFrdVwgOwor6Kaz6LOe6a2aIDwga2Fuc2hvdWd5b1wgOwor56We5a2m5qChIDwgc2hpbmdha2tvdVwgOwor5L2c5qWt5pyNIDwgc2FneW91ZnVrdVwgOwor55m6552A5omAIDwgaGF0Y2hha3Vqb1wgOwor6Kaq6L+R5oSfIDwgc2hpbmtpbmthblwgOwor5Lmx5rOl5rWBIDwgcmFuZGVpcnl1dVwgOwor5b2T55u05ZOhIDwgdG91Y2hva3VpblwgOwor5a2m57Sa5aeU5ZOhIDwgZ2Fra3l1dWlpblwgOwor57Wx6KiI55qEIDwgdG91a2VpdGVraVwgOwor57WQ5pyrIDwga2V0c3VtYXRzdVwgOwor6Iq46KGT5a62IDwgZ2VpanV0c3VrYVwgOwor546E6Zai5YWIIDwgZ2Vua2Fuc2FraVwgOwor6Kaq5p+xIDwgb3lhYmFzaGlyYVwgOwor5rex5rW36a2aIDwgc2hpbmthaWd5b1wgOwor5ZCM5b+X55qEIDwgZG91c2hpdGVraVwgOwor57Kb57KbIDwgc2h1a3VzaHVrdVwgOwor5L6h5Y2D6YeRIDwgYXRhaXNlbmtpblwgOwor6K2w5Lya5Li7576pIDwgZ2lrYWlzaHVnaVwgOwor5Lmd5Zue5oimIDwga3l1dWthaXNlblwgOwor5Z+656SO56eR5a2mIDwga2lzb2thZ2FrdVwgOwor5Zu96KibIDwga3VuaW5hbWFyaVwgOwor5o2c5p+75pys6YOoIDwgc291c2Fob25idVwgOwor5Y2K5rC45LmFIDwgaGFuJydlaWt5dXVcIDsKK+mbkeW9ueWppiA8IHphdHN1ZWtpZnVcIDsKK+WGt+WHjealrSA8IHJlaXRvdWd5b3VcIDsKK+e2v+WfgyA8IHdhdGFib2tvcmlcIDsKK+Wuh+WumeaOouafuyA8IHVjaHV1dGFuc2FcIDsKK+WEkuaVmeeahCA8IGp1a3lvdXRla2lcIDsKK+imquaXpSA8IHNoaW4nJ25pY2hpXCA7CivphZsgPCBzYWtlbm9tb3RvXCA7Civmj5rpmbjoiaYgPCB5b3VyaWt1a2FuXCA7Civph43orLnmhY4gPCBqdXVraW5zaGluXCA7Civlh43osYbohZAgPCBzaGltaWRvdWZ1XCA7CivmsLjosLflnJIgPCBuYWdhdGFuaWVuXCA7Civkuozmp73lvI8gPCBuaXNvdXNoaWtpXCA7Civnm7jkuZfnqY0gPCBzb3Vqb3VzZWtpXCA7Civoj4zpoZ7lraYgPCBraW5ydWlnYWt1XCA7CivmlrDliIrmm7ggPCBzaGlua2Fuc2hvXCA7CivpnZLlsJHlubQgPCBzZWlzaG91bmVuXCA7CivmjqjpgLLogIUgPCBzdWlzaGluc2hhXCA7CivngbznhrEgPCBzaGFrdW5ldHN1XCA7CivliJfluK3ogIUgPCByZXNzZWtpc2hhXCA7Civlm73nlKPlk4EgPCBrb2t1c2FuaGluXCA7Civmh5Dml6foq4cgPCBrYWlreXV1ZGFuXCA7Civmnq/ojYnnhrEgPCBrb3NvdW5ldHN1XCA7Civpm4fkuLsgPCB5YXRvaW51c2hpXCA7CivkuK3nlLLmnb8gPCBjaHV1a2FucGFuXCA7Civln4vkvI/mra8gPCBtYWlmdWt1c2hpXCA7CivlhoXnt5LkuosgPCBuYWlzaG9nb3RvXCA7CivkuIDnrYnljZIgPCBpdHRvdXNvdHN1XCA7CivkupzpurvnuZTniakgPCBhbWFvcmltb25vXCA7CivnpZ7ku6PmnYkgPCBqaW5kYWlzdWdpXCA7CivlgKTltanmoKogPCBuZWdhc2FrYWJ1XCA7CivmlL/msrvlipsgPCBzZWlqaXJ5b2t1XCA7CivnrZTnlLPmm7ggPCB0b3VzaGluc2hvXCA7CivpoIbluo/kuI3lkIwgPCBqdW5qb2Z1ZG91XCA7CivntpnlqJggPCBtYW1hbXVzdW1lXCA7CivkubHlv4PogIUgPCByYW5zaGluc2hhXCA7CivntYzmuIjmj7TliqkgPCBrZWl6YWllbmpvXCA7CivnhLzlpLEgPCBzaG91c2hpdHN1XCA7CivkurrplpPmpa0gPCBuaW5nZW53YXphXCA7CivntK/nrpfmuKnluqYgPCBydWlzYW5vbmRvXCA7CivlhbHorIDogIUgPCBreW91Ym91c2hhXCA7CivmnaXos5PluK0gPCByYWloaW5zZWtpXCA7CivoiJ7ouI/mm7IgPCBidXRvdWt5b2t1XCA7Civkv67ooYzogIUgPCBzaHVneW91c2hhXCA7Civls7bmoLnnnIwgPCBzaGltYW5la2VuXCA7CivlvLfnoazoq5YgPCBreW91a291cm9uXCA7Civms5Xmsrvlm70gPCBob3VjaGlrb2t1XCA7CivkuI3lvpfnrZYgPCBmdXRva3VzYWt1XCA7CivoqLPlh7ogPCB5YWt1c2h1dHN1XCA7Civng4jml6UgPCByZXRzdWppdHN1XCA7CivlnKjnsbPkuK0gPCB6YWliZWljaHV1XCA7CivljL/lkI3mgKcgPCB0b2t1bWVpc2VpXCA7CivnmbvlsbHpnbQgPCB0b3phbmd1dHN1XCA7CivmtarmvKvkuLvnvqkgPCByb21hbnNodWdpXCA7CivluqfmlbfniaIgPCB6YXNoaWtpcm91XCA7CivnpZ7moLzljJYgPCBzaGlua2FrdWthXCA7CivotaTlpJbnt5ogPCBzZWtpZ2Fpc2VuXCA7CivolqznlKjphZIgPCB5YWt1eW91c2h1XCA7CivntZDmoLjoj4wgPCBrZWtrYWt1a2luXCA7Civnt6Dku5ggPCBzaGltZXRzdWtlXCA7CivojYnlsaXomasgPCB6b3VyaW11c2hpXCA7Civmraboo4Xpg73luIIgPCBidXNvdXRvc2hpXCA7CivlpKfooYbmgKcgPCB0YWlzaHV1c2VpXCA7Civlr4Tlrr/nlJ8gPCBraXNodWt1c2VpXCA7CivmmIfmsZ7msLQgPCBzaG91a291c3VpXCA7CivmrabogIXmhYQgPCBtdXNoYWJ1cnVpXCA7Civmlofnq6Doq5YgPCBidW5zaG91cm9uXCA7Civnibnpgbjlk4EgPCB0b2t1c2VuaGluXCA7Civov5HopqrogIUgPCBraW5zaGluc2hhXCA7CivopIfmlbDlvaIgPCBmdWt1c3V1a2VpXCA7Civlub3pgoPlooMgPCB5dXVzdWlreW91XCA7Civlho3mipXnpaggPCBzYWl0b3VoeW91XCA7CivkuI3mtLvli5UgPCBmdWthdHN1ZG91XCA7Civlhajlr67liLYgPCB6ZW5yeW91c2VpXCA7CivlubPlkozlm73lrrYgPCBoZWl3YWtva2thXCA7Civov73mgrzkvJogPCB0c3VpdG91a2FpXCA7CivpgZPot6/lnLDlm7MgPCBkb3Vyb2NoaXp1XCA7CivnrZLps6UgPCB0c3V0c3Vkb3JpXCA7Civnmb3lhbXmiKYgPCBoYWt1aGVpc2VuXCA7Civoq4vmsYLmqKkgPCBzZWlreXV1a2VuXCA7Civlv6DpnIrloZQgPCBjaHV1cmVpdG91XCA7CivpmpnplpPpoqggPCBzdWtpbWFrYXplXCA7CivlhbHmnInlnLAgPCBreW91eXV1Y2hpXCA7CivniYfngrrmm78gPCBrYXRhZ2F3YXNlXCA7Civnt6nooZ3lvIEgPCBrYW5zaG91YmVuXCA7Civlrr/moLnojYkgPCBzaHVra29uc291XCA7CivlpKfnq4vogIUgPCBvb2RhdGVtb25vXCA7Civms7DlsbHmnKggPCB0YWlzYW5ib2t1XCA7Civns7jnirbomasgPCBzaGlqb3VjaHV1XCA7CivntbbnuIHkvZMgPCB6ZXRzdWVudGFpXCA7Civph4zoqIDokYkgPCBzYXRva290b2JhXCA7CivlvqHmnLHljbDoiLkgPCBnb3NodWluc2VuXCA7Civos7zoqq3ogIUgPCBrb3Vkb2t1c2hhXCA7Civlo7Losrfpq5ggPCBiYWliYWlkYWthXCA7CivmjLrpgLLpmoogPCB0ZWlzaGludGFpXCA7CivoqZQgPCBtaWtvdG9ub3JpXCA7CivohLHmsLTnl4cgPCBkYXNzdWlzaG91XCA7Civli6fpgLLluLMgPCBrYW5qaW5jaG91XCA7Civmi6HlvLXljJYgPCBrYWt1Y2hvdWthXCA7CivmrrrkurrprLwgPCBzYXRzdWppbmtpXCA7CivmtYHli5XmgKcgPCByeXV1ZG91c2VpXCA7Civlm5vph43llLEgPCBzaGlqdXVzaG91XCA7CivmlZnogrLogIUgPCBreW91aWt1c2hhXCA7Civlj43lr77lgbQgPCBoYW50YWlnYXdhXCA7CivnkLTkuIDlvLUgPCBrb3RvaXRjaG91XCA7CivlhoXlnKjnmoQgPCBuYWl6YWl0ZWtpXCA7CivkuInmrrXot7MgPCBzYW5kYW50b2JpXCA7Civpo5vouo3nmoQgPCBoaXlha3V0ZWtpXCA7CivmiYvplbfnjL8gPCB0ZW5hZ2F6YXJ1XCA7CivogIHnnLzpj6EgPCByb3VnYW5reW91XCA7Civku67lh6bliIYgPCBrYXJpc2hvYnVuXCA7CivooovogLMgPCBmdWt1cm9taW1pXCA7CivlhajkurrmoLwgPCB6ZW5qaW5rYWt1XCA7CivliIbms4zniakgPCBidW5waWJ1dHN1XCA7Civoq4vmsYLmm7ggPCBzZWlreXV1c2hvXCA7CivntZDlrp8gPCBrZXRzdWppdHN1XCA7CivkuI3msbrmlq0gPCBmdWtldHN1ZGFuXCA7CivlhYjlhYjpgLEgPCBzZW5zZW5zaHV1XCA7Civoh7Tlkb3nmoQgPCBjaGltZWl0ZWtpXCA7CivkubPnn7Poi7EgPCBueXV1c2VraWVpXCA7CivosqHmlL/lraYgPCB6YWlzZWlnYWt1XCA7Civntprlh7ogPCB6b2t1c2h1dHN1XCA7CivlpJzpg47oh6rlpKcgPCB5YXJvdWppZGFpXCA7Civpo7Lpo5/lupcgPCBpbnNob2t1dGVuXCA7Civpg6jliIblkKblrpogPCBidWJ1bmhpdGVpXCA7CivntJnoo73lk4EgPCBrYW1pc2VpaGluXCA7CivonZ8gPCBoYXJpbmV6dW1pXCA7CivorJvlkozkvJrorbAgPCBrb3V3YWthaWdpXCA7Civnt6jntYTmqZ/morAgPCBoZW5zb2tpa2FpXCA7Civms5XlvovmoYggPCBob3VyaXRzdWFuXCA7CivljYrnm7Lnl4cgPCBoYW5tb3VzaG91XCA7CivnoZ3phbjpioAgPCBzaG91c2FuZ2luXCA7CivljLvnmYLlmajmorAgPCBpcnlvdWtpa2FpXCA7CivpmLLnt4/nnIEgPCBib3Vzb3VzaG91XCA7CivmraPopo/liIbluIMgPCBzZWlraWJ1bnB1XCA7CivpgIbmr5TkvosgPCBneWFrdWhpcmVpXCA7CivmipXmm7jnrrEgPCB0b3VzaG9iYWtvXCA7CivkvJrlk6HlkI3nsL8gPCBrYWlpbm1laWJvXCA7Civmv4PntKsgPCBrb211cmFzYWtpXCA7Civln47kuIvnlLogPCBqb3VrYW1hY2hpXCA7CivnibnliKXlp5QgPCB0b2t1YmV0c3VpXCA7CivmnZHoip3lsYUgPCBtdXJhc2hpYmFpXCA7Civntpnmga/lrZAgPCBtYW1hbXVzdWtvXCA7Civnmbrkv6Hpn7MgPCBoYXNzaGluJydvblwgOwor5aSp5aSJ5Zyw55WwIDwgdGVucGVuY2hpaVwgOwor5pyJ5Y+y5Lul5p2lIDwgeXV1c2hpaXJhaVwgOwor5Zub5q2755CDIDwgc2hpc2hpa3l1dVwgOwor54yu6YeR566xIDwga2Vua2luYmFrb1wgOwor5oim55Wl5a62IDwgc2Vucnlha3VrYVwgOwor5YWs6IG05LyaIDwga291Y2hvdWthaVwgOwor5rqd6bygIDwgZG9idW5lenVtaVwgOwor6JCZIDwga3V0YWJpcmVydVwgOwor6KSH5pWw5ZueIDwgZnVrdXN1dWthaVwgOwor5Lya6KiI5a2mIDwga2Fpa2VpZ2FrdVwgOwor57Ch55Wl5YyWIDwga2Fucnlha3VrYVwgOwor57Wm6Zu757eaIDwga3l1dWRlbnNlblwgOwor5ZCJ56Wl5aSpIDwga2lzc2hvdXRlblwgOwor5L+d6K236Zai56iOIDwgaG9nb2thbnplaVwgOwor5pyq5biw6YKE6ICFIDwgbWlraWthbnNoYVwgOwor5b6h5b2x55+zIDwgbWlrYWdlaXNoaVwgOwor5YaF5Zu955SjIDwgbmFpa29rdXNhblwgOwor5LiJ5pel5Z2K5Li7IDwgbWlra2Fib3V6dVwgOwor6Zuq5pyI6IqxIDwgc2V0c3VnZWtrYVwgOwor56eB5pu4566xIDwgc2hpc2hvYmFrb1wgOwor55u05pig6aSoIDwgY2hva3VlaWthblwgOwor55eF55CG5a2mIDwgYnlvdXJpZ2FrdVwgOwor5b6p5Yi754mIIDwgZnVra29rdWJhblwgOwor6YCA5buD55qEIDwgdGFpaGFpdGVraVwgOwor56K65Zu65LiN5YuVIDwga2Fra29mdWRvdVwgOwor5Lq66ZaT5a2mIDwgbmluZ2VuZ2FrdVwgOwor5LiL552A6aGeIDwgc2hpdGFnaXJ1aVwgOwor5ZSQ5aSJ5pyoIDwgdG91aGVuYm9rdVwgOwor57ea5pKu5b2xIDwgc2Vuc2F0c3VlaVwgOwor5paH5oi/5YW35bGLIDwgYnVuYm91Z3V5YVwgOwor5paw55Sf6Z2iIDwgc2hpbnNlaW1lblwgOwor5bq354WV5a2X5YW4IDwga291a2lqaXRlblwgOwor6KGA6ISIIDwga2V0c3VteWFrdVwgOwor5pWw5pel5b6MIDwgc3V1aml0c3Vnb1wgOwor5pyq5p2l5rC45YqrIDwgbWlyYWllaWdvdVwgOwor6LaF5ZCI6YeRIDwgY2hvdWdvdWtpblwgOwor5aSa5Zu957GNIDwgdGFrb2t1c2VraVwgOwor56mN566X5rOVIDwgc2VraXNhbmhvdVwgOwor54Sh55CG566X5q61IDwgbXVyaXNhbmRhblwgOwor5aSW54K65rOVIDwgZ2FpdGFtZWhvdVwgOwor5Ye65ZOB6ICFIDwgc2h1cHBpbnNoYVwgOwor6Kaa6YaS5YmkIDwga2FrdXNlaXphaVwgOwor6auY5bGx6J22IDwga291emFuY2hvdVwgOwor6L+R57iB5bGeIDwga2luJydlbnpva3VcIDsKK+S4iumBlOmDqCA8IGthbmRhY2hpbWVcIDsKK+WPr+mNm+mJhCA8IGthdGFudGV0c3VcIDsKK+W/g+eQhueahCA8IHNoaW5yaXRla2lcIDsKK+S5l+aPm+WIuCA8IG5vcmlrYWVrZW5cIDsKK+aVmeiCsueVjCA8IGt5b3Vpa3VrYWlcIDsKK+mZsOaltee3miA8IGlua3lva3VzZW5cIDsKK+WNiuiJh+i6qyA8IGhhbnRlaXNoaW5cIDsKK+imquWFhOW8nyA8IG95YWt5b3VkYWlcIDsKK+aXhemkqOalrSA8IHJ5b2thbmd5b3VcIDsKK+Wtpuacn+acqyA8IGdha2tpbWF0c3VcIDsKK+iZnue+juS6uuiNiSA8IGd1YmlqaW5zb3VcIDsKK+WIsOadpeeJqSA8IHRvdXJhaW1vbm9cIDsKK+ixoeeJmee0sOW3pSA8IHpvdWdlemFpa3VcIDsKK+ayluS7suS7lSA8IG9raW5ha2FzaGlcIDsKK+WkluWbveijvSA8IGdhaWtva3VzZWlcIDsKK+e1guebpOaIpiA8IHNodXViYW5zZW5cIDsKK+mAhuWFiee3miA8IGd5YWtrb3VzZW5cIDsKK+ixoeW+tOa0viA8IHNob3VjaG91aGFcIDsKK+WLp+mAsuWFgyA8IGthbmppbm1vdG9cIDsKK+mtmumhnuWtpiA8IGd5b3J1aWdha3VcIDsKK+mOjOm8rCA8IGthbWFpdGFjaGlcIDsKK+e4nueRqueRmSA8IHNoaW1hbWVub3VcIDsKK+ecn+epuueuoSA8IHNoaW5rdXVrYW5cIDsKK+iIjuWIqeWIpSA8IHNoYXJpYmV0c3VcIDsKK+S6rOmYquelniA8IGtlaWhhbnNoaW5cIDsKK+aFo+e/kuazlSA8IGthbnNodXVob3VcIDsKK+a7heiMtua7heiMtiA8IG1lY2hhbWVjaGFcIDsKK+mgremZgOiiiyA8IHp1ZGFidWt1cm9cIDsKK+mZsOalteeuoSA8IGlua3lva3VrYW5cIDsKK+a3t+WSjOeJqSA8IGtvbndhYnV0c3VcIDsKK+WIgOmNm+WGtiA8IGthdGFuYWthamlcIDsKK+a9nOS8j+aApyA8IHNlbnB1a3VzZWlcIDsKK+miqOi7iuWwj+WxiyA8IGZ1dXNoYWdveWFcIDsKK+aLm+W+heWIuCA8IHNob3V0YWlrZW5cIDsKK+WtkOS+m+mDqOWxiyA8IGtvZG9tb2JleWFcIDsKK+axguaEm+iqh+ekuiA8IGt5dXVhaWtvamlcIDsKK+WPl+mbo+evgCA8IGp1bmFuc2V0c3VcIDsKK+a4rOWumuWApCA8IHNva3V0ZWljaGlcIDsKK+WMlueyp+e0mSA8IGtlc2hvdWdhbWlcIDsKK+Wkp+aGsueroCA8IGRhaWtlbnNob3VcIDsKK+eOi+aUv+W+qeWPpCA8IG91c2VpZnVra29cIDsKK+WNmOiJsuWFiSA8IHRhbnNob2trb3VcIDsKK+iii+eJqSA8IGZ1a3Vyb21vbm9cIDsKK+eUsuauu+e2sSA8IGtvdWtha3Vrb3VcIDsKK+mbhuWQiOS9kyA8IHNodXVnb3V0YWlcIDsKK+S4gOS6uumDqOWxiyA8IGhpdG9yaWJleWFcIDsKK+eri+W+gOeUnyA8IHRhY2hpb3Vqb3VcIDsKK+erlSA8IGRlc2hpcml0dG9cIDsKK+S4jeiyt+mBi+WLlSA8IGZ1YmFpdW5kb3VcIDsKK+WtkOWurumguCA8IHNoaWt5dXVrZWlcIDsKK+WQneWXh+WQneWXhyA8IGtlY2hpa2VjaGlcIDsKK+e1jOmok+eahCA8IGtlaWtlbnRla2lcIDsKK+WMlueyp+eusSA8IGtlc2hvdWJha29cIDsKK+S6jOeVquaYnyA8IG5pYmFuYm9zaGlcIDsKK+ilv+WPoyA8IG5pc2hpZ3VjaGlcIDsKK+azleW+i+WutiA8IGhvdXJpdHN1a2FcIDsKK+Wumuacn+mgkOmHkSA8IHRlaWtpeW9raW5cIDsKK+S4gOWumuacn+mWkyA8IGl0dGVpa2lrYW5cIDsKK+a0l+a/r+advyA8IHNlbnRha3VpdGFcIDsKK+a7keayouWJpCA8IGthdHRha3V6YWlcIDsKK+WvvuensOaApyA8IHRhaXNob3VzZWlcIDsKK+WwkeW5tOazlSA8IHNob3VuZW5ob3VcIDsKK+W+s+W3neWutiA8IHRva3VnYXdha2VcIDsKK+WcsOS4i+mBi+WLlSA8IGNoaWthdW5kb3VcIDsKK+a1geWLleS9kyA8IHJ5dXVkb3V0YWlcIDsKK+e1guWIiuWPtyA8IHNodXVrYW5nb3VcIDsKK+ebo+S/ruiAhSA8IGthbnNodXVzaGFcIDsKK+WFsee3qOiAhSA8IGt5b3VoZW5zaGFcIDsKK+aHkOeWkeS4u+e+qSA8IGthaWdpc2h1Z2lcIDsKK+iejemAmueEoeeijSA8IHl1dXp1dW11Z2VcIDsKK+S/neWuieimgeWToSA8IGhvYW4nJ3lvdWluXCA7CivntbHoqIjlraYgPCB0b3VrZWlnYWt1XCA7CivovKrpg63nt5ogPCByaW5rYWt1c2VuXCA7Civou43oiabps6UgPCBndW5rYW5kb3JpXCA7CivllYboiLnpmoogPCBzaG91c2VudGFpXCA7CivotoXmuoDlk6EgPCBjaG91bWFuJydpblwgOwor54mH5omL6Y2LIDwga2F0YXRlbmFiZVwgOwor6IKh6Zai56+AIDwga29rYW5zZXRzdVwgOwor56+A56+AIDwgZnVzaGlidXNoaVwgOwor6Kq/5ZGz5paZIDwgY2hvdW1pcnlvdVwgOwor5Y+I5bCP5L2cIDwgbWF0YWtvc2FrdVwgOwor562S6KKWIDwgdHN1dHN1c29kZVwgOwor5LiN5q2j55u0IDwgZnVzaG91amlraVwgOwor5rSq56mN5bGkIDwga291c2VraXNvdVwgOwor5qSc5Zyn5ZmoIDwga2VuJydhdHN1a2lcIDsKK+S4u+aIkeS4u+e+qSA8IHNodWdhc2h1Z2lcIDsKK+afk+eJqeWxiyA8IHNvbWVtb25veWFcIDsKK+mFjeiGs+S6uiA8IGhhaXplbicnbmluXCA7CivlooPnlYznt5ogPCBreW91a2Fpc2VuXCA7CivpnZnniannlLsgPCBzZWlidXRzdWdhXCA7CivmlZnogrLms5UgPCBreW91aWt1aG91XCA7Civlj47pm4bprZQgPCBzaHV1c2h1dW1hXCA7Civpm6LogbfogIUgPCByaXNob2t1c2hhXCA7CivniafluKvppKggPCBib2t1c2hpa2FuXCA7CivljaDpoJjou40gPCBzZW5yeW91Z3VuXCA7Civns7jljbAgPCBpdG9qaXJ1c2hpXCA7CivkuK3nlJ/ku6MgPCBjaHV1c2VpZGFpXCA7CivngrrkurogPCBoaXRvdG9uYXJpXCA7CivkuIvljYrmnJ8gPCBzaGltb2hhbmtpXCA7CivmlZnkvJrms5UgPCBreW91a2FpaG91XCA7Civljp/msLTniIYgPCBnZW5zdWliYWt1XCA7CivnlIUgPCBzZW5jaGlndXJhXCA7Civnk7ggPCBoZWt1dG9ndXJhXCA7Civngq3kv7UgPCBzdW1pZGF3YXJhXCA7Civnk7EgPCBtaXJpZ3VyYW11XCA7Civnk6kgPCBraXJvZ3VyYW11XCA7Civnk6cgPCBkZWthZ3VyYW11XCA7CivliLrnuY3ns7ggPCBzaGlzaHV1aXRvXCA7CivkuI3kvZzngrrniq8gPCBmdXNha3VpaGFuXCA7CivmkK3kuZfmqYsgPCB0b3Vqb3VreW91XCA7Civnn7PpubjnrrEgPCBzZWtrZW5iYWtvXCA7Civlm57ou6Lou7ggPCBrYWl0ZW5qaWt1XCA7CivliLvkuIDliLsgPCBrb2t1aWtrb2t1XCA7CivlibXpgKDnmoQgPCBzb3V6b3V0ZWtpXCA7Civnl7TlkYbnl4cgPCBjaGlob3VzaG91XCA7CivnsbPmiYAgPCBrb21lZG9rb3JvXCA7CivmjpLmsLTph48gPCBoYWlzdWlyeW91XCA7CivlkITmg4XloLEgPCBrYWt1am91aG91XCA7CivoiJfoo4XnhYnnk6YgPCBob3NvdXJlbmdhXCA7CivmipXlvbHlm7Pms5UgPCB0b3VlaXp1aG91XCA7CivmoLjmlofms5UgPCBrYWt1YnVucG91XCA7Civlo7LkuIrpq5ggPCB1cmlhZ2VkYWthXCA7Civmt7HmiJDlsqkgPCBzaGluc2VpZ2FuXCA7Civog7jkuInlr7ggPCBtdW5lc2FuenVuXCA7CivlvpfmhI/lrqIgPCB0b2t1aWt5YWt1XCA7CivlvrTlhbXliLYgPCBjaG91aGVpc2VpXCA7Civnq6/ov5EgPCBoYXNoaWRqaWthXCA7CivpjpbpjowgPCBrdXNhcmlnYW1hXCA7CivmgKfmnKzog70gPCBzZWlob24nJ25vdVwgOwor5ruF6KOCIDwgbWV0c3VyZXRzdVwgOwor5LyR6Ki65pelIDwga3l1dXNoaW5iaVwgOwor5Z+36YeR6Yu8IDwgc2hpa2tvbmdvdVwgOwor57eP54q26Iqx5bqPIDwgc291am91a2Fqb1wgOwor56uc55qu5be7IDwgcnl1dWhpbWFraVwgOwor5Zue5biw54axIDwga2Fpa2luZXRzdVwgOwor56Wd6LOA5LyaIDwgc2h1a3VnYWthaVwgOwor55Sf5rS76LK7IDwgc2Vpa2F0c3VoaVwgOwor5rOV5YuZ5bGAIDwgaG91bXVreW9rdVwgOwor5Lit5a2m5qChIDwgY2h1dWdha2tvdVwgOwor5pyI6KaL6I2JIDwgdHN1a2ltaXNvdVwgOwor5riF5rWE54Sh5Z6iIDwgc2Vpam91bXVrdVwgOwor6YCa5L+X5YyWIDwgdHN1dXpva3VrYVwgOwor55u05Lqk5oCnIDwgY2hva2tvdXNlaVwgOwor56iy54ax55eFIDwgaW1vY2hpYnlvdVwgOwor5LiJ6Z2i6KiY5LqLIDwgc2FubWVua2lqaVwgOwor6auY6LiP55qEIDwga291dG91dGVraVwgOwor57Wm5paZ5pelIDwga3l1dXJ5b3ViaVwgOwor5omN5rCX57im5qiqIDwgc2Fpa2lqdXVvdVwgOwor5LiH5bm06Z2SIDwgbWFuJyduZW5zZWlcIDsKK+Wwj+WJjeaPkCA8IHNob3V6ZW50ZWlcIDsKK+WFreS4ieWItiA8IHJva3VzYW5zZWlcIDsKK+mAoOael+WtpiA8IHpvdXJpbmdha3VcIDsKK+acrOS9jeiyqOW5oyA8IGhvbicnaWthaGVpXCA7Civlhajosqzku7sgPCB6ZW5zZWtpbmluXCA7Civppqzpub/kuIHlr6cgPCBiYWthdGVpbmVpXCA7CivnhafmmI7lvL4gPCBzaG91bWVpZGFuXCA7CivmhJvlm73lv4MgPCBhaWtva3VzaGluXCA7Civmva7nhZkgPCBzaGlva2VtdXJpXCA7Civnn7Ppubjnmr8gPCBzZWtrZW56YXJhXCA7CivkuojlrproqqwgPCB5b3RlaXNldHN1XCA7CivnrYboiIwgPCBoaXRzdXpldHN1XCA7Civml6XokaHovp7mm7ggPCBuaXBwb2ppc2hvXCA7CivohLPnoazloZ4gPCBub3Vrb3Vzb2t1XCA7Civnt4/lpKflsIYgPCBzb3VkYWlzaG91XCA7Civlp4vmnKvlsYsgPCBzaGltYXRzdXlhXCA7Civlm73mnInmnpcgPCBrb2t1eXV1cmluXCA7Civolqzlrabpg6ggPCB5YWt1Z2FrdWJ1XCA7CivmibnliKTlipsgPCBoaWhhbnJ5b2t1XCA7CivnrYnouqvlpKcgPCB0b3VzaGluZGFpXCA7CivkvY3nm7jnqbrplpMgPCBpc291a3V1a2FuXCA7CivmtbfkuovooZvmmJ8gPCBrYWlqaWVpc2VpXCA7CivnqbrmsJfmqZ/morAgPCBrdXVraWtpa2FpXCA7Civnt4/mlLvmkoMgPCBzb3Vrb3VnZWtpXCA7Civpq5jlsbHnl4UgPCBrb3V6YW5ieW91XCA7CivkupTmnIjnpa0gPCBnb2dhdHN1c2FpXCA7CivlhbHlkIzkupXmiLggPCBreW91ZG91aWRvXCA7Civou43mpb3pmoogPCBndW5nYWt1dGFpXCA7CivkuInph43llLEgPCBzYW5qdXVzaG91XCA7CivljZfkuqzosYYgPCBuYW5raW5tYW1lXCA7Civmm7LppqzluKsgPCBreW9rdWJhc2hpXCA7Civlia/lj7jku6QgPCBmdWt1c2hpcmVpXCA7CivpjKbpr4kgPCBuaXNoaWtpZ29pXCA7CivmmLzml6XkuK0gPCBoaXJ1aGluYWthXCA7CivlkIjnkIbkuLvnvqkgPCBnb3VyaXNodWdpXCA7CivluLjorZjlrrYgPCBqb3VzaGlraWthXCA7Civmu5HohLEgPCBrYXRzdWRhdHN1XCA7CivlpKnmtKXlvqHlp4kgPCBhbWF0c3VtaWtvXCA7CivlpKnmiYvlj6ToiJ4gPCB0ZW50ZWtvbWFpXCA7CivoqIDokYnlsLsgPCBrb3RvYmFqaXJpXCA7CivogrrmtbjmvaQgPCBoYWlzaGluanVuXCA7CivlpJzlhYnmmYLoqIggPCB5YWtvdWRva2VpXCA7CivogJXkvZzogIUgPCBrb3VzYWt1c2hhXCA7CivlkIzlv4PlhoYgPCBkb3VzaGluJydlblwgOwor6Ie05q276YePIDwgY2hpc2hpcnlvdVwgOwor5byB6Ki86KuWIDwgYmVuc2hvdXJvblwgOwor5paw55m75aC0IDwgc2hpbnRvdWpvdVwgOwor6Ieq6Lui6LuK5bGLIDwgaml0ZW5zaGF5YVwgOwor5by35Yqb57KJIDwga3lvdXJpa2lrb1wgOwor5LqI5YKZ5a6kIDwgeW9iaXNoaXRzdVwgOwor5bqX6aCt5qCqIDwgdGVudG91a2FidVwgOwor55m65bCE6JasIDwgaGFzc2hheWFrdVwgOwor6Ieq5a6255So6LuKIDwgamlrYXlvdXNoYVwgOwor5Y2Y5L2N5Yi25bqmIDwgdGFuJydpc2VpZG9cIDsKK+WMlueyp+awtCA8IGtlc2hvdW1penVcIDsKK+WNgemAsuazlSA8IGppc3NoaW5ob3VcIDsKK+aWh+Wtl+aDheWgsSA8IG1vamlqb3Vob3VcIDsKK+aWh+ethuWutiA8IGJ1bnBpdHN1a2FcIDsKK+W+k+mHj+eojiA8IGp1dXJ5b3V6ZWlcIDsKK+eTpuWxi+aguSA8IGthd2FyYXlhbmVcIDsKK+mWouS/guiqvyA8IGthbmtlaWNob3VcIDsKK+WUr+W/g+irliA8IHl1aXNoaW5yb25cIDsKK+WKseaMr+euoSA8IHJlaXNoaW5rYW5cIDsKK+WFqOaXpeepuiA8IHplbicnbmlra3V1XCA7CivkuozmnprohbAgPCBuaW1haWdvc2hpXCA7CivmtYHliJHlnLAgPCByeXV1a2VpY2hpXCA7CivmtKrnqY3kuJYgPCBrb3VzZWtpc2VpXCA7CivpnIfngb3lnLAgPCBzaGluc2FpY2hpXCA7CivnrYbnrZIgPCBmdWRlZHp1dHN1XCA7Civopo/liLbop6PpmaQgPCBraXNlaWthaWpvXCA7Civmj4/lh7ogPCBieW91c2h1dHN1XCA7CivnnLzou5/oho8gPCBnYW4nJ25hbmtvdVwgOwor5rC05pm25L2TIDwgc3Vpc2hvdXRhaVwgOwor54K55ruF5ZmoIDwgdGVubWV0c3VraVwgOwor5YWE5byf5YiGIDwga3lvdWRhaWJ1blwgOwor6YeR6ZaA5qmLIDwga2lubW9ua3lvdVwgOwor5pmv5Yud5ZywIDwga2Vpc2hvdWNoaVwgOwor5YaF5o6l5YaGIDwgbmFpc2V0c3VlblwgOwor55Sf5rS76IumIDwgc2Vpa2F0c3VrdVwgOwor5p2x54Wn5a6uIDwgdG91c2hvdWd1dVwgOwor5Y+X6Zuj5puyIDwganVuYW5reW9rdVwgOwor5a++5rWB5ZyPIDwgdGFpcnl1dWtlblwgOwor5LiL5rC05bel5LqLIDwgZ2VzdWlrb3VqaVwgOwor5Y2x6Zm654mpIDwga2lrZW5idXRzdVwgOwor56CU5L+u55SfIDwga2Vuc2h1dXNlaVwgOwor6L+R6Kaq5amaIDwga2luc2hpbmtvblwgOwor5Lqk6Kqt5paHIDwga291ZG9rdWJ1blwgOwor6ISz5Y2S5LitIDwgbm91c290Y2h1dVwgOwor54S85q275L2TIDwgc2hvdXNoaXRhaVwgOwor5LiA56We5pWZIDwgaXNzaGlua3lvdVwgOwor5rS+5Ye65omAIDwgaGFzaHV0c3Vqb1wgOwor5oyv5YuV6KiIIDwgc2hpbmRvdWtlaVwgOwor5bGI5oqY6KqeIDwga3Vzc2V0c3Vnb1wgOwor5puy6aas5ZujIDwga3lva3ViYWRhblwgOwor5rOo5bCE5rayIDwgY2h1dXNoYWVraVwgOwor5ZCI5oSP5oOF5q27IDwgZ291aWpvdXNoaVwgOwor56aP56aE5a+/IDwgZnVrdXJva3VqdVwgOwor57SZ5ZC56ZuqIDwga2FtaWZ1YnVraVwgOwor5Luy5LuL6ICFIDwgY2h1dWthaXNoYVwgOwor6ZuG6YWN5Lq6IDwgc2h1dWhhaW5pblwgOwor5a6a56SO5byPIDwgdGVpc29zaGlraVwgOwor6KOB5Yik6ZW3IDwgc2FpYmFuY2hvdVwgOwor6Zu76Kmx5bGAIDwgZGVud2FreW9rdVwgOwor5L+456W/57GzIDwgaG91cm9rdW1haVwgOwor6Iqx5ZC56ZuqIDwgaGFuYWZ1YnVraVwgOwor5Zyf5aOBIDwgdHN1Y2hpa2FiZVwgOwor5YW157On57GzIDwgaHlvdXJvdW1haVwgOwor6KeS57Sw5belIDwgdHN1bm96YWlrdVwgOwor6Ly46YCB5YqbIDwgeXVzb3VyeW9rdVwgOwor5p6X6YeO5bqBIDwgcmluJyd5YWNob3VcIDsKK+aUr+mFjeeahCA8IHNoaWhhaXRla2lcIDsKK+Wkqum8k+apiyA8IHRhaWtvYmFzaGlcIDsKK+eulOWKm+eyiSA8IGhha3VyaWtpa29cIDsKK+eNheWtkOm8uyA8IHNoaXNoaWJhbmFcIDsKK+mAo+maiumVtyA8IHJlbnRhaWNob3VcIDsKK+err+acq+apnyA8IHRhbm1hdHN1a2lcIDsKK+WQueWlj+alvSA8IHN1aXNvdWdha3VcIDsKK+eGseWwhOeXhSA8IG5lc3NoYWJ5b3VcIDsKK+aThSA8IGhvc2hpaW1hbWFcIDsKK+atpuijheW5s+WSjCA8IGJ1c291aGVpd2FcIDsKK+W+s+eUqOeTtiA8IHRva3V5b3ViaW5cIDsKK+aJi+e2miA8IHRldHN1ZHp1a2lcIDsKK+Wkqea0peelniA8IGFtYXRzdWthbWlcIDsKK+mZjeawtOmHjyA8IGtvdXN1aXJ5b3VcIDsKK+WHuumHkeiAhSA8IHNodWtraW5zaGFcIDsKK+WFuOWei+eahCA8IHRlbmtlaXRla2lcIDsKK+ieouefsyA8IGhvdGFydWlzaGlcIDsKK+S4reaeouaApyA8IGNodXVzdXVzZWlcIDsKK+i/t+W9qeacjSA8IG1laXNhaWZ1a3VcIDsKK+S9j+WuhemboyA8IGp1dXRha3VuYW5cIDsKK+S7mOW4r+S6i+mghSA8IGZ1dGFpamlrb3VcIDsKK+WMlueyp+aWmSA8IGtlc2hvdXJ5b3VcIDsKK+W/g+eQhuWtpiA8IHNoaW5yaWdha3VcIDsKK+iKs+WQjemMsiA8IGhvdW1laXJva3VcIDsKK+WLleWKm+eCiSA8IGRvdXJ5b2t1cm9cIDsKK+Wwj+WFkOeXhSA8IHNob3VuaWJ5b3VcIDsKK+WwkeW5tOWboyA8IHNob3VuZW5kYW5cIDsKK+WFqOmdoueahCA8IHplbm1lbnRla2lcIDsKK+ihjOaWueS4jeaYjiA8IHl1a3VlZnVtZWlcIDsKK+Wwj+W4guawkSA8IHNob3VzaGltaW5cIDsKK+icnOicgiA8IG1pdHN1YmFjaGlcIDsKK+Wkqeawl+S6iOWgsSA8IHRlbmtpeW9ob3VcIDsKK+S4jeW5s+S4jea6gCA8IGZ1aGVpZnVtYW5cIDsKK+iiq+S/nemZuuiAhSA8IGhpaG9rZW5zaGFcIDsKK+WJr+asoeeahCA8IGZ1a3VqaXRla2lcIDsKK+akjumWk+advyA8IHRzdWlrYW5iYW5cIDsKK+imquWtkOmbu+ipsSA8IG95YWtvZGVud2FcIDsKK+iqsueojueOhyA8IGthemVpcml0c3VcIDsKK+mDteaUv+ecgSA8IHl1dXNlaXNob3VcIDsKK+Wkj+WgtOaJgCA8IG5hdHN1YmFzaG9cIDsKK+WkmuaDheWkmuaBqCA8IHRham91dGFrb25cIDsKK+euseafsyA8IGhha295YW5hZ2lcIDsKK+e1jOWWtuegtOe2uyA8IGtlaWVpaGF0YW5cIDsKK+WOmuWMlueypyA8IGF0c3VnZXNob3VcIDsKK+izm+WKqeS8muWToSA8IHNhbmpva2FpaW5cIDsKK+S6jOS6uue1hCA8IGZ1dGFyaWd1bWlcIDsKK+iHtOWRveWCtyA8IGNoaW1laXNob3VcIDsKK+euseaelSA8IGhha29tYWt1cmFcIDsKK+WJr+mDveW/gyA8IGZ1a3V0b3NoaW5cIDsKK+exs+S/tSA8IGtvbWVkYXdhcmFcIDsKK+eZuuahiOiAhSA8IGhhdHN1YW5zaGFcIDsKK+W8t+WKm+eKryA8IGdvdXJpa2loYW5cIDsKK+S4i+mDqOani+mAoCA8IGthYnVrb3V6b3VcIDsKK+a0l+a/r+S7oyA8IHNlbnRha3VkYWlcIDsKK+mBiuazs+ihkyA8IHl1dWVpanV0c3VcIDsKK+avjuWcn+abnOaXpSA8IG1haWRveW91YmlcIDsKK+ijvemZtualrSA8IHNlaXRvdWd5b3VcIDsKK+eQg+W6p+aomSA8IGt5dXV6YWh5b3VcIDsKK+ayiOS4geiKsSA8IGNoaW5jaG91Z2VcIDsKK+icguicnCA8IGhhY2hpbWl0c3VcIDsKK+S6iOeul+aOque9riA8IHlvc2Fuc29jaGlcIDsKK+iRoeiQhOeJmSA8IHBvcnV0b2dhcnVcIDsKK+S4jeepj+WIhuWtkCA8IGZ1b25idW5zaGlcIDsKK+aVmeS8muWggiA8IGt5b3VrYWlkb3VcIDsKK+aUr+W6l+mVtyA8IHNoaXRlbmNob3VcIDsKK+WWnOaAkuWTgOalvSA8IGtpZG9haXJha3VcIDsKK+W+oeW5tOeOiSA8IG90b3NoaWRhbWFcIDsKK+ilv+a0i+iRsSA8IHNlaXlvdW5lZ2lcIDsKK+eTnOWun+mhlCA8IHVyaXphbmVnYW9cIDsKK+ecn+epuuW4ryA8IHNoaW5rdXV0YWlcIDsKK+erueetkiA8IHRha2VkenV0c3VcIDsKK+i/vemAgeaknCA8IHRzdWlzb3VrZW5cIDsKK+acquaxuueboyA8IG1pa2V0c3VrYW5cIDsKK+a8ouWSjOi+nuWFuCA8IGthbndhaml0ZW5cIDsKK+aZrumAmuagqiA8IGZ1dHN1dWthYnVcIDsKK+WPi+iqvOWbveWutiA8IHl1dWdpa29ra2FcIDsKK+ebuOS6kuS/nemZuiA8IHNvdWdvaG9rZW5cIDsKK+WVhuW6l+S4uyA8IHNob3V0ZW5zaHVcIDsKK+aOoeefs+WgtCA8IHNhaXNla2lqb3VcIDsKK+eJouWQjeS4uyA8IHJvdW5hbnVzaGlcIDsKK+e0r+mAsueojiA8IHJ1aXNoaW56ZWlcIDsKK+Wkp+ertuS6iSA8IGRhaWt5b3Vzb3VcIDsKK+ajruael+azlSA8IHNoaW5yaW5ob3VcIDsKK+WQjOmDt+S6uiA8IGRvdWt5b3VqaW5cIDsKK+a0vuWHuuWppiA8IGhhc2h1dHN1ZnVcIDsKK+S6i+Wkp+S4u+e+qSA8IGppZGFpc2h1Z2lcIDsKK+WGheWbveWCtSA8IG5haWtva3VzYWlcIDsKK+S6lOi8quS8muitsCA8IGdvcmlua2FpZ2lcIDsKK+aUr+W6pumHkSA8IHNoaXRha3VraW5cIDsKK+err+erryA8IGhhc2hpYmFzaGlcIDsKK+WGjea1uOekvCA8IHNhaXNoaW5yZWlcIDsKK+WbveacieWcsCA8IGtva3V5dXVjaGlcIDsKK+imquWxleabuCA8IHNoaW50ZW5zaG9cIDsKK+iqnuW9ouWkieWMliA8IGdva2VpaGVua2FcIDsKK+W7ieaBpeW/gyA8IHJlbmNoaXNoaW5cIDsKK+eahuaXoumjnyA8IGthaWtpc2hva3VcIDsKK+mdnuaIpumXmOWToSA8IGhpc2VudG91aW5cIDsKK+i7ouWxheWFiCA8IHRlbmt5b3Nha2lcIDsKK+mAo+e1oemnhSA8IHJlbnJha3Vla2lcIDsKK+mbu+ipseWPoyA8IGRlbndhZ3VjaGlcIDsKK+eEoeW/teeEoeaDsyA8IG11bmVubXVzb3VcIDsKK+eyvuWLpOizniA8IHNlaWtpbnNob3VcIDsKK+WBpeW/mOeXhyA8IGtlbmJvdXNob3VcIDsKK+idtueVqiA8IGNob3V0c3VnYWlcIDsKK+a8lOeul+aJi+mghiA8IGVuemFudGVqdW5cIDsKK+aVmeS8muWPsiA8IGt5b3VrYWlzaGlcIDsKK+WwkeW5tOS8miA8IHNob3VuZW5rYWlcIDsKK+i0i+aJi+e0mSA8IG5pc2V0ZWdhbWlcIDsKK+WHuuW+gei7jSA8IHNodXNzZWlndW5cIDsKK+atpuaWreS4u+e+qSA8IGJ1ZGFuc2h1Z2lcIDsKK+ioiOeUu+iAhSA8IGtlaWtha3VzaGFcIDsKK+aVo+aWh+eahCA8IHNhbmJ1bnRla2lcIDsKK+S4luipseS6uumWkyA8IHNld2FuaW5nZW5cIDsKK+W5vuS9leW5s+WdhyA8IGtpa2FoZWlraW5cIDsKK+aLoOaJgCA8IHlvcmlkb2tvcm9cIDsKK+S6uuW3pemZjembqCA8IGppbmtvdWtvdXVcIDsKK+m7kum8oCA8IGt1cm9uZXp1bWlcIDsKK+WPi+WlveeahCA8IHl1dWtvdXRla2lcIDsKK+iHquWVj+iHquetlCA8IGppbW9uaml0b3VcIDsKK+WPrOWWmueKtiA8IHNob3VrYW5qb3VcIDsKK+iqjeiovOiAhSA8IG5pbnNob3VzaGFcIDsKK+W5tOeUo+mhjSA8IG5lbnNhbmdha3VcIDsKK+aPm+eul+ihqCA8IGthbnphbmh5b3VcIDsKK+aylue4hOecjCA8IG9raW5hd2FrZW5cIDsKK+aVkeS4lui7jSA8IGt5dXVzZWlndW5cIDsKK+a6gOi2s+aEnyA8IG1hbnpva3VrYW5cIDsKK+WlieWFrOWFiCA8IGhvdWtvdXNha2lcIDsKK+mbu+WgseaWmSA8IGRlbnBvdXJ5b3VcIDsKK+iNkuS6i+W4qyA8IGFyYWdvdG9zaGlcIDsKK+ahg+a6kOmDtyA8IHRvdWdlbmt5b3VcIDsKK+iTruaciOWwvCA8IHJlbmdldHN1bmlcIDsKK+eah+e0gOW5tOW6piA8IGtvdWtpbmVuZG9cIDsKK+e+veaWkeiaiiA8IGhhbWFkYXJha2FcIDsKK+actOW/teS7gSA8IGJva3VuZW5qaW5cIDsKK+WtkOWurueZjCA8IHNoaWt5dXVnYW5cIDsKK+ihqOWPoyA8IG9tb3RlZ3VjaGlcIDsKK+ejgeWKm+ioiCA8IGppcnlva3VrZWlcIDsKK+agueeykuiPjCA8IGtvbnJ5dXVraW5cIDsKK+e4puaXi+ebpCA8IHRhdGVzZW5iYW5cIDsKK+W4guW9ueaJgCA8IHNoaXlha3VzaG9cIDsKK+aknOa1geioiCA8IGtlbnJ5dXVrZWlcIDsKK+WNs+WjsuS8miA8IHNva3ViYWlrYWlcIDsKK+W7tuS6uuWToSA8IG5vYmVqaW4nJ2luXCA7Civlj6PohZTlpJbnp5EgPCBrb3Vrb3VnZWthXCA7Civoqr/lkIjliaQgPCBjaG91Z291emFpXCA7CivopoHnorroqo0gPCB5b3VrYWt1bmluXCA7CivluLjnt5HmqLkgPCBqb3VyeW9rdWp1XCA7Civnq4jnpZ4gPCBrYW1hZG9nYW1pXCA7CivpgbjnkIPnnLwgPCBzZW5reXV1Z2FuXCA7Civnn7PlkIjmiKYgPCBpc2hpZ2Fzc2VuXCA7CivlsIHlu7rnmoQgPCBob3VrZW50ZWtpXCA7Civpp5DlnKjmiYAgPCBjaHV1emFpc2hvXCA7CivkuJbluK/kuLsgPCBzZXRhaW51c2hpXCA7CivlubPluLjlv4MgPCBoZWlqb3VzaGluXCA7Civpu5LprqogPCBrdXJvbWFndXJvXCA7CivohLPmgKfpurvnl7ogPCBub3VzZWltYWhpXCA7CivkupTljYHpn7PpoIYgPCBnb2p1dW9uanVuXCA7CivosYblj7DpoqggPCBtYW1ldGFpZnV1XCA7CivmvJTnrpfnsr7luqYgPCBlbnphbnNlaWRvXCA7CivpibHlsbHmpa0gPCBrb3V6YW5neW91XCA7CivljYHlrZfmnrbnirYgPCBqdXVqaWtham91XCA7Civooajlh7ogPCBoeW91c2h1dHN1XCA7Civmp4vmlofmnKggPCBrb3VidW5tb2t1XCA7Civlj4LorIDplbcgPCBzYW5ib3VjaG91XCA7CivkuI3ogIHkuI3mrbsgPCBmdXJvdWZ1c2hpXCA7CivkuJbnlYzkuLvnvqkgPCBzZWthaXNodWdpXCA7CivlhpnnnJ/ppKggPCBzaGFzaGlua2FuXCA7CivmiKbmmYLoibIgPCBzZW5qaXNob2t1XCA7CivonrrpiL/ntLDlt6UgPCByYWRlbnphaWt1XCA7CivoqJjovInkuovpoIUgPCBraXNhaWppa291XCA7CivkvY/lroXooZcgPCBqdXV0YWt1Z2FpXCA7CivpoJPnj43mvKIgPCB0b25jaGlua2FuXCA7CivlvLHphbjmgKcgPCBqYWt1c2Fuc2VpXCA7CivkuK3ku5XliIcgPCBuYWthamlraXJpXCA7Civngq3ntKDnuYrntq0gPCB0YW5zb3NlbicnaVwgOwor5ZSQ6KGjIDwga2FyYWtvcm9tb1wgOwor5Yid6Iie5Y+wIDwgaGF0c3VidXRhaVwgOwor5YaZ55yf6aGUIDwgc2hhc2hpbmdhb1wgOwor54Sh57ea6Zu76KmxIDwgbXVzZW5kZW53YVwgOwor5Y2X5Lqs546JIDwgbmFua2luZGFtYVwgOwor6Ii557GN5rivIDwgc2Vuc2VraWtvdVwgOwor54eQ54Gw55+zIDwgcmlua2Fpc2VraVwgOwor5LiA5bm06ZaTIDwgaWNoaW5lbmthblwgOwor6Z2e5o6l6KemIDwgaGlzZXNzaG9rdVwgOwor5oyB57aa55qEIDwgaml6b2t1dGVraVwgOwor5rip5oOF5Li7576pIDwgb25qb3VzaHVnaVwgOwor5Za25qWt5LitIDwgZWlneW91Y2h1dVwgOwor6LaF6YGO6aGNIDwgY2hvdWthZ2FrdVwgOwor6aCQ6LK4546HIDwgeW90YWlyaXRzdVwgOwor5Luj55So6IKJIDwgZGFpeW91bmlrdVwgOwor5YCL5Lq657WM5Za2IDwga29qaW5rZWllaVwgOwor5pmC57O75YiXIDwgamlrZWlyZXRzdVwgOwor562G5peBIDwgZnVkZXp1a3VyaVwgOwor5aWU5pS+5LiN576IIDwgaG9ucG91ZnVraVwgOwor5a2Q5L6b5pyNIDwga29kb21vZnVrdVwgOwor6K2m6KaW5bqBIDwga2Vpc2hpY2hvdVwgOwor5YWN55ar5oCnIDwgbWVuJydla2lzZWlcIDsKK+ezu+e1seeahCA8IGtlaXRvdXRla2lcIDsKK+i7jeeUqOmHkSA8IGd1bicneW91a2luXCA7CivojZLku5XkuosgPCBhcmFzaGlnb3RvXCA7CivnmbvlsbHlrqIgPCB0b3phbmt5YWt1XCA7CivkvY7os4Pph5EgPCB0ZWljaGluZ2luXCA7CivkvrXlrrPogIUgPCBzaGluZ2Fpc2hhXCA7Civlo7LkuIrnpaggPCB1cmlhZ2VweW91XCA7CivpiYTlmajmmYLku6MgPCB0ZWtraWppZGFpXCA7CivmlL7pgIHliocgPCBob3Vzb3VnZWtpXCA7Civml6XnqIvooaggPCBuaXR0ZWloeW91XCA7Civlia/okazlk4EgPCBmdWt1c291aGluXCA7CivpvaPokL0gPCBrb21hb3Rvc2hpXCA7CivmjL/lhaXmlocgPCBzb3VueXV1YnVuXCA7CivliJ3lrabogIUgPCBzaG9nYWt1c2hhXCA7CivmlZnnv5LmiYAgPCBreW91c2h1dWpvXCA7CivlhaXloLTploAgPCBueXV1am91bW9uXCA7CivlrpjluoHooZcgPCBrYW5jaG91Z2FpXCA7CivniankvqHpqLDosrQgPCBidWtrYXRvdWtpXCA7Civopo/liYfnmoQgPCBraXNva3V0ZWtpXCA7CivlsI/lhorlrZAgPCBzaG91c2Fzc2hpXCA7CivovLvlsITnt5ogPCBmdWt1c2hhc2VuXCA7CivlgKkgPCB0c3VyYXRzdXJhXCA7CivljYHpgLLliLYgPCBqaXNzaGluc2VpXCA7CivopIfoo73lk4EgPCBmdWt1c2VpaGluXCA7Civmo67mnpfluK8gPCBzaGlucmludGFpXCA7CivntZDmmbbns7sgPCBrZXNzaG91a2VpXCA7CivnhKHnp6nluo8gPCBtdWNoaXRzdWpvXCA7Civml6XmnKzoiJ7ouIogPCBuaWhvbmJ1eW91XCA7Civogb7llJblrabmoKEgPCByb3VhZ2Fra291XCA7CivpjKjntrEgPCBpa2FyaWR6dW5hXCA7CivkuLvoprPnmoQgPCBzaHVrYW50ZWtpXCA7CivnoLTlo4rlipsgPCBoYWthaXJ5b2t1XCA7CivkuInmr5vkvZwgPCBzYW5tb3VzYWt1XCA7Civmoafnmq7okbogPCBoaXdhZGFidWtpXCA7CivlipvnuZTmqZ8gPCByaWtpc2hva2tpXCA7Civlha3pnaLkvZMgPCByb2t1bWVudGFpXCA7Civnj77ku6Poi7Hoqp4gPCBnZW5kYWllaWdvXCA7Civnmb3kurrnqK4gPCBoYWt1amluc2h1XCA7CivmsY7npZ7oq5YgPCBoYW5zaGlucm9uXCA7Civku67lrprmrL4gPCBrYXJpdGVpa2FuXCA7CivntI3nqI7poY0gPCBub3V6ZWlnYWt1XCA7Civoq7jlpJblm70gPCBzaG9nYWlrb2t1XCA7CivlpJbmjqXlhoYgPCBnYWlzZXRzdWVuXCA7CivljYHkuozkvb/lvpIgPCBqdXVuaXNoaXRvXCA7Civoo73ntJnmpa0gPCBzZWlzaGlneW91XCA7CivpiZvnm7Tnt5ogPCBlbmNob2t1c2VuXCA7Civlv4Ppm7voqIggPCBzaGluZGVua2VpXCA7Civnpo/liKnooaggPCBmdWt1cmloeW91XCA7CivnrZLlvaIgPCB0c3V0c3VnYXRhXCA7Civlvq7nlJ/niakgPCBiaXNlaWJ1dHN1XCA7Civlrp3nn7PlupcgPCBob3VzZWtpdGVuXCA7CivlibXmpa3ogIUgPCBzb3VneW91c2hhXCA7Civml6XmnKzluq3lnJIgPCBuaWhvbnRlaWVuXCA7Civpnanoo73lk4EgPCBrYXdhc2VpaGluXCA7CivlubPlubTkvZwgPCBoZWluZW5zYWt1XCA7Civmt7Hnt5EgPCBmdWthbWlkb3JpXCA7CivpgbrkvJ3mmpflj7cgPCBpZGVuJydhbmdvdVwgOwor54y/6Iqd5bGFIDwgc2FydXNoaWJhaVwgOwor5aC05aSW5qCqIDwgam91Z2Fpa2FidVwgOwor6by76JasIDwgaGFuYWd1c3VyaVwgOwor5byB6Ki85rOVIDwgYmVuc2hvdWhvdVwgOwor5Y2U5a6a5pu4IDwga3lvdXRlaXNob1wgOwor6LuN5LqL6Ly46YCBIDwgZ3Vuaml5dXNvdVwgOwor5LqU5pes56+AIDwgZ29qdW5zZXRzdVwgOwor5Ly05oCn6YG65LydIDwgaGFuc2VpaWRlblwgOwor5omA5p+EIDwgdG9rb3JvZ2FyYVwgOwor5Yid5Lu757WmIDwgc2hvbmlua3l1dVwgOwor6Zm45pu5562JIDwgcmlrdXNvdXRvdVwgOwor57WM5Za25Y+C5YqgIDwga2VpZWlzYW5rYVwgOwor5aW95oiQ57i+IDwga291c2Vpc2VraVwgOwor6YCa5pyJ5oCnIDwgdHN1dXl1dXNlaVwgOwor6IG05bCO54qsIDwgY2hvdWRvdWtlblwgOwor5LqI5YKZ6YG45oyZIDwgeW9iaXNlbmt5b1wgOwor5b6h6auY56WW6aCt5be+IDwgb2tvc296dWtpblwgOwor5LqI5YKZ6Imm6ZqKIDwgeW9iaWthbnRhaVwgOwor56OB5Yqb57eaIDwgamlyeW9rdXNlblwgOwor6Zui5ama546HIDwgcmlrb25yaXRzdVwgOwor56Gd6YW45aGpIDwgc2hvdXNhbicnZW5cIDsKK+S6iOWCmemBuOaJiyA8IHlvYmlzZW5zaHVcIDsKK+WGjeeiuuiqjSA8IHNhaWtha3VuaW5cIDsKK+eZuuahiOaoqSA8IGhhdHN1YW5rZW5cIDsKK+mFquijveWTgSA8IHJha3VzZWloaW5cIDsKK+Wcn+aAp+mqqCA8IGRvc2hvdWJvbmVcIDsKK+mBv+WmiuiWrCA8IGhpbmluJyd5YWt1XCA7CivkuI3lgLbmiLTlpKkgPCBmdWd1dGFpdGVuXCA7CivmjIHkuLsgPCBtb2NoaW51c2hpXCA7CivnmbrnlJ/lraYgPCBoYXNzZWlnYWt1XCA7CivkurrnqK7nmoQgPCBqaW5zaHV0ZWtpXCA7Civno4Hnn7Pnm6QgPCBqaXNoYWt1YmFuXCA7CivlpKfolLXntYwgPCBkYWl6b3VreW91XCA7CivmsrPljp/ptrggPCBrYXdhcmFoaXdhXCA7Civmi5nliqMgPCBzZXRzdXJldHN1XCA7CivnlZnnva7loLQgPCByeXV1Y2hpam91XCA7CivpgJrpoqjlrZQgPCB0c3V1ZnV1a291XCA7CivopoHmsYLogIUgPCB5b3VreXV1c2hhXCA7Civnn6XmgbXooosgPCBjaGllYnVrdXJvXCA7CivntJnpiYTnoLIgPCBrYW1pZGVwcG91XCA7CivliJ3po5vooYwgPCBoYXRzdWhpa291XCA7CivnmbvlsbHlj6MgPCB0b3phbmd1Y2hpXCA7Civosq/msLTph48gPCBjaG9zdWlyeW91XCA7CivnpL7kvJrpjYsgPCBzaGFrYWluYWJlXCA7CivlubPlkozpg6jpmoogPCBoZWl3YWJ1dGFpXCA7Civmrorli7Los54gPCBzaHVrdW5zaG91XCA7CivpgYvli5XpnbQgPCB1bmRvdWd1dHN1XCA7CivkuqTpmpvlm70gPCBrb3VzYWlrb2t1XCA7CivlhavmloflrZcgPCBoYWNoaW1vbmppXCA7Civoo4HliKTmspnmsbAgPCBzYWliYW56YXRhXCA7Civplovnmbrpg6ggPCBrYWloYXRzdWJ1XCA7Civoqr/ljbDlm70gPCBjaG91aW5rb2t1XCA7Civnm7jntprnqI4gPCBzb3V6b2t1emVpXCA7CivonYvkurrlvaIgPCByb3VuaW5neW91XCA7CivkurrlkI3pjLIgPCBqaW5tZWlyb2t1XCA7CivllrbliKnms5XkurogPCBlaXJpaG91amluXCA7CivokL3nrKznlJ8gPCByYWt1ZGFpc2VpXCA7Civlh53ngbDlsqkgPCBneW91a2FpZ2FuXCA7CivliKnku5jlgrUgPCByaXRzdWtpc2FpXCA7CivorbDkvJrmlL/msrsgPCBnaWthaXNlaWppXCA7Civpm6jlpKnpoIblu7YgPCB1dGVuanVuJydlblwgOwor5L2T6IWU5aOBIDwgdGFpa291aGVraVwgOwor5oyH5o6M57SLIDwgc2hpc2hvdW1vblwgOwor5LuY5biv6LK755SoIDwgZnV0YWloaXlvdVwgOwor5aWH6Leh55qEIDwga2lzZWtpdGVraVwgOwor5Luj6K2w5ZOh5ZujIDwgZGFpZ2lpbmRhblwgOwor6JuL55m95rqQIDwgdGFucGFrdWdlblwgOwor5pat5pyr6a2UIDwgZGFubWF0c3VtYVwgOwor6Kmz5Lyd56S+IDwgc2hvdWRlbnNoYVwgOwor6JGs5YSA5byPIDwgc291Z2lzaGlraVwgOwor5pCN5a6z6aGNIDwgc29uZ2FpZ2FrdVwgOwor6YmE6Yu85qWtIDwgdGVra291Z3lvdVwgOwor5pqX57Sr6ImyIDwgYW5zaGlzaG9rdVwgOwor5YWI5Lu76aCGIDwgc2VuJyduaW5qdW5cIDsKK+WlveaIpueahCA8IGtvdXNlbnRla2lcIDsKK+mYsumVt+WumCA8IGJvdWNob3VrYW5cIDsKK+awtOWcp+ioiCA8IHN1aWF0c3VrZWlcIDsKK+WkluWbveWLoiA8IGdhaWtva3V6ZWlcIDsKK+mfk+WbveS6uiA8IGthbmtva3VqaW5cIDsKK+aVoumXmOizniA8IGthbnRvdXNob3VcIDsKK+a1geizqiA8IHJ5dXVzaGljaGlcIDsKK+apn+WGhemjnyA8IGtpbmFpc2hva3VcIDsKK+ijj+eVque1hCA8IHVyYWJhbmd1bWlcIDsKK+WbvemYsuirliA8IGtva3Vib3Vyb25cIDsKK+S6jOmHjeiqsueojiA8IG5panV1a2F6ZWlcIDsKK+aJtumkiuaOp+mZpCA8IGZ1eW91a291am9cIDsKK+Wbvemam+e3miA8IGtva3VzYWlzZW5cIDsKK+ihm+aYn+mDveW4giA8IGVpc2VpdG9zaGlcIDsKK+mbu+awl+Wbnui3ryA8IGRlbmtpa2Fpcm9cIDsKK+iyuOmHkeW6qyA8IGthc2hpa2lua29cIDsKK+mAn+iomOihkyA8IHNva2tpanV0c3VcIDsKK+WbveiogOiRiSA8IGt1bmlrb3RvYmFcIDsKK+aKveWHuiA8IGNodXVzaHV0c3VcIDsKK+WMkOihjOeWuSA8IGZ1a2tvdXNoaW5cIDsKK+eUuuW3peWgtCA8IG1hY2hpa291YmFcIDsKK+WcsOS4i+S6jOmajiA8IGNoaWthbmlrYWlcIDsKK+iHs+aApeS+vyA8IHNoaWt5dXViaW5cIDsKK+WuneWGoOeroCA8IGhvdWthbnNob3VcIDsKK+iLpeaXpumCoyA8IHdha2FkYW4nJ25hXCA7CivmjJHmiKbogIUgPCBjaG91c2Vuc2hhXCA7CivpiYTpibHnn7MgPCB0ZWtrb3VzZWtpXCA7CivmqKrpmpTohpwgPCBvdWtha3VtYWt1XCA7CivpoJDph5Hlj6PluqcgPCB5b2tpbmtvdXphXCA7CivlkIzmpa3ogIUgPCBkb3VneW91c2hhXCA7CivmtLvnlKjoqp4gPCBrYXRzdXlvdWdvXCA7Civmt7HlkbzlkLggPCBzaGlua29reXV1XCA7CivkuInnlarpto8gPCBzYW5iYW5kb3JpXCA7CivliKTku7vlrpggPCBoYW4nJ25pbmthblwgOwor5aSW5Zu95YK1IDwgZ2Fpa29rdXNhaVwgOwor6YCj57Wh6Ii5IDwgcmVucmFrdXNlblwgOwor6JC956ys54K5IDwgcmFrdWRhaXRlblwgOwor6YCy6KGM55u4IDwgc2hpbmtvdXNvdVwgOwor6Imy5oGL5rKZ5rGwIDwgaXJva29pemF0YVwgOwor5rG65a6a55qEIDwga2V0dGVpdGVraVwgOwor6IKJ5paZ55CGIDwgbmlrdXJ5b3VyaVwgOwor5paH5rOV55qEIDwgYnVucG91dGVraVwgOwor5Zu95paH5rOVIDwga29rdWJ1bnBvdVwgOwor6LaF5byp57SaIDwgY2hvdWRva3l1dVwgOwor5aSn6JS155yBIDwgb29rdXJhc2hvdVwgOwor5oSf5oOF55qEIDwga2Fuam91dGVraVwgOwor5LmX5ZCI6Ii5IDwgbm9yaWFpYnVuZVwgOwor5b6z55So5ZOBIDwgdG9rdXlvdWhpblwgOwor54eD5paZ5qOSIDwgbmVucnlvdWJvdVwgOwor5LqM5pel6YWUIDwgZnV0c3VrYXlvaVwgOwor56We57WM57O7IDwgc2hpbmtlaWtlaVwgOwor5Luu6K2w6ZW3IDwga2FyaWdpY2hvdVwgOwor6LKo5bmj5L6h5YCkIDwga2FoZWlrYWNoaVwgOwor54us5pat6KuWIDwgZG9rdWRhbnJvblwgOwor5aSW5Zu95Lq6IDwgZ2Fpa29rdWppblwgOwor54+N57Oe5ryiIDwgY2hpbnB1bmthblwgOwor5oyv5YuV5p2/IDwgc2hpbmRvdWJhblwgOwor5q6L5YuZ5pW055CGIDwgemFubXVzZWlyaVwgOwor5Li75pWZ5YagIDwgc2h1a3lvdWthblwgOwor5q2j5pWZ5birIDwgc2Vpa3lvdXNoaVwgOwor57Sw6I+M5a2mIDwgc2Fpa2luZ2FrdVwgOwor6Jyc5pyIIDwgbWl0c3VnZXRzdVwgOwor6ICV5L2c5ZywIDwga291c2FrdWNoaVwgOwor5pS56YCy5YWaIDwga2Fpc2hpbnRvdVwgOwor5LiJ5YiG5pCXIDwgc2FuYnV0c3VraVwgOwor5LyR6ZaR5ZywIDwga3l1dWthbmNoaVwgOwor6LuN55So6ImmIDwgZ3VuJyd5b3VrYW5cIDsKK+aWsOiBnue0mSA8IHNoaW5idW5zaGlcIDsKK+i8u+WwhOeCuSA8IGZ1a3VzaGF0ZW5cIDsKK+WFrOWWtuS/nemZuiA8IGtvdWVpaG9rZW5cIDsKK+S4luS/l+eahCA8IHNlem9rdXRla2lcIDsKK+mHjeWcp+aEnyA8IGp1dWF0c3VrYW5cIDsKK+ixhumJhOegsiA8IG1hbWVkZXBwb3VcIDsKK+WEquengOWTgSA8IHl1dXNodXVoaW5cIDsKK+epuua2mSA8IHNvcmFuYW1pZGFcIDsKK+mHkeiejeeVjCA8IGtpbicneXV1a2FpXCA7Civlgo3ogbTliLggPCBib3VjaG91a2VuXCA7Civosq/ph5HnrrEgPCBjaG9raW5iYWtvXCA7Civlm73looPnt5ogPCBrb2treW91c2VuXCA7CivorbLmuKHmi4Xkv50gPCBqb3V0b3RhbnBvXCA7CivompXns7jmpa0gPCBzYW5zaGlneW91XCA7CivkuIDlubTojYkgPCBpY2hpbmVuc291XCA7Civpq5jlr4bluqYgPCBrb3VtaXRzdWRvXCA7CivlhY3nlqvkvZMgPCBtZW4nJ2VraXRhaVwgOwor56OB5rCX5bWQIDwgamlraWFyYXNoaVwgOwor5oyv5YuV5pWwIDwgc2hpbmRvdXN1dVwgOwor5aSn56S85pyNIDwgdGFpcmVpZnVrdVwgOwor5pS56Imv56iuIDwga2FpcnlvdXNodVwgOwor5YyX5Zu95Lq6IDwgaG9ra29rdWppblwgOwor54mi5b255Lq6IDwgcm91eWFrdW5pblwgOwor5riL5riLIDwgc2hpYnVzaGlidVwgOwor5YaF56Wd6KiAIDwgbmFpc2h1dWdlblwgOwor5LiA5a625Zuj5qySIDwgaWtrYWRhbnJhblwgOwor5Luj6K2w5ZOh5LyaIDwgZGFpZ2lpbmthaVwgOwor5Y2K6Lqr5YOPIDwgaGFuc2hpbnpvdVwgOwor5aSn6buS5aSpIDwgZGFpa29rdXRlblwgOwor56aP6KKLIDwgZnVrdWJ1a3Vyb1wgOwor6KOc5q2j5LqI566XIDwgaG9zZWl5b3NhblwgOwor5LiN5YiG5YmyIDwgZnVidW5rYXRzdVwgOwor6KW/5YyX6KW/IDwgc2VpaG9rdXNlaVwgOwor6YGO5Ymw6Ziy6KGbIDwga2Fqb3Vib3VlaVwgOwor562S5YWIIDwgdHN1dHN1c2FraVwgOwor562G5YqbIDwgaGl0c3VyeW9rdVwgOwor5oCS6auq5aSpIDwgZG9oYXRzdXRlblwgOwor5oiR5b+DIDwgd2FnYWtva29yb1wgOwor5LqI5YKZ5bqn5bitIDwgeW9iaXphc2VraVwgOwor5Y+N6Z2p5ZG9IDwgaGFua2FrdW1laVwgOwor6KGb55Sf5Z+65rqWIDwgZWlzZWlraWp1blwgOwor5paw6IGe56S+IDwgc2hpbmJ1bnNoYVwgOwor5LiA5qmf6Lu4IDwgaWNoaWtpamlrdVwgOwor5L+d6K235Zuj5L2TIDwgaG9nb2RhbnRhaVwgOwor6ZuG6a2a54GvIDwgc2h1dWd5b3RvdVwgOwor6Zuq6KaL6YWSIDwgeXVraW1pemFrZVwgOwor5YSA6KOF6aas6LuKIDwgZ2lzb3ViYXNoYVwgOwor5Z2K5Li76aCtIDwgYm91enVhdGFtYVwgOwor5YWI6aiT55qEIDwgc2Vua2VudGVraVwgOwor6ZeH57Wm5LiOIDwgeWFtaWt5dXV5b1wgOwor5pmC5LqL5ZWP6aGMIDwgamlqaW1vbmRhaVwgOwor5YKN6IG05Lq6IDwgYm91Y2hvdW5pblwgOwor5LqL5a6f5LiKIDwgamlqaXRzdWpvdVwgOwor576p5L6g5b+DIDwgZ2lreW91c2hpblwgOwor55So5rC05aCAIDwgeW91c3VpYm9yaVwgOwor6buS6Iu6IDwga3Vyb2ljaGlnb1wgOwor5Luu5pmu6KuLIDwga2FyaWJ1c2hpblwgOwor5Y2g6aCY5ZywIDwgc2VucnlvdWNoaVwgOwor5a+d6KOF5ZOBIDwgc2hpbnNvdWhpblwgOwor55S65YaF5LyaIDwgY2hvdW5haWthaVwgOwor5ZCM55uf5Zu9IDwgZG91bWVpa29rdVwgOwor55m66IKy5pyfIDwgaGF0c3Vpa3VraVwgOwor6KqT57SE5pu4IDwgc2VpeWFrdXNob1wgOwor55m65bGV5LitIDwgaGF0dGVuY2h1dVwgOwor6Iy255Wq55qEIDwgY2hhYmFudGVraVwgOwor54m555Sj5ZOBIDwgdG9rdXNhbmhpblwgOwor5aSr5amm5Zan5ZipIDwgZnV1ZnVnZW5rYVwgOwor6KO957KJ5qWtIDwgc2VpZnVuZ3lvdVwgOwor5raI5Y675rOVIDwgc2hvdWt5b2hvdVwgOwor6IKb6ZaA5a2mIDwga291bW9uZ2FrdVwgOwor56ep56aEIDwgY2hpdHN1cm9rdVwgOwor5aSn5Y+45pWZIDwgZGFpc2hpa3lvdVwgOwor5aaE5oOz55eHIDwgbW91c291c2hvdVwgOwor5b6h55So6YGUIDwgZ295b3VkYXRzdVwgOwor5bGV56S654mpIDwgdGVuamlidXRzdVwgOwor6Ieq5q666ICFIDwgamlzYXRzdXNoYVwgOwor5L2c5puy5a62IDwgc2Fra3lva3VrYVwgOwor5YWs5pWZ5LyaIDwga291a3lvdWthaVwgOwor5Y+I6ZqjIDwgbWF0YWRvbmFyaVwgOwor6KiI55S75oCnIDwga2Vpa2FrdXNlaVwgOwor5YiH6L+r5oSfIDwgc2VwcGFrdWthblwgOwor5p6i5a+G6ZmiIDwgc3V1bWl0c3VpblwgOwor5Zub5YWt5YikIDwgc2hpcm9rdWJhblwgOwor6L+95L2T6aiTIDwgdHN1aXRhaWtlblwgOwor5YWl5aC06ICFIDwgbnl1dWpvdXNoYVwgOwor5Y2K55eF5Lq6IDwgaGFuYnlvdW5pblwgOwor6YeR6YuPIDwga2FuYWJhc2FtaVwgOwor5pat5Zu65oqX6K2wIDwgZGFua29rb3VnaVwgOwor5o2c57Si6ZqKIDwgc291c2FrdXRhaVwgOwor5Y+L5aW95Zu9IDwgeXV1a291a29rdVwgOwor5q6/5LiK5Lq6IDwgdGVuam91Yml0b1wgOwor54Sh5rC054mpIDwgbXVzdWlidXRzdVwgOwor5YGl5bq355qEIDwga2Vua291dGVraVwgOwor5paw5L2T5pONIDwgc2hpbnRhaXNvdVwgOwor5oeQ5omLIDwgZnV0b2tvcm9kZVwgOwor56m65Lit57eaIDwga3V1Y2h1dXNlblwgOwor55Sw6IiO6YGTIDwgaW5ha2FtaWNoaVwgOwor5rOi5LmD6IqxIDwgbmFtaW5vaGFuYVwgOwor5YG25YOP5pWZIDwgZ3V1em91a3lvdVwgOwor56We6Kmx5a2mIDwgc2hpbndhZ2FrdVwgOwor55u457aa5qipIDwgc291em9rdWtlblwgOwor5oCn5pWZ6IKyIDwgc2Vpa3lvdWlrdVwgOwor5YmN5ZOo57eaIDwgemVuc2hvdXNlblwgOwor5LqU6Lyq6IGW54GrIDwgZ29yaW5zZWlrYVwgOwor54us5aWP6ICFIDwgZG9rdXNvdXNoYVwgOwor6Ieq5YiG5Yud5omLIDwgamlidW5rYXR0ZVwgOwor6LWk6KGA55CDIDwgc2Vra2Vra3l1dVwgOwor5aSp5Y+w5a6XIDwgdGVuZGFpc2h1dVwgOwor6LuN5qW95omLIDwgZ3VuZ2FrdXNodVwgOwor6LuN6ZyA5pmv5rCXIDwgZ3VuanVrZWlraVwgOwor6LuN6Imm5be7IDwgZ3Vua2FubWFraVwgOwor6buS57eRIDwga3Vyb21pZG9yaVwgOwor5pqX6KSQ6ImyIDwgYW5rYXNzaG9rdVwgOwor6YCG5L2c55SoIDwgZ3lha3VzYXlvdVwgOwor5oyR5oim54q2IDwgY2hvdXNlbmpvdVwgOwor5qSc6YeP57eaIDwga2VucnlvdXNlblwgOwor57ay5p2T5a2QIDwgYW1pamFrdXNoaVwgOwor5YaN5rOo5paHIDwgc2FpY2h1dW1vblwgOwor5YaF5Y+N6LazIDwgbmFpaGFuc29rdVwgOwor5bm05bCR6ICFIDwgbmVuc2hvdXNoYVwgOwor5paw55Sf5LujIDwgc2hpbnNlaWRhaVwgOwor5L+d566h54mpIDwgaG9rYW5idXRzdVwgOwor5Z+65bqV6YOo6ZaAIDwga2l0ZWlidW1vblwgOwor5YSq5Yud6ICFIDwgeXV1c2hvdXNoYVwgOwor5pS56Imv54K5IDwga2FpcnlvdXRlblwgOwor5Li45aSq5bCP5bGLIDwgbWFydXRhZ295YVwgOwor5oWE54OIIDwgcml0c3VyZXRzdVwgOwor57Wm5o6S5rC0IDwga3l1dWhhaXN1aVwgOwor5aSp55y86Y+hIDwgdGVuZ2Fua3lvdVwgOwor5LiJ6YCj5YudIDwgc2FucmVuc2hvdVwgOwor5LiN55m65by+IDwgZnVoYXRzdWRhblwgOwor5Y2K5a6Y55qEIDwgaGFua2FudGVraVwgOwor5oyv5YuV5a2QIDwgc2hpbmRvdXNoaVwgOwor6Yu45q2vIDwgbm9rb2dpcmliYVwgOwor5rS755m65YyWIDwga2FwcGF0c3VrYVwgOwor5LqI5oOz5Yip55uKIDwgeW9zb3VyaWVraVwgOwor5Y+O6ZuG5a62IDwgc2h1dXNodXVrYVwgOwor6YW45YyW6YmEIDwgc2Fua2F0ZXRzdVwgOwor5paw5Lq6546LIDwgc2hpbmppbicnb3VcIDsKK+W7tuaXpeaVsCA8IG5vYmVuaXNzdXVcIDsKK+WlieeMrumgjCA8IGhvdWtlbnNob3VcIDsKK+iyuOW6l+iIlyA8IGthc2hpdGVucG9cIDsKK+S6lOmfs+mfs+majiA8IGdvb24nJ29ua2FpXCA7CivkuozkurrlhbEgPCBmdXRhcml0b21vXCA7Civlj47mloLliaQgPCBzaHV1cmVuemFpXCA7Civlm73pmpvms5UgPCBrb2t1c2FpaG91XCA7Civpq5jlrablubQgPCBrb3VnYWt1bmVuXCA7CivmoLjngb3lrrMgPCBrYWt1c2FpZ2FpXCA7CivkvL3ojYnlrZAgPCB0b2dpem91c2hpXCA7Civnhb3mg4XnmoQgPCBzZW5qb3V0ZWtpXCA7Civoqo3oqLzlrpggPCBuaW5zaG91a2FuXCA7CivppIrompXmpa0gPCB5b3VzYW5neW91XCA7CivngavlsbHohIggPCBrYXphbm15YWt1XCA7Civoj5znqK7mrrsgPCBuYXRhbmVnYXJhXCA7Civpgb/mmpHlrqIgPCBoaXNob2t5YWt1XCA7CivngavmsJfljrPnpoEgPCBrYWtpZ2Vua2luXCA7Civmm7joqZXmrIQgPCBzaG9oeW91cmFuXCA7CivlhaXloLTnqI4gPCBueXV1am91emVpXCA7CivmuozliYwgPCBoYXRzdXJhdHN1XCA7CivoqabkvZzou4ogPCBzaGlzYWt1c2hhXCA7CivnjYTkuK3oqJggPCBnb2t1Y2h1dWtpXCA7CivkubPlhYTlvJ8gPCBjaGlreW91ZGFpXCA7CivljYHlrZfmnrblg48gPCBqdXVqaWthem91XCA7CivkuozkuIPml6UgPCBmdXRhbmFub2thXCA7CivmraPmlZnkvJogPCBzZWlreW91a2FpXCA7CivlhYjnlJ/mlrkgPCBzZW5zZWlnYXRhXCA7CivojYnpm7Lpm4AgPCBrdXNhaGliYXJpXCA7Civkvo3lvpPogbcgPCBqaWp1dXNob2t1XCA7Civlh6bnkIbpgY7nqIsgPCBzaG9yaWthdGVpXCA7CivlnLDlvaLlraYgPCBjaGlrZWlnYWt1XCA7CivkuIDlrprkuI3lpIkgPCBpdHRlaWZ1aGVuXCA7CivmnIjkuIvnvo7kurogPCBnZWtrYWJpamluXCA7CivkuIDnm7Tnt5ogPCBpdGNob2t1c2VuXCA7CivlpKnnnLzpgJogPCB0ZW5nYW50c3V1XCA7Civku7LosrfkurogPCBuYWthZ2FpbmluXCA7CivolqznkIblraYgPCB5YWt1cmlnYWt1XCA7CivngKzmiLjlhoXmtbcgPCBzZXRvbmFpa2FpXCA7CivogIHmlL/msrvlrrYgPCByb3VzZWlqaWthXCA7Civlm73mloflsIIgPCBrb2t1YnVuc2VuXCA7CivkuIDlubTnlJ8gPCBpY2hpbmVuc2VpXCA7CivlrprlvI/ljJYgPCB0ZWlzaGlraWthXCA7CivllYbmpa3ljJYgPCBzaG91Z3lvdWthXCA7CivkuIDovKrou4ogPCBpY2hpcmluc2hhXCA7Civlip/liKnkuLvnvqkgPCBrb3VyaXNodWdpXCA7Civmu7Lngq3pi7wgPCBzaGludGFua291XCA7Civou43nlKjniqwgPCBndW4nJ3lvdWtlblwgOwor5YWt6KeS5aCCIDwgcm9ra2FrdWRvdVwgOwor5bqK5pqW5oi/IDwgeXVrYWRhbmJvdVwgOwor562G5LiN57K+IDwgZnVkZWJ1c2hvdVwgOwor5rW354eVIDwgdW1pdHN1YmFtZVwgOwor5YWs6Ki85Lq6IDwga291c2hvdW5pblwgOwor6KaP5Yi257ep5ZKMIDwga2lzZWlrYW53YVwgOwor54mn6I2J5ZywIDwgYm9rdXNvdWNoaVwgOwor5bGe5oCn5YCkIDwgem9rdXNlaWNoaVwgOwor6Kej5q+S6JasIDwgZ2Vkb2t1eWFrdVwgOwor5rqA5pyf5pelIDwgbWFua2lqaXRzdVwgOwor5ZCN5L2c6YG4IDwgbWVpc2FrdXNlblwgOwor5aaC5piv5oiR6IGeIDwgbnlvemVnYW1vblwgOwor5piO5rK75pmC5LujIDwgbWVpamlqaWRhaVwgOwor5ZWG55So5paHIDwgc2hvdXlvdWJ1blwgOwor5ZCM5YyW5L2c55SoIDwgZG91a2FzYXlvdVwgOwor5Zu96Kqe5a2mIDwga29rdWdvZ2FrdVwgOwor5Y+v5Y+K55qEIDwga2FreXV1dGVraVwgOwor5Yil6YCU6aCQ6YeRIDwgYmV0dG95b2tpblwgOwor6YeR6KKLIDwga2FuYWJ1a3Vyb1wgOwor5YaZ55yf54+tIDwgc2hhc2hpbmhhblwgOwor5rK56JmrIDwgYWJ1cmFtdXNoaVwgOwor5LiA5YWD6KuWIDwgaWNoaWdlbnJvblwgOwor5LiL56iu5qC55oCnIDwgZ2VzdWtvbmpvdVwgOwor6Kq/5Ymk5birIDwgY2hvdXphaXNoaVwgOwor5Y2Y5LiJ5b2iIDwgdGFuc2FuZ2F0YVwgOwor55Sy5YaR5birIDwga2F0Y2h1dXNoaVwgOwor5YWI5Lu76ICFIDwgc2VuJyduaW5zaGFcIDsKK+absue3mue+jiA8IGt5b2t1c2VuYmlcIDsKK+mKgOeLkCA8IGdpbmdpdHN1bmVcIDsKK+WNl+miqCA8IG1pbmFtaWthemVcIDsKK+WFrOe0hOaVsCA8IGtvdXlha3VzdXVcIDsKK+eGseeLguiAhSA8IG5la2t5b3VzaGFcIDsKK+awtOe0i+WtpiA8IHN1aW1vbmdha3VcIDsKK+S6uueoruWtpiA8IGppbnNodWdha3VcIDsKK+aui+W/jeaApyA8IHphbicnbmluc2VpXCA7Civmj7TliqnkuqTpmpsgPCBlbmpva291c2FpXCA7CivomZDmrrogPCBneWFrdXNhdHN1XCA7Civnm7jplqLnmoQgPCBzb3VrYW50ZWtpXCA7CivlhpnnnJ/niYggPCBzaGFzaGluYmFuXCA7CivnlJ/mga/lnLAgPCBzZWlzb2t1Y2hpXCA7Civlm73kvJrorbDlk6EgPCBrb2trYWlnaWluXCA7CivlnJ/lnLDliKnnlKggPCB0b2NoaXJpeW91XCA7Civnn6XmgKfnmoQgPCBjaGlzZWl0ZWtpXCA7CivmoITmnq/nm5voobAgPCBlaWtvc2Vpc3VpXCA7CivmnKrnmbrpgZQgPCBtaWhhdHRhdHN1XCA7CivplovluZXmiKYgPCBrYWltYWt1c2VuXCA7Civnm7jkupLkvZznlKggPCBzb3Vnb3NheW91XCA7CivmsLTpj6EgPCBtaXp1a2FnYW1pXCA7CivoiJ7lj7DooaPoo4UgPCBidXRhaWlzaG91XCA7CivlvozphY3moKogPCBrb3VoYWlrYWJ1XCA7CivlgZzms4rlnLAgPCB0ZWloYWt1Y2hpXCA7CivnvbnmgqPnjocgPCByaWthbnJpdHN1XCA7CivpgLLooYzlvaIgPCBzaGlua291a2VpXCA7CivpgZPlvrPkuIogPCBkb3V0b2t1am91XCA7CivnpL7kvJrnmoQgPCBzaGFrYWl0ZWtpXCA7CivpnIfmupDlnLAgPCBzaGluZ2VuY2hpXCA7CivmmJ/pm7LoqqwgPCBzZWl1bnNldHN1XCA7CivmsrPljp/ogIUgPCBrYXdhcmFtb25vXCA7CivmurrmrbvogIUgPCBkZWtpc2hpc2hhXCA7CivmtbfllYbms5UgPCBrYWlzaG91aG91XCA7CivnkIbpq6rlupcgPCByaWhhdHN1dGVuXCA7Civpnanlkb3ou40gPCBrYWt1bWVpZ3VuXCA7CivmtLvniakgPCBrYXRzdWJ1dHN1XCA7CivljbXphZIgPCB0YW1hZ296YWtlXCA7CivlkIjorbDliLbluqYgPCBnb3VnaXNlaWRvXCA7Civmm7joqozlraYgPCBzaG9zaGlnYWt1XCA7CivkuozphbjljJbnoavpu4QgPCBuaXNhbmthaW91XCA7CivnkIbpq6rluKsgPCByaWhhdHN1c2hpXCA7CivkuJbkv5flv4MgPCBzZXpva3VzaGluXCA7Civpganku7vogIUgPCB0ZWtpbmluc2hhXCA7CivlpInlnKfmiYAgPCBoZW4nJ2F0c3Vqb1wgOwor5ryi5rCR5pePIDwga2FubWluem9rdVwgOwor6YGp55So5oCnIDwgdGVraXlvdXNlaVwgOwor6YO96bOlIDwgbWl5YWtvZG9yaVwgOwor5rG66KOCIDwga2V0c3VyZXRzdVwgOwor6Jas566xIDwga3VzdXJpYmFrb1wgOwor6bqm55WRIDwgbXVnaWJhdGFrZVwgOwor6ZuM6ZuE55Ww5qCqIDwgc2hpeXV1aXNodVwgOwor55u06KuH5YikIDwgamlrYWRhbnBhblwgOwor6IOM5L+h6ICFIDwgaGFpc2hpbnNoYVwgOwor562G6ICV5paZIDwgaGlra291cnlvdVwgOwor5Lyd5rOV6IKMIDwgZGVuYm91aGFkYVwgOwor57mK5q+b6JmrIDwgc2VubW91Y2h1dVwgOwor56u25aOy5Lq6IDwga3lvdWJhaW5pblwgOwor5L2c6Kme6ICFIDwgc2FrdXNoaXNoYVwgOwor6buS5ryGIDwga29rdXNoaXRzdVwgOwor5a6J5q276KGTIDwgYW5zaGlqdXRzdVwgOwor5ZaJ5LuPIDwgbm9kb2JvdG9rZVwgOwor5Y+N5bCE6Kqk5beuIDwgaGFuc2hhZ29zYVwgOwor5aGp57Sg6YW45aGpIDwgZW5zb3NhbicnZW5cIDsKK+apn+WLleWKmyA8IGtpZG91cnlva3VcIDsKK+e1tuWvvuiqpOW3riA8IHpldHRhaWdvc2FcIDsKK+acgOe1guWbniA8IHNhaXNodXVrYWlcIDsKK+S4u+imgeWbvSA8IHNodXlvdWtva3VcIDsKK+WPjemZveWtkCA8IGhhbicneW91c2hpXCA7CivlhoXlkJHnmoQgPCBuYWlrb3V0ZWtpXCA7CivpmLLmva7loKQgPCBib3VjaG91dGVpXCA7CivnianmkI3kuovmlYUgPCBidXNzb25qaWtvXCA7CivmtrLmmbbnm6QgPCBla2lzaG91YmFuXCA7CivnpZ7ntYzmiKYgPCBzaGlua2Vpc2VuXCA7Civpu4TlhavkuIggPCBraWhhY2hpam91XCA7Civooajkuozpmo4gPCBvbW90ZW5pa2FpXCA7CivoqabpqJPnmoQgPCBzaGlrZW50ZWtpXCA7CivlsaDmrrrloLQgPCB0b3NhdHN1am91XCA7Civml4XmlK/luqYgPCB0YWJpaml0YWt1XCA7Civlhajpg6jkv53pmbogPCB6ZW5idWhva2VuXCA7Civph5Hogb4gPCBrYW5hdHN1bmJvXCA7Civmm7jnsKHpm4YgPCBzaG9rYW5zaHV1XCA7CivllrbmnpflsYAgPCBlaXJpbmt5b2t1XCA7CivnhKHph43lipsgPCBtdWp1dXJ5b2t1XCA7CivpgbrlpLHogIUgPCBpc2hpdHN1c2hhXCA7Civmgqrlt6vlsbHmiK8gPCB3YXJ1ZnV6YWtlXCA7CivmlbTlvaLlpJbnp5EgPCBzZWlrZWlnZWthXCA7CivnlJ/lvpfmqKkgPCBzZWl0b2t1a2VuXCA7CivnsbPpqJLli5UgPCBrb21lc291ZG91XCA7CivmlrDkvZPliLYgPCBzaGludGFpc2VpXCA7CivooYDmuIXlraYgPCBrZXNzZWlnYWt1XCA7Civpg6jplbfplrIgPCBidWNob3VldHN1XCA7CivlpJzmg7Pmm7IgPCB5YXNvdWt5b2t1XCA7CivmrablrrbmlL/mqKkgPCBidWtlc2Vpa2VuXCA7CivmpoLlv7XnmoQgPCBnYWluZW50ZWtpXCA7CivnqbrkuK3mqKkgPCBrdXVjaHV1a2VuXCA7CivkuozpoIXliIbluIMgPCBuaWtvdWJ1bnB1XCA7CivlkajpgYrliLggPCBzaHV1eXV1a2VuXCA7CivlibXkvZzogIUgPCBzb3VzYWt1c2hhXCA7CivlkKvns5bph48gPCBnYW50b3VyeW91XCA7CivlgLnntITlrrYgPCBrZW4nJ3lha3VrYVwgOwor5Ye65by15omAIDwgc2h1dGNob3Vqb1wgOwor5pig55S75Lya56S+IDwgZWlnYWdhaXNoYVwgOwor566h55CG6IG3IDwga2FucmlzaG9rdVwgOwor6YmE56Cy55m+5ZCIIDwgdGVwcG91eXVyaVwgOwor5oGQ5oCW55eHIDwga3lvdWZ1c2hvdVwgOwor5pS/55Wl5a62IDwgc2Vpcnlha3VrYVwgOwor5YWs6KGG57ayIDwga291c2h1dW1vdVwgOwor5YWl5aC05qipIDwgbnl1dWpvdWtlblwgOwor5ZCN6KqJ5Lya5ZOhIDwgbWVpeW9rYWlpblwgOwor552j5oim6ZqKIDwgdG9rdXNlbnRhaVwgOwor5Y2D57696ba0IDwgc2VuYmFkenVydVwgOwor5L2P5a6F5ZywIDwganV1dGFrdWNoaVwgOwor5b+c5Yuf55So57SZIDwgb3Vib3lvdXNoaVwgOwor5YaF5oOR5pifIDwgbmFpd2FrdXNlaVwgOwor55yf5q2j55u0IDwgbWFzaG91amlraVwgOwor5a2j56+A6aKoIDwga2lzZXRzdWZ1dVwgOwor5L2O5a2m5bm0IDwgdGVpZ2FrdW5lblwgOwor5a2m57GN57C/IDwgZ2FrdXNla2lib1wgOwor56uL5L2T6Y+hIDwgcml0dGFpa3lvdVwgOwor5LqM6aCF5byPIDwgbmlrb3VzaGlraVwgOwor55m+5pel57SFIDwgc2FydXN1YmVyaVwgOwor6LuN55Wl5a62IDwgZ3Vucnlha3VrYVwgOwor6Ieq5rWE5L2c55SoIDwgamlqb3VzYXlvdVwgOwor5rCR6K2a6ZuGIDwgbWluZGFuc2h1dVwgOwor5oWw5ZWP6KKLIDwgaW1vbmJ1a3Vyb1wgOwor5raI55+z54GwIDwgc2hvdXNla2thaVwgOwor5Y2Y5LiA5YyWIDwgdGFuJydpdHN1a2FcIDsKK+WwgueUqOi7iiA8IHNlbicneW91c2hhXCA7Civku5XoiJ7niakgPCBzaGltYWltb25vXCA7CivlpKfnmb3ps6UgPCBvb2hha3VjaG91XCA7Civnt6nlvpDmm7IgPCBrYW5qb2t5b2t1XCA7CivliIDliaPllYYgPCB0b3VrZW5zaG91XCA7CivkvL3oip3lsYUgPCB0b2dpc2hpYmFpXCA7CivlpJbosqjpoJDph5EgPCBnYWlrYXlva2luXCA7CivmsJfosaHluoEgPCBraXNob3VjaG91XCA7CivkuIDlhobnjokgPCBpY2hpZW5kYW1hXCA7CivmgZDmgJbmmKDnlLsgPCBreW91ZnVlaWdhXCA7CivoqrLnqI7mjqfpmaQgPCBrYXplaWtvdWpvXCA7Civlt6HmtIvoiaYgPCBqdW4nJ3lvdWthblwgOwor5b+F6ZyA5ZOBIDwgaGl0c3VqdWhpblwgOwor5LiN5L+h55SoIDwgZnVzaGluJyd5b3VcIDsKK+a4rOWcsOe3miA8IHNva3VjaGlzZW5cIDsKK+mrmOacqOWxpCA8IGtvdWJva3Vzb3VcIDsKK+ioseWuueiqpOW3riA8IGt5b3lvdWdvc2FcIDsKK+ihqOWxpOaApyA8IGh5b3Vzb3VzZWlcIDsKK+awtOiWrCA8IG1penVndXN1cmlcIDsKK+WHuuW4reewvyA8IHNodXNzZWtpYm9cIDsKK+imqueOi+WmgyA8IHNoaW4nJ25vdWhpXCA7CivphY3ntabns7sgPCBoYWlreXV1a2VpXCA7CivlpInlnKflmaggPCBoZW4nJ2F0c3VraVwgOwor5a6f5L2T6Y+hIDwgaml0dGFpa3lvdVwgOwor5YSq5Yud5p2vIDwgeXV1c2hvdWhhaVwgOwor6YGp5LiN6YGpIDwgdGVraWZ1dGVraVwgOwor5LiN5a6a5pyf5YiRIDwgZnV0ZWlraWtlaVwgOwor56S+5Lqk55qEIDwgc2hha291dGVraVwgOwor6YWN57Wm57GzIDwgaGFpa3l1dW1haVwgOwor5pu46KiY5bGAIDwgc2hva2lreW9rdVwgOwor6LSI5Y+O6LOEIDwgem91c2h1dXdhaVwgOwor5Ye45Ye557SZIDwgdG90c3VvdXNoaVwgOwor6KOB5Yik5Lq6IDwgc2FpYmFuJyduaW5cIDsKK+S7iumBk+W/gyA8IGltYWRvdXNoaW5cIDsKK+aYjuayu+e2reaWsCA8IG1laWppaXNoaW5cIDsKK+e0ueS7i+iAhSA8IHNob3VrYWlzaGFcIDsKK+iogOiqnuapn+iDvSA8IGdlbmdva2lub3VcIDsKK+S/neeojuWAieW6qyA8IGhvemVpc291a29cIDsKK+awl+ixoeWtpiA8IGtpc2hvdWdha3VcIDsKK+ebuOe2muS6uiA8IHNvdXpva3VuaW5cIDsKK+iiq+WRiuW4rSA8IGhpa29rdXNla2lcIDsKK+S5s+iEguiCqiA8IG55dXVzaGlib3VcIDsKK+i+sueJp+WcsCA8IG5vdWJva3VjaGlcIDsKK+WMu+eZguapn+mWoiA8IGlyeW91a2lrYW5cIDsKK+aCquaIr+WtkCA8IGl0YXp1cmFra29cIDsKK+WwhOeahOWgtCA8IHNoYXRla2lqb3VcIDsKK+azieeGsSA8IGl6dW1pbmV0c3VcIDsKK+azleWtpuiAhSA8IGhvdWdha3VzaGFcIDsKK+WFqOWbvee0mSA8IHplbmtva3VzaGlcIDsKK+aVkembo+iIuSA8IGt5dXVuYW5zZW5cIDsKK+mHkeiejeWCtSA8IGtpbicneXV1c2FpXCA7Civnn7PkupXogbDkupIgPCBpc2hpaXNvdWdvXCA7Civou43kuovlsIHpjpYgPCBndW5qaWZ1dXNhXCA7CivkuIrovInlnKcgPCBqb3VzYWlhdHN1XCA7Civlj6PllqflmKkgPCBrdWNoaWdlbmthXCA7CivmiJDkurrnl4UgPCBzZWlqaW5ieW91XCA7CivoirHmsLTmnKggPCBoYW5hbWl6dWtpXCA7CivpgKDlnJLooZMgPCB6b3Vlbmp1dHN1XCA7CivkubPohbrngo4gPCBueXV1c2VuJydlblwgOwor5L2N6ZqO5Yuy562JIDwgaWthaWt1bnRvdVwgOwor5rW05a6kIDwgeW9rdXNoaXRzdVwgOwor5rW35rWB55O2IDwga2Fpcnl1dWJpblwgOwor5YiG5YWJ5a2mIDwgYnVua291Z2FrdVwgOwor5rCR5Li755qEIDwgbWluc2h1dGVraVwgOwor57K+55m957OWIDwgc2VpaGFrdXRvdVwgOwor54Sh5qmf6LOqIDwgbXVraXNoaXRzdVwgOwor5oSb5aiYIDwgbWFuYW11c3VtZVwgOwor6YCa6Kmx5paZIDwgdHN1dXdhcnlvdVwgOwor6ICQ54Gr54WJ55OmIDwgdGFpa2FyZW5nYVwgOwor5pS56Imv5ZOBIDwga2FpcnlvdWhpblwgOwor57K+55m957GzIDwgc2VpaGFrdW1haVwgOwor5b+r5YmK6Yu8IDwga2Fpc2FrdWtvdVwgOwor5pel5ZCR5rC0IDwgaGluYXRhbWl6dVwgOwor5Y+k54u4IDwgZnVydWRhbnVraVwgOwor6Zmq5a+p5ZOhIDwgYmFpc2hpbicnaW5cIDsKK+WPpOS7iueEoemhniA8IGtva29ubXVydWlcIDsKK+W4q+Wbo+mVtyA8IHNoaWRhbmNob3VcIDsKK+e1hOiBt+S9kyA8IHNvc2hva3V0YWlcIDsKK+aenOWun+mFkiA8IGthaml0c3VzaHVcIDsKK+Wpv+mkiuWtkCA8IG11a295b3VzaGlcIDsKK+WGmeecn+W4qyA8IHNoYXNoaW5zaGlcIDsKK+mbu+azoueuoeeQhiA8IGRlbnBha2FucmlcIDsKK+ays+eDjyA8IGthd2FnYXJhc3VcIDsKK+S4i+aknOafuyA8IHNoaXRha2Vuc2FcIDsKK+WEquWLneaIpiA8IHl1dXNob3VzZW5cIDsKK+engeWumyA8IHdhdGFzaGlhdGVcIDsKK+mAo+e2muS9kyA8IHJlbnpva3V0YWlcIDsKK+WkqeWIkeeXhSA8IHRlbmtlaWJ5b3VcIDsKK+awkeS6i+S6i+S7tiA8IG1pbmppamlrZW5cIDsKK+WNiue/heebriA8IGhhbnNoaW1va3VcIDsKK+iMtueVquWKhyA8IGNoYWJhbmdla2lcIDsKK+iHqueEtuS/neittyA8IHNoaXplbmhvZ29cIDsKK+WGmeecn+WxiyA8IHNoYXNoaW4nJ3lhXCA7CivnlLvlg4/lh6bnkIYgPCBnYXpvdXNob3JpXCA7Civoia/lsI7kvZMgPCByeW91ZG91dGFpXCA7CivmlZHkuJbkuLsgPCBreXV1c2Vpc2h1XCA7CivmnKrnnYDmiYsgPCBtaWNoYWt1c2h1XCA7CivkvZzoqanms5UgPCBzYWt1c2hpaG91XCA7CivnnJ/prZrpsLkgPCBtYW5hZ2F0c3VvXCA7Civlh7rlvLXlk6EgPCBzaHV0Y2hvdWluXCA7Civkurrlipvou4ogPCBqaW5yaWtpc2hhXCA7CivnqK7nqK7pm5HlpJogPCBzaHVqdXphdHRhXCA7Civlv4XnvbAgPCBoaXRzdWJhdHN1XCA7CivnpZ3ml6UgPCBzaHVrdWppdHN1XCA7Civlm73pmpvkurogPCBrb2t1c2FpamluXCA7CivmuKzplbfmqZ8gPCBzb2t1Y2hvdWtpXCA7CivlsI/kuLvoprMgPCBzaG91c2h1a2FuXCA7CivmmKDnlLvkv7PlhKogPCBlaWdhaGFpeXV1XCA7Civlrp/ot7XnmoQgPCBqaXNzZW50ZWtpXCA7CivpgKPntZDlmaggPCByZW5rZXRzdWtpXCA7CivogJDkuYXmgKcgPCB0YWlreXV1c2VpXCA7CivmnYnkuKbmnKggPCBzdWdpbmFtaWtpXCA7CivntYLkuoblvowgPCBzaHV1cnlvdWdvXCA7CivlpKnpgZPmp5ggPCB0ZW50b3VzYW1hXCA7CivlkIrmqYsgPCB0c3VyaWJhc2hpXCA7Civmkq7lvbHpmoogPCBzYXRzdWVpdGFpXCA7CivoirHoj5bokrIgPCBoYW5hc2hvdWJ1XCA7CivmpJznnLzpj6EgPCBrZW5nYW5reW91XCA7CivlvaLoqLEgPCBrYXRhYmFrYXJpXCA7CivphbjljJbniakgPCBzYW5rYWJ1dHN1XCA7Civms6LmnpUgPCBuYW1pbWFrdXJhXCA7CivlsI/kvZzmlpkgPCBrb3Nha3VyeW91XCA7CivlurbmsJHnmoQgPCBzaG9taW50ZWtpXCA7CivovKroiJ7mm7IgPCByaW5idWt5b2t1XCA7Civno4HmsJfpjLLpn7MgPCBqaWtpcm9rdW9uXCA7CivkuI3ljZTlkozpn7MgPCBmdWt5b3V3YW9uXCA7Civlh43ntZDlmaggPCB0b3VrZXRzdWtpXCA7CivlpI/onJzmn5EgPCBuYXRzdW1pa2FuXCA7CivmnKzkvY3oqJjlj7cgPCBob24nJ2lraWdvdVwgOwor562J5pa555qEIDwgdG91aG91dGVraVwgOwor6KGb55Sf566h55CGIDwgZWlzZWlrYW5yaVwgOwor5bKp5riF5rC0IDwgaXdhc2hpbWl6dVwgOwor56uL5qGI6ICFIDwgcml0c3VhbnNoYVwgOwor55u45LqS5Li7576pIDwgc291Z29zaHVnaVwgOwor6JGX6L+w5a62IDwgY2hvanV0c3VrYVwgOwor6ISz5qKF5q+SIDwgbm91YmFpZG9rdVwgOwor6LuN55So5ZOBIDwgZ3VuJyd5b3VoaW5cIDsKK+W/nOWLn+izh+mHkSA8IG91Ym9zaGlraW5cIDsKK+WDleS7sumWkyA8IGJva3VuYWthbWFcIDsKK+mbo+imluiBtCA8IG5hbnNoaWNob3VcIDsKK+W+qeWPpOS4u+e+qSA8IGZ1a2tvc2h1Z2lcIDsKK+W+s+e+qeW/gyA8IHRva3VnaXNoaW5cIDsKK+i/kea1t+eJqSA8IGtpbmthaW1vbm9cIDsKK+adsea0i+mAmiA8IHRvdXlvdXRzdXVcIDsKK+asoeS6nOehq+mFuCA8IGppYXJ5dXVzYW5cIDsKK+W5s+WuieaZguS7oyA8IGhlaWFuamlkYWlcIDsKK+mJhOegsueOiSA8IHRlcHBvdWRhbWFcIDsKK+awtOenpCA8IG1penViYWthcmlcIDsKK+a1geWksSA8IHJ5dXVzaGl0c3VcIDsKK+S+oeagvOihqCA8IGtha2FrdWh5b3VcIDsKK+iqv+WBnOiAhSA8IGNob3V0ZWlzaGFcIDsKK+attOWPsuimsyA8IHJla2lzaGlrYW5cIDsKK+W7uuevieiyuyA8IGtlbmNoaWt1aGlcIDsKK+mJi+WxkSA8IGthbicnbmFrdXp1XCA7Civkurrmg4XliocgPCBuaW5qb3VnZWtpXCA7Civoj7HppIUgPCBoaXNoaW1vY2hpXCA7CivlpJrnpZ7mlZkgPCB0YXNoaW5reW91XCA7Civmg4XloLHmqZ/lmaggPCBqb3Vob3VraWtpXCA7CivliY3lk6jlnLAgPCB6ZW5zaG91Y2hpXCA7CivkuInkvY3kuIDkvZMgPCBzYW5taWl0dGFpXCA7CivmlL/li5nmrKHlrpggPCBzZWltdWppa2FuXCA7CivlkInml6UgPCBraWNoaW5pY2hpXCA7CivkuIDluqbkuIggPCBpY2hpZG9kYWtlXCA7CivolqzmjIcgPCBrdXN1cml5dWJpXCA7CivpgKPntaHkvJogPCByZW5yYWt1a2FpXCA7CivkuIDoiKzogbcgPCBpcHBhbnNob2t1XCA7Civpm4zpm4TnlbDkvZMgPCBzaGl5dXVpdGFpXCA7CivnpL7kvJrlraYgPCBzaGFrYWlnYWt1XCA7CivlgbXlr5/mqZ8gPCB0ZWlzYXRzdWtpXCA7Civlr53lj7Dou4ogPCBzaGluZGFpc2hhXCA7CivlubTku6PniakgPCBuZW5kYWltb25vXCA7CivkuKHmm7/kurogPCByeW91Z2FlbmluXCA7CivlkITmlrkgPCBvbm9vbm9nYXRhXCA7Civmrabmlq3mlL/msrsgPCBidWRhbnNlaWppXCA7CivlkIjmoLzogIUgPCBnb3VrYWt1c2hhXCA7Civph5Hmp4wgPCBrYW5hZHp1Y2hpXCA7CivlsILnlKjnt5ogPCBzZW4nJ3lvdXNlblwgOwor5biv5Z+f5bmFIDwgdGFpaWtpaGFiYVwgOwor5Yid5LiA5b+1IDwgc2hvaWNoaW5lblwgOwor57S55LuL54q2IDwgc2hvdWthaWpvdVwgOwor5raI5q+S5ZmoIDwgc2hvdWRva3VraVwgOwor5pem6YKj6KGGIDwgZGFuJyduYXNodXVcIDsKK+WgheS/oeekvCA8IGtlbnNoaW5yZWlcIDsKK+WumOWFrOW6gSA8IGthbmtvdWNob3VcIDsKK+iBtOiBnuWDpyA8IGNob3Vtb25zb3VcIDsKK+WkquW5s+alvSA8IHRhaWhlaXJha3VcIDsKK+S4oeWkqeenpCA8IHJ5b3V0ZW5iaW5cIDsKK+WtlOmbgOefsyA8IGt1amFrdXNla2lcIDsKK+WJteS9nOaoqSA8IHNvdXNha3VrZW5cIDsKK+iJsuS6i+W4qyA8IGlyb2dvdG9zaGlcIDsKK+mFuOWMlueCree0oCA8IHNhbmthdGFuc29cIDsKK+awtOW9qeeUu+WutiA8IHN1aXNhaWdha2FcIDsKK+mZjemtlOihkyA8IGtvdW1hanV0c3VcIDsKK+Wwkeizh+acrCA8IHNob3VzaGlob25cIDsKK+izh+eUo+agqiA8IHNoaXNhbmthYnVcIDsKK+WfuuekjuS7o+isnSA8IGtpc290YWlzaGFcIDsKK+aBkOaAluW/gyA8IGt5b3VmdXNoaW5cIDsKK+Wun+mok+eahCA8IGppa2tlbnRla2lcIDsKK+S9v+W+kumBlCA8IHNoaXRvdGFjaGlcIDsKK+WJjemgrSA8IG1hZWdhc2hpcmFcIDsKK+WuiemFkuWgtCA8IHlhc3VzYWthYmFcIDsKK+iBtOiBnuS8miA8IGNob3Vtb25rYWlcIDsKK+iCsuWFkOmjnyA8IGlrdWppc2hva3VcIDsKK+eUt+S+v+aJgCA8IG90b2tvYmVuam9cIDsKK+mmluWun+aknCA8IGt1YmlqaWtrZW5cIDsKK+e0sOiDnuiGnCA8IHNhaWJvdW1ha3VcIDsKK+WQjeS6uuiCjCA8IG1laWppbmhhZGFcIDsKK+Wwj+WtpuagoSA8IHNob3VnYWtrb3VcIDsKK+S4gOadr+apn+WrjCA8IGlwcGFpa2lnZW5cIDsKK+aXp+iXqeS4uyA8IGt5dXVoYW5zaHVcIDsKK+awkeacieaelyA8IG1pbicneXV1cmluXCA7CivotaTpiYTpibEgPCBzZWtpdGVra291XCA7CivmnKzojYnlraYgPCBob256b3VnYWt1XCA7Civkv67mraPogIUgPCBzaHV1c2Vpc2hhXCA7CivpoqjpgJ/oqIggPCBmdXVzb2t1a2VpXCA7CivpgZPot6/ovLjpgIEgPCBkb3Vyb3l1c291XCA7CivmvZzlnKjnmoQgPCBzZW56YWl0ZWtpXCA7CivlpInmi43lrZAgPCBoZW5ieW91c2hpXCA7Civml6fmgJ3mg7MgPCBreXV1c2hpc291XCA7CivkupznhrHluK/mnpcgPCBhbmV0dGFpcmluXCA7Civpm5HmnKjmnpcgPCB6b3Vib2t1cmluXCA7CivmiKbpl5jnmoQgPCBzZW50b3V0ZWtpXCA7CivpnZLmga/lkJDmga8gPCBhb2lraXRvaWtpXCA7CivntYLpm7vou4ogPCBzaHV1ZGVuc2hhXCA7Civog4znvo7pr6ggPCBzZW1pa3VqaXJhXCA7CivmhYfmh4PnhKHnpLwgPCBpbmdpbmJ1cmVpXCA7CivnqbTmnZPlrZAgPCBhbmFqYWt1c2hpXCA7CivkuIDlubTkuK0gPCBpY2hpbmVuanV1XCA7CivpiYTnoLLmsLQgPCB0ZXBwb3VtaXp1XCA7Civlhajlm73msJEgPCB6ZW5rb2t1bWluXCA7Civkurrlj6PlraYgPCBqaW5rb3VnYWt1XCA7CivmtYHlh7ogPCByeXV1c2h1dHN1XCA7CivmtLvlipsgPCBrYXRzdXJ5b2t1XCA7Civnm7Tmu5HpmY0gPCBjaG9ra2Fra291XCA7Civns57nnJ/pnaLnm64gPCBrdXNvbWFqaW1lXCA7CivkuIrnlLPmm7ggPCBqb3VzaGluc2hvXCA7CivljbXnhLwgPCB0YW1hZ295YWtpXCA7Civph53ljYPmnKwgPCBoYXJpc2VuYm9uXCA7Civoh6rkuLvopo/liLYgPCBqaXNodWtpc2VpXCA7CivkuInmpa3lnLAgPCBzYW5neW91Y2hpXCA7CivkuKblpKfmirUgPCBuYW1pdGFpdGVpXCA7Civnmb3pm7Lnn7MgPCBoYWt1dW5zZWtpXCA7CivmsLTnhZkgPCBtaXp1a2VtdXJpXCA7CivmrKDluK3ogIUgPCBrZXNzZWtpc2hhXCA7CivlvJXlvZPph5EgPCBoaWtpYXRla2luXCA7Civoo4Xpo77pn7MgPCBzb3VzaG9rdW9uXCA7CivoppbogbTogIUgPCBzaGljaG91c2hhXCA7CivkubPoh63lhZAgPCBueXV1c2h1dWppXCA7CivmiYvmsqLmnKwgPCBzaHV0YWt1Ym9uXCA7CivorabmiJLlv4MgPCBrZWlrYWlzaGluXCA7CivlvKXnlJ/mmYLku6MgPCB5YXlvaWppZGFpXCA7CivkuK3lm73oqp4gPCBjaHV1Z29rdWdvXCA7CivlhaXmiYvpm6MgPCBueXV1c2h1bmFuXCA7Civpm7vmtYHoqIggPCBkZW5yeXV1a2VpXCA7CivpgZPpgZMgPCBtaWNoaW1pY2hpXCA7CivkuojlgpnkvJroq4cgPCB5b2Jpa2FpZGFuXCA7CivlkJvkuLvlm70gPCBrdW5zaHVrb2t1XCA7Civpn7Pmpb3lraYgPCBvbmdha3VnYWt1XCA7CivpjK/lrZfnl4cgPCBzYWt1amlzaG91XCA7CivnrYnkvY3mp4vpgKAgPCB0b3Vpa291em91XCA7CivlpKfnm6Tnn7MgPCBkYWliYW5qYWt1XCA7CivliIblrZDph48gPCBidW5zaGlyeW91XCA7CivkuIDnlarojLYgPCBpY2hpYmFuY2hhXCA7Civku5bmtYHoqablkIggPCB0YXJ5dXVqaWFpXCA7Civlronlrprmk43kvZwgPCBhbnRlaXNvdXNhXCA7CivnhKHlhJ/ooYzngrogPCBtdXNob3Vrb3VpXCA7CivpgYXliLvogIUgPCBjaGlrb2t1c2hhXCA7Civlho3nmbrotrMgPCBzYWlob3Nzb2t1XCA7Civlr77ouaDnmoQgPCB0YWlzaG90ZWtpXCA7CivlpI/mnJ/lrabmoKEgPCBrYWtpZ2Fra291XCA7Civmp43ooZPlrrYgPCBzb3VqdXRzdWthXCA7CivmrYzorKHmm7IgPCBrYXlvdWt5b2t1XCA7CivmtLvkurrnlLsgPCBrYXRzdWppbmdhXCA7CivkuozoqIDnm64gPCBmdXRha290b21lXCA7Civljp/lrZDph48gPCBnZW5zaGlyeW91XCA7CivlvLfohbAgPCB0c3V5b2dvc2hpXCA7CivlpKfluYXniakgPCBvb2hhYmFtb25vXCA7Civni6zlpY/kvJogPCBkb2t1c291a2FpXCA7CivliJ3pnJwgPCBoYXRzdXNoaW1vXCA7CivlroflrpnljLvlraYgPCB1Y2h1dWlnYWt1XCA7CivlkI3oqonpmaTpmoogPCBtZWl5b2pvdGFpXCA7CivkupToh5Plha3ohZEgPCBnb3pvdXJvcHB1XCA7Civlj7Plt6YgPCBtaWdpaGlkYXJpXCA7CivohLHoh63liaQgPCBkYXNzaHV1emFpXCA7Civlv6vpgJ/oiLkgPCBrYWlzb2t1c2VuXCA7CivnlJ/mrpblmaggPCBzZWlzaG9rdWtpXCA7Civou4rkuK3oq4cgPCBzaGFjaHV1ZGFuXCA7Civpjq7pnZnliaQgPCBjaGluc2VpemFpXCA7CivlkIjkvbXnl4cgPCBnYXBwZWlzaG91XCA7Civmh4fopqrkvJogPCBrb25zaGlua2FpXCA7CivnnYDpm6ogPCBjaGFrdXNldHN1XCA7Civlv4Xmu4UgPCBoaXRzdW1ldHN1XCA7Civnib3niZvmmJ8gPCBrZW5neXV1c2VpXCA7Civln7fooYzlp5Tlk6EgPCBzaGlra291aWluXCA7Civph4zlv4MgPCBzYXRvZ29rb3JvXCA7Civlm5vpnaLmpZrmrYwgPCBzaGltZW5zb2thXCA7CivojLbmn4TmnZMgPCBjaGFiaXNoYWt1XCA7CivmnInnpZ7oq5YgPCB5dXVzaGlucm9uXCA7Civlkb3kuK3mlbAgPCBtZWljaHV1c3V1XCA7Civmlrnop6Pnn7MgPCBob3VrYWlzZWtpXCA7Civlo7Lmjpvph5EgPCB1cmlrYWtla2luXCA7CivotoXlt6jmmJ8gPCBjaG91a3lvc2VpXCA7Civnq4vkvZPnmoQgPCByaXR0YWl0ZWtpXCA7Civnmb3mmLzlpKIgPCBoYWt1Y2h1dW11XCA7CivmlrDoqJjpjLIgPCBzaGlua2lyb2t1XCA7Civkv53ph4jph5EgPCBob3NoYWt1a2luXCA7Civlj43nspLlrZAgPCBoYW5yeXV1c2hpXCA7CivkuIvotrPmlpkgPCBnZXNva3VyeW91XCA7Civms6jmlofmm7ggPCBjaHV1bW9uc2hvXCA7CivlqIHpoqjloILloIIgPCBpZnV1ZG91ZG91XCA7CivljJblkIjniakgPCBrYWdvdWJ1dHN1XCA7CivlsYvlvaLoiLkgPCB5YWthdGFidW5lXCA7Civou43kuovkvJrorbAgPCBndW5qaWthaWdpXCA7Civot5vooYzmma/msJcgPCBoYWtvdWtlaWtpXCA7CivpgYvli5XlipsgPCB1bmRvdXJ5b2t1XCA7Civpipjpipjnmr8gPCBtZWltZWl6YXJhXCA7Civpu5Lmm5zlsqkgPCBrb2t1eW91Z2FuXCA7Civljp/kvZzogIUgPCBnZW5zYWt1c2hhXCA7CivlhbXnq5nlraYgPCBoZWl0YW5nYWt1XCA7CivntLDlr4bnlLsgPCBzYWltaXRzdWdhXCA7CivppYLpo6nnsonnl4UgPCB1ZG9ua29ieW91XCA7CivkuIDnlarnt5ogPCBpY2hpYmFuc2VuXCA7CivljYrkurrliY0gPCBoYW4nJ25pbm1hZVwgOwor5YqH5aC06KGXIDwgZ2VraWpvdWdhaVwgOwor5aSp5LiL5LiA5ZOBIDwgdGVua2FpcHBpblwgOwor5rG66K2w5qipIDwga2V0c3VnaWtlblwgOwor5Z+65Zyw6ZaJ6Y6WIDwga2ljaGloZWlzYVwgOwor6JG156WtIDwgYW9pbWF0c3VyaVwgOwor5LiA5qe95byPIDwgaXNzb3VzaGlraVwgOwor5a6F5oCl5L6/IDwgdGFra3l1dWJpblwgOwor5rK55aO3IDwgYWJ1cmF0c3Vib1wgOwor6ICB5Lq655eFIDwgcm91amluYnlvdVwgOwor562G6KiY55So5YW3IDwgaGlra2l5b3VndVwgOwor6JK45rCX5qmf6ZaiIDwgam91a2lraWthblwgOwor5ZCI5qC854K5IDwgZ291a2FrdXRlblwgOwor5Yi76LazIDwga2l6YW1pYXNoaVwgOwor6Kmm5L6b5ZOBIDwgc2hpa3lvdWhpblwgOwor5Lit5aCF5omLIDwgY2h1dWtlbnNodVwgOwor6JGb6aWF6aCtIDwga3V6dW1hbmp1dVwgOwor5o6l5a6i5ammIDwgc2Vra3lha3VmdVwgOwor5rS75a2X5pysIDwga2F0c3VqaWhvblwgOwor5ZWP6aGM5YqHIDwgbW9uZGFpZ2VraVwgOwor56OB5rCX5oq15oqXIDwgamlraXRlaWtvdVwgOwor6IG06Kyb55SfIDwgY2hvdWtvdXNlaVwgOwor5rC05p6VIDwgbWl6dW1ha3VyYVwgOwor6LO96Yqt566xIDwgc2Fpc2VuYmFrb1wgOwor5o+Q5ZSx6ICFIDwgdGVpc2hvdXNoYVwgOwor5LiB5a2X5a6a6KaPIDwgdGVpamlqb3VnaVwgOwor5Zm06aOv54mpIDwgZnVucGFubW9ub1wgOwor5Zu65a6a6YeR5YipIDwga290ZWlraW5yaVwgOwor5YiG5qW15YyWIDwgYnVua3lva3VrYVwgOwor566h55CG5bGAIDwga2FucmlreW9rdVwgOwor6KeS6YyQ5Y+wIDwga2FrdXN1aWRhaVwgOwor56aP5bKh55yMIDwgZnVrdW9rYWtlblwgOwor54us5aOH5aC0IDwgZG9rdWRhbmpvdVwgOwor5Luy6ZaT6KSSIDwgbmFrYW1hYm9tZVwgOwor6ZqP5oOz6YyyIDwgenVpc291cm9rdVwgOwor5pKu5b2x6ICFIDwgc2F0c3VlaXNoYVwgOwor5aaC6I+p6JapIDwgbnlvYm9zYXRzdVwgOwor5ZG95Lit5by+IDwgbWVpY2h1dWRhblwgOwor55yf5YiG5pWwIDwgc2hpbmJ1bnN1dVwgOwor6bCv6ZuyIDwgaXdhc2hpZ3Vtb1wgOwor6ZuH55So5Li7IDwga295b3VudXNoaVwgOwor5b+D5p+EIDwga29rb3JvZ2FyYVwgOwor6LW35YuV5pmC6ZaTIDwga2lkb3VqaWthblwgOwor5bm7IDwgbWFib3Jvc2hpXCA7CivlsY0gPCBzaGlrYWJhbmVcIDsKK+WtpCA8IG1pbmFzaGlnb1wgOwor54yqIDwgaW5vc2hpc2hpXCA7CivllIcgPCBrdWNoaWJpcnVcIDsKK+aqoyA8IGhvYmFzaGlyYVwgOwor5qmYIDwgdGFjaGliYW5hXCA7CivlhbUgPCB0c3V3YW1vbm9cIDsKK+mKgCA8IHNoaXJvZ2FuZVwgOwor6YKqIDwgeW9rb3NoaW1hXCA7Civlsa/nlLDlhbUgPCB0b25kZW5oZWlcIDsKK+aVtemDqOmaiiA8IHRla2lidXRhaVwgOwor5oq15b2T5qipIDwgdGVpdG91a2VuXCA7CivmnZHlpKvlrZAgPCBzb25wdXVzaGlcIDsKK+iHquW3seasuueeniA8IGppa29naW1hblwgOwor5oWw5a6J5peF6KGMIDwgaWFucnlva291XCA7Civmj5rmsLTou4ogPCB5b3VzdWlzaGFcIDsKK+aVkeaPtOi7jSA8IGt5dXVlbmd1blwgOwor6IKy5q+b5YmkIDwgaWt1bW91emFpXCA7CivnnaboqIAgPCBtdXRzdWdvdG9cIDsKK+WPjuWlqiA8IHNodXVkYXRzdVwgOwor6buS6aCt5be+IDwga3Vyb3p1a2luXCA7Civop6Pmr5LliaQgPCBnZWRva3V6YWlcIDsKK+aBkOWWnSA8IGt5b3VrYXRzdVwgOwor6auY5ae/5YuiIDwga291c2hpc2VpXCA7CivlsYvlj7DlupcgPCB5YXRhaW1pc2VcIDsKK+i1t+ejgeWKmyA8IGtpamlyeW9rdVwgOwor5Y6f55Sf5p6XIDwgZ2Vuc2VpcmluXCA7CivmrbTlj7LnlLsgPCByZWtpc2hpZ2FcIDsKK+ebrumgrSA8IG1lZ2FzaGlyYVwgOwor6I2J6aSgIDwga3VzYW1vY2hpXCA7CivliY3ljYrnlJ8gPCB6ZW5oYW5zZWlcIDsKK+WtmOWcqOirliA8IHNvbnphaXJvblwgOwor5YqH6IG3IDwgZ2VraXNob2t1XCA7CivluIzmnJvnmoQgPCBraWJvdXRla2lcIDsKK+iWrOS7oyA8IGt1c3VyaWRhaVwgOwor5Lq65bel6Zu3IDwgamlua291cmFpXCA7CivlsILnlKjmqZ8gPCBzZW4nJ3lvdWtpXCA7CivlvLfnm7QgPCBreW91Y2hva3VcIDsKK+W6pumHj+ihoSA8IGRvcnlvdWtvdVwgOwor5YWa5aSn5LyaIDwgdG91dGFpa2FpXCA7CivlkIzkuZfogIUgPCBkb3Vqb3VzaGFcIDsKK+WKtOWLleiAhSA8IHJvdWRvdXNoYVwgOwor5Y2Y5pWw5Z6LIDwgdGFuc3V1a2VpXCA7CivlvpPlhYTlvJ8gPCBqdXVrZWl0ZWlcIDsKK+m9p+atr+mhniA8IGdlc3NoaXJ1aVwgOwor5ZCE5YaKIDwga2FrdXNhdHN1XCA7CivpgJroqqwgPCB0c3V1c2V0c3VcIDsKK+WGoOacqOmWgCA8IGthYnVraW1vblwgOwor5LuY5bGe5ZOBIDwgZnV6b2t1aGluXCA7CivoqKrllY/ogIUgPCBob3Vtb25zaGFcIDsKK+ays+WPoyA8IGthd2FndWNoaVwgOwor6YCG6LOKIDwgZ3lha3V6b2t1XCA7CivpgZPojYkgPCBtaWNoaWt1c2FcIDsKK+eZuumgreS6uiA8IGhvdHRvdW5pblwgOwor5q2756WeIDwgc2hpbmlnYW1pXCA7Civmlofpgbjlt6UgPCBidW5zZW5rb3VcIDsKK+mBqeiBtyA8IHRla2lzaG9rdVwgOwor5qyg6JC9IDwga2V0c3VyYWt1XCA7Civlt7vprqggPCBtYWtpenVzaGlcIDsKK+WQjOWxheS6uiA8IGRvdWt5b25pblwgOwor5Y+C6Kmj5Lq6IDwgc2Fua2VpbmluXCA7Civlvbnlk6HkvJogPCB5YWt1aW5rYWlcIDsKK+WtpOeri+iqniA8IGtvcml0c3Vnb1wgOwor55Sf6I+T5a2QIDwgbmFtYWdhc2hpXCA7Civpm7vmsJflmajlhbcgPCBkZW5raWtpZ3VcIDsKK+WLneeOhyA8IHNob3VyaXRzdVwgOwor5YuY5a6a5pu4IDwga2Fuam91c2hvXCA7CivplovlgqzlnLAgPCBrYWlzYWljaGlcIDsKK+iQveW+jOiAhSA8IHJha3Vnb3NoYVwgOwor5Ye66LuNIDwgc2h1dHN1Z3VuXCA7CivljbHmqZ/miZPogIUgPCBraWtpZGFzaGFcIDsKK+WNiuaXpSA8IGhhbicnbmljaGlcIDsKK+WhqeWMluawtOe0oCA8IGVua2FzdWlzb1wgOwor5Y6E5bm0IDwgeWFrdWRvc2hpXCA7CivnlLflrZDmoKEgPCBkYW5zaGlrb3VcIDsKK+WJpeiEsSA8IGhha3VkYXRzdVwgOwor5LiA6Ium5Yq0IDwgaGl0b2t1cm91XCA7CivlgqzmtpnlvL4gPCBzYWlydWlkYW5cIDsKK+e1seayu+aoqSA8IHRvdWNoaWtlblwgOwor5b6S5qGcIDwgYWRhemFrdXJhXCA7CivljYPml6UgPCBzZW4nJ25pY2hpXCA7CivnpoHou6LovIkgPCBraW50ZW5zYWlcIDsKK+S6uuS6i+eVsOWLlSA8IGppbmppaWRvdVwgOwor5riv5rm+56iOIDwga291d2FuemVpXCA7CivkuI3lr5vlrrkgPCBmdWthbicneW91XCA7CivliKXooYwgPCBiZXRzdWd5b3VcIDsKK+S4jeS/oeS7sCA8IGZ1c2hpbmtvdVwgOwor5aSq5YWs5pybIDwgdGFpa291Ym91XCA7CivkuLjmi6zlvKcgPCBtYXJ1Z2Fra29cIDsKK+WkluWQkeaApyA8IGdhaWtvdXNlaVwgOwor6JC9552AIDwgcmFrdWNoYWt1XCA7CivkuI3otrPliY0gPCB0YXJhenVtYWVcIDsKK+S6jOWbvemWkyA8IG5pa29rdWthblwgOwor5Lqc6Ymb6YmE5p2/IDwgYWVudGVwcGFuXCA7CivkvJrokazogIUgPCBrYWlzb3VzaGFcIDsKK+mBruS6jOeEoeS6jCA8IHNoYW5pbXVuaVwgOwor6YCG6KWyIDwgZ3lha3VzaHV1XCA7Civnpo/lr7/ojYkgPCBmdWt1anVzb3VcIDsKK+avkuauuiA8IGRva3VzYXRzdVwgOwor56K65a6fIDwga2FrdWppdHN1XCA7Civms5Xmm7nnlYwgPCBob3Vzb3VrYWlcIDsKK+mHjeWHuiA8IGp1dXNodXRzdVwgOwor5Y+j5YWIIDwga3VjaGlzYWtpXCA7CivpgYvovLjnnIEgPCB1bicneXVzaG91XCA7Civlj6PlhYMgPCBrdWNoaW1vdG9cIDsKK+W8j+ebriA8IHNoaWtpbW9rdVwgOwor5Y2T5oqcIDwgdGFrdWJhdHN1XCA7CivkuZfou4rpp4UgPCBqb3VzaGFla2lcIDsKK+acnemuruiqniA8IGNob3VzZW5nb1wgOwor6Z2p5ZG95a62IDwga2FrdW1laWthXCA7CivmqZ/lr4bosrsgPCBraW1pdHN1aGlcIDsKK+S6uumAoOexsyA8IGppbnpvdW1haVwgOwor5rSL5ZOB5bqXIDwgeW91aGludGVuXCA7CivlgIvkurrnmoQgPCBrb2ppbnRla2lcIDsKK+S4gOWFg+WMliA8IGljaGlnZW5rYVwgOwor5Lyd6YGT6Ii5IDwgZGVuZG91c2VuXCA7CivmsqHlhaUgPCBib3RzdW55dXVcIDsKK+Wcp+i/q+aEnyA8IGFwcGFrdWthblwgOwor5LqI6Ziy562WIDwgeW9ib3VzYWt1XCA7Civoi6XpmqDlsYUgPCB3YWthaW5reW9cIDsKK+WumuS9j+iAhSA8IHRlaWp1dXNoYVwgOwor5Y+z5LiLIDwgbWlnaXNoaXRhXCA7CivmsLTmurbmgKcgPCBzdWl5b3VzZWlcIDsKK+W8t+eDiCA8IGt5b3VyZXRzdVwgOwor6YG66KiA5pu4IDwgeXVpZ29uc2hvXCA7Civku6Pnh4Pou4ogPCBkYWluZW5zaGFcIDsKK+WkieaIkOWyqSA8IGhlbnNlaWdhblwgOwor5LiA5a6a6YePIDwgaXR0ZWlyeW91XCA7Civoi6bngbDnn7MgPCBrdWthaXNla2lcIDsKK+W3puW/g+aIvyA8IHNhc2hpbmJvdVwgOwor6Lyq55Wq5Yi2IDwgcmluYmFuc2VpXCA7Civoq4vpoZjogIUgPCBzZWlnYW5zaGFcIDsKK+mAuOiEsSA8IGl0c3VkYXRzdVwgOwor55m96buSIDwgc2hpcm9rdXJvXCA7Civnm7TpgZQgPCBqaWtpdGF0c3VcIDsKK+Wcp+i/q+aApyA8IGFwcGFrdXNlaVwgOwor5oGL5LuHIDwga29pZ2F0YWtpXCA7CivnvoXnlJ/ploAgPCByYXNob3Vtb25cIDsKK+ebtOmAsiA8IGNob2t1c2hpblwgOwor5YCL5Lq655SoIDwga29qaW4nJ3lvdVwgOwor5Lqr5Y+X6ICFIDwga3lvdWp1c2hhXCA7CivlvqHotrPlirQgPCBnb3Nva3Vyb3VcIDsKK+ebtOmAmiA8IGNob2t1dHN1dVwgOwor5Ym956qDIDwgaHlvdXNldHN1XCA7CivniKzomavpoZ4gPCBoYWNodXVydWlcIDsKK+i/t+S/oeWutiA8IG1laXNoaW5rYVwgOwor5Ymy5664IDwgd2FyaWJhc2hpXCA7Civmm7jnsKHmlocgPCBzaG9rYW5idW5cIDsKK+ioseWPr+iovCA8IGt5b2thc2hvdVwgOwor5rCR5Li75YWaIDwgbWluc2h1dG91XCA7CivlhY3pu5wgPCBtZW5jaHV0c3VcIDsKK+mHkeS7jyA8IGthbmFidXRzdVwgOwor55m96be6IDwgc2hpcmFzYWdpXCA7CivphrXlh7ogPCBreW9zaHV0c3VcIDsKK+ebtOi9hCA8IGNob2trYXRzdVwgOwor5aSq5YiA5YWIIDwgdGFjaGlzYWtpXCA7CivljaDluKsgPCB1cmFuYWlzaGlcIDsKK+S8nemBk+iAhSA8IGRlbmRvdXNoYVwgOwor55uj6KaW6Ii5IDwga2Fuc2hpc2VuXCA7CivnuITmmpbnsL4gPCBuYXdhbm9yZW5cIDsKK+e2v+ijveWTgSA8IG1lbnNlaWhpblwgOwor55qu6Z20IDwga2F3YWd1dHN1XCA7Civlh7rotbDppqwgPCBzaHVzc291YmFcIDsKK+aApeWIhyA8IGt5dXVzZXRzdVwgOwor5LqM6ZqO5bu6IDwgbmlrYWlkYXRlXCA7Civkv67mraPmoYggPCBzaHV1c2VpYW5cIDsKK+Wuo+S8neaIpiA8IHNlbmRlbnNlblwgOwor6YWJ5bm0IDwgdG9yaWRvc2hpXCA7Civoq4vosqDmpa0gPCB1a2VvaWd5b3VcIDsKK+mhnuS6uueMvyA8IHJ1aWppbicnZW5cIDsKK+WQiOeQhueahCA8IGdvdXJpdGVraVwgOwor5Yud6LKg5birIDwgc2hvdWJ1c2hpXCA7Civns7jomq/ompMgPCBpdG9taW1penVcIDsKK+W7tumVt+aIpiA8IGVuY2hvdXNlblwgOwor5Zyf5bu65qWtIDwgZG9rZW5neW91XCA7CivotIjlkYjlk4EgPCB6b3V0ZWloaW5cIDsKK+mHkemJseWcsCA8IGtpbmtvdWNoaVwgOwor55yf6KO4IDwgbWFwcGFkYWthXCA7CivmmLzlvqHpo68gPCBoaXJ1Z29oYW5cIDsKK+iSmeWPpOilniA8IG1vdWtvaGlkYVwgOwor5Y2K5pyI5YiKIDwgaGFuZ2Vra2FuXCA7Civlh7rooYAgPCBzaHVra2V0c3VcIDsKK+eZvemxmiA8IHNoaXJvZ2lzdVwgOwor6YGT562LIDwgbWljaGlzdWppXCA7CivnnIzmsJHnqI4gPCBrZW5taW56ZWlcIDsKK+aJh+WLleiAhSA8IHNlbmRvdXNoYVwgOwor6ZuG5Lya5omAIDwgc2h1dWthaWpvXCA7CivmnKjlt6XloLQgPCBtb2trb3Vqb3VcIDsKK+a0kuiQveiAhSA8IHNoYXJlbW9ub1wgOwor5oim6ZeY5bi9IDwgc2VudG91Ym91XCA7CivlpJXljJbnsqcgPCB5dXVnZXNob3VcIDsKK+mBk+erryA8IG1pY2hpYmF0YVwgOwor5Y+v5YuV5aCwIDwga2Fkb3V6ZWtpXCA7CivlpKflubTlopcgPCBvb3Rvc2hpbWFcIDsKK+azleeQhuWtpiA8IGhvdXJpZ2FrdVwgOwor6buE6aC36JuHIDwgYW9kYWlzaG91XCA7CivpgI/mmI7kvZMgPCB0b3VtZWl0YWlcIDsKK+aVhemanOi7iiA8IGtvc2hvdXNoYVwgOwor55uj6KaW6ICFIDwga2Fuc2hpc2hhXCA7Civljbjlo7IgPCBvcm9zaGl1cmlcIDsKK+W/mOWksSA8IGJvdXNoaXRzdVwgOwor6JSt5Y+jIDwga2FnZWd1Y2hpXCA7CivljbXlpKcgPCB0YW1hZ29kYWlcIDsKK+W8geaFtuiNiSA8IGJlbmtlaXNvdVwgOwor5Yid6IqxIDwgaGF0c3VoYW5hXCA7CivpgZPnqIsgPCBtaWNoaW5vcmlcIDsKK+WtmOWcqOiAhSA8IHNvbnphaXNoYVwgOwor5YWo5Zu95Yy6IDwgemVua29rdWt1XCA7Civnmb3pq6ogPCBoYWt1aGF0c3VcIDsKK+Wkqeeah+aXlyA8IHRlbicnbm91a2lcIDsKK+WumOWDmuWMliA8IGthbnJ5b3VrYVwgOwor5pei5b6X5qipIDwga2l0b2t1a2VuXCA7CivlhYnnt5rpioMgPCBrb3VzZW5qdXVcIDsKK+ejlOWIkSA8IGhhcml0c3VrZVwgOwor5Luu6Z2i5YqHIDwga2FtZW5nZWtpXCA7CivmqZ/morDnmoQgPCBraWthaXRla2lcIDsKK+W9puaYnyA8IGhpa29ib3NoaVwgOwor6YG65Lyd5Zyw5ZuzIDwgaWRlbmNoaXp1XCA7CivovpvovqMgPCBzaGlucmF0c3VcIDsKK+ato+eJqSA8IHNob3VidXRzdVwgOwor5ZOB44CFIDwgc2hpbmFqaW5hXCA7CivnhqjmlpfntJkgPCBub3NoaWdhbWlcIDsKK+WGmeakjeapnyA8IHNoYXNob2traVwgOwor5Ye66JeNIDwgc2h1dHN1cmFuXCA7CivmnKzkvZPoq5YgPCBob250YWlyb25cIDsKK+eZuuWjsOazlSA8IGhhc3NlaWhvdVwgOwor57Wm5rmv5ZmoIDwga3l1dXRvdWtpXCA7CivlubToi6UgPCB0b3NoaXdha2FcIDsKK+mBiuiIiOiyuyA8IHl1dWt5b3VoaVwgOwor5bmz5a6J5LqsIDwgaGVpYW5reW91XCA7CivpgIboh6MgPCBneWFrdXNoaW5cIDsKK+eUn+asoOS8uCA8IG5hbWFha3ViaVwgOwor6YCB5LuY5YWIIDwgc291ZnVzYWtpXCA7CivlpJbph47luK0gPCBnYWl5YXNla2lcIDsKK+W5s+iKnSA8IGhpcmFzaGliYVwgOwor5qiq6Z2iIDwgeW9rb3RzdXJhXCA7Civnq4vkvZPmiKYgPCByaXR0YWlzZW5cIDsKK+ebtOiqrSA8IGNob2t1ZG9rdVwgOwor55uj6KaW57ayIDwga2Fuc2hpbW91XCA7CivmnIjmsLTph5EgPCBnZXNzdWlraW5cIDsKK+ato+aKleaJiyA8IHNlaXRvdXNodVwgOwor5Yed6KGAIDwgZ3lvdWtldHN1XCA7CivpgaDotaTlpJYgPCBlbnNla2lnYWlcIDsKK+aMh+ekuuiWrCA8IHNoaWppeWFrdVwgOwor6YCD6IWwIDwgbmlnZWdvc2hpXCA7Civlv4PlpKogPCB0b2tvcm90ZW5cIDsKK+ebtOiosyA8IGNob2t1eWFrdVwgOwor5Yid6ICzIDwgaGF0c3VtaW1pXCA7Civkv6Hlj7fmqZ8gPCBzaGluZ291a2lcIDsKK+S6leaIuOi7iiA8IGlkb2d1cnVtYVwgOwor5pyJ5ZCN56iOIDwgeXV1bWVpemVpXCA7Civnq4vkvZPmhJ8gPCByaXR0YWlrYW5cIDsKK+WEquWFiOaoqSA8IHl1dXNlbmtlblwgOwor5a6f6aiT5aC0IDwgamlra2Vuam91XCA7CivniaHkuLnppIUgPCBib3RhbW9jaGlcIDsKK+e1jOWbo+mAoyA8IGtlaWRhbnJlblwgOwor5LiN5rOV6KGM54K6IDwgZnVob3Vrb3VpXCA7Civmlq3poK3lj7AgPCBkYW50b3VkYWlcIDsKK+S6iOe0hOiAhSA8IHlveWFrdXNoYVwgOwor57WC5aSc54GvIDwgc2h1dXlhdG91XCA7Civmmpfpu5LpnaIgPCBhbmtva3VtZW5cIDsKK+Wuo+S8neWxiyA8IHNlbmRlbicneWFcIDsKK+S7o+abv+WTgSA8IGRhaXRhaWhpblwgOwor54Kt6YW45aGpIDwgdGFuc2FuJydlblwgOwor5LiL5a6/5bGLIDwgZ2VzaHVrdXlhXCA7Civoo5zntabnt5ogPCBob2t5dXVzZW5cIDsKK+WQjeS6uuaIpiA8IG1laWppbnNlblwgOwor5LiA6Iis5bitIDwgaXBwYW5zZWtpXCA7Civpga3pm6PogIUgPCBzb3VuYW5zaGFcIDsKK+eZvembqiA8IGhha3VzZXRzdVwgOwor5Ye66ImyIDwgc2h1c3Nob2t1XCA7Civljp/lrZDnoLIgPCBnZW5zaGlob3VcIDsKK+WAkue9ruazlSA8IHRvdWNoaWhvdVwgOwor5buD55a+IDwgaGFpc2hpdHN1XCA7CivnhafmupblmaggPCBzaG91anVua2lcIDsKK+WOn+S9j+awkSA8IGdlbmp1dW1pblwgOwor6IGW5YWs5LyaIDwgc2Vpa291a2FpXCA7Civliofng4ggPCBnZWtpcmV0c3VcIDsKK+WOn+eUo+WcsCA8IGdlbnNhbmNoaVwgOwor6Z2p5ZG95YWQIDwga2FrdW1laWppXCA7CivpgJ/nrYYgPCBzb2t1aGl0c3VcIDsKK+WEqumnv+mmrCA8IHl1dXNodW5iYVwgOwor5Li75oOF6KuWIDwgc2h1am91cm9uXCA7CivpqqjokaPlk4EgPCBrb3R0b3VoaW5cIDsKK+euoeiyoeS6uiA8IGthbnphaW5pblwgOwor5ryU5YqH55WMIDwgZW5nZWtpa2FpXCA7CivpioDplqPlr7ogPCBnaW5rYWt1amlcIDsKK+miqOmzpeW6pyA8IGZ1dWNob3V6YVwgOwor5oyf55685ZmoIDwga3lvdWtlbmtpXCA7CivmlZnmjojms5UgPCBreW91anVob3VcIDsKK+mbu+awl+mHnCA8IGRlbmtpZ2FtYVwgOwor6Zu75rCX6YePIDwgZGVua2lyeW91XCA7CivmsLTlj6MgPCBtaXp1Z3VjaGlcIDsKK+atu+S9k+mBuuajhCA8IHNoaXRhaWlraVwgOwor54K55YWJ5rqQIDwgdGVua291Z2VuXCA7Civml6XliIrntJkgPCBuaWtrYW5zaGlcIDsKK+mWk+eLguiogCA8IGFpa3lvdWdlblwgOwor5q665oiuIDwgc2F0c3VyaWt1XCA7CivogIHkurrmgKcgPCByb3VqaW5zZWlcIDsKK+W+jOWupCA8IGtvdXNoaXRzdVwgOwor6KiI5pWw566hIDwga2Vpc3V1a2FuXCA7Civph5HliKnpnpggPCBraW5yaXNob3VcIDsKK+iThOWmviA8IGNoaWt1c2hvdVwgOwor5Luu5pS/5bqcIDwga2FyaXNlaWZ1XCA7Civnj77ku6PniYggPCBnZW5kYWliYW5cIDsKK+S9juWnv+WLoiA8IHRlaXNoaXNlaVwgOwor5oCl6ZmN5LiLIDwga3l1dWtvdWthXCA7Civnq6XoqbHliocgPCBkb3V3YWdla2lcIDsKK+Wun+mok+WPsCA8IGppa2tlbmRhaVwgOwor5rC05oiQ5bKpIDwgc3Vpc2VpZ2FuXCA7CivlvqHlr67kurogPCBnb3J5b3VuaW5cIDsKK+iHqui6q+eVqiA8IGppc2hpbmJhblwgOwor56CC5pmC6KiIIDwgc3VuYWRva2VpXCA7CivlhoXph47lronmiZMgPCBuYWl5YWFuZGFcIDsKK+ihgOmBlOejqCA8IGNoaWRhcnVtYVwgOwor6aSK6baP5aC0IDwgeW91a2Vpam91XCA7CivpgLLnmbogPCBzaGlucGF0c3VcIDsKK+iEsei1sOWFtSA8IGRhc3NvdWhlaVwgOwor6Iy26KKLIDwgY2hhYnVrdXJvXCA7CivojZjlnJLliLYgPCBzaG91ZW5zZWlcIDsKK+WIneepuiA8IGhhdHN1em9yYVwgOwor5YmN5Y2K5oimIDwgemVucGFuc2VuXCA7CivoqJPoqYHlraYgPCBrdW5rb2dha3VcIDsKK+i7iuS6leaIuCA8IGt1cnVtYWlkb1wgOwor5aSW5YuZ55yBIDwgZ2FpbXVzaG91XCA7CivmlrDmmYLku6MgPCBzaGluamlkYWlcIDsKK+a4ieWklumDqCA8IHNob3VnYWlidVwgOwor5qiq6YGTIDwgeW9rb21pY2hpXCA7CivmhJ/lhYnntJkgPCBrYW5rb3VzaGlcIDsKK+aSruW9seapnyA8IHNhdHN1ZWlraVwgOwor5LiA55Sf5ravIDwgaXNzaG91Z2FpXCA7CivmsLTmupDlnLAgPCBzdWlnZW5jaGlcIDsKK+aVtOa1geWZqCA8IHNlaXJ5dXVraVwgOwor5bmz56mP54Sh5LqLIDwgaGVpb25idWppXCA7CivokL3mnK0gPCByYWt1c2F0c3VcIDsKK+WIruebriA8IGthdHN1bW9rdVwgOwor55m96YWSIDwgc2hpcm96YWtlXCA7CivpioDooYznlYwgPCBnaW5rb3VrYWlcIDsKK+ePvuS9j+aJgCA8IGdlbmp1dXNob1wgOwor5YuY5omAIDwga2FuZG9rb3JvXCA7CivliY3lj6PkuIogPCBtYWVrb3Vqb3VcIDsKK+WcsOWvvuepuiA8IGNoaXRhaWt1dVwgOwor6L+956qBIDwgdHN1aXRvdHN1XCA7CivnrKzkuIDpm4YgPCBkYWlpc3NodXVcIDsKK+W8j+acjSA8IHNoaWtpZnVrdVwgOwor5aSp55qH5a62IDwgdGVuJydub3VrZVwgOwor5Y2U5YqbIDwga3lvdXJ5b2t1XCA7CivntabmsrnoiLkgPCBreXV1eXVzZW5cIDsKK+S7o+abuOS6uiA8IGRhaXNob25pblwgOwor5Ym15aeL6ICFIDwgc291c2hpc2hhXCA7CivkvqHmoLzluK8gPCBrYWtha3V0YWlcIDsKK+WgtOaJgOafhCA8IGJhc2hvZ2FyYVwgOwor5L+h5Y+35omAIDwgc2hpbmdvdWpvXCA7CivmmI7mmI7lvozml6UgPCBzaGlhc2F0dGVcIDsKK+efs+aMgSA8IGlzaGltb2NoaVwgOwor5oKq5b6q55KwIDwgYWt1anVua2FuXCA7CivokL3ml6UgPCByYWt1aml0c3VcIDsKK+S4gOawl+WRteaIkCA8IGlra2lrYXNlaVwgOwor5a6f6aiT5YCkIDwgamlra2VuY2hpXCA7CivpgLjniakgPCBpY2hpbW90c3VcIDsKK+S4jemiqOa1gSA8IGJ1ZnV1cnl1dVwgOwor5a6j5Lyd5ZOhIDwgc2VuZGVuJydpblwgOwor6Zmk6Zu76YedIDwgam9kZW5iYXJpXCA7CivooZvnlJ/lraYgPCBlaXNlaWdha3VcIDsKK+ebtOiFuCA8IGNob2t1Y2hvdVwgOwor5q2m5Zmo6LK45LiOIDwgYnVraXRhaXlvXCA7CivnmbropovogIUgPCBoYWtrZW5zaGFcIDsKK+azleeOi+W6gSA8IGhvdW91Y2hvdVwgOwor5q205pelIDwgcmVraWppdHN1XCA7CivkuIDnlarmiYsgPCBpY2hpYmFudGVcIDsKK+S4gOWkq+WkmuWmuyA8IGlwcHV0YXNhaVwgOwor6ZmQ55WM54K5IDwgZ2Vua2FpdGVuXCA7Civmnb/nm67ntJkgPCBpdGFtZWdhbWlcIDsKK+aEgeWYhuWgtCA8IHNodXV0YW5iYVwgOwor6YCy54mpIDwgc2hpbm1vdHN1XCA7CivoirHnm7jmkrIgPCBoYW5henVtb3VcIDsKK+atr+enkeWtpiA8IHNoaWthZ2FrdVwgOwor5LuV5LqL552AIDwgc2hpZ290b2dpXCA7CivlhYnmlofnpL4gPCBrb3VidW5zaGFcIDsKK+mrmOeHpeWcsCA8IGtvdXNvdWNoaVwgOwor6L6y5Zyw5rOVIDwgbm91Y2hpaG91XCA7CivokZvmoLnmua8gPCBrYWtrb250b3VcIDsKK+WHuueriyA8IHNodXR0YXRzdVwgOwor55yf562GIDwgc2hpbnBpdHN1XCA7CivmraPmnIggPCBzaG91Z2F0c3VcIDsKK+WHnee4riA8IGd5b3VzaHVrdVwgOwor5YWJ6Zu7566hIDwga291ZGVua2FuXCA7CivouqvliIbmn4QgPCBtaWJ1bmdhcmFcIDsKK+ims+imp+WIuCA8IGthbnJhbmtlblwgOwor56aB5Yi25ZOBIDwga2luc2VpaGluXCA7CivnnYDnm64gPCBjaGFrdW1va3VcIDsKK+W9k+expOiAhSA8IHRvdXNlbnNoYVwgOwor6YCy5YyW6KuWIDwgc2hpbmthcm9uXCA7Civlho3mpJzoqI4gPCBzYWlrZW50b3VcIDsKK+WFreitmCA8IHJva3VzaGlraVwgOwor5Y2K5aSP55SfIDwgaGFuZ2VzaG91XCA7CivlvqHpo6/mmYIgPCBnb2hhbmRva2lcIDsKK+aEm+W8n+WtkCA8IG1hbmFkZXNoaVwgOwor5omL5byV5pu4IDwgdGViaWtpc2hvXCA7Civmj67nmbrmsrkgPCBraWhhdHN1eXVcIDsKK+e/sOael+mZoiA8IGthbnJpbicnaW5cIDsKK+aVtOWQiOaApyA8IHNlaWdvdXNlaVwgOwor5paZ55CG55WqIDwgcnlvdXJpYmFuXCA7CivljYHkuozlrq4gPCBqdXVuaWt5dXVcIDsKK+eUn+eUo+iyoSA8IHNlaXNhbnphaVwgOwor5LiA5Luj6KiYIDwgaWNoaWRhaWtpXCA7CivlhYPlp4vnpa0gPCBnZW5zaGlzYWlcIDsKK+S6oeWRveiAhSA8IGJvdW1laXNoYVwgOwor5pyJ56iO5ZOBIDwgeXV1emVpaGluXCA7CivnnLznlr4gPCBnYW5zaGl0c3VcIDsKK+Wkp+S9v+mkqCA8IHRhaXNoaWthblwgOwor6ZmQ5a6a6KmeIDwgZ2VudGVpc2hpXCA7CivmrYzmnpUgPCB1dGFtYWt1cmFcIDsKK++8uOe3miA8IGVra3VzdXNlblwgOwor54Sh6aeE6aOvIDwgbXVkYW1lc2hpXCA7Civnt4/msbrnrpcgPCBzb3VrZXNzYW5cIDsKK+attOWPsuWutiA8IHJla2lzaGlrYVwgOwor5rW35rC05bi9IDwga2Fpc3VpYm91XCA7CivmjqfpmaTpoY0gPCBrb3Vqb2dha3VcIDsKK+efpeaCiSA8IGNoaXNoaXRzdVwgOwor5a625pS/5a2mIDwga2FzZWlnYWt1XCA7CivlhoXlvJ/lrZAgPCB1Y2hpZGVzaGlcIDsKK+WkmuW/meS4rSA8IHRhYm91Y2h1dVwgOwor5Yil54mpIDwgYmV0c3Vtb25vXCA7Civljp/lr7jlpKcgPCBnZW5zdW5kYWlcIDsKK+ebtOe1kCA8IGNob2trZXRzdVwgOwor5qmf6IO955qEIDwga2lub3V0ZWtpXCA7CivlpbPmgKfnmoQgPCBqb3NlaXRla2lcIDsKK+a7kee/lOapnyA8IGthc3Nob3VraVwgOwor5bm05aeL54q2IDwgbmVuc2hpam91XCA7CivlrZDnhanmgqkgPCBrb2Jvbicnbm91XCA7CivmjIfljZfou4ogPCBzaGluYW5zaGFcIDsKK+WHneeriyA8IGd5b3VyaXRzdVwgOwor5bi456+AIDwgdG9rb2J1c2hpXCA7CivlhpnnlJ/mlocgPCBzaGFzZWlidW5cIDsKK+aomeitmCA8IGh5b3VzaGlraVwgOwor5YaF6YGK5pifIDwgbmFpeXV1c2VpXCA7Civlvozlh7ogPCBrb3VzaHV0c3VcIDsKK+WIneeJqSA8IGhhdHN1bW9ub1wgOwor6Ium6KGM6ICFIDwga3VneW91c2hhXCA7CivnvarmgqrmhJ8gPCB6YWlha3VrYW5cIDsKK+eEoeeXh+eKtiA8IG11c2hvdWpvdVwgOwor6Iqx6YGTIDwgaGFuYW1pY2hpXCA7Civop5LnoILns5YgPCBrYWt1emF0b3VcIDsKK+eUn+i/lOS6iyA8IG5hbWFoZW5qaVwgOwor5Ye655m6IDwgc2h1cHBhdHN1XCA7CivljZjntJTmgKcgPCB0YW5qdW5zZWlcIDsKK+WMl+WPoyA8IGtpdGFndWNoaVwgOwor5aSn5YOn5q2jIDwgZGFpc291am91XCA7CivlubTnjokgPCB0b3NoaWRhbWFcIDsKK+S4gOi6q+S4iiA8IGlzc2hpbmpvdVwgOwor5L+u6YGT5bC8IDwgc2h1dWRvdW5pXCA7Civou43mlL7pgIEgPCBndW5ob3Vzb3VcIDsKK+eZu+iomOaWmSA8IHRvdWtpcnlvdVwgOwor6Iux5Zu95Lq6IDwgZWlrb2t1amluXCA7Civlgb3oqLzogIUgPCBnaXNob3VzaGFcIDsKK+mBk+i3r+apiyA8IGRvdXJva3lvdVwgOwor5qmZ6ImyIDwgZGFpZGFpaXJvXCA7Civnn6nlt64gPCBrYW5lemFzaGlcIDsKK+WNg+S4hyA8IGNoaXlvcm96dVwgOwor5pKu5b2x5omAIDwgc2F0c3VlaWpvXCA7CivlvaLmhYvoq5YgPCBrZWl0YWlyb25cIDsKK+WBveiovOe9qiA8IGdpc2hvdXphaVwgOwor6aaW6KyA6ICFIDwgc2h1Ym91c2hhXCA7CivopIflj7fljJYgPCBmdWt1Z291a2FcIDsKK+W8k+W8piA8IHl1bWlkenVydVwgOwor5aeL56WW6bOlIDwgc2hpc29jaG91XCA7CivnibnoqLHms5UgPCB0b2treW9ob3VcIDsKK+mkiuavm+WJpCA8IHlvdW1vdXphaVwgOwor5rWu5rCX6ICFIDwgdXdha2ltb25vXCA7Civnm7LnqbQgPCBtZWt1cmFhbmFcIDsKK+WNseapn+eqgeegtCA8IGtpa2l0b3BwYVwgOwor5pqX6buS6KGXIDwgYW5rb2t1Z2FpXCA7CivlpKflhYPluKUgPCBkYWlnZW5zdWlcIDsKK+WFjeioseeKtiA8IG1lbmt5b2pvdVwgOwor6I2J566SIDwga3VzYWJvdWtpXCA7Civlh7rnj74gPCBzaHV0c3VnZW5cIDsKK+WknOWFieiZqyA8IHlha291Y2h1dVwgOwor5aWH5aSp54OIIDwga2l0ZXJldHN1XCA7CivljJnliqDmuJsgPCBzYWppa2FnZW5cIDsKK+WHneedgCA8IGd5b3VjaGFrdVwgOwor5Yqj5byxIDwgcmV0c3VqYWt1XCA7CivmipXmiYvmnb8gPCB0b3VzaHViYW5cIDsKK+W+k+alreWToSA8IGp1dWd5b3VpblwgOwor5om56KmV55y8IDwgaGloeW91Z2FuXCA7Civkv67pgZPlpbMgPCBzaHV1ZG91am9cIDsKK+Wcp+eXm+eCuSA8IGF0dHN1dXRlblwgOwor5rW35YW16ZqKIDwga2FpaGVpdGFpXCA7CivogIPoqrLooaggPCBrb3VrYWh5b3VcIDsKK+m6puiKveezliA8IGJha3VnYXRvdVwgOwor55yf546HIDwgc2hpbnNvdHN1XCA7Civoi6bomasgPCBuaWdhbXVzaGlcIDsKK+api+iEmiA8IGt5b3VreWFrdVwgOwor5bem6IWVIDwgaGlkYXJpdWRlXCA7CivmlofoirjmrIQgPCBidW5nZWlyYW5cIDsKK+WknOebsueXhyA8IHlhbW91c2hvdVwgOwor5oqV56i/6ICFIDwgdG91a291c2hhXCA7CivnhKHlt67liKUgPCBtdXNhYmV0c3VcIDsKK+epuuaMuumaiiA8IGt1dXRlaXRhaVwgOwor5b6u6Kq/5pW0IDwgYmljaG91c2VpXCA7Civlj6Plv6Dlrp8gPCBrdWNoaW1hbWVcIDsKK+iKseaooeanmCA8IGhhbmFtb3lvdVwgOwor5pyJ5ZCN5qChIDwgeXV1bWVpa291XCA7CivnibnoqLHmqKkgPCB0b2treW9rZW5cIDsKK+mrmOm8viA8IHRha2FpYmlraVwgOwor5qeL5oiQ5a2QIDwga291c2Vpc2hpXCA7CivnnJ/niakgPCBzaGluYnV0c3VcIDsKK+W8lOWuoiA8IGNob3VreWFrdVwgOwor6KuL6aGY5pu4IDwgc2VpZ2Fuc2hvXCA7Civmi6Hlo7DmqZ8gPCBrYWt1c2Vpa2lcIDsKK+WMu+eZguapn+WZqCA8IGlyeW91a2lraVwgOwor55m+6JasIDwgaHlha3V5YWt1XCA7CivoqI7oq5bkvJogPCB0b3Vyb25rYWlcIDsKK+iMtuetkiA8IGNoYWR6dXRzdVwgOwor5byf5aiYIDwgb3RvbXVzdW1lXCA7CivnnIHnlaUgPCBzaG91cnlha3VcIDsKK+aLmOe9ruaJgCA8IGtvdWNoaXNob1wgOwor5Lqk5riJ5ZOhIDwga291c2hvdWluXCA7CivlirTlvbnloLQgPCByb3Vla2lqb3VcIDsKK+mVt+Wwvum2jyA8IG5hZ2FvZG9yaVwgOwor5rC06YqA54GvIDwgc3VpZ2ludG91XCA7CivkuLvmiJDliIYgPCBzaHVzZWlidW5cIDsKK+S/rui+nuazlSA8IHNodXVqaWhvdVwgOwor5Y2T6Kmx5LyaIDwgdGFrdXdha2FpXCA7CivpgIbmtYEgPCBneWFrdXJ5dXVcIDsKK+atjOW/gyA8IHV0YWdva29yb1wgOwor5omL5bel6Iq4IDwgc2h1a291Z2VpXCA7CivmlpnnkIbms5UgPCByeW91cmlob3VcIDsKK+aJv+iqjeWbsyA8IHNob3VuaW56dVwgOwor5pys5bO25Lq6IDwgaG9udG91amluXCA7CivmgZLluLjmgKcgPCBrb3Vqb3VzZWlcIDsKK+mAseacqyA8IHNodXVtYXRzdVwgOwor552A5rC3IDwgY2hha3VoeW91XCA7Civnmb3oj4ogPCBzaGlyYWdpa3VcIDsKK+W5tOazoiA8IHRvc2hpbmFtaVwgOwor57WE57mU5YyWIDwgc29zaGlraWthXCA7CivlvqHmlrDpgKAgPCBnb3NoaW56b3VcIDsKK+ato+WupCA8IHNlaXNoaXRzdVwgOwor5Lm+6Zu75rGgIDwga2FuZGVuY2hpXCA7Civoh6rkvZzovrIgPCBqaXNha3Vub3VcIDsKK+iPiuaciCA8IGtpa3VkenVraVwgOwor5Yi256m65qipIDwgc2Vpa3V1a2VuXCA7CivoirHmpLDoj5wgPCBoYW5heWFzYWlcIDsKK+ertuaKgOWgtCA8IGt5b3VnaWpvdVwgOwor5pen5Yi25bqmIDwga3l1dXNlaWRvXCA7CivlhbHlkozmlL8gPCBreW91d2FzZWlcIDsKK+WkqeS4i+eEoeavlCA8IHRlbmthbXVoaVwgOwor5bCK546L5a62IDwgc29uJydub3VrYVwgOwor5bm05q+OIDwgdG9zaGlnb3RvXCA7CivpgLHml6UgPCBzaHV1aml0c3VcIDsKK+mBhemAsuWFkCA8IGNoaXNoaW5qaVwgOwor6Iqx6KGXIDwgaGFuYW1hY2hpXCA7Civlt53nuIEgPCBrYXdhYnVjaGlcIDsKK+W9ouS7oyA8IGthdGFzaGlyb1wgOwor5qCE6aSK5a2mIDwgZWl5b3VnYWt1XCA7Civmjqnorbfpg6jpmoogPCBlbmdvYnV0YWlcIDsKK+eZveiJsiA8IGhha3VzaG9rdVwgOwor5LiN5LuL5YWlIDwgZnVrYWlueXV1XCA7CivmipXmiYvmiKYgPCB0b3VzaHVzZW5cIDsKK+eKrOW8teWtkCA8IGludWhhcmlrb1wgOwor6YCB6Zu757eaIDwgc291ZGVuc2VuXCA7CivljbXpu4TlmqIgPCByYW4nJ291bm91XCA7CivliKXmo58gPCBiZXRzdW11bmVcIDsKK+awl+Wcp+ioiCA8IGtpYXRzdWtlaVwgOwor6aeG6Jmr5YmkIDwga3VjaHV1emFpXCA7Civniqzov73niakgPCBpbnVvdW1vbm9cIDsKK+S4ieaWkem2iSA8IG1pZnV1enVyYVwgOwor5YaK56uLIDwgc2FrdXJpdHN1XCA7Civppqzpub/ph47pg44gPCBiYWtheWFyb3VcIDsKK+WztumiqCA8IHNoaW1ha2F6ZVwgOwor5ouN5a2Q5pyoIDwgaHlvdXNoaWdpXCA7CivlpJrmr5vkvZwgPCB0YW1vdXNha3VcIDsKK+aJi+iNt+eJqSA8IHRlbmltb3RzdVwgOwor5byx5Y2SIDwgamFrdXNvdHN1XCA7Civlh6DluLPpnaIgPCBraWNob3VtZW5cIDsKK+aooeevhOeahCA8IG1vaGFudGVraVwgOwor5YOV6YGUIDwgYm9rdXRhY2hpXCA7Civpq63pnaIgPCBoaWdlZHp1cmFcIDsKK+ethuiomOW4syA8IGhpa2tpY2hvdVwgOwor5by15YqbIDwgY2hvdXJ5b2t1XCA7Civou5/os6ogPCBuYW5zaGl0c3VcIDsKK+mVt+i3nemboiA8IGNob3VreW9yaVwgOwor576O5bCR5bm0IDwgYmlzaG91bmVuXCA7Civkub7nh6XmnZAgPCBrYW5zb3V6YWlcIDsKK+eUn+eUo+iAhSA8IHNlaXNhbnNoYVwgOwor5LiN5pyN5b6TIDwgZnVmdWt1anV1XCA7CivmnKzmoLzmtL4gPCBob25rYWt1aGFcIDsKK+iPseW9oiA8IGhpc2hpZ2F0YVwgOwor5Y6f5a2Q5oimIDwgZ2Vuc2hpc2VuXCA7CivkuI3lpInph48gPCBmdWhlbnJ5b3VcIDsKK+mhlOmmtOafkyA8IGthb25hamltaVwgOwor6YCy5o2XIDwgc2hpbmNob2t1XCA7CivokL3okYnmqLkgPCByYWt1eW91anVcIDsKK+S4iemgreetiyA8IHNhbnRvdWtpblwgOwor5YO76KqsIDwgaGVraXNldHN1XCA7Civlj6Poqp7oi7Hoqp4gPCBrb3Vnb2VpZ29cIDsKK+S7o+iogOiAhSA8IGRhaWdlbnNoYVwgOwor6Iy255WRIDwgY2hhYmF0YWtlXCA7Civmj67nmbrluqYgPCBraWhhdHN1ZG9cIDsKK+Wkp+iHqueEtiA8IGRhaXNoaXplblwgOwor5LiN5pmC552AIDwgZnVqaWNoYWt1XCA7CivntbHliLbnt5ogPCB0b3VzZWlzZW5cIDsKK+aoque2sSA8IHlva29kenVuYVwgOwor5YWO6ICzIDwgdXNhZ2ltaW1pXCA7CivlhYnpm7vmsaAgPCBrb3VkZW5jaGlcIDsKK+iKseS+m+mkiiA8IGhhbmFrdXlvdVwgOwor6Zuj5ZWP6aGMIDwgbmFubW9uZGFpXCA7Civntpnpm7vpjbUgPCBrZWlkZW5rZW5cIDsKK+apn+aisOWtpiA8IGtpa2FpZ2FrdVwgOwor5bO26ZmwIDwgc2hpbWFrYWdlXCA7Civlqabkurrnl4UgPCBmdWppbmJ5b3VcIDsKK+WQjOWlveiAhSA8IGRvdWtvdXNoYVwgOwor5YG95aaK5aigIDwgZ2luaW5zaGluXCA7Civnn6LljbAgPCB5YWppcnVzaGlcIDsKK+edgOacjSA8IGNoYWt1ZnVrdVwgOwor54Gr57iE6YqDIDwgaGluYXdhanV1XCA7Civlu7rlnaogPCB0YXRldHN1Ym9cIDsKK+WJr+WwuiA8IGZ1a3VzaGFrdVwgOwor5Yid5pilIDwgaGF0c3VoYXJ1XCA7CivliY3li5jlrpogPCBtYWVrYW5qb3VcIDsKK+aXoueZuuihqCA8IGtpaGFwcHlvdVwgOwor5YWx56uLIDwga3lvdXJpdHN1XCA7CivoirHoj7EgPCBoYW5hYmlzaGlcIDsKK+eUsueKtuiFuiA8IGtvdWpvdXNlblwgOwor56i95Y+k5LqLIDwga2Vpa29nb3RvXCA7CivmiJDmlofms5UgPCBzZWlidW5ob3VcIDsKK+W7tuWdqiA8IG5vYmV0c3Vib1wgOwor6KaP5qC85ZOBIDwga2lrYWt1aGluXCA7Civku5Xkuovml6UgPCBzaGlnb3RvYmlcIDsKK+WIhuS4jueojiA8IGJ1bicneW96ZWlcIDsKK+eZveeEoeWeoiA8IHNoaXJvbXVrdVwgOwor5LqM562J6LOeIDwgbml0b3VzaG91XCA7CivmpbXph48gPCBreW9rdXJ5b3VcIDsKK+WumuS8keaXpSA8IHRlaWt5dXViaVwgOwor6Imv6K2YIDwgcnlvdXNoaWtpXCA7CivlvJ/liIYgPCBvdG91dG9idW5cIDsKK+eZveeBr+ayuSA8IGhha3V0b3V5dVwgOwor6Imy6Kq/IDwgc2hpa2ljaG91XCA7CivpiYTngavlkbPlmYwgPCB0ZWtrYW1pc29cIDsKK+mBi+i7ouW4rSA8IHVudGVuc2VraVwgOwor5YWs5rCR6aSoIDwga291bWlua2FuXCA7Civnr6TovrLlrrYgPCB0b2t1bm91a2FcIDsKK+iMieiOieiKsSA8IG1hdHN1cmlrYVwgOwor5Lq65bel5rivIDwgamlua291a291XCA7Civps7blj6MgPCB0b2JpZ3VjaGlcIDsKK+mrmOmZteWcnyA8IGtvdXJ5b3Vkb1wgOwor5oSf5YWJ5p2/IDwga2Fua291YmFuXCA7Civlhavnpo8gPCBoYWNoaWZ1a3VcIDsKK+iJsuimmiA8IHNoaWtpa2FrdVwgOwor5LiJ5LmX5qC5IDwgc2Fuam91a29uXCA7Civnn7Pku48gPCBzZWtpYnV0c3VcIDsKK+eUt+miqOWRgiA8IG90b2tvYnVyb1wgOwor5aWz6YOO6IqxIDwgb21pbmFlc2hpXCA7Civmu57ntI3ogIUgPCB0YWlub3VzaGFcIDsKK+ats+WHuiA8IHNhaXNodXRzdVwgOwor5Lyd6YGT5birIDwgZGVuZG91c2hpXCA7Civlv5zlj6zlhbUgPCBvdXNob3VoZWlcIDsKK+ikh+WNgeWtlyA8IGZ1a3VqdXVqaVwgOwor55u05rWBIDwgY2hva3VyeXV1XCA7CivpmL/lvKXpmYDntYwgPCBhbWlkYWt5b3VcIDsKK+iKjeiWrCA8IHNoYWt1eWFrdVwgOwor5YaN5qeL5oiQIDwgc2Fpa291c2VpXCA7CivmnInmrrXogIUgPCB5dXVkYW5zaGFcIDsKK+WNmOiho+eJqSA8IGhpdG9lbW9ub1wgOwor6KaP5qC85YikIDwga2lrYWt1YmFuXCA7CivnrKzkuInogIUgPCBkYWlzYW5zaGFcIDsKK+WHuuacrSA8IHNodXNzYXRzdVwgOwor5Ymy5aKXIDwgd2FyaW1hc2hpXCA7CivkvZPmk43loLQgPCB0YWlzb3Vqb3VcIDsKK+S4u+a1gea0viA8IHNodXJ5dXVoYVwgOwor6Iqd6I2JIDwgc2hpYmFrdXNhXCA7CivluoPloLHlrpggPCBrb3Vob3VrYW5cIDsKK+ecn+adsSA8IG1haGlnYXNoaVwgOwor5Lq65bel5rGgIDwgamlua291aWtlXCA7Civlj6Pok4vlnoIgPCBrb3VnYWlzdWlcIDsKK+mHkeWJm+eggiA8IGtvbmdvdXNoYVwgOwor5Y2B5LiJ5aScIDwganV1c2FuJyd5YVwgOwor5aSn5a2m6ZmiIDwgZGFpZ2FrdWluXCA7CivkuZfnlKjou4ogPCBqb3V5b3VzaGFcIDsKK+S4jeaYjueiuiA8IGZ1bWVpa2FrdVwgOwor6Zi/5byl6ZmA57GkIDwgYW1pZGFrdWppXCA7CivonIPmsJfmpbwgPCBzaGlua2lyb3VcIDsKK+ikh+iRieapnyA8IGZ1a3V5b3VraVwgOwor5LqM562J6KaqIDwgbml0b3VzaGluXCA7CivojYnnq7bppqwgPCBrdXNha2VpYmFcIDsKK+aouOebtCA8IGJva3VjaG9rdVwgOwor6Zqg5YWD6LGGIDwgaW5nZW5tYW1lXCA7CivluZXmnKsgPCBiYWt1bWF0c3VcIDsKK+e0r+S5l+aguSA8IHJ1aWpvdWtvblwgOwor5qSO6aqoIDwgdHN1aWtvdHN1XCA7CivmnbHmtIvkurogPCB0b3V5b3VqaW5cIDsKK+ertuaKgOS8miA8IGt5b3VnaWthaVwgOwor5Yun6KqY5ZOhIDwga2FuJyd5dXVpblwgOwor6ICB5amG5b+DIDwgcm91YmFzaGluXCA7CivlgrXmqKnogIUgPCBzYWlrZW5zaGFcIDsKK+esrOS4gOe+qSA8IGRhaWljaGlnaVwgOwor5q2j5Ye6IDwgc2Vpc2h1dHN1XCA7CivlnKflgJLnmoQgPCBhdHRvdXRla2lcIDsKK+S4jeaYjueerSA8IGZ1bWVpcnlvdVwgOwor5pS+6Zu7566hIDwgaG91ZGVua2FuXCA7Civlh7bml6UgPCBreW91aml0c3VcIDsKK+WJjei6q+mggyA8IG1hZW1pZ29yb1wgOwor5bCR5pWw5rS+IDwgc2hvdXN1dWhhXCA7CivnibnmjZzpg6ggPCB0b2t1c291YnVcIDsKK+iqv+mmrOW4qyA8IGNob3ViYXNoaVwgOwor6YGK5aSxIDwgeXV1c2hpdHN1XCA7CivnkIboq5bnmoQgPCByaXJvbnRla2lcIDsKK+mjsuawtOmHjyA8IGluc3VpcnlvdVwgOwor6Kq/55CG5rOVIDwgY2hvdXJpaG91XCA7CivntK/niq/ogIUgPCBydWloYW5zaGFcIDsKK+i7iuidpiA8IGt1cnVtYWViaVwgOwor5aW96YO95ZCIIDwga291dHN1Z291XCA7Civlronlhajln58gPCBhbnplbicnaWtpXCA7CivomZrmoITlv4MgPCBreW9laXNoaW5cIDsKK+Wumuacn+eahCA8IHRlaWtpdGVraVwgOwor5Yid5b25IDwgaGF0c3V5YWt1XCA7Civoqo3lj6/oqLwgPCBuaW5rYXNob3VcIDsKK+S/oeW/g+WutiA8IHNoaW5qaW5rYVwgOwor5by35aem572qIDwgZ291a2FuemFpXCA7CivmlZnmjojkvJogPCBreW91anVrYWlcIDsKK+mAo+WQiOi7jSA8IHJlbmdvdWd1blwgOwor6YG45Ye6IDwgc2Vuc2h1dHN1XCA7Civov6vmjIEgPCBzZXJpbW9jaGlcIDsKK+mHjeWQiOS9kyA8IGp1dWdvdXRhaVwgOwor5Yqg6JmQ5oSbIDwga2FneWFrdWFpXCA7CivmsrPlt53mlbcgPCBrYXNlbmppa2lcIDsKK+i7jemaiuiRrCA8IGd1bnRhaXNvdVwgOwor5pWw5bm06ZaTIDwgc3V1bmVua2FuXCA7Civou73msJfnkIMgPCBrZWlraWt5dXVcIDsKK+mdkua1ruiNiSA8IGFvdWtpa3VzYVwgOwor5a2Y5Zyo5oSP576pIDwgc29uemFpaWdpXCA7Civlronmpb3mrbsgPCBhbnJha3VzaGlcIDsKK+mHkeW5s+ezliA8IGtvbnBlaXRvdVwgOwor5a6a5L2P5ZywIDwgdGVpanV1Y2hpXCA7Civph5HovKrpmpsgPCBrb25yaW56YWlcIDsKK+aWmeeQhuW6lyA8IHJ5b3VyaXRlblwgOwor6LK/5piT6aKoIDwgYm91ZWtpZnV1XCA7Civkurrlt6XmnpcgPCBqaW5rb3VyaW5cIDsKK+a1t+mBi+alrSA8IGthaXVuZ3lvdVwgOwor6KGj6aOf5L2PIDwgaXNob2t1anV1XCA7CivnnYDluoogPCBjaGFrdXNob3VcIDsKK+WvneWFt+mhniA8IHNoaW5ndXJ1aVwgOwor5bm05byxIDwgdG9zaGl5b3dhXCA7CivlsbHptokgPCB5YW1hdXp1cmFcIDsKK+adseWNl+adsSA8IHRvdW5hbnRvdVwgOwor77y35p2vIDwgZGFidXJ1aGFpXCA7CivnlLLmnb/lk6EgPCBrb3VoYW4nJ2luXCA7Civnj77ku6Plj7IgPCBnZW5kYWlzaGlcIDsKK+agueiPnOmhniA8IGtvbnNhaXJ1aVwgOwor552A5bitIDwgY2hha3VzZWtpXCA7CivlrprkvovkvJogPCB0ZWlyZWlrYWlcIDsKK+axuumXmOeKtiA8IGtldHRvdWpvdVwgOwor6JqV5Y2157SZIDwgc2FucmFuc2hpXCA7CivlpJbokpnlj6QgPCBzb3RvbW91a29cIDsKK+i+u+acrSA8IHRzdWppZnVkYVwgOwor6LuK5Lih5YyWIDwgc2hhcnlvdWthXCA7CivpganliIcgPCB0ZWtpc2V0c3VcIDsKK+WPiOW+k+WFhOW8nyA8IG1hdGFpdG9rb1wgOwor55m655eFIDwgaGF0c3VieW91XCA7CivmhJ/lhYnmgKcgPCBrYW5rb3VzZWlcIDsKK+esrOS4gOeroCA8IGRhaWlzc2hvdVwgOwor55eF6K2YIDwgYnlvdXNoaWtpXCA7CivlibXlh7ogPCBzb3VzaHV0c3VcIDsKK+WIpeWupCA8IGJlc3NoaXRzdVwgOwor6Ieo55WM54K5IDwgcmlua2FpdGVuXCA7CivllYblo7LmsJcgPCBzaG91YmFpZ2lcIDsKK+WbveaGsuazlSA8IGtva2tlbnBvdVwgOwor5Lih6Zmb5LiLIDwgcnlvdWhlaWthXCA7CivpmZDlrprniYggPCBnZW50ZWliYW5cIDsKK+WJjei7iui8qiA8IHplbnNoYXJpblwgOwor5bm05bWpIDwgdG9zaGlrYXNhXCA7Civnvr3mr5vluIPlm6MgPCB1bW91ZnV0b25cIDsKK+mbhOeJm+ezniA8IG91c2hpa3Vzb1wgOwor5LiN5aaK55eHIDwgZnVuaW5zaG91XCA7CivlpInmtYHlmaggPCBoZW5yeXV1a2lcIDsKK+WIneWtqyA8IGhhdHN1bWFnb1wgOwor5Ye65b6hIDwgc2h1dHN1Z3lvXCA7Civph53kvpvppIogPCBoYXJpa3V5b3VcIDsKK+W+ruimlueahCA8IGJpc2hpdGVraVwgOwor55uj6KaW5aGUIDwga2Fuc2hpdG91XCA7Civnmb3njokgPCBzaGlyYXRhbWFcIDsKK+WNoOaLoOWcsCA8IHNlbmt5b2NoaVwgOwor5oyH5ZCR5oCnIDwgc2hpa291c2VpXCA7CivkuIDkurrnlKggPCBoaXRvcml5b3VcIDsKK+iqv+mmrOWgtCA8IGNob3ViYWpvdVwgOwor5YaN6Ly45YWlIDwgc2FpeXVueXV1XCA7Civntr/mtKXoposgPCB3YXRhdHN1bWlcIDsKK+WEquiJr+WFkCA8IHl1dXJ5b3VqaVwgOwor5rWu5YuV56WoIDwgZnVkb3VoeW91XCA7CivlhYjlpKnmgKcgPCBzZW50ZW5zZWlcIDsKK+W9ouaIkOWxpCA8IGtlaXNlaXNvdVwgOwor55u05pKDIDwgY2hva3VnZWtpXCA7CivluKvnr4Tku6MgPCBzaGloYW5kYWlcIDsKK+W5tOWvhCA8IHRvc2hpeW9yaVwgOwor5LyR5q2i56ymIDwga3l1dXNoaWZ1XCA7Civmpo7ojLggPCBlbm9raXRha2VcIDsKK+S4jemdouebriA8IGZ1bWVubW9rdVwgOwor6Ii56JmrIDwgZnVuYW11c2hpXCA7CivlsI/ns6Dpm6ggPCBrb251a2FhbWVcIDsKK+acrOS6iOeulyA8IGhvbicneW9zYW5cIDsKK+aMh+WNl+eVqiA8IHNoaW5hbmJhblwgOwor6Ieq55Sx5qWtIDwgaml5dXVneW91XCA7CivnpoHovLjlk4EgPCBraW4nJ3l1aGluXCA7Civlj7jkvJrogIUgPCBzaGlrYWlzaGFcIDsKK+aKleeov+ashCA8IHRvdWtvdXJhblwgOwor55m954axIDwgaGFrdW5ldHN1XCA7CivmpbXoloQgPCBreW9rdWhha3VcIDsKK+eZveeGiiA8IHNoaXJva3VtYVwgOwor5oy/6Kmx55qEIDwgc291d2F0ZWtpXCA7CivlibLku5ggPCB3YXJpdHN1a2VcIDsKK+WIneWkoiA8IGhhdHN1eXVtZVwgOwor6YGT5Lit6KiYIDwgZG91Y2h1dWtpXCA7CivljYrloanmsLQgPCBoYW4nJ2Vuc3VpXCA7CivmjpLku5bnmoQgPCBoYWl0YXRla2lcIDsKK+Wkp+iFuOeCjiA8IGRhaWNob3VlblwgOwor5YiG5a6kIDwgYnVuc2hpdHN1XCA7CivlsLzms5XluKsgPCBhbWFob3VzaGlcIDsKK+Wumue9rue2siA8IHRlaWNoaWFtaVwgOwor5bq25Ye6IDwgc2hvc2h1dHN1XCA7CivlhaXmu4UgPCBueXV1bWV0c3VcIDsKK+iKuOiDveeVjCA8IGdlaW5vdWthaVwgOwor5Y2K5r+B6Z+zIDwgaGFuZGFrdW9uXCA7CivphY3nrqHlt6UgPCBoYWlrYW5rb3VcIDsKK+WJsuS4iyA8IHdhcmlzaGl0YVwgOwor54++5Luj5Lq6IDwgZ2VuZGFpamluXCA7CivovrLmvIHmsJEgPCBub3VneW9taW5cIDsKK+W4guadviA8IGljaGltYXRzdVwgOwor5aWz5oCn5a2mIDwgam9zZWlnYWt1XCA7Civkub7nh6XlnLAgPCBrYW5zb3VjaGlcIDsKK+WIhumhnuazlSA8IGJ1bnJ1aWhvdVwgOwor5Yip5bex5Li7576pIDwgcmlrb3NodWdpXCA7Civnn7Poho/lg48gPCBzZWtrb3V6b3VcIDsKK+W9seatpuiAhSA8IGthZ2VtdXNoYVwgOwor5rS754mI5pysIDwga2FwcGFuYm9uXCA7Civku5XkuovloLQgPCBzaGlnb3RvYmFcIDsKK+WppuS6uuacjSA8IGZ1amluZnVrdVwgOwor5a+d5b+D5ZywIDwgbmVnb2tvY2hpXCA7CivlhKrnlLcgPCB5YXNhb3Rva29cIDsKK+e1teW3u+eJqSA8IGVtYWtpbW9ub1wgOwor5LiN5paZ57ChIDwgZnVyeW91a2VuXCA7CivljJbnn7PlsaQgPCBrYXNla2lzb3VcIDsKK+aZqemkkOS8miA8IGJhbnNhbmthaVwgOwor5LuV5pS+6aGMIDwgc2hpaG91ZGFpXCA7CivmoYjlhoXnirYgPCBhbicnbmFpam91XCA7CivlpJrlhYPnmoQgPCB0YWdlbnRla2lcIDsKK+WItua1t+aoqSA8IHNlaWthaWtlblwgOwor5Lqk6YWN56iuIDwga291aGFpc2h1XCA7CivovaLmrrogPCByZWtpc2F0c3VcIDsKK+WcqOS9j+iAhSA8IHphaWp1dXNoYVwgOwor5oiQ54af5pyfIDwgc2VpanVrdWtpXCA7CivnnJ/lrp8gPCBzaGluaml0c3VcIDsKK+WFseWSjOWFmiA8IGt5b3V3YXRvdVwgOwor5bmz5pa55qC5IDwgaGVpaG91a29uXCA7Civoq5zloLHlk6EgPCBjaG91aG91aW5cIDsKK+iIiOWlruWJpCA8IGtvdWZ1bnphaVwgOwor55m95rudIDwgc2hpcmF0YWtpXCA7CivlhYjopovogIUgPCBzZW5rZW5zaGFcIDsKK+iIquepuuWIuCA8IGtvdWt1dWtlblwgOwor6YCf5Y+jIDwgaGF5YWt1Y2hpXCA7CivlhYnpm7vlrZAgPCBrb3VkZW5zaGlcIDsKK+mAsuWFpSA8IHNoaW4nJ255dXVcIDsKK+WEsueJqSA8IG1vdWtlbW9ub1wgOwor6IWw6auYIDwga29zaGlkYWthXCA7Civlo7Llm73lpbQgPCBiYWlrb2t1ZG9cIDsKK+e5geWIhuaVsCA8IGhhbmJ1bnN1dVwgOwor5oCn6KGM5YuVIDwgc2Vpa291ZG91XCA7CivpioDooYzliLggPCBnaW5rb3VrZW5cIDsKK+api+ahgSA8IGhhc2hpZ2V0YVwgOwor5LiH5LiH5q2zIDwgYmFuYmFuemFpXCA7Civpqqjos6ogPCBrb3NzaGl0c3VcIDsKK+WBnOiIueWgtCA8IHRlaXNlbmpvdVwgOwor6IWw6aqoIDwga29zaGlib25lXCA7CivlmIbpoZjmm7ggPCB0YW5nYW5zaG9cIDsKK+WGjeeUn+eUoyA8IHNhaXNlaXNhblwgOwor5Zyw5a++5ZywIDwgY2hpdGFpY2hpXCA7Civkv67po74gPCBzaHV1c2hva3VcIDsKK+aWh+S9k+irliA8IGJ1bnRhaXJvblwgOwor6Kq/5p+75ZujIDwgY2hvdXNhZGFuXCA7Civnmb3mtaogPCBzaGlyYW5hbWlcIDsKK+WNmOihjOacrCA8IHRhbmtvdWJvblwgOwor5bCP5aSc5puyIDwgc2F5b2t5b2t1XCA7Civlh7rkuJbplpMgPCBzaHVzc2VrZW5cIDsKK+eZvea1nCA8IHNoaXJhaGFtYVwgOwor6Im256iuIDwgdHN1eWFkYW5lXCA7CivpgJ/lipsgPCBzb2t1cnlva3VcIDsKK+WNmOihjOabuCA8IHRhbmtvdXNob1wgOwor5LiA5pmC6ZaTIDwgaWNoaWppa2FuXCA7CivmuKnms4npg7cgPCBvbnNlbmt5b3VcIDsKK+i+u+W6lyA8IHRzdWppbWlzZVwgOwor5pyJ5ZCN5Lq6IDwgeXV1bWVpamluXCA7CivlvoznlLLmnb8gPCBrb3VrYW5wYW5cIDsKK+WWtuWIqeS4u+e+qSA8IGVpcmlzaHVnaVwgOwor5byx5L2T5YyWIDwgamFrdXRhaWthXCA7CivntYzmuIjpnaIgPCBrZWl6YWltZW5cIDsKK+S/rumok+mBkyA8IHNodWdlbmRvdVwgOwor6Iy25omAIDwgY2hhZG9rb3JvXCA7CivlvoDnlJ/pmpsgPCBvdWpvdWdpd2FcIDsKK+W6g+WPoyA8IGhpcm9rdWNoaVwgOwor5bC66aqoIDwgc2hha2tvdHN1XCA7Civlh7rloYEgPCBzaHV0c3VydWlcIDsKK+aui+WtmOiAhSA8IHphbnpvbnNoYVwgOwor6Iiq56m65L6/IDwga291a3V1YmluXCA7CivmoLjmraboo4UgPCBrYWt1YnVzb3VcIDsKK+ebruW6hyA8IG1hYmlzYXNoaVwgOwor55m95rC0IDwgc2hpcm9taXp1XCA7CivoibLnpZ4gPCBzaGlraXNoaW5cIDsKK+Wfi+iUtemHkSA8IG1haXpvdWtpblwgOwor5a2k56uL5YyWIDwga29yaXRzdWthXCA7CivogZblrrbml48gPCBzZWlrYXpva3VcIDsKK+azpeeCreWcsCA8IGRlaXRhbmNoaVwgOwor5aSW6Lyq6Ii5IDwgZ2Fpcmluc2VuXCA7CivopIfliKnms5UgPCBmdWt1cmlob3VcIDsKK+WFpeakjSA8IG55dXVzaG9rdVwgOwor6JK455WZ5ZmoIDwgam91cnl1dWtpXCA7CivpkZHlrprmm7ggPCBrYW50ZWlzaG9cIDsKK+ijveawt+apnyA8IHNlaWh5b3VraVwgOwor55u05bGeIDwgY2hva3V6b2t1XCA7CivmtojosrvosqEgPCBzaG91aGl6YWlcIDsKK+iRl+S9nOWutiA8IGNob3Nha3VrYVwgOwor5biC6LKp5ZOBIDwgc2hpaGFuaGluXCA7Civlt7vpoK3oqIAgPCBrYW50b3VnZW5cIDsKK+WHoeWksSA8IGJvbnNoaXRzdVwgOwor6Kq/55CG5birIDwgY2hvdXJpc2hpXCA7Civlha3mnIggPCByb2t1Z2F0c3VcIDsKK+ecn+ahkeeTnCA8IG1ha3V3YXVyaVwgOwor6ZqP5b6T6ICFIDwgenVpanV1c2hhXCA7CivkuIDlr7jlhYggPCBpc3N1bnNha2lcIDsKK+aWh+WtpumDqCA8IGJ1bmdha3VidVwgOwor5LqI57SE5Yi2IDwgeW95YWt1c2VpXCA7Civnt5rpgJ/luqYgPCBzZW5zb2t1ZG9cIDsKK+W5s+mdouW9oiA8IGhlaW1lbmtlaVwgOwor6KSH5q+U5L6LIDwgZnVrdWhpcmVpXCA7CivmlaPmsLTou4ogPCBzYW5zdWlzaGFcIDsKK+S4gOaZgumHkSA8IGljaGlqaWtpblwgOwor5YmN5bm05bqmIDwgemVuJyduZW5kb1wgOwor54Sh5aOw5pig55S7IDwgbXVzZWllaWdhXCA7CivlhaXmnK0gPCBueXV1c2F0c3VcIDsKK+eZuuihjOiAhSA8IGhha2tvdXNoYVwgOwor5YGc55WZ5omAIDwgdGVpcnl1dWpvXCA7Civlrq7ln47nnIwgPCBtaXlhZ2lrZW5cIDsKK+WJjeWJjeWbniA8IHplbnplbmthaVwgOwor54eX5b6z5YipIDwga2FuZG9rdXJpXCA7CivmrbvliJHloLQgPCBzaGlrZWlqb3VcIDsKK+WxsemBkyA8IHlhbWFtaWNoaVwgOwor5be75a2Q5pysIDwga2Fuc2hpaG9uXCA7CivpgIDlh7ogPCB0YWlzaHV0c3VcIDsKK+alveevgCA8IGdha3VzZXRzdVwgOwor5bi45aSPIDwgdG9rb25hdHN1XCA7CivnlLrorbDkvJogPCBjaG91Z2lrYWlcIDsKK+eUs+mBlCA8IHNoaW50YXRzdVwgOwor5Lq655Sf6KazIDwgamluc2Vpa2FuXCA7CivnnJ/nj6Dosp0gPCBzaGluanVnYWlcIDsKK+iLpeadviA8IHdha2FtYXRzdVwgOwor5bGA6ZW3IDwga3lva3VjaG91XCA7CivprLznk6YgPCBvbmlnYXdhcmFcIDsKK+W4neWupCA8IHRlaXNoaXRzdVwgOwor5Lqs6YO95biCIDwga3lvdXRvc2hpXCA7Civpm6jlj7DpoqggPCBhbWV0YWlmdXVcIDsKK+iHqueUseW9oiA8IGppeXV1Z2F0YVwgOwor5YWN6Kix5Yi2IDwgbWVua3lvc2VpXCA7Civpm5HloLHmrIQgPCB6YXBwb3VyYW5cIDsKK+aEm+WFmuW/gyA8IGFpdG91c2hpblwgOwor6Ziy5q2i5rOVIDwgYm91c2hpaG91XCA7Civoo5zliqnmvKLlrZcgPCBob2pva2FuamlcIDsKK+W6iuS4iyA8IHl1a2FzaGl0YVwgOwor6YG45oyZ5rOVIDwgc2Vua3lvaG91XCA7Civlkozoi7Hovp7mm7ggPCB3YWVpamlzaG9cIDsKK+edgOS/oSA8IGNoYWt1c2hpblwgOwor5aSp5LqV6KOPIDwgdGVuam91dXJhXCA7CivljYrpmbDlvbEgPCBoYW4nJ2luJydlaVwgOwor5pyA6YeN54K5IDwgc2FpanV1dGVuXCA7CivkuIDlr77kuIAgPCBpdHRhaWljaGlcIDsKK+eZveacrSA8IHNoaXJvZnVkYVwgOwor5YiH5YWlIDwgc2V0c3VueXV1XCA7CivmqJnmnK0gPCBoeW91c2F0c3VcIDsKK+WHuuWLlSA8IHNodXRzdWRvdVwgOwor6L+r5YqbIDwgaGFrdXJ5b2t1XCA7CivlsZHpiYQgPCBrdXp1dGV0c3VcIDsKK+mrque2sSA8IGthbWlkenVuYVwgOwor6YG45oyZ5rCRIDwgc2Vua3lvbWluXCA7CivpgJDkuIAgPCBjaGlrdWljaGlcIDsKK+aVmeWUhuiAhSA8IGt5b3VzYXNoYVwgOwor5paZ55CG5Lq6IDwgcnlvdXJpbmluXCA7Civoh6rnlLHluK0gPCBqaXl1dXNla2lcIDsKK+aciOWIiuiqjCA8IGdla2thbnNoaVwgOwor5L616aOfIDwgc2hpbnNob2t1XCA7CivkuI3nhp/nt7QgPCBmdWp1a3VyZW5cIDsKK+WPpOWFuOeahCA8IGtvdGVudGVraVwgOwor6Iqx5rC3IDwgaGFuYWdvb3JpXCA7Civkv4Tpm6ggPCBuaXdha2FhbWVcIDsKK+Wkieatu+iAhSA8IGhlbnNoaXNoYVwgOwor5pys5qC85YyWIDwgaG9ua2FrdWthXCA7Civku5XkuIrlt6UgPCBzaGlhZ2Vrb3VcIDsKK+eJoeS4ueadjyA8IGJvdGFua3lvdVwgOwor5bmz5pa55b2iIDwgaGVpaG91a2VpXCA7CivlpInljJbnkIMgPCBoZW5rYWt5dXVcIDsKK+mBoOmalOimliA8IGVua2FrdXNoaVwgOwor6Iy25a6kIDwgY2hhc2hpdHN1XCA7Civpm5HoqJjluLMgPCB6YWtraWNob3VcIDsKK+WcqOagoeeUnyA8IHphaWtvdXNlaVwgOwor55m95pelIDwgaGFrdWppdHN1XCA7CivkvqDpqqggPCBreW91a290c3VcIDsKK+WQjOS9jeWFg+e0oCA8IGRvdWlnZW5zb1wgOwor5pGp5pOm6Z+zIDwgbWFzYXRzdW9uXCA7CivlsJHpo58gPCBzaG91c2hva3VcIDsKK+W3s+W5tCA8IGhlYmlkb3NoaVwgOwor6JuN54OP6LOKIDwgaG90YXJ1aWthXCA7CivoibbniakgPCB0c3V5YW1vbm9cIDsKK+WGjeeUn+azlSA8IHNhaXNlaWhvdVwgOwor5aSa55m65qmfIDwgdGFoYXRzdWtpXCA7CivlhrflpbQgPCBoaXlheWFra29cIDsKK+a0u+eJiOWxiyA8IGthcHBhbicneWFcIDsKK+mHkeWJm+aJiyA8IGtvbmdvdXNodVwgOwor6KKr5a6z6aGNIDwgaGlnYWlnYWt1XCA7Civlho3lvpPlhYTlvJ8gPCBmdXRhaXRva29cIDsKK+mBuOaMmeaoqSA8IHNlbmt5b2tlblwgOwor5Z+65pys57WmIDwga2lob25reXV1XCA7CivpnZ7ph5HlsZ4gPCBoaWtpbnpva3VcIDsKK+Wwj+mgrSA8IGtvZ2FzaGlyYVwgOwor54yp54yp57eLIDwgc2hvdWpvdWhpXCA7Civlm57mlZnlvpIgPCBrYWlreW91dG9cIDsKK+aMh+ekuuWFiCA8IHNoaWppc2FraVwgOwor5YKZ5b+Y6YyyIDwgYmlib3Vyb2t1XCA7CivnoILns5bpu40gPCBzYXRvdWtpYmlcIDsKK+ahiOWGheabuCA8IGFuJyduYWlzaG9cIDsKK+WKn+WKtOmHkSA8IGtvdXJvdWtpblwgOwor6KKr5beu5YilIDwgaGlzYWJldHN1XCA7Civnl5jnl5XpnaIgPCBhYmF0YXp1cmFcIDsKK+acseaWh+mHkSA8IHNodWJ1bmtpblwgOwor5LiN6Ky55oWOIDwgZnVraW5zaGluXCA7Civogp3noazlpIkgPCBrYW5rb3VoZW5cIDsKK+acq+acn+eahCA8IG1ha2tpdGVraVwgOwor56S85aWJ5YWsIDwgcmVpYm91a291XCA7CivljZTmioDogIUgPCBreW91Z2lzaGFcIDsKK+Wkmui2s+mhniA8IHRhc29rdXJ1aVwgOwor5bGI6L6xIDwga3V0c3Vqb2t1XCA7CivnpZ7np5jmgKcgPCBzaGlucGlzZWlcIDsKK+ayuOmosOeCuSA8IGZ1dHRvdXRlblwgOwor6aSK6a2a5rGgIDwgeW91Z3lvY2hpXCA7CivprZTms5XnmoQgPCBtYWhvdXRla2lcIDsKK+S6nOmJm+WHuOeJiCA8IGFlbnRvcHBhblwgOwor6KO95rC35omAIDwgc2VpaHlvdWpvXCA7CivplqLopb/lvIEgPCBrYW5zYWliZW5cIDsKK+mqqOiGnCA8IGtvdHN1bWFrdVwgOwor5YWr5Y2D6I2JIDwgeWFjaGlndXNhXCA7CivnlLrop5IgPCBtYWNoaWthZG9cIDsKK+i+u+WQmyA8IHRzdWppZ2ltaVwgOwor55yB5YqbIDwgc2hvdXJ5b2t1XCA7Civpr4nluZ8gPCBrb2lub2JvcmlcIDsKK+mBk+S6pOazlSA8IGRvdWtvdWhvdVwgOwor6YeO6I+c5rGBIDwgeWFzYWlqaXJ1XCA7CivmlqHml4vmlpkgPCBhc3NlbnJ5b3VcIDsKK+i1pOmwryA8IGFrYWl3YXNoaVwgOwor6Iiq5rW35aOrIDwga291a2Fpc2hpXCA7Civmta7li5XmoKogPCBmdWRvdWthYnVcIDsKK+mqqOiCiSA8IGtvdHN1bmlrdVwgOwor5YaF5a6kIDwgbmFpc2hpdHN1XCA7Civmt7fkuqTmnpcgPCBrb25rb3VyaW5cIDsKK+aooeevhOWbmiA8IG1vaGFuc2h1dVwgOwor5bed5bK4IDwga2F3YWdpc2hpXCA7CivorJvnvqnpjLIgPCBrb3VnaXJva3VcIDsKK+W5leS4iyA8IG1ha3VzaGl0YVwgOwor55uu5Y2wIDwgbWVqaXJ1c2hpXCA7CivnlJ/lrZjogIUgPCBzZWl6b25zaGFcIDsKK+Wwu+i7vSA8IHNoaXJpZ2FydVwgOwor5LiN6Kys5oCnIDwgZnVieXV1c2VpXCA7CivlsI7pm7vmgKcgPCBkb3VkZW5zZWlcIDsKK+aUuemdqeahiCA8IGthaWtha3VhblwgOwor56OB5rCX5rWu5LiKIDwgamlraWZ1am91XCA7CivnlLfooYYgPCBvdG9rb3NodXVcIDsKK+azleaUueatoyA8IGhvdWthaXNlaVwgOwor55Sf55Sj5oCnIDwgc2Vpc2Fuc2VpXCA7CivpsJDlj6MgPCB3YW5pZ3VjaGlcIDsKK+S4iuS4reS4iyA8IGpvdWNodXVnZVwgOwor5L+h6LaKIDwgc2hpbicnZXRzdVwgOwor5L+K6YC4IDwgc2h1bicnaXRzdVwgOwor57Wm5rC05omAIDwga3l1dXN1aWpvXCA7CivnjJznlpHlv4MgPCBzYWlnaXNoaW5cIDsKK+S4jeiqv+azlSA8IGJ1Y2hvdWhvdVwgOwor5bGe6KiXIDwgc2hva3V0YWt1XCA7Civnm7LliKQgPCBtZWt1cmFiYW5cIDsKK+WPl+WLleeahCA8IGp1ZG91dGVraVwgOwor6Kq/55CG5Y+wIDwgY2hvdXJpZGFpXCA7CivnqbrplpHlnLAgPCBrdXVrYW5jaGlcIDsKK+WKtOWDjeelrSA8IHJvdWRvdXNhaVwgOwor5YaN5p2l6YCxIDwgc2FyYWlzaHV1XCA7CivoibLmsqIgPCBzaGlraXRha3VcIDsKK+WFreWwuiA8IHJva3VzaGFrdVwgOwor5Luj6KGo6YOoIDwgZGFpaHlvdWJ1XCA7Civlg4XlsJHlt64gPCBraW5zaG91c2FcIDsKK+WRqOacn+aApyA8IHNodXVraXNlaVwgOwor6aOb6KGM5pyNIDwgaGlrb3VmdWt1XCA7CivkuI3nibnlrpogPCBmdXRva3V0ZWlcIDsKK+ihqOmdouWMliA8IGh5b3VtZW5rYVwgOwor5biC5pyJ5ZywIDwgc2hpeXV1Y2hpXCA7CivmqJnmupboqp4gPCBoeW91anVuZ29cIDsKK+i+m+WPoyA8IGthcmFrdWNoaVwgOwor5rC05bmz6Z2iIDwgc3VpaGVpbWVuXCA7CivkuqTpgJrot68gPCBrb3V0c3V1cm9cIDsKK+a2iOiyu+iAhSA8IHNob3VoaXNoYVwgOwor5Y+k6YGT5YW3IDwgZnVydWRvdWd1XCA7Civln7rmnKznmoQgPCBraWhvbnRla2lcIDsKK+iNieWbo+WtkCA8IGt1c2FkYW5nb1wgOwor55yf54+g6ImyIDwgc2hpbmp1aXJvXCA7CivntbHluKXmqKkgPCB0b3VzdWlrZW5cIDsKK+iJsuassiA8IHNoaWtpeW9rdVwgOwor57e057+S5qmfIDwgcmVuc2h1dWtpXCA7CivmpbXnhrEgPCBnb2t1bmV0c3VcIDsKK+i3s+iZqyA8IHRvYmltdXNoaVwgOwor5piH6ZmN6Ii1IDwgc2hvdWtvdWRhXCA7CivlhbXluqvnnIwgPCBoeW91Z29rZW5cIDsKK+WFrOa1t+S4iiA8IGtvdWthaWpvdVwgOwor5r+A5oim5Yy6IDwgZ2VraXNlbmt1XCA7CivlhIDnpLznmoQgPCBnaXJlaXRla2lcIDsKK+acieW5s+ezliA8IGFydWhlaXRvdVwgOwor55eb54OIIDwgdHN1dXJldHN1XCA7CivkuqTpgJrosrsgPCBrb3V0c3V1aGlcIDsKK+iHo+evgCA8IHNoaW5zZXRzdVwgOwor6YeR6a2a6I2JIDwga2luZ3lvc291XCA7CivnnYDngavngrkgPCBjaGFra2F0ZW5cIDsKK+mBuOaMmeaIpiA8IHNlbmt5b3NlblwgOwor6aqo566xIDwga290c3ViYWtvXCA7CivlrpfkuLvmqKkgPCBzb3VzaHVrZW5cIDsKK+awtOmFuOaguSA8IHN1aXNhbmtvblwgOwor6LWk5Y2B5a2XIDwgc2VraWp1dWppXCA7Civok4Tpn7PmqZ8gPCBjaGlrdW9ua2lcIDsKK+S/l+iqrCA8IHpva3VzZXRzdVwgOwor6Ieq5bCK5b+DIDwgamlzb25zaGluXCA7CivooajoqJjms5UgPCBoeW91a2lob3VcIDsKK+mcsuWkqeWVhiA8IHJvdGVuc2hvdVwgOwor5LyR5bu35pelIDwga3l1dXRlaWJpXCA7Civpo7LphZLnmZYgPCBpbnNodWhla2lcIDsKK+S4gOaWiemrmCA8IGlzc2VpZGFrYVwgOwor5Yem5YiR5Y+wIDwgc2hva2VpZGFpXCA7CivlhrfmiL/ou4ogPCByZWlib3VzaGFcIDsKK+aknOeWq+aJgCA8IGtlbicnZWtpam9cIDsKK+eFp+W6puioiCA8IHNob3Vkb2tlaVwgOwor5Y+O56iO5ZCPIDwgc2h1dXplaXJpXCA7Civllonoh6rmhaIgPCBub2RvamltYW5cIDsKK+mHkeeci+advyA8IGtpbmthbmJhblwgOwor5pWj5by+6YqDIDwgc2FuZGFuanV1XCA7CivlhLLlvbkgPCBtb3VrZXlha3VcIDsKK+Wfuemkiua2siA8IGJhaXlvdWVraVwgOwor5aSp54uX6aKoIDwgdGVuZ3VrYXplXCA7CivkuIDmnKzmnYkgPCBpcHBvbnN1Z2lcIDsKK+a4rOW+ruioiCA8IHNva3ViaWtlaVwgOwor6aKo6Ie05p6XIDwgZnV1Y2hpcmluXCA7CivlnLDnkIblraYgPCBjaGlyaWdha3VcIDsKK+e+jumjn+WutiA8IGJpc2hva3VrYVwgOwor5bC/6YGT54KOIDwgbnlvdWRvdWVuXCA7CivonrPonoLmi7MgPCB0b3Vyb3VrZW5cIDsKK+iqv+eQhuS6uiA8IGNob3VyaW5pblwgOwor5Zar54WZ5omAIDwga2l0c3VlbmpvXCA7CivmmYLliIbmmYIgPCBqaWJ1bmRva2lcIDsKK+S+m+i/sCA8IGt5b3VqdXRzdVwgOwor5YWr6YeN5qGcIDwgeWFlemFrdXJhXCA7CivljZfom67oiLkgPCBuYW5iYW5zZW5cIDsKK+ixjOixhuixhiA8IGVuZG91bWFtZVwgOwor5bO754OIIDwgc2h1bnJldHN1XCA7CivnlLfohbkgPCBvdG9rb2JhcmFcIDsKK+WbnuaVsOWIuCA8IGthaXN1dWtlblwgOwor6KO96YCg6ICFIDwgc2Vpem91c2hhXCA7Civph43lvbnkvJogPCBqdXV5YWtrYWlcIDsKK+WMl+asp+S6uiA8IGhva3VvdWppblwgOwor5LiA5Lq65a2QIDwgaGl0b3Jpa2tvXCA7CivmpbXmtYEgPCBreW9rdXJ5dXVcIDsKK+atu+eUn+imsyA8IHNoaXNlaWthblwgOwor54Kt55a955eFIDwgdGFuc29ieW91XCA7Civnmb3lnLDlm7MgPCBoYWt1Y2hpenVcIDsKK+eVpeeroCA8IHJ5YWt1c2hvdVwgOwor6byI55Sy6ImyIDwgYmVra291aXJvXCA7CivkuZfou4rliLggPCBqb3VzaGFrZW5cIDsKK+a4rOeoi+WZqCA8IHNva3V0ZWlraVwgOwor5YaG6Iie5puyIDwgZW5idWt5b2t1XCA7Civoia/ml6UgPCByeW91aml0c3VcIDsKK+a2iOiyu+eojiA8IHNob3VoaXplaVwgOwor5aOB5LiA6YeNIDwga2FiZWhpdG9lXCA7Civlm5vpnaLkvZMgPCBzaGltZW50YWlcIDsKK+W3puWJjSA8IGhpZGFyaW1hZVwgOwor5Zyo5p2l57eaIDwgemFpcmFpc2VuXCA7CivlpKfnkIbnn7MgPCBkYWlyaXNla2lcIDsKK+eUn+eUo+WcsCA8IHNlaXNhbmNoaVwgOwor5a++6LOqIDwgdGFpc2hpdHN1XCA7CivkuI3ms5Xnp7vmsJEgPCBmdWhvdWltaW5cIDsKK+eJh+eUsOiIjiA8IGthdGFpbmFrYVwgOwor6KSH5YaZ5qmfIDwgZnVrdXNoYWtpXCA7CivlsI/oqqwgPCBzaG91c2V0c3VcIDsKK+miqOS/l+eUuyA8IGZ1dXpva3VnYVwgOwor5bem5YWaIDwgaGlkYXJpdG91XCA7CivohIfpgZMgPCB3YWtpbWljaGlcIDsKK+WBtOmdouWbsyA8IHNva3VtZW56dVwgOwor5qO556ekIDwgc2FvYmFrYXJpXCA7CivotormqKnooYzngrogPCBla2tlbmtvdWlcIDsKK+iogOiqnuWtpiA8IGdlbmdvZ2FrdVwgOwor5beh6Iiq6Ii5IDwganVua291c2VuXCA7Civljp/lp4vmnpcgPCBnZW5zaGlyaW5cIDsKK+iHs+S4iuaoqSA8IHNoaWpvdWtlblwgOwor5bCP5aOy5ZWGIDwga291cmlzaG91XCA7CivmoZzosp0gPCBzYWt1cmFnYWlcIDsKK+e1seWItuWTgSA8IHRvdXNlaWhpblwgOwor55eF5rKhIDwgYnlvdWJvdHN1XCA7CivnrKzkuIDlr6kgPCBkYWlpc3NoaW5cIDsKK+e0heavm+S6uiA8IGtvdW1vdWppblwgOwor6Ii55qmLIDwgZnVuYWJhc2hpXCA7CivorITlhpnniYggPCB0b3VzaGFiYW5cIDsKK+aOp+iotOWvqSA8IGtvdXNvc2hpblwgOwor5Lit5Y+k6LuKIDwgY2h1dWtvc2hhXCA7Civpq6rmsrkgPCBrYW1pYWJ1cmFcIDsKK+aWsOe0gOWFgyA8IHNoaW5raWdlblwgOwor57e057+S5omAIDwgcmVuc2h1dWpvXCA7Civnq4vmlrnmoLkgPCByaXBwb3Vrb25cIDsKK+efremfs+majiA8IHRhbicnb25rYWlcIDsKK+S4u+aEj+S4u+e+qSA8IHNodWlzaHVnaVwgOwor5a6j6KqT5pu4IDwgc2Vuc2Vpc2hvXCA7Civkuozmi43lrZAgPCBuaWJ5b3VzaGlcIDsKK+WKtOi+suWFmiA8IHJvdW5vdXRvdVwgOwor5b285bK46IqxIDwgaGlnYW5iYW5hXCA7Civlv6DprYLnopEgPCBjaHV1a29uaGlcIDsKK+acieWKueaApyA8IHl1dWtvdXNlaVwgOwor5LiJ5pel5pyIIDwgbWlrYWR6dWtpXCA7CivnmbrmjK/mqZ8gPCBoYXNzaGlua2lcIDsKK+iHquW3seaknOafuyA8IGppa29rZW5zYVwgOwor57eP5YuZ5bqBIDwgc291bXVjaG91XCA7Civnl4XmrKAgPCBieW91a2V0c3VcIDsKK+WFq+WIhyA8IHlhdHN1Z2lyaVwgOwor5rWB6KGM6KqeIDwgcnl1dWtvdWdvXCA7CivlhoXprq7kurogPCBuYWlzZW5qaW5cIDsKK+WFpeWKmyA8IG55dXVyeW9rdVwgOwor55Sf55CG55qEIDwgc2Vpcml0ZWtpXCA7CivlkI3oqonmhb4gPCBtZWl5b3lva3VcIDsKK+WKquWKm+WutiA8IGRvcnlva3VrYVwgOwor5Zyo5p2l56iuIDwgemFpcmFpc2h1XCA7CivnlLrnrYsgPCBtYWNoaXN1amlcIDsKK+WkmuS6i+WkmumboyA8IHRhaml0YW5hblwgOwor5Yqg56Gr5rOVIDwga2FyeXV1aG91XCA7CivlpKflrrbml48gPCBkYWlrYXpva3VcIDsKK+aZr+aVmeW+kiA8IGtlaWt5b3V0b1wgOwor77yh77yi77yj6aCGIDwgxJNixKtzaMSranVuXCA7CivohILotrMgPCBhYnVyYWFzaGlcIDsKK+eUuueriyA8IGNob3VyaXRzdVwgOwor6auY56mN6ZuyIDwga291c2VraXVuXCA7CivmhI/msJfmj5rmj5ogPCBpa2l5b3V5b3VcIDsKK+S5l+iIueWIuCA8IGpvdXNlbmtlblwgOwor6ISa6Ki7IDwga3lha3VjaHV1XCA7Civlho3lr6nmn7sgPCBzYWlzaGluc2FcIDsKK+eUqOiqnumbhiA8IHlvdWdvc2h1dVwgOwor5qW15pyIIDwgZ29rdWdldHN1XCA7CivosqDlgrfogIUgPCBmdXNob3VzaGFcIDsKK+iEguizqiA8IHNoaXNoaXRzdVwgOwor5Yq05YON5rOVIDwgcm91ZG91aG91XCA7CivmsY7nlKjmqZ8gPCBoYW4nJ3lvdWtpXCA7CivoiJ/mqYsgPCBmdW5haGFzaGlcIDsKK+S+m+ihgCA8IGt5b3VrZXRzdVwgOwor5ZCN6KqJ5b+DIDwgbWVpeW9zaGluXCA7CivpkZHlrprkurogPCBrYW50ZWluaW5cIDsKK+W3neS4iyA8IGthd2FzaGltb1wgOwor5oqV56Wo5pelIDwgdG91aHlvdWJpXCA7CivlhYjooYzoqZ4gPCBzZW5rb3VzaGlcIDsKK+eLrOa8lOS8miA8IGRva3VlbmthaVwgOwor6Z+z6Z+75a2mIDwgb24nJ2luZ2FrdVwgOwor5Yqf5Yq06ICFIDwga291cm91c2hhXCA7Civlrp/pjLIgPCBqaXRzdXJva3VcIDsKK+iEs+e0sOiDniA8IG5vdXNhaWJvdVwgOwor576O5paH6Kq/IDwgYmlidW5jaG91XCA7CivmmI7ntLDmm7ggPCBtZWlzYWlzaG9cIDsKK+eUt+aWh+WtlyA8IG90b2tvbW9qaVwgOwor5ZKM6Iux6L6e5YW4IDwgd2FlaWppdGVuXCA7Civnt4/li5jlrpogPCBzb3VrYW5qb3VcIDsKK+iJsuW8sSA8IHNoaWtpamFrdVwgOwor5Zue6Kan5p2/IDwga2FpcmFuYmFuXCA7Civku7vlkb3nirYgPCBuaW5tZWlqb3VcIDsKK+eZuuWHuiA8IGhhc3NodXRzdVwgOwor5LiK57SN6YeRIDwgam91bm91a2luXCA7Civmi7fllY/lj7AgPCBnb3Vtb25kYWlcIDsKK+iFsOe4hCA8IGtvc2hpbmF3YVwgOwor55Sf56+AIDwgbmFtYWJ1c2hpXCA7CivkuIrlpY/mlocgPCBqb3Vzb3VidW5cIDsKK+iHquiyrOeCuSA8IGppc2VraXRlblwgOwor6Laz6IWwIDwgYXNoaWtvc2hpXCA7Civliqnnm6PnnaMgPCBqb2thbnRva3VcIDsKK+WFpeS7jyA8IG55dXVidXRzdVwgOwor5Yem55Sf6KiTIDwgc2hvc2Vpa3VuXCA7CivlhaXkuqQgPCBpcmltYWppcmlcIDsKK+iFsOe0kCA8IGtvc2hpaGltb1wgOwor5pys6Kmm6aiTIDwgaG9uc2hpa2VuXCA7CivlpJbkv6Hpg6ggPCBnYWlzaGluYnVcIDsKK+S/rueviSA8IHNodXVjaGlrdVwgOwor5LiA5Lq65YmNIDwgaGl0b3JpbWFlXCA7CivlirTlg43mqKkgPCByb3Vkb3VrZW5cIDsKK+iCiemjnyA8IG5pa3VzaG9rdVwgOwor5Zyw55CD5YSAIDwgY2hpa3l1dWdpXCA7CivlnLDkuIrmqKkgPCBjaGlqb3VrZW5cIDsKK+S/oee0hCA8IHNoaW4nJ3lha3VcIDsKK+mHkeWxj+miqCA8IGtpbmJ5b3VidVwgOwor5bCO6Zu75L2TIDwgZG91ZGVudGFpXCA7CivlhbHnm4rosrsgPCBreW91ZWtpaGlcIDsKK+iEseiQvSA8IGRhdHN1cmFrdVwgOwor5LiN5oSP6Kmm6aiTIDwgZnVpc2hpa2VuXCA7Civppqzpub/pnaIgPCBiYWthZHp1cmFcIDsKK+Wcn+eUqOazoiA8IGRveW91bmFtaVwgOwor57eP6YG45oyZIDwgc291c2Vua3lvXCA7CivliLblvqHnm6QgPCBzZWlneW9iYW5cIDsKK+W/g+aEj+awlyA8IGtva29yb2lraVwgOwor5qih56+E6Kmm5ZCIIDwgbW9oYW5qaWFpXCA7Civph43lirTlg40gPCBqdXVyb3Vkb3VcIDsKK+aJi+amtOW8viA8IHRlcnl1dWRhblwgOwor5LiA5p6a5LiKIDwgaWNoaW1haXVlXCA7CivlpKnkupXnga8gPCB0ZW5qb3V0b3VcIDsKK+mkiumtmuWgtCA8IHlvdWd5b2pvdVwgOwor5oqV56Wo5omAIDwgdG91aHlvdWpvXCA7CivovKnlh7ogPCBoYWlzaHV0c3VcIDsKK+W6p+aomeezuyA8IHphaHlvdWtlaVwgOwor5YaG5YCf5qy+IDwgZW5zaGFra2FuXCA7Civntbblr77oq5YgPCB6ZXR0YWlyb25cIDsKK+aNleiZq+e2siA8IGhvY2h1dWFtaVwgOwor5Ye65p2l5pifIDwgZGVraWJvc2hpXCA7Civkuozph43mr43pn7MgPCBuaWp1dWJvaW5cIDsKK+iKseafs+eVjCA8IGthcnl1dWthaVwgOwor5YWs5rCR5qipIDwga291bWlua2VuXCA7CivlpoLkvZXoqLEgPCBpa2FiYWthcmlcIDsKK+a4heaVmeW+kiA8IHNlaWt5b3V0b1wgOwor57Sr5aSW57eaIDwgc2hpZ2Fpc2VuXCA7Civkv67npZMgPCBzaHV1ZnV0c3VcIDsKK+WQjOWlveS8miA8IGRvdWtvdWthaVwgOwor5rSX6LuK5aC0IDwgc2Vuc2hham91XCA7CivlsZXmnJvou4ogPCB0ZW5ib3VzaGFcIDsKK+WtpumWpSA8IGdha3ViYXRzdVwgOwor5pqX5Y+35bizIDwgYW5nb3VjaG91XCA7CivkvY3osqAgPCBrdXJhaW1ha2VcIDsKK+iLl+S7oyA8IG5hd2FzaGlyb1wgOwor5bGx55S3IDwgeWFtYW90b2tvXCA7CivluYzppqzou4ogPCBob3JvYmFzaGFcIDsKK+Wkp+S8gealrSA8IGRhaWtpZ3lvdVwgOwor5aOy56yR5ammIDwgYmFpc2hvdWZ1XCA7CivmjqHngrnogIUgPCBzYWl0ZW5zaGFcIDsKK+aghOiAgOaghOiPryA8IGVpeW91ZWlnYVwgOwor6ZaT6ZqZ5q+UIDwga2FuZ2VraWhpXCA7Civlo67ooYzkvJogPCBzb3Vrb3VrYWlcIDsKK+WGjeeUn+WTgSA8IHNhaXNlaWhpblwgOwor5YWs56S+5YK1IDwga291c2hhc2FpXCA7CivmoZzojYkgPCBzYWt1cmFzb3VcIDsKK+Wuoui2syA8IGt5YWt1YXNoaVwgOwor5bGe55uuIDwgc2hva3Vtb2t1XCA7CivmnKrmnaXlraYgPCBtaXJhaWdha3VcIDsKK+S/l+ethiA8IHpva3VoaXRzdVwgOwor5pyr5aeL57WCIDwgc3Vlc2hpanV1XCA7CivlhJ/ljbQgPCBzaG91a3lha3VcIDsKK+a9nOawtOiJpiA8IHNlbnN1aWthblwgOwor5rC06YGT566hIDwgc3VpZG91a2FuXCA7Civmr43oqp7oqbHogIUgPCBib2dvd2FzaGFcIDsKK+WkqeeQhuaVmSA8IHRlbnJpa3lvdVwgOwor5qW95b6LIDwgZ2FrdXJpdHN1XCA7CivmoZzoibIgPCBzYWt1cmFpcm9cIDsKK+S6iOaDs+mrmCA8IHlvc291ZGFrYVwgOwor5omL5p+E6aGUIDwgdGVnYXJhZ2FvXCA7CivmiYvoirjlk4EgPCBzaHVnZWloaW5cIDsKK+W5s+ihoemMmCA8IGhlaWtvdXN1aVwgOwor5oqX5q+S57SgIDwga291ZG9rdXNvXCA7CivlsI/nvoogPCBrb2hpdHN1amlcIDsKK+Wkp+ixhueylSA8IGRhaXp1a2FzdVwgOwor56CU56m26LK7IDwga2Vua3l1dWhpXCA7Civlrp/os6ogPCBqaXNzaGl0c3VcIDsKK+efpeiDveeKryA8IGNoaW5vdWhhblwgOwor6YG45omL5qipIDwgc2Vuc2h1a2VuXCA7Civpup3pppnpub8gPCBqYWtvdWppa2FcIDsKK+a1t+WyuOe3miA8IGthaWdhbnNlblwgOwor6LK/5piT5rivIDwgYm91ZWtpa291XCA7CivmmqblubTluqYgPCByZWtpbmVuZG9cIDsKK+WkqeWuruWbsyA8IHRlbmt5dXV6dVwgOwor5pyJ5qip6ICFIDwgeXV1a2Vuc2hhXCA7CivkvZPoo4HkuIogPCB0ZWlzYWlqb3VcIDsKK+S8iumBlOeUtyA8IGRhdGVvdG9rb1wgOwor5LyR5YiK5pelIDwga3l1dWthbmJpXCA7CivogpjpiYQgPCBoaWppdGV0c3VcIDsKK+izg+mkhSA8IGNoaW5tb2NoaVwgOwor5Y+k5YW45a2mIDwga290ZW5nYWt1XCA7Civlrp3osp0gPCB0YWthcmFnYWlcIDsKK+i7veWPoyA8IGthcnVrdWNoaVwgOwor5pS56KiC54mIIDwga2FpdGVpYmFuXCA7CivnlJ/lrZjmqKkgPCBzZWl6b25rZW5cIDsKK+i2heiEsSA8IGNob3VkYXRzdVwgOwor6Kmy5ZWP6aGMIDwgZ2FpbW9uZGFpXCA7Civmmpflj7flraYgPCBhbmdvdWdha3VcIDsKK+S7o+ihjOiAhSA8IGRhaWtvdXNoYVwgOwor55S354mpIDwgb3Rva29tb25vXCA7CivlhavljYPmrbMgPCB5YWNoaXRvc2VcIDsKK+WPo+ecn+S8vCA8IGt1Y2hpbWFuZVwgOwor5Ye654mI6YOoIDwgc2h1cHBhbmJ1XCA7CivogbfplbcgPCBzaG9rdWNob3VcIDsKK+ims+a4rOaJgCA8IGthbnNva3Vqb1wgOwor57WM5riI55WMIDwga2VpemFpa2FpXCA7CivkuI3nhrHlv4MgPCBmdW5lc3NoaW5cIDsKK+WFrOazleS6uiA8IGtvdWhvdWppblwgOwor5LyR55yg5pyfIDwga3l1dW1pbmtpXCA7Civlia/nt4/nkIYgPCBmdWt1c291cmlcIDsKK+S8tOWlj+iAhSA8IGJhbnNvdXNoYVwgOwor5a++6KuH6ICFIDwgdGFpZGFuc2hhXCA7Civosr/mmJPms5UgPCBib3Vla2lob3VcIDsKK+WckumBiuS8miA8IGVuJyd5dXVrYWlcIDsKK+izm+aIkOiAhSA8IHNhbnNlaXNoYVwgOwor5LuP6aGUIDwgaG90b2tlZ2FvXCA7Civoirjog73kurogPCBnZWlub3VqaW5cIDsKK+WIhuitsuWcsCA8IGJ1bmpvdWNoaVwgOwor5bGI5YWJ5oCnIDwga3Vra291c2VpXCA7CivnnJ/nj6Dmub4gPCBzaGluanV3YW5cIDsKK+S7j+mgmCA8IGZ1dHN1cnlvdVwgOwor5Lqk6YCa56aNIDwga291dHN1dWthXCA7Civmi53ngavmlZkgPCBoYWlrYWt5b3VcIDsKK+euh+adoeabuCA8IGtham91Z2FraVwgOwor55Wl5q20IDwgcnlha3VyZWtpXCA7CivpgbjmjJnkurogPCBzZW5reW9uaW5cIDsKK+mFqui+suWutiA8IHJha3Vub3VrYVwgOwor5bel6Iq45ZOBIDwga291Z2VpaGluXCA7CivmnKrmnaXlnosgPCBtaXJhaWdhdGFcIDsKK+W8gemwk+mhniA8IGJlbnNhaXJ1aVwgOwor54Sh6LOH5qC8IDwgbXVzaGlrYWt1XCA7Civku7vlkb3mqKkgPCBuaW5tZWlrZW5cIDsKK+iZq+WegueCjiA8IGNodXVzdWllblwgOwor6aqo5p+EIDwga290c3VnYXJhXCA7CivmnKjmiLjlvqHlhY0gPCBraWRvZ29tZW5cIDsKK+egtOiQveaIuCA8IGdvcm90c3VraVwgOwor57ep5LiL6JasIDwga2FuZ2V5YWt1XCA7CivmnInmqZ/nmoQgPCB5dXVraXRla2lcIDsKK+i1pOiJsiA8IHNla2lzaG9rdVwgOwor5q2j5Y+N5a++IDwgc2VpaGFudGFpXCA7CivlsLvnmZYgPCBzaGlyaWt1c2VcIDsKK+mdkua1t+WOnyA8IGFvdW5hYmFyYVwgOwor5Ye56Z2i6Y+hIDwgb3VtZW5reW91XCA7CivloLHpgZPpmaMgPCBob3Vkb3VqaW5cIDsKK+alteWwjyA8IGt5b2t1c2hvdVwgOwor5Yqj5Yui5oSfIDwgcmVzc2Vpa2FuXCA7Civoh6rlt7Hnlo7lpJYgPCBqaWtvc29nYWlcIDsKK+S/teeJqSA8IGh5b3Vtb3RzdVwgOwor5b6h5paZ5ZywIDwgZ29yeW91Y2hpXCA7CivnlJ/niKogPCBuYW1hZHp1bWVcIDsKK+advumiqCA8IG1hdHN1a2F6ZVwgOwor6KiI566X6ICFIDwga2Vpc2Fuc2hhXCA7CivnhKHpp4Tlj6MgPCBtdWRhZ3VjaGlcIDsKK+adjuaJv+aZqSA8IHJpc2hvdWJhblwgOwor6LaF57W2IDwgY2hvdXpldHN1XCA7CivoiLnlrqQgPCBzZW5zaGl0c3VcIDsKK+emj+mfs+abuCA8IGZ1a3VpbnNob1wgOwor5YWr5Y2m5o6MIDwgaGFra2VzaG91XCA7Civoh6rkuLvnmoQgPCBqaXNodXRla2lcIDsKK+mAsuatqeWFmiA8IHNoaW5wb3RvdVwgOwor55u45Y+N5oCnIDwgc291aGFuc2VpXCA7Civog73li5XmhYsgPCBub3Vkb3V0YWlcIDsKK+WPuOS7pOWumCA8IHNoaXJlaWthblwgOwor5Zyw6ZyH6KiIIDwgamlzaGlua2VpXCA7CivntJnkuIDph40gPCBrYW1paGl0b2VcIDsKK+awtOWKoOa4myA8IG1penVrYWdlblwgOwor5Ye654mI6LK7IDwgc2h1cHBhbmhpXCA7CivmnpzloLHogIUgPCBrYWhvdW1vbm9cIDsKK+aIkOmVt+acnyA8IHNlaWNob3VraVwgOwor6IW654axIDwgc2VuJyduZXRzdVwgOwor5rWE5Zyf5pWZIDwgam91ZG9reW91XCA7CivmnZ/pq6ogPCBzb2t1aGF0c3VcIDsKK+i7ouWHuiA8IHRlbnNodXRzdVwgOwor5aSp5LqV5p2/IDwgdGVuam91aXRhXCA7Civpm4blobXmqZ8gPCBzaHV1amlua2lcIDsKK+WHjOazouaApyA8IHJ5b3VoYXNlaVwgOwor5b+r55S35a2QIDwga2FpZGFuc2hpXCA7CivlpKnni5fojLggPCB0ZW5ndXRha2VcIDsKK+eLmeaSg+WFtSA8IHNvZ2VraWhlaVwgOwor5aSW6Lyq5bGxIDwgZ2FpcmluemFuXCA7CivmmIfpmY3mqZ8gPCBzaG91a291a2lcIDsKK+WfuuekjuaOp+mZpCA8IGtpc29rb3Vqb1wgOwor5bO25bO2IDwgc2hpbWFqaW1hXCA7CivmlL7ngavni4IgPCBob3VrYWt5b3VcIDsKK+miqOmmrOeJmyA8IGZ1dWJhZ3l1dVwgOwor6Zm25Zmo5ZWGIDwgdG91a2lzaG91XCA7CivnlaXmnI0gPCByeWFrdWZ1a3VcIDsKK+S4ieWhgee3miA8IHNhbnJ1aXNlblwgOwor5bO25bGxIDwgc2hpbWF5YW1hXCA7CivpgZPnvqnlv4MgPCBkb3VnaXNoaW5cIDsKK+i2heaZguepuiA8IGNob3VqaWt1dVwgOwor5b6u57KS5a2QIDwgYmlyeXV1c2hpXCA7CivmsLTlubPnt5ogPCBzdWloZWlzZW5cIDsKK+WGjeWwi+WVjyA8IHNhaWppbm1vblwgOwor6ayx5YuDIDwgdXRzdWJvdHN1XCA7CivmnbHpm7IgPCBzaGlub25vbWVcIDsKK+eUn+a7hSA8IHNob3VtZXRzdVwgOwor5riF5o6D6LuKIDwgc2Vpc291c2hhXCA7Civkv5fniakgPCB6b2t1YnV0c3VcIDsKK+iEseehqyA8IGRhdHN1cnl1dVwgOwor6ISI57WhIDwgbXlha3VyYWt1XCA7CivkuIDlrprmuKnluqYgPCBpdHRlaW9uZG9cIDsKK+acgOWJjee3miA8IHNhaXplbnNlblwgOwor57W25a++6ICFIDwgemV0dGFpc2hhXCA7CivmraPnorrluqYgPCBzZWlrYWt1ZG9cIDsKK+awt+WJiuapnyA8IGh5b3VzYWtraVwgOwor5YiG6Kej6IO9IDwgYnVua2Fpbm91XCA7Civlm5vop5LlvaIgPCBzaGlrYWtrZWlcIDsKK+Wuo+iogOabuCA8IHNlbmdlbnNob1wgOwor5Y+45Luk5aGUIDwgc2hpcmVpdG91XCA7CivlraborZggPCBnYWt1c2hpa2lcIDsKK+eri+WkquWtkCA8IHJpdHRhaXNoaVwgOwor5pyJ6LmE6aGeIDwgeXV1dGVpcnVpXCA7Civkvb/nlKjogIUgPCBzaGl5b3VzaGFcIDsKK+S+teeVpSA8IHNoaW5yeWFrdVwgOwor5aSp5LiK55WMIDwgdGVuam91a2FpXCA7CivpnZLmtbfkuoAgPCBhb3VtaWdhbWVcIDsKK+adpemBiuiAhSA8IHJhaXl1dXNoYVwgOwor5beo5Lq66LuNIDwga3lvamluZ3VuXCA7Civlrabpg6jnlJ8gPCBnYWt1YnVzZWlcIDsKK+W3peWtpumDqCA8IGtvdWdha3VidVwgOwor5pWZ56eR5pu4IDwga3lvdWthc2hvXCA7CivntYzmuIjms5UgPCBrZWl6YWlob3VcIDsKK+egtOWCt+miqCA8IGhhc2hvdWZ1dVwgOwor6IG36LKsIDwgc2hva3VzZWtpXCA7CivmjIHlj4LkurogPCBqaXNhbicnbmluXCA7Civnt4/nnaPlupwgPCBzb3V0b2t1ZnVcIDsKK+aXpeacrOmrqiA8IG5paG9uZ2FtaVwgOwor6Im25LqLIDwgdHN1eWFnb3RvXCA7CivliLblvqHmo5IgPCBzZWlneW9ib3VcIDsKK+aknOahiOabuCA8IGtlbicnYW5zaG9cIDsKK+eOiem0qyA8IHRhbWFzaGlnaVwgOwor5q2p6YGT5qmLIDwgaG9kb3VreW91XCA7CivlnLDmlrnntJkgPCBjaGlob3VzaGlcIDsKK+aXpeWCreWPliA8IGhpeW91dG9yaVwgOwor5Zyw542E5aSJIDwgamlnb2t1aGVuXCA7CivlkIjlpY/lm6MgPCBnYXNzb3VkYW5cIDsKK+eTpueJiCA8IGthd2FyYWJhblwgOwor5aSp5LqV5omHIDwgdGVuam91c2VuXCA7Civlgrflj6MgPCBraXp1Z3VjaGlcIDsKK+WFqOWPjeWwhCA8IHplbmhhbnNoYVwgOwor5a+G57SEIDwgbWl0c3V5YWt1XCA7CivlpInpgJ/mqZ8gPCBoZW5zb2t1a2lcIDsKK+eEoeeQhuW8jyA8IG11cmlzaGlraVwgOwor6Lu95Yq05YONIDwga2Vpcm91ZG91XCA7CivlrabooZMgPCBnYWt1anV0c3VcIDsKK+ato+WPjeWQiCA8IHNlaWhhbmdvdVwgOwor57WM5riI5qyEIDwga2VpemFpcmFuXCA7Civou5LkuIsgPCBub2tpc2hpdGFcIDsKK+i7iuS7oyA8IGt1cnVtYWRhaVwgOwor5YCf5paZIDwgc2hha3VyeW91XCA7CivnlJ/lrZflvJUgPCBpa2lqaWJpa2lcIDsKK+aKleelqOWMuiA8IHRvdWh5b3VrdVwgOwor5Lq66YGUIDwgaGl0b3RhY2hpXCA7CivmnKjmm5zml6UgPCBtb2t1eW91YmlcIDsKK+WHuuacqOW5tCA8IGRla2lkb3NoaVwgOwor5YCZ5paHIDwgc291cm91YnVuXCA7CivnopPmsLfls6AgPCB1c3VpdG91Z2VcIDsKK+WvuueUtyA8IHRlcmFvdG9rb1wgOwor5Yqg5YWl6YeRIDwga2FueXV1a2luXCA7CivmsJHplpPkurogPCBtaW5rYW5qaW5cIDsKK+WFrOWLn+agqiA8IGtvdWJva2FidVwgOwor5qW15YyXIDwga3lva3Vob2t1XCA7CivkuZfppqzmnI0gPCBqb3ViYWZ1a3VcIDsKK+iEseeNhCA8IGRhdHN1Z29rdVwgOwor5pel5pys6aCYIDwgbmlob25yeW91XCA7CivokZfmm7jlkI0gPCBjaG9zaG9tZWlcIDsKK+e1jOWWtuWtpiA8IGtlaWVpZ2FrdVwgOwor55m96Ymb6YmxIDwgaGFrdWVua291XCA7CivnlLrmlrkgPCBtYWNoaWthdGFcIDsKK+eyl+ebruezliA8IHphcmFtZXRvdVwgOwor5omL5YmN5ZGz5ZmMIDwgdGVtYWVtaXNvXCA7CivlhoXnjoTplqIgPCBuYWlnZW5rYW5cIDsKK+WcsOaWueeojiA8IGNoaWhvdXplaVwgOwor6auY5Z2PIDwgdGFrYXRzdWtpXCA7Civlt6Hmn7vplbcgPCBqdW5zYWNob3VcIDsKK+WNsOWIt+apnyA8IGluc2F0c3VraVwgOwor5YeN5q276ICFIDwgdG91c2hpc2hhXCA7Civnmb3pioXosqggPCBoYWt1ZG91a2FcIDsKK+iyuOizgyA8IGthc2hpY2hpblwgOwor5Y6f5aeL5Lq6IDwgZ2Vuc2hpamluXCA7CivliqDlt6Xos4MgPCBrYWtvdWNoaW5cIDsKK+WFgeaWh+WFgeatpiA8IGluYnVuaW5idVwgOwor56u56Lyq6bqpIDwgY2hpa3V3YWZ1XCA7CivkuIDmlrnnmoQgPCBpcHBvdXRla2lcIDsKK+WHuuS7leS6iyA8IGRlc2hpZ290b1wgOwor5q2j5b+15aC0IDwgc2hvdW5lbmJhXCA7CivlgInmlbcgPCBrdXJhc2hpa2lcIDsKK+S5numjnyA8IGtvdHN1amlraVwgOwor5p+U6YGT5aC0IDwganV1ZG91am91XCA7CivohIrpq4Tngo4gPCBzZWtpenVpZW5cIDsKK+S6jOmHjemHnCA8IG5panV1Z2FtYVwgOwor56uL5pa55L2TIDwgcmlwcG91dGFpXCA7CivkvLjnuK4gPCBzaGluc2h1a3VcIDsKK+mBoOmalOaApyA8IGVua2FrdXNlaVwgOwor6Lu95q2M5YqHIDwga2Vpa2FnZWtpXCA7CivliLbli5Xnga8gPCBzZWlkb3V0b3VcIDsKK+WCrOecoOWJpCA8IHNhaW1pbnphaVwgOwor5LuK5LiA5bqmIDwgaW1haWNoaWRvXCA7CivmlLvpmLLmiKYgPCBrb3Vib3VzZW5cIDsKK+a1hOWcn+WulyA8IGpvdWRvc2h1dVwgOwor5pON57im5qG/IDwgc291anV1a2FuXCA7CivmlofmmI7ppKggPCBidW5tZWlrYW5cIDsKK+WwjumWouaVsCA8IGRvdWthbnN1dVwgOwor5rue5Zyo5ZywIDwgdGFpemFpY2hpXCA7Civkurros6ogPCBoaXRvamljaGlcIDsKK+acnemjnyA8IGNob3VzaG9rdVwgOwor5LiK57SN57GzIDwgam91bm91bWFpXCA7CivlroflrpnmnI0gPCB1Y2h1dWZ1a3VcIDsKK+WIqeWPo+iAhSA8IHJpa291bW9ub1wgOwor5pa55rOV6KuWIDwgaG91aG91cm9uXCA7Civok4vnhLbmgKcgPCBnYWl6ZW5zZWlcIDsKK+WNiuijveWTgSA8IGhhbnNlaWhpblwgOwor5bO75YilIDwgc2h1bmJldHN1XCA7CivkuIDloLTpnaIgPCBpY2hpYmFtZW5cIDsKK+efs+eJiOeUuyA8IHNla2liYW5nYVwgOwor55m76Yyy57C/IDwgdG91cm9rdWJvXCA7Civoh6rmmrToh6rmo4QgPCBqaWJvdWppa2lcIDsKK+S4gOaYqOaZqSA8IGlzc2FrdWJhblwgOwor5bGK5pu4IDwgdG9kb2tlc2hvXCA7CivlrqLnrYsgPCBreWFrdXN1amlcIDsKK+WkmualteWMliA8IHRha3lva3VrYVwgOwor5aSn5LiA55WqIDwgb29pY2hpYmFuXCA7CivooZvmmJ/lm70gPCBlaXNlaWtva3VcIDsKK+ebuOaSsumDqOWxiyA8IHN1bW91YmV5YVwgOwor5pyN6aO+IDwgZnVrdXNob2t1XCA7CivlgpHlh7ogPCBrZXNzaHV0c3VcIDsKK+S8keiBtyA8IGt5dXVzaG9rdVwgOwor5LiL57Sa55SfIDwga2FreXV1c2VpXCA7CivmqJnmupbmmYIgPCBoeW91anVuamlcIDsKK+S6jOmBkyA8IGZ1dGFtaWNoaVwgOwor6auY6b2i6ICFIDwga291cmVpc2hhXCA7CivkuIDkuIHliY0gPCBpdGNob3VtYWVcIDsKK+iIueS4uyA8IGZ1bmFudXNoaVwgOwor6aOf6YCaIDwgc2hva3V0c3V1XCA7CivmqKrmgYvmhZUgPCB5b2tvcmVuYm9cIDsKK+iyoeeUo+eojiA8IHphaXNhbnplaVwgOwor6Ieq5bex5L+d5a2YIDwgamlrb2hvem9uXCA7Civkuozph43ouqsgPCBuaWp1dXNoaW5cIDsKK+WuoueoriA8IGt5YWt1ZGFuZVwgOwor6LOK6JmQIDwgem9rdWd5YWt1XCA7CivnlJ/nkIblraYgPCBzZWlyaWdha3VcIDsKK+eGseWZqOWFtyA8IG5ldHN1a2lndVwgOwor5a+S5Ya357SXIDwga2FucmVpc2hhXCA7CivmsLTpgZPmoJMgPCBzdWlkb3VzZW5cIDsKK+aOoue0ouacqCA8IHRhbnNha3VnaVwgOwor56CU56m256eRIDwga2Vua3l1dWthXCA7CivkubPpiaIgPCBueXV1YmFjaGlcIDsKK+aciOmhjSA8IGdldHN1Z2FrdVwgOwor5a6f5pa95L6LIDwgamlzc2hpcmVpXCA7Civplbfpn7Ppmo4gPCBjaG91b25rYWlcIDsKK+S4jeipleWIpCA8IGZ1aHlvdWJhblwgOwor5pyI6aCDIDwgdHN1a2lnb3JvXCA7CivpgbjmiYvlm6MgPCBzZW5zaHVkYW5cIDsKK+S9nOeUtyA8IHNha3VvdG9rb1wgOwor5aSa5LqL5aSa56uvIDwgdGFqaXRhdGFuXCA7Civlip/liKnnmoQgPCBrb3VyaXRla2lcIDsKK+WkqeeQg+WEgCA8IHRlbmt5dXVnaVwgOwor55S35b25IDwgb3Rva295YWt1XCA7CivnnJ/nj6DlsaQgPCBzaGluanVzb3VcIDsKK+W5s+Wdh+eCuSA8IGhlaWtpbnRlblwgOwor5LiK6bayIDwgam91Yml0YWtpXCA7CivohZXmnpUgPCB1ZGVtYWt1cmFcIDsKK+mAo+WQiOS8miA8IHJlbmdvdWthaVwgOwor5bel5qWt5YyWIDwga291Z3lvdWthXCA7CivotaTpgZPlhIAgPCBzZWtpZG91Z2lcIDsKK+i1pOeGsSA8IHNla2luZXRzdVwgOwor5paH5a2m5bqnIDwgYnVuZ2FrdXphXCA7Civmm5bmmKfmqKHns4ogPCBhaW1haW1va29cIDsKK+iIjOWFiCA8IHNoaXRhc2FraVwgOwor5Yq05YON5YWaIDwgcm91ZG91dG91XCA7CivohbnmjIEgPCBoYXJhbW9jaGlcIDsKK+e1jOa4iOaIpiA8IGtlaXphaXNlblwgOwor54+N6KqsIDwgY2hpbnNldHN1XCA7CivnsbPnqbrou40gPCBiZWlrdXVndW5cIDsKK+aVt+Wxhee9riA8IHNoaWtpaWNoaVwgOwor5LuY6JC9IDwgdHN1a2VvY2hpXCA7CivphY3lvZPph5EgPCBoYWl0b3VraW5cIDsKK+iFsOaOmyA8IGtvc2hpa2FrZVwgOwor5LmF6ZeKIDwga3l1dWthdHN1XCA7Civpo5vomornl4cgPCBoaWJ1bnNob3VcIDsKK+WvhueMnyA8IG1pdHN1cnlvdVwgOwor6LWk55ei6I+MIDwgc2VraXJpa2luXCA7CivkupTljYHogqkgPCBnb2p1dWthdGFcIDsKK+mrmOetieWumCA8IGtvdXRvdWthblwgOwor5Zyw5pa554mIIDwgY2hpaG91YmFuXCA7CivnlLPlubQgPCBzYXJ1ZG9zaGlcIDsKK+adkOizqiA8IHphaXNoaXRzdVwgOwor54mH6ISz5rK5IDwgaGVuJydub3V5dVwgOwor5p2+6J2JIDwgbWF0c3V6ZW1pXCA7Civkuovli5nmrKHlrpggPCBqaW11amlrYW5cIDsKK+WlieihjOaJgCA8IGJ1Z3lvdXNob1wgOwor6IKv5a6a5paHIDwga291dGVpYnVuXCA7CivkuqzooaggPCBreW91b21vdGVcIDsKK+iKs+mmmeWJpCA8IGhvdWtvdXphaVwgOwor54Gr54G95rWBIDwga2FzYWlyeXV1XCA7CivljbDliLfmiYAgPCBpbnNhdHN1am9cIDsKK+aiheaapiA8IHVtZWdveW9taVwgOwor5aSn6IGW5aCCIDwgZGFpc2VpZG91XCA7CivntYzmuIjmgKcgPCBrZWl6YWlzZWlcIDsKK+ibh+e0i+efsyA8IGphbW9uc2VraVwgOwor5rWB6KGM5q2MIDwgcnl1dWtvdWthXCA7CivkvZzniakgPCBzYWt1bW90c3VcIDsKK+iznue9sCA8IHNob3ViYXRzdVwgOwor5LiJ6KeS5rSyIDwgc2Fua2FrdXN1XCA7CivlrqTnlLogPCBtdXJvbWFjaGlcIDsKK+S4ieaWh+WIpCA8IHNhbm1vbmJhblwgOwor5LiJ6KeS5rOiIDwgc2Fua2FrdWhhXCA7Civlrp/pmpvmgKcgPCBqaXNzYWlzZWlcIDsKK+erueefouadpSA8IHRha2V5YXJhaVwgOwor5bmz6KGM57eaIDwgaGVpa291c2VuXCA7CivokbHlnYrkuLsgPCBuZWdpYm91enVcIDsKK+Wtq+W8n+WtkCA8IG1hZ29kZXNoaVwgOwor5a6556mN5q+UIDwgeW91c2VraWhpXCA7CivkuLvnnLzngrkgPCBzaHVnYW50ZW5cIDsKK+mBoOmalOWcsCA8IGVua2FrdWNoaVwgOwor5LiJ6KeS5q+UIDwgc2Fua2FrdWhpXCA7CivlsI/mm7IgPCBzaG91a3lva3VcIDsKK+mVt+aZgumWkyA8IGNob3VqaWthblwgOwor5Y2K56uv6ICFIDwgaGFucGFtb25vXCA7Civni6znpoHms5UgPCBkb2traW5ob3VcIDsKK+W6g+WRiuiyuyA8IGtvdWtva3VoaVwgOwor5qSc5Ye6IDwga2Vuc2h1dHN1XCA7CivmnIDlhKrpgYcgPCBzYWl5dXVndXVcIDsKK+WPsOmiqOecvCA8IHRhaWZ1dWdhblwgOwor5pyq5pWZ6IKyIDwgbWlreW91aWt1XCA7Civkv4rmipwgPCBzaHVuYmF0c3VcIDsKK+ijgeaWreW4qyA8IHNhaWRhbnNoaVwgOwor6IKJ562GIDwgbmlrdWhpdHN1XCA7CivlhajljZjlsIQgPCB6ZW50YW5zaGFcIDsKK+iFsOW8sSA8IGtvc2hpeW93YVwgOwor5Yq55p6c55qEIDwga291a2F0ZWtpXCA7CivnqbrmiYvlvaIgPCBrdXV0ZWdhdGFcIDsKK+WNsOWIu+W4qyA8IGlua29rdXNoaVwgOwor6IOG546JIDwga2ltb3R0YW1hXCA7CivpnZLlubTovKkgPCBzZWluZW5oYWlcIDsKK+WJsueDueW6lyA8IGthcHBvdXRlblwgOwor5p2+6Iy4IDwgbWF0c3V0YWtlXCA7Civosr/mmJPlk4EgPCBib3Vla2loaW5cIDsKK+WJiuWyqeapnyA8IHNha3VnYW5raVwgOwor5qGc5qGDIDwgc2FrdXJhbmJvXCA7Civlr4Lmu4UgPCBqYWt1bWV0c3VcIDsKK+acrOizqiA8IGhvbnNoaXRzdVwgOwor5a6M5LqG5b6MIDwga2FucnlvdWdvXCA7CivlpKfkuIrmrrUgPCBkYWlqb3VkYW5cIDsKK+WckuiKuOWtpiA8IGVuZ2VpZ2FrdVwgOwor5oyH55u45pKyIDwgeXViaXp1bW91XCA7CivmsJflrofluoPlpKcgPCBraXVrb3VkYWlcIDsKK+iCqeeUsuW4ryA8IGtlbmtvdXRhaVwgOwor5q2j5b2T5oCnIDwgc2VpdG91c2VpXCA7CivnlKPlrqQgPCBzYW5zaGl0c3VcIDsKK+egguezluawtCA8IHNhdG91bWl6dVwgOwor5pa56YyQ5b2iIDwgaG91c3Vpa2VpXCA7Civnm7jlvZPmlbAgPCBzb3V0b3VzdXVcIDsKK+iFsOW4gyA8IGtvc2hpbnVub1wgOwor6IWw5be7IDwga29zaGltYWtpXCA7CivkvYPnha4gPCB0c3VrdWRhbmlcIDsKK+mGuOmAoOmFkiA8IGpvdXpvdXNodVwgOwor5bem5Lit6ZaTIDwgc2FjaHV1a2FuXCA7CivkvJ3ku6TogIUgPCBkZW5yZWlzaGFcIDsKK+acqOe2v+mHnSA8IG1vbWVuYmFyaVwgOwor5qGB5qmLIDwga2V0YWJhc2hpXCA7CivmnKjniYjnlLsgPCBtb2t1aGFuZ2FcIDsKK+aknOafu+W9uSA8IGtlbnNheWFrdVwgOwor5b+Y5bm05LyaIDwgYm91bmVua2FpXCA7CivlroflrpnlraYgPCB1Y2h1dWdha3VcIDsKK+actOiopSA8IGJva3V0b3RzdVwgOwor6aOf6JmrIDwgc2hva3VjaHV1XCA7CivnnJ/nkIblgKQgPCBzaGlucmljaGlcIDsKK+mFjeawtOeuoSA8IGhhaXN1aWthblwgOwor5aSq6Zm96aKoIDwgdGFpeW91ZnV1XCA7Civmnb7ohIIgPCBtYXRzdXlhbmlcIDsKK+S4g+mboyA8IHNoaWNoaW5hblwgOwor5L2/55So5rOVIDwgc2hpeW91aG91XCA7CivljbDliLflsYsgPCBpbnNhdHN1eWFcIDsKK+mfs+WjsOWtpiA8IG9uc2VpZ2FrdVwgOwor5LyK6YGU5aWzIDwgZGF0ZW9uJyduYVwgOwor55S35Z2CIDwgb3Rva296YWthXCA7Civlrr/ms4ogPCBzaHVrdWhha3VcIDsKK+S8r+eItSA8IGhha3VzaGFrdVwgOwor5qKT5byTIDwgYXp1c2F5dW1pXCA7Civlia/oqZ7lj6UgPCBmdWt1c2hpa3VcIDsKK+Wun+aVsOS9kyA8IGppc3N1dXRhaVwgOwor5aSa5pWw5oSP6KaLIDwgdGFzdXVpa2VuXCA7CivppIXogowgPCBtb2NoaWhhZGFcIDsKK+ijj+mVt+WxiyA8IHVyYW5hZ2F5YVwgOwor5p2x5bel5aSnIDwgdG91a291ZGFpXCA7CivlsYXlrqQgPCBreW9zaGl0c3VcIDsKK+mhjemamyA8IGhpdGFpZ2l3YVwgOwor55WZ5YilIDwgcnl1dWJldHN1XCA7Civmra/np5HljLvluKsgPCBzaGlrYWlzaGlcIDsKK+iKseaZguioiCA8IGhhbmFkb2tlaVwgOwor6KO96YCg5ZOBIDwgc2Vpem91aGluXCA7CivoqIjnrpfmm7ggPCBrZWlzYW5zaG9cIDsKK+WItuWLleaJiyA8IHNlaWRvdXNodVwgOwor5LiN6KaP5b6LIDwgZnVraXJpdHN1XCA7Civlj6PohZTnmYwgPCBrb3Vrb3VnYW5cIDsKK+WbnuetlOiAhSA8IGthaXRvdXNoYVwgOwor5Y2Y5b6T6ZmjIDwgdGFuanV1amluXCA7Civlj43oi7Hpm4QgPCBoYW4nJ2VpeXV1XCA7CivkuLvmqKnogIUgPCBzaHVrZW5zaGFcIDsKK+Wkp+acrOWxsSA8IGRhaWhvbnphblwgOwor5Lit5ZKM5YmkIDwgY2h1dXdhemFpXCA7CivmhYjlloTnrrEgPCBqaXplbmJha29cIDsKK+acgOW3pue/vCA8IHNhaXNheW9rdVwgOwor5LiJ6KeS5peXIDwgc2Fua2FrdWtpXCA7Civnvo7ljJbpgYvli5UgPCBiaWthdW5kb3VcIDsKK+WKoOWFpeiAhSA8IGthbnl1dXNoYVwgOwor6KO+5qih5qeYIDwgc3Vzb21veW91XCA7CivkuIDpmrvnnLwgPCBpc3Nla2lnYW5cIDsKK+S9v+eUqOaoqSA8IHNoaXlvdWtlblwgOwor6L+R5L2T6KmpIDwga2ludGFpc2hpXCA7CivlpKnni7zmmJ8gPCB0ZW5yb3VzZWlcIDsKK+i0iOeJqSA8IG9rdXJpbW9ub1wgOwor5YaN54qv6ICFIDwgc2FpaGFuc2hhXCA7Civlk6jmiJLmqZ8gPCBzaG91a2Fpa2lcIDsKK+mAmumBjumnhSA8IHRzdXVrYWVraVwgOwor5aSn5Lq65YWxIDwgb3RvbmFkb21vXCA7Civpp5Dml6UgPCBjaHV1bmljaGlcIDsKK+iLpuW/g+irhyA8IGt1c2hpbmRhblwgOwor5pON57im5aOrIDwgc291anV1c2hpXCA7CivnnJ/nj6DlhYkgPCBzaGluanVrb3VcIDsKK+afv+a4iyA8IGtha2lzaGlidVwgOwor6YCf5bqm6KiIIDwgc29rdWRva2VpXCA7CivnhKHosqzku7sgPCBtdXNla2luaW5cIDsKK+aSreS9hue3miA8IGJhbnRhbnNlblwgOwor6IGW6KqV56WtIDwgc2VpdGFuc2FpXCA7CivnhKHkuIDmlocgPCBtdWljaGltb25cIDsKK+W4uOWIhuaVsCA8IGpvdWJ1bnN1dVwgOwor5LiL6YeRIDwgc2hpdGFnYW5lXCA7CivkuK3otoogPCBjaHV1Z29zaGlcIDsKK+WGjeiAg+aFriA8IHNhaWtvdXJ5b1wgOwor5YSA5YW46ZW3IDwgZ2l0ZW5jaG91XCA7Civlt6Xlrabnp5EgPCBrb3VnYWt1a2FcIDsKK+iHquW3seS4u+e+qSA8IGppa29zaHVnaVwgOwor5aqS6LOqIDwgYmFpc2hpdHN1XCA7CivkuqTmrZPkvJogPCBrb3VrYW5rYWlcIDsKK+WkqeixoeWEgCA8IHRlbnNob3VnaVwgOwor5Lm+6I2JIDwgaG9zaGlndXNhXCA7CivnkLTniKogPCBrb3RvZHp1bWVcIDsKK+iFsOWeoyA8IGtvc2hpZ2FraVwgOwor5byV55So5paHIDwgaW4nJ3lvdWJ1blwgOwor5L+C5a6YIDwga2FrYXJpa2FuXCA7CivojZLms5XluKsgPCBhcmFob3VzaGlcIDsKK+iEiOaQjyA8IG15YWt1aGFrdVwgOwor546J6JmrIDwgdGFtYW11c2hpXCA7CivnlJ/llL4gPCBuYW1hdHN1YmFcIDsKK+Wun+ihjOWnlOWToSA8IGppa2tvdWlpblwgOwor55mC6aSK6LK7IDwgcnlvdXlvdWhpXCA7CivmqZ/plqLplbcgPCBraWthbmNob3VcIDsKK+WQkeWcsOaApyA8IGtvdWNoaXNlaVwgOwor5Yex5peL6ZaAIDwgZ2Fpc2VubW9uXCA7Civpo5/ogokgPCBzaG9rdW5pa3VcIDsKK+ioreWCmeiyuyA8IHNldHN1YmloaVwgOwor5p2+56ygIDwgbWF0c3VrYXNhXCA7Civoo4HnuKvluKsgPCBzYWlob3VzaGlcIDsKK+iyoeeUo+aoqSA8IHphaXNhbmtlblwgOwor5oqV55+z5qmfIDwgdG91c2VraWtpXCA7CivmhJvmoKHlv4MgPCBhaWtvdXNoaW5cIDsKK+S8j+mtlOauvyA8IGZ1a3VtYWRlblwgOwor6Iy25Zmo57WEIDwgY2hha2lndW1pXCA7CivkuInloYHmiYsgPCBzYW5ydWlzaHVcIDsKK+S4g+mBkyA8IHNoaWNoaWRvdVwgOwor6Jma54Sh55qEIDwga3lvbXV0ZWtpXCA7CivnlLPlhaUgPCBtb3VzaGlpcmVcIDsKK+S8neWwjuaApyA8IGRlbmRvdXNlaVwgOwor5a6i5qeYIDwga3lha3VzYW1hXCA7CivmloflrZfliJcgPCBtb2ppcmV0c3VcIDsKK+WPjeiKu+mhniA8IGhhbnN1dXJ1aVwgOwor5a6a5Z6L6KmpIDwgdGVpa2Vpc2hpXCA7CivmsLToj5PlrZAgPCBtaXp1Z2FzaGlcIDsKK+WAn+S4uyA8IGthcmludXNoaVwgOwor6buN5Zuj5a2QIDwga2liaWRhbmdvXCA7Civou5/lj6Pok4sgPCBuYW5rb3VnYWlcIDsKK+S5vuiCiSA8IGhvc2hpbmlrdVwgOwor6ZeH55u45aC0IDwgeWFtaXNvdWJhXCA7Civlrr/mlpkgPCBzaHVrdXJ5b3VcIDsKK+Wun+alrSA8IGppdHN1Z3lvdVwgOwor5ZCI5rCX6YGT5a62IDwgYWlraWRvdWthXCA7Civlrr/mlbUgPCBzaHVrdXRla2lcIDsKK+Wuh+WumeWNmiA8IHVjaHV1aGFrdVwgOwor5LiD6LyqIDwgc2hpY2hpcmluXCA7CivnlKPlh7ogPCBzYW5zaHV0c3VcIDsKK+iKpeWtkOiPnCA8IGthcmFzaGluYVwgOwor54+N6YGT5YW3IDwgY2hpbmRvdWd1XCA7CivkvZXml6UgPCBuYW4nJ25pY2hpXCA7Civos6rngrkgPCBzaGl0c3V0ZW5cIDsKK+m7hOihqOe0mSA8IGtpYnlvdXNoaVwgOwor6ISz5a6kIDwgbm91c2hpdHN1XCA7CivlvpPlp4nlprkgPCBqdXVzaGltYWlcIDsKK+WxseS8jyA8IHlhbWFidXNoaVwgOwor5a2Q56aP6ICFIDwga29idWt1c2hhXCA7CivmgJ3mg7PnlYwgPCBzaGlzb3VrYWlcIDsKK+awkeihhuWMliA8IG1pbnNodXVrYVwgOwor6YiN6buE6ImyIDwgbmlidWtpaXJvXCA7Civlrp/moKogPCBqaXRzdWthYnVcIDsKK+S4ieinkuW9oiA8IHNhbmtha2tlaVwgOwor5L615aWqIDwgc2hpbmRhdHN1XCA7CivlpKfmnKzllrYgPCBkYWlob24nJ2VpXCA7CivnjJvnibnoqJMgPCBtb3V0b2trdW5cIDsKK+eUuuS4rSA8IG1hY2hpbmFrYVwgOwor55S65LimIDwgbWFjaGluYW1pXCA7CivkuojlkYrnt6ggPCB5b2tva3VoZW5cIDsKK+WGt+a5v+W4gyA8IHJlaXNoaXBwdVwgOwor5qiZ5rqW5YyWIDwgaHlvdWp1bmthXCA7CivkuIros6ogPCBqb3VzaGl0c3VcIDsKK+S4i+iyvCA8IHNoaXRhYmFyaVwgOwor6aOf57SFIDwgc2hva3ViZW5pXCA7CivljZfom67kurogPCBuYW5iYW5qaW5cIDsKK+abtOihoyA8IGtvcm9tb2dhZVwgOwor6aOf57OnIDwgc2hva3VyeW91XCA7CivnlLDlnJLoqakgPCBkZW4nJ2Vuc2hpXCA7CivkuK3ooaggPCBuYWthb21vdGVcIDsKK+S4ieinkuW6pyA8IHNhbmtha3V6YVwgOwor5bCP5aeRIDwga29qdXV0b21lXCA7Civlho3oqabpqJMgPCBzYWlzaGlrZW5cIDsKK+agg+acqCA8IHRvY2hpbm9raVwgOwor5a+S5biv5p6XIDwga2FudGFpcmluXCA7CivohILmgKcgPCBhYnVyYXNob3VcIDsKK+WAieS4uyA8IGt1cmFudXNoaVwgOwor5YK+5pac6Z2iIDwga2Vpc2hhbWVuXCA7CivmrbvkuqHogIUgPCBzaGlib3VzaGFcIDsKK+S4g+izoiA8IHNoaWNoaWtlblwgOwor6YG65peP5om25YqpIDwgaXpva3VmdWpvXCA7CivlqJHnvoXlj4zmqLkgPCBzYXJhc291anVcIDsKK+S4ieinkuW4hiA8IHNhbmtha3Vob1wgOwor5bC75Y+WIDwgc2hpcml0b3JpXCA7CivlqZrlp7vms5UgPCBrb24nJ2luaG91XCA7Civkuozph43nqpMgPCBuaWp1dW1hZG9cIDsKK+iHqueEtumhniA8IHNoaXplbnJ1aVwgOwor5bCC5aOy5ZOBIDwgc2VuYmFpaGluXCA7CivmoLzlvI8gPCBrYWt1c2hpa2lcIDsKK+S4jee1seS4gCA8IGZ1dG91aXRzdVwgOwor5pi86bO2IDwgaGlydXRvbmJpXCA7CivlpJzkvJrmnI0gPCB5YWthaWZ1a3VcIDsKK+S6ruebtCA8IHJ5b3VjaG9rdVwgOwor5pqi6YGUIDwgY2hvdXRhdHN1XCA7CivlhZrmtL7lv4MgPCB0b3VoYXNoaW5cIDsKK+aAneaDs+eKryA8IHNoaXNvdWhhblwgOwor6IWw5YWDIDwga29zaGltb3RvXCA7CivohIflt64gPCB3YWtpemFzaGlcIDsKK+W8geW9k+S7oyA8IGJlbnRvdWRhaVwgOwor5p2J5664IDwgc3VnaWJhc2hpXCA7Civogp3oh5PnmYwgPCBrYW56b3VnYW5cIDsKK+S7mOeEvCA8IHRzdWtleWFraVwgOwor57WM5riI5Lq6IDwga2VpemFpamluXCA7Civku4/mlZnlvpIgPCBidWtreW91dG9cIDsKK+exs+a1t+i7jSA8IGJlaWthaWd1blwgOwor5ZCr5rK55bGkIDwgZ2FuJyd5dXNvdVwgOwor5oOF5aCx6KqMIDwgam91aG91c2hpXCA7CivlrabmrpYgPCBnYWt1c2hva3VcIDsKK+WHseaXi+i7jSA8IGdhaXNlbmd1blwgOwor6J6N6Kej54K5IDwgeXV1a2FpdGVuXCA7Civmt4vlt7TnkIMgPCByaW5wYWt5dXVcIDsKK+WrjOeFmeaoqSA8IGtlbicnZW5rZW5cIDsKK+Wkq+WppuS7siA8IGZ1dWZ1bmFrYVwgOwor5oSf5p+T5Y6fIDwga2Fuc2VuZ2VuXCA7Civov47os5PppKggPCBnZWloaW5rYW5cIDsKK+agquW8jyA8IGthYnVzaGlraVwgOwor6KmV6K2w5LyaIDwgaHlvdWdpa2FpXCA7Civlpb3nlLflrZAgPCBrb3VkYW5zaGlcIDsKK+aXqeaYpeizpiA8IHNvdXNodW5mdVwgOwor5p+P5qeZIDwgYnlha3VzaGluXCA7CivllonpoK3nmYwgPCBrb3V0b3VnYW5cIDsKK+eLrOmFjCA8IGRva3VzaGFrdVwgOwor5a+d5qWt5birIDwgbmV3YXphc2hpXCA7CivkurrmoLzljJYgPCBqaW5rYWt1a2FcIDsKK+WvheW5tCA8IHRvcmFkb3NoaVwgOwor57a66bqX5LqLIDwga2lyZWlnb3RvXCA7CivoqJjlkI3moKogPCBraW1laWthYnVcIDsKK+aQuuW4r+WTgSA8IGtlaXRhaWhpblwgOwor6aeQ5bGv5omAIDwgY2h1dXRvbmpvXCA7CivnoJTnqbbmiYAgPCBrZW5reXV1am9cIDsKK+acgOWFiOerryA8IHNhaXNlbnRhblwgOwor5bGF5L2P6ICFIDwga3lvanV1c2hhXCA7CivoqoflvLXms5UgPCBrb2Nob3Vob3VcIDsKK+Wwj+WShCA8IGtvYmFuYXNoaVwgOwor5Li46IWwIDwgbWFydWdvc2hpXCA7CivmmLzpo68gPCBoaXJ1bWVzaGlcIDsKK+imluimmuWMliA8IHNoaWtha3VrYVwgOwor5LyQ5pyoIDwgYmF0c3Vib2t1XCA7Civkv4rlgpEgPCBzaHVua2V0c3VcIDsKK+S4reiPr+ihlyA8IGNodXVrYWdhaVwgOwor6IG35q20IDwgc2hva3VyZWtpXCA7CivpgKPliKTnirYgPCByZW5iYW5qb3VcIDsKK+m6nemmmeeMqyA8IGpha291bmVrb1wgOwor5aSJ5YWJ5pifIDwgaGVua291c2VpXCA7Civlr6nmn7vlrpggPCBzaGluc2FrYW5cIDsKK+WkmueUqOS4rSA8IHRheW91Y2h1dVwgOwor5pep5p2x5oimIDwgc291dG91c2VuXCA7Civpu5nnp5jmqKkgPCBtb2t1aGlrZW5cIDsKK+WGkumZuuirhyA8IGJvdWtlbmRhblwgOwor5bi45YKZ6JasIDwgam91Yml5YWt1XCA7CivmnrbmqYsgPCBrYWtlaGFzaGlcIDsKK+WmiuWppuacjSA8IG5pbnB1ZnVrdVwgOwor5p+P5pyoIDwga2FzaGl3YWdpXCA7CivkvZPph43oqIggPCB0YWlqdXVrZWlcIDsKK+itpuWumOmaiiA8IGtlaWthbnRhaVwgOwor5Luu5qmLIDwga2FyaWJhc2hpXCA7CivorJvoq4fnpL4gPCBrb3VkYW5zaGFcIDsKK+ixhueykiA8IG1hbWV0c3VidVwgOwor5LyR5pelIDwga3l1dWppdHN1XCA7CivkuIrolqwgPCB1d2FndXN1cmlcIDsKK+i/keS7o+ipqSA8IGtpbmRhaXNoaVwgOwor54WZ6I2J6YqtIDwgdGFiYWtvc2VuXCA7CivplpPmipXoqZ4gPCBrYW50b3VzaGlcIDsKK+etlOW8geiAhSA8IHRvdWJlbnNoYVwgOwor5bmz6KGM5qOSIDwgaGVpa291Ym91XCA7Civon7vlnLDnjYQgPCBhcmlqaWdva3VcIDsKK+WvhuWupCA8IG1pc3NoaXRzdVwgOwor5omB5qGD6IW6IDwgaGVudG91c2VuXCA7CivlhazliKTlu7cgPCBrb3VoYW50ZWlcIDsKK+eOieeroCA8IGd5b2t1c2hvdVwgOwor5pWw5YSE5bm0IDwgc3V1b2t1bmVuXCA7Civnm4bnga/nsaAgPCBib25kb3Vyb3VcIDsKK+Wuv+WwhiA8IHNodWt1c2hvdVwgOwor57WC5oim5b6MIDwgc2h1dXNlbmdvXCA7CivlsIbljZIgPCBzaG91c290c3VcIDsKK+S4oeiIjCA8IHJ5b3V6ZXRzdVwgOwor57eo6ZuG6YOoIDwgaGVuc2h1dWJ1XCA7Civlkajlm7LplbcgPCBzaHV1aWNob3VcIDsKK+WFrOmBuOWItiA8IGtvdXNlbnNlaVwgOwor6IG35qWtIDwgc2hva3VneW91XCA7Civkv67nkIblt6UgPCBzaHV1cmlrb3VcIDsKK+acgOmBqeWMliA8IHNhaXRla2lrYVwgOwor5YyW5a2m6ICFIDwga2FnYWt1c2hhXCA7CivlsI7lh7ogPCBkb3VzaHV0c3VcIDsKK+i0iOizhOe9qiA8IHpvdXdhaXphaVwgOwor5a6/5a2mIDwgc2h1a3VnYWt1XCA7CivkuI3mib/oqo0gPCBmdXNob3VuaW5cIDsKK+S6lOmHjeWUsSA8IGdvanV1c2hvdVwgOwor5bCP5YaKIDwgc2hvdXNhdHN1XCA7Civoh6rlt7HpoZXnpLogPCBqaWtva2VuamlcIDsKK+W5tOm9oumghiA8IG5lbnJlaWp1blwgOwor6LOt5Y2a5aC0IDwgdG9iYWt1am91XCA7CivkuKHohJogPCByeW91a3lha3VcIDsKK+eci+WuiOiAhSA8IGthbnNodXNoYVwgOwor6ISx5Ye6IDwgZGFzc2h1dHN1XCA7CivlrqLluK0gPCBreWFrdXNla2lcIDsKK+W8sembu+WZqCA8IGpha3VkZW5raVwgOwor5LiL6I2JIDwgc2hpdGFrdXNhXCA7Civml6XmnKznmoQgPCBuaWhvbnRla2lcIDsKK+WwhOWHuiA8IHNoYXNodXRzdVwgOwor6ZaL5aK+5ZywIDwga2Fpa29uY2hpXCA7CivmmqbooZMgPCByZWtpanV0c3VcIDsKK+emgeeMn+acnyA8IGtpbnJ5b3VraVwgOwor6LWk5ZyfIDwgYWthdHN1Y2hpXCA7CivliY3poY3pg6ggPCB6ZW5nYWt1YnVcIDsKK+ipleirluWutiA8IGh5b3Vyb25rYVwgOwor6Ieq5bex6LKg5ouFIDwgamlrb2Z1dGFuXCA7CivkuIDmlonlrokgPCBpc3NlaXlhc3VcIDsKK+mcsuWkqemiqOWRgiA8IHJvdGVuYnVyb1wgOwor5LiA6Kaq562JIDwgaXNzaGludG91XCA7Civlho3mlL7pgIEgPCBzYWlob3Vzb3VcIDsKK+WMluWtpue3miA8IGthZ2FrdXNlblwgOwor5oim5q276ICFIDwgc2Vuc2hpc2hhXCA7CivkuIDmloflrZcgPCBpY2hpbW9uamlcIDsKK+aEj+awl+aKleWQiCA8IGlraXRvdWdvdVwgOwor5paH5aOr6YCjIDwgYnVuc2hpcmVuXCA7CivmnKjntr/ns7ggPCBtb21lbicnaXRvXCA7CivnhKbpm7vmsJcgPCBzaG91ZGVua2lcIDsKK+aOiOS4juW8jyA8IGp1eW9zaGlraVwgOwor55uu5YiG6YePIDwgbWVidW5yeW91XCA7CivlpKnkuIvkuIAgPCB0ZW5rYWljaGlcIDsKK+S4reWPpOWTgSA8IGNodXVrb2hpblwgOwor5Lit57W2IDwgY2h1dXpldHN1XCA7CivluILloLTmgKcgPCBzaGlqb3VzZWlcIDsKK+S4reaAp+WhqSA8IGNodXVzZWllblwgOwor5LiL6IW5IDwgc2hpdGFiYXJhXCA7CivohLHkv5cgPCBkYXRzdXpva3VcIDsKK+aWh+iqnuiqvyA8IGJ1bmdvY2hvdVwgOwor5pWj5YW157eaIDwgc2FucGVpc2VuXCA7CivmtYHooYzlhZAgPCByeXV1a291amlcIDsKK+iFueaZguioiCA8IGhhcmFkb2tlaVwgOwor5biD6KKL6IW5IDwgaG90ZWliYXJhXCA7CivnhKHmlZnogrIgPCBtdWt5b3Vpa3VcIDsKK+afj+aJiyA8IGthc2hpd2FkZVwgOwor5pWZ5Yy65rCRIDwga3lvdWt1bWluXCA7CivlnLDpnIfluK8gPCBqaXNoaW50YWlcIDsKK+mVt+acn+aIpiA8IGNob3VraXNlblwgOwor6YCa55+l57C/IDwgdHN1dWNoaWJvXCA7Civkub7niakgPCBob3NoaW1vbm9cIDsKK+Wun+WtpiA8IGppdHN1Z2FrdVwgOwor5Yqg5bel5qWtIDwga2Frb3VneW91XCA7CivkuI3ooYznirYgPCBmdWd5b3Vqb3VcIDsKK+ahn+S/tSA8IHNhbmRhd2FyYVwgOwor6IOh6bq75rK5IDwgZ29tYWFidXJhXCA7Civml6XmnKznjL8gPCBuaWhvbnphcnVcIDsKK+eMn+iJsiA8IHJ5b3VzaG9rdVwgOwor5pen5LiW55WMIDwga3l1dXNla2FpXCA7CivkuIDohIggPCBpY2hpbXlha3VcIDsKK+awtOW5s+WLlSA8IHN1aWhlaWRvdVwgOwor6LWk5Y+jIDwgc2VraWd1Y2hpXCA7Civnn63lpKfnlJ8gPCB0YW5kYWlzZWlcIDsKK+iCluWDj+eUuyA8IHNob3V6b3VnYVwgOwor5LiA6KeS542jIDwgaWtrYWt1anV1XCA7Civlj6/lpInplbcgPCBrYWhlbmNob3VcIDsKK+S4gOimgee0oCA8IGljaGl5b3Vzb1wgOwor5YWQ56ul5YqHIDwgamlkb3VnZWtpXCA7CivkuK3nq4sgPCBjaHV1cml0c3VcIDsKK+Wfi+iRrOWcsCA8IG1haXNvdWNoaVwgOwor5LiK6KO95pysIDwgam91c2VpYm9uXCA7CivkuKHmgKfoirEgPCByeW91c2Vpa2FcIDsKK+Wun+ihjOiAhSA8IGppa2tvdXNoYVwgOwor6IG35o6MIDwgc2hva3VzaG91XCA7Civlgr7mlpzoqIggPCBrZWlzaGFrZWlcIDsKK+WupOWkliA8IHNoaXRzdWdhaVwgOwor54qv572q6ICFIDwgaGFuemFpc2hhXCA7Civlr5LljbUgPCBrYW50YW1hZ29cIDsKK+e1tuS6pOeKtiA8IHpla2tvdWpvdVwgOwor5aSW5p2l6ICFIDwgZ2FpcmFpc2hhXCA7CivkvJ3lsI7kvZMgPCBkZW5kb3V0YWlcIDsKK+izquaEnyA8IHNoaXRzdWthblwgOwor5qC85YilIDwga2FrdWJldHN1XCA7CivmoLjlipsgPCBrYWt1cnlva3VcIDsKK+aWnOa7kemZjSA8IHNoYWtha2tvdVwgOwor5bi45bmz5YCJIDwgam91aGVpc291XCA7CivkuLvlgqzogIUgPCBzaHVzYWlzaGFcIDsKK+aflOi7n+aApyA8IGp1dW5hbnNlaVwgOwor5YiG5ouF6YeRIDwgYnVudGFua2luXCA7CivlhrfolLXou4ogPCByZWl6b3VzaGFcIDsKK+acgOmrmOijgSA8IHNhaWtvdXNhaVwgOwor5Lih56uvIDwgcnlvdWhhc2hpXCA7CivliqDlhaXmqKkgPCBrYW55dXVrZW5cIDsKK+S4oeeriyA8IHJ5b3VyaXRzdVwgOwor5YmN5L2P5omAIDwgemVuanV1c2hvXCA7CivlsZXmnJvloZQgPCB0ZW5ib3V0b3VcIDsKK+mBjuaVj+eXhyA8IGthYmluc2hvdVwgOwor5Lq66aCt56iOIDwgbmludG91emVpXCA7CivoiJ7lj7DliocgPCBidXRhaWdla2lcIDsKK+S4i+e0kCA8IHNoaXRhaGltb1wgOwor5bmz5Z2H5YCkIDwgaGVpa2luY2hpXCA7Civku4rml6UgPCBrb24nJ25pY2hpXCA7CivmoLzlrZDpnaIgPCBrb3VzaGltZW5cIDsKK+aXqemjryA8IGhheWFtZXNoaVwgOwor5rC06Iy25bGLIDwgbWl6dWNoYXlhXCA7Civmg4XloLHntrIgPCBqb3Vob3Vtb3VcIDsKK+W3tOaXpuadjyA8IGhhdGFua3lvdVwgOwor6LK45pa5IDwga2FzaGlrYXRhXCA7Civlr6nnvo7nnLwgPCBzaGluYmlnYW5cIDsKK+iHqueEtuimsyA8IHNoaXplbmthblwgOwor6YGL5ZCm5aSp6LOmIDwgdW5wdXRlbnB1XCA7Civlr4zmoITppIrljJYgPCBmdWVpeW91a2FcIDsKK+iEguiCqumFuCA8IHNoaWJvdXNhblwgOwor6ZaA5aSW5ryiIDwgbW9uZ2Fpa2FuXCA7Civkub7mub8gPCBrYW5zaGl0c3VcIDsKK+aKl+iPjOaApyA8IGtvdWtpbnNlaVwgOwor6aGN57iBIDwgZ2FrdWJ1Y2hpXCA7CivkvJ3mn5PmgKcgPCBkZW5zZW5zZWlcIDsKK+WNsOW6puaUr+mCoyA8IGluZG9zaGluYVwgOwor5pyq57WE57mUIDwgbWlzb3NoaWtpXCA7CivmrKfljJbkuLvnvqkgPCBvdWthc2h1Z2lcIDsKK+awtOanmOa2siA8IHN1aXlvdWVraVwgOwor5pWR5Yqp6ZqKIDwga3l1dWpvdGFpXCA7CivnhKHkuoznhKHkuIkgPCBtdW5pbXV6YW5cIDsKK+S/neWtmOmHjyA8IGhvem9ucnlvdVwgOwor5LiJ5pel5LiJ5aScIDwgbWlra2FtaXlvXCA7CivniaHkuLnmtbfogIEgPCBib3RhbicnZWJpXCA7CivmoLjlhbXlmaggPCBrYWt1aGVpa2lcIDsKK+S4jea6gOi2syA8IGZ1bWFuem9rdVwgOwor6ZW36KuH6K2wIDwgbmFnYWRhbmdpXCA7CivlhpLpmbrogIUgPCBib3VrZW5zaGFcIDsKK+S4gOeykiA8IGhpdG90c3VidVwgOwor5auh5rWBIDwgY2hha3VyeXV1XCA7Civmm7Lnm64gPCBreW9rdW1va3VcIDsKK+mjn+assiA8IHNob2t1eW9rdVwgOwor57696JKy5ZujIDwgaGFuZWJ1dG9uXCA7Civmn7TlnqMgPCBzaGliYWdha2lcIDsKK+WcsOaWueWCtSA8IGNoaWhvdXNhaVwgOwor5Lqu5pyIIDwgcnlvdWdldHN1XCA7CivmnKzloLTniakgPCBob25iYW1vbm9cIDsKK+iqnuWtpuiAhSA8IGdvZ2FrdXNoYVwgOwor5LiL56m/IDwgc2hpdGFiYWtpXCA7Civlho3oqabooYwgPCBzYWlzaGlrb3VcIDsKK+S4gOevgCA8IGhpdG9mdXNoaVwgOwor5bGF5LiI6auYIDwgaXRha2VkYWthXCA7CivlpKrpmb3ns7sgPCB0YWl5b3VrZWlcIDsKK+eglOeptuWToSA8IGtlbmt5dXVpblwgOwor5byl57ir562WIDwgYmlob3VzYWt1XCA7CivnhKHloLHphawgPCBtdWhvdXNodXVcIDsKK+iYhua6neapiyA8IHJva291a3lvdVwgOwor57W25a++5YCkIDwgemV0dGFpY2hpXCA7CivlpKnpoILlhIAgPCB0ZW5jaG91Z2lcIDsKK+S4reeVpSA8IGNodXVyeWFrdVwgOwor5rW36LOK546LIDwga2Fpem9rdW91XCA7CivosqHnlYzkurogPCB6YWlrYWlqaW5cIDsKK+miqOadpeWdiiA8IGZ1dXJhaWJvdVwgOwor54q26KKLIDwgam91YnVrdXJvXCA7Civlr5LlhrflnLAgPCBrYW5yZWljaGlcIDsKK+WJjee9ruipniA8IHplbmNoaXNoaVwgOwor54mp6YePIDwgYnV0c3VyeW91XCA7CivliqDliKTkurogPCBrYWhhbicnbmluXCA7Civli5Xmu5Hou4ogPCBkb3VrYXNzaGFcIDsKK+e1kOawt+acnyA8IGtlcHB5b3VraVwgOwor6Zu75rCX5qmf5ZmoIDwgZGVua2lraWtpXCA7CivlsZXmnJvlj7AgPCB0ZW5ib3VkYWlcIDsKK+ekvOaLneWggiA8IHJlaWhhaWRvdVwgOwor6auY5oCn6IO9IDwga291c2Vpbm91XCA7Civkub7mtbfoi5QgPCBob3NoaW5vcmlcIDsKK+S9v+eUqOS+iyA8IHNoaXlvdXJlaVwgOwor5pyJ55Sw54S8IDwgYXJpdGF5YWtpXCA7Civpq5jlkajms6IgPCBrb3VzaHV1aGFcIDsKK+Wwv+aknOafuyA8IG55b3VrZW5zYVwgOwor55Kw54q257eaIDwga2Fuam91c2VuXCA7CivmnKvmtYEgPCBtYXRzdXJ5dXVcIDsKK+eZuuaDs+azlSA8IGhhc3NvdWhvdVwgOwor5qCq5Li7IDwga2FidW51c2hpXCA7CivkuIvnn7MgPCBzaGl0YWlzaGlcIDsKK+WFjeeojueCuSA8IG1lbnplaXRlblwgOwor5YCk5q616KGoIDwgbmVkYW5oeW91XCA7Civpo6/mmYIgPCBtZXNoaWRva2lcIDsKK+ebtOW8n+WtkCA8IGppa2lkZXNoaVwgOwor6Ieq5bex5auM5oKqIDwgamlrb2tlbicnb1wgOwor6YCj6YKm5Yi2IDwgcmVucG91c2VpXCA7Civkvb/nlKjkurogPCBzaGl5b3VuaW5cIDsKK+akjeacqOmJoiA8IHVla2liYWNoaVwgOwor54Wn5bCE6YeOIDwgc2hvdXNoYXlhXCA7CivkvZzku5ggPCBzYWt1ZHp1a2VcIDsKK+aFiOWWhOW/gyA8IGppemVuc2hpblwgOwor5LiK5568IDwgdXdhbWFidXRhXCA7CivmnKjnhYnnk6YgPCBtb2t1cmVuZ2FcIDsKK+acqOe2v+eJqSA8IG1vbWVubW9ub1wgOwor5YWt5YiG5YSAIDwgcm9rdWJ1bmdpXCA7CivoppblnLDlubMgPCBzaGljaGloZWlcIDsKK+W3peS9nOWToSA8IGtvdXNha3VpblwgOwor5Lyv5Y+UIDwgaGFrdXNodWt1XCA7CivniKrpnakgPCB0c3VtYWthd2FcIDsKK+WupOWGhSA8IHNoaXRzdW5haVwgOwor5a6/5Li7IDwgeWFkb251c2hpXCA7Civlm57mvJXlupcgPCBrYWlzb3V0ZW5cIDsKK+efs+eCree0gCA8IHNla2l0YW5raVwgOwor5oqV5qmf55qEIDwgdG91a2l0ZWtpXCA7CivnjJ/niqzluqcgPCByeW91a2VuemFcIDsKK+S6jOaciCA8IGZ1dGF0c3VraVwgOwor5pel6YyyIDwgbmljaGlyb2t1XCA7Civnmq7osqHluIMgPCBrYXdhemFpZnVcIDsKK+S4gOeepSA8IGljaGliZXRzdVwgOwor6ISz6KGA5qCTIDwgbm91a2Vzc2VuXCA7CivmraPliYfljJYgPCBzZWlzb2t1a2FcIDsKK+Wkp+WlpeanmCA8IG9vb2t1c2FtYVwgOwor5Luk5a6kIDwgcmVpc2hpdHN1XCA7CivkvZPkuK0gPCBrYXJhZGFqdXVcIDsKK+asoOmZpei7iiA8IGtla2thbnNoYVwgOwor5LiA5aSn5LqLIDwgaWNoaWRhaWppXCA7CivpgKPliIbmlbAgPCByZW5idW5zdXVcIDsKK+S/rueQhuS7oyA8IHNodXVyaWRhaVwgOwor5Luy5aW9IDwgbmFrYXlvc2hpXCA7CivolYHpurvnlrkgPCBqaW5tYXNoaW5cIDsKK+WFt+eUs+abuCA8IGd1c2hpbnNob1wgOwor6Kqt5pu45a62IDwgZG9rdXNob2thXCA7Civnvo7ooZPpg6ggPCBiaWp1dHN1YnVcIDsKK+aEn+isneelrSA8IGthbnNoYXNhaVwgOwor6LK05pa55pa5IDwgYW5hdGFnYXRhXCA7Civoqr/pq6ogPCBjaG91aGF0c3VcIDsKK+adseS6rOmDvSA8IHRvdWt5b3V0b1wgOwor5pen5a2X5L2TIDwga3l1dWppdGFpXCA7Civoo73kvZzosrsgPCBzZWlzYWt1aGlcIDsKK+S6jOmAsemWkyA8IG5pc2h1dWthblwgOwor6YOo6JC95rCRIDwgYnVyYWt1bWluXCA7Civnianos6ogPCBidXNzaGl0c3VcIDsKK+aXqemBkyA8IGhheWFtaWNoaVwgOwor5Yqg55uf5Zu9IDwga2FtZWlrb2t1XCA7CivkuIDlpJzkuK0gPCBoaXRveWFqdXVcIDsKK+ani+mAoOS9kyA8IGtvdXpvdXRhaVwgOwor5Lit5Yy75a2mIDwgY2h1dWlnYWt1XCA7Civlj5fkv6HogIUgPCBqdXNoaW5zaGFcIDsKK+S8muitsOmMsiA8IGthaWdpcm9rdVwgOwor56aB54WZ6LuKIDwga2luJydlbnNoYVwgOwor54mH6YGTIDwga2F0YW1pY2hpXCA7Civpm7vlrZDpioMgPCBkZW5zaGlqdXVcIDsKK+WFt+S9k+etliA8IGd1dGFpc2FrdVwgOwor6LuK5o6M5Yy6IDwgc2hhc2hvdWt1XCA7CivnibnoqK0gPCB0b2t1c2V0c3VcIDsKK+S7luWbveawkSA8IHRha29rdW1pblwgOwor5YSS5a2m6ICFIDwganVnYWt1c2hhXCA7CivlkI3mjqLlgbUgPCBtZWl0YW50ZWlcIDsKK+WbvemAo+aXlyA8IGtva3VyZW5raVwgOwor6a+j54OP6LOKIDwgc3VydW1laWthXCA7CivlhajluILmsJEgPCB6ZW5zaGltaW5cIDsKK+WgsemBk+WumCA8IGhvdWRvdWthblwgOwor5LuP5a2mIDwgYnV0c3VnYWt1XCA7Civml6XmnKzmmbQgPCBuaWhvbmJhcmVcIDsKK+W4g+Wbo+eariA8IGZ1dG9uZ2F3YVwgOwor5L+u57mV6LK7IDwgc2h1dXplbmhpXCA7CivpnLLpnJwgPCB0c3V5dWppbW9cIDsKK+WwgumWgOabuCA8IHNlbm1vbnNob1wgOwor5YWs55So6LuKIDwga291eW91c2hhXCA7CivogJDmgKfoj4wgPCB0YWlzZWlraW5cIDsKK+acreadnyA8IHNhdHN1dGFiYVwgOwor5ZCM56iu6aGeIDwgZG91c2h1cnVpXCA7Civpn7Pln5/lpJYgPCBvbicnaWtpZ2FpXCA7CivlpI/ps6UgPCBuYXRzdWRvcmlcIDsKK+izquWVjyA8IHNoaXRzdW1vblwgOwor6Kaq5ZKM5oCnIDwgc2hpbndhc2VpXCA7CivliY3poK3okYkgPCB6ZW50b3V5b3VcIDsKK+ePoOaaluewviA8IHRhbWFub3JlblwgOwor54us56uLIDwgZG9rdXJpdHN1XCA7CivkuZ3mmJ/lrrYgPCBreXV1c2Vpa2FcIDsKK+mAmuawl+WtlCA8IHRzdXVraWtvdVwgOwor5pyI5qyhIDwgdHN1a2luYW1pXCA7CivorKzoqqwgPCBieXV1c2V0c3VcIDsKK+mao+S6uuaEmyA8IHJpbmppbicnYWlcIDsKK+S4jeaJv+efpSA8IGZ1c2hvdWNoaVwgOwor5q275Lqh5pWwIDwgc2hpYm91c3V1XCA7CivlrabljZIgPCBnYWt1c290c3VcIDsKK+WxheS9j+aoqSA8IGt5b2p1dWtlblwgOwor6Ymk5ous5bynIDwga2FnaWtha2tvXCA7CivlgKbmgKDmhJ8gPCBrZW50YWlrYW5cIDsKK+WGt+iUteiIuSA8IHJlaXpvdXNlblwgOwor5aW06LypIDwgeWF0c3ViYXJhXCA7CivlkIjmiJDphZIgPCBnb3VzZWlzaHVcIDsKK+WRs+WZjOaxgSA8IG1pc29zaGlydVwgOwor5oyH5bCO6ICFIDwgc2hpZG91c2hhXCA7CivlrablipsgPCBnYWt1cnlva3VcIDsKK+WNiuWPr+mAmiA8IGhhbmthdHN1dVwgOwor54Sh6K2m5ZGKIDwgbXVrZWlrb2t1XCA7Civln7rmnKzlkIjmhI8gPCBraWhvbmdvdWlcIDsKK+Wkp+ilv+mDtyA8IGRhaXNhaWdvdVwgOwor552h55yg5YmkIDwgc3VpbWluemFpXCA7Civml4vnm6Tlt6UgPCBzZW5iYW5rb3VcIDsKK+W4r+WIhuaVsCA8IHRhaWJ1bnN1dVwgOwor5bCP5YWQ56eR5Yy7IDwgc2hvdW5pa2FpXCA7CivlvozntpnogIUgPCBrb3VrZWlzaGFcIDsKK+S6ruWvnyA8IHJ5b3VzYXRzdVwgOwor5aSp5pel5aGpIDwgdGVucGlzaGlvXCA7CivlqIHlnKfnmoQgPCBpYXRzdXRla2lcIDsKK+S6jOmHjeW6lSA8IG5panV1em9rb1wgOwor5Y+I5byf5a2QIDwgbWF0YWRlc2hpXCA7CivmlZHlkb3lhbcgPCBreXV1bWVpZ3VcIDsKK+S4reasoSA8IG5ha2F0c3VnaVwgOwor56aB54yf5Yy6IDwga2lucnlvdWt1XCA7CivlvKnntJroiaYgPCBkb2t5dXVrYW5cIDsKK+aXp+itmCA8IGt5dXVzaGlraVwgOwor5Lq65aa7IDwgaGl0b2R6dW1hXCA7CivmgZLkuYXljJYgPCBrb3VreXV1a2FcIDsKK+aWsOmHiCA8IHNoaW5zaGFrdVwgOwor5YW35L2T55qEIDwgZ3V0YWl0ZWtpXCA7CivohbnkuIDmna8gPCBoYXJhaXBwYWlcIDsKK+agvOeQhuirliA8IGtha3VyaXJvblwgOwor5pel6Ku+IDwgbmljaGlkYWt1XCA7CivmhJ/orJ3nirYgPCBrYW5zaGFqb3VcIDsKK+iCoeS4iyA8IG1hdGFzaGl0YVwgOwor54++6KGM54qvIDwgZ2Vua291aGFuXCA7Civnj43lrqIgPCBjaGlua3lha3VcIDsKK+aXpeS7mOWNsCA8IGhpZHp1a2VpblwgOwor5aSq6Zm954GvIDwgdGFpeW91dG91XCA7CivmiJHmrabogIXnvoUgPCBnYW11c2hhcmFcIDsKK+WklumdoiA8IHNvdG9kenVyYVwgOwor5oOF5aCx5rqQIDwgam91aG91Z2VuXCA7CivmmKXoibIgPCBzaHVuc2hva3VcIDsKK+WFrOS9v+mkqCA8IGtvdXNoaWthblwgOwor57+M5pyIIDwgeW9rdWdldHN1XCA7CivluIbnq4vosp0gPCBob3RhdGVnYWlcIDsKK+iLpeatpuiAhSA8IHdha2FtdXNoYVwgOwor5Lqs5aWzIDwga3lvdW9uJyduYVwgOwor5riF566X5pu4IDwgc2Vpc2Fuc2hvXCA7CivmnKzooZfpgZMgPCBob25rYWlkb3VcIDsKK+S4suafvyA8IGt1c2hpZ2FraVwgOwor6YO15L6/6LuKIDwgeXV1Ymluc2hhXCA7Civoh6rlt7HniqDnibIgPCBqaWtvZ2lzZWlcIDsKK+e/jOaXpSA8IHlva3VqaXRzdVwgOwor5LiA54K55qmfIDwgaWNoaXRlbmtpXCA7CivkuKHmpbUgPCByeW91a3lva3VcIDsKK+Wkj+miqOmCqiA8IG5hdHN1a2F6ZVwgOwor5LuP5ZCNIDwgYnV0c3VteW91XCA7CivnibnoibIgPCB0b2t1c2hva3VcIDsKK+S4remBk+a0viA8IGNodXVkb3VoYVwgOwor5pq06aKo5Z+fIDwgYm91ZnV1aWtpXCA7CivnmbrnpoHmnKwgPCBoYWtraW5ib25cIDsKK+Wcp+mbu+awlyA8IGF0c3VkZW5raVwgOwor5beo5Lq65YWaIDwga3lvamludG91XCA7Civpo5/lrqIgPCBzaG9ra3lha3VcIDsKK+aZguS7o+eJqSA8IGppZGFpbW9ub1wgOwor5bGP6aKo5bKpIDwgYnlvdWJ1aXdhXCA7Civlv6voqJjpjLIgPCBrYWlraXJva3VcIDsKK+eItuimqiA8IGNoaWNoaW95YVwgOwor5pq06aKo5ZyPIDwgYm91ZnV1a2VuXCA7Civku67kvY8gPCBrYXJpenVtYWlcIDsKK+mbqumdtCA8IHl1a2lndXRzdVwgOwor5LiN5oiQ57i+IDwgZnVzZWlzZWtpXCA7Civnj77lh7ogPCBnZW5zaHV0c3VcIDsKK+S7j+WKmyA8IGJ1dHN1cmlraVwgOwor5aSa6Z+z56+AIDwgdGFvbnNldHN1XCA7CivpgKPluK/mhJ8gPCByZW50YWlrYW5cIDsKK+mDqOWIhueahCA8IGJ1YnVudGVraVwgOwor5bCC6ZaA5bqXIDwgc2VubW9udGVuXCA7CivmhaPnlKjpn7MgPCBrYW4nJ3lvdW9uXCA7CivlpJzku5XkuosgPCB5b3NoaWdvdG9cIDsKK+a8lOe/kuaelyA8IGVuc2h1dXJpblwgOwor5LiL5qeYIDwgc2hpbW96YW1hXCA7Civmn5Dpq5jmoKEgPCBib3Vrb3Vrb3VcIDsKK+e5sOi2iiA8IGt1cmlrb3NoaVwgOwor57a/6I+T5a2QIDwgd2F0YWdhc2hpXCA7Civot6jnt5rmqYsgPCBrb3Nlbmt5b3VcIDsKK+eFmeiNieebhiA8IHRhYmFrb2JvblwgOwor5Y+X6aiT56WoIDwganVrZW5oeW91XCA7CivlhoXmlpzoppYgPCBuYWlzaGFzaGlcIDsKK+mbu+S/oeapnyA8IGRlbnNoaW5raVwgOwor5Zyn57iu5qmfIDwgYXNzaHVrdWtpXCA7CivnianohbAgPCBtb25vZ29zaGlcIDsKK+S4ieakjyA8IG1pdHN1bWF0YVwgOwor5a6f6KGM5qipIDwgamlra291a2VuXCA7Civmnb7ljp8gPCBtYXRzdWJhcmFcIDsKK+ebuOS6kuaJtuWKqSA8IHNvdWdvZnVqb1wgOwor6LOD5YCfIDwgY2hpbnNoYWt1XCA7Civnj77ooYzms5UgPCBnZW5rb3Vob3VcIDsKK+iHqueEtueVjCA8IHNoaXplbmthaVwgOwor5oe45Z6C57eaIDwga2Vuc3Vpc2VuXCA7CivkuIrmiYvogIUgPCBqb3V6dW1vbm9cIDsKK+aXpeacrOWtpiA8IG5paG9uZ2FrdVwgOwor5o6S6Zqc5ZmoIDwgaGFpc2hvdWtpXCA7CivnnJ/lpI/ml6UgPCBtYW5hdHN1YmlcIDsKK+eGn+mjnyA8IGp1a3VzaG9rdVwgOwor5oSf54Sh6YePIDwga2FubXVyeW91XCA7Civntabku5jph5EgPCBreXV1ZnVraW5cIDsKK+S7mOS6uiA8IHRzdWtlYml0b1wgOwor5Luj5ZCN6KmeIDwgZGFpbWVpc2hpXCA7CivlkIzpn7PnlbDnvqkgPCBkb3VvbicnaWdpXCA7CivmlZHliqnoiLkgPCBreXV1am9zZW5cIDsKK+eJveW8lei7iiA8IGtlbicnaW5zaGFcIDsKK+WxheS9j+aApyA8IGt5b2p1dXNlaVwgOwor5oqX5Yed5Zu6IDwga291Z3lvdWtvXCA7CivnnIvorbfplbcgPCBrYW5nb2Nob3VcIDsKK+S9juaAp+iDvSA8IHRlaXNlaW5vdVwgOwor54Sh6KiI55S7IDwgbXVrZWlrYWt1XCA7CivlpJrpnaLop5IgPCB0YW1lbmtha3VcIDsKK+S9juWRqOazoiA8IHRlaXNodXVoYVwgOwor55CG5oOz6YO3IDwgcmlzb3VreW91XCA7CivooqvniIbogIUgPCBoaWJha3VzaGFcIDsKK+eyvuijveezliA8IHNlaXNlaXRvdVwgOwor5pyJ55So5oCnIDwgeXV1eW91c2VpXCA7CivlqK/mpb3ooZcgPCBnb3Jha3VnYWlcIDsKK+W+jOWkqeaApyA8IGtvdXRlbnNlaVwgOwor5qCh5Y+L5LyaIDwga291eXV1a2FpXCA7CivljZjliKnooaggPCB0YW5yaWh5b3VcIDsKK+iHquW3seacrOS9jSA8IGppa29ob24nJ2lcIDsKK+aciOW9sSA8IHRzdWtpa2FnZVwgOwor55mC6aSK5omAIDwgcnlvdXlvdWpvXCA7Civkv53lrojnmoQgPCBob3NodXRla2lcIDsKK+aciOW9oiA8IHRzdWtpZ2F0YVwgOwor55qH5rCR5YWaIDwga291bWludG91XCA7Civkuozph43llLEgPCBuaWp1dXNob3VcIDsKK+S4g+abnCA8IHNoaWNoaXlvdVwgOwor5Y216IOO55SfIDwgcmFudGFpc2VpXCA7CivkuIDmnIggPCBoaXRvdHN1a2lcIDsKK+e3mummmeS7oyA8IHNlbmtvdWRhaVwgOwor5a++6KeS5YyWIDwgdGFpa2FrdWthXCA7CivmnIDpq5jngrkgPCBzYWlrb3V0ZW5cIDsKK+WkqeizqiA8IHRlbnNoaXRzdVwgOwor5LiL5pW3IDwgc2hpdGFqaWtpXCA7CivmnIDkvY7pmZAgPCBzYWl0ZWlnZW5cIDsKK+S4g+aYnyA8IHNoaWNoaXNlaVwgOwor5q2M5ZCI5oimIDwgdXRhZ2Fzc2VuXCA7CivlubPlkozos54gPCBoZWl3YXNob3VcIDsKK+aVsOS/guaVsCA8IHN1dWtlaXN1dVwgOwor5pyo54Kt55S7IDwgbW9rdXRhbmdhXCA7Civlho3pmY3oh6ggPCBzYWlrb3VyaW5cIDsKK+aYn+epuiA8IGhvc2hpem9yYVwgOwor5YaN6Kq/5p+7IDwgc2FpY2hvdXNhXCA7Civpq5jph47mp5kgPCBrb3V5YW1ha2lcIDsKK+Wumua7kei7iiA8IHRlaWthc3NoYVwgOwor5Ly85oiR6JyCIDwgamlnYWJhY2hpXCA7Civml4vlhYnmgKcgPCBzZW5rb3VzZWlcIDsKK+WQjeaKleaJiyA8IG1laXRvdXNodVwgOwor54m5562GIDwgdG9rdWhpdHN1XCA7CivkuIDml6UgPCB0c3VpdGFjaGlcIDsKK+aOoeeul+aApyA8IHNhaXNhbnNlaVwgOwor5LyB5qWt6ICFIDwga2lneW91c2hhXCA7CivkurrkvJ0gPCBoaXRvZHp1dGVcIDsKK+eVsOW4uOmrmOa4qSA8IGlqb3Vrb3VvblwgOwor54uQ54GrIDwga2l0c3VuZWJpXCA7CivpioDnoILlrZAgPCBnaW5zdW5hZ29cIDsKK+eIhuijgiA8IGJha3VyZXRzdVwgOwor54m556uLIDwgdG9rdXJpdHN1XCA7Civkurrku5ggPCBoaXRvZHp1a2lcIDsKK+WbveWIhuWvuiA8IGtva3VidW5qaVwgOwor6aSK6LGa5aC0IDwgeW91dG9uam91XCA7CivpnZ7lr77np7AgPCBoaXRhaXNob3VcIDsKK+S4jemKuemLvCA8IGZ1c2h1dWtvdVwgOwor5aSx6KiAIDwgc2hpdHN1Z2VuXCA7CivkuIDpmaLliLYgPCBpY2hpaW5zZWlcIDsKK+aJi+S7leS6iyA8IHRlc2hpZ290b1wgOwor6IOG5Zqi54KOIDwgdGFuJydub3VlblwgOwor6Zuq6YGTIDwgeXVraW1pY2hpXCA7Civpm5HpjLIgPCB6YXRzdXJva3VcIDsKK+W8t+aJk+iAhSA8IGt5b3VkYXNoYVwgOwor6KaP56+E55qEIDwga2loYW50ZWtpXCA7CivnvoXntJfntJkgPCByYXNoYWdhbWlcIDsKK+iEseiho+WgtCA8IGRhdHN1aWpvdVwgOwor5aWz6IW5IDwgb24nJ25hYmFyYVwgOwor54ax6YePIDwgbmV0c3VyeW91XCA7CivmlZHliqnntrIgPCBreXV1am9tb3VcIDsKK+mbqui+sSA8IHNldHN1am9rdVwgOwor5aSq6Zmw5pqmIDwgdGFpaW5yZWtpXCA7Civmj5rnvr3onbYgPCBhZ2VoYWNob3VcIDsKK+mgreagqiA8IGF0YW1ha2FidVwgOwor5aOr5ZCb5a2QIDwgc2hpa3Vuc2hpXCA7CivohbDnvr3nm64gPCBrb3NoaWJhbWVcIDsKK+eJh+S4gOaWuSA8IGthdGFpcHBvdVwgOwor6Zi/54mH56qfIDwgYWhlbmt1dHN1XCA7CivlpLHooYAgPCBzaGlra2V0c3VcIDsKK+aapuaciCA8IHJla2lnZXRzdVwgOwor5ZC+5pyo6aaZIDwgd2FyZW1va291XCA7CivlpInos6ogPCBoZW5zaGl0c3VcIDsKK+mjn+WHuiA8IGhhbWlkYXNoaVwgOwor5aSn5Z6L6LuKIDwgb29nYXRhc2hhXCA7CivlpI/lraPnhrEgPCBrYWtpbmV0c3VcIDsKK+WknOipsSA8IHlvYmFuYXNoaVwgOwor5YaF6Zm46ZynIDwgbmFpcmlrdW11XCA7CivmpI3lrZfmqZ8gPCBzaG9rdWppa2lcIDsKK+mBiuimp+iIuSA8IHl1dXJhbnNlblwgOwor5Lmz5oi/54KOIDwgbnl1dWJvdWVuXCA7CivohLPmjKvlgrcgPCBub3V6YXNob3VcIDsKK+WkqeiiiyA8IHRlbmJ1a3Vyb1wgOwor5a2m55Sf6KqyIDwgZ2FrdXNlaWthXCA7CivpnbTntJAgPCBrdXRzdWhpbW9cIDsKK+iXgeW4g+WboyA8IHdhcmFidXRvblwgOwor6Kmz6L+wIDwgc2hvdWp1dHN1XCA7CivmipXmqZ/lv4MgPCB0b3VraXNoaW5cIDsKK+mDteS+v+iIuSA8IHl1dWJpbnNlblwgOwor6Z2S5bm05ZujIDwgc2VpbmVuZGFuXCA7Civli6flkYrmoYggPCBrYW5rb2t1YW5cIDsKK+eJueeZuiA8IHRva3VoYXRzdVwgOwor6LuN5LqL5o+05YqpIDwgZ3VuamllbmpvXCA7CivlpKnmloflj7AgPCB0ZW5tb25kYWlcIDsKK+iHqueEtuazlSA8IHNoaXplbmhvdVwgOwor55+z54Gw5rSeIDwgc2Vra2FpZG91XCA7CivlvIrooaPnoLTluL0gPCBoZWlpaGFib3VcIDsKK+mdtOevpiA8IGt1dHN1YmVyYVwgOwor5aKX5YiK5Y+3IDwgem91a2FuZ291XCA7CivkuIvlvbkgPCBzaGl0YXlha3VcIDsKK+S4oeWyuCA8IHJ5b3VnaXNoaVwgOwor5puy5a2mIDwga3lva3VnYWt1XCA7CivlhoXlpKfoh6MgPCBuYWlkYWlqaW5cIDsKK+ePvuWcqOWcsCA8IGdlbnphaWNoaVwgOwor5oim6LuK6ZqKIDwgc2Vuc2hhdGFpXCA7Civnhp/pgZQgPCBqdWt1dGF0c3VcIDsKK+S4keW5tCA8IHVzaGlkb3NoaVwgOwor5LqM6YeN5Li4IDwgbmlqdXVtYXJ1XCA7CivpnLLojYkgPCB0c3V5dWt1c2FcIDsKK+mFkumAoOWgtCA8IHNodXpvdWpvdVwgOwor5oSb6Kqt6ICFIDwgYWlkb2t1c2hhXCA7CivkuIPkupTkuInnuIQgPCBzaGltZW5hd2FcIDsKK+aWh+WMlumBuueUoyA8IGJ1bmthaXNhblwgOwor55+z54Gw5rC0IDwgc2Vra2Fpc3VpXCA7CivlpKflnLDpnIcgPCBkYWlqaXNoaW5cIDsKK+iplemHiCA8IGh5b3VzaGFrdVwgOwor5LiN5ouh5aSnIDwgZnVrYWt1ZGFpXCA7CivkuLvlsI7ogIUgPCBzaHVkb3VzaGFcIDsKK+mrmOiSlOe1tSA8IHRha2FtYWtpZVwgOwor6Ieq54S25q27IDwgc2hpemVuc2hpXCA7CivlsYXkvY/lnLAgPCBreW9qdXVjaGlcIDsKK+S4gOW+iyA8IGljaGlyaXRzdVwgOwor5rG65q276ZqKIDwga2Vzc2hpdGFpXCA7CivkuLvohLPogIUgPCBzaHVub3VzaGFcIDsKK+iInualvemdoiA8IGJ1Z2FrdW1lblwgOwor6a2a5LuL6aGeIDwgZ3lva2FpcnVpXCA7CivmnIDpq5jmpJwgPCBzYWlrb3VrZW5cIDsKK+eGseaxmuafkyA8IG5ldHN1b3NlblwgOwor5oGS5pif5bm0IDwga291c2VpbmVuXCA7Civoh6rlnKjpiaQgPCBqaXphaWthZ2lcIDsKK+ertui1sOmmrCA8IGt5b3Vzb3ViYVwgOwor5b6h5omL5rSXIDwgbWl0YXJhc2hpXCA7CivlopfluYXlmaggPCB6b3VmdWt1a2lcIDsKK+aXpeacrOWBtCA8IG5paG9uZ2F3YVwgOwor5Lq66aGe5Y+yIDwgamlucnVpc2hpXCA7Civoi6blirTmp5ggPCBrdXJvdXNhbWFcIDsKK+emgOiri+abuCA8IHJpbnNlaXNob1wgOwor6aKo5Y+jIDwga2F6YWd1Y2hpXCA7Civkv7Poq6fluKsgPCBoYWlrYWlzaGlcIDsKK+Wkj+idiSA8IG5hdHN1emVtaVwgOwor6Ieq5a625Y+X57K+IDwgamlrYWp1c2VpXCA7CivmhaPnlKjoqp4gPCBrYW4nJ3lvdWdvXCA7CivlpbPlrabnlJ8gPCBqb2dha3VzZWlcIDsKK+mbu+WtkOeuoSA8IGRlbnNoaWthblwgOwor5qK15aSp546LIDwgYm9udGVuJydvdVwgOwor6Zye6I2JIDwga2FzdW1pc291XCA7CivlkIjmiJDntJkgPCBnb3VzZWlzaGlcIDsKK+m7hOmKhemJsSA8IGtvdWRvdWtvdVwgOwor6Ieq5a625Y+X57KJIDwgamlrYWp1ZnVuXCA7CivniafnlZwgPCBib2t1Y2hpa3VcIDsKK+WPuOaVmeWMuiA8IHNoaWt5b3VrdVwgOwor6Kej5pWj5qipIDwga2Fpc2Fua2VuXCA7CivpganpvaLmnJ8gPCB0ZWtpcmVpa2lcIDsKK+WogeWah+eahCA8IGlrYWt1dGVraVwgOwor6YqD6YCj5bCEIDwganV1cmVuc2hhXCA7CivlhY3nqI7lk4EgPCBtZW56ZWloaW5cIDsKK+eEvOmkhSA8IHlha2ltb2NoaVwgOwor6auY5rC05rqWIDwga291c3VpanVuXCA7CivlpKrpmb3lubQgPCB0YWl5b3VuZW5cIDsKK+awkeeUn+WnlOWToSA8IG1pbnNlaWlpblwgOwor55+z57Sw5belIDwgaXNoaXphaWt1XCA7Civlr53lsI/kvr8gPCBuZXNob3ViZW5cIDsKK+acq+WDmiA8IGJhdHN1cnlvdVwgOwor5Ya36JS15rOVIDwgcmVpem91aG91XCA7CivphY3liIbms5UgPCBoYWlidW5ob3VcIDsKK+iAvee+jueahCA8IHRhbmJpdGVraVwgOwor6Ki76YeIIDwgY2h1dXNoYWt1XCA7CivmvZzoiKroiYcgPCBzZW5rb3V0ZWlcIDsKK+WQjOeqk+eUnyA8IGRvdXNvdXNlaVwgOwor5pS+5rWq6ICFIDwgaG91cm91c2hhXCA7CivnqK7mpoLlv7UgPCBzaHVnYWluZW5cIDsKK+aXqeaYjuaIpiA8IHNvdW1laXNlblwgOwor5b6u56mN5YiGIDwgYmlzZWtpYnVuXCA7Civps6XnnrDlm7MgPCBjaG91a2FuenVcIDsKK+Wls+eOi+icgiA8IGpvb3ViYWNoaVwgOwor5paw57eRIDwgc2hpbnJ5b2t1XCA7CivlpLHohJogPCBzaGlra3lha3VcIDsKK+WkluS6pOWumCA8IGdhaWtvdWthblwgOwor5q2v6IKJ54KOIDwgc2hpbmlrdWVuXCA7Civoh6rnhLbmnpcgPCBzaGl6ZW5yaW5cIDsKK+a8lOe/kuWgtCA8IGVuc2h1dWpvdVwgOwor5bCP6bqm6ImyIDwga29tdWdpaXJvXCA7Civlvqnlj6Toqr8gPCBmdWtrb2Nob3VcIDsKK+WPjeecgeS8miA8IGhhbnNlaWthaVwgOwor54ax5biv6a2aIDwgbmV0dGFpZ3lvXCA7CivlpLHogbcgPCBzaGlzc2hva3VcIDsKK+WNmOiRieapnyA8IHRhbicneW91a2lcIDsKK+aEm+S7luS4u+e+qSA8IGFpdGFzaHVnaVwgOwor5omA5pyJ6ICFIDwgc2hveXV1c2hhXCA7Civosqnlo7LogIUgPCBoYW5iYWlzaGFcIDsKK+S4u+S6uumhlCA8IHNodWppbmdhb1wgOwor5ruR56i96ICFIDwgb2Rva2Vtb25vXCA7CivmsLTpo6LppYkgPCBtaXp1a2lraW5cIDsKK+a1t+S4iuazlSA8IGthaWpvdWhvdVwgOwor54ax5Y+v5aGRIDwgbmV0c3VrYXNvXCA7CivlpI/oj4ogPCBuYXRzdWdpa3VcIDsKK+S4gOWFmuS4gOa0viA8IGl0dG91aXBwYVwgOwor5YyW5a2m5ZOBIDwga2FnYWt1aGluXCA7CivnuJ7om4cgPCBzaGltYWhlYmlcIDsKK+S4reWTsiA8IGNodXV0ZXRzdVwgOwor5a2Q5rKi5bGxIDwga29kYWt1c2FuXCA7CivkvZnmsLTlkJAgPCB5b3N1aWhha2lcIDsKK+aAquWlh+aYoOeUuyA8IGthaWtpZWlnYVwgOwor6Kiz6L+wIDwgeWFrdWp1dHN1XCA7CivmlrDnr4kgPCBzaGluY2hpa3VcIDsKK+Wkj+iNiSA8IG5hdHN1Z3VzYVwgOwor5pio5bm05bqmIDwgc2FrdW5lbmRvXCA7CivnjonkuLIgPCB0YW1hZ3VzaGlcIDsKK+iHqueEtuaVsCA8IHNoaXplbnN1dVwgOwor5YaN6KiC54mIIDwgc2FpdGVpYmFuXCA7CivpnZLlubTkvJogPCBzZWluZW5rYWlcIDsKK+S4reWPoyA8IG5ha2FndWNoaVwgOwor5aWz55mWIDwgb24nJ25hZ3VzZVwgOwor54++5Zyw5Lq6IDwgZ2VuY2hpamluXCA7Civmh5DnlpHlv4MgPCBrYWlnaXNoaW5cIDsKK+WnpeahnCA8IHViYXpha3VyYVwgOwor5pyd5pel5b2xIDwgYXNhaGlrYWdlXCA7Civph4jov6bniZ/lsLwgPCBzaGFrYW11bmlcIDsKK+iqmOWwjuW8viA8IHl1dWRvdWRhblwgOwor6LKp5aOy57ayIDwgaGFuYmFpbW91XCA7CivkuK3ljZIgPCBjaHV1c290c3VcIDsKK+WFq+eZvuS4hyA8IHlhb3lvcm96dVwgOwor5LiL5Z2CIDwgc2hpbW9zYWthXCA7CivosqfkuY/kurogPCBiaW5ib3VuaW5cIDsKK+W3peS6i+S4rSA8IGtvdWppY2h1dVwgOwor56qD55uX572qIDwgc2V0dG91emFpXCA7CivpoqjkuIsgPCBrYXphc2hpbW9cIDsKK+mcnue2siA8IGthc3VtaWFtaVwgOwor5Y6f6KOB5YikIDwgZ2Vuc2FpYmFuXCA7CivngrnngavolqwgPCB0ZW5rYXlha3VcIDsKK+a1t+S4iuaoqSA8IGthaWpvdWtlblwgOwor5YyW5a2m5YmkIDwga2FnYWt1emFpXCA7Civnsr7oo73ms5UgPCBzZWlzZWlob3VcIDsKK+S4oeWPoyA8IHJ5b3VndWNoaVwgOwor5pa555y857SZIDwgaG91Z2Fuc2hpXCA7Civlj5fos57ogIUgPCBqdXNob3VzaGFcIDsKK+aOqOiWpuiAhSA8IHN1aXNlbnNoYVwgOwor6Zuq5qih5qeYIDwgeXVraW1veW91XCA7CivniIbnq7kgPCBiYWt1Y2hpa3VcIDsKK+S4gOe0muWTgSA8IGlra3l1dWhpblwgOwor5qC85a2Q54K5IDwga291c2hpdGVuXCA7Civml6Xni6wgPCBuaWNoaWRva3VcIDsKK+izvOiyt+iAhSA8IGtvdWJhaXNoYVwgOwor5LiA562J6LOeIDwgaXR0b3VzaG91XCA7Civku5blm73kurogPCB0YWtva3VqaW5cIDsKK+epuuawl+a1tCA8IGt1dWtpeW9rdVwgOwor5pen54mpIDwga3l1dWJ1dHN1XCA7CivnjaPlgY8gPCBrZW1vbm9oZW5cIDsKK+WkluS6pOWboyA8IGdhaWtvdWRhblwgOwor5Z+36KGM6YOoIDwgc2hpa2tvdWJ1XCA7CivpnLLnqIsgPCB0c3V5dWhvZG9cIDsKK+iqv+evgCA8IGNob3VzZXRzdVwgOwor55CG56We6KuWIDwgcmlzaGlucm9uXCA7Civlj5fpqJPmlpkgPCBqdWtlbnJ5b3VcIDsKK+mgreWtlyA8IGthc2hpcmFqaVwgOwor5Yud5omL5YWDIDwga2F0dGVtb3RvXCA7Civnm7jlr77oq5YgPCBzb3V0YWlyb25cIDsKK+WIiuihjOS8miA8IGthbmtvdWthaVwgOwor542E5Y2SIDwgZ29rdXNvdHN1XCA7Civkv53ogrLmlpkgPCBob2lrdXJ5b3VcIDsKK+e3j+izh+eUoyA8IHNvdXNoaXNhblwgOwor5L2P5rCR56iOIDwganV1bWluemVpXCA7CivkuJTlj4ggPCBrYXRzdW1hdGFcIDsKK+S/uOe1puaXpSA8IGhvdWt5dXViaVwgOwor54mp5rWBIDwgYnV0c3VyeXV1XCA7CivkuKHlh7ggPCByeW91dG90c3VcIDsKK+mZs+i/sCA8IGNoaW5qdXRzdVwgOwor6KGM5pS/5bqcIDwgZ3lvdXNlaWZ1XCA7Civlh6blpbPohpwgPCBzaG9qb21ha3VcIDsKK+maj+S8tOiAhSA8IHp1aWhhbnNoYVwgOwor5paw552AIDwgc2hpbmNoYWt1XCA7CivlpbPniakgPCBvbicnbmFtb25vXCA7CivkuI3ljbAgPCBmdWppcnVzaGlcIDsKK+aCquWuo+S8nSA8IGFrdXNlbmRlblwgOwor5pu45LuYIDwga2FraXRzdWtlXCA7CivlpJrpnaLnmoQgPCB0YW1lbnRla2lcIDsKK+ipsOiNiSA8IHRzdW1la3VzYVwgOwor5a++5oim6LuKIDwgdGFpc2Vuc2hhXCA7CivkuK3kvY0gPCBjaHV1Z3VyYWlcIDsKK+eGiuicgiA8IGt1bWFiYWNoaVwgOwor6Ium5Yq05oCnIDwga3Vyb3VzaG91XCA7CivmgZDlprvlrrYgPCBreW91c2Fpa2FcIDsKK+WNium5ueawtCA8IGhhbmthbnN1aVwgOwor56S+5Lya57WM5riIIDwgc2hha2Fpa2VpXCA7CivntZDot4/otrrluqcgPCBrZWtrYWZ1emFcIDsKK+WvhuiIquiAhSA8IG1pa2tvdXNoYVwgOwor5LiA562J6KaqIDwgaXR0b3VzaGluXCA7CivmlZnogbcgPCBreW91c2hva3VcIDsKK+WkseekvCA8IHNoaXRzdXJlaVwgOwor6KOc5by3562LIDwgaG9reW91a2luXCA7CivnnIvmnb/lsYsgPCBrYW5iYW4nJ3lhXCA7CivnpL7lk6Hlr64gPCBzaGFpbnJ5b3VcIDsKK+WRvOWQuOazlSA8IGtva3l1dWhvdVwgOwor54mp5qyyIDwgYnV0c3V5b2t1XCA7CivkuIDlj6MgPCBoaXRva3VjaGlcIDsKK+aTgumJoiA8IHN1cmliYWNoaVwgOwor5L2T6YeP5ZmoIDwgdGFpcnlvdWtpXCA7CivljJblrabkuIogPCBrYWdha3Vqb3VcIDsKK+S8veiXjemzpSA8IGdhcmFuY2hvdVwgOwor5b+D6IeT6YOoIDwgc2hpbnpvdWJ1XCA7CivniIbnmbogPCBiYWt1aGF0c3VcIDsKK+acgOmrmOWzsCA8IHNhaWtvdWhvdVwgOwor56u26Lyq5aC0IDwga2Vpcmluam91XCA7Civph43lqZrogIUgPCBqdXVrb25zaGFcIDsKK+imgeaSg+apnyA8IHlvdWdla2lraVwgOwor5rCX5YyW54axIDwga2lrYW5ldHN1XCA7CivmmKjml6UgPCBzYWt1aml0c3VcIDsKK+aXpeaVmee1hCA8IG5pa2t5b3Vzb1wgOwor6JOW6bq75a2Q5rK5IDwgaGltYXNoaXl1XCA7CivnuK7ntIQgPCBzaHVrdXlha3VcIDsKK+S4ieetieaYnyA8IHNhbnRvdXNlaVwgOwor5ZG95ZCN5rOVIDwgbWVpbWVpaG91XCA7Civlj4LliqDlm70gPCBzYW5rYWtva3VcIDsKK+acqumWi+aLkyA8IG1pa2FpdGFrdVwgOwor5YaN57eo5oiQIDwgc2FpaGVuc2VpXCA7CivlpLHnnYAgPCBzaGl0Y2hha3VcIDsKK+mAj+awtOaApyA8IHRvdXN1aXNlaVwgOwor5LiA5YiXIDwgaWNoaXJldHN1XCA7Civlj43lr77oq5YgPCBoYW50YWlyb25cIDsKK+WtpuiKuOWToSA8IGdha3VnZWlpblwgOwor5Ya35YeN6a2aIDwgcmVpdG91Z3lvXCA7CivmlZfmrovlhbUgPCBoYWl6YW5oZWlcIDsKK+S4i+WBtCA8IHNoaXRhZ2F3YVwgOwor6ZuA6ImyIDwgc3V6dW1laXJvXCA7Civmm7jnlJ/oq5YgPCBzaG9zZWlyb25cIDsKK+iyoeaUv+mboyA8IHphaXNlaW5hblwgOwor5LiA5YSyIDwgaGl0b21vdWtlXCA7CivliLbnmYzliaQgPCBzZWlnYW56YWlcIDsKK+aXj+a7hSA8IHpva3VtZXRzdVwgOwor55m65rOh5YmkIDwgaGFwcG91emFpXCA7CivkvJ3lpYfnmoQgPCBkZW5raXRla2lcIDsKK+e1huWJteiGjyA8IGJhbnNvdWtvdVwgOwor5LiL5L2cIDwgc2hpdGFzYWt1XCA7Civnn7PngbDlsqkgPCBzZWtrYWlnYW5cIDsKK+iqv+eVpSA8IGNob3VyeWFrdVwgOwor5YW15a2m5qChIDwgaGVpZ2Fra291XCA7Civlr4zlsbHnnIwgPCB0b3lhbWFrZW5cIDsKK+ipsuW9k+iAhSA8IGdhaXRvdXNoYVwgOwor54K55pWw5Yi2IDwgdGVuc3V1c2VpXCA7CivmmJTml6UgPCBzZWtpaml0c3VcIDsKK+mrmOefpeecjCA8IGtvdWNoaWtlblwgOwor5Y+j5LiK5pu4IDwga291am91c2hvXCA7Civop6PmlL7mhJ8gPCBrYWlob3VrYW5cIDsKK+W5s+WSjOeahCA8IGhlaXdhdGVraVwgOwor6Ieq6ZaJ55eHIDwgamloZWlzaG91XCA7Civpo7LnlKjmsLQgPCBpbicneW91c3VpXCA7CivlpKrpmb3lhYkgPCB0YWl5b3Vrb3VcIDsKK+api+mgreS/nSA8IGt5b3V0b3Vob1wgOwor5Y+k5pu45biCIDwga29zaG9pY2hpXCA7CivlpKnnhLbloakgPCB0ZW4nJ25lbmVuXCA7Civmlq3nhrEgPCBkYW4nJ25ldHN1XCA7CivmmI7ml6UgPCBteW91bmljaGlcIDsKK+S4i+S4iyA8IHNoaW1vamltb1wgOwor5pW355+zIDwgc2hpa2lpc2hpXCA7Civnibnmkq4gPCB0b2t1c2F0c3VcIDsKK+WFrOWus+e9qiA8IGtvdWdhaXphaVwgOwor5rer5aOy5a6/IDwgaW5iYWl5YWRvXCA7Civotbfoq4vmlocgPCBraXNob3Vtb25cIDsKK+mhmOS6iyA8IG5lZ2FpZ290b1wgOwor56KB55uk57ieIDwgZ29iYW5qaW1hXCA7CivpoLvlh7ogPCBoaW5zaHV0c3VcIDsKK+e2suiiiyA8IGFtaWJ1a3Vyb1wgOwor5L+X5LiW6ZaTIDwgem9rdXNla2VuXCA7CivnlJjntI3osYYgPCBhbWFuYXR0b3VcIDsKK+S5vumFque0oCA8IGthbnJha3Vzb1wgOwor5Ya26YeR5a2mIDwgeWFraW5nYWt1XCA7CivlhpfplbfluqYgPCBqb3VjaG91ZG9cIDsKK+inkumAkCA8IGtha3VjaGlrdVwgOwor56eB5a626ZuGIDwgc2hpa2FzaHV1XCA7CivkuIPkuIkgPCBzaGljaGlzYW5cIDsKK+e0sOmdoiA8IGhvc29vbW90ZVwgOwor5biC6KGX5ZywIDwgc2hpZ2FpY2hpXCA7Civlj6/oqq3mgKcgPCBrYWRva3VzZWlcIDsKK+aYjuekuueahCA8IG1laWppdGVraVwgOwor5aSn5Zue6LuiIDwgZGFpa2FpdGVuXCA7CivlkYnmnI3lupcgPCBnb2Z1a3V0ZW5cIDsKK+S4reiPr+S4vCA8IGNodXVrYWRvblwgOwor5aSn6KW/5rSLIDwgdGFpc2VpeW91XCA7CivnkIbmg7PnmoQgPCByaXNvdXRla2lcIDsKK+Wmu+W4r+iAhSA8IHNhaXRhaXNoYVwgOwor5YWr5a6d6I+cIDwgaGFwcG91c2FpXCA7Civlj4zouYTnjbggPCBzb3V0ZWlqdXVcIDsKK+mbhue1kCA8IHNodXVrZXRzdVwgOwor5Zu95YWo5ZyfIDwga29rdXplbmRvXCA7CivkuozpgLLms5UgPCBuaXNoaW5ob3VcIDsKK+ilv+miqCA8IG5pc2hpa2F6ZVwgOwor6Ieq54S25aKXIDwgc2hpemVuem91XCA7CivmmYLku6PliocgPCBqaWRhaWdla2lcIDsKK+Wkj+eXqSA8IG5hdHN1eWFzZVwgOwor5re35oiQ6YWSIDwga29uc2Vpc2h1XCA7CivlhazlgI3mlbAgPCBrb3ViYWlzdXVcIDsKK+WHpuaWueeuiyA8IHNob2hvdXNlblwgOwor55mM57Sw6IOeIDwgZ2Fuc2FpYm91XCA7CivntK/muJvnqI4gPCBydWlnZW56ZWlcIDsKK+aJgOS9nOS6iyA8IHNob3NhZ290b1wgOwor54Sh6ZmQ5bCPIDwgbXVnZW5zaG91XCA7CivnianmjIcgPCBtb25vc2FzaGlcIDsKK+eqg+ebl+eKryA8IHNldHRvdWhhblwgOwor5LuV5omL5qCqIDwgc2hpdGVrYWJ1XCA7Civlj6PkuIvmiYsgPCBrdWNoaWJldGFcIDsKK+mHkeabnOaXpSA8IGtpbicneW91YmlcIDsKK+S9juawtOa6liA8IHRlaXN1aWp1blwgOwor6KO95L2c5omAIDwgc2Vpc2FrdWpvXCA7CivkvJ3lo7DnrqEgPCBkZW5zZWlrYW5cIDsKK+mHj+WtkOWMliA8IHJ5b3VzaGlrYVwgOwor5pif5b2xIDwgaG9zaGlrYWdlXCA7Civni6zlipsgPCBkb2t1cnlva3VcIDsKK+WlveS4gOWvviA8IGtvdWl0dHN1aVwgOwor6Kem6Ki6IDwgc2hva3VzaGluXCA7Civkuovli5nlsYAgPCBqaW11a3lva3VcIDsKK+WjuueavyA8IHRzdWJvemFyYVwgOwor5Ymv6by76IWUIDwgZnVrdWJpa3V1XCA7CivmtarosrvnmZYgPCByb3VoaWhla2lcIDsKK+e1puiyu+eUnyA8IGt5dXVoaXNlaVwgOwor55yM5Lq65LyaIDwga2Vuamlua2FpXCA7CivkuLvku7vogIUgPCBzaHVuaW5zaGFcIDsKK+WFrOeUqOaWhyA8IGtvdXlvdWJ1blwgOwor572q5Lq6IDwgdHN1bWliaXRvXCA7CivooYzmlL/ljLogPCBneW91c2Vpa3VcIDsKK+aOqOiWpueKtiA8IHN1aXNlbmpvdVwgOwor5Lit6Led6ZuiIDwgY2h1dWt5b3JpXCA7CivlhbHnlKPljJYgPCBreW91c2Fua2FcIDsKK+S8muacn+S4rSA8IGthaWtpY2h1dVwgOwor6YeO55CD5aC0IDwgeWFreXV1am91XCA7CivplpHlj6Tps6UgPCBrYW5rb2RvcmlcIDsKK+eUo+ikpeacnyA8IHNhbmpva3VraVwgOwor5Li75bCO5qipIDwgc2h1ZG91a2VuXCA7Civli5/ph5HnrrEgPCBib2tpbmJha29cIDsKK+ehrOWPo+iTiyA8IGtvdWtvdWdhaVwgOwor5pW354mpIDwgc2hpa2ltb25vXCA7Civlj7LoqJjmioQgPCBzaGlraXNob3VcIDsKK+W5tOm9ouWxpCA8IG5lbnJlaXNvdVwgOwor6aCt6aCC6YOoIDwgdG91Y2hvdWJ1XCA7Civpm6rnlLcgPCB5dWtpb3Rva29cIDsKK+aXqeWgtOexsyA8IGhheWFiYW1haVwgOwor5Y+j6Kqe6KizIDwga291Z295YWt1XCA7CivmsrnlnKfoqIggPCB5dWF0c3VrZWlcIDsKK+Wkj+eJqSA8IG5hdHN1bW9ub1wgOwor5LqM5q+b5L2cIDwgbmltb3VzYWt1XCA7CivmpJzns5boqIggPCBrZW50b3VrZWlcIDsKK+iqmOWwjuS9kyA8IHl1dWRvdXRhaVwgOwor55yf5Zub6KeSIDwgbWFzaGlrYWt1XCA7CivnlLPlkb3oqJggPCBzaGlubWVpa2lcIDsKK+iEguiCquWxpCA8IHNoaWJvdXNvdVwgOwor57Wx6KiIIDwgYmFyYXRzdWtpXCA7Civnianlk4HnqI4gPCBidXBwaW56ZWlcIDsKK+mzs+e/hemQmCA8IGhvdXNoaXRvdVwgOwor5aWz5pa5IDwgb24nJ25hZ2F0YVwgOwor5paw5qmLIDwgc2hpbmJhc2hpXCA7CivlsaTnqY3pm7IgPCBzb3VzZWtpdW5cIDsKK+enkuaZguioiCA8IGJ5b3Vkb2tlaVwgOwor54+K55Ga56SBIDwgc2FuZ29zaG91XCA7CivpgKPkvZPoqZ4gPCByZW50YWlzaGlcIDsKK+eGseeXhSA8IG5ldHN1YnlvdVwgOwor6Zu754axIDwgZGVuJyduZXRzdVwgOwor5pif5bGRIDwgaG9zaGlrdXp1XCA7CivlpKnmsJflhbflkIggPCB0ZW5raWd1YWlcIDsKK+WxgeeQhuWxiCA8IGhlcmlrdXRzdVwgOwor5b+X6aGY6ICFIDwgc2hpZ2Fuc2hhXCA7CivmtarkurrnlJ8gPCByb3VuaW5zZWlcIDsKK+S4jeWPr+mAhiA8IGZ1a2FneWFrdVwgOwor6ZqU57W2IDwga2FrdXpldHN1XCA7Civni6zku48gPCBkb2t1ZnV0c3VcIDsKK+Wkp+mYquW4giA8IG9vc2FrYXNoaVwgOwor5aa75a6kIDwgc2Fpc2hpdHN1XCA7CivmhJvoqq3mm7ggPCBhaWRva3VzaG9cIDsKK+WPr+WhkeeJqSA8IGthc29idXRzdVwgOwor5paw6YCg6KqeIDwgc2hpbnpvdWdvXCA7CivnianlubIgPCBtb25vaG9zaGlcIDsKK+WPjeWvvuiAhSA8IGhhbnRhaXNoYVwgOwor57Sw6YGTIDwgaG9zb21pY2hpXCA7Civpu5LnoILns5YgPCBrdXJvemF0b3VcIDsKK+eOhOexs+iMtiA8IGdlbm1haWNoYVwgOwor5ryU57m55rOVIDwgZW4nJ2VraWhvdVwgOwor6Ieo5aC05oSfIDwgcmluam91a2FuXCA7CivnhrHnkIMgPCBuZXRzdWt5dXVcIDsKK+WBj+ilv+miqCA8IGhlbnNlaWZ1dVwgOwor6aaZ5ZGz5paZIDwga291bWlyeW91XCA7CivmraPnlLLmnb8gPCBzZWlrYW5wYW5cIDsKK+WvqeitsOS8miA8IHNoaW5naWthaVwgOwor6Z2S5qOu55yMIDwgYW9tb3Jpa2VuXCA7CivkuI3mhJ/nl4cgPCBmdWthbnNob3VcIDsKK+e4nueJqSA8IHNoaW1hbW9ub1wgOwor56aB6KGb6ZqKIDwga2luJydlaXRhaVwgOwor5paw5p6VIDwgbmlpbWFrdXJhXCA7CivmlL7msLTou4ogPCBob3VzdWlzaGFcIDsKK+iAkOawtOaApyA8IHRhaXN1aXNlaVwgOwor546E6Zai55WqIDwgZ2Vua2FuYmFuXCA7CivliY3lpJznpa0gPCB6ZW4nJ3lhc2FpXCA7CivmnIjmoYLlhqAgPCBnZWtrZWlrYW5cIDsKK+e1puihgCA8IGt5dXVrZXRzdVwgOwor5LqM5YiA5rWBIDwgbml0b3VyeXV1XCA7CivmlrDmnK0gPCBzaGluc2F0c3VcIDsKK+aJgOacieaoqSA8IHNob3l1dWtlblwgOwor5Ya35YeN6LuKIDwgcmVpdG91c2hhXCA7CivmlrDmnIggPCBzaGluZ2V0c3VcIDsKK+adpeS8muiAhSA8IHJhaWthaXNoYVwgOwor5paw5puyIDwgc2hpbmt5b2t1XCA7CivkuIDlj6PlkIzpn7MgPCBpa2t1ZG91b25cIDsKK+S4iuetieWTgSA8IGpvdXRvdWhpblwgOwor6I2S55mC5rK7IDwgYXJhcnlvdWppXCA7Civmpb3oprPoq5YgPCByYWtrYW5yb25cIDsKK+WAtuiIjuWulyA8IGt1c2hhc2h1dVwgOwor54Sh6KiA5YqHIDwgbXVnb25nZWtpXCA7CivlhaXoi5HliLggPCBueXV1ZW5rZW5cIDsKK+iFsememOeCjiA8IGtlbnNob3VlblwgOwor5LiN5Y+v5oCd6K2wIDwgZnVrYXNoaWdpXCA7Civpq5jlubTogIUgPCBrb3VuZW5zaGFcIDsKK+ipsOeJqSA8IHRzdW1lbW9ub1wgOwor5o6i5rW354GvIDwgdGFua2FpdG91XCA7CivnhKHopo/lvosgPCBtdWtpcml0c3VcIDsKK+eDj+iynSA8IGthcmFzdWdhaVwgOwor6Z205bqVIDwga3V0c3V6b2tvXCA7CivlvaLlrrnoqZ4gPCBrZWl5b3VzaGlcIDsKK+WMu+S6i+S8nemBkyA8IGlqaWRlbmRvdVwgOwor5pen5bm0IDwgZnVydXRvc2hpXCA7Civlsqnpm7Lpm4AgPCBpd2FoaWJhcmlcIDsKK+aYn+WeiyA8IGhvc2hpZ2F0YVwgOwor5b6S56u26LWwIDwgdG9reW91c291XCA7CivkuI3miKbli50gPCBmdXNlbnNob3VcIDsKK+iHqueEtuS6uiA8IHNoaXplbmppblwgOwor5a625bqt55qEIDwga2F0ZWl0ZWtpXCA7Civpq5jmsJflnKcgPCBrb3VraWF0c3VcIDsKK+a7keeoveacrCA8IGtva2tlaWJvblwgOwor5aWz5a2Q5a+uIDwgam9zaGlyeW91XCA7CivlpLHmnJsgPCBzaGl0c3Vib3VcIDsKK+aUv+ayu+eahCA8IHNlaWppdGVraVwgOwor5LiK562J5YW1IDwgam91dG91aGVpXCA7CivnhLzntZAgPCBzaG91a2V0c3VcIDsKK+WOn+eov+e0mSA8IGdlbmtvdXNoaVwgOwor6Imy55y86Y+hIDwgaXJvbWVnYW5lXCA7Civmpb3orZzlj7AgPCBnYWt1ZnVkYWlcIDsKK+WGt+awtOWhiiA8IHJlaXN1aWthaVwgOwor5L+d6K236ImyIDwgaG9nb3Nob2t1XCA7CivlobXntJkgPCBjaGlyaWdhbWlcIDsKK+iJsuWPjuW3riA8IGlyb3NodXVzYVwgOwor576O6KGT5a62IDwgYmlqdXRzdWthXCA7Civlho3oqZXkvqEgPCBzYWloeW91a2FcIDsKK+WkseaYjiA8IHNoaXRzdW1laVwgOwor5rqW5YKZ5LitIDwganVuYmljaHV1XCA7CivlhYnlkIjmiJAgPCBrb3Vnb3VzZWlcIDsKK+aCquadoeS7tiA8IGFrdWpvdWtlblwgOwor5LiJ5oKq6LajIDwgc2FuYWt1c2h1XCA7CivkuLvnlKPlnLAgPCBzaHVzYW5jaGlcIDsKK+mfs+mDqOiomOWPtyA8IG9uYnVraWdvdVwgOwor5be756mN6ZuyIDwga2Vuc2VraXVuXCA7CivluIznoavphbggPCBraXJ5dXVzYW5cIDsKK+aWh+aciCA8IGZ1bWlkenVraVwgOwor6ISx56mA5qmfIDwgZGFra29rdWtpXCA7CivpvI7oq4fkvJogPCB0ZWlkYW5rYWlcIDsKK+ikh+acrOS9jSA8IGZ1a3Vob24nJ2lcIDsKK+S/l+i2o+WRsyA8IHpva3VzaHVtaVwgOwor57WC5q2i56ymIDwgc2h1dXNoaWZ1XCA7Civngq3os6ogPCB0YW5zaGl0c3VcIDsKK+eyvuijveWTgSA8IHNlaXNlaWhpblwgOwor5oay5YW16ZqKIDwga2VucGVpdGFpXCA7CivoqoXmrrogPCBjaHV1c2F0c3VcIDsKK+Wkp+aYlCA8IG9vbXVrYXNoaVwgOwor6YWN5YG26ICFIDwgaGFpZ3V1c2hhXCA7CivlhYXlvZPph5EgPCBqdXV0b3VraW5cIDsKK+a2iOeBq+agkyA8IHNob3VrYXNlblwgOwor5aWI6Imv5pmC5LujIDwgbmFyYWppZGFpXCA7Civlr4TnlZnogIUgPCBraXJ5dXVzaGFcIDsKK+eBsOelnualvSA8IGhhaWthZ3VyYVwgOwor6YeR5LiA5bCBIDwga2luJydpcHB1dVwgOwor5bqK6YGL5YuVIDwgeXVrYXVuZG91XCA7CivplbfpnbQgPCBuYWdhZ3V0c3VcIDsKK+WvhOeUn+iZqyA8IGtpc2VpY2h1dVwgOwor57O46LuKIDwgaXRvZ3VydW1hXCA7CivlpJzmmZIgPCB5b3phcmFzaGlcIDsKK+S4ieetieWIhiA8IHNhbnRvdWJ1blwgOwor5Zar5rC057eaIDwga2lzc3Vpc2VuXCA7CivlpI/mnI0gPCBuYXRzdWZ1a3VcIDsKK+aCqueOieWMliA8IGFrdWRhbWFrYVwgOwor6LaF57Ch5piTIDwgY2hvdWthbicnaVwgOwor6Z205aKoIDwga3V0c3V6dW1pXCA7Civoo7jppqwgPCBoYWRha2F1bWFcIDsKK+aIr+S9nOiAhSA8IGdlc2FrdXNoYVwgOwor5aa55YiGIDwgaW1vdXRvYnVuXCA7Civml6XloqggPCBuaWNoaWJva3VcIDsKK+aWsOW8jyA8IHNoaW5zaGlraVwgOwor6Z2S55Oi566qIDwgYW9ieW91dGFuXCA7CivmgqPogIXmp5ggPCBrYW5qYXNhbWFcIDsKK+S6lOWvuOmHmCA8IGdvc3Vua3VnaVwgOwor5Luu55m76KiYIDwga2FyaXRvdWtpXCA7CivlkIjlkIzou40gPCBnb3Vkb3VndW5cIDsKK+Wkj+aZgiA8IG5hdHN1ZG9raVwgOwor54K46KOCIDwgc2FrdXJldHN1XCA7CivnibnliKUgPCB0b2t1YmV0c3VcIDsKK+ikh+mbkSA8IGZ1a3V6YXRzdVwgOwor6Z205Z6LIDwga3V0c3VnYXRhXCA7CivnspLpo58gPCByeXV1c2hva3VcIDsKK+mdnuePvualrSA8IGhpZ2VuZ3lvdVwgOwor5Yuk5Yq06ICFIDwga2lucm91c2hhXCA7Civlm7rlrprplbcgPCBrb3RlaWNob3VcIDsKK+auuuiPjOWJpCA8IHNha2tpbnphaVwgOwor57WQ6IacIDwga2V0c3VtYWt1XCA7CivmtIvmnI3lsYsgPCB5b3VmdWt1eWFcIDsKK+i1t+eIhuWJpCA8IGtpYmFrdXphaVwgOwor6KGo56S654GvIDwgaHlvdWppdG91XCA7Civkvr/liKnluLMgPCBiZW5yaWNob3VcIDsKK+WPluadkOePrSA8IHNodXphaWhhblwgOwor6ISC6IKq5L2TIDwgc2hpYm91dGFpXCA7Civpg7Xkvr/lsYsgPCB5dXViaW4nJ3lhXCA7CivnuJ7mn4QgPCBzaGltYWdhcmFcIDsKK+S4rei+nuWFuCA8IGNodXVqaXRlblwgOwor5rSX6Z2i5Y+wIDwgc2VubWVuZGFpXCA7CivlpLHmgYsgPCBzaGl0c3VyZW5cIDsKK+WGheijj+mbmyA8IGRhaXJpYmluYVwgOwor5YWo5LqM6YeNIDwgemVuJyduaWp1dVwgOwor5rq26Kej5oCnIDwgeW91a2Fpc2VpXCA7CivlpLHlv7UgPCBzaGl0c3VuZW5cIDsKK+mbqOabhyA8IGFtYWd1bW9yaVwgOwor5pW05pWw6KuWIDwgc2Vpc3V1cm9uXCA7CivoqZXmsbogPCBoeW91a2V0c3VcIDsKK+awkeekvuWFmiA8IG1pbnNoYXRvdVwgOwor5LyB55S75pu4IDwga2lrYWt1c2hvXCA7CivnlJ/lnLDnjYQgPCBpa2lqaWdva3VcIDsKK+e0lOexs+mFkiA8IGp1bm1haXNodVwgOwor5Zue6YGK6a2aIDwga2FpeXV1Z3lvXCA7CivnhKHplqLlv4MgPCBtdWthbnNoaW5cIDsKK+iAs+m8u+WSveWWiSA8IGppYmlpbmtvdVwgOwor5aWz5Z2CIDwgb24nJ25hemFrYVwgOwor57aa55m6IDwgem9rdWhhdHN1XCA7Civlj4vkurrplpMgPCB5dXVqaW5rYW5cIDsKK+acieaWkOmWoyA8IHl1dWhpa2FrdVwgOwor6LKp5aOy5bqXIDwgaGFuYmFpdGVuXCA7Civpm5HmoKogPCB6YXRzdWthYnVcIDsKK+W/l+acm+agoSA8IHNoaWJvdWtvdVwgOwor5aWJ6L+O6ZaAIDwgaG91Z2VpbW9uXCA7CivniZvliLogPCBneXV1c2FzaGlcIDsKK+Wft+iRlyA8IHNodXVjaGFrdVwgOwor6Z2i5Lya5Lq6IDwgbWVua2FpbmluXCA7CivkuIDnrofmnIggPCBpa2thZ2V0c3VcIDsKK+mAgeawtOeuoSA8IHNvdXN1aWthblwgOwor57OW6LOqIDwgdG91c2hpdHN1XCA7Civlhrflh43oiLkgPCByZWl0b3VzZW5cIDsKK+W5tOmFjeiAhSA8IG5lbnBhaXNoYVwgOwor5omL5pWw5paZIDwgdGVzdXVyeW91XCA7Civpm6LprYLnl4UgPCByaWtvbmJ5b3VcIDsKK+epuuawl+axmuafkyA8IGt1dWtpb3NlblwgOwor54mH5Y+jIDwga2F0YWt1Y2hpXCA7CivmsLTkuK3oirEgPCBzdWljaHV1a2FcIDsKK+WLleWQjeipniA8IGRvdW1laXNoaVwgOwor57Sw6IWwIDwgaG9zb2dvc2hpXCA7Civng4/luL3lrZDosp0gPCBlYm9zaGlnYWlcIDsKK+m7hOmHkeiJsiA8IGtvZ2FuZWlyb1wgOwor5LqM5YWD55qEIDwgbmlnZW50ZWtpXCA7CivnuJ7moJfpvKAgPCBzaGltYXJpc3VcIDsKK+Wor+alveWgtCA8IGdvcmFrdWpvdVwgOwor6YGK6Kan5ZywIDwgeXV1cmFuY2hpXCA7CivmnKzlm6DlnYogPCBob24nJ2luYm91XCA7CivlhbHmoITlnI8gPCBreW91ZWlrZW5cIDsKK+ebuOWvvuatuyA8IGFpdGFpamluaVwgOwor5Zu96Ieq5oWiIDwga3VuaWppbWFuXCA7Civph43lpKfoppYgPCBqdXVkYWlzaGlcIDsKK+S8gealreWGhSA8IGtpZ3lvdW5haVwgOwor6ZuG5pytIDwgc2h1dXNhdHN1XCA7CivlkIznqpPkvJogPCBkb3Vzb3VrYWlcIDsKK+azleiTruiNiSA8IGhvdXJlbnNvdVwgOwor5rW35aSW54mIIDwga2FpZ2FpYmFuXCA7CivmiYfnirblnLAgPCBzZW5qb3VjaGlcIDsKK+aXpeWHuiA8IG5pc3NodXRzdVwgOwor5omT5pKD5oimIDwgZGFnZWtpc2VuXCA7CivmnInosaHnhKHosaEgPCB1em91bXV6b3VcIDsKK+mAj+WGmee0mSA8IHRvdXNoYXNoaVwgOwor5Lq65paH5Y+yIDwgamluYnVuc2hpXCA7CivmjIflrprliLggPCBzaGl0ZWlrZW5cIDsKK+mmmeawtOeTtiA8IGtvdXN1aWJpblwgOwor54ax5biv55eFIDwgbmV0YWlieW91XCA7CivkvJ3oqJjniakgPCBkZW5raW1vbm9cIDsKK+ioiOmHj+WZqCA8IGtlaXJ5b3VraVwgOwor6KOc5YSf6YeRIDwgaG9zaG91a2luXCA7Civou73niq/nvaogPCBrZWloYW56YWlcIDsKK+WdqumHjyA8IHRzdWJvcnlvdVwgOwor5ZCI5oay5oCnIDwgZ291a2Vuc2VpXCA7CivlnLDpjq7npa0gPCBqaWNoaW5zYWlcIDsKK+S4u+S9k+aApyA8IHNodXRhaXNlaVwgOwor57Sg57KS5a2QIDwgc29yeXV1c2hpXCA7Civonb/lnLDnjYQgPCBoYWVqaWdva3VcIDsKK+Wkp+eBveWusyA8IGRhaXNhaWdhaVwgOwor5aW05YenIDwgeWFra29kYWtvXCA7Civmpb3lpKnlrrYgPCByYWt1dGVua2FcIDsKK+eQhuaAp+eahCA8IHJpc2VpdGVraVwgOwor57a/5rK5IDwgd2F0YWFidXJhXCA7CivnhLbnhLYgPCBzaGlrYWppa2FcIDsKK+m8k+esm+maiiA8IGtvdGVraXRhaVwgOwor6LW36Ki054y25LqIIDwga2lzb3l1dXlvXCA7Civlr5LmmpboqIggPCBrYW5kYW5rZWlcIDsKK+iKseeyieeXhyA8IGthZnVuc2hvdVwgOwor5Lq654K655qEIDwgamluJydpdGVraVwgOwor5LyK5Yui56We5a6uIDwgaXNlamluZ3V1XCA7Civlj5fpoJjogIUgPCBqdXJ5b3VzaGFcIDsKK+S8geeUu+aApyA8IGtpa2FrdXNlaVwgOwor5YaF6ZyA5Z6LIDwgbmFpanVnYXRhXCA7CivlsLjkvY3ntKDppJAgPCBzaGlpc29zYW5cIDsKK+eEpueGsSA8IHNob3VuZXRzdVwgOwor5Y6f5oiQ5bKpIDwgZ2Vuc2VpZ2FuXCA7CivooajnpLrmnb8gPCBoeW91amliYW5cIDsKK+Wkj+WxsSA8IG5hdHN1eWFtYVwgOwor54iq5YiHIDwgdHN1bWVraXJpXCA7CivmsLjkuYXmra8gPCBlaWt5dXVzaGlcIDsKK+WNg+ekvuacrSA8IHNlbmphZnVkYVwgOwor6I+p5o+Q5b+DIDwgYm9kYWlzaGluXCA7CivmlL/miYAgPCBtYW5kb2tvcm9cIDsKK+aVmeW8jyA8IGt5b3VzaGlraVwgOwor6KGo56S65pu4IDwgaHlvdWppc2hvXCA7CivmlL7msLTnrqEgPCBob3VzdWlrYW5cIDsKK+WPjOWtkOiRiSA8IHNvdXNoaXlvdVwgOwor5oCn6Lui5o+bIDwgc2VpdGVua2FuXCA7CivovLjpgIHph48gPCB5dXNvdXJ5b3VcIDsKK+aJgOacieWcsCA8IHNob3l1dWNoaVwgOwor6byT5omL6ZW3IDwga29zaHVjaG91XCA7CivniKrlhYggPCB0c3VtYXNha2lcIDsKK+e3j+acrOW6lyA8IHNvdWhvbnRlblwgOwor5YWD5rCX6ICFIDwgZ2Vua2ltb25vXCA7Civku6PlvIHogIUgPCBkYWliZW5zaGFcIDsKK+mHjuWkqemiqOWRgiA8IG5vdGVuYnVyb1wgOwor55S65Yy76ICFIDwgbWFjaGlpc2hhXCA7Civoo73mnZDmiYAgPCBzZWl6YWlzaG9cIDsKK+Whqea8rCA8IHNoaW9kenVrZVwgOwor5Y+N5Lmx6LuNIDwgaGFucmFuZ3VuXCA7Civnt4/kurrlj6MgPCBzb3VqaW5rb3VcIDsKK+W6l+S7leiIniA8IG1pc2VqaW1haVwgOwor5Lit5L+d6ICFIDwgY2h1dWhvc2hhXCA7CivlpZTlh7ogPCBob25zaHV0c3VcIDsKK+eri+azleiAhSA8IHJpcHBvdXNoYVwgOwor6I2J55u45pKyIDwga3VzYXp1bW91XCA7CivkuojlgpnpjKggPCB5b2JpaWthcmlcIDsKK+malOaciCA8IGtha3VnZXRzdVwgOwor5q2T6YCB5LyaIDwga2Fuc291a2FpXCA7Civlj4znv4XpoZ4gPCBzb3VzaGlydWlcIDsKK+e0mee0sOW3pSA8IGthbWl6YWlrdVwgOwor5bGx5rC06I2YIDwgc2Fuc3Vpc291XCA7CivooajmspnmsbAgPCBvbW90ZXphdGFcIDsKK+WUkOeNheWtkCA8IGthcmFqaXNoaVwgOwor5bmz5ZKM5Zu9IDwgaGVpd2Frb2t1XCA7CivkvY7msJflnKcgPCB0ZWlraWF0c3VcIDsKK+S9nOalreeUqCA8IHNhZ3lvdXlvdVwgOwor5pKD55m6IDwgZ2VraWhhdHN1XCA7Civln7fnrYYgPCBzaGlwcGl0c3VcIDsKK+awtOWus+WcsCA8IHN1aWdhaWNoaVwgOwor57eP5pys5bGxIDwgc291aG9uemFuXCA7CivmvJToqqzlrrYgPCBlbnpldHN1a2FcIDsKK+ebsuiFuOeCjiA8IG1vdWNob3VlblwgOwor5pal5YqbIDwgc2VraXJ5b2t1XCA7CivntYLnmbogPCBzaHV1aGF0c3VcIDsKK+mBo+WUkOS9vyA8IGtlbnRvdXNoaVwgOwor5Z2C6YGTIDwgc2FrYW1pY2hpXCA7CivkvZzmpa3nj60gPCBzYWd5b3VoYW5cIDsKK+a0u+aAp+eCrSA8IGthc3NlaXRhblwgOwor5pyA5bCP5YyWIDwgc2Fpc2hvdWthXCA7CivkuZfpmY3loLQgPCBqb3Vrb3Vqb3VcIDsKK+S/l+S4lueVjCA8IHpva3VzZWthaVwgOwor5q+b57mU54mpIDwga2Vvcmltb25vXCA7Civlv5fpoZjmm7ggPCBzaGlnYW5zaG9cIDsKK+S4jeatu+mzpSA8IGZ1c2hpY2hvdVwgOwor5oKy6Kaz55qEIDwgaGlrYW50ZWtpXCA7CivmkrLmu4UgPCBib2t1bWV0c3VcIDsKK+aIkOWKn+iAhSA8IHNlaWtvdXNoYVwgOwor55yL6K235a2mIDwga2FuZ29nYWt1XCA7CivkuIrlkJHnt5ogPCBqb3Vrb3VzZW5cIDsKK+a2iOeCjuWJpCA8IHNob3VlbnphaVwgOwor5YWs5LyR5pelIDwga291a3l1dWJpXCA7Civnt4/nvbfmpa0gPCBzb3VoaWd5b3VcIDsKK+WGjeaKleizhyA8IHNhaXRvdXNoaVwgOwor5q2M5YqH5aC0IDwga2FnZWtpam91XCA7CivmtYTmsLTloLQgPCBqb3VzdWlqb3VcIDsKK+mbquWlsyA8IHl1a2lvbicnbmFcIDsKK+ips+WvhiA8IHNob3VtaXRzdVwgOwor5rC06ICV5rOVIDwgc3Vpa291aG91XCA7CivlpKfmvJTnv5IgPCBkYWllbnNodXVcIDsKK+eEoeeQhueEoeS9kyA8IG11cmltdXRhaVwgOwor5a6f5ris5ZuzIDwgamlzc29rdXp1XCA7CivohqjlvLXluqYgPCBib3VjaG91ZG9cIDsKK+aYoOWGmeW5lSA8IGVpc2hhbWFrdVwgOwor5LiK5rC06YGTIDwgam91c3VpZG91XCA7CivlhajkvY/msJEgPCB6ZW5qdXVtaW5cIDsKK+a1hOawtOWcsCA8IGpvdXN1aWNoaVwgOwor6ZuR5a2mIDwgemF0c3VnYWt1XCA7CivlnYfos6ogPCBraW5zaGl0c3VcIDsKK+eUt+aAp+eUqCA8IGRhbnNlaXlvdVwgOwor5aW95aWH5b+DIDwga291a2lzaGluXCA7CivogonkvZPnvo4gPCBuaWt1dGFpYmlcIDsKK+WbveWutueahCA8IGtva2thdGVraVwgOwor54qg54my55qEIDwgZ2lzZWl0ZWtpXCA7CivpgKPlrZDnqpMgPCByZW5qaW1hZG9cIDsKK+ebuOWvvuaApyA8IHNvdXRhaXNlaVwgOwor54OP55OcIDwga2FyYXN1dXJpXCA7CivplqLlv4PkuosgPCBrYW5zaGluamlcIDsKK+WMl+aWl+aYnyA8IGhva3V0b3NlaVwgOwor5pys5oug5ZywIDwgaG9ua3lvY2hpXCA7CivoiJ7ouI/nl4UgPCBidXRvdWJ5b3VcIDsKK+WGheWkluS6uiA8IG5haWdhaWppblwgOwor5pKy5q66IDwgYm9rdXNhdHN1XCA7CivmkZjnmbogPCB0ZWtpaGF0c3VcIDsKK+S4i+eoruWlsyA8IGdlc3VvbicnbmFcIDsKK+i1pOmbu+i7iiA8IGFrYWRlbnNoYVwgOwor5aSP5ZCRIDwgbmF0c3VtdWtpXCA7Civnspjmnb/lsqkgPCBuZW5iYW5nYW5cIDsKK+S6i+alreiAhSA8IGppZ3lvdXNoYVwgOwor5q2T6L+O5LyaIDwga2FuZ2Vpa2FpXCA7CivoqJflhZDmiYAgPCB0YWt1amlzaG9cIDsKK+awtOaZguioiCA8IG1penVkb2tlaVwgOwor5o2o6YmiIDwgc3V0ZWJhY2hpXCA7Civnm7LlsI7niqwgPCBtb3Vkb3VrZW5cIDsKK+iyqeWjsuS6uiA8IGhhbmJhaW5pblwgOwor6a+QIDwgc3ViYXNoaXJpXCA7Civkurrlm73oqJggPCBqaW5rb2t1a2lcIDsKK+aZruWPiueJiCA8IGZ1a3l1dWJhblwgOwor6a6XIDwga29ub3NoaXJvXCA7CivljYrpg6jml48gPCBoYW5idXpva3VcIDsKK+mjm+mBk+WFtyA8IHRvYmlkb3VndVwgOwor5Lq66ZaT55WMIDwgbmluZ2Vua2FpXCA7CivkubPmr43ou4ogPCB1YmFndXJ1bWFcIDsKK+aDqOatu+S9kyA8IHphbnNoaXRhaVwgOwor5aCF54mpIDwga2F0YWJ1dHN1XCA7CivpgYvmkKzkurogPCB1bnBhbicnbmluXCA7CivmipfnlJ/liaQgPCBrb3VzZWl6YWlcIDsKK+WbvemJhCA8IGtva3V0ZXRzdVwgOwor6KeS5qi9IDwgdHN1bm9kYXJ1XCA7CivmkoPmu4UgPCBnZWtpbWV0c3VcIDsKK+S4lui/t+iogCA8IHlvbWFpZ290b1wgOwor5Lyd6KiA5p2/IDwgZGVuZ29uYmFuXCA7Civoh6rnq4voqp4gPCBqaXJpdHN1Z29cIDsKK+ezp+enoyA8IHJ5b3VtYXRzdVwgOwor54ax5biv5p6XIDwgbmV0dGFpcmluXCA7CivmsLjkuYXmgKcgPCBlaWt5dXVzZWlcIDsKK+ijveacrOWxiyA8IHNlaWhvbicneWFcIDsKK+axvei7iuizgyA8IGtpc2hhY2hpblwgOwor6Zqj5a6kIDwgcmluc2hpdHN1XCA7CivnpoHoo4/mp5ggPCBraW5yaXNhbWFcIDsKK+aFo+eUqOWPpSA8IGthbicneW91a3VcIDsKK+ims+WFieWcsCA8IGthbmtvdWNoaVwgOwor5Lya6KaL6ICFIDwga2Fpa2Vuc2hhXCA7CivmnbHlpKnntIUgPCB0b3V0ZW5rb3VcIDsKK+ims+WFieWboyA8IGthbmtvdWRhblwgOwor5oqA5ben55qEIDwgZ2lrb3V0ZWtpXCA7Civmpb3pmqDlsYUgPCByYWt1aW5reW9cIDsKK+mrmOmAn+W6piA8IGtvdXNva3Vkb1wgOwor56eB55Sf5a2QIDwgc2hpc2Vpc2hpXCA7Civml6XoqJjluLMgPCBuaWtraWNob3VcIDsKK+aUv+ayu+WtpiA8IHNlaWppZ2FrdVwgOwor5aSW5LuYIDwgc290b2R6dWtlXCA7CivmsLTnkIblraYgPCBzdWlyaWdha3VcIDsKK+avjeWtkOWvriA8IGJvc2hpcnlvdVwgOwor552A5b+D5ZywIDwga2lnb2tvY2hpXCA7CivlpI/kvZwgPCBuYXRzdXNha3VcIDsKK+aIkuWOs+S7pCA8IGthaWdlbnJlaVwgOwor5oqV5LiO6YePIDwgdG91eW9yeW91XCA7CivnhaflsLogPCBzaG91c2hha3VcIDsKK+aEj+awl+i7kumrmCA8IGlraWtlbmtvdVwgOwor6Zuq5YWOIDwgeXVraXVzYWdpXCA7Civlk7rkubPpoZ4gPCBob255dXVydWlcIDsKK+Wkp+idmeidoCA8IG9va291bW9yaVwgOwor54Sh5oqV56WoIDwgbXV0b3VoeW91XCA7CivmjIfkuoblm7MgPCBzaGlyeW91enVcIDsKK+mBqeW/nOaApyA8IHRla2lvdXNlaVwgOwor6KWy54i1IDwgc2h1dXNoYWt1XCA7CivmvKvmiY3luKsgPCBtYW56YWlzaGlcIDsKK+S6i+alreeojiA8IGppZ3lvdXplaVwgOwor5Y+O5a655omAIDwgc2h1dXlvdWpvXCA7Civlm73nkr3mm7ggPCBrb2t1amlzaG9cIDsKK+aEn+immuWZqCA8IGthbmtha3VraVwgOwor5pWZ6IKy6LK7IDwga3lvdWlrdWhpXCA7Civlm7rlrprntaYgPCBrb3RlaWt5dXVcIDsKK+Wxleimp+S8miA8IHRlbnJhbmthaVwgOwor5Lqk5Luj5Yi2IDwga291dGFpc2VpXCA7CivpmJ0gPCBrb3phdG9oZW5cIDsKK+imhua7hSA8IGZ1a3VtZXRzdVwgOwor5beh6KaW6ImHIDwganVuc2hpdGVpXCA7Civlt6HoppboiLkgPCBqdW5zaGlzZW5cIDsKK+axjumWouaVsCA8IGhhbmthbnN1dVwgOwor5YWo5Lq655SfIDwgemVuamluc2VpXCA7Civmlq3lvLfluqYgPCBkYW5reW91ZG9cIDsKK+WHpuWls+S9nCA8IHNob2pvc2FrdVwgOwor5YCL5oCn55qEIDwga29zZWl0ZWtpXCA7Civloqjlo7cgPCBzdW1pdHN1Ym9cIDsKK+WFqOmfs+majiA8IHplbicnb25rYWlcIDsKK+iqheS8kCA8IGNodXViYXRzdVwgOwor5Y+N5Lmx6ICFIDwgaGFucmFuc2hhXCA7Civou73pn7Pmpb0gPCBrZWlvbmdha3VcIDsKK+WbnuW+qeacnyA8IGthaWZ1a3VraVwgOwor5LiN5ZCI5qC8IDwgZnVnb3VrYWt1XCA7Civlkajms6LoqIggPCBzaHV1aGFrZWlcIDsKK+S4jeWPr+asoCA8IGZ1a2FrZXRzdVwgOwor5pS+5Ye6IDwgaG91c2h1dHN1XCA7CivntYLmpbUgPCBzaHV1a3lva3VcIDsKK+ehrOWMlueXhyA8IGtvdWthc2hvdVwgOwor6YCG5Yq55p6cIDwgZ3lha2tvdWthXCA7Civoo7jnt5ogPCBoYWRha2FzZW5cIDsKK+imhuayoSA8IGZ1a3Vib3RzdVwgOwor5LiA562J5Zu9IDwgaXR0b3Vrb2t1XCA7CivlhajlsIHlnLAgPCB6ZW5ob3VjaGlcIDsKK+WIhumFjemHkSA8IGJ1bnBhaWtpblwgOwor6Kqe5bC+5aSJ5YyWIDwgZ29iaWhlbmthXCA7Civlm57pgYroiLkgPCBrYWl5dXVzZW5cIDsKK+WFrOS8muWggiA8IGtvdWthaWRvdVwgOwor54Sh6KGo5oOFIDwgbXVoeW91am91XCA7CivnhanlnosgPCB1cnVzYWdhdGFcIDsKK+awtOmkg+WtkCA8IHN1aWd5b3V6YVwgOwor6KmU5YuFIDwgc2hvdWNob2t1XCA7CivpoqjlnJ/nl4UgPCBmdXVkb2J5b3VcIDsKK+aUr+WHuiA8IHNoaXNodXRzdVwgOwor6YCD6YG/55qEIDwgdG91aGl0ZWtpXCA7Civlj6TmloflraYgPCBrb2J1bmdha3VcIDsKK+WEquetieeUnyA8IHl1dXRvdXNlaVwgOwor57ai5a+GIDwgY2h1dW1pdHN1XCA7Civlm7rlrprnpaggPCBrb3RlaWh5b3VcIDsKK+WvvuWQkei7iiA8IHRhaWtvdXNoYVwgOwor57WE5puyIDwga3VtaWt5b2t1XCA7Civkuovmpa3nlYwgPCBqaWd5b3VrYWlcIDsKK+aJueWIpOeahCA8IGhpaGFudGVraVwgOwor5aSp5Zyw5Lq6IDwgdGVuY2hpamluXCA7CivooYDntbHmm7ggPCBrZXR0b3VzaG9cIDsKK+S4reS6jOmajiA8IGNodXVuaWthaVwgOwor57aZ5a6kIDwga2Vpc2hpdHN1XCA7Civlm73ooaggPCBrdW5pb21vdGVcIDsKK+WxseiRoeiQhCA8IHlhbWFidWRvdVwgOwor6buE6YGT6Z2iIDwga291ZG91bWVuXCA7Civlj5fpm6PpgLEgPCBqdW5hbnNodXVcIDsKK+WwiuWOs+atuyA8IHNvbmdlbnNoaVwgOwor6ICD5Y+k5a2mIDwga291a29nYWt1XCA7Civkv53pmbroqLwgPCBob2tlbnNob3VcIDsKK+mrmOWIhuWtkCA8IGtvdWJ1bnNoaVwgOwor5Yal5Yqg6YeRIDwgbXlvdWdha2luXCA7CivlhoXlnLDnsbMgPCBuYWljaGltYWlcIDsKK+aer+iRieWJpCA8IGthcmVoYXphaVwgOwor57eg5YiHIDwgc2hpbWVraXJpXCA7Civmi5vlvoXml6UgPCBzaG91dGFpYmlcIDsKK+iqk+mhmOaoqSA8IHNlaWdhbmtlblwgOwor5oSb5Zu96ICFIDwgYWlrb2t1c2hhXCA7CivoqLTpoZjkurogPCBzb2dhbicnbmluXCA7CivpoJjkuovppKggPCByeW91amlrYW5cIDsKK+S4u+eKr+iAhSA8IHNodWhhbnNoYVwgOwor6Ziy6K235aOBIDwgYm91Z29oZWtpXCA7Civos4fph5HmupAgPCBzaGlraW5nZW5cIDsKK+m8oOWSrOeXhyA8IHNva291c2hvdVwgOwor5LiJ6YeN55uXIDwgc2FuanV1dG91XCA7CivpgKPkvZPlvaIgPCByZW50YWlrZWlcIDsKK+Wcn+iJsiA8IHRzdWNoaWlyb1wgOwor54++5q616ZqOIDwgZ2VuZGFua2FpXCA7CivmiJDlubTogIUgPCBzZWluZW5zaGFcIDsKK+mHkeino+emgSA8IGtpbmthaWtpblwgOwor57695a2Q56qBIDwgaGFuZXRzdWtpXCA7CivmtJfmv6/nsokgPCBzZW50YWt1a29cIDsKK+WFieWMluWtpiA8IGtvdWthZ2FrdVwgOwor6L6y5a2m6YOoIDwgbm91Z2FrdWJ1XCA7CivkuLvku7vliLYgPCBzaHVuaW5zZWlcIDsKK+iInui4j+acjSA8IGJ1dG91ZnVrdVwgOwor57WM6aiT6KuWIDwga2Vpa2Vucm9uXCA7CivntYzpqJPoq4cgPCBrZWlrZW5kYW5cIDsKK+aOpee2miA8IHNldHN1em9rdVwgOwor5pOm6YGO5YK3IDwgc2Fra2FzaG91XCA7CivnsbPnspIgPCBrb21ldHN1YnVcIDsKK+ezn+a8rCA8IGthc3VkenVrZVwgOwor5Zub6YeN5aWPIDwgc2hpanV1c291XCA7CivouJ0gPCBrdXJ1YnVzaGlcIDsKK+ebuOWvvuWApCA8IHNvdXRhaWNoaVwgOwor5q+N5a2Q5YWxIDwgYm9zaGl0b21vXCA7CivpiYTngavlt7sgPCB0ZWtrYW1ha2lcIDsKK+iLseS9nOaWhyA8IGVpc2FrdWJ1blwgOwor5oim6LuK5YW1IDwgc2Vuc2hhaGVpXCA7Civlho3mipXnqL8gPCBzYWl0b3Vrb3VcIDsKK+aVmemkiumDqCA8IGt5b3V5b3VidVwgOwor56uL5rOV5qipIDwgcmlwcG91a2VuXCA7CivlpqXljZTngrkgPCBkYWt5b3V0ZW5cIDsKK+mbsuS7meWysyA8IHVuemVuZGFrZVwgOwor5Y+X6aCY5pu4IDwganVyeW91c2hvXCA7CivkuI3mtLvljJYgPCBmdWthdHN1a2FcIDsKK+aWh+eroOiqniA8IGJ1bnNob3Vnb1wgOwor6Z2S5L+h5Y+3IDwgYW9zaGluZ291XCA7CivmmYLoqIjnmr8gPCB0b2tlaXphcmFcIDsKK+W5veWGpeeVjCA8IHl1dW1laWthaVwgOwor5Z+36KGM5ZCPIDwgc2hpa2tvdXJpXCA7CivnrYnpq5jnt5ogPCB0b3Vrb3VzZW5cIDsKK+e1nummluWPsCA8IGtvdXNodWRhaVwgOwor56C05pOm6Z+zIDwgaGFzYXRzdW9uXCA7CivpgIHlj5fkv6EgPCBzb3VqdXNoaW5cIDsKK+aSq+WtkCA8IG5hZGVzaGlrb1wgOwor5LiA56We6KuWIDwgaXNzaGlucm9uXCA7CivnnYDpgZPmpb0gPCBraWRvdXJha3VcIDsKK+aYjuW+jOW5tCA8IG15b3Vnb25lblwgOwor5rOV5YuZ55yBIDwgaG91bXVzaG91XCA7CivphbXntKDlraYgPCBrb3Vzb2dha3VcIDsKK+ezoOayuSA8IG51a2FhYnVyYVwgOwor6ZW354mpIDwgY2hvdWJ1dHN1XCA7Civlm7Plg4/lraYgPCB6dXpvdWdha3VcIDsKK+WlieWKoOW4syA8IGhvdWdhY2hvdVwgOwor5oSf5ZiG6KmeIDwga2FudGFuc2hpXCA7CivliY3lo7LliLggPCBtYWV1cmlrZW5cIDsKK+imquW/gyA8IG95YWdva29yb1wgOwor6KGG6KqsIDwgc2h1dXNldHN1XCA7Civlv5fpoZjlhbUgPCBzaGlnYW5oZWlcIDsKK+WPjeWwhOWFiSA8IGhhbnNoYWtvdVwgOwor55qu57Sw5belIDwga2F3YXphaWt1XCA7CivlvqnmsLTlmaggPCBmdWt1c3Vpa2lcIDsKK+mWoumAo+aApyA8IGthbnJlbnNlaVwgOwor57Wx6Kqe5a2mIDwgdG91Z29nYWt1XCA7CivntbblppkgPCB6ZXRzdW15b3VcIDsKK+ism+a8lOaWmSA8IGtvdWVucnlvdVwgOwor5pWs6ICB5LyaIDwga2Vpcm91a2FpXCA7CivmmYLplpPou7ggPCBqaWthbmppa3VcIDsKK+WPjeWvvuWFmiA8IGhhbnRhaXRvdVwgOwor5pCt5LmX6ICFIDwgdG91am91c2hhXCA7CivkuZ3liIbkuZ3ljpggPCBrdWJ1a3VyaW5cIDsKK+ezuOahnCA8IGl0b3pha3VyYVwgOwor56S+5rCR5YWaIDwgc2hhbWludG91XCA7CivntZ7pppbliJEgPCBrb3VzaHVrZWlcIDsKK+WJteW7uuiAhSA8IHNvdWtlbnNoYVwgOwor5pyA5aSn6ZmQIDwgc2FpZGFpZ2VuXCA7CivpmbPliJcgPCBjaGlucmV0c3VcIDsKK+ezuOafsyA8IGl0b3lhbmFnaVwgOwor5qWT5a2Q6aaZIDwgZnV1c2hpa291XCA7Civmt7fmiJDlsqkgPCBrb25zZWlnYW5cIDsKK+Wft+aLlyA8IHNoaXRzdXlvdVwgOwor57SZ57KY5ZyfIDwga2FtaW5lbmRvXCA7CivmnaHku7bmlocgPCBqb3VrZW5idW5cIDsKK+aEj+itmOS9kyA8IGlzaGlraXRhaVwgOwor56eB5LyB5qWtIDwgc2hpa2lneW91XCA7CivnqbrmqKHmp5ggPCBzb3JhbW95b3VcIDsKK+WFrOacieaelyA8IGtvdXl1dXJpblwgOwor5bGx5rC05qW8IDwgc2Fuc3Vpcm91XCA7Civoo4MgPCBrYW1pc2hpbW9cIDsKK+WvhOeVmeWcsCA8IGtpcnl1dWNoaVwgOwor5pat5Ymb5oCnIDwgZGFuZ291c2VpXCA7CivnqbrlhYPmsJcgPCBrYXJhZ2Vua2lcIDsKK+ihpCA8IGtvcm9tb2hlblwgOwor5omT566X55qEIDwgZGFzYW50ZWtpXCA7CivpgIDolLXlk4EgPCB0YWl6b3VoaW5cIDsKK+imquWvhiA8IHNoaW5taXRzdVwgOwor5b2x6Z+/5ZyPIDwgZWlreW91a2VuXCA7CivnnJ/lloTnvo4gPCBzaGluemVuYmlcIDsKK+aJi+ihk+ihoyA8IHNodWp1dHN1aVwgOwor5Lq66ZaT5oSbIDwgbmluZ2VuJydhaVwgOwor55CG55+l55qEIDwgcmljaGl0ZWtpXCA7CivnrZLpn7MgPCB0c3V0c3VvdG9cIDsKK+eQpeePgOiJsiA8IGtvaGFrdWlyb1wgOwor5b6h6JSt5qeYIDwgb2thZ2VzYW1hXCA7Civmr5vntLDnrqEgPCBtb3VzYWlrYW5cIDsKK+e0i+aJgCA8IG1vbmRva29yb1wgOwor6KKL57ayIDwgZnVrdXJvYW1pXCA7Civnmb3og6HpursgPCBzaGlyb2dvbWFcIDsKK+iHquW3seimj+WItiA8IGppa29raXNlaVwgOwor5Li75Lq65YWsIDwgc2h1amlua291XCA7CivlkIzlp5Tlk6HkvJogPCBkb3VpaW5rYWlcIDsKK+S6uumWk+aApyA8IG5pbmdlbnNlaVwgOwor5Y2Y5a2U6aGeIDwgdGFua291cnVpXCA7CivlkIzlirTogIUgPCBkb3Vyb3VzaGFcIDsKK+WNs+aZguaApyA8IHNva3VqaXNlaVwgOwor5Lmz5ZGR5YWQIDwgY2hpbm9taWdvXCA7CivkuI3lvrPmvKIgPCBmdXRva3VrYW5cIDsKK+mBremBh+aIpiA8IHNvdWd1dXNlblwgOwor6KiA5LydIDwga290b2R6dXRlXCA7Civlj4jlrrbmnaUgPCBtYXRhZ2VyYWlcIDsKK+eBq+afsSA8IGhpYmFzaGlyYVwgOwor5LiA5aa75aSa5aSrIDwgaXNzYWl0YWZ1XCA7CivplqXml48gPCBiYXRzdXpva3VcIDsKK+ato+abuOazlSA8IHNlaXNob2hvdVwgOwor54us6Ieq5oCnIDwgZG9rdWppc2VpXCA7CivlvIHosqHlpKkgPCBiZW56YWl0ZW5cIDsKK+WLpOWLmeWFiCA8IGtpbm11c2FraVwgOwor6KeS5Y+JIDwgdHN1bm9tYXRhXCA7CivmjIHkuYXmiKYgPCBqaWt5dXVzZW5cIDsKK+mHjeimgeimliA8IGp1dXlvdXNoaVwgOwor56m65qKF6ZuoIDwga2FyYXRzdXl1XCA7Civmt7fmiJDlm6MgPCBrb25zZWlkYW5cIDsKK+S4jeato+ihjOeCuiA8IGZ1c2Vpa291aVwgOwor5oqc6YyoIDwgYmF0c3VieW91XCA7Civngavlj6Plo4EgPCBrYWtvdWhla2lcIDsKK+aZgumWk+ihqCA8IGppa2FuaHlvdVwgOwor56CC5Yip6YGTIDwgamFyaW1pY2hpXCA7CivkvJroqIjlrpggPCBrYWlrZWlrYW5cIDsKK+izpOalreWppiA8IHNlbmd5b3VmdVwgOwor57WM6aiT6ICFIDwga2Vpa2Vuc2hhXCA7Civpn5Plm73oqp4gPCBoYW5rb2t1Z29cIDsKK+aVmeadkOiyuyA8IGt5b3V6YWloaVwgOwor5Zu956uLIDwga29rdXJpdHN1XCA7Civli53liKnogIUgPCBzaG91cmlzaGFcIDsKK+a9nOS8j+acnyA8IHNlbnB1a3VraVwgOwor5aSn5Zuj5YaGIDwgZGFpZGFuJydlblwgOwor5Y2I5YmN5qeYIDwgZ296ZW5zYW1hXCA7Civmtbfmva7pn7MgPCBrYWljaG91b25cIDsKK+ato+eKr+iAhSA8IHNlaWhhbnNoYVwgOwor5Y+v5Zyn5oCnIDwga2FhdHN1c2VpXCA7CivoiLnlpKflt6UgPCBmdW5hZGFpa3VcIDsKK+Wcn+WcsOafhCA8IHRvY2hpZ2FyYVwgOwor55m76Ii356S8IDwgdG91Z2VucmVpXCA7Civmv4DnqoEgPCBnZWtpdG90c3VcIDsKK+aUv+W6nOetiyA8IHNlaWZ1c3VqaVwgOwor5rS75oCn5YmkIDwga2Fzc2VpemFpXCA7Civlj43kvZPliLYgPCBoYW50YWlzZWlcIDsKK+iXu+iPjOmhniA8IHNvdWtpbnJ1aVwgOwor5ruR55+z57KJIDwga2Fzc2VraWtvXCA7Civnt6nooZ3lmaggPCBrYW5zaG91a2lcIDsKK+mzqee+veiJsiA8IGhhdG9iYWlyb1wgOwor6aGV5b6u6Y+hIDwga2VuYmlreW91XCA7CivlkI3lupfooZcgPCBtZWl0ZW5nYWlcIDsKK+WIqeS8keiJsiA8IHJpa3l1dWlyb1wgOwor5Zu95LqL54qvIDwga29rdWppaGFuXCA7CivploDmnb4gPCBrYWRvbWF0c3VcIDsKK+a3t+aIkOWTgSA8IGtvbnNlaWhpblwgOwor5YiG6YWN6ICFIDwgYnVucGFpc2hhXCA7CivljYrpgI/mmI4gPCBoYW50b3VtZWlcIDsKK+WIhuawtOe3miA8IGJ1bnN1aXNlblwgOwor6YGK5oiv55qEIDwgeXV1Z2l0ZWtpXCA7Civov5HoppbnnLwgPCBraW5zaGlnYW5cIDsKK+S8muioiOWjqyA8IGthaWtlaXNoaVwgOwor5oqc6YGTIDwgbnVrZW1pY2hpXCA7CivliJ3lubTlhbUgPCBzaG9uZW5oZWlcIDsKK+WQjOW5tOi8qSA8IGRvdW5lbnBhaVwgOwor54+N54Sh6aGeIDwgY2hpbm11cnVpXCA7Civnrp3lj6Pku6QgPCBrYW5rb3VyZWlcIDsKK+WQiOazleaApyA8IGdvdWhvdXNlaVwgOwor57eP6aCY5LqLIDwgc291cnlvdWppXCA7Civlt57mlL/lupwgPCBzaHV1c2VpZnVcIDsKK+WVhuWLmeWumCA8IHNob3VtdWthblwgOwor6ZW35pyIIDwgbmFnYXRzdWtpXCA7Civlv5zmjqXplpMgPCBvdXNldHN1bWFcIDsKK+ihgOiCiSA8IGtldHN1bmlrdVwgOwor5Y+C5Lya6ICFIDwgc2Fua2Fpc2hhXCA7CivkupTkurrntYQgPCBnb25pbmd1bWlcIDsKK+m7hOawtOaZtiA8IGtpenVpc2hvdVwgOwor5YaF6KOP5qeYIDwgZGFpcmlzYW1hXCA7CivlpKfooYbljJYgPCB0YWlzaHV1a2FcIDsKK+mHjeWkp+aApyA8IGp1dWRhaXNlaVwgOwor5aSW5Zu96KqeIDwgZ2Fpa29rdWdvXCA7Civnj77nirbntq3mjIEgPCBnZW5qb3VpamlcIDsKK+WLouWKm+WutiA8IHNlaXJ5b2trYVwgOwor5aOw5qW95a62IDwgc2VpZ2FrdWthXCA7Civoo73pnbTmpa0gPCBzZWlrYWd5b3VcIDsKK+e0m+WksSA8IGZ1bnNoaXRzdVwgOwor566x6aas6LuKIDwgaGFrb2Jhc2hhXCA7Civlrq7lhoXnnIEgPCBrdW5haXNob3VcIDsKK+Wcn+eJoiA8IHRzdWNoaXJvdVwgOwor5LqL5qWt5omAIDwgamlneW91c2hvXCA7Civnqb/lsbHnlLIgPCBzZW56YW5rb3VcIDsKK+iHqOa4r+e3miA8IHJpbmtvdXNlblwgOwor5ZSv5ZCN6KuWIDwgeXVpbWVpcm9uXCA7CivnsbPmsrkgPCBrb21lYWJ1cmFcIDsKK+aUuemAoOi7iiA8IGthaXpvdXNoYVwgOwor6buE6YeR5Zu9IDwgb3Vnb25rb2t1XCA7CivoiovnvornvrkgPCBpbW95b3VrYW5cIDsKK+abtOeUn+WTgSA8IGtvdXNlaWhpblwgOwor5bqD5bCP6LevIDwgaGlyb2tvdWppXCA7CivnrYvpgZMgPCBzdWppbWljaGlcIDsKK+epuui/lOS6iyA8IHNvcmFoZW5qaVwgOwor56+z56+lIDwgaGljaGlyaWtpXCA7CivohZDmpI3lnJ8gPCBmdXNob2t1ZG9cIDsKK+asoeWWhOetliA8IGppemVuc2FrdVwgOwor576O6L6e6bqX5Y+lIDwgYmlqaXJlaWt1XCA7CivpgaDnnLzpj6EgPCB0b29tZWdhbmVcIDsKK+WJtemAoOiAhSA8IHNvdXpvdXNoYVwgOwor5LyR6Zu75pelIDwga3l1dWRlbmJpXCA7Civmnb/ploDlupcgPCBoYW5tb250ZW5cIDsKK+ihneeqgSA8IHNob3V0b3RzdVwgOwor5bCO5YWl6YOoIDwgZG91bnl1dWJ1XCA7CivnpoXllY/nrZQgPCB6ZW5tb25kb3VcIDsKK+ikh+aVsOWAiyA8IGZ1a3VzdXVrb1wgOwor55uy5a2m5qChIDwgbW91Z2Fra291XCA7CivnoJTkv67oqrIgPCBrZW5zaHV1a2FcIDsKK+W8vuaAp+S9kyA8IGRhbnNlaXRhaVwgOwor57Gz5quDIDwga29tZWJpdHN1XCA7CivnjK7lkYjmnKwgPCBrZW50ZWlib25cIDsKK+WwvumVt+m2jyA8IG9uYWdhZG9yaVwgOwor5pS+6YCB57ayIDwgaG91c291bW91XCA7CivpurvphZTolqwgPCBtYXN1aXlha3VcIDsKK+WNg+W5tOe0gCA8IHNlbicnbmVua2lcIDsKK+WDp+W4veW8gSA8IHNvdWJvdWJlblwgOwor5aSq6byT6IW5IDwgdGFpa29iYXJhXCA7CivkuI3oqIDkuI3oqp4gPCBmdWdlbmZ1Z29cIDsKK+WJjeijheegsiA8IHplbnNvdWhvdVwgOwor5YiG6YGj6ZqKIDwgYnVua2VudGFpXCA7CivlkLnlpY/ogIUgPCBzdWlzb3VzaGFcIDsKK+ernOmqqCA8IHJ5dXVrb3RzdVwgOwor5aW96KeS5a62IDwga291a2FrdWthXCA7CivntZDkuoYgPCBrZXRzdXJ5b3VcIDsKK+aCquWkqeWAmSA8IGFrdXRlbmtvdVwgOwor5o6o6YCy5qmfIDwgc3Vpc2hpbmtpXCA7CivmiZjpiaIgPCB0YWt1aGF0c3VcIDsKK+mJpOWNgeWtlyA8IGthZ2lqdXVqaVwgOwor5Lmx5rCX5rWBIDwgcmFua2lyeXV1XCA7Civlhrflh43liaQgPCByZWl0b3V6YWlcIDsKK+WIneWvvumdoiA8IHNob3RhaW1lblwgOwor6ZaP5bm0IDwgdXJ1dWRvc2hpXCA7Civnq40gPCBkZWthcml0dG9cIDsKK+acquWPjui8iSA8IG1pc2h1dXNhaVwgOwor5Zec5aW95ZOBIDwgc2hpa291aGluXCA7CivmgqrlpKnkvb8gPCBha3V0ZW5zaGlcIDsKK+W8t+WMluexsyA8IGt5b3VrYW1haVwgOwor5rC06Zu36ImHIDwgc3VpcmFpdGVpXCA7CivoprPmpZPkvJogPCBrYW5wdXVrYWlcIDsKK+S9k+mok+irhyA8IHRhaWtlbmRhblwgOwor54Sh5oSf6KaaIDwgbXVrYW5rYWt1XCA7CivnvqTpgJ/luqYgPCBndW5zb2t1ZG9cIDsKK+mbu+e3j+eglCA8IGRlbnNvdWtlblwgOwor5LiN56K65a6aIDwgZnVrYWt1dGVpXCA7Civnmb3nmb7lkIggPCBzaGlyYXl1cmlcIDsKK+iInui4iuWKhyA8IGJ1eW91Z2VraVwgOwor54Gr5Y+j5LiYIDwga2Frb3VreXV1XCA7CivkuI3mraPnorogPCBmdXNlaWtha3VcIDsKK+evgOe0hCA8IHNldHN1eWFrdVwgOwor6Zm95a2Q57eaIDwgeW91c2hpc2VuXCA7CivkuIvpg6jmqZ/plqIgPCBrYWJ1a2lrYW5cIDsKK+WAi+S6uuiqpOW3riA8IGtvamluZ29zYVwgOwor5pmC6ZaT57WmIDwgamlrYW5reXV1XCA7CivliIbmsLTnlYwgPCBidW5zdWlrYWlcIDsKK+S5seWPjeWwhCA8IHJhbmhhbnNoYVwgOwor6Kej562U5qyEIDwga2FpdG91cmFuXCA7CivprZrpm7foiYcgPCBneW9yYWl0ZWlcIDsKK+WFrOacieWcsCA8IGtvdXl1dWNoaVwgOwor5qy6556e55qEIDwgZ2ltYW50ZWtpXCA7CivmmI7nnq3luqYgPCBtZWlyeW91ZG9cIDsKK+S8muioiOS/giA8IGthaWtlaWtlaVwgOwor6J+H6JuZIDwgaGlraWdhZXJ1XCA7CivovLjlhaXnqI4gPCB5dW55dXV6ZWlcIDsKK+icgOm7jSA8IG1vcm9rb3NoaVwgOwor5LiN5b+D5b6XIDwgZnVrb2tvcm9lXCA7Civkuozmpa3lnLAgPCBuaWd5b3VjaGlcIDsKK+WNmOWtkOirliA8IHRhbnNoaXJvblwgOwor6Ki85oug6YeRIDwgc2hvdWtva2luXCA7CivnlJ/mvJTlpY8gPCBuYW1hZW5zb3VcIDsKK+W+ruWIhuWtpiA8IGJpYnVuZ2FrdVwgOwor5bCC5b6T6ICFIDwgc2VuanV1c2hhXCA7Civku5nlj7Dkvq8gPCBzZW5kYWlrb3VcIDsKK+ihgOecvCA8IGNoaW1hbmFrb1wgOwor5664566xIDwgaGFzaGliYWtvXCA7CivopIflvI8gPCBmdWt1c2hpa2lcIDsKK+WFhOW8n+aEmyA8IGt5b3VkYWlhaVwgOwor5LiH6I+v6Y+hIDwgbWFuZ2VreW91XCA7Civopb/lgbQgPCBuaXNoaWdhd2FcIDsKK+aQjeWksSA8IHNvbnNoaXRzdVwgOwor5Lq66ZaT5YOPIDwgbmluZ2Vuem91XCA7Civlm57luLDnmoQgPCBrYWlraXRla2lcIDsKK+W4guawkeeojiA8IHNoaW1pbnplaVwgOwor5a+M5aOr6aGNIDwgZnVqaWJpdGFpXCA7Civpl5blhaUgPCBjaGluJydueXV1XCA7CivonILps6UgPCBoYWNoaWRvcmlcIDsKK+mWi+elqOaJgCA8IGthaWh5b3Vqb1wgOwor5L2T6IKy6aSoIDwgdGFpaWt1a2FuXCA7CivngrrkvZMgPCB0ZWl0YXJha3VcIDsKK+Wkieiqv+azoiA8IGhlbmNob3VoYVwgOwor5ZCM55uf6LuNIDwgZG91bWVpZ3VuXCA7CivlkYroqLTkurogPCBrb2t1c29uaW5cIDsKK+WtpuWjq+mZoiA8IGdha3VzaGlpblwgOwor5YCr55CG55qEIDwgcmlucml0ZWtpXCA7CivngrnpvLvolqwgPCB0ZW5iaXlha3VcIDsKK+aKleabuOashCA8IHRvdXNob3JhblwgOwor6Ki06Kif5rOVIDwgc29zaG91aG91XCA7Civmurbos6ogPCB5b3VzaGl0c3VcIDsKK+Wbm+WNiuWIhiA8IHNoaWhhbmJ1blwgOwor5ZC46Z+z5p2QIDwga3l1dW9uemFpXCA7CivliJ3kvZPpqJMgPCBzaG90YWlrZW5cIDsKK+i8uOWFpeebpCA8IHl1bnl1dWJhblwgOwor5LiN55+l54GrIDwgc2hpcmFudWhpXCA7CivljbXntLDog54gPCByYW5zYWlib3VcIDsKK+eBsOWcnyA8IGhhaXRzdWNoaVwgOwor5LqM5qW15YyWIDwgbmlreW9rdWthXCA7CivljZfkuqzpjKAgPCBuYW5raW5qb3VcIDsKK+mzqeaZguioiCA8IGhhdG9kb2tlaVwgOwor5ZO65Lmz55O2IDwgaG9ueXV1YmluXCA7Civopb/mtIvpoqggPCBzZWl5b3VmdXVcIDsKK+aXouijveacjSA8IGtpc2VpZnVrdVwgOwor6Ieq55Sx5oSP5b+XIDwgaml5dXVpc2hpXCA7Civph47lpJbliocgPCB5YWdhaWdla2lcIDsKK+aZrumBjeeahCA8IGZ1aGVudGVraVwgOwor5LqL5qWt5ZujIDwgamlneW91ZGFuXCA7CivlsI/lvbnkurogPCBrb3lha3VuaW5cIDsKK+mzpeWqkuiKsSA8IGNob3ViYWlrYVwgOwor6Ieq5rK76aCYIDwgamljaGlyeW91XCA7Civoo4/miYkgPCB1cmF0b2JpcmFcIDsKK+egtOWjiueahCA8IGhha2FpdGVraVwgOwor5pCs5Ye6IDwgaGFuc2h1dHN1XCA7Civnqq7mjqrlpKcgPCBreXV1c29kYWlcIDsKK+mBlOejqOiIuSA8IGRhcnVtYXNlblwgOwor5YaF5Zyo5oCnIDwgbmFpemFpc2VpXCA7CivlsI/ojbfniakgPCBrb25pbW90c3VcIDsKK+aXpeezu+S6uiA8IG5pa2tlaWppblwgOwor57K+56We56eRIDwgc2Vpc2hpbmthXCA7CivkuIDlkIjnm64gPCBpY2hpZ291bWVcIDsKK+S9j+Wxhei3oSA8IGp1dWt5b2F0b1wgOwor5YaN5oqX5byBIDwgc2Fpa291YmVuXCA7CivovrLkvZzmpa0gPCBub3VzYWd5b3VcIDsKK+ieouWFieeHiCA8IGtlaWtvdXRvdVwgOwor5LuY5bm06KGoIDwgZnVuZW5weW91XCA7CivmraPoqqTooaggPCBzZWlnb2h5b3VcIDsKK+ijj+aDhSA8IHVyYW5hc2FrZVwgOwor5Zub6Lyq6LuKIDwgeW9ucmluc2hhXCA7Civon4fogqEgPCBrYWVydW1hdGFcIDsKK+S4iemHjeWljyA8IHNhbmp1dXNvdVwgOwor5L+d6Ki85pu4IDwgaG9zaG91c2hvXCA7CivlkKblrprnmoQgPCBoaXRlaXRla2lcIDsKK+S4jemAo+e2miA8IGZ1cmVuem9rdVwgOwor5q2m5pat55qEIDwgYnVkYW50ZWtpXCA7Civlh7rnqYLmnJ8gPCBzaHVzc3Vpa2lcIDsKK+S4iuWNiuacnyA8IGthbWloYW5raVwgOwor5Y2Y5a2Q6JGJIDwgdGFuc2hpeW91XCA7Civlvq7liIbllYYgPCBiaWJ1bnNob3VcIDsKK+ihgOeFmSA8IGNoaWtlbXVyaVwgOwor576p5YWE5byfIDwgZ2lreW91ZGFpXCA7CivopIfntKDmlbAgPCBmdWt1c29zdXVcIDsKK+i7ouagoeeUnyA8IHRlbmtvdXNlaVwgOwor5pi85aSc5bivIDwgY2h1dXlhb2JpXCA7Civkuovku7booaggPCBqaWtlbmh5b3VcIDsKK+W8t+ehrOa0viA8IGt5b3Vrb3VoYVwgOwor5o6S5rCX6YePIDwgaGFpa2lyeW91XCA7CivkuozmrKHoqJjmhrYgPCBuaWppa2lva3VcIDsKK+Wls+aWh+WtlyA8IG9uJyduYW1vamlcIDsKK+eEoeaJgOWxniA8IG11c2hvem9rdVwgOwor5ZGo5rOi5pWwIDwgc2h1dWhhc3V1XCA7CivnjJvnpr3poZ4gPCBtb3VraW5ydWlcIDsKK+eUn+aFi+ezuyA8IHNlaXRhaWtlaVwgOwor5ruR6JC9IDwga2F0c3VyYWt1XCA7CivmjIHniakgPCBtb2NoaW1vbm9cIDsKK+aVo+aWh+ipqSA8IHNhbmJ1bnNoaVwgOwor5qC95Z+556iuIDwgc2FpYmFpc2h1XCA7Civljp/okZfogIUgPCBnZW5jaG9zaGFcIDsKK+mbu+ipseaWmSA8IGRlbndhcnlvdVwgOwor5oqA6IO96LOeIDwgZ2lub3VzaG91XCA7Civmlpnph5HmiYAgPCByeW91a2luam9cIDsKK+aUr+mFjeiAhSA8IHNoaWhhaXNoYVwgOwor5rSX5r+v5bGLIDwgc2VudGFrdXlhXCA7CivlgbTov5HogIUgPCBzb2traW5zaGFcIDsKK+mWgOWPoyA8IGthZG9ndWNoaVwgOwor5a6f56S+5LyaIDwgamlzc2hha2FpXCA7CivlvqHpgKPntaEgPCBnb3JlbnJha3VcIDsKK+mmmeW3neecjCA8IGthZ2F3YWtlblwgOwor54K55ru05ZmoIDwgdGVudGVraWtpXCA7CivkuojlrprooaggPCB5b3RlaWh5b3VcIDsKK+W8geitt+aWmSA8IGJlbmdvcnlvdVwgOwor5Li76KaB6aeFIDwgc2h1eW91ZWtpXCA7CivljLrkvJrorbDlk6EgPCBrdWthaWdpaW5cIDsKK+aMn+auuiA8IGt5b3VzYXRzdVwgOwor5a++5b+c562WIDwgdGFpb3VzYWt1XCA7CivovLjlhaXmuK8gPCB5dW55dXVrb3VcIDsKK+WQjOW/l+S8miA8IGRvdXNoaWthaVwgOwor6L+O5pKD5qmfIDwgZ2VpZ2VraWtpXCA7CivkurrlnLDlkI0gPCBqaW5jaGltZWlcIDsKK+S/nemZuuaWmSA8IGhva2VucnlvdVwgOwor5aSn5ZKM6IqLIDwgeWFtYXRvaW1vXCA7Civpq5jlhKrlhYggPCBrb3V5dXVzZW5cIDsKK+aUvumAgeazlSA8IGhvdXNvdWhvdVwgOwor56S65Yqb5ZuzIDwgamlyeW9rdXp1XCA7Civlj6TkuovoqJjkvJ0gPCBrb2ppa2lkZW5cIDsKK+mbquWls+mDjiA8IHl1a2lqb3JvdVwgOwor6KGo5pu4IDwgb21vdGVnYWtpXCA7Civpm7bntLDovrIgPCByZWlzYWlub3VcIDsKK+eziuS7oyA8IG5vcmlzaGlyb1wgOwor55yf5riF5rC0IDwgbWFzaGltaXp1XCA7CivliqnlpKrliIAgPCBzdWtlZGFjaGlcIDsKK+WFi+W3seW/gyA8IGtva2tpc2hpblwgOwor6Kit6KiI6ICFIDwgc2Vra2Vpc2hhXCA7CivnhKHnpZ7oq5YgPCBtdXNoaW5yb25cIDsKK+eEoeeCuueEoeetliA8IG11aW11c2FrdVwgOwor5pyJ6KKL6aGeIDwgeXV1dGFpcnVpXCA7CivkuIDmrrrpgqMgPCBpc3NldHN1bmFcIDsKK+W/g+eQhuaIpiA8IHNoaW5yaXNlblwgOwor5b6h5q205q20IDwgb3Jla2lyZWtpXCA7CivkuI3lubPnrYkgPCBmdWJ5b3Vkb3VcIDsKK+WIqeWwv+WJpCA8IHJpbnlvdXphaVwgOwor56m06ZqZIDwga2V0c3VnZWtpXCA7CivniafmrYznmoQgPCBib2trYXRla2lcIDsKK+a8uOi/kee3miA8IHplbmtpbnNlblwgOwor5a2Q5a6J6LKdIDwga295YXN1a2FpXCA7Civml4Xml6XoqJggPCB0YWJpbmlra2lcIDsKK+WjsuS4iumHkSA8IHVyaWFnZWtpblwgOwor5Y+X57Wm6ICFIDwganVreXV1c2hhXCA7CivmmI7lubTluqYgPCBteW91bmVuZG9cIDsKK+S6jOaemuiIjCA8IG5pbWFpaml0YVwgOwor5LiJ6YeN5YagIDwgc2FuanV1a2FuXCA7Civoqpjpm7vlrZAgPCB5dXVkZW5zaGlcIDsKK+mMr+mbkSA8IHNha3V6YXRzdVwgOwor5Zyn5a+GIDwgYXRzdW1pdHN1XCA7CivplqLkv4LoqZ4gPCBrYW5rZWlzaGlcIDsKK+e0oemMmOW9oiA8IGJvdXN1aWtlaVwgOwor5aWJ5bmj5L2/IDwgaG91aGVpc2hpXCA7CivluILmsJHms5UgPCBzaGltaW5ob3VcIDsKK+acgOaVrOekvCA8IHNhaWtlaXJlaVwgOwor5qS0IDwgdG9kb21hdHN1XCA7Civoi6blrabnlJ8gPCBrdWdha3VzZWlcIDsKK+Wwj+eUn+aEj+awlyA8IGtvbmFtYWlraVwgOwor5b6X5oSP5YWIIDwgdG9rdWlzYWtpXCA7Civpm6jku5XluqYgPCBhbWFqaXRha3VcIDsKK+WRqOazouW4ryA8IHNodXVoYXRhaVwgOwor5rys54mpIDwgdHN1a2Vtb25vXCA7CivnrqHliLblrpggPCBrYW5zZWlrYW5cIDsKK+icnOixhiA8IG1pdHN1bWFtZVwgOwor5ryC552AIDwgaHlvdWNoYWt1XCA7Civnh4PmlpnosrsgPCBuZW5yeW91aGlcIDsKK+mHj+iomOWPtyA8IHJ5b3VraWdvdVwgOwor55m65YWJ5L2TIDwgaGFra291dGFpXCA7CivljYrlhoblvaIgPCBoYW4nJ2Vua2VpXCA7CivmsZrmn5PpmaTljrsgPCBvc2Vuam9reW9cIDsKK+aPkOWHuiA8IHRlaXNodXRzdVwgOwor5YaG6Jmr6aGeIDwgZW5jaHV1cnVpXCA7CivmibbppIrnvqnli5kgPCBmdXlvdWdpbXVcIDsKK+aHuOaDs+aWhyA8IGtlc291YnVtaVwgOwor5qSc5r2u5ZmoIDwga2VuY2hvdWtpXCA7Civlp4nlprnnt6ggPCBzaGltYWloZW5cIDsKK+ihgOezluWApCA8IGtldHRvdWNoaVwgOwor5rex6Z20IDwgZnVrYWd1dHN1XCA7CivnhKHph43ph48gPCBtdWp1dXJ5b3VcIDsKK+mbu+ipseW4syA8IGRlbndhY2hvdVwgOwor5Y2I5YmN5LitIDwgZ296ZW5jaHV1XCA7Civllrbmpa3miYAgPCBlaWd5b3VzaG9cIDsKK+evgOassiA8IHNldHN1eW9rdVwgOwor57Gz5biC5aC0IDwgYmVpaWNoaWJhXCA7CivkuI3li5Xlv4MgPCBmdWRvdXNoaW5cIDsKK+iii+W4ryA8IGZ1a3Vyb29iaVwgOwor5bCP5Yik5b2iIDwga29iYW5nYXRhXCA7CivnhafmmI7lmaggPCBzaG91bWVpa2lcIDsKK+W+ueeUsuW8viA8IHRla2tvdWRhblwgOwor5a6u5YaF5bqBIDwga3VuYWljaG91XCA7Civmk6zlj6TkuLvnvqkgPCBnaWtvc2h1Z2lcIDsKK+W4guawkeaoqSA8IHNoaW1pbmtlblwgOwor56mA6aOfIDwga29rdXNob2t1XCA7CivljYroiLfnoLIgPCBoYW5nZW5ob3VcIDsKK+aoqeWogeetiyA8IGtlbicnaXN1amlcIDsKK+Wkiembu+aJgCA8IGhlbmRlbnNob1wgOwor56mN6ZuqIDwgc2VraXNldHN1XCA7Civpm7vop6PmtrIgPCBkZW5rYWlla2lcIDsKK+mbsuS4iuS6uiA8IHVuam91Yml0b1wgOwor56+A5qaRIDwgZnVzaGlrdXJlXCA7CivkuIDlkajlubQgPCBpc3NodXVuZW5cIDsKK+ihgOaXjyA8IGtldHN1em9rdVwgOwor566h5Yi25aGUIDwga2Fuc2VpdG91XCA7Civoj6/ljrPntYwgPCBrZWdvbmt5b3VcIDsKK+WvvuaDheWgsSA8IHRhaWpvdWhvdVwgOwor5qC85aSJ5YyWIDwga2FrdWhlbmthXCA7CivmlZnogrLlrrYgPCBreW91aWt1a2FcIDsKK+WuieaBr+mmmSA8IGFuc29rdWtvdVwgOwor55+z6bm45rC0IDwgc2Vra2Vuc3VpXCA7CivkuI3li4nlvLcgPCBmdWJlbmt5b3VcIDsKK+WhqeWMlueJqSA8IGVua2FidXRzdVwgOwor5Lmd5a+45LqU5YiGIDwga3VzdW5nb2J1XCA7CivkuKHnlKjmqZ8gPCByeW91eW91a2lcIDsKK+W9k+S4lumiqCA8IHRvdXNlaWZ1dVwgOwor562W55WlIDwgc2FrdXJ5YWt1XCA7CivmoLzlpKnkupUgPCBnb3V0ZW5qb3VcIDsKK+S4reiAleapnyA8IGNodXVrb3VraVwgOwor5LiN6YGp5qC8IDwgZnV0ZWtrYWt1XCA7CivpgaDlv4PliIYgPCBlbnNoaW5idW5cIDsKK+mNvOihkyA8IHNoaW5qdXRzdVwgOwor5pmu6YCa5rOVIDwgZnV0c3V1aG91XCA7CivlqpLmn5PliaQgPCBiYWlzZW56YWlcIDsKK+egtOijgumfsyA8IGhhcmV0c3VvblwgOwor5Li76Kaz6KuWIDwgc2h1a2Fucm9uXCA7CivkuoznlarkvZwgPCBuaWJhbnNha3VcIDsKK+eUn+WRvee3miA8IHNlaW1laXNlblwgOwor56m65a++56m6IDwga3V1dGFpa3V1XCA7CivnjJvlkLnpm6ogPCBtb3VmdWJ1a2lcIDsKK+aLk+auliA8IHRha3VzaG9rdVwgOwor6auY5bCE56CyIDwga291c2hhaG91XCA7CivkuIDmranpioAgPCBpY2hpYnVnaW5cIDsKK+WliOiJr+a8rCA8IG5hcmFkenVrZVwgOwor5b2i6LGh5YyWIDwga2Vpc2hvdWthXCA7CivlhoXlnLDkurogPCBuYWljaGlqaW5cIDsKK+efs+WNl+iKsSA8IHNoYWt1bmFnZVwgOwor5YKA5YSh5birIDwga2FpcmFpc2hpXCA7CivkuIDmranph5EgPCBpY2hpYnVraW5cIDsKK+Wls+mDjuicmOibmyA8IGpvcm91Z3Vtb1wgOwor55ep5oiR5oWiIDwgeWFzZWdhbWFuXCA7Civom5not7MgPCBrYWVydXRvYmlcIDsKK+aCquWboOe4gSA8IGFrdWluJyduZW5cIDsKK+S4jeecoOeXhyA8IGZ1bWluc2hvdVwgOwor6Zu76Kej5qe9IDwgZGVua2Fpc291XCA7Civms5Xoj6/lrpcgPCBob2trZXNodXVcIDsKK+S4gOeerOmWkyA8IGlzc2h1bmthblwgOwor5q2j5LiJ5L2NIDwgc2hvdXNhbm1pXCA7CivlvL7pgZPlvL4gPCBkYW5kb3VkYW5cIDsKK+a3t+WQiOaelyA8IGtvbmdvdXJpblwgOwor5rC05aKo55S7IDwgc3VpYm9rdWdhXCA7CivkuqTmmJPkvJogPCBrb3Vla2lrYWlcIDsKK+mrmOaliuWtkCA8IHRha2F5b3VqaVwgOwor5qip5aiB55qEIDwga2VuJydpdGVraVwgOwor56S+55So6LuKIDwgc2hheW91c2hhXCA7CivliIbmsLTltrogPCBidW5zdWlyZWlcIDsKK+WtkOS+m+eUqCA8IGtvZG9tb3lvdVwgOwor6Kaq5a2d6KGMIDwgb3lha291a291XCA7CivnmbrlsITnrZIgPCBoYXNzaGF0b3VcIDsKK+aLvuS4h+WGhiA8IGp1dW1hbicnZW5cIDsKK+WLpOeah+WutiA8IGtpbicnbm91a2FcIDsKK+S5s+WMluWJpCA8IG55dXVrYXphaVwgOwor6L+R5Zyw54K5IDwga2luY2hpdGVuXCA7CivlnKflipsgPCBhdHN1cnlva3VcIDsKK+eEoeertuS6iSA8IG11a3lvdXNvdVwgOwor5Lqk6Zqb5rOVIDwga291c2FpaG91XCA7Civlj4LkuI7ogIUgPCBzYW4nJ3lvc2hhXCA7Civnq7nnrpIgPCB0YWtlYm91a2lcIDsKK+mjsuaWmeawtCA8IGlucnlvdXN1aVwgOwor6by76Z2iIDwgaGFuYWR6dXJhXCA7Civnp4vml6XlkowgPCBha2liaXlvcmlcIDsKK+WMuuW9ueaJgCA8IGt1eWFrdXNob1wgOwor56uL5b+X5LydIDwgcmlzc2hpZGVuXCA7CivlpKnnp6Tmo5IgPCB0ZW5iaW5ib3VcIDsKK+Wkieiqv+WZqCA8IGhlbmNob3VraVwgOwor6Zai5L+C6ICFIDwga2Fua2Vpc2hhXCA7CivkuI3pmo/mhI/nrYsgPCBmdXp1aWlraW5cIDsKK+Wkp+aIkOWKnyA8IGRhaXNlaWtvdVwgOwor5LqM5Lq656ewIDwgbmluaW5zaG91XCA7Civlgbblg4/oppYgPCBndXV6b3VzaGlcIDsKK+WBtui5hOmhniA8IGd1dXRlaXJ1aVwgOwor5p2l6Kiq6ICFIDwgcmFpaG91c2hhXCA7CivpqJLkubHnvaogPCBzb3VyYW56YWlcIDsKK+WujOaIkOWTgSA8IGthbnNlaWhpblwgOwor56e76KGM5pyf6ZaTIDwgaWtvdWtpa2FuXCA7Civoopblj6MgPCBzb2RlZ3VjaGlcIDsKK+WJtemAoOaApyA8IHNvdXpvdXNlaVwgOwor5o275Ye6IDwgbmVuc2h1dHN1XCA7Civlj4joq4vosqAgPCBtYXRhdWtlb2lcIDsKK+mHkemWo+WvuiA8IGtpbmtha3VqaVwgOwor6KqY6Zu75L2TIDwgeXV1ZGVudGFpXCA7CivljZfkuqznsbMgPCBuYW5raW5tYWlcIDsKK+eEoeelnue1jCA8IG11c2hpbmtlaVwgOwor6YqA5Lqk5o+bIDwgZ2lua291a2FuXCA7CivltZkgPCB5YW1hc2hpbmFcIDsKK+ijveWhqealrSA8IHNlaWVuZ3lvdVwgOwor5pWZ5Lya5ZOhIDwga3lvdWthaWluXCA7CivllZPon4QgPCBrZWljaGl0c3VcIDsKK+aQreS5l+WIuCA8IHRvdWpvdWtlblwgOwor6YGO56Gr6YW4IDwga2FyeXV1c2FuXCA7CivpgYvlkb3nmoQgPCB1bm1laXRla2lcIDsKK+ims+ahnOS8miA8IGthbicnb3VrYWlcIDsKK+a2membqCA8IG5hbWlkYWFtZVwgOwor54Sh56S86ICFIDwgYnVyZWltb25vXCA7Civmp4vmlofms5UgPCBrb3VidW5wb3VcIDsKK+evpOWunyA8IHRva3VqaXRzdVwgOwor6Y6W57O4IDwga3VzYXJpaXRvXCA7Civnpr/pt7IgPCBoYWdld2FzaGlcIDsKK+ihgOWwvyA8IGtldHN1bnlvdVwgOwor5o6l6L+R5oimIDwgc2Vra2luc2VuXCA7CivnhKHms5XogIUgPCBtdWhvdW1vbm9cIDsKK+aHsue9sCA8IGNob3ViYXRzdVwgOwor5LiN6YGp5b2TIDwgZnV0ZWtpdG91XCA7CivnhKHmsLTpjYsgPCBtdXN1aW5hYmVcIDsKK+aciOe1puaXpSA8IGdla2t5dXViaVwgOwor5Zu95YqbIDwga29rdXJ5b2t1XCA7CivmlqXlgJnpmoogPCBzZWtrb3V0YWlcIDsKK+WJtealreiyuyA8IHNvdWd5b3VoaVwgOwor5Zu95YilIDwga3VuaWJldHN1XCA7Civph43opoHmgKcgPCBqdXV5b3VzZWlcIDsKK+e3j+WjsuS4iiA8IHNvdXVyaWFnZVwgOwor5Y2B5YaG546JIDwganV1ZW5kYW1hXCA7Civmir3mlpcgPCBoaWtpZGFzaGlcIDsKK+WAq+eQhuWtpiA8IHJpbnJpZ2FrdVwgOwor5LiA6YCx6ZaTIDwgaXNzaHV1a2FuXCA7CivnpL7lhoXloLEgPCBzaGFuYWlob3VcIDsKK+S9j+WuheiyuyA8IGp1dXRha3VoaVwgOwor5bGI5Zyw5oCnIDwga3V0Y2hpc2VpXCA7Civku5jliqDkvqHlgKQgPCBmdWtha2FjaGlcIDsKK+evieWxsSA8IHRzdWtpeWFtYVwgOwor5Zu95pyJ5YyWIDwga29rdXl1dWthXCA7CivpgJrpoqjmqZ8gPCB0c3V1ZnV1a2lcIDsKK+WutuWxi+aVtyA8IGlleWFzaGlraVwgOwor5bGx5qSS6a2aIDwgc2Fuc2hvdXVvXCA7Civlhazmlofmm7ggPCBrb3VidW5zaG9cIDsKK+axuuWumuirliA8IGtldHRlaXJvblwgOwor5L+d6Ki85Lq6IDwgaG9zaG91bmluXCA7Civmsr/mtbflt54gPCBlbmthaXNodXVcIDsKK+S4jemBk+W+syA8IGZ1ZG91dG9rdVwgOwor5L6/5LmX6ICFIDwgYmluam91c2hhXCA7CivkuIDljYfnk7YgPCBpc3Nob3ViaW5cIDsKK+epuuiFueaZgiA8IGt1dWZ1a3VqaVwgOwor5YmN6KGb5oimIDwgemVuJydlaXNlblwgOwor6KKW5LuYIDwgc29kZXRzdWtlXCA7CivmhJ/mg4Xoq5YgPCBrYW5qb3Vyb25cIDsKK+aUr+mFjeaoqSA8IHNoaWhhaWtlblwgOwor5Zuj5a2Q6by7IDwgZGFuZ29iYW5hXCA7Civlhajoq5bngrkgPCB6ZW5yb250ZW5cIDsKK+aJvOauuiA8IHlha3VzYXRzdVwgOwor6YGT5YyW6ICFIDwgZG91a2Vtb25vXCA7Civopb/mtIvntJkgPCBzZWl5b3VzaGlcIDsKK+abuOiomOmVtyA8IHNob2tpY2hvdVwgOwor5Zyf5aOM5rGa5p+TIDwgZG9qb3Vvc2VuXCA7CivooYDloZcgPCBjaGltaWRvcm9cIDsKK+W/jOiogOiRiSA8IGltaWtvdG9iYVwgOwor6Zuj5LqL5qWtIDwgbmFuamlneW91XCA7Civku5jluK/nmoQgPCBmdXRhaXRla2lcIDsKK+mrmOmjm+i7iiA8IHRha2FiaXNoYVwgOwor6Zu76Kmx5LitIDwgZGVud2FjaHV1XCA7Civpu4TpgZPluK8gPCBrb3Vkb3V0YWlcIDsKK+mrmOagoeeUnyA8IGtvdWtvdXNlaVwgOwor6bq56bu0IDwga291amlrYWJpXCA7Civmtpnph5EgPCBuYW1pZGFraW5cIDsKK+iCuuawtOiFqyA8IGhhaXN1aXNodVwgOwor5ZWG55So6KqeIDwgc2hvdXlvdWdvXCA7CivnlaXoqJjms5UgPCByeWFra2lob3VcIDsKK+ihgOWcpyA8IGtldHN1YXRzdVwgOwor5r2u5aKDIDwgc2hpb3pha2FpXCA7CivokaHokITmo5ogPCBidWRvdWRhbmFcIDsKK+WlieWFrOS6uiA8IGhvdWtvdW5pblwgOwor56if6LOqIDwgaGluc2hpdHN1XCA7Civmub/nlLAgPCBzaGl0c3VkZW5cIDsKK+S7j+azleWDpyA8IGJ1cHBvdXNvdVwgOwor6buS6auqIDwga29rdWhhdHN1XCA7CivkvZPogrLnpa0gPCB0YWlpa3VzYWlcIDsKK+aZrumAmuW8viA8IGZ1dHN1dWRhblwgOwor5oim5Lit5rS+IDwgc2VuY2h1dWhhXCA7Civpq5jlsbHluK8gPCBrb3V6YW50YWlcIDsKK+aAp+eKr+e9qiA8IHNlaWhhbnphaVwgOwor5rCR6Iq45ZOBIDwgbWluZ2VpaGluXCA7CivopqrkvJrnpL4gPCBveWFnYWlzaGFcIDsKK+aJk+a2iCA8IHVjaGlrZXNoaVwgOwor5Y+C6LOA5bizIDwgc2FuZ2FjaG91XCA7CivkuInovKrou4ogPCBzYW5yaW5zaGFcIDsKK+eUo+enkeWtpiA8IHNhbmthZ2FrdVwgOwor6LuK5YaF54GvIDwgc2hhbmFpdG91XCA7CivljLvli5nlrqQgPCBpbXVzaGl0c3VcIDsKK+awuOe2muaApyA8IGVpem9rdXNlaVwgOwor6KGo5YG0IDwgb21vdGVnYXdhXCA7CivmjqLmpJzpmoogPCB0YW5rZW50YWlcIDsKK+Wun+WLmeWutiA8IGppdHN1bXVrYVwgOwor5b+F6aCI5qC8IDwgaGlzc3VrYWt1XCA7CivlpKflkozmrYwgPCB5YW1hdG91dGFcIDsKK+S4uOWkquadkCA8IG1hcnV0YXphaVwgOwor56CU5L+u5omAIDwga2Vuc2h1dWpvXCA7CivlhazmmI7lhZogPCBrb3VtZWl0b3VcIDsKK+e1teepuuiogCA8IGVzb3JhZ290b1wgOwor576F6Yed55ukIDwgcmFzaGluYmFuXCA7CivkuIrpmaLorbDlk6EgPCBqb3VpbmdpaW5cIDsKK+WZqOmHj+S6uiA8IGtpcnlvdWppblwgOwor5Zu96Zqb6KqeIDwga29rdXNhaWdvXCA7Civlm5vovrrlvaIgPCBzaGloZW5rZWlcIDsKK+eZuuS9nOeahCA8IGhvc3NhdGVraVwgOwor6IG+5a2m5qChIDwgcm91Z2Fra291XCA7CivpkJjmkp4gPCBrYW5ldHN1a2lcIDsKK+aOg+a1t+iJhyA8IHNvdWthaXRlaVwgOwor5Y+C6ICD5pu4IDwgc2Fua291c2hvXCA7CivljJbnsqflk4EgPCBrZXNob3VoaW5cIDsKK+WcsOW5s+mdoiA8IGNoaWhlaW1lblwgOwor6KGM5YiXIDwgZ3lvdXJldHN1XCA7CivkvY7og73ogIUgPCB0ZWlub3VzaGFcIDsKK+WFiOmok+irliA8IHNlbmtlbnJvblwgOwor6ZuG6Iux56S+IDwgc2h1dWVpc2hhXCA7CivnlKjmsLTmsaAgPCB5b3VzdWljaGlcIDsKK+WPl+mbo+WKhyA8IGp1bmFuZ2VraVwgOwor5YCJ5bqr5qWtIDwgc291a29neW91XCA7CivljYPlha3mnKwgPCBzZW5yb3Bwb25cIDsKK+i8uOWFpeWTgSA8IHl1bnl1dWhpblwgOwor5YyW57Kn5Y+wIDwga2VzaG91ZGFpXCA7CivloanliqDmuJsgPCBzaGlva2FnZW5cIDsKK+WomOWtkOi7jSA8IGpvdXNoaWd1blwgOwor6Ieq5rK755yBIDwgamljaGlzaG91XCA7CivlsL7plbfnjL8gPCBvbmFnYXphcnVcIDsKK+itpumYsuWboyA8IGtlaWJvdWRhblwgOwor5q2j6Kej6ICFIDwgc2Vpa2Fpc2hhXCA7CivpmZDluqbpoY0gPCBnZW5kb2dha3VcIDsKK+WGjea0l+ekvCA8IHNhaXNlbnJlaVwgOwor5aeJ5aa55qChIDwgc2hpbWFpa291XCA7CivmoLzpl5jmioAgPCBrYWt1dG91Z2lcIDsKK+mdkuaYpeacnyA8IHNlaXNodW5raVwgOwor6YCf6KiY6YyyIDwgc29ra2lyb2t1XCA7CivlhKrli53ppqwgPCB5dXVzaG91YmFcIDsKK+WHqSA8IGtvZ2FyYXNoaVwgOwor5rCX5YCZ5a2mIDwga2lrb3VnYWt1XCA7Civnl4XpmaLoiLkgPCBieW91aW5zZW5cIDsKK+WbveaWh+enkSA8IGtva3VidW5rYVwgOwor5ouF5b2T6ICFIDwgdGFudG91c2hhXCA7CivmnaXloLTogIUgPCByYWlqb3VzaGFcIDsKK+aJjeanjCA8IHNhaWR6dWNoaVwgOwor5o6S5rC05rqdIDwgaGFpc3Vpa291XCA7Civls7vkuIvliaQgPCBzaHVuZ2V6YWlcIDsKK+WkluWVhumDqCA8IGdhaXNob3VidVwgOwor5rm/5r2kIDwgc2hpdHN1anVuXCA7CivpvLvooZ0gPCBoYW5hdHN1a2lcIDsKK+ato+aWueW9oiA8IHNlaWhvdWtlaVwgOwor5riL57SZIDwgc2hpYnVnYW1pXCA7CivmnIjntYzluK8gPCBnZWtrZWl0YWlcIDsKK+inkuihjOeBryA8IGtha3VhbmRvblwgOwor6Kqy5b606YeRIDwga2FjaG91a2luXCA7CivkuqTmj5voiLkgPCBrb3VrYW5zZW5cIDsKK+S/neeuoeiovCA8IGhva2Fuc2hvdVwgOwor5re75Yqg54mpIDwgdGVua2Ftb25vXCA7CivpvKDorJsgPCBuZXp1bWlrb3VcIDsKK+adpeims+iAhSA8IHJhaWthbnNoYVwgOwor5b6h5a626aiS5YuVIDwgb2llc291ZG91XCA7Civpj6Hmnb8gPCBrYWdhbWlpdGFcIDsKK+e2uue+heaYnyA8IGtpcmFib3NoaVwgOwor5bGx5bKz6YOoIDwgc2FuZ2FrdWJ1XCA7CivnmbrlsZXmgKcgPCBoYXR0ZW5zZWlcIDsKK+epuueptCA8IGthcmFrZXRzdVwgOwor5Y2U5a6a5qGIIDwga3lvdXRlaWFuXCA7Civpuqbpo68gPCBtdWdpbWVzaGlcIDsKK+mLvOiJsiA8IGhhZ2FuZWlyb1wgOwor5rOo5bCE5ZmoIDwgY2h1dXNoYWtpXCA7CivmiZXmmoEgPCBmdXRzdWd5b3VcIDsKK+WPuOazleaoqSA8IHNoaWhvdWtlblwgOwor6Jmr6J67IDwgbXVzaGlrZXJhXCA7CivmraPmlLvms5UgPCBzZWlrb3Vob3VcIDsKK+aJi+aLjeWtkCA8IHRlYnlvdXNoaVwgOwor56S+5Lya6Z2iIDwgc2hha2FpbWVuXCA7CivosaHnmq7nl4UgPCB6b3VoaWJ5b3VcIDsKK+emgeWPjeiogCA8IGtpbmhhbmdlblwgOwor54Sh5Y+M56qTIDwgbXVzb3VtYWRvXCA7CivmmYLplpPlibIgPCBqaWthbndhcmlcIDsKK+eUqOW/g+ajkiA8IHlvdWppbmJvdVwgOwor5YaN5oSf5p+TIDwgc2Fpa2Fuc2VuXCA7Civmr5voo73lk4EgPCBtb3VzZWloaW5cIDsKK+S6jOW6puS4ieW6piA8IG5pZG9zYW5kb1wgOwor6auY56WW6aCt5be+IDwga29zb3p1a2luXCA7CivmoLzntI3luqsgPCBrYWt1bm91a29cIDsKK+e3j+e0ouW8lSA8IHNvdXNha3VpblwgOwor5LqI5a+p5bu3IDwgeW9zaGludGVpXCA7CivojLblsYvphZIgPCBjaGF5YXpha2VcIDsKK+Wbm+WIhuWGhiA8IHNoaWJ1bicnZW5cIDsKK+S9l+S9j+WxhSA8IHdhYml6dW1haVwgOwor54mH5omL5qG2IDwga2F0YXRlb2tlXCA7CivlibXliIrlj7cgPCBzb3VrYW5nb3VcIDsKK+Wbm+WIhuWFrSA8IHNoaWJ1cm9rdVwgOwor56ul5q2MIDwgd2FyYWJldXRhXCA7CivpmLLmvZzntrIgPCBib3VzZW5tb3VcIDsKK+aJk+aTsiA8IGNob3VjaGFrdVwgOwor5ZCN5Yi65YikIDwgbWVpc2hpYmFuXCA7CivmsrPnq6Xlt7sgPCBrYXBwYW1ha2lcIDsKK+WLsuS4gOetiSA8IGt1bicnaXR0b3VcIDsKK+WPjeeJqeWxiyA8IHRhbm1vbm95YVwgOwor5LqI5YKZ6YOo5ZOBIDwgeW9iaWJ1aGluXCA7CivkupLorbLnmoQgPCBnb2pvdXRla2lcIDsKK+S4lueVjOeahCA8IHNla2FpdGVraVwgOwor5b6h6L+35oORIDwgZ29tZWl3YWt1XCA7CivkuInpg6jkvZwgPCBzYW5idXNha3VcIDsKK+a0u+mHjyA8IGthdHN1cnlvdVwgOwor5q2j6Z2i5ZuzIDwgc2hvdW1lbnp1XCA7CivooajlhbfluKsgPCBoeW91Z3VzaGlcIDsKK+S4jemBqeS7uyA8IGZ1dGVraW5pblwgOwor57WM5LyB5bqBIDwga2Vpa2ljaG91XCA7CivpgYvli5XpoJggPCB1bmRvdXJ5b3VcIDsKK+WFiOiIrOadpSA8IHNlbnBhbnJhaVwgOwor5a6a5Yag6KmeIDwgdGVpa2Fuc2hpXCA7Civoh6rlt7HmibnliKQgPCBqaWtvaGloYW5cIDsKK+aOpeWwvui+niA8IHNldHN1YmlqaVwgOwor5rC054Sh5pyIIDwgbWluYWR6dWtpXCA7Civpp5DlnKjlk6EgPCBjaHV1emFpaW5cIDsKK+WZtOWHuiA8IGZ1bnNodXRzdVwgOwor5riL55quIDwgc2hpYnVrYXdhXCA7CivovLjlsL/nrqEgPCB5dW55b3VrYW5cIDsKK+iXgemdtCA8IHdhcmFndXRzdVwgOwor5Zu96Ziy6LK7IDwga29rdWJvdWhpXCA7Civkvo3lvpPplbcgPCBqaWp1dWNob3VcIDsKK+mOluaoiyA8IGt1c2FyaXRvaVwgOwor5rS76Lu4IDwga2F0c3VqaWt1XCA7Civmrrrpoqjmma8gPCBzYXBwdXVrZWlcIDsKK+S4reaUr+mCoyA8IG5ha2FzaGluYVwgOwor6Kqk5oy/5YWlIDwgZ29zb3VueXV1XCA7CivmraPmlZnmjoggPCBzZWlreW91anVcIDsKK+S8keeBq+WxsSA8IGt5dXVrYXphblwgOwor5a2Q5a6I5q2MIDwga29tb3JpdXRhXCA7CivmsbrlrprnqL8gPCBrZXR0ZWlrb3VcIDsKK+mYsueBq+WjgSA8IGJvdWthaGVraVwgOwor5rm/5p2/IDwgc2hpdHN1YmFuXCA7Civmta7ooosgPCB1a2lidWt1cm9cIDsKK+WPsOa5vuS6uiA8IHRhaXdhbmppblwgOwor5rS76LqNIDwga2F0c3V5YWt1XCA7Civml6Xnq6Dml5cgPCBuaXNzaG91a2lcIDsKK+mDqOmaiumVtyA8IGJ1dGFpY2hvdVwgOwor5b6h55yf5b2xIDwgZ29zaGluJydlaVwgOwor6Jmr6IW5IDwgbXVzaGliYXJhXCA7Civlh53lm7rngrkgPCBneW91a290ZW5cIDsKK+aUr+W6l+e2siA8IHNoaXRlbm1vdVwgOwor5pWw6KGo56S6IDwgc3V1aHlvdWppXCA7CivpoqjlkJHoqIggPCBmdXVrb3VrZWlcIDsKK+ibjeWFieadvyA8IGtlaWtvdWJhblwgOwor5paw6IGe6IiXIDwgc2hpbmJ1bmhvXCA7Civopb/ljZfopb8gPCBzZWluYW5zZWlcIDsKK+mBv+mbt+mHnSA8IGhpcmFpc2hpblwgOwor542F5a2Q6IieIDwgc2hpc2hpbWFpXCA7Civku7vmnJ/kuK0gPCBuaW5raWNodXVcIDsKK+aWuemdoumaiiA8IGhvdW1lbnRhaVwgOwor6aKo6Yi06I2JIDwgZnV1cmluc291XCA7Civmm7Lni6zmpb0gPCBreW9rdWdvbWFcIDsKK+ecn+WQkeazlSA8IG1ha2tvdWhvdVwgOwor5ZWG6Ii55peXIDwgc2hvdXNlbmtpXCA7CivpvKDoibIgPCBuZXp1bWlpcm9cIDsKK+azpemdtCA8IGRvcm9ndXRzdVwgOwor56CU5L+u5ZOhIDwga2Vuc2h1dWluXCA7CivoqZXliKToqJggPCBoeW91YmFua2lcIDsKK+aZrumAmuS+vyA8IGZ1dHN1dWJpblwgOwor5Ymv55+l5LqLIDwgZnVrdWNoaWppXCA7Civmr43pm4blm6MgPCBib3NodXVkYW5cIDsKK+S4ieWGoOeOiyA8IHNhbmthbicnb3VcIDsKK+aBi+aEm+imsyA8IHJlbicnYWlrYW5cIDsKK+ethuWiqCA8IGhpdHN1Ym9rdVwgOwor6Yed6bC7IDwgaGFyaXVuYWdpXCA7CivpvLvntrEgPCBoYW5hZHp1bmFcIDsKK+WcsOW9ueaoqSA8IGNoaWVraWtlblwgOwor562G5aGaIDwgZnVkZWR6dWthXCA7Civmma7pgJrkurogPCBmdXRzdXVqaW5cIDsKK+a7neWjuiA8IHRha2l0c3Vib1wgOwor5YaN5Y2U6K2wIDwgc2Fpa3lvdWtpXCA7Civku6Pota3oibIgPCB0YWlzaGFpcm9cIDsKK+aOpeWwvuiqniA8IHNldHN1Ymlnb1wgOwor5YqH5L2c5a62IDwgZ2VraXNha2thXCA7Civph43miKbou4ogPCBqdXVzZW5zaGFcIDsKK+mfs+alvemaiiA8IG9uZ2FrdXRhaVwgOwor5ZGK6YGUIDwga29rdXRhdHN1XCA7Civlho3npoHmraIgPCBzYWlraW5zaGlcIDsKK+eHu+iSuOWJpCA8IGt1bmpvdXphaVwgOwor5rSL6KOB5birIDwgeW91c2Fpc2hpXCA7CivnnJ/mraPpnaIgPCBtYXNob3VtZW5cIDsKK+a8j+WHuiA8IHJvdXNodXRzdVwgOwor562G5ZynIDwgaGl0c3VhdHN1XCA7CivmnIjntYzliY0gPCBnZWtrZWltYWVcIDsKK+eqrualtSA8IGt5dXVreW9rdVwgOwor5L2O5bGx5bivIDwgdGVpemFudGFpXCA7CivlirHmjK/lmaggPCByZWlzaGlua2lcIDsKK+mHkemvsSA8IGtpbnNoYWNoaVwgOwor6Iux6ZuE55qEIDwgZWl5dXV0ZWtpXCA7CivoqJjogIXluK0gPCBraXNoYXNla2lcIDsKK+WBpeW6t+iAhSA8IGtlbmtvdXNoYVwgOwor6IKl5rqA55eHIDwgaGltYW5zaG91XCA7CivmnIDlpKflgKQgPCBzYWlkYWljaGlcIDsKK+ioiOeUu+ahiCA8IGtlaWtha3VhblwgOwor6I+v5Y6z5a6XIDwga2Vnb25zaHV1XCA7CivkuLvopoHngrkgPCBzaHV5b3V0ZW5cIDsKK+WPo+mrrSA8IGt1Y2hpaGlnZVwgOwor6Jmr57GgIDwgbXVzaGlrYWdvXCA7CivmtYHooYAgPCByeXV1a2V0c3VcIDsKK+aGkeeJqSA8IHRzdWtpbW9ub1wgOwor56mN546HIDwgc2VraXJpdHN1XCA7CivkvJrlk6HoqLwgPCBrYWlpbnNob3VcIDsKK+eyvuiWhOWFkCA8IHNlaWhha3VqaVwgOwor5oy/5YWl5ZuzIDwgc291bnl1dXp1XCA7Civph5zpo68gPCBrYW1hbWVzaGlcIDsKK+S4geW5tOiAhSA8IHRlaW5lbnNoYVwgOwor5rex54iqIDwgZnVrYWR6dW1lXCA7Civnq7nluJsgPCBjaGlrdWhha3VcIDsKK+ebo+afu+W9uSA8IGthbnNheWFrdVwgOwor6JaE5YyW57KnIDwgdXN1Z2VzaG91XCA7Civlh7rli6TnsL8gPCBzaHVra2luYm9cIDsKK+S4reWkrue3miA8IGNodXVvdXNlblwgOwor5bGl5q205pu4IDwgcmlyZWtpc2hvXCA7Civms6Hpiq0gPCBhYnVrdXplbmlcIDsKK+mkiuWXo+WtkCA8IHlvdXNoaXNoaVwgOwor5oKq6LOqIDwgYWt1c2hpdHN1XCA7CivlpKfmtbfljp8gPCBvb3VuYWJhcmFcIDsKK+S9juS+oeagvCA8IHRlaWtha2FrdVwgOwor5Lqk6Zqb5LiKIDwga291c2Fpam91XCA7CivpurvooosgPCBhc2FidWt1cm9cIDsKK+WPguiAg+WTgSA8IHNhbmtvdWhpblwgOwor56We57WM56eRIDwgc2hpbmtlaWthXCA7CivlsI/kvZzovrIgPCBrb3Nha3Vub3VcIDsKK+iHqueUu+iHquizmyA8IGppZ2FqaXNhblwgOwor56eB5paH5pu4IDwgc2hpYnVuc2hvXCA7CivmsbrlrprniYggPCBrZXR0ZWliYW5cIDsKK+W/g+S4jeWFqCA8IHNoaW5mdXplblwgOwor5Lmz5bm85YWQIDwgbnl1dXlvdWppXCA7Civopo/liYfmm7ggPCBraXNva3VzaG9cIDsKK+a7neWPoyA8IHRha2lndWNoaVwgOwor5Yqg6Zmk5byPIDwga2Fqb3NoaWtpXCA7CivpvKDnrpcgPCBuZXp1bWl6YW5cIDsKK+a5v+W8jyA8IHNoaXNzaGlraVwgOwor5Y+45rOV5a6YIDwgc2hpaG91a2FuXCA7CivnqYDniakgPCBrb2t1bW90c3VcIDsKK+epuuWvvuWcsCA8IGt1dXRhaWNoaVwgOwor5q2j6KaW55y8IDwgc2Vpc2hpZ2FuXCA7Civml6nmhbbmiKYgPCBzb3VrZWlzZW5cIDsKK+azpemBkyA8IGRvcm9taWNoaVwgOwor5Y+k6Z20IDwgZnVydWd1dHN1XCA7CivmjpjliYrmqZ8gPCBrdXNzYWt1a2lcIDsKK+acqueiuuWumiA8IG1pa2FrdXRlaVwgOwor6auY5p625qmLIDwga291a2FreW91XCA7CivmsojprLEgPCBjaGluJyd1dHN1XCA7CivlgIvliKXljJYgPCBrb2JldHN1a2FcIDsKK+WQm+mBlCA8IGtpbWl0YWNoaVwgOwor5oy/5YWl5Y+lIDwgc291bnl1dWt1XCA7Civpt7LpvLsgPCB3YXNoaWJhbmFcIDsKK+aKmOS8jyA8IHNoYWt1YnVrdVwgOwor6byg56m0IDwgbmV6dW1pYW5hXCA7Civmu5Hlj7AgPCBzdWJlcmlkYWlcIDsKK+aUv+aoqeWFmiA8IHNlaWtlbnRvdVwgOwor5bCE5Yip5b+DIDwgc2hhcmlzaGluXCA7Civnq5zlt7sgPCB0YXRzdW1ha2lcIDsKK+mHo+mQmCA8IHRzdXJpZ2FuZVwgOwor55uj5a+f5Yy7IDwga2Fuc2F0c3VpXCA7CivpgZPljJbmlrkgPCBkb3VrZWdhdGFcIDsKK+WNiuS6jOmHjSA8IGhhbicnbmlqdXVcIDsKK+emgeayu+eUoyA8IGtpbmNoaXNhblwgOwor6aaW5L2N5omT6ICFIDwgc2h1aWRhc2hhXCA7CivljZjoqp7pm4YgPCB0YW5nb3NodXVcIDsKK+eUqOawtOWcsCA8IHlvdXN1aWlrZVwgOwor6LuK6auY55+tIDwgc2hha291dGFuXCA7Civov5HmtbfprZogPCBraW5rYWlneW9cIDsKK+acqOmHkeWcnyA8IG1va3VraW5kb1wgOwor5oyB57aa5oCnIDwgaml6b2t1c2VpXCA7CivlkI3lt6XlpKcgPCBtZWlrb3VkYWlcIDsKK+aUr+mFjeS6uiA8IHNoaWhhaW5pblwgOwor5bm55LqL6ZW3IDwga2FuamljaG91XCA7CivplbfmsLTot68gPCBjaG91c3Vpcm9cIDsKK+W5s+WFmuWToSA8IGhpcmF0b3VpblwgOwor5b6q55Kw57eaIDwganVua2Fuc2VuXCA7CivkuIvliYvkuIogPCBnZWtva3Vqb3VcIDsKK+a6gOWupCA8IG1hbnNoaXRzdVwgOwor5LiK5bGk6aKoIDwgam91c291ZnV1XCA7CivlnKflu7bpi7wgPCBhdHN1ZW5rb3VcIDsKK+WboOaenOW/nOWgsSA8IGluZ2FvdWhvdVwgOwor5rqW5pWZ5ZOhIDwganVua3lvdWluXCA7Civpt6bpt68gPCBtaXNvc2F6YWlcIDsKK+WHueecvOmPoSA8IG91Z2Fua3lvdVwgOwor54mp5L6h6auYIDwgYnVra2FkYWthXCA7Civoqpjmi5DnvaogPCB5dXVrYWl6YWlcIDsKK+err+WlsyA8IGhhc2hpdGFtZVwgOwor5b6q55Kw57O7IDwganVua2Fua2VpXCA7Civph6Pph50gPCB0c3VyaWJhcmlcIDsKK+a0vueUn+eahCA8IGhhc2VpdGVraVwgOwor57Sg5Y+N5b+cIDwgc29oYW4nJ25vdVwgOwor5Zyo6YO36ICFIDwgemFpZ291c2hhXCA7Civph5HpjpYgPCBraW5ndXNhcmlcIDsKK+WMl+a1t+mBkyA8IGhva2thaWRvdVwgOwor5LiL5aWz5LiL55S3IDwgZ2Vqb2dlbmFuXCA7Civmnpfmqo7nl4UgPCByaW5nb2J5b3VcIDsKK+iXpOiUkyA8IGZ1amlkenVydVwgOwor6Jas5LqL5rOVIDwgeWFrdWppaG91XCA7Civnn63mr5vnqK4gPCB0YW5tb3VzaHVcIDsKK+amguW/teirliA8IGdhaW5lbnJvblwgOwor6Ymb6ImyIDwgbmFtYXJpaXJvXCA7CivpgZPlvrPlrrYgPCBkb3V0b2t1a2FcIDsKK+WPguS4juWumCA8IHNhbicneW9rYW5cIDsKK+a4i+afvyA8IHNoaWJ1Z2FraVwgOwor5pyA57WC5qGIIDwgc2Fpc2h1dWFuXCA7CivkuJbnlYzmlrAgPCBzZWthaXNoaW5cIDsKK+WPguiAg+S6uiA8IHNhbmtvdW5pblwgOwor5bGL5Y+w6aqoIDwgeWF0YWlib25lXCA7CivlpKfmrZPov44gPCBkYWlrYW5nZWlcIDsKK+S4iuWxpOmajiA8IGpvdXNvdWthaVwgOwor5LiA5YiH57WMIDwgaXNzYWlreW91XCA7Civlj6TpiYQgPCBmdXJ1dGV0c3VcIDsKK+WGjemFjee9riA8IHNhaWhhaWNoaVwgOwor6IKM6KWm6KKiIDwgaGFkYWp1YmFuXCA7Civlha3op5LlvaIgPCByb2trYWtrZWlcIDsKK+aWsOeUn+WFkCA8IHNoaW5zZWlqaVwgOwor6Yi06JmrIDwgc3V6dW11c2hpXCA7Civphpzmpa3lqaYgPCBzaHVneW91ZnVcIDsKK+WQjOizqiA8IGRvdXNoaXRzdVwgOwor6KOB5Yik5qipIDwgc2FpYmFua2VuXCA7CivlpKfnpZ7lrq4gPCBkYWlqaW5ndXVcIDsKK+ato+aVmeWToSA8IHNlaWt5b3VpblwgOwor5Y+j6YeRIDwga3VjaGlnYW5lXCA7CivnqoHmkoMgPCB0b3RzdWdla2lcIDsKK+aCquaIr+edgCA8IGl0YXp1cmFnaVwgOwor5pi86KGM54GvIDwgaGlydWFuZG9uXCA7CivlnLDlubPnt5ogPCBjaGloZWlzZW5cIDsKK+WuiealveakheWtkCA8IGFucmFrdWlzdVwgOwor6YWN6Zu757eaIDwgaGFpZGVuc2VuXCA7Civnmb3poK3nv4EgPCBoYWt1dG91b3VcIDsKK+eZuuWwhOWPsCA8IGhhc3NoYWRhaVwgOwor6buS57iBIDwga3Vyb2J1Y2hpXCA7CivkuLvpmaPlnLAgPCBzaHVqaW5jaGlcIDsKK+aEn+aDs+aWhyA8IGthbnNvdWJ1blwgOwor5raI5YyW57O7IDwgc2hvdWtha2VpXCA7Civpjq7lnKcgPCBjaGluJydhdHN1XCA7CivkuLvoprPmgKcgPCBzaHVrYW5zZWlcIDsKK+Wkp+azleW7tyA8IGRhaWhvdXRlaVwgOwor5pyA57WC5pelIDwgc2Fpc2h1dWJpXCA7CivmsbrlrprmqKkgPCBrZXR0ZWlrZW5cIDsKK+WWquWksSA8IHNvdXNoaXRzdVwgOwor5YWO5bCP5bGLIDwgdXNhZ2lnb3lhXCA7CivlpJrnpZ7oq5YgPCB0YXNoaW5yb25cIDsKK+WnlOWToeS7mOiolyA8IGlpbmZ1dGFrdVwgOwor5b6M5Y2K55SfIDwga291aGFuc2VpXCA7CivnqK7msrkgPCB0YW5lYWJ1cmFcIDsKK+Wil+iogueJiCA8IHpvdXRlaWJhblwgOwor5omA5Zyo5ZywIDwgc2hvemFpY2hpXCA7Civngb3lrrPlnLAgPCBzYWlnYWljaGlcIDsKK+a2iOWMlueuoSA8IHNob3VrYWthblwgOwor5bm05Luj6aCGIDwgbmVuZGFpanVuXCA7CivnpZ7ntYzngo4gPCBzaGlua2VpZW5cIDsKK+WlieS7leiAhSA8IGhvdXNoaXNoYVwgOwor5ZSQ5quDIDwga2FyYWJpdHN1XCA7Civlho3lj5fmtbggPCBzYWlqdXNoaW5cIDsKK+WPo+i7vSA8IGt1Y2hpZ2FydVwgOwor56qu5bGIIDwga3l1dWt1dHN1XCA7CivkuojlgpnpgYvli5UgPCB5b2JpdW5kb3VcIDsKK+S6jOS6uuWJjSA8IGZ1dGFyaW1hZVwgOwor5a+M5aOr5aO6IDwgZnVqaXRzdWJvXCA7CivpgbrnlKPnrqHnkIYgPCBpc2Fua2FucmlcIDsKK+eZvuiyqOW6lyA8IGh5YWtrYXRlblwgOwor5qiq5pat5bmVIDwgb3VkYW5tYWt1XCA7CivkuozkurrliIYgPCBmdXRhcmlidW5cIDsKK+e0jeeojuiAhSA8IG5vdXplaXNoYVwgOwor6YW45oCn57SZIDwgc2Fuc2Vpc2hpXCA7Civlt6blj7Pou7ggPCBzYXl1dWppa3VcIDsKK+WkqeawtOahtiA8IHRlbnN1aW9rZVwgOwor6buS56u5IDwga3Vyb2NoaWt1XCA7Civlj4vpgZQgPCB0b21vZGFjaGlcIDsKK+WTgeeJqSA8IHNoaW5hbW9ub1wgOwor6LK06YeR5bGeIDwga2lraW56b2t1XCA7Civms6LnvoXonJwgPCBoYXJhbWl0c3VcIDsKK+eLqeeMn+acnyA8IHNodXJ5b3VraVwgOwor5paH5rOV5pu4IDwgYnVucG91c2hvXCA7Civnq7nlhYkgPCB0YWtlbWl0c3VcIDsKK+iXgeiLniA8IHdhcmFkenV0b1wgOwor5Y2g6aCY5LiLIDwgc2VucnlvdWthXCA7Civnh4PnhLzngokgPCBuZW5zaG91cm9cIDsKK+WPpOethuWutiA8IGtvaGl0c3VrYVwgOwor6Ziy6KGb5bqBIDwgYm91ZWljaG91XCA7CivlpKfnpa3lj7ggPCBkYWlzYWlzaGlcIDsKK+WUkOadviA8IGthcmFtYXRzdVwgOwor6Zub572M57KfIDwgaGluYWdlc2hpXCA7CivlhajlpKnlgJkgPCB6ZW50ZW5rb3VcIDsKK+i2heefreazoiA8IGNob3V0YW5wYVwgOwor5pS+5bCE6IO9IDwgaG91c2hhbm91XCA7CivliY3np5HogIUgPCB6ZW5rYW1vbm9cIDsKK+mVt+mHjuecjCA8IG5hZ2Fub2tlblwgOwor55+l5oG154axIDwgY2hpZW5ldHN1XCA7CivljIXoo4XntJkgPCBob3Vzb3VzaGlcIDsKK+S6ieitsOihjOeCuiA8IHNvdWdpa291aVwgOwor57Gz55Sj5ZywIDwgYmVpc2FuY2hpXCA7Civlhavop5LlvaIgPCBoYWtrYWtrZWlcIDsKK+S6lOWkp+a0siA8IGdvZGFpc2h1dVwgOwor5paw5a2m5pyfIDwgc2hpbmdha2tpXCA7CivpurvlqYbosYbohZAgPCBtxIFib2RvdWZ1XCA7CivphY3pm7vnm6QgPCBoYWlkZW5iYW5cIDsKK+iLseaWh+WtpiA8IGVpYnVuZ2FrdVwgOwor6JqK5p+xIDwga2FiYXNoaXJhXCA7CivlvqHlhYTlvJ8gPCBnb2t5b3VkYWlcIDsKK+ijgeWIpOaJgCA8IHNhaWJhbnNob1wgOwor5Y+C6Zmi6YG4IDwgc2FuJydpbnNlblwgOwor56u55LiyIDwgdGFrZWd1c2hpXCA7Civou43kurrpoqggPCBndW5qaW5mdXVcIDsKK+eEoeW+l+eCuSA8IG11dG9rdXRlblwgOwor6KuW55CG55qEIDwgcm9ucml0ZWtpXCA7Civpu5Lnmb0gPCBrb2t1Ynlha3VcIDsKK+WKg+acn+eahCA8IGtha2tpdGVraVwgOwor56We572wIDwgc2hpbmJhdHN1XCA7CivmsrnonYkgPCBhYnVyYXplbWlcIDsKK+S4ieecgeWggiA8IHNhbnNlaWRvdVwgOwor5Y+W6KqsIDwgdG9yaXNldHN1XCA7CivomZrlvLHlhZAgPCBreW9qYWt1amlcIDsKK+aWh+WMluaYoOeUuyA8IGJ1bmthZWlnYVwgOwor5b2T5LqL5Zu9IDwgdG91amlrb2t1XCA7Civoq5bkuonogIUgPCByb25zb3VzaGFcIDsKK+aUvuWwhOe3miA8IGhvdXNoYXNlblwgOwor6Ju45aO8IDwgdGFrb3RzdWJvXCA7CivltIfmi53ogIUgPCBzdXVoYWlzaGFcIDsKK+WBpeW6t+azlSA8IGtlbmtvdWhvdVwgOwor5oCq5paH5pu4IDwga2FpYnVuc2hvXCA7CivpgK7mjZXmrbQgPCB0YWlob3Jla2lcIDsKK+ethumgreiAhSA8IGhpdHRvdXNoYVwgOwor5rmn5Ye6IDwgeW91c2h1dHN1XCA7CivnqbrlrqQgPCBrdXVzaGl0c3VcIDsKK+S5vueUn+WnnCA8IGthbnNob3VnYVwgOwor55Sf5q6L6ICFIDwgc2VpemFuc2hhXCA7Civmt6HmsLTprZogPCB0YW5zdWlneW9cIDsKK+i0iOetlOWTgSA8IHpvdXRvdWhpblwgOwor5Lqk5o+b5omLIDwga291a2Fuc2h1XCA7Civom43lhYnkvZMgPCBrZWlrb3V0YWlcIDsKK+awt+eCueS4iyA8IGh5b3V0ZW5rYVwgOwor6KqY5ouQ54qvIDwgeXV1a2FpaGFuXCA7CivnhY7njonlrZAgPCBpcml0YW1hZ29cIDsKK+iIiOS/oeaJgCA8IGtvdXNoaW5qb1wgOwor55SY5ZGz5paZIDwga2FubWlyeW91XCA7CivoqabpqJPntJkgPCBzaGlrZW5zaGlcIDsKK+iCieilpuiioiA8IG5pa3VqdWJhblwgOwor55uj5a6I5Lq6IDwga2Fuc2h1bmluXCA7CivlopflpKflj7cgPCB6b3VkYWlnb3VcIDsKK+a7kei1sOi8qiA8IGthc3NvdXJpblwgOwor5YaN5Ym16YCgIDwgc2Fpc291em91XCA7CivmiLjnsY3ms5UgPCBrb3Nla2lob3VcIDsKK+mMmOW9oiA8IHRzdW11Z2F0YVwgOwor6I2S54mp5bGLIDwgYXJhbW9ub3lhXCA7CivkuK3opb/pg6ggPCBjaHV1c2VpYnVcIDsKK+iHquWLleeahCA8IGppZG91dGVraVwgOwor5YCf5a625Lq6IDwgc2hha2thbmluXCA7Civms5Xlrabpg6ggPCBob3VnYWt1YnVcIDsKK+i7jeizh+mHkSA8IGd1bnNoaWtpblwgOwor5paH5rOV5oCnIDwgYnVucG91c2VpXCA7CivovrLlpKvnl4cgPCBub3VmdXNob3VcIDsKK+adkOaWmeiyuyA8IHphaXJ5b3VoaVwgOwor5YKs5raZ6YqDIDwgc2FpcnVpanV1XCA7CivlpInmj5vlrZAgPCBoZW5rYW5zaGlcIDsKK+adkOacqOWxiyA8IHphaW1va3V5YVwgOwor6LKn56qu5YyWIDwgaGlua3l1dWthXCA7Civml6nlkIjngrkgPCBoYXlhZ2F0ZW5cIDsKK+i7iummrOizgyA8IHNoYWJhY2hpblwgOwor56uc6aiO5YW1IDwgcnl1dWtpaGVpXCA7CivlnJ/lj7Dnn7MgPCBkb2RhaWlzaGlcIDsKK+ippumok+euoSA8IHNoaWtlbmthblwgOwor5aSn5Y+N5a++IDwgZGFpaGFudGFpXCA7CivpnZ7lm73msJEgPCBoaWtva3VtaW5cIDsKK+Wwj+ixhumxkiA8IGF6dWtpbWFzdVwgOwor6I6i6LGM6LGGIDwgc2F5YWVuZG91XCA7CivkuKHmm7/mqZ8gPCByeW91Z2Fla2lcIDsKK+e2v+eBq+iWrCA8IG1lbmtheWFrdVwgOwor5Lq65rCR6LuNIDwgamlubWluZ3VuXCA7CivmrKDli6TogIUgPCBrZWtraW5zaGFcIDsKK+Wwj+S9nOexsyA8IGtvc2FrdW1haVwgOwor5rOl5p2/5bKpIDwgZGVpYmFuZ2FuXCA7Civmk6zpnanntJkgPCBnaWtha3VzaGlcIDsKK+iytOmHjeWTgSA8IGtpY2hvdWhpblwgOwor54Gr5bGx56SrIDwga2F6YW5yZWtpXCA7CivpoZTlhpnnnJ8gPCBrYW9qYXNoaW5cIDsKK+WFsea8lOiAhSA8IGt5b3VlbnNoYVwgOwor5pWR6K2354+tIDwga3l1dWdvaGFuXCA7Civph5HolJMgPCBrYW5lZHp1cnVcIDsKK+WGjeW+queSsCA8IHNhaWp1bmthblwgOwor5oSP5ZGz5YaF5a65IDwgaW1pbmFpeW91XCA7CivojbvmsZ/nr4AgPCBvZ2llYnVzaGlcIDsKK+mbhuWFieWZqCA8IHNodXVrb3VraVwgOwor5LiA6YOo5YiGIDwgaWNoaWJ1YnVuXCA7Civph6PoiLkgPCB0c3VyaWJ1bmVcIDsKK+ijheeUsui7iiA8IHNvdWtvdXNoYVwgOwor5paw5LiW57SAIDwgc2hpbnNlaWtpXCA7CivkuojlgpnliKTkuosgPCB5b2JpaGFuamlcIDsKK+mJoueJqSA8IGhhY2hpbW9ub1wgOwor5rWa5rirIDwgc2h1bnNldHN1XCA7Civmt5HlvrMgPCBzaHVrdXRva3VcIDsKK+elneemjyA8IHNodWt1ZnVrdVwgOwor6KOB5Yik5a6YIDwgc2FpYmFua2FuXCA7Civlh7rli6Tml6UgPCBzaHVra2luYmlcIDsKK+mAgeS/oeapnyA8IHNvdXNoaW5raVwgOwor5rKh6JC9IDwgYm90c3VyYWt1XCA7CivnqpPlj6MgPCBtYWRvZ3VjaGlcIDsKK+mbkeWxheWcsCA8IHpha2t5b2NoaVwgOwor6Iux5pWw5Zu9IDwgZWlzdXVrb2t1XCA7Civkv53nrqHmlpkgPCBob2thbnJ5b3VcIDsKK+atpuWutuaZguS7oyA8IGJ1a2VqaWRhaVwgOwor5Y2K6LK055+zIDwgaGFua2lzZWtpXCA7Civou43nlKjmqZ8gPCBndW4nJ3lvdWtpXCA7Civlk4Hmn4QgPCBzaGluYWdhcmFcIDsKK+WMu+eZgumBjuiqpCA8IGlyeW91a2Fnb1wgOwor6JmO6JC956ybIDwgbW9nYXJpYnVlXCA7CivnlJ/pgoTogIUgPCBzZWlrYW5zaGFcIDsKK+aHh+irh+S8miA8IGtvbmRhbmthaVwgOwor5pyq5YWs6KGoIDwgbWlrb3VoeW91XCA7Civopb/mtIvkurogPCBzZWl5b3VqaW5cIDsKK+eUsOiIjuiAhSA8IGluYWthbW9ub1wgOwor5ZC4552AIDwga3l1dWNoYWt1XCA7CivmtojljJbmtrIgPCBzaG91a2Fla2lcIDsKK+atpuWutuaUv+ayuyA8IGJ1a2VzZWlqaVwgOwor5aWz546L6Zmb5LiLIDwgam9vdWhlaWthXCA7CivnqbTlsYXkurogPCBrZWtreW9qaW5cIDsKK+WmqOalreWToSA8IGJvdWd5b3VpblwgOwor6aKo5ZGC5pW3IDwgZnVyb3NoaWtpXCA7Civlj6PohIcgPCBrdWNoaXdha2lcIDsKK+S9leabnOaXpSA8IG5hbicneW91YmlcIDsKK+itpuaIkue3miA8IGtlaWthaXNlblwgOwor56K66KqsIDwga2FrdXNldHN1XCA7CivkuqTmj5vlrKIgPCBrb3VrYW5qb3VcIDsKK+Wkp+mBk+iKuCA8IGRhaWRvdWdlaVwgOwor5YGc5q2i57eaIDwgdGVpc2hpc2VuXCA7CivoloTnt5EgPCB1c3VtaWRvcmlcIDsKK+WTgeaVsCA8IHNoaW5ha2F6dVwgOwor5YuJ5by35a62IDwgYmVua3lvdWthXCA7CivmtarmvKvnmoQgPCByb21hbnRla2lcIDsKK+WLp+S4lue4kiA8IGthbnpleW9yaVwgOwor56u557Sw5belIDwgdGFrZXphaWt1XCA7CivnlKPljbXlj6MgPCBzYW5yYW5rb3VcIDsKK+aEn+WLleipniA8IGthbmRvdXNoaVwgOwor5rC05Zyn5qmfIDwgc3VpYXRzdWtpXCA7Civpn7Pmpb3npa0gPCBvbmdha3VzYWlcIDsKK+m5v+eariA8IHNoaWthZ2F3YVwgOwor6buZ5q66IDwgbW9rdXNhdHN1XCA7Civkurrmg4XmnKwgPCBuaW5qb3Vib25cIDsKK+eah+mciuauvyA8IGtvdXJlaWRlblwgOwor5oGQ57iuIDwga3lvdXNodWt1XCA7Civkvb/lkb3ogIUgPCBzaGltZWlzaGFcIDsKK+eqgeWHuiA8IHRvc3NodXRzdVwgOwor5Luj55So5ZOBIDwgZGFpeW91aGluXCA7CivokYnoj5zpoZ4gPCB5b3VzYWlydWlcIDsKK+mDvemiqCA8IG1peWFrb2Z1dVwgOwor5rK557OfIDwgYWJ1cmFrYXN1XCA7CivlhpnnnJ/mqZ8gPCBzaGFzaGlua2lcIDsKK+awtOizqiA8IHN1aXNoaXRzdVwgOwor55S35LyK6YGUIDwgb3Rva29kYXRlXCA7CivlhbXnq5nnt5ogPCBoZWl0YW5zZW5cIDsKK+W4r+mbu+S9kyA8IHRhaWRlbnRhaVwgOwor56qB5YWlIDwgdG90c3VueXV1XCA7CivmlofljJbnmoQgPCBidW5rYXRla2lcIDsKK+acqueZuuihqCA8IG1paGFwcHlvdVwgOwor5YWI5L2P5rCRIDwgc2VuanV1bWluXCA7CivpgJTkuIrlm70gPCB0b2pvdWtva3VcIDsKK+Wkp+awl+axmuafkyA8IHRhaWtpb3NlblwgOwor5Y2K6Z+z6ZqOIDwgaGFuJydvbmthaVwgOwor55m95pyo5bGLIDwgc2hpcm9raXlhXCA7Civku5Xmp5jmm7ggPCBzaGl5b3VzaG9cIDsKK+awkeS6i+eahCA8IG1pbmppdGVraVwgOwor5oiQ5bGk5ZyPIDwgc2Vpc291a2VuXCA7CivokrjmsJflnKcgPCBqb3VraWF0c3VcIDsKK+S4oeabv+aJgCA8IHJ5b3VnYWVqb1wgOwor56ig5a+GIDwgY2hvdW1pdHN1XCA7Civpu5LmqKsgPCBrdXJvZ2FzaGlcIDsKK+a0u+attCA8IGthdHN1cmVraVwgOwor5b6M5Y2K5oimIDwga291aGFuc2VuXCA7Civlj6PntIUgPCBrdWNoaWJlbmlcIDsKK+WPs+erryA8IG1pZ2loYXNoaVwgOwor5bm95a+C5ZGzIDwgeXV1amFrdW1pXCA7CivluJ3njovlraYgPCB0ZWlvdWdha3VcIDsKK+iyr+awtOaxoCA8IGNob3N1aWNoaVwgOwor6Jas55O2IDwga3VzdXJpYmluXCA7Civlk7LlraYgPCB0ZXRzdWdha3VcIDsKK+aWsOS4lueVjCA8IHNoaW5zZWthaVwgOwor5ZG95Luk5rOVIDwgbWVpcmVpaG91XCA7Civln7rnpI7lt6XkuosgPCBraXNva291amlcIDsKK+ePvuWDj+a2siA8IGdlbnpvdWVraVwgOwor6Kaz6Kan6LuKIDwga2FucmFuc2hhXCA7CivkvJrnpL7okawgPCBrYWlzaGFzb3VcIDsKK+mJhOa4iyA8IGthbmFzaGlidVwgOwor56aB6YWS5rOVIDwga2luc2h1aG91XCA7CivohLPohpzngo4gPCBub3VtYWt1ZW5cIDsKK+WPjue4riA8IHNodXVzaHVrdVwgOwor5Y+w56ekIDwgZGFpYmFrYXJpXCA7Civmlofpg6jnnIEgPCBtb25idXNob3VcIDsKK+i7jeS6i+mAmiA8IGd1bmppdHN1dVwgOwor6ISz6IWr55iNIDwgbm91c2h1eW91XCA7CivkuJbnlYzkuIAgPCBzZWthaWljaGlcIDsKK+W/heiqrSA8IGhpdHN1ZG9rdVwgOwor5Y2a6K2YIDwgaGFrdXNoaWtpXCA7Civlho3liIbphY0gPCBzYWlidW5wYWlcIDsKK+aOm+W4g+WboyA8IGtha2VidXRvblwgOwor5aSW5rSL6Ii5IDwgZ2FpeW91c2VuXCA7Civpu5Lmnb4gPCBrdXJvbWF0c3VcIDsKK+e1hOiBt+WbsyA8IHNvc2hva3V6dVwgOwor54Sh55CG5b6A55SfIDwgbXVyaW91am91XCA7CivkuqTmj5vlk4EgPCBrb3VrYW5oaW5cIDsKK+eBq+mjn+mzpSA8IGhpa3VpZG9yaVwgOwor6LKv5rC05qe9IDwgY2hvc3Vpc291XCA7CivmtbfmsLTprZogPCBrYWlzdWlneW9cIDsKK+eyvumAsuaXpSA8IHNob3VqaW5iaVwgOwor5Y2T6K2YIDwgdGFrdXNoaWtpXCA7CivolqzniakgPCB5YWt1YnV0c3VcIDsKK+S4ieiJsuaXlyA8IHNhbnNob2traVwgOwor6YCD5Lqh6ICFIDwgdG91Ym91c2hhXCA7CivpgZPlhbfnrrEgPCBkb3VndWJha29cIDsKK+WHuuW7t+aXpSA8IHNodXR0ZWliaVwgOwor55S75a2m57SZIDwgZ2FnYWt1c2hpXCA7CivmsLfonZUgPCBoeW91c2hva3VcIDsKK+iyr+iUteaJgCA8IGNob3pvdXNob1wgOwor5p2x5rW36YGTIDwgdG91a2FpZG91XCA7CivkuqTmj5vlj7AgPCBrb3VrYW5kYWlcIDsKK+aIpuaZguS4rSA8IHNlbmppY2h1dVwgOwor5Y2T6KqsIDwgdGFrdXNldHN1XCA7Civpu5LmmJ8gPCBrdXJvYm9zaGlcIDsKK+a3t+WIhuaVsCA8IGtvbmJ1bnN1dVwgOwor55Sf55+z54GwIDwgc2Vpc2Vra2FpXCA7CivkuI3mpJzmnZ8gPCBmdWtlbnNva3VcIDsKK+Wwj+advuiPnCA8IGtvbWF0c3VuYVwgOwor6LSI5ZGI6ICFIDwgem91dGVpc2hhXCA7CivpoZ7mpoLlv7UgPCBydWlnYWluZW5cIDsKK+S7u+WkqeWggiA8IG5pbnRlbmRvdVwgOwor5Y2X5pa555SjIDwgbmFucG91c2FuXCA7CivntZDntI3ph5EgPCB5dWlub3VraW5cIDsKK+engOaKnCA8IHNodXViYXRzdVwgOwor5b+D6KGAIDwgc2hpbmtldHN1XCA7CivlpKrliIDnrYsgPCB0YWNoaXN1amlcIDsKK+awtOiZqyA8IG1penVtdXNoaVwgOwor6JST6I2JIDwgdHN1cnVrdXNhXCA7CivlvLfpo68gPCBrb3dhbWVzaGlcIDsKK+eGn+Wtl+iokyA8IGp1a3VqaWt1blwgOwor5aOw5piO5pu4IDwgc2VpbWVpc2hvXCA7CivllY/poYzngrkgPCBtb25kYWl0ZW5cIDsKK+WIhuW3peWgtCA8IGJ1bmtvdWpvdVwgOwor5a6a5bm05Yi2IDwgdGVpbmVuc2VpXCA7CivlnLDlhYPntJkgPCBqaW1vdG9zaGlcIDsKK+mgkOiol+mHkSA8IHlvdGFrdWtpblwgOwor6Ziy56m656CyIDwgYm91a3V1aG91XCA7CivpnZnlnKfmr5QgPCBzZWlhdHN1aGlcIDsKK+iRm+mkhSA8IGt1enVtb2NoaVwgOwor5Zue6aGn6YyyIDwga2Fpa29yb2t1XCA7CivptonosYYgPCB1enVyYW1hbWVcIDsKK+S4oeabv+WxiyA8IHJ5b3VnYWV5YVwgOwor5Lq65rCX6ICFIDwgbmlua2ltb25vXCA7CivkuI3oia/lk4EgPCBmdXJ5b3VoaW5cIDsKK+Wwj+S+v+aJgCA8IHNob3ViZW5qb1wgOwor5b6q55Kw5oCnIDwganVua2Fuc2VpXCA7CivllYbnlKjljJYgPCBzaG91eW91a2FcIDsKK+S6pOaPm+WGhiA8IGtvdWthbicnZW5cIDsKK+ippumok+azlSA8IHNoaWtlbmhvdVwgOwor5a2m5ZyS56WtIDwgZ2FrdWVuc2FpXCA7CivkvZXmmYLmmYLliIYgPCBpdHN1amlidW5cIDsKK+mHkeebpSA8IGthbmFkYXJhaVwgOwor5Y+j55mWIDwga3VjaGlndXNlXCA7CivnrKzlha3mhJ8gPCBkYWlyb2trYW5cIDsKK+iyp+awkeihlyA8IGhpbm1pbmdhaVwgOwor5ZG95Luk5pu4IDwgbWVpcmVpc2hvXCA7CivljYrlsI7kvZMgPCBoYW5kb3V0YWlcIDsKK+efs+mgrSA8IGlzaGlhdGFtYVwgOwor6bOl6buQIDwgdG9yaW1vY2hpXCA7Civmtpnlo7AgPCBuYW1pZGFnb2VcIDsKK+WFteWZqOW7oCA8IGhlaWtpc2hvdVwgOwor6JC96auqIDwgcmFrdWhhdHN1XCA7Civoo4HliKTkuIogPCBzYWliYW5qb3VcIDsKK+WjsuaYpeWppiA8IGJhaXNodW5wdVwgOwor5YuF6aGNIDwgY2hva3VnYWt1XCA7CivphY3pm7vmiYAgPCBoYWlkZW5zaG9cIDsKK+ekvuS6pOeVjCA8IHNoYWtvdWthaVwgOwor5YSq5Yud5peXIDwgeXV1c2hvdWtpXCA7CivmiYvlk4HluKsgPCB0ZWppbmFzaGlcIDsKK+mrhOiGnOeCjiA8IHp1aW1ha3VlblwgOwor5L+u6YGT6ZmiIDwgc2h1dWRvdWluXCA7CivljbXoibIgPCB0YW1hZ29pcm9cIDsKK+a1t+ibh+W6pyA8IHVtaWhlYml6YVwgOwor56iy5YWJIDwgaW5hYmlrYXJpXCA7Civlkb3ku6TmlocgPCBtZWlyZWlidW5cIDsKK+adsea0i+miqCA8IHRvdXlvdWZ1dVwgOwor5byf5oGv5a2QIDwgb3RvbXVzdWtvXCA7CivkupTlpKflm70gPCBnb2RhaWtva3VcIDsKK+aOpemqqOWMuyA8IHNla2tvdHN1aVwgOwor5pyb6YGg6Y+hIDwgYm91ZW5reW91XCA7CivmooXpm6jnqbogPCB0c3V5dXpvcmFcIDsKK+W3peWToeWvriA8IGtvdWlucnlvdVwgOwor54Sh6YGK55eFIDwgbXV5dXVieW91XCA7Civmrr/pgZQgPCB0b25vdGFjaGlcIDsKK+Wbvemam+WMliA8IGtva3VzYWlrYVwgOwor6ama55Ww55qEIDwga3lvdWl0ZWtpXCA7CivokL3po74gPCByYWt1c2hva3VcIDsKK+mWouadseW8gSA8IGthbnRvdWJlblwgOwor55u45LqS5L6d5a2YIDwgc291Z29pem9uXCA7CivopIflkIjoqp4gPCBmdWt1Z291Z29cIDsKK+W8mOa4iOS8miA8IGtvdXNhaWthaVwgOwor6Iez6L+R5by+IDwgc2hpa2luZGFuXCA7CivmnKzlubTluqYgPCBob24nJ25lbmRvXCA7CivmlZHorbfmiYAgPCBreXV1Z29zaG9cIDsKK+ayiOedgCA8IGNoaW5jaGFrdVwgOwor5ZGR5rCX6ICFIDwgbm9ua2ltb25vXCA7CivlsI/kvZzmqKkgPCBrb3Nha3VrZW5cIDsKK+S7o+eQhuavjSA8IGRhaXJpaGFoYVwgOwor5YiG55WM57eaIDwgYnVua2Fpc2VuXCA7Civnq6/looPmnJ8gPCBoYXpha2Fpa2lcIDsKK+iqnua6kOWtpiA8IGdvZ2VuZ2FrdVwgOwor5b+D6Zu75ZuzIDwgc2hpbmRlbnp1XCA7CivlgaXlurflnLAgPCBrZW5rb3VjaGlcIDsKK+iqnuW9meimj+WJhyA8IGdvaWtpc29rdVwgOwor5rCP5a2Q5pytIDwgdWppa29mdWRhXCA7Civoq7jllY/poYwgPCBzaG9tb25kYWlcIDsKK+WPo+WUh+acnyA8IGtvdXNoaW5raVwgOwor5bCG5qOL55ukIDwgc2hvdWdpYmFuXCA7CivnjYXlrZDllJAgPCBzaGlzaGl0b3VcIDsKK+W5s+S/oeW+kiA8IGhlaXNoaW50b1wgOwor56Wl5pyIIDwgc2hvdXRzdWtpXCA7CivlpKfmsJflnKcgPCB0YWlraWF0c3VcIDsKK+Wwhui7jeWutiA8IHNob3VndW5rZVwgOwor5Y2D5Luj57SZIDwgY2hpeW9nYW1pXCA7CivkuLvmiKboq5YgPCBzaHVzZW5yb25cIDsKK+WKo+etieeUnyA8IHJldHRvdXNlaVwgOwor5paw5a2X5L2TIDwgc2hpbmppdGFpXCA7Civlj47njocgPCBzaHV1cml0c3VcIDsKK+e0jeWTgeabuCA8IG5vdWhpbnNob1wgOwor55qH5aSq5a2QIDwga291dGFpc2hpXCA7Civnorrnq4sgPCBrYWt1cml0c3VcIDsKK+mokuaTvue9qiA8IHNvdWpvdXphaVwgOwor5Y2K5a6Y5aCxIDwgaGFua2FucG91XCA7CivlkIzkvLTogIUgPCBkb3VoYW5zaGFcIDsKK+a1t+m8oOadvyA8IG5hbWFrb2JhblwgOwor5YeG5aOr5a6YIDwganVuc2hpa2FuXCA7Civlrp/pqJPogIUgPCBqaWtrZW5zaGFcIDsKK+S7o+eQhualrSA8IGRhaXJpZ3lvdVwgOwor5LiA5qyh5YWDIDwgaWNoaWppZ2VuXCA7CivnlKjnm4rmqKkgPCB5b3Vla2lrZW5cIDsKK+S4iuiFleetiyA8IGpvdXdhbmtpblwgOwor5Y+C5pS/5qipIDwgc2Fuc2Vpa2VuXCA7Civlt6HnpLzogIUgPCBqdW5yZWlzaGFcIDsKK+Wun+mok+e+pCA8IGppa2tlbmd1blwgOwor56m65pmv5rCXIDwga2FyYWdlaWtpXCA7CivljaDogIUgPCB1cmFuYWlzaGFcIDsKK+WGmeecn+WutiA8IHNoYXNoaW5rYVwgOwor6LuK5qSF5a2QIDwga3VydW1haXN1XCA7Civmj67mr6vmlpkgPCBraWdvdXJ5b3VcIDsKK+iHquW3seW8geittyA8IGppa29iZW5nb1wgOwor6K2m5ZGK6Z+zIDwga2Vpa29rdW9uXCA7CivmlZnmjojpmaMgPCBreW91anVqaW5cIDsKK+WIneS4g+aXpSA8IHNob25hbm9rYVwgOwor5a6J5b+D5oSfIDwgYW5zaGlua2FuXCA7Civlv6Dnr4AgPCBjaHV1c2V0c3VcIDsKK+mJouW3uyA8IGhhY2hpbWFraVwgOwor5aSn5YWl6YGTIDwgb29ueXV1ZG91XCA7CivnpL7kvJrmgqogPCBzaGFrYWlha3VcIDsKK+WShOWutiA8IGhhbmFzaGlrYVwgOwor5Li76KO95ZOBIDwgc2h1c2VpaGluXCA7CivnhKHmsJflipsgPCBtdWtpcnlva3VcIDsKK+ekvuS8muaApyA8IHNoYWthaXNlaVwgOwor6ISx6ISC57a/IDwgZGFzc2hpbWVuXCA7CivmsJfosaHlj7AgPCBraXNob3VkYWlcIDsKK+WRveS7pOW9oiA8IG1laXJlaWtlaVwgOwor6KuW55CG5a2mIDwgcm9ucmlnYWt1XCA7Civlrp/kvZPoq5YgPCBqaXR0YWlyb25cIDsKK+Wwj+S8mua0viA8IHNob3VrYWloYVwgOwor5ZCM5YCk5oCnIDwgZG91Y2hpc2VpXCA7CivphbjmgKflsqkgPCBzYW5zZWlnYW5cIDsKK+efjemRoCA8IGtha3VzaGFrdVwgOwor5LiL6Laz55WqIDwgZ2Vzb2t1YmFuXCA7CivkupTljYHpn7Plm7MgPCBnb2p1dW9uenVcIDsKK+aWpeWAmeWFtSA8IHNla2tvdWhlaVwgOwor5aW95b2x6Z+/IDwga291ZWlreW91XCA7CivnlJ/ljJblraYgPCBzZWlrYWdha3VcIDsKK+ippuS5l+i7iiA8IHNoaWpvdXNoYVwgOwor5Zyn5Yi255qEIDwgYXNzZWl0ZWtpXCA7Civngq3phbjntJkgPCB0YW5zYW5zaGlcIDsKK+WIqeS7luS4u+e+qSA8IHJpdGFzaHVnaVwgOwor5YaN5b6T5byfIDwgc2FpanV1dGVpXCA7CivkvZnoqIjogIUgPCB5b2tlaW1vbm9cIDsKK+avkuiZqyA8IGRva3VtdXNoaVwgOwor5LiN5a+d55WqIDwgZnVzaGluYmFuXCA7CivnkIblsYjlsYsgPCByaWt1dHN1eWFcIDsKK+S/neeuoeS6uiA8IGhva2FuJyduaW5cIDsKK+WEquiJr+mmrCA8IHl1dXJ5b3ViYVwgOwor6YGL6Ly46YePIDwgdW4nJ3l1cnlvdVwgOwor5Y2T57W2IDwgdGFrdXpldHN1XCA7CivlpKrlubPmtIsgPCB0YWloZWl5b3VcIDsKK+iyr+iUteWTgSA8IGNob3pvdWhpblwgOwor5Y2Y57OW6aGeIDwgdGFudG91cnVpXCA7Civlj5bmtoggPCB0b3Jpa2VzaGlcIDsKK+iBmualveesrCA8IGp1cmFrdWRhaVwgOwor55Sf5Y2K5Y+vIDwgbmFtYWhhbmthXCA7Civlkajlr4YgPCBzaHV1bWl0c3VcIDsKK+iSn+iSuyA8IGtvbicnbnlha3VcIDsKK+WNlOitsOaJgCA8IGt5b3VnaXNob1wgOwor5LuK5bm05bqmIDwga29uJyduZW5kb1wgOwor5ZCE5pyIIDwga2FrdXRzdWtpXCA7CivmrrXooosgPCBkYW5idWt1cm9cIDsKK+ekvuS8muWxpCA8IHNoYWthaXNvdVwgOwor5oCd5pil5pyfIDwgc2hpc2h1bmtpXCA7CivmlL7lsITmgKcgPCBob3VzaGFzZWlcIDsKK+iZq+WqkuiKsSA8IGNodXViYWlrYVwgOwor5Yqg5oyB56WI56W3IDwga2FqaWtpdG91XCA7CivlhoXlkJHmgKcgPCBuYWlrb3VzZWlcIDsKK+WEquW+heWIuCA8IHl1dXRhaWtlblwgOwor5Zub5Lq657WEIDwgeW9uaW5ndW1pXCA7CivpgIDlrLDnmoQgPCB0YWllaXRla2lcIDsKK+WWhOW+jOetliA8IHplbmdvc2FrdVwgOwor5Y+O5rKhIDwgc2h1dWJvdHN1XCA7CivpiYTlsZEgPCB0ZXRzdWt1enVcIDsKK+WKqeaJi+W4rSA8IGpvc2h1c2VraVwgOwor54Gr5pyo6YeRIDwga2Ftb2t1a2luXCA7CivljZPnrYYgPCB0YWt1aGl0c3VcIDsKK+awj+WtkOW4syA8IHVqaWtvY2hvdVwgOwor55qH5aSq5ZCOIDwga291dGFpZ291XCA7Civlj5bmrKEgPCB0b3JpdHN1Z2lcIDsKK+eJueaUu+maiiA8IHRva2tvdXRhaVwgOwor5Y2T56uLIDwgdGFrdXJpdHN1XCA7CivpgbroqIDogIUgPCB5dWlnb25zaGFcIDsKK+mDt+Wcn+WPsiA8IGt5b3Vkb3NoaVwgOwor5q2j6YGTIDwgbWFzYW1pY2hpXCA7Civku5jlsZ7moKEgPCBmdXpva3Vrb3VcIDsKK+ayiOayoSA8IGNoaW5ib3RzdVwgOwor57Wx5rK76ICFIDwgdG91Y2hpc2hhXCA7CivlkI3kurroirggPCBtZWlqaW5nZWlcIDsKK+WHhOaWh+WPpSA8IHN1Z29tb25rdVwgOwor5oim54G96ICFIDwgc2Vuc2Fpc2hhXCA7CivoqabkvZzmqZ8gPCBzaGlzYWt1a2lcIDsKK+m7hOaer+iMtiA8IGtpZ2FyYWNoYVwgOwor6IOD6IW46JasIDwgaWNob3V5YWt1XCA7Civmr5LoiIwgPCBkb2t1emV0c3VcIDsKK+mZvembu+WtkCA8IHlvdWRlbnNoaVwgOwor56Oo5rGBIDwgdG9naXNoaXJ1XCA7Civmlofmrormp5ggPCBtb25qdXNhbWFcIDsKK+W9ueiBtyA8IHlha3VzaG9rdVwgOwor5LuY5bGe5pu4IDwgZnV6b2t1c2hvXCA7CivoqI7oq5bogIUgPCB0b3Vyb25zaGFcIDsKK+Wkmuaxl+eXhyA8IHRha2Fuc2hvdVwgOwor56Kn546JIDwgaGVraWd5b2t1XCA7CivmipXmiYvpmaMgPCB0b3VzaHVqaW5cIDsKK+S4ree2meaJgCA8IGNodXVrZWlqb1wgOwor5qC55oug5ZywIDwga29ua3lvY2hpXCA7Civms5XkurrnqI4gPCBob3VqaW56ZWlcIDsKK+WcsOWFg+awkSA8IGppbW90b21pblwgOwor5bm05pyf6ICFIDwgbmVua2ltb25vXCA7CivphbfnhrEgPCBrb2t1bmV0c3VcIDsKK+iKseWNieWckuiKuCA8IGtha2llbmdlaVwgOwor6Z+z5qW95oCnIDwgb25nYWt1c2VpXCA7CivooqvlkYrkurogPCBoaWtva3VuaW5cIDsKK+aWh+WMluW6gSA8IGJ1bmthY2hvdVwgOwor5YGP5ZCR5p2/IDwgaGVua291YmFuXCA7Civog4zku7vnvaogPCBoYWluaW56YWlcIDsKK+WCjeims+iAhSA8IGJvdWthbnNoYVwgOwor6JS15rWaIDwga3VyYXphcmFlXCA7CivmmJ/nirbkvZMgPCBzZWlqb3V0YWlcIDsKK+a2iOWMluWJpCA8IHNob3VrYXphaVwgOwor5qyn5bee54mIIDwgb3VzaHV1YmFuXCA7Civlkozoo73oi7Hoqp4gPCB3YXNlaWVpZ29cIDsKK+WPo+aXqSA8IGt1Y2hpYmF5YVwgOwor5bCP6LGG57KlIDwgYXp1a2lnYXl1XCA7CivmsYHniakgPCBzaGlydW1vbm9cIDsKK+ezu+Wbs+WtpiA8IGtlaXp1Z2FrdVwgOwor6YW354OIIDwga29rdXJldHN1XCA7Civku67lkI3miYvmnKwgPCBrYW5hZGVob25cIDsKK+iThOepjSA8IGNoaWt1c2VraVwgOwor5pu457Ch566LIDwgc2hva2Fuc2VuXCA7Civlho3phY3liIYgPCBzYWloYWlidW5cIDsKK+W8seiZqyA8IHlvd2FtdXNoaVwgOwor5Y2U6K2w5a6YIDwga3lvdWdpa2FuXCA7CivlkIzpoZ7poIUgPCBkb3VydWlrb3VcIDsKK+iHqui7oui7uCA8IGppdGVuamlrdVwgOwor5b+g54OIIDwgY2h1dXJldHN1XCA7CivkuIrnlLLmnb8gPCBqb3VrYW5wYW5cIDsKK+aDnOWIpSA8IHNla2liZXRzdVwgOwor5YWo5Zyw5pa5IDwgemVuY2hpaG91XCA7CivkvJrnpL7ms5UgPCBrYWlzaGFob3VcIDsKK+a0u+WKhyA8IGthdHN1Z2VraVwgOwor5aWJ5LuV5ZOBIDwgaG91c2hpaGluXCA7CivmiKrmi7PpgZMgPCBzZWtrZW5kb3VcIDsKK+WPsOaJgCA8IGRhaWRva29yb1wgOwor5LuV6Iie5bGLIDwgc2hpbW90YXlhXCA7CivmipjoobfmoYggPCBzZXRjaHV1YW5cIDsKK+iIquepuumaiiA8IGtvdWt1dXRhaVwgOwor6J2m6J+H5Y+jIDwgZ2FtYWd1Y2hpXCA7CivnpoHmraLms5UgPCBraW5zaGlob3VcIDsKK+mBk+WFt+aWuSA8IGRvdWd1a2F0YVwgOwor5b6M56iLIDwgbm9jaGlob2RvXCA7Civml6bpgqPoirggPCBkYW4nJ25hZ2VpXCA7CivmibbppIrmlpkgPCBmdXlvdXJ5b3VcIDsKK+W8k+ihkyA8IGt5dXVqdXRzdVwgOwor5LiN5L+h5b+DIDwgZnVzaGluamluXCA7CivpgaDov5EgPCBvY2hpa29jaGlcIDsKK+WKm+iqrCA8IHJpa2lzZXRzdVwgOwor5bmz5a6J5pydIDwgaGVpYW5jaG91XCA7CivlhoXph47luK0gPCBuYWl5YXNla2lcIDsKK+WboOaenOW+iyA8IGluZ2FyaXRzdVwgOwor6Iux5ZKM6L6e5YW4IDwgZWl3YWppdGVuXCA7Civou73mvJTliocgPCBrZWllbmdla2lcIDsKK+S6iOWCmeS8muitsCA8IHlvYmlrYWlnaVwgOwor5p2/6YeR5belIDwgYmFua2lua291XCA7CivlrprkvqHooaggPCB0ZWlrYWh5b3VcIDsKK+evpOW/l+WutiA8IHRva3VzaGlrYVwgOwor6bSs6ImyIDwgdWd1aXN1aXJvXCA7CivoqabpqJPloLQgPCBzaGlrZW5qb3VcIDsKK+aXheihjOiAhSA8IHJ5b2tvdXNoYVwgOwor5q2v6b2m54KOIDwgc2hpZ2luJydlblwgOwor6Ju45Z2K5Li7IDwgdGFrb2JvdXp1XCA7CivljZrniakgPCBoYWt1YnV0c3VcIDsKK+WPguaUv+WumCA8IHNhbnNlaWthblwgOwor6LuN5LqL55qEIDwgZ3Vuaml0ZWtpXCA7Civlj6Tpiq3lraYgPCBrb3Nlbmdha3VcIDsKK+i7jeWumOaGsiA8IGd1bmthbmtlblwgOwor6Zai5pWw6KuWIDwga2Fuc3V1cm9uXCA7CivmsrvnmYLosrsgPCBjaGlyeW91aGlcIDsKK+avkuethiA8IGRva3VoaXRzdVwgOwor5ZGR5Y+jIDwgbm9taWd1Y2hpXCA7Civlkb3kuZ4gPCBpbm9jaGlnb2lcIDsKK+adv+mHkeWxiyA8IGJhbmtpbicneWFcIDsKK+aTjei7iuWgtCA8IHNvdXNoYWpvdVwgOwor5oqV6J6N6LOHIDwgdG91eXV1c2hpXCA7CivnpL7kuqTmgKcgPCBzaGFrb3VzZWlcIDsKK+aTrOeIhuW8viA8IGdpYmFrdWRhblwgOwor56u56Jy76JuJIDwgdGFrZXRvbmJvXCA7CivmgYvlv4MgPCBrb2lnb2tvcm9cIDsKK+i2heWFmua0viA8IGNob3V0b3VoYVwgOwor5ZWP6aGM5aSWIDwgbW9uZGFpZ2FpXCA7CivkuIDoiKznmoQgPCBpcHBhbnRla2lcIDsKK+izh+acrOmHkSA8IHNoaWhvbmtpblwgOwor5oKq5Y+jIDwgd2FydWd1Y2hpXCA7CivnlLflrZDnlKggPCBkYW5zaGl5b3VcIDsKK+WInembqiA8IGhhdHN1eXVraVwgOwor56S+5Lya5YWaIDwgc2hha2FpdG91XCA7Civljq3kuJbnmoQgPCBlbnNlaXRla2lcIDsKK+W8seiFsCA8IHlvd2Fnb3NoaVwgOwor6KiT57e055SfIDwga3VucmVuc2VpXCA7CivpgIbpnpggPCBneWFrdXpheWFcIDsKK+i0iOWRiOacrCA8IHpvdXRlaWJvblwgOwor5LqM6Zmi5Yi25bqmIDwgbmlpbnNlaWRvXCA7CivlubTpoIMgPCB0b3NoaWdvcm9cIDsKK+WutuaXj+azlSA8IGthem9rdWhvdVwgOwor5Lq65rCX5qCqIDwgbmlua2lrYWJ1XCA7Civoqq3lvozmhJ8gPCBkb2t1Z29rYW5cIDsKK+WNmOe0sOiDniA8IHRhbnNhaWJvdVwgOwor6bO056a96aGeIDwgbWVpa2lucnVpXCA7CivlhoXpg6jnmoQgPCBuYWlidXRla2lcIDsKK+e3tOWFteWgtCA8IHJlbnBlaWpvdVwgOwor5aSP5pyf5pmC6ZaTIDwga2FraWppa2FuXCA7CivlpKfliY3mj5AgPCBkYWl6ZW50ZWlcIDsKK+edgOmZuCA8IGNoYWt1cmlrdVwgOwor5YaN5b6T5YWEIDwgc2FpanV1a2VpXCA7CivlkYrliKUgPCBrb2t1YmV0c3VcIDsKK+WPr+WLleapiyA8IGthZG91a3lvdVwgOwor5rC05rK5IDwgbWl6dWFidXJhXCA7CivmsLfmsLQgPCBrb29yaW1penVcIDsKK+mfs+alveWggiA8IG9uZ2FrdWRvdVwgOwor6I2S6Zqg5YWDIDwgc2F5YWluZ2VuXCA7CivkupXmiLjlsYvlvaIgPCBpZG95YWthdGFcIDsKK+a0l+ekvOWQjSA8IHNlbnJlaW1laVwgOwor54++5qWt5ZOhIDwgZ2VuZ3lvdWluXCA7CivkuIDlt6XlpKsgPCBoaXRva3VmdXVcIDsKK+WJjei8vyA8IHNha2lnb3NoaVwgOwor5Y+35a6kIDwgZ291c2hpdHN1XCA7Civohp3lsI/lg6cgPCBoaXpha296b3VcIDsKK+iHquW3seefm+ebviA8IGppa29tdWp1blwgOwor5L2c6Kme5a62IDwgc2FrdXNoaWthXCA7CivkvZzngrrnmoQgPCBzYWt1aXRla2lcIDsKK+Wwj+Wuh+WumSA8IHNob3V1Y2h1dVwgOwor6aKo5rC05a6zIDwgZnV1c3VpZ2FpXCA7CivlpKfou4rovKogPCBkYWlzaGFyaW5cIDsKK+aUueWumueJiCA8IGthaXRlaWhhblwgOwor56S+5Lya5Lq6IDwgc2hha2FpamluXCA7CivmgqrlvbHpn78gPCBha3VlaWt5b3VcIDsKK+ilv+mDqOWKhyA8IHNlaWJ1Z2VraVwgOwor6ZuR6LKo5ZWGIDwgemFra2FzaG91XCA7CivliqPnrYnmhJ8gPCByZXR0b3VrYW5cIDsKK+WHuumhmCA8IHNodXRzdWdhblwgOwor6YCP5piO5oCnIDwgdG91bWVpc2VpXCA7Civlh7rpoYwgPCBzaHV0c3VkYWlcIDsKK+iLpeWkq+WppiA8IHdha2FmdXVmdVwgOwor6bGX6ZuyIDwgdXJva29ndW1vXCA7CivptIPoiIwgPCBnZWtpemV0c3VcIDsKK+mZsOmZvemBkyA8IG9ubXlvdWRvdVwgOwor5LyR5oap5omAIDwga3l1dWtlaWpvXCA7CivphY3ntabmiYAgPCBoYWlreXV1am9cIDsKK+ijhei6q+WFtyA8IHNvdXNoaW5ndVwgOwor54Sh5qyg5bitIDwgbXVrZXNzZWtpXCA7Civoh6rliLblv4MgPCBqaXNlaXNoaW5cIDsKK+mAmumHiCA8IHRzdXVzaGFrdVwgOwor56CC57KSIDwgc3VuYXRzdWJ1XCA7Civlia/kvZznlKggPCBmdWt1c2F5b3VcIDsKK+WGjemBuOaMmSA8IHNhaXNlbmt5b1wgOwor6Zqg5Yy/6ICFIDwgaW50b2t1c2hhXCA7CivlkIzkurrnqK4gPCBkb3VqaW5zaHVcIDsKK+mBi+mAgealrSA8IHVuc291Z3lvdVwgOwor5YaF5YuZ55yBIDwgbmFpbXVzaG91XCA7Civngq3phbjmsLQgPCB0YW5zYW5zdWlcIDsKK+ihm+eUn+eahCA8IGVpc2VpdGVraVwgOwor5YaN55m66KGMIDwgc2FpaGFra291XCA7CivpgbroqIDnirYgPCB5dWlnb25qb3VcIDsKK+mAn+mBlCA8IHNva3V0YXRzdVwgOwor54K555y85rC0IDwgdGVuZ2Fuc3VpXCA7Civou73lkIjph5EgPCBrZWlnb3VraW5cIDsKK+S4gOeZuuWxiyA8IGlwcGF0c3V5YVwgOwor5Ye66ZmjIDwgc2h1dHN1amluXCA7Civlhajoo73lk4EgPCB6ZW5zZWloaW5cIDsKK+mAmumBlCA8IHRzdXV0YXRzdVwgOwor5b+c5Y+s6ICFIDwgb3VzaG91c2hhXCA7CivliJ3ph5wgPCBoYXRzdWdhbWFcIDsKK+WPpOWNsOe0mSA8IGZ1cnVpbnNoaVwgOwor6LOH5pys6LKhIDwgc2hpaG9uemFpXCA7Civlm57poafnmoQgPCBrYWlrb3Rla2lcIDsKK+S6jOimquetiSA8IG5pc2hpbnRvdVwgOwor5Lqk5oim5qipIDwga291c2Vua2VuXCA7CivluoPloLHoqowgPCBrb3Vob3VzaGlcIDsKK+S+i+W5tOelrSA8IHJlaW5lbnNhaVwgOwor5LqI6Ziy6JasIDwgeW9ib3V5YWt1XCA7Civlkozlo7DlraYgPCB3YXNlaWdha3VcIDsKK+WHuumWgCA8IHNodXRzdW1vblwgOwor6Z+z5qW95Y+yIDwgb25nYWt1c2hpXCA7CivokI7nuK7ohY4gPCBpc2h1a3VqaW5cIDsKK+ebl+iBtOWZqCA8IHRvdWNob3VraVwgOwor5LqI57SE6YeRIDwgeW95YWt1a2luXCA7Civph6PloIAgPCB0c3VyaWJvcmlcIDsKK+aYpeWgtOaJgCA8IGhhcnViYXNob1wgOwor56ef5bq46Kq/IDwgc295b3VjaG91XCA7Civov5HpoIMgPCBjaGlrYWdvcm9cIDsKK+mztuiBtyA8IHRvYmlzaG9rdVwgOwor5Y6f5a2Q6KuWIDwgZ2Vuc2hpcm9uXCA7CivnhKHmqZ/niakgPCBtdWtpYnV0c3VcIDsKK+axuuitsOahiCA8IGtldHN1Z2lhblwgOwor5Ym15L2c5a62IDwgc291c2FrdWthXCA7CivniJvnhp/mnJ8gPCByYW5qdWt1a2lcIDsKK+S4remWk+a0viA8IGNodXVrYW5oYVwgOwor55+z562GIDwgc2VraWhpdHN1XCA7Civph4znqIvmqJkgPCByaXRlaWh5b3VcIDsKK+izh+acrOirliA8IHNoaWhvbnJvblwgOwor5LuK5qeY5q2MIDwgaW1heW91dXRhXCA7Civnn7Pnq7kgPCBzZWtpY2hpa3VcIDsKK+W8lee2sSA8IGhpa2lkenVuYVwgOwor5Lya5rSl5aGXIDwgYWlkenVudXJpXCA7CivkuLjlnYrkuLsgPCBtYXJ1Ym91enVcIDsKK+enu+akjeaApyA8IGlzaG9rdXNlaVwgOwor55+t562SIDwgdGFuZHp1dHN1XCA7CivliKXlpKnlnLAgPCBiZXR0ZW5jaGlcIDsKK+avkueJqSA8IGRva3VidXRzdVwgOwor5Y2z5pelIDwgc29rdWppdHN1XCA7CivpmLLnqbrlo5UgPCBib3VrdXVnb3VcIDsKK+mAg+mBkyA8IG5pZ2VtaWNoaVwgOwor6YGL6YCB5paZIDwgdW5zb3VyeW91XCA7CivnpZ7kuLsgPCBrYW4nJ251c2hpXCA7Civlub3pnIroiLkgPCB5dXVyZWlzZW5cIDsKK+S8r+WCmee3miA8IGhha3ViaXNlblwgOwor6IOD6IW455eFIDwgaWNob3VieW91XCA7CivljbHmqZ/nrqHnkIYgPCBraWtpa2FucmlcIDsKK+WQiOWNsCA8IGFpamlydXNoaVwgOwor5Z+656SO5L2T5ripIDwga2lzb3RhaW9uXCA7CivljZLmpa0gPCBzb3RzdWd5b3VcIDsKK+WRiuekuuadvyA8IGtva3VqaWJhblwgOwor5bCP5L2c5Lq6IDwga29zYWt1bmluXCA7Civpm6LplpPnrZYgPCByaWthbnNha3VcIDsKK+WLneedgCA8IHNob3VjaGFrdVwgOwor5byxIDwgbmF5b25heW9cIDsKK+i5siA8IHRzdWt1YmFpXCA7Civlp5EgPCBzaHV1dG9tZVwgOwor5aGKIDwga2F0YW1hcmlcIDsKK+WgpCA8IHRzdXRzdW1pXCA7CivpvJMgPCB0c3VkenVtaVwgOwor5rqQIDwgbWluYW1vdG9cIDsKK+m2jyA8IG5pd2F0b3JpXCA7Civlj6IgPCBrdXNhbXVyYVwgOwor5Y2wIDwgc2hpcnVzaGlcIDsKK+mtgiA8IHRhbWFzaGlpXCA7CivohbggPCBoYXJhd2F0YVwgOwor5p2vIDwgc2FrYXp1a2lcIDsKK+mbtyA8IGthbWluYXJpXCA7Civpm4EgPCBrYXJpZ2FuZVwgOwor5pqBIDwgYWthdHN1a2lcIDsKK+e0qyA8IG11cmFzYWtpXCA7CivmjowgPCB0ZW5vaGlyYVwgOwor5oqRIDwgc29tb3NvbW9cIDsKK+aHkCA8IGZ1dG9rb3JvXCA7CivlkJDlh7ogPCB0b3NodXRzdVwgOwor6YeR5Z6LIDwga2FuYWdhdGFcIDsKK+efs+elniA8IHNoYWt1amluXCA7CivlkI3liLkgPCBtZWlzYXRzdVwgOwor5by+552AIDwgZGFuY2hha3VcIDsKK+iQveexjSA8IHJha3VzZWtpXCA7Civnn6LnrZIgPCB5YWR6dXRzdVwgOwor5b+D5pyNIDwgc2hpbnB1a3VcIDsKK+mAhui7oiA8IGd5YWt1dGVuXCA7CivlkIjlipsgPCBnb3VyeW9rdVwgOwor6JaZ5YiAIDwgbmFnaW5hdGFcIDsKK+WQjOWIlyA8IGRvdXJldHN1XCA7CivmsJHmlbDoqJggPCBtaW5zdXVraVwgOwor6YmE56Cy5bqnIDwgdGVwcG91emFcIDsKK+ebguiYreebhuS8miA8IHVyYWJvbicnZVwgOwor5paH5YyW5Lq6IDwgYnVua2FqaW5cIDsKK+acqOW3peaJgCA8IG1va2tvdWpvXCA7CivljLvnp5Hmra/np5EgPCBpa2FzaGlrYVwgOwor55u06Z2iIDwgY2hva3VtZW5cIDsKK+S4gOiIrOazlSA8IGlwcGFuaG91XCA7Civlvqnmpa0gPCBmdWt1Z3lvdVwgOwor6JaE5Y+jIDwgdXN1a3VjaGlcIDsKK+WKtOWLmeiAhSA8IHJvdW11c2hhXCA7CivojYnpo58gPCBzb3VzaG9rdVwgOwor5paH5bqr5pysIDwgYnVua29ib25cIDsKK+W4uOmXhyA8IHRva295YW1pXCA7CivlkIjlhoogPCBnb3VzYXRzdVwgOwor5Yml6JC9IDwgaGFrdXJha3VcIDsKK+iMtumrqiA8IGNoYXBhdHN1XCA7CivpgJ/oqq0gPCBzb2t1ZG9rdVwgOwor5Y6z5a+GIDwgZ2VubWl0c3VcIDsKK+S7o+eQhuS6uiA8IGRhaXJpbmluXCA7CivmtbfmsLTnnYAgPCBrYWlzdWlnaVwgOwor5Ye66YO3IDwgc2h1a2t5b3VcIDsKK+WOmuW6lSA8IGF0c3V6b2tvXCA7Civoh6rlt7HmtYEgPCBqaWtvcnl1dVwgOwor5byV56qTIDwgaGlraW1hZG9cIDsKK+S4geWvp+iqniA8IHRlaW5laWdvXCA7CivliIbovYQgPCBidW5rYXRzdVwgOwor6Z+z5qW95LyaIDwgb25nYWtrYWlcIDsKK+WQjOiDnuaEmyA8IGRvdWhvdWFpXCA7CivpgJroqq0gPCB0c3V1ZG9rdVwgOwor5q+b5ZSQ5Lq6IDwga2V0b3VqaW5cIDsKK+awkeS6i+S4iiA8IG1pbmppam91XCA7Civmt6HlvannlLsgPCB0YW5zYWlnYVwgOwor5pyf5b6F5YCkIDwga2l0YWljaGlcIDsKK+mBnOiJsiA8IHNvbnNob2t1XCA7Civlhajoo7jkvZMgPCB6ZW5yYXRhaVwgOwor56uL5L2T5rS+IDwgcml0dGFpaGFcIDsKK+i/vei3oSA8IHRzdWlzZWtpXCA7Civli7LniLUgPCBrdW5zaGFrdVwgOwor6K236YCB6Ii5IDwgZ29zb3VzZW5cIDsKK+mAmuiosyA8IHRzdXV5YWt1XCA7Civph47om67kurogPCB5YWJhbmppblwgOwor5Y+q5Y+qIDwgdGFkYXRhZGFcIDsKK+WPi+WeoyA8IHRvbW9nYWtpXCA7CivlpbPmgKfou40gPCBqb3NlaWd1blwgOwor5ZCM6Laj5ZGzIDwgZG91c2h1bWlcIDsKK+WNiuaciCA8IGhhbnRzdWtpXCA7Civlj6/li5XmgKcgPCBrYWRvdXNlaVwgOwor5LiN6aSK55SfIDwgZnV5b3Vqb3VcIDsKK+mjveWSjOeCuSA8IGhvdXdhdGVuXCA7CivnnJ/ov7kgPCBzaGluc2VraVwgOwor5pei5b6A55eHIDwga2lvdXNob3VcIDsKK+WQieS+iyA8IGtpdHN1cmVpXCA7Civov5HpiYQgPCBraW50ZXRzdVwgOwor6Iy26aOvIDwgY2hhbWVzaGlcIDsKK+WIpeiogCA8IGJldHN1Z2VuXCA7CivmrpbnlKMgPCBzaG9rdXNhblwgOwor6YeR5Y+jIDwga2luZ3VjaGlcIDsKK+mAoOihgCA8IHpvdWtldHN1XCA7Civps6XnsaAgPCB0b3Jpa2Fnb1wgOwor5YuD55m6IDwgYm9wcGF0c3VcIDsKK+W7uueviSA8IGtlbmNoaWt1XCA7CivkuIDoh7TngrkgPCBpdGNoaXRlblwgOwor5Ye66LqrIDwgc2h1c3NoaW5cIDsKK+ethuiomOiAhSA8IGhpa2tpc2hhXCA7CivljYHmnIggPCBqdXVnYXRzdVwgOwor6YCB6aKo5qmfIDwgc291ZnV1a2lcIDsKK+WPo+WNoCA8IGt1Y2hpdXJhXCA7Civlp6vlvqHlrZAgPCBoaW1lbWlrb1wgOwor5omL6YWN5pu4IDwgdGVoYWlzaG9cIDsKK+ato+eriyA8IHNlaXJpdHN1XCA7Civpr6jpqqggPCBnZWlrb3RzdVwgOwor5rGC5b+DIDwga3l1dXNoaW5cIDsKK+ebuOmOmiA8IGFpZHp1Y2hpXCA7CivnnLzorZggPCBnYW5zaGlraVwgOwor6ISz54+K55GaIDwgbm91c2FuZ29cIDsKK+S4iuWxpOWcnyA8IGpvdXNvdWRvXCA7Civlv4Pmi40gPCBzaGlucGFrdVwgOwor5LqI57SE6KqeIDwgeW95YWt1Z29cIDsKK+W9vOatpCA8IGthcmVrb3JlXCA7Civmsrnmp73oiLkgPCB5dXNvdXNlblwgOwor5q2v56OoIDwgaGFtaWdha2lcIDsKK+W4nemXlSA8IHRlaWtldHN1XCA7CivkuIDlr7joposgPCBjaG90dG9taVwgOwor5LqI6Ziy57eaIDwgeW9ib3VzZW5cIDsKK+WLmOWumuaXpSA8IGthbmpvdWJpXCA7CivlhoXpsJAgPCB1Y2hpd2FuaVwgOwor5Y+k5Ym1IDwgZnVydWtpenVcIDsKK+m0qOeMnyA8IGthbW9yeW91XCA7CivmsqHljbQgPCBib2treWFrdVwgOwor5YaF5biR6YeRIDwgbmFpZG9raW5cIDsKK+mHkeWKmyA8IGtpbnJ5b2t1XCA7Civlj7PlgbQgPCBtaWdpZ2F3YVwgOwor5Ye66LaFIDwgc2h1dGNob3VcIDsKK+WPo+WJjSA8IGt1Y2hpbWFlXCA7CivkvJ3pgIHot68gPCBkZW5zb3Vyb1wgOwor5Yi76JaEIDwga29rdWhha3VcIDsKK+mKgOe0sOW3pSA8IGdpbnphaWt1XCA7Civkurrnm7joposgPCBuaW5zb3VtaVwgOwor5rC05oCnIDwgbWl6dXNob3VcIDsKK+W6g+iiliA8IGhpcm9zb2RlXCA7Civph43lipsgPCBqdXVyeW9rdVwgOwor6aKo5Yi655S7IDwgZnV1c2hpZ2FcIDsKK+ebuOmJhCA8IHNvdXRldHN1XCA7Civojbfou4ogPCBuaWd1cnVtYVwgOwor5YuV54mpIDwgZG91YnV0c3VcIDsKK+WNiOmkkOS8miA8IGdvc2Fua2FpXCA7Civnn6XnlaUgPCBjaGlyeWFrdVwgOwor55uu6YyyIDwgbW9rdXJva3VcIDsKK+eEoeasoOWLpCA8IG11a2Vra2luXCA7Civmr5Tph43oqIggPCBoaWp1dWtlaVwgOwor5YiH6KuWIDwgc2V0c3Vyb25cIDsKK+mBi+mAgeW6lyA8IHVuc291dGVuXCA7Civlh7bos4ogPCBreW91em9rdVwgOwor5pON5L2c55ukIDwgc291c2FiYW5cIDsKK+edgOijhSA8IGNoYWt1c291XCA7CivlnKjluqvlk4EgPCB6YWlrb2hpblwgOwor6YGF6ISIIDwgY2hpbXlha3VcIDsKK+awtOW8lSA8IG1penVoaWtpXCA7CivmqYjpqqggPCB0b3Vrb3RzdVwgOwor5q6y5ruFIDwgc2VubWV0c3VcIDsKK+WGoOmbqiA8IGthbnNldHN1XCA7CivljJfmpbUgPCBob2treW9rdVwgOwor5bm76KGTIDwgZ2VuanV0c3VcIDsKK+awt+W6iiA8IGh5b3VzaG91XCA7CivlioPnrZYgPCBrYWt1c2FrdVwgOwor5rCR5Li75YyWIDwgbWluc2h1a2FcIDsKK+WNs+W4rSA8IHNva3VzZWtpXCA7Civlu7bmu57ph5EgPCBlbnRhaWtpblwgOwor5Y+I5Y+IIDwgbWF0YW1hdGFcIDsKK+awtOW6lSA8IG1pbmFzb2tvXCA7CivllJDnoLTpoqggPCBrYXJhaGFmdVwgOwor55u06YWNIDwgY2hva3VoYWlcIDsKK+WIh+iogCA8IHNldHN1Z2VuXCA7Civoh6rlhazmsJEgPCBqaWtvdW1pblwgOwor5oCl5ZGKIDwga3l1dWtva3VcIDsKK+mHiOWFuCA8IHNoYWt1dGVuXCA7Civos6LlpKvkurogPCBrZW5wdWppblwgOwor5q+r5pyrIDwgZ291bWF0c3VcIDsKK+WNiuaKmCA8IGhhbnNldHN1XCA7CivlubPoopYgPCBoaXJhc29kZVwgOwor5LqM5bqm5omL6ZaTIDwgbmlkb2RlbWFcIDsKK+mvm+mjryA8IHRhaW1lc2hpXCA7CivpgYvou6LogIUgPCB1bnRlbnNoYVwgOwor5YiH6KaBIDwgc2V0c3V5b3VcIDsKK+W3u+mbsiA8IG1ha2lndW1vXCA7CivkuI3moLzlpb0gPCBidWtha2tvdVwgOwor5YKs5rer5YmkIDwgc2FpaW56YWlcIDsKK+aui+eJqSA8IHphbmJ1dHN1XCA7CivmoITppIrnn60gPCBlaXlvdXRhblwgOwor5oWL44CFIDwgd2F6YXdhemFcIDsKK+WKq+eVpSA8IGdvdXJ5YWt1XCA7Civlj43liKUgPCB0YW5iZXRzdVwgOwor5q2j55u0IDwgc2hvdWppa2lcIDsKK+WMu+WtpueVjCA8IGlnYWt1a2FpXCA7CivlirnnjocgPCBrb3VyaXRzdVwgOwor54Sh5bi45oSfIDwgbXVqb3VrYW5cIDsKK+WPquS6iyA8IHRhZGFnb3RvXCA7CivnoqnlraYgPCBzZWtpZ2FrdVwgOwor6IOM5qC85aW9IDwgc2VrYWtrb3VcIDsKK+Wxseafu+WtkCA8IHNhbnphc2hpXCA7CivljLvlrabnlJ8gPCBpZ2FrdXNlaVwgOwor5rC05bWpIDwgbWl6dWthc2FcIDsKK+mWi+alreWMuyA8IGthaWd5b3VpXCA7Civnm7TpgIEgPCBjaG9rdXNvdVwgOwor5YiG6KOCIDwgYnVucmV0c3VcIDsKK+W9ueafhCA8IHlha3VnYXJhXCA7Civlh4zovrEgPCByeW91am9rdVwgOwor5b6L5paHIDwgcml0c3VidW5cIDsKK+eoi+OAhSA8IGhvZG9ob2RvXCA7Civlj47lhaUgPCBzaHV1bnl1dVwgOwor5L6/6KGj6ZqKIDwgYmVuJydpdGFpXCA7Civoi6Xpto8gPCB3YWthZG9yaVwgOwor5rKI5YuHIDwgY2hpbicneXV1XCA7Civlj4zlha0gPCBzdWdvcm9rdVwgOwor5buD57W2IDwgaGFpemV0c3VcIDsKK+W5ueS6i+S8miA8IGthbmppa2FpXCA7CivpgZPns7ggPCBtaWNoaWl0b1wgOwor5aSa5Y6f5a2QIDwgdGFnZW5zaGlcIDsKK+WJteeriyA8IHNvdXJpdHN1XCA7CivljZTlv4MgPCBreW91c2hpblwgOwor5YyX5pydIDwgaG9rdWNob3VcIDsKK+WLh+eDiCA8IHl1dXJldHN1XCA7CivmgKfliKUgPCBzZWliZXRzdVwgOwor5YuD54S2IDwgYm90c3V6ZW5cIDsKK+WNgeWtl+W9oiA8IGp1dWppa2VpXCA7CivljZjlvI8gPCB0YW5zaGlraVwgOwor5aSW6YeO5omLIDwgZ2FpeWFzaHVcIDsKK+WBpeiDg+mMoCA8IGtlbicnaWpvdVwgOwor6Zai6KW/6aasIDwga2Fuc2FpYmFcIDsKK+aMh+ekuuipniA8IHNoaWppc2hpXCA7Civlj4LliJcgPCBzYW5yZXRzdVwgOwor5piO5pel6JGJIDwgYXNoaXRhYmFcIDsKK+awl+W/gyA8IGtpZ29rb3JvXCA7Civnn63ot53pm6IgPCB0YW5reW9yaVwgOwor5LiA6LuS5bGLIDwgaWtrZW4nJ3lhXCA7Civlt53poqggPCBrYXdha2F6ZVwgOwor6Iq45YKZ57eaIDwgZ2VpYmlzZW5cIDsKK+WIgOihkyA8IHRvdWp1dHN1XCA7CivljKHmlZEgPCBreW91a3l1dVwgOwor5q2754mpIDwgc2hpYnV0c3VcIDsKK+WIs+iInyA8IGt1cmlidW5lXCA7CivpmaPlpKrpvJMgPCBqaW5kYWlrb1wgOwor55yf5Yas5pelIDwgbWFmdXl1YmlcIDsKK+Wbm+Wto+WgsSA8IHNoaWtpaG91XCA7CivliIbonZUgPCBidW5zaG9rdVwgOwor55m96bOlIDwgaGFrdWNob3VcIDsKK+WFtemjnyA8IGhlaXNob2t1XCA7Civmrr/mp5ggPCB0b25vc2FtYVwgOwor5Y+C5YWlIDwgc2FuJydueXV1XCA7Civlj5fku5ggPCB1a2V0c3VrZVwgOwor5Y2Y5bivIDwgaGl0b2VvYmlcIDsKK+efr+a/gCA8IGt5b3VnZWtpXCA7CivmgKrlgpEgPCBrYWlrZXRzdVwgOwor5Yi66IKhIDwgc2FzdW1hdGFcIDsKK+axsuWPliA8IGt1bWl0b3JpXCA7CivnoILmtZwgPCBzdW5haGFtYVwgOwor57mB6I+v6KGXIDwgaGFua2FnYWlcIDsKK+iok+e3tOaJgCA8IGt1bnJlbmpvXCA7CivpgZTnrYYgPCB0YXBwaXRzdVwgOwor5rW35rC05ripIDwga2Fpc3Vpb25cIDsKK+eti+mbu+WbsyA8IGtpbmRlbnp1XCA7CivlibLnpLwgPCBrYXRzdXJlaVwgOwor5q+O5pyIIDwgbWFpdHN1a2lcIDsKK+azjOWwv+W5viA8IGhpbnlvdWtpXCA7CivljYflvaIgPCBtYXN1Z2F0YVwgOwor5LiN5a6J5b+DIDwgZnVhbnNoaW5cIDsKK+W3nemcpyA8IGthd2FnaXJpXCA7CivliofnmoQgPCBnZWtpdGVraVwgOwor6Kiq5ZWP552AIDwgaG91bW9uZ2lcIDsKK+WIhuiYliA8IGJ1bmtldHN1XCA7CivkvJrnpL7lk6EgPCBrYWlzaGFpblwgOwor5Y+U5LiWIDwgc2h1a3VzZWlcIDsKK+WFgOm3uSA8IGhhZ2V0YWthXCA7Civms5XnjovmqKkgPCBob3VvdWtlblwgOwor5YuY5rG6IDwga2Fua2V0c3VcIDsKK+S4jeWwjuS9kyA8IGZ1ZG91dGFpXCA7CivljZjoqablkIggPCB0YW5zaGlhaVwgOwor5Y2z5aaZIDwgc29rdW15b3VcIDsKK+WJo+eqgSA8IGtlbnRzdWt1XCA7Civlv4XlrpogPCBoaXRzdWpvdVwgOwor5YmN57SEIDwgemVuJyd5YWt1XCA7Civliofnl5sgPCBnZWtpdHN1dVwgOwor5Y2I5bm0IDwgdW1hZG9zaGlcIDsKK+W5s+iQvSA8IGhpcmFvY2hpXCA7CivnoazlvI8gPCBrb3VzaGlraVwgOwor5YaZ55Sf55S7IDwgc2hhc2VpZ2FcIDsKK+W4uOitmCA8IGpvdXNoaWtpXCA7CivnrqHnkIbkurogPCBrYW5yaW5pblwgOwor5b+D5a2mIDwgc2hpbmdha3VcIDsKK+avjuaXpSA8IG1haW5pY2hpXCA7Civnmb3pqqggPCBoYWtrb3RzdVwgOwor5LiA5a626KiAIDwgaWtrYWdvdG9cIDsKK+WNh+W4rSA8IG1hc3VzZWtpXCA7CivlkIzmnJ/nlJ8gPCBkb3VraXNlaVwgOwor5qiq6aKoIDwgeW9rb2themVcIDsKK+S4geWumuimjyA8IHRlaWpvdWdpXCA7CivpsJDotrMgPCB3YW5pYXNoaVwgOwor6YGF562GIDwgY2hpaGl0c3VcIDsKK+avjeaWuSA8IGhhaGFrYXRhXCA7CivlrojlgpnpmoogPCBzaHViaXRhaVwgOwor5rC35aOBIDwgaHlvdWhla2lcIDsKK+eenuedgCA8IG1hbmNoYWt1XCA7CivovpvovpsgPCBrYXJhZ2FyYVwgOwor55u46K2YIDwgc291c2hpa2lcIDsKK+iPnOeuuCA8IHNhaWJhc2hpXCA7CivkvbXlkIjnvaogPCBoZWlnb3phaVwgOwor6YCx57WmIDwgc2h1dWt5dXVcIDsKK+WFq+mdoiA8IGhhY2hpbWVuXCA7CivljZrlraYgPCBoYWt1Z2FrdVwgOwor5q6W5rCRIDwgc2hva3VtaW5cIDsKK+mAsue0miA8IHNoaW5reXV1XCA7CivmsJfnhKHnsr4gPCBraWJ1c2hvdVwgOwor5LiJ5p6a55uuIDwgc2FubWFpbWVcIDsKK+WJjeevgCA8IHplbnNldHN1XCA7Civlvpflv4MgPCB0b2t1c2hpblwgOwor5omL6YWN5birIDwgdGVoYWlzaGlcIDsKK+edgOiIuSA8IGNoYWt1c2VuXCA7CivlvJXmva4gPCBoaWtpc2hpb1wgOwor5bi46KitIDwgam91c2V0c3VcIDsKK+eEoeiHquimmiA8IG11amlrYWt1XCA7CivlvpflvpcgPCB0b2t1dG9rdVwgOwor6JC95r2uIDwgcmFrdWNob3VcIDsKK+W8seavkiA8IGpha3Vkb2t1XCA7CivljqXlhrcgPCBrZXRzdXJlaVwgOwor6JS15YWDIDwga3VyYW1vdG9cIDsKK+W7uueJqSA8IHRhdGVtb25vXCA7Civmrbvmu4UgPCBzaGltZXRzdVwgOwor5YuH5rG6IDwgeXV1a2V0c3VcIDsKK+WFiOmrmCA8IHNha2lkYWthXCA7Civnmbrpp4UgPCBoYXRzdWVraVwgOwor54Gr5LqL5rOlIDwga2FqaWRvcm9cIDsKK+mAgOiJsiA8IHRhaXNob2t1XCA7CivmsJflrqQgPCBraXNoaXRzdVwgOwor5Lq65bel6KqeIDwgamlua291Z29cIDsKK+aXouW+gOattCA8IGtpb3VyZWtpXCA7CivlhobpjJAgPCBtYXJ1Z2lyaVwgOwor5LiA6Iis5oCnIDwgaXBwYW5zZWlcIDsKK+WLnealvSA8IHNob3VyYWt1XCA7CivlubTmnIjml6UgPCBuZW5nYXBwaVwgOwor5YWO6aasIDwgdXNhZ2l1bWFcIDsKK+W9k+aciCA8IHRvdWdldHN1XCA7CivljYPls7YgPCBjaGlzaGltYVwgOwor5qiq6ZuyIDwgeW9rb2d1bW9cIDsKK+WkieaIkOWZqCA8IGhlbnNlaWtpXCA7CivlvpDlvpAgPCBzb3Jvc29yb1wgOwor5YWD6auYIDwgbW90b2Rha2FcIDsKK+acquS/oeiAhSA8IG1pc2hpbmphXCA7CivluKvoqqwgPCBzaGlzZXRzdVwgOwor5YyF5pGCIDwgaG91c2V0c3VcIDsKK+auv+aWuSA8IHRvbm9nYXRhXCA7CivmsJHlrr8gPCBtaW5zaHVrdVwgOwor5LiN5qGI5YaFIDwgZnVhbicnbmFpXCA7Civoh6rmo4TphZIgPCB5YWtlemFrZVwgOwor5aGR5by+5oCnIDwgc29kYW5zZWlcIDsKK+atpuWZqOWAiSA8IGJ1a2lndXJhXCA7CivpgKPntZAgPCByZW5rZXRzdVwgOwor6IG06Z+z5ZmoIDwgY2hvdW9ua2lcIDsKK+ebtOiogCA8IGNob2t1Z2VuXCA7CivlubPku67lkI0gPCBoaXJhZ2FuYVwgOwor5b2O5pyIIDwgd2FuZ2V0c3VcIDsKK+aEn+efpeWZqCA8IGthbmNoaWtpXCA7Civlt6HpjKsgPCBqdW5zaGFrdVwgOwor5b2O5puyIDwgd2Fua3lva3VcIDsKK+ebtOinkiA8IGNob2trYWt1XCA7Civlu4nnm7QgPCByZW5jaG9rdVwgOwor55u06KaWIDwgY2hva3VzaGlcIDsKK+atu+a0uyA8IHNoaWthdHN1XCA7Civlv4PlooMgPCBzaGlua3lvdVwgOwor5bmz6ISIIDwgaGVpbXlha3VcIDsKK+W9k+aXpSA8IHRvdWppdHN1XCA7CivliY3ljYrmnJ8gPCB6ZW5wYW5raVwgOwor5b6p5a2mIDwgZnVrdWdha3VcIDsKK+WFpemWoyA8IG55dXVrYWt1XCA7Civnqbroq5blrrYgPCBrdXVyb25rYVwgOwor5oG15q+U5a+/6aGUIDwgZWJpc3VnYW9cIDsKK+aoqumVtyA8IHlva29uYWdhXCA7CivmrbvmsqEgPCBzaGlib3RzdVwgOwor5YyF5ousIDwgaG91a2F0c3VcIDsKK+W/oOWRiiA8IGNodXVrb2t1XCA7Civlt7vou7ggPCBtYWtpamlrdVwgOwor6L6y6ZaR5pyfIDwgbm91a2Fua2lcIDsKK+eZvumbtyA8IGh5YWt1cmFpXCA7CivkuI3os5vmiJAgPCBmdXNhbnNlaVwgOwor55m+6ZujIDwgaHlha3VuYW5cIDsKK+mkium2j+WutiA8IHlvdWtlaWthXCA7Civlh7roir0gPCBzaHV0c3VnYVwgOwor6I+F56ygIDwgc3VnZWdhc2FcIDsKK+WJm+ebtCA8IGdvdWNob2t1XCA7CivljYHkuozmlK8gPCBqdXVuaXNoaVwgOwor5Yqg5rm/IDwga2FzaGl0c3VcIDsKK+ani+aIkOavlCA8IGtvdXNlaWhpXCA7CivlkJHml6XokbUgPCBoaW1hd2FyaVwgOwor55m66Zu7IDwgaGF0c3VkZW5cIDsKK+WIhuiEiCA8IGJ1bm15YWt1XCA7Civnm6PoqLMgPCBrYW4nJ3lha3VcIDsKK+mBheedgCA8IGNoaWNoYWt1XCA7CivmqZ/mpa3lrrYgPCBraWd5b3VrYVwgOwor5YWa6ZalIDwgdG91YmF0c3VcIDsKK+WIpee0jSA8IGJldHN1bm91XCA7CivliJHnvbAgPCBrZWliYXRzdVwgOwor5YaF6YGUIDwgbmFpdGF0c3VcIDsKK+awtOa7uOS8nSA8IHN1aWtvZGVuXCA7CivlvqHlrKLmp5ggPCBvam91c2FtYVwgOwor5b+D5ZqiIDwgc2hpbicnbm91XCA7CivlvbnlvpcgPCB5YWt1dG9rdVwgOwor6Ieo5bqK5Yy7IDwgcmluc2hvdWlcIDsKK+mAo+eriyA8IHJlbnJpdHN1XCA7Civpg7fmhIEgPCBreW91c2h1dVwgOwor5b235b2/IDwgaG91ZnV0c3VcIDsKK+W6reefsyA8IG5pd2Fpc2hpXCA7CivliIfogIUgPCBraXJlbW9ub1wgOwor6YGF55m6IDwgY2hpaGF0c3VcIDsKK+aghOmkiua6kCA8IGVpeW91Z2VuXCA7CivlpJrlubTojYkgPCB0YW5lbnNvdVwgOwor6I235Y6E5LuLIDwgbml5YWtrYWlcIDsKK+WFg+memCA8IG1vdG9zYXlhXCA7CivlirHno4HmkI0gPCByZWlqaXNvblwgOwor5a6J5YWo55OjIDwgYW56ZW5iZW5cIDsKK+mHjemFuOe0oCA8IGp1dXNhbnNvXCA7Civlv5jljbQgPCBib3VreWFrdVwgOwor5q205q20IDwgcmVraXJla2lcIDsKK+S6jOWhgeaJiyA8IG5pcnVpc2h1XCA7Civnorrkv6EgPCBrYWt1c2hpblwgOwor55+z5p+xIDwgc2VraWNodXVcIDsKK+acqOW3peWFtyA8IG1va2tvdWd1XCA7CivmrKDnlaogPCBrZXRzdWJhblwgOwor5b2w5b6zIDwgc2hvdXRva3VcIDsKK+eCueecvOWZqCA8IHRlbmdhbmtpXCA7CivmhJrlm7PmhJrlm7MgPCBndXp1Z3V6dVwgOwor6bGI6IW5IDwgdGFyYWZ1a3VcIDsKK+WJsueJqSA8IHdhcmVtb25vXCA7CivluZXoh6MgPCBiYWt1c2hpblwgOwor5YWl6YuPIDwgbnl1dWt5b3VcIDsKK+iOq+Wkp+WwjyA8IG1lcml5YXN1XCA7Civoo73pi7zmiYAgPCBzZWlrb3Vqb1wgOwor6Lu96bSoIDwga2FydWdhbW9cIDsKK+maoOiUveWtkCA8IGlucGVpc2hpXCA7Civli5jlrprloLQgPCBrYW5qb3ViYVwgOwor57695Zuj5omHIDwgaGF1Y2hpd2FcIDsKK+W/teS7jyA8IG5lbmJ1dHN1XCA7CivnoLTmiJLlg6cgPCBoYWthaXNvdVwgOwor54Cs5oi454mpIDwgc2V0b21vbm9cIDsKK+iPiuefsyA8IGtpa3Vpc2hpXCA7CivlhrfooYAgPCByZWlrZXRzdVwgOwor5bmz57W5IDwgaGlyYWdpbnVcIDsKK+mFkuWRkSA8IHNha2Vub21pXCA7CivokYnmoZwgPCBoYXpha3VyYVwgOwor552A57GzIDwgY2hha3ViZWlcIDsKK+Wkp+iLseaWrSA8IGRhaWVpZGFuXCA7CivlvLfmlbUgPCBreW91dGVraVwgOwor5rGC5YSfIDwga3l1dXNob3VcIDsKK+mAmuensCA8IHRzdXVzaG91XCA7Civlv6Dlg5UgPCBjaHV1Ym9rdVwgOwor5rC05YqbIDwgc3Vpcnlva3VcIDsKK+aui+aciCA8IHphbmdldHN1XCA7Civli4Xmm7ggPCBjaG9rdXNob1wgOwor5YWI6K2w5qipIDwgc2VuZ2lrZW5cIDsKK+WFsemAmiA8IGt5b3V0c3V1XCA7Civlj43mipfmnJ8gPCBoYW5rb3VraVwgOwor5pys5Lya6K2wIDwgaG9ua2FpZ2lcIDsKK+WJjeeVpSA8IHplbnJ5YWt1XCA7Civmrormm7QgPCBrb3Rvc2FyYVwgOwor5bym5pyIIDwgZ2VuZ2V0c3VcIDsKK+iLseexs+S6uiA8IGVpYmVpamluXCA7CivkvY7poIbkvY0gPCB0ZWlqdW4nJ2lcIDsKK+ebruiWrCA8IG1lZ3VzdXJpXCA7CivkuI3ogIHms4kgPCBmdXJvdXNlblwgOwor5Y2U5ZWGIDwga3lvdXNob3VcIDsKK+eZvumMrCA8IGh5YWt1cmVuXCA7CivlhazpgZQgPCBrb3V0YXRzdVwgOwor5byx5pW1IDwgamFrdXRla2lcIDsKK+mAhueulyA8IGd5YWt1c2FuXCA7Civpu5njgIUgPCBtb2t1bW9rdVwgOwor5YWr6YGUIDwgaGF0dGF0c3VcIDsKK+WFq+mBkyA8IGhhY2hpZG91XCA7CivljJflsbEgPCBraXRheWFtYVwgOwor5Ym/5ruFIDwgc291bWV0c3VcIDsKK+WQjeWum+S6uiA8IG5hYXRlbmluXCA7CivlkozmsJfol7nol7kgPCB3YWtpYWlhaVwgOwor6Ieq55Sx6KmpIDwgaml5dXVzaGlcIDsKK+W7g+eJqSA8IGhhaWJ1dHN1XCA7Civlhazov7AgPCBrb3VqdXRzdVwgOwor5b+g5L+hIDwgY2h1dXNoaW5cIDsKK+earuizqiA8IGhpc2hpdHN1XCA7Civnn7PmlocgPCBpc2hpYnVtaVwgOwor5b2i5byPIDwga2Vpc2hpa2lcIDsKK+WHi+iQvSA8IGNob3VyYWt1XCA7CivmhI/lv5fnmoQgPCBpc2hpdGVraVwgOwor5Y245YCkIDwgb3Jvc2hpbmVcIDsKK+aIpumXmOWToSA8IHNlbnRvdWluXCA7Civljp/nlLvlg48gPCBnZW5nYXpvdVwgOwor55+t5pelIDwgdGFuaml0c3VcIDsKK+awtOWFiCA8IG1penVzYWtpXCA7Civlt7foqqwgPCBrb3VzZXRzdVwgOwor5aSn6IW/6YOoIDwgZGFpdGFpYnVcIDsKK+WFsei7myA8IGt5b3V5YWt1XCA7Civpu5LjgIUgPCBrdXJvZ3Vyb1wgOwor5Yml54S8IDwgc3VraXlha2lcIDsKK+a7i+izgOecjCA8IHNoaWdha2VuXCA7Civph43msLTntKAgPCBqdXVzdWlzb1wgOwor6YCi552AIDwgaG91Y2hha3VcIDsKK+W7g+eGsSA8IGhhaW5ldHN1XCA7CivkurrpgKDmuZYgPCBqaW56b3Vrb1wgOwor5b255a6FIDwgeWFrdXRha3VcIDsKK+WIsOedgCA8IHRvdWNoYWt1XCA7Civoq4vosqDluKsgPCB1a2VvaXNoaVwgOwor6Iy56Ju4IDwgeXVkZWRha29cIDsKK+awtOa6luWZqCA8IHN1aWp1bmtpXCA7CivmvKvnlLvmnKwgPCBtYW5nYWhvblwgOwor5LiN55yf6Z2i55uuIDwgZnVtYWppbWVcIDsKK+WGjeiqrCA8IHNhaXNldHN1XCA7CivpgKPnmbogPCByZW5wYXRzdVwgOwor5b6p5ZSxIDwgZnVrdXNob3VcIDsKK+efpeaXpSA8IGNoaW5pY2hpXCA7CivlvrTlj44gPCBjaG91c2h1dVwgOwor5YuF5pKwIDwgY2hva3VzZW5cIDsKK+S6kuaPm+aApyA8IGdva2Fuc2VpXCA7CivliIbnr4AgPCBidW5zZXRzdVwgOwor6YWN5YiXIDwgaGFpcmV0c3VcIDsKK+eorueoruebuCA8IHNodWp1c291XCA7Civlh6bnvbAgPCBzaG9iYXRzdVwgOwor5LqI6Ziy5rOVIDwgeW9ib3Vob3VcIDsKK+WuieWFqOeBryA8IGFuemVudG91XCA7CivmrbTmnJ0gPCByZWtpY2hvdVwgOwor5YqH5q+SIDwgZ2VraWRva3VcIDsKK+i/veeptiA8IHRzdWlreXV1XCA7CivmrbPmnKsgPCBzYWltYXRzdVwgOwor5qiq6Lu4IDwgeW9rb2ppa3VcIDsKK+WIhuethiA8IGJ1bnBpdHN1XCA7CivovK/pjLIgPCBzaHV1cm9rdVwgOwor5Y2K5Y+jIDwgaGFua3VjaGlcIDsKK+mBi+mAgeS6uiA8IHVuc291bmluXCA7CivljYHlk7IgPCBqdXR0ZXRzdVwgOwor55m+6YG4IDwgaHlha3VzZW5cIDsKK+S4iummluWwviA8IGpvdXNodWJpXCA7Civku4/oiI7liKkgPCBidXNzaGFyaVwgOwor6IiH5aSq6ICFIDwgeW90YW1vbm9cIDsKK+a6gOWkqeS4iyA8IG1hbnRlbmthXCA7CivlvpfmiYvli53miYsgPCBldGVrYXR0ZVwgOwor5YWI6YeRIDwgc2FraWdhbmVcIDsKK+i7vemjnyA8IGtlaXNob2t1XCA7CivliIbnq4sgPCBidW5yaXRzdVwgOwor5L6h5qC85beuIDwga2FrYWt1c2FcIDsKK+WGheiosyA8IHVjaGl3YWtlXCA7Civov73npo8gPCB0c3VpZnVrdVwgOwor54Sh6Iqx5p6cIDwgaWNoaWppa3VcIDsKK+assua3sSA8IHlva3VidWthXCA7CivkuI3kurrmg4UgPCBmdW5pbmpvdVwgOwor5Zyf5bu65bGLIDwgZG9rZW4nJ3lhXCA7Civmrarmm7IgPCB3YWlreW9rdVwgOwor5YWl6LaFIDwgbnl1dWNob3VcIDsKK+WJsuazqCA8IHdhcmljaHV1XCA7CivmsJHlipsgPCBtaW5yeW9rdVwgOwor6YGu5pat5qmfIDwgc2hhZGFua2lcIDsKK+S5seadreatryA8IHJhbmd1aWJhXCA7CivonYvntLDlt6UgPCByb3V6YWlrdVwgOwor5YyX5aOBIDwgaG9rdWhla2lcIDsKK+eznOeIm+aApyA8IGJpcmFuc2VpXCA7CivosrTlhazlrZAgPCBraWtvdXNoaVwgOwor5buD5ruFIDwgaGFpbWV0c3VcIDsKK+awtOS4iiA8IG1pbmFrYW1pXCA7CivliJ3nm4YgPCBoYXRzdWJvblwgOwor5buJ5L6h54mIIDwgcmVua2FiYW5cIDsKK+ato+acrSA8IHNob3VmdWRhXCA7CivlhaXos54gPCBueXV1c2hvdVwgOwor5YWI6YGUIDwgc2VuZGF0c3VcIDsKK+atouacqCA8IHRvbWFyaWdpXCA7CivnnYDnnLwgPCBjaGFrdWdhblwgOwor5Yid55m6IDwgc2hvaGF0c3VcIDsKK+WOn+WtkOeCiSA8IGdlbnNoaXJvXCA7Civou6Lmj5vngokgPCB0ZW5rYW5yb1wgOwor6buO5piO5pyfIDwgcmVpbWVpa2lcIDsKK+i7n+mqqCA8IG5hbmtvdHN1XCA7Civoj5bokrLmua8gPCBzaG91YnV5dVwgOwor54Sh6aeE6aqoIDwgbXVkYWJvbmVcIDsKK+mhnuS8vOWTgSA8IHJ1aWppaGluXCA7Civpo5vooYzpmoogPCBoaWtvdXRhaVwgOwor5b2T5bGAIDwgdG91a3lva3VcIDsKK+auuuWusyA8IHNhdHN1Z2FpXCA7Civph5Hps7PoirEgPCBraW5wb3VnZVwgOwor6buS6Zuy5q+NIDwga3Vyb3VubW9cIDsKK+iQveaOjCA8IHJha3VzaG91XCA7Civnm7jmiYvmlrkgPCBhaXRlZ2F0YVwgOwor5LiN5a6M5YWoIDwgZnVrYW56ZW5cIDsKK+W8t+W8sSA8IGt5b3VqYWt1XCA7Civlv4PkuK0gPCBzaGluY2h1dVwgOwor56WW5Zu95oSbIDwgc29rb2t1YWlcIDsKK+W5s+eavyA8IGhpcmF6YXJhXCA7Civli5/pm4bosrsgPCBib3NodXVoaVwgOwor5Yid55SjIDwgaGF0c3V6YW5cIDsKK+W4uOe3kSA8IGpvdXJ5b2t1XCA7CivnlJ/nlKPosrsgPCBzZWlzYW5oaVwgOwor57Wx5ZCI5YyWIDwgdG91Z291a2FcIDsKK+aXheihjOWutiA8IHJ5b2tvdWthXCA7CivnpL7lpJbnp5ggPCBzaGFnYWloaVwgOwor5Y2X5LuPIDwgbmFuZnV0c3VcIDsKK+W+k+S+oeeojiA8IGp1dWthemVpXCA7CivljYHlhasgPCBqdXVoYWNoaVwgOwor5L2/5b6S5pu4IDwgc2hpdG9zaG9cIDsKK+mBqealrSA8IHRla2lneW91XCA7CivprLHprLEgPCB1dHN1dXRzdVwgOwor6L+955m9IDwgdHN1aWhha3VcIDsKK+W+k+WNkiA8IGp1dXNvdHN1XCA7CivlvqHlhqAgPCBva2FubXVyaVwgOwor5b6L5ZGCIDwgcml0c3VyeW9cIDsKK+i+o+iFlSA8IHJhdHN1d2FuXCA7CivnnYDnlKggPCBjaGFrdXlvdVwgOwor6YCG55SoIDwgZ3lha3V5b3VcIDsKK+mAhueUoyA8IGd5YWt1emFuXCA7Civlha3opqogPCByb2t1c2hpblwgOwor5b6M5Y+jIDwgYXRva3VjaGlcIDsKK+WvneWMlueypyA8IG5lZ2VzaG91XCA7CivlibXkuJbmnJ8gPCBzb3VzZWlraVwgOwor6YeR55uu6a+bIDwga2lubWVkYWlcIDsKK+WNmOS4gCA8IHRhbicnaXRzdVwgOwor5biv57eRIDwgdGFpcnlva3VcIDsKK+efs+W8kyA8IGlzaGl5dW1pXCA7Civpgbjmm7IgPCBzZW5reW9rdVwgOwor6YCa54mSIDwgdHN1dWNob3VcIDsKK+S4iuS4i+e3miA8IGpvdWdlc2VuXCA7CivnkIbkuovlm70gPCByaWppa29rdVwgOwor5rC05rqW5YSAIDwgc3VpanVuZ2lcIDsKK+WGjeS/nemZuiA8IHNhaWhva2VuXCA7CivnnIznq4sgPCBrZW5yaXRzdVwgOwor5Yil54q2IDwgYmV0c3Vqb3VcIDsKK+S4i+mmrOWFiCA8IGdlYmFzYWtpXCA7Civlh43ntZAgPCB0b3VrZXRzdVwgOwor5a+E5LuY6KGM54K6IDwga2lmdWtvdWlcIDsKK+azieiyqOe0mSA8IHNlbmthc2hpXCA7CivlvqHku6TlrKIgPCBnb3JlaWpvdVwgOwor5bed6J2JIDwga2F3YXNlbWlcIDsKK+mDt+WbvSA8IGt5b3Vrb2t1XCA7Civov73nlLMgPCB0c3Vpc2hpblwgOwor6Zu75rCX6KGXIDwgZGVua2lnYWlcIDsKK+egguWxsSA8IHN1bmF5YW1hXCA7Civlvovli5UgPCByaXRzdWRvdVwgOwor5q2j5o6lIDwgc2Vpc2V0c3VcIDsKK+i/q+ecnyA8IGhha3VzaGluXCA7Civou43mlL/pg6ggPCBndW5zZWlidVwgOwor5b6h6aGM55uuIDwgb2RhaW1va3VcIDsKK+ecgeethiA8IHNlaWhpdHN1XCA7CivlvJ/lvqEgPCBvdG91dG9nb1wgOwor5YeE57W2IDwgc2VpemV0c3VcIDsKK+W+jOWIlyA8IGtvdXJldHN1XCA7CivnhKHkv53oqLwgPCBtdWhvc2hvdVwgOwor5Y+v5YiG5oCnIDwga2FidW5zZWlcIDsKK+S6nOmJm+mJhCA8IGFlbnRldHN1XCA7Civli5XlronlrpogPCBkb3VhbnRlaVwgOwor5bm0546HIDwgbmVucml0c3VcIDsKK+WIkeS6i+S4iiA8IGtlaWppam91XCA7CivlpbPmgKfnlKggPCBqb3NlaXlvdVwgOwor5YaX6IiMIDwgam91emV0c3VcIDsKK+aomeiouyA8IGh5b3VjaHV1XCA7CivnnJ/nmb0gPCBtYXNzaGlyb1wgOwor5YW46JasIDwgdGVuJyd5YWt1XCA7Civkub7nh6XngokgPCBrYW5zb3Vyb1wgOwor5byx5bCRIDwgamFrdXNob3VcIDsKK+iCsuWFkOazlSA8IGlrdWppaG91XCA7Civnm7TnrZQgPCBjaG9rdXRvdVwgOwor55+z5bGxIDwgaXNoaXlhbWFcIDsKK+iMnOiJsiA8IGFrYW5laXJvXCA7CivnmbroqIAgPCBoYXRzdWdlblwgOwor5oSb6bOl5a62IDwgYWljaG91a2FcIDsKK+acrOiInuWPsCA8IGhvbmJ1dGFpXCA7CivlgIvkurrmgKcgPCBrb2ppbnNlaVwgOwor5byT5b2iIDwgeXVtaW5hcmlcIDsKK+WJr+acqCA8IGZ1a3Vib2t1XCA7Civkvp3lrZjnl4cgPCBpem9uc2hvdVwgOwor55yf55eHIDwgc2hpbnNob3VcIDsKK+WKo+aDhSA8IHJldHN1am91XCA7CivmgqrmgKfluqYgPCBha3VzZWlkb1wgOwor5Yal572wIDwgbWVpYmF0c3VcIDsKK+elnuOAhSA8IGthbWlnYW1pXCA7CivliqPmgqogPCByZXRzdWFrdVwgOwor6a6u6KGAIDwgc2Vua2V0c3VcIDsKK+e+jueUt+WtkCA8IGJpbmFuc2hpXCA7CivlvbnlibIgPCB5YWt1d2FyaVwgOwor55+z5a6kIDwgaXNoaW11cm9cIDsKK+iLpeihhiA8IHdha2FzaHV1XCA7Civmr43lkJsgPCBoYWhhZ2ltaVwgOwor6Zu75rOi5rOVIDwgZGVucGFob3VcIDsKK+i7jeS6i+S4iiA8IGd1bmppam91XCA7CivlubPnhrEgPCBoZWluZXRzdVwgOwor55u056iOIDwgY2hva3V6ZWlcIDsKK+i/keedgCA8IGtpbmNoYWt1XCA7CivpgZPmnb8gPCBtaWNoaWl0YVwgOwor54OP54qA6KeSIDwgdXNhaWtha3VcIDsKK+efqeWwuiA8IGthbmVqYWt1XCA7CivlgY/lvq7liIYgPCBoZW5iaWJ1blwgOwor57Sg5a+S6LKnIDwgc3VrYW5waW5cIDsKK+ixmuWwj+WxiyA8IGJ1dGFnb3lhXCA7Civlu7bmu57nqI4gPCBlbnRhaXplaVwgOwor6YG45oqcIDwgc2VuYmF0c3VcIDsKK+WGpeeOi+aYnyA8IG1laW91c2VpXCA7Civlhobnm6TnirYgPCBlbmJhbmpvdVwgOwor55m96J+7IDwgc2hpcm9hcmlcIDsKK+W8t+WlqiA8IGdvdWRhdHN1XCA7CivolLXmm7jlrrYgPCB6b3VzaG9rYVwgOwor6Yyy6Z+z5qmfIDwgcm9rdW9ua2lcIDsKK+mBjuiIrOadpSA8IGthaGFucmFpXCA7CivpkZrlrZTmqZ8gPCBzYW5rb3VraVwgOwor5LiA6Iis5Lq6IDwgaXBwYW5qaW5cIDsKK+WIuuauuiA8IHNoaXNhdHN1XCA7Civlh6Hnmb4gPCBib25weWFrdVwgOwor5b6L5LukIDwgcml0c3VyZWlcIDsKK+ebuOaJi+W9uSA8IGFpdGV5YWt1XCA7CivlhoXohb8gPCB1Y2hpbW9tb1wgOwor5q2p5ZCI57WmIDwgYnVhaWt5dXVcIDsKK+S6leaIuOe2sSA8IGlkb2R6dW5hXCA7Civml6Lnn6XmlbAgPCBraWNoaXN1dVwgOwor6LuN6ZalIDwgZ3VuYmF0c3VcIDsKK+W3peWLmeW6lyA8IGtvdW11dGVuXCA7CivluaPniakgPCBoZWltb3RzdVwgOwor6YC45qW9IDwgaXRzdXJha3VcIDsKK+mAn+axuiA8IHNva2tldHN1XCA7CivljJflgbQgPCBob2t1c29rdVwgOwor5LiA5pyx6YqAIDwgaXNzaHVnaW5cIDsKK+W9q+WIuyA8IGNob3Vrb2t1XCA7CivpgIbmva4gPCBzYWthc2hpb1wgOwor56Cy5YiXIDwgaG91cmV0c3VcIDsKK+iIquepuuapnyA8IGtvdWt1dWtpXCA7Civpu5LnubvlrZAgPCBrdXJvanVzdVwgOwor55m76KiY5omAIDwgdG91a2lzaG9cIDsKK+ato+W8jyA8IHNlaXNoaWtpXCA7CivpganmmYLmiZMgPCB0ZWtpamlkYVwgOwor5Yag57W2IDwga2FuemV0c3VcIDsKK+auv+WOnyA8IHRvbm9iYXJhXCA7Civlh7jnirYgPCB0b3RzdWpvdVwgOwor5ZCI55CG5oCnIDwgZ291cmlzZWlcIDsKK+mBlOaWhyA8IHRhdHN1YnVuXCA7CivlvoHkvJAgPCBzZWliYXRzdVwgOwor5bm75ruFIDwgZ2VubWV0c3VcIDsKK+W8vuWcpyA8IGRhbicnYXRzdVwgOwor6Lu96Lu9IDwga2FydWdhcnVcIDsKK+mZsOmbu+WtkCA8IGluZGVuc2hpXCA7CivlhYXooYAgPCBqdXVrZXRzdVwgOwor5YaF6IG3IDwgbmFpc2hva3VcIDsKK+WKqeWLleipniA8IGpvZG91c2hpXCA7CivmhbDol4nmlpkgPCBpc2hhcnlvdVwgOwor6Luf6YmEIDwgbmFudGV0c3VcIDsKK+ihm+eUn+WFtSA8IGVpc2VpaGVpXCA7Civnn7PloqggPCBzZWtpYm9rdVwgOwor5L2O54mp5L6hIDwgdGVpYnVra2FcIDsKK+WAi+S6uuWxlSA8IGtvamludGVuXCA7Civlrp/kvZPljJYgPCBqaXR0YWlrYVwgOwor5Yik5rG6IDwgaGFua2V0c3VcIDsKK+efreWknCA8IG1pamlrYXlvXCA7CivlvLflnKcgPCBreW91YXRzdVwgOwor6YKq6a2U6ICFIDwgamFtYW1vbm9cIDsKK+W5s+a7kSA8IGhlaWthdHN1XCA7CivprKLplbcgPCBiaW4nJ25hZ2FcIDsKK+exs+itsOS8miA8IGJlaWdpa2FpXCA7CivnhKHlsL3olLUgPCBtdWppbnpvdVwgOwor5YaG572QIDwgbWFydWdhbWFcIDsKK+ebtOebtCA8IGppa2lqaWtpXCA7Civlt7vntJkgPCBtYWtpZ2FtaVwgOwor5YW86IG3IDwga2Vuc2hva3VcIDsKK+i7ouaPm+acnyA8IHRlbmthbmtpXCA7CivmrKDmlocgPCBrZXRzdWJ1blwgOwor5Luj6K2w5aOrIDwgZGFpZ2lzaGlcIDsKK+m8u+a/gemfsyA8IGJpZGFrdW9uXCA7CivlhqznqbogPCBmdXl1em9yYVwgOwor6YGF5pelIDwgY2hpaml0c3VcIDsKK+WIpeauvyA8IGJldHN1ZGVuXCA7CivliKXmrrUgPCBiZXRzdWRhblwgOwor6YCG5rWqIDwgc2FrYW5hbWlcIDsKK+eZveiTriA8IGJ5YWt1cmVuXCA7Civnn7PlnqMgPCBpc2hpZ2FraVwgOwor6auY6Zu75L2NIDwga291ZGVuJydpXCA7CivmjIHlj4Lph5EgPCBqaXNhbmtpblwgOwor5ZSv55CG6KuWIDwgeXVpcmlyb25cIDsKK+i7uOi2syA8IGppa3Vhc2hpXCA7CivlkI3mnJvlrrYgPCBtZWlib3VrYVwgOwor5aSa5YWD6KuWIDwgdGFnZW5yb25cIDsKK+ebrueahCA8IG1va3V0ZWtpXCA7CivokKnlsZ4gPCBoYWdpem9rdVwgOwor6Ieq5qOE57OeIDwgeWFrZWt1c29cIDsKK+ato+espuWPtyA8IHNlaWZ1Z291XCA7CivnhKHnlKPogIUgPCBtdXNhbnNoYVwgOwor6YCf5qWtIDwgaGF5YXdhemFcIDsKK+iCsuWFkOabuCA8IGlrdWppc2hvXCA7CivluILnq4sgPCBzaGlyaXRzdVwgOwor6Iul6I2JIDwgd2FrYWt1c2FcIDsKK+Wumuacn+iIuSA8IHRlaWtpc2VuXCA7CivnnYDmsLQgPCBjaGFrdXN1aVwgOwor5omL5byB5b2TIDwgdGViZW50b3VcIDsKK+S5vueHpeapnyA8IGthbnNvdWtpXCA7CivkuInml6XplpMgPCBtaWtrYWthblwgOwor5Y2B5LqM5YiGIDwganV1bmlidW5cIDsKK+eoveWPpOWPsCA8IGtlaWtvZGFpXCA7Civou6LovY0gPCB0ZW50ZXRzdVwgOwor6bCQ55quIDwgd2FuaWdhd2FcIDsKK+atouWuvyA8IHNoaXNodWt1XCA7CivoirjooZMgPCBnZWlqdXRzdVwgOwor5YWI6aCt5LyNIDwgc2VudG91Z29cIDsKK+ato+WulyA8IG1hc2FtdW5lXCA7CivmqKrohbkgPCB5b2tvYmFyYVwgOwor5YaX562GIDwgam91aGl0c3VcIDsKK+WFrOiBtyA8IGtvdXNob2t1XCA7CivlkITjgIUgPCBzb3Jlem9yZVwgOwor5YiD5rihIDwgaGF3YXRhcmlcIDsKK+mzqeWwviA8IG1pem9vY2hpXCA7Civlh7rmnaXpq5ggPCBkZWtpZGFrYVwgOwor5Ye65ryUIDwgc2h1dHN1ZW5cIDsKK+mBqeW9uSA8IHRla2l5YWt1XCA7CivouqvplbcgPCBzaGluY2hvdVwgOwor5LiJ5LiW55u4IDwgc2FuemVzb3VcIDsKK+WKm+WtpiA8IHJpa2lnYWt1XCA7CivoibLpgZMgPCBzaGlraWRvdVwgOwor55m+6Iq4IDwgaHlha3VnZWlcIDsKK+S5juWPpOatoueCuSA8IG9rb3RvdGVuXCA7Civli6LlipsgPCBzZWlyeW9rdVwgOwor6Ii56ZyKIDwgZnVuYWRhbWFcIDsKK+mBi+aguemIjSA8IHVua29uZG9uXCA7CivnoILljp8gPCBzdW5haGFyYVwgOwor5b2O5YWlIDwgd2FuJydueXV1XCA7CivooZvnlJ/kuIogPCBlaXNlaWpvdVwgOwor5Yi25pytIDwgc2Vpc2F0c3VcIDsKK+alvemVtyA8IGdha3VjaG91XCA7Civnm7TnkIMgPCBjaG9ra3l1dVwgOwor5Yy75a2m5aOrIDwgaWdha3VzaGlcIDsKK+iri+iyoOS6uiA8IHVrZW9pbmluXCA7CivmpbXpmZAgPCBreW9rdWdlblwgOwor6a6r6IaaIDwgc2FtZWhhZGFcIDsKK+aWremdouWbsyA8IGRhbm1lbnp1XCA7CivnmbroibIgPCBoYXNzaG9rdVwgOwor6Jma5Luu54y/IDwga29rZXphcnVcIDsKK+acquS9v+eUqCA8IG1pc2hpeW91XCA7Civpm7vms6LmmJ8gPCBkZW5wYXNlaVwgOwor6JGs5YiXIDwgc291cmV0c3VcIDsKK+WLheWVjyA8IGNob2t1bW9uXCA7CivlvL7lipsgPCBkYW5yeW9rdVwgOwor5byP5aC0IDwgc2hpa2lqb3VcIDsKK+mrmOmrmCA8IHRha2FkYWthXCA7Civpn7Ppn7voq5YgPCBvbicnaW5yb25cIDsKK+WJsuW8lSA8IHdhcmliaWtpXCA7CivmqZ/morDlt6UgPCBraWthaWtvdVwgOwor5qyy5b+DIDwgeW9rdXNoaW5cIDsKK+WGjeWwgemOliA8IHNhaWZ1dXNhXCA7CivliZTmiokgPCB0ZWtrZXRzdVwgOwor6Ziy5rOi5aCkIDwgYm91aGF0ZWlcIDsKK+assuW+lyA8IHlva3V0b2t1XCA7CivpgYvou6LmiYsgPCB1bnRlbnNodVwgOwor6a6u6IKJIDwgc2VuJyduaWt1XCA7CivpgIbmp5ggPCBzYWthc2FtYVwgOwor6YCy5pKDIDwgc2hpbmdla2lcIDsKK+S6ieimh+aIpiA8IHNvdWhhc2VuXCA7Civpu5LmloflrZcgPCBrdXJvbW9qaVwgOwor54Sh6aeE6LazIDwgbXVkYWFzaGlcIDsKK+WLleWKmyA8IGRvdXJ5b2t1XCA7Civli4Xlkb0gPCBjaG9rdW1laVwgOwor552A54mp5ZywIDwga2ltb25vamlcIDsKK+Wkluawl+WcjyA8IGdhaWtpa2VuXCA7Civlh5vng4ggPCByaW5yZXRzdVwgOwor6ZaL5Lya5pelIDwga2Fpa2FpYmlcIDsKK+eUseadpeabuCA8IHl1cmFpc2hvXCA7Civmrablo6sgPCBtb25vbm9mdVwgOwor6bWd5Y+j55ihIDwgZ2Frb3Vzb3VcIDsKK+auuuS6uiA8IHNhdHN1amluXCA7Civlg63otoogPCBzZW4nJ2V0c3VcIDsKK+mAo+aXpSA8IHJlbmppdHN1XCA7CivmraPlpKIgPCBtYXNheXVtZVwgOwor5Lm+54el5p6cIDwga2Fuc291a2FcIDsKK+WIt+aVsCA8IHNhdHN1c3V1XCA7Civou4vovaIgPCBhdHN1cmVraVwgOwor5a6J5YWo5oCnIDwgYW56ZW5zZWlcIDsKK+WEsuiThCA8IGNob2NoaWt1XCA7Civlr4zlo6vkupTmuZYgPCBmdWppZ29rb1wgOwor5YaG56qTIDwgbWFydW1hZG9cIDsKK+iLpeiAhSA8IHdha2Ftb25vXCA7Civou4rovYQgPCBzaGFrYXRzdVwgOwor5oGQ44CFIDwga293YWdvd2FcIDsKK+mAmuaagSA8IHRzdXVneW91XCA7CivliY3miZUgPCBtYWViYXJhaVwgOwor55m+6IGeIDwgaHlha3VidW5cIDsKK+aYr+aYr+mdnumdniA8IHplemVoaWhpXCA7CivnmbrogrIgPCBoYXRzdWlrdVwgOwor6YCQ5p2hIDwgY2hpa3Vqb3VcIDsKK+ebiuebiiA8IG1hc3VtYXN1XCA7CivmqKrnuJ4gPCB5b2tvamltYVwgOwor6YGU5byBIDwgdGF0c3ViZW5cIDsKK+aghOmkiuWjqyA8IGVpeW91c2hpXCA7Civlj7DluIPlt74gPCBkYWlidWtpblwgOwor5bej56qfIDwgc291a3V0c3VcIDsKK+W3neetiyA8IGthd2FzdWppXCA7Civmp4vmiJDlk6EgPCBrb3VzZWlpblwgOwor5YWN6IG3IDwgbWVuc2hva3VcIDsKK+aooeevhOeUnyA8IG1vaGFuc2VpXCA7Civpp4bli5XovKogPCBrdWRvdXJpblwgOwor5YuH5YqbIDwgeXV1cnlva3VcIDsKK+W3neerryA8IGthd2FiYXRhXCA7Civli4HljZIgPCBrZWlzb3RzdVwgOwor5p2x5rSL5Y+yIDwgdG95b2Z1bWlcIDsKK+WGheelnSA8IHVjaGlpd2FpXCA7CivojYnniakgPCBrdXNhbW9ub1wgOwor5bKz6bqTIDwgZ2FrdXJva3VcIDsKK+WIhualtSA8IGJ1bmt5b2t1XCA7Civmp43ooZMgPCBzb3VqdXRzdVwgOwor6YCj5o6lIDwgcmVuc2V0c3VcIDsKK+WNmOeyvuW6piA8IHRhbnNlaWRvXCA7CivngavmnKjlnJ8gPCBrYW1va3Vkb1wgOwor5Luj6K2w5Yi2IDwgZGFpZ2lzZWlcIDsKK+acquWumueovyA8IG1pdGVpa291XCA7CivlhaXnsY0gPCBueXV1c2VraVwgOwor5LiW6Kmx54mpIDwgc2V3YW1vbm9cIDsKK+WJr+WvqSA8IGZ1a3VzaGluXCA7Civnn6XlipsgPCBjaGlyeW9rdVwgOwor5Ymy5a6JIDwgd2FyaXlhc3VcIDsKK+WHpuaxuiA8IHNob2tldHN1XCA7CivlubTmnKsgPCBuZW5tYXRzdVwgOwor5bm+5pelIDwgaWt1bmljaGlcIDsKK+W5tOaciCA8IG5lbmdldHN1XCA7CivliIfmoKogPCBraXJpa2FidVwgOwor5Yq55YqbIDwga291cnlva3VcIDsKK+ims+aIpuiomCA8IGthbnNlbmtpXCA7CivlpKnnk5znsokgPCB0ZW5rYWZ1blwgOwor6aq46aqoIDwgZ2Fpa290c3VcIDsKK+W9ouaIkOacnyA8IGtlaXNlaWtpXCA7CivmlL7mmKDmqKkgPCBob3VlaWtlblwgOwor5byP5Y+wIDwgc2hpa2lkYWlcIDsKK+ebo+imluaJgCA8IGthbnNoaWpvXCA7CivpqqjpsZcgPCBrb3RzdXJpblwgOwor5b6h5pys5bCKIDwgZ29ob256b25cIDsKK+WNmOe0lOWMliA8IHRhbmp1bmthXCA7CivlgIvkurrlkI0gPCBrb2ppbm1laVwgOwor5qSc55y85Yy7IDwga2VuZ2FuJydpXCA7Civlho3nmbogPCBzYWloYXRzdVwgOwor5q275YqbIDwgc2hpcnlva3VcIDsKK+acqui4j+WzsCA8IG1pdG91aG91XCA7CivlirTlipsgPCByb3VyeW9rdVwgOwor5qiq562LIDwgeW9rb3N1amlcIDsKK+aWreaWreWbuiA8IGRhbmRhbmtvXCA7Civlt4znqp8gPCBnYW5rdXRzdVwgOwor5Yas54mpIDwgZnV5dW1vbm9cIDsKK+mAhuaVsCA8IGd5YWt1c3V1XCA7CivlhY7ntrIgPCB1c2FnaWFtaVwgOwor5pqW5oi/5ZmoIDwgZGFuYm91a2lcIDsKK+eZveezuCA8IHNoaXJhaXRvXCA7CivmrbvliKUgPCBzaGliZXRzdVwgOwor5YiH5pytIDwga2lyaWZ1ZGFcIDsKK+aWoeaXi+iAhSA8IGFzc2Vuc2hhXCA7CivliIfmnJsgPCBzZXRzdWJvdVwgOwor5bmz5pelIDwgaGVpaml0c3VcIDsKK+W3puebriA8IGhpZGFyaW1lXCA7Civou73olJEgPCBrZWliZXRzdVwgOwor5LuP55Sf5LyaIDwgYnVzc2hvdWVcIDsKK+WJo+WuoiA8IGtlbmt5YWt1XCA7CivlhoXnmbogPCBuYWloYXRzdVwgOwor6KaP5qC85YyWIDwga2lrYWt1a2FcIDsKK+WPuOS7pOmDqCA8IHNoaXJlaWJ1XCA7CivmhI/ljKDmqKkgPCBpc2hvdWtlblwgOwor6IqL6JmrIDwgaW1vbXVzaGlcIDsKK+aki+mzpSA8IG11a3Vkb3JpXCA7CivlubPmlL8gPCBoaXJhbWFzYVwgOwor5bCK5pWs6KqeIDwgc29ua2VpZ29cIDsKK+mqqOmrhCA8IGtvdHN1enVpXCA7CivlvaLmhYvntKAgPCBrZWl0YWlzb1wgOwor55uu5risIDwgbW9rdXNva3VcIDsKK+WFg+e3oCA8IG1vdG9qaW1lXCA7CivmiJHliKnmiJHliKkgPCBnYXJpZ2FyaVwgOwor55+z5LqAIDwgaXNoaWdhbWVcIDsKK+WFiOe0sCA8IHNha2lib3NvXCA7Civli4Xku7sgPCBjaG9rdW5pblwgOwor55+b5YWIIDwgaG9rb3Nha2lcIDsKK+e+juWwkeWlsyA8IGJpc2hvdWpvXCA7CivluqbluqYgPCB0YWJpdGFiaVwgOwor5YaG6YGL5YuVIDwgZW4nJ3VuZG91XCA7Civli4Xku6QgPCBjaG9rdXJlaVwgOwor5YWI57SEIDwgc2VuJyd5YWt1XCA7CivosaHniZnoibIgPCB6b3VnZWlyb1wgOwor6JCp5Y6fIDwgaGFnaXdhcmFcIDsKK+WFpeelniA8IG55dXVzaGluXCA7Civmra/liJcgPCBzaGlyZXRzdVwgOwor5YiH5patIDwgc2V0c3VkYW5cIDsKK+W7g+WroSA8IGhhaWNoYWt1XCA7CivmrarlipsgPCB3YWlyeW9rdVwgOwor5byP5YW4IDwgc2hpa2l0ZW5cIDsKK+ioseWPr+abuCA8IGt5b2thc2hvXCA7Civov73mkoMgPCB0c3VpZ2VraVwgOwor5ZWG6K2w5ZOhIDwgc2hvdWdpaW5cIDsKK+W+oeS4gOaWsCA8IGdvaXNzaGluXCA7CivoiovolJMgPCBpbW9kenVydVwgOwor5oSJ5b+r54qvIDwgeXVrYWloYW5cIDsKK+W3u+eJqSA8IG1ha2ltb25vXCA7CivmjIfnpLrmnb8gPCBzaGlqaWJhblwgOwor55u45q66IDwgc291c2F0c3VcIDsKK+WGl+eJqSA8IGpvdWJ1dHN1XCA7CivpiYTlt6XmiYAgPCB0ZWtrb3Vqb1wgOwor5YmN5bGIIDwgemVua3V0c3VcIDsKK+WIs+W9oiA8IGt1cmlrYXRhXCA7CivntYzllrbpm6MgPCBrZWllaW5hblwgOwor5q2j5YmyIDwgc2Vpa2F0c3VcIDsKK+i6jemAsiA8IHlha3VzaGluXCA7CivlvIHliKUgPCBiZW5iZXRzdVwgOwor6Zmw6Zm95birIDwgb24nJ3lvdWppXCA7Civmj5vmsJfmiYcgPCBrYW5raXNlblwgOwor6Z2e5ZCI5rOVIDwgaGlnb3Vob3VcIDsKK+mjm+ihjOiJhyA8IGhpa291dGVpXCA7CivnnYDmiYsgPCBjaGFrdXNodVwgOwor6aOb6KGM6Ii5IDwgaGlrb3VzZW5cIDsKK+e1jOWWtumZoyA8IGtlaWVpamluXCA7CivlvqHmnaXlhYkgPCBnb3JhaWtvdVwgOwor5LiN5pat6I2JIDwgZnVkYW5zb3VcIDsKK+iMtua8rCA8IGNoYWR6dWtlXCA7CivnlZnps6UgPCByeXV1Y2hvdVwgOwor5qCE6aSK5YmkIDwgZWl5b3V6YWlcIDsKK+iIuei2syA8IGZ1bmFhc2hpXCA7CivpgKPpjpblupcgPCByZW5zYXRlblwgOwor5YW155WlIDwgaGVpcnlha3VcIDsKK+eZveelqCA8IGhha3VoeW91XCA7CivlhbXms5XlrrYgPCBoZWlob3VrYVwgOwor6aC75bqm5pWwIDwgaGluZG9zdXVcIDsKK+izh+acrOWutiA8IHNoaWhvbmthXCA7CivlgY/po58gPCBoZW5zaG9rdVwgOwor5pyA5Y+z57+8IDwgc2FpdXlva3VcIDsKK+aghOmkiuWIhiA8IGVpeW91YnVuXCA7CivmrYzlkIggPCB1dGFhd2FzZVwgOwor6LqR6LqFIDwgdHN1dHN1amlcIDsKK+atjOWPoyA8IHV0YWd1Y2hpXCA7CivpsLnmnKggPCBrYXRzdW9naVwgOwor6L+r5pKDIDwgaGFrdWdla2lcIDsKK+WPr+WHpuWIhiA8IGthc2hvYnVuXCA7CivmsbLjgIUgPCBreXV1a3l1dVwgOwor6JKZ5Y+k5paRIDwgbW91a29oYW5cIDsKK+WIneaBiyA8IGhhdHN1a29pXCA7CivlhYjnqIsgPCBzYWtpaG9kb1wgOwor6Ii56LODIDwgZnVuYWNoaW5cIDsKK+iMtua4iyA8IGNoYXNoaWJ1XCA7CivpgI/lvrkgPCB0b3V0ZXRzdVwgOwor55eF6LqrIDwgYnlvdXNoaW5cIDsKK+WvkueoveWPpCA8IGthbmdlaWtvXCA7CivnrKzkuInntIAgPCBkYWlzYW5raVwgOwor5qaC6KqsIDwgZ2Fpc2V0c3VcIDsKK+W6iuW6lyA8IHRva29taXNlXCA7CivnoILpoqjlkYIgPCBzdW5hYnVyb1wgOwor6YGL6Lui5aOrIDwgdW50ZW5zaGlcIDsKK+esrOS4gOe3miA8IGRhaWlzc2VuXCA7Civoia/olqwgPCByeW91eWFrdVwgOwor5qyg5aC0IDwga2V0c3Vqb3VcIDsKK+WIh+aIuyA8IHNldHN1cmFpXCA7CivmqJnnn7MgPCBoeW91c2VraVwgOwor5YG96YeRIDwgbmlzZWdhbmVcIDsKK+ebruaomSA8IG1va3VoeW91XCA7CivpioDooYzlrrYgPCBnaW5rb3VrYVwgOwor5Yqb5YCGIDwgcmlraXJ5b3VcIDsKK+mBuOWIpSA8IHNlbmJldHN1XCA7CivliLrlrqIgPCBzaGlreWFrdVwgOwor5LiJ5LuZ5Y+JIDwgc2Fuc2Vuc2FcIDsKK+mAkOW5tCA8IGNoaWt1bmVuXCA7Civprqvnmq4gPCBzYW1lZ2F3YVwgOwor5bqD5bqDIDwgaGlyb2Jpcm9cIDsKK+WGjeW3peS6iyA8IHNhaWtvdWppXCA7CivmqKrnlLogPCB5b2tvY2hvdVwgOwor6KOP5pel5pysIDwgdXJhbmlob25cIDsKK+iiq+WCreiAhSA8IGhpeW91c2hhXCA7Civov5Hml6UgPCBraW5qaXRzdVwgOwor5bqD5bmFIDwgaGlyb2hhYmFcIDsKK+WKm+S9nCA8IHJpa2lzYWt1XCA7CivmpJzplrIgPCBrZW4nJ2V0c3VcIDsKK+eerOWIuyA8IHNodW5rb2t1XCA7CivnmbrnnYAgPCBoYXRjaGFrdVwgOwor5qW16KuWIDwga3lva3Vyb25cIDsKK+edgOW8viA8IGNoYWt1ZGFuXCA7Civou73msLTngokgPCBrZWlzdWlyb1wgOwor5YW454mpIDwgdGVuYnV0c3VcIDsKK+iHqueUsea4ryA8IGppeXV1a291XCA7CivlvqHmm7nlrZAgPCBvbnpvdXNoaVwgOwor6Ziy5rC05omJIDwgYm91c3VpaGlcIDsKK+eZveeamSA8IGhha3VzZWtpXCA7CivlsYXlv4PlnLAgPCBpZ29rb2NoaVwgOwor5Zyw5LiL6YGTIDwgY2hpa2Fkb3VcIDsKK+eZveeZvSA8IGhha3VoYWt1XCA7CivliIfmg4UgPCBzZXRzdWpvdVwgOwor5YiR5b6LIDwga2Vpcml0c3VcIDsKK+aomeeahCA8IGh5b3V0ZWtpXCA7Civlh7rmiYAgPCBkZWRva29yb1wgOwor54Sh6aeE6IqxIDwgbXVkYWJhbmFcIDsKK+i/veW+tCA8IHRzdWljaG91XCA7CivnnYDlupUgPCBjaGFrdXRlaVwgOwor5YWa55WlIDwgdG91cnlha3VcIDsKK+eEoeWumuimiyA8IG11dGVpa2VuXCA7CivluorlsbEgPCB0b2tveWFtYVwgOwor55eb6KaaIDwgdHN1dWtha3VcIDsKK+W5tOW8jyA8IG5lbnNoaWtpXCA7CivnmbrnmYwgPCBoYXRzdWdhblwgOwor552A5bi9IDwgY2hha3Vib3VcIDsKK+WGhea/oCA8IHVjaGlib3JpXCA7CivlhYjnnYAgPCBzZW5jaGFrdVwgOwor552A5bivIDwgY2hha3V0YWlcIDsKK+W4uOaYpSA8IHRva29oYXJ1XCA7Civnvo7lrrnluKsgPCBiaXlvdXNoaVwgOwor55m654Gr54K5IDwgaGFra2F0ZW5cIDsKK+iNt+aNjCA8IG5pc2FiYWtpXCA7CivlubPluq0gPCBoaXJhbml3YVwgOwor5bGx6bOpIDwgeWFtYWJhdG9cIDsKK+WxsemzpSA8IHlhbWFkb3JpXCA7CivpgJrlraYgPCB0c3V1Z2FrdVwgOwor55Wc6aGeIDwgY2hpa3VydWlcIDsKK+W5s+W6lSA8IGhpcmF6b2tvXCA7CivlhaXnjYQgPCBueXV1Z29rdVwgOwor5YWs54i1IDwga291c2hha3VcIDsKK+iJsuiJtiA8IGlyb3RzdXlhXCA7CivlubPluZUgPCBoaXJhbWFrdVwgOwor54++5Luj5YyWIDwgZ2VuZGFpa2FcIDsKK+WFiOeZuiA8IHNlbnBhdHN1XCA7Civnpo/kupXnnIwgPCBmdWt1aWtlblwgOwor55m955OcIDwgc2hpcm91cmlcIDsKK+S4jeaVrOiZlCA8IGZ1a2Vpa2VuXCA7Civov5HmjqUgPCBraW5zZXRzdVwgOwor5LiB5a2Q5rK5IDwgY2hvdWppeXVcIDsKK+i7ouiBtyA8IHRlbnNob2t1XCA7CivpgI/lr58gPCB0b3VzYXRzdVwgOwor5YqH5L2cIDwgZ2VraXNha3VcIDsKK+iyoeWLmeWumCA8IHphaW11a2FuXCA7CivmlpnnkIblsYsgPCByeW91cml5YVwgOwor6Lu457SiIDwgamlrdXNha3VcIDsKK+W4reaWmSA8IHNla2lyeW91XCA7CivmrKDlj7cgPCBrZXRzdWdvdVwgOwor5YGc6LuK5aC0IDwgdGVpc2hhYmFcIDsKK+aEn+WFieW6piA8IGthbmtvdWRvXCA7CivnhKHog73ogIUgPCBtdW5vdXNoYVwgOwor55m+542jIDwgaHlha3VqdXVcIDsKK+WDmuiIuSA8IHRvbW9idW5lXCA7CivnnJ/lv4MgPCBtYWdva29yb1wgOwor5YqH5LitIDwgZ2VraWNodXVcIDsKK+i5hOmJhCA8IHRlaXRldHN1XCA7CivkuqTlj4nngrkgPCBrb3VzYXRlblwgOwor5rC35rKz5pyfIDwgaHlvdWdha2lcIDsKK+mAgOWxiCA8IHRhaWt1dHN1XCA7CivkvY7pm7vkvY0gPCB0ZWlkZW4nJ2lcIDsKK+WHuuS4lumtmiA8IHNodXNzZXVvXCA7CivpgYvou6Llj7AgPCB1bnRlbmRhaVwgOwor5YmN5ZOyIDwgemVudGV0c3VcIDsKK+WHuuW7rCA8IHNodXRzdXJvXCA7CivpgankvZwgPCB0ZWtpc2FrdVwgOwor6YeO5b+D5a62IDwgeWFzaGlua2FcIDsKK+WGheazlSA8IHVjaGlub3JpXCA7Civlh7rluqYgPCBzaHV0c3Vkb1wgOwor5YqD5LiAIDwga2FrdWl0c3VcIDsKK+iHqueUseaoqSA8IGppeXV1a2VuXCA7Civou7jnrrEgPCBqaWt1YmFrb1wgOwor6Ziy5rC05biDIDwgYm91c3VpZnVcIDsKK+WHuuW4rSA8IHNodXNzZWtpXCA7Civlho3oh6jmtL4gPCBzYWlyaW5oYVwgOwor5Yil5aOyIDwgYmV0c3ViYWlcIDsKK+W4neaXpSA8IHRlaWppdHN1XCA7Civmp4vnr4kgPCBrb3VjaGlrdVwgOwor55uu5pKDIDwgbW9rdWdla2lcIDsKK+i7jeiBtyA8IGd1bnNob2t1XCA7CivlkI3loLTpnaIgPCBtZWliYW1lblwgOwor562G6KiY5L2TIDwgaGlra2l0YWlcIDsKK+W8pualveWZqCA8IGdlbmdha2tpXCA7Civmu57lnKjosrsgPCB0YWl6YWloaVwgOwor6KaP5a6a5YCkIDwga2l0ZWljaGlcIDsKK+S4gOS9k+aEnyA8IGl0dGFpa2FuXCA7CivlhqzmnI0gPCBmdXl1ZnVrdVwgOwor6Iy25p2TIDwgY2hhc2hha3VcIDsKK+murueDiCA8IHNlbnJldHN1XCA7CivotaTnoILns5YgPCBha2F6YXRvdVwgOwor54mb5bCP5bGLIDwgdXNoaWdveWFcIDsKK+W7ieS+oeWTgSA8IHJlbmthaGluXCA7CivmsJHpnIDlk4EgPCBtaW5qdWhpblwgOwor55yf5Lq66ZaTIDwgbWFuaW5nZW5cIDsKK+WGmeakjSA8IHNoYXNob2t1XCA7Civph5Hnm57oirEgPCBraW5zZW5rYVwgOwor5Yil5aCCIDwgYmV0c3Vkb3VcIDsKK+WIhuWuvyA8IGJ1bnNodWt1XCA7Civlhajmu4UgPCB6ZW5tZXRzdVwgOwor5bGx6aKoIDwgeWFtYWthemVcIDsKK+iNieaRuiA8IGt1c2F6dXJpXCA7CivmsZ/miLjmmYLku6MgPCBlZG9qaWRhaVwgOwor5YWI54mpIDwgc2FraW1vbm9cIDsKK+WPluaymeaxsCA8IHRvcml6YXRhXCA7CivpioDooYzlk6EgPCBnaW5rb3VpblwgOwor5bGk5L2N5a2mIDwgc291aWdha3VcIDsKK+eZvueCuSA8IGh5YWt1dGVuXCA7CivpgIblpKIgPCBzYWtheXVtZVwgOwor6YCP6KaW5ZuzIDwgdG91c2hpenVcIDsKK+WQjee+qeS6uiA8IG1laWdpbmluXCA7CivntabmsrnmiYAgPCBreXV1eXVqb1wgOwor5YWJ54axIDwga291bmV0c3VcIDsKK+iHqui1sOegsiA8IGppc291aG91XCA7CivliY3liJcgPCB6ZW5yZXRzdVwgOwor5a+E56i/6ICFIDwga2lrb3VzaGFcIDsKK+aKkuaDheipqSA8IGpvam91c2hpXCA7CivpgIblooMgPCBneWFra3lvdVwgOwor5YaG5YiD5YiAIDwgZW5qaW50b3VcIDsKK+eZh+eZqiA8IGthbnNoYWt1XCA7Civou43nuK4gPCBndW5zaHVrdVwgOwor6a6t5ryBIDwgc2FrZXJ5b3VcIDsKK+mBlOS6uiA8IHRhdHN1amluXCA7CivoibLntJkgPCBzaGlraXNoaVwgOwor55m95r+BIDwgaGFrdWRha3VcIDsKK+WEgeengCA8IHNodW5zaHV1XCA7CivluYXluoMgPCBoYWJhaGlyb1wgOwor5bGx6ZynIDwgeWFtYWdpcmlcIDsKK+S4ieS4g+aXpSA8IG1pbmFub2thXCA7CivpgLjlh7ogPCBpc3NodXRzdVwgOwor5YWl5rW0IDwgbnl1dXlva3VcIDsKK+asoOS+vyA8IGtldHN1YmluXCA7Civou73nn7MgPCBrYXJ1aXNoaVwgOwor5YiH5aa7IDwga2lyaXp1bWFcIDsKK+W3u+acqyA8IGthbm1hdHN1XCA7Civlr7rlsI/lsYsgPCB0ZXJha295YVwgOwor6Led6aqoIDwga3lva290c3VcIDsKK+eUsOmbsumbgCA8IHRhaGliYXJpXCA7CivmuKnmub/luIMgPCBvbnNoaXBwdVwgOwor55Sf6aaWIDwgbmFtYWt1YmlcIDsKK+WFpea0myA8IG55dXVyYWt1XCA7Civnm7Tmg4UgPCBjaG9rdWpvdVwgOwor5Ye25a6FIDwga3lvdXRha3VcIDsKK+WxsemamyA8IHlhbWFnaXdhXCA7Civluq3lhYggPCBuaXdhc2FraVwgOwor5b6h6Z2i55u4IDwgZ29tZW5zb3VcIDsKK+WxsemZsCA8IHlhbWFrYWdlXCA7CivliYPliIAgPCBrYW1pc29yaVwgOwor5qiq5rOiIDwgeW9rb25hbWlcIDsKK+edgOWcsCA8IGNoYWt1Y2hpXCA7CivkuIrmma/msJcgPCBqb3VrZWlraVwgOwor6IKy6Iux5LyaIDwgaWt1ZWlrYWlcIDsKK+S5l+mmrOmaiiA8IGpvdWJhdGFpXCA7CivlnLDkuIvooZcgPCBjaGlrYWdhaVwgOwor55uX5o6YIDwgdG91a3V0c3VcIDsKK+ecgeW6gSA8IHNob3VjaG91XCA7CivnlZnph5EgPCB0b21lZ2FuZVwgOwor5qmL5qKBIDwga3lvdXJ5b3VcIDsKK+eUuumVtyA8IGNob3VjaG91XCA7CivlsZ7poJggPCB6b2t1cnlvdVwgOwor6YCa5ZGKIDwgdHN1dWtva3VcIDsKK+WJjeWAnyA8IHplbnNoYWt1XCA7CivpnZLmh7jlt6MgPCBhb2tha2VzdVwgOwor5qyg5LmPIDwga2V0c3Vib3VcIDsKK+alteiHtCA8IGt5b2t1Y2hpXCA7CivkuI3mlaznvaogPCBmdWtlaXphaVwgOwor5Y6f5a2Q5L6hIDwgZ2Vuc2hpa2FcIDsKK+WIpeWRvSA8IGJldHN1bWVpXCA7Civoia/nrZYgPCByeW91c2FrdVwgOwor55SY6aOfIDwgYW1hc2hva3VcIDsKK+WGheaeoCA8IHVjaGl3YWt1XCA7CivmqYvmna0gPCBoYXNoaWd1aVwgOwor57eP5q2m57eaIDwgc291YnVzZW5cIDsKK+S4jee4uee3uyA8IGJ1a2lyeW91XCA7CivliKXlj7cgPCBiZXRzdWdvdVwgOwor5YCf6YqtIDwgc2hha3VzZW5cIDsKK+ecieWwuyA8IG1heXVqaXJpXCA7CivnnJ/lpoIgPCBzaGluJydueW9cIDsKK+ino+WDj+W6piA8IGthaXpvdWRvXCA7Civoi6XmsLQgPCB3YWthbWl6dVwgOwor5o6n6Ki054q2IDwga291c29qb3VcIDsKK+mAmuWKmyA8IHRzdXVyaWtpXCA7CivlupflhYggPCBtaXNlc2FraVwgOwor55WU6YGTIDwgYXplbWljaGlcIDsKK+iLpeauvyA8IHdha2F0b25vXCA7Civlho3mpJzmn7sgPCBzYWlrZW5zYVwgOwor6YCa5YmHIDwgdHN1dXNva3VcIDsKK+WIneWPoyA8IHNob2t1Y2hpXCA7CivmqL3mn78gPCB0YXJ1Z2FraVwgOwor6Iet6KaaIDwgc2h1dWtha3VcIDsKK+ikh+W6p+apnyA8IGZ1a3V6YWtpXCA7CivmibnoqZXlrrYgPCBoaWh5b3VrYVwgOwor5b6h5Lit5YWDIDwgb2NodXVnZW5cIDsKK+S6uuecn+S8vCA8IGhpdG9tYW5lXCA7CivmqKrmp5ggPCB5b2tvemFtYVwgOwor5qiq5qeNIDwgeW9rb3lhcmlcIDsKK+WGt+W+uSA8IHJlaXRldHN1XCA7CivnmoTlnLDkvY0gPCB0ZWtpY2hpaVwgOwor552j5L+DIDwgdG9rdXNva3VcIDsKK+aPm+awl+WPoyA8IGthbmtpa291XCA7Civoqr/mn7vlk6EgPCBjaG91c2FpblwgOwor5LiW6Kmx5b25IDwgc2V3YXlha3VcIDsKK+WIpOWIpSA8IGhhbmJldHN1XCA7CivluLjlrqIgPCBqb3VreWFrdVwgOwor5biz5bC7IDwgY2hvdWppcmlcIDsKK+aCquefpeaBtSA8IHdhcnVkamllXCA7Civoi5fmsLQgPCBuYXdhbWl6dVwgOwor55+t5pyf6ZaTIDwgdGFua2lrYW5cIDsKK+W+oeS4u+S6uiA8IGdvc2h1amluXCA7CivlsbHpib4gPCB5YW1hYm9rb1wgOwor6auE6JmrIDwgenVpbXVzaGlcIDsKK+eahuanmCA8IG1pbmFzYW1hXCA7CivliKXlhowgPCBiZXNzYXRzdVwgOwor5ZCM5pmC5oCnIDwgZG91amlzZWlcIDsKK+W4t+WtkCA8IGthdGFiaXJhXCA7CivojYnluIIgPCBrdXNhaWNoaVwgOwor6buE5aSJ57GzIDwgb3VoZW5tYWlcIDsKK+S9meaJgOiAhSA8IHlvc29tb25vXCA7Civnmb3mqoAgPCBieWFrdWRhblwgOwor6Iul5qeYIDwgd2FrYXNhbWFcIDsKK+ebtOWwhCA8IGNob2t1c2hhXCA7CivlsbHph4wgPCB5YW1hemF0b1wgOwor6YCA5Y20IDwgdGFpa3lha3VcIDsKK+a7i+mkiuWIhiA8IGppeW91YnVuXCA7Civmp43njokgPCB5YXJpZGFtYVwgOwor5qOa54mh5Li5IDwgdGFuYWJvdGFcIDsKK+eUsumJhCA8IGtvdXRldHN1XCA7CivpipjphZLlsYsgPCBtZWlzaHV5YVwgOwor5aGp6aGe5rOJIDwgZW5ydWlzZW5cIDsKK+WxgOmdoiA8IGt5b2t1bWVuXCA7Civkv53oj4zogIUgPCBob2tpbnNoYVwgOwor6YCa5L+hIDwgdHN1dXNoaW5cIDsKK+altee3miA8IGt5b2t1c2VuXCA7CivpmLLnoILmnpcgPCBib3VzYXJpblwgOwor6YCa5L+XIDwgdHN1dXpva3VcIDsKK+iIuee4gSA8IGZ1bmFiZXJpXCA7CivnmpPmnIggPCBrb3VnZXRzdVwgOwor6Imy55u4IDwgc2hpa2lzb3VcIDsKK+iJsuebsiA8IHNoaWtpbW91XCA7CivnnInloqggPCBtYXl1enVtaVwgOwor5YaF5o6lIDwgbmFpc2V0c3VcIDsKK+mWieS4lueVjCA8IGhlaXNla2FpXCA7Civlt7TmiKYgPCB0b21vZXNlblwgOwor5YWo5puyIDwgemVua3lva3VcIDsKK+i7uOeJqSA8IGppa3Vtb25vXCA7Civmpa3nuL4gPCBneW91c2VraVwgOwor5Zyw5LiL6IyOIDwgY2hpa2FrZWlcIDsKK+Wkmui+uuW9oiA8IHRhaGVua2VpXCA7CivlhaXmnKggPCBueXV1Ym9rdVwgOwor5qW157SwIDwgZ29rdWJvc29cIDsKK+S4jeaYjuaclyA8IGZ1bWVpcm91XCA7CivpgIHliKUgPCBzb3ViZXRzdVwgOwor6Laz6aaWIDwgYXNoaWt1YmlcIDsKK+WFvOaRgiA8IGtlbnNldHN1XCA7CivliKXkvr8gPCBiZXRzdWJpblwgOwor5bm05YilIDwgbmVuYmV0c3VcIDsKK+azpeeBq+WxsSA8IGRlaWthemFuXCA7CivnlJ/pjLIgPCBuYW1hcm9rdVwgOwor5Lqs6YO95bqcIDwga3lvdXRvZnVcIDsKK+eZveaihSA8IHNoaXJhdW1lXCA7Civoh4boqqwgPCBva3VzZXRzdVwgOwor5Luk5aSr5Lq6IDwgcmVpZnVqaW5cIDsKK+WFiOanmCA8IHNha2lzYW1hXCA7Civlhajml6UgPCB6ZW5qaXRzdVwgOwor5biD5byVIDwgbnVub2Jpa2lcIDsKK+e9t+WFjeaoqSA8IGhpbWVua2VuXCA7CivkuIHlrZflvaIgPCB0ZWlqaWtlaVwgOwor55uj5a+fIDwga2Fuc2F0c3VcIDsKK+WIhuWKmyA8IGJ1bnJ5b2t1XCA7CivlgJnoo5zogIUgPCBrb3Vob3NoYVwgOwor5YKN6ICzIDwga2F0YW1pbWlcIDsKK+eVpeiogCA8IHJ5YWt1Z2VuXCA7CivliKXkurogPCBiZXRzdW5pblwgOwor5bCP6a2aIDwga296YWthbmFcIDsKK+W3puaJiyA8IGhpZGFyaXRlXCA7CivoibLnlLogPCBpcm9tYWNoaVwgOwor6Imy55S3IDwgaXJvb3Rva29cIDsKK+alveeroCA8IGdha3VzaG91XCA7CivliIbliKUgPCBidW5iZXRzdVwgOwor57W155S76aSoIDwga2FpZ2FrYW5cIDsKK+msseeXhSA8IHV0c3VieW91XCA7Civlm73llrbljJYgPCBrb2t1ZWlrYVwgOwor6YCG5L+uIDwgZ3lha3VzaHVcIDsKK+eJqeaVheiAhSA8IGJ1a2tvc2hhXCA7CivliY3nm7jmkrIgPCBtYWV6dW1vdVwgOwor56CU57Gz5qmfIDwga2VubWFpa2lcIDsKK+ebtOWjsiA8IGNob2t1YmFpXCA7CivlgJ/osrggPCBzaGFrdXRhaVwgOwor5pqX6buS5pyfIDwgYW5rb2t1a2lcIDsKK+WAn+iyoSA8IHNoYWt1emFpXCA7Civnj77mmYLngrkgPCBnZW5qaXRlblwgOwor6Zqj5L+d6aSoIDwgcmlucG9rYW5cIDsKK+WGrOWxsSA8IGZ1eXV5YW1hXCA7CivliIblhoogPCBidW5zYXRzdVwgOwor54S85aS35by+IDwgc2hvdWlkYW5cIDsKK+S4geWtl+W4ryA8IHRlaWppdGFpXCA7Civou43nlaUgPCBndW5yeWFrdVwgOwor5Yqg6YWN57GzIDwga2FoYWltYWlcIDsKK+eUqOmBlCA8IHlvdXRhdHN1XCA7CivojZLlpLcgPCBhcmFlYmlzdVwgOwor5qW156uvIDwga3lva3V0YW5cIDsKK+ecn+WNlyA8IG1hbWluYW1pXCA7Civmra/np5HljLvpmaIgPCBzaGlrYWlpblwgOwor6auY57K+5bqmIDwga291c2VpZG9cIDsKK+eVpeijhSA8IHJ5YWt1c291XCA7CivpmbDplqLmlbAgPCBpbmthbnN1dVwgOwor5rC05rOz5bi9IDwgc3VpZWlib3VcIDsKK+WIl+S8nSA8IHJldHN1ZGVuXCA7CivosrjosrvnlJ8gPCB0YWloaXNlaVwgOwor6Ii556uvIDwgZnVuYWJhdGFcIDsKK+mvqOW6pyA8IGt1amlyYXphXCA7CivnnYDku7sgPCBjaGFrdW5pblwgOwor5aKX56iO5qGIIDwgem91emVpYW5cIDsKK+i+u+WggiA8IHRzdWppZG91XCA7Civkv7rpgZQgPCBvcmV0YWNoaVwgOwor6aST6ay85YWxIDwgZ2FraWRvbW9cIDsKK+ecn+WLhyA8IHNoaW4nJ3l1dVwgOwor5YKY57SZIDwga2FzYWdhbWlcIDsKK+ioseWPr+WItiA8IGt5b2thc2VpXCA7Civnmb3mmLwgPCBoYWt1Y2h1dVwgOwor55e855a+IDwga29zaGl0c3VcIDsKK+WBveiAhSA8IG5pc2Vtb25vXCA7CivlhYvmnI0gPCBrb2t1ZnVrdVwgOwor5aWz5oCn5YOPIDwgam9zZWl6b3VcIDsKK+eUu+izqiA8IGdhc2hpdHN1XCA7Civot7Pouo0gPCBjaG91eWFrdVwgOwor54Gr5pif5bm0IDwga2FzZWluZW5cIDsKK+eZuuaYjiA8IGhhdHN1bWVpXCA7CivkupznoavphbggPCBhcnl1dXNhblwgOwor6YCG5LiKIDwgZ3lha3Vqb3VcIDsKK+WFiOaciCA8IHNlbmdldHN1XCA7CivlubPku4QgPCBoeW91c29rdVwgOwor5YaG5b2iIDwgbWFydWdhdGFcIDsKK+WGjei7jeWCmSA8IHNhaWd1bmJpXCA7Civmnb/lsYvosp0gPCBpdGF5YWdhaVwgOwor5bCR6aGNIDwgc2hvdWdha3VcIDsKK+aWoeaXi+ahiCA8IGFzc2VuJydhblwgOwor6Iqx5bSX5bKpIDwga2Frb3VnYW5cIDsKK+i/lOWNtCA8IGhlbmt5YWt1XCA7Civlh7blhYYgPCBreW91Y2hvdVwgOwor5qWT57OWIDwga2FlZGV0b3VcIDsKK+W5leWGhSA8IG1ha3V1Y2hpXCA7CivmnKrlrozmiJAgPCBtaWthbnNlaVwgOwor5be75bC6IDwgbWFraWpha3VcIDsKK+WFiOaXpSA8IHNlbmppdHN1XCA7CivnhKHnlKjlv4MgPCBidXlvdWppblwgOwor5oiQ5paH5YyWIDwgc2VpYnVua2FcIDsKK+WAn+impyA8IHNoYWt1cmFuXCA7Civnspfmgqrlk4EgPCBzb2FrdWhpblwgOwor5o6n6Ki05qipIDwga291c29rZW5cIDsKK+mnkumzpSA8IGtvbWFkb3JpXCA7Civoqr/nkIbloLQgPCBjaG91cmliYVwgOwor5Zyw5LiL57eaIDwgY2hpa2FzZW5cIDsKK+W5leWDmiA8IGJha3VyeW91XCA7Civlhpnlrp8gPCBzaGFqaXRzdVwgOwor5Lqc56Gd6YW4IDwgYXNob3VzYW5cIDsKK+WFg+aXpSA8IGdhbmppdHN1XCA7Civnmb3mj48gPCBoYWt1YnlvdVwgOwor5bC76YeNIDwgc2hpcmlvbW9cIDsKK+iEm+mqqCA8IGtlaWtvdHN1XCA7CivkvZPns7vljJYgPCB0YWlrZWlrYVwgOwor5YWD5pa5IDwgbW90b2thdGFcIDsKK+eZuuaPmiA8IGhhdHN1eW91XCA7CivntYzllrbogIUgPCBrZWllaXNoYVwgOwor6Iy25aO6IDwgY2hhdHN1Ym9cIDsKK+S/rui6qyA8IHNodXVzaGluXCA7CivnmbrmjpggPCBoYWtrdXRzdVwgOwor5bed5bqVIDwga2F3YXpva29cIDsKK+W3neW6iiA8IGthd2Fkb2tvXCA7Civlh7bkvZwgPCBreW91c2FrdVwgOwor5qaC55WlIDwgZ2Fpcnlha3VcIDsKK+iiq+WGmeS9kyA8IGhpc2hhdGFpXCA7Civlt53luYUgPCBrYXdhaGFiYVwgOwor5YK355eFIDwgc2hvdWJ5b3VcIDsKK+akjuiMuCA8IHNoaWl0YWtlXCA7Civlt57lt54gPCBzaHV1c2h1dVwgOwor5YGc6IG3IDwgdGVpc2hva3VcIDsKK+S+kemjnyA8IHl1dXNob2t1XCA7CivliIblqKnmnJ8gPCBidW5iZW5raVwgOwor5b6M5LuV6IieIDwgYXRvamltYWlcIDsKK+WGheWxgCA8IG5haWt5b2t1XCA7CivnlLfopqogPCBvdG9rb295YVwgOwor6KOP6Z2i5Y+yIDwgcmltZW5zaGlcIDsKK+iKseafhCA8IGhhbmFnYXJhXCA7CivopovkuJbniakgPCBtaXNlbW9ub1wgOwor5bGx6KWeIDwgeWFtYWhpZGFcIDsKK+i+u+WNoCA8IHRzdWppdXJhXCA7Civmp5jmp5ggPCBzYW1hemFtYVwgOwor55yf5LitIDwgbWFuJyduYWthXCA7CivlhoXlr4YgPCBuYWltaXRzdVwgOwor6Kqe5b2Z5YqbIDwgZ29pcnlva3VcIDsKK+iKseadnyA8IGhhbmF0YWJhXCA7CivlhoXlrp8gPCBuYWlqaXRzdVwgOwor5YWx5biDIDwgdG9tb251bm9cIDsKK+WxseijviA8IHlhbWFzdXNvXCA7Civpq5jnqbogPCB0YWthem9yYVwgOwor6Iqx5pytIDwgaGFuYWZ1ZGFcIDsKK+mtlOazleeTtiA8IG1haG91YmluXCA7Civnmb7mhYsgPCBoeWFrdXRhaVwgOwor5YiG5aip5pmCIDwgYnVuYmVuamlcIDsKK+S4iuS4i+WLlSA8IGpvdWdlZG91XCA7CivlubPpnaLlm7MgPCBoZWltZW56dVwgOwor6ICQ54Gr5oCnIDwgdGFpa2FzZWlcIDsKK+eXlOeWviA8IGppc2hpdHN1XCA7Civlho3lrprnvqkgPCBzYWl0ZWlnaVwgOwor6Zu75rCX5belIDwgZGVua2lrb3VcIDsKK+WPjeWPpOexoCA8IGhvZ3VrYWdvXCA7CivlhavluaEgPCBoYWNoaW1hblwgOwor5b6h6ZmN6KqVIDwgZ29rb3V0YW5cIDsKK+W3oeWvnyA8IGp1bnNhdHN1XCA7Civou73mpa0gPCBrYXJ1d2F6YVwgOwor5bed5bC7IDwga2F3YWppcmlcIDsKK+aYjuaWh+WMliA8IG1laWJ1bmthXCA7CivohbnlhbflkIggPCBoYXJhZ3VhaVwgOwor55u05YmNIDwgY2hva3V6ZW5cIDsKK+mBuOaMmeaXpSA8IHNlbmt5b2JpXCA7Civmo5LooZMgPCBib3VqdXRzdVwgOwor6Iqx5pmCIDwgaGFuYWRva2lcIDsKK+WFpeW5lSA8IG55dXVtYWt1XCA7Civnmbrmg4UgPCBoYXRzdWpvdVwgOwor5L+z6KyUIDwgaGFpZ3lha3VcIDsKK+WyqeiEiCA8IGdhbm15YWt1XCA7CivluLPlhYMgPCBjaG91bW90b1wgOwor55eF55qEIDwgYnlvdXRla2lcIDsKK+aoquW5hSA8IHlva29oYWJhXCA7CivovLjnsr7nrqEgPCB5dXNlaWthblwgOwor55eF55mWIDwgYnlvdWhla2lcIDsKK+Wwj+WjsuW6lyA8IGtvdXJpdGVuXCA7Civlroflrpnoq5YgPCB1Y2h1dXJvblwgOwor6IO46auYIDwgbXVuYWRha2FcIDsKK+mRkeWumuWutiA8IGthbnRlaWthXCA7Civkv4PpgLIgPCBzb2t1c2hpblwgOwor5qiZ5b60IDwgaHlvdWNob3VcIDsKK+Wbuua6tuS9kyA8IGtveW91dGFpXCA7CivmoYjlhoXmiYAgPCBhbicnbmFpam9cIDsKK+eXheeXhyA8IGJ5b3VzaG91XCA7Civoh6rkv6HlrrYgPCBqaXNoaW5rYVwgOwor5Ya35Y20IDwgcmVpa3lha3VcIDsKK+S6nOmJm+acqyA8IGFlbm1hdHN1XCA7Civoho/ooYAgPCBrb3VrZXRzdVwgOwor5YK354mpIDwga2l6dW1vbm9cIDsKK+Wwjumbu+W6piA8IGRvdWRlbmRvXCA7CivnnIznn6XkuosgPCBrZW5jaGlqaVwgOwor55m+5byKIDwgaHlha3VoZWlcIDsKK+WHneS5syA8IGd5b3VueXV1XCA7CivnlZzoiI4gPCBjaGlrdXNoYVwgOwor5oSP5rCX6Zi75ZaqIDwgaWtpc29zb3VcIDsKK+WFseWtpiA8IGt5b3VnYWt1XCA7CivlroflrpnoprMgPCB1Y2h1dWthblwgOwor6Zu75YuV5qmfIDwgZGVuZG91a2lcIDsKK+WwkemHjyA8IHNob3VyeW91XCA7CivkuIDkuIHnm64gPCBpdGNob3VtZVwgOwor5LyK6YGU6KGGIDwgZGF0ZXNodXVcIDsKK+iFi+eqqeiFuiA8IGVraWthc2VuXCA7CivkuI3mlofms5UgPCBmdWJ1bnBvdVwgOwor55m+5bm0IDwgaHlha3VuZW5cIDsKK+i2s+i7vSA8IGFzaGlnYXJ1XCA7CivkuIDosqvmgKcgPCBpa2thbnNlaVwgOwor5Y+j5YaF54KOIDwga291bmFpZW5cIDsKK+WBpeethiA8IGtlbnBpdHN1XCA7CivpgY7kuI3otrMgPCBrYWZ1c29rdVwgOwor5a+S6aSFIDwga2FubW9jaGlcIDsKK+WvrumVtyA8IHJ5b3VjaG91XCA7CivmhJvnlKjogIUgPCBhaXlvdXNoYVwgOwor5L+K6LazIDwgc2h1bnNva3VcIDsKK+WFrOawkeenkSA8IGtvdW1pbmthXCA7CivlhaXlr4IgPCBueXV1amFrdVwgOwor5Ye65qC85a2QIDwgZGVnb3VzaGlcIDsKK+S/oeiqjSA8IHNoaW4nJ25pblwgOwor5LuK5LiW57SAIDwga29uc2Vpa2lcIDsKK+WFpeWtpiA8IG55dXVnYWt1XCA7Civmpa3niakgPCB3YXphbW9ub1wgOwor5pyq5ama6ICFIDwgbWlrb25zaGFcIDsKK+i1pOmdtCA8IGFrYWd1dHN1XCA7CivlgJnoo5znlJ8gPCBrb3Vob3NlaVwgOwor5bee5aKDIDwgc2h1dWt5b3VcIDsKK+adseWNl+S6nCA8IHRvdW5hbicnYVwgOwor5L+h6KiXIDwgc2hpbnRha3VcIDsKK+S+m+mkiuWhlCA8IGt1eW91dG91XCA7CivlgaXog4PliaQgPCBrZW4nJ2l6YWlcIDsKK+Wuv+mnhSA8IHNodWt1ZWtpXCA7CivmpbXngrkgPCBreW9rdXRlblwgOwor5L+X6Kq/IDwgem9rdWNob3VcIDsKK+iIjOeZjCA8IHpldHN1Z2FuXCA7Civnm7TkuK0gPCB0YWRhbmFrYVwgOwor6Iqx5oi/IDwgaGFuYWZ1c2FcIDsKK+S/rumok+iAhSA8IHNodWdlbmphXCA7Civnlqvnl4UgPCB5YWt1YnlvdVwgOwor6Iul5a6uIDwgd2FrYW1peWFcIDsKK+WFg+W4syA8IG1vdG9jaG91XCA7Civlr5vpl4ogPCBrYW5rYXRzdVwgOwor5a+46YmEIDwgc3VudGV0c3VcIDsKK+mBleeKr+ihjOeCuiA8IGloYW5rb3VpXCA7Civmn5TpgZPnnYAgPCBqdXVkb3VnaVwgOwor55m+5a6zIDwgaHlha3VnYWlcIDsKK+W+ruezu+aVsCA8IGJpa2Vpc3V1XCA7Civku5Xnva7loLQgPCBzaGlva2liYVwgOwor5YG255m6IDwgZ3V1aGF0c3VcIDsKK+W5s+aWueWSjCA8IGhlaWhvdXdhXCA7CivlsI/ouqsgPCBzaG91c2hpblwgOwor5a6/6aGYIDwgc2h1a3VnYW5cIDsKK+S8tOWlj+mDqCA8IGJhbnNvdWJ1XCA7CivnlJ/olqwgPCBzaG91eWFrdVwgOwor5a6/6aGMIDwgc2h1a3VkYWlcIDsKK+WPpOWGmeacrCA8IGtvc2hhaG9uXCA7Civnk7boqbAgPCBiaW5kenVtZVwgOwor5YGP56qfIDwgaGVua3V0c3VcIDsKK+WFiOWxsSA8IHNha2l5YW1hXCA7CivnlLfoibIgPCBuYW5zaG9rdVwgOwor6ISx6LyqIDwgZGF0c3VyaW5cIDsKK+WHuuadpeeJqSA8IGRla2ltb25vXCA7CivlgLnntIQgPCBrZW4nJ3lha3VcIDsKK+iNieS4iCA8IGt1c2F0YWtlXCA7CivlnJ/ppYXpoK0gPCBkb21hbmp1dVwgOwor5LiW6Kmx5Lq6IDwgc2V3YWJpdG9cIDsKK+WFpeWhviA8IG55dXVqdWt1XCA7Civnvo7poZTmsLQgPCBiaWdhbnN1aVwgOwor6Ieq55Sx5YiRIDwgaml5dXVrZWlcIDsKK+WhqemiqOWRgiA8IHNoaW9idXJvXCA7CivlhYXpm7vlmaggPCBqdXVkZW5raVwgOwor6KKr6aiT6ICFIDwgaGlrZW5zaGFcIDsKK+Wwj+eGiuW6pyA8IGtvZ3VtYXphXCA7CivlhKrlvaIgPCB5YXNhZ2F0YVwgOwor5omL5L+h6KqeIDwgdGVzaGluZ29cIDsKK+WFiOWuoiA8IHNlbmt5YWt1XCA7CivotaTmr5vluIMgPCBha2FnZXR0b1wgOwor5L+X6KGGIDwgem9rdXNodXVcIDsKK+WxseiGmiA8IHlhbWFoYWRhXCA7CivmppXmqLkgPCBnYWp1bWFydVwgOwor5YWI5a6JIDwgc2FraXlhc3VcIDsKK+mmrOmdoiA8IHVtYWR6dXJhXCA7CivmsLTlvannlLsgPCBzdWlzYWlnYVwgOwor5LiA5Lq65a+dIDwgaGl0b3JpbmVcIDsKK+mdkuWRs+azpSA8IGFvbWlkb3JvXCA7Civnmb7lp5MgPCBoeWFrdXNlaVwgOwor6Ieq55Sx5YWaIDwgaml5dXV0b3VcIDsKK+WFheWunyA8IGp1dWppdHN1XCA7Civoipnok4nls7AgPCBmdXlvdWhvdVwgOwor6JC96Iqx55SfIDwgcmFra2FzZWlcIDsKK+iKseW9oiA8IGhhbmFnYXRhXCA7CivlsbHplpPpg6ggPCBzYW5rYW5idVwgOwor55uX5Lq6IDwgbnVzdWJpdG9cIDsKK+WQjOaZguS7oyA8IGRvdWppZGFpXCA7Civnmb3lppkgPCBzaGlyb3RhZVwgOwor5bGx6ISIIDwgeWFtYW5hbWlcIDsKK+eEoeWul+a0viA8IG11c2h1dWhhXCA7CivoirHlvIEgPCBoYW5hYmlyYVwgOwor5YWl5Zu9IDwgbnl1dWtva3VcIDsKK+altea0iyA8IGt5b2t1eW91XCA7Civou43mlL/lupwgPCBndW5zZWlmdVwgOwor55m95aOBIDwgaGFrdWhla2lcIDsKK+eZveWiqCA8IGhha3Vib2t1XCA7Civnmbrlo7IgPCBoYXRzdWJhaVwgOwor5YaF5YqbIDwgbmFpcnlva3VcIDsKK+i1pOmKhSA8IHNoYWt1ZG91XCA7Civnmq7liaUgPCBrYXdhaGFnaVwgOwor5amm5Lq65LyaIDwgZnVqaW5rYWlcIDsKK+WOn+e5iue2rSA8IGdlbnNlbicnaVwgOwor5beo5Yi5IDwga3lvc2F0c3VcIDsKK+mqqOebpCA8IGtvdHN1YmFuXCA7Civpr4nlj6MgPCBrb2lndWNoaVwgOwor55Sf6ImyIDwgc2Vpc2hva3VcIDsKK+e2membu+awlyA8IGtlaWRlbmtpXCA7CivkuI3mlofmmI4gPCBmdWJ1bm1laVwgOwor5bmz5Zyf6ZaTIDwgaGlyYWRvbWFcIDsKK+asoeeUt+WdiiA8IGppbmFuYm91XCA7CivlhYjlpKogPCBzYWtpYnV0b1wgOwor6LaF6LaKIDwgY2hvdWV0c3VcIDsKK+iGgOiDseeCjiA8IGJvdWtvdWVuXCA7CivmnInlirnmiZMgPCB5dXVrb3VkYVwgOwor6Zuo6YeP6KiIIDwgdXJ5b3VrZWlcIDsKK+WFteWNkiA8IGhlaXNvdHN1XCA7CivlroflrpnoiLkgPCB1Y2h1dXNlblwgOwor5rib6KGw5ZmoIDwgZ2Vuc3Vpa2lcIDsKK+anmOW8jyA8IHlvdXNoaWtpXCA7CivkvLTpo58gPCBiYW5zaG9rdVwgOwor5aSa6Iq45oCnIDwgdGFnZWlzZWlcIDsKK+WFteWKmyA8IGhlaXJ5b2t1XCA7CivotaTliIfnrKYgPCBha2FnaXBwdVwgOwor5qW95qW9IDwgcmFrdXJha3VcIDsKK+mrmOa9riA8IHRha2FzaGlvXCA7CivlhoXlgbQgPCB1Y2hpZ2F3YVwgOwor6ISF6L+rIDwga3lvdWhha3VcIDsKK+iFueiGnCA8IGZ1a3VtYWt1XCA7CivngavmmJ/kurogPCBrYXNlaWppblwgOwor5YaF5YCJIDwgdWNoaWd1cmFcIDsKK+aXpeiIquapnyA8IG5pa2tvdWtpXCA7Civku4rkuJbnlYwgPCBrb25zZWthaVwgOwor6Iqx5a6IIDwgaGFuYW1vcmlcIDsKK+iDuOmDrSA8IGt5b3VrYWt1XCA7Civou43pnIDlk4EgPCBndW5qdWhpblwgOwor55eF5q+SIDwgYnlvdWRva3VcIDsKK+altealvSA8IGdva3VyYWt1XCA7CivmsLTokrjmsJcgPCBzdWlqb3VraVwgOwor5qW15qW1IDwgZ29rdWdva3VcIDsKK+WNmOa8ouWtlyA8IHRhbmthbmppXCA7CivljYHmloflrZcgPCBqdXVtb25qaVwgOwor5a6I5YKZ5YW1IDwgc2h1YmloZWlcIDsKK+eXheattCA8IGJ5b3VyZWtpXCA7Civmmpflj7fmlocgPCBhbmdvdWJ1blwgOwor6Iqx5auBIDwgaGFuYXlvbWVcIDsKK+WFqOWKmyA8IHplbnJ5b2t1XCA7CivlhbHlhbEgPCB0b21vZG9tb1wgOwor6auY562J56eRIDwga291dG91a2FcIDsKK+iKseWpvyA8IGhhbmFtdWtvXCA7CivotIvpppYgPCBuaXNla3ViaVwgOwor6Iul5ZCbIDwgd2FrYWdpbWlcIDsKK+WxgOiIjiA8IGt5b2t1c2hhXCA7Civlt57kv5cgPCBzaHV1em9rdVwgOwor5re75LmX5ZOhIDwgdGVuam91aW5cIDsKK+akjeeUnyA8IHNob2t1c2VpXCA7CivmqKnlipsgPCBrZW5yeW9rdVwgOwor5YSq5aWzIDwgeWFzYW9uJydhXCA7Civlrr/phZQgPCBzaHVrdXN1aVwgOwor6LWr6LWrIDwga2FrdWtha3VcIDsKK+ahiOWGheWbsyA8IGFuJyduYWl6dVwgOwor5ZCI6KiA6JGJIDwgYWlrb3RvYmFcIDsKK+WvhumAoCA8IG1pdHN1em91XCA7Civmpb3mm7IgPCBnYWtreW9rdVwgOwor6auY5rOiIDwgdGFrYW5hbWlcIDsKK+S8mumjnyA8IGthaXNob2t1XCA7CivlrprmnJ/liLggPCB0ZWlraWtlblwgOwor5YCS56uLIDwgdG91cml0c3VcIDsKK+iJsuaEnyA8IHNoaWtpa2FuXCA7Civlt6bkuIogPCBoaWRhcml1ZVwgOwor5LqI566X5qGIIDwgeW9zYW4nJ2FuXCA7CivlpJrmp5jmgKcgPCB0YXlvdXNlaVwgOwor5YWI5ZOyIDwgc2VudGV0c3VcIDsKK+iHquizoOazlSA8IGppYmFpaG91XCA7CivmpbXmnbEgPCBreW9rdXRvdVwgOwor5Ye65LiN57K+IDwgZGVidXNob3VcIDsKK+WuieWxseWyqSA8IGFuemFuZ2FuXCA7CivogIHlpKflrrYgPCByb3V0YWlrYVwgOwor5rCP57Sg5oCnIDwgdWppc3Vqb3VcIDsKK+S4iuWkqeawlyA8IGpvdXRlbmtpXCA7CivnrKzkuIDlo7AgPCBkYWlpc3NlaVwgOwor5bCO54Gr57eaIDwgZG91a2FzZW5cIDsKK+mtmuWxiyA8IHNha2FuYXlhXCA7Civkvp3poLzlv4MgPCBpcmFpc2hpblwgOwor6Lez566xIDwgdG9iaWJha29cIDsKK+i7n+W8jyA8IG5hbnNoaWtpXCA7CivosqDlgrXogIUgPCBmdXNhaXNoYVwgOwor6auY5q6/IDwgdGFrYWRvbm9cIDsKK+W+jOmgremDqCA8IGtvdXRvdWJ1XCA7CivlgY/niYcgPCBrYXRhaGFyYVwgOwor5bed5LiKIDwga2F3YWthbWlcIDsKK+earuiGmueXhSA8IGhpZnVieW91XCA7CivlsbHnqIsgPCB5YW1haG9kb1wgOwor55m65YuVIDwgaGF0c3Vkb3VcIDsKK+iAgeWkq+WppiA8IHJvdWZ1dWZ1XCA7CivlhYjlj6MgPCBzZW5rdWNoaVwgOwor5Zyw5LiL5rC0IDwgY2hpa2FzdWlcIDsKK+iCi+mqqCA8IHJva2tvdHN1XCA7Civpm7vmsJfku6MgPCBkZW5raWRhaVwgOwor5a6a576p5Z+fIDwgdGVpZ2lpa2lcIDsKK+eVnOeUoyA8IGNoaWt1c2FuXCA7CivoibLlvakgPCBzaGlraXNhaVwgOwor6Imv5b+DIDwgcnlvdXNoaW5cIDsKK+eUn+exsyA8IG5hbWFnb21lXCA7CivnlKjnrYYgPCB5b3VoaXRzdVwgOwor5pS+54Gr572qIDwgaG91a2F6YWlcIDsKK+mbqOWQiOe+vSA8IGFtYWdhcHBhXCA7Civlj5fliJHogIUgPCBqdWtlaXNoYVwgOwor6IeT54mpIDwgem91bW90c3VcIDsKK+mdnuWFrOmWiyA8IGhpa291a2FpXCA7CivpgZnjgIUgPCBoYXJ1YmFydVwgOwor6aqo54GwIDwga290c3ViYWlcIDsKK+aZruiri+WgtCA8IGZ1c2hpbmJhXCA7CivlpJrls7bmtbcgPCB0YXRvdWthaVwgOwor6Ii55peFIDwgZnVuYXRhYmlcIDsKK+iIueaWuSA8IGZ1bmFrYXRhXCA7CivlirTlg43mrYwgPCByb3Vkb3VrYVwgOwor5a+E5riv5ZywIDwga2lrb3VjaGlcIDsKK+iKseWckiA8IGhhbmF6b25vXCA7CivlrprmnJ/kvr8gPCB0ZWlraWJpblwgOwor6LuN5b6LIDwgZ3Vucml0c3VcIDsKK+i7jeW9uSA8IGd1bicneWFrdVwgOwor5pyq5p2l5b2iIDwgbWlyYWlrZWlcIDsKK+eZvuWEhCA8IGh5YWt1b2t1XCA7CivlsZHnsaAgPCBrdXp1a2Fnb1wgOwor55eb5pKDIDwgdHN1dWdla2lcIDsKK+WFqOS5syA8IHplbicnbnl1dVwgOwor5qC86Kq/IDwga2FrdWNob3VcIDsKK+i8uOWHuiA8IHl1c2h1dHN1XCA7Civpo5vooYzlo6sgPCBoaWtvdXNoaVwgOwor5qaC5ousIDwgZ2Fpa2F0c3VcIDsKK+iGoOedgCA8IGtvdWNoYWt1XCA7CivlpornlKPlqaYgPCBuaW5zYW5wdVwgOwor55+t5pmC6ZaTIDwgdGFuamlrYW5cIDsKK+S9teiorSA8IGhlaXNldHN1XCA7Civnmb7lgI0gPCBoeWFrdWJhaVwgOwor5YGP5beu5YCkIDwgaGVuc2FjaGlcIDsKK+S4i+mZjee3miA8IGtha291c2VuXCA7CivmtIvoj5PlrZAgPCB5b3VnYXNoaVwgOwor5pat6KOB5qmfIDwgZGFuc2Fpa2lcIDsKK+i7iuW6pyA8IGt1cnVtYXphXCA7CivlhYjlhaUgPCBzZW4nJ255dXVcIDsKK+mjm+ihjOWgtCA8IGhpa291am91XCA7CivlgJ/nlKggPCBzaGFrdXlvdVwgOwor5a6/6LODIDwgeWFkb2NoaW5cIDsKK+eVnOeKrCA8IGNoaWt1a2VuXCA7CivmgbXmr5TpoIjorJsgPCBlYmlzdWtvdVwgOwor5YKN5p2WIDwgc29iYWR6dWVcIDsKK+WFg+WFgyA8IG1vdG9tb3RvXCA7Civlt6XlhbflhaUgPCBrb3VndWlyZVwgOwor5L2T5rip6KiIIDwgdGFpb25rZWlcIDsKK+WvneiiiyA8IG5lYnVrdXJvXCA7CivnmbrooYzml6UgPCBoYWtrb3ViaVwgOwor6Iqd5ZywIDwgc2hpYmFjaGlcIDsKK+aLt+WVj+WFtyA8IGdvdW1vbmd1XCA7CivnmoTkuK0gPCB0ZWtpY2h1dVwgOwor6Zmk5aSW5L6LIDwgam9nYWlyZWlcIDsKK+Wwsee4myA8IHNodXViYWt1XCA7Civlr7/ogIHkurogPCBqdXJvdWppblwgOwor5a+G6KyAIDwgbWl0c3Vib3VcIDsKK+WFrOWPluWnlCA8IGtvdXRvcmlpXCA7CivpmaLlpJblm6MgPCBpbmdhaWRhblwgOwor5LiN5aSJ5oCnIDwgZnVoZW5zZWlcIDsKK+WvhuirhyA8IG1pdHN1ZGFuXCA7CivlpJrnlKPns7sgPCB0YXNhbmtlaVwgOwor55m65LukIDwgaGF0c3VyZWlcIDsKK+Wwj+imj+aooSA8IHNob3VraWJvXCA7CivlkIjorbDliLYgPCBnb3VnaXNlaVwgOwor57at566h5p2fIDwgaWthbnNva3VcIDsKK+iJr+WwhiA8IHJ5b3VzaG91XCA7CivlrqLou4ogPCBreWFrdXNoYVwgOwor6ISx6ImyIDwgZGFzc2hva3VcIDsKK+mrmOa4qeioiCA8IGtvdW9ua2VpXCA7Civpq5jmnK0gPCBrb3VzYXRzdVwgOwor5Yid562J56eRIDwgc2hvdG91a2FcIDsKK+iomOaGtuazlSA8IGtpb2t1aG91XCA7Civku4rmnJ3mlrkgPCBrZXNhZ2F0YVwgOwor55m+5LiHIDwgaHlha3VtYW5cIDsKK+egtOegleaApyA8IGhhc2Fpc2VpXCA7Civpub/ph47oi5EgPCByb2t1eWFvblwgOwor5LuZ6aqoIDwgc2Vua290c3VcIDsKK+WuiemFkiA8IHlhc3V6YWtlXCA7Civlg7vlooMgPCBoZWtpa3lvdVwgOwor6LuK5bGLIDwga3VydW1heWFcIDsKK+iInuWPsOijjyA8IGJ1dGFpdXJhXCA7CivntYzllrbmqKkgPCBrZWllaWtlblwgOwor6Lqr5b+DIDwgc2hpbnNoaW5cIDsKK+eXm+aDnCA8IHRzdXVzZWtpXCA7CivkuI3nh4PmgKcgPCBmdW5lbnNlaVwgOwor5YG95pytIDwgbmlzZWZ1ZGFcIDsKK+elnuelh+WumCA8IGppbmdpa2FuXCA7CivlgJ/niakgPCBrYXJpbW9ub1wgOwor6LWk6JuZIDwgYWthZ2FlcnVcIDsKK+iiq+Wus+iAhSA8IGhpZ2Fpc2hhXCA7Civku5jppqwgPCB0c3VrZXVtYVwgOwor5rC06YW45Z+6IDwgc3Vpc2Fua2lcIDsKK+WkqeS9k+WbsyA8IHRlbnRhaXp1XCA7Civov5Hot53pm6IgPCBraW5reW9yaVwgOwor5rqW56S+5ZOhIDwganVuc2hhaW5cIDsKK+i1pOiZqyA8IGFrYW11c2hpXCA7CivkvZfoqIAgPCB3YWJpZ290b1wgOwor5Lq65Lu26LK7IDwgamlua2VuaGlcIDsKK+W4uOW+l+aEjyA8IGpvdXRva3VpXCA7CivnlJ/nmq4gPCBuYW1ha2F3YVwgOwor5qW15oCnIDwga3lva3VzZWlcIDsKK+iJsuWlsyA8IGlyb29uJyduYVwgOwor6Lyq5LyQIDwgcmluYmF0c3VcIDsKK+WAjeeOhyA8IGJhaXJpdHN1XCA7Civnmq7ohILohbogPCBoaXNoaXNlblwgOwor54Sh5a6a5b2iIDwgbXV0ZWlrZWlcIDsKK+WPr+eUqOaApyA8IGtheW91c2VpXCA7CivkurrnlJ/mtL4gPCBqaW5zZWloYVwgOwor5L+X56ewIDwgem9rdXNob3VcIDsKK+WxseeMvyA8IHlhbWF6YXJ1XCA7CivlsbHnjKsgPCB5YW1hbmVrb1wgOwor5Lyd6YGUIDwgZGVudGF0c3VcIDsKK+eZuuihjOaJgCA8IGhha2tvdWpvXCA7CivmkanlpKnmpbwgPCBtYXRlbnJvdVwgOwor5a+16IejIDwgY2hvdXNoaW5cIDsKK+Wwj+mWk+eJqSA8IGtvbWFtb25vXCA7CivmpI3mr5sgPCBzaG9rdW1vdVwgOwor5b6h5aSn5bGkIDwgZ290YWlzb3VcIDsKK+itpuWCmemaiiA8IGtlaWJpdGFpXCA7CivlibLng7nnnYAgPCBrYXBwb3VnaVwgOwor5Y2U5ZKM6Z+zIDwga3lvdXdhb25cIDsKK+WPl+WLleaFiyA8IGp1ZG91dGFpXCA7Civnt4/li5Xlk6EgPCBzb3Vkb3VpblwgOwor6IKJ6Y2LIDwgbmlrdW5hYmVcIDsKK+eUt+eItSA8IGRhbnNoYWt1XCA7CivoirHmnpfns5YgPCBrYXJpbnRvdVwgOwor5Lq66a2CIDwgaGl0b2RhbWFcIDsKK+iFueeXmyA8IGZ1a3V0c3V1XCA7CivoiLnlupUgPCBmdW5hem9rb1wgOwor6Ii55bqKIDwgZnVuYWRva29cIDsKK+mnhuiQvSA8IGtha2VvY2hpXCA7CivmpbXluIwgPCBnb2t1bWFyZVwgOwor5Lq66aqoIDwgamlua290c3VcIDsKK+Wwj+e1kCA8IGtvbXVzdWJpXCA7CivmraPnpL7lk6EgPCBzZWlzaGFpblwgOwor562J5rip57eaIDwgdG91b25zZW5cIDsKK+Wun+iqrCA8IGppc3NldHN1XCA7CivlvqHpnIrlsYsgPCBtaXRhbWF5YVwgOwor5LiA5aSV6KmxIDwgaXNzZWtpd2FcIDsKK+Wwj+eCuuabvyA8IGtvZ2F3YXNlXCA7CivnrKzkuIDkvY0gPCBkYWlpY2hpaVwgOwor5bGl54mpIDwgaGFraW1vbm9cIDsKK+eXheW+tCA8IGJ5b3VjaG91XCA7CivnqI7plqLlkI8gPCB6ZWlrYW5yaVwgOwor6aSK6IKy6LK7IDwgeW91aWt1aGlcIDsKK+WumuiqrCA8IHRlaXNldHN1XCA7Civoh6jmnIggPCByaW5nZXRzdVwgOwor5rWB6Y+R6aasIDwgeWFidXNhbWVcIDsKK+eXheW8sSA8IGJ5b3VqYWt1XCA7CivmjqfoqLTkurogPCBrb3Vzb25pblwgOwor6Iy26Kmx5LyaIDwgY2hhd2FrYWlcIDsKK+WWq+e3iuS6iyA8IGtpa2tpbmppXCA7CivlkLjph5HliZsgPCBrb2tvbmdvdVwgOwor6aqo5p2QIDwga290c3V6YWlcIDsKK+eUo+eJqSA8IHNhbmJ1dHN1XCA7CivmpJzmnK0gPCBrZW5zYXRzdVwgOwor6LKq6aOfIDwgZG9uc2hva3VcIDsKK+S/oeeUqCA8IHNoaW4nJ3lvdVwgOwor6ISH6IW5IDwgd2FraWJhcmFcIDsKK+iAgee3tOWutiA8IHJvdXJlbmthXCA7CivkuI3oqr/lkowgPCBmdWNob3V3YVwgOwor55Sf54mpIDwgbmFtYW1vbm9cIDsKK+WxgOeVqiA8IGt5b2t1YmFuXCA7CivlsI/nrZYgPCBzaG91c2FrdVwgOwor5qeN5YWIIDwgeWFyaXNha2lcIDsKK+awl+euoeaUryA8IGtpa2Fuc2hpXCA7Civnl7Dlo7ogPCB0YW50c3Vib1wgOwor6auq5bqKIDwga2FtaWRva29cIDsKK+awtOmFuOWMliA8IHN1aXNhbmthXCA7CivlpKfkurrmsJcgPCBkYWluaW5raVwgOwor5a+S6ImyIDwga2Fuc2hva3VcIDsKK+mdkumKheWZqCA8IHNlaWRvdWtpXCA7CivmpI3moL0gPCBzaG9rdXNhaVwgOwor5LyR6LazIDwga3l1dXNva3VcIDsKK+iIueWuvyA8IGZ1bmF5YWRvXCA7Civku4/ploAgPCBidXRzdW1vblwgOwor6aOb6KGM5L6/IDwgaGlrb3ViaW5cIDsKK+WCjeW9uSA8IHdha2l5YWt1XCA7Civogonov6sgPCBuaWt1aGFrdVwgOwor5Y+v6IO95rOVIDwga2Fub3Vob3VcIDsKK+ecn+ePoOavjSA8IHNoaW5qdWJvXCA7CivmoLjohpwgPCBrYWt1bWFrdVwgOwor5bCC5pS756eRIDwgc2Vua291a2FcIDsKK+WMluiGv+iPjCA8IGthbm91a2luXCA7CivkuqHpqrggPCBuYWtpZ2FyYVwgOwor6IeY5pyIIDwgcm91Z2V0c3VcIDsKK+akjeaelyA8IHNob2t1cmluXCA7CivpnZ7luLjnt5ogPCBoaWpvdXNlblwgOwor57K+5LiA5p2vIDwgc2VpaXBwYWlcIDsKK+mBh+S4jemBhyA8IGd1dWZ1Z3V1XCA7Civog7johpwgPCBreW91bWFrdVwgOwor6aO96aOfIDwgaG91c2hva3VcIDsKK+S/rueGnyA8IHNodXVqdWt1XCA7CivmnKrogJXlnLAgPCBtaWtvdWNoaVwgOwor6ZaA5LiL55SfIDwgbW9ua2FzZWlcIDsKK+S4gOmiqOWRgiA8IGhpdG9mdXJvXCA7CivlroXoqLogPCB0YWt1c2hpblwgOwor5bCP56aEIDwgc2hvdXJva3VcIDsKK+S8neiqrCA8IGRlbnNldHN1XCA7CivotrPnmZYgPCBhc2hpa3VzZVwgOwor6ISx56iOIDwgZGF0c3V6ZWlcIDsKK+S6rOmfvyA8IGt5b3VreW91XCA7Civln7nppIrln7ogPCBiYWl5b3VraVwgOwor6Lui5YWlIDwgdGVuJydueXV1XCA7Civou43pmorljJYgPCBndW50YWlrYVwgOwor5ryU6Iq45LyaIDwgZW5nZWlrYWlcIDsKK+WvvueriyA8IHRhaXJpdHN1XCA7CivmlofkurrnlLsgPCBidW5qaW5nYVwgOwor54++5pmC5LujIDwgZ2VuamlkYWlcIDsKK+iFq+eJqSA8IHNodW1vdHN1XCA7CivluoPnr4Tlm7IgPCBrb3VoYW4nJ2lcIDsKK+alteWkpyA8IGt5b2t1ZGFpXCA7CivnlaXmm7ggPCByeWFrdXNob1wgOwor5a6/6IiOIDwgc2h1a3VzaGFcIDsKK+i7jeWNkiA8IGd1bnNvdHN1XCA7CivlhoblsYvmoLkgPCBtYXJ1eWFuZVwgOwor5bOw5bOwIDwgbWluZW1pbmVcIDsKK+WfuemkiuWcnyA8IGJhaXlvdWRvXCA7Civlr5LmsJflm6MgPCBrYW5raWRhblwgOwor5a656ImyIDwgeW91c2hva3VcIDsKK+eyl+WIqeebiiA8IGFyYXJpZWtpXCA7Civku4vpjK8gPCBrYWlzaGFrdVwgOwor5LqI566X5aSWIDwgeW9zYW5nYWlcIDsKK+mdnuawkeS4uyA8IGhpbWluc2h1XCA7CivltYzlhaUgPCBrYW4nJ255dXVcIDsKK+i7kuWIpSA8IGtlbmJldHN1XCA7CivlgbTlvbkgPCBzb2JheWFrdVwgOwor6Lui5YCfIDwgdGVuc2hha3VcIDsKK+WPl+ebiuiAhSA8IGp1ZWtpc2hhXCA7CivohIrntKIgPCBzZWtpc2FrdVwgOwor5a6J5a6a5p2/IDwgYW50ZWliYW5cIDsKK+iomOW/temkqCA8IGtpbmVua2FuXCA7CivkuIDmrankuIDmrakgPCBpcHBvaXBwb1wgOwor5aSn5a6H5a6ZIDwgZGFpdWNodXVcIDsKK+iyoemWpSA8IHphaWJhdHN1XCA7CivkupzmgKXmgKcgPCBha3l1dXNlaVwgOwor5pyo6bygIDwga2luZXp1bWlcIDsKK+mqqOaKmCA8IGtvc3NldHN1XCA7CivohJrnq4sgPCBreWF0YXRzdVwgOwor5YO75LqLIDwgaGlnYWdvdG9cIDsKK+ioiOeul+ewvyA8IGtlaXNhbmJvXCA7CivnlaXmlocgPCByeWFrdWJ1blwgOwor6LuS5YWIIDwgbm9raXNha2lcIDsKK+mdmeatoueUuyA8IHNlaXNoaWdhXCA7CivkuI3mlbTlkIggPCBmdXNlaWdvdVwgOwor5LqM6YeN6aGOIDwgbmlqdXVhZ29cIDsKK+WItuW+oeapnyA8IHNlaWd5b2tpXCA7CivmoLnntbYgPCBrb256ZXRzdVwgOwor5p6d6YGTIDwgZWRhbWljaGlcIDsKK+S6jOetieWIhiA8IG5pdG91YnVuXCA7Civlrr/ogIEgPCBzaHVrdXJvdVwgOwor6LK46YeRIDwga2FzaGlraW5cIDsKK+W5s+eCieazlSA8IGhlaXJvaG91XCA7Civpq5jlr4YgPCBrb3VtaXRzdVwgOwor5LqU56ic5aChIDwgZ29yeW91aG9cIDsKK+acquadpeWDjyA8IG1pcmFpem91XCA7CivotrPmuKnlmaggPCBzb2t1b25raVwgOwor5LqM562J5YW1IDwgbml0b3VoZWlcIDsKK+iytOaXj+mZoiA8IGtpem9rdWluXCA7Civku4/pgZMgPCBidXRzdWRvdVwgOwor5L2V6ICFIDwgbmFuaW1vbm9cIDsKK+iJr+S/lyA8IHJ5b3V6b2t1XCA7CivoqJjlj7foq5YgPCBraWdvdXJvblwgOwor5L2P6IG3IDwganV1c2hva3VcIDsKK+aflOihkyA8IGp1dWp1dHN1XCA7CivnlJ/msLQgPCBuYW1hbWl6dVwgOwor5ZCN6Kme5Y+lIDwgbWVpc2hpa3VcIDsKK+iDuOezniA8IG11bmVrdXNvXCA7CivlrqLoiLkgPCBreWFrdXNlblwgOwor6ICB6aqoIDwgcm91a290c3VcIDsKK+aelei+uiA8IG1ha3VyYWJlXCA7CivlsKTniakgPCB5dXVidXRzdVwgOwor5Lyd6aas6Ii5IDwgdGVubWFzZW5cIDsKK+S5semrqiA8IHJhbnBhdHN1XCA7CivpioDmsrPns7sgPCBnaW5nYWtlaVwgOwor5L2T572wIDwgdGFpYmF0c3VcIDsKK+S6uumHjCA8IGhpdG96YXRvXCA7CivlrqLohrMgPCBreWFrdXplblwgOwor5aSn5a6u5Y+4IDwgZGFpZ3V1amlcIDsKK+iCieimqiA8IG5pa3VzaGluXCA7CivmtYHooYznm64gPCBoYXlhcmltZVwgOwor6YGg6KaW55y8IDwgZW5zaGlnYW5cIDsKK+WvjOexpCA8IHRvbWlrdWppXCA7CivljbXlt6Pngo4gPCByYW5zb3VlblwgOwor5YG15a+fIDwgdGVpc2F0c3VcIDsKK+iDveethiA8IG5vdWhpdHN1XCA7Civkub7poqggPCBrYXJha2F6ZVwgOwor6auq5Z6LIDwga2FtaWdhdGFcIDsKK+acquS6oeS6uiA8IG1pYm91amluXCA7CivlvJXnlKjnrKYgPCBpbicneW91ZnVcIDsKK+iJr+S5hSA8IHJ5b3VreXV1XCA7CivmnZHpm6ggPCBtdXJhc2FtZVwgOwor5p+U6YGT5a62IDwganV1ZG91a2FcIDsKK+i7kuS4piA8IG5va2luYW1pXCA7CivkuI3lnYfooaEgPCBmdWtpbmtvdVwgOwor6LuS5LiIIDwgbm9raXRha2VcIDsKK+WvkueruSA8IGthbmNoaWt1XCA7CivmnIjpvaIgPCBnZXRzdXJlaVwgOwor5a++6Kmx6ICFIDwgdGFpd2FzaGFcIDsKK+i3s+aigSA8IGNob3VyeW91XCA7Civlr5LnqbogPCBzYW11em9yYVwgOwor6Kif5YuZ6YOoIDwgc2hvdW11YnVcIDsKK+S7sOinkiA8IGd5b3VrYWt1XCA7CivlvqHpnIrliY0gPCBnb3JlaXplblwgOwor5YWM5o+b5Yi4IDwgZGFrYW5rZW5cIDsKK+S4jeaRgueUnyA8IGZ1c2Vzc2VpXCA7Civmpb3liocgPCBnYWt1Z2VraVwgOwor5pel5pys6aKoIDwgbmlob25mdXVcIDsKK+mjhOmjhCA8IGh5b3VoeW91XCA7CivmnKjpqqggPCBtb2trb3RzdVwgOwor5YCZ6KOc5ZywIDwga291aG9jaGlcIDsKK+eOiemrhCA8IGd5b2t1enVpXCA7CivnoILpmLLmnpcgPCBzYWJvdXJpblwgOwor5L+X5rWBIDwgem9rdXJ5dXVcIDsKK+S4i+Wjq+WumCA8IGthc2hpa2FuXCA7CivluILorbDkvJogPCBzaGlnaWthaVwgOwor5LiA5pmC5pyfIDwgaWNoaWppa2lcIDsKK+WBpeWunyA8IGtlbmppdHN1XCA7Civoh6rosqDlv4MgPCBqaWZ1c2hpblwgOwor6LGq6ZuqIDwgZ291c2V0c3VcIDsKK+ebuOWQiOWCmCA8IGFpYWlnYXNhXCA7CivogbToppogPCBjaG91a2FrdVwgOwor6KyZ6K2y6KqeIDwga2Vuam91Z29cIDsKK+ePjemHjSA8IGNoaW5jaG91XCA7CivmibbmjIHnsbMgPCBmdWNoaW1haVwgOwor5YaN6LW35YuVIDwgc2Fpa2lkb3VcIDsKK+eNo+WMu+WtpiA8IGp1dWlnYWt1XCA7CivpnZ7luLjnlKggPCBoaWpvdXlvdVwgOwor56C05buJ5oGlIDwgaGFyZW5jaGlcIDsKK+WHuuaUvumhjCA8IGRlaG91ZGFpXCA7CivlronlrprmhJ8gPCBhbnRlaWthblwgOwor5YG05aOBIDwgc29rdWhla2lcIDsKK+aknOWwvyA8IGtlbicnbnlvdVwgOwor6aSK6ICB6ZmiIDwgeW91cm91aW5cIDsKK+S5sembkSA8IHJhbnphdHN1XCA7CivlsZ7mnJsgPCBzaG9rdWJvdVwgOwor6YeO6Imv54yrIDwgbm9yYW5la29cIDsKK+S4rem7kiA8IG5ha2FndXJvXCA7CivmnKrkuIHlubQgPCBtaXRlaW5lblwgOwor5Lq66LazIDwgaGl0b2FzaGlcIDsKK+WvvueJqSA8IHRhaWJ1dHN1XCA7CivlronlrprmgKcgPCBhbnRlaXNlaVwgOwor546J6aGUIDwgZ3lva3VnYW5cIDsKK+mir+miryA8IHNhc3NhdHN1XCA7Civku4/oqqwgPCBidXNzZXRzdVwgOwor5bO25Y+wIDwgc2hpbWFkYWlcIDsKK+S7h+iujiA8IGt5dXVzaHV1XCA7CivkvbXnmbogPCBoZWloYXRzdVwgOwor6aeQ55WZIDwgY2h1dXJ5dXVcIDsKK+eVpeW4vSA8IHJ5YWt1Ym91XCA7CivmsbrnrpfmnJ8gPCBrZXNzYW5raVwgOwor5pyd6aOvIDwgYXNhbWVzaGlcIDsKK+iHquS5l+aguSA8IGppam91a29uXCA7Civlhajojbfph40gPCB6ZW5rYWp1dVwgOwor5L2V56iLIDwgbmFuaWhvZG9cIDsKK+WlpeW+oeauvyA8IG9rdWdvdGVuXCA7Civpoqjpo58gPCBmdXVzaG9rdVwgOwor55Wz5bGLIDwgdGF0YW1peWFcIDsKK+ijvemAoOaJgCA8IHNlaXpvdWpvXCA7CivlgbTlnKcgPCBzb2t1YXRzdVwgOwor6LSW572qIDwgc2hva3V6YWlcIDsKK+W/q+eUt+WFkCA8IGthaWRhbmppXCA7CivogqnogpggPCBrYXRhaGlqaVwgOwor5pe65paH56S+IDwgb3VidW5zaGFcIDsKK+afk+iJsiA8IHNlbnNob2t1XCA7CivotoXpn7Pms6IgPCBjaG91b25wYVwgOwor5a6I6K236ZyKIDwgc2h1Z29yZWlcIDsKK+eEoeacn+W7tuacnyA8IG11a2llbmtpXCA7CivmnKjmm77lt50gPCBraXNvZ2F3YVwgOwor5byx6Z+z5ZmoIDwgamFrdW9ua2lcIDsKK+adkemHjCA8IG11cmF6YXRvXCA7Civku5nooZMgPCBzZW5qdXRzdVwgOwor5L+X5qW9IDwgem9rdWdha3VcIDsKK+mmluetiyA8IGt1YmlzdWppXCA7CivkvYfnq4sgPCBjaG9yaXRzdVwgOwor5a+G552AIDwgbWl0Y2hha3VcIDsKK+axuueul+aXpSA8IGtlc3NhbmJpXCA7CivohbDmnb8gPCBrb3NoaWl0YVwgOwor6IKh6IKJIDwgbW9tb25pa3VcIDsKK+iEsea8jyA8IGRhdHN1cm91XCA7Civoh6rkuLvmqKkgPCBqaXNodWtlblwgOwor6IO95byB5a62IDwgbm91YmVua2FcIDsKK+WPr+iDveaApyA8IGthbm91c2VpXCA7CivlpKfml6bpgqMgPCBvb2RhbicnbmFcIDsKK+S4uOmrtyA8IG1hcnVtYWdlXCA7CivljbDluqbmlZkgPCBpbmRva3lvdVwgOwor5bGI5puyIDwga3Vra3lva3VcIDsKK+iIueS6uiA8IGZ1bmFiaXRvXCA7CivpqqjlpKogPCBob25lYnV0b1wgOwor6auY5Y2SIDwga291c290c3VcIDsKK+eEoeS6uuWztiA8IG11amludG91XCA7CivlsLHmpa0gPCBzaHV1Z3lvdVwgOwor6aOf6YGTIDwgc2hva3Vkb3VcIDsKK+ecn+S8vOS6iyA8IG1hbmVnb3RvXCA7CivosLfpoqggPCB0YW5pa2F6ZVwgOwor6KyE5YaZ5ZmoIDwgdG91c2hha2lcIDsKK+S7ruiRuiA8IGthcmlidWtpXCA7Civpoqjpm6ogPCBmdXVzZXRzdVwgOwor5p+U6IKMIDwgeWF3YWhhZGFcIDsKK+mnkOeLrCA8IGNodXVkb2t1XCA7CivluLDpgoTogIUgPCBraWthbnNoYVwgOwor546J6ZaAIDwgZ3lva3Vtb25cIDsKK+WKqeeUo+mZoiA8IGpvc2FuJydpblwgOwor5pyI6aOfIDwgZ2Vzc2hva3VcIDsKK+Wls+W6l+WToSA8IGpvdGVuJydpblwgOwor5qCX55+zIDwga3VyaWlzaGlcIDsKK+Wwj+azoiA8IHNhemFuYW1pXCA7Civom7jpg6jlsYsgPCB0YWtvYmV5YVwgOwor5LqI566X5LiKIDwgeW9zYW5qb3VcIDsKK+WumueriyA8IHRlaXJpdHN1XCA7CivkuLjpppYgPCBtYXJ1a3ViaVwgOwor5Lit6auYIDwgbmFrYWRha2FcIDsKK+WumuaZguWItiA8IHRlaWppc2VpXCA7Civlrpjnq4sgPCBrYW5yaXRzdVwgOwor6IO9546HIDwgbm91cml0c3VcIDsKK+ato+W8puazoiA8IHNlaWdlbmhhXCA7CivkvZnmiYDkuosgPCB5b3NvZ290b1wgOwor6Laz5qWtIDwgYXNoaXdhemFcIDsKK+acqOmQuCA8IGJva3V0YWt1XCA7CivkuLvpo58gPCBzaHVzaG9rdVwgOwor5L+X5puyIDwgem9ra3lva3VcIDsKK+S9nOeXhSA8IHNha3VieW91XCA7CivkvZXnmb4gPCBuYW5ieWFrdVwgOwor5LuB6KGTIDwgamluanV0c3VcIDsKK+mmrOm5v+iAhSA8IGJha2Ftb25vXCA7CivmoZzmua8gPCBzYWt1cmF5dVwgOwor5qSc5ZynIDwga2VuJydhdHN1XCA7CivlhIDnpLzlhbUgPCBnaXJlaWhlaVwgOwor5LiA6b2jIDwgaGl0b2tvbWFcIDsKK+i2s+aisCA8IGFzaGlrYXNlXCA7CivmnIjpnaIgPCBnZXRzdW1lblwgOwor5pel5pys6YWSIDwgbmlob25zaHVcIDsKK+WwveaXpSA8IGppbmppdHN1XCA7CivlsJHmrLIgPCBzaG91eW9rdVwgOwor55S75byVIDwga2FrdWJpa2lcIDsKK+aXqeeUo+WFkCA8IHNvdXphbmppXCA7CivnlZnlraYgPCByeXV1Z2FrdVwgOwor5a2m57+SIDwgZ2FrdXNodXVcIDsKK+i3i+aWhyA8IGJhdHN1YnVuXCA7CivlsbHlvaYgPCB5YW1hYmlrb1wgOwor5bGx5b2iIDwgeWFtYWdhdGFcIDsKK+eXheS4rSA8IGJ5b3VjaHV1XCA7CivmjqHntr/lmaggPCBzYWltZW5raVwgOwor5YG25YqbIDwgZ3V1cnlva3VcIDsKK+iLsemAo+mCpiA8IGVpcmVucG91XCA7Civku7vogbcgPCBuaW5zaG9rdVwgOwor6ISx5q+bIDwgZGF0c3Vtb3VcIDsKK+aXqeeUn+WFkCA8IHNvdXNlaWppXCA7CivmnKjpi48gPCBraWJhc2FtaVwgOwor6LKn6KGAIDwgaGlua2V0c3VcIDsKK+WKoOebn+iAhSA8IGthbWVpc2hhXCA7CivpmY3pm6jph48gPCBrb3V1cnlvdVwgOwor6ICz6KixIDwgbWltaW1vdG9cIDsKK+WCkeS6uiA8IGtldHN1amluXCA7Civlr77msbogPCB0YWlrZXRzdVwgOwor5bCE5q66IDwgc2hhc2F0c3VcIDsKK+itpuWCmeiJhyA8IGtlaWJpdGVpXCA7Civlh7rmnaXkuosgPCBkZWtpZ290b1wgOwor5Luk6ImyIDwgcmVpc2hva3VcIDsKK+S+oembu+WtkCA8IGthZGVuc2hpXCA7CivlsIHmrrogPCBmdXVzYXRzdVwgOwor5Y+k55Sf55WMIDwga29zZWlrYWlcIDsKK+Wwj+anjCA8IGtvZHp1Y2hpXCA7CivlrabnuL4gPCBnYWt1c2VraVwgOwor5bGx5bedIDwgeWFtYWdhd2FcIDsKK+mrmOS9jiA8IHRha2FoaWt1XCA7CivkuK3poIMgPCBuYWthZ29yb1wgOwor6IG36IO9IDwgc2hva3Vub3VcIDsKK+WxiOaKmCA8IGt1c3NldHN1XCA7Civlrp/nm7QgPCBqaXRjaG9rdVwgOwor6YeR6a2a5bGLIDwga2luZ3lveWFcIDsKK+iFsOaKmCA8IGtvc2hpb3JlXCA7CivmnKjlpKnok7wgPCBtYXRhdGFiaVwgOwor5a6f55uKIDwgaml0c3Vla2lcIDsKK+WNiuijuOS9kyA8IGhhbnJhdGFpXCA7CivlrprnnYAgPCB0ZWljaGFrdVwgOwor5qKB5pyoIDwgcnlvdWJva3VcIDsKK+aXpeacrOi7jSA8IG5paG9uZ3VuXCA7Civml6XmnKzou4ogPCBuaWhvbnNoYVwgOwor5YG25YG2IDwgdGFtYXRhbWFcIDsKK+S/rue+hemBkyA8IHNodXJhZG91XCA7CivotrPml6kgPCBhc2hpYmF5YVwgOwor5ZWG6KGM54K6IDwgc2hvdWtvdWlcIDsKK+iIjOS7oyA8IHpldHN1ZGFpXCA7Civmn7Hnn7MgPCBjaHV1c2VraVwgOwor5bGx5bGxIDwgeWFtYXlhbWFcIDsKK+adoemHjOWItiA8IGpvdXJpc2VpXCA7CivkuK3pmpQgPCBjaHV1a2FrdVwgOwor5bGA5omAIDwga3lva3VzaG9cIDsKK+afk+ethiA8IHNlbnBpdHN1XCA7CivmipXlvbHms5UgPCB0b3VlaWhvdVwgOwor5L+h5oaRIDwgc2hpbnB5b3VcIDsKK+ahn+apiyA8IHNhbmJhc2hpXCA7CivogonntLAgPCBuaWt1Ym9zb1wgOwor5a6i55SoIDwga3lha3V5b3VcIDsKK+S4remZkCA8IG5ha2FnaXJpXCA7CivmnInlsL7poZ4gPCB5dXViaXJ1aVwgOwor5bGx5a+6IDwgeWFtYWRlcmFcIDsKK+asp+e+heW3tCA8IHlvdXJvcHBhXCA7CivkuIfpqqggPCBiYW5rb3RzdVwgOwor5LiW6ZaT5L2TIDwgc2VrZW50ZWlcIDsKK+S8iumBlOW3uyA8IGRhdGVtYWtpXCA7Civkv67lvqkgPCBzaHV1ZnVrdVwgOwor5LuP6ImmIDwgZnV0c3VrYW5cIDsKK+Wun+eUqCA8IGppdHN1eW91XCA7Civkv67lvpcgPCBzaHV1dG9rdVwgOwor6IOG55WlIDwgdGFucnlha3VcIDsKK+awtOWIqeaoqSA8IHN1aXJpa2VuXCA7Civlj7LlrablrrYgPCBzaGlnYWtrYVwgOwor5Li46ZG/IDwgbWFydW5vbWlcIDsKK+WxseWuiCA8IHlhbWFtb3JpXCA7CivotrPmkbogPCBhc2hpenVyaVwgOwor6aOf6KiAIDwgc2hva3VnZW5cIDsKK+e0jeS7mOmHkSA8IG5vdWZ1a2luXCA7CivolY7puqbmrrsgPCBzb2JhZ2FyYVwgOwor5LqM6KiAIDwgZnV0YWtvdG9cIDsKK+S9k+eGsSA8IHRhaW5ldHN1XCA7CivotaTps6XotaTohbkgPCBha2Frb2trb1wgOwor5pa55ZCR6Ii1IDwgaG91a291ZGFcIDsKK+S7rue2tCA8IGthcml0b2ppXCA7CivlpI/oh7Pnt5ogPCBnZXNoaXNlblwgOwor5LiN5Z2H562JIDwgZnVraW50b3VcIDsKK+Wuh+WumeW4vSA8IHVjaHV1Ym91XCA7CivnhKHpoLzmvKIgPCBidXJhaWthblwgOwor5bGI5b6TIDwga3V0c3VqdXVcIDsKK+Wun+ePviA8IGppdHN1Z2VuXCA7Civmv4PluqboqIggPCBub3Vkb2tlaVwgOwor54++6IG3IDwgZ2Vuc2hva3VcIDsKK+ixgemBlCA8IGthdHRhdHN1XCA7Civkv6Hlv7UgPCBzaGluJyduZW5cIDsKK+mhjumqqCA8IGdha2tvdHN1XCA7CivkuIDmmKjlubQgPCBvdG90b3NoaVwgOwor5pyq57WM6aiTIDwgbWlrZWlrZW5cIDsKK+S4iemjnyA8IHNhbnNob2t1XCA7CivmnJ3lr53lnYogPCBhc2FuZWJvdVwgOwor5LqG6KaaIDwgcnlvdWtha3VcIDsKK+e+pOmbsiA8IG11cmFrdW1vXCA7CivmnIjph5EgPCBnZXRzdWtpblwgOwor6LWk5rKIIDwgc2VraWNoaW5cIDsKK+S4i+mhjiA8IHNoaXRhYWdvXCA7CivlsbHlp6sgPCB5YW1haGltZVwgOwor6ISC5rGXIDwgYWJ1cmFhc2VcIDsKK+iFsOW8gSA8IGtvc2hpYmVuXCA7Civlrp3njokgPCBob3VneW9rdVwgOwor6YGO5aSn6KaWIDwga2FkYWlzaGlcIDsKK+WwkeaVtSA8IHNob3V0ZWtpXCA7Civnv6Hnv6DoibIgPCBoaXN1aWlyb1wgOwor6amN5bCGIDwgZ3lvdXNob3VcIDsKK+S4mOmZtSA8IGt5dXVyeW91XCA7CivnlaXlkI0gPCByeWFrdW1laVwgOwor5Zyf5qC55oCnIDwgZG9rb25qb3VcIDsKK+eVpeWPtyA8IHJ5YWt1Z291XCA7CivnlaXlj7IgPCByeWFrdXNoaVwgOwor55Wq5Y2SIDwgYmFuc290c3VcIDsKK+e3j+aooeanmCA8IHNvdW1veW91XCA7CivnlaXlj5YgPCByeWFrdXNodVwgOwor6KiI566X5qmfIDwga2Vpc2Fua2lcIDsKK+W8geW9k+WxiyA8IGJlbnRvdXlhXCA7Civku6PmiZPogIUgPCBkYWlkYXNoYVwgOwor5a6f54q2IDwgaml0c3Vqb3VcIDsKK+WAn+WcsCA8IHNoYWt1Y2hpXCA7CivkvbXmrrogPCBoZWlzYXRzdVwgOwor6IWw5bivIDwga29zaGlvYmlcIDsKK+S4iumdtCA8IHV3YWd1dHN1XCA7Civohpzlo4EgPCBtYWt1aGVraVwgOwor6aKo5aqS6IqxIDwgZnV1YmFpa2FcIDsKK+iEseaWhyA8IGRhdHN1YnVuXCA7CivlrZjnq4sgPCBzb25yaXRzdVwgOwor54Sh6Kmm6aiTIDwgbXVzaGlrZW5cIDsKK+WuneeJqSA8IGhvdW1vdHN1XCA7CivphrjpgKDphaIgPCBqb3V6b3VzdVwgOwor5L+X5b2iIDwgem9rdWd5b3VcIDsKK+WPjeWLlea0viA8IGhhbmRvdWhhXCA7CivntYzmuIjlrrYgPCBrZWl6YWlrYVwgOwor5reL5be06IW6IDwgcmlucGFzZW5cIDsKK+S6uuiGmiA8IGhpdG9oYWRhXCA7CivpoqjotrMgPCBrYXphYXNoaVwgOwor5Lm+6KOCIDwga2FucmV0c3VcIDsKK+ahjuaijyA8IHNoaWtrb2t1XCA7CivkuIDpoIMgPCBoaXRva29yb1wgOwor6Ieq5Li75oCnIDwgamlzaHVzZWlcIDsKK+e/jOmAsSA8IHlva3VzaHV1XCA7CivotorlpKnmpb0gPCBldGVucmFrdVwgOwor5qip5Yip6YeRIDwga2VucmlraW5cIDsKK+WvvuaXpSA8IHRhaW5pY2hpXCA7CivmnqDntYQgPCB3YWt1Z3VtaVwgOwor5oWi5oCn5YyWIDwgbWFuc2Vpa2FcIDsKK+e/u+iosyA8IGhvbicneWFrdVwgOwor5Lq66ISIIDwgamlubXlha3VcIDsKK+aOiOS5s+acnyA8IGp1bnl1dWtpXCA7CivlsILploDoqp4gPCBzZW5tb25nb1wgOwor5bGx5Z+OIDwgeWFtYWppcm9cIDsKK+WJjeiInuWPsCA8IG1hZWJ1dGFpXCA7CivlpKnniL7kuY7ms6IgPCB0ZW5pd29oYVwgOwor6ISa5pysIDwga3lha3Vob25cIDsKK+mBuOenkeeUnyA8IHNlbmthc2VpXCA7CivmnbHoip0gPCB0b3VzaGliYVwgOwor6LWk5qirIDwgYWthZ2FzaGlcIDsKK+iEiuakjiA8IHNla2l0c3VpXCA7Civlrp/pmpvlrrYgPCBqaXNzYWlrYVwgOwor5p+054qsIDwgc2hpYmFpbnVcIDsKK+S/ruWtpiA8IHNodXVnYWt1XCA7Civkv4rlvrMgPCBzaHVudG9rdVwgOwor5LiA5pi85aScIDwgaXRjaHV1eWFcIDsKK+aciOi8qiA8IGdldHN1cmluXCA7Civku7Lnp4sgPCBjaHV1c2h1dVwgOwor5Li76L+wIDwgc2h1anV0c3VcIDsKK+ihhuitsOmZoiA8IHNodXVnaWluXCA7CivkurrogokgPCBqaW4nJ25pa3VcIDsKK+WqkumFjCA8IGJhaXNoYWt1XCA7Civml6XmnKzoo70gPCBuaWhvbnNlaVwgOwor5L6L5pyIIDwgcmVpZ2V0c3VcIDsKK+eUn+WomCA8IGtpbXVzdW1lXCA7CivljbDliKTluKsgPCBpbmJhbnNoaVwgOwor5Luj562GIDwgZGFpaGl0c3VcIDsKK+WvhuauuiA8IG1pc3NhdHN1XCA7CivmmrTpo58gPCBib3VzaG9rdVwgOwor5bGx5Zu9IDwgeWFtYWd1bmlcIDsKK+iBt+eoriA8IHNob2t1c2h1XCA7CivkuIDpmpsgPCBoaXRva2l3YVwgOwor5bCP54Gr5ZmoIDwgc2hvdWtha2lcIDsKK+eEoemiqOW4ryA8IG11ZnV1dGFpXCA7CivkuIDpmoUgPCBoaXRvc3VtaVwgOwor5bCx5bqKIDwgc2h1dXNob3VcIDsKK+S4iOmVtyA8IHRha2VuYWdhXCA7CivpoK3pq6ogPCB0b3VoYXRzdVwgOwor54yl6ZuRIDwgd2FpemF0c3VcIDsKK+i2s+W9oiA8IGFzaGlnYXRhXCA7CivotbDmn7vnt5ogPCBzb3VzYXNlblwgOwor5a6J54mpIDwgeWFzdW1vbm9cIDsKK+epuuaJi+WutiA8IGthcmF0ZWthXCA7CivlpKnkupXlgKQgPCB0ZW5qb3VuZVwgOwor5a+S5qW1IDwga2Fua3lva3VcIDsKK+i2s+W8sSA8IGFzaGl5b3dhXCA7CivoqIjnrpfmnKggPCBrZWlzYW5naVwgOwor5YCZ5ZOJIDwgc291cm91eWFcIDsKK+S+i+aXpSA8IHJlaWppdHN1XCA7CivkuK3pgJ8gPCBjaHV1c29rdVwgOwor5o6h54Kt5omAIDwgc2FpdGFuam9cIDsKK+W8geWLmeWumCA8IGJlbm11a2FuXCA7Civlj5fnm4rmqKkgPCBqdWVraWtlblwgOwor55Sf5aOBIDwgbmFtYWthYmVcIDsKK+WKoOW3pee0mSA8IGtha291c2hpXCA7CivogonnmoQgPCBuaWt1dGVraVwgOwor6IO45qSOIDwga3lvdXRzdWlcIDsKK+aVmeWLmeiqsiA8IGt5b3VtdWthXCA7CivmoYLmnIggPCBrZWlnZXRzdVwgOwor5a6k5ripIDwgc2hpdHN1b25cIDsKK+mAo+WLleapnyA8IHJlbmRvdWtpXCA7Civku5nnqp8gPCBzZW5rdXRzdVwgOwor5a+n5pelIDwgbmVpaml0c3VcIDsKK+itsOS6i+mMsiA8IGdpamlyb2t1XCA7Civlho3mnaXlubQgPCBzYXJhaW5lblwgOwor5LiA5pio5aScIDwgaXNzYWt1eWFcIDsKK+eVquS7mCA8IGJhbmR6dWtlXCA7CivlroflrpnlobUgPCB1Y2h1dWppblwgOwor5rC06YGT5bGLIDwgc3VpZG91eWFcIDsKK+i1pOadviA8IGFrYW1hdHN1XCA7CivnlaXkvZMgPCByeWFrdXRhaVwgOwor5qKF5bmyIDwgdW1lYm9zaGlcIDsKK+iFueWjgSA8IGZ1a3VoZWtpXCA7CivkuK3ou7ggPCBjaHV1amlrdVwgOwor55Wl5LydIDwgcnlha3VkZW5cIDsKK+iFuOWjgSA8IGNob3VoZWtpXCA7CivosaHomasgPCB6b3VtdXNoaVwgOwor5p6X56uLIDwgcmlucml0c3VcIDsKK+mHjei7jOadoSA8IGp1dWtpam91XCA7Civos6rnlpEgPCBzaGl0c3VnaVwgOwor5bGx5ZC5IDwgeWFtYWJ1a2lcIDsKK+i4j+WIhyA8IGZ1bWlraXJpXCA7CivpgZXntITph5EgPCBpeWFrdWtpblwgOwor5p2P6Iy4IDwgYW56dXRha2VcIDsKK+eUn+WbvSA8IHNob3Vrb2t1XCA7CivpuJrptaHnl4UgPCBvdW11YnlvdVwgOwor5p2f6ISpIDwgc29rdXNodXVcIDsKK+WNmOaAp+iKsSA8IHRhbnNlaWthXCA7Civlrr/mpa0gPCBzaHVrdWdvdVwgOwor5rOo5oSP54K5IDwgY2h1dWl0ZW5cIDsKK+W4uOWCmemHkSA8IGpvdWJpa2luXCA7CivnlLPlkYogPCBzaGlua29rdVwgOwor5a+S5pyIIDwga2FuZ2V0c3VcIDsKK+acieitmCA8IHl1dXNoaWtpXCA7Civou6Lnp7vmgKcgPCB0ZW4nJ2lzZWlcIDsKK+mkhee2siA8IG1vY2hpYW1pXCA7CivkvZXmp5ggPCBuYW5pc2FtYVwgOwor57+B6LKdIDwgb2tpbmFnYWlcIDsKK+a0u+eBq+WxsSA8IGtha2themFuXCA7Civlr4zmnK0gPCB0b21pZnVkYVwgOwor5bGA5aSWIDwga3lva3VnYWlcIDsKK+mjn+iGsyA8IHNob2t1emVuXCA7CivmnYnoi5QgPCBzdWdpZ29rZVwgOwor5a+G5p6XIDwgbWl0c3VyaW5cIDsKK+WAieWNkiA8IHNvdXNvdHN1XCA7CivlrqLmrr8gPCBreWFrdWRlblwgOwor5Lim6LazIDwgbmFtaWFzaGlcIDsKK+WKoOW3peeojiA8IGtha291emVpXCA7CivnlZHkvZwgPCBoYXRhc2FrdVwgOwor55Om5bGLIDwga2F3YXJheWFcIDsKK+WuouatuyA8IGt5YWt1c2hpXCA7CivnlLfliY0gPCBvdG9rb21hZVwgOwor5bGA5aCxIDwga3lva3Vob3VcIDsKK+mhsOi5mSA8IGhpbnNodWt1XCA7Civnvo7nsqfpmaIgPCBiaXNob3VpblwgOwor5a6u5qeYIDwgbWl5YXNhbWFcIDsKK+S9nOafhCA8IHNha3VnYXJhXCA7CivnjK7phYwgPCBrZW5zaGFrdVwgOwor6Iy2566q56ylIDwgY2hhZGFuc3VcIDsKK+mjn+iCsiA8IHNob2t1aWt1XCA7CivlmbTngavlsbEgPCBmdW5rYXphblwgOwor5Zyw5pa55pmCIDwgY2hpaG91amlcIDsKK+S4oei2syA8IHJ5b3Vzb2t1XCA7CivmgqrppJPprLwgPCB3YXJ1Z2FraVwgOwor5Y2a5oSb5a62IDwgaGFrdWFpa2FcIDsKK+S6jOiCoSA8IGZ1dGFtYXRhXCA7CivkuIrpgZQgPCBqb3V0YXRzdVwgOwor5oOF5aCx6YOoIDwgam91aG91YnVcIDsKK+iGneWFgyA8IGhpemFtb3RvXCA7Civlrr/mnJsgPCBzaHVrdWJvdVwgOwor5pel5pys6Iy2IDwgbmlob25jaGFcIDsKK+iEseW4vSA8IGRhdHN1Ym91XCA7CivnlLPlh7ogPCBtb3VzaGlkZVwgOwor5p+E54mpIDwgZ2FyYW1vbm9cIDsKK+S4iui/sCA8IGpvdWp1dHN1XCA7CivkvZzmm7IgPCBzYWtreW9rdVwgOwor6ICz57OeIDwgbWltaWt1c29cIDsKK+iAgeiLpSA8IHJvdW55YWt1XCA7CivlhYnooYzlt64gPCBrb3Vrb3VzYVwgOwor5aSW6ICz6YGTIDwgZ2Fpamlkb3VcIDsKK+iCieeJmyA8IG5pa3VneXV1XCA7CivlsbHlhYMgPCB5YW1hbW90b1wgOwor5Zyw6ZyH5rOiIDwgamlzaGluaGFcIDsKK+S4ieWhgeaJkyA8IHNhbnJ1aWRhXCA7CivmnZ/nuJsgPCBzb2t1YmFrdVwgOwor5Yu+5byV54q2IDwga291aW5qb3VcIDsKK+WcsOmbt+a6kCA8IGppcmFpZ2VuXCA7Civpm7vmqZ/lrZAgPCBkZW5raXNoaVwgOwor5pyr6JGJIDwgbWF0c3V5b3VcIDsKK+W4uOWCmei7jSA8IGpvdWJpZ3VuXCA7CivkvZXmnIggPCBuYW5nYXRzdVwgOwor6LGa6I2JIDwgYnV0YWt1c2FcIDsKK+WwkeWwkSA8IHNob3VzaG91XCA7CivlsI/lnovljJYgPCBrb2dhdGFrYVwgOwor5Yi35q+b5YWIIDwgaGFrZXNha2lcIDsKK+aal+mXhyA8IGt1cmF5YW1pXCA7CivnjonokbEgPCB0YW1hbmVnaVwgOwor6Z2S5YaF6ZqcIDwgYW9zb2tvaGlcIDsKK+ipleitsOWToSA8IGh5b3VnaWluXCA7CivkubPoh60gPCBueXV1c2h1dVwgOwor55SY5Y+jIDwgYW1ha3VjaGlcIDsKK+WFrOWIhuavjSA8IGtvdWJ1bmJvXCA7CivmnKjoj58gPCBtaW1penVrdVwgOwor5Y+v6IG05bqmIDwga2FjaG91ZG9cIDsKK+eEoeadoeS7tiA8IG11am91a2VuXCA7Civnn6Lpo5vnmb0gPCB5YWdhc3VyaVwgOwor5omL6IWV5a62IDwgc2h1d2Fua2FcIDsKK+eUo+WIpSA8IHNhbmJldHN1XCA7CivmpJzkuovmraMgPCBrZW5qaXNlaVwgOwor5L6/5aO6IDwgYmVudHN1Ym9cIDsKK+S4gOi8myA8IGljaGlyeW91XCA7Civos5zniakgPCB0YW1hbW9ub1wgOwor5YG95ZaE6ICFIDwgZ2l6ZW5zaGFcIDsKK+S8neWwjuW6piA8IGRlbmRvdWRvXCA7Civlhazli5/lgrUgPCBrb3Vib3NhaVwgOwor6aaW5p63IDwga3ViaWthc2VcIDsKK+WtkOeItSA8IHNoaXNoYWt1XCA7CivkvovlvI8gPCByZWlzaGlraVwgOwor54++55SfIDwgZ2VuJyduYW1hXCA7CivmnKjoi7ogPCBraWljaGlnb1wgOwor5qmf6Zai6YqDIDwga2lrYW5qdXVcIDsKK+eKrOm3siA8IGludXdhc2hpXCA7CivmnKzoibIgPCBob25zaG9rdVwgOwor5Lmx6ISIIDwgcmFubXlha3VcIDsKK+WvhuaOpSA8IG1pc3NldHN1XCA7CivkuIDouo0gPCBpY2hpeWFrdVwgOwor5bGx5Lq6IDwgeWFtYWJpdG9cIDsKK+iEh+aBryA8IGt5b3Vzb2t1XCA7Civnvr3ooaMgPCBoYWdvcm9tb1wgOwor5pyN6JasIDwgZnVrdXlha3VcIDsKK+atpuWLh+S8nSA8IGJ1eXV1ZGVuXCA7CivmorXliLkgPCBib25zZXRzdVwgOwor5LyP5rWBIDwgZnVrdXJ5dXVcIDsKK+WItuW+oeS4iyA8IHNlaWd5b2thXCA7Civlr77lsYAgPCB0YWlreW9rdVwgOwor6JOu6I+v6I2JIDwgcmVuZ2Vzb3VcIDsKK+WgseefpeapnyA8IGhvdWNoaWtpXCA7CivnjKvotrMgPCBuZWtvYXNoaVwgOwor5bCP5aiYIDwga29tdXN1bWVcIDsKK+S7o+eJqSA8IGRhaWJ1dHN1XCA7Civlp6vpsZIgPCBoaW1lbWFzdVwgOwor5pys6IWwIDwgaG9uZ29zaGlcIDsKK+iFueWIhyA8IGhhcmFraXJpXCA7Civmmanpo68gPCBiYW5tZXNoaVwgOwor57+857+8IDwgeW9rdXlva3VcIDsKK+eUn+WCtyA8IG5hbWFraXp1XCA7CivosZrogokgPCBidXRhbmlrdVwgOwor5aSP6Iez54K5IDwgZ2VzaGl0ZW5cIDsKK+mgremHkSA8IGF0YW1ha2luXCA7CivmraboirjogIUgPCBidWdlaXNoYVwgOwor576O6LOqIDwgYmlzaGl0c3VcIDsKK+i1sOmmrOeBryA8IHNvdW1hdG91XCA7CivlsYrlh7ogPCB0b2Rva2VkZVwgOwor6LWk5b+DIDwgc2VraXNoaW5cIDsKK+eKtumqqCA8IGpvdWtvdHN1XCA7Civnv6DoibIgPCBzdWlzaG9rdVwgOwor5Lih6KKWIDwgcnlvdXNvZGVcIDsKK+S4uOiWrCA8IGdhbicneWFrdVwgOwor5a6/5omAIDwgc2h1a3VzaG9cIDsKK+aenOeJqSA8IGt1ZGFtb25vXCA7Civkuozph43nqI4gPCBuaWp1dXplaVwgOwor54++54mpIDwgZ2VuYnV0c3VcIDsKK+S4i+iriyA8IHNoaXRhdWtlXCA7CivmnKjogLMgPCBraWt1cmFnZVwgOwor5bC95YqbIDwgamlucnlva3VcIDsKK+ato+avlOS+iyA8IHNlaWhpcmVpXCA7CivpoJDph5HogIUgPCB5b2tpbnNoYVwgOwor5Lq655WcIDwgamluY2hpa3VcIDsKK+WKoOmAn+W6piA8IGthc29rdWRvXCA7CivmraPlvZPljJYgPCBzZWl0b3VrYVwgOwor5omL5LiN6LazIDwgdGVidXNva3VcIDsKK+WBtOeBq+WxsSA8IHNva2themFuXCA7CivpgY7kuI3lj4ogPCBrYWZ1a3l1dVwgOwor5q666byg5YmkIDwgc2Fzc296YWlcIDsKK+iomOW/teelrSA8IGtpbmVuc2FpXCA7Civkv4Llk6EgPCBrYWthcmlpblwgOwor5LiN5omL6ZqbIDwgZnV0ZWdpd2FcIDsKK+S4jeetiei+uiA8IGZ1dG91aGVuXCA7CivooqvlrrPlnLAgPCBoaWdhaWNoaVwgOwor5pel5pys57SZIDwgbmlob25zaGlcIDsKK+S4gOirviA8IGljaGlkYWt1XCA7CivmvZzmsLTlpKsgPCBzZW5zdWlmdVwgOwor5b6h6ZmA5LuPIDwgb2RhYnV0c3VcIDsKK+WtpuattCA8IGdha3VyZWtpXCA7Civlrr/mgqogPCBzaHVrdWFrdVwgOwor6IO45bqnIDwgbXVuYWd1cmFcIDsKK+S4gOiqrSA8IGljaGlkb2t1XCA7Civlr6Xlr6UgPCByeW91cnlvdVwgOwor5p2l552AIDwgcmFpY2hha3VcIDsKK+S8kealrSA8IGt5dXVneW91XCA7CivlpJzlrabmoKEgPCB5YWdha2tvdVwgOwor5YaN5LiK5pigIDwgc2Fpam91ZWlcIDsKK+S/ruS6hiA8IHNodXVyeW91XCA7Civog7jluYUgPCBtdW5laGFiYVwgOwor5aSW5p2l6KqeIDwgZ2FpcmFpZ29cIDsKK+mbo+egtOiIuSA8IG5hbnBhc2VuXCA7CivkuIDoqIAgPCBoaXRva290b1wgOwor5a6/5b+XIDwgc2h1a3VzaGlcIDsKK+mnkuS4i+mnhCA8IGtvbWFnZXRhXCA7CivohZXlipsgPCB3YW5yeW9rdVwgOwor6IW55LitIDwgZnVrdWNodXVcIDsKK+S4gOinkiA8IGhpdG9rYWRvXCA7CivogonmrLIgPCBuaWt1eW9rdVwgOwor5rOo5oSP5pu4IDwgY2h1dWlzaG9cIDsKK+ePoOeOiSA8IHNodWd5b2t1XCA7Civku4DniakgPCBqdXVtb3RzdVwgOwor5LqU6YeN5aWPIDwgZ29qdXVzb3VcIDsKK+iCqeabuCA8IGthdGFnYWtpXCA7CivmvKvoq4flrrYgPCBtYW5kYW5rYVwgOwor5YCN57K+5bqmIDwgYmFpc2VpZG9cIDsKK+e0jeS7mOiAhSA8IG5vdWZ1c2hhXCA7Civlrr/lvIogPCBzaHVrdWhlaVwgOwor5Zm054Gr5Y+jIDwgZnVua2Frb3VcIDsKK+S7i+itt+S6uiA8IGthaWdvbmluXCA7CivkubHnrYYgPCByYW5waXRzdVwgOwor5Lq654mpIDwgamluYnV0c3VcIDsKK+S/l+S/oSA8IHpva3VzaGluXCA7CivnjK7ooYAgPCBrZW5rZXRzdVwgOwor5qC85a6JIDwga2FrdXlhc3VcIDsKK+S4oeiTiyA8IHJ5b3VidXRhXCA7Civlrabmpa0gPCBnYWt1Z3lvdVwgOwor5Lq654i1IDwgamluc2hha3VcIDsKK+eMpeikuyA8IHdhaXNldHN1XCA7CivpgZPorbDkvJogPCBkb3VnaWthaVwgOwor5pyJ5qmf5L2TIDwgeXV1a2l0YWlcIDsKK+ixmueusSA8IGJ1dGFiYWtvXCA7Civku67mrr8gPCBrYXJpZG9ub1wgOwor6aOb55+zIDwgdG9iaWlzaGlcIDsKK+S5seeriyA8IHJhbnJpdHN1XCA7CivmrbvnlKPlhZAgPCBzaGl6YW5qaVwgOwor5a6/5bizIDwgeWFkb2Nob3VcIDsKK+WvkuWvkiA8IHNhbXV6YW11XCA7CivmnLHnrYYgPCBzaHVoaXRzdVwgOwor5LiN6KaP5YmHIDwgZnVraXNva3VcIDsKK+S4u+iEiCA8IHNodW15YWt1XCA7CivmvZzmsLTlmaggPCBzZW5zdWlraVwgOwor5LuY5re7IDwgdHN1a2lzb2lcIDsKK+acrOevgCA8IGhvbmJ1c2hpXCA7Civmm7LoirggPCBreW9rdWdlaVwgOwor5pyr56+AIDwgbWFzc2V0c3VcIDsKK+i2s+WFgyA8IGFzaGltb3RvXCA7CivosqHniakgPCB6YWlidXRzdVwgOwor5bCP5ZCNIDwgc2hvdW15b3VcIDsKK+aVtOWCmeW3pSA8IHNlaWJpa291XCA7CivkuZfntYQgPCBub3Jpa3VtaVwgOwor5a+d5ae/IDwgbmVzdWdhdGFcIDsKK+abs+iIuSA8IGhpa2lidW5lXCA7CivmnKvnrYYgPCBtYXBwaXRzdVwgOwor6I2S5q2m6ICFIDwgYXJhbXVzaGFcIDsKK+mBoOWcsOeCuSA8IGVuY2hpdGVuXCA7CivmmLzpoIMgPCBoaXJ1Z29yb1wgOwor54us6LqrIDwgZG9rdXNoaW5cIDsKK+eQtOabsiA8IGtpbmt5b2t1XCA7CivkuqzniakgPCBreW91bW9ub1wgOwor5p+Q5pyIIDwgYm91Z2V0c3VcIDsKK+WkluWtl+e0mSA8IGdhaWppc2hpXCA7Civku4rmmYLliIYgPCBpbWFqaWJ1blwgOwor6LGG57KVIDwgbWFtZWthc3VcIDsKK+S4reiFuSA8IGNodXVmdWt1XCA7Civlj43li5XlrrYgPCBoYW5kb3VrYVwgOwor6aCG6YCGIDwganVuZ3lha3VcIDsKK+Wkp+aZpuaXpSA8IG9vbWlzb2thXCA7CivmnYnnmq4gPCBzdWdpa2F3YVwgOwor5bCG5Y+IIDwgaGF0YW1hdGFcIDsKK+S4jeeyvuW3pyA8IGZ1c2Vpa291XCA7CivlpKfkuIjlpKsgPCBkYWlqb3VidVwgOwor6ISx5Y20IDwgZGFra3lha3VcIDsKK+WvguWvniA8IHNla2liYWt1XCA7Civpo5/nlKggPCBzaG9rdXlvdVwgOwor5p+Q5pelIDwgYm91aml0c3VcIDsKK+S/neWFqOS8miA8IGhvemVua2FpXCA7CivlkIzntKDkvZMgPCBkb3Vzb3RhaVwgOwor5pmp6YWMIDwgYmFuc2hha3VcIDsKK+S4reiCiSA8IGNodXVuaWt1XCA7Civkvp3mgJnotJTlsZMgPCBla29oaWlraVwgOwor6LKe54OIIDwgdGVpcmV0c3VcIDsKK+WGjeS6pOS7mCA8IHNhaWtvdWZ1XCA7Civpo7LniakgPCBub21pbW9ub1wgOwor5Lih6IaaIDwgcnlvdWhhZGFcIDsKK+Wun+W8viA8IGppdHN1ZGFuXCA7CivkuIvokKAgPCBzaGl0YW1vZVwgOwor5aSp5pel5rOVIDwgdGVucGlob3VcIDsKK+absuiAhSA8IGt1c2Vtb25vXCA7CivlrojorbfnpZ4gPCBzaHVnb2ppblwgOwor5qGD5ZySIDwgbW9tb3pvbm9cIDsKK+e1hOWQiOiyuyA8IGt1bWlhaWhpXCA7Civpppblt7sgPCBrdWJpbWFraVwgOwor5LuP5rCXIDwgaG90b2tlZ2lcIDsKK+aYpemiqCA8IGhhcnVrYXplXCA7CivojZLolarlnLAgPCBrb3VidWNoaVwgOwor5Lim6IKJIDwgbmFtaW5pa3VcIDsKK+aEm+Wqm+ecjCA8IGVoaW1la2VuXCA7CivmnKrpnZLlubQgPCBtaXNlaW5lblwgOwor5a6i5bm0IDwga3lha3VuZW5cIDsKK+i2iuWNlyA8IGJldG9uYW11XCA7CivkuKHohIcgPCByeW91d2FraVwgOwor6aKo56qTIDwga2F6YW1hZG9cIDsKK+S6uuS6i+ashCA8IGppbmppcmFuXCA7CivpoqjnqbQgPCBmdXVrZXRzdVwgOwor5LuP5q6/IDwgYnV0c3VkZW5cIDsKK+iDuOWjgSA8IGt5b3VoZWtpXCA7Civplbfpn7PnrKYgPCBjaG91b25wdVwgOwor5a6a5byPIDwgdGVpc2hpa2lcIDsKK+S4jeWdh+aWiSA8IGZ1a2luc2VpXCA7CivkuKHogpggPCByeW91aGlqaVwgOwor5rqW5YKZ6YeRIDwganVuYmlraW5cIDsKK+WroeeUtyA8IGNoYWt1bmFuXCA7CivkubPnmb0gPCBueXV1aGFrdVwgOwor5reL5be05rayIDwgcmlucGFla2lcIDsKK+S6i+WLmemVtyA8IGppbXVjaG91XCA7Civkv67nkIblsYsgPCBzaHV1cml5YVwgOwor5L2O5a+GIDwgdGVpbWl0c3VcIDsKK+S4oeiAsyA8IHJ5b3VtaW1pXCA7Civmh5DnlpHoq5YgPCBrYWlnaXJvblwgOwor5ZaJ6aCt54KOIDwga291dG91ZW5cIDsKK+aatOiZkCA8IGJvdWd5YWt1XCA7CivogpjmjpsgPCBoaWppa2FrZVwgOwor55aO5aSW5oSfIDwgc29nYWlrYW5cIDsKK+S4oee/vCA8IHJ5b3V5b2t1XCA7Civlr4blo7IgPCBtaXRzdWJhaVwgOwor5pyo55+zIDwgYm9rdXNla2lcIDsKK+eOieeglSA8IGd5b2t1c2FpXCA7CivkuIPojYkgPCBuYW5ha3VzYVwgOwor5Yqg6YCf5ZmoIDwga2Fzb2t1a2lcIDsKK+WuruWuiCA8IG1peWFtb3JpXCA7Civnjonnn7MgPCB0YW1haXNoaVwgOwor5bqt5LiL6aeEIDwgbml3YWdldGFcIDsKK+S7suaYpSA8IGNodXVzaHVuXCA7CivmoZHljp8gPCBrdXdhYmFyYVwgOwor6K2Y6Za+IDwgc2hpa2lpa2lcIDsKK+S6uuazoiA8IGhpdG9uYW1pXCA7CivmmKXpm6ggPCBoYXJ1c2FtZVwgOwor57+z55uuIDwga2FzdW1pbWVcIDsKK+eMv+iCoSA8IHNhcnVtYXRhXCA7CivkvJHmiJogPCBreXV1c2VraVwgOwor6Z2e5bi45YukIDwgaGlqb3VraW5cIDsKK+mHjueQg+mDqCA8IHlha3l1dWJ1XCA7CivlrqLlsaQgPCBreWFrdXNvdVwgOwor5YmN6aeG5oimIDwgemVua3VzZW5cIDsKK+aYpemZvSA8IHNodW4nJ3lvdVwgOwor6LKe5reRIDwgdGVpc2h1a3VcIDsKK+WuiOW9uSA8IG1vcml5YWt1XCA7CivkuLvnr4AgPCBzaHVzZXRzdVwgOwor5oyH5bCO6YOoIDwgc2hpZG91YnVcIDsKK+iyoeeUo+WutiA8IHphaXNhbmthXCA7CivkuIDoirEgPCBoaXRvaGFuYVwgOwor6aGU6ImyIDwgZ2Fuc2hva3VcIDsKK+S4ree0sCA8IGNodXVib3NvXCA7CivkuK3ntJogPCBjaHV1a3l1dVwgOwor5bGF5YKs5L+DIDwgaXphaXNva3VcIDsKK+eOh+ebtCA8IHNvdGNob2t1XCA7CivnjKvoiIwgPCBuZWtvaml0YVwgOwor5LiJ6ISaIDwgc2Fua3lha3VcIDsKK+aZuuitmCA8IGNoaXNoaWtpXCA7CivlvZPmrbPppqwgPCB0b3VzYWliYVwgOwor5LiL6IKlIDwgc2hpbW9nb2VcIDsKK+Wun+WusyA8IGppdHN1Z2FpXCA7CivlsI/kuIAgPCBzaG91aWNoaVwgOwor6LKq5qyyIDwgZG9uJyd5b2t1XCA7Civku4HnjovlipsgPCBuaW91cmlraVwgOwor5Lq65qyyIDwgamluJyd5b2t1XCA7CivlpJrogonmnpwgPCB0YW5pa3VrYVwgOwor5pyA55ub5pyfIDwgc2Fpc2Vpa2lcIDsKK+Wun+WtmCA8IGppdHN1em9uXCA7Civlj43mr5TkvosgPCBoYW5waXJlaVwgOwor6aCY6KKWIDwgcnlvdXNodXVcIDsKK+aXsemtgyA8IGthbmJhdHN1XCA7Civnibnpm4YgPCB0b2t1c2h1dVwgOwor5pyr55S3IDwgYmF0c3VuYW5cIDsKK+mfs+izqiA8IG9uc2hpdHN1XCA7Civlr7jlgJ8gPCBzdW5zaGFrdVwgOwor5aWz5a2Q6auYIDwgam9zaGlrb3VcIDsKK+mWi+Wbnui3ryA8IGthaWthaXJvXCA7CivotoXkv5cgPCBjaG91em9rdVwgOwor5puy566hIDwga3lva3VrYW5cIDsKK+Wvqeafu+WToSA8IHNoaW5zYWluXCA7CivohIjli5UgPCBteWFrdWRvdVwgOwor6IKp5bmFIDwga2F0YWhhYmFcIDsKK+S6i+WLmeapn+WZqCA8IGppbXVraWtpXCA7CivmoYjlh7ogPCBhbnNodXRzdVwgOwor6bqd6aaZ5rC0IDwgamFrb3VzdWlcIDsKK+aXpeacrOeKrCA8IG5paG9ua2VuXCA7Civkuovli5nph48gPCBqaW11cnlvdVwgOwor6IKh5byVIDwgbW9tb2hpa2lcIDsKK+S4uOemvyA8IG1hcnVoYWdlXCA7CivlvJXnlKjlj6UgPCBpbicneW91a3VcIDsKK+S+m+S6uiA8IHRvbW9iaXRvXCA7Civnp5HlrabpmaIgPCBrYWdha3VpblwgOwor5Lq65qeYIDwgaGl0b3NhbWFcIDsKK+S5s+eJmyA8IG55dXVneXV1XCA7CivlsILkuIAgPCBzZW4nJ2l0c3VcIDsKK+WJjemgremDqCA8IHplbnRvdWJ1XCA7CivljYHlm5vml6UgPCBqdXV5b2trYVwgOwor5p6V5pyoIDwgbWFrdXJhZ2lcIDsKK+iCoeW6pyA8IG1hdGFndXJhXCA7CivnibnplbcgPCB0b2t1Y2hvdVwgOwor54u46Je7IDwgdGFudWtpbW9cIDsKK+e8tuipsCA8IGthbmR6dW1lXCA7CivkuIDnv7wgPCBpY2hpeW9rdVwgOwor5a6f5aa5IDwgaml0c3VtYWlcIDsKK+S4reepuiA8IG5ha2F6b3JhXCA7Civpo7LmsLQgPCBub21pbWl6dVwgOwor5Lit56iLIDwgbmFrYWhvZG9cIDsKK+S7iuaciCA8IGtvbmdldHN1XCA7CivosrjmnKwgPCBrYXNoaWhvblwgOwor5Lim56uLIDwgaGVpcml0c3VcIDsKK+WuieWuvyA8IHlhc3V5YWRvXCA7Civoh6rlt7HmmpfnpLogPCBqaWtvYW5qaVwgOwor6IO95YqbIDwgbm91cnlva3VcIDsKK+mAo+atjOW4qyA8IHJlbmdhc2hpXCA7CivnianpmbAgPCBtb25va2FnZVwgOwor5a6J5a6JIDwgeWFzdXlhc3VcIDsKK+WtpuW+syA8IGdha3V0b2t1XCA7CivmlK/mj7TogIUgPCBzaGllbnNoYVwgOwor57+S55mWIDwgc2h1dWhla2lcIDsKK+aituacqOW6pyA8IGthamlraXphXCA7CivkuLjnn7MgPCBtYXJ1aXNoaVwgOwor5Zyw5pa55Yy6IDwgY2hpaG91a3VcIDsKK+S4h+e3kSA8IGJhbnJ5b2t1XCA7Civlrr/lkb0gPCBzaHVrdW1laVwgOwor5bGx54Gr5LqLIDwgeWFtYWthamlcIDsKK+aJjeacqua6gCA8IHNhaW1pbWFuXCA7Civku4/mlocgPCBmdXRzdWJ1blwgOwor54mb6Z2pIDwgZ3l1dWthd2FcIDsKK+iBluaXpSA8IHNlaWppdHN1XCA7Civkurrmn4QgPCBoaXRvZ2FyYVwgOwor5Lqr5qW9IDwga3lvdXJha3VcIDsKK+advuafjyA8IHNob3VoYWt1XCA7CivnvqTnq7kgPCBtdXJhdGFrZVwgOwor6K2m6LmVIDwga2VpaGl0c3VcIDsKK+S5s+a/gSA8IG55dXVkYWt1XCA7Civnv6DnjokgPCBzdWlneW9rdVwgOwor5Lq66aGe54y/IDwgamlucnVpZW5cIDsKK+aXpemjnyA8IG5pc3Nob2t1XCA7Civku4fmlbUgPCBreXV1dGVraVwgOwor6Z266Z6oIDwgbWFra2F0c3VcIDsKK+Wnv+imiyA8IHN1Z2F0YW1pXCA7CivorbDlrprmm7ggPCBnaXRlaXNob1wgOwor5a6f5ZyoIDwgaml0c3V6YWlcIDsKK+aciOeVqiA8IHRzdWtpYmFuXCA7CivnkrDkuIMgPCBrYW4nJ25hbmFcIDsKK+iDuOWFiCA8IG11bmFzYWtpXCA7Civog7jlhYMgPCBtdW5hbW90b1wgOwor5LiA57WEIDwgaGl0b2t1bWlcIDsKK+iMtuWdiuS4uyA8IGNoYWJvdXp1XCA7CivnjKvns54gPCBuZWtvYmFiYVwgOwor5Yqg55uf5bqXIDwga2FtZWl0ZW5cIDsKK+mdtOmfsyA8IGt1dHN1b3RvXCA7CivkuZfniakgPCBub3JpbW9ub1wgOwor6aKo54mpIDwgZnV1YnV0c3VcIDsKK+S9nOWKhyA8IHNha3VnZWtpXCA7CivmmpboibIgPCBkYW5zaG9rdVwgOwor5L2V5Y2SIDwgbmFuaXRvem9cIDsKK+e3qeS4i+WJpCA8IGthbmdlemFpXCA7CivnjofnhLYgPCBzb3RzdXplblwgOwor6JCM6buE6ImyIDwgbW9lZ2lpcm9cIDsKK+epuuawl+mKgyA8IGt1dWtpanV1XCA7CivkvJHlraYgPCBreXV1Z2FrdVwgOwor6bm55rC05rmWIDwga2Fuc3Vpa29cIDsKK+S4ieethiA8IHNhbnBpdHN1XCA7CivkvY/lj4sgPCBzdW1pdG9tb1wgOwor5rW36ICB6IWwIDwgZWJpZ29zaGlcIDsKK+advuaYjiA8IHRhaW1hdHN1XCA7Civku67lvbkgPCBrYXJpeWFrdVwgOwor55Sf6KiI6LK7IDwgc2Vpa2VpaGlcIDsKK+S4reeavyA8IGNodXV6YXJhXCA7CivkurrmlbAgPCBoaXRva2F6dVwgOwor5ama57SEIDwga29uJyd5YWt1XCA7CivkuIvnqbQgPCBzaGl0YWFuYVwgOwor5a6/5YWtIDwgeWFkb3Jva3VcIDsKK+WPguWKoOiAhSA8IHNhbmthc2hhXCA7Civml6XmnKzmtbcgPCBuaWhvbmthaVwgOwor6ICz5py2IDwgbWltaXRhYnVcIDsKK+abuOeVmSA8IGtha2l0b21lXCA7CivkuIDnrYsgPCBoaXRvc3VqaVwgOwor5a2m5a+uIDwgZ2FrdXJ5b3VcIDsKK+S4gOethiA8IGhpdG9mdWRlXCA7CivooqvkuZfmlbAgPCBoaWpvdXN1dVwgOwor54mH6ZqFIDwga2F0YXN1bWlcIDsKK+ixgeeEtiA8IGthdHN1emVuXCA7CivmiYvpoqjnkLQgPCB0ZWZ1dWtpblwgOwor54mH6ZmwIDwga2F0YWthZ2VcIDsKK+S6peaciCA8IGdhaWdldHN1XCA7Civms6jmhI/loLEgPCBjaHV1aWhvdVwgOwor6aKo5pmv55S7IDwgZnV1a2VpZ2FcIDsKK+izquWxiyA8IHNoaWNoaXlhXCA7CivnjKrnqoEgPCBjaG90b3RzdVwgOwor5Lqs5pa5IDwga3lvdWdhdGFcIDsKK+mbu+WtkOmfsyA8IGRlbnNoaW9uXCA7CivniZvpjYsgPCBneXV1bmFiZVwgOwor5a6f5ZCNIDwgaml0c3VtZWlcIDsKK+i7ouWMluezliA8IHRlbmthdG91XCA7CivmnaXmnIggPCByYWlnZXRzdVwgOwor6IO45LitIDwga3lvdWNodXVcIDsKK+S4gOeoriA8IGhpdG9rdXNhXCA7CivplonntYzmnJ8gPCBoZWlrZWlraVwgOwor5piO6YGUIDwgbWVpdGF0c3VcIDsKK+Wuv+S+vyA8IHNodWt1YmVuXCA7Civlr4bku6QgPCBtaXRzdXJlaVwgOwor5LiA56eSIDwgaWNoaWJ5b3VcIDsKK+S6kuWKqeeahCA8IGdvam90ZWtpXCA7Civkub7miYDluK8gPCBrYW5qb3RhaVwgOwor5aSn6Z+z5aOwIDwgZGFpb25qb3VcIDsKK+egtOeUo+iAhSA8IGhhc2Fuc2hhXCA7Civplonlm57ot68gPCBoZWlrYWlyb1wgOwor5Li754mpIDwgc2h1YnV0c3VcIDsKK+e+pOeZuiA8IGd1bnBhdHN1XCA7Civmm7LnkIMgPCBreW9ra3l1dVwgOwor5pep6ZCYIDwgaGF5YWdhbmVcIDsKK+iDoem6u+aTgiA8IGdvbWFzdXJpXCA7CivmqZ/pm7fljp8gPCBraXJhaWdlblwgOwor5LqM5qGBIDwgZnV0YWtldGFcIDsKK+adpeaXpSA8IHJhaW5pY2hpXCA7CivniKrpn7MgPCB0c3VtYW90b1wgOwor5pat6auqIDwgZGFucGF0c3VcIDsKK+absueOiSA8IG1hZ2F0YW1hXCA7CivlpJrlrZTmgKcgPCB0YWtvdXNlaVwgOwor5ZCI5oiQ6Z+zIDwgZ291c2Vpb25cIDsKK+egtOmtlOW8kyA8IGhhbWF5dW1pXCA7CivlrqLliIYgPCBreWFrdWJ1blwgOwor5L2V5L2VIDwgbmFuaW5hbmlcIDsKK+mAoOW9seWJpCA8IHpvdWVpemFpXCA7Civog4blipsgPCB0YW5yeW9rdVwgOwor5LqL5p+EIDwga290b2dhcmFcIDsKK+S7ruWuriA8IGthcmltaXlhXCA7Civmm7jniakgPCBzaG9tb3RzdVwgOwor54mb6YWqIDwgZ3l1dXJha3VcIDsKK+WApuaAoOacnyA8IGtlbnRhaWtpXCA7Civni6znv5IgPCBkb2t1c2h1dVwgOwor5Luu5a6FIDwga2FyaXRha3VcIDsKK+WtkOWunSA8IGtvZGFrYXJhXCA7Civpn67okbEgPCBuaXJhbmVnaVwgOwor5pyq57SN6ICFIDwgbWlub3VzaGFcIDsKK+S6jOmHjeaYnyA8IG5panV1c2VpXCA7CivkvZfkurogPCB3YWJpYml0b1wgOwor5LuP5byPIDwgYnVzc2hpa2lcIDsKK+S4ieebtCA8IHNhbmNob2t1XCA7CivkvZXkuosgPCBuYW5pZ290b1wgOwor6IKJ5aSqIDwgbmlrdWJ1dG9cIDsKK+e5geS9k+WtlyA8IGhhbnRhaWppXCA7CivkuInnmb4gPCBzYW5ieWFrdVwgOwor54m56LOeIDwgdG9rdXNob3VcIDsKK+a2iOmfs+WZqCA8IHNob3VvbmtpXCA7CivpoZTnnYAgPCBnYW5jaGFrdVwgOwor5aSa5Lq65pWwIDwgdGFuaW56dXVcIDsKK+i1tOS7u+WcsCA8IGZ1bmluY2hpXCA7Civlj6TnlJ/ku6MgPCBrb3NlaWRhaVwgOwor5Lmz5qWtIDwgbnl1dWd5b3VcIDsKK+aXpemKgCA8IG5pY2hpZ2luXCA7CivmnpXluK0gPCBjaGluc2VraVwgOwor6LOT5a6iIDwgaGlua3lha3VcIDsKK+iKneWxheawlyA8IHNoaWJhaWdlXCA7Civlrp/lg48gPCBqaXRzdXpvdVwgOwor5a6f5YONIDwgaml0c3Vkb3VcIDsKK+aoquW6p+aomSA8IG91emFoeW91XCA7Civoh6rorablm6MgPCBqaWtlaWRhblwgOwor5pqr5a6a5qGIIDwgemFudGVpYW5cIDsKK+mtmuW4guWgtCA8IHVvaWNoaWJhXCA7Civlrq7kurogPCBtaXlhYml0b1wgOwor5pen6YeMIDwgZnVydXNhdG9cIDsKK+S4gOeavyA8IGhpdG9zYXJhXCA7CivkuIDnmq4gPCBoaXRva2F3YVwgOwor5LqM5pa5IDwgZnV0YWthdGFcIDsKK+mnhemmrOi7iiA8IGVraWJhc2hhXCA7CivkuIrnlaUgPCBqb3VyeWFrdVwgOwor6LKr5b65IDwga2FudGV0c3VcIDsKK+WvvuipseS9kyA8IHRhaXdhdGFpXCA7CivmnqLlr4YgPCBzdXVtaXRzdVwgOwor5LiA55mWIDwgaGl0b2t1c2VcIDsKK+WuruS4rSA8IGt5dXVjaHV1XCA7CivosYbmrrsgPCBtYW1lZ2FyYVwgOwor54++5bC6IDwgZ2Vuc2hha3VcIDsKK+S6uuW9sSA8IGhpdG9rYWdlXCA7CivlrqLkvZMgPCBreWFrdXRhaVwgOwor5riF5o6D5aSrIDwgc2Vpc291ZnVcIDsKK+Wun+S+iyA8IGppdHN1cmVpXCA7Civpq5jmhJ/luqYgPCBrb3VrYW5kb1wgOwor5pyo5qeMIDwga2lkenVjaGlcIDsKK+e0gOWFg+WJjSA8IGtpZ2VuemVuXCA7Civno6jnoJTntJkgPCBtYWtlbnNoaVwgOwor54++5a6fIDwgZ2Vuaml0c3VcIDsKK+WuouS6uiA8IGt5YWt1amluXCA7Civml6LlqZrogIUgPCBraWtvbnNoYVwgOwor6Zy56Z2CIDwgaGVraXJla2lcIDsKK+aQrOmAgeazoiA8IGhhbnNvdWhhXCA7CivorbLokYkgPCB5dXp1cmloYVwgOwor55aO6ZaL6ICFIDwgc29rYWlzaGFcIDsKK+aAneaDs+WutiA8IHNoaXNvdWthXCA7CivosLfmsLQgPCB0YW5pbWl6dVwgOwor6LGq5pelIDwgZ291bmljaGlcIDsKK+acjeavkiA8IGZ1a3Vkb2t1XCA7CivlsqnnlLDluK8gPCBpd2F0YW9iaVwgOwor6IG35Z+fIDwgc2hva3Vpa2lcIDsKK+aatOeZuiA8IGJvdWhhdHN1XCA7CivplovplonmqZ8gPCBrYWloZWlraVwgOwor5bqP56C05oClIDwgam9oYWt5dXVcIDsKK+i2s+W/oOWunyA8IGFzaGltYW1lXCA7Civpo5/mjIcgPCBzaG9rdXNoaVwgOwor5Y2K5rib5pyfIDwgaGFuZ2Vua2lcIDsKK+aXpei8qiA8IG5pY2hpcmluXCA7Civoh6rnhLbnvo4gPCBzaGl6ZW5iaVwgOwor6IKp5YWIIDwga2F0YXNha2lcIDsKK+WklumwkCA8IHNvdG93YW5pXCA7CivpoLvnmbogPCBoaW5wYXRzdVwgOwor5YmN5LiW57SAIDwgemVuc2Vpa2lcIDsKK+acrOacqyA8IGhvbm1hdHN1XCA7CivnoJTno6jntJkgPCBrZW5tYXNoaVwgOwor5LiH54mpIDwgYmFubW90c3VcIDsKK+eOieadryA8IGd5b2t1aGFpXCA7CivnjK7niakgPCBrZW5tb3RzdVwgOwor5Lq65bGxIDwgaGl0b3lhbWFcIDsKK+mdkuWGmeecnyA8IGFvamFzaGluXCA7Civml6notrMgPCBoYXlhYXNoaVwgOwor56WI56W35pu4IDwga2l0b3VzaG9cIDsKK+mcp+mbqCA8IGtpcmlzYW1lXCA7CivluLDpgoTlhbUgPCBraWthbmhlaVwgOwor6ZaJ57WM5b6MIDwgaGVpa2VpZ29cIDsKK+izouWTsiA8IGtlbnRldHN1XCA7CivniYfotrMgPCBrYXRhYXNoaVwgOwor5LiA54mHIDwgaGl0b2hpcmFcIDsKK+WkmuaWuemdoiA8IHRhaG91bWVuXCA7Civnh5XlsL7mnI0gPCBlbmJpZnVrdVwgOwor56aA6K2w5pu4IDwgcmluZ2lzaG9cIDsKK+acrOaXpSA8IGhvbmppdHN1XCA7Civkub7mi60gPCBrYXJhYnVraVwgOwor54i25YWE5LyaIDwgZnVrZWlrYWlcIDsKK+mrmOm6l+alvSA8IGtvbWFnYWt1XCA7Civpo5/mhJ8gPCBzaG9rdWthblwgOwor5pW06auqIDwgc2VpaGF0c3VcIDsKK+S7j+WjhyA8IGJ1dHN1ZGFuXCA7Civkuojmg7PlpJYgPCB5b3NvdWdhaVwgOwor5omB5qGD5rK5IDwgaGVudG91eXVcIDsKK+WtpuWJsiA8IGdha3V3YXJpXCA7CivmlbTpqqggPCBzZWlrb3RzdVwgOwor6LSL5L2cIDwgbmlzZXNha3VcIDsKK+WtpuWJhyA8IGdha3Vzb2t1XCA7Civmm7LmsLQgPCBreW9rdXN1aVwgOwor6Z2S5bm05pyfIDwgc2VpbmVua2lcIDsKK+miqOaciCA8IGZ1dWdldHN1XCA7CivpnJzpm6ogPCBzb3VzZXRzdVwgOwor5Z2H562J5YyWIDwga2ludG91a2FcIDsKK+S5seaOmCA8IHJhbmt1dHN1XCA7Civlj5fpqJPogIUgPCBqdWtlbnNoYVwgOwor5pmC5Luj55u4IDwgamlkYWlzb3VcIDsKK+S5neaXpSA8IGtva29ub2thXCA7Civml6XosaogPCBuaWNoaWdvdVwgOwor5aKX5Yqg5YiGIDwgem91a2FidW5cIDsKK+S6jOmAo+mKgyA8IG5pcmVuanV1XCA7CivkuZ3ml48gPCBreXV1em9rdVwgOwor6Kqt6Z+/IDwgeW9taWt5b3VcIDsKK+eJm+inkiA8IGd5dXVrYWt1XCA7CivlpKfpm6ogPCB0YWlzZXRzdVwgOwor5aSW6aOfIDwgZ2Fpc2hva3VcIDsKK+S4gOWbnui7oiA8IGlra2FpdGVuXCA7CivlpJXpo68gPCB5dXVtZXNoaVwgOwor6IG35ZCNIDwgc2hva3VtZWlcIDsKK+aZqeevgCA8IGJhbnNldHN1XCA7CivkuozlvbkgPCBmdXRheWFrdVwgOwor5Li76ISz6YOoIDwgc2h1bm91YnVcIDsKK+S6jOW9oiA8IGZ1dGFuYXJpXCA7CivmmKXoj4ogPCBzaHVuZ2lrdVwgOwor5a2m5YOVIDwgZ2FrdWJva3VcIDsKK+e0jeS7mOabuCA8IG5vdWZ1c2hvXCA7CivosYbmlpkgPCBtYW1lcnlvdVwgOwor5pyd5pW1IDwgY2hvdXRla2lcIDsKK+WNmOW8geiKsSA8IHRhbmJlbmthXCA7CivmtYHmtarogIUgPCBydXJvdXNoYVwgOwor5pWj6auqIDwgc2FucGF0c3VcIDsKK+iPk+WtkOebhiA8IGthc2hpYm9uXCA7CivorI7orI4gPCBuYXpvbmF6b1wgOwor5YWs55So6KqeIDwga291eW91Z29cIDsKK+WmhOiqrCA8IG1vdXNldHN1XCA7CivpoJPnnYAgPCB0b25jaGFrdVwgOwor5LuP5Zm4IDwgZnV0c3V0b25cIDsKK+WmluihkyA8IHlvdWp1dHN1XCA7Civpm5vps6UgPCBoaW5hZG9yaVwgOwor6Zu76aO+IDwgZGVuc2hva3VcIDsKK+WkqumZveeCiSA8IHRhaXlvdXJvXCA7Civml6foqLMgPCBreXV1eWFrdVwgOwor5pyI5pyrIDwgdHN1a2l6dWVcIDsKK+eLrOeZvSA8IGRva3VoYWt1XCA7CivnjJvng4ggPCBtb3VyZXRzdVwgOwor5Y+X6Lqr5b2iIDwgdWtlbWlrZWlcIDsKK+awkeWWtuWMliA8IG1pbicnZWlrYVwgOwor5Lq65pyb5a62IDwgamluYm91a2FcIDsKK+eIqui3oSA8IHRzdW1lYXRvXCA7Civku67liJ0gPCBrYXJpc29tZVwgOwor5p2l5a6iIDwgcmFpa3lha3VcIDsKK+aciOabnCA8IGdldHN1eW91XCA7Civnv4zmnJ0gPCB5b2t1Y2hvdVwgOwor57eP5LqM6ZqOIDwgc291bmlrYWlcIDsKK+e5gembkSA8IGhhbnphdHN1XCA7Civop6Ppm4fogIUgPCBrYWlrb3NoYVwgOwor5ryi5pmC5LujIDwga2FuamlkYWlcIDsKK+WGheWklumHjiA8IG5haWdhaXlhXCA7CivniYfku67lkI0gPCBrYXRha2FuYVwgOwor6ISx6KGj5omAIDwgZGF0c3Vpam9cIDsKK+iBt+WIhiA8IHNob2t1YnVuXCA7Civkub7lvI8gPCBrYW5zaGlraVwgOwor6Z2i6K2YIDwgbWVuc2hpa2lcIDsKK+S6uuWeoyA8IGhpdG9nYWtpXCA7CivotIjkuI7ogIUgPCB6b3V5b3NoYVwgOwor5aSx6YyvIDwgc2hpc3Nha3VcIDsKK+S5heaWuSA8IGhpc2FrYXRhXCA7CivmnIjmmI4gPCBnZXRzdW1laVwgOwor5aOw6auYIDwga293YWRha2FcIDsKK+irlui/sCA8IHJvbmp1dHN1XCA7Civnv4zmmKUgPCB5b2t1c2h1blwgOwor5L+d5a6I57O7IDwgaG9zaHVrZWlcIDsKK+irvuirviA8IGRha3VkYWt1XCA7CivorZjogIUgPCBzaGlraXNoYVwgOwor5LuV5Y+jIDwgc2hpa3VjaGlcIDsKK+a1t+mmrOWbniA8IGthaWJha2FpXCA7Civoh6rloJXokL0gPCBqaWRhcmFrdVwgOwor54+N5aaZIDwgY2hpbm15b3VcIDsKK+iyneWhmiA8IGthaWR6dWthXCA7CivmnKzloYHmiZMgPCBob25ydWlkYVwgOwor6IGW5ZOyIDwgc2VpdGV0c3VcIDsKK+aEm+mkkOS8miA8IGFpc2Fua2FpXCA7Civlr77mipfppqwgPCB0YWlrb3ViYVwgOwor6Z2i6KmwIDwgbWVua2l0c3VcIDsKK+e4nummrCA8IHNoaW1hdW1hXCA7Civku67lkI3mlocgPCBrYW5hYnVtaVwgOwor6aOf5bC9IDwgc2hva3VqaW5cIDsKK+izreS6iyA8IGtha2Vnb3RvXCA7CivkuIDmtYEgPCBpY2hpcnl1dVwgOwor5Lit5p+EIDwgY2h1dWdhcmFcIDsKK+abuOacrSA8IHNob3NhdHN1XCA7CivlppnolqwgPCBteW91eWFrdVwgOwor5Li75pelIDwgc2h1aml0c3VcIDsKK+iruOiruCA8IG1vcm9tb3JvXCA7Civog6HpurvloakgPCBnb21hc2hpb1wgOwor5Yqg5bel5ZOBIDwga2Frb3VoaW5cIDsKK+aoqeWIqeabuCA8IGtlbnJpc2hvXCA7Civoq7joqqwgPCBzaG9zZXRzdVwgOwor5buD6KaB57SgIDwgaGFpeW91c29cIDsKK+Wls+imqiA8IG9uJyduYW95YVwgOwor5pu05pu0IDwgc2FyYXNhcmFcIDsKK+adk+WtkCA8IHNoYWt1c2hpXCA7Civnqbrmg7PlrrYgPCBrdXVzb3VrYVwgOwor5puy5puyIDwga3VtYWd1bWFcIDsKK+aYjuiJsiA8IG1laXNob2t1XCA7Civosqnlo7Lpg6ggPCBoYW5iYWlidVwgOwor55y86Y+h5bGLIDwgbWVnYW5leWFcIDsKK+S7luWHuiA8IHRhc2h1dHN1XCA7CivliY3kuJbnlYwgPCB6ZW5zZWthaVwgOwor5pys5aC05omAIDwgaG9uYmFzaG9cIDsKK+mbqOmdtCA8IGFtYWd1dHN1XCA7CivomZrnhKHlhZogPCBreW9tdXRvdVwgOwor5Lq66aGe5oSbIDwgamlucnVpYWlcIDsKK+S6jOmHjeWljyA8IG5panV1c291XCA7CivmhJvlpb3ogIUgPCBhaWtvdXNoYVwgOwor5ZCI5oiQ6KqeIDwgZ291c2VpZ29cIDsKK+acrOW8jyA8IGhvbnNoaWtpXCA7Civku4/liY0gPCBidXRzdXplblwgOwor6Zuq6ZuyIDwgeXVraWd1bW9cIDsKK+mbqOmcsCA8IGFtZWFyYXJlXCA7CivmnKjlvasgPCBtb2t1Y2hvdVwgOwor5pqR54axIDwgc2hvbmV0c3VcIDsKK+efs+eBq+efoiA8IGlzaGliaXlhXCA7CivnianoibIgPCBidXNzaG9rdVwgOwor6IG35Lq6IDwgc2hva3VuaW5cIDsKK+WHuue0jeewvyA8IHN1aXRvdWJvXCA7Civoq6forJQgPCBrYWlneWFrdVwgOwor54us54m5IDwgZG9rdXRva3VcIDsKK+WksemAnyA8IHNoaXNzb2t1XCA7CivmmKXnua0gPCBoYXJ1bWF5dVwgOwor54ax6aGYIDwgbmV0c3VnYW5cIDsKK+i7jeeuoeWMuiA8IGd1bmthbmt1XCA7CivmnKvlubQgPCBtYXRzdW5lblwgOwor5auh5a2rIDwgY2hha3Vzb25cIDsKK+eJqeiHrSA8IG1vbm9ndXNhXCA7Civlq6HlrZAgPCBjaGFrdXNoaVwgOwor6Kuk6KukIDwgZ2FrdWdha3VcIDsKK+eLoeeMviA8IGtvdWthdHN1XCA7Civpm5Hpo58gPCB6YXNzaG9rdVwgOwor5Li75oyBIDwgc2h1bW9jaGlcIDsKK+WssOWFkCA8IG1pZG9yaWdvXCA7Civnp4vnlLDnnIwgPCBha2l0YWtlblwgOwor57im6ZW3IDwgdGF0ZW5hZ2FcIDsKK+WEkuWtpueVjCA8IGp1Z2Fra2FpXCA7CivkuIvmiYvns54gPCBoZXRha3Vzb1wgOwor5LqJ5aWqIDwgc291ZGF0c3VcIDsKK+S7j+WDjyA8IGJ1dHN1em91XCA7CivmnKrlor7lnLAgPCBtaWtvbmNoaVwgOwor5aSn5aSa5pWwIDwgZGFpdGFzdXVcIDsKK+WtkOWNiOe3miA8IHNoaWdvc2VuXCA7CivogIHlrp8gPCByb3VqaXRzdVwgOwor5aSn6YCGIDwgZGFpZ3lha3VcIDsKK+aXpeiTriA8IG5pY2hpcmVuXCA7CivmraPluLjljJYgPCBzZWlqb3VrYVwgOwor55m66YW157SgIDwgaGFra291c29cIDsKK+i3nembouioiCA8IGt5b3Jpa2VpXCA7CivnhrHpm7cgPCBuZXRzdXJhaVwgOwor6Ii55bCP5bGLIDwgZnVuYWdveWFcIDsKK+mGuOmAoOaJgCA8IGpvdXpvdWpvXCA7Civoqabpo58gPCBzaGlzaG9rdVwgOwor5pW36YeRIDwgc2hpa2lraW5cIDsKK+WroeWmuyA8IGNoYWt1c2FpXCA7CivkuIDmo58gPCBoaXRvbXVuZVwgOwor5aSn57SN6KiAIDwgZGFpbmFnb25cIDsKK+WkqeaWh+WutiA8IHRlbm1vbmthXCA7CivmqKHpgKDogIUgPCBtb3pvdXNoYVwgOwor5aSx6LehIDwgc2hpc3Nla2lcIDsKK+WvneS4jei2syA8IG5lYnVzb2t1XCA7CivkurrliLogPCBqaW5zYXNoaVwgOwor6Zu76YmEIDwgZGVudGV0c3VcIDsKK+S6uuWIpSA8IG5pbmJldHN1XCA7CivlsILploDlrrYgPCBzZW5tb25rYVwgOwor6KuW6KqsIDwgcm9uc2V0c3VcIDsKK+acqueEtuW9oiA8IG1pemVua2VpXCA7CivmnKzlsYAgPCBob25reW9rdVwgOwor5Ymq6KOB5qmfIDwgc2Vuc2Fpa2lcIDsKK+S4reaMhyA8IG5ha2F5dWJpXCA7Civos7zosrfpg6ggPCBrb3ViYWlidVwgOwor6LK45YCfIDwgdGFpc2hha3VcIDsKK+eNsuW+lyA8IGtha3V0b2t1XCA7Civoq5boqbAgPCByb25raXRzdVwgOwor5oWI5ZaE5LyaIDwgaml6ZW5rYWlcIDsKK+aCqui2o+WRsyA8IGFrdXNodW1pXCA7CivkuIDmoYEgPCBoaXRva2V0YVwgOwor5pa96KGTIDwgc2hpanV0c3VcIDsKK+mhm+acqyA8IHRlbm1hdHN1XCA7CivotIjkuI7nqI4gPCB6b3V5b3plaVwgOwor6LKh5YqbIDwgemFpcnlva3VcIDsKK+iqnumDqCA8IGthdGFyaWJlXCA7Civkv53lrZjns7sgPCBob3pvbmtlaVwgOwor5LiJ5puyIDwgc2Fua3lva3VcIDsKK+awl+WLlei7iiA8IGtpZG91c2hhXCA7CivmsLjkvY/ogIUgPCBlaWp1dXNoYVwgOwor5pmv54mpIDwga2VpYnV0c3VcIDsKK+aWueihkyA8IGhvdWp1dHN1XCA7CivnibnntIQgPCB0b2t1eWFrdVwgOwor57mw6KiAIDwga3VyaWdvdG9cIDsKK+eJm+iCiSA8IGd5dXVuaWt1XCA7CivmnYnlnqMgPCBzdWdpZ2FraVwgOwor546L5a6kIDwgb3VzaGl0c3VcIDsKK+S4gOadnyA8IGhpdG90YWJhXCA7CivniaHnvoogPCBvaGl0c3VqaVwgOwor6LC35bqVIDwgdGFuaXpva29cIDsKK+acqueGn+WFkCA8IG1panVrdWppXCA7CivkuIDmnKggPCBpY2hpYm9rdVwgOwor5Lq65YKRIDwgamlua2V0c3VcIDsKK+iomOW/teWTgSA8IGtpbmVuaGluXCA7CivnoLTnk5znl4UgPCBoYWthYnlvdVwgOwor5pio56eLIDwgc2FrdXNodXVcIDsKK+iwt+W3nSA8IHRhbmlnYXdhXCA7Civku4Tku4QgPCBob25vYm9ub1wgOwor56C055Sj5rOVIDwgaGFzYW5ob3VcIDsKK+WBnOmbu+aXpSA8IHRlaWRlbmJpXCA7CivosrfkuLsgPCBrYWludXNoaVwgOwor5Y+X6aiT55SfIDwganVrZW5zZWlcIDsKK+mZuOiSuOawlyA8IG9rYWpvdWtpXCA7CivkuIDmmYIgPCBoaXRvdG9raVwgOwor5piH57WmIDwgc2hvdWt5dXVcIDsKK+Wun+ihjOaZgiA8IGppa2tvdWppXCA7CivniYfohp0gPCBrYXRhaGl6YVwgOwor6aOy5YqpIDwgbm9taXN1a2VcIDsKK+absuaCqiA8IGt5b2t1YWt1XCA7CivmqKHpgKDntJkgPCBtb3pvdXNoaVwgOwor5LqM5Y6f5a2QIDwgbmlnZW5zaGlcIDsKK+S4gOaXlyA8IGhpdG9oYXRhXCA7CivkuIDml48gPCBpY2hpem9rdVwgOwor6aOf5ZOBIDwgc2hva3VoaW5cIDsKK+eJqee0jSA8IGJ1dHN1bm91XCA7CivlpLHoqr8gPCBzaGl0Y2hvdVwgOwor54Wu6a2aIDwgbml6YWthbmFcIDsKK+WkseiqniA8IHNoaXRzdWdvXCA7CivkuIflm73ml5cgPCBiYW5rb2traVwgOwor5pep6ICzIDwgaGF5YW1pbWlcIDsKK+S4uOW6lSA8IG1hcnV6b2tvXCA7Civkuovli5nnmoQgPCBqaW11dGVraVwgOwor5Lq65Lq6IDwgaGl0b2JpdG9cIDsKK+aVo+mAuCA8IHNhbicnaXRzdVwgOwor54mH6IKMIDwga2F0YWhhZGFcIDsKK+abuOW8jyA8IHNob3NoaWtpXCA7CivkurrkuosgPCBoaXRvZ290b1wgOwor57eP6auqIDwgc291aGF0c3VcIDsKK+acjeWxniA8IGZ1a3V6b2t1XCA7CivnibnnqK4gPCB0b2t1ZGFuZVwgOwor5Lit5b2iIDwgY2h1dWdhdGFcIDsKK+S6uuS4rSA8IGhpdG9uYWthXCA7Civmjqjnp7vnmoQgPCBzdWlpdGVraVwgOwor5LiA5pKDIDwgaWNoaWdla2lcIDsKK+epuuawl+eptCA8IGt1dWtpYW5hXCA7Civlj5flrrnogIUgPCBqdXlvdXNoYVwgOwor57Og5ZGz5ZmMIDwgbnVrYW1pc29cIDsKK+aWueW9ouazoiA8IGhvdWtlaWhhXCA7CivmiKbliY3mtL4gPCBzZW56ZW5oYVwgOwor5Yem55CG5aC0IDwgc2hvcmlqb3VcIDsKK+S6jOW8pueQtCA8IG5pZ2Vua2luXCA7CivkuK3luq0gPCBuYWthbml3YVwgOwor5aeL55m6IDwgc2hpaGF0c3VcIDsKK+isnee1tiA8IHNoYXpldHN1XCA7Civkub7lkrMgPCBrYXJhemVraVwgOwor6YWS6YCg5a62IDwgc2h1em91a2FcIDsKK+S4reW5lSA8IG5ha2FtYWt1XCA7CivkuK3luYUgPCBjaHV1aGFiYVwgOwor5o6y56S65p2/IDwga2VpamliYW5cIDsKK+WGhemiqOWRgiA8IHVjaGlidXJvXCA7Civoq7johp0gPCBtb3JvaGl6YVwgOwor6Ku46IaaIDwgbW9yb2hhZGFcIDsKK+S4reW4rSA8IG5ha2FzZWtpXCA7CivmnJ3lpJUgPCBjaG91c2VraVwgOwor54mn56ybIDwgYm9rdXRla2lcIDsKK+S4oeW+lyA8IHJ5b3V0b2t1XCA7CivnuKbou7ggPCB0YXRlamlrdVwgOwor5Lit5Yq05aeUIDwgY2h1dXJvdWlcIDsKK+WnpueJqSA8IGthbmJ1dHN1XCA7Civpo5/liLsgPCBzaG9ra29rdVwgOwor546J5Z6jIDwgdGFtYWdha2lcIDsKK+aEm+eMq+WutiA8IGFpYnlvdWthXCA7CivkuInlm57lv4wgPCBzYW5rYWlraVwgOwor57eP5LuV6IieIDwgc291amltYWlcIDsKK+mbsui2syA8IGt1bW9hc2hpXCA7Civnt5HpoqggPCByeW9rdWZ1dVwgOwor54mp56iuIDwgbW9ub2RhbmVcIDsKK+S4puW5hSA8IG5hbWloYWJhXCA7CivlppnnrZYgPCBteW91c2FrdVwgOwor6Z2Z6ISIIDwgam91bXlha3VcIDsKK+eJqeeojiA8IGJ1dHN1emVpXCA7CivkuLvlrqIgPCBzaHVreWFrdVwgOwor6Ya46YCg5a62IDwgam91em91a2FcIDsKK+S6pOS6pCA8IGtvbW9nb21vXCA7CivniIbolqwgPCBiYWt1eWFrdVwgOwor5Lit5bO2IDwgbmFrYWppbWFcIDsKK+S6pOS7mOmHkSA8IGtvdWZ1a2luXCA7CivkuovlhbEgPCBrb3RvZG9tb1wgOwor5omH6aKo5qmfIDwgc2VucHV1a2lcIDsKK+S4jeaCiSA8IGZ1c2hpdHN1XCA7CivlhajlgJnoo5wgPCB6ZW5rb3Vob1wgOwor55CG5oOz6KuWIDwgcmlzb3Vyb25cIDsKK+eJp+elniA8IGJva3VzaGluXCA7Civnt5HpnZIgPCByb2t1c2hvdVwgOwor5ryi5pWw5a2XIDwga2Fuc3V1amlcIDsKK+i8neeFjOW4nSA8IGtpa291dGVpXCA7CivmlK/mjIHogIUgPCBzaGlqaXNoYVwgOwor5pa56IifIDwgaGFrb2J1bmVcIDsKK+mjr+S6iyA8IG1hbWFnb3RvXCA7CivkuK3lsI8gPCBjaHV1c2hvdVwgOwor5pel57GzIDwgbmljaGliZWlcIDsKK+eEvOmzpSA8IHlha2l0b3JpXCA7CivlpKfmloflrZcgPCBkYWltb25qaVwgOwor6Ky555u0IDwga2luY2hva3VcIDsKK+S4reWtpiA8IGNodXVnYWt1XCA7Civnt7TpiYQgPCByZW50ZXRzdVwgOwor5aSJ6KqsIDwgaGVuc2V0c3VcIDsKK+aVteilsiA8IHRla2lzaHV1XCA7CivlrZDljYjnkrAgPCBzaGlnb2thblwgOwor5pS+6YCQIDwgaG91Y2hpa3VcIDsKK+S4ieW9uSA8IHNhbicneWFrdVwgOwor6KqN6K2YIDwgbmluc2hpa2lcIDsKK+iJtuemj+WutiA8IGVucHVrdWthXCA7CivlsILploDljLsgPCBzZW5tb24nJ2lcIDsKK+abtOW5tOacnyA8IGtvdW5lbmtpXCA7Civml6XmnKzliIAgPCBuaWhvbnRvdVwgOwor57eR6ZaAIDwgcnlva3Vtb25cIDsKK+S4jeihjOWEgCA8IGZ1Z3lvdWdpXCA7CivluLDlt6PmgKcgPCBraXNvdXNlaVwgOwor5LiL5omL54mpIDwgZ2V0ZW1vbm9cIDsKK+adkeS6uiA8IG11cmFiaXRvXCA7Civmj5DmoYjogIUgPCB0ZWlhbnNoYVwgOwor5Y+X5L+h5qmfIDwganVzaGlua2lcIDsKK+S4i+W4ryA8IHNoaXRhb2JpXCA7CivkuIDlvbkgPCBoaXRveWFrdVwgOwor6LGq5YKRIDwgZ291a2V0c3VcIDsKK+aPmuWtkOaxnyA8IHlvdXN1a291XCA7CivkuovkuosgPCBrb3RvZ290b1wgOwor57a/6ZuyIDwgd2F0YWd1bW9cIDsKK+S5seWFpSA8IHJhbicnbnl1dVwgOwor57a/6ZuqIDwgd2F0YXl1a2lcIDsKK+e1jOW4uOiyuyA8IGtlaWpvdWhpXCA7CivkuojkuoggPCBrYW5lZ2FuZVwgOwor5LiW5bGAIDwgc2Vpa3lva3VcIDsKK+e3tOmBlCA8IHJlbnRhdHN1XCA7CivmmofmmocgPCBoaW1haGltYVwgOwor6ZqG6ZqGIDwgcnl1dXJ5dXVcIDsKK+a1t+eOi+aYnyA8IGthaW91c2VpXCA7CivkuIDluqYgPCBoaXRvdGFiaVwgOwor6ZqF6ZqFIDwgc3VtaXp1bWlcIDsKK+W5vOeomuWckiA8IHlvdWNoaWVuXCA7CivkuIDlubQgPCBoaXRvdG9zZVwgOwor6Z2Z57KbIDwgc2Vpc2h1a3VcIDsKK+WhqemurSA8IHNoaW96YWtlXCA7Civml4/nsY0gPCB6b2t1c2VraVwgOwor5aSn6JKcIDwgbmluJyduaWt1XCA7CivkuIDluZUgPCBoaXRvbWFrdVwgOwor5pyI5qGC5qi5IDwgZ2Vra2VpanVcIDsKK+acquiomOWFpSA8IG1pa2lueXV1XCA7CivkuIDlt7sgPCBoaXRvbWFraVwgOwor6Zuj6KmwIDwgbmFua2l0c3VcIDsKK+mbgOi6jSA8IGpha3V5YWt1XCA7CivkuK3loZcgPCBuYWthbnVyaVwgOwor6Zmq6aOfIDwgYmFpc2hva3VcIDsKK+eglOejqOadkCA8IGtlbm1hemFpXCA7CivkuozlubTojYkgPCBuaW5lbnNvdVwgOwor6aCM5pilIDwgc2hvdXNodW5cIDsKK+e+qeWLh+i7jSA8IGdpeXV1Z3VuXCA7Civmlofoqp7mlocgPCBidW5nb2J1blwgOwor6KqV55Sf5pelIDwgdGFuam91YmlcIDsKK+S8r+WJjOilv+eIviA8IGJ1cmFqaXJ1XCA7CivkuIflsYsgPCB5b3JvenV5YVwgOwor5Lit5Z6jIDwgbmFrYWdha2lcIDsKK+mHkeaZguioiCA8IGtpbmRva2VpXCA7CivpoqjlipsgPCBmdXVyeW9rdVwgOwor56m65rSe5YyWIDwga3V1ZG91a2FcIDsKK+eznuWRs+WZjCA8IGt1c29taXNvXCA7CivkubHkvJAgPCByYW5iYXRzdVwgOwor5pel5pys5Lq6IDwgbmlob25qaW5cIDsKK+eMq+WxniA8IG5la296b2t1XCA7CivmgKfpgYrmiK8gPCBzZWl5dXVnaVwgOwor5Lit5Zu9IDwgY2h1dWdva3VcIDsKK+asoeeCueiAhSA8IGppdGVuc2hhXCA7CivpoIPml6UgPCBrZWlqaXRzdVwgOwor6Ziy6IWQ5YmkIDwgYm91ZnV6YWlcIDsKK+ips+iouyA8IHNob3VjaHV1XCA7Civml6XmnKzkuK0gPCBuaWhvbmp1dVwgOwor6ZuR6KuHIDwgemF0c3VkYW5cIDsKK+iFleebuOaSsiA8IHVkZXp1bW91XCA7CivlnLDln5/lt64gPCBjaGlpa2lzYVwgOwor5L+d6K236bOlIDwgaG9nb2Nob3VcIDsKK+aXpeebtCA8IG5pdGNob2t1XCA7Civnt5HphZIgPCByeW9rdXNodVwgOwor5LiA5a6kIDwgaXNzaGl0c3VcIDsKK+WkquiFvyA8IGZ1dG9tb21vXCA7CivlsI/miYvlhYggPCBrb3Rlc2FraVwgOwor54Sh6ZmN5rC0IDwgbXVrb3VzdWlcIDsKK+aWree1tiA8IGRhbnpldHN1XCA7CivkuIDlrZAgPCBoaXRvcmlnb1wgOwor5aer5qeYIDwgaGltZXNhbWFcIDsKK+m8u+WRvOWQuCA8IGJpa29reXV1XCA7Civpm7vok4QgPCBkZW5jaGlrdVwgOwor6YeN6aiO5YW1IDwganV1a2loZWlcIDsKK+WPpOS7o+WPsiA8IGtvZGFpc2hpXCA7CivmnKvku6MgPCBtYXRzdWRhaVwgOwor6KiA6ZyKIDwga290b2RhbWFcIDsKK+S4oeWbvSA8IHJ5b3Vnb2t1XCA7CivkuLvlj5YgPCBzaHV1ZG9yaVwgOwor6Zuo6JuZIDwgYW1hZ2FlcnVcIDsKK+eGn+iqrSA8IGp1a3Vkb2t1XCA7CivnjonkvZMgPCBneW9rdXRhaVwgOwor54mn54mbIDwgYm9rdWd5dXVcIDsKK+WhvumVtyA8IGp1a3VjaG91XCA7CivnhrHooYAgPCBuZWtrZXRzdVwgOwor6IO96Iie5Y+wIDwgbm91YnV0YWlcIDsKK+eOieS7oyA8IGd5b2t1ZGFpXCA7Civpm4boqLsgPCBzaHV1Y2h1dVwgOwor56u26aas6aasIDwga2VpYmF1bWFcIDsKK+malOmAsSA8IGtha3VzaHV1XCA7CivlhY3np5/lnLAgPCBtZW5zb2NoaVwgOwor5pel55SoIDwgbmljaGl5b3VcIDsKK+abuOWPliA8IGtha2l0b3JpXCA7CivkuozmrKHnmoQgPCBuaWppdGVraVwgOwor5ryU5aWP6ICFIDwgZW5zb3VzaGFcIDsKK+S4u+WKmyA8IHNodXJ5b2t1XCA7CivlhbfkvZPmgKcgPCBndXRhaXNlaVwgOwor5pyI5YaFIDwgZ2V0c3VuYWlcIDsKK+S5nuS4kCA8IGtvdHN1Z2FpXCA7CivkuIPlpJUgPCB0YW5hYmF0YVwgOwor6Kyh54mpIDwgdXRhaW1vbm9cIDsKK+mgu+WwvyA8IGhpbicnbnlvdVwgOwor5aSp572wIDwgdGVuYmF0c3VcIDsKK+S4gOetiei7iiA8IGl0dG91c2hhXCA7CivpnaLnmb0gPCBvbW9zaGlyb1wgOwor5puy5ZCNIDwga3lva3VtZWlcIDsKK+e3j+i9hCA8IHNvdWthdHN1XCA7CivkuK3lj6QgPCBjaHV1YnVydVwgOwor5LiN5ZOB6KGMIDwgZnVoaW5rb3VcIDsKK+eLvOW6pyA8IG9va2FtaXphXCA7CivoqLzot6EgPCBzaG91c2VraVwgOwor54m556eR5YW1IDwgdG9ra2FoZWlcIDsKK+iEguiCquayuSA8IHNoaWJvdXl1XCA7Civlt6blpKfoh6MgPCBzYWRhaWppblwgOwor6YeR5a2X5aGUIDwga2luaml0b3VcIDsKK+WlrueZuiA8IGZ1bnBhdHN1XCA7Civpq5jph47lsbEgPCBrb3V5YXNhblwgOwor5aSn54aK5bqnIDwgb29ndW1hemFcIDsKK+aYjua7hSA8IG1laW1ldHN1XCA7Civpmbjph6MgPCBva2FkenVyaVwgOwor6KyA55WlIDwgYm91cnlha3VcIDsKK+S4gOWhqSA8IGhpdG9zaGlvXCA7CivpoqjkuIogPCBrYXpha2FtaVwgOwor5YaS6Zm65a62IDwgYm91a2Vua2FcIDsKK+WkluiCoSA8IHNvdG9tYXRhXCA7Civloanmv4PluqYgPCBlbicnbm91ZG9cIDsKK+e1tumjnyA8IHplc3Nob2t1XCA7Civmm7jliJ0gPCBrYWtpem9tZVwgOwor5pel5LmD5Li4IDwgaGlub21hcnVcIDsKK+iqpue/kiA8IHNob3VzaHV1XCA7CivniIbnrJEgPCBiYWt1c2hvdVwgOwor57+S5L2cIDwgc2h1dXNha3VcIDsKK+eJueazqCA8IHRva3VjaHV1XCA7CivmmqblraYgPCByZWtpZ2FrdVwgOwor5Li45YK3IDwgdGFtYWtpenVcIDsKK+S9leWHpui/hCA8IGRva29tYWRlXCA7Civov5HkvLzlgKQgPCBraW5qaWNoaVwgOwor6YCP56OB5oCnIDwgdG91amlzZWlcIDsKK+WlieelnSA8IGhvdXNodWt1XCA7Civkv53orbfpoJggPCBob2dvcnlvdVwgOwor5Lit5YWxIDwgY2h1dWt5b3VcIDsKK+eJuea0vuWToSA8IHRva3VoYWluXCA7CivkuKbliJcgPCBoZWlyZXRzdVwgOwor5LmF5LmFIDwgaGlzYWJpc2FcIDsKK+WUvua2suiFuiA8IGRhZWtpc2VuXCA7Civnt5HosYYgPCByeW9rdXRvdVwgOwor5aW954mpIDwga291YnV0c3VcIDsKK+S4i+mZouitsOWToSA8IGthaW5naWluXCA7Civluq3mnKjmiLggPCBuaXdha2lkb1wgOwor6Z2S55WzIDwgYW9kYXRhbWlcIDsKK+mbm+iPiiA8IGhpbmFnaWt1XCA7CivmmYLmmYIgPCB0b2tpZG9raVwgOwor5b6M5o+06ICFIDwga291ZW5zaGFcIDsKK+m7hOmJhOmJsSA8IG91dGVra291XCA7CivlpLHnrJEgPCBzaGlzc2hvdVwgOwor5pWX6ImyIDwgaGFpc2hva3VcIDsKK+mbquiGmiA8IHl1a2loYWRhXCA7CivmmpflrqQgPCBhbnNoaXRzdVwgOwor5Y+k5Luj5Lq6IDwga29kYWlqaW5cIDsKK+S6i+WLmeacjSA8IGppbXVmdWt1XCA7CivlsI/puqbnsokgPCBrb211Z2lrb1wgOwor5LiL5ZGzIDwgc2hpdGFhamlcIDsKK+S4jea6tuaApyA8IGZ1eW91c2VpXCA7CivntZDpq6ogPCBrZXBwYXRzdVwgOwor6aGn5ZWP5ZujIDwga29tb25kYW5cIDsKK+aYvOaZgiA8IGhpcnVkb2tpXCA7Civkv53mnInogIUgPCBob3l1dXNoYVwgOwor6YG/55eF6ZmiIDwgaGlieW91aW5cIDsKK+WJjeaZr+awlyA8IG1hZWdlaWtpXCA7CivkuLjkuosgPCBtYXJ1Z290b1wgOwor6Zu75rCX5qSF5a2QIDwgZGVua2lpc3VcIDsKK+WkluS6pOWToSA8IGdhaWtvdWluXCA7CivmlofnrrEgPCBmdW1pYmFrb1wgOwor5aSn562SIDwgb29kenV0c3VcIDsKK+S4uOS4uCA8IG1hcnVtYXJ1XCA7CivpmLLpm6ogPCBib3VzZXRzdVwgOwor6YqF55u45aC0IDwgZG91c291YmFcIDsKK+ios+iqrSA8IHlha3Vkb2t1XCA7CivkuIPlkbMgPCBzaGljaGltaVwgOwor5pa555WlIDwgaG91cnlha3VcIDsKK+S4uOS4gCA8IG1hcnVpY2hpXCA7CivkuK3kvY4gPCBuYWthYmlrdVwgOwor5aeL5pyrIDwgc2hpbWF0c3VcIDsKK+Wkp+erpSA8IG9vd2FyYXdhXCA7Civlgr7mlpzluqYgPCBrZWlzaGFkb1wgOwor6auY5bqm6KiIIDwga291ZG9rZWlcIDsKK+mdkueOiSA8IHNlaWd5b2t1XCA7Civov5HmnKrmnaUgPCBraW5taXJhaVwgOwor5o2V6a+o6Ii5IDwgaG9nZWlzZW5cIDsKK+WkseelniA8IHNoaXNzaGluXCA7Civpm4bokL0gPCBzaHV1cmFrdVwgOwor6Z2Z54mpIDwgc2VpYnV0c3VcIDsKK+WKoOWus+iAhSA8IGthZ2Fpc2hhXCA7CivmlbDnj6DnjokgPCBqdXp1ZGFtYVwgOwor5LiA5ZCRIDwgaGl0YXN1cmFcIDsKK+eLrOWtpiA8IGRva3VnYWt1XCA7CivmmKjmnJ0gPCBzYWt1Y2hvdVwgOwor5LiA5Y+iIDwgaGl0b211cmFcIDsKK+absuS6iyA8IGt1c2Vnb3RvXCA7CivmiYvnvr3lhYggPCB0ZWJhc2FraVwgOwor6KOc5Yqp57+8IDwgaG9qb3lva3VcIDsKK+S4reS4rSA8IG5ha2FuYWthXCA7CivmhYjmgrLlv4MgPCBqaWhpc2hpblwgOwor6aGe5YilIDwgcnVpYmV0c3VcIDsKK+WkluiyqOWCtSA8IGdhaWthc2FpXCA7CivnuK7nt6wgPCBjaGlyaW1lblwgOwor5oOF5aCx5YyWIDwgam91aG91a2FcIDsKK+aYqOaagSA8IHNha3VneW91XCA7Civnt4/kuojnrpcgPCBzb3V5b3NhblwgOwor55yf5aSc5LitIDwgbWF5b25ha2FcIDsKK+e1kOmhmCA8IGtlY2hpZ2FuXCA7CivmmKjmmKUgPCBzYWt1c2h1blwgOwor5LiH5YilIDwgYmFuYmV0c3VcIDsKK+mggeWyqSA8IGtldHN1Z2FuXCA7CivkuKbkuKYgPCBuYW1pbmFtaVwgOwor57im57ieIDwgdGF0ZWppbWFcIDsKK+iml+mtlCA8IG5vem9raW1hXCA7CivlopfoqK0gPCB6b3VzZXRzdVwgOwor5LiA5YmyIDwgaWNoaXdhcmlcIDsKK+WkleeriyA8IHl1dWRhY2hpXCA7CivloanovpsgPCBzaGlva2FyYVwgOwor5pen5rWBIDwga3l1dXJ5dXVcIDsKK+S4i+aEj+itmCA8IGthaXNoaWtpXCA7Civku6PnqL3lj6QgPCBkYWlnZWlrb1wgOwor5rC45L2P5qipIDwgZWlqdXVrZW5cIDsKK+S/neacieexsyA8IGhveXV1bWFpXCA7Civoh6rlm73oqp4gPCBqaWtva3Vnb1wgOwor5Y+N5a++6KqeIDwgaGFudGFpZ29cIDsKK+WkieeVsOS9kyA8IGhlbicnaXRhaVwgOwor57W56YedIDwga2ludWJhcmlcIDsKK+eNhOS4rSA8IGdva3VjaHV1XCA7CivliKnlt7HnmoQgPCByaWtvdGVraVwgOwor5LiA5YWIIDwgaGl0b21henVcIDsKK+W7uuWFt+WxiyA8IHRhdGVndXlhXCA7CivmmIfmoLwgPCBzaG91a2FrdVwgOwor6Ziy5a+S5YW3IDwgYm91a2FuZ3VcIDsKK+Wls+WtpuagoSA8IGpvZ2Fra291XCA7Civkv53lrojmgKcgPCBob3NodXNlaVwgOwor57mt546JIDwgbWF5dWRhbWFcIDsKK+aYjuaciCA8IG1laWdldHN1XCA7Civpnq3mkrsgPCBiZW50YXRzdVwgOwor6Zuo57KSIDwgYW1ldHN1YnVcIDsKK+WlveaZr+awlyA8IGtvdWtlaWtpXCA7CivlubPlkozntq3mjIEgPCBoZWl3YWlqaVwgOwor5Lqk5LuY6ICFIDwga291ZnVzaGFcIDsKK+WPr+WkieaVsCA8IGthaGVuc3V1XCA7CivoirHmloflrZcgPCBoYW5hbW9qaVwgOwor5pq05YqbIDwgYm91cnlva3VcIDsKK+mdouS8muaXpSA8IG1lbmthaWJpXCA7CivoprPplrIgPCBrYW4nJ2V0c3VcIDsKK+eFmeiNieWxiyA8IHRhYmFrb3lhXCA7Civnt5Hol7sgPCByeW9rdXNvdVwgOwor5aOu57W2IDwgc291emV0c3VcIDsKK+mbqOaooeanmCA8IGFtZW1veW91XCA7CivmlZnnsY0gPCBreW91c2VraVwgOwor5piO5pilIDwgbXlvdXNodW5cIDsKK+S4h+S7oyA8IHlvcm96dXlvXCA7CivmlK/ohIggPCBzaGlteWFrdVwgOwor5o+657GD5pyfIDwgeW91cmFua2lcIDsKK+eqgeegtOWPoyA8IHRvcHBha291XCA7Civni6zlm70gPCBkb2t1a29rdVwgOwor6L+R5Luj5YyWIDwga2luZGFpa2FcIDsKK+eCueeBq+ezuyA8IHRlbmtha2VpXCA7CivkuozlubTnlJ8gPCBuaW5lbnNlaVwgOwor5pif5rCX5L2TIDwgc2Vpa2l0YWlcIDsKK+S4jeetieWPtyA8IGZ1ZG91Z291XCA7CivmnInngrrou6LlpIkgPCB1aXRlbnBlblwgOwor5LqU6L665b2iIDwgZ29oZW5rZWlcIDsKK+S6jOi8qui7iiA8IG5pcmluc2hhXCA7CivkuInkuIsgPCBzYW5zaGl0YVwgOwor5aSn55WlIDwgdGFpcnlha3VcIDsKK+eUqOeuquespSA8IHlvdWRhbnN1XCA7CivlpbPmsJcgPCBvbicnbmFra2VcIDsKK+WhqeixhiA8IHNoaW9tYW1lXCA7CivlhrfolLXluqsgPCByZWl6b3Vrb1wgOwor5LiH5LiAIDwgbWFuJydpY2hpXCA7Civpm6rnqbogPCB5dWtpem9yYVwgOwor6KyA5q66IDwgYm91c2F0c3VcIDsKK+e1hOmVtyA8IGt1bWljaG91XCA7CivoqIDoqqwgPCBnZW5zZXRzdVwgOwor5LiN5omA5a2YIDwgZnVzaG96b25cIDsKK+inkumAmiA8IGtha3V0c3V1XCA7CivmipXlhYnlmaggPCB0b3Vrb3VraVwgOwor5rWc6IyE5a2QIDwgaGFtYW5hc3VcIDsKK+WPpOabuOWxlSA8IGtvc2hvdGVuXCA7CivkuozljYHku6MgPCBuaWp1dWRhaVwgOwor5LiA5LiAIDwgaXRzdWl0c3VcIDsKK+e1sei9hCA8IHRvdWthdHN1XCA7CivorKHmm7IgPCB5b3VreW9rdVwgOwor57SF6bGSIDwgYmVuaW1hc3VcIDsKK+W4guihl+WbsyA8IHNoaWdhaXp1XCA7Civni6zllLEgPCBkb2t1c2hvdVwgOwor5qi55p6d54q2IDwganVzaGlqb3VcIDsKK+e3keiMtiA8IHJ5b2t1Y2hhXCA7Civluo/nm6TmiKYgPCBqb2JhbnNlblwgOwor5pi85bitIDwgaGlydXNla2lcIDsKK+eBq+aIkOWyqSA8IGthc2VpZ2FuXCA7CivntYTlkIjlk6EgPCBrdW1pYWlpblwgOwor5Lqc6ISx6Ie8IDwgYWRha2t5dXVcIDsKK+e0hemurSA8IGJlbml6YWtlXCA7CivntI3pqqggPCBub3Vrb3RzdVwgOwor6ayx6YeR6ImyIDwgdWtvbicnaXJvXCA7Civml6fmoKogPCBreXV1a2FidVwgOwor5aer5a6uIDwgaGltZW1peWFcIDsKK+WinOiQvSA8IHRzdWlyYWt1XCA7CivprLzmrabogIUgPCBvbmltdXNoYVwgOwor5pac5oqV5b2xIDwgc2hhdG91ZWlcIDsKK+aVsOeZviA8IHN1dWh5YWt1XCA7Civpm4bntIQgPCBzaHV1eWFrdVwgOwor6KqY55m6IDwgeXV1aGF0c3VcIDsKK+a7keepuuapnyA8IGtha2t1dWtpXCA7CivniYfmoJcgPCBrYXRha3VyaVwgOwor5pes5pyIIDwganVuZ2V0c3VcIDsKK+i7vemojuWFtSA8IGtlaWtpaGVpXCA7CivkuozlhYPoq5YgPCBuaWdlbnJvblwgOwor5omL5paZ55CGIDwgdGVyeW91cmlcIDsKK+WNmOWIqeazlSA8IHRhbnJpaG91XCA7CivlvqHnpZ7ovL8gPCBvbWlrb3NoaVwgOwor5YWI6Yut5YyWIDwgc2VuJydlaWthXCA7Civpm7vnlaUgPCBkZW5yeWFrdVwgOwor5pKS5biD5YmkIDwgc2FwcHV6YWlcIDsKK+aWh+eJqSA8IGJ1bmJ1dHN1XCA7CivlkYnmnI3lsYsgPCBnb2Z1a3V5YVwgOwor5pS556+JIDwga2FpY2hpa3VcIDsKK+ippuetiyA8IHRhbWVzdWppXCA7CivoqabnrYYgPCBzaGloaXRzdVwgOwor5pen5pqmIDwga3l1dXJla2lcIDsKK+aXrOaXpSA8IGp1bmppdHN1XCA7Civpm5HnqI4gPCB6YXRzdXplaVwgOwor6Kqt54mpIDwgeW9taW1vbm9cIDsKK+a6tuino+eCiSA8IHlvdWthaXJvXCA7Civpm6rnm7IgPCBzZXRzdW1vdVwgOwor5Y+v5aSJ5oCnIDwga2FoZW5zZWlcIDsKK+itpuWvnyA8IGtlaXNhdHN1XCA7CivlubTpvaLlt64gPCBuZW5yZWlzYVwgOwor6Kej6KqsIDwga2Fpc2V0c3VcIDsKK+e3qee3qSA8IHl1cnV5dXJ1XCA7Civml6nml6kgPCBoYXlhYmF5YVwgOwor6KeS6LKdIDwgdHN1bm9nYWlcIDsKK+WIgOWcreWutiA8IHRvdWtlaWthXCA7CivmkYLpo58gPCBzZXNzaG9rdVwgOwor6KW/6ZmjIDwgbmlzaGlqaW5cIDsKK+mzs+S7meiKsSA8IGhvdXNlbmthXCA7Civop6bop5IgPCBzaG9ra2FrdVwgOwor5aOB57SZIDwga2FiZWdhbWlcIDsKK+WwjuazoueuoSA8IGRvdWhha2FuXCA7CivljZjmr5TkvosgPCB0YW5waXJlaVwgOwor5o2V6a+o56CyIDwgaG9nZWlob3VcIDsKK+e0kOmdqSA8IGhpbW9rYXdhXCA7Civnm7TotrPooosgPCBqaWthdGFiaVwgOwor5pen5pWZIDwga3l1dWt5b3VcIDsKK+mbhuepjSA8IHNodXVzZWtpXCA7Civln4vpqqggPCBtYWlrb3RzdVwgOwor5peX5pysIDwgaGF0YW1vdG9cIDsKK+WklueJqSA8IGdhaWJ1dHN1XCA7CivmgqrlpKrpg44gPCBha3V0YXJvdVwgOwor5pyJ55CG5pWwIDwgeXV1cmlzdXVcIDsKK+mDqOWIhuWTgSA8IGJ1YnVuaGluXCA7Civlj6/nh4PmgKcgPCBrYW5lbnNlaVwgOwor5LiN5ZaE5oSfIDwgZnV6ZW5rYW5cIDsKK+e0mumVtyA8IGt5dXVjaG91XCA7CivmlqzmrrogPCB6YW5zYXRzdVwgOwor5rSX6Z2i5omAIDwgc2VubWVuam9cIDsKK+eJqeaDhSA8IGJ1dHN1am91XCA7Civpm4bnpaggPCBzaHV1aHlvdVwgOwor6Zuo55S3IDwgYW1lb3Rva29cIDsKK+eIhuayiCA8IGJha3VjaGluXCA7CivlpJzng48gPCB5b2dhcmFzdVwgOwor6YCB5rK5566hIDwgc291eXVrYW5cIDsKK+agvOWtkOaIuCA8IGtvdXNoaWRvXCA7CivlhbfkvZPkvosgPCBndXRhaXJlaVwgOwor5aer5Z6jIDwgaGltZWdha2lcIDsKK+aUr+aMgeadrSA8IHNoaWppa291XCA7CivnhornrLkgPCBrdW1hemFzYVwgOwor54ax55m6IDwgbmVwcGF0c3VcIDsKK+eEoemZkOWkpyA8IG11Z2VuZGFpXCA7CivpoIbliJcgPCBqdW5yZXRzdVwgOwor5aKo57mpIDwgc3VtaW5hd2FcIDsKK+eyvuexs+aJgCA8IHNlaW1haWpvXCA7CivorJnmipEgPCBrZW4nJ3lva3VcIDsKK+aSruimgSA8IHNhdHN1eW91XCA7CivlpInniakgPCBoZW5idXRzdVwgOwor57Wx6Kqe6KuWIDwgdG91Z29yb25cIDsKK+acqumWi+WiviA8IG1pa2Fpa29uXCA7CivmmKXlrrUgPCBzaHVuc2hvdVwgOwor5L2c5qWt6LK7IDwgc2FneW91aGlcIDsKK+mXh+mbsiA8IHlhbWlrdW1vXCA7CivlpKfpmKrlupwgPCBvb3Nha2FmdVwgOwor54yK576O5riTIDwgZ2VpYmlrZWlcIDsKK+aJk+aSg+eOiyA8IGRhZ2VraW91XCA7CivntprokL0gPCB6b2t1cmFrdVwgOwor6Zuq546JIDwgeXVraWRhbWFcIDsKK+aRmOmMsiA8IHRla2lyb2t1XCA7CivluoPokYnmqLkgPCBrb3V5b3VqdVwgOwor57eK57iuIDwga2luc2h1a3VcIDsKK+ippuedgCA8IHNoaWNoYWt1XCA7CivojYnlibXmnJ8gPCBzb3Vzb3VraVwgOwor5L6N6KGb6ZW3IDwgamllaWNob3VcIDsKK+S6jOmAsuacqCA8IG5pc2hpbmdpXCA7CivlpJbmv6AgPCBzb3RvYm9yaVwgOwor5aa+5a6FIDwgc2hvdXRha3VcIDsKK+mhleWcqOWMliA8IGtlbnphaWthXCA7Civlho3oqablkIggPCBzYWlzaGlhaVwgOwor5Lyd6Z+z5ZmoIDwgZGVuJydvbmtpXCA7Civnvqnli5nnmoQgPCBnaW11dGVraVwgOwor6Ly45Y21566hIDwgeXVyYW5rYW5cIDsKK+S9juWIqemHkSA8IHRlaXJpa2luXCA7CivmiKbliKnlk4EgPCBzZW5yaWhpblwgOwor5paH6Kqe5L2TIDwgYnVuZ290YWlcIDsKK+S5vuaAp+ayuSA8IGthbnNlaXl1XCA7Civop5LoopYgPCBrYWt1c29kZVwgOwor5pOC57KJ5pyoIDwgc3VyaWtvZ2lcIDsKK+mXh+mXhyA8IHlhbWl5YW1pXCA7CivmjIflsI7lk6EgPCBzaGlkb3VpblwgOwor5pyq6ZaL5ZywIDwgbWlrYWljaGlcIDsKK+enmOabuOWumCA8IGhpc2hva2FuXCA7CivlpJrmub8gPCB0YXNoaXRzdVwgOwor6Z2i5o6lIDwgbWVuc2V0c3VcIDsKK+mbkeeUqCA8IHphdHN1eW91XCA7CivmlrDmoKogPCBzaGlua2FidVwgOwor5pG66LazIDwgc3VyaWFzaGlcIDsKK+atpuWutueJqSA8IGJ1a2Vtb25vXCA7CivmlbTnkIbliLggPCBzZWlyaWtlblwgOwor6IKy6Zub5ZmoIDwgaWt1c3V1a2lcIDsKK+Wcp+aQvuapnyA8IGFzc2FrdWtpXCA7Civml4Hml4EgPCBrYXRhZ2F0YVwgOwor5paw5p+EIDwgc2hpbmdhcmFcIDsKK+aUv+eVpSA8IHNlaXJ5YWt1XCA7CivopovpgJogPCBtaXRvb3NoaVwgOwor6Zuj54mpIDwgbmFuYnV0c3VcIDsKK+S6jOWIhuazlSA8IG5pYnVuaG91XCA7Civmt7fmiJDoqp4gPCBrb25zZWlnb1wgOwor54+I55Cy6IuRIDwga291aGlpZW5cIDsKK+S6jOmDqOS9nCA8IG5pYnVzYWt1XCA7Civnt4/kvJrlsYsgPCBzb3VrYWl5YVwgOwor6KaL6L+UIDwgbWlrYWVzaGlcIDsKK+S7leaJi+aIpiA8IHNoaXRlc2VuXCA7Civlp6vlkJsgPCBoaW1lZ2ltaVwgOwor5pS755WlIDwga291cnlha3VcIDsKK+e1kOirliA8IGtldHN1cm9uXCA7CivlpY/mm7IgPCBzb3VreW9rdVwgOwor5aW95aW954i6IDwga291a291eWFcIDsKK+eojuWLmee9siA8IHplaW11c2hvXCA7Civosqnlo7LmqZ8gPCBoYW5iYWlraVwgOwor6Zy95pyIIDwgc2VpZ2V0c3VcIDsKK+epuuawl+WtlCA8IGt1dWtpa291XCA7CivnlrLlirTmhJ8gPCBoaXJvdWthblwgOwor5pS+5rC06LevIDwgaG91c3Vpcm9cIDsKK+aWsOaapiA8IHNoaW5yZWtpXCA7CivnhLzogokgPCB5YWtpbmlrdVwgOwor57WQ6KiAIDwga2V0c3VnZW5cIDsKK+iovOelqCA8IHNob3VoeW91XCA7Civpmo/nrYYgPCB6dWloaXRzdVwgOwor5aSW5rOVIDwgc290b25vcmlcIDsKK+aWsOaYpSA8IHNoaW5zaHVuXCA7CivkvJrorbDmiYAgPCBrYWlnaXNob1wgOwor6Zm457aaIDwgcmlrdXpva3VcIDsKK+eGseeGsSA8IGF0c3VhdHN1XCA7Civlopfnr4kgPCB6b3VjaGlrdVwgOwor5b2i5a656KqeIDwga2VpeW91Z29cIDsKK+S4gOWbnuaIpiA8IGlra2Fpc2VuXCA7CivnuK7muJsgPCBzaHVrdWdlblwgOwor57mB5q6WIDwgaGFuc2hva3VcIDsKK+WkqealtSA8IHRlbmt5b2t1XCA7CivnlpHllY/oqZ4gPCBnaW1vbnNoaVwgOwor5pen5bmVIDwga3l1dWJha3VcIDsKK+e1ueiOoiA8IGtpbnVzYXlhXCA7Civoi6blirTkurogPCBrdXJvdW5pblwgOwor5aSx5qC8IDwgc2hpa2tha3VcIDsKK+iBlueBq+WPsCA8IHNlaWthZGFpXCA7Civml6XluLggPCBuaWNoaWpvdVwgOwor5rC05L2N5qiZIDwgc3VpaWh5b3VcIDsKK+aCsuims+irliA8IGhpa2Fucm9uXCA7CivlpoToqp7miJIgPCBtb3Vnb2thaVwgOwor6ZuR54S2IDwgemF0c3V6ZW5cIDsKK+awuOWwj+S9nCA8IGVpa29zYWt1XCA7Civngq3ntKDpi7wgPCB0YW5zb2tvdVwgOwor57mK57at5p2fIDwgc2VuaXNva3VcIDsKK+ino+aUvuWMuiA8IGthaWhvdWt1XCA7Civkv53lrojlhZogPCBob3NodXRvdVwgOwor5pS+54axIDwgaG91bmV0c3VcIDsKK+iqmOauuiA8IHl1dXNhdHN1XCA7CivntKDos6ogPCBzb3NoaXRzdVwgOwor57SF5LiA54K5IDwga291aXR0ZW5cIDsKK+WegumrqiA8IHRhcmVnYW1pXCA7Civpm4HniKogPCBnYW5kenVtZVwgOwor57im5rOiIDwgdGF0ZW5hbWlcIDsKK+iouueZgiA8IHNoaW5yeW91XCA7CivntprntpogPCB6b2t1em9rdVwgOwor54iG5pKDIDwgYmFrdWdla2lcIDsKK+WutuW6reeUqCA8IGthdGVpeW91XCA7CivopovorZggPCBrZW5zaGlraVwgOwor6Jma56m66JS1IDwga29rdXV6b3VcIDsKK+iqsOafkCA8IGRhcmVzb3JlXCA7Civml4vlvosgPCBzZW5yaXRzdVwgOwor5Lya6KiI6KqyIDwga2Fpa2Vpa2FcIDsKK+eGsea6kCA8IG5ldHN1Z2VuXCA7Civli6Tli5nogIUgPCBraW5tdXNoYVwgOwor5aSc5qGcIDwgeW96YWt1cmFcIDsKK+aWh+acqyA8IGJ1bm1hdHN1XCA7Civot53pm6LmhJ8gPCBreW9yaWthblwgOwor5pen5a6FIDwga3l1dXRha3VcIDsKK+iqv+aVmSA8IGNob3VreW91XCA7CivmmYLlgbYgPCB0b2tpdGFtYVwgOwor5aaC5a6fIDwgbnlvaml0c3VcIDsKK+aWjuaXpSA8IHNhaWppdHN1XCA7CivnhrHmtpkgPCBuZXRzdXJ1aVwgOwor6Zu75qW1IDwgZGVua3lva3VcIDsKK+WhteeusSA8IGdvbWliYWtvXCA7CivmlY/mtLsgPCBiaW5rYXRzdVwgOwor6ZaL6ZeiIDwga2FpYnlha3VcIDsKK+eFpeeZuiA8IGthbnBhdHN1XCA7CivnnIvorbfms5UgPCBrYW5nb2hvdVwgOwor5aSn5pelIDwgZGFpbmljaGlcIDsKK+WCrOS6i+WgtCA8IHNhaWppam91XCA7CivprLzlhbXpmoogPCBraWhlaXRhaVwgOwor5aWz5a2Q5aSnIDwgam9zaGlkYWlcIDsKK+mfk+S6uiA8IGthcmFiaXRvXCA7CivlpJbmnqAgPCBzb3Rvd2FrdVwgOwor5ZSv5oiR6KuWIDwgeXVpZ2Fyb25cIDsKK+acquijveWTgSA8IG1pc2VpaGluXCA7Civmlbfmnb8gPCBzaGlraWl0YVwgOwor6Kqs5piOIDwgc2V0c3VtZWlcIDsKK+eEoee1seWItiA8IG11dG91c2VpXCA7CivnuKbmqKogPCB0YXRleW9rb1wgOwor6KaB6KijIDwgeW91a2V0c3VcIDsKK+Wil+eZuiA8IHpvdWhhdHN1XCA7CivpgKDoiLnmiYAgPCB6b3VzZW5qb1wgOwor6Lqr5pSv5bqmIDwgbWlqaXRha3VcIDsKK+aYjuWTsiA8IG1laXRldHN1XCA7CivlpJzmmLwgPCB5b3J1aGlydVwgOwor6YeR5pys5L2NIDwga2luaG9uJydpXCA7CivlpJXmnIggPCB5dXVkenVraVwgOwor5aSa6Z2i5oCnIDwgdGFtZW5zZWlcIDsKK+Wkp+Wei+apnyA8IG9vZ2F0YWtpXCA7CivmlrnlvI8gPCBob3VzaGlraVwgOwor5pyq6ZaL5Lq6IDwgbWlrYWlqaW5cIDsKK+mWgOmWpSA8IG1vbmJhdHN1XCA7Civol4HlsYvmoLkgPCB3YXJheWFuZVwgOwor5pyI5LiW55WMIDwgZ2Vzc2VrYWlcIDsKK+W+l+aEj+mhlCA8IHRva3VpZ2FvXCA7CivmiYvplpPpmpkgPCB0ZW1haGltYVwgOwor5pS/5rK754qvIDwgc2VpamloYW5cIDsKK+aYpeWFiCA8IGhhcnVzYWtpXCA7Civlp4vlgKQgPCBoYWppbWVuZVwgOwor5rSX6Z2i5ZmoIDwgc2VubWVua2lcIDsKK+aWsOW9oiA8IHNoaW5nYXRhXCA7CivkurrmloflrZcgPCBoaXRvbW9qaVwgOwor5qih6YCg5ZOBIDwgbW96b3VoaW5cIDsKK+mZuOebuCA8IHJpa3VzaG91XCA7CivlkbzlkLjlmaggPCBrb2t5dXVraVwgOwor57W557a/IDwga2ludXdhdGFcIDsKK+Wcn+WcsOmRkSA8IHRvY2hpa2FuXCA7CivniYblo4EgPCBzaG91aGVraVwgOwor5aOK5ruFIDwga2FpbWV0c3VcIDsKK+mam+eJqSA8IGtpd2Ftb25vXCA7CivmsJfpgIHnrqEgPCBraXNvdWthblwgOwor5L2O6YeR5YipIDwgdGVpa2lucmlcIDsKK+WkreaKmCA8IHlvdXNldHN1XCA7Civoi7HlsI/mloflrZcgPCBlaWtvbW9qaVwgOwor5pW15pa5IDwgdGVraWdhdGFcIDsKK+mVt+mVtyA8IG5hZ2FuYWdhXCA7CivluL3lrZDlsYsgPCBib3VzaGl5YVwgOwor5b6h5oiQ5YqfIDwgZ29zZWlrb3VcIDsKK+ePiueRmua1tyA8IHNhbmdva2FpXCA7CivntIToq74gPCB5YWt1ZGFrdVwgOwor5pWw5pelIDwgc3V1aml0c3VcIDsKK+abs+WFieW8viA8IGVpa291ZGFuXCA7CivljYPph4znnLwgPCBzZW5yaWdhblwgOwor6Ziy57iuIDwgYm91c2h1a3VcIDsKK+iQveS4i+WCmCA8IHJha2thc2FuXCA7Civmk4Hnq4sgPCB5b3VyaXRzdVwgOwor5rih6Iiq6ICFIDwgdG9rb3VzaGFcIDsKK+aVsOaVsCA8IGthenVrYXp1XCA7CivlpKfmiYAgPCBvb2Rva29yb1wgOwor5Zyw6bygIDwgamluZXp1bWlcIDsKK+S4i+aJi+S6uiA8IGdlc2h1bmluXCA7Civlh6blpbPmnpcgPCBzaG9qb3JpblwgOwor57SU6KGAIDwganVua2V0c3VcIDsKK+S6i+alremDqCA8IGppZ3lvdWJ1XCA7Civlr4zlsbHmiL8gPCBmdXphbmJvdVwgOwor57KJ6aO+IDwgZnVuc2hva3VcIDsKK+e4puabuCA8IHRhdGVnYWtpXCA7Civmk6bnlrUgPCBzdXJpa2l6dVwgOwor5aGa56m0IDwgdHN1a2FhbmFcIDsKK+aOpeW+heiyuyA8IHNldHRhaWhpXCA7CivnuYrntq3mgKcgPCBzZW4nJ2lzZWlcIDsKK+aJi+ipseazlSA8IHNodXdhaG91XCA7CivkvZXlh6blhbblh6YgPCBkb2tvc29rb1wgOwor5L+d6aSK5ZywIDwgaG95b3VjaGlcIDsKK+eFp+eEvCA8IHRlcml5YWtpXCA7CivliKnlt7Hlv4MgPCByaWtvc2hpblwgOwor54K554Gr5qCTIDwgdGVua2FzZW5cIDsKK+e1tuethiA8IHplcHBpdHN1XCA7Civpm6Pmm7IgPCBuYW5reW9rdVwgOwor6KiI55WlIDwga2Vpcnlha3VcIDsKK+mOlOmJseeCiSA8IHlvdWtvdXJvXCA7Civlj6/mj5vnvqQgPCBrYWthbmd1blwgOwor5Lya6K2w5aC0IDwga2FpZ2lqb3VcIDsKK+S6uumdnuS6uiA8IG5pbnBpbmluXCA7CivopovokL0gPCBtaW90b3NoaVwgOwor54K46JasIDwgc2FrdXlha3VcIDsKK+iKseeyieeuoSA8IGthZnVua2FuXCA7Civln4voqK0gPCBtYWlzZXRzdVwgOwor6YGO5r+A5rS+IDwga2FnZWtpaGFcIDsKK+aOpemqqCA8IHNla2tvdHN1XCA7Civpmb3niakgPCB5b3VidXRzdVwgOwor6KuW5a6iIDwgcm9ua3lha3VcIDsKK+inkuesmyA8IHRzdW5vYnVlXCA7CivnhrHmnJsgPCBuZXRzdWJvdVwgOwor5rq26Kej5bqmIDwgeW91a2FpZG9cIDsKK+mWsuiqrSA8IGV0c3Vkb2t1XCA7Civlj6Xoqq3ngrkgPCBrdXRvdXRlblwgOwor5o2c5p+76ZmjIDwgc291c2FqaW5cIDsKK+iqsOW9vCA8IHRhcmVrYXJlXCA7CivnsbPpo58gPCBiZWlzaG9rdVwgOwor57Si6I6rIDwgc2FrdWJha3VcIDsKK+WWtuWIqeeahCA8IGVpcml0ZWtpXCA7Civooqvngb3ogIUgPCBoaXNhaXNoYVwgOwor5LiN5b6T6aCGIDwgZnVqdXVqdW5cIDsKK+WPjeWwhOeCiSA8IGhhbnNoYXJvXCA7Civpm5Hmm7IgPCB6YWtreW9rdVwgOwor5L2d5YOC55eFIDwga3VydWJ5b3VcIDsKK+WkquW3uyA8IGZ1dG9tYWtpXCA7CivmlrDlprsgPCBuaWlkenVtYVwgOwor6YO95Lya5Lq6IDwgdG9rYWlqaW5cIDsKK+e1kOe0riA8IGtlc3NhdHN1XCA7CivlkarnpoHpgZMgPCBqdWtvbmRvdVwgOwor5Y+k54mI5pysIDwga29oYW5ib25cIDsKK+a4rOWAmeaJgCA8IHNva2tvdWpvXCA7Civml6fliocgPCBreXV1Z2VraVwgOwor5rS+6YGj6ZqKIDwgaGFrZW50YWlcIDsKK+aRmOiKryA8IHRla2lzaGluXCA7CivmrZPov47lrrQgPCBrYW5nZWllblwgOwor54mp5LqLIDwgbW9ub2dvdG9cIDsKK+aIkOWKn+ijoSA8IHNlaWtvdXJpXCA7CivoqLPms6ggPCB5YWt1Y2h1dVwgOwor5pS55pytIDwga2Fpc2F0c3VcIDsKK+WutuW6reashCA8IGthdGVpcmFuXCA7Civnha7msrggPCBzaGFmdXRzdVwgOwor5aSn5bWQIDwgb29hcmFzaGlcIDsKK+WkmuWkieaVsCA8IHRhaGVuc3V1XCA7CivnlLfmgKfnvo4gPCBkYW5zZWliaVwgOwor6ZuR5paHIDwgemF0c3VidW5cIDsKK+mrmOapn+iDvSA8IGtvdWtpbm91XCA7CivntJnoirEgPCBrYW1pYmFuYVwgOwor5Lq66ZaT6IumIDwgbmluZ2Vua3VcIDsKK+eEvOeJqSA8IHlha2ltb25vXCA7CivntZDnr4AgPCBrZXNzZXRzdVwgOwor6ZW36Lu4IDwgY2hvdWppa3VcIDsKK+WkluW6rSA8IHNvdG9uaXdhXCA7CivkuInlkbPnt5ogPCBzaGFtaXNlblwgOwor57WE57SQIDwga3VtaWhpbW9cIDsKK+eykumKgCA8IHRzdWJ1Z2luXCA7CivplovosYEgPCBrYWlrYXRzdVwgOwor57iB5pelIDwgZW4nJ25pY2hpXCA7CivlkIznqIvluqYgPCBkb3V0ZWlkb1wgOwor5aSc5bWQIDwgeW9hcmFzaGlcIDsKK+aVsOW8jyA8IHN1dXNoaWtpXCA7Civlpb3loanoj4wgPCBrb3VlbmtpblwgOwor6YCB5rCX566hIDwgc291a2lrYW5cIDsKK+eKoOeJsuiAhSA8IGdpc2Vpc2hhXCA7CivoirHntIvmnb8gPCBrYW1vbmJhblwgOwor6Zu75a2Q5YyWIDwgZGVuc2hpa2FcIDsKK+eJm+S5syA8IGd5dXVueXV1XCA7CivlsL3mnKrmnaUgPCBqaW5taXJhaVwgOwor5Y+l6Kqt5rOVIDwga3V0b3Vob3VcIDsKK+WlveWkqeawlyA8IGtvdXRlbmtpXCA7CivplbfotrMgPCBjaG91c29rdVwgOwor5aGp54mpIDwgc2hpb21vbm9cIDsKK+eJh+WBtCA8IGthdGFnYXdhXCA7CivmtYTljJbmp70gPCBqb3VrYXNvdVwgOwor6ZuA5paRIDwgc29iYWthc3VcIDsKK+acieWjsOmfsyA8IHl1dXNlaW9uXCA7Civpm7LlvaIgPCBrdW1vZ2F0YVwgOwor57WM56m0IDwga2Vpa2V0c3VcIDsKK+WPjeS9nOeUqCA8IGhhbnNheW91XCA7Civmkp7nnYAgPCBkb3VjaGFrdVwgOwor5YWo6Ieq5YuVIDwgemVuamlkb3VcIDsKK+WPjeWvvua0viA8IGhhbnRhaWhhXCA7Civml6fkvZwgPCBreXV1c2FrdVwgOwor57SF6IqxIDwgYmVuaWJhbmFcIDsKK+WHpuWls+aApyA8IHNob2pvc2VpXCA7CivmiYvplpPos4MgPCB0ZW1hY2hpblwgOwor6Zmw5rm/IDwgaW5zaGl0c3VcIDsKK+e3qOabsiA8IGhlbmt5b2t1XCA7CivntYTnq4sgPCBrdW1pdGF0ZVwgOwor57Sw57SwIDwgaG9zb2Jvc29cIDsKK+ippuaOmCA8IHNoaWt1dHN1XCA7CivloannhLwgPCBzaGlveWFraVwgOwor5aSW5bGAIDwgZ2Fpa3lva3VcIDsKK+Wil+auliA8IHpvdXNob2t1XCA7Civml6fkurogPCBmdXJ1Yml0b1wgOwor5LiA5Zue5YiGIDwgaWtrYWlidW5cIDsKK+e9ueeBveiAhSA8IHJpc2Fpc2hhXCA7CivoqLPmpa0gPCB5YWt1Z3lvdVwgOwor5o6S6ZuqIDwgaGFpc2V0c3VcIDsKK+eym+i7jSA8IHNodWt1Z3VuXCA7CivnhrHmhJ8gPCBuZXRzdWthblwgOwor5aSx5aKcIDwgc2hpdHRzdWlcIDsKK+WbvemzpSA8IGtva3VjaG91XCA7Civosq/ngq3miYAgPCBjaG90YW5qb1wgOwor6Ku45YWxIDwgbW9yb3RvbW9cIDsKK+acieS6uuWMliA8IHl1dWppbmthXCA7CivlpJblrqIgPCBnYWlreWFrdVwgOwor5Y2w6LGh5rS+IDwgaW5zaG91aGFcIDsKK+eGseaDhSA8IG5ldHN1am91XCA7CivlpJblrasgPCBzb3RvbWFnb1wgOwor57OW6JycIDwgdG91bWl0c3VcIDsKK+mbo+W9uSA8IG5hbicneWFrdVwgOwor5aGX54mpIDwgbnVyaW1vbm9cIDsKK+eJiOS4iyA8IGhhbnNoaXRhXCA7Civmp43pqI7lhbUgPCBzb3VraWhlaVwgOwor6Zmk5rm/IDwgam9zaGl0c3VcIDsKK+mAg+mBv+ihjCA8IHRvdWhpa291XCA7CivlhoXngavoiYcgPCBuYWlrYXRlaVwgOwor57Wx546HIDwgdG91c290c3VcIDsKK+aXheWFiCA8IHRhYmlzYWtpXCA7CivntLDnrYYgPCBzYWloaXRzdVwgOwor6Zuq5ba6IDwgc2V0c3VyZWlcIDsKK+e1ueeJqSA8IGtpbnVtb25vXCA7CivliKnmqKnlsYsgPCByaWtlbicneWFcIDsKK+ios+afhCA8IHdha2VnYXJhXCA7CivopZ/ohbAgPCBlcmlrb3NoaVwgOwor57WQ552AIDwga2V0Y2hha3VcIDsKK+e3keaelyA8IHJ5b2t1cmluXCA7CivplrLlhbXlj7AgPCBlcHBlaWRhaVwgOwor57WQ55ufIDwga2V0c3VtZWlcIDsKK+a3t+eoruiqniA8IGtvbnNodWdvXCA7CivnhrHlvIEgPCBuZXRzdWJlblwgOwor6YCP6YGO5oCnIDwgdG91a2FzZWlcIDsKK+S8muimi+iomCA8IGthaWtlbmtpXCA7Civpm5Hlv7UgPCB6YXRzdW5lblwgOwor6KiO5q27IDwgdWNoaWppbmlcIDsKK+ebuOS8vOeCuSA8IHNvdWppdGVuXCA7CivonrrlrZDph5ggPCBuZWppa3VnaVwgOwor5Yem5aWz5bOwIDwgc2hvam9ob3VcIDsKK+eci+itt+W4qyA8IGthbmdvc2hpXCA7CivmlK/miZUgPCBzaGloYXJhaVwgOwor6Kaq552mIDwgc2hpbmJva3VcIDsKK+WggOerryA8IGhvcmliYXRhXCA7CivpmaXmsqEgPCBrYW5ib3RzdVwgOwor6KeS54mbIDwga2FrdWd5dXVcIDsKK+mbkeW9uSA8IHphdHN1ZWtpXCA7Civpm6rlsbEgPCB5dWtpeWFtYVwgOwor5pyJ6aCC54K5IDwgdWNob3V0ZW5cIDsKK+iruOS6uiA8IG1vcm9iaXRvXCA7CivkuIDnrYnmmJ8gPCBpdHRvdXNlaVwgOwor5LiL5rC06YGTIDwgZ2VzdWlkb3VcIDsKK+mdnuS6uuaDhSA8IGhpbmluam91XCA7CivpmaPmsqEgPCBqaW5ib3RzdVwgOwor54i25LiKIDwgY2hpY2hpdWVcIDsKK+mbquWusyA8IHNldHN1Z2FpXCA7CivplbfoopYgPCBuYWdhc29kZVwgOwor6Ziy54axIDwgYm91bmV0c3VcIDsKK+S4u+e+qeiAhSA8IHNodWdpc2hhXCA7CivnuITlvLUgPCBuYXdhYmFyaVwgOwor5rS+6YGj6LuNIDwgaGFrZW5ndW5cIDsKK+WGjeaPkOahiCA8IHNhaXRlaWFuXCA7Civnvo7mhI/orZggPCBiaWlzaGlraVwgOwor6KOP6YGTIDwgdXJhbWljaGlcIDsKK+mao+aOpSA8IHJpbnNldHN1XCA7Civntpnmr40gPCBtYW1haGFoYVwgOwor5aSn5ZadIDwgZGFpa2F0c3VcIDsKK+e3j+acrOWutiA8IHNvdWhvbmtlXCA7CivluqblpJboppYgPCBkb2dhaXNoaVwgOwor5Ye65p2l5YW35ZCIIDwgZGVraWd1YWlcIDsKK+mcsuWHuiA8IHJvc2h1dHN1XCA7CivoqKrml6UgPCBob3VuaWNoaVwgOwor6YGg5b6B6ZqKIDwgZW5zZWl0YWlcIDsKK+WhqeawtCA8IHNoaW9taXp1XCA7CivnkIbmg7PlnosgPCByaXNvdWtlaVwgOwor5pW35ZywIDwgc2hpa2ljaGlcIDsKK+S7ruWIhuaVsCA8IGthYnVuc3V1XCA7CivpmobmmIwgPCByeXV1c2hvdVwgOwor5paw5L+uIDwgc2hpbnNodXVcIDsKK+WKqeaVsOipniA8IGpvc3V1c2hpXCA7Civnsr7nrpfmiYAgPCBzZWlzYW5qb1wgOwor5aSn5ZCJIDwgZGFpa2ljaGlcIDsKK+WkmumdouS9kyA8IHRhbWVudGFpXCA7CivmlrDkvZwgPCBzaGluc2FrdVwgOwor6Zai6ISHIDwgc2VraXdha2VcIDsKK+eHreWPsCA8IHNob2t1ZGFpXCA7Civngq3nqq8gPCBzdW1pZ2FtYVwgOwor6Zu75ZynIDwgZGVuJydhdHN1XCA7Civpm6jlpbMgPCBhbWVvbicnbmFcIDsKK+a/gOmchyA8IGdla2lzaGluXCA7CivlpInlnKcgPCBoZW4nJ2F0c3VcIDsKK+W9oumquOWMliA8IGtlaWdhaWthXCA7CivmrKfnsbPkurogPCBvdWJlaWppblwgOwor5aSn5Y2SIDwgZGFpc290c3VcIDsKK+e1jOW4q+WxiyA8IGt5b3VqaXlhXCA7CivoqqTlpInmj5sgPCBnb2hlbmthblwgOwor6YKE5LuY6YeRIDwga2FucHVraW5cIDsKK+WjgeW9uSA8IGthYmV5YWt1XCA7Civmjpvou7ggPCBrYWtlamlrdVwgOwor57iE5bC7IDwgbmF3YWppcmlcIDsKK+ijsuiloCA8IHVjaGlrYWtlXCA7Civln7rnnaMgPCBraXJpc3V0b1wgOwor5pmp5b6h6aOvIDwgYmFuZ29oYW5cIDsKK+iFleiHquaFoiA8IHVkZWppbWFuXCA7CivmtYTmsLTlmaggPCBqb3VzdWlraVwgOwor5Yqp5pWZ6KutIDwgam9reW91eXVcIDsKK+Wkp+WIpSA8IHRhaWJldHN1XCA7CivmlonliJcgPCBzZWlyZXRzdVwgOwor6Zuq5Zu9IDwgeXVraWd1bmlcIDsKK+WHpuWls+WcsCA8IHNob2pvY2hpXCA7CivlpKflhoogPCB0YWlzYXRzdVwgOwor57e75a+GIDwgY2hpbWl0c3VcIDsKK+WkieWTsiA8IGhlbnRldHN1XCA7Civns7jnq7kgPCBzaGljaGlrdVwgOwor6ZaL6ISaIDwga2Fpa3lha3VcIDsKK+aUr+WxgCA8IHNoaWt5b2t1XCA7CivlpLHkv50gPCBzaGl0c3Vob1wgOwor5Yip55So6ICFIDwgcml5b3VzaGFcIDsKK+e1gueGhCA8IHNodXVzb2t1XCA7CivnhKHnsr7ljbUgPCBtdXNlaXJhblwgOwor6bGpIDwgaGF0YWhhdGFcIDsKK+eEoemWouS/giA8IG11a2Fua2VpXCA7CivlpJblipsgPCBnYWlyeW9rdVwgOwor6Kq/5LyPIDwgY2hvdWJ1a3VcIDsKK+mbm+WeiyA8IGhpbmFnYXRhXCA7CivmraPlrZfms5UgPCBzZWlqaWhvdVwgOwor6KaB55WlIDwgeW91cnlha3VcIDsKK+i7jeWMu+eboyA8IGd1bicnaWthblwgOwor6a+RIDwga2F6dW5va29cIDsKK+itpuS4luWutiA8IGtlaXNlaWthXCA7CivmnaXlrabmnJ8gPCByYWlnYWtraVwgOwor5pig55S76KmVIDwgZWlnYWh5b3VcIDsKK+aJueWIpOiAhSA8IGhpaGFuc2hhXCA7CivploDohIggPCBtb25teWFrdVwgOwor5bmz5Y+Z5paHIDwgaGVpam9idW5cIDsKK+ikkOiJsiA8IGthc3Nob2t1XCA7CivkuInph43oi6YgPCBzYW5qdXVrdVwgOwor6a2BIDwgc2FraWdha2VcIDsKK+aooeWAo+iAhSA8IG1vaG91c2hhXCA7CivprKMgPCB0YXRlZ2FtaVwgOwor6Zu75YqbIDwgZGVucnlva3VcIDsKK+S6iOmBuOS8miA8IHlvc2Vua2FpXCA7CivmvJTlpY/kvJogPCBlbnNvdWthaVwgOwor5pWw5YiXIDwgc3V1cmV0c3VcIDsKK+aUvuWfkiA8IGhvdXJhdHN1XCA7CivlpJblgbQgPCBzb3RvZ2F3YVwgOwor6KGo6ZaAIDwgb21vdGVtb25cIDsKK+aVsOWGiiA8IHN1dXNhdHN1XCA7Civpm7LliqkgPCBrdW1vc3VrZVwgOwor6ZuR5ZqiIDwgemF0c3Vub3VcIDsKK+S4jea0u+aApyA8IGZ1a2Fzc2VpXCA7Civmv4HphZIgPCBkb2J1cm9rdVwgOwor5Zyf6LOqIDwgZG9zaGl0c3VcIDsKK+mWi+WPo+mDqCA8IGthaWtvdWJ1XCA7CivmlbXlgbQgPCB0ZWtpZ2F3YVwgOwor5Y+M6IO05qmfIDwgc291ZG91a2lcIDsKK+iopeW8gSA8IHRvdHN1YmVuXCA7Civoo4/ooaggPCB1cmFvbW90ZVwgOwor6Kqt5LqGIDwgZG9rdXJ5b3VcIDsKK+eBsOevqSA8IGhhaWZ1cnVpXCA7CivnsqXohbkgPCBrYXl1YmFyYVwgOwor6aCI5byl5bGxIDwgc2h1bWlzZW5cIDsKK+eAieihgCA8IHNoYWtldHN1XCA7Civlgb3pgKDnvaogPCBnaXpvdXphaVwgOwor5aCF54KtIDwga2F0YXp1bWlcIDsKK+e2v+W8kyA8IHdhdGF5dW1pXCA7CivppJ4gPCBoYW5hbXVrZVwgOwor5Z6C6ICzIDwgdGFyZW1pbWlcIDsKK+ipsOWVjyA8IGtpdHN1bW9uXCA7Civnp4DnlLvlrrYgPCBzaHV1Z2FrYVwgOwor5Lqk5Luj5ZOhIDwga291dGFpaW5cIDsKK+WjsuWNtCA8IGJhaWt5YWt1XCA7CivmjqHooYAgPCBzYWlrZXRzdVwgOwor57im5YiXIDwganV1cmV0c3VcIDsKK+i1pOmbu+ipsSA8IGFrYWRlbndhXCA7CivmnInmnJ/liJEgPCB5dXVraWtlaVwgOwor5Y+j6Kmx5rOVIDwga291d2Fob3VcIDsKK+aIuOS4u+aoqSA8IGtvc2h1a2VuXCA7CivntbbmnJsgPCB6ZXRzdWJvdVwgOwor5YWs5a6J5a6YIDwga291YW5rYW5cIDsKK+aSg+ayiCA8IGdla2ljaGluXCA7Civop5Lmn7EgPCBrYWt1Y2h1dVwgOwor5Zu96L6xIDwga29rdWpva3VcIDsKK+atr+eJmeeKtiA8IHNoaWdham91XCA7CivkvJ3lo7DlmaggPCBkZW5zZWlraVwgOwor6aCRIDwga2F0YWt1bmFcIDsKK+S/nemZuumHkSA8IGhva2Vua2luXCA7Civlo6vljZIgPCBzaGlzb3RzdVwgOwor5oyH5pWw6YOoIDwgc2hpc3V1YnVcIDsKK+ixquiPr+iIuSA8IGdvdWthc2VuXCA7CivkuLjmmpfoqJggPCBtYXJ1YW5raVwgOwor5Zyw6KKLIDwgamlidWt1cm9cIDsKK+WjsuWHuiA8IHVyaWRhc2hpXCA7Civnt4rlr4YgPCBraW5taXRzdVwgOwor5Z+65rqW54K5IDwga2lqdW50ZW5cIDsKK+aPuuevrSA8IHl1cmlrYWdvXCA7Civpm6rlg48gPCBzZXRzdXpvdVwgOwor57SF546JIDwga291Z3lva3VcIDsKK+exs+iUtSA8IGtvbWVndXJhXCA7Civlvozmj7TkvJogPCBrb3VlbmthaVwgOwor5r2u6aKoIDwgc2hpb2themVcIDsKK+Wei+e0mSA8IGthdGFnYW1pXCA7CivnnIzorbDkvJogPCBrZW5naWthaVwgOwor6Kiq5a6iIDwgaG91a3lha3VcIDsKK+ihjOWcqOaJgCA8IGFuemFpc2hvXCA7CivpmrwgPCBoYXlhYnVzYVwgOwor6Kix5auBIDwgaWluYXp1a2VcIDsKK+aNj+mAoCA8IG5ldHN1em91XCA7Civlj6Poqp7mlocgPCBrb3Vnb2J1blwgOwor5a+d54WZ6I2JIDwgbmV0YWJha29cIDsKK+aWreegtOWjiiA8IGRhbmhha2FpXCA7CivpmbUgPCBtaXNhc2FnaVwgOwor56OB6YmE6YmxIDwgaml0ZWtrb3VcIDsKK+WGhueCuuabvyA8IGVuZ2F3YXNlXCA7CivnnIvorbflhbUgPCBrYW5nb2hlaVwgOwor5Za25qWt6YOoIDwgZWlneW91YnVcIDsKK+mWj+enkiA8IHVydXVieW91XCA7CivkuI3mtojljJYgPCBmdXNob3VrYVwgOwor5r2k6aO+IDwganVuc2hva3VcIDsKK+aLs+mqqCA8IGdlbmtvdHN1XCA7Civntr/lr4YgPCBtZW5taXRzdVwgOwor5LiN5b6z576pIDwgZnV0b2t1Z2lcIDsKK+WcsOWQuembqiA8IGppZnVidWtpXCA7Civmv4DotoogPCBnZWtpZXRzdVwgOwor6aCI5byl5aOHIDwgc2h1bWlkYW5cIDsKK+e2v+WunyA8IG1lbmppdHN1XCA7CivkvZDluZXmtL4gPCBzYWJha3VoYVwgOwor6ZaKIDwgdHN1a2FlcnVcIDsKK+mgk+eXtOawlyA8IHRvbmNoaWtpXCA7Civlm73os4ogPCBrb2t1em9rdVwgOwor5aSa5pWw5YWaIDwgdGFzdXV0b3VcIDsKK+eCuea7hSA8IHRlbm1ldHN1XCA7Civmv4Dos54gPCBnZWtpc2hvdVwgOwor5o6h5rK55qipIDwgc2FpeXVrZW5cIDsKK+adpeS4lue0gCA8IHJhaXNlaWtpXCA7CivpmpTlo4EgPCBrYWt1aGVraVwgOwor5bGx5rC055S7IDwgc2Fuc3VpZ2FcIDsKK+aOg+mZpOS6uiA8IHNvdWppbmluXCA7CivmhI/lkbPpg6jploAgPCBpbWlidW1vblwgOwor5LiA562J5ZywIDwgaXR0b3VjaGlcIDsKK+eojuWLmeWumCA8IHplaW11a2FuXCA7CivnnIvorbfkurogPCBrYW5nb25pblwgOwor5Y2K5YiH56ymIDwgaGFua2lwcHVcIDsKK+Wcp+eAmOWZqCA8IGF0c3Vyb2tpXCA7Civnt5HlnLAgPCByeW9rdWNoaVwgOwor5Z+65rqW5rOVIDwga2lqdW5ob3VcIDsKK+evgOmbuyA8IHNldHN1ZGVuXCA7Civlj5forJvogIUgPCBqdWtvdXNoYVwgOwor5ris6Led5YSAIDwgc29ra3lvZ2lcIDsKK+eymOeymCA8IG5lYmFuZWJhXCA7Civlhrflh43mqZ8gPCByZWl0b3VraVwgOwor6Yu4IDwgbm9rb2dpcmlcIDsKK+etiei3nemboiA8IHRvdWt5b3JpXCA7Civngo7nhrEgPCBlbicnbmV0c3VcIDsKK+WbveiosSA8IGt1bmltb3RvXCA7CivkuI3lkI3mlbAgPCBmdW1laXN1dVwgOwor6ZaL55m6IDwga2FpaGF0c3VcIDsKK+ippumBi+i7oiA8IHNoaXVudGVuXCA7Civnvqnli4flhbUgPCBnaXl1dWhlaVwgOwor6Kaq55S76Z2iIDwgb3lhZ2FtZW5cIDsKK+aLkuWQpuaoqSA8IGt5b2hpa2VuXCA7Civkuoznlarnt5ogPCBuaWJhbnNlblwgOwor5Za25qWt6LK7IDwgZWlneW91aGlcIDsKK+ebuOS8vOW9oiA8IHNvdWppa2VpXCA7Civnvbnngb3msJEgPCByaXNhaW1pblwgOwor5a+E55Sf5pyoIDwgeWFkb3JpZ2lcIDsKK+imquaXjyA8IHNoaW56b2t1XCA7CivngavolqzluqsgPCBrYXlha3Vrb1wgOwor6LWk6aCt5be+IDwgYWthenVraW5cIDsKK+icpeictOW6pyA8IHRva2FnZXphXCA7CivorabloLHpn7MgPCBrZWlob3VvblwgOwor57KJ57KJIDwga29uYWdvbmFcIDsKK+Wkp+icpeictCA8IG9vdG9rYWdlXCA7Civpm4fkurogPCB5YXRvaW5pblwgOwor5pu055Sf5pyfIDwga291c2Vpa2lcIDsKK+ioreWVjyA8IHNldHN1bW9uXCA7CivlnJ/lt6booZvploAgPCBkb3phZW1vblwgOwor6Kaa5pu4IDwgb2JvZWdha2lcIDsKK+eWkeWVj+aWhyA8IGdpbW9uYnVuXCA7Civojbfngrrmm78gPCBuaWdhd2FzZVwgOwor57eo5YWlIDwgaGVuJydueXV1XCA7Civmi5Lpo58gPCBreW9zaG9rdVwgOwor6IWO6IeT54KOIDwgamluem91ZW5cIDsKK+e0r+aciCA8IHJ1aWdldHN1XCA7CivlnoLnm7QgPCBzdWljaG9rdVwgOwor5a+E6LSI6ICFIDwga2l6b3VzaGFcIDsKK+WutuW6reWGhSA8IGthdGVpbmFpXCA7CivntIXmrrsgPCBiZW5pZ2FyYVwgOwor6JC96Kqe5a62IDwgcmFrdWdva2FcIDsKK+eEoeevgOaTjSA8IG11c2Vzc291XCA7Civop5LlupcgPCBrYWRvbWlzZVwgOwor57e05LmzIDwgcmVuJydueXV1XCA7CivlrrnnlpHogIUgPCB5b3VnaXNoYVwgOwor57Gz57OgIDwga29tZW51a2FcIDsKK+WxlemWi+WbsyA8IHRlbmthaXp1XCA7Civnp4HnlJ/lhZAgPCBzaGlzZWlqaVwgOwor6Lq+IDwgc2hpdHN1a2VcIDsKK+e3j+WKmyA8IHNvdXJ5b2t1XCA7CivlpKfmiYvnrYsgPCBvb3Rlc3VqaVwgOwor57Sv5pelIDwgcnVpaml0c3VcIDsKK+WFrOWumuS+oSA8IGtvdXRlaWthXCA7CivmsJfliIblsYsgPCBraWJ1bicneWFcIDsKK+WcqOiBtyA8IHphaXNob2t1XCA7Civln4vmsqEgPCBtYWlib3RzdVwgOwor5LiA562J5YW1IDwgaXR0b3VoZWlcIDsKK+S4i+awtOeuoSA8IGdlc3Vpa2FuXCA7CivmlbTmlbDmr5QgPCBzZWlzdXVoaVwgOwor57KY552AIDwgbmVuY2hha3VcIDsKK+eznua6nCA8IGt1c29kYW1lXCA7Civnr4npgKAgPCBjaGlrdXpvdVwgOwor56S+5YuZ5omAIDwgc2hhbXVzaG9cIDsKK+inpuWqkiA8IHNob2t1YmFpXCA7Civpq5jlsaTpm7IgPCBrb3Vzb3V1blwgOwor5bi45aWX6KqeIDwgam91dG91Z29cIDsKK+iIueWkluapnyA8IHNlbmdhaWtpXCA7CivpmorliJcgPCB0YWlyZXRzdVwgOwor5Y+M5pqX6LuKIDwgc291YW5zaGFcIDsKK+e0ouaVtSA8IHNha3V0ZWtpXCA7Civml4XlrqLmqZ8gPCByeW9rYWtraVwgOwor5aKX5Yi3IDwgem91c2F0c3VcIDsKK+e3keS+vyA8IHJ5b2t1YmVuXCA7Civmva7otrMgPCBzaGlvYXNoaVwgOwor6Zay5q20IDwgZXRzdXJla2lcIDsKK+mBi+WWtuiAhSA8IHVuJydlaXNoYVwgOwor5oGj5oSP55qEIDwgc2hpaXRla2lcIDsKK+e0jeacrSA8IG5vdXNhdHN1XCA7CivnoLTlpKnojZIgPCBoYXRlbmtvdVwgOwor54ax5biv5aScIDwgbmV0dGFpeWFcIDsKK+mBlOaIkOW6piA8IHRhc3NlaWRvXCA7CivlpJrop5LlvaIgPCB0YWtha2tlaVwgOwor5oyv6KKWIDwgZnVyaXNvZGVcIDsKK+ezn+axgSA8IGthc3VqaXJ1XCA7CivlhaXkvJrmqKkgPCBpcmlhaWtlblwgOwor5Y2D6JGJ55yMIDwgY2hpYmFrZW5cIDsKK+S6lOaciOmbqCA8IHNhbWlkYXJlXCA7CivmupbkvJrlk6EgPCBqdW5rYWlpblwgOwor6Ku6IDwga290b3dhemFcIDsKK+e0hOadnyA8IHlha3Vzb2t1XCA7CivmsLTmm5zml6UgPCBzdWl5b3ViaVwgOwor5riH5rC05pyfIDwga2Fzc3Vpa2lcIDsKK+aKkemssSA8IHlva3V1dHN1XCA7Civnq7bppqzloLQgPCBrZWliYWpvdVwgOwor5oyH6LKrIDwgeXViaW51a2lcIDsKK+mzqeWwj+WxiyA8IGhhdG9nb3lhXCA7Civmv4Doh60gPCBnZWtpc2h1dVwgOwor5LiN5q2j6KaWIDwgZnVzZWlzaGlcIDsKK+imi+aJgCA8IG1pZG9rb3JvXCA7Civlm5vljYrmnJ8gPCBzaGloYW5raVwgOwor57KX546HIDwgYXJhcml0c3VcIDsKK+S9nOeUqOeCuSA8IHNheW91dGVuXCA7CivpgYrlnJLlnLAgPCB5dXVlbmNoaVwgOwor6LuM6YGT6Ii5IDwga2lkb3VzZW5cIDsKK+W8geeQhuWjqyA8IGJlbnJpc2hpXCA7CivntYLluZUgPCBzaHV1bWFrdVwgOwor6KWy5pKDIDwgc2h1dWdla2lcIDsKK+m6u+mFlOmKgyA8IG1hc3VpanV1XCA7CivopIwgPCBmdW5kb3NoaVwgOwor5pyo6J665a2QIDwgbW9rdW5lamlcIDsKK+e1kOWxgCA8IGtla2t5b2t1XCA7CivmranmlbDoqIggPCBob3N1dWtlaVwgOwor5Li76aGM5q2MIDwgc2h1ZGFpa2FcIDsKK+eti+mqqCA8IHN1amlib25lXCA7CivmraPkvJrlk6EgPCBzZWlrYWlpblwgOwor5b6u5YiG5rOVIDwgYmlidW5ob3VcIDsKK+WLleWToeS7pCA8IGRvdWlucmVpXCA7CivoprPlrqIgPCBrYW5reWFrdVwgOwor5o6l552AIDwgc2V0Y2hha3VcIDsKK+mdkueTpuWPsCA8IHNlaWdhZGFpXCA7CivpmaPliJcgPCBqaW5yZXRzdVwgOwor5rih6Ii55aC0IDwgdG9zZW5qb3VcIDsKK+Wcn+ethiA8IHRzdWt1c2hpXCA7CivnspvnhLYgPCBzaHVrdXplblwgOwor5oSP6K2Y5LiLIDwgaXNoaWtpa2FcIDsKK+e0sOW8lSA8IGhvc29iaWtpXCA7CivopqrlsYAgPCBveWFreW9rdVwgOwor5L+d6K235Zu9IDwgaG9nb2tva3VcIDsKK+WQjOaAp+aEmyA8IGRvdXNlaWFpXCA7CivmsrnlnKflmaggPCB5dWF0c3VraVwgOwor54eV6Z2S5ouzIDwgZW5zZWlrZW5cIDsKK+W5vOW5tOacnyA8IHlvdW5lbmtpXCA7Civosaroj6/niYggPCBnb3VrYWJhblwgOwor6KGo6Iq4IDwgb21vdGVnZWlcIDsKK+WMu+WOn+eXhSA8IGlnZW5ieW91XCA7Civpm7voqbHnt5ogPCBkZW53YXNlblwgOwor5Ya35YeN5bqrIDwgcmVpdG91a29cIDsKK+mChOS7mOeojiA8IGthbnB1emVpXCA7CivlvIHorbfogIUgPCBiZW5nb3NoYVwgOwor6KOF552AIDwgc291Y2hha3VcIDsKK+mbu+ipsee2siA8IGRlbndhbW91XCA7CivnmbvlsbHpgZMgPCB0b3phbmRvdVwgOwor6JukIDwgaGFtYWd1cmlcIDsKK+a/g+e4riA8IG5vdXNodWt1XCA7CivmhI/lkbPljp/nkIYgPCBpbWlnZW5yaVwgOwor5o+Q54GvIDwgY2hvdWNoaW5cIDsKK+mYv+aIv+mzpSA8IGFob3Vkb3JpXCA7CivkuojlgpnnmoQgPCB5b2JpdGVraVwgOwor6KOP55S6IDwgdXJhbWFjaGlcIDsKK+Wcn+elniA8IHVjaGlnYW1pXCA7CivmibbliqnmlpkgPCBmdWpvcnlvdVwgOwor5aCA5bedIDwgaG9yaWthd2FcIDsKK+eMv+efpeaBtSA8IHNhcnVkamllXCA7CivlnLDolLXpoZQgPCBqaXpvdWdhb1wgOwor57W25ZG9IDwgemV0c3VtZWlcIDsKK+mZi+WKoyA8IHJvdXJldHN1XCA7CivkvZzmpa3loLQgPCBzYWd5b3ViYVwgOwor562G6aCGIDwgaGl0c3VqdW5cIDsKK+epuuebuOWgtCA8IGt1dXNvdWJhXCA7CivoorTnnYAgPCBoYWthbWFnaVwgOwor5Zu957GNIDwga29rdXNla2lcIDsKK+aMveiCiSA8IGhpa2luaWt1XCA7Civmt7flkIjoqp4gPCBrb25nb3Vnb1wgOwor5aal5Y2U5qGIIDwgZGFreW91YW5cIDsKK+e0sOWvhiA8IHNhaW1pdHN1XCA7CivplpPmn4QgPCBhaWRhZ2FyYVwgOwor54Sh5oq15oqXIDwgbXV0ZWlrb3VcIDsKK+aSg+WinCA8IGdla2l0c3VpXCA7CivokYnnr4DngrkgPCBoYXNldHRlblwgOwor5LuW5YuV6KmeIDwgdGFkb3VzaGlcIDsKK+aYoOeUu+eLgiA8IGVpZ2FreW91XCA7Civlm73nrZYgPCBrb2t1c2FrdVwgOwor5rOV6I+v57WMIDwgaG9rZWt5b3VcIDsKK+ethumZoyA8IGhpdHN1amluXCA7CivphaLmlpnnkIYgPCBzdXJ5b3VyaVwgOwor5pS/5bqc57GzIDwgc2VpZnVtYWlcIDsKK+e1kOWboyA8IGtldHN1ZGFuXCA7CivonqLpm6ogPCBrZWlzZXRzdVwgOwor5aW957WQ5p6cIDwga291a2Vra2FcIDsKK+a0u+aAp+WMliA8IGthc3NlaWthXCA7CivliqnoqIDogIUgPCBqb2dvbnNoYVwgOwor6KOP5Y2D5a62IDwgdXJhc2Vua2VcIDsKK+iIjuWIqeWhlCA8IHNoYXJpdG91XCA7CivonbbprqsgPCBjaG91emFtZVwgOwor5pCm5omLIDwga2FyYW1ldGVcIDsKK+S4jeelneWEgCA8IGJ1c2h1dWdpXCA7Civlm6PntZAgPCBkYW5rZXRzdVwgOwor6YGO5rih55qEIDwga2F0b3Rla2lcIDsKK+mZtuiKuOWutiA8IHRvdWdlaWthXCA7CivntJnlsZEgPCBrYW1pa3V6dVwgOwor5L2c5qWt5ZOhIDwgc2FneW91aW5cIDsKK+ihgOiJsiA8IGtlc3Nob2t1XCA7CivlpJrmkanlt50gPCB0YW1hZ2F3YVwgOwor5b6u6Ium56yRIDwgYmlrdXNob3VcIDsKK+asuueenuiAhSA8IGdpbWFuc2hhXCA7CivploDmnK0gPCBtb25zYXRzdVwgOwor56uL5rOV5bqcIDwgcmlwcG91ZnVcIDsKK+iiq+eBveWcsCA8IGhpc2FpY2hpXCA7CivnjJvmiZPogIUgPCBtb3VkYXNoYVwgOwor57W25YCrIDwgemV0c3VyaW5cIDsKK+Wei+aeoCA8IGthdGF3YWt1XCA7CivkuI3npaXkuosgPCBmdXNob3VqaVwgOwor57WQ5p6c6KuWIDwga2Vra2Fyb25cIDsKK+mXh+W4giA8IHlhbWlpY2hpXCA7Civono3pm6ogPCB5dXVzZXRzdVwgOwor57CS56uLIDwgc2Fucml0c3VcIDsKK+S4i+awtOa6nSA8IGdlc3Vpa291XCA7CivmsLTpoqjlkYIgPCBtaXp1YnVyb1wgOwor5pa55L2N6KeSIDwgaG91aWtha3VcIDsKK+mYsuWhteedgCA8IGJvdWppbmdpXCA7Civml6Loppbmg7MgPCBraXNoaWthblwgOwor5Zyw54axIDwgY2hpbmV0c3VcIDsKK+iBviA8IG1pbWlzaGlpXCA7Civlj6Poqp7kvZMgPCBrb3Vnb3RhaVwgOwor5bm56YOo5LyaIDwga2FuYnVrYWlcIDsKK+S6pOmam+iyuyA8IGtvdXNhaWhpXCA7CivnrYvph5EgPCBzdWppZ2FuZVwgOwor5q2m5aOr6YGTIDwgYnVzaGlkb3VcIDsKK+mtlOaWuemZoyA8IG1haG91amluXCA7CivnrpfooZMgPCBzYW5qdXRzdVwgOwor6JGh6JCE6YWSIDwgYnVkb3VzaHVcIDsKK+mVt+aXhSA8IG5hZ2F0YWJpXCA7Civlj4zlrZDluqcgPCBmdXRhZ296YVwgOwor6ISx5rC05qmfIDwgZGFzc3Vpa2lcIDsKK+eBq+WPo+WOnyA8IGtha291Z2VuXCA7CivkvY7mrKHlhYMgPCB0ZWlqaWdlblwgOwor6Ziy5Lq6IDwgc2FraW1vcmlcIDsKK+WOs+WGrOacnyA8IGdlbnRvdWtpXCA7CivkuI3pgIDou6IgPCBmdXRhaXRlblwgOwor6J+76JyCIDwgYXJpYmFjaGlcIDsKK+aJi+Wcn+eUoyA8IHRlbWl5YWdlXCA7CivljbHpmbroppYgPCBraWtlbnNoaVwgOwor6KGd56uLIDwgdHN1aXRhdGVcIDsKK+iInui4iuWboyA8IGJ1dG91ZGFuXCA7CivkuI3msbrlrpogPCBmdWtldHRlaVwgOwor5Zue5biw57eaIDwga2Fpa2lzZW5cIDsKK+e2tCA8IHRzdWR6dXJpXCA7CivljLrmsJHnqI4gPCBrdW1pbnplaVwgOwor5L2V55Wq55uuIDwgbmFuYmFubWVcIDsKK+ewoeeVpSA8IGthbnJ5YWt1XCA7CivohLHmsJfmsLQgPCBkYWtraXN1aVwgOwor5YiR5YuZ5omAIDwga2VpbXVzaG9cIDsKK+WBpeWVluWutiA8IGtlbnRhbmthXCA7CivnoLTlo4rogIUgPCBoYWthaXNoYVwgOwor6Ieq5oSP6K2YIDwgamlpc2hpa2lcIDsKK+S4g+WNgei3ryA8IG5hbmFzb2ppXCA7CivoprPoh6rlnKggPCBrYW5qaXphaVwgOwor6YGg5b+D5qmfIDwgZW5zaGlua2lcIDsKK+aNqOeMqyA8IHN1dGVuZWtvXCA7CivmnLHljbDoiLkgPCBzaHVpbnNlblwgOwor5rSX5r+v5qmfIDwgc2VudGFra2lcIDsKK+S4jeWLleeUoyA8IGZ1ZG91c2FuXCA7Civon4DosLcgPCBrb21la2FtaVwgOwor5Zm05rCX5a2UIDwgZnVua2lrb3VcIDsKK+ifr+iZqyA8IGd5b3VjaHV1XCA7CivonablpLfmnb4gPCBlem9tYXRzdVwgOwor6ay85YiR5LqLIDwgb25pa2VpamlcIDsKK+aEn+WYhuespiA8IGthbnRhbmZ1XCA7Civms5XljLvlraYgPCBob3VpZ2FrdVwgOwor57KJ5pyrIDwgZnVubWF0c3VcIDsKK+evgSA8IHRha2FtdXJhXCA7Civln5LlpJYgPCByYWNoaWdhaVwgOwor6bOl5bCP5bGLIDwgdG9yaWdveWFcIDsKK+WdquaVsCA8IHRzdWJvc3V1XCA7CivnrY0gPCB0YWtlbm9rb1wgOwor6Ieq5Za25qWtIDwgamllaWd5b3VcIDsKK+eznuWwvyA8IGZ1bicnbnlvdVwgOwor6KGo55m9IDwgaHlvdWhha3VcIDsKK+eyvumMrOaJgCA8IHNlaXJlbmpvXCA7Civlm5vnmb4gPCB5b25oeWFrdVwgOwor57Sw5YilIDwgc2FpYmV0c3VcIDsKK+aJi+mPoSA8IHRla2FnYW1pXCA7Civpu4Toj5bokrIgPCBraXNob3VidVwgOwor5Lqc5aSn6Zm4IDwgYXRhaXJpa3VcIDsKK+WCmeiAg+ashCA8IGJpa291cmFuXCA7CivooI/ogqEgPCBnYW5pbWF0YVwgOwor5aCA5YmyIDwgaG9yaXdhcmlcIDsKK+eJh+aJi+mWkyA8IGthdGF0ZW1hXCA7CivkurrplpPlkbMgPCBuaW5nZW5taVwgOwor6Zai5a6IIDwgc2VraW1vcmlcIDsKK+eEoeaEj+itmCA8IG11aXNoaWtpXCA7CivmipXos4flrrYgPCB0b3VzaGlrYVwgOwor5LiL5rC05p2/IDwgZ2VzdWlpdGFcIDsKK+ihgOeojiA8IGtldHN1emVpXCA7CivppqzouYTlvaIgPCBiYXRlaWtlaVwgOwor5YWo6Z+z56ymIDwgemVuJydvbnB1XCA7Civln7fli5kgPCBzaGl0c3VtdVwgOwor5o2V54mpIDwgdG9yaW1vbm9cIDsKK+aIkOmmmSA8IG5hcmlreW91XCA7Civpq5jovJ3luqYgPCBrb3VraWRvdVwgOwor57Gz5p2+IDwgYmVpbWF0c3VcIDsKK+evgOezuCA8IGZ1c2hpaXRvXCA7CivkuI3lj6/kvrUgPCBmdWthc2hpblwgOwor6buE5Y+j5YWQIDwga291a291amlcIDsKK+WIhuenkeS8miA8IGJ1bmtha2FpXCA7Civnr4DnsbMgPCBzZXRzdW1haVwgOwor6JyY6Jub6IacIDwga3Vtb21ha3VcIDsKK+S6i+alreWutiA8IGppZ3lvdWthXCA7Civmib/oq74gPCBzaG91ZGFrdVwgOwor5YWl5Lya5ZywIDwgaXJpYWljaGlcIDsKK+ethuirhyA8IGhpdHN1ZGFuXCA7Civlm7Pmm7jppKggPCB0b3Nob2thblwgOwor6ZaL5bGAIDwga2Fpa3lva3VcIDsKK+ijveeJiOaJgCA8IHNlaWhhbmpvXCA7CivmnbHlpKflr7ogPCB0b3VkYWlqaVwgOwor6Y6M6aaWIDwga2FtYWt1YmlcIDsKK+eri+mjnyA8IHJpc3Nob2t1XCA7CivkuK3kvY3mlbAgPCBjaHV1aXN1dVwgOwor6KGG55uuIDwgc2h1dW1va3VcIDsKK+ethuinpiA8IGhpc3Nob2t1XCA7Civlj4Los4DogIUgPCBzYW5nYXNoYVwgOwor5om55YeG5pu4IDwgaGlqdW5zaG9cIDsKK+WeguW5lSA8IHRhcmVtYWt1XCA7Civnq4vpoZggPCByaXRzdWdhblwgOwor5pGC5YuVIDwgc2V0c3Vkb3VcIDsKK+iInui4j+S8miA8IGJ1dG91a2FpXCA7Civnsr7lr4YgPCBzZWltaXRzdVwgOwor55CG5YyW5a2mIDwgcmlrYWdha3VcIDsKK+evgOeptCA8IGZ1c2hpYW5hXCA7CivnmbvlsbHogIUgPCB0b3phbnNoYVwgOwor5Yqp5pWZ5o6IIDwgam9reW91anVcIDsKK+WIkeWLmeWumCA8IGtlaW11a2FuXCA7CivnmbggPCBtaXp1bm90b1wgOwor5pS/5YuZ5a6YIDwgc2VpbXVrYW5cIDsKK+evgOeojiA8IHNldHN1emVpXCA7CivmraPnvqnmhJ8gPCBzZWlnaWthblwgOwor57O45Y+jIDwgaXRvZ3VjaGlcIDsKK+WMu+iWrOWTgSA8IGl5YWt1aGluXCA7CivljJbnsqfnnYAgPCBrZXNob3VnaVwgOwor5omL6LuKIDwgdGVndXJ1bWFcIDsKK+eBq+mBlOejqCA8IGhpZGFydW1hXCA7CivplbflsLsgPCBuYWdhamlyaVwgOwor5r+B5rWBIDwgZGFrdXJ5dXVcIDsKK+e0oOS6uiA8IHNoaXJvdXRvXCA7CivkuI3lvrnlupUgPCBmdXRldHRlaVwgOwor5r+A5rWBIDwgZ2VraXJ5dXVcIDsKK+Wft+S6iyA8IHNoaXRzdWppXCA7CivnlZnlrojlroUgPCBydXN1dGFrdVwgOwor5omA6L2EIDwgc2hva2F0c3VcIDsKK+aLkue1tiA8IGt5b3pldHN1XCA7Civlh6HoqablkIggPCBib25zaGlhaVwgOwor5LiH5q2p6KiIIDwgbWFucG9rZWlcIDsKK+S6jOaemuiynSA8IG5pbWFpZ2FpXCA7CivmjpLml6UgPCBoYWluaWNoaVwgOwor55So5rC06LevIDwgeW91c3Vpcm9cIDsKK+ezu+WIlyA8IGtlaXJldHN1XCA7CivoobDmu4UgPCBzdWltZXRzdVwgOwor5pmC6KiI5bqXIDwgdG9rZWl0ZW5cIDsKK+WbuuWumuWtkCA8IGtvdGVpc2hpXCA7CivmnInnhZnngq0gPCB5dXVlbnRhblwgOwor6KOP6ay86ZaAIDwgdXJha2ltb25cIDsKK+aOoeaOmCA8IHNhaWt1dHN1XCA7CivlvqHmr43mp5ggPCBva2Fhc2FtYVwgOwor5Z+S5YaFIDwgcmFjaGluYWlcIDsKK+mBk+elluelniA8IGRvdXNvamluXCA7CivlnKjml6UgPCB6YWluaWNoaVwgOwor5ZCI5rOV5YyWIDwgZ291aG91a2FcIDsKK+a8geiJsiA8IGd5b3Nob2t1XCA7Civmi5nnrYYgPCBzZXBwaXRzdVwgOwor57SU5LiAIDwganVuJydpdHN1XCA7Civpppbpg73lnI8gPCBzaHV0b2tlblwgOwor5LiJ5q+b54yrIDwgbWlrZW5la29cIDsKK+aOouefpeapnyA8IHRhbmNoaWtpXCA7CivmrbvngavlsbEgPCBzaGlrYXphblwgOwor6Imy5qih5qeYIDwgaXJvbW95b3VcIDsKK+ezuOmbu+ipsSA8IGl0b2RlbndhXCA7Civph43lpKfljJYgPCBqdXVkYWlrYVwgOwor5pCs5YWlIDwgaGFuJydueXV1XCA7CivplqLlj5YgPCBzZWtpdG9yaVwgOwor5LiJ5q6155uuIDwgc2FuZGFubWVcIDsKK+elreWjh+W6pyA8IHNhaWRhbnphXCA7CivmkL7kubMgPCBzYWt1bnl1dVwgOwor54OP5bi95a2Q5ZCNIDwgZWJvc2hpbmFcIDsKK+a8q+ethiA8IG1hbnBpdHN1XCA7CivlhYTlvJ/lrZAgPCBhbmlkZXNoaVwgOwor6YGL5ZG96KuWIDwgdW5tZWlyb25cIDsKK+aZrumAmuenkSA8IGZ1dHN1dWthXCA7CivkuIrlj6Tlj7IgPCBqb3Vrb3NoaVwgOwor6aCQ6LKv6YeRIDwgeW9jaG9raW5cIDsKK+aKnOe+pCA8IGJhdHN1Z3VuXCA7CivlpqXlvZPmgKcgPCBkYXRvdXNlaVwgOwor5Zu95p+EIDwga3VuaWdhcmFcIDsKK+iRoeiQhOiJsiA8IGJ1ZG91aXJvXCA7CivmjpLmsLTot68gPCBoYWlzdWlyb1wgOwor5qiq5pat6Z2iIDwgb3VkYW5tZW5cIDsKK+aVtOe1jOapnyA8IHNlaWtlaWtpXCA7CivmiYvooosgPCB0ZWJ1a3Vyb1wgOwor6Zaj5YOaIDwga2FrdXJ5b3VcIDsKK+ewoeS9k+WtlyA8IGthbnRhaWppXCA7CivpoqjpgqrmsJflkbMgPCBrYXplZ2ltaVwgOwor5Y+v5rq254mHIDwga2F5b3VoZW5cIDsKK+WEgOS7l+WFtSA8IGdpam91aGVpXCA7CivpmbjlsYvmoLkgPCByb2t1eWFuZVwgOwor57Gk5byVIDwga3VqaWJpa2lcIDsKK+W6p+irh+S8miA8IHphZGFua2FpXCA7CivluIbliY3oiLkgPCBob21hZXNlblwgOwor5oyH6Kmx5rOVIDwgc2hpd2Fob3VcIDsKK+WBvemAoOWTgSA8IGdpem91aGluXCA7CivnrYvogokgPCBraW4nJ25pa3VcIDsKK+S4luW4r+aVsCA8IHNldGFpc3V1XCA7CivkuIDlkajmnJ8gPCBpc3NodXVraVwgOwor5Lit6ICz54KOIDwgY2h1dWppZW5cIDsKK+eqk+mamyA8IG1hZG9naXdhXCA7Civlr4zlo6vpgJogPCBmdWppdHN1dVwgOwor5a625bGL56iOIDwga2Fva3V6ZWlcIDsKK+mWk+WFqyA8IGthbnBhY2hpXCA7CivnrLnoiJ8gPCBzYXNhYnVuZVwgOwor5qmf5YuV6ZqKIDwga2lkb3V0YWlcIDsKK+mYsueBq+e3miA8IGJvdWthc2VuXCA7CivmlZnorbfpmaIgPCBreW91Z29pblwgOwor5o6l5bK4IDwgc2V0c3VnYW5cIDsKK+aIr+iogCA8IHRhd2Fnb3RvXCA7CivonrrlrZDlsbEgPCBuZWppeWFtYVwgOwor5Lmz5YWQ6ZmiIDwgbnl1dWppaW5cIDsKK+ihgOa2siA8IGtldHN1ZWtpXCA7CivohZXmmYLoqIggPCB1ZGVkb2tlaVwgOwor6KCP546JIDwga2FuaXRhbWFcIDsKK+ihgOa2mSA8IGtldHN1cnVpXCA7CivmiLjooosgPCB0b2J1a3Vyb1wgOwor5pyx5Y2w54q2IDwgc2h1aW5qb3VcIDsKK+aOqOWvnyA8IHN1aXNhdHN1XCA7CivnnJ/mhI/nvqkgPCBzaGluJydpZ2lcIDsKK+mBiuaKgOWgtCA8IHl1dWdpam91XCA7Civli6flt6XloLQgPCBrYW5rb3ViYVwgOwor5o6l5a6iIDwgc2Vra3lha3VcIDsKK+S4ieWGoOmmrCA8IHNhbmthbmJhXCA7Civll4XoppogPCBreXV1a2FrdVwgOwor5aSp5omN5YWQIDwgdGVuc2FpamlcIDsKK+mAhuiMguacqCA8IHNha2Ftb2dpXCA7Civmipjnr4AgPCBvcmlmdXNoaVwgOwor6KOc5YWF5YW1IDwgaG9qdXVoZWlcIDsKK+W7uuitsOiAhSA8IGtlbmdpc2hhXCA7CivluLjlpJznga8gPCBqb3V5YXRvdVwgOwor5r2k5ruRIDwganVua2F0c3VcIDsKK+mOjOi2syA8IGthbWFhc2hpXCA7CivojYnlsYvmoLkgPCBrdXNheWFuZVwgOwor5r2u5rWBIDwgY2hvdXJ5dXVcIDsKK+Wbm+aciCA8IHNoaWdhdHN1XCA7CivlmLLnrJEgPCBjaG91c2hvdVwgOwor5qip5aiB6ICFIDwga2VuJydpc2hhXCA7Civnqq7ov70gPCBreXV1dHN1aVwgOwor56qu6L+rIDwga3l1dWhha3VcIDsKK+aPoeWKmyA8IGFrdXJ5b2t1XCA7CivnoJXlsqnmqZ8gPCBzYWlnYW5raVwgOwor6JGh6JCE57OWIDwgYnVkb3V0b3VcIDsKK+eZveS6nOmkqCA8IGhha3Vha2FuXCA7Civmt7flkozmgKcgPCBrb253YXNlaVwgOwor5bem6aGn5Y+z55yEIDwgc2Frb3ViZW5cIDsKK+WMlueyp+auvyA8IGtld2FpZGVuXCA7CivpjZvpiYQgPCB0YW50ZXRzdVwgOwor5o+a5YqbIDwgeW91cnlva3VcIDsKK+WNg+WIhuavlCA8IHNlbmJ1bmhpXCA7Civnq7nolq4gPCB0YWtleWFidVwgOwor5omN6ImyIDwgc2Fpc2hva3VcIDsKK+aZguioiOWPsCA8IHRva2VpZGFpXCA7CivlkIzmr43lp4kgPCBkb3Vib3NoaVwgOwor56uL6KuWIDwgcml0c3Vyb25cIDsKK+exs+WdqiA8IGJlaXRzdWJvXCA7CivmpaAgPCBrdXN1bm9raVwgOwor562G566xIDwgZnVkZWJha29cIDsKK+a4rOmHjyA8IHNva3VyeW91XCA7CivnrYnnrYkgPCBuYWRvbmFkb1wgOwor56uL6KiAIDwgcml0c3VnZW5cIDsKK+m7hOawtOS7mSA8IGtpc3Vpc2VuXCA7CivnspvlhZogPCBzaHVrdXRvdVwgOwor5byx5ZGz5ZmMIDwgeW93YW1pc29cIDsKK+ijuOWHuiA8IHJhc2h1dHN1XCA7CivpjYvph5wgPCBuYWJla2FtYVwgOwor55WZ5a6I5LitIDwgcnVzdWNodXVcIDsKK+ihneaSgyA8IHNob3VnZWtpXCA7Civmt7fpm5EgPCBrb256YXRzdVwgOwor5bCP5YWQ56eRIDwgc2hvdW5pa2FcIDsKK+mVt+S5hSA8IGNob3VreXV1XCA7CivkuInljYHmiLggPCBzYW5qaWtrb1wgOwor6Zu76Zui5bGkIDwgZGVucmlzb3VcIDsKK+mrmOi4j+a0viA8IGtvdXRvdWhhXCA7CivnkIblt6Xns7sgPCByaWtvdWtlaVwgOwor54Sh56S86KybIDwgYnVyZWlrb3VcIDsKK+WcsOWigyA8IGRqaXpha2FpXCA7CivmjL/mipwgPCBzb3ViYXRzdVwgOwor5Luu5ZCN5paH5a2XIDwga2FuYW1vamlcIDsKK+S4jeWNgeWIhiA8IGZ1anV1YnVuXCA7Civlk7rkubPmnJ8gPCBob255dXVraVwgOwor55+z5rK5546LIDwgc2VraXl1b3VcIDsKK+iho+aJiyA8IGtvcm9tb2RlXCA7CivlvqHliKnnm4ogPCBnb3JpeWFrdVwgOwor5oqV5pu45a62IDwgdG91c2hva2FcIDsKK+mBuueVmeWTgSA8IGlyeXV1aGluXCA7Civom7jotrMgPCB0YWtvYXNoaVwgOwor6YG65Lyd55eFIDwgaWRlbmJ5b3VcIDsKK+aPmueCreapnyA8IHlvdXRhbmtpXCA7CivpnZ7lpInmj5sgPCBoaWhlbmthblwgOwor5pS55q2j5qGIIDwga2Fpc2VpYW5cIDsKK+mrmOmrmOW6piA8IGtvdWtvdWRvXCA7CivntYznlKPlqaYgPCBrZWlzYW5wdVwgOwor5o6l5ZCIIDwgc2V0c3Vnb3VcIDsKK+ijj+WPoyA8IHVyYWd1Y2hpXCA7CivmipHnlZkgPCB5b2t1cnl1dVwgOwor6LWk6KO46KO4IDwgc2VraXJhcmFcIDsKK+a3t+WQiOapnyA8IGtvbmdvdWtpXCA7Civmva7mmYIgPCBzaGlvZG9raVwgOwor5a+E6LSI5ZOBIDwga2l6b3VoaW5cIDsKK+a/g+WvhiA8IG5vdW1pdHN1XCA7CivlpJzooYzmgKcgPCB5YWtvdXNlaVwgOwor5YmN6KGb5rS+IDwgemVuJydlaWhhXCA7CivmnKrmsbrnrpcgPCBtaWtlc3NhblwgOwor5Zu95a2mIDwga29rdWdha3VcIDsKK+a8oOa8oCA8IGJha3ViYWt1XCA7Civmj4nkuosgPCBtb21lZ290b1wgOwor5Li76KaB6YOoIDwgc2h1eW91YnVcIDsKK+mBv+WvkuWcsCA8IGhpa2FuY2hpXCA7CivmsLTlnqLpm6IgPCBtaXp1Z29yaVwgOwor5aeU6KiX55SfIDwgaXRha3VzZWlcIDsKK+itpuWgseapnyA8IGtlaWhvdWtpXCA7CivmuKnnvajms5UgPCBvbicnYW5wb3VcIDsKK+WvvuW/nOeJiCA8IHRhaW91YmFuXCA7CivlloflmJvmlZkgPCByYW1ha3lvdVwgOwor6YG655WZ5YiGIDwgaXJ5dXVidW5cIDsKK+aYhuW4g+iMtiA8IGtvbmJ1Y2hhXCA7CivpvLvpq60gPCBoYW5haGlnZVwgOwor5LmX566X5ZmoIDwgam91emFua2lcIDsKK+eri+iRtSA8IHRhY2hpYW9pXCA7CivnsonkubMgPCBmdW4nJ255dXVcIDsKK+m8u+mrmCA8IGhhbmF0YWthXCA7CivokazlhIDnpL4gPCBzb3VnaXNoYVwgOwor5Yik5qSc5LqLIDwgaGFua2VuamlcIDsKK+WWgOihgCA8IGtha2tldHN1XCA7CivnibnnlbDngrkgPCB0b2t1aXRlblwgOwor5L+d6Zm65bGLIDwgaG9rZW4nJ3lhXCA7CivmipXniakgPCBuYWdlbW9ub1wgOwor5Zyw5Y21IDwgaml0YW1hZ29cIDsKK+S4jemDveWQiCA8IGZ1dHN1Z291XCA7CivmiYDmjIHph5EgPCBzaG9qaWtpblwgOwor6JmO5rKz6LGaIDwgdG9yYWZ1Z3VcIDsKK+aKgOiDveiAhSA8IGdpbm91c2hhXCA7CivmipforbDmlocgPCBrb3VnaWJ1blwgOwor6KKW5Z6jIDwgc29kZWdha2lcIDsKK+aXouijveWTgSA8IGtpc2VpaGluXCA7Civln7rnpI7nmoQgPCBraXNvdGVraVwgOwor5rex6YWSIDwgZnVrYXpha2VcIDsKK+iynee0sOW3pSA8IGthaXphaWt1XCA7Civpu5Lnmb7lkIggPCBrdXJveXVyaVwgOwor56m66LGGIDwgc29yYW1hbWVcIDsKK+iMtuiPk+WtkCA8IGNoYWdhc2hpXCA7CivpvLvpoqggPCBoYW5ha2F6ZVwgOwor57Gz5LuPIDwgYmVpZnV0c3VcIDsKK+WQpuWumuaWhyA8IGhpdGVpYnVuXCA7CivmjZXlpLEgPCBob3NoaXRzdVwgOwor5oqE54mpIDwgc2hvdW1vbm9cIDsKK+erueewoSA8IGNoaWt1a2FuXCA7CivmirnmrrogPCBtYXNzYXRzdVwgOwor5byB6K235aOrIDwgYmVuZ29zaGlcIDsKK+aJi+ijj+WJoyA8IHNodXJpa2VuXCA7CivpioDmmYLoqIggPCBnaW5kb2tlaVwgOwor5LiJ6YCj56ymIDwgc2FucmVucHVcIDsKK+ijj+S7mCA8IHVyYWR6dWtlXCA7CivllJDpi6QgPCBrYXJhc3VraVwgOwor5Zyn5Ye6IDwgYXNzaHV0c3VcIDsKK+eri+iEmiA8IHJpa2t5YWt1XCA7Civnq7nnroYgPCB0YWtlYmVyYVwgOwor5Zu95Zu9IDwga3VuaWd1bmlcIDsKK+ewkuWlqiA8IHNhbmRhdHN1XCA7CivlnYfkuIAgPCBraW4nJ2l0c3VcIDsKK+a8j+azhCA8IHJvdXNldHN1XCA7CivpvLvpnakgPCBoYW5hZ2F3YVwgOwor56m66KqsIDwga3V1c2V0c3VcIDsKK+Wwj+WIh+WtkCA8IGtva2lyaWtvXCA7CivmkK3kuZflk6EgPCB0b3Vqb3VpblwgOwor5LiW55WM6KazIDwgc2VrYWlrYW5cIDsKK+Wcp+WFpSA8IGF0c3VueXV1XCA7CivmjJnlvI8gPCBreW9zaGlraVwgOwor56m66KiAIDwgc29yYWdvdG9cIDsKK+WUkOmHkSA8IGthcmFrYW5lXCA7CivlgInluqvnlaogPCBzb3Vrb2JhblwgOwor6JmO6ayaIDwgdG9yYWhpZ2VcIDsKK+a6tueZuiA8IHlvdWhhdHN1XCA7Civmu7Tmu7QgPCB0ZWtpdGVraVwgOwor5ryC5rWBIDwgaHlvdXJ5dXVcIDsKK+mPkeefoiA8IGthYnVyYXlhXCA7Civmlofnp5Hns7sgPCBidW5rYWtlaVwgOwor6IO95paH5a62IDwgbm91YnVua2FcIDsKK+W8geitt+WboyA8IGJlbmdvZGFuXCA7Civlt6sgPCBrYW4nJ25hZ2lcIDsKK+mKgOS4lueVjCA8IGdpbnNla2FpXCA7Civmi5nmlocgPCBzZXRzdWJ1blwgOwor6J6i54GrIDwgaG90YXJ1YmlcIDsKK+WMiOeJmeWIqSA8IGhhbmdhcmlpXCA7CivmiY3nlaUgPCBzYWlyeWFrdVwgOwor6YqA6bygIDwgZ2luJyduZXp1XCA7CivnjL/nnJ/kvLwgPCBzYXJ1bWFuZVwgOwor54yq5Y+j5omNIDwgY2hva296YWlcIDsKK+mLs+eJqeW4qyA8IGltb25vc2hpXCA7CivnhKHpiYTnoLIgPCBtdXRlcHBvdVwgOwor5ZCM5YiG5q+NIDwgZG91YnVuYm9cIDsKK+WbveWOnyA8IGt1bmliYXJhXCA7CivmnKrmtojljJYgPCBtaXNob3VrYVwgOwor6Jue6J2TIDwgbmFtZWt1amlcIDsKK+epuuidiSA8IHV0c3VzZW1pXCA7Civnr4nluq0gPCBjaGlrdXRlaVwgOwor56+k5a2mIDwgdG9rdWdha3VcIDsKK+W6g+adseiqniA8IGthbnRvbmdvXCA7Civlr78gPCBrb3RvYnVraVwgOwor5LiA56eB5Lq6IDwgaXNzaGlqaW5cIDsKK+iejeeGsSA8IHl1dW5ldHN1XCA7CivmvKLolLXoqp4gPCBrYW56b3Vnb1wgOwor5LqM5Lq655uuIDwgZnV0YXJpbWVcIDsKK+WvjOWjq+e1uSA8IGZ1amlnaW51XCA7CivogpvploDnp5EgPCBrb3Vtb25rYVwgOwor6Z2Z6Zu75rCXIDwgc2VpZGVua2lcIDsKK+mNi+iTiyA8IG5hYmVidXRhXCA7Civljp/li5XmqZ8gPCBnZW5kb3VraVwgOwor5Lm+6Ii55rigIDwga2FuZG9ra3VcIDsKK+m8k+WQueiAhSA8IGtvc3Vpc2hhXCA7CivlpKflkoznha4gPCB5YW1hdG9uaVwgOwor562G5rSXIDwgZnVkZWFyYWlcIDsKK+iMtumBk+WFtyA8IGNoYWRvdWd1XCA7Civlm7DljbQgPCBrb25reWFrdVwgOwor5oe457W2IDwga2VuemV0c3VcIDsKK+aOkuawl+euoSA8IGhhaWtpa2FuXCA7Civpu5Lpu7QgPCBrdXJva2FiaVwgOwor5b2T5LqL6ICFIDwgdG91amlzaGFcIDsKK+Wik+iqjOmKmCA8IGJvc2hpbWVpXCA7Civpu5LpuqYgPCBrdXJvbXVnaVwgOwor55+t5rC06LevIDwgdGFuc3Vpcm9cIDsKK+aIkOeoiyA8IG5hcnVob2RvXCA7CivllqvojLblupcgPCBraXNzYXRlblwgOwor5pmC6ZaT5bivIDwgamlrYW50YWlcIDsKK+eEoeawtOmFuCA8IG11c3Vpc2FuXCA7CivmiY3niakgPCBzYWlidXRzdVwgOwor6buS6be6IDwga3Vyb3NhZ2lcIDsKK+mJpOm8uyA8IGthZ2liYW5hXCA7CivnoLTpmLLms5UgPCBoYWJvdWhvdVwgOwor5re36KGAIDwga29ua2V0c3VcIDsKK+euseW6rSA8IGhha29uaXdhXCA7CivlkIjmrZPmnKggPCBuZW11bm9raVwgOwor5ouZ5oKqIDwgc2V0c3Vha3VcIDsKK+iBluatjOmaiiA8IHNlaWthdGFpXCA7Civpu5LptKggPCBrdXJvZ2Ftb1wgOwor6YqA6auqIDwgZ2lucGF0c3VcIDsKK+ibhuiZqyA8IHVqaW11c2hpXCA7CivljbDntJnnqI4gPCBpbnNoaXplaVwgOwor6KCN5bqnIDwgc2Fzb3JpemFcIDsKK+iiluS4iCA8IHNvZGV0YWtlXCA7CivmiKbnlaUgPCBzZW5yeWFrdVwgOwor5paH5oi/5YW3IDwgYnVuYm91Z3VcIDsKK+S/neeuoemHkSA8IGhva2Fua2luXCA7Civlm57li4UgPCBrYWljaG9rdVwgOwor5pyA5aSa5pWwIDwgc2FpdGFzdXVcIDsKK+S4jemAj+aYjiA8IGZ1dG91bWVpXCA7CivmoL3ln7nmiYAgPCBzYWliYWlqb1wgOwor5p6X5qqO6YWSIDwgcmluZ29zaHVcIDsKK+WbveS6uiA8IGt1bmliaXRvXCA7Civmr43ntLDog54gPCBib3NhaWJvdVwgOwor5aW95omT6ICFIDwga291ZGFzaGFcIDsKK+WGhuetkuW9oiA8IGVudG91a2VpXCA7CivmkYLplqLlrrYgPCBzZWtrYW5rZVwgOwor5q2j6KaP6LuNIDwgc2Vpa2lndW5cIDsKK+a1nOmiqCA8IGhhbWFrYXplXCA7CivluLjlpZflj6UgPCBqb3V0b3VrdVwgOwor56uq55C0IDwgdGF0ZWdvdG9cIDsKK+a4i+iMtiA8IHNoaWJ1Y2hhXCA7CivmnKrmsbrmuIggPCBtaWtlc3NhaVwgOwor6Jqw6JySIDwgZ2VqaWdlamlcIDsKK+e0jeaIuOiJsiA8IG5hbmRvaXJvXCA7Civmipfml6UgPCBrb3VuaWNoaVwgOwor6Z2e57ea5b2iIDwgaGlzZW5rZWlcIDsKK+miqOWRgumHnCA8IGZ1cm9nYW1hXCA7CivlvIHorbfkurogPCBiZW5nb25pblwgOwor5riL6ImyIDwgc2hpYnVpcm9cIDsKK+mOruWuiOW6nCA8IGNoaW5qdWZ1XCA7CivkuIDlvLXnvoUgPCBpdGNob3VyYVwgOwor5a2Q5Lya56S+IDwga29nYWlzaGFcIDsKK+S4jeWHjea4ryA8IGZ1dG91a291XCA7CivmtLvprZogPCBrYXRzdWd5b1wgOwor5Y215aGU5aC0IDwgcmFudG91YmFcIDsKK+S4reWkrumDqCA8IGNodXVvdWJ1XCA7CivkuI3lh43mtrIgPCBmdXRvdWVraVwgOwor5aSp56ek5bqnIDwgdGVuYmluemFcIDsKK+epuuiAsyA8IHNvcmFtaW1pXCA7CivljbHpmbrmgKcgPCBraWtlbnNlaVwgOwor5LiN5YeN5rW3IDwgZnV0b3VrYWlcIDsKK+Wkp+ecn+mdouebriA8IG9vbWFqaW1lXCA7CivnmbvlsbHluL0gPCB0b3phbmJvdVwgOwor6Yqt6YeRIDwgemVuaWthbmVcIDsKK+eFjuixhuiFkCA8IGlyaWRvdWZ1XCA7CivliLjlo7LmqZ8gPCBrZW5iYWlraVwgOwor5pmC6ZaT5aSWIDwgamlrYW5nYWlcIDsKK+aLneWvnyA8IGhhaXNhdHN1XCA7CivmsJflgJnluK8gPCBraWtvdXRhaVwgOwor5qW95Zmo5bqXIDwgZ2Fra2l0ZW5cIDsKK+aJv+acjSA8IHNob3VmdWt1XCA7CivmpJzpnZ7pgZXkvb8gPCBrZWJpaXNoaVwgOwor5oiq54S2IDwgc2V0c3V6ZW5cIDsKK+m+jeiInyA8IHJ5dXVzaHV1XCA7CivmnKzph5HluqsgPCBob25raW5rb1wgOwor6ZuE5byB5a62IDwgeXV1YmVua2FcIDsKK+S7mOW4r+eKryA8IGZ1dGFpaGFuXCA7Civopb/mtIvnooEgPCBzZWl5b3Vnb1wgOwor5oim5LqJ5b6MIDwgc2Vuc291Z29cIDsKK+aVj+iFleWutiA8IGJpbndhbmthXCA7CivkuK3ku6XkuIogPCBjaHV1aWpvdVwgOwor6auY5LiL6aeEIDwgdGFrYWdldGFcIDsKK+mdnuWjsuWTgSA8IGhpYmFpaGluXCA7Civmt7foibIgPCBrb25zaG9rdVwgOwor5L2V5Luj55uuIDwgbmFuZGFpbWVcIDsKK+mrmOaetue3miA8IGtvdWthc2VuXCA7CivmsLTpnaLkuIsgPCBzdWltZW5rYVwgOwor57K+5rK55omAIDwgc2VpeXVzaG9cIDsKK+adseilv+WxiyA8IHRvdXphaXlhXCA7CivmuqLmtYEgPCBpdHN1cnl1dVwgOwor6YqF54mI55S7IDwgZG91aGFuZ2FcIDsKK+aKleaKgCA8IG5hZ2V3YXphXCA7Civngorpo6/lmaggPCBzdWloYW5raVwgOwor5oiR54mpIDwgd2FnYW1vbm9cIDsKK+WFg+W4peW6nCA8IGdlbnN1aWZ1XCA7CivpvLvoqLEgPCBoYW5hbW90b1wgOwor6bOl5LmL5bejIDwgdG9yaW5vc3VcIDsKK+WMu+eZgui7iiA8IGlyeW91c2hhXCA7CivnibnnlbDmgKcgPCB0b2t1aXNlaVwgOwor5rqd5rOlIDwgZG9idWRvcm9cIDsKK+emhOmrmCA8IHJva3VkYWthXCA7Civlhqzoh7Pnt5ogPCB0b3VqaXNlblwgOwor56m/5a2U5qmfIDwgc2Vua291a2lcIDsKK+eEoeiTi+i7iiA8IG11Z2Fpc2hhXCA7Civmup3msLQgPCBkb2J1bWl6dVwgOwor56m657GkIDwga2FyYWt1amlcIDsKK+aKteaKl+WZqCA8IHRlaWtvdWtpXCA7CivokrjmsJfoiLkgPCBqb3VraXNlblwgOwor6Z2e6Kix5a65IDwgaGlreW95b3VcIDsKK+mBoOi/keazlSA8IGVua2luaG91XCA7CivpiYTpqqggPCB0ZWtrb3RzdVwgOwor5rmv54WZIDwgeXVrZW11cmlcIDsKK+a3oeiJsiA8IHRhbnNob2t1XCA7Civku67lrprms5UgPCBrYXRlaWhvdVwgOwor6KW/5rSL55S7IDwgc2VpeW91Z2FcIDsKK+engemJhCA8IHNoaXRldHN1XCA7CivpgZTno6jlv4wgPCBkYXJ1bWFraVwgOwor56eS6YCfIDwgYnlvdXNva3VcIDsKK+epuueusSA8IGthcmFiYWtvXCA7CivnqoHnq4sgPCB0b3R0YXRzdVwgOwor55Wz5oiQ6KqeIDwgam91c2VpZ29cIDsKK+aAquS6i+S7tiA8IGthaWppa2VuXCA7CivmiYDmjIHogIUgPCBzaG9qaXNoYVwgOwor5pOs5Lq65rOVIDwgZ2lqaW5ob3VcIDsKK+WUkOiNiSA8IGthcmFrdXNhXCA7CivmupblpKfmiYsgPCBqdW4nJ29vdGVcIDsKK+Wbnui7ouapnyA8IGthaXRlbmtpXCA7Civon7vloZogPCBhcmlkenVrYVwgOwor5r2u5YWIIDwgc2hpb3Nha2lcIDsKK+iZmuiqrCA8IGt5b3NldHN1XCA7CivooYDkvr8gPCBrZXRzdWJlblwgOwor5oim5rKhIDwgc2VuYm90c3VcIDsKK+WPr+WTgOebuCA8IGthd2Fpc291XCA7CivmjIflhYggPCB5dWJpc2FraVwgOwor6Yym57W1IDwgbmlzaGlraWVcIDsKK+S6pOmam+WutiA8IGtvdXNhaWthXCA7Civpm6LkubPmnJ8gPCByaW55dXVraVwgOwor56OB5oCn5bGkIDwgamlzZWlzb3VcIDsKK+i2iuWGrOmaiiA8IGV0dG91dGFpXCA7CivlvqHnhKHmspnmsbAgPCBnb2J1c2F0YVwgOwor5omL5p6VIDwgdGVtYWt1cmFcIDsKK+WPs+mhp+W3puechCA8IHVrb3NhYmVuXCA7CivorZzpnaLlj7AgPCBmdW1lbmRhaVwgOwor56eA6YC4IDwgc2h1dWl0c3VcIDsKK+S7ruWwj+WxiyA8IGthcmlnb3lhXCA7Civnm67oq5boposgPCBtb2t1cm9taVwgOwor56u55qeNIDwgdGFrZXlhcmlcIDsKK+a8lOeul+WtkCA8IGVuemFuc2hpXCA7Civpu5LpiYQgPCBrdXJvZ2FuZVwgOwor5pyJ6ZmQ5YCLIDwgeXV1Z2Vua29cIDsKK+aIuOmanOWtkCA8IHRvc2hvdWppXCA7Civlj6/pjZvmgKcgPCBrYXRhbnNlaVwgOwor5aSq6byT5YikIDwgdGFpa29iYW5cIDsKK+a1t+WdiuS4uyA8IHVtaWJvdXp1XCA7CivnrYnlvI8gPCB0b3VzaGlraVwgOwor6Jep6ZalIDwgaGFuYmF0c3VcIDsKK+a1gemHjyA8IHJ5dXVyeW91XCA7Civpu43prZrlrZAgPCBraWJpbmFnb1wgOwor56qB55m6IDwgdG9wcGF0c3VcIDsKK+mJpOmHnSA8IGthZ2liYXJpXCA7CivmipXlrr8gPCB0b3VzaHVrdVwgOwor5Za25p6X572yIDwgZWlyaW5zaG9cIDsKK+erueaelyA8IGNoaWt1cmluXCA7Civlm7rmnInlgKQgPCBrb3l1dWNoaVwgOwor5ZWT55m6IDwga2VpaGF0c3VcIDsKK+erueadkCA8IGNoaWt1emFpXCA7CivpgbrkvJ3lraYgPCBpZGVuZ2FrdVwgOwor6IKy56iu5omAIDwgaWt1c2h1am9cIDsKK+epuueZuiA8IGt1dWhhdHN1XCA7CivmiZXmi60gPCBmdXNzaG9rdVwgOwor6YeR6Y2N6YeRIDwga2lubWVra2lcIDsKK+elnumiqCA8IGthbWlrYXplXCA7CivmtYHpgJ8gPCByeXV1c29rdVwgOwor5rWB6YCaIDwgcnl1dXRzdXVcIDsKK+a7neW3nSA8IHRha2lnYXdhXCA7Civlj4LkuovlrpggPCBzYW5qaWthblwgOwor55u46KuH5omAIDwgc291ZGFuam9cIDsKK+eEoeeojuWTgSA8IG11emVpaGluXCA7CivnqYDnspIgPCBrb2t1cnl1dVwgOwor56uv5pyrIDwgdGFubWF0c3VcIDsKK+WUkOe0mSA8IGthcmFrYW1pXCA7Civlv5znrZTog70gPCBvdXRvdW5vdVwgOwor5qSc5ZWP5omAIDwga2VubW9uam9cIDsKK+WyoeWgtOaJgCA8IG9rYWJhc2hvXCA7CivlnLDolLXlsIogPCBqaXpvdXNvblwgOwor56m65LiW6L6eIDwga2FyYXNlamlcIDsKK+ihqOWFt+WxiyA8IGh5b3VndXlhXCA7CivlvJTmhbDph5EgPCBjaG91aWtpblwgOwor5Yid55Sj5ammIDwgc2hvc2FucHVcIDsKK+ibuOeEvCA8IHRha295YWtpXCA7CivnpZ3pm7sgPCBzaHVrdWRlblwgOwor5oGQ6b6NIDwga3lvdXJ5dXVcIDsKK+aal+iomOeJqSA8IGFua2ltb25vXCA7CivpurvphZTliaQgPCBtYXN1aXphaVwgOwor6Jeq5Yy76ICFIDwgeWFidWlzaGFcIDsKK+WTgeiWhCA8IHNoaW5hdXN1XCA7Civmi53lgJ8gPCBoYWlzaGFrdVwgOwor5L2V5pmC6aCDIDwgaXRzdWdvcm9cIDsKK+eorue0mSA8IHRhbmVnYW1pXCA7CivmuKnnhrEgPCBvbicnbmV0c3VcIDsKK+mJhOmJoiA8IHRlcHBhY2hpXCA7CivmuoDmnIggPCBtYW5nZXRzdVwgOwor6Y2L54mpIDwgbmFiZW1vbm9cIDsKK+S6jOe+qeeahCA8IG5pZ2l0ZWtpXCA7Civpm4Hnmq7ntJkgPCBnYW5waXNoaVwgOwor5pel5ZKM6KaLIDwgaGl5b3JpbWlcIDsKK+azoumiqCA8IG5hbWlrYXplXCA7CivnpL7kvJrpg6ggPCBzaGFrYWlidVwgOwor6ZGR5YilIDwga2FuYmV0c3VcIDsKK+m7kuixuSA8IGt1cm9oeW91XCA7CivmiL/miL8gPCBmdXNhZnVzYVwgOwor6buS6LGGIDwga3Vyb21hbWVcIDsKK+WIpeS4lueVjCA8IGJlc3Nla2FpXCA7CivnhKHlkI3msI8gPCBtdW1laXNoaVwgOwor6ZuH5YKt6ICFIDwga295b3VzaGFcIDsKK+WUkOeqgSA8IHRvdXRvdHN1XCA7CivntaLnt57lrZAgPCBheWFkb25zdVwgOwor5rim54q25paHIDwga2Fqb3Vtb25cIDsKK+m7meirviA8IG1va3VkYWt1XCA7Civoh6rli5Xou4ogPCBqaWRvdXNoYVwgOwor6Zmk6I2J5YmkIDwgam9zb3V6YWlcIDsKK+mHjum8oCA8IG5vbmV6dW1pXCA7CivkuI3lhazmraMgPCBmdWtvdXNlaVwgOwor6ZeY5oqA5aC0IDwgdG91Z2lqb3VcIDsKK+WWrOacqCA8IGt5b3Vib2t1XCA7Civpu5noqq0gPCBtb2t1ZG9rdVwgOwor5oGl6aqoIDwgY2hpa290c3VcIDsKK+S4u+iomOaGtiA8IHNodWtpb2t1XCA7CivmiYvlv4MgPCB0ZWdva29yb1wgOwor56qB54S2IDwgdG90c3V6ZW5cIDsKK+m8u+S4i+mVtyA8IGJpa2FjaG91XCA7CivmnIDlpKfljJYgPCBzYWlkYWlrYVwgOwor5oq85YiHIDwgb3NoaWtpcmlcIDsKK+mYsueCjuWJpCA8IGJvdWVuemFpXCA7CivmipHlnKcgPCB5b2t1YXRzdVwgOwor5oW256WdIDwga2Vpc2h1a3VcIDsKK+ethuWkqiA8IGZ1ZGVidXRvXCA7CivpiYTpgZMgPCB0ZXRzdWRvdVwgOwor5L2V5pmC6ZaTIDwgbmFuamlrYW5cIDsKK+ezu+e1seaouSA8IGtlaXRvdWp1XCA7CivlvqHoh6rouqsgPCBnb2ppc2hpblwgOwor5LiK6I+T5a2QIDwgam91Z2FzaGlcIDsKK+iZmuiEsSA8IGt5b2RhdHN1XCA7CivmsrPpsZIgPCBrYXdhbWFzdVwgOwor6KKr5rib5pWwIDwgaGlnZW5zdXVcIDsKK+aYn+adoeaXlyA8IHNlaWpvdWtpXCA7Civpiq3oi5QgPCB6ZW5pZ29rZVwgOwor56uL5pytIDwgdGF0ZWZ1ZGFcIDsKK+WZm+WCtyA8IGthbWlraXp1XCA7Civph47ptrIgPCBub2JpdGFraVwgOwor55aO5rC05oCnIDwgc29zdWlzZWlcIDsKK+iHquayu+aoqSA8IGppY2hpa2VuXCA7CivpgK7mjZXogIUgPCB0YWlob3NoYVwgOwor5ryU5Ye6IDwgZW5zaHV0c3VcIDsKK+m8u+e0mSA8IGhhbmFnYW1pXCA7CivmuKnmuKkgPCBudWt1bnVrdVwgOwor5LqM6aCt562LIDwgbml0b3VraW5cIDsKK+m8u+ezniA8IGhhbmFrdXNvXCA7CivntKDmtarkurogPCBzdXJvdW5pblwgOwor56eL5aC05omAIDwgYWtpYmFzaG9cIDsKK+iIueeBq+S6iyA8IGZ1bmFrYWppXCA7CivogrLnqK7lrrYgPCBpa3VzaHVrYVwgOwor5oKq6YCGIDwgYWt1Z3lha3VcIDsKK+ato+iqsuWkliA8IHNlaWthZ2FpXCA7CivnhYnnk6bloYAgPCByZW5nYWJlaVwgOwor5oKq6L6jIDwgYWt1cmF0c3VcIDsKK+iLseaWh+azlSA8IGVpYnVucG91XCA7CivmnKrmsbrlrpogPCBtaWtldHRlaVwgOwor6buS6KGoIDwga29rdWh5b3VcIDsKK+WBpeW6t+e+jiA8IGtlbmtvdWJpXCA7CivkuKHorbDpmaIgPCByeW91Z2lpblwgOwor5oSb5ZSx5q2MIDwgYWlzaG91a2FcIDsKK+S6jOacrOajkiA8IG5paG9uYm91XCA7CivpvLvnrYsgPCBoYW5hc3VqaVwgOwor5rKI6buZIDwgY2hpbm1va3VcIDsKK+mdkueJqeWxiyA8IGFvbW9ub3lhXCA7Civph5Hpq6ogPCBraW5wYXRzdVwgOwor5Luu5a6a5b2iIDwga2F0ZWlrZWlcIDsKK+mJiOixhiA8IG5hdGFtYW1lXCA7Civno6/pt7ggPCBpc29zaGlnaVwgOwor5rqd5bedIDwgZG9idWdhd2FcIDsKK+iHquWLleipniA8IGppZG91c2hpXCA7Civkvr/lrpzkuIogPCBiZW5naWpvdVwgOwor55Sw6IiO6aKoIDwgaW5ha2FmdXVcIDsKK+mNteadnyA8IGthZ2l0YWJhXCA7CivnpZ7pgJ8gPCBzaGluc29rdVwgOwor5pyd5b6h6aOvIDwgYXNhZ29oYW5cIDsKK+m7kuibhyA8IGt1cm9oZWJpXCA7CivmjIfmj67mqKkgPCBzaGlraWtlblwgOwor6Kit6KiI5ZuzIDwgc2Vra2VpenVcIDsKK+a6gOaCpiA8IG1hbicnZXRzdVwgOwor5oiR5oiRIDwgd2FyZXdhcmVcIDsKK+mDqOWkluiAhSA8IGJ1Z2Fpc2hhXCA7CivmuIXmvZQgPCBzZWlrZXRzdVwgOwor6JGs5YSA5aC0IDwgc291Z2lqb3VcIDsKK+ejgeaAp+S9kyA8IGppc2VpdGFpXCA7CivpioDmnKzkvY0gPCBnaW5ob24nJ2lcIDsKK+ethuWQjSA8IGhpdHN1bWVpXCA7CivmlL/lhZrlk6EgPCBzZWl0b3VpblwgOwor5a++5b+c5YCkIDwgdGFpb3VjaGlcIDsKK+i7jeiJpuaXlyA8IGd1bmthbmtpXCA7CivkuozkuZfmoLkgPCBuaWpvdWtvblwgOwor56iu55WcIDwgc2h1Y2hpa3VcIDsKK+aMh+aPruajkiA8IHNoaWtpYm91XCA7Civmr43lm73oqp4gPCBib2tva3Vnb1wgOwor55S755So57SZIDwgZ2F5b3VzaGlcIDsKK+mKheiJsiA8IGRvdXNob2t1XCA7CivmpJzmuKnlmaggPCBrZW4nJ29ua2lcIDsKK+WPjemqqCA8IGhhbmtvdHN1XCA7CivllYbms4EgPCBzaG91a3lvdVwgOwor6aeG5r2c6ImHIDwga3VzZW50ZWlcIDsKK+WgleiDjue9qiA8IGRhdGFpemFpXCA7Civmub/luqYgPCBzaGl0c3Vkb1wgOwor56OB5rCX5a2mIDwgamlraWdha3VcIDsKK+ifhOS8jyA8IGNoaXBwdWt1XCA7CivmtYXokbEgPCBhc2F0c3VraVwgOwor5oeQ54KJ54GwIDwga2Fpcm9iYWlcIDsKK+imgeazqOaEjyA8IHlvdWNodXVpXCA7CivliJ3nlJ/lhZAgPCBzaG9zZWlqaVwgOwor5oiS5b6LIDwga2Fpcml0c3VcIDsKK+S4jemuruaYjiA8IGZ1c2VubWVpXCA7Civnq7rlraYgPCBqaWt1Z2FrdVwgOwor5aSp6bWe57WoIDwgYmlyb3Vkb3VcIDsKK+WQueiyqyA8IGZ1a2ludWtpXCA7CivnrLnljp8gPCBzYXNhaGFyYVwgOwor56qT5p6gIDwgbWFkb3dha3VcIDsKK+WUkOeJqSA8IHRvdW1vdHN1XCA7Civoo73ns5bmiYAgPCBzZWl0b3Vqb1wgOwor56uv5bGAIDwgdGFua3lva3VcIDsKK+aKnuS4gCA8IHRha3VpdHN1XCA7CivlhYjpp4bogIUgPCBzZW5rdXNoYVwgOwor5Yqp5oiQ6YeRIDwgam9zZWlraW5cIDsKK+a4oeadpeS6uiA8IHRvcmFpamluXCA7CivnrYblhYggPCBmdWRlc2FraVwgOwor6YCf6KiY6ICFIDwgc29ra2lzaGFcIDsKK+mKreeusSA8IHplbmliYWtvXCA7CivpjKjms4ogPCBieW91aGFrdVwgOwor6Imm6LyJ5qmfIDwga2Fuc2Fpa2lcIDsKK+a3t+a1tCA8IGtvbicneW9rdVwgOwor5rex5rexIDwgZnVrYWJ1a2FcIDsKK+iXquibhyA8IHlhYnVoZWJpXCA7Civoo73nsonmqZ8gPCBzZWlmdW5raVwgOwor5Lmx5bGk6ZuyIDwgcmFuc291dW5cIDsKK+WPguS6i+S8miA8IHNhbmppa2FpXCA7CivnqK7niakgPCB0YW5lbW9ub1wgOwor56iu54mbIDwgdGFuZXVzaGlcIDsKK+ibh+avkiA8IGhlYmlkb2t1XCA7CivmiIzlubQgPCBpbnVkb3NoaVwgOwor6YGV5rOV6KGM54K6IDwgaWhvdWtvdWlcIDsKK+aOkuawl+W8gSA8IGhhaWtpYmVuXCA7Civmu5HliaQgPCBrYXRzdXphaVwgOwor6buS6Ii5IDwga3Vyb2Z1bmVcIDsKK+ato+e1sea0viA8IHNlaXRvdWhhXCA7CivpioDnv7wgPCBnaW4nJ3lva3VcIDsKK+azpei2syA8IGRvcm9hc2hpXCA7Civoo5zkvZDlvbkgPCBob3NheWFrdVwgOwor6Y6M5b2iIDwga2FtYWdhdGFcIDsKK+acqumFjeW9kyA8IG1paGFpdG91XCA7Civmu4XljbQgPCBtZWtreWFrdVwgOwor5piv6Z2e5YWxIDwgemVoaXRvbW9cIDsKK+mHo+mKrSA8IHRzdXJpc2VuXCA7CivmnKrliIrooYwgPCBtaWthbmtvdVwgOwor5p6i5qmf5Y2/IDwgc3V1a2lrZWlcIDsKK+acqumBgue9qiA8IG1pc3VpemFpXCA7CivmlofljJbosqEgPCBidW5rYXphaVwgOwor5q2m6KOF6Ii5IDwgYnVzb3VzZW5cIDsKK+iomOiAheWboyA8IGtpc2hhZGFuXCA7CivllYbmpa0gPCBzaG91Z3lvdVwgOwor5b6h55So6YK4IDwgZ295b3V0ZWlcIDsKK+W+oeWFiOajkiA8IG9zYWtpYm91XCA7CivpibHohIggPCBrb3VteWFrdVwgOwor6JqK54e7IDwga2FpYnVzaGlcIDsKK+WQg+mAhiA8IHNoYWtrdXJpXCA7Civpurnoj4wgPCBrb3VqaWtpblwgOwor5a6a5q+U5L6LIDwgdGVpaGlyZWlcIDsKK+WRveiEiCA8IG1laW15YWt1XCA7Civlr4zlo6vlt50gPCBmdWppa2F3YVwgOwor6buS6IKJIDwga3Vyb25pa3VcIDsKK+m6puiXgSA8IG11Z2l3YXJhXCA7CivnlKPljbXmnJ8gPCBzYW5yYW5raVwgOwor56u55Z6jIDwgdGFrZWdha2lcIDsKK+WIhuebuOapnyA8IGJ1bnNvdWtpXCA7CivpjZvmjqUgPCB0YW5zZXRzdVwgOwor6Yed6YeRIDwgaGFyaWdhbmVcIDsKK+S8muaEj+aWh+WtlyA8IGthaWltb2ppXCA7CivpioDnuIEgPCBnaW5idWNoaVwgOwor5LiK5bGk6ZuyIDwgam91c291dW5cIDsKK+mHkemMhiA8IGthbmFzYWJpXCA7CivnqI7njocgPCB6ZWlyaXRzdVwgOwor56uL5bGxIDwgdGF0ZXlhbWFcIDsKK+S4ieasoeWFgyA8IHNhbmppZ2VuXCA7CivnvqTppqznnIwgPCBndW5tYWtlblwgOwor6bqm6JKUIDwgbXVnaW1ha2lcIDsKK+WPpOmHkSA8IGZ1cnVnYW5lXCA7CivllYTmnKggPCB0YWt1Ym9rdVwgOwor5Y+j6YeNIDwga3VjaGlvbW9cIDsKK+WFteermemDqCA8IGhlaXRhbmJ1XCA7CivkuI3lhazlubMgPCBmdWtvdWhlaVwgOwor5riH5pybIDwga2F0c3Vib3VcIDsKK+aJjeWKmyA8IHNhaXJ5b2t1XCA7Civlj6TphZIgPCBmdXJ1emFrZVwgOwor5YmN6by757eSIDwgbWFlaGFuYW9cIDsKK+S4jeWHjeWJpCA8IGZ1dG91emFpXCA7CivpvLvnhoogPCBoYW5hZ3VtYVwgOwor6Yyr5p2WIDwgc2hha3Vqb3VcIDsKK+epuuaSriA8IGt1dXNhdHN1XCA7Civpu5nntIQgPCBtb2t1eWFrdVwgOwor54mp55yf5Ly8IDwgbW9ub21hbmVcIDsKK+mBiuatqemBkyA8IHl1dWhvZG91XCA7CivnpL7oqqwgPCBzaGFzZXRzdVwgOwor5rWF57eRIDwgc2Vucnlva3VcIDsKK+aJi+WIgCA8IHRlZ2F0YW5hXCA7CivlkIjnuIHlpYfnuIEgPCBhaWVua2llblwgOwor54Sh5Yi26ZmQIDwgbXVzZWlnZW5cIDsKK+epjealtSA8IHNla2t5b2t1XCA7CivmiZPlgrcgPCB1Y2hpa2l6dVwgOwor6YmE6ImyIDwgdGV0c3Vpcm9cIDsKK+S9k+iCsuWutiA8IHRhaWlrdWthXCA7CivliIblspDpp4UgPCBidW5raWVraVwgOwor56aP6ICzIDwgZnVrdW1pbWlcIDsKK+a7heS6oSA8IG1ldHN1Ym91XCA7CivljLvnmYLnlKggPCBpcnlvdXlvdVwgOwor5oWE54S2IDwgcml0c3V6ZW5cIDsKK+WQjOiqrCA8IGRvdXNldHN1XCA7CivnqpLmga8gPCBjaGlzc29rdVwgOwor5Y+z6LazIDwgbWlnaWFzaGlcIDsKK+mAruaNleeKtiA8IHRhaWhvam91XCA7Civmspbph6MgPCBva2lkenVyaVwgOwor6YGO5Y675bizIDwga2Frb2Nob3VcIDsKK+m7kuexsyA8IGt1cm9nb21lXCA7CivmqZ/li5XmgKcgPCBraWRvdXNlaVwgOwor6YmE6IWVIDwgdGV0c3V3YW5cIDsKK+WPm+mAhiA8IGhhbmd5YWt1XCA7CivnhrHpoqjngokgPCBuZXBwdXVyb1wgOwor5q2p6KGM6ICFIDwgaG9rb3VzaGFcIDsKK+m7nueptCA8IHRlbmtldHN1XCA7CivmsLTps6UgPCBtaXp1ZG9yaVwgOwor5rqA5ZarIDwgbWFua2l0c3VcIDsKK+WGhumMkOW9oiA8IGVuc3Vpa2VpXCA7CivmiJHlm70gPCB3YWdha3VuaVwgOwor5a6I6Yqt5aW0IDwgc2h1c2VuZG9cIDsKK+mBk+WMluW4qyA8IGRvdWtlc2hpXCA7CivmgqroiIwgPCBha3V6ZXRzdVwgOwor6JmO54yrIDwgdG9yYW5la29cIDsKK+S4i+iFuemDqCA8IGthZnVrdWJ1XCA7Civlj43mlL/lupwgPCBoYW5zZWlmdVwgOwor5Zue6Lui5YSAIDwga2FpdGVuZ2lcIDsKK+S4iuiNieWxpSA8IHV3YXpvdXJpXCA7CivnsbPkuIrpmaIgPCBiZWlqb3VpblwgOwor5rSS6ISxIDwgc2hhZGF0c3VcIDsKK+m6u+e2sSA8IGFzYWR6dW5hXCA7Civpu5Dnq78gPCBtb2NoaXphb1wgOwor5pyd56i95Y+kIDwgYXNhZ2Vpa29cIDsKK+WQq+iThCA8IGdhbmNoaWt1XCA7Civoo73nsonmiYAgPCBzZWlmdW5qb1wgOwor6KKr5rK76ICFIDwgaGljaGlzaGFcIDsKK+WPgumFjCA8IHNhbnNoYWt1XCA7Civlrq7nlLDlrrYgPCBtaXlhdGFrZVwgOwor6L+R6KGb5YW1IDwga29ub2VoZWlcIDsKK+WyqeaJi+ecjCA8IGl3YXRla2VuXCA7CivpgKPpmorml5cgPCByZW50YWlraVwgOwor566h5qW95ZmoIDwga2FuZ2Fra2lcIDsKK+isneaBqeS8miA8IHNoYW9ua2FpXCA7CivppIronILlrrYgPCB5b3Vob3VrYVwgOwor5LqU57ea57SZIDwgZ29zZW5zaGlcIDsKK+WQhOihjCA8IGtha3VneW91XCA7CivpjYvlupUgPCBuYWJlem9rb1wgOwor5bmz55Sf552AIDwgaGVpemVpZ2lcIDsKK+apn+W4huiIuSA8IGtpaGFuc2VuXCA7CivmgqrogIUgPCB3YXJ1bW9ub1wgOwor6by75rC0IDwgaGFuYW1penVcIDsKK+mdnuaOkuawtCA8IGhpaGFpc3VpXCA7CivnnYDnlarlj7cgPCBraWJhbmdvdVwgOwor5LiN5YCr572qIDwgZnVyaW56YWlcIDsKK+mjtOe0sOW3pSA8IGFtZXphaWt1XCA7Civlgb3kvLznl4cgPCBnaWppc2hvdVwgOwor5aSn5bqD6ZaTIDwgb29oaXJvbWFcIDsKK+mBv+mbo+iAhSA8IGhpbmFuc2hhXCA7CivlrprluLjms6IgPCB0ZWlqb3VoYVwgOwor5LuY5bGe6KqeIDwgZnV6b2t1Z29cIDsKK+aCtue1tiA8IG1vbnpldHN1XCA7CivlubTkvJrosrsgPCBuZW5rYWloaVwgOwor5pWF6LK36ICFIDwga29iYWlzaGFcIDsKK+S6lOWkp+a0iyA8IGdvZGFpeW91XCA7Civnq4vlkb0gPCByaXRzdW1laVwgOwor54+q6Je75ZyfIDwga2Vpc291ZG9cIDsKK+WOs+mBlCA8IGdlbnRhdHN1XCA7CivkurrlkI3nsL8gPCBqaW5tZWlib1wgOwor5o6S5rCX5Y+jIDwgaGFpa2lrb3VcIDsKK+mBv+WmiuazlSA8IGhpbmluaG91XCA7CivnibnkvqHlk4EgPCB0b2trYWhpblwgOwor6YeN6KqsIDwganV1c2V0c3VcIDsKK+aPmuaKl+avlCA8IHlvdWtvdWhpXCA7CivpjYvlsLsgPCBuYWJlamlyaVwgOwor6L6e5pu46aGeIDwgamlzaG9ydWlcIDsKK+Wkp+W+gOeUnyA8IGRhaW91am91XCA7Civov73otbfoqLQgPCB0c3Vpa2lzb1wgOwor5rC36ZyHIDwgaHlvdXNoaW5cIDsKK+mBjuWNiuaVsCA8IGthaGFuc3V1XCA7CivpiYTnrYYgPCB0ZXBwaXRzdVwgOwor5a6J5oGv5pelIDwgYW5zb2t1YmlcIDsKK+WGjea1ruS4iiA8IHNhaWZ1am91XCA7CivmtLvnnLwgPCBrYXRzdWdhblwgOwor5Zuz5pu45Yi4IDwgdG9zaG9rZW5cIDsKK+eZuui1t+S6uiA8IGhva2tpbmluXCA7CivmtJ7nqp8gPCBkb3VrdXRzdVwgOwor6YGT5YW36KuWIDwgZG91Z3Vyb25cIDsKK+WIhuebuOW/nCA8IGJ1bnNvdW91XCA7CivmiJHlhJggPCB3YWdhbWFtYVwgOwor56uL5YCZ6KOcIDwgcmlra291aG9cIDsKK+mBv+aakeWcsCA8IGhpc2hvY2hpXCA7CivmsLTpmpsgPCBtaXp1Z2l3YVwgOwor5o6l6aqo5pyoIDwgbml3YXRva29cIDsKK+ekvuS8muenkSA8IHNoYWthaWthXCA7Civph43opIcgPCBjaG91ZnVrdVwgOwor5rS755m6IDwga2FwcGF0c3VcIDsKK+S4iuapn+WrjCA8IGpvdWtpZ2VuXCA7CivkuqTmj5vmiYAgPCBrb3VrYW5qb1wgOwor5Zac5q2M5YqHIDwga2lrYWdla2lcIDsKK+a3u+WKoOWJpCA8IHRlbmthemFpXCA7CivmnKrlvqnlk6EgPCBtaWZ1a3VpblwgOwor5raI5rKIIDwgc2hvdWNoaW5cIDsKK+ismemBnOiqniA8IGtlbnNvbmdvXCA7CivmnKrlh6bnva4gPCBtaXNob2NoaVwgOwor5oKq562GIDwgYWt1aGl0c3VcIDsKK+WcsOW9ouWbsyA8IGNoaWtlaXp1XCA7CivmnKrnn6XmlbAgPCBtaWNoaXN1dVwgOwor56Gs6aqoIDwga291a290c3VcIDsKK+WFq+a9rui3ryA8IHlhc2hpb2ppXCA7CivmsqLooI8gPCBzYXdhZ2FuaVwgOwor5Luj55CG6ICFIDwgZGFpcmlzaGFcIDsKK+aGq+WvnyA8IGJpbnNhdHN1XCA7CivpupfnrYYgPCByZWloaXRzdVwgOwor6JeB57SZIDwgd2FyYWdhbWlcIDsKK+i7jeS7pOmDqCA8IGd1bnJlaWJ1XCA7Civnq4vlg48gPCByaXRzdXpvdVwgOwor5qiq5paH5a2XIDwgeW9rb21vamlcIDsKK+a0u+eUqCA8IGthdHN1eW91XCA7Civmtojmr5IgPCBzaG91ZG9rdVwgOwor5aSq5Y+k5LujIDwgdGFpa29kYWlcIDsKK+aIkeS6uiA8IHdhcmVoaXRvXCA7CivpjYvloqggPCBuYWJlenVtaVwgOwor6buS54yrIDwga3Vyb25la29cIDsKK+aIkeS6iyA8IHdhZ2Frb3RvXCA7Civlub7kvZXlraYgPCBraWthZ2FrdVwgOwor6KW/5rSL5YyWIDwgc2VpeW91a2FcIDsKK+WIkeS9meiAhSA8IGtlaXlvc2hhXCA7CivmuKHkuJbkurogPCB0b3NlaW5pblwgOwor5ZCM6IOeIDwgaGFyYWthcmFcIDsKK+e+hemHneWEgCA8IHJhc2hpbmdpXCA7CivlrZDpn7PnvqQgPCBzaGlpbmd1blwgOwor5pqX6Ki85YyWIDwgYW5zaG91a2FcIDsKK+a7kei1sOi3ryA8IGthc3NvdXJvXCA7Civoo73lm7Pmnb8gPCBzZWl6dWJhblwgOwor55qH57Wx6K2cIDwga291dG91ZnVcIDsKK+eQhuWtpumDqCA8IHJpZ2FrdWJ1XCA7CivnqbrlpKIgPCBzb3JheXVtZVwgOwor5rOl57iEIDwgZG9yb25hd2FcIDsKK+iLseiqnuWhviA8IGVpZ29qdWt1XCA7CivphYvplbcgPCBzaHV1Y2hvdVwgOwor5oKy5Zac5YqHIDwgaGlraWdla2lcIDsKK+S/neeuoeaelyA8IGhva2FucmluXCA7CivljYrpnbQgPCBoYW5ndXRzdVwgOwor5oK2552AIDwgbW9uY2hha3VcIDsKK+WGjeatpuijhSA8IHNhaWJ1c291XCA7Civpu5LnhoogPCBrdXJvZ3VtYVwgOwor6JKy6a2aIDwga2FtYXRvdG9cIDsKK+WWieWFgyA8IG5vZG9tb3RvXCA7CivnqbrloIAgPCBrYXJhYm9yaVwgOwor6LWk6Jy76JuJIDwgYWthdG9uYm9cIDsKK+iWhOiGnCA8IGhha3VtYWt1XCA7Civnqq/lhYMgPCBrYW1hbW90b1wgOwor5rib5ZynIDwgZ2VuJydhdHN1XCA7CivnhKHovrrpmpsgPCBtdWhlbnphaVwgOwor5LiN6Ieq54S2IDwgZnVzaGl6ZW5cIDsKK+iFjuS4jeWFqCA8IGppbmZ1emVuXCA7CivnqJrmi5kgPCBjaGlzZXRzdVwgOwor56WQ562GIDwgeXV1aGl0c3VcIDsKK+WutOS8muWgtCA8IGVua2Fpam91XCA7Civlj6TojYkgPCBmdXJ1a3VzYVwgOwor5LiN5L+h6ICFIDwgZnVzaGluamFcIDsKK+WPo+iNkiA8IGt1Y2hpYXJhXCA7CivljZjmnKzkvY0gPCB0YW5ob24nJ2lcIDsKK+WGhumMkOWPsCA8IGVuc3VpZGFpXCA7CivnpZ3npa0gPCBzaHVrdXNhaVwgOwor5Zug5p6c6ICFIDwgaW5nYW1vbm9cIDsKK+S4jeS/oee+qSA8IGZ1c2hpbmdpXCA7CivljYrplbcgPCBoYW4nJ25hZ2FcIDsKK+mJhOeTtiA8IHRldHN1YmluXCA7CivmsLTpg6ggPCBtaXp1bm9idVwgOwor6LuN5LqL6Z2iIDwgZ3VuamltZW5cIDsKK+aBkuays+aymSA8IGdvdWdhc2hhXCA7CivmgqrnmZYgPCB3YXJ1Z3VzZVwgOwor6buS5r2uIDwga3Vyb3NoaW9cIDsKK+iThOmbuyA8IGNoaWt1ZGVuXCA7Civmr43ps6UgPCBoYWhhZG9yaVwgOwor6Ieq5rK75L2TIDwgamljaGl0YWlcIDsKK+edgOWwuuWcsCA8IGtpamFrdWppXCA7CivlvozljYrmnJ8gPCBrb3VoYW5raVwgOwor5Y+j6IiMIDwga291emV0c3VcIDsKK+elneegsiA8IHNodWt1aG91XCA7Civmr5vpq6ogPCBtb3VoYXRzdVwgOwor6Ieq5rK75LyaIDwgamljaGlrYWlcIDsKK+S+oeWApOimsyA8IGthY2hpa2FuXCA7Civopb/pgYroqJggPCBzZWl5dXVraVwgOwor55uj5p+75aeU5ZOhIDwga2Fuc2FpaW5cIDsKK+ekvOevgCA8IHJlaXNldHN1XCA7CivlubTku6PoqJggPCBuZW5kYWlraVwgOwor5oSf5oOF5a62IDwga2Fuam91a2FcIDsKK+aWh+WMluelrSA8IGJ1bmthc2FpXCA7Civlj4rokL0gPCBreXV1cmFrdVwgOwor6YqD5q66IDwganV1c2F0c3VcIDsKK+WkieaPm+WZqCA8IGhlbmthbmtpXCA7Civmg4XnhrEgPCBqb3VuZXRzdVwgOwor5LiW55WM5Y+yIDwgc2VrYWlzaGlcIDsKK+WPl+eyvuWNtSA8IGp1c2VpcmFuXCA7Civph5HohIggPCBraW5teWFrdVwgOwor5Y+q6ICFIDwgdGFkYW1vbm9cIDsKK+aHh+WIhyA8IGtvbnNldHN1XCA7CivnpoHniakgPCBraW5tb3RzdVwgOwor5bm055Sy5paQIDwgdG9zaGlnYWlcIDsKK+iZkOaUvyA8IGd5YWt1c2VpXCA7CivlkI3nrYYgPCBtZWloaXRzdVwgOwor56K66Ki8IDwga2FrdXNob3VcIDsKK+WQjOethiA8IGRvdWhpdHN1XCA7CivphY3pgZQgPCBoYWl0YXRzdVwgOwor5rOl5LuV5ZCIIDwgZG9yb2ppYWlcIDsKK+a4heWtkOmfsyA8IHNlaXNoaWluXCA7CivkuozmnJ/kvZwgPCBuaWtpc2FrdVwgOwor6Yu45bGRIDwgbm9rb2t1enVcIDsKK+aoque0i+etiyA8IG91bW9ua2luXCA7Civmt4Dlt50gPCB5b2RvZ2F3YVwgOwor6YGL5YuV55WMIDwgdW5kb3VrYWlcIDsKK+aDkea6uiA8IHdha3VkZWtpXCA7CivmnKrnmbroposgPCBtaWhha2tlblwgOwor5rWF5rKTIDwgYXNhZ3V0c3VcIDsKK+WQjOeptCA8IGRvdWtldHN1XCA7Civlgbblg4/ljJYgPCBndXV6b3VrYVwgOwor6KOc6IG05ZmoIDwgaG9jaG91a2lcIDsKK+iLseiqnuWKhyA8IGVpZ29nZWtpXCA7Civph6Pns7ggPCB0c3VyaWl0b1wgOwor6Zu7566X5qmfIDwgZGVuc2Fua2lcIDsKK+a0l+eGiiA8IGFyYWlndW1hXCA7Civlho3lkJ/lkbMgPCBzYWlnaW5taVwgOwor6YeN572wIDwganV1YmF0c3VcIDsKK+WGhumMkOS9kyA8IGVuc3VpdGFpXCA7CivmtYHmsLcgPCByeXV1aHlvdVwgOwor5rOo55uuIDwgY2h1dW1va3VcIDsKK+mdkuWkqeS6lSA8IGFvdGVuam91XCA7Civlj4zohJogPCBzb3VreWFrdVwgOwor5rWq5puyIDwgcm91a3lva3VcIDsKK+mdnuaIpuirliA8IGhpc2Vucm9uXCA7CivmnKrnmbrooYwgPCBtaWhha2tvdVwgOwor55u45aC05birIDwgc291YmFzaGlcIDsKK+WPpOaIpuWgtCA8IGtvc2Vuam91XCA7CivkuInnlbPntIAgPCBzYW5qb3VraVwgOwor5aW95oSP55qEIDwga291aXRla2lcIDsKK+W+oemms+i1sCA8IGdvY2hpc291XCA7Civph5HnuIEgPCBraW5idWNoaVwgOwor5Y2K6YGTIDwgaGFubWljaGlcIDsKK+WMl+mZuCA8IGhva3VyaWt1XCA7CivmibbppIrogIUgPCBmdXlvdXNoYVwgOwor5Y2B5a2X6LuNIDwganV1amlndW5cIDsKK+aMieaJi+ekvCA8IGFuc2h1cmVpXCA7CivlkIzkvY3op5IgPCBkb3Vpa2FrdVwgOwor5Y6f6JasIDwgZ2VuJyd5YWt1XCA7CivljbPoq74gPCBzb2t1ZGFrdVwgOwor5rS75q66IDwga2Fzc2F0c3VcIDsKK+WRqOa1gSA8IHNodXVyeXV1XCA7CivovKrou6LmqZ8gPCByaW50ZW5raVwgOwor56iy5aa7IDwgaW5hZHp1bWFcIDsKK+WOreS6uuiAhSA8IGVuamluc2hhXCA7CivnhKHphY3lvZMgPCBtdWhhaXRvdVwgOwor5ZSQ5aKoIDwga2FyYXN1bWlcIDsKK+WvjOijleeojiA8IGZ1eXV1emVpXCA7CivnlbDlj6PlkIzpn7MgPCBpa3Vkb3VvblwgOwor6Yej56u/IDwgdHN1cml6YW9cIDsKK+mBjuWKtOatuyA8IGthcm91c2hpXCA7CivntIXooZvlhbUgPCBrb3VlaWhlaVwgOwor6Yed566xIDwgaGFyaWJha29cIDsKK+euoeeQhuiAhSA8IGthbnJpc2hhXCA7CivlpJzllYbkurogPCB5b2FraW5kb1wgOwor6IiM5LiL6IW6IDwgemVra2FzZW5cIDsKK+aJgOaMgeWTgSA8IHNob2ppaGluXCA7CivntIDooYzmlocgPCBraWtvdWJ1blwgOwor54Gr5bGx54GwIDwga2F6YW5iYWlcIDsKK+mojuWjq+mBkyA8IGtpc2hpZG91XCA7CivlibDkvZnph5EgPCBqb3V5b2tpblwgOwor5Y2T6LaKIDwgdGFrdWV0c3VcIDsKK+ixiuawtOacnyA8IGhvdXN1aWtpXCA7CivkvY7og73lhZAgPCB0ZWlub3VqaVwgOwor5biw57SN5rOVIDwga2lub3Vob3VcIDsKK+eNheWtkOW6pyA8IHNoaXNoaXphXCA7CivkuqTmj5vlmaggPCBrb3VrYW5raVwgOwor5LiW55WM5Lq6IDwgc2VrYWlqaW5cIDsKK+ihm+eUn+maiiA8IGVpc2VpdGFpXCA7Civlj5bntYQgPCB0b3Jpa3VtaVwgOwor6JKy6Ym+IDwga2FtYWJva29cIDsKK+a1t+aKnCA8IGthaWJhdHN1XCA7Civph5HnrrEgPCBrYW5lYmFrb1wgOwor55CG5LqL6ZW3IDwgcmlqaWNob3VcIDsKK+W5s+Wxi+aguSA8IGhpcmF5YW5lXCA7Civmtojmga8gPCBzaG91c29rdVwgOwor5YWD6ICB6ZmiIDwgZ2Vucm91aW5cIDsKK+ajhOaoqeiAhSA8IGtpa2Vuc2hhXCA7CivkuJbnlYzkuK0gPCBzZWthaWp1dVwgOwor5rKz5Y+j5rivIDwga2Frb3Vrb3VcIDsKK+WPo+esmyA8IGt1Y2hpYnVlXCA7Civljp/ojLggPCBoYXJhdGFrZVwgOwor6bSb6bSmIDwgb3NoaWRvcmlcIDsKK+iWrOeOiSA8IGt1c3VkYW1hXCA7CivkuI3kvZPoo4EgPCBmdXRlaXNhaVwgOwor6JmQ5b6FIDwgZ3lha3V0YWlcIDsKK+avkuicmOibmyA8IGRva3VndW1vXCA7CivljZjoqp7nr4cgPCB0YW5nb2hlblwgOwor6buS5p6gIDwga3Vyb3dha3VcIDsKK+mHkeeptCA8IGtpbmtldHN1XCA7CivnlJ/lvpLmlbAgPCBzZWl0b3N1dVwgOwor6buS5pyNIDwga3Vyb2Z1a3VcIDsKK+e+iuearue0mSA8IHlvdWhpc2hpXCA7Civli53ppqwgPCBrYWNoaXVtYVwgOwor56C06ZCYIDwgd2FyZWdhbmVcIDsKK+W/heimgSA8IGhpdHN1eW91XCA7Civmt7flhaUgPCBrb24nJ255dXVcIDsKK+avjeezu+WItiA8IGJva2Vpc2VpXCA7CivlsZXnpLrloLQgPCB0ZW5qaWpvdVwgOwor5b+N6KGTIDwgbmluanV0c3VcIDsKK+WOs+e9sCA8IGdlbmJhdHN1XCA7Civlvozpgbrnl4cgPCBrb3Vpc2hvdVwgOwor5rWB5pyoIDwgcnl1dWJva3VcIDsKK+mIjeeJqSA8IGRvbmJ1dHN1XCA7CivlvJXngavmuKnluqYgPCBpbmthb25kb1wgOwor5Y+455u0IDwgc2hpY2hva3VcIDsKK+emgeassiA8IGtpbicneW9rdVwgOwor5riH5LuwIDwga2F0c3Vnb3VcIDsKK+enqeW6jyA8IGNoaXRzdWpvXCA7CivljZLoq5YgPCBzb3RzdXJvblwgOwor5LiN5a6a6KmeIDwgZnV0ZWlzaGlcIDsKK+awtOicnCA8IHN1aW1pdHN1XCA7CivliqDmi4XogIUgPCBrYXRhbnNoYVwgOwor55+z6auYIDwga29rdWRha2FcIDsKK+mZvembu+awlyA8IHlvdWRlbmtpXCA7Civlkb3ml6UgPCBtZWluaWNoaVwgOwor5b6p6K6QIDwgZnVrdXNodXVcIDsKK+Wuo+S8neiyuyA8IHNlbmRlbmhpXCA7CivlkIznjocgPCBkb3VyaXRzdVwgOwor5oOc5pilIDwgc2VraXNodW5cIDsKK+WKh+aYoOeUuyA8IGdla2llaWdhXCA7CivnpLzniakgPCByZWltb3RzdVwgOwor55+t6auqIDwgdGFucGF0c3VcIDsKK+iZmuWunyA8IGt5b2ppdHN1XCA7CivmgYvnnYAgPCByZW5jaGFrdVwgOwor6Zi/5Y+k5bGL6LKdIDwgYWtveWFnYWlcIDsKK+mBiuiVqeWFkCA8IHl1dXRvdWppXCA7Civlvqnoqr8gPCBmdWt1Y2hvdVwgOwor6YeR5rqA5a62IDwga2lubWFua2FcIDsKK+mMoOWJjeWxiyA8IGpvdW1hZXlhXCA7Civnn6XlkI3luqYgPCBjaGltZWlkb1wgOwor5ZCN54mpIDwgbWVpYnV0c3VcIDsKK+WMl+mAsiA8IGhva3VzaGluXCA7Civlh7rpsYjnm64gPCBkZXRhcmFtZVwgOwor6buE5piPIDwgdGFzb2dhcmVcIDsKK+aHh+ipseS8miA8IGtvbndha2FpXCA7Civpgb/pm6PmsJEgPCBoaW5hbm1pblwgOwor5Y+y55WlIDwgc2hpcnlha3VcIDsKK+WNgeWtl+ihlyA8IGp1dWppZ2FpXCA7CivkuLvmvJTogIUgPCBzaHVlbnNoYVwgOwor5rOl5r+YIDwgbnVrYXJ1bWlcIDsKK+iXpOajmiA8IGZ1amlkYW5hXCA7CivkuJbkv5fljJYgPCBzZXpva3VrYVwgOwor57KX6KO95ZOBIDwgc29zZWloaW5cIDsKK+WOs+eymyA8IGdlbnNodWt1XCA7CivpiYTmo5IgPCB0ZXRzdWJvdVwgOwor6bOp6bqmIDwgaGF0b211Z2lcIDsKK+WPs+W/g+aIvyA8IHVzaGluYm91XCA7CivlnKfliLbogIUgPCBhc3NlaXNoYVwgOwor5bGV56S65ZOBIDwgdGVuamloaW5cIDsKK+mJhOaigyA8IGthbmF0ZWtvXCA7CivokL3prYQgPCByYWt1aGFrdVwgOwor6YeP55qEIDwgcnlvdXRla2lcIDsKK+W/oOiJryA8IGNodXVyeW91XCA7Civmm7joqJjlrpggPCBzaG9raWthblwgOwor6YO35Zyf5oSbIDwga3lvdWRvYWlcIDsKK+iyr+iUteW6qyA8IGNob3pvdWtvXCA7Civol6nmnK0gPCBoYW5zYXRzdVwgOwor55Sf55yf6Z2i55uuIDwga2ltYWppbWVcIDsKK+S4i+mmrOiplSA8IGdlYmFoeW91XCA7CivkuI3og73ogIUgPCBmdW5vdXNoYVwgOwor5YuF6aGYIDwgY2hva3VnYW5cIDsKK+mFkuiUtSA8IHNha2FndXJhXCA7Civli4XpoYwgPCBjaG9rdWRhaVwgOwor5LiN6Imv5YyWIDwgZnVyeW91a2FcIDsKK+iWhOiNt+ezliA8IGhha2thdG91XCA7CivoloTojbfnsr4gPCBoYWtrYXNlaVwgOwor5byx6ZyHIDwgamFrdXNoaW5cIDsKK+avlOWWqeeahCA8IGhpeXV0ZWtpXCA7CivnpoHmnK0gPCBraW5zYXRzdVwgOwor5LqJ6K2w5qipIDwgc291Z2lrZW5cIDsKK+mHjeemgemMriA8IGp1dWtpbmtvXCA7CivpgYvli5XmrIQgPCB1bmRvdXJhblwgOwor56iu5YilIDwgc2h1YmV0c3VcIDsKK+m7kuaIvyA8IGt1cm9idXNhXCA7CivovrLnuYHmnJ8gPCBub3VoYW5raVwgOwor5oKm5qW9IDwgZXRzdXJha3VcIDsKK+awtOiNiSA8IG1penVrdXNhXCA7CivmhJvlrZAgPCBpdG9zaGlnb1wgOwor6YmE5p2QIDwgdGV0c3V6YWlcIDsKK+W8pumfsyA8IHRzdXJ1b3RvXCA7CivllJDlgpggPCBrYXJha2FzYVwgOwor5oSf5Y+X5oCnIDwga2FuanVzZWlcIDsKK+m6puadnyA8IG11Z2l0YWJhXCA7CivlhbXlmajlt6UgPCBoZWlraWtvdVwgOwor5YCq6Zuy5p6XIDwgZ2VpdW5yaW5cIDsKK+awtOiMjiA8IG1penVndWtpXCA7CivpgYvpgIHoiLkgPCB1bnNvdXNlblwgOwor5oaC5LqLIDwgdXJlaWdvdG9cIDsKK+efremdtCA8IHRhbmd1dHN1XCA7CivmsLToi5QgPCBtaXp1Z29rZVwgOwor6YGK5Ya26YOOIDwgeXV1eWFyb3VcIDsKK+eUu+S7mee0mSA8IGdhc2Vuc2hpXCA7CivmtIvmoqggPCB5b3VuYXNoaVwgOwor5aSa5q616ZqOIDwgdGFkYW5rYWlcIDsKK+ippumok+apnyA8IHNoaWtlbmtpXCA7CivkuIDoiKzoq5YgPCBpcHBhbnJvblwgOwor5Yqg566X56iOIDwga2FzYW56ZWlcIDsKK+aui+mbqiA8IHphbnNldHN1XCA7CivljprntJkgPCBhdHN1Z2FtaVwgOwor5rW05a6iIDwgeW9ra3lha3VcIDsKK+WIhuWykOe3miA8IGJ1bmtpc2VuXCA7Civlloflj63miYsgPCByYXBwYXNodVwgOwor5rC06Ii5IDwgbWl6dWJ1bmVcIDsKK+azpeayvCA8IGRvcm9udW1hXCA7Civlj43nmbogPCBoYW5wYXRzdVwgOwor56We5qeYIDwga2FtaXNhbWFcIDsKK+ejqOefsyA8IHRvZ2lpc2hpXCA7CivlvIHpq6ogPCBiZW5wYXRzdVwgOwor5rOl5rC0IDwgZG9yb21penVcIDsKK+azoeayqyA8IGhvdW1hdHN1XCA7CivlhY3nvarnrKYgPCBtZW56YWlmdVwgOwor54qs6buE5qWKIDwgaW51dHN1Z2VcIDsKK+elnualrSA8IGthbWl3YXphXCA7CivmsLTohbkgPCBtaXp1YmFyYVwgOwor5Y+C552AIDwgc2FuY2hha3VcIDsKK+WOreS4luimsyA8IGVuc2Vpa2FuXCA7CivnorrntIQgPCBrYWt1eWFrdVwgOwor5rC06ISIIDwgc3VpbXlha3VcIDsKK+WNiuS4lue0gCA8IGhhbnNlaWtpXCA7CivphbXmr43oj4wgPCBrb3Vib2tpblwgOwor56We5qOaIDwga2FtaWRhbmFcIDsKK+WGt+e9qOazlSA8IHJlaWFucG91XCA7Civlj6TniakgPCBmdXJ1bW9ub1wgOwor5oSb6JS154mIIDwgYWl6b3ViYW5cIDsKK+W/q+e1tiA8IGthaXpldHN1XCA7CivlvqHlgYnmlrkgPCBvZXJhZ2F0YVwgOwor6KiY5pWw5rOVIDwga2lzdXVob3VcIDsKK+epuuS4i+aJiyA8IGthcmFoZXRhXCA7Civph5HniakgPCBrYW5hbW9ub1wgOwor56We5qC8IDwgc2hpbmtha3VcIDsKK+emv+WxsSA8IGhhZ2V5YW1hXCA7CivljYHolqwgPCBkb2t1ZGFtaVwgOwor5LiN5YGl5bq3IDwgZnVrZW5rb3VcIDsKK+ayiOeXmyA8IGNoaW50c3V1XCA7CivmgKXnl4UgPCBreXV1YnlvdVwgOwor5o6i5qSc5a62IDwgdGFua2Vua2FcIDsKK+efs+mPgyA8IHNla2l6b2t1XCA7CivlpKfmsJflnI8gPCB0YWlraWtlblwgOwor542F5a2Q5ZC8IDwgc2hpc2hpa3VcIDsKK+eojuWIpSA8IHplaWJldHN1XCA7Civku6PnkIbmqKkgPCBkYWlyaWtlblwgOwor54mp5Lu26LK7IDwgYnVra2VuaGlcIDsKK+m7kuW5lSA8IGt1cm9tYWt1XCA7CivnpZ3mna8gPCBzaHVrdWhhaVwgOwor5oKq5pOmIDwgd2FydXp1cmVcIDsKK+ato+imj+WFtSA8IHNlaWtpaGVpXCA7Civlho3phY3luIMgPCBzYWloYWlmdVwgOwor6by75YWIIDwgaGFuYXNha2lcIDsKK+elnuaciCA8IGtvdWR6dWtpXCA7CivmsJHojYkgPCB0YW1pZ3VzYVwgOwor5Zub55Wz5Y2KIDwgeW9qb3VoYW5cIDsKK+a0u+W8gSA8IGthdHN1YmVuXCA7CivlsZXnpLrkvJogPCB0ZW5qaWthaVwgOwor5aSn6YO95biCIDwgZGFpdG9zaGlcIDsKK+WSjOWupCA8IHdhc2hpdHN1XCA7CivlhYjlrabmnJ8gPCBzZW5nYWtraVwgOwor5oKq5rSS6JC9IDwgd2FydWphcmVcIDsKK+mHiOeEtiA8IHNoYWt1emVuXCA7Civoh6rmsJHlhZogPCBqaW1pbnRvdVwgOwor5Yy755mC5ZOBIDwgaXJ5b3VoaW5cIDsKK+WGheaymeaxsCA8IHVjaGl6YXRhXCA7Civlk7LkurogPCB0ZXRzdWppblwgOwor56aP5b6zIDwgZnVrdXRva3VcIDsKK+m7kuWxsSA8IGt1cm95YW1hXCA7Civli7/oq5YgPCBtb2NoaXJvblwgOwor5YiG5YWJ5ZmoIDwgYnVua291a2lcIDsKK+aAqueJqSA8IGthaWJ1dHN1XCA7CivopqrkuI3lrZ0gPCBveWFmdWtvdVwgOwor56aP5byVIDwgZnVrdWJpa2lcIDsKK+WNkuiAhSA8IHNvdHN1c2hhXCA7CivnuIHotbfniakgPCBlbmdpbW9ub1wgOwor5rWB5pif6ZuoIDwgcnl1dXNlaXVcIDsKK+WOn+eZuiA8IGdlbnBhdHN1XCA7CivlibLpq5ggPCB3YXJpZGFrYVwgOwor6JGX6L+wIDwgY2hvanV0c3VcIDsKK+W5tOiyouexsyA8IG5lbmd1bWFpXCA7Civljprnmq4gPCBhdHN1a2F3YVwgOwor5rSX5rWE5ZmoIDwgc2Vuam91a2lcIDsKK+avm+iZsSA8IGtlamlyYW1pXCA7CivlvqrnkrDlmaggPCBqdW5rYW5raVwgOwor6YWS57OfIDwgc2FrZWthc3VcIDsKK+eEoeeQhuefoueQhiA8IG11cml5YXJpXCA7CivlgaXlurflhZAgPCBrZW5rb3VqaVwgOwor56iO55CG5aOrIDwgemVpcmlzaGlcIDsKK+W8lemHkSA8IGhpa2lnYW5lXCA7Civlj6TmsrMgPCBmdXJ1a2F3YVwgOwor5Lq65oOF5ZGzIDwgbmluam91bWlcIDsKK+etieiqnue3miA8IHRvdWdvc2VuXCA7Civmr5Lom4cgPCBkb2t1aGViaVwgOwor5Y2B5a2X57eaIDwganV1amlzZW5cIDsKK+S4jeS9v+eUqCA8IGZ1c2hpeW91XCA7CivkuIDnlJ/pnaIgPCBpc3NlaW1lblwgOwor5peF6KGM6KiYIDwgcnlva291a2lcIDsKK+mJhOW6iiA8IGthbmF0b2tvXCA7CivlgIvkvZPnvqQgPCBrb3RhaWd1blwgOwor5ZCN5puyIDwgbWVpa3lva3VcIDsKK+WPo+iTi+mfsyA8IGtvdWdhaW9uXCA7CivlkIzmnIggPCBkb3VnZXRzdVwgOwor5Zyn5bu25qmfIDwgYXRzdWVua2lcIDsKK+WSjOWjsOazlSA8IHdhc2VpaG91XCA7CivljaDnrpcgPCB1cmF5YXNhblwgOwor6auY6aC75bqmIDwga291aGluZG9cIDsKK+Wwj+ixhuiJsiA8IGF6dWtpaXJvXCA7Civmr5LolqwgPCBkb2t1eWFrdVwgOwor5Y6z576O5riTIDwgZ2VuYmlrZWlcIDsKK+axuueEtiA8IGtldHN1emVuXCA7CivnpLrlqIHpgYvli5UgPCBqaWl1bmRvdVwgOwor54Gr5bGx5by+IDwga2F6YW5kYW5cIDsKK+WNiuirp+mfsyA8IGhhbmthaW9uXCA7Civmg4Xlrp8gPCBqb3VqaXRzdVwgOwor56eL5Y+jIDwgYWtpZ3VjaGlcIDsKK+WPluaxuiA8IHRvcmlraW1lXCA7CivlkIzml6UgPCBkb3VqaXRzdVwgOwor56Wt5byPIDwgc2Fpc2hpa2lcIDsKK+iZkOS9vyA8IGd5YWt1c2hpXCA7CivmspDmtbQgPCBtb2t1eW9rdVwgOwor6YmE5bGxIDwgdGV0c3V6YW5cIDsKK+axguazleiAhSA8IGd1aG91c2hhXCA7CivngavlsbHluK8gPCBrYXphbnRhaVwgOwor5rSe5a+fIDwgZG91c2F0c3VcIDsKK+S4i+mnhOeusSA8IGdldGFiYWtvXCA7CivpgZPpoIYgPCBtaWNoaWp1blwgOwor56We5b6zIDwgc2hpbnRva3VcIDsKK+iKnea1t+iAgSA8IHNoaWJhZWJpXCA7CivlpKfliIbnnIwgPCBvb2l0YWtlblwgOwor5b6p57GNIDwgZnVrdXNla2lcIDsKK+Wxsee+iumrrSA8IHlhZ2loaWdlXCA7CivngKzmiLjpmpsgPCBzZXRvZ2l3YVwgOwor5q+S6Iy4IDwgZG9rdXRha2VcIDsKK+W7tumHkSA8IG5vYmVnYW5lXCA7CivnooznoowgPCByb2t1cm9rdVwgOwor6Yqt5LqAIDwgemVuaWdhbWVcIDsKK+eBq+WxseWztiA8IGthemFudG91XCA7CivkuIDlpKvkuIDlqaYgPCBpcHB1aXBwdVwgOwor5q2v6LuKIDwgaGFndXJ1bWFcIDsKK+S4jeWvqeeBqyA8IGZ1c2hpbmJpXCA7CivlpYnku5XlpbMgPCBob3VzaGltZVwgOwor54Gr5bGx5bKpIDwga2F6YW5nYW5cIDsKK+W8lei2iiA8IGhpa2tvc2hpXCA7CivliYPpq6ogPCB0ZWloYXRzdVwgOwor5b+954S2IDwga290c3V6ZW5cIDsKK+eOieegguWIqSA8IHRhbWFqYXJpXCA7CivkuIDliIbljYogPCBpcHB1bmhhblwgOwor5Y+k5qCqIDwgZnVydWthYnVcIDsKK+iKsemzpeeUuyA8IGthY2hvdWdhXCA7CivnhKHoj4zms5UgPCBtdWtpbmhvdVwgOwor5oKE5oKEIDwgc3Vnb3N1Z29cIDsKK+eEoeWFjeiosSA8IG11bWVua3lvXCA7CivlvoXpgb/nt5ogPCB0YWloaXNlblwgOwor56Gs562GIDwga291aGl0c3VcIDsKK+W5tOizgOeKtiA8IG5lbmdham91XCA7Civlj6Tlj4LogIUgPCBrb3NhbnNoYVwgOwor5b+F552AIDwgaGl0Y2hha3VcIDsKK+S6lOWIhuS6lOWIhiA8IGdvYnVnb2J1XCA7Civlj6TmnI0gPCBmdXJ1ZnVrdVwgOwor5YiG5bKQ54K5IDwgYnVua2l0ZW5cIDsKK+S+jeW+k+WumCA8IGppanV1a2FuXCA7CivlhoXph47miYsgPCBuYWl5YXNodVwgOwor5rK56YCB566hIDwgeXVzb3VrYW5cIDsKK+awtOeTtiA8IG1penVnYW1lXCA7Civoqpjom77nga8gPCB5dXVnYXRvdVwgOwor5b+D55qEIDwgc2hpbnRla2lcIDsKK+ioiOeQhuWjqyA8IGtlaXJpc2hpXCA7Civpm5HosqjlupcgPCB6YWtrYXRlblwgOwor5bqn5Y+z6YqYIDwgemF5dXVtZWlcIDsKK+WQvuWtkCA8IHdhZ2ltb2tvXCA7CivlrZDpn7PmgKcgPCBzaGlpbnNlaVwgOwor5rCX55+tIDwga2ltaWppa2FcIDsKK+W+l+etliA8IHRva3VzYWt1XCA7Civli4Xoo4EgPCBjaG9rdXNhaVwgOwor5pyf5b6F5oSfIDwga2l0YWlrYW5cIDsKK+mBqemHjyA8IHRla2lyeW91XCA7Civlv4Pnl5sgPCBzaGludHN1dVwgOwor6YGL5YuV5a62IDwgdW5kb3VzaGFcIDsKK+mHkeaYnyA8IGtpbmJvc2hpXCA7CivmhJrpgKPpmoogPCBndXJlbnRhaVwgOwor5Y6f5a2Q6ZuyIDwgZ2Vuc2hpdW5cIDsKK+S7o+eQhuW6lyA8IGRhaXJpdGVuXCA7CivlvL7olqwgPCBkYW4nJ3lha3VcIDsKK+awtOeOiSA8IG1penV0YW1hXCA7CivnpoHlnKcgPCBraW4nJ2F0c3VcIDsKK+W+s+ebriA8IHRva3Vtb2t1XCA7Civoq7jlmajmorAgPCBzaG9raWthaVwgOwor6YeM5pa5IDwgc2F0b2thdGFcIDsKK+azleW+iyA8IGhvdXJpdHN1XCA7Civph4jmmI4gPCBzaGFrdW1laVwgOwor5pON6Ii15omLIDwgc291ZGFzaHVcIDsKK+WHuuatr+S6gCA8IGRlYmFrYW1lXCA7CivkuI3lgaXlhaggPCBmdWtlbnplblwgOwor5rS75YuVIDwga2F0c3Vkb3VcIDsKK+m7kuWGhiA8IGt1cm9tYXJ1XCA7Civnm7joo5zmgKcgPCBzb3Vob3NlaVwgOwor5rC054mpIDwgbWl6dW1vbm9cIDsKK+W+l+elqCA8IHRva3VoeW91XCA7CivliJ3mnJ/lgKQgPCBzaG9raWNoaVwgOwor5rS+5Ye6IDwgaGFzaHV0c3VcIDsKK+mHiOaUviA8IHNoYWt1aG91XCA7CivmjqXpoK3ovp4gPCBzZXR0b3VqaVwgOwor55Sf5b6S5LyaIDwgc2VpdG9rYWlcIDsKK+a1geWFpSA8IHJ5dXVueXV1XCA7CivmrovomZAgPCB6YW5neWFrdVwgOwor6Jas5bGLIDwga3VzdXJpeWFcIDsKK+iWrOWxgCA8IHlha2t5b2t1XCA7Civnoaznm7QgPCBrb3VjaG9rdVwgOwor5ZCI5byPIDwgZ291c2hpa2lcIDsKK+elnuWmmSA8IHNoaW5teW91XCA7CivpgaDpgZMgPCB0b29taWNoaVwgOwor6aCQ6KiA6ICFIDwgeW9nZW5zaGFcIDsKK+W9k+iBtyA8IHRvdXNob2t1XCA7CivlupXpnakgPCBzb2tvZ2F3YVwgOwor6Jas5a2mIDwgeWFrdWdha3VcIDsKK+emj+WKqSA8IGZ1a3VzdWtlXCA7Civplovlgqzml6UgPCBrYWlzYWliaVwgOwor6IO06ZaT5aOwIDwgZG91bWFnb2VcIDsKK+iDjOeVquWPtyA8IHNlYmFuZ291XCA7Civmta7mtarogIUgPCBmdXJvdXNoYVwgOwor5Lya5ZOh5Yi4IDwga2FpaW5rZW5cIDsKK+S8muWToeWItiA8IGthaWluc2VpXCA7Civmr5vnrYYgPCBtb3VoaXRzdVwgOwor6Iux57Gz5rOVIDwgZWliZWlob3VcIDsKK+WOu+aciCA8IGt5b2dldHN1XCA7CivnnYDpp4UgPCBjaGFrdWVraVwgOwor5ZCI55CG6KuWIDwgZ291cmlyb25cIDsKK+Wkp+mDqOWIhiA8IGRhaWJ1YnVuXCA7CivmgZDmgqYgPCBreW91ZXRzdVwgOwor6JSt5qeYIDwga2FnZXNhbWFcIDsKK+elnuWfnyA8IHNoaW4nJ2lraVwgOwor5Y2D55SfIDwgc2VuJyduYXJpXCA7CivoloTlvLEgPCBoYWt1amFrdVwgOwor5LqU6KeS5b2iIDwgZ29rYWtrZWlcIDsKK+S4reimj+aooSA8IGNodXVraWJvXCA7Civlv4XnhLYgPCBoaXRzdXplblwgOwor5aSn6YO95LyaIDwgZGFpdG9rYWlcIDsKK+itt+mAgei7iiA8IGdvc291c2hhXCA7Civph43miYvku6MgPCBvbW90ZWRhaVwgOwor5ZCM5bGAIDwgZG91a3lva3VcIDsKK+iSuOedgCA8IGpvdWNoYWt1XCA7CivluoPloLHpg6ggPCBrb3Vob3VidVwgOwor5Y2K546JIDwgaGFuZ3lva3VcIDsKK+mAhumiqCA8IGd5YWt1ZnV1XCA7CivliIbpqqggPCBidW5rb3RzdVwgOwor5b6M6bOl57696ZmiIDwgZ290b2JhaW5cIDsKK+W5vOmhlCA8IG9zYW5hZ2FvXCA7CivlkIzlrr8gPCBkb3VzaHVrdVwgOwor5ZCN5a6fIDwgbWVpaml0c3VcIDsKK+atouihgCA8IHNoaWtldHN1XCA7Civli5XohIggPCBkb3VteWFrdVwgOwor552A6aCGIDwgY2hha3VqdW5cIDsKK+iSuOeZuiA8IGpvdWhhdHN1XCA7CivpgIbpoIYgPCBneWFrdWp1blwgOwor5ZCI5a6/IDwgZ2Fzc2h1a3VcIDsKK+WKh+iplSA8IGdla2loeW91XCA7CivphbjmrKAgPCBzYW5rZXRzdVwgOwor5b6M55m6IDwga291aGF0c3VcIDsKK+S4ieadr+mFoiA8IHNhbmJhaXp1XCA7Civnr4Dngq3lmaggPCBzZXR0YW5raVwgOwor6YmE5YiGIDwgdGV0c3VidW5cIDsKK+W4jOacm+iAhSA8IGtpYm91c2hhXCA7CivlpJbnp5HlraYgPCBnZWthZ2FrdVwgOwor5YiR5LqL54qvIDwga2VpamloYW5cIDsKK+mFjee3muWbsyA8IGhhaXNlbnp1XCA7CivmqZ/morDoq5YgPCBraWthaXJvblwgOwor552A6Zu7IDwgY2hha3VkZW5cIDsKK+W3neeni+aymSA8IGthd2FhaXNhXCA7Civlj4vmiJAgPCB0b21vbmFyaVwgOwor5paH5YyW5ZyPIDwgYnVua2FrZW5cIDsKK+aOpemgreiqniA8IHNldHRvdWdvXCA7CivmsLTmtJ8gPCBtaXp1YmFuYVwgOwor5LqL5pWF5q20IDwgamlrb3Jla2lcIDsKK+WJjei/sCA8IHplbmp1dHN1XCA7CivlibLorbIgPCBrYXRzdWpvdVwgOwor5bGx5bCP5bGLIDwgeWFtYWdveWFcIDsKK+WOn+absiA8IGdlbmt5b2t1XCA7Civns7jonLvom4kgPCBpdG90b25ib1wgOwor5Y2B6YeN5LqM5Y2B6YeNIDwgdG9laGF0YWVcIDsKK+W+jOeUoyA8IG5vY2hpemFuXCA7Civnp7vou6LlhYggPCBpdGVuc2FraVwgOwor6JC96I6rIDwgcmFrdWJha3VcIDsKK+mBqeiplSA8IHRla2loeW91XCA7Civok4vniakgPCBmdXRhbW9ub1wgOwor5Ye66aasIDwgc2h1dHN1YmFcIDsKK+awtOayoSA8IHN1aWJvdHN1XCA7CivlvqHniakgPCBneW9idXRzdVwgOwor5aSn5Yuy5L2NIDwgZGFpa3VuJydpXCA7CivlvZPnr4AgPCB0b3VzZXRzdVwgOwor5ZC45Y+jIDwgc3Vpa3VjaGlcIDsKK+Wkp+ebrueOiSA8IG9vbWVkYW1hXCA7CivlrpjlhazlkI8gPCBrYW5rb3VyaVwgOwor5oKL5ZeHIDwgcmluc2hva3VcIDsKK+WNlOitsOWToSA8IGt5b3VnaWluXCA7Civou43kuovniq8gPCBndW5qaWhhblwgOwor6ZqP6KGM5ZOhIDwgenVpa291aW5cIDsKK+S4gOi+uuWAkiA8IGlwcGVudG91XCA7Civph53lsbEgPCBoYXJpeWFtYVwgOwor5Y+W5byVIDwgdG9yaWhpa2lcIDsKK+ayoeW5tCA8IGJvdHN1bmVuXCA7Civlj7Llrp8gPCBzaGlqaXRzdVwgOwor6JGJ6ISIIDwgeW91bXlha3VcIDsKK+WPsOWvhiA8IHRhaW1pdHN1XCA7Civnj77ku6Poqp4gPCBnZW5kYWlnb1wgOwor6YGU6K2YIDwgdGFzc2hpa2lcIDsKK+m6puS9nCA8IG11Z2lzYWt1XCA7CivkuI3lsI7mgKcgPCBmdWRvdXNlaVwgOwor5oCn5oKqIDwgc2hvdXdhcnVcIDsKK+eQhuWuueW4qyA8IHJpeW91c2hpXCA7CivlvpPniakgPCBqdXVidXRzdVwgOwor5Lmx6auY5LiLIDwgcmFua291Z2VcIDsKK+W9ueeVnCA8IGVraWNoaWt1XCA7Civlh6HpqqggPCBib25rb3RzdVwgOwor6YeR5bGRIDwga2FuYWt1enVcIDsKK+W/heauuiA8IGhpc3NhdHN1XCA7Civlj6Tlr7ogPCBmdXJ1ZGVyYVwgOwor56S+5Lqk5a62IDwgc2hha291a2FcIDsKK+a0m+S4rSA8IHJha3VjaHV1XCA7Civlh7jpnaIgPCB0b3RzdW1lblwgOwor5paH5YyW5Y+yIDwgYnVua2FzaGlcIDsKK+WQuOWFpSA8IGt5dXVueXV1XCA7CivkuI3nlKjlk4EgPCBmdXlvdWhpblwgOwor5Yiw6YGUIDwgdG91dGF0c3VcIDsKK+WPo+WunyA8IGtvdWppdHN1XCA7CivpgI/mmI7luqYgPCB0b3VtZWlkb1wgOwor5LiN5a6a5rOVIDwgZnV0ZWlob3VcIDsKK+WKh+iWrCA8IGdla2l5YWt1XCA7Civnn63nuK4gPCB0YW5zaHVrdVwgOwor5rip5o6S5rC0IDwgb25oYWlzdWlcIDsKK+WGt+m6piA8IGhpeWFtdWdpXCA7CivnpZ3lhbggPCBzaHVrdXRlblwgOwor5Ye66ZmzIDwgc2h1dGNoaW5cIDsKK+iIquepuui3ryA8IGtvdWt1dXJvXCA7CivokZvnsaAgPCB0c3VkenVyYVwgOwor6LOH55Sj5a62IDwgc2hpc2Fua2FcIDsKK+mhnuS8vOeCuSA8IHJ1aWppdGVuXCA7Civmt6HmsLTmuZYgPCB0YW5zdWlrb1wgOwor5bqD5aCx6KqyIDwga291aG91a2FcIDsKK+W+s+ayoiA8IHRva3V0YWt1XCA7Civph4jlsIogPCBzaGFrdXNvblwgOwor5bmz6Y2LIDwgaGlyYW5hYmVcIDsKK+mFkuaovSA8IHNha2FkYXJ1XCA7CivlvIHoiIwgPCBiZW56ZXRzdVwgOwor5bCP5Lq65pWwIDwga29uaW56dXVcIDsKK+aEm+efpeecjCA8IGFpY2hpa2VuXCA7Civov73pjLIgPCB0c3Vpcm9rdVwgOwor5oGL5aa7IDwga29pZHp1bWFcIDsKK+W+qea0uyA8IGZ1a2thdHN1XCA7CivkurrpgKDol40gPCBqaW56b3VhaVwgOwor5Yy75a2m6ICFIDwgaWdha3VzaGFcIDsKK+aCquaEn+aDhSA8IGFra2Fuam91XCA7Civmgavllp0gPCBkb3VrYXRzdVwgOwor5pyq5Yem5YiGIDwgbWlzaG9idW5cIDsKK+W3rumFjeS6uiA8IHNhaGFpbmluXCA7CivkvY7poLvluqYgPCB0ZWloaW5kb1wgOwor5L2c54K654qvIDwgc2FrdWloYW5cIDsKK+WJo+ihkyA8IGtlbmp1dHN1XCA7CivljrPlvosgPCBnZW5yaXRzdVwgOwor5q2v56eR55SoIDwgc2hpa2F5b3VcIDsKK+WKq+e9sCA8IGdvdWJhdHN1XCA7CivlvavnkKIgPCBjaG91dGFrdVwgOwor5YyW54mpIDwgYmFrZW1vbm9cIDsKK+iWquWJsiA8IG1ha2l3YXJpXCA7CivlvZPnm7QgPCB0b3VjaG9rdVwgOwor5YaN5Yem55CGIDwgc2Fpc2hvcmlcIDsKK+WJr+iZuSA8IGZ1a3VuaWppXCA7CivoirHojKPok5kgPCBoYW5hZ296YVwgOwor5YyX54iGIDwgaG9rdWJha3VcIDsKK+eOhOatpuWyqSA8IGdlbmJ1Z2FuXCA7CivluLjpo58gPCBqb3VzaG9rdVwgOwor6bCQ6a6rIDwgd2FuaXphbWVcIDsKK+azqOWFpSA8IGNodXVueXV1XCA7CivmgKXls7sgPCBreXV1c2h1blwgOwor5ray54q25YyWIDwgZWtpam91a2FcIDsKK+eEoeWIqeaBryA8IG11cmlzb2t1XCA7CivpmaPnvr3nuZQgPCBqaW5iYW9yaVwgOwor6bOp6IO4IDwgaGF0b211bmVcIDsKK+aIpumXmOapnyA8IHNlbnRvdWtpXCA7CivmnInmhI/nmoQgPCB5dXVpdGVraVwgOwor5bqX6LODIDwgdGFuYWNoaW5cIDsKK+WVj+mhjOWFkCA8IG1vbmRhaWppXCA7Civlv4PmoLkgPCBrb2tvcm9uZVwgOwor5Yas6bOlIDwgZnV5dWRvcmlcIDsKK+WNlOalrSA8IGt5b3VneW91XCA7CivlgrXli5nogIUgPCBzYWltdXNoYVwgOwor5Yed6ZuGIDwgZ3lvdXNodXVcIDsKK+S4gOmojuiojiA8IGlra2l1Y2hpXCA7Civoo5zntabot68gPCBob2t5dXVyb1wgOwor6YCB6YGUIDwgc291dGF0c3VcIDsKK+W9q+eJqSA8IGhvcmltb25vXCA7CivlupXosYYgPCBzb2tvbWFtZVwgOwor6bOl6IKMIDwgdG9yaWhhZGFcIDsKK+mzpeiCiSA8IHRvcmluaWt1XCA7Civmr43niakgPCBoYWhhbW9ub1wgOwor5b2iIDwga2F0YWNoaVwgOwor6L2NIDwgd2FkYWNoaVwgOwor5be3IDwgY2hpbWF0YVwgOwor6LejIDwgaGFkYXNoaVwgOwor6LajIDwgb21vbXVraVwgOwor5bGAIDwgdHN1Ym9uZVwgOwor5a+nIDwgbXVzaGlyb1wgOwor5426IDwga2F3YXVzb1wgOwor54uQIDwga2l0c3VuZVwgOwor5auCIDwgYW5peW9tZVwgOwor6KmxIDwgaGFuYXNoaVwgOwor54eVIDwgdHN1YmFtZVwgOwor5ru0IDwgc2hpenVrdVwgOwor5rmWIDwgbWl6dXVtaVwgOwor5YmjIDwgdHN1cnVnaVwgOwor5YedIDwgc2hpa29yaVwgOwor5YagIDwga2FubXVyaVwgOwor5qS/IDwgdHN1YmFraVwgOwor5qKfIDwgZnVrdXJvdVwgOwor6aCCIDwgaXRhZGFraVwgOwor5p+xIDwgaGFzaGlyYVwgOwor5L+OIDwgbWFuYWl0YVwgOwor5p6XIDwgaGF5YXNoaVwgOwor5L6NIDwgc2FtdXJhaVwgOwor576KIDwgaGl0c3VqaVwgOwor5p2xIDwgaGlnYXNoaVwgOwor5piUIDwgbXVrYXNoaVwgOwor57WMIDwgdGF0ZWl0b1wgOwor6YymIDwgbmlzaGlraVwgOwor56eBIDwgd2F0YXNoaVwgOwor56WtIDwgbWF0c3VyaVwgOwor56S+IDwgeWFzaGlyb1wgOwor56K6IDwgdGFzaGlrYVwgOwor6YK4IDwgeWFzaGlraVwgOwor56S+5YWxIDwgc2hha3lvdVwgOwor5b+D5p2QIDwgc2hpbnphaVwgOwor6L+R6ZaTIDwgY2hpa2FtYVwgOwor5Y675bCxIDwga3lvc2h1dVwgOwor5YmN6KGoIDwgemVucHlvdVwgOwor5ZCb5YG0IDwga3Vuc29rdVwgOwor6L+96YCBIDwgdHN1aXNvdVwgOwor5Y2g5pyJIDwgc2VuJyd5dXVcIDsKK+W/jOaXpSA8IGtpbmljaGlcIDsKK+WNoOabuCA8IHVyYWJ1bWlcIDsKK+W4s+mdoiA8IGNob3VtZW5cIDsKK+ebtOmfsyA8IGNob2t1b25cIDsKK+WKn+e4viA8IGtvdXNla2lcIDsKK+awkealrSA8IG1pbmd5b3VcIDsKK+iWhOWRvSA8IGhha3VtZWlcIDsKK+W4remghiA8IHNla2lqdW5cIDsKK+ebiumzpSA8IGVraWNob3VcIDsKK+ayluWkqSA8IGNodXV0ZW5cIDsKK+S4i+WxpOWcnyA8IGthc291ZG9cIDsKK+W/nOaOpSA8IG91c2V0c3VcIDsKK+eeoOiLpSA8IGRvdWpha3VcIDsKK+i1t+WLleapnyA8IGtpZG91a2lcIDsKK+W+jOa1gSA8IGtvdXJ5dXVcIDsKK+WPrOWWmiA8IHNob3VrYW5cIDsKK+W8leeulyA8IGhpa2l6YW5cIDsKK+W4r+mdqSA8IG9iaWthd2FcIDsKK+WHuumHkSA8IHNodWtraW5cIDsKK+WNgeWtl+aetiA8IGp1dWppa2FcIDsKK+WPq+WWmiA8IGt5b3VrYW5cIDsKK+WQieWHtiA8IGtpa2t5b3VcIDsKK+mHjeWcpyA8IGp1dWF0c3VcIDsKK+i/sOmDqCA8IGp1dHN1YnVcIDsKK+m3suW6pyA8IHdhc2hpemFcIDsKK+W8k+eurSA8IGt5dXVzZW5cIDsKK+WIhumAsiA8IGJ1bnNoaW5cIDsKK+iPqeiWqSA8IGJvc2F0c3VcIDsKK+WIhumAnyA8IGZ1bnNva3VcIDsKK+awtOaSgyA8IHN1aWdla2lcIDsKK+ayouWcsCA8IHNhd2FjaGlcIDsKK+WIh+i/qyA8IHNlcHBha3VcIDsKK+WNl+acnSA8IG5hbmNob3VcIDsKK+S6uuW3pembqCA8IGppbmtvdXVcIDsKK+W/teW/tSA8IG5lbicnbmVuXCA7CivvvK7pn78gPCBlbnVreW91XCA7CivmraPntpogPCBzZWl6b2t1XCA7CivokL3nrKwgPCByYWt1ZGFpXCA7Civph6PlkIggPCB0c3VyaWFpXCA7CivmraPntbkgPCBzaG91a2VuXCA7CivppJPprLzpgZMgPCBnYWtpZG91XCA7CivljrPlrrkgPCBnZW4nJ3lvdVwgOwor6YCy6KGMIDwgc2hpbmtvdVwgOwor5ZCJ5YWGIDwga2l0Y2hvdVwgOwor5LiN5a6a5pyfIDwgZnV0ZWlraVwgOwor5YuV55qEIDwgZG91dGVraVwgOwor5ZCM5YOaIDwgZG91cnlvdVwgOwor5q2j57WMIDwgc2Vpa3lvdVwgOwor5YyX5rqAIDwgaG9rdW1hblwgOwor5Y2K5qC8IDwgaGFua2FrdVwgOwor6YCa6KyAIDwgdHN1dWJvdVwgOwor5qih5pOs5bqXIDwgbW9naXRlblwgOwor5Y+s5ZG9IDwgc2hvdW1laVwgOwor6YCa6KuWIDwgdHN1dXJvblwgOwor5bqP6KqsIDwgam9zZXRzdVwgOwor5rOl5LitIDwgZGVpY2h1dVwgOwor5bqV6KeSIDwgdGVpa2FrdVwgOwor5Ymy6IiIIDwgd2FyaWtvdVwgOwor5b6z5pybIDwgdG9rdWJvdVwgOwor5oCl5aSJIDwga3l1dWhlblwgOwor5Y+j5ZSHIDwga291c2hpblwgOwor6bOl57ayIDwgdG9yaWFtaVwgOwor5oGt5YC5IDwga3lvdWtlblwgOwor5Y+r5Y+3IDwga3lvdWdvdVwgOwor5Y+k5q2m6YGTIDwga29idWRvdVwgOwor5qCE6aSK57SgIDwgZWl5b3Vzb1wgOwor5Yi66KGdIDwgc2hpc2hvdVwgOwor5bm96LC3IDwgeXV1a29rdVwgOwor6YSZ5q2MIDwgaGluYXV0YVwgOwor5q6154mpIDwgZGFubW9ub1wgOwor5ZCM5L+hIDwgZG91c2hpblwgOwor55+z55ukIDwgc2VraWJhblwgOwor5q2756WoIDwgc2hpaHlvdVwgOwor5Ymy6IW5IDwga2FwcHVrdVwgOwor5buQ6IiOIDwga3l1dXNoYVwgOwor6YCa6KiIIDwgdHN1dWtlaVwgOwor5Y+w5YyXIDwgdGFpaG9rdVwgOwor5Yuk546LIDwga2luJydub3VcIDsKK+W/q+W+qSA8IGthaWZ1a3VcIDsKK+awkeaciSA8IG1pbicneXV1XCA7CivmrbTnqIsgPCByZWtpdGVpXCA7CivnoLTmu4UgPCBoYW1ldHN1XCA7CivmgKXlopcgPCBreXV1em91XCA7CivpgJrop6MgPCB0c3V1a2FpXCA7CivliKToqq0gPCBoYW5kb2t1XCA7Civph43llLEgPCBqdXVzaG91XCA7CivlkI3kvZwgPCBtZWlzYWt1XCA7CivpgJroprMgPCB0c3V1a2FuXCA7CivlvJTnpa0gPCBjaG91c2FpXCA7CivlkITlgZwgPCBrYWt1dGVpXCA7CivmganlgJ8gPCBvbnNoYWt1XCA7Civlj7LliocgPCBzaGlnZWtpXCA7CivljJfmtIsgPCBob2t1eW91XCA7CivpgJropqcgPCB0c3V1cmFuXCA7CivpganogIUgPCB0ZWtpc2hhXCA7Civlia/ohY4gPCBmdWt1amluXCA7CivnpL7kuK0gPCBzaGFjaHV1XCA7Civov73otIggPCB0c3Vpem91XCA7CivmgKXloLEgPCBreXV1aG91XCA7CivluKvplbcgPCBzaGljaG91XCA7CivliIDouqsgPCB0b3VzaGluXCA7CivliqDnrYYgPCBrYWhpdHN1XCA7Civljrvlo7AgPCBreW9zaG91XCA7CivlkI3ku6MgPCBteW91ZGFpXCA7CivljKHmraMgPCBreW91c2VpXCA7Civouqvli53miYsgPCBtaWdhdHRlXCA7CivlkIjkvZwgPCBnYXNzYWt1XCA7CivnhKHliKnlrZAgPCBtdXJpc2hpXCA7CivlvpPmpa0gPCBqdXVneW91XCA7CivljYrmmYIgPCBoYW50b2tpXCA7CivokL3no5AgPCByYWt1YmFuXCA7Civljp/lr6kgPCBnZW5zaGluXCA7Civmr5LmtrIgPCBkb2t1ZWtpXCA7CivlvbzmsI8gPCBrYXJlc2hpXCA7CivluJ3pmbUgPCB0ZWlyeW91XCA7CivlvrPmlL8gPCB0b2t1c2VpXCA7CivmsJHml48gPCBtaW56b2t1XCA7CivpgaDogLMgPCB0b29taW1pXCA7CivnkaDnkoPoibIgPCBydXJpaXJvXCA7CivlkI3kuLsgPCBuYW51c2hpXCA7CivmgKXlnYIgPCBreXV1aGFuXCA7CivliJ3oqLogPCBzaG9zaGluXCA7CivluoPop5IgPCBrb3VrYWt1XCA7CivlkInkuosgPCBraXRzdWppXCA7CivmsI/ml48gPCBzaGl6b2t1XCA7CivlvJTnoLIgPCBjaG91aG91XCA7Civlu7rnrZYgPCBrZW5zYWt1XCA7CivliY3okYkgPCB6ZW4nJ3lvdVwgOwor6YCa6KGMIDwgdHN1dWtvdVwgOwor5ZCM5LiAIDwgZG91aXRzdVwgOwor5bm+6KixIDwgaWt1YmFrdVwgOwor6YeN5Y6aIDwgY2hvdWtvdVwgOwor6I236YCBIDwgbmlva3VyaVwgOwor5b6p5penIDwgZnVra3l1dVwgOwor6IOD6IW454KOIDwgaWNob3VlblwgOwor5rKh5Y+OIDwgYm9zc2h1dVwgOwor5bu756ugIDwga2Fpc2hvdVwgOwor5Y2a5o2cIDwgaGFrdXNvdVwgOwor55+l55qEIDwgY2hpdGVraVwgOwor5ZCE5Lq6IDwga2FrdWppblwgOwor5q6L55WZIDwgemFucnl1dVwgOwor6LW35YuV5pmCIDwga2lkb3VqaVwgOwor5bmV6LuNIDwgYmFrdWd1blwgOwor5bu656uLIDwga29ucnl1dVwgOwor5rKD5ZywIDwgeW9rdWNoaVwgOwor6YGK6IiIIDwgeXV1a3lvdVwgOwor5b6p5paHIDwgZnVrdWJ1blwgOwor5ZCI5LiAIDwgZ291aXRzdVwgOwor5Yil6KGoIDwgYmVwcHlvdVwgOwor5Ymv572yIDwgZnVrdXNob1wgOwor5Y+X5Y+WIDwgdWtldG9yaVwgOwor5b+D5oi/IDwgc2hpbmJvdVwgOwor5Y+k5Yi5IDwga29zYXRzdVwgOwor5Yq055u4IDwgcm91c2hvdVwgOwor6YOt5riFIDwga2FrdXNlaVwgOwor5Ye66LWwIDwgc2h1c3NvdVwgOwor5bm76KaaIDwgZ2Vua2FrdVwgOwor5Ymb6IW5IDwgZ291ZnVrdVwgOwor5q666Zmj5birIDwgdGF0ZXNoaVwgOwor6aGe576p6KqeIDwgcnVpZ2lnb1wgOwor5q2v55+zIDwgc2hpc2VraVwgOwor5a626KiI57C/IDwga2FrZWlib1wgOwor5oGl5LiYIDwgY2hpa3l1dVwgOwor5YWo6bqmIDwgemVuYmFrdVwgOwor5Y2a5omTIDwgYmFrdWNoaVwgOwor6L+96KqNIDwgdHN1aW5pblwgOwor6YeP5YiRIDwgcnlvdWtlaVwgOwor6YeN5Yi7IDwganV1a29rdVwgOwor56K65a6IIDwga2FrdXNodVwgOwor55m76KiY57C/IDwgdG91a2lib1wgOwor6L+96KmmIDwgdHN1aXNoaVwgOwor5Ye66LOHIDwgc2h1c3NoaVwgOwor55yf6LSLIDwgc2hpbmdhblwgOwor5rCX5oyBIDwga2ltb2NoaVwgOwor6YeN5q+N6Z+zIDwganV1Ym9pblwgOwor5bmz6KeSIDwgaGVpa2FrdVwgOwor5q2j56K6IDwgc2Vpa2FrdVwgOwor6L+96KiOIDwgdHN1aXRvdVwgOwor5q+s5qCXIDwgaWdhZ3VyaVwgOwor5q2755eFIDwgc2hpYnlvdVwgOwor5YWx6bO0IDwga3lvdW1laVwgOwor5Y+N5Y+OIDwgdGFuc2h1dVwgOwor6YGF55+l5oG1IDwgb3NvZGppZVwgOwor5b+W5bqmIDwgc29udGFrdVwgOwor5biv6YeRIDwgb2JpZ2FuZVwgOwor6I2Y6YeNIDwgc291Y2hvdVwgOwor5aSn6YGO5Y67IDwgZGFpa2Frb1wgOwor5b+D5oOFIDwgc2hpbmpvdVwgOwor5Yy55pW1IDwgaGl0dGVraVwgOwor6YOo5rS7IDwgYnVrYXRzdVwgOwor6YeO5YWOIDwgbm91c2FnaVwgOwor5rC45bm0IDwgbmFnYW5lblwgOwor5Yqg566X5ZmoIDwga2FzYW5raVwgOwor6YCG6KGMIDwgZ3lha2tvdVwgOwor5aSn55u45pKyIDwgb296dW1vdVwgOwor6L+F6YCfIDwgamluc29rdVwgOwor5qmf6IO96KqeIDwga2lub3Vnb1wgOwor5b6M5pu4IDwgYXRvZ2FraVwgOwor5YmN6IaKIDwgemVucGFrdVwgOwor6YeR5YG0IDwga2luZ2F3YVwgOwor5b+D5oCnIDwgc2hpbnNlaVwgOwor6L+w6KqeIDwganV0c3Vnb1wgOwor56Kn5bGxIDwgaGVraXphblwgOwor5rKI5ZCfIDwgY2hpbmdpblwgOwor5pyJ5rCX6Z+zIDwgeXV1a2lvblwgOwor5YmN6ISzIDwgemVuJydub3VcIDsKK+W5tOihqCA8IG5lbnB5b3VcIDsKK+WJjeiEmiA8IG1hZWFzaGlcIDsKK+atjuensCA8IHRhbnNob3VcIDsKK+WHuuismyA8IHNodWtrb3VcIDsKK+S4jeadoeeQhiA8IGZ1am91cmlcIDsKK+WIuuiNiSA8IGlyYWt1c2FcIDsKK+WNg+aMryA8IHNlbmJ1cmlcIDsKK+W/g+W+lyA8IGtva29yb2VcIDsKK+aBkuS5hSA8IGtvdWt5dXVcIDsKK+WPquS7iiA8IHRhZGFpbWFcIDsKK+WPjeWJhyA8IGhhbnNva3VcIDsKK+WPo+S+myA8IGtvdWt5b3VcIDsKK+W8t+eBqyA8IHRzdXlvYmlcIDsKK+aBi+S7siA8IGtvaW5ha2FcIDsKK+atu+eQgyA8IHNoaWt5dXVcIDsKK+WKqeeVqiA8IHN1a2ViYW5cIDsKK+W+jOaXpSA8IGdvbmljaGlcIDsKK+mFjeW9uSA8IGhhaXlha3VcIDsKK+aBi+S6uiA8IGtvaWJpdG9cIDsKK+Wkp+mBk+WFtyA8IG9vZG91Z3VcIDsKK+WumuS9jee9riA8IHRlaWljaGlcIDsKK+aAquWKmyA8IGthaXJpa2lcIDsKK+W+geacjSA8IHNlaWZ1a3VcIDsKK+avjeanmCA8IGthYXNhbWFcIDsKK+ecn+irpiA8IHNoaW50ZWlcIDsKK+W8seeCuSA8IGpha3V0ZW5cIDsKK+mAo+iNmCA8IHJlbmNoYW5cIDsKK+WGhumhlCA8IG1hcnVnYW9cIDsKK+ebsumAsiA8IG1vdXNoaW5cIDsKK+W/oOWtnSA8IGNodXVrb3VcIDsKK+mzpeeesCA8IGNob3VrYW5cIDsKK+W5vOiZqyA8IHlvdWNodXVcIDsKK+iQveeQgyA8IHJha2t5dXVcIDsKK+W3qOmhjSA8IGt5b2dha3VcIDsKK+WJsueulyA8IHdhcml6YW5cIDsKK+mBi+mAgeWxiyA8IHVuc291eWFcIDsKK+mAoOWWtuiyuyA8IHpvdWVpaGlcIDsKK+WPjeWFsSA8IGhhbmt5b3VcIDsKK+aui+eFpyA8IHphbnNob3VcIDsKK+WMl+adsSA8IGhva3V0b3VcIDsKK+mAuOiBniA8IGl0c3VidW5cIDsKK+mFkuW4rSA8IHNodXNla2lcIDsKK+efs+eCrSA8IHNla2l0YW5cIDsKK+awt+WxsSA8IGh5b3V6YW5cIDsKK+W8leeOhyA8IGluc290c3VcIDsKK+W7tuedgCA8IGVuY2hha3VcIDsKK+awt+WxiyA8IGtvb3JpeWFcIDsKK+WNseWxgCA8IGtpa3lva3VcIDsKK+iSmeWPpOiqniA8IG1vdWtvZ29cIDsKK+WHuOinkiA8IHRva2tha3VcIDsKK+ebrumAgSA8IG1va3Vzb3VcIDsKK+apn+aisOenkSA8IGtpa2Fpa2FcIDsKK+ebtOi8uCA8IGNob2t1eXVcIDsKK+egleawtyA8IHNhaWh5b3VcIDsKK+ecn+iogCA8IHNoaW5nb25cIDsKK+W7uueZvSA8IGtlbnBha3VcIDsKK+atpueVpSA8IGJ1cnlha3VcIDsKK+aAp+WIhiA8IHNob3VidW5cIDsKK+WGl+mVtyA8IGpvdWNob3VcIDsKK+eiuuWgsSA8IGtha3Vob3VcIDsKK+W6p+iBtyA8IHphc2hva3VcIDsKK+WPo+S4rSA8IGtvdWNodXVcIDsKK+WGt+mFtyA8IHJlaWtva3VcIDsKK+asoeW5tOW6piA8IGppbmVuZG9cIDsKK+autOauuiA8IG91c2F0c3VcIDsKK+WFpemtgiA8IG55dXVrb25cIDsKK+W/l+WtpiA8IHNoaWdha3VcIDsKK+WkmumHjeWMliA8IHRhanV1a2FcIDsKK+W+gOaXpSA8IG91aml0c3VcIDsKK+axguWpmiA8IGt5dXVrb25cIDsKK+W7tueZuiA8IGVucGF0c3VcIDsKK+WNg+S7o+WlsyA8IGNoaXlvam9cIDsKK+ecn+ilvyA8IG1hbmlzaGlcIDsKK+WPpOekvuWvuiA8IGtvc2hhamlcIDsKK+W8k+eKtiA8IGt5dXVqb3VcIDsKK+mGnOWQjSA8IHNodXVtZWlcIDsKK+awkeW/gyA8IG1pbnNoaW5cIDsKK+aoqemrmCA8IGtlbmRha2FcIDsKK+S4gOWxpOebriA8IGlzc291bWVcIDsKK+awkeW+syA8IG1pbnRva3VcIDsKK+WPjeS/lyA8IGhhbnpva3VcIDsKK+axuuWLnSA8IGtlc3Nob3VcIDsKK+WGhemZuCA8IG5haXJpa3VcIDsKK+ebtOi3ryA8IGNob2t1cm9cIDsKK+mBqeeiuiA8IHRla2tha3VcIDsKK+iMtumHnCA8IGNoYWdhbWFcIDsKK+WokeWphuawlyA8IHNoYWJha2VcIDsKK+i+m+mFuCA8IHNoaW5zYW5cIDsKK+W4jOmHiCA8IGtpc2hha3VcIDsKK+WHtuihjCA8IGt5b3Vrb3VcIDsKK+avjuacnSA8IG1haWNob3VcIDsKK+eZvemvqCA8IGhha3VnZWlcIDsKK+WNiuW8kyA8IGhhbmt5dXVcIDsKK+WKseejgeapnyA8IHJlaWppa2lcIDsKK+S4jemmluWwviA8IGZ1c2h1YmlcIDsKK+WIneiNtyA8IGhhdHN1bmlcIDsKK+WMl+aUryA8IGhva3VzaGlcIDsKK+aCquaEn+WMliA8IGFra2Fua2FcIDsKK+W+hemBv+aJgCA8IHRhaWhpam9cIDsKK+WGhemWsiA8IG5haWV0c3VcIDsKK+WGhemWoyA8IG5haWtha3VcIDsKK+mFjeWxniA8IGhhaXpva3VcIDsKK+iUteWMvyA8IHpvdXRva3VcIDsKK+W4q+i1sCA8IHNoaXdhc3VcIDsKK+ayiOWAqyA8IGNoaW5yaW5cIDsKK+mFkuWuoiA8IHNodWtha3VcIDsKK+avlOaXpSA8IGhpbmljaGlcIDsKK+WOn+WRiiA8IGdlbmtva3VcIDsKK+Wbm+iCoeWQjSA8IHNoaWtvbmFcIDsKK+eZvemtmiA8IHNoaXJhdW9cIDsKK+WNiuW5tCA8IGhhbicnbmVuXCA7CivpgYvnrYYgPCB1bnBpdHN1XCA7Civpt7nljKAgPCB0YWtham91XCA7CivmrbTnhLYgPCByZWtpemVuXCA7CivkuI3kurrmsJcgPCBmdW5pbmtpXCA7CivlhazpoJggPCBrb3VyeW91XCA7Civov5HopqogPCBraW5zaGluXCA7CivmgKXkvb8gPCBreXV1c2hpXCA7Civlib3nm5cgPCBoeW91dG91XCA7Civlubzoi6UgPCB5b3VqYWt1XCA7Civopb/mrKfljJYgPCBzZWlvdWthXCA7CivlhajpoY0gPCB6ZW5nYWt1XCA7CivmqJnpq5ggPCBoeW91a291XCA7CivljbPlo7IgPCBzb2t1YmFpXCA7Civkuozpmo7lsYsgPCBuaWthaXlhXCA7CivljYPluqYgPCBjaGl0YWJpXCA7CivlvLfmsJcgPCB0c3V5b2tpXCA7Civmo5LmmpfoqJggPCBib3VhbmtpXCA7CivluoHoiI4gPCBjaG91c2hhXCA7CivliofnlYwgPCBnZWtpa2FpXCA7CivljYPlubQgPCBjaGl0b3NlXCA7CivkuI3kuIDoh7QgPCBmdWl0Y2hpXCA7CivooYDlj43lkJAgPCBjaGloZWRvXCA7CivliofnlJogPCBnZWtpamluXCA7CivmqKrpoZQgPCB5b2tvZ2FvXCA7Civmm7PngavlvL4gPCBlaWthZGFuXCA7Civli6fmpa0gPCBrYW5neW91XCA7Civlh53oppYgPCBneW91c2hpXCA7CivliLrnuY0gPCBzaGlzaHV1XCA7CivnnqDnm64gPCBkb3Vtb2t1XCA7Civlho3pjLIgPCBzYWlyb2t1XCA7CivnnJ/omasgPCBtYW11c2hpXCA7Civps6XnjaMgPCBjaG91anV1XCA7CivlvrnlrrUgPCB0ZXNzaG91XCA7CivljZHlsYggPCBoaWt1dHN1XCA7CivliqDnhrEgPCBrYW5ldHN1XCA7CivnsKHntKDljJYgPCBrYW5zb2thXCA7CivlgIvkvZPlt64gPCBrb3RhaXNhXCA7Civlho3pi7MgPCBzYWljaHV1XCA7CivmsLfloYogPCBoeW91a2FpXCA7CivlkIzpn7Poqp4gPCBkb3VvbmdvXCA7CivljZLlr78gPCBzb3RzdWp1XCA7CivlvLfmrLIgPCBnb3V5b2t1XCA7CivljZTlrpogPCBreW91dGVpXCA7CivlhbXplbcgPCBoZWljaG91XCA7CivphYzlqaYgPCBzaGFrdWZ1XCA7CivnoLLmkoMgPCBob3VnZWtpXCA7CivmsJflr4YgPCBraW1pdHN1XCA7CivpgbjnkIMgPCBzZW5reXV1XCA7Civljp/liYcgPCBnZW5zb2t1XCA7CivlhbHpl5ggPCBreW91dG91XCA7CivkuZfli5nlk6EgPCBqb3VtdWluXCA7Civnm7Toq6sgPCBjaG9ra2FuXCA7Civoo4/mnKjmiLggPCB1cmFraWRvXCA7CivnmbrppqwgPCBoYXRzdWJhXCA7CivliLrntaEgPCBzaGlyYWt1XCA7Civlhajpm4YgPCB6ZW5zaHV1XCA7CivljZPlrZAgPCB0ZWlidXJ1XCA7Civnm7Toq4cgPCBqaWtpZGFuXCA7CivlhaXpm7sgPCBueXV1ZGVuXCA7CivliY3nq6AgPCB6ZW5zaG91XCA7Civnn7PmrrUgPCBpc2hpZGFuXCA7Civmrabng4ggPCBidXJldHN1XCA7Civnm7ToqbEgPCBjaG9rdXdhXCA7Civno4HlipsgPCBqaXJ5b2t1XCA7CivmsLTlnqIgPCBtaXp1YWthXCA7CivlubPoh7wgPCBoaXJhdXN1XCA7CivlvbnmiYAgPCB5YWt1c2hvXCA7CivpgannlKggPCB0ZWtpeW91XCA7CivpgKPntpogPCByZW56b2t1XCA7CivljbXlmqIgPCByYW4nJ25vdVwgOwor5rCP5a+6IDwgdWppZGVyYVwgOwor5YWl6ZqKIDwgbnl1dXRhaVwgOwor5b+D5aSWIDwgc2hpbmdhaVwgOwor6YeR5q+Y576FIDwga29ucGlyYVwgOwor5Y2K5a61IDwgaGFuc2hvdVwgOwor6YCj57WhIDwgcmVucmFrdVwgOwor5Yi257SEIDwgc2VpeWFrdVwgOwor556R55uuIDwgbWVpbW9rdVwgOwor5Yqb54K5IDwgcmlraXRlblwgOwor5rC05ZynIDwgc3VpYXRzdVwgOwor5bm76IG0IDwgZ2VuY2hvdVwgOwor5qiZ6aGMIDwgaHlvdWRhaVwgOwor5rC35ZqiIDwgaHlvdW5vdVwgOwor5b+15YqbIDwgbmVucmlraVwgOwor54Sh6YCg5L2cIDwgbXV6b3VzYVwgOwor55u06KanIDwgamlraXJhblwgOwor5Y2D5bCLIDwgY2hpaGlyb1wgOwor5YWo6ZW3IDwgemVuY2hvdVwgOwor5Y2a5aSnIDwgaGFrdWRhaVwgOwor5Y2B5LqM5pmCIDwganV1bmlqaVwgOwor6JC95raZIDwgcmFrdXJ1aVwgOwor5YaF6YeRIDwgdWNoaWtpblwgOwor55m76aCCIDwgdG91Y2hvdVwgOwor55uX6LOKIDwgdG91em9rdVwgOwor5Y2a5aOrIDwgaGFrdXNoaVwgOwor5oSP5oOz5aSWIDwgaXNvdWdhaVwgOwor5LiN5a6J5a6aIDwgZnVhbnRlaVwgOwor55m66Z+zIDwgaGF0c3VvblwgOwor5YWl6ZaAIDwgbnl1dW1vblwgOwor5q+S5omLIDwgZG9rdXNodVwgOwor55+z5qmLIDwgc2Vra3lvdVwgOwor55yf6I+MIDwgc2hpbmtpblwgOwor55m96Z2iIDwgaGFrdW1lblwgOwor5b655aScIDwgdGV0c3V5YVwgOwor6Zmw6Zu75rCXIDwgaW5kZW5raVwgOwor55+z5qeoIDwgc2Vra2FrdVwgOwor5YiH6IW5IDwgc2VwcHVrdVwgOwor5b+g5ZCbIDwgY2h1dWt1blwgOwor6JaE6aas6bm/IDwgdXN1YmFrYVwgOwor6JS15Lq6IDwga3Vyb3Vkb1wgOwor5bm06ICBIDwgdG9zaGlvaVwgOwor6IuU6aGeIDwga29rZXJ1aVwgOwor5LiB5a2X6LevIDwgdGVpamlyb1wgOwor55m66ZyyIDwgaGF0c3Vyb1wgOwor5YWH6aGeIDwga3lvdXJ1aVwgOwor6YCU57W2IDwgdG96ZXRzdVwgOwor55u06KGMIDwgY2hva2tvdVwgOwor5Yqb5ryVIDwgcmlraXNvdVwgOwor5Y2g5ZywIDwgc2hpbWVqaVwgOwor5b+D5ZywIDwga29rb2NoaVwgOwor5o+Q56S66YOoIDwgdGVpamlidVwgOwor5YWI6aCDIDwgc2Vua29yb1wgOwor5q275q+SIDwgc2hpZG9rdVwgOwor5oWw5ZWP5ZOBIDwgaW1vbmhpblwgOwor5bqc56uLIDwgZnVyaXRzdVwgOwor5Y6f5L2cIDwgZ2Vuc2FrdVwgOwor5Y2w5ZOyIDwgaW50ZXRzdVwgOwor5Ya36KmVIDwgcmVpaHlvdVwgOwor5b+D5ZugIDwgc2hpbicnaW5cIDsKK+mAn+eulyA8IHNva3VzYW5cIDsKK+WOhOWJjSA8IHlha3VtYWVcIDsKK+aui+alrSA8IHphbmd5b3VcIDsKK+iNkuihjCA8IGFyYWd5b3VcIDsKK+WGhemAmiA8IG5haXRzdXVcIDsKK+imquaWh+WtlyA8IG95YW1vamlcIDsKK+WLneaZryA8IHNob3VrZWlcIDsKK+eereeEtiA8IHJ5b3V6ZW5cIDsKK+W+k+WxniA8IGp1dXpva3VcIDsKK+W8pualvSA8IGdlbmdha3VcIDsKK+WKg+eEtiA8IGtha3V6ZW5cIDsKK+WNs+WQnyA8IHNva3VnaW5cIDsKK+WNg+WnqyA8IHNlbmhpbWVcIDsKK+W/oOWLpCA8IGNodXVraW5cIDsKK+W/oOWLhyA8IGNodXV5dXVcIDsKK+eQhuiyoeWutiA8IHJpemFpa2FcIDsKK+WGt+immiA8IHJlaWtha3VcIDsKK+mAmueulyA8IHRzdXVzYW5cIDsKK+mAhue4gSA8IGd5YWt1ZW5cIDsKK+acieiAtueEoeiAtiA8IHV5YW11eWFcIDsKK+eoveWPpOaXpSA8IGtlaWtvYmlcIDsKK+WInee0miA8IHNob2t5dXVcIDsKK+avkuaApyA8IGRva3VzZWlcIDsKK+W3oemBiiA8IGp1bicneXV1XCA7CivlvpPlrrkgPCBzaG91eW91XCA7CivljZflm70gPCBuYW5nb2t1XCA7CivkuozloYHmiZMgPCBuaXJ1aWRhXCA7CivlvLfmmrQgPCBreW91Ym91XCA7CivluZXoiI4gPCBiYWt1c2hhXCA7CivmsLfljp8gPCBoeW91Z2VuXCA7CivlubPnuZQgPCBoaXJhb3JpXCA7Civlv5zlipsgPCBvdXJ5b2t1XCA7Civli53mlZcgPCBzaG91aGFpXCA7CivmiYvnm7joposgPCB0ZXNvdW1pXCA7CivmsYLliJEgPCBreXV1a2VpXCA7CivlpJznm5fom74gPCB5b3RvdWdhXCA7Civlt7vosp0gPCBtYWtpZ2FpXCA7CivlvI/mrKEgPCBzaGlraWppXCA7CivlhpnosaEgPCBzaGFzaG91XCA7CivlpbPmgKfnvo4gPCBqb3NlaWJpXCA7Civmrovmn7EgPCB6YW5jaHV1XCA7Civnn7PmnZAgPCBzZWtpemFpXCA7Civpoqjpgqrlo7AgPCBrYXplZ29lXCA7Civljq3kuJblrrYgPCBlbnNlaWthXCA7Civpgqbmpb0gPCBob3VnYWt1XCA7CivliaPnjokgPCBrZW5kYW1hXCA7CivljJfltrogPCBob2t1cmVpXCA7CivlubTntaYgPCBuZW5reXV1XCA7Civlhajph48gPCB6ZW5yeW91XCA7CivlvozlraYgPCBrb3VnYWt1XCA7CivpgoTmtYEgPCBrYW5yeXV1XCA7CivljbPliLsgPCBzb2trb2t1XCA7Civlh7bogZ4gPCBreW91YnVuXCA7CivmsJHlm70gPCBtaW5rb2t1XCA7CivlhaXph5EgPCBueXV1a2luXCA7CivliZvnkIMgPCBnb3VreXV1XCA7Civnhqjmlpfnm64gPCBub3NoaW1lXCA7CivljYrlm70gPCBoYW5nb2t1XCA7CivmsLjliKUgPCBlaWJldHN1XCA7Civphbfkvb8gPCBrb2t1c2hpXCA7Civlv6vkvZwgPCBrYWlzYWt1XCA7CivljbDliLcgPCBpbnNhdHN1XCA7Civov73ntI0gPCB0c3Vpbm91XCA7CivmsLfliIMgPCBoeW91amluXCA7CivpmbDorIDlrrYgPCBpbmJvdWthXCA7Civlha3pgZMgPCByb2t1ZG91XCA7CivljJflsrggPCBob2t1Z2FuXCA7CivpgIHnsY0gPCBzb3VzZWtpXCA7CivliKXnp7AgPCBiZXNzaG91XCA7Civpmo/mhI/nrYsgPCB6dWlpa2luXCA7Civluq3nlaogPCBuaXdhYmFuXCA7CivovrLolqwgPCBub3V5YWt1XCA7CivpgYrnjJ8gPCB5dXVyeW91XCA7CivnmbvpjLIgPCB0b3Vyb2t1XCA7CivljaDljZwgPCBzZW5ib2t1XCA7CivmiYvliqDmuJsgPCB0ZWthZ2VuXCA7Civorprnvo7mrYwgPCBzYW5iaWthXCA7CivokYnmnIggPCBoYWR6dWtpXCA7Civlt6jos4ogPCBreW96b2t1XCA7Civoj6/nh60gPCBrYXNob2t1XCA7CivlvZPmg5EgPCB0b3V3YWt1XCA7CivliIbntI0gPCBidW4nJ25vdVwgOwor5Yid56mCIDwgaGF0c3Vob1wgOwor5b+F5YudIDwgaGlzc2hvdVwgOwor55m96YqRIDwgaGFrdXNlblwgOwor5YWo6YCfIDwgemVuc29rdVwgOwor5YWl6YG4IDwgbnl1dXNlblwgOwor5YWo6YCaIDwgemVudHN1dVwgOwor55m96YqFIDwgaGFrdWRvdVwgOwor55m96YqAIDwgaGFrdWdpblwgOwor5YWl6YGTIDwgbnl1dWRvdVwgOwor6YKq5puyIDwgamFreW9rdVwgOwor5Y2c5Y2gIDwgYm9rdXNlblwgOwor5ZCM5L2N5L2TIDwgZG91aXRhaVwgOwor5bel6LODIDwga291Y2hpblwgOwor5rC35YOPIDwgaHlvdXpvdVwgOwor6aGe6Z+z6KqeIDwgcnVpb25nb1wgOwor6YGK54mnIDwgeXV1Ym9rdVwgOwor6YCx55WqIDwgc2h1dWJhblwgOwor5b+D5Yq0IDwgc2hpbnJvdVwgOwor5Yid56eLIDwgc2hvc2h1dVwgOwor5bm+56iLIDwgaWt1aG9kb1wgOwor5q6L5pW1IDwgemFudGVraVwgOwor6YCa56CUIDwgdHN1dWtlblwgOwor5Y2U5ZCMIDwga3lvdWRvdVwgOwor5bmz562JIDwgYnlvdWRvdVwgOwor5Y+J5omL57ayIDwgc2FkZWFtaVwgOwor5Y2z5YCkIDwgc29rdWNoaVwgOwor6YCa55+lIDwgdHN1dWNoaVwgOwor55mC6aSKIDwgcnlvdXlvdVwgOwor5bm056uvIDwgdG9zaGloYVwgOwor5bqt55CDIDwgdGVpa3l1dVwgOwor5q6J5pWZIDwganVua3lvdVwgOwor5q2M5rKiIDwgdXRhemF3YVwgOwor5YuB5pW1IDwga2VpdGVraVwgOwor5YaN6Kq/IDwgc2FpY2hvdVwgOwor5YaN6KqtIDwgc2FpZG9rdVwgOwor5rGC5Lq6IDwga3l1dWppblwgOwor5Yqf5qWtIDwga291Z3lvdVwgOwor6Imy6buSIDwgaXJvZ3Vyb1wgOwor5Y2X5YyXIDwgbmFuYm9rdVwgOwor5bCP57as6baPIDwga29qdWtlaVwgOwor5Y2a5Yq0IDwgYmFrdXJvdVwgOwor5pm06Zuo6KiIIDwgc2VpdWtlaVwgOwor5paH5bqr5YyWIDwgYnVua29rYVwgOwor56C05bGAIDwgaGFreW9rdVwgOwor5q2j5qWtIDwgc2VpZ3lvdVwgOwor6YeO5qyh6aasIDwgeWFqaXVtYVwgOwor5biv6IqvIDwgb2Jpc2hpblwgOwor5Y2K5ZGoIDwgaGFuc2h1dVwgOwor6YGh5rqQIDwgc2FrdWdlblwgOwor5YWo6LqrIDwgemVuc2hpblwgOwor5q+S5a6zIDwgZG9rdWdhaVwgOwor6KGX6Lev5qi5IDwgZ2Fpcm9qdVwgOwor5YaF6Ku+IDwgbmFpZGFrdVwgOwor5bm456aPIDwga291ZnVrdVwgOwor5Yuk5oGqIDwga2lua2FrdVwgOwor5Ye657K+IDwgc2h1c3NlaVwgOwor5b6p5ZG9IDwgZnVrdW1laVwgOwor6Iul6YCgIDwgd2FrYXpvdVwgOwor5bqX55WqIDwgbWlzZWJhblwgOwor6a2N6a2OIDwgbW91cnlvdVwgOwor5o6n6Ki06ZmiIDwga291c29pblwgOwor6YGp5rOVIDwgdGVraWhvdVwgOwor5YSq6ZW3IDwgeXV1Y2hvdVwgOwor5b+Z5LitIDwgYm91Y2h1dVwgOwor5Y2R5YqjIDwgaGlyZXRzdVwgOwor5Yip55m6IDwgcmloYXRzdVwgOwor5LuZ5Lq65o6MIDwgc2Fib3RlblwgOwor5b6p5Y+3IDwgZnVrdWdvdVwgOwor5b+D5YOPIDwgc2hpbnpvdVwgOwor6YCj55SoIDwgcmVuJyd5b3VcIDsKK+awl+WKmyA8IGtpcnlva3VcIDsKK+auteW5syA8IGRhbmJpcmFcIDsKK+WFseiyqSA8IGt5b3VoYW5cIDsKK+WGheiovCA8IG5haXNob3VcIDsKK+WGheiouiA8IG5haXNoaW5cIDsKK+WJiueJhyA8IHNha3VoZW5cIDsKK+W+qeWOnyA8IGZ1a3VnZW5cIDsKK+eZuumAsiA8IGhhc3NoaW5cIDsKK+W8lOaWhyA8IGNob3VidW5cIDsKK+WMl+WkqSA8IGhva3V0ZW5cIDsKK+WMl+WkpyA8IGhva3VkYWlcIDsKK+WFg+mHkSA8IG1vdG9raW5cIDsKK+iLpei8qSA8IGpha3VoYWlcIDsKK+ebiuiZqyA8IGVraWNodXVcIDsKK+W+s+WIqSA8IHRva2t1cmlcIDsKK+WLgeaNtyA8IGtlaXNob3VcIDsKK+W/heS/riA8IGhpc3NodXVcIDsKK+ebsuiFuCA8IG1vdWNob3VcIDsKK+W+s+WIhiA8IHRva3VidW5cIDsKK+iSuOWZqCA8IG11c2hpa2lcIDsKK+W+ruWKmyA8IGJpcnlva3VcIDsKK+WMv+WQjSA8IHRva3VtZWlcIDsKK+W6teeCuSA8IGlvcml0ZW5cIDsKK+W7tuajkiA8IG5vYmVib3VcIDsKK+W4uOe/kiA8IGpvdXNodXVcIDsKK+WItueQgyA8IHNlaWt5dXVcIDsKK+WIhuenkiA8IGZ1bmJ5b3VcIDsKK+atk+alvSA8IGthbnJha3VcIDsKK+awtOS4rSA8IHN1aWNodXVcIDsKK+mDqOWxgCA8IGJ1a3lva3VcIDsKK+WHjeiCiSA8IHRvdW5pa3VcIDsKK+mAmueUqCA8IHRzdXV5b3VcIDsKK+iNieiJsiA8IGt1c2Fpcm9cIDsKK+WMl+WigyA8IGhva2t5b3VcIDsKK+mtgumthCA8IGtvbnBha3VcIDsKK+W+tOWFtSA8IGNob3VoZWlcIDsKK+mFjeS/oSA8IGhhaXNoaW5cIDsKK+mAl+eVmSA8IHRvdXJ5dXVcIDsKK+mBqeatoyA8IHRla2lzZWlcIDsKK+ato+acnSA8IHNlaWNob3VcIDsKK+ato+aclCA8IHNlaXNha3VcIDsKK+WHhOiFlSA8IHN1Z291ZGVcIDsKK+WFiemAnyA8IGtvdXNva3VcIDsKK+WLmOW/jSA8IGthbicnbmluXCA7CivlhYjpgLIgPCBzZW5zaGluXCA7CivlhYjpgLEgPCBzZW5zaHV1XCA7CivlhaXosqIgPCBueXV1a291XCA7CivphZLku6MgPCBzYWthZGFpXCA7Civnmb3ouqsgPCBzaGlyb21pXCA7Civlt6vooZMgPCBmdWp1dHN1XCA7CivpgJ/nkIMgPCBzb2treXV1XCA7Civov5TntI0gPCBoZW4nJ25vdVwgOwor5b6p5Yi7IDwgZnVra29rdVwgOwor6Lu96ZyHIDwga2Vpc2hpblwgOwor6I2S6IKdIDwgYXJhZ2ltb1wgOwor5Ye656mCIDwgc2h1c3N1aVwgOwor5byV5o+bIDwgaGlraWthZVwgOwor6Ly76LyzIDwgZnVrdXNvdVwgOwor5qyy5rGCIDwgeW9ra3l1dVwgOwor5bu25p2/IDwgbm9iZWl0YVwgOwor55yf56m6IDwgc2hpbmt1dVwgOwor55y855uuIDwgZ2FubW9rdVwgOwor5byV5o6lIDwgaW5zZXRzdVwgOwor6Imy6a2UIDwgc2hpa2ltYVwgOwor5b+F5LitIDwgaGl0Y2h1dVwgOwor6Lyq6YOtIDwgcmlua2FrdVwgOwor576p5o+06YeRIDwgZ2llbmtpblwgOwor5Y2Y5L2cIDwgdGFuc2FrdVwgOwor55yB57eaIDwgc2hvdXNlblwgOwor5by+5bmVIDwgZGFubWFrdVwgOwor5bm055uKIDwgbmVuJydla2lcIDsKK+W+qeWFmiA8IGZ1a3V0b3VcIDsKK+WFiei7uCA8IGtvdWppa3VcIDsKK+W7v+aXpSA8IGhhdHN1a2FcIDsKK+W8seW/lyA8IGpha3VzaGlcIDsKK+WMl+WbvSA8IGhva2tva3VcIDsKK+W8t+W8gSA8IGt5b3ViZW5cIDsKK+mChOaapiA8IGthbnJla2lcIDsKK+WKseaMryA8IHJlaXNoaW5cIDsKK+i+nuiJsiA8IGppc2hva3VcIDsKK+WHuuekviA8IHNodXNzaGFcIDsKK+iNieiCpSA8IGt1c2Fnb2VcIDsKK+WIqeeOhyA8IHJpcml0c3VcIDsKK+eZuui2syA8IGhvc3Nva3VcIDsKK+WFrOiplSA8IGtvdWh5b3VcIDsKK+WFrOiovCA8IGtvdXNob3VcIDsKK+WNgeWFrSA8IGp1dXJva3VcIDsKK+WIpeePjSA8IGJldGNoaW5cIDsKK+WNlOS8miA8IGt5b3VrYWlcIDsKK+S/r+eesOWbsyA8IGZ1a2FuenVcIDsKK+W+oeaWsOmmmSA8IG9zaGlua29cIDsKK+S6nOexs+WIqeWKoCA8IGFtZXJpa2FcIDsKK+WMuuWIpSA8IGt1YmV0c3VcIDsKK+WNg+WEhCA8IHNlbicnb2t1XCA7CivmsJfkvY0gPCBraWd1cmFpXCA7CivlvqHlrrbkurogPCBnb2tlbmluXCA7CivlvLHlvJ8gPCBqYWt1dGVpXCA7CivlhbHopZ8gPCB0b21vZXJpXCA7CivnnLznl4UgPCBnYW5ieW91XCA7Civlha3op5IgPCByb2trYWt1XCA7CivljZLkvI0gPCBzb3RzdWdvXCA7CivlpKflr7rpmaIgPCBkYWlqaWluXCA7Civmrq/lrq4gPCBoaW5reXV1XCA7CivnoJTlraYgPCBrZW5nYWt1XCA7Civmrovlv7UgPCB6YW4nJ25lblwgOwor6I2356mNIDwgbmlkenVtaVwgOwor5Y2X5LitIDwgbmFuY2h1dVwgOwor5Ya36IKJIDwgcmVpbmlrdVwgOwor6JC95omLIDwgcmFrdXNodVwgOwor55u457aaIDwgc291em9rdVwgOwor5q6L5b+NIDwgemFuJyduaW5cIDsKK+awl+S7mCA8IGtpZHp1a2VcIDsKK+WFpeippiA8IG55dXVzaGlcIDsKK+aui+W/gyA8IHphbnNoaW5cIDsKK+eDj+e+veeOiSA8IHViYXRhbWFcIDsKK+WJtealrSA8IHNvdWd5b3VcIDsKK+WHoeetliA8IGJvbnNha3VcIDsKK+WLieW8tyA8IGJlbmt5b3VcIDsKK+WFseijjyA8IHRvbW91cmFcIDsKK+W+jOWOhCA8IGF0b3lha3VcIDsKK+iQveaIkCA8IHJha3VzZWlcIDsKK+WFqOinkiA8IHplbmtha3VcIDsKK+W8seW5tCA8IGpha3VuZW5cIDsKK+WLp+WtpiA8IGthbmdha3VcIDsKK+WNiuS9nCA8IGhhbnNha3VcIDsKK+W6tua1gSA8IHNob3J5dXVcIDsKK+aAp+ihjOeCuiA8IHNlaWtvdWlcIDsKK+attOaIpiA8IHJla2lzZW5cIDsKK+S4gOiIrOWMliA8IGlwcGFua2FcIDsKK+W3neidpiA8IGthd2FlYmlcIDsKK+atjOabsiA8IGtha3lva3VcIDsKK+W+heWQiCA8IG1hY2hpYWlcIDsKK+W4sOe1kCA8IGtpa2V0c3VcIDsKK+efs+W6rSA8IHNla2l0ZWlcIDsKK+WNkuS4rSA8IHNvdGNodXVcIDsKK+WNk+S4iiA8IHRha3Vqb3VcIDsKK+WFhei2syA8IGp1dXNva3VcIDsKK+iMtuiFuSA8IGNoYWJhcmFcIDsKK+WFjeiyrCA8IG1lbnNla2lcIDsKK+iNkue4hCA8IGFyYW5hd2FcIDsKK+WDu+mahSA8IGhla2lndXVcIDsKK+WKh+aakSA8IGdla2lzaG9cIDsKK+ebtOe1jCA8IGNob2trZWlcIDsKK+WNgeS6lOWknCA8IGp1dWdveWFcIDsKK+ebrue4gSA8IG1hYnVjaGlcIDsKK+WDu+mZrCA8IGhla2lzdXVcIDsKK+mBjeattCA8IGhlbnJla2lcIDsKK+W4r+e0mSA8IG9iaWdhbWlcIDsKK+W5sueToiA8IGthbnB5b3VcIDsKK+WEn+mHkSA8IHNob3VraW5cIDsKK+awj+S6uiA8IHVqaWhpdG9cIDsKK+efpeW+syA8IGNoaXRva3VcIDsKK+mBiuattCA8IHl1dXJla2lcIDsKK+S6jOmZouWItiA8IG5paW5zZWlcIDsKK+WFrOihhiA8IGtvdXNodXVcIDsKK+WFiOiyoCA8IHNlbm1ha2VcIDsKK+ecvOeQgyA8IGdhbmt5dXVcIDsKK+W4veeroCA8IGJvdXNob3VcIDsKK+i/keensCA8IGtpbnNob3VcIDsKK+eZuuitsCA8IGhhdHN1Z2lcIDsKK+WHuueboyA8IHNodWtrYW5cIDsKK+mAgeeQgyA8IHNvdWt5dXVcIDsKK+WutuaUv+WppiA8IGthc2VpZnVcIDsKK+iJr+miqCA8IHJ5b3VmdXVcIDsKK+WIhueVmSA8IGJ1bnJ5dXVcIDsKK+WLmOWvqSA8IGthbnNoaW5cIDsKK+mBqeadkCA8IHRla2l6YWlcIDsKK+mCgOaSgyA8IHlvdWdla2lcIDsKK+mAo+a/gSA8IHJlbmRha3VcIDsKK+esrOS6jOe+qSA8IGRhaW5pZ2lcIDsKK+atv+W+jCA8IGJvdHN1Z29cIDsKK+WGhui7jOmBkyA8IGVua2lkb3VcIDsKK+ecn+ebuCA8IHNoaW5zb3VcIDsKK+ecn+ebtCA8IG1hc3N1Z3VcIDsKK+W9ueWQjSA8IHlha3VtZWlcIDsKK+W+k+WDlSA8IGp1dWJva3VcIDsKK+mBk+alvSA8IGRvdXJha3VcIDsKK+eerOaWrSA8IHNodW5kYW5cIDsKK+mHjuiRoeiQhCA8IG5vYnVkb3VcIDsKK+eZuuiqniA8IGhhdHN1Z29cIDsKK+WLp+WlqCA8IGthbnNob3VcIDsKK+WKm+aKlSA8IHJpa2l0b3VcIDsKK+WIkeeNhCA8IGtlaWdva3VcIDsKK+eZvuioiCA8IGh5YWtrZWlcIDsKK+WNg+S4oSA8IHNlbnJ5b3VcIDsKK+W+jOWFiCA8IGF0b3Nha2lcIDsKK+WNgeS5nSA8IGp1dWt5dXVcIDsKK+eZuuipsSA8IGhhdHN1d2FcIDsKK+WMl+WNiiA8IGhva3VoYW5cIDsKK+W7g+alrSA8IGhhaWd5b3VcIDsKK+eZuuiouyA8IGhhdGNodXVcIDsKK+WNgeS4oSA8IGp1dXJ5b3VcIDsKK+WKm+aIpiA8IHJpa2lzZW5cIDsKK+WNgeS4gyA8IGp1dW5hbmFcIDsKK+WNgeS4gCA8IGp1dWljaGlcIDsKK+W8leW9kyA8IGhpa2lhdGVcIDsKK+mAuOawkSA8IGl0c3VtaW5cIDsKK+W+i+WEgCA8IHJpY2hpZ2lcIDsKK+W/nOWLn+iAhSA8IG91Ym9zaGFcIDsKK+WJjeattCA8IHplbnJla2lcIDsKK+WJr+acrCA8IGZ1a3Vob25cIDsKK+iJsemboyA8IGthbicnbmFuXCA7Civpurvlrp/msrkgPCBhc2FtaXl1XCA7CivojLbpo6/kuosgPCBzYWhhbmppXCA7CivlvI/lvq4gPCBzaGlraWJpXCA7CivpgYrmpb0gPCB5dXVyYWt1XCA7Civou73ph48gPCBrZWlyeW91XCA7Civou73ph40gPCBrZWljaG91XCA7Civnm67nrpcgPCBtb2t1c2FuXCA7Civlh7rnlKMgPCBzaHVzc2FuXCA7CivnmbroppogPCBoYWtrYWt1XCA7CivpgLLmsLQgPCBzaGluc3VpXCA7Civlhavph43pm7IgPCB5YWVndW1hXCA7CivmrLLmnJsgPCB5b2t1Ym91XCA7Civli4flsIYgPCB5dXVzaG91XCA7Civnm5/ntIQgPCBtZWl5YWt1XCA7Civnm7jnp7AgPCBzb3VzaG91XCA7Civlvbzlh6YgPCBrYXNoaWtvXCA7Civnn67lsI8gPCB3YWlzaG91XCA7Civnnavmr5sgPCBtYXRzdWdlXCA7CivpgrjlroUgPCB0ZWl0YWt1XCA7Civnm67nq68gPCBtZWhhc2hpXCA7Civli4nlraYgPCBiZW5nYWt1XCA7Civpr6jogokgPCBnZWluaWt1XCA7CivlhKrotoogPCB5dXVldHN1XCA7Civnmb7ooYwgPCBoeWFra291XCA7Civov5HnnLwgPCBjaGlrYW1lXCA7Civoj4zmr5IgPCBraW5kb2t1XCA7CivmrbTlubQgPCByZWtpbmVuXCA7CivmnKrouI/mn7sgPCBtaXRvdXNhXCA7CivlvJPluKsgPCB5dW1pc2hpXCA7CivlhYjoppogPCBzZW5rYWt1XCA7CivlvozkvZwgPCBhdG9zYWt1XCA7Civlt6joiLYgPCBreW9oYWt1XCA7CivlupXmtYEgPCB0ZWlyeXV1XCA7CivntbXokYnmm7ggPCBlaGFnYWtpXCA7CivnmbrooaggPCBoYXBweW91XCA7Civpgbjmip4gPCBzZW50YWt1XCA7CivmrKDmoLwgPCBrZWtrYWt1XCA7CivlhbHokZcgPCBreW91Y2hvXCA7CivnqL3lj6TloLQgPCBrZWlrb2JhXCA7CivluoPmvKAgPCBrb3ViYWt1XCA7CivojYnnrJsgPCBrdXNhYnVlXCA7Civli53loLEgPCBzaG91aG91XCA7CivliJ3mva4gPCBzaG9jaG91XCA7CivliqnlubMgPCBzdWtlYmVpXCA7CivlronlhajmnJ8gPCBhbnplbmtpXCA7CivlvLflpKcgPCBreW91ZGFpXCA7Civlj43mhI/oqp4gPCBoYW4nJ2lnb1wgOwor6Lyq6KqtIDwgcmluZG9rdVwgOwor55+l5bCGIDwgY2hpc2hvdVwgOwor5YaF6IacIDwgbmFpbWFrdVwgOwor5by35aOuIDwga3lvdXNvdVwgOwor5b255YOnIDwgeWFrdXNvdVwgOwor5YCL5Lq65beuIDwga29qaW5zYVwgOwor5YqH5oimIDwgZ2VraXNlblwgOwor57eP5YuZ6YOoIDwgc291bXVidVwgOwor5q+S5YiDIDwgZG9rdWppblwgOwor55m96J2LIDwgaGFrdXJvdVwgOwor5biG57axIDwgaG9kenVuYVwgOwor6LuN6ZW3IDwgZ3VuY2hvdVwgOwor5Yqb5b25IDwgcmlraWVraVwgOwor6K2m6YOo6KOcIDwga2VpYnVob1wgOwor5Ya356yRIDwgcmVpc2hvdVwgOwor5LiO5aSq6YOOIDwgeW90YXJvdVwgOwor6Iy257KlIDwgY2hhZ2F5dVwgOwor5bu75b+DIDwga2Fpc2hpblwgOwor55yL55eFIDwga2FuYnlvdVwgOwor55uu56S8IDwgbW9rdXJlaVwgOwor6Ly46KGAIDwgeXVrZXRzdVwgOwor5L2N54mM5aCCIDwgaWhhaWRvdVwgOwor5Yud5ZywIDwgc2hvdWNoaVwgOwor5Yid5rmvIDwgaGF0c3V5dVwgOwor576p5aSq5aSrIDwgZ2lkYXl1dVwgOwor5Ye254ybIDwga3lvdW1vdVwgOwor5LiJ6Z6t6YWSIDwgc2hhbnBlblwgOwor6Imm6ZW3IDwga2FuY2hvdVwgOwor5aaD5q6/5LiLIDwgaGlkZW5rYVwgOwor5YeN55+zIDwgdG91c2VraVwgOwor5Yi25qyyIDwgc2VpeW9rdVwgOwor5Ye654mIIDwgc2h1cHBhblwgOwor5byf5auBIDwgb3RveW9tZVwgOwor5Ye254q2IDwga3lvdWpvdVwgOwor5qi66ImyIDwga2FiYWlyb1wgOwor6YCA5r2uIDwgdGFpY2hvdVwgOwor56CC5ZywIDwgc3VuYWNoaVwgOwor6YGT5pWZIDwgZG91a3lvdVwgOwor5ryr55S75a62IDwgbWFuZ2FrYVwgOwor6YGO5pelIDwga2FqaXRzdVwgOwor6Lui6YedIDwgdGVuc2hpblwgOwor6Iy2566xIDwgY2hhYmFrb1wgOwor5biw552AIDwga2ljaGFrdVwgOwor6YGp5omAIDwgdGVraXNob1wgOwor5YO76YKRIDwgaGVraXl1dVwgOwor5LiN5pys5oSPIDwgZnVob24nJ2lcIDsKK+atjuaBryA8IHRhbnNva3VcIDsKK+iLm+iZkCA8IGthZ3lha3VcIDsKK+atqeWQiOeulyA8IGJ1YWl6YW5cIDsKK+W9q+WDjyA8IGNob3V6b3VcIDsKK+iqnuW9meeahCA8IGdvaXRla2lcIDsKK+efs+WhlCA8IHNla2l0b3VcIDsKK+i/lOeQgyA8IGhlbmt5dXVcIDsKK+efs+WhgCA8IGlzaGliZWlcIDsKK+W8n+WnqyA8IG90b2hpbWVcIDsKK+WIqeauliA8IHJpc2hva3VcIDsKK+W9ueS6uiA8IHlha3VuaW5cIDsKK+i+seefpSA8IGpva3VjaGlcIDsKK+WLp+WRiiA8IGthbmtva3VcIDsKK+ebsuebriA8IG1vdW1va3VcIDsKK+eXm+miqCA8IHRzdXVmdXVcIDsKK+mAuOadkCA8IGl0c3V6YWlcIDsKK+esrOS4gOiqsiA8IGRhaWlra2FcIDsKK+WHuueCrSA8IHNodXR0YW5cIDsKK+W8seWbvSA8IGpha2tva3VcIDsKK+iNt+eJqSA8IG5pbW90c3VcIDsKK+WMl+S4iiA8IGhva3Vqb3VcIDsKK+S6leaIuOerryA8IGlkb2JhdGFcIDsKK+WJr+aJiyA8IGZ1a3VzaHVcIDsKK+WJveaCjSA8IGh5b3VrYW5cIDsKK+iJsumHjCA8IGlyb3phdG9cIDsKK+eQhuS6i+S8miA8IHJpamlrYWlcIDsKK+ebpOefsyA8IGJhbmpha3VcIDsKK+i+suebuCA8IG5vdXNob3VcIDsKK+mBiuaSgyA8IHl1dWdla2lcIDsKK+eBq+abnOaXpSA8IGtheW91YmlcIDsKK+WFpeiIjiA8IG55dXVzaGFcIDsKK+W+oeS4jea1hCA8IGdvZnVqb3VcIDsKK+mAkOasoSA8IGNoaWt1amlcIDsKK+i+uueWhiA8IGhlbmt5b3VcIDsKK+WJjeaWuSA8IG1hZWthdGFcIDsKK+eZveiPnCA8IGhha3VzYWlcIDsKK+acquWumue+qSA8IG1pdGVpZ2lcIDsKK+WJsuaEmyA8IGthdHN1YWlcIDsKK+ebo+edoyA8IGthbnRva3VcIDsKK+i6gemssSA8IHNvdXV0c3VcIDsKK+alvemaiiA8IGdha3V0YWlcIDsKK+auieWbvSA8IGp1bmtva3VcIDsKK+mAhuavlCA8IGd5YWt1aGlcIDsKK+WvvuS9jeazlSA8IHRhaWlob3VcIDsKK+WGpeemjyA8IG1laWZ1a3VcIDsKK+edpuaciCA8IG11dHN1a2lcIDsKK+WIu+acrCA8IGtva3Vob25cIDsKK+ato+WtkCA8IHNob3VzaGlcIDsKK+W5veasnSA8IHl1dXV0c3VcIDsKK+auuuWCtyA8IHNhc3Nob3VcIDsKK+a1rua1quWFkCA8IGZ1cm91amlcIDsKK+WppuS6uuenkSA8IGZ1amlua2FcIDsKK+WGhee0hCA8IG5haXlha3VcIDsKK+W8t+WRsyA8IHRzdXlvbWlcIDsKK+WJo+aInyA8IGtlbmdla2lcIDsKK+i/lOeFpyA8IGhlbnNob3VcIDsKK+iJh+mVtyA8IHRlaWNob3VcIDsKK+S7luS4lueVjCA8IHRhc2VrYWlcIDsKK+mBqeW9kyA8IHRla2l0b3VcIDsKK+aFsOWKtOmHkSA8IGlyb3VraW5cIDsKK+aoqeiDvSA8IGtlbicnbm91XCA7CivmraPlq6EgPCBzZWl0ZWtpXCA7CivmrLLmg4UgPCB5b2t1am91XCA7CivluqfmlbcgPCB6YXNoaWtpXCA7CivmpbzplqMgPCByb3VrYWt1XCA7CivliIbms6ggPCBidW5jaHV1XCA7CivljIXkuIEgPCBob3VjaG91XCA7Civnmbroir0gPCBoYXRzdWdhXCA7CivpgLLmlbAgPCBzaGluc3V1XCA7CivnkIbkuI3lsL0gPCByaWZ1amluXCA7Civnmb7oiKwgPCBoeWFwcGFuXCA7Civlh7rmuKAgPCBzaHVra3lvXCA7CivljZjlnZDmqZ8gPCB0YW56YWtpXCA7CivokL3ln44gPCByYWt1am91XCA7CivlibLlvZMgPCB3YXJpYXRlXCA7CivmrLLlv7UgPCB5b2t1bmVuXCA7CivmqJ/ohLMgPCBzaG91bm91XCA7CivkuI3po73lkowgPCBmdWhvdXdhXCA7Civov5HngasgPCBjaGlrYWJpXCA7CivliKXmoLwgPCBiZWtrYWt1XCA7Civnlr7poqggPCBzaGlwcHV1XCA7CivokL3lnLAgPCByYWt1Y2hpXCA7CivlhbHnt6ggPCBreW91aGVuXCA7CivmraTlpbQgPCBrb3lhdHN1XCA7Civnm5fnmZYgPCB0b3VoZWtpXCA7CivoiLnplbcgPCBzZW5jaG91XCA7Civku6PorbDlk6EgPCBkYWlnaWluXCA7CivnoJTkv64gPCBrZW5zaHV1XCA7CivliLfmlrAgPCBzYXNzaGluXCA7CivpnZ7lkIjnkIYgPCBoaWdvdXJpXCA7Civmrr/kuK0gPCBkZW5jaHV1XCA7CivlvLflipsgPCBnb3VyaWtpXCA7Civluo/mm7IgPCBqb2t5b2t1XCA7Civnt4/li5noqrIgPCBzb3VtdWthXCA7Civluormnb8gPCB5dWthaXRhXCA7CivpgJrmnIkgPCB0c3V1eXV1XCA7CivlhbXns6cgPCBoeW91cm91XCA7Civnm4bnn7MgPCBib25zZWtpXCA7CivmrKPmgqYgPCBraW5ldHN1XCA7CivlhbjnsY0gPCB0ZW5zZWtpXCA7CivpgZPlvrMgPCBkb3V0b2t1XCA7Civnl4Xpm6MgPCBieW91bmFuXCA7Civlipvlo6sgPCByaWtpc2hpXCA7CivmpLDlrZDmsrkgPCB5YXNoaXl1XCA7Civou4rovJsgPCBzaGFyeW91XCA7CivlhbXnsY0gPCBoZWlzZWtpXCA7CivpgJ/mlq0gPCBzb2t1ZGFuXCA7Civou4rou7ggPCBzaGFqaWt1XCA7CivlhoXnqY0gPCBuYWlzZWtpXCA7CivliaPlvaIgPCBrZW5nYXRhXCA7CivojZLniakgPCBhcmFtb25vXCA7Civnm7LniIYgPCBtb3ViYWt1XCA7Civlg7voq5YgPCBoZWtpcm9uXCA7CivlvLflhbUgPCBreW91aGVpXCA7CivlhazntIQgPCBrb3V5YWt1XCA7CivmrrXkuJggPCBkYW5reXV1XCA7CivovrLniacgPCBub3Vib2t1XCA7CivlhaXntr8gPCBpcmV3YXRhXCA7CivmsLTms7PnnYAgPCBzdWllaWdpXCA7CivmqKrnt5ogPCB5b2tvc2VuXCA7Civnmb3nvr0gPCBzaGlyYWhhXCA7Civls7vpmbogPCBzaHVua2VuXCA7Civlt6vnpZ0gPCBmdXNodWt1XCA7Civou7joo4UgPCBqaWt1c291XCA7Civnm6PnjYQgPCBrYW5nb2t1XCA7CivliKXmmYIgPCBiZXRzdWppXCA7CivlvJTllY8gPCBjaG91bW9uXCA7CivlhajntJogPCB6ZW5reXV1XCA7CivlhoXnpo8gPCBuYWlmdWt1XCA7CivlhpnnnJ8gPCBzaGFzaGluXCA7Civlh53mu54gPCBneW91dGFpXCA7CivpgZPluoogPCBkb3VzaG91XCA7Civmrorli50gPCBzaHVzaG91XCA7Civou43otrMgPCBndW5zb2t1XCA7Civlg7voqIAgPCBoZWtpZ2VuXCA7CivntbXojYnntJkgPCBlem91c2hpXCA7CivliaPluZUgPCBrZW5tYWt1XCA7Civlh7bmrbMgPCBreW91c2FpXCA7CivliZvlvLcgPCBnb3VreW91XCA7CivliIbmpa0gPCBidW5neW91XCA7Civou6Loqr8gPCB0ZW5jaG91XCA7CivmrYzlp6sgPCB1dGFoaW1lXCA7CivpgaDlsbEgPCB0b295YW1hXCA7CivmqKrns7ggPCB5b2tvaXRvXCA7CivmrKHlvI8gPCBqaXNoaWtpXCA7CivpgYrlvIsgPCB5dXV5b2t1XCA7CivpgbrlpLEgPCBpc2hpdHN1XCA7CivpgbjlpaggPCBzZW5zaG91XCA7Civlg7voposgPCBoZWtpa2VuXCA7CivoirHokbUgPCBoYW5hYW9pXCA7CivokL3lkb0gPCByYWt1bWVpXCA7CivpgYrlu5MgPCB5dXVrYWt1XCA7CivmqLnnq4sgPCBqdXJpdHN1XCA7CivprZTooZMgPCBtYWp1dHN1XCA7Civlh6HmtYEgPCBib25yeXV1XCA7CivoiIzpn7MgPCB6ZXRzdW9uXCA7CivliJ3ml6UgPCBoYXRzdWhpXCA7CivlvJXlj5cgPCBoaWtpdWtlXCA7CivlioflpIkgPCBnZWtpaGVuXCA7Civlu7rlm70gPCBrZW5rb2t1XCA7Civnn63lhoogPCB0YW56YWt1XCA7Civnn7Plg48gPCBzZWtpem91XCA7CivnnaPmiKYgPCB0b2t1c2VuXCA7CivnnLrmnJsgPCBjaG91Ym91XCA7Civlioflo4cgPCBnZWtpZGFuXCA7Civov5Hms4EgPCBraW5reW91XCA7CivmrKDluK0gPCBrZXNzZWtpXCA7Civlt6jnn7MgPCBreW9zZWtpXCA7CivmrbTlj7IgPCByZWtpc2hpXCA7CivlubPmnI0gPCBoZWlmdWt1XCA7Civou6LopoYgPCB0ZW5wdWt1XCA7CivmqZ/nlaUgPCBraXJ5YWt1XCA7CivlsI/niqzluqcgPCBrb2ludXphXCA7CivliofloLQgPCBnZWtpam91XCA7Civouqvov5EgPCBtaWRqaWthXCA7CivpgIbml4UgPCBnZWtpcnlvXCA7CivouqvovrogPCBzaGlucGVuXCA7CivliIbmnpAgPCBidW5zZWtpXCA7CivlvLHkvZMgPCBqYWt1dGFpXCA7CivmqKrnrJsgPCB5b2tvYnVlXCA7CivnmbrntaYgPCBoYWtreXV1XCA7Civou73oloQgPCBrZWloYWt1XCA7CivlvJXlipsgPCBpbnJ5b2t1XCA7Civlhobnm4YgPCBtYXJ1Ym9uXCA7CivotaTlkbPlmYwgPCBha2FtaXNvXCA7CivokZfkvZwgPCBjaG9zYWt1XCA7Civnl6nouqsgPCBzb3VzaGluXCA7CivoirHoibIgPCBoYW5haXJvXCA7CivpgJ/miJAgPCBzb2t1c2VpXCA7Civlt6bnm7QgPCBzYWNob2t1XCA7CivliY3lubQgPCB6ZW4nJ25lblwgOwor6YCB5paZIDwgc291cnlvdVwgOwor6bGX5pyoIDwgcmluYm9rdVwgOwor55m957KJIDwgb3NoaXJvaVwgOwor5YaF55qEIDwgbmFpdGVraVwgOwor6Ium56+AIDwga3VzZXRzdVwgOwor55m957GzIDwgaGFrdW1haVwgOwor55+t5L+hIDwgdGFuc2hpblwgOwor5qiq56m0IDwgeW9rb2FuYVwgOwor5qW16YGTIDwgZ29rdWRvdVwgOwor5a++576p6KqeIDwgdGFpZ2lnb1wgOwor55y35pePIDwga2Vuem9rdVwgOwor6YGT5a2mIDwgZG91Z2FrdVwgOwor5YG06Z2iIDwgc29rdW1lblwgOwor5bmj5p2fIDwgaGVpc29rdVwgOwor5Yqp5YuiIDwgc3VrZXplaVwgOwor5Yqf5ZCNIDwga291bXlvdVwgOwor6ImH6LqrIDwgdGVpc2hpblwgOwor5rGa5p+T6I+MIDwgb3NlbmtpblwgOwor6YGO5a+GIDwga2FtaXRzdVwgOwor5LiJ5pel6LevIDwgbWlra2FqaVwgOwor5Yqq5YqbIDwgZG9yeW9rdVwgOwor5bGF6YWS5bGLIDwgaXpha2F5YVwgOwor5bqt5birIDwgbml3YXNoaVwgOwor6aqo6aq8IDwga29ra2FrdVwgOwor5Yqp5YqbIDwgam9yeW9rdVwgOwor6L+95pS+IDwgdHN1aWhvdVwgOwor6Ieq5a626KO9IDwgamlrYXNlaVwgOwor6YGK5a2mIDwgeXV1Z2FrdVwgOwor5q2z5YWlIDwgc2Fpbnl1dVwgOwor6bOp5ZCIIDwga3l1dWdvdVwgOwor5qyg5a2XIDwga2V0c3VqaVwgOwor5aGX5biD5YmkIDwgdG9mdXphaVwgOwor5q2j5YyXIDwgc2VpaG9rdVwgOwor5YK36LehIDwga2l6dWF0b1wgOwor5q2m5YqbIDwgYnVyeW9rdVwgOwor6YGp5ZywIDwgdGVraWNoaVwgOwor5Yqf5YqbIDwga291cmlraVwgOwor5Y+k5YW46KqeIDwga290ZW5nb1wgOwor6I2S5rOiIDwgYXJhbmFtaVwgOwor6L+R5qWtIDwga2luZ3lvdVwgOwor55yf5pu4IDwgc2hpbnNob1wgOwor5bq15a6kIDwgYW5qaXRzdVwgOwor5YWx55uKIDwga3lvdWVraVwgOwor6YCa5oCnIDwgdHN1dXNlaVwgOwor5q2j5YmHIDwgc2Vpc29rdVwgOwor6ayx6KGAIDwgdWtrZXRzdVwgOwor5YW855SoIDwga2VuJyd5b3VcIDsKK+WKtOS9nCA8IHJvdXNha3VcIDsKK+mAmuW/tSA8IHRzdXVuZW5cIDsKK+WHi+auiyA8IGNob3V6YW5cIDsKK+S4jeaZr+awlyA8IGZ1a2Vpa2lcIDsKK+WGt+a2vCA8IHJlaXJ5b3VcIDsKK+i7veiInyA8IGtlaXNodXVcIDsKK+iQveS9kyA8IHJha3V0YWlcIDsKK+mAo+W5tCA8IHJlbicnbmVuXCA7CivliIfmj5sgPCBraXJpa2FlXCA7Civnl5Xot6EgPCBrb25zZWtpXCA7CivlkIjnkIbljJYgPCBnb3VyaWthXCA7CivlubLmi5MgPCBrYW50YWt1XCA7CivmrbvkurogPCBzaGliaXRvXCA7CivlhaznmoQgPCBrb3V0ZWtpXCA7Civlu7rliY0gPCB0YXRlbWFlXCA7CivliIfmjpsgPCBraWtrYWtlXCA7CivpgLLlsZUgPCBzaGludGVuXCA7CivmrKDlpoIgPCBrZXRzdWpvXCA7CivpqqjpoIIgPCBrb3RjaG91XCA7CivmqKrnnYAgPCBvdWNoYWt1XCA7CivliIbmjowgPCBidW5zaG91XCA7CivlvIHlhJ8gPCBiZW5zaG91XCA7Civmi4nkuIHoqp4gPCByYXRlbmdvXCA7CivliJHmiK4gPCBrZWlyaWt1XCA7CivpgJrlvIogPCB0c3V1aGVpXCA7CivnmbrnpaUgPCBoYXNzaG91XCA7CivpgJrlvIEgPCB0c3V1YmVuXCA7CivmrbTkvJ0gPCByZWtpZGVuXCA7Civlub3mhIEgPCB5dXVzaHV1XCA7CivokL3kurogPCBvY2h1dWRvXCA7CivlhaXnm6MgPCBueXV1a2FuXCA7CivmrbvkuK0gPCBzaGljaHV1XCA7CivmrbTku7sgPCByZWtpbmluXCA7CivliKXlvowgPCBiZXRzdWdvXCA7Civpm7vno4Hms6IgPCBkZW5qaWhhXCA7CivmrbTku6MgPCByZWtpZGFpXCA7CivlhbHnlKggPCBreW91eW91XCA7CivmpbXosqcgPCBnb2t1aGluXCA7CivlhbHnlKMgPCBreW91c2FuXCA7CivmqKnnm4ogPCBrZW4nJ2VraVwgOwor5bm75oORIDwgZ2Vud2FrdVwgOwor6Lui6JC9IDwgdGVucmFrdVwgOwor5bmV5pS/IDwgYmFrdXNlaVwgOwor55yM5pyJIDwga2VuJyd5dXVcIDsKK+i/veaHkCA8IHRzdWlrYWlcIDsKK+mtmuiFuSA8IGd5b2Z1a3VcIDsKK+mAmuW4uCA8IHRzdXVqb3VcIDsKK+i/veaGtiA8IHRzdWlva3VcIDsKK+i6iui6hyA8IGNodXVjaG9cIDsKK+msvOiTriA8IG9uaWJhc3VcIDsKK+ecn+aRryA8IHNoaW5zaGlcIDsKK+mbu+ejgeawlyA8IGRlbmppa2lcIDsKK+eahuebriA8IGthaW1va3VcIDsKK+eZveeggiA8IGhha3VzaGFcIDsKK+amguiplSA8IGdhaWh5b3VcIDsKK+W8i+S6uiA8IHlva3VqaW5cIDsKK+WHneacmyA8IGd5b3Vib3VcIDsKK+WCvuinkiA8IGtlaWtha3VcIDsKK+WFuOeNhCA8IHRlbmdva3VcIDsKK+mvm+eEvCA8IHRhaXlha2lcIDsKK+mBqeWQiCA8IHRla2lnb3VcIDsKK+WKh+WJpCA8IGdla2l6YWlcIDsKK+WIpeW4rSA8IGJlc3Nla2lcIDsKK+WFg+emhCA8IGdlbnJva3VcIDsKK+WCvuimhiA8IGtlaWZ1a3VcIDsKK+mtmuiCiSA8IGd5b25pa3VcIDsKK+WFpeeUqCA8IG55dXV5b3VcIDsKK+eZveecvCA8IGhha3VnYW5cIDsKK+iNkualrSA8IGFyYXdhemFcIDsKK+WIuuWtkCA8IHNhc2hpa29cIDsKK+ato+S9kyA8IHNob3V0YWlcIDsKK+mAhuW+kiA8IGd5YWt1dG9cIDsKK+Wxsem6kyA8IHNhbnJva3VcIDsKK+i/juaYpSA8IGdlaXNodW5cIDsKK+eZveebriA8IHNoaXJvbWVcIDsKK+WIl+W8tyA8IHJla2t5b3VcIDsKK+i+sualrSA8IG5vdWd5b3VcIDsKK+WIh+aEmyA8IHNldHN1YWlcIDsKK+WAmemzpSA8IGtvdWNob3VcIDsKK+aghOmkiuS+oSA8IGVpeW91a2FcIDsKK+mChOS/lyA8IGdlbnpva3VcIDsKK+mAn+WwhCA8IHNva3VzaGFcIDsKK+i/t+aDkSA8IG1laXdha3VcIDsKK+mAvOWhniA8IGhpc3Nva3VcIDsKK+eXm+iogCA8IHRzdXVnZW5cIDsKK+WIneW3syA8IGhhdHN1bWlcIDsKK+esrOS6jOasoSA8IGRhaW5pamlcIDsKK+eWvui1sCA8IHNoaXNzb3VcIDsKK+WIl+W6pyA8IHJldHN1emFcIDsKK+edgOW6pyA8IGNoYWt1emFcIDsKK+iMtuauuyA8IGNoYWdhcmFcIDsKK+i/veW+kyA8IHRzdWlqdXVcIDsKK+ato+S4rSA8IHNlaWNodXVcIDsKK+i6rOihjCA8IGt5dXVrb3VcIDsKK+eZveeXtCA8IGhha3VjaGlcIDsKK+S6leaIuOawtCA8IGlkb21penVcIDsKK+WHtuaJiyA8IGt5b3VzaHVcIDsKK+W4guazgSA8IHNoaWt5b3VcIDsKK+WIl+W4rSA8IHJlc3Nla2lcIDsKK+W4nealrSA8IHRlaWd5b3VcIDsKK+WJjeWegiA8IG1hZWRhcmVcIDsKK+S4gOWAi+S6uiA8IGlra29qaW5cIDsKK+S6oeellueItiA8IGJvdXNvZnVcIDsKK+W+oeacseWNsCA8IGdvc2h1aW5cIDsKK+edgOW3pSA8IGNoYWtrb3VcIDsKK+WJsuWLmCA8IHdhcmlrYW5cIDsKK+eVsOaAp+S9kyA8IGlzZWl0YWlcIDsKK+eZuueWuSA8IGhvc3NoaW5cIDsKK+mzpeS6uiA8IGNob3VqaW5cIDsKK+i/juaSgyA8IGdlaWdla2lcIDsKK+mAsuWhgSA8IHNoaW5ydWlcIDsKK+WJo+WRkSA8IGtlbicnbm9uXCA7CivlhpLmtpwgPCBib3V0b2t1XCA7CivmpJzpj6EgPCBrZW5reW91XCA7CivlhYjnmocgPCBzZW4nJ25vdVwgOwor6YCA5bitIDwgdGFpc2VraVwgOwor5Yil5a60IDwgYmV0c3VlblwgOwor6YCx5aCxIDwgc2h1dWhvdVwgOwor5Ymy5YmNIDwgd2FyaW1hZVwgOwor5YaG5ruRIDwgZW5rb3RzdVwgOwor5Yil5a6FIDwgYmV0dGFrdVwgOwor5YWN55arIDwgbWVuJydla2lcIDsKK+WJsuWIpCA8IHdhcmloYW5cIDsKK+mdnuWQjOacnyA8IGhpZG91a2lcIDsKK+i7uOe3miA8IGppa3VzZW5cIDsKK+WNgemcsuebpCA8IHNvcm9iYW5cIDsKK+WBtOi+uiA8IHNva3VoZW5cIDsKK+asoOWToSA8IGtldHN1aW5cIDsKK+ajkumxiCA8IGJvdWRhcmFcIDsKK+WFpeeJqSA8IGlyZW1vbm9cIDsKK+WFpeeJoiA8IG55dXVyb3VcIDsKK+mBuOS7uyA8IHNlbicnbmluXCA7Civlh7bmgqogPCBreW91YWt1XCA7CivnrYboqJjlhbcgPCBoaWtraWd1XCA7CivnlarplbcgPCBiYW5jaG91XCA7CivnqY/lgaXmtL4gPCBvbmtlbmhhXCA7CivogrLlhZDlnJIgPCBpa3VqaWVuXCA7CivlubzlsJEgPCB5b3VzaG91XCA7Civpm7vmsJfngokgPCBkZW5raXJvXCA7CivojYnmnKggPCBzb3Vtb2t1XCA7Civnm67mmJ8gPCBtZWJvc2hpXCA7Civkvp3lrZjmgKcgPCBpem9uc2VpXCA7Civlub3lr4IgPCB5dXVqYWt1XCA7Civlg5roiaYgPCByeW91a2FuXCA7CivliIblt7sgPCBidW5tYWtpXCA7Civmr5Tlj6HlsbEgPCBoaWVpemFuXCA7Civnmannl4UgPCByYWlieW91XCA7CivpgJrlpY8gPCB0c3V1c291XCA7CivnlqPotrMgPCBpYm9hc2hpXCA7Civkvp3poLzogIUgPCBpcmFpc2hhXCA7Civoia/og70gPCByeW91bm91XCA7CivovInnqY0gPCBzYWlzZWtpXCA7CivojLbmo5ogPCBjaGFkYW5hXCA7CivlubzlrZAgPCBvc2FuYWdvXCA7CivpgankvosgPCB0ZWtpcmVpXCA7CivmpJzph50gPCBrZW5zaGluXCA7Civlh7rlu7cgPCBzaHV0dGVpXCA7CivltKnokL0gPCBob3VyYWt1XCA7CivnnJ/lvbEgPCBzaGluJydlaVwgOwor5bm05bCRIDwgbmVuc2hvdVwgOwor5bmj5bibIDwgaGVpaGFrdVwgOwor5Ye25by+IDwga3lvdWRhblwgOwor6YCf5aCxIDwgc29rdWhvdVwgOwor55Sy6auYIDwga291ZGFrYVwgOwor55m954q2IDwgaGFrdWpvdVwgOwor6KO95rK55omAIDwgc2VpeXVqb1wgOwor6YGp5Lu7IDwgdGVraW5pblwgOwor5Yi25ZynIDwgc2VpYXRzdVwgOwor55a+6KaWIDwgc2hpc3NoaVwgOwor6Ium54axIDwga3VuZXRzdVwgOwor55m654uCIDwgaGFra3lvdVwgOwor5Ym15L2cIDwgc291c2FrdVwgOwor5qqE5paHIDwgZ2VraWJ1blwgOwor5YaF5rGgIDwgdWNoaWlrZVwgOwor55uu5pKlIDwgbWViYWNoaVwgOwor5YGP6YedIDwgaGVuc2hpblwgOwor6YCA5a2mIDwgdGFpZ2FrdVwgOwor5YGP6YeNIDwgaGVuY2hvdVwgOwor5bm05a2QIDwgdG9zaGlnb1wgOwor6YCa5aCxIDwgdHN1dWhvdVwgOwor5Z+65pys6KqeIDwga2lob25nb1wgOwor5Ymj5YWIIDwga2Vuc2FraVwgOwor5Ye25bm0IDwga3lvdW5lblwgOwor55yf5bmzIDwgbWFwcGlyYVwgOwor55mS552AIDwgeXVjaGFrdVwgOwor5b6h5LiJ5a62IDwgZ29zYW5rZVwgOwor5Ymv5L2/IDwgZnVrdXNoaVwgOwor6I6r5aSnIDwgYmFrdWRhaVwgOwor5YmN5Y6EIDwgbWFleWFrdVwgOwor6a2a56ucIDwgZ3lvcnl1dVwgOwor6L+35a6uIDwgbWVpa3l1dVwgOwor6YGF5Yi7IDwgY2hpa29rdVwgOwor5bmU5bmVIDwgbWFubWFrdVwgOwor5LqU56+A5Y+lIDwgZ29zZWtrdVwgOwor5qOu6ZaRIDwgc2hpbmthblwgOwor6L6f5piTIDwgaGVraWVraVwgOwor5YWl5ryBIDwgbnl1dWd5b1wgOwor55u05oqrIDwgY2hva3VoaVwgOwor6Kqk5YuV5L2cIDwgZ29kb3VzYVwgOwor55m654WZIDwgaGF0c3VlblwgOwor6Iif6KGMIDwgc2h1dWtvdVwgOwor5bK46L66IDwga2lzaGliZVwgOwor6YGT5L+XIDwgZG91em9rdVwgOwor6YCy5Y+WIDwgc2hpbnNodVwgOwor6Iao6ZqGIDwgYm91cnl1dVwgOwor5YCN6aGNIDwgYmFpZ2FrdVwgOwor55uu5oyHIDwgbW9rdXNoaVwgOwor5b2x5Y2w5pysIDwgZWlpbmhvblwgOwor6a2U56qfIDwgbWFrdXRzdVwgOwor5Yed5b+1IDwgZ3lvdW5lblwgOwor5beh5q20IDwganVucmVraVwgOwor5bGx6aCCIDwgc2FuY2hvdVwgOwor5YWl5rmvIDwgbnl1dXRvdVwgOwor5Ye65bGVIDwgc2h1dHRlblwgOwor5YWl5rigIDwgbnl1dWt5b1wgOwor6Iub54OIIDwga2FyZXRzdVwgOwor57WM5Za26LK7IDwga2VpZWloaVwgOwor6L+r5a6zIDwgaGFrdWdhaVwgOwor5YWr5rSyIDwgeWFzaGltYVwgOwor5YaG55u45aC0IDwgZW5zb3ViYVwgOwor6L2f5rKIIDwgZ291Y2hpblwgOwor55yM5bqBIDwga2VuY2hvdVwgOwor5Yeh5bq4IDwgYm9uJyd5b3VcIDsKK+eZh+eZliA8IGthbnBla2lcIDsKK+iJsue0oCA8IHNoaWtpc29cIDsKK+i/keW5tCA8IGtpbicnbmVuXCA7Civnm4bmmq4gPCBib25rdXJlXCA7CivouYnot4wgPCBzYXRldHN1XCA7CivlubTlopcgPCB0b3NoaW1hXCA7CivpgZPkuLsgPCBkb3VzaHV1XCA7Civlh4vmgrQgPCBjaG91c3VpXCA7CivpgZPkuK0gPCBkb3VjaHV1XCA7CivlsbHpmb0gPCBzYW4nJ3lvdVwgOwor5bGx6Zm1IDwgc2FucnlvdVwgOwor6YGK5LyRIDwgeXV1a3l1dVwgOwor55eY6IuXIDwgdG91YnlvdVwgOwor6YCx5YiKIDwgc2h1dWthblwgOwor6KKr55aR6ICFIDwgaGlnaXNoYVwgOwor5bqW5Y6oIDwgaG91Y2h1dVwgOwor5YCS6ZajIDwgdG91a2FrdVwgOwor5YiX5Zu9IDwgcmVra29rdVwgOwor552j5YqxIDwgdG9rdXJlaVwgOwor5beh5qWtIDwganVuZ3lvdVwgOwor5qiZ5rqWIDwgaHlvdWp1blwgOwor6I+K5YikIDwga2lrdWJhblwgOwor55Sj6aGNIDwgc2FuZ2FrdVwgOwor6YCx5YaFIDwgc2h1dW5haVwgOwor6bC75bGLIDwgdW5hZ2l5YVwgOwor5YWl5rC0IDwgbnl1dXN1aVwgOwor5Yi25YudIDwgc2Vpc2hvdVwgOwor5Yi75Yi7IDwga29ra29rdVwgOwor5YKZ6JOEIDwgYmljaGlrdVwgOwor6YCa5ZCNIDwgdG9vcmluYVwgOwor6LuN57GNIDwgZ3Vuc2VraVwgOwor6Ii56Ii2IDwgc2VucGFrdVwgOwor6YCj5YudIDwgcmVuc2hvdVwgOwor6YCa5Y+yIDwgdHN1dXNoaVwgOwor55u05b6MIDwgY2hva3Vnb1wgOwor55u05b6AIDwgY2hva3VvdVwgOwor5pS+54Gr6a2UIDwgaG91a2FtYVwgOwor5L+u6aSKIDwgc2h1dXlvdVwgOwor5LiN5pat552AIDwgZnVkYW5naVwgOwor6IGW6Lev5YqgIDwgc2Vpcm9rYVwgOwor55eF6I+MIDwgYnlvdWtpblwgOwor5Ye65aWUIDwgc2h1cHBvblwgOwor5qW96IGWIDwgZ2FrdXNlaVwgOwor6Ii56IW5IDwgc2VucHVrdVwgOwor5LiL57ea6YOoIDwga2FzZW5idVwgOwor55m95rSyIDwgc2hpcmFzdVwgOwor5Yeh5bCPIDwgYm9uc2hvdVwgOwor5YmN5Lu7IDwgemVuJyduaW5cIDsKK+W3qOacqCA8IGt5b2Jva3VcIDsKK+iIrOiLpSA8IGhhbicnbnlhXCA7CivlgrfogIUgPCBzaG91c2hhXCA7Civlhobmm7IgPCBlbmt5b2t1XCA7CivlsL7pqqggPCBiaWtvdHN1XCA7CivluoPlkYogPCBrb3Vrb2t1XCA7Civoip3nlJ8gPCBzaGliYWZ1XCA7CivpgJrli6QgPCB0c3V1a2luXCA7Civoh6roqqwgPCBqaXNldHN1XCA7CivlhYXmuqIgPCBqdXVpdHN1XCA7CivnnIvlrqIgPCBrYW5rYWt1XCA7CivojLbmiZggPCBjaGF0YWt1XCA7CivnnJ/lpI8gPCBtYW5hdHN1XCA7CivovrrluYUgPCBoZW5wdWt1XCA7CivlupflhoUgPCB0ZW4nJ25haVwgOwor5aSa5qyh5YWDIDwgdGFqaWdlblwgOwor5bed5p+zIDwgc2Vucnl1dVwgOwor5qWt6IW5IDwgZ291aGFyYVwgOwor6Imv56iuIDwgcnlvdXNodVwgOwor5YCf6YeRIDwgc2hha2tpblwgOwor5YmK5LqVIDwgc2FrdXNlaVwgOwor5Ly86Z2e6ICFIDwgZXNlbW9ub1wgOwor5bqP5YiXIDwgam9yZXRzdVwgOwor5YCS6YyvIDwgdG91c2FrdVwgOwor5bid5b6zIDwgdGVpdG9rdVwgOwor6ISz5aSW56eRIDwgbm91Z2VrYVwgOwor6YCa5YiGIDwgdHN1dWJ1blwgOwor6L+95ZaEIDwgdHN1aXplblwgOwor5Ye25aCxIDwga3lvdWhvdVwgOwor5b6h5LiL5ZWPIDwgZ29rYW1vblwgOwor5qSc6KqNIDwga2VuJyduaW5cIDsKK+iNkuW3uyA8IGFyYW1ha2lcIDsKK+eXheiIjiA8IGJ5b3VzaGFcIDsKK+iInuiMuCA8IG1haXRha2VcIDsKK+mAseS7pCA8IHNodXVyZWlcIDsKK+WHhuW3niA8IGp1bnNodXVcIDsKK+iGg+iCreiHjSA8IG90dG9zZWlcIDsKK+WFseagkyA8IHRvbW9zZW5cIDsKK+Wls+aAp+WZqCA8IGpvc2Vpa2lcIDsKK+WtteWNteWZqCA8IGZ1cmFua2lcIDsKK+aknOiovCA8IGtlbnNob3VcIDsKK+eEoeeQhuinoyA8IG11cmlrYWlcIDsKK+W4uOWuvyA8IGpvdXlhZG9cIDsKK+S/oemgvCA8IHNoaW5yYWlcIDsKK+WFieayoiA8IGtvdXRha3VcIDsKK+W4neW7nyA8IHRlaWJ5b3VcIDsKK+WHueWcsCA8IGt1Ym9jaGlcIDsKK+WHuOWdiiA8IGRla29ib3VcIDsKK+i7jeelqCA8IGd1bnB5b3VcIDsKK+ebm+W+syA8IHNlaXRva3VcIDsKK+alreiAhSA8IGd5b3VzaGFcIDsKK+i7jeelniA8IGd1bnNoaW5cIDsKK+i5iOilsiA8IHRvdXNodXVcIDsKK+iIn+iJhyA8IHNodXV0ZWlcIDsKK+aoquajkiA8IHlva29ib3VcIDsKK+W5tOWPjiA8IG5lbnNodXVcIDsKK+WFpeaihSA8IG55dXViYWlcIDsKK+iFk+mqqCA8IGhpa290c3VcIDsKK+WFseaciSA8IGt5b3V5dXVcIDsKK+mwpOWtkCA8IGJ1cmlra29cIDsKK+ebuOWuoiA8IGFpa3lha3VcIDsKK+eItuaAp+aEmyA8IGZ1c2VpYWlcIDsKK+i/veWPtyA8IHRzdWlnb3VcIDsKK+mAo+S9nCA8IHJlbnNha3VcIDsKK+WFjuasoCA8IHRva2V0c3VcIDsKK+WFhuawkSA8IGNob3VtaW5cIDsKK+WIpeWEgCA8IGJldHN1Z2lcIDsKK+mdnuatpuijhSA8IGhpYnVzb3VcIDsKK+iJr+efpSA8IHJ5b3VjaGlcIDsKK+mAo+S8kSA8IHJlbmt5dXVcIDsKK+WIh+WRsyA8IGtpcmVhamlcIDsKK+mAoOS9nCA8IHpvdXNha3VcIDsKK+WFreabuCA8IHJva3VzaG9cIDsKK+edgOWJoyA8IGNoYWtrZW5cIDsKK+WIhuWRqCA8IGJ1bnNodXVcIDsKK+WFreabnCA8IHJva3V5b3VcIDsKK+WFq+aclCA8IGhhc3Nha3VcIDsKK+WIquS/riA8IHNhbnNodXVcIDsKK+WHhuWwhiA8IGp1bnNob3VcIDsKK+iFlemmliA8IHVkZWt1YmlcIDsKK+ecvOWKmyA8IGdhbnJpa2lcIDsKK+mAmuS+iyA8IHRzdXVyZWlcIDsKK+aomeamnCA8IGh5b3Vib3VcIDsKK+WFpeadpSA8IG55dXVyYWlcIDsKK+eVpeitnCA8IHJ5YWt1ZnVcIDsKK+i9ouaWrSA8IHJla2lkYW5cIDsKK+i7oueUqCA8IHRlbicneW91XCA7CivnmpDmnIggPCBzYXRzdWtpXCA7CivpgKPkuK0gPCByZW5jaHV1XCA7CivlhYPmrYwgPCBtb3RvdXRhXCA7CivoibLnmb0gPCBpcm9qaXJvXCA7Civlsqnop5IgPCBpd2FrYWRvXCA7CivlkIzniLbmr40gPCBkb3VmdWJvXCA7CivojLblupcgPCBjaGFtaXNlXCA7Civlh53loYogPCBneW91a2FpXCA7Civlh7rlk4EgPCBzaHVwcGluXCA7CivovrLlraYgPCBub3VnYWt1XCA7CivpgJrkurogPCB0c3V1amluXCA7CivnlaXoqp4gPCByeWFrdWdvXCA7Civlg63nlKggPCBzZW4nJ3lvdVwgOwor6LiK6LqNIDwgeW91eWFrdVwgOwor6Iy25bitIDwgY2hhc2VraVwgOwor6L+95YiKIDwgdHN1aWthblwgOwor55So6YePIDwgeW91cnlvdVwgOwor6Ieq6JmQIDwgamlneWFrdVwgOwor6ay855WcIDwga2ljaGlrdVwgOwor6IWQ6aOfIDwgZnVzaG9rdVwgOwor5bm05YaFIDwgbmVuJyduYWlcIDsKK+WCjeiBtCA8IGJvdWNob3VcIDsKK+W3puaKmCA8IHNhc2V0c3VcIDsKK+eZveahgyA8IGhha3V0b3VcIDsKK+Wls+aAp+WMliA8IGpvc2Vpa2FcIDsKK+iLpeaenSA8IHdha2FlZGFcIDsKK+i/keWbvSA8IGtpbmdva3VcIDsKK+iIueexjSA8IHNlbnNla2lcIDsKK+WFg+aomSA8IGdlbnB5b3VcIDsKK+WHuuWPoyA8IGRlZ3VjaGlcIDsKK+WIh+WJiiA8IHNlc3Nha3VcIDsKK+eVpeinoyA8IHJ5YWtrYWlcIDsKK+WIgOWMoCA8IHRvdXNob3VcIDsKK+eZuuahiCA8IGhhdHN1YW5cIDsKK+eEoeacn+mZkCA8IG11a2lnZW5cIDsKK+i7n+eQgyA8IG5hbmt5dXVcIDsKK+S/rumMrCA8IHNodXVyZW5cIDsKK+iHquWutueUqCA8IGppa2F5b3VcIDsKK+ebtOWljyA8IGppa2lzb3VcIDsKK+iIque2miA8IGtvdXpva3VcIDsKK+iJr+eUsCA8IHJ5b3VkZW5cIDsKK+i2s+mfsyA8IGFzaGlvdG9cIDsKK+WFiOajkiA8IHNha2lib3VcIDsKK+Wutuezu+WbsyA8IGtha2VpenVcIDsKK+S4gOS4lue0gCA8IGlzc2Vpa2lcIDsKK+WIiOWFpSA8IGthcmlpcmVcIDsKK+eZveacqCA8IHNoaXJha2lcIDsKK+iHqueUseW6piA8IGppeXV1ZG9cIDsKK+aomeacrCA8IGh5b3Vob25cIDsKK+eZveabuCA8IGhha3VzaG9cIDsKK+axmuafk+a6kCA8IG9zZW5nZW5cIDsKK+i7jeeUqCA8IGd1bicneW91XCA7CivliJ3kubMgPCBzaG9ueXV1XCA7CivlubPkv6EgPCBoZWlzaGluXCA7CivojZLlo4EgPCBhcmFrYWJlXCA7CivlhavmjpsgPCBoYWtrYWtlXCA7CivovKrmpa0gPCByaW5neW91XCA7CivojLblr64gPCBjaGFyeW91XCA7CivlubPkvZwgPCBoZWlzYWt1XCA7Civnm7Lln7cgPCBtb3VzaHV1XCA7CivnlJjphZIgPCBhbWF6YWtlXCA7CivlhYPmoJMgPCBtb3Rvc2VuXCA7CivlhavmjLogPCBoYXRjaG91XCA7CivnnJ/liaMgPCBzaGlua2VuXCA7Civkvp3poLznirYgPCBpcmFpam91XCA7Civlh7nlh7ggPCBvdXRvdHN1XCA7CivovpvlrZAgPCBrYXJhc2hpXCA7Civlh7jlh7kgPCB0b3RzdW91XCA7Civnmb7mlrkgPCBoeWFwcG91XCA7CivlgbTog4wgPCBzb2t1aGFpXCA7CivnmYLms5UgPCByeW91aG91XCA7CivlhaXmjpsgPCBpcmVrYWt1XCA7Civov7fkv6EgPCBtZWlzaGluXCA7Civlh7bliIMgPCBreW91amluXCA7CivnrKzkuIDmrakgPCBkYWlpcHBvXCA7Civlh7rlhbUgPCBzaHVwcGVpXCA7Civnmb3mlpEgPCBoYWt1aGFuXCA7CivpgIDkuqwgPCB0YWlreW91XCA7Civnmb3mlocgPCBoYWt1YnVuXCA7Civlvq7lobXlrZAgPCBtaWppbmtvXCA7Civlh7jlhoYgPCB0b3RzdWVuXCA7CivlsbHos4ogPCBzYW56b2t1XCA7CivnnLzkuK0gPCBnYW5jaHV1XCA7CivotJTlsZPnm64gPCBoaWlraW1lXCA7CivlgbTogZ4gPCBzb2t1YnVuXCA7Civmpa3nqK4gPCBneW91c2h1XCA7CivlhavmiYsgPCB5YXRzdWRlXCA7CivoibLniakgPCBpcm9tb25vXCA7Civnl7Pnl4UgPCByaW5ieW91XCA7CivlhYPmnI0gPCBnZW5wdWt1XCA7Civkv67pgZMgPCBzaHV1ZG91XCA7CivlhYvmmI4gPCBrb2t1bWVpXCA7CivlubTkuIogPCB0b3NoaXVlXCA7Civkv53ph4ggPCBob3NoYWt1XCA7CivlhaXmiYsgPCBueXV1c2h1XCA7CivlhaXmiYAgPCBueXV1c2hvXCA7Civov7DkvZwgPCBqdXNzYWt1XCA7Civpm7vno4HloLQgPCBkZW5qaWJhXCA7Civnm7TllrYgPCBjaG9rdWVpXCA7CivlsI/pnaIgPCBzaG91bWVuXCA7CivlsL/phbggPCBueW91c2FuXCA7CivovpvlpLcgPCBrb2J1c2hpXCA7Civlha3mg4UgPCByb2t1am91XCA7CivkuIDkvZPljJYgPCBpdHRhaWthXCA7CivlvqHml6Xmp5ggPCBvaGlzYW1hXCA7Civpn7Pnvr3lsYsgPCBvdG93YXlhXCA7Civpq5jnsrEgPCBrb3VyeWFuXCA7CivlsI/pm6MgPCBzaG91bmFuXCA7CivlsYDpg6ggPCBreW9rdWJ1XCA7CivljLvpmaLplbcgPCBpaW5jaG91XCA7CivljbDmrKfoqp4gPCBpbicnb3Vnb1wgOwor5bid5Zu9IDwgdGVpa29rdVwgOwor5Ye65LyaIDwgc2h1a2thaVwgOwor6ayx54S2IDwgdXRzdXplblwgOwor5YK355eVIDwgc2hvdWtvblwgOwor5YaN5a+pIDwgc2Fpc2hpblwgOwor55yM5YaFIDwga2VuJyduYWlcIDsKK+Wwv+mBkyA8IG55b3Vkb3VcIDsKK+WBtOe3miA8IHNva3VzZW5cIDsKK+WFrOW+syA8IGtvdXRva3VcIDsKK+W4uOWLnSA8IGpvdXNob3VcIDsKK+WGpeWigyA8IG1laWt5b3VcIDsKK+ecn+S6uiA8IHNoaW5qaW5cIDsKK+WGt+WYsiA8IHJlaWNob3VcIDsKK+mmtOm5vyA8IHRvbmFrYWlcIDsKK+ebtOWPgiA8IGppa2lzYW5cIDsKK+WHuuadpeeniyA8IGRla2lha2lcIDsKK+mjm+ihjOapnyA8IGhpa291a2lcIDsKK+WFpeW/tSA8IG55dXVuZW5cIDsKK+iEiumrhCA8IHNla2l6dWlcIDsKK+eEoeS9nOeCuiA8IG11c2FrdWlcIDsKK+ecn+S4iyA8IG1hc2hpdGFcIDsKK+WGhuWuiSA8IGVuJyd5YXN1XCA7CivlsIrplbcgPCBzb25jaG91XCA7Civlgb3nrYYgPCBnaWhpdHN1XCA7Civnm7jliYsgPCBzb3Vrb2t1XCA7Civohp3ooYwgPCBzaGlra291XCA7Civpg73luILpg6ggPCB0b3NoaWJ1XCA7Civou6Lms6ggPCB0ZW5jaHV1XCA7CivluqfokrLlm6MgPCB6YWJ1dG9uXCA7CivlhaXlu7cgPCBueXV1dGVpXCA7Civkv5fovKkgPCB6b2t1aGFpXCA7CivohJrpn7sgPCBreWFrdWluXCA7Civlh6Hkv5cgPCBib256b2t1XCA7Civlr5LprpIgPCBrYW5idW5hXCA7Civmpa3nl4UgPCBnb3VieW91XCA7CivovrLljZogPCBub3VoYWt1XCA7CivovrLljZQgPCBub3VreW91XCA7CivlhajluYUgPCB6ZW5wdWt1XCA7CivmlL7oqrLlvowgPCBob3VrYWdvXCA7CivlhajluK0gPCB6ZW5zZWtpXCA7Civpq5jnpoQgPCBrb3Vyb2t1XCA7Civov5HkvZwgPCBraW5zYWt1XCA7CivojbfkuLsgPCBuaW51c2hpXCA7Civoia/muK8gPCByeW91a291XCA7Civlr7jpmpkgPCBzdW5nZWtpXCA7CivkuIDmnKzmsJcgPCBpcHBvbmdpXCA7Civnm67liY0gPCBtb2t1emVuXCA7CivlsqnogowgPCBpd2FoYWRhXCA7Civlh6HkurogPCBib24nJ25pblwgOwor5L+h6LKpIDwgc2hpbnBhblwgOwor6Zu75rCX5bGLIDwgZGVua2l5YVwgOwor5L+X6LajIDwgem9rdXNodVwgOwor5L+u6KuWIDwgc2h1dXJvblwgOwor5YW15a2mIDwgaGVpZ2FrdVwgOwor55Sw6J66IDwgdGFuaXNoaVwgOwor55Sj6KSlIDwgc2Fuam9rdVwgOwor5bCP6YqDIDwgc2hvdWp1dVwgOwor5L6/6YCaIDwgYmVudHN1dVwgOwor5bCP6YmiIDwga29iYWNoaVwgOwor5pyq5p2l5rS+IDwgbWlyYWloYVwgOwor6LWk6aOvIDwgc2VraWhhblwgOwor5bid5YqHIDwgdGVpZ2VraVwgOwor5YWx5a2YIDwga3lvdXpvblwgOwor55yB5LukIDwgc2hvdXJlaVwgOwor6Ieq57KbIDwgamlzaHVrdVwgOwor55m+5bqmIDwgaHlha3Vkb1wgOwor5qCE6KqJ56S8IDwgZWl5b3JlaVwgOwor5YaF5aOBIDwgbmFpaGVraVwgOwor55a+55eFIDwgc2hpcHBlaVwgOwor5YWD5oKqIDwgZ2VuJydha3VcIDsKK+ezluiho+mMoCA8IHRvdWlqb3VcIDsKK+eWvOeXmyA8IHRvdXRzdXVcIDsKK+Wus+mzpSA8IGdhaWNob3VcIDsKK+WCjeeZvSA8IGJvdWhha3VcIDsKK+iJr+awkSA8IHJ5b3VtaW5cIDsKK+i6geeXhSA8IHNvdWJ5b3VcIDsKK+eQhuirluWutiA8IHJpcm9ua2FcIDsKK+eUsOiZqyA8IHRhbXVzaGlcIDsKK+eZveW4hiA8IHNoaXJhaG9cIDsKK+mrmOebtCA8IGtvdWppa2lcIDsKK+aJk+alveWZqCA8IGRhZ2Fra2lcIDsKK+eUn+ihgCA8IG5hbWFjaGlcIDsKK+eEoeS9nOazlSA8IGJ1c2Fob3VcIDsKK+WFpeWumiA8IG55dXVqb3VcIDsKK+i7oualrSA8IHRlbmd5b3VcIDsKK+WxiOiolyA8IGt1dHRha3VcIDsKK+ebtOS8nSA8IGppa2lkZW5cIDsKK+iMtuWMmSA8IGNoYXNhamlcIDsKK+iHquethiA8IGppaGl0c3VcIDsKK+S7geeOi+mWgCA8IG5pb3Vtb25cIDsKK+iLl+W6iiA8IG5hZWRva29cIDsKK+i1pOmdoiA8IHNla2ltZW5cIDsKK+WPpOWFuOa0viA8IGtvdGVuaGFcIDsKK+WGheWcpyA8IG5haWF0c3VcIDsKK+eXm+eCuSA8IHRzdXV0ZW5cIDsKK+e0oOWwgeWutiA8IHNvaG91a2FcIDsKK+WFiOW5tCA8IHNlbicnbmVuXCA7CivnlrHnlrkgPCBob3VzaGluXCA7Civkv5forKEgPCB6b2t1eW91XCA7CivlsI/pgZMgPCBrb21pY2hpXCA7Civoh6rnq4sgPCBqaXJpdHN1XCA7Civkv67ooYwgPCBzaHVneW91XCA7CivlhoXlm70gPCBuYWlrb2t1XCA7Civkv5foq7ogPCB6b2t1Z2VuXCA7Civoh7Pnpo8gPCBzaGlmdWt1XCA7Civlr7rpiq0gPCB0ZXJhc2VuXCA7CivovrLkvZwgPCBub3VzYWt1XCA7Civkv5foq6YgPCB6b2t1dGFpXCA7Civkv4rosaogPCBzaHVuZ291XCA7Civkv5foq5YgPCB6b2t1cm9uXCA7Civnl4fnirYgPCBzaG91am91XCA7Civkv5foq4cgPCB6b2t1ZGFuXCA7CivlsI7pgJogPCBkb3V0c3V1XCA7CivprZrml48gPCBneW96b2t1XCA7CivlhaXlqb8gPCBpcmltdWtvXCA7Civlg7vmnZEgPCBoZWtpc29uXCA7CivprqjlsYsgPCBzdXNoaXlhXCA7Civlr4Tpo58gPCBraXNob2t1XCA7Civnmb3lsbEgPCBoYWt1c2FuXCA7Civnl4XnirYgPCBieW91am91XCA7CivlhYPlubQgPCBnYW4nJ25lblwgOwor5bit5LiKIDwgc2VraWpvdVwgOwor6I2S5LqLIDwgYXJhZ290b1wgOwor55uj5L+uIDwga2Fuc2h1dVwgOwor5q2p5ZCI5Yi2IDwgYnVhaXNlaVwgOwor5YG455uXIDwgY2h1dXRvdVwgOwor5YO75pu4IDwgaGVraXNob1wgOwor55WZ572uIDwgcnl1dWNoaVwgOwor6L6b5YWaIDwga2FyYXRvdVwgOwor5qC86ZeYIDwga2FrdXRvdVwgOwor55Wq57WEIDwgYmFuZ3VtaVwgOwor6a2C5p+xIDwga29uY2h1dVwgOwor55m+5a6YIDwgaHlha2thblwgOwor5L2c6aKoIDwgc2FrdWZ1dVwgOwor6a2a5rKz5bK4IDwgdW9nYXNoaVwgOwor6aas6aOfIDwgYmFzaG9rdVwgOwor6Ieq55Sx5YyWIDwgaml5dXVrYVwgOwor6Imm5qmLIDwga2Fua3lvdVwgOwor5qiZ5a6aIDwgaHlvdXRlaVwgOwor5qiq5aWqIDwgb3VkYXRzdVwgOwor55m95a2QIDwgc2hpcm9rb1wgOwor5YaN5ZGKIDwgc2Fpa29rdVwgOwor6LuN5qW9IDwgZ3VuZ2FrdVwgOwor5bGx6IqLIDwgeWFtYWltb1wgOwor5bid5LqsIDwgdGVpa3lvdVwgOwor6Ly75bCEIDwgZnVrdXNoYVwgOwor5YWl5aOwIDwgbmlzc2hvdVwgOwor5o6I55Sj5omAIDwganVzYW5qb1wgOwor6aeG5YuV5qmfIDwga3Vkb3VraVwgOwor5a+G6ZuyIDwgbWl0c3V1blwgOwor5LqM566H5omAIDwgbmlrYXNob1wgOwor5YK+5rOoIDwga2VpY2h1dVwgOwor5YWl5aKoIDwgaXJlenVtaVwgOwor5a+G6ZuGIDwgbWlzc2h1dVwgOwor6YGV54qv6ICFIDwgaWhhbnNoYVwgOwor6Ieq55S75YOPIDwgamlnYXpvdVwgOwor6Imy5p+EIDwgaXJvZ2FyYVwgOwor5b2i5oSP5ouzIDwga2VpaWtlblwgOwor6IOM6auYIDwgc2VpdGFrYVwgOwor5bCG6LuNIDwgc2hvdWd1blwgOwor5qaC5rOBIDwgZ2Fpa3lvdVwgOwor5YWo5Z+fIDwgemVuJydpa2lcIDsKK+avjeaAp+aEmyA8IGJvc2VpYWlcIDsKK+S6leaIuOWBtCA8IGlkb2dhd2FcIDsKK+WxseiFuSA8IHNhbnB1a3VcIDsKK+WFiOWtpiA8IHNlbmdha3VcIDsKK+iEmumDqCA8IGt5YWt1YnVcIDsKK+iDtOmVtyA8IGRvdW5hZ2FcIDsKK+WDp+acjSA8IHNvdWZ1a3VcIDsKK+WGjeWLnSA8IHNhaXNob3VcIDsKK+iFueiUtSA8IGZ1a3V6b3VcIDsKK+iJr+adkCA8IHJ5b3V6YWlcIDsKK+S9jumhjSA8IHRlaWdha3VcIDsKK+mtmuaLkyA8IGd5b3Rha3VcIDsKK+i8lOW8vCA8IGhvaGl0c3VcIDsKK+WFqOWbvSA8IHplbmdva3VcIDsKK+iJr+abuCA8IHJ5b3VzaG9cIDsKK+WusOmgmCA8IHNhaXJ5b3VcIDsKK+eZveWkqiA8IHNoaXJhdGFcIDsKK+eZveWknCA8IGJ5YWt1eWFcIDsKK+i5tOeIqiA8IGtlZHp1bWVcIDsKK+i1pOmMhiA8IGFrYXNhYmlcIDsKK+WFpeWboyA8IG55dXVkYW5cIDsKK+W3peWNmiA8IGtvdWhha3VcIDsKK+W3ruWIpSA8IHNhYmV0c3VcIDsKK+WGquS5lyA8IGJla2lqb3VcIDsKK+i7jeacjSA8IGd1bnB1a3VcIDsKK+eUsuiDhCA8IGthdGNodXVcIDsKK+iHqueZuiA8IGppaGF0c3VcIDsKK+eVouernyA8IGhpa2t5b3VcIDsKK+agoemWsiA8IGtvdWV0c3VcIDsKK+eWjueVpSA8IHNvcnlha3VcIDsKK+WyqeekgSA8IGdhbnNob3VcIDsKK+WCt+atjiA8IHNob3V0YW5cIDsKK+iJsuaWhyA8IGlyb2J1bWlcIDsKK+egtOegleapnyA8IGhhc2Fpa2lcIDsKK+mmlumgmCA8IHNodXJ5b3VcIDsKK+mBleitpue9qiA8IGlrZWl6YWlcIDsKK+W4jOWcn+mhniA8IGtpZG9ydWlcIDsKK+i1pOmHkSA8IGFrYWdhbmVcIDsKK+mpleiChiA8IGt5b3VzaGlcIDsKK+Wtpum9oiA8IGdha3VyZWlcIDsKK+WutemXhyA8IHlvaXlhbWlcIDsKK+Wwj+irliA8IHNob3Vyb25cIDsKK+S6nOmJm+W8lSA8IGFlbmJpa2lcIDsKK+WkquWusOW6nCA8IGRhemFpZnVcIDsKK+WyqeefsyA8IGdhbnNla2lcIDsKK+iFueiKuCA8IGhhcmFnZWlcIDsKK+eZveWcsCA8IHNoaXJvamlcIDsKK+aguOmFuCA8IGtha3VzYW5cIDsKK+WFreWQiCA8IHJpa3Vnb3VcIDsKK+iIueatjCA8IGZ1bmF1dGFcIDsKK+WvvuixoSA8IHRhaXNob3VcIDsKK+mosOiQvSA8IHRvdXJha3VcIDsKK+WBj+eZliA8IGhlbnBla2lcIDsKK+WFuOWJhyA8IHRlbnNva3VcIDsKK+ajkue4niA8IGJvdWppbWFcIDsKK+S8iumBlOiAhSA8IGRhdGVzaGFcIDsKK+WFreWNgSA8IHJva3VqdXVcIDsKK+i1pOmBkyA8IHNla2lkb3VcIDsKK+eUn+iCiSA8IHNlaW5pa3VcIDsKK+mAgeipseWZqCA8IHNvdXdha2lcIDsKK+akjeeariA8IHNob2t1aGlcIDsKK+Wun+mcgCA8IGppdHN1anVcIDsKK+WFjeWbmiA8IG1lbnNodXVcIDsKK+S8tOWkqemAoyA8IGJhdGVyZW5cIDsKK+mnhumAkCA8IGt1Y2hpa3VcIDsKK+S6nOm6u+W4gyA8IGFtYW51bm9cIDsKK+mnkOi7iiA8IGNodXVzaGFcIDsKK+agqumHkSA8IGthYnVraW5cIDsKK+iHqueOiSA8IGppZ3lva3VcIDsKK+Wls+mDjuWxiyA8IGpvcm91eWFcIDsKK+Wuv+mKrSA8IHlhZG9zZW5cIDsKK+mmlumVtyA8IHNodWNob3VcIDsKK+iFueiDjCA8IGZ1a3VoYWlcIDsKK+WZtOmcp+WZqCA8IGZ1bm11a2lcIDsKK+eXheatuyA8IGJ5b3VzaGlcIDsKK+WwhOinkiA8IHNoYWtha3VcIDsKK+iLseWNmOiqniA8IGVpdGFuZ29cIDsKK+WuoumWkyA8IGt5YWt1bWFcIDsKK+W3peS9nCA8IGtvdXNha3VcIDsKK+WEgOW8jyA8IGdpc2hpa2lcIDsKK+eUsOe0syA8IGRlbnNoaW5cIDsKK+WvvuiosyA8IHRhaXlha3VcIDsKK+i1pOi7jSA8IHNla2lndW5cIDsKK+iEgui6qyA8IGFidXJhbWlcIDsKK+Wzoea5viA8IGt5b3V3YW5cIDsKK+i7jeaLoSA8IGd1bmtha3VcIDsKK+eZvuWRsyA8IGh5YWt1bWlcIDsKK+iNt+mmrOi7iiA8IG5pYmFzaGFcIDsKK+aTrOaFi+iqniA8IGdpdGFpZ29cIDsKK+WvvuinkiA8IHRhaWtha3VcIDsKK+afsemdoiA8IGNodXVtZW5cIDsKK+W3qOS5syA8IGt5b255dXVcIDsKK+eVsOmCpuS6uiA8IGlob3VqaW5cIDsKK+eUu+ethiA8IGdhaGl0c3VcIDsKK+S+m+impyA8IGt5b3VyYW5cIDsKK+aAquaIkeS6uiA8IGtlZ2FuaW5cIDsKK+WvuOiplSA8IHN1bnB5b3VcIDsKK+WGheS4rSA8IHVjaGlqdXVcIDsKK+WKueaenOmfsyA8IGtvdWthb25cIDsKK+WvhumAmiA8IG1pdHRzdXVcIDsKK+WAtueZuiA8IGd1aGF0c3VcIDsKK+WFrOWDlSA8IGtvdWJva3VcIDsKK+S9k+mHjyA8IHRhaXJ5b3VcIDsKK+Wik+eikemKmCA8IGJvaGltZWlcIDsKK+Wul+mWgCA8IHNodXVtb25cIDsKK+iHhueXhSA8IG9rdWJ5b3VcIDsKK+WFqOWEqiA8IHplbicneXV1XCA7Civpo5vooYzlrrYgPCBoaWtvdWthXCA7CivnlaXnlLsgPCByeWFrdWdhXCA7Civkv7jntaYgPCBob3VreXV1XCA7Civlrr/pgYsgPCBzaHVrdXVuXCA7CivoiLnmnb8gPCBmdW5haXRhXCA7Civkv4roi7EgPCBzaHVuJydlaVwgOwor6Iqz5aKoIDwgaG91Ym9rdVwgOwor55m+5YyBIDwgaHlha3VtZVwgOwor55Sf57W5IDwgc3V6dXNoaVwgOwor6Luf5byxIDwgbmFuamFrdVwgOwor5LyR6aSoIDwga3l1dWthblwgOwor5a+G6Ly4IDwgbWl0c3V5dVwgOwor5YWa5YmHIDwgdG91c29rdVwgOwor5L+u57mVIDwgc2h1dXplblwgOwor5LyR6aSKIDwga3l1dXlvdVwgOwor5qa05by+IDwgcnl1dWRhblwgOwor5bGx56mNIDwgc2Fuc2VraVwgOwor6Ii25p2lIDwgaGFrdXJhaVwgOwor6LWk6LKnIDwgc2VraWhpblwgOwor6Iux5YKRIDwgZWlrZXRzdVwgOwor5qW15pqRIDwgZ29rdXNob1wgOwor55eF5qOfIDwgYnlvdXRvdVwgOwor54Gr54ao5paXIDwgaGlub3NoaVwgOwor6IKM6aqoIDwga2lrb3RzdVwgOwor6Imv5oCnIDwgcnlvdXNlaVwgOwor6Laz6Iq4IDwgYXNoaWdlaVwgOwor6IW457eaIDwgY2hvdXNlblwgOwor6Lyq5ZSxIDwgcmluc2hvdVwgOwor5YGJ54mpIDwgZXJhbW9ub1wgOwor55m95YiDIDwgaGFrdWppblwgOwor5L6u6JSRIDwgYnViZXRzdVwgOwor6Iul5YWaIDwgd2FrYXRvdVwgOwor55eF5qC5IDwgYnlvdWtvblwgOwor5Lya6ZuGIDwga2Fpc2h1dVwgOwor5bGR57O4IDwga3V6dWl0b1wgOwor5qKf572qIDwga3lvdXphaVwgOwor55m95YW1IDwgaGFrdWhlaVwgOwor5L2O6YCfIDwgdGVpc29rdVwgOwor5YWl5LyaIDwgbnl1dWthaVwgOwor5bGR57GzIDwga3V6dW1haVwgOwor6Lu95aaZIDwga2VpbXlvdVwgOwor6Ieq5ruFIDwgamltZXRzdVwgOwor5LyR6Zu7IDwga3l1dWRlblwgOwor5bO25qC5IDwgc2hpbWFuZVwgOwor5a2m6aKoIDwgZ2FrdWZ1dVwgOwor5YO15bGNIDwga3lvbnNoaVwgOwor5YWI5Yi7IDwgc2Vua29rdVwgOwor5YSq5L2N5oCnIDwgeXV1aXNlaVwgOwor6IKJ6aWFIDwgbmlrdW1hblwgOwor5L216KqtIDwgaGVpZG9rdVwgOwor6aas6LezIDwgdW1hdG9iaVwgOwor6Lui5bGeIDwgdGVuem9rdVwgOwor6LWk6KqgIDwgc2VraXNlaVwgOwor6Imv5birIDwgcnlvdXNoaVwgOwor5Lya6ZW3IDwga2FpY2hvdVwgOwor5qC86KiAIDwga2FrdWdlblwgOwor6aeB6KuWIDwgYmFrdXJvblwgOwor54Sh6Laj5ZGzIDwgbXVzaHVtaVwgOwor6YGO54++5pyqIDwga2FnZW5taVwgOwor5YWD5Ye2IDwgZ2Vua3lvdVwgOwor6IKJ6aGeIDwgbmlrdXJ1aVwgOwor55a85pyoIDwgaGlpcmFnaVwgOwor6Lui5a6FIDwgdGVudGFrdVwgOwor5qCE6YGUIDwgZWl0YXRzdVwgOwor6Lui5a2mIDwgdGVuZ2FrdVwgOwor6Ieq5rS7IDwgamlrYXRzdVwgOwor5L+456aEIDwgaG91cm9rdVwgOwor6Iul5Lq6IDwgd2Frb3Vkb1wgOwor5qW95omNIDwgZ2FrdXNhaVwgOwor5a+G6K2wIDwgbWl0c3VnaVwgOwor6aaZ6LuKIDwga3lvdXNoYVwgOwor5L+X57SvIDwgem9rdXJ1aVwgOwor6ZW35qSF5a2QIDwgbmFnYWlzdVwgOwor6IG+5ZSW6ICFIDwgcm91YXNoYVwgOwor5YGc5rOKIDwgdGVpaGFrdVwgOwor5qWK5p+zIDwgeW91cnl1dVwgOwor5bCP6IiFIDwga29qdXV0b1wgOwor6Ieq5rG6IDwgamlrZXRzdVwgOwor55m+5LqLIDwgaHlha3VqaVwgOwor5a+G6KqeIDwgbWl0c3Vnb1wgOwor6IO46KWfIDwga3lvdWtpblwgOwor5bC/566hIDwgbnlvdWthblwgOwor6ayx5bGIIDwgdWtrdXRzdVwgOwor6LuN5bGeIDwgZ3Vuem9rdVwgOwor5paH5a2X55ukIDwgbW9qaWJhblwgOwor55eb5oakIDwgdHN1dWZ1blwgOwor5LqU5Y2B6Z+zIDwgZ29qdXVvblwgOwor5bGx55WqIDwgeWFtYWJhblwgOwor5qW95oOzIDwgZ2FrdXNvdVwgOwor6Ieq5q66IDwgamlzYXRzdVwgOwor6ISx6Ie8IDwgZGFra3l1dVwgOwor6aaW6LazIDwgc2h1c29rdVwgOwor6ISx6IetIDwgZGFzc2h1dVwgOwor6LuN5bCGIDwgZ3Vuc2hvdVwgOwor5YK35oK0IDwgc2hvdXN1aVwgOwor5YGP5rWBIDwgaGVucnl1dVwgOwor6ISz6IacIDwgbm91bWFrdVwgOwor54++6auYIDwgZ2VuZGFrYVwgOwor6Iej5rCRIDwgc2hpbm1pblwgOwor6ay85amGIDwgb25pYmFiYVwgOwor5L2c6KmpIDwgc2FrdXNoaVwgOwor6ISx6IW4IDwgZGF0Y2hvdVwgOwor5a6F6YWNIDwgdGFrdWhhaVwgOwor5LyR6YyYIDwga3l1dXN1aVwgOwor55Sw55WRIDwgZGVucGF0YVwgOwor55eb5oGoIDwgdHN1dWtvblwgOwor6Iez5qW1IDwgc2hpZ29rdVwgOwor5qW15oKqIDwgZ29rdWFrdVwgOwor5a6J6YC4IDwgYW4nJ2l0c3VcIDsKK+WkqeWppue+hSA8IHRlbnB1cmFcIDsKK+WDu+WcsCA8IGhla2ljaGlcIDsKK+WDu+WcqCA8IGhla2l6YWlcIDsKK+Wumui3oSA8IGpvdXNla2lcIDsKK+i8quS9nCA8IHJpbnNha3VcIDsKK+WyqeazoiA8IGl3YW5hbWlcIDsKK+Wzu+aLkiA8IHNodW5reW9cIDsKK+iJr+WmuyA8IHJ5b3VzYWlcIDsKK+iHhua4rCA8IG9rdXNva3VcIDsKK+eUo+eXmyA8IHNhbnRzdXVcIDsKK+WvnemBk+WFtyA8IG5lZG91Z3VcIDsKK+iBt+majiA8IHNob2trYWlcIDsKK+eVnea6nSA8IHVuZW1pem9cIDsKK+alteW+riA8IGt5b2t1YmlcIDsKK+eVsOWIhuWtkCA8IGlidW5zaGlcIDsKK+iGnOeKtiA8IG1ha3Vqb3VcIDsKK+eUmOeariA8IGFtYWthd2FcIDsKK+i1pOiVqiA8IGFrYWthYnVcIDsKK+WxseeKrCA8IHlhbWFpbnVcIDsKK+S/iuerpSA8IHNodW5kb3VcIDsKK+alveW4qyA8IGdha3VzaGlcIDsKK+ahkeiJsiA8IGt1d2Fpcm9cIDsKK+iFleeroCA8IHdhbnNob3VcIDsKK+mmrOihkyA8IGJhanV0c3VcIDsKK+eXheaFiyA8IGJ5b3V0YWlcIDsKK+iFleeriyA8IHVkZXRhdGVcIDsKK+iFueeZkiA8IGhhcmFpc2VcIDsKK+iInuaJhyA8IG1haW91Z2lcIDsKK+WvruiIjiA8IHJ5b3VzaGFcIDsKK+alteW6piA8IGt5b2t1ZG9cIDsKK+WBlealvSA8IGthaXJha3VcIDsKK+eQg+mdoiA8IGt5dXVtZW5cIDsKK+Wwj+e3qCA8IHNob3VoZW5cIDsKK+iHquiyqeapnyA8IGppaGFua2lcIDsKK+eXheaCoyA8IGJ5b3VrYW5cIDsKK+WuouiqniA8IGt5YWt1Z29cIDsKK+aelemgrSA8IGNoaW50b3VcIDsKK+alteW3piA8IGt5b2t1c2FcIDsKK+eToueuqiA8IGh5b3V0YW5cIDsKK+WFq+mHjeWeoyA8IHlhZWdha2lcIDsKK+iKuOS6iyA8IGdlaWdvdG9cIDsKK+akjeaouSA8IHNob2t1anVcIDsKK+Wun+ipsSA8IGppdHN1d2FcIDsKK+eWvuaCoyA8IHNoaWtrYW5cIDsKK+eEoeS+oeWApCA8IG11a2FjaGlcIDsKK+ahg+iJsiA8IG1vbW9pcm9cIDsKK+aknOagoSA8IGtlbmd5b3VcIDsKK+Wun+iovCA8IGppc3Nob3VcIDsKK+S7iumggyA8IGltYWdvcm9cIDsKK+iFsOeXmyA8IHlvdXRzdXVcIDsKK+Wwj+eykiA8IGtvdHN1YnVcIDsKK+alreW4qyA8IHdhemFzaGlcIDsKK+iKseS7oyA8IGhhbmFkYWlcIDsKK+WuouimsyA8IGt5YWtrYW5cIDsKK+S/l+ecvCA8IHpva3VnYW5cIDsKK+S9v+iHoyA8IHNoaXNoaW5cIDsKK+WvkuiPiiA8IGthbmdpa3VcIDsKK+S6uuS6i+mZoiA8IGppbmppaW5cIDsKK+S8kei8iSA8IGt5dXVzYWlcIDsKK+Wwu+ebriA8IHNoaXJpbWVcIDsKK+WumuiplSA8IHRlaWh5b3VcIDsKK+S8kei7oiA8IGt5dXV0ZW5cIDsKK+eXheW8iiA8IGJ5b3VoZWlcIDsKK+WCt+WusyA8IHNob3VnYWlcIDsKK+WumuiosyA8IHRlaXlha3VcIDsKK+i7jeWbvSA8IGd1bmtva3VcIDsKK+mtlOWKmyA8IG1hcnlva3VcIDsKK+aknOadnyA8IGtlbnNva3VcIDsKK+S4jeWknOWfjiA8IGZ1eWFqb3VcIDsKK+WxheeVmSA8IGt5b3J5dXVcIDsKK+e+juS4iOWkqyA8IGJpam91ZnVcIDsKK+iNj+iDoem6u+ayuSA8IGVnb21heXVcIDsKK+WyqeajmiA8IGl3YWRhbmFcIDsKK+S7j+mZgCA8IGJ1dHN1ZGFcIDsKK+Wus+iZqyA8IGdhaWNodXVcIDsKK+WwseecoCA8IHNodXVtaW5cIDsKK+iEh+iDvSA8IHdha2lub3VcIDsKK+WEhOWFhiA8IG9rdWNob3VcIDsKK+eXheW3oyA8IGJ5b3Vzb3VcIDsKK+i1pOiGmiA8IGFrYWhhZGFcIDsKK+Wwj+erpSA8IGtvd2FwcGFcIDsKK+S7j+mWoyA8IGJ1a2tha3VcIDsKK+aYk+aQjeWTgSA8IGlzb25oaW5cIDsKK+S7j+mWkyA8IGJ1dHN1bWFcIDsKK+i1pOiFuSA8IGFrYWhhcmFcIDsKK+WwvOWDp+mZoiA8IG5pc291aW5cIDsKK+iFjuefsyA8IGppbnNla2lcIDsKK+iJr+WTgSA8IHJ5b3VoaW5cIDsKK+iDg+iiiyA8IGlidWt1cm9cIDsKK+eEoeeQhuaVsCA8IG11cmlzdXVcIDsKK+Wzu+W2uiA8IHNodW5yZWlcIDsKK+WEkuS7jyA8IGp1YnV0c3VcIDsKK+mtheWKmyA8IG1pcnlva3VcIDsKK+iyuOmWkyA8IGthc2hpbWFcIDsKK+iDuOiHhiA8IGt5b3Vva3VcIDsKK+eEoemfu+ipqSA8IG11aW5zaGlcIDsKK+mtmuS/oSA8IGd5b3NoaW5cIDsKK+iFleeZvSA8IHdhbnBha3VcIDsKK+WkmuanmOWMliA8IHRheW91a2FcIDsKK+iDuOiFuiA8IGt5b3VzZW5cIDsKK+S6rOmiqCA8IGt5b3VmdXVcIDsKK+alveWkqSA8IHJha3V0ZW5cIDsKK+iJr+WPiyA8IHJ5b3V5dXVcIDsKK+iEseepgCA8IGRha2tva3VcIDsKK+ePremVtyA8IGhhbmNob3VcIDsKK+S8neiqpiA8IGRlbnNob3VcIDsKK+WwiuensCA8IHNvbnNob3VcIDsKK+WBg+aciCA8IGVuZ2V0c3VcIDsKK+WvvuetliA8IHRhaXNha3VcIDsKK+WAn+asviA8IHNoYWtrYW5cIDsKK+alveWjhyA8IGdha3VkYW5cIDsKK+S+v+ebiiA8IGJlbicnZWtpXCA7CivkvJroqq0gPCBrYWlkb2t1XCA7Civmo7rmobYgPCBrYW4nJ29rZVwgOwor5L2O6JC9IDwgdGVpcmFrdVwgOwor55eF5a6zIDwgYnlvdWdhaVwgOwor5YGJ5pa5IDwgZXJhZ2F0YVwgOwor55qu6Iaa56eR5Yy7IDwgaGlmdWthaVwgOwor55WM5qiZIDwga2FpaHlvdVwgOwor6LOD6YqtIDwgY2hpbnNlblwgOwor5L2e6IejIDwgbmVpc2hpblwgOwor5L2Z6ImyIDwgeW9zaG9rdVwgOwor6aOy6aOfIDwgaW5zaG9rdVwgOwor5bGL5qC56KOPIDwgeWFuZXVyYVwgOwor5YK+5Zu9IDwga2Vpa29rdVwgOwor5pq06aKo6ZuoIDwgYm91ZnV1dVwgOwor5L+C55WZIDwga2Vpcnl1dVwgOwor55S35rCXIDwgb3Rva29naVwgOwor5qWT5bGeIDwgZnV1em9rdVwgOwor6IOD6JasIDwgaWd1c3VyaVwgOwor5LuZ6YO3IDwgc2Vua3lvdVwgOwor5qCX6ImyIDwga3VyaWlyb1wgOwor6LO86KqtIDwga291ZG9rdVwgOwor55Sf55CG5pelIDwgc2VpcmliaVwgOwor6LuK5YqbIDwgc2hhcmlraVwgOwor5YiG6ZmQ6ICFIDwgYnVnZW5qYVwgOwor6Iel5omAIDwgZnVzaGlkb1wgOwor5L2T6IetIDwgdGFpc2h1dVwgOwor6aas6ISaIDwgYmFreWFrdVwgOwor5a+456eSIDwgc3VuYnlvdVwgOwor5Lq65LqL6YOoIDwgamluamlidVwgOwor6LW3562GIDwga2loaXRzdVwgOwor6aeQ57GzIDwgY2h1dWJlaVwgOwor5Lm+6a2aIDwgaG9zaGl1b1wgOwor6bia6bWh6LKdIDwgb3VtdWdhaVwgOwor6IKd6KaBIDwga2FuJyd5b3VcIDsKK+ajruaelyA8IHNoaW5yaW5cIDsKK+i1pOe1hCA8IGFrYWd1bWlcIDsKK+i7ouS7uyA8IHRlbicnbmluXCA7CivmoLzntI0gPCBrYWt1bm91XCA7CivlsI/nmaogPCBrb3NoYWt1XCA7CivotaTntJkgPCBha2FnYW1pXCA7CivpqZrmrY4gPCBreW91dGFuXCA7Civotbfnq4sgPCBraXJpdHN1XCA7CivkuIDkuIHlrZcgPCBpdHRlaWppXCA7CivkvZzogIUgPCBzYWt1c2hhXCA7Civpo5/ppIwgPCBzaG9rdWppXCA7CivohbjmuoAgPCBjaG91bWFuXCA7Civku7LosrcgPCBuYWthZ2FpXCA7CivliIbpm6LmtL4gPCBidW5yaWhhXCA7CivlsI/ntLDlt6UgPCBrb3phaWt1XCA7Civnl4XlpIkgPCBieW91aGVuXCA7Civmmpflj7fljJYgPCBhbmdvdWthXCA7Civlg6XlgJYgPCBneW91a291XCA7Civos6DosqwgPCBiYWlzZWtpXCA7Civos57os5sgPCBzaG91c2FuXCA7CivlsIrnmocgPCBzb24nJ25vdVwgOwor546E6bqmIDwgZ2VuYmFrdVwgOwor6ISI566hIDwgbXlha2thblwgOwor5p6i6Lu4IDwgc3V1amlrdVwgOwor6Iie5aerIDwgbWFpaGltZVwgOwor55eb5ZiGIDwgdHN1dXRhblwgOwor5bCo54qsIDwgbXVrdWludVwgOwor5qOf5qKBIDwgdG91cnlvdVwgOwor5Y+z5b6A5bem5b6AIDwgdW91c2FvdVwgOwor5Y2w5bqm5rSLIDwgaW5kb3lvdVwgOwor5aGp57Sg6YW4IDwgZW5zb3NhblwgOwor5bGg5q66IDwgdG9zYXRzdVwgOwor6LOK6LuNIDwgem9rdWd1blwgOwor6IW45rayIDwgY2hvdWVraVwgOwor6IiO5a6FIDwgc2hhdGFrdVwgOwor6Lqr5ZG9IDwgc2hpbm1laVwgOwor5L6d6aC85Lq6IDwgaXJhaW5pblwgOwor55ar5a2mIDwgZWtpZ2FrdVwgOwor5bCP55S6IDwga29tYWNoaVwgOwor5bCP55S3IDwga29vdG9rb1wgOwor6IWw5rmvIDwga29zaGl5dVwgOwor5bCE55qEIDwgc2hhdGVraVwgOwor6ISz55eFIDwgbm91YnlvdVwgOwor5bCP55SfIDwgc2hvdXNlaVwgOwor54i25q+N5LyaIDwgZnVib2thaVwgOwor5bGx5qSSIDwgc2Fuc2hvdVwgOwor5L2z56+AIDwga2FzZXRzdVwgOwor5LuK6YCxIDwga29uc2h1dVwgOwor6IGW6YCxIDwgc2Vpc2h1dVwgOwor6aOy6YWS5a62IDwgaW5zaHVrYVwgOwor5LiN6KqN5Y+vIDwgZnVuaW5rYVwgOwor5L2O57+8IDwgdGVpeW9rdVwgOwor6Imy5LqLIDwgaXJvZ290b1wgOwor5p+/6ImyIDwga2FraWlyb1wgOwor55Sw5qW9IDwgZGVuZ2FrdVwgOwor5LuK6L+EIDwgaW1hbWFkZVwgOwor5Lm+6aOvIDwgaG9zaGlpaVwgOwor6Imv5Lq6IDwgcnlvdWppblwgOwor5a6/57iBIDwgc2h1a3VlblwgOwor6Iej5b6TIDwgc2hpbmp1dVwgOwor6IW55rC0IDwgZnVrdXN1aVwgOwor6LeL5riJIDwgYmFzc2hvdVwgOwor55S65p2RIDwgY2hvdXNvblwgOwor5YCS5pyoIDwgdG91Ym9rdVwgOwor5oWw5Yq05LyaIDwgaXJvdWthaVwgOwor6Ieo5bitIDwgcmluc2VraVwgOwor5L+u5q2jIDwgc2h1dXNlaVwgOwor5pyo6a2aIDwgbW9rdWd5b1wgOwor6LGG6IWQ5bGLIDwgdG91ZnV5YVwgOwor6auY5aOwIDwgdGFrYWdvZVwgOwor5L2156ewIDwgaGVpc2hvdVwgOwor5YiG6Zui5qmfIDwgYnVucmlraVwgOwor5qaC5YmHIDwgZ2Fpc29rdVwgOwor6ICQ6ZyHIDwgdGFpc2hpblwgOwor5qCE6IG3IDwgZWlzaG9rdVwgOwor5LuP6LehIDwgYnVzc2VraVwgOwor54Gr54KO55O2IDwga2FlbmJpblwgOwor6LKr6YCaIDwga2FudHN1dVwgOwor6IGW6LmfIDwgc2Vpc2VraVwgOwor5bO25Zu9IDwgdG91Z29rdVwgOwor55Sj5qWtIDwgc2FuZ3lvdVwgOwor6IWw5rCXIDwga29zaGlrZVwgOwor5YK35Ym1IDwgc2hvdXNvdVwgOwor6aOf6ZaTIDwgc2hva2thblwgOwor5b6h5aSa5YiGIDwgZ290YWJ1blwgOwor5Luu6KaqIDwga2FyaW95YVwgOwor6IKy6IuXIDwgaWt1YnlvdVwgOwor5a6Y6IO9IDwga2FuJydub3VcIDsKK+izg+iyuCA8IGNoaW50YWlcIDsKK+WyoeaDmiA8IG9rYWJvcmVcIDsKK+aeneixhiA8IGVkYW1hbWVcIDsKK+iBtOiosSA8IGNob3VreW9cIDsKK+eUn+alrSA8IG5hcml3YWlcIDsKK+S7o+iqrSA8IGRhaWRva3VcIDsKK+ePvuixoSA8IGdlbnNob3VcIDsKK+Wun+e/kiA8IGppc3NodXVcIDsKK+S7suijgSA8IGNodXVzYWlcIDsKK+Wwj+eIqiA8IGtvZHp1bWVcIDsKK+eWjuWvhiA8IHNvbWl0c3VcIDsKK+iBtOinoyA8IGNob3VrYWlcIDsKK+iyp+i+siA8IGhpbicnbm91XCA7Civoh6jmmYLosrsgPCByaW5qaWhpXCA7Civku6PoqLogPCBkYWlzaGluXCA7CivogbToppYgPCBjaG91c2hpXCA7CivlsZ7moLwgPCB6b2trYWt1XCA7CivlgrflhbUgPCBzaG91aGVpXCA7Civmpb3lhbggPCBnYWt1dGVuXCA7CivnlLvmlbAgPCBrYWt1c3V1XCA7Civohrrmh7IgPCB5b3VjaG91XCA7CivlgI3ml6cgPCBiYWlreXV1XCA7CivlpKflpKrpvJMgPCBvb2RhaWtvXCA7Civpq5jlnKcgPCBrb3VhdHN1XCA7CivnlLrmlL8gPCBjaG91c2VpXCA7CivmpbXliJEgPCBreW9ra2VpXCA7CivlpoLkvZXnqIsgPCBpa2Fob2RvXCA7CivniaHniZvluqcgPCBvdXNoaXphXCA7Civnl4XlkI0gPCBieW91bWVpXCA7CivliqDlt6XosrsgPCBrYWtvdWhpXCA7Civmorbmo5IgPCBrYWppYm91XCA7CivmpbXlhqAgPCBreW9ra2FuXCA7CivmpbXlhoUgPCBnb2t1bmFpXCA7Civnl4Xlj4sgPCBieW91eXV1XCA7CivpqrDlrZAgPCBzYWlrb3JvXCA7CivlsqHlvJUgPCBva2FoaWtpXCA7CivlgrTlg4IgPCBzZW11c2hpXCA7CivmnLHpnpggPCBzaHV6YXlhXCA7CivkurrkuovoqrIgPCBqaW5qaWthXCA7Civlrp/nuL4gPCBqaXNzZWtpXCA7Civnl4Xljp8gPCBieW91Z2VuXCA7CivmpbXlhYkgPCBreW9ra291XCA7CivkuqjpgJogPCBrb3V0c3V1XCA7CivmnKzpoJggPCBob25yeW91XCA7Civkurrot6EgPCBoaXRvYXRvXCA7Civku5joqK0gPCBmdXNldHN1XCA7CivpppbntJogPCBzaHVreXV1XCA7CivkvpvniakgPCBrdW1vdHN1XCA7Civls7vljrMgPCBzaHVuZ2VuXCA7CivosaHpmZAgPCBzaG91Z2VuXCA7CivouqvkvZMgPCBzaGludGFpXCA7Civoh7PlppkgPCBzaGlteW91XCA7CivnlJjmoJcgPCBhbWFndXJpXCA7Civku5XoqLMgPCBzaGl3YWtlXCA7Civouo3li5UgPCB5YWt1ZG91XCA7Civku6PooaggPCBkYWloeW91XCA7Civph47oia/niqwgPCBub3JhaW51XCA7Civnl4Xli6IgPCBieW91c2VpXCA7CivlrrnnqY0gPCB5b3VzZWtpXCA7Civku4/oqp4gPCBidXRzdWdvXCA7CivohbDmpI4gPCB5b3V0c3VpXCA7Civouqvku6MgPCBzaGluZGFpXCA7Civml6XmnKzplpMgPCBuaWhvbm1hXCA7Civnjonpn7MgPCBneW9rdW9uXCA7CivlpKfosYbmsrkgPCBkYWl6dXl1XCA7Civlr5Pnm64gPCBndXVtb2t1XCA7CivmnaXpgLEgPCByYWlzaHV1XCA7CivoiLnlgbQgPCBzZW5zb2t1XCA7CivmnKzpnIcgPCBob25zaGluXCA7CivmnKjpnbQgPCBraWd1dHN1XCA7CivpppnnrrEgPCBrb3ViYWtvXCA7CivmnJ3poqggPCBhc2FrYXplXCA7CivlhZDnq6XnlLsgPCBqaWRvdWdhXCA7CivmvJToiJ7loLQgPCBlbmJ1am91XCA7CivlsqnlsbEgPCBpd2F5YW1hXCA7Civmpb3kurogPCBnYWt1amluXCA7CivosYbpoZ4gPCBtYW1lcnVpXCA7CivlrpjntaYgPCBrYW5reXV1XCA7CivnjonpnLIgPCBneW9rdXJvXCA7CivoiLnkvr8gPCBmdW5hYmluXCA7Civlgqzkv4MgPCBzYWlzb2t1XCA7CivnlJ/mlrAgPCBzZWlzaGluXCA7CivotoXnhLYgPCBjaG91emVuXCA7CivkvJ3nv5IgPCBkZW5zaHV1XCA7CivnlZnlubQgPCByeXV1bmVuXCA7CivotIXogokgPCB6ZWluaWt1XCA7Civpq5jlj7AgPCB0YWthZGFpXCA7CivlsqnlrqQgPCBpd2FtdXJvXCA7Civkv7XmlbAgPCBoeW91c3V1XCA7CivlraboirggPCBnYWt1Z2VpXCA7CivnlLfmiYsgPCBvdG9rb2RlXCA7CivkvLzpnZ7kuosgPCBlc2Vnb3RvXCA7CivmooXmr5IgPCBiYWlkb2t1XCA7CivkuI3ntZDmnpwgPCBmdWtla2thXCA7CivmnJ3pnYQgPCBhc2Ftb3lhXCA7CivlsYjmnI0gPCBrdXBwdWt1XCA7CivmnJ3pnKcgPCBhc2FnaXJpXCA7CivogozoibIgPCBoYWRhaXJvXCA7CivlraboiI4gPCBnYWt1c2hhXCA7CivmpbXkuIogPCBnb2t1am91XCA7Civnl4flgJkgPCBzaG91a291XCA7CivoiLnkuK0gPCBzZW5jaHV1XCA7CivogonoibIgPCBuaWt1aXJvXCA7Civkv67mlLkgPCBzaHV1a2FpXCA7Civlsrjlo4EgPCBnYW5wZWtpXCA7CivkurroqLwgPCBuaW5zaG91XCA7CivnlaXlrZcgPCByeWFrdWppXCA7Civkv67mkrAgPCBzaHV1c2VuXCA7CivlnLDkuIvljJYgPCBjaGlrYWthXCA7CivkvI/nvaogPCBmdWt1emFpXCA7Civlr4bnlLsgPCBtaXRzdWdhXCA7Civlhavnmb7plbcgPCB5YW9jaG91XCA7CivppKHonJwgPCBhbm1pdHN1XCA7CivogL3oqq0gPCB0YW5kb2t1XCA7CivogonohasgPCBuaWt1c2h1XCA7Civkv5fmm7ggPCB6b2t1c2hvXCA7CivogIHphpwgPCByb3VzaHV1XCA7CivpqZXmhaIgPCBreW91bWFuXCA7CivlgJTlvLcgPCBrdWtreW91XCA7Civnl4XkurogPCBieW91bmluXCA7CivlgY/ln7cgPCBoZW5zaHV1XCA7CivpgY7po73lkowgPCBrYWhvdXdhXCA7CivkubPphbggPCBueXV1c2FuXCA7Civkva/ni4IgPCB5b3VreW91XCA7Civmm7PppqwgPCBoaWtpdW1hXCA7Civlr77mtYEgPCB0YWlyeXV1XCA7CivpoZTpu5IgPCBnYW5ndXJvXCA7CivkvI/nuKsgPCBmdXNlbnVpXCA7Civmm7LppqwgPCBreW9rdWJhXCA7CivotaTnh5AgPCBzZWtpcmluXCA7CivlgpHkvZwgPCBrZXNzYWt1XCA7CivnkZ7npaUgPCB6dWlzaG91XCA7CivkvI/nt5ogPCBmdWt1c2VuXCA7CivlgoDlhKEgPCBrdWd1dHN1XCA7Civnj43oq4cgPCBjaGluZGFuXCA7Civkv5fmlocgPCB6b2t1YnVuXCA7CivlgJLluZUgPCB0b3ViYWt1XCA7CivlrrbnlZwgPCBrYWNoaWt1XCA7CivkuK3po68gPCBjaHV1aGFuXCA7CivnkIPoj4wgPCBreXV1a2luXCA7Civml6nlsJHlpbMgPCBzYW90b21lXCA7CivkuK3poqggPCBjaHV1YnV1XCA7Civpoqjpjq4gPCBmdXVjaGluXCA7CivlgJ/lsYsgPCBzaGFrdXlhXCA7Civls7bkuK0gPCB0b3VjaHV1XCA7Civlrp3nn7MgPCBob3VzZWtpXCA7Civog4bnn7MgPCB0YW5zZWtpXCA7CivlsbHluKsgPCB5YW1hc2hpXCA7CivmnKjph5EgPCBtb2t1a2luXCA7CivlpoLkvZXniakgPCBpa2Ftb25vXCA7CivlsZ7mgKcgPCB6b2t1c2VpXCA7CivmnaXoqLogPCByYWlzaGluXCA7CivniYjnlLvlrrYgPCBoYW5nYWthXCA7Civkvr/mnI0gPCBiZW5wdWt1XCA7CivkuqHopqogPCBib3VzaGluXCA7Civku5XojYkgPCBzaGlndXNhXCA7CivkuZ3ph40gPCBrb2tvbm9lXCA7Civkv4rmlY8gPCBzaHVuYmluXCA7CivouIrlrZcgPCBvZG9yaWppXCA7CivlsbHls6EgPCB5YW1ha2FpXCA7CivotaTmva4gPCBha2FzaGlvXCA7CivlrabntJogPCBnYWtreXV1XCA7CivnlaXlm7MgPCByeWFrdXp1XCA7CivkuKHpoK0gPCByeW91dG91XCA7CivlsJrmm7QgPCBuYW9zYXJhXCA7CivkuK3pmoogPCBjaHV1dGFpXCA7CivmnKjpgKAgPCBtb2t1em91XCA7CivkvJ3npaggPCBkZW5weW91XCA7CivmnJ3phZIgPCBhc2F6YWtlXCA7Civlr4LnhLYgPCBzZWtpemVuXCA7CivlsILmpa0gPCBzZW5neW91XCA7Civot6HlvaIgPCBhdG9rYXRhXCA7CivlgbbkvZwgPCBndXVzYWt1XCA7CivlsI/mn4QgPCBrb2R6dWthXCA7CivogbTnvaogPCBjaG91emFpXCA7CivkvZnnhrEgPCB5b25ldHN1XCA7CivkuKHpnaIgPCByeW91bWVuXCA7Civkv6HmhJsgPCBzaGluJydhaVwgOwor5L+X5omNIDwgem9rdXNhaVwgOwor5a2Y57aaIDwgc29uem9rdVwgOwor5pyb6YO3IDwgYm91a3lvdVwgOwor5a6d55SfIDwgaG91c2hvdVwgOwor576O6auqIDwgYmloYXRzdVwgOwor5Lit6ZaTIDwgY2h1dWthblwgOwor5LiA6auqIDwgaXBwYXRzdVwgOwor5Luy57aZIDwgY2h1dWtlaVwgOwor5a6J552AIDwgYW5jaGFrdVwgOwor5a2j56+AIDwga2lzZXRzdVwgOwor5oSb6aOy6ICFIDwgYWlpbnNoYVwgOwor5LqM6KaqIDwgZnV0YW95YVwgOwor6LGa6LazIDwgdG9uc29rdVwgOwor5L2Z54OIIDwgeW9yZXRzdVwgOwor5p2+6JGJIDwgbWF0c3ViYVwgOwor5a6J55u0IDwgYW5jaG9rdVwgOwor6aKo6YCfIDwgZnV1c29rdVwgOwor6aGO6autIDwgYWdvaGlnZVwgOwor57+86LObIDwgeW9rdXNhblwgOwor5bGe5bO2IDwgem9rdXRvdVwgOwor6IK655eFIDwgaGFpYnlvdVwgOwor5a6f55CGIDwgaml0c3VyaVwgOwor5a2m56ulIDwgZ2FrdWRvdVwgOwor5a6J5a6a5ZmoIDwgYW50ZWlraVwgOwor5qOL5a6iIDwga2lreWFrdVwgOwor5pyr6LevIDwgbWF0c3Vyb1wgOwor6aeE6I+T5a2QIDwgZGFnYXNoaVwgOwor5bCG5p2lIDwgc2hvdXJhaVwgOwor5LqG6KejIDwgcnlvdWthaVwgOwor55WR5ZywIDwgaGF0YWNoaVwgOwor55S35ai8IDwgZGFuc2hvdVwgOwor5a2k56uLIDwga29yaXRzdVwgOwor5ZSQ6IOh6bq7IDwgdG91Z29tYVwgOwor6IW55bivIDwgZnVrdXRhaVwgOwor5L+X5oOFIDwgem9rdWpvdVwgOwor5LqG6KaLIDwgcnlvdWtlblwgOwor5Li46Yu8IDwgbWFydWtvdVwgOwor5L+K5omNIDwgc2h1bnNhaVwgOwor5YGc6Z+z56ymIDwgdGVpb25wdVwgOwor5L+X5oKqIDwgem9rdWFrdVwgOwor6IG357WEIDwgc2hva3Vzb1wgOwor576k6ZuGIDwgZ3Vuc2h1dVwgOwor576k6ZuEIDwgZ3VuJyd5dXVcIDsKK+WxseWnpSA8IHlhbWF1YmFcIDsKK+S4iumhjiA8IGpvdWdha3VcIDsKK+WvneauvyA8IHNoaW5kZW5cIDsKK+WwkeaVsCA8IHNob3VzdXVcIDsKK+WckuiKuOWutiA8IGVuZ2Vpa2FcIDsKK+Wwj+aWjiA8IHNob3VzYWlcIDsKK+aKleW9seapnyA8IHRvdWVpa2lcIDsKK+iEguawlyA8IGFidXJha2VcIDsKK+WwveW/oCA8IGppbmNodXVcIDsKK+iLseWQieWIqSA8IGlnaXJpc3VcIDsKK+adoeiZqyA8IGpvdWNodXVcIDsKK+eVpeWPmSA8IHJ5YWt1am9cIDsKK+e+jumjnyA8IGJpc2hva3VcIDsKK+WxseWlpSA8IHlhbWFva3VcIDsKK+ePjeiUtSA8IGNoaW56b3VcIDsKK+eEoeWjsOmfsyA8IG11c2Vpb25cIDsKK+S/l+W/tSA8IHpva3VuZW5cIDsKK+agvOautSA8IGtha3VkYW5cIDsKK+S4gOmjnyA8IGlzc2hva3VcIDsKK+eNhOmWgCA8IGdva3Vtb25cIDsKK+WUkOiMhOWtkCA8IHRvdW5hc3VcIDsKK+aXpeacrOiqniA8IG5paG9uZ29cIDsKK+S5seiqvyA8IHJhbmNob3VcIDsKK+S6uuiHoyA8IGppbnNoaW5cIDsKK+S4gOmhniA8IGljaGlydWlcIDsKK+S5seiqrSA8IHJhbmRva3VcIDsKK+S6gOijgiA8IGtpcmV0c3VcIDsKK+iDuOawtCA8IGt5b3VzdWlcIDsKK+aeoOe3miA8IHdha3VzZW5cIDsKK+S8keecoCA8IGt5dXVtaW5cIDsKK+iHqOS8kSA8IHJpbmt5dXVcIDsKK+W+k+S4ieS9jSA8IGp1c2FubWlcIDsKK+WppuWls+WtkCA8IGZ1am9zaGlcIDsKK+S8j+ebriA8IGZ1c2hpbWVcIDsKK+S4h+mboyA8IGJhbicnbmFuXCA7CivlsY7lsL8gPCBzaGlueW91XCA7CivkuIrpmbggPCBqb3VyaWt1XCA7CivlsLrluqYgPCBzaGFrdWRvXCA7CivkuIfpmpwgPCBiYW5zaG91XCA7CivmnIDpgakgPCBzYWl0ZWtpXCA7CivlsLHlvbkgPCBzaHV1ZWtpXCA7CivkuIDpnaIgPCBpY2hpbWVuXCA7Civlr77mlbUgPCB0YWl0ZWtpXCA7Civlt6XkuovosrsgPCBrb3VqaWhpXCA7CivmuKnluqboqIggPCBvbmRva2VpXCA7Civku4/nuIEgPCBidXRzdWVuXCA7Civku5XntYQgPCBzaGlrdW1pXCA7CivmoZDmnZAgPCBraXJpemFpXCA7CivlsITmkoMgPCBzaGFnZWtpXCA7CivlronlrprljJYgPCBhbnRlaWthXCA7CivkuIDpm6ggPCBoaXRvYW1lXCA7Civmn7HnirYgPCBjaHV1am91XCA7CivkvZzms4EgPCBzYWtreW91XCA7CivkuIDpm6MgPCBpY2hpbmFuXCA7CivlsbHlnLAgPCB5YW1hY2hpXCA7Civms5Xonrrosp0gPCBob3JhZ2FpXCA7Civog7TmrLIgPCBkb3V5b2t1XCA7CivpoY3pnaIgPCBnYWt1bWVuXCA7Civnj43oirggPCBjaGluZ2VpXCA7Civmo67ljrMgPCBzaGluZ2VuXCA7CivnlLflm5ogPCBkYW5zaHV1XCA7Civmoq/lrZAgPCBoYXNoaWdvXCA7CivmnpXntbUgPCBtYWt1cmFlXCA7CivnlarlgpggPCBiYW5nYXNhXCA7CivpnZ7luLjmmYIgPCBoaWpvdWppXCA7CivkuIDpmaMgPCBpY2hpamluXCA7Civku4/ntYwgPCBidWtreW91XCA7CivpoKzpq60gPCBob29oaWdlXCA7CivmnKroqK0gPCBtaXNldHN1XCA7CivnlaXlhIAgPCByeWFrdWdpXCA7CivkuLvou7ggPCBzaHVqaWt1XCA7CivpoKzpqqggPCBob29ib25lXCA7CivkubHooYwgPCByYW5neW91XCA7CivogonnnLwgPCBuaWt1Z2FuXCA7CivkuK3pgZMgPCBjaHV1ZG91XCA7CivlrqLmvJQgPCBreWFrdWVuXCA7Civlroznhp8gPCBrYW5qdWt1XCA7CivkuIDploAgPCBpY2hpbW9uXCA7CivmmpfprLEgPCBhbicndXRzdVwgOwor5YWr5Y2D5LujIDwgeWFjaGl5b1wgOwor5qSN5LuYIDwgdWV0c3VrZVwgOwor55CG56qfIDwgcmlrdXRzdVwgOwor5a6f5ryUIDwgaml0c3VlblwgOwor5bC85a+6IDwgYW1hZGVyYVwgOwor5Lit6L6yIDwgY2h1dW5vdVwgOwor5p2R6JC9IDwgc29ucmFrdVwgOwor5pyr6KOUIDwgbWF0c3VlaVwgOwor5bC65a+4IDwgc2VraXN1blwgOwor5pyo6KO9IDwgbW9rdXNlaVwgOwor5L2X5q2MIDwgd2FiaXV0YVwgOwor5L+u5aOrIDwgc2h1dXNoaVwgOwor6aKo6KmVIDwgZnV1aHlvdVwgOwor55Wq5Lq6IDwgYmFuJyduaW5cIDsKK+Wus+avkiA8IGdhaWRva3VcIDsKK+acl+iqrSA8IHJvdWRva3VcIDsKK+Wun+a4rCA8IGppc3Nva3VcIDsKK+eUn+WeoyA8IGlrZWdha2lcIDsKK+WxnuWbvSA8IHpva2tva3VcIDsKK+S6lOiJsiA8IGdvc2hva3VcIDsKK+i1pOacrSA8IGFrYWZ1ZGFcIDsKK+S4jee0sOW3pSA8IGJ1c2Fpa3VcIDsKK+adv+e3oCA8IGl0YWppbWVcIDsKK+ePjeiBniA8IGNoaW5idW5cIDsKK+S9meawtOi3ryA8IHlvc3Vpcm9cIDsKK+eUuuWQjSA8IGNob3VtZWlcIDsKK+acneimiyA8IGNob3VrZW5cIDsKK+aarumbqiA8IGJvc2V0c3VcIDsKK+S9s+aciCA8IGthZ2V0c3VcIDsKK+iCieeVjCA8IG5pa3VrYWlcIDsKK+adpeiBtCA8IHJhaWNob3VcIDsKK+S7u+eUqCA8IG5pbicneW91XCA7Civog7jmnb8gPCBtdW5haXRhXCA7Civkv6HlpYkgPCBzaGlucG91XCA7Civmnb/ntJkgPCBpdGFnYW1pXCA7CivkuozoibIgPCBuaXNob2t1XCA7Civpp5DmlK8gPCBjaHV1c2hpXCA7Civmm7Lot68gPCBreW9rdXJvXCA7CivlsJHlvJ8gPCBzaG91dGVpXCA7Civnm7jpgZXngrkgPCBzb3VpdGVuXCA7CivkuKHovKogPCByeW91cmluXCA7CivmnKjonYsgPCBtb2t1cm91XCA7CivkuIDpjKAgPCBpY2hpam91XCA7Civlrp/ms4EgPCBqaWtreW91XCA7CivotaTml5cgPCBha2FoYXRhXCA7Civkv4LlsZ4gPCBrZWl6b2t1XCA7CivkuKHou40gPCByeW91Z3VuXCA7Civog47mr5IgPCB0YWlkb2t1XCA7CivnlZnku7sgPCByeXV1bmluXCA7CivmnL3okYkgPCBrdWNoaWJhXCA7Civmm7zojbznvoUgPCBtYW5kYXJhXCA7CivlsbHli5ggPCB5YW1ha2FuXCA7CivlsJHlubQgPCBzaG91bmVuXCA7Civku4rnqIsgPCBpbWFob2RvXCA7Civpp5LmkI0gPCBrb21hc29uXCA7CivnvarpmpwgPCB6YWlzaG91XCA7CivlsI/lupcgPCBzaG91dGVuXCA7CivlnLDpm7fngasgPCBqaXJhaWthXCA7Civlhazli5nlk6EgPCBrb3VtdWluXCA7Civlrr/moLkgPCBzaHVra29uXCA7CivmnIjoqZUgPCBnZXBweW91XCA7CivmoYjlsbHlrZAgPCBrYWthc2hpXCA7CivkuIvpg6ggPCBzaGltb2JlXCA7CivmnZ/nvqQgPCBzb2t1Z3VuXCA7Civlrp/mr40gPCBqaXRzdWJvXCA7CivkuI3pgZQgPCBmdXRhdHN1XCA7Civlj6Tku6Poqp4gPCBrb2RhaWdvXCA7CivnlJ/kuIDmnKwgPCBraWlwcG9uXCA7CivkuIvpgZQgPCBrYXRhdHN1XCA7Civpo5vohJogPCBoaWt5YWt1XCA7CivnlLrlhoUgPCBjaG91bmFpXCA7CivmnIjoposgPCB0c3VraW1pXCA7Civkv5flobUgPCB6b2t1amluXCA7CivlgIvliKUgPCBrb2JldHN1XCA7CivlsZ7lkI0gPCB6b2t1bWVpXCA7Civku5jnnYAgPCBmdWNoYWt1XCA7CivkuIrpgLIgPCBqb3VzaGluXCA7CivnjJ/pioMgPCByeW91anV1XCA7CivkuqTntaEgPCBrb3VyYWt1XCA7CivkvZXmn5AgPCBuYW5pYm91XCA7CivouqvotJTlsZMgPCBtaWJpaWtpXCA7Civku5XnnYAgPCBzaGlraXNlXCA7CivmnKjolKYgPCBraWR6dXRhXCA7CivogonniYcgPCBuaWt1aGVuXCA7CivnlLflhKogPCBkYW4nJ3l1dVwgOwor5pyo6JOuIDwgbW9rdXJlblwgOwor5pyq5pW055CGIDwgbWlzZWlyaVwgOwor5LqI56eR55SfIDwgeW9rYXNlaVwgOwor5puy6K2cIDwga3lva3VmdVwgOwor6IKl5rqcIDwga29lZGFtZVwgOwor6LOe546pIDwgc2hvdWdhblwgOwor5YCf5Lq6IDwga2FyaW5pblwgOwor5L+K5aOrIDwgc2h1bnNoaVwgOwor5pu46KmVIDwgc2hvaHlvdVwgOwor5a+G5pWZIDwgbWlra3lvdVwgOwor5LiA6YGTIDwgaWNoaWRvdVwgOwor5LiA6YGHIDwgaWNoaWd1dVwgOwor5pu46Ki8IDwgc2hvc2hvdVwgOwor6LKr56aEIDwga2Fucm9rdVwgOwor5pyq57WM6YGOIDwgbWlrZWlrYVwgOwor6LaK5bm0IDwgZXRzdW5lblwgOwor5LiA6YCjIDwgaWNoaXJlblwgOwor5LiJ6Lu4IDwgc2FuamlrdVwgOwor6ICB6IejIDwgcm91c2hpblwgOwor5p2h57SEIDwgam91eWFrdVwgOwor6LGG6JS1IDwgbWFtZXpvdVwgOwor5L2Z5pelIDwgeW9qaXRzdVwgOwor55CD55WMIDwga3l1dWthaVwgOwor5L2c5paHIDwgc2FrdWJ1blwgOwor5rW35p2+6LKdIDwgbWlydWdhaVwgOwor5L2O5pyoIDwgdGVpYm9rdVwgOwor6aas5pa5IDwgdW1ha2F0YVwgOwor5Lmx6IejIDwgcmFuc2hpblwgOwor5L2V5pmCIDwgbmFuZG9raVwgOwor6LWk5omLIDwgc2VraXNodVwgOwor5YCS5LyPIDwgdG91ZnVrdVwgOwor5puy6KejIDwga3lva2thaVwgOwor5LiA6LyqIDwgaWNoaXJpblwgOwor5bCK5a65IDwgc29uJyd5b3VcIDsKK+S4iui2syA8IGpvdXNva3VcIDsKK+S4oeirliA8IHJ5b3Vyb25cIDsKK+S4gOi7jSA8IGljaGlndW5cIDsKK+eUuuS6uiA8IGNob3VuaW5cIDsKK+S4iui2iiA8IGpvdWV0c3VcIDsKK+WxgOWToSA8IGt5b2t1aW5cIDsKK+WwguWxniA8IHNlbnpva3VcIDsKK+S9leaVhSA8IG5hbml5dWVcIDsKK+S7i+eXhSA8IGthaWJ5b3VcIDsKK+S7j+eUuyA8IGJ1dHN1Z2FcIDsKK+iEseWtlyA8IGRhdHN1amlcIDsKK+eMm+i/vSA8IG1vdXRzdWlcIDsKK+i0heayoiA8IHplaXRha3VcIDsKK+S/oeWPtyA8IHNoaW5nb3VcIDsKK+eUsOS9nCA8IGRlbnNha3VcIDsKK+WFteWFkOW4ryA8IGhla29vYmlcIDsKK+WxseS4rSA8IHNhbmNodXVcIDsKK+acrOiFuSA8IGhvbnB1a3VcIDsKK+S6lOevgCA8IGdvc2V0c3VcIDsKK+S4u+iZuSA8IHNodW5pamlcIDsKK+S4puijvSA8IG5hbWlzZWlcIDsKK+eUmuWFrSA8IGppbnJva3VcIDsKK+i1pOaBpSA8IGFrYWhhamlcIDsKK+i6q+Wlh+m6lyA8IG1pZ2lyZWlcIDsKK+acseiCiSA8IHNodW5pa3VcIDsKK+S9meaOpSA8IHlvc2V0c3VcIDsKK+aknOafu+WToSA8IGtlbnNhaW5cIDsKK+eUsuS5mSA8IGtvdW90c3VcIDsKK+S6leetkiA8IGlkenV0c3VcIDsKK+acrOiDvSA8IGhvbicnbm91XCA7CivnkaPmnKsgPCBzYW1hdHN1XCA7CivkurrnmocgPCBuaW4nJ25vdVwgOwor5Lq655qEIDwgamludGVraVwgOwor6ISG5byxIDwgemVpamFrdVwgOwor6aWR5riHIDwga2lrYXRzdVwgOwor5Li76JasIDwgc2h1eWFrdVwgOwor5Y2x5qmf5oSfIDwga2lraWthblwgOwor6LWk6IyE5a2QIDwgYWthbmFzdVwgOwor5a6Y5pyJIDwga2FuJyd5dXVcIDsKK+S7lueJqSA8IHRhYnV0c3VcIDsKK+e+veiZqyA8IGhhbXVzaGlcIDsKK+eUo+S8kSA8IHNhbmt5dXVcIDsKK+S9nOaIpiA8IHNha3VzZW5cIDsKK+S8r+aelyA8IGJlcnVyaW5cIDsKK+iDjOaVmSA8IGhhaWt5b3VcIDsKK+ixiuiDuCA8IGhvdWt5b3VcIDsKK+afs+adoSA8IHJ5dXVqb3VcIDsKK+err+atpuiAhSA8IGhhbXVzaGFcIDsKK+eUn+S5syA8IHNlaW55dXVcIDsKK+WNsOW6puS6uiA8IGluZG9qaW5cIDsKK+WGheWuieaJkyA8IG5haWFuZGFcIDsKK+iCieaxoCA8IG5pa3VjaGlcIDsKK+S4ieinkiA8IHNhbmtha3VcIDsKK+S4i+imiyA8IHNoaXRhbWlcIDsKK+S8j+aoiyA8IGZ1c2Vkb2lcIDsKK+iCieaxgSA8IG5pa3VqdXVcIDsKK+Wxi+agueadvyA8IHlhbmVpdGFcIDsKK+eEoeacn+WIkSA8IG11a2lrZWlcIDsKK+eOhOe/gSA8IGdlbicnbm91XCA7CivoqJjlv7XnopEgPCBraW5lbmhpXCA7CivkuIDoqqwgPCBpc3NldHN1XCA7Civpp5Dlsa8gPCBjaHV1dG9uXCA7CivlsLHlirQgPCBzaHV1cm91XCA7CivosrfniakgPCBrYWltb25vXCA7Civpg73luILljJYgPCB0b3NoaWthXCA7CivlsYXlgJkgPCBpc291cm91XCA7CivmnI3ohrogPCBmdWt1eW91XCA7Civmnq/muIcgPCBrb2thdHN1XCA7Civpoqjnv5IgPCBmdXVzaHV1XCA7CivkuZfnvoMgPCBqb3ViZWtpXCA7CivlsYjkvLggPCBrdXNzaGluXCA7Civkv5flg6cgPCB6b2t1c291XCA7Civlupznn6XkuosgPCBmdWNoaWppXCA7CivlhoXogLPngo4gPCBuYWlqaWVuXCA7CivmnKzntaYgPCBob25reXV1XCA7CivkuK3okYkgPCBjaHV1eW91XCA7Civnvarot6EgPCB6YWlzZWtpXCA7Civpo5vnpKsgPCB0c3VidXRlXCA7CivmnaHnm64gPCBqb3Vtb2t1XCA7CivkuIDopqcgPCBpY2hpcmFuXCA7Civlr4bluqYgPCBtaXRzdWRvXCA7CivkuIrooaggPCBqb3VoeW91XCA7CivljJfkuqzoqp4gPCBwZWtpbmdvXCA7CivkuIvooYAgPCBnZWtldHN1XCA7CivotrPlirQgPCBzb2t1cm91XCA7CivlsI/lloQgPCBzaG91emVuXCA7Civku67msbogPCBrYWtldHN1XCA7CivkupXnm64gPCBzZWltb2t1XCA7CivlsJrlj4ggPCBuYW9tYXRhXCA7CivniqzlsI/lsYsgPCBpbnVnb3lhXCA7Civmmpfouo0gPCBhbicneWFrdVwgOwor5b285bK45LyaIDwgaGlnYW4nJ2VcIDsKK+iyqOeJqSA8IGthbW90c3VcIDsKK+Wun+aKgCA8IGppdHN1Z2lcIDsKK+acrOexpCA8IGhvbmt1amlcIDsKK+iEseWWtiA8IGRhdHN1ZWlcIDsKK+S9k+W+lyA8IHRhaXRva3VcIDsKK+acrOexjSA8IGhvbnNla2lcIDsKK+Wwj+WTgSA8IHNob3VoaW5cIDsKK+acieiBtyA8IHl1dXNva3VcIDsKK+S9s+WuoiA8IGtha3lha3VcIDsKK+e+juihkyA8IGJpanV0c3VcIDsKK+i1pOWtkCA8IHNla2lzaGlcIDsKK+Wus+W/gyA8IGdhaXNoaW5cIDsKK+aYvOmkkCA8IGNodXVzYW5cIDsKK+S6jOedgCA8IG5pY2hha3VcIDsKK+ebuOW8n+WtkCA8IGFpZGVzaGlcIDsKK+S/l+S8nSA8IHpva3VkZW5cIDsKK+aguOWtkCA8IGtha3VzaGlcIDsKK+acrOeusSA8IGhvbmJha29cIDsKK+S6jOebtCA8IG5pY2hva3VcIDsKK+mmrOW4giA8IHVtYWljaGlcIDsKK+S9leW5tCA8IG5hbicnbmVuXCA7CivlsI/lj6MgPCBrb2d1Y2hpXCA7Civmnb7nhaQgPCBzaG91YmFpXCA7CivmnKznrYsgPCBob25zdWppXCA7CivmnbHni6wgPCB0b3Vkb2t1XCA7CivnjaPogokgPCBqdXVuaWt1XCA7Civkuoznmb4gPCBuaWh5YWt1XCA7Civmm7LoiJ4gPCBrdXNlbWFpXCA7Civnj43njaMgPCBjaGluanV1XCA7CivmnKznq6AgPCBob25zaG91XCA7CivkuLvnv7wgPCBzaHV5b2t1XCA7CivnvqTokL0gPCBndW5yYWt1XCA7Civpo7TnjokgPCBhbWVkYW1hXCA7CivogITnoowgPCBtb3Vyb2t1XCA7Civlrq7lu7cgPCBreXV1dGVpXCA7CivlsLHku7sgPCBzaHV1bmluXCA7CivlppnpvaIgPCBteW91cmVpXCA7CivmmYLpm6ggPCBzaGlndXJlXCA7CivmnKjnq4sgPCBrb2RhY2hpXCA7Civnjovnq4sgPCBvdXJpdHN1XCA7CivlsI/li4cgPCBzaG91eXV1XCA7CivogbfmqKkgPCBzaG9ra2VuXCA7Civlr4Tlrr8gPCBraXNodWt1XCA7Civps7Plh7DluqcgPCBob3VvdXphXCA7Civog4zlvrMgPCBoYWl0b2t1XCA7CivmoLzlpJYgPCBrYWt1Z2FpXCA7Civlkr3poK3ngo4gPCBpbnRvdWVuXCA7CivkuIrolJ8gPCBqb3V6b2t1XCA7CivkuK3og4wgPCBjaHV1emVpXCA7CivotaTlpJYgPCBzZWtpZ2FpXCA7CivkuKHoiLcgPCByeW91Z2VuXCA7CivlraPmnKsgPCBraW1hdHN1XCA7Civmnb7mv6QgPCBzaG91dG91XCA7Civmn4TmnZMgPCBoaXNoYWt1XCA7Civni6zotbAgPCBkb2t1c291XCA7CivmipXlvbHlm7MgPCB0b3VlaXp1XCA7CivnjonnqL8gPCBneW9ra291XCA7Civkvr/kvqsgPCBiZW4nJ25laVwgOwor5LiN6KGb55SfIDwgZnVlaXNlaVwgOwor5LuW5q66IDwgdGFzYXRzdVwgOwor5LiL6JGJIDwgc2hpdGFiYVwgOwor6Laz5LujIDwgYXNoaWRhaVwgOwor5Lit6ICBIDwgY2h1dXJvdVwgOwor5pyI57WmIDwgZ2Vra3l1dVwgOwor6aeQ5ZyoIDwgY2h1dXphaVwgOwor5Lih6IWVIDwgcnlvdXVkZVwgOwor542E6IiOIDwgZ29rdXNoYVwgOwor5bCO5YWlIDwgZG91bnl1dVwgOwor5pW055CG6YOoIDwgc2VpcmlidVwgOwor5YWl5q+N5bGLIDwgaXJpbW95YVwgOwor5LmZ56iuIDwgb3RzdXNodVwgOwor54md6baPIDwgbWVuZG9yaVwgOwor5aSa6Laj5ZGzIDwgdGFzaHVtaVwgOwor5a2f5pilIDwgbW91c2h1blwgOwor5L6b5YuiIDwgdG9tb3plaVwgOwor5a+p5ZWPIDwgc2hpbm1vblwgOwor5LuL5q67IDwga2Fpa2FrdVwgOwor5LiA6JGJIDwgaWNoaXlvdVwgOwor5pyA57WCIDwgc2Fpc2h1dVwgOwor5Lmz55mMIDwgbnl1dWdhblwgOwor6IC95rq6IDwgdGFuZGVraVwgOwor5L2P5a6FIDwganV1dGFrdVwgOwor6LaF5YukIDwgY2hvdWtpblwgOwor6ICB55eFIDwgcm91YnlvdVwgOwor6LOT5qC8IDwgaGlua2FrdVwgOwor5pyd56S8IDwgY2hvdXJlaVwgOwor6Z+z6KiY5Y+3IDwgb25raWdvdVwgOwor5bCP5L6/IDwgc2hvbmJlblwgOwor5bCB5YWlIDwgZnV1bnl1dVwgOwor5pil6Zu3IDwgc2h1bnJhaVwgOwor5bCP5Z2K5Li7IDwga29ib3V6dVwgOwor5Lit57eoIDwgY2h1dWhlblwgOwor5pyq552AIDwgbWljaGFrdVwgOwor5pu457WMIDwgc2hva3lvdVwgOwor5a+45Yi7IDwgc3Vua29rdVwgOwor5LqL54mpIDwgamlidXRzdVwgOwor5LuV5qWtIDwgc2hpd2F6YVwgOwor5pel5pys55S7IDwgbmlob25nYVwgOwor54++5qWtIDwgZ2VuZ3lvdVwgOwor5puz57ayIDwgaGlraWFtaVwgOwor5bCK5L+hIDwgc29uc2hpblwgOwor6LaF5YehIDwgY2hvdWJvblwgOwor5Luy5patIDwgY2h1dWRhblwgOwor5bCP5LydIDwgc2hvdWRlblwgOwor6Z6m6Z+GIDwgYnVyYW5rb1wgOwor57SA5YWD5b6MIDwga2lnZW5nb1wgOwor5Lmx55SoIDwgcmFuJyd5b3VcIDsKK+S4g+iJsiA8IG5hbmFpcm9cIDsKK+S4iuiGiiA8IGpvdWhha3VcIDsKK+S9leWltCA8IGRveWF0c3VcIDsKK+S9k+a4qeWZqCA8IHRhaW9ua2lcIDsKK+S4gOiKuCA8IGljaGlnZWlcIDsKK+eKrOmHmCA8IGludWt1Z2lcIDsKK+acqueZuiA8IG1paGF0c3VcIDsKK+Wwj+S6uiA8IHNob3VuaW5cIDsKK+S9l+WjsCA8IHdhYmlnb2VcIDsKK+S4gOiJsiA8IGhpdG9pcm9cIDsKK+S4u+etiyA8IHNodXN1amlcIDsKK+S4reezuCA8IGNodXVpdG9cIDsKK+izh+agvCA8IHNoaWtha3VcIDsKK+abuOexjSA8IHNob3Nla2lcIDsKK+Wuv+WgtCA8IHNodWt1YmFcIDsKK+aYpemXmCA8IHNodW50b3VcIDsKK+aatOiQvSA8IGJvdXJha3VcIDsKK+S6rOa0myA8IGtlaXJha3VcIDsKK+S4h+iDvSA8IG1hbicnbm91XCA7CivkuInogrIgPCBzYW4nJ2lrdVwgOwor5LiJ6IKhIDwgc2FubWF0YVwgOwor5LiA6IazIDwgaWNoaXplblwgOwor54m56Zu7IDwgdG9rdWRlblwgOwor6aCG6Kq/IDwganVuY2hvdVwgOwor5769566SIDwgaGFib3VraVwgOwor6ISa5YWJIDwga3lha2tvdVwgOwor54us6KOBIDwgZG9rdXNhaVwgOwor576K6IacIDwgeW91bWFrdVwgOwor5pyr55SfIDwgc3VlbmFyaVwgOwor5p+75a+fIDwgc2FzYXRzdVwgOwor5LiK57+8IDwgam91eW9rdVwgOwor5LyR5oCgIDwga3l1dXRhaVwgOwor5Lmx542yIDwgcmFua2FrdVwgOwor576p57W2IDwgZ2l6ZXRzdVwgOwor5piH6aCGIDwgc2hvdWp1blwgOwor54++5pyJIDwgZ2VuJyd5dXVcIDsKK+iyneauvCA8IGthaWdhcmFcIDsKK+eJqemfsyA8IG1vbm9vdG9cIDsKK+W+rua4qea5ryA8IGJpb250b3VcIDsKK+S4u+elniA8IHNodXNoaW5cIDsKK+eOieeSvSA8IGd5b2t1amlcIDsKK+S8muW4rSA8IGthaXNla2lcIDsKK+eLvOiXiSA8IHJvdXpla2lcIDsKK+e+iuiCiSA8IHlvdW5pa3VcIDsKK+mgkOihgCA8IHlva2V0c3VcIDsKK+iytOWppuS6uiA8IGtpZnVqaW5cIDsKK+miqOeWuSA8IGZ1dXNoaW5cIDsKK+eOieeRmyA8IGd5b2t1ZWlcIDsKK+Wuv+WWtiA8IHNodWt1ZWlcIDsKK+S7luaXpSA8IHRhaml0c3VcIDsKK+iAgeeGnyA8IHJvdWp1a3VcIDsKK+izh+aWmSA8IHNoaXJ5b3VcIDsKK+mnkOWFtSA8IGNodXVoZWlcIDsKK+WPs+Wkp+iHoyA8IHVkYWlqaW5cIDsKK+S9juWcpyA8IHRlaWF0c3VcIDsKK+advualkyA8IHNob3VmdXVcIDsKK+S7iuacnSA8IGtvbmNob3VcIDsKK+S4ueeipyA8IHRhbnBla2lcIDsKK+aaruiJsiA8IGJvc2hva3VcIDsKK+S7leaWuSA8IHNoaWthdGFcIDsKK+W4sOWMluS6uiA8IGtpa2FqaW5cIDsKK+S7iuabtCA8IGltYXNhcmFcIDsKK+WvhuWRiiA8IG1pa2tva3VcIDsKK+eKr+i3oSA8IGhhbnNla2lcIDsKK+iytOacrSA8IGtpc2F0c3VcIDsKK+mjhOeEtiA8IGh5b3V6ZW5cIDsKK+S7iuaagSA8IGtvbmd5b3VcIDsKK+aXqemmrCA8IGhheWF1bWFcIDsKK+S9nOWTgSA8IHNha3VoaW5cIDsKK+iyoOaltSA8IGZ1a3lva3VcIDsKK+aIpuW+jOa0viA8IHNlbmdvaGFcIDsKK+S6uuagvCA8IGppbmtha3VcIDsKK+acrOeJqSA8IGhvbm1vbm9cIDsKK+S7iuaZgiA8IGltYWRva2lcIDsKK+adpeattCA8IHJhaXJla2lcIDsKK+mfs+iosyA8IG9uJyd5YWt1XCA7Civku4rmmKUgPCBrb25zaHVuXCA7Civosq/mnKggPCBjaG9ib2t1XCA7CivosrfmmKUgPCBiYWlzaHVuXCA7Civlr4zlipsgPCBmdXJ5b2t1XCA7CivkuIrntJogPCBqb3VreXV1XCA7CivkuIrntJkgPCB1d2FnYW1pXCA7CivogZrmlaMgPCBzaHV1c2FuXCA7CivkuIrntJAgPCB1d2FoaW1vXCA7Civku4rmlrkgPCBpbWFnYXRhXCA7CivmnKjniYggPCBtb2t1aGFuXCA7CivmnKjniYcgPCBtb2t1aGVuXCA7Civog4zlnKcgPCBoYWlhdHN1XCA7CivogonlvL4gPCBuaWt1ZGFuXCA7CivnjYTnqpMgPCBnb2t1c291XCA7CivlrablubQgPCBnYWt1bmVuXCA7CivlrqLlnJ8gPCBreWFrdWRvXCA7CivorbTosqwgPCBrZW5zZWtpXCA7CivkvY7llLEgPCB0ZWlzaG91XCA7Civml6fpoqggPCBreXV1ZnV1XCA7CivlrZjlv7UgPCB6b24nJ25lblwgOwor546H54i+IDwgc290c3VqaVwgOwor5a2m5bi9IDwgZ2FrdWJvdVwgOwor5pys54S2IDwgaG9uJyduZW5cIDsKK+eLguiogCA8IGt5b3VnZW5cIDsKK+S7leaOmyA8IHNoaWtha2VcIDsKK+agquWIuCA8IGthYnVrZW5cIDsKK+mjm+ayqyA8IGhpbWF0c3VcIDsKK+miqOeLgiA8IGZ1dWt5b3VcIDsKK+WtkOaBryA8IHNoaXNva3VcIDsKK+mmrOWMuSA8IGJhaGl0c3VcIDsKK+abuOebriA8IHNob21va3VcIDsKK+S4iueusSA8IHV3YWJha29cIDsKK+iDuOWDjyA8IGt5b3V6b3VcIDsKK+iDtOWFgyA8IGRvdW1vdG9cIDsKK+aal+iJsiA8IGFuc2hva3VcIDsKK+WujOWjgSA8IGthbmJla2lcIDsKK+iDhuWaoiA8IHRhbicnbm91XCA7CivosYrnhp8gPCBob3VqdWt1XCA7CivkuIrnrZYgPCBqb3VzYWt1XCA7CivpoY7ntJAgPCBhZ29oaW1vXCA7CivmnKjngq0gPCBtb2t1dGFuXCA7CivkvZnlipsgPCB5b3J5b2t1XCA7Civlj5flg4/mqZ8gPCBqdXpvdWtpXCA7CivkuK3nm6QgPCBjaHV1YmFuXCA7CivoqJjlv7XmqLkgPCBraW5lbmp1XCA7CivogLPmoJMgPCBtaW1pc2VuXCA7CivkvZnlibIgPCB5b2thdHN1XCA7CivkuIfnrZYgPCBiYW5zYWt1XCA7Civku6Tmga8gPCByZWlzb2t1XCA7Civnsonlvq7lobUgPCBrb21pamluXCA7CivniYfpnaIgPCBrYXRhbWVuXCA7CivngrrmlL/ogIUgPCBpc2Vpc2hhXCA7CivnibnphY0gPCB0b2t1aGFpXCA7CivkubPmuIUgPCBueXV1c2VpXCA7Civml6XpnLIgPCBuaWNoaXJvXCA7CivlpKfniqzluqcgPCBvb2ludXphXCA7Civml6XmmYLoqIggPCBoaWRva2VpXCA7CivkubPmtrIgPCBueXV1ZWtpXCA7CivnjK7nq4sgPCBrb25kYXRlXCA7CivkuKHnnLwgPCByeW91Z2FuXCA7CivkvZXlh6YgPCBkb2tvaXJhXCA7CivosYbngq0gPCBtYW1ldGFuXCA7Civlrp/lk6EgPCBqaXRzdWluXCA7Civnj43mnKwgPCBjaGlucG9uXCA7Civku6PlvbkgPCBkYWl5YWt1XCA7CivkubHmtYEgPCByYW5yeXV1XCA7CivkuIDnq68gPCBpcHBhc2hpXCA7Civnj43mm7ggPCBjaGluc2hvXCA7CivkvZXlhbEgPCBuYW50b21vXCA7Civlr5LkuK0gPCBrYW5jaHV1XCA7CivmmYLkuovoq5YgPCBqaWppcm9uXCA7CivkuK3nk7YgPCBjaHV1YmluXCA7CivkuIfnpo8gPCBtYW5wdWt1XCA7Civogbflt6UgPCBzaG9ra291XCA7CivlroXlnLAgPCB0YWt1Y2hpXCA7CivkubPmsYEgPCBueXV1anV1XCA7CivmoKHlgIkgPCBhemVrdXJhXCA7Civnv5XnhLYgPCBreXV1emVuXCA7Civkv53ppIrpmaIgPCBob3lvdWluXCA7CivmlrDprq4gPCBzaGluc2VuXCA7CivosYrmvIEgPCBob3VyeW91XCA7CivoravoqIAgPCB1d2Fnb3RvXCA7CivmnJ3mva4gPCBhc2FzaGlvXCA7Civoh6rnhLbolq8gPCBqaW5lbmpvXCA7Civkv53lgaXmiYAgPCBob2tlbmpvXCA7Civpoqjmva4gPCBmdXVjaG91XCA7Civog7TkuK0gPCBkb3VuYWthXCA7CivpoJrogokgPCBrZWluaWt1XCA7CivkvZzkvosgPCBzYWt1cmVpXCA7Civpm6LlvIHoirEgPCByaWJlbmthXCA7CivmnKzmtYEgPCBob25yeXV1XCA7Civlr4bkuosgPCBtaXRzdWppXCA7Civku7DlsbEgPCBneW91c2FuXCA7Civku4/mgakgPCBidXRzdW9uXCA7CivmrKHkuJbku6MgPCBqaXNlZGFpXCA7Civku5blvosgPCB0YXJpdHN1XCA7CivmnaXmmKUgPCByYWloYXJ1XCA7CivkuI3lmajnlKggPCBidWtpeW91XCA7Civnj77lvbkgPCBnZW4nJ2VraVwgOwor5LiA56S8IDwgaWNoaXJlaVwgOwor6aCG6ImvIDwganVucnlvdVwgOwor5LiK55+zIDwgdXdhaXNoaVwgOwor5a6f5YuZIDwgaml0c3VtdVwgOwor5a2Q5bGAIDwga29reW9rdVwgOwor5omL5aWH6bqXIDwgdGVnaXJlaVwgOwor5LiL552AIDwgc2hpdGFnaVwgOwor5pyq5rG6IDwgbWlrZXRzdVwgOwor5aSn6buSIDwgZGFpa29rdVwgOwor5aGp5Z+65oCnIDwgZW5raXNlaVwgOwor5LuV5bqmIDwgc2hpdGFrdVwgOwor5a2m5aSWIDwgZ2FrdWdhaVwgOwor6aCs57SFIDwgaG9vYmVuaVwgOwor6Z2i6ZW3IDwgb21vbmFnYVwgOwor6K2Y6KqeIDwgc2hpa2lnb1wgOwor5L2O5L+XIDwgdGVpem9rdVwgOwor5LiL55uuIDwgc2hpdGFtZVwgOwor5p2P5p6XIDwga3lvdXJpblwgOwor5a2R5a2RIDwgYm91ZnVyaVwgOwor5pqX57eRIDwgYW5yeW9rdVwgOwor6aas5Li7IDwgYmFudXNoaVwgOwor54m56LWmIDwgdG9rdXNoYVwgOwor5LiN55m6IDwgZnVoYXRzdVwgOwor5L2V5Lq6IDwgbmFucGl0b1wgOwor6KiY5b+15pelIDwga2luZW5iaVwgOwor6auY56WW54i2IDwga291c29mdVwgOwor5LuK5pel5LitIDwga3lvdWp1dVwgOwor6IG35a6JIDwgc2hva3VhblwgOwor5pmv6ImyIDwga2VzaGlraVwgOwor5p2R5pyJIDwgc29uJyd5dXVcIDsKK+adkOacqCA8IHphaW1va3VcIDsKK+acp+awlyA8IG9ib3JvZ2VcIDsKK+S4h+ebriA8IGJhbm1va3VcIDsKK+mcsumqqCA8IHJva290c3VcIDsKK+S7j+W6pyA8IGJ1dHN1emFcIDsKK+mjm+acrSA8IGhpc2F0c3VcIDsKK+Wkp+m3uiA8IGRhaXNhZ2lcIDsKK+irlumngSA8IHJvbmJha3VcIDsKK+miqOa1gSA8IGZ1dXJ5dXVcIDsKK+WtpuWgsSA8IGdha3Vob3VcIDsKK+iCieWjsCA8IG5pa3VzZWlcIDsKK+S7o+WwhiA8IGRhaXNob3VcIDsKK+ixiuaygyA8IGhvdXlva3VcIDsKK+iQjum7hOeXhSA8IGlvdWJ5b3VcIDsKK+iBluW7nyA8IHNlaWJ5b3VcIDsKK+WutuS4uyA8IHlhbnVzaGlcIDsKK+S4gOedgCA8IGl0Y2hha3VcIDsKK+S4gOecvCA8IGljaGlnYW5cIDsKK+S4gOecuCA8IGljaGlib3VcIDsKK+itmOimiyA8IHNoaWtrZW5cIDsKK+afkOWbvSA8IGJvdWtva3VcIDsKK+adieadkCA8IHN1Z2l6YWlcIDsKK+S4gOecoCA8IGljaGltaW5cIDsKK+S7geW+syA8IGppbnRva3VcIDsKK+Wum+WFiCA8IGF0ZXNha2lcIDsKK+aTrOWPpOaWhyA8IGdpa29idW5cIDsKK+aWsOmiqCA8IHNoaW5wdXVcIDsKK+S4gOebtCA8IGl0Y2hva3VcIDsKK+S7iuW5tCA8IGtvbicnbmVuXCA7Civog5rkubMgPCBoYWlueXV1XCA7Civkuozml6UgPCBmdXRzdWthXCA7Civmlq3po58gPCBkYW5qaWtpXCA7CivkubPmo5IgPCBueXV1Ym91XCA7CivkuIvnlaUgPCBnZXJ5YWt1XCA7CivnkZ7lhYYgPCB6dWljaG91XCA7CivmlrDpoZQgPCBzaGluZ2FvXCA7CivkuIfnl4UgPCBtYW5ieW91XCA7Civpn7vohJogPCBpbmt5YWt1XCA7CivlnLDooaPpoZ4gPCBjaGlpcnVpXCA7Civnv7zmo58gPCB5b2t1dG91XCA7CivkuInnlLcgPCBzYW4nJ25hblwgOwor5p2Q5paZIDwgemFpcnlvdVwgOwor5amG576F6ZaAIDwgYmFyYW1vblwgOwor5a6Y5YOaIDwga2FucnlvdVwgOwor5paH6bOlIDwgYnVuY2hvdVwgOwor5Lq65b6zIDwgbmludG9rdVwgOwor5Luw5aSpIDwgZ3lvdXRlblwgOwor6LOK5a6zIDwgem9rdWdhaVwgOwor6aGM55uuIDwgZGFpbW9rdVwgOwor5Lq65b2iIDwgbmluZ3lvdVwgOwor54mb6LuKIDwgZ3l1dXNoYVwgOwor6LOK5a2QIDwgem9rdXNoaVwgOwor56eY5pu46KqyIDwgaGlzaG9rYVwgOwor5pys5qWtIDwgaG9uZ3lvdVwgOwor5Y2w55S757SZIDwgaW5nYXNoaVwgOwor6LKn5byxIDwgaGluamFrdVwgOwor54iG6aKoIDwgYmFrdWZ1dVwgOwor6ICB5py9IDwgcm91a3l1dVwgOwor5pep6YCfIDwgc2Fzc29rdVwgOwor5pen6YGTIDwga3l1dWRvdVwgOwor6ICB5pyoIDwgcm91Ym9rdVwgOwor54m56KqNIDwgdG9rdW5pblwgOwor5pys5qOaIDwgaG9uZGFuYVwgOwor5aaZ6LajIDwgbXlvdXNodVwgOwor54mp6LGhIDwgYnVzc2hvdVwgOwor5LuP5a+6IDwgYnV0c3VqaVwgOwor5LqI5oOz5bGLIDwgeW9zb3V5YVwgOwor5oWI5ZaE5a62IDwgaml6ZW5rYVwgOwor5pyr5qKiIDwgbWFzc2hvdVwgOwor6KuW6ZujIDwgcm9uJyduYW5cIDsKK+Wcn+abnOaXpSA8IGRveW91YmlcIDsKK+S4iueOiSA8IGpvdWRhbWFcIDsKK+irlumbhiA8IHJvbnNodXVcIDsKK+ael+WtpiA8IHJpbmdha3VcIDsKK+WtpuWVjyA8IGdha3Vtb25cIDsKK+ixquaXjyA8IGdvdXpva3VcIDsKK+iBt+WgtCA8IHNob2t1YmFcIDsKK+acrOagvCA8IGhvbmtha3VcIDsKK+S8muWJhyA8IGthaXNva3VcIDsKK+S4u+a1gSA8IHNodXJ5dXVcIDsKK+aXoui/sCA8IGtpanV0c3VcIDsKK+e+qeeDiCA8IGdpcmV0c3VcIDsKK+mZjembqOaelyA8IGtvdXVyaW5cIDsKK+eJqeitsCA8IGJ1dHN1Z2lcIDsKK+iyuOWutiA8IGthc2hpeWFcIDsKK+acieavkiA8IHl1dWRva3VcIDsKK+aWsOmWiyA8IHNoaW5rYWlcIDsKK+S4i+eJqSA8IGthYnV0c3VcIDsKK+S7meWlsyA8IHNlbicnbnlvXCA7CivniIbpm7cgPCBiYWt1cmFpXCA7CivkvI/li6IgPCBmdXNlemVpXCA7CivkuIrniakgPCBqb3Vtb25vXCA7CivmnJ3poqjlkYIgPCBhc2FidXJvXCA7CivmnqDlpJYgPCB3YWt1Z2FpXCA7CivmnKzmnJ0gPCBob25jaG91XCA7Civnibnoo4UgPCB0b2t1c291XCA7CivpoJjnqbogPCByeW91a3V1XCA7CivlrablkI0gPCBnYWt1bWVpXCA7Civml6fouZ8gPCBmdXJ1YXRvXCA7CivmnKvmnJ8gPCBtYXRzdWdvXCA7CivmnKjmna8gPCBtb2t1aGFpXCA7Civlho3kuIvku5ggPCBzYWlrYWZ1XCA7CivmtIvnlLvlrrYgPCB5b3VnYWthXCA7CivorKzoq5YgPCBieXV1cm9uXCA7CivmnKjmnZAgPCBtb2t1emFpXCA7Civlrablj4sgPCBnYWt1eXV1XCA7CivmnKjmnKwgPCBtb2t1aG9uXCA7CivkuIvnhrEgPCBnZW5ldHN1XCA7Civlrpropo/luqcgPCBqb3VnaXphXCA7CivmnaXlvqkgPCByYWlmdWt1XCA7CivmnKjmm5wgPCBtb2t1eW91XCA7Civmm7LmtaYgPCBreW9rdWhvXCA7CivpoZ7nhLwgPCBydWlzaG91XCA7CivpoqjmoLwgPCBmdXVrYWt1XCA7Civmnb7lsYsgPCBtYXRzdXlhXCA7CivpoK3nm64gPCB0b3Vtb2t1XCA7CivkuZ3mnIggPCBrdWdhdHN1XCA7CivkvI/lhbUgPCBmdWt1aGVpXCA7Civnibnono0gPCB0b2t1eXV1XCA7CivkubHmkoMgPCByYW5nZWtpXCA7CivnjaPmrLIgPCBqdXV5b2t1XCA7CivlpKnpoJggPCB0ZW5yeW91XCA7CivpnIDnlKjlrrYgPCBqdXlvdWthXCA7Civkv53lgaXlqaYgPCBob2tlbmZ1XCA7CivosYbmnb8gPCBtYW1laXRhXCA7Civos7zlhaUgPCBrb3VueXV1XCA7CivppIXlsYsgPCBtb2NoaXlhXCA7Civlq6HmiqsgPCBjaGFrdWhpXCA7CivmnJ3mnaUgPCBjaG91cmFpXCA7CivorKzoposgPCBieXV1a2VuXCA7CivkuIvngasgPCBzaGl0YWJpXCA7CivosYbmnKwgPCBtYW1laG9uXCA7Civpq5jnpZbmr40gPCBrb3Vzb2JvXCA7CivlppnoqIggPCBteW91a2VpXCA7Civku4rlpJUgPCBrb24nJ3l1dVwgOwor5Lmd5pifIDwga3l1dXNlaVwgOwor5ae/57W1IDwgc3VnYXRhZVwgOwor6IG35ZOhIDwgc2hva3VpblwgOwor5aSc6aOfIDwgeWFzaG9rdVwgOwor55CD5ZujIDwga3l1dWRhblwgOwor5aSW6ICz54KOIDwgZ2FpamllblwgOwor5aSa6aOfIDwgdGFzaG9rdVwgOwor6IKW5YOPIDwgc2hvdXpvdVwgOwor5p2x5bGLIDwgYXp1bWF5YVwgOwor5aSp6ZuyIDwgYW1hZ3Vtb1wgOwor5LiN5r2UIDwgZnVrZXRzdVwgOwor5LiN6KOB5Y+vIDwgZnVzYWlrYVwgOwor5a2m5YaFIDwgZ2FrdW5haVwgOwor5Lit5q2jIDwgY2h1dXNlaVwgOwor5paH6Z2pIDwgYnVua2FrdVwgOwor5p2f5bivIDwgc29rdXRhaVwgOwor6K2m5YKZ5ZOhIDwga2VpYmlpblwgOwor5pyf5pelIDwga2lqaXRzdVwgOwor6aOf5b6MIDwgc2hva3Vnb1wgOwor5LiN5ruFIDwgZnVtZXRzdVwgOwor5pyd5pa5IDwgYXNhZ2F0YVwgOwor5aSV6aKoIDwgeXV1a2F6ZVwgOwor6Z+z56+AIDwgb25zZXRzdVwgOwor5aSn6Zm4IDwgdGFpcmlrdVwgOwor6Kqk5L2c5YuVIDwgZ29zYWRvdVwgOwor6IG05Y+WIDwgY2hvdXNodVwgOwor54us55y8IDwgZG9rdWdhblwgOwor5LiL5rmvIDwgc2hpbW95dVwgOwor5aSc6ZyyIDwgeW90c3V5dVwgOwor5Lq65aOwIDwgaGl0b2dvZVwgOwor54+N5a6dIDwgY2hpbnBvdVwgOwor5aaE6KmVIDwgbW91aHlvdVwgOwor6IG35YuZIDwgc2hva3VtdVwgOwor6aOv5bGLIDwgbWVzaGl5YVwgOwor5p2/5aOBIDwgaXRha2FiZVwgOwor5Lq65aKDIDwgamlua3lvdVwgOwor5Lm+5b6zIDwga2VudG9rdVwgOwor5Luu5ZCN5pysIDwga2FuYWhvblwgOwor5pu45qOaIDwgc2hvZGFuYVwgOwor5aSV6Z2EIDwgeXV1bW95YVwgOwor5p2l5a6FIDwgcmFpdGFrdVwgOwor572u54mpIDwgb2tpbW9ub1wgOwor542E5q27IDwgZ29rdXNoaVwgOwor5pyr5oqAIDwgbWF0c3VnaVwgOwor5pyt5omAIDwgZnVkYXNob1wgOwor5aSV6ZynIDwgeXV1Z2lyaVwgOwor6aCS55m9IDwgaGFucGFrdVwgOwor5LiK5rW3IDwgc2hhbmhhaVwgOwor5pak6YePIDwga2lucnlvdVwgOwor5paw6YGTIDwgc2hpbmRvdVwgOwor5pmp56eLIDwgYmFuc2h1dVwgOwor5LiK5rWBIDwgam91cnl1dVwgOwor5LmX5o+bIDwgbm9yaWthZVwgOwor5LiJ5rWBIDwgc2Fucnl1dVwgOwor5LiK5rSbIDwgam91cmFrdVwgOwor5pyr5oiQIDwgdXJhbmFyaVwgOwor54mH6KaqIDwga2F0YW95YVwgOwor6LOg5YSfIDwgYmFpc2hvdVwgOwor57+M5pmpIDwgeW9rdWJhblwgOwor5Lmd5oudIDwga3l1dWhhaVwgOwor5Luu5YWNIDwga2FyaW1lblwgOwor5Li45p2QIDwgbWFydXphaVwgOwor5Lu75L6gIDwgbmlua3lvdVwgOwor6IKJ5L2TIDwgbmlrdXRhaVwgOwor5pyI5pelIDwgdHN1a2loaVwgOwor5pW16ZmjIDwgdGVraWppblwgOwor6aCF55uuIDwga291bW9rdVwgOwor5aSJ6Z2pIDwgaGVua2FrdVwgOwor5LiA5rWqIDwgaWNoaXJvdVwgOwor5paZ6YeRIDwgcnlvdWtpblwgOwor6ICB5byxIDwgcm91amFrdVwgOwor5aSV6ZeHIDwgeXV1eWFtaVwgOwor5pWw6Zq7IDwgc3V1c2VraVwgOwor5paw6LuKIDwgc2hpbnNoYVwgOwor5Lit5p6iIDwgY2h1dXN1dVwgOwor5LqL5bGAIDwgamlreW9rdVwgOwor5paH6Y6uIDwgYnVuY2hpblwgOwor5Luu5YCfIDwga2FzaGFrdVwgOwor5Luj5YWlIDwgZGFpbnl1dVwgOwor5LiA5rOhIDwgaGl0b2F3YVwgOwor6Zuo6aKoIDwgYW1la2F6ZVwgOwor6LGq5beeIDwgZ291c2h1dVwgOwor5Yqp55Sj5omAIDwgam9zYW5qb1wgOwor6Z2p6KOFIDwga2F3YXNvdVwgOwor5LuP5Y2wIDwgZnV0c3VpblwgOwor5Li75pWZIDwgc2h1a3lvdVwgOwor5LiA5rG6IDwgaWtrZXRzdVwgOwor5LqL5a6fIDwgamlqaXRzdVwgOwor5LqI5a+fIDwgeW9zYXRzdVwgOwor5LiA5rGXIDwgaGl0b2FzZVwgOwor6Ku46KizIDwgc2hvd2FrZVwgOwor5aem562WIDwga2Fuc2FrdVwgOwor5Luy5LuVIDwgbmFrYXNoaVwgOwor5Luy5LuLIDwgY2h1dWthaVwgOwor5Luy5Lq6IDwgbmFrb3Vkb1wgOwor5Lqs5ZywIDwga3lvdWNoaVwgOwor6LK35Y+OIDwgYmFpc2h1dVwgOwor5LiA5q+rIDwgaWNoaWdvdVwgOwor5p6g5YaFIDwgd2FrdW5haVwgOwor5LiA5q+bIDwgaWNoaW1vdVwgOwor6ICz5Z6iIDwgbWltaWFrYVwgOwor54mn6I2JIDwgYm9rdXNvdVwgOwor6aSo5YaFIDwga2FuJyduYWlcIDsKK+S4reaXrCA8IGNodXVqdW5cIDsKK+e4pumalCA8IGp1dWtha3VcIDsKK+Wkp+aZguS7oyA8IG9vamlkYWlcIDsKK+aeuOarnumFuCA8IGt1ZW5zYW5cIDsKK+mbkemngSA8IHphcHBha3VcIDsKK+mgk+eLgiA8IHRvbmt5b3VcIDsKK+iZmueEoeWDpyA8IGtvbXVzb3VcIDsKK+WksemAjyA8IHNoaXR0b3VcIDsKK+S4oeabvyA8IHJ5b3VnYWVcIDsKK+mbqumaoCA8IHNldGNoaW5cIDsKK+WssOiomOWPtyA8IGVpa2lnb3VcIDsKK+acq+W6pyA8IG1hdHN1emFcIDsKK+mjtOWdiiA8IGFtZW5ib3VcIDsKK+S/neWBpeWMuyA8IGhva2VuJydpXCA7Civku6PkvZwgPCBkYWlzYWt1XCA7CivkuLjmkI0gPCBtYXJ1em9uXCA7CivmnpflhoUgPCByaW4nJ25haVwgOwor5pyr5bqDIDwgc3VlaGlyb1wgOwor6aCt5a2X6KqeIDwgdG91amlnb1wgOwor5Luj5LyRIDwgZGFpa3l1dVwgOwor54mn6IiOIDwgYm9rdXNoYVwgOwor5LuP5YW3IDwgYnV0c3VndVwgOwor5pyr5bitIDwgbWFzc2VraVwgOwor6Ky56IG0IDwga2luY2hvdVwgOwor6Ku46KGMIDwgc2hvZ3lvdVwgOwor5pyo5aSq5YiAIDwga2lkYWNoaVwgOwor546J5bqnIDwgZ3lva3V6YVwgOwor5pys5beeIDwgaG9uc2h1dVwgOwor54yb5q+SIDwgbW91ZG9rdVwgOwor57eY6buZIDwga2FubW9rdVwgOwor5LuL5YWlIDwga2Fpbnl1dVwgOwor5pud5pu4IDwgYmFrdXNob1wgOwor6LG55aSJIDwgaHlvdWhlblwgOwor5pWR6ZujIDwga3l1dW5hblwgOwor5Lih5patIDwgcnlvdWRhblwgOwor5aWl6KGMIDwgb2t1eXVraVwgOwor5pyd5bu3IDwgY2hvdXRlaVwgOwor5paH6YCaIDwgYnVudHN1dVwgOwor6aOf5aGpIDwgc2hva3VlblwgOwor54ax6ZuyIDwgbmV0c3V1blwgOwor6JOu6I+v5bqnIDwgcmVuZ2V6YVwgOwor5pWZ6ZaAIDwga3lvdW1vblwgOwor6ZuR6Z+zIDwgemF0c3VvblwgOwor54ub54qsIDwga29tYWludVwgOwor54+N5ZWPIDwgY2hpbm1vblwgOwor5oSb5pu45a62IDwgYWlzaG9rYVwgOwor6ZuB6aaWIDwgZ2Fua3ViaVwgOwor5pqm5rOVIDwgcmVraWhvdVwgOwor5aSp6Lu4IDwgdGVuamlrdVwgOwor6Kqe6YeIIDwgZ29zaGFrdVwgOwor5Lq65YmNIDwgaGl0b21hZVwgOwor6aas5YiA6LKdIDwgbWF0ZWdhaVwgOwor54++5Lu7IDwgZ2VuJyduaW5cIDsKK+WknOmBkyA8IHlvbWljaGlcIDsKK+irluiqvyA8IHJvbmNob3VcIDsKK+S5meW3oSA8IG90c3VqdW5cIDsKK+Wkj+mHjiA8IG5hdHN1bm9cIDsKK+WklumDrSA8IGdhaWtha3VcIDsKK+ePjeWTgSA8IGNoaW5waW5cIDsKK+acneW4giA8IGFzYWljaGlcIDsKK+WlieiqrSA8IGhvdWRva3VcIDsKK+aYvOekvCA8IGNodXVyZWlcIDsKK+acq+WwviA8IG1hdHN1YmlcIDsKK+S4i+acnyA8IHNoaW1va2lcIDsKK+aVsOmHjyA8IHN1dXJ5b3VcIDsKK+eHl+mFkiA8IGthbnpha2VcIDsKK+S7leS6iyA8IHNoaWdvdG9cIDsKK+irluiplSA8IHJvbnB5b3VcIDsKK+S4iuacjSA8IHV3YWZ1a3VcIDsKK+acqOWxpSA8IHBva2t1cmlcIDsKK+acq+WvuiA8IG1hdHN1amlcIDsKK+irluiovCA8IHJvbnNob3VcIDsKK+eJqee9riA8IG1vbm9va2lcIDsKK+acjeW+kyA8IGZ1a3VqdXVcIDsKK+S4ieaciCA8IG1pdHN1a2lcIDsKK+i2o+aEj+abuCA8IHNodWlzaG9cIDsKK+acjeW9uSA8IGZ1a3Vla2lcIDsKK+S4oeaQjSA8IHJ5b3V6b25cIDsKK+eJm+iEgiA8IGd5dXVzaGlcIDsKK+eJp+e+iiA8IGJva3V5b3VcIDsKK+WkiemHjyA8IGhlbnJ5b3VcIDsKK+S4h+aciSA8IGJhbicneXV1XCA7CivmnKzlroUgPCBob250YWt1XCA7Civmm7LmioAgPCBreW9rdWdpXCA7CivpnZLom5kgPCBhb2dhZXJ1XCA7CivmnInlvrMgPCB5dXV0b2t1XCA7CivnibnntJogPCB0b2treXV1XCA7CivnjK7mnKggPCBrZW5ib2t1XCA7Civpo5vlnLAgPCB0b2JpY2hpXCA7CivnjKvmnb8gPCBuZWtvaXRhXCA7Civml6Xoi7EgPCBuaWNoaWVpXCA7Civoq4vorIEgPCBzZWlldHN1XCA7CivmmJPntYwgPCBla2lreW91XCA7Civosp3libIgPCBrYWl3YXJpXCA7CivkuI3ml6UgPCBmdWppdHN1XCA7CivmmpbmtYEgPCBkYW5yeXV1XCA7CivpnZLomasgPCBhb211c2hpXCA7CivkuInmmKUgPCBzYW5zaHVuXCA7CivkuIDmnK0gPCBpc3NhdHN1XCA7CivogJDlnKcgPCB0YWlhdHN1XCA7CivnuKvph50gPCBudWliYXJpXCA7CivpgYvmkKzosrsgPCB1bnBhbmhpXCA7CivpoILngrkgPCBjaG91dGVuXCA7CivkuIDmm7IgPCBpa2t5b2t1XCA7CivkuLnlv7UgPCB0YW4nJ25lblwgOwor6Z+z54mpIDwgaW5tb3RzdVwgOwor5pel6IieIDwgbmljaGlidVwgOwor5pen6IeYIDwga3l1dXJvdVwgOwor542j5b+DIDwganV1c2hpblwgOwor6KuL6KiXIDwgc2VpdGFrdVwgOwor6ICB5aKDIDwgcm91a3lvdVwgOwor5pSY5aS36KuWIDwgam91aXJvblwgOwor5oeQ55aR5rS+IDwga2FpZ2loYVwgOwor5LuK5LiAIDwgaW1haWNoaVwgOwor5LiH5pabIDwgYmFua29rdVwgOwor54Sh54WZ54KtIDwgbXVlbnRhblwgOwor5LiJ5pWZIDwgc2Fua3lvdVwgOwor5LiA5pmpIDwgaGl0b2JhblwgOwor5aSp6LGhIDwgdGVuc2hvdVwgOwor5pmp54afIDwgYmFuanVrdVwgOwor5aal57WQIDwgZGFrZXRzdVwgOwor5pil56eLIDwgaGFydWFraVwgOwor54mb57y2IDwgZ3l1dWthblwgOwor5a6J6Z2Z5pmCIDwgYW5zZWlqaVwgOwor5pyA5by3IDwgc2Fpa3lvdVwgOwor5aSJ6YCfIDwgaGVuc29rdVwgOwor5aSJ6YCaIDwgaGVudHN1dVwgOwor5pqX5q66IDwgYW5zYXRzdVwgOwor5pW16LuNIDwgdGVraWd1blwgOwor54m5562JIDwgdG9rdXRvdVwgOwor54mH6IWVIDwga2F0YXVkZVwgOwor5LiA5pesIDwgaWNoaWp1blwgOwor5aWz55Sf5b6SIDwgam9zZWl0b1wgOwor5Lme5am/IDwga29pbXVrb1wgOwor6JmO54eV5ouzIDwga29lbmtlblwgOwor6aC45qSOIDwga2VpdHN1aVwgOwor6LKs5Lu7IDwgc2VraW5pblwgOwor6aGU5paZIDwgZ2FucnlvdVwgOwor5q2j5bi45L2NIDwgc2Vpam91aVwgOwor5pyr5aWzIDwgbWF0c3Vqb1wgOwor5pyx5aKoIDwgc2h1Ym9rdVwgOwor5LiB5pWwIDwgY2hvdXN1dVwgOwor5peX6ImyIDwgaGF0YWlyb1wgOwor6KOc5Yqp6YeRIDwgaG9qb2tpblwgOwor5aWz6ImyIDwgam9zaG9rdVwgOwor5pen6IGeIDwga3l1dWJ1blwgOwor6Zi/5amG5pOmIDwgYWJhenVyZVwgOwor54mH6IK6IDwga2F0YWhhaVwgOwor5pyx5aGXIDwgc2h1bnVyaVwgOwor6aCY5rC0IDwgcnlvdXN1aVwgOwor6Z2i6Ii1IDwgb21va2FqaVwgOwor5Li45bivIDwgbWFydW9iaVwgOwor55C155C26KGMIDwgYml3YWtvdVwgOwor57eP6auYIDwgc291ZGFrYVwgOwor5aOw6YePIDwgc2VpcnlvdVwgOwor5Yqp55Sj5ammIDwgam9zYW5wdVwgOwor5pyn5aScIDwgb2Jvcm95b1wgOwor5aOB6Z2iIDwgaGVraW1lblwgOwor57+w5aKoIDwga2FuYm9rdVwgOwor546E5aaZIDwgZ2VubXlvdVwgOwor5L+u576F5aC0IDwgc2h1cmFiYVwgOwor57645byxIDwgcnVpamFrdVwgOwor5Lmd5aSnIDwga3l1dWRhaVwgOwor5LiJ5oyvIDwgc2Fuc2hpblwgOwor5LiN5oqcIDwgZnViYXRzdVwgOwor5aSn6KmwIDwgb29kenVtZVwgOwor6LGq5ZWGIDwgZ291c2hvdVwgOwor5omL5LiA5p2vIDwgdGVpcHBhaVwgOwor5Lit5bm0IDwgY2h1dW5lblwgOwor5LiA5o+hIDwgaWNoaWFrdVwgOwor5puy5bqHIDwga3lva3VoaVwgOwor6Kqs6KutIDwgc2V0c3V5dVwgOwor54Sh57ea5qmfIDwgbXVzZW5raVwgOwor5Lit5bi9IDwgY2h1dWJvdVwgOwor5pil55ygIDwgc2h1bm1pblwgOwor6aCs5qGBIDwgaG9vZ2V0YVwgOwor5LiH54Gv5LyaIDwgbWFuZG91ZVwgOwor54mn56ulIDwgYm9rdWRvdVwgOwor5p2x5LqsIDwgdG91a3lvdVwgOwor5pys5Zu9IDwgaG9uZ29rdVwgOwor6Kqs6KmxIDwgc2V0c3V3YVwgOwor5LqM5YiXIDwgbmlyZXRzdVwgOwor5LiA5ousIDwgaWtrYXRzdVwgOwor6Z2e6IG3IDwgaGlzaG9rdVwgOwor5pS56YuzIDwga2FpY2h1dVwgOwor54yb5pKDIDwgbW91Z2VraVwgOwor5pWP6YCfIDwgYmluc29rdVwgOwor6aCs5p2WIDwgaG9vZHp1ZVwgOwor5paw6JGXIDwgc2hpbmNob1wgOwor5rC05L2N6KiIIDwgc3VpaWtlaVwgOwor576e5oGlIDwgc2h1dWNoaVwgOwor5Lmd5ZywIDwga3l1dWNoaVwgOwor5piO56K6IDwgbWVpa2FrdVwgOwor57eP6aGNIDwgc291Z2FrdVwgOwor5LqM5YWrIDwgbmloYWNoaVwgOwor5ryi5pa55Yy7IDwga2FucG91aVwgOwor5pmv5rOBIDwga2Vpa3lvdVwgOwor5pel57WmIDwgbmlra3l1dVwgOwor576955uu5p2/IDwgaGFtZWl0YVwgOwor5YW35L2T5qGIIDwgZ3V0YWlhblwgOwor6ZuG6YeRIDwgc2h1dWtpblwgOwor6Zuo6LazIDwgYW1lYXNoaVwgOwor5pqm5pWwIDwgcmVraXN1dVwgOwor5paw6Iy2IDwgc2hpbmNoYVwgOwor6aKo5ZynIDwgZnV1YXRzdVwgOwor57eP6Z2pIDwgc291Z2F3YVwgOwor5Lit5bCKIDwgY2h1dXpvblwgOwor5piO556tIDwgbWVpcnlvdVwgOwor57i36KqsIDwgcnVzZXRzdVwgOwor6ZuG6YWNIDwgc2h1dWhhaVwgOwor5pyI5aSuIDwgZ2V0c3VvdVwgOwor5Lit5a6uIDwgY2h1dWd1dVwgOwor57a/6aO0IDwgd2F0YWFtZVwgOwor5pyI5aScIDwgdHN1a2l5b1wgOwor5pel5pys5YyWIDwgbmlob25rYVwgOwor5LiJ5b6zIDwgc2FudG9rdVwgOwor6Zmw6ayxIDwgaW4nJ3V0c3VcIDsKK+e3kemZsCA8IHJ5b2t1aW5cIDsKK+aVteimliA8IHRla2lzaGlcIDsKK+aUvumAuCA8IGhvdWl0c3VcIDsKK+eglOejqOapnyA8IGtlbm1ha2lcIDsKK+S4iuW9uSA8IHV3YXlha3VcIDsKK+Wil+mhjSA8IHpvdWdha3VcIDsKK+S4gOaBryA8IGhpdG9pa2lcIDsKK+S5s+WJpCA8IG55dXV6YWlcIDsKK+aYjueZvSA8IG1laWhha3VcIDsKK+Wkp+mbkeaKiiA8IG9vemFwcGFcIDsKK+S4i+W6pyA8IHNoaW1vemFcIDsKK+WPpOS6leaIuCA8IGZ1cnVpZG9cIDsKK+S4gOW/tSA8IGljaGluZW5cIDsKK+S4h+W8lSA8IG1hbmJpa2lcIDsKK+iDg+a9sOeYjSA8IGlrYWl5b3VcIDsKK+eJueeUoyA8IHRva3VzYW5cIDsKK+acqOWPoyA8IGtpZ3VjaGlcIDsKK+S4gOW+uSA8IGl0dGV0c3VcIDsKK+mhlOW9uSA8IGthb3lha3VcIDsKK+e/u+WIuyA8IGhvbmtva3VcIDsKK+S4ieW5tCA8IHNhbicnbmVuXCA7Civml6Xnq4sgPCBoaXRhY2hpXCA7CivmlZHosqcgPCBreXV1aGluXCA7Civmlq3ohbggPCBkYW5jaG91XCA7CivmnY/ku4EgPCBreW91bmluXCA7CivkuIflubQgPCBtYW4nJ25lblwgOwor54mp55qEIDwgYnV0dGVraVwgOwor6Zm46aKoIDwgcmlrdWZ1dVwgOwor5aSa576p5oCnIDwgdGFnaXNlaVwgOwor5LiA5byPIDwgaXNzaGlraVwgOwor54q25rOBIDwgam91a3lvdVwgOwor55SY6Zyy54WuIDwga2Fucm9uaVwgOwor5paw6IGeIDwgc2hpbmJ1blwgOwor5pys5YmHIDwgaG9uc29rdVwgOwor5Lit5aSWIDwgY2h1dWdhaVwgOwor5LmZ5aWz5bqnIDwgb3RvbWV6YVwgOwor5aW0562JIDwgeWF0c3VyYVwgOwor54us5patIDwgZG9rdWRhblwgOwor6Kmw6LKsIDwga2lzc2VraVwgOwor6ICQ5LmFIDwgdGFpa3l1dVwgOwor6Zuj6KqtIDwgbmFuZG9rdVwgOwor6aGn5a6iIDwga29reWFrdVwgOwor54us5paHIDwgZG9rdWJ1blwgOwor5L+d5a6I5rS+IDwgaG9zaHVoYVwgOwor5peX56u/IDwgaGF0YXphb1wgOwor6ZyK6JasIDwgcmVpeWFrdVwgOwor5pWZ6KiTIDwga3lvdWt1blwgOwor5LiN5bGIIDwgZnVrdXRzdVwgOwor5pyo5YiAIDwgYm9rdXRvdVwgOwor5paw576FIDwgc2hpcmFnaVwgOwor5aKX6ZW3IDwgem91Y2hvdVwgOwor5pqB5pifIDwgZ3lvdXNlaVwgOwor6Zm66ZujIDwga2VuJyduYW5cIDsKK+WPmeS6i+ipqSA8IGpvamlzaGlcIDsKK+S4iuWxpSA8IHV3YWJha2lcIDsKK+acrOWFgyA8IGhvbm1vdG9cIDsKK+Wkp+aOg+mZpCA8IG9vc291amlcIDsKK+eDj+m+jeiMtiA8IMWrcm9uY2hhXCA7CivkuK3loIUgPCBjaHV1a2VuXCA7CivlpI/ompUgPCBuYXRzdWdvXCA7CivlpbPnjovon7sgPCBqb291YXJpXCA7CivljYrmr43pn7MgPCBoYW5ib2luXCA7CivkuInlsLogPCBzYW5qYWt1XCA7CivlpKnojYkgPCB0ZW5ndXNhXCA7CivmnIjllYYgPCBnZXNzaG91XCA7CivnhKHmlL/lupwgPCBtdXNlaWZ1XCA7CivkuIvlrr8gPCBnZXNodWt1XCA7CivorbDmsbogPCBnaWtldHN1XCA7CivkubHkvZwgPCByYW5zYWt1XCA7CivkuIvlrrYgPCBzaGl0YXlhXCA7CivniZvnl5ggPCBneXV1dG91XCA7CivniannkIYgPCBidXRzdXJpXCA7Civmm7TlnLAgPCBzYXJhY2hpXCA7CivniZvnlqsgPCBneXV1ZWtpXCA7Civnvqnlkozlm6MgPCBnaXdhZGFuXCA7CivmnJ3lh6ogPCBhc2FuYWdpXCA7CivkuIDlsLogPCBpc3NoYWt1XCA7Civni6zmjqIgPCBkb2t1dGFuXCA7Civnt5Hph44gPCByeW9rdXlhXCA7CivkuIPlrp0gPCBzaGlwcG91XCA7Civml6fnm6QgPCBreXV1YmFuXCA7CivoqbPop6MgPCBzaG91a2FpXCA7CivlpZHntIQgPCBrZWl5YWt1XCA7Civpm6PooYwgPCBuYW5neW91XCA7CivmnIjlj44gPCBnZXNzaHV1XCA7Civpm5HoqbEgPCB6YXRzdXdhXCA7Civml6fnm4YgPCBreXV1Ym9uXCA7CivkuIDlrr8gPCBpc3NodWt1XCA7CivnhKHpqqggPCBidWtvdHN1XCA7Civlpb3kuovlrrYgPCBrb3V6dWthXCA7Civlo7LooYwgPCB1cmV5dWtpXCA7CivpoIHmlbAgPCBwxJNqaXN1dVwgOwor5pat57aaIDwgZGFuem9rdVwgOwor6Z+z5puyIDwgb25neW9rdVwgOwor5LiA5a2YIDwgaWNoaXpvblwgOwor5aSV6I+FIDwgeXV1c3VnZVwgOwor5pa9562WIDwgc2hpc2FrdVwgOwor5pel55m9IDwgbmlwcGFrdVwgOwor5aSn6IW4IDwgZGFpY2hvdVwgOwor6KGM54K66ICFIDwga291aXNoYVwgOwor54mi542EIDwgcm91Z29rdVwgOwor54qs5qmHIDwgaW51em9yaVwgOwor5LiO5aWqIDwgeW9kYXRzdVwgOwor5pys5Lq6IDwgaG9uJyduaW5cIDsKK+eGn+irhyA8IGp1a3VkYW5cIDsKK+apn+mWouW6qyA8IGtpa2Fua29cIDsKK+apn+mWouW6pyA8IGtpa2FuemFcIDsKK+eJoeeMqyA8IG9zdW5la29cIDsKK+aZqeaYpSA8IGJhbnNodW5cIDsKK+eLrOaIvyA8IGRva3Vib3VcIDsKK+aWsOexsyA8IHNoaW5tYWlcIDsKK+aWueetliA8IGhvdXNha3VcIDsKK+eKrOanmSA8IGludW1ha2lcIDsKK+acqOS7jyA8IGtpYnV0c3VcIDsKK+aXqeeVqiA8IGhheWFiYW5cIDsKK+acrOS4uCA8IGhvbm1hcnVcIDsKK+aZqeaWuSA8IGJhbmdhdGFcIDsKK+e5ree0rCA8IGtlbmNodXVcIDsKK+mdkuelqCA8IHNlaWh5b3VcIDsKK+eMm+WwhiA8IG1vdXNob3VcIDsKK+WQjOaEj+imiyA8IGRvdWlrZW5cIDsKK+S4iOWkqyA8IG1hc3VyYW9cIDsKK+aciOWIqSA8IGdldHN1cmlcIDsKK+aUueiosyA8IGthaXlha3VcIDsKK+Wil+mHjyA8IHpvdXJ5b3VcIDsKK+mbtuiQvSA8IHJlaXJha3VcIDsKK+S4uOWNgSA8IG1hcnVqdXVcIDsKK+mbhuioiCA8IHNodXVrZWlcIDsKK+ipseihkyA8IHdhanV0c3VcIDsKK+eJneeKrCA8IG1lc3VpbnVcIDsKK+eGn+impyA8IGp1a3VyYW5cIDsKK+eGn+imliA8IGp1a3VzaGlcIDsKK+mdouebriA8IG1lbm1va3VcIDsKK+eFjumNiyA8IGlyaW5hYmVcIDsKK+eOhOS6uiA8IGt1cm91dG9cIDsKK+aWreeusSA8IGRhbmJha29cIDsKK+itsOS6i+WggiA8IGdpamlkb3VcIDsKK+Whq+mamSA8IHRlbmdla2lcIDsKK+S4iuWhlyA8IHV3YW51cmlcIDsKK+S4gOWmgiA8IGljaGlueW9cIDsKK+S4jeWfkiA8IGZ1cmFjaGlcIDsKK+e3iui/qyA8IGtpbnBha3VcIDsKK+S4h+WigyA8IGJhbmt5b3VcIDsKK+irluetliA8IHJvbnNha3VcIDsKK+ios+i8iSA8IHlha3VzYWlcIDsKK+aYjua+hCA8IG1laWNob3VcIDsKK+S4gOWkpyA8IGljaGlkYWlcIDsKK+ipleirliA8IGh5b3Vyb25cIDsKK+iqv+e3tCA8IGNob3VyZW5cIDsKK+S4reWOnyA8IGNodXVnZW5cIDsKK+iqpOiEsSA8IGdvZGF0c3VcIDsKK+iqreiAhSA8IGRva3VzaGFcIDsKK+WjsuiWrCA8IGJhaXlha3VcIDsKK+ixhuS5syA8IHRvdW55dXVcIDsKK+S4gOWjsCA8IGhpdG9rb2VcIDsKK+WkqeezuOeTnCA8IGhlY2hpbWFcIDsKK+S/neWuieaelyA8IGhvYW5yaW5cIDsKK+iFkOiRieWcnyA8IGZ1eW91ZG9cIDsKK+S4i+WcsCA8IHNoaXRhamlcIDsKK+Wil+mAsiA8IHpvdXNoaW5cIDsKK+mdoueWlCA8IG1lbmNob3VcIDsKK+mgguaItCA8IGNob3VkYWlcIDsKK+irlueptiA8IHJvbmt5dXVcIDsKK+aWsOeojiA8IHNoaW56ZWlcIDsKK+a1t+ixmuW6pyA8IGlydWthemFcIDsKK+S4i+WbsyA8IHNoaXRhenVcIDsKK+iHquihm+maiiA8IGppZWl0YWlcIDsKK+aUueihjCA8IGthaWd5b3VcIDsKK+iqnuiEiCA8IGdvbXlha3VcIDsKK+e5iue2ree0oCA8IHNlbicnaXNvXCA7CivkuInlm70gPCBzYW5nb2t1XCA7CivkuKHlkI0gPCByeW91bWVpXCA7Civpmo/ouqsgPCB6dWlzaGluXCA7CivnhKHpm5EgPCBtdXphdHN1XCA7Civnp7vooYzmgKcgPCBpa291c2VpXCA7CivkuK3liY0gPCBjaHV1emVuXCA7CivopqrpuJ4gPCBzaGlucmFuXCA7Civpm7vohLMgPCBkZW4nJ25vdVwgOwor5rmv5rmv5amGIDwgeXV0YW5wb1wgOwor5Lit5YiGIDwgY2h1dWJ1blwgOwor57W26aCCIDwgemV0Y2hvdVwgOwor6aCR5by3IDwgZ2Fua3lvdVwgOwor57mL57ibIDwga2VpYmFrdVwgOwor5aSq57O4IDwgZnV0b2l0b1wgOwor5Lqk5bC+5pyfIDwga291YmlraVwgOwor5aeL5qWtIDwgc2hpZ3lvdVwgOwor5LiA5ZujIDwgaWNoaWRhblwgOwor5pep54afIDwgc291anVrdVwgOwor6KqH6ImyIDwga29zaG9rdVwgOwor6KiX6YCBIDwgdGFrdXNvdVwgOwor6ZuM6JiCIDwgbWVzaGliZVwgOwor6aCG5b+cIDwganVuJydub3VcIDsKK+mZuOmAgSA8IHJpa3Vzb3VcIDsKK+aciOS6iyA8IGdldHN1amlcIDsKK+imqumzpSA8IG95YWRvcmlcIDsKK+eJueautSA8IHRva3VkYW5cIDsKK+S4oeWJjSA8IHJ5b3VtYWVcIDsKK+Wkp+eykiA8IG9vdHN1YnVcIDsKK+iok+i/qiA8IGt1bnRla2lcIDsKK+mZtuejgeWZqCA8IHRvdWppa2lcIDsKK+eJueauiiA8IHRva3VzaHVcIDsKK+Wig+mBhyA8IGt5b3VndXVcIDsKK+ippuiWrCA8IHNoaXlha3VcIDsKK+mHjemmrOWgtCA8IG9tb2JhYmFcIDsKK+ipkOihkyA8IHNhanV0c3VcIDsKK+S4oeWIhiA8IHJ5b3VidW5cIDsKK+ats+aZguiomCA8IHNhaWppa2lcIDsKK+mYv+WkmuemjyA8IG90YWZ1a3VcIDsKK+S4jeWQiSA8IGZ1a2l0c3VcIDsKK+S4iuWRiiA8IGpvdWtva3VcIDsKK+W+oeevgOS7iyA8IG9zZWtrYWlcIDsKK+mZuOi7jSA8IHJpa3VndW5cIDsKK+S6nOm6u+S7geayuSA8IGFtYW5peXVcIDsKK+aWsOebpCA8IHNoaW5iYW5cIDsKK+mfu+W+iyA8IGlucml0c3VcIDsKK+aatOWcpyA8IGJvdWF0c3VcIDsKK+ioseirviA8IGt5b2Rha3VcIDsKK+eIhueglSA8IGJha3VzYWlcIDsKK+S4oeWDjyA8IHJ5b3V6b3VcIDsKK+eLguaFiyA8IGt5b3V0YWlcIDsKK+Wpv+WFpSA8IG11a29pcmlcIDsKK+ios+ipqSA8IHlha3VzaGlcIDsKK+mbouiEsSA8IHJpZGF0c3VcIDsKK+aYh+autSA8IHNob3VkYW5cIDsKK+eJp+awkSA8IGJva3VtaW5cIDsKK+WkqeeqkyA8IHRlbm1hZG9cIDsKK+S4gOWRvSA8IGljaGltZWlcIDsKK+aVmeiCsiA8IGt5b3Vpa3VcIDsKK+S4gOWRsyA8IGhpdG9hamlcIDsKK+WkseemgSA8IHNoaWtraW5cIDsKK+e3j+iplSA8IHNvdWh5b3VcIDsKK+WmmeazlSA8IG15b3Vob3VcIDsKK+imqumqqCA8IG95YWJvbmVcIDsKK+abuOS4rSA8IHNob2NodXVcIDsKK+S4h+WNmiA8IGJhbnBha3VcIDsKK+eVquWwj+WxiyA8IGJhbmdveWFcIDsKK+mfs+W+iyA8IG9ucml0c3VcIDsKK+S4i+WKoyA8IGdlcmV0c3VcIDsKK+aEm+eKrOWutiA8IGFpa2Vua2FcIDsKK+S4ieWKqSA8IHNhbnN1a2VcIDsKK+S4oeS+vyA8IHJ5b3ViZW5cIDsKK+iAvee+jua0viA8IHRhbmJpaGFcIDsKK+aYpeacrCA8IHNodW5wb25cIDsKK+S4g+WNgSA8IG5hbmFqdXVcIDsKK+imv+mdoiA8IHRla2ltZW5cIDsKK+S4h+WKmyA8IG1hbnJpa2lcIDsKK+S4geWNiiA8IGNob3VoYW5cIDsKK+Wkp+emjyA8IGRhaWZ1a3VcIDsKK+WkqeelkCA8IHRlbicneXV1XCA7CivmmKjmmakgPCBzYWt1YmFuXCA7Civkv53ogrLmiYAgPCBob2lrdWpvXCA7CivmmanlubQgPCBiYW4nJ25lblwgOwor54Wn6KanIDwgc2hvdXJhblwgOwor57eK6KaBIDwga2luJyd5b3VcIDsKK+WmqOalrSA8IGJvdWd5b3VcIDsKK+S4oeS6uiA8IHJ5b3VuaW5cIDsKK+ims+mfsyA8IGthbicnbm9uXCA7CivmmYLmipggPCB0b2tpb3JpXCA7CivpgYrpm6Lln7ogPCB5dXVyaWtpXCA7CivmkrDpjLIgPCBzZW5yb2t1XCA7CivkupLliqnkvJogPCBnb2pva2FpXCA7CivmlLnoia8gPCBrYWlyeW91XCA7Civmlr3niakgPCBzZW1vdHN1XCA7Civlpa7mv4AgPCBmdW5nZWtpXCA7CivkuKHkuIkgPCByeW91c2FuXCA7Civpm7vnrpcgPCBkZW5zb3JvXCA7CivntZDpnLIgPCBrZXRzdXJvXCA7CivmlZnnt7QgPCBreW91cmVuXCA7CivkuIrlgbQgPCB1d2FnYXdhXCA7Civlp6bmgqogPCBrYW4nJ2FrdVwgOwor6KOc5Yqp57eaIDwgaG9qb3NlblwgOwor6KeS6YyQIDwga2FrdXN1aVwgOwor57WQ6ZuGIDwga2Vzc2h1dVwgOwor5LiL5YCkIDwgc2hpdGFuZVwgOwor5aWz5rmvIDwgb24nJ25heXVcIDsKK+S4gOWFgyA8IGljaGlnZW5cIDsKK+e+heWIlyA8IHJhcmV0c3VcIDsKK+aaluWbvSA8IGRhbmtva3VcIDsKK+S6i+WLmeaJgCA8IGppbXVzaG9cIDsKK+mZs+isnSA8IGNoaW5zaGFcIDsKK+S4gOWEhCA8IGljaGlva3VcIDsKK+iok+iqrSA8IGt1bmRva3VcIDsKK+eIm+eGnyA8IHJhbmp1a3VcIDsKK+aYjuacnSA8IG1pbmNob3VcIDsKK+iol+iogCA8IHRha3VnZW5cIDsKK+mgmOWfnyA8IHJ5b3Vpa2lcIDsKK+iogOiyrCA8IGdlbnNla2lcIDsKK+S/neitt+mHkSA8IGhvZ29raW5cIDsKK+WkqueZvSA8IHRhaWhha3VcIDsKK+eJueaXqCA8IHRva3VzaGlcIDsKK+WkqeeahyA8IHRlbicnbm91XCA7CivmlbDnp5IgPCBzdXVieW91XCA7CivmlaPnrZYgPCBzYW5zYWt1XCA7CivkuIfkvZwgPCBtYW5zYWt1XCA7CivmmI7mmbAgPCBtZWlzZWtpXCA7CivmmanlraYgPCBiYW5nYWt1XCA7CivmmI7mmakgPCBteW91YmFuXCA7CivkuIDlgI0gPCBpY2hpYmFpXCA7CivntYLpm7sgPCBzaHV1ZGVuXCA7Civml6XmrKcgPCBuaWNoaW91XCA7CivmmI7mmJ8gPCBteW91am91XCA7CivkuInkurogPCBzYW4nJ25pblwgOwor57im56ybIDwgdGF0ZWJ1ZVwgOwor6ZuG576kIDwgc2h1dWd1blwgOwor5LiH5Lq6IDwgbWFuJyduaW5cIDsKK+Wkp+eXhSA8IHRhaWJ5b3VcIDsKK+iPk+WtkOWZqCA8IGthc2hpa2lcIDsKK+mgreWPliA8IHRvdWRvcmlcIDsKK+mbqOesoCA8IGFtYWdhc2FcIDsKK+e4pueptCA8IHRhdGVhbmFcIDsKK+S4gOS7uyA8IGljaGluaW5cIDsKK+Wkp+eUtyA8IG9vb3Rva29cIDsKK+e9sOWJhyA8IGJhc3Nva3VcIDsKK+mch+ebqiA8IHNoaW50b3VcIDsKK+mciueahCA8IHJlaXRla2lcIDsKK+aEm+Wmu+WutiA8IGFpc2Fpa2FcIDsKK+WkluebuCA8IGdhaXNob3VcIDsKK+WkmueZuiA8IHRhaGF0c3VcIDsKK+mbqOepuiA8IGFtYXpvcmFcIDsKK+eEtuirviA8IHplbmRha3VcIDsKK+iprue0oiA8IHNlbnNha3VcIDsKK+aVo+elqCA8IHNhbnB5b3VcIDsKK+mkiueItuavjSA8IHlvdWZ1Ym9cIDsKK+e3tOe/kiA8IHJlbnNodXVcIDsKK+ipleiAhSA8IGh5b3VzaGFcIDsKK+eGn+e3tCA8IGp1a3VyZW5cIDsKK+WklueahCA8IGdhaXRla2lcIDsKK+manOazpeeDj+iziiA8IGFvcmlpa2FcIDsKK+eLrOWWhCA8IGRva3V6ZW5cIDsKK+Wkj+edgCA8IG5hdHN1Z2lcIDsKK+WkqeeQgyA8IHRlbmt5dXVcIDsKK+i1t+mbu+apnyA8IGtpZGVua2lcIDsKK+Wmu+aIuCA8IHRzdW1hZG9cIDsKK+S6jOatu+W+jCA8IG5pc2hpZ29cIDsKK+aWkeeMqyA8IGhhbm15b3VcIDsKK+aZi+WxsSA8IHNoaW56YW5cIDsKK+aXi+avmyA8IHRzdW11amlcIDsKK+WgsemFrCA8IGhvdXNodXVcIDsKK+iRieeJoeS4uSA8IGhhYm90YW5cIDsKK+W3sueEtuW9oiA8IGl6ZW5rZWlcIDsKK+eDiOmchyA8IHJlc3NoaW5cIDsKK+aYpeaDhSA8IHNodW5qb3VcIDsKK+e3rOe+iiA8IG1lbicneW91XCA7CivnuJ/npLwgPCBqb2t1cmVpXCA7CivlpKfnjYQgPCB0YWlnb2t1XCA7Civni4LlpZQgPCBreW91aG9uXCA7CivloqjoibIgPCBzdW1paXJvXCA7Civnt4/oirEgPCBzb3ViYW5hXCA7CivmlabnnaYgPCB0b25ib2t1XCA7CivlpKfopo/mqKEgPCBkYWlraWJvXCA7Civni6zlkJ8gPCBkb2t1Z2luXCA7CivlhbfkvZPljJYgPCBndXRhaWthXCA7CivopobpnaIgPCBmdWt1bWVuXCA7CivnuZTniakgPCBvcmltb25vXCA7Civkv53lronlrpggPCBob2Fua2FuXCA7Civml6fmnaUgPCBreXV1cmFpXCA7Civml6fmnZEgPCBreXV1c29uXCA7Civph47njaPmtL4gPCB5YWp1dWhhXCA7Civni6zljaAgPCBkb2t1c2VuXCA7Civpm7vkvY3lt64gPCBkZW4nJ2lzYVwgOwor5pel5pydIDwgbml0Y2hvdVwgOwor5aaC5pyIIDwgbmlnYXRzdVwgOwor5aSx54K5IDwgc2hpdHRlblwgOwor6ZuR56mAIDwgemFra29rdVwgOwor6KWf6auqIDwgZXJpZ2FtaVwgOwor6Kaq6YeMIDwgb3lhemF0b1wgOwor54Wn6IeoIDwgc2hvdXJpblwgOwor5pep5pilIDwgc291c2h1blwgOwor5pio5bm0IDwgc2FrdW5lblwgOwor5aSp54S2IDwgdGVuJyduZW5cIDsKK+WlpeanmCA8IG9rdXNhbWFcIDsKK+aXpeaZgiA8IG5pY2hpamlcIDsKK+e3keiCpSA8IHJ5b2t1aGlcIDsKK+mdnuWvvuW/nCA8IGhpdGFpb3VcIDsKK+iTlum6u+WtkCA8IGhpbWFzaGlcIDsKK+ijuOS9k+eUuyA8IHJhdGFpZ2FcIDsKK+mgmOWGhSA8IHJ5b3VuYWlcIDsKK+S6i+WLmeWumCA8IGppbXVrYW5cIDsKK+mbu+eQgyA8IGRlbmt5dXVcIDsKK+eJh+aWuSA8IGthdGFob3VcIDsKK+ios+iAhSA8IHlha3VzaGFcIDsKK+eJueW+hSA8IHRva3V0YWlcIDsKK+i1t+iotOeKtiA8IGtpc29qb3VcIDsKK+iln+mmliA8IGVyaWt1YmlcIDsKK+WlquagvCA8IGRha2tha3VcIDsKK+mHjuaarueUqCA8IHlhYm95b3VcIDsKK+aVteeKtiA8IHRla2lqb3VcIDsKK+aSg+mAgCA8IGdla2l0YWlcIDsKK+eEoeeBr+eBqyA8IG11dG91a2FcIDsKK+mbo+eZliA8IG5hbmt1c2VcIDsKK+aYpeW1kCA8IHNodW5yYW5cIDsKK+ilsumbtyA8IHNodXVyYWlcIDsKK+WmmeaJgCA8IG15b3VzaG9cIDsKK+aYjuW+syA8IG1laXRva3VcIDsKK+mbo+eXhyA8IG5hbnNob3VcIDsKK+mbo+eXhSA8IG5hbmJ5b3VcIDsKK+eEoeihgCA8IG11a2V0c3VcIDsKK+eEoeiomOWQjSA8IG11a2ltZWlcIDsKK+aYlOW5tCA8IHNla2luZW5cIDsKK+eCkumjryA8IGNoYWFoYW5cIDsKK+iqmOeIhiA8IHl1dWJha3VcIDsKK+WklueCuiA8IGdhaXRhbWVcIDsKK+mch+eBvSA8IHNoaW5zYWlcIDsKK+aYpeWvkiA8IHNodW5rYW5cIDsKK+eIhuatuyA8IGJha3VzaGlcIDsKK+mDveitsOmBuCA8IHRvZ2lzZW5cIDsKK+e2suiGnCA8IG1vdW1ha3VcIDsKK+eGn+efpSA8IGp1a3VjaGlcIDsKK+aYjuW5tCA8IG15b3VuZW5cIDsKK+Wkqea4myA8IHRlbmJpa2lcIDsKK+S/neiCsuWckiA8IGhvaWt1ZW5cIDsKK+WnieWpvyA8IGFuZW11a29cIDsKK+e1gui7iiA8IHNodXVzaGFcIDsKK+eyvum6piA8IHNlaWJha3VcIDsKK+eGn+edoSA8IGp1a3VzdWlcIDsKK+e4q+eJqSA8IG51aW1vbm9cIDsKK+e3iue4myA8IGtpbmJha3VcIDsKK+eGn+ecoCA8IGp1a3VtaW5cIDsKK+S/neiCsuWZqCA8IGhvaWt1a2lcIDsKK+WiqOezuCA8IHN1bWlpdG9cIDsKK+mZsOiGsyA8IGthZ2V6ZW5cIDsKK+ipqeeahCA8IHNoaXRla2lcIDsKK+aYn+WtpiA8IHNlaWdha3VcIDsKK+aEm+WlveWutiA8IGFpa291a2FcIDsKK+mdkuaYpSA8IHNlaXNodW5cIDsKK+aah+S6uiA8IGhpbWFqaW5cIDsKK+mfs+WKmyA8IG9ucnlva3VcIDsKK+eCuumKgCA8IHRhbWVnaW5cIDsKK+iok+iCsiA8IGt1bicnaWt1XCA7CivlpaXmlrkgPCBva3VnYXRhXCA7Civni6nkurogPCBrYXJ5dWRvXCA7CivntK/pgLIgPCBydWlzaGluXCA7CivnhLzoiosgPCB5YWtpaW1vXCA7Civlp5Tku7vnirYgPCBpbmluam91XCA7Civpmaroh6MgPCBiYWlzaGluXCA7CivniafluKsgPCBib2t1c2hpXCA7CivlvqHmiqvpnLLnm64gPCBvaGlyb21lXCA7CivmlrDmoYggPCBzaGluJydhblwgOwor6ZqO57SaIDwga2Fpa3l1dVwgOwor54m55a6aIDwgdG9rdXRlaVwgOwor55So5Zmo55S7IDwgeW91a2lnYVwgOwor5pio5aSVIDwgc2FrdXl1dVwgOwor6Zq755y8IDwgc2VraWdhblwgOwor5L+d6aSK5omAIDwgaG95b3Vqb1wgOwor5a625bqt56eRIDwga2F0ZWlrYVwgOwor5aKX57WmIDwgem91a3l1dVwgOwor5LiN5ZCN6KqJIDwgZnVtZWl5b1wgOwor5pen5oKqIDwga3l1dWFrdVwgOwor5pWw5ru0IDwgc3V1dGVraVwgOwor57a+57W5IDwgYXlhZ2ludVwgOwor57Si6YGTIDwgc2FrdWRvdVwgOwor57WQ6KqeIDwga2V0c3Vnb1wgOwor5aWz5omLIDwgb24nJ25hZGVcIDsKK+eGseeLgiA8IG5la2t5b3VcIDsKK+Wls+aIvyA8IG55b3Vib3VcIDsKK+Wklua1tyA8IHNvdG91bWlcIDsKK+Wkp+assiA8IHRhaXlva3VcIDsKK+e1kOiolyA8IGtldHRha3VcIDsKK+WkluaziiA8IGdhaWhha3VcIDsKK+imhui8qiA8IGZ1a3VyaW5cIDsKK+aVtOa1gSA8IHNlaXJ5dXVcIDsKK+mgguS4iiA8IGNob3Vqb3VcIDsKK+S6lOi8quaXlyA8IGdvcmlua2lcIDsKK+eGseeHlyA8IGF0c3VrYW5cIDsKK+aXpeW9kyA8IGhpYXRhcmlcIDsKK+ezoOmbqCA8IG51a2FhbWVcIDsKK+aXp+W8iiA8IGt5dXVoZWlcIDsKK+eJueWkpyA8IHRva3VkYWlcIDsKK+imquiosSA8IG95YW1vdG9cIDsKK+aYpeWdiiA8IGhhcnVib3VcIDsKK+S9nOalreihoyA8IHNhZ3lvdWlcIDsKK+ipq+eKtiA8IHdhYmlqb3VcIDsKK+mbu+a1gSA8IGRlbnJ5dXVcIDsKK+acqOaIuOmKrSA8IGtpZG9zZW5cIDsKK+eJueWjsiA8IHRva3ViYWlcIDsKK+iAs+S4i+iFuiA8IGppa2FzZW5cIDsKK+eEoeiJsiA8IG11c2hva3VcIDsKK+irluaVtSA8IHJvbnRla2lcIDsKK+WutuW6reedgCA8IGthdGVpZ2lcIDsKK+mbgOeQgyA8IGphbmt5dXVcIDsKK+aWh+anmCA8IG1vbicneW91XCA7CivlpKfmpa0gPCB0YWlneW91XCA7Civml4XmiYAgPCB0YWJpc2hvXCA7Civns7jpi7ggPCBpdG9ub2tvXCA7CivlpJbpmbDpg6ggPCBnYWlpbmJ1XCA7CivnibnloLEgPCB0b2t1aG91XCA7Civmlofmpb0gPCBidW5yYWt1XCA7CivnhKHohbAgPCBtdWdvc2hpXCA7CivpnaLlvbEgPCBvbW9rYWdlXCA7CivnhZnnqoEgPCBlbnRvdHN1XCA7CivlopPnqbQgPCBib2tldHN1XCA7Civlkozoj5PlrZAgPCB3YWdhc2hpXCA7Civoqr/mm7ggPCBjaG91c2hvXCA7CivpnanluK8gPCBrYXdhb2JpXCA7Civml4XmhIEgPCByeW9zaHV1XCA7Civoh6rlnKjnlLsgPCBqaXphaWdhXCA7Civop6PohLEgPCBnZWRhdHN1XCA7CivmmLzliY0gPCBoaXJ1bWFlXCA7Civntprnt6ggPCB6b2t1aGVuXCA7CivogJXpgYvmqZ8gPCBrb3V1bmtpXCA7CivnhrHmvJQgPCBuZXRzdWVuXCA7Civpm6rmtJ4gPCBib25ib3JpXCA7Civnt4/nnaMgPCBzb3V0b2t1XCA7CivkuIDlm57lv4wgPCBpa2thaWtpXCA7CivplpPpmpkgPCBrYW5nZWtpXCA7CivkuI3lj6/op6MgPCBmdWtha2FpXCA7CivpnbTlsYsgPCBrdXRzdXlhXCA7Civmlo7mnI0gPCBzYWlmdWt1XCA7Civml6flsYUgPCBreXV1a3lvXCA7CivkuI3lj6/oppYgPCBmdWthc2hpXCA7CivlpKfmnKggPCB0YWlib2t1XCA7Civln47pg60gPCBqb3VrYWt1XCA7CivpmbjnqLIgPCByaWt1dG91XCA7Civnt4/nkIblupwgPCBzb3VyaWZ1XCA7CivlpLHmlawgPCBzaGlra2VpXCA7CivplovpmbMgPCBrYWljaGluXCA7CivlpLHmlZcgPCBzaGlwcGFpXCA7CivlpYfmipwgPCBraWJhdHN1XCA7CivkuozliIbmnKggPCBuaWJ1bmdpXCA7CivlpLHmlL8gPCBzaGlzc2VpXCA7CivoqI7nqbYgPCB0b3VreXV1XCA7CivpnIrmn6kgPCByZWlreXV1XCA7Civoqq3mnKwgPCBkb2t1aG9uXCA7CivpmLLoh60gPCBib3VzaHV1XCA7Civoqq3mm7ggPCBkb2t1c2hvXCA7Civniq/kurogPCBoYW4nJ25pblwgOwor5aWl5bqtIDwgb2t1bml3YVwgOwor5aaK5aigIDwgbmluc2hpblwgOwor5aWl5bqVIDwgb2t1em9rb1wgOwor54mn5ZywIDwgYm9rdWNoaVwgOwor5bqD6L6e6IuRIDwga291amllblwgOwor57eo54mpIDwgYW1pbW9ub1wgOwor5aSp5pW1IDwgdGVudGVraVwgOwor6ZyK5pyoIDwgcmVpYm9rdVwgOwor5aSc5puyIDwgeWFreW9rdVwgOwor57eP55S7IDwgc291a2FrdVwgOwor5aSa5pWw5rS+IDwgdGFzdXVoYVwgOwor6Zmj56ygIDwgamluZ2FzYVwgOwor6ZqG55ubIDwgcnl1dXNlaVwgOwor6KmV54K5IDwgaHlvdXRlblwgOwor5L+d6K236ICFIDwgaG9nb3NoYVwgOwor5aSc6ZaT6YOoIDwgeWFrYW5idVwgOwor5paH5pWZIDwgYnVua3lvdVwgOwor55WZ5a6I6Zu7IDwgcnVzdWRlblwgOwor5aSJ5qKDIDwgaGVudGVrb1wgOwor57Gz6bqmIDwgYmVpYmFrdVwgOwor57Sw6J66IDwga2lzaGFnb1wgOwor54ax5rCXIDwgbmV0c3VrZVwgOwor5pio5YasIDwgc2FrdXRvdVwgOwor5pil5YiGIDwgc2h1bmJ1blwgOwor6ZW36ZuoIDwgbmFnYWFtZVwgOwor5pen5aWXIDwga3l1dXRvdVwgOwor6Kqe5pyrIDwgZ29tYXRzdVwgOwor57On6YGTIDwgcnlvdWRvdVwgOwor5o6D6Zmk5qmfIDwgc291amlraVwgOwor6KWf6LazIDwgZXJpYXNoaVwgOwor6Ky55ZGKIDwga2lua29rdVwgOwor5LqL5YuZ5LyaIDwgamltdWthaVwgOwor5pat5b+1IDwgZGFuJyduZW5cIDsKK+aXpeWknCA8IG5pY2hpeWFcIDsKK+aXpeWklSA8IG5pc3Nla2lcIDsKK+aYpeWFiSA8IHNodW5rb3VcIDsKK+aUvua1gSA8IGhvdXJ5dXVcIDsKK+mch+aXpiA8IHNoaW50YW5cIDsKK+WlpeWxsSA8IG9rdXlhbWFcIDsKK+mdmeWvgiA8IHNlaWpha3VcIDsKK+S6i+WJjeW+jCA8IGppemVuZ29cIDsKK+iPqeaPkOaouSA8IGJvZGFpanVcIDsKK+eBq+mJoiA8IGhpYmFjaGlcIDsKK+e1tue4gSA8IHpldHN1ZW5cIDsKK+WkleaWuSA8IHl1dWdhdGFcIDsKK+eyl+mjnyA8IHNvc2hva3VcIDsKK+iyneeLrOalvSA8IGJhaWdvbWFcIDsKK+Wig+ebriA8IHNha2FpbWVcIDsKK+eEoemYsuWCmSA8IG11Ym91YmlcIDsKK+S4jeaAneitsCA8IGZ1c2hpZ2lcIDsKK+aXheWuoiA8IHJ5b2tha3VcIDsKK+S4jeepj+W9kyA8IGZ1b250b3VcIDsKK+aYreS7oyA8IHNob3VkYWlcIDsKK+eEoeethiA8IG11aGl0c3VcIDsKK+WkseaFiyA8IHNoaXR0YWlcIDsKK+e1kOiFuCA8IGtldGNob3VcIDsKK+eJueWFuCA8IHRva3V0ZW5cIDsKK+WPr+WhkeadkCA8IGthc296YWlcIDsKK+WkseaEjyA8IHNoaXRzdWlcIDsKK+eIhuW8viA8IGJha3VkYW5cIDsKK+eJueWFjSA8IHRva3VtZW5cIDsKK+aUr+a1gSA8IHNoaXJ5dXVcIDsKK+aPmumZuCA8IHlvdXJpa3VcIDsKK+imquiIuSA8IG95YWJ1bmVcIDsKK+mZuOeUoyA8IHJpa3VzYW5cIDsKK+mZuOeUnyA8IHJpa3VzZWlcIDsKK+mdouWjgSA8IG1lbnBla2lcIDsKK+aOoumzpSA8IHRhbmNob3VcIDsKK+e0hOiogCA8IHlha3VnZW5cIDsKK+ais+e2v+apnyA8IHNvbWVua2lcIDsKK+eyl+mbkSA8IHNvemF0c3VcIDsKK+eEoeaJi+mghiA8IG11dGVqdW5cIDsKK+mbu+aSgyA8IGRlbmdla2lcIDsKK+aVmeabuCA8IGt5b3VzaG9cIDsKK+mWk+i/kSA8IG1hZGppa2FcIDsKK+aWsOWxhSA8IHNoaW5reW9cIDsKK+e0uuiJsiA8IGtvbicnaXJvXCA7Civntpnnm64gPCB0c3VnaW1lXCA7Civpm7fmkoMgPCByYWlnZWtpXCA7CivlsL7nirboirEgPCBiaWpvdWthXCA7Civlob7nlJ8gPCBqdWt1c2VpXCA7Civoqr/lvKYgPCBjaG91Z2VuXCA7Civnh4PmlpkgPCBuZW5yeW91XCA7CivpmqDmu4UgPCBpbm1ldHN1XCA7CivlpKfmga8gPCB0YWlzb2t1XCA7Civpm4bmqKkgPCBzaHV1a2VuXCA7Civkvr/liKnlsYsgPCBiZW5yaXlhXCA7CivplovpgJogPCBrYWl0c3V1XCA7CivpmaPnl5sgPCBqaW50c3V1XCA7CivlpJbmiJogPCBnYWlzZWtpXCA7CivntrLnjJ8gPCBhbWlyeW91XCA7CivmlbXmiYsgPCB0ZWtpc2h1XCA7CivlpKflvrMgPCBkYWl0b2t1XCA7Civpm6Lml6UgPCByaW5pY2hpXCA7Civnsr7pgLIgPCBzaG91amluXCA7Civkuojnn6XlpKIgPCB5b2NoaW11XCA7Civnsr7pgJogPCBzZWl0c3V1XCA7CivnhYnnjYQgPCByZW5nb2t1XCA7CivlvqHnpZ7nsaQgPCBvbWlrdWppXCA7Civoq7jlm70gPCBzaG9rb2t1XCA7Civml6flkI0gPCBreXV1bWVpXCA7CivmmKDlhpnmqZ8gPCBlaXNoYWtpXCA7Civpm6PmlbUgPCBuYW50ZWtpXCA7Civkv53orbfnqI4gPCBob2dvemVpXCA7CivngJ3pnZIgPCByZWtpc2VpXCA7Civlj5nkuovmlocgPCBqb2ppYnVuXCA7Civml6flj4sgPCBreXV1eXV1XCA7CivntZDnuIEgPCBrZWNoaWVuXCA7Civoop7pvo0gPCBrb25yeW91XCA7CivmlrDlqZogPCBzaGlua29uXCA7Civoi7HkvJroqbEgPCBlaWthaXdhXCA7CivmloflvLEgPCBidW5qYWt1XCA7Civml6Xlj44gPCBuaXNzaHV1XCA7CivkuI3lj6/og70gPCBmdWthbm91XCA7Civpm5HmnKggPCB6b3Vib2t1XCA7CivoqqzlvpcgPCBzZXR0b2t1XCA7CivmmKDnlLvppKggPCBlaWdha2FuXCA7CivpnZblm70gPCBzZWlrb2t1XCA7CivlpKnluZUgPCB0ZW5tYWt1XCA7CivplrLopqcgPCBldHN1cmFuXCA7Civpnanlkb0gPCBrYWt1bWVpXCA7CivnuZTluIMgPCBzaG9rdWZ1XCA7Civml6XljbAgPCBuaWNoaWluXCA7CivnuYrlvLEgPCBzZW5qYWt1XCA7CivntLDohZUgPCBob3NvdWRlXCA7Civpm7bmiKYgPCB6ZXJvc2VuXCA7CivopprogIUgPCBrYWt1c2hhXCA7CivntYTnuZQgPCBzb3NoaWtpXCA7CivorKzkvJ0gPCBieXV1ZGVuXCA7Civoqpjmg5EgPCB5dXV3YWt1XCA7CivniafkurogPCBib2t1amluXCA7CivplbfovrogPCBjaG91aGVuXCA7CivpnIrlu58gPCByZWlieW91XCA7Civoqa7mlrkgPCBzZW5rYXRhXCA7CivniYfliY0gPCBrYXRhbWFlXCA7Civpoqjpm7LlhZAgPCBmdXV1bmppXCA7CivlnoLov7kgPCBzdWlqYWt1XCA7CivloqjmsYEgPCBib2t1anV1XCA7CivmlLnmmqYgPCBrYWlyZWtpXCA7CivpmKrnpZ4gPCBoYW5zaGluXCA7CivmlbXlvL4gPCB0ZWtpZGFuXCA7CivploDot6EgPCBtb256ZWtpXCA7Civnspfph5EgPCBhcmFnYW5lXCA7CivopqrnsbMgPCBzaGluYmVpXCA7CivmlY/mjbcgPCBiaW5zaG91XCA7CivniYjlhYMgPCBoYW5tb3RvXCA7CivmpZXlhoblvaIgPCBkYWVua2VpXCA7Civopovnv5IgPCBtaW5hcmFpXCA7CivmlrDlnLAgPCBzaGluY2hpXCA7CivmlL7mk7IgPCBob3V0ZWtpXCA7CivmvJTlpY/lrrYgPCBlbnNvdWthXCA7CivmlbfluIMgPCBzaGlraWZ1XCA7CivniZvkuLwgPCBneXV1ZG9uXCA7Civop5Lnm4YgPCBrYWt1Ym9uXCA7CivoqZTmm7ggPCBzaG91c2hvXCA7CivlpKflraYgPCBkYWlnYWt1XCA7Civlj6/loZHmgKcgPCBrYXNvc2VpXCA7Civlo4Hmnb8gPCBrYWJlaXRhXCA7CivooqvpmaTmlbAgPCBoaWpvc3V1XCA7CivmloflraYgPCBidW5nYWt1XCA7CivmlLvmkoMgPCBrb3VnZWtpXCA7CivkuozmrKHlhYMgPCBuaWppZ2VuXCA7Civnt5HmqLkgPCByeW9rdWp1XCA7CivniKrljbAgPCB0c3VtZWluXCA7CivmiYvmlofluqsgPCB0ZWJ1bmtvXCA7Civml6fkvosgPCBreXV1cmVpXCA7Civns57onb8gPCBrdXNvYmFlXCA7CivkuIDnrofmiYAgPCBpa2thc2hvXCA7CivkuojlgpnpmoogPCB5b2JpdGFpXCA7CivnlpHllY/nrKYgPCBnaW1vbmZ1XCA7CivnuZTlp6sgPCBvcmloaW1lXCA7CivntIXoibIgPCBiZW5paXJvXCA7CivpmbjmtbcgPCByaWt1a2FpXCA7CivntYLnq68gPCBzaHV1dGFuXCA7Civop5LnlaogPCBrYWRvYmFuXCA7Civlm7rlrprosrsgPCBrb3RlaWhpXCA7Civnsr7oqq0gPCBzZWlkb2t1XCA7CivnuZTlpbMgPCBzaG9rdWpvXCA7Civml6Xku5ggPCBoaWR6dWtlXCA7CivnhrHmhJsgPCBuZXRzdWFpXCA7CivlooPmtq8gPCBreW91Z2FpXCA7CivpnJzlpJwgPCBzaGltb3lvXCA7CivlpbPlgpEgPCBqb2tldHN1XCA7CivlpKnlpbMgPCB0ZW4nJ255b1wgOwor6KeS55O2IDwga2FrdWJpblwgOwor57Sh57i+IDwgYm91c2VraVwgOwor5pen5Li7IDwga3l1dXNodVwgOwor5aSn5aWzIDwgb29vbicnbmFcIDsKK+aVteWvviA8IHRla2l0YWlcIDsKK+ioiOa4rCA8IGtlaXNva3VcIDsKK+aWsOWTgSA8IHNoaW5waW5cIDsKK+aYjuayu+W6pyA8IG1laWppemFcIDsKK+eQhuaDs+WutiA8IHJpc291a2FcIDsKK+eEoeeGsSA8IG11bmV0c3VcIDsKK+Wcn+Wjh+WgtCA8IGRvdGFuYmFcIDsKK+S6jOasoeS8miA8IG5pamlrYWlcIDsKK+e3j+ahkCA8IHNvdWdpcmlcIDsKK+irluWRiiA8IHJvbmtva3VcIDsKK+eGseW/gyA8IG5lc3NoaW5cIDsKK+WlieWRiiA8IGhvdWtva3VcIDsKK+WkseWcsCA8IHNoaXRjaGlcIDsKK+e+qeWLmeaEnyA8IGdpbXVrYW5cIDsKK+aVsOWtpiA8IHN1dWdha3VcIDsKK+aSg+eglSA8IGdla2lzYWlcIDsKK+iqreWjsiA8IHlvbWl1cmlcIDsKK+aOmOmRvyA8IGt1c3Nha3VcIDsKK+mbueWusyA8IGh5b3VnYWlcIDsKK+e3j+afhCA8IHNvdWdhcmFcIDsKK+mciuWmmSA8IHJlaW15b3VcIDsKK+S4ieWPiei3ryA8IHNhbnNhcm9cIDsKK+WkieWuuSA8IGhlbicneW91XCA7Civml4Xlg6cgPCB0YWJpc291XCA7Civnhp/mha4gPCBqdWt1cnlvXCA7Civngo7oibIgPCBlbnNob2t1XCA7CivoqLPmnKwgPCB5YWt1aG9uXCA7Civloqjmm7ggPCBib2t1c2hvXCA7CivntJvns74gPCBmdW5reXV1XCA7Civmjqjph48gPCBzdWlyeW91XCA7Civmkp7nkIMgPCBkb3VreXV1XCA7CivlpJnlpJwgPCBzaHVrdXlhXCA7CivnhrHluqYgPCBuZXRzdWRvXCA7CivpnIflpK4gPCBzaGluJydvdVwgOwor5rOi5biD6Iy2IDwgaGFidWNoYVwgOwor57Sv56mNIDwgcnVpc2VraVwgOwor6KOP6YeYIDwgdXJha3VnaVwgOwor6KOP6YeRIDwgdXJhZ2FuZVwgOwor5pSq5ouMIDwga2FrdWhhblwgOwor6Zm45qmLIDwgcmlra3lvdVwgOwor6Ki85paHIDwgc2hvdW1vblwgOwor6LWk5ZWE5pyo6bOlIDwgYWthZ2VyYVwgOwor5LiN5oSb5oOzIDwgYnVhaXNvdVwgOwor6Ki65patIDwgc2hpbmRhblwgOwor5aSn5Zu9IDwgdGFpa29rdVwgOwor6Ki75paHIDwgY2h1dW1vblwgOwor57S656KnIDwga29ucGVraVwgOwor5LiA566H5bm0IDwgaWtrYW5lblwgOwor5pS55oKbIDwga2Fpc2h1blwgOwor57W254ShIDwgemV0c3VtdVwgOwor5aSW5aOBIDwgZ2FpaGVraVwgOwor5aGe5rqQIDwgc29rdWdlblwgOwor5aSn5Zi0IDwgb29oYXNoaVwgOwor5paw5YW1IDwgc2hpbnBlaVwgOwor6Kiz5paHIDwgeWFrdWJ1blwgOwor5LqI5YKZ6YeRIDwgeW9iaWtpblwgOwor5o6b6YeRIDwga2FrZWtpblwgOwor5pWX5bCGIDwgaGFpc2hvdVwgOwor5o6o6YCyIDwgc3Vpc2hpblwgOwor6ZuE5b+DIDwgeXV1c2hpblwgOwor5pW15aGBIDwgdGVraXJ1aVwgOwor57ay5qOaIDwgYW1pZGFuYVwgOwor6Zm45qOaIDwgcmlrdWhvdVwgOwor5LiN5Y+v55+lIDwgZnVrYWNoaVwgOwor5Zu96aKoIDwga29rdWZ1dVwgOwor6ZqG5pu/IDwgcnl1dXRhaVwgOwor57ea5o+PIDwgc2VuYnlvdVwgOwor6Kq/5ZCIIDwgY2hvdWdvdVwgOwor6I+p5o+Q5a+6IDwgYm9kYWlqaVwgOwor56Gr6buE5bGxIDwgaW91eWFtYVwgOwor6Zmw5qW1IDwgaW5reW9rdVwgOwor5aSP5aC0IDwgbmF0c3ViYVwgOwor57Sg5Zug5pWwIDwgc29pbnN1dVwgOwor6KSH6KO9IDwgZnVrdXNlaVwgOwor5aSW5ZynIDwgZ2FpYXRzdVwgOwor5LuP6Jit6KW/IDwgZnVyYW5zdVwgOwor54af5bm0IDwganVrdW5lblwgOwor57WQ55CDIDwga2Vra3l1dVwgOwor5aSW5Zu9IDwgZ2Fpa29rdVwgOwor5o6l6L6eIDwgc2V0c3VqaVwgOwor5LiN5ZCI55CGIDwgZnVnb3VyaVwgOwor57K+6JaEIDwgc2VpaGFrdVwgOwor5o6D6Zmk5ammIDwgc291amlmdVwgOwor5o2V6aOfIDwgaG9zaG9rdVwgOwor5pW15Zu9IDwgdGVra29rdVwgOwor6YeO5pqu5aSpIDwgeWFib3RlblwgOwor5aSJ5Z+fIDwgaGVuJydpa2lcIDsKK+S/neitt+WnlOWToSA8IGhvZ29paW5cIDsKK+mZveaapiA8IHlvdXJla2lcIDsKK+WutuWFt+etiSA8IGthZ3V0b3VcIDsKK+Wkp+WQjSA8IGRhaW15b3VcIDsKK+iWlOiWh+iJsiA8IGJhcmFpcm9cIDsKK+WbvembuyA8IGtva3VkZW5cIDsKK+Wkp+WPoyA8IG9vZ3VjaGlcIDsKK+S4jeaEieW/qyA8IGZ1eXVrYWlcIDsKK+i+suapn+WFtyA8IG5vdWtpZ3VcIDsKK+WbvemboyA8IGtva3VuYW5cIDsKK+i8uOmAgeiyuyA8IHl1c291aGlcIDsKK+m9siA8IG11c2hpYmFcIDsKK+mZveaYpSA8IHlvdXNodW5cIDsKK+eci+itt+WppiA8IGthbmdvZnVcIDsKK+WbvemamyA8IGtva3VzYWlcIDsKK+e0i+eroCA8IG1vbnNob3VcIDsKK+WcsOmBkyA8IGppbWljaGlcIDsKK+imqueOiSA8IG95YWRhbWFcIDsKK+W+oeelnueBqyA8IGdvamlua2FcIDsKK+aVheWunyA8IGtvaml0c3VcIDsKK+WbvemYsiA8IGtva3Vib3VcIDsKK+aUvuWwvyA8IGhvdW55b3VcIDsKK+aWh+WNmiA8IGJ1bmhha3VcIDsKK+S6iOWCmei7jSA8IHlvYmlndW5cIDsKK+aTr+aWpSA8IGhpbnNla2lcIDsKK+e4ruWbsyA8IHNodWt1enVcIDsKK+mWk+iGnCA8IGthbm1ha3VcIDsKK+Wkp+WKmyA8IGRhaXJpa2lcIDsKK+aOqOizniA8IHN1aXNob3VcIDsKK+a/gOmXmCA8IGdla2l0b3VcIDsKK+WkluWRqCA8IGdhaXNodXVcIDsKK+WPpOaWh+abuCA8IGtvbW9uam9cIDsKK+WbsOmboyA8IGtvbicnbmFuXCA7CivnuKblnZEgPCB0YXRla291XCA7CivntabmupAgPCBreXV1Z2VuXCA7CivpnLLku48gPCByb2Z1dHN1XCA7Civoh6rooZvmqKkgPCBqaWVpa2VuXCA7CivoqqHlkYogPCBrYWlrb2t1XCA7CivlnLDou7ggPCBjaGlqaWt1XCA7CivlpKflh7YgPCBkYWlreW91XCA7CivptqsgPCB0c3VndW1pXCA7CivopoHnm64gPCB5b3Vtb2t1XCA7CivntYTniYggPCBrdW1paGFuXCA7CivnuZTlhYMgPCBvcmltb3RvXCA7CivopZ/nq6AgPCBlcmlzaG91XCA7CivptaQgPCBpa2FydWdhXCA7Civpm5vlo4cgPCBoaW5hZGFuXCA7CivptYYgPCBjaGlkb3JpXCA7CivntJTnnJ8gPCBqdW5zaGluXCA7CivpmrflsZ4gPCByZWl6b2t1XCA7CivmlpzkuqQgPCBoYXN1a2FpXCA7CivnuYHliocgPCBoYW5nZWtpXCA7CivnhanmgqkgPCBib24nJ25vdVwgOwor5aOy5Zu9IDwgYmFpa29rdVwgOwor57SU55uKIDwganVuJydla2lcIDsKK+aWmeS6rSA8IHJ5b3V0ZWlcIDsKK+e3nuW4syA8IGRvbmNob3VcIDsKK+mwmCA8IG11cm9hamlcIDsKK+aVteWLoiA8IHRla2l6ZWlcIDsKK+ihqOmdoiA8IGh5b3VtZW5cIDsKK+mVt+iKiyA8IG5hZ2FpbW9cIDsKK+e0lOeZvSA8IGp1bnBha3VcIDsKK+mvsyA8IHN1a2Vzb3VcIDsKK+mYsuavkiA8IGJvdWRva3VcIDsKK+aVsOWMuSA8IHN1dWhpa2lcIDsKK+mbu+WNkyA8IGRlbnRha3VcIDsKK+e1gueCuSA8IHNodXV0ZW5cIDsKK+e3iuaApSA8IGtpbmt5dXVcIDsKK+aVteWJjSA8IHRla2l6ZW5cIDsKK+WkleWHqiA8IHl1dW5hZ2lcIDsKK+WQiOawo+mBkyA8IGFpa2lkb3VcIDsKK+e5muS5sSA8IHJ5b3VyYW5cIDsKK+e4hOWiqCA8IGpvdWJva3VcIDsKK+msmCA8IGthdHN1cmFcIDsKK+imqua9riA8IG95YXNoaW9cIDsKK+eCueeBq+WZqCA8IHRlbmtha2lcIDsKK+ijnOihgCA8IGhva2V0c3VcIDsKK+ims+a4rCA8IGthbnNva3VcIDsKK+eFruW5siA8IG5pYm9zaGlcIDsKK+e2seaJiyA8IHRzdW5hZGVcIDsKK+mZuOaIpiA8IHJpa3VzZW5cIDsKK+e+veS6jOmHjSA8IGhhYnV0YWVcIDsKK+mbhuWhtSA8IHNodXVqaW5cIDsKK+imj+a6luWMliA8IGtpanVua2FcIDsKK+malOW5tCA8IGtha3VuZW5cIDsKK+mrmOW6puW3riA8IGtvdWRvc2FcIDsKK+eEoeacrSA8IG11c2F0c3VcIDsKK+eEoeaciCA8IG11Z2V0c3VcIDsKK+eGseWUsSA8IG5lc3Nob3VcIDsKK+WvhOS7mOmHkSA8IGtpZnVraW5cIDsKK+aWieS4gCA8IHNlaWl0c3VcIDsKK+eBq+WPo+a5liA8IGtha291a29cIDsKK+Wil+W8tyA8IHpvdWt5b3VcIDsKK+mZuuaCqiA8IGtlbicnYWt1XCA7CivplbfogIEgPCBjaG91cm91XCA7CivmlL/msrvlsYsgPCBzZWlqaXlhXCA7CivooYzpoK0gPCBneW91dG91XCA7CivlgIvjgIXkurogPCBrb2tvamluXCA7CivpmqDlr4YgPCBvbm1pdHN1XCA7CivpnI3kubEgPCBrYWt1cmFuXCA7Civlm73pgZMgPCBrb2t1ZG91XCA7CivntZDmsLcgPCBrZXBweW91XCA7Civpm4blm6MgPCBzaHV1ZGFuXCA7CivmlL/msrvlrrYgPCBzZWlqaWthXCA7Civlm73pgKMgPCBrb2t1cmVuXCA7CivpgYvllrbosrsgPCB1bicnZWloaVwgOwor6Zmz5oOFIDwgY2hpbmpvdVwgOwor54Gr5664IDwgaGliYXNoaVwgOwor6J2m5aS36I+KIDwgZXpvZ2lrdVwgOwor5aOy5Y2cIDwgYmFpYm9rdVwgOwor5pWX5YyXIDwgaGFpYm9rdVwgOwor5aKX5bmFIDwgem91ZnVrdVwgOwor5L+d6K235p6XIDwgaG9nb3JpblwgOwor5r2u6aiSIDwgc2hpb3NhaVwgOwor5pyo5oi455WqIDwga2lkb2JhblwgOwor57Si54S2IDwgc2FrdXplblwgOwor57a+5biDIDwgYXlhbnVub1wgOwor57KY6IacIDwgbmVubWFrdVwgOwor5pGC55CGIDwgc2V0c3VyaVwgOwor6Zuq5YakIDwgc2V0c3VlblwgOwor5aKo5a6IIDwgYm9rdXNodVwgOwor57KJ6Iy2IDwga29uYWNoYVwgOwor6KeS5p2QIDwga2FrdXphaVwgOwor57WM5q20IDwga2VpcmVraVwgOwor6Zui5YilIDwgcmliZXRzdVwgOwor6ZeY54mbIDwgdG91Z3l1dVwgOwor5pGp5ruFIDwgbWFtZXRzdVwgOwor5Zu96LuNIDwga29rdWd1blwgOwor5r+r6Ke0IDwgcmFuc2hvdVwgOwor5pWZ5YW4IDwga3lvdXRlblwgOwor5Zyw6KGoIDwgY2hpaHlvdVwgOwor5o6o6JasIDwgc3VpeWFrdVwgOwor6Zmz5byBIDwgY2hpbmJlblwgOwor54Ks54e1IDwga290YXRzdVwgOwor6KGM6ZaTIDwgZ3lvdWthblwgOwor6ZaL56uLIDwga2Fpcnl1dVwgOwor5pKe5pyoIDwgc2h1bW9rdVwgOwor5rWF55+l5oG1IDwgYXNhZGppZVwgOwor6ZuR5YuZIDwgemF0c3VtdVwgOwor57Sw5rWBIDwgc2Fpcnl1dVwgOwor6ZuG5ZCIIDwgc2h1dWdvdVwgOwor5Zyw6JyCIDwgamliYWNoaVwgOwor6Z2S6LGM6LGGIDwgYW9lbmRvdVwgOwor6Zm65bO7IDwga2Vuc2h1blwgOwor6KGX6YyyIDwgZ2Fpcm9rdVwgOwor5aWz5LiI5aSrIDwgam9qb3VidVwgOwor5YaG6KiY5Y+3IDwgZW5raWdvdVwgOwor6ZuR5YmHIDwgemFzc29rdVwgOwor6KOF6JasIDwgc291eWFrdVwgOwor5Zu96LOTIDwga29rdWhpblwgOwor6Zm45bK4IDwgcmlrdWdhblwgOwor5aGX5oq5IDwgdG9tYXRzdVwgOwor6Zm95bCEIDwgaGl6YXNoaVwgOwor6Zai55m9IDwga2FucGFrdVwgOwor54Sm5oWuIDwgc2hvdXJ5b1wgOwor5Lqc5a+S5bivIDwgYWthbnRhaVwgOwor5oyv6Yi0IDwgc2hpbnJlaVwgOwor6ZuR5YW1IDwgem91aHlvdVwgOwor6Zqj5Zu9IDwgcmluZ29rdVwgOwor6ZuA5Y2TIDwgamFudGFrdVwgOwor6Zuq5LitIDwgc2V0Y2h1dVwgOwor5aKo5aCkIDwgYm9rdXRlaVwgOwor6KiX5a6jIDwgdGFrdXNlblwgOwor5pCN55uKIDwgc29uJydla2lcIDsKK+mZo+W5lSA8IGppbm1ha3VcIDsKK+axn+aIuOW3nSA8IGVkb2dhd2FcIDsKK+eBsOeavyA8IGhhaXphcmFcIDsKK+e1kOadnyA8IGtlc3Nva3VcIDsKK+eBsOeZvSA8IGthaWhha3VcIDsKK+imquagqiA8IG95YWthYnVcIDsKK+W5vOWFkOiqniA8IHlvdWppZ29cIDsKK+mOuSA8IGthc3VnYWlcIDsKK+WbveirliA8IGtva3Vyb25cIDsKK+e3keWcnyA8IHJ5b2t1ZG9cIDsKK+a/gOirliA8IGdla2lyb25cIDsKK+aal+aal+ijoSA8IGFuJydhbnJpXCA7CivkuI3mtYTloLQgPCBmdWpvdWJhXCA7CivopoHmsYIgPCB5b3VreXV1XCA7Civpi6kgPCBraXNzYWtpXCA7CivnhrHkuK0gPCBuZXRjaHV1XCA7Civmua/msrvloLQgPCB0b3VqaWJhXCA7Civoo4/ohbkgPCB1cmFoYXJhXCA7CivoqZXliKQgPCBoeW91YmFuXCA7CivntI3mtrwgPCBub3VyeW91XCA7Civlm7PoqqwgPCB6dXNldHN1XCA7CivplpPnlLcgPCBtYW90b2tvXCA7CivmkbrmnKwgPCBzaG91aG9uXCA7CivohLPlkbPlmYwgPCBub3VtaXNvXCA7Civpm5HkuosgPCB6YXRzdWppXCA7CivlrZDnlLvpnaIgPCBrb2dhbWVuXCA7Civntbbmga8gPCB6ZXNzb2t1XCA7CivpmaPlrrkgPCBqaW4nJ3lvdVwgOwor6Zm45aSnIDwgcmlrdWRhaVwgOwor6KSl55ihIDwgam9rdXNvdVwgOwor57KX562LIDwgYXJhc3VqaVwgOwor6ZW355+tIDwgY2hvdXRhblwgOwor6Kaq5pa5IDwgb3lha2F0YVwgOwor5Y+v6KaW5YyWIDwga2FzaGlrYVwgOwor6Kit5Za2IDwgc2V0c3VlaVwgOwor57W15b+DIDwgZWdva29yb1wgOwor5oud6aCYIDwgaGFpcnlvdVwgOwor57W25b6MIDwgemV0c3Vnb1wgOwor5LiN5rOo5oSPIDwgZnVjaHV1aVwgOwor57KY56igIDwgbmVuY2h1dVwgOwor5pKu5b2xIDwgc2F0c3VlaVwgOwor6K236KGb6ImmIDwgZ29laWthblwgOwor5aGp5a6zIDwgc2hpb2dhaVwgOwor6KOc57a0IDwgaG90ZXRzdVwgOwor56+k6L6yIDwgdG9rdW5vdVwgOwor5o+u55m6IDwga2loYXRzdVwgOwor54OP5pyoIDwga29rdXRhblwgOwor5qyh5omT6ICFIDwgamlkYXNoYVwgOwor5aCG5pyxIDwgdHN1aXNodVwgOwor6Zm45ZywIDwgcmlrdWNoaVwgOwor5aKD5Z+fIDwga3lvdWlraVwgOwor5oqr6Zyy5a60IDwgaGlyb3VlblwgOwor54Wn5ZCIIDwgc2hvdWdvdVwgOwor6KmV5LydIDwgaHlvdWRlblwgOwor6Ieq6KGb5a6YIDwgamllaWthblwgOwor5Z6L55WqIDwga2F0YWJhblwgOwor54S85aOyIDwgc2h1dW1haVwgOwor55WZ5a6I55WqIDwgcnVzdWJhblwgOwor6KSH55y8IDwgZnVrdWdhblwgOwor5Lqc6Z+z6YCfIDwgYW9uc29rdVwgOwor54Sh5a6/IDwgbXVzaHVrdVwgOwor6KeS5bi9IDwga2FrdWJvdVwgOwor6ZW355S3IDwgY2hvdW5hblwgOwor6Kaq5oyHIDwgb3lheXViaVwgOwor6KeS5bivIDwga2FrdW9iaVwgOwor54Sh5a6fIDwgbXVqaXRzdVwgOwor57Si5p2hIDwgc2FrdWpvdVwgOwor57eP5YmHIDwgc291c29rdVwgOwor6LmEIDwgaGlkenVtZVwgOwor5aKX5Y+OIDwgem91c2h1dVwgOwor57a+5Y+WIDwgYXlhdG9yaVwgOwor57aa5aCxIDwgem9rdWhvdVwgOwor5aCx5b6zIDwgaG91dG9rdVwgOwor5pGp5pOmIDwgbWFzYXRzdVwgOwor5aCx5b6pIDwgaG91ZnVrdVwgOwor5b6h5rOo5oSPIDwgZ29jaHV1aVwgOwor6KaL5paZIDwga2VucnlvdVwgOwor6KGo6KOFIDwgaHlvdXNvdVwgOwor5Zu96JGsIDwga29rdXNvdVwgOwor6KW/5pqmIDwgc2VpcmVraVwgOwor57Gg57WhIDwgcm91cmFrdVwgOwor5Yy756eR5a2mIDwgaWthZ2FrdVwgOwor57KX55quIDwgYXJha2F3YVwgOwor54Kt5p+xIDwgdGFuY2h1dVwgOwor6Kaz5b+1IDwga2FuJyduZW5cIDsKK+e0lOactCA8IGp1bmJva3VcIDsKK+iok+WRiiA8IGt1bmtva3VcIDsKK+ilv+aXpSA8IG5pc2hpYmlcIDsKK+exs+epgCA8IGJlaWtva3VcIDsKK+eVsOaWueaApyA8IGlob3VzZWlcIDsKK+aTgeWjgSA8IHlvdWhla2lcIDsKK+ioreWCmSA8IHNldHN1YmlcIDsKK+ihgOixhiA8IGNoaW1hbWVcIDsKK+Wcp+e4riA8IGFzc2h1a3VcIDsKK+e3kuS9nCA8IHNob3Nha3VcIDsKK+eEoemRkeafuyA8IG11a2Fuc2FcIDsKK+e0muaVsCA8IGt5dXVzdXVcIDsKK+e0i+acjSA8IG1vbnB1a3VcIDsKK+ijleemjyA8IHl1dWZ1a3VcIDsKK+aOm+eulyA8IGtha2V6YW5cIDsKK+e1teWnvyA8IGVzdWdhdGFcIDsKK+isrCA8IGF5YW1hcmlcIDsKK+WcsOexjSA8IGNoaXNla2lcIDsKK+S6jOeVquebriA8IG5pYmFubWVcIDsKK+aOoueptiA8IHRhbmt5dXVcIDsKK+eykueVjCA8IHJ5dXVrYWlcIDsKK+ehrOWMluayuSA8IGtvdWtheXVcIDsKK+aQjea1gSA8IHNvbnJ5dXVcIDsKK+iqvCA8IHlvc2hpbWlcIDsKK+aYoOeUu+elrSA8IGVpZ2FzYWlcIDsKK+iqriA8IHlhc2FzaGlcIDsKK+a8humjnyA8IHNoaWtrdWlcIDsKK+aYoOeUu+ekviA8IGVpZ2FzaGFcIDsKK+eCueaPjyA8IHRlbmJ5b3VcIDsKK+S4jeato+imjyA8IGZ1c2Vpa2lcIDsKK+iNiuajmOe3miA8IGJhcmFzZW5cIDsKK+aLk+mKgCA8IHRha3VnaW5cIDsKK+e1tuWjgSA8IHplcHBla2lcIDsKK+aFsOmciuelrSA8IGlyZWlzYWlcIDsKK+WtpuagoeWMuyA8IGdha2tvdWlcIDsKK+mZuOWFtSA8IHJpa3VoZWlcIDsKK+e2seWFtyA8IHRzdW5hZ3VcIDsKK+eyl+eOiSA8IGFyYXRhbWFcIDsKK+e2suWFgyA8IGFtaW1vdG9cIDsKK+iogOWPiiA8IGdlbmt5dXVcIDsKK+mHkeaWh+WtlyA8IGtpbm1vamlcIDsKK+ezuOaeoCA8IGl0b3dha3VcIDsKK+mZpOWNtCA8IGpva3lha3VcIDsKK+a8q+mMsiA8IG1hbnJva3VcIDsKK+maj+S4gCA8IHp1aWljaGlcIDsKK+ezuOadiSA8IGl0b3N1Z2lcIDsKK+eBsOauuyA8IGhhaWdhcmFcIDsKK+aRguaUvyA8IHNlc3Nob3VcIDsKK+ilhSA8IGNoaWhheWFcIDsKK+WhqeWRsyA8IHNoaW9hamlcIDsKK+e1kOWwviA8IGtldHN1YmlcIDsKK+e0hOaVsCA8IHlha3VzdXVcIDsKK+mYsuWjgSA8IGJvdWhla2lcIDsKK+W+oeazleW6piA8IGdvaGF0dG9cIDsKK+WhgeWjgSA8IHJ1aWhla2lcIDsKK+e1kOWvqSA8IGtlc3NoaW5cIDsKK+aLmemAnyA8IHNlc3Nva3VcIDsKK+aSruWcnyA8IHNhdHN1ZG9cIDsKK+awl+S/nemkiiA8IGtpaG95b3VcIDsKK+igjiA8IHV3YWJhbWlcIDsKK+mJhOeBq+WgtCA8IHRla2thYmFcIDsKK+WLpOWLmeWToSA8IGtpbm11aW5cIDsKK+inkuWcsCA8IGthZG9jaGlcIDsKK+e1jOWtpiA8IGtlaWdha3VcIDsKK+eyi+eLgiA8IHN1aWt5b3VcIDsKK+ijj+eZvSA8IHVyYWppcm9cIDsKK+WhteWFpSA8IGdvbWlpcmVcIDsKK+eVsOaYn+S6uiA8IGlzZWlqaW5cIDsKK+e0sOW4ryA8IGhvc29vYmlcIDsKK+ichiA8IHNoaWppbWlcIDsKK+eEoeWPoyA8IG11a3VjaGlcIDsKK+Wft+W/tSA8IHNodXVuZW5cIDsKK+mZuOS4iiA8IHJpa3Vqb3VcIDsKK+aYoOeUu+eVjCA8IGVpZ2FrYWlcIDsKK+a8q+mBiiA8IG1hbicneXV1XCA7CivntbbllLEgPCB6ZXNzaG91XCA7CivombEgPCBzaGlyYW1pXCA7CivkupTnlb/lhoUgPCBnb2tpbmFpXCA7CivlvqHnoLTnrpcgPCBnb2hhc2FuXCA7CivlnLDnm64gPCBjaGltb2t1XCA7CivlkKblrproqp4gPCBoaXRlaWdvXCA7CivnhKHlipsgPCBtdXJ5b2t1XCA7Civolb4gPCB0c3Vib21pXCA7Civmir3pgbggPCBjaHV1c2VuXCA7Civntbblj6sgPCB6ZWtreW91XCA7CivpgZXmhrLmgKcgPCBpa2Vuc2VpXCA7CivloanljJbpioAgPCBlbmthZ2luXCA7Civlm73nsosgPCBrb2t1c3VpXCA7Civplonmpa0gPCBoZWlneW91XCA7CivnsbPni6wgPCBiZWlkb2t1XCA7CivmjK/oiJ4gPCBmdXJ1bWFpXCA7Civkv53orbflj7ggPCBob2dvc2hpXCA7CivplbfmrYwgPCBuYWdhdXRhXCA7CivntI3lvpcgPCBuYXR0b2t1XCA7CivlnJ/nnYAgPCBkb2NoYWt1XCA7Civlm73nrYkgPCBrb2t1dG91XCA7CivloILlroggPCBkb3Vtb3JpXCA7Civmi53orIEgPCBoYWlldHN1XCA7CivlvpfmhI/msJcgPCB0b2t1aWdlXCA7CivmkqTlj44gPCB0ZXNzaHV1XCA7Civnga/mmI4gPCB0b3VteW91XCA7Civmi53oqq0gPCBoYWlkb2t1XCA7CivnrYnplpEgPCBuYW96YXJpXCA7Civpj6TpqqggPCBydWtvdHN1XCA7CivmiYvntLDlt6UgPCB0ZXphaWt1XCA7CivoiI7liKnloakgPCBzaGFyaWVuXCA7CivlnKjnlZkgPCB6YWlyeXV1XCA7CivmkI3mlpkgPCBzb25yeW91XCA7CivlnK3nkqcgPCBrZWloZWtpXCA7Civmj4/ms5UgPCBieW91aG91XCA7Civopqrppqzpub8gPCBveWFiYWthXCA7CivoiJ7ouIrlrrYgPCBidXRvdWthXCA7Civlm73nqI4gPCBrb2t1emVpXCA7CivlpYflvaLlhZAgPCBraWtlaWppXCA7CivploDmn7EgPCBtb25jaHV1XCA7CivljYjlvozkuK0gPCBnb2dvanV1XCA7CivoiYAgPCBoYXNoaWtlXCA7Civlm7Dnqq4gPCBrb25reXV1XCA7CivooajntJkgPCBoeW91c2hpXCA7Civng4jlpbMgPCByZXRzdWpvXCA7Civoqa3lvIHlrrYgPCBraWJlbmthXCA7CivopqrlloQgPCBzaGluemVuXCA7CivmvKvoqq0gPCBtYW5kb2t1XCA7CivplqLmiYAgPCBzZWtpc2hvXCA7Civns7jlupUgPCBpdG96b2tvXCA7CivmvKvoqZUgPCBtYW5weW91XCA7CivopovlooMgPCBtaXNha2FpXCA7CivogaIgPCBzaGlrYXRvXCA7Civog4PmtJfmtYQgPCBpc2Vuam91XCA7CivmipjovrwgPCBvcmlrb21pXCA7CivkuI3lkIzljJYgPCBmdWRvdWthXCA7Civnv7wgPCB0c3ViYXNhXCA7CivnlbDmlZnlvpIgPCBpa3lvdXRvXCA7CivmjojniLUgPCBqdXNoYWt1XCA7Civpj6HpnaIgPCBreW91bWVuXCA7Civlm7rnnYAgPCBrb2NoYWt1XCA7CivmjqjmuKwgPCBzdWlzb2t1XCA7Civlm73nm4ogPCBrb2t1ZWtpXCA7Civmua/liqDmuJsgPCB5dWthZ2VuXCA7CivntITlrpogPCB5YWt1am91XCA7CivpnZ7oqrLnqI4gPCBoaWthemVpXCA7Civlkozmpb3lmaggPCB3YWdha2tpXCA7CivntbHkuIAgPCB0b3VpdHN1XCA7Civplovmi5MgPCBrYWl0YWt1XCA7Civoo5zmrrogPCBob3NhdHN1XCA7Civns7jlsZEgPCBpdG9rdXp1XCA7CivpgZXms5XogIUgPCBpaG91c2hhXCA7CivmkoPliaMgPCBnZWtpa2VuXCA7CivmiYHpoY0gPCBoZW5nYWt1XCA7CivmvJToqqwgPCBlbnpldHN1XCA7CivmiYDpoJggPCBzaG9yeW91XCA7Civnq7nppqwgPCBjaGlrdWJhXCA7Civlm73nlKMgPCBrb2t1c2FuXCA7CivooYDnuIEgPCBrZXRzdWVuXCA7CivopIfmlrkgPCBmdWt1aG91XCA7CivnspfmnKsgPCBzb21hdHN1XCA7Civpjq7prYIgPCBjaGluZ29uXCA7CivopIfmlbAgPCBmdWt1c3V1XCA7CivmkI3lvpcgPCBzb250b2t1XCA7CivloJXlipsgPCBkYXJ5b2t1XCA7CivovLjpgIHmqZ8gPCB5dXNvdWtpXCA7CivkuI7ph47lhZogPCB5b3lhdG91XCA7CivooYDns4ogPCBjaGlub3JpXCA7CivlvJXngavngrkgPCBpbmthdGVuXCA7CivmvLjokL0gPCB6ZW5yYWt1XCA7CivnspfmlrkgPCBhcmFrYXRhXCA7Civns7jlp6sgPCBpdG9oaW1lXCA7Civnr4DnvqkgPCBzZXRzdWdpXCA7Civnvr3lrZDmnb8gPCBoYWdvaXRhXCA7CivnrYbouZ8gPCBoaXNzZWtpXCA7Civpn7PmspnmsbAgPCBvdG9zYXRhXCA7Civnpr7mnKznp5EgPCBrYWhvbmthXCA7CivkuI3lj6/liIYgPCBmdWthYnVuXCA7CivntYLlgKQgPCBvd2FyaW5lXCA7CivooYDnrYsgPCBjaGlzdWppXCA7Civln47lo4EgPCBqb3VoZWtpXCA7CivpvKDlvoTpg6ggPCBzb2tlaWJ1XCA7CivlnLDmrrsgPCBjaGlrYWt1XCA7CivnrZborIAgPCBzYWt1Ym91XCA7Civono3pgJogPCB5dXVkenV1XCA7CivplovluZUgPCBrYWltYWt1XCA7CivllqvpqZogPCBiaWtrdXJpXCA7CivplonluZUgPCBoZWltYWt1XCA7CivpjpbpqqggPCBzYWtvdHN1XCA7CivmuoDpoY0gPCBtYW5nYWt1XCA7CivooZfnnYAgPCBtYWNoaWdpXCA7CivlnKfmrrogPCBhc3NhdHN1XCA7Civpjq7pnZkgPCBjaGluc2VpXCA7CivnhKHmioDlt6cgPCBtdWdpa291XCA7Civon4von4AgPCBrb29yb2dpXCA7Civmi53ogbQgPCBoYWljaG91XCA7Civmv4HngrkgPCBkYWt1dGVuXCA7CivooI/nvLYgPCBrYW5pa2FuXCA7CivnpI4gPCBpc2hpenVlXCA7CivplbflvoQgPCBjaG91a2VpXCA7Civpg73orbDkvJogPCB0b2dpa2FpXCA7CivmjqjmnI0gPCBzdWlmdWt1XCA7CivplpHlr4IgPCBrYW5qYWt1XCA7Civns77llY8gPCBreXV1bW9uXCA7Civoo4/mm7ggPCB1cmFnYWtpXCA7CivkuojlgpnmoKEgPCB5b2Jpa291XCA7CivplbflubwgPCBjaG91eW91XCA7CivmkL7lj5YgPCBzYWt1c2h1XCA7CivloIXkurogPCBrYXRhamluXCA7CivlnJ/mqYsgPCBkb2Jhc2hpXCA7CivoprPkuJbpn7MgPCBrYW56ZW9uXCA7CivmiYvov5EgPCB0ZWRqaWthXCA7Civoo4/mlrkgPCB1cmFrYXRhXCA7CivljYrpgY7ljrsgPCBoYW5rYWtvXCA7CivkuI3lj4LliqAgPCBmdXNhbmthXCA7Civmv4DmuJsgPCBnZWtpZ2VuXCA7Civnspflv70gPCBzb2tvdHN1XCA7CivntI3lhaUgPCBub3VueXV1XCA7CivmioDooZMgPCBnaWp1dHN1XCA7CivmipXolqwgPCB0b3V5YWt1XCA7Civmv4DmtaogPCBnZWtpcm91XCA7CivmgaPmhI/mgKcgPCBzaGlpc2VpXCA7Civlm73ms5UgPCBrb2t1aG91XCA7CivnspLlvoQgPCByeXV1a2VpXCA7CivnlKYgPCB5b21pZ2FlXCA7Civku5jliqDnqI4gPCBmdWthemVpXCA7Civlm73msJEgPCBrb2t1bWluXCA7Civnsr7lppkgPCBzZWlteW91XCA7Civmv4HmsLQgPCBkYWt1c3VpXCA7CivmmYLoqIjluqcgPCB0b2tlaXphXCA7CivmjpLmlqUgPCBoYWlzZWtpXCA7Civpg6jlsYvku6MgPCBoZXlhZGFpXCA7Civmr43pn7PmgKcgPCBib2luc2VpXCA7CivooYznirYgPCBneW91am91XCA7Civonbbosp0gPCBjaG91Z2FpXCA7CivkuI3lvpfmhI8gPCBmdXRva3VpXCA7CivopZ/lhYMgPCBlcmltb3RvXCA7Civpm7voqbHmqZ8gPCBkZW53YWtpXCA7CivnhKHmi4Xkv50gPCBtdXRhbnBvXCA7Civmh7jpmpQgPCBrZW5rYWt1XCA7Civoo4/mioAgPCB1cmF3YXphXCA7CivlnKjmlrkgPCB6YWlrYXRhXCA7Civnq7novKogPCBjaGlrdXdhXCA7CivmjpLmkoMgPCBoYWlnZWtpXCA7Civmjqrovp7ms5UgPCBzb2ppaG91XCA7CivmjqHmip4gPCBzYWl0YWt1XCA7CivlhavkuZ3liIYgPCBoYWtrdWJ1XCA7Civonp/omasgPCBtZWljaHV1XCA7Civngb3ljoQgPCBzYWl5YWt1XCA7CivlnJ/ml6UgPCBkb25pY2hpXCA7CivmoLnlpKrmnb8gPCBuZWRhaXRhXCA7CivmiJDpioAgPCBuYXJpZ2luXCA7CivniZwgPCB1c2hpaGVuXCA7Civnr4TnlocgPCBoYW5jaHV1XCA7CivngavliqDmuJsgPCBoaWthZ2VuXCA7Civkupznh5DphbggPCBhcmluc2FuXCA7CivmmYLoqIjlsYsgPCB0b2tlaXlhXCA7Civmjozmj6EgPCBzaG91YWt1XCA7CivmiJDph5EgPCBuYXJpa2luXCA7CivmvZTnmb0gPCBrZXBwYWt1XCA7CivpnZLkuozmiY0gPCBhb25pc2FpXCA7CivmvZTnmZYgPCBrZXBwZWtpXCA7CivmvKLnsY0gPCBrYW5zZWtpXCA7CivlnKfmjqUgPCBhc3NldHN1XCA7Civph47mlL7lm7MgPCBub2hvdXp1XCA7CivnspLlrZAgPCByeXV1c2hpXCA7CivmiY3oppogPCBzYWlrYWt1XCA7Civngavlj6MgPCBoaWd1Y2hpXCA7CivmiYDorIIgPCBpd2F5dXJ1XCA7CivplpPlj6MgPCBtYWd1Y2hpXCA7CivplqPlhoUgPCBrYWt1bmFpXCA7CivlubzlhZDmnJ8gPCB5b3VqaWtpXCA7CivmuoDouqsgPCBtYW5zaGluXCA7CivmjInmkanoho8gPCBhbm1ha291XCA7CivmsJfoi6blirQgPCBraWd1cm91XCA7Civoo4/luq0gPCB1cmFuaXdhXCA7Civoo4/lupcgPCB1cmFkYW5hXCA7Civlm73mnIkgPCBrb2t1eXV1XCA7CivmlL/lupzmoYggPCBzZWlmdWFuXCA7Civlm73mm7ggPCBrb2t1c2hvXCA7CivngavlipsgPCBrYXJ5b2t1XCA7Civnq5zou4ogPCByeXV1c2hhXCA7CivkuojlgpnlvbkgPCB5b2JpZWtpXCA7CivmiJHovKkgPCB3YWdhaGFpXCA7CivmuoDotrMgPCBtYW56b2t1XCA7CivooYDmva4gPCBjaGlzaGlvXCA7CivmvIbntbUgPCB1cnVzaGllXCA7CivpvbfpvaogPCBha3VzZWt1XCA7CivlnLDlv4MgPCBjaGlzaGluXCA7CivnqbrppqwgPCBrYXJhdW1hXCA7Civlm73mlocgPCBrb2t1YnVuXCA7Civlm73mlZkgPCBrb2treW91XCA7Civlm73mlL8gPCBrb2t1c2VpXCA7CivnsbPlr6kgPCBiZWlzaGluXCA7CivlnanloJ0gPCBydXRzdWJvXCA7CivkuI3pgZPnkIYgPCBmdWRvdXJpXCA7Civph5HnhKHlnqIgPCBraW5tdWt1XCA7Civlm6PmoJcgPCBkb25ndXJpXCA7Civlm7PmmJ8gPCB6dWJvc2hpXCA7Civoo4/lsbEgPCB1cmF5YW1hXCA7CivmipjntJkgPCBvcmlnYW1pXCA7CivooYzmsLQgPCBneW91enVpXCA7Civnsonlo4EgPCBmdW5wZWtpXCA7Civlgb3pgKDljbAgPCBnaXpvdWluXCA7Civnq4vouqsgPCByaXNzaGluXCA7Civnq7noo70gPCB0YWtlc2VpXCA7CivnhKHmibnliKQgPCBtdWhpaGFuXCA7CivooYDmsoggPCBrZXRjaGluXCA7CivmiYvolJMgPCB0ZWR6dXJ1XCA7Civmr64gPCBtdXNoaXJ1XCA7Civlm7Pmm7josrsgPCB0b3Nob2hpXCA7Civngavku5ggPCBoaXRzdWtlXCA7CivlubjpgYvlhZAgPCBrb3V1bmppXCA7CivllJDpu40gPCB0b3VraWJpXCA7CivlnLDls6EgPCBjaGlreW91XCA7CivloanmsLTmuZYgPCBlbnN1aWtvXCA7CivmtYHluIPmnKwgPCBydWZ1Ym9uXCA7Civnr4nmuK8gPCBjaGlra291XCA7CivnqbrpmpkgPCBrdXVnZWtpXCA7CivmipznqbQgPCBudWtlYW5hXCA7CivlsbHojLboirEgPCBzYXphbmthXCA7Civnp7vmsJHms5UgPCBpbWluaG91XCA7CivnqbrpmbggPCBrdXVyaWt1XCA7CivprLznmb7lkIggPCBvbml5dXJpXCA7CivplpPkuK0gPCBhaWRhanV1XCA7CivmjpLlsL8gPCBoYWlueW91XCA7Civlm73miYsgPCBrb2t1c2h1XCA7CivooajmmI4gPCBoeW91bWVpXCA7CivlpYjoia/nnIwgPCBuYXJha2VuXCA7CivkuI3li53miYsgPCBmdWthdHRlXCA7Civlm57mlZkgPCBrYWlreW91XCA7CivlnLDlraYgPCBjaGlnYWt1XCA7CivmvIHnpIEgPCBneW9zaG91XCA7CivooajmlawgPCBoeW91a2VpXCA7Civmv4DmhqQgPCBnZWtpZnVuXCA7CivmvaTmsqIgPCBqdW50YWt1XCA7CivmjK/mm78gPCBmdXJpa2FlXCA7Civnr6bmo5IgPCBiZXJhYm91XCA7CivmipXnpaggPCB0b3VoeW91XCA7Civlm73mg4UgPCBrb2t1am91XCA7CivlnKjlroUgPCB6YWl0YWt1XCA7CivkuI3liKnnm4ogPCBmdXJpZWtpXCA7CivlnKjlraYgPCB6YWlnYWt1XCA7CivluILlkI/lk6EgPCBzaGlyaWluXCA7CivmhI/opovmm7ggPCBpa2Vuc2hvXCA7CivmhbDpnIrloZQgPCBpcmVpdG91XCA7Civnq4voqLwgPCByaXNzaG91XCA7Civmo5cgPCBuYXRzdW1lXCA7Civmjpvlo7AgPCBrYWtlZ29lXCA7CivmorsgPCBzaGlraW1pXCA7CivmiJHliKnli4kgPCBnYXJpYmVuXCA7CivooYzmnKsgPCB5dWt1c3VlXCA7CivooYzmm7ggPCBneW91c2hvXCA7CivmuL7ouqsgPCBrb25zaGluXCA7Civlm7Dmg5EgPCBrb253YWt1XCA7CivooYbmnJsgPCBzaHV1Ym91XCA7CivmuJvph48gPCBnZW5yeW91XCA7Civmm5kgPCBha2Vib25vXCA7Civmk6zlrp3nj6AgPCBnaWJvc2hpXCA7CivlpKflkozntbUgPCB5YW1hdG9lXCA7CivooYzmlbAgPCBneW91c3V1XCA7Civlm7PlvI8gPCB6dXNoaWtpXCA7CivlsI/liIfmiYsgPCBrb2dpdHRlXCA7CivmvL/mtrIgPCBzaG91ZWtpXCA7CivmmZIgPCBzYXJhc2hpXCA7Civou6Lot6/lmaggPCB0ZW5yb2tpXCA7CivnqYDpoZ4gPCBrb2t1cnVpXCA7CivmvKDnhLYgPCBiYWt1emVuXCA7CivnqoHpgLIgPCB0b3NzaGluXCA7CivnsbPlj44gPCBiZWlzaHV1XCA7Civml4EgPCB0c3VrdXJpXCA7CivliKTkuovoo5wgPCBoYW5qaWhvXCA7CivlsaDomIfmlaMgPCB0b3Nvc2FuXCA7Civnqb/pgJogPCBzZW50c3V1XCA7Civooajmg4UgPCBoeW91am91XCA7CivlmbTmtYEgPCBmdW5yeXV1XCA7CivnqK7ppqwgPCB0YW5ldW1hXCA7Civmt6Hpm6ogPCBhd2F5dWtpXCA7Civlj4LorbDpmaIgPCBzYW5naWluXCA7CivmjqXlj5cgPCBzZXRzdWp1XCA7CivmjKjmi7YgPCBhaXNhdHN1XCA7CivmjKvmipggPCB6YXNldHN1XCA7CivmjqXlj44gPCBzZXNzaHV1XCA7CivmiYvntrEgPCB0YWR6dW5hXCA7Civlm73lr74gPCBrb2t1dGFpXCA7Civkuojlgpnlk4EgPCB5b2JpaGluXCA7CivmvIHnjbIgPCBneW9rYWt1XCA7CivmiYnntbUgPCB0b2JpcmFlXCA7CivmvIHnjJ8gPCBneW9yeW91XCA7Civlm73lrpogPCBrb2t1dGVpXCA7CivnkIblt6Xnp5EgPCByaWtvdWthXCA7CivngavokazloLQgPCBrYXNvdWJhXCA7CivllIfpn7MgPCBzaGluJydvblwgOwor5a+S5Z6i6ZuiIDwga2FuZ29yaVwgOwor6KGM5oiQIDwgaWtpbmFyaVwgOwor5ruR55+zIDwga2Fzc2VraVwgOwor6Ziy6KGb6LK7IDwgYm91ZWloaVwgOwor5Zyw5Y+jIDwgamlndWNoaVwgOwor5omL566SIDwgdGVib3VraVwgOwor5ZSQ6ZaAIDwga2FyYW1vblwgOwor6aas5bCP5bGLIDwgdW1hZ295YVwgOwor56uc6ISzIDwgcnl1dW5vdVwgOwor5Zu95aSnIDwga29rdWRhaVwgOwor57Gz5L+XIDwgYmVpem9rdVwgOwor5Zu95aSWIDwga29rdWdhaVwgOwor6KOP5YG0IDwgdXJhZ2F3YVwgOwor5r+B5aOwIDwgZGFtaWdvZVwgOwor57Gz5L2cIDwgYmVpc2FrdVwgOwor5LqI5YKZ5YW1IDwgeW9iaWhlaVwgOwor5ZSx6YGTIDwgc2hvdWRvdVwgOwor5ZWP6LKsIDwgbW9uc2VraVwgOwor56m66LC3IDwga3V1a29rdVwgOwor5r+A5aKXIDwgZ2VraXpvdVwgOwor5bCP6YGT5YW3IDwga29kb3VndVwgOwor56uv57axIDwgaGFkenVuYVwgOwor5rex6YGgIDwgc2hpbicnZW5cIDsKK+ijj+S9nCA8IHVyYXNha3VcIDsKK+ijguWCtyA8IHJlc3Nob3VcIDsKK+ibruilnyA8IGJhbmthcmFcIDsKK+W4jOWFg+e0oCA8IGtpZ2Vuc29cIDsKK+aAuiA8IGtvcmFlcnVcIDsKK+S4lueVjOiqniA8IHNla2FpZ29cIDsKK+exs+S4rSA8IGJlaWNodXVcIDsKK+eri+iFuSA8IHJpcHB1a3VcIDsKK+eojumhjSA8IHplaWdha3VcIDsKK+erv+eruSA8IHNhb2Rha2VcIDsKK+a3q+mAuCA8IGluJydpdHN1XCA7CivlvqQgPCB0YWtlc2hpXCA7CivorbfooZvlhbUgPCBnb2VpaGVpXCA7Civnqbroqr8gPCBrdXVjaG91XCA7CivomavpoZ4gPCBjaHV1cnVpXCA7CivlvaLogIzkuIsgPCBrZWlqaWthXCA7CivmjbrljbAgPCBuYXRzdWluXCA7CivooYblurYgPCBzaHV1c2hvXCA7Civnq7nnq78gPCB0YWtlemFvXCA7CivpnZLpm7voqbEgPCBhb2RlbndhXCA7Civkuozmnprnm64gPCBuaW1haW1lXCA7CivllY/oqLogPCBtb25zaGluXCA7Civmi5PmnKwgPCB0YWt1aG9uXCA7CivnqY3ovIkgPCBzZWtpc2FpXCA7CivnqbropbIgPCBrdXVzaHV1XCA7Civku5blupznnIwgPCB0YWZ1a2VuXCA7Civkv53nt5rljLogPCBob3Nlbmt1XCA7Civlt70gPCB0YXRzdW1pXCA7CivlnKjkv5cgPCB6YWl6b2t1XCA7Civlh7rnqL3lj6QgPCBkZWdlaWtvXCA7CivnqbrooYwgPCBrdXVneW91XCA7CivlnLDkuLsgPCBqaW51c2hpXCA7CivkuI3lhbfogIUgPCBmdWd1c2hhXCA7CivlnLDkuK0gPCBjaGljaHV1XCA7CivmvJTnrpfmqZ8gPCBlbnphbmtpXCA7CivpgbrkvJ3ms5UgPCBpZGVuaG91XCA7Civlm73lj7cgPCBrb2t1Z291XCA7CivpjK/op5IgPCBzYWtrYWt1XCA7CivlnKjkuqwgPCB6YWlreW91XCA7Civmi43mlbAgPCBoYWt1c3V1XCA7Civpgbrlrrbml48gPCBpa2F6b2t1XCA7CivlsI/liKnlj6MgPCBrb3Jpa291XCA7CivlnKjkuK0gPCB6YWljaHV1XCA7CivooajlnKggPCBoeW91emFpXCA7Civmu7TmsLQgPCB0ZWtpc3VpXCA7CivmiZPnjocgPCBkYXJpdHN1XCA7Civpi7PpgKAgPCBjaHV1em91XCA7Civlm5vlm70gPCBzaGlrb2t1XCA7Civlm73lirQgPCBrb2t1cm91XCA7Civmv4Dli5UgPCBnZWtpZG91XCA7Civnq4vnsbMgPCByeXV1YmVpXCA7CivnrYvms6ggPCBraW5jaHV1XCA7Civmv4DlirEgPCBnZWtpcmVpXCA7CivmipHmraIgPCB5b2t1c2hpXCA7CivmvKLml48gPCBrYW56b2t1XCA7Civnr4DluqYgPCBzZXRzdWRvXCA7CivlpKnmsJfpgYsgPCB0ZW5raXVuXCA7CivmvIHmpa0gPCBneW9neW91XCA7CivmtrLph48gPCBla2lyeW91XCA7CivlupzorbDkvJogPCBmdWdpa2FpXCA7Civom4fooI0gPCBkYWthdHN1XCA7Civlm73lhoUgPCBrb2t1bmFpXCA7Civlm73lhbggPCBrb2t1dGVuXCA7CivonYvnn7MgPCByb3VzZWtpXCA7Civnq5znpZ4gPCByeXV1amluXCA7CivmtojpmLIgPCBzaG91Ym91XCA7CivmtYHpupcgPCByeXV1cmVpXCA7Civnq6/nmoQgPCB0YW50ZWtpXCA7CivmuKnoibIgPCBvbnNob2t1XCA7CivmupbnlKggPCBqdW4nJ3lvdVwgOwor56m06JS1IDwgYW5hZ3VyYVwgOwor5ouN5omLIDwgaGFrdXNodVwgOwor5omL54etIDwgdGVzaG9rdVwgOwor5aOsIDwgbWl6dW5vZVwgOwor5q2i6Z+z5ZmoIDwgc2hpb25raVwgOwor5ZCI5rCX5LyaIDwgYWlraWthaVwgOwor6YaN6YaQ5ZGzIDwgZGFpZ29taVwgOwor566x5birIDwgaGFrb3NoaVwgOwor6KGo5Y+3IDwgaHlvdWdvdVwgOwor6buE6bq7IDwgdHN1bmFzb1wgOwor6Jmr6YW4IDwgbXVzaGl6dVwgOwor5rqA55uuIDwgbWFubW9rdVwgOwor5oud5b6pIDwgaGFpZnVrdVwgOwor6ZCY5qW8IDwgc2hvdXJvdVwgOwor56uL56eLIDwgcmlzc2h1dVwgOwor56eL6aKoIDwgc2h1dWZ1dVwgOwor5oq85o26IDwgb3VuYXRzdVwgOwor5oSP5Zuz55qEIDwgaXRvdGVraVwgOwor5rWm6aKoIDwgdXJha2F6ZVwgOwor56m66Iy2IDwga2FyYWNoYVwgOwor56uc55y8IDwgcnl1dWdhblwgOwor5rW36Zm4IDwga2FpcmlrdVwgOwor5Zyw56OB5rCXIDwgY2hpamlraVwgOwor56iO6L68IDwgemVpa29taVwgOwor55Sf5oSP5rCXIDwgbmFtYWlraVwgOwor6buS6a+bIDwga3Vyb2RhaVwgOwor56m66ImyIDwgc29yYWlyb1wgOwor5Zub5qyh5YWDIDwgeW9qaWdlblwgOwor5oyZ5Zu9IDwga3lva29rdVwgOwor6KGw5YWGIDwgc3VpY2hvdVwgOwor5Zu95LitIDwga3VuaWp1dVwgOwor56eL6ZycIDwgc2h1dXNvdVwgOwor5ZaJ56ybIDwgbm9kb2J1ZVwgOwor56eL6ZyWIDwgc2h1dXJpblwgOwor5b6h55uu546JIDwgb21lZGFtYVwgOwor6KGM5ZWTIDwgZ3lvdWtlaVwgOwor5ZqPIDwga3VzaGFtaVwgOwor56eL6ZuoIDwgYWtpc2FtZVwgOwor56m66IW5IDwga3V1ZnVrdVwgOwor5oy/5YWlIDwgc291bnl1dVwgOwor5ZKM6aOfIDwgd2FzaG9rdVwgOwor5oqc5pOiIDwgYmF0dGVraVwgOwor6Y2156m0IDwga2FnaWFuYVwgOwor6J+75be7IDwgYXJpbWFraVwgOwor5oyH5ZynIDwgc2hpYXRzdVwgOwor5oqV5pOyIDwgdG91dGVraVwgOwor5YWs5paH5omAIDwga3Vtb25qb1wgOwor5oyH5ZuzIDwgc2FzaGl6dVwgOwor5b6h5bqn5omAIDwgZ296YXNob1wgOwor5rq65rC0IDwgZGVraXN1aVwgOwor5aSn6Yu45bGRIDwgb2dha3V6dVwgOwor56+J5ZywIDwgdHN1a2lqaVwgOwor55SY5rW36IuUIDwgYW1hbm9yaVwgOwor5bu66K2w5qGIIDwga2VuZ2lhblwgOwor6J2L54etIDwgcm91c29rdVwgOwor5rq65q27IDwgZGVraXNoaVwgOwor56KB5Lya5omAIDwgZ29rYWlqb1wgOwor5ouZ5a6FIDwgc2V0dGFrdVwgOwor5omL5rKiIDwgc2h1dGFrdVwgOwor5oqR5o+aIDwgeW9rdXlvdVwgOwor56yK5rOVIDwgemFydWhvdVwgOwor5oeH56+kIDwga29udG9rdVwgOwor5ZSQ6JavIDwga2FyYWltb1wgOwor56iO6Kq/IDwgemVpY2hvdVwgOwor6Jit6YuzIDwgcmFuY2h1dVwgOwor5ouh5aSnIDwga2FrdWRhaVwgOwor6Ziy54Gr5oi4IDwgYm91a2Fkb1wgOwor6YqF6ZC4IDwgZG91dGFrdVwgOwor55m75bGx5a62IDwgdG96YW5rYVwgOwor54KK5LqL5aC0IDwgc3VpamliYVwgOwor5oiQ54afIDwgc2VpanVrdVwgOwor5rqc5rGgIDwgdGFtZWlrZVwgOwor5rWm6YeMIDwgdXJhemF0b1wgOwor6Iux5paH56eRIDwgZWlidW5rYVwgOwor5rmv54aoIDwgeXVub3NoaVwgOwor5Zar54WZIDwga2l0c3VlblwgOwor5rqA5r2uIDwgbWFuY2hvdVwgOwor5ZqH5ZqHIDwga2Fra2FrdVwgOwor5ouT5aSnIDwgdGFrdWRhaVwgOwor5rqQ5rWBIDwgZ2Vucnl1dVwgOwor56mO6ISxIDwgZWlkYXRzdVwgOwor56qB56uvIDwgdG9wcGFuYVwgOwor6YW45oCn6ZuoIDwgc2Fuc2VpdVwgOwor6buE6ZuAIDwga291amFrdVwgOwor5ZaA55ewIDwga2FrdXRhblwgOwor6by76KGAIDwgaGFuYWRqaVwgOwor6Yyv57acIDwgc2FrdXNvdVwgOwor6KGT5LitIDwganV0Y2h1dVwgOwor5rS+55Sf6KqeIDwgaGFzZWlnb1wgOwor5rS+6ZalIDwgaGFiYXRzdVwgOwor6YG65Lyd5oCnIDwgaWRlbnNlaVwgOwor5Yy755mC6LK7IDwgaXJ5b3VoaVwgOwor5aSn56WW54i2IDwgZGFpc29mdVwgOwor6bq76ZuAIDwgbWF6ZWphblwgOwor56+G5Yi7IDwgdGVua29rdVwgOwor6LuN6I285YipIDwgZ3VuZGFyaVwgOwor5oiv5q2MIDwgemFyZXV0YVwgOwor5ZSQ6Ie8IDwga2FyYXVzdVwgOwor5rqA5rSyIDwgbWFuc2h1dVwgOwor5rm+5rWBIDwgd2Fucnl1dVwgOwor5ZaE546JIDwgemVuZGFtYVwgOwor56eB6YCaIDwgc2hpdHN1dVwgOwor56iu6IuXIDwgc2h1YnlvdVwgOwor55m95Lqc57SAIDwgaGFrdWFraVwgOwor5Li8IDwgZG9uYnVyaVwgOwor5rW36LOKIDwga2Fpem9rdVwgOwor56iu6IqLIDwgdGFuZWltb1wgOwor5oim5q20IDwgc2VucmVraVwgOwor6aiO6aas5oimIDwga2liYXNlblwgOwor55uu5LiA5p2vIDwgbWVpcHBhaVwgOwor5oyH5YCkIDwgc2FzaGluZVwgOwor6KiY5LqL5paHIDwga2lqaWJ1blwgOwor5rW36LGhIDwgc2VpdWNoaVwgOwor5oq85aOyIDwgb3NoaXVyaVwgOwor5ZOB6KmVIDwgaGlucHlvdVwgOwor5oOo6YW3IDwgemFua29rdVwgOwor5ZKM5aSq6byTIDwgd2FkYWlrb1wgOwor5oKq6aOfIDwgYWt1amlraVwgOwor6Juu55qEIDwgYmFudGVraVwgOwor5LqI5a6a5qGIIDwgeW90ZWlhblwgOwor56We6auEIDwgc2hpbnp1aVwgOwor6JiH6YmEIDwgc290ZXRzdVwgOwor6J+E5bGFIDwgY2hpa2t5b1wgOwor5oSa6KqsIDwgZ3VzZXRzdVwgOwor5oe45r+BIDwga2VuZGFrdVwgOwor5rqd5p2/IDwgZG9idWl0YVwgOwor56ym5Y+35ZmoIDwgZnVnb3VraVwgOwor5Zqi5LitIDwgbm91Y2h1dVwgOwor5pu46KiY6KOcIDwgc2hva2lob1wgOwor56eY6KijIDwgaGlrZXRzdVwgOwor56m655m9IDwga3V1aGFrdVwgOwor5b+c5o+05ZujIDwgb3VlbmRhblwgOwor6YG65Lyd5a2QIDwgaWRlbnNoaVwgOwor6Zmk6I2J5ZmoIDwgam9zb3VraVwgOwor6Jm56ImyIDwgbmlqaWlyb1wgOwor562W5a6aIDwgc2FrdXRlaVwgOwor5rWB6YCjIDwgcnl1dXJlblwgOwor56mN566XIDwgc2VraXNhblwgOwor5LqI5a6a5pelIDwgeW90ZWliaVwgOwor5oKq6Zi7IDwgdHN1d2FyaVwgOwor5oiv5puyIDwgZ2lreW9rdVwgOwor5L+d5oyB6ICFIDwgaG9qaXNoYVwgOwor5ouh5YWFIDwga2FrdWp1dVwgOwor56mA57KJIDwga29rdWZ1blwgOwor5ZSQ57O4IDwga2FyYWl0b1wgOwor6YmE6Y6aIDwgdGV0dHN1aVwgOwor56m655O2IDwga2FyYWJpblwgOwor5Y2Y5L2N5YWDIDwgdGFuaWdlblwgOwor5oSP5Zyw5oKqIDwgaWppd2FydVwgOwor5rqA5qCqIDwgbWFua2FidVwgOwor56eY6KGTIDwgaGlqdXRzdVwgOwor6JuL55m9IDwgdGFucGFrdVwgOwor5LiK5Ye65p2lIDwgam91ZGVraVwgOwor5ZGo6YGKIDwgc2h1dXl1dVwgOwor56ym5Y+35YyWIDwgZnVnb3VrYVwgOwor5ruF5bqmIDwgbWV0c3Vkb1wgOwor5rqA5pu0IDwgbWFuemFyYVwgOwor5ZGo6L66IDwgc2h1dWhlblwgOwor5oiQ5qGCIDwgbmFyaWtlaVwgOwor5rW36JuHIDwgdW1paGViaVwgOwor5rS76LevIDwga2F0c3Vyb1wgOwor6buS6LKCIDwga3Vyb3RlblwgOwor5LiN55u45b+cIDwgZnVzb3VvdVwgOwor6Yqt6JG1IDwgemVuaWFvaVwgOwor6Iux6Kqe54mIIDwgZWlnb2JhblwgOwor6YeN54Gr5ZmoIDwganV1a2FraVwgOwor5rOi6Z+zIDwgbmFtaW90b1wgOwor5pGp5Yip5pSvIDwgbWFyaXNoaVwgOwor56ic57eaIDwgcnlvdXNlblwgOwor55Ww56uv6KaWIDwgaXRhbnNoaVwgOwor5omN5b6zIDwgc2FpdG9rdVwgOwor56uL5qGIIDwgcml0c3VhblwgOwor6buZ6KqNIDwgbW9rdW5pblwgOwor56m654iGIDwga3V1YmFrdVwgOwor5ZCE6aeFIDwga2FrdWVraVwgOwor5oq85YWlIDwgb3NoaWlyZVwgOwor5re355SoIDwga29uJyd5b3VcIDsKK+a4pua9riA8IHV6dXNoaW9cIDsKK+iRrOWEgOWxiyA8IHNvdWdpeWFcIDsKK+mgheS9jee9riA8IGtvdWljaGlcIDsKK+mHo+mtmiA8IGNob3VneW9cIDsKK+aIkeaWuSA8IHdhZ2Fob3VcIDsKK+eptOeGiiA8IGFuYWd1bWFcIDsKK+aJgOW+lyA8IHNob3Rva3VcIDsKK+WMu+W4q+azlSA8IGlzaGlob3VcIDsKK+a6nOaBryA8IHRhbWVpa2lcIDsKK+aBremghiA8IGt5b3VqdW5cIDsKK+a8j+WIuyA8IHJvdWtva3VcIDsKK+iRoeiQhOWckiA8IGJ1ZG91ZW5cIDsKK+iWqemVtyA8IHNhdGNob3VcIDsKK+a1geiogCA8IHJ5dXVnZW5cIDsKK+aLheS7uyA8IHRhbicnbmluXCA7Civnq4vmmKUgPCByaXNzaHVuXCA7Civnqq/mpa0gPCB5b3VneW91XCA7CivmipzljrsgPCBiYWtreW91XCA7CivmuKnmtbQgPCBvbicneW9rdVwgOwor56aB6LazIDwga2luc29rdVwgOwor5rqW5oClIDwganVua3l1dVwgOwor5ZCD6Z+zIDwga2l0c3VvblwgOwor6YmE6LevIDwgdGV0c3Vyb1wgOwor5LqU5paX57GzIDwgZ290b2JlaVwgOwor56S+6ZW3IDwgc2hhY2hvdVwgOwor5ZCE6Z2iIDwga2FrdW1lblwgOwor6buS6KGAIDwga3Vyb2NoaVwgOwor5raI6ICXIDwgc2hvdW1vdVwgOwor56uj5oiQIDwgc2h1bnNlaVwgOwor6buS6J+7IDwga3Vyb2FyaVwgOwor5Y+v5oSb5rCXIDwga2F3YWlnZVwgOwor5rWB6KGMIDwgcnl1dWtvdVwgOwor56qS5q27IDwgY2hpc3NoaVwgOwor6YeR6auYIDwga2luZGFrYVwgOwor5LqU57ea6K2cIDwgZ29zZW5mdVwgOwor5ZCE6ZqOIDwga2FrdWthaVwgOwor56eL6I2JIDwgYWtpa3VzYVwgOwor5omN5a2mIDwgc2FpZ2FrdVwgOwor5b6h5bqc5YaFIDwgZ29mdW5haVwgOwor5a2Q6aas5bqnIDwga291bWF6YVwgOwor5oSJ6ImyIDwgeXVzaG9rdVwgOwor5bCP6Iql5a2QIDwga29rZXNoaVwgOwor5riF5r+BIDwgc2VpZGFrdVwgOwor5ZGo6KanIDwgc2h1dXJhblwgOwor5oGS5rip5ZmoIDwga291b25raVwgOwor5omA5bGeIDwgc2hvem9rdVwgOwor5oim5b25IDwgc2VuJydla2lcIDsKK+efpeaBteiAhSA8IGNoaWVzaGFcIDsKK+iWhOmbsiA8IHVzdWd1bW9cIDsKK+iWhOmbqiA8IHVzdXl1a2lcIDsKK+elnei+niA8IHNodWt1amlcIDsKK+aKkeWItiA8IHlva3VzZWlcIDsKK+aBi+miqCA8IGtvaWthemVcIDsKK+elnui8vyA8IG1pa29zaGlcIDsKK+mBuui0iOWIhiA8IGl6b3VidW5cIDsKK+m5v+i/vSA8IHNoaWthb2lcIDsKK+ellui/sCA8IHNvanV0c3VcIDsKK+aIiuaIjCA8IGJvanV0c3VcIDsKK+iWrOmFkiA8IHlha3VzaHVcIDsKK+WRquihkyA8IGp1anV0c3VcIDsKK+WPpOmhlCA8IGZ1cnVnYW9cIDsKK+WkquWIgOmtmiA8IHRhY2hpdW9cIDsKK+aJi+WmuyA8IHRlZHp1bWFcIDsKK+a3t+a/gSA8IGtvbmRha3VcIDsKK+WKqea8lOiAhSA8IGpvZW5zaGFcIDsKK+mHkemhjSA8IGtpbmdha3VcIDsKK+S7o+eQhumDqCA8IGRhaXJpYnVcIDsKK+aDqOiQvSA8IHNhbnJha3VcIDsKK+iYiuiThCA8IHVuY2hpa3VcIDsKK+mKgOiJsiA8IGdpbicnaXJvXCA7Civpuqbop5IgPCBiYWtrYWt1XCA7Civlj7DplqMgPCBkYWlrYWt1XCA7CivmuoDluK0gPCBtYW5zZWtpXCA7Civnp7vli5XkvZMgPCBpZG91dGFpXCA7CivpgYvli5XosrsgPCB1bmRvdWhpXCA7CivlpKnptZ3ntaggPCBiaXJvdWRvXCA7CivkuIDphbjljJYgPCBpc3NhbmthXCA7CivnpZ3os4AgPCBzaHVrdWdhXCA7CivmgqroqZUgPCBha3VoeW91XCA7CivmgqroqLMgPCBha3V5YWt1XCA7Civolarpm5EgPCBidXphdHN1XCA7Civpu5LojLYgPCBrdXJvY2hhXCA7CivnqI7nm64gPCB6ZWltb2t1XCA7CivpgaDot53pm6IgPCBlbmt5b3JpXCA7CivkvZDos4DnnIwgPCBzYWdha2VuXCA7CivnpLrpgZQgPCBqaXRhdHN1XCA7CivomY7nqbQgPCBrb2tldHN1XCA7Civpq5jpn7Ppg6ggPCBrb3VvbmJ1XCA7Civpjq7lrpogPCBjaGludGVpXCA7CivnlbDnq6/ogIUgPCBpdGFuc2hhXCA7CivnrZLkupUgPCB0c3V0c3VpXCA7Civlk7LnkIYgPCB0ZXRzdXJpXCA7CivpiI3otrMgPCBkb25zb2t1XCA7CivnqbrmobYgPCBrYXJhb2tlXCA7CivoloTpiI0gPCB1c3Vub3JvXCA7Civmh7LmgqogPCBjaG91YWt1XCA7CivnqbrmoKogPCBrdXVrYWJ1XCA7Civom67ml48gPCBiYW56b2t1XCA7CivnrJvlkLkgPCBmdWVmdWtpXCA7CivmhJ/ljJbpmaIgPCBrYW5rYWluXCA7Civnq5zlrq4gPCByeXV1Z3V1XCA7CivnpZ3oqIAgPCBzaHV1Z2VuXCA7CivmgaXovrEgPCBjaGlqb2t1XCA7CivkuI3mqZ/lq4wgPCBmdWtpZ2VuXCA7Civpg6jlpJbnp5ggPCBidWdhaWhpXCA7CivlloTmgqogPCB6ZW4nJ2FrdVwgOwor6YeN6Y6uIDwganV1Y2hpblwgOwor6JaE6YGHIDwgaGFrdWd1dVwgOwor5Lqc54ax5bivIDwgYW5ldHRhaVwgOwor5omL5Y+jIDwgdGVndWNoaVwgOwor5rKI6ZmNIDwgY2hpbmtvdVwgOwor5ZaE5b6zIDwgemVudG9rdVwgOwor5rer5qyyIDwgaW4nJ3lva3VcIDsKK+mKgOe0mSA8IGdpbmdhbWlcIDsKK+WvjOWjq+WxsSA8IGZ1amlzYW5cIDsKK+mItOiYrSA8IHN1enVyYW5cIDsKK+aIpuWfnyA8IHNlbicnaWtpXCA7CivlkJ/oqqYgPCBnaW5zaG91XCA7CivmjIfmj67miYAgPCBzaGlraWpvXCA7Civlk4Hnm64gPCBoaW5tb2t1XCA7CivphpzpoZ4gPCBzaHV1cnVpXCA7CivnlJ/phqTmsrkgPCBraWpvdXl1XCA7CivpioXnrpQgPCBkb3VoYWt1XCA7CivmiKblm70gPCBzZW5nb2t1XCA7CivmhJvnnYAgPCBhaWNoYWt1XCA7CivmtYTnkaDnkoMgPCBqb3VydXJpXCA7Civoo5zkvZDlrpggPCBob3Nha2FuXCA7CivpiI3op5IgPCBkb25rYWt1XCA7CivpuqbojLYgPCBtdWdpY2hhXCA7Civpu5Lnt5ogPCBrb2t1c2VuXCA7CivpgY7ljrvlvaIgPCBrYWtva2VpXCA7CivojYnku67lkI0gPCBzb3VnYW5hXCA7CivmhJrnm7QgPCBndWNob2t1XCA7CivpioDnrpQgPCBnaW5wYWt1XCA7Civol6ToibIgPCBmdWppaXJvXCA7CivmiLjlj6MgPCB0b2d1Y2hpXCA7Civnqbrmj5ogPCBrYXJhYWdlXCA7CivpioDnrJsgPCBnaW50ZWtpXCA7CivlvqHmqZ/lq4wgPCBnb2tpZ2VuXCA7CivnrKzkuIAgPCBkYWlpY2hpXCA7Civph47pgZMgPCBub21pY2hpXCA7CivllJDmrYwgPCBrYXJhdXRhXCA7CivlkIzoqr8gPCBkb3VjaG91XCA7CivkuI3lsaXooYwgPCBmdXJpa291XCA7CivlkIjoqr8gPCBnb3VjaG91XCA7Civlj6PovKogPCBrdWNoaXdhXCA7Civlv6DprYIgPCBjaHV1a29uXCA7CivlkIToq5YgPCBrYWt1cm9uXCA7CivlkIjoqZUgPCBnYXBweW91XCA7Civlj5nov7AgPCBqb2p1dHN1XCA7Civnq4vloLQgPCB0YWNoaWJhXCA7CivllJDmp5ggPCBrYXJheW91XCA7CivpmL/lvJfliKnliqAgPCBhZnVyaWthXCA7CivpurvnuIQgPCBhc2FuYXdhXCA7CivptrrptJIgPCBzZWtpcmVpXCA7Civmgqroh60gPCBha3VzaHV1XCA7Civmk6zkurrljJYgPCBnaWppbmthXCA7CivnqY3mnKggPCB0c3VtaWtpXCA7CivmupbliYcgPCBqdW5zb2t1XCA7Civpjq7lj7AgPCBjaGluZGFpXCA7CivliIbluqblmaggPCBidW5kb2tpXCA7CivmsojphZQgPCBjaGluc3VpXCA7Civpu5nnpbcgPCBtb2t1dG91XCA7Civph5HotaQgPCBraW4nJ2FrYVwgOwor56uL5Zu9IDwgcmlra29rdVwgOwor5omL5LitIDwgc2h1Y2h1dVwgOwor5omL5LiLIDwgdGVzaGl0YVwgOwor5Y+O6LyJIDwgc2h1dXNhaVwgOwor5Ye655uu6YeRIDwgZGVtZWtpblwgOwor5aSc5rG96LuKIDwgeW9naXNoYVwgOwor5rqA5Y2TIDwgbWFudGFrdVwgOwor5bem5rS+57O7IDwgc2FoYWtlaVwgOwor5rim5be7IDwgdXp1bWFraVwgOwor5rW354yrIDwgdW1pbmVrb1wgOwor5oSa54mpIDwgZ3VidXRzdVwgOwor6YeN6LKsIDwganV1c2VraVwgOwor6by75rGXIDwgaGFuYWFzZVwgOwor5oCl6YCBIDwga3l1dXNvdVwgOwor5ZaE5aWzIDwgemVuJydueW9cIDsKK+mJm+ethiA8IGVucGl0c3VcIDsKK+aIkuWQjSA8IGthaW15b3VcIDsKK+WOhOmboyA8IHlha3VuYW5cIDsKK+a1t+eJmyA8IGthaWd5dXVcIDsKK+iWrOiOoiA8IHlha2t5b3VcIDsKK+m8u+atjCA8IGhhbmF1dGFcIDsKK+aGkeaLoCA8IGh5b3VreW9cIDsKK+mJhOe0oiA8IHRlc3Nha3VcIDsKK+WPjei2iiA8IGhhbmV0c3VcIDsKK+WQueiBtCA8IGZ1aWNob3VcIDsKK+a5r+WPoyA8IHl1Z3VjaGlcIDsKK+WPpOiqrCA8IGtvc2V0c3VcIDsKK+awtOmjtCA8IG1penVhbWVcIDsKK+WNs+mhjCA8IHNva3VkYWlcIDsKK+WPo+iqrCA8IGt1emV0c3VcIDsKK+ipkOasuue9qiA8IHNhZ2l6YWlcIDsKK+eoruadvyA8IHRhbmVpdGFcIDsKK+iZq+awlyA8IG11c2hpa2VcIDsKK+epuuW4rSA8IGt1dXNla2lcIDsKK+a4rOWumiA8IHNva3V0ZWlcIDsKK+mlgumjqeWxiyA8IHVkb24nJ3lhXCA7Civmub7lhoUgPCB3YW4nJ25haVwgOwor5oSV54S2IDwgZ2FrdXplblwgOwor56iu5pysIDwgdGFuZWhvblwgOwor5Y+O6LOEIDwgc2h1dXdhaVwgOwor5aSi5oOz5a62IDwgbXVzb3VrYVwgOwor6KiY6K2c5rOVIDwga2lmdWhvdVwgOwor5LiA5q275b6MIDwgaXNzaGlnb1wgOwor6YeN6KizIDwganV1eWFrdVwgOwor6YiN6ImyIDwgbmliaWlyb1wgOwor5rex5oWuIDwgc2hpbnJ5b1wgOwor6Z2e6KGb55SfIDwgaGllaXNlaVwgOwor56iu5pePIDwgc2h1em9rdVwgOwor6YeM6KaqIDwgc2F0b295YVwgOwor6buS55ejIDwga3Vyb2F6YVwgOwor6YaL6YW4IDwgc2FrdXNhblwgOwor6bqm56ybIDwgbXVnaWJ1ZVwgOwor5ZCb6IejIDwga3Vuc2hpblwgOwor5rSe56m0IDwgaG9yYWFuYVwgOwor6Kqk5oqV5LiLIDwgZ290b3VrYVwgOwor5rW45r2kIDwgc2hpbmp1blwgOwor5Y+k6KGAIDwgZnVydWNoaVwgOwor5oaC5oiaIDwgeXV1c2VraVwgOwor5ZCr576eIDwgZ2Fuc2h1dVwgOwor56m65bCGIDwga3V1c2hvdVwgOwor5rC06Zm4IDwgc3VpcmlrdVwgOwor5LiN6Ieq55SxIDwgZnVqaXl1dVwgOwor5rWB55SoIDwgcnl1dXlvdVwgOwor5rqA5LqGIDwgbWFucnlvdVwgOwor5rWB55SjIDwgcnl1dXphblwgOwor56mN5oKqIDwgc2VraWFrdVwgOwor6Ymb55u0IDwgZW5jaG9rdVwgOwor44CDIDwgb25hamlrdVwgOwor5oKq562WIDwgYWt1c2FrdVwgOwor6bqm56eLIDwgbXVnaWFraVwgOwor6YeR6J6NIDwga2luJyd5dXVcIDsKK+iLseaVsOWtlyA8IGVpc3V1amlcIDsKK+W/hemcgCA8IGhpdHN1anVcIDsKK+elnue1jCA8IHNoaW5rZWlcIDsKK+WPjeimhiA8IGhhbnB1a3VcIDsKK+eqgeWmgiA8IHRvdHN1am9cIDsKK+a2suaZtiA8IGVraXNob3VcIDsKK+WQjOiFuSA8IGRvdWZ1a3VcIDsKK+epjeW8iiA8IHNla2loZWlcIDsKK+iZmualrSA8IGt5b2d5b3VcIDsKK+ayueiPnCA8IGFidXJhbmFcIDsKK+WNiumhjSA8IGhhbmdha3VcIDsKK+axuuitsCA8IGtldHN1Z2lcIDsKK+mJhOefsyA8IHRlc3Nla2lcIDsKK+W/q+mBqSA8IGthaXRla2lcIDsKK+mFt+mBhyA8IGtva3VndXVcIDsKK+m7meeEtiA8IG1va3VuZW5cIDsKK+mFqumFuCA8IHJha3VzYW5cIDsKK+mHieiWrCA8IHl1dXlha3VcIDsKK+WRiuefpSA8IGtva3VjaGlcIDsKK+efpeaDheaEjyA8IGNoaWpvdWlcIDsKK+miqOWRguahtiA8IGZ1cm9va2VcIDsKK+aBi+iNiSA8IGtvaWd1c2FcIDsKK+a1puazoiA8IHVyYW5hbWlcIDsKK+iWrOexoCA8IHlha3Vyb3VcIDsKK+iLseiqnuWcjyA8IGVpZ29rZW5cIDsKK+epuuWcpyA8IGt1dWF0c3VcIDsKK+S9jumfs+mDqCA8IHRlaW9uYnVcIDsKK+eni+awtCA8IHNodXVzdWlcIDsKK+WPs+iFlSA8IG1pZ2l1ZGVcIDsKK+WPo+iMtiA8IGt1Y2hpamFcIDsKK+W+kumjnyA8IHRvc2hva3VcIDsKK+mFqui+siA8IHJha3Vub3VcIDsKK+iWhOiCiSA8IHVzdW5pa3VcIDsKK+WMl+muriA8IGhva3VzZW5cIDsKK+m7hOeGnyA8IGtvdWp1a3VcIDsKK+S6jOacn+WItiA8IG5pa2lzZWlcIDsKK+WPjuiUtSA8IHNodXV6b3VcIDsKK+a1tOanvSA8IHlva3Vzb3VcIDsKK+mHkeiJsiA8IGtvbmppa2lcIDsKK+aTrOWjsOiqniA8IGdpc2VpZ29cIDsKK+WOn+iouyA8IGdlbmNodXVcIDsKK+aCqueXhyA8IGFrdXNob3VcIDsKK+aCqueXhSA8IGFrdWJ5b3VcIDsKK+WMlumqqCA8IGtha290c3VcIDsKK+mHjOiKiyA8IHNhdG9pbW9cIDsKK+WPjeiQvSA8IGhhbnJha3VcIDsKK+W/g+mFjSA8IHNoaW5wYWlcIDsKK+awt+i8qiA8IGh5b3VyaW5cIDsKK+aEn+acjSA8IGthbnB1a3VcIDsKK+avkumtmiA8IGRva3VneW9cIDsKK+engeassiA8IHNoaXlva3VcIDsKK+m5v+egpiA8IHJva3VzYWlcIDsKK+eUqOWLmeWToSA8IHlvdW11aW5cIDsKK+eqruS5jyA8IGt5dXVib3VcIDsKK+a3seWknCA8IHNoaW4nJ3lhXCA7Civnorroqo0gPCBrYWt1bmluXCA7CivmuJvlj44gPCBnZW5zaHV1XCA7CivolqznpLwgPCB5YWt1cmVpXCA7CivpjKjlnLAgPCBieW91Y2hpXCA7CivoloTnuIEgPCB1c3ViZXJpXCA7CivlvqHoi6blirQgPCBnb2t1cm91XCA7CivmnKrnmbvoqJggPCBtaXRvdWtpXCA7CivnsKHmmJPljJYgPCBrYW4nJ2lrYVwgOwor6JaE57W5IDwgdXN1Z2ludVwgOwor5b+r6Ku+IDwga2FpZGFrdVwgOwor5YyX6aKoIDwgaG9rdWZ1dVwgOwor5LiA6YGO5oCnIDwgaWtrYXNlaVwgOwor6YeN6IG0IDwganV1Y2hvdVwgOwor6YqY5p+EIDwgbWVpZ2FyYVwgOwor5oKq546JIDwgYWt1ZGFtYVwgOwor56eY5puyIDwgaGlreW9rdVwgOwor6JaE57SZIDwgdXN1Z2FtaVwgOwor6JaE57SFIDwgdXN1YmVuaVwgOwor6YGL6YCB6LK7IDwgdW5zb3VoaVwgOwor5riL5ZGzIDwgc2hpYnVtaVwgOwor5Y2X6YCyIDwgbmFuc2hpblwgOwor5Yy75bir5LyaIDwgaXNoaWthaVwgOwor6YqY5pyoIDwgbWVpYm9rdVwgOwor5ZCN56ewIDwgbWVpc2hvdVwgOwor5rWB5rGXIDwgcnl1dWthblwgOwor5YyX6Z2iIDwgaG9rdW1lblwgOwor5oKJ55qGIDwgc2hpa2thaVwgOwor5rWB5rC0IDwgcnl1dXN1aVwgOwor6Ieq5Y+Z5LydIDwgamlqb2RlblwgOwor56qB5YWIIDwgdG9zc2FraVwgOwor5rS75rOBIDwga2Fra3lvdVwgOwor6YeI576pIDwgc2hha3VnaVwgOwor5aSp5rCX5bGLIDwgdGVua2l5YVwgOwor6Zuj5piT5bqmIDwgbmFuJydpZG9cIDsKK+WQieelpSA8IGtpc3Nob3VcIDsKK+ehq+mFuCA8IHJ5dXVzYW5cIDsKK+W8sem9oiA8IGpha3VyZWlcIDsKK+azoeebmyA8IGF3YW1vcmlcIDsKK+WMl+mZkCA8IGhva3VnZW5cIDsKK+eni+aZtCA8IGFraWJhcmVcIDsKK+eptOWHuSA8IGFuYWJva29cIDsKK+mHkee2siA8IGthbmFhbWlcIDsKK+WPt+esmyA8IGdvdXRla2lcIDsKK+ibh+WPoyA8IGphZ3VjaGlcIDsKK+a3keWlsyA8IHNodWt1am9cIDsKK+WPjOe/vCA8IHNvdXlva3VcIDsKK+S7ruaVsOmDqCA8IGthc3V1YnVcIDsKK+WNiui+siA8IGhhbicnbm91XCA7CivpiI3nl5sgPCBkb250c3V1XCA7CivljYHlrZfot68gPCBqdXVqaXJvXCA7CivljJfploAgPCBraXRhbW9uXCA7CivlkLjniakgPCBzdWltb25vXCA7CivljYHpgLIgPCBqaXNzaGluXCA7CivolqznlKggPCB5YWt1eW91XCA7CivpioDmnY8gPCBnaW4nJ25hblwgOwor5rih5LuPIDwgdG9mdXRzdVwgOwor56OK6JC9IDwgcmFpcmFrdVwgOwor6Jma5b+DIDwga3lvc2hpblwgOwor5rSX5ruMIDwgc2VuZGVraVwgOwor5rSl5rOiIDwgdHN1bmFtaVwgOwor5rKW57iEIDwgb2tpbmF3YVwgOwor5rCR6LiKIDwgbWluJyd5b3VcIDsKK+iZmuW8sSA8IGt5b2pha3VcIDsKK+WPpOethiA8IGtvaGl0c3VcIDsKK+W+jOmHnCA8IGF0b2dhbWFcIDsKK+mHjeevpCA8IGp1dXRva3VcIDsKK+a3u+WJiiA8IHRlbnNha3VcIDsKK+mHkeetiyA8IGtpbnN1amlcIDsKK+W+l+mBkyA8IHRva3Vkb3VcIDsKK+iyoOespuWPtyA8IGZ1ZnVnb3VcIDsKK+mHjeeusSA8IGp1dWJha29cIDsKK+WQhOecjCA8IGtha3VrZW5cIDsKK+WPr+elnSA8IGthc2hpa3VcIDsKK+WQjOeXhSA8IGRvdWJ5b3VcIDsKK+Wkp+W+oeaJgCA8IG9vZ29zaG9cIDsKK+WPjue0jSA8IHNodXVub3VcIDsKK+epuuS4rSA8IGt1dWNodXVcIDsKK+m7kuadvyA8IGtva3ViYW5cIDsKK+iXgeeBsCA8IHdhcmFiYWlcIDsKK+WIhuW4g+WbsyA8IGJ1bnB1enVcIDsKK+mKg+aSgyA8IGp1dWdla2lcIDsKK+efs+mvmyA8IGlzaGlkYWlcIDsKK+mGnOiBniA8IHNodXVidW5cIDsKK+ijveWbs+WutiA8IHNlaXp1a2FcIDsKK+W+jOmAuCA8IGtvdWl0c3VcIDsKK+WPsOefsyA8IGRhaWlzaGlcIDsKK+WNk+irliA8IHRha3Vyb25cIDsKK+auv+mWoyA8IGRlbmtha3VcIDsKK+iWhOeariA8IHVzdWthd2FcIDsKK+aIpuaZguS4iyA8IHNlbmppa2FcIDsKK+WOmuiHvCA8IGF0c3V1c3VcIDsKK+WNmuimpyA8IGhha3VyYW5cIDsKK+Wkqeawl+WbsyA8IHRlbmtpenVcIDsKK+WNmOinkiA8IHRhbmtha3VcIDsKK+iZjuW3uyA8IHRvcmFrYW5cIDsKK+W9k+mZkCA8IHRvdWdpcmlcIDsKK+epjeWIhiA8IHNla2lidW5cIDsKK+mMr+S5sSA8IHNha3VyYW5cIDsKK+m7kuaWkSA8IGtva3VoYW5cIDsKK+ayu+eZgiA8IGNoaXJ5b3VcIDsKK+WNmOikhyA8IHRhbnB1a3VcIDsKK+aui+mrmCA8IHphbmRha2FcIDsKK+mJhOapiyA8IHRla2t5b3VcIDsKK+i7jeS6i+iyuyA8IGd1bmppaGlcIDsKK+a3t+S9nCA8IGtvbnNha3VcIDsKK+mHkeefsyA8IGtpbnNla2lcIDsKK+eCjuWkqeS4iyA8IGVudGVua2FcIDsKK+S7iuaXpeaYjuaXpSA8IGt5b3Vhc3VcIDsKK+WPjueojiA8IHNodXV6ZWlcIDsKK+aDnOaVlyA8IHNla2loYWlcIDsKK+eosuWPoiA8IGluYW11cmFcIDsKK+a1ruW9qyA8IHVraWJvcmlcIDsKK+W+jOi2syA8IGF0b2FzaGlcIDsKK+WMl+i+uiA8IGhva3VoZW5cIDsKK+iCpea6gOWFkCA8IGhpbWFuamlcIDsKK+mHo+eTtiA8IHRzdXJ1YmVcIDsKK+a1qua8q+a0viA8IHJvbWFuaGFcIDsKK+aFn+WTrSA8IGRvdWtva3VcIDsKK+aDkeaYnyA8IHdha3VzZWlcIDsKK+WNiuilnyA8IGhhbicnZXJpXCA7Civotbfph43mqZ8gPCBraWp1dWtpXCA7CivlnKfnoJXmqZ8gPCBhc3NhaWtpXCA7CivmrbvprYQgPCBzaGloYWt1XCA7Civlm57ot6/lm7MgPCBrYWlyb3p1XCA7CivnorrogZ4gPCBrYWt1YnVuXCA7CivmgYvnl4UgPCBrb2l5YW1pXCA7Civph5HnmoQgPCBraW50ZWtpXCA7CivljYroopYgPCBoYW5zb2RlXCA7CivlkLjmrrsgPCBzdWlnYXJhXCA7CivomavlnoIgPCBjaHV1c3VpXCA7CivmsJHooYYgPCBtaW5zaHV1XCA7CivlhbXlmajluqsgPCBoZWlraWtvXCA7CivpiYTmn7EgPCB0ZXRjaHV1XCA7Civmr47pgLEgPCBtYWlzaHV1XCA7CivmrovpoY0gPCB6YW5nYWt1XCA7Civmga/ngb0gPCBzb2t1c2FpXCA7CivlspDpmJznnIwgPCBnaWZ1a2VuXCA7CivlvLHpm7sgPCBqYWt1ZGVuXCA7CivolLXnsbMgPCBrdXJhbWFpXCA7CivmtbflsbEgPCB1bWl5YW1hXCA7Civmrovpn78gPCB6YW5reW91XCA7CivmtIvmpb0gPCB5b3VnYWt1XCA7Civph43nl4UgPCBqdXVieW91XCA7CivolqzmtrIgPCB5YWt1ZWtpXCA7CivoloTniakgPCB1c3Vtb25vXCA7CivoloTniYcgPCBoYWt1aGVuXCA7Civms6XmtbcgPCBkb3JvdW1pXCA7Civlurbli5noqrIgPCBzaG9tdWthXCA7CivlvqHooosgPCBvZnVrdXJvXCA7CivmsLToirggPCBtaXp1Z2VpXCA7CivljbPoiIggPCBzb2treW91XCA7Civnp5jlr4YgPCBoaW1pdHN1XCA7CivljbXohpwgPCByYW5tYWt1XCA7Civlj43nm64gPCBoYW5tb2t1XCA7CivmsLToibIgPCBtaXp1aXJvXCA7Civpm6LnuIHnirYgPCByaWVuam91XCA7CivolYPnpZ4gPCBiYW5zaGluXCA7Civph53nirYgPCBoYXJpam91XCA7Civmronpm6MgPCBqdW4nJ25hblwgOwor5b6L6KqeIDwgcml0c3Vnb1wgOwor5oGL54yrIDwga29pbmVrb1wgOwor5ZKM5byPIDwgd2FzaGlraVwgOwor5Y2Y6JGJIDwgdGFuJyd5b3VcIDsKK+m7meW+kyA8IG1va3VqdXVcIDsKK+mHkeeOiSA8IGtpbnRhbWFcIDsKK+mKgOW5lSA8IGdpbm1ha3VcIDsKK+efoumdoiA8IHlhb21vdGVcIDsKK+eojuWPjiA8IHplaXNodXVcIDsKK+eosuS9nCA8IGluYXNha3VcIDsKK+a0i+acjSA8IHlvdWZ1a3VcIDsKK+ato+imj+WMliA8IHNlaWtpa2FcIDsKK+WNsOiCiSA8IGluJyduaWt1XCA7CivmgKfnmZYgPCBzZWloZWtpXCA7CivlvIHpp4EgPCBiZW5wYWt1XCA7CivomK3lraYgPCByYW5nYWt1XCA7CivlkI3mtYEgPCBtZWlyeXV1XCA7CivmgbXmsqIgPCBrZWl0YWt1XCA7CivlvaLot6EgPCBrZWlzZWtpXCA7CivlkIzmtYEgPCBkb3VyeXV1XCA7CivlvJTpm7sgPCBjaG91ZGVuXCA7CivokL3pm7cgPCByYWt1cmFpXCA7Civlj4znkqcgPCBzb3VoZWtpXCA7CivmgqrmlrkgPCBha3VnYXRhXCA7CivlkIjmtYEgPCBnb3VyeXV1XCA7CivokL3pm4EgPCByYWt1Z2FuXCA7CivnpL7mrbQgPCBzaGFyZWtpXCA7CivokL3pmb0gPCByYWt1eW91XCA7Civph43niIYgPCBqdXViYWt1XCA7Civku4rlh7rmnaUgPCBpbWFkZWtpXCA7Civpu5LluK8gPCBrdXJvb2JpXCA7Civlj5nniLUgPCBqb3NoYWt1XCA7CivljJfopb8gPCBob2t1c2VpXCA7CivmpJzms6LlmaggPCBrZW5wYWtpXCA7Civlj6PngasgPCBrdWNoaWJpXCA7Civlj5TniLYgPCBzaHVrdWZ1XCA7Civms6Xmo5IgPCBkb3JvYm91XCA7CivmsYHnsokgPCBzaGlydWtvXCA7CivlvLHphbggPCBqYWt1c2FuXCA7CivolLXnm7ggPCB6b3VzaG91XCA7CivljYPojYkgPCBjaGlndXNhXCA7CivlkKvmnIkgPCBnYW4nJ3l1dVwgOwor5Y+N54mpIDwgdGFubW9ub1wgOwor6bOl6aGeIDwgY2hvdXJ1aVwgOwor5byB6ZujIDwgYmVuJyduYW5cIDsKK+WNs+e0jSA8IHNva3Vub3VcIDsKK+ekvualrSA8IHNoYWd5b3VcIDsKK+awl+iEiCA8IGtpbXlha3VcIDsKK+ekvOalvSA8IHJlaWdha3VcIDsKK+avjeimqiA8IGhhaGFveWFcIDsKK+enu+WHuiA8IGlzaHV0c3VcIDsKK+W+s+iCsiA8IHRva3Vpa3VcIDsKK+ejgeefsyA8IGppc2hha3VcIDsKK+a2iOWOuyA8IHNob3VreW9cIDsKK+mGnOeUtyA8IGJ1b3Rva29cIDsKK+egtOijgiA8IGhhcmV0c3VcIDsKK+a2iOWNsCA8IGtlc2hpaW5cIDsKK+WQjOalrSA8IGRvdWd5b3VcIDsKK+engeWhviA8IHNoaWp1a3VcIDsKK+aCquaIryA8IGl0YXp1cmFcIDsKK+WLlei7uCA8IGRvdWppa3VcIDsKK+eip+epuiA8IGhla2lrdXVcIDsKK+WKiOmgrSA8IGhla2l0b3VcIDsKK+iYreWbvSA8IHJhbmtva3VcIDsKK+WNs+etlCA8IHNva3V0b3VcIDsKK+S4i+S7mOmHkSA8IGthZnVraW5cIDsKK+mJhOW/gyA8IHRlc3NoaW5cIDsKK+avm+iZqyA8IGtlbXVzaGlcIDsKK+mBv+mbo+aJgCA8IGhpbmFuam9cIDsKK+aBi+aysyA8IGtvaWthd2FcIDsKK+mFjee1piA8IGhhaWt5dXVcIDsKK+WQjOagvCA8IGRvdWtha3VcIDsKK+eJh+aEj+WcsCA8IGthdGFpamlcIDsKK+iWrOaWuSA8IHlha3Vob3VcIDsKK+a0u+WtlyA8IGthdHN1amlcIDsKK+WTgOWIpSA8IGFpYmV0c3VcIDsKK+W+kuiKsSA8IGFkYWJhbmFcIDsKK+ekvOacjSA8IHJlaWZ1a3VcIDsKK+aBi+awtCA8IGtvaW1penVcIDsKK+WTgOWIhyA8IGFpc2V0c3VcIDsKK+WQiOagvCA8IGdvdWtha3VcIDsKK+a1t+WOnyA8IHVuYWJhcmFcIDsKK+m6u+WxkSA8IGFzYWt1enVcIDsKK+WPpOaxoCA8IGZ1cnVpa2VcIDsKK+aEmuWKoyA8IGd1cmV0c3VcIDsKK+efrei7uCA8IHRhbmppa3VcIDsKK+mGnOeKtiA8IHNodXVqb3VcIDsKK+WQhOagoSA8IGtha3Vrb3VcIDsKK+aBi+atuyA8IGtvaWppbmlcIDsKK+aCquW+syA8IGFrdXRva3VcIDsKK+awl+e1tiA8IGtpemV0c3VcIDsKK+ayiOa+sSA8IGNoaW5kZW5cIDsKK+WKiOmWiyA8IGhla2lrYWlcIDsKK+WPpOatjCA8IGZ1cnV1dGFcIDsKK+iQvemBuCA8IHJha3VzZW5cIDsKK+WJr+mhjCA8IGZ1a3VkYWlcIDsKK+W8j+mDqCA8IHNoaWtpYnVcIDsKK+WNnOetriA8IGJva3V6ZWlcIDsKK+WMu+WtpumDqCA8IGlnYWt1YnVcIDsKK+WRguW+iyA8IHJvcmV0c3VcIDsKK+iRiei6qyA8IHlvdXNoaW5cIDsKK+W+kOiEiCA8IGpvbXlha3VcIDsKK+eip+ecvCA8IGhla2lnYW5cIDsKK+W+jOiFuSA8IGF0b2JhcmFcIDsKK+attOmBiiA8IHJla2l5dXVcIDsKK+S6iOWgsemfsyA8IHlvaG91b25cIDsKK+W9rOiUmiA8IGhpbnV0c3VcIDsKK+emheWvuiA8IHplbmRlcmFcIDsKK+miqOWRguS7oyA8IGZ1cm9kYWlcIDsKK+atu+i7uCA8IHNoaWppa3VcIDsKK+a1geWfnyA8IHJ5dXVpa2lcIDsKK+W+jOefpeaBtSA8IGF0b2RqaWVcIDsKK+m2tOenkSA8IHRzdXJ1a2FcIDsKK+aBreaVrCA8IGt5b3VrZWlcIDsKK+axjueUqCA8IGhhbicneW91XCA7Civlt67mqZ/plqIgPCBzYWtpa2FuXCA7Civlj5Tmr40gPCBzaHVrdWJvXCA7Civnp4DlkJ8gPCBzaHV1Z2luXCA7CivliY3pq6ogPCBtYWVnYW1pXCA7CivlkoDlmrwgPCBzb3NoYWt1XCA7CivmrrromasgPCBzYXRjaHV1XCA7Civli6TooYwgPCBnb25neW91XCA7CivoqZDmrLrluKsgPCBzYWdpc2hpXCA7CivljbXnmb0gPCByYW5wYWt1XCA7Civph5Hmo5IgPCBrYW5hYm91XCA7CivluqfpqqggPCB6YWtvdHN1XCA7CivlvrTnqI4gPCBjaG91emVpXCA7CivlirTos4MgPCByb3VjaGluXCA7CivlkIjmjowgPCBnYXNzaG91XCA7CivlpJbnpZbniLYgPCBnYWlzb2Z1XCA7Civli4XoqLEgPCBjaG9ra3lvXCA7Civnn63oqZUgPCB0YW5weW91XCA7Civoq5bnkIblkowgPCByb25yaXdhXCA7Civnp5jku48gPCBoaWJ1dHN1XCA7Civph47llrblnLAgPCB5YWVpY2hpXCA7CivmtbfkuoAgPCB1bWlnYW1lXCA7CivpgoHpgLIgPCBtYWlzaGluXCA7Civpm7Dlm7LmsJcgPCBmdW4nJ2lraVwgOwor5Zug576O57eaIDwgaW5iaXNlblwgOwor5Y+k5pysIDwgZnVydWJvblwgOwor5Y+N5qeYIDwga2Fpc2FtYVwgOwor5rCR56aPIDwgbWlucHVrdVwgOwor5rCX5LiI5aSrIDwga2lqb3VidVwgOwor5Yid5pyf5YyWIDwgc2hva2lrYVwgOwor6YGF6ZycIDwgb3Nvamltb1wgOwor5rSb5aSWIDwgcmFrdWdhaVwgOwor6YWS55mWIDwgc2h1aGVraVwgOwor6YKq6KqsIDwgamFzZXRzdVwgOwor5rCP56WeIDwgdWppZ2FtaVwgOwor5q616JC9IDwgZGFucmFrdVwgOwor5ZG75ZCfIDwgc2hpbmdpblwgOwor6YmE5aOBIDwgdGVwcGVraVwgOwor56eL5L2cIDwgYWtpc2FrdVwgOwor5Yy656uLIDwga3VyaXRzdVwgOwor5ZCE5omAIDwga2FrdXNob1wgOwor5oOo5YqHIDwgc2FuZ2VraVwgOwor5oGL5paHIDwga29pYnVtaVwgOwor5rOV5oKmIDwgaG91ZXRzdVwgOwor6YKm6KizIDwgaG91eWFrdVwgOwor5rC055CDIDwgc3Vpa3l1dVwgOwor5rWm5Lq6IDwgdXJhYml0b1wgOwor6YqA5YG0IDwgZ2luZ2F3YVwgOwor5Y+W5pu/IDwgdG9yaWthZVwgOwor5q2p6KGM5ZmoIDwgaG9rb3VraVwgOwor5YmN6ZmzIDwgemVuY2hpblwgOwor55+z6J2LIDwgc2VraXJvdVwgOwor6JOs55SfIDwgeW9tb2dpdVwgOwor5rWB5YuVIDwgcnl1dWRvdVwgOwor5rmv6LGG6IWQIDwgeXVkb3VmdVwgOwor6KOP6IOM5oi4IDwgdXJhc2Vkb1wgOwor6YCG6bGXIDwgZ2VraXJpblwgOwor55+l6KGMIDwgY2hpZ3lvdVwgOwor5ZCM5b25IDwgZG91eWFrdVwgOwor6YW45ry/IDwgaG9venVraVwgOwor5q206KanIDwgcmVraXJhblwgOwor5rC054miIDwgbWl6dXJvdVwgOwor5rC054mbIDwgc3VpZ3l1dVwgOwor5pS+55Sf5LyaIDwgaG91am91ZVwgOwor6IKy5YWQ6ZmiIDwgaWt1amlpblwgOwor5LiN5L2c54K6IDwgZnVzYWt1aVwgOwor6bOl6LKdIDwgdG9yaWdhaVwgOwor5rC054iGIDwgc3VpYmFrdVwgOwor5q2m6KOF5YW3IDwgYnVzb3VndVwgOwor5YyX57GzIDwgaG9rdWJlaVwgOwor5LiL6aeE55WqIDwgZ2V0YWJhblwgOwor5Y2T55SoIDwgdGFrdXlvdVwgOwor5Ym96Lu9IDwgaHlvdWtpblwgOwor5ZKO5Lq6IDwgdG9nYW5pblwgOwor6JGJ6JyCIDwgaGFiYWNoaVwgOwor5b6z55SoIDwgdG9rdXlvdVwgOwor5Y2B55uuIDwganV1bW9rdVwgOwor5ZCM5bitIDwgZG91c2VraVwgOwor55yf6buSIDwgbWFra3Vyb1wgOwor6Ieq5YuV5YyWIDwgamlkb3VrYVwgOwor5Yqj6KeSIDwgcmVra2FrdVwgOwor6Jas5a6zIDwgeWFrdWdhaVwgOwor56aE5ZG9IDwgcm9rdW1laVwgOwor5Yi76ZmQIDwga29rdWdlblwgOwor5ZCb5a+1IDwga3VuY2hvdVwgOwor5ZCE5bqXIDwga2FrdXRlblwgOwor5Y2T55CDIDwgdGFra3l1dVwgOwor54Sh6YGg5oWuIDwgYnVlbnJ5b1wgOwor6YGL5YuV5aC0IDwgdW5kb3ViYVwgOwor5a626KiI6LK7IDwga2FrZWloaVwgOwor56aA5ZGKIDwgcmlua29rdVwgOwor5ZGo5YiwIDwgc2h1dXRvdVwgOwor5rGX5rC0IDwgYXNlbWl6dVwgOwor5YyX56uvIDwgaG9rdXRhblwgOwor6Z+z5qW95a62IDwgb25nYWtrYVwgOwor6buS5Lq6IDwga29rdWppblwgOwor5b2856iLIDwgYXJlaG9kb1wgOwor6YGT6L66IDwgbWljaGliZVwgOwor5q2m6KGTIDwgYnVqdXRzdVwgOwor5aSW56WW5q+NIDwgZ2Fpc29ib1wgOwor5q6L6I+KIDwgemFuZ2lrdVwgOwor5rKh5oiRIDwgYm90c3VnYVwgOwor5rWB5LqhIDwgcnl1dWJvdVwgOwor5Yq05YuZ6KqyIDwgcm91bXVrYVwgOwor5Yid6Z+zIDwgaGF0c3VuZVwgOwor6YO956uLIDwgdG9yaXRzdVwgOwor5Yil6ZuiIDwgYmV0c3VyaVwgOwor5b6T55qEIDwganV1dGVraVwgOwor56C056u5IDwgaGFjaGlrdVwgOwor6JK855m9IDwgc291aGFrdVwgOwor5rC05ru0IDwgc3VpdGVraVwgOwor5Yqb6KGMIDwgcnlva2tvdVwgOwor54Sh6LuM6YGTIDwgbXVraWRvdVwgOwor6YG46KmVIDwgc2VucHlvdVwgOwor56Sr5bKpIDwgcmVraWdhblwgOwor5ZCE5bGkIDwga2FrdXNvdVwgOwor5Yil6ZmiIDwgYmV0c3VpblwgOwor5YqH6KmpIDwgZ2VraXNoaVwgOwor6YmE5YmHIDwgdGVzc29rdVwgOwor6YGF6YCfIDwgY2hpc29rdVwgOwor56Kn5rC0IDwgaGVraXN1aVwgOwor55+z6Ie8IDwgaXNoaXVzdVwgOwor5bm06aGNIDwgbmVuZ2FrdVwgOwor5Yil6ZaTIDwgYmV0c3VtYVwgOwor5rGB5rCXIDwgc2hpcnVrZVwgOwor5rSb5YaFIDwgcmFrdW5haVwgOwor5q+O56eSIDwgbWFpYnlvdVwgOwor5b6u54axIDwgYmluZXRzdVwgOwor5rC05rW0IDwgc3VpeW9rdVwgOwor5oOR5LmxIDwgd2FrdXJhblwgOwor6IOD55eZ5pSjIDwgaWtlaXJlblwgOwor5Y+k5byPIDwga29zaGlraVwgOwor6YGL5YuV5ZOhIDwgdW5kb3VpblwgOwor5qmf5qKw6KqeIDwga2lrYWlnb1wgOwor5Y2K54afIDwgaGFuanVrdVwgOwor5rC05rWBIDwgc3Vpcnl1dVwgOwor5Y6f5pyoIDwgZ2VuYm9rdVwgOwor5Yuk57aaIDwga2luem9rdVwgOwor6YC86L+rIDwgaGlwcGFrdVwgOwor5Y6a5p2/IDwgYXRzdWl0YVwgOwor576O5a656ZmiIDwgYml5b3VpblwgOwor5byx6ICFIDwgamFrdXNoYVwgOwor6YeR5bmzIDwga2lucGlyYVwgOwor5Y2x5rCXIDwgYWJ1bmFnZVwgOwor5oCl5omAIDwga3l1dXNob1wgOwor5q6756u/IDwga2FyYXNhb1wgOwor5LiA6Lui5qmfIDwgaXR0ZW5raVwgOwor5Y+W5b6XIDwgc2h1dG9rdVwgOwor5Y2z5q27IDwgc29rdXNoaVwgOwor6bSH6ImyIDwgdG9raWlyb1wgOwor5Y+w5bC7IDwgZGFpamlyaVwgOwor5p2T5paH5a2XIDwgc2hhbW9qaVwgOwor6L+96ZqPIDwgdHN1aXp1aVwgOwor5Yuy56ugIDwga3Vuc2hvdVwgOwor6YCj6YePIDwgcmVucnlvdVwgOwor5o6i5p+75qmfIDwgdGFuc2FraVwgOwor55Sw6IiO5a62IDwgaW5ha2F5YVwgOwor5ZCI5aOBIDwgZ2FwcGVraVwgOwor5Ye66aGNIDwgZGViaXRhaVwgOwor5Yi56YKjIDwgc2V0c3VuYVwgOwor5bm06ZW3IDwgbmVuY2hvdVwgOwor5Ye66aCtIDwgc2h1dHRvdVwgOwor5YiH6ZmkIDwgc2V0c3Vqb1wgOwor6JGt57CAIDwgeW9zaGl6dVwgOwor6YGL6Lui6LK7IDwgdW50ZW5oaVwgOwor5qmZ55qu5rK5IDwgdG91aGl5dVwgOwor5rSL5YKYIDwgeW91Z2FzYVwgOwor6YGO5bm05bqmIDwga2FuZW5kb1wgOwor56CU56m2IDwga2Vua3l1dVwgOwor6YCy6LuNIDwgc2hpbmd1blwgOwor6YWS5q+SIDwgc2h1ZG9rdVwgOwor6Jas5ZOBIDwgeWFrdWhpblwgOwor5rKI5oCdIDwgY2hpbnNoaVwgOwor5Y2X5rSLIDwgbmFuJyd5b3VcIDsKK+atu+iCiSA8IHNoaW5pa3VcIDsKK+aAneaDkSA8IG9tb3dha3VcIDsKK+mztuiJsiA8IHRvYmlpcm9cIDsKK+mBi+WLleWFtyA8IHVuZG91Z3VcIDsKK+iQveiDhiA8IHJha3V0YW5cIDsKK+mzpeiRrCA8IGNob3Vzb3VcIDsKK+ayouWxsSA8IHRha3VzYW5cIDsKK+W+oeWtmOefpSA8IGdvem9uamlcIDsKK+WIuui6qyA8IHNhc2hpbWlcIDsKK+WQhOWcsCA8IGtha3VjaGlcIDsKK+iWhOWiqCA8IHVzdXp1bWlcIDsKK+WutuaUv+enkSA8IGthc2Vpa2FcIDsKK+WQhOWbvSA8IGtha2tva3VcIDsKK+iRpuesmyA8IGFzaGlidWVcIDsKK+Wwj+Wlh+m6lyA8IGtvZ2lyZWlcIDsKK+W5lembuyA8IG1ha3VkZW5cIDsKK+WJpeijvSA8IGhha3VzZWlcIDsKK+mGnOaFiyA8IHNodXV0YWlcIDsKK+efree1oSA8IHRhbnJha3VcIDsKK+enu+S9j+iAhSA8IGlqdXVzaGFcIDsKK+awkeaziiA8IG1pbnBha3VcIDsKK+ekvuWRiiA8IHNoYWtva3VcIDsKK+W8geiGnCA8IGJlbm1ha3VcIDsKK+mBk+WFt+WxiyA8IGRvdWd1eWFcIDsKK+mGnOaCqiA8IHNodXVha3VcIDsKK+iWrOWJpCA8IHlha3V6YWlcIDsKK+avlOeOhyA8IGhpcml0c3VcIDsKK+W8iue/kiA8IGhlaXNodXVcIDsKK+W9ueeJmyA8IGVraWd5dXVcIDsKK+WQjOe+qeiqniA8IGRvdWdpZ29cIDsKK+ayvOWcsCA8IG51bWFjaGlcIDsKK+iOq+mAoyA8IGJha3VyZW5cIDsKK+azleWQjSA8IGhvdW15b3VcIDsKK+aooeaTrOaIpiA8IG1vZ2lzZW5cIDsKK+WInemAnyA8IHNob3Nva3VcIDsKK+WQjeWPtyA8IG15b3Vnb3VcIDsKK+azleWNmiA8IGhvdWhha3VcIDsKK+mAhumBiyA8IGd5YWt1dW5cIDsKK+eciembqiA8IGJpc2V0c3VcIDsKK+WHuOmPoSA8IHRva2t5b3VcIDsKK+WQiOWPoyA8IGFpa3VjaGlcIDsKK+ekvuWJhyA8IHNoYXNva3VcIDsKK+iNkumnkiA8IGFyYWdvbWFcIDsKK+awuOaXpSA8IGVpaml0c3VcIDsKK+WIhumHnSA8IGZ1bnNoaW5cIDsKK+WIhumHjyA8IGJ1bnJ5b3VcIDsKK+iSsuWFrOiLsSA8IHRhbnBvcG9cIDsKK+WIpei3ryA8IGJldHN1cm9cIDsKK+azleWKmyA8IGhvdXJpa2lcIDsKK+avlOeGsSA8IGhpbmV0c3VcIDsKK+azleWJhyA8IGhvdXNva3VcIDsKK+eoveWPpOedgCA8IGtlaWtvZ2lcIDsKK+eevCA8IG1hYnV0YVwgOwor6L63IDwgc3ViZXJ1XCA7CivnnrMgPCBoaXRvbWlcIDsKK+i8qSA8IHlha2FyYVwgOwor55uyIDwgbWVzaGlpXCA7Civou4ogPCBrdXJ1bWFcIDsKK+W6jyA8IHRzdWlkZVwgOwor55qGIDwgbWluJyduYVwgOwor5bmVIDwgdG9iYXJpXCA7CivluJ0gPCBtaWthZG9cIDsKK+W3piA8IGhpZGFyaVwgOwor55a+IDwgc2hpdHN1XCA7CivnlbMgPCB0YXRhbWlcIDsKK+eVoCA8IGhhdGFrZVwgOwor55OmIDwga2F3YXJhXCA7CivlsqwgPCBtaXNha2lcIDsKK+WxiiA8IHRvZG9rZVwgOwor5bCKIDwgbWlrb3RvXCA7Civlrp0gPCB0YWthcmFcIDsKK+eNoyA8IGtlbW9ub1wgOwor54u8IDwgb29rYW1pXCA7Civni6wgPCBkb2l0c3VcIDsKK+iqoCA8IG1ha290b1wgOwor6Ki8IDwgYWthc2hpXCA7CivniLYgPCBjaGljaGlcIDsKK+iomyA8IG5hbWFyaVwgOwor5aiYIDwgbXVzdW1lXCA7Civlp78gPCBzdWdhdGFcIDsKK+WmviA8IHdhcmF3YVwgOwor5aa5IDwgaW1vdXRvXCA7CivopoEgPCBrYW5hbWVcIDsKK+iltyA8IHRhc3VraVwgOwor54WZIDwga2VtdXJpXCA7CivopZYgPCBmdXN1bWFcIDsKK+ijuCA8IGhhZGFrYVwgOwor6KK0IDwgaGFrYW1hXCA7CivooosgPCBmdWt1cm9cIDsKK+ihoyA8IGtvcm9tb1wgOwor5Z+DIDwgaG9rb3JpXCA7Civon4AgPCBzaHV0c3VcIDsKK+m8rCA8IGl0YWNoaVwgOwor6bygIDwgbmV6dW1pXCA7CivlnJ8gPCB0c3VjaGlcIDsKK+a8hiA8IHVydXNoaVwgOwor6Ju5IDwgc2FuYWdpXCA7Civom5kgPCBrYXdhenVcIDsKK+WZqCA8IHV0c3V3YVwgOwor5rivIDwgbWluYXRvXCA7CivolqwgPCBrdXN1cmlcIDsKK+iWqiA8IHRha2lnaVwgOwor5raZIDwgbmFtaWRhXCA7CivolocgPCB6ZW5tYWlcIDsKK+iWhCA8IHN1c3VraVwgOwor6bSJIDwga2FyYXN1XCA7CivljqggPCBrdXJpeWFcIDsKK+WNuCA8IG9yb3NoaVwgOwor5Y21IDwgdGFtYWdvXCA7CivmraogPCBpYml0c3VcIDsKK+mtmiA8IHNha2FuYVwgOwor5Y2XIDwgbWluYW1pXCA7CivljKAgPCB0YWt1bWlcIDsKK+aruyA8IHNha3VyYVwgOwor6Iu6IDwgaWNoaWdvXCA7Civli6IgPCBoYXp1bWlcIDsKK+aqnCA8IGhpbm9raVwgOwor6IiFIDwgc2h1dXRvXCA7CivmpoogPCBzYWtha2lcIDsKK+WFiSA8IGhpa2FyaVwgOwor6aSoIDwgeWFrYXRhXCA7CivlgJkgPCBzb3Vyb3VcIDsKK+mfvyA8IGhpYmlraVwgOwor5p+zIDwgeWFuYWdpXCA7Civkv4QgPCBuaXdha2FcIDsKK+S/giA8IGtha2FyaVwgOwor5L6/IDwgeW9zdWdhXCA7CivmnpUgPCBtYWt1cmFcIDsKK+acuiA8IHRzdWt1ZVwgOwor5LuPIDwgaG90b2tlXCA7Civmm4cgPCBrdW1vcmlcIDsKK+mbgCA8IHN1enVtZVwgOwor5LqsIDwgbWl5YWtvXCA7CivpmqMgPCB0b25hcmlcIDsKK+S5mSA8IGtpbm90b1wgOwor5LmNIDwgbmFnYXJhXCA7CivkuIcgPCB5b3JvenVcIDsKK+S4gyA8IHNoaWNoaVwgOwor5LiBIDwgaGlub3RvXCA7Civnt5EgPCBtaWRvcmlcIDsKK+e1oyA8IGthc3VyaVwgOwor57WGIDwga2l6dW5hXCA7CivnsL4gPCBzdWRhcmVcIDsKK+mPoSA8IGthZ2FtaVwgOwor6Y6WIDwga3VzYXJpXCA7CivnrZIgPCB0c3V0c3VcIDsKK+aNjCA8IHNhYmFraVwgOwor6Yu8IDwgaGFnYW5lXCA7Civnq6UgPCB3YXJhYmVcIDsKK+mLjyA8IGhhc2FtaVwgOwor5omJIDwgdG9iaXJhXCA7CivmiYAgPCB0b2tvcm9cIDsKK+W7g+iZmiA8IGhhaWt5b1wgOwor5b+/5oCSIDwgZnVuJydudVwgOwor6YCB6L+OIDwgc291Z2VpXCA7Civov4Xpm7cgPCBqaW5yYWlcIDsKK+W/l+aTjSA8IHNoaXNvdVwgOwor6YCa6LKoIDwgdHN1dWthXCA7CivlkI3liLogPCBtZWlzaGlcIDsKK+WQjOWJjSA8IGRvdXplblwgOwor56S85YW4IDwgcmVpdGVuXCA7CivliY3ooZsgPCB6ZW4nJ2VpXCA7Civnn6LnrYggPCB5YWhhenVcIDsKK+mHkeWdkSA8IGtpbmtvdVwgOwor5Y6f5b2iIDwgZ2Vua2VpXCA7CivlvqnmqKkgPCBmdWtrZW5cIDsKK+WJjeihjCA8IHplbmtvdVwgOwor5ZCN5YiGIDwgbWVpYnVuXCA7CivlvaLnirYgPCBrZWlqb3VcIDsKK+WIl+i7iiA8IHJlc3NoYVwgOwor5ZCN5YiAIDwgbWVpdG91XCA7Civlu4Pol6kgPCBoYWloYW5cIDsKK+mFjeacrCA8IGhhaWhvblwgOwor5Y6a5b+XIDwga291c2hpXCA7CivoloTlkbMgPCBoYWt1bWlcIDsKK+ekvuWDpyA8IHNoYXNvdVwgOwor5ZCI5YmkIDwgZ291emFpXCA7CivlkIzlh6YgPCBkb3VzaG9cIDsKK+azleWFuCA8IGhvdXRlblwgOwor56S+5YK1IDwgc2hhc2FpXCA7CivlubTovKogPCBuZW5yaW5cIDsKK+W5tOi8qSA8IG5lbnBhaVwgOwor56OB5b+DIDwgamlzaGluXCA7CivliIbpgaMgPCBidW5rZW5cIDsKK+WPi+WlvSA8IHl1dWtvdVwgOwor5Yuk55WqIDwga2luYmFuXCA7Civnn7PnopEgPCBzZWtpaGlcIDsKK+WQiOWIhyA8IGdhc3NhaVwgOwor6YCA6LuiIDwgdGFpdGVuXCA7CivmraPnt6ggPCBzZWloZW5cIDsKK+WPjeWkiSA8IGhhbnBlblwgOwor5Y+x5ZKkIDwgc2hpdHRhXCA7CivlkIzlhZogPCBkb3V0b3VcIDsKK+W5vei2oyA8IHl1dXNodVwgOwor5Yqg57WmIDwga2FreXV1XCA7CivlkI3lhKogPCBtZWl5dXVcIDsKK+WOs+WwgSA8IGdlbnB1dVwgOwor5biv6Zu7IDwgdGFpZGVuXCA7Civlvovms5UgPCByaXBwb3VcIDsKK+WHjOmbsiA8IHJ5b3V1blwgOwor5b+r5oSfIDwga2Fpa2FuXCA7CivpgbjogIMgPCBzZW5rb3VcIDsKK+efoueoriA8IHlhZGFuZVwgOwor5rGO5oSbIDwgaGFuJydhaVwgOwor5by355uXIDwgZ291dG91XCA7CivljrPlr5IgPCBnZW5rYW5cIDsKK+mHj+WZqCA8IHJ5b3VraVwgOwor5ZCN5YOnIDwgbWVpc291XCA7CivmraPntbEgPCBzZWl0b3VcIDsKK+mBiuiVqSA8IHl1dXRvdVwgOwor5rG65a6aIDwga2V0dGVpXCA7CivokrjmsJEgPCBqb3VtaW5cIDsKK+W8vueXlSA8IGRhbmtvblwgOwor6YeN5Zm4IDwganV1dG9uXCA7Civov4Lpl4ogPCB1a2F0c3VcIDsKK+mAoOipoyA8IHpvdWtlaVwgOwor5reh44CFIDwgdGFudGFuXCA7CivljrPlroggPCBnZW5zaHVcIDsKK+WPsOWQjSA8IHRhaW1laVwgOwor5Y6z5a2YIDwgZ2Vuc29uXCA7CivmraPns7sgPCBzZWlrZWlcIDsKK+mCquelniA8IGphc2hpblwgOwor6L666ZmsIDwgaGVuc3V1XCA7CivpgKDoqIAgPCB6b3VnZW5cIDsKK+mAg+i1sCA8IHRvdXNvdVwgOwor6YCa6KqeIDwgdHN1dWdvXCA7CivliIbovIkgPCBidW5zYWlcIDsKK+mFuOaApyA8IHNhbnNlaVwgOwor55u46ZaiIDwgc291a2FuXCA7CivlvozmrrUgPCBrb3VkYW5cIDsKK+ekvuS8miA8IHNoYWthaVwgOwor6YCa6KmxIDwgdHN1dXdhXCA7CivlvqnmoKEgPCBmdWtrb3VcIDsKK+WQjOWApCA8IGRvdWNoaVwgOwor5YiH6LqrIDwga2lyaW1pXCA7CivlkJvkuLsgPCBrdW5zaHVcIDsKK+iNiemeiyA8IHdhcmFqaVwgOwor5rOV5L6LIDwgaG91cmVpXCA7CivliLboo4EgPCBzZWlzYWlcIDsKK+WNl+aWuSA8IG5hbnBvdVwgOwor5YyX5rW3IDwgaG9ra2FpXCA7Civlv6DmhJsgPCBjaHV1YWlcIDsKK+mHkeWToSA8IGtpbicnaW5cIDsKK+WNmOaWhyA8IHRhbmJ1blwgOwor56K65bqmIDwga2FrdWRvXCA7CivmsJHmnJsgPCBtaW5ib3VcIDsKK+iWhOWIqSA8IGhha3VyaVwgOwor56S+5LqkIDwgc2hha291XCA7Civlvq7mnI0gPCBiaWZ1a3VcIDsKK+axguaEmyA8IGt5dXVhaVwgOwor5Y2Y5pWwIDwgdGFuc3V1XCA7Civlv4XmkLogPCBoaWtrZWlcIDsKK+mHkeWTgSA8IGtpbnBpblwgOwor5Yqj562JIDwgcmV0dG91XCA7Civnm6TpnaIgPCBiYW5tZW5cIDsKK+WMoOawlyA8IHNob3VraVwgOwor5YuV55SjIDwgZG91c2FuXCA7Civlu7bntI0gPCBlbicnbm91XCA7CivnoJXniYcgPCBzYWloZW5cIDsKK+ecn+mAhiA8IG1hc2FrYVwgOwor5ZCM5L2TIDwgZG91dGFpXCA7CivmsrPljJcgPCBrYWhva3VcIDsKK+ekvuS4uyA8IHNoYXNodVwgOwor5Y2X5pSvIDwgbmFuc2hpXCA7Civlj6PlkLsgPCBrb3VmdW5cIDsKK+W8vueQtCA8IGRhbmtpblwgOwor5bir6ZaAIDwgc2hpbW9uXCA7CivmsJfml6kgPCBraWJheWFcIDsKK+aApeWgtCA8IGt5dXViYVwgOwor5ZCM5Ly0IDwgZG91aGFuXCA7CivpgKPooaEgPCByZW5rb3VcIDsKK+WPo+WQnyA8IGtvdWdpblwgOwor5rOV5Lq6IDwgaG91amluXCA7CivlhrfpnZkgPCByZWlzZWlcIDsKK+i/lOmHkSA8IGhlbmtpblwgOwor5Y+C5aCCIDwgc2FuZG91XCA7Civlv6vlvIEgPCBrYWliZW5cIDsKK+W/oOaBlSA8IGNodXVqb1wgOwor5Y+s5YufIDwgc2hvdWJvXCA7CivlkIjkvbUgPCBnb3VoZWlcIDsKK+WQkOS5syA8IHRvbnl1dVwgOwor5ZCN5Lq6IDwgbWVpamluXCA7CivlkIjkvZMgPCBnYXR0YWlcIDsKK+iWhOWFiSA8IGhha2tvdVwgOwor6JST5bu2IDwgbWFuJydlblwgOwor5b2T54S2IDwgdG91emVuXCA7Civlj43lmawgPCBoYW56ZWlcIDsKK+WOn+WvuCA8IGdlbnN1blwgOwor5ZCM5LuBIDwgZG91amluXCA7CivlkIzkurogPCBkb3VuaW5cIDsKK+WFuOm6lyA8IHRlbnJlaVwgOwor5ZCR5LiKIDwga291am91XCA7Civlt6Ppto8gPCBzdWRvcmlcIDsKK+WNgeacrCA8IGp1cHBvblwgOwor5buD6ImmIDwgaGFpa2FuXCA7CivmsZ/lsbEgPCBrb3V6YW5cIDsKK+W6p+iWrCA8IHpheWFrdVwgOwor6JCO57iuIDwgaXNodWt1XCA7Civph43lkIggPCBqdXVnb3VcIDsKK+W6g+iogCA8IGtvdWdlblwgOwor5buD6Ii5IDwgaGFpc2VuXCA7Civlu5DogqUgPCBreXV1aGlcIDsKK+WQjOS5lyA8IGRvdWpvdVwgOwor5b+c5oClIDwgb3VreXV1XCA7CivpgYroirggPCB5dXVnZWlcIDsKK+aui+eXlSA8IHphbmtvblwgOwor5YmN6JGXIDwgemVuY2hvXCA7Civoj5bokrIgPCBzaG91YnVcIDsKK+mHjuWOnyA8IG5vaGFyYVwgOwor5rG65aOKIDwga2Vra2FpXCA7Civljp/lrZAgPCBnZW5zaGlcIDsKK+avm+awiCA8IG1vdXNlblwgOwor5Y2g5ougIDwgc2Vua3lvXCA7CivliKXoo70gPCBiZXNzZWlcIDsKK+W8iuekviA8IGhlaXNoYVwgOwor5q+U5rOBIDwgaGlreW91XCA7CivpgI/oppYgPCB0b3VzaGlcIDsKK+WNiuaVsCA8IGhhbnN1dVwgOwor6Yac5aWzIDwgc2h1dWpvXCA7Civlirnnm64gPCBraWtpbWVcIDsKK+awkeaUvyA8IG1pbnNlaVwgOwor6bO056a9IDwgbWVpa2luXCA7CivmsJHmlL4gPCBtaW5wb3VcIDsKK+i/kemDtyA8IGtpbmdvdVwgOwor6YWS5omLIDwgc2FrYXRlXCA7Civov5TpgoQgPCBoZW5rYW5cIDsKK+W8k+efoiA8IHl1bWl5YVwgOwor5YmN6I+cIDwgemVuc2FpXCA7Civlj43llY8gPCBoYW5tb25cIDsKK+WHpumBhyA8IHNob2d1dVwgOwor5b+D5oqAIDwgc2hpbmdpXCA7CivliJ3oposgPCBzaG9rZW5cIDsKK+asoOiIqiA8IGtla2tvdVwgOwor55uX6Zu7IDwgdG91ZGVuXCA7Civlt6jpr6ggPCBreW9nZWlcIDsKK+ayg+WcnyA8IHlva3Vkb1wgOwor5be76aaWIDwga2Fuc2h1XCA7Civlh7rotrMgPCBkZWFzaGlcIDsKK+aui+eUnyA8IHphbnNlaVwgOwor5YyX5qynIDwgaG9rdW91XCA7Civnm5fpm6MgPCB0b3VuYW5cIDsKK+WKoOemhCA8IGthcm9rdVwgOwor5Y+35L+4IDwgZ291aG91XCA7CivljbHmgKUgPCBraWt5dXVcIDsKK+WJm+iHhiA8IGdvdW9rdVwgOwor5by+54mHIDwgZGFucGVuXCA7CivnnIzpgZMgPCBrZW5kb3VcIDsKK+WNs+W/nCA8IHNva3VvdVwgOwor5q2m56WeIDwgYnVzaGluXCA7Civov5TpgIEgPCBoZW5zb3VcIDsKK+W+qeaUuSA8IGZ1a2thaVwgOwor6YeR5YmbIDwga29uZ291XCA7CivluaPosqIgPCBoZWlrb3VcIDsKK+mFjeaJgCA8IGhhaXNob1wgOwor5Y215b2iIDwgcmFua2VpXCA7Civph5HliLggPCBraW5rZW5cIDsKK+mFlOaFiyA8IHN1aXRhaVwgOwor5beo6a2BIDwga3lva2FpXCA7CivolYPlnLAgPCBiYW5jaGlcIDsKK+WNgeaVsCA8IGp1dXN1dVwgOwor5rG95ZynIDwga2lhdHN1XCA7Civlh6HpgIAgPCBib250YWlcIDsKK+mBlOiAhSA8IHRhc3NoYVwgOwor5b6T5p2lIDwganV1cmFpXCA7CivpgbjnrqEgPCBzZW5rYW5cIDsKK+WIhuitsiA8IGJ1bmpvdVwgOwor5Y+45LyaIDwgc2hpa2FpXCA7CivlvqHmlpkgPCBnb3J5b3VcIDsKK+WGhumrmCA8IGVuZGFrYVwgOwor6L+R6L66IDwga2lucGVuXCA7Civlj6PlhoUgPCBrb3VuYWlcIDsKK+WHuuiyuyA8IHNodXBwaVwgOwor6YeR5YagIDwga2lua2FuXCA7CivljbDlvaIgPCBpbmd5b3VcIDsKK+WPuOS7pCA8IHNoaXJlaVwgOwor6YeN5YiRIDwganV1a2VpXCA7Civov73oqLQgPCB0c3Vpc29cIDsKK+WPt+S7pCA8IGdvdXJlaVwgOwor5Yqg56GrIDwga2FyeXV1XCA7CivliZvog4YgPCBnb3V0YW5cIDsKK+mHkeWFtyA8IGthbmFndVwgOwor5Y+O5Y+XIDwgc2h1dWp1XCA7CivphY3mha4gPCBoYWlyeW9cIDsKK+i/t+irliA8IG1laXJvblwgOwor5q+O5q+OIDwgbWFpbWFpXCA7Civov73oqJggPCB0c3Vpa2lcIDsKK+edoeiTriA8IHN1aXJlblwgOwor5b+D5oSPIDwgc2hpbicnaVwgOwor5Ymy57eaIDwga2Fzc2VuXCA7CivliIfoq4wgPCBzZWtrYW5cIDsKK+W/mOW5tCA8IGJvdW5lblwgOwor5Y2z5bqnIDwgc29rdXphXCA7Civlt7vpoK0gPCBrYW50b3VcIDsKK+WKueeUqCA8IGtvdXlvdVwgOwor6JKy5p+zIDwgaG9yeXV1XCA7CivmgZLkvosgPCBrb3VyZWlcIDsKK+WPsuS8nSA8IHNoaWRlblwgOwor5b+N5b6TIDwgbmluanV1XCA7Civphbflr5IgPCBrb2trYW5cIDsKK+WLh+eMmyA8IHl1dW1vdVwgOwor5q+s5p6cIDwga3l1dWthXCA7CivojbfotrMgPCBuaWFzaGlcIDsKK+W4uOmBkyA8IGpvdWRvdVwgOwor5YiG6KmeIDwgYnVuc2hpXCA7CivmsrvkubEgPCBjaGlyYW5cIDsKK+WNteW3oyA8IHJhbnNvdVwgOwor5q2755SjIDwgc2hpemFuXCA7CivmrbvnlJ8gPCBzaGlzZWlcIDsKK+WNmuaEmyA8IGhha3VhaVwgOwor5bi46YCjIDwgam91cmVuXCA7CivlhpLpoK0gPCBib3V0b3VcIDsKK+aAp+WQkSA8IHNlaWtvdVwgOwor5biw6YO3IDwga2lreW91XCA7CivmsLTlubMgPCBzdWloZWlcIDsKK+ayu+S4liA8IGNoaXNlaVwgOwor5byV55SoIDwgaW4nJ3lvdVwgOwor6a6u6bqXIDwgc2VucmVpXCA7Civnm67ph5ggPCBtZWt1Z2lcIDsKK+WPjeWLlSA8IGhhbmRvdVwgOwor5YmN6IWVIDwgbWFldWRlXCA7Civlj7LkuZcgPCBzaGlqb3VcIDsKK+WIhuinoyA8IGJ1bmthaVwgOwor5Y+C5ZCRIDwgc2Fua291XCA7Civlj7PkuIogPCBtaWdpdWVcIDsKK+mBo+exsyA8IGtlbmJlaVwgOwor5Y+k5L+XIDwga296b2t1XCA7Civlvozmma8gPCBrb3VrZWlcIDsKK+WOluWkpyA8IGJvdWRhaVwgOwor6YCA6KGMIDwgdGFpa291XCA7Civlj6/kuZ8gPCBrYW5hcmlcIDsKK+W6p+iIiCA8IHpha3lvdVwgOwor5q2j55y8IDwgc2VpZ2FuXCA7CivlvoXmnJsgPCB0YWlib3VcIDsKK+ejgeWjgSA8IGppaGVraVwgOwor5beu6aGNIDwgc2FnYWt1XCA7CivmrovniYcgPCB6YW5wZW5cIDsKK+WPpeS9nCA8IGt1c2FrdVwgOwor5b6M5piGIDwga291a29uXCA7CivmraPnm64gPCBtYXNhbWVcIDsKK+efoueOiSA8IHlhZGFtYVwgOwor5Y2B5oyHIDwganVzc2hpXCA7CivljZjmgKcgPCB0YW5zZWlcIDsKK+avm+aguSA8IG1vdWtvblwgOwor6JK45pWjIDwgam91c2FuXCA7CivlvozmlrkgPCBrb3Vob3VcIDsKK+mFjeW9kyA8IGhhaXRvdVwgOwor5Yqg55mCIDwga2FyeW91XCA7Civlvovml4sgPCByaXNzZW5cIDsKK+WPo+S8nSA8IGtvdWRlblwgOwor6YWS5bqXIDwgc2h1dGVuXCA7CivluKvpgZMgPCBzaGlkb3VcIDsKK+W6leiNtyA8IHNva29uaVwgOwor5YiK6KGMIDwga2Fua291XCA7Civlh7roqLQgPCBzaHVzc29cIDsKK+WNmuW+kiA8IGJha3V0b1wgOwor56CC5rygIDwgc2FiYWt1XCA7CivmgKXli58gPCBreXV1Ym9cIDsKK+W8seeBqyA8IHlvd2FiaVwgOwor5YmN6ICFIDwgemVuc2hhXCA7CivmgKXli5kgPCBreXV1bXVcIDsKK+W3qOmgrSA8IGt5b3RvdVwgOwor6JGJ54mpIDwgaGFtb25vXCA7CivliIboooIgPCBidW5iZWlcIDsKK+WGhumggiA8IGVuY2hvdVwgOwor5rCX5oGvIDwga2lzb2t1XCA7CivlvozmlLsgPCBrb3Vrb3VcIDsKK+mzqeebriA8IGhhdG9tZVwgOwor6YeN5L2TIDwganV1dGFpXCA7CivljrPlkb0gPCBnZW5tZWlcIDsKK+S4i+S4luipsSA8IGdlc2V3YVwgOwor5YaS6Zm6IDwgYm91a2VuXCA7Civljp/lm6AgPCBnZW4nJ2luXCA7CivlhoXpoIUgPCBuYWlrb3VcIDsKK+WJjee/hSA8IHplbnNoaVwgOwor5bqm6IO4IDwgZG9reW91XCA7CivnnIvosqsgPCBrYW5rYW5cIDsKK+WNmuW8lSA8IGhha3VpblwgOwor5qmf6ZW3IDwga2ljaG91XCA7CivlibLnrKYgPCB3YXJpZnVcIDsKK+awl+aApyA8IGtpc2hvdVwgOwor5Y2B5oiSIDwgamlra2FpXCA7Civlj5fkv6EgPCBqdXNoaW5cIDsKK+ebrumAlCA8IG1va3V0b1wgOwor6L6y6YGTIDwgbm91ZG91XCA7Civnn7PngbAgPCBzZWtrYWlcIDsKK+awkeaDhSA8IG1pbmpvdVwgOwor5Y6a5ZywIDwgYXRzdWppXCA7Civph43ku7sgPCBqdXVuaW5cIDsKK+i/juizkyA8IGdlaWhpblwgOwor5Y6z5ZCbIDwgZ2Vua3VuXCA7CivliY3nva4gPCB6ZW5jaGlcIDsKK+mHjeS7oyA8IGp1dWRhaVwgOwor5YiX6JepIDwgcmVwcGFuXCA7Civps6Xnm64gPCB0b3JpbWVcIDsKK+WNmOW8gSA8IHRhbmJlblwgOwor5q615q61IDwgZGFuZGFuXCA7CivmsLTlsYsgPCBtaXp1eWFcIDsKK+W+gOaYlCA8IG91c2VraVwgOwor6YeR5Li7IDwga2luc2h1XCA7CivnoLTmoLwgPCBoYWtha3VcIDsKK+WNg+aFriA8IHNlbnJ5b1wgOwor5Y675YuiIDwga3lvc2VpXCA7CivlvZPmrbMgPCB0b3VzYWlcIDsKK+earumdqSA8IGhpa2FrdVwgOwor5YaF6Z2iIDwgbmFpbWVuXCA7Civlt7fplpMgPCBrb3VrYW5cIDsKK+WGt+mFkiA8IHJlaXNodVwgOwor5Y215a2QIDwgcmFuc2hpXCA7CivmgKrlhYkgPCBrYWlrb3VcIDsKK+WFvOmhjCA8IGtlbmRhaVwgOwor5qqA6YKjIDwgZGFuJyduYVwgOwor6YeO5LitIDwgbm9uYWthXCA7CivpgKDoiLkgPCB6b3VzZW5cIDsKK+WPguWGhSA8IHNhbmRhaVwgOwor5rC05a6zIDwgc3VpZ2FpXCA7CivlvrnlupUgPCB0ZXR0ZWlcIDsKK+awl+W8sSA8IGtpeW93YVwgOwor5Y+b5LmxIDwgaGFucmFuXCA7CivlvqHmhbYgPCBneW9rZWlcIDsKK+ecjOitpiA8IGtlbmtlaVwgOwor5bid6YGTIDwgdGVpZG91XCA7CivliKXojZggPCBiZXNzb3VcIDsKK+eigeW4rSA8IGdvc2VraVwgOwor5Yid6JGJIDwgc2hveW91XCA7CivlvbzmlrkgPCBrYW5hdGFcIDsKK+ebn+mCpiA8IG1laWhvdVwgOwor5b+r5aCxIDwga2FpaG91XCA7Civljq3ljq0gPCBpeWFpeWFcIDsKK+awtOWtkCA8IG1penVnb1wgOwor5YaN6ZaLIDwgc2Fpa2FpXCA7CivpgaDnp7AgPCBlbnNob3VcIDsKK+WMl+aWuSA8IGhvcHBvdVwgOwor5YaF6ZmjIDwgbmFpamluXCA7CivljYrlvoQgPCBoYW5rZWlcIDsKK+iRm+a5ryA8IGt1enV5dVwgOwor6a6u6a2aIDwgc2VuZ3lvXCA7CivlhrfpgYcgPCByZWlndXVcIDsKK+WNiuW9sSA8IGhhbicnZWlcIDsKK+WPjeS+iyA8IGhhbnJlaVwgOwor5bej6ZubIDwgc3VoaW5hXCA7Civov6bmpbznvoUgPCBrYXJ1cmFcIDsKK+W+ruW8sSA8IGJpamFrdVwgOwor6YO35p2RIDwgZ291c29uXCA7CivnoazmgKcgPCBrb3VzZWlcIDsKK+mFkuWxiyA8IHNha2F5YVwgOwor5YmN57eoIDwgemVucGVuXCA7CivpgIDolLUgPCB0YWl6b3VcIDsKK+WHneitsCA8IGd5b3VnaVwgOwor5YmN57eaIDwgemVuc2VuXCA7Civlt53pnaIgPCBrYXdhbW9cIDsKK+WOn+WTgSA8IGdlbnBpblwgOwor5byV54WnIDwgaW5zaG91XCA7CivlhajppKggPCB6ZW5rYW5cIDsKK+i/keipoCA8IGtpbicnZWlcIDsKK+iSmeaYpyA8IG1vdW1haVwgOwor5q6L5ruTIDwgemFuc2hpXCA7CivmspnkuJggPCBzYWt5dXVcIDsKK+atu+eCuSA8IHNoaXRlblwgOwor55u46LKMIDwgc291Ym91XCA7CivpgIHokawgPCBzb3Vzb3VcIDsKK+eZvemtlCA8IGhha3VtYVwgOwor5Y2c5bGFIDwgYm9ra3lvXCA7Civnoo3lrZAgPCBnYWlzaGlcIDsKK+avjuaZqSA8IG1haWJhblwgOwor5Y6z5YasIDwgZ2VudG91XCA7Civlj4vkurogPCB5dXVqaW5cIDsKK+ebiumHkSA8IGVraWtpblwgOwor5Yq054G9IDwgcm91c2FpXCA7CivljZflsrggPCBuYW5nYW5cIDsKK+aJi+W/oOWunyA8IHRlbWFtZVwgOwor552A6I23IDwgY2hha2thXCA7Civokabmr5sgPCBhc2hpZ2VcIDsKK+asoeesrCA8IHNoaWRhaVwgOwor5Y6a5ZGzIDwgYXRzdW1pXCA7CivlhbXpm6MgPCBoZWluYW5cIDsKK+WNs+WknCA8IHNva3V5YVwgOwor5b2i5pyoIDwga2F0YWdpXCA7CivluKvos4cgPCBzaGlzaGlcIDsKK+WNl+WxsSA8IG5hbnphblwgOwor55yL6KaWIDwga2Fuc2hpXCA7Civov5HoppYgPCBraW5zaGlcIDsKK+W3jOmgrSA8IGdhbnRvdVwgOwor6Iy26YGTIDwgY2hhZG91XCA7CivmrKHnq6AgPCBqaXNob3VcIDsKK+WFt+mZsyA8IGd1Y2hpblwgOwor5oCq5Lq6IDwga2FpamluXCA7Civnmbvpq5ggPCB0b3Vrb3VcIDsKK+ebpOi4niA8IGJhbmt5b1wgOwor5YW16ZqKIDwgaGVpdGFpXCA7CivpgKPnvbIgPCByZW5zaG9cIDsKK+mnhOa0kuiQvSA8IGRhamFyZVwgOwor5q2j54qvIDwgc2VpaGFuXCA7CivljZjlsIQgPCB0YW5zaGFcIDsKK+WPguS8miA8IHNhbmthaVwgOwor5YqH55S7IDwgZ2VraWdhXCA7Civlhajpn7MgPCB6ZW4nJ29uXCA7CivljbXloZQgPCByYW50b3VcIDsKK+WFmummliA8IHRvdXNodVwgOwor6YGO56ewIDwga2FzaG91XCA7CivljYHlubIgPCBqaWtrYW5cIDsKK+iLsemgmCA8IGVpcnlvdVwgOwor5Y2R5bGsIDwgaGl6b2t1XCA7Civlt6jpkJggPCBvb2dhbmVcIDsKK+aoqumgmCA8IG91cnlvdVwgOwor55+z5rK5IDwgc2VraXl1XCA7Civlu7vnirYgPCBrYWlqb3VcIDsKK+S4i+mnhOWxiyA8IGdldGF5YVwgOwor6YGU56OoIDwgZGFydW1hXCA7Civljp/li5UgPCBnZW5kb3VcIDsKK+WNl+WuiyA8IG5hbnNvdVwgOwor5byx5rCXIDwgeW93YWtpXCA7CivlhajpnaIgPCB6ZW5tZW5cIDsKK+W+oeW5uCA8IG1peXVraVwgOwor5b6Y5b6KIDwgaGFpa2FpXCA7Civpg7XmlL8gPCB5dXVzZWlcIDsKK+WNiuWztiA8IGhhbnRvdVwgOwor5Y2R5bCPIDwgaGlzaG91XCA7Civnmb3ppqwgPCBoYWt1YmFcIDsKK+ebuOirhyA8IHNvdWRhblwgOwor5qyd56mNIDwgdXNzZWtpXCA7CivlvoHmiKYgPCBzZWlzZW5cIDsKK+WJsuebriA8IHdhcmVtZVwgOwor5YWo6ZyKIDwgemVucmVpXCA7CivpgKPnuYsgPCByZW5rZWlcIDsKK+W9k+advyA8IGF0ZWl0YVwgOwor5Y+C5LiOIDwgc2FuJyd5b1wgOwor5b6M5oKUIDwga291a2FpXCA7Civlj4LkuIogPCBzYW5qb3VcIDsKK+ayiOS4iyA8IGNoaW5rYVwgOwor55yf6JavIDwgc2hpbmpvXCA7Civlh73ok4sgPCBrYW5nYWlcIDsKK+WOn+WInSA8IGdlbnNob1wgOwor5YmN56uvIDwgemVudGFuXCA7Civlv6vlk4kgPCBrYWlzYWlcIDsKK+awl+WtpiA8IGtpZ2FrdVwgOwor5rC05Z+fIDwgc3VpaWtpXCA7Civlvq7lsJEgPCBiaXNob3VcIDsKK+WFqOmaiiA8IHplbnRhaVwgOwor6YCB6Ie0IDwgc291Y2hpXCA7CivpgKPntr8gPCByZW5tZW5cIDsKK+WJteeXlSA8IHNvdWtvblwgOwor5qyy55uuIDwgeW9rdW1lXCA7CivlvpfluqYgPCB0b2t1ZG9cIDsKK+W+k+W8nyA8IGp1dXRlaVwgOwor6YOo5pePIDwgYnV6b2t1XCA7CivolYPkurogPCBiYW5qaW5cIDsKK+iPnOeoriA8IG5hdGFuZVwgOwor55u06Ki0IDwgamlraXNvXCA7Civljp/lhbggPCBnZW50ZW5cIDsKK+mxl+iMjiA8IHJpbmtlaVwgOwor5YWl6ZmiIDwgbnl1dWluXCA7Civnn63mr5sgPCB0YW5tb3VcIDsKK+iNkuiqlSA8IGtvdXRhblwgOwor5Yid6ICBIDwgc2hvcm91XCA7CivphbflkI8gPCBrb2t1cmlcIDsKK+mAo+e0ryA8IHJlbnJ1aVwgOwor6JWD5Li7IDwgYmFuc2h1XCA7CivluKvoqJMgPCBzaGlrdW5cIDsKK+aoqemZkCA8IGtlbmdlblwgOwor5YuY5qScIDwga2Fua2VuXCA7CivpgbrniakgPCBpYnV0c3VcIDsKK+WHhuiosSA8IGp1bmt5b1wgOwor6YWS5aC0IDwgc2FrYWJhXCA7CivlhajplosgPCB6ZW5rYWlcIDsKK+auieatuyA8IGp1bnNoaVwgOwor5Y6f5YOPIDwgZ2Vuem91XCA7Civnm67oqLEgPCBtZW1vdG9cIDsKK+awtOWaoiA8IHN1aW5vdVwgOwor5b2T5pa5IDwgdG91aG91XCA7Civlh7rojbcgPCBzaHVra2FcIDsKK+ecn+iPsCA8IG1ha29tb1wgOwor5Y2X5aSpIDwgbmFudGVuXCA7Civnm67op5IgPCBtZWthZG9cIDsKK+WGjemBuCA8IHNhaXNlblwgOwor5buD55ukIDwgaGFpYmFuXCA7CivnoavlrokgPCByeXV1YW5cIDsKK+apn+i7uCA8IGtpamlrdVwgOwor5Yui5pybIDwgc2VpYm91XCA7CivmqKnploAgPCBrZW5tb25cIDsKK+mKmOOAhSA8IG1laW1laVwgOwor5YuY5qGIIDwga2FuJydhblwgOwor5b6M5bm0IDwga291bmVuXCA7CivljLvlsYAgPCBpa3lva3VcIDsKK+WGjemBiiA8IHNhaXl1dVwgOwor56Cy5omLIDwgaG91c2h1XCA7Civnmb3pnLIgPCBoYWt1cm9cIDsKK+iKsemzpSA8IGthY2hvdVwgOwor6L+96IKlIDwgdHN1aWhpXCA7Civlv7XlhpkgPCBuZW5zaGFcIDsKK+efpeatryA8IGNoaXNoaVwgOwor5biG6LWwIDwgaGFuc291XCA7CivlvoDlvqkgPCBvdWZ1a3VcIDsKK+efs+amtCA8IHpha3Vyb1wgOwor55m96ZuyIDwgaGFrdXVuXCA7Civlho3pgIEgPCBzYWlzb3VcIDsKK+WFiemgrSA8IGtvdXRvdVwgOwor5b6L5birIDwgcmlzc2hpXCA7CivmhIjjgIUgPCBpeW9peW9cIDsKK+WFtemLkiA8IGhlaWhvdVwgOwor5Ye66IqxIDwgZGViYW5hXCA7CivmranmuKwgPCBob3Nva3VcIDsKK+WFiOmgrSA8IHNlbnRvdVwgOwor5bqD57iBIDwgaGlyb2VuXCA7CivmtarjgIUgPCByb3Vyb3VcIDsKK+WKm+a8lCA8IHJpa2llblwgOwor6YKq5qyyIDwgamF5b2t1XCA7Civpp4Tms5XonrogPCBkYWJvcmFcIDsKK+W/g+WcnyA8IHNoaW5kb1wgOwor5b6u5aaZIDwgYmlteW91XCA7CivlvoTluq0gPCBrZWl0ZWlcIDsKK+WIpee0mSA8IGJlc3NoaVwgOwor5b+c5Y+sIDwgb3VzaG91XCA7Civlh7roiLkgPCBkZWZ1bmVcIDsKK+mFt+WIkSA8IGtva2tlaVwgOwor5b+r5YiAIDwga2FpdG91XCA7CivlhYjpnq0gPCBzZW5iZW5cIDsKK+W3p+mBhSA8IGtvdWNoaVwgOwor5bqn56SBIDwgemFzaG91XCA7Civpgbjngq0gPCBzZW50YW5cIDsKK+W8gea4iCA8IGJlbnNhaVwgOwor5Y2K5aSpIDwgaGFudGVuXCA7Civlv5flkJEgPCBzaGlrb3VcIDsKK+WHuuiHjSA8IGRlYmVzb1wgOwor5b235b6oIDwgaG91a291XCA7CivljYrlpJwgPCBoYW4nJ3lhXCA7CivliLbnqbogPCBzZWlrdXVcIDsKK+WOn+S6uiA8IGdlbmppblwgOwor5YaN6LuiIDwgc2FpdGVuXCA7CivlvaLmiJAgPCBrZWlzZWlcIDsKK+W4guiyqSA8IHNoaWhhblwgOwor56Gd5a6JIDwgc2hvdWFuXCA7CivliJ3ntYwgPCBzaG9rZWlcIDsKK+WNiuWjiiA8IGhhbmthaVwgOwor5byU5q2MIDwgY2hvdWthXCA7Civov5HokZcgPCBraW5jaG9cIDsKK+iQveasviA8IHJha2thblwgOwor5YiH5769IDwga2lyaWhhXCA7CivnoZ3lrZAgPCBnYXJhc3VcIDsKK+W5uee3miA8IGthbnNlblwgOwor6YO95b+DIDwgdG9zaGluXCA7Civnorrkv50gPCBrYWt1aG9cIDsKK+ats+atsyA8IHNhaXNhaVwgOwor5YWF6Zu7IDwganV1ZGVuXCA7CivmsaDkuq0gPCBjaGl0ZWlcIDsKK+WGhei8qiA8IHVjaGl3YVwgOwor6YGL55SoIDwgdW4nJ3lvdVwgOwor55ub6KazIDwgc2Vpa2FuXCA7CivljYPlpJwgPCBzZW4nJ3lhXCA7Civluo/nq6AgPCBqb3Nob3VcIDsKK+WItuempiA8IHNlaWd5b1wgOwor5YiG572yIDwgYnVuc2hvXCA7CivlvaLmhYsgPCBrZWl0YWlcIDsKK+ehrOWkiSA8IGtvdWhlblwgOwor5YWI6ZmjIDwgc2VuamluXCA7Civlhazph5EgPCBrb3VraW5cIDsKK+mzpea4oSA8IGNob3R0b1wgOwor6YGF55WqIDwgb3NvYmFuXCA7Civlipvms7MgPCByaWtpZWlcIDsKK+ato+ayuSA8IHNob3V5dVwgOwor5Y2w5YyjIDwgaW5iYWtvXCA7CivljbPlirkgPCBzb2trb3VcIDsKK+iNt+iIuSA8IG5pYnVuZVwgOwor5bqD56+EIDwga291aGFuXCA7Civnn7PmnKggPCBpc2hpa2lcIDsKK+eiqeWEkiA8IHNla2lqdVwgOwor6JGX5pu4IDwgY2hvc2hvXCA7Civlt53ovrogPCBrYXdhYmVcIDsKK+mzqea0viA8IGhhdG9oYVwgOwor5q+N5b6hIDwgaGFoYWdvXCA7CivpgY7kv53orbcgPCBrYWhvZ29cIDsKK+mEreWjsCA8IHRlaXNlaVwgOwor56Cy5by+IDwgaG91ZGFuXCA7CivlvZPmiYAgPCB0b3VzaG9cIDsKK+ebm+ijhSA8IHNlaXNvdVwgOwor5rC05YuiIDwgc3Vpc2VpXCA7Civpg73luoEgPCB0b2Nob3VcIDsKK+WFremDqCA8IHJva3VidVwgOwor5q2i5rC0IDwgc2hpc3VpXCA7Civprq7pi60gPCBzZW4nJ2VpXCA7CivphZLlkI0gPCBzaHVtZWlcIDsKK+ebm+ihsCA8IHNlaXN1aVwgOwor5rCR5ZujIDwgbWluZGFuXCA7CivoirjpoqggPCBnZWlmdXVcIDsKK+W8puadkCA8IGdlbnphaVwgOwor5Yid562JIDwgc2hvdG91XCA7CivlhazpgrggPCBrb3V0ZWlcIDsKK+WNsOWIuyA8IGlua29rdVwgOwor5Ymy54O5IDwga2FwcG91XCA7Civok67lj7AgPCByZW5kYWlcIDsKK+ato+auvyA8IHNlaWRlblwgOwor5YaN6LKpIDwgc2FpaGFuXCA7CivliIfnt5ogPCBzZXNzZW5cIDsKK+WJo+eKtiA8IGtlbmpvdVwgOwor5Y215YaGIDwgcmFuJydlblwgOwor6YW35Ly8IDwga29rdWppXCA7CivliKXnqK4gPCBiZXNzaHVcIDsKK+edpeedqCA8IGhlaWdlaVwgOwor6JGJ5p+EIDwgeW91aGVpXCA7CivokZfmmI4gPCBjaG9tZWlcIDsKK+W+k+WniSA8IGp1dXNoaVwgOwor5q665oSPIDwgc2F0c3VpXCA7Civovp7ooaggPCBqaWh5b3VcIDsKK+mdnuWWtuWIqSA8IGhpZWlyaVwgOwor5YWs6YG4IDwga291c2VuXCA7CivlvpPlprkgPCBqdXVtYWlcIDsKK+WIqeemjyA8IHJpZnVrdVwgOwor57WM57ev5YSAIDwga2VpaWdpXCA7CivljaDlj5YgPCBzZW5zaHVcIDsKK+avjuW5tCA8IG1haW5lblwgOwor5q6L5pqRIDwgemFuc2hvXCA7CivlhazpgZMgPCBrb3Vkb3VcIDsKK+ato+atoyA8IHNlaXNlaVwgOwor5bmz57GzIDwgaGVpYmVpXCA7CivphY3lkIggPCBoYWlnb3VcIDsKK+awtOWIhiA8IHN1aWJ1blwgOwor55yf576OIDwgc2hpbmJpXCA7CivluYToiI4gPCBha3VzaGFcIDsKK+mtmumxlyA8IGd5b3JpblwgOwor55+i5p+EIDwgeWFnYXJhXCA7CivlhaXpg6ggPCBueXV1YnVcIDsKK+efs+aWpyA8IHNla2lmdVwgOwor5YaX6KuHIDwgam91ZGFuXCA7CivmsLTlhrcgPCBzdWlyZWlcIDsKK+efruaYnyA8IHdhaXNlaVwgOwor6JK85aSpIDwgc291dGVuXCA7CivlhajpgZMgPCB6ZW5kb3VcIDsKK+W5vOerpSA8IHlvdWRvdVwgOwor6L2f6L2fIDwgZ291Z291XCA7CivnnaHnnKAgPCBzdWltaW5cIDsKK+W3qOizhyA8IGt5b3NoaVwgOwor6JGJ5pu4IDwgaGFnYWtpXCA7CivljIXluK8gPCBob3V0YWlcIDsKK+WOhOS7iyA8IHlha2thaVwgOwor5rCR5Za2IDwgbWluJydlaVwgOwor5YuH5patIDwgeXV1ZGFuXCA7Civli5Xmj7ogPCBkb3V5b3VcIDsKK+auv+W+oSA8IHRvbm9nb1wgOwor5Y2B5ZueIDwganVra2FpXCA7CivljYHlm5sgPCBqdXV5b25cIDsKK+W3qOiyoSA8IGt5b3phaVwgOwor5Y2U5ZKMIDwga3lvdXdhXCA7Civlub3nqpMgPCB5dXVzb3VcIDsKK+W3nei3ryA8IGthd2FqaVwgOwor5YuH5pWiIDwgeXV1a2FuXCA7Civlt6josaEgPCBreW96b3VcIDsKK+WGl+iogCA8IGpvdWdlblwgOwor5qyg54mHIDwga2FrZXJhXCA7CivpgKPnm58gPCByZW5tZWlcIDsKK+W5vOeomiA8IHlvdWNoaVwgOwor5b6M5aSpIDwga291dGVuXCA7CivlhbfotrMgPCBndXNva3VcIDsKK+mxl+eyiSA8IHJpbnB1blwgOwor5YyW5a2mIDwga2FnYWt1XCA7CivpgbXms5UgPCBqdW5wb3VcIDsKK+eZvemHkSA8IGhha2tpblwgOwor6YGp5ripIDwgdGVraW9uXCA7CivljZfljYogPCBuYW5oYW5cIDsKK+mAuOeQgyA8IGlra3l1dVwgOwor6YWN5YmkIDwgaGFpemFpXCA7Civmra/moLkgPCBzaGlrb25cIDsKK+WNkuWOuyA8IHNva2t5b1wgOwor5YaN6KqVIDwgc2FpdGFuXCA7CivpgbjmsJEgPCBzZW5taW5cIDsKK+W4guihlyA8IHNoaWdhaVwgOwor5bWp6auYIDwgc3V1a291XCA7CivlhYjpi5IgPCBzZW5wb3VcIDsKK+ecn+e2vyA8IG1hd2F0YVwgOwor5qyj54S2IDwga2luemVuXCA7CivlkZHlhbXooZsgPCBub25iZWVcIDsKK+W+jOWhtSA8IGtvdWppblwgOwor5YWo6LuNIDwgemVuZ3VuXCA7CivpgIHnqL8gPCBzb3Vrb3VcIDsKK+WGt+iUtSA8IHJlaXpvdVwgOwor6YWN5YiGIDwgaGFpYnVuXCA7Civlvqnlk6EgPCBmdWt1aW5cIDsKK+WHuue0jSA8IHN1aXRvdVwgOwor5Yem572uIDwgc2hvY2hpXCA7Civlho3oqKogPCBzYWlob3VcIDsKK+iNieiRiSA8IGt1c2FiYVwgOwor5bm056iOIDwgbmVuemVpXCA7Civlho3oqIIgPCBzYWl0ZWlcIDsKK+iLm+mFtyA8IGtha29rdVwgOwor5by35omTIDwga3lvdWRhXCA7CivpgqrmlZkgPCBqYWt5b3VcIDsKK+efouaWhyA8IHlhYnVtaVwgOwor5YaF6KuHIDwgbmFpZGFuXCA7CivmsI/lkI0gPCBzaGltZWlcIDsKK+WFt+ixoSA8IGd1c2hvdVwgOwor55yf57SFIDwgc2hpbmt1XCA7CivljZPlirkgPCB0YWtrb3VcIDsKK+iJpum9oiA8IGthbnJlaVwgOwor5Yuk5oCgIDwga2ludGFpXCA7CivljbPku4ogPCBzb2trb25cIDsKK+mAo+eVqiA8IHJlbmJhblwgOwor5b605YufIDwgY2hvdWJvXCA7CivpgqbmlocgPCBob3VidW5cIDsKK+W9k+W6lyA8IHRvdXRlblwgOwor5qyg54K5IDwga2V0dGVuXCA7CivlvIrmnZEgPCBoZWlzb25cIDsKK+W9k+W5tCA8IHRvdW5lblwgOwor5bm056WtIDwgbmVuc2FpXCA7CivlvbzlpbMgPCBrYW5vam9cIDsKK+iNt+e4hCA8IG5pbmF3YVwgOwor5q275paHIDwgc2hpYnVuXCA7CivojY/oi5IgPCBqaW56ZW5cIDsKK+ats+aZqSA8IHNhaWJhblwgOwor5YyF5a65IDwgaG91eW91XCA7CivovrLoirggPCBub3VnZWlcIDsKK+W5tOekvCA8IG5lbnJlaVwgOwor5byU5peXIDwgY2hvdWtpXCA7CivpgIDnpL4gPCB0YWlzaGFcIDsKK+WNiuWNiiA8IGhhbmhhblwgOwor5Yil55uDIDwgYmVwcGFpXCA7CivpgY7mv4AgPCBrYWdla2lcIDsKK+WGheiokyA8IG5haWt1blwgOwor55qH6LuNIDwga291Z3VuXCA7CivmsLTku5kgPCBzdWlzZW5cIDsKK+WNtOS4iyA8IGt5YWtrYVwgOwor5LiN576p55CGIDwgZnVnaXJpXCA7Civlho3oo70gPCBzYWlzZWlcIDsKK+W8t+aFoiA8IGdvdW1hblwgOwor5biM6JaEIDwga2loYWt1XCA7CivljZjlhYMgPCB0YW5nZW5cIDsKK+mBoOa1hSA8IHRvb2FzYVwgOwor6L2G6L2kIDwgcm9rdXJvXCA7Civmr5LlqaYgPCBkb2t1ZnVcIDsKK+WNl+WFiSA8IG5hbmtvdVwgOwor6YWN5YG2IDwgaGFpZ3V1XCA7CivlhoXoprMgPCBuYWlrYW5cIDsKK+eZuumAgSA8IGhhc3NvdVwgOwor5b6h5ZGKIDwgb3RzdWdlXCA7CivlhoXopqcgPCBuYWlyYW5cIDsKK+mBoOa0iyA8IGVuJyd5b3VcIDsKK+W8vuaApyA8IGRhbnNlaVwgOwor5YaF6KaLIDwgbmFpa2VuXCA7CivlvaLlrrkgPCBrZWl5b3VcIDsKK+acieaEj+W3riA8IHl1dWlzYVwgOwor5by35oOFIDwgZ291am91XCA7CivljYPljYMgPCBjaGlkamlcIDsKK+i/kee4gSA8IGtpbicnZW5cIDsKK+ecn+euhyA8IHNoaW5rb1wgOwor6a2a6aGeIDwgZ3lvcnVpXCA7Civli4fmiKYgPCB5dXVzZW5cIDsKK+m2j+WPoyA8IGtlaWtvdVwgOwor5bi4572uIDwgam91Y2hpXCA7CivljZLlhYggPCBzb3NzZW5cIDsKK+mBoOayiCA8IGVuY2hpblwgOwor5q2j5pysIDwgc2VpaG9uXCA7CivmraPmnKggPCBtYXNha2lcIDsKK+WFqOiyjCA8IHplbmJvdVwgOwor6YOo5bCGIDwgYnVzaG91XCA7CivlhYjpgaMgPCBzZW5rZW5cIDsKK+ehq+WMliA8IHJ5dXVrYVwgOwor6YGh5rGCIDwgc29reXV1XCA7CivnnLznnrwgPCBnYW5rZW5cIDsKK+WNiuWIhiA8IGhhbnB1blwgOwor5YiG56S+IDwgYnVuc2hhXCA7CivmraPmm7ggPCBzZWlzaG9cIDsKK+WFpeiyuyA8IG55dXVoaVwgOwor55+t5omAIDwgdGFuc2hvXCA7CivljYjliLsgPCBnb2tva3VcIDsKK+WNoOS9jyA8IHNlbmp1dVwgOwor5beh6KanIDwganVucmFuXCA7CivmsJflhJggPCBraW1hbWFcIDsKK+W/jOS4rSA8IGtpY2h1dVwgOwor5YaF6KOFIDwgbmFpc291XCA7CivlvbnloLQgPCB5YWt1YmFcIDsKK+mtlOmiqCA8IG1ha2F6ZVwgOwor5Ye656qTIDwgZGVtYWRvXCA7Civnm67ohIIgPCBtZXlhbmlcIDsKK+WKqeaVmSA8IGpva3lvdVwgOwor6YWS5LuZIDwgc2h1c2VuXCA7Civpto/ljbUgPCBrZWlyYW5cIDsKK+ecn+eruSA8IG1hZGFrZVwgOwor55yL57WMIDwga2Fua2luXCA7Civlu7rmnZAgPCBrZW56YWlcIDsKK+eZuui7iiA8IGhhc3NoYVwgOwor5rCR5YW1IDwgbWlucGVpXCA7CivlvqnliIogPCBmdWtrYW5cIDsKK+WNiuWGhiA8IGhhbicnZW5cIDsKK+WLmOW9kyA8IGthbmRvdVwgOwor5byK5pS/IDwgaGVpc2VpXCA7CivljIjlpbQgPCBreW91ZG9cIDsKK+mFkuS5sSA8IHNodXJhblwgOwor55uy6ICFIDwgbW91c2hhXCA7Civlu4PmtrIgPCBoYWlla2lcIDsKK+W3puihqCA8IHNhaHlvdVwgOwor6YGF5rueIDwgY2hpdGFpXCA7CivliIDnpLwgPCB0b3VyZWlcIDsKK+W8geaYjiA8IGJlbm1laVwgOwor5b+D5LqLIDwgc2hpbmppXCA7Civli5jlvIEgPCBrYW5iZW5cIDsKK+assuawlyA8IHlva3VrZVwgOwor55+t5oWuIDwgdGFucnlvXCA7CivljYPliIYgPCBzZW5idW5cIDsKK+WKo+aVlyA8IHJlcHBhaVwgOwor5q+O5aSVIDwgbWFpeXV1XCA7CivnoLLlo7AgPCBob3VzZWlcIDsKK+WFiei8qiA8IGtvdXJpblwgOwor5Y2S5YCSIDwgc290dG91XCA7CivljZjkvZMgPCB0YW50YWlcIDsKK+eZvui2syA8IG11a2FkZVwgOwor5qyn5rSyIDwgb3VzaHV1XCA7Civli4XmhI8gPCBjaG9rdWlcIDsKK+WFrOirliA8IGtvdXJvblwgOwor5Y2B5YiGIDwganVwcHVuXCA7CivprZrpm7cgPCBneW9yYWlcIDsKK+WFiOi8qSA8IHNlbnBhaVwgOwor5bmz55uuIDwgaGlyYW1lXCA7Civpg7flo6sgPCBnb3VzaGlcIDsKK+atpOaWuSA8IGtvbmF0YVwgOwor5Ymj5rOVIDwga2VucG91XCA7CivojLbojLYgPCBjaGFjaGFcIDsKK+ato+aWuSA8IHNlaWhvdVwgOwor5q2m5pWZIDwgYnVreW91XCA7Civliarmr5sgPCBzZW5tb3VcIDsKK+mFjeS5lyA8IGhhaWpvdVwgOwor55+c5oyBIDwga3lvdWppXCA7CivovrLogJUgPCBub3Vrb3VcIDsKK+WNg+WGhiA8IHNlbicnZW5cIDsKK+WIneeUnyA8IHNob3NlaVwgOwor5YWs6KqNIDwga291bmluXCA7Civlt6HooYwgPCBqdW5rb3VcIDsKK+WMuuWKgyA8IGt1a2FrdVwgOwor5q2j5paHIDwgc2VpYnVuXCA7CivmrYzmoLwgPCBrYWtha3VcIDsKK+W5veeVjCA8IHl1dWthaVwgOwor5q2j5pWwIDwgc2Vpc3V1XCA7CivlvozlkbMgPCBhdG9hamlcIDsKK+egsuWhlCA8IGhvdXRvdVwgOwor56Gd5YyWIDwgc2hvdWthXCA7CivlhbzooYwgPCBrZW5rb3VcIDsKK+W9q+WhkSA8IGNob3Vzb1wgOwor5Y2B5YWoIDwganV1emVuXCA7CivlhazoqLEgPCBrb3VreW9cIDsKK+WNl+S6rCA8IG5hbmtpblwgOwor55+l5oWuIDwgY2hpcnlvXCA7CivmrbvmiYAgPCBzaGlzaG9cIDsKK+W5vOeUnyA8IHlvdXNlaVwgOwor6YGT5rCRIDwgZG91bWluXCA7CivljYrlgKQgPCBoYW4nJ25lXCA7CivmgrbjgIUgPCBtb25tb25cIDsKK+i/lOetlCA8IGhlbnRvdVwgOwor6Iy26ImyIDwgY2hhaXJvXCA7CivmqKnorIAgPCBrZW5ib3VcIDsKK+m2j+WGoCA8IHRvc2FrYVwgOwor55m+6LKoIDwgaHlha2thXCA7Civlu7vmlocgPCBrYWlidW5cIDsKK+WLgeaCjSA8IGtlaWthblwgOwor5YWD6LuNIDwgZ2VuZ3VuXCA7CivljYHlhIQgPCBqdXVva3VcIDsKK+W8leaJiyA8IGhpa2l0ZVwgOwor6a2U6ZqcIDwgbWFzaG91XCA7CivliIfnm64gPCBraXJlbWVcIDsKK+W8leaIuCA8IGhpa2lkb1wgOwor6Luf6aKoIDwgbmFucHV1XCA7CivnnLznlYwgPCBnYW5rYWlcIDsKK+iMtuiHvCA8IGNoYXVzdVwgOwor6YG45pu4IDwgc2Vuc2hvXCA7Civoi7HoqLMgPCBlaXlha3VcIDsKK+i7oumfsyA8IHRlbicnb25cIDsKK+aui+W9sSA8IHphbicnZWlcIDsKK+iKs+mGhyA8IGhvdWp1blwgOwor5bm055SjIDwgbmVuc2FuXCA7CivlubTnlJ8gPCBuZW5zZWlcIDsKK+WNg+WAjSA8IHNlbmJhaVwgOwor5buD5q6LIDwgaGFpemFuXCA7Civoia/ppqwgPCByeW91YmFcIDsKK+W5s+eUnyA8IGhlaXplaVwgOwor6YGK5rCRIDwgeXV1bWluXCA7CivokZvluIMgPCBrdXp1ZnVcIDsKK+W7g+atoiA8IGhhaXNoaVwgOwor6Lyq6LuiIDwgcmludGVuXCA7Civpq5jnt6/luqYgPCBrb3VpZG9cIDsKK+W4huiIuSA8IGhvYnVuZVwgOwor5Y2B5YCNIDwganV1YmFpXCA7CivliZvmr5sgPCBnb3Vtb3VcIDsKK+avjuWbniA8IG1haWthaVwgOwor5q+N5Zu9IDwgYm9rb2t1XCA7CivmsJHkurogPCBtaW5qaW5cIDsKK+ecn+eggiA8IG1hc2Fnb1wgOwor5Yqp5omLIDwgc3VrZXRlXCA7CivmraLmj5ogPCBzaGl5b3VcIDsKK+W5veeOhCA8IHl1dWdlblwgOwor6Iq46YGTIDwgZ2VpZG91XCA7CivliqDmjK8gPCBrYXNoaW5cIDsKK+ebm+iAhSA8IGpvdXNoYVwgOwor5b255ZOhIDwgeWFrdWluXCA7Civlvq7kubMgPCBiaW55dXVcIDsKK+ecjOeojiA8IGtlbnplaVwgOwor5YSq6YGHIDwgeXV1Z3V1XCA7Civnn7Plt6UgPCBzZWtrb3VcIDsKK+WGheiUtSA8IG5haXpvdVwgOwor5rCR5Li7IDwgbWluc2h1XCA7CivliJ3niq8gPCBzaG9oYW5cIDsKK+auv+WggiA8IGRlbmRvdVwgOwor5bq25rCRIDwgc2hvbWluXCA7CivnnqzmmYIgPCBzaHVuamlcIDsKK+WEqumAgCA8IHl1dXRhaVwgOwor5Ye555uuIDwga3Vib21lXCA7CivliqPmiY0gPCByZXNzYWlcIDsKK+i8qui3nSA8IHJpbmt5b1wgOwor6L+U56S8IDwgaGVucmVpXCA7CivliIDnl5UgPCB0b3Vrb25cIDsKK+mztOaIuCA8IG5hcnV0b1wgOwor5YuY5a6aIDwga2Fuam91XCA7CivlhoXokpkgPCBuYWltb3VcIDsKK+ebruezniA8IG1la3Vzb1wgOwor5bqn5rW0IDwgemF5b2t1XCA7CivmqJnoqp4gPCBoeW91Z29cIDsKK+eZveipsSA8IGhha3V3YVwgOwor5Yik54S2IDwgaGFuemVuXCA7CivnoILlrZAgPCBzdW5hZ29cIDsKK+aCoOOAhSA8IHl1dXl1dVwgOwor5Yq05b25IDwgcm91ZWtpXCA7CivojJfojbcgPCBteW91Z2FcIDsKK+ebruexoCA8IG1la2Fnb1wgOwor552A54mpIDwga2ltb25vXCA7Civou4rpoqggPCBzaGFmdXVcIDsKK+aomeiomCA8IGh5b3VraVwgOwor6aya6auvIDwgc2h1emVuXCA7CivliY3mrrUgPCB6ZW5kYW5cIDsKK+mBruaWrSA8IHNoYWRhblwgOwor6YGp5pmCIDwgdGVraWppXCA7CivojYnntJkgPCBzb3VzaGlcIDsKK+iQveW+jCA8IHJha3Vnb1wgOwor55uy566hIDwgbW91a2FuXCA7CivljYHkuIkgPCBqdXVzYW5cIDsKK+WNgeS4hyA8IGp1dW1hblwgOwor5q+S5ZGzIDwgZG9rdW1pXCA7CivokYnlt7sgPCBoYW1ha2lcIDsKK+W8teWtkCA8IGhhcmlrb1wgOwor55+z5bGLIDwgaXNoaXlhXCA7CivlvqHkuLsgPCBvbnVzaGlcIDsKK+mDveWQiCA8IHRzdWdvdVwgOwor5b6h5LitIDwgb25jaHV1XCA7CivoirHovKogPCBoYW5hd2FcIDsKK+W8geaFtiA8IGJlbmtlaVwgOwor5LiN6LKe5a+dIDwgZnV0ZW5lXCA7CivlhY3oqLEgPCBtZW5reW9cIDsKK+W5sueKryA8IGthbnBhblwgOwor5Ymq5p6dIDwgc2Vuc2hpXCA7CivoirHou7ggPCBrYWppa3VcIDsKK+W5veeEtiA8IHl1dXplblwgOwor5Ye555SwIDwga3Vib3RhXCA7Civoi6boobcgPCBrdWNodXVcIDsKK+eZuuimiyA8IGhha2tlblwgOwor5YWO6KeSIDwgdG9rYWt1XCA7CivlvZPlnLAgPCB0b3VjaGlcIDsKK+W5sueJqSA8IGhpbW9ub1wgOwor5bmz54mIIDwgaGVpaGFuXCA7Civoi6booYwgPCBrdWd5b3VcIDsKK+mvqOiEgiA8IGdlaXNoaVwgOwor5YaN6IiIIDwgc2Fpa291XCA7CivokL3luqYgPCBvY2hpZG9cIDsKK+egsuWPsCA8IGhvdWRhaVwgOwor5YaN6IeoIDwgc2FpcmluXCA7CivnnJ/nlLAgPCBzYW5hZGFcIDsKK+WKqeW9uSA8IGpveWFrdVwgOwor5q+O5Y+3IDwgbWFpZ291XCA7CivliqPmgKcgPCByZXNzZWlcIDsKK+ebruesiiA8IG1lemFydVwgOwor5q2v5b2iIDwgaGFnYXRhXCA7CivlvL7lpY8gPCBkYW5zb3VcIDsKK+WMheWQqyA8IGhvdWdhblwgOwor5buD5qChIDwgaGFpa291XCA7Civlvozkvr8gPCBrb3ViaW5cIDsKK+WMjeWMkCA8IGhvZnVrdVwgOwor6YOK5aSWIDwga291Z2FpXCA7CivlvLflp6YgPCBnb3VrYW5cIDsKK+eZveihoyA8IGJ5YWt1ZVwgOwor5beo6ImmIDwga3lva2FuXCA7CivpgLLmrakgPCBzaGlucG9cIDsKK+WHoeecvCA8IGJvbmdhblwgOwor5YOn6ZaAIDwgc291bW9uXCA7Civov5Tnm4MgPCBoZW5wYWlcIDsKK+W3peiKuCA8IGtvdWdlaVwgOwor6LuN6ZqKIDwgZ3VudGFpXCA7CivokL3lt64gPCByYWt1c2FcIDsKK+W3qOiIuSA8IGt5b3NlblwgOwor6bGX54q2IDwgcmluam91XCA7Civou43pmaMgPCBndW5qaW5cIDsKK+i8quismyA8IHJpbmtvdVwgOwor5q6L5a2YIDwgemFuem9uXCA7CivlubPnhLYgPCBoZWl6ZW5cIDsKK+WIh+eJhyA8IHNlcHBlblwgOwor5YyX5YWJIDwgaG9ra291XCA7CivmrablvrMgPCBidXRva3VcIDsKK+ecieebriA8IGJpbW9rdVwgOwor55y854K5IDwgZ2FudGVuXCA7Civli5XlpKkgPCBkb3V0ZW5cIDsKK+WKn+W+syA8IGt1ZG9rdVwgOwor5b6M5Lu2IDwga291a2VuXCA7CivoiabpmoogPCBrYW50YWlcIDsKK+atr+WMu+iAhSA8IGhhaXNoYVwgOwor6IuX6KOUIDwgYnlvdWVpXCA7CivliqDlvbkgPCBrYXlha3VcIDsKK+W+jOS7oyA8IGtvdWRhaVwgOwor6bGX54mHIDwgcmlucGVuXCA7CivlvIrlupcgPCBoZWl0ZW5cIDsKK+ecn+eQhiA8IHNoaW5yaVwgOwor5YSV6LypIDwgc2FpaGFpXCA7Civnmq7ohpwgPCBoaW1ha3VcIDsKK+S8vOmhlOe1tSA8IG5pZ2FvZVwgOwor5b255YSAIDwgeWFrdWdpXCA7CivnnJ/nj6AgPCBzaGluanVcIDsKK+WJquaWrSA8IHNlbmRhblwgOwor5YWs6JGsIDwga291c291XCA7CivnoILloLQgPCBzdW5hYmFcIDsKK+W8geW9kyA8IGJlbnRvdVwgOwor6YCT5ribIDwgdGVpZ2VuXCA7CivlvoDkv6EgPCBvdXNoaW5cIDsKK+i7jemWgCA8IGd1bm1vblwgOwor5bqn5qiZIDwgemFoeW91XCA7CivprZrpgZMgPCBneW9kb3VcIDsKK+iJh+mmliA8IHRlaXNodVwgOwor6YKq5a6XIDwgamFzaHV1XCA7CivmraPlvKYgPCBzZWlnZW5cIDsKK+WLh+WnvyA8IHl1dXNoaVwgOwor5YiG54WZIDwgYnVuJydlblwgOwor5qyg5pysIDwga2VwcG9uXCA7Civmr47liIYgPCBtYWlmdW5cIDsKK+WItuatoiA8IHNlaXNoaVwgOwor6YO15Yi4IDwgeXV1a2VuXCA7CivojZLno68gPCBhcmFpc29cIDsKK+i7vei8qSA8IGtlaWhhaVwgOwor6I+v5pePIDwga2F6b2t1XCA7Civmp4vpgKAgPCBrb3V6b3VcIDsKK+iRl+WkpyA8IGNob2RhaVwgOwor5Ye654mpIDwgZGVtb25vXCA7CivojIXoiI4gPCBib3VzaGFcIDsKK+W6p+alrSA8IHphZ3lvdVwgOwor5Yud5ZugIDwgc2hvdWluXCA7Civnmq7ogokgPCBoaW5pa3VcIDsKK+WJjeagvSA8IHNlbnphaVwgOwor56Cy5YW1IDwgaG91aGVpXCA7CivlhoXogZ4gPCBuYWlidW5cIDsKK+WIhueCuSA8IGJ1bnRlblwgOwor5q275a6IIDwgc2hpc2h1XCA7CivlupXmraIgPCB0ZWlzaGlcIDsKK+WFteiIuSA8IGhlaXNlblwgOwor5Yil5rOVIDwgYmVwcG91XCA7Civlh7jniYggPCB0b3BwYW5cIDsKK+mAmuawlyA8IHRzdXVraVwgOwor5Yqg5beeIDwga2FzaHV1XCA7CivmraPluLggPCBzZWlqb3VcIDsKK+W7u+W7iiA8IGthaXJvdVwgOwor6YCf5q2pIDwgc29rdWhvXCA7CivlubLmvZ8gPCBoaWdhdGFcIDsKK+i7vei6gSA8IGtlaXNvdVwgOwor6YGl5oudIDwgeW91aGFpXCA7Civoirjoq4cgPCBnZWlkYW5cIDsKK+W3p+iAhSA8IGtvdXNoYVwgOwor5YSq6KuaIDwgeXV1am91XCA7Civps6nluqcgPCBoYXRvemFcIDsKK+efreWkpyA8IHRhbmRhaVwgOwor5bem57+8IDwgc2F5b2t1XCA7CivojLbnrYUgPCBjaGFzZW5cIDsKK+WJjeadvyA8IG1hZWl0YVwgOwor5YO76YGgIDwgaGVraWVuXCA7Civpq5jpupcgPCBrb3VyYWlcIDsKK+i6q+mggyA8IG1pZ29yb1wgOwor5YmN5p2hIDwgemVuam91XCA7CivlhaXojbcgPCBueXV1a2FcIDsKK+WJsuaLoCA8IGtha2t5b1wgOwor5by35Zu6IDwga3lvdWtvXCA7CivlubPmupYgPCBoZWlqdW5cIDsKK+W8n+WmuSA8IHRlaW1haVwgOwor55eb6aOyIDwgdHN1dWluXCA7Civlir7lpY8gPCBnYWlzb3VcIDsKK+W5sua6gCA8IGthbm1hblwgOwor5YmN5pu4IDwgemVuc2hvXCA7Civlu7blubQgPCBlbicnbmVuXCA7Civnl4XprZQgPCBieW91bWFcIDsKK+WIqeassiA8IHJpeW9rdVwgOwor6YOt5YWsIDwga2Fra291XCA7Civluq3mnKggPCBuaXdha2lcIDsKK+alvemfsyA8IGdha3VvblwgOwor5q6L5aGBIDwgemFucnVpXCA7CivlhaXoi5EgPCBueXV1ZW5cIDsKK+iLpeiRiSA8IHdha2FiYVwgOwor5YeG55yLIDwganVua2FuXCA7CivluLjnlKggPCBqb3V5b3VcIDsKK+WLsuWKnyA8IGt1bmtvdVwgOwor5byK5a6zIDwgaGVpZ2FpXCA7CivmraTlsrggPCBzaGlnYW5cIDsKK+W5s+a3oSA8IGhlaXRhblwgOwor54Gr5LqL5aC0IDwga2FqaWJhXCA7CivlhajoiKwgPCB6ZW5wYW5cIDsKK+WJjeaZryA8IHplbmtlaVwgOwor6YGg5oiaIDwgZW5zZWtpXCA7CivmrrrliLAgPCBzYXR0b3VcIDsKK+ebruebmyA8IG1lbW9yaVwgOwor6Iul6I+cIDwgd2FrYW5hXCA7CivluIbnq4sgPCBob3RhdGVcIDsKK+mDoeWItiA8IGd1bnNlaVwgOwor6YO15L6/IDwgeXV1YmluXCA7Civou6LpgIEgPCB0ZW5zb3VcIDsKK+ebrueZvSA8IG1lamlyb1wgOwor55uq55uqIDwgdG91dG91XCA7CivliJ3mrrUgPCBzaG9kYW5cIDsKK+iIuemgrSA8IHNlbmRvdVwgOwor5b2T5YiGIDwgdG91YnVuXCA7CivpgLHmnJ8gPCBzaHV1a2lcIDsKK+mDjuWQmyA8IHJvdWt1blwgOwor6L+R54q2IDwga2luam91XCA7Civlt6jnt6ggPCBreW9oZW5cIDsKK+iKseimiyA8IGhhbmFtaVwgOwor5YaF57eaIDwgbmFpc2VuXCA7CivmrKDmkI0gPCBrZXNzb25cIDsKK+WGhee3kiA8IG5haXNob1wgOwor5YiR5rOVIDwga2VpaG91XCA7Civps7TlrZAgPCBuYXJ1a29cIDsKK+WJjeaWhyA8IHplbmJ1blwgOwor5q2m5a2mIDwgYnVnYWt1XCA7Civlh7rmva4gPCBkZXNoaW9cIDsKK+W4reeUuyA8IHNla2lnYVwgOwor6YCG5q+bIDwgc2FrYWdlXCA7Civpganlv5wgPCB0ZWtpb3VcIDsKK+mtmuiynSA8IGd5b2JhaVwgOwor6Iul6Iq9IDwgd2FrYW1lXCA7Civou6LovIkgPCB0ZW5zYWlcIDsKK+WGt+ecvCA8IHJlaWdhblwgOwor5Yuk5YuJIDwga2luYmVuXCA7Civmq5vmr5QgPCBzaGlwcGlcIDsKK+mAgeawtCA8IHNvdXN1aVwgOwor5Yuk5Yq0IDwga2lucm91XCA7CivluILnqI4gPCBzaGl6ZWlcIDsKK+avjeS5syA8IGJvbnl1dVwgOwor6Lui6LuiIDwgdGVudGVuXCA7CivpgZTmiJAgPCB0YXNzZWlcIDsKK+WGhee0myA8IG5haWZ1blwgOwor5Yu/5L2TIDwgbW90dGFpXCA7Civli5jlkIggPCBrYW5nb3VcIDsKK+iMtueilyA8IGNoYXdhblwgOwor6LuN6YWNIDwgZ3VuYmFpXCA7CivlubPmsLQgPCBoZWlzdWlcIDsKK+mzpeWxiyA8IHRvcml5YVwgOwor5bmz5rCRIDwgaGVpbWluXCA7CivlubPmsI8gPCBoZWlzaGlcIDsKK+mAo+aenSA8IHJlbnNoaVwgOwor5q+N5LiKIDwgaGFoYXVlXCA7Civli5XlkJEgPCBkb3Vrb3VcIDsKK+eWvumnhiA8IHNoaWtrdVwgOwor5Ye95rigIDwga2Fua3lvXCA7CivovrLnlKMgPCBub3VzYW5cIDsKK+WIkeatuyA8IGtlaXNoaVwgOwor5qW86ZaAIDwgcm91bW9uXCA7CivlhaznvbIgPCBrb3VzaG9cIDsKK+W5tOatryA8IG5lbnNoaVwgOwor6YCg5p6XIDwgem91cmluXCA7CivoiLnpmoogPCBzZW50YWlcIDsKK+mBoOW/gyA8IGVuc2hpblwgOwor6Iub6IubIDwgaXJhaXJhXCA7CivlvLHlkbMgPCB5b3dhbWlcIDsKK+mBqeW6piA8IHRla2lkb1wgOwor5YmK5pGpIDwgc2FrdW1hXCA7CivovKrolLUgPCByaW56b3VcIDsKK+W8vuWKviA8IGRhbmdhaVwgOwor6YGU5oSPIDwgdGF0c3VpXCA7CivlupXmnKwgPCB0ZWlob25cIDsKK+WIsOadpSA8IHRvdXJhaVwgOwor55m66ImmIDwgaGFra2FuXCA7CivliI7mrbsgPCBmdW5zaGlcIDsKK+i7jemBkyA8IGd1bmRvdVwgOwor5Ym15bu6IDwgc291a2VuXCA7CivliY3mj5AgPCB6ZW50ZWlcIDsKK+WGrOedgCA8IGZ1eXVnaVwgOwor6YCg5pysIDwgem91aG9uXCA7CivnnIvngrkgPCBrYW50ZW5cIDsKK+aso+aHkCA8IGtpbmthaVwgOwor6JaE44CFIDwgdXN1dXN1XCA7CivlhqznnKAgPCB0b3VtaW5cIDsKK+ixqumbqOemjSA8IGdvdXVrYVwgOwor5Yud5YipIDwgc2hvdXJpXCA7Civnmbvoh6ggPCB0b3VyaW5cIDsKK+i7iumBkyA8IHNoYWRvdVwgOwor5by35YyWIDwga3lvdWthXCA7Civovpvnm64gPCBrYXJhbWVcIDsKK+WLleWLoiA8IGRvdXNlaVwgOwor55e06YiNIDwgY2hpZG9uXCA7Civmrovlk4EgPCB6YW5waW5cIDsKK+W6uOaJjSA8IHlvdXNhaVwgOwor5YuV5Yq0IDwgZG91cm91XCA7Civou5LovIogPCBrZW5jaGlcIDsKK+WFieiKkiA8IGtvdWJvdVwgOwor5biv54q2IDwgb2Jpam91XCA7Civoi6bogokgPCBrdW5pa3VcIDsKK+mAo+aYnyA8IHJlbnNlaVwgOwor55uu546JIDwgbWVkYW1hXCA7CivojLbnm4YgPCBjaGFib25cIDsKK+mDjuWFmiA8IHJvdWRvdVwgOwor5biD55+zIDwgZnVzZWtpXCA7Civoh6Xpvo0gPCBnYXJ5b3VcIDsKK+W8geWkqSA8IGJlbnRlblwgOwor5YiH5q2vIDwgc2Vzc2hpXCA7Civnn63lkb0gPCB0YW5tZWlcIDsKK+W3o+eusSA8IHN1YmFrb1wgOwor5q6/5LiKIDwgdGVuam91XCA7CivoiLfploAgPCBnZW5tb25cIDsKK+mBuOWumiA8IHNlbnRlaVwgOwor5YuH5ZCNIDwgeXV1bWVpXCA7CivmraPlpKcgPCBzZWlkYWlcIDsKK+mrkemrjyA8IGRva3Vyb1wgOwor5Yip5pytIDwgcmlmdWRhXCA7Civpgbflrq4gPCBzZW5ndXVcIDsKK+i7ouiyuCA8IHRlbnRhaVwgOwor5byB5aOrIDwgYmVuc2hpXCA7Civkupzpurvoo70gPCBhbWFzZWlcIDsKK+mBk+W/tSA8IGRvdW5lblwgOwor556z5a2QIDwgZG91c2hpXCA7CivlvZPku6MgPCB0b3VkYWlcIDsKK+W6iuacuiA8IHNob3VnaVwgOwor5YWI6IisIDwgc2VucGFuXCA7CivlvZPkurogPCB0b3VuaW5cIDsKK+mBteWuiCA8IGp1bnNodVwgOwor6LuK6LyqIDwgc2hhcmluXCA7CivliJ3moKEgPCBzaG9rb3VcIDsKK+i7jei7iiA8IGd1bnNoYVwgOwor6YCj5pWXIDwgcmVucGFpXCA7CivlupXmlbAgPCB0ZWlzdXVcIDsKK+WHuuawtCA8IGRlbWl6dVwgOwor6Lqr6YqtIDwgbWl6ZW5pXCA7CivoiabovIkgPCBrYW5zYWlcIDsKK+W6g+adsSA8IGthbnRvblwgOwor5biD55uuIDwgbnVub21lXCA7Civlhbjnr4QgPCB0ZW5wYW5cIDsKK+eXhemZoiA8IGJ5b3VpblwgOwor55+l5ZG9IDwgY2hpbWVpXCA7Civnm5fnlKggPCB0b3V5b3VcIDsKK+WJm+aApyA8IGdvdXNlaVwgOwor5b2T5LiWIDwgdG91c2VpXCA7Civli4nlirEgPCBiZW5yZWlcIDsKK+WHuuauuyA8IGRlZ2FyYVwgOwor5YWO6IKJIDwgdG9uaWt1XCA7CivnnKDmsJcgPCBuZW11a2VcIDsKK+iMtueVqiA8IGNoYWJhblwgOwor55yf5rC0IDwgbWFtaXp1XCA7Civlt6bnqIsgPCBzYWhvZG9cIDsKK+mrmOmiqCA8IGtvdWZ1dVwgOwor5bm95p6XIDwgeXV1cmluXCA7Civov5TmuIggPCBoZW5zYWlcIDsKK+WGrOeTnCA8IHRvdWdhblwgOwor5q6K5YuyIDwgc2h1a3VuXCA7CivlhYnog4wgPCBrb3VoYWlcIDsKK+i7jOi3oSA8IGtpc2VraVwgOwor5byx5YagIDwgamFra2FuXCA7Civnn6Xlj4sgPCBjaGl5dXVcIDsKK+WKoOWcpyA8IGthYXRzdVwgOwor6Iy255O2IDwgY2hhYmluXCA7CivliKnmlbUgPCByaXRla2lcIDsKK+WIpOaYjiA8IGhhbm1laVwgOwor6YGp5a6cIDwgdGVraWdpXCA7Civmrorlip8gPCBzaHVrb3VcIDsKK+W8peWLkiA8IG1pcm9rdVwgOwor5Yal55WMIDwgbWVpa2FpXCA7Civoiq3olYkgPCBiYXNob3VcIDsKK+mBi+W8kyA8IHVua3l1dVwgOwor5Ymj5bivIDwga2VudGFpXCA7Civpq5jpn7MgPCB0YWthbmVcIDsKK+iJr+iyqCA8IHJ5b3VrYVwgOwor55+t5YmjIDwgdGFua2VuXCA7CivlhYjogZYgPCBzZW5zZWlcIDsKK+WFqOexsyA8IHplbmJlaVwgOwor55uy54K5IDwgbW91dGVuXCA7CivliKTmlq0gPCBoYW5kYW5cIDsKK+atk+WjsCA8IGthbnNlaVwgOwor5qy95a6aIDwga2ludGVpXCA7CivpgI/mmI4gPCB0b3VtZWlcIDsKK+mHjeOAhSA8IGp1dWp1dVwgOwor6Luf6KuWIDwgbmFucm9uXCA7CivpgrjlhoUgPCB0ZWluYWlcIDsKK+WFjee9qiA8IG1lbnphaVwgOwor5buD5bidIDwgaGFpdGVpXCA7Civnn63liIAgPCB0YW50b3VcIDsKK+WFrOeulyA8IGtvdXNhblwgOwor6IiM6aCtIDwgemV0dG91XCA7CivpgbjlpJYgPCBzZW5nYWlcIDsKK+atu+WOuyA8IHNoaWt5b1wgOwor6LuN6LOHIDwgZ3Vuc2hpXCA7CivlvJXlkIggPCBoaWtpYWlcIDsKK+W5veaZryA8IHl1dWtlaVwgOwor6YGK5bqVIDwgeXV1dGVpXCA7Civnn6nliYcgPCBrdXNva3VcIDsKK+W3oeekvCA8IGp1bnJlaVwgOwor5bm05p2lIDwgbmVucmFpXCA7CivliJ3ml6wgPCBzaG9qdW5cIDsKK+W5s+advyA8IGhlaWJhblwgOwor5YSA6KGoIDwgZ2loeW91XCA7CivlhbXnqK4gPCBoZWlzaHVcIDsKK+W3qOegsiA8IGt5b2hvdVwgOwor55qG57SNIDwga2Fpbm91XCA7CivmrovlhZogPCB6YW50b3VcIDsKK+asoeW4rSA8IGppc2VraVwgOwor5q2M5aOwIDwgdXRhZ29lXCA7CivmqKHntKIgPCBtb3Nha3VcIDsKK+aui+WFiSA8IHphbmtvdVwgOwor5YWD6ICBIDwgZ2Vucm91XCA7CivoirPojYkgPCBob3Vzb3VcIDsKK+ecn+aoqiA8IG1heW9rb1wgOwor5YWr56uvIDwgaGF0dGFuXCA7CivliIbmoKEgPCBidW5rb3VcIDsKK+mAo+aKlSA8IHJlbnRvdVwgOwor55uX54qvIDwgdG91aGFuXCA7CivlvL7kuLggPCBkYW5nYW5cIDsKK+atjOWigyA8IGtha3lvdVwgOwor5YaZ55SfIDwgc2hhc2VpXCA7Civmrovlg48gPCB6YW56b3VcIDsKK+atqeWTqCA8IGhvc2hvdVwgOwor55yM5rCRIDwga2VubWluXCA7CivliaPlsbEgPCBrZW56YW5cIDsKK+WKtOWKnyA8IHJvdWtvdVwgOwor6YCj5oimIDwgcmVuc2VuXCA7CivlhrfnhLYgPCByZWl6ZW5cIDsKK+WLleS5sSA8IGRvdXJhblwgOwor5Yi25oayIDwgc2Vpa2VuXCA7CivlvJPli6IgPCB5dW56ZWlcIDsKK+WGheecgSA8IG5haXNlaVwgOwor5bmz5piOIDwgaGVpbWVpXCA7CivmrbvliJEgPCBzaGlrZWlcIDsKK+ecieavmyA8IG1heXVnZVwgOwor6YCg5oiQIDwgem91c2VpXCA7Civlu4PlsYsgPCBoYWlva3VcIDsKK+WIh+abvyA8IHNldHRhaVwgOwor6YCD5pWjIDwgdG91c2FuXCA7Civouqvou70gPCBtaWdhcnVcIDsKK+efouWFiCA8IHlhc2FraVwgOwor6LuN6KuHIDwgZ3VuZGFuXCA7CivlubTmlbAgPCBuZW5zdXVcIDsKK+Wxsee+iuW6pyA8IHlhZ2l6YVwgOwor5q2j5ZGzIDwgc2hvdW1pXCA7CivpgIDmlaMgPCB0YWlzYW5cIDsKK+iKuOiDvSA8IGdlaW5vdVwgOwor6YCj5oOzIDwgcmVuc291XCA7CivmrovkvZkgPCB6YW4nJ3lvXCA7CivpgaPlpJYgPCBrZW5nYWlcIDsKK+W8geWPoyA8IGJlbmtvdVwgOwor55qT56SsIDwga291YmFuXCA7CivmraPlj7cgPCBzZWlnb3VcIDsKK+iLpueskSA8IGt1c2hvdVwgOwor5YiG5piOIDwgYnVubWVpXCA7CivlvJPlhbcgPCBreXV1Z3VcIDsKK+eZjOiFqyA8IGdhbnNodVwgOwor55+u5Lq6IDwgd2FpamluXCA7CivojZLmtbcgPCBhcmF1bWlcIDsKK+mztOWLlSA8IG1laWRvdVwgOwor5YaF55WMIDwgbmFpa2FpXCA7CivluqfluK0gPCB6YXNla2lcIDsKK+ato+WNlyA8IHNlaW5hblwgOwor6Iq46ICFIDwgZ2Vpc2hhXCA7CivmraPljYggPCBzaG91Z29cIDsKK+WGheeUqCA8IG5haXlvdVwgOwor5Yil5oeHIDwgYmVra29uXCA7CivliIbmlbAgPCBidW5zdXVcIDsKK+WIhuaVoyA8IGJ1bnNhblwgOwor5YSq6ICFIDwgeXV1c2hhXCA7CivljZLloZTlqYYgPCBzb3RvYmFcIDsKK+atr+WGoCA8IHNoaWthblwgOwor5YaN54++IDwgc2FpZ2VuXCA7Civlurflr6cgPCBrb3VuZWlcIDsKK+WKn+WKtCA8IGtvdXJvdVwgOwor5qyE5bmyIDwgcmFua2FuXCA7CivliJfmjJkgPCByZWtreW9cIDsKK+WJjeWxsSA8IHplbnphblwgOwor5byl5LmFIDwgYmlreXV1XCA7Civnmbrnq68gPCBob3R0YW5cIDsKK+WIneaIpiA8IHNob3NlblwgOwor6LuN6KOFIDwgZ3Vuc291XCA7CivliKXmhI8gPCBiZXRzdWlcIDsKK+WHuuaZgiA8IGRlZG9raVwgOwor6YCj5by+IDwgcmVuZGFuXCA7CivkupzpurvoibIgPCBhbWFpcm9cIDsKK+efpeS6uiA8IGNoaWppblwgOwor6Iyr54S2IDwgYm91emVuXCA7CivovJTnv7wgPCBob3lva3VcIDsKK+i+suazlSA8IG5vdWhvdVwgOwor5Yip5oGvIDwgcmlzb2t1XCA7CivlupzluoEgPCBmdWNob3VcIDsKK+W6tuWtkCA8IHNob3NoaVwgOwor6I+v5aWiIDwga3lhc2hhXCA7Civoh7Ppm6MgPCBzaGluYW5cIDsKK+WKtOS9vyA8IHJvdXNoaVwgOwor5buJ5aOyIDwgcmVuYmFpXCA7CivmrbvkvZMgPCBzaGl0YWlcIDsKK+mAouW8lSA8IGFpYmlraVwgOwor5YGc6aCTIDwgdGVpdG9uXCA7CivpgbrlkYogPCB5dWlnb3VcIDsKK+WHveaVsCA8IGthbnN1dVwgOwor5Ya35rehIDwgcmVpdGFuXCA7CivnnJ/mmLwgPCBtYWhpcnVcIDsKK+WHuuaWuSA8IGRla2F0YVwgOwor5Ymj5aOrIDwga2Vuc2hpXCA7Civlhaznm4ogPCBrb3Vla2lcIDsKK+iIuei3ryA8IGZ1bmFqaVwgOwor55aO6ZqUIDwgc29rYWt1XCA7CivliqDlhaUgPCBrYW55dXVcIDsKK+i+suawkSA8IG5vdW1pblwgOwor6YGg5Zu9IDwgb25nb2t1XCA7CivlhbfnlLMgPCBndXNoaW5cIDsKK+iNt+acrSA8IG5pZnVkYVwgOwor5bit5qyhIDwgc2VraWppXCA7CivliKnlvpcgPCByaXRva3VcIDsKK+WFqOebsiA8IHplbm1vdVwgOwor5q275LqhIDwgc2hpYm91XCA7Civlt6jnjaMgPCBreW9qdXVcIDsKK+ato+WFtSA8IHNlaWhlaVwgOwor5YWo55ubIDwgemVuc2VpXCA7CivouYjpnrQgPCB0YXRhcmFcIDsKK+mAo+W4ryA8IHJlbnRhaVwgOwor6YCf5bqmIDwgc29rdWRvXCA7CivliLDlupUgPCB0b3V0ZWlcIDsKK+WFjeeojiA8IG1lbnplaVwgOwor6IiM6YuSIDwgemVwcG91XCA7CivpgKDluaMgPCB6b3VoZWlcIDsKK+aomeekuiA8IGh5b3VqaVwgOwor5bmz5omLIDwgaGlyYXRlXCA7CivlgZzpm7sgPCB0ZWlkZW5cIDsKK+WBpemXmCA8IGtlbnRvdVwgOwor6Iif6YGLIDwgc2h1dXVuXCA7CivmqKrnm64gPCB5b2tvbWVcIDsKK+WHseaXiyA8IGdhaXNlblwgOwor55uu5qyhIDwgbW9rdWppXCA7Civlhrfms4kgPCByZWlzZW5cIDsKK+WFqOeZkiA8IHplbicneXVcIDsKK+eZveejgSA8IGhha3VqaVwgOwor6L+U5pysIDwgaGVucG9uXCA7CivliKXlvaIgPCBiZWtrZWlcIDsKK+W5u+aDsyA8IGdlbnNvdVwgOwor55yL5p2/IDwga2FuYmFuXCA7Civlho3nh4MgPCBzYWluZW5cIDsKK+edgOaEjyA8IGNoYWt1aVwgOwor5YaF54q2IDwgbmFpam91XCA7CivliKXlvZMgPCBiZXR0b3VcIDsKK+i/keadsSA8IGtpbnRvdVwgOwor5bu65YW3IDwgdGF0ZWd1XCA7Civov5HmnaUgPCBraW5yYWlcIDsKK+i/lOabuCA8IGhlbnNob1wgOwor5bqP5bmVIDwgam9tYWt1XCA7CivlgbTpjpYgPCBzb2t1c2FcIDsKK+amguirliA8IGdhaXJvblwgOwor55eF6LqvIDwgYnlvdWt1XCA7Civmpb3orZwgPCBnYWt1ZnVcIDsKK+WGt+axlyA8IHJlaWthblwgOwor5YiG5ouFIDwgYnVudGFuXCA7CivovqPmsrkgPCByYXpleXVcIDsKK+WKh+WMliA8IGdla2lrYVwgOwor5Ya35rC0IDwgcmVpc3VpXCA7CivpgoTlhYMgPCBrYW5nZW5cIDsKK+WIqeW5hSA8IHJpaGFiYVwgOwor5Yeh5pu4IDwgYm9uc2hvXCA7CivpgKPls7AgPCByZW5wb3VcIDsKK+WKh+WLmSA8IGdla2ltdVwgOwor5YiH5omLIDwga2lyZXRlXCA7CivlubvmgKogPCBnZW5rYWlcIDsKK+i/veaFlSA8IHRzdWlib1wgOwor55m656CyIDwgaGFwcG91XCA7CivouqvoqLEgPCBtaW1vdG9cIDsKK+mBqeWQpiA8IHRla2loaVwgOwor5Ye65o6bIDwgZGVnYWtlXCA7Civlhobnhp8gPCBlbmp1a3VcIDsKK+i/keaZryA8IGtpbmtlaVwgOwor6YCj5bGxIDwgcmVuemFuXCA7Civpq5jpgoEgPCBrb3VtYWlcIDsKK+WJjeWljyA8IHplbnNvdVwgOwor5bqX5bGLIDwgbWlzZXlhXCA7Civlh6bmlrkgPCBzaG9ob3VcIDsKK+mdkua1t+iLlCA8IGFvbm9yaVwgOwor6YGN5ZyoIDwgaGVuemFpXCA7CivliKXlt7sgPCBiZWtrYW5cIDsKK+WGl+a8qyA8IGpvdW1hblwgOwor5qaC6KazIDwgZ2Fpa2FuXCA7CivliY3lpJwgPCB6ZW4nJ3lhXCA7Civlu7rlgKQgPCB0YXRlbmVcIDsKK+W5u+W9sSA8IGdlbicnZWlcIDsKK+mAo+WwhCA8IHJlbnNoYVwgOwor5YmN5aOyIDwgbWFldXJpXCA7CivmpoLopoEgPCBnYWl5b3VcIDsKK+WCjei8qSA8IGhvdWJhaVwgOwor55m955yJIDwgaGFrdWJpXCA7Civls6Hpg6ggPCBreW91YnVcIDsKK+WItuWumiA8IHNlaXRlaVwgOwor6Lu9572qIDwga2VpemFpXCA7CivnlarpoK0gPCBiYW50b3VcIDsKK+WIneW5tCA8IHNob25lblwgOwor6L6b5rCXIDwgc2hpbmtpXCA7CivlibLlkIggPCB3YXJpYWlcIDsKK+alvOimsyA8IHJvdWthblwgOwor6Ium55ebIDwga3V0c3V1XCA7Civlub7lubQgPCBpa3VuZW5cIDsKK+WGrOavmyA8IGZ1eXVnZVwgOwor5YWI55+lIDwgc2VuY2hpXCA7CivlupflrZAgPCB0YW5ha29cIDsKK+mtmue+pCA8IGd5b2d1blwgOwor6YCA5b25IDwgdGFpZWtpXCA7CivlubzlubQgPCB5b3VuZW5cIDsKK+i/guabsiA8IHVreW9rdVwgOwor5Ymy5Y2wIDwgd2FyaWluXCA7CivliKnlsL8gPCByaW55b3VcIDsKK+S8vOmdnuimqiA8IGVzZW95YVwgOwor5bqK5bGLIDwgdG9rb3lhXCA7CivpgIDlu7cgPCB0YWl0ZWlcIDsKK+aoqeePviA8IGdvbmdlblwgOwor5YG06YOoIDwgc29rdWJ1XCA7CivluLDmnI0gPCBraWZ1a3VcIDsKK+ecvOW6lSA8IGdhbnRlaVwgOwor6YCA5buDIDwgdGFpaGFpXCA7CivliKXlsYUgPCBiZWtreW9cIDsKK+eVmemjsiA8IHJ5dXVpblwgOwor5Yiq5a6aIDwgc2FudGVpXCA7CivmrITlpJYgPCByYW5nYWlcIDsKK+WGoOawtCA8IGthbnN1aVwgOwor5Yil5bCBIDwgYmVwcHV1XCA7CivnnLzluK8gPCBnYW50YWlcIDsKK+W5s+W5tCA8IGhlaW5lblwgOwor5bmz5bmzIDwgaGVpaGVpXCA7Civoh4bpnaIgPCBva3VtZW5cIDsKK+W7g+WTgSA8IGhhaWhpblwgOwor6L+35b2pIDwgbWVpc2FpXCA7CivluILmsJEgPCBzaGltaW5cIDsKK+W6hOWxiyA8IHNob3V5YVwgOwor6Imy6ImyIDwgaXJvaXJvXCA7CivlhqDmr5sgPCBrYW5tb3VcIDsKK+W4uOaVsCA8IGpvdXN1dVwgOwor6L6y5p6XIDwgbm91cmluXCA7CivlubPluLggPCBoZWlqb3VcIDsKK+iLlOeZrCA8IHRhaXNlblwgOwor55my55mHIDwgdGVua2FuXCA7Civkupzpurvns7ggPCBhbWFpdG9cIDsKK+WIpOWumiA8IGhhbnRlaVwgOwor5Yik5a6YIDwgaGFuZ2FuXCA7Civlt53ngKwgPCBrYXdhc2VcIDsKK+W7t+S4gSA8IHRlaXRlaVwgOwor55m655SfIDwgaGFzc2VpXCA7CivovrLmnZEgPCBub3Vzb25cIDsKK+WBtOi/kSA8IHNva2tpblwgOwor55uk5qC5IDwgYmFua29uXCA7CivprYLog4YgPCBrb250YW5cIDsKK+WFreWNgei3ryA8IG11c29qaVwgOwor6L2f54S2IDwgZ291emVuXCA7CivliKXlrKogPCBiZXBwaW5cIDsKK+asoOWTgSA8IGtlcHBpblwgOwor6a2a57ayIDwgZ3lvbW91XCA7CivlhoXmua8gPCB1Y2hpeXVcIDsKK+S6nOa4qeW4ryA8IGFvbnRhaVwgOwor55Sf6bqpIDwgbmFtYWZ1XCA7Civlub3lsYUgPCB5dXVreW9cIDsKK+mAo+WknCA8IHJlbicneWFcIDsKK+W3oea8lCA8IGp1bicnZW5cIDsKK+atjOS8miA8IHV0YWthaVwgOwor5YWs54S2IDwga291emVuXCA7Civlt7vmr5sgPCBtYWtpZ2VcIDsKK+i7jeiJpiA8IGd1bmthblwgOwor6YCj5aOwIDwgcmVuam91XCA7CivkvZnmiYDoposgPCB5b3NvbWlcIDsKK+iHqumHjSA8IGppY2hvdVwgOwor5YaF5riIIDwgbmFpc2FpXCA7CivlhYjnlaogPCBzZW5iYW5cIDsKK+mBiuWQnyA8IHl1dWdpblwgOwor6YGK5ZCbIDwgeXV1a3VuXCA7Civou43oiLkgPCBndW5zZW5cIDsKK+iNieacrCA8IHNvdWhvblwgOwor55uy5patIDwgbW91ZGFuXCA7CivnnYDlsLogPCBraWpha3VcIDsKK+iJqOiJnyA8IG1vdWRvdVwgOwor5YG96LazIDwgZ2lzb2t1XCA7CivojYnmm7ggPCBzb3VzaG9cIDsKK+WFqOeEtiA8IHplbnplblwgOwor5YiX5a+nIDwgcmVlbmluXCA7CivprZrnsr4gPCBneW9zZWlcIDsKK+iJpuiJhyA8IGthbnRlaVwgOwor55uu5pa5IDwgbWVrYXRhXCA7Civlh6HmiY0gPCBib25zYWlcIDsKK+WHoeaJiyA8IGJvbnNodVwgOwor5YWF55SoIDwganV1eW91XCA7CivprZrnsokgPCBneW9mdW5cIDsKK+WHoeaIpiA8IGJvbnNlblwgOwor5bq45ZCbIDwgeW91a3VuXCA7CivlgKTpoIMgPCBuZWdvcm9cIDsKK+WHtuW+kiA8IGt5b3V0b1wgOwor55aO6YCaIDwgc290c3V1XCA7Civoh7Pov5EgPCBzaGlraW5cIDsKK+W5ouW5oSA8IGRvdWJhblwgOwor5bmz5bGLIDwgaGlyYXlhXCA7CivpgYXlj4IgPCBjaGlzYW5cIDsKK+mAhuWtkCA8IHNha2Fnb1wgOwor5aeU5ZOh5LyaIDwgaWlua2FpXCA7Civnmb3ni5AgPCBieWFra29cIDsKK+WApOmemCA8IG5lemF5YVwgOwor5Ye65bqrIDwgc2h1a2tvXCA7Civov73lsL4gPCB0c3VpYmlcIDsKK+WHuuW6nCA8IHNodXBwdVwgOwor5Yid5amaIDwgc2hva29uXCA7Civlh7rlupcgPCBkZW1pc2VcIDsKK+WGheayuyA8IG5haWNoaVwgOwor6L6y5pS/IDwgbm91c2VpXCA7CivliZvli4cgPCBnb3V5dXVcIDsKK+asoOWLpCA8IGtla2tpblwgOwor5YWx5ryUIDwga3lvdWVuXCA7Civoh6rpgakgPCBqaXRla2lcIDsKK+WHoeaFriA8IGJvbnJ5b1wgOwor6YCA5a6YIDwgdGFpa2FuXCA7CivnnLzlrZQgPCBnYW5rb3VcIDsKK+eVjOmdoiA8IGthaW1lblwgOwor6YGv5LiWIDwgdG9uc2VpXCA7CivlubPlrpogPCBoZWl0ZWlcIDsKK+iPr+WGkSA8IGthY2h1dVwgOwor6Lyq55WqIDwgcmluYmFuXCA7Civkvp3lrZjluqYgPCBpem9uZG9cIDsKK+WHuuW4qyA8IHN1aXNoaVwgOwor5YmN5ZCNIDwgemVubWVpXCA7CivpgZPlhYMgPCBkb3VnZW5cIDsKK+WJjeWPtyA8IHplbmdvdVwgOwor5Yik5aOrIDwgaGFuc2hpXCA7CivovKrnlJ8gPCByaW5zZWlcIDsKK+WGheawlyA8IHVjaGlraVwgOwor5YKN6KiTIDwgYm91a3VuXCA7CivnnLjlrZAgPCBib3VzaGlcIDsKK+mBheWKuSA8IGNoaWtvdVwgOwor5buD5YW1IDwgaGFpaGVpXCA7CivlhY3nirYgPCBtZW5qb3VcIDsKK+W4huahgSA8IGhvZ2V0YVwgOwor5qmf5qWtIDwga2lneW91XCA7CivpgJPlopcgPCB0ZWl6b3VcIDsKK+W5leW6nCA8IGJha3VmdVwgOwor5bit5o2yIDwgc2Vra2VuXCA7CivojbflvbkgPCBuaXlha3VcIDsKK+WGheauvyA8IG5haWRlblwgOwor5YKN6KazIDwgYm91a2FuXCA7CivnlYzpmoggPCBrYWl3YWlcIDsKK+WIhuWwgSA8IGJ1bnBvdVwgOwor5YWs5rqWIDwga291anVuXCA7Civlgo3oppYgPCB3YWtpbWlcIDsKK+eZveeFmSA8IGhha3VlblwgOwor6IuU54q2IDwgdGFpam91XCA7CivprZTnrJsgPCBtYXRla2lcIDsKK+WJteS4liA8IHNvdXNlaVwgOwor6Lez6aasIDwgY2hvdWJhXCA7CivluLjmhYsgPCBqb3V0YWlcIDsKK+W6g+WgtCA8IGhpcm9iYVwgOwor5bGx6aGbIDwgc2FudGVuXCA7CivlgZzou4ogPCB0ZWlzaGFcIDsKK+mrmOimpyA8IGtvdXJhblwgOwor55SY6a+bIDwgYW1hZGFpXCA7CivluoPln58gPCBrb3Vpa2lcIDsKK+aoqua6oiA8IG91aXRzdVwgOwor5Yas5pelIDwgZnV5dWJpXCA7Civpq5joposgPCB0YWthbWlcIDsKK+WDp+e2sSA8IHNvdWdvdVwgOwor5YmN5YmNIDwgbWFlbWFlXCA7CivluqfljZMgPCB6YXRha3VcIDsKK+WGoOacqCA8IGthYnVraVwgOwor6Imv57iBIDwgcnlvdWVuXCA7CivliZvlgaUgPCBnb3VrZW5cIDsKK+WBveiovCA8IGdpc2hvdVwgOwor5biC5pyJIDwgc2hpeXV1XCA7Civluq3liY0gPCB0ZWl6ZW5cIDsKK+mYv+WDp+elhyA8IGFzb3VnaVwgOwor5qSc6LuKIDwga2Vuc2hhXCA7Civlupflk6EgPCB0ZW4nJ2luXCA7CivpgLLljJYgPCBzaGlua2FcIDsKK+aoueawtyA8IGp1aHlvdVwgOwor5bqE5ZySIDwgc2hvdWVuXCA7Civoh6rotrMgPCBqaXNva3VcIDsKK+mqqOi6qyA8IGhvbmVtaVwgOwor5YWt5rOVIDwgcm9wcG91XCA7Civlh7rlrrYgPCBzaHVra2VcIDsKK+mrmOijgSA8IGtvdXNhaVwgOwor55S76ZuGIDwgZ2FzaHV1XCA7CivliIblqKkgPCBidW5iZW5cIDsKK+iJsuezuCA8IGlyb2l0b1wgOwor55S76ZqcIDwgZ2FzaG91XCA7CivlsbHpnIogPCBzYW5yZWlcIDsKK+WGmeacrCA8IHNoYWhvblwgOwor5YWl5rW3IDwgaXJpdW1pXCA7CivouYLouqogPCBqdXVyaW5cIDsKK+W5leWxiyA8IG1ha3V5YVwgOwor5Yi75Y2wIDwga29rdWluXCA7Civlh6HluLggPCBib25qb3VcIDsKK+i/t+WmhCA8IG1laW1vdVwgOwor55eb6IumIDwgdHN1dWt1XCA7Civnm4bmma8gPCBib25rZWlcIDsKK+iIueiNtyA8IGZ1bmFuaVwgOwor6YCj5ZCfIDwgcmVuZ2luXCA7CivliJ3lm54gPCBzaG9rYWlcIDsKK+W7g+S6uiA8IGhhaWppblwgOwor5Ymb5L2TIDwgZ291dGFpXCA7Civou4rnt5ogPCBzaGFzZW5cIDsKK+mAo+WQiCA8IHJlbmdvdVwgOwor55uy5oOzIDwgbW91c291XCA7CivlubTloLEgPCBuZW5wb3VcIDsKK+ebuOaApyA8IGFpc2hvdVwgOwor6Iul5rmvIDwgd2FrYXl1XCA7CivlhazmsJEgPCBrb3VtaW5cIDsKK+W4guaXpSA8IGljaGliaVwgOwor5qeY55u4IDwgeW91c291XCA7CivpsYjlrZAgPCB0YXJha29cIDsKK+WIhuWkliA8IGJ1bmdhaVwgOwor55uj5oi/IDwga2FuYm91XCA7CivluIPmlZkgPCBmdWt5b3VcIDsKK+mAoOWPjSA8IHpvdWhhblwgOwor5YiG5aOyIDwgYnVuYmFpXCA7Civlh4Tmg6ggPCBzZWlzYW5cIDsKK+ebm+aMmSA8IHNlaWt5b1wgOwor6Lu955uuIDwga2FydW1lXCA7CivluLDlv4MgPCBraXNoaW5cIDsKK+iMmOaenSA8IHJlaXNoaVwgOwor55u45b25IDwgYWl5YWt1XCA7CivluqflhYMgPCB6YW1vdG9cIDsKK+WGjeadpSA8IHNhaXJhaVwgOwor5YW85qWtIDwga2VuZ291XCA7Civnm77luqcgPCB0YXRlemFcIDsKK+WGt+aIvyA8IHJlaWJvdVwgOwor5Yi25YuVIDwgc2VpZG91XCA7Civnm7jlvZMgPCBzb3V0b3VcIDsKK+W3oeaknCA8IGp1bmtlblwgOwor5YW15qipIDwgaGVpa2VuXCA7Civnmb7muIggPCBrdWRhcmFcIDsKK+iHs+irliA8IHNoaXJvblwgOwor6Ii56ImZIDwgc2Vuc291XCA7CivlsbHplpMgPCB5YW1hYWlcIDsKK+W5s+WdhyA8IGhlaWtpblwgOwor5bGx6ZaAIDwgc2FubW9uXCA7Civlgq3oiLkgPCB5b3VzZW5cIDsKK+WGhuafsSA8IGVuY2h1dVwgOwor55Sf6aGeIDwgc2VpcnVpXCA7CivlubPlnLAgPCBoZWljaGlcIDsKK+mAo+WLlSA8IHJlbmRvdVwgOwor5YmN5L6/IDwgemVuYmluXCA7CivlurjkurogPCB5b3VqaW5cIDsKK+W5tOWbniA8IG5lbmthaVwgOwor6YCA5ZujIDwgdGFpZGFuXCA7Civnm7LlvpMgPCBtb3VqdXVcIDsKK+WGl+aWhyA8IGpvdWJ1blwgOwor5YWo5qynIDwgemVuJydvdVwgOwor552+5Li4IDwga291Z2FuXCA7Civoh7PoqIAgPCBzaGlnZW5cIDsKK+mAo+WIpCA8IHJlbnBhblwgOwor6LuS56uvIDwgbm9raWJhXCA7CivluKvlvJ8gPCBzaGl0ZWlcIDsKK+WJjeS7tiA8IHplbmtlblwgOwor5YWr5Y2B6LevIDwgeWFzb2ppXCA7CivlsY/poqggPCBieW91YnVcIDsKK+ebuOW4rSA8IGFpc2VraVwgOwor5YmN5LujIDwgemVuZGFpXCA7CivnlJ/pnaIgPCBzZWltZW5cIDsKK+iLpuaxgSA8IG5pZ2FyaVwgOwor5LyK5Yui6J2mIDwgaXNlZWJpXCA7CivliY3kurogPCB6ZW5qaW5cIDsKK+WIh+WcsCA8IGtpcmVqaVwgOwor5Ye25aSiIDwga3lvdW11XCA7CivliIblnLAgPCBidW5jaGlcIDsKK+iJtuemjyA8IGVucHVrdVwgOwor6Iul5rCXIDwgd2FrYWdlXCA7CivnlKPpmaIgPCBzYW4nJ2luXCA7CivliIblm6MgPCBidW5kYW5cIDsKK+iHquiouyA8IGppY2h1dVwgOwor5Yid5Y+3IDwgc2hvZ291XCA7CivpgLjkuosgPCBpdHN1amlcIDsKK+WDu+ebriA8IGhpZ2FtZVwgOwor5YiA5ZytIDwgdG91a2VpXCA7CivlhormlbAgPCBzYXNzdXVcIDsKK+eUu+mLsiA8IGdhYnlvdVwgOwor5Ye65Z+OIDwgZGVqaXJvXCA7CivlubzlkI0gPCB5b3VtZWlcIDsKK+Wwj+m8uyA8IGtvYmFuYVwgOwor5YaF5peoIDwgbmFpc2hpXCA7Civnl5vnvbUgPCB0c3V1YmFcIDsKK+iHquimmiA8IGppa2FrdVwgOwor5YaF5pa5IDwgbmFpaG91XCA7Civlgb3olqwgPCBnaXlha3VcIDsKK+eXheiHpSA8IGJ5b3VnYVwgOwor5YWx5qCEIDwga3lvdWVpXCA7CivlgKTpgYcgPCBjaGlndXVcIDsKK+W5tuWRkSA8IGhlaWRvblwgOwor5bm+5Y2DIDwgaWt1c2VuXCA7Civpq5jokZcgPCBrb3VjaG9cIDsKK+Wwj+m6piA8IGtvbXVnaVwgOwor5YiG5Za2IDwgYnVuJydlaVwgOwor5qOS6Yu8IDwgYm91a291XCA7CivpgIHlkYggPCBzb3V0ZWlcIDsKK+W6p+S4rSA8IHphY2h1dVwgOwor5bm25ZCIIDwgaGVpZ291XCA7Civkv67pmaIgPCBzaHV1aW5cIDsKK+W6leWApCA8IHNva29uZVwgOwor5biw5bGeIDwga2l6b2t1XCA7Civlt6XmlbAgPCBrb3VzdXVcIDsKK+WFteabuSA8IGhlaXNvdVwgOwor5YW15pu4IDwgaGVpc2hvXCA7Civmm77npZbniLYgPCBoaWppamlcIDsKK+WIkeWQjSA8IGtlaW1laVwgOwor6LuN56S8IDwgZ3VucmVpXCA7CivmqLnmnKggPCBqdW1va3VcIDsKK+mrmOiPnCA8IHRha2FuYVwgOwor55u45a++IDwgc291dGFpXCA7CivlubTlj7cgPCBuZW5nb3VcIDsKK+imi+aghOWdiiA8IG1pZWJvdVwgOwor6Iqx54GrIDwgaGFuYWJpXCA7CivlsZXplosgPCB0ZW5rYWlcIDsKK+ebuOWuvyA8IGFpeWFkb1wgOwor6YCA5Y67IDwgdGFpa3lvXCA7CivluK/lsIEgPCBvYmlmdXVcIDsKK+S6nOmJm+eJiCA8IGFlbmJhblwgOwor5YeN5a+SIDwgdG91a2FuXCA7CivlubPljp8gPCBoZWlnZW5cIDsKK+WHjeWusyA8IHRvdWdhaVwgOwor5bGx6YeOIDwgc2FuJyd5YVwgOwor6YCP5YaZIDwgdG91c2hhXCA7CivliLbku6QgPCBzZWlyZWlcIDsKK+WFreacrCA8IHJvcHBvblwgOwor6Ium5qW9IDwga3VyYWt1XCA7CivluLDlroUgPCBraXRha3VcIDsKK+eWveiFqyA8IHNvc2hvdVwgOwor5qiq5qC5IDwgeW9rb25lXCA7Civlub7liIYgPCBpa3VidW5cIDsKK+eVsOiqrCA8IGlzZXRzdVwgOwor6a2U55CDIDwgbWFreXV1XCA7Civlh7blmaggPCBreW91a2lcIDsKK+S/nemdqSA8IGhva2FrdVwgOwor5YaN5oyZIDwgc2Fpa3lvXCA7Civkv4rppqwgPCBzaHVubWVcIDsKK+WFq+acrCA8IGhhcHBvblwgOwor5YWs5pyJIDwga291eXV1XCA7CivlgY/oposgPCBoZW5rZW5cIDsKK+W6nOS4rSA8IGZ1Y2h1dVwgOwor55uu5bC7IDwgbWVqaXJpXCA7CivlhbbmlrkgPCBzb25hdGFcIDsKK+ebm+W5tCA8IHNlaW5lblwgOwor5bCP6bSoIDwga29nYW1vXCA7CivpgIDli6IgPCB0YWlzZWlcIDsKK+i/lOWgsSA8IGhlbnBvdVwgOwor5YaF5o6iIDwgbmFpdGFuXCA7CivmqKnmn4QgPCBrZW5wZWlcIDsKK+Wwj+mzpSA8IGtvdG9yaVwgOwor5bm05YqfIDwgbmVua291XCA7CivnlLDph44gPCBkZW4nJ3lhXCA7CivlhbXmlbAgPCBoZWlzdXVcIDsKK+ebquWwvSA8IHRvdWppblwgOwor55y85YmNIDwgZ2FuemVuXCA7CivoiabnoLIgPCBrYW5wb3VcIDsKK+W6l+S4uyA8IHRlbnNodVwgOwor6Lui55SfIDwgdGVuc2VpXCA7CivotrPpp4QgPCBhc2hpZGFcIDsKK+WFq+aZryA8IGhha2tlaVwgOwor55m75qW8IDwgdG91cm91XCA7Civnm67lrokgPCBtZXlhc3VcIDsKK+amgueulyA8IGdhaXNhblwgOwor5YiG5Y6YIDwgYnVucmluXCA7CivlvqHnjKrlj6MgPCBvY2hva29cIDsKK+i/veWKoCA8IHRzdWlrYVwgOwor5qiq5pyoIDwgeW9rb2dpXCA7CivlhKrmuKUgPCB5dXVha3VcIDsKK+W4huW9sSA8IGhva2FnZVwgOwor5bm05YidIDwgbmVuc2hvXCA7CivohbDplpMgPCB5b3VrYW5cIDsKK+iNieWxiyA8IHNvdW9rdVwgOwor5YWs5piOIDwga291bWVpXCA7CivlubTliIogPCBuZW5rYW5cIDsKK+W5tOWIhiA8IG5lbmJ1blwgOwor5bmV5Za2IDwgYmFrdWVpXCA7CivlsI/psK0gPCBrb2hhZGFcIDsKK+W5s+WIhiA8IGhlaWJ1blwgOwor5bmz5YehIDwgaGVpYm9uXCA7CivnmIvnmbIgPCBmdXV0ZW5cIDsKK+i/veWIhiA8IG9pd2FrZVwgOwor6bCl5aSrIDwgeWFtb21lXCA7CivnlKjph5EgPCB5b3VraW5cIDsKK+mujuS4puWlsyA8IGFpbmFtZVwgOwor6a2U54mpIDwgbWFtb25vXCA7CivlhazmlocgPCBrb3VidW5cIDsKK+iMtuW3viA8IGNoYWtpblwgOwor5YiR5YW4IDwga2VpdGVuXCA7Civov5HlnKggPCBraW56YWlcIDsKK+WIpeS7tiA8IGJla2tlblwgOwor5bGx6L66IDwgeWFtYWJlXCA7CivnlaXoqJggPCByeWFra2lcIDsKK+W3p+aJiyA8IGtvdXNodVwgOwor55yf5ZGzIDwgc2hpbm1pXCA7CivouqvnqbogPCBtaXNvcmFcIDsKK+iKi+eJiCA8IGltb2JhblwgOwor5beh5oudIDwganVucGFpXCA7CivnlKPph5EgPCBzYW5raW5cIDsKK+WFqOaVsCA8IHplbnN1dVwgOwor5YWo5pWXIDwgemVucGFpXCA7CivnnJ/lkKYgPCBzaGlucGlcIDsKK+iLpeacqCA8IHdha2FnaVwgOwor5YiX5YCZIDwgcmVra291XCA7Civov73lhLogPCB0c3VpbmFcIDsKK+WGt+WusyA8IHJlaWdhaVwgOwor5bqK5LiKIDwgeXVrYXVlXCA7Civlgb3ohpwgPCBnaW1ha3VcIDsKK+W4huW4gyA8IGhvbnVub1wgOwor5Yed5Zu6IDwgZ3lvdWtvXCA7CivpgJTkuK0gPCB0b2NodXVcIDsKK+WGheaGgiA8IG5haXl1dVwgOwor5L+X6ZaTIDwgem9ra2FuXCA7Civkv4Ppn7MgPCBzb2t1b25cIDsKK+Wwj+mqqCA8IGtvYm9uZVwgOwor5YW45ougIDwgdGVua3lvXCA7Civnmbvmnb8gPCB0b3ViYW5cIDsKK+WIneS7oyA8IHNob2RhaVwgOwor5YiA5YmjIDwgdG91a2VuXCA7CivluZXlkI8gPCBiYWt1cmlcIDsKK+mtmueBryA8IGd5b3RvdVwgOwor6Iaa6LqrIDwgaGFkYW1pXCA7CivnmZbmr5sgPCBrdXNlZ2VcIDsKK+WDreeOiyA8IHNlbicnb3VcIDsKK+WGjeaAnSA8IHNhaXNoaVwgOwor55yM5Za2IDwga2VuJydlaVwgOwor6a6u5piOIDwgc2VubWVpXCA7CivnlJ/phZIgPCBraXpha2VcIDsKK+WIhuWFmiA8IGJ1bnRvdVwgOwor5bm+5Lq6IDwgaWt1bmluXCA7CivohLPpq4QgPCBub3V6dWlcIDsKK+ecn+WMlyA8IG1ha2l0YVwgOwor5beo5oKqIDwga3lvYWt1XCA7CivojYrlprsgPCBrZWlzYWlcIDsKK+WFqOaQjSA8IHplbnNvblwgOwor5YiD5YWIIDwgaGFzYWtpXCA7CivlsbHot68gPCB5YW1hamlcIDsKK+W4r+WfnyA8IHRhaWlraVwgOwor6L+U5ZOBIDwgaGVucGluXCA7CivlsI/pppYgPCBrb2t1YmlcIDsKK+W5tOS9mSA8IG5lbicneW9cIDsKK+eUmOmFuCA8IGthbnNhblwgOwor6aiS6ZyKIDwgc291cmVpXCA7Civoh7PoirggPCBzaGlnZWlcIDsKK+mAgOS8miA8IHRhaWthaVwgOwor5a+h6buZIDwga2Ftb2t1XCA7CivliIPlgrcgPCBuaW5qb3VcIDsKK+WGjeW7uiA8IHNhaWtvblwgOwor5qW156eYIDwgZ29rdWhpXCA7CivpgIPkuqEgPCB0b3Vib3VcIDsKK+mAgOS7uyA8IHRhaW5pblwgOwor5bm05LujIDwgbmVuZGFpXCA7Civlgo3nt5ogPCBib3VzZW5cIDsKK+ecgeWWtiA8IHNob3VlaVwgOwor5biw5Zu9IDwga2lrb2t1XCA7CivnnYDkuIggPCBraXRha2VcIDsKK+i+suWgtCA8IG5vdWpvdVwgOwor6Lu95ribIDwga2VpZ2VuXCA7CivpqqjokaMgPCBrb3R0b3VcIDsKK+eZguayuyA8IHJ5b3VqaVwgOwor6L665ZywIDwgaGVuY2hpXCA7Civpp53ps6UgPCBkYWNob3VcIDsKK+WGheW+hCA8IG5haWtlaVwgOwor6IW56YOoIDwgZnVrdWJ1XCA7Civlh7rlhYggPCBkZXNha2lcIDsKK+WFg+adpSA8IGdhbnJhaVwgOwor55yf5YasIDwgbWFmdXl1XCA7CivovKrmoL0gPCByaW5zYWlcIDsKK+W3qOW8viA8IGt5b2RhblwgOwor5YWD5pysIDwgZ2VucG9uXCA7Civlh7blhbcgPCBreW91Z3VcIDsKK+iHquiLpSA8IGppamFrdVwgOwor5bm05LitIDwgbmVuanV1XCA7CivnmbrmlaMgPCBoYXNzYW5cIDsKK+W4q+WboyA8IHNoaWRhblwgOwor6aex6aedIDwgcmFrdWRhXCA7CivlhoXlu7cgPCBuYWl0ZWlcIDsKK+WCjeezuyA8IGJvdWtlaVwgOwor5YiG5L2TIDwgYnVudGFpXCA7CivlubPmmJPljJYgPCBoZWlpa2FcIDsKK+i/juWQiCA8IGdlaWdvdVwgOwor5a6J5L+d55CGIDwgYW5wb3JpXCA7Civkv67pgKAgPCBzaHV6b3VcIDsKK+iNieWggiA8IHNvdWRvdVwgOwor5bmy5LiOIDwga2FuJyd5b1wgOwor5qmf5bGLIDwgaGF0YXlhXCA7CivovrLlnLAgPCBub3VjaGlcIDsKK+abvuelluavjSA8IGhpYmFiYVwgOwor6Iiq56m6IDwga291a3V1XCA7CivluILlrZAgPCBpY2hpa29cIDsKK+WwiumhlCA8IHNvbmdhblwgOwor6LuN54qsIDwgZ2Vua2VuXCA7Civkv67ovp4gPCBzaHV1amlcIDsKK+eUn+i6qyA8IG5hbWFtaVwgOwor5qiq5omLIDwgeW9rb3RlXCA7CivlgZzoiLkgPCB0ZWlzZW5cIDsKK+ecjOWLoiA8IGtlbnNlaVwgOwor5YWt5oSfIDwgcm9ra2FuXCA7CivlhYPml6YgPCBnYW50YW5cIDsKK+eUu+iqvyA8IGdhY2hvdVwgOwor5YaX5a6YIDwgam91a2FuXCA7Civlh6bliIYgPCBzaG9idW5cIDsKK+i7veawtCA8IGtlaXN1aVwgOwor6Ieq6IW5IDwgamliYXJhXCA7CivliIbkuI4gPCBidW4nJ3lvXCA7Civlh6blh6YgPCBzaG9zaG9cIDsKK+iKkua0iyA8IGJvdXlvdVwgOwor5bCP6ZuqIDwga295dWtpXCA7CivlsI/pm6ggPCBrb3NhbWVcIDsKK+WwjumbuyA8IGRvdWRlblwgOwor5YW15b25IDwgaGVpZWtpXCA7CivlsI/pm4AgPCBrb2dhcmFcIDsKK+exkOakheWtkCA8IHRvdWlzdVwgOwor5Ye95Lq6IDwga2FuamluXCA7Civnm5floYEgPCB0b3VydWlcIDsKK+iLpuaJiyA8IG5pZ2F0ZVwgOwor5a++6aGUIDwgdGFpZ2FuXCA7Civoi6XmiYsgPCB3YWthdGVcIDsKK+WGrOWgtCA8IGZ1eXViYVwgOwor5YKs55ygIDwgc2FpbWluXCA7CivlhKrmn5QgPCB5dXVqdXVcIDsKK+Wwj+aWh+WtlyA8IGtvbW9qaVwgOwor6Iq45p6XIDwgZ2VpcmluXCA7Civnm7jlj40gPCBzb3VoYW5cIDsKK+W3qOWyqSA8IGt5b2dhblwgOwor5biv5ZCMIDwgdGFpZG91XCA7CivluLjli6QgPCBqb3VraW5cIDsKK+iNmOWPuCA8IHNob3VqaVwgOwor5YeN5Y6fIDwgdG91Z2VuXCA7Civmpb3nlYwgPCBnYWtrYWlcIDsKK+iNmOWOsyA8IHNvdWdvblwgOwor5Ye65LiWIDwgc2h1c3NlXCA7Civlh4TlkbMgPCBzdWdvbWlcIDsKK+iHque/kiA8IGppc2h1dVwgOwor5Yeh5YOnIDwgYm9uc291XCA7Civlr77pnaIgPCB0YWltZW5cIDsKK+eVquiMtiA8IGJhbmNoYVwgOwor55Ww6ImyIDwgaXNob2t1XCA7Civlhoblr4IgPCBlbmpha3VcIDsKK+W3nuW0jiA8IHN1c2FraVwgOwor6L+R5YKNIDwga2luYm91XCA7CivlhaXlvqEgPCBueXV1Z29cIDsKK+WGheWuriA8IG5haWd1dVwgOwor5biC5aG1IDwgc2hpamluXCA7Civot7XoqIAgPCBzZW5nZW5cIDsKK+iKs+abuCA8IGhvdXNob1wgOwor55So6KuHIDwgeW91ZGFuXCA7CivoirHmnKggPCBrYWJva3VcIDsKK+S9meaJgOebriA8IHlvc29tZVwgOwor5YWs5bmzIDwga291aGVpXCA7CivlhoXlrasgPCBuYWlzb25cIDsKK+S/nei6qyA8IGhvc2hpblwgOwor55m65oakIDwgaGFwcHVuXCA7CivoiIznq68gPCB6ZXR0YW5cIDsKK+WFqOW6lyA8IHplbnRlblwgOwor5a++6ZmjIDwgdGFpamluXCA7CivkvovpoYwgPCByZWlkYWlcIDsKK+W4r+WJoyA8IHRhaWtlblwgOwor5bid5ZG9IDwgdGVpbWVpXCA7Civou5/ms6UgPCBuYW5kZWlcIDsKK+iMheWxiyA8IGJvdW9rdVwgOwor5YWl5bqrIDwgbnl1dWtvXCA7CivnlKjoqIAgPCB5b3VnZW5cIDsKK+eZuuaEjyA8IGhhdHN1aVwgOwor5YWl5bqcIDwgbnl1dWZ1XCA7CivoirjmlocgPCBnZWlidW5cIDsKK+WwgumWgCA8IHNlbm1vblwgOwor5biv5YiAIDwgdGFpdG91XCA7Civoi6blv4MgPCBrdXNoaW5cIDsKK+aqgOWQmyA8IGRhbmt1blwgOwor5YW85a6YIDwga2Vua2FuXCA7CivlsL/ot68gPCBueW91cm9cIDsKK+ecjOS8miA8IGtlbmthaVwgOwor55uk5Y+wIDwgYmFuZGFpXCA7CivluIPlnLAgPCBudW5vamlcIDsKK+iHs+e0lCA8IHNoaWp1blwgOwor6I2J5Y6fIDwgc291Z2VuXCA7Civoh6rnuJsgPCBqaWJha3VcIDsKK+aihemFkiA8IHVtZXNodVwgOwor5YWD5omLIDwgbW90b2RlXCA7CivkuIvpmaLorbAgPCBrYWluZ2lcIDsKK+ecjOS7pCA8IGtlbnJlaVwgOwor5a+d6aaWIDwgbmVrdWJpXCA7CivnlJ/oqpUgPCBzZWl0YW5cIDsKK+i7n+awtCA8IG5hbnN1aVwgOwor6L+R5LujIDwga2luZGFpXCA7CivnnIzkurogPCBrZW5qaW5cIDsKK+ebhuWcsCA8IGJvbmNoaVwgOwor5a215YyW5ZmoIDwgZnVrYWtpXCA7Civou43muK8gPCBndW5rb3VcIDsKK+WFmuW8iiA8IHRvdWhlaVwgOwor5Ya35Y6zIDwgcmVpZ2VuXCA7Civoh63ntKAgPCBzaHV1c29cIDsKK+iMhOWtkCA8IG5hc3ViaVwgOwor55uX5ZOBIDwgdG91aGluXCA7CivoiJfnn7MgPCBob3Nla2lcIDsKK+iHque1piA8IGppa3l1dVwgOwor6L+U5LiKIDwgaGVuam91XCA7CivprZrmoq8gPCBneW90ZWlcIDsKK+ebm+WQjSA8IHNlaW1laVwgOwor5YWo5bO2IDwgemVudG91XCA7Civota3poZQgPCBzaGFnYW5cIDsKK+WFseWvnSA8IHRvbW9uZVwgOwor5omL55yf5Ly8IDwgdGVtYW5lXCA7CivlsI/piq0gPCBrb3plbmlcIDsKK+i/keS4liA8IGtpbnNlaVwgOwor6Ieo57WCIDwgcmluanV1XCA7CivluLjkvosgPCBqb3VyZWlcIDsKK+WFqOWyuCA8IHplbmdhblwgOwor5beo5aSnIDwga3lvZGFpXCA7CivovpvlkbMgPCBrYXJhbWlcIDsKK+WGheWkliA8IG5haWdhaVwgOwor55uu5YWIIDwgbWVzYWtpXCA7CivluLjkvY8gPCBqb3VqdXVcIDsKK+i+suWFtSA8IG5vdWhlaVwgOwor5YKN55uuIDwgaGF0YW1lXCA7CivlsZXopqcgPCB0ZW5yYW5cIDsKK+W4uOS8miA8IGpvdWthaVwgOwor5bi45Lu7IDwgam91bmluXCA7Civkv6/op5IgPCBmdWtha3VcIDsKK+eXtOa8oiA8IGNoaWthblwgOwor6LuN5rOVIDwgZ3VucG91XCA7CivlsI/ph5EgPCBrb2dhbmVcIDsKK+WGt+WJmyA8IHJlaWdvdVwgOwor5bi45Lq6IDwgam91amluXCA7CivprZrmnb8gPCBneW9iYW5cIDsKK+W0qea9sCA8IGhvdWthaVwgOwor5LiN5aaC5oSPIDwgZnVueW9pXCA7Civlg6fmraMgPCBzb3Vqb3VcIDsKK+WFgeaBrSA8IGlua3lvdVwgOwor6Lu45pyoIDwgamlrdWdpXCA7Civnm7jkvJ0gPCBzb3VkZW5cIDsKK+W4neWGoCA8IHRlaWthblwgOwor5L216Z+zIDwgcGluJydpblwgOwor6auY55uuIDwgdGFrYW1lXCA7Civlhobln58gPCBlbicnaWtpXCA7Civlr5LpoqggPCBrYW5wdXVcIDsKK+mnhemgrSA8IGVraXRvdVwgOwor5YK+54CJIDwga2Vpc2hhXCA7Civlhrflh40gPCByZWl0b3VcIDsKK+i7jeawkSA8IGd1bm1pblwgOwor6aqo57KJIDwga29wcHVuXCA7Civnl4XnkIYgPCBieW91cmlcIDsKK+W4uOS4liA8IHRva295b1wgOwor6Ia16IeTIDwgc3Vpem91XCA7CivlhbblpbQgPCBzb2l0c3VcIDsKK+WFheW9kyA8IGp1dXRvdVwgOwor5L+u6KOcIDwgc2h1dWhvXCA7CivluIPlkYogPCBmdWtva3VcIDsKK+iIjueboyA8IHNoYWthblwgOwor5YSS5pWZIDwganVreW91XCA7Civkv5forbAgPCB6b2t1Z2lcIDsKK+a5r+aWh+WtlyA8IHl1bW9qaVwgOwor5Ya35YWJIDwgcmVpa291XCA7Civlr53pmpsgPCBuZWdpd2FcIDsKK+eahOWxiyA8IHRla2l5YVwgOwor55Ww5qmf56iuIDwgaWtpc2h1XCA7Civnm4rlj4sgPCBla2l5dXVcIDsKK+WGheWcqCA8IG5haXphaVwgOwor5YW15aSJIDwgaGVpaGVuXCA7CivlsbHokbUgPCB3YXNhYmlcIDsKK+WBteefpSA8IHRlaWNoaVwgOwor55ar55mYIDwgZWtpcmVpXCA7Civnm7LkurogPCBtb3VqaW5cIDsKK+eah+WuriA8IGtvdWd1dVwgOwor6IO96Z2iIDwgbm91bWVuXCA7Civnm5vlhbggPCBzZWl0ZW5cIDsKK+aguembqiA8IG5leXVraVwgOwor6IyF5aC0IDwga2F5YWJhXCA7CivluLDkuIAgPCBraWl0c3VcIDsKK+eah+WtqyA8IGtvdXNvblwgOwor5L6u6L6xIDwgYnVqb2t1XCA7Civnlarnt5ogPCBiYW5zZW5cIDsKK+i+suS8miA8IG5vdWthaVwgOwor5L+X6KqeIDwgem9rdWdvXCA7Civnm67ku4ogPCBtb2trb25cIDsKK+ebtOS4iyA8IGNob2trYVwgOwor5bGx6I+cIDwgc2Fuc2FpXCA7Civou6LmoKEgPCB0ZW5rb3VcIDsKK+S/l+ipsSA8IHpva3V3YVwgOwor55al55msIDwga2Fpc2VuXCA7Civoi6blraYgPCBrdWdha3VcIDsKK+WFg+W4pSA8IGdlbnN1aVwgOwor55m95a+/IDwgaGFrdWp1XCA7CivlhqXliKkgPCBteW91cmlcIDsKK+eZuuWxlSA8IGhhdHRlblwgOwor5beh5ZueIDwganVua2FpXCA7CivovKrlu7sgPCByaW4nJ25lXCA7CivlhbjlnosgPCB0ZW5rZWlcIDsKK+WxseiNmCA8IHNhbnNvdVwgOwor5YWs5aOyIDwga291YmFpXCA7CivohLHpgIAgPCBkYXR0YWlcIDsKK+S/l+inoyA8IHpva2thaVwgOwor6IOM6bCtIDwgc2ViaXJlXCA7CivotaTploAgPCBha2Ftb25cIDsKK+WxjeidiyA8IHNoaXJvdVwgOwor55Wd57mUIDwgdW5lb3JpXCA7Civkv5foposgPCB6b2trZW5cIDsKK+WAieiNtyA8IGt1cmFuaVwgOwor6Iqz5oOFIDwgaG91am91XCA7CivpppbprYEgPCBzaHVrYWlcIDsKK+eUn+iWkSA8IHNob3VnYVwgOwor5YW15ZujIDwgaGVpZGFuXCA7Civlr77pgYcgPCB0YWlndXVcIDsKK+S6nOegkumFuCA8IGFoaXNhblwgOwor55Sf6JWDIDwgc2VpYmFuXCA7CivlhY3lrpggPCBtZW5rYW5cIDsKK+W4guWGhSA8IHNoaW5haVwgOwor6Lu95oyZIDwga2Vpa3lvXCA7Civoia/moYggPCByeW91YW5cIDsKK+WuuemhlCA8IHlvdWdhblwgOwor5YaG5ZGzIDwgbWFydW1pXCA7Civnm5vkvJogPCBzZWlrYWlcIDsKK+WGhuWRqCA8IGVuc2h1dVwgOwor6Iq45b2TIDwgZ2VpdG91XCA7CivnlJjolq8gPCBrYW5zaG9cIDsKK+WGheWRvSA8IG5haW1laVwgOwor6LuK5qScIDwgc2hha2VuXCA7CivoirPlv5cgPCBob3VzaGlcIDsKK+Wwj+i2syA8IGtvYXNoaVwgOwor5a++6L66IDwgdGFpaGVuXCA7Civoi5flrZcgPCBteW91amlcIDsKK+iDjOmqqCA8IHNlYm9uZVwgOwor5YaF5ZCrIDwgbmFpZ2FuXCA7CivppqzpnakgPCBiYWtha3VcIDsKK+ebn+S4uyA8IG1laXNodVwgOwor5YaF5ZCIIDwgbmFpZ291XCA7Civlt6jlj6MgPCBreW9rb3VcIDsKK+WGjeWLpCA8IHNhaWtpblwgOwor5biC5YK1IDwgc2hpc2FpXCA7CivlsqnnqbQgPCBpd2FhbmFcIDsKK+WFg+WvhyA8IGdlbmtvdVwgOwor5L2Z6ZyHIDwgeW9zaGluXCA7CivlhpXlhqAgPCBiZW5rYW5cIDsKK+iMtuS8miA8IGNoYWthaVwgOwor5L2O6aCtIDwgdGVpdG91XCA7CivlhobljZMgPCBlbnRha3VcIDsKK+WvhumWiSA8IG1pcHBlaVwgOwor5bGx6IOMIDwgeWFtYXNlXCA7Civmp5jmhYsgPCB5b3V0YWlcIDsKK+iMtuS7oyA8IGNoYWRhaVwgOwor5YKs5raZIDwgc2FpcnVpXCA7Civog4zpprMgPCBoYWljaGlcIDsKK+iEsei1sCA8IGRhc3NvdVwgOwor55m+5aScIDwgbW9tb3lvXCA7Civoi6blooMgPCBrdWt5b3VcIDsKK+WGmeWDjyA8IHNoYXpvdVwgOwor5a6f6aiTIDwgamlra2VuXCA7CivojLbkurogPCBjaGFqaW5cIDsKK+iLseWbvSA8IGVpa29rdVwgOwor5YaN5YiKIDwgc2Fpa2FuXCA7CivlhoXli6QgPCBuYWlraW5cIDsKK+iCuumtmiA8IGhhaWd5b1wgOwor6Ieq55m9IDwgamloYWt1XCA7Civou43mm7ggPCBndW5zaG9cIDsKK+WCjeeCuSA8IGJvdXRlblwgOwor5L6/6KanIDwgYmVucmFuXCA7Civnmbvlo4cgPCB0b3VkYW5cIDsKK+aknOecvCA8IGtlbmdhblwgOwor5qCh6ZaAIDwga291bW9uXCA7CivpppbpoYwgPCBzaHVkYWlcIDsKK+WFiOWmuyA8IHNlbnNhaVwgOwor6aqo55u4IDwga29zc291XCA7CivpmL/kv67nvoUgPCBhc2h1cmFcIDsKK+eUmOiNiSA8IGthbnpvdVwgOwor55SY6Iy2IDwgYW1hY2hhXCA7CivnmbvloLQgPCB0b3Vqb3VcIDsKK+WvnemFkiA8IG5lemFrZVwgOwor5b6h6ZuR54WuIDwgb3pvdW5pXCA7CivlhYTlprkgPCBrZWltYWlcIDsKK+WFpeWWtiA8IG55dXVlaVwgOwor5YW85YukIDwga2Vua2luXCA7Civou5LmlbAgPCBrZW5zdXVcIDsKK+WFiOWkqSA8IHNlbnRlblwgOwor5YaG5YaFIDwgZW4nJ25haVwgOwor5YaF5YaFIDwgbmFpbmFpXCA7Civou43ml4UgPCBndW5yeW9cIDsKK+WGheWFuCA8IG5haXRlblwgOwor6Lu95b+rIDwga2Vpa2FpXCA7Civlhajlk6EgPCB6ZW4nJ2luXCA7Civoh6jnlYwgPCByaW5rYWlcIDsKK+mrmOeArCA8IHRha2FzZVwgOwor5YWo5ZOBIDwgemVucGluXCA7CivmpJznl7AgPCBrZW50YW5cIDsKK+WFpeWUkCA8IG5pdHRvdVwgOwor5bCP6KmxIDwgc2hvdXdhXCA7Civog4zpnakgPCBzZWdhd2FcIDsKK+W3qOWEhCA8IGt5b29rdVwgOwor6IOM6Z2iIDwgaGFpbWVuXCA7CivlgrXmqKkgPCBzYWlrZW5cIDsKK+i8quWnpiA8IHJpbmthblwgOwor55aR542EIDwgZ2lnb2t1XCA7Civnmq7ohprnp5EgPCBoaWZ1a2FcIDsKK+Wwj+iogCA8IGtvZ290b1wgOwor5qSc55WqIDwga2VuYmFuXCA7CivlhYXloasgPCBqdXV0ZW5cIDsKK+WxpOe+pCA8IHNvdWd1blwgOwor6Iqx5bGLIDwgaGFuYXlhXCA7Civou5/mipUgPCBuYW50b3VcIDsKK+i7ouaIpiA8IHRlbnNlblwgOwor5YG254S2IDwgZ3V1emVuXCA7CivnlJ/ogrIgPCBzZWlpa3VcIDsKK+WyqeebpCA8IGdhbmJhblwgOwor5YWx5YqpIDwga3lvdWpvXCA7CivovIPlt64gPCBrYWt1c2FcIDsKK+WFteWIgyA8IGhlaWppblwgOwor6IuX5ZyDIDwgYnlvdWhvXCA7Civlho3ku7sgPCBzYWluaW5cIDsKK+S9memMsiA8IHlvcm9rdVwgOwor55eF5rCXIDwgYnlvdWtpXCA7Civpp4XpgJMgPCBla2l0ZWlcIDsKK+Wun+mamyA8IGppc3NhaVwgOwor55Sf6ICFIDwgc2hvdWphXCA7CivnlLHnt5IgPCB5dWlzaG9cIDsKK+S/s+iBliA8IGhhaXNlaVwgOwor5bGx57O7IDwgc2Fua2VpXCA7CivnlLfns7sgPCBkYW5rZWlcIDsKK+WvvuirliA8IHRhaXJvblwgOwor5a+u6LK7IDwgcnlvdWhpXCA7Civouqvmn4QgPCBtaWdhcmFcIDsKK+WAq+ekviA8IHJpbnNoYVwgOwor5beo5L2TIDwga3lvdGFpXCA7CivlhoXkvY8gPCBuYWlqdXVcIDsKK+eah+WQjiA8IGtvdWdvdVwgOwor5bCP6KKWIDwga29zb2RlXCA7Civlr77oqp4gPCB0c3VpZ29cIDsKK+iDvei+ryA8IG5vdWJlblwgOwor6Ium5ZGzIDwgbmlnYW1pXCA7CivprYXmg5EgPCBtaXdha3VcIDsKK+WGjeS4iSA8IHNhaXNhblwgOwor5beo5Lq6IDwga3lvamluXCA7CivlsIboo5wgPCBzaG91aG9cIDsKK+iKuOWkpyA8IGdlaWRhaVwgOwor6Ii35qKvIDwgZ2VudGVpXCA7CivohLHooaMgPCBkYXRzdWlcIDsKK+WGhuS4mCA8IGVua3l1dVwgOwor6Iqd5bGFIDwgc2hpYmFpXCA7Civou5/mgKcgPCBuYW5zZWlcIDsKK+eahuWLpCA8IGthaWtpblwgOwor5beo5LiHIDwga3lvbWFuXCA7Civmn7vplrIgPCBzYWV0c3VcIDsKK+WvuOiogCA8IHN1bmdlblwgOwor5a+G6YCBIDwgbWlzc291XCA7CivnlKjntJkgPCB5b3VzaGlcIDsKK+S9k+mHjSA8IHRhaWp1dVwgOwor5qOE57SEIDwga2l5YWt1XCA7Civkvo3oqq0gPCBqaWRva3VcIDsKK+mqqOeJjCA8IGthcnV0YVwgOwor6aqo54mHIDwga29wcGVuXCA7CivlhJLlraYgPCBqdWdha3VcIDsKK+iHqueEtiA8IHNoaXplblwgOwor6LWk6LWkIDwgYWthYWthXCA7CivoibLmgqogPCBpcm9ha3VcIDsKK+iLpuWKmyA8IGt1dXJpaVwgOwor6Lqr5pa5IDwgbWlrYXRhXCA7Civmpbfmm7ggPCBrYWlzaG9cIDsKK+WunemRkSA8IGhvdWthblwgOwor5byf5bCP54i2IDwgb3Rvb2ppXCA7Civkv6HogIUgPCBzaGluamFcIDsKK+iGv+eYjSA8IG5vdXlvdVwgOwor5qaC5pWwIDwgZ2Fpc3V1XCA7Civoirjln58gPCBnZWlpa2lcIDsKK+Wwj+iZjiA8IGtvZG9yYVwgOwor6Imy5oGLIDwgaXJva29pXCA7CivogrrploAgPCBoYWltb25cIDsKK+eVoueUnyA8IGhpc3NlaVwgOwor55Sf57SZIDwga2lnYW1pXCA7CivlhYjlkJsgPCBzZW5rdW5cIDsKK+i1pOiynSA8IGFrYWdhaVwgOwor5L6L6KejIDwgcmVpa2FpXCA7CivnmoblhbUgPCBrYWloZWlcIDsKK+i7jeaDhSA8IGd1bmpvdVwgOwor6auY5q2vIDwgdGFrYWJhXCA7CivlhbXkubEgPCBoZWlyYW5cIDsKK+S9lemBjSA8IG5hbmJlblwgOwor6aeE6LODIDwgZGFjaGluXCA7CivlsL7nv7wgPCBiaXlva3VcIDsKK+mrhOa2siA8IHp1aWVraVwgOwor5bCB6J2LIDwgZnV1cm91XCA7CivlhZrlhoUgPCB0b3VuYWlcIDsKK+WFrOS9jyA8IGtvdWp1dVwgOwor55Sf57KLIDwga2lzc3VpXCA7Civkv5fogLMgPCB6b2t1amlcIDsKK+WutOmBiiA8IGVuJyd5dXVcIDsKK+WFg+WPtyA8IGdlbmdvdVwgOwor6aqo54KtIDwga290dGFuXCA7CivlgbTms7MgPCBzb2JhZWlcIDsKK+iLseS/iiA8IGVpc2h1blwgOwor6ISx6JepIDwgZGFwcGFuXCA7CivlhIDlrrggPCBnaXNoaW5cIDsKK+S/guiIuSA8IGtlaXNlblwgOwor5p+U6aCGIDwganV1anVuXCA7CivnlarniqwgPCBiYW5rZW5cIDsKK+mmrOi6qyA8IGJhc2hpblwgOwor55eZ5pSjIDwga2VpcmVuXCA7Civkvr/oiLkgPCBiaW5zZW5cIDsKK+iFjuiHkyA8IGppbnpvdVwgOwor6aaz6LWwIDwgY2hpc291XCA7CivkuLvmsrvljLsgPCBzaHVqaWlcIDsKK+iFi+iHrSA8IHdha2lnYVwgOwor5LiN6Kqg5oSPIDwgZnVzZWlpXCA7CivlgZzmu54gPCB0ZWl0YWlcIDsKK+iLseS6rCA8IGVpa3lvdVwgOwor5a+d6KiAIDwgbmVnb3RvXCA7CivlgYnng4ggPCBpcmV0c3VcIDsKK+mtr+WbvSA8IHJva29rdVwgOwor5YWF5YiGIDwganV1YnVuXCA7CivnmobkvJ0gPCBrYWlkZW5cIDsKK+eXtOaDhSA8IGNoaWpvdVwgOwor5bSH5pWsIDwgc3V1a2VpXCA7CivlvqHoqaDmrYwgPCBnb2Vpa2FcIDsKK+i7ouWvnSA8IGdvcm9uZVwgOwor6IWQ6IKJIDwgZnVuaWt1XCA7CivovLjlhaUgPCB5dW55dXVcIDsKK+WFiOWFtSA8IHNlbnBlaVwgOwor6LuN5bi9IDwgZ3VuYm91XCA7Civkv5fnuIEgPCB6b2t1ZW5cIDsKK+iFueetiyA8IGZ1a2tpblwgOwor6Ieq5racIDwgaml0b2t1XCA7CivohprnnYAgPCBoYWRhZ2lcIDsKK+Wuuei1piA8IHlvdXNoYVwgOwor5bC/57SgIDwgbnlvdXNvXCA7CivmoITpgLIgPCBlaXNoaW5cIDsKK+alk+aelyA8IGZ1dXJpblwgOwor5L2Z6LOKIDwgeW96b2t1XCA7CivmpJzmuKkgPCBrZW4nJ29uXCA7Civlr5PoqIAgPCBndXVnZW5cIDsKK+mmlui8qiA8IGt1Yml3YVwgOwor6Iq45ZCNIDwgZ2VpbWVpXCA7CivlgaXmsJcgPCBrZW5hZ2VcIDsKK+aghOi+sSA8IGVpam9rdVwgOwor6IOD5LiL5Z6CIDwgaWthc3VpXCA7CivotaToo7ggPCBzZWtpcmFcIDsKK+Wwj+iIuSA8IGtvYnVuZVwgOwor5LyN6ZW3IDwgZ29jaG91XCA7CivlsYjnrYsgPCBrdWtraW5cIDsKK+WuueiyjCA8IHlvdWJvdVwgOwor55m65LyaIDwgaGFra2FpXCA7Civoh6rmsoggPCBqaWNoaW5cIDsKK+eXm+aJkyA8IHRzdXVkYVwgOwor5a626LODIDwgeWFjaGluXCA7Civnmbvku5kgPCB0b3VzZW5cIDsKK+iKs+WQjSA8IGhvdW1laVwgOwor5a2m6ZmiIDwgZ2FrdWluXCA7CivliLfmr5vnm64gPCBoYWtlbWVcIDsKK+mtlOWigyA8IG1ha3lvdVwgOwor55Sy54OP6LOKIDwga291aWthXCA7CivoiIzmoLkgPCB6ZWtrb25cIDsKK+W0qeW+oSA8IGhvdWd5b1wgOwor6aWF6aCtIDwgbWFuanV1XCA7CivkvZzorZwgPCBzYWt1ZnVcIDsKK+WFiOS+vyA8IHNlbmJpblwgOwor5bCP6IadIDwga29oaXphXCA7Civlsqzmub4gPCBrb3V3YW5cIDsKK+Wwj+iFuSA8IGtvYmFyYVwgOwor5YWD5YCkIDwgbW90b25lXCA7Civpqqjms5UgPCBrb3Bwb3VcIDsKK+iJr+WutiA8IHJ5b3VrZVwgOwor5YWJ5L2TIDwga291dGFpXCA7CivlrpjovrogPCBrYW5wZW5cIDsKK+Wun+i7iiA8IGppc3NoYVwgOwor5a+G6KiIIDwgbWlra2VpXCA7Civkupzmi4nmr5jkupwgPCBhcmFiaWFcIDsKK+S7i+mxlyA8IGthaXJpblwgOwor6IO46KOPIDwga3lvdXJpXCA7CivlsI/ohIcgPCBrb3dha2lcIDsKK+S8iumBlOedgCA8IGRhdGVnaVwgOwor5bSH5oudIDwgc3V1aGFpXCA7CivmpoLlv7UgPCBnYWluZW5cIDsKK+eUqOebiiA8IHlvdWVraVwgOwor5bGv55SwIDwgdG9uZGVuXCA7Civohr7ngpkgPCBrYWlzaGFcIDsKK+WFiOS7oyA8IHNlbmRhaVwgOwor5bCP6IKhIDwga29tYXRhXCA7Civou6LlpIkgPCB0ZW5wZW5cIDsKK+i7ouWjsiA8IHRlbmJhaVwgOwor5b6h6KaL6IieIDwgb21pbWFpXCA7Civlrp/ot7UgPCBqaXNzZW5cIDsKK+WumOi7jSA8IGthbmd1blwgOwor6IOM6LWwIDwgaGFpc291XCA7CivouqvlvaIgPCBtaW5hcmlcIDsKK+agoeiokyA8IGtvdWt1blwgOwor5bCP6ICzIDwga29taW1pXCA7CivogbTpn7MgPCBjaG91b25cIDsKK+WuueiqjSA8IHlvdW5pblwgOwor6ISx6ISCIDwgZGFzc2hpXCA7CivkvJrph4ggPCBlc2hha3VcIDsKK+WtlOmbgCA8IGt1amFrdVwgOwor5bCP6ICFIDwga29tb25vXCA7Civku6PpoZggPCBkYWlnYW5cIDsKK+mkium2jyA8IHlvdWtlaVwgOwor6IOM5paH5a2XIDwgc2Vtb2ppXCA7Civkv4LntK8gPCBrZWlydWlcIDsKK+iCnemKmCA8IGthbm1laVwgOwor5L2Z6KeSIDwgeW9rYWt1XCA7CivohLHogpsgPCBkYWtrb3VcIDsKK+WvneiXgSA8IG5ld2FyYVwgOwor5YSq5puH6I+vIDwgdWRvbmdlXCA7CivlgbbmnIkgPCBndXV5dXVcIDsKK+WvhuihjCA8IG1pa2tvdVwgOwor5YWD5LiJIDwgZ2FuemFuXCA7CivkvZPoqIAgPCB0YWlnZW5cIDsKK+i6q+W5hSA8IG1paGFiYVwgOwor5Luy6ZaTIDwgbmFrYW1hXCA7CivkvLTotbAgPCBiYW5zb3VcIDsKK+i7ouWcsCA8IHRlbmNoaVwgOwor6Imv5aScIDwgcnlvdXlhXCA7CivkvZPopoEgPCB0YWl5b3VcIDsKK+S8nemAgSA8IGRlbnNvdVwgOwor6LSL6YCgIDwgZ2Fuem91XCA7CivlvqHopYHopJMgPCBvbXV0c3VcIDsKK+iHqOaknCA8IHJpbmtlblwgOwor5a++6IGvIDwgdGFpcmVuXCA7CivpppborIAgPCBzaHVib3VcIDsKK+WDleWpoiA8IGJva3VoaVwgOwor5qOS54q2IDwgYm91am91XCA7Civku5bpoJggPCB0YXJ5b3VcIDsKK+WvuOiDtCA8IHp1bmRvdVwgOwor5Lq66a2aIDwgbmluZ3lvXCA7CivkvZPoo4EgPCB0ZWlzYWlcIDsKK+WBtuaVsCA8IGd1dXN1dVwgOwor6aSK6a2aIDwgeW91Z3lvXCA7CivlsI7nt5ogPCBkb3VzZW5cIDsKK+WujOi1sCA8IGthbnNvdVwgOwor6aas6J2/IDwgdW1hYmFlXCA7Civku6TplqggPCByZWlrZWlcIDsKK+Wvvue9riA8IHRhaWNoaVwgOwor6aeQ6IuxIDwgY2h1dWVpXCA7Civopb/nj63niZkgPCBzdXBlaW5cIDsKK+iCqei6qyA8IGthdGFtaVwgOwor5LuK6aKoIDwgaW1hZnV1XCA7CivpgJnjgIUgPCBob3Vob3VcIDsKK+iKuOS6uiA8IGdlaW5pblwgOwor5p+U6YGTIDwganV1ZG91XCA7CivohLHnt5ogPCBkYXNzZW5cIDsKK+agueiPnCA8IGtvbnNhaVwgOwor6IOh6J22IDwga29jaG91XCA7CivlsI/ns6AgPCBrb251a2FcIDsKK+aknOahiCA8IGtlbicnYW5cIDsKK+WumuirliA8IHRlaXJvblwgOwor5qW95bGLIDwgZ2FrdXlhXCA7Civnl4XlvowgPCBieW91Z29cIDsKK+iGv+axgSA8IG5vdWp1dVwgOwor5YKy5bK4IDwgZ291Z2FuXCA7CivlsI/nsbMgPCBrb2dvbWVcIDsKK+WtpumDqCA8IGdha3VidVwgOwor6Ieo5pu4IDwgcmluc2hvXCA7Civmn7voqq0gPCBzYWRva3VcIDsKK+iFq+eYjSA8IHNodXlvdVwgOwor5qW95a+dIDwgcmFrdW5lXCA7CivlsIHnt5ggPCBmdXVrYW5cIDsKK+agueiMjiA8IGtvbmtlaVwgOwor6Iao5rqAIDwgYm91bWFuXCA7Civkv67nkIYgPCBzaHV1cmlcIDsKK+iEseezniA8IGRhcHB1blwgOwor6IeY5qKFIDwgcm91YmFpXCA7Civmn7voqLwgPCBzYXNob3VcIDsKK+WAkua9sCA8IHRvdWthaVwgOwor6IiM5oimIDwgemVzc2VuXCA7Civpq5jmhaIgPCBrb3VtYW5cIDsKK+aflOi7nyA8IGp1dW5hblwgOwor5bCP566xIDwga29iYWtvXCA7CivlsL3nmIEgPCBqaW5zdWlcIDsKK+WwiuewoSA8IHNvbmthblwgOwor5bCO566hIDwgZG91a2VuXCA7CivlrproposgPCB0ZWlrZW5cIDsKK+eTpuekqyA8IGdhcmVraVwgOwor5a6f6KOFIDwgamlzc291XCA7CivmpbXlr5IgPCBnb2trYW5cIDsKK+mnheiIjiA8IGVraXNoYVwgOwor5p2l6a6uIDwgcmFpc2VuXCA7CivkurrpoZ4gPCBqaW5ydWlcIDsKK+S6oemtgiA8IGJvdWtvblwgOwor6LSI6LOEIDwgem91d2FpXCA7Civkvb/ogZggPCBzaGloZWlcIDsKK+S6uumgrSA8IGppbnRvdVwgOwor6LWw6ICFIDwgc291c2hhXCA7Civlrp/ooYwgPCBqaWtrb3VcIDsKK+i7jeWWtiA8IGd1bicnZWlcIDsKK+i7veS+vyA8IGtlaWJlblwgOwor5L2/6ICFIDwgc2hpc2hhXCA7CivlgbbmiJAgPCBndXVzZWlcIDsKK+i7ouWLpCA8IHRlbmtpblwgOwor5L+X55S7IDwgem9rdWdhXCA7Civlr77nsbMgPCB0YWliZWlcIDsKK+i3neeIqiA8IGt5b3NvdVwgOwor5Lq66Z2iIDwgamlubWVuXCA7CivogIHpvaIgPCByb3VyZWlcIDsKK+iJr+WQjyA8IHJ5b3VyaVwgOwor5p2+6ZyyIDwgc2hvdXJvXCA7CivlsIHnrZIgPCBmdXV0b3VcIDsKK+mjm+mzpSA8IGhpY2hvdVwgOwor6ISa57WGIDwga3lhaGFuXCA7CivlgbbmhJ8gPCBndXVrYW5cIDsKK+iynemhniA8IGthaXJ1aVwgOwor5LuY6YyyIDwgZnVyb2t1XCA7CivlgY/ml4EgPCBoZW5ib3VcIDsKK+S7o+mHkSA8IGRhaWtpblwgOwor5YGP5pacIDwgaGVuc2hhXCA7Civlr5LogqUgPCBrYW5nb2VcIDsKK+i7ouWGmSA8IHRlbnNoYVwgOwor5Lya6KuHIDwga2FpZGFuXCA7CivoiI7lvJ8gPCBzaGF0ZWlcIDsKK+mmtOiHtCA8IGp1bmNoaVwgOwor6a2a5LuLIDwgZ3lva2FpXCA7CivlgpjlsYsgPCBrYXNheWFcIDsKK+S8neiogCA8IGRlbmdvblwgOwor6LuK5Y+wIDwgc2hhZGFpXCA7CivkuI3opovnm64gPCBtaWppbWVcIDsKK+WvvuepuiA8IHRhaWt1dVwgOwor5Lya6KiIIDwga2Fpa2VpXCA7CivkvZzoiIggPCBzYWtrb3VcIDsKK+iFuOeCjiA8IGNob3VlblwgOwor5Lq66ZaTIDwgbmluZ2VuXCA7CivlrabosrsgPCBnYWt1aGlcIDsKK+adsemdoiA8IHRvdW1lblwgOwor5bCP56C0IDwgc2hvdWhhXCA7Civpo5vprZogPCB0b2JpdW9cIDsKK+WxseawtCA8IHNhbnN1aVwgOwor5L2Z6IiIIDwgeW9reW91XCA7CivlsbHmsJcgPCB5YW1ha2VcIDsKK+Wwj+efsyA8IGtvaXNoaVwgOwor6JWO6bqm57KJIDwgc29iYWtvXCA7Civou43li6IgPCBndW56ZWlcIDsKK+S9meiHrSA8IHlvc2h1dVwgOwor5Lya6KaLIDwga2Fpa2VuXCA7CivlsIHnpoUgPCBob3V6ZW5cIDsKK+i0heiogCA8IHplaWdlblwgOwor54++6YeRIDwgZ2Vua2luXCA7CivlsYXnhLYgPCBreW96ZW5cIDsKK+WEhOS4hyA8IG9rdW1hblwgOwor5qSc5oyZIDwga2Vua3lvXCA7Civou6LlgJIgPCB0ZW50b3VcIDsKK+eUuuatqSA8IGNob3VidVwgOwor5YOn5YW1IDwgc291aGVpXCA7CivnlpHmg5EgPCBnaXdha3VcIDsKK+S7o+i/lCA8IGRhaWhlblwgOwor5qW95ZyfIDwgcmFrdWRvXCA7Civoh6jmiKYgPCByaW5zZW5cIDsKK+WuneiUtSA8IGhvdXpvdVwgOwor5qW95ZySIDwgcmFrdWVuXCA7Civmnpfph44gPCByaW4nJ3lhXCA7CivkuqzpmKogPCBrZWloYW5cIDsKK+i1pOe3miA8IGFrYXNlblwgOwor5LuW6YO3IDwgdGFreW91XCA7Civou43liIAgPCBndW50b3VcIDsKK+eXtOWRhiA8IGNoaWhvdVwgOwor5p2h6aCFIDwgam91a291XCA7CivlsI/nm64gPCBrb21va3VcIDsKK+aghOiQvSA8IGVpcmFrdVwgOwor6Lui5L2PIDwgdGVuanV1XCA7CivnlKjms5UgPCB5b3Vob3VcIDsKK+iHhuaWrSA8IG9rdWRhblwgOwor6LqN5aaCIDwgeWFrdWpvXCA7CivlsI/nmr8gPCBrb3phcmFcIDsKK+Wwj+eauiA8IGtvaml3YVwgOwor5Lqh6ZyKIDwgYm91cmVpXCA7Civmoq3lrZDprZogPCBrYW1hc3VcIDsKK+iIueWeiyA8IHNlbmtlaVwgOwor6LWk57WMIDwgc2Vra2VpXCA7CivkvZ7ogIUgPCBuZWlzaGFcIDsKK+mmrOiCiSA8IGJhbmlrdVwgOwor5YGV5oiQIDwga2Fpc2VpXCA7Civou43lhbUgPCBndW5wZWlcIDsKK+adpembuyA8IHJhaWRlblwgOwor5p2x6ZaAIDwgdG91bW9uXCA7CivnlKjmsLQgPCB5b3VzdWlcIDsKK+i7iuWGhSA8IHNoYW5haVwgOwor6aat6ICFIDwgZ3lvc2hhXCA7CivkuI3pmo/mhI8gPCBmdXp1aWlcIDsKK+mtheS6hiA8IG1pcnlvdVwgOwor5LqM6aOfIDwgbmlqaWtpXCA7CivohILnsokgPCBzaGlmdW5cIDsKK+iHs+W9kyA8IHNoaXRvdVwgOwor5L2T6IKyIDwgdGFpaWt1XCA7CivlsaXmrbQgPCByaXJla2lcIDsKK+WDp+S+tiA8IHNvdXJ5b1wgOwor5p6X6YGTIDwgcmluZG91XCA7CivlgKTmnK0gPCBuZWZ1ZGFcIDsKK+e0q+mZveiKsSA8IGFqaXNhaVwgOwor5L2O6IO9IDwgdGVpbm91XCA7CivmnaXpmKogPCByYWloYW5cIDsKK+S+i+elrSA8IHJlaXNhaVwgOwor6LK06YWsIDwga2lzaHV1XCA7Civog5rog44gPCBoYWl0YWlcIDsKK+WDp+S8vSA8IHNvdWd5YVwgOwor5qGn55quIDwgaGl3YWRhXCA7CivlrZDosZogPCBrb2J1dGFcIDsKK+iyr+mHkSA8IGNob2tpblwgOwor5Luj6LWwIDwgZGFpc291XCA7CivogrrokYkgPCBoYWl5b3VcIDsKK+WDreS4iiA8IHNlbmpvdVwgOwor6Ieo5b6hIDwgcmluZ3lvXCA7CivosqfpibEgPCBoaW5rb3VcIDsKK+WBj+aEmyA8IGhlbicnYWlcIDsKK+WBveWtpiA8IGdpZ2FrdVwgOwor5YKR5aOrIDwga2Vzc2hpXCA7Civph47oia/nnYAgPCBub3JhZ2lcIDsKK+mmluiEsyA8IHNodW5vdVwgOwor55Sf5q6LIDwgc2VpemFuXCA7Civmnb/ph5EgPCBiYW5raW5cIDsKK+ajn+acqCA8IG11bmFnaVwgOwor55Wq5omAIDwgYmFuc2hvXCA7Civkuo7omK3nm4YgPCB1cmFib25cIDsKK+i3r+aomSA8IHJvaHlvdVwgOwor6LuK5L2TIDwgc2hhdGFpXCA7CivoiLnlk6EgPCBzZW4nJ2luXCA7CivlrZfoqLMgPCBqaXlha3VcIDsKK+iLpuWRs+e0oCA8IGt1bWlzb1wgOwor5YGP5oCnIDwgaGVuc2VpXCA7Civmo43mo5IgPCBrb25ib3VcIDsKK+WBnOW5tCA8IHRlaW5lblwgOwor5YKY5ZywIDwga2FzYWppXCA7CivlrpjoiI4gPCBrYW5zaGFcIDsKK+mokueEtiA8IHNvdXplblwgOwor5bGx5p6XIDwgc2FucmluXCA7CivmpbXlj7MgPCBreW9rdXVcIDsKK+acqOmtgiA8IGtvZGFtYVwgOwor6IWO54KOIDwgamluJydlblwgOwor5bGx5p2RIDwgc2Fuc29uXCA7CivkurrpgbggPCBqaW5zZW5cIDsKK+Wwj+eMqyA8IGtvbmVrb1wgOwor5Luu6KiXIDwga2F0YWt1XCA7Civmo5Lmna0gPCBib3VndWlcIDsKK+S6uumBkyA8IGppbmRvdVwgOwor6aas57OnIDwgYmFyeW91XCA7Civos4fosqEgPCBzaGl6YWlcIDsKK+mmrOezniA8IG1hZ3Vzb1wgOwor5YOF5YOFIDwga2lua2luXCA7CivmpbXljbAgPCBnb2t1aW5cIDsKK+S7o+ismyA8IGRhaWtvdVwgOwor5Lya6JGsIDwga2Fpc291XCA7Civou4rkuIogPCBzaGFqb3VcIDsKK+iHs+WwiiA8IHNoaXNvblwgOwor6IiF5aeRIDwga3l1dWtvXCA7Civogrroh5MgPCBoYWl6b3VcIDsKK+i6q+WGhSA8IG1pdWNoaVwgOwor6Lqr5YWxIDwgbWlkb21vXCA7Civoh7Plrp0gPCBzaGlob3VcIDsKK+S9k+ezuyA8IHRhaWtlaVwgOwor5YGP5bmzIDwgaGVucGVpXCA7Civlr5/nn6UgPCBzYXRjaGlcIDsKK+acq+mmmSA8IG1ha2tvdVwgOwor5pyo6aasIDwgbW9rdWJhXCA7CivlgbTlpbMgPCBzb2JhbWVcIDsKK+acrOmkqCA8IGhvbmthblwgOwor5Luj6KiAIDwgZGFpZ2VuXCA7Civogrrog54gPCBoYWlob3VcIDsKK+S6uui7iiA8IGppbnNoYVwgOwor5pyx6aGUIDwgc2h1Z2FuXCA7CivnlKjmnZAgPCB5b3V6YWlcIDsKK+i2s+a5ryA8IGFzaGl5dVwgOwor5YK+5YCSIDwga2VpdG91XCA7Civmpa3li5kgPCBneW91bXVcIDsKK+WAjeaVsCA8IGJhaXN1dVwgOwor6ICB6ZuEIDwgcm91eXV1XCA7CivoiLnlh7ogPCBmdW5hZGVcIDsKK+iHquWuhSA8IGppdGFrdVwgOwor6ISH55uuIDwgd2FraW1lXCA7CivmnKzpoZggPCBob25nYW5cIDsKK+acrOmhjCA8IGhvbmRhaVwgOwor5Lmx6ZuyIDwgcmFuJyd1blwgOwor55a+5ZG8IDwgc2hpa2tvXCA7CivoiLnlhbcgPCBmdW5hZ3VcIDsKK+WutuetiyA8IGllc3VqaVwgOwor5pys6Z+zIDwgaG9uJyduZVwgOwor5LuY6KiXIDwgZnV0YWt1XCA7CivnlJ/mnaUgPCBzZWlyYWlcIDsKK+WApuaGiiA8IGtlbnBhaVwgOwor5p6i6KaBIDwgc3V1eW91XCA7CivporHpoqggPCB0YWlmdXVcIDsKK+WvneeZliA8IG5lZ3VzZVwgOwor54Sh5LqL5pWFIDwgbXVqaWtvXCA7Civoh43luK8gPCBzZWl0YWlcIDsKK+aknOWumiA8IGtlbnRlaVwgOwor5p2l6YK4IDwgcmFpdGVpXCA7CivohbnmoYggPCBmdWt1YW5cIDsKK+eUn+acqCA8IG5hbWFraVwgOwor5L2Z56iLIDwgeW9ob2RvXCA7CivlgrLlgKggPCBnb3VreW9cIDsKK+mqqOWtkCA8IGtvc3NoaVwgOwor5p2l6YGKIDwgcmFpeXV1XCA7CivmnbHou40gPCB0b3VndW5cIDsKK+WxleacmyA8IHRlbmJvdVwgOwor6ICz6LyqIDwgbWltaXdhXCA7CivlsI/mva4gPCBrb3NoaW9cIDsKK+aituacqCA8IGthamlraVwgOwor6LKn6LOkIDwgaGluc2VuXCA7CivmnaXov44gPCByYWlnb3VcIDsKK+aciemrqiA8IHVoYXRzdVwgOwor6LWk55eiIDwgc2VraXJpXCA7Civkvr/ms5UgPCBiZW5wb3VcIDsKK+S9juepuiA8IHRlaWt1dVwgOwor5Lyd6IGeIDwgZGVuYnVuXCA7CivmnKzpmoogPCBob250YWlcIDsKK+WyqeWxpCA8IGdhbnNvdVwgOwor5pyd6aGUIDwgYXNhZ2FvXCA7CivouqvkuIggPCBtaXRha2VcIDsKK+acrOmZoyA8IGhvbmppblwgOwor5pys6ZmiIDwgaG9uJydpblwgOwor5bCo5q+bIDwgbXVrdWdlXCA7CivlrprntIsgPCBqb3Vtb25cIDsKK+mkiuixmiA8IHlvdXRvblwgOwor5LuY6KGoIDwgZnVoeW91XCA7CivmnLHploAgPCBzaHVtb25cIDsKK+S9teeUqCA8IGhlaXlvdVwgOwor5pyo6ZmwIDwga29rYWdlXCA7CivlgrXkuLsgPCBzYWlzaHVcIDsKK+adpei7iiA8IHJhaXNoYVwgOwor6IOM562LIDwgaGFpa2luXCA7CivlsbHmiYsgPCB5YW1hdGVcIDsKK+iFi+avmyA8IHdha2lnZVwgOwor5L6/5q6/IDwgYmVuZGVuXCA7Civogp3og4YgPCBrYW50YW5cIDsKK+acnemcsiA8IGNob3Vyb1wgOwor5bGv5omAIDwgdG9uc2hvXCA7Civos4DooaggPCBnYWh5b3VcIDsKK+WuneeulyA8IGhvdXNhblwgOwor5LiA5pio5pelIDwgb3RvdG9pXCA7CivpoqjpnJwgPCBmdXVzb3VcIDsKK+i1t+eIhiA8IGtpYmFrdVwgOwor6IiI5ZGzIDwga3lvdW1pXCA7Civogonoir0gPCBuaWt1Z2FcIDsKK+WtpOiInyA8IGtvc2h1dVwgOwor5LqM6YCyIDwgbmlzaGluXCA7CivmnZHpgZMgPCBzb25kb3VcIDsKK+WBj+WlvSA8IGhlbmtvdVwgOwor5LqM6YCaIDwgbml0c3V1XCA7CivlgKTluYUgPCBuZWhhYmFcIDsKK+miqOmYsiA8IGZ1dWJvdVwgOwor5p6v6JGJIDwga2FyZWhhXCA7CivlrrbnnaMgPCBrYXRva3VcIDsKK+WBtuWQnyA8IGd1dWtpblwgOwor5Lyd57eaIDwgZGVuc2VuXCA7Civoh6rlm70gPCBqaWtva3VcIDsKK+iHqOWcqCA8IHJpbnphaVwgOwor5L2Z55m9IDwgeW9oYWt1XCA7Civlrr/nl74gPCBzaHVrdWFcIDsKK+WvhueUnyA8IG1pc3NlaVwgOwor5a+E55WZIDwga2lyeXV1XCA7CivmnaXos5MgPCByYWloaW5cIDsKK+S8nee1sSA8IGRlbnRvdVwgOwor55S75b+DIDwgZ2FzaGluXCA7CivlsI7msLQgPCBkb3VzdWlcIDsKK+adpeiyoiA8IHJhaWtvdVwgOwor6ISx5rOVIDwgZGFwcG91XCA7CivlgKTltakgPCBuZWdhc2FcIDsKK+WHuuadpeWApCA8IGRla2luZVwgOwor6LGq6YK4IDwgZ291dGVpXCA7CivkvZnnl4UgPCB5b2J5b3VcIDsKK+iAgemFkiA8IHJvdXNodVwgOwor5L2O55uuIDwgaGlrdW1lXCA7CivkvZznlLsgPCBzYWt1Z2FcIDsKK+eNo+mhniA8IGp1dXJ1aVwgOwor6LGq6YKBIDwgZ291bWFpXCA7CivlsITms5UgPCBzaGFob3VcIDsKK+mnhOeJqSA8IGRhbW9ub1wgOwor6ISx5rC0IDwgZGFzc3VpXCA7Civpo5vouo0gPCBoaXlha3VcIDsKK+S5semFlCA8IHJhbnN1aVwgOwor5Lmx6YWSIDwgcmFuc2h1XCA7CivoiI7lhYQgPCBzaGFrZWlcIDsKK+S7sOiHpSA8IGd5b3VnYVwgOwor55Wq5aSWIDwgYmFuZ2FpXCA7CivlsqnloakgPCBnYW4nJ2VuXCA7CivkvZXnlaogPCBuYW5iYW5cIDsKK+abuOmiqCA8IHNob2Z1dVwgOwor6ISz5q27IDwgbm91c2hpXCA7CivkuozotrMgPCBuaXNva3VcIDsKK+e+vemiqCA8IGhha2F6ZVwgOwor6LGq6L6yIDwgZ291bm91XCA7CivnlLvluYUgPCBnYWZ1a3VcIDsKK+abuOmhniA8IHNob3J1aVwgOwor55Sf5oaOIDwgYWluaWt1XCA7CivkuK3po5sgPCBjaHV1aGlcIDsKK+iwt+mWkyA8IHRhbmltYVwgOwor5p2x6KW/IDwgdG91emFpXCA7Civoh63lkbMgPCBzaHV1bWlcIDsKK+eQtOe3miA8IGtpbnNlblwgOwor6IOh55OcIDwga3l1dXJpXCA7Civpo5votoogPCBoaWV0c3VcIDsKK+adpeirhyA8IHJhaWRhblwgOwor5YCJ5bupIDwgc291cmluXCA7CivohZDmnL0gPCBmdWt5dXVcIDsKK+WuieepjyA8IGFuJydub25cIDsKK+WApOWuiSA8IG5leWFzdVwgOwor5Luj6ImmIDwgZGFpa2FuXCA7Civlr7jms5UgPCBzdW5wb3VcIDsKK+iDjuebpCA8IHRhaWJhblwgOwor6ICB6L6yIDwgcm91bm91XCA7CivkubHpgKAgPCByYW56b3VcIDsKK+WCjeS6uiA8IGJvdWppblwgOwor5bGI5oyHIDwga3Vzc2hpXCA7CivogrLnqK4gPCBpa3VzaHVcIDsKK+aiheaelyA8IGJhaXJpblwgOwor5pyo6YeYIDwga2lrdWdpXCA7CivnlLflt6UgPCBkYW5rb3VcIDsKK+ixvOiyhSA8IGhpa3l1dVwgOwor5pyI6ZaTIDwgZ2Vra2FuXCA7Civku4/okawgPCBidXNzb3VcIDsKK+WAn+WutiA8IHNoYWtrYVwgOwor5pu46Z2iIDwgc2hvbWVuXCA7CivmnaXoqKogPCByYWlob3VcIDsKK+S4remfsyA8IGNodXVvblwgOwor6LSI562UIDwgem91dG91XCA7CivogIHovKkgPCByb3VoYWlcIDsKK+iBvuiAhSA8IHJvdXNoYVwgOwor5qGR5rW3IDwgc291a2FpXCA7CivlsI/mpa8gPCBrb2RhdGVcIDsKK+afseekjiA8IGNodXVzb1wgOwor6IGa6JC9IDwganVyYWt1XCA7CivmpJzlk4EgPCBrZW5waW5cIDsKK+WBtuWDjyA8IGd1dXpvdVwgOwor5a2Y572uIDwgc29uY2hpXCA7CivmnKzpgrggPCBob250ZWlcIDsKK+acrOmCpiA8IGhvbnBvdVwgOwor5p2l6KazIDwgcmFpa2FuXCA7CivppIrompUgPCB5b3VzYW5cIDsKK+acrOmBuCA8IGhvbnNlblwgOwor6aC96b2iIDwgdGFpcmVpXCA7CivnkrDmtbcgPCBrYW5rYWlcIDsKK+acqOmDqCA8IG1va3VidVwgOwor5pys6YGTIDwgaG9uZG91XCA7CivlsYXmiYAgPCBreW9zaG9cIDsKK+i3r+W6iiA8IHJvc2hvdVwgOwor5YG95L2cIDwgZ2lzYWt1XCA7CivkubHou40gPCByYW5ndW5cIDsKK+iznue+jiA8IHNob3ViaVwgOwor6LKv6JS1IDwgY2hvem91XCA7CivlgKHlqaYgPCBzaG91ZnVcIDsKK+acnemHjiA8IGNob3V5YVwgOwor6IOa54+gIDwgaGFpc2h1XCA7CivmnKrpgLIgPCBtaXNoaW5cIDsKK+S8keespiA8IGt5dXVmdVwgOwor6aKo6YeHIDwgZnV1c2FpXCA7CivnlKPlu4MgPCBzYW5wYWlcIDsKK+S7pOiBniA8IHJlaWJ1blwgOwor6Ieq5YqbIDwgamlyaWtpXCA7Civkv4LmlbAgPCBrZWlzdXVcIDsKK+S4remZsCA8IGNodXVpblwgOwor5qSc5Y2wIDwga2VuJydpblwgOwor5bCR5p6XIDwgc2hvcmluXCA7CivlgaXlhaggPCBrZW56ZW5cIDsKK+WvruavjSA8IHJ5b3Vib1wgOwor55S75a2mIDwgZ2FnYWt1XCA7CivkupLop5IgPCBnb2tha3VcIDsKK+izque0oCA8IHNoaXNzb1wgOwor5qC55rqQIDwga29uZ2VuXCA7Civmn7PnnIkgPCByeXV1YmlcIDsKK+S6ieirliA8IHNvdXJvblwgOwor6LWw5rOVIDwgc291aG91XCA7CivkuIrpqLAgPCBqb3V0b3VcIDsKK+WxseWutiA8IHlhbWFnYVwgOwor5a6f55SfIDwgbWlzaG91XCA7CivmnKvovKkgPCBtYXBwYWlcIDsKK+WxnuW3riA8IHpva3VzYVwgOwor5LiN6aa0IDwgZnVuYXJlXCA7CivmpL/kuosgPCBjaGluamlcIDsKK+mmluePrSA8IHNodWhhblwgOwor5a6a55WqIDwgdGVpYmFuXCA7CivlgbbkurogPCBndXVqaW5cIDsKK+eUt+WtkCA8IGRhbnNoaVwgOwor5Luj572yIDwgZGFpc2hvXCA7Civku6Pnva4gPCBkYWljaGlcIDsKK+S8iuWLouS4uSA8IGlzZXRhblwgOwor6IK655mMIDwgaGFpZ2FuXCA7CivppYznsbMgPCBzZW5tYWlcIDsKK+i2o+aXqCA8IHNodXNoaVwgOwor5LuK6IisIDwga29ucGFuXCA7CivlsIrmnaUgPCBzb25yYWlcIDsKK+air+W9oiA8IHRlaWtlaVwgOwor5LqM6KaLIDwgZnV0YW1pXCA7Civoh6rlhJggPCBqaW1hbWFcIDsKK+aenOiCiSA8IGthbmlrdVwgOwor5qSc5YiGIDwga2VuYnVuXCA7CivkuKHpmaIgPCByeW91aW5cIDsKK+eUsuWtkCA8IGthc3NoaVwgOwor5LiA6amaIDwgaWtreW91XCA7CivkupTooYwgPCBnb2d5b3VcIDsKK+iHs+S+vyA8IHNoaWJlblwgOwor5bCK5pu4IDwgc29uc2hvXCA7CivlsI/mmLwgPCBrb2hpcnVcIDsKK+abnemcsiA8IGJha3Vyb1wgOwor5bCP5pilIDwga29oYXJ1XCA7CivkvZnngJ0gPCB5b3Jla2lcIDsKK+eMrumljCA8IGtlbnNlblwgOwor5L+h5b6SIDwgc2hpbnRvXCA7Civnlarlj7cgPCBiYW5nb3VcIDsKK+S4gOmnhCA8IGljaGlkYVwgOwor6aGe6aGMIDwgcnVpZGFpXCA7Civmm5zpnIogPCB5b3VyZWlcIDsKK+agueayuyA8IGtvbmNoaVwgOwor5YGJ5YqbIDwgaXJ5b2t1XCA7Civlr6HmrLIgPCBrYXlva3VcIDsKK+aciemFjSA8IHl1dWhhaVwgOwor5LuV572uIDwgc2hpb2tpXCA7Civpoqjou4ogPCBmdXVzaGFcIDsKK+aal+m7mSA8IGFubW9rdVwgOwor5bGx5aWzIDwgeWFtYW1lXCA7Civmmpfpu5IgPCBhbmtva3VcIDsKK+WwgeabuCA8IGZ1dXNob1wgOwor5LuP6ICFIDwgYnVzc2hhXCA7Civmo4TlrZAgPCBzdXRlZ29cIDsKK+WAueWQnSA8IGtlbnJpblwgOwor6Ieq5L6bIDwgamlreW91XCA7CivkuInpn5MgPCBzYW5rYW5cIDsKK+S6iOihqCA8IHlvaHlvdVwgOwor5LiH6aCDIDwgYmFua2VpXCA7CivkuIDpo5sgPCBpY2hpaGlcIDsKK+agueavmyA8IGtvbm1vdVwgOwor5L2Z5ru0IDwgeW90ZWtpXCA7CivlgI3lpKcgPCBiYWlkYWlcIDsKK+iHquS9nCA8IGppc2FrdVwgOwor6IKy55SfIDwgaWt1c2VpXCA7CivnlLvlooMgPCBnYWt5b3VcIDsKK+acqOiziiA8IHRva3VzYVwgOwor5bCK5pWsIDwgc29ua2VpXCA7CivkuIrpnaIgPCBqb3VtZW5cIDsKK+WxheW4uCA8IGt5b2pvdVwgOwor5Luj57SNIDwgZGFpbm91XCA7Civlr5LmsJcgPCBzYW11a2VcIDsKK+S4iemdoiA8IHNhbm1lblwgOwor5bCK5pSYIDwgc29uam91XCA7CivlgZzkvJogPCB0ZWlrYWlcIDsKK+WAjeWilyA8IGJhaXpvdVwgOwor5qSc5L6/IDwga2VuYmVuXCA7CivnlJ/lrZggPCBzZWl6b25cIDsKK+WxkeWxiyA8IGt1enV5YVwgOwor6aGY6Z2iIDwgZ2FubWVuXCA7CivpoqjotqMgPCBmdXVzaHVcIDsKK+iDuOavmyA8IG11bmFnZVwgOwor5bGx5aC0IDwgeWFtYWJhXCA7CivlsY/lsYUgPCBoZWlreW9cIDsKK+S4h+mbtyA8IGJhbnJhaVwgOwor5LiJ6ZqOIDwgc2FuZ2FpXCA7Civlr53mp5ggPCBuZXphbWFcIDsKK+atpOWHpuetiSA8IGtva29yYVwgOwor55Wq5YW1IDwgYmFucGVpXCA7CivmnJ3os4AgPCBjaG91Z2FcIDsKK+WvvuaVsCA8IHRhaXN1dVwgOwor5a+p5p+7IDwgc2hpbnNhXCA7Civlr53mpa0gPCBuZXdhemFcIDsKK+mcsuilv+S6nCA8IHJvc2hpYVwgOwor5pys6KuWIDwgaG9ucm9uXCA7CivlgJ/llY8gPCBzaGFtb25cIDsKK+abvumBiiA8IHNvdXl1dVwgOwor55Ci56OoIDwgdGFrdW1hXCA7CivohbnlrZAgPCBoYXJha29cIDsKK+ahn+aVtyA8IHNhamlraVwgOwor5a++5pSvIDwgdGFpc2hpXCA7CivppIrogrIgPCB5b3Vpa3VcIDsKK+S8r+eItiA8IGhha3VmdVwgOwor5pys6KqMIDwgaG9uc2hpXCA7CivlrZDnqK4gPCBrb2RhbmVcIDsKK+Wwj+aMhyA8IGtveXViaVwgOwor5pyq6KqtIDwgbWlkb2t1XCA7Civnm67ljLvogIUgPCBtZWlzaGFcIDsKK+S4gOmauyA8IGlzc2VraVwgOwor5a+45patIDwgc3VuZGFuXCA7CivogIHoobAgPCByb3VzdWlcIDsKK+iFkOW/gyA8IGZ1c2hpblwgOwor5pq06aKoIDwgYm91ZnV1XCA7CivkvZnmsqIgPCB5b3Rha3VcIDsKK+WumueCuSA8IHRlaXRlblwgOwor5pu46YGTIDwgc2hvZG91XCA7CivkuK3pg6ggPCBjaHV1YnVcIDsKK+WBj+S6uiA8IGhlbmppblwgOwor5YCm5Y6tIDwga2VuJydlblwgOwor5a2m55ujIDwgZ2Fra2FuXCA7CivppIrogIEgPCB5b3Vyb3VcIDsKK+eUo+WjsCA8IHVidWdvZVwgOwor6aO06ImyIDwgYW1laXJvXCA7CivnlLDlnLAgPCBkZW5jaGlcIDsKK+acneitsCA8IGNob3VnaVwgOwor55Sw5ZySIDwgZGVuJydlblwgOwor6aaZ5rivIDwgaG9ua29uXCA7CivmoYLmnpcgPCBrZWlyaW5cIDsKK+S4gOmWkyA8IGhpdG9tYVwgOwor5a2Y55+lIDwgem9uY2hpXCA7CivkuK3pgJQgPCBjaHV1dG9cIDsKK+eQuueRryA8IGhvdXJvdVwgOwor6aC76aC7IDwgaGlucGluXCA7CivlsLvlsL4gPCBzaGlwcG9cIDsKK+eUmuWkpyA8IGppbmRhaVwgOwor5L6L5pWwIDwgcmVpc3V1XCA7CivkuozokYkgPCBmdXRhYmFcIDsKK+mjvOiCsiA8IHNoaWlrdVwgOwor5L+z5aOHIDwgaGFpZGFuXCA7Civlsa/llrYgPCB0b24nJ2VpXCA7CivmnaXoh6ggPCByYWlyaW5cIDsKK+aiteWkqSA8IGJvbnRlblwgOwor5aaC5L2V5qeYIDwgaWtheW91XCA7Civlr5LmooUgPCBrYW5iYWlcIDsKK+agueafoiA8IGtvbnRlaVwgOwor5L2V5q2zIDwgbmFuc2FpXCA7CivmoJfmr5sgPCBrdXJpZ2VcIDsKK+WwiuaFriA8IHNvbnJ5b1wgOwor5L2P5rCRIDwganV1bWluXCA7CivlsJHmgakgPCBzaG91b25cIDsKK+eUo+WcsCA8IHNhbmNoaVwgOwor5LyB55S7IDwga2lrYWt1XCA7CivnlJjloakgPCBhbWFqaW9cIDsKK+i1pOacrCA8IGFrYWhvblwgOwor6aKo6KejIDwgZnV1a2FpXCA7CivkvbXmnIkgPCBoZWl5dXVcIDsKK+Wxi+WkliA8IG9rdWdhaVwgOwor6aas5qmHIDwgYmFzb3JpXCA7CivkuK3ouqsgPCBuYWthbWlcIDsKK+eQhuelniA8IHJpc2hpblwgOwor5qC55pysIDwgbmVtb3RvXCA7CivkurrntbkgPCBqaW5rZW5cIDsKK+S4u+izkyA8IHNodWhpblwgOwor55Sf5ZywIDwgc2VpY2hpXCA7CivpoqjoposgPCBrYXphbWlcIDsKK+S7luensCA8IHRhc2hvdVwgOwor6aaZ5rC0IDwga291c3VpXCA7Civlr5LmnZEgPCBrYW5zb25cIDsKK+adieiPnCA8IHN1Z2luYVwgOwor55WZ5L+dIDwgcnl1dWhvXCA7Civog73mm7ggPCBub3VzaG9cIDsKK+S9nOalrSA8IHNhZ3lvdVwgOwor5YCo5YKyIDwga3lvZ291XCA7CivmoLnmmpcgPCBuZWt1cmFcIDsKK+i3oeWcsCA8IGF0b2NoaVwgOwor5Lq657OeIDwgamlucHVuXCA7CivlrabnkIYgPCBnYWt1cmlcIDsKK+S9mealrSA8IHlvZ3lvdVwgOwor5bCP5b2iIDwga29nYXRhXCA7CivmnIjorJ0gPCBnZXNzaGFcIDsKK+WvhuagkyA8IG1pc3NlblwgOwor5a+S5pqWIDwga2FuZGFuXCA7CivpoqjooosgPCBmdXV0YWlcIDsKK+S4iemHjSA8IHNhbmp1dVwgOwor6LKh57WMIDwgemFpa2VpXCA7CivlrZjnlJ8gPCB6b25qb3VcIDsKK+S4h+mHkSA8IG1hbmtpblwgOwor5bCK5b2xIDwgc29uJydlaVwgOwor5qC55pa5IDwgbmVrYXRhXCA7CivnlKjlk4EgPCB5b3VoaW5cIDsKK+S7rueXhSA8IGtlYnlvdVwgOwor5LiK6YWSIDwgam91c2h1XCA7CivlrpfmtL4gPCBzaHV1aGFcIDsKK+WumuazlSA8IGpvdWhvdVwgOwor5a625qWtIDwga2FneW91XCA7Civog6HmpJIgPCBrb3Nob3VcIDsKK+iDhuaxgSA8IHRhbmp1dVwgOwor55Cl54+AIDwga29oYWt1XCA7Civog73mlocgPCBub3VidW5cIDsKK+Wwj+W5hSA8IGtvaGFiYVwgOwor5a2k54usIDwga29kb2t1XCA7CivnlKPlk4EgPCBzYW5waW5cIDsKK+S4jemBqSA8IGZ1dGVraVwgOwor5a+G5pu4IDwgbWlzc2hvXCA7CivogqHngasgPCBtYXRhYmlcIDsKK+e+jumGnCA8IGJpc2h1dVwgOwor5LiA6YeMIDwgaWNoaXJpXCA7Civlr7XmhJsgPCBjaG91YWlcIDsKK+WuneauvyA8IGhvdWRlblwgOwor5bCP5beuIDwgc2hvdXNhXCA7Civnj6DnrpcgPCBzaHV6YW5cIDsKK+S4jemAmiA8IGZ1dHN1dVwgOwor6ISz5bm5IDwgbm91a2FuXCA7Civkvpvlv5wgPCBreW91b3VcIDsKK+eOieiXuyA8IHRhbWFtb1wgOwor6IKd54KOIDwga2FuJydlblwgOwor5LiJ6YG4IDwgc2Fuc2VuXCA7CivlsIvluLggPCBqaW5qb3VcIDsKK+S/ruWWtiA8IHNodXVlaVwgOwor6IOh5qGDIDwga3VydW1pXCA7CivkuIfpgqYgPCBiYW5wb3VcIDsKK+iAgeiNmCA8IHJvdXNvdVwgOwor5a6Y5rCRIDwga2FubWluXCA7CivnoLTprZTnn6IgPCBoYW1heWFcIDsKK+WxnuWQjyA8IHpva3VyaVwgOwor5p6h55uuIDwgbWFzdW1lXCA7CivkuIHphYkgPCB0ZWl5dXVcIDsKK+i2iuW+jCA8IGVjaGlnb1wgOwor5bCa5bCaIDwgbmFvbmFvXCA7CivkuInpgKMgPCBzYW5yZW5cIDsKK+S4u+ioiCA8IHNodWtlaVwgOwor5qCh5pysIDwga291aG9uXCA7Civmmq7pkJggPCBib3Nob3VcIDsKK+WwgeW7uiA8IGhvdWtlblwgOwor5YCS5YOPIDwgdG91em91XCA7CivnvoXph50gPCByYXNoaW5cIDsKK+aiteWUhCA8IGJvbmJhaVwgOwor5LiK6L66IDwgam91aGVuXCA7CivkuIDpg60gPCBpa2tha3VcIDsKK+S4gOmDqCA8IGljaGlidVwgOwor5L2V5p6aIDwgbmFubWFpXCA7Civlr7jlv5cgPCBzdW5zaGlcIDsKK+S9nuaZuiA8IG5laWNoaVwgOwor5Li76KazIDwgc2h1a2FuXCA7Civlrrbmn4QgPCBpZWdhcmFcIDsKK+Wwj+WztiA8IGtvamltYVwgOwor5pys6JGsIDwgaG9uc291XCA7CivnlKPljbUgPCBzYW5yYW5cIDsKK+S6uueoriA8IGppbnNodVwgOwor5a6M5rK7IDwga2FuY2hpXCA7CivkvZXmnaEgPCBuYW5qb3VcIDsKK+S7o+eUqCA8IGRhaXlvdVwgOwor55u46YOo5bGLIDwgYWliZXlhXCA7CivkvK/mr40gPCBoYWt1Ym9cIDsKK+S/s+WQjSA8IGhhaW1laVwgOwor5a2k5YWQ6ZmiIDwga29qaWluXCA7Civnvqnos4ogPCBnaXpva3VcIDsKK+Wwj+WxsSA8IGtveWFtYVwgOwor5bCK5bSHIDwgc29uc3V1XCA7Civkv7Plj4sgPCBoYWl5dXVcIDsKK+S4gOmAsSA8IGlzc2h1dVwgOwor5LyR5ryUIDwga3l1dWVuXCA7CivkuIDpgJogPCBpdHRzdXVcIDsKK+iEh+aIuCA8IHdha2lkb1wgOwor5bC/5ZmoIDwgbnlvdWtpXCA7CivkuInou40gPCBzYW5ndW5cIDsKK+eLremcpyA8IHNhZ2lyaVwgOwor5qC55ougIDwga29ua3lvXCA7CivkupXntrEgPCBpZHp1bmFcIDsKK+S7iuaXpeaXpSA8IGt5b3ViaVwgOwor5LiH6LuNIDwgYmFuZ3VuXCA7CivmnbHnq68gPCB0b3V0YW5cIDsKK+acrOiNiSA8IGhvbnpvdVwgOwor6LK755uuIDwgaGltb2t1XCA7Civku5nnlYwgPCBzZW5rYWlcIDsKK+eUo+WJjSA8IHNhbnplblwgOwor546J6I+cIDwgdGFtYW5hXCA7CivmnKvojLYgPCBtYXRjaGFcIDsKK+mjr+exsyA8IGhhbm1haVwgOwor6aCG6aKoIDwganVucHV1XCA7CivmnLHoibIgPCBzaHVpcm9cIDsKK+S8neazlSA8IGRlbnBvdVwgOwor55S75LyvIDwgZ2FoYWt1XCA7Civni63pmpggPCBreW91YWlcIDsKK+eNo+ihjCA8IGp1dWtvdVwgOwor5LiN6LazIDwgZnVzb2t1XCA7Civos4fnlKMgPCBzaGlzYW5cIDsKK+WrgeiPnCA8IHlvbWVuYVwgOwor5LqU57WMIDwgZ29reW91XCA7Civpp4XmiYsgPCBla2lzaHVcIDsKK+eUn+WJjSA8IHNlaXplblwgOwor5LiL6LazIDwgZ2Vzb2t1XCA7CivkvZXmlrkgPCBkb25hdGFcIDsKK+ixmuiIjiA8IHRvbnNoYVwgOwor6Laz5aC0IDwgYXNoaWJhXCA7CivpoIbpoIYgPCBqdW5qdW5cIDsKK+iNvOaes+WwvCA8IGRha2luaVwgOwor5LiA6LqrIDwgaXNzaGluXCA7CivogqXmsoMgPCBoaXlva3VcIDsKK+aiseWMhSA8IGtvbnBvdVwgOwor5p6X55SjIDwgcmluc2FuXCA7Civkurrnn6UgPCBqaW5jaGlcIDsKK+e9sOmHkSA8IGJha2tpblwgOwor5Luk54q2IDwgcmVpam91XCA7CivkvovlubQgPCByZWluZW5cIDsKK+eLremWkyA8IGhhemFtYVwgOwor6ISb5be+IDwgaGFiYWtpXCA7CivlsaXkv64gPCByaXNodXVcIDsKK+iGneS4iyA8IHNoaWtrYVwgOwor5LqM57SaIDwgbmlreXV1XCA7CivmtbfogIHpjKAgPCBlYmlqb3VcIDsKK+acrOiGsyA8IGhvbnplblwgOwor5LiA6LevIDwgaWNoaXJvXCA7CivohIbmgKcgPCB6ZWlzZWlcIDsKK+S9k+aTjSA8IHRhaXNvdVwgOwor5L2/5b25IDwgc2hpZWtpXCA7CivmmanppJAgPCBiYW5zYW5cIDsKK+iCneayuSA8IGthbicneXVcIDsKK+e+pOirliA8IGd1bnJvblwgOwor55So5L6/IDwgeW91YmVuXCA7Civku4rnlJ8gPCBrb25qb3VcIDsKK+WwkeWlsyA8IHNob3Vqb1wgOwor5Lq655u4IDwgbmluc291XCA7CivkuojntIQgPCB5b3lha3VcIDsKK+S6uuebriA8IGhpdG9tZVwgOwor55SY5YWaIDwgYW1hdG91XCA7Civosqfnm7ggPCBoaW5zb3VcIDsKK+iDjOaZryA8IGhhaWtlaVwgOwor6aeS5bqnIDwga29tYXphXCA7Civlronmpb0gPCBhbnJha3VcIDsKK+S4luiplSA8IHNlaHlvdVwgOwor54+t55SwIDwgaGFuZGVuXCA7CivmnInok4sgPCB5dXVnYWlcIDsKK+eUqOS7tiA8IHlvdWtlblwgOwor5LmX6Ii5IDwgam91c2VuXCA7Civlrp/mma8gPCBqaWtrZWlcIDsKK+Wxi+WGhSA8IG9rdW5haVwgOwor5a2m5rS+IDwgZ2FrdWhhXCA7CivpoqjoiLkgPCBmdXVzZW5cIDsKK+aflOavmyA8IGp1dW1vdVwgOwor54++54q2IDwgZ2Vuam91XCA7Civpn7Ppn78gPCBvbmt5b3VcIDsKK+acqOiCjCA8IGtpaGFkYVwgOwor5bCK5aSnIDwgc29uZGFpXCA7CivohLPlpKkgPCBub3V0ZW5cIDsKK+WqmuiWrCA8IGJpeWFrdVwgOwor6aKo6Ie0IDwgZnV1Y2hpXCA7Civlr53luoogPCBuZWRva29cIDsKK+S4luilsiA8IHNlc2h1dVwgOwor6ICB57e0IDwgcm91cmVuXCA7CivkuI3oqbMgPCBmdXNob3VcIDsKK+Wun+aWvSA8IGppc3NoaVwgOwor5LiH6KydIDwgYmFuc2hhXCA7CivkuInoq5YgPCBzYW5yb25cIDsKK+S/l+WLmSA8IHpva3VtdVwgOwor6aeF5byBIDwgZWtpYmVuXCA7CivmnKznvbIgPCBob25zaG9cIDsKK+WvneW3uyA8IG5lbWFraVwgOwor5a6f5pWwIDwgamlzc3V1XCA7CivkurrnlJ8gPCBqaW5zZWlcIDsKK+WuiOagqiA8IHNodXNodVwgOwor6JWO6bqm5bGLIDwgc29iYXlhXCA7Civkuonnq68gPCBzb3V0YW5cIDsKK+S4gOitsCA8IGljaGlnaVwgOwor5Ly05pifIDwgYmFuc2VpXCA7Civpo5vnq5wgPCBoaXJ5dXVcIDsKK+agueW5uSA8IGtvbmthblwgOwor6LWk5bi9IDwgYWthYm91XCA7CivppIrnlJ8gPCB5b3Vqb3VcIDsKK+aatOi1sCA8IGJvdXNvdVwgOwor5LiK6KiIIDwgam91a2VpXCA7Civlrr/mhI8gPCBzaHVrdWlcIDsKK+WujOacrCA8IGthbnBvblwgOwor6ICz55uuIDwgamltb2t1XCA7CivkvZ7mgqogPCBuZWlha3VcIDsKK+S/r+S8jyA8IGZ1ZnVrdVwgOwor6aiZ5Y+WIDwgaGVuc2h1XCA7Civkv6/ku7AgPCBmdWd5b3VcIDsKK+S4iuimpyA8IGpvdXJhblwgOwor5LiH6KiAIDwgbWFuZ2VuXCA7Civlr77lpJYgPCB0YWlnYWlcIDsKK+S9j+aJgCA8IGp1dXNob1wgOwor6LKh55WMIDwgemFpa2FpXCA7CivpoqjogZ4gPCBmdXVidW5cIDsKK+S4iuimhiA8IHV3YW9vaVwgOwor5a655oWLIDwgeW91ZGFpXCA7CivosqHnlKMgPCB6YWlzYW5cIDsKK+mbjOaNu+WtkCA8IG1lbmVqaVwgOwor5Lih6JmOIDwgcnlvdWtvXCA7CivnjKXoq4cgPCB3YWlkYW5cIDsKK+i2iuWigyA8IGVra3lvdVwgOwor5LiK6KO9IDwgam91c2VpXCA7Civkv5flhJIgPCB6b2t1anVcIDsKK+S4iuijgSA8IGpvdXNhaVwgOwor5Lyd5p2lIDwgZGVucmFpXCA7Civlr53lsI8gPCBuZXNob3VcIDsKK+acrOe1uSA8IGhvbmtlblwgOwor6aOv55uSIDwgaGFuZ291XCA7CivkuIvooaggPCBrYWh5b3VcIDsKK+iFleWJjSA8IHVkZW1hZVwgOwor5Luu5rOKIDwga2FoYWt1XCA7CivkvZnlvrMgPCB5b3Rva3VcIDsKK+S9nuW8gSA8IG5laWJlblwgOwor5Lit6I+vIDwgY2h1dWthXCA7CivlrrPmgqogPCBnYWlha3VcIDsKK+WwgeWcsCA8IGhvdWNoaVwgOwor5a6M5pWXIDwga2FucGFpXCA7Civkv5rkv5cgPCByaXpva3VcIDsKK+Wxi+S4iiA8IG9rdWpvdVwgOwor5pyo57WEIDwga2lndW1pXCA7CivmnInog70gPCB5dXVub3VcIDsKK+WwmuWPpCA8IHNob3Vrb1wgOwor6IOM5oi7IDwgaGFpcmVpXCA7CivlrqPmiKYgPCBzZW5zZW5cIDsKK+S6lOebriA8IGdvbW9rdVwgOwor5a+T5bGFIDwgZ3V1a3lvXCA7CivlsIvllY8gPCBqaW5tb25cIDsKK+aatOirliA8IGJvdXJvblwgOwor5p2h55eVIDwgam91a29uXCA7CivkvbXlrZggPCBoZWl6b25cIDsKK+WvjOWysyA8IGZ1Z2FrdVwgOwor6IOh5byTIDwga29reXV1XCA7CivmmLzppIkgPCBoaXJ1Z2VcIDsKK+eQtOafsSA8IGtvdG9qaVwgOwor6Lao5YuiIDwgc3V1c2VpXCA7CivpoJHov7cgPCBnYW5tZWlcIDsKK+Wum+aJgCA8IGF0ZXNob1wgOwor5p+Q5p+QIDwgYm91Ym91XCA7Civosq/ngq0gPCBjaG90YW5cIDsKK+S6jOebriA8IGZ1dGFtZVwgOwor5pq06KiAIDwgYm91Z2VuXCA7Civkv4rlgYkgPCBzaHVuJydpXCA7CivlsIrlkb0gPCBzb25tZWlcIDsKK+iCpeaWmSA8IGhpcnlvdVwgOwor5a6f5oWLIDwgaml0dGFpXCA7CivmnKjnrrEgPCBraWJha29cIDsKK+aciee9qiA8IHl1dXphaVwgOwor5a2m5qChIDwgZ2Fra291XCA7CivmnKjnrqEgPCBtb2trYW5cIDsKK+eOhOexsyA8IGdlbm1haVwgOwor54+I55CyIDwga291aGlpXCA7CivpoqjntIsgPCBmdXVtb25cIDsKK+agquWxiyA8IGthYnV5YVwgOwor5bCK5ZCbIDwgc29ua3VuXCA7Civlrp/mhI8gPCBqaXRzdWlcIDsKK+S9juW7iSA8IHRlaXJlblwgOwor6aO854qsIDwga2FpaW51XCA7CivlsIrlj7cgPCBzb25nb3VcIDsKK+S7lua1gSA8IHRhcnl1dVwgOwor5pyr56uvIDwgbWF0dGFuXCA7Civkurrngb0gPCBqaW5zYWlcIDsKK+S4i+iWrCA8IGdleWFrdVwgOwor5a+G5bCBIDwgbWlwcHV1XCA7CivlsI/ljJkgPCBrb3NhamlcIDsKK+WwiuWOsyA8IHNvbmdlblwgOwor6IKJ5qGCIDwgbmlra2VpXCA7CivotbDloYEgPCBzb3VydWlcIDsKK+S8neaQrCA8IGRlbnBhblwgOwor5a+b5aSnIDwga2FuZGFpXCA7Civlj6TkuovoqJggPCBrb2ppa2lcIDsKK+acrOeovyA8IGhvbmtvdVwgOwor5a2Q5qeYIDwga29zYW1hXCA7Civlrr/lsYsgPCB5YWRveWFcIDsKK+Wvv+WRvSA8IGp1bXlvdVwgOwor55yf6Z2i55uuIDwgbWFqaW1lXCA7CivkuInolLUgPCBzYW56b3VcIDsKK+mfs+mHjyA8IG9ucnlvdVwgOwor5LmX566XIDwgam91emFuXCA7CivmoLnlpKogPCBuZWJ1dG9cIDsKK+itsOmVtyA8IGdpY2hvdVwgOwor5pu457+wIDwgc2hva2FuXCA7CivmnaXnirYgPCByYWlqb3VcIDsKK+S7j+azlSA8IGJ1cHBvdVwgOwor5a6J5omLIDwgeWFzdWRlXCA7Civlr77lj6UgPCB0c3Vpa3VcIDsKK+S4reiAsyA8IGNodXVqaVwgOwor5pys56S+IDwgaG9uc2hhXCA7CivkuIvokL0gPCBnZXJha3VcIDsKK+itpumYsiA8IGtlaWJvdVwgOwor5a+S5aScIDwga2FuJyd5YVwgOwor5a6I5oiQIDwgc2h1c2VpXCA7Civnibnpq5ggPCB0b2trb3VcIDsKK+acq+ekviA8IG1hc3NoYVwgOwor5L2X5a+dIDwgd2FiaW5lXCA7Civlrp/lvJ8gPCBqaXR0ZWlcIDsKK+eOsueTjyA8IHJlaXJvdVwgOwor6ICB55y8IDwgcm91Z2FuXCA7CivmoL3ln7kgPCBzYWliYWlcIDsKK+eJoem2jyA8IG9uZG9yaVwgOwor5bCP5YW1IDwga29oeW91XCA7CivmnIjntYwgPCBnZWtrZWlcIDsKK+iDjOW6gyA8IHNlYmlyb1wgOwor5a2j5pilIDwga2lzaHVuXCA7CivlsI/lhZAgPCBzaG91bmlcIDsKK+ixiueolCA8IGhvdW5lblwgOwor54md6beEIDwgaGlua2VpXCA7CivosaHnnLwgPCB6b3VnYW5cIDsKK+eOs+eRgSA8IHRhaW1haVwgOwor5pqX6KqmIDwgYW5zaG91XCA7CivpqJLkurogPCBzb3VqaW5cIDsKK+WtkOagqiA8IGtva2FidVwgOwor5pi86ZaTIDwgaGlydW1hXCA7CivkvY7lsaQgPCB0ZWlzb3VcIDsKK+agueWfjiA8IG5lamlyb1wgOwor5LqA55SyIDwga2lra291XCA7CivpoZXokZcgPCBrZW5jaG9cIDsKK+mokuS5sSA8IHNvdXJhblwgOwor5bCK5YWsIDwgc29ua291XCA7CivlrrXlrq4gPCB5b21peWFcIDsKK+S9j+WwgiA8IGp1dXNlblwgOwor6Z+z6YCfIDwgb25zb2t1XCA7CivkvJDmjqEgPCBiYXNzYWlcIDsKK+S+v+S5lyA8IGJpbmpvdVwgOwor5Lm+55SwIDwga2FuZGVuXCA7CivosYbnp5EgPCBtYW1la2FcIDsKK+iEseWFmiA8IGRhdHRvdVwgOwor5L2e5aemIDwgbmVpa2FuXCA7CivkvY/lrrYgPCBzdW1pa2FcIDsKK+eOsueOsiA8IHJlaXJlaVwgOwor5L625Ly0IDwgcnlvaGFuXCA7Civos5zmna8gPCBzaGloYWlcIDsKK+iyoea6kCA8IHphaWdlblwgOwor5a6J5oGvIDwgYW5zb2t1XCA7CivlsIrlg48gPCBzb256b3VcIDsKK+S4jeiJryA8IGZ1cnlvdVwgOwor5a6a5bi4IDwgdGVpam91XCA7CivnjK7ojLYgPCBrZW5jaGFcIDsKK+S4gOiPiiA8IGlra2lrdVwgOwor5a6u5a62IDwgbWl5YWtlXCA7CivpoqjnpZ4gPCBmdXVqaW5cIDsKK+WvvuWHpiA8IHRhaXNob1wgOwor5Lih576pIDwgcnlvdWdpXCA7CivkuIfoirggPCBiYW5nZWlcIDsKK+izouaYjiA8IGtlbm1laVwgOwor6LKv5rC0IDwgY2hvc3VpXCA7Civmnq/mnKggPCBrYXJla2lcIDsKK+S4gOiNmCA8IGlpY2hhblwgOwor5a+45YmNIDwgc3VuemVuXCA7Civlro/lvIEgPCBrb3ViZW5cIDsKK+WvvuWGhSA8IHRhaW5haVwgOwor6ICB55SfIDwgcm91c2VpXCA7Civnjbrnpa0gPCBkYXNzYWlcIDsKK+eLrOiqniA8IGRva3Vnb1wgOwor5LiK6Ie8IDwgdXdhdXN1XCA7CivlsI/kvZwgPCBrb3Nha3VcIDsKK+acrOeblyA8IGhvbnRvdVwgOwor6aO95rqAIDwgaG91bWFuXCA7CivpgqPnlLHku5YgPCBuYXl1dGFcIDsKK+WvuOWIhiA8IHN1bmJ1blwgOwor54us6KmxIDwgZG9rdXdhXCA7CivkuIfoiKwgPCBiYW5wYW5cIDsKK+S4iuiHiCA8IGpvdXJvdVwgOwor5pyo55uuIDwgbW9rdW1lXCA7CivlrqblrpggPCBrYW5nYW5cIDsKK+abtOe0lyA8IHNhcmFzYVwgOwor5Lq65rCXIDwgaGl0b2tlXCA7CivmnKjnmr8gPCBraXphcmFcIDsKK+S6uuawkSA8IGppbm1pblwgOwor5LiK6IWVIDwgam91d2FuXCA7CivlsIrkvZMgPCBzb250YWlcIDsKK+acqOeariA8IG1va3VoaVwgOwor5Luj5pu/IDwgZGFpdGFpXCA7Civmn5DmiYAgPCBib3VzaG9cIDsKK+WtkOaWuSA8IGtva2F0YVwgOwor5L2c5aC0IDwgc2FrdWJhXCA7CivosqfmsJEgPCBoaW5taW5cIDsKK+S7iuanmCA8IGltYXlvdVwgOwor5Lqs5rWcIDwga2VpaGluXCA7CivmnInnqI4gPCB5dXV6ZWlcIDsKK+iEseS8miA8IGRha2thaVwgOwor5LiK6IOMIDwgdXdhemVpXCA7Civlr7XlhZAgPCBjaG91amlcIDsKK+S4iuiCoiA8IGpvdXNoaVwgOwor5pm66KyAIDwgY2hpYm91XCA7CivpoZ7ogZogPCBydWlqdXVcIDsKK+acrOeVqiA8IGhvbmJhblwgOwor54m56ZyAIDwgdG9rdWp1XCA7CivosrTmp5ggPCBraXNhbWFcIDsKK+iBsOaYjiA8IHNvdW1laVwgOwor6aKo55y8IDwgZnV1Z2FuXCA7CivogIHnjaogPCByb3VrYWlcIDsKK+WutuWhviA8IGthanVrdVwgOwor6LOH5pysIDwgc2hpaG9uXCA7CivkvZzlnJ8gPCBzYWt1ZG9cIDsKK+S8muW8jyA8IGVzaGlraVwgOwor576a576KIDwgcmVpeW91XCA7CivkuInogIUgPCBzYW5zaGFcIDsKK+ixqueIvSA8IGdvdXNvdVwgOwor5L2c5ZuzIDwgc2FrdXp1XCA7CivnjKvog4wgPCBuZWtvemVcIDsKK+mjm+eBqyA8IHRvYmloaVwgOwor54mH6bGXIDwgaGVucmluXCA7Civpp4XlkI0gPCBla2ltZWlcIDsKK+S7o+aVsCA8IGRhaXN1dVwgOwor6LGQ55SwIDwgdG95b3RhXCA7Civni6zooYwgPCBkb2trb3VcIDsKK+eJm+mmrCA8IGd5dXViYVwgOwor5Li456eYIDwgbWFydWhpXCA7Civpo5vngJEgPCBoaWJha3VcIDsKK+WAtualvemDqCA8IGt1cmFidVwgOwor6aCS6KGMIDwgaGFua291XCA7CivmnbHmr44gPCB0b3VtYWlcIDsKK+iDoeWbvSA8IGtva29rdVwgOwor5qGI5YaFIDwgYW4nJ25haVwgOwor5L2V5ZueIDwgbmFua2FpXCA7CivorbfouqsgPCBnb3NoaW5cIDsKK+acqOeQtCA8IG1va2tpblwgOwor5LuP5pu4IDwgYnVzc2hvXCA7CivpoZ7nuoIgPCBydWlzYW5cIDsKK+mdkum7tCA8IGFva2FiaVwgOwor5pyo55CGIDwgbW9rdXJpXCA7CivkvpvkuI4gPCBreW91eW9cIDsKK+iukuislyA8IHphbmJvdVwgOwor5a+d5YiDIDwgbmV0YWJhXCA7CivkuIDnvr0gPCBpY2hpd2FcIDsKK+iCieaEnyA8IG5pa2thblwgOwor6LOi5omNIDwga2Vuc2FpXCA7CivlsYvmoLnlsYsgPCB5YW5leWFcIDsKK+WuieWvpyA8IGFuJyduZWlcIDsKK+S4u+egsiA8IHNodWhvdVwgOwor5a+d5YW3IDwgc2hpbmd1XCA7Civosr/mmJMgPCBib3Vla2lcIDsKK+ePvuaVsCA8IGdlbnN1dVwgOwor6Z+z6Kq/IDwgb25jaG91XCA7Civpp4XliY0gPCBla2ltYWVcIDsKK+WuiOWuriA8IHlhbW9yaVwgOwor6Z+z6KqtIDwgb25kb2t1XCA7CivmnprmlbAgPCBtYWlzdXVcIDsKK+iBoeaVjyA8IHNvdWJpblwgOwor6LKn5qOSIDwgYmluYm91XCA7CivmnIjnm7ggPCBnZXNzb3VcIDsKK+mdkum3uiA8IGFvc2FnaVwgOwor5a2m5b6SIDwgZ2FrdXRvXCA7CivmnInnm4ogPCB5dXVla2lcIDsKK+S7iuaZqSA8IGtvbmJhblwgOwor5a+S5YmkIDwga2FuemFpXCA7Civos6Lmha4gPCBrZW5yeW9cIDsKK+S4i+e1tSA8IHNoaXRhZVwgOwor6K6S6KiAIDwgemFuZ2VuXCA7CivotablhY0gPCBzaGFtZW5cIDsKK+S6iOa4rCA8IHlvc29rdVwgOwor6aKo55C0IDwgZnV1a2luXCA7CivkuInntYQgPCBtaWt1bWlcIDsKK+S4iee1gyA8IHNhbmdlblwgOwor5LiK57SNIDwgam91bm91XCA7CivnjovniakgPCBvdW1vbm9cIDsKK+S4gOe4tyA8IGljaGlydVwgOwor5LqM5rWBIDwgbmlyeXV1XCA7CivmtbfogIHojLYgPCBlYmljaGFcIDsKK+iBluaWrSA8IHNlaWRhblwgOwor5L2p5YmjIDwgaGFpa2VuXCA7CivkurrmnZAgPCBqaW56YWlcIDsKK+acqueGnyA8IG1panVrdVwgOwor5LiK57GzIDwgam91bWFpXCA7CivkuK3noLQgPCBjaHV1aGFcIDsKK+S6uuacmyA8IGppbmJvdVwgOwor5a+h5L2cIDwga2FzYWt1XCA7CivkuK3noKUgPCBuYWthdG9cIDsKK+mir+eIvSA8IHNhc3NvdVwgOwor5a6f5ZywIDwgaml0Y2hpXCA7Civog4zlmqIgPCBoYWlub3VcIDsKK+izpuW9uSA8IGJ1eWFrdVwgOwor5pyJ55SoIDwgeXV1eW91XCA7CivmnInnlKMgPCB5dXVzYW5cIDsKK+aciOeUoyA8IGdlc3NhblwgOwor5LyP5bGLIDwgZnVzZXlhXCA7CivpmL/lqr3muK8gPCBhbWFrb3VcIDsKK+adkeawkSA8IHNvbm1pblwgOwor55CD5oqAIDwga3l1dWdpXCA7CivmnprmjJkgPCBtYWlreW9cIDsKK+aXpemggyA8IGhpZ29yb1wgOwor5LiL562WIDwgZ2VzYWt1XCA7CivpnZLprqsgPCBhb3phbWVcIDsKK+Wtl+W8lSA8IGppYmlraVwgOwor5L2O5ZCfIDwgdGVpZ2luXCA7CivkvZXljYMgPCBuYW56ZW5cIDsKK+S9leWNgSA8IG5hbmp1dVwgOwor6aas5YqbIDwgYmFyaWtpXCA7CivlrZjlu4MgPCB6b25wYWlcIDsKK+ejgeaWueS9jSA8IGppaG91aVwgOwor5LiJ562JIDwgc2FudG91XCA7CivkuIDnsYwgPCBpdGNodXVcIDsKK+WtkOW9uSA8IGtveWFrdVwgOwor5LyP5a2XIDwgZnVzZWppXCA7CivogJDmsLQgPCB0YWlzdWlcIDsKK+S4iuerryA8IGpvdXRhblwgOwor6aeE5L2cIDwgZGFzYWt1XCA7CivkuLnnlLAgPCB0YW5kZW5cIDsKK+mnheS8nSA8IGVraWRlblwgOwor5a2X5bmVIDwgamltYWt1XCA7CivkuIfnq68gPCBiYW50YW5cIDsKK+S4iuepuiA8IGpvdWt1dVwgOwor542w54ybIDwgbmVpbW91XCA7CivniYfpm7IgPCBoZW4nJ3VuXCA7Civni6zoi7EgPCBkb2t1ZWlcIDsKK+aXpembgCA8IGhpZ2FyYVwgOwor6aGM57C9IDwgZGFpc2VuXCA7Civlr4blgbUgPCBtaXR0ZWlcIDsKK+mgu+e5gSA8IGhpbnBhblwgOwor5LiA562WIDwgaXNzYWt1XCA7CivkvZXliIYgPCBuYW5wdW5cIDsKK+eJvemAoyA8IGtlbnJlblwgOwor5a2r5a2QIDwgbWFnb2tvXCA7CivkuInnqK4gPCBzYW5zaHVcIDsKK+S4iueoiyA8IGpvdXRlaVwgOwor5pel6ZmwIDwgaGlrYWdlXCA7CivppqzlhYsgPCBtYXJ1a3VcIDsKK+WumOWWtiA8IGthbicnZWlcIDsKK+e+veeUsCA8IGhhbmVkYVwgOwor5LiA56yRIDwgaXNzaG91XCA7CivpnaLpoKwgPCBtZW5wb29cIDsKK+aXpemZkCA8IGhpZ2lyaVwgOwor5Lih55uuIDwgcnlvdW1lXCA7CivmnKzmupAgPCBob25nZW5cIDsKK+iCieWxiyA8IG5pa3V5YVwgOwor5aem6KiIIDwga2Fua2VpXCA7CivpnZnppIogPCBzZWl5b3VcIDsKK+iyoeaUvyA8IHphaXNlaVwgOwor5a2k5a6iIDwga29rYWt1XCA7Civku6TlvJ8gPCByZWl0ZWlcIDsKK+agquS+oSA8IGthYnVrYVwgOwor5Lit55SfIDwgbmFrYXRlXCA7Civni6zoh6ogPCBkb2t1amlcIDsKK+S7o+W8gSA8IGRhaWJlblwgOwor5a+G5L2/IDwgbWlzc2hpXCA7CivlrrblhYMgPCBpZW1vdG9cIDsKK+eJp+mHjiA8IGJva3V5YVwgOwor6Z2i6Z2iIDwgbWVubWVuXCA7Civkuovmpa0gPCBqaWd5b3VcIDsKK+S4geeomiA8IGRldGNoaVwgOwor5p2l5pu4IDwgcmFpc2hvXCA7Civml6XplbcgPCBoaW5hZ2FcIDsKK+S6lOahgSA8IGdva2V0YVwgOwor5Lya5aCCIDwga2FpZG91XCA7Civlr4bkvJogPCBtaWtrYWlcIDsKK+iziuW+kiA8IHpva3V0b1wgOwor54yr56eRIDwgbmVrb2thXCA7Civml4XppKggPCByeW9rYW5cIDsKK+S7u+WumCA8IG5pbmthblwgOwor5a2f5a2QIDwgbW91c2hpXCA7CivnvqTnm7IgPCBndW5tb3VcIDsKK+aYj+i/tyA8IGtvbm1laVwgOwor5Lmz5q+NIDwgbnl1dWJvXCA7Civku5blv4MgPCB0YXNoaW5cIDsKK+S9j+WDpyA8IGp1dXNvdVwgOwor5LiA56WoIDwgaXBweW91XCA7CivpjZvlhrblsYsgPCBrYWppeWFcIDsKK+afu+WPjiA8IHNhc2h1dVwgOwor5LqM5qC4IDwgbmlrYWt1XCA7Civlrp/li6IgPCBqaXNzZWlcIDsKK+S7ruWxiyA8IGthcml5YVwgOwor5L2e5Lq6IDwgbmVpamluXCA7CivmnKvms5UgPCBtYXBwb3VcIDsKK+adpeaWuSA8IGtpa2F0YVwgOwor6aOy5paZIDwgaW5yeW91XCA7CivlrpjljbAgPCBrYW4nJ2luXCA7CivkurrmiYsgPCBoaXRvZGVcIDsKK+abuOeKtiA8IHNob2pvdVwgOwor5Luu5a+dIDwga2FyaW5lXCA7CivlrZTlrZ8gPCBrb3Vtb3VcIDsKK+S7ruWutiA8IGthcmlpZVwgOwor5LuB5oSbIDwgamluJydhaVwgOwor5aSn6bqmIDwgb29tdWdpXCA7Civni63nvqkgPCBreW91Z2lcIDsKK+isnemHkSA8IHNoYWtpblwgOwor5a2Q5a6IIDwga29tb3JpXCA7Civlrr/kuJYgPCBzdWt1c2VcIDsKK+WlrumXmCA8IGZ1bnRvdVwgOwor5a6X5YuZIDwgc2h1dW11XCA7CivlqZrnpLwgPCBrb25yZWlcIDsKK+acrOauvyA8IGhvbmRlblwgOwor54yb56a9IDwgbW91a2luXCA7Civku4HmgbUgPCBqaW5rZWlcIDsKK+S6lOaXpSA8IGl0c3VrYVwgOwor5pm66IO9IDwgY2hpbm91XCA7CivkuIDnnqwgPCBpc3NodW5cIDsKK+miqOa0niA8IGZ1dWRvdVwgOwor5pas6aaWIDwgemFuc2h1XCA7Civml6Xpiq0gPCBoaXplbmlcIDsKK+acrOashCA8IGhvbnJhblwgOwor5LuP5birIDwgYnVzc2hpXCA7CivlrrbkuKYgPCB5YW5hbWlcIDsKK+ixiuawtCA8IGhvdXN1aVwgOwor5LiB55uuIDwgY2hvdW1lXCA7Civku6TlrasgPCByZWlzb25cIDsKK+S7j+W3pSA8IGJ1a2tvdVwgOwor5aGp5Z+65bqmIDwgZW5raWRvXCA7CivogonloYogPCBuaWtrYWlcIDsKK+aarueniyA8IGJvc2h1dVwgOwor5pm66ICFIDwgY2hpc2hhXCA7CivmlrnpnaIgPCBob3VtZW5cIDsKK+WtmOWkliA8IHpvbmdhaVwgOwor576O55qEIDwgYml0ZWtpXCA7CivkvLblhKogPCByZWl5dXVcIDsKK+efoue+veaguSA8IHlhYmFuZVwgOwor5LmX5rCXIDwgbm9yaWtpXCA7CivkuIrnlaogPCBqb3ViYW5cIDsKK+miqOawtCA8IGZ1dXN1aVwgOwor5LuY5bGeIDwgZnV6b2t1XCA7CivkuInnlaogPCBzYW5iYW5cIDsKK+WtpuWckiA8IGdha3VlblwgOwor6KyZ6YGcIDwga2Vuc29uXCA7CivkuIrnlLAgPCBqb3VkZW5cIDsKK+WknOm3uSA8IHlvdGFrYVwgOwor6LSI5ZGIIDwgem91dGVpXCA7Civoq5bpoYwgPCByb25kYWlcIDsKK+S8muWQiCA8IGthaWdvdVwgOwor55CG5a2mIDwgcmlnYWt1XCA7Civml6fpg70gPCBreXV1dG9cIDsKK+i0iOWPtyA8IHpvdWdvdVwgOwor5Lit54GrIDwgY2h1dWJpXCA7CivkvJ3ljZggPCBkZW50YW5cIDsKK+Wuo+S8nSA8IHNlbmRlblwgOwor6LSL5Y2wIDwgbmlzZWluXCA7Civog4zku7sgPCBoYWluaW5cIDsKK+e/u+ahiCA8IGhvbicnYW5cIDsKK+eOi+anmCA8IG91c2FtYVwgOwor5Lu75ZywIDwgbmluY2hpXCA7CivkuIDnlosgPCBpcHBpa2lcIDsKK+iAgeadpSA8IHJvdXJhaVwgOwor5LuW5a6XIDwgdGFzaHV1XCA7CivogIHmnYkgPCByb3VzYW5cIDsKK+WujOWFqCA8IGthbnplblwgOwor5pat6Z2iIDwgZGFubWVuXCA7Civku6TlprkgPCByZWltYWlcIDsKK+WknOmzpSA8IHlhY2hvdVwgOwor54yb55yBIDwgbW91c2VpXCA7Civmn5TlkowgPCBueXV1d2FcIDsKK+WumuS+iyA8IHRlaXJlaVwgOwor54++5a2YIDwgZ2Vuem9uXCA7CivkubHmna0gPCByYW5ndWlcIDsKK+S8tOS+tiA8IGhhbnJ5b1wgOwor5a6a5L2PIDwgdGVpanV1XCA7CivlrojlhbUgPCBzaHVoZWlcIDsKK+iDjOS4rSA8IHNlbmFrYVwgOwor54m56KixIDwgdG9ra3lvXCA7CivlrZjlnKggPCBzb256YWlcIDsKK+iDjOS4iCA8IHNldGFrZVwgOwor54m56KiTIDwgdG9ra3VuXCA7CivniIbpn7MgPCBiYWt1b25cIDsKK+S4i+eNhCA8IGdlZ29rdVwgOwor5LuK5bCaIDwgaW1hbmFvXCA7Civkurrlt6UgPCBqaW5rb3VcIDsKK+S5seaatCA8IHJhbmJvdVwgOwor5pyb5qiTIDwgYm91cm91XCA7CivkuInnjL8gPCBtaXphcnVcIDsKK+irlumZoyA8IHJvbmppblwgOwor5Ly25Lq6IDwgcmVpamluXCA7CivorLnoqIAgPCBraW5nZW5cIDsKK+acseabuCA8IHNodXNob1wgOwor6aSo5aiDIDwga2FuJydhaVwgOwor54mH6LyqIDwga2F0YXdhXCA7CivlronlgKQgPCB5YXN1bmVcIDsKK+acrOadpSA8IGhvbnJhaVwgOwor5piO6KiAIDwgbWVpZ2VuXCA7Civnv7DmnpcgPCBrYW5yaW5cIDsKK+S7pOWggiA8IHJlaWRvdVwgOwor5LiH54q2IDwgYmFuam91XCA7CivlrpfkuLsgPCBzb3VzaHVcIDsKK+mciumtgiA8IHJlaWtvblwgOwor5pys5pyoIDwgbW90b2tpXCA7CivmnKzmnJsgPCBob25tb3VcIDsKK+e9ueeXhSA8IHJpYnlvdVwgOwor6aGY54q2IDwgZ2Fuam91XCA7CivmnKvmnKsgPCBzdWV6dWVcIDsKK+eZvuWQiOaguSA8IHl1cmluZVwgOwor5a2Q5ZqiIDwgc2hpbm91XCA7CivkuozmiYsgPCBmdXRhdGVcIDsKK+S5seaVsCA8IHJhbnN1dVwgOwor5pil6JqVIDwgaGFydWdvXCA7CivmnKjmnKsgPCBrb251cmVcIDsKK+iCjOWQiCA8IGhhZGFhaVwgOwor546L5pydIDwgb3VjaG91XCA7Civpm7fps7QgPCByYWltZWlcIDsKK+S7u+WRvSA8IG5pbm1laVwgOwor5LuA5a6dIDwganV1aG91XCA7CivkurrlsYsgPCBoaXRveWFcIDsKK+acpuacpyA8IG1vdXJvdVwgOwor5pym5pymIDwgbW91bW91XCA7CivkuK3mtLIgPCBuYWthc3VcIDsKK+izm+WYhiA8IHNhbnRhblwgOwor5pel6LazIDwgaGlhc2hpXCA7Civmlpzpmb0gPCBzaGF5b3VcIDsKK+Wkp+miqCA8IG9va2F6ZVwgOwor5aWq6YKEIDwgZGFra2FuXCA7Civpn7Pnt6AgPCBuZWppbWVcIDsKK+WkqemhlCA8IHRlbmdhblwgOwor54mp6KaLIDwgbW9ub21pXCA7CivpmL/nvoXmvKIgPCBhcmFrYW5cIDsKK+WtpuWLmSA8IGdha3VtdVwgOwor5pu/5q2MIDwga2FldXRhXCA7CivlrZjlkb0gPCB6b25tZWlcIDsKK+Wlrui/hSA8IGZ1bmppblwgOwor6LOt5Y2aIDwgdG9iYWt1XCA7CivmnYnmiLggPCBzdWdpZG9cIDsKK+iyp+WvkiA8IGhpbmthblwgOwor5pyJ5qeYIDwgYXJpeW91XCA7CivmnKzmlocgPCBob25tb25cIDsKK+adpeW6lyA8IHJhaXRlblwgOwor5pys5pWwIDwgaG9uc3V1XCA7Civmlqfpkb8gPCBmdXNha3VcIDsKK+adpeW5tCA8IHJhaW5lblwgOwor5paH6aGMIDwgYnVuZGFpXCA7Civnjovml48gPCBvdXpva3VcIDsKK+S6lOW+syA8IGdvdG9rdVwgOwor5LiH54K5IDwgbWFudGVuXCA7Civku4rlpJwgPCBrb24nJ3lhXCA7CivkuK3msJcgPCBjaHV1a2lcIDsKK+S8neS7pCA8IGRlbnJlaVwgOwor5LuP5aGUIDwgYnV0dG91XCA7CivpnJzpm7AgPCBzb3VmdW5cIDsKK+mgreeXmyA8IHp1dHN1dVwgOwor5Li75qipIDwgc2h1a2VuXCA7Civpm7fprZogPCByYWlneW9cIDsKK+S4h+eBryA8IG1hbmRvdVwgOwor6LKh5a6dIDwgemFpaG91XCA7CivlpJzpoqggPCB5b2themVcIDsKK+iyquWpqiA8IGRvbnJhblwgOwor5LyQ5YCSIDwgYmF0dG91XCA7Civph47ot6/lrZAgPCBub2ppa29cIDsKK+ePvuWcsCA8IGdlbmNoaVwgOwor54yb54qsIDwgbW91a2VuXCA7CivlpKnpm7cgPCB0ZW5yYWlcIDsKK+acneaZqSA8IGFzYWJhblwgOwor5LuW5Zu9IDwgdGFrb2t1XCA7Civku67lkI0gPCBrZW15b3VcIDsKK+miqOaZryA8IGZ1dWtlaVwgOwor6KuW6YuSIDwgcm9ucG91XCA7CivmlofpnaIgPCBidW5tZW5cIDsKK+S8juWAhiA8IGdpcnlvdVwgOwor6aSD5a2QIDwgZ3lvdXphXCA7CivlrablhYQgPCBnYWtrZWlcIDsKK+eKr+e9qiA8IGhhbnphaVwgOwor5aSn6ZujIDwgdGFpbmFuXCA7CivkuK3mrKcgPCBjaHV1b3VcIDsKK+S8neS4liA8IGRlbnNlaVwgOwor5aSa6aGNIDwgdGFnYWt1XCA7CivlpKnpmbogPCB0ZW5rZW5cIDsKK+S8muS4uyA8IGthaXNodVwgOwor5p2x5a6uIDwgdG91Z3V1XCA7CivogZbln58gPCBzZWlpa2lcIDsKK+S7o+WTgSA8IGRhaWhpblwgOwor6aCT55+lIDwgdG9uY2hpXCA7CivlpJXpoZQgPCB5dXVnYW9cIDsKK+S5seaIpiA8IHJhbnNlblwgOwor6ICD5oWuIDwga291cnlvXCA7Civku4vlnKggPCBrYWl6YWlcIDsKK+aVtOmiqCA8IHNlaWZ1dVwgOwor5Lu75YWNIDwgbmlubWVuXCA7CivlrZjliIYgPCB6b25idW5cIDsKK+S7pOWQjSA8IHJlaW1laVwgOwor6aOy5bGLIDwgbm9taXlhXCA7CivkurrlpJYgPCBuaW5nYWlcIDsKK+aWp+mJniA8IGZ1ZXRzdVwgOwor5aSc6ZynIDwgeW9naXJpXCA7CivnjJvnhLYgPCBtb3V6ZW5cIDsKK+S6uuWjqyA8IGppbnNoaVwgOwor6Z2i6LKMIDwgbWVuYm91XCA7Civosqnlo7IgPCBoYW5iYWlcIDsKK+S4u+aguSA8IHNodWtvblwgOwor5aSn6ZaiIDwgb296ZWtpXCA7Civml6foqaAgPCBreXV1ZWlcIDsKK+S7iuWbniA8IGtvbmthaVwgOwor5pel6KqMIDwgbmlzc2hpXCA7Civml6noqIggPCBzb3VrZWlcIDsKK+S7o+WPgiA8IGRhaXNhblwgOwor5aSn6ZaAIDwgZGFpbW9uXCA7CivmnKzmi6AgPCBob25reW9cIDsKK+acieacmyA8IHl1dWJvdVwgOwor5pW06aCTIDwgc2VpdG9uXCA7Civml6foqJggPCBreXV1a2lcIDsKK+WmhOiogCA8IG1vdWdlblwgOwor5peF6LevIDwgdGFiaWppXCA7Civosarlv6sgPCBnb3VrYWlcIDsKK+aXqeimiyA8IGhheWFtaVwgOwor6Zu76aGVIDwgZGVua2VuXCA7CivlpJbpm7sgPCBnYWlkZW5cIDsKK+adv+WhgCA8IGl0YWJlaVwgOwor54mH6KiAIDwgaGVuZ2VuXCA7CivnvarnirYgPCB6YWlqb3VcIDsKK+eOqeW8hCA8IGdhbnJvdVwgOwor5aWJ6YG3IDwgaG91c2VuXCA7CivmnKzmh5AgPCBob25rYWlcIDsKK+S4ueacsSA8IHRhbnNodVwgOwor5Li45pyoIDwgbWFydWtpXCA7CivlrabkuosgPCBnYWt1amlcIDsKK+aciOaXpiA8IGdldHRhblwgOwor5aSc6ZW3IDwgeW9uYWdhXCA7CivpnaLoq4cgPCBtZW5kYW5cIDsKK+Wliei/jiA8IGhvdWdlaVwgOwor5pyJ5pWwIDwgeXV1c3V1XCA7CivlqpLmn5MgPCBiYWlzZW5cIDsKK+e5gemWkSA8IGhhbmthblwgOwor5Luy5YCkIDwgbmFrYW5lXCA7CivkuIrmsLQgPCBqb3VzdWlcIDsKK+iqmOmbuyA8IHl1dWRlblwgOwor5pm0552AIDwgaGFyZWdpXCA7CivnvbDngrkgPCBiYXR0ZW5cIDsKK+Wkp+mOjCA8IG9vZ2FtYVwgOwor5Lqh5aa7IDwgYm91c2FpXCA7CivpnZLosYYgPCBhb21hbWVcIDsKK+iyp+WbsCA8IGhpbmtvblwgOwor5Luy5L+dIDwgY2h1dWhvXCA7Civnj43lpYcgPCBjaGlua2lcIDsKK+Wkp+mNiyA8IG9vbmFiZVwgOwor5pyA5pepIDwgbW9oYXlhXCA7CivkuIfmsJEgPCBiYW5taW5cIDsKK+S5l+aJiyA8IG5vcml0ZVwgOwor5LuP5Y+CIDwgYnVzc2FuXCA7CivkuIDms4ogPCBpcHBha3VcIDsKK+S4u+aWhyA8IHNodWJ1blwgOwor54++5YuiIDwgZ2Vuc2VpXCA7CivogIHlubwgPCByb3V5b3VcIDsKK+iAgeW5tCA8IHJvdW5lblwgOwor5LiJ5q27IDwgc2Fuc2hpXCA7Civku5blipsgPCB0YXJpa2lcIDsKK+acrOaApyA8IGhvbnNlaVwgOwor57+75byEIDwgaG9ucm91XCA7CivosqHlm6MgPCB6YWlkYW5cIDsKK+iqjOmdoiA8IHNoaW1lblwgOwor5LiH5q27IDwgYmFuc2hpXCA7CivkuIfmrbMgPCBtYW56YWlcIDsKK+WtkOS+myA8IGtvZG9tb1wgOwor5a2Y5LqhIDwgc29uYm91XCA7CivkuozlrZAgPCBmdXRhZ29cIDsKK+Wcn+S4i+W6pyA8IGRvZ2V6YVwgOwor6aCG55WqIDwganVuYmFuXCA7Civpm7Lpm4YgPCB1bnNodXVcIDsKK+mbsumbgCA8IGhpYmFyaVwgOwor54++5YmNIDwgZ2VuemVuXCA7Civku4vljbUgPCBrYWlyYW5cIDsKK+Wkp+mJiCA8IG9vbmF0YVwgOwor6Zuj6aGMIDwgbmFuZGFpXCA7CivmnKzlvbEgPCBob24nJ2VpXCA7CivkuKbmnKggPCBuYW1pa2lcIDsKK+aWnOi+uiA8IHNoYWhlblwgOwor6LOi5Li7IDwga2Vuc2h1XCA7Civmm7jmlo4gPCBzaG9zYWlcIDsKK+e+iuavmyA8IHlvdW1vdVwgOwor5aSn6YeRIDwgdGFpa2luXCA7Civku4HlkJsgPCBqaW5rdW5cIDsKK+S4jeanmCA8IGJ1emFtYVwgOwor5Lq65ZOhIDwgamluJydpblwgOwor5Lit5pelIDwgbmFrYWJpXCA7CivmnKvlvJ8gPCBtYXR0ZWlcIDsKK+S6uuWTgSA8IGppbnBpblwgOwor5LiJ5qipIDwgc2Fua2VuXCA7CivkuIDmrKEgPCBpY2hpamlcIDsKK+eGsemiqCA8IG5lcHB1dVwgOwor5LiK5qeYIDwgdWV6YW1hXCA7CivlpKfphZIgPCBvb3pha2VcIDsKK+S6uuWRvSA8IGppbm1laVwgOwor57im6ZmjIDwganV1amluXCA7Civlq4HlvqEgPCB5b21lZ29cIDsKK+iznuS4jiA8IHNob3V5b1wgOwor5pys5bqXIDwgaG9udGVuXCA7Civpm7LplpMgPCBrdW1vbWFcIDsKK+Wni+e1giA8IHNoaWp1dVwgOwor6KuW6LObIDwgcm9uc2FuXCA7Civku4/lhbggPCBidXR0ZW5cIDsKK+S4iealrSA8IHNhbmdvdVwgOwor5Luj5Lu7IDwgZGFpbmluXCA7CivnvqjmnJsgPCBzZW5ib3VcIDsKK+ippumokyA8IHNoaWtlblwgOwor5LiW5p+EIDwgeW9nYXJhXCA7Civoqp7pjLIgPCBnb3Jva3VcIDsKK+WkqemBkyA8IHRlbmRvdVwgOwor5Lq65Y+CIDwgbmluamluXCA7CivlpKnpgYsgPCB0ZW4nJ3VuXCA7CivkuIDmqLkgPCBpY2hpanVcIDsKK+S7iuWGrCA8IGtvbnRvdVwgOwor5aSn6YGTIDwgZGFpZG91XCA7CivmhbDlronogIUgPCBpYW5zaGFcIDsKK+mboumalCA8IHJpa2FrdVwgOwor5pq05rCRIDwgYm91bWluXCA7Civpm6LpmbggPCByaXJpa3VcIDsKK+iAgeWusyA8IHJvdWdhaVwgOwor5paH6YG4IDwgYnVuc2VuXCA7CivmnKjlt6UgPCBtb2trb3VcIDsKK+S5seWwhCA8IHJhbnNoYVwgOwor5aSp6L66IDwgdGVwcGVuXCA7Civosqzli5kgPCBzZWtpbXVcIDsKK+aWh+mBiyA8IGJ1bicndW5cIDsKK+aXheijhSA8IHJ5b3NvdVwgOwor5pa56KiAIDwgaG91Z2VuXCA7CivkuInmoYEgPCBtaWtldGFcIDsKK+iAgeWsoiA8IHJvdWpvdVwgOwor6IGW5YOPIDwgc2Vpem91XCA7Civml4XooYwgPCByeW9rb3VcIDsKK+mbo+mWoiA8IG5hbmthblwgOwor5paw6KqeIDwgc2hpbmdvXCA7CivlpKfovKogPCB0YWlyaW5cIDsKK+acrOWxsSA8IGhvbnphblwgOwor5aSp6LuNIDwgdGVuZ3VuXCA7CivkuInmnpogPCBzYW5tYWlcIDsKK+adv+WJjSA8IGl0YW1hZVwgOwor54++5LujIDwgZ2VuZGFpXCA7CivpoLvmrbsgPCBoaW5zaGlcIDsKK+acrOWxiyA8IGhvbicneWFcIDsKK+S4ieadvyA8IHNhbnBhblwgOwor6aGe5pysIDwgcnVpaG9uXCA7Civlo7DploAgPCBzZWltb25cIDsKK+ePvuS7iiA8IGdlbmtvblwgOwor5Lqr5Y+XIDwga3lvdWp1XCA7CivpoqjluKsgPCBmdXVzaGlcIDsKK+mhnuabuCA8IHJ1aXNob1wgOwor5pys5bCKIDwgaG9uem9uXCA7CivkuIrmnJ8gPCBrYW1pa2lcIDsKK+eGsemXmCA8IG5ldHRvdVwgOwor54+N5ZGzIDwgY2hpbm1pXCA7Civmm7jmiL8gPCBzaG9ib3VcIDsKK+S4gOahiCA8IGljaGlhblwgOwor5LiJ5pysIDwgc2FuYm9uXCA7CivppIrliIYgPCB5b3VidW5cIDsKK+ixquWloiA8IGdvdXNoYVwgOwor5pS56aGMIDwga2FpZGFpXCA7CivkuIrmm7ggPCBqb3VzaG9cIDsKK+acqOWxkSA8IGtpa3V6dVwgOwor5LuP5LyaIDwgYnV0c3VlXCA7CivkuqHlkb0gPCBib3VtZWlcIDsKK+aWreiogCA8IGRhbmdlblwgOwor5aSW6YGKIDwgZ2FpeXV1XCA7CivnjonlsYsgPCB0YW1heWFcIDsKK+S7leS4iiA8IHNoaWFnZVwgOwor6aGY5pybIDwgZ2FubW91XCA7CivniKzomasgPCBoYWNodXVcIDsKK+eMruacrCA8IGtlbnBvblwgOwor5pyA5oKqIDwgc2FpYWt1XCA7Civni6zmvJQgPCBkb2t1ZW5cIDsKK+mhmOabuCA8IGdhbnNob1wgOwor5pyr5a2rIDwgbWFzc29uXCA7CivmmpfmtYEgPCBhbnJ5dXVcIDsKK+acq+WtkCA8IG1hc3NoaVwgOwor57+g5bWQIDwgc3VpcmFuXCA7Civpo5/lmaggPCBzaG9ra2lcIDsKK+Wkp+i2syA8IG9vYXNoaVwgOwor5Lqh5Y+LIDwgYm91eXV1XCA7Civku4rku4ogPCBpbWFpbWFcIDsKK+S7iuS6uiA8IGtvbmppblwgOwor6IGW5Lq6IDwgc2VpamluXCA7CivnjaPmgKcgPCBqdXVzZWlcIDsKK+mbsumHjyA8IHVucnlvdVwgOwor5LiK5pesIDwgam91anVuXCA7CivkuIDmnJ0gPCBpdGNob3VcIDsKK+Wkoui3ryA8IHl1bWVqaVwgOwor5LiA5pyNIDwgaXBwdWt1XCA7Civoq4foq5YgPCBkYW5yb25cIDsKK+S4oeaLsyA8IGphbmtlblwgOwor6aOv5Y+wIDwgaGFuZGFpXCA7Civml6XoiKogPCBuaWtrb3VcIDsKK+e9t+alrSA8IGhpZ3lvdVwgOwor5Lq65YGPIDwgbmluYmVuXCA7CivlpJbovKogPCBnYWlyaW5cIDsKK+WkqeiznCA8IHRlbnNoaVwgOwor5LiJ5pa5IDwgc2FucG91XCA7CivpnZLol40gPCBzZWlyYW5cIDsKK+mfsueJqSA8IGFlbW9ub1wgOwor5Li75b6TIDwgc2h1anV1XCA7Civmlq3oo4EgPCBkYW5zYWlcIDsKK+S6uuWAqyA8IGppbnJpblwgOwor6KuL6KiTIDwgc2Vpa3VuXCA7CivnjKXmnKwgPCB3YWlob25cIDsKK+S5vuWdpCA8IGtlbmtvblwgOwor5Lmx5aOyIDwgcmFuYmFpXCA7CivlpInpgbcgPCBoZW5zZW5cIDsKK+mhjOadkCA8IGRhaXphaVwgOwor5aSW6LuKIDwgZ2Fpc2hhXCA7CivkuKHmiYsgPCByeW91dGVcIDsKK+S4g+aXpSA8IG5hbm9rYVwgOwor5aSJ6YCgIDwgaGVuem91XCA7CivpoZjmlocgPCBnYW5tb25cIDsKK+WlieihjCA8IGJ1Z3lvdVwgOwor5LuB5Lq6IDwgamluamluXCA7CivmnKzlprsgPCBob25zYWlcIDsKK+miqOWusyA8IGZ1dWdhaVwgOwor5auJ5aasIDwgc2hpdHRvXCA7CivorJ3nvaogPCBzaGF6YWlcIDsKK+S6uuS9kyA8IG5pbnRlaVwgOwor5paH6LGqIDwgYnVuZ291XCA7Civmlr3olqwgPCBzZXlha3VcIDsKK+aWnOimliA8IHNoYXNoaVwgOwor5pWw6LuSIDwgc3V1a2VuXCA7Civnvarmpa0gPCB6YWlnb3VcIDsKK+mbu+i7iiA8IGRlbnNoYVwgOwor6aGe5o6oIDwgcnVpc3VpXCA7CivlpInou6IgPCBoZW50ZW5cIDsKK+S4gOaTsiA8IGl0dGVraVwgOwor54yb5pqRIDwgbW91c2hvXCA7Civoq7joirggPCBzaG9nZWlcIDsKK+S6iOWRiiA8IHlva29rdVwgOwor5pu45bqXIDwgc2hvdGVuXCA7CivmnKzloYEgPCBob25ydWlcIDsKK+eHu+ijvSA8IGt1bnNlaVwgOwor6Zui6YO3IDwgcmlreW91XCA7CivntbXml6XoqJggPCBlbmlra2lcIDsKK+mdkuiNiSA8IGFva3VzYVwgOwor5aSW6LKMIDwgZ2FpYm91XCA7CivkuK3luqcgPCBjaHV1emFcIDsKK+e9sOadryA8IGJhcHBhaVwgOwor6aC45pyoIDwga3ViaWtpXCA7CivkuZnlpJwgPCBvdHN1eWFcIDsKK+mgk+atuyA8IHRvbnNoaVwgOwor5pil552AIDwgaGFydWdpXCA7Civnt6jpmoogPCBoZW50YWlcIDsKK+iqreiqpiA8IGRva3VqdVwgOwor5Lqs5Lq6IDwga2VpamluXCA7CivnjJvmlLsgPCBtb3Vrb3VcIDsKK+S6jOWJsiA8IG5pd2FyaVwgOwor5pyo5Z6LIDwga2lnYXRhXCA7CivmnJvlpJYgPCBib3VnYWlcIDsKK+aaruaYpSA8IGJvc2h1blwgOwor5Li75bCOIDwgc2h1ZG91XCA7CivlqK/mpb0gPCBnb3Jha3VcIDsKK+mZgOe+heWwvCA8IGRhcmFuaVwgOwor5pq05pS/IDwgYm91c2VpXCA7CivoqqTorKwgPCBnb2J5dXVcIDsKK+S6gOWNnCA8IGtpYm9rdVwgOwor6Kqt6KejIDwgZG9ra2FpXCA7CivkuLvlrrAgPCBzaHVzYWlcIDsKK+eOi+WbvSA8IG91a29rdVwgOwor5aSa6KqtIDwgdGFkb2t1XCA7CivkuZfloLQgPCBub3JpYmFcIDsKK+WkouimiyA8IHl1bWVtaVwgOwor5Lih5bqmIDwgcnlvdWRvXCA7CivpoLvmlbAgPCBoaW5zdXVcIDsKK+iqpOiqrSA8IGdvZG9rdVwgOwor5pmm5riLIDwga2FpanV1XCA7CivkuI3mg5EgPCBmdXdha3VcIDsKK+aVl+i7jSA8IGhhaWd1blwgOwor5p2l5LyaIDwgcmFpa2FpXCA7CivkuIDmiYsgPCBoaXRvdGVcIDsKK+e+heaWueS9jSA8IHJhaG91aVwgOwor5p2l5Lu7IDwgcmFpbmluXCA7Civmm77lrasgPCBoaW1hZ29cIDsKK+iqpOiosyA8IGdveWFrdVwgOwor5pyX5aCxIDwgcm91aG91XCA7CivlpJrop5IgPCB0YWtha3VcIDsKK+S4h+aEnyA8IGJhbmthblwgOwor5aWI6JC9IDwgbmFyYWt1XCA7CivlpJzopbIgPCB5YXNodXVcIDsKK+eKoOeJmyA8IGdpZ3l1dVwgOwor5pil55S7IDwgc2h1bmdhXCA7CivmnaHku7YgPCBqb3VrZW5cIDsKK+aVo+iyoSA8IHNhbnphaVwgOwor6ZqP6aCGIDwgenVpanVuXCA7CivmnaXkuJYgPCByYWlzZWlcIDsKK+e4puiyqyA8IGp1dWthblwgOwor5LiN5b6zIDwgZnV0b2t1XCA7Civnt5Hpm6ggPCByeW9rdXVcIDsKK+WkluimiyA8IHNvdG9taVwgOwor5piP552hIDwga29uc3VpXCA7CivoqanpgbggPCBzaGlzZW5cIDsKK+mdoue5iyA8IG9tb2dhaVwgOwor5paw6Iq9IDwgc2hpbm1lXCA7CivmlbDoqZ4gPCBzdXVzaGlcIDsKK+aYjuecuCA8IG1laWJvdVwgOwor6aCt5pWwIDwgdG91c3V1XCA7CivmmrTmjJkgPCBib3VreW9cIDsKK+malOmboiA8IGtha3VyaVwgOwor5pys5ZG9IDwgaG9ubWVpXCA7CivpoZ7lvaIgPCBydWlrZWlcIDsKK+S4reWtkCA8IG5ha2Fnb1wgOwor5puz5a2QIDwgaGlraWtvXCA7CivlpKnompUgPCB0ZW5zYW5cIDsKK+Wls+e1piA8IGpva3l1dVwgOwor6Zu76KejIDwgZGVua2FpXCA7CivmnIjloLEgPCBnZXBwb3VcIDsKK+acgOWkpyA8IHNhaWRhaVwgOwor54e76JK4IDwga3Vuam91XCA7CivkupHkupEgPCB1bicnbnVuXCA7CivpmpnplpMgPCBzdWtpbWFcIDsKK+acgOWkliA8IHNhaWdhaVwgOwor5pS56YCgIDwga2Fpem91XCA7CivlpKfomY4gPCBvb2RvcmFcIDsKK+mZtemnlSA8IHJ5b3VnYVwgOwor5aOy6LK3IDwgYmFpYmFpXCA7CivkuLjlpKogPCBtYXJ1dGFcIDsKK+adkeS8miA8IHNvbmthaVwgOwor576O5b6zIDwgYml0b2t1XCA7CivmnKrlj44gPCBtaXNodXVcIDsKK+S4gOW/nCA8IGljaGlvdVwgOwor5pyN5ZywIDwgZnVrdWppXCA7CivorJ3npLwgPCBzaGFyZWlcIDsKK+acqOWPoiA8IGtvbXVyYVwgOwor5LiA5b6zIDwgaXR0b2t1XCA7CivkuozkurogPCBmdXRhcmlcIDsKK+iAgeWFtSA8IHJvdWhlaVwgOwor542E5bGLIDwgZ29rdXlhXCA7CivnhY7ppIUgPCBzZW5iZWlcIDsKK+S4iuW4ryA8IHV3YW9iaVwgOwor6ZuR6LiPIDwgemF0dG91XCA7Civmlofol7sgPCBidW5zb3VcIDsKK+eGseizmyA8IG5lc3NhblwgOwor5pWZ6K23IDwga3lvdWdvXCA7CivkubPlhZAgPCBueXV1amlcIDsKK+e+pOWxhSA8IGd1bmt5b1wgOwor57qP57a/IDwgdGVubWVuXCA7CivnlbDkvZPlrZcgPCBpdGFpamlcIDsKK+eMm+aCqiA8IG1vdWFrdVwgOwor5aSn6JS1IDwgb29rdXJhXCA7CivkuIflt7sgPCBtYW5nYW5cIDsKK+aXpeeoiyA8IG5pdHRlaVwgOwor5LiB5bqmIDwgY2hvdWRvXCA7CivlpKnok4sgPCB0ZW5nYWlcIDsKK+aVmeirrSA8IGt5b3V5dVwgOwor5LiA5bqnIDwgaWNoaXphXCA7CivkuZflkIggPCBub3JpYWlcIDsKK+mfs+aomSA8IG9ucHlvdVwgOwor5LmX5Y+3IDwgam91Z291XCA7CivmmrTmgqogPCBib3Vha3VcIDsKK+miqOWQkSA8IGZ1dWtvdVwgOwor5pys5YiGIDwgaG9uYnVuXCA7CivmlZHorbcgPCBreXV1Z29cIDsKK+e4puimpyA8IGp1dXJhblwgOwor5pyN5ZaqIDwgZnVrdW1vXCA7CivmnKjliaMgPCBib2trZW5cIDsKK+Wkp+iRlyA8IHRhaWNob1wgOwor5pOs6Z2pIDwgZ2lrYWt1XCA7Civoq5bogIUgPCByb25zaGFcIDsKK+irluiAgyA8IHJvbmtvdVwgOwor6Z+z5qW9IDwgb25nYWt1XCA7CivmnJflkJ8gPCByb3VnaW5cIDsKK+mbquimiyA8IHl1a2ltaVwgOwor5Lmx5YCrIDwgcmFucmluXCA7Civpm7LooaggPCB1bnB5b3VcIDsKK+eJm+eariA8IGd5dXVoaVwgOwor5LiK5bGkIDwgam91c291XCA7Civpm6PoqJMgPCBuYW5rdW5cIDsKK+iAgeS9kyA8IHJvdXRhaVwgOwor6Zm46ZuiIDwgcmlrdXJpXCA7Civmlq3nvaogPCBkYW56YWlcIDsKK+iok+mbuyA8IGt1bmRlblwgOwor54mi55WqIDwgcm91YmFuXCA7CivmmYLmtYEgPCBqaXJ5dXVcIDsKK+aWrOe9qiA8IHphbnphaVwgOwor5peF57GgIDwgaGF0YWdvXCA7CivmmbTmnJcgPCBzZWlyb3VcIDsKK+S4ieWwgSA8IHNhbnB1dVwgOwor54ax6KqgIDwgbmVzc2VpXCA7CivkuInlr7ggPCBzYW56dW5cIDsKK+iAgeS6uiA8IHJvdWppblwgOwor5pm05puHIDwgc2VpZG9uXCA7CivpoqjliY0gPCBmdXV6ZW5cIDsKK+mZo+miqCA8IGppbnB1dVwgOwor6ZuG6LKoIDwgc2h1dWthXCA7CivpmqfpgZMgPCBzdWlkb3VcIDsKK+acgOWWhCA8IHNhaXplblwgOwor572q5oKqIDwgemFpYWt1XCA7CivmmpbmiL8gPCBkYW5ib3VcIDsKK+aVrOiZlCA8IGtlaWtlblwgOwor6Zqj6YKmIDwgcmlucG91XCA7CivkubHkuqQgPCByYW5rb3VcIDsKK+iAgeS4rSA8IHJvdWp1dVwgOwor5aWz56WeIDwgbWVnYW1pXCA7CivpnZLnrYsgPCBhb3N1amlcIDsKK+iruOeoriA8IHNob3NodVwgOwor5pyL5Y+LIDwgaG91eXV1XCA7CivmlofoirggPCBidW5nZWlcIDsKK+mZsOmZvSA8IG9uJyd5b3VcIDsKK+S4geWvpyA8IHRlaW5laVwgOwor5LiA5a++IDwgaXR0c3VpXCA7Civnvqnlob4gPCBnaWp1a3VcIDsKK+Wkp+iIuSA8IG9vYnVuZVwgOwor6Z2S56u5IDwgYW9kYWtlXCA7CivpnannoKUgPCBrYXdhdG9cIDsKK+mbkeiqjCA8IHphc3NoaVwgOwor54mH55y8IDwga2F0YW1lXCA7Civmlq3nt5ogPCBkYW5zZW5cIDsKK+S5seS4liA8IHJhbnNlaVwgOwor54af6K2wIDwganVrdWdpXCA7CivpmqDpgLggPCBpbml0c3VcIDsKK+Wkp+iHoyA8IGRhaWppblwgOwor576O5a2mIDwgYmlnYWt1XCA7CivmlL/oq5YgPCBzZWlyb25cIDsKK+acjeWLmSA8IGZ1a3VtdVwgOwor6Z2S56m6IDwgYW96b3JhXCA7CivmnInljYogPCB5dXVoYW5cIDsKK+mbkeiogCA8IHpvdWdvblwgOwor5ZCM5oSP6KqeIDwgZG91aWdvXCA7CivkuIvlp5MgPCBnZXNob3VcIDsKK+WmmeeOiyA8IG15b3VvdVwgOwor5peF56iLIDwgcnlvdGVpXCA7CivlpYnntI0gPCBob3Vub3VcIDsKK+eGn+iqniA8IGp1a3Vnb1wgOwor54uZ5pKDIDwgc29nZWtpXCA7CivnjLblpKogPCB5dWRheWFcIDsKK+WknOiIuSA8IHlvZnVuZVwgOwor5aSn6IOGIDwgZGFpdGFuXCA7CivkuIrlpKkgPCBqb3V0ZW5cIDsKK+aXqeeUoyA8IHNvdXphblwgOwor5aSn6IKhIDwgb29tYXRhXCA7CivmnIDljZcgPCBzYWluYW5cIDsKK+WkqeiBniA8IHRlbmJ1blwgOwor6Ki06L+9IDwgc290c3VpXCA7CivoqaDoqqYgPCBlaXNob3VcIDsKK+aZpuaXpSA8IG1pc29rYVwgOwor6KiY6YyyIDwga2lyb2t1XCA7Civmm7jlkI0gPCBzaG9tZWlcIDsKK+S4h+WkqSA8IGJhbnRlblwgOwor5Lit5ZKMIDwgY2h1dXdhXCA7CivmlLnoqIIgPCBrYWl0ZWlcIDsKK+aXpeeUoyA8IG5pc3NhblwgOwor6Z2i55u4IDwgbWVuc291XCA7CivoqZXorbAgPCBoeW91Z2lcIDsKK+Wkp+iAgSA8IHRhaXJvdVwgOwor6aKo5L2TIDwgZnV1dGVpXCA7CivniZ3niZsgPCBtZXVzaGlcIDsKK+Wil+mFjSA8IHpvdWhhaVwgOwor5LiA5aWzIDwgaWNoaWpvXCA7CivkuIrloLQgPCBqb3Vqb3VcIDsKK+Wkp+e+pCA8IHRhaWd1blwgOwor6Zmi6ZW3IDwgaW5jaG91XCA7CivkuK3lj6UgPCBjaHV1a3VcIDsKK+S4ieWhgSA8IHNhbnJ1aVwgOwor6Zq76KqeIDwgc2VraWdvXCA7Civmm4flpKkgPCBkb250ZW5cIDsKK+aciOWFiSA8IGdla2tvdVwgOwor6ZyK6IO9IDwgcmVpbm91XCA7Civlp7vml48gPCBpbnpva3VcIDsKK+S4ueWJjSA8IHRhbnplblwgOwor5Li45YmkIDwgZ2FuemFpXCA7CivkuIDlpKIgPCBpY2hpbXVcIDsKK+acgOWInSA8IHNhaXNob1wgOwor5LiA5aScIDwgaGl0b3lvXCA7CivkuIfloLQgPCBtYW5qb3VcIDsKK+iruOebuCA8IHNob3NvdVwgOwor5aWH562WIDwga2lzYWt1XCA7CivlqZrlp7sgPCBrb24nJ2luXCA7CivkuI7lnKcgPCB5b2F0c3VcIDsKK+eGlOinoyA8IHlvdWthaVwgOwor5aSa6IKJIDwgdGFuaWt1XCA7CivmmpfluZUgPCBhbm1ha3VcIDsKK+mahumBiyA8IHJ5dXV1blwgOwor6Z+L6aeE5aSpIDwgaWRhdGVuXCA7Civoqpjoh7QgPCB5dXVjaGlcIDsKK+aaluW4ryA8IGRhbnRhaVwgOwor5LiL5Zu9IDwgZ2Vrb2t1XCA7CivmmqvlrpogPCB6YW50ZWlcIDsKK+aWreeoriA8IGRhbnNodVwgOwor54us5b6AIDwgZG9rdW91XCA7CivkuInlm7IgPCBtaXRzdWlcIDsKK+WkluiBniA8IGdhaWJ1blwgOwor54m55rS+IDwgdG9rdWhhXCA7CivkuLvlgpggPCBzaHVzYW5cIDsKK+eCuuaUv+WutiA8IGlzZWlrYVwgOwor5aSp57ayIDwgdGVubW91XCA7CivpmbbphZQgPCB0b3VzdWlcIDsKK+abuOWGmSA8IHNob3NoYVwgOwor5LqM5bqm55uuIDwgbmlkb21lXCA7CivnjYTlkI8gPCBnb2t1cmlcIDsKK+eLrOW6pyA8IGRva3V6YVwgOwor5LiA5Zu9IDwgaWtrb2t1XCA7CivpoJjluIMgPCByeW91ZnVcIDsKK+eJh+eJhyA8IGhlbnBlblwgOwor5LiA5ZugIDwgaWNoaWluXCA7CivpnKfnrJsgPCBtdXRla2lcIDsKK+mZuOmBiyA8IHJpa3V1blwgOwor54Sh6ZeHIDwgbXV5YW1pXCA7Civpm4TonIIgPCBvYmFjaGlcIDsKK+e1uembsiA8IGtlbicndW5cIDsKK+eFruixhiA8IG5pbWFtZVwgOwor54aU6J6NIDwgeW91eXV1XCA7CivkuLvkvZMgPCBzaHV0YWlcIDsKK+iok+mAoyA8IGt1bnJlblwgOwor5LiH5ZaEIDwgbWFuemVuXCA7Civmlofns7sgPCBidW5rZWlcIDsKK+aWveeZgiA8IHNlcnlvdVwgOwor5Li75Lu7IDwgc2h1bmluXCA7CivmlazogIEgPCBrZWlyb3VcIDsKK+mghuW9kyA8IGp1bnRvdVwgOwor6Zm96LuiIDwgeW91dGVuXCA7Civml6XnhLwgPCBoaXlha2VcIDsKK+S4iuWTgSA8IGpvdWJvblwgOwor5Li75Lq6IDwgc2h1amluXCA7Civpm4TomIIgPCB5dXV6dWlcIDsKK+mbo+iIuSA8IG5hbnNlblwgOwor6ZqG6LW3IDwgcnl1dWtpXCA7Civlp7vmiJogPCBpbnNla2lcIDsKK+mhnuWQjCA8IHJ1aWRvdVwgOwor6Kqm57WMIDwgenVreW91XCA7Civml6nngKwgPCBoYXlhc2VcIDsKK+abuOS9kyA8IHNob3RhaVwgOwor57eS6KuWIDwgY2hvcm9uXCA7CivkuLvkuIogPCBzaHVqb3VcIDsKK+acgOS4rSA8IG1vbmFrYVwgOwor6ZuR6I+MIDwgemFra2luXCA7Civmlofnr4QgPCBidW5wYW5cIDsKK+aWsOebhiA8IG5paWJvblwgOwor5aKX6LOHIDwgem91c2hpXCA7CivmnIDkuIogPCBtb2dhbWlcIDsKK+Wkp+etiyA8IG9vc3VqaVwgOwor5aqS5L2TIDwgYmFpdGFpXCA7CivniIbnoLQgPCBiYWt1aGFcIDsKK+eLrOWxhSA8IGRva2t5b1wgOwor54m55qipIDwgdG9ra2VuXCA7CivoqLPoqp4gPCB5YWt1Z29cIDsKK+S4reS9kCA8IGNodXVzYVwgOwor5LiH5Y+jIDwgYmFua291XCA7Civpm5HojYkgPCB6YXNzb3VcIDsKK+S4iuWNiiA8IGpvdWhhblwgOwor6Zm46LevIDwgcmlrdXJvXCA7CivlqpLku4sgPCBiYWlrYWlcIDsKK+WkqeepuiA8IHRlbmt1dVwgOwor57eS6KiAIDwgY2hvZ2VuXCA7CivpnIDntaYgPCBqdWt5dXVcIDsKK+S4juWKmyA8IHlvcmlraVwgOwor5aSn56m6IDwgb296b3JhXCA7CivlpJbnsbMgPCBnYWltYWlcIDsKK+WkqeeonyA8IHRlbnBpblwgOwor5Lit5LqMIDwgY2h1dW5pXCA7CivlpYfnmZYgPCBraWhla2lcIDsKK+aVj+iFlSA8IGJpbndhblwgOwor5aSp56ekIDwgdGVuYmluXCA7CivntKLpurogPCBzb3VtZW5cIDsKK+e+pOWDjyA8IGd1bnpvdVwgOwor5aWu54S2IDwgZnVuemVuXCA7CivkuIfliqsgPCBtYW5nb3VcIDsKK+S4iuWJjSA8IHV3YW1hZVwgOwor6ZuM6IqxIDwgbWViYW5hXCA7CivlpYfnl4UgPCBraWJ5b3VcIDsKK+mdkueJqSA8IGFvbW9ub1wgOwor5aSp56WeIDwgdGVuamluXCA7CivnhLbov4QgPCBzYW1hZGVcIDsKK+mhjOWQjSA8IGRhaW1laVwgOwor6aGM5Y+3IDwgZGFpZ291XCA7CivlpKfnpa0gPCB0YWlzYWlcIDsKK+S4ieWIhiA8IHNhbnB1blwgOwor576p5L6gIDwgZ2lreW91XCA7Civnt4/oo48gPCBzb3V1cmFcIDsKK+eJqeaoqSA8IGJ1a2tlblwgOwor5aSc56m6IDwgeW96b3JhXCA7Civnt4/oo4EgPCBzb3VzYWlcIDsKK+eEoemHjyA8IG11cnlvdVwgOwor6ZuA6I2YIDwgamFuc291XCA7Civnt4ropIwgPCBraW5rb25cIDsKK+S4luS/lyA8IHNlem9rdVwgOwor54mb5q2pIDwgZ3l1dWhvXCA7Civml6fmtL4gPCBreXV1aGFcIDsKK+e+heWMlyA8IHJhaG9rdVwgOwor57Sw6a2aIDwgc2F5b3JpXCA7CivkuIvlg5UgPCBnZWJva3VcIDsKK+Wkp+egsiA8IHRhaWhvdVwgOwor5pWw562JIDwgc3V1dG91XCA7CivlpbPmu50gPCBtZWRha2lcIDsKK+itpuaJiyA8IGtlaXNodVwgOwor6ZqP6KGMIDwgenVpa291XCA7CivlpoLms5UgPCBueW9ob3VcIDsKK+S4gOWGhiA8IGljaGllblwgOwor5LiA5YW3IDwgaWNoaWd1XCA7CivmlbDlr4TlsYsgPCBzdWtpeWFcIDsKK+e3qOiRlyA8IGhlbmNob1wgOwor54ib54ibIDwgcmFucmFuXCA7CivmmpblnLAgPCBkYW5jaGlcIDsKK+e2uOiogCA8IHJpbmdlblwgOwor5pS+6IOGIDwgaG91dGFuXCA7CivoqJPoq60gPCBrdW4nJ3l1XCA7Civoqq3noLQgPCBkb2t1aGFcIDsKK+S4ieWAjSA8IHNhbmJhaVwgOwor54yb5YuHIDwgbW91eXV1XCA7CivpoZ7kvosgPCBydWlyZWlcIDsKK+iok+iqoSA8IGt1bmthaVwgOwor6Ky55pu4IDwga2luc2hvXCA7CivmmI7mnJcgPCBtZWlyb3VcIDsKK+WkqeebgyA8IHRlbnBhaVwgOwor5pq05YuVIDwgYm91ZG91XCA7CivloKTpmLIgPCB0ZWlib3VcIDsKK+iojuirliA8IHRvdXJvblwgOwor5pel5q+OIDwgaGlnb3RvXCA7CivkuI3ku7IgPCBmdW5ha2FcIDsKK+Wkp+eavyA8IG9vemFyYVwgOwor5LiJ5L2TIDwgc2FudGFpXCA7CivlkIzmhI/nvqkgPCBkb3VpZ2lcIDsKK+aWh+ebsiA8IG1vbm1vdVwgOwor54ax57eaIDwgbmVzc2VuXCA7Civnhp/ogIMgPCBqdWtrb3VcIDsKK+eMn+WFtyA8IHJ5b3VndVwgOwor5aKT6KGoIDwgYm9oeW91XCA7CivmmLXmh4cgPCBqaWtrb25cIDsKK+Wls+a1gSA8IGpvcnl1dVwgOwor6ZyK55+lIDwgcmVpY2hpXCA7CivkuIrku6MgPCBqb3VkYWlcIDsKK+Wlh+eJuSA8IGtpZG9rdVwgOwor576O5L+XIDwgYml6b2t1XCA7CivmmJPmlq0gPCBla2lkYW5cIDsKK+S4jeS5mSA8IGZ1aXRzdVwgOwor572q5ZCNIDwgemFpbWVpXCA7CivmmI/mmI8gPCBrb25rb25cIDsKK+mbkee6giA8IHphc3NhblwgOwor5aaZ5qGIIDwgbXlvdWFuXCA7CivlpbPms6IgPCBtZW5hbWlcIDsKK+mbouexjSA8IHJpc2VraVwgOwor5piO5patIDwgbWVpZGFuXCA7CivmlaznpLwgPCBrZWlyZWlcIDsKK+mbt+elniA8IHJhaWppblwgOwor6Kq/55CGIDwgY2hvdXJpXCA7Civmlq3nhLYgPCBkYW56ZW5cIDsKK+aYjuaVjyA8IG1laWJpblwgOwor54mI5qipIDwgaGFua2VuXCA7Civng4jpoqggPCByZXBwdXVcIDsKK+S4h+S4hyA8IG1hbm1hblwgOwor6KiA6KuWIDwgZ2Vucm9uXCA7CivpmbjooYwgPCByaWtrb3VcIDsKK+Wkp+eUnyA8IGRhaXNlaVwgOwor6ZuA576FIDwgamFrdXJhXCA7CivkuIHkuqUgPCB0ZWlnYWlcIDsKK+itsOW4rSA8IGdpc2VraVwgOwor576O5LqLIDwgbWlnb3RvXCA7Civlp5Hmga8gPCBrb3Nva3VcIDsKK+e5geebmyA8IGhhbmpvdVwgOwor5LiA5Lq6IDwgaGl0b3JpXCA7CivmlL7nuKYgPCBob3VqdXVcIDsKK+irlueCuSA8IHJvbnRlblwgOwor6Kmp57eoIDwgc2hpaGVuXCA7Civml6Xmp5ggPCBoaXNhbWFcIDsKK+mZquimsyA8IGJhaWthblwgOwor5LiA5LqMIDwgaWNoaW5pXCA7CivntKDpppYgPCBzb2t1YmlcIDsKK+eIm+a8qyA8IHJhbm1hblwgOwor54m55o6qIDwgdG9rdXNvXCA7Civoqabnt7QgPCBzaGlyZW5cIDsKK+iogOiosyA8IGlpd2FrZVwgOwor5Z+56aSKIDwgYmFpeW91XCA7CivoqIDoqIAgPCBnZW5nZW5cIDsKK+e3j+iPnCA8IHNvdXphaVwgOwor5aSa55eFIDwgdGFieW91XCA7CivmkqTpgIAgPCB0ZXR0YWlcIDsKK+aUuee3qCA8IGthaWhlblwgOwor54Sh6LODIDwgbXVjaGluXCA7Civpm4Tnt6ggPCB5dXVoZW5cIDsKK+e4gee1hCA8IGVuZ3VtaVwgOwor54m55oqAIDwgdG9rdWdpXCA7CivmlZnnpZYgPCBreW91c29cIDsKK+eJqeaQjSA8IGJ1c3NvblwgOwor6KaB6aCFIDwgeW91a291XCA7CivnvbDkv7ggPCBiYXBwb3VcIDsKK+WnieW8nyA8IHNoaW1haVwgOwor6Zui56SBIDwgcmlzaG91XCA7Civpn7Pln58gPCBvbicnaWtpXCA7CivloLHpgZMgPCBob3Vkb3VcIDsKK+aXreaaiSA8IGt5b2traVwgOwor57W26LObIDwgemVzc2FuXCA7CivlpoLmnaUgPCBueW9yYWlcIDsKK+Wkp+eJqSA8IG9vbW9ub1wgOwor6Zyy5ru0IDwgcm90ZWtpXCA7CivntprooYwgPCB6b2trb3VcIDsKK+eJiOacrCA8IGhhbnBvblwgOwor5pqW5YasIDwgZGFudG91XCA7Civpm7vnlaogPCBkZW5iYW5cIDsKK+Wkp+iiiOijnyA8IG9vZ2VzYVwgOwor5pep5pmpIDwgc291YmFuXCA7CivpnIrnjaMgPCByZWlqdXVcIDsKK+e3qOe6giA8IGhlbnNhblwgOwor5paw5rS+IDwgc2hpbnBhXCA7Civpm5HnqK4gPCB6YXNzaHVcIDsKK+mbquebriA8IHl1a2ltZVwgOwor5pen5pmCIDwga3l1dWppXCA7CivoqpXnlJ8gPCB0YW5qb3VcIDsKK+aYvOWvnSA8IGhpcnVuZVwgOwor5LqL5YuZ5bGLIDwgamltdXlhXCA7Civmta7kuJbntbUgPCB1a2l5b2VcIDsKK+eJueaBtSA8IHRva2tlaVwgOwor54WZ6I2JIDwgdGFiYWtvXCA7CivnkLXnkLbmuZYgPCBiaXdha29cIDsKK+ishOacrCA8IHRvdWhvblwgOwor5pS556uEIDwga2FpemFuXCA7Civnibnlv6sgPCB0b2trYWlcIDsKK+S6i+WLmeWutiA8IGppbXVrYVwgOwor5pel5pWwIDwgaGlrYXp1XCA7Civmlq3msLQgPCBkYW5zdWlcIDsKK+WmmeaKgCA8IG15b3VnaVwgOwor5aa75bivIDwgc2FpdGFpXCA7CivlqIHllp0gPCBpa2F0c3VcIDsKK+eFjuiMtiA8IHNlbmNoYVwgOwor6Zu3542jIDwgcmFpanV1XCA7CivpnZLmoZAgPCBhb2dpcmlcIDsKK+Wkp+a9riA8IG9vc2hpb1wgOwor6Zm26Iq4IDwgdG91Z2VpXCA7Civml5fml6UgPCBoYXRhYmlcIDsKK+mdkuafsyA8IGFveWFnaVwgOwor6Kit572uIDwgc2V0Y2hpXCA7CivnianmgKcgPCBidXNzZWlcIDsKK+aal+S4rSA8IGFuY2h1dVwgOwor5pi85aScIDwgY2h1dXlhXCA7CivoqIDokYkgPCBrb3RvYmFcIDsKK+e0oemMmCA8IGJvdXN1aVwgOwor5aSW54GvIDwgZ2FpdG91XCA7Civln7zpioAgPCBzYWlnaW5cIDsKK+S4jeWPr+mBvyA8IGZ1a2FoaVwgOwor6ZaT6bSoIDwgYWlnYW1vXCA7CivpnKfmsLcgPCBtdWh5b3VcIDsKK+aYpeWtoyA8IHNodW5raVwgOwor5aKX572uIDwgem91Y2hpXCA7Civntr7nvoUgPCByeW91cmFcIDsKK+eLguWPpSA8IGt5b3VrdVwgOwor6Zmz6IWQIDwgY2hpbnB1XCA7CivloLHorJ0gPCBob3VzaGFcIDsKK+eFqee0ryA8IGhhbnJ1aVwgOwor54mH5omLIDwga2F0YXRlXCA7CivniYfmiLggPCBrYXRhZG9cIDsKK+aWkeawlyA8IG11cmFraVwgOwor5pWm54WMIDwgdG9ua291XCA7CivlpKfms6IgPCBvb25hbWlcIDsKK+aWreahiCA8IGRhbicnYW5cIDsKK+WkqeawtCA8IHRlbnN1aVwgOwor5aSW5rmvIDwgc290b3l1XCA7CivmmablhqUgPCBrYWltZWlcIDsKK+aVmeeItiA8IGt5b3VmdVwgOwor57SU6YqAIDwganVuZ2luXCA7CivlpKfmsLQgPCBvb21penVcIDsKK+Wklua4ryA8IGdhaWtvdVwgOwor6Kqs5rOVIDwgc2VwcG91XCA7CivopovovrwgPCBtaWtvbWlcIDsKK+ioquexsyA8IGhvdWJlaVwgOwor57Sw6LqrIDwgaG9zb21pXCA7CivmlofmsJEgPCBidW5taW5cIDsKK+eCremJsSA8IHRhbmtvdVwgOwor5pen5oGpIDwga3l1dW9uXCA7CivntJTph5EgPCBqdW5raW5cIDsKK+S6i+WLmeWZqCA8IGppbXVraVwgOwor5aSc5rOKIDwgeWFoYWt1XCA7CivmlrnmlrkgPCBob3Vib3VcIDsKK+e2v+ezuCA8IG1lbnNoaVwgOwor5peo5b+1IDwgc2hpbmVuXCA7Civmk43oiLkgPCBzb3VzZW5cIDsKK+e2vuezuCA8IGF5YWl0b1wgOwor6Zu75rqQIDwgZGVuZ2VuXCA7CivlpoTlv7UgPCBtb3VuZW5cIDsKK+ilv+mBiiA8IHNlaXl1dVwgOwor5aWu5oimIDwgZnVuc2VuXCA7Civngq3phbggPCB0YW5zYW5cIDsKK+e0jemHkSA8IG5vdWtpblwgOwor57SN6YeHIDwgbm91c2FpXCA7CivoprPopqcgPCBrYW5yYW5cIDsKK+iruOaJiyA8IG1vcm90ZVwgOwor6Z+z5L+hIDwgb25zaGluXCA7Civnsr7prYIgPCBzZWlrb25cIDsKK+WknOavjiA8IHlvZ290b1wgOwor5pWj5ryrIDwgc2FubWFuXCA7Civnt6nnm64gPCB5dXJ1bWVcIDsKK+eJh+W9sSA8IGhlbicnZWlcIDsKK+WmhOW8gSA8IGJvdWJlblwgOwor6ZyK5q6/IDwgcmVpZGVuXCA7Civml6LlvpcgPCBraXRva3VcIDsKK+irluaXqCA8IHJvbnNoaVwgOwor57K+6auEIDwgc2VpenVpXCA7CivlvqHmtJLokL0gPCBvc2hhcmVcIDsKK+S6i+WLmeWToSA8IGppbXVpblwgOwor5Z+06LyqIDwgaGFuaXdhXCA7Civoq5bmlq0gPCByb25kYW5cIDsKK+irluaWhyA8IHJvbmJ1blwgOwor54WZ566hIDwga2lzZXJ1XCA7Civoqr/mn7sgPCBjaG91c2FcIDsKK+akjeacqOWxiyA8IHVla2l5YVwgOwor54Sh6IetIDwgbXVzaHV1XCA7CivpnbHluK8gPCBqaW50YWlcIDsKK+aYjuWkpyA8IG1laWRhaVwgOwor6ZaJ6aSoIDwgaGVpa2FuXCA7Civoq7jmgqogPCBzaG9ha3VcIDsKK+WjgeeUuyA8IGhla2lnYVwgOwor57Sg6LazIDwgc3Vhc2hpXCA7CivmlbXmrakgPCB0ZWtpZnVcIDsKK+mbhOeKrCA8IG9zdWludVwgOwor5aKX56iOIDwgem91emVpXCA7Civlor7nlLAgPCBrb25kZW5cIDsKK+aUueeJiCA8IGthaWhhblwgOwor54i25b6hIDwgdGV0ZWdvXCA7CivkuI3lj6/oqqQgPCBmdWthZ29cIDsKK+mWoumWgCA8IGthbm1vblwgOwor5aSn5qC5IDwgZGFpa29uXCA7Civpm5HngoogPCB6b3VzdWlcIDsKK+WknOalrSA8IHlhZ3lvdVwgOwor57Sw6KuWIDwgc2Fpcm9uXCA7CivniaflpKsgPCBib2t1ZnVcIDsKK+aWh+ahiCA8IGJ1bicnYW5cIDsKK+aXheaDhSA8IHJ5b2pvdVwgOwor5aSJ5q27IDwgaGVuc2hpXCA7CivlpJbmp5ggPCB0b3phbWFcIDsKK+Wkp+afhCA8IG9vZ2FyYVwgOwor5b6h6YeI6L+mIDwgb3NoYWthXCA7Civoq7jlvaYgPCBzaG9nZW5cIDsKK+mWk+mamyA8IG1hZ2l3YVwgOwor54Sh6IGKIDwgYnVyeW91XCA7Civplbfpp4YgPCBjaG91a3VcIDsKK+mbsuavjSA8IGtpcmFyYVwgOwor5pep5a+dIDwgaGF5YW5lXCA7Civopb/osqIgPCBzYWlnb25cIDsKK+aVmea0viA8IGt5b3VoYVwgOwor5pON57imIDwgc291anV1XCA7CivlpKfmnKwgPCB0YWlob25cIDsKK+Wkp+acmyA8IHRhaW1vdVwgOwor6KuW5ougIDwgcm9ua3lvXCA7Civml6XlsIQgPCBuaXNzaGFcIDsKK+WlieaLnSA8IGhvdWhhaVwgOwor54mn5aC0IDwgbWFraWJhXCA7CivoqIjnrpcgPCBrZWlzYW5cIDsKK+mZpOexjSA8IGpvc2VraVwgOwor57O46YGKIDwgaXRveXV1XCA7Civpm6PmsrsgPCBuYW5jaGlcIDsKK+WiqOeXlSA8IGJva2tvblwgOwor5Y2w5a2X5qmfIDwgaW5qaWtpXCA7Civoq5bmiKYgPCByb25zZW5cIDsKK+WkqeaYjiA8IHRlbm1laVwgOwor5aKT55+zIDwgYm9zZWtpXCA7CivloqjnlLsgPCBib2t1Z2FcIDsKK+mbo+awkSA8IG5hbm1pblwgOwor57Sg6KqtIDwgc29kb2t1XCA7CivopoHoq6YgPCB5b3V0ZWlcIDsKK+WkqeaWhyA8IHRlbm1vblwgOwor5aSn5pa5IDwgb29rYXRhXCA7Civnoavpu4Tms4kgPCBpb3VzZW5cIDsKK+mWi+mWgCA8IGthaW1vblwgOwor57e054KtIDwgcmVudGFuXCA7CivplonploAgPCBoZWltb25cIDsKK+Wil+ebiiA8IHpvdWVraVwgOwor5aSW5p2lIDwgZ2FpcmFpXCA7Civpl4fot68gPCB5YW1pamlcIDsKK+WkluadkCA8IGdhaXphaVwgOwor6ZaA6ZmiIDwgbW9uJydpblwgOwor57SN6LGGIDwgbmF0dG91XCA7CivploDpmZAgPCBtb25nZW5cIDsKK+aWueW9oiA8IGhvdWtlaVwgOwor5paH5pS/IDwgYnVuc2VpXCA7CivlpbPlrpggPCBueW9rYW5cIDsKK+eEoee1piA8IG11a3l1dVwgOwor5pep5aSnIDwgc291ZGFpXCA7CivopoHopqcgPCB5b3VyYW5cIDsKK+mbm+autSA8IHN1dWRhblwgOwor6Z2i5a2QIDwgbWVudHN1XCA7CivmlbDmnpogPCBzdXVtYWlcIDsKK+mbqOaoiyA8IGFtYWRvaVwgOwor6ZuE5ri+IDwgeXV1a29uXCA7CivopIfpn7MgPCBmdWt1b25cIDsKK+aYjuWQmyA8IG1laWt1blwgOwor6Zm655u4IDwga2Vuc291XCA7Civnibnli5kgPCB0b2t1bXVcIDsKK+eJqeWTgSA8IGJ1cHBpblwgOwor5aKX55SjIDwgem91c2FuXCA7CivmkI3ph5EgPCBzb25raW5cIDsKK+mVt+mWkSA8IG5vZG9rYVwgOwor6Kqe5pePIDwgZ296b2t1XCA7CivlgYnkuIjlpKsgPCBpam91ZnVcIDsKK+irluW8gSA8IHJvbmJlblwgOwor5pel5aCxIDwgbmlwcG91XCA7CivploDpkZEgPCBtb25rYW5cIDsKK+WgleiQvSA8IGRhcmFrdVwgOwor6Zai6YCjIDwga2FucmVuXCA7Civnha7niakgPCBuaW1vbm9cIDsKK+aXheWvnSA8IHRhYmluZVwgOwor6Zmz55quIDwgY2hpbnBpXCA7CivluIPmtbfoi5QgPCBmdW5vcmlcIDsKK+e0q+iYrSA8IHNoaXJhblwgOwor6ZaL6YqAIDwga2FpZ2luXCA7CivnhKHnrZYgPCBtdXNha3VcIDsKK+ispuWSsyA8IGtlaWdhaVwgOwor5aal5Y2UIDwgZGFreW91XCA7CivlpKfmioAgPCBvb3dhemFcIDsKK+eyvumMrCA8IHNlaXJlblwgOwor5pen5ZyfIDwga3l1dWRvXCA7Civpm7vmlq0gPCBkZW5kYW5cIDsKK+mcsOW8viA8IHNhbmRhblwgOwor5pWZ5qGIIDwga3lvdWFuXCA7CivlppnlkbMgPCBteW91bWlcIDsKK+aYjuWInSA8IG1laXNob1wgOwor57We572qIDwga291emFpXCA7CivmmKjku4ogPCBzYWtrb25cIDsKK+e1qOe3niA8IGp1dXRhblwgOwor5pa55a+4IDwgaG91c3VuXCA7CivlpInmlLkgPCBoZW5rYWlcIDsKK+mbtuaVlyA8IHJlaWhhaVwgOwor5aWl5aaZIDwgb3VteW91XCA7CivmlaPmlocgPCBzYW5idW5cIDsKK+aVo+aVoyA8IHNhbnphblwgOwor5Zyf6b6NIDwgbW9ndXJhXCA7CivnuKbmlq0gPCBqdXVkYW5cIDsKK+ismuWPtyA8IHNoaWdvdVwgOwor5aWz5ZuaIDwgam9zaHV1XCA7Civmlq3lrpogPCBkYW50ZWlcIDsKK+irluWumiA8IHJvbnRlaVwgOwor5aG155WMIDwgamlua2FpXCA7Civoq5blrZ8gPCByb25tb3VcIDsKK+aXpeWSjCA8IGhpeW9yaVwgOwor57ay54q2IDwgbW91am91XCA7CivlpKflvaIgPCBvb2d5b3VcIDsKK+aFsOWuieS8miA8IGlhbmthaVwgOwor6Zuj5paHIDwgbmFuYnVuXCA7CivmiqvpnLLnm64gPCBoaXJvbWVcIDsKK+exs+mjryA8IGJlaWhhblwgOwor57ay54mIIDwgYW1paGFuXCA7Civlo7LmlocgPCBiYWlidW5cIDsKK+aXpeWQkSA8IGhpbmF0YVwgOwor57K+6L6yIDwgc2Vpbm91XCA7CivmlrDlqaYgPCBzaGlucHVcIDsKK+mYsuepuiA8IGJvdWt1dVwgOwor5aSp5bqVIDwgdGVudGVpXCA7CivlpKrlubMgPCB0YWloZWlcIDsKK+WlpeWcsCA8IG9rdWNoaVwgOwor5aSn5bqXIDwgb29kYW5hXCA7Civpm5Hmm7ggPCB6YXNzaG9cIDsKK+mWo+itsCA8IGtha3VnaVwgOwor54Gw6LKdIDwgaGFpZ2FpXCA7CivlpKfluYUgPCBvb2hhYmFcIDsKK+Wkp+W4qyA8IGRhaXNoaVwgOwor57WQ57SNIDwgeXVpbm91XCA7Civml4Xlm6MgPCByeW9kYW5cIDsKK+e5geW/mSA8IGhhbmJvdVwgOwor5Zyw6auqIDwgamlnYW1pXCA7CivpmLLnpqYgPCBib3VneW9cIDsKK+e0sOiDniA8IHNhaWJvdVwgOwor5pel5YukIDwgbmlra2luXCA7CivngrnojLYgPCB0ZW5jaGFcIDsKK+mVt+mAlCA8IGNob3V0b1wgOwor5LqI5YKZ6aasIDwgeW9iaWJhXCA7CivmsJfljJblmaggPCBraWtha2lcIDsKK+aRmOiKvSA8IHRla2lnYVwgOwor6ZuE5p2+IDwgb21hdHN1XCA7Civml6nlh7ogPCBoYXlhZGVcIDsKK+Wlh+WmmSA8IGtpbXlvdVwgOwor5aSW5b6EIDwgZ2Fpa2VpXCA7CivlpJblvoEgPCBnYWlzZWlcIDsKK+aOpemgrSA8IHNldHRvdVwgOwor6KiT54K5IDwga3VudGVuXCA7CivmrabogIXntbUgPCBtdXNoYWVcIDsKK+irluWkliA8IHJvbmdhaVwgOwor5aSc5bqXIDwgeW9taXNlXCA7CivntYPnt5ogPCBnZW5zZW5cIDsKK+irvuWQpiA8IGRha3VoaVwgOwor54Sh55ebIDwgbXV0c3V1XCA7CivnhKHnl4UgPCBtdWJ5b3VcIDsKK+Wjn+aWrSA8IHJvdWRhblwgOwor54mH5YiDIDwga2F0YWhhXCA7CivmlbXlvbEgPCB0ZWtpZWlcIDsKK+e1ueebriA8IGtpbnVtZVwgOwor54Wu5rGBIDwgbmlqaXJ1XCA7Civoo77ph44gPCBzdXNvbm9cIDsKK+WknOW4giA8IHlvaWNoaVwgOwor5aSn5bGxIDwgdGFpemFuXCA7Civoq7jlkJsgPCBzaG9rdW5cIDsKK+mcnOWusyA8IHNvdWdhaVwgOwor5pS55piTIDwga2FpZWtpXCA7Civlo67mjJkgPCBzb3VreW9cIDsKK+e0heiRiSA8IG1vbWlqaVwgOwor5paO5a6uIDwgc2FpZ3V1XCA7Civpm6PmiYAgPCBuYW5zaG9cIDsKK+WlquWPliA8IGRhc3NodVwgOwor5aSq5a6IIDwgdGFpc2h1XCA7CivmlonlsIQgPCBzZWlzaGFcIDsKK+WkieW9oiA8IGhlbmtlaVwgOwor57Sg6IKMIDwgc3VoYWRhXCA7CivlpKrlrZcgPCBmdXRvamlcIDsKK+WkqeWtqyA8IHRlbnNvblwgOwor6ZuR5pCNIDwgemFzc29uXCA7Civml6XlgpggPCBoaWdhc2FcIDsKK+mdqeWFtyA8IGthd2FndVwgOwor6Z2i5YmNIDwgbWVuemVuXCA7CivpnIrls7AgPCByZWlob3VcIDsKK+mat+abuCA8IHJlaXNob1wgOwor6KeS55quIDwga2FrdWhpXCA7CivmlbDlubQgPCBzdXVuZW5cIDsKK+WlruWKsSA8IGZ1bnJlaVwgOwor6Z2e5YqbIDwgaGlyaWtpXCA7Civoq63lkYogPCB5dWtva3VcIDsKK+miqOWcn+iomCA8IGZ1ZG9raVwgOwor5paH5a6YIDwgYnVua2FuXCA7Civml6zkvZkgPCBqdW4nJ3lvXCA7CivntIXojLYgPCBrb3VjaGFcIDsKK+e0sOe3uyA8IHNhaWNoaVwgOwor5Z+L6JS1IDwgbWFpem91XCA7CivpnIrlsbEgPCByZWl6YW5cIDsKK+ijj+mWgCA8IHVyYW1vblwgOwor6Zu75belIDwgZGVua291XCA7CivmlpzloZQgPCBzaGF0b3VcIDsKK+WknOWvkiA8IHlvemFtdVwgOwor5aGp54WuIDwgc2hpb25pXCA7Civoq7jliIMgPCBtb3JvaGFcIDsKK+Wfi+iRrCA8IG1haXNvdVwgOwor57a/5q+bIDwgd2F0YWdlXCA7CivntZDnpL4gPCBrZXNzaGFcIDsKK+ikkuiytiA8IGhvdWhlblwgOwor57Sv57SvIDwgcnVpcnVpXCA7CivlnLDpnIogPCBjaGlyZWlcIDsKK+WknOWtpiA8IHlhZ2FrdVwgOwor5pel5LyKIDwgbmljaGlpXCA7Civop5LnlYwgPCBrYWtrYWlcIDsKK+aVj+aEnyA8IGJpbmthblwgOwor5pW35bGFIDwgc2hpa2lpXCA7Civngq3ogrogPCB0YW5oYWlcIDsKK+eFmeavkiA8IGVuZG9rdVwgOwor54ax5oSPIDwgbmV0c3VpXCA7CivlnLDpmo4gPCBjaGlrYWlcIDsKK+aXheWIuCA8IHJ5b2tlblwgOwor6Zqj5p2RIDwgcmluc29uXCA7CivpnaLlgJIgPCBtZW5kb3VcIDsKK+aXpeS4rSA8IGhpbmFrYVwgOwor5aWR5ZCIIDwga2VpZ291XCA7CivpnIrlqpIgPCByZWliYWlcIDsKK+exs+mKrSA8IGJlaXNlblwgOwor6Kqe5a2mIDwgZ29nYWt1XCA7CivoqpjlsI4gPCB5dXVkb3VcIDsKK+mbkeaEnyA8IHpha2thblwgOwor5paO5aC0IDwgc2Fpam91XCA7CivlpbPkvZMgPCBueW90YWlcIDsKK+mdouS9kyA8IG1lbnRlaVwgOwor5aWJ5ZGIIDwgaG91dGVpXCA7CivmkoPnoLQgPCBnZWtpaGFcIDsKK+mdouS8miA8IG1lbmthaVwgOwor5aOy5bqXIDwgYmFpdGVuXCA7Civoq5blj6IgPCByb25zb3VcIDsKK+mbu+WtkCA8IGRlbnNoaVwgOwor54i15L2NIDwgc2hha3VpXCA7CivlpbPkurogPCBueW9uaW5cIDsKK+e1tueJiCA8IHplcHBhblwgOwor6Zuq5bSpIDwgbmFkYXJlXCA7CivntJvntJsgPCBmdW5wdW5cIDsKK+WjruW5tCA8IHNvdW5lblwgOwor5aSn5Z6LIDwgb29nYXRhXCA7CivntJTntr8gPCBqdW5tZW5cIDsKK+Whqea5ryA8IHNoaW95dVwgOwor5aWz5LitIDwgam9jaHV1XCA7CivploDooZsgPCBtb24nJ2VpXCA7CivlnoLoqJMgPCBzdWlrdW5cIDsKK+mYsueKryA8IGJvdWhhblwgOwor54ax5bivIDwgbmV0dGFpXCA7CivnhJrngasgPCB0YWtpYmlcIDsKK+aUueaCqiA8IGthaWFrdVwgOwor57SU57O7IDwganVua2VpXCA7CivlpaXkvJ0gPCBva3VkZW5cIDsKK+Whqea1tCA8IGVueW9rdVwgOwor6KuH5ZCIIDwgZGFuZ291XCA7CivpnIrln58gPCByZWlpa2lcIDsKK+irluWIpCA8IHJvbnBhblwgOwor54Wu5pa5IDwgbmlrYXRhXCA7CivnhormiYsgPCBrdW1hZGVcIDsKK+e0lOeyiyA8IGp1bnN1aVwgOwor6Kqt5ZuzIDwgZG9rdXp1XCA7Civngavok4sgPCBoaWJ1dGFcIDsKK+iqv+WSjCA8IGNob3V3YVwgOwor6Kq/5ZGzIDwgY2hvdW1pXCA7Civml4XkurogPCByeW9qaW5cIDsKK+e3j+aVsCA8IHNvdXN1dVwgOwor6ZuR5be+IDwgem91a2luXCA7CivpmoXmnKggPCBzdW1pa2lcIDsKK+imqueWjiA8IHNoaW5zb1wgOwor5pa55L6/IDwgaG91YmVuXCA7Civpm6Llrq4gPCByaWt5dXVcIDsKK+e1oueImyA8IGtlbnJhblwgOwor5b6h5rKz56ulIDwgb2thcHBhXCA7CivlpJblnLAgPCBnYWljaGlcIDsKK+WhqeawlyA8IHNoaW9rZVwgOwor5o6l6L+RIDwgc2Vra2luXCA7Civpm4TlvIEgPCB5dXViZW5cIDsKK+exs+i7jSA8IGJlaWd1blwgOwor5pS55buDIDwga2FpaGFpXCA7Civpmo7mlbAgPCBrYWlzdXVcIDsKK+WcsOmHkSA8IGppZ2FuZVwgOwor6Kq/5Y2wIDwgY2hvdWluXCA7CivnsaTpgYsgPCBrdWppdW5cIDsKK+a/gemfsyA8IGRha3VvblwgOwor5aSn5ZKMIDwgeWFtYXRvXCA7Civoq4fliKQgPCBkYW5wYW5cIDsKK+mVt+ibhyA8IGNob3VkYVwgOwor5pa55LuKIDwgaG91a29uXCA7CivntIXnsokgPCBiZW5pa29cIDsKK+WcsOmFkiA8IGppemFrZVwgOwor6Zq75b2xIDwgc2VraWVpXCA7CivlnJ/pjYsgPCBkb25hYmVcIDsKK+eBsOiJsiA8IGhhaWlyb1wgOwor5aSp5Y+wIDwgdGVuZGFpXCA7CivlpKflkJsgPCB0YWlrdW5cIDsKK+mZsOaguCA8IGlua2FrdVwgOwor57Sw55uuIDwgaG9zb21lXCA7Civmj5DopoEgPCB0ZWl5b3VcIDsKK+eBq+iKsSA8IGhpYmFuYVwgOwor6ZuR5bGFIDwgemFra3lvXCA7Civln4vnt5ogPCBtYWlzZW5cIDsKK+aVsOWbniA8IHN1dWthaVwgOwor5aWV5LiWIDwgZWtpc2VpXCA7CivpvaYgPCBoYWd1a2lcIDsKK+Wkp+WNiiA8IHRhaWhhblwgOwor6byIIDwgc3VwcG9uXCA7CivopJDol7sgPCBrYXNzb3VcIDsKK+m7nCA8IGNodXRzdVwgOwor54Sh5q+SIDwgbXVkb2t1XCA7CivlpKfljJkgPCBvb3NhamlcIDsKK+e1tua1tyA8IHpla2thaVwgOwor6ZuE5bOwIDwgeXV1aG91XCA7CivntI3nqI4gPCBub3V6ZWlcIDsKK+Wcn+mHnCA8IGRvZ2FtYVwgOwor5aSn5YuiIDwgdGFpemVpXCA7Civnt5LmiKYgPCBjaG9zZW5cIDsKK+m6kyA8IGZ1bW90b1wgOwor5aSn5YuHIDwgdGFpeXV1XCA7Civoo7Poo74gPCBtb3N1c29cIDsKK+mZpOaguCA8IGpva2FrdVwgOwor6Kej5q+SIDwgZ2Vkb2t1XCA7CivpmbDmmqYgPCBpbnJla2lcIDsKK+eEoeassiA8IG11eW9rdVwgOwor6Kqj5ZGKIDwgYnVrb2t1XCA7CivlpKfliIYgPCBkYWlidW5cIDsKK+Wkp+WIgCA8IGRhaXRvdVwgOwor6ZuR5amaIDwgemFra29uXCA7CivmkI3ogJcgPCBzb25tb3VcIDsKK+Wcp+i/qyA8IGFwcGFrdVwgOwor5aSn5YehIDwgb295b3NvXCA7Civpmo/miYAgPCB6dWlzaG9cIDsKK+mbheWuoiA8IGdha2FrdVwgOwor5aSp5YW1IDwgdGVucGVpXCA7CivptaUgPCBrYWtlc3VcIDsKK+maoOW/jSA8IGluJyduaW5cIDsKK+mZpOacjSA8IGpvZnVrdVwgOwor6bSsIDwgdWd1aXN1XCA7CivlpKflhaggPCB0YWl6ZW5cIDsKK+m0jiA8IGthbW9tZVwgOwor6Zu75ZG9IDwgZGVubWVpXCA7Civoo5zoqLsgPCBob2NodXVcIDsKK+aRuOeJjCA8IG1vdXBhaVwgOwor5oSb54WZ5a62IDwgYWllbmthXCA7Civpg6jlsYvnnYAgPCBoZXlhZ2lcIDsKK+mciuWJoyA8IHJlaWtlblwgOwor5pWw5ZCNIDwgc3V1bWVpXCA7Civooajpn7MgPCBoeW91b25cIDsKK+S6iOWCmeiyuyA8IHlvYmloaVwgOwor5aSW5YukIDwgZ2Fpa2luXCA7Civpmo/mhJ8gPCB6dWlrYW5cIDsKK+mxuCA8IHN1enVraVwgOwor54Kv55y8IDwga2VpZ2FuXCA7CivpsbAgPCBzaGlpcmFcIDsKK+WknOWHqiA8IHlvbmFnaVwgOwor6ZqP5oOzIDwgenVpc291XCA7CivpsLkgPCBrYXRzdW9cIDsKK+aOqOirliA8IHN1aXJvblwgOwor6bCvIDwgaXdhc2hpXCA7CivlpInlkI0gPCBoZW5tZWlcIDsKK+e1puayuSA8IGt5dXV5dVwgOwor6bCaIDwgaGFyYWthXCA7CivntYLnhIkgPCBzaHV1ZW5cIDsKK+mwhiA8IHNhd2FyYVwgOwor54ax5Z6LIDwgbmVra2VpXCA7Civpm7flkIwgPCByYWlkb3VcIDsKK+mcp+S4rSA8IG11Y2h1dVwgOwor6a+xIDwgc2hhY2hpXCA7Civpr7AgPCBuYW1henVcIDsKK+mvqCA8IGt1amlyYVwgOwor6a+jIDwgc3VydW1lXCA7CivmlbDljYMgPCBzdXVzZW5cIDsKK+aVsOWNgSA8IHN1dWp1dVwgOwor6KaB55SoIDwgeW91eW91XCA7CivntprmmKAgPCB6b2t1ZWlcIDsKK+WftOeUnyA8IGhhbnl1dVwgOwor5aSW5Ye6IDwgc290b2RlXCA7Civpm7LlkZEgPCB3YW50YW5cIDsKK+muqiA8IG1hZ3Vyb1wgOwor57WQ5rueIDwga2V0dGFpXCA7CivprpYgPCBrYWppa2FcIDsKK+eCieerryA8IHJvYmF0YVwgOwor6ZuR5aCxIDwgemFwcG91XCA7CivntK/niq8gPCBydWloYW5cIDsKK+aOqOioiCA8IHN1aWtlaVwgOwor54Wn5b+cIDwgc2hvdW91XCA7CivnuKvlkIggPCBob3Vnb3VcIDsKK+Wbm+maoyA8IHNoaXJpblwgOwor5aSW5YW4IDwgZ2FpdGVuXCA7CivngJjpgY7lmaggPCByb2tha2lcIDsKK+Wbm+mahSA8IHlvc3VtaVwgOwor5aCF54miIDwga2Vucm91XCA7CivngavnuIQgPCBoaW5hd2FcIDsKK+WkieWLlSA8IGhlbmRvdVwgOwor6ZqP5b6TIDwgenVpanV1XCA7Civpm4TlpKcgPCB5dXVkYWlcIDsKK+aWh+S+iyA8IGJ1bnJlaVwgOwor6Zuj5ZWPIDwgbmFubW9uXCA7CivmlZnllIYgPCBreW91c2FcIDsKK+aOouioqiA8IHRhbmJvdVwgOwor5o276LuiIDwgbmVudGVuXCA7CivmlZnlk6EgPCBreW91aW5cIDsKK+Wbs+mMsiA8IHp1cm9rdVwgOwor5aSn5LujIDwgZGFpZGFpXCA7Civoo5zliqnlk6EgPCBob2pvaW5cIDsKK+ijj+ilnyA8IHVyYWVyaVwgOwor5Zyf6LazIDwgZG9zb2t1XCA7CivlpJblgrUgPCBnYWlzYWlcIDsKK+aOiOizniA8IGp1c2hvdVwgOwor6KaL54mpIDwgbWltb25vXCA7CivlpKnkuLwgPCB0ZW5kb25cIDsKK+Wkp+S5sSA8IHRhaXJhblwgOwor54Wn5bqmIDwgc2hvdWRvXCA7CivmlofkurogPCBidW5qaW5cIDsKK+Wkp+S5lyA8IGRhaWpvdVwgOwor5aOy5ZOBIDwgYmFpaGluXCA7CivlpKnkuI4gPCB0ZW4nJ3lvXCA7CivlnLDorKEgPCBqaXV0YWlcIDsKK+ijveiMtiA8IHNlaWNoYVwgOwor5aSc5Ly9IDwgeW90b2dpXCA7CivlpJrkvZwgPCB0YXNha3VcIDsKK+mVt+iAhSA8IGNob3VqYVwgOwor5aOy5ZCNIDwgYmFpbWVpXCA7CivloYrmoLkgPCBrYWlrb25cIDsKK+eEmuabuCA8IGZ1bnNob1wgOwor5pGC55SfIDwgc2Vzc2VpXCA7CivplqLnqbogPCBrYW5rdXVcIDsKK+eEoeaYjiA8IG11bXlvdVwgOwor5q+U5LiY5bC8IDwgYmlrdW5pXCA7Civlm73pgYsgPCBrb2t1dW5cIDsKK+mWiee1jCA8IGhlaWtlaVwgOwor6KGA6aSFIDwga2VwcGVpXCA7Civpm7vlgZwgPCBkZW50ZWlcIDsKK+aVsOWApCA8IHN1dWNoaVwgOwor6Zai56iOIDwga2FuemVpXCA7CivmlbDlgI0gPCBzdXViYWlcIDsKK+WknOS4rSA8IHlvbmFrYVwgOwor5pWj5YW1IDwgc2FucGVpXCA7CivlpJbkurogPCBnYWlqaW5cIDsKK+Wjh+WgtCA8IGRhbmpvdVwgOwor5o2o6LqrIDwgc3V0ZW1pXCA7CivloZfmlpkgPCB0b3J5b3VcIDsKK+e0oOeEvCA8IHN1eWFraVwgOwor54WZ5bmVIDwgZW5tYWt1XCA7CivlpJbkubEgPCBnYWlyYW5cIDsKK+mbkeWTgSA8IHphcHBpblwgOwor6Kej5pWjIDwga2Fpc2FuXCA7Civmk7HluqcgPCBrYWt1emFcIDsKK+eyvueyviA8IHNlaXplaVwgOwor57W25pmvIDwgemVra2VpXCA7CivoqLHlrrkgPCBreW95b3VcIDsKK+WcsOijgSA8IGNoaXNhaVwgOwor57K+57KJIDwgc2VpZnVuXCA7CivpnpAgPCBrb2hhemVcIDsKK+aNlemAuCA8IGhvaXRzdVwgOwor5pWR5YqpIDwga3l1dWpvXCA7Civnsr7nsbMgPCBzZWltYWlcIDsKK+aUueWWhCA8IGthaXplblwgOwor5Zyn6KaaIDwgYWtrYWt1XCA7CivmlbDkurogPCBzdXVuaW5cIDsKK+mZsOW+syA8IGludG9rdVwgOwor54Gr56iuIDwgaGlkYW5lXCA7CivpnJ4gPCBrYXN1bWlcIDsKK+mcmSA8IG1pem9yZVwgOwor6Kit5a6aIDwgc2V0dGVpXCA7CivoqanlkJ8gPCBzaGlnaW5cIDsKK+mbmyA8IGhpeW9rb1wgOwor57Sv5ribIDwgcnVpZ2VuXCA7CivntJTnhLYgPCBqdW56ZW5cIDsKK+aVsOS4hyA8IHN1dW1hblwgOwor5aSJ5LmxIDwgaGVucmFuXCA7Civms6LmraLloLQgPCBoYXRvYmFcIDsKK+mZquW+kyA8IGJhaWp1dVwgOwor6KGj6YmiIDwgaWhhdHN1XCA7CivooqvopoYgPCBoaWZ1a3VcIDsKK+eCr+eCryA8IGtlaWtlaVwgOwor54Kt54GrIDwgc3VtaWJpXCA7Civlm73osrsgPCBrb2t1aGlcIDsKK+WcsOiZqyA8IG1pbWl6dVwgOwor5Zue6YGKIDwga2FpeXV1XCA7CivoprPmoZwgPCBrYW4nJ291XCA7CivmmJPli5XluqYgPCBpZG91ZG9cIDsKK+WeguevhCA8IHN1aWhhblwgOwor6Zuj5Lu2IDwgbmFua2VuXCA7CivoqJPlsI4gPCBrdW5kb3VcIDsKK+mRoiA8IHlhc3VyaVwgOwor57W15Zuz6Z2iIDwgZXp1bWVuXCA7CivmlZfkuqEgPCBoYWlib3VcIDsKK+WjsuS6uiA8IGJhaW5pblwgOwor5r2u6ZaTIDwgc2hpb21hXCA7Civoo7jlqabnlLsgPCByYWZ1Z2FcIDsKK+mbouS5syA8IHJpbnl1dVwgOwor6KOP6Iq4IDwgdXJhZ2VpXCA7Civlm57ou6IgPCBrYWl0ZW5cIDsKK+WgtOaVsCA8IGJha2F6dVwgOwor54Gr55q/IDwgaGl6YXJhXCA7CivmrankuIDmrakgPCBob2lwcG9cIDsKK+Wil+WkpyA8IHpvdWRhaVwgOwor57iB5YWIIDwgZW5zYWtpXCA7CivkuInljYHot68gPCBtaXNvamlcIDsKK+WjsuS4iiA8IHVyaWFnZVwgOwor6ZuR5L+zIDwgemFwcGFpXCA7Civlm73oqp4gPCBrb2t1Z29cIDsKK+mMuiA8IGthemFyaVwgOwor57WM5pu4IDwga2Vpc2hvXCA7CivmlLnlhYMgPCBrYWlnZW5cIDsKK+aPm+eulyA8IGthbnphblwgOwor57KX57KXIDwgYXJhYXJhXCA7CivngorniKggPCBzdWlzYW5cIDsKK+a/gOiqniA8IGdla2lnb1wgOwor57Sh5q+bIDwgYm91bW91XCA7CivnhKHlv4MgPCBtdXNoaW5cIDsKK+e0q+aqgCA8IHNoaXRhblwgOwor57iB5YG0IDwgZW5nYXdhXCA7CivkuI3mspnmsbAgPCBidXNhdGFcIDsKK+mKjSA8IGNoaXRzdVwgOwor6KOc57+SIDwgaG9zaHV1XCA7CivpmaPlsYsgPCBqaW4nJ3lhXCA7Civpm5Hku7YgPCB6YWtrZW5cIDsKK+mJiyA8IGthbicnbmFcIDsKK+S4jeatu+i6qyA8IGZ1amltaVwgOwor6ZuR5Lq6IDwgem91bmluXCA7Civnt7TlhbUgPCByZW5wZWlcIDsKK+Wik+WgtCA8IGhha2FiYVwgOwor6ZuF5L+XIDwgZ2F6b2t1XCA7CivphqogPCBtb3JvbWlcIDsKK+aUvuS7uyA8IGhvdW5pblwgOwor5Yqg5aWI6ZmAIDwga2FuYWRhXCA7CivmjqjogIMgPCBzdWlrb3VcIDsKK+e0lOavmyA8IGp1bm1vdVwgOwor57SF5raZIDwga291cnVpXCA7CivntKDmqLggPCBzb2Jva3VcIDsKK+WZtOmjryA8IGZ1bnBhblwgOwor57aZ5a2QIDwgbWFtYWtvXCA7CivntJTmraMgPCBqdW5zZWlcIDsKK+imh+alrSA8IGhhZ3lvdVwgOwor54Gr546JIDwgaGlkYW1hXCA7CivoqKrllY8gPCBob3Vtb25cIDsKK+mVt+ebriA8IG5hZ2FtZVwgOwor57Wx5b6hIDwgdG91Z3lvXCA7CivpgZYgPCBhcHBhcmVcIDsKK+ifu+mjnyA8IGFyaWt1aVwgOwor5pC+5rK5IDwgc2FrdXl1XCA7Civku6XpgaDmqKkgPCBpZW5rZW5cIDsKK+ihv+ijjyA8IGVyaXVyYVwgOwor6KOc57WmIDwgaG9reXV1XCA7Civmlr3ppJPprLwgPCBzZWdha2lcIDsKK+ipleS+oSA8IGh5b3VrYVwgOwor6ZaA55WqIDwgbW9uYmFuXCA7Civlm7PooaggPCB6dWh5b3VcIDsKK+i/miA8IHRvdGVtb1wgOwor57Gz57a/IDwgYmVpbWVuXCA7Civlobnlo5UgPCB6YW5nb3VcIDsKK+S4iemHjeecjCA8IG1pZWtlblwgOwor57eR5YyWIDwgcnlva2thXCA7CivpmYvlsYsgPCByb3Vva3VcIDsKK+WcsOiCjCA8IGppaGFkYVwgOwor6Ziy5by+IDwgYm91ZGFuXCA7CivlvqHmspnmsbAgPCBnb3NhdGFcIDsKK+iogOWkliA8IGdlbmdhaVwgOwor57eP5YuiIDwgc291emVpXCA7Civlm57oqJMgPCBrYWlrdW5cIDsKK+e1kOaIkCA8IGtlc3NlaVwgOwor6LuIIDwgeWFnYXRlXCA7CivntITmrL4gPCB5YWtrYW5cIDsKK+i6uyA8IHV0c3VrZVwgOwor6LquIDwgc2VnYXJlXCA7CivmkqTlu4MgPCB0ZXBwYWlcIDsKK+WboOilsiA8IGluc2h1dVwgOwor57Gz57KJIDwgYmVpZnVuXCA7CivnhanlirQgPCBoYW5yb3VcIDsKK+WiqOWIkSA8IGJva2tlaVwgOwor54Sh5a2mIDwgbXVnYWt1XCA7Civmr5vnubvlrZAgPCBrZWp1c3VcIDsKK+aPj+egtCA8IGJ5b3VoYVwgOwor5pGY5p6cIDwgdGVraWthXCA7CivpmbDlmqIgPCBmdWd1cmlcIDsKK+i4tSA8IGtha2F0b1wgOwor5LiN5ZCM5oSPIDwgZnVkb3VpXCA7Civmi7PpioMgPCBrZW5qdXVcIDsKK+evgOmFkiA8IHNlc3NodVwgOwor5Zm06ZaAIDwgZnVubW9uXCA7Civooajoo48gPCBoeW91cmlcIDsKK+maj+WIhiA8IHp1aWJ1blwgOwor57W25a++IDwgemV0dGFpXCA7Civnspfnm64gPCB6YXJhbWVcIDsKK+a8oumfsyA8IGthbicnb25cIDsKK+aMh+i8qiA8IHl1Yml3YVwgOwor57KJ56CVIDwgZnVuc2FpXCA7CivpmbDllIcgPCBpbnNoaW5cIDsKK+mao+S6uiA8IHJpbmppblwgOwor57Gz56qBIDwgbcSTdG9ydVwgOwor57Sg5pW1IDwgc3V0ZWtpXCA7CivlopfliIogPCB6b3VrYW5cIDsKK+Wil+WIhiA8IHpvdWJ1blwgOwor5r2u6LevIDwgc2hpb2ppXCA7CivooZPoqIggPCBqdWtrZWlcIDsKK+e0jeadryA8IG5vdWhhaVwgOwor6KGG6K2wIDwgc2h1dWdpXCA7CivngrnmlbAgPCB0ZW5zdXVcIDsKK+e0jeacrCA8IG5vdWhvblwgOwor5ouz6YGTIDwga29uZG91XCA7CivpmaPllrYgPCBqaW4nJ2VpXCA7CivntJnmlbAgPCBzaGlzdXVcIDsKK+e0m+aTviA8IGZ1bmpvdVwgOwor6ZaA54GvIDwgbW9udG91XCA7Civmi6Dph5EgPCBreW9raW5cIDsKK+mWgOeBqyA8IGthZG9iaVwgOwor57W25aW9IDwgemVra291XCA7CivntKDmj48gPCBzb2J5b3VcIDsKK+iisee0lyA8IGZ1a3VzYVwgOwor6ZqP5Ly0IDwgenVpaGFuXCA7Civmj5DnkLQgPCB0ZWlraW5cIDsKK+iomOWFpSA8IGtpbnl1dVwgOwor5Zyo57GzIDwgemFpYmVpXCA7Civopprmgp8gPCBrYWt1Z29cIDsKK+Wil+S/uCA8IHpvdWhvdVwgOwor5aKX5L6/IDwgem91YmluXCA7CivoqIEgPCBnb25iZW5cIDsKK+a8j+mbuyA8IHJvdWRlblwgOwor5LqI5YKZ56eRIDwgeW9iaWthXCA7CivopJDngq0gPCBrYXR0YW5cIDsKK+aOu+eXkiA8IHNvdXlvdVwgOwor54KJ5qOaIDwgcm9kYW5hXCA7CivlooPlhoUgPCBrZWlkYWlcIDsKK+aOqOefpSA8IHN1aWNoaVwgOwor54Gr5rC0IDwgaGltaXp1XCA7CivopoHmiYAgPCB5b3VzaG9cIDsKK+WcsOeojiA8IGNoaXplaVwgOwor57W55ZywIDwga2ludWppXCA7CivmsZ/miLjliY0gPCBlZG9tYWVcIDsKK+eyvua2siA8IHNlaWVraVwgOwor5o6i55+lIDwgdGFuY2hpXCA7Civlmajph48gPCBraXJ5b3VcIDsKK+igjSA8IHNhc29yaVwgOwor6ZW35rmvIDwgbmFnYXl1XCA7CivmvLjov5EgPCB6ZW5raW5cIDsKK+mZouWGhSA8IGluJyduYWlcIDsKK+WgtOWkliA8IGpvdWdhaVwgOwor5Z6C5rqWIDwgc3VpanVuXCA7CivnhKHlkYogPCBtdWtva3VcIDsKK+iok+S7pCA8IGt1bnJlaVwgOwor57Sv5bm0IDwgcnVpbmVuXCA7CivlnKfnpZ4gPCBhc3NoaW5cIDsKK+exs+eUoyA8IGJlaXNhblwgOwor57WQ5amaIDwga2Vra29uXCA7CivntI3miYAgPCBuYXNzaG9cIDsKK+ibjSA8IGhvdGFydVwgOwor5pKk5ZueIDwgdGVra2FpXCA7CivnsaDnm64gPCBrYWdvbWVcIDsKK+e0lOaEmyA8IGp1bicnYWlcIDsKK+aJi+m8uyA8IHRlYmFuYVwgOwor6ZW35rOiIDwgY2hvdWhhXCA7CivlnoLmto4gPCB6dWl6ZW5cIDsKK+e0ouW8lSA8IHNha3VpblwgOwor57SU5oOFIDwganVuam91XCA7Civntbblk4EgPCB6ZXBwaW5cIDsKK+aOoueVqiA8IHRhbmJhblwgOwor6ZaA5q2vIDwgbW9uc2hpXCA7Civmv4PntLogPCBub3Vrb25cIDsKK+e0hOaJiyA8IHlha3V0ZVwgOwor6Ja6IDwgbmF6dW5hXCA7CivoobDogJcgPCBzdWltb3VcIDsKK+ethumgrSA8IGhpdHRvdVwgOwor5o6h55SoIDwgc2FpeW91XCA7CivmjZXnuJsgPCBob2Jha3VcIDsKK+iVqCA8IHdhcmFiaVwgOwor57KJ54KtIDwgZnVudGFuXCA7CivpmarkuZcgPCBiYWlqb3VcIDsKK+iUtiA8IHNvbm9rb1wgOwor5Zyn552AIDwgYXRzdWdpXCA7CivlnqPmoLkgPCBrYWtpbmVcIDsKK+iTrCA8IHlvbW9naVwgOwor6Kej5YmWIDwga2FpYm91XCA7CivntbHlkIggPCB0b3Vnb3VcIDsKK+Wcn+efsyA8IGRvc2VraVwgOwor6JKFIDwgc3VrdW1vXCA7CivlnLDnlaogPCBjaGliYW5cIDsKK+eEmuWIkSA8IGZ1bmtlaVwgOwor57Sw5a2XIDwgaG9zb2ppXCA7CivnhKHlhJ8gPCBtdXNob3VcIDsKK+e1guWknCA8IHNodXV5YVwgOwor6KiA5LiKIDwgZ29uam91XCA7Civkv53orbfljLogPCBob2dva3VcIDsKK+mWk+acjSA8IGFpZnVrdVwgOwor5rWF6IyF55SfIDwgYXNhaml1XCA7CivnhKHlgrcgPCBtdWtpenVcIDsKK+aSpOWOuyA8IHRla2t5b1wgOwor6Iy4IDwga2lub2tvXCA7Civlm6DnuIEgPCBpbicnbmVuXCA7CivlmIbpoZggPCB0YW5nYW5cIDsKK+a+seeyiSA8IGRlbnB1blwgOwor6KaB5a6zIDwgeW91Z2FpXCA7CivntJnlsYsgPCBrYW1peWFcIDsKK+mWk+aVsCA8IG1ha2F6dVwgOwor5Zu956aBIDwga29ra2luXCA7CivmjL/ntbUgPCBzYXNoaWVcIDsKK+WcsOeNhCA8IGppZ29rdVwgOwor5Z6C5qWKIDwgc3VpeW91XCA7CivlnJ/nlKMgPCBtaXlhZ2VcIDsKK+ino+S9kyA8IGthaXRhaVwgOwor5o6l54K5IDwgc2V0dGVuXCA7Civlm73npI4gPCBrb2t1c29cIDsKK+iGoCA8IG5pa2F3YVwgOwor56uv6bqXIDwgdGFucmVpXCA7CivooYDohr8gPCBjaGl1bWlcIDsKK+ino+S7uyA8IGthaW5pblwgOwor57SZ5a2QIDwga2FtaWtvXCA7Civngq3lsaQgPCB0YW5zb3VcIDsKK+aSpOWFtSA8IHRlcHBlaVwgOwor57Sv5aKXIDwgcnVpem91XCA7CivooYzogIUgPCBneW91amFcIDsKK+eDiOWjqyA8IHJlc3NoaVwgOwor5ryr6KuHIDwgbWFuZGFuXCA7CivmiYvpp5IgPCB0ZWdvbWFcIDsKK+WgheWhgSA8IGtlbnJ1aVwgOwor5a625YW35bGLIDwga2FndXlhXCA7CivmiYvpppYgPCB0ZWt1YmlcIDsKK+Wwj+awl+WRsyA8IGtva2ltaVwgOwor54KJ5b+DIDwgcm9zaGluXCA7CivnrYbpi5IgPCBoaXBwb3VcIDsKK+WgguWggiA8IGRvdWRvdVwgOwor6Kaq5ZKMIDwgc2hpbndhXCA7CivlnoLmnKggPCB0YXJ1a2lcIDsKK+WgtOWGhSA8IGpvdW5haVwgOwor5oyJ6IW5IDwgYW5wdWt1XCA7CivlnLDngrkgPCBjaGl0ZW5cIDsKK+mXh+WxiyA8IHlhbWl5YVwgOwor57W25LiWIDwgemVzc2VpXCA7CivntYTlkIggPCBrdW1pYWlcIDsKK+aJi+mggyA8IHRlZ29yb1wgOwor6KaG5ZyfIDwgZnVrdWRvXCA7Civln7nlnLAgPCBiYWljaGlcIDsKK+WbnuekvCA8IGthaXJlaVwgOwor5omA6aGYIDwgc2hvZ2FuXCA7CivntZDlhZogPCBrZXR0b3VcIDsKK+e0lOWilyA8IGp1bnpvdVwgOwor57iFIDwgb2Rvc2hpXCA7Civoo73mnZAgPCBzZWl6YWlcIDsKK+eDmeWNsCA8IHJha3VpblwgOwor5omL6ZqbIDwgdGVnaXdhXCA7CivmiYvpmpkgPCB0ZXN1a2lcIDsKK+imquWIhiA8IG95YWJ1blwgOwor562J6L66IDwgdG91aGVuXCA7CivngrnlnKggPCB0ZW56YWlcIDsKK+e1puS4jiA8IGt5dXV5b1wgOwor54Kt5aG1IDwgdGFuamluXCA7CivnspfmnI0gPCBzb2Z1a3VcIDsKK+Wfn+WkliA8IGlraWdhaVwgOwor57Sw5ZCbIDwgc2Fpa3VuXCA7CivlpKnompXns7ggPCB0ZWd1c3VcIDsKK+ezkiA8IGhvc2hpaVwgOwor5ouZ6JGXIDwgc2V0Y2hvXCA7CivmiYvplbcgPCB0ZW5hZ2FcIDsKK+mXh+WknCA8IHlhbWl5b1wgOwor5Zu9546LIDwga29rdW91XCA7CivnsonmnKwgPCBmdW5wb25cIDsKK+Wcj+eCuSA8IGtlbnRlblwgOwor54Gr5bqKIDwgaGlkb2tvXCA7CivooYDnrqEgPCBrZWtrYW5cIDsKK+e1jOS8nSA8IGtlaWRlblwgOwor6KGo55quIDwgaHlvdWhpXCA7CivnrIIgPCB1dHN1Ym9cIDsKK+aOkuawtCA8IGhhaXN1aVwgOwor5Zu954i2IDwga29rdWZ1XCA7CivntLDliIYgPCBzYWlidW5cIDsKK+eriCA8IGthbWFkb1wgOwor5oyB57aaIDwgaml6b2t1XCA7Civmj6HmiYsgPCBha3VzaHVcIDsKK+aJi+mNiyA8IHRlbmFiZVwgOwor56uc6aasIDwgcnl1dW1lXCA7Civnqq7pvKAgPCBreXV1c29cIDsKK+WfjuWhgSA8IGpvdXJ1aVwgOwor5ruR6LuKIDwga2Fzc2hhXCA7Civnq6XpoZQgPCBkb3VnYW5cIDsKK+enpCA8IGhha2FyaVwgOwor6ZaA5byfIDwgbW9udGVpXCA7CivmiKbpm7IgPCBzZW4nJ3VuXCA7CivnpoogPCBtaXNvZ2lcIDsKK+aJi+mJpCA8IHRla2FnaVwgOwor5rm+6aCtIDwgd2FudG91XCA7CivntI3lk4EgPCBub3VoaW5cIDsKK+aQjeWusyA8IHNvbmdhaVwgOwor57Gz5p2QIDwgYmVpemFpXCA7CivnlbDmlofljJYgPCBpYnVua2FcIDsKK+a6gOmdoiA8IG1hbm1lblwgOwor56uc6aCtIDwgcnl1dXp1XCA7Civllqvpo68gPCBraXBwYW5cIDsKK+e0ouWFtyA8IHNha3VndVwgOwor6KOP5p2/IDwgdXJhaXRhXCA7CivmiYvphYwgPCB0ZWpha3VcIDsKK+aLmeiAhSA8IHNlc3NoYVwgOwor56CmIDwgdG9yaWRlXCA7CivplbfluqcgPCBjaG91emFcIDsKK+mWieWxsSA8IGhlaXphblwgOwor5Zyw5qScIDwgY2hpa2VuXCA7CivplovlsIEgPCBrYWlmdXVcIDsKK+eCreWKtCA8IHRhbnJvdVwgOwor57SU5YiGIDwganVuYnVuXCA7Civlnabmh5AgPCB0YW5rYWlcIDsKK+a6gOmWiyA8IG1hbmthaVwgOwor57Sv5LmXIDwgcnVpam91XCA7Civmjqjmlq0gPCBzdWlkYW5cIDsKK+aJueiplSA8IGhpaHlvdVwgOwor5o6I5qWtIDwganVneW91XCA7CivkvY3nm7jlt64gPCBpc291c2FcIDsKK+e0r+S4liA8IHJ1aXNlaVwgOwor6KGA55u4IDwga2Vzc291XCA7CivopIfluqcgPCBmdWt1emFcIDsKK+a/g+a3oSA8IG5vdXRhblwgOwor5omL6Lu9IDwgdGVnYXJ1XCA7CivlnKjmoKEgPCB6YWlrb3VcIDsKK+ikpeWppiA8IGpva3VmdVwgOwor6ZW35bGLIDwgbmFnYXlhXCA7CivooYDnl7AgPCBrZXR0YW5cIDsKK+mWi+WniyA8IGthaXNoaVwgOwor5Z+f5YaFIDwgaWtpbmFpXCA7Civplbflr78gPCBjaG91anVcIDsKK+WcqOadpSA8IHphaXJhaVwgOwor6KOB5patIDwgc2FpZGFuXCA7Civnk7wgPCBzYXJha2VcIDsKK+aKnOiQgyA8IGJhc3N1aVwgOwor57Sb5LqJIDwgZnVuc291XCA7CivmiYvotrMgPCB0ZWFzaGlcIDsKK+Wcp+acjSA8IGFwcHVrdVwgOwor57Sb5LmxIDwgZnVucmFuXCA7CivmvbDnmI0gPCBrYWl5b3VcIDsKK+aOqOaMmSA8IHN1aWt5b1wgOwor5Zu95q+NIDwga29rdWJvXCA7CivnspLluqYgPCByeXV1ZG9cIDsKK+WcsOaWhyA8IGNoaW1vblwgOwor6JaU6JaH5ZySIDwgYmFyYWVuXCA7CivmuLjprZogPCB5dXVneW9cIDsKK+Wcn+acqCA8IGRvYm9rdVwgOwor57Gz5oeHIDwgYmVpa29uXCA7CivplqPlk6EgPCBrYWt1aW5cIDsKK+mWgOWkliA8IG1vbmdhaVwgOwor5o265p+TIDwgbmFzc2VuXCA7Civln47lhbUgPCBqb3VoZWlcIDsKK+a8geiIuSA8IGd5b3NlblwgOwor6YGO5rih5pyfIDwga2F0b2tpXCA7Civpl4flgKQgPCB5YW1pbmVcIDsKK+eLuCA8IHRhbnVraVwgOwor5oyB55eFIDwgamlieW91XCA7CivplbflpbMgPCBjaG91am9cIDsKK+WbveaoqSA8IGtva2tlblwgOwor57SK5LmxIDwgYnVucmFuXCA7CivlnJ/mlrkgPCBkb2thdGFcIDsKK+aJk+iouiA8IGRhc2hpblwgOwor5Zyn5pC+IDwgYXNzYWt1XCA7CivmvJTnubkgPCBlbicnZWtpXCA7Civoo5zlvLcgPCBob2t5b3VcIDsKK+mWgOWcsCA8IG1vbmNoaVwgOwor56uL6YyQIDwgcmlzc3VpXCA7CivlloTpmqMgPCB6ZW5yaW5cIDsKK+aIpui7iiA8IHNlbnNoYVwgOwor5omL6KixIDwgdGVtb3RvXCA7CivoobDmrosgPCBzdWl6YW5cIDsKK+eyieWxiyA8IGtvbmF5YVwgOwor5omA6KuWIDwgc2hvcm9uXCA7Civlm6PmrJIgPCBkYW5yYW5cIDsKK+a6gOi8iSA8IG1hbnNhaVwgOwor5bGF5aC05omAIDwgaWJhc2hvXCA7CivmuoDou4ogPCBtYW5zaGFcIDsKK+WcqOaJgCA8IHphaXNob1wgOwor57Gz5bidIDwgYmVpdGVpXCA7Civllp3ph4cgPCBrYXNzYWlcIDsKK+ibrumiqCA8IGJhbnB1dVwgOwor5oeH6aGYIDwga29uZ2FuXCA7CivnrYboh7QgPCBoaXRjaGlcIDsKK+Wbs+afhCA8IHp1Z2FyYVwgOwor5oiK6L6wIDwgYm9zaGluXCA7Civlm73mmK8gPCBrb2t1emVcIDsKK+eznuS+vyA8IGZ1bmJlblwgOwor6YGV5ZKM5oSfIDwgaXdha2FuXCA7Civmva7ngKwgPCBzaGlvc2VcIDsKK+erpeiyniA8IGRvdXRlaVwgOwor56qB6aKoIDwgdG9wcHV1XCA7CivngavlhYggPCBob3Nha2lcIDsKK+exs+WxiyA8IGtvbWV5YVwgOwor54Gr5YWDIDwgaGltb3RvXCA7CivlnLDlvaIgPCBjaGlrZWlcIDsKK+a4miA8IG5hZ2lzYVwgOwor57K+5YukIDwgc2Vpa2luXCA7Civmipzns7ggPCBiYXNzaGlcIDsKK+eptOmmrCA8IGFuYXVtYVwgOwor54Gr5YK3IDwgeWFrZWRvXCA7Civmu4Xoj4wgPCBtZWtraW5cIDsKK+eUn+iVjum6piA8IGtpc29iYVwgOwor562G6ICVIDwgaGlra291XCA7Civpjq7orbcgPCBjaGluZ29cIDsKK+ibrumatyA8IGJhbnJlaVwgOwor5raOIDwgeW9kYXJlXCA7CivnrYbogIUgPCBoaXNzaGFcIDsKK+WcqOW9uSA8IHphaWVraVwgOwor5Zyw5bmzIDwgY2hpaGVpXCA7CivmjqjlrpogPCBzdWl0ZWlcIDsKK+WVj+mhjCA8IG1vbmRhaVwgOwor6ZaA5YmNIDwgbW9uemVuXCA7Civlm5vmoYEgPCB5b2tldGFcIDsKK+ihjOauiiA8IGd5b3Vqb1wgOwor56m66Z+zIDwgc29yYW5lXCA7CivlnKflu7YgPCBhdHN1ZW5cIDsKK+mWgOWHuiA8IGthZG9kZVwgOwor5o6h5a+4IDwgc2Fpc3VuXCA7Civmibbnv7wgPCBmdXlva3VcIDsKK+axgCA8IG1pZ2l3YVwgOwor5rC1IDwgc2FuenVpXCA7CivnsaDlsYUgPCByb3VreW9cIDsKK+aHuOi7jSA8IGtlbmd1blwgOwor56m66Zu7IDwga3V1ZGVuXCA7Civoo73lk4EgPCBzZWloaW5cIDsKK+epuumamyA8IGt1dXNhaVwgOwor6Y2b6YysIDwgdGFucmVuXCA7Civlm73mioAgPCBrb2t1Z2lcIDsKK+mMsumfsyA8IHJva3VvblwgOwor5omA6JS1IDwgc2hvem91XCA7CivplovkvJogPCBrYWlrYWlcIDsKK+a9n+a5liA8IHNla2lrb1wgOwor5LiN5rCX5ZGzIDwgYnVraW1pXCA7CivllonovKogPCBub2Rvd2FcIDsKK+a4i+mdoiA8IGp1dW1lblwgOwor6ZaJ5LyaIDwgaGVpa2FpXCA7CivnrYbntJkgPCBoaXNzaGlcIDsKK+epuumWqCA8IGt1dWtlaVwgOwor5ryU55uuIDwgZW5tb2t1XCA7CivnqbrplpMgPCBrdXVrYW5cIDsKK+aotSA8IGtpa29yaVwgOwor5qiuIDwgaG9rdXNvXCA7CivmiY3oirggPCBzYWlnZWlcIDsKK+ikh+WIqSA8IGZ1a3VyaVwgOwor6KOP5aOwIDwgdXJhZ29lXCA7Civmu57ntI0gPCB0YWlub3VcIDsKK+aLoOeCuSA8IGt5b3RlblwgOwor5omL6Iq4IDwgc2h1Z2VpXCA7CivmuKzpiZsgPCBzb2t1ZW5cIDsKK+WcqOWumCA8IHphaWthblwgOwor5Zm054WZIDwgZnVuJydlblwgOwor5qWUIDwga3VzYWJpXCA7CivmvILnoIIgPCBoeW91c2FcIDsKK+mWgOS6uiA8IG1vbmppblwgOwor5qSqIDwga3VudWdpXCA7CivnrYbnrpcgPCBoaXNzYW5cIDsKK+WbveaBqSA8IGtva3VvblwgOwor5omN6IWVIDwgc2Fpd2FuXCA7Civlm7DmhoogPCBrb25wYWlcIDsKK+evgOawtCA8IHNlc3N1aVwgOwor562G56uvIDwgaGl0dGFuXCA7CivmiYvohZUgPCBzaHV3YW5cIDsKK+a9nOawtCA8IHNlbnN1aVwgOwor5r+A5oCSIDwgZ2VraWRvXCA7CivmiY3og70gPCBzYWlub3VcIDsKK+mNm+mAoCA8IHRhbnpvdVwgOwor5qCeIDwgc2hpb3JpXCA7CivlnLDlpIkgPCBjaGloZW5cIDsKK+ihgOagkyA8IGtlc3NlblwgOwor5omL6IG3IDwgdGVqb2t1XCA7CivnqpPovrogPCBtYWRvYmVcIDsKK+ihk+aVsCA8IGp1c3N1dVwgOwor5p2OIDwgc3Vtb21vXCA7Civmv4HluqYgPCBkYWt1ZG9cIDsKK+WcqOWkqSA8IHphaXRlblwgOwor5Zyo5aSWIDwgemFpZ2FpXCA7CivooYDmm7ggPCBrZXNzaG9cIDsKK+WcsOWfnyA8IGNoaWlraVwgOwor5pqmIDwga295b21pXCA7CivmuJvphY0gPCBnZW5wYWlcIDsKK+epjembsiA8IHNla2l1blwgOwor5pi0IDwgc3ViYXJ1XCA7CivmuoDokpkgPCBtYW5tb3VcIDsKK+W+oeats+aariA8IG9zZWlib1wgOwor5ry45ribIDwgemVuZ2VuXCA7Civmu5HnqbogPCBrYWtrdXVcIDsKK+a3semWkyA8IGZ1a2FtYVwgOwor6KGA5paRIDwga2VwcGFuXCA7CivnqJrpsKQgPCB3YXJhc2FcIDsKK+a4m+mAgCA8IGdlbnRhaVwgOwor56uv6ImHIDwgdGFudGVpXCA7CivmjqXlkLsgPCBzZXBwdW5cIDsKK+aLmOazpSA8IGtvdWRlaVwgOwor562L55uuIDwgc3VqaW1lXCA7CivnqJrpro4gPCBjaGlheXVcIDsKK+S6iOWCmeWToSA8IHlvYmlpblwgOwor6Jyl6Jy0IDwgdG9rYWdlXCA7Civmi53mrr8gPCBoYWlkZW5cIDsKK+eomumtmiA8IGNoaWd5b1wgOwor5pig55S75YyWIDwgZWlnYWthXCA7CivlmbTmsLQgPCBmdW5zdWlcIDsKK+aJi+e0mSA8IHRlZ2FtaVwgOwor56+G5pu4IDwgdGVuc2hvXCA7CivnqK7poZ4gPCBzaHVydWlcIDsKK+a4hemFkiA8IHNlaXNodVwgOwor57KJ5L2TIDwgZnVudGFpXCA7CivllYbpgYsgPCBzaG91dW5cIDsKK+epuui7oiA8IGt1dXRlblwgOwor5qyn5Y2w6KqeIDwgb3VpbmdvXCA7CivlnYfliIYgPCBraW5idW5cIDsKK+a7heengSA8IG1lc3NoaVwgOwor56m66LuNIDwga3V1Z3VuXCA7Civnqbrou4ogPCBrdXVzaGFcIDsKK+eyi+S6uiA8IHN1aWppblwgOwor5Zuz5qGI5a62IDwgenVhbmthXCA7CivmiYvnsaAgPCB0ZWthZ29cIDsKK+a6gOiFlCA8IG1hbmtvdVwgOwor5oqr54CdIDwgaGlyZWtpXCA7CivmiYvnrrEgPCB0ZWJha29cIDsKK+aJi+euoSA8IHRla3VkYVwgOwor5omL562LIDwgdGVzdWppXCA7CivmiYvnrYggPCB0ZWhhenVcIDsKK+aMmeaJiyA8IGt5b3NodVwgOwor5omWIDwgaGFtZXJ1XCA7CivnqoHosqsgPCB0b2trYW5cIDsKK+eruee4gSA8IHRha2VlblwgOwor5o6S5Y21IDwgaGFpcmFuXCA7Civmua/oirEgPCB5dWJhbmFcIDsKK+aHh+iriyA8IGtvbnNlaVwgOwor5oeH6KuHIDwga29uZGFuXCA7CivmjajloLQgPCBzdXRlYmFcIDsKK+a5r+iIuSA8IHl1YnVuZVwgOwor6KGG5oSaIDwgc2h1dWd1XCA7CivmhpYgPCBuYW1hamlcIDsKK+a3semDqCA8IHNoaW5idVwgOwor5oi457GNIDwga29zZWtpXCA7Civnr4Dmk40gPCBzZXNzb3VcIDsKK+iiq+WRiiA8IGhpa29rdVwgOwor5ruF55u4IDwgbWVzc291XCA7Civnq6/nt5ogPCB0YW5zZW5cIDsKK+err+e3kiA8IHRhbmNob1wgOwor5Zyo5YukIDwgemFpa2luXCA7CivmvZTmlo4gPCBrZXNzYWlcIDsKK+Wcp+WLnSA8IGFzc2hvdVwgOwor5rW36bygIDwgbmFtYWtvXCA7CivmjqXkvLQgPCBzZXBwYW5cIDsKK+erueewgCA8IHRha2VzdVwgOwor5Zyw5YWDIDwgamltb3RvXCA7CivmtrLpnaIgPCBla2ltZW5cIDsKK+ibh+i2syA8IGRhc29rdVwgOwor5Zu95ZyfIDwga29rdWRvXCA7Civlv5zmj7TmrYwgPCBvdWVua2FcIDsKK+epuuirliA8IGt1dXJvblwgOwor56m66KuHIDwga3V1ZGFuXCA7CivlvaAgPCBrdXdha3VcIDsKK+a8gea4ryA8IGd5b2tvdVwgOwor5oSb6bOlIDwgYWljaG91XCA7Civlu5MgPCBrdXJ1d2FcIDsKK+igseaDkSA8IGtvd2FrdVwgOwor5o6S5L6/IDwgaGFpYmVuXCA7Civlm73llrYgPCBrb2t1ZWlcIDsKK+W5nyA8IG5vYm9yaVwgOwor5bmJIDwgdGF6dW5hXCA7Civmi67mja4gPCBraWtreW9cIDsKK+aMr+WtkCA8IGZ1cmlrb1wgOwor5Zm45pWwIDwgdG9uc3V1XCA7CivmvIHms5UgPCBneW9ob3VcIDsKK+Wbo+WhiiA8IGRhbmthaVwgOwor5Zyw5LujIDwgY2hpZGFpXCA7Civllqvnt4ogPCBraWtraW5cIDsKK+aJi+eZliA8IHRla3VzZVwgOwor6Yyv6KqkIDwgc2FrdWdvXCA7CivnqI7plqIgPCB6ZWlrYW5cIDsKK+W1kCA8IGFyYXNoaVwgOwor5ryB5rCRIDwgZ3lvbWluXCA7CivlnKjkvY8gPCB6YWlqdXVcIDsKK+iaiumJpCA8IGthYmFyaVwgOwor5Zyo5Lu7IDwgemFpbmluXCA7Civmva7lubIgPCBzaGlvaGlcIDsKK+a1t+mtmiA8IGthaWd5b1wgOwor566X5pWwIDwgc2Fuc3V1XCA7CivlnJ/kv7UgPCBkb2h5b3VcIDsKK+Wcn+S/lyA8IGRvem9rdVwgOwor5omT55CDIDwgZGFreXV1XCA7CivpvLvpj6EgPCBiaWt5b3VcIDsKK+aOiOS5syA8IGp1bnl1dVwgOwor5rW36amiIDwgYXNoaWthXCA7CivmvKvmlocgPCBtYW5idW5cIDsKK+ihqOWcnyA8IGh5b3Vkb1wgOwor5Zu95YuZIDwga29rdW11XCA7CivmiJHnrYkgPCB3YXJlcmFcIDsKK+aMveWbniA8IGJhbmthaVwgOwor56m66JmaIDwga3V1a3lvXCA7CivlnJ/kuK0gPCBkb2NodXVcIDsKK+aJgOeUoyA8IHNob3NhblwgOwor5aufIDwgaml5dWt1XCA7Civono3ngrkgPCB5dXV0ZW5cIDsKK+a8ouaWhyA8IGthbmJ1blwgOwor5omL546JIDwgdGVkYW1hXCA7Civllqrnq6AgPCBtb3Nob3VcIDsKK+Wbo+WToSA8IGRhbicnaW5cIDsKK+aJi+eLrSA8IHRlemVtYVwgOwor5Zu95YWJIDwga29ra291XCA7CivpioDpsZcgPCBnaW5yaW5cIDsKK+mYv+iYremZgCA8IG9yYW5kYVwgOwor5ZWT6JKZIDwga2VpbW91XCA7CivooYblpJogPCBzaHV1dGFcIDsKK+eojumHkSA8IHplaWtpblwgOwor6buS6bWQIDwga3Vyb2ppXCA7CivooI/luqcgPCBrYW5pemFcIDsKK+a8geadkSA8IGd5b3NvblwgOwor5rW36ZujIDwga2FpbmFuXCA7CivnqbrojbcgPCBrYXJhbmlcIDsKK+Wbm+WNgyA8IHlvbnNlblwgOwor5Zub5Y2BIDwgeW9uanV1XCA7Civlm73kvJogPCBrb2trYWlcIDsKK+WctyA8IGFrdXRzdVwgOwor5Zuz5L2TIDwgenV1dGFpXCA7CivnrrHlsYsgPCBoYWtveWFcIDsKK+a7heazlSA8IG1lcHBvdVwgOwor5oq15oqXIDwgdGVpa291XCA7Civmv4HkuJYgPCBkYWt1c2VcIDsKK+eEoeaFiOaCsiA8IG11amloaVwgOwor6b2y6J2VIDwgdXNob2t1XCA7CivooajlhbcgPCBoeW91Z3VcIDsKK+a8geaSiCA8IGd5b3JvdVwgOwor5rib6ICXIDwgZ2VubW91XCA7CivooYzlj7ggPCBneW91amlcIDsKK+WPl+ipseWZqCA8IGp1d2FraVwgOwor56qS57SgIDwgY2hpc3NvXCA7Civpi63op5IgPCBlaWtha3VcIDsKK+enmOmMsiA8IGhpcm9rdVwgOwor57+76LuK6a2aIDwgbWFuYm91XCA7CivkuI3lh7rmnaUgPCBmdWRla2lcIDsKK+ihsOS6oSA8IHN1aWJvdVwgOwor56uc546LIDwgcnl1dW91XCA7CivlmbTlsIQgPCBmdW5zaGFcIDsKK+WQjiA8IGtpc2FraVwgOwor5ZWP572qIDwgbW9uemFpXCA7Civpm5HprZrlr50gPCB6YWtvbmVcIDsKK+WOoCA8IGthd2F5YVwgOwor6JuH6IW5IDwgamFiYXJhXCA7CivkvIrlpKrliKkgPCBpdGFyaWlcIDsKK+aJi+awtCA8IHRlbWl6dVwgOwor5oSb6YO3IDwgYWlreW91XCA7CivppYLpo6nnsokgPCB1ZG9ua29cIDsKK+aJi+avrCA8IHRlbWFyaVwgOwor5oqY5oqYIDwgb3Jpb3JpXCA7Civmua/njokgPCB5dWRhbWFcIDsKK+aMmeWLlSA8IGt5b2RvdVwgOwor5rWB6Z+zIDwgcnl1dW9uXCA7CivmiYvmrrUgPCBzaHVkYW5cIDsKK+a1gemcsiA8IHJ5dXVyb1wgOwor5oqK5o2JIDwgaGFzb2t1XCA7CivmtYHpm6IgPCByeXV1cmlcIDsKK+m8oOiziiA8IHNvem9rdVwgOwor55SY5rW36ICBIDwgYW1hZWJpXCA7CivmjJnlhbUgPCBreW9oZWlcIDsKK+a4qeeqgSA8IG9uZG9ydVwgOwor5omL5qmfIDwgdGViYXRhXCA7CivlhZwgPCBrYWJ1dG9cIDsKK+aLt+WVjyA8IGdvdW1vblwgOwor6J6N5pyXIDwgeXV1cm91XCA7CivpurrpoZ4gPCBtZW5ydWlcIDsKK+a4m+eulyA8IGdlbnphblwgOwor5omL5qWtIDwgdGV3YXphXCA7CivmvLjlopcgPCB6ZW56b3VcIDsKK+a1t+i7jSA8IGthaWd1blwgOwor5raI6LK7IDwgc2hvdWhpXCA7CivmtarpgJ8gPCBuYW5pd2FcIDsKK+mKgOmJsSA8IGdpbmtvdVwgOwor5ZWP562UIDwgbW9uZG91XCA7CivlkLnps7QgPCBzdWltZWlcIDsKK+ethuaJjSA8IGhpc3NhaVwgOwor6YqA6Yi0IDwgZ2lucmVpXCA7CivmuIXntJQgPCBzZWlqdW5cIDsKK+ethuaIpiA8IGhpc3NlblwgOwor5bCP6aas6bm/IDwga29iYWthXCA7CivomZroqpUgPCBreW90YW5cIDsKK+a3i+iPjCA8IHJpbmtpblwgOwor5rib56iOIDwgZ2VuemVpXCA7CivnrZblv5wgPCBzYWt1b3VcIDsKK+epuuepuiA8IGt1dWt1dVwgOwor56u25q2pIDwga3lvdWhvXCA7CivmuKnnn7MgPCBvbmpha3VcIDsKK+iZmuiogCA8IGt5b2dlblwgOwor5omL5p+EIDwgdGVnYXJhXCA7CivmiYvmnrcgPCB0ZWthc2VcIDsKK+a3t+e3miA8IGtvbnNlblwgOwor5LuHIDwga2F0YWtpXCA7CivnrYbmhI8gPCBoaXRzdWlcIDsKK+aJi+acrSA8IHRlZnVkYVwgOwor5b6h6I+T5a2QIDwgb2thc2hpXCA7CivnrZTlvIEgPCB0b3ViZW5cIDsKK+a0l+mhlCA8IHNlbmdhblwgOwor5rWc6L66IDwgaGFtYWJlXCA7Civpu5LpiZsgPCBrb2t1ZW5cIDsKK+a6gOawtCA8IG1hbnN1aVwgOwor5oi45qOaIDwgdG9kYW5hXCA7CivpvI7oq4cgPCB0ZWlkYW5cIDsKK+a5v+awlyA8IHNoaWtrZVwgOwor5oiR5rWBIDwgZ2FyeXV1XCA7CivmgqrpoqggPCBha3VmdXVcIDsKK+a0l+mdoiA8IHNlbm1lblwgOwor5rSL6aKoIDwgeW91ZnV1XCA7CivnqbrnoLIgPCBrdXVob3VcIDsKK+a9nOWDjyA8IHNlbnpvdVwgOwor5oSb6KqtIDwgYWlkb2t1XCA7CivmiYDmnJsgPCBzaG9tb3VcIDsKK+aJgOaciSA8IHNob3l1dVwgOwor6buS6YWSIDwga3Vyb2tpXCA7CivmiZPmkrIgPCBkYWJva3VcIDsKK+emhemWgCA8IHplbm1vblwgOwor5omT5pKDIDwgZGFnZWtpXCA7CivkuInnn6XlnJ8gPCB0YXRha2lcIDsKK+a0numWgCA8IGRvdW1vblwgOwor5ZC46aOyIDwga3l1dWluXCA7Civnqbrnm64gPCBzb3JhbWVcIDsKK+a5r+awtCA8IHl1bWl6dVwgOwor5oKq6ZyKIDwgYWt1cmVpXCA7CivmiYvmkbogPCB0ZXN1cmlcIDsKK+evgOS8miA8IHNlY2hpZVwgOwor5oiR5qyyIDwgZ2F5b2t1XCA7Civmua/mrr8gPCB5dWRvbm9cIDsKK+err+agqiA8IGhha2FidVwgOwor5rmn5rC0IDwgeXV1c3VpXCA7Civllrbmpa0gPCBlaWd5b3VcIDsKK+a4m+eUoyA8IGdlbnNhblwgOwor6LOT5L2N6KqeIDwgaGluaWdvXCA7CivmiYvmi60gPCB0ZWZ1a2lcIDsKK+WQuembqiA8IGZ1YnVraVwgOwor5rq65oSbIDwgZGVraWFpXCA7CivnrYvlrZAgPCBzdWppa29cIDsKK+mJhOmLvCA8IHRla2tvdVwgOwor5oKM6aCGIDwgdGVpanVuXCA7CivmtJfpjKwgPCBzZW5yZW5cIDsKK+a6gOadryA8IG1hbnBhaVwgOwor6Jas6aSMIDwgeWFrdWppXCA7Civnpo/pgYsgPCBmdWt1dW5cIDsKK+aRqeiOq+aesyA8IG1hbWFraVwgOwor6Jar6aKoIDwga3VucHV1XCA7CivpjLLnlLsgPCByb2t1Z2FcIDsKK+a8huWZqCA8IHNoaWtraVwgOwor5rWE6LKhIDwgam91emFpXCA7CivomY7okL0gPCBtb2dhcmlcIDsKK+a4qeeBuCA8IG9ua3l1dVwgOwor5oKq6YqtIDwgYWt1c2VuXCA7CivlkI3pppkgPCBtZWlrb3VcIDsKK+WSjOiosyA8IHdheWFrdVwgOwor5raZ6IW6IDwgcnVpc2VuXCA7CivmirHljbUgPCBob3VyYW5cIDsKK+aJleW6lSA8IGZ1dHRlaVwgOwor5rSL6YqAIDwgeW91Z2luXCA7Civpjq7mkqsgPCBjaGluYnVcIDsKK+WWquacjSA8IG1vZnVrdVwgOwor5ZKM6KaqIDwgd2FzaGluXCA7CivmiYvlvbkgPCB0ZXlha3VcIDsKK+mKgOijvSA8IGdpbnNlaVwgOwor6buZ6KixIDwgbW9ra3lvXCA7CivmiYvlvaIgPCB0ZWdhdGFcIDsKK+aJk+W4rSA8IGRhc2VraVwgOwor6Jar6Zm2IDwga3VudG91XCA7CivmiYvlvJUgPCB0ZWJpa2lcIDsKK+a4vuayjCA8IGtvbnRvblwgOwor5ryU5YqHIDwgZW5nZWtpXCA7CivnpoHovLggPCBraW4nJ3l1XCA7Civmta7oloQgPCBmdWhha3VcIDsKK+WQjOmhniA8IGRvdXJ1aVwgOwor5rSL6YWSIDwgeW91c2h1XCA7CivmiYvluLMgPCB0ZWNob3VcIDsKK+aIkOaVlyA8IHNlaWJhaVwgOwor6Jma6IGeIDwga3lvYnVuXCA7CivpiI3plpMgPCBub3JvbWFcIDsKK+mHnemtmiA8IGhhcml5b1wgOwor5rOi6ZaTIDwgbmFtaW1hXCA7CivpvJPohpwgPCBrb21ha3VcIDsKK+aGq+eEtiA8IGJpbnplblwgOwor5oKq6YGTIDwgYWt1ZG91XCA7Civms6LplbcgPCBoYWNob3VcIDsKK+m8k+iFuSA8IGtvZnVrdVwgOwor5rOV6ZujIDwgaG91bmFuXCA7CivmsrjpqLAgPCBmdXR0b3VcIDsKK+esoOWtkCA8IGthc2Fnb1wgOwor5rS76KiIIDwga2Fra2VpXCA7Civmu57lnKggPCB0YWl6YWlcIDsKK+a4oea4iSA8IHRvc2hvdVwgOwor6YeR6a2aIDwga2luZ3lvXCA7CivpipjojLYgPCBtZWljaGFcIDsKK+engeiUtSA8IHNoaXpvdVwgOwor5ZGz6KaaIDwgbWlrYWt1XCA7CivpvpXnga8gPCBnYW5kb3VcIDsKK+m7tOiPjCA8IGJhaWtpblwgOwor5oqc5YmjIDwgYmFra2VuXCA7CivlloTmoLkgPCB6ZW5rb25cIDsKK+WQjemWgCA8IG1laW1vblwgOwor56m65rivIDwga3V1a291XCA7CivpjJjnirYgPCBzdWlqb3VcIDsKK+a6tuWqkiA8IHlvdWJhaVwgOwor5rK/6Z2pIDwgZW5rYWt1XCA7CivlsI/nmb7lkIggPCBzYXl1cmlcIDsKK+err+W9uSA8IGhheWFrdVwgOwor5ZGJ6LaKIDwgZ29ldHN1XCA7Civmt7fnhLYgPCBrb256ZW5cIDsKK+eti+WQiCA8IHN1amlhaVwgOwor5rib5rOVIDwgZ2VucG91XCA7CivnqbrmtJ4gPCBrdXVkb3VcIDsKK+a6kOW5syA8IGdlbnBlaVwgOwor5ZCN6ZGRIDwgbWVpa2FuXCA7Civph47pp5IgPCBub2dvbWFcIDsKK+a1ruiFqyA8IG11a3VtaVwgOwor6bq76KOPIDwgYXNhdXJhXCA7CivnqK7nl5ggPCBzaHV0b3VcIDsKK+mIjemHjSA8IGRvbmp1dVwgOwor5omA5a6aIDwgc2hvdGVpXCA7CivmtpnnrqEgPCBydWlrYW5cIDsKK+aJgOWtmCA8IHNob3pvblwgOwor5rOl6YWUIDwgZGVpc3VpXCA7CivmuJvmrrogPCBnZW5zYWlcIDsKK+a4m+autSA8IGdlbnRhblwgOwor6Y6u5bqnIDwgY2hpbnphXCA7CivlkIjpjbUgPCBhaWthZ2lcIDsKK+eri+aGsiA8IHJpa2tlblwgOwor56S86YeRIDwgcmVpa2luXCA7CivmuoDlubIgPCBtYW5rYW5cIDsKK+emveiIjiA8IGtpbnNoYVwgOwor5ZGK6KutIDwga29rdXl1XCA7CivnqbrmrIQgPCBrdXVyYW5cIDsKK+ayoemgrSA8IGJvdHRvdVwgOwor5Y+l6ZuGIDwga3VzaHV1XCA7CivmiYvloakgPCB0ZXNoaW9cIDsKK+a5v+W4gyA8IHNoaXBwdVwgOwor56uv5bGxIDwgaGF5YW1hXCA7Civnq5zluqcgPCByeXV1emFcIDsKK+mJhOijvSA8IHRlc3NlaVwgOwor5Y+X6aCYIDwganVyeW91XCA7CivmuIfmsLQgPCBrYXNzdWlcIDsKK+eDj+W4veWtkCA8IGVib3NoaVwgOwor5ZCI6YeRIDwgZ291a2luXCA7Civmt7fmt4YgPCBrb25rb3VcIDsKK+WTgeetiSA8IGhpbnRvdVwgOwor5oKq6KiAIDwgYWt1Z2VuXCA7CivllpzmgqYgPCBraWV0c3VcIDsKK+m8k+esmyA8IGtvdGVraVwgOwor6bq76JasIDwgbWF5YWt1XCA7Civnq6/lrZAgPCB0YW5zaGlcIDsKK+iZmuekvCA8IGt5b3JlaVwgOwor6J6N5ZCIIDwgeXV1Z291XCA7CivlkIzpgqYgPCBkb3Vob3VcIDsKK+aHh+abuCA8IGtvbnNob1wgOwor5rm+5bK4IDwgd2FuZ2FuXCA7CivmuoDlsbEgPCBtYW56YW5cIDsKK+aJjeWZuCA8IHNhaXRvblwgOwor56iy54axIDwgaW1vY2hpXCA7Civpjq7lroggPCBjaGluanVcIDsKK+WTgeeoriA8IGhpbnNodVwgOwor6buE6I+KIDwga2lnaWt1XCA7CivmhJrnrZYgPCBndXNha3VcIDsKK+WQhOmDqCA8IGtha3VidVwgOwor56WW54i25q+NIDwgc29mdWJvXCA7Civms6Lot68gPCBuYW1pamlcIDsKK+WPjemdoiA8IGhhbm1lblwgOwor5Y2B5YWt5aScIDwgaXpheW9pXCA7CivmiYDlnKggPCBzaG96YWlcIDsKK+aCquihgCA8IG9rZXRzdVwgOwor5oWo54S2IDwgZ2FpemVuXCA7Civnq7blo7IgPCBrZWliYWlcIDsKK+iXu+iNiSA8IG1vZ3VzYVwgOwor56e7552AIDwgaWNoYWt1XCA7CivnpZ3oqZ4gPCBub3JpdG9cIDsKK+WQjOi8qSA8IGRvdWhhaVwgOwor5oCl6aCIIDwga3l1dXN1XCA7Civnp5jnrZYgPCBoaXNha3VcIDsKK+a2iOejqCA8IHNob3VtYVwgOwor5oaO5rCXIDwgbmlrdWdlXCA7CivlkIzou4ogPCBkb3VzaGFcIDsKK+a5luW/gyA8IGtvc2hpblwgOwor56iu54GrIDwgdGFuZWJpXCA7CivmiYvlk4EgPCB0ZWppbmFcIDsKK+aIkeWutiA8IHdhZ2F5YVwgOwor56m65pu5IDwga3V1c291XCA7Civov4Llm57ot68gPCB1a2Fpcm9cIDsKK+aJjeWQjSA8IHNhaW1laVwgOwor56S+6LOTIDwgc2hhaGluXCA7CivmtrLnirYgPCBla2lqb3VcIDsKK+ilpOikuOWutiA8IGJvcm95YVwgOwor5oG16LSIIDwga2Vpem91XCA7CivnpLzos5sgPCByYWlzYW5cIDsKK+epguazoiA8IGhvbmFtaVwgOwor6Y+k5Yi7IDwgcnVrb2t1XCA7Civph5HpioAgPCBraW5naW5cIDsKK+mKgOe1jCA8IGdpbmtlaVwgOwor5ZKM57a0IDwgd2F0b2ppXCA7CivpnZLntKvomIcgPCBhb2ppc29cIDsKK+e3keWVhOacqOmzpSA8IGFvZ2VyYVwgOwor6YqA57O4IDwgZ2luc2hpXCA7Civmt6HmsLQgPCB0YW5zdWlcIDsKK+epuuaWhyA8IGt1dWJ1blwgOwor5ZCf6KmgIDwgZ2luJydlaVwgOwor6YqA57KJIDwgZ2lucHVuXCA7Civmh6blvLEgPCBkYWpha3VcIDsKK+aBreizgCA8IGt5b3VnYVwgOwor5Y216buEIDwgcmFuJydvdVwgOwor5rqA5aGBIDwgbWFucnVpXCA7Civmganos54gPCBvbnNob3VcIDsKK+awtOm7vSA8IGFtZW5ib1wgOwor5ZOA55ebIDwgYWl0c3V1XCA7Civpuqboir0gPCBiYWt1Z2FcIDsKK+WPsOi7iiA8IGRhaXNoYVwgOwor5ZOB55WqIDwgaGluYmFuXCA7CivmiYvlhpkgPCBzaHVzaGFcIDsKK+azleirliA8IGhvdXJvblwgOwor5omL5YWIIDwgdGVzYWtpXCA7CivmganorpAgPCBvbnNodXVcIDsKK+WOn+mfsyA8IGdlbicnb25cIDsKK+epuuaMuiA8IGt1dXRlaVwgOwor6YiN6KGMIDwgZG9ua291XCA7CivmiYvlgrcgPCB0ZWtpenVcIDsKK+epuuaLsyA8IGt1dWtlblwgOwor6Yed6LevIDwgc2hpbnJvXCA7CivlkIzoqJMgPCBkb3VrdW5cIDsKK+mHkei8qiA8IGthbmF3YVwgOwor5rKi6L66IDwgc2F3YWJlXCA7CivpvIjnlLIgPCBiZWtrb3VcIDsKK+epuuaJiyA8IGthcmF0ZVwgOwor56S86KOFIDwgcmVpc291XCA7CivnqbrmiYAgPCBrdXVzaG9cIDsKK+W/temhmCA8IG5lbmdhblwgOwor5ZCI6KiIIDwgZ291a2VpXCA7CivpurvnuZQgPCBhc2FvcmlcIDsKK+WRque4myA8IGp1YmFrdVwgOwor56m65oimIDwga3V1c2VuXCA7CivmhajmrY4gPCBnYWl0YW5cIDsKK+W/temgrSA8IG5lbnRvdVwgOwor56eR55m9IDwgc2VyaWZ1XCA7Civolq7omoogPCB5YWJ1a2FcIDsKK+a6gOWToSA8IG1hbicnaW5cIDsKK+WPm+i7jSA8IGhhbmd1blwgOwor6buE57KJIDwga2luYWtvXCA7Civpjpblm70gPCBzYWtva3VcIDsKK+aEgeeciSA8IHNodXViaVwgOwor6bq757WyIDwgYXNhaXRvXCA7CivmiY3kurogPCBzYWlqaW5cIDsKK+WQjOihviA8IGRvdWtpblwgOwor56uL5ZywIDwgcml0Y2hpXCA7Civpu5LnqYIgPCBrdXJvYm9cIDsKK+aDhee3kiA8IGpvdWNob1wgOwor5rKD6YeOIDwgeW9rdXlhXCA7CivmhJvnjKsgPCBhaWJ5b3VcIDsKK+mGuOmAoCA8IGpvdXpvdVwgOwor5rm+5Y+jIDwgd2Fua291XCA7CivpioPnnLwgPCBqdXVnYW5cIDsKK+eroOWPpSA8IHNob3VrdVwgOwor5oa25b+1IDwgb2t1bmVuXCA7CivmiKbliY0gPCBzZW56ZW5cIDsKK+m4nui8vyA8IHJhbicneW9cIDsKK+aGp+aGrCA8IGRvdWtlaVwgOwor5ray5rGBIDwgZWtpanV1XCA7CivmhqTmh6MgPCBmdW5tYW5cIDsKK+WPr+iqrSA8IGthZG9rdVwgOwor5oe45Z6CIDwga2Vuc3VpXCA7CivnqI7ms5UgPCB6ZWlob3VcIDsKK+WOs+mHjSA8IGdlbmp1dVwgOwor6YqA55ukIDwgZ2luYmFuXCA7Civlj4vou40gPCB5dXVndW5cIDsKK+WSjOedpiA8IHdhYm9rdVwgOwor6YqA55uDIDwgZ2lucGFpXCA7CivmhqTmhaggPCBmdW5nYWlcIDsKK+mJhOe3miA8IHRlc3NlblwgOwor6by75q+bIDwgaGFuYWdlXCA7Civlj6Poqr8gPCBrdWNob3VcIDsKK+err+WAqiA8IHRhbmdlaVwgOwor6YeR6KuHIDwga2luZGFuXCA7Civlj6ToqLsgPCBrb2NodXVcIDsKK+a1geefsyA8IHNhc3VnYVwgOwor6YmE57KJIDwgdGVwcHVuXCA7CivpuqbnsokgPCBtdWdpa29cIDsKK+a3seaJiyA8IGZ1a2FkZVwgOwor6buS55uuIDwga3Vyb21lXCA7CivmhpDmhqsgPCByZW5iaW5cIDsKK+WOn+mHjiA8IGdlbicneWFcIDsKK+WPl+irviA8IGp1ZGFrdVwgOwor5rCX6ayxIDwga2l1dHN1XCA7CivolqzoiJcgPCB5YWt1aG9cIDsKK+WQjeiRlyA8IG1laWNob1wgOwor6YmE566hIDwgdGVra2FuXCA7Civph43oqIAgPCBqdXVnb25cIDsKK+awt+mcpyA8IGh5b3VtdVwgOwor6YeR6KW0IDwga2lucmFuXCA7CivmsLTpnaIgPCBtaW5vbW9cIDsKK+emjeemjyA8IGthZnVrdVwgOwor5rC36ZuoIDwgaGlzYW1lXCA7CivpiYTnrYsgPCB0ZWtraW5cIDsKK+mFlOmhlCA8IHN1aWdhblwgOwor5ZCI6JGXIDwgZ291Y2hvXCA7Civnpr3njaMgPCBraW5qdXVcIDsKK+awtOmbtyA8IHN1aXJhaVwgOwor5Y+X6Ki7IDwganVjaHV1XCA7CivmsLTpm6MgPCBzdWluYW5cIDsKK+WQm+iHqCA8IGt1bnJpblwgOwor5Y+X6KiXIDwganV0YWt1XCA7CivmiKbkubEgPCBzZW5yYW5cIDsKK+S4jeWFt+WQiCA8IGZ1Z3VhaVwgOwor5ZWP5bGLIDwgdG9uJyd5YVwgOwor6YmE56qTIDwgdGVzc291XCA7CivmhafmlY8gPCBrZWliaW5cIDsKK+ibh+W6pyA8IGhlYml6YVwgOwor5rmv5YWDIDwgeXVtb3RvXCA7CivpvLvmooEgPCBiaXJ5b3VcIDsKK+WPjeirliA8IGhhbnJvblwgOwor5Zac5YqHIDwga2lnZWtpXCA7CivmhoLmhqQgPCB5dXVmdW5cIDsKK+aEn+a2mSA8IGthbnJ1aVwgOwor56m05bGFIDwga2Vra3lvXCA7Civnq4vlhqwgPCByaXR0b3VcIDsKK+aGguaFriA8IHl1dXJ5b1wgOwor5ZKM54usIDwgd2Fkb2t1XCA7Civph5Honb8gPCBraW5iYWVcIDsKK+awtOmWgCA8IHN1aW1vblwgOwor5ZaE5ZOJIDwgemVuemFpXCA7CivljZjpn7MgPCB0YW4nJ29uXCA7CivpiZvnmb0gPCBlbnBha3VcIDsKK+WPguisgCA8IHNhbmJvdVwgOwor5oaC5oK2IDwgeXV1bW9uXCA7CivpvLvmnKggPCBoYW5hZ2lcIDsKK+WSjOeJmyA8IHdhZ3l1dVwgOwor6JaE6JGJIDwgdXN1eW91XCA7CivllJDmiLggPCBrYXJhZG9cIDsKK+WQiOiHtCA8IGdhdGNoaVwgOwor5Y2X6Z2iIDwgbmFubWVuXCA7CivmtbfmtZwgPCBrYWloaW5cIDsKK+awkemiqCA8IG1pbnB1dVwgOwor5oKq56iOIDwgYWt1emVpXCA7CivlkLnnrqEgPCBzdWlrYW5cIDsKK+mJhOegsiA8IHRlcHBvdVwgOwor5ZCE6IeqIDwga2FrdWppXCA7CivpurvnlrkgPCBtYXNoaW5cIDsKK+WWp+S8nSA8IGtlbmRlblwgOwor6JaE6Iy2IDwgdXN1Y2hhXCA7CivljZfpmoUgPCBuYW5ndXVcIDsKK+aCquelniA8IGFrdWppblwgOwor56uL5L2TIDwgcml0dGFpXCA7CivljYrpn7MgPCBoYW4nJ29uXCA7CivljZfpmZAgPCBuYW5nZW5cIDsKK+eqgeWgpCA8IHRvdHRlaVwgOwor5Zaq5LitIDwgbW9jaHV1XCA7CivmuJvloakgPCBnZW4nJ2VuXCA7CivmuKXlnLAgPCBha3VjaGlcIDsKK+a3oeW9qSA8IHRhbnNhaVwgOwor5rW35rC0IDwga2Fpc3VpXCA7Civmta7mtYEgPCBmdXJ5dXVcIDsKK+mHkeiUtSA8IGtpbnpvdVwgOwor5oSb5qyyIDwgYWl5b2t1XCA7CivljrPoq4cgPCBnZW5kYW5cIDsKK+iWhOiJsiA8IHVzdWlyb1wgOwor56Wt56S8IDwgc2FpcmVpXCA7Civnn6XmgbXmra8gPCBjaGllYmFcIDsKK+iZmuaguSA8IGt5b2tvblwgOwor5b6u6ZyHIDwgYmlzaGluXCA7CivphanphYogPCBtZWl0ZWlcIDsKK+WQjOe9qiA8IGRvdXphaVwgOwor5rWu5rKIIDwgZnVjaGluXCA7CivmsLTpioAgPCBzdWlnaW5cIDsKK+W+oemhjCA8IGd5b2RhaVwgOwor5ZOA5qW9IDwgYWlyYWt1XCA7Civnqbrln58gPCBrdXVpa2lcIDsKK+mKgOa8oiA8IGdpbmthblwgOwor5rex5bGxIDwgbWl5YW1hXCA7Civph47okpwgPCBub2JpcnVcIDsKK+a0u+eJiCA8IGthcHBhblwgOwor5rCX6ZW3IDwga2luYWdhXCA7CivnqbrlnLAgPCBha2ljaGlcIDsKK+aEm+alvSA8IGFpZ3lvdVwgOwor6YeO6I+KIDwgbm9naWt1XCA7CivmsJHplpMgPCBtaW5rYW5cIDsKK+aCquebuCA8IGFrdXNvdVwgOwor5b6h6ZyKIDwgbWl0YW1hXCA7Civms5XntrIgPCBob3Vtb3VcIDsKK+aCsueXmyA8IGhpdHN1dVwgOwor6bqm55SwIDwgbXVnaXRhXCA7CivmsLTpg7cgPCBzdWlnb3VcIDsKK+WQiOe5iiA8IGdvdXNlblwgOwor5LiN6LW36Ki0IDwgZnVraXNvXCA7CivmhaLmgKcgPCBtYW5zZWlcIDsKK+WQkeexsyA8IGtvdWJlaVwgOwor6YqA5rOlIDwgZ2luZGVpXCA7CivomZrmlbAgPCBreW9zdXVcIDsKK+aCqueWqyA8IGFrdWVraVwgOwor5rC06L66IDwgbWl6dWJlXCA7CivnqJ/mgKcgPCBoaW5zZWlcIDsKK+mNm+WGtiA8IHRhbicneWFcIDsKK+aCqueUqCA8IGFrdXlvdVwgOwor5oSJ5qW9IDwgeXVyYWt1XCA7CivnhKHljLvmnZEgPCBtdWlzb25cIDsKK+awtOi7iiA8IHN1aXNoYVwgOwor6JmO5paRIDwgdG9yYWZ1XCA7Civlvozpm6MgPCBrb3VuYW5cIDsKK+epuuWQjSA8IGt1dW1laVwgOwor6Yym5ZywIDwga2luY2hpXCA7CivpvLvmga8gPCBiaXNva3VcIDsKK+aCqueQgyA8IGFra3l1dVwgOwor5ZCI566XIDwgZ2Fzc2FuXCA7CivmtbfmnIggPCBrdXJhZ2VcIDsKK+WUkOWtkCA8IGthcmFrb1wgOwor5rWB5rS+IDwgcnl1dWhhXCA7CivoloTntJcgPCBoYWt1c2FcIDsKK+a3t+WcqCA8IGtvbnphaVwgOwor5ZCM56qTIDwgZG91c291XCA7Civpipjmnb8gPCBtZWliYW5cIDsKK+ayuee1tSA8IGFidXJhZVwgOwor5Y2K6YeRIDwgaGFua2luXCA7Civmr5vpoK0gPCBtb3V0b3VcIDsKK+WQjOeoriA8IGRvdXNodVwgOwor6YeN572qIDwganV1emFpXCA7CivphaLosZogPCBzdWJ1dGFcIDsKK+WNg+mIniA8IHNlbmtpblwgOwor56m65YmNIDwga3V1emVuXCA7Civlv5zoq74gPCBvdWRha3VcIDsKK+a4m+WFjSA8IGdlbm1lblwgOwor5rCR6YG4IDwgbWluc2VuXCA7CivnqbrlhrcgPCBrdXVyZWlcIDsKK+aDmuawlyA8IG5vcm9rZVwgOwor5ZKM5qW9IDwgd2FyYWt1XCA7CivmgKrohZUgPCBrYWl3YW5cIDsKK+WQiOelrSA8IGdvdXNhaVwgOwor5ZWG5YuZIDwgc2hvdW11XCA7CivmgqrnhrEgPCBhbmV0c3VcIDsKK+m7hOawtCA8IGtpbWl6dVwgOwor5Y+j57W1IDwga3VjaGllXCA7CivlvqHphYwgPCBvc2hha3VcIDsKK+awl+i7vSA8IGtpZ2FydVwgOwor5p6c5qi55ZySIDwga2FqdWVuXCA7CivmtbfmkI0gPCBrYWlzb25cIDsKK+aFruWkliA8IHJ5b2dhaVwgOwor6YWS6LGqIDwgc2h1Z291XCA7CivljYrovKogPCBoYW5yaW5cIDsKK+mHkeeyiSA8IGtpbnB1blwgOwor5b2T6aeFIDwgdG91ZWtpXCA7CivlvqHpgYogPCBneW95dXVcIDsKK+azleebuCA8IGhvc3NvdVwgOwor5rex5ZGzIDwgZnVrYW1pXCA7Civljp/okZcgPCBnZW5jaG9cIDsKK+m6pua5ryA8IG11Z2l5dVwgOwor5ZCM55ufIDwgZG91bWVpXCA7CivmtKrmsLQgPCBrb3V6dWlcIDsKK+WTgOaEgSA8IGFpc2h1dVwgOwor5ZCJ55u4IDwga2lzc291XCA7CivnqbrkvLwgPCBzb3JhbmlcIDsKK+WSjOacjSA8IHdhZnVrdVwgOwor5b6h6Lui5amGIDwgb3RlbmJhXCA7CivolqznkIYgPCB5YWt1cmlcIDsKK+W+jOmHkSA8IGF0b2tpblwgOwor6bm1542yIDwgcm9rYWt1XCA7Civlkb3moLkgPCBtZWlrb25cIDsKK+mMoOWJjSA8IGpvdW1hZVwgOwor5ZCN55SjIDwgbWVpc2FuXCA7CivmhJvmga8gPCBhaXNva3VcIDsKK+azpeeKtiA8IGRlaWpvdVwgOwor5b+F6KaLIDwgaGlra2VuXCA7Civlj43nsbMgPCBoYW5iZWlcIDsKK+egtOmPoSA8IGhha3lvdVwgOwor6YeN56iOIDwganV1emVpXCA7CivphaLom7ggPCBzdWRha29cIDsKK+WPoueloCA8IGhva29yYVwgOwor5b6T6LuNIDwganV1Z3VuXCA7Civmr5vpiI4gPCBrZWJhcmlcIDsKK+mDqOmVtyA8IGJ1Y2hvdVwgOwor5oOo5pWXIDwgemFucGFpXCA7Civmgqrms5UgPCBha3Vob3VcIDsKK+WPs+ebriA8IG1pZ2ltZVwgOwor5b+F6KGwIDwgaGlzc3VpXCA7Civmra/pu5IgPCBoYWd1cm9cIDsKK+awkeirliA8IG1pbnJvblwgOwor5Y+C57GgIDwgc2Fucm91XCA7CivmgqrmsLQgPCBha3VzdWlcIDsKK+aEieaCpiA8IHl1ZXRzdVwgOwor6Yed55uuIDwgaGFyaW1lXCA7CivljJfpg6ggPCBob2t1YnVcIDsKK+aCquawlyA8IHdhcnVnaVwgOwor55+i6bGIIDwgeWF0YXJhXCA7CivnpI7nn7MgPCBzb3Nla2lcIDsKK+a1tOW+jCA8IHlva3Vnb1wgOwor5Y2T6KaLIDwgdGFra2VuXCA7Civlkb3mlbAgPCBtZWlzdXVcIDsKK+aui+mquCA8IHphbmdhaVwgOwor6aKo5ZGC5bGLIDwgZnVyb3lhXCA7Civms6Xngq0gPCBkZWl0YW5cIDsKK+WQjeeKtiA8IG1laWpvdVwgOwor6JGb6aShIDwga3V6dWFuXCA7CivmsrznlLAgPCBudW1hZGFcIDsKK+elreauvyA8IHNhaWRlblwgOwor56Cy6YeRIDwgaG91a2luXCA7Civlj6TnnYAgPCBmdXJ1Z2lcIDsKK+mKgOaJhyA8IGdpbnNlblwgOwor6YeN55+zIDwgb21vc2hpXCA7CivlvLfpn7MgPCBreW91b25cIDsKK+axmuiBtyA8IG9zaG9rdVwgOwor5re35LmxIDwga29ucmFuXCA7Civph5Hnm64gPCBrYW5lbWVcIDsKK+aEj+WRs+irliA8IGltaXJvblwgOwor56CU6ZG9IDwga2Vuc2FuXCA7CivlvLHpn7MgPCB5b3dhbmVcIDsKK+aui+mjryA8IHphbnBhblwgOwor5rC06JGsIDwgc3Vpc291XCA7CivljYroo4EgPCBoYW5zYWlcIDsKK+WUr+S4gCA8IHl1aXRzdVwgOwor54Sh6YKq5rCXIDwgbXVqYWtpXCA7CivlvqHoqJcgPCBnb3Rha3VcIDsKK+W+ruihtyA8IGJpY2h1dVwgOwor5Y2K6KG/IDwgaGFuZXJpXCA7CivomZrlpoQgPCBreW9tb3VcIDsKK+axuueulyA8IGtlc3NhblwgOwor5YyW6LqrIDwga2VzaGluXCA7CivmgaznhLYgPCB0ZW56ZW5cIDsKK+iWrOa5ryA8IHlha3V5dVwgOwor5rG956ybIDwga2l0ZWtpXCA7CivmtrzlkbMgPCByeW91bWlcIDsKK+awtOiPnCA8IG1penVuYVwgOwor5rW35bK4IDwga2FpZ2FuXCA7Civmgqrmpa0gPCBha3Vnb3VcIDsKK+mJhOadvyA8IHRlcHBhblwgOwor6JO06I+cIDwganVuc2FpXCA7CivlkKvmsLQgPCBnYW5zdWlcIDsKK+W9sei6qyA8IGthZ2VtaVwgOwor5q+b6LazIDwga2Vhc2hpXCA7Civmra/pq4QgPCBzaGl6dWlcIDsKK+iQvemmrCA8IHJha3ViYVwgOwor5Y+M55y8IDwgc291Z2FuXCA7Civlj43nnIEgPCBoYW5zZWlcIDsKK+azqOayuSA8IGNodXV5dVwgOwor6YO36LuNIDwgZ291Z3VuXCA7CivmsojnoIIgPCBjaGluc2FcIDsKK+WLp+mKgCA8IGthbmdpblwgOwor5Yy76KGTIDwgaWp1dHN1XCA7CivpoqjlkYLloLQgPCBmdXJvYmFcIDsKK+aEn+WlriA8IGthbnB1blwgOwor5raZ5ZqiIDwgcnVpbm91XCA7CivljbXog54gPCByYW5ob3VcIDsKK+mHjueQgyA8IHlha3l1dVwgOwor5ZGJ5pyNIDwgZ29mdWt1XCA7CivnpZ7mpb0gPCBrYWd1cmFcIDsKK+W/oOe+qSA8IGNodXVnaVwgOwor5rC06IWrIDwgc3Vpc2h1XCA7Civol43mn5MgPCBhaXpvbWVcIDsKK+aCquabuCA8IGFrdXNob1wgOwor5rSL5pysIDwgeW91aG9uXCA7CivlkJvmsJEgPCBrdW5taW5cIDsKK+iRiemZsCA8IGhha2FnZVwgOwor6Zi/6JiH5bGxIDwgYXNvc2FuXCA7CivmsrjngrkgPCBmdXR0ZW5cIDsKK+aBrOa3oSA8IHRlbnRhblwgOwor6buZ5bqnIDwgbW9rdXphXCA7CivmtrLliaQgPCBla2l6YWlcIDsKK+auv+i7jSA8IGRlbmd1blwgOwor5byK6aKoIDwgaGVpZnV1XCA7Civph5HniYwgPCBraW5wYWlcIDsKK+mKheWxsSA8IGRvdXphblwgOwor5rW35aSWIDwga2FpZ2FpXCA7Civpg7Xosq8gPCB5dXVjaG9cIDsKK+mHjueJmyA8IHlhZ3l1dVwgOwor5rS75oCnIDwga2Fzc2VpXCA7CivnpL7mrr8gPCBzaGFkZW5cIDsKK+mHjeeJiCA8IGp1dWhhblwgOwor5oKq5paHIDwgYWt1YnVuXCA7CivlvqHlrrboirggPCBvaWVnZWlcIDsKK+mFjeiGsyA8IGhhaXplblwgOwor6YqA5bGxIDwgZ2luemFuXCA7Civlv43ogJAgPCBuaW50YWlcIDsKK+aCquaUvyA8IGFrdXNlaVwgOwor56Wt5paHIDwgc2FpbW9uXCA7CivlkITmtL4gPCBrYWt1aGFcIDsKK+mBuumqqCA8IGlrb3RzdVwgOwor6buS5be+IDwga3Vyb2dvXCA7CivmganmsqIgPCBvbnRha3VcIDsKK+a1t+WfnyA8IGthaWlraVwgOwor5oSb5Zu9IDwgYWlrb2t1XCA7CivpiYTmi7MgPCB0ZWtrZW5cIDsKK+WQjeauiyA8IG5hZ29yaVwgOwor6Jma5ZCNIDwga3lvbWVpXCA7CivlvL7pgZMgPCBkYW5kb3VcIDsKK+awkeiKuCA8IG1pbmdlaVwgOwor5ZO65LmzIDwgaG9ueXV1XCA7Civlj7Dmub4gPCB0YWl3YW5cIDsKK+awuOe2miA8IGVpem9rdVwgOwor5q2j6Z2iIDwgbWF0b21vXCA7Civph43ngbAgPCBqdXVrYWlcIDsKK+WNsee1tSA8IGFidW5hZVwgOwor5oGl5q+bIDwgY2hpbW91XCA7CivliqnplbcgPCBqb2Nob3VcIDsKK+a2suS9kyA8IGVraXRhaVwgOwor6YiN5qC5IDwgZG9ua29uXCA7Civmg4Xlv7UgPCBqb3VuZW5cIDsKK+aui+mHkSA8IHphbmtpblwgOwor5q+s6Je7IDwgbWFyaW1vXCA7Civolqvmn5MgPCBrdW5zZW5cIDsKK+avm+ifuSA8IGtlZ2FuaVwgOwor5ZOB5ZCNIDwgaGlubWVpXCA7CivmgqrmipUgPCBha3V0b3VcIDsKK+WOn+ebpCA8IGdlbmJhblwgOwor5YuV6LyqIDwgZG91cmluXCA7CivmgqrmiY0gPCBha3VzYWlcIDsKK+ayu+awtCA8IGNoaXN1aVwgOwor6buS5a2QIDwgaG9rdXJvXCA7Civli4fpgoEgPCB5dXVtYWlcIDsKK+aCsuaEgSA8IGhpc2h1dVwgOwor5q6K6YGHIDwgc2h1Z3V1XCA7CivmgqrmhYsgPCBha3V0YWlcIDsKK+WPpOa1gSA8IGtvcnl1dVwgOwor5Y2B6IO9IDwganV1bm91XCA7CivpioDloYogPCBnaW5rYWlcIDsKK+iXu+WxkSA8IG1va3V6dVwgOwor5ZCM5qC5IDwgZG91a29uXCA7Civpu5nlpZEgPCBtb2trZWlcIDsKK+mHjea2siA8IGp1dWVraVwgOwor5q+S6Ju+IDwgZG9rdWdhXCA7Civph5Hms6UgPCBrb25kZWlcIDsKK+axoOeVlCA8IGNoaWhhblwgOwor5ZCM5p2RIDwgZG91c29uXCA7CivlkI3mnK0gPCBuYWZ1ZGFcIDsKK+WNmOe0lCA8IHRhbmp1blwgOwor5aSn6YOo5bGLIDwgb29iZXlhXCA7CivomIrlpaUgPCB1bicnbm91XCA7Civlv6vnnKAgPCBrYWltaW5cIDsKK+aCquW/tSA8IGFrdW5lblwgOwor5ZCM5pyLIDwgZG91Ym91XCA7CivlkIjmnb8gPCBnb3ViYW5cIDsKK+mHkeawlyA8IGthbmFrZVwgOwor56eY5Yy/IDwgaGl0b2t1XCA7Civnpo/lr78gPCBmdWt1anVcIDsKK+WQiOacrCA8IGdhcHBvblwgOwor6YGt6ZujIDwgc291bmFuXCA7Civph43msLQgPCBqdXVzdWlcIDsKK+awtOemvSA8IHN1aWtpblwgOwor6Jma5LydIDwga3lvZGVuXCA7CivljZfnsbMgPCBuYW5iZWlcIDsKK+m2j+e+pCA8IGtlaWd1blwgOwor5aCV6IOO5Yy7IDwgZGF0YWlpXCA7CivljZjnsKEgPCB0YW5rYW5cIDsKK+aCquW8iiA8IGFrdWhlaVwgOwor5b6p57iBIDwgZnVrdWVuXCA7Civpu73li4kgPCBiaW5iZW5cIDsKK+emheWwvCA8IHplbicnbmlcIDsKK+WQjOaWrSA8IGRvdWRhblwgOwor5Y+W5rC0IDwgc2h1c3VpXCA7CivmtYTln58gPCBqb3Vpa2lcIDsKK+mFkueojiA8IHNodXplaVwgOwor5ZCM5paHIDwgZG91YnVuXCA7Civli53oqLQgPCBzaG91c29cIDsKK+WQjOaVsCA8IGRvdXN1dVwgOwor5b6T6ICFIDwganV1c2hhXCA7CivlkIjmlrkgPCBhaWthdGFcIDsKK+WOn+eJiCA8IGdlbnBhblwgOwor6JaE5p2/IDwgdXN1aXRhXCA7CivljZfnq68gPCBuYW50YW5cIDsKK+W8t+irhyA8IGdvdWRhblwgOwor56eA5Y+lIDwgc2h1dWt1XCA7Civlj6Tmpb0gPCBrb2dha3VcIDsKK+mIjeaJjSA8IGRvbnNhaVwgOwor6Je75aGpIDwgbW9zaGlvXCA7Civlj43mr5sgPCBoYW5tb3VcIDsKK+awtOedgCA8IG1penVnaVwgOwor56KR55+zIDwgaGlzZWtpXCA7CivliqDpgJ8gPCBrYXNva3VcIDsKK+axmueJqSA8IG9idXRzdVwgOwor5Y+w5pysIDwgZGFpaG9uXCA7Civpto/ns54gPCBrZWlmdW5cIDsKK+awtOebpCA8IHN1aWJhblwgOwor5Y2D56+HIDwgc2VucGVuXCA7CivpiI3mhJ8gPCBkb25rYW5cIDsKK+avm+iEmyA8IGtlenVuZVwgOwor6bOz6LymIDwgaG91cmVuXCA7CivkuI3nlKjmhI8gPCBmdXlvdWlcIDsKK+S5heaFiOebriA8IGt1amltZVwgOwor5bu66YCgIDwga2Vuem91XCA7CivliLrprZogPCB0b2dldW9cIDsKK+mDqOiQvSA8IGJ1cmFrdVwgOwor5Y+35pWwIDwgZ291c3V1XCA7CivpioPliaMgPCBqdXVrZW5cIDsKK+WPguauvyA8IHNhbmRlblwgOwor5rC055axIDwgc3VpaG91XCA7Civlj7PmlocgPCB5dXVidW5cIDsKK+WPpOacqCA8IGtvYm9rdVwgOwor5ZCb5oGpIDwga3VuJydvblwgOwor5aSn5b6h5LujIDwgb29taXlvXCA7Civlvq7npoQgPCBiaXJva3VcIDsKK+eigeefsyA8IGdvaXNoaVwgOwor5rC055SwIDwgc3VpZGVuXCA7CivlupXprZogPCBzb2tvdW9cIDsKK+enmOS4rSA8IGhpY2h1dVwgOwor5q666I+MIDwgc2Fra2luXCA7Civpipjku5kgPCBtZWlzZW5cIDsKK+W8seihjCA8IGpha2tvdVwgOwor5ZG85ZCNIDwgeW9iaW5hXCA7CivmsbrmsLQgPCBrZXNzdWlcIDsKK+WQjOaGgiA8IGRvdXl1dVwgOwor6YqF5YOPIDwgZG91em91XCA7CivmrZPov44gPCBrYW5nZWlcIDsKK+mJhOWhlCA8IHRldHRvdVwgOwor5ZCM5oSfIDwgZG91a2FuXCA7CivmtarkurogPCByb3VuaW5cIDsKK+WJlOmZpCA8IHRla2lqb1wgOwor5rKh5pu4IDwgYm9zc2hvXCA7Civpt7nmtL4gPCB0YWthaGFcIDsKK+WJjembuyA8IHplbmRlblwgOwor5oOz5YOPIDwgc291em91XCA7Civlj5bmnZAgPCBzaHV6YWlcIDsKK+iYreS6uiA8IHJhbmppblwgOwor6I+M6aGeIDwga2lucnVpXCA7CivnpZ7lrq4gPCBqaW5ndXVcIDsKK+WNteeKtiA8IHJhbmpvdVwgOwor5oKq5aSpIDwgYWt1dGVuXCA7Civpga3pgYcgPCBzb3VndXVcIDsKK+WJiumZpCA8IHNha3Vqb1wgOwor5Y2K552hIDwgaGFuc3VpXCA7CivlkL7lprkgPCB3YWdpbW9cIDsKK+WPs+aKmCA8IHVzZXRzdVwgOwor5Y6f5rK5IDwgZ2VuJyd5dVwgOwor5q2z6KiIIDwgc2Fpa2VpXCA7CivmgKfmoLkgPCBzaG91bmVcIDsKK+iRm+iXpCA8IGthdHRvdVwgOwor5oKq5aC0IDwgd2FydWJhXCA7Civlj7PmiYsgPCBtaWdpdGVcIDsKK+WPieacqCA8IG1hdGFnaVwgOwor5q2p6Kq/IDwgaG9jaG91XCA7Civljp/msJEgPCBnZW5taW5cIDsKK+WQjeW6lyA8IG1laXRlblwgOwor5Yi46Z2iIDwga2VubWVuXCA7CivlubLpsYggPCBoaWRhcmFcIDsKK+WQiOW8gSA8IGdvdWJlblwgOwor5byB6KuWIDwgYmVucm9uXCA7CivmtYHlhIAgPCByeXV1Z2lcIDsKK+awtOeFriA8IG1penVuaVwgOwor5bqn6ZW3IDwgemFjaG91XCA7Civmr5LntKAgPCBkb2t1c29cIDsKK+W6lemdoiA8IHRlaW1lblwgOwor5b28562JIDwga2FyZXJhXCA7Civljpjmr5sgPCByaW5tb3VcIDsKK+WOu+adpSA8IGt5b3JhaVwgOwor5byB6KejIDwgYmVua2FpXCA7CivpgYvph50gPCB1bnNoaW5cIDsKK+WPpOaJiyA8IGZ1cnV0ZVwgOwor5q+b562LIDwga2VzdWppXCA7CivnpL7lsYsgPCBzaGFva3VcIDsKK+WPr+aDnCA8IGF0dGFyYVwgOwor6YGK6YeRIDwgeXV1a2luXCA7CivlkJvlrZAgPCBrdW5zaGlcIDsKK+WIqememCA8IHJpemF5YVwgOwor5oCo5pW1IDwgb250ZWtpXCA7CivmnInmhI/nvqkgPCB5dXVpZ2lcIDsKK+mHjuiWlOiWhyA8IG5vYmFyYVwgOwor5oGL5oSbIDwgcmVuJydhaVwgOwor5qyg6YWNIDwga2VwcGFpXCA7Civlkb3ku6QgPCBtZWlyZWlcIDsKK+WQjeWxsSA8IG1laXphblwgOwor55yf6bSoIDwgbWFnYW1vXCA7CivpgKPplqIgPCByZW5rYW5cIDsKK+axgOa4miA8IHRlaXNob1wgOwor5b6h55uu6KaL5b6XIDwgb21lbWllXCA7CivlkIzlsYUgPCBkb3VreW9cIDsKK+mBhemFjSA8IGNoaWhhaVwgOwor5qKF6Zuo5pyfIDwgYmFpdWtpXCA7CivmgbXlrZggPCBrZWl6b25cIDsKK+WQjOWwgSA8IGRvdWZ1dVwgOwor5Y+w5b2iIDwgZGFpa2VpXCA7CivmgYvmgYsgPCByZW5yZW5cIDsKK+mBoOi2syA8IGVuc29rdVwgOwor5YmN6YeRIDwgbWFla2luXCA7CivliaXouqsgPCBtdWtpbWlcIDsKK+awtOa6kCA8IHN1aWdlblwgOwor6YCB6aKoIDwgc291ZnV1XCA7CivpgbroqIAgPCB5dWlnb25cIDsKK+aBr+WtkCA8IG11c3Vrb1wgOwor5oKq5ZCNIDwgYWt1bWVpXCA7Civljp/moYggPCBnZW4nJ2FuXCA7CivnpZblm70gPCBzb2tva3VcIDsKK+iUteabuCA8IHpvdXNob1wgOwor5oKq5Y+LIDwgYWt1eXV1XCA7Civlub3pnIogPCB5dXVyZWlcIDsKK+aCsuWKhyA8IGhpZ2VraVwgOwor5bqn6YeRIDwgemFnYW5lXCA7Civlj43miKYgPCBoYW5zZW5cIDsKK+W6pumHjyA8IGRvcnlvdVwgOwor6YeO5b+DIDwgeWFzaGluXCA7Civli4PoiIggPCBib2trb3VcIDsKK+WMluefsyA8IGthc2VraVwgOwor56S+5aSWIDwgc2hhZ2FpXCA7Civlj6Tlu58gPCBrb2J5b3VcIDsKK+W6g+mWkyA8IGhpcm9tYVwgOwor5rC35rKzIDwgaHlvdWdhXCA7CivlubPpnaIgPCBoZWltZW5cIDsKK+WQu+WQiCA8IGZ1bmdvdVwgOwor5YiG6aGeIDwgYnVucnVpXCA7CivlvoznlJ8gPCBnb3Nob3VcIDsKK+W/q+alvSA8IGtlcmFrdVwgOwor6Jas5ZySIDwgeWFrdWVuXCA7Civmga/lpbMgPCBzb2t1am9cIDsKK+azleWkliA8IGhvdWdhaVwgOwor6YmE5YKYIDwgdGVzc2FuXCA7Civlub3plokgPCB5dXVoZWlcIDsKK+W/jeazlSA8IG5pbnBvdVwgOwor5ZCM5aSnIDwgZG91ZGFpXCA7Civlvbnnm64gPCB5YWt1bWVcIDsKK+iRl+iAhSA8IGNob3NoYVwgOwor5ZCN5aOwIDwgbWVpc2VpXCA7Civlj6Tlt6MgPCBmdXJ1c3VcIDsKK+awtOawlyA8IG1penVrZVwgOwor5bm06ZmQIDwgbmVuZ2VuXCA7CivmsqLlurUgPCB0YWt1YW5cIDsKK+avkuefoiA8IGRva3V5YVwgOwor5ZCI5aWPIDwgZ2Fzc291XCA7Civmr5vnmq4gPCBrZWdhd2FcIDsKK+WNl+a6nyA8IG5hbm1laVwgOwor55uu6by7IDwgbWVoYW5hXCA7Civpg73nnaMgPCB0b3Rva3VcIDsKK+WNl+a6gCA8IG5hbm1hblwgOwor6YGL6LODIDwgdW5jaGluXCA7Civljp/mlocgPCBnZW5idW5cIDsKK+m6puS+oSA8IGJha3VrYVwgOwor56aB5LukIDwga2lucmVpXCA7Civol6nkuLsgPCBoYW5zaHVcIDsKK+efpeiCsiA8IGNoaWlrdVwgOwor5Yq56IO9IDwga291bm91XCA7CivliIbpmpsgPCBidW56YWlcIDsKK+mBgei1sCA8IHRvbnNvdVwgOwor5ZCJ5aCxIDwga2lwcG91XCA7CivmgKDmhaIgPCB0YWltYW5cIDsKK+mAoOmFkiA8IHpvdXNodVwgOwor5YiG6ZmiIDwgYnVuJydpblwgOwor5YiG6ZmQIDwgYnVuZ2VuXCA7CivmgJ3mha4gPCBzaGlyeW9cIDsKK+WHsemiqCA8IGdhaWZ1dVwgOwor5oCo5b+1IDwgb24nJ25lblwgOwor5YyW55SfIDwga2VzaG91XCA7Civph5HlsbEgPCBraW56YW5cIDsKK+aCn+WFpSA8IGdvbnl1dVwgOwor6YC46LazIDwgaXNzb2t1XCA7CivnoKXnn7MgPCB0b2lzaGlcIDsKK+WPpOWutiA8IGZ1cnVpZVwgOwor6Jas5ZGzIDwgeWFrdW1pXCA7CivnnLzpj6EgPCBtZWdhbmVcIDsKK+ecn+mdkiA8IG1hc3Nhb1wgOwor5Y2K5ribIDwgaGFuZ2VuXCA7Civlj7flpJYgPCBnb3VnYWlcIDsKK+mBlOimsyA8IHRha2thblwgOwor5Ye66ZqbIDwgZGVnaXdhXCA7Civlj47lt64gPCBzaHV1c2FcIDsKK+axuuaEjyA8IGtldHN1aVwgOwor5bqV6L66IDwgdGVpaGVuXCA7CivlkJvlkb0gPCBrdW5tZWlcIDsKK+mHjuWuvyA8IG5vanVrdVwgOwor55+t57eoIDwgdGFucGVuXCA7CivokZvnsokgPCBrdXp1a29cIDsKK+mAmumBiyA8IHRzdXV1blwgOwor6JaE5aGpIDwgdXN1amlvXCA7CivmgqrkurogPCBha3VuaW5cIDsKK+mAo+i8iSA8IHJlbnNhaVwgOwor5Yil6YK4IDwgYmV0dGVpXCA7Civms6Llj4ogPCBoYWt5dXVcIDsKK+WOn+aLoCA8IGdlbmt5b1wgOwor5byp57SaIDwgZG9reXV1XCA7Civmr5vnjokgPCBrZWRhbWFcIDsKK+mHjOWtkCA8IHNhdG9nb1wgOwor56S+5ZG9IDwgc2hhbWVpXCA7Civmra/ogokgPCBoYW5pa3VcIDsKK+iNt+mejSA8IG5pZ3VyYVwgOwor55+z57KJIDwgaXNoaWtvXCA7CivmgqnkubEgPCBub3VyYW5cIDsKK+WOhOaXpSA8IHlha3ViaVwgOwor5Y2X5qynIDwgbmFuJydvdVwgOwor6ICz6by756eRIDwgamliaWthXCA7CivpgYropqcgPCB5dXVyYW5cIDsKK+mBruiUvSA8IHNoYWhlaVwgOwor6Jas5Yq5IDwgeWFra291XCA7CivlkI3lk4EgPCBtZWloaW5cIDsKK+ekvuWPiyA8IHNoYXl1dVwgOwor6YOh55yMIDwgZ3Vua2VuXCA7Civph43lqZogPCBqdXVrb25cIDsKK+mAgemHkSA8IHNvdWtpblwgOwor5Y6a5omLIDwgYXRzdWRlXCA7CivluZXplpMgPCBtYWt1YWlcIDsKK+W5tOmHkSA8IG5lbmtpblwgOwor5Y+N5bCEIDwgaGFuc2hhXCA7Civlj43lr74gPCBoYW50YWlcIDsKK+WQjeWQnyA8IG1laWdpblwgOwor55uu6auYIDwgbWVkYWthXCA7Civov5Tpm7sgPCBoZW5kZW5cIDsKK+mIjeWIgCA8IGRvbnRvdVwgOwor56C0542EIDwgaGFnb2t1XCA7CivmsrnlnKcgPCB5dWF0c3VcIDsKK+WNr+aciCA8IHVkenVraVwgOwor5rC05pyoIDwgbWl6dWtpXCA7CivnoILnpKsgPCBzYXJla2lcIDsKK+aAkuW8tSA8IGRvY2hvdVwgOwor55S75p625bqnIDwgZ2FrYXphXCA7CivliIbpioUgPCBmdW5kb3VcIDsKK+S4jeWuieawlyA8IGZ1YW5nZVwgOwor6YC46KmxIDwgaXRzdXdhXCA7CivojYnprZogPCBzb3VneW9cIDsKK+WNs+aZgiA8IHNva3VqaVwgOwor5byB6ICFIDwgYmVuc2hhXCA7CivpgJrot68gPCB0c3V1cm9cIDsKK+iTruaguSA8IHJlbmtvblwgOwor5ZCI5ZCMIDwgZ291ZG91XCA7Civov5HpmqMgPCBraW5yaW5cIDsKK+Wkp+WHuuadpSA8IG9vZGVraVwgOwor6YeN5aSJIDwganV1aGVuXCA7CivpoqjpgqrmsJcgPCBrYXpla2VcIDsKK+iNkummrCA8IGFyYXVtYVwgOwor5b+r5oyZIDwga2Fpa3lvXCA7CivliIbph44gPCBidW4nJ3lhXCA7CivphZLmna8gPCBzaHVoYWlcIDsKK+WQjOWLoiA8IGRvdXplaVwgOwor5rCX5qW9IDwga2lyYWt1XCA7CivmsJHmqKkgPCBtaW5rZW5cIDsKK+WIg+mHnSA8IGhhYmFyaVwgOwor5q2m5Zmo5bqrIDwgYnVraWtvXCA7Civlj4Llrq4gPCBzYW5ndXVcIDsKK+WIhumFjSA8IGJ1bnBhaVwgOwor6YG66ISxIDwgaWRhdHN1XCA7Civov7AgPCBqdXRzdVwgOwor5b+FIDwgaGl0c3VcIDsKK+i+uyA8IHRzdWppXCA7CivlvrkgPCB0ZXRzdVwgOwor556lIDwgYmV0c3VcIDsKK+W+jCA8IG5vY2hpXCA7CivlvosgPCByaXRzdVwgOwor552AIDwgY2hha3VcIDsKK+W8jyA8IHNoaWtpXCA7CivnmrogPCBzaGl3YVwgOwor6LqFIDwgY2hva3VcIDsKK+eZviA8IGh5YWt1XCA7Civnmb0gPCBzaGlyb1wgOwor55m8IDwgaG90c3VcIDsKK+eZuiA8IGhhdHN1XCA7CivlubggPCBzYWNoaVwgOwor5bm0IDwgdG9zaGlcIDsKK+eZqiA8IHNoYWt1XCA7Civlt7QgPCB0b21vZVwgOwor55eFIDwgeWFtYWlcIDsKK+eVpSA8IHJ5YWt1XCA7CivnlZwgPCBjaGlrdVwgOwor55S6IDwgbWFjaGlcIDsKK+eUtyA8IG90b2tvXCA7CivnlLEgPCB5b3NoaVwgOwor5bO2IDwgc2hpbWFcIDsKK+izqiA8IHRhY2hpXCA7CivlsrggPCBraXNoaVwgOwor5bGIIDwga3V0c3VcIDsKK+WwuyA8IHNoaXJpXCA7Civlr6YgPCBqaXRzdVwgOwor5a+fIDwgc2F0c3VcIDsKK+WvhiA8IG1pdHN1XCA7CivlrrQgPCB1dGFnZVwgOwor5a6iIDwga3lha3VcIDsKK+eMviA8IGthdHN1XCA7CivoqqwgPCBzZXRzdVwgOwor6KmwIDwga2l0c3VcIDsKK+eIuiA8IGppamlpXCA7CivniKogPCB0c3VtZVwgOwor6KijIDwga2V0c3VcIDsKK+inuCA8IHNob2t1XCA7Civop5IgPCB0c3Vub1wgOwor5aa7IDwgdHN1bWFcIDsKK+eGsSA8IG5ldHN1XCA7Civopb8gPCBuaXNoaVwgOwor5aW0IDwgeWF0c3VcIDsKK+WlqiA8IGRhdHN1XCA7CivlpI8gPCBuYXRzdVwgOwor54OIIDwgcmV0c3VcIDsKK+iityA8IGF3YXNlXCA7Civngo4gPCBob25vb1wgOwor5aKDIDwgc2FrYWlcIDsKK+WhtSA8IGNoaXJpXCA7CivloZogPCB0c3VrYVwgOwor5Z+6IDwgbW90b2lcIDsKK+WfkiA8IHJhY2hpXCA7CivpvaIgPCB5b3dhaVwgOwor6by+IDwgaWJpa2lcIDsKK+icgiA8IGhhY2hpXCA7Civpu5AgPCBtb2NoaVwgOwor5ruFIDwgbWV0c3VcIDsKK+ialSA8IGthaWtvXCA7Civpub8gPCBzaGlrYVwgOwor6JmrIDwgbXVzaGlcIDsKK+iZniA8IG9zb3JlXCA7CivlmYIgPCB1d2FzYVwgOwor5re1IDwgZnVjaGlcIDsKK+m3siA8IHdhc2hpXCA7Civmt5EgPCBzaHVrdVwgOwor6ba0IDwgdHN1cnVcIDsKK+WWhyA8IHJhdHN1XCA7CivllL4gPCB0c3ViYVwgOwor5rOJIDwgaXp1bWlcIDsKK+ayuSA8IGFidXJhXCA7CivmsqEgPCBib3RzdVwgOwor5ZKEIDwgdG90c3VcIDsKK+axgSA8IHRzdXl1XCA7CivpsIwgPCBkb2pvdVwgOwor5ZCJIDwga2ljaGlcIDsKK+WPoyA8IGt1Y2hpXCA7CivljZggPCBoaXRvZVwgOwor5Y2SIDwgc290c3VcIDsKK+asoSA8IHRzdWdpXCA7Civmq5sgPCBrdXNoaVwgOwor6IqdIDwgc2hpYmFcIDsKK+WKmyA8IHJ5b2t1XCA7CivoibYgPCB0c3V5YVwgOwor5qmLIDwgaGFzaGlcIDsKK+aoqyA8IGthc2hpXCA7CivoiIwgPCBzaGl0YVwgOwor5YiDIDwgeWFpYmFcIDsKK+iFsCA8IGtvc2hpXCA7CivlhY4gPCB1c2FnaVwgOwor5YWAIDwga290c3VcIDsKK+iEiCA8IG15YWt1XCA7Civpo68gPCBtZXNoaVwgOwor5qKoIDwgbmFzaGlcIDsKK+aioiA8IGtvenVlXCA7CivmopMgPCBhenVzYVwgOwor6aGNIDwgaGl0YWlcIDsKK+mggSA8IHBlaWppXCA7Civnv4EgPCBva2luYVwgOwor6Z6tIDwgbXVjaGlcIDsKK+mehCA8IGthYmFuXCA7Civmnb4gPCBtYXRzdVwgOwor572wIDwgYmF0c3VcIDsKK+e9qiA8IHRzdW1pXCA7CivkvZsgPCBidXRzdVwgOwor5L2NIDwga3VyYWlcIDsKK+S8uCA8IG5vc2hpXCA7CivpnLAgPCBhcmFyZVwgOwor6ZycIDwgc2hpbW9cIDsKK+aciCA8IHRzdWtpXCA7Civmm7IgPCBreW9rdVwgOwor6ZucIDwgemF0c3VcIDsKK+S7mSA8IHNlbnRvXCA7Civpm4cgPCB5YXRvaVwgOwor5Lm+IDwgaG9zaGlcIDsKK+S4uyA8IG51c2hpXCA7CivntrEgPCB0c3VuYVwgOwor57W2IDwgemV0c3VcIDsKK+e1giA8IG93YXJpXCA7Civmk40gPCBtaXNhb1wgOwor56+AIDwgYnVzaGlcIDsKK+eukiA8IGhvdWtpXCA7CivnrZQgPCBrb3RhZVwgOwor5ouCIDwgZnV0c3VcIDsKK+aIpiA8IGlrdXNhXCA7CivpgZMgPCBtaWNoaVwgOwor6YC5IDwgdGF0c3VcIDsKK+mAhiA8IGd5YWt1XCA7Civnnr3ogIUgPCBrb3NoYVwgOwor5ZCN5YmNIDwgbmFtYWVcIDsKK+W4sOmghiA8IGtpanVuXCA7CivluqfoppYgPCB6YXNoaVwgOwor5b+r5omTIDwga2FpZGFcIDsKK+mAgei+niA8IHNvdWppXCA7CivlkI3liKkgPCBtZWlyaVwgOwor55yJ6ZaTIDwgbWlrZW5cIDsKK+ejgeaApyA8IGppc2VpXCA7CivolqzkvqEgPCB5YWtrYVwgOwor56Cy54WZIDwgaG91ZW5cIDsKK+ekvOWEgCA8IHJlaWdpXCA7Civms5XlhbcgPCBob3VndVwgOwor5ZCP5YWaIDwgcml0b3VcIDsKK+ebrumhlCA8IG1lZ2FvXCA7CivnopHmlocgPCBoaWJ1blwgOwor6YCj6KqeIDwgcmVuZ29cIDsKK+mHjeWbsiA8IGNob3VpXCA7Civmsq7llqogPCBzb3NvdVwgOwor6YG657+SIDwgaXNodXVcIDsKK+mBuOiAhSA8IHNlbmphXCA7CivmrYzogZYgPCBrYXNlaVwgOwor6YCg6KqeIDwgem91Z29cIDsKK+egsueBqyA8IGhvdWthXCA7CivokrjmsJcgPCBqb3VraVwgOwor5oCq5aWHIDwga2Fpa2lcIDsKK+mAo+iomCA8IHJlbmtpXCA7Civph43lmaggPCBqdXVraVwgOwor5Yqg57OWIDwga2F0b3VcIDsKK+aBqeWFuCA8IG9udGVuXCA7Civluo/oq5YgPCBqb3JvblwgOwor5q+F54S2IDwga2l6ZW5cIDsKK+WItuimhyA8IHNlaWhhXCA7CivmrY7nvo4gPCB0YW5iaVwgOwor6YCA6LevIDwgdGFpcm9cIDsKK+W/nOaJiyA8IG91c2h1XCA7CivpgJ/oqJggPCBzb2traVwgOwor5rOi5LmxIDwgaGFyYW5cIDsKK+W/nOaIpiA8IG91c2VuXCA7CivpgKPopocgPCByZW5wYVwgOwor5oCo5aOwIDwgZW5zZWlcIDsKK+ayueWNmCA8IHl1dGFuXCA7Civluo/oqZ4gPCBqb3NoaVwgOwor5Yy75qWtIDwgaWd5b3VcIDsKK+W6j+iogCA8IGpvZ2VuXCA7Civlv5jmiJEgPCBib3VnYVwgOwor6I236YeNIDwga2FqdXVcIDsKK+WMuuaknCA8IGt1a2VuXCA7CivljZfmlpcgPCBuYW50b1wgOwor5rK95Yi4IDwga29rZW5cIDsKK+WNiuacnyA8IGhhbmtpXCA7CivlkIzkvqEgPCBkb3VrYVwgOwor5YuV55S7IDwgZG91Z2FcIDsKK+ays+WNlyA8IGthbmFuXCA7CivoloTliIMgPCB1c3ViYVwgOwor5Yqg566XIDwga2FzYW5cIDsKK+W5tOizpiA8IG5lbnB1XCA7Civlj6PlkbMgPCBrb3VtaVwgOwor6L+36LevIDwgbWVpcm9cIDsKK+ayueWJpCA8IHl1emFpXCA7CivlubTos4AgPCBuZW5nYVwgOwor5Y+v5YuVIDwga2Fkb3VcIDsKK+W5tOiyoiA8IG5lbmd1XCA7CivlvqHmoKogPCBva2FidVwgOwor5Y6o5a2QIDwgenVzaGlcIDsKK+WIpeiomCA8IGJla2tpXCA7CivlkI/kurogPCByaWppblwgOwor5ZCE5YCLIDwga2Fra29cIDsKK+mCquefpSA8IGphY2hpXCA7Civlj6Tlj4IgPCBrb3NhblwgOwor5rOV5LqLIDwgaG91amlcIDsKK+iVg+WktyA8IGJhbicnaVwgOwor6YeN5ZGzIDwgb21vbWlcIDsKK+aouem9oiA8IGp1cmVpXCA7CivljYPmnKggPCBjaGlnaVwgOwor5oG15LiOIDwga2VpeW9cIDsKK+mFuOW6piA8IHNhbmRvXCA7CivlirHno4EgPCByZWlqaVwgOwor5Ymj6IieIDwga2VuYnVcIDsKK+azleS4uyA8IGhvc3N1XCA7Civmr43muK8gPCBib2tvdVwgOwor6YeO5ZCIIDwgeWFnb3VcIDsKK+WQjOS6iyA8IGRvdWppXCA7Civlj6/liIYgPCBrYWJ1blwgOwor6YeO5Y+yIDwgeWFzaGlcIDsKK+WKqeelrSA8IGpvc2FpXCA7CivlkITkvY0gPCBrYWt1aVwgOwor5b6h5pytIDwgb2Z1ZGFcIDsKK+mBjuiIrCA8IGthaGFuXCA7CivliIbos6YgPCBidW5wdVwgOwor56iu44CFIDwgc2h1anVcIDsKK+W/mOaBqSA8IGJvdW9uXCA7CivlvoXmqZ8gPCB0YWlraVwgOwor5oGp5Lq6IDwgb25qaW5cIDsKK+W/jOaGmiA8IGtpdGFuXCA7CivpgYvoiKogPCB1bmtvdVwgOwor5rKz5YaFIDwgaGFub2lcIDsKK+aBqOS6iyA8IGtvbmppXCA7CivmgKflmaggPCBzZWlraVwgOwor5oCS5aOwIDwgZG9zZWlcIDsKK+apn+mmliA8IGtpc2h1XCA7CivliJfoqJggPCByZWtraVwgOwor5Y+k5Yi2IDwga29zZWlcIDsKK+WPjeWTuiA8IGhhbnBvXCA7CivljYHml6UgPCB0b29rYVwgOwor5b6h5pi8IDwgb2hpcnVcIDsKK+mDveawkSA8IHRvbWluXCA7CivnnIvpgY4gPCBrYW5rYVwgOwor5Y+k5YiAIDwga290b3VcIDsKK+W8peeUnyA8IHlheW9pXCA7CivpgIHoqbEgPCBzb3V3YVwgOwor5bmz6KqeIDwgaGVpZ29cIDsKK+avkuawlyA8IGRva2tlXCA7Civnn5vnm74gPCBtdWp1blwgOwor56C05rC0IDwgaGFzdWlcIDsKK+mHkeWIqSA8IGtpbnJpXCA7Civms4nkuIsgPCBzZW5rYVwgOwor6L+U6L6eIDwgaGVuamlcIDsKK+m1nuavmyA8IGdhbW91XCA7Civlj5nli7IgPCBqb2t1blwgOwor5rKW5ZCIIDwgb2tpYWlcIDsKK+WPpOWFuCA8IGtvdGVuXCA7Civpr6jpo7IgPCBnZWlpblwgOwor6YeN5YipIDwganV1cmlcIDsKK+WNsOW9sSA8IGluJydlaVwgOwor5Y2Y5omTIDwgdGFuZGFcIDsKK+W+oeaVsCA8IG9rYXp1XCA7Civlj5fli5UgPCBqdWRvdVwgOwor6YGT576pIDwgZG91Z2lcIDsKK+W+jOaetiA8IGtvdWthXCA7CivpgaDnuIEgPCB0b29lblwgOwor5YiG6KqyIDwgYnVua2FcIDsKK+mCpueUuyA8IGhvdWdhXCA7Civph47lhZogPCB5YXRvdVwgOwor552A6KGjIDwgeWFrdWlcIDsKK+WPl+WIkSA8IGp1a2VpXCA7Civmr47mrKEgPCBtYWlqaVwgOwor5b6M5pyfIDwga291a2lcIDsKK+iVqeWFkCA8IHRvdWppXCA7CivmsrnkupUgPCB5dXNlaVwgOwor5bu656KRIDwga2VucGlcIDsKK+WGpemXhyA8IG1laWFuXCA7CivluIPpmaMgPCBmdWppblwgOwor6I2S6YeOIDwga291eWFcIDsKK+ayu+S4iyA8IGNoaWthXCA7CivovrrphJkgPCBoZW5waVwgOwor6YWS5b6SIDwgc2h1dG9cIDsKK+apn+mbtyA8IGtpcmFpXCA7CivmrYznqL8gPCBrYWtvdVwgOwor5byn54q2IDwga29qb3VcIDsKK+mBt+enuyA8IHNlbicnaVwgOwor5biw6YKEIDwga2lrYW5cIDsKK+atr+eXmyA8IGhhaXRhXCA7CivmsJHmiLggPCBtaW5rb1wgOwor5Yqg55ufIDwga2FtZWlcIDsKK+iPiuiKsSA8IGtpa2thXCA7Civlj6TkvosgPCBrb3JlaVwgOwor5Y+w5LiLIDwgZGFpa2FcIDsKK+WIu+iLpiA8IGtva2t1XCA7Civmr43mqKkgPCBib2tlblwgOwor5Y+k5L2TIDwga290YWlcIDsKK+W+gOadpSA8IG91cmFpXCA7Civlj5flg48gPCBqdXpvdVwgOwor5Y+l5LyaIDwga3VrYWlcIDsKK+WPpOS8nSA8IGtvZGVuXCA7Civlv5zlr74gPCBvdXRhaVwgOwor5Y2x5bOwIDwga2lob3VcIDsKK+auuuawlyA8IHNha2tpXCA7CivliqnnlKMgPCBqb3NhblwgOwor5biw6L6yIDwga2lub3VcIDsKK+WPpOS7oyA8IGtvZGFpXCA7Civlj6Tku4ogPCBrb2tvblwgOwor5Y+k5Lq6IDwga29qaW5cIDsKK+mBlee0hCA8IGl5YWt1XCA7Civljp/lm7MgPCBnZW56dVwgOwor5Y2B5omLIDwgaml0dGVcIDsKK+awkeaEjyA8IG1pbicnaVwgOwor5Y+C5YqgIDwgc2Fua2FcIDsKK+WGtumHkSA8IHlha2luXCA7Civnn7PngasgPCBzZWtrYVwgOwor5YW16aasIDwgaGVpYmFcIDsKK+W+oeaJgCA8IGdvc2hvXCA7Civph47kurogPCB5YWppblwgOwor5byB55aPIDwgYmVuc29cIDsKK+WOn+WZqCA8IGdlbmtpXCA7CivpgKDoirEgPCB6b3VrYVwgOwor5bid6YO9IDwgdGVpdG9cIDsKK+iLsemtgiA8IGVpa29uXCA7Civljq3lkbMgPCBpeWFtaVwgOwor5Y2x5a6zIDwga2lnYWlcIDsKK+W6l+iIlyA8IHRlbnBvXCA7CivphY3luIMgPCBoYWlmdVwgOwor5q615q2pIDwgdGFuYnVcIDsKK+WNmOW6pyA8IHRhbnphXCA7Civlj5nku7sgPCBqb25pblwgOwor5qyn57GzIDwgb3ViZWlcIDsKK+aAkuWPtyA8IGRvZ291XCA7CivmsLjlrZggPCBlaXpvblwgOwor5bel6Z2iIDwga3VtZW5cIDsKK+WGhemcgCA8IG5haWp1XCA7Civlj5fku7sgPCBqdW5pblwgOwor5b6M5o+0IDwga291ZW5cIDsKK+ecjOitsCA8IGtlbmdpXCA7Civli6TmsYIgPCBnb25ndVwgOwor55yL6K23IDwga2FuZ29cIDsKK+WGhumZoyA8IGVuamluXCA7Civphbjln7ogPCBzYW5raVwgOwor5biw6LaoIDwga2lzdXVcIDsKK+W9k+apnyA8IHRvdWtpXCA7CivlvIHnkIYgPCBiZW5yaVwgOwor5q+N5p2QIDwgYm96YWlcIDsKK+W+kuaJiyA8IHRvc2h1XCA7Civnm5vpgYsgPCBzZWl1blwgOwor5q2v54mZIDwgc2hpZ2FcIDsKK+awkeW6piA8IG1pbmRvXCA7CivpgYvnrpcgPCB1bnphblwgOwor5b+c5aSJIDwgb3VoZW5cIDsKK+mFkuWutiA8IHNodWthXCA7CivlvKXmvKsgPCBiaW1hblwgOwor6YWS5a60IDwgc2h1ZW5cIDsKK+mun+mxhyA8IGFua291XCA7CivovZ/pn7MgPCBnb3VvblwgOwor5b6h5b+1IDwgZ29uZW5cIDsKK+W+l+aEjyA8IHRva3VpXCA7Civlhbjpm4UgPCB0ZW5nYVwgOwor5Y+M5LqSIDwgc291Z29cIDsKK+WLmOawlyA8IGthbmtpXCA7Civovp7pgIAgPCBqaXRhaVwgOwor5Y6f5Y+lIDwgZ2Vua3VcIDsKK+mBuueVmSA8IGlyeXV1XCA7CivmqZ/pioMgPCBraWp1dVwgOwor6YO95pS/IDwgdG9zZWlcIDsKK+WLleawlyA8IGRvdWtpXCA7Civlv5zloLEgPCBvdWhvdVwgOwor5bm86Iq9IDwgeW91Z2FcIDsKK+ehrOW6piA8IGtvdWRvXCA7CivlvqnluLAgPCBmdWtraVwgOwor5qy6556eIDwgZ2ltYW5cIDsKK+mBoOefoiA8IHRvb3lhXCA7CivpgY7nqIsgPCBrYXRlaVwgOwor5rC05aSrIDwgc3VpZnVcIDsKK+avjeaWkSA8IGJvaGFuXCA7CivmgJzkv5AgPCByZWlyaVwgOwor5biC6YOoIDwgc2hpYnVcIDsKK+WKq+eBqyA8IGdvdWthXCA7CivlhqXpgJQgPCBtZWlkb1wgOwor5Y+C5LqLIDwgc2FuamlcIDsKK+W+oeW5oyA8IGdvaGVpXCA7CivlvL7mqZ8gPCBkYW5raVwgOwor6YGg55y8IDwgZW5nYW5cIDsKK+egtOaRpyA8IGhhc2FpXCA7Civov5HooZsgPCBrb25vZVwgOwor55+t5rOiIDwgdGFucGFcIDsKK+mBoOebriA8IHRvb21lXCA7CivphofljJYgPCBqdW5rYVwgOwor5Yik6ICFIDwgaGFuamFcIDsKK+egtOaQjSA8IGhhc29uXCA7CivpgZPnoLQgPCBkb3VoYVwgOwor6Iux6ZyKIDwgZWlyZWlcIDsKK+WLh+awlyA8IHl1dWtpXCA7CivmsJflrZQgPCBraWtvdVwgOwor5Yqg54K5IDwga2F0ZW5cIDsKK+mFuOWRsyA8IHNhbm1pXCA7CivlhqDovp4gPCBrYW5qaVwgOwor6Iux6ZuEIDwgZWl5dXVcIDsKK+W/q+WRsyA8IGthaW1pXCA7CivlubPoh6UgPCBoZWlnYVwgOwor5Y6a5YipIDwga291cmlcIDsKK+W+kuW8nyA8IHRvdGVpXCA7Civnn63msJcgPCB0YW5raVwgOwor5rCR5a62IDwgbWlua2FcIDsKK+W3rumHkSA8IHNha2luXCA7Civpg6jmlbAgPCBidXN1dVwgOwor5bqD576pIDwga291Z2lcIDsKK+WLh+atpiA8IHl1dWJ1XCA7CivlhYjpp4YgPCBzZW5rdVwgOwor6YKq5rOVIDwgamFob3VcIDsKK+W/jOWeoyA8IGlnYWtpXCA7CivliY3np5EgPCB6ZW5rYVwgOwor5rCP5a2QIDwgdWppa29cIDsKK+W3rumFjSA8IHNhaGFpXCA7Civnn63mrYwgPCB0YW5rYVwgOwor5YaF6YeOIDwgbmFpeWFcIDsKK+ebuOijnCA8IHNvdWhvXCA7CivlvKbmrYwgPCBnZW5rYVwgOwor5Y2D5a62IDwgc2Vua2VcIDsKK+iLpumboyA8IGt1bmFuXCA7CivlvJjms5UgPCBndWhvdVwgOwor5qmf6LuiIDwga2l0ZW5cIDsKK+egtOaIkiA8IGhha2FpXCA7Civmr4DmkI0gPCBraXNvblwgOwor5Y2B5a2XIDwganV1amlcIDsKK+W3rumBoyA8IHNha2VuXCA7CivlvqHlrrQgPCBneW9lblwgOwor5YuY5p+7IDwga2Fuc2FcIDsKK+efruaouSA8IHdhaWp1XCA7Civnmb3pm6ggPCBoYWt1dVwgOwor5b6h5a6FIDwgb3Rha3VcIDsKK+WGhemDqCA8IG5haWJ1XCA7Civlhrfoqp4gPCByZWlnb1wgOwor5bqn56aFIDwgemF6ZW5cIDsKK+iNt+iRiSA8IGtheW91XCA7Civoi6bpl5ggPCBrdXRvdVwgOwor6L6e6K2yIDwgamlqb3VcIDsKK+WMu+WtpiA8IGlnYWt1XCA7CivliqDmuJsgPCBrYWdlblwgOwor5bqn56S8IDwgemFyZWlcIDsKK+mFkuWZqCA8IHNodWtpXCA7Civlt6bpgbcgPCBzYXNlblwgOwor55m76ZmiIDwgdG91aW5cIDsKK+WFiOmdniA8IHNlbnBpXCA7CivpgYvnl7QgPCB1bmNoaVwgOwor5biC6LK7IDwgc2hpaGlcIDsKK+W+gOW5tCA8IG91bmVuXCA7CivlupznqI4gPCBmdXplaVwgOwor56CU5pGpIDwga2VubWFcIDsKK+W3oemCjyA8IGp1bnJhXCA7CivliaPnkr0gPCBrZW5qaVwgOwor5YWN6ZmkIDwgbWVuam9cIDsKK+iKsemtgSA8IG9pcmFuXCA7Civlu7bmu54gPCBlbnRhaVwgOwor5bem6L66IDwgc2FoZW5cIDsKK+W+ruWhtSA8IG1pamluXCA7Civpg6jmiYAgPCBidXNob1wgOwor5Yy55ammIDwgaGlwcHVcIDsKK+WFiemZsCA8IGtvdWluXCA7CivmrKHnlLcgPCBqaW5hblwgOwor5Yqg5rOVIDwga2Fob3VcIDsKK+W+jOWwviA8IGtvdWJpXCA7Civlhobou6IgPCBlbnRlblwgOwor6YGT55CGIDwgZG91cmlcIDsKK+ats+asoSA8IHNhaWppXCA7CivlhpfosrsgPCBqb3VoaVwgOwor5Yil566HIDwgYmVra29cIDsKK+iMtuipsSA8IGNoYXdhXCA7Civmr43mgKcgPCBib3NlaVwgOwor5rCX5ZyPIDwga2lrZW5cIDsKK+W4guitsCA8IHNoaWdpXCA7CivmsJflm6MgPCBraWRhblwgOwor5b+c5YiGIDwgb3VidW5cIDsKK+W+oeWkpyA8IG9udGFpXCA7CivliqDmsLQgPCBrYXN1aVwgOwor5q+b5biDIDwgbW91ZnVcIDsKK+WGjei1tyA8IHNhaWtpXCA7CivmsLjliqsgPCBlaWdvdVwgOwor5rC05YyWIDwgc3Vpa2FcIDsKK+mAlOerryA8IHRvdGFuXCA7Civpg73luqYgPCB0c3Vkb1wgOwor5q+N5b2iIDwgYm9rZWlcIDsKK+W5s+e0oCA8IGhlaXNvXCA7Civli7/mgKogPCBtb2trZVwgOwor5YaZ6K2cIDwgc2hhZnVcIDsKK+ato+avlCA8IHNlaWhpXCA7CivlvbzlsrggPCBoaWdhblwgOwor5Y2w5YikIDwgaW5wYW5cIDsKK+avjuW6piA8IG1haWRvXCA7Civlhajpg70gPCB6ZW50b1wgOwor5Y2w5YiAIDwgaW50b3VcIDsKK+WFqOmDqCA8IHplbmJ1XCA7CivmsLTliKkgPCBzdWlyaVwgOwor5b2p5bqmIDwgc2FpZG9cIDsKK+W9ouW9sSA8IGtlaWVpXCA7CivliKXnp5EgPCBiZWtrYVwgOwor6YGg54GrIDwgdG9vYmlcIDsKK+iRieacqyA8IGhhenVlXCA7Civlv6vkuosgPCBrYWlqaVwgOwor5bqc55yMIDwgZnVrZW5cIDsKK+WGl+iqniA8IGpvdWdvXCA7CivljLrln58gPCBrdWlraVwgOwor5beo6LK7IDwga3lvaGlcIDsKK+W+oeWdiiA8IGdvYm91XCA7Civnn6LmnaUgPCB5YXJhaVwgOwor5YyW5bCOIDwga2Vkb3VcIDsKK+iLsemCgSA8IGVpbWFpXCA7CivlvozlprsgPCBnb3NhaVwgOwor5q+U5bO2IDwgaGl0b3VcIDsKK+WNmOWPpSA8IHRhbmt1XCA7CivmsJflk4EgPCBraWhpblwgOwor5YaN6K2wIDwgc2FpZ2lcIDsKK+W3peiyuyA8IGtvdWhpXCA7Civli53miYsgPCBrYXR0ZVwgOwor55y856qpIDwgZ2Fua2FcIDsKK+W4g+iiiyA8IGhvdGVpXCA7CivoibbpupcgPCBlbnJlaVwgOwor5YSq6ZuFIDwgeXV1Z2FcIDsKK+avm+WtlCA8IGtlYW5hXCA7CivnoLTlsYsgPCBoYW9rdVwgOwor5Yuk5oOwIDwga2luZGFcIDsKK+WGheitsCA8IG5haWdpXCA7CivmrZTmrLcgPCBreW9raVwgOwor6Ly46YqAIDwgeXVnaW5cIDsKK+WFqOi6ryA8IHplbmt1XCA7CivlubPnqY8gPCBoZWlvblwgOwor5Y2z5L2NIDwgc29rdWlcIDsKK+W6j+ebpCA8IGpvYmFuXCA7Civov5Hnv5IgPCBraW5qdVwgOwor5qih6YCgIDwgbW96b3VcIDsKK+avjeWxiyA8IG9tb3lhXCA7CivprZHprYUgPCBjaGltaVwgOwor5rC45L2PIDwgZWlqdXVcIDsKK+ebruiMtiA8IG1lY2hhXCA7Civlhazot68gPCBrb3Vyb1wgOwor5YiH56ymIDwga2lwcHVcIDsKK+aoqui7oiA8IG91dGVuXCA7CivlubTnp58gPCBuZW5zb1wgOwor6LuN6byTIDwgZ3Vua29cIDsKK+WNiuWPryA8IGhhbmthXCA7CivljYrlj6UgPCBoYW5rdVwgOwor5Y2Y5YipIDwgdGFucmlcIDsKK+W+s+WMliA8IHRva2thXCA7CivliKnnm4ogPCByaWVraVwgOwor5qyh54K5IDwgaml0ZW5cIDsKK+W9k+W6pyA8IHRvdXphXCA7CivlvpPlm6AgPCBqdXVpblwgOwor5rC45LujIDwgZWl0YWlcIDsKK+awl+WLoiA8IGtpc2VpXCA7Civmra/mnLYgPCBzaGlkYVwgOwor5q2z5pquIDwgc2VpYm9cIDsKK+W9vOWltCA8IGFpdHN1XCA7Civlvqnlj6QgPCBmdWtrb1wgOwor5YeE6Im2IDwgc2VpZW5cIDsKK+avjeWtkCA8IGJvc2hpXCA7CivpgaDmtbcgPCBlbmthaVwgOwor5rCX5YmNIDwga2ltYWVcIDsKK+WNg+WPpCA8IHNlbmtvXCA7Civlhrfoj5MgPCByZWlrYVwgOwor5byV5pWwIDwgaW5zdXVcIDsKK+WMquWboyA8IGhpZGFuXCA7CivphY3lgpkgPCBoYWliaVwgOwor5b6u5YuVIDwgYmlkb3VcIDsKK+awuOS4liA8IGVpc2VpXCA7CivmrrXlt64gPCBkYW5zYVwgOwor5b255aSrIDwgZWtpZnVcIDsKK+awl+WIhiA8IGtpYnVuXCA7CivphZLkv50gPCBzaHVob1wgOwor5by35oSPIDwga3lvdWlcIDsKK+WGheimjyA8IG5haWtpXCA7CivpgaDms7MgPCBlbicnZWlcIDsKK+iNieiKsSA8IHNvdWthXCA7CivphZTkvZkgPCBzdWl5b1wgOwor6JKy5ZujIDwgZnV0b25cIDsKK+W+oeWPsCA8IG1pZGFpXCA7Civou43pto8gPCBzaGFtb1wgOwor6YCj55CGIDwgcmVucmlcIDsKK+mCquaOqCA8IGphc3VpXCA7CivmsJHliKkgPCBtaW5yaVwgOwor6YGL5ryVIDwgdW5zb3VcIDsKK+mAo+ePoCA8IHJlbmp1XCA7CivliKnnlKggPCByaXlvdVwgOwor5b6u5YiGIDwgYmlidW5cIDsKK+WNiOWJjSA8IGdvemVuXCA7Civoi7Hos4cgPCBlaXNoaVwgOwor5YaF6KOPIDwgZGFpcmlcIDsKK+i8uOmAgSA8IHl1c291XCA7CivlhYjpgJQgPCBzZW5kb1wgOwor5Yqp5pS7IDwgam9rb3VcIDsKK+auv+WuhyA8IGRlbicndVwgOwor6Iqf6ZmkIDwgc2Fuam9cIDsKK+WIh+ejiyA8IHNlc3NhXCA7CivmsJHlhbcgPCBtaW5ndVwgOwor6bWE5bC+IDwgc2hpYmlcIDsKK+WMu+WNmiA8IGloYWt1XCA7CivojLboj5MgPCBjaGFrYVwgOwor5b6u5YWJIDwgYmlrb3VcIDsKK+atqeaVsCA8IGhvc3V1XCA7Civmr47lpJwgPCBtYWl5b1wgOwor5q2m5patIDwgYnVkYW5cIDsKK+WNmOS9jSA8IHRhbicnaVwgOwor5YW86KOcIDwga2VucG9cIDsKK+WKoOaVsCA8IGthc3V1XCA7CivlvZPlrrYgPCB0b3VrZVwgOwor5by35byVIDwgZ291aW5cIDsKK+W+kuWQjSA8IGFkYW5hXCA7CivlvqHlh7ggPCBvZGVrb1wgOwor5b2T5a2XIDwgYXRlamlcIDsKK+mFjeS4iyA8IGhhaWthXCA7CivlhazoqLQgPCBrb3Vzb1wgOwor5bmz55mSIDwgaGVpeXVcIDsKK+eZuui1tyA8IGhva2tpXCA7CivmsJfkvZMgPCBraXRhaVwgOwor6YKq5oWzIDwgamFrZW5cIDsKK+WMuuWIhiA8IGt1YnVuXCA7Civpgb/mmpEgPCBoaXNob1wgOwor6YGK5rOzIDwgeXV1ZWlcIDsKK+WMuuWHpiA8IGt1c2hvXCA7Civmr43loIIgPCBib2RvdVwgOwor5b6h5YWNIDwgZ29tZW5cIDsKK+W+oeWFiCA8IG9zYWtpXCA7CivojLboiJcgPCBjaGFob1wgOwor5YuH5b6AIDwgeXV1b3VcIDsKK+W8k+aJiyA8IHl1bmRlXCA7CivljZfkuIsgPCBuYW5rYVwgOwor5Yy65YaFIDwga3VuYWlcIDsKK+iJsummmSA8IGlyb2thXCA7CivlvpLlirQgPCB0b3JvdVwgOwor5YWa6K2wIDwgdG91Z2lcIDsKK+mCquaCqiA8IGphYWt1XCA7CivlubTnlKsgPCBuZW5wb1wgOwor6YOo5aSWIDwgYnVnYWlcIDsKK+atjOabuCA8IGthc2hvXCA7CivliZvmsJcgPCBnb3VraVwgOwor5byn5b2iIDwga29rZWlcIDsKK+WLouWutiA8IHNlaWthXCA7CivlioPmnJ8gPCBrYWtraVwgOwor56CC5bKpIDwgc2FnYW5cIDsKK+mCquaBiyA8IGphcmVuXCA7CivmsJfkuIggPCBraWpvdVwgOwor5b6p5L2NIDwgZnVrdWlcIDsKK+W+kuWIkSA8IHRva2VpXCA7Civnm67nt5ogPCBtZXNlblwgOwor6JCM5pyoIDwgbW9lZ2lcIDsKK+WGt+e9tSA8IHJlaWJhXCA7CivmsJHkuosgPCBtaW5qaVwgOwor55+p5b2iIDwga3VrZWlcIDsKK+mBuuaXjyA8IGl6b2t1XCA7Civmr5vllJAgPCBrZXRvdVwgOwor5YWo6KO4IDwgemVucmFcIDsKK+mCquW/tSA8IGphbmVuXCA7CivliqnmiJAgPCBqb3NlaVwgOwor6LuN6aasIDwgZ3VuYmFcIDsKK+WJteahiCA8IHNvdWFuXCA7CivmqKHoqaYgPCBtb3NoaVwgOwor6YGK5q2pIDwgeXV1aG9cIDsKK+WHueecvCA8IG91Z2FuXCA7CivlvZPlpJwgPCB0b3V5YVwgOwor6LuK6aasIDwgc2hhYmFcIDsKK+WKoOaLhSA8IGthdGFuXCA7CivptKjlsYUgPCBrYW1vaVwgOwor5b6h5L6bIDwgb3RvbW9cIDsKK+W+kuWFmiA8IHRvdG91XCA7Civlhobok4sgPCBlbmdhaVwgOwor5Y2D5LujIDwgY2hpeW9cIDsKK+WFhOiytCA8IGFuaWtpXCA7Civoi6boqIAgPCBrdWdlblwgOwor5b6h5Ly9IDwgb3RvZ2lcIDsKK+WMluWQiCA8IGthZ291XCA7CivliKnngrkgPCByaXRlblwgOwor6ay86Z2iIDwga2ltZW5cIDsKK+i8v+irliA8IHlvcm9uXCA7CivljYHkupQgPCBqdXVnb1wgOwor5q275b6MIDwgc2hpZ29cIDsKK+WNgeS6jCA8IGp1dW5pXCA7CivmqKrooYwgPCBvdWtvdVwgOwor5b6h5LuBIDwgZ29qaW5cIDsKK+W+jOWFiSA8IGdva291XCA7CivlhYjorbAgPCBzZW5naVwgOwor6YGg5p2lIDwgZW5yYWlcIDsKK+WJjeatryA8IG1hZWJhXCA7CivpgaDmnJsgPCBlbmJvdVwgOwor5Ye655WqIDwgZGViYW5cIDsKK+efpeW3sSA8IGNoaWtpXCA7CivlirHlvKcgPCByZWlrb1wgOwor55yL56C0IDwga2FucGFcIDsKK+W+oeS4iiA8IG9rYW1pXCA7CivlhY3oqLQgPCBtZW5zb1wgOwor5b255YuZIDwgZWtpbXVcIDsKK+iSmeWPpCA8IG1vdWtvXCA7CivlhqDogIUgPCBrYW5qYVwgOwor5buD5qOEIDwgaGFpa2lcIDsKK+WIqea9pCA8IHJpanVuXCA7Civlg6fpmaIgPCBzb3VpblwgOwor6LuN6Z20IDwgZ3Vua2FcIDsKK+WGpOe9qiA8IGVuemFpXCA7CivpgaDmma8gPCBlbmtlaVwgOwor5YaF6IuRIDwgbmFpZW5cIDsKK+W7g+ahiCA8IGhhaWFuXCA7Civou43pnIAgPCBndW5qdVwgOwor6ay86ZaAIDwga2ltb25cIDsKK+mBoOaWuSA8IGVucG91XCA7Civlt6boiLcgPCBzYWdlblwgOwor5YWB6KixIDwgaW5reW9cIDsKK+W4sOekviA8IGtpc2hhXCA7CivliqPlvKcgPCByZWtrb1wgOwor6YOo5ZOBIDwgYnVoaW5cIDsKK+egguWhtSA8IHNhamluXCA7CivliJ3mvJQgPCBzaG9lblwgOwor5q2p5buKIDwgaG9yb3VcIDsKK+atjOaJiyA8IGthc2h1XCA7CivlvozkuosgPCBrb3VqaVwgOwor5YuH5ammIDwgeXV1ZnVcIDsKK+atquW6piA8IHdhaWRvXCA7CivlubPngokgPCBoZWlyb1wgOwor6L6y56eRIDwgbm91a2FcIDsKK+atpuW8gSA8IGJ1YmVuXCA7Civpg73lhoUgPCB0b25haVwgOwor5byf5a2QIDwgZGVzaGlcIDsKK+W3puiEsyA8IHNhbm91XCA7CivliqDlubQgPCBrYW5lblwgOwor6L+R55W/IDwga2lua2lcIDsKK+W8geW6pyA8IGJlbnphXCA7CivliKXmtL4gPCBiZXBwYVwgOwor5q2j5bqnIDwgc2VpemFcIDsKK+W8leWwjiA8IGluZG91XCA7CivpgKPmrYwgPCByZW5nYVwgOwor6a2U6YGTIDwgbWFkb3VcIDsKK+W9seWDjyA8IGVpem91XCA7Civlt6vogIUgPCBmdXNoYVwgOwor5Ye554mIIDwgb3ViYW5cIDsKK+WGheiAsyA8IG5haWppXCA7CivlvZPlkKYgPCB0b3VoaVwgOwor5Yip5rC0IDwgcmlzdWlcIDsKK+mAoOasoSA8IHpvdWppXCA7Civlha3oirEgPCByaWtrYVwgOwor5Yem55CGIDwgc2hvcmlcIDsKK+W7tuW8lSA8IGVuJydpblwgOwor552/5pm6IDwgZWljaGlcIDsKK+WFq+iLpiA8IGhha2t1XCA7Civmr5TlgKsgPCBoaXJpblwgOwor6YGO5pWPIDwga2FiaW5cIDsKK+W7tuW7tiA8IGVuJydlblwgOwor5YuV5ZugIDwgZG91aW5cIDsKK+W8iuWxpSA8IGhlaXJpXCA7CivpgbrlvrMgPCBpdG9rdVwgOwor56C05YCrIDwgaGFyaW5cIDsKK+WMl+S6rCA8IHBla2luXCA7CivnoILlmLQgPCBzYXNoaVwgOwor5YmN5pyfIDwgemVua2lcIDsKK+asoeaVsCA8IGppc3V1XCA7CivpgKDmqZ8gPCB6b3VraVwgOwor5q+U5L6LIDwgaGlyZWlcIDsKK+mDqOWIhiA8IGJ1YnVuXCA7Civlho3nuIEgPCBzYWllblwgOwor55uu55ypIDwgbWVtYWlcIDsKK+aoueiEgiA8IGp1c2hpXCA7Civmrovln7ogPCB6YW5raVwgOwor6YC45pu4IDwgaXNzaG9cIDsKK+mDveS8miA8IHRva2FpXCA7CivmrL3mhZUgPCBraW5ib1wgOwor6YOo5YaFIDwgYnVuYWlcIDsKK+WFreiFkSA8IHJvcHB1XCA7CivpgJPmrKEgPCB0ZWlqaVwgOwor6YO95Lq6IDwgdG9qaW5cIDsKK+mBi+aQrCA8IHVucGFuXCA7CivliY3ml6UgPCBtYWViaVwgOwor5q+N5L2TIDwgYm90YWlcIDsKK+WIqeaoqSA8IHJpa2VuXCA7CivpgbfluqcgPCBzZW56YVwgOwor5Yqg5a6zIDwga2FnYWlcIDsKK+mBoOaFriA8IGVucnlvXCA7Civli6fljJYgPCBrYW5nZVwgOwor5YuH5ZuzIDwgeXV1dG9cIDsKK+iPqeaPkCA8IGJvZGFpXCA7Civlg6fpg70gPCBzb3V6dVwgOwor5q2m5a6YIDwgYnVrYW5cIDsKK+WIneatqSA8IHNob2hvXCA7Civnn7PlmaggPCBzZWtraVwgOwor6YCA5rK7IDwgdGFpamlcIDsKK+iPsuaJjSA8IGhpc2FpXCA7Civli6Tli5kgPCBraW5tdVwgOwor5q2j5a2XIDwgc2VpamlcIDsKK+W3qOe0sCA8IGtvc2FpXCA7CivpgYvmjIcgPCB1bnNoaVwgOwor6bOl5bGFIDwgdG9yaWlcIDsKK+W5s+awlyA8IGhlaWtpXCA7CivpgKPmnrYgPCByZW5rYVwgOwor5YiG5rS+IDwgYnVucGFcIDsKK+i7jemDqCA8IGd1bmJ1XCA7Civlh7rmua8gPCBpZGV5dVwgOwor5bqm5pWwIDwgZG9zdXVcIDsKK+mBiuaKgCA8IHl1dWdpXCA7CivpgIDmrakgPCB0YWlob1wgOwor6YKm5ZyfIDwgaG91ZG9cIDsKK+mBv+WvkiA8IGhpa2FuXCA7Civpg6jkvJogPCBidWthaVwgOwor5Yip5qC5IDwgcmlrb25cIDsKK+W0jumZvSA8IGtpeW91XCA7CivlubTmrKEgPCBuZW5qaVwgOwor5beu562JIDwgc2F0b3VcIDsKK+i7jOmBkyA8IGtpZG91XCA7CivpgbrlsL8gPCBpbnlvdVwgOwor5q275ZugIDwgc2hpaW5cIDsKK+WLsuS9jSA8IGt1bicnaVwgOwor6JGs5YW3IDwgc291Z3VcIDsKK+WGhuetkiA8IGVudG91XCA7CivliIbmr40gPCBidW5ib1wgOwor6Iy255uuIDwgY2hhbWVcIDsKK+W6l+aYryA8IHRlbnplXCA7Civli5/lhbUgPCBib2hlaVwgOwor5q6/5LiLIDwgZGVua2FcIDsKK+asneaGpCA8IHVwcHVuXCA7CivokazlhIAgPCBzb3VnaVwgOwor6YGV5b+DIDwgaXNoaW5cIDsKK+W8seWMliA8IGpha2thXCA7CivliqDlopcgPCBrYXpvdVwgOwor6YGK5oOwIDwgeXV1ZGFcIDsKK+WLn+WCtSA8IGJvc2FpXCA7CivpgY7mgKAgPCBrYXRhaVwgOwor5Ye65rGBIDwgZGFzaGlcIDsKK+ebo+eQhiA8IGthbnJpXCA7CivliY3miK8gPCB6ZW5naVwgOwor5bir54i2IDwgc2hpZnVcIDsKK+W6uOaEmiA8IHlvdWd1XCA7CivlvJXllqkgPCBpbicneXVcIDsKK+W4neeOiyA8IHRlaW91XCA7Civpgb/lpoogPCBoaW5pblwgOwor5YaF56eRIDwgbmFpa2FcIDsKK+W6j+aWhyA8IGpvYnVuXCA7Civou43ot68gPCBndW5yb1wgOwor5bqP5pWwIDwgam9zdXVcIDsKK+aui+WLmSA8IHphbm11XCA7CivliJ3mnJ8gPCBzaG9raVwgOwor6Lqr6YeNIDwgbWlvbW9cIDsKK+W6p+aJgCA8IHphc2hvXCA7CivovKroiJ4gPCByaW5idVwgOwor6YCU5pa5IDwgdG9ob3VcIDsKK+WEgOijhSA8IGdpc291XCA7Civlub3mmpcgPCB5dXVhblwgOwor6Iux57GzIDwgZWliZWlcIDsKK+i7jeiyuyA8IGd1bnBpXCA7CivprZTooZcgPCBtYWdhaVwgOwor6Lui6KibIDwgdGVua2FcIDsKK+i7ouiomCA8IHRlbmtpXCA7Civlh7HmrYwgPCBnYWlrYVwgOwor5qyh5bm0IDwgamluZW5cIDsKK+mBuuWiqCA8IGlib2t1XCA7CivpgYXlu7YgPCBjaGllblwgOwor5bm85pmCIDwgeW91amlcIDsKK+ebhueUuyA8IGJvbmdhXCA7CivliJHmnJ8gPCBrZWlraVwgOwor5bm05pyfIDwgbmVua2lcIDsKK+WLleS9nCA8IGRvdXNhXCA7Civlh7rmp5ggPCBkZXlvdVwgOwor6Iq46IuRIDwgZ2VpZW5cIDsKK+W8p+WFiSA8IGtva291XCA7CivmrYzlo4cgPCBrYWRhblwgOwor5YW156eRIDwgaGVpa2FcIDsKK+WKqeWRvSA8IGpvbWVpXCA7Civpq5jpm4UgPCBrb3VnYVwgOwor5bi45ripIDwgam91b25cIDsKK+WJjeW+jCA8IHplbmdvXCA7CivmrabllY8gPCBidW1vblwgOwor5Yq05YuZIDwgcm91bXVcIDsKK+W3ruebiiA8IHNhZWtpXCA7CivpgKPmiZMgPCByZW5kYVwgOwor5YSq6Im2IDwgeXV1ZW5cIDsKK+iKseiMjiA8IGtha2VpXCA7CivnoILkuIogPCBzYWpvdVwgOwor6LuN6K2wIDwgZ3VuZ2lcIDsKK+W5s+aZgiA8IGhlaWppXCA7CivkvIrlkYLms6IgPCBpcm9oYVwgOwor5YaG55ukIDwgZW5iYW5cIDsKK+WBvembuyA8IGdpZGVuXCA7Civnmq7nm7ggPCBoaXNvdVwgOwor6L+U5q2MIDwgaGVua2FcIDsKK+WJjeW6pyA8IHplbnphXCA7Civnl6nouq8gPCBzb3VrdVwgOwor5YiG5pyoIDwgYnVuZ2lcIDsKK+ato+WToSA8IHNlaWluXCA7CivlhoXnmq4gPCBuYWloaVwgOwor5qih56+EIDwgbW9oYW5cIDsKK+iKveiDniA8IGdhaG91XCA7CivliIDmnrYgPCB0b3VrYVwgOwor6LyJ6I23IDwgc2Fpa2FcIDsKK+earueZrCA8IGhpemVuXCA7CivpgYrlsbEgPCB5dXNhblwgOwor5q2m5ZCNIDwgYnVtZWlcIDsKK+S6nOmJm+iPryA8IGFlbmthXCA7Civoipnok4kgPCBmdXlvdVwgOwor5q275YWQIDwgc2hpamlcIDsKK+W6leaEjyA8IHNva29pXCA7Civoh6rpppYgPCBqaXNodVwgOwor6LuN6KiYIDwgZ3Vua2lcIDsKK+WKo+WMliA8IHJla2thXCA7CivpgaDlpKcgPCBlbmRhaVwgOwor5YW355y8IDwgZ3VnYW5cIDsKK+asoeWumCA8IGppa2FuXCA7CivmrKHlrZAgPCBqaXNoaVwgOwor5q2m5YuyIDwgYnVrdW5cIDsKK+W7tuWRvSA8IGVubWVpXCA7CivlhYPntKAgPCBnZW5zb1wgOwor5q2m5YuHIDwgYnV5dXVcIDsKK+atpuWKnyA8IGJ1a291XCA7Civlu7flkI8gPCB0ZWlyaVwgOwor5YaG55KwIDwgZW5rYW5cIDsKK+WyqemtmiA8IGl3YW5hXCA7CivliJ3miYsgPCBzaG90ZVwgOwor5YSq576OIDwgeXV1YmlcIDsKK+WEkuiJryA8IGp1Z29uXCA7CivlhZDnq6UgPCBqaWRvdVwgOwor5q2T5ZG8IDwga2Fua29cIDsKK+mzs+WHsCA8IGhvdW91XCA7Civnn6XkuosgPCBjaGlqaVwgOwor6YGT5aSuIDwgZG91b3VcIDsKK+i7jeihoyA8IGd1bicnaVwgOwor5Yi25bqmIDwgc2VpZG9cIDsKK+atqeWFtSA8IGhvaGVpXCA7CivlgZzpn7MgPCB0ZWlvblwgOwor5byV5L6LIDwgaW5yZWlcIDsKK+eXtOipsSA8IGNoaXdhXCA7CivliqDlhqAgPCBrYWthblwgOwor6YCj5bqnIDwgcmVuemFcIDsKK+mBoOWcsCA8IGVuY2hpXCA7Civnmb3npo0gPCBoYWtrYVwgOwor6YGO5aSnIDwga2FkYWlcIDsKK+iLm+eojiA8IGthemVpXCA7CivpgYrlpbMgPCB5dXVqb1wgOwor6Lyd57eaIDwga2lzZW5cIDsKK+WFpeebuCA8IGlyaWFpXCA7CivoiovojI4gPCB6dWlraVwgOwor55aO6ZaLIDwgc29rYWlcIDsKK+WJjeWppiA8IHplbnB1XCA7CivlgY/poJcgPCBoZW5wYVwgOwor6YG35YyWIDwgc2VuZ2VcIDsKK+e2reaMgeiyuyA8IGlqaWhpXCA7CivokL3kuIsgPCByYWtrYVwgOwor5YW354++IDwgZ3VnZW5cIDsKK+WGt+awlyA8IHJlaWtpXCA7CivlhJLogIUgPCBqdXNoYVwgOwor6IiX6YGTIDwgaG9kb3VcIDsKK+WFiOelliA8IHNlbnpvXCA7CivnmbrnoLQgPCBoYXBwYVwgOwor55Wz6Z+7IDwgam91aW5cIDsKK+ebuOajkiA8IGFpYm91XCA7Civlu4PlnJIgPCBoYWllblwgOwor6L+R5pmCIDwga2luamlcIDsKK+mtmuiCpSA8IGd5b2hpXCA7Civouo3otbcgPCB5YWtraVwgOwor6Iqx57SLIDwga2Ftb25cIDsKK+WFg+elliA8IGdhbnNvXCA7Civnm5fmsZcgPCBuZWFzZVwgOwor5q2m5Lq6IDwgYnVqaW5cIDsKK+iKseeyiSA8IGthZnVuXCA7CivoiJ7ouYggPCBidXRvdVwgOwor5bm+5bqmIDwgaWt1ZG9cIDsKK+asoeWbniA8IGppa2FpXCA7CivprLHokrwgPCB1c3NvdVwgOwor6Iie6LiKIDwgYnV5b3VcIDsKK+i8quemjSA8IHJpbmthXCA7CivliJHlvpIgPCBrZWl0b1wgOwor5bm05b6MIDwgbmVuZ29cIDsKK+mAo+WtkCA8IHJlbmppXCA7Civnm7jmnb8gPCBhaWJhblwgOwor5YmN5aC0IDwgemVuYmFcIDsKK+eUsOm6qSA8IGRlbmJ1XCA7Civlh7nmiYAgPCBvdXNob1wgOwor5YG96YCgIDwgZ2l6b3VcIDsKK+iLpueVjCA8IGt1Z2FpXCA7CivluLjmmYIgPCBqb3VqaVwgOwor6YKE5LuYIDwga2FucHVcIDsKK+mBi+WWtiA8IHVuJydlaVwgOwor5bm05bqmIDwgbmVuZG9cIDsKK+mAruWknCA8IHRhaXlhXCA7CivpgIDluqcgPCB0YWl6YVwgOwor5Yip5a6zIDwgcmlnYWlcIDsKK+iJseiLpiA8IGthbmt1XCA7CivmrKHlloQgPCBqaXplblwgOwor5Yip5a2QIDwgcmlzaGlcIDsKK+WIpeWutiA8IGJla2tlXCA7CivpgbrkvZwgPCBpc2FrdVwgOwor6I2S5pyoIDwgYXJha2lcIDsKK+WyqemWkyA8IGl3YW1hXCA7Civluq3lnJIgPCB0ZWllblwgOwor6a+o5rOiIDwgZ2VpaGFcIDsKK+W5tOW3riA8IG5lbnNhXCA7Civpr6jmsrkgPCBnZWl5dVwgOwor6Lm26LW3IDwga2Vra2lcIDsKK+WGhua6gCA8IGVubWFuXCA7CivovrLmnJ8gPCBub3VraVwgOwor5Yik5a2QIDwgaGFua29cIDsKK+iPr+WOsyA8IGtlZ29uXCA7CivpgaDlh7ogPCB0b29kZVwgOwor6YGL5ZG9IDwgdW5tZWlcIDsKK+mBk+WMliA8IGRvdWtlXCA7CivmrYzku5kgPCBrYXNlblwgOwor6Lui576pIDwgdGVuZ2lcIDsKK+asoeWPtyA8IGppZ291XCA7CivmrYzkurogPCBrYWppblwgOwor55u45pKyIDwgc3Vtb3VcIDsKK+iJtuiBniA8IGVuYnVuXCA7Civluo/lpY8gPCBqb3NvdVwgOwor6L+R5omAIDwga2luam9cIDsKK+WHoeaJkyA8IGJvbmRhXCA7Civlh7nlvaIgPCBvdWtlaVwgOwor6IiO6LK7IDwgc2hhaGlcIDsKK+mBjuWLpCA8IGtha2luXCA7CivpgY7lirQgPCBrYXJvdVwgOwor6Ieq6YK4IDwgaml0ZWlcIDsKK+mBi+WLoiA8IHVuc2VpXCA7Civlt6jms6IgPCBreW9oYVwgOwor6YGL5YuVIDwgdW5kb3VcIDsKK+i+nuafhCA8IGppaGVpXCA7CivpgY7libAgPCBrYWpvdVwgOwor55Wd6ZaTIDwgdW5lbWFcIDsKK+iHqumBuCA8IGppc2VuXCA7Civovp7mnpcgPCBqaXJpblwgOwor5bmz5a62IDwgaGVpa2VcIDsKK+mAuOWTgSA8IGlwcGluXCA7CivpgZPlhbcgPCBkb3VndVwgOwor5bmz5a6JIDwgaGVpYW5cIDsKK+eahueEoSA8IGthaW11XCA7Civlh6HmhJogPCBib25ndVwgOwor5YiG5bKQIDwgYnVua2lcIDsKK+WJjeWPpCA8IHplbmtvXCA7CivnlLvppIUgPCBnYWJlaVwgOwor5L6d5Lyw5ZywIDwgZWtvamlcIDsKK+i+nuabuCA8IGppc2hvXCA7CivpgKDlnJIgPCB6b3VlblwgOwor5Ymw5L2ZIDwgam91eW9cIDsKK+W6tuWLmSA8IHNob211XCA7CivnlLvpoqggPCBnYWZ1dVwgOwor5YSA56+EIDwgZ2loYW5cIDsKK+iKs+eciSA8IGhvdWJpXCA7CivliJ3lpJwgPCBzaG95YVwgOwor5qi55rayIDwganVla2lcIDsKK+WIneWkjyA8IHNob2thXCA7CivluIzmnJsgPCBraWJvdVwgOwor5beo5q2pIDwga3lvaG9cIDsKK+W5vOWlsyA8IHlvdWpvXCA7CivnlLvpoYwgPCBnYWRhaVwgOwor5YiG5a62IDwgYnVua2VcIDsKK+W4jOabuCA8IGtpc2hvXCA7CivluLDmipUgPCBraXRvdVwgOwor5Yak5p6JIDwgZW4nJ291XCA7CivmqLnmtbcgPCBqdWthaVwgOwor5bm+5aScIDwgaWt1eW9cIDsKK+W5vuWkmiA8IGlrdXRhXCA7CivmrKHlhYQgPCBqaWtlaVwgOwor5qyh5YWDIDwgamlnZW5cIDsKK+i/t+WtkCA8IG1haWdvXCA7CivmqZ/morAgPCBraWthaVwgOwor5bqn5Y+zIDwgemF5dXVcIDsKK+W5u+WkoiA8IGdlbm11XCA7CivlhYjniLYgPCBzZW5wdVwgOwor6YGh5LiKIDwgc29qb3VcIDsKK+apn+aguSA8IGtpa29uXCA7Civlgb3oqpMgPCBnaXNlaVwgOwor6YCg5Za2IDwgem91ZWlcIDsKK+iIl+ijhSA8IGhvc291XCA7CivnlbDpg7cgPCBpa3lvdVwgOwor55S76Z2iIDwgZ2FtZW5cIDsKK+WAjemfsyA8IGJhaW9uXCA7Civmo4vpoqggPCBraWZ1dVwgOwor5YG96KiIIDwgZ2lrZWlcIDsKK+ebuOaEmyA8IHNvdWFpXCA7Civlgb3oqIAgPCBnaWdlblwgOwor5YG26KqeIDwgZ3V1Z29cIDsKK+apn+adkCA8IGtpemFpXCA7CivmrKHkvr8gPCBqaWJpblwgOwor6YCj5ZG8IDwgcmVua29cIDsKK+W3puanmCA8IHNheW91XCA7CivlgbboqaAgPCBndXVlaVwgOwor6a2U56WeIDwgbWFqaW5cIDsKK+W7iuS4iyA8IHJvdWthXCA7CivpqZ/pm6ggPCBzaHV1dVwgOwor55uy5oSbIDwgbW91YWlcIDsKK+WGjeahiCA8IHNhaWFuXCA7CivmhI/msJflnLAgPCBpa3VqaVwgOwor5YSA56S8IDwgZ2lyZWlcIDsKK+iHquizmyA8IGppc2FuXCA7CivpgKPlj6UgPCByZW5rdVwgOwor6Lev6aCtIDwgcm90b3VcIDsKK+i/t+WkoiA8IG1laW11XCA7Civoi7Hms5UgPCBlaWhvdVwgOwor6Ieq6LKpIDwgamloYW5cIDsKK+iLpua4iyA8IGt1anV1XCA7Civnm7jlv5wgPCBzb3VvdVwgOwor5qyh5LujIDwgamlkYWlcIDsKK+WwvumwrSA8IG9iaXJlXCA7CivluKvmgakgPCBzaGlvblwgOwor5YWs5q2mIDwga291YnVcIDsKK+i7ouenuyA8IHRlbicnaVwgOwor6Lev6Z2iIDwgcm9tZW5cIDsKK+Wyoei+uiA8IG9rYWJlXCA7CivlgYnouZ8gPCBpc2VraVwgOwor5YWa5rS+IDwgdG91aGFcIDsKK+mBi+S4iiA8IHVuam91XCA7Civmpa3oi6YgPCBnb3VrdVwgOwor5bGk6ZuyIDwgc291dW5cIDsKK+W6p+WDjyA8IHphem91XCA7CivluLfluZUgPCBpYmFrdVwgOwor5bi35bizIDwgaWNob3VcIDsKK+WIqeWPoyA8IHJpa291XCA7CivmqZ/mlY8gPCBraWJpblwgOwor5YWl5q2vIDwgaXJlYmFcIDsKK+W6tuS6iyA8IHNob2ppXCA7CivprZTnnaEgPCBtYXN1aVwgOwor5qiq5q27IDwgb3VzaGlcIDsKK+i7jOevhCA8IGtpaGFuXCA7CivlhobmnKwgPCBlbnBvblwgOwor5YSS55SfIDwganVzZWlcIDsKK+W3oeafuyA8IGp1bnNhXCA7Civlho3mmKAgPCBzYWllaVwgOwor5bq15Li7IDwgYW5zaHVcIDsKK+iHquiqjSA8IGppbmluXCA7CivoirHniYcgPCBrYWhlblwgOwor6ay856WeIDwga2lqaW5cIDsKK+i8uOa2siA8IHl1ZWtpXCA7CivnlJjpnLIgPCBrYW5yb1wgOwor5qqA5b6SIDwgZGFudG9cIDsKK+eVsOixoSA8IGlzaG91XCA7CivojILmnpcgPCBtb3JpblwgOwor5L+d6aSKIDwgaG95b3VcIDsKK+WFieazoiA8IGtvdWhhXCA7Civot53pm6IgPCBreW9yaVwgOwor5bem5pa5IDwgc2Fob3VcIDsKK+W6p+S5lyA8IHpham91XCA7CivmqLnmnpcgPCBqdXJpblwgOwor6a2U55WMIDwgbWFrYWlcIDsKK+W5s+WSjCA8IGhlaXdhXCA7CivlhbfmnIkgPCBndXl1dVwgOwor5YWs5qGIIDwga291YW5cIDsKK+WHpuWlsyA8IHNob2pvXCA7CivluJ3luqcgPCB0ZWl6YVwgOwor5YiR5ZCPIDwga2VpcmlcIDsKK+mAgeWPlyA8IHNvdWp1XCA7Civlt67mkI0gPCBzYXNvblwgOwor5qih5qeYIDwgbW95b3VcIDsKK+apn+aJjSA8IGtpc2FpXCA7Civlh6HlpKsgPCBib25wdVwgOwor5Yi75LiLIDwga29ra2FcIDsKK+mAgOWMliA8IHRhaWthXCA7Civlh4blsIkgPCBqdW4nJ2lcIDsKK+WGtuW3pSA8IHlha291XCA7CivmqKrmn4QgPCBvdWhlaVwgOwor5YW45pWFIDwgdGVua29cIDsKK+iJsuebriA8IGlyb21lXCA7CivliKnkvr8gPCByaWJlblwgOwor55S76YGTIDwgZ2Fkb3VcIDsKK+i3r+mKgCA8IHJvZ2luXCA7CivojYnlsaUgPCB6b3VyaVwgOwor5L+d6Zm6IDwgaG9rZW5cIDsKK+W5tOWIqSA8IG5lbnJpXCA7Civoi7Hmm7ggPCBlaXNob1wgOwor5YWt5pelIDwgbXVpa2FcIDsKK+WIhuWMuiA8IGJ1bmt1XCA7Civlhavml6UgPCB5b3VrYVwgOwor5YWs5pa5IDwga3Vib3VcIDsKK+aoquaatCA8IG91Ym91XCA7CivlhqXlupwgPCBtZWlmdVwgOwor5YiR5YW3IDwga2VpZ3VcIDsKK+iLpuadryA8IGt1aGFpXCA7Civoi7HmmI4gPCBlaW1laVwgOwor5qqA5a62IDwgZGFua2FcIDsKK+aooeacrCA8IG1vaG9uXCA7CivlhaXml6UgPCBpcmloaVwgOwor5bC+6ZW3IDwgb25hZ2FcIDsKK+i+suWppiA8IG5vdWZ1XCA7CivlsI/prKIgPCBrb2JpblwgOwor5Yik5LqLIDwgaGFuamlcIDsKK+WIhuWIqSA8IGJ1bnJpXCA7Civoi7Hmlq0gPCBlaWRhblwgOwor5YKF6IKyIDwgZnVpa3VcIDsKK+aoquaWrSA8IG91ZGFuXCA7Civoi7HmlocgPCBlaWJ1blwgOwor5Yeh5ZmoIDwgYm9ua2lcIDsKK+iLseaVsCA8IGVpc3V1XCA7CivlhrTlr5IgPCBnb2thblwgOwor6YCU5LiKIDwgdG9qb3VcIDsKK+W4g+W3viA8IGZ1a2luXCA7Civnm7jloLQgPCBzb3ViYVwgOwor6aiS6Z+zIDwgc291b25cIDsKK+WFmuaYryA8IHRvdXplXCA7CivovrLlpbQgPCBub3Vkb1wgOwor55So6YCUIDwgeW91dG9cIDsKK+WFieaghCA8IGtvdWVpXCA7CivojLblsYsgPCBjaGF5YVwgOwor6Ly/5pybIDwgeW9ib3VcIDsKK+iHquiRlyA8IGppY2hvXCA7CivlhZDmm7kgPCBqaXNvdVwgOwor5Ye65YmNIDwgZGVtYWVcIDsKK+Wwj+mmrCA8IGtvdW1hXCA7Civojbflj7AgPCBuaWRhaVwgOwor55SY6YWiIDwgYW1henVcIDsKK+iLl+acqCA8IG5hZWdpXCA7Civpp7vppqwgPCBrYW5iYVwgOwor55S76LObIDwgZ2FzYW5cIDsKK+eZveaXlyA8IGhha2tpXCA7CivpgIHku5ggPCBzb3VmdVwgOwor5YaF5b+cIDwgbmFpb3VcIDsKK+WHjeWcnyA8IHRvdWRvXCA7CivluK/lnLAgPCBvYmlqaVwgOwor6L665ZyfIDwgaGVuZG9cIDsKK+WwvumMoCA8IGJpam91XCA7CivliJHkuosgPCBrZWlqaVwgOwor5YaG5by+IDwgZW5kYW5cIDsKK+ebruWeoiA8IG1lYWthXCA7Civov5Hlj6QgPCBraW5rb1wgOwor6Lu95rWuIDwga2VpZnVcIDsKK+iLm+aWgiA8IGthcmVuXCA7Civou6LngokgPCB0ZW5yb1wgOwor6L6y5ZySIDwgbm91ZW5cIDsKK+W3u+WwviA8IGthbmJpXCA7Civnp4vliIDprZogPCBzYW5tYVwgOwor5L2z6bqXIDwga2FyZWlcIDsKK+iJtueEtiA8IGVuemVuXCA7Civoi7HmiY0gPCBlaXNhaVwgOwor6IWw6YOoIDwgeW91YnVcIDsKK+i7veayuSA8IGtlaXl1XCA7CivluYfliqkgPCBob3Vqb1wgOwor5YaF5biRIDwgbmFpZG9cIDsKK+eUu+irhyA8IGdhZGFuXCA7CivlhpnlrZcgPCBzaGFqaVwgOwor5L6b6aSKIDwga3V5b3VcIDsKK+WAkuiqniA8IHRvdWdvXCA7CivprLzngasgPCBvbmliaVwgOwor6a2a5rK5IDwgZ3lveXVcIDsKK+W4neWcnyA8IHRlaWRvXCA7CivmqZ/lq4wgPCBraWdlblwgOwor6Iqx5qKoIDwga2FyaW5cIDsKK+WFjOaPmyA8IGRha2FuXCA7CivprZTms5UgPCBtYWhvdVwgOwor6Ium5oimIDwga3VzZW5cIDsKK+WCt+eXjSA8IHNob3VpXCA7CivlgJnoo5wgPCBrb3Vob1wgOwor5bi45YuZIDwgam91bXVcIDsKK+W4sOWPgiA8IGtpc2FuXCA7CivlhoblsYUgPCBtYWRvaVwgOwor5qi55bm5IDwganVrYW5cIDsKK+iLpuaFriA8IGt1cnlvXCA7CivppqzpvaIgPCBiYXJlaVwgOwor5L2Z6b2iIDwgeW9yZWlcIDsKK+eXlOeYuyA8IGppcm91XCA7Civlt6jlr4wgPCBreW9mdVwgOwor5YWs5bqrIDwga291a29cIDsKK+WCmeegsiA8IGJpaG91XCA7Civlhazluo8gPCBrb3Vqb1wgOwor6Ium5oOFIDwga3Vqb3VcIDsKK+iMtuWckiA8IGNoYWVuXCA7Civoi6bmgrYgPCBrdW1vblwgOwor6Ium5oKpIDwga3Vub3VcIDsKK+eUqOiqniA8IHlvdWdvXCA7Civlt6blrpggPCBzYWthblwgOwor5qeQ5qi5IDwga2FpanVcIDsKK+WGl+WkmiA8IGpvdXRhXCA7Civou5/mtL4gPCBuYW5wYVwgOwor5YWs5biDIDwga291ZnVcIDsKK+eVsOiFuSA8IGlmdWt1XCA7CivlhYjmiYsgPCBzZW50ZVwgOwor5YWs5beuIDwga291c2FcIDsKK+iMtuWZqCA8IGNoYWtpXCA7Civoh5PohZEgPCB6b3VmdVwgOwor6ayx5rueIDwgdXR0YWlcIDsKK+ahgummrCA8IGtlaW1hXCA7Civov5Tku5ggPCBoZW5wdVwgOwor5qKF6YWiIDwgdW1lenVcIDsKK+i+suWLmSA8IG5vdW11XCA7CivluLjlgpkgPCBqb3ViaVwgOwor6Ium5b25IDwga3Vla2lcIDsKK+iIjOemjSA8IHpla2thXCA7CivltZDmsJcgPCByYW5raVwgOwor5qK16KqeIDwgYm9uZ29cIDsKK+ecjOS4iyA8IGtlbmthXCA7CivohZXovKogPCB1ZGV3YVwgOwor6LW36Zu7IDwga2lkZW5cIDsKK+W4q+WEkiA8IHNoaWp1XCA7CivlrrbptKggPCBhaGlydVwgOwor5a+d6aGUIDwgbmVnYW9cIDsKK+i+suWFtyA8IG5vdWd1XCA7CivluILllrYgPCBzaGllaVwgOwor5YaG5aKzIDwgZW5wdW5cIDsKK+iJsuawlyA8IGlyb2tlXCA7Civovp7ljrsgPCBqaWt5b1wgOwor6ay85q2vIDwgb25pYmFcIDsKK+WwgemOliA8IGZ1dXNhXCA7Civoi7Hlsa8gPCBlaXRvblwgOwor5bCW6YOoIDwgc2VuYnVcIDsKK+W3peWgtCA8IGtvdWJhXCA7CivnmbrluIMgPCBoYXBwdVwgOwor5biw5Lu7IDwga2luaW5cIDsKK+WFhOW+jCA8IGFuaWdvXCA7Civlhavph43mra8gPCB5YWViYVwgOwor5YC26ICFIDwga3VzaGFcIDsKK+S/muiruiA8IHJpZ2VuXCA7Civkv47osYYgPCBzb3RvdVwgOwor55Sf6J2LIDwga2lyb3VcIDsKK+WFi+W3sSA8IGtva2tpXCA7CivlhoXlm6AgPCBuYWlpblwgOwor6Leb6KGMIDwgaGFrb3VcIDsKK+ebsuS6gCA8IG1vdWtpXCA7Civoi6blr5IgPCBrdWthblwgOwor55ar55eiIDwgZWtpcmlcIDsKK+ebm+WEgCA8IHNlaWdpXCA7CivluILljLogPCBzaGlrdVwgOwor6aas6aaWIDwgYmFzaHVcIDsKK+S9memmmSA8IHlva291XCA7CivnmbvlsbEgPCB0b3phblwgOwor5YaX5Y+lIDwgam91a3VcIDsKK+Wkp+S8r+eItiA8IG9vb2ppXCA7CivovrLkuosgPCBub3VqaVwgOwor5qip5aiBIDwga2VuJydpXCA7Civnm67kuIsgPCBtb2trYVwgOwor5bau5bKoIDwga2Vuc29cIDsKK+iHquekviA8IGppc2hhXCA7CivnlqPnl5QgPCBpYm9qaVwgOwor5L2Z6aKoIDwgeW9mdXVcIDsKK+S9memhniA8IHlvcnVpXCA7CivlhZDlrasgPCBqaXNvblwgOwor6aas6aCtIDwgYmF0b3VcIDsKK+eUmOiXuyA8IGFtYW1vXCA7CivlrrbpoqggPCBrYWZ1dVwgOwor6Im25pu4IDwgZW5zaG9cIDsKK+WEquW8pyA8IHl1dWtvXCA7Civovp7ku6QgPCBqaXJlaVwgOwor5qOJ6IqxIDwgbWVua2FcIDsKK+apn+WGhSA8IGtpbmFpXCA7Civlhazlm7MgPCBrb3V6dVwgOwor5YW15Za2IDwgaGVpZWlcIDsKK+eUsOiIjiA8IGluYWthXCA7Civlt6blj7MgPCBzYXl1dVwgOwor5YWo5ZyfIDwgemVuZG9cIDsKK+WFqOWbsyA8IHplbnp1XCA7Civog6/plpMgPCBrb2thblwgOwor55S76IGWIDwgZ2FzZWlcIDsKK+W4jOS7oyA8IGtpZGFpXCA7CivlsI/osYYgPCBhenVraVwgOwor5YW15ZOhIDwgaGVpaW5cIDsKK+ahiOmFjSA8IGFuYmFpXCA7Civlrrbpm7sgPCBrYWRlblwgOwor5YaF5YuZIDwgbmFpbXVcIDsKK+WwiuiytCA8IHNvbmtpXCA7Civlt67liIYgPCBzYWJ1blwgOwor5YaF5YqpIDwgbmFpam9cIDsKK+eTpuinoyA8IGdha2FpXCA7CivlhqDkvY0gPCBrYW4nJ2lcIDsKK+aiheimiyA8IHVtZW1pXCA7Civlt6Xli5kgPCBrb3VtdVwgOwor5qih5Z6LIDwgbW9rZWlcIDsKK+aghOmkiiA8IGVpeW91XCA7Civkv5jomZwgPCBmdXJ5b1wgOwor6a2U5omLIDwgbWFzaHVcIDsKK+S9jumbsiA8IHRlaXVuXCA7CivluIPku6QgPCBmdXJlaVwgOwor55m95aCKIDwgaGFrdWFcIDsKK+WFvOWLmSA8IGtlbm11XCA7Civot6/ogqkgPCByb2tlblwgOwor5Ly86aGUIDwgbmlnYW9cIDsKK+eUsue+hSA8IGtvdXJhXCA7Civoh6rnlLEgPCBqaXl1dVwgOwor5qOE6IOMIDwga2loYWlcIDsKK+S+v+ihoyA8IGJlbicnaVwgOwor5YaG5YWJIDwgZW5rb3VcIDsKK+iHqueUqCA8IGppeW91XCA7Civkvb/pgJQgPCBzaGl0b1wgOwor6Lu95b6uIDwga2VpYmlcIDsKK+WFteWMqiA8IGhlaWhpXCA7Civlt6XlhbcgPCBrb3VndVwgOwor55m75Z2CIDwgdG9oYW5cIDsKK+WvjOmJsSA8IGZ1a291XCA7Civkvq7oqIAgPCBidWdlblwgOwor6Ly/5ZywIDwgeW9jaGlcIDsKK+iKuOWtkCA8IGdlaWtvXCA7Civog4zpm6IgPCBoYWlyaVwgOwor5bem5YK+IDwgc2FrZWlcIDsKK+S/neiPjCA8IGhva2luXCA7CivlhavljaYgPCBoYWtrZVwgOwor6Lu95bqmIDwga2VpZG9cIDsKK+W3tOS6uiA8IGhhamluXCA7CivnlLvntJkgPCBnYXNoaVwgOwor5YWs5YufIDwga291Ym9cIDsKK+eVquebriA8IGJhbm1lXCA7CivlpKfkvK/mr40gPCBvb29iYVwgOwor5YW85YKZIDwga2VuYmlcIDsKK+WvhOmHkSA8IGtpa2luXCA7CivotbDot68gPCBzb3Vyb1wgOwor6a2U5by+IDwgbWFkYW5cIDsKK+WyoeebriA8IG9rYW1lXCA7CivlrpjpnIAgPCBrYW5qdVwgOwor55Ge6ZuyIDwgenVpdW5cIDsKK+mrmOa4qSA8IGtvdW9uXCA7CivlsL7oirEgPCBvYmFuYVwgOwor5a++6KmxIDwgdGFpd2FcIDsKK+S8nemmrCA8IHRlbm1hXCA7CivovY3lj4kgPCB0ZXNzYVwgOwor5L6d6KiXIDwgaXRha3VcIDsKK+iEs+ijoSA8IG5vdXJpXCA7CivmqKnljJYgPCBnb25nZVwgOwor6Ium5ZCfIDwga3VnaW5cIDsKK+iKuOWmkyA8IGdlaWdpXCA7Civot6/nt5ogPCByb3NlblwgOwor6LWk6LqrIDwgYWthbWlcIDsKK+WFteWCmSA8IGhlaWJpXCA7Civlr4zovrIgPCBmdW5vdVwgOwor5L+u576FIDwgc2h1cmFcIDsKK+iKpeWtkCA8IGtlc2hpXCA7CivnlpHngrkgPCBnaXRlblwgOwor5qi95L+OIDwgc29uc29cIDsKK+S+jeismyA8IGppa291XCA7Civou43miYsgPCBndW50ZVwgOwor5qip5YipIDwga2VucmlcIDsKK+S8mumjsiA8IGthaWluXCA7Civlhbjkvo0gPCB0ZW5qaVwgOwor5a6J6Z2ZIDwgYW5zZWlcIDsKK+mnhei3ryA8IGVraXJvXCA7CivlhaXlhoUgPCBqdWRhaVwgOwor5YWa5YuZIDwgdG91bXVcIDsKK+WFt+S9kyA8IGd1dGFpXCA7Civnmbrlj6UgPCBob2trdVwgOwor6Ium5Yq0IDwga3Vyb3VcIDsKK+anmOWtkCA8IHlvdXN1XCA7Civkv53ogrIgPCBob2lrdVwgOwor55S756i/IDwgZ2Frb3VcIDsKK+S+i+ipsSA8IHJlaXdhXCA7CivlhajlgpkgPCB6ZW5iaVwgOwor5YWa5YipIDwgdG91cmlcIDsKK+iHqueCiiA8IGppc3VpXCA7CivkvbPos5MgPCBrYWhpblwgOwor55Sf57O4IDwga2lpdG9cIDsKK+aooeWGmSA8IG1vc2hhXCA7Civlg6flvpIgPCBzb3V0b1wgOwor55aO5ryPIDwgc29yb3VcIDsKK+WuiemWkSA8IGFua2FuXCA7CivmqLnkuIogPCBqdWpvdVwgOwor5L2Z6LypIDwgeW9oYWlcIDsKK+aiheiKsSA8IGJhaWthXCA7CivlhIDlrrkgPCBnaXlvdVwgOwor55Sw56efIDwgZGVuc29cIDsKK+mmrOi7iiA8IGJhc2hhXCA7CivlhYjli5kgPCBzZW5tdVwgOwor5L+6562JIDwgb3JlcmFcIDsKK+aooeWAoyA8IG1vaG91XCA7Civlr4zosaogPCBmdWdvdVwgOwor6aas6LmEIDwgYmF0ZWlcIDsKK+i3teelmiA8IHNlbnNvXCA7Civot6/nqIsgPCByb3RlaVwgOwor57Sr6Zuy6IuxIDwgZ2VuZ2VcIDsKK+WvhOi0iCA8IGtpem91XCA7CivkvZPouq8gPCB0YWlrdVwgOwor55e05oSaIDwgY2hpZ3VcIDsKK+iDjOmDqCA8IGhhaWJ1XCA7Civkv53nt5ogPCBob3NlblwgOwor6Iux5Li7IDwgZWlzaHVcIDsKK+WFg+WIqSA8IGdlbnJpXCA7CivlgKvnkIYgPCByaW5yaVwgOwor6LuK5bqrIDwgc2hha29cIDsKK+Wvk+ipsSA8IGd1dXdhXCA7Civnlo/msLQgPCBzb3N1aVwgOwor5L2Z6LKhIDwgeW96YWlcIDsKK+iEvuiHnyA8IGhpem91XCA7Civlg6flsLwgPCBzb3VuaVwgOwor55m65L2cIDwgaG9zc2FcIDsKK+iHquayuyA8IGppY2hpXCA7CivnmZLlkIggPCB5dWdvdVwgOwor5YWF5YKZIDwganV1YmlcIDsKK+iEvuiFqyA8IGhpc2h1XCA7CivlsL7nsaAgPCBiaXJvdVwgOwor55eb5omLIDwgaXRhZGVcIDsKK+WutuiyoSA8IGthemFpXCA7Civou6LlqYYgPCB0ZW5iYVwgOwor6ay85a2QIDwgb25pZ29cIDsKK+WumOmAlCA8IGthbnRvXCA7Civoh6rmsJEgPCBqaW1pblwgOwor5L+d566hIDwgaG9rYW5cIDsKK+aghOi7oiA8IGVpdGVuXCA7CivmpJzms6IgPCBrZW5wYVwgOwor5a2X6Z2iIDwgamltZW5cIDsKK+i3r+ebpCA8IHJvYmFuXCA7CivoiLXmiYsgPCBkYXNodVwgOwor5L2Z6KuHIDwgeW9kYW5cIDsKK+WvjOijlSA8IGZ1eXV1XCA7CivnlKPnnYAgPCB1YnVnaVwgOwor5YGP5rOiIDwgaGVuaGFcIDsKK+WBveacrCA8IGdpaG9uXCA7Civoibblp78gPCBlbnNoaVwgOwor5YSq5YipIDwgeXV1cmlcIDsKK+alteaEjyA8IGdva3VpXCA7Civku67pnaIgPCBrYW1lblwgOwor5YG95pu4IDwgZ2lzaG9cIDsKK+Wyoea5ryA8IG9rYXl1XCA7Civkv53nqI4gPCBob3plaVwgOwor5L2Z6KiIIDwgeW9rZWlcIDsKK+WDheW3riA8IGtpbnNhXCA7Civkv6/nnrAgPCBmdWthblwgOwor6Ieo5qmfIDwgcmlua2lcIDsKK+acquabvuaciSA8IG1pem91XCA7CivoiYfluqsgPCB0ZWlrb1wgOwor5bCK6ICFIDwgc29uamFcIDsKK+i3oeebriA8IGF0b21lXCA7Civot6/nlKggPCByb3lvdVwgOwor5a626KiTIDwga2FrdW5cIDsKK+S9juiqniA8IHRlaWdvXCA7Civlrp/osrsgPCBqaXBwaVwgOwor5YK+5beuIDwga2Vpc2FcIDsKK+eUt+eMqyA8IG9uZWtvXCA7CivnlKbnlJ8gPCBzb3NlaVwgOwor6LW36I2JIDwga2lzb3VcIDsKK+S9meijlSA8IHlveXV1XCA7CivltanlkbwgPCBzdXVrb1wgOwor5a6Y6LK7IDwga2FucGlcIDsKK+mkiumviSA8IHlvdXJpXCA7Civou43lpKsgPCBndW5wdVwgOwor55aO5p6XIDwgc29yaW5cIDsKK+WutuijgSA8IGthc2FpXCA7Civkv7PnlLsgPCBoYWlnYVwgOwor5LuW6Z2iIDwgdGFtZW5cIDsKK+Wwj+e0iyA8IGtvbW9uXCA7CivnlJ/nkIYgPCBzZWlyaVwgOwor6IWL56qpIDwgZWtpa2FcIDsKK+S7mOmajyA8IGZ1enVpXCA7Civlrrbonb8gPCBpZWJhZVwgOwor5qSc5p+7IDwga2Vuc2FcIDsKK+WCmeW/mCA8IGJpYm91XCA7CivlsI/nsosgPCBrb2lraVwgOwor5a6f6KiYIDwgamlra2lcIDsKK+S6uummrCA8IGppbmJhXCA7CivlhITliqsgPCBva2t1dVwgOwor6Ieq5pq0IDwgamlib3VcIDsKK+S+v+enmCA8IGJlbnBpXCA7CivlrpjoqbEgPCBrYW53YVwgOwor5Lyv54i26LK0IDwgb2ppa2lcIDsKK+eWjuaUviA8IHNvaG91XCA7CivkvZnolqsgPCB5b2t1blwgOwor6Ieq5piOIDwgamltZWlcIDsKK+iHqOaZgiA8IHJpbmppXCA7CivppIzpo58gPCBlamlraVwgOwor5a6a6KaPIDwgam91Z2lcIDsKK+iIueWwviA8IHNlbmJpXCA7Civku4rpmpsgPCBpbWF3YVwgOwor5YSE5YaGIDwgb2t1ZW5cIDsKK+WEgOWIgCA8IGdpdG91XCA7CivlrojorbcgPCBzaHVnb1wgOwor5Lya6LK7IDwga2FpaGlcIDsKK+WyqeaguSA8IGl3YW5lXCA7CivnlLfmu50gPCBvZGFraVwgOwor55Oc56eRIDwgdXJpa2FcIDsKK+i7veS+riA8IGtlaWJ1XCA7CivkvpvnsbMgPCBrdW1haVwgOwor5qCE6J66IDwgc2F6YWVcIDsKK+WApOautSA8IG5lZGFuXCA7CivlraTou40gPCBrb2d1blwgOwor5YG95oKqIDwgZ2lha3VcIDsKK+S6nOm6u+S7gSA8IGFtYW5pXCA7CivnlrLlvIogPCBoaWhlaVwgOwor5Lya6K2wIDwga2FpZ2lcIDsKK+adpemnlSA8IHJhaWdhXCA7Civpq5jluqcgPCBrb3V6YVwgOwor6Imv5Yy7IDwgcnlvdWlcIDsKK+S8neiomCA8IGRlbmtpXCA7CivkvJroqbEgPCBrYWl3YVwgOwor5L2Z6IqzIDwgeW9ob3VcIDsKK+S5sem6uyA8IHJhbm1hXCA7Civlgpjlr78gPCBzYW5qdVwgOwor5bGx5rKzIDwgc2FuZ2FcIDsKK+iAs+mghiA8IGppanVuXCA7CivkvL3ol40gPCBnYXJhblwgOwor5YSA5LuXIDwgZ2lqb3VcIDsKK+WuiOihmyA8IHNodWVpXCA7Civou43li5kgPCBndW5tdVwgOwor55Sj5rmvIDwgdWJ1eXVcIDsKK+mmmeiPryA8IGtvdWdlXCA7CivlsL7nh4ggPCBiaXRvdVwgOwor5L6b56WtIDwgZ3VzYWlcIDsKK+izk+i+niA8IGhpbmppXCA7CivkupTljYHot68gPCBpc29qaVwgOwor6Iie5a2QIDwgbWFpa29cIDsKK+iHquaFoiA8IGppbWFuXCA7Civmpb3lmaggPCBnYWtraVwgOwor55aR5b+1IDwgZ2luZW5cIDsKK+S9meiBniA8IHlvYnVuXCA7CivlraboqrIgPCBnYWtrYVwgOwor6aas6ICVIDwgYmFrb3VcIDsKK+i4j+afuyA8IHRvdXNhXCA7CivnlLvmpbwgPCBnYXJvdVwgOwor6ISx55quIDwgZGFwcGlcIDsKK+adpemZoiA8IHJhaWluXCA7Civkvo3npa0gPCBqaXNhaVwgOwor6LuN5YKZIDwgZ3VuYmlcIDsKK+eUo+awlyA8IHNhbmtlXCA7CivnlKPmr5sgPCB1YnVnZVwgOwor6IWQ54ibIDwgZnVyYW5cIDsKK+iEseeWvSA8IGRhc3NvXCA7CivlsqnmiLggPCBpd2F0b1wgOwor5a+/55uDIDwganVoYWlcIDsKK+iHquW8gSA8IGppYmVuXCA7CivnlarmiYsgPCBiYW50ZVwgOwor5YG45a6JIDwgdG91YW5cIDsKK+Wwj+eQtCA8IG9nb3RvXCA7Civkv4TnhLYgPCBnYXplblwgOwor55S75p2/IDwgZ2FiYW5cIDsKK+Wtl+iokyA8IGppa3VuXCA7CivmorPmr5sgPCBzb21vdVwgOwor6aOb6Zu7IDwgaGlkZW5cIDsKK+S6jOmajiA8IG5pa2FpXCA7CivnlLvmnZAgPCBnYXphaVwgOwor6LuN5LqLIDwgZ3VuamlcIDsKK+eQhuiyoSA8IHJpemFpXCA7CivnlLvmnKwgPCBnYWhvblwgOwor55W45b2iIDwga2lrZWlcIDsKK+S7o+itsCA8IGRhaWdpXCA7CivotbDnoLQgPCBzb3VoYVwgOwor5YK15YuZIDwgc2FpbXVcIDsKK+i6q+WIhiA8IG1pYnVuXCA7Civos4Tos4IgPCB3YWlyb1wgOwor6IKy6IuxIDwgaWt1ZWlcIDsKK+Wwj+eKrCA8IGtvaW51XCA7CivnlLHmnaUgPCB5dXJhaVwgOwor5Ly9576FIDwga3lhcmFcIDsKK+S7j+iyqCA8IGZ1a2thXCA7CivmnbHpg70gPCB0b3V0b1wgOwor5p2x6YOoIDwgdG91YnVcIDsKK+S7ruijhSA8IGthc291XCA7Civoh6rlsL0gPCBqaWppblwgOwor55CG6KuWIDwgcmlyb25cIDsKK+WBj+W3riA8IGhlbnNhXCA7CivlsIrniLYgPCBzb25wdVwgOwor5YG95aCxIDwgZ2lob3VcIDsKK+Wumue+qSA8IHRlaWdpXCA7Civlgpnlk4EgPCBiaWhpblwgOwor6LKo6LuKIDwga2FzaGFcIDsKK+S/l+awlyA8IHpva2tlXCA7Civoh6rlrrMgPCBqaWdhaVwgOwor6LK46LK7IDwgdGFpaGlcIDsKK+eVmeaEjyA8IHJ5dXVpXCA7CivkvZXnrocgPCBuYW5rb1wgOwor5YCL5pWwIDwga29zdXVcIDsKK+WvneebuCA8IG5lem91XCA7CivporbpoqggPCBndWZ1dVwgOwor5qGC55quIDwga2VpaGlcIDsKK+mjsumFkiA8IGluc2h1XCA7CivkuqjpgYsgPCBrb3V1blwgOwor55CG6KejIDwgcmlrYWlcIDsKK+S9leetiSA8IG5hbnJhXCA7Civosqnot68gPCBoYW5yb1wgOwor5L+X5q2MIDwgem9ra2FcIDsKK+S5l+mmrCA8IGpvdWJhXCA7Civku5joqIAgPCBmdWdlblwgOwor6LWk55uuIDwgYWthbWVcIDsKK+S7i+ittyA8IGthaWdvXCA7Civku5boqIAgPCB0YWdvblwgOwor5LqU6YeNIDwgZ29qdXVcIDsKK+iInuWPsCA8IGJ1dGFpXCA7CivmnJ3ppIkgPCBhc2FnZVwgOwor5a+h55S3IDwgeWFtb29cIDsKK+S7luimiyA8IHRha2VuXCA7CivoiI7llrYgPCBzaGFlaVwgOwor5LyO6Iq4IDwgZ2lnZWlcIDsKK+eWjuWkliA8IHNvZ2FpXCA7Civlgbblm6AgPCBndXVpblwgOwor5a6J572uIDwgYW5jaGlcIDsKK+WCjeWPlyA8IGJvdWp1XCA7CivlsqnlsYsgPCBpd2F5YVwgOwor5LqM6YeNIDwgZnV0YWVcIDsKK+iCpeiCsiA8IGhpaWt1XCA7CivlsI/mu50gPCBvdGFraVwgOwor5YG95ZaEIDwgZ2l6ZW5cIDsKK+aip+ahkCA8IGdvdG91XCA7CivnlLvmiY0gPCBnYXNhaVwgOwor55S75omLIDwgZ2FzaHVcIDsKK+miqOmfuyA8IGZ1dWluXCA7Civku5booYwgPCB0YWtvdVwgOwor6LKh6LKoIDwgemFpa2FcIDsKK+S6kumBuCA8IGdvc2VuXCA7CivpoqjpnaEgPCBmdXViaVwgOwor5LyO6IO9IDwgZ2lub3VcIDsKK+acqumWiyA8IG1pa2FpXCA7CivosrTopqcgPCBraXJhblwgOwor6aKo6ZuyIDwgZnV1dW5cIDsKK+S5lumboiA8IGthaXJpXCA7CivnlrLlirQgPCBoaXJvdVwgOwor5YG95ZCNIDwgZ2ltZWlcIDsKK+S6uuiqniA8IGppbmdvXCA7Civpoqjpm4UgPCBmdXVnYVwgOwor5LqU6LyqIDwgZ29yaW5cIDsKK+WBveWPsiA8IGdpc2hpXCA7CivkuojpgbggPCB5b3NlblwgOwor5LmX6ZmkIDwgam91am9cIDsKK+WBj+WlhyA8IGhlbmtpXCA7CivkuLvppqwgPCBzaHVtZVwgOwor5L+d5pyJIDwgaG95dXVcIDsKK+iHquWcqCA8IGppemFpXCA7CivkuozovKogPCBuaXJpblwgOwor5pyd6ZaTIDwgYXNhbWFcIDsKK+iEs+azoiA8IG5vdWhhXCA7Civlrp/np5EgPCBqaWtrYVwgOwor5bGg5omAIDwgdG9zaG9cIDsKK+eWkeWVjyA8IGdpbW9uXCA7CivoiI7liKkgPCBzaGFyaVwgOwor5LqM6LuNIDwgbmlndW5cIDsKK+WAkuW9sSA8IHRvdWVpXCA7Civku5bolqYgPCB0YXplblwgOwor6aeE54qsIDwgZGFrZW5cIDsKK+mjm+i7iiA8IGhpc2hhXCA7CivlsbnluqYgPCBraXR0b1wgOwor5YCt5a+HIDwgd2Frb3VcIDsKK+Wwj+atjCA8IGtvdXRhXCA7CivkuLvpn7MgPCBzaHVvblwgOwor5a6555aRIDwgeW91Z2lcIDsKK+S9meeUnyA8IHlvc2VpXCA7Civnvo7pupcgPCBiaXJlaVwgOwor5a6a56SOIDwgdGVpc29cIDsKK+WyqeWgtCA8IGl3YWJhXCA7Civoh6rllY8gPCBqaW1vblwgOwor5YG95YW1IDwgZ2loZWlcIDsKK+iFleacqCA8IHVkZWdpXCA7CivnlLvluJYgPCBnYWpvdVwgOwor57696Z+zIDwgaGFvdG9cIDsKK+WAieW6qyA8IHNvdWtvXCA7CivmnLrovrogPCBraWhlblwgOwor55Ww5Zu9IDwgaWtva3VcIDsKK+adkeiyuyA8IHNvbnBpXCA7Civos6LogIUgPCBrZW5qYVwgOwor5pys6YOoIDwgaG9uYnVcIDsKK+S6kuitsiA8IGdvam91XCA7Civlr77mrKcgPCB0YWlvdVwgOwor6ICB6LqvIDwgcm91a3VcIDsKK+eUo+W+jCA8IHNhbmdvXCA7CivnlKjluqYgPCB5b3Vkb1wgOwor5pu46ZmiIDwgc2hvaW5cIDsKK+ahkOayuSA8IHRvdXl1XCA7CivmnKrpgYIgPCBtaXN1aVwgOwor55Sf5b6SIDwgc2VpdG9cIDsKK+eUn+W+jCA8IHNlaWdvXCA7CivohJrmsJcgPCBrYWtrZVwgOwor546L6YGTIDwgb3Vkb3VcIDsKK+izm+e+jiA8IHNhbmJpXCA7CivohZDmlZcgPCBmdWhhaVwgOwor6LmE5Y+JIDwgdGVpc2FcIDsKK+acqOmAmiA8IGFrZWJpXCA7Civku5XoiJ4gPCBqaW1haVwgOwor6LaK5qipIDwgZWtrZW5cIDsKK+i3i+aJiCA8IGJha2tvXCA7CivkvZnnh7wgPCB5b2ppblwgOwor6Ieq5YmNIDwgamltYWVcIDsKK+iDg+eXmyA8IGl0c3V1XCA7CivlsI/mnp0gPCBrb2VkYVwgOwor6IOD55eFIDwgaWJ5b3VcIDsKK+iHquWIhiA8IGppYnVuXCA7Civotbfmr5sgPCBraW1vdVwgOwor55Gq55GZIDwgbWVub3VcIDsKK+miqOmCqiA8IGZ1dWphXCA7CivkvZzngrogPCBzYWt1aVwgOwor5a6J55ygIDwgYW5taW5cIDsKK+iHquWFmiA8IGppdG91XCA7CivlsL/mhI8gPCBueW91aVwgOwor5pyb6YGgIDwgYm91ZW5cIDsKK+S6iOiogCA8IHlvZ2VuXCA7CivkuZ3ovKogPCBrdXJpblwgOwor5Lmx6LK7IDwgcmFucGlcIDsKK+S7luiBniA8IHRhYnVuXCA7CivmnKrouI8gPCBtaXRvdVwgOwor5a++5qGIIDwgdGFpYW5cIDsKK+S6iOimiyA8IHlva2VuXCA7Civku5bogIUgPCB0YXNoYVwgOwor5Luu57SNIDwga2Fub3VcIDsKK+eMqummliA8IGlrdWJpXCA7CivkuI3poIYgPCBmdWp1blwgOwor5LiA6aaWIDwgaXNzaHVcIDsKK+eUo+WxiyA8IHVidXlhXCA7Civku67nsqcgPCBrZXdhaVwgOwor6LGq6KqeIDwgZ291Z29cIDsKK+mhnumfuyA8IHJ1aWluXCA7CivpoZ7pn7MgPCBydWlvblwgOwor6LKn6IumIDwgaGlua3VcIDsKK+eUt+WlsyA8IGRhbmpvXCA7CivmoLnmsJcgPCBrb25raVwgOwor6LWk5q+bIDwgYWthZ2VcIDsKK+S4gOmjryA8IGlwcGFuXCA7Civnvo7poqggPCBiaWZ1dVwgOwor6aOb6KGMIDwgaGlrb3VcIDsKK+S6rOiPryA8IGtlaWthXCA7CivlronnlKMgPCBhbnphblwgOwor5LiA6aKoIDwgaXBwdXVcIDsKK+e+jumhlCA8IGJpZ2FuXCA7Civlrp/niLYgPCBqaXBwdVwgOwor6Ieq5LydIDwgamlkZW5cIDsKK+iBluiAhSA8IHNlaWphXCA7Civkvr/miYAgPCBiZW5qb1wgOwor5LiW6ZaTIDwgc2VrZW5cIDsKK+S4gOmgrSA8IGl0dG91XCA7Civoh6rku4ogPCBqaWtvblwgOwor5Li76YOoIDwgc2h1YnVcIDsKK+S4gOmghSA8IGlra291XCA7CivnlLDlpKsgPCBkZW5wdVwgOwor6aOb6J2XIDwgYmF0dGFcIDsKK+eQhuezuyA8IHJpa2VpXCA7CivnlKPlqaYgPCBzYW5wdVwgOwor5a+45pqHIDwgc3Vua2FcIDsKK+aetuepuiA8IGtha3V1XCA7CivnlKPlqYYgPCBzYW5iYVwgOwor6LGM6LGGIDwgZW5kb3VcIDsKK+S4i+mYqiA8IGdlaGFuXCA7Civlr7jmmYIgPCBzdW5qaVwgOwor5qK15a2XIDwgYm9uamlcIDsKK+eUmOWtkCA8IGFtYWdvXCA7CivkvZPmuKkgPCB0YWlvblwgOwor5LuB576pIDwgamluZ2lcIDsKK+S4u+i+niA8IHNodWppXCA7CivmmrTpo7IgPCBib3VpblwgOwor5a+d5qO6IDwgbmVrYW5cIDsKK+i1sOafuyA8IHNvdXNhXCA7CivkuIDpmo4gPCBpa2thaVwgOwor5pys6Ki0IDwgaG9uc29cIDsKK+S4gOmaiiA8IGl0dGFpXCA7Civmm7npgZQgPCBzb3VkYVwgOwor6LKn6ICFIDwgaGluamFcIDsKK+eUsOWcgyA8IGRlbnBvXCA7Civku5jnrosgPCBmdXNlblwgOwor5LiA6ZaDIDwgaXNzZW5cIDsKK+S+ruaFoiA8IGJ1bWFuXCA7CivkvZzmrYwgPCBzYWtrYVwgOwor5pyo5LmD5LyKIDwgbWlpcmFcIDsKK+e+qemHkSA8IGdpa2luXCA7Civkv53lroggPCBob3NodVwgOwor6aKo6KutIDwgZnV1eXVcIDsKK+S4lumKgCA8IHNlZ2luXCA7Civkv53lrZggPCBob3pvblwgOwor55SY5aSiIDwga2FubXVcIDsKK+WwpOW6piA8IHl1dWRvXCA7CivmnIjos6YgPCBnZXBwdVwgOwor5bGV5aKTIDwgdGVuYm9cIDsKK+ePque0oCA8IGtlaXNvXCA7CivmoLjmnpwgPCBrYWtrYVwgOwor5bCK5oSPIDwgc29uJydpXCA7CivpppnmsrkgPCBrb3V5dVwgOwor55So5ZmoIDwgeW91a2lcIDsKK+ahiOaWhyA8IGFubW9uXCA7CivmnJfoqaAgPCByb3VlaVwgOwor5YCS5Y+lIDwgdG91a3VcIDsKK+WAkuWPmSA8IHRvdWpvXCA7Civku67nnKAgPCBrYW1pblwgOwor5LqU6IeTIDwgZ296b3VcIDsKK+iDjOazsyA8IGhhaWVpXCA7CivkuqHogIUgPCBtb3VqYVwgOwor5LiH6YeMIDwgYmFucmlcIDsKK+eQhuefpSA8IHJpY2hpXCA7Civku4/npZYgPCBidXNzb1wgOwor6aeE5paHIDwgZGFidW5cIDsKK+e+qei7jSA8IGdpZ3VuXCA7CivlgK3kurogPCB3YWppblwgOwor5LiD6YeNIDwgbmFuYWVcIDsKK+S4i+mDjiA8IGdlcm91XCA7CivkuIrpg6ggPCBqb3VidVwgOwor6aCT6aasIDwgdG9ubWFcIDsKK+S4iemDqCA8IHNhbmJ1XCA7CivkuI3pgZwgPCBmdXNvblwgOwor5LiN6YGHIDwgZnVndXVcIDsKK+S+v+WunCA8IGJlbmdpXCA7CivkuI3pgJ4gPCBmdXRlaVwgOwor5bCP5bedIDwgb2dhd2FcIDsKK+S4jemAgCA8IGZ1dGFpXCA7Civnvo7phZIgPCBiaXNodVwgOwor5Li76Ki0IDwgc2h1c29cIDsKK+aal+mbsiA8IGFuJyd1blwgOwor5LqM5Y2B6YeNIDwgaGF0YWVcIDsKK+eUt+WFkCA8IGRhbmppXCA7CivkuozogIUgPCBuaXNoYVwgOwor55S75YOPIDwgZ2F6b3VcIDsKK+S/s+WRsyA8IGhhaW1pXCA7CivnlKjli5kgPCB5b3VtdVwgOwor5amm6YGTIDwgZnVkb3VcIDsKK+adkee/gSA8IHNvbm91XCA7Civlronms7AgPCBhbnRhaVwgOwor6IKl5rqAIDwgaGltYW5cIDsKK+S4i+i8qSA8IGdlaGFpXCA7CivlrrbmnaUgPCBrZXJhaVwgOwor5YCk5LiKIDwgbmVhZ2VcIDsKK+eUmOWRsyA8IGthbm1pXCA7Civkv7Plj6UgPCBoYWlrdVwgOwor5LiA6YGNIDwgaXBwZW5cIDsKK+iAgeiIlyA8IHJvdWhvXCA7Civmmpfpl5ggPCBhbnRvdVwgOwor5LiL6LuKIDwgZ2VzaGFcIDsKK+eUmuWPpSA8IGppbmt1XCA7CivkupvntLAgPCBzYXNhaVwgOwor55CG55SxIDwgcml5dXVcIDsKK+S6uuelliA8IGppbnNvXCA7CivkubHoiJ4gPCByYW5idVwgOwor5L6N5b6TIDwgamlqdXVcIDsKK+Wog+msnyA8IGFpa2FuXCA7CivkvJrmtL4gPCBrYWloYVwgOwor5LuW55WMIDwgdGFrYWlcIDsKK+S6lOe1gyA8IGdvZ2VuXCA7CivlsI/lrZcgPCBrb2F6YVwgOwor5bGL5Y+wIDwgeWF0YWlcIDsKK+WwiuWutiA8IHNvbmthXCA7CivkuIDou6IgPCBpdHRlblwgOwor55S75Lq6IDwgZ2FqaW5cIDsKK+mhjOi+niA8IGRhaWppXCA7CivkuIDou5IgPCBpa2tlblwgOwor5a6f5qKFIDwgbWl1bWVcIDsKK+i3r+WCjSA8IHJvYm91XCA7CivmnKzoiJcgPCBob25wb1wgOwor5LiN6LK3IDwgZnViYWlcIDsKK+S4i+izpCA8IGdlc2VuXCA7Civlr53mga8gPCBuZWlraVwgOwor5p6v54elIDwga29zb3VcIDsKK+acqOiIniA8IGtvbWFpXCA7CivogIHnv4EgPCByb3VvdVwgOwor57696J+7IDwgaGFhcmlcIDsKK+Wvm+aBlSA8IGthbmpvXCA7CivosrvnlKggPCBoaXlvdVwgOwor5Luj54i2IDwgZGFpZnVcIDsKK+iyq+ebriA8IGthbm1lXCA7CivnvqnoqJMgPCBnaWt1blwgOwor5LqI57SNIDwgeW9ub3VcIDsKK+S4h+iyqCA8IGJhbmthXCA7Civmnb/nm64gPCBpdGFtZVwgOwor6aCt6YeNIDwgenVvbW9cIDsKK+aiheWckiA8IGJhaWVuXCA7CivosrTnlLcgPCB0YWthb1wgOwor5a6a5pyfIDwgdGVpa2lcIDsKK+Wwj+WjsCA8IGtvZ29lXCA7CivmoYLlurUgPCBrZWlhblwgOwor5LiA6LKrIDwgaWtrYW5cIDsKK+eUn+S/nSA8IHNlaWhvXCA7Civkvr/lmaggPCBiZW5raVwgOwor5pyq6IGeIDwgbWltb25cIDsKK+mfs+mfuyA8IG9uJydpblwgOwor5pmv6ZuyIDwga2VpdW5cIDsKK+S6jOetiSA8IG5pdG91XCA7CivkuIroq60gPCBqb3V5dVwgOwor5LqI566XIDwgeW9zYW5cIDsKK+mhnuiqniA8IHJ1aWdvXCA7Civot6/kuIogPCByb2pvdVwgOwor5pys576pIDwgaG9uZ2lcIDsKK+ixhuiFkCA8IHRvdWZ1XCA7Civpp4TlvIEgPCBkYWJlblwgOwor5amm6K2mIDwgZnVrZWlcIDsKK+i1t+WxhSA8IGtpa3lvXCA7Civmnb/nlLsgPCBoYW5nYVwgOwor5L2T5oqAIDwgdGFpZ2lcIDsKK+S/neWGtyA8IGhvcmVpXCA7CivkvZnmhqQgPCB5b2Z1blwgOwor5LiK6Ki0IDwgam91c29cIDsKK+S/neWFqCA8IGhvemVuXCA7CivkuoznqK4gPCBuaXNodVwgOwor5p6c54S2IDwga2F6ZW5cIDsKK+mfs+majiA8IG9ua2FpXCA7Civnvo7oq4cgPCBiaWRhblwgOwor5a625oayIDwga2FrZW5cIDsKK+S7o+a8lCA8IGRhaWVuXCA7CivkvZnmg4UgPCB5b2pvdVwgOwor5a+h5bGFIDwga2FreW9cIDsKK+eKrOmmrCA8IGtlbmJhXCA7CivlsLzlg6cgPCBuaXNvdVwgOwor57+h57+gIDwgaGlzdWlcIDsKK+aer+a3oSA8IGtvdGFuXCA7CivmnKrnt7QgPCBtaXJlblwgOwor5LiA6KiIIDwgaWtrZWlcIDsKK+e+juimsyA8IGJpa2FuXCA7CivpoJDph5EgPCB5b2tpblwgOwor5L2Z5b+1IDwgeW9uZW5cIDsKK+mhjOipoCA8IGRhaWVpXCA7CivmnKjntr8gPCBtb21lblwgOwor5Li56ImyIDwgbmlpcm9cIDsKK+eOi+e1sSA8IG91dG91XCA7CivotqPlkbMgPCBzaHVtaVwgOwor6LOi5q+NIDwga2VuYm9cIDsKK+aal+i7oiA8IGFudGVuXCA7CivmnKrntI0gPCBtaW5vdVwgOwor6K2w6aGMIDwgZ2lkYWlcIDsKK+S9meW8iiA8IHlvaGVpXCA7CivotaTlrZcgPCBha2FqaVwgOwor6aSK54i2IDwgeW91ZnVcIDsKK+adpeeUsSA8IHJhaXl1XCA7CivmoLnlrZAgPCBuZWtrb1wgOwor5a+45ZyfIDwgc3VuZG9cIDsKK+S9leW6piA8IG5hbmRvXCA7Civog6HluqcgPCBhZ3VyYVwgOwor5qGI5aSWIDwgYW5nYWlcIDsKK+S9nOWLmeihoyA8IHNhbXVlXCA7Civmm7PoiKogPCBlaWtvdVwgOwor55CG5rOVIDwgcmlob3VcIDsKK+miqOe0gCA8IGZ1dWtpXCA7Civku6Pmr40gPCBkYWlib1wgOwor5Lq654K6IDwgamluJydpXCA7CivkvJ3mkq0gPCBkZW5wYVwgOwor57216KiAIDwgYmFnZW5cIDsKK+mojuWFtSA8IGtpaGVpXCA7CivmoZHlnJIgPCBzb3VlblwgOwor5LqS55SoIDwgZ295b3VcIDsKK+S4u+e+qSA8IHNodWdpXCA7CivmnaHnkIYgPCBqb3VyaVwgOwor5bCP5YuiIDwga296ZWlcIDsKK+WvhOWvkyA8IGtpZ3V1XCA7CivkuoznlaogPCBuaWJhblwgOwor6IOM5b6MIDwgaGFpZ29cIDsKK+eJoem5vyA8IG9qaWthXCA7CivmnKznp5EgPCBob25rYVwgOwor6aas5bGLIDwgdW1heWFcIDsKK+S8neaOiCA8IGRlbmp1XCA7CivlsI/liKQgPCBrb2JhblwgOwor576957+8IDwgdXlva3VcIDsKK+aeneavmyA8IGVkYWdlXCA7Civlr7/lj7ggPCBzdXNoaVwgOwor6aaW5bqnIDwgc2h1emFcIDsKK+mmluW6nCA8IHNodWZ1XCA7CivkuqHniLYgPCBib3VmdVwgOwor5pmu6YGNIDwgZnVoZW5cIDsKK+S9meWvkiA8IHlva2FuXCA7CivorZzpnaIgPCBmdW1lblwgOwor5Lu75pyfIDwgbmlua2lcIDsKK+i1reWcnyA8IHNoYWRvXCA7CivlrrblsYsgPCBrYW9rdVwgOwor6IGW5rK5IDwgc2VpeXVcIDsKK+eMn+iZjiA8IHJha2tvXCA7Civlr53lnYogPCBuZWJvdVwgOwor6aO054WuIDwgYW1lbmlcIDsKK+aeouapnyA8IHN1dWtpXCA7CivkvY/lsYUgPCBzdW1haVwgOwor6IOD5byxIDwgaWpha3VcIDsKK+S8neaJiyA8IHRzdXRlXCA7CivlrrXlr50gPCB5b2luZVwgOwor6Laz5LiLIDwgc29ra2FcIDsKK+Wwj+WDpyA8IGtvem91XCA7Civlrp3luqsgPCBob3Vrb1wgOwor6aCG6LevIDwganVucm9cIDsKK+S4iuiNtyA8IHV3YW5pXCA7CivkuIDokaYgPCBpY2hpaVwgOwor5a6u5bGFIDwgbWl5YWlcIDsKK+iEseWFjiA8IGRhdHRvXCA7Civnvr3nuZQgPCBoYW9yaVwgOwor5pqX6KaWIDwgYW5zaGlcIDsKK+ael+aqjiA8IHJpbmdvXCA7Civku6PmoYggPCBkYWlhblwgOwor6aaW5bC+IDwgc2h1YmlcIDsKK+i2iuWGrCA8IGV0dG91XCA7Civlronlv4MgPCBhbmppblwgOwor6LKq5rGaIDwgdGFuJydvXCA7CivkvqHlgKQgPCBrYWNoaVwgOwor5aaW6a2UIDwgeW91bWFcIDsKK+S4gOiJmCA8IGlzc291XCA7CivmnaXmvJQgPCByYWllblwgOwor5LyR5oSPIDwga3l1dWlcIDsKK+mkiuavjSA8IHlvdWJvXCA7CivkuIDoh7QgPCBpdGNoaVwgOwor6aeF5ZOhIDwgZWtpaW5cIDsKK+S8muW+lyA8IGV0b2t1XCA7Civlr53lj7AgPCBuZWRhaVwgOwor5LiN6ICBIDwgZnVyb3VcIDsKK+itt+mAgSA8IGdvc291XCA7Civku5bmnZEgPCB0YXNvblwgOwor5p2c5ryPIDwgenVyb3VcIDsKK+afu+WumiA8IHNhdGVpXCA7CivlrpflrrYgPCBzb3VrZVwgOwor54md6aasIDwgaGluYmFcIDsKK+e+juiCsiA8IGJpaWt1XCA7CivmoYjliIYgPCBhbmJ1blwgOwor5LuP5p6cIDwgYnVra2FcIDsKK+iAgeeIuiA8IHJvdXlhXCA7CivogIHniLYgPCByb3VmdVwgOwor6aCt6JOLIDwgenVnYWlcIDsKK+eQhuaVsCA8IHJpc3V1XCA7CivkupzmtYEgPCBhcnl1dVwgOwor6LGh54mZIDwgem91Z2VcIDsKK+itpumCjyA8IGtlaXJhXCA7CivlronlsYUgPCBhbmt5b1wgOwor5p2x5qynIDwgdG91b3VcIDsKK+mnhuWLlSA8IGt1ZG91XCA7CivotJTlsZMgPCBoaWlraVwgOwor5a+h5YW1IDwga2FoZWlcIDsKK+S7luaWuSA8IHRhaG91XCA7Civku7vmhI8gPCBuaW4nJ2lcIDsKK+mhnue4gSA8IHJ1aWVuXCA7CivkvZnllpggPCB5b3plblwgOwor6K6S6KqjIDwgemFuYnVcIDsKK+S6oeavjSA8IGJvdWJvXCA7CivlsYXnlZnlroggPCBpcnVzdVwgOwor5a6J5a6aIDwgYW50ZWlcIDsKK+S4i+e3kiA8IHNhZ2VvXCA7CivlroflrpkgPCB1Y2h1dVwgOwor6K6S6Ki0IDwgemFuc29cIDsKK+mfs+ipqSA8IG9uc2hpXCA7CivkvI7lt6UgPCBnaWtvdVwgOwor6Z+z6KiTIDwgb25rdW5cIDsKK+izouaEmiA8IGtlbmd1XCA7Civog4Plo4EgPCBpaGVraVwgOwor5L2Z5ZG9IDwgeW9tZWlcIDsKK+S4jeeyiyA8IGJ1c3VpXCA7Civlppbpm7IgPCB5b3V1blwgOwor6LW05Lu7IDwgZnVuaW5cIDsKK+izpuaApyA8IGZ1c2VpXCA7Civku6PmiZMgPCBkYWlkYVwgOwor5qGI5Lu2IDwgYW5rZW5cIDsKK+eNo+eariA8IGp1dWhpXCA7CivkupTmrrUgPCBnb2RhblwgOwor6LOb5oSPIDwgc2FuJydpXCA7Civmnb/mnKggPCBoYW5naVwgOwor6aOi5rCRIDwga2ltaW5cIDsKK+mjm+aziSA8IGhpc2VuXCA7CivmnKrnhLYgPCBtaXplblwgOwor6aeQ5LyKIDwgY2h1dWlcIDsKK+aYoOmFjSA8IGVpaGFpXCA7CivlraTluIYgPCBrb2hhblwgOwor5L2c5YuVIDwgc2Fkb3VcIDsKK+S4gOezuCA8IGlzc2hpXCA7CivkuI3nrYkgPCBmdXRvdVwgOwor5Lq65pmCIDwgbmluamlcIDsKK+mgreiEsyA8IHp1bm91XCA7CivmnKjngbAgPCBraWJhaVwgOwor576F57SXIDwgcmFzaGFcIDsKK+Wlh+m6lyA8IGtpcmVpXCA7Civku5XmiYsgPCBzaGl0ZVwgOwor6aas5Yi4IDwgYmFrZW5cIDsKK+WuruWPuCA8IGd1dWppXCA7CivnkIbmg7MgPCByaXNvdVwgOwor5a6l5ZKMIDwgeXV1d2FcIDsKK+itsOirliA8IGdpcm9uXCA7Civmm7jnlLsgPCBzaG9nYVwgOwor542y54mpIDwgZW1vbm9cIDsKK+WlrumjmyA8IGZ1bnBpXCA7CivogqXlpKcgPCBoaWRhaVwgOwor5L2Z5YWaIDwgeW90b3VcIDsKK+eQhuaApyA8IHJpc2VpXCA7CivmmYLoq5YgPCBqaXJvblwgOwor6K2m6K23IDwga2VpZ29cIDsKK+iyoOaVsCA8IGZ1c3V1XCA7Civkuozmp5ggPCBuaXlvdVwgOwor576p55y8IDwgZ2lnYW5cIDsKK+afu+WVjyA8IHNhbW9uXCA7CivnkIblv7UgPCByaW5lblwgOwor6Z2S6aasIDwgYW91bWFcIDsKK+itq+iqniA8IHNlbmdvXCA7CivmnKrmuoAgPCBtaW1hblwgOwor5a625YaFIDwga2FuYWlcIDsKK+S4luefpSA8IHNlY2hpXCA7Civlrprlk6EgPCB0ZWlpblwgOwor6LK35omLIDwga2FpdGVcIDsKK+WvneakheWtkCA8IG5laXN1XCA7CivmnaXmnJ8gPCByYWlraVwgOwor5LqV5qGBIDwgaWdldGFcIDsKK+aal+e/syA8IGFuJydlaVwgOwor5pyq5riIIDwgbWlzYWlcIDsKK+WnieiytCA8IGFuZWtpXCA7CivogIHmr40gPCByb3Vib1wgOwor5LuW5b+1IDwgdGFuZW5cIDsKK+Wum+WQjSA8IGF0ZW5hXCA7CivlpbPpm6MgPCBqb25hblwgOwor5aW06Zq3IDwgZG9yZWlcIDsKK+S4luebuCA8IHNlc291XCA7Civku7LlsYUgPCBuYWthaVwgOwor5pyr5rS+IDwgbWFwcGFcIDsKK+mdnumboyA8IGhpbmFuXCA7CivkuIvnn6UgPCBnZWRqaVwgOwor5aSq6byTIDwgdGFpa29cIDsKK+mgiOiHviA8IHNodXl1XCA7CivmnJ3mua8gPCBhc2F5dVwgOwor5aWU6aasIDwgaG9uYmFcIDsKK+iBluaBqSA8IHNlaW9uXCA7Civlq4zmsJcgPCBrZW5raVwgOwor5LiN55ygIDwgZnVtaW5cIDsKK+S6nOaXjyA8IGF6b2t1XCA7Civku4HmhYggPCBqaW5qaVwgOwor5Luu5a+TIDwga2FndXVcIDsKK+S7j+W+kiA8IGJ1dHRvXCA7Civmnb/miLggPCBpdGFkb1wgOwor5Lq65oiRIDwgamluZ2FcIDsKK+iyp+aJkyA8IGhpbmRhXCA7CivkvZnkurogPCB5b25pblwgOwor5LuW5bqXIDwgdGF0ZW5cIDsKK+Wkp+m7hCA8IGRhaW91XCA7CivkuIrnnYAgPCB1d2FnaVwgOwor5aSn6bq7IDwgdGFpbWFcIDsKK+acrOawlyA8IGhvbmtpXCA7CivogIHmqLkgPCByb3VqdVwgOwor5piv6KqNIDwgemVuaW5cIDsKK+iyoOaLhSA8IGZ1dGFuXCA7Civmmpfnt5ogPCBhbnNlblwgOwor5LiK55uuIDwgdXdhbWVcIDsKK+aghOWGoCA8IGVpa2FuXCA7CivkvY7kvqEgPCB0ZWlrYVwgOwor546L5rC0IDwgb3VzdWlcIDsKK+S7iuW+jCA8IGtvbmdvXCA7CivkuJbnlYwgPCBzZWthaVwgOwor5a2f5aWzIDwgbW91am9cIDsKK+mjm+adpSA8IGhpcmFpXCA7Civkuozmm7QgPCBuaWtvdVwgOwor6aas5LiKIDwgYmFqb3VcIDsKK+WutuS6uiA8IGtlbmluXCA7Civku4HmgZUgPCBqaW5qb1wgOwor5a2f5aSPIDwgbW91a2FcIDsKK+aWkemzqSA8IGlrYXJ1XCA7Civpoqjms6IgPCBmdXVoYVwgOwor5LuK5bqmIDwga29uZG9cIDsKK+S4i+eWsyA8IGdla2FuXCA7Civpn7PoibIgPCBuZWlyb1wgOwor6ICM5p2lIDwgamlyYWlcIDsKK+adnOaSsCA8IHp1c2FuXCA7CivorY7oqZAgPCBraXNzYVwgOwor5LiL55WMIDwgZ2VrYWlcIDsKK+S4i+eUtyA8IGdlbmFuXCA7CivkuIvnlLAgPCBnZWRlblwgOwor5pqW57C+IDwgbm9yZW5cIDsKK+S7luWxsSA8IHRhemFuXCA7CivlrZDlpbMgPCBzaGlqb1wgOwor546L5qipIDwgb3VrZW5cIDsKK+mjm+aVoyA8IGhpc2FuXCA7CivlrIzmhYsgPCBzaGluYVwgOwor576O55S3IDwgYmluYW5cIDsKK+e+jueUsCA8IGJpZGVuXCA7CivkuIDnlJ8gPCBpc3NlaVwgOwor5a6J5YWoIDwgYW56ZW5cIDsKK+S6lOaMhyA8IGdvc2hpXCA7Civku4/lrrYgPCBidWtrZVwgOwor54m56KiYIDwgdG9ra2lcIDsKK+aXoumBgiA8IGtpc3VpXCA7CivpoYznlLsgPCBkYWlnYVwgOwor6IGW5a+/IDwgc2VpanVcIDsKK+isueipsSA8IGtpbndhXCA7CivkuI3niq8gPCBmdWJvblwgOwor5LuK5a61IDwga295b2lcIDsKK+S6lOaIkiA8IGdva2FpXCA7CivmnZ7mhoIgPCBraXl1dVwgOwor6Z2i6YOoIDwgbWVuYnVcIDsKK+aYjuiomCA8IG1laWtpXCA7Civku5blp5MgPCB0YXNlaVwgOwor5aWz6YOOIDwgam9yb3VcIDsKK+iyoeW4gyA8IHNhaWZ1XCA7CivmnKrmnaUgPCBtaXJhaVwgOwor5LiN54eDIDwgZnVuZW5cIDsKK+S4gOeMriA8IGlra29uXCA7Civmlr3pjKAgPCBzZWpvdVwgOwor5a6J5L2PIDwgYW5qdXVcIDsKK+W6p+akheWtkCA8IHphaXN1XCA7CivpnZ7pgZMgPCBoaWRvdVwgOwor6Zyn6ZuwIDwgbXVmdW5cIDsKK+adv+WxiyA8IGl0YXlhXCA7CivkupTmgqogPCBnb2FrdVwgOwor5a2m5Yy6IDwgZ2Fra3VcIDsKK+S6uuWvvyA8IGppbmp1XCA7CivkuI7ngrkgPCB5b3RlblwgOwor5Lq65a62IDwgamlua2FcIDsKK+acquaYjiA8IG1pbWVpXCA7CivkupLmgbUgPCBnb2tlaVwgOwor6Z2i6LyqIDwgb21vd2FcIDsKK+iyp+WvjCA8IGhpbnB1XCA7Civnj77loLQgPCBnZW5iYVwgOwor6LKn5a62IDwgaGlua2FcIDsKK+mhnueBqyA8IHJ1aWthXCA7CivlrZjlkKYgPCB6b25waVwgOwor5p2/5a2QIDwgaXRhZ29cIDsKK+WloOmDvSA8IHRlbnRvXCA7CivogZblpJwgPCBzZWl5YVwgOwor5LuK5aSPIDwga29ua2FcIDsKK+S6iOaDsyA8IHlvc291XCA7Civku7vli5kgPCBuaW5tdVwgOwor5pa56YeMIDwgaG91cmlcIDsKK+eOi+aUvyA8IG91c2VpXCA7Civnvo7ngrkgPCBiaXRlblwgOwor5LqM5b+1IDwgbmluZW5cIDsKK+ism+ipsSA8IGtvdXdhXCA7Civos5vlkKYgPCBzYW5waVwgOwor5aSn6ZuoIDwgb29hbWVcIDsKK+WklemkiSA8IHl1dWdlXCA7CivlpKrpmbAgPCB0YWlpblwgOwor5pyd5pelIDwgYXNhaGlcIDsKK+S7o+WToSA8IGRhaWluXCA7CivkuIrmvJQgPCBqb3VlblwgOwor5paH6ZuFIDwgYnVuZ2FcIDsKK+S4jea6gCA8IGZ1bWFuXCA7CivotIjkuI4gPCB6b3V5b1wgOwor5Lmx5omTIDwgcmFuZGFcIDsKK+WklumhjCA8IGdlZGFpXCA7CivniaHooKMgPCBib3JlaVwgOwor5aWu6LW3IDwgZnVua2lcIDsKK+S6uuWkqyA8IG5pbnB1XCA7CivogLblrKIgPCB5YWpvdVwgOwor5aaE6KqeIDwgbW91Z29cIDsKK+iynuWppiA8IHRlaWZ1XCA7CivnvqnmsJEgPCBnaW1pblwgOwor6Kqe6aGeIDwgZ29ydWlcIDsKK+aWuemAlCA8IGhvdXRvXCA7Civku4/lmaggPCBidWtraVwgOwor5pel6KqyIDwgbmlra2FcIDsKK+iqnumghiA8IGdvanVuXCA7CivkuLvmn7sgPCBzaHVzYVwgOwor5aSa6ZujIDwgdGFuYW5cIDsKK+S4jea1hCA8IGZ1am91XCA7Civml6XoqJggPCBuaWtraVwgOwor5Lul5YyXIDwgaWhva3VcIDsKK+WtkOWIhiA8IGtvYnVuXCA7CivlpJbpnIAgPCBnYWlqdVwgOwor5a2m5L2NIDwgZ2FrdWlcIDsKK+acrOaJiyA8IGhvbnRlXCA7Civosp7lpbMgPCB0ZWlqb1wgOwor6Z+z56iLIDwgb250ZWlcIDsKK+e/u+aEjyA8IGhvbicnaVwgOwor6KyA6K2wIDwgYm91Z2lcIDsKK+S4jeazlSA8IGZ1aG91XCA7Civku6Pli5kgPCBkYWltdVwgOwor576F5ryiIDwgcmFrYW5cIDsKK+e9ueeBvSA8IHJpc2FpXCA7CivmnKrmiJAgPCBtaXNlaVwgOwor5pyA5pyfIDwgc2FpZ29cIDsKK+mbqumnhCA8IHNldHRhXCA7CivlpJXpmb0gPCB5dXVoaVwgOwor5aSc6ZaTIDwgeWFrYW5cIDsKK+iAgeW+jCA8IHJvdWdvXCA7Civml4XosrsgPCByeW9oaVwgOwor5LqV5a6IIDwgaW1vcmlcIDsKK+mdkuiynSA8IGFvZ2FpXCA7CivkuIvmsLQgPCBnZXN1aVwgOwor5aWI6L66IDwgbmFoZW5cIDsKK+aVtOmZpCA8IHNlaWpvXCA7CivkuI3mr5sgPCBmdW1vdVwgOwor5LiL5rCRIDwgZ2VtaW5cIDsKK+WrjOaCqiA8IGtlbicnb1wgOwor6LKn5ZyfIDwgaGluZG9cIDsKK+mbu+mboiA8IGRlbnJpXCA7CivpoZ7mr5QgPCBydWloaVwgOwor5LiN5q27IDwgZnVzaGlcIDsKK+S4i+autSA8IGdlZGFuXCA7Civpm7bpnLIgPCByZWlyb1wgOwor5LqM5bCBIDwgbmlmdXVcIDsKK+mbt+mbsiA8IHJhaXVuXCA7Civku5bli5UgPCB0YWRvdVwgOwor5LiK5q2vIDwgdXdhYmFcIDsKK+S6jOWuriA8IG5pZ3V1XCA7Civku5blirEgPCB0YXJlaVwgOwor54+t5ZOhIDwgaGFuaW5cIDsKK+irt+iqpiA8IGZ1dWp1XCA7CivkuIDmsLQgPCBpc3N1aVwgOwor5LqI5a6aIDwgeW90ZWlcIDsKK+iytOWQmyA8IGtpa3VuXCA7Civmlq3ot68gPCBkYW5yb1wgOwor54u854WZIDwgcm91ZW5cIDsKK+iytOWQjSA8IGtpbWVpXCA7Civku67ku6QgPCB0YXRvZVwgOwor5LiA5q61IDwgaXR0YW5cIDsKK+S4gOatsyA8IGlzc2FpXCA7CivmnaXloLQgPCByYWliYVwgOwor6Z+z55ukIDwgb25iYW5cIDsKK+S7i+WKqSA8IGthaWpvXCA7CivkuIfmqZ8gPCBiYW5raVwgOwor6Zuq6Iqx6I+cIDwgb2thcmFcIDsKK+mjr+WgtCA8IGhhbmJhXCA7CivlpKfpg6ggPCBkYWlidVwgOwor5pmC56m6IDwgamlrdXVcIDsKK+mfs+eXtCA8IG9uY2hpXCA7Civmlofpg6ggPCBtb25idVwgOwor5pqX5r65IDwgYW50YW5cIDsKK+ipsemhjCA8IHdhZGFpXCA7CivlpJrph40gPCB0YWp1dVwgOwor6Kmx6aCtIDwgd2F0b3VcIDsKK+S6i+WkiSA8IGppaGVuXCA7CivmmannlJ8gPCBva3V0ZVwgOwor6Zuo6ZaTIDwgYW1hYWlcIDsKK+WmluiJtiA8IHlvdWVuXCA7CivlpJbph44gPCBnYWl5YVwgOwor5LiL5qChIDwgZ2Vrb3VcIDsKK+irluitsCA8IHJvbmdpXCA7Civoqq3pgY4gPCBkb2trYVwgOwor5piO576OIDwgbWVpYmlcIDsKK+S7mOS8miA8IGZ1a2FpXCA7Civoq4vosqAgPCB1a2VvaVwgOwor5Li75oiRIDwgc2h1Z2FcIDsKK+mjveWSjCA8IGhvdXdhXCA7CivkuozloYEgPCBuaXJ1aVwgOwor6Kqk6YWNIDwgZ29oYWlcIDsKK+mboumWkyA8IHJpa2FuXCA7Civnv7vlrZcgPCBob25qaVwgOwor6aOb5aCxIDwgaGlob3VcIDsKK+S7luS6uiA8IHRhbmluXCA7CivlpJbpg6ggPCBnYWlidVwgOwor6KuW6KqeIDwgcm9uZ29cIDsKK+abnOaXpSA8IHlvdWJpXCA7CivlpJbpg44gPCB1aXJvdVwgOwor6Z2S6J2/IDwgYW9iYWVcIDsKK+e9qOazlSA8IGFucG91XCA7CivogIHlqYYgPCByb3ViYVwgOwor6LKh5YuZIDwgemFpbXVcIDsKK+S4i+abuCA8IGdlc2hvXCA7Civmlr3ooYwgPCBzZWtvdVwgOwor5pyA5oSbIDwgc2FpYWlcIDsKK+abluaYpyA8IGFpbWFpXCA7Civml6noi5cgPCBzYW5hZVwgOwor5LiH5py2IDwgYmFuZGFcIDsKK+acrOWutiA8IGhvbmtlXCA7CivlpJbpgZMgPCBnZWRvdVwgOwor5aqa5oWLIDwgYml0YWlcIDsKK+aZguefrSA8IGppdGFuXCA7CivmmpfmtpkgPCBhbnJ1aVwgOwor5pyJ5b+DIDwgdXNoaW5cIDsKK+ePvuS4liA8IGdlbnplXCA7CivmmqLmsJcgPCBub25raVwgOwor6ICB5aaTIDwgcm91Z2lcIDsKK+acquWumiA8IG1pdGVpXCA7CivkuI3mmJMgPCBmdWVraVwgOwor5pyq5a6MIDwgbWlrYW5cIDsKK+S4jeaYjiA8IGZ1bWVpXCA7Civosrzku5ggPCB0ZW5wdVwgOwor5pyr5a2jIDwgbWFra2lcIDsKK+iAgeWlsyA8IHJvdWpvXCA7CivkuIDmna8gPCBpcHBhaVwgOwor576O5pysIDwgYmlob25cIDsKK+S4iuaYoCA8IGpvdWVpXCA7CivnjovlrasgPCBvdXNvblwgOwor5LiL5pesIDwgZ2VqdW5cIDsKK+S4jeaWrSA8IGZ1ZGFuXCA7CivkuIDmnKwgPCBpcHBvblwgOwor5LiN5paHIDwgZnVidW5cIDsKK+adkOWZqCA8IHphaWtpXCA7Civlhavnmb7lsYsgPCB5YW95YVwgOwor5LiJ5pelIDwgbWlra2FcIDsKK+Wni+elliA8IHNoaXNvXCA7CivkuI3mlY8gPCBmdWJpblwgOwor6LGK5a+MIDwgaG91ZnVcIDsKK+e+juaZryA8IGJpa2VpXCA7CivnvqnmjJkgPCBnaWt5b1wgOwor6KuH6KmxIDwgZGFud2FcIDsKK+aVrOmBoCA8IGtlaWVuXCA7CivmnKrlqZogPCBtaWtvblwgOwor5pyd5a+dIDwgYXNhbmVcIDsKK+iyuOS4jiA8IHRhaXlvXCA7CivosqDlgrUgPCBmdXNhaVwgOwor5LmZ5a2QIDwgb3RvZ29cIDsKK+Wkp+ixhiA8IGRhaXp1XCA7Civpm6jph48gPCB1cnlvdVwgOwor576p5omLIDwgZ2lzaHVcIDsKK+S4gOaWuSA8IGlwcG91XCA7CivkuIDmlqQgPCBpa2tpblwgOwor576p5oimIDwgZ2lzZW5cIDsKK+iqueislyA8IGhpYm91XCA7Civnt4vpr4kgPCBoaWdvaVwgOwor576I5peFIDwga2lyeW9cIDsKK+e+qeaGpCA8IGdpZnVuXCA7CivkuozlkJsgPCBuaWt1blwgOwor5LiW5omNIDwgc2VzYWlcIDsKK+S6jOWPtyA8IG5pZ291XCA7CivmnIDlt6YgPCBzYWlzYVwgOwor5Lqh5YWQIDwgYm91amlcIDsKK+abuOW6qyA8IHNob2tvXCA7Civpm7vot68gPCBkZW5yb1wgOwor5LmZ5aWzIDwgb3RvbWVcIDsKK+aWh+iqniA8IGJ1bmdvXCA7CivkuJbmhYsgPCBzZXRhaVwgOwor546p5ZGzIDwgZ2FubWlcIDsKK+mhp+aFriA8IGtvcnlvXCA7CivlpJzoraYgPCB5YWtlaVwgOwor6Zqg6aGVIDwgaW5rZW5cIDsKK+eOi+WfjiA8IG91am91XCA7CivkuIrmiYsgPCBqb3V6dVwgOwor5pys5ZyfIDwgaG9uZG9cIDsKK+e+juaMmSA8IGJpa3lvXCA7CivkuIDmjJkgPCBpa2t5b1wgOwor6Zui6L6yIDwgcmlub3VcIDsKK+S4h+aIuCA8IGJhbmtvXCA7Civpn7PmupAgPCBvbmdlblwgOwor5LqM5YiGIDwgbmlidW5cIDsKK+aaq+aZgiA8IHphbmppXCA7CivmmI7npLogPCBtZWlqaVwgOwor6Zqg6Z2iIDwgaW5tZW5cIDsKK+iotOmhmCA8IHNvZ2FuXCA7CivnvqnlvJ8gPCBnaXRlaVwgOwor546H5ZyfIDwgc290dG9cIDsKK+S6pOS6kiA8IGtvdWdvXCA7CivoqqToqo0gPCBnb25pblwgOwor6Z2i5721IDwgbWVuYmFcIDsKK+WkluiqniA8IGdhaWdvXCA7CivlpJroqIAgPCB0YWdlblwgOwor5LqU5YCNIDwgZ29iYWlcIDsKK+mghuasoSA8IGp1bmppXCA7CivpoZjmhI8gPCBnYW4nJ2lcIDsKK+miqOWcnyA8IGZ1dWRvXCA7Civpm6Pot68gPCBuYW5yb1wgOwor54eD6LK7IDwgbmVucGlcIDsKK+S6lOS9kyA8IGdvdGFpXCA7CivmnInlpI8gPCB5dXVrYVwgOwor5LqM5YCNIDwgbmliYWlcIDsKK+S4i+W+oSA8IGdlZ3lvXCA7CivnjqnlhbcgPCBnYW5ndVwgOwor6Kmt6L6vIDwga2liZW5cIDsKK+Wlpee+qSA8IG9rdWdpXCA7Civpm7voqbEgPCBkZW53YVwgOwor54yb5omTIDwgbW91ZGFcIDsKK+mcgOimgSA8IGp1eW91XCA7CivlpKfom4cgPCBkYWlqYVwgOwor5pyx5Y2wIDwgc2h1aW5cIDsKK+WkluiiqyA8IGdhaWhpXCA7CivmnIDlpJogPCBzYWl0YVwgOwor5LiN5bmzIDwgZnVoZWlcIDsKK+Wls+ezuyA8IGpva2VpXCA7CivosLflnLAgPCB5YWNoaVwgOwor5LiK5bqnIDwgam91emFcIDsKK+e4gei+uiA8IGVucGVuXCA7Civkuovku7YgPCBqaWtlblwgOwor5LqM5LmXIDwgbmlqb3VcIDsKK+S4iuW4gyA8IGpvdWZ1XCA7CivmnKzli5kgPCBob25tdVwgOwor5LqM5LiWIDwgbmlzZWlcIDsKK+S6jOS4iSA8IG5pc2FuXCA7CivorbLmuKEgPCBqb3V0b1wgOwor6aKo5ZGzIDwgZnV1bWlcIDsKK+itt+azlSA8IGdvaG91XCA7CivosZrlhZAgPCB0b25qaVwgOwor6Zuj6KqeIDwgbmFuZ29cIDsKK+aVheiytyA8IGtvYmFpXCA7Civpm5HosrsgPCB6YXBwaVwgOwor6ZuR6LKoIDwgemFra2FcIDsKK+S4i+WxsSA8IGdlemFuXCA7CivmlZfoqLQgPCBoYWlzb1wgOwor5aOw6KqJIDwgc2VpeW9cIDsKK+S4iuWxiyA8IHV3YXlhXCA7CivnjovlhqAgPCBvdWthblwgOwor6aKo5YyWIDwgZnV1a2FcIDsKK+aatOW+kiA8IGJvdXRvXCA7CivnvqnlprkgPCBnaW1haVwgOwor5LiH5a+/IDwgYmFuanVcIDsKK+mhnuWtlyA8IHJ1aWppXCA7CivpmY3prZQgPCBnb3VtYVwgOwor6Z+z5qCTIDwgb25zZW5cIDsKK+mfu+abuCA8IGluc2hvXCA7Civmlr3nsbMgPCBzZW1haVwgOwor6K2y5q2pIDwgam91aG9cIDsKK+aWh+iLkSA8IGJ1bmVuXCA7Civnvo7lrrkgPCBiaXlvdVwgOwor6KuH576pIDwgZGFuZ2lcIDsKK+maoOmBgSA8IGludG9uXCA7CivkuIDlrpogPCBpdHRlaVwgOwor6aCT5oyrIDwgdG9uemFcIDsKK+mbkeiomCA8IHpha2tpXCA7CivpmqDpgIAgPCBpbnRhaVwgOwor6Z2x55quIDwgamlucGlcIDsKK+miqOWEgCA8IGZ1dWdpXCA7CivpmaTpnIogPCBqb3JlaVwgOwor5aGp6aGeIDwgZW5ydWlcIDsKK+mZsOmWgCA8IGlubW9uXCA7Civml6fnl74gPCBreXV1YVwgOwor6Z+75paHIDwgaW5idW5cIDsKK+acgOWPpCA8IHNhaWtvXCA7CivnuYHojIIgPCBoYW5tb1wgOwor5aSa6Iq4IDwgdGFnZWlcIDsKK+mZpOmaiiA8IGpvdGFpXCA7CivlpJboi5EgPCBnYWllblwgOwor5pyr5LiWIDwgbWFzc2VcIDsKK+S4h+WkqyA8IGJhbnB1XCA7CivkuLvli5kgPCBzaHVtdVwgOwor6Kut56S6IDwgeXVzaGlcIDsKK+mbheiogCA8IGdhZ2VuXCA7CivnhKHpoqggPCBtdWZ1dVwgOwor6Z2i55quIDwgbWVucGlcIDsKK+mgreW3viA8IHp1a2luXCA7CivnhKHpoZ4gPCBtdXJ1aVwgOwor576O5aSnIDwgYmlkYWlcIDsKK+e3mui3ryA8IHNlbnJvXCA7CivnhKHpoYwgPCBtdWRhaVwgOwor54Sh6aC8IDwgYnVyYWlcIDsKK+ippuijnCA8IHNoaWhvXCA7Civnvo7lo7AgPCBiaXNlaVwgOwor5aSa6IO9IDwgdGFub3VcIDsKK+S4i+WfjiA8IGdlam91XCA7CivmmK/mraMgPCB6ZXNlaVwgOwor5pWj6I+vIDwgc2FuZ2VcIDsKK+Wkj+iHsyA8IGdlc2hpXCA7Civnt4/ouqsgPCBzb3VtaVwgOwor5LiN5ZyoIDwgZnV6YWlcIDsKK+iqpOiBniA8IGdvYnVuXCA7CivpnaLnlLsgPCBtZW5nYVwgOwor54Sh6Zu7IDwgbXVkZW5cIDsKK+eEoemboyA8IGJ1bmFuXCA7CivlpJbogLMgPCBnYWlqaVwgOwor6Z2e55WqIDwgaGliYW5cIDsKK+acieS9mSA8IHl1dXlvXCA7CivnhKHpmZAgPCBtdWdlblwgOwor5LiN5ZaEIDwgZnV6ZW5cIDsKK+S4jeWVjyA8IGZ1bW9uXCA7CivmnInkuosgPCB5dXVqaVwgOwor56Gr6buE6I+vIDwgaW91a2FcIDsKK+e+qeWLhyA8IGdpeXV1XCA7CivpoJLluIMgPCBoYW5wdVwgOwor6KuW56C0IDwgcm9ucGFcIDsKK+e9teWjsCA8IGJhc2VpXCA7CivkuIvlk4EgPCBnZWhpblwgOwor5pyI5LiLIDwgZ2Vra2FcIDsKK+iok+i+niA8IGt1bmppXCA7CivlpKLnsr4gPCBtdXNlaVwgOwor6Z+z5oSfIDwgb25rYW5cIDsKK+S4jeWPgiA8IGZ1c2FuXCA7CivpoIbluo8gPCBqdW5qb1wgOwor6aGe5Y+lIDwgcnVpa3VcIDsKK+S4iuWPpCA8IGpvdWtvXCA7CivkuInlj4kgPCBzYW5zYVwgOwor6Zm66LevIDwga2Vucm9cIDsKK+mYsumZpCA8IGJvdWpvXCA7CivkuI3li6IgPCBidXplaVwgOwor6Kmx6Iq4IDwgd2FnZWlcIDsKK+e+juWQjSA8IGJpbWVpXCA7CivloanphbggPCBlbnNhblwgOwor5aSn56m0IDwgb29hbmFcIDsKK+eMquWPoyA8IGNob2tvXCA7CivmlqTnm64gPCBraW5tZVwgOwor54mn5q2MIDwgYm9ra2FcIDsKK+S4i+WJpCA8IGdlemFpXCA7CivnhKHpiq0gPCBtdXNlblwgOwor5aC06Z2iIDwgYmFtZW5cIDsKK+iogOi+niA8IGdlbmppXCA7CivnhKHpipggPCBtdW1laVwgOwor6Kqk566XIDwgZ29zYW5cIDsKK+eIqueJmSA8IHNvdWdhXCA7CivlpKrnpZYgPCB0YWlzb1wgOwor5pqX5aScIDwgYW4nJ3lhXCA7CivlpKnnpZYgPCB0ZW5zb1wgOwor6K235oayIDwgZ29rZW5cIDsKK+WkmuerryA8IHRhdGFuXCA7CivoqaDojYkgPCBlaXNvdVwgOwor5aOu576OIDwgc291YmlcIDsKK+WkmueoriA8IHRhc2h1XCA7CivnhKHphY0gPCBtdWhhaVwgOwor54qv5oSPIDwgaGFuJydpXCA7CivkuIvlg6cgPCBnZXNvdVwgOwor576p5Lq6IDwgZ2lqaW5cIDsKK+S4gOWIhiA8IGlwcHVuXCA7CivlpYfnkZ4gPCBraXp1aVwgOwor6KuW55CGIDwgcm9ucmlcIDsKK+Wkp+egtCA8IHRhaWhhXCA7Civpm4Xoh7QgPCBnYWNoaVwgOwor5LiN5YCrIDwgZnVyaW5cIDsKK+ipseiAhSA8IHdhc2hhXCA7Civml6Xms6IgPCBuaXBwb1wgOwor5LiW5LujIDwgc2VkYWlcIDsKK+S4luS6uiA8IHNlamluXCA7CivmlYXogIEgPCBrb3JvdVwgOwor5LiK5YCkIDwgdXdhbmVcIDsKK+eEoemBkyA8IG11ZG91XCA7CivkuI3kvr8gPCBmdWJlblwgOwor5aKX6KOcIDwgem91aG9cIDsKK+e5lOebriA8IG9yaW1lXCA7CivoqJPoqbEgPCBrdW53YVwgOwor54Sh6L66IDwgbXVoZW5cIDsKK+maoOiUvSA8IGlucGVpXCA7CivnvoXlhbggPCByYXRlblwgOwor6Zmw6KyAIDwgaW5ib3VcIDsKK+iok+ipgSA8IGt1bmtvXCA7CivlppPmpbwgPCBnaXJvdVwgOwor5paH55uuIDwgYXlhbWVcIDsKK+WkieenuyA8IGhlbicnaVwgOwor5LiL5Lq6IDwgZ2VuaW5cIDsKK+aatOWIqSA8IGJvdXJpXCA7CivmmpfllqkgPCBhbicneXVcIDsKK+WhkemAoCA8IHNvem91XCA7CivlqZrlhIAgPCBrb25naVwgOwor57SZ6a2aIDwgc2hpbWlcIDsKK+S4h+S6iyA8IGJhbmppXCA7Civoq7jmtL4gPCBzaG9oYVwgOwor5LiK5LiLIDwgam91Z2VcIDsKK+S4ieS4liA8IHNhbnplXCA7Civpm7vno4EgPCBkZW5qaVwgOwor6aCR5Zu6IDwgZ2Fua29cIDsKK+e+juS6uiA8IGJpamluXCA7CivnvbflhY0gPCBoaW1lblwgOwor5aSn55O2IDwgb29iaW5cIDsKK+iogOiqniA8IGdlbmdvXCA7CivlpLfni4QgPCBpdGVraVwgOwor5pqX5ZCbIDwgYW5rdW5cIDsKK+aal+WQiCA8IGFuZ291XCA7CivorbflsrggPCBnb2dhblwgOwor5b6h56We6YWSIDwgb21pa2lcIDsKK+eJqeaVhSA8IGJ1a2tvXCA7CivlpKnnkIYgPCB0ZW5yaVwgOwor57Sg6aSKIDwgc295b3VcIDsKK+WnkOW+oSA8IGFuZWdvXCA7CivlpJznlaogPCB5b2JhblwgOwor6Zyy54K5IDwgcm90ZW5cIDsKK+mfs+WkpyA8IG9uZGFpXCA7Civpn7Plo7AgPCBvbnNlaVwgOwor5aSa55SoIDwgdGF5b3VcIDsKK+WkmueUoyA8IHRhc2FuXCA7CivntKDpoZQgPCBzdWdhb1wgOwor5pS557WEIDwga2Fpc29cIDsKK+e0q+mbsiA8IHNoaXVuXCA7Civnt6jogIUgPCBoZW5qYVwgOwor5aWz5qipIDwgam9rZW5cIDsKK+WkqeeLlyA8IHRlbmd1XCA7CivlpaXmra8gPCBva3ViYVwgOwor5pep5pyfIDwgc291a2lcIDsKK+e0oOmdoiA8IHN1bWVuXCA7CivnuKvnm64gPCBudWltZVwgOwor54Sh6KyAIDwgbXVib3VcIDsKK+aXheasoSA8IHJ5b2ppXCA7Civml6XmnKwgPCBuaWhvblwgOwor54Sh6KuWIDwgbXVyb25cIDsKK+mdnualrSA8IGhpZ291XCA7Civml6bmmq4gPCB0YW5ib1wgOwor57O46a2aIDwgaXRveW9cIDsKK+mbqOedgCA8IGFtYWdpXCA7CivlqIHlnKcgPCBpYXRzdVwgOwor54Sh6KiAIDwgbXVnb25cIDsKK+WmguaYryA8IG55b3plXCA7CivlqIHlmocgPCBpa2FrdVwgOwor5pWw55CGIDwgc3V1cmlcIDsKK+eGseeggiA8IG5lc3NhXCA7CivlpKnngasgPCB0ZW5waVwgOwor54yK5LiLIDwgZ2Vpa2FcIDsKK+mYsuittyA8IGJvdWdvXCA7CivpoK3kuIogPCB6dWpvdVwgOwor6Z2S5qKFIDwgYW91bWVcIDsKK+Whl+ijhSA8IHRvc291XCA7CivmlYXnn6UgPCBrb2NoaVwgOwor6Zqg57eaIDwgaW5zZW5cIDsKK+imlumHjiA8IHNoaXlhXCA7CivpmbDojI4gPCBpbmtlaVwgOwor54eg54GrIDwgb2tpYmlcIDsKK+mfs+WQjSA8IG9ubWVpXCA7CivlpqXlvZMgPCBkYXRvdVwgOwor5pmC5aCxIDwgamlob3VcIDsKK+e1jOi3ryA8IGtlaXJvXCA7CivloanolLUgPCBlbnpvdVwgOwor5pig5bCEIDwgZWlzaGFcIDsKK+iruuaWhyA8IG9ubW9uXCA7CivloqjntbUgPCBzdW1pZVwgOwor57Sw6YOoIDwgc2FpYnVcIDsKK+e3tOejqCA8IHJlbm1hXCA7CivorJ3mgakgPCBzaGFvblwgOwor5piG5biDIDwga29uYnVcIDsKK+mbsueFmSA8IHVuJydlblwgOwor5aW95omTIDwga291ZGFcIDsKK+mYsuihmyA8IGJvdWVpXCA7CivlpKfmsrMgPCB0YWlnYVwgOwor6Zu354GrIDwgcmFpa2FcIDsKK+e2sue+hSA8IG1vdXJhXCA7CivoqJPnvqkgPCBrdW5naVwgOwor5pio5aScIDwgeXV1YmVcIDsKK+eEoeiTiyA8IG11Z2FpXCA7CivopofpgZMgPCBoYWRvdVwgOwor6KW/6YOoIDwgc2VpYnVcIDsKK+mbh+eUqCA8IGtveW91XCA7Civpn7Plg48gPCBvbnpvdVwgOwor5LyK5L2Q5pyoIDwgaXNha2lcIDsKK+Wmu+WlsyA8IHNhaWpvXCA7CivlpKfmrYwgPCBvb3V0YVwgOwor5paH5q6KIDwgbW9uanVcIDsKK+eEoeiPjCA8IG11a2luXCA7CivmlofmraYgPCBidW5idVwgOwor5oWw5a6J5ammIDwgaWFuZnVcIDsKK+eEoeiMtiA8IG11Y2hhXCA7Civpn7Pkvr8gPCBvbmJpblwgOwor5aSa5q+bIDwgdGFtb3VcIDsKK+Wkp+aouSA8IHRhaWp1XCA7CivlpJbmsJcgPCBnYWlraVwgOwor54Sh6Iq4IDwgbXVnZWlcIDsKK+Wkp+anmCA8IG9veW91XCA7Civoo73pursgPCBzZWltYVwgOwor57eP56S+IDwgc291amFcIDsKK+itpuWPpSA8IGtlaWt1XCA7CivpnZ7mg4UgPCBoaWpvdVwgOwor5pmC5YyWIDwgc2hpa2VcIDsKK+mbqOa7tCA8IHV0ZWtpXCA7Civpm7LmtbcgPCB1bmthaVwgOwor6ZuR54WuIDwgem91bmlcIDsKK+aYn+WbsyA8IHNlaXp1XCA7CivopoHot68gPCB5b3Vyb1wgOwor5aWz5b6hIDwgbnlvZ29cIDsKK+aWoeaXiyA8IGFzc2VuXCA7Civpm7Lms6UgPCB1bmRlaVwgOwor6K2m5YuZIDwga2VpbXVcIDsKK+eEoeiDvSA8IG11bm91XCA7CivniqzlhJIgPCBrZW5qdVwgOwor5aSn6KaL5b6XIDwgb29taWVcIDsKK+aVsOasoSA8IHN1dWppXCA7CivmlbXmqZ8gPCB0ZWtraVwgOwor6Zuy5rC0IDwgdW5zdWlcIDsKK+WmluWphiA8IHlvdWJhXCA7CivpnZLmga8gPCBhb2lraVwgOwor6ZaR6ZuFIDwga2FuZ2FcIDsKK+Wkp+aenSA8IG9vZWRhXCA7Civlo7Lmt6sgPCBiYWlpblwgOwor6Zyn5pWjIDwgbXVzYW5cIDsKK+Wls+W4nSA8IGpvdGVpXCA7Civnt5rnlLsgPCBzZW5nYVwgOwor5paw5omLIDwgYXJhdGVcIDsKK+eEoee9qiA8IG11emFpXCA7CivmlaPmrakgPCBzYW5wb1wgOwor6Zuo5rC3IDwgdWh5b3VcIDsKK+aWh+abuCA8IG1vbmpvXCA7Civml6LlrpogPCBraXRlaVwgOwor57Sb6K2wIDwgZnVuZ2lcIDsKK+mZpOeulyA8IGpvemFuXCA7CivorbDkvJogPCBnaWthaVwgOwor5bCE5omL5bqnIDwgaXRlemFcIDsKK+ippua8lCA8IHNoaWVuXCA7CivmkqvogrIgPCBidWlrdVwgOwor6Kqe5qC5IDwgZ29rb25cIDsKK+eGseazoiA8IG5lcHBhXCA7CivlpJrmnJsgPCB0YWJvdVwgOwor5aWz5bCKIDwgam9zb25cIDsKK+eJouWbuiA8IHJvdWtvXCA7CivoqbHms5UgPCB3YWhvdVwgOwor54KJ6L66IDwgcm9oZW5cIDsKK+eFqeeRoyA8IGhhbnNhXCA7Civnt4/nkIYgPCBzb3VyaVwgOwor54Sh57OWIDwgbXV0b3VcIDsKK+mZveeariA8IHlvdWhpXCA7CivlpKfmkI0gPCBvb3pvblwgOwor6Zyy5oKqIDwgcm9ha3VcIDsKK+eKgOWIqSA8IHNhaXJpXCA7CivlpJrmlbAgPCB0YXN1dVwgOwor57ay55uuIDwgYW1pbWVcIDsKK+WkqeaOiCA8IHRlbmp1XCA7CivlpJbmlrkgPCBzb3Bwb1wgOwor57KX6aSQIDwgc29zYW5cIDsKK+eyl+mjryA8IHNvaGFuXCA7CivplonpjpYgPCBoZWlzYVwgOwor57Sg6KGMIDwgc29rb3VcIDsKK+e1uee1tSA8IGtpbnVlXCA7CivorZzku6MgPCBmdWRhaVwgOwor5aGp56iOIDwgZW56ZWlcIDsKK+e1tee1uSA8IGVnaW51XCA7CivpmqDnhLYgPCBpbnplblwgOwor6Kqe5pWwIDwgZ29zdXVcIDsKK+aYoOWAqyA8IGVpcmluXCA7Civnsr7pi60gPCBzZWllaVwgOwor6Zuy5pmvIDwgdW5rZWlcIDsKK+eJiOWbsyA8IGhhbnRvXCA7CivlpYflt4wgPCBraWdhblwgOwor5aeJ5LiKIDwgYW5ldWVcIDsKK+eEoeeovSA8IG11a2VpXCA7CivopbLooaMgPCBzaHV1aVwgOwor6ZaT6YGgIDwgbWFkb29cIDsKK+eEoeeojiA8IG11emVpXCA7CivoqaDmrY4gPCBlaXRhblwgOwor5aSn5oSaIDwgdGFpZ3VcIDsKK+mbsuaVoyA8IHVuc2FuXCA7Civpm6LmnZEgPCByaXNvblwgOwor5aSc5oimIDwgeWFzZW5cIDsKK+S4jeaEj+awlyA8IGJ1aWtpXCA7CivntbXnrYYgPCBlZnVkZVwgOwor5aSa5omNIDwgdGFzYWlcIDsKK+aWh+aEjyA8IGJ1bicnaVwgOwor6KWk6KS4IDwgcmFucnVcIDsKK+Wkp+aCnyA8IGRhaWdvXCA7CivnhKHnpLwgPCBidXJlaVwgOwor57m75a2QIDwgc2h1c3VcIDsKK+mWi+mBiyA8IGthaXVuXCA7CivlpKfmgakgPCBkYWlvblwgOwor6Kmy5qGIIDwgZ2FpYW5cIDsKK+WkouaDsyA8IG11c291XCA7CivopabooqIgPCBqdWJhblwgOwor6Zuj5piTIDwgbmFuJydpXCA7Civml6jlkbMgPCB1bWFtaVwgOwor6Kmx5p+EIDwgd2FoZWlcIDsKK+WlieWuiSA8IGhvdWFuXCA7CivloJXog44gPCBkYXRhaVwgOwor5aSa5oSfIDwgdGFrYW5cIDsKK+aSreeoriA8IGhhc2h1XCA7CivoqrLlvbkgPCBrYWVraVwgOwor6Zmi55SfIDwgaW5zZWlcIDsKK+ijnOmhjCA8IGhvZGFpXCA7CivlpJrmg4UgPCB0YWpvdVwgOwor6Zui5pWjIDwgcmlzYW5cIDsKK+ippuahiCA8IHNoaWFuXCA7CivlpJrmgaggPCB0YWtvblwgOwor5aSn5bqmIDwgdGFpZG9cIDsKK+aVteaEjyA8IHRla2lpXCA7CivmlofluqsgPCBidW5rb1wgOwor6KaL6IieIDwgbWltYWlcIDsKK+Wglee9qiA8IGRhemFpXCA7CivloannlLAgPCBlbmRlblwgOwor54Sh55uKIDwgbXVla2lcIDsKK+Wkp+W3riA8IHRhaXNhXCA7CivlpKflt6UgPCBkYWlrdVwgOwor5aSa5b2iIDwgdGFrZWlcIDsKK+aVrOaFlSA8IGtlaWJvXCA7Civmj7Tou40gPCBlbmd1blwgOwor5pWs5oSbIDwga2VpYWlcIDsKK+WkmuW8gSA8IHRhYmVuXCA7CivpnZ7lkb0gPCBoaW1laVwgOwor6KyA5Y+bIDwgbXVob25cIDsKK+eyl+mKhSA8IHNvZG91XCA7CivmkanogJcgPCBtYW1vdVwgOwor54i25ZCbIDwgZnVrdW5cIDsKK+aUvuaYoCA8IGhvdWVpXCA7CivntIXok64gPCBndXJlblwgOwor6ZuB5pyoIDwgZ2FuZ2lcIDsKK+ijj+mdoiA8IHJpbWVuXCA7Civmlrnlm7MgPCBob3V6dVwgOwor6Zuo5oi4IDwgYW1hZG9cIDsKK+eEoeeUqCA8IG11eW91XCA7CivniaHkuLkgPCBib3RhblwgOwor5aSn5bC+IDwgdGFpYmlcIDsKK+eyl+mFkiA8IHNvc2h1XCA7Civlo7LmiYsgPCB1cml0ZVwgOwor5aKX5rS+IDwgem91aGFcIDsKK+iqmOW8lSA8IHl1dWluXCA7CivlpKflrrYgPCB0YWlrZVwgOwor6ZuF5paHIDwgZ2FidW5cIDsKK+imh+iAhSA8IGhhc2hhXCA7CivmlbDluqYgPCBzdXVkb1wgOwor5aSn5a2XIDwgb29hemFcIDsKK+aWreWbuiA8IGRhbmtvXCA7CivojY/og6HpursgPCBlZ29tYVwgOwor5paH5a2XIDwgbW9uamlcIDsKK+eHleW3oyA8IGVuc291XCA7CivlpaXljbAgPCBva3VpblwgOwor5aSr5ammIDwgbWVvdG9cIDsKK+WkmuWxpCA8IHRhc291XCA7CivoqLTmqKkgPCBzb2tlblwgOwor6Zu25bqmIDwgcmVpZG9cIDsKK+eCueiAhSA8IHRlbmphXCA7CivntbXnlLsgPCBrYWlnYVwgOwor6Z2e5YehIDwgaGlib25cIDsKK+Wls+WEqiA8IGpveXV1XCA7CivoqqTlsIQgPCBnb3NoYVwgOwor5aSW5a6uIDwgZ2VrdXVcIDsKK+WkquWkqyA8IHRheXV1XCA7CivlpKflpaUgPCBvb29rdVwgOwor5o6S6ZmkIDwgaGFpam9cIDsKK+WmguS4iiA8IGpvam91XCA7CivlpKflo7AgPCBvb2dvZVwgOwor5pOs5q+bIDwgZ2ltb3VcIDsKK+WlkeWNsCA8IGtlaWluXCA7CivopoHntKAgPCB5b3Vzb1wgOwor6Zuy5bGFIDwga3Vtb2lcIDsKK+mcsuWRvSA8IHJvbWVpXCA7CivpmbDmr5sgPCBpbm1vdVwgOwor57mU5ZywIDwgb3JpamlcIDsKK+mciuWkoiA8IHJlaW11XCA7CivlpJrlpKcgPCB0YWRhaVwgOwor5o2V6a+oIDwgaG9nZWlcIDsKK+WkmuWjsiA8IHRhYmFpXCA7CivpnLLlj7AgPCByb2RhaVwgOwor57mB5aSaIDwgaGFudGFcIDsKK+mZpOazlSA8IGpvaG91XCA7CivnhJzngokgPCBrb25yb1wgOwor6Zui5bK4IDwgcmlnYW5cIDsKK+eCree0oCA8IHRhbnNvXCA7CivlpJbloLQgPCBnYWliYVwgOwor6Zui5bGxIDwgcml6YW5cIDsKK+Wkp+WYmCA8IG9vdXNvXCA7CivmlbDlpJogPCBzdXV0YVwgOwor6ZqP5pmCIDwgenVpamlcIDsKK+mciuWckiA8IHJlaWVuXCA7CivmlL/lupwgPCBzZWlmdVwgOwor6Zi/5ryVIDwgYWtvZ2lcIDsKK+aWl+WNlyA8IHRvbmFuXCA7Civlo7LlrZAgPCB1cmlrb1wgOwor6Zu75aC0IDwgZGVuYmFcIDsKK+WkluWboCA8IGdhaWluXCA7CivpmLLngasgPCBib3VrYVwgOwor6Zyy5YWJIDwgcm9rb3VcIDsKK+Wkp+WRsyA8IG9vYWppXCA7Civmlr3kuLsgPCBzZXNodVwgOwor54Sh5rOVIDwgbXVob3VcIDsKK+aVheWxsSA8IGtvemFuXCA7CivlpKflj7AgPCBvb2RhaVwgOwor5Zyo6YeOIDwgemFpeWFcIDsKK+eBq+iJsiA8IGhpaXJvXCA7Civmloflj6UgPCBtb25rdVwgOwor6by/IDwgZ290c3VcIDsKK+eEoeawtCA8IG11c3VpXCA7CivpvI4gPCBrYW5hZVwgOwor54Sh5q+bIDwgbXVtb3VcIDsKK+Wbs+mdoiA8IHp1bWVuXCA7CivmlL7lsYEgPCBob3VoaVwgOwor5aOy5aWzIDwgYmFpdGFcIDsKK+WkqeWKqSA8IHRlbmpvXCA7CivnsbPosqggPCBiZWlrYVwgOwor54Sh5q6LIDwgbXV6YW5cIDsKK+mWi+iKsSA8IGthaWthXCA7CivlpJzlj4kgPCB5YXNoYVwgOwor5Z+655ukIDwga2liYW5cIDsKK+m3qSA8IGhldHN1XCA7CivlpKfliKQgPCBvb2JhblwgOwor57Sg55u0IDwgc3VuYW9cIDsKK+imqueIuiA8IG95YWppXCA7CivpnIDlk4EgPCBqdWhpblwgOwor6KOc6KybIDwgaG9rb3VcIDsKK+mbo+WgtCA8IG5hbmJhXCA7Civpto0gPCBpc3VrYVwgOwor5aOy5aC0IDwgdXJpYmFcIDsKK+m2iSA8IHV6dXJhXCA7CivpmaLmnKwgPCBpbnBvblwgOwor5aSa5YuiIDwgdGF6ZWlcIDsKK+Wbm+mhpyA8IHNoaWtvXCA7CivlpKflhJIgPCBkYWlqdVwgOwor5aSc5YmNIDwgeWF6ZW5cIDsKK+exs+iqniA8IGJlaWdvXCA7CivpmLvmraIgPCBzb3NoaVwgOwor5aSW5YuZIDwgZ2FpbXVcIDsKK+mbkeWkmiA8IHphdHRhXCA7CivlpJzliIYgPCB5YWJ1blwgOwor5pWX5ZugIDwgaGFpaW5cIDsKK+exs+ipsSA8IGJlaXdhXCA7CivpsZcgPCB1cm9rb1wgOwor6bC7IDwgdW5hZ2lcIDsKK+aWieWCmSA8IHNlaWJpXCA7CivntbXmloflrZcgPCBlbW9qaVwgOwor5aKT5omAIDwgYm9zaG9cIDsKK+mwkiA8IGF3YWJpXCA7CivpsI8gPCBoeW9rdVwgOwor6Kqe5YuiIDwgZ29zZWlcIDsKK+mwjSA8IGluYWRhXCA7CivoqqTliKQgPCBnb2hhblwgOwor6bCJIDwgaGlnYWlcIDsKK+mvjyA8IGFzYXJpXCA7Civlm7PpkZEgPCB6dWthblwgOwor6a6tIDwgc2hha2VcIDsKK+mbsuWPsCA8IHVuZGFpXCA7Civoqo3lkKYgPCBuaW5waVwgOwor54Sh5qC5IDwgbXVrb25cIDsKK+WkieWMliA8IGhlbmdlXCA7Civoqo3lj68gPCBuaW5rYVwgOwor6au6IDwgZ2F0c3VcIDsKK+e2suaIuCA8IGFtaWRvXCA7CivoqJjmhrYgPCBraW9rdVwgOwor5paH5LqLIDwgYnVuamlcIDsKK+aTrOaFiyA8IGdpdGFpXCA7CivnspfojLYgPCBzb2NoYVwgOwor5aSc5LyaIDwgeWFrYWlcIDsKK+e0lOeQhiA8IGp1bnJpXCA7Civpm6LlkIggPCByaWdvdVwgOwor6Zuj5Y+lIDwgbmFua3VcIDsKK+e3nuWtkCA8IGRvbnN1XCA7Civpm6Llj40gPCByaWhhblwgOwor57Sg54mHIDwgc29oZW5cIDsKK+iqpOS8nSA8IGdvZGVuXCA7Civns7jnm64gPCBpdG9tZVwgOwor57W15p+EIDwgZWdhcmFcIDsKK+iomOW/tSA8IGtpbmVuXCA7CivnhKHmlq0gPCBtdWRhblwgOwor6Zmw5oOoIDwgaW5zYW5cIDsKK+eEoeaVsCA8IG11c3V1XCA7CivntbXmnK0gPCBlZnVkYVwgOwor5pWw5L6hIDwgc3V1a2FcIDsKK+e2v+W4gyA8IG1lbnB1XCA7Civpm7vkvY0gPCBkZW4nJ2lcIDsKK+eyvueylyA8IHNlaXNvXCA7Civpm6jlhbcgPCBhbWFndVwgOwor6Z2oIDwgZWt1Ym9cIDsKK+aOqeiUvSA8IGVucGVpXCA7Civpm6PlhIAgPCBuYW5naVwgOwor6ZqJIDwgZ2V0c3VcIDsKK+ippuWQiCA8IHNoaWFpXCA7CivpmqDlo6sgPCBpbnNoaVwgOwor5aKz5aKTIDwgZnVuYm9cIDsKK+ihsOmBiyA8IHN1aXVuXCA7Civpm4Xlj7cgPCBnYWdvdVwgOwor6Kmg5ZCfIDwgZWlnaW5cIDsKK+aUv+WLmSA8IHNlaW11XCA7CivloLTmnKsgPCBiYXN1ZVwgOwor57a+5a2QIDwgcmluenVcIDsKK+eEoeaJjSA8IG11c2FpXCA7CivngqzngasgPCBreW9rYVwgOwor57Gz6IuxIDwgYmVpZWlcIDsKK+maoOWdiiA8IG9uYm91XCA7Civpmrvlj6UgPCBzZWtrdVwgOwor54Sh5oWuIDwgbXVyeW9cIDsKK+WggOaxnyA8IGhvcmllXCA7Civpm6Lku7sgPCByaW5pblwgOwor57WQ5p6cIDwga2Vra2FcIDsKK+ihsOi6ryA8IHN1aWt1XCA7Civpm6PkuosgPCBuYW5qaVwgOwor5Zyw6JS1IDwgaml6b3VcIDsKK+eEoeaDhSA8IG11am91XCA7Civpj4kgPCBzaHl1dVwgOwor6Y6nIDwgeW9yb2lcIDsKK+ipkOWPliA8IHNhc2h1XCA7Civpm4XlhYQgPCBnYWtlaVwgOwor6YyoIDwgaWthcmlcIDsKK+mMmCA8IHRzdW11XCA7CivnhKHlv7UgPCBtdW5lblwgOwor5Zue6LevIDwga2Fpcm9cIDsKK+imquacqCA8IG95YWdpXCA7Civpm5HkvZwgPCB6b3VzYVwgOwor6ZmQ5bqmIDwgZ2VuZG9cIDsKK+mIuiA8IGd5b2t1XCA7CivloYHmiZMgPCBydWlkYVwgOwor5Zyf6JS1IDwgZG96b3VcIDsKK+imi+anmCA8IG1peW91XCA7CivmlYXkuLsgPCBrb3NodVwgOwor6KW/5qynIDwgc2Vpb3VcIDsKK+imh+aoqSA8IGhha2VuXCA7CivnspfnrKggPCBzb2hvblwgOwor57Sh5qmfIDwgYm91a2lcIDsKK+Wbs+inoyA8IHp1a2FpXCA7CivlnLDoibIgPCBqaWlyb1wgOwor5Zyf6JGsIDwgZG9zb3VcIDsKK+aOque9riA8IHNvY2hpXCA7CivlopPlnLAgPCBib2NoaVwgOwor5Zyo6IuxIDwgemFpZWlcIDsKK+eznOeImyA8IGJpcmFuXCA7CivloLTmiYAgPCBiYXNob1wgOwor6KGX6LevIDwgZ2Fpcm9cIDsKK+Whl+W3pSA8IHRva291XCA7Civpmo/lk6EgPCB6dWlpblwgOwor5ouX6Z+zIDwgeW91b25cIDsKK+imi+aghCA8IG1pYmFlXCA7CivntbnluIMgPCBrZW5wdVwgOwor54Sh5bC9IDwgbXVqaW5cIDsKK+mZpOWkliA8IGpvZ2FpXCA7Civlopflk6EgPCB6b3VpblwgOwor57W15be7IDwgZW1ha2lcIDsKK+imi+acrCA8IG1paG9uXCA7CivpmaLlpJYgPCBpbmdhaVwgOwor57eP5YuZIDwgc291bXVcIDsKK+mXiuatqSA8IGthcHBvXCA7CivourUgPCBuZXJhdVwgOwor6Zqg5YWDIDwgaW5nZW5cIDsKK+eEoeWumCA8IG11a2FuXCA7Civln7rmnKwgPCBraWhvblwgOwor57KX56ClIDwgYXJhdG9cIDsKK+WgseaBqSA8IGhvdW9uXCA7CivntKDmnZAgPCBzb3phaVwgOwor57eP5Ye6IDwgc291ZGVcIDsKK+WckuiKuCA8IGVuZ2VpXCA7Civot5sgPCBiaWtrb1wgOwor5o2V6JmcIDwgaG9yeW9cIDsKK+mao+S/nSA8IHJpbnBvXCA7CivlopPlj4IgPCBib3NhblwgOwor6KO455y8IDwgcmFnYW5cIDsKK+e1tuWutiA8IHpla2tlXCA7CivoqJjlj7cgPCBraWdvdVwgOwor5r++57SZIDwgcm9zaGlcIDsKK+aRqeaQjSA8IG1hc29uXCA7CivloZTlqYYgPCB0b3ViYVwgOwor57Sg5pWwIDwgc29zdXVcIDsKK+Wik+WJjSA8IGJvemVuXCA7CivopqrlvqEgPCBveWFnb1wgOwor54K55pKtIDwgdGVucGFcIDsKK+iotOS6uiA8IHNvbmluXCA7CivooZfooaIgPCBnYWlrdVwgOwor6ZaL5ryUIDwga2FpZW5cIDsKK+e0i+aXpSA8IG1vbmJpXCA7CivpmaTlj7cgPCBqb2dvdVwgOwor5Zuw6IumIDwga29ua3VcIDsKK+mZpOWOuyA8IGpva3lvXCA7CivpmaLlj7cgPCBpbmdvdVwgOwor6ZqK5LyNIDwgdGFpZ29cIDsKK+ifu+mFuCA8IGdpc2FuXCA7CivlnLDnp58gPCBjaGlzb1wgOwor57Sw5b6uIDwgc2FpYmlcIDsKK+aLnei+niA8IGhhaWppXCA7CivlnJ/nrqEgPCBkb2thblwgOwor5aGK5ZyfIDwga2FpZG9cIDsKK+ijj+ebriA8IHVyYW1lXCA7CivoppbluqYgPCBzaGlkb1wgOwor57KX54WuIDwgYXJhbmlcIDsKK+imluW3riA8IHNoaXNhXCA7CivntKDmgKcgPCBzdWpvdVwgOwor57Sw5belIDwgc2Fpa3VcIDsKK+mZquS+jSA8IGJhaWppXCA7CivloLDloKQgPCBlbnRlaVwgOwor6JecIDwgYWthemFcIDsKK+Wcp+eglSA8IGFzc2FpXCA7CivnhKHlirkgPCBtdWtvdVwgOwor5Zyw55ukIDwgamliYW5cIDsKK+iWiiA8IGF6YW1pXCA7CivngavmobYgPCBoaW9rZVwgOwor5o2V57iEIDwgaG9qb3VcIDsKK+e1tuWPpSA8IHpla2t1XCA7CivnsKHntKAgPCBrYW5zb1wgOwor6JSmIDwgdHN1dGFcIDsKK+iUpCA8IGJpdHN1XCA7CivmirzpgIEgPCBvdXNvdVwgOwor5Zyf56CCIDwgZG9zaGFcIDsKK+eCueW3riA8IHRlbnNhXCA7CivloKHloYEgPCBob3J1aVwgOwor57SU5bqmIDwganVuZG9cIDsKK+Wcp+eXlSA8IGFra29uXCA7CivojKggPCBpYmFyYVwgOwor6IycIDwgYWthbmVcIDsKK+eyvuafuyA8IHNlaXNhXCA7CivojIAgPCBodXRzdVwgOwor6Iu2IDwgZGV0c3VcIDsKK+aBteavlOWvvyA8IGViaXN1XCA7CivloLTlkbMgPCBiYWFqaVwgOwor54OI5ammIDwgcmVwcHVcIDsKK+aOiOeUoyA8IGp1c2FuXCA7CivnhKHkvZMgPCBtdXRhaVwgOwor6KGM6ISaIDwgYW5neWFcIDsKK+eEoeS9jyA8IG11anV1XCA7Civmj7rmm7MgPCB5b3VlaVwgOwor5Zyf55SoIDwgZG95b3VcIDsKK+ieuumIvyA8IHJhZGVuXCA7CivnhKHkurogPCBtdW5pblwgOwor5Zyf55O2IDwgZG9iaW5cIDsKK+mYsuWFtyA8IGJvdWd1XCA7Civplbfmn4QgPCBuYWdhZVwgOwor6KWf5bqmIDwga2luZG9cIDsKK+iho+ezpyA8IGlyeW91XCA7CivpmLLlgpkgPCBib3ViaVwgOwor6IKtIDwgZG90c3VcIDsKK+e1kOWPpSA8IGtla2t1XCA7CivogosgPCBhYmFyYVwgOwor5omT6aCGIDwgZGFqdW5cIDsKK+aRguWutiA8IHNla2tlXCA7CivloIXlm7ogPCBrZW5nb1wgOwor5omL6aCGIDwgdGVqdW5cIDsKK+aJk+mbuyA8IGRhZGVuXCA7Civmj5DmoYggPCB0ZWlhblwgOwor5Zyn54K5IDwgYXR0ZW5cIDsKK+ijnOatoyA8IGhvc2VpXCA7Civmj6HmlqcgPCBha3VmdVwgOwor5omT6ZaLIDwgZGFrYWlcIDsKK+imgeWbsyA8IHlvdXp1XCA7CivopoHlm6AgPCB5b3VpblwgOwor56u26aasIDwga2VpYmFcIDsKK+a8j+ipsSA8IHJvdXdhXCA7CivmjqHmsrkgPCBzYWl5dVwgOwor5aC05LujIDwgYmFkYWlcIDsKK+eyl+aatCA8IHNvYm91XCA7CivlnLDmuKkgPCBjaGlvblwgOwor6KOP5q+bIDwgdXJha2VcIDsKK+mWgOaJiSA8IG1vbnBpXCA7CivploDmiLggPCBtb25rb1wgOwor57KSIDwgdHN1YnVcIDsKK+aKq+imiyA8IGhpa2VuXCA7Civnr6kgPCBmdXJ1aVwgOwor54Kt5ZujIDwgdGFkb25cIDsKK+WbnuebriA8IGthaW1lXCA7Civmu4Xph5EgPCBtZWtraVwgOwor562PIDwgaWthZGFcIDsKK+WcsOatqSA8IGNoaWhvXCA7CivmiYvpjKAgPCB0ZWpvdVwgOwor5Zyw5q2MIDwgaml1dGFcIDsKK+mWgOW+kiA8IG1vbnRvXCA7Civnp6sgPCBqb3RzdVwgOwor5Zuz54mIIDwgenVoYW5cIDsKK+eBq+WxsSA8IGthemFuXCA7Civns7vlm7MgPCBrZWl6dVwgOwor5Zyn5q27IDwgYXNzaGlcIDsKK+aJi+mHkSA8IHRla2luXCA7CivlnJ/msJEgPCBkb21pblwgOwor54K55YmNIDwgdGVtYWVcIDsKK+aOouafuyA8IHRhbnNhXCA7CivntI3lj5cgPCBub3VqdVwgOwor5omL6YWNIDwgdGVoYWlcIDsKK+aOiOaoqSA8IGp1a2VuXCA7CivnrYboqJggPCBoaWtraVwgOwor57KX5oKqIDwgc29ha3VcIDsKK+e0oOS9kyA8IHNvdGFpXCA7Civns57lnJ8gPCBmdW5kb1wgOwor55WZ5a6I5bGFIDwgcnVzdWlcIDsKK+mVt+WxhSA8IG5hZ2FpXCA7CivmvKvnvbUgPCBtYW5iYVwgOwor56uv6YqtIDwgaGFzZW5cIDsKK+eWmSA8IGdpdHN1XCA7CivkuI3lvpfmiYsgPCBmdWV0ZVwgOwor566q56ylIDwgdGFuc3VcIDsKK+Wbs+azlSA8IHp1aG91XCA7CivmvaTnm64gPCB1cnVtZVwgOwor5rmW6Z2iIDwga29tZW5cIDsKK+aPmuWxiyA8IGFnZXlhXCA7Civoo4/miYsgPCB1cmF0ZVwgOwor6J6f6Ju+IDwgbWVpZ2FcIDsKK+Wcp+aUvyA8IGFzc2VpXCA7CivmirzntbUgPCBvc2hpZVwgOwor5rmv6YqtIDwgeXVzZW5cIDsKK+mWsuWFtSA8IGVwcGVpXCA7Civoo5zlvKYgPCBob2dlblwgOwor6KGM54GvIDwgYW5kb25cIDsKK+aJi+ipsSA8IHNodXdhXCA7CivlnKfmjpIgPCBhcHBhaVwgOwor5Za26L6yIDwgZWlub3VcIDsKK+aJi+ijvSA8IHRlc2VpXCA7Civln47kuIsgPCBqb3VrYVwgOwor57KX5aSnIDwgc29kYWlcIDsKK+WbuuaciSA8IGtveXV1XCA7CivmuKnpoZQgPCBvbmdhblwgOwor54KK5LqLIDwgc3VpamlcIDsKK+eCjuS4iiA8IGVuam91XCA7CivmjbvmjKsgPCBuZW56YVwgOwor5ryU566XIDwgZW56YW5cIDsKK+a4qemghiA8IG9uanVuXCA7CivnqoHpo5sgPCB0b3BwaVwgOwor54Sh5oSP576pIDwgbXVpZ2lcIDsKK+exs+WvvyA8IGJlaWp1XCA7CivmipXntrIgPCB0b2FtaVwgOwor5pCN5L+dIDwgc29ucG9cIDsKK+ijj+WxiyA8IHVyYXlhXCA7CivmjqrlrpogPCBzb3RlaVwgOwor5oim6KiYIDwgc2Vua2lcIDsKK+aJi+iWhCA8IHRldXN1XCA7CivlnKjluqsgPCB6YWlrb1wgOwor56ul6KmxIDwgZG91d2FcIDsKK+mWk+S7oyA8IG1hZGFpXCA7CivlnKflt7sgPCBha2thblwgOwor5ryr55S7IDwgbWFuZ2FcIDsKK+aPmuWPpSA8IGFnZWt1XCA7Civoo5zloasgPCBob3RlblwgOwor57KX5ZOBIDwgc29oaW5cIDsKK+Wcn+W3pSA8IGRva291XCA7Civlm5vml6UgPCB5b2trYVwgOwor5omL6I2SIDwgdGVhcmFcIDsKK+exs+WhqSA8IGJlaWVuXCA7Civmjqnlo5UgPCBlbmdvdVwgOwor5Zyo5a62IDwgemFpa2VcIDsKK+ijnOWbniA8IGhva2FpXCA7Civmpb4gPCBoYXpvdVwgOwor5qSjIDwgc2hpZGVcIDsKK+mWgOS4iyA8IG1vbmthXCA7CivlmbTngasgPCBmdW5rYVwgOwor57KX5YipIDwgYXJhcmlcIDsKK+ijj+WcsCA8IHVyYWppXCA7Civmt6vpoqggPCBpbnB1dVwgOwor5omT6ICFIDwgZGFzaGFcIDsKK+aggyA8IHRvY2hpXCA7CivlnLDlo7AgPCBqaWdvZVwgOwor5Zu95bqrIDwga29ra29cIDsKK+adgSA8IGVidXJpXCA7CivnrYbnpo0gPCBoaWtrYVwgOwor6Jy76JuJIDwgdG9uYm9cIDsKK+ihjOaWuSA8IHl1a3VlXCA7Civoo7jlg48gPCByYXpvdVwgOwor5Zuz5b2iIDwgenVrZWlcIDsKK++8sO+8oyA8IHDEq3NoxKtcIDsKK+aJk+e3miA8IGRhc2VuXCA7CivlnLDlm7MgPCBjaGl6dVwgOwor6KGo5oSPIDwgaHlvdWlcIDsKK+aKgOeglCA8IGdpa2VuXCA7CivmiYvnuZQgPCB0ZW9yaVwgOwor6KO45L2TIDwgcmF0YWlcIDsKK+Wbs+W3pSA8IHp1a291XCA7CivoobDlvq4gPCBzdWliaVwgOwor6KOP5ZCNIDwgdXJhbmFcIDsKK+Wcn+WhiiA8IGRva2FpXCA7CivmiYvnt7QgPCB0ZXJlblwgOwor5Zyf5aGBIDwgZG9ydWlcIDsKK+Wcn+WhgCA8IGRvYmVpXCA7CivllJDpn7MgPCB0b3VvblwgOwor5Zug5b6qIDwgaW5qdW5cIDsKK+ewv+WkliA8IGJvZ2FpXCA7CivmjqHlkKYgPCBzYWloaVwgOwor5pKlIDwgYmFjaGlcIDsKK+aKgOeboyA8IGdpa2FuXCA7CivnqbrovLggPCBrdXV5dVwgOwor6KOc5YWFIDwgaG9qdXVcIDsKK+WdkeWEkiA8IGtvdWp1XCA7Civlm7rlrpogPCBrb3RlaVwgOwor5oyZ5o6qIDwga3lvc29cIDsKK+aJk+eulyA8IGRhc2FuXCA7Civmjp8gPCBva2l0ZVwgOwor5Zyf5ZqiIDwgZG9ub3VcIDsKK+a8uOasoSA8IHplbmppXCA7Civnqbrot68gPCBrdXVyb1wgOwor5Zu95aiBIDwga29rdWlcIDsKK+a9nOaZgiA8IHNlbmppXCA7Civmh6QgPCBjaHl1dVwgOwor6KOc5Lu7IDwgaG9uaW5cIDsKK+a8q+atqSA8IG1hbnBvXCA7CivmvIHngasgPCBneW9rYVwgOwor5oeH6KmxIDwga29ud2FcIDsKK+epuuiyuyA8IGt1dWhpXCA7Civom67oqp4gPCBiYW5nb1wgOwor5oiv57W1IDwgemFyZWVcIDsKK+Wbo+WtkCA8IGRhbmdvXCA7CivlnJ/lj7AgPCBkb2RhaVwgOwor5ra86ZuoIDwgcnlvdXVcIDsKK+WdiuS4uyA8IGJvdXp1XCA7CivllrbnuZUgPCBlaXplblwgOwor56e76aeQIDwgaWNodXVcIDsKK+iZjumtmiA8IG9rb3plXCA7CivnrpfmnKggPCBzYW5naVwgOwor5omL55u4IDwgdGVzb3VcIDsKK+Wcp+WAkiA8IGF0dG91XCA7CivmtbfpsLsgPCBhbmFnb1wgOwor5baNIDwgc2hpaHVcIDsKK+aGgui6qyA8IHVraW1pXCA7CivmibnngrkgPCBoaXRlblwgOwor5Zyf5YG2IDwgZG9ndXVcIDsKK+ihjOWuriA8IGFuZ3V1XCA7Civls6AgPCB0b3VnZVwgOwor5bKPIDwgZ3V3YW5cIDsKK+WTgOmhmCA8IGFpZ2FuXCA7CivlnJ/kurogPCBkb2ppblwgOwor5a2wIDwgaXp1cmVcIDsKK+aEm+mkkCA8IGFpc2FuXCA7CivlrIcgPCBrdXdhaVwgOwor6JuH6KGMIDwgZGFrb3VcIDsKK+a1hem7hCA8IGFzYWdpXCA7Civmhbbos4AgPCBrZWlnYVwgOwor6KGX5ZuzIDwgZ2FpenVcIDsKK+WjtyA8IHRzdWJvXCA7CivmiZPngrkgPCBkYXRlblwgOwor5ryP5paXIDwgcm91dG9cIDsKK+a4oeiIuSA8IHRvc2VuXCA7Civmt6vooYwgPCBpbmtvdVwgOwor5Z6UIDwgc2h5b3VcIDsKK+WejyA8IHJvdHN1XCA7Civlm64gPCBvdG9yaVwgOwor5rip57+SIDwgc2FyYWlcIDsKK+evgOWppiA8IHNlcHB1XCA7Civllp3noLQgPCBrYXBwYVwgOwor5ZenIDwgZ2Fyb25cIDsKK+WXliA8IHNodWh1XCA7CivlkozpoqggPCB3YWZ1dVwgOwor6J665peLIDwgcmFzZW5cIDsKK+eon+itsCA8IHJpbmdpXCA7CivmhoLomZ4gPCB5dXVndVwgOwor5omT5rOVIDwgZGFob3VcIDsKK+WTmCA8IHNhc291XCA7CivmibbmoZEgPCBmdXNvdVwgOwor6Jma6L6eIDwga3lvamlcIDsKK+ihm+WFtSA8IGVpaGVpXCA7CivmhJrpiI0gPCBndWRvblwgOwor6byg6LypIDwgc29oYWlcIDsKK+WQiyA8IGluY2hpXCA7Civlm57ku5ggPCBrYWlmdVwgOwor5Y2NIDwgbWFuamlcIDsKK+m8oOi5iiA8IHNva2VpXCA7CivljIEgPCBtb25tZVwgOwor5oqK5o+hIDwgaGFha3VcIDsKK+a4oeexsyA8IHRvYmVpXCA7Civmi7Plm7ogPCBnZW5rb1wgOwor5oqV5omTIDwgdG91ZGFcIDsKK+m6kum6nyA8IGtpcmluXCA7CivmhoLoi6YgPCB5dXVrdVwgOwor5Zef5q2OIDwgc2F0YW5cIDsKK+WEsiA8IG1vdWtlXCA7CivmtbfovrogPCB1bWliZVwgOwor5oSb6LuKIDwgYWlzaGFcIDsKK+aJk+ajkiA8IGRhYm91XCA7CivlgZ8gPCBrdXdhdVwgOwor5YCMIDwga3V3YW5cIDsKK+aCqumtlCA8IGFrdW1hXCA7Civmua/ngYwgPCB5dWthblwgOwor5omL5qG2IDwgdGVva2VcIDsKK+eosuiNtyA8IGluYXJpXCA7CivmtabovrogPCB1cmFiZVwgOwor5ZKM6YeRIDwgd2FraW5cIDsKK+m6nemmmSA8IGpha291XCA7CivpiI3pursgPCBkb25tYVwgOwor5oKq6aasIDwgYWt1bWVcIDsKK+aJi+acrCA8IHRlaG9uXCA7CivkuYQgPCBzaGltZVwgOwor5rib56OoIDwgZ2VubWFcIDsKK+eqgeegtCA8IHRvcHBhXCA7CivmtbfosZogPCBpcnVrYVwgOwor6JuH566hIDwgamFrYW5cIDsKK+WTgOipqSA8IGFpc2hpXCA7CivmiZPmlbAgPCBkYXN1dVwgOwor5oSa6KuWIDwgZ3Vyb25cIDsKK+aJi+aWpyA8IHRlb25vXCA7Civmi53lj5cgPCBoYWlqdVwgOwor5rWq6LK7IDwgcm91aGlcIDsKK+aJi+aVsCA8IHRlc3V1XCA7CivmiLjmnb8gPCB0b2l0YVwgOwor5ryi5ZyfIDwga2FuZG9cIDsKK+aEmuioiCA8IGd1a2VpXCA7CivpiZvpjJggPCBlbnN1aVwgOwor56uL5rS+IDwgcmlwcGFcIDsKK+aEmuimiyA8IGd1a2VuXCA7Civmg7notbcgPCBqYWtraVwgOwor5ZGz6YaCIDwgbWlyaW5cIDsKK+WRvemBiyA8IG1laXVuXCA7Civnp5joqIggPCBoaWtlaVwgOwor6JiH6YCjIDwgc29yZW5cIDsKK+aEmuihjCA8IGd1a291XCA7Civnqbrnlo4gPCBrdXVzb1wgOwor5ryB5aSrIDwgZ3lvZnVcIDsKK+aLneWFtyA8IGhhaWd1XCA7CivpioDosqggPCBnaW5rYVwgOwor56uv5pysIDwgaGFob25cIDsKK+a1gei7oiA8IHJ1dGVuXCA7CivmtbTooaMgPCB5b2t1aVwgOwor5ryB5aC0IDwgZ3lvYmFcIDsKK+aEj+ihqCA8IGloeW91XCA7CivmiK/mlocgPCBnaWJ1blwgOwor5ray6IKlIDwgZWtpaGlcIDsKK+epuueQhiA8IGt1dXJpXCA7CivmuoDmnJ8gPCBtYW5raVwgOwor5rmW5rC0IDwga29zdWlcIDsKK+WSjOiumiA8IHdhc2FuXCA7Civnq6/mlbAgPCBoYXN1dVwgOwor5ZiY5a2XIDwgdXNvamlcIDsKK+aIkOahiCA8IHNlaWFuXCA7Civms6LpoK0gPCBoYXRvdVwgOwor5oSb6JS1IDwgYWl6b3VcIDsKK+m6pumFkiA8IGJpaXJ1XCA7CivlkI3ppqwgPCBtZWliYVwgOwor5ZKM6KiTIDwgd2FrdW5cIDsKK+WSjOinoyA8IHdha2FpXCA7Civms6LpnaIgPCBoYW1lblwgOwor5omL5b2TIDwgdGVhdGVcIDsKK+eosuepgiA8IGluYWhvXCA7CivpvLvnt5IgPCBoYW5hb1wgOwor5ZKM6KO9IDwgd2FzZWlcIDsKK+mLpOewviA8IGpvcmVuXCA7Civlkozoo4UgPCB3YXNvdVwgOwor5ouF5L+dIDwgdGFucG9cIDsKK+WSjOijgSA8IHdhc2FpXCA7CivmhoLnm64gPCB1a2ltZVwgOwor5rip5rmvIDwgb250b3VcIDsKK+WQjOmfsyA8IGRvdW9uXCA7Civmhq7nhLYgPCBidXplblwgOwor5oKq6YGLIDwgYWt1dW5cIDsKK+aHuOaetiA8IGtlbmdhXCA7CivmgqPpg6ggPCBrYW5idVwgOwor6YqY6I+TIDwgbWVpa2FcIDsKK+m7kuihoyA8IGtva3VlXCA7Civmgp/pgZMgPCBnb2RvdVwgOwor5ZGz6KaLIDwgYWppbWlcIDsKK+eEoeaEj+WRsyA8IG11aW1pXCA7CivmuKnmsLQgPCBvbnN1aVwgOwor6by756uvIDwgYml0YW5cIDsKK+a4oea0iyA8IHRveW91XCA7CivmhJvogrIgPCBhaWlrdVwgOwor5ruF5aSaIDwgbWV0dGFcIDsKK+a3q+eMpSA8IGlud2FpXCA7CivmvIHlhbcgPCBneW9ndVwgOwor5oKq6LevIDwgYWt1cm9cIDsKK+aDheipsSA8IGpvdXdhXCA7CivnqK7nmq4gPCBzaHVoaVwgOwor5oSa6ICFIDwgZ3VzaGFcIDsKK+aJh+WtkCA8IHNlbnN1XCA7Civph47ppqwgPCBub3VtYVwgOwor56aF6KmxIDwgemVud2FcIDsKK+aIkeaFoiA8IGdhbWFuXCA7Civlj6TpoqggPCBrb2Z1dVwgOwor56m65rCXIDwga3V1a2lcIDsKK+epuuavjSA8IGt1dWJvXCA7CivllL7mtrIgPCBkYWVraVwgOwor5rqA5bqnIDwgbWFuemFcIDsKK+WWtuW6rSA8IGVpdGVpXCA7CivomZrnqbogPCBrb2t1dVwgOwor5re15rqQIDwgZW5nZW5cIDsKK+WSjOiIuSA8IHdhc2VuXCA7CivnpL7pgYsgPCBzaGF1blwgOwor5om55YikIDwgaGloYW5cIDsKK+aJi+WeoiA8IHRlYWthXCA7CivmgqroqIggPCBha2tlaVwgOwor5om55YeGIDwgaGlqdW5cIDsKK+m8k+erpSA8IGtvZG91XCA7CivlkI/pgZMgPCByb2RvdVwgOwor5oqV5LiOIDwgdG91eW9cIDsKK+aHuOaDsyA8IGtlc291XCA7Civlj5fpm6MgPCBqdW5hblwgOwor5oi45aSWIDwga29nYWlcIDsKK+aHuuaClCA8IHphbmdlXCA7Civpi7PniakgPCBpbW9ub1wgOwor5rip5pqWIDwgb25kYW5cIDsKK+a4oeadpSA8IHRvcmFpXCA7CivmgaXpg6ggPCBjaGlidVwgOwor5oe45b+1IDwga2VuZW5cIDsKK+aCquihjCA8IGFra291XCA7Civmt6HmuZYgPCB0YW5rb1wgOwor5oiQ5bCxIDwgam91anVcIDsKK+enn+eojiA8IHNvemVpXCA7CivlloTmhI8gPCB6ZW4nJ2lcIDsKK+WPpOmKrSA8IGtvc2VuXCA7Civnq6XlpbMgPCBkb3Vqb1wgOwor6byg55arIDwgc29la2lcIDsKK+a1gee9qiA8IHJ1emFpXCA7Civll5rlkr0gPCBvZXRzdVwgOwor5oGp6LWmIDwgb25zaGFcIDsKK+aJi+WLoiA8IHRlemVpXCA7CivmhI/lm7rlnLAgPCBpa29qaVwgOwor5reY5rGwIDwgdG91dGFcIDsKK+a0kuiQvSA8IHNoYXJlXCA7CivmtbfnoIIgPCBrYWlzYVwgOwor5Y+w6LyqIDwgZGFpd2FcIDsKK+a5luWyuCA8IGtvZ2FuXCA7CivmtLXnvo4gPCBqdW5iaVwgOwor56ys5LqMIDwgZGFpbmlcIDsKK+ekuuirhyA8IGppZGFuXCA7Civph47pg44gPCB5YXJvdVwgOwor5rOV6KqeIDwgaG91Z29cIDsKK+WQiOitsCA8IGdvdWdpXCA7Civmh4fmhI8gPCBrb24nJ2lcIDsKK+aHiuaCqSA8IG91bm91XCA7CivlkI3oqokgPCBtZWl5b1wgOwor5oSa55e0IDwgZ3VjaGlcIDsKK+awtOm2jyA8IGt1aW5hXCA7Civlj4npioMgPCBzYWp1dVwgOwor5rip5oOFIDwgb25qb3VcIDsKK+aEm+eUqCA8IGFpeW91XCA7Civmh4jmgKAgPCBnZXRhaVwgOwor5oSa55SfIDwgZ3VzZWlcIDsKK+mHiOi/piA8IHNoYWthXCA7Civmua/lnqIgPCB5dWFrYVwgOwor5oGL6LevIDwga29pamlcIDsKK+a0vuexsyA8IGhhYmVpXCA7Civms5XooqsgPCBoYXBwaVwgOwor6JeN6ImyIDwgYWlpcm9cIDsKK+err+WNiCA8IHRhbmdvXCA7CivomZrnhKEgPCBreW9tdVwgOwor5omL5LujIDwgdGVkYWlcIDsKK+WPl+i6qyA8IHVrZW1pXCA7CivmuKHlvqEgPCB0b2d5b1wgOwor5rC06a2UIDwgc3VpbWFcIDsKK+mHjui2oyA8IHlhc2h1XCA7Civlv6vpn7MgPCBrYWlvblwgOwor5omA5L2cIDwgc2hvc2FcIDsKK+WPpOixqiA8IGtvZ291XCA7Civph5HosqggPCBraW5rYVwgOwor5oSb54qsIDwgYWlrZW5cIDsKK+ejr+i+uiA8IGlzb2JlXCA7CivpvLvmsYEgPCBiaWp1dVwgOwor5oOw55ygIDwgZGFtaW5cIDsKK+aCque9tSA8IGFrdWJhXCA7CivmiJDlj6UgPCBzZWlrdVwgOwor5omA5LiOIDwgc2hveW9cIDsKK+WPpOiruiA8IGtvZ2VuXCA7CivnqLLmnKggPCBpbmFnaVwgOwor5Y+k6KiTIDwga29rdW5cIDsKK+epuuW3oyA8IGFraXN1XCA7CivmgqrnuIEgPCBha3VlblwgOwor5rip5a2YIDwgb256b25cIDsKK+WPl+ismyA8IGp1a291XCA7Civlj6HopqcgPCBlaXJhblwgOwor5Y2x6ZujIDwga2luYW5cIDsKK+W+oei+nuWEgCA8IG9qaWdpXCA7Civlv4XpoIggPCBoaXNzdVwgOwor5Y+N6KqeIDwgaGFuZ29cIDsKK+m8u+aguSA8IGJpa29uXCA7Civlj43oqLQgPCBoYW5zb1wgOwor6Yut5pWPIDwgZWliaW5cIDsKK+aEm+a2siA8IGFpZWtpXCA7CivlkI3oiJcgPCBtZWlob1wgOwor5rS+55SfIDwgaGFzZWlcIDsKK+WWh+WPrSA8IHJhcHBhXCA7CivpjbzljLsgPCBoYXJpaVwgOwor5oCq6KidIDwga2VnZW5cIDsKK+mHjuibriA8IHlhYmFuXCA7CivljbDpkZEgPCBpbmthblwgOwor5rGa6L6xIDwgb2pva3VcIDsKK+mKg+eBqyA8IGp1dWthXCA7CivmhJrmsJEgPCBndW1pblwgOwor5Zaq5Li7IDwgbW9zaHVcIDsKK+WNl+mYvyA8IG5hbicnYVwgOwor6buE54+tIDwgb3VoYW5cIDsKK+WQjee+qSA8IG1laWdpXCA7CivmsJHpnIAgPCBtaW5qdVwgOwor6Jma5qCEIDwga3lvZWlcIDsKK+a2heangyA8IG5laGFuXCA7Civmt7vlrZcgPCBzb2VqaVwgOwor5ZOh5pWwIDwgaW56dXVcIDsKK+a1ruawlyA8IHV3YWtpXCA7Civms6LntIsgPCBoYW1vblwgOwor56aF55S7IDwgemVuZ2FcIDsKK+eptOWgtCA8IGFuYWJhXCA7CivlkozmvKIgPCB3YWthblwgOwor5oSP5qyyIDwgaXlva3VcIDsKK+mHjuiPnCA8IHlhc2FpXCA7Civlj6TojLYgPCBrb2NoYVwgOwor56We56S+IDwgamluamFcIDsKK+m7hOeHkCA8IG91cmluXCA7CivmtYXngKwgPCBhc2FzZVwgOwor5b6h6ZujIDwgZ29uYW5cIDsKK+mHjuiNiSA8IHlhc291XCA7CivlvqHpmbAgPCBva2FnZVwgOwor6JqV5bqnIDwgc2FuemFcIDsKK+a4qeWOmiA8IG9ua291XCA7CivpioDms6IgPCBnaW5wYVwgOwor6YqA5rKzIDwgZ2luZ2FcIDsKK+aFleaDhSA8IGJvam91XCA7CivlkozmtIsgPCB3YXlvdVwgOwor5ZCN57C/IDwgbWVpYm9cIDsKK+a3i+W3tCA8IHJpbnBhXCA7CivmhYfmh4MgPCBpbmdpblwgOwor5b+16KqmIDwgbmVuanVcIDsKK+aEm+abuCA8IGFpc2hvXCA7Civmsr/nt5ogPCBlbnNlblwgOwor6YeR6IKlIDwga2lucGlcIDsKK+WOn+iiqyA8IGdlbnBpXCA7CivolZfojYkgPCByb3NvdVwgOwor5rCX6YeNIDwga2lvbW9cIDsKK+WNl+mDqCA8IG5hbmJ1XCA7Civmt6vlo7IgPCBpbmJhaVwgOwor56eY5pysIDwgaGlob25cIDsKK+aEmuaYpyA8IGd1bWFpXCA7CivmtYHmtaogPCBydXJvdVwgOwor5rC06LevIDwgc3Vpcm9cIDsKK+awl+mFjSA8IGtlaGFpXCA7CivolqznoJQgPCB5YWdlblwgOwor5Y+X6IOOIDwganV0YWlcIDsKK+W+rumGuiA8IGJpa3VuXCA7CivljYrph4wgPCBoYW5yaVwgOwor56iy5a2QIDwgaW5hZ29cIDsKK+avlOmhniA8IGhpcnVpXCA7CivmtYHmsJEgPCBydW1pblwgOwor5Y2D6YeMIDwgc2VucmlcIDsKK+WQjOelliA8IGRvdXNvXCA7CivpiYTngasgPCB0ZWtrYVwgOwor56C06aGUIDwgaGFnYW5cIDsKK+WNkei/kSA8IGhpa2luXCA7CivlvqHph5wgPCBva2FtYVwgOwor5b6h6YeRIDwgb2thbmVcIDsKK+a1puabsiA8IHVyYXdhXCA7Civph43nuIEgPCBqdXVlblwgOwor6YOo6aaWIDwgYnVzaHVcIDsKK+mDvembuyA8IHRvZGVuXCA7CivmhJrmjJkgPCBndWt5b1wgOwor5ZOA5oarIDwgYWliaW5cIDsKK+WTgOaGkCA8IGFpcmVuXCA7Civlvanpm7IgPCBzYWl1blwgOwor6YOo6aGeIDwgYnVydWlcIDsKK+iUrOiPnCA8IHNvc2FpXCA7CivlkozmnKwgPCB3YWhvblwgOwor5ray5a6JIDwgZWtpYW5cIDsKK+epuuS9kCA8IGt1dXNhXCA7Civlj5fntI0gPCBqdW5vdVwgOwor5ZOA5oOFIDwgYWlqb3VcIDsKK+WTgOaCvCA8IGFpdG91XCA7Civlkozmm7ggPCB3YXNob1wgOwor5oaC5ZOtIDwgdWtpbmVcIDsKK+WPl+eyiSA8IGp1ZnVuXCA7Civpg6jpnaIgPCBidW1lblwgOwor55+u6baPIDwgY2hhYm9cIDsKK+avq+mHkCA8IGdvdXJpXCA7CivmhJvmg7MgPCBhaXNvdVwgOwor6buE5qWKIDwgdHN1Z2VcIDsKK+mLs+WeiyA8IGlnYXRhXCA7Civlvq7os6QgPCBiaXNlblwgOwor5ZKM5paHIDwgd2FidW5cIDsKK+iWhOedgCA8IHVzdWdpXCA7Civms6LnirYgPCBoYWpvdVwgOwor6JaE55uuIDwgdXN1bWVcIDsKK+W+kui8qSA8IHRvaGFpXCA7Civph4znqIsgPCByaXRlaVwgOwor6JuH5L2TIDwgamF0YWlcIDsKK+eoveWPpCA8IGtlaWtvXCA7CivmhJrlvJ8gPCBndXRlaVwgOwor5oSa5byEIDwgZ3Vyb3VcIDsKK+iWq+eFmSA8IGt1bmVuXCA7CivmsrvnmZIgPCBjaGl5dVwgOwor5oKy5q2OIDwgaGl0YW5cIDsKK+axmuiHrSA8IG9zaHV1XCA7CivljZHoqIAgPCBoaWdlblwgOwor5rCR6KmxIDwgbWlud2FcIDsKK+avlOmHjSA8IGhpanV1XCA7Civnpo3moLkgPCBrYWtvblwgOwor6YeO56CyIDwgeWFob3VcIDsKK+aEieW/qyA8IHl1a2FpXCA7CivnqY/lgaUgPCBvbmtlblwgOwor5Y6f576pIDwgZ2VuZ2lcIDsKK+mYv+W8pemZgCA8IGFtaWRhXCA7CivmsrnnlLAgPCB5dWRlblwgOwor5by+6ZuoIDwgZGFuJyd1XCA7Civpg73pgpEgPCB0b3l1dVwgOwor5Y2K6KO4IDwgaGFucmFcIDsKK+W+oeipoCA8IGd5b2VpXCA7Civph43nm64gPCBvbW9tZVwgOwor56CC6ZiyIDwgc2Fib3VcIDsKK+WRquaWhyA8IGp1bW9uXCA7CivlvqHopqcgPCBnb3JhblwgOwor5ZCQ54CJIDwgdG9zaGFcIDsKK+a3q+S5sSA8IGlucmFuXCA7CivnpZ7mraYgPCBqaW5tdVwgOwor5ZCI54K5IDwgZ2F0ZW5cIDsKK+aEm+WtqyA8IGFpc29uXCA7CivmtYXmiYsgPCBhc2FkZVwgOwor6JqV5YW3IDwgc2FuZ3VcIDsKK+aDsOaApyA8IGRhc2VpXCA7CivlsYXlkIjpgZMgPCBpYWRvdVwgOwor5rK554q2IDwgeXVqb3VcIDsKK+mHjueUnyA8IHlhc2VpXCA7Civms6LmtaogPCBoYXJvdVwgOwor6JOu6I+vIDwgcmVuZ2VcIDsKK+aEm+WpvyA8IGFpc2VpXCA7Civlv43oi6YgPCBuaW5rdVwgOwor6YqD5bqnIDwganV1emFcIDsKK+WOn+ewvyA8IGdlbmJvXCA7CivpioDluqcgPCBnaW56YVwgOwor5oSb5aa7IDwgYWlzYWlcIDsKK+eojuWQjyA8IHplaXJpXCA7CivmhJvlpb0gPCBhaWtvdVwgOwor5Yq06Z+zIDwgcm91b25cIDsKK+mHjueNoyA8IHlhanV1XCA7Civph47njKogPCB5YWNob1wgOwor5rC06IKlIDwgc3VpaGlcIDsKK+WLn+mHkSA8IGJva2luXCA7CivphbjntKAgPCBzYW5zb1wgOwor6YeO54qsIDwgeWFrZW5cIDsKK+W7tumrhCA8IGVuenVpXCA7CivnqI7li5kgPCB6ZWltdVwgOwor5oKq5pelIDwgYWt1YmlcIDsKK+eomuWFkCA8IGNoaWdvXCA7Civlv43ogIUgPCBuaW5qYVwgOwor6by75YaFIDwgYmluYWlcIDsKK+WPpeeCuSA8IGt1dGVuXCA7CivnoLToq4cgPCBoYWRhblwgOwor5ZKM5bCaIDwgb3Nob3VcIDsKK+W9k+i3ryA8IHRvdXJvXCA7Civmg4XmhJsgPCBqb3VhaVwgOwor6YOo6LKhIDwgYnV6YWlcIDsKK+mJhOaJiSA8IHRlcHBpXCA7Civmtbflm7MgPCBrYWl6dVwgOwor5oSa5ZWPIDwgZ3Vtb25cIDsKK+awtOe0oCA8IHN1aXNvXCA7Civlk4Dlj7cgPCBhaWdvdVwgOwor5oKy5oakIDwgaGlmdW5cIDsKK+m6u+W5uSA8IG9nYXJhXCA7CivljbDnsaAgPCBpbnJvdVwgOwor56e75YWlIDwgaW55dXVcIDsKK+azsOaWlyA8IHRhaXRvXCA7CivmhJvlkJ8gPCBhaWdpblwgOwor6YeN5rmvIDwgb21veXVcIDsKK+asuumomSA8IGdpaGVuXCA7CivlvqHohbkgPCBvbmFrYVwgOwor5oKy5oGLIDwgaGlyZW5cIDsKK+WPpeazlSA8IGt1aG91XCA7Civlvq7nvaogPCBiaXphaVwgOwor5Y6f55S7IDwgZ2VuZ2FcIDsKK+WPpOazlSA8IGtvaG91XCA7CivomZrlgb0gPCBreW9naVwgOwor5Yuy6KiYIDwga3Vua2lcIDsKK+mHkeazoiA8IGtpbnBhXCA7Civmtbflj4IgPCBpcmlrb1wgOwor56eY5Y+yIDwgaGlzaGlcIDsKK+mCqumBkyA8IGphZG91XCA7CivljrPniLYgPCBnZW5wdVwgOwor6YqA5ZywIDwgZ2luamlcIDsKK+ekvuaYryA8IHNoYXplXCA7CivmtbfljLogPCBrYWlrdVwgOwor5Y2w56iOIDwgaW56ZWlcIDsKK+mHjeayuSA8IGp1dXl1XCA7Civnn67ouq8gPCB3YWlrdVwgOwor5oKq5b+DIDwgb3NoaW5cIDsKK+axl+eWuSA8IGFzZW1vXCA7CivmgqrlvpIgPCBha3V0b1wgOwor56G857SgIDwgaG91c29cIDsKK+WPl+a0lyA8IGp1c2VuXCA7CivpioDlmaggPCBnaW5raVwgOwor5b+r55mSIDwga2FpeXVcIDsKK+mHkeatryA8IGtpbmJhXCA7Civnn63ot68gPCB0YW5yb1wgOwor6YGg6Z+zIDwgdG9vbmVcIDsKK+W+rue0sCA8IGJpc2FpXCA7Civli4PotbcgPCBib2traVwgOwor5oSa5YOnIDwgZ3Vzb3VcIDsKK+emheWutiA8IHplbmtlXCA7CivliqDphY0gPCBrYWhhaVwgOwor5ZOB5L2NIDwgaGluJydpXCA7CivmrKfpoqggPCBvdWZ1dVwgOwor5rWE5ZyfIDwgam91ZG9cIDsKK+acqumAmuWlsyA8IG9ib2tvXCA7CivmgJLmv6QgPCBkb3RvdVwgOwor5oO55Y+lIDwgamFra3VcIDsKK+ejqOa3rCA8IG1hc2FpXCA7CivmsLjnnKAgPCBlaW1pblwgOwor5by36Ki0IDwgZ291c29cIDsKK+WShOWXnyA8IHRvc3NhXCA7CivmrabpgZMgPCBidWRvdVwgOwor5Y+N5q+UIDwgaGFucGlcIDsKK+WNsOebuCA8IGluem91XCA7CivmrKHpoZ4gPCBqaXJ1aVwgOwor5Y+N5q2vIDwgc29wcGFcIDsKK+WJqumZpCA8IHNlbmpvXCA7Civphrjmr40gPCBqb3Vib1wgOwor5q2m6L66IDwgYnVoZW5cIDsKK+W6p+mrmCA8IHpha291XCA7CivlkozlkI0gPCB3YW1laVwgOwor5oSb5Lq6IDwgYWlqaW5cIDsKK+WSjOWQiCA8IHdhZ291XCA7CivljYrnq68gPCBoYW5wYVwgOwor6JaE5pelIDwgdXN1YmlcIDsKK+aEmuS6uiA8IGd1amluXCA7Civlv5znlKggPCBvdXlvdVwgOwor5ZCm5b+cIDwgaXlhb3VcIDsKK+avjeiJpiA8IGJva2FuXCA7Civmsrnmlq0gPCB5dWRhblwgOwor5q+N6Ii5IDwgYm9zZW5cIDsKK+WPpOadpSA8IGtvcmFpXCA7Civlj6Tmm7ggPCBrb3Nob1wgOwor6YeO5pyrIDwgbm96dWVcIDsKK+mHjuacmyA8IHlhYm91XCA7CivmraPot68gPCBzZWlyb1wgOwor6Ymx5Yy6IDwga291a3VcIDsKK+azouW9oiA8IGhha2VpXCA7CivliY3pnZ4gPCB6ZW5waVwgOwor5rGa5r+BIDwgb2Rha3VcIDsKK+eigeebpCA8IGdvYmFuXCA7CivlvJjoqpMgPCBndXplaVwgOwor5rWu5LiWIDwgdWtpeW9cIDsKK+W6p+mgrSA8IHphdG91XCA7CivlkJDmga8gPCB0b2lraVwgOwor5oKq5aWzIDwgYWt1am9cIDsKK+avm+e5lCA8IGtlb3JpXCA7CivmsZ/muZYgPCBnb3Vrb1wgOwor5oGp5oSbIDwgb24nJ2FpXCA7CivmgqrlpKIgPCBha3VtdVwgOwor5YyX57evIDwgaG9rdWlcIDsKK+iWhOaJiyA8IHVzdWRlXCA7CivmganmgbUgPCBvbmtlaVwgOwor5rC454miIDwgZWlyb3VcIDsKK+WNiOedoSA8IGdvc3VpXCA7CivmtYHliJEgPCBydWtlaVwgOwor6YqA5L2NIDwgZ2luJydpXCA7CivljZfnlLsgPCBuYW5nYVwgOwor5Zuy54KJ6KOPIDwgaXJvcmlcIDsKK+W8geittyA8IGJlbmdvXCA7Civli6Toi6YgPCBraW5rdVwgOwor5Yqp6KiAIDwgam9nb25cIDsKK+azleW6piA8IGhhdHRvXCA7Civmg4XlkbMgPCBqb3VtaVwgOwor5ZCm5a6aIDwgaGl0ZWlcIDsKK+W9see1tSA8IGthZ2VlXCA7CivlkIzluqcgPCBkb3V6YVwgOwor56C057a7IDwgaGF0YW5cIDsKK+a0vuWFtSA8IGhhaGVpXCA7CivnpoXlkbMgPCB6ZW5taVwgOwor5oKq5ZugIDwgYWt1aW5cIDsKK+iSlOe1tSA8IG1ha2llXCA7CivljJXnrrggPCBoaWNob1wgOwor5Y2K55SwIDwgaGFuZGFcIDsKK+aBi+aFlSA8IHJlbmJvXCA7Civph43miYsgPCBvbW9kZVwgOwor5q2m6KOFIDwgYnVzb3VcIDsKK+WNkeeMpSA8IGhpd2FpXCA7CivnoLTnrpcgPCBoYXNhblwgOwor5ZGR5ZCQIDwgZG9udG9cIDsKK+ayueW9qSA8IHl1c2FpXCA7Civlj6Hmha4gPCBlaXJ5b1wgOwor5rWB5Lq6IDwgcnVuaW5cIDsKK+W+oeeSvSA8IGd5b2ppXCA7Civlj5bmiYsgPCB0b3R0ZVwgOwor5ZCN5a6bIDwgbmFhdGVcIDsKK+edgOmhniA8IGtpcnVpXCA7CivmrYzoq5YgPCBrYXJvblwgOwor6YeN5oSbIDwganV1YWlcIDsKK+WPsOW6pyA8IGRhaXphXCA7CivlibLos6YgPCB3YXBwdVwgOwor55yf6a+JIDwgbWFnb2lcIDsKK+aui+iKsSA8IHphbmthXCA7Civpu4TkurogPCBvdWppblwgOwor5rC05ripIDwgc3Vpb25cIDsKK+mBi+i8uCA8IHVuJyd5dVwgOwor6Jep5YSSIDwgaGFuanVcIDsKK+m6l+WPpSA8IHJlaWt1XCA7CivokYnojLYgPCBoYWRqYVwgOwor5b6h546JIDwgb3RhbWFcIDsKK+mBk+i3ryA8IGRvdXJvXCA7CivpgYvou6IgPCB1bnRlblwgOwor5Yid6ZmjIDwgdWlqaW5cIDsKK+mAo+mOliA8IHJlbnNhXCA7CivpgY3ot68gPCBoZW5yb1wgOwor6Ymb5Li5IDwgZW50YW5cIDsKK+awtOazsyA8IHN1aWVpXCA7Civms6XlnJ8gPCBkZWlkb1wgOwor5Y+L5oSbIDwgeXV1YWlcIDsKK+WQjOWknCA8IGRvdXlhXCA7Civph43luqYgPCBqdXVkb1wgOwor5YmN6LyqIDwgbWFld2FcIDsKK+ayu+WuiSA8IGNoaWFuXCA7CivpiI3lmaggPCBkb25raVwgOwor5oCn5oSbIDwgc2VpYWlcIDsKK+eggue1tSA8IHN1bmFlXCA7CivmspnlvKUgPCBzaGFtaVwgOwor56Wt5YW3IDwgc2FpZ3VcIDsKK+mFjea1gSA8IGhhaXJ1XCA7CivliIjpmaQgPCBnYWlqb1wgOwor5oCo5oGoIDwgZW5rb25cIDsKK+mBoOimiyA8IHRvb21pXCA7CivojbfppqwgPCBuaXVtYVwgOwor55yf6aGUIDwgbWFnYW9cIDsKK+WIqemIjSA8IHJpZG9uXCA7CivmgJ3mhZUgPCBzaGlib1wgOwor5oCg5oOwIDwgdGFpZGFcIDsKK+WIqemHkSA8IHJpa2luXCA7CivphZTmrakgPCBzdWlob1wgOwor5Ye56Z2iIDwgb3VtZW5cIDsKK+WQn+WRsyA8IGdpbm1pXCA7CivmraboirggPCBidWdlaVwgOwor5b6S54S2IDwgdG96ZW5cIDsKK+mHkeWtkCA8IGtpbnN1XCA7CivljZjmr5QgPCB0YW5waVwgOwor6YGO6KiAIDwga2Fnb25cIDsKK+ekvuWToSA8IHNoYWluXCA7CivmgqrkuosgPCBha3VqaVwgOwor5b2p55S7IDwgc2FpZ2FcIDsKK+iWq+WMliA8IGt1bmthXCA7CivnpZblhYggPCBzb3NlblwgOwor6YiN5YyWIDwgZG9ua2FcIDsKK+WIpemAlCA8IGJldHRvXCA7Civlj7DloLQgPCBkYWliYVwgOwor6JaE5ZywIDwgdXN1amlcIDsKK+WNsOadkCA8IGluemFpXCA7CivlubPph44gPCBoZWl5YVwgOwor5oGv5ZC5IDwgaWJ1a2lcIDsKK+WQjeWPpSA8IG1laWt1XCA7CivmrabogIUgPCBtdXNoYVwgOwor56S+5YuZIDwgc2hhbXVcIDsKK+WOn+aEjyA8IGdlbicnaVwgOwor5Y+k5aKzIDwga29mdW5cIDsKK+mHjuWkqSA8IG5vdGVuXCA7CivlkIjlkKYgPCBnb3VoaVwgOwor5Yq057WEIDwgcm91c29cIDsKK+mHjuWkliA8IHlhZ2FpXCA7Civluqfoq4cgPCB6YWRhblwgOwor5byX57SgIDwgZnVzc29cIDsKK+azleWLmSA8IGhvdW11XCA7CivlvqHkuJbovp4gPCBvc2VqaVwgOwor56C054mHIDwgaGFoZW5cIDsKK+WQkOWJpCA8IHRvemFpXCA7CivlvqHmrr8gPCBnb3RlblwgOwor5Yy65rCRIDwga3VtaW5cIDsKK+efsyA8IGtva3VcIDsKK+i/qyA8IGhha3VcIDsKK+i/hCA8IG1hZGVcIDsKK+W/gyA8IHNoaW5cIDsKK+i+vCA8IGtvbXVcIDsKK+W+tCA8IGNob3VcIDsKK+W+syA8IHRva3VcIDsKK+i+sSA8IGpva3VcIDsKK+eerSA8IHJ5b3VcIDsKK+eerCA8IHNodW5cIDsKK+W+qSA8IGZ1a3VcIDsKK+W9vCA8IGthcmVcIDsKK+W9uSA8IHlha3VcIDsKK+W9sSA8IGthZ2VcIDsKK+edpiA8IGJva3VcIDsKK+W8viA8IHRhbWFcIDsKK+W8tyA8IGt5b3VcIDsKK+i8ryA8IHNodXVcIDsKK+eciSA8IG1heXVcIDsKK+i8gyA8IGtha3VcIDsKK+ebtCA8IGhpdGFcIDsKK+i7kiA8IG5va2lcIDsKK+W7giA8IHNob3VcIDsKK+eavyA8IHNhcmFcIDsKK+W6tSA8IGlvcmlcIDsKK+eariA8IGthd2FcIDsKK+W6rSA8IG5pd2FcIDsKK+W6lyA8IG1pc2VcIDsKK+W6lSA8IHNva29cIDsKK+i6kSA8IHRla2lcIDsKK+i6iiA8IGNodXVcIDsKK+W6iiA8IHl1a2FcIDsKK+eahCA8IG1hdG9cIDsKK+W5uSA8IG1pa2lcIDsKK+W5syA8IGhpcmFcIDsKK+i5oCA8IHNla2lcIDsKK+eZliA8IGt1c2VcIDsKK+W5hSA8IGhhYmFcIDsKK+W4uCA8IHRvd2FcIDsKK+W4jCA8IG1hcmVcIDsKK+W4gyA8IG51bm9cIDsKK+W3uyA8IG1ha2lcIDsKK+i2syA8IGFzaGlcIDsKK+i2iiA8IGV0c3VcIDsKK+eVmSA8IHJ5dXVcIDsKK+eUsyA8IHNhcnVcIDsKK+eUnyA8IG5hbWFcIDsKK+W0liA8IGdha2VcIDsKK+W0jiA8IHNha2lcIDsKK+WzsCA8IG1pbmVcIDsKK+iziiA8IHpva3VcIDsKK+izgyA8IGNoaW5cIDsKK+WxsSA8IHlhbWFcIDsKK+WxkSA8IGt1enVcIDsKK+ixhiA8IG1hbWVcIDsKK+eQtCA8IGtvdG9cIDsKK+WvviA8IHRzdWlcIDsKK+WvuiA8IHRlcmFcIDsKK+WvjCA8IHRvbWlcIDsKK+WvgiA8IHNhYmlcIDsKK+WuvyA8IHlhZG9cIDsKK+WuriA8IG1peWFcIDsKK+WupCA8IG11cm9cIDsKK+eOliA8IGt5dXVcIDsKK+eOiSA8IGRhbWFcIDsKK+WuiSA8IHlhc3VcIDsKK+WuiCA8IG1vcmlcIDsKK+WuhSA8IHRha3VcIDsKK+WtuCA8IGdha3VcIDsKK+WtqyA8IG1hZ29cIDsKK+eNqCA8IGRva3VcIDsKK+eNhCA8IGdva3VcIDsKK+eMqyA8IG5la29cIDsKK+isoSA8IHV0YWlcIDsKK+isjiA8IG5hem9cIDsKK+WrgSA8IHlvbWVcIDsKK+iqsCA8IGRhcmVcIDsKK+WpvyA8IG11a29cIDsKK+eJqSA8IG1vbm9cIDsKK+eJmyA8IHVzaGlcIDsKK+iplSA8IGh5b3VcIDsKK+WphiA8IGJhYmFcIDsKK+iosyA8IHdha2VcIDsKK+eIhiA8IGJha3VcIDsKK+WnqyA8IGhpbWVcIDsKK+WmmSA8IG15b3VcIDsKK+eGiiA8IGt1bWFcIDsKK+eFpCA8IHN1c3VcIDsKK+eEvCA8IHlha2lcIDsKK+WkqyA8IG90dG9cIDsKK+WkoiA8IHl1bWVcIDsKK+WknCA8IHlvcnVcIDsKK+WkliA8IGhva2FcIDsKK+ijviA8IHN1c29cIDsKK+WjsSA8IGljaGlcIDsKK+WjkyA8IGF0c3VcIDsKK+WjgSA8IGthYmVcIDsKK+eCuiA8IHRhbWVcIDsKK+eCrSA8IHN1bWlcIDsKK+iiliA8IHNvZGVcIDsKK+WikyA8IGhha2FcIDsKK+WhqSA8IHNoaW9cIDsKK+WhniA8IHNva3VcIDsKK+ihkyA8IHN1YmVcIDsKK+ihjCA8IGd5b3VcIDsKK+eAnSA8IHJla2lcIDsKK+WggCA8IGhvcmlcIDsKK+a/gSA8IGRha3VcIDsKK+a/gCA8IGdla2lcIDsKK+WeoyA8IGtha2lcIDsKK+WeiyA8IGthdGFcIDsKK+idiSA8IHNlbWlcIDsKK+WdgiA8IHNha2FcIDsKK+m8uyA8IGhhbmFcIDsKK+WckiA8IHNvbm9cIDsKK+WbvSA8IGt1bmlcIDsKK+m7tCA8IGthYmlcIDsKK+m7mSA8IG1va3VcIDsKK+m7kiA8IGt1cm9cIDsKK+m7jSA8IGtpYmlcIDsKK+ibhyA8IGhlYmlcIDsKK+a6uiA8IGRla2lcIDsKK+m6piA8IG11Z2lcIDsKK+iapCA8IG5vbWlcIDsKK+a6oiA8IGl0c3VcIDsKK+a6nSA8IG1pem9cIDsKK+iZjiA8IHRvcmFcIDsKK+m3uSA8IHRha2FcIDsKK+iXpCA8IGZ1amlcIDsKK+iXgSA8IHdhcmFcIDsKK+WWiSA8IG5vZG9cIDsKK+a1tCA8IHlva3VcIDsKK+a1nCA8IGhhbWFcIDsKK+WUryA8IHRhZGFcIDsKK+a0niA8IGhvcmFcIDsKK+a0myA8IHJha3VcIDsKK+WUliA8IG9zaGlcIDsKK+iTriA8IGhhc3VcIDsKK+mzqSA8IGhhdG9cIDsKK+mzpSA8IHRvcmlcIDsKK+azpSA8IGRvcm9cIDsKK+azoiA8IG5hbWlcIDsKK+iTiyA8IGZ1dGFcIDsKK+ayvCA8IG51bWFcIDsKK+iSuyA8IGpha3VcIDsKK+iSsiA8IGdhbWFcIDsKK+ayoiA8IHNhd2FcIDsKK+mxiCA8IHRhcmFcIDsKK+iQvSA8IG9jaGlcIDsKK+awtCA8IG1penVcIDsKK+awkSA8IHRhbWlcIDsKK+WPsyA8IG1pZ2lcIDsKK+WPpCA8IGZ1cnVcIDsKK+avjSA8IGhhaGFcIDsKK+iPiiA8IGtpa3VcIDsKK+WPiyA8IHRvbW9cIDsKK+WPiCA8IG1hdGFcIDsKK+auvyA8IGRvbm9cIDsKK+auuyA8IGthcmFcIDsKK+iOoiA8IHNheWFcIDsKK+WOnyA8IGhhcmFcIDsKK+iNiSA8IGt1c2FcIDsKK+WNhyA8IG1hc3VcIDsKK+mssSA8IHV0c3VcIDsKK+msmiA8IGhpZ2VcIDsKK+WMmSA8IHNhamlcIDsKK+WMlyA8IGhva3VcIDsKK+iMjiA8IGt1a2lcIDsKK+iMhSA8IGtheWFcIDsKK+WMgiA8IG5pb3VcIDsKK+mrtyA8IG1hZ2VcIDsKK+mrqiA8IGthbWlcIDsKK+iLlCA8IGtva2VcIDsKK+mqqCA8IGhvbmVcIDsKK+WKqSA8IHN1a2VcIDsKK+WJsiA8IHdhcmlcIDsKK+apnyA8IGhhdGFcIDsKK+WJiiA8IHNha3VcIDsKK+iIuSA8IGZ1bmVcIDsKK+WIuiA8IHRvZ2VcIDsKK+aoqiA8IHlva29cIDsKK+WIiCA8IGthcmlcIDsKK+aohSA8IG1vbWlcIDsKK+mnkiA8IGtvbWFcIDsKK+iHjSA8IGhlc29cIDsKK+WGrCA8IGZ1eXVcIDsKK+iGnSA8IGhpemFcIDsKK+iGnCA8IG1ha3VcIDsKK+mmliA8IGt1YmlcIDsKK+WGhiA8IG1hcnVcIDsKK+WGhSA8IHVjaGlcIDsKK+WFsSA8IGRvbW9cIDsKK+alrSA8IHdhemFcIDsKK+WFrSA8IHJva3VcIDsKK+WFpSA8IG55dXVcIDsKK+WFgyA8IG1vdG9cIDsKK+WEmCA8IG1hbWFcIDsKK+iEhyA8IHdha2lcIDsKK+iEgiA8IHlhbmlcIDsKK+iDuCA8IG11bmVcIDsKK+ajmiA8IHRhbmFcIDsKK+iCnSA8IGtpbW9cIDsKK+iCmCA8IGhpamlcIDsKK+WCmCA8IGthc2FcIDsKK+iCjCA8IGhhZGFcIDsKK+iCiSA8IG5pa3VcIDsKK+aigyA8IHRla29cIDsKK+WBvSA8IG5pc2VcIDsKK+ahkCA8IGtpcmlcIDsKK+ahgyA8IG1vbW9cIDsKK+ahgSA8IGtldGFcIDsKK+iAsyA8IG1pbWlcIDsKK+mgrCA8IGhvaG9cIDsKK+aglyA8IGt1cmlcIDsKK+mggyA8IGdvcm9cIDsKK+afmiA8IHl1enVcIDsKK+S+oSA8IGF0YWlcIDsKK+adliA8IHRzdWVcIDsKK+adkSA8IG11cmFcIDsKK+adjyA8IGFuenVcIDsKK+adiSA8IHN1Z2lcIDsKK+S8vSA8IHRvZ2lcIDsKK+acrSA8IGZ1ZGFcIDsKK+mbsiA8IGt1bW9cIDsKK+S7siA8IG5ha2FcIDsKK+mbqiA8IHl1a2lcIDsKK+mbjCA8IG1lc3VcIDsKK+S6uiA8IGhpdG9cIDsKK+mamSA8IHN1a2lcIDsKK+aahyA8IGhpbWFcIDsKK+S5iyA8IGtvcmVcIDsKK+aZgiA8IHRva2lcIDsKK+aYvCA8IGhpcnVcIDsKK+e4piA8IHRhdGVcIDsKK+aYpSA8IGhhcnVcIDsKK+S4iCA8IGRha2VcIDsKK+e4hCA8IG5hd2FcIDsKK+mXhyA8IHlhbWlcIDsKK+aXhSA8IHRhYmlcIDsKK+e2vyA8IHdhdGFcIDsKK+e1uSA8IGtpbnVcIDsKK+e1hCA8IGt1bWlcIDsKK+e0kCA8IGhpbW9cIDsKK+e0hSA8IGJlbmlcIDsKK+eypSA8IGtheXVcIDsKK+eyiSA8IGtvbmFcIDsKK+exsyA8IGtvbWVcIDsKK+exoCA8IGthZ29cIDsKK+mQmCA8IGthbmVcIDsKK+aPuiA8IHl1cmlcIDsKK+aPjyA8IGJ5b3VcIDsKK+eusSA8IGhha29cIDsKK+euoSA8IGt1ZGFcIDsKK+mNtSA8IGthZ2lcIDsKK+mNiyA8IG5hYmVcIDsKK+etiyA8IHN1amlcIDsKK+etiSA8IG5hZG9cIDsKK+etiCA8IGhhenVcIDsKK+ethiA8IGZ1ZGVcIDsKK+esuSA8IHNhc2FcIDsKK+aMhyA8IHl1YmlcIDsKK+eruSA8IHRha2VcIDsKK+eqkyA8IG1hZG9cIDsKK+mKkSA8IHp1a3VcIDsKK+epuiA8IHNvcmFcIDsKK+aJhyA8IG91Z2lcIDsKK+aIvyA8IGZ1c2FcIDsKK+mItCA8IHN1enVcIDsKK+eoriA8IHRhbmVcIDsKK+aIkSA8IHdhcmVcIDsKK+eojSA8IHlheWFcIDsKK+eoiyA8IGhvZG9cIDsKK+mHnSA8IGhhcmlcIDsKK+mHnCA8IGthbWFcIDsKK+mHmCA8IGt1Z2lcIDsKK+emvyA8IGhhZ2VcIDsKK+aGqSA8IGlrb2lcIDsKK+mFkiA8IHNha2VcIDsKK+aFiyA8IHphbWFcIDsKK+aDkSA8IHdha3VcIDsKK+aCqiA8IHdhcnVcIDsKK+eipyA8IGhla2lcIDsKK+aBpSA8IGhhamlcIDsKK+mAmiA8IHRzdXVcIDsKK+eggiA8IHN1bmFcIDsKK+W/nOaPtCA8IG91ZW5cIDsKK+WPpOWZqCA8IGtva2lcIDsKK+WHjembqCA8IHRvdXVcIDsKK+W+kuatqSA8IHRvaG9cIDsKK+WPr+WQpiA8IGthaGlcIDsKK+W+kOatqSA8IGpvaG9cIDsKK+W6h+ittyA8IGhpZ29cIDsKK+mHjuWWtiA8IHlhZWlcIDsKK+azleS8miA8IGhvdWVcIDsKK+WQjOS9jSA8IGRvdWlcIDsKK+WNseaHvCA8IGtpZ3VcIDsKK+WPpeWPpSA8IGt1a3VcIDsKK+WPo+WPlyA8IGt1anVcIDsKK+ayu+WFtyA8IGppZ3VcIDsKK+WGt+mbqCA8IHJlaXVcIDsKK+W9k+eCuiA8IHRvdWlcIDsKK+WPs+WFmiA8IHV0b3VcIDsKK+mBuueyviA8IGlzZWlcIDsKK+mHjuWNkSA8IHlhaGlcIDsKK+WPs+WCviA8IHVrZWlcIDsKK+WMu+abuCA8IGlzaG9cIDsKK+mBleiDjCA8IGloYWlcIDsKK+aAqOWXnyA8IGVuc2FcIDsKK+m4muWTpSA8IGlua29cIDsKK+egtOavgCA8IGhha2lcIDsKK+WPjeWQkCA8IGhlZG9cIDsKK+WPjeWPpCA8IGhvZ29cIDsKK+WPpOWEgCA8IGtvZ2lcIDsKK+WNsOW6piA8IGluZG9cIDsKK+mBuueovyA8IGlrb3VcIDsKK+ebuOmBlSA8IHNvdWlcIDsKK+W6p+iHpSA8IHphZ2FcIDsKK+W4sOmAlCA8IGtpdG9cIDsKK+WGhumhsSA8IGVucm9cIDsKK+ejgeWgtCA8IGppYmFcIDsKK+WPpOS6iyA8IGtvamlcIDsKK+awuOWvvyA8IGVpanVcIDsKK+W+gOaZgiA8IG91amlcIDsKK+ejgeWcnyA8IGppZG9cIDsKK+m0ieeJhyA8IGFoZW5cIDsKK+WNsOWtlyA8IGluamlcIDsKK+mBleeulyA8IGlzYW5cIDsKK+WPmeS6iyA8IGpvamlcIDsKK+ejgeWZqCA8IGppa2lcIDsKK+W+ruW+riA8IGJpYmlcIDsKK+W4sOi3ryA8IGtpcm9cIDsKK+W+oeaEjyA8IGd5b2lcIDsKK+eggua0siA8IHNhc3VcIDsKK+WNiOW+jCA8IGdvZ29cIDsKK+avgOajhCA8IGtpa2lcIDsKK+mBoOelliA8IGVuc29cIDsKK+W+jOaJiyA8IGdvdGVcIDsKK+W5suiRiSA8IGhpYmFcIDsKK+W8leeBqyA8IGlua2FcIDsKK+W+oeW9sSA8IGdvZWlcIDsKK+aouemZsCA8IGp1aW5cIDsKK+iLsemfsyA8IGVpb25cIDsKK+axmuWQjSA8IG9tZWlcIDsKK+ejgeWMuiA8IGppa3VcIDsKK+mCqua3qyA8IGphaW5cIDsKK+i/guiogCA8IHVnZW5cIDsKK+ejgeWMliA8IGppa2FcIDsKK+WMu+W4qyA8IGlzaGlcIDsKK+W9vOaIkSA8IGhpZ2FcIDsKK+WNseWdkCA8IGtpemFcIDsKK+apn+mBiyA8IGtpdW5cIDsKK+WKqea8lCA8IGpvZW5cIDsKK+mCquawlyA8IGpha2lcIDsKK+W8peasoSA8IHlhamlcIDsKK+W+gOW+gCA8IG91b3VcIDsKK+WIgOiHqiA8IHRvamlcIDsKK+W+oeWtkCA8IG1pa29cIDsKK+WMu+WumCA8IGlrYW5cIDsKK+WKoOa4qSA8IGthb25cIDsKK+mBjueWjiA8IGthc29cIDsKK+W/nOWLnyA8IG91Ym9cIDsKK+mBuua8jyA8IGlyb3VcIDsKK+W+jOWutiA8IGdva2VcIDsKK+WMu+WkpyA8IGlkYWlcIDsKK+autOaJkyA8IG91ZGFcIDsKK+atqeatpiA8IGhvYnVcIDsKK+mBleeKryA8IGloYW5cIDsKK+WGhuiyqCA8IGVua2FcIDsKK+awl+WRsyA8IGdpbWlcIDsKK+awl+WQiCA8IGtpYWlcIDsKK+W4g+ihjSA8IGZ1ZW5cIDsKK+mtlOmthSA8IG1hbWlcIDsKK+W+jOWgtCA8IGdvYmFcIDsKK+egtOWutiA8IGJha2FcIDsKK+awl+WMliA8IGtpa2FcIDsKK+W+geWktyA8IHNlaWlcIDsKK+awtOS9jSA8IHN1aWlcIDsKK+WGhuimjyA8IGVua2lcIDsKK+ebiOiZpyA8IGVpa2lcIDsKK+W+oeWQjSA8IG1pbmFcIDsKK+mDqOWxiyA8IGhleWFcIDsKK+iLseiyqCA8IGVpa2FcIDsKK+mBjua4oSA8IGthdG9cIDsKK+mBleazlSA8IGlob3VcIDsKK+aut+WvjCA8IGlucHVcIDsKK+iMo+iTmSA8IGdvemFcIDsKK+iLseiqniA8IGVpZ29cIDsKK+mBi+aysyA8IHVuZ2FcIDsKK+efpeaBtSA8IGNoaWVcIDsKK+mBi+awlyA8IHVua2lcIDsKK+i8uOi0jyA8IHl1ZWlcIDsKK+WLouWtkCA8IHNla29cIDsKK+WMheWbsiA8IGhvdWlcIDsKK+W+gOWPpCA8IG91a29cIDsKK+WKoOaMgSA8IGthamlcIDsKK+W8p+W6piA8IGtvZG9cIDsKK+mDveWWtiA8IHRvZWlcIDsKK+avlOWWqSA8IGhpeXVcIDsKK+mBuuaWhyA8IGlidW5cIDsKK+mAoueArCA8IG91c2VcIDsKK+WHuuebriA8IGRlbWVcIDsKK+atpuaKgCA8IGJ1Z2lcIDsKK+W6p+a0siA8IHphc3VcIDsKK+W+oeS7oyA8IG1peW9cIDsKK+WMu+S8miA8IGlrYWlcIDsKK+W+l+S9kyA8IGV0YWlcIDsKK+W9seWNsCA8IGVpaW5cIDsKK+WGhuiIniA8IGVuYnVcIDsKK+m1nOWMoCA8IHVqb3VcIDsKK+avjeWNsCA8IGJvaW5cIDsKK+mAuOapnyA8IGlra2lcIDsKK+mDqOWToSA8IGJ1aW5cIDsKK+earuiGmiA8IGhpZnVcIDsKK+WIt+avmyA8IGhha2VcIDsKK+atpuW6qyA8IGJ1a29cIDsKK+apn+e4gSA8IGtpZW5cIDsKK+egguWcnyA8IHNhZG9cIDsKK+mBuuaBqCA8IGlrb25cIDsKK+iKseitnCA8IGthZnVcIDsKK+avlOS+oSA8IGhpa2FcIDsKK+atpuWutiA8IGJ1a2VcIDsKK+aoquiHpSA8IG91Z2FcIDsKK+mssemHkSA8IHVrb25cIDsKK+avlOS4mCA8IGJpa3VcIDsKK+mDveS4iyA8IHRva2FcIDsKK+efouWgtCA8IHlhYmFcIDsKK+mBleaGsiA8IGlrZW5cIDsKK+W7tuWvvyA8IGVuanVcIDsKK+eZvuiIjCA8IG1venVcIDsKK+atpuWkqyA8IGJ1ZnVcIDsKK+egguWIqSA8IGphcmlcIDsKK+mDqOS4iyA8IGJ1a2FcIDsKK+eeveWlsyA8IGdvemVcIDsKK+WHuuatryA8IGRlYmFcIDsKK+mBjuW6piA8IGthZG9cIDsKK+atpuWZqCA8IGJ1a2lcIDsKK+mBi+W6pyA8IHVuemFcIDsKK+asoeW6jyA8IGppam9cIDsKK+aooeeziiA8IG1va29cIDsKK+iKseiKvSA8IGthZ2FcIDsKK+W5s+aYkyA8IGhlaWlcIDsKK+atqeWQiCA8IGJ1YWlcIDsKK+eWjumfsyA8IHNvaW5cIDsKK+aoueeariA8IGp1aGlcIDsKK+W6nOW6qyA8IGZ1a29cIDsKK+mBuuWTgSA8IGloaW5cIDsKK+eWkembsiA8IGdpdW5cIDsKK+mBuuWRvSA8IGltZWlcIDsKK+atpOWHpiA8IGtva29cIDsKK+atpuWFtyA8IGJ1Z3VcIDsKK+WHoOahiCA8IGtpYW5cIDsKK+atpuWCmSA8IGJ1YmlcIDsKK+i/veaJiyA8IG90dGVcIDsKK+eVsOmiqCA8IGlmdXVcIDsKK+eVsOmhniA8IGlydWlcIDsKK+WIqeW3sSA8IHJpa29cIDsKK+atpuS6iyA8IGJ1amlcIDsKK+iNiuajmCA8IGJhcmFcIDsKK+mtlOe+hSA8IG1hcmFcIDsKK+mBuuS9kyA8IGl0YWlcIDsKK+mBuuS8nSA8IGlkZW5cIDsKK+mBjuWOuyA8IGtha29cIDsKK+asp+WMliA8IG91a2FcIDsKK+eWjumBoCA8IHNvZW5cIDsKK+eWkei+niA8IGdpamlcIDsKK+W3pua0viA8IHNhaGFcIDsKK+iJtue+jiA8IGVuYmlcIDsKK+mpoummrCA8IHJvYmFcIDsKK+WykOmYnCA8IGdpZnVcIDsKK+W6p+WToSA8IHphaW5cIDsKK+awuOOAhSA8IGVpZWlcIDsKK+ecn+W4hiA8IG1haG9cIDsKK+ebuOaJiyA8IGFpdGVcIDsKK+W6puWQiCA8IGRvYWlcIDsKK+mBleS+iyA8IGlyZWlcIDsKK+WIqeWZqCA8IHJpa2lcIDsKK+iJsue1tSA8IGlyb2VcIDsKK+W7g+S9jSA8IGhhaWlcIDsKK+W4g+aWvSA8IGZ1c2VcIDsKK+iHquiyuyA8IGppaGlcIDsKK+iHquiyoCA8IGppZnVcIDsKK+WFpeaxnyA8IGlyaWVcIDsKK+movummrCA8IHJhYmFcIDsKK+iKseeOiyA8IGthb3VcIDsKK+aji+mZoiA8IGtpaW5cIDsKK+W4t+W5hCA8IGlha3VcIDsKK+iLseatpiA8IGVpYnVcIDsKK+eVsOi2oyA8IGlzaHVcIDsKK+WFt+ahiCA8IGd1YW5cIDsKK+iHquihmyA8IGppZWlcIDsKK+eVsOirliA8IGlyb25cIDsKK+ebuOWtkCA8IGFpa29cIDsKK+W6nOS4iyA8IGZ1a2FcIDsKK+mtlOeOiyA8IG1hb3VcIDsKK+WIqeS7liA8IHJpdGFcIDsKK+mojummrCA8IGtpYmFcIDsKK+apn+W9sSA8IGtpZWlcIDsKK+eZuuadoSA8IGJhbmVcIDsKK+WGheaEjyA8IG5haWlcIDsKK+apn+W6jyA8IGtpam9cIDsKK+W4neWogSA8IHRlaWlcIDsKK+i/guWbniA8IHVrYWlcIDsKK+mAgOS9jSA8IHRhaWlcIDsKK+aihembqCA8IGJhaXVcIDsKK+aooeaTrCA8IG1vZ2lcIDsKK+WGhuW8pyA8IGVua29cIDsKK+eXsueXuiA8IG1haGlcIDsKK+ebruWcsCA8IG1lamlcIDsKK+WGhuW6pyA8IGVuemFcIDsKK+iKseaouSA8IGthanVcIDsKK+eUu+itnCA8IGdhZnVcIDsKK+apn+WunCA8IGtpZ2lcIDsKK+WwvumDqCA8IGJpYnVcIDsKK+ebsuWUliA8IG1vdWFcIDsKK+S+nemhmCA8IGlnYW5cIDsKK+S+nemgvCA8IGlyYWlcIDsKK+eWkee+qSA8IGdpZ2lcIDsKK+ecn+S8vCA8IG1hbmVcIDsKK+aji+itnCA8IGtpZnVcIDsKK+WFkOaIryA8IGppZ2lcIDsKK+ecn+S4iiA8IG1hdWVcIDsKK+W4jOWcnyA8IGtpZG9cIDsKK+iHmeiEgiA8IGVuamlcIDsKK+WBg+iHpSA8IGVuZ2FcIDsKK+iDoem6uyA8IGdvbWFcIDsKK+agl+m8oCA8IHJpc3VcIDsKK+WvuumZoiA8IGppaW5cIDsKK+ebruWHpiA8IG1lZG9cIDsKK+mnhOmmrCA8IGRhYmFcIDsKK+WFrOWutiA8IGt1Z2VcIDsKK+msseawlyA8IHVra2lcIDsKK+i7veaYkyA8IGtlaWlcIDsKK+iLseWtlyA8IGVpamlcIDsKK+S/muiqniA8IHJpZ29cIDsKK+WxoOiYhyA8IHRvc29cIDsKK+mnhumZpCA8IGt1am9cIDsKK+WvnemWkyA8IG5lbWFcIDsKK+ebruS4iiA8IG1ldWVcIDsKK+i8quW3riA8IHdhc2FcIDsKK+S9memfuyA8IHlvaW5cIDsKK+eVsOerryA8IGl0YW5cIDsKK+W3peWQiCA8IGd1YWlcIDsKK+iKseW6jyA8IGtham9cIDsKK+Wxsee+iiA8IHlhZ2lcIDsKK+iLpuWcnyA8IGt1ZG9cIDsKK+Wvv+izgCA8IGp1Z2FcIDsKK+iHqueUuyA8IGppZ2FcIDsKK+efs+aWkemtmiA8IHVndWlcIDsKK+iLseWSjCA8IGVpd2FcIDsKK+eUu+e0oCA8IGdhc29cIDsKK+aiqOiKsSA8IHJpa2FcIDsKK+eUsee4gSA8IHl1ZW5cIDsKK+mtmuW6pyA8IHVvemFcIDsKK+WFt+WCmSA8IGd1YmlcIDsKK+i2iuiotCA8IGVzc29cIDsKK+WEkuWutiA8IGp1a2FcIDsKK+i1t+iotCA8IGtpc29cIDsKK+S/muiAsyA8IHJpamlcIDsKK+WutumBiyA8IGthdW5cIDsKK+eVsOeKtiA8IGlqb3VcIDsKK+almualmiA8IHNvc29cIDsKK+mlkemkkyA8IGtpZ2FcIDsKK+eah+S9jSA8IGtvdWlcIDsKK+Wutui3ryA8IGllamlcIDsKK+mtlOWlsyA8IG1ham9cIDsKK+mlgumjqSA8IHVkb25cIDsKK+Wtl+mfsyA8IGppb25cIDsKK+WvhOiqniA8IGtpZ29cIDsKK+iAs+m8uyA8IGppYmlcIDsKK+mkk+msvCA8IGdha2lcIDsKK+iDpOijlCA8IGluZWlcIDsKK+WEsuS9jSA8IGNob2lcIDsKK+iHquajhCA8IHlha2VcIDsKK+eQhumdniA8IHJpaGlcIDsKK+WEquS9jSA8IHl1dWlcIDsKK+aghOiqiSA8IGVpeW9cIDsKK+i8lOS9kCA8IGhvc2FcIDsKK+S8iumBlCA8IGRhdGVcIDsKK+eVsOanmCA8IGl5b3VcIDsKK+S9meiYiiA8IHlvdW5cIDsKK+WutuiaiiA8IGlla2FcIDsKK+WwvOeUqyA8IGppaG9cIDsKK+WBieadkCA8IGl6YWlcIDsKK+eVsOacrCA8IGlob25cIDsKK+akjeacqCA8IHVla2lcIDsKK+iDvOiDnSA8IHRha29cIDsKK+iIquWuhyA8IGtvdXVcIDsKK+eWkeaHvCA8IGdpa3VcIDsKK+eVsOaVsCA8IGlzdXVcIDsKK+eWkeaDpyA8IGdpZ3VcIDsKK+mtgeWBiSA8IGthaWlcIDsKK+S/neeEoSA8IGhvbXVcIDsKK+iHquaEmyA8IGppYWlcIDsKK+aghOiPryA8IGVpZ2FcIDsKK+WBieaMmSA8IGlreW9cIDsKK+WBieaJjSA8IGlzYWlcIDsKK+eQhui3ryA8IHJpcm9cIDsKK+izpuipoCA8IGZ1ZWlcIDsKK+eVj+aVrCA8IGlrZWlcIDsKK+S/nea4qSA8IGhvb25cIDsKK+eUu+aetiA8IGdha2FcIDsKK+S6jOmZoiA8IG5paW5cIDsKK+iHquW3sSA8IGppa29cIDsKK+ixqumbqCA8IGdvdXVcIDsKK+S7mOitsCA8IGZ1Z2lcIDsKK+S/neavjSA8IGhvYm9cIDsKK+WuieiHpSA8IGFuZ2FcIDsKK+S6nOmItCA8IGFyZWlcIDsKK+S7mOiomCA8IGZ1a2lcIDsKK+Wwj+eBqyA8IGJveWFcIDsKK+mnhOebriA8IGRhbWVcIDsKK+Wxi+aguSA8IHlhbmVcIDsKK+S+neeEtiA8IGl6ZW5cIDsKK+eVsOWtmCA8IGl6b25cIDsKK+S6jOmDqCA8IG5pYnVcIDsKK+miqOmbqCA8IGZ1dXVcIDsKK+alleWGhiA8IGRhZW5cIDsKK+WBveWNsCA8IGdpaW5cIDsKK+eVsOWkiSA8IGloZW5cIDsKK+eVmeWuiCA8IHJ1c3VcIDsKK+S9jeebuCA8IGlzb3VcIDsKK+S4gOm8kyA8IGlra29cIDsKK+eUqOaEjyA8IHlvdWlcIDsKK+iAs+iqniA8IGppZ29cIDsKK+eVsOWfnyA8IGlpa2lcIDsKK+S/neaMgSA8IGhvamlcIDsKK+iIiOS6nCA8IGtvdWFcIDsKK+eTpuaWryA8IGdhc3VcIDsKK+iHquWIqSA8IGppcmlcIDsKK+S9meeFmSA8IHlvZW5cIDsKK+S4i+mnhCA8IGdldGFcIDsKK+S4i+mmrCA8IGdlYmFcIDsKK+WBh+WQjSA8IGthbmFcIDsKK+eVsOWQjCA8IGlkb3VcIDsKK+iAtuiYhyA8IHlhc29cIDsKK+eRoOeSgyA8IHJ1cmlcIDsKK+WBieWLsiA8IGlrdW5cIDsKK+S5hemBoCA8IGt1b25cIDsKK+iHquS9mSA8IGppeW9cIDsKK+S4jemboiA8IGZ1cmlcIDsKK+iHquS7liA8IGppdGFcIDsKK+e+jumfsyA8IGJpb25cIDsKK+WtkOetiSA8IGtvcmFcIDsKK+S4i+mZoiA8IGthaW5cIDsKK+S4jemWkyA8IGJ1bWFcIDsKK+eUu+WboCA8IGdhaW5cIDsKK+S9meazoiA8IHlvaGFcIDsKK+eVj+WPiyA8IGl5dXVcIDsKK+Wwj+aJiyA8IGtvdGVcIDsKK+i2o+aEjyA8IHNodWlcIDsKK+WBieS6uiA8IGlqaW5cIDsKK+S/neWuiSA8IGhvYW5cIDsKK+S9meaugyA8IHlvb3VcIDsKK+i3r+WcsCA8IHJvamlcIDsKK+eQteeQtiA8IGJpd2FcIDsKK+aarumbsiA8IGJvdW5cIDsKK+iDg+a2siA8IGlla2lcIDsKK+S6nOiBliA8IGFzZWlcIDsKK+S4i+mHjiA8IGdleWFcIDsKK+S4iumHjiA8IHVlbm9cIDsKK+iCjOeQhiA8IGtpbWVcIDsKK+mmtOafkyA8IG5hamlcIDsKK+S6nOe+pCA8IGFndW5cIDsKK+S4lui+niA8IHNlamlcIDsKK+S4jemBiyA8IGZ1dW5cIDsKK+S9meaghCA8IHlvZWlcIDsKK+aiqOWckiA8IHJpZW5cIDsKK+S+m+W+oSA8IGd1Z29cIDsKK+i3r+WKoCA8IHJ1a2FcIDsKK+S6nOe2sSA8IGFrb3VcIDsKK+S9meaahyA8IHlva2FcIDsKK+S4gOmBjiA8IGlra2FcIDsKK+Wwj+WxiyA8IGtveWFcIDsKK+S4gOmAlCA8IGl0dG9cIDsKK+e+jui+niA8IGJpamlcIDsKK+WuieawlyA8IGFua2lcIDsKK+aghOaeryA8IGVpa29cIDsKK+Wvk+aEjyA8IGd1dWlcIDsKK+S4luipsSA8IHNld2FcIDsKK+S6nOeoriA8IGFzaHVcIDsKK+aZtOmbqCA8IHNlaXVcIDsKK+Wwj+WknCA8IHNheW9cIDsKK+mjm+ewtyA8IGhpZW5cIDsKK+mfs+mgrSA8IG9uZG9cIDsKK+S9meaKgCA8IHlvZ2lcIDsKK+S4jeiqniA8IGZ1Z29cIDsKK+S9meaJgCA8IHlvc29cIDsKK+eOi+iAhSA8IG91amFcIDsKK+aal+mDqCA8IGFuYnVcIDsKK+S+m+WliSA8IGd1YnVcIDsKK+Wus+aEjyA8IGdhaWlcIDsKK+S6iOekuiA8IHlvamlcIDsKK+WuieaYkyA8IGFuJydpXCA7CivkuIvooYYgPCBnZXN1XCA7CivkuIrooaMgPCBqb3VpXCA7CivlrZfmr40gPCBqaWJvXCA7Civog4zmiLggPCBzZWRvXCA7Civlr4TluK0gPCB5b3NlXCA7CivkvbPlrrQgPCBrYWVuXCA7CivniqDpo5sgPCBnaWhpXCA7CivkuI3omZ4gPCBmdWd1XCA7CivohZDlhJIgPCBmdWp1XCA7CivnvbXoqYggPCBiYXJpXCA7Civku5bmtL4gPCB0YWhhXCA7CivlronmiZMgPCBhbmRhXCA7CivmmpforZwgPCBhbnB1XCA7CivmmK/pnZ4gPCB6ZWhpXCA7CivlrrblrrYgPCBpZWllXCA7CivmnrjmnZ4gPCBrdWtvXCA7CivnjL/oh4IgPCBlbnBpXCA7CivkupHniL4gPCB1bmppXCA7Civkupzngq0gPCBhdGFuXCA7Civku6XmnbEgPCBpdG91XCA7CivlronluqcgPCBhbnphXCA7Civml5fpvJMgPCBraWtvXCA7Civpno3ppqwgPCBhbmJhXCA7CivkuIDoh4IgPCBpcHBpXCA7CivmnKjnk5wgPCBib2tlXCA7Civogqnlt74gPCBoaXJlXCA7CivmmYLpgYsgPCBqaXVuXCA7Civpn7voqp4gPCBpbmdvXCA7Civpn7PorZwgPCBvbnB1XCA7CivkuIrntbUgPCB1d2FlXCA7CivlraTlvbEgPCBrb2VpXCA7CivmoYjkvqEgPCBhbmthXCA7CivnjJvogIUgPCBtb3NhXCA7Civnvr3nm64gPCBoYW1lXCA7CivorbforKggPCBnb211XCA7CivkuozmrKEgPCBuaWppXCA7CivlpoLpnLIgPCBqb3JvXCA7CivkuI3nqY8gPCBmdW9uXCA7CivlronloLUgPCBhbmRvXCA7CivppqzlhbcgPCBiYWd1XCA7Civku5bmhJsgPCB0YWFpXCA7Civlrrblh7ogPCBpZWRlXCA7Civlronlm7ogPCBhbmtvXCA7CivlrrblhbcgPCBrYWd1XCA7CivkuI3no6ggPCBmdW1hXCA7Civml6XplpMgPCBoaWFpXCA7CivkvI7lpbMgPCBnaWpvXCA7Civlr4TkuI4gPCBraXlvXCA7CivpnZLpnZIgPCBhb2FvXCA7CivkuozmnJ8gPCBuaWtpXCA7CivlronlkKYgPCBhbnBpXCA7Civog6HkubEgPCB1cm9uXCA7CivkuojmnJ8gPCB5b2tpXCA7CivnvqnnkIYgPCBnaXJpXCA7CivorY/oqrkgPCBraWhpXCA7CivkuIvnl6IgPCBnZXJpXCA7Civos63loLQgPCB0b2JhXCA7Civos4DlrrQgPCBnYWVuXCA7CivlroflhoUgPCB1ZGFpXCA7Civku6XlpJYgPCBpZ2FpXCA7CivlpKLprZQgPCBtdW1hXCA7CivmnaXmhI8gPCByYWlpXCA7CivmmpfnpLogPCBhbmppXCA7Civlronkv50gPCBhbnBvXCA7CivpnZ7pgYsgPCBoaXVuXCA7Civogb7llJYgPCByb3VhXCA7Civnvr3mr5sgPCB1bW91XCA7Civpn7PntKAgPCBvbnNvXCA7CivotIjkvY0gPCB6b3VpXCA7Civku5jlm7MgPCBmdXp1XCA7CivkuojlvowgPCB5b2dvXCA7CivkuozluqYgPCBuaWRvXCA7CivnvqnmsJcgPCBnaWtpXCA7Civnvqnmr40gPCBnaWJvXCA7Civoqp7pn7MgPCBnb29uXCA7Civku6XljZcgPCBpbmFuXCA7CivlpJzpmbAgPCB5YWluXCA7Civku5jlkowgPCBmdXdhXCA7CivnjovmiYsgPCBvdXRlXCA7Civnvr3moLkgPCBoYW5lXCA7CivpnZ7orbAgPCBoaWdpXCA7Civku6XlhoUgPCBpbmFpXCA7CivkuIDmtL4gPCBpcHBhXCA7CivkuInmr5sgPCBtaWtlXCA7Civpm7fpm6ggPCByYWl1XCA7Civpm5HprZogPCBqYWtvXCA7CivorbfnrKYgPCBnb2Z1XCA7Civpm7LpnKcgPCB1bm11XCA7Civos6bkuI4gPCBmdXlvXCA7CivlpKfph44gPCBvb25vXCA7CivkuIDmrakgPCBpcHBvXCA7Civmlo7pg6ggPCBpbmJlXCA7Civku6PkvY0gPCBkYWlpXCA7CivnjovluqcgPCBvdXphXCA7Civku6Pku6MgPCB5b3lvXCA7Civku5bkuosgPCB0YWppXCA7Civni5Lni5IgPCBoaWhpXCA7Civni5Dni7ggPCBrb3JpXCA7CivpnLLoqp4gPCByb2dvXCA7CivlpKfot68gPCBvb2ppXCA7CivnjovlrrYgPCBvdWtlXCA7Civnvqnmj7QgPCBnaWVuXCA7CivnjovlpoMgPCBvdWhpXCA7CivnjovlpbMgPCBvdWpvXCA7CivpnZLokYkgPCBhb2JhXCA7CivpnZLoj5wgPCBhb25hXCA7CivkupLliqkgPCBnb2pvXCA7CivkupTliIYgPCBnb2J1XCA7Civkuovli5kgPCBqaW11XCA7CivkuIvmiYsgPCBoZXRhXCA7CivkuIvmiLggPCBnZWtvXCA7CivmnbHkup4gPCB0b3VhXCA7CivmnKjlnLAgPCBraWppXCA7CivnjovlnJ8gPCBvdWRvXCA7Civnvo7mioAgPCBiaWdpXCA7CivoqqToqJggPCBnb2tpXCA7Civpn7Pms6IgPCBvbnBhXCA7Civpn7vmr40gPCBpbmJvXCA7CivkuojlgpkgPCB5b2JpXCA7CivkuozkvqEgPCBuaWthXCA7Civmlr3ogqUgPCBzZWhpXCA7CivkuozkvZAgPCBuaXNhXCA7Civml6nnqLIgPCB3YXNlXCA7CivnhZnpnKcgPCBlbm11XCA7CivnhZnpm6ggPCBlbicndVwgOwor6aKo5ZGCIDwgZnVyb1wgOwor5Lm+5L2NIDwga2VuaVwgOwor5pOs6Z+zIDwgZ2lvblwgOwor57iB6LW3IDwgZW5naVwgOwor5Lmd5YiGIDwga3VidVwgOwor5LiN5a6JIDwgZnVhblwgOwor54i256WWIDwgZnVzb1wgOwor5LiA5a62IDwgaWtrZVwgOwor6Zmw6ZicIDwgaW5mdVwgOwor5pqX5oSaIDwgYW5ndVwgOwor5LiO5aSqIDwgeW90YVwgOwor5LiL5aWzIDwgZ2Vqb1wgOwor54Sh6aeEIDwgbXVkYVwgOwor57iB6KqeIDwgZW5nb1wgOwor6ZuF6KqeIDwgZ2Fnb1wgOwor542j5Yy7IDwganV1aVwgOwor576O5aerIDwgYmlraVwgOwor5amm5aWzIDwgZnVqb1wgOwor6aKo5L2NIDwgZnV1aVwgOwor576O5aWzIDwgYmlqb1wgOwor6Z2S56ClIDwgYW90b1wgOwor54Sh6Z+zIDwgbXVvblwgOwor6K2w5qGIIDwgZ2lhblwgOwor5LiN5ZuzIDwgZnV0b1wgOwor6ZqY6LevIDwgYWlyb1wgOwor54yb5aiBIDwgbW91aVwgOwor5aSa576pIDwgdGFnaVwgOwor5pq05aiBIDwgYm91aVwgOwor6Kqe576pIDwgZ29naVwgOwor6Zmw6YOoIDwgaW5idVwgOwor5aWz546LIDwgam9vdVwgOwor6Z2e55CGIDwgaGlyaVwgOwor6Zuy6ISCIDwgZnVrZVwgOwor576p5YuZIDwgZ2ltdVwgOwor6Zui6IumIDwgcmlrdVwgOwor6Z2S55SwIDwgYW90YVwgOwor5LiN5ZGzIDwgZnVtaVwgOwor5LiJ5ZGzIDwgc2FtaVwgOwor5LiL5Y+lIDwgZ2VrdVwgOwor57i357i3IDwgcnVydVwgOwor5aOB6J2oIDwgZGFuaVwgOwor576O5ZGzIDwgYmltaVwgOwor5LiL5Y2RIDwgZ2ViaVwgOwor6K235oyBIDwgZ29qaVwgOwor5LiA5Y+lIDwgaWtrdVwgOwor54Sh6YmbIDwgbXVlblwgOwor576O5YyWIDwgYmlrYVwgOwor5LiN5YKZIDwgZnViaVwgOwor54qg5omTIDwgZ2lkYVwgOwor5aSW56eRIDwgZ2VrYVwgOwor5aSn55uuIDwgb29tZVwgOwor57iB6ICFIDwgZW5qYVwgOwor5pel5q2pIDwgaGlidVwgOwor6Z+z5a2XIDwgb25qaVwgOwor6Zmi6K2wIDwgaW5naVwgOwor5LiA5L2QIDwgaXNzYVwgOwor54i25q+NIDwgZnVib1wgOwor6Z2e5q+AIDwgaGlraVwgOwor5pmC5beuIDwgamlzYVwgOwor57Sw6ZuoIDwgc2FpdVwgOwor6ZyK55WwIDwgcmVpaVwgOwor5Z+66Z+zIDwga2lvblwgOwor57ev57eaIDwgaXNlblwgOwor6Zqg6ICFIDwgaW5qYVwgOwor6Za76a2UIDwgZW5tYVwgOwor5pel5pelIDwgaGliaVwgOwor5pWw54+gIDwganV6dVwgOwor6Zmw6JCOIDwgaW4nJ2lcIDsKK+mfs+WQkCA8IG9udG9cIDsKK+mfs+WPiSA8IG9uc2FcIDsKK+mdkuacqCA8IGFva2lcIDsKK+WogeWOsyA8IGlnZW5cIDsKK+isneaEjyA8IHNoYWlcIDsKK+e2uue+hSA8IGtpcmFcIDsKK+WfuumDqCA8IGtpYnVcIDsKK+WmguaEjyA8IG55b2lcIDsKK+WlveaCqiA8IGtvdW9cIDsKK+mfs+S+oSA8IG9ua2FcIDsKK+aXouW+gCA8IGtpb3VcIDsKK+WlpeaEjyA8IG9rdWlcIDsKK+Wik+eikSA8IGJvaGlcIDsKK+mbqOawtCA8IHVzdWlcIDsKK+WknOaalyA8IHlhYW5cIDsKK+aZguS6iyA8IGppamlcIDsKK+WnlOS7uyA8IGluaW5cIDsKK+WltOWpoiA8IG51aGlcIDsKK+Wkp+aJiyA8IG9vZGVcIDsKK+mcsuW6pyA8IHJvemFcIDsKK+mZsOeUuyA8IGluZ2FcIDsKK+WjiuatuyA8IGVzaGlcIDsKK+eEoeeijSA8IG11Z2VcIDsKK+ipkOasuiA8IHNhZ2lcIDsKK+mdkuWcsCA8IGFvamlcIDsKK+mdkuWbsyA8IGFvenVcIDsKK+eyl+mHjiA8IHNveWFcIDsKK+Wkp+WxiyA8IG9veWFcIDsKK+iqpOW3riA8IGdvc2FcIDsKK+eEoeeQhiA8IG11cmlcIDsKK+WkouWvkCA8IG11YmlcIDsKK+WkmuWykCA8IHRha2lcIDsKK+eFmeazoiA8IGVucGFcIDsKK+aXp+S6iyA8IGt1amlcIDsKK+iqnuWwviA8IGdvYmlcIDsKK+mcsuWWtiA8IHJvZWlcIDsKK+mZsOawlyA8IGlua2lcIDsKK+WkmuWkmiA8IHRhdGFcIDsKK+Wcn+mWkyA8IGRvbWFcIDsKK+aOqui+niA8IHNvamlcIDsKK+eEoea0viA8IG11aGFcIDsKK+a/vumBjiA8IHJva2FcIDsKK+m9sSA8IHNla3VcIDsKK+mbqOWkqSA8IHV0ZW5cIDsKK+mbqOWjsCA8IHVzZWlcIDsKK+m8jyA8IGJla2lcIDsKK+eEoeavlCA8IG11aGlcIDsKK+imi+ebriA8IG1pbWVcIDsKK+m6vyA8IG1hcm9cIDsKK+mbqOWfnyA8IHVpa2lcIDsKK+WknOWNiiA8IHlvd2FcIDsKK+m2qiA8IGtla2lcIDsKK+eEoeapnyA8IG11a2lcIDsKK+m0qCA8IGthbW9cIDsKK+maoOW+riA8IGluYmlcIDsKK+ijnOiomCA8IGhva2lcIDsKK+maj+aEjyA8IHp1aWlcIDsKK+mxpyA8IGhhbW9cIDsKK+mxmiA8IGtpc3VcIDsKK+mwpCA8IGJ1cmlcIDsKK+mwmSA8IGhheWFcIDsKK+mwkCA8IHdhbmlcIDsKK+WknOWFtyA8IHlhZ3VcIDsKK+mvliA8IHNhYmFcIDsKK+mvlCA8IGJvcmFcIDsKK+mviiA8IGhhemVcIDsKK+mutCA8IGdvcmlcIDsKK+musiA8IG1hdGVcIDsKK+muqyA8IHNhbWVcIDsKK+mukiA8IGZ1bmFcIDsKK+mtuSA8IHRvZG9cIDsKK+mqrSA8IGhhZ2lcIDsKK+mqiSA8IGh5dXVcIDsKK+eyl+iPkyA8IHNva2FcIDsKK+eBq+eurSA8IGhpeWFcIDsKK+e1teacrCA8IGVob25cIDsKK+mfriA8IG5pcmFcIDsKK+meoCA8IG1hcmlcIDsKK+Wcn+iqniA8IGRvZ29cIDsKK+mdhCA8IG1veWFcIDsKK+WcsOihoyA8IGNoaWlcIDsKK+mbh+WToSA8IGtvaW5cIDsKK+mbheWRsyA8IGdhbWlcIDsKK+ewv+iomCA8IGJva2lcIDsKK+mWliA8IHl1cnVcIDsKK+eEoeaJiyA8IG11dGVcIDsKK+eEoeaIkSA8IG11Z2FcIDsKK+mRkyA8IHlhcmlcIDsKK+mRgyA8IHR5b3VcIDsKK+mYv+aIvyA8IGFob3VcIDsKK+mNrCA8IGt1d2FcIDsKK+ijnOiCpSA8IGhvaGlcIDsKK+mJviA8IGhva29cIDsKK+imj+aooSA8IGtpYm9cIDsKK+iiiOijnyA8IGtlc2FcIDsKK+mEmSA8IGhpbmFcIDsKK+Whl+W4gyA8IHRvZnVcIDsKK+mAqSA8IGthbXVcIDsKK+mApyA8IHNha29cIDsKK+i/jSA8IGNodW5cIDsKK+i9jCA8IHNvcmlcIDsKK+mZpOWknCA8IGpveWFcIDsKK+eBq+eCiSA8IGthcm9cIDsKK+izrSA8IGtha2VcIDsKK+aKvOmfuyA8IG91aW5cIDsKK+aTrOWPpCA8IGdpa29cIDsKK+ixmiA8IGJ1dGFcIDsKK+eEoeWeoiA8IG11a3VcIDsKK+eEoeWcsCA8IG11amlcIDsKK+ilniA8IGhpZGFcIDsKK+e0oOaJiyA8IHN1ZGVcIDsKK+iksSA8IGthaWVcIDsKK+ijmyA8IHlvdXVcIDsKK+iisCA8IGhvcm9cIDsKK+ifuSA8IGthbmlcIDsKK+eEoeWRsyA8IG11bWlcIDsKK+iaiyA8IGJ1eW9cIDsKK+iZmSA8IGh1a3VcIDsKK+iXqiA8IHlhYnVcIDsKK+iVqiA8IGthYnVcIDsKK+iUhyA8IGtpa2VcIDsKK+iTvCA8IHRhZGVcIDsKK+iTkSA8IG1pbm9cIDsKK+iRsSA8IG5lZ2lcIDsKK+mZouS4uyA8IGluanVcIDsKK+WgguWuhyA8IGRvdXVcIDsKK+mYv+WFhCA8IGFrZWlcIDsKK+iLhiA8IHN1c2FcIDsKK+iKuSA8IHNlcmlcIDsKK+eEoeS+oSA8IG11a2FcIDsKK+iKkiA8IG5vZ2lcIDsKK+WgtOWQiCA8IGJhYWlcIDsKK+e1teWDjyA8IGV6b3VcIDsKK+eEoeS6jCA8IG11bmlcIDsKK+iGgyA8IG90c3VcIDsKK+iEmyA8IHN1bmVcIDsKK+iho+e0iyA8IGVtb25cIDsKK+e0jeWxiyA8IG5heWFcIDsKK+imi+WgtCA8IG1pYmFcIDsKK+eskemhlCA8IGVnYW9cIDsKK+e9oCA8IHdhbmFcIDsKK+aPtuaPhCA8IHlheXVcIDsKK+e2myA8IGthc2VcIDsKK+eyl+actiA8IHNvZGFcIDsKK+ezoCA8IG51a2FcIDsKK+eziiA8IG5vcmlcIDsKK+aJi+mWkyA8IHRlbWFcIDsKK+Wbs+eUuyA8IHp1Z2FcIDsKK+eygiA8IGt1bWVcIDsKK+ewlyA8IHlhbmFcIDsKK+eujSA8IHRhZ2FcIDsKK+euhiA8IGhlcmFcIDsKK+esiiA8IHphcnVcIDsKK+eBq+WxiyA8IGhveWFcIDsKK+eArOaIuCA8IHNldG9cIDsKK+ieu+ibhCA8IGtlcmFcIDsKK+eYpCA8IGtvYnVcIDsKK+mWk+WkqyA8IG1hYnVcIDsKK+eUlSA8IG1pa2FcIDsKK+eyl+W4gyA8IHNvZnVcIDsKK+eRlSA8IGtpenVcIDsKK+eNtiA8IG55b3VcIDsKK+ibmem7vSA8IGFib3VcIDsKK+aOj+aRuCA8IHN1cmlcIDsKK+eHuCA8IGppeXVcIDsKK+ijuOWppiA8IHJhZnVcIDsKK+Wbs+ahiCA8IHp1YW5cIDsKK+Wcn+aJiyA8IGRvdGVcIDsKK+a7kyA8IGthc3VcIDsKK+a4qembhSA8IG9uZ2FcIDsKK+aPtOWKqSA8IGVuam9cIDsKK+m9n+m9rCA8IHNvZ29cIDsKK+apsyA8IG51ZGVcIDsKK+apsiA8IHp1c2FcIDsKK+Wbm+aWuSA8IHlvbW9cIDsKK+aovSA8IHRhcnVcIDsKK+aouiA8IGthYmFcIDsKK+alhSA8IGh5a3VcIDsKK+akqCA8IHRhZnVcIDsKK+akpSA8IG5hZ2lcIDsKK+aggiA8IHRvZ2FcIDsKK+adoyA8IHNvbWFcIDsKK+WbveW6nCA8IGtvZnVcIDsKK+aNu+WtkCA8IG5lamlcIDsKK+aJi+e+vSA8IHRlYmFcIDsKK+a3q+mbqCA8IGluJyd1XCA7Civoo5zliqkgPCBob2pvXCA7Civmua/okYkgPCB5dWJhXCA7CivlnJ/lmaggPCBkb2tpXCA7CivmjInmkakgPCBhbm1hXCA7CivmiaggPCBzYXRlXCA7Civmjojlj5cgPCBqdWp1XCA7CivmiZPnoLQgPCBkYWhhXCA7Civmi7/mjZUgPCBkYWhvXCA7CivlnJ/ljKogPCBkb2hpXCA7CivlvbYgPCBraWh1XCA7CivlvLYgPCBneWF1XCA7CivlvJcgPCBkb3J1XCA7CivlvJMgPCB5dW1pXCA7Civlu6cgPCBzaGF1XCA7CivluKQgPCBnZXlvXCA7CivluKIgPCBrYWh1XCA7Civlt6QgPCByZWh1XCA7Civltq8gPCBzaGl1XCA7CivltYAgPCBjaGl1XCA7CivlnKjkvY0gPCB6YWlpXCA7CivltKggPCBzZWh1XCA7Civls4UgPCBrdXJhXCA7Civmta7lobXlrZAgPCB1bmthXCA7CivlsbYgPCBuYXRhXCA7CivmhJvppqwgPCBhaWJhXCA7CivlrqggPCB0ZXdhXCA7CivmjojkuI4gPCBqdXlvXCA7Civlm5vlm7IgPCBzaGlpXCA7Civlm7rljJYgPCBrb2thXCA7CivmhJvpo7IgPCBhaWluXCA7CivlrLwgPCByaXdhXCA7Civlk4Dpn7MgPCBhaW9uXCA7CivlrLYgPCBrYWthXCA7CivlqoMgPCBqeXV1XCA7Civlm57lkJEgPCBla291XCA7CivmiK/nlLsgPCBnaWdhXCA7Civlob4gPCBqdWt1XCA7Civln5YgPCBnb21pXCA7CivmhbDorJ0gPCBpc2hhXCA7CivlnL4gPCBneXV1XCA7CivlmLggPCBzYXpvXCA7CivlmIEgPCBzYWh1XCA7Civll70gPCB1Z2FpXCA7CivllqIgPCB0ZWh1XCA7CivllaYgPCByYWh1XCA7Civlkozpn7MgPCB3YW9uXCA7CivlkrYgPCBrdXVpXCA7Civmirzlv40gPCBvc3N1XCA7Civnp7vou6IgPCBpdGVuXCA7CivpioXpkbwgPCBkb3JhXCA7CivliosgPCBzeW91XCA7Civlh7ggPCBkZWtvXCA7CivmhJvovJ0gPCBhaWtpXCA7Civmua/nha4gPCB5dW5pXCA7CivmgqrprLwgPCBha2tpXCA7Civkv4cgPCBreWF1XCA7CivkvqAgPCBreWFuXCA7CivkvZcgPCB3YWJpXCA7CivkuoAgPCBrYW1lXCA7CivkuZ8gPCBuYXJpXCA7CivmhJvorbcgPCBhaWdvXCA7Civlk4DoqbEgPCBhaXdhXCA7Civlk4DoqLQgPCBhaXNvXCA7CivlkYnpoIggPCBnb3N1XCA7Civnp5joqbEgPCBoaXdhXCA7Civmua/msJcgPCB5dWdlXCA7Civpu4TouqsgPCBraW1pXCA7CivlkozorbAgPCB3YWdpXCA7Civlkozoqp4gPCB3YWdvXCA7CivlkJDpnLIgPCB0b3JvXCA7CivmganpoacgPCBvbmtvXCA7CivmgbXpm6ggPCBrZWl1XCA7CivmtbfoiosgPCBrYWl1XCA7CivmtYTooaMgPCBqb3VlXCA7CivolY7puqYgPCBzb2JhXCA7CivpuJrptaEgPCBvdW11XCA7CivlkIjplpMgPCBhaW1hXCA7Civlj7PpnaIgPCB1bWVuXCA7CivpvLvnpZYgPCBiaXNvXCA7CivmgqrosqggPCBha2thXCA7CivmuKHmrKcgPCB0b291XCA7Civlj6Tpn7MgPCBrb29uXCA7CivlmJTlkJAgPCBvdXRvXCA7Civlkozoi7EgPCB3YWVpXCA7Civlj6Tpm4UgPCBrb2dhXCA7Civmu4vlkbMgPCBqaW1pXCA7CivllJbnhLYgPCBhemVuXCA7CivomIfoirMgPCBzdW91XCA7Civol43opLggPCBib3JvXCA7CivmgqrooaMgPCBha3VpXCA7Civmua/lsYsgPCB5dXlhXCA7CivllL7mo4QgPCBkYWtpXCA7Civlj7PovrogPCB1aGVuXCA7Civllpzlr78gPCBraWp1XCA7Civmua/lpbMgPCB5dW5hXCA7Civljq3pm6IgPCBvbnJpXCA7CivpvLvngo4gPCBiaWVuXCA7Civph47ovrogPCBub2JlXCA7CivmganoqrwgPCBvbmdpXCA7Civph47ot68gPCBub2ppXCA7CivlkarnrKYgPCBqdWZ1XCA7Civlj6Toqp4gPCBrb2dvXCA7CivllrbliKkgPCBlaXJpXCA7Civlv5zpnIAgPCBvdWp1XCA7CivmiJHliKkgPCBnYXJpXCA7Civnp7vmsJEgPCBpbWluXCA7CivlloflmJsgPCByYW1hXCA7Civmho7mgqogPCB6b3VvXCA7Civlj7PokYkgPCB1eW91XCA7Civlk4DmrYwgPCBhaWthXCA7Civlj5fomIogPCBqdXVuXCA7CivlvqHpoZQgPCBva2FvXCA7CivpubXnsL8gPCByb2JvXCA7CivljYHpm6ggPCBqdXV1XCA7Civlj7PohLMgPCB1bm91XCA7CivmuKnlkowgPCBvbndhXCA7CivmsLjpgaAgPCBlaWVuXCA7Civph47oia8gPCBub3JhXCA7Civmtbfmnb4gPCBtaXJ1XCA7CivlkozmrYwgPCB3YWthXCA7CivmsZrooYwgPCBva291XCA7CivnoLTpoqggPCBoYWZ1XCA7CivmhJvmkqsgPCBhaWJ1XCA7Civpu4Tms4kgPCB5b21pXCA7Civlv5zoqLQgPCBvdXNvXCA7Civlk4DmhZUgPCBhaWJvXCA7CivlkIjnnYAgPCBhaWdpXCA7CivlvqHouqsgPCBvbm1pXCA7CivmhbDllY8gPCBpbW9uXCA7CivljLrosrsgPCBrdWhpXCA7CivlkYbmsJcgPCBha2tlXCA7CivpgqrprZQgPCBqYW1hXCA7Civpg73phJkgPCB0b2hpXCA7CivnoLTpgqogPCBoYWphXCA7CivlvoDot68gPCBvdXJvXCA7Civpgqrpo5sgPCBqYWhpXCA7CivnpZbmr40gPCBzb2JvXCA7CivmtL7miYsgPCBoYWRlXCA7CivlvKXpmYAgPCBtaWRhXCA7Civph47njL8gPCB5YWVuXCA7Civlj5fnkIYgPCBqdXJpXCA7Civlkbzlv5wgPCBrb291XCA7Civnp5jlpaUgPCBoaW91XCA7CivmsZrnqaIgPCBvd2FpXCA7CivmhJrlm7MgPCBndXp1XCA7CivmtYHluIMgPCBydWZ1XCA7Civmr43oqp4gPCBib2dvXCA7Civph47ngasgPCBub2JpXCA7CivlkozlrZcgPCB3YWppXCA7CivlkIjmrZMgPCBuZW11XCA7CivlvqHojLYgPCBvY2hhXCA7CivpurvluIMgPCBtYWZ1XCA7CivmgqrmhJ8gPCBva2FuXCA7Civnp7vkvY8gPCBpanV1XCA7CivomZrkvY0gPCBreW9pXCA7CivmgbXmlrkgPCBlaG91XCA7CivmhJvlhZAgPCBhaWppXCA7CivmspnmsbAgPCBzYXRhXCA7CivmrabpgYsgPCBidXVuXCA7CivlvqHnsL4gPCBtaXN1XCA7CivlkbPlmYwgPCBtaXNvXCA7Civlj7PmlrkgPCB1aG91XCA7CivkupzntLDkupwgPCBhamlhXCA7Civlu4jploAgPCBhbW9pXCA7CivmsZrngrkgPCBvdGVuXCA7Civmr5vnvr0gPCBrZWJhXCA7Civph47mmq4gPCB5YWJvXCA7CivlkIjmhI8gPCBnb3VpXCA7CivlvqHnpLwgPCBvcmVpXCA7Civms6LluIMgPCBoYWJ1XCA7CivlvqHnopcgPCBvd2FuXCA7CivpgbrotIggPCBpem91XCA7CivmsZrms6UgPCBvZGVpXCA7Civnn7Pok7QgPCBhb3NhXCA7CivlvqHnm4YgPCBvYm9uXCA7CivmsZrmsLQgPCBvc3VpXCA7CivljZfnhKEgPCBuYW11XCA7Civov73poqggPCBvaXRlXCA7CivnoJLntKAgPCBoaXNvXCA7CivmgKrmiJEgPCBrZWdhXCA7Civlj7PlsrggPCB1Z2FuXCA7CivmsZrmn5MgPCBvc2VuXCA7CivmganlqIEgPCBvbicnaVwgOwor6I236aeEIDwgbmlkYVwgOwor5ZCI5ZuzIDwgYWl6dVwgOwor6YG66JGXIDwgaWNob1wgOwor5bm+6YeNIDwgaWt1ZVwgOwor5rGa5pCNIDwgb3NvblwgOwor5ZCP5ZOhIDwgcmlpblwgOwor5Y6t5oKqIDwgZW4nJ29cIDsKK+WOu+W5tCA8IGtvem9cIDsKK+WQjeWMuyA8IG1laWlcIDsKK+WQj+WLmSA8IHJpbXVcIDsKK+i/tyA8IG1laVwgOwor5b+1IDwgbmVuXCA7Civnn60gPCB0YW5cIDsKK+W/qyA8IGthaVwgOwor6L+lIDwga2VpXCA7Civnn6UgPCBjaGlcIDsKK+efnCA8IGtpblwgOwor5b+ZIDwgYm91XCA7Civov5QgPCBoZW5cIDsKK+i/jiA8IGdlaVwgOwor5b+NIDwgbmluXCA7Civov4UgPCBqaW5cIDsKK+i+vyA8IHRlblwgOwor5567IDwgc2VuXCA7CivovrIgPCBub3VcIDsKK+i+ryA8IGJlblwgOwor5b6qIDwganVuXCA7CivnnqAgPCBkb3VcIDsKK+W+niA8IGp1dVwgOwor5b6FIDwgdGFpXCA7CivlvakgPCBzYWlcIDsKK+edoSA8IHN1aVwgOwor6L2fIDwgZ291XCA7CivlvZMgPCB0b3VcIDsKK+W9iCA8IGRhblwgOwor55ypIDwgZ2VuXCA7CivnnKAgPCBtaW5cIDsKK+W8nyA8IHRlaVwgOwor5bybIDwgc2hpXCA7CivlvJggPCBrb3VcIDsKK+ecjCA8IGtlblwgOwor55yLIDwga2FuXCA7CivlvIQgPCByb3VcIDsKK+ecgSA8IHNlaVwgOwor55u4IDwgc291XCA7Civlu6IgPCBoYWlcIDsKK+i7jSA8IGd1blwgOwor5buJIDwgcmVuXCA7Civnm4YgPCBib25cIDsKK+W6uCA8IHlvdVwgOwor55qwIDwgaG91XCA7CivouocgPCBjaG9cIDsKK+W5viA8IGlrdVwgOwor5bm9IDwgeXV1XCA7CivnmYwgPCBnYW5cIDsKK+i3oSA8IGF0b1wgOwor6LefIDwga29uXCA7Civot50gPCBreW9cIDsKK+eWiiA8IGpvdVwgOwor55WqIDwgYmFuXCA7CivnlaYgPCBhemVcIDsKK+eVlCA8IGhhblwgOwor55SjIDwgc2FuXCA7CivotIUgPCB6ZWlcIDsKK+eTtiA8IGJpblwgOwor6LOjIDwgYmFpXCA7Civnk5wgPCB1cmlcIDsKK+WyqSA8IGl3YVwgOwor6LKhIDwgemFpXCA7CivosaEgPCB6b3VcIDsKK+WxjyA8IGhlaVwgOwor5bCaIDwgbmFvXCA7CivlsIQgPCBzaGFcIDsKK+WwgSA8IGZ1dVwgOwor5a+4IDwgc3VuXCA7CivlrrUgPCB5b2lcIDsKK+WusyA8IGdhaVwgOwor5a6bIDwgYXRlXCA7CivlrZggPCBzb25cIDsKK+WsqiA8IGhpblwgOwor6Ku4IDwgc2hvXCA7Civoq5YgPCByb25cIDsKK+WrjCA8IGl5YVwgOwor54qsIDwgaW51XCA7CivoqoQgPCBydWlcIDsKK+eJoSA8IG9zdVwgOwor54mMIDwgcGFpXCA7CivniJsgPCByYW5cIDsKK+eHuyA8IGt1blwgOwor5aeJIDwgYW5lXCA7CivopqogPCBveWFcIDsKK+WlriA8IGZ1blwgOwor5aWlIDwgb2t1XCA7CivopZ8gPCBlcmlcIDsKK+eEtiA8IHplblwgOwor5aOwIDwga29lXCA7Civoo48gPCB1cmFcIDsKK+iigiA8IGJlaVwgOwor6J+7IDwgYXJpXCA7Civmv5ggPCBuZWlcIDsKK+WfiyA8IG1haVwgOwor5Z6iIDwgYWthXCA7Civonb8gPCBoYWVcIDsKK+m9oSA8IHJlaVwgOwor5ru/IDwgbWFuXCA7Civom5sgPCBzaHVcIDsKK+WbmyA8IHlvblwgOwor6bq7IDwgYXNhXCA7Civmub4gPCB3YW5cIDsKK+iZnCA8IHJ5b1wgOwor5rimIDwgdXp1XCA7CivlmJggPCB1c29cIDsKK+iYgiA8IHp1aVwgOwor5reLIDwgcmluXCA7CivmtrIgPCBla2lcIDsKK+WWsCA8IGt1dVwgOwor5rW3IDwgdW1pXCA7CivllY8gPCBtb25cIDsKK+azoSA8IGF3YVwgOwor6JKZIDwgbW91XCA7CivmspYgPCBva2lcIDsKK+ayjCA8IHRvblwgOwor5ZGzIDwgYWppXCA7CivmsaAgPCBpa2VcIDsKK+axlyA8IGFzZVwgOwor5ZGRIDwgZG9uXCA7CivmsI8gPCB1amlcIDsKK+WPsCA8IGRhaVwgOwor5q6YIDwgemFuXCA7CivmrYwgPCB1dGFcIDsKK+WNiCA8IHVtYVwgOwor5Y2BIDwgdG9vXCA7CivprLwgPCBvbmlcIDsKK+iMtiA8IGNoYVwgOwor5YukIDwgZ29uXCA7Civoi5cgPCBuYWVcIDsKK+iJsiA8IGlyb1wgOwor5YmNIDwgbWFlXCA7CivliIYgPCBidW5cIDsKK+iHvCA8IHVzdVwgOwor6aatIDwgZ3lvXCA7CivohZUgPCB1ZGVcIDsKK+WFjSA8IG1lblwgOwor5YWEIDwgYW5pXCA7Civpo7QgPCBhbWVcIDsKK+mjnCA8IGhvblwgOwor5YKzIDwgZGVuXCA7CivmooUgPCB1bWVcIDsKK+ahtiA8IG9rZVwgOwor5YG2IDwgZ3V1XCA7CivpoZQgPCBrYW9cIDsKK+mhjiA8IGFnb1wgOwor6aC8IDwgcmFpXCA7Civkv7ogPCBvcmVcIDsKK+aenSA8IGVkYVwgOwor5p2/IDwgaXRhXCA7CivkvZUgPCBuYW5cIDsKK+maiCA8IHdhaVwgOwor57mUIDwgb3JpXCA7CivkuJggPCBva2FcIDsKK+e2siA8IGFtaVwgOwor6ZW3IDwgb3NhXCA7CivmlbggPCBzdXVcIDsKK+aVhSA8IHl1ZVwgOwor57O4IDwgaXRvXCA7CivnspcgPCBhcmFcIDsKK+aPoSA8IGFrdVwgOwor56ybIDwgZnVlXCA7Civnq78gPCBzYW9cIDsKK+eosiA8IGluZVwgOwor5oiWIDwgYXJ1XCA7Civph40gPCBvbW9cIDsKK+eniyA8IGFraVwgOwor56awIDwgZGVpXCA7Civmga8gPCBpa2lcIDsKK+aBiyA8IGtvaVwgOwor6L+C6YGgIDwgdWVuXCA7Civlvq7mhI8gPCBiaWlcIDsKK+WPmeS9jSA8IGpvaVwgOwor6L+C6LevIDwgdXJvXCA7CivlvpfmiYsgPCBldGVcIDsKK+awl+WuhyA8IGtpdVwgOwor5Yy75a62IDwgaWthXCA7Civlhavph40gPCB5YWVcIDsKK+WMu+WToSA8IGlpblwgOwor5Yy75YuZIDwgaW11XCA7CivljLvkuosgPCBpamlcIDsKK+mBuuaEmyA8IGlhaVwgOwor6YG65b2xIDwgaWVpXCA7Civpg6jkvY0gPCBidWlcIDsKK+mBuuWtpCA8IGlrb1wgOwor55Ww6Z+zIDwgaW9uXCA7CivluIzmnIkgPCBrZXVcIDsKK+i/guaEmiA8IHVndVwgOwor5qyn5LqcIDwgb3VhXCA7CivmrKHkvY0gPCBqaWlcIDsKK+asoeS6nCA8IGppYVwgOwor55yJ5a6HIDwgYml1XCA7CivnlbDorbAgPCBpZ2lcIDsKK+WxhemWkyA8IGltYVwgOwor5biw5L6dIDwga2llXCA7CivpppnprZogPCBheXVcIDsKK+apn+S9jSA8IGtpaVwgOwor5Ly86Z2eIDwgZXNlXCA7CivlsL7nvr0gPCBvaGFcIDsKK+eVsOeItiA8IGlmdVwgOwor5Lya6ZmwIDwgZWluXCA7CivnlbDmr40gPCBpYm9cIDsKK+S6nOm6uyA8IGFtYVwgOwor5Lul6YGgIDwgaWVuXCA7CivkvIroqp4gPCBpZ29cIDsKK+S6nOmJmyA8IGFlblwgOwor5bC+5qC5IDwgb25lXCA7CivmpIXlrZAgPCBpc3VcIDsKK+S+neaAmSA8IGVrb1wgOwor5LqR54K6IDwgdW5pXCA7CivkupzmrKcgPCBhb3VcIDsKK+S7peW+gCA8IGlvdVwgOwor5pyJ54ShIDwgdW11XCA7CivkvJrljq0gPCBlZW5cIDsKK+aghOS9jSA8IGVpaVwgOwor5LqV5oi4IDwgaWRvXCA7CivpnZ7pgZUgPCBoaWlcIDsKK+WknOmbqCA8IHlhdVwgOwor5aSa6ZuoIDwgdGF1XCA7CivkuozlsIkgPCBuaWlcIDsKK+S4jeaEjyA8IGZ1aVwgOwor5aiB5q2mIDwgaWJ1XCA7CivmnInljaYgPCB1a2VcIDsKK+eOi+S9jSA8IG91aVwgOwor576F5a6HIDwgcmFvXCA7Civnvr3ljJYgPCB1a2FcIDsKK+e1temmrCA8IGVtYVwgOwor5aOK55a9IDwgZXNvXCA7Civpm6jmsJcgPCB1a2lcIDsKK+iqnuaEjyA8IGdvaVwgOwor6Zuo5b6MIDwgdWdvXCA7CivnhKHngrogPCBtdWlcIDsKK+ijnOmBuiA8IGhvaVwgOwor6b6SIDwgcnl1XCA7Civpu7YgPCBhemFcIDsKK+mYv+avlCA8IGFiaVwgOwor6bOwIDwgbmlvXCA7CivpsJUgPCBlYmlcIDsKK+mwkyA8IGVyYVwgOwor6aSMIDwgZXNhXCA7CivpjoogPCBoYXVcIDsKK+mNkSA8IGh1dVwgOwor6Yy1IDwgbmllXCA7CivpiJYgPCBodW5cIDsKK+mEvCA8IHNhYlwgOwor6YSeIDwgZ2luXCA7Civpgr4gPCBjaHVcIDsKK+i9kSA8IHJhdVwgOwor6KScIDwgZW5hXCA7CivntbXlm7MgPCBlenVcIDsKK+imi+W+lyA8IG1pZVwgOwor6Jm7IDwgYWJ1XCA7CivpmL/lkL0gPCBhdW5cIDsKK+iRtSA8IGFvaVwgOwor6I27IDwgb2dpXCA7CivoiosgPCBpbW9cIDsKK+iHkSA8IGRhdVwgOwor5ruL6ZuoIDwgaml1XCA7CivnqJcgPCBoaWVcIDsKK+eTtCA8IHJpaVwgOwor57SG5L2ZIDwgdXlvXCA7CivmqIsgPCB0b2lcIDsKK+ajsCA8IHNvaVwgOwor5p2tIDwga3VpXCA7CivmlqcgPCBvbm9cIDsKK+aEsCA8IGthdVwgOwor5b2vIDwgaGV1XCA7CivlvKggPCBzZXVcIDsKK+W7hyA8IHJpdVwgOwor5buFIDwgYWh1XCA7CivluqMgPCB0ZXVcIDsKK+W2hiA8IHNhdVwgOwor5bW6IDwgcmV1XCA7CivltbYgPCB0YW9cIDsKK+a1t+mrqiA8IG9nb1wgOwor5ayIIDwgZGV1XCA7Civlq7kgPCBiYXVcIDsKK+WrmSA8IHNlYlwgOwor5oSP6aasIDwgaWJhXCA7CivlpaEgPCBnYXVcIDsKK+WemiA8IGdldVwgOwor5ZymIDwgaXJpXCA7CivlmrcgPCBqYXVcIDsKK+Wbs+S8miA8IHp1ZVwgOwor5ZirIDwgZGFtXCA7Civlg6AgPCBmYW5cIDsKK+S9giA8IHlhaVwgOwor5oKq6ZyyIDwgb3JvXCA7CivonablpLcgPCBlem9cIDsKK+epouWkmiA8IGV0YVwgOwor56mi5ZyfIDwgZWRvXCA7CivmhbDlrokgPCBpYW5cIDsKK+WNgemHjSA8IHRvZVwgOwor5oSa5oSPIDwgZ3VpXCA7Civlj7PmtL4gPCB1aGFcIDsKK+aEj+WRsyA8IGltaVwgOwor6JCO6Z2hIDwgaWJpXCA7Civov6YgPCBrYVwgOwor55+iIDwgeWFcIDsKK+W/nCA8IG91XCA7Civlv4wgPCBraVwgOwor6L6tIDwgamlcIDsKK+W+riA8IGJpXCA7CivlvqEgPCBnb1wgOwor5b6SIDwgdG9cIDsKK+W+kCA8IGpvXCA7CivnnLwgPCBtZVwgOwor6LyqIDwgd2FcIDsKK+W8pSA8IG1pXCA7CivnnJ8gPCBtYVwgOwor5byVIDwgaW5cIDsKK+W8kCA8IG5pXCA7Civlu7YgPCBlblwgOwor5bqrIDwga29cIDsKK+W6pyA8IHphXCA7CivluqYgPCBkb1wgOwor5bqcIDwgZnVcIDsKK+W6hyA8IGhpXCA7CivouLAgPCB5dVwgOwor6LevIDwgcm9cIDsKK+W3riA8IHNhXCA7Civlt6MgPCBzdVwgOwor55ebIDwgdHNcIDsKK+eWkSA8IGdpXCA7Civnlo4gPCBzb1wgOwor55SwIDwgdGFcIDsKK+eUpSA8IG9pXCA7CivosasgPCB5b1wgOwor5bGlIDwgcmlcIDsKK+WvnSA8IG5lXCA7CivlrrYgPCBrZVwgOwor6KidIDwgZ2FcIDsKK+eHnyA8IGVpXCA7CivopaYgPCBqdVwgOwor5aWIIDwgbmFcIDsKK+eEoSA8IG11XCA7CivopJ4gPCBvblwgOwor6KSTIDwgaG9cIDsKK+ijsyA8IG1vXCA7Civloq4gPCBkYVwgOwor5aC0IDwgYmFcIDsKK+eArCA8IHNlXCA7CivonrogPCByYVwgOwor5ZuzIDwgenVcIDsKK+WXnyA8IGFhXCA7Civol40gPCBhaVwgOwor6bWhIDwgYnVcIDsKK+a0viA8IGhhXCA7CivojqsgPCBib1wgOwor6IumIDwga3VcIDsKK+WHuiA8IGRlXCA7CivlhbcgPCBndVwgOwor5qGIIDwgYW5cIDsKK+mdkiA8IGFvXCA7CivkupEgPCB1blwgOwor5LmDIDwgbm9cIDsKK+aYryA8IHplXCA7CivmiYsgPCB0ZVwgOwor5oO5IDwgamFcIDsKK+S8iuS6lSA8IGlpXCA7Civpl54gPCBrblwgOwor6YiHIDwgaHVcIDsKK+iuhCA8IHJ1XCA7Civmm70gPCB6b1wgOwor5pCZIDwgbnVcIDsKK+W6riA8IGl1XCA7CivltrQgPCBhdVwgOwor5bKGIDwgZXVcIDsKK+WxgSA8IGhlXCA7CivluLcgPCBpXCA7CivlsL4gPCBvXCA7CivlrocgPCB1XCA7CivmsZ8gPCBlXCA7Civkup4gPCBhXCA7Civms5Xlrabns7vlpKflrabpmaLlhbHpgJrlhaXlraboqabpqJMgPiBob3VnYWt1a2VpZGFpZ2FrdWlua3lvdXRzdXVueXV1Z2FrdXNoaWtlblwgOwor5pyd6a6u5rCR5Li75Li7576p5Lq65rCR5YWx5ZKM5Zu9ID4gY2hvdXNlbm1pbnNodXNodWdpamlubWlua3lvdXdha29rdVwgOwor6Ieq5YuV6LuK5pCN5a6z6LOg5YSf6LKs5Lu75L+d6Zm6ID4gamlkb3VzaGFzb25nYWliYWlzaG91c2VraW5pbmhva2VuXCA7CivnsbPlm73lpKflrablhaXlrablhbHpgJroqabpqJMgPiBiZWlrb2t1ZGFpZ2FrdW55dXVnYWt1a3lvdXRzdXVzaGlrZW5cIDsKK+aXpeacrOWKtOWDjee1hOWQiOe3j+ipleitsOS8miA+IG5paG9ucm91ZG91a3VtaWFpc291aHlvdWdpa2FpXCA7Civmi5jmnZ/lkI3nsL/lvI/mr5Tkvovku6PooajliLYgPiBrb3Vzb2t1bWVpYm9oaXJlaWRhaWh5b3VzZWlcIDsKK+iHqOWFtemXmOiAheeahumZo+ijguWcqOWJjSA+IHJpbnB5b3V0b3VzaGFrYWlqaW5yZXRzdXphaXplblwgOwor5aSq5bmz5rSL5qmf5qKw57+76Kiz5Y2U5LyaID4gdGFpaGVpeW91a2lrYWlob24nJ3lha3VreW91a2FpXCA7Civli6TlirTogIXosqHnlKPlvaLmiJDkv4PpgLIgPiBraW5yb3VzaGF6YWlzYW5rZWlzZWlzb2t1c2hpblwgOwor6LaF6LaF5aSn6KaP5qih6ZuG56mN5Zue6LevID4gY2hvdWNob3VkYWlraWJvc2h1dXNla2lrYWlyb1wgOwor6LaF44CF5aSn6KaP5qih6ZuG56mN5Zue6LevID4gY2hvdWNob3VkYWlraWJvc2h1dXNla2lrYWlyb1wgOwor5aSq5bmz5rSL5a6J5YWo5L+d6Zqc5p2h57SEID4gdGFpaGVpeW91YW56ZW5ob3Nob3Vqb3V5YWt1XCA7Civmk43nuKbluK3pn7Plo7DoqJjpjLLoo4Xnva4gPiBzb3VqdXVzZWtpb25zZWlraXJva3Vzb3VjaGlcIDsKK+iIquepuuWuh+WumeaKgOihk+eglOeptuaJgCA+IGtvdWt1dXVjaHV1Z2lqdXRzdWtlbmt5dXVqb1wgOwor5rWu5YuV5bCP5pWw54K55ryU566X5qmf5qeLID4gZnVkb3VzaG91c3V1dGVuJydlbnphbmtpa291XCA7Civnj77ph5Hoh6rli5XpoJDph5HmlK/miZXmqZ8gPiBnZW5raW5qaWRvdXlva2luc2hpaGFyYWlraVwgOwor5Li76L6e6aeG5YuV5Y+l5qeL6YCg5paH5rOVID4gc2h1amlrdWRvdWt1a291em91YnVucG91XCA7CivntYzmuIjljZTlipvplovnmbrmqZ/mp4sgPiBrZWl6YWlreW91cnlva3VrYWloYXRzdWtpa291XCA7CivljJfmtbfpgZPplovnmbrluoHplbflrpggPiBob2trYWlkb3VrYWloYXRzdWNob3VjaG91a2FuXCA7CivlpJblm73kurrnmbvpjLLoqLzmmI7mm7ggPiBnYWlrb2t1amludG91cm9rdXNob3VtZWlzaG9cIDsKK+aIpueVpeWFteWZqOWJiua4m+adoee0hCA+IHNlbnJ5YWt1aGVpa2lzYWt1Z2Vuam91eWFrdVwgOwor5Zu96Zqb5qmf5qKw57+76Kiz5Y2U5LyaID4ga29rdXNhaWtpa2FpaG9uJyd5YWt1a3lvdWthaVwgOwor5Zu96Zqb6Zu75rCX6YCa5L+h6YCj5ZCIID4ga29rdXNhaWRlbmtpdHN1dXNoaW5yZW5nb3VcIDsKK+a1t+Wklue1jOa4iOWNlOWKm+WfuumHkSA+IGthaWdhaWtlaXphaWt5b3VyeW9rdWtpa2luXCA7Civml6XnsbPlronlhajkv53pmpzmnaHntIQgPiBuaWNoaWJlaWFuemVuaG9zaG91am91eWFrdVwgOwor5oim5rKh6ICF6L+95oK86KiY5b+15pelID4gc2VuYm90c3VzaGF0c3VpdG91a2luZW5iaVwgOwor5oim6KGT6Iiq56m657Wx5Yi25pys6YOoID4gc2VuanV0c3Vrb3VrdXV0b3VzZWlob25idVwgOwor5bel5qWt6auY562J5bCC6ZaA5a2m5qChID4ga291Z3lvdWtvdXRvdXNlbm1vbmdha2tvdVwgOwor5YyX5aSn6KW/5rSL5p2h57SE5qmf5qeLID4ga2l0YXRhaXNlaXlvdWpvdXlha3VraWtvdVwgOwor6LaF5aSn6KaP5qih6ZuG56mN5Zue6LevID4gY2hvdWRhaWtpYm9zaHV1c2VraWthaXJvXCA7CivljJblrablhbXlmajnpoHmraLmnaHntIQgPiBrYWdha3VoZWlraWtpbnNoaWpvdXlha3VcIDsKK+mWoueojuiyv+aYk+S4gOiIrOWNlOWumiA+IGthbnplaWJvdWVraWlwcGFua3lvdXRlaVwgOwor5Zyo55WZ5pyf6ZaT5pu05paw6Kix5Y+vID4gemFpcnl1dWtpa2Fua291c2hpbmt5b2thXCA7CivkuIflm73lm73pmpvpn7PmqJnmloflrZcgPiBiYW5rb2t1a29rdXNhaW9ucHlvdW1vamlcIDsKK+a1t+a0i+aKleajhOimj+WItuadoee0hCA+IGthaXlvdXRvdWtpa2lzZWlqb3V5YWt1XCA7Civph47nlJ/li5Xniankv53orbflm6PkvZMgPiB5YXNlaWRvdWJ1dHN1aG9nb2RhbnRhaVwgOwor6Ieq5YuV5YiX6LuK5Yi25b6h6KOF572uID4gamlkb3VyZXNzaGFzZWlneW9zb3VjaGlcIDsKK+WkqeeEtuizh+a6kOS/neitt+irluiAhSA+IHRlbicnbmVuc2hpZ2VuaG9nb3JvbnNoYVwgOwor6Z2e5bi45LqL5oWL5a++5Yem6KiI55S7ID4gaGlqb3VqaXRhaXRhaXNob2tlaWtha3VcIDsKK+iHquWLleWIl+i7iuWBnOatouijhee9riA+IGppZG91cmVzc2hhdGVpc2hpc291Y2hpXCA7CivotaTljYHlrZflm73pmpvlp5Tlk6HkvJogPiBzZWtpanV1amlrb2t1c2FpaWlua2FpXCA7Civoq4foqbHooajnpLrmp4vpgKDnkIboq5YgPiBkYW53YWh5b3VqaWtvdXpvdXJpcm9uXCA7CivlhbHnlKPlhZrkuK3lpK7lp5Tlk6HkvJogPiBreW91c2FudG91Y2h1dW91aWlua2FpXCA7CivmsJHkuLvlhZrlhajlm73lp5Tlk6HkvJogPiBtaW5zaHV0b3V6ZW5rb2t1aWlua2FpXCA7Civoi7Hoqp7ln7rnpI7og73lipvoqabpqJMgPiBlaWdva2lzb25vdXJ5b2t1c2hpa2VuXCA7CivkuIDoiKzlkb3ku6TmvJTnrpfmqZ/mp4sgPiBpcHBhbm1laXJlaWVuemFua2lrb3VcIDsKK+efpeitmOmbhue0hOWei+eUo+alrSA+IGNoaXNoaWtpc2h1dXlha3VnYXRhc2FuZ3lvdVwgOwor6Ieq5b6L56We57WM5aSx6Kq/55eHID4gamlyaXRzdXNoaW5rZWlzaGl0Y2hvdXNob3VcIDsKK+aylue4hOmWi+eZuuW6gemVt+WumCA+IG9raW5hd2FrYWloYXRzdWNob3VjaG91a2FuXCA7CivlvIHoqLzms5XnmoTllK/nianoq5YgPiBiZW5zaG91aG91dGVraXl1aWJ1dHN1cm9uXCA7Civlm73pmpvljZTlipvkuovmpa3lm6MgPiBrb2t1c2Fpa3lvdXJ5b2t1amlneW91ZGFuXCA7Civnt4/lkIjnmoTlk4Hos6rnrqHnkIYgPiBzb3Vnb3V0ZWtpaGluc2hpdHN1a2FucmlcIDsKK+eWkeS8vOebtOaOpeebrueahOiqniA+IGdpamljaG9rdXNldHN1bW9rdXRla2lnb1wgOwor5LiH5Zu96JGX5L2c5qip5p2h57SEID4gYmFua29rdWNob3Nha3VrZW5qb3V5YWt1XCA7CivoqIDoqp7lrabnmoTlrp/lnKjoq5YgPiBnZW5nb2dha3V0ZWtpaml0c3V6YWlyb25cIDsKK+WGoOeKtuWLleiEiOihgOagk+eXhyA+IGthbmpvdWRvdW15YWt1a2Vzc2Vuc2hvdVwgOwor56eR5a2m5oqA6KGT5bqB6ZW35a6YID4ga2FnYWt1Z2lqdXRzdWNob3VjaG91a2FuXCA7CivotaTooYDnkIPmsojpmY3pgJ/luqYgPiBzZWtrZWtreXV1Y2hpbmtvdXNva3Vkb1wgOwor55+z5rK56Ly45Ye65Zu95qmf5qeLID4gc2VraXl1eXVzaHV0c3Vrb2t1a2lrb3VcIDsKK+WFrOWFseiBt+alreWuieWumuaJgCA+IGtvdWt5b3VzaG9rdWd5b3VhbnRlaWpvXCA7CivmiKbooZPoiKrnqbrntbHliLbnj60gPiBzZW5qdXRzdWtvdWt1dXRvdXNlaWhhblwgOwor6Ieq5YuV6YeR6Yqt5Ye65YWl5qmfID4gamlkb3VraW5zZW5zaHV0c3VueXV1a2lcIDsKK+WcsOmch+mbt+eBq+S6i+imqueItiA+IGppc2hpbmthbWluYXJpa2FqaW95YWppXCA7CivlpJrogqLpgbjmip7lvI/oqabllY8gPiB0YXNoaXNlbnRha3VzaGlraXNoaW1vblwgOwor5paw6Zai6KW/5Zu96Zqb56m65rivID4gc2hpbmthbnNhaWtva3VzYWlrdXVrb3VcIDsKK+iogOiqnuWtpueahOims+W/teirliA+IGdlbmdvZ2FrdXRla2lrYW4nJ25lbnJvblwgOwor5b6M55m655m65bGV6YCU5LiK5Zu9ID4ga291aGF0c3VoYXR0ZW50b2pvdWtva3VcIDsKK+aKuea2iOeZu+mMsuiovOaYjuabuCA+IG1hc2hvdXRvdXJva3VzaG91bWVpc2hvXCA7CivntYzmuIjkvIHnlLvluoHplbflrpggPiBrZWl6YWlraWtha3VjaG91Y2hvdWthblwgOwor5YaN55Sf5LiN6Imv5oCn6LKn6KGAID4gc2Fpc2VpZnVyeW91c2VpaGlua2V0c3VcIDsKK+eBq+WKm+aUr+aPtOiqv+aVtOe3miA+IGthcnlva3VzaGllbmNob3VzZWlzZW5cIDsKK+egtOWjiua0u+WLlemYsuatouazlSA+IGhha2Fpa2F0c3Vkb3Vib3VzaGlob3VcIDsKK+Wbvemam+i/lOS/oeWIh+aJi+WIuCA+IGtva3VzYWloZW5zaGlua2l0dGVrZW5cIDsKK+S4reiPr+S6uuawkeWFseWSjOWbvSA+IGNodXVrYWppbm1pbmt5b3V3YWtva3VcIDsKK+adsea1t+mBk+S6lOWNgeS4ieasoSA+IHRvdWthaWRvdWdvanV1c2FudHN1Z2lcIDsKK+Wuh+WumemWi+eZuuS6i+alreWboyA+IHVjaHV1a2FpaGF0c3VqaWd5b3VkYW5cIDsKK+S4iei7uOWcp+e4ruippumok+apnyA+IHNhbmppa3Vhc3NodWt1c2hpa2Vua2lcIDsKK+imluiBtOiAheWPguWKoOeVque1hCA+IHNoaWNob3VzaGFzYW5rYWJhbmd1bWlcIDsKK+W3numam+mAmuWVhuWnlOWToeS8miA+IHNodXVzYWl0c3V1c2hvdWlpbmthaVwgOwor5ZGo5rOi5pWw5aSJ5o+b6KOF572uID4gc2h1dWhhc3V1aGVua2Fuc291Y2hpXCA7CivmhaLmgKfnlrLlirTnl4flgJnnvqQgPiBtYW5zZWloaXJvdXNob3Vrb3VndW5cIDsKK+WFrOWus+WvvuetluWfuuacrOazlSA+IGtvdWdhaXRhaXNha3VraWhvbmhvdVwgOwor57WM5riI5Zuj5L2T6YCj5ZCI5LyaID4ga2VpemFpZGFudGFpcmVuZ291a2FpXCA7CivmiKbpl5jpm7vlrZDmiKbmg4XloLEgPiBzZW50b3VkZW5zaGlzZW5qb3Vob3VcIDsKK+ePvumHkeiHquWLleaUr+aJleapnyA+IGdlbmtpbmppZG91c2hpaGFyYWlraVwgOwor5pyA6auY57WM5Za26LKs5Lu76ICFID4gc2Fpa291a2VpZWlzZWtpbmluc2hhXCA7Civoo4XnlLLkurrlk6HpgYvmkKzou4ogPiBzb3Vrb3VqaW4nJ2luJyd1bnBhbnNoYVwgOwor5pel5pys6Kqe6IO95Yqb6Kmm6aiTID4gbmlob25nb25vdXJ5b2t1c2hpa2VuXCA7Civpn7Pnr4DkuLvpn7PnmoTlrZDpn7MgPiBvbnNldHN1c2h1b250ZWtpc2hpaW5cIDsKK+iovOWIuOWPluW8leWnlOWToeS8miA+IHNob3VrZW50b3JpaGlraWlpbmthaVwgOwor5pyA6auY6LKh5YuZ6LKs5Lu76ICFID4gc2Fpa291emFpbXVzZWtpbmluc2hhXCA7Civnn63ot53pm6Lpm6LnnYDpmbjmqZ8gPiB0YW5reW9yaXJpY2hha3VyaWt1a2lcIDsKK+apn+iDveWNmOS4gOWMluaWh+azlSA+IGtpbm91dGFuJydpdHN1a2FidW5wb3VcIDsKK+efpeiDveaDheWgseeglOeptumDqCA+IGNoaW5vdWpvdWhvdWtlbmt5dXVidVwgOwor5Yqg5Zyn5rC05Z6L5Y6f5a2Q54KJID4ga2FhdHN1c3VpZ2F0YWdlbnNoaXJvXCA7CivnkrDlpKrlubPmtIvlnLDpnIfluK8gPiBrYW50YWloZWl5b3VqaXNoaW50YWlcIDsKK+S6uueoruW3ruWIpeS4u+e+qeiAhSA+IGppbnNodXNhYmV0c3VzaHVnaXNoYVwgOwor6Ieq54S255Kw5aKD5L+d5YWo5rOVID4gc2hpemVua2Fua3lvdWhvemVuaG91XCA7CivnkrDlpKrlubPmtIvpgKDlsbHluK8gPiBrYW50YWloZWl5b3V6b3V6YW50YWlcIDsKK+ihjOWLleS4u+e+qeW/g+eQhuWtpiA+IGtvdWRvdXNodWdpc2hpbnJpZ2FrdVwgOwor56ys5LiA5qyh5LiW55WM5aSn5oimID4gZGFpaWNoaWppc2VrYWl0YWlzZW5cIDsKK+WkieWLleeCuuabv+ebuOWgtOWItiA+IGhlbmRvdWthd2FzZXNvdWJhc2VpXCA7Civmra/lhoXnmYLms5XlsILploDljLsgPiBzaGlrYXJ5b3Vob3VzZW5tb24nJ2lcIDsKK+eSsOWkquW5s+a0i+eBq+WxseW4ryA+IGthbnRhaWhlaXlvdWthemFudGFpXCA7Civlrp/mg4Xoqr/mn7vlp5Tlk6HkvJogPiBqaXRzdWpvdWNob3VzYWlpbmthaVwgOwor56eR5a2m5Z+656SO56CU56m25omAID4ga2FnYWt1a2lzb2tlbmt5dXVzaG9cIDsKK+WkieW9oueUn+aIkOe1seiqnuirliA+IGhlbmtlaXNlaXNlaXRvdWdvcm9uXCA7CivlpKfopo/mqKHpm4bnqY3lm57ot68gPiBkYWlraWJvc2h1dXNla2lrYWlyb1wgOwor5Y2X54Sh5aaZ5rOV6JOu6I+v57WMID4gbmFtdW15b3Vob3VyZW5nZWt5b3VcIDsKK+acqueiuuiqjemjm+ihjOeJqeS9kyA+IG1pa2FrdW5pbmhpa291YnV0dGFpXCA7CivkuIDphbjljJbngq3ntKDkuK3mr5IgPiBpc3NhbmthdGFuc29jaHV1ZG9rdVwgOwor5YWs5q2j5Y+W5byV5aeU5ZOh5LyaID4ga291c2VpdG9yaWhpa2lpaW5rYWlcIDsKK+eojuW8leWJjeW9k+acn+WIqeebiiA+IHplaWJpa2ltYWV0b3VraXJpZWtpXCA7CivpgKPpgqblj5blvJXlp5Tlk6HkvJogPiByZW5wb3V0b3JpaGlraWlpbmthaVwgOwor5rWB6KGM5oCn6ICz5LiL6IW654KOID4gcnl1dWtvdXNlaWppa2FzZW4nJ2VuXCA7Civnt4/nkIblupznt4/li5nplbflrpggPiBzb3VyaWZ1c291bXVjaG91a2FuXCA7CivnkrDlooPkv53orbfkuLvnvqnogIUgPiBrYW5reW91aG9nb3NodWdpc2hhXCA7Civml6XmnKzpmbjkuIroh6rooZvpmoogPiBuaWhvbnJpa3Vqb3VqaWVpdGFpXCA7Civph5HlnLDph5HmnKzkvY3liLbluqYgPiBraW5qaWdhbmVob24nJ2lzZWlkb1wgOwor6YeN6KaB54Sh5b2i5paH5YyW6LKhID4ganV1eW91bXVrZWlidW5rYXphaVwgOwor57WM5riI56S+5Lya55CG5LqL5LyaID4ga2VpemFpc2hha2FpcmlqaWthaVwgOwor5Li76Kqe5Yqp5YuV6Kme5YCS572uID4gc2h1Z29qb2RvdXNoaXRvdWNoaVwgOwor5ZCI5ZCM5oqA6KGT5aeU5ZOh5LyaID4gZ291ZG91Z2lqdXRzdWlpbmthaVwgOwor6Ieq5YuV5pa55ZCR5o6i55+l5qmfID4gamlkb3Vob3Vrb3V0YW5jaGlraVwgOwor5biw6YKE5LiN6IO96ZmQ55WM54K5ID4ga2lrYW5mdW5vdWdlbmthaXRlblwgOwor5Zu95a625YWs5a6J5aeU5ZOh6ZW3ID4ga29ra2Frb3VhbicnaWluY2hvdVwgOwor5Zu95Lya5a++562W5aeU5ZOh5LyaID4ga29ra2FpdGFpc2FrdWlua2FpXCA7CivnrKzkuozmrKHkuJbnlYzlpKfmiKYgPiBkYWluaWppc2VrYWl0YWlzZW5cIDsKK+S6nOexs+WIqeWKoOWQiOihhuWbvSA+IGFtZXJpa2FnYXNzaHV1a29rdVwgOwor5pel5pys6Iiq56m66Ieq6KGb6ZqKID4gbmlob25rb3VrdXVqaWVpdGFpXCA7CivnrKblj7fljJbmloflrZfpm4blkIggPiBmdWdvdWthbW9qaXNodXVnb3VcIDsKK+aXpeacrOa1t+S4iuiHquihm+maiiA+IG5paG9ua2Fpam91amllaXRhaVwgOwor5LiL5L2N56+E55aH5YyW57Sg5oCnID4ga2FpaGFuY2h1dWthc29zZWlcIDsKK+mBuOaMmeeuoeeQhuWnlOWToeS8miA+IHNlbmt5b2thbnJpaWlua2FpXCA7CivkuIvkvY3nr4TnlofljJbljp/nkIYgPiBrYWloYW5jaHV1a2FnZW5yaVwgOwor6ICz6by75ZK95ZaJ5bCC6ZaA5Yy7ID4gamliaWlua291c2VubW9uJydpXCA7CivorbDpmaLpgYvllrblp5Tlk6HkvJogPiBnaWluJyd1bicnZWlpaW5rYWlcIDsKK++8ku+8kO+8kO+8kOW5tOWVj+mhjCA+IG5pc2VuJyduZW5tb25kYWlcIDsKK+Wul+aVmeeahOeLrOeri+aApyA+IHNodXVreW91dGVraWRva3VyaXRzdXNlaVwgOwor55u05o6l54Wn5rqW5bCE5pKDID4gY2hva3VzZXRzdXNob3VqdW5zaGFnZWtpXCA7Civnibnmrorlj5bmibHpg7Xkvr8gPiB0b2t1c2h1dG9yaWF0c3VrYWl5dXViaW5cIDsKK+S5vua5v+eQg+a5v+W6puioiCA+IGthbnNoaXRzdWt5dXVzaGl0c3Vkb2tlaVwgOwor5Zyn5a+G6ZmN5LyP5b+c5YqbID4gYXRzdW1pdHN1a291ZnVrdW91cnlva3VcIDsKK+WFrOiqjeWNuOWjsualreiAhSA+IGtvdW5pbicnb3Jvc2hpdXJpZ3lvdXNoYVwgOwor5qC45YiG6KOC55Sf5oiQ54mpID4ga2FrdWJ1bnJldHN1c2Vpc2VpYnV0c3VcIDsKK+iBt+alreWIpembu+ipseW4syA+IHNob2t1Z3lvdWJldHN1ZGVud2FjaG91XCA7CivlhaXlrablhbHpgJroqabpqJMgPiBueXV1Z2FrdWt5b3V0c3V1c2hpa2VuXCA7CivlrqTlhoXnrqHlvKbmpb3lm6MgPiBzaGl0c3VuYWlrYW5nZW5nYWt1ZGFuXCA7CivmnbHkuqzmoKrlvI/luILloLQgPiB0b3VreW91a2FidXNoaWtpc2hpam91XCA7Civnorrnjoflr4bluqbplqLmlbAgPiBrYWt1cml0c3VtaXRzdWRva2Fuc3V1XCA7Civljp/lrZDlipvnmbrpm7vmiYAgPiBnZW5zaGlyeW9rdWhhdHN1ZGVuc2hvXCA7Civli6flloTmh7LmgqrlsI/oqqwgPiBrYW56ZW5jaG91YWt1c2hvdXNldHN1XCA7Civmna3lkajpnaLmkanmk6blipsgPiBrdWlzaHV1bWVubWFzYXRzdXJ5b2t1XCA7CivplpPmjqXnhafmupblsITmkoMgPiBrYW5zZXRzdXNob3VqdW5zaGFnZWtpXCA7CivmlrDopo/moKrlvI/lhazplosgPiBzaGlua2lrYWJ1c2hpa2lrb3VrYWlcIDsKK+Wtpue/kuaMh+WwjuimgemgmCA+IGdha3VzaHV1c2hpZG91eW91cnlvdVwgOwor5pep55m65oCn55e05ZGG55eHID4gc291aGF0c3VzZWljaGlob3VzaG91XCA7Civkv6HnlKjljZTlkIzntYTlkIggPiBzaGluJyd5b3VreW91ZG91a3VtaWFpXCA7CivlvKbmpb3lm5vph43lpY/mm7IgPiBnZW5nYWt1c2hpanV1c291a3lva3VcIDsKK+a8lOe5ueeahOiqrOaYjuazlSA+IGVuJydla2l0ZWtpc2V0c3VtZWlob3VcIDsKK+a3seWcqOaAp+ecn+iPjOeXhyA+IHNoaW56YWlzZWlzaGlua2luc2hvdVwgOwor57Wx546H5p2f57ib55CG6KuWID4gdG91c290c3Vzb2t1YmFrdXJpcm9uXCA7CivmnKzmhYvmgKfpq5jooYDlnKcgPiBob250YWlzZWlrb3VrZXRzdWF0c3VcIDsKK+mZuOS4iuerr+WxgOijhee9riA+IHJpa3Vqb3V0YW5reW9rdXNvdWNoaVwgOwor5pel57Gz6LK/5piT5pGp5pOmID4gbmljaGliZWlib3Vla2ltYXNhdHN1XCA7CivpgJrllYbnlKPmpa3lpKfoh6MgPiB0c3V1c2hvdXNhbmd5b3VkYWlqaW5cIDsKK+mAmuWVhuiIqua1t+adoee0hCA+IHRzdXVzaG91a291a2Fpam91eWFrdVwgOwor6Luf5Yik5a6a6K2Y5Yil5ZmoID4gbmFuaGFudGVpc2hpa2liZXRzdWtpXCA7Civnqbrmg7Pnp5HlrablsI/oqqwgPiBrdXVzb3VrYWdha3VzaG91c2V0c3VcIDsKK+aWsOWFpeekvuWToeaVmeiCsiA+IHNoaW4nJ255dXVzaGFpbmt5b3Vpa3VcIDsKK+aOqOWlqOaWh+eMruebrumMsiA+IHN1aXNob3VidW5rZW5tb2t1cm9rdVwgOwor5b6z5bed5LiJ5Luj5a625YWJID4gdG9rdWdhd2FzYW5kYWlpZW1pdHN1XCA7CivnlJ/mtLvljZTlkIzntYTlkIggPiBzZWlrYXRzdWt5b3Vkb3VrdW1pYWlcIDsKK+aWmemHkeWIpee0jemDteS+vyA+IHJ5b3VraW5iZXRzdW5vdXl1dWJpblwgOwor5Lit6Led6Zui5qC45oim5YqbID4gY2h1dWt5b3Jpa2FrdXNlbnJ5b2t1XCA7CivovrLmpa3ljZTlkIzntYTlkIggPiBub3VneW91a3lvdWRvdWt1bWlhaVwgOwor5aSn6Zm45qiq5pat6YmE6YGTID4gdGFpcmlrdW91ZGFudGV0c3Vkb3VcIDsKK+mrmOWIhuWtkOWQuOWPjuS9kyA+IGtvdWJ1bnNoaWt5dXVzaHV1dGFpXCA7Civml6XnsbPmp4vpgKDljZTorbAgPiBuaWNoaWJlaWtvdXpvdWt5b3VnaVwgOwor5qmf5qKw57+76Kiz5Y2U5LyaID4ga2lrYWlob24nJ3lha3VreW91a2FpXCA7CivkuK3lpK7ooYzmlL/lrpjluoEgPiBjaHV1b3VneW91c2Vpa2FuY2hvdVwgOwor5YyX5aSn6KW/5rSL5p2h57SEID4ga2l0YXRhaXNlaXlvdWpvdXlha3VcIDsKK+mbu+awl+mAmuS/oeWkp+WtpiA+IGRlbmtpdHN1dXNoaW5kYWlnYWt1XCA7CivoirPpppnml4/ljJblkIjniakgPiBob3Vrb3V6b2t1a2Fnb3VidXRzdVwgOwor5YaF6Zaj5a6Y5oi/6ZW35a6YID4gbmFpa2FrdWthbmJvdWNob3VrYW5cIDsKK+W8pualveS6lOmHjeWlj+absiA+IGdlbmdha3Vnb2p1dXNvdWt5b2t1XCA7CivlroflrpnplovnmbroqIjnlLsgPiB1Y2h1dWthaWhhdHN1a2Vpa2FrdVwgOwor57Gz6YCj6YKm6Iiq56m65bGAID4gYmVpcmVucG91a3V1a291a3lva3VcIDsKK+WkluWbveS6uueZu+mMsuazlSA+IGdhaWtva3VqaW50b3Vyb2t1aG91XCA7CivlhbHnlKPlhZrmlL/msrvlsYAgPiBreW91c2FudG91c2VpamlreW9rdVwgOwor5p2f57ib57aZ5om/5Y6f55CGID4gc29rdWJha3VrZWlzaG91Z2VucmlcIDsKK+S4iei7uOWcp+e4ruippumokyA+IHNhbmppa3Vhc3NodWt1c2hpa2VuXCA7Civnqbrou43pgKPntaHlsIbmoKEgPiBrdXVndW5yZW5yYWt1c2hvdWtvdVwgOwor5Y245aOy54mp5L6h5oyH5pWwID4gb3Jvc2hpdXJpYnVra2FzaGlzdXVcIDsKK+WGmeecn+WIpOWumuaxuuWLnSA+IHNoYXNoaW5oYW50ZWlrZXNzaG91XCA7CivliY3nq4vohbrogqXlpKfnl4cgPiB6ZW5yaXRzdXNlbmhpZGFpc2hvdVwgOwor6Kqs5piO55qE5aal5b2T5oCnID4gc2V0c3VtZWl0ZWtpZGF0b3VzZWlcIDsKK+WFsemAmuS4gOasoeippumokyA+IGt5b3V0c3V1aWNoaWppc2hpa2VuXCA7CivnrKzkuInnqK7pg7Xkvr/niakgPiBkYWlzYW5zaHV5dXViaW5idXRzdVwgOwor5Y+L5aW96YCa5ZWG6Iiq5rW3ID4geXV1a291dHN1dXNob3Vrb3VrYWlcIDsKK+eEoeaLheS/neiyuOS7mOmHkSA+IG11dGFucG9rYXNoaXRzdWtla2luXCA7Civlv4XopoHljYHliIbmnaHku7YgPiBoaXRzdXlvdWp1dWJ1bmpvdWtlblwgOwor57K+56We55qE5oyH5bCO6ICFID4gc2Vpc2hpbnRla2lzaGlkb3VzaGFcIDsKK+WOn+WtkOeJqeeQhuWtpuiAhSA+IGdlbnNoaWJ1dHN1cmlnYWt1c2hhXCA7Civnsr7lr4bmqZ/morDlt6Xmpa0gPiBzZWltaXRzdWtpa2Fpa291Z3lvdVwgOwor5YaN5YWl5Zu96Kix5Y+v5pu4ID4gc2Fpbnl1dWtva3VreW91a2FzaG9cIDsKK+WumuW9ouWklumDteS+v+eJqSA+IHRlaWtlaWdhaXl1dWJpbmJ1dHN1XCA7CivotoXkuKbliJfoqIjnrpfmqZ8gPiBjaG91aGVpcmV0c3VrZWlzYW5raVwgOwor5Lit5p6i56We57WM57O757WxID4gY2h1dXN1dXNoaW5rZWlrZWl0b3VcIDsKK+S8nemAgeWItuW+oeaLoeW8tSA+IGRlbnNvdXNlaWd5b2tha3VjaG91XCA7Civml6XkuK3lj4vlpb3ljZTkvJogPiBuaXRjaHV1eXV1a291a3lvdWthaVwgOwor5Zu95rCR6YeR6J6N5YWs5bqrID4ga29rdW1pbmtpbicneXV1a291a29cIDsKK+WPo+i+uuWNmOe0lOeWseeWuSA+IGtvdWhlbnRhbmp1bmhvdXNoaW5cIDsKK+mbhuWbo+WuieWFqOS/nemanCA+IHNodXVkYW4nJ2FuemVuaG9zaG91XCA7CivlkI3npZ7pq5jpgJ/pgZPot68gPiBtZWlzaGlua291c29rdWRvdXJvXCA7CivmlL7lsITmgKfpmY3kuIvniakgPiBob3VzaGFzZWlrb3VrYWJ1dHN1XCA7CivliqPmgKfpgbrkvJ3lvaLos6ogPiByZXNzZWlpZGVua2Vpc2hpdHN1XCA7CivliJ3mnJ/pgbjmip7poIXnm64gPiBzaG9raXNlbnRha3Vrb3Vtb2t1XCA7Civlhajlm73mtKXmtKXmtabmtaYgPiB6ZW5rb2t1dHN1dHN1dXJhdXJhXCA7Civkv6Hku7vntbHmsrvliLbluqYgPiBzaGluJyduaW50b3VjaGlzZWlkb1wgOwor5Li76KaB6YOo57WC56uv5Z6LID4gc2h1eW91YnVzaHV1dGFuZ2F0YVwgOwor5ZCI5oiQ5YyW5a2m5bel5qWtID4gZ291c2Vpa2FnYWt1a291Z3lvdVwgOwor5Zu95rCR5L2T6IKy5aSn5LyaID4ga29rdW1pbnRhaWlrdXRhaWthaVwgOwor5Zu96Zqb6Zu75L+h6Zu76KmxID4ga29rdXNhaWRlbnNoaW5kZW53YVwgOwor6Zu75a2Q6LOH6YeR5oyv5pu/ID4gZGVuc2hpc2hpa2luZnVyaWthZVwgOwor5bym5qW95Zub6YeN5aWP5ZujID4gZ2VuZ2FrdXNoaWp1dXNvdWRhblwgOwor6Iiq56m65Lqk6YCa566h5Yi2ID4ga291a3V1a291dHN1dWthbnNlaVwgOwor6LKh5pS/5Z2H6KGh6KiI55S7ID4gemFpc2Vpa2lua291a2Vpa2FrdVwgOwor5pel5pys6KaP5qC85Y2U5LyaID4gbmlwcG9ua2lrYWt1a3lvdWthaVwgOwor5YuV54mp5oSb6K235Y2U5LyaID4gZG91YnV0c3VhaWdva3lvdWthaVwgOwor57Gz6Iiq56m65a6H5a6Z5bGAID4gYmVpa291a3V1dWNodXVreW9rdVwgOwor5YWo5Zu95rSl44CF5rWm44CFID4gemVua29rdXRzdXRzdXVyYXVyYVwgOwor5pel5pys5a2m6KGT5Lya6K2wID4gbmlob25nYWt1anV0c3VrYWlnaVwgOwor5Lq66ZaT55Kw5aKD5a6j6KiAID4gbmluZ2Vua2Fua3lvdXNlbmdlblwgOwor5a625a6F5o2c57Si5Luk54q2ID4ga2F0YWt1c291c2FrdXJlaWpvdVwgOwor5a6J5Zyf5qGD5bGx5pmC5LujID4gYXp1Y2hpbW9tb3lhbWFqaWRhaVwgOwor55Sf55CG55qE6aOf5aGp5rC0ID4gc2Vpcml0ZWtpc2hva3VlbnN1aVwgOwor55Kw5aSq5bmz5rSL6Ku45Zu9ID4ga2FudGFpaGVpeW91c2hva29rdVwgOwor54Gr5Yqb5pSv5o+06KiI55S7ID4ga2FyeW9rdXNoaWVua2Vpa2FrdVwgOwor6JGX5L2c5qip5omA5pyJ6ICFID4gY2hvc2FrdWtlbnNob3l1dXNoYVwgOwor5pWw5a2m55qE5biw57SN5rOVID4gc3V1Z2FrdXRla2lraW5vdWhvdVwgOwor5pel5pys5Zu954m56Kix5bqBID4gbmlob25rb2t1dG9ra3lvY2hvdVwgOwor6aOf57On566h55CG5Yi25bqmID4gc2hva3VyeW91a2FucmlzZWlkb1wgOwor55Sf54mp5YyW5a2m5YW15ZmoID4gc2VpYnV0c3VrYWdha3VoZWlraVwgOwor5aWz5qip5ouh5by16KuW6ICFID4gam9rZW5rYWt1Y2hvdXJvbnNoYVwgOwor57Wx5ZCI5bmV5YOa5Lya6K2wID4gdG91Z291YmFrdXJ5b3VrYWlnaVwgOwor5bCE5pKD56aB5q2i5Zyw5Z+fID4gc2hhZ2VraWtpbnNoaWNoaWlraVwgOwor54m55ZG95YWo5qip5YWs5L2/ID4gdG9rdW1laXplbmtlbmtvdXNoaVwgOwor5paw6IGe5YCr55CG57ax6aCYID4gc2hpbmJ1bnJpbnJpa291cnlvdVwgOwor6KiY6L+w55qE5aal5b2T5oCnID4ga2lqdXRzdXRla2lkYXRvdXNlaVwgOwor5LiH5Zu96YO15L6/6YCj5ZCIID4gYmFua29rdXl1dWJpbnJlbmdvdVwgOwor5L2P5a6F6YeR6J6N5YWs5bqrID4ganV1dGFrdWtpbicneXV1a291a29cIDsKK+WNmOS9jeS9k+epjemHjemHjyA+IHRhbicnaXRhaXNla2lqdXVyeW91XCA7CivntbHkuIDlnLDmlrnpgbjmjJkgPiB0b3VpdHN1Y2hpaG91c2Vua3lvXCA7CivlhazplovluILloLTmlL/nrZYgPiBrb3VrYWlzaGlqb3VzZWlzYWt1XCA7CivlnLDnkIPoprPmuKzooZvmmJ8gPiBjaGlreXV1a2Fuc29rdWVpc2VpXCA7Civph43ph4/mi7Ppl5jpgbjmiYsgPiBqdXVyeW91a2VudG91c2Vuc2h1XCA7Civkurrlt6XmsJfog7jnmYLms5UgPiBqaW5rb3VraWt5b3VyeW91aG91XCA7CivlnLDmlrnlhazlhbHlm6PkvZMgPiBjaGlob3Vrb3VreW91ZGFudGFpXCA7CivmiYvmoLnnrqHnl4flgJnnvqQgPiBzaHVrb25rYW5zaG91a291Z3VuXCA7Civpq5jliIblrZDljJblkIjniakgPiBrb3VidW5zaGlrYWdvdWJ1dHN1XCA7CivpmbjkuIrkvZzmiKbmnKzpg6ggPiByaWt1am91c2FrdXNlbmhvbmJ1XCA7CivmlL7lsITmgKflu4Pmo4TniakgPiBob3VzaGFzZWloYWlraWJ1dHN1XCA7CivpgIbou6LliIbluIPkv4LmlbAgPiBneWFrdXRlbmJ1bnB1a2Vpc3V1XCA7CivonJjom5vohpzkuIvlh7rooYAgPiBrdW1vbWFrdWthc2h1a2tldHN1XCA7CivlhbHlkIzmlZHmuIjln7rph5EgPiBreW91ZG91a3l1dXNhaWtpa2luXCA7Civkv53pmbrph5Hlj5flj5bkurogPiBob2tlbmtpbicndWtldG9yaW5pblwgOwor6Zm46LuN5aOr5a6Y5a2m5qChID4gcmlrdWd1bnNoaWthbmdha2tvdVwgOwor5ryB5qWt5bCC566h5rC05Z+fID4gZ3lvZ3lvdXNlbmthbnN1aWlraVwgOwor6Iq46KGT6Iez5LiK5Li7576pID4gZ2VpanV0c3VzaGlqb3VzaHVnaVwgOwor54m55ZG95YWo5qip5aSn5L2/ID4gdG9rdW1laXplbmtlbnRhaXNoaVwgOwor6L+R5o6l6Iiq56m65pSv5o+0ID4ga2luc2V0c3Vrb3VrdXVzaGllblwgOwor5pyJ5qmf5rC06YqA5Lit5q+SID4geXV1a2lzdWlnaW5jaHV1ZG9rdVwgOwor55Kw5aSq5bmz5rSL5qeL5oOzID4ga2FudGFpaGVpeW91a291c291XCA7CivlhaznmoTkuI3ms5XlpqjlrrMgPiBrb3V0ZWtpZnVob3Vib3VnYWlcIDsKK+aIpumXmOaUr+aPtOioiOeUuyA+IHNlbnRvdXNoaWVua2Vpa2FrdVwgOwor5Zue57ea5Yi25b6h6KaP5YmHID4ga2Fpc2Vuc2VpZ3lva2lzb2t1XCA7CivmuK/mub7pgYvpgIHkuovmpa0gPiBrb3V3YW4nJ3Vuc291amlneW91XCA7CivploDmiLjplovmlL7mlL/nrZYgPiBtb25rb2thaWhvdXNlaXNha3VcIDsKK+adseWQjemrmOmAn+mBk+i3ryA+IHRvdW1laWtvdXNva3Vkb3Vyb1wgOwor5YaF6Zaj57eP55CG5aSn6IejID4gbmFpa2FrdXNvdXJpZGFpamluXCA7Civml6XmnKzmlL7pgIHljZTkvJogPiBuaWhvbmhvdXNvdWt5b3VrYWlcIDsKK+iIquepuuWuh+WumeW3pealrSA+IGtvdWt1dXVjaHV1a291Z3lvdVwgOwor5a6J5YWo5L+d6Zqc5p2h57SEID4gYW56ZW5ob3Nob3Vqb3V5YWt1XCA7CivkuLvlg43lnJ/lnKfkv4LmlbAgPiBzaHVkb3Vkb2F0c3VrZWlzdXVcIDsKK+WPjeWwhOeahOWNiumghuW6jyA+IGhhbnNoYXRla2loYW5qdW5qb1wgOwor5Zu96Zqb6YCa6LKo5Z+66YeRID4ga29rdXNhaXRzdXVrYWtpa2luXCA7Civnn63mnJ/pm4bkuK3orJvluqcgPiB0YW5raXNodXVjaHV1a291emFcIDsKK+aXpeacrOi+suael+imj+agvCA+IG5paG9uJydub3VyaW5raWtha3VcIDsKK+iIquepuuWuh+WumeeUo+alrSA+IGtvdWt1dXVjaHV1c2FuZ3lvdVwgOwor5ZOB6LOq5L+d5oyB5pyf6ZmQID4gaGluc2hpdHN1aG9qaWtpZ2VuXCA7Civml6XmnKzlt6Xmpa3opo/moLwgPiBuaWhvbmtvdWd5b3VraWtha3VcIDsKK+S4rei3nembouaguOWFteWZqCA+IGNodXVreW9yaWtha3VoZWlraVwgOwor6YW45YyW6YKE5YWD5Y+N5b+cID4gc2Fua2FrYW5nZW5oYW4nJ25vdVwgOwor5YWs5YuZ5Z+36KGM5aao5a6zID4ga291bXVzaGlra291Ym91Z2FpXCA7Civpq5jnrYnlsILploDlrabmoKEgPiBrb3V0b3VzZW5tb25nYWtrb3VcIDsKK+atqeWFteaIpumXmOi7iuS4oSA+IGhvaGVpc2VudG91c2hhcnlvdVwgOwor5YWx5ZCM6KiY6ICF5Lya6KaLID4ga3lvdWRvdWtpc2hha2Fpa2VuXCA7CivlpKrpmb3nhrHmuKnmsLTlmaggPiB0YWl5b3VuZXRzdW9uc3Vpa2lcIDsKK+mdmeatouWcn+Wcp+S/guaVsCA+IHNlaXNoaWRvYXRzdWtlaXN1dVwgOwor5Lq65Y+j5YuV5oWL57Wx6KiIID4gamlua291ZG91dGFpdG91a2VpXCA7Civlm73pgKPkuovli5nnt4/plbcgPiBrb2t1cmVuamltdXNvdWNob3VcIDsKK+S4jeWLleeUo+WPluW+l+eojiA+IGZ1ZG91c2Fuc2h1dG9rdXplaVwgOwor5bm05qyh5pyJ57Wm5LyR5pqHID4gbmVuaml5dXVreXV1a3l1dWthXCA7CivljYHkuozmjIfohbjmvbDnmI0gPiBqdXVuaXNoaWNob3VrYWl5b3VcIDsKK+aIpuS6ieeKr+e9quazleW7tyA+IHNlbnNvdWhhbnphaWhvdXRlaVwgOwor5bm05Yqf5bqP5YiX5Yi25bqmID4gbmVua291am9yZXRzdXNlaWRvXCA7CivovrLmnpfmsLTnlKPlpKfoh6MgPiBub3VyaW5zdWlzYW5kYWlqaW5cIDsKK+S4u+imgemDqOWFiOWwjuWeiyA+IHNodXlvdWJ1c2VuZG91Z2F0YVwgOwor5Zu95rCR5YGl5bq35L+d6Zm6ID4ga29rdW1pbmtlbmtvdWhva2VuXCA7CivkuI3lrproqIjph4/nqbrplpMgPiBmdXRlaWtlaXJ5b3VrdXVrYW5cIDsKK+WPjeW4neWbveS4u+e+qeiAhSA+IGhhbnRlaWtva3VzaHVnaXNoYVwgOwor6Zu76I2357WQ5ZCI57Sg5a2QID4gZGVua2FrZXRzdWdvdXNvc2hpXCA7CivmnInpmZDnirbmhYvmlofms5UgPiB5dXVnZW5qb3V0YWlidW5wb3VcIDsKK+S/ruato+izh+acrOS4u+e+qSA+IHNodXVzZWlzaGlob25zaHVnaVwgOwor5LiA5Y215oCn5Y+M55Sf5YWQID4gaWNoaXJhbnNlaXNvdXNlaWppXCA7CivlnLDkuK3mtbfmgKfmsJflgJkgPiBjaGljaHV1a2Fpc2Vpa2lrb3VcIDsKK+aKleizh+acieS+oeiovOWIuCA+IHRvdXNoaXl1dWthc2hvdWtlblwgOwor5YmN5pa55YaN6KOc57Wm54K5ID4gemVucG91c2FpaG9reXV1dGVuXCA7Civnq4vmhrLlkJvkuLvmlL/kvZMgPiByaWtrZW5rdW5zaHVzZWl0YWlcIDsKK+aUvumAgeemgeatoueUqOiqniA+IGhvdXNvdWtpbnNoaXlvdWdvXCA7CivljYHkuIDpnaLoprPkuJbpn7MgPiBqdXVpY2hpbWVua2FuemVvblwgOwor5b2i54q26KiY5oa25ZCI6YeRID4ga2Vpam91a2lva3Vnb3VraW5cIDsKK+ihjOWLleeZuui1t+aZguWIuyA+IGtvdWRvdWhha2tpamlrb2t1XCA7CivljYHpg6jploDliIbpoZ7ms5UgPiBqdXVidW1vbmJ1bnJ1aWhvdVwgOwor5LiW55WM5LiA5ZGo5peF6KGMID4gc2VrYWlpc3NodXVyeW9rb3VcIDsKK+S4lueVjOS6uuaoqeWuo+iogCA+IHNla2Fpamlua2Vuc2VuZ2VuXCA7CivlhaznmoTljLvnmYLmqZ/plqIgPiBrb3V0ZWtpaXJ5b3VraWthblwgOwor5Y+X5YON5Zyf5Zyn5L+C5pWwID4ganVkb3Vkb2F0c3VrZWlzdXVcIDsKK+S4jeeiuuWumuaAp+WOn+eQhiA+IGZ1a2FrdXRlaXNlaWdlbnJpXCA7CivkuoznrYnovrrkuInop5LlvaIgPiBuaXRvdWhlbnNhbmtha2tlaVwgOwor5pS/5Luk5oyH5a6a6YO95biCID4gc2VpcmVpc2hpdGVpdG9zaGlcIDsKK+eEoeaLheS/neWAn+WFpemHkSA+IG11dGFucG9rYXJpaXJla2luXCA7CivljZjkvY3lirTlg43ntYTlkIggPiB0YW4nJ2lyb3Vkb3VrdW1pYWlcIDsKK+S4reWkruWHpueQhuijhee9riA+IGNodXVvdXNob3Jpc291Y2hpXCA7CivmrKflt57pgJrosqjljZjkvY0gPiBvdXNodXV0c3V1a2F0YW4nJ2lcIDsKK+iHqueUseiyv+aYk+W4r+WfnyA+IGppeXV1Ym91ZWtpdGFpaWtpXCA7CivmgYvmhJvoh7PkuIrkuLvnvqkgPiByZW4nJ2Fpc2hpam91c2h1Z2lcIDsKK+iHquWLlei7iuS/nemZuuaWmSA+IGppZG91c2hhaG9rZW5yeW91XCA7CivmiKbloLToiKrnqbrpmLvmraIgPiBzZW5qb3Vrb3VrdXVzb3NoaVwgOwor57Wx5ZCI5Y+C6KyA5pys6YOoID4gdG91Z291c2FuYm91aG9uYnVcIDsKK+acgOmVt+S4jeWAkui3nemboiA+IHNhaWNob3VmdXRvdWt5b3JpXCA7CivljbDosaHkuLvnvqnpn7Pmpb0gPiBpbnNob3VzaHVnaW9uZ2FrdVwgOwor6L+R5Luj5LqU56iu56u25oqAID4ga2luZGFpZ29zaHVreW91Z2lcIDsKK+W+jOaWueWcsOWfn+itpuWCmSA+IGtvdWhvdWNoaWlraWtlaWJpXCA7Civoh6rli5Xmk43nuKboo4Xnva4gPiBqaWRvdXNvdWp1dXNvdWNoaVwgOwor6YO95biC5a++5oqX6YeO55CDID4gdG9zaGl0YWlrb3V5YWt5dXVcIDsKK+mHkeWJm+WknOWPieWmmeeOiyA+IGtvbmdvdXlhc2hhbXlvdW91XCA7Civpq5jpgJ/mvJTnrpfmqZ/mp4sgPiBrb3Vzb2t1ZW56YW5raWtvdVwgOwor6aOb6KGM56aB5q2i56m65Z+fID4gaGlrb3VraW5zaGlrdXVpa2lcIDsKK+eSsOWig+S/neitt+irluiAhSA+IGthbmt5b3Vob2dvcm9uc2hhXCA7CivpgLHplpPlpKnmsJfkuojloLEgPiBzaHV1a2FudGVua2l5b2hvdVwgOwor5pS+5bCE57ea5oSf5Y+X5oCnID4gaG91c2hhc2Vua2FuanVzZWlcIDsKK+ekvuS8muawkeS4u+S4u+e+qSA+IHNoYWthaW1pbnNodXNodWdpXCA7Civpg6jliIbmg4XloLHmp4vpgKAgPiBidWJ1bmpvdWhvdWtvdXpvdVwgOwor5LiA5oyZ5omL5LiA5oqV6LazID4gaWtreW9zaHVpdHRvdXNva3VcIDsKK+acieW9ouWbuuWumuizh+eUoyA+IHl1dWtlaWtvdGVpc2hpc2FuXCA7Civpo5vooYzoqJjpjLLoo4Xnva4gPiBoaWtvdWtpcm9rdXNvdWNoaVwgOwor6KKr5ouF5L+d5YK15qip6aGNID4gaGl0YW5wb3NhaWtlbmdha3VcIDsKK+S6jOS6pOabv+WItuWKtOWDjSA+IG5pa291dGFpc2Vpcm91ZG91XCA7Civkv53lrojns7vnhKHmiYDlsZ4gPiBob3NodWtlaW11c2hvem9rdVwgOwor5Y+N6Lui5YiG5biD5L+C5pWwID4gaGFudGVuYnVucHVrZWlzdXVcIDsKK+epuuaMuumZjeS4i+WcsOWfnyA+IGt1dXRlaWtvdWthY2hpaWtpXCA7CivngavlipvmlK/mj7Tpg6jpmoogPiBrYXJ5b2t1c2hpZW5idXRhaVwgOwor5q2M6Iie5LyO5Y2B5YWr55WqID4ga2FidWtpanV1aGFjaGliYW5cIDsKK+Wkp+mHj+egtOWjiuWFteWZqCA+IHRhaXJ5b3VoYWthaWhlaWtpXCA7Civlj43lsITkv4LmlbDnt5rlm7MgPiBoYW5zaGFrZWlzdXVzZW56dVwgOwor57Sg57KS5a2Q5Yqg6YCf5ZmoID4gc29yeXV1c2hpa2Fzb2t1a2lcIDsKK+iHqueUseiyv+aYk+WcsOWfnyA+IGppeXV1Ym91ZWtpY2hpaWtpXCA7CivlhazplovluILloLTmk43kvZwgPiBrb3VrYWlzaGlqb3Vzb3VzYVwgOwor5Lq66Lqr5L+d6K235Luk54q2ID4gamluc2hpbmhvZ29yZWlqb3VcIDsKK+avjeWtkOWBpeW6t+aJi+W4syA+IGJvc2hpa2Vua291dGVjaG91XCA7CivljprnlJ/lubTph5Hkv53pmbogPiBrb3VzZWluZW5raW5ob2tlblwgOwor5oCn6KGM54K65oSf5p+T55eHID4gc2Vpa291aWthbnNlbnNob3VcIDsKK+eUn+WRveS/nemZuuS8muekviA+IHNlaW1laWhva2VuZ2Fpc2hhXCA7Civnp4HmnInosqHnlKPliLbluqYgPiBzaGl5dXV6YWlzYW5zZWlkb1wgOwor5LiA5Zu95LiA5YWa5Li7576pID4gaWtrb2t1aXR0b3VzaHVnaVwgOwor5pel5pys6YGT6Lev5YWs5ZujID4gbmlob25kb3Vyb2tvdWRhblwgOwor5a6f6Le155CG5oCn5om55YikID4gamlzc2VucmlzZWloaWhhblwgOwor5aSa6YeN5ZCN5YmN56m66ZaTID4gdGFqdXVuYW1hZWt1dWthblwgOwor5bmz5ZKM57at5oyB5rS75YuVID4gaGVpd2FpamlrYXRzdWRvdVwgOwor5LqM5Y215oCn5Y+M55Sf5YWQID4gbmlyYW5zZWlzb3VzZWlqaVwgOwor5Li76L6e57Sg5oCn6KaP57SEID4gc2h1amlzb3NlaWtpeWFrdVwgOwor5aWz5oCn6Kej5pS+6YGL5YuVID4gam9zZWlrYWlob3V1bmRvdVwgOwor54Kt6YW45ZCM5YyW5L2c55SoID4gdGFuc2FuZG91a2FzYXlvdVwgOwor5LqM5aSn5pS/5YWa5Li7576pID4gbmlkYWlzZWl0b3VzaHVnaVwgOwor5LiN57SU55Ww5oCn5Lqk6YGKID4gZnVqdW4nJ2lzZWlrb3V5dXVcIDsKK+mqqOearueti+WPs+ihm+mWgCA+IGhvbmVrYXdhc3VqaWVtb25cIDsKK+a1hemWk+WxseiNmOS6i+S7tiA+IGFzYW1hc2Fuc291amlrZW5cIDsKK+eSsOWig+S/neitt+S4u+e+qSA+IGthbmt5b3Vob2dvc2h1Z2lcIDsKK+S4lueVjOiyv+aYk+apn+mWoiA+IHNla2FpYm91ZWtpa2lrYW5cIDsKK+eEoeW9ouWbuuWumuizh+eUoyA+IG11a2Vpa290ZWlzaGlzYW5cIDsKK+mfs+WjsOWkmumHjeaUvumAgSA+IG9uc2VpdGFqdXVob3Vzb3VcIDsKK+iEs+aAp+Wwj+WFkOm6u+eXuiA+IG5vdXNlaXNob3VuaW1haGlcIDsKK+Wkp+adseS6nOWFseaghOWcjyA+IGRhaXRvdWFreW91ZWlrZW5cIDsKK+Wwj+WjsueJqeS+oeaMh+aVsCA+IGtvdXJpYnVra2FzaGlzdXVcIDsKK+iHqueUseS4u+e+qee1jOa4iCA+IGppeXV1c2h1Z2lrZWl6YWlcIDsKK+WknOmWk+mgkOmHkeOAheW6qyA+IHlha2FuJyd5b2tpbmtpbmtvXCA7CivpgKPpgqbmupblgpnliLbluqYgPiByZW5wb3VqdW5iaXNlaWRvXCA7CivotoXpgY7li6Tli5nmiYvlvZMgPiBjaG91a2FraW5tdXRlYXRlXCA7Civkuojlgpnlo6vlrpjlrabmoKEgPiB5b2Jpc2hpa2FuZ2Fra291XCA7CivnlLvlg4/lh6bnkIboo4Xnva4gPiBnYXpvdXNob3Jpc291Y2hpXCA7Civlha3ljYHlm5vliIbpn7PnrKYgPiByb2t1anV1c2hpYnVvbnB1XCA7CivmlL7lsITmgKflkIzkvY3kvZMgPiBob3VzaGFzZWlkb3VpdGFpXCA7CivlpJzplpPpoJDph5Hph5HluqsgPiB5YWthbicneW9raW5raW5rb1wgOwor5Lqc54ax5biv6auY5rCX5ZynID4gYW5ldHRhaWtvdWtpYXRzdVwgOwor56OB5rCX5YWx6bO055S75YOPID4gamlraWt5b3VtZWlnYXpvdVwgOwor6bOl542j5L+d6K235Yy65Z+fID4gY2hvdWp1dWhvZ29rdWlraVwgOwor5Zu96Zqb5o+05Yqp5qmf6ZaiID4ga29rdXNhaWVuam9raWthblwgOwor54Sh5pS/5bqc5Li7576p6ICFID4gbXVzZWlmdXNodWdpc2hhXCA7CivkuJbnlYzkv53lgaXmqZ/plqIgPiBzZWthaWhva2Vua2lrYW5cIDsKK+S6jOWNgeWbm+aZgumWk+WItiA+IG5panV1eW9qaWthbnNlaVwgOwor55yL6K235amm6aSK5oiQ5omAID4ga2FuZ29mdXlvdXNlaWpvXCA7CivkuI3lvZPlirTlg43ooYzngrogPiBmdXRvdXJvdWRvdWtvdWlcIDsKK+iLpuaDheWHpueQhuapn+mWoiA+IGt1am91c2hvcmlraWthblwgOwor6KOc5Yqp6KiY5oa26KOF572uID4gaG9qb2tpb2t1c291Y2hpXCA7CivmloflrZflpJrph43mlL7pgIEgPiBtb2ppdGFqdXVob3Vzb3VcIDsKK+WMu+W4q+WbveWutuippumokyA+IGlzaGlrb2trYXNoaWtlblwgOwor6IKi5L2T5LiN6Ieq55Sx5YWQID4gc2hpdGFpZnVqaXl1dWppXCA7Civku67lkI3mvKLlrZflpInmj5sgPiBrYW5ha2FuamloZW5rYW5cIDsKK+WbveWutuWFrOWLmeWToeazlSA+IGtva2tha291bXVpbmhvdVwgOwor5oSP5b+X5rG65a6a5qmf6ZaiID4gaXNoaWtldHRlaWtpa2FuXCA7CivkuLvovp7ntKDmgKfljp/nkIYgPiBzaHVqaXNvc2VpZ2VucmlcIDsKK+W8geitt+Wjq+S6i+WLmeaJgCA+IGJlbmdvc2hpamltdXNob1wgOwor6Ieq55Sx5Li7576p5Zu95a62ID4gaml5dXVzaHVnaWtva2thXCA7CivnlJ/lkb3ntq3mjIHoo4Xnva4gPiBzZWltZWlpamlzb3VjaGlcIDsKK+aWh+Wtl+espuWPt+WMluazlSA+IG1vamlmdWdvdWthaG91XCA7CivljZfnhKHpmL/lvKXpmYDku48gPiBuYW11YW1pZGFidXRzdVwgOwor6Kqe5b2Z5qmf6IO95paH5rOVID4gZ29pa2lub3VidW5wb3VcIDsKK+WAtuaiqOS8vee+hee0i+e0iyA+IGt1cmlrYXJhbW9ubW9uXCA7CivkuInljYHkuozliIbpn7PnrKYgPiBzYW5qdXVuaWJ1b25wdVwgOwor5oiR5Yip5oiR5Yip5Lqh6ICFID4gZ2FyaWdhcmltb3VqYVwgOwor5a6I56eY576p5YuZ6YGV5Y+NID4gc2h1aGlnaW11aWhhblwgOwor5piv5piv6Z2e6Z2e5Li7576pID4gemV6ZWhpaGlzaHVnaVwgOwor54OP6Iq75rKZ5pGp5aaZ546LID4gdXN1c2FtYW15b3VvdVwgOwor5Luj6KGo5Y+W57eg5b25ID4gZGFpaHlvdXRvcmlzaGltYXJpeWFrdVwgOwor5Y+W5omx6Kqs5piO5pu4ID4gdG9yaWF0c3VrYWlzZXRzdW1laXNob1wgOwor5Zu956uL5Y2a54mp6aSoID4ga29rdXJpdHN1aGFrdWJ1dHN1a2FuXCA7Civpm4bkuK3msrvnmYLlrqQgPiBzaHV1Y2h1dWNoaXJ5b3VzaGl0c3VcIDsKK+ebtOi9hOakjeawkeWcsCA+IGNob2trYXRzdXNob2t1bWluY2hpXCA7CivmnKjpgKDlu7rnr4nniakgPiBtb2t1em91a2VuY2hpa3VidXRzdVwgOwor5qSN54mp5oCn6JuL55m9ID4gc2hva3VidXRzdXNlaXRhbnBha3VcIDsKK+S/oeeUqOWPluW8leWFiCA+IHNoaW4nJ3lvdXRvcmloaWtpc2FraVwgOwor5bi45YuZ5Y+W57eg5b25ID4gam91bXV0b3Jpc2hpbWFyaXlha3VcIDsKK+S4g+aYn+WkqemBk+iZqyA+IG5hbmFob3NoaXRlbnRvdW11c2hpXCA7CivmsJHml4/lpKfomZDmrrogPiBtaW56b2t1ZGFpZ3lha3VzYXRzdVwgOwor6LaK5bm055Sf5qSN54mpID4gZXRzdW5lbnNlaXNob2t1YnV0c3VcIDsKK+ani+aIkOe0oOe1seW+oSA+IGtvdXNlaXNva291em91dG91Z3lvXCA7Civnm7TmjqXnm67nmoToqp4gPiBjaG9rdXNldHN1bW9rdXRla2lnb1wgOwor5bCC5YuZ5Y+W57eg5b25ID4gc2VubXV0b3Jpc2hpbWFyaXlha3VcIDsKK+S4gOW5tOeUn+akjeeJqSA+IGljaGluZW5zZWlzaG9rdWJ1dHN1XCA7Civpurvolqzlj5bnt6Dnj60gPiBtYXlha3V0b3Jpc2hpbWFyaWhhblwgOwor6bq76Jas5Y+W57eg5rOVID4gbWF5YWt1dG9yaXNoaW1hcmlob3VcIDsKK+S4reW/g+eahOW9ueWJsiA+IGNodXVzaGludGVraXlha3V3YXJpXCA7Civlj47nuK7mnJ/ooYDlnKcgPiBzaHV1c2h1a3VraWtldHN1YXRzdVwgOwor5Y2Y5a2Q6JGJ5qSN54mpID4gdGFuc2hpeW91c2hva3VidXRzdVwgOwor6YCj56uL5pa556iL5byPID4gcmVucml0c3Vob3V0ZWlzaGlraVwgOwor6YCa5ZWG55Sj5qWt55yBID4gdHN1dXNob3VzYW5neW91c2hvdVwgOwor5Y6f5a2Q5Yqb55m66Zu7ID4gZ2Vuc2hpcnlva3VoYXRzdWRlblwgOwor55u05o6l5rCR5Li75Yi2ID4gY2hva3VzZXRzdW1pbnNodXNlaVwgOwor6YCy5Ye65Yi26ZmQ57eaID4gc2hpbnNodXRzdXNlaWdlbnNlblwgOwor5qCq5byP5Y+W5byV5omAID4ga2FidXNoaWtpdG9yaWhpa2lqb1wgOwor55u05o6l5pWZ5o6I5rOVID4gY2hva3VzZXRzdWt5b3VqdWhvdVwgOwor5Y+M5a2Q6JGJ5qSN54mpID4gc291c2hpeW91c2hva3VidXRzdVwgOwor6Iql5bed6b6N5LmL5LuLID4gYWt1dGFnYXdhcnl1dW5vc3VrZVwgOwor6LK45YCf5a++54Wn6KGoID4gdGFpc2hha3V0YWlzaG91aHlvdVwgOwor5YWs5a6a5Ymy5byV546HID4ga291dGVpd2FyaWJpa2lyaXRzdVwgOwor5by36L+r56We57WM55eHID4ga3lvdWhha3VzaGlua2Vpc2hvdVwgOwor5ZWG5qWt5L+h55So54q2ID4gc2hvdWd5b3VzaGluJyd5b3Vqb3VcIDsKK+i8uOWHuuS/oeeUqOeKtiA+IHl1c2h1dHN1c2hpbicneW91am91XCA7Civml6fmlrDntITlhajmm7ggPiBreXV1c2hpbicneWFrdXplbnNob1wgOwor5Ye65YWl5Zu9566h55CGID4gc2h1dHN1bnl1dWtva3VrYW5yaVwgOwor6Zqc5a6z54mp56u26LWwID4gc2hvdWdhaWJ1dHN1a3lvdXNvdVwgOwor5pi85YWJ6Imy6Zu755CDID4gY2h1dWtvdXNob2t1ZGVua3l1dVwgOwor5aSp54S26Imy5YaZ55yfID4gdGVuJyduZW5zaG9rdXNoYXNoaW5cIDsKK+awtOWKm+eZuumbu+aJgCA+IHN1aXJ5b2t1aGF0c3VkZW5zaG9cIDsKK+e0oOWHuuWKm+adoeS7tiA+IHNvc2h1dHN1cnlva3Vqb3VrZW5cIDsKK+Wbveawkee3j+aUr+WHuiA+IGtva3VtaW5zb3VzaGlzaHV0c3VcIDsKK+akjeeJqeaAp+iEguiCqiA+IHNob2t1YnV0c3VzZWlzaGlib3VcIDsKK+aXp+aWsOe0hOiBluabuCA+IGt5dXVzaGluJyd5YWt1c2Vpc2hvXCA7CivplbfmnJ/osrjku5jph5EgPiBjaG91a2lrYXNoaXRzdWtla2luXCA7CivnlJ/nianniannkIblraYgPiBzZWlidXRzdWJ1dHN1cmlnYWt1XCA7CivlubPlrrbnianoqp7mioQgPiBoZWlrZW1vbm9nYXRhcmlzaG91XCA7CivoprPlr5/nmoTnoJTnqbYgPiBrYW5zYXRzdXRla2lrZW5reXV1XCA7Civos4PosrjlgJ/lpZHntIQgPiBjaGludGFpc2hha3VrZWl5YWt1XCA7CivlvrPlt53lhazniLXpgrggPiB0b2t1Z2F3YWtvdXNoYWt1dGVpXCA7Civnsr7npZ7liIboo4Lnl4cgPiBzZWlzaGluYnVucmV0c3VzaG91XCA7CivlpKrpmb3nhrHnmbrpm7sgPiB0YWl5b3VuZXRzdWhhdHN1ZGVuXCA7CivmtbflpJbnlZnlrabnhrEgPiBrYWlnYWlyeXV1Z2FrdW5ldHN1XCA7CivlporlqKDkuK3mr5Lnl4cgPiBuaW5zaGluY2h1dWRva3VzaG91XCA7Civni6znq4vmjqHnrpfliLYgPiBkb2t1cml0c3VzYWlzYW5zZWlcIDsKK+W4guWgtOWNoOacieeOhyA+IHNoaWpvdXNlbicneXV1cml0c3VcIDsKK+imluiBtOimmuaVmeadkCA+IHNoaWNob3VrYWt1a3lvdXphaVwgOwor5YaF6Zaj5rOV5Yi25bGAID4gbmFpa2FrdWhvdXNlaWt5b2t1XCA7CivkuK3lsI/kvIHmpa3luoEgPiBjaHV1c2hvdWtpZ3lvdWNob3VcIDsKK+abuOewoeS9k+Wwj+iqrCA+IHNob2thbnRhaXNob3VzZXRzdVwgOwor56S+5Lya55Sf54mp5a2mID4gc2hha2Fpc2VpYnV0c3VnYWt1XCA7Civou43pmorooYzpgLLmm7IgPiBndW50YWlrb3VzaGlua3lva3VcIDsKK+iRrOmAgeihjOmAsuabsiA+IHNvdXNvdWtvdXNoaW5reW9rdVwgOwor54mp55CG55qE54++6LGhID4gYnV0c3VyaXRla2lnZW5zaG91XCA7Civlv4Poh5PlvIHohpznl4cgPiBzaGluem91YmVubWFrdXNob3VcIDsKK+iGneiTi+iFseWPjeWwhCA+IHNoaXRzdWdhaWtlbmhhbnNoYVwgOwor5L+457Wm55Sf5rS76ICFID4gaG91a3l1dXNlaWthdHN1c2hhXCA7CivnlJ/nianmg4XloLHlraYgPiBzZWlidXRzdWpvdWhvdWdha3VcIDsKK+WkmuW5tOeUn+akjeeJqSA+IHRhbmVuc2Vpc2hva3VidXRzdVwgOwor6YeP5a2Q54mp55CG5a2mID4gcnlvdXNoaWJ1dHN1cmlnYWt1XCA7CivljJfnsbPlkIjooYblm70gPiBob2t1YmVpZ2Fzc2h1dWtva3VcIDsKK+adpeWuouiKs+WQjemMsiA+IHJhaWt5YWt1aG91bWVpcm9rdVwgOwor5Zyw5pa55qSc5a+f5bqBID4gY2hpaG91a2Vuc2F0c3VjaG91XCA7CivlsILploDnmoTnn6XorZggPiBzZW5tb250ZWtpY2hpc2hpa2lcIDsKK+e1kOWpmuihjOmAsuabsiA+IGtla2tvbmtvdXNoaW5reW9rdVwgOwor5qCq5byP6YWN5b2T6YeRID4ga2FidXNoaWtpaGFpdG91a2luXCA7CivnibnliKXphY3lvZPph5EgPiB0b2t1YmV0c3VoYWl0b3VraW5cIDsKK+e1jOa4iOaIkOmVt+eOhyA+IGtlaXphaXNlaWNob3VyaXRzdVwgOwor55Sj5qWt5Yil57WE5ZCIID4gc2FuZ3lvdWJldHN1a3VtaWFpXCA7CivlhKrnrYnljZLmpa3nlJ8gPiB5dXV0b3Vzb3RzdWd5b3VzZWlcIDsKK+WFpeWbveeuoeeQhuWxgCA+IG55dXVrb2t1a2FucmlreW9rdVwgOwor6ZaT5o6l5pKu5b2x5rOVID4ga2Fuc2V0c3VzYXRzdWVpaG91XCA7Civlrp/nianlpKfmqKHlnosgPiBqaXRzdWJ1dHN1ZGFpbW9rZWlcIDsKK+i7jeS6i+eahOS+teeVpSA+IGd1bmppdGVraXNoaW5yeWFrdVwgOwor56mN5YiG5pa556iL5byPID4gc2VraWJ1bmhvdXRlaXNoaWtpXCA7CivnqY3nrpfpm7vlipvoqIggPiBzZWtpc2FuZGVucnlva3VrZWlcIDsKK+S6jOW5tOeUn+akjeeJqSA+IG5pbmVuc2Vpc2hva3VidXRzdVwgOwor5Y2D5Lmd55m+5bm05LujID4gc2Vua3l1dWh5YWt1bmVuZGFpXCA7Civnp5HlrabljZrnianppKggPiBrYWdha3VoYWt1YnV0c3VrYW5cIDsKK+S4reWbveWFseeUo+WFmiA+IGNodXVnb2t1a3lvdXNhbnRvdVwgOwor6auY5YiG5a2Q54mp6LOqID4ga291YnVuc2hpYnVzc2hpdHN1XCA7CivnmbrpgZTlv4PnkIblraYgPiBoYXR0YXRzdXNoaW5yaWdha3VcIDsKK+eyvuelnuiWhOW8seiAhSA+IHNlaXNoaW5oYWt1amFrdXNoYVwgOwor54m55Yil6KGM5pS/5Yy6ID4gdG9rdWJldHN1Z3lvdXNlaWt1XCA7CivkuInoibLljbDliLfms5UgPiBzYW5zaG9rdWluc2F0c3Vob3VcIDsKK+aOkuWNteiqmOeZuuWJpCA+IGhhaXJhbicneXV1aGF0c3V6YWlcIDsKK+eUn+a0u+W/hemcgOWTgSA+IHNlaWthdHN1aGl0c3VqdWhpblwgOwor5bCR5bm06ZGR5Yil5omAID4gc2hvdW5lbmthbmJldHN1c2hvXCA7CivluqfpqqjnpZ7ntYznl5sgPiB6YWtvdHN1c2hpbmtlaXRzdXVcIDsKK+akjeawkeWcsOaUv+etliA+IHNob2t1bWluY2hpc2Vpc2FrdVwgOwor6Ki85Yi45Y+W5byV5rOVID4gc2hvdWtlbnRvcmloaWtpaG91XCA7CivllYblk4Hlm57ou6LnjocgPiBzaG91aGlua2FpdGVucml0c3VcIDsKK+evgOi2s+WLleeJqemWgCA+IHNlc3Nva3Vkb3VidXRzdW1vblwgOwor6KiI566X55Sf54mp5a2mID4ga2Vpc2Fuc2VpYnV0c3VnYWt1XCA7CivlsLHogbfmg4XloLHoqowgPiBzaHV1c2hva3Vqb3Vob3VzaGlcIDsKK+W7uuioreeahOmWouS/giA+IGtlbnNldHN1dGVraWthbmtlaVwgOwor5a6i5a6k5LmX5YuZ5ZOhID4ga3lha3VzaGl0c3Vqb3VtdWluXCA7CivmlK/mjIHlipvlrprlvI8gPiBzaGlqaXJ5b2t1dGVpc2hpa2lcIDsKK+WLleeJqeihjOWLleWtpiA+IGRvdWJ1dHN1a291ZG91Z2FrdVwgOwor6IG36IO95Luj6KGo5Yi2ID4gc2hva3Vub3VkYWloeW91c2VpXCA7CivmnIDpq5jmpJzlr5/luoEgPiBzYWlrb3VrZW5zYXRzdWNob3VcIDsKK+W/g+elnuiAl+W8seiAhSA+IHNoaW5zaGlubW91amFrdXNoYVwgOwor54Sh6ISK5qSO5YuV54mpID4gbXVzZWtpdHN1aWRvdWJ1dHN1XCA7CivlrrblroXkvrXlhaXnvaogPiBrYXRha3VzaGluJydueXV1emFpXCA7CivliIblrZDnlJ/nianlraYgPiBidW5zaGlzZWlidXRzdWdha3VcIDsKK+WkqeS9k+WGmeecn+ihkyA+IHRlbnRhaXNoYXNoaW5qdXRzdVwgOwor56eY5a+G5ryP5rSp572qID4gaGltaXRzdXJvdXNldHN1emFpXCA7CivplpPmjqXnm67nmoToqp4gPiBrYW5zZXRzdW1va3V0ZWtpZ29cIDsKK+eymOa2suWIhuazjOiFuiA+IG5lbicnZWtpYnVucGl0c3VzZW5cIDsKK+eerOmWk+aOpeedgOWJpCA+IHNodW5rYW5zZXRjaGFrdXphaVwgOwor5Lq65Y+j5a+G6ZuG546HID4gamlua291bWlzc2h1dXJpdHN1XCA7Civljp/oibLlhpnnnJ/niYggPiBnZW5zaG9rdXNoYXNoaW5iYW5cIDsKK+mHj+WtkOiJsuWKm+WtpiA+IHJ5b3VzaGlpcm9yaWtpZ2FrdVwgOwor5Zyo5pel57Gz6Zm46LuNID4gemFpbmljaGliZWlyaWt1Z3VuXCA7Civpo5/lk4Hmt7vliqDniakgPiBzaG9rdWhpbnRlbmthYnV0c3VcIDsKK+WLleeJqeaAp+ibi+eZvSA+IGRvdWJ1dHN1c2VpdGFucGFrdVwgOwor54m55a6a6YO15L6/5bGAID4gdG9rdXRlaXl1dWJpbmt5b2t1XCA7Civngavlipvnmbrpm7vmiYAgPiBrYXJ5b2t1aGF0c3VkZW5zaG9cIDsKK+WkmuinkuW8j+i+sualrSA+IHRha2FrdXNoaWtpbm91Z3lvdVwgOwor5rC45LiW5Lit56uL5Zu9ID4gZWlzZWljaHV1cml0c3Vrb2t1XCA7CivllK/nianlvIHoqLzms5UgPiB5dWlidXRzdWJlbnNob3Vob3VcIDsKK+WPsueahOWUr+eJqeirliA+IHNoaXRla2l5dWlidXRzdXJvblwgOwor5a6j6KqT5L6b6L+w5pu4ID4gc2Vuc2Vpa3lvdWp1dHN1c2hvXCA7CivnhrHohqjlvLXkv4LmlbAgPiBuZXRzdWJvdWNob3VrZWlzdXVcIDsKK+akjeeJqeaAp+e5iue2rSA+IHNob2t1YnV0c3VzZWlzZW4nJ2lcIDsKK+mBjuWkseWCt+Wus+e9qiA+IGthc2hpdHN1c2hvdWdhaXphaVwgOwor5YWx5ZCM5Ym16Kit6ICFID4ga3lvdWRvdXNvdXNldHN1c2hhXCA7CivkuIrntJrlia/npL7plbcgPiBqb3VreXV1ZnVrdXNoYWNob3VcIDsKK+aIpueVpeeahOaPkOaQuiA+IHNlbnJ5YWt1dGVraXRlaWtlaVwgOwor55Kw5aKD5bqB6ZW35a6YID4ga2Fua3lvdWNob3VjaG91a2FuXCA7CivlnKflipvoqr/mlbTlmaggPiBhdHN1cnlva3VjaG91c2Vpa2lcIDsKK+eUn+murumjn+aWmeWTgSA+IHNlaXNlbnNob2t1cnlvdWhpblwgOwor5pS+5bCE5oCn54mp6LOqID4gaG91c2hhc2VpYnVzc2hpdHN1XCA7CivlnLDnkIPniannkIblraYgPiBjaGlreXV1YnV0c3VyaWdha3VcIDsKK+WPjeWul+aVmeaUuemdqSA+IGhhbnNodXVreW91a2Fpa2FrdVwgOwor5a2m6K2Y57WM6aiT6ICFID4gZ2FrdXNoaWtpa2Vpa2Vuc2hhXCA7CivotaTpnaLmgZDmgJbnl4cgPiBzZWtpbWVua3lvdWZ1c2hvdVwgOwor6aOf5ZOB6KGb55Sf5rOVID4gc2hva3VoaW4nJ2Vpc2VpaG91XCA7CivmlZnogbflk6HntYTlkIggPiBreW91c2hva3Vpbmt1bWlhaVwgOwor5q+b5rKi5p2x5Li75bitID4gbW91dGFrdXRvdXNodXNla2lcIDsKK+WIpemAlOepjeeri+mHkSA+IGJldHRvdHN1bWl0YXRla2luXCA7Civov5Tkv6HmlpnokYnmm7ggPiBoZW5zaGlucnlvdWhhZ2FraVwgOwor6Ku46LuK6YCa6KGM5q2iID4gc2hvc2hhdHN1dWtvdWRvbWVcIDsKK+WbveWcn+W6gemVt+WumCA+IGtva3Vkb2Nob3VjaG91a2FuXCA7Civli6flloTmh7LmgqrliocgPiBrYW56ZW5jaG91YWt1Z2VraVwgOwor5Yy75a2m55Sf54mp5a2mID4gaWdha3VzZWlidXRzdWdha3VcIDsKK+mdnuaomea6luaLoeW8tSA+IGhpaHlvdWp1bmtha3VjaG91XCA7CivlpKrpmb3lhYnnmbrpm7sgPiB0YWl5b3Vrb3VoYXRzdWRlblwgOwor6L+U5L+h55So6JGJ5pu4ID4gaGVuc2hpbicneW91aGFnYWtpXCA7CivnnJ/nj6DppIrmrpbloLQgPiBzaGluanV5b3VzaG9rdWpvdVwgOwor6IKL6ZaT56We57WM55ebID4gcm9ra2Fuc2hpbmtlaXRzdXVcIDsKK+a1t+a0i+eJqeeQhuWtpiA+IGthaXlvdWJ1dHN1cmlnYWt1XCA7Civnsr7npZ7nmoToi6bnl5sgPiBzZWlzaGludGVraWt1dHN1dVwgOwor5Lqk5rWB55m66Zu75qmfID4ga291cnl1dWhhdHN1ZGVua2lcIDsKK+eLqeeMn+aOoembhuawkSA+IHNodXJ5b3VzYWlzaHV1bWluXCA7CivmiKbpl5jmraPpnaLluYUgPiBzZW50b3VzaG91bWVuaGFiYVwgOwor5LiN5L+h5Lu75oqV56WoID4gZnVzaGluJyduaW50b3VoeW91XCA7CivpgIHph5Hlj5flj5bkurogPiBzb3VraW4nJ3VrZXRvcmluaW5cIDsKK++8pO+8su+8s+eQhuirliA+IGRpXCDMhGFcIMyEcnVlc3VyaXJvblwgOwor6aOf57On566h55CG5rOVID4gc2hva3VyeW91a2Fucmlob3VcIDsKK+ebsuiFuOeCjuaJi+ihkyA+IG1vdWNob3VlbnNodWp1dHN1XCA7CivnrKzkuIDntJrmrrrkurogPiBkYWlpa2t5dXVzYXRzdWppblwgOwor5oim55Wl5qC45YW15ZmoID4gc2Vucnlha3VrYWt1aGVpa2lcIDsKK+WHjee1kOmYsuatouWJpCA+IHRvdWtldHN1Ym91c2hpemFpXCA7CivkuK3plpPphY3lvZPpoY0gPiBjaHV1a2FuaGFpdG91Z2FrdVwgOwor6auY6YCf5aKX5q6W54KJID4ga291c29rdXpvdXNob2t1cm9cIDsKK+i/lOS/oeaWmeWwgeetkiA+IGhlbnNoaW5yeW91ZnV1dG91XCA7CivooZvmmJ/lnLDnkIPlsYAgPiBlaXNlaWNoaWt5dXVreW9rdVwgOwor5Zyo55WZ5aSW5Zu95Lq6ID4gemFpcnl1dWdhaWtva3VqaW5cIDsKK+eUo+alreW7g+ajhOeJqSA+IHNhbmd5b3VoYWlraWJ1dHN1XCA7CivlpKnnhLboqJjlv7XniakgPiB0ZW4nJ25lbmtpbmVuYnV0c3VcIDsKK+WHuueUn+iovOaYjuabuCA+IHNodXNzZWlzaG91bWVpc2hvXCA7CivkuIrntJrnrqHnkIbogbcgPiBqb3VreXV1a2FucmlzaG9rdVwgOwor56iO6Zai55Sz5ZGK5pu4ID4gemVpa2Fuc2hpbmtva3VzaG9cIDsKK+i/lOS/oeeUqOWwgeetkiA+IGhlbnNoaW4nJ3lvdWZ1dXRvdVwgOwor54ax54uC55qE5L+h6ICFID4gbmVra3lvdXRla2lzaGluamFcIDsKK+S8gealremWk+S/oeeUqCA+IGtpZ3lvdWthbnNoaW4nJ3lvdVwgOwor6ZaL5ouT6ICF57K+56WeID4ga2FpdGFrdXNoYXNlaXNoaW5cIDsKK+a3seWcqOaAp+ecn+iPjCA+IHNoaW56YWlzZWlzaGlua2luXCA7CivmnZHokL3lhbHlkIzkvZMgPiBzb25yYWt1a3lvdWRvdXRhaVwgOwor5LiK6Zm455So6Iif6ImHID4gam91cmlrdXlvdXNodXV0ZWlcIDsKK+WPpOeUn+eJqeWtpuiAhSA+IGtvc2VpYnV0c3VnYWt1c2hhXCA7CivplovnmbrpgJTkuIrlm70gPiBrYWloYXRzdXRvam91a29rdVwgOwor6KGA5Zyn6ZmN5LiL5YmkID4ga2V0c3VhdHN1a291a2F6YWlcIDsKK+eEoeW3ruWIpeeIhuaSgyA+IG11c2FiZXRzdWJha3VnZWtpXCA7CivlubPlkoznmoTop6PmsbogPiBoZWl3YXRla2lrYWlzZXRzdVwgOwor6aOf5ZOB5Yqg5bel5qWtID4gc2hva3VoaW5rYWtvdWd5b3VcIDsKK+mrmOe0muS9j+WuheWcsCA+IGtvdWt5dXVqdXV0YWt1Y2hpXCA7CivpgY7lpLHoh7TmrbvnvaogPiBrYXNoaXRzdWNoaXNoaXphaVwgOwor6auY6aGN5omA5b6X6ICFID4ga291Z2FrdXNob3Rva3VzaGFcIDsKK+WNgeS4gOmdouims+mfsyA+IGp1dWljaGltZW5rYW4nJ25vblwgOwor5pyI57WM5Zuw6Zuj55eHID4gZ2Vra2Vpa29uJyduYW5zaG91XCA7Civlm73pmpvopovmnKzluIIgPiBrb2t1c2FpbWlob24nJ2ljaGlcIDsKK+e3keWcsOWMluioiOeUuyA+IHJ5b2t1Y2hpa2FrZWlrYWt1XCA7CivkuK3mnqLnpZ7ntYzns7sgPiBjaHV1c3V1c2hpbmtlaWtlaVwgOwor5a6f6aiT55qE56CU56m2ID4gamlra2VudGVraWtlbmt5dXVcIDsKK+WwgueUqOmnkOi7iuWgtCA+IHNlbicneW91Y2h1dXNoYWpvdVwgOwor54Sh6YGO5aSx6LKs5Lu7ID4gbXVrYXNoaXRzdXNla2luaW5cIDsKK+S4gOasoeaWueeoi+W8jyA+IGljaGlqaWhvdXRlaXNoaWtpXCA7CivlsLHmpa3mmYLplpPkuK0gPiBzaHV1Z3lvdWppa2FuY2h1dVwgOwor5Zu95rCR5LyR5pqH5p2RID4ga29rdW1pbmt5dXVrYW11cmFcIDsKK+WtkOWuruWkluWmiuWooCA+IHNoaWt5dXVnYWluaW5zaGluXCA7CivnhKHmi4Xkv53osrjku5ggPiBtdXRhbnBva2FzaGl0c3VrZVwgOwor5LiA57KS5a2Q5pei57SEID4gaWNoaXJ5dXVzaGlraXlha3VcIDsKK+S8gealreWIpee1hOWQiCA+IGtpZ3lvdWJldHN1a3VtaWFpXCA7CivkuI3ms5XkvrXlhaXogIUgPiBmdWhvdXNoaW4nJ255dXVzaGFcIDsKK+WPjuepq+aEn+isneelrSA+IHNodXVrYWt1a2Fuc2hhc2FpXCA7CivmjIflkJHmgKfniIbolqwgPiBzaGlrb3VzZWliYWt1eWFrdVwgOwor5b+D5Zug5oCn5Y+N5b+cID4gc2hpbicnaW5zZWloYW4nJ25vdVwgOwor5Lqc54ax5biv5qSN54mpID4gYW5ldHRhaXNob2t1YnV0c3VcIDsKK+WGhemWo+e3j+i+nuiBtyA+IG5haWtha3Vzb3VqaXNob2t1XCA7CivoqLzliLjlj5blvJXmiYAgPiBzaG91a2VudG9yaWhpa2lqb1wgOwor5bGI5oqY5pyb6YGg6Y+hID4ga3Vzc2V0c3Vib3Vlbmt5b3VcIDsKK+atr+eJmeefr+ato+ihkyA+IHNoaWdha3lvdXNlaWp1dHN1XCA7CivljZjntLDog57nlJ/niakgPiB0YW5zYWlib3VzZWlidXRzdVwgOwor5pel5pys6Jas5bGA5pa5ID4gbmlob24nJ3lha2t5b2t1aG91XCA7Civmt7HlsaTlv4PnkIblraYgPiBzaGluc291c2hpbnJpZ2FrdVwgOwor57K+56We6JaE5byx5YWQID4gc2Vpc2hpbmhha3VqYWt1amlcIDsKK+WMluWtpuaWueeoi+W8jyA+IGthZ2FrdWhvdXRlaXNoaWtpXCA7CivmgKXpmY3kuIvniIbmkoMgPiBreXV1a291a2FiYWt1Z2VraVwgOwor5rC05LiK55Sf5rS76ICFID4gc3Vpam91c2Vpa2F0c3VzaGFcIDsKK+WcqOWtpuiovOaYjuabuCA+IHphaWdha3VzaG91bWVpc2hvXCA7CivmpI3msJHlnLDntbHmsrsgPiBzaG9rdW1pbmNoaXRvdWNoaVwgOwor6Zai5pWw5pa556iL5byPID4ga2Fuc3V1aG91dGVpc2hpa2lcIDsKK+aOqOmAsueglOeptuaJgCA+IHN1aXNoaW5rZW5reXV1c2hvXCA7CivmiKbooZPmoLjlhbXlmaggPiBzZW5qdXRzdWtha3VoZWlraVwgOwor55m65bGV55qE6Kej5raIID4gaGF0dGVudGVraWthaXNob3VcIDsKK+Wbveeri+Wbs+abuOmkqCA+IGtva3VyaXRzdXRvc2hva2FuXCA7CivkuInooYzluoPlkYrmrIQgPiBzYW5neW91a291a29rdXJhblwgOwor5Yun5qWt5Y2a6Kan5LyaID4ga2FuZ3lvdWhha3VyYW5rYWlcIDsKK+WIhuaekOW/g+eQhuWtpiA+IGJ1bnNla2lzaGlucmlnYWt1XCA7CivmlZnogrLlv4PnkIblraYgPiBreW91aWt1c2hpbnJpZ2FrdVwgOwor5qWt5YuZ5LiK6YGO5aSxID4gZ3lvdW11am91a2FzaGl0c3VcIDsKK+aIkOe4vuiovOaYjuabuCA+IHNlaXNla2lzaG91bWVpc2hvXCA7CivlhaXlrablv5fpoZjogIUgPiBueXV1Z2FrdXNoaWdhbnNoYVwgOwor5Lit5aSu5pS+6YCB5bGAID4gY2h1dW91aG91c291a3lva3VcIDsKK+WFseWQjOebuOe2muS6uiA+IGt5b3Vkb3Vzb3V6b2t1bmluXCA7CivnoJTnqbbnmbrooajkvJogPiBrZW5reXV1aGFwcHlvdWthaVwgOwor5aSp5L2T5YiG5YWJ6KGTID4gdGVudGFpYnVua291anV0c3VcIDsKK+eQg+mdouS4ieinkuazlSA+IGt5dXVtZW5zYW5rYWt1aG91XCA7CivoqIjph4/ntYzmuIjlraYgPiBrZWlyeW91a2VpemFpZ2FrdVwgOwor6JGX5L2c5qip5L615a6zID4gY2hvc2FrdWtlbnNoaW5nYWlcIDsKK+eJueWIpeW8geitt+S6uiA+IHRva3ViZXRzdWJlbmdvbmluXCA7Civlr4zlm73lvLflhbXnrZYgPiBmdWtva3VreW91aGVpc2FrdVwgOwor5LqI5oOz5Y+O56mr6auYID4geW9zb3VzaHV1a2FrdWRha2FcIDsKK+ihgOWPi+eXheaCo+iAhSA+IGtldHN1eXV1YnlvdWthbmphXCA7Civnm7Top5LkuInop5LlvaIgPiBjaG9ra2FrdXNhbmtha2tlaVwgOwor6ZeH5L6h5qC85Y2U5a6aID4geWFtaWtha2FrdWt5b3V0ZWlcIDsKK+i1pOWklue3muWGmeecnyA+IHNla2lnYWlzZW5zaGFzaGluXCA7CivlpKnnmofmqZ/plqLoqqwgPiB0ZW4nJ25vdWtpa2Fuc2V0c3VcIDsKK+WFrOiovOS6uuW9ueWgtCA+IGtvdXNob3VuaW4nJ3lha3ViYVwgOwor6LaF54++5a6f5Li7576pID4gY2hvdWdlbmppdHN1c2h1Z2lcIDsKK+S6jOalteecn+epuueuoSA+IG5pa3lva3VzaGlua3V1a2FuXCA7CivpmKrnpZ7lpKfpnIfngb0gPiBoYW5zaGluZGFpc2hpbnNhaVwgOwor5rOV5a6a5b6X56Wo5pWwID4gaG91dGVpdG9rdWh5b3VzdXVcIDsKK+ioreeri+i2o+aEj+abuCA+IHNldHN1cml0c3VzaHVpc2hvXCA7CivlpJblm73kurrnmbvpjLIgPiBnYWlrb2t1amludG91cm9rdVwgOwor6Lqr5L2T6Zqc5a6z6ICFID4gc2hpbnRhaXNob3VnYWlzaGFcIDsKK+a2iOiyu+iAheS/oeeUqCA+IHNob3VoaXNoYXNoaW4nJ3lvdVwgOwor6YiN6KeS5LiJ6KeS5b2iID4gZG9ua2FrdXNhbmtha3VrZWlcIDsKK+a1t+mbo+WvqeWIpOW6gSA+IGthaW5hbnNoaW5wYW5jaG91XCA7Civniq/nvarnmbrnlJ/njocgPiBoYW56YWloYXNzZWlyaXRzdVwgOwor5b6u55Sf54mp5a2m6ICFID4gYmlzZWlidXRzdWdha3VzaGFcIDsKK+S4g+iJsuWUkOi+m+WtkCA+IG5hbmFpcm90b3VnYXJhc2hpXCA7CivlhazogbfpgbjmjJnms5UgPiBrb3VzaG9rdXNlbmt5b2hvdVwgOwor5a6a5b2i6YO15L6/54mpID4gdGVpa2VpeXV1YmluYnV0c3VcIDsKK+WvvuS4reWbvemWouS/giA+IHRhaWNodXVnb2t1a2Fua2VpXCA7Civnp5HlrabmioDooZPluoEgPiBrYWdha3VnaWp1dHN1Y2hvdVwgOwor5aSn6Iux5Y2a54mp6aSoID4gZGFpZWloYWt1YnV0c3VrYW5cIDsKK+WLleiEiOehrOWMlueXhyA+IGRvdW15YWt1a291a2FzaG91XCA7CivluJ3njovnpZ7mqKnoqqwgPiB0ZWlvdXNoaW5rZW5zZXRzdVwgOwor5a6H5a6Z5aSn54iG55m6ID4gdWNodXVkYWliYWt1aGF0c3VcIDsKK+mmluebuOWFvOWkluebuCA+IHNodXNob3VrZW5nYWlzaG91XCA7CivnlJ/nianlnLDnkIblraYgPiBzZWlidXRzdWNoaXJpZ2FrdVwgOwor5Y6f5a2Q54mp55CG5a2mID4gZ2Vuc2hpYnV0c3VyaWdha3VcIDsKK+eVpeWPluiqmOaLkOe9qiA+IHJ5YWt1c2h1eXV1a2FpemFpXCA7CivlpKnkvZPniannkIblraYgPiB0ZW50YWlidXRzdXJpZ2FrdVwgOwor6ZmN5Zyn5aSJ5Zyn5ZmoID4ga291YXRzdWhlbicnYXRzdWtpXCA7CivmnbHljbDluqbkvJrnpL4gPiBoaWdhc2hpaW5kb2dhaXNoYVwgOwor54mp6LOq5Li7576p6ICFID4gYnVzc2hpdHN1c2h1Z2lzaGFcIDsKK+Wbvemam+eahOiyv+aYkyA+IGtva3VzYWl0ZWtpYm91ZWtpXCA7CivkuK3mgKflrZDniIblvL4gPiBjaHV1c2Vpc2hpYmFrdWRhblwgOwor5Luj5pWw5pa556iL5byPID4gZGFpc3V1aG91dGVpc2hpa2lcIDsKK+W5s+Wdh+WkqumZveaXpSA+IGhlaWtpbnRhaXlvdWppdHN1XCA7CivkubPlhZDmrbvkuqHnjocgPiBueXV1amlzaGlib3VyaXRzdVwgOwor5LiH5Zu95Y2a6Kan5LyaID4gYmFua29rdWhha3VyYW5rYWlcIDsKK+mYsuihm+aWveioreW6gSA+IGJvdWVpc2hpc2V0c3VjaG91XCA7CivmnInmlpnpp5Dou4rloLQgPiB5dXVyeW91Y2h1dXNoYWpvdVwgOwor6Ieo5bqK5b+D55CG5a2mID4gcmluc2hvdXNoaW5yaWdha3VcIDsKK+WGmeecn+mAseWIiuiqjCA+IHNoYXNoaW5zaHV1a2Fuc2hpXCA7Civlt6jnn7PoqJjlv7XniakgPiBreW9zZWtpa2luZW5idXRzdVwgOwor5LqM5YWD5pa556iL5byPID4gbmlnZW5ob3V0ZWlzaGlraVwgOwor6YGT576p55qE6LKs5Lu7ID4gZG91Z2l0ZWtpc2VraW5pblwgOwor542F5a2Q5ZSQ6L6b5a2QID4gc2hpc2hpdG91Z2FyYXNoaVwgOwor5rCX6LGh6Kaz5ris6Ii5ID4ga2lzaG91a2Fuc29rdXNlblwgOwor5Lq654y/5ZCM56WW6KqsID4gamluJydlbmRvdXNvc2V0c3VcIDsKK+Wbo+S9k+S6pOa4ieaoqSA+IGRhbnRhaWtvdXNob3VrZW5cIDsKK+WvvuS6uuaBkOaAlueXhyA+IHRhaWppbmt5b3VmdXNob3VcIDsKK+iEs+iEiumrhOiGnOeCjiA+IG5vdXNla2l6dWltYWt1ZW5cIDsKK+imgeazqOaEj+S6uueJqSA+IHlvdWNodXVpamluYnV0c3VcIDsKK+WtpuagoeaVmeiCsuazlSA+IGdha2tvdWt5b3Vpa3Vob3VcIDsKK+eOi+aoqeelnuaOiOiqrCA+IG91a2Vuc2hpbmp1c2V0c3VcIDsKK+ecn+mDqOWIhumbhuWQiCA+IHNoaW5idWJ1bnNodXVnb3VcIDsKK+eLrOWNoOemgeatouazlSA+IGRva3VzZW5raW5zaGlob3VcIDsKK+WxhemWk+WFvOWvneWupCA+IGltYWtlbnNoaW5zaGl0c3VcIDsKK+WFrOensOizh+acrOmHkSA+IGtvdXNob3VzaGlob25raW5cIDsKK+mbu+WLleeZuuWLleapnyA+IGRlbmRvdWhhdHN1ZG91a2lcIDsKK+W/nOeUqOeJqeeQhuWtpiA+IG91eW91YnV0c3VyaWdha3VcIDsKK+S4ieWNgeWFq+W6pue3miA+IHNhbmp1dWhhY2hpZG9zZW5cIDsKK+iqjeefpeW/g+eQhuWtpiA+IG5pbmNoaXNoaW5yaWdha3VcIDsKK+W3pealreaJgOacieaoqSA+IGtvdWd5b3VzaG95dXVrZW5cIDsKK+WkmuWkiemHj+ino+aekCA+IHRhaGVucnlvdWthaXNla2lcIDsKK+a4hea2vOmjsuaWmeawtCA+IHNlaXJ5b3VpbnJ5b3VzdWlcIDsKK+mHkeWIqeeUn+a0u+iAhSA+IGtpbnJpc2Vpa2F0c3VzaGFcIDsKK+mBuuiogOWft+ihjOiAhSA+IHl1aWdvbnNoaWtrb3VzaGFcIDsKK+iyv+aYk+WkluWPjuaUryA+IGJvdWVraWdhaXNodXVzaGlcIDsKK+afk+iJsuS9k+WcsOWbsyA+IHNlbnNob2t1dGFpY2hpenVcIDsKK+S4u+W4reeglOeptuWToSA+IHNodXNla2lrZW5reXV1aW5cIDsKK+mrmOmAn+W6puWGmeecnyA+IGtvdXNva3Vkb3NoYXNoaW5cIDsKK+mrmOasoeaWueeoi+W8jyA+IGtvdWppaG91dGVpc2hpa2lcIDsKK+W+ruWIhuaWueeoi+W8jyA+IGJpYnVuaG91dGVpc2hpa2lcIDsKK+mDteS+v+engeabuOeusSA+IHl1dWJpbnNoaXNob2Jha29cIDsKK+aWnOagvOaAp+e1seW+oSA+IHNoYWtha3VzZWl0b3VneW9cIDsKK+e1jOWPo+mBv+WmiuiWrCA+IGtlaWtvdWhpbmluJyd5YWt1XCA7CivkurrmnZDplovnmbrpg6ggPiBqaW56YWlrYWloYXRzdWJ1XCA7CivkuIflm73mqJnmupbmmYIgPiBiYW5rb2t1aHlvdWp1bmppXCA7CivpmLLooZvluoHplbflrpggPiBib3VlaWNob3VjaG91a2FuXCA7CivlkKvmsLTljJblkIjniakgPiBnYW5zdWlrYWdvdWJ1dHN1XCA7CivplqLmnbHlpKfpnIfngb0gPiBrYW50b3VkYWlzaGluc2FpXCA7Civoo4XnlLLlm57lj47ou4ogPiBzb3Vrb3VrYWlzaHV1c2hhXCA7CivlnLDmlrnooYzosqHmlL8gPiBjaGlob3VneW91emFpc2VpXCA7CivmgKfooajnj77mg4XloLEgPiBzZWloeW91Z2Vuam91aG91XCA7CivluIzmnJvnmoToprPmuKwgPiBraWJvdXRla2lrYW5zb2t1XCA7Civlj43lsITmuJvoobDph48gPiBoYW5zaGFnZW5zdWlyeW91XCA7CivlpInmhYvlv4PnkIblraYgPiBoZW50YWlzaGlucmlnYWt1XCA7CivmrKflt57lhbHlkIzkvZMgPiBvdXNodXVreW91ZG91dGFpXCA7CivntKvlpJbnt5rnmYLms5UgPiBzaGlnYWlzZW5yeW91aG91XCA7CivpnZ7mraboo4XkuK3nq4sgPiBoaWJ1c291Y2h1dXJpdHN1XCA7CivkuLvluK3lpJbkuqTlrpggPiBzaHVzZWtpZ2Fpa291a2FuXCA7CivntLDog57os6rpgbrkvJ0gPiBzYWlib3VzaGl0c3VpZGVuXCA7CivlhbHnlKPlhZrlrqPoqIAgPiBreW91c2FudG91c2VuZ2VuXCA7Civlt6Hlm57oqLrnmYLmiYAgPiBqdW5rYWlzaGlucnlvdWpvXCA7CivmupDms4nmiYDlvpfnqI4gPiBnZW5zZW5zaG90b2t1emVpXCA7CivntYTogbflirTlg43ogIUgPiBzb3Nob2t1cm91ZG91c2hhXCA7CivlirTlg43ogIXpmo7ntJogPiByb3Vkb3VzaGFrYWlreXV1XCA7Civmi6HlpKflho3nlJ/nlKMgPiBrYWt1ZGFpc2Fpc2Vpc2FuXCA7CivkuIrntJroo4HliKTmiYAgPiBqb3VreXV1c2FpYmFuc2hvXCA7CivnpoHmrLLkuLvnvqnogIUgPiBraW4nJ3lva3VzaHVnaXNoYVwgOwor54m55q6K5r2c6Iiq6ImHID4gdG9rdXNodXNlbmtvdXRlaVwgOwor5pyA5oG15Zu95b6F6YGHID4gc2Fpa2Vpa29rdXRhaWd1dVwgOwor5YWx55Sj5Li7576p5Zu9ID4ga3lvdXNhbnNodWdpa29rdVwgOwor5Y6f5ZGK5a++6KKr5ZGKID4gZ2Vua29rdXRhaWhpa29rdVwgOwor5Y+X6KiX5Y+O6LOE572qID4ganV0YWt1c2h1dXdhaXphaVwgOwor5rWB6KGM5oCn5oSf5YaSID4gcnl1dWtvdXNlaWthbmJvdVwgOwor5Zu95rCR57eP55Sf55SjID4ga29rdW1pbnNvdXNlaXNhblwgOwor5Lit6Led6Zui56u26LWwID4gY2h1dWt5b3Jpa3lvdXNvdVwgOwor5YWo5Zu955qE56+E5ZuyID4gemVua29rdXRla2loYW4nJ2lcIDsKK+mAo+mCpuWFseWSjOWbvSA+IHJlbnBvdWt5b3V3YWtva3VcIDsKK+aZrumBjeeahOazleWJhyA+IGZ1aGVudGVraWhvdXNva3VcIDsKK+Wkp+e1semgmOmBuOaMmSA+IGRhaXRvdXJ5b3VzZW5reW9cIDsKK+aXpeeMtuWQjOelluirliA+IG5pY2hpeXV1ZG91c29yb25cIDsKK+S4oeabv+aJi+aVsOaWmSA+IHJ5b3VnYWV0ZXN1dXJ5b3VcIDsKK+izh+acrOWIqeebiueOhyA+IHNoaWhvbnJpZWtpcml0c3VcIDsKK+aIpui7iuaPmumZuOiJpiA+IHNlbnNoYXlvdXJpa3VrYW5cIDsKK+WjsuaYpemYsuatouazlSA+IGJhaXNodW5ib3VzaGlob3VcIDsKK+WFieWMluWtpuWPjeW/nCA+IGtvdWthZ2FrdWhhbicnbm91XCA7Civou43kuovlvZPlsYDogIUgPiBndW5qaXRvdWt5b2t1c2hhXCA7CivogonkvZPlirTlg43ogIUgPiBuaWt1dGFpcm91ZG91c2hhXCA7Civoh6rkuLvmtYHpgJrnsbMgPiBqaXNodXJ5dXV0c3V1bWFpXCA7CivnrKzkuIDmrKHnlKPmpa0gPiBkYWlpY2hpamlzYW5neW91XCA7Civlrp/lrZjkuLvnvqnogIUgPiBqaXRzdXpvbnNodWdpc2hhXCA7Civnj77lrp/kuLvnvqnogIUgPiBnZW5qaXRzdXNodWdpc2hhXCA7Civlj43mlL/lupzli6LlipsgPiBoYW5zZWlmdXNlaXJ5b2t1XCA7CivlhY3nlqvkuI3lhajnl4cgPiBtZW4nJ2VraWZ1emVuc2hvdVwgOwor5Y2B6YCy5YiG6aGe5rOVID4gamlzc2hpbmJ1bnJ1aWhvdVwgOwor5YG25YOP5pWZ5b6S55qEID4gZ3V1em91a3lvdXRvdGVraVwgOwor57SF55m95q2M5ZCI5oimID4ga291aGFrdXV0YWdhc3NlblwgOwor57WM5riI56CU56m25omAID4ga2VpemFpa2Vua3l1dXNob1wgOwor6LuN5LqL6YCa5L+h5ZOhID4gZ3Vuaml0c3V1c2hpbicnaW5cIDsKK+Wfuua6luWGheizg+mHkSA+IGtpanVuJyduYWljaGluZ2luXCA7CivnnIzluoHmiYDlnKjlnLAgPiBrZW5jaG91c2hvemFpY2hpXCA7CivnnJ/lrpflpKfosLfmtL4gPiBzaGluc2h1dW9vdGFuaWhhXCA7Civlho3lhaXlm73oqLHlj68gPiBzYWlueXV1a29rdWt5b2thXCA7Civoi7Hlm73lm73mlZnkvJogPiBlaWtva3Vrb2treW91a2FpXCA7CivmuIXmlZnlvpLpnanlkb0gPiBzZWlreW91dG9rYWt1bWVpXCA7CivlpKrpmb3npZ7ntYzlj6IgPiB0YWl5b3VzaGlua2Vpc291XCA7CivntYzllrblrabkv67lo6sgPiBrZWllaWdha3VzaHV1c2hpXCA7CivlgaXlurfoqLzmmI7mm7ggPiBrZW5rb3VzaG91bWVpc2hvXCA7CivnpL7kvJrlv4PnkIblraYgPiBzaGFrYWlzaGlucmlnYWt1XCA7CivlhazlhbHkvIHmpa3kvZMgPiBrb3VreW91a2lneW91dGFpXCA7Civpg73luILlho3plovnmbogPiB0b3NoaXNhaWthaWhhdHN1XCA7CivmlL7lsITnt5rnmYLms5UgPiBob3VzaGFzZW5yeW91aG91XCA7Civlm73pgKPliIbmi4Xph5EgPiBrb2t1cmVuYnVudGFua2luXCA7CivlrprmnJ/liIrooYzniakgPiB0ZWlraWthbmtvdWJ1dHN1XCA7CivmlLvmkoPplovlp4vnt5ogPiBrb3VnZWtpa2Fpc2hpc2VuXCA7CivlubPpnaLkuInop5Lms5UgPiBoZWltZW5zYW5rYWt1aG91XCA7Civms5XlrprkvJ3mn5Pnl4UgPiBob3V0ZWlkZW5zZW5ieW91XCA7CivkuK3ot53pm6Lnq7bkuokgPiBjaHV1a3lvcmlreW91c291XCA7CivkuInlj4nnpZ7ntYznl5sgPiBzYW5zYXNoaW5rZWl0c3V1XCA7CivlhKrli53msbrlrprmiKYgPiB5dXVzaG91a2V0dGVpc2VuXCA7CivmnIDkvY7nlJ/mtLvosrsgPiBzYWl0ZWlzZWlrYXRzdWhpXCA7CivlupznnIzliKXkurrlj6MgPiBmdWtlbmJldHN1amlua291XCA7Civmjqjlrprnm7jntprkurogPiBzdWl0ZWlzb3V6b2t1bmluXCA7CivlpJrlm73nsY3kvIHmpa0gPiB0YWtva3VzZWtpa2lneW91XCA7CivmmbTkuIDmmYLlsI/pm6ggPiBoYXJlaWNoaWppa29zYW1lXCA7CivlraPnr4DlirTlg43ogIUgPiBraXNldHN1cm91ZG91c2hhXCA7CivkuK3lsI/oq7jlm73lrrYgPiBjaG91c2hvdXNob2tva2thXCA7CivkuI3lubPnrYnmnaHntIQgPiBmdWJ5b3Vkb3Vqb3V5YWt1XCA7CivmnIDkvY7os4Pph5HliLYgPiBzYWl0ZWljaGluZ2luc2VpXCA7CivluJ3lm73kuLvnvqnnmoQgPiB0ZWlrb2t1c2h1Z2l0ZWtpXCA7CivntI3nqI7pgJrnn6Xmm7ggPiBub3V6ZWl0c3V1Y2hpc2hvXCA7CivplqLnqI7libLlvZPliLYgPiBrYW56ZWl3YXJpYXRlc2VpXCA7CivlsYXkvY/oqLzmmI7mm7ggPiBreW9qdXVzaG91bWVpc2hvXCA7CivlpKfkvb/ntJrkvJroq4cgPiB0YWlzaGlreXV1a2FpZGFuXCA7CivmsJHkuLvmtLvli5XlrrYgPiBtaW5zaHVrYXRzdWRvdWthXCA7CivlrqLlk6HnoJTnqbblk6EgPiBreWFrdWlua2Vua3l1dWluXCA7CivmlK/mjIHlipvkv4LmlbAgPiBzaGlqaXJ5b2t1a2Vpc3V1XCA7Civnm7TkuIvlnovlnLDpnIcgPiBjaG9ra2FnYXRhamlzaGluXCA7CivmnKrop6PmsbrllY/poYwgPiBtaWthaWtldHN1bW9uZGFpXCA7Civlu7rnr4nln7rmupbms5UgPiBrZW5jaGlrdWtpanVuaG91XCA7Civnn6XnmoTmiYDmnInmqKkgPiBjaGl0ZWtpc2hveXV1a2VuXCA7Civogbfmpa3lronlrprmiYAgPiBzaG9rdWd5b3VhbnRlaWpvXCA7CivlhbHnlKPlhZrntLDog54gPiBreW91c2FudG91c2FpYm91XCA7CivkuIDlubTnlJ/ojYnmnKwgPiBpY2hpbmVuc2Vpc291aG9uXCA7CivmnaHntITliqDnm5/lm70gPiBqb3V5YWt1a2FtZWlrb2t1XCA7Civnq4vmraPkvbzmiJDkvJogPiByaXNzaG91a291c2Vpa2FpXCA7CivlhbHoprPnpo/pn7Pmm7ggPiBreW91a2FuZnVrdWluc2hvXCA7Civpq5jmiYDmgZDmgJbnl4cgPiBrb3VzaG9reW91ZnVzaG91XCA7CivmlrDogZ7osqnlo7LlupcgPiBzaGluYnVuaGFuYmFpdGVuXCA7CivovrLmnpfmsLTnlKPnnIEgPiBub3VyaW5zdWlzYW5zaG91XCA7CivkuozogIXpgbjkuIDms5UgPiBuaXNoYXNlbicnaXRzdWhvdVwgOwor5aKD55WM5YCk5ZWP6aGMID4ga3lvdWthaWNoaW1vbmRhaVwgOwor56S+5Lya5Lq66YeO55CDID4gc2hha2FpamluJyd5YWt5dXVcIDsKK+iPnOmjn+S4u+e+qeiAhSA+IHNhaXNob2t1c2h1Z2lzaGFcIDsKK+i7jeeUo+ikh+WQiOS9kyA+IGd1bnNhbmZ1a3Vnb3V0YWlcIDsKK+eyvuelnuWMu+WtpuiAhSA+IHNlaXNoaW4nJ2lnYWt1c2hhXCA7CivntYzmuIjkvIHnlLvluoEgPiBrZWl6YWlraWtha3VjaG91XCA7CivlhYjnq6/mlK/mjIHlipsgPiBzZW50YW5zaGlqaXJ5b2t1XCA7Civkv53lgaXniannkIblraYgPiBob2tlbmJ1dHN1cmlnYWt1XCA7CivliIbop6Pokrjmupzms5UgPiBidW5rYWlqb3VyeXV1aG91XCA7CivoqIjph4/oqIDoqp7lraYgPiBrZWlyeW91Z2VuZ29nYWt1XCA7CivlnLDln5/mjK/oiIjliLggPiBjaGlpa2lzaGlua291a2VuXCA7CivmgKXpgLLkuLvnvqnogIUgPiBreXV1c2hpbnNodWdpc2hhXCA7CivkuqTpgJrpgYvovLjmpa0gPiBrb3V0c3V1dW4nJ3l1Z3lvdVwgOwor54Sh5Yi26ZmQ5L6b57WmID4gbXVzZWlnZW5reW91a3l1dVwgOwor57Wm5LiO5omA5b6X6ICFID4ga3l1dXlvc2hvdG9rdXNoYVwgOwor5oim6ZeY54iG5pKD5qmfID4gc2VudG91YmFrdWdla2lraVwgOwor5p6X5qWt6Kmm6aiT5aC0ID4gcmluZ3lvdXNoaWtlbmpvdVwgOwor5pOy5by+55m65bCE562SID4gdGVraWRhbmhhc3NoYXRvdVwgOwor55Sj6LuN6KSH5ZCI5L2TID4gc2FuZ3VuZnVrdWdvdXRhaVwgOwor5pyA5aSn5YWs57SE5pWwID4gc2FpZGFpa291eWFrdXN1dVwgOwor5Zu95YaF5raI6LK756iOID4ga29rdW5haXNob3VoaXplaVwgOwor5bCR5bm05a+p5Yik5omAID4gc2hvdW5lbnNoaW5wYW5qb1wgOwor5rWB6KGM5oCn6IKd54KOID4gcnl1dWtvdXNlaWthbicnZW5cIDsKK+a6lua6luaxuuWLneaIpiA+IGp1bmp1bmtlc3Nob3VzZW5cIDsKK+S4jeWujOWFqOeHg+eEvCA+IGZ1a2FuemVuJyduZW5zaG91XCA7Civljp/lrZDlipvmmYLku6MgPiBnZW5zaGlyeW9rdWppZGFpXCA7CivovrLmpa3oqabpqJPloLQgPiBub3VneW91c2hpa2Vuam91XCA7Civpq5jpgJ/luqbmkq7lvbEgPiBrb3Vzb2t1ZG9zYXRzdWVpXCA7Civlpb3msJfmgKfnlJ/niakgPiBrb3VraXNlaXNlaWJ1dHN1XCA7Civlrrbluq3lhoXmmrTlipsgPiBrYXRlaW5haWJvdXJ5b2t1XCA7CivlnKjnsY3lsILlvpPogIUgPiB6YWlzZWtpc2VuanV1c2hhXCA7CivlrpjosrvnlZnlrabnlJ8gPiBrYW5waXJ5dXVnYWt1c2VpXCA7CivljZfljJfmnJ3mmYLku6MgPiBuYW5ib2t1Y2hvdWppZGFpXCA7CivmrbvkuqHoqLrmlq3mm7ggPiBzaGlib3VzaGluZGFuc2hvXCA7CivlvKbmpb3lm5vph43lpY8gPiBnZW5nYWt1c2hpanV1c291XCA7Civku7Loo4Hoo4HliKTmiYAgPiBjaHV1c2Fpc2FpYmFuc2hvXCA7CivnkIboq5bniannkIblraYgPiByaXJvbmJ1dHN1cmlnYWt1XCA7CivlhajoiKzliY3lk6jnt5ogPiB6ZW5wYW56ZW5zaG91c2VuXCA7CivljYHkuozmjIfohbjomasgPiBqdXVuaXNoaWNob3VjaHV1XCA7CivlnJ/mnKjlt6XlrabogIUgPiBkb2Jva3Vrb3VnYWt1c2hhXCA7Civml6XkuK3pn5PntbHlkIggPiBuaXRjaHV1a2FudG91Z291XCA7Civmi6HlvLXlgI3nsr7luqYgPiBrYWt1Y2hvdWJhaXNlaWRvXCA7CivlirTlg43lj47lrrnmiYAgPiByb3Vkb3VzaHV1eW91c2hvXCA7CivnhKHnnYDpmbjpo5vooYwgPiBtdWNoYWt1cmlrdWhpa291XCA7Civml6Xku5jlpInmm7Tnt5ogPiBoaWR6dWtlaGVua291c2VuXCA7CivlvZPkuovogIXog73lipsgPiB0b3VqaXNoYW5vdXJ5b2t1XCA7CivmkI3nm4roqIjnrpfmm7ggPiBzb24nJ2VraWtlaXNhbnNob1wgOwor5oCl6KGM5YGc6LuK6aeFID4ga3l1dWtvdXRlaXNoYWVraVwgOwor5Y+N5qSN5rCR5Li7576pID4gaGFuc2hva3VtaW5zaHVnaVwgOwor5qW15L2O5rip56eR5a2mID4ga3lva3V0ZWlvbmthZ2FrdVwgOwor5YaZ55yf5pyb6YGg6Y+hID4gc2hhc2hpbmJvdWVua3lvdVwgOwor5aaZ5rOV6JOu6I+v57WMID4gbXlvdWhvdXJlbmdla3lvdVwgOwor5a6f55So5Li7576p6ICFID4gaml0c3V5b3VzaHVnaXNoYVwgOwor5b6M5pa56YCj57Wh57eaID4ga291aG91cmVucmFrdXNlblwgOwor5a6f6aiT5b+D55CG5a2mID4gamlra2Vuc2hpbnJpZ2FrdVwgOwor5LiN5rOV5YWl5Zu96ICFID4gZnVob3VueXV1a29rdXNoYVwgOwor5aSa5YWD5pa556iL5byPID4gdGFnZW5ob3V0ZWlzaGlraVwgOwor5Zu95YaF57eP55Sf55SjID4ga29rdW5haXNvdXNlaXNhblwgOwor6YmE6YGT5YWs5a6J5a6YID4gdGV0c3Vkb3Vrb3VhbmthblwgOwor5bmz5Y+w5Z6L6LKo6LuKID4gaGlyYWRhaWdhdGFrYXNoYVwgOwor5Lq656ew5Luj5ZCN6KmeID4gbmluc2hvdWRhaW1laXNoaVwgOwor5a6f5qWt5LmL5pel5pysID4gaml0c3VneW91bm9uaWhvblwgOwor56mN5bGk5Lm+6Zu75rGgID4gc2VraXNvdWthbmRlbmNoaVwgOwor6KGM5pS/566h55CG5bqBID4gZ3lvdXNlaWthbnJpY2hvdVwgOwor6LWk5Y2B5a2X5p2h57SEID4gc2VraWp1dWppam91eWFrdVwgOwor5YWJ5a2m6aGV5b6u6Y+hID4ga291Z2FrdWtlbmJpa3lvdVwgOwor5by35Yi25Y+O5a655omAID4ga3lvdXNlaXNodXV5b3Vqb1wgOwor54qv572q5b+D55CG5a2mID4gaGFuemFpc2hpbnJpZ2FrdVwgOwor6YCj6YKm5o2c5p+75bGAID4gcmVucG91c291c2FreW9rdVwgOwor5aSn6Zm456e75YuV6KqsID4gdGFpcmlrdWlkb3VzZXRzdVwgOwor5LyB5qWt5YaF5pWZ6IKyID4ga2lneW91bmFpa3lvdWlrdVwgOwor56qS57Sg6YW45YyW54mpID4gY2hpc3Nvc2Fua2FidXRzdVwgOwor5bid546L5YiH6ZaL6KGTID4gdGVpb3VzZWtrYWlqdXRzdVwgOwor5pil5qmf55m65YuV5pyfID4gc2h1bmtpaGF0c3Vkb3VraVwgOwor5aSp5bmV6KO96YCg5Lq6ID4gdGVubWFrdXNlaXpvdW5pblwgOwor5pyA5YSq56eA6YG45omLID4gc2FpeXV1c2h1dXNlbnNodVwgOwor5Yud5Yip5Y+I5Yud5YipID4gc2hvdXJpbWF0YXNob3VyaVwgOwor5aWz5rWB5paH5a2m6ICFID4gam9yeXV1YnVuZ2FrdXNoYVwgOwor6ICQ5LmF5raI6LK76LKhID4gdGFpa3l1dXNob3VoaXphaVwgOwor6Z2e5YWs5byP5Y2U6K2wID4gaGlrb3VzaGlraWt5b3VnaVwgOwor56m65riv5L2/55So5paZID4ga3V1a291c2hpeW91cnlvdVwgOwor54Sh6YeN5Yqb54q25oWLID4gbXVqdXVyeW9rdWpvdXRhaVwgOwor5aSp54Wn55qH5aSn56WeID4gdGVuc2hvdWtvdWRhaWppblwgOwor57K+56We5a6J5a6a5YmkID4gc2Vpc2hpbicnYW50ZWl6YWlcIDsKK+mFuOaAp+mFuOWMlueJqSA+IHNhbnNlaXNhbmthYnV0c3VcIDsKK+WGmeWun+S4u+e+qeiAhSA+IHNoYWppdHN1c2h1Z2lzaGFcIDsKK+WGt+aIpuWei+aAneiAgyA+IHJlaXNlbmdhdGFzaGlrb3VcIDsKK+mbu+WtkOW3pealreS8miA+IGRlbnNoaWtvdWd5b3VrYWlcIDsKK+mbu+WtkOW3peWtpuiAhSA+IGRlbnNoaWtvdWdha3VzaGFcIDsKK+awkeS4u+WFseWSjOWbvSA+IG1pbnNodWt5b3V3YWtva3VcIDsKK+eLrOeri+iomOW/teaXpSA+IGRva3VyaXRzdWtpbmVuYmlcIDsKK+WMluWtpuiqv+WRs+aWmSA+IGthZ2FrdWNob3VtaXJ5b3VcIDsKK+e1gui6q+mbh+eUqOWItiA+IHNodXVzaGlua295b3VzZWlcIDsKK+S4jeWumuaWueeoi+W8jyA+IGZ1dGVpaG91dGVpc2hpa2lcIDsKK+Wkp+S/rumBk+mZoumVtyA+IGRhaXNodXVkb3VpbmNob3VcIDsKK+a4r+a5vumBi+mAgealrSA+IGtvdXdhbicndW5zb3VneW91XCA7Civlkajms6LmlbDlpInoqr8gPiBzaHV1aGFzdXVoZW5jaG91XCA7Civkub7nh6XlnLDovrLmpa0gPiBrYW5zb3VjaGlub3VneW91XCA7CivnkrDlooPphY3mha7mm7ggPiBrYW5reW91aGFpcnlvc2hvXCA7Civlm7rkvZPniannkIblraYgPiBrb3RhaWJ1dHN1cmlnYWt1XCA7CivntYTnuZTlirTlg43ogIUgPiBzb3NoaWtpcm91ZG91c2hhXCA7Civllrbmpa3loLHlkYrmm7ggPiBlaWd5b3Vob3Vrb2t1c2hvXCA7CivluoPlkYrku6PnkIblupcgPiBrb3Vrb2t1ZGFpcml0ZW5cIDsKK+aIpuaZguWbvemam+azlSA+IHNlbmppa29rdXNhaWhvdVwgOwor5aSa6aGN57SN56iO6ICFID4gdGFnYWt1bm91emVpc2hhXCA7CivlpKrlhYPluKXlppnnjosgPiBkYWlnZW5zdWlteW91b3VcIDsKK+S4remDqOWkquW5s+a0iyA+IGNodXVidXRhaWhlaXlvdVwgOwor5LyB5qWt5YaF57WE5ZCIID4ga2lneW91bmFpa3VtaWFpXCA7CivlpKrlubPmtIvmiKbkuokgPiB0YWloZWl5b3VzZW5zb3VcIDsKK+mAo+W4r+S/neiovOS6uiA+IHJlbnRhaWhvc2hvdW5pblwgOwor6LuN5Zu95Li7576p6ICFID4gZ3Vua29rdXNodWdpc2hhXCA7Civlj43luJ3lm73kuLvnvqkgPiBoYW50ZWlrb2t1c2h1Z2lcIDsKK+S8muekvuabtOeUn+azlSA+IGthaXNoYWtvdXNlaWhvdVwgOwor5Zu96YG45byB6K235Lq6ID4ga29rdXNlbmJlbmdvbmluXCA7Civoh6rnhLblnLDnkIblraYgPiBzaGl6ZW5jaGlyaWdha3VcIDsKK+WcsOWfn+eahOWIhuW4gyA+IGNoaWlraXRla2lidW5wdVwgOwor5Ymq5pat5a6J5a6a5oCnID4gc2VuZGFuJydhbnRlaXNlaVwgOwor6auY5YiG5a2Q5YyW5a2mID4ga291YnVuc2hpa2FnYWt1XCA7Civmg4XloLHlhazplovms5UgPiBqb3Vob3Vrb3VrYWlob3VcIDsKK+WPjeWwhOacm+mBoOmPoSA+IGhhbnNoYWJvdWVua3lvdVwgOwor54m55Yil5aeU5ZOh5LyaID4gdG9rdWJldHN1aWlua2FpXCA7CivlhoXpnIDkuLvlsI7lnosgPiBuYWlqdXNodWRvdWdhdGFcIDsKK+aZtOWkqeS5seawl+a1gSA+IHNlaXRlbnJhbmtpcnl1dVwgOwor5Z+65pys55qE5Lq65qipID4ga2lob250ZWtpamlua2VuXCA7CivmiKbkuonniq/nvarkurogPiBzZW5zb3VoYW56YWluaW5cIDsKK+WPjeWvvuiyv+aYk+miqCA+IGhhbnRhaWJvdWVraWZ1dVwgOwor6YGT6Lev5Lqk6YCa5rOVID4gZG91cm9rb3V0c3V1aG91XCA7CivlhbHnlKPlm73lrrbpg6EgPiBreW91c2Fua29ra2FndW5cIDsKK+S7ruijheW3oea0i+iJpiA+IGthc291anVuJyd5b3VrYW5cIDsKK+aVmeiCsuWfuuacrOazlSA+IGt5b3Vpa3VraWhvbmhvdVwgOwor55Sf55Sj6ICF5L6h5qC8ID4gc2Vpc2Fuc2hha2FrYWt1XCA7CivmnIDlsI/kuozkuZfms5UgPiBzYWlzaG91bmlqb3Vob3VcIDsKK+S4u+W5ueeglOeptuWToSA+IHNodWthbmtlbmt5dXVpblwgOwor5a6Y5YOa5Li7576p6ICFID4ga2FucnlvdXNodWdpc2hhXCA7CivlsI/pgbjmjJnljLrliLYgPiBzaG91c2Vua3lva3VzZWlcIDsKK+iHqui7oui7iuaTjealrSA+IGppdGVuc2hhc291Z3lvdVwgOwor5LiW55WM5paw6KiY6YyyID4gc2VrYWlzaGlua2lyb2t1XCA7CivllYblt6XkvJrorbDmiYAgPiBzaG91a291a2FpZ2lzaG9cIDsKK+W8vuWKvuijgeWIpOaJgCA+IGRhbmdhaXNhaWJhbnNob1wgOwor5L+d6K236Zai56iO546HID4gaG9nb2thbnplaXJpdHN1XCA7CivmupbnpoHmsrvnlKPogIUgPiBqdW5raW5jaGlzYW5zaGFcIDsKK+itsOmZouWGhemWo+WItiA+IGdpaW4nJ25haWtha3VzZWlcIDsKK+eUn+a0u+S/neitt+azlSA+IHNlaWthdHN1aG9nb2hvdVwgOwor5YWx55Sj5Li7576p6ICFID4ga3lvdXNhbnNodWdpc2hhXCA7CivmraPlronmga/pppnphbggPiBzZWlhbnNva3Vrb3VzYW5cIDsKK+WFrOWus+eXheaCo+iAhSA+IGtvdWdhaWJ5b3VrYW5qYVwgOwor6LKh5pS/5oqV6J6N6LOHID4gemFpc2VpdG91eXV1c2hpXCA7CivmuK/mub7lirTlg43ogIUgPiBrb3V3YW5yb3Vkb3VzaGFcIDsKK+WGhemZuOaAp+awl+WAmSA+IG5haXJpa3VzZWlraWtvdVwgOwor5Lit5aSu5qiZ5rqW5pmCID4gY2h1dW91aHlvdWp1bmppXCA7CivmipXlhYnnhafmmI7lmaggPiB0b3Vrb3VzaG91bWVpa2lcIDsKK+e3j+WQjOebn+e9t+alrSA+IHNvdWRvdW1laWhpZ3lvdVwgOwor5pyA6auY6KOB5Yik5omAID4gc2Fpa291c2FpYmFuc2hvXCA7Civllrblm6PlnLDkuIvpiYQgPiBlaWRhbmNoaWthdGV0c3VcIDsKK+mjveWSjOWMluWQiOeJqSA+IGhvdXdha2Fnb3VidXRzdVwgOwor6YeR5bGe5o6i55+l5qmfID4ga2luem9rdXRhbmNoaWtpXCA7Civmta7li5XlsI/mlbDngrkgPiBmdWRvdXNob3VzdXV0ZW5cIDsKK+iogOiqnuW/g+eQhuWtpiA+IGdlbmdvc2hpbnJpZ2FrdVwgOwor5LiA5aer5LqM5aSq6YOOID4gaWNoaWhpbWVuaXRhcm91XCA7CivnlYzpnaLmtLvmgKfliaQgPiBrYWltZW5rYXNzZWl6YWlcIDsKK+S6uueUn+ahiOWGheashCA+IGppbnNlaWFuJyduYWlyYW5cIDsKK+S4gOWIhuS6jOWNgeenkiA+IGlwcHVuJyduaWp1dWJ5b3VcIDsKK+WNl+mYv+WFseWSjOWbvSA+IG5hbicnYWt5b3V3YWtva3VcIDsKK+S4u+aIpumXmOaIpui7iiA+IHNodXNlbnRvdXNlbnNoYVwgOwor5q+U6LyD6KiA6Kqe5a2mID4gaGlrYWt1Z2VuZ29nYWt1XCA7CivlhoXmlL/kuI3lubLmuIkgPiBuYWlzZWlmdWthbnNob3VcIDsKK+mrmOetieijgeWIpOaJgCA+IGtvdXRvdXNhaWJhbnNob1wgOwor55CD6Z2i5bm+5L2V5a2mID4ga3l1dW1lbmtpa2FnYWt1XCA7Civpm7vlrZDpoZXlvq7pj6EgPiBkZW5zaGlrZW5iaWt5b3VcIDsKK+WKtOWDjeeUn+eUo+aApyA+IHJvdWRvdXNlaXNhbnNlaVwgOwor5bmz6KGM5Zub6L665b2iID4gaGVpa291c2hpaGVua2VpXCA7CivmhJ/lgrfkuLvnvqnogIUgPiBrYW5zaG91c2h1Z2lzaGFcIDsKK+WtpueUn+iHquayu+S8miA+IGdha3VzZWlqaWNoaWthaVwgOwor5bm06YeR5Y+X57Wm6ICFID4gbmVua2luanVreXV1c2hhXCA7CivpnZ7lkIzmnJ/pgJrkv6EgPiBoaWRvdWtpdHN1dXNoaW5cIDsKK+S4ieWNgeW5tOaIpuS6iSA+IHNhbmp1dW5lbnNlbnNvdVwgOwor6ZaJ5omA5oGQ5oCW55eHID4gaGVpam9reW91ZnVzaG91XCA7Civlj7jms5XnoJTkv67miYAgPiBzaGlob3VrZW5zaHV1am9cIDsKK+S9jumHkeWIqeaUv+etliA+IHRlaWtpbnJpc2Vpc2FrdVwgOwor6bq76Jas5bi455So6ICFID4gbWF5YWt1am91eW91c2hhXCA7Civplbfot53pm6LliJfou4ogPiBjaG91a3lvcmlyZXNzaGFcIDsKK+aHsue9sOWnlOWToeS8miA+IGNob3ViYXRzdWlpbmthaVwgOwor5pyJ5qmf5YyW5ZCI54mpID4geXV1a2lrYWdvdWJ1dHN1XCA7Civmpb3lpKnkuLvnvqnogIUgPiByYWt1dGVuc2h1Z2lzaGFcIDsKK+eEoeadoeS7tumZjeS8jyA+IG11am91a2Vua291ZnVrdVwgOwor6YGL6Lui5YWN6Kix6Ki8ID4gdW50ZW5tZW5reW9zaG91XCA7CivmoLzpl5jmiKbpg6jpmoogPiBrYWt1dG91c2VuYnV0YWlcIDsKK+WxleekuuWNs+WjsuS8miA+IHRlbmppc29rdWJhaWthaVwgOwor6LuN5LqL5aKD55WM57eaID4gZ3VuamlreW91a2Fpc2VuXCA7CivmtojosrvogIXlm6PkvZMgPiBzaG91aGlzaGFkYW50YWlcIDsKK+WFqOS9k+S4u+e+qeWbvSA+IHplbnRhaXNodWdpa29rdVwgOwor5LiN5Y+v5L615p2h57SEID4gZnVrYXNoaW5qb3V5YWt1XCA7CivluqfluK3mjIflrprliLggPiB6YXNla2lzaGl0ZWlrZW5cIDsKK+W4sOWbveWtkOWls+aeoCA+IGtpa29rdXNoaWpvd2FrdVwgOwor6YG66KiA6KOc6Laz5pu4ID4geXVpZ29uaG9zb2t1c2hvXCA7Civngq3pibHlirTlg43ogIUgPiB0YW5rb3Vyb3Vkb3VzaGFcIDsKK+ino+aekOW5vuS9leWtpiA+IGthaXNla2lraWthZ2FrdVwgOwor57WM5riI5oCn5ZCR5LiKID4ga2VpemFpc2Vpa291am91XCA7CivlnLDkuIvmoLjlrp/pqJMgPiBjaGlrYWtha3VqaWtrZW5cIDsKK+avlOS+i+S7o+ihqOWItiA+IGhpcmVpZGFpaHlvdXNlaVwgOwor56uL5oay5ZCb5Li75pS/ID4gcmlra2Vua3Vuc2h1c2VpXCA7CivprZrpm7fnmbrlsITnrqEgPiBneW9yYWloYXNzaGFrYW5cIDsKK+aQjeebiuWIhuWykOeCuSA+IHNvbicnZWtpYnVua2l0ZW5cIDsKK+ekvuS8muS/nemZuuW6gSA+IHNoYWthaWhva2VuY2hvdVwgOwor5q2p6KGM6ICF5aSp5Zu9ID4gaG9rb3VzaGF0ZW5nb2t1XCA7Civlm73msJHnmobkv53pmbogPiBrb2t1bWlua2FpaG9rZW5cIDsKK+WNmOe0lOWGjeeUn+eUoyA+IHRhbmp1bnNhaXNlaXNhblwgOwor6KKr6YG45oyZ6LOH5qC8ID4gaGlzZW5reW9zaGlrYWt1XCA7Civln7rmupblpJbos4Pph5EgPiBraWp1bmdhaWNoaW5naW5cIDsKK+eGseW4r+S9juawl+WcpyA+IG5ldHRhaXRlaWtpYXRzdVwgOwor54++5Zyo5a6M5LqG5pmCID4gZ2VuemFpa2FucnlvdWppXCA7CivnrYnovrrkuInop5LlvaIgPiB0b3VoZW5zYW5rYWtrZWlcIDsKK+aXpeW4uOiMtumjr+S6iyA+IG5pY2hpam91c2FoYW5qaVwgOwor6YCj6Y6W54q255CD6I+MID4gcmVuc2Fqb3VreXV1a2luXCA7Civljp/niIbniqDnibLogIUgPiBnZW5iYWt1Z2lzZWlzaGFcIDsKK+WkluWbveaKleizh+WutiA+IGdhaWtva3V0b3VzaGlrYVwgOwor6Zu75rOi5aSp5paH5a2mID4gZGVucGF0ZW5tb25nYWt1XCA7Civmp4vpgKDoqIDoqp7lraYgPiBrb3V6b3VnZW5nb2dha3VcIDsKK+WcsOWfn+WGt+aaluaIvyA+IGNoaWlraXJlaWRhbmJvdVwgOwor5Lq65bel5ZG85ZC45rOVID4gamlua291a29reXV1aG91XCA7Civlrp/oqLzkuLvnvqnogIUgPiBqaXNzaG91c2h1Z2lzaGFcIDsKK+aUr+aMgeWKm+eQhuirliA+IHNoaWppcnlva3VyaXJvblwgOwor5YWs6ZaL6KiO6KuW5LyaID4ga291a2FpdG91cm9ua2FpXCA7Civmlofpg6jnp5HlrabnnIEgPiBtb25idWthZ2FrdXNob3VcIDsKK+eJueioseaYjue0sOabuCA+IHRva2t5b21laXNhaXNob1wgOwor56iO5Yi26Kq/5p+75LyaID4gemVpc2VpY2hvdXNha2FpXCA7CivnmbrlsZXpgJTkuIrlm70gPiBoYXR0ZW50b2pvdWtva3VcIDsKK+WFrOWFseWbs+abuOmkqCA+IGtvdWt5b3V0b3Nob2thblwgOwor5Zu95YaF6KaP5qC85YyWID4ga29rdW5haWtpa2FrdWthXCA7CivlibXnq4voqJjlv7Xml6UgPiBzb3VyaXRzdWtpbmVuYmlcIDsKK+mHkemKreeZu+mMsuWZqCA+IGtpbnNlbnRvdXJva3VraVwgOwor5Yq05YON57WE5ZCI5rOVID4gcm91ZG91a3VtaWFpaG91XCA7CivntKDlvaLmnZDnlKPmpa0gPiBzb2tlaXphaXNhbmd5b3VcIDsKK+S6pOaPm+iyv+aYk+WItiA+IGtvdWthbmJvdWVraXNlaVwgOwor54++5Zyw6aeQ5Zyo5ZOhID4gZ2VuY2hpY2h1dXphaWluXCA7CivmnIDlsI/oh6rkuZfms5UgPiBzYWlzaG91amlqb3Vob3VcIDsKK+Wwj+Wei+S5l+eUqOi7iiA+IGtvZ2F0YWpvdXlvdXNoYVwgOwor5bGe5oCn5YCk6KGM5YiXID4gem9rdXNlZ3lvdXJldHN1XCA7Civmtbfou43lhbXlrabmoKEgPiBrYWlndW5oZWlnYWtrb3VcIDsKK+m7hOmBk+WNgeS6jOWuriA+IGtvdWRvdWp1dW5pa3l1dVwgOwor5Ye65p2l6auY5LuV5LqLID4gZGVraWRha2FzaGlnb3RvXCA7Civos4fnlKPosqDlgrXooaggPiBzaGlzYW5mdXNhaWh5b3VcIDsKK+eJiOaoqeaJgOacieiAhSA+IGhhbmtlbnNob3l1dXNoYVwgOwor5L+h5b6S5Lyd5YuV6ICFID4gc2hpbnRvZGVuZG91c2hhXCA7Civlrpjog73kuLvnvqnogIUgPiBrYW4nJ25vdXNodWdpc2hhXCA7CivogZbpnIrpmY3oh6jnpa0gPiBzZWlyZWlrb3VyaW5zYWlcIDsKK+a1geihjOaAp+iEs+eCjiA+IHJ5dXVrb3VzZWlub3VlblwgOwor6KiY5b+16KuW5paH6ZuGID4ga2luZW5yb25idW5zaHV1XCA7Civoh6rli5XpgKPntZDmqZ8gPiBqaWRvdXJlbmtldHN1a2lcIDsKK+Wkp+mZuOaAp+awl+WAmSA+IHRhaXJpa3VzZWlraWtvdVwgOwor5qC45YW15Zmo5a6f6aiTID4ga2FrdWhlaWtpamlra2VuXCA7CivoqoflpKflpoTmg7Pni4IgPiBrb2RhaW1vdXNvdWt5b3VcIDsKK+i6q+WIhuiovOaYjuabuCA+IG1pYnVuc2hvdW1laXNob1wgOwor5paH5YyW5Lq66aGe5a2mID4gYnVua2FqaW5ydWlnYWt1XCA7CivnrKzkuInmrKHnlKPmpa0gPiBkYWlzYW5qaXNhbmd5b3VcIDsKK+aWh+WMluWkp+mdqeWRvSA+IGJ1bmthZGFpa2FrdW1laVwgOwor6Z2e5bGA5omA5YiG5bKQID4gaGlreW9rdXNob2J1bmtpXCA7CivplqLkv4Lku6PlkI3oqZ4gPiBrYW5rZWlkYWltZWlzaGlcIDsKK+WkmuWbveexjeiogOiqniA+IHRha29rdXNla2lnZW5nb1wgOwor5rC06YqA5rCX5Zyn6KiIID4gc3VpZ2lua2lhdHN1a2VpXCA7CivlhZDnq6Xlv4PnkIblraYgPiBqaWRvdXNoaW5yaWdha3VcIDsKK+epuua0nuWMluePvuixoSA+IGt1dWRvdWthZ2Vuc2hvdVwgOwor54Sh55CG5pa556iL5byPID4gbXVyaWhvdXRlaXNoaWtpXCA7CivkuqTlt67lr77np7DmgKcgPiBrb3VzYXRhaXNob3VzZWlcIDsKK+WWp+WYqeS4oeaIkOaVlyA+IGtlbmthcnlvdXNlaWJhaVwgOwor6KaW6IG06Kaa5qmf5ZmoID4gc2hpY2hvdWtha3VraWtpXCA7Civmn5PoibLkvZPnlbDluLggPiBzZW5zaG9rdXRhaWlqb3VcIDsKK+e1kOWpmumBqem9ouacnyA+IGtla2tvbnRla2lyZWlraVwgOwor5ry46L+R55qE6Ieq55SxID4gemVua2ludGVraWppeXV1XCA7CivnpL7kvJrmsJHkuLvlhZogPiBzaGFrYWltaW5zaHV0b3VcIDsKK+engeioreW/nOaPtOWboyA+IHNoaXNldHN1b3VlbmRhblwgOwor57WM5riI5ZCM5Y+L5LyaID4ga2VpemFpZG91eXV1a2FpXCA7Civlj43oqLzlj6/og73mgKcgPiBoYW5zaG91a2Fub3VzZWlcIDsKK+aQrOmAgeWRqOazouaVsCA+IGhhbnNvdXNodXVoYXN1dVwgOwor5pyA6auY5oyH5bCO6ICFID4gc2Fpa291c2hpZG91c2hhXCA7CivokaHokITnirbnkIPoj4wgPiBidWRvdWpvdWt5dXVraW5cIDsKK+WFqOe/vOmjm+ihjOapnyA+IHplbicneW9rdWhpa291a2lcIDsKK+mAn+WKueaAp+iCpeaWmSA+IHNva2tvdXNlaWhpcnlvdVwgOwor6YGF5Yq55oCn6IKl5paZID4gY2hpa291c2VpaGlyeW91XCA7Civlm73nsovkuLvnvqnogIUgPiBrb2t1c3Vpc2h1Z2lzaGFcIDsKK+aWreW8vuaAp+S/guaVsCA+IGRhbmRhbnNlaWtlaXN1dVwgOwor5LqM5qyh5pa556iL5byPID4gbmlqaWhvdXRlaXNoaWtpXCA7Civlv5znlKjlv4PnkIblraYgPiBvdXlvdXNoaW5yaWdha3VcIDsKK+eyvuelnueVsOW4uOiAhSA+IHNlaXNoaW4nJ2lqb3VzaGFcIDsKK+WHuueUn+W5tOaciOaXpSA+IHNodXNzZWluZW5nYXBwaVwgOwor5YuV6Kme54q25ZCN6KmeID4gZG91c2hpam91bWVpc2hpXCA7Civoh6rnlLHoo4Hph4/mqKkgPiBqaXl1dXNhaXJ5b3VrZW5cIDsKK+S4reWkrumbhuaoqeWMliA+IGNodXVvdXNodXVrZW5rYVwgOwor54Sh5Yip5oGv6Ki85Yi4ID4gbXVyaXNva3VzaG91a2VuXCA7Civku4HnvqnnpLzmmbrkv6EgPiBqaW5naXJlaWNoaXNoaW5cIDsKK+abtOW5tOacn+manOWusyA+IGtvdW5lbmtpc2hvdWdhaVwgOwor5Zu96Kqe5a+p6K2w5LyaID4ga29rdWdvc2hpbmdpa2FpXCA7CivlnLDmlrnoo4HliKTmiYAgPiBjaGlob3VzYWliYW5zaG9cIDsKK+iHquWLleaUueacreapnyA+IGppZG91a2Fpc2F0c3VraVwgOwor5pyq5bCx5a2m5YWQ56ulID4gbWlzaHV1Z2FrdWppZG91XCA7Civlrp/mmYLplpPlh6bnkIYgPiBqaXRzdWppa2Fuc2hvcmlcIDsKK+mgkOmHkea6luWCmeeOhyA+IHlva2luanVuYmlyaXRzdVwgOwor5aSp5L2T5pyb6YGg6Y+hID4gdGVudGFpYm91ZW5reW91XCA7CivnpL7kvJroq7jnp5HlraYgPiBzaGFrYWlzaG9rYWdha3VcIDsKK+azleW+i+S6i+WLmeaJgCA+IGhvdXJpdHN1amltdXNob1wgOwor5a6f5Yip5Li7576p6ICFID4gaml0c3VyaXNodWdpc2hhXCA7CivmnKrnorroqo3mg4XloLEgPiBtaWtha3VuaW5qb3Vob3VcIDsKK+iAgeS6uuaAp+eXtOWRhiA+IHJvdWppbnNlaWNoaWhvdVwgOwor5Zyo5aSW56CU56m25ZOhID4gemFpZ2Fpa2Vua3l1dWluXCA7CivlrqLoprPkuLvnvqnogIUgPiBreWFra2Fuc2h1Z2lzaGFcIDsKK+mBuOaJi+aoqeWkp+S8miA+IHNlbnNodWtlbnRhaWthaVwgOwor5LiL57Sa6KOB5Yik5omAID4ga2FreXV1c2FpYmFuc2hvXCA7CivpgJPpmY3lpInlnKflmaggPiB0ZWlrb3VoZW5hdHN1a2lcIDsKK+mZkOeVjOmhleW+rumPoSA+IGdlbmthaWtlbmJpa3lvdVwgOwor6KaB5pKD5oim6ZeY5qmfID4geW91Z2VraXNlbnRvdWtpXCA7CivkuI3lhazlubPnq7bkuokgPiBmdWtvdWhlaWt5b3Vzb3VcIDsKK+WFrOiqjeS8muioiOWjqyA+IGtvdW5pbmthaWtlaXNoaVwgOwor54qv6KGM5aOw5piO5paHID4gaGFua291c2VpbWVpYnVuXCA7CivmtojosrvogIXkvqHmoLwgPiBzaG91aGlzaGFrYWtha3VcIDsKK+mfs+alveipleirluWutiA+IG9uZ2FrdWh5b3Vyb25rYVwgOwor5YWs5a6J6Kq/5p+75bqBID4ga291YW5jaG91c2FjaG91XCA7CivkuZfpmY3ou4rlhKrlhYggPiBqb3Vrb3VzaGF5dXVzZW5cIDsKK+S6uuW3peeUmOWRs+aWmSA+IGppbmtvdWthbm1pcnlvdVwgOwor5Zyo6YO36LuN5Lq65LyaID4gemFpZ291Z3Vuamlua2FpXCA7Civoh6roqJjmub/luqboqIggPiBqaWtpc2hpdHN1ZG9rZWlcIDsKK+Wkp+e1seS4gOeQhuirliA+IGRhaXRvdWl0c3VyaXJvblwgOwor5qSc5a6a5pWZ56eR5pu4ID4ga2VudGVpa3lvdWthc2hvXCA7CivljLvlrabmioDooZPlo6sgPiBpZ2FrdWdpanV0c3VzaGlcIDsKK+Wkqeeah+iqleeUn+aXpSA+IHRlbicnbm91dGFuam91YmlcIDsKK+WkquW5s+a0i+WcsOWfnyA+IHRhaWhlaXlvdWNoaWlraVwgOwor6LOH55Sj5YaN6KmV5L6hID4gc2hpc2Fuc2FpaHlvdWthXCA7Civmg4Xnt5LpmpzlrrPlhZAgPiBqb3VjaG9zaG91Z2FpamlcIDsKK+aXpeacrOWbveaGsuazlSA+IG5paG9ua29rdWtlbnBvdVwgOwor5Lq65rCR6Kej5pS+6LuNID4gamlubWlua2FpaG91Z3VuXCA7Civntbblr77lkJvkuLvliLYgPiB6ZXR0YWlrdW5zaHVzZWlcIDsKK+iKuOihk+aEm+WlveWutiA+IGdlaWp1dHN1YWlrb3VrYVwgOwor56eB55Sf5YWQ5Ye655SjID4gc2hpc2VpamlzaHVzc2FuXCA7CivkuKHpmaLljZTorbDkvJogPiByeW91aW5reW91Z2lrYWlcIDsKK+Wwj+eUsOWOn+aPkOeBryA+IG9kYXdhcmFkam91Y2hpblwgOwor6LKo54mp6Ieq5YuV6LuKID4ga2Ftb3RzdWppZG91c2hhXCA7CivniYfmiYvplpPku5XkuosgPiBrYXRhdGVtYXNoaWdvdG9cIDsKK+elnue1jOWbnui3r+e2siA+IHNoaW5rZWlrYWlyb21vdVwgOwor54Kt57Sg5YyW5ZCI54mpID4gdGFuc29rYWdvdWJ1dHN1XCA7CivmsJfnrqHmlK/llpjmga8gPiBraWthbnNoaXplbnNva3VcIDsKK+S4jeWLleeUo+alreiAhSA+IGZ1ZG91c2FuZ3lvdXNoYVwgOwor5rW35rSL5rCX6LGh5Y+wID4ga2FpeW91a2lzaG91ZGFpXCA7Civoh6rli5Xnv7voqLPmqZ8gPiBqaWRvdWhvbicneWFrdWtpXCA7CivnuITmloflvI/lnJ/lmaggPiBqb3Vtb25zaGlraWRva2lcIDsKK+i8uOWFpeiqsuW+tOmHkSA+IHl1bnl1dWthY2hvdWtpblwgOwor6YeN5ZWG5Li7576p6ICFID4ganV1c2hvdXNodWdpc2hhXCA7CivpgbrnlKPnm7jntprnqI4gPiBpc2Fuc291em9rdXplaVwgOwor5q+Y5bus6YGu6YKj5LuPID4gYmlydXNoYW5hYnV0c3VcIDsKK+mWoueojuiHquS4u+aoqSA+IGthbnplaWppc2h1a2VuXCA7Civln7rmnKzlkajms6LmlbAgPiBraWhvbnNodXVoYXN1dVwgOwor5Zub6Lyq6aeG5YuV6LuKID4geW9ucmlua3Vkb3VzaGFcIDsKK+mdmembu+awl+mYsuatoiA+IHNlaWRlbmtpYm91c2hpXCA7CivnhZnnqoHmjoPpmaTlpKsgPiBlbnRvdHN1c291amlmdVwgOwor5LyR5oim6KiY5b+15pelID4ga3l1dXNlbmtpbmVuYmlcIDsKK+Wtpuagoee+pOWItuW6piA+IGdha2tvdWd1bnNlaWRvXCA7CivmlL7lsITnt5rmioDluKsgPiBob3VzaGFzZW5naXNoaVwgOwor5a625bqt6KOB5Yik5omAID4ga2F0ZWlzYWliYW5zaG9cIDsKK+mVt+i3nembouaJk+iAhSA+IGNob3VreW9yaWRhc2hhXCA7Civml6XmnKzmqJnmupbmmYIgPiBuaWhvbmh5b3VqdW5qaVwgOwor6KqY5bCO6Zu75YuV5qmfID4geXV1ZG91ZGVuZG91a2lcIDsKK+W7uuWbveiomOW/teaXpSA+IGtlbmtva3VraW5lbmJpXCA7CivkvJ3ntbHkuLvnvqnogIUgPiBkZW50b3VzaHVnaXNoYVwgOwor55m76KiY55Wq5Y+35qyEID4gdG91a2liYW5nb3VyYW5cIDsKK+atqeihjOiAheWEquWFiCA+IGhva291c2hheXV1c2VuXCA7CivnhKHkurrlroflrpnoiLkgPiBtdWppbicndWNodXVzZW5cIDsKK+e+heiQhOaXpei+nuWFuCA+IHJhcG9uaWNoaWppdGVuXCA7CivmuKnmmpbljJbnj77osaEgPiBvbmRhbmthZ2Vuc2hvdVwgOwor5amm5Lq65Y+C5pS/5qipID4gZnVqaW5zYW5zZWlrZW5cIDsKK+iHqueUseawkeS4u+WFmiA+IGppeXV1bWluc2h1dG91XCA7CivlgIvkvZPnmbrnlJ/oq5YgPiBrb3RhaWhhc3NlaXJvblwgOwor5aSn5aiB5b6z5aaZ546LID4gZGFpaXRva3VteW91b3VcIDsKK+Wkp+mfk+iIquepuuapnyA+IHRhaWthbmtvdWt1dWtpXCA7CivkuI3nibnlrprlpJrmlbAgPiBmdXRva3V0ZWl0YXN1dVwgOwor5Li75oOF5Li7576p6ICFID4gc2h1am91c2h1Z2lzaGFcIDsKK+azleWumuS7o+eQhuS6uiA+IGhvdXRlaWRhaXJpbmluXCA7Civlhazplovlm7Pmm7jppKggPiBrb3VrYWl0b3Nob2thblwgOwor5LiA5pmC6ZaT5Lul5YaFID4gaWNoaWppa2FuJydpbmFpXCA7CivmlbDnkIboqIDoqp7lraYgPiBzdXVyaWdlbmdvZ2FrdVwgOwor6YG655Sj55u457aa5Lq6ID4gaXNhbnNvdXpva3VuaW5cIDsKK+aWueWQkeaOouefpeWZqCA+IGhvdWtvdXRhbmNoaWtpXCA7CivnhrHlj6/loZHmqLnohIIgPiBuZXRzdWthc29qdXNoaVwgOwor54Sh5qmf5YyW5ZCI54mpID4gbXVraWthZ291YnV0c3VcIDsKK+mHjeimgeaWh+WMluiyoSA+IGp1dXlvdWJ1bmthemFpXCA7CivlsYXplpPlhbzpo5/loIIgPiBpbWFrZW5zaG9rdWRvdVwgOwor55Ww5pa55bCO6Zu76IacID4gaWhvdWRvdWRlbm1ha3VcIDsKK+aMh+ekuuS7o+WQjeipniA+IHNoaWppZGFpbWVpc2hpXCA7Civlm57lvqnkuI3lj6/og70gPiBrYWlmdWt1ZnVrYW5vdVwgOwor5oud6YeR5Li7576p6ICFID4gaGFpa2luc2h1Z2lzaGFcIDsKK+S6uumBk+S4u+e+qeiAhSA+IGppbmRvdXNodWdpc2hhXCA7CivkuK3lpK7liIbpm6LluK8gPiBjaHV1b3VidW5yaXRhaVwgOwor5rip5biv5L2O5rCX5ZynID4gb250YWl0ZWlraWF0c3VcIDsKK+i2heWbveWutuS4u+e+qSA+IGNob3Vrb2trYXNodWdpXCA7CivliKnlrrPplqLkv4LogIUgPiByaWdhaWthbmtlaXNoYVwgOwor6KGG6K2w5ZOh6K2w6ZW3ID4gc2h1dWdpaW5naWNob3VcIDsKK+WwjuazoueuoeWumuaVsCA+IGRvdWhha2FudGVpc3V1XCA7CivkuIHlrZflvaLlrpropo8gPiB0ZWlqaWdhdGFqb3VnaVwgOwor57Ch5piT6KOB5Yik5omAID4ga2FuJydpc2FpYmFuc2hvXCA7Civlj43li5XkuLvnvqnogIUgPiBoYW5kb3VzaHVnaXNoYVwgOwor6Z+z5qW95Zuz5pu46aSoID4gb25nYWt1dG9zaG9rYW5cIDsKK+S5l+eUqOiHquWLlei7iiA+IGpvdXlvdWppZG91c2hhXCA7CivlnKflgJLnmoTlpJrmlbAgPiBhdHRvdXRla2l0YXN1dVwgOwor6Z2e5pS/5bqc57WE57mUID4gaGlzZWlmdXNvc2hpa2lcIDsKK+iHqueUseWKtOWDjeiAhSA+IGppeXV1cm91ZG91c2hhXCA7CivljZrmhJvkuLvnvqnogIUgPiBoYWt1YWlzaHVnaXNoYVwgOwor5a6a5pyf5LmX6LuK5Yi4ID4gdGVpa2lqb3VzaGFrZW5cIDsKK+mbu+awl+a0l+a/r+apnyA+IGRlbmtpc2VudGFrdWtpXCA7CivntYLmiKboqJjlv7Xml6UgPiBzaHV1c2Vua2luZW5iaVwgOwor56S+5Lya5Li7576p6ICFID4gc2hha2Fpc2h1Z2lzaGFcIDsKK+Wwj+Wei+iHquWLlei7iiA+IGtvZ2F0YWppZG91c2hhXCA7CivmsJHkuovoqLToqJ/ms5UgPiBtaW5qaXNvc2hvdWhvdVwgOwor56ys5LqM6YeP5a2Q5YyWID4gZGFpbmlyeW91c2hpa2FcIDsKK+S6jOWOn+WtkOWIhuWtkCA+IG5pZ2Vuc2hpYnVuc2hpXCA7CivluLjku7vmjIfmj67ogIUgPiBqb3VuaW5zaGlraXNoYVwgOwor6L6y5LqL6Kmm6aiT5aC0ID4gbm91amlzaGlrZW5qb3VcIDsKK+aDheWgseWMluekvuS8miA+IGpvdWhvdWthc2hha2FpXCA7CivkuLvoprPkuLvnvqnogIUgPiBzaHVrYW5zaHVnaXNoYVwgOwor54Sh5pWZ5Lya5Li7576pID4gbXVreW91a2Fpc2h1Z2lcIDsKK+exs+S+oeWvqeitsOS8miA+IGJlaWthc2hpbmdpa2FpXCA7CivmmYLplpPlpJblirTlg40gPiBqaWthbmdhaXJvdWRvdVwgOwor55m+56eR5YWo5pu45rS+ID4gaHlha2themVuc2hvaGFcIDsKK+S6jOeZvuS6jOWNgeaXpSA+IG5paHlha3VoYXRzdWthXCA7Civkuozph43kvqHmoLzliLYgPiBuaWp1dWtha2FrdXNlaVwgOwor5YiR5LqL6Ki06Kif5rOVID4ga2Vpamlzb3Nob3Vob3VcIDsKK+iyqeWjsuS7o+eQhuW6lyA+IGhhbmJhaWRhaXJpdGVuXCA7CivmnbHkupzoq7jmsJHml48gPiB0b3Vhc2hvbWluem9rdVwgOwor5Y2Y6JGJ6aOb6KGM5qmfID4gdGFuJyd5b3VoaWtvdWtpXCA7Civlm73kvJrorbDkuovpjLIgPiBrb2trYWlnaWppcm9rdVwgOwor5pS/5bqc5L+d6Ki85YK1ID4gc2VpZnVob3Nob3VzYWlcIDsKK+S+v+S5l+S4u+e+qeiAhSA+IGJpbmpvdXNodWdpc2hhXCA7CivkuozlpKfmlL/lhZrliLYgPiBuaWRhaXNlaXRvdXNlaVwgOwor54Sh5Yip5oGv5YWs5YK1ID4gbXVyaXNva3Vrb3VzYWlcIDsKK+i2s+e0oOaAp+WOn+eQhiA+IGFzaGlzdWpvdWdlbnJpXCA7Civos4fmnKzkuLvnvqnogIUgPiBzaGlob25zaHVnaXNoYVwgOwor5paH5YyW5Zyw55CG5a2mID4gYnVua2FjaGlyaWdha3VcIDsKK+WFrOiqjeWAmeijnOiAhSA+IGtvdW5pbmtvdWhvc2hhXCA7CivkuJbnlYzpgbjmiYvmqKkgPiBzZWthaXNlbnNodWtlblwgOwor5paw55+z5Zmo5pmC5LujID4gc2hpbnNla2tpamlkYWlcIDsKK+WPl+mok+WPguiAg+abuCA+IGp1a2Vuc2Fua291c2hvXCA7CivpnZnmraLnlLvmlL7pgIEgPiBzZWlzaGlnYWhvdXNvdVwgOwor5bCR5bm05oSf5YyW6ZmiID4gc2hvdW5lbmthbmthaW5cIDsKK+mVt+i3nemboui8uOmAgSA+IGNob3VreW9yaXl1c291XCA7Civlho3luLDku6PlkI3oqZ4gPiBzYWlraWRhaW1laXNoaVwgOwor5o6n6Ki06KOB5Yik5omAID4ga291c29oYWliYW5zaG9cIDsKK+aWh+WMluWKn+WKtOiAhSA+IGJ1bmtha291cm91c2hhXCA7CivnnJ/nqbrmjoPpmaTmqZ8gPiBzaGlua3V1c291amlraVwgOwor5Lq65b2i5rWE55Gg55KDID4gbmluZ3lvdWpvdXJ1cmlcIDsKK+aUv+ayu+ipleirluWutiA+IHNlaWppaHlvdXJvbmthXCA7CivkvJ3mib/lj5nkuovoqakgPiBkZW5zaG91am9qaXNoaVwgOwor5pyJ6KaW55WM6aOb6KGMID4geXV1c2hpa2FpaGlrb3VcIDsKK+mZjeS4ieS4luWmmeeOiyA+IGdvdXphbnplbXlvdW91XCA7CivnrYnpq5jnt5rlnLDlm7MgPiB0b3Vrb3VzZW5jaGl6dVwgOwor6KO96YCg5bm05pyI5pelID4gc2Vpem91bmVuZ2FwcGlcIDsKK+WcsOaWueS6pOS7mOeojiA+IGNoaWhvdWtvdWZ1emVpXCA7Civml6XmnKzoqp7mlZnmnKwgPiBuaWhvbmdva3lvdWhvblwgOwor5L+Y6Jmc5Y+O5a655omAID4gZnVyeW9zaHV1eW91am9cIDsKK+epuuawl+Wcp+e4ruapnyA+IGt1dWtpYXNzaHVrdWtpXCA7Civlm73pgKPoqJjlv7Xml6UgPiBrb2t1cmVua2luZW5iaVwgOwor54Sh6KiY5ZCN5oqV56WoID4gbXVraW1laXRvdWh5b3VcIDsKK+iHqueEtuS4u+e+qeiAhSA+IHNoaXplbnNodWdpc2hhXCA7CivnrqHljLrmsJfosaHlj7AgPiBrYW5rdWtpc2hvdWRhaVwgOwor5rOV5a6a5rqW5YKZ6YeRID4gaG91dGVpanVuYmlraW5cIDsKK+a1t+a0i+aAp+awl+WAmSA+IGthaXlvdXNlaWtpa291XCA7CivlpJbosqjmupblgpnpq5ggPiBnYWlrYWp1bmJpZGFrYVwgOwor5peF6KGM5Luj55CG5bqXID4gcnlva291ZGFpcml0ZW5cIDsKK+S6iOmBuOmAmumBjuiAhSA+IHlvc2VudHN1dWthc2hhXCA7CivlpbPmgKfop6PmlL7oq5YgPiBqb3NlaWthaWhvdXJvblwgOwor6YG65Lyd5a2Q5rK755mCID4gaWRlbnNoaWNoaXJ5b3VcIDsKK+e1tuWvvuS4u+e+qeiAhSA+IHpldHRhaXNodWdpc2hhXCA7CivlhbHlkIzngorkuovloLQgPiBreW91ZG91c3VpamliYVwgOwor56aP56WJ5LqL5YuZ5omAID4gZnVrdXNoaWppbXVzaG9cIDsKK+S4ieinkuezu+eVsOW4uCA+IHNhbmtha3VrZWlpam91XCA7CivmsLTnlKPoqabpqJPmiYAgPiBzdWlzYW5zaGlrZW5qb1wgOwor6LuN5LqL6KOB5Yik5omAID4gZ3VuamlzYWliYW5zaG9cIDsKK+maoOmAgOiUteeJqeizhyA+IGludGFpem91YnVzc2hpXCA7Civlj4LogIPlm7Pmm7jppKggPiBzYW5rb3V0b3Nob2thblwgOwor54Sh57ea5ZGo5rOi5pWwID4gbXVzZW5zaHV1aGFzdXVcIDsKK+mHjei+suS4u+e+qeiAhSA+IGp1dW5vdXNodWdpc2hhXCA7CivkuZflkIjoh6rli5Xou4ogPiBub3JpYWlqaWRvdXNoYVwgOwor57Sw6IOe6YG65Lyd5a2mID4gc2FpYm91aWRlbmdha3VcIDsKK+i2hemfs+azoua0l+a1hCA+IGNob3VvbnBhc2Vuam91XCA7CivliJHkuovooqvlkYrkurogPiBrZWlqaWhpa29rdW5pblwgOwor576k5Lyd5pCs5pmC6ZaTID4gZ3VuZGVucGFuamlrYW5cIDsKK+WBpeW6t+S/nemZuuazlSA+IGtlbmtvdWhva2VuaG91XCA7CivluLjku7vnkIbkuovlm70gPiBqb3VuaW5yaWppa29rdVwgOwor6Z2e6YeR5bGe5YWD57SgID4gaGlraW56b2t1Z2Vuc29cIDsKK+mZuOS4iuiHquihm+maiiA+IHJpa3Vqb3VqaWVpdGFpXCA7Civkv53pmbrli6foqpjlk6EgPiBob2tlbmthbicneXV1aW5cIDsKK+eqkue0oOWbuuWumuazlSA+IGNoaXNzb2tvdGVpaG91XCA7Civnm7jlr77mgKfljp/nkIYgPiBzb3V0YWlzZWlnZW5yaVwgOwor576O6KGT5oSb5aW95a62ID4gYmlqdXRzdWFpa291a2FcIDsKK+S4reefs+WZqOaZguS7oyA+IGNodXVzZWtraWppZGFpXCA7CivkuLvnn6XkuLvnvqnogIUgPiBzaHVjaGlzaHVnaXNoYVwgOwor6JqV57O46Kmm6aiT5omAID4gc2Fuc2hpc2hpa2Vuam9cIDsKK+eri+S9k+W5vuS9leWtpiA+IHJpdHRhaWtpa2FnYWt1XCA7CivkuI3li5XnlKPpkZHlrpogPiBmdWRvdXNhbmthbnRlaVwgOwor6ZW36Led6Zui6aOb6KGMID4gY2hvdWt5b3JpaGlrb3VcIDsKK+esrOS6jOasoeaAp+W+tCA+IGRhaW5pamlzZWljaG91XCA7Civlj6Xmp4vpgKDmlofms5UgPiBrdWtvdXpvdWJ1bnBvdVwgOwor5aOr5a6Y5YCZ6KOc55SfID4gc2hpa2Fua291aG9zZWlcIDsKK+W3oeWbnuWbs+abuOmkqCA+IGp1bmthaXRvc2hva2FuXCA7CivlvrTlhbXlv4zpgb/ogIUgPiBjaG91aGVpa2loaXNoYVwgOwor5Ye66Ki05pyf6ZmQ5rOVID4gc2h1c3Nva2lnZW5ob3VcIDsKK+i7jeeUqOi8uOmAgeapnyA+IGd1bicneW91eXVzb3VraVwgOwor6KiA6Kqe5Zyw55CG5a2mID4gZ2VuZ29jaGlyaWdha3VcIDsKK+WJjeaWueW+jOWGhuWisyA+IHplbnBvdWtvdWVuZnVuXCA7Civomavmp5jnqoHotbfngo4gPiBjaHV1eW91dG9ra2llblwgOwor5pyJ5b2i5paH5YyW6LKhID4geXV1a2VpYnVua2F6YWlcIDsKK+aXp+efs+WZqOaZguS7oyA+IGt5dXVzZWtraWppZGFpXCA7Civoh6rnlLHmsJHmqKnoq5YgPiBqaXl1dW1pbmtlbnJvblwgOwor56C055Sj6KOB5Yik5omAID4gaGFzYW5zYWliYW5zaG9cIDsKK+S6uui6q+S/neitt+azlSA+IGppbnNoaW5ob2dvaG91XCA7CivmlL7lsITmgKflhYPntKAgPiBob3VzaGFzZWlnZW5zb1wgOwor5o2V6Jmc5Y+O5a655omAID4gaG9yeW9zaHV1eW91am9cIDsKK+eUn+ioiOiyu+aMh+aVsCA+IHNlaWtlaWhpc2hpc3V1XCA7Civlm73kvJrlm7Pmm7jppKggPiBrb2trYWl0b3Nob2thblwgOwor6auY562J5byB5YuZ5a6YID4ga291dG91YmVubXVrYW5cIDsKK+aZgumWk+mghuW6j+epjSA+IGppa2FuanVuam9zZWtpXCA7CivlnLDnkIPmuKnmmpbljJYgPiBjaGlreXV1b25kYW5rYVwgOwor6Z2e5bi45Yuk6Kyb5birID4gaGlqb3VraW5rb3VzaGlcIDsKK+iHquWLlei7iuWtpuagoSA+IGppZG91c2hhZ2Fra291XCA7CivnqI7ph5Hpgb/pm6PlnLAgPiB6ZWlraW5oaW5hbmNoaVwgOwor5Lq66YGT55qE5o+05YqpID4gamluZG91dGVraWVuam9cIDsKK+a2iOiyu+iAhemBi+WLlSA+IHNob3VoaXNoYXVuZG91XCA7CivlirTlg43ln7rmupbms5UgPiByb3Vkb3VraWp1bmhvdVwgOwor5ryi5a2X5Yi26ZmQ6KuWID4ga2FuamlzZWlnZW5yb25cIDsKK+WRqOazouaVsOWBj+enuyA+IHNodXVoYXN1dWhlbicnaVwgOwor54Sh5Yi26ZmQ6LK/5piTID4gbXVzZWlnZW5ib3Vla2lcIDsKK+asoeWFg+ato+WJh+WMliA+IGppZ2Vuc2Vpc29rdWthXCA7CivkurrlkI3nlKjmvKLlrZcgPiBqaW5tZWl5b3VrYW5qaVwgOwor5b6B5aS35aSn5bCG6LuNID4gc2VpaXRhaXNob3VndW5cIDsKK+eUo+alreS6iOWCmei7jSA+IHNhbmd5b3V5b2JpZ3VuXCA7CivliKnlrZDlubPooaHnqI4gPiByaXNoaWhlaWtvdXplaVwgOwor54Sh5Lu75omA5aSn6IejID4gbXVuaW5zaG9kYWlqaW5cIDsKK+S6jOmHjeebsuaknOazlSA+IG5panV1bW91a2VuaG91XCA7Civoh6ros6Dosqzkv53pmbogPiBqaWJhaXNla2lob2tlblwgOwor6YeN54Kt6YW45pu56YGUID4ganV1dGFuc2Fuc291ZGFcIDsKK+mVt+i3nemboumbu+ipsSA+IGNob3VreW9yaWRlbndhXCA7CivpgbrkvJ3lrZDlt6XlraYgPiBpZGVuc2hpa291Z2FrdVwgOwor5LiN5Y+v6IO96YG45oqeID4gZnVrYW5vdXNlbnRha3VcIDsKK+WPpeani+mAoOimj+WJhyA+IGt1a291em91a2lzb2t1XCA7CivmiYvlvaLkuqTmj5vmiYAgPiB0ZWdhdGFrb3VrYW5qb1wgOwor5Zyw5pa56Ieq5rK75L2TID4gY2hpaG91amljaGl0YWlcIDsKK+S4jeimj+WJh+WLleipniA+IGZ1a2lzb2t1ZG91c2hpXCA7CivlrozlhajkuLvnvqnogIUgPiBrYW56ZW5zaHVnaXNoYVwgOwor5qeL5oiQ57Sg5qeL6YCgID4ga291c2Vpc29rb3V6b3VcIDsKK+i8ieiyqOWQg+awtOe3miA+IHNhaWtha2lzc3Vpc2VuXCA7CivmsLTpioDmuKnluqboqIggPiBzdWlnaW4nJ29uZG9rZWlcIDsKK+aVsOeQhuirlueQhuWtpiA+IHN1dXJpcm9ucmlnYWt1XCA7CivnmoflpKrlrZDmrr/kuIsgPiBrb3V0YWlzaGlkZW5rYVwgOwor5oim5LqJ5pyq5Lqh5Lq6ID4gc2Vuc291bWlib3VqaW5cIDsKK+egtOeUo+euoeiyoeS6uiA+IGhhc2Fua2FuemFpbmluXCA7CivljZTlrprkuJbnlYzmmYIgPiBreW91dGVpc2VrYWlqaVwgOwor5rW35LiK5L+d5a6J5bqBID4ga2Fpam91aG9hbmNob3VcIDsKK+eJueeVsOWApOWIhuinoyA+IHRva3VpY2hpYnVua2FpXCA7CivmsJHllrbljJbkvIHmpa0gPiBtaW4nJ2Vpa2FraWd5b3VcIDsKK+Wkp+ilv+a0i+aoquaWrSA+IHRhaXNlaXlvdW91ZGFuXCA7Civkurrlt6Xpgb/lporms5UgPiBqaW5rb3VoaW5pbmhvdVwgOwor6a2a576k5o6i55+l5qmfID4gZ3lvZ3VudGFuY2hpa2lcIDsKK+mBiumbouWfuuWPjeW/nCA+IHl1dXJpa2loYW4nJ25vdVwgOwor5bCP55Sw5Y6f6KmV5a6aID4gb2Rhd2FyYWh5b3Vqb3VcIDsKK+mokumfs+mYsuatouazlSA+IHNvdW9uYm91c2hpaG91XCA7CivnlpHllY/ku6PlkI3oqZ4gPiBnaW1vbmRhaW1laXNoaVwgOwor55u45a++5oCn55CG6KuWID4gc291dGFpc2Vpcmlyb25cIDsKK+mFuOWMlumYsuatouWJpCA+IHNhbmthYm91c2hpemFpXCA7CivnrKzkuozmrKHnlKPmpa0gPiBkYWluaWppc2FuZ3lvdVwgOwor5pyJ5qmf5aGp5rq25aqSID4geXV1a2llbicneW91YmFpXCA7Civpm7vlrZDoqIjnrpfmqZ8gPiBkZW5zaGlrZWlzYW5raVwgOwor5oim6ZeY54qg54my6ICFID4gc2VudG91Z2lzZWlzaGFcIDsKK+awkemWk+iIquepuuapnyA+IG1pbmthbmtvdWt1dWtpXCA7Civlj43miKbkuLvnvqnogIUgPiBoYW5zZW5zaHVnaXNoYVwgOwor6Kaz5YWJ5qGI5YaF5omAID4ga2Fua291YW4nJ25haWpvXCA7Civpq5jpvaLljJbnpL7kvJogPiBrb3VyZWlrYXNoYWthaVwgOwor6KiY5Y+36KuW55CG5a2mID4ga2lnb3Vyb25yaWdha3VcIDsKK+aMh+WQjeaJi+mFjeS6uiA+IHNoaW1laXRlaGFpamluXCA7Civoh6rou6Lou4rml4XooYwgPiBqaXRlbnNoYXJ5b2tvdVwgOwor5bmz5Z2H5aSq6Zm95pmCID4gaGVpa2ludGFpeW91amlcIDsKK+Wlveawl+aAp+e0sOiPjCA+IGtvdWtpc2Vpc2Fpa2luXCA7Civpm7vms6LmnJvpgaDpj6EgPiBkZW5wYWJvdWVua3lvdVwgOwor5Yq05YON6YGL5YuV6ICFID4gcm91ZG91dW5kb3VzaGFcIDsKK+mch+eBveiomOW/teaXpSA+IHNoaW5zYWlraW5lbmJpXCA7CivmgqrlvrPmlL/msrvlrrYgPiBha3V0b2t1c2VpamlrYVwgOwor5oOF5aCx5Li76KaB57SgID4gam91aG91c2h1eW91c29cIDsKK+WFrOatpuWQiOS9k+irliA+IGtvdWJ1Z2F0dGFpcm9uXCA7Civpm7vlhYnmjrLnpLrmnb8gPiBkZW5rb3VrZWlqaWJhblwgOwor5L6h6Zu75a2Q54q25oWLID4ga2FkZW5zaGlqb3V0YWlcIDsKK+awtOeUo+WKoOW3peWTgSA+IHN1aXNhbmtha291aGluXCA7CivlubPpnaLlub7kvZXlraYgPiBoZWltZW5raWthZ2FrdVwgOwor6Ieq6Lui6LuK572u5aC0ID4gaml0ZW5zaGFva2liYVwgOwor5pWZ6IKy5aeU5ZOh5LyaID4ga3lvdWlrdWlpbmthaVwgOwor5rC05LiK6aOb6KGM5qmfID4gc3Vpam91aGlrb3VraVwgOwor5Y6t5LiW5oKy6Kaz6ICFID4gZW5zZWloaWthbnNoYVwgOwor5b6M5pyf5Y2w6LGh5rS+ID4ga291a2lpbnNob3VoYVwgOwor5aSn6KaP5qih5oim5LqJID4gZGFpa2lib3NlbnNvdVwgOwor54Sh5ouF5L+d56S+5YK1ID4gbXV0YW5wb3NoYXNhaVwgOwor6YGg5b+D5YiG6Zui5qmfID4gZW5zaGluYnVucmlraVwgOwor6Zu75rCX5Ya36JS15bqrID4gZGVua2lyZWl6b3Vrb1wgOwor5pyA5L2O5rip5bqm6KiIID4gc2FpdGVpb25kb2tlaVwgOwor6aGn5ZWP5byB6K235aOrID4ga29tb25iZW5nb3NoaVwgOwor5LqM56Gr5YyW54Kt57SgID4gbmlyeXV1a2F0YW5zb1wgOwor5pep5pyf6K2m5oiS5qmfID4gc291a2lrZWlrYWlraVwgOwor5qeL6YCg6YG65Lyd5a2QID4ga291em91aWRlbnNoaVwgOwor6Z2S6YqF5Zmo5pmC5LujID4gc2VpZG91a2lqaWRhaVwgOwor5Lya6KiI5qSc5p+76ZmiID4ga2Fpa2Vpa2Vuc2FpblwgOwor6aaW5L2N5pS76Ziy5oimID4gc2h1aWtvdWJvdXNlblwgOwor5YWo5pa55L2N5aSW5LqkID4gemVuaG91aWdhaWtvdVwgOwor54Sh5Lq65YyW5bel5aC0ID4gbXVqaW5rYWtvdWpvdVwgOwor54Gr5LqL5aC05rOl5qOSID4ga2FqaWJhZG9yb2JvdVwgOwor5Lq65bel5qCE6aSK5YWQID4gamlua291ZWl5b3VqaVwgOwor5qyn57Gz6Ku46KiA6KqeID4gb3ViZWlzaG9nZW5nb1wgOwor5Lq65bel5a215YyW5rOVID4gamlua291ZnVrYWhvdVwgOwor6LuN5LqL6aGn5ZWP5ZujID4gZ3Vuamlrb21vbmRhblwgOwor6auY5bGk5aSp5rCX5ZuzID4ga291c291dGVua2l6dVwgOwor5Luu6Z2i6Iie6LiP5LyaID4ga2FtZW5idXRvdWthaVwgOwor5L2c5qWt6YOo5Lya5qGIID4gc2FneW91YnVrYWlhblwgOwor5pig55S76KmV6KuW5a62ID4gZWlnYWh5b3Vyb25rYVwgOwor56ys5LqM5qyh5aSn5oimID4gZGFpbmlqaXRhaXNlblwgOwor6YeO5qyh6aas5qC55oCnID4geWFqaXVtYWtvbmpvdVwgOwor6Iux5Lya6Kmx5a2m5qChID4gZWlrYWl3YWdha2tvdVwgOwor5YmN5pa55LiN5rOo5oSPID4gemVucG91ZnVjaHV1aVwgOwor5Zyw5pa55YWs5YuZ5ZOhID4gY2hpaG91a291bXVpblwgOwor6Ieq5YuV6LKp5aOy5qmfID4gamlkb3VoYW5iYWlraVwgOwor6Zu756OB6Kq/55CG5ZmoID4gZGVuamljaG91cmlraVwgOwor6Iiq56m66Ieq6KGb6ZqKID4ga291a3V1amllaXRhaVwgOwor5qmf6Zai5oqV6LOH5a62ID4ga2lrYW50b3VzaGlrYVwgOwor5Zue6Lev6YGu5pat5qmfID4ga2Fpcm9zaGFkYW5raVwgOwor6IGW6Lev5Yqg55eF6ZmiID4gc2Vpcm9rYWJ5b3VpblwgOwor5YiG6Zui5Li7576p6ICFID4gYnVucmlzaHVnaXNoYVwgOwor5oay5rOV6KiY5b+15pelID4ga2VucG91a2luZW5iaVwgOwor5Yqg5rib5oq15oqX5ZmoID4ga2FnZW50ZWlrb3VraVwgOwor6Ieq5YuV6LKp5aOy5ZmoID4gamlkb3VoYW5iYWlraVwgOwor54Sh5YWN6Kix6YGL6LuiID4gbXVtZW5reW91bnRlblwgOwor5LiN5Y+v6KaW5YWJ57eaID4gZnVrYXNoaWtvdXNlblwgOwor6LK/5piT6Ieq55Sx5YyWID4gYm91ZWtpaml5dXVrYVwgOwor56m65rCX5Yi25YuV5qmfID4ga3V1a2lzZWlkb3VraVwgOwor5LqU5Y2B5q2p55m+5q2pID4gZ29qdXBwb2h5YXBwb1wgOwor5Y6f55CG5Li7576p6ICFID4gZ2VucmlzaHVnaXNoYVwgOwor5aSa5YWD5paH5YyW6KuWID4gdGFnZW5idW5rYXJvblwgOwor6K2y5rih5oCn6aCQ6YeRID4gam91dG9zZWl5b2tpblwgOwor5Zu95a625Li7576p6ICFID4ga29ra2FzaHVnaXNoYVwgOwor5rK/5bK46K2m5YKZ6ZqKID4gZW5nYW5rZWliaXRhaVwgOwor5YCL5Lq65Li7576p6ICFID4ga29qaW5zaHVnaXNoYVwgOwor5aSW5Lqk5aeU5ZOh6ZW3ID4gZ2Fpa291aWluY2hvdVwgOwor54Sh5oq15oqX5Li7576pID4gbXV0ZWlrb3VzaHVnaVwgOwor5pS+5bCE6IO95rGa5p+TID4gaG91c2hhbm91b3NlblwgOwor6Zu75rCX6Ieq5YuV6LuKID4gZGVua2lqaWRvdXNoYVwgOwor5YSq55Sf5L+d6K235rOVID4geXV1c2VpaG9nb2hvdVwgOwor5Zyw5pa55LqL5YuZ5omAID4gY2hpaG91amltdXNob1wgOwor6Ly45YWl6Ieq55Sx5YyWID4geXVueXV1aml5dXVrYVwgOwor54Sh5Yip5oGv5YK15YuZID4gbXVyaXNva3VzYWltdVwgOwor56Gr6buE6YW45YyW54mpID4gaW91c2Fua2FidXRzdVwgOwor6YGT6Lev5o6D6Zmk5Lq6ID4gZG91cm9zb3VqaWppblwgOwor5LuB6Lyq5Yqg54uC6KiAID4gbml3YWtha3lvdWdlblwgOwor6Ieq6Ieq5YWs77yT5YWaID4gamlqaWtvdXNhbnRvdVwgOwor5rCX566h5pSv6IK654KOID4ga2lrYW5zaGloYWllblwgOwor5aSa6YeN5YK15YuZ6ICFID4gdGFqdXVzYWltdXNoYVwgOwor6Kuu5ZWP5aeU5ZOh5LyaID4gc2hpbW9uJydpaW5rYWlcIDsKK+mrmOmrmOW6pumjm+ihjCA+IGtvdWtvdWRvaGlrb3VcIDsKK+WbveS8muitsOS6i+WggiA+IGtva2thaWdpamlkb3VcIDsKK+S6jOWNgeWbm+evgOawlyA+IG5panV1c2hpc2Vra2lcIDsKK+eEoeW9ouaWh+WMluiyoSA+IG11a2VpYnVua2F6YWlcIDsKK+W4guWgtOiHqueUseWMliA+IHNoaWpvdWppeXV1a2FcIDsKK+e1jOWWtuWkmuinkuWMliA+IGtlaWVpdGFrYWt1a2FcIDsKK+S4u+aIkeS4u+e+qeiAhSA+IHNodWdhc2h1Z2lzaGFcIDsKK+aal+WPt+WMluaJi+azlSA+IGFuZ291a2FzaHVob3VcIDsKK+S4jeimi+i7ouiKuOiAhSA+IG1penV0ZW5nZWlzaGFcIDsKK+WKn+WIqeS4u+e+qeiAhSA+IGtvdXJpc2h1Z2lzaGFcIDsKK+iHquWLlei7iuS/nemZuiA+IGppZG91c2hhaG9rZW5cIDsKK+iHquW3semhleekuuassiA+IGppa29rZW5qaXlva3VcIDsKK+eEoemFjeW9k+S/nemZuiA+IG11aGFpdG91aG9rZW5cIDsKK+aenOaoueagveWfueiAhSA+IGthanVzYWliYWlzaGFcIDsKK+ijgeWIpOWumOW/jOmBvyA+IHNhaWJhbmthbmtpaGlcIDsKK+mdnuatpuijheWcsOW4ryA+IGhpYnVzb3VjaGl0YWlcIDsKK+epuuawl+a4hea1hOapnyA+IGt1dWtpc2Vpam91a2lcIDsKK+S4gOS6i+S4jeWGjeitsCA+IGljaGlqaWZ1c2FpZ2lcIDsKK+WJteW7uuiomOW/teaXpSA+IHNvdWtlbmtpbmVuYmlcIDsKK+aZrumBjeWmpeW9k+aApyA+IGZ1aGVuZGF0b3VzZWlcIDsKK+WOn+WtkOegtOWjiuapnyA+IGdlbnNoaWhha2Fpa2lcIDsKK+e1kOWpmuiomOW/teaXpSA+IGtla2tvbmtpbmVuYmlcIDsKK+Wkp+mbqOazqOaEj+WgsSA+IG9vYW1lY2h1dWlob3VcIDsKK+exs+adsemDqOaZgumWkyA+IGJlaXRvdWJ1amlrYW5cIDsKK+WKo+aAp+mBuuS8neWtkCA+IHJlc3NlaWlkZW5zaGlcIDsKK+eEoeS+oeWApOizh+eUoyA+IG11a2FjaGlzaGlzYW5cIDsKK+WBpeW6t+S/nemZuuWMuyA+IGtlbmtvdWhva2VuJydpXCA7CivluLjku7vlp5Tlk6HkvJogPiBqb3VuaW4nJ2lpbmthaVwgOwor6Ieq55Sx5Li7576p6ICFID4gaml5dXVzaHVnaXNoYVwgOwor55+t5rOi5Y+X5L+h5qmfID4gdGFucGFqdXNoaW5raVwgOwor56C05aOK5Li7576p6ICFID4gaGFrYWlzaHVnaXNoYVwgOwor5b6h6YO95ZCI5Li7576pID4gZ290c3Vnb3VzaHVnaVwgOwor5LqM5Y2B5pel5aSn5qC5ID4gaGF0c3VrYWRhaWtvblwgOwor6JC95LiL5YKY6YOo6ZqKID4gcmFra2FzYW5idXRhaVwgOwor6ZW36Led6Zui5L6d5a2YID4gY2hvdWt5b3JpaXpvblwgOwor56ym5Y+35aSJ5o+b5ZmoID4gZnVnb3VoZW5rYW5raVwgOwor6YCB6YeR5bCP5YiH5omLID4gc291a2lua29naXR0ZVwgOwor5a++5oim6LuK54Gr5ZmoID4gdGFpc2Vuc2hha2FraVwgOwor5byX5YyW5rC057Sg6YW4ID4gZnVra2FzdWlzb3NhblwgOwor55u46KOc5oCn5Y6f55CGID4gc291aG9zZWlnZW5yaVwgOwor6JK45rCX5qmf6Zai6LuKID4gam91a2lraWthbnNoYVwgOwor5paH5YyW5LqL5qWt6YOoID4gYnVua2FqaWd5b3VidVwgOwor54Sh6KiY5ZCN56S+5YK1ID4gbXVraW1laXNoYXNhaVwgOwor5ZCI5ZCM5oWw6ZyK56WtID4gZ291ZG91aXJlaXNhaVwgOwor54Gr54G95aCx55+l5qmfID4ga2FzYWlob3VjaGlraVwgOwor6Zu75rOi5o6i55+l5qmfID4gZGVucGF0YW5jaGlraVwgOwor5Y+v5aSJ5oq15oqX5ZmoID4ga2FoZW50ZWlrb3VraVwgOwor5YWs5YuZ5ZOh6Kmm6aiTID4ga291bXVpbnNoaWtlblwgOwor5a6H5a6Z6aOb6KGM5aOrID4gdWNodXVoaWtvdXNoaVwgOwor55yL6K235amm5a2m6ZmiID4ga2FuZ29mdWdha3VpblwgOwor5Y2B5a2X6LuN6aiO5aOrID4ganV1amlndW5raXNoaVwgOwor54Sh5qmf6auY5YiG5a2QID4gbXVraWtvdWJ1bnNoaVwgOwor54Gr54G95aCx55+l5ZmoID4ga2FzYWlob3VjaGlraVwgOwor6Zu75rOi5o6i55+l5ZmoID4gZGVucGF0YW5jaGlraVwgOwor5oyH5o+u5omA5ryU57+SID4gc2hpa2lqb2Vuc2h1dVwgOwor5LqM6YW45YyW56qS57SgID4gbmlzYW5rYWNoaXNzb1wgOwor6Ieq5YuV6LuK6Zu76KmxID4gamlkb3VzaGFkZW53YVwgOwor5oOF5aCx5Y+v6KaW5YyWID4gam91aG91a2FzaGlrYVwgOwor5pGC5rCP77yS77yQ5bqmID4gc2Vzc2hpbmlqdXVkb1wgOwor5bCP5Z6L6LWk5a626JqKID4ga29nYXRhYWthaWVrYVwgOwor57WQ5ama5oqr6Zyy5a60ID4ga2Vra29uaGlyb3VlblwgOwor5rW35LiK6Ieq6KGb6ZqKID4ga2Fpam91amllaXRhaVwgOwor5Y6f5qGI5aeU5ZOh5LyaID4gZ2VuJydhbicnaWlua2FpXCA7CivpgbjmiYvmqKnoqablkIggPiBzZW5zaHVrZW5qaWFpXCA7Civml6XlkozopovkuLvnvqkgPiBoaXlvcmltaXNodWdpXCA7Civku67oo4XoiJ7ouI/kvJogPiBrYXNvdWJ1dG91a2FpXCA7Civpga7lhYnlmajlnJ/lgbYgPiBzaGFrb3VraWRvZ3V1XCA7CivkuIvmsLTlh6bnkIbloLQgPiBnZXN1aXNob3Jpam91XCA7CivlkIjnkIbkuLvnvqnogIUgPiBnb3VyaXNodWdpc2hhXCA7Civmpb3lmajmvJTlpY/ogIUgPiBnYWtraWVuc291c2hhXCA7Civlj6TlhbjkuLvnvqnogIUgPiBrb3RlbnNodWdpc2hhXCA7Civlm73lnJ/lnLDnkIbpmaIgPiBrb2t1ZG9jaGlyaWluXCA7CivluILooZfljJbljLrln58gPiBzaGlnYWlrYWt1aWtpXCA7Civpm7vmsJfmqZ/plqLou4ogPiBkZW5raWtpa2Fuc2hhXCA7CivlvKXmrKHppqzmoLnmgKcgPiB5YWppdW1ha29uam91XCA7CivplovmoKHoqJjlv7Xml6UgPiBrYWlrb3VraW5lbmJpXCA7CivkuI3lj6/nn6Xoq5bogIUgPiBmdWthY2hpcm9uc2hhXCA7CivnhKHoqJjlkI3lgrXmqKkgPiBtdWtpbWVpc2Fpa2VuXCA7Civlhajms6Llj5fkv6HmqZ8gPiB6ZW5wYWp1c2hpbmtpXCA7CivlubPlkozkuLvnvqnogIUgPiBoZWl3YXNodWdpc2hhXCA7CivpnZLlpKnkupXkuojnrpcgPiBhb3RlbmpvdXlvc2FuXCA7Civnirbms4HmhI/lkbPoq5YgPiBqb3VreW91aW1pcm9uXCA7CivmvKLlrZfmlofljJblnI8gPiBrYW5qaWJ1bmtha2VuXCA7Civmra/np5HmioDlt6Xlo6sgPiBzaGlrYWdpa291c2hpXCA7CivmtbfkuIrovLjpgIHot68gPiBrYWlqb3V5dXNvdXJvXCA7Civoqr/lgZzlp5Tlk6HkvJogPiBjaG91dGVpaWlua2FpXCA7CivooYzmlrnkuI3mmI7ogIUgPiB5dWt1ZWZ1bWVpc2hhXCA7CivlgIvkurrnmoTmhI/oposgPiBrb2ppbnRla2lpa2VuXCA7CivljJflm73otaTmtbfogIEgPiBob2trb2t1YWthZWJpXCA7Civkvb/pgJTkuI3mmI7ph5EgPiBzaGl0b2Z1bWVpa2luXCA7CivmsJHkuLvljJbpgYvli5UgPiBtaW5zaHVrYXVuZG91XCA7CivlpKnmsJfnm7joq4fmiYAgPiB0ZW5raXNvdWRhbmpvXCA7Civlj4LliqDluIzmnJvogIUgPiBzYW5rYWtpYm91c2hhXCA7Civmh5DnlpHkuLvnvqnogIUgPiBrYWlnaXNodWdpc2hhXCA7CivluILorbDkvJrorbDlk6EgPiBzaGlnaWthaWdpaW5cIDsKK+S4reWkruWnlOWToeS8miA+IGNodXVvdWlpbmthaVwgOwor6IOD6YW46YGO5aSa55eHID4gaXNhbmthdGFzaG91XCA7Civpm7vmsJfpmbDmgKfluqYgPiBkZW5raWluc2VpZG9cIDsKK+eEoeiomOWQjemgkOmHkSA+IG11a2ltZWl5b2tpblwgOwor5Yip5bex5Li7576p6ICFID4gcmlrb3NodWdpc2hhXCA7Civlm73lrrblhazli5nlk6EgPiBrb2trYWtvdW11aW5cIDsKK+W4jOWcn+mhnuWFg+e0oCA+IGtpZG9ydWlnZW5zb1wgOwor6Zu75rCX5o6D6Zmk5qmfID4gZGVua2lzb3VqaWtpXCA7CivolpTolofljYHlrZflm6MgPiBiYXJhanV1amlkYW5cIDsKK+WvjOWjq+eBq+WxseW4ryA+IGZ1amlrYXphbnRhaVwgOwor5pif5bqn5oqV5b2x5qmfID4gc2VpemF0b3VlaWtpXCA7CivmrKflt57lp5Tlk6HkvJogPiBvdXNodXVpaW5rYWlcIDsKK+S4iuS9jeS6kuaPm+aApyA+IGpvdWlnb2thbnNlaVwgOwor5pS+5bCE57ea56eR5Yy7ID4gaG91c2hhc2Vua2FpXCA7Civngavngo7mlL7lsITlmaggPiBrYWVuaG91c2hha2lcIDsKK+WQiOWQjOWnlOWToeS8miA+IGdvdWRvdWlpbmthaVwgOwor6YG655Sj566h55CG5Lq6ID4gaXNhbmthbnJpbmluXCA7Civosr/mmJPkvp3lrZjluqYgPiBib3Vla2lpem9uZG9cIDsKK+WKtOWDjeWnlOWToeS8miA+IHJvdWRvdWlpbmthaVwgOwor5qih5Z6L6aOb6KGM5qmfID4gbW9rZWloaWtvdWtpXCA7CivkuIvkvY3nr4TnlofljJYgPiBrYWloYW5jaHV1a2FcIDsKK+mdnuWWtuWIqeWbo+S9kyA+IGhpZWlyaWRhbnRhaVwgOwor5Lqc54ax5biv5rCX5YCZID4gYW5ldHRhaWtpa291XCA7CivnhKHmlL/lupzkuLvnvqkgPiBtdXNlaWZ1c2h1Z2lcIDsKK+enu+WLleWbs+abuOmkqCA+IGlkb3V0b3Nob2thblwgOwor5a6f6KGM5aeU5ZOh5LyaID4gamlra291aWlua2FpXCA7CivnlZnlrojnlarpm7voqbEgPiBydXN1YmFuZGVud2FcIDsKK+aknOiojuWnlOWToeS8miA+IGtlbnRvdWlpbmthaVwgOwor6KGG6K2w6Zmi6K2w5ZOhID4gc2h1dWdpaW5naWluXCA7CivpgbjogIPlp5Tlk6HkvJogPiBzZW5rb3VpaW5rYWlcIDsKK+mhnue+qeiqnui+nuWFuCA+IHJ1aWdpZ29qaXRlblwgOwor5Y+z5pa56auY6bqX5qW9ID4gdWhvdWtvbWFnYWt1XCA7CivogqXljprmgKfpvLvngo4gPiBoaWtvdXNlaWJpZW5cIDsKK+S6nOmFuOWMlueqkue0oCA+IGFzYW5rYWNoaXNzb1wgOwor5a6J5a6a5ZCM5L2N5L2TID4gYW50ZWlkb3VpdGFpXCA7CivmloflrZfnrKblj7fns7sgPiBtb2ppZnVnb3VrZWlcIDsKK+WMu+eZgui8uOmAgeapnyA+IGlyeW91eXVzb3VraVwgOwor6YGO6YW45YyW5rC057SgID4ga2FzYW5rYXN1aXNvXCA7Civku6PnkIblp5Tku7vnirYgPiBkYWlyaWluaW5qb3VcIDsKK+S6nOWvkuW4r+awl+WAmSA+IGFrYW50YWlraWtvdVwgOwor6auY6Z+z6YOo6KiY5Y+3ID4ga291b25idWtpZ291XCA7CivkvY3nm7jlub7kvZXlraYgPiBpc291a2lrYWdha3VcIDsKK+S8iuWLouWkp+elnuWuriA+IGlzZWRhaWppbmd1dVwgOwor5LqM6YW45YyW54Kt57SgID4gbmlzYW5rYXRhbnNvXCA7CivkvY7pn7Ppg6joqJjlj7cgPiB0ZWlvbmJ1a2lnb3VcIDsKK+aEm+S7luS4u+e+qeiAhSA+IGFpdGFzaHVnaXNoYVwgOwor5Li75oSP5Li7576p6ICFID4gc2h1aXNodWdpc2hhXCA7CivmrKHphbjljJbngq3ntKAgPiBqaXNhbmthdGFuc29cIDsKK+ayu+Wuiee2reaMgeazlSA+IGNoaWFuJydpamlob3VcIDsKK+S6leaIuOerr+S8muitsCA+IGlkb2JhdGFrYWlnaVwgOwor5bqm5pWw5YiG5biD5ZuzID4gZG9zdXVidW5wdXp1XCA7Civoh6rli5Xou4rkuovmlYUgPiBqaWRvdXNoYWppa29cIDsKK+i+suWcsOWnlOWToeS8miA+IG5vdWNoaWlpbmthaVwgOwor5YK15YuZ5LiN5bGl6KGMID4gc2FpbXVmdXJpa291XCA7CivkuIDphbjljJbngq3ntKAgPiBpc3NhbmthdGFuc29cIDsKK+S7mOWKoOS+oeWApOeojiA+IGZ1a2FrYWNoaXplaVwgOwor5bi4572u5aeU5ZOh5LyaID4gam91Y2hpaWlua2FpXCA7Civlhazlronlp5Tlk6HkvJogPiBrb3VhbicnaWlua2FpXCA7CivpnZ7llrbliKnkuovmpa0gPiBoaWVpcmlqaWd5b3VcIDsKK+e1jOWWtuWQiOeQhuWMliA+IGtlaWVpZ291cmlrYVwgOwor5byB6K235L6d6aC85Lq6ID4gYmVuZ29pcmFpbmluXCA7CivliKnku5bkuLvnvqnogIUgPiByaXRhc2h1Z2lzaGFcIDsKK+Wwiueah+eOi+aUmOWktyA+IHNvbicnbm91am91aVwgOwor6Z2e6ZaL56S65ZCI5oSPID4gaGlrYWlqaWdvdWlcIDsKK+imi+anmOimi+ecn+S8vCA+IG1peW91bWltYW5lXCA7CivpmL/lkYbpmYDnvoXntYwgPiBhaG9kYXJha3lvdVwgOwor5rOV5YuZ5aeU5ZOh5LyaID4gaG91bXVpaW5rYWlcIDsKK+iEium7hOmdkum4muWTpSA+IHNla2lzZWlpbmtvXCA7CivlsYvmoLnoo4/pg6jlsYsgPiB5YW5ldXJhYmV5YVwgOwor6Zi/5aSa56aP6aKo6YKqID4gb3RhZnVrdWthemVcIDsKK+S4jemaj+aEj+mBi+WLlSA+IGZ1enVpaXVuZG91XCA7Civml6XmnKzoqp7mloflrZcgPiBuaWhvbmdvbW9qaVwgOwor5bmz5ZKM57at5oyB6LuNID4gaGVpd2FpamlndW5cIDsKK+iAs+m8u+WSveWWieenkSA+IGppYmlpbmtvdWthXCA7Civlj4LorbDpmaLorbDlk6EgPiBzYW5naWluZ2lpblwgOwor5rGf5oi45YmN5a+/5Y+4ID4gZWRvbWFlenVzaGlcIDsKK+iHquiomOa4qeW6puioiCA+IGppa2lvbmRva2VpXCA7Civmupblgpnlp5Tlk6HkvJogPiBqdW5iaWlpbmthaVwgOwor5LiL5L2N5LqS5o+b5oCnID4ga2FpZ29rYW5zZWlcIDsKK+S6nOmJm+iPr+i7n+iGjyA+IGFlbmthbmFua291XCA7CivkupznsbPliKnliqDmnYkgPiBhbWVyaWthc3VnaVwgOwor5pGp6Ki25LiN5oCd6K2wID4gbWFrYWZ1c2hpZ2lcIDsKK+eUo+WppuS6uuenkeWMuyA+IHNhbmZ1amlua2FpXCA7CivpgYvllrblp5Tlk6HkvJogPiB1bicnZWlpaW5rYWlcIDsKK+WQjOmfs+eVsOe+qeiqniA+IGRvdW9uJydpZ2lnb1wgOwor5Ye65p2l5LiN5Ye65p2lID4gZGVraWZ1ZGVraVwgOwor5b6h6auY56WW6aCt5be+ID4gb2tvc296dWtpblwgOwor5LqM6YW45YyW56Gr6buEID4gbmlzYW5rYWlvdVwgOwor5Y2B6YeN5LqM5Y2B6YeNID4gdG9laGF0YWVcIDsKK+mVt+aXpeakjeeJqSA+IGNob3VqaXRzdXNob2t1YnV0c3VcIDsKK+W+i+S7pOagvOW8jyA+IHJpdHN1cnlvdWt5YWt1c2hpa2lcIDsKK+mjn+iCieakjeeJqSA+IHNob2t1bmlrdXNob2t1YnV0c3VcIDsKK+ebtOaOpeaOpee2miA+IGNob2t1c2V0c3VzZXRzdXpva3VcIDsKK+mjn+iZq+akjeeJqSA+IHNob2t1Y2h1dXNob2t1YnV0c3VcIDsKK+S4gOaXpeS4gOaXpSA+IGljaGluaWNoaWljaGluaWNoaVwgOwor55+t5pel5qSN54mpID4gdGFuaml0c3VzaG9rdWJ1dHN1XCA7CivmqJnmupblh7rlipsgPiBoeW91anVuc2h1dHN1cnlva3VcIDsKK+S/oeiznuW/hee9sCA+IHNoaW5zaG91aGl0c3ViYXRzdVwgOwor54m55b605oq95Ye6ID4gdG9rdWNob3VjaHV1c2h1dHN1XCA7CivnnYDnlJ/mpI3niakgPiBjaGFrdXNlaXNob2t1YnV0c3VcIDsKK+Wun+eJqeWPluW8lSA+IGppdHN1YnV0c3V0b3JpaGlraVwgOwor55u05o6l5o6l6KemID4gY2hva3VzZXRzdXNlc3Nob2t1XCA7Civosrjku5jkv6HoqJcgPiBrYXNoaXRzdWtlc2hpbnRha3VcIDsKK+WNs+aXpemAn+mBlCA+IHNva3VqaXRzdXNva3V0YXRzdVwgOwor55m+55m655m+5LitID4gaHlhcHBhdHN1aHlha3VjaHV1XCA7Civlj5bnt6DlvbnkvJogPiB0b3Jpc2hpbWFyaXlha3VrYWlcIDsKK+WHuuWKm+ijhee9riA+IHNodXRzdXJ5b2t1c291Y2hpXCA7CivopIfpm5HpqqjmipggPiBmdWt1emF0c3Vrb3NzZXRzdVwgOwor54mp55qE5rWB6YCaID4gYnV0c3V0ZWtpcnl1dXRzdXVcIDsKK+WNgeW5tOS4gOaYlCA+IGp1dW5lbmhpdG9tdWthc2hpXCA7CivnpaXmnIjlkb3ml6UgPiBzaG91dHN1a2ltZWluaWNoaVwgOwor5oim55Wl54mp6LOqID4gc2Vucnlha3VidXNzaGl0c3VcIDsKK+WwseiBt+a0u+WLlSA+IHNodXVzaG9rdWthdHN1ZG91XCA7CivlvLHogonlvLfpo58gPiBqYWt1bmlrdWt5b3VzaG9rdVwgOwor5Ly457iu56iO546HID4gc2hpbnNodWt1emVpcml0c3VcIDsKK+elnuWHuumsvOayoSA+IHNoaW5zaHV0c3VraWJvdHN1XCA7CivlkLjooYDli5XniakgPiBreXV1a2V0c3Vkb3VidXRzdVwgOwor54ax5Yqb5a2m55qEID4gbmV0c3VyaWtpZ2FrdXRla2lcIDsKK+akjeeJqeaOoembhiA+IHNob2t1YnV0c3VzYWlzaHV1XCA7Civlh7rlipvnq6/lrZAgPiBzaHV0c3VyeW9rdXRhbnNoaVwgOwor5qiZ5rqW5YWl5YqbID4gaHlvdWp1bicnbnl1dXJ5b2t1XCA7CivoprPokYnmpI3niakgPiBrYW4nJ3lvdXNob2t1YnV0c3VcIDsKK+S4g+eUn+WgseWbvSA+IHNoaWNoaXNob3Vob3Vrb2t1XCA7Civlrp/nianmj4/lhpkgPiBqaXRzdWJ1dHN1YnlvdXNoYVwgOwor5q6655yf6I+M6JasID4gc2F0c3VzaGlua2luJyd5YWt1XCA7CivmqJnmnKzmir3lh7ogPiBoeW91aG9uY2h1dXNodXRzdVwgOwor57eP5ous6LOq5ZWPID4gc291a2F0c3VzaGl0c3Vtb25cIDsKK+a9ruWKm+eZuumbuyA+IGNob3VyeW9rdWhhdHN1ZGVuXCA7Civnm7TmjqXos7zlhaUgPiBjaG9rdXNldHN1a291bnl1dVwgOwor56qu5qW155uu55qEID4ga3l1dWt5b2t1bW9rdXRla2lcIDsKK+WkqeeFp+Wkp+elniA+IGFtYXRlcmFzdW9vbWlrYW1pXCA7Civos6rlrp/liZvlgaUgPiBzaGl0c3VqaXRzdWdvdWtlblwgOwor5bGA5aSW5Lit56uLID4ga3lva3VnYWljaHV1cml0c3VcIDsKK+iJsuW9qeiqv+evgCA+IHNoaWtpc2FpY2hvdXNldHN1XCA7CivolqznlKjmpI3niakgPiB5YWt1eW91c2hva3VidXRzdVwgOwor56eL6Zyc54OI5pelID4gc2h1dXNvdXJldHN1aml0c3VcIDsKK+ebtOaOpeiri+axgiA+IGNob2t1c2V0c3VzZWlreXV1XCA7CivlrpfmlZnlk7LlraYgPiBzaHV1a3lvdXRldHN1Z2FrdVwgOwor6Jas54mp5Lit5q+SID4geWFrdWJ1dHN1Y2h1dWRva3VcIDsKK+Wwj+W/g+e/vOe/vCA+IHNob3VzaGluJyd5b2t1eW9rdVwgOwor54m55Yil5bmV5YOaID4gdG9rdWJldHN1YmFrdXJ5b3VcIDsKK+WIhuijgueJqeizqiA+IGJ1bnJldHN1YnVzc2hpdHN1XCA7Civnm7TmjqXnhafmmI4gPiBjaG9rdXNldHN1c2hvdW1laVwgOwor5Zix6KiX5q665Lq6ID4gc2hva3V0YWt1c2F0c3VqaW5cIDsKK+a5v+eUn+akjeeJqSA+IHNoaXNzZWlzaG9rdWJ1dHN1XCA7CivkuIPljYHkurroqLMgPiBzaGljaGlqdXVuaW4nJ3lha3VcIDsKK+eZuueZjOeJqeizqiA+IGhhdHN1Z2FuYnVzc2hpdHN1XCA7Civnmb3plbfpoIjpr6ggPiBzaGlyb25hZ2FzdWt1amlyYVwgOwor6Kaz6LOe5qSN54mpID4ga2Fuc2hvdXNob2t1YnV0c3VcIDsKK+W/g+elnuWWquWksSA+IHNoaW5zaGluc291c2hpdHN1XCA7CivpgJrkv5flsI/oqqwgPiB0c3V1em9rdXNob3VzZXRzdVwgOwor55m+5oim55m+5YudID4gaHlha3VzZW5oeWFrdXNob3VcIDsKK+aPkOeBr+ihjOWIlyA+IGNob3VjaGluZ3lvdXJldHN1XCA7CivlpLHmpa3lr77nrZYgPiBzaGl0c3VneW91dGFpc2FrdVwgOwor5bCP5b+D57+844CFID4gc2hvdXNoaW4nJ3lva3V5b2t1XCA7Civlt6blgbTpgJrooYwgPiBoaWRhcmlnYXdhdHN1dWtvdVwgOwor5pWR5Ye65L2c5oimID4ga3l1dXNodXRzdXNha3VzZW5cIDsKK+WupOWGheijhemjviA+IHNoaXRzdW5haXNvdXNob2t1XCA7Civnm7TmjqXnq7bkuokgPiBjaG9rdXNldHN1a3lvdXNvdVwgOwor5pet5pel5piH5aSpID4ga3lva3VqaXRzdXNob3V0ZW5cIDsKK+iYmuiLlOakjeeJqSA+IHNlbnRhaXNob2t1YnV0c3VcIDsKK+eglOeptuWupOajnyA+IGtlbmt5dXVzaGl0c3V0b3VcIDsKK+ilv+WBtOiruOWbvSA+IG5pc2hpZ2F3YXNob2tva3VcIDsKK+iEiuakjuWLleeJqSA+IHNla2l0c3VpZG91YnV0c3VcIDsKK+ahkeWOn+ahkeWOnyA+IGt1d2FiYXJha3V3YWJhcmFcIDsKK+S6q+alveeUn+a0uyA+IGt5b3VyYWt1c2Vpa2F0c3VcIDsKK+WFpeWKm+mbu+a1gSA+IG55dXVyeW9rdWRlbnJ5dXVcIDsKK+WNgeW5tOS4gOaXpSA+IGp1dW5lbicnaWNoaWppdHN1XCA7Civpoqjkv5flsI/oqqwgPiBmdXV6b2t1c2hvdXNldHN1XCA7CivkvY7ooYDlnKfnl4cgPiB0ZWlrZXRzdWF0c3VzaG91XCA7CivomZrjgIXlrp/jgIUgPiBreW9reW9qaXRzdWppdHN1XCA7CivmioDooZPljZTlipsgPiBnaWp1dHN1a3lvdXJ5b2t1XCA7CivnqbrkuK3ooZ3nqoEgPiBrdXVjaHV1c2hvdXRvdHN1XCA7CivljYPnr4fkuIDlvosgPiBzZW5wZW4nJ2ljaGlyaXRzdVwgOwor5paZ55CG5pWZ5a6kID4gcnlvdXJpa3lvdXNoaXRzdVwgOwor5pys5qC85bCP6KqsID4gaG9ua2FrdXNob3VzZXRzdVwgOwor5Zu956uL5YqH5aC0ID4ga29rdXJpdHN1Z2VraWpvdVwgOwor6I2J6aOf5YuV54mpID4gc291c2hva3Vkb3VidXRzdVwgOwor55u05o6l6YG45oyZID4gY2hva3VzZXRzdXNlbmt5b1wgOwor55Sf6ICF5b+F5ruFID4gc2hvdWphaGl0c3VtZXRzdVwgOwor54ax5biv5qSN54mpID4gbmV0dGFpc2hva3VidXRzdVwgOwor5p2+5LiL6Zu75belID4gbWF0c3VzaGl0YWRlbmtvdVwgOwor5ZWG5qWt566X6KGTID4gc2hvdWd5b3VzYW5qdXRzdVwgOwor5oim5oim5qCX5qCXID4gc2Vuc2Vucml0c3VyaXRzdVwgOwor5o+u55m654mp6LOqID4ga2loYXRzdWJ1c3NoaXRzdVwgOwor55m65YWJ5qSN54mpID4gaGFra291c2hva3VidXRzdVwgOwor6Zu75Yqb5L6b57WmID4gZGVucnlva3VreW91a3l1dVwgOwor5oim55Wl54iG5pKDID4gc2Vucnlha3ViYWt1Z2VraVwgOwor5aaK5aig5Lit57W2ID4gbmluc2hpbmNodXV6ZXRzdVwgOwor55u05o6l5Lya6KuHID4gY2hva3VzZXRzdWthaWRhblwgOwor5Ymy5aKX6LOD6YeRID4gd2FyaW1hc2hpY2hpbmdpblwgOwor5L2c5LuY6Z2i56mNID4gc2FrdWR6dWtlbWVuc2VraVwgOwor5pel54us5Y2U5LyaID4gbmljaGlkb2t1a3lvdWthaVwgOwor5pel5bi455Sf5rS7ID4gbmljaGlqb3VzZWlrYXRzdVwgOwor5q2z5YWl5q2z5Ye6ID4gc2Fpbnl1dXNhaXNodXRzdVwgOwor54m55Yil5oCl6KGMID4gdG9rdWJldHN1a3l1dWtvdVwgOwor6Lui5Ye66Ki85piOID4gdGVuc2h1dHN1c2hvdW1laVwgOwor5pWR6I2S5L2c54mpID4ga3l1dWtvdXNha3Vtb3RzdVwgOwor5Zyw54ax55m66Zu7ID4gY2hpbmV0c3VoYXRzdWRlblwgOwor6Jas54mp55mC5rOVID4geWFrdWJ1dHN1cnlvdWhvdVwgOwor6aOf57On6YWN57WmID4gc2hva3VyeW91aGFpa3l1dVwgOwor55u057O76KGA5pePID4gY2hva2tlaWtldHN1em9rdVwgOwor6LOq5ZWP55So57SZID4gc2hpdHN1bW9uJyd5b3VzaGlcIDsKK+eLrOi6q+eUn+a0uyA+IGRva3VzaGluc2Vpa2F0c3VcIDsKK+itpuWvn+W9k+WxgCA+IGtlaXNhdHN1dG91a3lva3VcIDsKK+ebtOaOpeS8neafkyA+IGNob2t1c2V0c3VkZW5zZW5cIDsKK+mdkuepuuaVmeWupCA+IGFvem9yYWt5b3VzaGl0c3VcIDsKK+mdnuWroeWHuuWtkCA+IGhpY2hha3VzaHV0c3VzaGlcIDsKK+eUn+a0u+anmOW8jyA+IHNlaWthdHN1eW91c2hpa2lcIDsKK+eJh+mBk+aWmemHkSA+IGthdGFtaWNoaXJ5b3VraW5cIDsKK+WOn+ayuea1geWHuiA+IGdlbicneXVyeXV1c2h1dHN1XCA7CivnlaXlvI/lkb3ku6QgPiByeWFrdXNoaWtpbWVpcmVpXCA7CivoirjooZPmtLvli5UgPiBnZWlqdXRzdWthdHN1ZG91XCA7CivmrbTlj7Llk7LlraYgPiByZWtpc2hpdGV0c3VnYWt1XCA7CivkuIvnlLroqIDokYkgPiBzaGl0YW1hY2hpa290b2JhXCA7Civnt4rmgKXnnYDpmbggPiBraW5reXV1Y2hha3VyaWt1XCA7CivlhrfooYDli5XniakgPiByZWlrZXRzdWRvdWJ1dHN1XCA7Civlj5bmibHms6jmhI8gPiB0b3JpYXRzdWthaWNodXVpXCA7CivlibLlopfmlpnph5EgPiB3YXJpbWFzaGlyeW91a2luXCA7Civnm7TmiKrnsKHmmI4gPiBjaG9rdXNldHN1a2FubWVpXCA7Civpu4TpgZPlkInml6UgPiBrb3Vkb3VraWNoaW5pY2hpXCA7CivkuIDop6bljbPnmbogPiBpc3Nob2t1c29rdWhhdHN1XCA7CivljbPml6XplovnpaggPiBzb2t1aml0c3VrYWloeW91XCA7Civlrp/os6ros4Pph5EgPiBqaXNzaGl0c3VjaGluZ2luXCA7CivmlZnppIrlsI/oqqwgPiBreW91eW91c2hvdXNldHN1XCA7Civmir3osaHoirjooZMgPiBjaHV1c2hvdWdlaWp1dHN1XCA7Civnm7TmjqXmlK/phY0gPiBjaG9rdXNldHN1c2hpaGFpXCA7Civpm4blm6PlsLHogbcgPiBzaHV1ZGFuc2h1dXNob2t1XCA7CivmsLTnlJ/mpI3niakgPiBzdWlzZWlzaG9rdWJ1dHN1XCA7Civogbfli5nos6rllY8gPiBzaG9rdW11c2hpdHN1bW9uXCA7Civkub7nlJ/mpI3niakgPiBrYW5zZWlzaG9rdWJ1dHN1XCA7Civlrr/ms4roqK3lgpkgPiBzaHVrdWhha3VzZXRzdWJpXCA7Civlm73nq4vlpKflraYgPiBrb2t1cml0c3VkYWlnYWt1XCA7CivkuIDoqIDkuozoqIAgPiBoaXRva290b2Z1dGFrb3RvXCA7CivmraPpnaLooZ3nqoEgPiBzaG91bWVuc2hvdXRvdHN1XCA7CivkuIDml6XljYPnp4sgPiBpY2hpbmljaGlzZW5zaHV1XCA7CivllYbmpa3nm67nmoQgPiBzaG91Z3lvdW1va3V0ZWtpXCA7CivopIflvI/lrabntJogPiBmdWt1c2hpa2lnYWtreXV1XCA7CivljZLmpa3oqLzmm7ggPiBzb3RzdWd5b3VzaG91c2hvXCA7CivnhLzogonlrprpo58gPiB5YWtpbmlrdXRlaXNob2t1XCA7CivooajpnaLlvLXlipsgPiBoeW91bWVuY2hvdXJ5b2t1XCA7CivnibnliKXnlarntYQgPiB0b2t1YmV0c3ViYW5ndW1pXCA7Civlrabnv5Log73lipsgPiBnYWt1c2h1dW5vdXJ5b2t1XCA7Civkv6HnlKjlj5blvJUgPiBzaGluJyd5b3V0b3JpaGlraVwgOwor6auY6KGA5Zyn55eHID4ga291a2V0c3VhdHN1c2hvdVwgOwor5Lit5b+D5Lq654mpID4gY2h1dXNoaW5qaW5idXRzdVwgOwor6aOf5paZ5ZOB5ZWGID4gc2hva3VyeW91aGluc2hvdVwgOwor6LaF54++5a6f55qEID4gY2hvdWdlbmppdHN1dGVraVwgOwor5Y2z6Lqr5oiQ5LuPID4gc29rdXNoaW5qb3VidXRzdVwgOwor5Zu95aSW6ISx5Ye6ID4ga29rdWdhaWRhc3NodXRzdVwgOwor55u05o6l5Zue562UID4gY2hva3VzZXRzdWthaXRvdVwgOwor5YWI54mp5Y+W5byVID4gc2FraW1vbm90b3JpaGlraVwgOwor5q205Y+y5bCP6KqsID4gcmVraXNoaXNob3VzZXRzdVwgOwor54Wu5rK45raI5q+SID4gc2hhZnV0c3VzaG91ZG9rdVwgOwor5rW35aSW6YCy5Ye6ID4ga2FpZ2Fpc2hpbnNodXRzdVwgOwor5rC05Yqb55m66Zu7ID4gc3Vpcnlva3VoYXRzdWRlblwgOwor5b2i6LOq5bCO5YWlID4ga2Vpc2hpdHN1ZG91bnl1dVwgOwor55u05o6l6Zai5L+CID4gY2hva3VzZXRzdWthbmtlaVwgOwor55u05o6l57Ch5piOID4gY2hva3VzZXRzdWthbm1laVwgOwor5oyv5pu/5LyR5pelID4gZnVyaWthZWt5dXVqaXRzdVwgOwor5Y2D57eo5LiA5b6LID4gc2VucGVuJydpY2hpcml0c3VcIDsKK+mDteS+v+Wwj+WMhSA+IHl1dWJpbmtvZHp1dHN1bWlcIDsKK+WNmOS4gOelnuaVmSA+IHRhbicnaXRzdXNoaW5reW91XCA7CivomZrlvLHkvZPos6ogPiBreW9qYWt1dGFpc2hpdHN1XCA7CivohIrntKLli5XniakgPiBzZWtpc2FrdWRvdWJ1dHN1XCA7CivmrablipvooZ3nqoEgPiBidXJ5b2t1c2hvdXRvdHN1XCA7CivnhrHmoLjlj43lv5wgPiBuZXRzdWtha3VoYW4nJ25vdVwgOwor56iu5a2Q5qSN54mpID4gc2h1c2hpc2hva3VidXRzdVwgOwor55u05o6l6KGM5YuVID4gY2hva3VzZXRzdWtvdWRvdVwgOwor5rGC6IG35bqD5ZGKID4ga3l1dXNob2t1a291a29rdVwgOwor5a6f6Ki85ZOy5a2mID4gamlzc2hvdXRldHN1Z2FrdVwgOwor6Iqx5auB6Iqx5am/ID4gaGFuYXlvbWVoYW5hbXVrb1wgOwor5aSn5ZCN6KGM5YiXID4gZGFpbXlvdWd5b3VyZXRzdVwgOwor6auY5bGx5qSN54mpID4ga291emFuc2hva3VidXRzdVwgOwor54m55Yil5paZ6YeRID4gdG9rdWJldHN1cnlvdWtpblwgOwor5Lit6ZaT5bCP6KqsID4gY2h1dWthbnNob3VzZXRzdVwgOwor55Sf54mp5r+D57iuID4gc2VpYnV0c3Vub3VzaHVrdVwgOwor5YWl5Yqb5L+h5Y+3ID4gbnl1dXJ5b2t1c2hpbmdvdVwgOwor5b2r5Yi75a6k5bqnID4gY2hvdWtva3VzaGl0c3V6YVwgOwor56K6546H5qiZ5pysID4ga2FrdXJpdHN1aHlvdWhvblwgOwor5bee56uL5aSn5a2mID4gc2h1dXJpdHN1ZGFpZ2FrdVwgOwor5aSa6IKJ5qSN54mpID4gdGFuaWt1c2hva3VidXRzdVwgOwor54ax5Lyd5bCO546HID4gbmV0c3VkZW5kb3VyaXRzdVwgOwor5qSN54mp5Lq66ZaTID4gc2hva3VidXRzdW5pbmdlblwgOwor6Jma6Jma5a6f5a6fID4ga3lva3lvaml0c3VqaXRzdVwgOwor54mp54mp5Lqk5o+bID4gYnV0c3VidXRzdWtvdWthblwgOwor5a6f5Yqb6KGM5L2/ID4gaml0c3VyeW9rdWtvdXNoaVwgOwor5Z6L5byP6Ki85piOID4ga2F0YXNoaWtpc2hvdW1laVwgOwor6YCj5Yud6KSH5byPID4gcmVuc2hvdWZ1a3VzaGlraVwgOwor55u05o6l5Y2U6K2wID4gY2hva3VzZXRzdWt5b3VnaVwgOwor572q6Zqc5raI5ruFID4gemFpc2hvdXNob3VtZXRzdVwgOwor5pmp55Sf5qSN54mpID4gYmFuc2Vpc2hva3VidXRzdVwgOwor5r2c5Zyo5aSx5qWtID4gc2VuemFpc2hpdHN1Z3lvdVwgOwor55u05o6l5q+U6LyDID4gY2hva3VzZXRzdWhpa2FrdVwgOwor5qC45oqR5q2i5YqbID4ga2FrdXlva3VzaGlyeW9rdVwgOwor5LiH54mp5rWB6LuiID4gYmFuYnV0c3VyeXV1dGVuXCA7Civou5/lvI/luq3nkIMgPiBuYW5zaGlraXRlaWt5dXVcIDsKK+S/rumBk+eUn+a0uyA+IHNodXVkb3VzZWlrYXRzdVwgOwor56eY5a+G6K2m5a+fID4gaGltaXRzdWtlaXNhdHN1XCA7Civms5XkurrmoKrkuLsgPiBob3VqaW5rYWJ1bnVzaGlcIDsKK+mWk+aOpeeFp+aYjiA+IGthbnNldHN1c2hvdW1laVwgOwor57Sb6aqo56CV6LqrID4gZnVua290c3VzYWlzaGluXCA7CivkuKHmo7Lli5XniakgPiByeW91c2VpZG91YnV0c3VcIDsKK+mbhue0hOi+sualrSA+IHNodXV5YWt1bm91Z3lvdVwgOwor5buD55a+5p2h5Lu2ID4gaGFpc2hpdHN1am91a2VuXCA7Civog73njofos4Pph5EgPiBub3VyaXRzdWNoaW5naW5cIDsKK+WNmOWIgOebtOWFpSA+IHRhbnRvdWNob2t1bnl1dVwgOwor5LiJ5paH5bCP6KqsID4gc2FubW9uc2hvdXNldHN1XCA7CivnrYvogonms6jlsIQgPiBraW4nJ25pa3VjaHV1c2hhXCA7Civlm5vpgJrlhavpgZQgPiBzaGl0c3V1aGF0dGF0c3VcIDsKK+WJsuWil+mBi+izgyA+IHdhcmltYXNoaXVuY2hpblwgOwor5Y2X5qW16Kaz5risID4gbmFua3lva3VrYW5zb2t1XCA7CivkuIDnm67nnq3nhLYgPiBpY2hpbW9rdXJ5b3V6ZW5cIDsKK+e0oOS6uuS4i+WuvyA+IHNoaXJvdXRvZ2VzaHVrdVwgOwor5a2m5qCh57Wm6aOfID4gZ2Fra291a3l1dXNob2t1XCA7CivplpPmjqXmkq7lvbEgPiBrYW5zZXRzdXNhdHN1ZWlcIDsKK+eZveW3neWknOiIuSA+IHNoaXJha2F3YXlvZnVuZVwgOwor54m5562G5aSn5pu4ID4gdG9rdWhpdHN1dGFpc2hvXCA7Civpo5/lk4Hlt6Xmpa0gPiBzaG9rdWhpbmtvdWd5b3VcIDsKK+ajmOearuWLleeJqSA+IGt5b2t1aGlkb3VidXRzdVwgOwor5oCq5Yqb5Lmx56WeID4ga2Fpcnlva3VyYW5zaGluXCA7CivkurrnlJ/lk7LlraYgPiBqaW5zZWl0ZXRzdWdha3VcIDsKK+aWsOWpmueUn+a0uyA+IHNoaW5rb25zZWlrYXRzdVwgOwor5YWs6ZaL5YWl5pytID4ga291a2Fpbnl1dXNhdHN1XCA7CivmoKrlvI/luILloLQgPiBrYWJ1c2hpa2lzaGlqb3VcIDsKK+WtpualreaIkOe4viA+IGdha3VneW91c2Vpc2VraVwgOwor54mp6LOq5ZCN6KmeID4gYnVzc2hpdHN1bWVpc2hpXCA7Civnn63nt6jlsI/oqqwgPiB0YW5wZW5zaG91c2V0c3VcIDsKK+WVhualreaVsOWtpiA+IHNob3VneW91c3V1Z2FrdVwgOwor6ISx5Ye66YCf5bqmID4gZGFzc2h1dHN1c29rdWRvXCA7CivnibnliKXnt4/kvJogPiB0b2t1YmV0c3Vzb3VrYWlcIDsKK+esrOS4gOalveeroCA+IGRhaWljaGlnYWt1c2hvdVwgOwor57Si5p2h6YmE6YGTID4gc2FrdWpvdXRldHN1ZG91XCA7Civou43oqJjnianoqp4gPiBndW5raW1vbm9nYXRhcmlcIDsKK+WOs+ato+S4reeriyA+IGdlbnNlaWNodXVyaXRzdVwgOwor5LiA5pel5LiA5aScID4gaWNoaW5pY2hpaWNoaXlhXCA7CivpmbDpmbDmu4Xmu4UgPiBpbicnaW5tZXRzdW1ldHN1XCA7CivlsLHogbfmtarkurogPiBzaHV1c2hva3Vyb3VuaW5cIDsKK+e0lOa9lOaVmeiCsiA+IGp1bmtldHN1a3lvdWlrdVwgOwor5a6X5pWZ5pS56Z2pID4gc2h1dWt5b3VrYWlrYWt1XCA7CivmlK/pm6Lmu4Xoo4IgPiBzaGlyaW1ldHN1cmV0c3VcIDsKK+WbveawkeWuv+iIjiA+IGtva3VtaW5zaHVrdXNoYVwgOwor54us56uL5a6j6KiAID4gZG9rdXJpdHN1c2VuZ2VuXCA7Civlia/ohY7nmq7os6ogPiBmdWt1amluaGlzaGl0c3VcIDsKK+WbveawkeeUn+a0uyA+IGtva3VtaW5zZWlrYXRzdVwgOwor56mN6LyJ6IO95YqbID4gc2VraXNhaW5vdXJ5b2t1XCA7Civlj47lrrnog73lipsgPiBzaHV1eW91bm91cnlva3VcIDsKK+iFsOmrmOmanOWtkCA+IGtvc2hpZGFrYXNob3VqaVwgOwor5bm06aCD5pel6aCDID4gdG9zaGlnb3JvaGlnb3JvXCA7CivpgJrkv5fmloflraYgPiB0c3V1em9rdWJ1bmdha3VcIDsKK+WEquWFiOagquS4uyA+IHl1dXNlbmthYnVudXNoaVwgOwor5YaZ55yf5ris6YePID4gc2hhc2hpbnNva3VyeW91XCA7CivkvIHmpa3kvZPos6ogPiBraWd5b3V0YWlzaGl0c3VcIDsKK+eMqueqgeeMm+mAsiA+IGNob3RvdHN1bW91c2hpblwgOwor5a2m55Sf5Ymy5byVID4gZ2FrdXNlaXdhcmliaWtpXCA7CivkvqHmoLzlnKflipsgPiBrYWtha3VhdHN1cnlva3VcIDsKK+ihqOePvuW9ouW8jyA+IGh5b3VnZW5rZWlzaGlraVwgOwor5Ye66aGY5pu46aGeID4gc2h1dHN1Z2Fuc2hvcnVpXCA7CivlrpfmlZnmlZnogrIgPiBzaHV1a3lvdWt5b3Vpa3VcIDsKK+S9meijlee2vee2vSA+IHlveXV1c2hha3VzaGFrdVwgOwor55+l55qE6IO95YqbID4gY2hpdGVraW5vdXJ5b2t1XCA7Civlj43pqqjnsr7npZ4gPiBoYW5rb3RzdXNlaXNoaW5cIDsKK+ato+eiuueIhuaSgyA+IHNlaWtha3ViYWt1Z2VraVwgOwor5pel6Iux6YCa6KizID4gbmljaGllaXRzdXV5YWt1XCA7Civpo5/niannuYrntq0gPiBzaG9rdW1vdHN1c2VuJydpXCA7CivnrpfooZPntJrmlbAgPiBzYW5qdXRzdWt5dXVzdXVcIDsKK+WFpeWKm+ijhee9riA+IG55dXVyeW9rdXNvdWNoaVwgOwor6IG35qWt6KiT57e0ID4gc2hva3VneW91a3VucmVuXCA7CivmjqLlgbXlsI/oqqwgPiB0YW50ZWlzaG91c2V0c3VcIDsKK+eUn+a0u+WPjeW/nCA+IHNlaWthdHN1aGFuJydub3VcIDsKK+advuS4i+mbu+WZqCA+IG1hdHN1c2hpdGFkZW5raVwgOwor55+l6K2Y6ZqO57SaID4gY2hpc2hpa2lrYWlreXV1XCA7CivmoKrlvI/kvJrnpL4gPiBrYWJ1c2hpa2lnYWlzaGFcIDsKK+S4gOaZgumgkOaJgCA+IGljaGlqaWF6dWthcmlqb1wgOwor5ouh5aSn6Kej6YeIID4ga2FrdWRhaWthaXNoYWt1XCA7Civlk4Hos6rkv53oqLwgPiBoaW5zaGl0c3Vob3Nob3VcIDsKK+S/oeS7sOWRiueZvSA+IHNoaW5rb3Vrb2t1aGFrdVwgOwor5qC854mp6Ie055+lID4ga2FrdWJ1dHN1Y2hpY2hpXCA7CivnsbPnqYDpgJrluLMgPiBiZWlrb2t1dHN1dWNob3VcIDsKK+Wun+eUqOaWsOahiCA+IGppdHN1eW91c2hpbicnYW5cIDsKK+W/g+i6q+manOWusyA+IHNoaW5zaGluc2hvdWdhaVwgOwor6YCf5oim5Y2z5rG6ID4gc29rdXNlbnNva2tldHN1XCA7CivljJblrablkLjnnYAgPiBrYWdha3VreXV1Y2hha3VcIDsKK+Wbm+aWueWxseipsSA+IHlvbW95YW1hYmFuYXNoaVwgOwor55qH5a6k5YW456+EID4ga291c2hpdHN1dGVucGFuXCA7CivnibnliKXlm73kvJogPiB0b2t1YmV0c3Vrb2trYWlcIDsKK+S4gOWdquacrOekviA+IGhpdG90c3Vib2hvbnNoYVwgOwor5pep5Y+j6KiA6JGJID4gaGF5YWt1Y2hpa290b2JhXCA7Civmt7HlsbHlub3osLcgPiBzaGluemFuJyd5dXVrb2t1XCA7CivpgJrllYbnlKPmpa0gPiB0c3V1c2hvdXNhbmd5b3VcIDsKK+W7uueviemdouepjSA+IGtlbmNoaWt1bWVuc2VraVwgOwor55uk5qC56Yyv56+AID4gYmFua29uc2FrdXNldHN1XCA7CivlhoXnmoTnlJ/mtLsgPiBuYWl0ZWtpc2Vpa2F0c3VcIDsKK+enmOWvhua8j+a0qSA+IGhpbWl0c3Vyb3VzZXRzdVwgOwor546J55+z5re35reGID4gZ3lva3VzZWtpa29ua291XCA7Civpm5vpkZHliKXogIUgPiBoaW5ha2FuYmV0c3VzaGFcIDsKK+e1gui6q+W5tOmHkSA+IHNodXVzaGluJyduZW5raW5cIDsKK+eyiemqqOeglei6qyA+IGZ1bmtvdHN1c2Fpc2hpblwgOwor5Lq654mp5a+45o+PID4gamluYnV0c3VzdW5ieW91XCA7CivllYblk4Hnm67pjLIgPiBzaG91aGlubW9rdXJva3VcIDsKK+Wklumjn+eUo+alrSA+IGdhaXNob2t1c2FuZ3lvdVwgOwor6LOH5rqQ56+A57SEID4gc2hpZ2Vuc2V0c3V5YWt1XCA7CivpnZnohIjms6jlsIQgPiBqb3VteWFrdWNodXVzaGFcIDsKK+WGkumZuuWwj+iqrCA+IGJvdWtlbnNob3VzZXRzdVwgOwor54ax56Gs5YyW54mpID4gbmV0c3Vrb3VrYWJ1dHN1XCA7Civlm73mnInpiYTpgZMgPiBrb2t1eXV1dGV0c3Vkb3VcIDsKK+eiuueOh+WkieaVsCA+IGtha3VyaXRzdWhlbnN1dVwgOwor6ZaL55m66KiI55S7ID4ga2FpaGF0c3VrZWlrYWt1XCA7CivmnInlrrPnianos6ogPiB5dXVnYWlidXNzaGl0c3VcIDsKK+aDheeKtumFjOmHjyA+IGpvdWpvdXNoYWt1cnlvdVwgOwor5L6155Wl5oim5LqJID4gc2hpbnJ5YWt1c2Vuc291XCA7CivlhpLpoK3pmbPov7AgPiBib3V0b3VjaGluanV0c3VcIDsKK+eEvOi6q+iHquauuiA+IHNob3VzaGluamlzYXRzdVwgOwor5aSn5a6J5ZCJ5pelID4gdGFpYW5raWNoaW5pY2hpXCA7Civnn6/mraPoppblipsgPiBreW91c2Vpc2hpcnlva3VcIDsKK+eglOeptumWi+eZuiA+IGtlbmt5dXVrYWloYXRzdVwgOwor6KuH5ZCI5YWl5pytID4gZGFuZ291bnl1dXNhdHN1XCA7CivpmbjnlJ/li5XniakgPiByaWt1c2VpZG91YnV0c3VcIDsKK+WNl+WkquW5s+a0iyA+IG1pbmFtaXRhaWhlaXlvdVwgOwor5a2m55Sf55Sf5rS7ID4gZ2FrdXNlaXNlaWthdHN1XCA7CivvvJHvvJHvvJnnlaogPiBoeWFrdWp1dWt5dXViYW5cIDsKK+e1kOWQiOe1hOe5lCA+IGtldHN1Z291c29zaGlraVwgOwor5b2r5b+D6Y+k6aqoID4gY2hvdXNoaW5ydWtvdHN1XCA7CivnuIHml6XllYbkurogPiBlbicnbmljaGlzaG91bmluXCA7Civlv4PnpZ7ogJflvLEgPiBzaGluc2hpbm1vdWpha3VcIDsKK+efreacn+iyuOS7mCA+IHRhbmtpa2FzaGl0c3VrZVwgOwor546J55+z5re35LqkID4gZ3lva3VzZWtpa29ua291XCA7Civlt6bkuK3mi6zlvKcgPiBoaWRhcmljaHV1a2Fra29cIDsKK+m7kuiJsuS6uueoriA+IGtva3VzaG9rdWppbnNodVwgOwor5YWs5byP55m66KGoID4ga291c2hpa2loYXBweW91XCA7Civou5/pqqjntYTnuZQgPiBuYW5rb3RzdXNvc2hpa2lcIDsKK+aYn+mWk+eJqeizqiA+IHNlaWthbmJ1c3NoaXRzdVwgOwor55Sf5rav5a2m57+SID4gc2hvdWdhaWdha3VzaHV1XCA7Civnn6XorZjooajnj74gPiBjaGlzaGlraWh5b3VnZW5cIDsKK+a6kOawj+eJqeiqniA+IGdlbmppbW9ub2dhdGFyaVwgOwor5LiD6Lui5YWr5YCSID4gc2hpY2hpdGVuYmF0dG91XCA7Civnmb3oibLkurrnqK4gPiBoYWt1c2hva3VqaW5zaHVcIDsKK+W5s+WutueJqeiqniA+IGhlaWtlbW9ub2dhdGFyaVwgOwor5L2Z6KOV57a944CFID4geW95dXVzaGFrdXNoYWt1XCA7Civmi5Lntbblj43lv5wgPiBreW96ZXRzdWhhbicnbm91XCA7CivnibnliKXlvoXpgYcgPiB0b2t1YmV0c3V0YWlndXVcIDsKK+mdkuWkqeeZveaXpSA+IHNlaXRlbmhha3VqaXRzdVwgOwor5aSp572w6Ka/6Z2iID4gdGVuYmF0c3V0ZWtpbWVuXCA7CivooYDml4/ntZDlqZogPiBrZXRzdXpva3VrZWtrb25cIDsKK+eZuuiJsuePvuWDjyA+IGhhc3Nob2t1Z2Vuc2hvdVwgOwor5YWl5pyt5L6h5qC8ID4gbnl1dXNhdHN1a2FrYWt1XCA7CivpgKPnq4vlhoXplqMgPiByZW5yaXRzdW5haWtha3VcIDsKK+iFueW8j+WRvOWQuCA+IGZ1a3VzaGlraWtva3l1dVwgOwor5L2O6ZaL55m65Zu9ID4gdGVpa2FpaGF0c3Vrb2t1XCA7Civou73lppnmtJLohLEgPiBrZWlteW91c2hhZGF0c3VcIDsKK+mLvOe0oumJhOmBkyA+IGtvdXNha3V0ZXRzdWRvdVwgOwor54++5pyJ5Yui5YqbID4gZ2VuJyd5dXVzZWlyeW9rdVwgOwor6YGK5LyR5pa96KitID4geXV1a3l1dXNoaXNldHN1XCA7Civot7Pouo3mjK/li5UgPiBjaG91eWFrdXNoaW5kb3VcIDsKK+i2heeEtuWGhemWoyA+IGNob3V6ZW4nJ25haWtha3VcIDsKK+Wun+alreWtpuagoSA+IGppdHN1Z3lvdWdha2tvdVwgOwor56eB56uL5aSn5a2mID4gc2hpcml0c3VkYWlnYWt1XCA7CivmnIDkvY7ooYDlnKcgPiBzYWl0ZWlrZXRzdWF0c3VcIDsKK+WwiuWxnuauuuS6uiA+IHNvbnpva3VzYXRzdWppblwgOwor5Lit56uL5Zyw5bivID4gY2h1dXJpdHN1Y2hpdGFpXCA7CivkuKHmpbXlnLDmlrkgPiByeW91a3lva3VjaGlob3VcIDsKK+mAo+e2muauuuS6uiA+IHJlbnpva3VzYXRzdWppblwgOwor5Z6C55u05YiG5qWtID4gc3VpY2hva3VidW5neW91XCA7CivmtJfmv6/nn7PpubggPiBzZW50YWt1c2V0c3VrZW5cIDsKK+mXmOeXheeUn+a0uyA+IHRvdWJ5b3VzZWlrYXRzdVwgOwor5ZCM5paH6YCa6YGUID4gZG91YnVudHN1dXRhdHN1XCA7Civlhobou6Lmu5HohLEgPiBlbnRlbmthdHN1ZGF0c3VcIDsKK+eUn+eJqeW3peWtpiA+IHNlaWJ1dHN1a291Z2FrdVwgOwor5LiA5b6L5rib5Y+NID4gaWNoaXJpdHN1Z2VudGFuXCA7Civkurrlk6HnuK7lsJEgPiBqaW4nJ2luc2h1a3VzaG91XCA7Civni6znq4vlpInmlbAgPiBkb2t1cml0c3VoZW5zdXVcIDsKK+S6uuWumuizquWVjyA+IGppbnRlaXNoaXRzdW1vblwgOwor5paw57SE6IGW5pu4ID4gc2hpbicneWFrdXNlaXNob1wgOwor55Sf5q665LiO5aWqID4gc2Vpc2F0c3V5b2RhdHN1XCA7Civmrr/mp5jku5XkuosgPiB0b25vc2FtYXNoaWdvdG9cIDsKK+WPsOaJgOeUqOWTgSA+IGRhaWRva29yb3lvdWhpblwgOwor6LK06YeR5bGe5Y24ID4ga2lraW56b2t1b3Jvc2hpXCA7CivkuIrmlrnotIXlha0gPiBrYW1pZ2F0YXplaXJva3VcIDsKK+ihgOaXj+mWouS/giA+IGtldHN1em9rdWthbmtlaVwgOwor5a2Q5a6u5b6M5bGIID4gc2hpa3l1dWtvdWt1dHN1XCA7CivljZflvoHljJfkvJAgPiBuYW5zZWlob2t1YmF0c3VcIDsKK+ecn+Wun+S4gOi3ryA+IHNoaW5qaXRzdWljaGlyb1wgOwor54m55Yil6YGL6LODID4gdG9rdWJldHN1dW5jaGluXCA7CivpgJrluLjmiKblipsgPiB0c3V1am91c2Vucnlva3VcIDsKK+WIqeWus+W+l+WksSA+IHJpZ2FpdG9rdXNoaXRzdVwgOwor5rWF6YWM5L2O5ZSxID4gc2Vuc2hha3V0ZWlzaG91XCA7Civoo7jlrZDmpI3niakgPiByYXNoaXNob2t1YnV0c3VcIDsKK+WAn+eUqOiovOabuCA+IHNoYWt1eW91c2hvdXNob1wgOwor5YWx5pyJ57WQ5ZCIID4ga3lvdXl1dWtldHN1Z291XCA7Civlm57mipjpoJjln58gPiBrYWlzZXRzdXJ5b3Vpa2lcIDsKK+iBt+alreaEj+itmCA+IHNob2t1Z3lvdWlzaGlraVwgOwor5Y2Y5byP5a2m57SaID4gdGFuc2hpa2lnYWtreXV1XCA7CivlrabooZPpm5HoqowgPiBnYWt1anV0c3V6YXNzaGlcIDsKK+WNkualreippumokyA+IHNvdHN1Z3lvdXNoaWtlblwgOwor5YSq5oCn5b2i6LOqID4geXV1c2Vpa2Vpc2hpdHN1XCA7CivmiJDplbfmm7Lnt5ogPiBzZWljaG91a3lva3VzZW5cIDsKK+eZvuWFq+WNgeW6piA+IGh5YWt1aGFjaGlqdXVkb1wgOwor5aSn5ZKM5pKr5a2QID4geWFtYXRvbmFkZXNoaWtvXCA7Civlpb3oibLmloflraYgPiBrb3VzaG9rdWJ1bmdha3VcIDsKK+mciumtgua2iOa7hSA+IHJlaWtvbnNob3VtZXRzdVwgOwor54m55Yil6YWN5b2TID4gdG9rdWJldHN1aGFpdG91XCA7Civpoqjlipvpmo7ntJogPiBmdXVyeW9rdWthaWt5dXVcIDsKK+a1geS9k+WKm+WtpiA+IHJ5dXV0YWlyaWtpZ2FrdVwgOwor5Yqj5byx5oSP6K2YID4gcmV0c3VqYWt1aXNoaWtpXCA7CivkuozogqHoho/olqwgPiBmdXRhbWF0YWtvdXlha3VcIDsKK+eJqeizquS7o+isnSA+IGJ1c3NoaXRzdXRhaXNoYVwgOwor566h6L2E5a6Y5bqBID4ga2Fua2F0c3VrYW5jaG91XCA7Civkv67mraPnlLPlkYogPiBzaHV1c2Vpc2hpbmtva3VcIDsKK+W/g+eQhuWwj+iqrCA+IHNoaW5yaXNob3VzZXRzdVwgOwor552A6Zm45Zyw54K5ID4gY2hha3VyaWt1Y2hpdGVuXCA7Civlrp/pqJPlsI/oqqwgPiBqaWtrZW5zaG91c2V0c3VcIDsKK+WOn+WtkOeIhueZuiA+IGdlbnNoaWJha3VoYXRzdVwgOwor5YWl5Yqb5oOF5aCxID4gbnl1dXJ5b2t1am91aG91XCA7Civph4/lrZDlipvlraYgPiByeW91c2hpcmlraWdha3VcIDsKK+WlquS4ieaMr+eOiyA+IGRhdHN1c2Fuc2hpbicnb3VcIDsKK+W5tOacq+iqv+aVtCA+IG5lbm1hdHN1Y2hvdXNlaVwgOwor5a2m6KGT6KuW5paHID4gZ2FrdWp1dHN1cm9uYnVuXCA7CivnlJ/nianlrabogIUgPiBzZWlidXRzdWdha3VzaGFcIDsKK+WFreeZvuWFreWPtyA+IHJvcHB5YWt1cm9rdWdvdVwgOwor5oCd5byB5ZOy5a2mID4gc2hpYmVudGV0c3VnYWt1XCA7CivmipfnlJ/nianos6ogPiBrb3VzZWlidXNzaGl0c3VcIDsKK+a0u+WLleWGmeecnyA+IGthdHN1ZG91c2hhc2hpblwgOwor5Lih55Sf5YuV54mpID4gcnlvdXNlaWRvdWJ1dHN1XCA7Civnsr7npZ7oloTlvLEgPiBzZWlzaGluaGFrdWpha3VcIDsKK+W8t+i/q+ims+W/tSA+IGt5b3VoYWt1a2FuJyduZW5cIDsKK+i7jee4ruWNlOWumiA+IGd1bnNodWt1a3lvdXRlaVwgOwor552A6Zm45Zyw5bivID4gY2hha3VyaWt1Y2hpdGFpXCA7Civngq3lobXniIbnmbogPiB0YW5qaW5iYWt1aGF0c3VcIDsKK+eUn+a0u+eSsOWigyA+IHNlaWthdHN1a2Fua3lvdVwgOwor5oqA6KGT6Z2p5pawID4gZ2lqdXRzdWtha3VzaGluXCA7Civnsp/nspLntZDmoLggPiB6b2t1cnl1dWtla2tha3VcIDsKK+S7ruWPl+WPluiovCA+IGthcml1a2V0b3Jpc2hvdVwgOwor5paw6IGe6YWN6YGUID4gc2hpbmJ1bmhhaXRhdHN1XCA7CivljZLmpa3oq5bmlocgPiBzb3RzdWd5b3Vyb25idW5cIDsKK+eZu+mMsuWVhuaomSA+IHRvdXJva3VzaG91aHlvdVwgOwor5L+h55So6YqY5p+EID4gc2hpbicneW91bWVpZ2FyYVwgOwor5pON5rWE55Gg55KDID4gYXlhdHN1cmlqb3VydXJpXCA7CivlhbHlkIznlJ/mtLsgPiBreW91ZG91c2Vpa2F0c3VcIDsKK+S8nemBlOeJueaApyA+IGRlbnRhdHN1dG9rdXNlaVwgOwor5L+h5Luw55Sf5rS7ID4gc2hpbmtvdXNlaWthdHN1XCA7Civpg7flnJ/lsI/oqqwgPiBreW91ZG9zaG91c2V0c3VcIDsKK+mbhuWbo+eUn+a0uyA+IHNodXVkYW5zZWlrYXRzdVwgOwor6aeQ5pel5aSn5L2/ID4gY2h1dW5pY2hpdGFpc2hpXCA7Civls7blm73moLnmgKcgPiBzaGltYWd1bmlrb25qb3VcIDsKK+W3puWwj+aLrOW8pyA+IGhpZGFyaXNob3VrYWtrb1wgOwor5rCR5peP5a6X5pWZID4gbWluem9rdXNodXVreW91XCA7Civml6XkuK3pn5PotoogPiBuaXRjaHV1a2FuJydldHN1XCA7Civpu5LoibLngavolqwgPiBrb2t1c2hva3VrYXlha3VcIDsKK+S4h+acieelnuaVmSA+IGJhbicneXV1c2hpbmt5b3VcIDsKK+mgreiEs+a1geWHuiA+IHp1bm91cnl1dXNodXRzdVwgOwor55u05o6l6Kmx5rOVID4gY2hva3VzZXRzdXdhaG91XCA7CivlvaLos6rou6Lmj5sgPiBrZWlzaGl0c3V0ZW5rYW5cIDsKK+ato+ecn+ato+mKmCA+IHNob3VzaGluc2hvdW1laVwgOwor54iG5by+55m66KiAID4gYmFrdWRhbmhhdHN1Z2VuXCA7Civnm7Tnq4vkuI3li5UgPiBjaG9rdXJpdHN1ZnVkb3VcIDsKK+WVhualremBk+W+syA+IHNob3VneW91ZG91dG9rdVwgOwor54m56Kit5Lya5aC0ID4gdG9rdXNldHN1a2Fpam91XCA7CivmoLjniannkIblraYgPiBrYWt1YnV0c3VyaWdha3VcIDsKK+ebtOeri+eMv+S6uiA+IGNob2t1cml0c3VlbmppblwgOwor6LaF6YCj57WQ5a2QID4gY2hvdXJlbmtldHN1c2hpXCA7CivnlLLoq5bkuZnpp4EgPiBrb3Vyb24nJ290c3ViYWt1XCA7CivniannmoTos4fmupAgPiBidXRzdXRla2lzaGlnZW5cIDsKK+ebtOaOpeaUr+aPtCA+IGNob2t1c2V0c3VzaGllblwgOwor5paw5Yi25Lit5a2mID4gc2hpbnNlaWNodXVnYWt1XCA7CivlnKflipvlm6PkvZMgPiBhdHN1cnlva3VkYW50YWlcIDsKK+a4qeihgOWLleeJqSA+IG9ua2V0c3Vkb3VidXRzdVwgOwor5Lit56uL5Yq06YCjID4gY2h1dXJpdHN1cm91cmVuXCA7CivnoJTnqbbmtLvli5UgPiBrZW5reXV1a2F0c3Vkb3VcIDsKK+iHqueEtuWTsuWtpiA+IHNoaXplbnRldHN1Z2FrdVwgOwor5qCq5Li757eP5LyaID4ga2FidW51c2hpc291a2FpXCA7CivmgKfmoLzliKTliKUgPiBzZWlrYWt1aGFuYmV0c3VcIDsKK+mBjuWkseWCt+WusyA+IGthc2hpdHN1c2hvdWdhaVwgOwor6YCa5L+h5bel5a2mID4gdHN1dXNoaW5rb3VnYWt1XCA7CivlkIzkuIDkurrniakgPiBkb3VpdHN1amluYnV0c3VcIDsKK+WVhuWtpuWNmuWjqyA+IHNob3VnYWt1aGFrdXNoaVwgOwor5b+D6aCt5ruF5Y20ID4gc2hpbnRvdW1la2t5YWt1XCA7CivkuIPpoZvlhavlgJIgPiBzaGljaGl0ZW5iYXR0b3VcIDsKK+W8t+ihjOaOoeaxuiA+IGt5b3Vrb3VzYWlrZXRzdVwgOwor5bCx5Lu75ryU6KqsID4gc2h1dW5pbicnZW56ZXRzdVwgOwor5ZCN6KuW5Y2T6KqsID4gbWVpcm9udGFrdXNldHN1XCA7Civms6jlhaXmlZnogrIgPiBjaHV1bnl1dWt5b3Vpa3VcIDsKK+WQkeeyvuelnuiWrCA+IGtvdXNlaXNoaW4nJ3lha3VcIDsKK+WIhuWIl+ihjOmAsiA+IGJ1bnJldHN1a291c2hpblwgOwor6aOf5paZ5ZOB5bqXID4gc2hva3VyeW91aGludGVuXCA7Civmva7msZDmkanmk6YgPiBjaG91c2VraW1hc2F0c3VcIDsKK+evgOi2s+WLleeJqSA+IHNlc3Nva3Vkb3VidXRzdVwgOwor6aOf54mp6YCj6Y6WID4gc2hva3Vtb3RzdXJlbnNhXCA7CivkuK3ogonkuK3og4wgPiBjaHV1bmlrdWNodXV6ZWlcIDsKK+mbhuS4reaUu+aSgyA+IHNodXVjaHV1a291Z2VraVwgOwor56K65a6a5Yik5rG6ID4ga2FrdXRlaWhhbmtldHN1XCA7CivlsJHlpbPlsI/oqqwgPiBzaG91am9zaG91c2V0c3VcIDsKK+WNmuWtpuWKm+ihjCA+IGhha3VnYWt1cnlva2tvdVwgOwor5YKN57O76KGA5pePID4gYm91a2Vpa2V0c3V6b2t1XCA7CivkuK3plpPlhoXplqMgPiBjaHV1a2FuJyduYWlrYWt1XCA7CivljZjni6zkvpvntaYgPiB0YW5kb2t1a3lvdWt5dXVcIDsKK+WksealreS/nemZuiA+IHNoaXRzdWd5b3Vob2tlblwgOwor54m55Yil5Lya6KiIID4gdG9rdWJldHN1a2Fpa2VpXCA7CivmjK/luYXlpInoqr8gPiBzaGlucHVrdWhlbmNob3VcIDsKK+W6g+WRiuWPjuWFpSA+IGtvdWtva3VzaHV1bnl1dVwgOwor5Lit5Zu95aSn6Zm4ID4gY2h1dWdva3V0YWlyaWt1XCA7CivmlL7lh7rnianos4cgPiBob3VzaHV0c3VidXNzaGlcIDsKK+mFjemBlOiovOaYjiA+IGhhaXRhdHN1c2hvdW1laVwgOwor5pyA57WC55uu55qEID4gc2Fpc2h1dW1va3V0ZWtpXCA7CivkuIDok67miZjnlJ8gPiBpY2hpcmVudGFrdXNob3VcIDsKK+S4ieinkua4rOmHjyA+IHNhbmtha3Vzb2t1cnlvdVwgOwor5YuV54mp5a2m6ICFID4gZG91YnV0c3VnYWt1c2hhXCA7CivljJblrabnianos6ogPiBrYWdha3VidXNzaGl0c3VcIDsKK+eGseWOn+WtkOaguCA+IG5ldHN1Z2Vuc2hpa2FrdVwgOwor5Zyw6LOq6Kq/5p+7ID4gY2hpc2hpdHN1Y2hvdXNhXCA7Civmra/liJfnn6/mraMgPiBzaGlyZXRzdWt5b3VzZWlcIDsKK+Wbm+WNgeS4g+WjqyA+IHNoaWp1dXNoaWNoaXNoaVwgOwor5Y2B5pyI6Z2p5ZG9ID4ganV1Z2F0c3VrYWt1bWVpXCA7Civmlofos6rlvazlvawgPiBidW5zaGl0c3VoaW5waW5cIDsKK+S/oeiol+Wlkee0hCA+IHNoaW50YWt1a2VpeWFrdVwgOwor54us56uL5oim5LqJID4gZG9rdXJpdHN1c2Vuc291XCA7Civngavlipvnmbrpm7sgPiBrYXJ5b2t1aGF0c3VkZW5cIDsKK+mAn+mBlOmDteS+vyA+IHNva3V0YXRzdXl1dWJpblwgOwor5Zub55m+5Zub55eFID4gc2hpaHlha3VzaGlieW91XCA7CivlhYPluLPmrovpq5ggPiBtb3RvY2hvdXphbmRha2FcIDsKK+aKveixoee+juihkyA+IGNodXVzaG91YmlqdXRzdVwgOwor54mp6LOq5paH5piOID4gYnVzc2hpdHN1YnVubWVpXCA7CivotoXniannkIblraYgPiBjaG91YnV0c3VyaWdha3VcIDsKK+mjn+ezp+S4jei2syA+IHNob2t1cnlvdWJ1c29rdVwgOwor5YWs5YWx5pa96KitID4ga291a3lvdXNoaXNldHN1XCA7CivljZfmpbXmnaHntIQgPiBuYW5reW9rdWpvdXlha3VcIDsKK+WFteWKm+WJiua4myA+IGhlaXJ5b2t1c2FrdWdlblwgOwor5YWs6IG36L+95pS+ID4ga291c2hva3V0c3VpaG91XCA7CivlrabooZPlm6PkvZMgPiBnYWt1anV0c3VkYW50YWlcIDsKK+WFseeUn+eUn+eJqSA+IGt5b3VzZWlzZWlidXRzdVwgOwor6KKr5a2Q5qSN54mpID4gaGlzaGlzaG9rdWJ1dHN1XCA7CivmnInnlZzovrLmpa0gPiB5dXVjaGlrdW5vdWd5b3VcIDsKK+WvhOeUn+akjeeJqSA+IGtpc2Vpc2hva3VidXRzdVwgOwor5q2m5L6g5bCP6KqsID4gYnVreW91c2hvdXNldHN1XCA7CivmnKjos6rnuYrntq0gPiBtb2t1c2hpdHN1c2VuJydpXCA7Civnm7TpgJrliJfou4ogPiBjaG9rdXRzdXVyZXNzaGFcIDsKK+S4gOS4gOS5neeVqiA+IGh5YWt1anV1a3l1dWJhblwgOwor6Lui572u6KGM5YiXID4gdGVuY2hpZ3lvdXJldHN1XCA7Civlh7rli5Xlkb3ku6QgPiBzaHV0c3Vkb3VtZWlyZWlcIDsKK+iIjOWFiOS4ieWvuCA+IHNoaXRhc2FraXNhbnp1blwgOwor5aSn6KGG6aOf5aCCID4gdGFpc2h1dXNob2t1ZG91XCA7CivlhoXplqPplqPlg5ogPiBuYWlrYWt1a2FrdXJ5b3VcIDsKK+S6uuWPo+eIhueZuiA+IGppbmtvdWJha3VoYXRzdVwgOwor5Zyn57iu5Yq5546HID4gYXNzaHVrdWtvdXJpdHN1XCA7Civlm73nq4vpioDooYwgPiBrb2t1cml0c3VnaW5rb3VcIDsKK+S4gOeXheaBr+eBvSA+IGljaGlieW91c29rdXNhaVwgOwor5q2j6YeR5Y+W5byVID4gc2hvdWtpbnRvcmloaWtpXCA7CivmtYHpgJrpnanlkb0gPiByeXV1dHN1dWtha3VtZWlcIDsKK+iKuOihk+S9nOWTgSA+IGdlaWp1dHN1c2FrdWhpblwgOwor5paw6IiI5a6X5pWZID4gc2hpbmtvdXNodXVreW91XCA7Civnn6XorZjlt6XlraYgPiBjaGlzaGlraWtvdWdha3VcIDsKK+S9k+izquaUueWWhCA+IHRhaXNoaXRzdWthaXplblwgOwor54mH5YG06YCa6KGMID4ga2F0YWdhd2F0c3V1a291XCA7CivljZfmpbXlpKfpmbggPiBuYW5reW9rdXRhaXJpa3VcIDsKK+iJtueskeWwj+ipsSA+IGVuc2hvdWtvYmFuYXNoaVwgOwor5ZWG5qWt576O6KGTID4gc2hvdWd5b3ViaWp1dHN1XCA7CivnpZ7oibLoh6roi6UgPiBzaGluc2hva3VqaWpha3VcIDsKK+awtOmam+S9nOaIpiA+IG1penVnaXdhc2FrdXNlblwgOwor54mp55qE6Ki85ougID4gYnV0c3V0ZWtpc2hvdWtvXCA7Civmk43mpa3nn63nuK4gPiBzb3VneW91dGFuc2h1a3VcIDsKK+WGheiCoeiGj+iWrCA+IHVjaGltYXRhZ291eWFrdVwgOwor6Imy5b2p5oSf6KaaID4gc2hpa2lzYWlrYW5rYWt1XCA7CivotoXog73lipvogIUgPiBjaG91bm91cnlva3VzaGFcIDsKK+acqOmjn+S4iuS6uiA+IG1va3VqaWtpc2hvdW5pblwgOwor6YCj6LyJ5bCP6KqsID4gcmVuc2Fpc2hvdXNldHN1XCA7CivnhKbnhrHlnLDnjYQgPiBzaG91bmV0c3VqaWdva3VcIDsKK+mqqOeyl+mshueXhyA+IGtvdHN1c29zaG91c2hvdVwgOwor5rWB6YCa6Ki85Yi4ID4gcnl1dXRzdXVzaG91a2VuXCA7Civlt67lvJXli5jlrpogPiBzYXNoaWhpa2lrYW5qb3VcIDsKK+mWi+iFueaJi+ihkyA+IGthaWZ1a3VzaHVqdXRzdVwgOwor5Y2z5pel5Ye66I23ID4gc29rdWppdHN1c2h1a2thXCA7CivmoKrlvI/phY3lvZMgPiBrYWJ1c2hpa2loYWl0b3VcIDsKK+ibjeWFieeJqeizqiA+IGtlaWtvdWJ1c3NoaXRzdVwgOwor6IG06Kaa56We57WMID4gY2hvdWtha3VzaGlua2VpXCA7Civmh7LmiJLlhY3ogbcgPiBjaG91a2FpbWVuc2hva3VcIDsKK+eiuuWumueUs+WRiiA+IGtha3V0ZWlzaGlua29rdVwgOwor6IG35qWt6LuN5Lq6ID4gc2hva3VneW91Z3VuamluXCA7Civnmb3msrPlpJzoiLkgPiBzaGlyYWthd2F5b2Z1bmVcIDsKK+agquW8j+WFrOmWiyA+IGthYnVzaGlraWtvdWthaVwgOwor5buD5LuP5q+A6YeIID4gaGFpYnV0c3VraXNoYWt1XCA7CivnnLzlupXlh7rooYAgPiBnYW50ZWlzaHVra2V0c3VcIDsKK+S/oeS7u+aKleelqCA+IHNoaW4nJ25pbnRvdWh5b3VcIDsKK+mWoumAo+izquWVjyA+IGthbnJlbnNoaXRzdW1vblwgOwor5bu656+J5qWt6ICFID4ga2VuY2hpa3VneW91c2hhXCA7Civlk7Llrablj7LopoEgPiB0ZXRzdWdha3VzaGl5b3VcIDsKK+efpeitmOeUo+alrSA+IGNoaXNoaWtpc2FuZ3lvdVwgOwor5rWa5rir5L2c5qWtID4gc2h1bnNldHN1c2FneW91XCA7Civljbjlo7LluILloLQgPiBvcm9zaGl1cmlzaGlqb3VcIDsKK+mAmuS/oeaVmeiCsiA+IHRzdXVzaGlua3lvdWlrdVwgOwor5YyX5paX5LiD5pifID4gaG9rdXRvc2hpY2hpc2VpXCA7CivmraPlvI/nmbrooaggPiBzZWlzaGlraWhhcHB5b3VcIDsKK+aatOWKm+mdqeWRvSA+IGJvdXJ5b2t1a2FrdW1laVwgOwor5YWx55Sj5Lit5Zu9ID4ga3lvdXNhbmNodXVnb2t1XCA7Civmo67mnpfpiYTpgZMgPiBzaGlucmludGV0c3Vkb3VcIDsKK+e1jOa4iOWNlOWKmyA+IGtlaXphaWt5b3VyeW9rdVwgOwor54mp55qE5pCN5a6zID4gYnV0c3V0ZWtpc29uZ2FpXCA7CivnqbrkuK3niIbmkoMgPiBrdXVjaHV1YmFrdWdla2lcIDsKK+W5tOS4reWkseiogCA+IG5lbmp1dXNoaXRzdWdlblwgOwor5q2j5pa56KGM5YiXID4gc2VpaG91Z3lvdXJldHN1XCA7CivogIHoi6XnlLflpbMgPiByb3VueWFrdW5hbicnbnlvXCA7Civkv67kuoboqLzmm7ggPiBzaHV1cnlvdXNob3VzaG9cIDsKK+S4i+etieakjeeJqSA+IGthdG91c2hva3VidXRzdVwgOwor6aGV6Iqx5qSN54mpID4ga2Vua2FzaG9rdWJ1dHN1XCA7CivlnLDlhYPorablr58gPiBqaW1vdG9rZWlzYXRzdVwgOwor5Lit5Zu95Zyw5pa5ID4gY2h1dWdva3VjaGlob3VcIDsKK+S4ieagoee1guS6hiA+IHNhbmtvdXNodXVyeW91XCA7Civkurrlt6XooYDmtrIgPiBqaW5rb3VrZXRzdWVraVwgOwor5pyJ5oCn55Sf5q6WID4geXV1c2Vpc2Vpc2hva3VcIDsKK+mMrOmHkeihk+W4qyA+IHJlbmtpbmp1dHN1c2hpXCA7Civlr77ml6XmhJ/mg4UgPiB0YWluaWNoaWthbmpvdVwgOwor54yl6KS75paH5pu4ID4gd2Fpc2V0c3VidW5zaG9cIDsKK+S7ruijheihjOWIlyA+IGthc291Z3lvdXJldHN1XCA7CivmraPlvKbmm7Lnt5ogPiBzZWlnZW5reW9rdXNlblwgOwor5rKh5YCL5oCn55qEID4gYm90c3Vrb3NlaXRla2lcIDsKK+eLrOeri+mBi+WLlSA+IGRva3VyaXRzdXVuZG91XCA7CivohLHohILnsonkubMgPiBkYXNzaGlmdW4nJ255dXVcIDsKK+WOn+WtkOWKm+iIuSA+IGdlbnNoaXJ5b2t1c2VuXCA7CivkuInnkIPkuInmjK8gPiBzYW5reXV1c2Fuc2hpblwgOwor6Z2i55m95Y2K5YiGID4gb21vc2hpcm9oYW5idW5cIDsKK+WVhuiIueWkp+WtpiA+IHNob3VzZW5kYWlnYWt1XCA7CivlpKnlnLDkuIfniakgPiB0ZW5jaGliYW5idXRzdVwgOwor6ICQ54ax5ZCI6YeRID4gdGFpbmV0c3Vnb3VraW5cIDsKK+aUv+eVpee1kOWpmiA+IHNlaXJ5YWt1a2Vra29uXCA7Civnibnpq5jorablr58gPiB0b2trb3VrZWlzYXRzdVwgOwor5ZWG5oWj57+S5rOVID4gc2hvdWthbnNodXVob3VcIDsKK+aYhuiZq+aOoembhiA+IGtvbmNodXVzYWlzaHV1XCA7CivkuK3lm73mi7Pms5UgPiBjaHV1Z29rdWtlbnBvdVwgOwor576O6KGT55uj552jID4gYmlqdXRzdWthbnRva3VcIDsKK+WJr+Wkp+e1semgmCA+IGZ1a3VkYWl0b3VyeW91XCA7CivnhKbmgKfnoavphbggPiBzaG91c2Vpcnl1dXNhblwgOwor5ZGo5peL5qWt6ICFID4gc2h1dXNlbmd5b3VzaGFcIDsKK+WNl+WbnuW4sOe3miA+IG1pbmFtaWthaWtpc2VuXCA7Civog47nlJ/li5XniakgPiB0YWlzZWlkb3VidXRzdVwgOwor5YWo5Zu95Lit57aZID4gemVua29rdWNodXVrZWlcIDsKK+eJm+atqeaIpuihkyA+IGd5dXVob3Nlbmp1dHN1XCA7CivnqoHmkoPpmorlk6EgPiB0b3RzdWdla2l0YWlpblwgOwor57SE55m+5LiH5YaGID4geWFrdWh5YWt1bWFuZW5cIDsKK+S6uua1t+aIpuihkyA+IGppbmthaXNlbmp1dHN1XCA7CivlpKnmloflrabnmoQgPiB0ZW5tb25nYWt1dGVraVwgOwor5oCd5qGI5oqV6aaWID4gc2hpYW4nJ25hZ2VrdWJpXCA7Civoo4/lj6Pllrbmpa0gPiB1cmFndWNoaWVpZ3lvdVwgOwor5Lyd5aWH5bCP6KqsID4gZGVua2lzaG91c2V0c3VcIDsKK+S4reeri+S4u+e+qSA+IGNodXVyaXRzdXNodWdpXCA7CivnoJTnqbbos4fmlpkgPiBrZW5reXV1c2hpcnlvdVwgOwor5Y+k55Sf54mp5a2mID4ga29zZWlidXRzdWdha3VcIDsKK+abtOeUn+aWveiorSA+IGtvdXNlaXNoaXNldHN1XCA7CivniYfpgZPliIfnrKYgPiBrYXRhbWljaGlraXBwdVwgOwor5o6l57aa5Yqp6KmeID4gc2V0c3V6b2t1am9zaGlcIDsKK+iLseS7j+a1t+WzoSA+IGVpZnV0c3VrYWlreW91XCA7CivnqJTlrp/kuI3oia8gPiBuZW5qaXRzdWZ1cnlvdVwgOwor5YWs6KGG5rW05aC0ID4ga291c2h1dXlva3Vqb3VcIDsKK+err+acq+ijhee9riA+IHRhbm1hdHN1c291Y2hpXCA7Civpp5Dou4rmlpnph5EgPiBjaHV1c2hhcnlvdWtpblwgOwor6LOH5pys5Y+W5byVID4gc2hpaG9udG9yaWhpa2lcIDsKK+agquW8j+ebuOWgtCA+IGthYnVzaGlraXNvdWJhXCA7CivlhY3nlqvlj43lv5wgPiBtZW4nJ2VraWhhbicnbm91XCA7Civlu7roqK3kvJrnpL4gPiBrZW5zZXRzdWdhaXNoYVwgOwor5pys5pyr6aGb5YCSID4gaG9ubWF0c3V0ZW50b3VcIDsKK+WIneW/l+iyq+W+uSA+IHNob3NoaWthbnRldHN1XCA7CivnlKPmpa3pnanlkb0gPiBzYW5neW91a2FrdW1laVwgOwor5a6a5bm06YCA6IG3ID4gdGVpbmVudGFpc2hva3VcIDsKK+Wbvemam+imquWWhCA+IGtva3VzYWlzaGluemVuXCA7CivmgKfmoLzoqLrmlq0gPiBzZWlrYWt1c2hpbmRhblwgOwor5YWo6Lqr6KGw5byxID4gemVuc2hpbnN1aWpha3VcIDsKK+WVj+mhjOino+axuiA+IG1vbmRhaWthaWtldHN1XCA7Civlk7rkubPli5XniakgPiBob255dXVkb3VidXRzdVwgOwor6LOH5pys5rOo5YWlID4gc2hpaG9uY2h1dW55dXVcIDsKK+S/rualreW5tOmZkCA+IHNodXVneW91bmVuZ2VuXCA7Civnt5HntqzopJLnq6AgPiByeW9rdWp1aG91c2hvdVwgOwor56CU56m26aGM55uuID4ga2Vua3l1dWRhaW1va3VcIDsKK+eXheW6iuaXpeiqjCA+IGJ5b3VzaG91bmlzc2hpXCA7CivnrpfooZPoqIjnrpcgPiBzYW5qdXRzdWtlaXNhblwgOwor5biw5YyW5qSN54mpID4ga2lrYXNob2t1YnV0c3VcIDsKK+mHkeiejeaBkOaFjCA+IGtpbicneXV1a3lvdWtvdVwgOwor54m55Yil5o6q572uID4gdG9rdWJldHN1c29jaGlcIDsKK+W8m+W8teaMr+WLlSA+IHNoaWNob3VzaGluZG91XCA7CivmiKbmiKblhaLlhaIgPiBzZW5zZW5reW91a3lvdVwgOwor6Kaz5YWJ5pa96KitID4ga2Fua291c2hpc2V0c3VcIDsKK+WWhOeUt+WWhOWlsyA+IHplbicnbmFuemVuJydueW9cIDsKK+S/oeeUqOiyqeWjsiA+IHNoaW4nJ3lvdWhhbmJhaVwgOwor5pyr5qKi56We57WMID4gbWFzc2hvdXNoaW5rZWlcIDsKK+mqqOmrhOenu+akjSA+IGtvdHN1enVpaXNob2t1XCA7CivpgZPlvrPmlZnogrIgPiBkb3V0b2t1a3lvdWlrdVwgOwor6YeR5q6/546J5qW8ID4ga2luZGVuZ3lva3Vyb3VcIDsKK+eCuea7tOazqOWwhCA+IHRlbnRla2ljaHV1c2hhXCA7Civlt6Xlrabkv67lo6sgPiBrb3VnYWt1c2h1dXNoaVwgOwor6ZaA5aSW5LiN5Ye6ID4gbW9uZ2FpZnVzaHV0c3VcIDsKK+mAmuS/oeijhee9riA+IHRzdXVzaGluc291Y2hpXCA7CivkvZzmiKboqIjnlLsgPiBzYWt1c2Vua2Vpa2FrdVwgOwor5aC05aSW5Y+W5byVID4gam91Z2FpdG9yaWhpa2lcIDsKK+S/oeiol+mKgOihjCA+IHNoaW50YWt1Z2lua291XCA7CivlooPnlYzoqr/mlbQgPiBreW91a2FpY2hvdXNlaVwgOwor5Li75Yqb6Imm6ZqKID4gc2h1cnlva3VrYW50YWlcIDsKK+iBt+WgtOeSsOWigyA+IHNob2t1YmFrYW5reW91XCA7CivlibLlvJXkvqHmoLwgPiB3YXJpYmlraWtha2FrdVwgOwor5pW05b2i5omL6KGTID4gc2Vpa2Vpc2h1anV0c3VcIDsKK+mFuOaAp+mjn+WTgSA+IHNhbnNlaXNob2t1aGluXCA7Civljp/lrZDlipvlraYgPiBnZW5zaGlyaWtpZ2FrdVwgOwor5rC05Lit57+86Ii5ID4gc3VpY2h1dXlva3VzZW5cIDsKK+eZuumBlOautemajiA+IGhhdHRhdHN1ZGFua2FpXCA7Civoq7joqqzntJvntJsgPiBzaG9zZXRzdWZ1bnB1blwgOwor5Lmz6YW46aOy5paZID4gbnl1dXNhbicnaW5yeW91XCA7CivlgIvjgIXliKXliKUgPiBrb2tvYmV0c3ViZXRzdVwgOwor5Y+j5LiN6Kq/5rOVID4ga3VjaGlidWNob3Vob3VcIDsKK+i2heiHqueEtueahCA+IGNob3VzaGl6ZW50ZWtpXCA7Civlm73pmLLplbflrpggPiBrb2t1Ym91Y2hvdWthblwgOwor5q2j57Wx5L+h5pWZID4gc2VpdG91c2hpbmt5b3VcIDsKK+W8t+WMluWQiOWuvyA+IGt5b3VrYWdhc3NodWt1XCA7CivmnJ3prq7kurrlj4IgPiBjaG91c2VuJyduaW5qaW5cIDsKK+adn+e4m+WkiemghSA+IHNva3ViYWt1aGVua291XCA7CivnpZ7ntYzntYTnuZQgPiBzaGlua2Vpc29zaGlraVwgOwor6LaF6LaK6Zai5pWwID4gY2hvdWV0c3VrYW5zdXVcIDsKK+WKueeOh+WQkeS4iiA+IGtvdXJpdHN1a291am91XCA7CivlpKfohLPnmq7os6ogPiBkYWlub3VoaXNoaXRzdVwgOwor55Sf5L2T5Yqb5a2mID4gc2VpdGFpcmlraWdha3VcIDsKK+WxseS4i+WFrOWckiA+IHlhbWFzaGl0YWtvdWVuXCA7Civlj6Pov7DoqabpqJMgPiBrb3VqdXRzdXNoaWtlblwgOwor5LiA5pel54mH5pmCID4gaWNoaW5pY2hpaGVuamlcIDsKK+ekvuS8mueUn+a0uyA+IHNoYWthaXNlaWthdHN1XCA7Civlh7rniYjnm67pjLIgPiBzaHVwYW5tb2t1cm9rdVwgOwor5Yil6YCU5pSv5Ye6ID4gYmV0dG9zaGlzaHV0c3VcIDsKK+eUs+WRiue0jeeojiA+IHNoaW5rb2t1bm91emVpXCA7CivljbPmsbroo4HliKQgPiBzb2trZXRzdXNhaWJhblwgOwor54us56uL6Ieq5bCKID4gZG9rdXJpdHN1amlzb25cIDsKK+Wpmue0hOaMh+i8qiA+IGtvbicneWFrdXl1Yml3YVwgOwor6KGA5ray5Yed5Zu6ID4ga2V0c3Vla2lneW91a29cIDsKK+WHuuWHpumAsumAgCA+IHNodXNzaG9zaGludGFpXCA7CivlvJPnn6LlhavluaEgPiB5dW1peWFoYWNoaW1hblwgOwor6K2m5a+f5omL5bizID4ga2Vpc2F0c3V0ZWNob3VcIDsKK+iBt+alreWppuS6uiA+IHNob2t1Z3lvdWZ1amluXCA7Civoh7Pnpo/ljYPlubQgPiBzaGlmdWt1c2VuJyduZW5cIDsKK+WkqeWcsOmWi+mXoiA+IHRlbmNoaWthaWJ5YWt1XCA7Civlhrflh43po5/lk4EgPiByZWl0b3VzaG9rdWhpblwgOwor6KOc6Laz6Kqs5piOID4gaG9zb2t1c2V0c3VtZWlcIDsKK+S/oeeUqOeKtuaFiyA+IHNoaW4nJ3lvdWpvdXRhaVwgOwor57W25a++5rm/5bqmID4gemV0dGFpc2hpdHN1ZG9cIDsKK+aYjuaYjueZveeZvSA+IG1laW1laWhha3VoYWt1XCA7Civou43lgpnnuK7lsI8gPiBndW5iaXNodWt1c2hvdVwgOwor5pq05Yqb5Zuj5ZOhID4gYm91cnlva3VkYW4nJ2luXCA7CivlpKflrabmlZnogrIgPiBkYWlnYWt1a3lvdWlrdVwgOwor56ys5LiJ5Lq656ewID4gZGFpc2FuJyduaW5zaG91XCA7CivmsLjkuJbkuK3nq4sgPiBlaXNlaWNodXVyaXRzdVwgOwor56CU56m26aCY5Z+fID4ga2Vua3l1dXJ5b3Vpa2lcIDsKK+aVmeiCsuWLheiqniA+IGt5b3Vpa3VjaG9rdWdvXCA7Civnsr7npZ7pmpzlrrMgPiBzZWlzaGluc2hvdWdhaVwgOwor5aSp56m65rW35r+2ID4gdGVua3V1a2Fpa2F0c3VcIDsKK+mjn+mkjOeZguazlSA+IHNob2t1amlyeW91aG91XCA7CivkvZzogIXkuI3nn6UgPiBzYWt1c2hhc2hpcmF6dVwgOwor55Sf5rS75rC05rqWID4gc2Vpa2F0c3VzdWlqdW5cIDsKK+WNteeUn+WLleeJqSA+IHJhbnNlaWRvdWJ1dHN1XCA7CivnrYvogonlirTlg40gPiBraW4nJ25pa3Vyb3Vkb3VcIDsKK+WNl+aUr+mCo+a1tyA+IG1pbmFtaXNoaW5ha2FpXCA7CivlrabooZPnlKjoqp4gPiBnYWt1anV0c3V5b3Vnb1wgOwor6Ieq54S26aOf5ZOBID4gc2hpemVuc2hva3VoaW5cIDsKK+WVhualree1hOWQiCA+IHNob3VneW91a3VtaWFpXCA7CivogbfmqKnkubHnlKggPiBzaG9ra2VucmFuJyd5b3VcIDsKK+S8tOmjn+Wkp+iHoyA+IGJhbnNob2t1ZGFpamluXCA7CivlsqHnm67lhavnm64gPiBva2FtZWhhY2hpbW9rdVwgOwor5pas5paw5aWH5oqcID4gemFuc2hpbmtpYmF0c3VcIDsKK+ebtOaDheW+hOihjCA+IGNob2t1am91a2Vpa291XCA7Civnp4Hnq4vlrabmoKEgPiBzaGlyaXRzdWdha2tvdVwgOwor5Lit5pel6L6e5YW4ID4gY2h1dW5pY2hpaml0ZW5cIDsKK+WIhumhnuebrumMsiA+IGJ1bnJ1aW1va3Vyb2t1XCA7CivlhoXliIbms4zohbogPiBuYWlidW5waXRzdXNlblwgOwor5rS76Lev6ZaL5ouTID4ga2F0c3Vyb2thaXRha3VcIDsKK+W5s+adv+a4rOmHjyA+IGhlaWJhbnNva3VyeW91XCA7CivmupDms4nlvrTlj44gPiBnZW5zZW5jaG91c2h1dVwgOwor6YCa5L+h6KGb5pifID4gdHN1dXNoaW4nJ2Vpc2VpXCA7CivmuIXnrpflj5blvJUgPiBzZWlzYW50b3JpaGlraVwgOwor54m55q6K5a2m57SaID4gdG9rdXNodWdha2t5dXVcIDsKK+S/oeeUqOiqv+afuyA+IHNoaW4nJ3lvdWNob3VzYVwgOwor5YWI54mp5aOy6LK3ID4gc2FraW1vbm9iYWliYWlcIDsKK+S4g+mbo+WFq+iLpiA+IHNoaWNoaW5hbmhha2t1XCA7Civop5Lohpznp7vmpI0gPiBrYWt1bWFrdWlzaG9rdVwgOwor5pWR5oCl55eF6ZmiID4ga3l1dWt5dXVieW91aW5cIDsKK+aOpeinpuaEn+afkyA+IHNlc3Nob2t1a2Fuc2VuXCA7CivnqI7ph5HnlLPlkYogPiB6ZWlraW5zaGlua29rdVwgOwor57Wo5q+v54iG5pKDID4ganV1dGFuYmFrdWdla2lcIDsKK+S4g+i7ouWFq+i1tyA+IHNoaWNoaXRlbmhha2tpXCA7CivmsLTpioDkuK3mr5IgPiBzdWlnaW5jaHV1ZG9rdVwgOwor6Zyy5Ye65LiN6LazID4gcm9zaHV0c3VidXNva3VcIDsKK+W5s+S4iuWOu+WFpSA+IGh5b3Vqb3VreW9ueXV1XCA7Civlm73nq4vlhazlnJIgPiBrb2t1cml0c3Vrb3VlblwgOwor5YWs56uL5a2m5qChID4ga291cml0c3VnYWtrb3VcIDsKK+mAmuS/oeWcj+WkliA+IHRzdXVzaGlua2VuZ2FpXCA7CivntITmnZ/miYvlvaIgPiB5YWt1c29rdXRlZ2F0YVwgOwor5Y+s6ZuG5Luk54q2ID4gc2hvdXNodXVyZWlqb3VcIDsKK+aWsOWFpeekvuWToSA+IHNoaW4nJ255dXVzaGFpblwgOwor5pel5Y2X5rW35bK4ID4gbmljaGluYW5rYWlnYW5cIDsKK+axjuaVtOaVsOW8jyA+IGhhbnNlaXN1dXNoaWtpXCA7Civlj6TnianllYbkurogPiBrb2J1dHN1c2hvdW5pblwgOwor5q2m5Yqb5bmy5riJID4gYnVyeW9rdWthbnNob3VcIDsKK+WFrOihhumBk+W+syA+IGtvdXNodXVkb3V0b2t1XCA7CivmgKrlpYflsI/oqqwgPiBrYWlraXNob3VzZXRzdVwgOwor56eY5a+G5oqV56WoID4gaGltaXRzdXRvdWh5b3VcIDsKK+Wcp+WKm+WuueWZqCA+IGF0c3VyeW9rdXlvdWtpXCA7Civlgo3nm67lhavnm64gPiBva2FtZWhhY2hpbW9rdVwgOwor5rGC5ama5bqD5ZGKID4ga3l1dWtvbmtvdWtva3VcIDsKK+W/g+WboOWPjeW/nCA+IHNoaW4nJ2luaGFuJydub3VcIDsKK+m6puiXgeW4veWtkCA+IG11Z2l3YXJhYm91c2hpXCA7CivntI3nqI7nlLPlkYogPiBub3V6ZWlzaGlua29rdVwgOwor5Y+N5a++56ew55qEID4gaGFudGFpc2hvdXRla2lcIDsKK+S9j+WPi+mKgOihjCA+IHN1bWl0b21vZ2lua291XCA7Civlh7rmiYDpgLLpgIAgPiBzaHVzc2hvc2hpbnRhaVwgOwor5bCx5qWt5Lq65Y+jID4gc2h1dWd5b3VqaW5rb3VcIDsKK+WFqOWLneWEquWLnSA+IHplbnNob3V5dXVzaG91XCA7Civlu7roqK3lpKfoh6MgPiBrZW5zZXRzdWRhaWppblwgOwor6Z2e6Imv5b+D55qEID4gaGlyeW91c2hpbnRla2lcIDsKK+e1tuWvvuW/heimgSA+IHpldHRhaWhpdHN1eW91XCA7Civom7jotrPphY3nt5ogPiB0YWtvYXNoaWhhaXNlblwgOwor5bel5qWt5aSn5a2mID4ga291Z3lvdWRhaWdha3VcIDsKK+mHkeWjseS4h+WGhiA+IGtpbicnaWNoaW1hbicnZW5cIDsKK+aXheWuouWIl+i7iiA+IHJ5b2t5YWt1cmVzc2hhXCA7Civnq4vkvJrmvJToqqwgPiB0YWNoaWFpZW56ZXRzdVwgOwor5aWo5a2m6LOH6YeRID4gc2hvdWdha3VzaGlraW5cIDsKK+ePvumHkeWPjuWFpSA+IGdlbmtpbnNodXVueXV1XCA7CivlrabooZPkvJrorbAgPiBnYWt1anV0c3VrYWlnaVwgOwor5rOV5b6L5ZWP6aGMID4gaG91cml0c3Vtb25kYWlcIDsKK+ebtOmAmumbu+ipsSA+IGNob2t1dHN1dWRlbndhXCA7Civlj7DmiYDpgZPlhbcgPiBkYWlkb2tvcm9kb3VndVwgOwor6Zu75rqQ5L6b57WmID4gZGVuZ2Vua3lvdWt5dXVcIDsKK+WBnOW5tOmAgOiBtyA+IHRlaW5lbnRhaXNob2t1XCA7CivmsLTpmbjkuKHnlKggPiBzdWlyaWt1cnlvdXlvdVwgOwor6YCa5L+h5omL5q61ID4gdHN1dXNoaW5zaHVkYW5cIDsKK+S4i+iri+S8muekviA+IHNoaXRhdWtlZ2Fpc2hhXCA7CivnrKzkuIDkurrnp7AgPiBkYWlpY2hpbmluc2hvdVwgOwor5a2m5q2056S+5LyaID4gZ2FrdXJla2lzaGFrYWlcIDsKK+a8lOWlj+absuebriA+IGVuc291a3lva3Vtb2t1XCA7CivmgJ3mg7Porablr58gPiBzaGlzb3VrZWlzYXRzdVwgOwor5YWs55uK6LOq5bGLID4ga291ZWtpc2hpY2hpeWFcIDsKK+WBleiAgeWQjOeptCA+IGthaXJvdWRvdWtldHN1XCA7CivlgaXlurfpo5/lk4EgPiBrZW5rb3VzaG9rdWhpblwgOwor5oq96LGh5ZCN6KmeID4gY2h1dXNob3VtZWlzaGlcIDsKK+Wwj+S5l+S7j+aVmSA+IHNob3Vqb3VidWtreW91XCA7CivlkIjnm67nmoTmgKcgPiBnb3Vtb2t1dGVraXNlaVwgOwor6Zu75Yqb5Lya56S+ID4gZGVucnlva3VnYWlzaGFcIDsKK+a1t+a0i+mWi+eZuiA+IGthaXlvdWthaWhhdHN1XCA7CivntLDog57liIboo4IgPiBzYWlib3VidW5yZXRzdVwgOwor5oCl6KGM5paZ6YeRID4ga3l1dWtvdXJ5b3VraW5cIDsKK+S4geS4geeZuuatoiA+IGNob3VjaG91aGFzc2hpXCA7CivmlZnogbfoqrLnqIsgPiBreW91c2hva3VrYXRlaVwgOwor5Ye654mI5qWt6ICFID4gc2h1cHBhbmd5b3VzaGFcIDsKK+WwseiBt+mBi+WLlSA+IHNodXVzaG9rdXVuZG91XCA7CivnlaXlparooYzngrogPiByeWFrdWRhdHN1a291aVwgOwor55CG6Z2e5puy55u0ID4gcmloaWt5b2t1Y2hva3VcIDsKK+WIpeWGiuS7mOmMsiA+IGJlc3NhdHN1ZnVyb2t1XCA7CivkuInmqKnliIbnq4sgPiBzYW5rZW5idW5yaXRzdVwgOwor5YWx5ZCM56CU56m2ID4ga3lvdWRvdWtlbmt5dXVcIDsKK+aWsOWIiue0ueS7iyA+IHNoaW5rYW5zaG91a2FpXCA7Civmo5/libLplbflsYsgPiBtdW5ld2FyaW5hZ2F5YVwgOwor5L+u5aW95p2h57SEID4gc2h1dWtvdWpvdXlha3VcIDsKK+WGoOeKtuWLleiEiCA+IGthbmpvdWRvdW15YWt1XCA7CivnqbrnqbrmvKDmvKAgPiBrdXVrdXViYWt1YmFrdVwgOwor5oKq5oCn6LKn6KGAID4gYWt1c2VpaGlua2V0c3VcIDsKK+S8keaIpuWNlOWumiA+IGt5dXVzZW5reW91dGVpXCA7CivnpZ7ntYzoobDlvLEgPiBzaGlua2Vpc3VpamFrdVwgOwor5Zue5oqY5qC85a2QID4ga2Fpc2V0c3Vrb3VzaGlcIDsKK+WFiOaxuuWVj+mhjCA+IHNlbmtldHN1bW9uZGFpXCA7CivlsLHmpa3ml6XmlbAgPiBzaHV1Z3lvdW5pc3N1dVwgOwor5a6f6aiT5YuV54mpID4gamlra2VuZG91YnV0c3VcIDsKK+W/oOWQm+aEm+WbvSA+IGNodXVrdW4nJ2Fpa29rdVwgOwor5rGC5Lq65bqD5ZGKID4ga3l1dWppbmtvdWtva3VcIDsKK+eLrOeri+eLrOatqSA+IGRva3VyaXRzdWRvcHBvXCA7Civoq7joqqzntJvjgIUgPiBzaG9zZXRzdWZ1bnB1blwgOwor5pyJ5a6z6aOf5ZOBID4geXV1Z2Fpc2hva3VoaW5cIDsKK+m6u+iWrOS4reavkiA+IG1heWFrdWNodXVkb2t1XCA7Civph5HlsZ7lt6Xmpa0gPiBraW56b2t1a291Z3lvdVwgOwor5Y245aOy54mp5L6hID4gb3Jvc2hpdXJpYnVra2FcIDsKK+WFseWQjOWHuuizhyA+IGt5b3Vkb3VzaHVzc2hpXCA7Civni63ou4zpiYTpgZMgPiBreW91a2l0ZXRzdWRvdVwgOwor5ZWG5qWt5omL5b2iID4gc2hvdWd5b3V0ZWdhdGFcIDsKK+mDteS+v+mFjemBlCA+IHl1dWJpbmhhaXRhdHN1XCA7CivmuK/mub7lvZPlsYAgPiBrb3V3YW50b3VreW9rdVwgOwor5ZWG5qWt6YqA6KGMID4gc2hvdWd5b3VnaW5rb3VcIDsKK+ecgeeVpeiomOWPtyA+IHNob3VyeWFrdWtpZ291XCA7CivkuK3plpPloLHlkYogPiBjaHV1a2FuaG91a29rdVwgOwor5Lit5b+D5oCd5oOzID4gY2h1dXNoaW5zaGlzb3VcIDsKK+S6lOaciOS6uuW9oiA+IGdvZ2F0c3VuaW5neW91XCA7CivkvJ3mib/mloflraYgPiBkZW5zaG91YnVuZ2FrdVwgOwor6Luf5L2T5YuV54mpID4gbmFudGFpZG91YnV0c3VcIDsKK+W8t+WItuWPjuWuuSA+IGt5b3VzZWlzaHV1eW91XCA7CivkuIDpmb3mnaXohbkgPiBpY2hpeW91cmFpZnVrdVwgOwor5ryB5qWt5Y2U5a6aID4gZ3lvZ3lvdWt5b3V0ZWlcIDsKK+awtOeUn+WLleeJqSA+IHN1aXNlaWRvdWJ1dHN1XCA7CivmpZTlvaLmloflrZcgPiBrdXNhYmlnYXRhbW9qaVwgOwor5L+h55So57WE5ZCIID4gc2hpbicneW91a3VtaWFpXCA7CivnoJTnqbbloLHlkYogPiBrZW5reXV1aG91a29rdVwgOwor5rC05aSp5b235b2/ID4gc3VpdGVuaG91ZnV0c3VcIDsKK+S9j+WuheeUo+alrSA+IGp1dXRha3VzYW5neW91XCA7Civms6HmsqvkvJrnpL4gPiBob3VtYXRzdWdhaXNoYVwgOwor6KuH6KuW6aKo55m6ID4gZGFucm9uZnV1aGF0c3VcIDsKK+WFiOeZuuaKleaJiyA+IHNlbnBhdHN1dG91c2h1XCA7CivmjqjnkIblsI/oqqwgPiBzdWlyaXNob3VzZXRzdVwgOwor57Sz5aOr5Y2U5a6aID4gc2hpbnNoaWt5b3V0ZWlcIDsKK+Wkp+WQjeWxi+aVtyA+IGRhaW15b3V5YXNoaWtpXCA7CivnibnnlbDkvZPos6ogPiB0b2t1aXRhaXNoaXRzdVwgOwor5Lit6ZaT5pC+5Y+WID4gY2h1dWthbnNha3VzaHVcIDsKK+WNlOiqv+S9nOalrSA+IGt5b3VjaG91c2FneW91XCA7CivmjIflnKfnmYLms5UgPiBzaGlhdHN1cnlvdWhvdVwgOwor5bel5qWt5oqA6KGTID4ga291Z3lvdWdpanV0c3VcIDsKK+e3j+WQiOiKuOihkyA+IHNvdWdvdWdlaWp1dHN1XCA7CivkuK3nlKPpmo7ntJogPiBjaHV1c2Fua2Fpa3l1dVwgOwor5Y2X5Y2B5a2X5pifID4gbWluYW1panV1amlzZWlcIDsKK+W/g+mciuaJi+ihkyA+IHNoaW5yZWl0ZWp1dHN1XCA7CivmiJDplbfnlKPmpa0gPiBzZWljaG91c2FuZ3lvdVwgOwor5Zu96Zqb5Y+O5pSvID4ga29rdXNhaXNodXVzaGlcIDsKK+WOmueUn+aWveiorSA+IGtvdXNlaXNoaXNldHN1XCA7CivkuIrpmbjkvZzmiKYgPiBqb3VyaWt1c2FrdXNlblwgOwor5YuV5Yqb6LOH5rqQID4gZG91cnlva3VzaGlnZW5cIDsKK+W/heimgeadoeS7tiA+IGhpdHN1eW91am91a2VuXCA7CivkuK3mtYHmhI/orZggPiBjaHV1cnl1dWlzaGlraVwgOwor5Ye65ryB5Yy65Z+fID4gc2h1dHN1Z3lva3Vpa2lcIDsKK+iyoeW9ouiyr+iThCA+IHphaWtlaWNob2NoaWt1XCA7CivogbfkurrmsJfos6ogPiBzaG9rdW5pbmthdGFnaVwgOwor5Y2Y5L2N6KGM5YiXID4gdGFuJydpZ3lvdXJldHN1XCA7Civlm73pgKPmhrLnq6AgPiBrb2t1cmVua2Vuc2hvdVwgOwor5rC05YWI5qGI5YaFID4gbWl6dXNha2lhbicnbmFpXCA7Civlj47lrrnoqK3lgpkgPiBzaHV1eW91c2V0c3ViaVwgOwor5rex5rW35ryB5qWtID4gc2hpbmthaWd5b2d5b3VcIDsKK+ebtOW+gOmCgemAsiA+IGNob2t1b3VtYWlzaGluXCA7CivlpKnkvZPlipvlraYgPiB0ZW50YWlyaWtpZ2FrdVwgOwor55yf56m66Zu755CDID4gc2hpbmt1dWRlbmt5dXVcIDsKK+S4iuWxpOW7uueviSA+IGpvdXNvdWtlbmNoaWt1XCA7CivlvbnogbfmiYvlvZMgPiB5YWt1c2hva3V0ZWF0ZVwgOwor6auY5Zyn6Zu75rWBID4ga291YXRzdWRlbnJ5dXVcIDsKK+S6pOmAmumBk+W+syA+IGtvdXRzdXVkb3V0b2t1XCA7CivmsLTmupbmuKzph48gPiBzdWlqdW5zb2t1cnlvdVwgOwor5byB6Ki85rOV55qEID4gYmVuc2hvdWhvdXRla2lcIDsKK+advuiMuOW+oemjryA+IG1hdHN1dGFrZWdvaGFuXCA7CivplqLnqI7pmpzlo4EgPiBrYW56ZWlzaG91aGVraVwgOwor57Wx5ous6YOo6ZW3ID4gdG91a2F0c3VidWNob3VcIDsKK+aQjeWkseijnOWhqyA+IHNvbnNoaXRzdWhvdGVuXCA7CivkuovkuovnianniakgPiBqaWppYnV0c3VidXRzdVwgOwor5oim44CF5oGQ44CFID4gc2Vuc2Vua3lvdWt5b3VcIDsKK+mAo+e2muWGmeecnyA+IHJlbnpva3VzaGFzaGluXCA7Civlm5vnmb7kvZnlt54gPiBzaGloeWFrdXlvc2h1dVwgOwor5LiA6Zm95p2l5b6pID4gaWNoaXlvdXJhaWZ1a3VcIDsKK+W/g+eti+ail+WhniA+IHNoaW5raW5rb3Vzb2t1XCA7CivlrpfmlZnoo4HliKQgPiBzaHV1a3lvdXNhaWJhblwgOwor5YaZ55yf55+z54mIID4gc2hhc2hpbnNla2liYW5cIDsKK+maoOiKseakjeeJqSA+IGlua2FzaG9rdWJ1dHN1XCA7Civlvq7nlJ/nianlraYgPiBiaXNlaWJ1dHN1Z2FrdVwgOwor5oim55Wl56m66LuNID4gc2Vucnlha3VrdXVndW5cIDsKK+aBreizgOaWsOW5tCA+IGt5b3VnYXNoaW4nJ25lblwgOwor5Zu96Zqb5Y2U5a6aID4ga29rdXNhaWt5b3V0ZWlcIDsKK+iJsuWNs+aYr+epuiA+IHNoaWtpc29rdXpla3V1XCA7CivpoK3lr5LotrPnhrEgPiB6dWthbnNva3VuZXRzdVwgOwor5Yy65qSc5a+f5bqBID4ga3VrZW5zYXRzdWNob3VcIDsKK+aguOmYsuihm+WKmyA+IGtha3Vib3VlaXJ5b2t1XCA7Civlrozlhajnh4PnhLwgPiBrYW56ZW4nJ25lbnNob3VcIDsKK+mHjemHj+aEn+immiA+IGp1dXJ5b3VrYW5rYWt1XCA7Civpm4zpm4TpkZHliKUgPiBzaGl5dXVrYW5iZXRzdVwgOwor5Y6f55Sf5YuV54mpID4gZ2Vuc2VpZG91YnV0c3VcIDsKK+ebrueahOaEj+itmCA+IG1va3V0ZWtpaXNoaWtpXCA7CivmtbfnlJ/li5XniakgPiBrYWlzZWlkb3VidXRzdVwgOwor5pS75pKD57K+56WeID4ga291Z2VraXNlaXNoaW5cIDsKK+S9nOaIkOaKgOihkyA+IHNha3VzZWlnaWp1dHN1XCA7Civph5Hpiq3kv6HoqJcgPiBraW5zZW5zaGludGFrdVwgOwor5ZC45Y+O5ZCI5L21ID4ga3l1dXNodXVnYXBwZWlcIDsKK+aPm+mqqOWlquiDjiA+IGthbmtvdHN1ZGF0dGFpXCA7Civnoazos6rpmbblmaggPiBrb3VzaGl0c3V0b3VraVwgOwor5a+d5Y+w5paZ6YeRID4gc2hpbmRhaXJ5b3VraW5cIDsKK+izvOWFpeazqOaWhyA+IGtvdW55dXVjaHV1bW9uXCA7CivnhKblnJ/miKbooZMgPiBzaG91ZG9zZW5qdXRzdVwgOwor5pyJ6IG35pWF5a6fID4geXV1c29rdWtvaml0c3VcIDsKK+eEoeWEn+S/oeiolyA+IG11c2hvdXNoaW50YWt1XCA7CivmtojosrvnlJ/mtLsgPiBzaG91aGlzZWlrYXRzdVwgOwor5a6k5YaF6YGK5oivID4gc2hpdHN1bmFpeXV1Z2lcIDsKK+Wul+aVmeWbo+S9kyA+IHNodXVreW91ZGFudGFpXCA7CivpgLLooYznirbms4EgPiBzaGlua291am91a3lvdVwgOwor6auY562J5YuV54mpID4ga291dG91ZG91YnV0c3VcIDsKK+S4gOiGs+mjr+WxiyA+IGljaGl6ZW5tZXNoaXlhXCA7CivmmYLku6PlsI/oqqwgPiBqaWRhaXNob3VzZXRzdVwgOwor5puy57ea5bqn5qiZID4ga3lva3VzZW56YWh5b3VcIDsKK+W9k+ipsuS6uueJqSA+IHRvdWdhaWppbmJ1dHN1XCA7CivopoHmsYLpgIHkv6EgPiB5b3VreXV1c291c2hpblwgOwor55m+5Lq65LiA6aaWID4gaHlha3VuaW4nJ2lzc2h1XCA7Civpm4blm6PmpJzoqLogPiBzaHV1ZGFua2Vuc2hpblwgOwor5a6J5a+n56ep5bqPID4gYW4nJ25laWNoaXRzdWpvXCA7CivmpbXmpb3ps6XoirEgPiBnb2t1cmFrdWNob3VrYVwgOwor5Lit6LaK57Sb5LqJID4gY2h1dWV0c3VmdW5zb3VcIDsKK+S4gOaLrOizvOWFpSA+IGlra2F0c3Vrb3VueXV1XCA7CivmsJHml4/oh6rmsbogPiBtaW56b2t1amlrZXRzdVwgOwor5q2j6Z2i5pS75pKDID4gc2hvdW1lbmtvdWdla2lcIDsKK+aVmeiCsueUo+alrSA+IGt5b3Vpa3VzYW5neW91XCA7Civnqbroqr/oqK3lgpkgPiBrdXVjaG91c2V0c3ViaVwgOwor5Y2Y54us5YaF6ZajID4gdGFuZG9rdW5haWtha3VcIDsKK+aVmeiCsuWun+e/kiA+IGt5b3Vpa3VqaXNzaHV1XCA7CivlsLHmpa3opo/liYcgPiBzaHV1Z3lvdWtpc29rdVwgOwor5pWZ6aSK55Wq57WEID4ga3lvdXlvdWJhbmd1bWlcIDsKK+WHjee1kOizh+eUoyA+IHRvdWtldHN1c2hpc2FuXCA7Civpm4blm6PovrLloLQgPiBzaHV1ZGFuJydub3Vqb3VcIDsKK+WRqOi+uuiruOWbvSA+IHNodXVoZW5zaG9rb2t1XCA7Civlm73nsY3mnaHpoIUgPiBrb2t1c2VraWpvdWtvdVwgOwor54++54mp57Wm5LiOID4gZ2VuYnV0c3VreXV1eW9cIDsKK+ixqumbquWcsOW4ryA+IGdvdXNldHN1Y2hpdGFpXCA7CivmtbfljYPlsbHljYMgPiB1bWlzZW4nJ3lhbWFzZW5cIDsKK+mdqeaWsOaUv+WFmiA+IGtha3VzaGluc2VpdG91XCA7CivlsJHmlbDmsJHml48gPiBzaG91c3V1bWluem9rdVwgOwor5Yq05YON5Y2U57SEID4gcm91ZG91a3lvdXlha3VcIDsKK+mbu+aSg+S9nOaIpiA+IGRlbmdla2lzYWt1c2VuXCA7CivkuIPpoZvlhavotbcgPiBzaGljaGl0ZW5oYWtraVwgOwor6ISK6auE56We57WMID4gc2VraXp1aXNoaW5rZWlcIDsKK+e+juihk+Wkp+WtpiA+IGJpanV0c3VkYWlnYWt1XCA7Civpgbjmip7poIXnm64gPiBzZW50YWt1a291bW9rdVwgOwor6ZaT5o6l6YG45oyZID4ga2Fuc2V0c3VzZW5reW9cIDsKK+iyneauu+i/veaUviA+IGthaWdhcmF0c3VpaG91XCA7CivnvqTnmbrlnLDpnIcgPiBndW5wYXRzdWppc2hpblwgOwor57eK6KSM5LiA55WqID4ga2lua29uJydpY2hpYmFuXCA7Civni6zouqvosrTml48gPiBkb2t1c2hpbmtpem9rdVwgOwor56eR5a2m55+l6K2YID4ga2FnYWt1Y2hpc2hpa2lcIDsKK+efs+mDqOmHkeWQiSA+IGlzaGliZWtpbmtpY2hpXCA7CivoirHps6XpoqjmnIggPiBrYWNob3VmdXVnZXRzdVwgOwor5o+Q5Ye65pyf6ZmQID4gdGVpc2h1dHN1a2lnZW5cIDsKK+WkqemVt+WcsOS5hSA+IHRlbmNob3VjaGlreXV1XCA7Civnmb7kuIfplbfogIUgPiBoeWFrdW1hbmNob3VqYVwgOwor5a++55eH55mC5rOVID4gdGFpc2hvdXJ5b3Vob3VcIDsKK+S4reaeouelnue1jCA+IGNodXVzdXVzaGlua2VpXCA7CivllYblt6Xmpa3ogIUgPiBzaG91a291Z3lvdXNoYVwgOwor6ZaL56Wo6YCf5aCxID4ga2FpaHlvdXNva3Vob3VcIDsKK+aAp+eahOihneWLlSA+IHNlaXRla2lzaG91ZG91XCA7Civnibnmrormkq7lvbEgPiB0b2t1c2h1c2F0c3VlaVwgOwor6Ly45Ye65omL5b2iID4geXVzaHV0c3V0ZWdhdGFcIDsKK+WPsuaWmemkqOWtpiA+IHNoaXJ5b3VrYW5nYWt1XCA7CivnqbrkuK3mpbzplqMgPiBrdXVjaHV1cm91a2FrdVwgOwor5bCR5bm05paH5a2mID4gc2hvdW5lbmJ1bmdha3VcIDsKK+iqv+aVtOaUu+aSgyA+IGNob3VzZWlrb3VnZWtpXCA7Civnsr7npZ7lubTpvaIgPiBzZWlzaGluJyduZW5yZWlcIDsKK+WxheS4reiqv+WBnCA+IGt5b2NodXVjaG91dGVpXCA7CivnqI7liKXkvqHmoLwgPiB6ZWliZXRzdWtha2FrdVwgOwor6LuN5Lq655Sf5rS7ID4gZ3Vuamluc2Vpa2F0c3VcIDsKK+eah+WuruitpuWvnyA+IGtvdWd1dWtlaXNhdHN1XCA7CivnspLjgIXovpvoi6YgPiByeXV1cnl1dXNoaW5rdVwgOwor5p2x5Lqs5aSn5a2mID4gdG91a3lvdWRhaWdha3VcIDsKK+iIiOWRs+a0pea0pSA+IGt5b3VtaXNoaW5zaGluXCA7CivljYPlrqLkuIfmnaUgPiBzZW5reWFrdWJhbnJhaVwgOwor6YG45oqc6Kmm6aiTID4gc2VuYmF0c3VzaGlrZW5cIDsKK+iIqui3r+aomeitmCA+IGtvdXJvaHlvdXNoaWtpXCA7Civnt4rmgKXnmbrpgLIgPiBraW5reXV1aGFzc2hpblwgOwor56m65Lit5YaZ55yfID4ga3V1Y2h1dXNoYXNoaW5cIDsKK+WWtualrea0u+WLlSA+IGVpZ3lvdWthdHN1ZG91XCA7CivmlZHmj7TmtLvli5UgPiBreXV1ZW5rYXRzdWRvdVwgOwor5aSp54S256Gd5a2QID4gdGVuJyduZW5zaG91c2hpXCA7Civkv6HoqJfos4fph5EgPiBzaGludGFrdXNoaWtpblwgOwor5biC5rCR55Sf5rS7ID4gc2hpbWluc2Vpa2F0c3VcIDsKK+e1tuWvvuaoqeWKmyA+IHpldHRhaWtlbnJ5b2t1XCA7Civlkajnq6Dni7zni70gPiBzaHV1c2hvdXJvdWJhaVwgOwor5rCR5peP5a2m6ICFID4gbWluem9rdWdha3VzaGFcIDsKK+iGoOedgOeKtuaFiyA+IGtvdWNoYWt1am91dGFpXCA7CivpnaLmjqXoqabpqJMgPiBtZW5zZXRzdXNoaWtlblwgOwor5pS/562W5Y2U5a6aID4gc2Vpc2FrdWt5b3V0ZWlcIDsKK+iyqeWjsuaIpueVpSA+IGhhbmJhaXNlbnJ5YWt1XCA7CivlhazoqK3luILloLQgPiBrb3VzZXRzdWljaGliYVwgOwor5Lq654mp57WM5riIID4gamluYnV0c3VrZWl6YWlcIDsKK+W/g+eahOeKtuaFiyA+IHNoaW50ZWtpam91dGFpXCA7CivkuJjpmbXlnLDluK8gPiBreXV1cnlvdWNoaXRhaVwgOwor55Sf5rav5pWZ6IKyID4gc2hvdWdhaWt5b3Vpa3VcIDsKK+aXp+e0hOWFqOabuCA+IGt5dXV5YWt1emVuc2hvXCA7CivlpKfmoLnlvbnogIUgPiBkYWlrb24nJ3lha3VzaGFcIDsKK+S4h+W5tOaWsOmAoCA+IG1hbicnbmVuc2hpbnpvdVwgOwor5bqn6aqo56We57WMID4gemFrb3RzdXNoaW5rZWlcIDsKK+mVt+iAgeaVmeS8miA+IGNob3Vyb3VreW91a2FpXCA7Civosq/ok4TlgrXliLggPiBjaG9jaGlrdXNhaWtlblwgOwor5q2m5Yqb5LuL5YWlID4gYnVyeW9rdWthaW55dXVcIDsKK+eyvuWvhuenkeWtpiA+IHNlaW1pdHN1a2FnYWt1XCA7Civnp4HpiYTnt4/pgKMgPiBzaGl0ZXRzdXNvdXJlblwgOwor5Lyd6YCB57WC5LqGID4gZGVuc291c2h1dXJ5b3VcIDsKK+iWq+iSuOa2iOavkiA+IGt1bmpvdXNob3Vkb2t1XCA7CivpuqbnqIjluL3lrZAgPiBtdWdpd2FyYWJvdXNoaVwgOwor5rOV5b6L55u46KuHID4gaG91cml0c3Vzb3VkYW5cIDsKK+WcsOWfn+mWi+eZuiA+IGNoaWlraWthaWhhdHN1XCA7Civlm73lhoXnlKPmpa0gPiBrb2t1bmFpc2FuZ3lvdVwgOwor5LiA5omT6YCG6LuiID4gaWNoaWRhZ3lha3V0ZW5cIDsKK+awtOeUn+eUn+eJqSA+IHN1aXNlaXNlaWJ1dHN1XCA7CivmnInnt5rpgJrkv6EgPiB5dXVzZW50c3V1c2hpblwgOwor6LW35om/6Lui57WQID4ga2lzaG91dGVua2V0c3VcIDsKK+eJqeizquS4u+e+qSA+IGJ1c3NoaXRzdXNodWdpXCA7Civkv6HoqJfkvJrnpL4gPiBzaGludGFrdWdhaXNoYVwgOwor5Lit6ZaT5ZWG5Lq6ID4gY2h1dWthbnNob3VuaW5cIDsKK+mdmembu+WuuemHjyA+IHNlaWRlbicneW91cnlvdVwgOwor5Lit5rWB56S+5LyaID4gY2h1dXJ5dXVzaGFrYWlcIDsKK+engeeri+aOouWBtSA+IHNoaXJpdHN1dGFudGVpXCA7Civlm73msJHmipXnpaggPiBrb2t1bWludG91aHlvdVwgOwor5pyJ572q5Yik5rG6ID4geXV1emFpaGFua2V0c3VcIDsKK+W8t+WMlumjn+WTgSA+IGt5b3VrYXNob2t1aGluXCA7CivkvLjnuK7oh6rlnKggPiBzaGluc2h1a3VqaXphaVwgOwor6Zm46LuN5aSn5a2mID4gcmlrdWd1bmRhaWdha3VcIDsKK+mAmuS/oemAn+W6piA+IHRzdXVzaGluc29rdWRvXCA7Civpu5Lph5HliZvnn7MgPiBrdXJva29uZ291c2VraVwgOwor5Lit5Zu95Lq66KGXID4gY2h1dWdva3VqaW5nYWlcIDsKK+WtpuiKuOWkp+WtpiA+IGdha3VnZWlkYWlnYWt1XCA7CivlpKfmsrPlsI/oqqwgPiB0YWlnYXNob3VzZXRzdVwgOwor6YmE6YGT5Lya56S+ID4gdGV0c3Vkb3VnYWlzaGFcIDsKK+mfs+alveW9ouW8jyA+IG9uZ2FrdWtlaXNoaWtpXCA7CivmgKfmoLzliIbmnpAgPiBzZWlrYWt1YnVuc2VraVwgOwor54++6YeR5pu455WZID4gZ2Vua2lua2FraXRvbWVcIDsKK+S8keaIpuadoee0hCA+IGt5dXVzZW5qb3V5YWt1XCA7CivkuozotrPli5XniakgPiBuaXNva3Vkb3VidXRzdVwgOwor5b+D55CG5a2m55qEID4gc2hpbnJpZ2FrdXRla2lcIDsKK+S+g+OAheirpOirpCA+IGthbmthbmdha3VnYWt1XCA7Civnm7Tnt5rpgYvli5UgPiBjaG9rdXNlbicndW5kb3VcIDsKK+aCquW+s+aWsOiBniA+IGFrdXRva3VzaGluYnVuXCA7CivmnKrmsbrmi5jnlZkgPiBtaWtldHN1a291cnl1dVwgOwor5a6a6YeP5YiG5p6QID4gdGVpcnlvdWJ1bnNla2lcIDsKK+e0meWxkeWQjOeEtiA+IGthbWlrdXp1ZG91emVuXCA7CivmuKnlrqTmoL3ln7kgPiBvbnNoaXRzdXNhaWJhaVwgOwor6Yed5bCP5qOS5aSnID4gc2hpbnNob3Vib3VkYWlcIDsKK+WkquWIgOS6jOiFsCA+IHRhY2hpZnV0YWtvc2hpXCA7Civoqo3orZjkuI3otrMgPiBuaW5zaGlraWJ1c29rdVwgOwor5Zuj5L2T5Y2U57SEID4gZGFudGFpa3lvdXlha3VcIDsKK+aIpuOAheWFouOAhSA+IHNlbnNlbmt5b3VreW91XCA7Civkv6HpoLzlm57lvqkgPiBzaGlucmFpa2FpZnVrdVwgOwor5L+u5a2m5peF6KGMID4gc2h1dWdha3VyeW9rb3VcIDsKK+mbu+a6kOmWi+eZuiA+IGRlbmdlbmthaWhhdHN1XCA7CivmqKHlvI/mqJnmnKwgPiBtb3NoaWtpaHlvdWhvblwgOwor6L+96Leh6Kq/5p+7ID4gdHN1aXNla2ljaG91c2FcIDsKK+WJsuW8leaJi+W9oiA+IHdhcmliaWtpdGVnYXRhXCA7Civnm7TmtYHlm57ot68gPiBjaG9rdXJ5dXVrYWlyb1wgOwor6IiI6KGM5oiQ57i+ID4ga291Z3lvdXNlaXNla2lcIDsKK+WMl+a0i+a8gealrSA+IGhva3V5b3VneW9neW91XCA7Civlm73mloflrablj7IgPiBrb2t1YnVuZ2FrdXNoaVwgOwor5rC45LmF6ISx5q+bID4gZWlreXV1ZGF0c3Vtb3VcIDsKK+aOkuWHuuWfuua6liA+IGhhaXNodXRzdWtpanVuXCA7CivntYTogbfmlLnpnakgPiBzb3Nob2t1a2Fpa2FrdVwgOwor6YGO5aSx6Ie05q27ID4ga2FzaGl0c3VjaGlzaGlcIDsKK+S6pOmAmuS/oeWPtyA+IGtvdXRzdXVzaGluZ291XCA7Civli5Xnianlrp/pqJMgPiBkb3VidXRzdWppa2tlblwgOwor5rC05LiK6K2m5a+fID4gc3Vpam91a2Vpc2F0c3VcIDsKK+WKtOS9nOaVmeiCsiA+IHJvdXNha3VreW91aWt1XCA7CivmoLjlu4Pmo4TniakgPiBrYWt1aGFpa2lidXRzdVwgOwor6Y6u6a2C5puy5q2MID4gY2hpbmtvbmt5b2t1a2FcIDsKK+mdnumJhOmHkeWxniA+IGhpdGV0c3VraW56b2t1XCA7CivkuInnmb7ku6PoqIAgPiBzYW5ieWFrdWRhaWdlblwgOwor5Lit5Zu95Lyd5p2lID4gY2h1dWdva3VkZW5yYWlcIDsKK+eti+eEoeWKm+eXhyA+IGtpbm11cnlva3VzaG91XCA7CivmtYHpgJros4fmnKwgPiByeXV1dHN1dXNoaWhvblwgOwor56m65Y2z5piv6ImyID4ga3V1c29rdXplc2hpa2lcIDsKK+aVmeiCsuaUuemdqSA+IGt5b3Vpa3VrYWlrYWt1XCA7CivliIfplovmiYvooZMgPiBzZWtrYWlzaHVqdXRzdVwgOwor5pWR6K235rS75YuVID4ga3l1dWdva2F0c3Vkb3VcIDsKK+Wuo+S8nea0u+WLlSA+IHNlbmRlbmthdHN1ZG91XCA7CivosqHnlKPnm67pjLIgPiB6YWlzYW5tb2t1cm9rdVwgOwor5q2j5bi457WC5LqGID4gc2Vpam91c2h1dXJ5b3VcIDsKK+S6oeWRveeUn+a0uyA+IGJvdW1laXNlaWthdHN1XCA7CivlhKrotoropIflkIggPiB5dXVldHN1ZnVrdWdvdVwgOwor57SU5pel5pys5byPID4ganVuJyduaWhvbnNoaWtpXCA7CivmiYvlvaLlibLlvJUgPiB0ZWdhdGF3YXJpYmlraVwgOwor5YuV54mp5bSH5oudID4gZG91YnV0c3VzdXVoYWlcIDsKK+WFseWQjOS9j+WuhSA+IGt5b3Vkb3VqdXV0YWt1XCA7CivmnInooovli5XniakgPiB5dXV0YWlkb3VidXRzdVwgOwor6KKL5bCP6Lev5paHID4gZnVrdXJva291amlidW5cIDsKK+eZveeggumdkuadviA+IGhha3VzaGFzZWlzaG91XCA7CivoirHlq4HlvqHlr64gPiBoYW5heW9tZWdvcnlvdVwgOwor5paw6Zmz5Luj6KydID4gc2hpbmNoaW50YWlzaGFcIDsKK+S4gOWFremKgOihjCA+IGljaGlyb2t1Z2lua291XCA7CivlsLHogbfmlqHml4sgPiBzaHV1c2hva3Vhc3NlblwgOwor6Z6t5q+b6Jmr55eHID4gYmVubW91Y2h1dXNob3VcIDsKK+e1tuS9k+e1tuWRvSA+IHpldHRhaXpldHN1bWVpXCA7Civnsr7npZ7liIbmnpAgPiBzZWlzaGluYnVuc2VraVwgOwor57O75YiX5Lya56S+ID4ga2VpcmV0c3VnYWlzaGFcIDsKK+WIhuWtkOmWk+WKmyA+IGJ1bnNoaWthbnJ5b2t1XCA7CivkvIHmpa3miKbnlaUgPiBraWd5b3VzZW5yeWFrdVwgOwor5Zu95rCR5omA5b6XID4ga29rdW1pbnNob3Rva3VcIDsKK+i8uOWHuuWItumZkCA+IHl1c2h1dHN1c2VpZ2VuXCA7Civnibnlrprpipjmn4QgPiB0b2t1dGVpbWVpZ2FyYVwgOwor6LKh5YuZ5L2T6LOqID4gemFpbXV0YWlzaGl0c3VcIDsKK+itpuWvn+WtpuagoSA+IGtlaXNhdHN1Z2Fra291XCA7CivkuI3ms5XkvrXlhaUgPiBmdWhvdXNoaW4nJ255dXVcIDsKK+eUn+a0u+ioreioiCA+IHNlaWthdHN1c2Vra2VpXCA7Civou73oloTnn63lsI8gPiBrZWloYWt1dGFuc2hvdVwgOwor566X6KGT5bmz5Z2HID4gc2FuanV0c3VoZWlraW5cIDsKK+WNs+W4reaWmeeQhiA+IHNva3VzZWtpcnlvdXJpXCA7CivniannkIbnmYLms5UgPiBidXRzdXJpcnlvdWhvdVwgOwor6Z2S6YW45Lit5q+SID4gc2Vpc2FuY2h1dWRva3VcIDsKK+Wul+aVmeazleS6uiA+IHNodXVreW91aG91amluXCA7CivlhpnnnJ/mpI3lrZcgPiBzaGFzaGluc2hva3VqaVwgOwor57eK57iu6LKh5pS/ID4ga2luc2h1a3V6YWlzZWlcIDsKK+WNmOaAp+eUn+auliA+IHRhbnNlaXNlaXNob2t1XCA7Civpq5jnrYnnlJ/niakgPiBrb3V0b3VzZWlidXRzdVwgOwor6IiI5ZGz5rSl44CFID4ga3lvdW1pc2hpbnNoaW5cIDsKK+S/neiovOeJm+S5syA+IGhvc2hvdWd5dXVueXV1XCA7Civlj5fog47oqr/nr4AgPiBqdXRhaWNob3VzZXRzdVwgOwor6YCP5p6Q55mC5rOVID4gdG91c2VraXJ5b3Vob3VcIDsKK+aEn+immuelnue1jCA+IGthbmtha3VzaGlua2VpXCA7CivlsILploDnn6XorZggPiBzZW5tb25jaGlzaGlraVwgOwor6LuN5ouh56u25LqJID4gZ3Vua2FrdWt5b3Vzb3VcIDsKK+eZu+WgtOS6uueJqSA+IHRvdWpvdWppbmJ1dHN1XCA7CivpnZ7nj77lrp/nmoQgPiBoaWdlbmppdHN1dGVraVwgOwor6YCG5oCn55+z6bm4ID4gZ3lha3VzZWlzZWtrZW5cIDsKK+W5vemWgOeLreeqhCA+IHl1dW1vbmt5b3VzYWt1XCA7CivpgKPpgqblvZPlsYAgPiByZW5wb3V0b3VreW9rdVwgOwor55u05bCE5pel5YWJID4gY2hva3VzaGFuaWtrb3VcIDsKK+WFiOS7u+WwhuagoSA+IHNlbicnbmluc2hvdWtvdVwgOwor6Ky55Y6z5a6f55u0ID4ga2luZ2Vuaml0Y2hva3VcIDsKK+W6l+mgreWPluW8lSA+IHRlbnRvdXRvcmloaWtpXCA7Civnmbrlo7LnpoHmraIgPiBoYXRzdWJhaWtpbnNoaVwgOwor5ZOB6LOq566h55CGID4gaGluc2hpdHN1a2FucmlcIDsKK+e3qOWFpeippumokyA+IGhlbicnbnl1dXNoaWtlblwgOwor5Lyd6YGU6Zai5pWwID4gZGVudGF0c3VrYW5zdXVcIDsKK+WwveW/oOWgseWbvSA+IGppbmNodXVob3Vrb2t1XCA7CivlirTkvb/ljZToqr8gPiByb3VzaGlreW91Y2hvdVwgOwor55m+6Imy55y86Y+hID4gaHlha3Vpcm9tZWdhbmVcIDsKK+S4reaAp+WtkOadnyA+IGNodXVzZWlzaGlzb2t1XCA7Civnt4rmgKXlr77nrZYgPiBraW5reXV1dGFpc2FrdVwgOwor5Y2w5Yi35oqA6KGTID4gaW5zYXRzdWdpanV0c3VcIDsKK+W/g+eahOihqOekuiA+IHNoaW50ZWtpaHlvdWppXCA7CivlkI3miYDml6fot6EgPiBtZWlzaG9reXV1c2VraVwgOwor5oqV6LOH5L+h6KiXID4gdG91c2hpc2hpbnRha3VcIDsKK+aWsOmfk+WbveWFmiA+IHNoaW5rYW5rb2t1dG91XCA7Civlm73pmpvmnaHntIQgPiBrb2t1c2Fpam91eWFrdVwgOwor5LiD5aCC5Ly96JeNID4gc2hpY2hpZG91Z2FyYW5cIDsKK+imquaXj+mWouS/giA+IHNoaW56b2t1a2Fua2VpXCA7CivlgpjlvaLnoo3lrZAgPiBrYXNhZ2F0YWdhaXNoaVwgOwor5oKq5ryi5bCP6KqsID4gYWtrYW5zaG91c2V0c3VcIDsKK+WFrOaVteS4gOWPtyA+IGtvdXRla2lpY2hpZ291XCA7CivmsLTos6rmsZrmv4EgPiBzdWlzaGl0c3VvZGFrdVwgOwor57K+56We55mC5rOVID4gc2Vpc2hpbnJ5b3Vob3VcIDsKK+iMq+eEtuiHquWksSA+IGJvdXplbmppc2hpdHN1XCA7CivlnLDos6rmmYLku6MgPiBjaGlzaGl0c3VqaWRhaVwgOwor56uL5YWl56aB5q2iID4gdGFjaGlpcmlraW5zaGlcIDsKK+Wkp+WQjOWbo+e1kCA+IGRhaWRvdWRhbmtldHN1XCA7Civosq/ph5HpgJrluLMgPiBjaG9raW50c3V1Y2hvdVwgOwor5paO5oiS5rKQ5rW0ID4gc2Fpa2FpbW9rdXlva3VcIDsKK+aWsOWItuWkp+WtpiA+IHNoaW5zZWlkYWlnYWt1XCA7CivlhbHlkIzosqzku7sgPiBreW91ZG91c2VraW5pblwgOwor5paw6IGe55m66KGoID4gc2hpbmJ1bmhhcHB5b3VcIDsKK+i7iuWGheaUueacrSA+IHNoYW5haWthaXNhdHN1XCA7CivmmIbomavlrabogIUgPiBrb25jaHV1Z2FrdXNoYVwgOwor6YCA6IG35bm06YeRID4gdGFpc2hva3VuZW5raW5cIDsKK+WIhuWJsue1seayuyA+IGJ1bmthdHN1dG91Y2hpXCA7CivnorrnjofpgY7nqIsgPiBrYWt1cml0c3VrYXRlaVwgOwor56CU56m255m66KGoID4ga2Vua3l1dWhhcHB5b3VcIDsKK+aXp+e0hOiBluabuCA+IGt5dXV5YWt1c2Vpc2hvXCA7CivokrLpib7lhbXoiI4gPiBrYW1hYm9rb2hlaXNoYVwgOwor57WM6LK756+A57SEID4ga2VpaGlzZXRzdXlha3VcIDsKK+eti+iQjue4rueXhyA+IGtpbicnaXNodWt1c2hvdVwgOwor5YSq55Sf5omL6KGTID4geXV1c2Vpc2h1anV0c3VcIDsKK+WFrOWFseaWmemHkSA+IGtvdWt5b3VyeW91a2luXCA7CivlvLfliLbkuK3mlq0gPiBreW91c2VpY2h1dWRhblwgOwor5LiH5pyJ5byV5YqbID4gYmFuJyd5dXVpbnJ5b2t1XCA7Civnq4vlpKrlrZDlvI8gPiByaXR0YWlzaGlzaGlraVwgOwor5pel5YaF5ZGo5pyfID4gbmljaGluYWlzaHV1a2lcIDsKK+aGsuazleino+mHiCA+IGtlbnBvdWthaXNoYWt1XCA7Civnvo7nmoTnlJ/mtLsgPiBiaXRla2lzZWlrYXRzdVwgOwor5Zuj5L2T5Ymy5byVID4gZGFudGFpd2FyaWJpa2lcIDsKK+Wbvemam+S6pOa1gSA+IGtva3VzYWlrb3VyeXV1XCA7CivlhqDnirbpnZnohIggPiBrYW5qb3Vqb3VteWFrdVwgOwor6YCG5LiJ6KeS5b2iID4gZ3lha3VzYW5rYWtrZWlcIDsKK+W4gueri+WtpuagoSA+IHNoaXJpdHN1Z2Fra291XCA7CivopIfpm5HmgKrlpYcgPiBmdWt1emF0c3VrYWlraVwgOwor6auY5bGk5bu656+JID4ga291c291Z2VuY2hpa3VcIDsKK+ecn+ePoOmkiuauliA+IHNoaW5qdXlvdXNob2t1XCA7CivnlLPlkYrnlKjntJkgPiBzaGlua29rdXlvdXNoaVwgOwor5bGA5Zyw5oim5LqJID4ga3lva3VjaGlzZW5zb3VcIDsKK+mHjeimgeS6uueJqSA+IGp1dXlvdWppbmJ1dHN1XCA7CivmtLvniYjljbDliLcgPiBrYXBwYW4nJ2luc2F0c3VcIDsKK+mAo+aXpemAo+WknCA+IHJlbmppdHN1cmVuJyd5YVwgOwor5LiJ6ICF5a++56uLID4gc2Fuc2hhdGFpcml0c3VcIDsKK+axguWmu+W6g+WRiiA+IGt5dXVzYWlrb3Vrb2t1XCA7Civni4LoqIDoh6rmrrogPiBreW91Z2VuamlzYXRzdVwgOwor5oCn5p+T6Imy5L2TID4gc2Vpc2Vuc2hva3V0YWlcIDsKK+WHuOeJiOWNsOWItyA+IHRvcHBhbicnaW5zYXRzdVwgOwor5Yi66Lqr5YyF5LiBID4gc2FzaGltaWJvdWNob3VcIDsKK+aXpeexs+iyv+aYkyA+IG5pY2hpYmVpYm91ZWtpXCA7Civou43kuovljZTlipsgPiBndW5qaWt5b3VyeW9rdVwgOwor5qW16ZmQ54q25oWLID4ga3lva3VnZW5qb3V0YWlcIDsKK+eJqeeQhuePvuixoSA+IGJ1dHN1cmlnZW5zaG91XCA7CivkurrouqvmlLvmkoMgPiBqaW5zaGlua291Z2VraVwgOwor6KiY5oa25Zaq5aSxID4ga2lva3Vzb3VzaGl0c3VcIDsKK+ekvuS8muenqeW6jyA+IHNoYWthaWNoaXRzdWpvXCA7CivkvoPkvoPoq6Toq6QgPiBrYW5rYW5nYWt1Z2FrdVwgOwor5rib5L6h5YSf5Y20ID4gZ2Vua2FzaG91a3lha3VcIDsKK+epuuS4reafu+WvnyA+IGt1dWNodXVzYXNhdHN1XCA7CivntKDkurroip3lsYUgPiBzaGlyb3V0b3NoaWJhaVwgOwor5LiA5YWt5Yud6LKgID4gaWNoaXJva3VzaG91YnVcIDsKK+S6pOmfv+alveWboyA+IGtvdWt5b3VnYWt1ZGFuXCA7CivooYDmtrLpioDooYwgPiBrZXRzdWVraWdpbmtvdVwgOwor5ZWG5ZOB5Zyo6auYID4gc2hvdWhpbnphaWRha2FcIDsKK+eJqeeQhuWtpuiAhSA+IGJ1dHN1cmlnYWt1c2hhXCA7CivlubTnmb7lubTkuK0gPiBuZW5ieWFrdW5lbmp1dVwgOwor5p6d6JGJ5pyr56+AID4gc2hpeW91bWFzc2V0c3VcIDsKK+i7jemaiueUn+a0uyA+IGd1bnRhaXNlaWthdHN1XCA7Civmr5TovIPnmoTlsI8gPiBoaWtha3V0ZWtpc2hvdVwgOwor5r2c5Zyo6IO95YqbID4gc2VuemFpbm91cnlva3VcIDsKK+W3peWtpuWNmuWjqyA+IGtvdWdha3VoYWt1c2hpXCA7CivmnInlhJ/lpZHntIQgPiB5dXVzaG91a2VpeWFrdVwgOwor5paw6IGe5bqD5ZGKID4gc2hpbmJ1bmtvdWtva3VcIDsKK+S4iue0muabuemVtyA+IGpvdWt5dXVzb3VjaG91XCA7CivkubHoqLrkubHnmYIgPiByYW5zaGlucmFucnlvdVwgOwor6ZuG5ZCI5L2P5a6FID4gc2h1dWdvdWp1dXRha3VcIDsKK+W+oemjn+S6i+WHpiA+IG9zaG9rdWppZG9rb3JvXCA7CivppIrmrpbnnJ/nj6AgPiB5b3VzaG9rdXNoaW5qdVwgOwor5YaF6YOo5ZGK55m6ID4gbmFpYnVrb2t1aGF0c3VcIDsKK+WQjeebruizg+mHkSA+IG1laW1va3VjaGluZ2luXCA7Civnm7jlr77mub/luqYgPiBzb3V0YWlzaGl0c3Vkb1wgOwor5pys5pyr6Lui5YCSID4gaG9ubWF0c3V0ZW50b3VcIDsKK+WtpuagoeeUn+a0uyA+IGdha2tvdXNlaWthdHN1XCA7CivlhaXlm73mn7voqLwgPiBueXV1a29rdXNhc2hvdVwgOwor6Ieq5b6L56We57WMID4gamlyaXRzdXNoaW5rZWlcIDsKK+WnieanmOS6uuW9oiA+IGFuZXNhbWFuaW5neW91XCA7CivmiKbmiKbmgZDmgZAgPiBzZW5zZW5reW91a3lvdVwgOwor6KGd5pKD6Zai5pWwID4gc2hvdWdla2lrYW5zdXVcIDsKK+W3p+iogOS7pOiJsiA+IGtvdWdlbnJlaXNob2t1XCA7CivlpInmuKnli5XniakgPiBoZW4nJ29uZG91YnV0c3VcIDsKK+WOn+Wni+WLleeJqSA+IGdlbnNoaWRvdWJ1dHN1XCA7CivnqbrplpPoirjooZMgPiBrdXVrYW5nZWlqdXRzdVwgOwor5L6D44CF6Kuk44CFID4ga2Fua2FuZ2FrdWdha3VcIDsKK+mWi+W6l+S8kealrSA+IGthaXRlbmt5dXVneW91XCA7CivlqK/mpb3mlr3oqK0gPiBnb3Jha3VzaGlzZXRzdVwgOwor5Y2K5rC45LmF55qEID4gaGFuJydlaWt5dXV0ZWtpXCA7Civpo5/ns6fkuovmg4UgPiBzaG9rdXJ5b3VqaWpvdVwgOwor5Y+v6YCG5Y+N5b+cID4ga2FneWFrdWhhbicnbm91XCA7CivnibnliKXkvJrlk6EgPiB0b2t1YmV0c3VrYWlpblwgOwor5q275rS75ZWP6aGMID4gc2hpa2F0c3Vtb25kYWlcIDsKK+ezu+e1seelnuWtpiA+IGtlaXRvdXNoaW5nYWt1XCA7Civou5/pqqjprZrpoZ4gPiBuYW5rb3RzdWd5b3J1aVwgOwor5ZCE5Lq65ZCE5qeYID4ga2FrdWppbmtha3V5b3VcIDsKK+mAmuS/oeS6i+alrSA+IHRzdXVzaGluamlneW91XCA7Civosr/mmJPpmpzlo4EgPiBib3Vla2lzaG91aGVraVwgOwor5Y2Y5LiA6YCa6LKoID4gdGFuJydpdHN1dHN1dWthXCA7CivljYPkuKHlvbnogIUgPiBzZW5yeW91eWFrdXNoYVwgOwor5Yiw552A5pmC5Yi7ID4gdG91Y2hha3VqaWtva3VcIDsKK+amgueul+imgeaxgiA+IGdhaXNhbicneW91a3l1dVwgOwor5Zu95rCR5bm06YeRID4ga29rdW1pbicnbmVua2luXCA7Civms6XmsLTnqLzmpa0gPiBkb3JvbWl6dWthZ3lvdVwgOwor5Zyo5pel57Gz6LuNID4gemFpbmljaGliZWlndW5cIDsKK+i2iuWig+WFpeWtpiA+IGVra3lvdW55dXVnYWt1XCA7CivmlbDnkIblk7LlraYgPiBzdXVyaXRldHN1Z2FrdVwgOwor5ZSv54mp5Y+y6KazID4geXVpYnV0c3VzaGlrYW5cIDsKK+WVhualreWtpuagoSA+IHNob3VneW91Z2Fra291XCA7Civlt6blpKfmi6zlvKcgPiBoaWRhcmlkYWlrYWtrb1wgOwor5rCR5peP57K+56WeID4gbWluem9rdXNlaXNoaW5cIDsKK+Wun+WKm+ihjOeCuiA+IGppdHN1cnlva3Vrb3VpXCA7Civmtbfntr/li5XniakgPiBrYWltZW5kb3VidXRzdVwgOwor57Gz6LuN5YW15YqbID4gYmVpZ3VuaGVpcnlva3VcIDsKK+WwseWtpuW5tOm9oiA+IHNodXVnYWt1bmVucmVpXCA7CivpibHnianos4fmupAgPiBrb3VidXRzdXNoaWdlblwgOwor6Luf5byP6YeO55CDID4gbmFuc2hpa2l5YWt5dXVcIDsKK+S/oeiol+e1seayuyA+IHNoaW50YWt1dG91Y2hpXCA7CivntYzmuIjmtLvli5UgPiBrZWl6YWlrYXRzdWRvdVwgOwor5YW15byP5L2T5pONID4gaGVpc2hpa2l0YWlzb3VcIDsKK+eUn+aulue0sOiDniA+IHNlaXNob2t1c2FpYm91XCA7CivlnLDlvaLmuKzph48gPiBjaGlrZWlzb2t1cnlvdVwgOwor5ZWG5qWt6LOH5pysID4gc2hvdWd5b3VzaGlob25cIDsKK+aVsOWApOebruaomSA+IHN1dWNoaW1va3VoeW91XCA7CivkuIDlvpfkuIDlpLEgPiBpdHRva3Vpc3NoaXRzdVwgOwor6YCa5L+h6LKp5aOyID4gdHN1dXNoaW5oYW5iYWlcIDsKK+W8t+WItuWft+ihjCA+IGt5b3VzZWlzaGlra291XCA7Civlubvopprnl4fnirYgPiBnZW5rYWt1c2hvdWpvdVwgOwor5YyX6Zm45Zyw5pa5ID4gaG9rdXJpa3VjaGlob3VcIDsKK+WJsuW8leeZuuihjCA+IHdhcmliaWtpaGFra291XCA7CivluoPloLHmtLvli5UgPiBrb3Vob3VrYXRzdWRvdVwgOwor5bGx6auY5bi95a2QID4geWFtYXRha2Fib3VzaGlcIDsKK+afk+iJsuW3peWgtCA+IHNlbnNob2t1a291am91XCA7CivlhazlvI/oqKrllY8gPiBrb3VzaGlraWhvdW1vblwgOwor57eP5ZCI6ZaL55m6ID4gc291Z291a2FpaGF0c3VcIDsKK+mAo+eri+aUv+aoqSA+IHJlbnJpdHN1c2Vpa2VuXCA7Civlt67liKXooajnj74gPiBzYWJldHN1aHlvdWdlblwgOwor5qip5Yqb6ZeY5LqJID4ga2Vucnlva3V0b3Vzb3VcIDsKK+ijveWTgeaIpueVpSA+IHNlaWhpbnNlbnJ5YWt1XCA7CivliIbmsLTlsbHohIggPiBidW5zdWlzYW5teWFrdVwgOwor6KqY6Zu75q2j5o6lID4geXV1ZGVuc2Vpc2V0c3VcIDsKK+efpeimmuelnue1jCA+IGNoaWtha3VzaGlua2VpXCA7CivpgJDmnaHlr6norbAgPiBjaGlrdWpvdXNoaW5naVwgOwor5Y2D5bO25YiX5bO2ID4gY2hpc2hpbWFyZXR0b3VcIDsKK+i8uOWHuui2hemBjiA+IHl1c2h1dHN1Y2hvdWthXCA7CivlsIrnjovoqI7luZUgPiBzb24nJ25vdXRvdWJha3VcIDsKK+aDheWgsemAmuS/oSA+IGpvdWhvdXRzdXVzaGluXCA7CivotoXotorkuqTku6MgPiBjaG91ZXRzdWtvdXRhaVwgOwor55Sf5rS756m66ZaTID4gc2Vpa2F0c3VrdXVrYW5cIDsKK+WJjeeri+iFuueCjiA+IHplbnJpdHN1c2VuJydlblwgOwor6KGM5pS/5pS56Z2pID4gZ3lvdXNlaWthaWtha3VcIDsKK+W+i+S7pOWbveWutiA+IHJpdHN1cnlvdWtva2thXCA7Civlv4PpnIrnj77osaEgPiBzaGlucmVpZ2Vuc2hvdVwgOwor55Sf6KqV55m+5bm0ID4gc2VpdGFuaHlha3VuZW5cIDsKK+iHquWLleedgOS/oSA+IGppZG91Y2hha3VzaGluXCA7CivnrKzkuInli6LlipsgPiBkYWlzYW5zZWlyeW9rdVwgOwor5pu455WZ6YO15L6/ID4ga2FraXRvbWV5dXViaW5cIDsKK+efpeitmOS9k+ezuyA+IGNoaXNoaWtpdGFpa2VpXCA7Civpm4blkIjoqJjov7AgPiBzaHV1Z291a2lqdXRzdVwgOwor5LiJ55m+6Ku45L6vID4gc2FuYnlha3VzaG9rb3VcIDsKK+Wkp+ihhuaWh+WtpiA+IHRhaXNodXVidW5nYWt1XCA7CivkuK3nrYnmlZnogrIgPiBjaHV1dG91a3lvdWlrdVwgOwor5pWZ6IKy6KGM5pS/ID4ga3lvdWlrdWd5b3VzZWlcIDsKK+atpuijheS4reeriyA+IGJ1c291Y2h1dXJpdHN1XCA7CivlubPlkozljZTlipsgPiBoZWl3YWt5b3VyeW9rdVwgOwor6Zu76YmE5Lya56S+ID4gZGVudGV0c3VnYWlzaGFcIDsKK+WHuuW4reaXpeaVsCA+IHNodXNzZWtpbmlzc3V1XCA7CivnnIznq4vnl4XpmaIgPiBrZW5yaXRzdWJ5b3VpblwgOwor57KS57KS6L6b6IumID4gcnl1dXJ5dXVzaGlua3VcIDsKK+WBj+aXgeWGoOiEmiA+IGhlbmJvdWthbmt5YWt1XCA7Civosqnlo7Lkv4PpgLIgPiBoYW5iYWlzb2t1c2hpblwgOwor5L+h6KiX5oqV6LOHID4gc2hpbnRha3V0b3VzaGlcIDsKK+S4reWwj+S8gealrSA+IGNodXVzaG91a2lneW91XCA7CivkuInooYzluoPlkYogPiBzYW5neW91a291a29rdVwgOwor6KGA5ray5b6q55KwID4ga2V0c3Vla2lqdW5rYW5cIDsKK+mAo+e1kOaxuueulyA+IHJlbmtldHN1a2Vzc2FuXCA7Civpqqjou5/ljJbnl4cgPiBrb3RzdW5hbmthc2hvdVwgOwor5pS/5rK75ZOy5a2mID4gc2Vpaml0ZXRzdWdha3VcIDsKK+WVhualreaUvumAgSA+IHNob3VneW91aG91c291XCA7Civlm73pmLLnt4/nnIEgPiBrb2t1Ym91c291c2hvdVwgOwor55Sf5rS75oyH5bCOID4gc2Vpa2F0c3VzaGlkb3VcIDsKK+eCjueGseWcsOeNhCA+IGVuJyduZXRzdWppZ29rdVwgOwor5YWr6Z2i546y55OPID4gaGFjaGltZW5yZWlyb3VcIDsKK+mdouS8muisnee1tiA+IG1lbmthaXNoYXpldHN1XCA7CivpgZPot6/mqJnorZggPiBkb3Vyb2h5b3VzaGlraVwgOwor5Zu95Za26YCa5L+hID4ga29rdWVpdHN1dXNoaW5cIDsKK+mBqeadkOmBqeaJgCA+IHRla2l6YWl0ZWtpc2hvXCA7Civliofnl4fogp3ngo4gPiBnZWtpc2hvdWthbicnZW5cIDsKK+eJqeaDhemokueEtiA+IGJ1dHN1am91c291emVuXCA7CivlhazmsJHnlJ/mtLsgPiBrb3VtaW5zZWlrYXRzdVwgOwor5YWl5a2m6Kmm6aiTID4gbnl1dWdha3VzaGlrZW5cIDsKK+e1tuWvvue1tuWRvSA+IHpldHRhaXpldHN1bWVpXCA7CivkuovjgIXnianjgIUgPiBqaWppYnV0c3VidXRzdVwgOwor5YCL5YCL5Yil5YilID4ga29rb2JldHN1YmV0c3VcIDsKK+WQiOWUsemaiumVtyA+IGdhc3Nob3V0YWljaG91XCA7Civkub7nh6XniZvkubMgPiBrYW5zb3VneXV1bnl1dVwgOwor55u057O75bCK5bGeID4gY2hva2tlaXNvbnpva3VcIDsKK+WFpeWtpumhmOabuCA+IG55dXVnYWt1Z2Fuc2hvXCA7Civlh7rnmbrmmYLplpMgPiBzaHVwcGF0c3VqaWthblwgOwor5Li76KaB5Lq654mpID4gc2h1eW91amluYnV0c3VcIDsKK+aWh+WtpuS9nOWTgSA+IGJ1bmdha3VzYWt1aGluXCA7Civou73kvr/piYTpgZMgPiBrZWliZW50ZXRzdWRvdVwgOwor5Ymy5byV5biC5aC0ID4gd2FyaWJpa2lzaGlqb3VcIDsKK+Wksei4quWuo+WRiiA+IHNoaXNzb3VzZW5rb2t1XCA7CivljJblrabntZDlkIggPiBrYWdha3VrZXRzdWdvdVwgOwor5L+d6Zm65paZ546HID4gaG9rZW5yeW91cml0c3VcIDsKK+S/oei2iuacrOe3miA+IHNoaW5ldHN1aG9uc2VuXCA7CivnpZ7ntYzkuK3mnqIgPiBzaGlua2VpY2h1dXN1dVwgOwor55m65YWJ5YuV54mpID4gaGFra291ZG91YnV0c3VcIDsKK+ikh+W8j+eBq+WxsSA+IGZ1a3VzaGlraWthemFuXCA7CivloIXlv43kuI3mipwgPiBrZW4nJ25pbmZ1YmF0c3VcIDsKK+iAkOS5j+eUn+a0uyA+IHRhaWJvdXNlaWthdHN1XCA7CivnpL7kvJrpgJrlv7UgPiBzaGFrYWl0c3V1bmVuXCA7CivmjqXlrqLmhYvluqYgPiBzZWtreWFrdXRhaWRvXCA7Civou73niIbmkoPmqZ8gPiBrZWliYWt1Z2VraWtpXCA7CivnvbLlkI3mjbrljbAgPiBzaG9tZWluYXRzdWluXCA7Civog7jpg6jnlr7mgqMgPiBreW91YnVzaGlra2FuXCA7CivosaHniZnlj5blvJUgPiB6b3VnZXRvcmloaWtpXCA7Civml6Xmm5zlpKflt6UgPiBuaWNoaXlvdWRhaWt1XCA7Civnm67njonllYblk4EgPiBtZWRhbWFzaG91aGluXCA7Civoo73olqzkvJrnpL4gPiBzZWl5YWt1Z2Fpc2hhXCA7CivmipXlhYnnhafmmI4gPiB0b3Vrb3VzaG91bWVpXCA7CivmuIXlu4nmvZTnmb0gPiBzZWlyZW5rZXBwYWt1XCA7CivmlbXliY3pgIPkuqEgPiB0ZWtpemVudG91Ym91XCA7Civml6XliIrmlrDogZ4gPiBuaWtrYW5zaGluYnVuXCA7CivmirHohbnntbblgJIgPiBob3VmdWt1emV0dG91XCA7CivmgqromZDnhKHpgZMgPiBha3VneWFrdW11ZG91XCA7Civlm73lrrbmqKnlipsgPiBrb2trYWtlbnJ5b2t1XCA7CivljZfmtIvoq7jls7YgPiBuYW4nJ3lvdXNob3RvdVwgOwor5Zua5Lq65Yq05YONID4gc2h1dWppbnJvdWRvdVwgOwor5Yqj562J6Kaz5b+1ID4gcmV0dG91a2FuJyduZW5cIDsKK+mWouS/guWumOW6gSA+IGthbmtlaWthbmNob3VcIDsKK+i+suawkeaWh+WtpiA+IG5vdW1pbmJ1bmdha3VcIDsKK+iHqueEtuePvuixoSA+IHNoaXplbmdlbnNob3VcIDsKK+iFjuiHk+e1kOefsyA+IGppbnpvdWtlc3Nla2lcIDsKK+aWveaUv+aWuemHnSA+IHNoaXNlaWhvdXNoaW5cIDsKK+Wkqeeruua1quS6uiA+IHRlbmppa3Vyb3VuaW5cIDsKK+mciumtguS4jea7hSA+IHJlaWtvbmZ1bWV0c3VcIDsKK+WFrOWFsee1hOWQiCA+IGtvdWt5b3VrdW1pYWlcIDsKK+aciee3mumbu+S/oSA+IHl1dXNlbmRlbnNoaW5cIDsKK+ihgOihjOmanOWusyA+IGtla2tvdXNob3VnYWlcIDsKK+S6uueahOizh+a6kCA+IGppbnRla2lzaGlnZW5cIDsKK+WcsOaWueihjOaUvyA+IGNoaWhvdWd5b3VzZWlcIDsKK+mch+WkqeWLleWcsCA+IHNoaW50ZW5kb3VjaGlcIDsKK+esrOS4ieW4neWbvSA+IGRhaXNhbnRlaWtva3VcIDsKK+WkqeaWh+WtpuiAhSA+IHRlbm1vbmdha3VzaGFcIDsKK+a3seWknOaUvumAgSA+IHNoaW4nJ3lhaG91c291XCA7Civpn7Plo7DlvaLlvI8gPiBvbnNlaWtlaXNoaWtpXCA7CivkuqTpgJrllY/poYwgPiBrb3V0c3V1bW9uZGFpXCA7CivlhazlhbHmipXos4cgPiBrb3VreW91dG91c2hpXCA7CivlioPmmYLku6PnmoQgPiBrYWt1amlkYWl0ZWtpXCA7CivlkIzml4/kvJrnpL4gPiBkb3V6b2t1Z2Fpc2hhXCA7Civlv4PnkIbmj4/lhpkgPiBzaGlucmlieW91c2hhXCA7CivmioDooZPmsLTmupYgPiBnaWp1dHN1c3VpanVuXCA7CivnkIblrabljZrlo6sgPiByaWdha3VoYWt1c2hpXCA7CivlsYDmiYDpurvphZQgPiBreW9rdXNob21hc3VpXCA7CivnlKPliKXkvJrorbAgPiBzYW5iZXRzdWthaWdpXCA7CivlsLHlrablhZDnq6UgPiBzaHV1Z2FrdWppZG91XCA7CivnqbrkuK3ntabmsrkgPiBrdXVjaHV1a3l1dXl1XCA7Civlm73pmpvopo/moLwgPiBrb2t1c2Fpa2lrYWt1XCA7CivlrabmoKHmlrDogZ4gPiBnYWtrb3VzaGluYnVuXCA7Civmg4XloLHnlKPmpa0gPiBqb3Vob3VzYW5neW91XCA7CivnmbvpjLLnlarlj7cgPiB0b3Vyb2t1YmFuZ291XCA7CivlnJ/mnKjlt6XlraYgPiBkb2Jva3Vrb3VnYWt1XCA7CivnlJ/kvZPlj43lv5wgPiBzZWl0YWloYW4nJ25vdVwgOwor6LGh5b605Li7576pID4gc2hvdWNob3VzaHVnaVwgOwor6Z+z5qW95pWZ6IKyID4gb25nYWt1a3lvdWlrdVwgOwor6Kaz5ris5Zyw54K5ID4ga2Fuc29rdWNoaXRlblwgOwor5oqA6KGT5ZCM5aOrID4gZ2lqdXRzdWRvdXNoaVwgOwor5b+c5oCl5pS75pKDID4gb3VreXV1a291Z2VraVwgOwor5ZCM5LuB5pWZ5LyaID4gZG91amlua3lvdWthaVwgOwor5a6f5YON5pmC6ZaTID4gaml0c3Vkb3VqaWthblwgOwor6Z2S56m66aeQ6LuKID4gYW96b3JhY2h1dXNoYVwgOwor6Zu75Yqb6Ly46YCBID4gZGVucnlva3V5dXNvdVwgOwor6LuN6ZqK5pWZ6IKyID4gZ3VudGFpa3lvdWlrdVwgOwor6YGg5rSL5ryB5qWtID4gZW4nJ3lvdWd5b2d5b3VcIDsKK+S/nemanOWNoOmgmCA+IGhvc2hvdXNlbnJ5b3VcIDsKK+S6pOaPm+azleWJhyA+IGtvdWthbmhvdXNva3VcIDsKK+eJveW8leeZguazlSA+IGtlbicnaW5yeW91aG91XCA7Civpp4XkvJ3nq7botbAgPiBla2lkZW5reW91c291XCA7CivliIfmra/mibzohZUgPiBzZXNzaGl5YWt1d2FuXCA7Civlm6PkvZPkuqTmuIkgPiBkYW50YWlrb3VzaG91XCA7Civkuq3kuLvplqLnmb0gPiB0ZWlzaHVrYW5wYWt1XCA7CivkuIDmrrXli5XoqZ4gPiBpY2hpZGFuZG91c2hpXCA7CivkuIDoiKzluZXlg5ogPiBpcHBhbmJha3VyeW91XCA7Civlr53lj7DliJfou4ogPiBzaGluZGFpcmVzc2hhXCA7CivmipXmk7Lnq7bmioAgPiB0b3V0ZWtpa3lvdWdpXCA7CivmsJfosaHpgJrloLEgPiBraXNob3V0c3V1aG91XCA7CivplovmnpDlj7DlnLAgPiBrYWlzZWtpZGFpY2hpXCA7Civlrp/nlKjkuLvnvqkgPiBqaXRzdXlvdXNodWdpXCA7Civlt6XloLTlrp/nv5IgPiBrb3Vqb3VqaXNzaHV1XCA7CivkuK3ntpnosr/mmJMgPiBjaHV1a2VpYm91ZWtpXCA7CivmgKfog73nibnmgKcgPiBzZWlub3V0b2t1c2VpXCA7CivmnIDlvozpgJrniZIgPiBzYWlnb3RzdXVjaG91XCA7Civlm73pmpvntZDlqZogPiBrb2t1c2Fpa2Vra29uXCA7CivpgKDmnKzmioDooZMgPiB6b3Vob25naWp1dHN1XCA7CivlpqjlrrPlt6XkvZwgPiBib3VnYWlrb3VzYWt1XCA7CivmsJHml4/mhI/orZggPiBtaW56b2t1aXNoaWtpXCA7CivotIXmsqLkuInmmKcgPiB6ZWl0YWt1emFubWFpXCA7CivlhpnnnJ/oo73niYggPiBzaGFzaGluc2VpaGFuXCA7CivlrabmoKHmlZnogrIgPiBnYWtrb3VreW91aWt1XCA7CivpnKfkuK3kv6Hlj7cgPiBtdWNodXVzaGluZ291XCA7Civnsr7npZ7nirbmhYsgPiBzZWlzaGluam91dGFpXCA7CivllYbnp5HlpKflraYgPiBzaG91a2FkYWlnYWt1XCA7CivlhpnnnJ/ntZDlqZogPiBzaGFzaGlua2Vra29uXCA7CivlhbHlkIzmiKbnt5ogPiBreW91ZG91c2Vuc2VuXCA7CivngavlsbHmtLvli5UgPiBrYXphbmthdHN1ZG91XCA7CivpuqbnqIjntLDlt6UgPiBtdWdpd2FyYXphaWt1XCA7Civli6TlirTmiYDlvpcgPiBraW5yb3VzaG90b2t1XCA7Civpppbnm7jlrpjpgrggPiBzaHVzaG91a2FudGVpXCA7Civoqq3mm7jkuInmmKcgPiBkb2t1c2hvemFubWFpXCA7CivkuK3nrYnmlZnlk6EgPiBjaHV1dG91a3lvdWluXCA7CivkuIDmrKHpm7vmtYEgPiBpY2hpamlkZW5yeXV1XCA7Civlj7DkuK3plqLkv4IgPiB0YWljaHV1a2Fua2VpXCA7Civnp5jlr4bntZDnpL4gPiBoaW1pdHN1a2Vzc2hhXCA7CivmnbHmlrnmi6HlpKcgPiB0b3Vob3VrYWt1ZGFpXCA7Civov5HpmqPoq7jlm70gPiBraW5yaW5zaG9rb2t1XCA7CivlirTlg43pmo7ntJogPiByb3Vkb3VrYWlreXV1XCA7Civosp7mk43oprPlv7UgPiB0ZWlzb3VrYW4nJ25lblwgOwor5rCR6ZaT5Lyd5om/ID4gbWlua2FuZGVuc2hvdVwgOwor6IaA6IOx57WQ55+zID4gYm91a291a2Vzc2VraVwgOwor6Lui5bGF6YCa55+lID4gdGVua3lvdHN1dWNoaVwgOwor57SU5q2j5pWw5a2mID4ganVuc2Vpc3V1Z2FrdVwgOwor55S354i15aSr5Lq6ID4gZGFuc2hha3VmdWppblwgOwor5aGp6JS16aOf5ZOBID4gZW56b3VzaG9rdWhpblwgOwor5LiA6Ie05Zuj57WQID4gaXRjaGlkYW5rZXRzdVwgOwor6K2m5a+f5Zu95a62ID4ga2Vpc2F0c3Vrb2trYVwgOwor57WM5riI55m95pu4ID4ga2VpemFpaGFrdXNob1wgOwor56mA5YCJ5Zyw5bivID4ga29rdXNvdWNoaXRhaVwgOwor55Kw5aKD5LqL5qWtID4ga2Fua3lvdWppZ3lvdVwgOwor57eP5ZCI5ZWG56S+ID4gc291Z291c2hvdXNoYVwgOwor5bCR5bm05Yq05YONID4gc2hvdW5lbnJvdWRvdVwgOwor5LiA5oyZ5Lih5b6XID4gaWtreW9yeW91dG9rdVwgOwor5ris5a6a6KOF572uID4gc29rdXRlaXNvdWNoaVwgOwor5YmN6KGb576O6KGTID4gemVuJydlaWJpanV0c3VcIDsKK+eahuaXouaciOmjnyA+IGthaWtpZ2Vzc2hva3VcIDsKK+WFrOWbo+S9j+WuhSA+IGtvdWRhbmp1dXRha3VcIDsKK+ioreWCmeaKleizhyA+IHNldHN1Yml0b3VzaGlcIDsKK+aXpeW4uOiMtumjryA+IG5pY2hpam91c2FoYW5cIDsKK+e+pOmbhuW/g+eQhiA+IGd1bnNodXVzaGlucmlcIDsKK+eZvuaIpue3tOejqCA+IGh5YWt1c2VucmVubWFcIDsKK+WNs+iIiOipqeS6uiA+IHNva2t5b3VzaGlqaW5cIDsKK+WWhOmao+aUv+etliA+IHplbnJpbnNlaXNha3VcIDsKK+WJjeWPl+WPjuebiiA+IG1hZXVrZXNodXVla2lcIDsKK+WbveawkeeahuWFtSA+IGtva3VtaW5rYWloZWlcIDsKK+mqqOebuOWtpuiAhSA+IGtvc3NvdWdha3VzaGFcIDsKK+aIuOWIpeioquWVjyA+IGtvYmV0c3Vob3Vtb25cIDsKK+eIhuW8vuWjsOaYjiA+IGJha3VkYW5zZWltZWlcIDsKK+mBk+alveaBr+WtkCA+IGRvdXJha3VtdXN1a29cIDsKK+eZkuWCt+e1hOe5lCA+IHl1c2hvdXNvc2hpa2lcIDsKK+eUt+WtkOWtpueUnyA+IGRhbnNoaWdha3VzZWlcIDsKK+iyq+mAmumKg+WJtSA+IGthbnRzdXVqdXVzb3VcIDsKK+aWsOmDjuaWsOWppiA+IHNoaW5yb3VzaGlucHVcIDsKK+epuuaMuuS9nOaIpiA+IGt1dXRlaXNha3VzZW5cIDsKK+mFjeeuoeW3pealrSA+IGhhaWthbmtvdWd5b3VcIDsKK+Wuh+WumemAmuS/oSA+IHVjaHV1dHN1dXNoaW5cIDsKK+etieavlOaVsOWIlyA+IHRvdWhpc3V1cmV0c3VcIDsKK+W6iuS4iua1uOawtCA+IHl1a2F1ZXNoaW5zdWlcIDsKK+iHqueEtueSsOWigyA+IHNoaXplbmthbmt5b3VcIDsKK+aXpeS4reaIpuS6iSA+IG5pdGNodXVzZW5zb3VcIDsKK+aomemhjOmfs+alvSA+IGh5b3VkYWlvbmdha3VcIDsKK+WKo+etieikh+WQiCA+IHJldHRvdWZ1a3Vnb3VcIDsKK+ecvOeQg+mKgOihjCA+IGdhbmt5dXVnaW5rb3VcIDsKK+W4guWgtOWIhuaekCA+IHNoaWpvdWJ1bnNla2lcIDsKK+S4remWk+ippumokyA+IGNodXVrYW5zaGlrZW5cIDsKK+iovOWIuOS8muekviA+IHNob3VrZW5nYWlzaGFcIDsKK+a8j+ipsee1kOWQiCA+IHJvdXdhZ2V0c3Vnb3VcIDsKK+Wbvemam+e0m+S6iSA+IGtva3VzYWlmdW5zb3VcIDsKK+mbhuWbo+ihjOWLlSA+IHNodXVkYW5rb3Vkb3VcIDsKK+i7iuS4oee4pumaiiA+IHNoYXJ5b3VqdXV0YWlcIDsKK+S6pOS7o+aTjealrSA+IGtvdXRhaXNvdWd5b3VcIDsKK+S9nOiAheacquipsyA+IHNha3VzaGFtaXNob3VcIDsKK+ilv+acrOmhmOWvuiA+IG5pc2hpaG9uZ2FuamlcIDsKK+awuOS7o+WAn+WcsCA+IGVpdGFpc2hha3VjaGlcIDsKK+WtkOWurueti+iFqyA+IHNoaWt5dXVraW5zaHVcIDsKK+WIh+aJi+iSkOmbhiA+IGtpdHRlc2h1dXNodXVcIDsKK+WumOiyu+eVmeWtpiA+IGthbnBpcnl1dWdha3VcIDsKK+e3qOmbhuS4u+W5uSA+IGhlbnNodXVzaHVrYW5cIDsKK+eUn+eUo+aKgOihkyA+IHNlaXNhbmdpanV0c3VcIDsKK+awtOW5s+W/nOWKmyA+IHN1aWhlaW91cnlva3VcIDsKK+WFiOerr+aKgOihkyA+IHNlbnRhbmdpanV0c3VcIDsKK+elnuWurueQg+WgtCA+IGppbmd1dWt5dXVqb3VcIDsKK+mfs+alveWkp+WtpiA+IG9uZ2FrdWRhaWdha3VcIDsKK+S+teeVpeihjOeCuiA+IHNoaW5yeWFrdWtvdWlcIDsKK+WFpeWwhOWFiee3miA+IG55dXVzaGFrb3VzZW5cIDsKK+S4ieinkuWHveaVsCA+IHNhbmtha3VrYW5zdXVcIDsKK+eri+S9k+WGmeecnyA+IHJpdHRhaXNoYXNoaW5cIDsKK+Wbvemam+mWouS/giA+IGtva3VzYWlrYW5rZWlcIDsKK+a1hOWcn+ecn+WulyA+IGpvdWRvc2hpbnNodXVcIDsKK+S4ieWbveWQjOebnyA+IHNhbmdva3Vkb3VtZWlcIDsKK+mpmuWkqeWLleWcsCA+IGt5b3V0ZW5kb3VjaGlcIDsKK+epuuS4rea7kei1sCA+IGt1dWNodXVrYXNzb3VcIDsKK+Wbvemam+WVj+mhjCA+IGtva3VzYWltb25kYWlcIDsKK+ekvuWklueZuuS/oSA+IHNoYWdhaWhhc3NoaW5cIDsKK+i3s+aigei3i+aJiCA+IGNob3VyeW91YmFra29cIDsKK+mbhuS4reegsueBqyA+IHNodXVjaHV1aG91a2FcIDsKK+S6uumWk+W3peWtpiA+IG5pbmdlbmtvdWdha3VcIDsKK+i6q+WFg+eiuuiqjSA+IG1pbW90b2tha3VuaW5cIDsKK+W3ruWIpeW+hemBhyA+IHNhYmV0c3V0YWlndXVcIDsKK+WNg+mzpeagvOWtkCA+IGNoaWRvcmlnb3VzaGlcIDsKK+S7j+WDj+S6jOS9kyA+IGJ1dHN1em91bml0YWlcIDsKK+WFqOaZr+WGmeecnyA+IHplbmtlaXNoYXNoaW5cIDsKK+WFrOWFseWbo+S9kyA+IGtvdWt5b3VkYW50YWlcIDsKK+Wghuepjei8quW7uyA+IHRhaXNla2lyaW4nJ25lXCA7CivkuIDoiKznlJ/mtLsgPiBpcHBhbnNlaWthdHN1XCA7CivmqKrmsrPpm7vmqZ8gPiB5b2tvZ2F3YWRlbmtpXCA7CivkuK3ntpnmlL7pgIEgPiBjaHV1a2VpaG91c291XCA7CivnpoHmraLmnaHntIQgPiBraW5zaGlqb3V5YWt1XCA7Civlhajlm73mlL7pgIEgPiB6ZW5rb2t1aG91c291XCA7CivlhZrliKnlhZrnlaUgPiB0b3VyaXRvdXJ5YWt1XCA7CivlpJbkuqTkuqTmuIkgPiBnYWlrb3Vrb3VzaG91XCA7Civlrablo6vpmaLos54gPiBnYWt1c2hpaW5zaG91XCA7CivooYzli5XoqIjnlLsgPiBrb3Vkb3VrZWlrYWt1XCA7CivlhbHmnInosqHnlKMgPiBreW91eXV1emFpc2FuXCA7CivpgLjlpLHliKnnm4ogPiBpc3NoaXRzdXJpZWtpXCA7CivovrLlnLDmlLnpnakgPiBub3VjaGlrYWlrYWt1XCA7CivkuqTpgJrmuIvmu54gPiBrb3V0c3V1anV1dGFpXCA7CivnpZ7ntYzntLDog54gPiBzaGlua2Vpc2FpYm91XCA7Civmpa3nlYzlm6PkvZMgPiBneW91a2FpZGFudGFpXCA7Civli6flloTmh7LmgqogPiBrYW56ZW5jaG91YWt1XCA7CivlhbHnlKPpmaPllrYgPiBreW91c2FuamluJydlaVwgOwor5qyg5bit6KOB5YikID4ga2Vzc2VraXNhaWJhblwgOwor5Y2K6Z2p6KOF5LiBID4gaGFua2F3YXNvdXRlaVwgOwor56u25LqJ5biC5aC0ID4ga3lvdXNvdXNoaWpvdVwgOwor55+l55qE6LKh55SjID4gY2hpdGVraXphaXNhblwgOwor5Y2X5YyX5ZWP6aGMID4gbmFuYm9rdW1vbmRhaVwgOwor56qB54S25aSJ55WwID4gdG90c3V6ZW5oZW4nJ2lcIDsKK+mBqeW/nOmanOWusyA+IHRla2lvdXNob3VnYWlcIDsKK+a3t+i8ieiyqOeJqSA+IGtvbnNhaWthbW90c3VcIDsKK+iAkOmanOWus+aApyA+IHRhaXNob3VnYWlzZWlcIDsKK+i/keimquebuOWnpiA+IGtpbnNoaW5zb3VrYW5cIDsKK+Wkp+mBk+WVhuS6uiA+IGRhaWRvdXNob3VuaW5cIDsKK+S4jeS/oeS7u+ahiCA+IGZ1c2hpbicnbmluJydhblwgOwor5a6u5bu36Z+z5qW9ID4ga3l1dXRlaW9uZ2FrdVwgOwor57ep6KGd5Zyw5bivID4ga2Fuc2hvdWNoaXRhaVwgOwor6KGA5riF5rOo5bCEID4ga2Vzc2VpY2h1dXNoYVwgOwor5Yqg57OW57KJ5LmzID4ga2F0b3VmdW4nJ255dXVcIDsKK+S/oeiyqeS8muekviA+IHNoaW5wYW5nYWlzaGFcIDsKK+WNgeS4gOeMrumHkSA+IGp1dWljaGlrZW5raW5cIDsKK+emj+elieS6i+alrSA+IGZ1a3VzaGlqaWd5b3VcIDsKK+aaluiho+mjvemjnyA+IGRhbicnaWhvdXNob2t1XCA7Civmupbmsbrli53miKYgPiBqdW5rZXNzaG91c2VuXCA7Civph47nlJ/li5XniakgPiB5YXNlaWRvdWJ1dHN1XCA7CivnpL7kvJrnj77osaEgPiBzaGFrYWlnZW5zaG91XCA7CivljJfmrKfoq7jlm70gPiBob2t1b3VzaG9rb2t1XCA7Civoh6rnhLbkvJHkvJogPiBzaGl6ZW5reXV1a2FpXCA7Civoia/kuozljYPnn7MgPiByeW91bmlzZW5zZWtpXCA7CivmloflrabpnZLlubQgPiBidW5nYWt1c2VpbmVuXCA7Civkv67pgZPoqpPpoZggPiBzaHV1ZG91c2VpZ2FuXCA7Civpo5/ns6fmj7TliqkgPiBzaG9rdXJ5b3VlbmpvXCA7CivooYborbDkuIDmsbogPiBzaHV1Z2lpa2tldHN1XCA7CivphbjntKDlkLjlhaUgPiBzYW5zb2t5dXVueXV1XCA7CivnlJ/oh63lnYrkuLsgPiBuYW1hZ3VzYWJvdXp1XCA7Civou43kuovmlr3oqK0gPiBndW5qaXNoaXNldHN1XCA7Civpg7Xkvr/mjK/mm78gPiB5dXViaW5mdXJpa2FlXCA7Civmlrnph53msbrlrpogPiBob3VzaGlua2V0dGVpXCA7CivlsLHmpa3mmYLplpMgPiBzaHV1Z3lvdWppa2FuXCA7Civkurrlj6PmipHliLYgPiBqaW5rb3V5b2t1c2VpXCA7Civou43kurrmganntaYgPiBndW5qaW4nJ29ua3l1dVwgOwor5Lq65bel5rWB55SjID4gamlua291cnl1dXphblwgOwor55yf5Ymj5Yud6LKgID4gc2hpbmtlbnNob3VidVwgOwor6Zqg6YCA55Sf5rS7ID4gaW50YWlzZWlrYXRzdVwgOwor5b255ZOh5aCx6YWsID4geWFrdWluaG91c2h1dVwgOwor5Ymy5byV5pmC6ZaTID4gd2FyaWJpa2lqaWthblwgOwor55m96JGh6JCE6YWSID4gc2hpcm9idWRvdXNodVwgOwor5Yi25pyN5Yi25bi9ID4gc2VpZnVrdXNlaWJvdVwgOwor5Y+k6Imy6JK854S2ID4ga29zaG9rdXNvdXplblwgOwor55WZ572u6YO15L6/ID4gdG9tZW9raXl1dWJpblwgOwor6KiI55S75YCS55SjID4ga2Vpa2FrdXRvdXNhblwgOwor55qG5pei5pel6aOfID4ga2Fpa2luaXNzaG9rdVwgOwor6YCj5oim6YCj5YudID4gcmVuc2VucmVuc2hvdVwgOwor5Lqr5qW95Li7576pID4ga3lvdXJha3VzaHVnaVwgOwor5bqD5ZGK5aqS5L2TID4ga291a29rdWJhaXRhaVwgOwor5Zu95rCR5a+p5p+7ID4ga29rdW1pbnNoaW5zYVwgOwor5re35aOw5ZCI5ZSxID4ga29uc2VpZ2Fzc2hvdVwgOwor56We6YGT5L+h6ICFID4gc2hpbnRvdXNoaW5qYVwgOwor5a6f5rOB5pS+6YCBID4gamlra3lvdWhvdXNvdVwgOwor5YiG5YWJ5YiG5p6QID4gYnVua291YnVuc2VraVwgOwor55Sj5qWt57WE5ZCIID4gc2FuZ3lvdWt1bWlhaVwgOwor5Y+W5o2o6YG45oqeID4gc2h1c2hhc2VudGFrdVwgOwor5Zyw6ZyH5a2m6ICFID4gamlzaGluZ2FrdXNoYVwgOwor5aSn6Ziq5aSn5a2mID4gb29zYWthZGFpZ2FrdVwgOwor56CU56m25pa55rOVID4ga2Vua3l1dWhvdWhvdVwgOwor5pat6YOK56u26LWwID4gZGFua291a3lvdXNvdVwgOwor5q+U6LyD5paH5a2mID4gaGlrYWt1YnVuZ2FrdVwgOwor5aOr6L6y5bel5ZWGID4gc2hpbm91a291c2hvdVwgOwor5Lm+5Z2k5LiA5pOyID4ga2Vua29uJydpdHRla2lcIDsKK+WBnOatouS/oeWPtyA+IHRlaXNoaXNoaW5nb3VcIDsKK+W7uuevieePvuWgtCA+IGtlbmNoaWt1Z2VuYmFcIDsKK+WbvemAo+Wkp+S9vyA+IGtva3VyZW50YWlzaGlcIDsKK+ecieebruengOm6lyA+IGJpbW9rdXNodXVyZWlcIDsKK+aDhee3kumanOWusyA+IGpvdXNob3Nob3VnYWlcIDsKK+isueizgOaWsOW5tCA+IGtpbmdhc2hpbicnbmVuXCA7Civnt7Tnv5LllY/poYwgPiByZW5zaHV1bW9uZGFpXCA7CivkurrnlZznhKHlrrMgPiBqaW5jaGlrdW11Z2FpXCA7CivkuIrmtYHnpL7kvJogPiBqb3VyeXV1c2hha2FpXCA7Civpmbjmtbfnqbrou40gPiByaWt1a2Fpa3V1Z3VuXCA7CivnnJ/nm7joqr/mn7sgPiBzaGluc291Y2hvdXNhXCA7CivooajmlazoqKrllY8gPiBoeW91a2VpaG91bW9uXCA7Civmma7pgJrmlZnogrIgPiBmdXRzdXVreW91aWt1XCA7CivlhazmsJHmlZnogrIgPiBrb3VtaW5reW91aWt1XCA7CivmsLTlrrPlr77nrZYgPiBzdWlnYWl0YWlzYWt1XCA7CivlsIbmnaXlsZXmnJsgPiBzaG91cmFpdGVuYm91XCA7CivlsIvllY/oqr/mm7ggPiBqaW5tb25jaG91c2hvXCA7CivnnYDlvL7ot53pm6IgPiBjaGFrdWRhbmt5b3JpXCA7CivlpKnnnJ/niJvmvKsgPiB0ZW5zaGlucmFubWFuXCA7Civlj43lsITnpZ7ntYwgPiBoYW5zaGFzaGlua2VpXCA7CivpnZLoibLnlLPlkYogPiBhb2lyb3NoaW5rb2t1XCA7CivpgKDlvaLnvo7ooZMgPiB6b3VrZWliaWp1dHN1XCA7Civlj7LnmoTnj77lnKggPiBzaGl0ZWtpZ2VuemFpXCA7CivlhoXpg6jnlJ/mtLsgPiBuYWlidXNlaWthdHN1XCA7Civmp4vpgKDoqJjov7AgPiBrb3V6b3VraWp1dHN1XCA7CivlhbHlrZjlhbHmoIQgPiBreW91em9ua3lvdWVpXCA7CivluK/nirbnlrHnlrkgPiB0YWlqb3Vob3VzaGluXCA7Civnj77lrp/kuLvnvqkgPiBnZW5qaXRzdXNodWdpXCA7CivlubTjgIXmrbPjgIUgPiBuZW4nJ25lbnNhaXNhaVwgOwor56CU56m26KuW5paHID4ga2Vua3l1dXJvbmJ1blwgOwor5pyA57WC57eo5oiQID4gc2Fpc2h1dWhlbnNlaVwgOwor5bCC5L+u5a2m5qChID4gc2Vuc2h1dWdha2tvdVwgOwor5Y+z5Lit5ous5bynID4gbWlnaWNodXVrYWtrb1wgOwor5L+u6YGT6Zmi6ZW3ID4gc2h1dWRvdWluY2hvdVwgOwor5a62552j55u457aaID4ga2F0b2t1c291em9rdVwgOwor5a6/5ZG96KuW6ICFID4gc2h1a3VtZWlyb25qYVwgOwor5rip5bqm6Kq/56+AID4gb25kb2Nob3VzZXRzdVwgOwor6KiA6Kqe6IO95YqbID4gZ2VuZ29ub3VyeW9rdVwgOwor5Yip5r2k6L+95rGCID4gcmlqdW50c3Vpa3l1dVwgOwor57Wx546H55CG6KuWID4gdG91c290c3VyaXJvblwgOwor6Imv6aKo576O5L+XID4gcnlvdWZ1dWJpem9rdVwgOwor5Zu95rCR5a2m5qChID4ga29rdW1pbmdha2tvdVwgOwor5Y2Y54K655Sf5q6WID4gdGFuJydpc2Vpc2hva3VcIDsKK+S6jOWNgeaXpem8oCA+IGhhdHN1a2FuZXp1bWlcIDsKK+iyv+aYk+WPjuaUryA+IGJvdWVraXNodXVzaGlcIDsKK+S6uuW3peW/g+iHkyA+IGppbmtvdXNoaW56b3VcIDsKK+Wkqea0peaXpeWXoyA+IGFtYXRzdWhpdHN1Z2lcIDsKK+e+pOmbhOWJsuaLoCA+IGd1bicneXV1a2Fra3lvXCA7CivlhYjlpKnmooXmr5IgPiBzZW50ZW5iYWlkb2t1XCA7Civkurrlt6Xlv4PogrogPiBqaW5rb3VzaGluYmFpXCA7CivlkbzlkLjkuK3mnqIgPiBrb2t5dXVjaHV1c3V1XCA7Civpp5DnlZnpg6jpmoogPiBjaHV1cnl1dWJ1dGFpXCA7CivmrrrnlJ/npoHmlq0gPiBzZXNzaG91a2luZGFuXCA7CivnhKHpiq3pgYroiIggPiBtdXNlbicneXV1a3lvdVwgOwor5Li75bit5YWo5qipID4gc2h1c2VraXplbmtlblwgOwor55Sy5LmZ5LiZ5LiBID4ga291b3RzdWhlaXRlaVwgOwor6KOc5qyg6YG45oyZID4gaG9rZXRzdXNlbmt5b1wgOwor5b6u6YeP5YiG5p6QID4gYmlyeW91YnVuc2VraVwgOwor5Zyw5Z+f5Luj6KGoID4gY2hpaWtpZGFpaHlvdVwgOwor55S75LiA5Li7576pID4ga2FrdWl0c3VzaHVnaVwgOwor5Lqs6YO95aSn5a2mID4ga3lvdXRvZGFpZ2FrdVwgOwor55Sf5L2T5bel5a2mID4gc2VpdGFpa291Z2FrdVwgOwor5rOh5rKr5YCZ6KOcID4gaG91bWF0c3Vrb3Vob1wgOwor55u457aa6LKh55SjID4gc291em9rdXphaXNhblwgOwor5a++5oim5oiQ57i+ID4gdGFpc2Vuc2Vpc2VraVwgOwor5Zu96Zqb56m65rivID4ga29rdXNhaWt1dWtvdVwgOwor5Zu96YCj57eP5LyaID4ga29rdXJlbnNvdWthaVwgOwor5bCC6ZaA5pWZ6IKyID4gc2VubW9ua3lvdWlrdVwgOwor5Za25qWt5aCx5ZGKID4gZWlneW91aG91a29rdVwgOwor6KGA5ray5qSc5p+7ID4ga2V0c3Vla2lrZW5zYVwgOwor6Z2p5paw5Li7576pID4ga2FrdXNoaW5zaHVnaVwgOwor6Zyy5Ye65pmC6ZaTID4gcm9zaHV0c3VqaWthblwgOwor5oqV56Wo55So57SZID4gdG91aHlvdXlvdXNoaVwgOwor6Jas55So55+z6bm4ID4geWFrdXlvdXNla2tlblwgOwor5Y2Y54us6KGM5YuVID4gdGFuZG9rdWtvdWRvdVwgOwor5aSr5amm55Sf5rS7ID4gZnV1ZnVzZWlrYXRzdVwgOwor6IKJ5L2T6Zai5L+CID4gbmlrdXRhaWthbmtlaVwgOwor6LuN5LqL6K2m5a+fID4gZ3VuamlrZWlzYXRzdVwgOwor5paw5ama5peF6KGMID4gc2hpbmtvbnJ5b2tvdVwgOwor6Zm95oCn5Y+N5b+cID4geW91c2VpaGFuJydub3VcIDsKK+i7uOW3ruW/nOWKmyA+IGppa3VzYW91cnlva3VcIDsKK+S6uumhnuWtpuiAhSA+IGppbnJ1aWdha3VzaGFcIDsKK+atpuWjq+awl+izqiA+IGJ1c2hpa2lzaGl0c3VcIDsKK+esrOS4gOS6uuiAhSA+IGRhaWljaGluaW5zaGFcIDsKK+WutuW6reeUn+a0uyA+IGthdGVpc2Vpa2F0c3VcIDsKK+WNsemZuuS6uueJqSA+IGtpa2VuamluYnV0c3VcIDsKK+Wkp+WtpuaVmeaOiCA+IGRhaWdha3VreW91anVcIDsKK+WJjemAsumBi+WLlSA+IHplbnNoaW4nJ3VuZG91XCA7CivmtLvli5XmiJDmnpwgPiBrYXRzdWRvdXNlaWthXCA7Civnt4/lkIjlj47mlK8gPiBzb3Vnb3VzaHV1c2hpXCA7CivlkITpp4XlgZzou4ogPiBrYWt1ZWtpdGVpc2hhXCA7Civop6blqpLkvZznlKggPiBzaG9rdWJhaXNheW91XCA7Civnp5HlrabmioDooZMgPiBrYWdha3VnaWp1dHN1XCA7CivljbDliLfnlKjntJkgPiBpbnNhdHN1eW91c2hpXCA7CivkurrnmoToqLzmi6AgPiBqaW50ZWtpc2hvdWtvXCA7CivmipforbDmtLvli5UgPiBrb3VnaWthdHN1ZG91XCA7CivlhYjlj5blvpfngrkgPiBzZW5zaHV0b2t1dGVuXCA7CivopIflkIjkvIHmpa0gPiBmdWt1Z291a2lneW91XCA7CivnhKHlt67liKXntJogPiBtdXNhYmV0c3VreXV1XCA7CivlpJrlm73nsY3ou40gPiB0YWtva3VzZWtpZ3VuXCA7Civnq7bkuonkvqHmoLwgPiBreW91c291a2FrYWt1XCA7CivnpL7kvJrkurrmnqAgPiBzaGFrYWlqaW53YWt1XCA7CivllYbmpa3lnLDljLogPiBzaG91Z3lvdWNoaWt1XCA7CivooajlsaTmp4vpgKAgPiBoeW91c291a291em91XCA7Civnsr7npZ7ooZvnlJ8gPiBzZWlzaGluJydlaXNlaVwgOwor6Iiq56m65YaZ55yfID4ga291a3V1c2hhc2hpblwgOwor5LiK5piH5rCX5rWBID4gam91c2hvdWtpcnl1dVwgOwor5YyX5aSn6KW/5rSLID4ga2l0YXRhaXNlaXlvdVwgOwor6KGM5pS/5oyH5bCOID4gZ3lvdXNlaXNoaWRvdVwgOwor5a6a572u5ryB5qWtID4gdGVpY2hpZ3lvZ3lvdVwgOwor5pyA6auY57Sa5ZOBID4gc2Fpa291a3l1dWhpblwgOwor5Ye66aCt5ZG95LukID4gc2h1dHRvdW1laXJlaVwgOwor5Ye66KGA6YGO5aSaID4gc2h1a2tldHN1a2F0YVwgOwor6Zu75a2Q5Ye654mIID4gZGVuc2hpc2h1cHBhblwgOwor6Imy57Sg57Sw6IOeID4gc2hpa2lzb3NhaWJvdVwgOwor6Iqx5auB6KGj6KOzID4gaGFuYXlvbWVpc2hvdVwgOwor5bCP5Y+j54++6YeRID4ga29ndWNoaWdlbmtpblwgOwor5Y2a5a2m5aSa5omNID4gaGFrdWdha3V0YXNhaVwgOwor5aSW5qeY5aSn5ZCNID4gdG96YW1hZGFpbXlvdVwgOwor5Zu95rCR5Li75qipID4ga29rdW1pbnNodWtlblwgOwor5YWs6YeR5qiq6aCYID4ga291a2luJydvdXJ5b3VcIDsKK+i/kemDiui+sualrSA+IGtpbmtvdW5vdWd5b3VcIDsKK+WFqOWbveWkp+S8miA+IHplbmtva3V0YWlrYWlcIDsKK+WQn+mBiuipqeS6uiA+IGdpbicneXV1c2hpamluXCA7CivlhrfmsLTmkanmk6YgPiByZWlzdWltYXNhdHN1XCA7Civmm7LlrabpmL/kuJYgPiBreW9rdWdha3Vhc2VpXCA7CivkvqHmoLznq7bkuokgPiBrYWtha3VreW91c291XCA7CivnpoHmlq3nl4fnirYgPiBraW5kYW5zaG91am91XCA7Civnq5zmlJjomY7mkI8gPiByeXV1am91a29oYWt1XCA7CivmraPlkbPph43ph48gPiBzaG91bWlqdXVyeW91XCA7CivlhazoqLzlvbnloLQgPiBrb3VzaG91eWFrdWJhXCA7CivmuIXmtrzpo7LmlpkgPiBzZWlyeW91aW5yeW91XCA7Civmr5vnrqHnj77osaEgPiBtb3VrYW5nZW5zaG91XCA7CivkvZzmiKblnLDln58gPiBzYWt1c2VuY2hpaWtpXCA7Civlh7rlvLXml4XosrsgPiBzaHV0Y2hvdXJ5b2hpXCA7CivmlL7pgIHnlarntYQgPiBob3Vzb3ViYW5ndW1pXCA7CivmsLjkuYXno4Hnn7MgPiBlaWt5dXVqaXNoYWt1XCA7Civlo7Lmjpvli5jlrpogPiB1cmlrYWtla2Fuam91XCA7CivplpPlrq7mtbfls6EgPiBtYW1peWFrYWlreW91XCA7CivnjYTkuK3ml6XoqJggPiBnb2t1Y2h1dW5pa2tpXCA7CivmsojmgJ3pu5nogIMgPiBjaGluc2hpbW9ra291XCA7CivotoXlm73lrrbnmoQgPiBjaG91a29ra2F0ZWtpXCA7CivpmLLngavlu7rnr4kgPiBib3VrYWtlbmNoaWt1XCA7Civph5Hono3luILloLQgPiBraW4nJ3l1dXNoaWpvdVwgOwor6ZuG5Zuj5b+D55CGID4gc2h1dWRhbnNoaW5yaVwgOwor5YWl56S+6Kmm6aiTID4gbnl1dXNoYXNoaWtlblwgOwor6YG45oqe5YCk576kID4gc2VudGFrdWNoaWd1blwgOwor56K6546H6Kqk5beuID4ga2FrdXJpdHN1Z29zYVwgOwor56ys5Zub6ZqO57SaID4gZGFpeW9ua2Fpa3l1dVwgOwor6YCN6YGl5a2m5rS+ID4gc2hvdXlvdWdha3VoYVwgOwor6buS54K55ZGo5pyfID4ga29rdXRlbnNodXVraVwgOwor576O6KGT5a2m5qChID4gYmlqdXRzdWdha2tvdVwgOwor5Y2K5q275Y2K55SfID4gaGFuc2hpaGFuc2hvdVwgOwor5b+r6YCf6Zu76LuKID4ga2Fpc29rdWRlbnNoYVwgOwor5Y2X5YyX5oim5LqJID4gbmFuYm9rdXNlbnNvdVwgOwor5bCP5YWQ5ZaY5oGvID4gc2hvdW5pemVuc29rdVwgOwor5YaF5pS/5bmy5riJID4gbmFpc2Vpa2Fuc2hvdVwgOwor5YWs5bmz5pS/562WID4ga291aGVpc2Vpc2FrdVwgOwor5bel5qWt6KaP5qC8ID4ga291Z3lvdWtpa2FrdVwgOwor5Zub6KeS5Zub6Z2iID4gc2hpa2FrdXNoaW1lblwgOwor5bCR5bm05bCR5aWzID4gc2hvdW5lbnNob3Vqb1wgOwor5YaN6LKp5qWt6ICFID4gc2FpaGFuZ3lvdXNoYVwgOwor6LaF6auY6YCf5bqmID4gY2hvdWtvdXNva3Vkb1wgOwor6Kq/5p+75aCx5ZGKID4gY2hvdXNhaG91a29rdVwgOwor5rW36Zuj5a+p5YikID4ga2FpbmFuc2hpbnBhblwgOwor55CG5a2m5L+u5aOrID4gcmlnYWt1c2h1dXNoaVwgOwor5aSW55qE5qC55ougID4gZ2FpdGVraWtvbmt5b1wgOwor55Sf5ZG95bel5a2mID4gc2VpbWVpa291Z2FrdVwgOwor5aSp5L2R56We5YqpID4gdGVuJyd5dXVzaGluam9cIDsKK+WkluWbveaXheihjCA+IGdhaWtva3VyeW9rb3VcIDsKK+WFseWQjOawtOagkyA+IGt5b3Vkb3VzdWlzZW5cIDsKK+aLoeWkp+Wdh+ihoSA+IGtha3VkYWlraW5rb3VcIDsKK+WHseaXi+Wwhui7jSA+IGdhaXNlbnNob3VndW5cIDsKK+mbhuepjeWbnui3ryA+IHNodXVzZWtpa2Fpcm9cIDsKK+ijvumHjueUo+alrSA+IHN1c29ub3Nhbmd5b3VcIDsKK+mOrumtguW4sOelniA+IGNoaW5rb25raXNoaW5cIDsKK+WQiOagvOiAheWQjSA+IGdvdWtha3VzaGFtZWlcIDsKK+acieizh+agvOiAhSA+IHl1dXNoaWtha3VzaGFcIDsKK+WMluWtpuWPjeW/nCA+IGthZ2FrdWhhbicnbm91XCA7CivpnIDopoHkvpvntaYgPiBqdXlvdWt5b3VreXV1XCA7Civlj6zllprku6TnirYgPiBzaG91a2FucmVpam91XCA7CivoqabpqJPli4nlvLcgPiBzaGlrZW5iZW5reW91XCA7CivmuKnlrqTlirnmnpwgPiBvbnNoaXRzdWtvdWthXCA7CivmnInpiaTmnaHomasgPiB5dXVrb3Vqb3VjaHV1XCA7CivlhoXnmoTmoLnmi6AgPiBuYWl0ZWtpa29ua3lvXCA7Civov5HmtbfmvIHmpa0gPiBraW5rYWlneW9neW91XCA7CivmsbrmiKbmipXnpaggPiBrZXNzZW50b3VoeW91XCA7CivlhbHlkIznpL7kvJogPiBreW91ZG91c2hha2FpXCA7CivllJDojYnmqKHmp5ggPiBrYXJha3VzYW1veW91XCA7CivljIXnmq7liIfmlq0gPiBob3VoaXNldHN1ZGFuXCA7CivlrprmnJ/lj5blvJUgPiB0ZWlraXRvcmloaWtpXCA7Civkub7nh6XmtJfmv68gPiBrYW5zb3VzZW50YWt1XCA7Civpm4blkIjlkI3oqZ4gPiBzaHV1Z291bWVpc2hpXCA7CivlsI/lnovmlrDogZ4gPiBrb2dhdGFzaGluYnVuXCA7CivljLvnmYLmlr3oqK0gPiBpcnlvdXNoaXNldHN1XCA7Civli5XnianmsrnohIIgPiBkb3VidXRzdXl1c2hpXCA7Civlj43pnaLmlZnluKsgPiBoYW5tZW5reW91c2hpXCA7Civml6XluLjkvJroqbEgPiBuaWNoaWpvdWthaXdhXCA7CivovLjlhaXmpa3ogIUgPiB5dW55dXVneW91c2hhXCA7CivmqJnmupbkvqHmoLwgPiBoeW91anVua2FrYWt1XCA7CivkuI3lpormiYvooZMgPiBmdW5pbnNodWp1dHN1XCA7CivlsbHnjKvkuonorbAgPiB5YW1hbmVrb3NvdWdpXCA7Civlh7rkuJbplpPnmoQgPiBzaHVzc2VrZW50ZWtpXCA7CivlubTkuK3ooYzkuosgPiBuZW5jaHV1Z3lvdWppXCA7CivpjozlgInmmYLku6MgPiBrYW1ha3VyYWppZGFpXCA7Civngo7nl4fnl4Xlt6MgPiBlbnNob3VieW91c291XCA7Civms6jmhI/kurrniakgPiBjaHV1aWppbmJ1dHN1XCA7Civml6XmtKropqrlloQgPiBuaWtrb3VzaGluemVuXCA7Civov73liqDms6jmlocgPiB0c3Vpa2FjaHV1bW9uXCA7CivnrYblhpnnlaXlrZcgPiBoaXNzaGFyeWFrdWppXCA7CivnjK7ooYDpgYvli5UgPiBrZW5rZXRzdXVuZG91XCA7CivoiJ7lj7DoirjooZMgPiBidXRhaWdlaWp1dHN1XCA7CivoqabpqJPnm6PnnaMgPiBzaGlrZW5rYW50b2t1XCA7CivmkqTpoK3lvrnlsL4gPiB0ZXR0b3V0ZXRzdWJpXCA7Civnlr7poqjov4Xpm7cgPiBzaGlwcHV1amlucmFpXCA7CivluILloLTnkrDlooMgPiBzaGlqb3VrYW5reW91XCA7Civljp/miJDlsqnnn7MgPiBnZW5zZWlnYW5zZWtpXCA7CivliY3lpKfntbHpoJggPiB6ZW5kYWl0b3VyeW91XCA7CivlvLfliLbpgIHpgoQgPiBreW91c2Vpc291a2FuXCA7CivlkIzmpa3ntYTlkIggPiBkb3VneW91a3VtaWFpXCA7Civpm7vmsJfliYPliIAgPiBkZW5raWthbWlzb3JpXCA7Civkuovli5nlsYDplbcgPiBqaW11a3lva3VjaG91XCA7CivntYzmuIjmlLnpnakgPiBrZWl6YWlrYWlrYWt1XCA7CivmsJHkv5foirjog70gPiBtaW56b2t1Z2Vpbm91XCA7Civlj47nqavkuojmg7MgPiBzaHV1a2FrdXlvc291XCA7CivloanovpvonLvom4kgPiBzaGlva2FyYXRvbmJvXCA7CivntIbkvZnmm7LmipggPiB1eW9reW9rdXNldHN1XCA7CivmpbXotoXnn63ms6IgPiBnb2t1Y2hvdXRhbnBhXCA7CivkuLvmqKnkvrXniq8gPiBzaHVrZW5zaGlucGFuXCA7CivkuK3mgKfmtJfliaQgPiBjaHV1c2Vpc2VuemFpXCA7CivosqjnianliJfou4ogPiBrYW1vdHN1cmVzc2hhXCA7CivooYDmuIXnmYLms5UgPiBrZXNzZWlyeW91aG91XCA7CivmlrDmoYjnibnoqLEgPiBzaGluJydhbnRva2t5b1wgOwor5q275b6M56Gs55u0ID4gc2hpZ29rb3VjaG9rdVwgOwor5ZSv54mp5Li7576pID4geXVpYnV0c3VzaHVnaVwgOwor5pel6Zyy5oim5LqJID4gbmljaGlyb3NlbnNvdVwgOwor5pat6YOK56u25LqJID4gZGFua291a3lvdXNvdVwgOwor5ZCM55uf5p2h57SEID4gZG91bWVpam91eWFrdVwgOwor5LiA5pSr5Y2D6YeRID4gaWtrYWtrdXNlbmtpblwgOwor6ZqO57Sa6ZeY5LqJID4ga2Fpa3l1dXRvdXNvdVwgOwor54ax56Gs5YyW5YmkID4gbmV0c3Vrb3VrYXphaVwgOwor5bCC55So5Zue57eaID4gc2VuJyd5b3VrYWlzZW5cIDsKK+S6pOaPm+WtpueUnyA+IGtvdWthbmdha3VzZWlcIDsKK+WLlee3muioiOeUuyA+IGRvdXNlbmtlaWtha3VcIDsKK+awkeaUv+mVt+WumCA+IG1pbnNlaWNob3VrYW5cIDsKK+WIpOaWreS4reatoiA+IGhhbmRhbmNodXVzaGlcIDsKK+WxgOaJgOWIhuWykCA+IGt5b2t1c2hvYnVua2lcIDsKK+mAmuW4uOWbveS8miA+IHRzdXVqb3Vrb2trYWlcIDsKK+aVsOWApOino+aekCA+IHN1dWNoaWthaXNla2lcIDsKK+i7jeWCmeaLoeW8tSA+IGd1bmJpa2FrdWNob3VcIDsKK+mBqeiAheeUn+WtmCA+IHRla2lzaGFzZWl6b25cIDsKK+eyvuelnumRkeWumiA+IHNlaXNoaW5rYW50ZWlcIDsKK+mJhOmBk+i8uOmAgSA+IHRldHN1ZG91eXVzb3VcIDsKK+esrOS4iemajue0miA+IGRhaXNhbmthaWt5dXVcIDsKK+WNg+aFi+S4h+anmCA+IHNlbnRhaWJhbicneW91XCA7Civpm7vlrZDlt6XlraYgPiBkZW5zaGlrb3VnYWt1XCA7CivntYzmuIjnirbms4EgPiBrZWl6YWlqb3VreW91XCA7CivnpL7kvJrmlZnogrIgPiBzaGFrYWlreW91aWt1XCA7CivovrLogJXmsJHml48gPiBub3Vrb3VtaW56b2t1XCA7CivlhajouqvlhajpnIogPiB6ZW5zaGluemVucmVpXCA7Civlhaznp7Dos4fmnKwgPiBrb3VzaG91c2hpaG9uXCA7CivlpKflrZfniYflsbEgPiBvb2F6YWthdGF5YW1hXCA7CivolqzluKvlpoLmnaUgPiB5YWt1c2hpbnlvcmFpXCA7Civnmb7miKbpjKzno6ggPiBoeWFrdXNlbnJlbm1hXCA7CivlkIznm5/kvJHmoKEgPiBkb3VtZWlreXV1a291XCA7CivkuK3lpK7oqIjnlLsgPiBjaHV1b3VrZWlrYWt1XCA7CivkuK3lpK7pm4bmqKkgPiBjaHV1b3VzaHV1a2VuXCA7CivkuInop5Losr/mmJMgPiBzYW5rYWt1Ym91ZWtpXCA7CivliIbmnpDljJblraYgPiBidW5zZWtpa2FnYWt1XCA7CivlsJHlo67lo6vlrpggPiBzaG91c291c2hpa2FuXCA7Civms5XnmoTmoLnmi6AgPiBob3V0ZWtpa29ua3lvXCA7CivmrrrlrrPkuovku7YgPiBzYXRzdWdhaWppa2VuXCA7Civoh6rnhLblopflj44gPiBzaGl6ZW56b3VzaHV1XCA7Civoia/mgKfohavnmI0gPiByeW91c2Vpc2h1eW91XCA7CivpgJrli6Tpm7vou4ogPiB0c3V1a2luZGVuc2hhXCA7CivlsJHlubTniq/nvaogPiBzaG91bmVuaGFuemFpXCA7CivmsLTphbjljJbniakgPiBzdWlzYW5rYWJ1dHN1XCA7CivopqrmiJrnn6Xlt7EgPiBzaGluc2VraWNoaWtpXCA7CivljZjni6zmsbrnrpcgPiB0YW5kb2t1a2Vzc2FuXCA7Civlm73pmpvmg4Xli6IgPiBrb2t1c2Fpam91c2VpXCA7CivooZfpoK3mvJToqqwgPiBnYWl0b3VlbnpldHN1XCA7CivmrKPllpzpm4Douo0gPiBraW5raWpha3V5YWt1XCA7Civlk4HnqK7mlLnoia8gPiBoaW5zaHVrYWlyeW91XCA7Civlhaznp7DppqzlipsgPiBrb3VzaG91YmFyaWtpXCA7Civlm5vlha3mmYLkuK0gPiBzaGlyb2t1amljaHV1XCA7CivkuqTpgJrpga7mlq0gPiBrb3V0c3V1c2hhZGFuXCA7CivlpKflrabntJvkuokgPiBkYWlnYWt1ZnVuc291XCA7CivosqHmlL/lj47mlK8gPiB6YWlzZWlzaHV1c2hpXCA7CivooYblj4LkuKHpmaIgPiBzaHV1c2FucnlvdWluXCA7CivogJDngavlu7rnr4kgPiB0YWlrYWtlbmNoaWt1XCA7CivoppblipvmpJzmn7sgPiBzaGlyeW9rdWtlbnNhXCA7CivlsI/liIDntLDlt6UgPiBrb2dhdGFuYXphaWt1XCA7Civos6rnlpHlv5znrZQgPiBzaGl0c3VnaW91dG91XCA7CivmjZzmn7vlvZPlsYAgPiBzb3VzYXRvdWt5b2t1XCA7CivnhafokYnni4LoqIAgPiB0ZXJpaGFreW91Z2VuXCA7Civlh7rlvoHou43kurogPiBzaHVzc2VpZ3VuamluXCA7CivmlL7lsITog73pm7IgPiBob3VzaGFub3VndW1vXCA7CivnpL7kvJrmlL/nrZYgPiBzaGFrYWlzZWlzYWt1XCA7Civpm7vmpbXpm7vkvY0gPiBkZW5reW9rdWRlbicnaVwgOwor5Lq65bel6YCP5p6QID4gamlua291dG91c2VraVwgOwor6KSH5ZCI5aqS5L2TID4gZnVrdWdvdWJhaXRhaVwgOwor5L2P5rCR5oqV56WoID4ganV1bWludG91aHlvdVwgOwor5bel5qWt5Zyw5bivID4ga291Z3lvdWNoaXRhaVwgOwor5ZG85ZC45Zuw6ZujID4ga29reXV1a29uJyduYW5cIDsKK+mkiuitt+aWveiorSA+IHlvdWdvc2hpc2V0c3VcIDsKK+i8uOWHuuimj+WItiA+IHl1c2h1dHN1a2lzZWlcIDsKK+aIpuWKm+e1hOaIkCA+IHNlbnJ5b2t1c29zZWlcIDsKK+axuumBuOaKleelqCA+IGtlc3NlbnRvdWh5b3VcIDsKK+e1seS4gOimi+inoyA+IHRvdWl0c3VrZW5rYWlcIDsKK+WCrOecoOeZguazlSA+IHNhaW1pbnJ5b3Vob3VcIDsKK+W3pealreijveWTgSA+IGtvdWd5b3VzZWloaW5cIDsKK+W9ueS6uuagueaApyA+IHlha3VuaW5rb25qb3VcIDsKK+eLrOaIv+ebo+emgSA+IGRva3Vib3VrYW5raW5cIDsKK+WwjumAmuaKteaKlyA+IGRvdXRzdXV0ZWlrb3VcIDsKK+WNlOiqv+S4u+e+qSA+IGt5b3VjaG91c2h1Z2lcIDsKK+S8muioiOWgseWRiiA+IGthaWtlaWhvdWtva3VcIDsKK+WPsOa5vua1t+WzoSA+IHRhaXdhbmthaWt5b3VcIDsKK+aXpea4heaIpuS6iSA+IG5pc3NoaW5zZW5zb3VcIDsKK+Wuo+iogOeZuuihqCA+IHNlbmdlbmhhcHB5b3VcIDsKK+WkqeS9k+WGmeecnyA+IHRlbnRhaXNoYXNoaW5cIDsKK+mHjemHj+WZuOaVsCA+IGp1dXJ5b3V0b25zdXVcIDsKK+aYjumPoeatouawtCA+IG1laWt5b3VzaGlzdWlcIDsKK+W5tOmWk+ioiOeUuyA+IG5lbmthbmtlaWtha3VcIDsKK+WPo+i/sOethuiomCA+IGtvdWp1dHN1aGlra2lcIDsKK+Wbvemam+mAmuiyqCA+IGtva3VzYWl0c3V1a2FcIDsKK+WBpeW6t+iouuaWrSA+IGtlbmtvdXNoaW5kYW5cIDsKK+ahg+WxseaZguS7oyA+IG1vbW95YW1hamlkYWlcIDsKK+iBt+WgtOe1kOWpmiA+IHNob2t1YmFrZWtrb25cIDsKK+eSsOWig+WVj+mhjCA+IGthbmt5b3Vtb25kYWlcIDsKK+iovOS6uuWWmuWVjyA+IHNob3VuaW5rYW5tb25cIDsKK+aUu+aSg+aWueWQkSA+IGtvdWdla2lob3Vrb3VcIDsKK+ertuS6ieWjsuiytyA+IGt5b3Vzb3ViYWliYWlcIDsKK+iRl+S9nOaoqeazlSA+IGNob3Nha3VrZW5ob3VcIDsKK+Wbvemam+ekvuS8miA+IGtva3VzYWlzaGFrYWlcIDsKK+aWsOWItumrmOagoSA+IHNoaW5zZWlrb3Vrb3VcIDsKK+WvhOeUn+iZq+eXhyA+IGtpc2VpY2h1dXNob3VcIDsKK+S4reaKmOW4veWtkCA+IG5ha2FvcmVib3VzaGlcIDsKK+WFrOmWi+e3tOe/kiA+IGtvdWthaXJlbnNodXVcIDsKK+e1jOa4iOaUv+etliA+IGtlaXphaXNlaXNha3VcIDsKK+WQiOaIkOWGmeecnyA+IGdvdXNlaXNoYXNoaW5cIDsKK+aWsOmAsuS9nOWutiA+IHNoaW5zaGluc2Fra2FcIDsKK+mFuOe0oOS+m+e1piA+IHNhbnNva3lvdWt5dXVcIDsKK+S6pOmAmuWFrOekviA+IGtvdXRzdXVrb3VzaGFcIDsKK+a0u+auuuiHquWcqCA+IGthc3NhdHN1aml6YWlcIDsKK+mbu+mAgeWGmeecnyA+IGRlbnNvdXNoYXNoaW5cIDsKK+WFqOefpeWFqOiDvSA+IHplbmNoaXplbicnbm91XCA7Civlm73li6Loqr/mn7sgPiBrb2t1c2VpY2hvdXNhXCA7CivmtYHpgJrmqZ/mp4sgPiByeXV1dHN1dWtpa291XCA7CivlhbXlmajovLjlh7ogPiBoZWlraXl1c2h1dHN1XCA7CivlpKnnmofltIfmi50gPiB0ZW4nJ25vdXN1dWhhaVwgOwor5L+d6Ki85Lq66KaBID4gaG9zaG91bmluJyd5b3VcIDsKK+a1rumBiueUn+eJqSA+IGZ1eXV1c2VpYnV0c3VcIDsKK+e1gui6q+S/nemZuiA+IHNodXVzaGluaG9rZW5cIDsKK+aHuOiznuirluaWhyA+IGtlbnNob3Vyb25idW5cIDsKK+W4guWgtOaUuemdqSA+IHNoaWpvdWthaWtha3VcIDsKK+mbu+WKm+mcgOimgSA+IGRlbnJ5b2t1anV5b3VcIDsKK+iHqOW6iuWwi+WVjyA+IHJpbnNob3VqaW5tb25cIDsKK+mZsOaltee3mueuoSA+IGlua3lva3VzZW5rYW5cIDsKK+aXi+WFieWIhuaekCA+IHNlbmtvdWJ1bnNla2lcIDsKK+WMluefs+eHg+aWmSA+IGthc2VraW5lbnJ5b3VcIDsKK+mbu+S/oeeCuuabvyA+IGRlbnNoaW5rYXdhc2VcIDsKK+aHkOS4rembu+eBryA+IGthaWNodXVkZW50b3VcIDsKK+aJjeiJsuWFvOWCmSA+IHNhaXNob2t1a2VuYmlcIDsKK+aMh+WwjuimgemgmCA+IHNoaWRvdXlvdXJ5b3VcIDsKK+mDteS+v+W5tOmHkSA+IHl1dWJpbicnbmVua2luXCA7CivplqLpgKPllYblk4EgPiBrYW5yZW5zaG91aGluXCA7CivpmZDnlYznirbms4EgPiBnZW5rYWlqb3VreW91XCA7Civnj77lnKjlrozkuoYgPiBnZW56YWlrYW5yeW91XCA7CivliLbntITkvJ3mkKwgPiBzZWl5YWt1ZGVucGFuXCA7CivkuLjkuIDpgLHplpMgPiBtYXJ1aXNzaHV1a2FuXCA7Civlt6Xmpa3lm6PlnLAgPiBrb3VneW91ZGFuY2hpXCA7CivmpbXmpb3mtYTlnJ8gPiBnb2t1cmFrdWpvdWRvXCA7CivljJblrabliIbmnpAgPiBrYWdha3VidW5zZWtpXCA7CivlkIzngrnmsbrli50gPiBkb3V0ZW5rZXNzaG91XCA7CivkvZPlpJbpm6LohLEgPiB0YWlnYWlyaWRhdHN1XCA7CivnlJ/nianlhbXlmaggPiBzZWlidXRzdWhlaWtpXCA7CivljZjpn7Pnr4Doqp4gPiB0YW4nJ29uc2V0c3Vnb1wgOwor5pS75pKD6ZqK5b2iID4ga291Z2VraXRhaWtlaVwgOwor5rOV5Lq65omA5b6XID4gaG91amluc2hvdG9rdVwgOwor5aSn6YCG5LqL5Lu2ID4gdGFpZ3lha3VqaWtlblwgOwor5Y6f5aeL5pWZ5LyaID4gZ2Vuc2hpa3lvdWthaVwgOwor5L6h5qC85Y2U5a6aID4ga2FrYWt1a3lvdXRlaVwgOwor5a+T5oSP5bCP6KqsID4gZ3V1aXNob3VzZXRzdVwgOwor5bCC6ZaA5oqA6KGTID4gc2VubW9uZ2lqdXRzdVwgOwor5ouh5by15Y+v6IO9ID4ga2FrdWNob3VrYW5vdVwgOwor5oCl6YCy5Li7576pID4ga3l1dXNoaW5zaHVnaVwgOwor6KiY5b+15byP5YW4ID4ga2luZW5zaGlraXRlblwgOwor56u25ZCI6ISx57eaID4ga3lvdWdvdWRhc3NlblwgOwor5pqR5Lit5LyR5pqHID4gc2hvY2h1dWt5dXVrYVwgOwor57mB5paH57if56S8ID4gaGFuYnVuam9rdXJlaVwgOwor55uu5qiZ566h55CGID4gbW9rdWh5b3VrYW5yaVwgOwor5pa55ZCR6Kaz5b+1ID4gaG91a291a2FuJyduZW5cIDsKK+a1t+W6lembu+S/oSA+IGthaXRlaWRlbnNoaW5cIDsKK+alreeVjOWLleWQkSA+IGd5b3VrYWlkb3Vrb3VcIDsKK+W/heimgee1jOiyuyA+IGhpdHN1eW91a2VpaGlcIDsKK+awtOeOieaooeanmCA+IG1penV0YW1hbW95b3VcIDsKK+WHuuW+geWutuaXjyA+IHNodXNzZWlrYXpva3VcIDsKK+e1jOW4uOWPjuaUryA+IGtlaWpvdXNodXVzaGlcIDsKK+WcsOeQg+enkeWtpiA+IGNoaWt5dXVrYWdha3VcIDsKK+aDheWgseaKgOihkyA+IGpvdWhvdWdpanV0c3VcIDsKK+epuuS4reWIhuinoyA+IGt1dWNodXVidW5rYWlcIDsKK+W8t+WItuWKtOWDjSA+IGt5b3VzZWlyb3Vkb3VcIDsKK+majue0muaEj+itmCA+IGthaWt5dXVpc2hpa2lcIDsKK+WNmuWjq+irluaWhyA+IGhha3VzaGlyb25idW5cIDsKK+S6uuagvOW9ouaIkCA+IGppbmtha3VrZWlzZWlcIDsKK+e1ueezuOe0oee4viA+IGtlbnNoaWJvdXNla2lcIDsKK+iBt+WgtOmXmOS6iSA+IHNob2t1YmF0b3Vzb3VcIDsKK+aVmeiCsuWtpumDqCA+IGt5b3Vpa3VnYWt1YnVcIDsKK+WkiemAn+ijhee9riA+IGhlbnNva3Vzb3VjaGlcIDsKK+ecn+WGhuecn+ePoCA+IHNoaW4nJ2Vuc2hpbmp1XCA7Civlm73msJHntYzmuIggPiBrb2t1bWlua2VpemFpXCA7CivlhoXpnaLmj4/lhpkgPiBuYWltZW5ieW91c2hhXCA7CivlqpLkvZPntYLnq68gPiBiYWl0YWlzaHV1dGFuXCA7Civlv4PnkIbnmYLms5UgPiBzaGlucmlyeW91aG91XCA7CivmgKfnmoTplqLkv4IgPiBzZWl0ZWtpa2Fua2VpXCA7CivnhKHpiq3po7Lpo58gPiBtdXNlbicnaW5zaG9rdVwgOwor56+E55aH5paH5rOVID4gaGFuY2h1dWJ1bnBvdVwgOwor6ZW35pyf5YCf5qy+ID4gY2hvdWtpc2hha2thblwgOwor5YWo5L2T6ZuG5ZCIID4gemVudGFpc2h1dWdvdVwgOwor5Y+z5bCP5ous5bynID4gbWlnaXNob3VrYWtrb1wgOwor5Luu5oOz5pW15Zu9ID4ga2Fzb3V0ZWtpa29rdVwgOwor5qW15qW95b6A55SfID4gZ29rdXJha3VvdWpvdVwgOwor5Yid562J5pWZ6IKyID4gc2hvdG91a3lvdWlrdVwgOwor6KGM5pS/5ZG95LukID4gZ3lvdXNlaW1laXJlaVwgOwor5a++5Zyw5pS75pKDID4gdGFpY2hpa291Z2VraVwgOwor6Ieq54S25o+P5YaZID4gc2hpemVuYnlvdXNoYVwgOwor6YeR6J6N6LOH5pysID4ga2luJyd5dXVzaGlob25cIDsKK+eEoeiDveWKm+iAhSA+IG11bm91cnlva3VzaGFcIDsKK+WMluWtpuW3pealrSA+IGthZ2FrdWtvdWd5b3VcIDsKK+ihjOaUv+WMuueUuyA+IGd5b3VzZWlrdWtha3VcIDsKK+Wtpue/kui+nuWFuCA+IGdha3VzaHV1aml0ZW5cIDsKK+mWqOmWpeaUv+ayuyA+IGtlaWJhdHN1c2VpamlcIDsKK+S6i+alreaLoeWFhSA+IGppZ3lvdWtha3VqdXVcIDsKK+i+suadkeW3pealrSA+IG5vdXNvbmtvdWd5b3VcIDsKK+eni+mbqOWJjee3miA+IGFraXNhbWV6ZW5zZW5cIDsKK+WFseWQjOi+suWgtCA+IGt5b3Vkb3Vub3Vqb3VcIDsKK+Wls+aoqeaLoeW8tSA+IGpva2Vua2FrdWNob3VcIDsKK+ism+e/kuS8muWgtCA+IGtvdXNodXVrYWlqb3VcIDsKK+axmuafk+eJqeizqiA+IG9zZW5idXNzaGl0c3VcIDsKK+eKtuazgeWIpOaWrSA+IGpvdWt5b3VoYW5kYW5cIDsKK+W9k+ipsuWumOW6gSA+IHRvdWdhaWthbmNob3VcIDsKK+S7suS7i+iyv+aYkyA+IGNodXVrYWlib3Vla2lcIDsKK+WbveWGheW4guWgtCA+IGtva3VuYWlzaGlqb3VcIDsKK+S4gOaemueci+advyA+IGljaGltYWlrYW5iYW5cIDsKK+eEoee3mumAmuS/oSA+IG11c2VudHN1dXNoaW5cIDsKK+e1jOa4iOWkp+WbvSA+IGtlaXphaXRhaWtva3VcIDsKK+WPjeekvuS8mueahCA+IGhhbnNoYWthaXRla2lcIDsKK+S4gOWIqeS4gOWusyA+IGljaGlyaWljaGlnYWlcIDsKK+S6jOW+i+iDjOWPjSA+IG5pcml0c3VoYWloYW5cIDsKK+W+qeWFg+S9nOalrSA+IGZ1a3VnZW5zYWd5b3VcIDsKK+S6uumWk+eIhuW8viA+IG5pbmdlbmJha3VkYW5cIDsKK+Wto+evgOWKtOWDjSA+IGtpc2V0c3Vyb3Vkb3VcIDsKK+mZuOi7jeWkp+iHoyA+IHJpa3VndW5kYWlqaW5cIDsKK+aWreaKteaKl+inkiA+IGRhbnRlaWtvdWtha3VcIDsKK+mAmuS/oeapn+mWoiA+IHRzdXVzaGlua2lrYW5cIDsKK+WGmeecn+WHuOeJiCA+IHNoYXNoaW50b3BwYW5cIDsKK+WMluWtpueZguazlSA+IGthZ2FrdXJ5b3Vob3VcIDsKK+e2see0gOeym+atoyA+IGtvdWtpc2h1a3VzZWlcIDsKK+eojuWItuaUuemdqSA+IHplaXNlaWthaWtha3VcIDsKK+iqv+WBnOijgeWIpCA+IGNob3V0ZWlzYWliYW5cIDsKK+eEoee9quWIpOaxuiA+IG11emFpaGFua2V0c3VcIDsKK+i7jeS6i+aIpueVpSA+IGd1bmppc2Vucnlha3VcIDsKK+iHqOW6iuippumokyA+IHJpbnNob3VzaGlrZW5cIDsKK+mYsuatouaMh+mHnSA+IGJvdXNoaXNoaXNoaW5cIDsKK+awl+ixoeims+a4rCA+IGtpc2hvdWthbnNva3VcIDsKK+iInuWPsOeUn+a0uyA+IGJ1dGFpc2Vpa2F0c3VcIDsKK+Wkp+WQjeaXheihjCA+IGRhaW15b3VyeW9rb3VcIDsKK+S9nOalreeZguazlSA+IHNhZ3lvdXJ5b3Vob3VcIDsKK+WkluWbveeCuuabvyA+IGdhaWtva3VrYXdhc2VcIDsKK+mDveeri+mrmOagoSA+IHRvcml0c3Vrb3Vrb3VcIDsKK+W9ouW8j+S4u+e+qSA+IGtlaXNoaWtpc2h1Z2lcIDsKK+WMluWtpuW3peWtpiA+IGthZ2FrdWtvdWdha3VcIDsKK+inkumBi+WLlemHjyA+IGtha3V1bmRvdXJ5b3VcIDsKK+WujOWFqOeEoeasoCA+IGthbnplbm11a2V0c3VcIDsKK+aUv+etluaxuuWumiA+IHNlaXNha3VrZXR0ZWlcIDsKK+W+queSsOWwj+aVsCA+IGp1bmthbnNob3VzdXVcIDsKK+Wkp+mfk+awkeWbvSA+IGRhaWthbm1pbmtva3VcIDsKK+mBqeeUqOalreWLmSA+IHRla2l5b3VneW91bXVcIDsKK+aIpuS6ieaWh+WtpiA+IHNlbnNvdWJ1bmdha3VcIDsKK+S5neWkqeebtOS4iyA+IGt5dXV0ZW5jaG9ra2FcIDsKK+mdouW+k+iFueiDjCA+IG1lbmp1dWZ1a3VoYWlcIDsKK+eiuuS/neWkseaVlyA+IGtha3Vob3NoaXBwYWlcIDsKK+WFsemAmuiogOiqniA+IGt5b3V0c3V1Z2VuZ29cIDsKK+W8t+WItuWHpuWIhiA+IGt5b3VzZWlzaG9idW5cIDsKK+aWreW0lue1tuWjgSA+IGRhbmdhaXplcHBla2lcIDsKK+eUo+alreekvuS8miA+IHNhbmd5b3VzaGFrYWlcIDsKK+WQhOeoruWtpuagoSA+IGtha3VzaHVnYWtrb3VcIDsKK+WIhuino+WGmeecnyA+IGJ1bmthaXNoYXNoaW5cIDsKK+WNsOWIt+WqkuS9kyA+IGluc2F0c3ViYWl0YWlcIDsKK+eglOeptuaJgOWgsSA+IGtlbmt5dXVzaG9ob3VcIDsKK+S5seWwhOS5seaSgyA+IHJhbnNoYXJhbmdla2lcIDsKK+ajkuiFuee1tuWAkiA+IGhvdWZ1a3V6ZXR0b3VcIDsKK+eJueioseS+teWusyA+IHRva2t5b3NoaW5nYWlcIDsKK+Wumumhjeiyr+mHkSA+IHRlaWdha3VjaG9raW5cIDsKK+WFrOihhuS8neWLlSA+IGtvdXNodXVkZW5kb3VcIDsKK+mJhOmBk+mmrOi7iiA+IHRldHN1ZG91YmFzaGFcIDsKK+WGheWbveeCuuabvyA+IG5haWtva3VrYXdhc2VcIDsKK+eorueoruanmOanmCA+IHNodWp1c2FtYXphbWFcIDsKK+WWnOiJsua6gOmdoiA+IGtpc2hva3VtYW5tZW5cIDsKK+W8geWIpee0oOaApyA+IGJlbmJldHN1c29zZWlcIDsKK+S9nOaIpuWRveS7pCA+IHNha3VzZW5tZWlyZWlcIDsKK+itsOmVt+iBt+aoqSA+IGdpY2hvdXNob2trZW5cIDsKK+WVk+iSmeaAnea9riA+IGtlaW1vdXNoaWNob3VcIDsKK+WFrOWovOWFqOW7gyA+IGtvdXNob3V6ZW5wYWlcIDsKK+WvvumdouS6pOmAmiA+IHRhaW1lbmtvdXRzdXVcIDsKK+S4gOWVj+S4gOetlCA+IGljaGltb24nJ2l0dG91XCA7Civpm7vlrZDlr4bluqYgPiBkZW5zaGltaXRzdWRvXCA7CivotoXkvY7kvqHmoLwgPiBjaG91dGVpa2FrYWt1XCA7CivkuIDmi6zlo7LosrcgPiBpa2thdHN1YmFpYmFpXCA7CivliLbntITmnaHku7YgPiBzZWl5YWt1am91a2VuXCA7CivkvJHmiKbkvJroq4cgPiBreXV1c2Vua2FpZGFuXCA7CivniYjmqKnkvrXlrrMgPiBoYW5rZW5zaGluZ2FpXCA7CivpmpTpm6Lnl4Xmo58gPiBrYWt1cmlieW91dG91XCA7CivnlJ/prq7mlpnlk4EgPiBzZWlzZW5yeW91aGluXCA7CivkuIrmmIflgr7lkJEgPiBqb3VzaG91a2Vpa291XCA7CivkuI3ms5XlhaXlm70gPiBmdWhvdW55dXVnb2t1XCA7CivmlZnppIrlrabpg6ggPiBreW91eW91Z2FrdWJ1XCA7Civpq5jkv6HpoLzmgKcgPiBrb3VzaGlucmFpc2VpXCA7CivlrrblroXmjZzntKIgPiBrYXRha3Vzb3VzYWt1XCA7CivoqIjnlLvntYzmuIggPiBrZWlrYWt1a2VpemFpXCA7CivkuInou7joqabpqJMgPiBzYW5qaWt1c2hpa2VuXCA7CivmnIDntYLmrrXpmo4gPiBzYWlzaHV1ZGFua2FpXCA7Civlj47lhaXljbDntJkgPiBzaHV1bnl1dWluc2hpXCA7CivljYrnhp/nt7Tlt6UgPiBoYW5qdWt1cmVua291XCA7CivlhpnnnJ/liKTlrpogPiBzaGFzaGluaGFudGVpXCA7CivntYzmuIjoprPlv7UgPiBrZWl6YWlrYW4nJ25lblwgOwor6LOD6YeR5rC05rqWID4gY2hpbmdpbnN1aWp1blwgOwor5Za25qWt5Y+O5pSvID4gZWlneW91c2h1dXNoaVwgOwor5LiJ55u45Lqk5rWBID4gc2Fuc291a291cnl1dVwgOwor57WM5Za25oim55WlID4ga2VpZWlzZW5yeWFrdVwgOwor5pil5aSP56eL5YasID4gc2h1bmthc2h1dXRvdVwgOwor54Sm54K55rex5bqmID4gc2hvdXRlbnNoaW5kb1wgOwor5LiA5pmC5omA5b6XID4gaWNoaWppc2hvdG9rdVwgOwor5p2J6Iqx57KJ55eHID4gc3VnaWthZnVuc2hvdVwgOwor5Lq65rCR5oqV56WoID4gamlubWludG91aHlvdVwgOwor5ZCI5b6T6YCj6KGhID4gZ2Fzc2hvdXJlbmtvdVwgOwor54OP6YeO6LGM6LGGID4ga2FyYXN1bm9lbmRvdVwgOwor54Sh6Iq45aSn6aOfID4gbXVnZWl0YWlzaG9rdVwgOwor5Zu96Zqb6YCj5ZCIID4ga29rdXNhaXJlbmdvdVwgOwor54ax5Lqk5o+b5ZmoID4gbmV0c3Vrb3VrYW5raVwgOwor5a6H5a6Z6ZaL55m6ID4gdWNodXVrYWloYXRzdVwgOwor5ryi5paH6KiT6KqtID4ga2FuYnVua3VuZG9rdVwgOwor56m66ZaT5oSf6KaaID4ga3V1a2Fua2Fua2FrdVwgOwor5LqM5Lq65LiJ6ISaID4gbmluaW5zYW5reWFrdVwgOwor5qip5Yqb5Li7576pID4ga2Vucnlva3VzaHVnaVwgOwor5Yuf6ZuG5bqD5ZGKID4gYm9zaHV1a291a29rdVwgOwor5a2m57+S55CG6KuWID4gZ2FrdXNodXVyaXJvblwgOwor6aeQ6LuK56aB5q2iID4gY2h1dXNoYWtpbnNoaVwgOwor5YWx5ZCM5a6j6KiAID4ga3lvdWRvdXNlbmdlblwgOwor5aSp5Zyw56We5piOID4gdGVuY2hpc2hpbm1laVwgOwor6Kmz57Sw5oOF5aCxID4gc2hvdXNhaWpvdWhvdVwgOwor54mb6aOy6aas6aOfID4gZ3l1dWluYmFzaG9rdVwgOwor6YeR5Z+O6YmE5aOBID4ga2luam91dGVwcGVraVwgOwor6ZuG5Lit6Kyb576pID4gc2h1dWNodXVrb3VnaVwgOwor5aSJ5b2i6Jmr6aGeID4gaGVua2VpY2h1dXJ1aVwgOwor5YWs55qE5bm06YeRID4ga291dGVraW5lbmtpblwgOwor6YCx5YiK6ZuR6KqMID4gc2h1dWthbnphc3NoaVwgOwor57Sh57i+5bel5aC0ID4gYm91c2VraWtvdWpvdVwgOwor5Yid562J5pWw5a2mID4gc2hvdG91c3V1Z2FrdVwgOwor5q6L5a2Y5pel5pWwID4gemFuc29uJyduaXNzdXVcIDsKK+Wbvemam+WxlemWiyA+IGtva3VzYWl0ZW5rYWlcIDsKK+W5tOWKn+W6j+WIlyA+IG5lbmtvdWpvcmV0c3VcIDsKK+WVhualremDveW4giA+IHNob3VneW91dG9zaGlcIDsKK+S4remAlOmAgOWtpiA+IGNodXV0b3RhaWdha3VcIDsKK+WFseWQjOS8muimiyA+IGt5b3Vkb3VrYWlrZW5cIDsKK+aGsuazleWtpuiAhSA+IGtlbnBvdWdha3VzaGFcIDsKK+aApei7ouebtOS4iyA+IGt5dXV0ZW5jaG9ra2FcIDsKK+WOn+WtkOeIhuW8viA+IGdlbnNoaWJha3VkYW5cIDsKK+eZu+WxsemJhOmBkyA+IHRvemFudGV0c3Vkb3VcIDsKK+eJqeeQhuWMluWtpiA+IGJ1dHN1cmlrYWdha3VcIDsKK+e1puawtOWItumZkCA+IGt5dXVzdWlzZWlnZW5cIDsKK+acnemuruaIpuS6iSA+IGNob3VzZW5zZW5zb3VcIDsKK+WrjOawl+eUn+eJqSA+IGtlbmtpc2VpYnV0c3VcIDsKK+mBuOaKnueKtuaFiyA+IHNlbnRha3Vqb3V0YWlcIDsKK+mrmOWzsOWFq+W6pyA+IGtvdWhvdWhhY2hpemFcIDsKK+S4jea2iOWMlueJqSA+IGZ1c2hvdWthYnV0c3VcIDsKK+azleeahOaWh+abuCA+IGhvdXRla2lidW5zaG9cIDsKK+enmOWvhumBuOaMmSA+IGhpbWl0c3VzZW5reW9cIDsKK+WcsOeQg+WMluWtpiA+IGNoaWt5dXVrYWdha3VcIDsKK+aWsOeGseW4r+WMuiA+IHNoaW4nJ25ldHRhaWt1XCA7CivntZDlqZrmjIfovKogPiBrZWtrb24nJ3l1Yml3YVwgOwor5ZaE6Zqj5Y+L5aW9ID4gemVucmluJyd5dXVrb3VcIDsKK+WPl+WPluaJi+W9oiA+IHVrZXRvcml0ZWdhdGFcIDsKK+axuueul+WgseWRiiA+IGtlc3NhbmhvdWtva3VcIDsKK+W/g+eQhuWtpuiAhSA+IHNoaW5yaWdha3VzaGFcIDsKK+irlueQhuW9ouW8jyA+IHJvbnJpa2Vpc2hpa2lcIDsKK+S9jumgreW5s+i6qyA+IHRlaXRvdWhlaXNoaW5cIDsKK+a3t+WQiOi+sualrSA+IGtvbmdvdW5vdWd5b3VcIDsKK+aWh+iKuOS9nOWTgSA+IGJ1bmdlaXNha3VoaW5cIDsKK+aciemWkemajue0miA+IHl1dWthbmthaWt5dXVcIDsKK+WPi+Wlveadoee0hCA+IHl1dWtvdWpvdXlha3VcIDsKK+WJh+WkqeWOu+engSA+IHNva3V0ZW5reW9zaGlcIDsKK+WGmeWun+S4u+e+qSA+IHNoYWppdHN1c2h1Z2lcIDsKK+Wbvemam+W4guWgtCA+IGtva3VzYWlzaGlqb3VcIDsKK+S6jOmHjeeUn+a0uyA+IG5panV1c2Vpa2F0c3VcIDsKK+iHqOapn+ebruaomSA+IHJpbmtpbW9rdWh5b3VcIDsKK+WVhualreeZu+iomCA+IHNob3VneW91dG91a2lcIDsKK+m7hOiJsuS6uueoriA+IG91c2hva3VqaW5zaHVcIDsKK+WRqOazouWkieiqvyA+IHNodXVoYWhlbmNob3VcIDsKK+asoOmZpeWVhuWTgSA+IGtla2thbnNob3VoaW5cIDsKK+W+k+WxnuWkieaVsCA+IGp1dXpva3VoZW5zdXVcIDsKK+aXoue0hOihqOePviA+IGtpeWFrdWh5b3VnZW5cIDsKK+S4jeiJr+WwkeW5tCA+IGZ1cnlvdXNob3VuZW5cIDsKK+a4rOmHj+aKgOW4qyA+IHNva3VyeW91Z2lzaGlcIDsKK+ajrue+heS4h+ixoSA+IHNoaW5yYWJhbnNob3VcIDsKK+eUo+alreani+mAoCA+IHNhbmd5b3Vrb3V6b3VcIDsKK+asp+W3nuiruOWbvSA+IG91c2h1dXNob2tva3VcIDsKK+mAmuWLpOWcsOeNhCA+IHRzdXVraW5qaWdva3VcIDsKK+aYvOmWk+S6uuWPoyA+IGNodXVrYW5qaW5rb3VcIDsKK+aAp+agvOWIpOaWrSA+IHNlaWtha3VoYW5kYW5cIDsKK+S/oemgvOmWouS/giA+IHNoaW5yYWlrYW5rZWlcIDsKK+WQjOacn+mAmuS/oSA+IGRvdWtpdHN1dXNoaW5cIDsKK+S4iemHjeeEpueCuSA+IHNhbmp1dXNob3V0ZW5cIDsKK+aKleelqOe3j+aVsCA+IHRvdWh5b3Vzb3VzdXVcIDsKK+Wkp+W5heWIt+aWsCA+IG9vaGFiYXNhc3NoaW5cIDsKK+WIh+aWreaCo+iAhSA+IHNldHN1ZGFua2FuamFcIDsKK+iiluaJi+WCjeimsyA+IHNodXVzaHVib3VrYW5cIDsKK+aLjeaJi+WWnemHhyA+IGhha3VzaHVrYXNzYWlcIDsKK+S9nOalreS7ruiqrCA+IHNhZ3lvdWthc2V0c3VcIDsKK+e1jOa4iOaIkOmVtyA+IGtlaXphaXNlaWNob3VcIDsKK+WQiOaIkOWuneefsyA+IGdvdXNlaWhvdXNla2lcIDsKK+e1kOe3oOe1hOe5lCA+IGtldHRlaXNvc2hpa2lcIDsKK+WGhumMkOabsue3miA+IGVuc3Vpa3lva3VzZW5cIDsKK+iBluS9k+aLnemgmCA+IHNlaXRhaWhhaXJ5b3VcIDsKK+W6tuawkemHkeiejSA+IHNob21pbmtpbicneXV1XCA7CivkvZPnqY3mirXmipcgPiB0YWlzZWtpdGVpa291XCA7CivljZTlkIzntYTlkIggPiBreW91ZG91a3VtaWFpXCA7CivlhYjkvY/msJHml48gPiBzZW5qdXVtaW56b2t1XCA7CivntbHkuIDmiKbnt5ogPiB0b3VpdHN1c2Vuc2VuXCA7CivlkIzmmYLpgJroqLMgPiBkb3VqaXRzdXV5YWt1XCA7Civlkajnn6XlvrnlupUgPiBzaHV1Y2hpdGV0dGVpXCA7CivoibHpm6Povpvoi6YgPiBrYW4nJ25hbnNoaW5rdVwgOwor5pS/5YWa5YaF6ZajID4gc2VpdG91bmFpa2FrdVwgOwor54++5Zyw5aCx5ZGKID4gZ2VuY2hpaG91a29rdVwgOwor5oe46LOe5ZWP6aGMID4ga2Vuc2hvdW1vbmRhaVwgOwor5YKt6Ii55aWR57SEID4geW91c2Vua2VpeWFrdVwgOwor5LuK5LiK5aSp55qHID4ga2luam91dGVuJydub3VcIDsKK+S7luimmueXh+eKtiA+IHRha2FrdXNob3Vqb3VcIDsKK+asoOmjn+WFkOerpSA+IGtlc3Nob2t1amlkb3VcIDsKK+Wor+alveeVque1hCA+IGdvcmFrdWJhbmd1bWlcIDsKK+eyvuelnuWMu+WtpiA+IHNlaXNoaW4nJ2lnYWt1XCA7CivlhoXlrrnoqLzmmI4gPiBuYWl5b3VzaG91bWVpXCA7Civlh7rmuK/lgZzmraIgPiBzaHVra291dGVpc2hpXCA7CivlpKvlqabntITmnZ8gPiBmdXVmdXlha3Vzb2t1XCA7Civml4XooYzmpa3ogIUgPiByeW9rb3VneW91c2hhXCA7Civkvb/lvpLkv6HntYwgPiBzaGl0b3NoaW5reW91XCA7CivlpJbos4flsI7lhaUgPiBnYWlzaGlkb3VueXV1XCA7CivmiJDkurrmlZnogrIgPiBzZWlqaW5reW91aWt1XCA7CivlhazlvI/kuLvnvqkgPiBrb3VzaGlraXNodWdpXCA7CivkuIDnjbLljYPph5EgPiBpa2tha2t1c2Vua2luXCA7CivopIfmlbDmpa3li5kgPiBmdWt1c3V1Z3lvdW11XCA7CivnpoHmrLLkuLvnvqkgPiBraW4nJ3lva3VzaHVnaVwgOwor56m66KWy6K2m5aCxID4ga3V1c2h1dWtlaWhvdVwgOwor55Sj5qWt5YaN55SfID4gc2FuZ3lvdXNhaXNlaVwgOwor6LOD6LK45L6h5qC8ID4gY2hpbnRhaWtha2FrdVwgOwor5oim6ZeY5YmN5ZOoID4gc2VudG91emVuc2hvdVwgOwor5LiA6KiA5LiA6KGMID4gaWNoaWdlbicnaWtrb3VcIDsKK+WQueWlj+alveWboyA+IHN1aXNvdWdha3VkYW5cIDsKK+ebtOe3mui3nemboiA+IGNob2t1c2Vua3lvcmlcIDsKK+i/keimque1kOWpmiA+IGtpbnNoaW5rZWtrb25cIDsKK+exs+iLseS7j+iYrSA+IGJlaWVpYnV0c3VyYW5cIDsKK+WFseWQjOS9nOalrSA+IGt5b3Vkb3VzYWd5b3VcIDsKK+a4m+WPjeaUv+etliA+IGdlbnRhbnNlaXNha3VcIDsKK+W/g+eQhuS9nOaIpiA+IHNoaW5yaXNha3VzZW5cIDsKK+W/g+iHk+enu+akjSA+IHNoaW56b3Vpc2hva3VcIDsKK+aciemZkOiyrOS7uyA+IHl1dWdlbnNla2luaW5cIDsKK+e1hOe5lOWGjee3qCA+IHNvc2hpa2lzYWloZW5cIDsKK+emj+mfs+aVmeS8miA+IGZ1a3Vpbmt5b3VrYWlcIDsKK+mWouS/guWJr+ipniA+IGthbmtlaWZ1a3VzaGlcIDsKK+WPsuaWmee3qOe6giA+IHNoaXJ5b3VoZW5zYW5cIDsKK+eMn+WumOmBi+WLlSA+IHJ5b3VrYW4nJ3VuZG91XCA7CivogonkvZPlirTlg40gPiBuaWt1dGFpcm91ZG91XCA7Civlj4LnhafmlofnjK4gPiBzYW5zaG91YnVua2VuXCA7Civpn7Pmpb3nm6PnnaMgPiBvbmdha3VrYW50b2t1XCA7CivlubPouqvkvY7poK0gPiBoZWlzaGludGVpdG91XCA7CivlhbHnlKPliIblrZAgPiBreW91c2FuYnVuc2hpXCA7CivkuojntITlh7rniYggPiB5b3lha3VzaHVwcGFuXCA7Civngq3msLTljJbniakgPiB0YW5zdWlrYWJ1dHN1XCA7Civov5Hku6PmloflraYgPiBraW5kYWlidW5nYWt1XCA7CivlnLDmlrnlrpjluoEgPiBjaGlob3VrYW5jaG91XCA7Civlm5vliIbkupToo4IgPiBzaGlidW5nb3JldHN1XCA7CivntYzmuIjlm57lvqkgPiBrZWl6YWlrYWlmdWt1XCA7Civlrp/lrZjkuLvnvqkgPiBqaXRzdXpvbnNodWdpXCA7CivmgZLmuKnli5XniakgPiBrb3VvbmRvdWJ1dHN1XCA7Civph47oj5zkuIDnmr8gPiB5YXNhaWhpdG9zYXJhXCA7CivlvaLlvI/oq5bnkIYgPiBrZWlzaGlraXJvbnJpXCA7CivlpKflrabmtarkurogPiBkYWlnYWt1cm91bmluXCA7CivmmqvlrprljZTlrpogPiB6YW50ZWlreW91dGVpXCA7CivmlL7pgIHlpKflraYgPiBob3Vzb3VkYWlnYWt1XCA7Civms5XlvovliLbluqYgPiBob3VyaXRzdXNlaWRvXCA7Civkv6HnlKjph5HluqsgPiBzaGluJyd5b3VraW5rb1wgOwor5pyJ5ZCN54Sh5a6fID4geXV1bWVpbXVqaXRzdVwgOwor57WC6Lqr5Lya5ZOhID4gc2h1dXNoaW5rYWlpblwgOwor5LiJ6KeS6Zai5pWwID4gc2Fua2FrdWthbnN1dVwgOwor56yR5q2i5Y2D5LiHID4gc2hvdXNoaXNlbmJhblwgOwor5paH5a2m5Y2a5aOrID4gYnVuZ2FrdWhha2FzZVwgOwor5bqt5YWI55u45aC0ID4gbml3YXNha2lzb3ViYVwgOwor5raI6LK76ICF5YG0ID4gc2hvdWhpc2hhZ2F3YVwgOwor57K+56We5qeL6YCgID4gc2Vpc2hpbmtvdXpvdVwgOwor6YmE6aqo5bel5LqLID4gdGVra290c3Vrb3VqaVwgOwor5Zu95Yip5rCR56aPID4ga29rdXJpbWlucHVrdVwgOwor6Lu95L275rWu6JaEID4ga2VpY2hvdWZ1aGFrdVwgOwor5rKW56mN5bmz6YeOID4gY2h1dXNla2loZWl5YVwgOwor6YWq6L6y6KO95ZOBID4gcmFrdW5vdXNlaWhpblwgOwor6Kyd572q5bqD5ZGKID4gc2hhemFpa291a29rdVwgOwor5a+M5Zu95by35YW1ID4gZnVrb2t1a3lvdWhlaVwgOwor5aSW6YOt5Zuj5L2TID4gZ2Fpa2FrdWRhbnRhaVwgOwor5YWx5ZCM5LyB5qWtID4ga3lvdWRvdWtpZ3lvdVwgOwor6ZqO57Sa56S+5LyaID4ga2Fpa3l1dXNoYWthaVwgOwor5a++5aSW5pS/562WID4gdGFpZ2Fpc2Vpc2FrdVwgOwor57K+6ZyK5L+h5LuwID4gc2VpcmVpc2hpbmtvdVwgOwor77yn77yi55CG6KuWID4gamlcIMyEYmlcIMyEcmlyb25cIDsKK+aYpemiqOmnmOiVqSA+IHNodW5wdXV0YWl0b3VcIDsKK+atu+WIkeWft+ihjCA+IHNoaWtlaXNoaWtrb3VcIDsKK+S6jOiAheaKnuS4gCA+IG5pc2hhdGFrdWl0c3VcIDsKK+mFuOaAp+WPjeW/nCA+IHNhbnNlaWhhbicnbm91XCA7CivmsLTpgZPmlpnph5EgPiBzdWlkb3VyeW91a2luXCA7CivnqbrmsJflipvlraYgPiBrdXVraXJpa2lnYWt1XCA7CivllYblo7LmsJfos6ogPiBzaG91YmFpa2F0YWdpXCA7CivoqJjpjLLmloflraYgPiBraXJva3VidW5nYWt1XCA7CivlvbzmlrnmraTmlrkgPiBhY2hpcmFrb2NoaXJhXCA7Civnq4vouqvlh7rkuJYgPiByaXNzaGluc2h1c3NlXCA7CivmraPph5HpioDooYwgPiBzaG91a2luZ2lua291XCA7CivlhbHmuIjkuovmpa0gPiBreW91c2FpamlneW91XCA7CivlhYjooYzmioDooZMgPiBzZW5rb3VnaWp1dHN1XCA7Civlm7Pmm7jnm67pjLIgPiB0b3Nob21va3Vyb2t1XCA7CivoqLzmi6DpmqDmu4UgPiBzaG91a29pbm1ldHN1XCA7Civnq7bkuonplqLkv4IgPiBreW91c291a2Fua2VpXCA7CivkuovliY3mpJzplrIgPiBqaXplbmtlbicnZXRzdVwgOwor6KGM5pS/5Yem5YiGID4gZ3lvdXNlaXNob2J1blwgOwor5YWo6Z2i5bqD5ZGKID4gemVubWVua291a29rdVwgOwor5Zu95YuZ6ZW35a6YID4ga29rdW11Y2hvdWthblwgOwor57K+56We55eF6ZmiID4gc2Vpc2hpbmJ5b3VpblwgOwor5Zub5Y2B5Lmd5pelID4gc2hpanV1a3VuaWNoaVwgOwor5p2T5a2Q5a6a6KaPID4gc2hha3VzaGlqb3VnaVwgOwor5Y+v5aGR54mp6LOqID4ga2Fzb2J1c3NoaXRzdVwgOwor5Y2K6L6y5Y2K5ryBID4gaGFuJydub3VoYW5neW9cIDsKK+aatOmjsuaatOmjnyA+IGJvdWluYm91c2hva3VcIDsKK+eglOeptuWIhumHjiA+IGtlbmt5dXVidW4nJ3lhXCA7Civkurrlj6Plr4bluqYgPiBqaW5rb3VtaXRzdWRvXCA7Civkurrouqvlo7LosrcgPiBqaW5zaGluYmFpYmFpXCA7CivmrrrkurrmnKrpgYIgPiBzYXRzdWppbm1pc3VpXCA7CivotrPliKnmmYLku6MgPiBhc2hpa2FnYWppZGFpXCA7CivlvL7nnYDot53pm6IgPiBkYW5jaGFrdWt5b3JpXCA7Civli5XnianmpJzmn7sgPiBkb3VidXRzdWtlbnNhXCA7CivolqzppIznmYLms5UgPiB5YWt1amlyeW91aG91XCA7CivkurrplpPlm73lrp0gPiBuaW5nZW5rb2t1aG91XCA7Civnt4ropoHlnLDlvaIgPiBraW4nJ3lvdWNoaWtlaVwgOwor5biC5aC05oiQ6ZW3ID4gc2hpam91c2VpY2hvdVwgOwor5oyH5ZCN5oqV56WoID4gc2hpbWVpdG91aHlvdVwgOwor5ZGJ6LaK5ZCM6IifID4gZ29ldHN1ZG91c2h1dVwgOwor5a6F5Zyw6YCg5oiQID4gdGFrdWNoaXpvdXNlaVwgOwor57K+56We5Yq05YONID4gc2Vpc2hpbnJvdWRvdVwgOwor5a625peP6KiI55S7ID4ga2F6b2t1a2Vpa2FrdVwgOwor6ZaL5Y+j5LiA55WqID4ga2Fpa291aWNoaWJhblwgOwor55u057O75Y2R5bGeID4gY2hva2tlaWhpem9rdVwgOwor5Ymy6LOm5pa55byPID4ga2FwcHVob3VzaGlraVwgOwor5Yuk5Yq05aSn6KGGID4ga2lucm91dGFpc2h1dVwgOwor5pyq5Y+O5YWl6YeRID4gbWlzaHV1bnl1dWtpblwgOwor6aKo5L+X5Za25qWtID4gZnV1em9rdWVpZ3lvdVwgOwor5rCR5L+X6Z+z5qW9ID4gbWluem9rdW9uZ2FrdVwgOwor5rW35rC05rW05aC0ID4ga2Fpc3VpeW9rdWpvdVwgOwor6YCj5ZCI5L2c5oimID4gcmVuZ291c2FrdXNlblwgOwor5Lih6JOL5pmC6KiIID4gcnlvdWJ1dGFkb2tlaVwgOwor5Li75a6i6Lui5YCSID4gc2h1a2FrdXRlbnRvdVwgOwor5pCN55uK5YuY5a6aID4gc29uJydla2lrYW5qb3VcIDsKK+WLleWKm+mZjeS4iyA+IGRvdXJ5b2t1a291a2FcIDsKK+S4ieinkumXmOS6iSA+IHNhbmtha3V0b3Vzb3VcIDsKK+mAgOWtpuWHpuWIhiA+IHRhaWdha3VzaG9idW5cIDsKK+Wun+mok+adkOaWmSA+IGppa2tlbnphaXJ5b3VcIDsKK+mHjeimgeeUo+alrSA+IGp1dXlvdXNhbmd5b3VcIDsKK+a2suS9k+eHg+aWmSA+IGVraXRhaW5lbnJ5b3VcIDsKK+S8nemBk+mbhuS8miA+IGRlbmRvdXNodXVrYWlcIDsKK+WFq+mdouWFreiHgiA+IGhhY2hpbWVucm9wcGlcIDsKK+aJjeawl+eFpeeZuiA+IHNhaWtpa2FucGF0c3VcIDsKK+aEn+aDheihqOePviA+IGthbmpvdWh5b3VnZW5cIDsKK+S6uueoruW3ruWIpSA+IGppbnNodXNhYmV0c3VcIDsKK+iLseWbveeZuumfsyA+IGVpa29rdWhhdHN1b25cIDsKK+eEoemZkOaVsOWIlyA+IG11Z2Vuc3V1cmV0c3VcIDsKK+aCqumAhueEoemBkyA+IGFrdWd5YWt1bXVkb3VcIDsKK+eGn+aFruaWreihjCA+IGp1a3VyeW9kYW5rb3VcIDsKK+ebtOS6pOW6p+aomSA+IGNob2trb3V6YWh5b3VcIDsKK+WMl+WkquW5s+a0iyA+IGtpdGF0YWloZWl5b3VcIDsKK+eUt+WjsOWQiOWUsSA+IGRhbnNlaWdhc3Nob3VcIDsKK+iDg+iFuOeXheWtpiA+IGljaG91YnlvdWdha3VcIDsKK+S4ieinkumWouS/giA+IHNhbmtha3VrYW5rZWlcIDsKK+awkeaXj+mfs+alvSA+IG1pbnpva3Vvbmdha3VcIDsKK+WNmOeLrOS8muimiyA+IHRhbmRva3VrYWlrZW5cIDsKK+iyoeeUo+ebuOe2miA+IHphaXNhbnNvdXpva3VcIDsKK+S4iuaZuuWkp+WtpiA+IGpvdWNoaWRhaWdha3VcIDsKK+WDp+W6teeUn+a0uyA+IHNvdWFuc2Vpa2F0c3VcIDsKK+azleW+i+eUqOiqniA+IGhvdXJpdHN1eW91Z29cIDsKK+mbjOmbhOmBuOaKniA+IHNoaXl1dXNlbnRha3VcIDsKK+eZvuiKsee5muS5sSA+IGh5YWtrYXJ5b3VyYW5cIDsKK+mfs+alveeZguazlSA+IG9uZ2FrdXJ5b3Vob3VcIDsKK+S9j+awkeeZu+mMsiA+IGp1dW1pbnRvdXJva3VcIDsKK+aWreWxpOWGmeecnyA+IGRhbnNvdXNoYXNoaW5cIDsKK+WNoOmgmOWcsOW4ryA+IHNlbnJ5b3VjaGl0YWlcIDsKK+iWrOWTgeS8muekviA+IHlha3VoaW5nYWlzaGFcIDsKK+WHuuWPo+iqv+afuyA+IGRlZ3VjaGljaG91c2FcIDsKK+iDveWLleWFjeeWqyA+IG5vdWRvdW1lbicnZWtpXCA7CivlnKjnlZnpgqbkurogPiB6YWlyeXV1aG91amluXCA7Civpuqbol4HntLDlt6UgPiBtdWdpd2FyYXNhaWt1XCA7Civlt6Xoirjnvo7ooZMgPiBrb3VnZWliaWp1dHN1XCA7CivoiKrnqbrmlLvmkoMgPiBrb3VrdXVrb3VnZWtpXCA7Civph43ph4/pgbjmiYsgPiBqdXVyeW91c2Vuc2h1XCA7CivotaTnq4vnvr3onbYgPiBha2F0YXRlaGFjaG91XCA7CivmhJvps6XpgLHplpMgPiBhaWNob3VzaHV1a2FuXCA7Civlt6Xmpa3ljJblraYgPiBrb3VneW91a2FnYWt1XCA7CivmioDooZPmj5DmkLogPiBnaWp1dHN1dGVpa2VpXCA7CivkuK3mgKflrZDmmJ8gPiBjaHV1c2Vpc2hpc2VpXCA7CivlhazlhbHkuovmpa0gPiBrb3VreW91amlneW91XCA7CivkuIrotormnKznt5ogPiBqb3VldHN1aG9uc2VuXCA7CivnhKHlhJ/lpZHntIQgPiBtdXNob3VrZWl5YWt1XCA7CivploPlhYnpm7vnkIMgPiBzZW5rb3VkZW5reXV1XCA7Civlm73nsY3oqIDoqp4gPiBrb2t1c2VraWdlbmdvXCA7CivlrprmuKnli5XniakgPiB0ZWlvbmRvdWJ1dHN1XCA7CivnqbrliY3ntbblvowgPiBrdXV6ZW56ZXRzdWdvXCA7CivmrablipvlpJbkuqQgPiBidXJ5b2t1Z2Fpa291XCA7CivmiLjnsY3mioTmnKwgPiBrb3Nla2lzaG91aG9uXCA7CivmnJ3prq7ljYrls7YgPiBjaG91c2VuaGFudG91XCA7CivpnZ7luLjlj6zpm4YgPiBoaWpvdXNob3VzaHV1XCA7CivlhajoiKzliY3lk6ggPiB6ZW5wYW56ZW5zaG91XCA7CivlpKfkuZfku4/mlZkgPiBkYWlqb3VidWtreW91XCA7CivliIbmnpDoqabpqJMgPiBidW5zZWtpc2hpa2VuXCA7Civlub3pnIrlsYvmlbcgPiB5dXVyZWl5YXNoaWtpXCA7CivmnInnlKPpmo7ntJogPiB5dXVzYW5rYWlreXV1XCA7CivmqKnlipvmlL/msrsgPiBrZW5yeW9rdXNlaWppXCA7CivohIXov6vpm7voqbEgPiBreW91aGFrdWRlbndhXCA7CivoiLnojbfoqLzliLggPiBmdW5hbmlzaG91a2VuXCA7CivmiYvml5fkv6Hlj7cgPiB0ZWJhdGFzaGluZ291XCA7CivmoITppIrlpLHoqr8gPiBlaXlvdXNoaXRjaG91XCA7CivkvZzms4HmjIfmlbAgPiBzYWtreW91c2hpc3V1XCA7Civnm7jkupLpgJrkv6EgPiBzb3Vnb3RzdXVzaGluXCA7CivooajlsaTpm6rltKkgPiBoeW91c291bmFkYXJlXCA7Civngb3lrrPlr77nrZYgPiBzYWlnYWl0YWlzYWt1XCA7Civkuovlrp/oqr/mn7sgPiBqaWppdHN1Y2hvdXNhXCA7Civml6XntYzmlrDogZ4gPiBuaWtrZWlzaGluYnVuXCA7CivkuK3plpPpgbjmjJkgPiBjaHV1a2Fuc2Vua3lvXCA7CivluILplbfpgbjmjJkgPiBzaGljaG91c2Vua3lvXCA7CivmsojpmY3mtbflsrggPiBjaGlua291a2FpZ2FuXCA7CivnpL7kvJrnpo/npYkgPiBzaGFrYWlmdWt1c2hpXCA7Civoq5blip/ooYzos54gPiByb25rb3Vrb3VzaG91XCA7Civlrp/ot7XouqzooYwgPiBqaXNzZW5reXV1a291XCA7CivmraPlia/kuozpgJogPiBzZWlmdWt1bml0c3V1XCA7CivkuqTmhJ/npZ7ntYwgPiBrb3VrYW5zaGlua2VpXCA7Civmtojosrvpnanlkb0gPiBzaG91aGlrYWt1bWVpXCA7CivlsILku7vorJvluKsgPiBzZW4nJ25pbmtvdXNoaVwgOwor5aSn6YeP55Sf55SjID4gdGFpcnlvdXNlaXNhblwgOwor5pyA6auY5qmf5a+GID4gc2Fpa291a2ltaXRzdVwgOwor566h5bym5qW95rOVID4ga2FuZ2VuZ2FrdWhvdVwgOwor5paw5ZOB5ZCM5qeYID4gc2hpbnBpbmRvdXlvdVwgOwor5YKZ6I2S6LKv6JOEID4gYmlrb3VjaG9jaGlrdVwgOwor6JaE5b+X5byx6KGMID4gaGFrdXNoaWpha2tvdVwgOwor5Yuk5Yq06ZqO57SaID4ga2lucm91a2Fpa3l1dVwgOwor5pel5Y2w6Zai5L+CID4gbmljaGlpbmthbmtlaVwgOwor6ZW35pyf6KiI55S7ID4gY2hvdWtpa2Vpa2FrdVwgOwor5LiN5pmC552A6Zm4ID4gZnVqaWNoYWt1cmlrdVwgOwor5o6S5rOE5Zmo5a6YID4gaGFpc2V0c3VraWthblwgOwor6Iux5paH6Kej6YeIID4gZWlidW5rYWlzaGFrdVwgOwor5YWN6LKs5p2h6aCFID4gbWVuc2VraWpvdWtvdVwgOwor6YmE6YGT57ea6LevID4gdGV0c3Vkb3VzZW5yb1wgOwor5pS75pKD5oWL5YuiID4ga291Z2VraXRhaXNlaVwgOwor5a6a5pyf5piH57WmID4gdGVpa2lzaG91a3l1dVwgOwor6KiY6L+w5paH5rOVID4ga2lqdXRzdWJ1bnBvdVwgOwor6Iej57GN6ZmN5LiLID4gc2hpbnNla2lrb3VrYVwgOwor54Kt6YW46aOy5paZID4gdGFuc2FuJydpbnJ5b3VcIDsKK+W4guWgtOaLoeWkpyA+IHNoaWpvdWtha3VkYWlcIDsKK+eyvuWvhuapn+aisCA+IHNlaW1pdHN1a2lrYWlcIDsKK+apn+WLleitpuWvnyA+IGtpZG91a2Vpc2F0c3VcIDsKK+W5tOmWk+WPjuebiiA+IG5lbmthbnNodXVla2lcIDsKK+S7suijgeijgeWumiA+IGNodXVzYWlzYWl0ZWlcIDsKK+WBteWvn+imgeWToSA+IHRlaXNhdHN1eW91aW5cIDsKK+aWh+iXneaYpeeniyA+IGJ1bmdlaXNodW5qdXVcIDsKK+S6uuW9ouiKneWxhSA+IG5pbmd5b3VzaGliYWlcIDsKK+awtOS4reecvOmPoSA+IHN1aWNodXVtZWdhbmVcIDsKK+WFrOW6j+iJr+S/lyA+IGtvdWpvcnlvdXpva3VcIDsKK+WpmuWJjeS6pOa4iSA+IGtvbnplbmtvdXNob3VcIDsKK+WkqumZvem7kueCuSA+IHRhaXlvdWtva3V0ZW5cIDsKK+S4iuW+oeS4gOS6uiA+IGthbWlnb2ljaGluaW5cIDsKK+S4u+imgeW3pealrSA+IHNodXlvdWtvdWd5b3VcIDsKK+S4i+etieWLleeJqSA+IGthdG91ZG91YnV0c3VcIDsKK+iHpeiWquWYl+iDhiA+IGdhc2hpbnNob3V0YW5cIDsKK+iouueZguaUr+aPtCA+IHNoaW5yeW91c2hpZW5cIDsKK+i7ouWcsOeZgumkiiA+IHRlbmNoaXJ5b3V5b3VcIDsKK+S4h+iDvemBuOaJiyA+IGJhbicnbm91c2Vuc2h1XCA7CivmlZnkvJrpn7Pmpb0gPiBreW91a2Fpb25nYWt1XCA7CivljYPovInkuIDpgYcgPiBzZW56YWlpY2hpZ3V1XCA7Civlo7LosrflpZHntIQgPiBiYWliYWlrZWl5YWt1XCA7CivkvY/lroXlnLDluK8gPiBqdXV0YWt1Y2hpdGFpXCA7CivmuJvpgJ/oo4Xnva4gPiBnZW5zb2t1c291Y2hpXCA7CivkvY/lroXllY/poYwgPiBqdXV0YWt1bW9uZGFpXCA7CivlhY3nlqvooYDmuIUgPiBtZW4nJ2VraWtlc3NlaVwgOwor5qC45Y+N5b+c54KJID4ga2FrdWhhbicnbm91cm9cIDsKK+aUvuWwhOe3muWtpiA+IGhvdXNoYXNlbmdha3VcIDsKK+a1gemAmue1jOi3ryA+IHJ5dXV0c3V1a2Vpcm9cIDsKK+Wwi+W4uOS4gOanmCA+IGppbmpvdWljaGl5b3VcIDsKK+WbveacieiyoeeUoyA+IGtva3V5dXV6YWlzYW5cIDsKK+W4guawkemajue0miA+IHNoaW1pbmthaWt5dXVcIDsKK+iogOiqnuefpeitmCA+IGdlbmdvY2hpc2hpa2lcIDsKK+WFrOWFseaUvumAgSA+IGtvdWt5b3Vob3Vzb3VcIDsKK+aWkeeKtue1hOe5lCA+IGhhbmpvdXNvc2hpa2lcIDsKK+mHjeeIhuaSg+apnyA+IGp1dWJha3VnZWtpa2lcIDsKK+WpmuWkluS6pOa4iSA+IGtvbmdhaWtvdXNob3VcIDsKK+S7suijgeijgeWIpCA+IGNodXVzYWlzYWliYW5cIDsKK+S+r+eIteWkq+S6uiA+IGtvdXNoYWt1ZnVqaW5cIDsKK+acieiJsumHjuiPnCA+IHl1dXNob2t1eWFzYWlcIDsKK+mbhuWbo+iotOionyA+IHNodXVkYW5zb3Nob3VcIDsKK+S4gOasoeeUo+alrSA+IGljaGlqaXNhbmd5b3VcIDsKK+e3tOe/kuS4jei2syA+IHJlbnNodXVidXNva3VcIDsKK+WVhuiIueWtpuagoSA+IHNob3VzZW5nYWtrb3VcIDsKK+m6puiXgeicu+ibiSA+IG11Z2l3YXJhdG9uYm9cIDsKK+aciemZkOmbhuWQiCA+IHl1dWdlbnNodXVnb3VcIDsKK+i/veWKoOaWmemHkSA+IHRzdWlrYXJ5b3VraW5cIDsKK86g5Lit6ZaT5a2QID4gcGFpY2h1dWthbnNoaVwgOwor6YGg6ZqU5pWZ6IKyID4gZW5rYWt1a3lvdWlrdVwgOwor6ISz6ISK6auE5rayID4gbm91c2VraXp1aWVraVwgOwor5p2x6KW/5Y2X5YyXID4gdG91emFpbmFuYm9rdVwgOwor6Kix5a6557ea6YePID4ga3lveW91c2VucnlvdVwgOwor5q2j5pyt5YCk5q61ID4gc2hvdWZ1ZGFuZWRhblwgOwor5beu5Yil6Zai56iOID4gc2FiZXRzdWthbnplaVwgOwor5Lit562J5a2m5qChID4gY2h1dXRvdWdha2tvdVwgOwor566h5bym5qW95ZujID4ga2FuZ2VuZ2FrdWRhblwgOwor5a+E55Sf55Sf54mpID4ga2lzZWlzZWlidXRzdVwgOwor5Li75qip5Zue5b6pID4gc2h1a2Vua2FpZnVrdVwgOwor5Lih6YOo56We6YGTID4gcnlvdWJ1c2hpbnRvdVwgOwor57WC5qWt5pmC6ZaTID4gc2h1dWd5b3VqaWthblwgOwor57W55biD5LiA5be7ID4ga2VucHVoaXRvbWFraVwgOwor6YGO5Zyn5a+G5q+UID4ga2FhdHN1bWl0c3VoaVwgOwor6Ieq54S26YG45oqeID4gc2hpemVuc2VudGFrdVwgOwor5Y+N5b+c6YCf5bqmID4gaGFuJydub3Vzb2t1ZG9cIDsKK+WBteWvn+ihm+aYnyA+IHRlaXNhdHN1ZWlzZWlcIDsKK+ato+WJr+itsOmVtyA+IHNlaWZ1a3VnaWNob3VcIDsKK+elnuWJjee1kOWpmiA+IHNoaW56ZW5rZWtrb25cIDsKK+azleeahOaJi+autSA+IGhvdXRla2lzaHVkYW5cIDsKK+S9nOalremgmOWfnyA+IHNhZ3lvdXJ5b3Vpa2lcIDsKK+W5tOmHkeiovOabuCA+IG5lbmtpbnNob3VzaG9cIDsKK+S6pOmAmuWmqOWusyA+IGtvdXRzdXVib3VnYWlcIDsKK+eUuuadkeWQiOS9tSA+IGNob3Vzb25nYXBwZWlcIDsKK+aVmeS8muaXi+azlSA+IGt5b3VrYWlzZW5wb3VcIDsKK+W5leiXqeS9k+WItiA+IGJha3VoYW50YWlzZWlcIDsKK+esrOS4gOWNsOixoSA+IGRhaWljaGlpbnNob3VcIDsKK+ecn+epuuWMheijhSA+IHNoaW5rdXVob3Vzb3VcIDsKK+ebo+afu+iovOi3oSA+IGthbnNhc2hvdXNla2lcIDsKK+iqmOWwjumbu+a1gSA+IHl1dWRvdWRlbnJ5dXVcIDsKK+W+qeaXp+S9nOalrSA+IGZ1a2t5dXVzYWd5b3VcIDsKK+aQjeWus+izoOWEnyA+IHNvbmdhaWJhaXNob3VcIDsKK+aDs+WDj+WmiuWooCA+IHNvdXpvdW5pbnNoaW5cIDsKK+iZmuW/g+WdpuaHkCA+IGt5b3NoaW50YW5rYWlcIDsKK+iAkOmch+ani+mAoCA+IHRhaXNoaW5rb3V6b3VcIDsKK+aciemZkOe0muaVsCA+IHl1dWdlbmt5dXVzdXVcIDsKK+WbveWcn+ioiOeUuyA+IGtva3Vkb2tlaWtha3VcIDsKK+eUn+WtmOertuS6iSA+IHNlaXpvbmt5b3Vzb3VcIDsKK+W4guawkemdqeWRvSA+IHNoaW1pbmtha3VtZWlcIDsKK+Wkp+e1semgmOmBuCA+IGRhaXRvdXJ5b3VzZW5cIDsKK+ijnOe/kuaVmeiCsiA+IGhvc2h1dWt5b3Vpa3VcIDsKK+WPuOS7pOmVt+WumCA+IHNoaXJlaWNob3VrYW5cIDsKK+izg+mHkeS9k+ezuyA+IGNoaW5naW50YWlrZWlcIDsKK+WFqOS6uuaVmeiCsiA+IHplbmppbmt5b3Vpa3VcIDsKK+WumOaIv+mVt+WumCA+IGthbmJvdWNob3VrYW5cIDsKK+S8gealreenmOWvhiA+IGtpZ3lvdWhpbWl0c3VcIDsKK+auuuS6uuS6i+S7tiA+IHNhdHN1amluamlrZW5cIDsKK+WHtuaCqueKr+e9qiA+IGt5b3Vha3VoYW56YWlcIDsKK+WkqeeEtuizh+a6kCA+IHRlbicnbmVuc2hpZ2VuXCA7Civnmb7lp5PkuIDmj4YgPiBoeWFrdXNob3Vpa2tpXCA7Civnt4/lkIjlpKflraYgPiBzb3Vnb3VkYWlnYWt1XCA7Civku4/poILlsIrli50gPiBidWNob3Vzb25zaG91XCA7CivljYPlt67kuIfliKUgPiBzZW5zYWJhbmJldHN1XCA7CivntrLnirbntYTnuZQgPiBtb3Vqb3Vzb3NoaWtpXCA7CivnrKzkuIDpg6jplbcgPiBkYWlpY2hpYnVjaG91XCA7Civmupbmupbmsbrli50gPiBqdW5qdW5rZXNzaG91XCA7CivlpKflkozmsJHml48gPiB5YW1hdG9taW56b2t1XCA7CivlubTlubTmrbPmrbMgPiBuZW4nJ25lbnNhaXNhaVwgOwor5Zyw5q675aSJ5YuVID4gY2hpa2FrdWhlbmRvdVwgOwor6LKh5pS/5pS56Z2pID4gemFpc2Vpa2Fpa2FrdVwgOwor5YWx5ZCM6KiI566XID4ga3lvdWRvdWtlaXNhblwgOwor5YaZ55yf6Zu76YCBID4gc2hhc2hpbmRlbnNvdVwgOwor5LiN6Imv6Ki65patID4gZnVyeW91c2hpbmRhblwgOwor5rC055Sj5aSn5a2mID4gc3Vpc2FuZGFpZ2FrdVwgOwor5Y2Y5byP54Gr5bGxID4gdGFuc2hpa2lrYXphblwgOwor5LiA5YiG5LiA5Y6YID4gaWNoaWJ1aWNoaXJpblwgOwor5a6f5Zyw5qSc6Ki8ID4gaml0Y2hpa2Vuc2hvdVwgOwor5YyX5riF5LqL5aSJID4gaG9rdXNoaW5qaWhlblwgOwor5Lq66Z2i542j5b+DID4gbmlubWVuanV1c2hpblwgOwor6KiI55S75q616ZqOID4ga2Vpa2FrdWRhbmthaVwgOwor56S+5ZOh6aOf5aCCID4gc2hhaW5zaG9rdWRvdVwgOwor5o2n6IW557W25YCSID4gaG91ZnVrdXpldHRvdVwgOwor6YO15L6/5paZ6YeRID4geXV1YmlucnlvdWtpblwgOwor5LqU5Y2B5LiJ5qyhID4gZ29qdXVzYW50c3VnaVwgOwor5YSq5Yud5Yqj5pWXID4geXV1c2hvdXJlcHBhaVwgOwor5b+r6YCf5YiX6LuKID4ga2Fpc29rdXJlc3NoYVwgOwor6Zuj5rCR5p2h57SEID4gbmFubWluam91eWFrdVwgOwor5Zu96Zqb5pS+6YCBID4ga29rdXNhaWhvdXNvdVwgOwor5YWt5Y2B5L2Z5beeID4gcm9rdWp1dXlvc2h1dVwgOwor5oCl6KGM5YiX6LuKID4ga3l1dWtvdXJlc3NoYVwgOwor5qOu5p6X5Zyw5bivID4gc2hpbnJpbmNoaXRhaVwgOwor6Y6W5Zu95pS/562WID4gc2Frb2t1c2Vpc2FrdVwgOwor5YW36LGh576O6KGTID4gZ3VzaG91YmlqdXRzdVwgOwor5oeQ55+z5paZ55CGID4ga2Fpc2VraXJ5b3VyaVwgOwor57Ch5piT6aOf5aCCID4ga2FuJydpc2hva3Vkb3VcIDsKK+aal+m7kuWkp+mZuCA+IGFua29rdXRhaXJpa3VcIDsKK+WPjeWLlemdqeWRvSA+IGhhbmRvdWtha3VtZWlcIDsKK+WFreaguea4hea1hCA+IHJva2tvbnNob3Vqb3VcIDsKK+WVhualreS4u+e+qSA+IHNob3VneW91c2h1Z2lcIDsKK+S/oemgvOmGuOaIkCA+IHNoaW5yYWlqb3VzZWlcIDsKK+WFseWQjOWjsOaYjiA+IGt5b3Vkb3VzZWltZWlcIDsKK+WJsuW8leWIh+espiA+IHdhcmliaWtpa2lwcHVcIDsKK+WGt+WNtOacn+mWkyA+IHJlaWt5YWt1a2lrYW5cIDsKK+S5neatu+S4gOeUnyA+IGt5dXVzaGlpc3Nob3VcIDsKK+S4reiPr+awkeWbvSA+IGNodXVrYW1pbmtva3VcIDsKK+aLoeWjsOijhee9riA+IGtha3VzZWlzb3VjaGlcIDsKK+mBk+i3r+W7uuiorSA+IGRvdXJva2Vuc2V0c3VcIDsKK+S6uumAoOWuneefsyA+IGppbnpvdWhvdXNla2lcIDsKK+i8uOWHuuS/nemZuiA+IHl1c2h1dHN1aG9rZW5cIDsKK+W/heS/ruenkeebriA+IGhpc3NodXVrYW1va3VcIDsKK+e1puS4juaJgOW+lyA+IGt5dXV5b3Nob3Rva3VcIDsKK+attOWPsuWtpua0viA+IHJla2lzaGlnYWt1aGFcIDsKK+etieW3ruaVsOWIlyA+IHRvdXNhc3V1cmV0c3VcIDsKK+WQm+WtkOixueWkiSA+IGt1bnNoaWh5b3VoZW5cIDsKK+S4i+ihqOWPgueFpyA+IGthaHlvdXNhbnNob3VcIDsKK+WLouWKm+evhOWbsiA+IHNlaXJ5b2t1aGFuJydpXCA7CivpgJrosqjmlL/nrZYgPiB0c3V1a2FzZWlzYWt1XCA7Civni6zljaDkvIHmpa0gPiBkb2t1c2Vua2lneW91XCA7CivnibnmqKnpmo7ntJogPiB0b2trZW5rYWlreXV1XCA7CivmraPopo/mm7Lnt5ogPiBzZWlraWt5b2t1c2VuXCA7Civlgo3ogbTnhKHmlpkgPiBib3VjaG91bXVyeW91XCA7CivnlKPmpa3os4fmnKwgPiBzYW5neW91c2hpaG9uXCA7Civnq4vnn7Ppm7vmqZ8gPiB0YXRlaXNoaWRlbmtpXCA7CivlpJzplpPkuK3lraYgPiB5YWthbmNodXVnYWt1XCA7Civosr/mmJPmkanmk6YgPiBib3Vla2ltYXNhdHN1XCA7CivlubTovKrlj7LlraYgPiBuZW5yaW5zaGlnYWt1XCA7CivmqZ/morDnv7voqLMgPiBraWthaWhvbicneWFrdVwgOwor5b656aCt5b655bC+ID4gdGV0dG91dGV0c3ViaVwgOwor6YeR56eR546J5p2hID4ga2lua2FneW9rdWpvdVwgOwor5rCR6ZaT55mC5rOVID4gbWlua2FucnlvdWhvdVwgOwor5oOF5rOB6Ki85ougID4gam91a3lvdXNob3Vrb1wgOwor5b+D5oK45Lqi6YCyID4gc2hpbmtpa291c2hpblwgOwor5a6a5oCn5YiG5p6QID4gdGVpc2VpYnVuc2VraVwgOwor5ZuD5a2Q6KiA6JGJID4gaGF5YXNoaWtvdG9iYVwgOwor54m56Kix5oqA6KGTID4gdG9ra3lvZ2lqdXRzdVwgOwor5aCx6YGT5YaZ55yfID4gaG91ZG91c2hhc2hpblwgOwor5pyA5L2O6LOD6YeRID4gc2FpdGVpY2hpbmdpblwgOwor556s6ZaT6Zu75patID4gc2h1bmthbmRlbmRhblwgOwor5bm06aCt5pWZ5pu4ID4gbmVudG91a3lvdXNob1wgOwor5p2x5rSL5q616YCaID4gdG91eW91ZGFudHN1dVwgOwor54us5Y2g6LOH5pysID4gZG9rdXNlbnNoaWhvblwgOwor5p2x5pa55pWZ5LyaID4gdG91aG91a3lvdWthaVwgOwor6Ieq6Kaa55eH54q2ID4gamlrYWt1c2hvdWpvdVwgOwor5aSp5L2T6Kaz5risID4gdGVudGFpa2Fuc29rdVwgOwor576k6ZuG6KGM5YuVID4gZ3Vuc2h1dWtvdWRvdVwgOwor6KGG5Lq655Kw6KaWID4gc2h1dWppbmthbnNoaVwgOwor6L+36LWw56We57WMID4gbWVpc291c2hpbmtlaVwgOwor5oim55Wl5YW15ZmoID4gc2Vucnlha3VoZWlraVwgOwor5YWI5Yi25pS75pKDID4gc2Vuc2Vpa291Z2VraVwgOwor5pyJ57Wm5LyR5pqHID4geXV1a3l1dWt5dXVrYVwgOwor6KaL5a2m5peF6KGMID4ga2VuZ2FrdXJ5b2tvdVwgOwor5Zu95YaF57WM5riIID4ga29rdW5haWtlaXphaVwgOwor5a++56m65bCE5pKDID4gdGFpa3V1c2hhZ2VraVwgOwor5q+U6LyD5a++54WnID4gaGlrYWt1dGFpc2hvdVwgOwor5biC5Lit6YqA6KGMID4gc2hpY2h1dWdpbmtvdVwgOwor5a6a54K56Kaz5risID4gdGVpdGVua2Fuc29rdVwgOwor5L+D5oiQ5qC95Z+5ID4gc29rdXNlaXNhaWJhaVwgOwor6LOD6YeR5qC85beuID4gY2hpbmdpbmtha3VzYVwgOwor5pSv6YWN6ZqO57SaID4gc2hpaGFpa2Fpa3l1dVwgOwor5LqM6YeN6Zyy5Ye6ID4gbmlqdXVyb3NodXRzdVwgOwor5YuV6ISI56Gs5YyWID4gZG91bXlha3Vrb3VrYVwgOwor6Zqj5o6l6YOo6ZqKID4gcmluc2V0c3VidXRhaVwgOwor5bu66Kit5qmf5qKwID4ga2Vuc2V0c3VraWthaVwgOwor5LiK5bGk6ZqO57SaID4gam91c291a2Fpa3l1dVwgOwor5LiJ5oud5Lmd5oudID4gc2FucGFpa3l1dWhhaVwgOwor54m55q6K5rOV5Lq6ID4gdG9rdXNodWhvdWppblwgOwor5aOr6a2C5ZWG5omNID4gc2hpa29uc2hvdXNhaVwgOwor6Jma5b+D5ouF5oeQID4ga3lvc2hpbnRhbmthaVwgOwor5YK355eF5o2V6JmcID4gc2hvdWJ5b3Vob3J5b1wgOwor54Sh5oCn55Sf5q6WID4gbXVzZWlzZWlzaG9rdVwgOwor6LKh5pS/5pS/562WID4gemFpc2Vpc2Vpc2FrdVwgOwor6Zm45LiK56u25oqAID4gcmlrdWpvdWt5b3VnaVwgOwor5Y2a6Kan5by36KiYID4gaGFrdXJhbmt5b3VraVwgOwor5Lq65qip5L615a6zID4gamlua2Vuc2hpbmdhaVwgOwor57eP6aCY5oGv5a2QID4gc291cnlvdW11c3Vrb1wgOwor6I+c6aOf5Li7576pID4gc2Fpc2hva3VzaHVnaVwgOwor6LWk5aSW55m65pWjID4gc2VraWdhaWhhc3NhblwgOwor6KGb5pif6YCa5L+hID4gZWlzZWl0c3V1c2hpblwgOwor5Lq65ZOh5YmK5ribID4gamluJydpbnNha3VnZW5cIDsKK+eOh+WFiOi6rOihjCA+IHNvc3Nlbmt5dXVrb3VcIDsKK+WFjeeojuaJgOW+lyA+IG1lbnplaXNob3Rva3VcIDsKK+mYsue4ruWKoOW3pSA+IGJvdXNodWt1a2Frb3VcIDsKK+ikh+W8j+ewv+iomCA+IGZ1a3VzaGlraWJva2lcIDsKK+iyrOS7u+WIhuaLhSA+IHNla2luaW5idW50YW5cIDsKK+atpuWKm+ihjOS9vyA+IGJ1cnlva3Vrb3VzaGlcIDsKK+eVque1hOe3qOaIkCA+IGJhbmd1bWloZW5zZWlcIDsKK+S8keaBr+aZgumWkyA+IGt5dXVzb2t1amlrYW5cIDsKK+S6jOmHjemWouevgCA+IG5panV1a2Fuc2V0c3VcIDsKK+ims+WFieeUo+alrSA+IGthbmtvdXNhbmd5b3VcIDsKK+WNmuW8leaXgeiovCA+IGhha3VpbmJvdXNob3VcIDsKK+WFseiyqeS8muekviA+IGt5b3VoYW5nYWlzaGFcIDsKK+aPmumZuOiJpuiJhyA+IHlvdXJpa3VrYW50ZWlcIDsKK+S4u+Wuoumhm+WAkiA+IHNodWtha3V0ZW50b3VcIDsKK+WFrOWus+WvvuetliA+IGtvdWdhaXRhaXNha3VcIDsKK+mZveWLleS9nOaIpiA+IHlvdWRvdXNha3VzZW5cIDsKK+iqmOaLkOeKr+S6uiA+IHl1dWthaWhhbicnbmluXCA7CivlhoXoh5Pnlr7mgqMgPiBuYWl6b3VzaGlra2FuXCA7Civkv67lo6voq5bmlocgPiBzaHV1c2hpcm9uYnVuXCA7Civpq5jnrYnmlZnogrIgPiBrb3V0b3VreW91aWt1XCA7CivmuKzph4/mqZ/morAgPiBzb2t1cnlvdWtpa2FpXCA7CivpnIrmhJ/llYbms5UgPiByZWlrYW5zaG91aG91XCA7CivlkarnianltIfmi50gPiBqdWJ1dHN1c3V1aGFpXCA7CivmlofkurrloqjlrqIgPiBidW5qaW5ib2trYWt1XCA7Civmib/nn6XkuYvliqkgPiBzaG91Y2hpbm9zdWtlXCA7CivotorlubTojYnmnKwgPiBldHN1bmVuc291aG9uXCA7CivpgJrli6TliJfou4ogPiB0c3V1a2lucmVzc2hhXCA7Civnsr7pgLLmlpnnkIYgPiBzaG91amlucnlvdXJpXCA7CivkuLvlipvpg6jpmoogPiBzaHVyeW9rdWJ1dGFpXCA7Civpg7flnJ/mloflraYgPiBreW91ZG9idW5nYWt1XCA7CivmnJ/mnKvoqabpqJMgPiBraW1hdHN1c2hpa2VuXCA7CivpgKPpgqbpppbnm7ggPiByZW5wb3VzaHVzaG91XCA7Civmg4XloLHlt6XlraYgPiBqb3Vob3Vrb3VnYWt1XCA7CivkuIPliIbkuInliIYgPiBzaGljaGlidXNhbmJ1XCA7CivlhazniLXlpKvkurogPiBrb3VzaGFrdWZ1amluXCA7Civlj4LogIPos4fmlpkgPiBzYW5rb3VzaGlyeW91XCA7Civni6zmlq3lsILooYwgPiBkb2t1ZGFuc2Vua291XCA7CivlhaXlrabogIPmn7sgPiBueXV1Z2FrdWtvdXNhXCA7Civpga3pm6Pkv6Hlj7cgPiBzb3VuYW5zaGluZ291XCA7CivmtYHli5Xos4fnlKMgPiByeXV1ZG91c2hpc2FuXCA7CivkuIvlm5vljYrmnJ8gPiBzaGltb3NoaWhhbmtpXCA7Civpgbjmip7np5Hnm64gPiBzZW50YWt1a2Ftb2t1XCA7Civmg4XloLHmpJzntKIgPiBqb3Vob3VrZW5zYWt1XCA7CivpoILkuIrkvJroq4cgPiBjaG91am91a2FpZGFuXCA7CivlhbHmuIjntYTlkIggPiBreW91c2Fpa3VtaWFpXCA7Civlj4LogIPmm7jnm64gPiBzYW5rb3VzaG9tb2t1XCA7Civmsrvlronorablr58gPiBjaGlhbmtlaXNhdHN1XCA7CivoiIjmpa3pioDooYwgPiBrb3VneW91Z2lua291XCA7CivooYzmlL/mm7jlo6sgPiBneW91c2Vpc2hvc2hpXCA7CivplqLpgKPpoIXnm64gPiBrYW5yZW5rb3Vtb2t1XCA7Civpm6PooYzoi6booYwgPiBuYW5neW91a3VneW91XCA7CivpoJDph5HpgJrluLMgPiB5b2tpbnRzdXVjaG91XCA7CivntrLohpzliaXpm6IgPiBtb3VtYWt1aGFrdXJpXCA7CivovLjlh7rmpJzmn7sgPiB5dXNodXRzdWtlbnNhXCA7CivmjIflrprpipjmn4QgPiBzaGl0ZWltZWlnYXJhXCA7CivphZLmsaDogonmnpcgPiBzaHVjaGluaWt1cmluXCA7CivlhKrnrYnos57nirYgPiB5dXV0b3VzaG91am91XCA7Civpu4Tph5HliIblibIgPiBvdWdvbmJ1bmthdHN1XCA7Civkv67nuZXlt6XloLQgPiBzaHV1emVua291am91XCA7CivkuozogIXpgbjkuIAgPiBuaXNoYXNlbicnaXRzdVwgOwor54q25rOB6Ki85ougID4gam91a3lvdXNob3Vrb1wgOwor6I+M6aGe5a2m6ICFID4ga2lucnVpZ2FrdXNoYVwgOwor5Luy6KOB44CF5YikID4gY2h1dXNhaXNhaWJhblwgOwor5aSW5Zu96YO15L6/ID4gZ2Fpa29rdXl1dWJpblwgOwor5Lqk6YCa5Zyw542EID4ga291dHN1dWppZ29rdVwgOwor6ZuG5Zuj57WQ5amaID4gc2h1dWRhbmtla2tvblwgOwor5oSb546p5YuV54mpID4gYWlnYW5kb3VidXRzdVwgOwor6ZaT5o6l6Kmx5rOVID4ga2Fuc2V0c3V3YWhvdVwgOwor5a2m55Sf6YOo6ZW3ID4gZ2FrdXNlaWJ1Y2hvdVwgOwor6Zuy5b2i5a6a6KaPID4ga3Vtb2dhdGFqb3VnaVwgOwor5bGL5aSW5bqD5ZGKID4gb2t1Z2Fpa291a29rdVwgOwor5Lqh5ZG95paH5a2mID4gYm91bWVpYnVuZ2FrdVwgOwor6YCj57aa6Zai5pWwID4gcmVuem9rdWthbnN1dVwgOwor562G6Leh6ZGR5a6aID4gaGlzc2VraWthbnRlaVwgOwor5buD54mp5Yip55SoID4gaGFpYnV0c3VyaXlvdVwgOwor6LuK5Lih5Lya56S+ID4gc2hhcnlvdWdhaXNoYVwgOwor6bq76Jas5bi457+SID4gbWF5YWt1am91c2h1dVwgOwor5LiN5b6X6KaB6aCYID4gZnV0b2t1eW91cnlvdVwgOwor5bGx5bKz5Zyw5bivID4gc2FuZ2FrdWNoaXRhaVwgOwor5ZWP6aGM6aCY5Z+fID4gbW9uZGFpcnlvdWlraVwgOwor5YCL5Yil6LKp5aOyID4ga29iZXRzdWhhbmJhaVwgOwor5bmz6KGh5oSf6KaaID4gaGVpa291a2Fua2FrdVwgOwor5YaF5Zu96YO15L6/ID4gbmFpa29rdXl1dWJpblwgOwor5aCx6YGT55Wq57WEID4gaG91ZG91YmFuZ3VtaVwgOwor5YWx5ZCM57WE5ZCIID4ga3lvdWRvdWt1bWlhaVwgOwor57SZ5LiK6KiI55S7ID4gc2hpam91a2Vpa2FrdVwgOwor5LqM6YeN5Zu957GNID4gbmlqdXVrb2t1c2VraVwgOwor6KGM5pS/6Ki06KifID4gZ3lvdXNlaXNvc2hvdVwgOwor57W257iB5oq15oqXID4gemV0c3VlbnRlaWtvdVwgOwor5Yy/5ZCN5om56KmVID4gdG9rdW1laWhpaHlvdVwgOwor6ZW35pyf5Zu95YK1ID4gY2hvdWtpa29rdXNhaVwgOwor5YWJ57ea55mC5rOVID4ga291c2VucnlvdWhvdVwgOwor5rWB5YuV6LOH5pysID4gcnl1dWRvdXNoaWhvblwgOwor6Ki85Yi45biC5aC0ID4gc2hvdWtlbnNoaWpvdVwgOwor5bu66Kit5bel5LqLID4ga2Vuc2V0c3Vrb3VqaVwgOwor5aSJ5oWL5oCn5qyyID4gaGVudGFpc2VpeW9rdVwgOwor56m65Lit57Sw6I+MID4ga3V1Y2h1dXNhaWtpblwgOwor5Luj6YeR5byV5o+bID4gZGFpa2luaGlraWthZVwgOwor6Iy255Wq54uC6KiAID4gY2hhYmFua3lvdWdlblwgOwor5Lqk6YCa6KaP5YmHID4ga291dHN1dWtpc29rdVwgOwor5Lya5bit5paZ55CGID4ga2Fpc2VraXJ5b3VyaVwgOwor54++54mp55u45aC0ID4gZ2VuYnV0c3Vzb3ViYVwgOwor5p2f57ib55CG6KuWID4gc29rdWJha3VyaXJvblwgOwor5YWs5q2j6Ki85pu4ID4ga291c2Vpc2hvdXNob1wgOwor5ZCM55uf5oCg5qWtID4gZG91bWVpdGFpZ3lvdVwgOwor6KGM5YuV5pa56YedID4ga291ZG91aG91c2hpblwgOwor6YGp5q2j5L6h5qC8ID4gdGVraXNlaWtha2FrdVwgOwor5Lq656iu5pS56ImvID4gamluc2h1a2FpcnlvdVwgOwor5Y2K5rWB5YuV5L2TID4gaGFucnl1dWRvdXRhaVwgOwor5pmu5LuP5oim5LqJID4gZnVmdXRzdXNlbnNvdVwgOwor5LqM6YeN57WQ5ZCIID4gbmlqdXVrZXRzdWdvdVwgOwor5YWN6LKs54m55qipID4gbWVuc2VraXRva2tlblwgOwor5oey5oiS5Yem5YiGID4gY2hvdWthaXNob2J1blwgOwor5LiN5b+D5b6X6ICFID4gZnVrb2tvcm9lbW9ub1wgOwor6LGq5pS+56OK6JC9ID4gZ291aG91cmFpcmFrdVwgOwor6Imm56Cy5bCE5pKDID4ga2FucG91c2hhZ2VraVwgOwor6Zai5pWw6Kej5p6QID4ga2Fuc3V1a2Fpc2VraVwgOwor6YCa5L+h6Kyb5bqnID4gdHN1dXNoaW5rb3V6YVwgOwor5aSW6LKo542y5b6XID4gZ2Fpa2FrYWt1dG9rdVwgOwor5b+D5oK45piC6YCyID4gc2hpbmtpa291c2hpblwgOwor6Zu75rCX5rq25o6lID4gZGVua2l5b3VzZXRzdVwgOwor5ZCu55mw6IiQ55eUID4gc2VuJyd5b3VzaGlqaVwgOwor5Yq05YON5p2h5Lu2ID4gcm91ZG91am91a2VuXCA7CivlpJblm73oiKrot68gPiBnYWlrb2t1a291cm9cIDsKK+S8nemAgemAn+W6piA+IGRlbnNvdXNva3Vkb1wgOwor5LiA5pys6Kq/5a2QID4gaXBwb25kam91c2hpXCA7CivlopzokL3kuovmlYUgPiB0c3VpcmFrdWppa29cIDsKK+e3mummmeiKseeBqyA+IHNlbmtvdWhhbmFiaVwgOwor5p2x5Lqs6YO95pS/ID4gdG91a3lvdXRvc2VpXCA7Civou43kuovnlKPmpa0gPiBndW5qaXNhbmd5b3VcIDsKK+S7o+eQhueJp+W4qyA+IGRhaXJpYm9rdXNoaVwgOwor5LiJ5Y2B5LiJ5omAID4gc2FuanV1c2Fuc2hvXCA7CivkuIDmrKHnt5rovKogPiBpY2hpamlzZW5yaW5cIDsKK+S+oeagvOWkieWLlSA+IGtha2FrdWhlbmRvdVwgOwor5oKg5oKg6Ieq6YGpID4geXV1eXV1aml0ZWtpXCA7CivlsbHntKvmsLTmmI4gPiBzYW5zaGlzdWltZWlcIDsKK+epuui8uOiyqOeJqSA+IGt1dXl1a2Ftb3RzdVwgOwor6Kaz5YWJ6LOH5rqQID4ga2Fua291c2hpZ2VuXCA7CivoppbopproqIDoqp4gPiBzaGlrYWt1Z2VuZ29cIDsKK+m6u+iWrOW4uOeUqCA+IG1heWFrdWpvdXlvdVwgOwor5pel5pyd6L6e5YW4ID4gbml0Y2hvdWppdGVuXCA7CivlupfpoK3lgrXliLggPiB0ZW50b3VzYWlrZW5cIDsKK+eJiOaoqeaJgOaciSA+IGhhbmtlbnNob3l1dVwgOwor5LiA5rOK6KGM6LuNID4gaXBwYWt1a291Z3VuXCA7CivpnZLnqbrluILloLQgPiBhb3pvcmFzaGlqb3VcIDsKK+mWi+elqOe1kOaenCA+IGthaWh5b3VrZWtrYVwgOwor5Y2Y54us6Kyb5ZKMID4gdGFuZG9rdWtvdXdhXCA7Civov5Hku6Pnp5HlraYgPiBraW5kYWlrYWdha3VcIDsKK+eEoeelnuirluiAhSA+IG11c2hpbnJvbnNoYVwgOwor5pyJ5b2i6LKh55SjID4geXV1a2VpemFpc2FuXCA7CivmsrPlsrjmrrXkuJggPiBrYWdhbmRhbmt5dXVcIDsKK+WkqumZveWFiee3miA+IHRhaXlvdWtvdXNlblwgOwor5YSE5LiH6ZW36ICFID4gb2t1bWFuY2hvdWphXCA7CivljJbnsqfnn7PpubggPiBrZXNob3VzZWtrZW5cIDsKK+iogOiqnueZguazlSA+IGdlbmdvcnlvdWhvdVwgOwor5a6J5a6a5oiQ6ZW3ID4gYW50ZWlzZWljaG91XCA7CivnpZ7mqKnmlL/msrsgPiBzaGlua2Vuc2VpamlcIDsKK+iHs+S4iuWRveS7pCA+IHNoaWpvdW1laXJlaVwgOwor6Z+z5qW9576O5a2mID4gb25nYWt1YmlnYWt1XCA7CivlirTlg43lpKfoh6MgPiByb3Vkb3VkYWlqaW5cIDsKK+mZjeagvOS6uuS6iyA+IGtvdWtha3VqaW5qaVwgOwor56qS57Sg6IKl5paZID4gY2hpc3NvaGlyeW91XCA7Civou43pg6jni6zoo4EgPiBndW5idWRva3VzYWlcIDsKK+WFrOWLmeeWvueXhSA+IGtvdW11c2hpcHBlaVwgOwor6Iqx54Gr5aSn5LyaID4gaGFuYWJpdGFpa2FpXCA7CivooYzpm7LmtYHmsLQgPiBrb3V1bnJ5dXVzdWlcIDsKK+WPjeWvvuioiuWVjyA+IGhhbnRhaWppbm1vblwgOwor5pa55ZCR6Lui5o+bID4gaG91a291dGVua2FuXCA7CivnhKHnt5rmioDooZMgPiBtdXNlbmdpanV0c3VcIDsKK+iJruS4i+iJruS4iiA+IGdvbmthZ29uc2hvdVwgOwor5pyq5p2l5a6M5LqGID4gbWlyYWlrYW5yeW91XCA7CivliY3pgLLpg6jpmoogPiB6ZW5zaGluYnV0YWlcIDsKK+aXoue0hOWIhuaVsCA+IGtpeWFrdWJ1bnN1dVwgOwor5YWs5Za25L2P5a6FID4ga291ZWlqdXV0YWt1XCA7Civnm6Pmn7vloLHlkYogPiBrYW5zYWhvdWtva3VcIDsKK+aciOe1jOWRqOacnyA+IGdla2tlaXNodXVraVwgOwor56eR5a2m6ZuR6KqMID4ga2FnYWt1emFzc2hpXCA7CivpgJrosqjntbHlkIggPiB0c3V1a2F0b3Vnb3VcIDsKK+WvvuWcsOmAn+W6piA+IHRhaWNoaXNva3Vkb1wgOwor5a6Y5YOa5Li7576pID4ga2FucnlvdXNodWdpXCA7CivlvqHoqr/lrZDogIUgPiBvY2hvdXNoaW1vbm9cIDsKK+S6jOi2s+S4ieaWhyA+IG5pc29rdXNhbm1vblwgOwor6YW45oCn6IKl5paZID4gc2Fuc2VpaGlyeW91XCA7CivoqIDmlofkuIDoh7QgPiBnZW5idW4nJ2l0Y2hpXCA7CivlhbHlkIznrqHnkIYgPiBreW91ZG91a2FucmlcIDsKK+a1t+WkluaXheihjCA+IGthaWdhaXJ5b2tvdVwgOwor5LiN5a+p5bCL5ZWPID4gZnVzaGluamlubW9uXCA7Civosqzku7vou6Llq4EgPiBzZWtpbmludGVua2FcIDsKK+mVt+acn+aJi+W9oiA+IGNob3VraXRlZ2F0YVwgOwor57Wm5LiO5rC05rqWID4ga3l1dXlvc3VpanVuXCA7CivlsJHmlbDnsr7pi60gPiBzaG91c3V1c2VpZWlcIDsKK+i7ouaPm+ekvuWCtSA+IHRlbmthbnNoYXNhaVwgOwor5rK/5bK45ryB5qWtID4gZW5nYW5neW9neW91XCA7CivkuqTpmpvnpL7kvJogPiBrb3VzYWlzaGFrYWlcIDsKK+WItumZkOS6i+mghSA+IHNlaWdlbmppa29rdVwgOwor5YiR5LqL6LKs5Lu7ID4ga2VpamlzZWtpbmluXCA7Civmt7flkIjngavolqwgPiBrb25nb3VrYXlha3VcIDsKK+WPjOWLmeWlkee0hCA+IHNvdW11a2VpeWFrdVwgOwor5Y+k5YW45a2m6ICFID4ga290ZW5nYWt1c2hhXCA7CivnlJ/mtLvmibbliqkgPiBzZWlrYXRzdWZ1am9cIDsKK+eUqOebiueJqeaoqSA+IHlvdWVraWJ1a2tlblwgOwor5Ye65Yuk5pmC6ZaTID4gc2h1a2tpbmppa2FuXCA7Civnm7jplqLkv4LmlbAgPiBzb3VrYW5rZWlzdXVcIDsKK+ekvuS8muS/nemanCA+IHNoYWthaWhvc2hvdVwgOwor5Y2U5ZCM5YuV5L2cID4ga3lvdWRvdWRvdXNhXCA7Civmg4Xnt5LnupLntr8gPiBqb3VjaG90ZW5tZW5cIDsKK+eri+aGsuWQm+S4uyA+IHJpa2tlbmt1bnNodVwgOwor5peF5Yi45p+76Ki8ID4gcnlva2Vuc2FzaG91XCA7CivokL3oirHni7zol4kgPiByYWtrYXJvdXpla2lcIDsKK+WMluWtpuijveWTgSA+IGthZ2FrdXNlaWhpblwgOwor6YGp5oCn5qSc5p+7ID4gdGVraXNlaWtlbnNhXCA7CivnlJ/lkb3np5HlraYgPiBzZWltZWlrYWdha3VcIDsKK+W3peS9nOapn+aisCA+IGtvdXNha3VraWthaVwgOwor5Zuz5pu46aSo5a2mID4gdG9zaG9rYW5nYWt1XCA7Civkurrlj6PllY/poYwgPiBqaW5rb3Vtb25kYWlcIDsKK+W+oeeUqOWtpuiAhSA+IGdveW91Z2FrdXNoYVwgOwor5rCX5Zyn6YWN572uID4ga2lhdHN1aGFpY2hpXCA7CivmmYLpmZDniIblvL4gPiBqaWdlbmJha3VkYW5cIDsKK+iHqueEtuWvvuaVsCA+IHNoaXplbnRhaXN1dVwgOwor5aSc6ZaT5pKu5b2xID4geWFrYW5zYXRzdWVpXCA7CivnpZ7ntYznuYrntq0gPiBzaGlua2Vpc2VuJydpXCA7CivmtYHli5XosqDlgrUgPiByeXV1ZG91ZnVzYWlcIDsKK+acgOmrmOiomOmMsiA+IHNhaWtvdWtpcm9rdVwgOwor5paw6KaP5LqL5qWtID4gc2hpbmtpamlneW91XCA7Civlp5PlkI3liKTmlq0gPiBzZWltZWloYW5kYW5cIDsKK+WPjeWvvue1puS7mCA+IGhhbnRhaWt5dXVmdVwgOwor5pWX5oim5oqV5omLID4gaGFpc2VudG91c2h1XCA7CivmrabmvKLkuInpjq4gPiBidWthbnNhbmNoaW5cIDsKK+S4gOacneS4gOWklSA+IGl0Y2hvdWlzc2VraVwgOwor5a625YaF5bel5qWtID4ga2FuYWlrb3VneW91XCA7CivmtYXlraboj7LmiY0gPiBzZW5nYWt1aGlzYWlcIDsKK+a3t+WQiOe1jOa4iCA+IGtvbmdvdWtlaXphaVwgOwor5biC5rCR5Zuj5L2TID4gc2hpbWluZGFudGFpXCA7CivkvIHmpa3pgKPlkIggPiBraWd5b3VyZW5nb3VcIDsKK+aZguS7o+aEn+immiA+IGppZGFpa2Fua2FrdVwgOwor5YWx5ZCM5Zug5a2QID4ga3lvdWRvdWluc2hpXCA7CivkuIDmhI/lsILlv4MgPiBpY2hpaXNlbnNoaW5cIDsKK+asp+exs+iruOWbvSA+IG91YmVpc2hva29rdVwgOwor6Z2p5ZG96YGL5YuVID4ga2FrdW1laXVuZG91XCA7CivntJTnsovln7nppIogPiBqdW5zdWliYWl5b3VcIDsKK+WGjeS4ieWGjeWbmyA+IHNhaXNhbnNhaXNoaVwgOwor5b2i6ICM5LiK5a2mID4ga2Vpamlqb3VnYWt1XCA7CivlnLDmlrnlm6PkvZMgPiBjaGlob3VkYW50YWlcIDsKK+WFrOawkeWtpuagoSA+IGtvdW1pbmdha2tvdVwgOwor5L6h5qC857Wx5Yi2ID4ga2FrYWt1dG91c2VpXCA7CivmhI/ljKDnmbvpjLIgPiBpc2hvdXRvdXJva3VcIDsKK+WPl+WLleWWq+eFmSA+IGp1ZG91a2l0c3VlblwgOwor6KO957y25bel5aC0ID4gc2Vpa2Fua291am91XCA7Civlm7rlvaLnh4PmlpkgPiBrb2tlaW5lbnJ5b3VcIDsKK+mDteS+v+eCuuabvyA+IHl1dWJpbmthd2FzZVwgOwor5Y+j6aCt5byB6KuWID4ga291dG91YmVucm9uXCA7Civnq4vkvZPljJblraYgPiByaXR0YWlrYWdha3VcIDsKK+WTgeihjOaWueatoyA+IGhpbmtvdWhvdXNlaVwgOwor6LKp5aOy5L6h5qC8ID4gaGFuYmFpa2FrYWt1XCA7CivmgYvmhJvntZDlqZogPiByZW4nJ2Fpa2Vra29uXCA7CivljJfnsbPlnJ/kurogPiBob2t1YmVpZG9qaW5cIDsKK+iHqOa1t+WtpuagoSA+IHJpbmthaWdha2tvdVwgOwor5LiA6Kqe5LiA6KqeID4gaWNoaWdvaWNoaWdvXCA7CivljYrlrpjljYrmsJEgPiBoYW5rYW5oYW5taW5cIDsKK+Wkp+WbveS4u+e+qSA+IHRhaWtva3VzaHVnaVwgOwor5rSL5pyN566q56ylID4geW91ZnVrdWRhbnN1XCA7CivkuIDmlrnpgJrooYwgPiBpcHBvdXRzdXVrb3VcIDsKK+WPguiAg+aWh+eMriA+IHNhbmtvdWJ1bmtlblwgOwor5L+h5Luw566H5p2hID4gc2hpbmtvdWtham91XCA7CivmsJHplpPos4fmnKwgPiBtaW5rYW5zaGlob25cIDsKK+S4gOaxgeS4gOiPnCA+IGljaGlqdXVpc3NhaVwgOwor5Y2B56iu56u25oqAID4gamlzc2h1a3lvdWdpXCA7CivlubPlkozlhbHlrZggPiBoZWl3YWt5b3V6b25cIDsKK+WNmOe3mumBi+i7oiA+IHRhbnNlbicndW50ZW5cIDsKK+S6i+W+jOaJv+irviA+IGppZ29zaG91ZGFrdVwgOwor5pig5YOP5L+h5Y+3ID4gZWl6b3VzaGluZ291XCA7Civlronlhajlr77nrZYgPiBhbnplbnRhaXNha3VcIDsKK+eUn+eUo+e1hOWQiCA+IHNlaXNhbmt1bWlhaVwgOwor5bGF5L2P5rC05rqWID4ga3lvanV1c3VpanVuXCA7CivnrpfnlKjmlbDlrZcgPiBzYW4nJ3lvdXN1dWppXCA7Civlp4nlprnkvJrnpL4gPiBzaGltYWlnYWlzaGFcIDsKK+mBuOaMmeWFrOWgsSA+IHNlbmt5b2tvdWhvdVwgOwor5LuP5YOP5LqM5bqnID4gYnV0c3V6b3VuaXphXCA7CivoprPlhYnml4XooYwgPiBrYW5rb3VyeW9rb3VcIDsKK+eglOeptuiqsumhjCA+IGtlbmt5dXVrYWRhaVwgOwor6YeR5ou+5LiH5YaGID4ga2luanV1bWFuJydlblwgOwor5bGO5bC/5Yem55CGID4gc2hpbnlvdXNob3JpXCA7CivllYbkuovkvJrnpL4gPiBzaG91amlnYWlzaGFcIDsKK+mbhuWQiOWgtOaJgCA+IHNodXVnb3ViYXNob1wgOwor5b2i5a656Kme5bm5ID4ga2VpeW91c2hpa2FuXCA7CivmnaHku7blj43lsIQgPiBqb3VrZW5oYW5zaGFcIDsKK+S/oeW+kuS8neWLlSA+IHNoaW50b2RlbmRvdVwgOwor5pyJ5paZ6YGT6LevID4geXV1cnlvdWRvdXJvXCA7Civmpa3li5nlpqjlrrMgPiBneW91bXVib3VnYWlcIDsKK+mYv+eJh+S4reavkiA+IGFoZW5jaHV1ZG9rdVwgOwor57Sw6IOe6J6N5ZCIID4gc2FpYm91eXV1Z291XCA7CivlkI3kurrmsJfos6ogPiBtZWlqaW5rYXRhZ2lcIDsKK+mDteaUv+Wkp+iHoyA+IHl1dXNlaWRhaWppblwgOwor5Lq65qip5pOB6K23ID4gamlua2VuJyd5b3Vnb1wgOwor5YWE5byf5Zan5ZipID4ga3lvdWRhaWdlbmthXCA7Civlt6HoiKrpgJ/luqYgPiBqdW5rb3Vzb2t1ZG9cIDsKK+S4gOWknOWkp+iHoyA+IGljaGl5YWRhaWppblwgOwor542F5a2Q5aWu6L+FID4gc2hpc2hpZnVuamluXCA7Civplqjnp4DkvZzlrrYgPiBrZWlzaHV1c2Fra2FcIDsKK+WwgumWgOWtpuagoSA+IHNlbm1vbmdha2tvdVwgOwor5pS56Z2p6YGO56iLID4ga2Fpa2FrdWthdGVpXCA7Civnt4rmgKXmjqrnva4gPiBraW5reXV1c29jaGlcIDsKK+eUu+ernOWkqeedmyA+IGdhcnlvdXRlbnNlaVwgOwor5LiA6YCy5LiA6YCAID4gaXNzaGluJydpdHRhaVwgOwor5a6a5bi454q25oWLID4gdGVpam91am91dGFpXCA7CivmjIfmlbDplqLmlbAgPiBzaGlzdXVrYW5zdXVcIDsKK+ippumok+enkeebriA+IHNoaWtlbmthbW9rdVwgOwor54G95a6z5pWR5YqpID4gc2FpZ2Fpa3l1dWpvXCA7Civlhrbph5HlrabogIUgPiB5YWtpbmdha3VzaGFcIDsKK+WcsOaWuemKgOihjCA+IGNoaWhvdWdpbmtvdVwgOwor57WM5riI55m65bGVID4ga2VpemFpaGF0dGVuXCA7CivnibnmrorlhbXlmaggPiB0b2t1c2h1aGVpa2lcIDsKK+a1t+S4reWFrOWckiA+IGthaWNodXVrb3VlblwgOwor5Zuj5L2T5peF6KGMID4gZGFudGFpcnlva291XCA7CivkuInlj4nnpZ7ntYwgPiBzYW5zYXNoaW5rZWlcIDsKK+assuaxguS4jea6gCA+IHlva2t5dXVmdW1hblwgOwor57WC5aSc5Za25qWtID4gc2h1dXlhZWlneW91XCA7CivlnLDkuIvntYTnuZQgPiBjaGlrYXNvc2hpa2lcIDsKK+iAkOmch+WutuWxiyA+IHRhaXNoaW5rYW9rdVwgOwor5q2j5LiJ6KeS5b2iID4gc2Vpc2Fua2Fra2VpXCA7CivotbDooYzou4rnt5ogPiBzb3Vrb3VzaGFzZW5cIDsKK+epuuawl+iqv+aVtCA+IGt1dWtpY2hvdXNlaVwgOwor6YGL5YuV56We57WMID4gdW5kb3VzaGlua2VpXCA7Civlj5fog47lkYrnn6UgPiBqdXRhaWtva3VjaGlcIDsKK+ino+etlOeUqOe0mSA+IGthaXRvdXlvdXNoaVwgOwor5LiN5omA5a2Y6ICFID4gZnVzaG96b25tb25vXCA7CivliqDlt6XnlKPmpa0gPiBrYWtvdXNhbmd5b3VcIDsKK+imj+agvOWOn+ahiCA+IGtpa2FrdWdlbicnYW5cIDsKK+WSjOmtgua0i+aJjSA+IHdha29uJyd5b3VzYWlcIDsKK+WPjeaIpumBi+WLlSA+IGhhbnNlbicndW5kb3VcIDsKK+iruOihjOeEoeW4uCA+IHNob2d5b3VtdWpvdVwgOwor5aWR57SE5pyf6ZaTID4ga2VpeWFrdWtpa2FuXCA7Civkurrmlofnp5HlraYgPiBqaW5idW5rYWdha3VcIDsKK+S4gOS6uuS4gOS6uiA+IGhpdG9yaWJpdG9yaVwgOwor5Yqx5oyv57Sg5a2QID4gcmVpc2hpbnNvc2hpXCA7Civlroflrpnlt6XlraYgPiB1Y2h1dWtvdWdha3VcIDsKK+S6i+WJjeaXpeS7mCA+IGppemVuaGlkenVrZVwgOwor6Ieq5a625pKe552AID4gamlrYWRvdWNoYWt1XCA7Civnn7PngbDogqXmlpkgPiBzZWtrYWloaXJ5b3VcIDsKK+WFrOebiuWEquWFiCA+IGtvdWVraXl1dXNlblwgOwor5pel6LGK5pys57eaID4gbmlwcG91aG9uc2VuXCA7Civnn7PmsrnljJblraYgPiBzZWtpeXVrYWdha3VcIDsKK+ebuOWvvumAn+W6piA+IHNvdXRhaXNva3Vkb1wgOwor6buS5a2X5YCS55SjID4ga3Vyb2ppdG91c2FuXCA7CivlhoXmhoLlpJbmgqMgPiBuYWl5dXVnYWlrYW5cIDsKK+mWouaVsOepuumWkyA+IGthbnN1dWt1dWthblwgOwor5LuY5bGe55eF6ZmiID4gZnV6b2t1YnlvdWluXCA7Civoh6jluorljLvlraYgPiByaW5zaG91aWdha3VcIDsKK+exs+a1t+WFtemaiiA+IGJlaWthaWhlaXRhaVwgOwor5oux5omL5YKN6KazID4ga291c2h1Ym91a2FuXCA7CivpoIbms5Xpl5jkuokgPiBqdW5wb3V0b3Vzb3VcIDsKK+aIpumXmOmZo+WcsCA+IHNlbnRvdWppbmNoaVwgOwor5LiA5oyZ5LiA5YuVID4gaWtreW9pY2hpZG91XCA7CivlqIHlmoflsITmkoMgPiBpa2FrdXNoYWdla2lcIDsKK+Wun+WcsOippumokyA+IGppdGNoaXNoaWtlblwgOwor5Lit6ZaT5pmv5rCXID4gY2h1dWthbmtlaWtpXCA7Civlj7jmlZnmqKnluqcgPiBzaGlreW91a2VuemFcIDsKK+WkieabtOWxpeattCA+IGhlbmtvdXJpcmVraVwgOwor6YCj5oim6YCj5pWXID4gcmVuc2VucmVucGFpXCA7Civmra/mp73ohr/mvI8gPiBzaGlzb3Vub3Vyb3VcIDsKK+e0oOeykuWtkOirliA+IHNvcnl1dXNoaXJvblwgOwor6KGb5pif5Lit57aZID4gZWlzZWljaHV1a2VpXCA7CivlnKflu7blt6XloLQgPiBhdHN1ZW5rb3Vqb3VcIDsKK+WIhuWoqeiHpeW6iiA+IGJ1bmJlbmdhc2hvdVwgOwor5Lq66YCg57W557O4ID4gamluem91a2Vuc2hpXCA7Civnl5Xot6HlmajlrpggPiBrb25zZWtpa2lrYW5cIDsKK+ibjeWFieWhl+aWmSA+IGtlaWtvdXRvcnlvdVwgOwor5YWs5Yik6Kq/5p+7ID4ga291aGFuY2hvdXNhXCA7CivpgKPntaHkvJrorbAgPiByZW5yYWt1a2FpZ2lcIDsKK+WFrOaVmeimgeeQhiA+IGtvdWt5b3V5b3VyaVwgOwor6aqo6JGj5ZOB5bqXID4ga290dG91aGludGVuXCA7CivljYHkuozmjIfohbggPiBqdXVuaXNoaWNob3VcIDsKK+iyoeaUv+WVj+mhjCA+IHphaXNlaW1vbmRhaVwgOwor6KiA6Kqe5a2m6ICFID4gZ2VuZ29nYWt1c2hhXCA7Civph5Hono3mqZ/plqIgPiBraW4nJ3l1dWtpa2FuXCA7CivnlLDlnJLoqankurogPiBkZW4nJ2Vuc2hpamluXCA7CivnrYnmr5TntJrmlbAgPiB0b3VoaWt5dXVzdXVcIDsKK+mBk+WMluW9ueiAhSA+IGRvdWtleWFrdXNoYVwgOwor5rSl5rSl5rWm5rWmID4gdHN1ZHp1dXJhdXJhXCA7Civkub7nh6XlnLDluK8gPiBrYW5zb3VjaGl0YWlcIDsKK+mfs+evgOS4u+mfsyA+IG9uc2V0c3VzaHVvblwgOwor6Iiq5rW35pel6KqMID4ga291a2Fpbmlzc2hpXCA7CivljYrlsIHlu7rmgKcgPiBoYW5ob3VrZW5zZWlcIDsKK+aBi+aEm+mWouS/giA+IHJlbicnYWlrYW5rZWlcIDsKK+aIkOmVt+mBjueoiyA+IHNlaWNob3VrYXRlaVwgOwor6YCj5biv5L+d6Ki8ID4gcmVudGFpaG9zaG91XCA7Civlv4Poh5PogqXlpKcgPiBzaGluem91aGlkYWlcIDsKK+WkqeWjjOeEoeeqriA+IHRlbmpvdW11a3l1dVwgOwor5YWo6Lqr6bq76YWUID4gemVuc2hpbm1hc3VpXCA7Civlm57nt5rkuqTmj5sgPiBrYWlzZW5rb3VrYW5cIDsKK+i8uOWFpeWItumZkCA+IHl1bnl1dXNlaWdlblwgOwor5qeL6YCg5LiN5rOBID4ga291em91ZnVreW91XCA7Civoh6rlt7HlhbHlvbkgPiBqaWtva3lvdXlha3VcIDsKK+ani+aIkOWIhuWtkCA+IGtvdXNlaWJ1bnNoaVwgOwor5biC5aC05bGV6ZaLID4gc2hpam91dGVua2FpXCA7CivlupfpoK3osqnlo7IgPiB0ZW50b3VoYW5iYWlcIDsKK+WQiOWUsemaiuWToSA+IGdhc3Nob3V0YWlpblwgOwor57WM6LK75YmK5ribID4ga2VpaGlzYWt1Z2VuXCA7CivmlofoirjlvqnoiIggPiBidW5nZWlmdWtrb3VcIDsKK+eSsOWkquW5s+a0iyA+IGthbnRhaWhlaXlvdVwgOwor5ZCN576p5pu45o+bID4gbWVpZ2lrYWtpa2FlXCA7Civph43lpKfllY/poYwgPiBqdXVkYWltb25kYWlcIDsKK+mdnuenkeWtpueahCA+IGhpa2FnYWt1dGVraVwgOwor6ZmQ5a6a5oim5LqJID4gZ2VudGVpc2Vuc291XCA7CivkuI3lnKjoqLzmmI4gPiBmdXphaXNob3VtZWlcIDsKK+WMu+WtpuWNmuWjqyA+IGlnYWt1aGFrdXNoaVwgOwor5qGI5YaF5pu45ZGIID4gYW4nJ25haXNob3RlaVwgOwor5bCC5Yi25ZCb5Li7ID4gc2Vuc2Vpa3Vuc2h1XCA7Civli6Tli5nlrp/nuL4gPiBraW5tdWppc3Nla2lcIDsKK+apn+WvhuS6i+mghSA+IGtpbWl0c3VqaWtvdVwgOwor5pep5pyf6Ki65patID4gc291a2lzaGluZGFuXCA7CivlgZzmraLkvqHmoLwgPiB0ZWlzaGlrYWtha3VcIDsKK+iomOaGtuWuuemHjyA+IGtpb2t1eW91cnlvdVwgOwor5Ye655Sf6YGO5YmwID4gc2h1c3NlaWtham91XCA7CivlvJXpgIDoiIjooYwgPiBpbnRhaWtvdWd5b3VcIDsKK+S4ieWRs+e3muW8viA+IHNoYW1pc2VuaGlraVwgOwor6Kmm6aiT5q616ZqOID4gc2hpa2VuZGFua2FpXCA7Civou43kuovku4vlhaUgPiBndW5qaWthaW55dXVcIDsKK+aUv+ayu+mBk+W+syA+IHNlaWppZG91dG9rdVwgOwor5Zu95Za25LyB5qWtID4ga29rdWVpa2lneW91XCA7CivluLDlt6PmnKzog70gPiBraXNvdWhvbicnbm91XCA7CivkuKHmgKflhbfmnIkgPiByeW91c2VpZ3V5dXVcIDsKK+m7hOmHkeS4h+iDvSA+IG91Z29uYmFuJydub3VcIDsKK+aLheW9k+iqsumVtyA+IHRhbnRvdWthY2hvdVwgOwor5re35oiQ56u25oqAID4ga29uc2Vpa3lvdWdpXCA7CivlirTlg43mlLvli6IgPiByb3Vkb3Vrb3VzZWlcIDsKK+mWkeipseS8kemhjCA+IGthbndha3l1dWRhaVwgOwor5b255YuZ6LOg5YSfID4gZWtpbXViYWlzaG91XCA7CivlubPlkoznlKPmpa0gPiBoZWl3YXNhbmd5b3VcIDsKK+WNsOixoeaJueiplSA+IGluc2hvdWhpaHlvdVwgOwor5YGc5rue5YmN57eaID4gdGVpdGFpemVuc2VuXCA7CivmsJHplpPmlL7pgIEgPiBtaW5rYW5ob3Vzb3VcIDsKK+WxnuWcsOS4u+e+qSA+IHpva3VjaGlzaHVnaVwgOwor5Ye654mI6YOo5pWwID4gc2h1cHBhbmJ1c3V1XCA7Civoh6rli5XkurrlvaIgPiBqaWRvdW5pbmd5b3VcIDsKK+aEj+W/l+iWhOW8sSA+IGlzaGloYWt1amFrdVwgOwor5b+D55CG5oim5LqJID4gc2hpbnJpc2Vuc291XCA7CivoqrLnqI7miYDlvpcgPiBrYXplaXNob3Rva3VcIDsKK+a1geihjOS9nOWutiA+IHJ5dXVrb3VzYWtrYVwgOwor5qC55rCX5LuV5LqLID4ga29ua2lzaGlnb3RvXCA7Civou73niq/nvarms5UgPiBrZWloYW56YWlob3VcIDsKK+aPo+aRqeaGtua4rCA+IHNoaW1hb2t1c29rdVwgOwor5pS55L+u5bel5LqLID4ga2Fpc2h1dWtvdWppXCA7Civlr77mipfmhI/orZggPiB0YWlrb3Vpc2hpa2lcIDsKK+mBk+i3r+S6pOmAmiA+IGRvdXJva291dHN1dVwgOwor5rOV5bu35L6u6L6xID4gaG91dGVpYnVqb2t1XCA7CivlhYnlrabmqZ/morAgPiBrb3VnYWt1a2lrYWlcIDsKK+iEseWtl+iomOWPtyA+IGRhdHN1amlraWdvdVwgOwor5YWs5pyJ5rC06Z2iID4ga291eXV1c3VpbWVuXCA7CivpmbDmgKflj43lv5wgPiBpbnNlaWhhbicnbm91XCA7CivlnYfooaHntYzmuIggPiBraW5rb3VrZWl6YWlcIDsKK+iYreagveWfueazlSA+IHJhbnNhaWJhaWhvdVwgOwor5q2m6KOF6ZuG5ZujID4gYnVzb3VzaHV1ZGFuXCA7CivljbDpkZHoqLzmmI4gPiBpbmthbnNob3VtZWlcIDsKK+Wfn+WGheiyv+aYkyA+IGlraW5haWJvdWVraVwgOwor5L2/5b6S6KGM5LydID4gc2hpdG9neW91ZGVuXCA7CivkvbPkurroloTlkb0gPiBrYWppbmhha3VtZWlcIDsKK+acieS9k+izh+eUoyA+IHl1dXRhaXNoaXNhblwgOwor5a++5rOw6Zai5L+CID4gdGFpdGFpa2Fua2VpXCA7CivmrKflt57pgKPlkIggPiBvdXNodXVyZW5nb3VcIDsKK+Wls+WtkOWtpueUnyA+IGpvc2hpZ2FrdXNlaVwgOwor5Y2Y57SU5bmz5Z2HID4gdGFuanVuaGVpa2luXCA7Civlho3luqbnorroqo0gPiBzYWlkb2tha3VuaW5cIDsKK+msvOmdouS8neW/gyA+IGtpbWVuZGVuc2hpblwgOwor6LK/5piT6buS5a2XID4gYm91ZWtpa3Vyb2ppXCA7CivntYTlkIjlk6HoqLwgPiBrdW1pYWlpbnNob3VcIDsKK+eGn+afv+S4u+e+qSA+IGp1a3VzaGlzaHVnaVwgOwor5Ya35oi/6KOF572uID4gcmVpYm91c291Y2hpXCA7Civnj77lnLDnlJ/nlKMgPiBnZW5jaGlzZWlzYW5cIDsKK+aWsOiBnuiomOiAhSA+IHNoaW5idW5raXNoYVwgOwor5aSn5bGx6bO05YuVID4gdGFpemFubWVpZG91XCA7Civms6LnirbmlLvmkoMgPiBoYWpvdWtvdWdla2lcIDsKK+WNmOiomOaKleelqCA+IHRhbmtpdG91aHlvdVwgOwor5LiA5qyh6Zai5pWwID4gaWNoaWppa2Fuc3V1XCA7CivlubzlvaLpgLLljJYgPiB5b3VrZWlzaGlua2FcIDsKK+mdkueJqeW4guWgtCA+IGFvbW9ub2ljaGliYVwgOwor5a2m55Sf6YGL5YuVID4gZ2FrdXNlaXVuZG91XCA7CivloLHlvqnmjqrnva4gPiBob3VmdWt1c29jaGlcIDsKK+WbnuW+qeWPr+iDvSA+IGthaWZ1a3VrYW5vdVwgOwor5q2j6KeS5a6a5pyoID4gc2Vpa2FrdWpvdWdpXCA7CivmrbTlj7LlnLDnkIYgPiByZWtpc2hpY2hpcmlcIDsKK+W5tOS4reeEoeS8kSA+IG5lbmp1dW11a3l1dVwgOwor55S756uc54K5552bID4gZ2FyeW91dGVuc2VpXCA7Civku6PmlbDnmoTlkowgPiBkYWlzdXV0ZWtpd2FcIDsKK+W3puWPs+ebuOensCA+IHNheXV1c291c2hvdVwgOwor5bid5Zu95Li7576pID4gdGVpa29rdXNodWdpXCA7Civopb/mtIvmnb7pnLIgPiBzZWl5b3VzaG91cm9cIDsKK+Wbnui7ouWLmOWumiA+IGthaXRlbmthbmpvdVwgOwor5L6d6KiX5bCE5pKDID4gaXRha3VzaGFnZWtpXCA7CivmraPopo/ooajnj74gPiBzZWlraWh5b3VnZW5cIDsKK+e3j+mgmOS6i+mkqCA+IHNvdXJ5b3VqaWthblwgOwor55uX6Zuj6Ziy5q2iID4gdG91bmFuYm91c2hpXCA7Civmu4Xnp4HlpYnlhawgPiBtZXNzaGlob3Vrb3VcIDsKK+e3j+WQiOenkeWtpiA+IHNvdWdvdWthZ2FrdVwgOwor5ouY5p2f5pmC6ZaTID4ga291c29rdWppa2FuXCA7Civlm5vmlrnlhavmlrkgPiBzaGlob3VoYXBwb3VcIDsKK+S4u+imgeiruOWFgyA+IHNodXlvdXNob2dlblwgOwor5Y2B5YiG5p2h5Lu2ID4ganV1YnVuam91a2VuXCA7CivmmYLku6PmgJ3mva4gPiBqaWRhaXNoaWNob3VcIDsKK+S7o+eQhuaKleelqCA+IGRhaXJpdG91aHlvdVwgOwor5Y+k5YW46Z+z5qW9ID4ga290ZW4nJ29uZ2FrdVwgOwor6YqA6KGM5by355uXID4gZ2lua291Z291dG91XCA7CivotbfniIboo4Xnva4gPiBraWJha3Vzb3VjaGlcIDsKK+mAruaNleioseirviA+IHRhaWhva3lvZGFrdVwgOwor5q2v54mZ55a+5oKjID4gc2hpZ2FzaGlra2FuXCA7CivlhbHlkIznpZbnlYwgPiBreW91ZG91c29rYWlcIDsKK+ayueaWreWkp+aVtSA+IHl1ZGFudGFpdGVraVwgOwor5bCC5qWt6L6y5a62ID4gc2VuZ3lvdW5vdWthXCA7CivnhrHlj6/loZHmgKcgPiBuZXRzdWthc29zZWlcIDsKK+W4guacieiyoeeUoyA+IHNoaXl1dXphaXNhblwgOwor5Zu95a626LOg5YSfID4ga29ra2FiYWlzaG91XCA7CivpnZnmhYvnt4/oqIggPiBzZWl0YWlzb3VrZWlcIDsKK+WwgumWgOmbkeiqjCA+IHNlbm1vbnphc3NoaVwgOwor5by+5Li45YiX6LuKID4gZGFuZ2FucmVzc2hhXCA7CivlpKfmraPmmYLku6MgPiB0YWlzaG91amlkYWlcIDsKK+ioreioiOWkieabtCA+IHNla2tlaWhlbmtvdVwgOwor5LqG6Kej5LqL6aCFID4gcnlvdWthaWppa291XCA7Civlrp/pqJPmrrXpmo4gPiBqaWtrZW5kYW5rYWlcIDsKK+WumOWDmuaUv+ayuyA+IGthbnJ5b3VzZWlqaVwgOwor5Lq656iu5ZWP6aGMID4gamluc2h1bW9uZGFpXCA7CivmvJTnv5LllY/poYwgPiBlbnNodXVtb25kYWlcIDsKK+WKtOWDjee1hOWQiCA+IHJvdWRvdWt1bWlhaVwgOwor6YaH6aKo576O5L+XID4ganVucHV1Yml6b2t1XCA7CivpgKDlj43mnInnkIYgPiB6b3VoYW4nJ3l1dXJpXCA7CivmtojosrvmgKflkJEgPiBzaG91aGlzZWlrb3VcIDsKK+W+oeeUqOaWsOiBniA+IGdveW91c2hpbmJ1blwgOwor5YWs5a6a5L6h5qC8ID4ga291dGVpa2FrYWt1XCA7CivloIbnqY3kvZznlKggPiB0YWlzZWtpc2F5b3VcIDsKK+aUu+WuiOWQjOebnyA+IGtvdXNodWRvdW1laVwgOwor5bel56eR5aSn5a2mID4ga291a2FkYWlnYWt1XCA7CivnpL7lhazpgKPlkIggPiBzaGFrb3VyZW5nb3VcIDsKK+i7jeS6i+aVmee3tCA+IGd1bmppa3lvdXJlblwgOwor5bmz5ZKM5p2h57SEID4gaGVpd2Fqb3V5YWt1XCA7CivnhKHos4fmoLzogIUgPiBtdXNoaWtha3VzaGFcIDsKK+ebuOauuumWoueojiA+IHNvdXNhaWthbnplaVwgOwor5Y2z5pmC5YGc5oimID4gc29rdWppdGVpc2VuXCA7CivmuKzlnLDooZvmmJ8gPiBzb2t1Y2hpZWlzZWlcIDsKK+epuuS4rea1rumBiiA+IGt1dWNodXVmdXl1dVwgOwor5L+h55So6KmQ5qy6ID4gc2hpbicneW91c2FnaVwgOwor5piO55y455qT5q2vID4gbWVpYm91a291c2hpXCA7CivkuIrnrYnlhbXmm7kgPiBqb3V0b3VoZWlzb3VcIDsKK+mHkeWIqeaUv+etliA+IGtpbnJpc2Vpc2FrdVwgOwor6I2J5qC55pyo55quID4gc291a29ubW9rdWhpXCA7CivlirTlg43ngb3lrrMgPiByb3Vkb3VzYWlnYWlcIDsKK+aOqOWumuW5tOm9oiA+IHN1aXRlaW5lbnJlaVwgOwor5pel5pys5paH5a2mID4gbmlob25idW5nYWt1XCA7Civlrp/pqJPnp5HlraYgPiBqaWtrZW5rYWdha3VcIDsKK+WNsemZuuS/oeWPtyA+IGtpa2Vuc2hpbmdvdVwgOwor6KW/5qyn6Ku45Zu9ID4gc2Vpb3VzaG9rb2t1XCA7CivlpJzplpPllrbmpa0gPiB5YWthbicnZWlneW91XCA7Civkvb/lvpLmib/kvJ0gPiBzaGl0b3Nob3VkZW5cIDsKK+WbveWutuS4u+W4rSA+IGtva2thc2h1c2VraVwgOwor6Zuq6KaL54Gv57GgID4geXVraW1pZG91cm91XCA7CivkuLvluK3liKTkuosgPiBzaHVzZWtpaGFuamlcIDsKK+WumOijveiRieabuCA+IGthbnNlaWhhZ2FraVwgOwor5Lyd6KiY5paH5a2mID4gZGVua2lidW5nYWt1XCA7CivliLbli5XmlL7lsIQgPiBzZWlkb3Vob3VzaGFcIDsKK+azleW+i+ihjOeCuiA+IGhvdXJpdHN1a291aVwgOwor5YWx55Sj5Zu95a62ID4ga3lvdXNhbmtva2thXCA7CivmlZnogrLmqZ/plqIgPiBreW91aWt1a2lrYW5cIDsKK+mdnuW4uOS/oeWPtyA+IGhpam91c2hpbmdvdVwgOwor6Zuq6KaL6Zqc5a2QID4geXVraW1pc2hvdWppXCA7CivmqZ/mp4vmlLnpnakgPiBraWtvdWthaWtha3VcIDsKK+W+oeeOieadk+WtkCA+IG90YW1hamFrdXNoaVwgOwor5pyA57WC57WQ5p6cID4gc2Fpc2h1dWtla2thXCA7CivnibnmgbXplqLnqI4gPiB0b2trZWlrYW56ZWlcIDsKK+WcsOmch+S6iOefpSA+IGppc2hpbicneW9jaGlcIDsKK+WFseWQjOWLn+mHkSA+IGt5b3Vkb3Vib2tpblwgOwor5LqL5YuZ5b2T5bGAID4gamltdXRvdWt5b2t1XCA7CivkuInlj7fpm5HoqowgPiBzYW5nb3V6YXNzaGlcIDsKK+a8j+a0qembu+a1gSA+IHJvdWVpZGVucnl1dVwgOwor5a6j5oim5biD5ZGKID4gc2Vuc2VuZnVrb2t1XCA7CivlhbHnlKPlnLDljLogPiBreW91c2FuY2hpa3VcIDsKK+S7o+eUqOaVmeWToSA+IGRhaXlvdWt5b3VpblwgOwor5LiJ6KeS5a6a6KaPID4gc2Fua2FrdWpvdWdpXCA7Civopb/mtIvlsIbmo4sgPiBzZWl5b3VzaG91Z2lcIDsKK+S/oeWPt+eEoeimliA+IHNoaW5nb3VtdXNoaVwgOwor5Zyf5Zyw5pS56Z2pID4gdG9jaGlrYWlrYWt1XCA7CivngKzmiLjnianluIIgPiBzZXRvbW9ub2ljaGlcIDsKK+WuieWAjeW3nemkhSA+IGFiZWthd2Ftb2NoaVwgOwor5p2x5qyn6Ku45Zu9ID4gdG91b3VzaG9rb2t1XCA7Civot6Hnm67nm7jntpogPiBhdG9tZXNvdXpva3VcIDsKK+S6uuW3peWRvOWQuCA+IGppbmtvdWtva3l1dVwgOwor6Iiq56m66YO15L6/ID4ga291a3V1eXV1YmluXCA7CivkuKbooYzovLjlhaUgPiBoZWlrb3V5dW55dXVcIDsKK+e1jOa4iOagvOW3riA+IGtlaXphaWtha3VzYVwgOwor56S+5Lya6LOH5pysID4gc2hha2Fpc2hpaG9uXCA7CivlpJbkuqTnibnmqKkgPiBnYWlrb3V0b2trZW5cIDsKK+alreWLmeaPkOaQuiA+IGd5b3VtdXRlaWtlaVwgOwor5r2c5Zyo5oSP6K2YID4gc2VuemFpaXNoaWtpXCA7CivliLblvqHoo4Xnva4gPiBzZWlneW9zb3VjaGlcIDsKK+aJgOaJgOaWueaWuSA+IHNob3Nob2hvdWJvdVwgOwor5Zu65L2T54eD5paZID4ga290YWluZW5yeW91XCA7CivpvLvlhYPmgJ3moYggPiBoYW5hbW90b2ppYW5cIDsKK+WPs+aKmOemgeatoiA+IHVzZXRzdWtpbnNoaVwgOwor5Y2D5oCd5LiH6ICDID4gc2Vuc2hpYmFua291XCA7Civkvp3poZjpgIDogbcgPiBpZ2FudGFpc2hva3VcIDsKK+S4iemDqOWQiOWUsSA+IHNhbmJ1Z2Fzc2hvdVwgOwor6KiA6Kqe5Lit5p6iID4gZ2VuZ29jaHV1c3V1XCA7Civnj77ku6PmlofmmI4gPiBnZW5kYWlidW5tZWlcIDsKK+mkiuitt+Wtpue0miA+IHlvdWdvZ2Fra3l1dVwgOwor5Zue6Lui6YGL5YuVID4ga2FpdGVuJyd1bmRvdVwgOwor6YGL6Ly45qWt6ICFID4gdW4nJ3l1Z3lvdXNoYVwgOwor55+z5rK55YWs5ZujID4gc2VraXl1a291ZGFuXCA7CivlsYDpg6jpurvphZQgPiBreW9rdWJ1bWFzdWlcIDsKK+e+qeWkquWkq+evgCA+IGdpZGF5dXVidXNoaVwgOwor6YeR5bGe5Yqg5belID4ga2luem9rdWtha291XCA7CivmgqrmgKfohavnmI0gPiBha3VzZWlzaHV5b3VcIDsKK+mmrOm5v+ato+ebtCA+IGJha2FzaG91amlraVwgOwor5ZCI5byB5Lya56S+ID4gZ291YmVuZ2Fpc2hhXCA7Civlhaznm4rkuovmpa0gPiBrb3Vla2lqaWd5b3VcIDsKK+S/oeWPt+mbu+azoiA+IHNoaW5nb3VkZW5wYVwgOwor5rSl44CF5rWm44CFID4gdHN1ZHp1dXJhdXJhXCA7CivlhoXovKrlkIzlv5cgPiB1Y2hpd2Fkb3VzaGlcIDsKK+ekvuS8muS6i+alrSA+IHNoYWthaWppZ3lvdVwgOwor6Zu257Sw5LyB5qWtID4gcmVpc2Fpa2lneW91XCA7Civlm73lrprlhazlnJIgPiBrb2t1dGVpa291ZW5cIDsKK+W/nOWKm+W+hOi3ryA+IG91cnlva3VrZWlyb1wgOwor5o6n6Ki05qOE5Y20ID4ga291c29raWt5YWt1XCA7CivpgJrli6TlrprmnJ8gPiB0c3V1a2ludGVpa2lcIDsKK+attOWPsuWcsOWbsyA+IHJla2lzaGljaGl6dVwgOwor6Zu75a2Q6YO15L6/ID4gZGVuc2hpeXV1YmluXCA7Civkurrlt6Xnn6Xog70gPiBqaW5rb3VjaGlub3VcIDsKK+epuuS4reaKleS4iyA+IGt1dWNodXV0b3VrYVwgOwor5qW95aSp5Li7576pID4gcmFrdXRlbnNodWdpXCA7CivmtbflpJbmipXos4cgPiBrYWlnYWl0b3VzaGlcIDsKK+aal+iovOeVquWPtyA+IGFuc2hvdWJhbmdvdVwgOwor5bm06b2i5Yi26ZmQID4gbmVucmVpc2VpZ2VuXCA7CivkvqHmoLzmiKbkuokgPiBrYWtha3VzZW5zb3VcIDsKK+mrmOmAn+W6pumLvCA+IGtvdXNva3Vkb2tvdVwgOwor54Gr5Yqb5pSv5o+0ID4ga2FyeW9rdXNoaWVuXCA7Civpq5jpgJ/pgZPot68gPiBrb3Vzb2t1ZG91cm9cIDsKK+S9v+eUqOemgeatoiA+IHNoaXlvdWtpbnNoaVwgOwor5Yag5ama6JGs56WtID4ga2Fua29uc291c2FpXCA7CivmsLTlubPlsL7nv7wgPiBzdWloZWliaXlva3VcIDsKK+axuuitsOapn+mWoiA+IGtldHN1Z2lraWthblwgOwor6YCj6Y6W5Y+N5b+cID4gcmVuc2FoYW4nJ25vdVwgOwor5biC5rCR56S+5LyaID4gc2hpbWluc2hha2FpXCA7Civpg6jliIbpm4blkIggPiBidWJ1bnNodXVnb3VcIDsKK+Wbm+aNqOS6lOWFpSA+IHNoaXNoYWdvbnl1dVwgOwor5Y+X6KiX5Lya56S+ID4ganV0YWt1Z2Fpc2hhXCA7CivllY/poYzmhI/orZggPiBtb25kYWlpc2hpa2lcIDsKK+mHkeiejeWFrOW6qyA+IGtpbicneXV1a291a29cIDsKK+WPi+mBlOeUsuaWkCA+IHRvbW9kYWNoaWdhaVwgOwor5LiA6Iis5pWZ6aSKID4gaXBwYW5reW91eW91XCA7CivlronlrprmgZDmhYwgPiBhbnRlaWt5b3Vrb3VcIDsKK+awtOe0oOWMlueJqSA+IHN1aXNva2FidXRzdVwgOwor55Kw5aKD5aSJ5YyWID4ga2Fua3lvdWhlbmthXCA7CivkvZPmoLzmpJzmn7sgPiB0YWlrYWt1a2Vuc2FcIDsKK+WMluWtpuWQiOaIkCA+IGthZ2FrdWdvdXNlaVwgOwor5bmz5bmz5Yeh5YehID4gaGVpaGVpYm9uYm9uXCA7CivluILloLTkvqHmoLwgPiBzaGlqb3VrYWtha3VcIDsKK+WWhOmao+mWouS/giA+IHplbnJpbmthbmtlaVwgOwor5ZCI5oiQ5rSX5YmkID4gZ291c2Vpc2VuemFpXCA7CivoprPlv7XkuLvnvqkgPiBrYW4nJ25lbnNodWdpXCA7CivpgJrli6TmmYLplpMgPiB0c3V1a2luamlrYW5cIDsKK+e1jOa4iOS9k+WItiA+IGtlaXphaXRhaXNlaVwgOwor5L2P5omA5rCP5ZCNID4ganV1c2hvc2hpbWVpXCA7Civnlr7poqjmgJLmv6QgPiBzaGlwcHV1ZG90b3VcIDsKK+WMu+eZguadkOaWmSA+IGlyeW91emFpcnlvdVwgOwor5pyJ5qmf6L6y5qWtID4geXV1a2lub3VneW91XCA7CivlpqjlrrPmlL7pgIEgPiBib3VnYWlob3Vzb3VcIDsKK+mHkeWxnuWFg+e0oCA+IGtpbnpva3VnZW5zb1wgOwor5q2v5YaF55mC5rOVID4gc2hpa2FyeW91aG91XCA7CivmgqrmiK/lsI/lg6cgPiBpdGF6dXJha296b3VcIDsKK+WFqOaoqeWkp+S9vyA+IHplbmtlbnRhaXNoaVwgOwor5Y2x5oCl5a2Y5LqhID4ga2lreXV1c29uYm91XCA7CivlroflrpnkuK3ntpkgPiB1Y2h1dWNodXVrZWlcIDsKK+mdnuS6uumWk+eahCA+IGhpbmluZ2VudGVraVwgOwor5Y+X5L+h6KOF572uID4ganVzaGluc291Y2hpXCA7CivmlbDlgKToqIjnrpcgPiBzdXVjaGlrZWlzYW5cIDsKK+eJh+iogOmau+iqniA+IGhlbmdlbnNla2lnb1wgOwor5oeQ5Lit5pmC6KiIID4ga2FpY2h1dWRva2VpXCA7Civnq7bovKrpgbjmiYsgPiBrZWlyaW5zZW5zaHVcIDsKK+aal+WPt+ino+iqrSA+IGFuZ291a2FpZG9rdVwgOwor5Y+N5YuV5oCd5oOzID4gaGFuZG91c2hpc291XCA7Civlrp/oqLzkuLvnvqkgPiBqaXNzaG91c2h1Z2lcIDsKK+aomea6luWBj+W3riA+IGh5b3VqdW5oZW5zYVwgOwor6LOH5rqQ5ZWP6aGMID4gc2hpZ2VubW9uZGFpXCA7CivpgYvpgIHmpa3ogIUgPiB1bnNvdWd5b3VzaGFcIDsKK+ihjOWLleWcsOW4ryA+IGtvdWRvdWNoaXRhaVwgOwor5bmz562J5Li7576pID4gYnlvdWRvdXNodWdpXCA7CivkuqTku6PmipXmiYsgPiBrb3V0YWl0b3VzaHVcIDsKK+WbveWutueLrOWNoCA+IGtva2thZG9rdXNlblwgOwor5Zyf5Zyw5pS56ImvID4gdG9jaGlrYWlyeW91XCA7CivnkrDlooPln7rmupYgPiBrYW5reW91a2lqdW5cIDsKK+WkluS6pOaWh+abuCA+IGdhaWtvdWJ1bnNob1wgOwor6Lu95oyZ5aaE5YuVID4ga2Vpa3lvbW91ZG91XCA7CivpmLLomavliqDlt6UgPiBib3VjaHV1a2Frb3VcIDsKK+S4jeWcqOaKleelqCA+IGZ1emFpdG91aHlvdVwgOwor5auM54WZ6YGL5YuVID4ga2VuJydlbicndW5kb3VcIDsKK+Wwgee3mOiRieabuCA+IGZ1dWthbmhhZ2FraVwgOwor5rOw54S26Ieq6IulID4gdGFpemVuamlqYWt1XCA7CivmlZfljJfkuLvnvqkgPiBoYWlib2t1c2h1Z2lcIDsKK+S+oeagvOaAp+iDvSA+IGtha2FrdXNlaW5vdVwgOwor5pu46aGe6YCB5qScID4gc2hvcnVpc291a2VuXCA7CivkurrmqKnllY/poYwgPiBqaW5rZW5tb25kYWlcIDsKK+S4gOatu+WgseWbvSA+IGlzc2hpaG91a29rdVwgOwor57e06aas5aSn5qC5ID4gbmVyaW1hZGFpa29uXCA7CivkuIDns7jkuIDmr6sgPiBpc3NoaWljaGlnb3VcIDsKK+eJueauiuS6i+aDhSA+IHRva3VzaHVqaWpvdVwgOwor6ICB5bCR5LiN5a6aID4gcm91c2hvdWZ1dGVpXCA7Civnm7jkuZflubPlnYcgPiBzb3Vqb3VoZWlraW5cIDsKK+S4h+W5tOWAmeijnCA+IG1hbicnbmVua291aG9cIDsKK+WuieWFqOaVmeiCsiA+IGFuemVua3lvdWlrdVwgOwor54Sh6LOD5LmX6LuKID4gbXVjaGluam91c2hhXCA7CivniYfli5nlpZHntIQgPiBoZW5tdWtlaXlha3VcIDsKK+S4gOiIrOWkp+ihhiA+IGlwcGFudGFpc2h1dVwgOwor5Y+k5YW45paH5a2mID4ga290ZW5idW5nYWt1XCA7Civpq5jmoKHph47nkIMgPiBrb3Vrb3V5YWt5dXVcIDsKK+S4jeWvqeioiuWVjyA+IGZ1c2hpbmppbm1vblwgOwor5Lit6I+v5paZ55CGID4gY2h1dWthcnlvdXJpXCA7CivlgaXlurfnirbmhYsgPiBrZW5rb3Vqb3V0YWlcIDsKK+m5v+WFkOWztuecjCA+IGthZ29zaGltYWtlblwgOwor5rqW5YKZ54q25rOBID4ganVuYmlqb3VreW91XCA7CivpgbjlpJbkvbPkvZwgPiBzZW5nYWlrYXNha3VcIDsKK+iogOiqnuaVmeiCsiA+IGdlbmdva3lvdWlrdVwgOwor5ZCM5paH5ZCM56iuID4gZG91YnVuZG91c2h1XCA7CivntabkuI7kvZPns7sgPiBreXV1eW90YWlrZWlcIDsKK+m6u+iWrOeKr+e9qiA+IG1heWFrdWhhbnphaVwgOwor5pyd5Luk5pqu5pS5ID4gY2hvdXJlaWJva2FpXCA7CivkupLmgbXmnaHntIQgPiBnb2tlaWpvdXlha3VcIDsKK+S4gOWbveS4gOelqCA+IGlra29rdWlwcHlvdVwgOwor56Cy6Imm5aSW5LqkID4gaG91a2FuZ2Fpa291XCA7CivmtYHooYzoqIDokYkgPiBoYXlhcmlrb3RvYmFcIDsKK+S6pOmAmuapn+mWoiA+IGtvdXRzdXVraWthblwgOwor5rC06YqA6Zu75rGgID4gc3VpZ2luZGVuY2hpXCA7Civov73lloTkvpvppIogPiB0c3VpemVua3V5b3VcIDsKK+S7luWKm+acrOmhmCA+IHRhcmlraWhvbmdhblwgOwor56ym5Y+36Kej6KqtID4gZnVnb3VrYWlkb2t1XCA7Civnn6Xog73mjIfmlbAgPiBjaGlub3VzaGlzdXVcIDsKK+W9k+WWtualreaJgCA+IHRvdWVpZ3lvdXNob1wgOwor6IG35ZOh5Lya6K2wID4gc2hva3VpbmthaWdpXCA7CivoqIDoqp7nibnmnIkgPiBnZW5nb3Rva3V5dXVcIDsKK+acgOWwj+mZkOW6piA+IHNhaXNob3VnZW5kb1wgOwor5p+T5LqV5ZCJ6YeOID4gc29tZWl5b3NoaW5vXCA7Civlrozlhajniq/nvaogPiBrYW56ZW5oYW56YWlcIDsKK+aVmeiCsuWItuW6piA+IGt5b3Vpa3VzZWlkb1wgOwor5oim5Zu95pmC5LujID4gc2VuZ29rdWppZGFpXCA7CivliY3pp4bnl4fnirYgPiB6ZW5rdXNob3Vqb3VcIDsKK+e0q+e2rOikkuizniA+IHNoaWp1aG91c2hvdVwgOwor5LiA6KiA5Y2K5Y+lID4gaWNoaWdvbmhhbmt1XCA7CivkuI3ms5XljaDmnIkgPiBmdWhvdXNlbicneXV1XCA7Civlrrbluq3nkrDlooMgPiBrYXRlaWthbmt5b3VcIDsKK+iInuWPsOebo+edoyA+IGJ1dGFpa2FudG9rdVwgOwor5ZCI5oiQ55qu6Z2pID4gZ291c2VpaGlrYWt1XCA7CivlnKjlroXli6Tli5kgPiB6YWl0YWt1a2lubXVcIDsKK+S4jeWcqOWcsOS4uyA+IGZ1emFpamludXNoaVwgOwor5LiA5a6/5LiA6aOvID4gaXNzaHVrdWlwcGFuXCA7CivogIHkurrnl4XpmaIgPiByb3VqaW5ieW91aW5cIDsKK+eJh+iCuumjm+ihjCA+IGthdGFoYWloaWtvdVwgOwor5a++5r2c5rC06ImmID4gdGFpc2Vuc3Vpa2FuXCA7CivorabmiJLorabloLEgPiBrZWlrYWlrZWlob3VcIDsKK+e0r+epjei1pOWtlyA+IHJ1aXNla2lha2FqaVwgOwor5a625peP5qeL5oiQID4ga2F6b2t1a291c2VpXCA7CivlhoXmn5TlpJbliZsgPiBuYWlqdXVnYWlnb3VcIDsKK+WxnuS6uuS4u+e+qSA+IHpva3VqaW5zaHVnaVwgOwor56Gs6Luf5Lih5rS+ID4ga291bmFucnlvdWhhXCA7CivluqfluK3nlarlj7cgPiB6YXNla2liYW5nb3VcIDsKK+epuuS4rea1ruaPmiA+IGt1dWNodXVmdXlvdVwgOwor5LiB56ia5aWJ5YWsID4gZGV0Y2hpYm91a291XCA7CivkuIDmlrnkuqTpgJogPiBpcHBvdWtvdXRzdXVcIDsKK+S4ieaXpeaciOW9oiA+IG1pa2FkenVraWtlaVwgOwor5qSc5LqL57eP6ZW3ID4ga2Vuamlzb3VjaG91XCA7CivmlrDopo/mipXos4cgPiBzaGlua2l0b3VzaGlcIDsKK+WNmOiqnuaknOe0oiA+IHRhbmdva2Vuc2FrdVwgOwor6Zqg5Yy/54mp6LOHID4gaW50b2t1YnVzc2hpXCA7CivlpbPkurrnpoHliLYgPiBueW9uaW5raW5zZWlcIDsKK+Wkp+S/rumBk+mZoiA+IGRhaXNodXVkb3VpblwgOwor5qOu5p6X5YWs5ZySID4gc2hpbnJpbmtvdWVuXCA7Civlj5fpqJPos4fmoLwgPiBqdWtlbnNoaWtha3VcIDsKK+Wkp+WSjOiogOiRiSA+IHlhbWF0b2tvdG9iYVwgOwor5YSA5byP5Li7576pID4gZ2lzaGlraXNodWdpXCA7CivpgKDlsbHpgYvli5UgPiB6b3V6YW4nJ3VuZG91XCA7CivkuIDoiKzmlZnogrIgPiBpcHBhbmt5b3Vpa3VcIDsKK+eri+S9k+mfs+mfvyA+IHJpdHRhaW9ua3lvdVwgOwor54m56ZuG6KiY5LqLID4gdG9rdXNodXVraWppXCA7Civku5jluK/msbrorbAgPiBmdXRhaWtldHN1Z2lcIDsKK+ijvee0meW3peWgtCA+IHNlaXNoaWtvdWpvdVwgOwor5pWR5o+05oqV5omLID4ga3l1dWVudG91c2h1XCA7CivosqHlm6Pms5XkurogPiB6YWlkYW5ob3VqaW5cIDsKK+awkeS/l+iInui4iiA+IG1pbnpva3VidXlvdVwgOwor5oim5LqJ54qv572qID4gc2Vuc291aGFuemFpXCA7Civpm6Pnh4PliqDlt6UgPiBuYW4nJ25lbmtha291XCA7CivljZfoiLnljJfppqwgPiBuYW5zZW5ob2t1YmFcIDsKK+apn+iDvemanOWusyA+IGtpbm91c2hvdWdhaVwgOwor5pel5pys5Zu95rCRID4gbmlob25rb2t1bWluXCA7CivoiJ7ouI/mlZnluKsgPiBidXRvdWt5b3VzaGlcIDsKK+ael+mWk+WtpuagoSA+IHJpbmthbmdha2tvdVwgOwor6Iqx6a2B6YGT5LitID4gb2lyYW5kb3VjaHV1XCA7Civmu5HpmY3nq7bmioAgPiBrYWtrb3VreW91Z2lcIDsKK+WcqOWkluWFrOmkqCA+IHphaWdhaWtvdWthblwgOwor5Zyw5pa56YG45oyZID4gY2hpaG91c2Vua3lvXCA7CivlkIjmiJDljJblraYgPiBnb3VzZWlrYWdha3VcIDsKK+engeijveiRieabuCA+IHNoaXNlaWhhZ2FraVwgOwor5LiN5a6a56mN5YiGID4gZnV0ZWlzZWtpYnVuXCA7CivmraPjgIXloILjgIUgPiBzZWlzZWlkb3Vkb3VcIDsKK+WNiuS/oeWNiueWkSA+IGhhbnNoaW5oYW5naVwgOwor6Ly45YWl6LaF6YGOID4geXVueXV1Y2hvdWthXCA7Civlm5vlhYPpgJ/luqYgPiBzaGlnZW5zb2t1ZG9cIDsKK+S7mOWxnuWtpuagoSA+IGZ1em9rdWdha2tvdVwgOwor5Lq65bel55yf54+gID4gamlua291c2hpbmp1XCA7CivkurrmqKnlm6PkvZMgPiBqaW5rZW5kYW50YWlcIDsKK+acrOaWh+aJueiplSA+IGhvbm1vbmhpaHlvdVwgOwor55S76b6N54K5552bID4gZ2FyeW91dGVuc2VpXCA7Civkub7lnLDovrLms5UgPiBrYW5jaGlub3Vob3VcIDsKK+WWp+WWp+WbguWbgiA+IGtlbmtlbmdvdWdvdVwgOwor5Lq65a6a5bCL5ZWPID4gamludGVpamlubW9uXCA7Civku7vmnJ/muoDkuoYgPiBuaW5raW1hbnJ5b3VcIDsKK+ertummrOaWsOiBniA+IGtlaWJhc2hpbmJ1blwgOwor6Zu75rCX5bel5a2mID4gZGVua2lrb3VnYWt1XCA7CivkvpvntabpgY7lpJogPiBreW91a3l1dWthdGFcIDsKK+WPo+mgreWvqeeQhiA+IGtvdXRvdXNoaW5yaVwgOwor5bmz5ZKM5pWZ6IKyID4gaGVpd2FreW91aWt1XCA7Civnt4/lkIjnl4XpmaIgPiBzb3Vnb3VieW91aW5cIDsKK+S4iuWxpOawl+a1gSA+IGpvdXNvdWtpcnl1dVwgOwor6ICB6b2i5bm06YeRID4gcm91cmVpbmVua2luXCA7CivmvJTlpY/nt7Tnv5IgPiBlbnNvdXJlbnNodXVcIDsKK+S7leaOm+WcsOmbtyA+IHNoaWtha2VqaXJhaVwgOwor5Zue6Lui6LOH6YeRID4ga2FpdGVuc2hpa2luXCA7CivmmpfkuK3mqKHntKIgPiBhbmNodXVtb3Nha3VcIDsKK+WUr+aIkeeLrOWwiiA+IHl1aWdhZG9rdXNvblwgOwor6ZuG5pWj5Li7576pID4gc2h1dXNhbnNodWdpXCA7CivlnJ/nlKPnianlsYsgPiBtaXlhZ2Vtb25veWFcIDsKK+iHque1puiHqui2syA+IGppa3l1dWppc29rdVwgOwor5ZKM5bmz5Y2U5a6aID4gd2FoZWlreW91dGVpXCA7CivlnLDmlrnliIbmqKkgPiBjaGlob3VidW5rZW5cIDsKK+W4guWGheims+WFiSA+IHNoaW5haWthbmtvdVwgOwor5pS+5bCE6IO96ZuoID4gaG91c2hhbm91YW1lXCA7Civoq5zloLHmqZ/plqIgPiBjaG91aG91a2lrYW5cIDsKK+WwseWtpue+qeWLmSA+IHNodXVnYWt1Z2ltdVwgOwor6Iiq56m65YSq5YuiID4ga291a3V1eXV1c2VpXCA7CivkurrmiY3nmbvnlKggPiBqaW56YWl0b3V5b3VcIDsKK+ikh+acrOS9jeWItiA+IGZ1a3Vob24nJ2lzZWlcIDsKK+eUn+a0u+S/neittyA+IHNlaWthdHN1aG9nb1wgOwor6ZuG5Lit6LGq6ZuoID4gc2h1dWNodXVnb3V1XCA7CivlvrTlhbXlhY3pmaQgPiBjaG91aGVpbWVuam9cIDsKK+WFrOWus+WVj+mhjCA+IGtvdWdhaW1vbmRhaVwgOwor5Y2Y6Lqr6LW05Lu7ID4gdGFuc2hpbmZ1bmluXCA7Civlt67liKXnlKjoqp4gPiBzYWJldHN1eW91Z29cIDsKK+S6uuWPo+WLleaFiyA+IGppbmtvdWRvdXRhaVwgOwor5a6H5a6Z54mp55CGID4gdWNodXVidXRzdXJpXCA7CivlhajpnaLmiKbkuokgPiB6ZW5tZW5zZW5zb3VcIDsKK+e1jOa4iOeKtuaFiyA+IGtlaXphaWpvdXRhaVwgOwor5aeU6KiX56CU56m2ID4gaXRha3VrZW5reXV1XCA7CivljYPovpvkuIfoi6YgPiBzZW5zaGluYmFua3VcIDsKK+WMu+eZguWgsemFrCA+IGlyeW91aG91c2h1dVwgOwor5rC05pm25pmC6KiIID4gc3Vpc2hvdWRva2VpXCA7CivkuInmlofmloflo6sgPiBzYW5tb25idW5zaGlcIDsKK+Wbnui7ouacqOmmrCA+IGthaXRlbm1va3ViYVwgOwor5LiN5oim5p2h57SEID4gZnVzZW5qb3V5YWt1XCA7CivkuIDnlJ/mh7jlkb0gPiBpc3Nob3VrZW5tZWlcIDsKK+aXpemAsuaciOatqSA+IG5pc3NoaW5nZXBwb1wgOwor5Y+X6KiX6LKp5aOyID4ganV0YWt1aGFuYmFpXCA7CivmlofljJbli7Lnq6AgPiBidW5rYWt1bnNob3VcIDsKK+aCoOaCoOmWkemWkSA+IHl1dXl1dWthbmthblwgOwor5LuP6Iux6L6e5YW4ID4gZnV0c3VlaWppdGVuXCA7CivooZvnlJ/lt6XlraYgPiBlaXNlaWtvdWdha3VcIDsKK+aUv+imi+aUvumAgSA+IHNlaWtlbmhvdXNvdVwgOwor5rC05oCn5aGX5paZID4gc3Vpc2VpdG9yeW91XCA7CivlhYjpgLLlhbXlmaggPiBzZW5zaGluaGVpa2lcIDsKK+iHquW3seS4reW/gyA+IGppa29jaHV1c2hpblwgOwor5ZCM5ZKM5pWZ6IKyID4gZG91d2FreW91aWt1XCA7CivlrabpvaLlhZDnq6UgPiBnYWt1cmVpamlkb3VcIDsKK+iBluWcsOW3oeekvCA+IHNlaWNoaWp1bnJlaVwgOwor56S+5Zuj5rOV5Lq6ID4gc2hhZGFuaG91amluXCA7CivosqjnianovLjpgIEgPiBrYW1vdHN1eXVzb3VcIDsKK+ato+WkmuinkuW9oiA+IHNlaXRha2FrdWtlaVwgOwor6Zu75rCX5a656YePID4gZGVua2l5b3VyeW91XCA7CivmupbnpoHmsrvnlKMgPiBqdW5raW5jaGlzYW5cIDsKK+WMluWtpuani+mAoCA+IGthZ2FrdWtvdXpvdVwgOwor5LiA5YWa54us6KOBID4gaXR0b3Vkb2t1c2FpXCA7CivnhKHpmZDlsI/mlbAgPiBtdWdlbnNob3VzdXVcIDsKK+a4vueEtuS4gOS9kyA+IGtvbnplbicnaXR0YWlcIDsKK+a1t+W6leWcsOmchyA+IGthaXRlaWppc2hpblwgOwor5Y2a5aOr6Kqy56iLID4gaGFrdXNoaWthdGVpXCA7CivlubPlnYflr7/lkb0gPiBoZWlraW5qdW15b3VcIDsKK+W4guawkemBi+WLlSA+IHNoaW1pbicndW5kb3VcIDsKK+iomOW/teWHuueJiCA+IGtpbmVuc2h1cHBhblwgOwor6KOF572u5Yi25b6hID4gc291Y2hpc2VpZ3lvXCA7Civljp/oo4HliKTmiYAgPiBnZW5zYWliYW5zaG9cIDsKK+WOmueUn+Wkp+iHoyA+IGtvdXNlaWRhaWppblwgOwor5rK56ISC5bel5qWtID4geXVzaGlrb3VneW91XCA7Civnt4/mlK/phY3kurogPiBzb3VzaGloYWluaW5cIDsKK+aXpeeFp+aZgumWkyA+IG5pc3Nob3VqaWthblwgOwor5LiA6Iis5pWZ5pu4ID4gaXBwYW5reW91c2hvXCA7CivkuIDpg6jlp4vntYIgPiBpY2hpYnVzaGlqdXVcIDsKK+mWouaVsOWOn+WeiyA+IGthbnN1dWdlbmtlaVwgOwor5LiJ6YeN5a6d5YagID4gc2FuanV1aG91a2FuXCA7CivmrZPpgIHov47kvJogPiBrYW5zb3VnZWlrYWlcIDsKK+e3iuaApemBv+mboyA+IGtpbmt5dXVoaW5hblwgOwor5Yi56YKj5Li7576pID4gc2V0c3VuYXNodWdpXCA7Civlt6Xmpa3lnLDljLogPiBrb3VneW91Y2hpa3VcIDsKK+aIkealveWkmuW4giA+IGdhcmFrdXRhaWNoaVwgOwor6Lui5YaZ5o265p+TID4gdGVuc2hhbmFzc2VuXCA7Civoh6rnhLbngb3lrrMgPiBzaGl6ZW5zYWlnYWlcIDsKK+WkqeS6leajp+aVtyA+IHRlbmpvdXNhamlraVwgOwor5YWI6KGM5p2h5Lu2ID4gc2Vua291am91a2VuXCA7CivmnIjkuIvmsLfkurogPiBnZWtrYWh5b3VqaW5cIDsKK+WMu+iWrOWIhualrSA+IGl5YWt1YnVuZ3lvdVwgOwor6Lqr5YWD5L+d6Ki8ID4gbWltb3RvaG9zaG91XCA7CivntJTmraPnp5HlraYgPiBqdW5zZWlrYWdha3VcIDsKK+S6jOmHjemBk+W+syA+IG5panV1ZG91dG9rdVwgOwor5oKy5Zac5Lqk5LqkID4gaGlraWtvbW9nb21vXCA7Civnt4rmgKXli5XorbAgPiBraW5reXV1ZG91Z2lcIDsKK+WkqumZvembu+axoCA+IHRhaXlvdWRlbmNoaVwgOwor6KGX6aCt6Yyy6Z+zID4gZ2FpdG91cm9rdW9uXCA7Civlm73pmpvmqZ/plqIgPiBrb2t1c2Fpa2lrYW5cIDsKK+WJjeWCvuWnv+WLoiA+IHplbmtlaXNoaXNlaVwgOwor5biw5bGe5oSP6K2YID4ga2l6b2t1aXNoaWtpXCA7CivlhazooYbkvr/miYAgPiBrb3VzaHV1YmVuam9cIDsKK+aXpeacrOWbveWGhSA+IG5paG9ua29rdW5haVwgOwor6YG45rCR5oCd5oOzID4gc2VubWluc2hpc291XCA7CivlkoDlmrzpgYvli5UgPiBzb3NoYWt1dW5kb3VcIDsKK+WFseWQjOeWjumWiyA+IGt5b3Vkb3Vzb2thaVwgOwor6KiY5b+15YaZ55yfID4ga2luZW5zaGFzaGluXCA7Civngavnh7XluIPlm6MgPiBrb3RhdHN1YnV0b25cIDsKK+WFqOmdouemgeatoiA+IHplbm1lbmtpbnNoaVwgOwor5YyX5Zue5biw57eaID4ga2l0YWthaWtpc2VuXCA7CivpgKPlkIjoiabpmoogPiByZW5nb3VrYW50YWlcIDsKK+S6uuWRveaVkeWKqSA+IGppbm1laWt5dXVqb1wgOwor5oim5LqJ54q25oWLID4gc2Vuc291am91dGFpXCA7CivlpbPlrZDlpKflraYgPiBqb3NoaWRhaWdha3VcIDsKK+WbveWjq+eEoeWPjCA+IGtva3VzaGltdXNvdVwgOwor5bmz5Z2H5L2Z5ZG9ID4gaGVpa2luJyd5b21laVwgOwor5LqL5L6L56CU56m2ID4gamlyZWlrZW5reXV1XCA7CivliIbmlaPmipXos4cgPiBidW5zYW50b3VzaGlcIDsKK+WBtuWDj+ekvOaLnSA+IGd1dXpvdXJlaWhhaVwgOwor5Yq55p6c6Ka/6Z2iID4ga291a2F0ZWtpbWVuXCA7Civnt4rlvLXnt6nlkowgPiBraW5jaG91a2Fud2FcIDsKK+S4jeioseikh+ijvSA+IGZ1a3lvZnVrdXNlaVwgOwor5YyX5qyn56We6KmxID4gaG9rdW91c2hpbndhXCA7CivkurrkuovooYzmlL8gPiBqaW5qaWd5b3VzZWlcIDsKK+aYreWSjOW5tOmWkyA+IHNob3V3YW5lbmthblwgOwor5Zu95a2X5ZWP6aGMID4ga29rdWppbW9uZGFpXCA7Civlm73li5nlpKfoh6MgPiBrb2t1bXVkYWlqaW5cIDsKK+iogOiqnumanOWusyA+IGdlbmdvc2hvdWdhaVwgOwor5YaN6LKp5L6h5qC8ID4gc2FpaGFua2FrYWt1XCA7CivlubPlnYfmoKrkvqEgPiBoZWlraW5rYWJ1a2FcIDsKK+WuieaBr+mmmemFuCA+IGFuc29rdWtvdXNhblwgOwor6K2c5Luj5aSn5ZCNID4gZnVkYWlkYWlteW91XCA7CivpgZPot6/oqIjnlLsgPiBkb3Vyb2tlaWtha3VcIDsKK+WPpOiHquWLlei7iiA+IGZ1cnVqaWRvdXNoYVwgOwor5a655ae/56uv6bqXID4geW91c2hpdGFucmVpXCA7Civoq4vosqDmpa3ogIUgPiB1a2VvaWd5b3VzaGFcIDsKK+mAmuW4uOWPo+iqniA+IHRzdXVqb3Vrb3Vnb1wgOwor5Zyo5aSW6YKm5Lq6ID4gemFpZ2FpaG91amluXCA7CivplovmlL7ntYzmuIggPiBrYWlob3VrZWl6YWlcIDsKK+S9k+aTjeertuaKgCA+IHRhaXNvdWt5b3VnaVwgOwor5Yq05YON5ZCM55ufID4gcm91ZG91ZG91bWVpXCA7Civlm73pmpvpg73luIIgPiBrb2t1c2FpdG9zaGlcIDsKK+acieWIuumJhOe3miA+IHl1dXNoaXRlc3NlblwgOwor5Zuj5L2T6KGM5YuVID4gZGFudGFpa291ZG91XCA7Civlv5znlKjmlbDlraYgPiBvdXlvdXN1dWdha3VcIDsKK+S6pOmAmuW3oeafuyA+IGtvdXRzdXVqdW5zYVwgOwor54Sh5pW16Imm6ZqKID4gbXV0ZWtpa2FudGFpXCA7CivoiKrnqbrkvJrnpL4gPiBrb3VrdXVnYWlzaGFcIDsKK+Wkp+aUv+WliemChCA+IHRhaXNlaWhvdWthblwgOwor5LiN5pKT5LiN5bGIID4gZnV0b3VmdWt1dHN1XCA7Civnm7jplqLplqLkv4IgPiBzb3VrYW5rYW5rZWlcIDsKK+WQjOebn+e9t+alrSA+IGRvdW1laWhpZ3lvdVwgOwor6LuN5YKZ56u25LqJID4gZ3VuYmlreW91c291XCA7CivlvaLlrrnli5XoqZ4gPiBrZWl5b3Vkb3VzaGlcIDsKK+ijnOe1puW5uee3miA+IGhva3l1dWthbnNlblwgOwor54K65pu/6KOB5a6aID4ga2F3YXNlc2FpdGVpXCA7Civooajnj77kuLvnvqkgPiBoeW91Z2Vuc2h1Z2lcIDsKK+aWh+aVmeWcsOWMuiA+IGJ1bmt5b3VjaGlrdVwgOwor6YeR5bGe55ay5Yq0ID4ga2luem9rdWhpcm91XCA7CivlvLfliLbnlo7plosgPiBreW91c2Vpc29rYWlcIDsKK+itpuimlue3j+eboyA+IGtlaXNoaXNvdWthblwgOwor5Luj6KGo56S+5ZOhID4gZGFpaHlvdXNoYWluXCA7CivlgJ/lsYvkvY/lsYUgPiBzaGFrdXlhenVtYWlcIDsKK+W+tOWFteWItuW6piA+IGNob3VoZWlzZWlkb1wgOwor55+t5pyf5aSn5a2mID4gdGFua2lkYWlnYWt1XCA7Civnq4vkvZPmlL7pgIEgPiByaXR0YWlob3Vzb3VcIDsKK+WkqeS6leahn+aVtyA+IHRlbmpvdXNhamlraVwgOwor5Zyn6L+r5YyF5bivID4gYXBwYWt1aG91dGFpXCA7CivpgJrnlKjmnJ/plpMgPiB0c3V1eW91a2lrYW5cIDsKK+WLieW8t+aZgumWkyA+IGJlbmt5b3VqaWthblwgOwor5oi457GN6KyE5pysID4ga29zZWtpdG91aG9uXCA7Civlrrbluq3mlZnogrIgPiBrYXRlaWt5b3Vpa3VcIDsKK+WcsOmch+aOoumJsSA+IGppc2hpbnRhbmtvdVwgOwor6YG/6Zuj5qKv5a2QID4gaGluYW5iYXNoaWdvXCA7CivnpL7kvJrlpYnku5UgPiBzaGFrYWlob3VzaGlcIDsKK+WpmuWkluaAp+S6pCA+IGtvbmdhaXNlaWtvdVwgOwor5LiN5Y+v5oqX5YqbID4gZnVrYWtvdXJ5b2t1XCA7Civln7fooYzmqZ/plqIgPiBzaGlra291a2lrYW5cIDsKK+WLpOWLmeipleWumiA+IGtpbm11aHlvdXRlaVwgOwor5bi455So5a++5pWwID4gam91eW91dGFpc3V1XCA7CivlpKfpgZPoirjkurogPiBkYWlkb3VnZWluaW5cIDsKK+m7kumiqOeZvembqCA+IGtva3VmdXVoYWt1dVwgOwor6YqA6KGM5qWt5YuZID4gZ2lua291Z3lvdW11XCA7Civnj77lnLDoqr/mn7sgPiBnZW5jaGljaG91c2FcIDsKK+mBoOa0i+iIqua1tyA+IGVuJyd5b3Vrb3VrYWlcIDsKK+WkluS6pOmWouS/giA+IGdhaWtvdWthbmtlaVwgOwor56eB5a2m5Yqp5oiQID4gc2hpZ2FrdWpvc2VpXCA7CivnhKHnl5vliIblqKkgPiBtdXRzdXVidW5iZW5cIDsKK+S4jeiJr+WCteaoqSA+IGZ1cnlvdXNhaWtlblwgOwor5Zyw5Z+f5pmC5Yi7ID4gY2hpaWtpamlrb2t1XCA7Civlh7nniYjljbDliLcgPiBvdWhhbmluc2F0c3VcIDsKK+WfuuW5ueeUo+alrSA+IGtpa2Fuc2FuZ3lvdVwgOwor6Lev5LiK6aeQ6LuKID4gcm9qb3VjaHV1c2hhXCA7CivpppbohLPkvJroq4cgPiBzaHVub3VrYWlkYW5cIDsKK+eLrOijgeaUv+ayuyA+IGRva3VzYWlzZWlqaVwgOwor5aSW5Lqk5ZWP6aGMID4gZ2Fpa291bW9uZGFpXCA7CivnoLTnlKPnlLPoq4sgPiBoYXNhbnNoaW5zZWlcIDsKK+mDt+Wcn+iKuOiDvSA+IGt5b3Vkb2dlaW5vdVwgOwor5b6M5pa55Zyw5Z+fID4ga291aG91Y2hpaWtpXCA7CivlpKrpmb3mlL7lsIQgPiB0YWl5b3Vob3VzaGFcIDsKK+ilv+a0i+aWh+aYjiA+IHNlaXlvdWJ1bm1laVwgOwor5oyv5pu/6Ly46YCBID4gZnVyaWthZXl1c291XCA7CivkuqTmj5vmnaHku7YgPiBrb3VrYW5qb3VrZW5cIDsKK+eZuuihjOW4guWgtCA+IGhha2tvdXNoaWpvdVwgOwor5LiA5pio5pio5bm0ID4gc2FraW90b3Rvc2hpXCA7Civoo73oj5Pmpa3ogIUgPiBzZWlrYWd5b3VzaGFcIDsKK+aEm+WbveWbo+S9kyA+IGFpa29rdWRhbnRhaVwgOwor5aSJ5b2i6KaP5YmHID4gaGVua2Vpa2lzb2t1XCA7CivkurrmsJfmipXnpaggPiBuaW5raXRvdWh5b3VcIDsKK+eUt+Wls+W5s+etiSA+IGRhbmpvYnlvdWRvdVwgOwor6YO15L6/6JGJ5pu4ID4geXV1YmluaGFnYWtpXCA7CivmtYXlrabpnZ7miY0gPiBzZW5nYWt1aGlzYWlcIDsKK+W4guWgtOaSpOmAgCA+IHNoaWpvdXRldHRhaVwgOwor5a6a5pyf5qSc6Ki6ID4gdGVpa2lrZW5zaGluXCA7Civlm6PkvZPnq7bmioAgPiBkYW50YWlreW91Z2lcIDsKK+awkemWk+Wbo+S9kyA+IG1pbmthbmRhbnRhaVwgOwor5bCB5bu65oCd5oOzID4gaG91a2Vuc2hpc291XCA7CivoiKrntprot53pm6IgPiBrb3V6b2t1a3lvcmlcIDsKK+WPjOWzsOmnsemnnSA+IHNvdWhvdXJha3VkYVwgOwor55m+56eR5YWo5pu4ID4gaHlha2themVuc2hvXCA7CivoqabooYzpjK/oqqQgPiBzaGlrb3VzYWt1Z29cIDsKK+W3peWgtOWcsOW4ryA+IGtvdWpvdWNoaXRhaVwgOwor5pS/5rK75pS56Z2pID4gc2VpamlrYWlrYWt1XCA7CivluILmsJHkvJrppKggPiBzaGltaW5rYWlrYW5cIDsKK+aciemZkOS8muekviA+IHl1dWdlbmdhaXNoYVwgOwor6YeN5ZWG5Li7576pID4ganV1c2hvdXNodWdpXCA7Civpp4XliY3luoPloLQgPiBla2ltYWVoaXJvYmFcIDsKK+aUv+ayu+iyrOS7uyA+IHNlaWppc2VraW5pblwgOwor5bCC5qWt5Li75ammID4gc2VuZ3lvdXNodWZ1XCA7Civnj77loLTnm6PnnaMgPiBnZW5iYWthbnRva3VcIDsKK+WFrOi7ouWRqOacnyA+IGtvdXRlbnNodXVraVwgOwor5Y+j5LiJ5ZGz57eaID4ga3VjaGlqYW1pc2VuXCA7CivkuIDmmKjmmKjlpJwgPiBpc3Nha3VzYWt1eWFcIDsKK+ihgOa4heiCneeCjiA+IGtlc3NlaWthbicnZW5cIDsKK+S6uui3oeacqui4jyA+IGppbnNla2ltaXRvdVwgOwor5by35Yi25L+d6Zm6ID4ga3lvdXNlaWhva2VuXCA7CivkuIDmnJvljYPph4wgPiBpY2hpYm91c2VucmlcIDsKK+WIkeWLmeaJgOmVtyA+IGtlaW11c2hvY2hvdVwgOwor5aC05YaF5pS+6YCBID4gam91bmFpaG91c291XCA7CivmnJ3kuInmmq7lm5sgPiBjaG91c2FuYm9zaGlcIDsKK+emj+elieWbveWutiA+IGZ1a3VzaGlrb2trYVwgOwor6ZW35YiA5LiA5p6dID4gY2hvdXRvdWlzc2hpXCA7CivmgrLllpzkuqTjgIUgPiBoaWtpa29tb2dvbW9cIDsKK+eEoee3muW3peWtpiA+IG11c2Vua291Z2FrdVwgOwor5Yud5Yip5oqV5omLID4gc2hvdXJpdG91c2h1XCA7CivlpKnmsJfmpoLms4EgPiB0ZW5raWdhaWt5b3VcIDsKK+eEoeW4uOi/hemAnyA+IG11am91amluc29rdVwgOwor6KGM5YuV56eR5a2mID4ga291ZG91a2FnYWt1XCA7CivkuojpmLLms6jlsIQgPiB5b2JvdWNodXVzaGFcIDsKK+alteenmOaDheWgsSA+IGdva3VoaWpvdWhvdVwgOwor5bCB5bu656S+5LyaID4gaG91a2Vuc2hha2FpXCA7CivlirTkvb/ntJvkuokgPiByb3VzaGlmdW5zb3VcIDsKK+iHquWtpuiHque/kiA+IGppZ2FrdWppc2h1dVwgOwor5LiN6YCj57aa57eaID4gZnVyZW56b2t1c2VuXCA7CivmsrvlpJbms5XmqKkgPiBjaGlnYWlob3VrZW5cIDsKK+e1jOa4iOWkluS6pCA+IGtlaXphaWdhaWtvdVwgOwor5YiD54mp5LiJ5pinID4gaGFtb25vemFubWFpXCA7CivlhYnlrabnuYrntq0gPiBrb3VnYWt1c2VuJydpXCA7CivlhajkvJHmraLnrKYgPiB6ZW5reXV1c2hpZnVcIDsKK+WSjOa0i+aKmOihtyA+IHdheW91c2V0Y2h1dVwgOwor5riF566X5Lya56S+ID4gc2Vpc2FuZ2Fpc2hhXCA7Civlu4Pol6nnva7nnIwgPiBoYWloYW5jaGlrZW5cIDsKK+iHqOW6iuism+e+qSA+IHJpbnNob3Vrb3VnaVwgOwor57SU5pel5pys6aKoID4ganVuJyduaWhvbmZ1dVwgOwor5oyZ5Zu95LiA6Ie0ID4ga3lva29rdWl0Y2hpXCA7CivlpKfooYbpgYvli5UgPiB0YWlzaHV1dW5kb3VcIDsKK+W4guWgtOiqv+afuyA+IHNoaWpvdWNob3VzYVwgOwor5YWs6ZaL5aSW5LqkID4ga291a2FpZ2Fpa291XCA7CivlpKfolLXlpKfoh6MgPiBvb2t1cmFkYWlqaW5cIDsKK+S/ruato+S6iOeulyA+IHNodXVzZWl5b3NhblwgOwor6KGM5pS/5qmf6ZaiID4gZ3lvdXNlaWtpa2FuXCA7CivmlL/mlZnliIbpm6IgPiBzZWlreW91YnVucmlcIDsKK+aQreS5l+ahiOWGhSA+IHRvdWpvdWFuJyduYWlcIDsKK+S6lOS6uuWbg+WtkCA+IGdvbmluYmF5YXNoaVwgOwor54us5ZaE5Li7576pID4gZG9rdXplbnNodWdpXCA7CivoiKrnqbrmm7jnsKEgPiBrb3VrdXVzaG9rYW5cIDsKK+izm+WQpuWQjOelqCA+IHNhbnBpZG91aHlvdVwgOwor5Lq65paH5a2m5rS+ID4gamluYnVuZ2FrdWhhXCA7Civmj7TnlKjnlJ/nlKMgPiBlbicneW91c2Vpc2FuXCA7CivkuI3ogJXkvZzlnLAgPiBmdWtvdXNha3VjaGlcIDsKK+Wkp+S9v+WFrOmCuCA+IHRhaXNoaWtvdXRlaVwgOwor5rG66K2w5LqL6aCFID4ga2V0c3VnaWppa291XCA7CivmuKnms4nnmYLms5UgPiBvbnNlbnJ5b3Vob3VcIDsKK+S4gOmhsOS4gOeskSA+IGlwcGluJydpc3Nob3VcIDsKK+mbu+awl+S/oeWPtyA+IGRlbmtpc2hpbmdvdVwgOwor5bCC566h5rC05Z+fID4gc2Vua2Fuc3VpaWtpXCA7CivlpKnkvZPltIfmi50gPiB0ZW50YWlzdXVoYWlcIDsKK+ebuOS6kuWPgueFpyA+IHNvdWdvc2Fuc2hvdVwgOwor5Ymy54O55paZ55CGID4ga2FwcG91cnlvdXJpXCA7Civpg4rlpJbpm7vou4ogPiBrb3VnYWlkZW5zaGFcIDsKK+S/ruato+S4u+e+qSA+IHNodXVzZWlzaHVnaVwgOwor6KOc5by36Ki85ougID4gaG9reW91c2hvdWtvXCA7CivkurrmnZDpioDooYwgPiBqaW56YWlnaW5rb3VcIDsKK+i/keS7o+mfs+alvSA+IGtpbmRhaW9uZ2FrdVwgOwor6KOP6Z2i5bel5L2cID4gcmltZW5rb3VzYWt1XCA7Civms5XmsrvnpL7kvJogPiBob3VjaGlzaGFrYWlcIDsKK+Wkp+ebpOaMr+iIniA+IG9vYmFuYnVydW1haVwgOwor5LiJ5bKQ5Luj6KGoID4gc2FuZ2lkYWloeW91XCA7CivmlZnlk6HntYTlkIggPiBreW91aW5rdW1pYWlcIDsKK+a1t+mbo+aVkeWKqSA+IGthaW5hbmt5dXVqb1wgOwor6Yyy6Z+z5pS+6YCBID4gcm9rdW9uaG91c291XCA7CivkuInogIXlh6HpgIAgPiBzYW5zaGFib250YWlcIDsKK+aXpeacrOa1t+a1gSA+IG5paG9ua2Fpcnl1dVwgOwor5Y+y5LiK5pyA5aSnID4gc2hpam91c2FpZGFpXCA7CivoqJjmhrbpmpzlrrMgPiBraW9rdXNob3VnYWlcIDsKK+S4jeWKtOaJgOW+lyA+IGZ1cm91c2hvdG9rdVwgOwor6ICB6I2Y5oCd5oOzID4gcm91c291c2hpc291XCA7Civou43pnIDlt6Xmpa0gPiBndW5qdWtvdWd5b3VcIDsKK+mbouWQiOmbhuaVoyA+IHJpZ291c2h1dXNhblwgOwor6Imv5aa76LOi5q+NID4gcnlvdXNhaWtlbmJvXCA7Civou43lj7jku6TlrpggPiBndW5zaGlyZWlrYW5cIDsKK+iyv+aYk+S8muekviA+IGJvdWVraWdhaXNoYVwgOwor54eQ6YW46IKl5paZID4gcmluc2FuaGlyeW91XCA7CivnhKHpmZDosqzku7sgPiBtdWdlbnNla2luaW5cIDsKK+enkeWtpuaAneaDsyA+IGthZ2FrdXNoaXNvdVwgOwor5Zub5rW35ZCM6IOeID4gc2hpa2FpZG91aG91XCA7CivlgaXlurfllY/poYwgPiBrZW5rb3Vtb25kYWlcIDsKK+aEn+WCt+S4u+e+qSA+IGthbnNob3VzaHVnaVwgOwor6aas6aCt6Kaz6Z+zID4gYmF0b3VrYW4nJ25vblwgOwor5aSp6aCC6Led6ZuiID4gdGVuY2hvdWt5b3JpXCA7Civoqr/mn7vpg6jplbcgPiBjaG91c2FidWNob3VcIDsKK+WNg+e0q+S4h+e0hSA+IHNlbnNoaWJhbmtvdVwgOwor6KGM5YuV5ZG95LukID4ga291ZG91bWVpcmVpXCA7Civngrrmm7/miYvlvaIgPiBrYXdhc2V0ZWdhdGFcIDsKK+i1pOmBk+awl+WboyA+IHNla2lkb3VraWRhblwgOwor56m65Lit6JC95LiLID4ga3V1Y2h1dXJha2thXCA7CivlrprmoLzojbfph40gPiB0ZWlrYWt1a2FqdXVcIDsKK+eCuuabv+mKgOihjCA+IGthd2FzZWdpbmtvdVwgOwor5a6Y6IO95Li7576pID4ga2FuJydub3VzaHVnaVwgOwor5a625bqt5pWZ5birID4ga2F0ZWlreW91c2hpXCA7CivmmLzlpJzlhbzooYwgPiBjaHV1eWFrZW5rb3VcIDsKK+S8muekvuWWtualrSA+IGthaXNoYWVpZ3lvdVwgOwor5ZWT6JKZ5oCd5oOzID4ga2VpbW91c2hpc291XCA7CivpnZ7lvqrnkrDnmoQgPiBoaWp1bmthbnRla2lcIDsKK+aWh+awkee1seWItiA+IGJ1bm1pbnRvdXNlaVwgOwor6YGO6YW45YyW54mpID4ga2FzYW5rYWJ1dHN1XCA7CivkuIDlv7XnmbrotbcgPiBpY2hpbmVuaG9ra2lcIDsKK+iCsuaIkOagveWfuSA+IGlrdXNlaXNhaWJhaVwgOwor54++5aC05qSc6Ki8ID4gZ2VuYmFrZW5zaG91XCA7CivmmYLku6PogIPoqLwgPiBqaWRhaWtvdXNob3VcIDsKK+aEn+W6puiJr+WlvSA+IGthbmRvcnlvdWtvdVwgOwor6YCP5piO5Lq66ZaTID4gdG91bWVpbmluZ2VuXCA7CivluLjlpZfmiYvmrrUgPiBqb3V0b3VzaHVkYW5cIDsKK+WSjOW5s+W3peS9nCA+IHdhaGVpa291c2FrdVwgOwor5pqX5Lit6aOb6LqNID4gYW5jaHV1aGl5YWt1XCA7CivkurrmsJHoo4HliKQgPiBqaW5taW5zYWliYW5cIDsKK+aWveihjOimj+WJhyA+IHNoaWtvdWtpc29rdVwgOwor5Y2K6Lqr5LiN6ZqPID4gaGFuc2hpbmZ1enVpXCA7Civmma7pgJrlkI3oqZ4gPiBmdXRzdXVtZWlzaGlcIDsKK+WvvuixoeevhOWbsiA+IHRhaXNob3VoYW4nJ2lcIDsKK+S6uuawkeaIpue3miA+IGppbm1pbnNlbnNlblwgOwor57Ch5piO5by35Zu6ID4ga2FubWVpa3lvdWtvXCA7Civlj6/og73pgbjmip4gPiBrYW5vdXNlbnRha3VcIDsKK+Wxi+WGheertuaKgCA+IG9rdW5haWt5b3VnaVwgOwor5aSa5oOF5LuP5b+DID4gdGFqb3VidXNzaGluXCA7CivljZjntJToqIjnrpcgPiB0YW5qdW5rZWlzYW5cIDsKK+WFrOihhumbu+ipsSA+IGtvdXNodXVkZW53YVwgOwor6Iqx6Ieq5YuV6LuKID4gaGFuYWppZG91c2hhXCA7CivmlL7olanmga/lrZAgPiBob3V0b3VtdXN1a29cIDsKK+WGmeecn+apn+W6lyA+IHNoYXNoaW5raXRlblwgOwor5LiJ562J6LuN5pu5ID4gc2FudG91Z3Vuc291XCA7Civnt4rmgKXpgK7mjZUgPiBraW5reXV1dGFpaG9cIDsKK+iynuaTjei5gui6qiA+IHRlaXNvdWp1dXJpblwgOwor5b+D6IK65qmf6IO9ID4gc2hpbnBhaWtpbm91XCA7Civpm4zpm4TlkIzmoKogPiBzaGl5dXVkb3VzaHVcIDsKK+mghumiqOa6gOW4hiA+IGp1bnB1dW1hbnBhblwgOwor5a2m5qCh5rOV5Lq6ID4gZ2Fra291aG91amluXCA7CivlpInkvY3pm7vmtYEgPiBoZW4nJ2lkZW5yeXV1XCA7CivliY3lk6jli6Tli5kgPiB6ZW5zaG91a2lubXVcIDsKK+a1t+a0i+enkeWtpiA+IGthaXlvdWthZ2FrdVwgOwor6L6y5rCR6YGL5YuVID4gbm91bWluJyd1bmRvdVwgOwor6LKs5Lu756+E5ZuyID4gc2VraW5pbmhhbicnaVwgOwor55m65YWJ5aGX5paZID4gaGFra291dG9yeW91XCA7CivmhJ/lv5zkvZznlKggPiBrYW4nJ25vdXNheW91XCA7CivlrZDmjIHmmIbluIMgPiBrb21vY2hpa29uYnVcIDsKK+W4guWWtuS9j+WuhSA+IHNoaWVpanV1dGFrdVwgOwor5LqL5qWt6YOo6ZW3ID4gamlneW91YnVjaG91XCA7CivlpKfog4bkuI3mlbUgPiBkYWl0YW5mdXRla2lcIDsKK+WkqeWcsOWJtemAoCA+IHRlbmNoaXNvdXpvdVwgOwor5biC5aC057WM5riIID4gc2hpam91a2VpemFpXCA7CivkuojlrprmnJ/ml6UgPiB5b3RlaWtpaml0c3VcIDsKK+WMu+eZguaKgOihkyA+IGlyeW91Z2lqdXRzdVwgOwor5L2/5b255YuV6KmeID4gc2hpZWtpZG91c2hpXCA7CivlvrTlhbXmpJzmn7sgPiBjaG91aGVpa2Vuc2FcIDsKK+iHquWutueZuumbuyA+IGppa2FoYXRzdWRlblwgOwor5ZCM6Kqe5Y+N5b6pID4gZG91Z29oYW5wdWt1XCA7CivlvIHoq5blpKfkvJogPiBiZW5yb250YWlrYWlcIDsKK+S4gOiIrOaKleelqCA+IGlwcGFudG91aHlvdVwgOwor5LiA5Lq65oGv5a2QID4gaGl0b3JpbXVzdWtvXCA7CivpgIDlvbnou43kurogPiB0YWlla2lndW5qaW5cIDsKK+S6uueUn+acgOaCqiA+IGppbnNlaXNhaWFrdVwgOwor5Y2w5Yqg6Zu75ZynID4gaW5rYWRlbicnYXRzdVwgOwor5ray5oCn6ZmQ55WMID4gZWtpc2VpZ2Vua2FpXCA7CivmoITppIrlrabogIUgPiBlaXlvdWdha3VzaGFcIDsKK+mDveW4guS6pOmAmiA+IHRvc2hpa291dHN1dVwgOwor5Lqk5o+b5pWZ5o6IID4ga291a2Fua3lvdWp1XCA7CivlrabnlJ/mmYLku6MgPiBnYWt1c2VpamlkYWlcIDsKK+aEm+ekvueyvuelniA+IGFpc2hhc2Vpc2hpblwgOwor6ICB5YyW54++6LGhID4gcm91a2FnZW5zaG91XCA7CivnpL7kvJrllY/poYwgPiBzaGFrYWltb25kYWlcIDsKK+ebsueuoemKg+WJtSA+IG1vdWthbmp1dXNvdVwgOwor5p2x5rW35Zyw5pa5ID4gdG91a2FpY2hpaG91XCA7CivnmbrooYzkvJrnpL4gPiBoYWtrb3VnYWlzaGFcIDsKK+i/keaJgOWQiOWjgSA+IGtpbmpvZ2FwcGVraVwgOwor6Z+z5aOw5Zyn57iuID4gb25zZWlhc3NodWt1XCA7CivmsJHml4/kuLvnvqkgPiBtaW56b2t1c2h1Z2lcIDsKK+WwgumWgOenkeebriA+IHNlbm1vbmthbW9rdVwgOwor5rib6YeP57WM5Za2ID4gZ2VucnlvdWtlaWVpXCA7CivnnaHnnKDkuI3otrMgPiBzdWltaW5idXNva3VcIDsKK+WFhOWmueWWp+WYqSA+IGt5b3VkYWlnZW5rYVwgOwor6YGL6YCB5aWR57SEID4gdW5zb3VrZWl5YWt1XCA7CivoiJ7lj7DkuK3ntpkgPiBidXRhaWNodXVrZWlcIDsKK+S4i+WxpOmajue0miA+IGthc291a2Fpa3l1dVwgOwor57WM5riI6ZeY5LqJID4ga2VpemFpdG91c291XCA7CivkuI3oia/lsJHlpbMgPiBmdXJ5b3VzaG91am9cIDsKK+W/nOaPtOa8lOiqrCA+IG91ZW4nJ2VuemV0c3VcIDsKK+ihjOWLleWNiuW+hCA+IGtvdWRvdWhhbmtlaVwgOwor5Zyw6ZyH5Zyw5bivID4gamlzaGluY2hpdGFpXCA7CivpgJrpgY7osr/mmJMgPiB0c3V1a2Fib3Vla2lcIDsKK+e1seioiOW5tOmRkSA+IHRvdWtlaW5lbmthblwgOwor5Lq65omL5LiN6LazID4gaGl0b2RlYnVzb2t1XCA7CivljYHkuK3lhavkuZ0gPiBqaXRjaHV1aGFra3VcIDsKK+a7i+W8t+mjsuaWmSA+IGppa3lvdWlucnlvdVwgOwor5Zub6KeS5Y+356K8ID4gc2hpa2FrdWdvdW1hXCA7Civlm7rlrproprPlv7UgPiBrb3RlaWthbicnbmVuXCA7CivntYzpqJPnp5HlraYgPiBrZWlrZW5rYWdhZ3VcIDsKK+iNt+mbu+eykuWtkCA+IGthZGVucnl1dXNoaVwgOwor5Lq65bel55Sf5ZG9ID4gamlua291c2VpbWVpXCA7Civpm7vmsJfmlpnph5EgPiBkZW5raXJ5b3VraW5cIDsKK+W+gOW+qeiRieabuCA+IG91ZnVrdWhhZ2FraVwgOwor5Lq66YCg55+z5rK5ID4gamluem91c2VraXl1XCA7CivlpKnnq7rniaHkuLkgPiB0ZW5qaWt1Ym90YW5cIDsKK+W+oemms+i1sOanmCA+IGdvY2hpc291c2FtYVwgOwor5aSp6Lev5q2056iLID4gdGVucm9yZWtpdGVpXCA7CivlhbHlkIzkvr/miYAgPiBreW91ZG91YmVuam9cIDsKK+aal+auuuacqumBgiA+IGFuc2F0c3VtaXN1aVwgOwor5pyq5omV6LK755SoID4gbWloYXJhaWhpeW91XCA7Civnm7jkupLphY3lsZ4gPiBzb3Vnb2hhaXpva3VcIDsKK+egtOmhlOS4gOeskSA+IGhhZ2FuJydpc3Nob3VcIDsKK+ayu+eZguWKueaenCA+IGNoaXJ5b3Vrb3VrYVwgOwor54yf5a6Y5Yi25bqmID4gcnlvdWthbnNlaWRvXCA7Civlj47lrrnmgqPogIUgPiBzaHV1eW91a2FuamFcIDsKK+atpumZteahg+a6kCA+IGJ1cnlvdXRvdWdlblwgOwor5Lq65rCR5omA5pyJID4gamlubWluc2hveXV1XCA7Civlj43lsITkv4LmlbAgPiBoYW5zaGFrZWlzdXVcIDsKK+W3pealreaEj+WMoCA+IGtvdWd5b3Vpc2hvdVwgOwor55u45a++6KmV5L6hID4gc291dGFpaHlvdWthXCA7CivntYzmuIjllY/poYwgPiBrZWl6YWltb25kYWlcIDsKK+S4ieWNgeWFreioiCA+IHNhbmp1dXJva2tlaVwgOwor5q6L5qWt5omL5b2TID4gemFuZ3lvdXRlYXRlXCA7CivmipXnkIPli5XkvZwgPiB0b3VreXV1ZG91c2FcIDsKK+mYsueBveiok+e3tCA+IGJvdXNhaWt1bnJlblwgOwor6ICQ55So5bm05pWwID4gdGFpeW91bmVuc3V1XCA7CivmsJHlrprmhrLms5UgPiBtaW50ZWlrZW5wb3VcIDsKK+emj+WIqeWOmueUnyA+IGZ1a3VyaWtvdXNlaVwgOwor5raI6ICX5ZOB6LK7ID4gc2hvdW1vdWhpbmhpXCA7Civnp4HmnInosqHnlKMgPiBzaGl5dXV6YWlzYW5cIDsKK+Wtpue0mumWiemOliA+IGdha2t5dXVoZWlzYVwgOwor5Lq655Sf6KiY6YyyID4gamluc2Vpa2lyb2t1XCA7Civlrp/liKnkuLvnvqkgPiBqaXRzdXJpc2h1Z2lcIDsKK+WFrOS9v+mkqOWToSA+IGtvdXNoaWthbicnaW5cIDsKK+mAsuWMluirluiAhSA+IHNoaW5rYXJvbnNoYVwgOwor56m65Lit5qmf5YuVID4ga3V1Y2h1dWtpZG91XCA7CivmipXnpajntZDmnpwgPiB0b3VoeW91a2Vra2FcIDsKK+WJjeaPkOadoeS7tiA+IHplbnRlaWpvdWtlblwgOwor5aSW5Lq66YG45omLID4gZ2Fpamluc2Vuc2h1XCA7Civlt6jlpKfliIblrZAgPiBreW9kYWlidW5zaGlcIDsKK+i0i+mAoOe0meW5oyA+IGdhbnpvdXNoaWhlaVwgOwor5qSc5a6a6Kmm6aiTID4ga2VudGVpc2hpa2VuXCA7Civol43ntqzopJLnq6AgPiByYW5qdWhvdXNob3VcIDsKK+WPuOazleippumokyA+IHNoaWhvdXNoaWtlblwgOwor5p+U6Luf5L2T5pONID4ganV1bmFudGFpc291XCA7CivkuI3oia/lsI7kvZMgPiBmdXJ5b3Vkb3V0YWlcIDsKK+WvvuaIpui7iuegsiA+IHRhaXNlbnNoYWhvdVwgOwor5q275L2T6Kej5YmWID4gc2hpdGFpa2FpYm91XCA7Civlhbzmpa3ovrLlrrYgPiBrZW5neW91bm91a2FcIDsKK+WFrOmWi+mMsumfsyA+IGtvdWthaXJva3VvblwgOwor5rW36LuN5aSn6IejID4ga2FpZ3VuZGFpamluXCA7CivljZfkuqzoirHngasgPiBuYW5raW5oYW5hYmlcIDsKK+aJgeahg+iFuueCjiA+IGhlbnRvdXNlbicnZW5cIDsKK+S4reWkrumKgOihjCA+IGNodXVvdWdpbmtvdVwgOwor5Zyn57iu56m65rCXID4gYXNzaHVrdWt1dWtpXCA7CivmsbrmuIjmiYvmrrUgPiBrZXNzYWlzaHVkYW5cIDsKK+S7o+eQhualreiAhSA+IGRhaXJpZ3lvdXNoYVwgOwor6YWN572u6Lui5o+bID4gaGFpY2hpdGVua2FuXCA7CivnpoHmsrvnlKPogIUgPiBraW5jaGlzYW5zaGFcIDsKK+WFqOi6q+S4jemajyA+IHplbnNoaW5mdXp1aVwgOwor6YGL6Lui5oqA6KGTID4gdW50ZW5naWp1dHN1XCA7Civpm7vlrZDpn7Pmpb0gPiBkZW5zaGlvbmdha3VcIDsKK+WNg+S4h+eEoemHjyA+IHNlbm1hbm11cnlvdVwgOwor6Ieq5q665bmH5YqpID4gamlzYXRzdWhvdWpvXCA7Civku6PmlbDplqLmlbAgPiBkYWlzdXVrYW5zdXVcIDsKK+mfs+mfv+ioreioiCA+IG9ua3lvdXNla2tlaVwgOwor5Lmz5qeY56qB6LW3ID4gbnl1dXlvdXRva2tpXCA7CivkuovliY3libLlvZMgPiBqaXplbndhcmlhdGVcIDsKK+WFteW9ueWFjeeKtiA+IGhlaWVraW1lbmpvdVwgOwor5aSp5rav5a2k54usID4gdGVuZ2Fpa29kb2t1XCA7CivkuI3mib/kuI3mib8gPiBmdXNob3VidXNob3VcIDsKK+eEoeaJgOWxnuePviA+IG11c2hvem9rdWdlblwgOwor5pyo6YCg5a625bGLID4gbW9rdXpvdWthb2t1XCA7CivppIrogIHlubTph5EgPiB5b3Vyb3VuZW5raW5cIDsKK+aCoOOAheiHqumBqSA+IHl1dXl1dWppdGVraVwgOwor5LqL5YmN56CU5L+uID4gaml6ZW5rZW5zaHV1XCA7CivkvZPns7vmlofms5UgPiB0YWlrZWlidW5wb3VcIDsKK+mbjOmbhOWQjOS9kyA+IHNoaXl1dWRvdXRhaVwgOwor5qeL6YCg5rGa6IG3ID4ga291em91b3Nob2t1XCA7Civln7rnpI7nn6XorZggPiBraXNvY2hpc2hpa2lcIDsKK+WcsOWfn+e0m+S6iSA+IGNoaWlraWZ1bnNvdVwgOwor5Y2Y5bOw6aex6aedID4gdGFucG91cmFrdWRhXCA7CivkurrmsJfllYblo7IgPiBuaW5raXNob3ViYWlcIDsKK+WnieWmueWWp+WYqSA+IGt5b3VkYWlnZW5rYVwgOwor5Y2D5ae/5LiH5oWLID4gc2Vuc2hpYmFudGFpXCA7CivlhazmnInosqHnlKMgPiBrb3V5dXV6YWlzYW5cIDsKK+WFiOihjOaKleizhyA+IHNlbmtvdXRvdXNoaVwgOwor6KO96YCg5bel56iLID4gc2Vpem91a291dGVpXCA7Civoh6rnlLHnq7bkuokgPiBqaXl1dWt5b3Vzb3VcIDsKK+W3nemtmuaWmeeQhiA+IGthd2F1b3J5b3VyaVwgOwor54++5Luj56eR5a2mID4gZ2VuZGFpa2FnYWt1XCA7CivnlKPmpa3mqZ/morAgPiBzYW5neW91a2lrYWlcIDsKK+S4jeWQiOagvOiAhSA+IGZ1Z291a2FrdXNoYVwgOwor5pqR5Lit6KaL6IieID4gc2hvY2h1dW1pbWFpXCA7CivoqpjlsI7lsIvllY8gPiB5dXVkb3VqaW5tb25cIDsKK+eRoOeSg+WUkOiNiSA+IHJ1cmlrYXJha3VzYVwgOwor5a6a5b2i5YuV6KmeID4gdGVpa2VpZG91c2hpXCA7CivllqfjgIXlm4LjgIUgPiBrZW5rZW5nb3Vnb3VcIDsKK+S6uumWk+mWouS/giA+IG5pbmdlbmthbmtlaVwgOwor6LWk5Y2B5a2X56S+ID4gc2VraWp1dWppc2hhXCA7CivnhKHnlKPpmo7ntJogPiBtdXNhbmthaWt5dXVcIDsKK+WFreazleWFqOabuCA+IHJvcHBvdXplbnNob1wgOwor6ZuG5qip5o6S6ZmkID4gc2h1dWtlbmhhaWpvXCA7Civlm73pmpvkvJrorbAgPiBrb2t1c2Fpa2FpZ2lcIDsKK+WFkOerpeaWh+WtpiA+IGppZG91YnVuZ2FrdVwgOwor6LuN5LqL56eY5a+GID4gZ3VuamloaW1pdHN1XCA7Civku7vmhI/lh7rpoK0gPiBuaW4nJ2lzaHV0dG91XCA7Civku5jpmo/nj77osaEgPiBmdXp1aWdlbnNob3VcIDsKK+WUh+atr+i8lOi7iiA+IHNoaW5zaGlob3NoYVwgOwor5Y6f5Zug6Kq/5p+7ID4gZ2VuJydpbmNob3VzYVwgOwor5Lq66Leh5pyq5YiwID4gamluc2VraW1pdG91XCA7Civmi4XlvZPpg6jplbcgPiB0YW50b3VidWNob3VcIDsKK+S4u+S7u+aVmeaOiCA+IHNodW5pbmt5b3VqdVwgOwor6LuN5YKZ5YmK5ribID4gZ3VuYmlzYWt1Z2VuXCA7Civlhazplovoo4HliKQgPiBrb3VrYWlzYWliYW5cIDsKK+WIhuino+S/rueQhiA+IGJ1bmthaXNodXVyaVwgOwor55m+6Iqx5paJ5pS+ID4gaHlha2thc2VpaG91XCA7CivkurrpgKDnnJ/nj6AgPiBqaW56b3VzaGluanVcIDsKK+elnue1jOmBjuaVjyA+IHNoaW5rZWlrYWJpblwgOwor6YCB6YeR54K65pu/ID4gc291a2lua2F3YXNlXCA7CivljrPmraPnp5HlraYgPiBnZW5zZWlrYWdha3VcIDsKK+WPuOazleabuOWjqyA+IHNoaWhvdXNob3NoaVwgOwor5Zyo5aSW6LOH55SjID4gemFpZ2Fpc2hpc2FuXCA7Civms5XlvovpgZXlj40gPiBob3VyaXRzdWloYW5cIDsKK+mAsui3r+aMh+WwjiA+IHNoaW5yb3NoaWRvdVwgOwor5LqI5YKZ5Y2U57SEID4geW9iaWt5b3V5YWt1XCA7CivmlZnogrLnjqnlhbcgPiBreW91aWt1Z2FuZ3VcIDsKK+aWh+azleimj+WJhyA+IGJ1bnBvdWtpc29rdVwgOwor5a6M5LqG5pmC5Yi2ID4ga2FucnlvdWppc2VpXCA7Civkuovlrp/oqqToqo0gPiBqaWppdHN1Z29uaW5cIDsKK+i7jemcgOeUo+alrSA+IGd1bmp1c2FuZ3lvdVwgOwor6Ieq54S256eR5a2mID4gc2hpemVua2FnYWt1XCA7CivmrabogIXkv67ooYwgPiBtdXNoYXNodWd5b3VcIDsKK+eUn+aIkOaWh+azlSA+IHNlaXNlaWJ1bnBvdVwgOwor5Y+45rOV5aSn6IejID4gc2hpaG91ZGFpamluXCA7CivkuLvohLPkvJroq4cgPiBzaHVub3VrYWlkYW5cIDsKK+W+oeeUqOWVhuS6uiA+IGdveW91c2hvdW5pblwgOwor5L2/5b6S5L+h5p2hID4gc2hpdG9zaGluam91XCA7CivoqLzmi6Dnianku7YgPiBzaG91a29idWtrZW5cIDsKK+S6iOWCmeefpeitmCA+IHlvYmljaGlzaGlraVwgOwor5ZCI5ZCN5Lya56S+ID4gZ291bWVpZ2Fpc2hhXCA7CivlhbHlkIzkuIDoh7QgPiBreW91ZG91aXRjaGlcIDsKK+atpuWKm+aUv+ayuyA+IGJ1cnlva3VzZWlqaVwgOwor6LuM6YGT5L+u5q2jID4ga2lkb3VzaHV1c2VpXCA7Civmub7lsrjmiKbkuokgPiB3YW5nYW5zZW5zb3VcIDsKK+WQiOagvOeliOmhmCA+IGdvdWtha3VraWdhblwgOwor5YyW5a2m6IKl5paZID4ga2FnYWt1aGlyeW91XCA7Civni6zoo4Hlm73lrrYgPiBkb2t1c2Fpa29ra2FcIDsKK+S9juWIqemHkeiejSA+IHRlaXJpa2luJyd5dXVcIDsKK+Wcn+mhnumHkeWxniA+IGRvcnVpa2luem9rdVwgOwor5YWx5ZKM5pS/5L2TID4ga3lvdXdhc2VpdGFpXCA7Civms5Xlu7fpl5jkuokgPiBob3V0ZWl0b3Vzb3VcIDsKK+WGjeeUn+ijhee9riA+IHNhaXNlaXNvdWNoaVwgOwor5YyX5pa56aCY5ZyfID4gaG9wcG91cnlvdWRvXCA7Civlhajlu4Poq5bogIUgPiB6ZW5wYWlyb25zaGFcIDsKK+e0r+mAsuiqsueojiA+IHJ1aXNoaW5rYXplaVwgOwor5Zu96Ziy5Lya6K2wID4ga29rdWJvdWthaWdpXCA7Civkuoznmb7ljYHml6UgPiBuaWh5YWt1dG9va2FcIDsKK+S6i+WJjemAmuWgsSA+IGppemVudHN1dWhvdVwgOwor56S+5Lya5oSP6K2YID4gc2hha2FpaXNoaWtpXCA7Civmj7Tliqnlh43ntZAgPiBlbmpvdG91a2V0c3VcIDsKK+WuieWFqOesrOS4gCA+IGFuemVuZGFpaWNoaVwgOwor5YCL5Lq65pS75pKDID4ga29qaW5rb3VnZWtpXCA7CivmgqrmiK/lnYrkuLsgPiBpdGF6dXJhYm91enVcIDsKK+mBiuWLleWGhuacqCA+IHl1dWRvdWVuYm9rdVwgOwor5YaG5b2i5YqH5aC0ID4gZW5rZWlnZWtpam91XCA7Civoiq3olYnmorbmnKggPiBiYXNob3VrYWppa2lcIDsKK+aDheWgseenkeWtpiA+IGpvdWhvdWthZ2FrdVwgOwor5YK35a6z5L+d6Zm6ID4gc2hvdWdhaWhva2VuXCA7CivnoLTnlKPlrqPlkYogPiBoYXNhbnNlbmtva3VcIDsKK+eZqeeXheaCo+iAhSA+IHJhaWJ5b3VrYW5qYVwgOwor5q2j5q2j5aCC5aCCID4gc2Vpc2VpZG91ZG91XCA7Civlm6DlrZDliIbmnpAgPiBpbnNoaWJ1bnNla2lcIDsKK+W+heWQiOaUv+ayuyA+IG1hY2hpYWlzZWlqaVwgOwor5pyr5rOV5oCd5oOzID4gbWFwcG91c2hpc291XCA7CivoiKrntprmmYLplpMgPiBrb3V6b2t1amlrYW5cIDsKK+WwguWjsueJueiosSA+IHNlbmJhaXRva2t5b1wgOwor5ZCM56iu5ZCM5paHID4gZG91c2h1ZG91YnVuXCA7CivpiYTpgZPkuovmlYUgPiB0ZXRzdWRvdWppa29cIDsKK+ecn+eQhumWouaVsCA+IHNoaW5yaWthbnN1dVwgOwor5a2Q5a2Q5a2r5a2rID4gc2hpc2hpc29uc29uXCA7Civoi7Hlm73nn7PmsrkgPiBlaWtva3VzZWtpeXVcIDsKK+S/neitt+ims+WvnyA+IGhvZ29rYW5zYXRzdVwgOwor56eY5a+G5YW15ZmoID4gaGltaXRzdWhlaWtpXCA7Civpg7Xkvr/osq/ph5EgPiB5dXViaW5jaG9raW5cIDsKK+S6jOmHjeS6uuagvCA+IG5panV1amlua2FrdVwgOwor55m96KGj5piO5aaDID4gYnlha3VlbXlvdWhpXCA7CivnlJ/kvZPop6PliZYgPiBzZWl0YWlrYWlib3VcIDsKK+eri+WkquWtkOekvCA+IHJpdHRhaXNoaXJlaVwgOwor5a6f6Zqb5ZWP6aGMID4gamlzc2FpbW9uZGFpXCA7Civlhazou6LpgJ/luqYgPiBrb3V0ZW5zb2t1ZG9cIDsKK+S4gOefs+S6jOmzpSA+IGlzc2VraW5pY2hvdVwgOwor5pWZ6IKy6Kqy56iLID4ga3lvdWlrdWthdGVpXCA7Civkurrku6PlkI3oqZ4gPiBqaW5kYWltZWlzaGlcIDsKK+WEqueUn+e1kOWpmiA+IHl1dXNlaWtla2tvblwgOwor5Y+j6aCt6Kmm5ZWPID4ga291dG91c2hpbW9uXCA7CivkuqTpgJrlronlhaggPiBrb3V0c3V1YW56ZW5cIDsKK+WSjOaWh+iLseiosyA+IHdhYnVuJydlaXlha3VcIDsKK+acrOWutuacrOWFgyA+IGhvbmtlaG9ubW90b1wgOwor55uy55uu6aOb6KGMID4gbW91bW9rdWhpa291XCA7Civmu57nqbroqJjpjLIgPiB0YWlrdXVraXJva3VcIDsKK+eri+S9k+ijgeaWrSA+IHJpdHRhaXNhaWRhblwgOwor5Zu95YaF5LqL5oOFID4ga29rdW5haWppam91XCA7CivmjqXop6bkuovmlYUgPiBzZXNzaG9rdWppa29cIDsKK+S5vueHpeiFkOacvSA+IGthbnNvdWZ1a3l1dVwgOwor5ZCI6LOH5Lya56S+ID4gZ291c2hpZ2Fpc2hhXCA7CivlvavliLvlhbfluqcgPiBjaG91a29rdWd1emFcIDsKK+aIuOWkluaSruW9sSA+IGtvZ2Fpc2F0c3VlaVwgOwor5b+c5oCl5L+u55CGID4gb3VreXV1c2h1dXJpXCA7CivpurvphZTms6jlsIQgPiBtYXN1aWNodXVzaGFcIDsKK+acq+err+S+oeagvCA+IG1hdHRhbmtha2FrdVwgOwor5YG25YOP5bSH5oudID4gZ3V1em91c3V1aGFpXCA7Civmma7pgJrliJfou4ogPiBmdXRzdXVyZXNzaGFcIDsKK+WSjOW5s+S6pOa4iSA+IHdhaGVpa291c2hvdVwgOwor5b6q55Kw6KuW5rOVID4ganVua2Fucm9ucG91XCA7Civpo73po5/mmpbooaMgPiBob3VzaG9rdWRhbmlcIDsKK+apn+aisOW3pealrSA+IGtpa2Fpa291Z3lvdVwgOwor54Sh6ZmQ6ZuG5ZCIID4gbXVnZW5zaHV1Z291XCA7CivmnInkvqHoqLzliLggPiB5dXVrYXNob3VrZW5cIDsKK+e3j+e1semBuOaMmSA+IHNvdXRvdXNlbmt5b1wgOwor5Lq65rCX5b256ICFID4gbmlua2l5YWt1c2hhXCA7CivluILlhoXpgJroqbEgPiBzaGluYWl0c3V1d2FcIDsKK+S4gOetiemZuOWjqyA+IGl0dG91cmlrdXNoaVwgOwor6Kyb5ZKM5p2h57SEID4ga291d2Fqb3V5YWt1XCA7Civlt6Xmpa3pg73luIIgPiBrb3VneW91dG9zaGlcIDsKK+WNk+S4iumbu+ipsSA+IHRha3Vqb3VkZW53YVwgOwor5a6i6Kaz5Li7576pID4ga3lha2thbnNodWdpXCA7CivlhbHlkIzorIDorbAgPiBreW91ZG91Ym91Z2lcIDsKK+izvOiyt+e1hOWQiCA+IGtvdWJhaWt1bWlhaVwgOwor6KuL6LKg5LuV5LqLID4gdWtlb2lzaGlnb3RvXCA7Civpm4fnlKjlpZHntIQgPiBrb3lvdWtlaXlha3VcIDsKK+W9k+aEj+WNs+WmmSA+IHRvdWlzb2t1bXlvdVwgOwor5Yq05YON5biC5aC0ID4gcm91ZG91c2hpam91XCA7Civlj43lr77lsIvllY8gPiBoYW50YWlqaW5tb25cIDsKK+Wjq+WumOWtpuagoSA+IHNoaWthbmdha2tvdVwgOwor5ZCN6KqJ5Lya6ZW3ID4gbWVpeW9rYWljaG91XCA7CivlubPlnYfntabkuI4gPiBoZWlraW5reXV1eW9cIDsKK+Wwj+S+v+Wwj+WDpyA+IHNob3ViZW5rb3pvdVwgOwor5Lq65qip6LmC6LqqID4gamlua2VuanV1cmluXCA7CivlnKfnuK7phbjntKAgPiBhc3NodWt1c2Fuc29cIDsKK+S6uuaoqei5gui6mSA+IGppbmtlbmp1dXJpblwgOwor5bm05qyh5aCx5ZGKID4gbmVuamlob3Vrb2t1XCA7Civpg7Xkvr/nlarlj7cgPiB5dXViaW5iYW5nb3VcIDsKK+ioiOeul+WVj+mhjCA+IGtlaXNhbm1vbmRhaVwgOwor57eP5ZCI6ZuR6KqMID4gc291Z291emFzc2hpXCA7CivlnJ/lnLDlj47nlKggPiB0b2NoaXNodXV5b3VcIDsKK+W6g+WRiuWKueaenCA+IGtvdWtva3Vrb3VrYVwgOwor5bm85YWQ5pWZ6IKyID4geW91amlreW91aWt1XCA7Civov5HmiYDov7fmg5EgPiBraW5qb21laXdha3VcIDsKK+eEoemZkOe0muaVsCA+IG11Z2Vua3l1dXN1dVwgOwor5LiA5Yi75Y2D6YeRID4gaWtrb2t1c2Vua2luXCA7Civpmarlr6nliLbluqYgPiBiYWlzaGluc2VpZG9cIDsKK+e3qOmbhuapn+iDvSA+IGhlbnNodXVraW5vdVwgOwor5YWI5Y+W54m55qipID4gc2Vuc2h1dG9ra2VuXCA7CivlsILploDliIbph44gPiBzZW5tb25idW4nJ3lhXCA7Civmi4XlrZDoj4zpoZ4gPiB0YW5zaGlraW5ydWlcIDsKK+mWouS/guW8t+WMliA+IGthbmtlaWt5b3VrYVwgOwor5pS75pKD6YOo6ZqKID4ga291Z2VraWJ1dGFpXCA7Civnp5jlr4bkvJrorbAgPiBoaW1pdHN1a2FpZ2lcIDsKK+atpuiAheS/rualrSA+IG11c2hhc2h1Z3lvdVwgOwor5raI6Z+z6KOF572uID4gc2hvdW9uc291Y2hpXCA7CivmuoDlt57kuovlpIkgPiBtYW5zaHV1amloZW5cIDsKK+izh+eUo+ipleS+oSA+IHNoaXNhbmh5b3VrYVwgOwor5Ye654mI6Kix5Y+vID4gc2h1cHBhbmt5b2thXCA7Civlm73lhoXpnIDopoEgPiBrb2t1bmFpanV5b3VcIDsKK+WNg+S4h+mVt+iAhSA+IHNlbmJhbmNob3VqYVwgOwor5YyW5a2m6Kmm6aiTID4ga2FnYWt1c2hpa2VuXCA7CivntLDog57ln7nppIogPiBzYWlib3ViYWl5b3VcIDsKK+mfs+mfu+e1hOe5lCA+IG9uJydpbnNvc2hpa2lcIDsKK+WHpuWHpuaWueaWuSA+IHNob3Nob2hvdWJvdVwgOwor5bqn5qiZ5aSJ5o+bID4gemFoeW91aGVua2FuXCA7CivmqZ/morDlt6XlraYgPiBraWthaWtvdWdha3VcIDsKK+esrOS4iemDqOmVtyA+IGRhaXNhbmJ1Y2hvdVwgOwor5aWH5bKp5oCq55+zID4ga2lnYW5rYWlzZWtpXCA7CivogJDpoqjmp4vpgKAgPiB0YWlmdXVrb3V6b3VcIDsKK+efs+m5uOW3peWgtCA+IHNla2tlbmtvdWpvdVwgOwor5Zyo6YO36LuN5Lq6ID4gemFpZ291Z3VuamluXCA7Civlub3pnIrkvJrnpL4gPiB5dXVyZWlnYWlzaGFcIDsKK+eSsOWig+egtOWjiiA+IGthbmt5b3VoYWthaVwgOwor5Zu96Zqb5Li7576pID4ga29rdXNhaXNodWdpXCA7CivlvqHnr4DmlpnnkIYgPiBvc2VjaGlyeW91cmlcIDsKK+S/rueQhuW3peWgtCA+IHNodXVyaWtvdWpvdVwgOwor5ouS5ZCm5Y+N5b+cID4ga3lvaGloYW4nJ25vdVwgOwor5LiA6KiA5LiA5Y+lID4gaWNoaWdvbicnaWtrdVwgOwor5Y2Y54us6aOb6KGMID4gdGFuZG9rdWhpa291XCA7CivkuLvmqKnlnKjmsJEgPiBzaHVrZW56YWltaW5cIDsKK+S6uuagvOS4u+e+qSA+IGppbmtha3VzaHVnaVwgOwor6Ieq5q665pyq6YGCID4gamlzYXRzdW1pc3VpXCA7Civlh7rlrrbpgYHkuJYgPiBzaHVra2V0b25zZWlcIDsKK+e0kOmdqemlgumjqSA+IGhpbW9rYXdhdWRvblwgOwor5oSa5rCR5pS/562WID4gZ3VtaW5zZWlzYWt1XCA7CivljZjnp5HlpKflraYgPiB0YW5rYWRhaWdha3VcIDsKK+mBqeato+WIqea9pCA+IHRla2lzZWlyaWp1blwgOwor55m66Z+z6KiY5Y+3ID4gaGF0c3VvbmtpZ291XCA7Civou43kuovljZTlrpogPiBndW5qaWt5b3V0ZWlcIDsKK+ilv+mrmOadseS9jiA+IHNlaWtvdXRvdXRlaVwgOwor5pCN6ICX5Lq65ZOhID4gc29ubW91amluJydpblwgOwor5a6f5Yui5L6h5qC8ID4gamlzc2Vpa2FrYWt1XCA7Civmj7TnlKjoqK3oqIggPiBlbicneW91c2Vra2VpXCA7Civnj77loLTkuK3ntpkgPiBnZW5iYWNodXVrZWlcIDsKK+aEn+efpeijhee9riA+IGthbmNoaXNvdWNoaVwgOwor6K2w5rG65qmf6ZaiID4gZ2lrZXRzdWtpa2FuXCA7Civlronlv4Pnq4vlkb0gPiBhbmppbnJ5b3VtZWlcIDsKK+WQiOWQjOS6i+alrSA+IGdvdWRvdWppZ3lvdVwgOwor5ZCM5pyf5L+h5Y+3ID4gZG91a2lzaGluZ291XCA7Civku7LplpPmhI/orZggPiBuYWthbWFpc2hpa2lcIDsKK+WqkuS7i+WkieaVsCA+IGJhaWthaWhlbnN1dVwgOwor5a+S5Lit5rC05rOzID4ga2FuY2h1dXN1aWVpXCA7Civooqvkv53pmbrniakgPiBoaWhva2VuYnV0c3VcIDsKK+aal+auuuS6i+S7tiA+IGFuc2F0c3VqaWtlblwgOwor5oqY6KG35Li7576pID4gc2V0Y2h1dXNodWdpXCA7CivljZjlvI/nsL/oqJggPiB0YW5zaGlraWJva2lcIDsKK+aVmemkiuiqsueoiyA+IGt5b3V5b3VrYXRlaVwgOwor5LiJ6ICF5Lya6KuHID4gc2Fuc2hha2FpZGFuXCA7CivpgKPoqJjmipXnpaggPiByZW5raXRvdWh5b3VcIDsKK+W/g+eQhueKtuaFiyA+IHNoaW5yaWpvdXRhaVwgOwor5rW35aSW5biC5aC0ID4ga2FpZ2Fpc2hpam91XCA7Civml6LmiJDkuovlrp8gPiBraXNlaWppaml0c3VcIDsKK+S6i+WLmee3j+WxgCA+IGppbXVzb3VreW9rdVwgOwor5YmN6YCy5Z+65ZywID4gemVuc2hpbmtpY2hpXCA7CivlkIzlt6XnlbDmm7IgPiBkb3Vrb3Vpa3lva3VcIDsKK+WRvemhjOmWouaVsCA+IG1laWRhaWthbnN1dVwgOwor5YyX6KW/6Iiq6LevID4gaG9rdXNlaWtvdXJvXCA7CivlkIjlkIzkvJrlkIggPiBnb3Vkb3VrYWlnb3VcIDsKK+eri+WcsOadoeS7tiA+IHJpdGNoaWpvdWtlblwgOwor5Zyw55CG5a2m6ICFID4gY2hpcmlnYWt1c2hhXCA7CivlpKfmiYDpq5jmiYAgPiB0YWlzaG9rb3VzaG9cIDsKK+mHjeikh+S/nemZuiA+IGp1dWZ1a3Vob2tlblwgOwor6YCa5bi45YW15ZmoID4gdHN1dWpvdWhlaWtpXCA7CivlpJblm73pg6jpmoogPiBnYWlrb2t1YnV0YWlcIDsKK+aWh+WMluS6pOa1gSA+IGJ1bmtha291cnl1dVwgOwor5biC5aSW6YCa6KmxID4gc2hpZ2FpdHN1dXdhXCA7Civmr5vntLDooYDnrqEgPiBtb3VzYWlrZWtrYW5cIDsKK+WLleaFi+e1seioiCA+IGRvdXRhaXRvdWtlaVwgOwor56S+5YaF5oOF5aCxID4gc2hhbmFpam91aG91XCA7CivkuK3lhazmlofluqsgPiBjaHV1a291YnVua29cIDsKK+Wcp+mbu+WKueaenCA+IGF0c3VkZW5rb3VrYVwgOwor6a2R6a2F6a2N6a2OID4gY2hpbWltb3VyeW91XCA7CivlvqrnkrDns7vntbEgPiBqdW5rYW5rZWl0b3VcIDsKK+WvvuS6uumWouS/giA+IHRhaWppbmthbmtlaVwgOwor5pmu6YCa6YG45oyZID4gZnV0c3V1c2Vua3lvXCA7CivmnaHku7bpl5jkuokgPiBqb3VrZW50b3Vzb3VcIDsKK+WNg+eKtuS4h+aFiyA+IHNlbmpvdWJhbnRhaVwgOwor5YyW5oiQ5bel5qWtID4ga2FzZWlrb3VneW91XCA7CivntYzmuIjljp/oq5YgPiBrZWl6YWlnZW5yb25cIDsKK+aoqeisgOihk+aVsCA+IGtlbmJvdWp1c3N1dVwgOwor5LiN5o+u55m65oCnID4gZnVraWhhdHN1c2VpXCA7Civpq5jnrYnlrabmoKEgPiBrb3V0b3VnYWtrb3VcIDsKK+mAo+WQiOeOi+WbvSA+IHJlbmdvdW91a29rdVwgOwor6YO15L6/5pu457ChID4geXV1Ymluc2hva2FuXCA7Civmt7HorIDpgaDmha4gPiBzaGluYm91ZW5yeW9cIDsKK+S9j+awkemBi+WLlSA+IGp1dW1pbicndW5kb3VcIDsKK+azleaWh+WtpumDqCA+IGhvdWJ1bmdha3VidVwgOwor5pmu6YCa6YO15L6/ID4gZnV0c3V1eXV1YmluXCA7CivlkJvkuLvmlL/kvZMgPiBrdW5zaHVzZWl0YWlcIDsKK+aNsuWcn+mHjeadpSA+IGtlbmRvY2hvdXJhaVwgOwor5aWz5aOw5ZCI5ZSxID4gam9zZWlnYXNzaG91XCA7CivnsbPopb/miKbkuokgPiBiZWlzZWlzZW5zb3VcIDsKK+mrmOW6puaIkOmVtyA+IGtvdWRvc2VpY2hvdVwgOwor5Lm+5biD5pGp5pOmID4ga2FucHVtYXNhdHN1XCA7CivkuK3oj6/mgJ3mg7MgPiBjaHV1a2FzaGlzb3VcIDsKK+i0iOS4juiovOabuCA+IHpvdXlvc2hvdXNob1wgOwor5YWs6KGG6KGb55SfID4ga291c2h1dWVpc2VpXCA7CivnpL7kvJrnp5HlraYgPiBzaGFrYWlrYWdha3VcIDsKK+i+suiKuOWMluWtpiA+IG5vdWdlaWthZ2FrdVwgOwor5Lqk6YCa5pW055CGID4ga291dHN1dXNlaXJpXCA7Civnibnmrorpg6jpmoogPiB0b2t1c2h1YnV0YWlcIDsKK+S6i+Wun+eEoeaguSA+IGppaml0c3VtdWtvblwgOwor5a2U6ZuA5aaZ546LID4ga3VqYWt1bXlvdW91XCA7CivosqHnlKPliIbkuI4gPiB6YWlzYW5idW4nJ3lvXCA7CivpgqblrZfmlrDogZ4gPiBob3VqaXNoaW5idW5cIDsKK+apn+WLleioiOeUuyA+IGtpZG91a2Vpa2FrdVwgOwor5a2k56uL5Li7576pID4ga29yaXRzdXNodWdpXCA7CivmmI7msrvlpKnnmocgPiBtZWlqaXRlbicnbm91XCA7CivnhKbngrnot53pm6IgPiBzaG91dGVua3lvcmlcIDsKK+mbhuWQiOaZgumWkyA+IHNodXVnb3VqaWthblwgOwor5L2P5a6F5Zyw5Yy6ID4ganV1dGFrdWNoaWt1XCA7CivlpJrop5Losr/mmJMgPiB0YWtha3Vib3Vla2lcIDsKK+mdnuWWq+eFmeiAhSA+IGhpa2l0c3VlbnNoYVwgOwor5raI5YyW5LiN6ImvID4gc2hvdWthZnVyeW91XCA7CivoiJ7lj7DnhafmmI4gPiBidXRhaXNob3VtZWlcIDsKK+S4jeeUn+eUo+eahCA+IGZ1c2Vpc2FudGVraVwgOwor6Z2e55Sf55Sj55qEID4gaGlzZWlzYW50ZWtpXCA7Civli5/pm4bkurrlk6EgPiBib3NodXVqaW4nJ2luXCA7Civljp/nqL/nlKjntJkgPiBnZW5rb3V5b3VzaGlcIDsKK+eEoeaEj+itmOeahCA+IG11aXNoaWtpdGVraVwgOwor57eP5Y+45Luk5a6YID4gc291c2hpcmVpa2FuXCA7CivorbLmuKHmiYDlvpcgPiBqb3V0b3Nob3Rva3VcIDsKK+WtpuerpeS/neiCsiA+IGdha3Vkb3Vob2lrdVwgOwor5pyA57WC5YW15ZmoID4gc2Fpc2h1dWhlaWtpXCA7Civmu5HotbDou4rovKogPiBrYXNzb3VzaGFyaW5cIDsKK+aciOWIiumbkeiqjCA+IGdla2thbnphc3NoaVwgOwor5YKN6Iul54Sh5Lq6ID4gYm91amFrdWJ1amluXCA7Civli6TlirTlpYnku5UgPiBraW5yb3Vob3VzaGlcIDsKK+aAp+iFuuaRmOmZpCA+IHNlaXNlbnRla2lqb1wgOwor5oay5rOV5pS55q2jID4ga2VucG91a2Fpc2VpXCA7CivooYzot6/nl4XogIUgPiBrb3Vyb2J5b3VzaGFcIDsKK+S4gOS6uuiKneWxhSA+IGhpdG9yaXNoaWJhaVwgOwor5YWx5ZCM6Ziy6KGbID4ga3lvdWRvdWJvdWVpXCA7Civpl5jlv5fmuoDmuoAgPiB0b3VzaGltYW5tYW5cIDsKK+W4guWLouiqv+afuyA+IHNoaXNlaWNob3VzYVwgOwor5Lya5Y6t6Luf6aqoID4gZWVuJyduYW5rb3RzdVwgOwor6LuN55So5Zyw5ZuzID4gZ3VuJyd5b3VjaGl6dVwgOwor5p2x5aWU6KW/6LWwID4gdG91aG9uc2Vpc291XCA7CivkuqTku6PkvZzmpa0gPiBrb3V0YWlzYWd5b3VcIDsKK+aXpeiomOaWh+WtpiA+IG5pa2tpYnVuZ2FrdVwgOwor5pel57O757Gz5Lq6ID4gbmlra2VpYmVpamluXCA7Civoh7Plhazoh7PlubMgPiBzaGlrb3VzaGloZWlcIDsKK+mWoumAo+S8muekviA+IGthbnJlbmdhaXNoYVwgOwor5Lq65qip5a6j6KiAID4gamlua2Vuc2VuZ2VuXCA7CivkurrpgKDkurrplpMgPiBqaW56b3VuaW5nZW5cIDsKK+WCvuaWnOWutuizgyA+IGtlaXNoYXlhY2hpblwgOwor6Ieq5rCR5YWa5YmHID4gamltaW50b3Vzb2t1XCA7Civlj43lvqnoqJjlj7cgPiBoYW5wdWt1a2lnb3VcIDsKK+aXpeacrOiIquepuiA+IG5pcHBvbmtvdWt1dVwgOwor6Iux5omN5pWZ6IKyID4gZWlzYWlreW91aWt1XCA7CivmjpLmsLTmnaHku7YgPiBoYWlzdWlqb3VrZW5cIDsKK+iLseWbveiIquepuiA+IGVpa29rdWtvdWt1dVwgOwor5pqX5Lit5pG457SiID4gYW5jaHV1bW9zYWt1XCA7CivliY3lk6jpqI7lhbUgPiB6ZW5zaG91a2loZWlcIDsKK+awtOe0oOeIhuW8viA+IHN1aXNvYmFrdWRhblwgOwor5r2F5ryR55So5rC0ID4ga2FuZ2FpeW91c3VpXCA7CivkuIDmlonlsITmkoMgPiBpc3NlaXNoYWdla2lcIDsKK+Wfuui7uOmAmuiyqCA+IGtpamlrdXRzdXVrYVwgOwor5YK+5pac55Sf55SjID4ga2Vpc2hhc2Vpc2FuXCA7CivlooPnlYznkIboq5YgPiBreW91a2Fpcmlyb25cIDsKK+Wkqeeah+mZm+S4iyA+IHRlbicnbm91aGVpa2FcIDsKK+WkqeeEtuaenOaxgSA+IHRlbicnbmVua2FqdXVcIDsKK+mciuiCieS4gOiHtCA+IHJlaW5pa3VpdGNoaVwgOwor57WM5riI5b6p6IiIID4ga2VpemFpZnVra291XCA7Civkurrlj6PntbHoqIggPiBqaW5rb3V0b3VrZWlcIDsKK+aIpuaZgueUo+alrSA+IHNlbmppc2FuZ3lvdVwgOwor5Y+k6Yqt5a2m6ICFID4ga29zZW5nYWt1c2hhXCA7Civlr77lvL7pgZPlvL4gPiB0YWlkYW5kb3VkYW5cIDsKK+ijvemAoOeVquWPtyA+IHNlaXpvdWJhbmdvdVwgOwor5aSa6YeN5Lq65qC8ID4gdGFqdXVqaW5rYWt1XCA7CivkuIDliIDkuKHmlq0gPiBpdHRvdXJ5b3VkYW5cIDsKK+WFseeUo+S4u+e+qSA+IGt5b3VzYW5zaHVnaVwgOwor6KiY5ZCN5oqV56WoID4ga2ltZWl0b3VoeW91XCA7CivkvJHmhqnmmYLplpMgPiBreXV1a2VpamlrYW5cIDsKK+S4uOWkqui2s+WgtCA+IG1hcnV0YWFzaGliYVwgOwor5qGD6Imy6YGK5oivID4gbW9tb2lyb3l1dWdpXCA7Civmrablo6vpmo7ntJogPiBidXNoaWthaWt5dXVcIDsKK+Wbvemam+mbu+ipsSA+IGtva3VzYWlkZW53YVwgOwor5Lq65bel5Zyw6ZyHID4gamlua291amlzaGluXCA7CivmvZzlnKjkuLvmqKkgPiBzZW56YWlzaHVrZW5cIDsKK+mBjuWwj+ipleS+oSA+IGthc2hvdWh5b3VrYVwgOwor56+E55aH6YOo6ZaAID4gaGFuY2h1dWJ1bW9uXCA7Civkv67pgZPliLbluqYgPiBzaHV1ZG91c2VpZG9cIDsKK+e1seiqnuevhOeWhyA+IHRvdWdvaGFuY2h1dVwgOwor6KGb55Sf6Kit5YKZID4gZWlzZWlzZXRzdWJpXCA7CivkuIDmrKHnlKPlk4EgPiBpY2hpamlzYW5waW5cIDsKK+WFrOaYjuato+WkpyA+IGtvdW1laXNlaWRhaVwgOwor6Iqx54Gr57ea6aaZID4gaGFuYWJpc2Vua291XCA7CivoiLbnlKjmqZ/plqIgPiBoYWt1eW91a2lrYW5cIDsKK+WFrOawkeaoqeazlSA+IGtvdW1pbmtlbmhvdVwgOwor5piP552h54q25oWLID4ga29uc3Vpam91dGFpXCA7Civlr77lkJHou4rnt5ogPiB0YWlrb3VzaGFzZW5cIDsKK+mJhOaLs+WItuijgSA+IHRla2tlbnNlaXNhaVwgOwor5qGC5Yag6Kmp5Lq6ID4ga2Vpa2Fuc2hpamluXCA7Civkurrlj6Poqr/mn7sgPiBqaW5rb3VjaG91c2FcIDsKK+WPuOazleino+WJliA+IHNoaWhvdWthaWJvdVwgOwor5Lq65Y+j6Z2Z5oWLID4gamlua291c2VpdGFpXCA7CivmnInkvZPli5XnlKMgPiB5dXV0YWlkb3VzYW5cIDsKK+aOoeeUqOippumokyA+IHNhaXlvdXNoaWtlblwgOwor5rCX6LGh5oOF5aCxID4ga2lzaG91am91aG91XCA7CivmnInnt5rmlL7pgIEgPiB5dXVzZW5ob3Vzb3VcIDsKK+WWgOeXsOaknOafuyA+IGtha3V0YW5rZW5zYVwgOwor6YO35Zyf5paZ55CGID4ga3lvdWRvcnlvdXJpXCA7CivkuInmrrXoq5bms5UgPiBzYW5kYW5yb25wb3VcIDsKK+aZguS7o+eyvuelniA+IGppZGFpc2Vpc2hpblwgOwor6KqH5aSn5bqD5ZGKID4ga29kYWlrb3Vrb2t1XCA7CivkuIDmmKjjgIXlpJwgPiBpc3Nha3VzYWt1eWFcIDsKK+mDveW4guioiOeUuyA+IHRvc2hpa2Vpa2FrdVwgOwor6Zai5p2x5LiA5YaGID4ga2FudG91aWNoaWVuXCA7Civoh6rnhLbnmbrnlJ8gPiBzaGl6ZW5oYXNzZWlcIDsKK+asveWumuaGsuazlSA+IGtpbnRlaWtlbnBvdVwgOwor5pWw5YCk5Yi25b6hID4gc3V1Y2hpc2VpZ3lvXCA7CivmrabogIXkurrlvaIgPiBtdXNoYW5pbmd5b3VcIDsKK+WIhuWRqOWbnui3ryA+IGJ1bnNodXVrYWlyb1wgOwor6Iel6b6N54K5552bID4gZ2FyeW91dGVuc2VpXCA7CivluILmsJHlpKfkvJogPiBzaGltaW50YWlrYWlcIDsKK+i1pOWtl+WbveWCtSA+IGFrYWppa29rdXNhaVwgOwor5L2/55So5pa55rOVID4gc2hpeW91aG91aG91XCA7CivlsI/mmKXml6XlkowgPiBrb2hhcnViaXlvcmlcIDsKK+WFrOW8j+ippuWQiCA+IGtvdXNoaWtpamlhaVwgOwor54Wn5bCE5Yem55CGID4gc2hvdXNoYXNob3JpXCA7Civlj4Lli6TkuqTmm78gPiBzYW5raW5rb3V0YWlcIDsKK+e+iumgreeLl+iCiSA+IHlvdXRvdWt1bmlrdVwgOwor5pah5peL5qWt6ICFID4gYXNzZW5neW91c2hhXCA7CivkvJrnpL7mpoLopoEgPiBrYWlzaGFnYWl5b3VcIDsKK+awkeS4u+aUv+S9kyA+IG1pbnNodXNlaXRhaVwgOwor57KX5pS+6L6y5qWtID4gc29ob3Vub3VneW91XCA7CivosqHli5noq7jooaggPiB6YWltdXNob2h5b3VcIDsKK+iaiuWPlue3mummmSA+IGthdG9yaXNlbmtvdVwgOwor5bqD5aCx5oOF5aCxID4ga291aG91am91aG91XCA7Civnt4rmgKXkuovmhYsgPiBraW5reXV1aml0YWlcIDsKK+Wdh+ihoeS+oeagvCA+IGtpbmtvdWtha2FrdVwgOwor5a2j56+A5aSJ55WwID4ga2lzZXRzdWhlbicnaVwgOwor5pyJ5oSf5Zyw6ZyHID4geXV1a2FuamlzaGluXCA7Civnt6nlkozmjK/li5UgPiBrYW53YXNoaW5kb3VcIDsKK+W5vemciuS6uuWPoyA+IHl1dXJlaWppbmtvdVwgOwor57Wx6Kqe5oyH5qiZID4gdG91Z29zaGloeW91XCA7CivmnIDpq5jkvqHmoLwgPiBzYWlrb3VrYWtha3VcIDsKK+mFuOaAp+eZveWcnyA+IHNhbnNlaWhha3Vkb1wgOwor5rCR5peP6KGj6KOFID4gbWluem9rdWlzaG91XCA7Civkv67lo6voqrLnqIsgPiBzaHV1c2hpa2F0ZWlcIDsKK+WFrOebiuazleS6uiA+IGtvdWVraWhvdWppblwgOwor5q205Y+y5Li7576pID4gcmVraXNoaXNodWdpXCA7CivlvIHmhbbmoLzlrZAgPiBiZW5rZWlnb3VzaGlcIDsKK+esrOS6jOS6uuensCA+IGRhaW5pbmluc2hvdVwgOwor5LiL5rWB56S+5LyaID4ga2FyeXV1c2hha2FpXCA7Civlv6vmpb3kuLvnvqkgPiBrYWlyYWt1c2h1Z2lcIDsKK+S4jeeyvuS4jeeyviA+IGZ1c2hvdWJ1c2hvdVwgOwor5Yi26ZmQ6YCf5bqmID4gc2VpZ2Vuc29rdWRvXCA7CivmlofmrabkuKHpgZMgPiBidW5idXJ5b3Vkb3VcIDsKK+S4iuaYh+mZkOW6piA+IGpvdXNob3VnZW5kb1wgOwor5L2c55So56mN5YiGID4gc2F5b3VzZWtpYnVuXCA7CivohbnnrYvpgYvli5UgPiBmdWtraW4nJ3VuZG91XCA7Civlhazoqo3oqJjpjLIgPiBrb3VuaW5raXJva3VcIDsKK+S4gOe2suaJk+WwvSA+IGljaGltb3VkYWppblwgOwor5a2m5qCh55So5ZOBID4gZ2Fra291eW91aGluXCA7CivkvY/lroXmiYvlvZMgPiBqdXV0YWt1dGVhdGVcIDsKK+iqjeefpeenkeWtpiA+IG5pbmNoaWthZ2FrdVwgOwor5ZWG5aOy6YGT5YW3ID4gc2hvdWJhaWRvdWd1XCA7Civljp/lrZDmiKbkuokgPiBnZW5zaGlzZW5zb3VcIDsKK+S6jOmHjeeEpueCuSA+IG5panV1c2hvdXRlblwgOwor5Y+j562U6Kmm5ZWPID4ga291dG91c2hpbW9uXCA7Civlm7Pmm7jppKjplbcgPiB0b3Nob2thbmNob3VcIDsKK+WcqOW6q+iqv+aVtCA+IHphaWtvY2hvdXNlaVwgOwor5a++5pWw6Zai5pWwID4gdGFpc3V1a2Fuc3V1XCA7CivmlL/mlZnkuIDoh7QgPiBzZWlreW91aXRjaGlcIDsKK+aWh+iKuOaJueiplSA+IGJ1bmdlaWhpaHlvdVwgOwor57ea5b2i5Luj5pWwID4gc2Vua2VpZGFpc3V1XCA7CivpgKPlkIjmlL/mqKkgPiByZW5nb3VzZWlrZW5cIDsKK+mgvOavjeWtkOismyA+IHRhbm9tb3NoaWtvdVwgOwor5Zyo6Z+T57Gz6LuNID4gemFpa2FuYmVpZ3VuXCA7CivkuIDlpJzkuZ7po58gPiBpY2hpeWFrb2ppa2lcIDsKK+eVsOW4uOe1guS6hiA+IGlqb3VzaHV1cnlvdVwgOwor6Kmm6aiT5Zyw542EID4gc2hpa2Vuamlnb2t1XCA7CivnpL7lk6HmlZnogrIgPiBzaGFpbmt5b3Vpa3VcIDsKK+S8gealreW5tOmHkSA+IGtpZ3lvdW5lbmtpblwgOwor5Lme6aOf5qC55oCnID4ga29qaWtpa29uam91XCA7CivkvIHmpa3lkIjlkIwgPiBraWd5b3Vnb3Vkb3VcIDsKK+iHquS4u+aMh+mHnSA+IGppc2h1c2hpc2hpblwgOwor5oSf5oWo54Sh6YePID4ga2FuZ2FpbXVyeW91XCA7CivmlbXmgKflm73lrrYgPiB0ZWtpc2Vpa29ra2FcIDsKK+etieW3rue0muaVsCA+IHRvdXNha3l1dXN1dVwgOwor5bir56+E5a2m5qChID4gc2hpaGFuZ2Fra291XCA7CivntYzmuIjnpL7kvJogPiBrZWl6YWlzaGFrYWlcIDsKK+aUueiJr+S4u+e+qSA+IGthaXJ5b3VzaHVnaVwgOwor57WM5riI5Yi26KOBID4ga2VpemFpc2Vpc2FpXCA7CivkuLvmiKbmipXmiYsgPiBzaHVzZW50b3VzaHVcIDsKK+mBiuaSg+maiuWToSA+IHl1dWdla2l0YWlpblwgOwor5LiA5pmC5biw5LyRID4gaWNoaWppa2lreXV1XCA7Civlj5fnm4roqLzliLggPiBqdWVraXNob3VrZW5cIDsKK+aLmemAn+S4u+e+qSA+IHNlc3Nva3VzaHVnaVwgOwor5pyq6ZaL5ouT5ZywID4gbWlrYWl0YWt1Y2hpXCA7CivlhajmqKnlhazkvb8gPiB6ZW5rZW5rb3VzaGlcIDsKK+e1seWItue1jOa4iCA+IHRvdXNlaWtlaXphaVwgOwor55Sw5ZyS6aKo5pmvID4gZGVuJydlbmZ1dWtlaVwgOwor5peF6KGM5pel56iLID4gcnlva291bml0dGVpXCA7CivnhKHph4/lpKfmlbAgPiBtdXJ5b3VkYWlzdXVcIDsKK+WJsuW8leatqeWQiCA+IHdhcmliaWtpYnVhaVwgOwor5Y+N5qC46YGL5YuVID4gaGFua2FrdXVuZG91XCA7CivpppnmuK/ov5TpgoQgPiBob25rb25oZW5rYW5cIDsKK+S8gealreWQiOS9tSA+IGtpZ3lvdWdhcHBlaVwgOwor6Z2e6KGM5bCR5bm0ID4gaGlrb3VzaG91bmVuXCA7Civph47lpJbmkq7lvbEgPiB5YWdhaXNhdHN1ZWlcIDsKK+WNg+aJi+ims+mfsyA+IHNlbmp1a2FuJydub25cIDsKK+eyvuelnuS4u+e+qSA+IHNlaXNoaW5zaHVnaVwgOwor57WC5aeL5LiA6LKrID4gc2h1dXNoaWlra2FuXCA7CivnnIzmsJHkvJrppKggPiBrZW5taW5rYWlrYW5cIDsKK+aVmeadoeS4u+e+qSA+IGt5b3Vqb3VzaHVnaVwgOwor5pu055Sf5Lya56S+ID4ga291c2VpZ2Fpc2hhXCA7CivnuYrntq3lt6Xmpa0gPiBzZW4nJ2lrb3VneW91XCA7CivkurrplpPlkIzlo6sgPiBuaW5nZW5kb3VzaGlcIDsKK+WLmOWQiOiyv+aYkyA+IGthbmdvdWJvdWVraVwgOwor55m+5a625LqJ6bO0ID4gaHlha2thc291bWVpXCA7CivkuJbnlYzmlL/nrZYgPiBzZWthaXNlaXNha3VcIDsKK+WutuWxi+WPsOW4syA+IGthb2t1ZGFpY2hvdVwgOwor5p2x5rW36YGT57eaID4gdG91a2FpZG91c2VuXCA7CivpgY7lvZPnq7bkuokgPiBrYXRvdWt5b3Vzb3VcIDsKK+a2suS9k+eqkue0oCA+IGVraXRhaWNoaXNzb1wgOwor5bmz5ZKM5Y2U5a6aID4gaGVpd2FreW91dGVpXCA7CivnhKHnt5rpm7vkv6EgPiBtdXNlbmRlbnNoaW5cIDsKK+WwgumWgOeUqOiqniA+IHNlbm1vbicneW91Z29cIDsKK+S6uumAoOiCpeaWmSA+IGppbnpvdWhpcnlvdVwgOwor5aSn56Cy5LiJ6ZaAID4gdGFpaG91c2FubW9uXCA7Civlrp/pqJPoo4Xnva4gPiBqaWtrZW5zb3VjaGlcIDsKK+S4reWkruWKtOWDjSA+IGNodXVvdXJvdWRvdVwgOwor5YaF57ea55Wq5Y+3ID4gbmFpc2VuYmFuZ291XCA7CivkvJ3oqJjkvZzogIUgPiBkZW5raXNha3VzaGFcIDsKK+S6uuawkeWFrOekviA+IGppbm1pbmtvdXNoYVwgOwor6YCj57Wh5YiH56ymID4gcmVucmFrdWtpcHB1XCA7CivlhbHlkIzlopPlnLAgPiBreW91ZG91Ym9jaGlcIDsKK+Wun+aFi+iqv+afuyA+IGppdHRhaWNob3VzYVwgOwor57eP5YuZ6ZW35a6YID4gc291bXVjaG91a2FuXCA7Civmt7fkubHnirbmhYsgPiBrb25yYW5qb3V0YWlcIDsKK+WutuaXj+aEj+itmCA+IGthem9rdWlzaGlraVwgOwor5aSW5p+U5YaF5YmbID4gZ2FpanV1bmFpZ291XCA7CivoqKrllY/osqnlo7IgPiBob3Vtb25oYW5iYWlcIDsKK+aOkuaWpemBi+WLlSA+IGhhaXNla2l1bmRvdVwgOwor5Y6f5a2Q5by+6aCtID4gZ2Vuc2hpZGFudG91XCA7Civllrbmpa3moYjlhoUgPiBlaWd5b3VhbicnbmFpXCA7CivlpKnmlofoiKrms5UgPiB0ZW5tb25rb3Vob3VcIDsKK+mdnuWun+mam+eahCA+IGhpamlzc2FpdGVraVwgOwor5Y+C5Yuk5Lqk5LujID4gc2Fua2lua291dGFpXCA7Civoo4/mm7jorbLmuKEgPiB1cmFnYWtpam91dG9cIDsKK+mWouS/guabuOmhniA+IGthbmtlaXNob3J1aVwgOwor5YWN6Kix55qG5LydID4gbWVua3lva2FpZGVuXCA7Civlm57ou6Lnq7bmioAgPiBrYWl0ZW5reW91Z2lcIDsKK+e1jOa4iOawtOWfnyA+IGtlaXphaXN1aWlraVwgOwor54Sh5qyy5oGs5rehID4gbXV5b2t1dGVudGFuXCA7Civoh6rmiJHlrp/nj74gPiBqaWdhaml0c3VnZW5cIDsKK+Wft+ihjOeMtuS6iCA+IHNoaWtrb3V5dXV5b1wgOwor6J6N6YCa5omL5b2iID4geXV1enV1dGVnYXRhXCA7CivljprnlJ/lubTph5EgPiBrb3VzZWluZW5raW5cIDsKK+mZouWGheaEn+afkyA+IGluJyduYWlrYW5zZW5cIDsKK+aCquaAp+awtOiFqyA+IGFrdXNlaXN1aXNodVwgOwor5Zuj5Y2B6YOO5LiIID4gZGFuanV1cm91am91XCA7Civku6Xlv4PkvJ3lv4MgPiBpc2hpbmRlbnNoaW5cIDsKK+S4gOWtl+WNg+mHkSA+IGljaGlqaXNlbmtpblwgOwor5qWt57i+5oKq5YyWID4gZ3lvdXNla2lha2thXCA7CivkuozmnZ/kuInmlocgPiBuaXNva3VzYW5tb25cIDsKK+WFteWZqOaLoeaVoyA+IGhlaWtpa2FrdXNhblwgOwor5Lqk5Y+L6Zai5L+CID4ga291eXV1a2Fua2VpXCA7Civlm73pmpvmlL/msrsgPiBrb2t1c2Fpc2VpamlcIDsKK+abuOmdouWvqeeQhiA+IHNob21lbnNoaW5yaVwgOwor5Lq66ZaT56S+5LyaID4gbmluZ2Vuc2hha2FpXCA7Civou43lm73kuLvnvqkgPiBndW5rb2t1c2h1Z2lcIDsKK+awtOS4iuertuaKgCA+IHN1aWpvdWt5b3VnaVwgOwor5rKz5Y6f5Lme6aOfID4ga2F3YXJha29qaWtpXCA7Civkuozph43mkq7lvbEgPiBuaWp1dXNhdHN1ZWlcIDsKK+e1tuWvvuipleS+oSA+IHpldHRhaWh5b3VrYVwgOwor5Zyo57Gz6YKm5Lq6ID4gemFpYmVpaG91amluXCA7Civlm5vmnIjppqzpub8gPiBzaGlnYXRzdWJha2FcIDsKK+aWsOmAsuawl+mLrSA+IHNoaW5zaGlua2llaVwgOwor5omA5b6X5o6n6ZmkID4gc2hvdG9rdWtvdWpvXCA7CivplqLkv4LkvJrnpL4gPiBrYW5rZWlnYWlzaGFcIDsKK+iHquS/oea6gOa6gCA+IGppc2hpbm1hbm1hblwgOwor5pel5pys5a2m6ICFID4gbmlob25nYWt1c2hhXCA7CivmmKXml6XlpKfnpL4gPiBrYXN1Z2F0YWlzaGFcIDsKK+aWh+aYjuekvuS8miA+IGJ1bm1laXNoYWthaVwgOwor5ZCM5Lq66ZuR6KqMID4gZG91amluemFzc2hpXCA7Civlj7jms5Xoo4HliKQgPiBzaGlob3VzYWliYW5cIDsKK+S6uuS9k+Wun+mokyA+IGppbnRhaWppa2tlblwgOwor5Lqh5ZG95pS/5qipID4gYm91bWVpc2Vpa2VuXCA7Civku7LplpPlkIzlo6sgPiBuYWthbWFkb3VzaGlcIDsKK+e1jOWWtuW3peWtpiA+IGtlaWVpa291Z2FrdVwgOwor6LOb5ZCm5Lih6KuWID4gc2FucGlyeW91cm9uXCA7CivkuI3ms5Xpm4bkvJogPiBmdWhvdXNodXVrYWlcIDsKK+ecvOmrmOaJi+S9jiA+IGdhbmtvdXNodXRlaVwgOwor6Ieq5YuV5bCP6YqDID4gamlkb3VzaG91anV1XCA7CivlnLDln5/npL7kvJogPiBjaGlpa2lzaGFrYWlcIDsKK+S6pOa1geS6uuS6iyA+IGtvdXJ5dXVqaW5qaVwgOwor54m55q6K5Yq55p6cID4gdG9rdXNodWtvdWthXCA7Civoh6rlrrbkuK3mr5IgPiBqaWthY2h1dWRva3VcIDsKK+ebsuiyq+mKg+WJtSA+IG1vdWthbmp1dXNvdVwgOwor5Lq65rCX55Wq57WEID4gbmlua2liYW5ndW1pXCA7CivmlbXmnKzkuLvnvqkgPiB0ZWtpaG9uc2h1Z2lcIDsKK+WPo+WGheaAp+S6pCA+IGtvdW5haXNlaWtvdVwgOwor6ISz6Luf5YyW55eHID4gbm91bmFua2FzaG91XCA7Civnj77lnLDms5XkurogPiBnZW5jaGlob3VqaW5cIDsKK+iHquWLlei7iuazpSA+IGppZG91c2hhZG9yb1wgOwor5LiA5pmC5YGc5q2iID4gaWNoaWppdGVpc2hpXCA7CivlrablnJLntJvkuokgPiBnYWt1ZW5mdW5zb3VcIDsKK+acgOmrmOWtpuW6nCA+IHNhaWtvdWdha3VmdVwgOwor5L+d6Zm65aWR57SEID4gaG9rZW5rZWl5YWt1XCA7CivlpbPmgKflt67liKUgPiBqb3NlaXNhYmV0c3VcIDsKK+WFkOerpeemj+eliSA+IGppZG91ZnVrdXNoaVwgOwor6Kmm6aiT5ZWP6aGMID4gc2hpa2VubW9uZGFpXCA7CivmvLjpgLLkuLvnvqkgPiB6ZW5zaGluc2h1Z2lcIDsKK+mfs+S/oeS4jemAmiA+IG9uc2hpbmZ1dHN1dVwgOwor5YuH5b6A6YKB6YCyID4geXV1b3VtYWlzaGluXCA7CivpnZnmraLnirbmhYsgPiBzZWlzaGlqb3V0YWlcIDsKK+WMl+aUr+S6i+WkiSA+IGhva3VzaGlqaWhlblwgOwor5a+45YCf6KmQ5qy6ID4gc3Vuc2hha3VzYWdpXCA7CivmjIflkI3pgJroqbEgPiBzaGltZWl0c3V1d2FcIDsKK+iLpuW/g+aDqOaGuiA+IGt1c2hpbnNhbnRhblwgOwor54m95by35LuY5LyaID4ga2Vua3lvdWZ1a2FpXCA7Civlr5LlhrfliY3nt5ogPiBrYW5yZWl6ZW5zZW5cIDsKK+mAn+W6puWItumZkCA+IHNva3Vkb3NlaWdlblwgOwor5Zub6YOo5ZCI5ZSxID4gc2hpYnVnYXNzaG91XCA7Civpm7vpm7vlhaznpL4gPiBkZW5kZW5rb3VzaGFcIDsKK+WEquWLneWAmeijnCA+IHl1dXNob3Vrb3Vob1wgOwor5Y+L5aW96Zai5L+CID4geXV1a291a2Fua2VpXCA7CivmlZHmj7Tnianos4cgPiBreXV1ZW5idXNzaGlcIDsKK+elnuekvuS7j+mWoyA+IGppbmphYnVra2FrdVwgOwor5rC05bmz5oCd6ICDID4gc3VpaGVpc2hpa291XCA7Civpn7PmhJ/mlZnogrIgPiBvbmthbmt5b3Vpa3VcIDsKK+a7nue0jeWHpuWIhiA+IHRhaW5vdXNob2J1blwgOwor5YWx5ZCM57WM5Za2ID4ga3lvdWRvdWtlaWVpXCA7Civkuozlha3mmYLkuK0gPiBuaXJva3VqaWNodXVcIDsKK+S4gOaZguiznOmHkSA+IGljaGlqaXNoaWtpblwgOwor6Ieq54S25bSH5oudID4gc2hpemVuc3V1aGFpXCA7Civlr6norbDmnKrkuoYgPiBzaGluZ2ltaXJ5b3VcIDsKK+mkiuWtkOe4gee1hCA+IHlvdXNoaWVuZ3VtaVwgOwor5rCP5peP5Yi25bqmID4gc2hpem9rdXNlaWRvXCA7Civou43pmaPljLvlraYgPiBndW5qaW4nJ2lnYWt1XCA7CivmraPlm5vpnaLkvZMgPiBzZWlzaGltZW50YWlcIDsKK+WumuagvOiri+iyoCA+IHRlaWtha3V1a2VvaVwgOwor5b6F6YGH5pS55ZaEID4gdGFpZ3V1a2FpemVuXCA7CivnuYrntq3lhYnlraYgPiBzZW4nJ2lrb3VnYWt1XCA7Civpu5LkurrpnIrmrYwgPiBrb2t1amlucmVpa2FcIDsKK+eJueauiuapn+iDvSA+IHRva3VzaHVraW5vdVwgOwor57WM6Lev56mN5YiGID4ga2Vpcm9zZWtpYnVuXCA7Civlm73llrbovrLloLQgPiBrb2t1ZWlub3Vqb3VcIDsKK+Wbveeyi+S4u+e+qSA+IGtva3VzdWlzaHVnaVwgOwor55Sy54q26IW654KOID4ga291am91c2VuJydlblwgOwor6LOH55Sj5ZCI6KiIID4gc2hpc2FuZ291a2VpXCA7Civpr6jpo7Lppqzpo58gPiBnZWlpbmJhc2hva3VcIDsKK+W/g+iHk+eZuuS9nCA+IHNoaW56b3Vob3NzYVwgOwor5paw5Lq65q2M5omLID4gc2hpbmppbmthc2h1XCA7CivovLjlhaXmiYvlvaIgPiB5dW55dXV0ZWdhdGFcIDsKK+Wcp+edgOerr+WtkCA+IGF0c3VnaXRhbnNoaVwgOwor5pyq5pS55b+D6ICFID4gbWlrYWlzaGluc2hhXCA7CivnhKHlirnmipXnpaggPiBtdWtvdXRvdWh5b3VcIDsKK+mbo+aUu+S4jeiQvSA+IG5hbmtvdWZ1cmFrdVwgOwor5LiA5b+D5ZCM5L2TID4gaXNzaGluZG91dGFpXCA7CivlrqXlkozmlL/nrZYgPiB5dXV3YXNlaXNha3VcIDsKK+mZkOeVjOWKueeUqCA+IGdlbmthaWtvdXlvdVwgOwor5Y2B5LiH5YSE5ZyfID4ganV1bWFuJydva3Vkb1wgOwor5aSJ5oWL5b+D55CGID4gaGVudGFpc2hpbnJpXCA7Civmi43lrZDoqJjlj7cgPiBoeW91c2hpa2lnb3VcIDsKK+WFrOS8muWVj+etlCA+IGtvdWthaW1vbmRvdVwgOwor6ICD5Y+k5a2m6ICFID4ga291a29nYWt1c2hhXCA7Civph47nkIPpgbjmiYsgPiB5YWt5dXVzZW5zaHVcIDsKK+WkoumBiueXheiAhSA+IG11eXV1YnlvdXNoYVwgOwor6KaB5omA6KaB5omAID4geW91c2hveW91c2hvXCA7Civkvb/lvpLntpnmib8gPiBzaGl0b2tlaXNob3VcIDsKK+WKseejgembu+a1gSA+IHJlaWppZGVucnl1dVwgOwor56S+5Lya5Yi25bqmID4gc2hha2Fpc2VpZG9cIDsKK+S7o+eQhumgmOS6iyA+IGRhaXJpcnlvdWppXCA7CivngrnmlbDliIfnrKYgPiB0ZW5zdXVraXBwdVwgOwor5YyW5oiQ6IKl5paZID4ga2FzZWloaXJ5b3VcIDsKK+acquaIkOW5tOiAhSA+IG1pc2VpbmVuc2hhXCA7CivkuIDlpKnkuIfkuZcgPiBpdHRlbmJhbmpvdVwgOwor6Kaq5a2Q6Zai5L+CID4gb3lha29rYW5rZWlcIDsKK+aBkOaAluaUv+ayuyA+IGt5b3VmdXNlaWppXCA7CivomZrmlbDljZjkvY0gPiBreW9zdXV0YW4nJ2lcIDsKK+mBuOaMmeWItuW6piA+IHNlbmt5b3NlaWRvXCA7CivlpKfpoZjmiJDlsLEgPiBkYWlnYW5qb3VqdVwgOwor5YaG5Y2T5Lya6K2wID4gZW50YWt1a2FpZ2lcIDsKK+Wkp+WuruW+oeaJgCA+IG9vbWl5YWdvc2hvXCA7CivkuIrkuIvplqLkv4IgPiBqb3VnZWthbmtlaVwgOwor5YWs5Za25LyB5qWtID4ga291ZWlraWd5b3VcIDsKK+mHjea2suWIhumboiA+IGp1dWVraWJ1bnJpXCA7Civlrp/ot7XnkIbmgKcgPiBqaXNzZW5yaXNlaVwgOwor6KGM5L2P5Z2Q6IelID4gZ3lvdWp1dXphZ2FcIDsKK+iogOihjOS4gOiHtCA+IGdlbmtvdWl0Y2hpXCA7CivluoPlpKfnhKHovrogPiBrb3VkYWltdWhlblwgOwor5YSq5YWI5LqL6aCFID4geXV1c2Vuamlrb3VcIDsKK+aQuuW4r+mbu+ipsSA+IGtlaXRhaWRlbndhXCA7CivmmYLku6PpjK/oqqQgPiBqaWRhaXNha3Vnb1wgOwor5Lq65bel6KGb5pifID4gamlua291ZWlzZWlcIDsKK+e3muW9oumghuW6jyA+IHNlbmtlaWp1bmpvXCA7CivlpJbkuqTlrpjoo5wgPiBnYWlrb3VrYW5ob1wgOwor5L2P5bGF5omL5b2TID4ganV1a3lvdGVhdGVcIDsKK+mBk+i3r+aomeekuiA+IGRvdXJvaHlvdWppXCA7CivkuojlgpnlsIbmoKEgPiB5b2Jpc2hvdWtvdVwgOwor5rCR6ZaT6aOb6KGMID4gbWlua2FuaGlrb3VcIDsKK+awuOWtkOS9nOaoqSA+IGVpa29zYWt1a2VuXCA7CivnpL7kvJrpgYvli5UgPiBzaGFrYWl1bmRvdVwgOwor56e76KGM6KiI55S7ID4gaWtvdWtlaWtha3VcIDsKK+aOpei/kee1jOi3ryA+IHNla2tpbmtlaXJvXCA7CivkuJbnlYzntYzmuIggPiBzZWthaWtlaXphaVwgOwor5rWu5LiW6I2J5a2QID4gdWtpeW96b3VzaGlcIDsKK+WumuaVsOaYr+atoyA+IHRlaXN1dXplc2VpXCA7Civlronkv53mnaHntIQgPiBhbnBvam91eWFrdVwgOwor6LKp5aOy5YCk5q61ID4gaGFuYmFpbmVkYW5cIDsKK+WfuuW6leani+mAoCA+IGtpdGVpa291em91XCA7Civlv4XpoIjmnaHku7YgPiBoaXNzdWpvdWtlblwgOwor5Yy66KOB5Yik5omAID4ga3VzYWliYW5zaG9cIDsKK+S6iOihjOa8lOe/kiA+IHlva291ZW5zaHV1XCA7CivpgbjmjJnpgYvli5UgPiBzZW5reW91bmRvdVwgOwor5Zu96Zqb6KaP5qihID4ga29rdXNhaWtpYm9cIDsKK+mBi+i7ouWFjeiosSA+IHVudGVubWVua3lvXCA7Civnt5rlvaLoq5bnkIYgPiBzZW5rZWlyb25yaVwgOwor5bm06LOA6YO15L6/ID4gbmVuZ2F5dXViaW5cIDsKK+a4qemiqOaaluaIvyA+IG9ucHV1ZGFuYm91XCA7CivlhoXpg6jmp4vpgKAgPiBuYWlidWtvdXpvdVwgOwor5LiN5a6a5Z6L6KmpID4gZnV0ZWlrZWlzaGlcIDsKK+m7hOmHkeW0h+aLnSA+IG91Z29uc3V1aGFpXCA7CivkuJboqbHlpbPmiL8gPiBzZXdhbnlvdWJvdVwgOwor54qs5YSS5a2m5rS+ID4ga2VuanVnYWt1aGFcIDsKK+S4gOWTgeaWmeeQhiA+IGlwcGlucnlvdXJpXCA7CivkupznoavphbjloakgPiBhcnl1dXNhbicnZW5cIDsKK+acieWjsOWtkOmfsyA+IHl1dXNlaXNoaWluXCA7CivnmoblhbXliLbluqYgPiBrYWloZWlzZWlkb1wgOwor5pyq57WM6aiT6ICFID4gbWlrZWlrZW5zaGFcIDsKK+S4iuaEj+S4i+mBlCA+IGpvdWlrYXRhdHN1XCA7Civou4rplpPot53pm6IgPiBzaGFrYW5reW9yaVwgOwor5rC35rKz5pmC5LujID4gaHlvdWdhamlkYWlcIDsKK+aDheWgseeQhuirliA+IGpvdWhvdXJpcm9uXCA7CivlvqHlpJrlv5nkuK0gPiBnb3RhYm91Y2h1dVwgOwor5oSb5p+T5piO546LID4gYWl6ZW5teW91b3VcIDsKK+W5s+mdouS6pOW3riA+IGhlaW1lbmtvdXNhXCA7CivntYzpqJPkuLvnvqkgPiBrZWlrZW5zaHVnaVwgOwor5byB6K235aOr5LyaID4gYmVuZ29zaGlrYWlcIDsKK+e0lOaDheWPr+aGkCA+IGp1bmpvdWthcmVuXCA7CivovInosqjlkIPmsLQgPiBzYWlrYWtpc3N1aVwgOwor5Y2K5r+B6Z+z56ymID4gaGFuZGFrdW9uZnVcIDsKK+aEm+afk+WmmeeOiyA+IGFpemVubXlvdW91XCA7Civplqjnp4DnlLvlrrYgPiBrZWlzaHV1Z2FrYVwgOwor5LiJ5Y2K6KaP566hID4gc2FuaGFua2lrYW5cIDsKK+WwgeW7uuaZguS7oyA+IGhvdWtlbmppZGFpXCA7Civotorlhqzos4fph5EgPiBldHRvdXNoaWtpblwgOwor5omA5biv6YGT5YW3ID4gc2hvdGFpZG91Z3VcIDsKK+WCsuWyuOeEoeekvCA+IGdvdWdhbmJ1cmVpXCA7CivnpL7kvJrkv53pmbogPiBzaGFrYWlob2tlblwgOwor6LyD5YSq5L2N6KuWID4ga2FrdXl1dWlyb25cIDsKK+S4luirluiqv+afuyA+IHlvcm9uY2hvdXNhXCA7CivlhqzmnJ/kvJHmmocgPiB0b3VraWt5dXVrYVwgOwor5LiK6YOo5qeL6YCgID4gam91YnVrb3V6b3VcIDsKK+ixoeW9ouaWh+WtlyA+IHNob3VrZWltb2ppXCA7CivovrLmnKzkuLvnvqkgPiBub3Vob25zaHVnaVwgOwor5LiA5YiH6KGG55SfID4gaXNzYWlzaHVqb3VcIDsKK+aXp+aFi+S+neeEtiA+IGt5dXV0YWlpemVuXCA7CivmlbTnkIbnlarlj7cgPiBzZWlyaWJhbmdvdVwgOwor5b2T5bqn6LOH55SjID4gdG91emFzaGlzYW5cIDsKK+aui+WTgeaVtOeQhiA+IHphbnBpbnNlaXJpXCA7CivlroflrpnpgJ/luqYgPiB1Y2h1dXNva3Vkb1wgOwor5Yqg5rC05YiG6KejID4ga2FzdWlidW5rYWlcIDsKK+Wuo+S8neS+oeWApCA+IHNlbmRlbmthY2hpXCA7CivlubTlraPlpYnlhawgPiBuZW5raWJvdWtvdVwgOwor6LKo5bmj57WM5riIID4ga2FoZWlrZWl6YWlcIDsKK+eEoeacn+aHsuW9uSA+IG11a2ljaG91ZWtpXCA7CivluILloLTljLrliIYgPiBzaGlqb3VrdWJ1blwgOwor5Yid5pyf6Kit5a6aID4gc2hva2lzZXR0ZWlcIDsKK+S6uumAoOe5iue2rSA+IGppbnpvdXNlbicnaVwgOwor5pmu6YCa6aCQ6YeRID4gZnV0c3V1eW9raW5cIDsKK+S9juWIqeizh+mHkSA+IHRlaXJpc2hpa2luXCA7CivnnJ/nj6DntLDlt6UgPiBzaGluanV6YWlrdVwgOwor5Li755+l5Li7576pID4gc2h1Y2hpc2h1Z2lcIDsKK+S6jOmgheS/guaVsCA+IG5pa291a2Vpc3V1XCA7CivntKDmgKfmp4vpgKAgPiBzb3NlaWtvdXpvdVwgOwor5oSb5Zu95Li7576pID4gYWlrb2t1c2h1Z2lcIDsKK+aIpumXmOaUr+aPtCA+IHNlbnRvdXNoaWVuXCA7CivkurrlkI3ovp7mm7ggPiBqaW5tZWlqaXNob1wgOwor5YmN6Lyq6aeG5YuVID4gemVucmlua3Vkb3VcIDsKK+S+oeagvOaTjeS9nCA+IGtha2FrdXNvdXNhXCA7CivlvaLogIzkuIvlraYgPiBrZWlqaWthZ2FrdVwgOwor5LiA5pyf5LiA5LyaID4gaWNoaWdvaWNoaWVcIDsKK+Wcn+acqOW3peS6iyA+IGRvYm9rdWtvdWppXCA7CivlpbPlrZDpq5jnlJ8gPiBqb3NoaWtvdXNlaVwgOwor546L6YGT5qW95ZyfID4gb3Vkb3VyYWt1ZG9cIDsKK+aCquaIpuiLpumXmCA+IGFrdXNlbmt1dG91XCA7CivnpZ7ntYzlpJbnp5EgPiBzaGlua2VpZ2VrYVwgOwor5LiN55yg5LiN5LyRID4gZnVtaW5mdWt5dXVcIDsKK+WQjeiqieaVmeaOiCA+IG1laXlva3lvdWp1XCA7Civlm7Pmm7jppKjlk6EgPiB0b3Nob2thbicnaW5cIDsKK+mrmOatjOaUvuWQnyA+IGtvdWthaG91Z2luXCA7Civmp4vmiJDljZjkvY0gPiBrb3VzZWl0YW4nJ2lcIDsKK+WkluS6uuiomOiAhSA+IGdhaWppbmtpc2hhXCA7CivkvovlpJblh6bnkIYgPiByZWlnYWlzaG9yaVwgOwor5aSr5amm6Iy256KXID4gbWVvdG9kamF3YW5cIDsKK+WFqOmdouism+WSjCA+IHplbm1lbmtvdXdhXCA7Civnvqnli5nmlZnogrIgPiBnaW11a3lvdWlrdVwgOwor5oKy6Kaz6KuW6ICFID4gaGlrYW5yb25zaGFcIDsKK+WAi+S6uuaDheWgsSA+IGtvamluam91aG91XCA7CivnlLrmrrXnlZ3mrakgPiBjaG91dGFuc2VidVwgOwor5Luj55CG5aSn5L2/ID4gZGFpcml0YWlzaGlcIDsKK+ani+mAoOS4u+e+qSA+IGtvdXpvdXNodWdpXCA7CivlhoXnt5rpm7voqbEgPiBuYWlzZW5kZW53YVwgOwor5YWs56S65L6h5qC8ID4ga291amlrYWtha3VcIDsKK+a2suS9k+mFuOe0oCA+IGVraXRhaXNhbnNvXCA7CivmsoPluqbkuIHlub4gPiB5b3Vkb2NoaW5raVwgOwor5YiR5LqL6Ki06KifID4ga2Vpamlzb3Nob3VcIDsKK+eovOWDjeS6uuWPoyA+IGthZG91amlua291XCA7Civou73mqZ/plqLpioMgPiBrZWlraWthbmp1dVwgOwor5qmf5a+G5L+d6K23ID4ga2ltaXRzdWhvZ29cIDsKK+S6iOWCmeS6pOa4iSA+IHlvYmlrb3VzaG91XCA7CivpgI/oppblm7Pms5UgPiB0b3VzaGl6dWhvdVwgOwor57e057+S6Kmm5ZCIID4gcmVuc2h1dWppYWlcIDsKK+WPr+imluWFiee3miA+IGthc2hpa291c2VuXCA7CivnrYboqJjoqabpqJMgPiBoaWtraXNoaWtlblwgOwor5YWs5a6a55u45aC0ID4ga291dGVpc291YmFcIDsKK+S+oeagvOimj+WItiA+IGtha2FrdWtpc2VpXCA7CivliqDph43lubPlnYcgPiBrYWp1dWhlaWtpblwgOwor5q2m6KOF6K2m5a6YID4gYnVzb3VrZWlrYW5cIDsKK+awtOWtkOS+m+mkiiA+IG1penVnb2t1eW91XCA7CivljYPlpInkuIfljJYgPiBzZW5wZW5iYW5rYVwgOwor5p+75a6a5L6h5qC8ID4gc2F0ZWlrYWtha3VcIDsKK+S4i+WxpOekvuS8miA+IGthc291c2hha2FpXCA7Civoh6rnhLbkuLvnvqkgPiBzaGl6ZW5zaHVnaVwgOwor6IiI5ZGz5pys5L2NID4ga3lvdW1paG9uJydpXCA7CivnhKHkvZPos4fnlKMgPiBtdXRhaXNoaXNhblwgOwor57WM5riI5bCB6Y6WID4ga2VpemFpZnV1c2FcIDsKK+ertuS6ieebuOaJiyA+IGt5b3Vzb3VhaXRlXCA7CivkupTovKrlpKfkvJogPiBnb3JpbnRhaWthaVwgOwor5pel5pys5LiJ5pmvID4gbmlob25zYW5rZWlcIDsKK+ayueaAp+Whl+aWmSA+IHl1c2VpdG9yeW91XCA7CivmlLnoqILlopfoo5wgPiBrYWl0ZWl6b3Vob1wgOwor5LiA6Iis5qaC5b+1ID4gaXBwYW5nYWluZW5cIDsKK+Wwj+S4gOaZgumWkyA+IGtvaWNoaWppa2FuXCA7CivkuInohJrmpIXlrZAgPiBzYW5reWFrdWlzdVwgOwor55qu6Iaa5oSf6KaaID4gaGlmdWthbmtha3VcIDsKK+aoqeWIqeihjOS9vyA+IGtlbnJpa291c2hpXCA7CivmvKLlrZflpInmj5sgPiBrYW5qaWhlbmthblwgOwor54Sh5L2T6LKh55SjID4gbXV0YWl6YWlzYW5cIDsKK+WFqOS9k+S8muitsCA+IHplbnRhaWthaWdpXCA7Civkuozph43mirXlvZMgPiBuaWp1dXRlaXRvdVwgOwor5qmf5qKw5paH5piOID4ga2lrYWlidW5tZWlcIDsKK+Wkqea0peS5meWlsyA+IGFtYXRzdW90b21lXCA7CivliKnlrrPplqLkv4IgPiByaWdhaWthbmtlaVwgOwor5aSa6KeS57WM5Za2ID4gdGFrYWt1a2VpZWlcIDsKK+Wkq+WppuWIpeWnkyA+IGZ1dWZ1YmVzc2VpXCA7Civml6XmnKzoqp7oqLMgPiBuaWhvbmdveWFrdVwgOwor5Lqk5o+b5qmf6IO9ID4ga291a2Fua2lub3VcIDsKK+eUo+WNteWgtOaJgCA+IHNhbnJhbmJhc2hvXCA7CivotbDooYzot53pm6IgPiBzb3Vrb3VreW9yaVwgOwor54Sh5bC957WE5ZCIID4gbXVqaW5rdW1pYWlcIDsKK+WGjeeUn+WIqeeUqCA+IHNhaXNlaXJpeW91XCA7CivoiKrnqbrmr43oiaYgPiBrb3VrdXVib2thblwgOwor5Lq65ZCN6L6e5YW4ID4gamlubWVpaml0ZW5cIDsKK+aYqOmdnuS7iuaYryA+IHNha3VoaWtvbnplXCA7CivmlrDlj6TlhbjmtL4gPiBzaGlua290ZW5oYVwgOwor57WM5Za26LOH5rqQID4ga2VpZWlzaGlnZW5cIDsKK+iiq+Wus+WmhOaDsyA+IGhpZ2FpbW91c291XCA7CivntLDoj4zlhbXlmaggPiBzYWlraW5oZWlraVwgOwor6aO95ZKM5rq25rayID4gaG91d2F5b3Vla2lcIDsKK+S4gOiIrOS8muioiCA+IGlwcGFua2Fpa2VpXCA7Civmupblgpnos4fph5EgPiBqdW5iaXNoaWtpblwgOwor5pS/5YWa5pS/5rK7ID4gc2VpdG91c2VpamlcIDsKK+avjeWtkOW5tOmHkSA+IGJvc2hpbmVua2luXCA7Civnvo7lrrnmlbTlvaIgPiBiaXlvdXNlaWtlaVwgOwor5Yid5pyf5oqV6LOHID4gc2hva2l0b3VzaGlcIDsKK+acgOefrei3nemboiA+IHNhaXRhbmt5b3JpXCA7CivlkajovrrmqZ/lmaggPiBzaHV1aGVua2lraVwgOwor5Yi26ZmQ5pmC6ZaTID4gc2VpZ2VuamlrYW5cIDsKK+WLpOWKtOaEj+assiA+IGtpbnJvdWl5b2t1XCA7CivlgInluqvkvJrnpL4gPiBzb3Vrb2dhaXNoYVwgOwor5pyq6ZaL56S+5LyaID4gbWlrYWlzaGFrYWlcIDsKK+mBjuWkp+ipleS+oSA+IGthZGFpaHlvdWthXCA7CivnoLTlu4nmgaXnvaogPiBoYXJlbmNoaXphaVwgOwor5pmC6ZmQ6KOF572uID4gamlnZW5zb3VjaGlcIDsKK+aZr+awl+WkieWLlSA+IGtlaWtpaGVuZG91XCA7CivkuIDmrKHoqJjmhrYgPiBpY2hpamlraW9rdVwgOwor6KGd5YuV6KGM54K6ID4gc2hvdWRvdWtvdWlcIDsKK+ioseWuueevhOWbsiA+IGt5b3lvdWhhbicnaVwgOwor55Sf55Sj566h55CGID4gc2Vpc2Fua2FucmlcIDsKK+WMu+eZguS8nemBkyA+IGlyeW91ZGVuZG91XCA7CivnqoHosqvlt6XkuosgPiB0b2trYW5rb3VqaVwgOwor6YG46ICD5Z+65rqWID4gc2Vua291a2lqdW5cIDsKK+mDveW4gumKgOihjCA+IHRvc2hpZ2lua291XCA7CivlrqPkvJ3mmKDnlLsgPiBzZW5kZW4nJ2VpZ2FcIDsKK+aFiOWWhOS6i+alrSA+IGppemVuamlneW91XCA7CivliqDpgJ/luqboqIggPiBrYXNva3Vkb2tlaVwgOwor5YKy5oWi5LiN6YGcID4gZ291bWFuZnVzb25cIDsKK+WIkeWLmeS9nOalrSA+IGtlaW11c2FneW91XCA7CivlnLDnkIPopo/mqKEgPiBjaGlreXV1a2lib1wgOwor6YCU5Lit6KiI5pmCID4gdG9jaHV1a2VpamlcIDsKK+mrmOWwhOeJueenkSA+IGtvdXNoYXRva2thXCA7CivkuInpnaLlha3oh4IgPiBzYW5tZW5yb3BwaVwgOwor5b6u5YiG5pat6Z2iID4gYmlidW5kYW5tZW5cIDsKK+WIhuWoqeS9nOeUqCA+IGJ1bmJlbnNheW91XCA7Civkv53lgaXkvZPogrIgPiBob2tlbnRhaWlrdVwgOwor5pq06LWw6YGL6LuiID4gYm91c291dW50ZW5cIDsKK+irruWVj+apn+mWoiA+IHNoaW1vbmtpa2FuXCA7CivnlLDoiI7oip3lsYUgPiBpbmFrYXNoaWJhaVwgOwor55mM6YG65Lyd5a2QID4gZ2FuJydpZGVuc2hpXCA7Civnmb7prLzlpJzooYwgPiBoeWFra2l5YWtvdVwgOwor5rC45bCP5L2c5qipID4gZWlrb3Nha3VrZW5cIDsKK+eEoeatu+a6gOWhgSA+IG11c2hpbWFucnVpXCA7CivkuoznlarmirXlvZMgPiBuaWJhbnRlaXRvdVwgOwor57eP5YuZ6YOo6ZW3ID4gc291bXVidWNob3VcIDsKK+iHqueUseiyv+aYkyA+IGppeXV1Ym91ZWtpXCA7CivlubPlkozmnaHpoIUgPiBoZWl3YWpvdWtvdVwgOwor5rCX5YiG6Lui5o+bID4ga2lidW50ZW5rYW5cIDsKK+WEkuaVmeS4u+e+qSA+IGp1a3lvdXNodWdpXCA7CivlpbPmrYzoiJ7kvI4gPiBvbicnbmFrYWJ1a2lcIDsKK+mjm+ihjOapn+mbsiA+IGhpa291a2lndW1vXCA7Civot6/pnaLpm7vou4ogPiByb21lbmRlbnNoYVwgOwor5Y2Y54us6KGM54K6ID4gdGFuZG9rdWtvdWlcIDsKK+iqoOW/g+iqoOaEjyA+IHNlaXNoaW5zZWlpXCA7Civml6XmnKzmlpnnkIYgPiBuaWhvbnJ5b3VyaVwgOwor5pWF5LqL5p2l5q20ID4ga29qaXJhaXJla2lcIDsKK+WGhei8quWWp+WYqSA+IHVjaGl3YWdlbmthXCA7CivkupznoZ3phbjloakgPiBhc2hvdXNhbicnZW5cIDsKK+S4gOinkueNo+W6pyA+IGlra2FrdWp1dXphXCA7Civlj43kvZPliLbmtL4gPiBoYW50YWlzZWloYVwgOwor5Yy65YqD5pW055CGID4ga3VrYWt1c2VpcmlcIDsKK+aUvuS7u+S4u+e+qSA+IGhvdW5pbnNodWdpXCA7Civpgbrml4/ntabku5ggPiBpem9rdWt5dXVmdVwgOwor5aSJ5L2N5Yi25b6hID4gaGVuJydpc2VpZ3lvXCA7Civmlofpg6jlpKfoh6MgPiBtb25idWRhaWppblwgOwor5aWz5qip6KuW6ICFID4gam9rZW5yb25zaGFcIDsKK+S4i+Wjq+WumOWFtSA+IGthc2hpa2FuaGVpXCA7CivkuK3npoXlr7rmuZYgPiBjaHV1emVuamlrb1wgOwor6KO95ZOB5Y6f5L6hID4gc2VpaGluZ2Vua2FcIDsKK+S6uuawkeS4u+e+qSA+IGppbm1pbnNodWdpXCA7Civli4nlvLfpg6jlsYsgPiBiZW5reW91YmV5YVwgOwor56We5a6u5aSW6IuRID4gamluZ3V1Z2FpZW5cIDsKK+WFqOiIrOaUr+aPtCA+IHplbnBhbnNoaWVuXCA7CivlsJHlo67mnInngrogPiBzaG91c291eXV1aVwgOwor57WM5Y+j5oqV5LiOID4ga2Vpa291dG91eW9cIDsKK+aPm+awl+ijhee9riA+IGthbmtpc291Y2hpXCA7CivlhbHlkozliLbluqYgPiBreW91d2FzZWlkb1wgOwor5LqM6Kqy5YuJ5by3ID4gbmlrYWJlbmt5b3VcIDsKK+S6iOmYsuaOpeeoriA+IHlvYm91c2Vzc2h1XCA7CivnlbDlm73mg4Xnt5IgPiBpa29rdWpvdWNob1wgOwor6YGL6Lui5YGc5q2iID4gdW50ZW50ZWlzaGlcIDsKK+aCquWPo+mbkeiogCA+IGFra291em91Z29uXCA7Civou43ms5XkvJrorbAgPiBndW5wb3VrYWlnaVwgOwor5aSp5Zyw54Sh55SoID4gdGVuY2hpbXV5b3VcIDsKK+eVsOW4uOaAp+assiA+IGlqb3VzZWl5b2t1XCA7Civkurrlt6Xlj5fog44gPiBqaW5rb3VqdXRhaVwgOwor5pel5pys5paH5rOVID4gbmlob25idW5wb3VcIDsKK+S4iuS4i+awtOmBkyA+IGpvdWdlc3VpZG91XCA7CivpioDooYzlj6PluqcgPiBnaW5rb3Vrb3V6YVwgOwor5aSP5pyf5aSn5a2mID4ga2FraWRhaWdha3VcIDsKK+mAo+mCpuitsOS8miA+IHJlbnBvdWdpa2FpXCA7CivmnKvmnJ/nl4fnirYgPiBtYWtraWpvdXRhaVwgOwor5LqU5q615YuV6KmeID4gZ29kYW5kb3VzaGlcIDsKK+eri+azleapn+mWoiA+IHJpcHBvdWtpa2FuXCA7Civlm6Dlvqrlp5Hmga8gPiBpbmp1bmtvc29rdVwgOwor5aSn5bGx5qSS6a2aID4gb29zYW5zaG91dW9cIDsKK+iZjuimlueciOeciCA+IGtvc2hpdGFudGFuXCA7Civog4zpnaLpo5vooYwgPiBoYWltZW5oaWtvdVwgOwor5by+5Li46YGT6LevID4gZGFuZ2FuZG91cm9cIDsKK+WEquWFiOWkluiyqCA+IHl1dXNlbmdhaWthXCA7CivlvZPnlKjmvKLlrZcgPiB0b3V5b3VrYW5qaVwgOwor5rCR5pys5Li7576pID4gbWlucG9uc2h1Z2lcIDsKK+S6uuW3peWPl+e0myA+IGppbmtvdWp1ZnVuXCA7CivkuLvopoHniankvqEgPiBzaHV5b3VidWtrYVwgOwor5Lq65bel5Y+X57K+ID4gamlua291anVzZWlcIDsKK+eZu+Wxsembu+i7iiA+IHRvemFuZGVuc2hhXCA7CivmmqvlrprmlL/lupwgPiB6YW50ZWlzZWlmdVwgOwor5LmX5ZCI6aas6LuKID4gbm9yaWFpYmFzaGFcIDsKK+acn+aIkOWQjOebnyA+IGtpc2VpZG91bWVpXCA7CivmlaPlhYnmmJ/pm7IgPiBzYW5rb3VzZWl1blwgOwor6aOi6aST55mC5rOVID4ga2lnYXJ5b3Vob3VcIDsKK+ezuOWBj+aZr+awlyA+IGl0b2hlbmtlaWtpXCA7CivniankvqHlpInli5UgPiBidWtrYWhlbmRvdVwgOwor6L+R6YOK6YO95biCID4ga2lua291dG9zaGlcIDsKK+WFrOmWi+acn+mWkyA+IGtvdWthaWtpa2FuXCA7CivliY3lvozkuI3oppogPiB6ZW5nb2Z1a2FrdVwgOwor5rqW5YKZ5L2T5pONID4ganVuYml0YWlzb3VcIDsKK+avjeezu+WutuaXjyA+IGJva2Vpa2F6b2t1XCA7Civmra/np5HljLvooZMgPiBzaGlrYWlqdXRzdVwgOwor6YeR566h5qW95ZmoID4ga2lua2FuZ2Fra2lcIDsKK+WIh+eji+eQouejqCA+IHNlc3NhdGFrdW1hXCA7CivkuIDmmYLop6Ppm4cgPiBpY2hpamlrYWlrb1wgOwor6YGL6Lui6LOH6YeRID4gdW50ZW5zaGlraW5cIDsKK+WhkeaAp+mZkOeVjCA+IHNvc2VpZ2Vua2FpXCA7Civph5HmqKnmlL/msrsgPiBraW5rZW5zZWlqaVwgOwor6Ziy5b6h6YOo6ZqKID4gYm91Z3lvYnV0YWlcIDsKK+mdmeatouihm+aYnyA+IHNlaXNoaWVpc2VpXCA7Civlho3luqbljZTorbAgPiBzYWlkb2t5b3VnaVwgOwor5LiA5YiH5ZCI6LKhID4gaXNzYWlnYXNzYWlcIDsKK+mBuueUo+ebuOe2miA+IGlzYW5zb3V6b2t1XCA7CivloZHmgKflpInlvaIgPiBzb3NlaWhlbmtlaVwgOwor5LiA5aSp5Zub5rW3ID4gaXR0ZW5zaGlrYWlcIDsKK+mfs+mfv+WKueaenCA+IG9ua3lvdWtvdWthXCA7CivljZjmnKzkvY3mgKcgPiB0YW5ob24nJ2lzZWlcIDsKK+mbsuaVo+mcp+a2iCA+IHVuc2FubXVzaG91XCA7CivlhajkvZPkuLvnvqkgPiB6ZW50YWlzaHVnaVwgOwor5YGc5q2i5pmC6ZaTID4gdGVpc2hpamlrYW5cIDsKK+S9juepuumjm+ihjCA+IHRlaWt1dWhpa291XCA7CivmlK/luqbpg6jlsYsgPiBzaGl0YWt1YmV5YVwgOwor5Yqg5bel6LK/5piTID4ga2Frb3Vib3Vla2lcIDsKK+ihm+aYn+aUvumAgSA+IGVpc2VpaG91c291XCA7Civpm7vmsJfliIbop6MgPiBkZW5raWJ1bmthaVwgOwor6aKo6Ie05Zyw5Yy6ID4gZnV1Y2hpY2hpa3VcIDsKK+WvhumWieWuueWZqCA+IG1pcHBlaXlvdWtpXCA7CivpgKPluK/lgrXli5kgPiByZW50YWlzYWltdVwgOwor6YeR5Ymb6Jap5aCVID4ga29uZ291c2F0dGFcIDsKK+S4gOS6uuWkqeS4iyA+IGhpdG9yaWRlbmthXCA7CivmmYLplpPlj43ou6IgPiBqaWthbmhhbnRlblwgOwor6KW/5qyn5paH5piOID4gc2Vpb3VidW5tZWlcIDsKK+S4i+mDqOe1hOe5lCA+IGthYnVzb3NoaWtpXCA7Civnm7jkuZflirnmnpwgPiBzb3Vqb3Vrb3VrYVwgOwor5rC05bmz6Led6ZuiID4gc3VpaGVpa3lvcmlcIDsKK+i7jeWCmeaSpOW7gyA+IGd1bmJpdGVwcGFpXCA7Civlm7rmnInlkI3oqZ4gPiBrb3l1dW1laXNoaVwgOwor5Lq66ZaT55aO5aSWID4gbmluZ2Vuc29nYWlcIDsKK+acieapn+WMluWtpiA+IHl1dWtpa2FnYWt1XCA7Civku7LplpPlgKTmrrUgPiBuYWthbWFuZWRhblwgOwor5rip5pWF55+l5pawID4gb25rb2NoaXNoaW5cIDsKK+aal+imluijhee9riA+IGFuc2hpc291Y2hpXCA7Civlm73lrrboqabpqJMgPiBrb2trYXNoaWtlblwgOwor6Z2S5p6c5biC5aC0ID4gc2Vpa2FpY2hpYmFcIDsKK+awkeS6i+ijgeWIpCA+IG1pbmppc2FpYmFuXCA7Civljp/lrZDlhbXlmaggPiBnZW5zaGloZWlraVwgOwor6IKv5a6a5b+c562UID4ga291dGVpb3V0b3VcIDsKK+WkieabtOS4jeiDvSA+IGhlbmtvdWZ1bm91XCA7CivntIDli6LmnKznt5ogPiBraXNlaWhvbnNlblwgOwor6bq76KOP6I2J5bGlID4gYXNhdXJhem91cmlcIDsKK+WPsOa5vuWdiuS4uyA+IHRhaXdhbmJvdXp1XCA7CivlraPliIrpm5HoqowgPiBraWthbnphc3NoaVwgOwor5Y2X6Zi/5oim5LqJID4gbmFuJydhc2Vuc291XCA7CivnhKHnt5rlkajms6IgPiBtdXNlbnNodXVoYVwgOwor6ZW35pyf6YeR5YipID4gY2hvdWtpa2lucmlcIDsKK+mjm+ihjOapn+etiSA+IGhpa291a2luYWRvXCA7CivlgoDlhKHmlL/lupwgPiBrYWlyYWlzZWlmdVwgOwor5biC5aSW6Zu76KmxID4gc2hpZ2FpZGVud2FcIDsKK+mAo+mCpuaUv+W6nCA+IHJlbnBvdXNlaWZ1XCA7CivmlL7mrYzpq5jlkJ8gPiBob3VrYWtvdWdpblwgOwor5b6u6YeP5YWD57SgID4gYmlyeW91Z2Vuc29cIDsKK+iLseWtl+aWsOiBniA+IGVpamlzaGluYnVuXCA7CivmuoDouqvlibXnl40gPiBtYW5zaGluc291aVwgOwor56ys5LqM57WE5ZCIID4gZGFpbmlrdW1pYWlcIDsKK+WppuS6uuitpuWumCA+IGZ1amlua2Vpa2FuXCA7CivnrKzkuInkuJbnlYwgPiBkYWlzYW5zZWthaVwgOwor5q+Y5rKZ6ZaA5aSpID4gYmlzaGFtb250ZW5cIDsKK+ekvuS8muS4u+e+qSA+IHNoYWthaXNodWdpXCA7CivlrabkvY3oq5bmlocgPiBnYWt1aXJvbmJ1blwgOwor56S+5Lqk6L6e5LukID4gc2hha291amlyZWlcIDsKK+W+tOWFteW/jOmBvyA+IGNob3VoZWlraWhpXCA7CivmqZ/kvJrlnYfnrYkgPiBraWthaWtpbnRvdVwgOwor5pqr5a6a5o6q572uID4gemFudGVpc29jaGlcIDsKK+aWueWQkemfs+eXtCA+IGhvdWtvdW9uY2hpXCA7CivkuJbnlYzpioDooYwgPiBzZWthaWdpbmtvdVwgOwor5YWo5qip5aeU5Lu7ID4gemVua2VuJydpbmluXCA7Civoh6rnhLboqIDoqp4gPiBzaGl6ZW5nZW5nb1wgOwor6KqH5aSn5aaE5oOzID4ga29kYWltb3Vzb3VcIDsKK+WMlueyp+mBk+WFtyA+IGtlc2hvdWRvdWd1XCA7CivkuI3lpInos4fmnKwgPiBmdWhlbnNoaWhvblwgOwor6LOe5ZGz5pyf6ZmQID4gc2hvdW1pa2lnZW5cIDsKK+W/g+iHk+WkluenkSA+IHNoaW56b3VnZWthXCA7Civlub7kvZXntJrmlbAgPiBraWtha3l1dXN1dVwgOwor5LiJ6YOo5ZCI5aWPID4gc2FuYnVnYXNzb3VcIDsKK+iSmeWPpOS6uueoriA+IG1vdWtvamluc2h1XCA7Civpm7vmsJfljJblraYgPiBkZW5raWthZ2FrdVwgOwor6LGG6IWQ5LiA5LiBID4gdG91ZnVpdGNob3VcIDsKK+a2iOiyu+mDveW4giA+IHNob3VoaXRvc2hpXCA7CivkuIDkuIDjgIfnlaogPiBoeWFrdXRvb2JhblwgOwor5a625peP5Yi25bqmID4ga2F6b2t1c2VpZG9cIDsKK+eUn+WtmOacn+mWkyA+IHNlaXpvbmtpa2FuXCA7Civph47oia/ku5XkuosgPiBub3Jhc2hpZ290b1wgOwor5pel5LyK6L6e5YW4ID4gbmljaGlpaml0ZW5cIDsKK+S4jeato+S5l+i7iiA+IGZ1c2Vpam91c2hhXCA7Civoqr/mn7vntZDmnpwgPiBjaG91c2FrZWtrYVwgOwor5LiN5b2T5buJ5aOyID4gZnV0b3VyZW5iYWlcIDsKK+a7heWkmuefoumxiCA+IG1ldHRheWF0YXJhXCA7CivliY3kurrmnKrouI8gPiB6ZW5qaW5taXRvdVwgOwor5LiN5b2T5Yip5b6XID4gZnV0b3VyaXRva3VcIDsKK+WbnuaVmeWvuumZoiA+IGthaWt5b3VqaWluXCA7Civou43kuovoqJPnt7QgPiBndW5qaWt1bnJlblwgOwor57eP5ZCI5Y+j5bqnID4gc291Z291a291emFcIDsKK+mDoeecjOWItuW6piA+IGd1bmtlbnNlaWRvXCA7Civkvb/nlKjlj6/og70gPiBzaGl5b3VrYW5vdVwgOwor5YaF6YOo55WZ5L+dID4gbmFpYnVyeXV1aG9cIDsKK+WGjeiyqeWItuW6piA+IHNhaWhhbnNlaWRvXCA7CivooqvpgbjmjJnmqKkgPiBoaXNlbmt5b2tlblwgOwor54mp5L6h57Wx5Yi2ID4gYnVra2F0b3VzZWlcIDsKK+WboOaVsOWIhuinoyA+IGluc3V1YnVua2FpXCA7CivnlJ/nlJ/mtYHou6IgPiBzZWlzZWlydXRlblwgOwor54Sh55+l6JKZ5pinID4gbXVjaGltb3VtYWlcIDsKK+WgleiQveWdiuS4uyA+IGRhcmFrdWJvdXp1XCA7CivoiJ7lj7Dluqbog7ggPiBidXRhaWRva3lvdVwgOwor5rOw6KW/5ZCN55S7ID4gdGFpc2VpbWVpZ2FcIDsKK+azleayu+WbveWutiA+IGhvdWNoaWtva2thXCA7CivlhKrlhYjpoIbkvY0gPiB5dXVzZW5qdW4nJ2lcIDsKK+WNmOS9jee1hOWQiCA+IHRhbicnaWt1bWlhaVwgOwor566h55CG5oOF5aCxID4ga2Fucmlqb3Vob3VcIDsKK+WujOWFqOS4u+e+qSA+IGthbnplbnNodWdpXCA7CivkuIPkuI3mgJ3orbAgPiBuYW5hZnVzaGlnaVwgOwor5aCx5b6p6KGM54K6ID4gaG91ZnVrdWtvdWlcIDsKK+Wuo+S8neaWh+WPpSA+IHNlbmRlbm1vbmt1XCA7CivkuozmiJDmlofns7sgPiBuaXNlaWJ1bmtlaVwgOwor5L2T5YaF5pmC6KiIID4gdGFpbmFpZG9rZWlcIDsKK+WMuueUu+aVtOeQhiA+IGt1a2FrdXNlaXJpXCA7CivntYLlpJzpgYvou6IgPiBzaHV1eWF1bnRlblwgOwor5Yqg6YCf6YGL5YuVID4ga2Fzb2t1dW5kb3VcIDsKK+WvvuaKl+mDqOmaiiA+IHRhaWtvdWJ1dGFpXCA7CivntZDlqZrosrvnlKggPiBrZWtrb25oaXlvdVwgOwor6LuN5LqL5pS/5qipID4gZ3VuamlzZWlrZW5cIDsKK+acieapn+i+suazlSA+IHl1dWtpbm91aG91XCA7CivpmLLooZvpg6jplbcgPiBib3VlaWJ1Y2hvdVwgOwor6YGL5Za26LOH6YeRID4gdW4nJ2Vpc2hpa2luXCA7CivmnIjopovolY7puqYgPiB0c3VraW1pc29iYVwgOwor5Lq655Sf6Iiq6LevID4gamluc2Vpa291cm9cIDsKK+eUn+WRveS/nemZuiA+IHNlaW1laWhva2VuXCA7Civlv5zmgKXmiYvlvZMgPiBvdWt5dXV0ZWF0ZVwgOwor5pyJ5b2i54Sh5b2iID4geXV1a2VpbXVrZWlcIDsKK+WPl+S/oeWbnui3ryA+IGp1c2hpbmthaXJvXCA7Civlj4LogIPlm7Pmm7ggPiBzYW5rb3V0b3Nob1wgOwor6Iux6ZuE5bSH5oudID4gZWl5dXVzdXVoYWlcIDsKK+WPl+mok+eVquWPtyA+IGp1a2VuYmFuZ291XCA7Civph43ovrLkuLvnvqkgPiBqdXVub3VzaHVnaVwgOwor6K235Zu956We56S+ID4gZ29rb2t1amluamFcIDsKK+aYjuayu+elnuWuriA+IG1laWppamluZ3V1XCA7CivlsJHmlbDmhI/oposgPiBzaG91c3V1aWtlblwgOwor5q+U57+86YCj55CGID4gaGl5b2t1cmVucmlcIDsKK+acieacn+W5tOmHkSA+IHl1dWtpbmVua2luXCA7CivkuozlhYPmlL7pgIEgPiBuaWdlbmhvdXNvdVwgOwor6Ieq5L+h6YGO5YmwID4gamlzaGlua2Fqb3VcIDsKK+Wliee0jeebuOaSsiA+IGhvdW5vdXp1bW91XCA7CivkurrouqvlvqHkvpsgPiBoaXRvbWlnb2t1dVwgOwor5L+d6K235qSc5p2fID4gaG9nb2tlbnNva3VcIDsKK+WIhuecjOWcsOWbsyA+IGJ1bmtlbmNoaXp1XCA7CivpmL/oq5vov73lvpMgPiBheXV0c3Vpc2hvdVwgOwor6Zu75YWJ55+z54GrID4gZGVua291c2Vra2FcIDsKK+azoueAvuS4h+S4iCA+IGhhcmFuYmFuam91XCA7Civnm7jkupLplqLkv4IgPiBzb3Vnb2thbmtlaVwgOwor5YaF6YOo5LuV5qeYID4gbmFpYnVzaGl5b3VcIDsKK+earuS4i+azqOWwhCA+IGhpa2FjaHV1c2hhXCA7Civkub7nh6Xph47oj5wgPiBrYW5zb3V5YXNhaVwgOwor55+t5qmf6Zai6YqDID4gdGFua2lrYW5qdXVcIDsKK+ePvuWcsOaZgumWkyA+IGdlbmNoaWppa2FuXCA7CivkuIDnrYnou43mm7kgPiBpdHRvdWd1bnNvdVwgOwor5a625bqt55So5ZOBID4ga2F0ZWl5b3VoaW5cIDsKK+mJseWxseaKgOW4qyA+IGtvdXphbmdpc2hpXCA7CivkuIDlrZDnm7jkvJ0gPiBpc3NoaXNvdWRlblwgOwor5pmC6ZmQ56uL5rOVID4gamlnZW5yaXBwb3VcIDsKK+aEm+WIpembouiLpiA+IGFpYmV0c3VyaWt1XCA7Civlm7rlrpros4fnlKMgPiBrb3RlaXNoaXNhblwgOwor5ZKM54us6L6e5YW4ID4gd2Fkb2t1aml0ZW5cIDsKK+eZu+agoeaLkuWQpiA+IHRvdWtvdWt5b2hpXCA7CivmvJTlpY/ml4XooYwgPiBlbnNvdXJ5b2tvdVwgOwor5pu455S76aqo6JGjID4gc2hvZ2Frb3R0b3VcIDsKK+mBi+WLlemBuOaJiyA+IHVuZG91c2Vuc2h1XCA7CivlrablnJLpg73luIIgPiBnYWt1ZW50b3NoaVwgOwor5p2x5rSL5Li7576pID4gdG91eW91c2h1Z2lcIDsKK+Wkp+miqOWRguaVtyA+IG9vYnVyb3NoaWtpXCA7CivmnInok4vosqjou4ogPiB5dXVnYWlrYXNoYVwgOwor5pS/5rK76LOH6YeRID4gc2VpamlzaGlraW5cIDsKK+iogOirluapn+mWoiA+IGdlbnJvbmtpa2FuXCA7CivppIrorbflrabmoKEgPiB5b3Vnb2dha2tvdVwgOwor6LWw6KGM5pmC6ZaTID4gc291a291amlrYW5cIDsKK+ipleS+oeWfuua6liA+IGh5b3VrYWtpanVuXCA7CivmlrDogZ7oqJjkuosgPiBzaGluYnVua2lqaVwgOwor5aSr5ZSx5amm6ZqPID4gZnVzaG91ZnV6dWlcIDsKK+mbu+WtkOi+nuabuCA+IGRlbnNoaWppc2hvXCA7CivlkIzmmYLpjLLpn7MgPiBkb3VqaXJva3VvblwgOwor566h55CG56S+5LyaID4ga2FucmlzaGFrYWlcIDsKK+S4gOimluWQjOS7gSA+IGlzc2hpZG91amluXCA7CivkuIDoppblkIzkurogPiBpc3NoaWRvdWppblwgOwor5qeL6YCg5aSJ5YyWID4ga291em91aGVua2FcIDsKK+Wls+a1geS9nOWutiA+IGpvcnl1dXNha2thXCA7CivvvJHvvJHvvJDnlaogPiBoeWFrdXRvb2JhblwgOwor5Y+45rOV5Yi25bqmID4gc2hpaG91c2VpZG9cIDsKK+WLpOWLmeS6pOS7oyA+IGtpbm11a291dGFpXCA7Civnn63nt6jmmKDnlLsgPiB0YW5wZW4nJ2VpZ2FcIDsKK+S8muWToeimj+e0hCA+IGthaWlua2l5YWt1XCA7CivkuozngrnlhYjlj5YgPiBuaXRlbnNlbnNodVwgOwor5Y+N5oim5Li7576pID4gaGFuc2Vuc2h1Z2lcIDsKK+aatOiZjummruaysyA+IGJvdWtvaHlvdWdhXCA7Civlt6bohZXmipXmiYsgPiBzYXdhbnRvdXNodVwgOwor5YmN5pyf6Kmm6aiTID4gemVua2lzaGlrZW5cIDsKK+iiq+mBuOaMmeS6uiA+IGhpc2Vua3lvbmluXCA7Civog4zlvozplqLkv4IgPiBoYWlnb2thbmtlaVwgOwor6aST6ay85aSn5bCGID4gZ2FraWRhaXNob3VcIDsKK+eVquWPt+iomOWPtyA+IGJhbmdvdWtpZ291XCA7CivliJHkuovoo5zlhJ8gPiBrZWlqaWhvc2hvdVwgOwor5LiA5L2T5YWo5L2TID4gaXR0YWl6ZW50YWlcIDsKK+a1t+mBi+WQjOebnyA+IGthaXVuZG91bWVpXCA7CivlsILlrojpmLLooZsgPiBzZW5zaHVib3VlaVwgOwor5Y2X6Zi/6YCj6YKmID4gbmFuJydhcmVucG91XCA7CivnmbrooYzpg6jmlbAgPiBoYWtrb3VidXN1dVwgOwor5YiR5LqL6KOB5YikID4ga2VpamlzYWliYW5cIDsKK+WFrOW5s+eEoeengSA+IGtvdWhlaW11c2hpXCA7CivniankvqHmjIfmlbAgPiBidWtrYXNoaXN1dVwgOwor5YiR5LqL6KKr5ZGKID4ga2VpamloaWtva3VcIDsKK+iomOiAheS8muimiyA+IGtpc2hha2Fpa2VuXCA7CivlvpPou43oqJjogIUgPiBqdXVndW5raXNoYVwgOwor56m65rCX5oq15oqXID4ga3V1a2l0ZWlrb3VcIDsKK+ePvumHkeato+S+oSA+IGdlbmtpbnNlaWthXCA7CivlpKflkIzlsI/nlbAgPiBkYWlkb3VzaG91aVwgOwor55Sf5ZG95YCr55CGID4gc2VpbWVpcmlucmlcIDsKK+mnhuWLleijhee9riA+IGt1ZG91c291Y2hpXCA7CivljYPou43kuIfppqwgPiBzZW5ndW5iYW5iYVwgOwor5aSJ5bm76Ieq5ZyoID4gaGVuZ2Vuaml6YWlcIDsKK+ebuOWvvuS4u+e+qSA+IHNvdXRhaXNodWdpXCA7Civou43ljLvlrabmoKEgPiBndW4nJ2lnYWtrb3VcIDsKK+mDveawkeS8mumkqCA+IHRvbWlua2Fpa2FuXCA7CivluILloLTkvqHlgKQgPiBzaGlqb3VrYWNoaVwgOwor5bmz5ZKM6KuW6ICFID4gaGVpd2Fyb25zaGFcIDsKK+Wwv+e0oOaoueiEgiA+IG55b3Vzb2p1c2hpXCA7CivmjoPpmaTlvZPnlaogPiBzb3VqaXRvdWJhblwgOwor5Luj55CG5oim5LqJID4gZGFpcmlzZW5zb3VcIDsKK+WcsOebpOayiOS4iyA+IGppYmFuY2hpbmthXCA7Civmp4vmiJDkuLvnvqkgPiBrb3VzZWlzaHVnaVwgOwor5q2j5aSa6Z2i5L2TID4gc2VpdGFtZW50YWlcIDsKK+S4gOWIh+WQiOWIhyA+IGlzc2FpZ2Fzc2FpXCA7Civkv53nqI7lnLDln58gPiBob3plaWNoaWlraVwgOwor5Lq65ZOh5pW055CGID4gamluJydpbnNlaXJpXCA7CivkurrplpPku6XliY0gPiBuaW5nZW4nJ2l6ZW5cIDsKK+W5s+mdouWbs+W9oiA+IGhlaW1lbnp1a2VpXCA7Civlroflrpnml4XooYwgPiB1Y2h1dXJ5b2tvdVwgOwor6I2Y5ZyS5Yi25bqmID4gc2hvdWVuc2VpZG9cIDsKK+iHquekvuijveWTgSA+IGppc2hhc2VpaGluXCA7CivliJ3mnJ/mrrXpmo4gPiBzaG9raWRhbmthaVwgOwor5YmN6YCU6YG86YGgID4gemVudG9yeW91ZW5cIDsKK+i1pOiRoeiQhOmFkiA+IGFrYWJ1ZG91c2h1XCA7Civljp/lp4vmmYLku6MgPiBnZW5zaGlqaWRhaVwgOwor5Y+C6KyA5pys6YOoID4gc2FuYm91aG9uYnVcIDsKK+Wls+WtkOWkp+eUnyA+IGpvc2hpZGFpc2VpXCA7CivmjpLlpJbpgYvli5UgPiBoYWlnYWl1bmRvdVwgOwor5rC05bmz6aOb6KGMID4gc3VpaGVpaGlrb3VcIDsKK+S9juWbnui2o+WRsyA+IHRlaWthaXNodW1pXCA7CivkupLmgbXosr/mmJMgPiBnb2tlaWJvdWVraVwgOwor5Lq66ZaT5Lul5LiKID4gbmluZ2VuJydpam91XCA7CivlgrLmhaLnhKHnpLwgPiBnb3VtYW5idXJlaVwgOwor5b6S5omL56m65ouzID4gdG9zaHVrdXVrZW5cIDsKK+S6nOeCreWMlueJqSA+IGF0YW5rYWJ1dHN1XCA7CivmsLTms7PlpKfkvJogPiBzdWllaXRhaWthaVwgOwor55S35aWz5ZCM5qipID4gZGFuam9kb3VrZW5cIDsKK+W5tOmHkeWItuW6piA+IG5lbmtpbnNlaWRvXCA7Civnqbrou43ln7rlnLAgPiBrdXVndW5raWNoaVwgOwor5aSn5ZKM5pmC5LujID4geWFtYXRvamlkYWlcIDsKK+W4neeOi+WIh+mWiyA+IHRlaW91c2Vra2FpXCA7Civlj43mlL/lupzlhZogPiBoYW5zZWlmdXRvdVwgOwor6JmO6KaW55yI44CFID4ga29zaGl0YW50YW5cIDsKK+atr+enkeeXhemZoiA+IHNoaWthYnlvdWluXCA7CivovInosqjlsa/mlbAgPiBzYWlrYXRvbnN1dVwgOwor6KuW6Kqs5aeU5ZOhID4gcm9uc2V0c3VpaW5cIDsKK+WLneaJi+asoeesrCA+IGthdHRlc2hpZGFpXCA7CivnqbrmjLrpmorlk6EgPiBrdXV0ZWl0YWlpblwgOwor6Ieq55Sx57WM5riIID4gaml5dXVrZWl6YWlcIDsKK+iyoeaUv+egtOe2uyA+IHphaXNlaWhhdGFuXCA7CivmlL/msrvnjK7ph5EgPiBzZWlqaWtlbmtpblwgOwor5omL6ZaT5LuV5LqLID4gdGVtYXNoaWdvdG9cIDsKK+S4gOacrOWLneiyoCA+IGlwcG9uc2hvdWJ1XCA7CivkuK3pgJTljYrnq68gPiBjaHV1dG9oYW5wYVwgOwor6YCa6YGO5YSA56S8ID4gdHN1dWthZ2lyZWlcIDsKK+iLseWtl+mbhuWQiCA+IGVpamlzaHV1Z291XCA7CivnvbLlkI3pgYvli5UgPiBzaG9tZWl1bmRvdVwgOwor5aGR5oCn5oyH5pWwID4gc29zZWlzaGlzdXVcIDsKK+WQiOWQjOWKtOe1hCA+IGdvdWRvdXJvdXNvXCA7CivkuLvnrqHmqZ/plqIgPiBzaHVrYW5raWthblwgOwor5aSp5rCX6YO95ZCIID4gdGVua2l0c3Vnb3VcIDsKK+WFteWZqOW3peWgtCA+IGhlaWtpa291am91XCA7CivlubPmsJHkuLvnvqkgPiBoZWltaW5zaHVnaVwgOwor5a625peP5Lya6K2wID4ga2F6b2t1a2FpZ2lcIDsKK+a4m+WCteWfuumHkSA+IGdlbnNhaWtpa2luXCA7CivnpZblhYjltIfmi50gPiBzb3NlbnN1dWhhaVwgOwor5LqL5aSn5oCd5oOzID4gamlkYWlzaGlzb3VcIDsKK+WcsOWgtOeUo+alrSA+IGppYmFzYW5neW91XCA7CivpgKPpgqblm73lrrYgPiByZW5wb3Vrb2trYVwgOwor56uL5oay5Li7576pID4gcmlra2Vuc2h1Z2lcIDsKK+WFq+aWuee+juS6uiA+IGhhcHBvdWJpamluXCA7CivkuJbnlYzmg4Xli6IgPiBzZWthaWpvdXNlaVwgOwor5LiN5b+r5oyH5pWwID4gZnVrYWlzaGlzdXVcIDsKK+mBoOa0i+iIqui3ryA+IGVuJyd5b3Vrb3Vyb1wgOwor5Zu95a6257WM5riIID4ga29ra2FrZWl6YWlcIDsKK+iHqOaZguWil+WIiiA+IHJpbmppem91a2FuXCA7CivlhazmrablkIjkvZMgPiBrb3VidWdhdHRhaVwgOwor5LqI6K6a5pys57eaID4geW9zYW5ob25zZW5cIDsKK+agueacrOS4u+e+qSA+IGtvbnBvbnNodWdpXCA7CivpnZ7luLjorabmiJIgPiBoaWpvdWtlaWthaVwgOwor5Lit5aSu5pS/5bqcID4gY2h1dW91c2VpZnVcIDsKK+WIuueKtueqgei1tyA+IHNoaWpvdXRva2tpXCA7CivlhaznmoTmibbliqkgPiBrb3V0ZWtpZnVqb1wgOwor5ZCI5oiQ5qi56ISCID4gZ291c2VpanVzaGlcIDsKK+WJsuizpuizvOiytyA+IGthcHB1a291YmFpXCA7CivmnKrmnaXmjIflkJEgPiBtaXJhaXNoaWtvdVwgOwor6Ieq55Sx5pS+5Lu7ID4gaml5dXVob3VuaW5cIDsKK+iHqui7ouWRqOacnyA+IGppdGVuc2h1dWtpXCA7Civoh6rlt7HkuLvlvLUgPiBqaWtvc2h1Y2hvdVwgOwor5Y2D6KiA5LiH6KqeID4gc2VuZ2VuYmFuZ29cIDsKK+W+kuatqeertui1sCA+IHRvaG9reW91c291XCA7CivopqrlloToqablkIggPiBzaGluemVuamlhaVwgOwor56qS57Sg5Zu65a6aID4gY2hpc3Nva290ZWlcIDsKK+a1t+S4iuS/nemZuiA+IGthaWpvdWhva2VuXCA7Civpo5vooYznlLLmnb8gPiBoaWtvdWtvdWJhblwgOwor5oyH5bCO5Li75LqLID4gc2hpZG91c2h1amlcIDsKK+ebuOS6kumKgOihjCA+IHNvdWdvZ2lua291XCA7Civou43lj7jku6Tpg6ggPiBndW5zaGlyZWlidVwgOwor6Ku45LqL5LiH56uvID4gc2hvamliYW50YW5cIDsKK+WKtOeBveS/nemZuiA+IHJvdXNhaWhva2VuXCA7CivmmYLovKrph5HliZsgPiBqaXJpbmtvbmdvdVwgOwor5oSP5rCX6Yq35rKIID4gaWtpc2hvdWNoaW5cIDsKK+mWoueojuWbnumBvyA+IGthbnplaWthaWhpXCA7CivmhI/msJfmtojmsoggPiBpa2lzaG91Y2hpblwgOwor5YmN5Lq65pyq5YiwID4gemVuamlubWl0b3VcIDsKK+WFseWSjOS4u+e+qSA+IGt5b3V3YXNodWdpXCA7CivkuojpmLLmiKbkuokgPiB5b2JvdXNlbnNvdVwgOwor6YW45oCn5Zyf5aOMID4gc2Fuc2VpZG9qb3VcIDsKK+S6uui6q+S/neittyA+IGppbnNoaW5ob2dvXCA7CivlubTph5Hkv53pmbogPiBuZW5raW5ob2tlblwgOwor5oyH5ZCR6KiA6KqeID4gc2hpa291Z2VuZ29cIDsKK+W3oeafu+mDqOmVtyA+IGp1bnNhYnVjaG91XCA7Civkv53oqLzmnJ/plpMgPiBob3Nob3VraWthblwgOwor5LiN5rOV55uj56aBID4gZnVob3VrYW5raW5cIDsKK+W+oeiLpuWKtOanmCA+IGdva3Vyb3VzYW1hXCA7CivooYzkvY/luqfoh6UgPiBneW91anV1emFnYVwgOwor6Ieq5rK75aSn6IejID4gamljaGlkYWlqaW5cIDsKK+eri+S9k+S6pOW3riA+IHJpdHRhaWtvdXNhXCA7Civnq5zpoK3om4flsL4gPiByeXV1dG91ZGFiaVwgOwor5YWF6Zu75pyf6ZaTID4ganV1ZGVua2lrYW5cIDsKK+iomOaGtuWqkuS9kyA+IGtpb2t1YmFpdGFpXCA7CivppIrorbfmlZnoq60gPiB5b3Vnb2t5b3V5dVwgOwor5Lq65pys5Li7576pID4gamlucG9uc2h1Z2lcIDsKK+a1t+a0i+aKleajhCA+IGthaXlvdXRvdWtpXCA7CivlkozmrYzlsbHnnIwgPiB3YWtheWFtYWtlblwgOwor5aSq6Zm96Zu75rOiID4gdGFpeW91ZGVucGFcIDsKK+eQhuenkeWkp+WtpiA+IHJpa2FkYWlnYWt1XCA7Civov5HooZvluKvlm6MgPiBrb25vZXNoaWRhblwgOwor5LiA6KGj5biv5rC0ID4gaWNoaWl0YWlzdWlcIDsKK+izh+acrOS4u+e+qSA+IHNoaWhvbnNodWdpXCA7Civoh6rnlLHntZDlqZogPiBqaXl1dWtla2tvblwgOwor5b+F6aCI56eR55uuID4gaGlzc3VrYW1va3VcIDsKK+i/keS7o+S4u+e+qSA+IGtpbmRhaXNodWdpXCA7CivlrojorbflpKnkvb8gPiBzaHVnb3RlbnNoaVwgOwor5L2c5qWt6YOo5LyaID4gc2FneW91YnVrYWlcIDsKK+mDveW4guWGjeeUnyA+IHRvc2hpc2Fpc2VpXCA7CivlubznlJ/lmajlrpggPiB5b3VzZWlraWthblwgOwor5b6h55So57WE5ZCIID4gZ295b3VrdW1pYWlcIDsKK+i7jeS6i+a8lOe/kiA+IGd1bmppZW5zaHV1XCA7CivkurrpgZPkuLvnvqkgPiBqaW5kb3VzaHVnaVwgOwor5YmN5Y+y5pmC5LujID4gemVuc2hpamlkYWlcIDsKK+a1t+S4iuWwgemOliA+IGthaWpvdWZ1dXNhXCA7CivmhI/lkbPmt7HplbcgPiBpbWlzaGluY2hvdVwgOwor5Lqk6YCa6YGV5Y+NID4ga291dHN1dWloYW5cIDsKK+Wbm+WNgeWFq+aJiyA+IHlvbmp1dWhhdHRlXCA7CivmiYvlt7vlr7/lj7ggPiB0ZW1ha2l6dXNoaVwgOwor5YWs6ZaL6Kyb5bqnID4ga291a2Fpa291emFcIDsKK+eJh+iogOmau+WPpSA+IGhlbmdlbnNla2t1XCA7Civpq5jplqLnqI7ljJYgPiBrb3VrYW56ZWlrYVwgOwor6YGL6YCB5Lya56S+ID4gdW5zb3VnYWlzaGFcIDsKK+adseWuruW+oeaJgCA+IHRvdWd1dWdvc2hvXCA7Civlu7bmu57liKnmga8gPiBlbnRhaXJpc29rdVwgOwor54Gr54G96K2m5aCxID4ga2FzYWlrZWlob3VcIDsKK+e3j+aMh+aPruWumCA+IHNvdXNoaWtpa2FuXCA7CivmlL7pgIHmmYLplpMgPiBob3Vzb3VqaWthblwgOwor5pyJ5a6z54Sh55uKID4geXV1Z2FpbXVla2lcIDsKK+WppuS6uuWVj+mhjCA+IGZ1amlubW9uZGFpXCA7CivmmbTogJXpm6joqq0gPiBzZWlrb3V1ZG9rdVwgOwor5bCK55qH5pSY5aS3ID4gc29uJydub3Vqb3VpXCA7CivkuI3mlofmhrLms5UgPiBmdWJ1bmtlbnBvdVwgOwor5LiA5a+45rOV5birID4gaXNzdW5ib3VzaGlcIDsKK+WPr+iDveWLleipniA+IGthbm91ZG91c2hpXCA7Civlj6TkuovmnaXmrbQgPiBrb2ppcmFpcmVraVwgOwor5a6M5YWo6ZuH55SoID4ga2FuemVua295b3VcIDsKK+WJr+m8u+iFlOeCjiA+IGZ1a3ViaWt1dWVuXCA7CivlpJrlhYPmlL7pgIEgPiB0YWdlbmhvdXNvdVwgOwor5rCX5oGv5aWE5aWEID4ga2lzb2t1ZW4nJ2VuXCA7Civph4jov6blpoLmnaUgPiBzaGFrYW55b3JhaVwgOwor5LqI57SE5ZCN57C/ID4geW95YWt1bWVpYm9cIDsKK+S4jeiyt+WQjOebnyA+IGZ1YmFpZG91bWVpXCA7CivpnZ7osrflkIznm58gPiBoaWJhaWRvdW1laVwgOwor55u45a++5pWs6KqeID4gc291dGFpa2VpZ29cIDsKK+e1jOa4iOeJueWMuiA+IGtlaXphaXRva2t1XCA7Civku7vmhI/lm6PkvZMgPiBuaW4nJ2lkYW50YWlcIDsKK+aOpeaVteenu+WLlSA+IHNldHRla2lpZG91XCA7CivpsKXlr6HlraTni6wgPiBrYW5rYWtvZG9rdVwgOwor55u45a++5aOy6LK3ID4gYWl0YWliYWliYWlcIDsKK+eEoeS6uuW3peWgtCA+IG11amlua291am91XCA7CivkuI3mj5vntJnluaMgPiBmdWthbnNoaWhlaVwgOwor55u45LmX5L2c55SoID4gc291am91c2F5b3VcIDsKK+S6iOeul+S4jei2syA+IHlvc2FuZnVzb2t1XCA7CivolqznkIbkvZznlKggPiB5YWt1cmlzYXlvdVwgOwor54K65pu/566h55CGID4ga2F3YXNla2FucmlcIDsKK+S6i+WJjeWNlOitsCA+IGppc2Vua3lvdWdpXCA7CivljprpoZTnhKHmgaUgPiBrb3VnYW5tdWNoaVwgOwor5a6J5YWo6KOF572uID4gYW56ZW5zb3VjaGlcIDsKK+epuuawl+aEn+afkyA+IGt1dWtpa2Fuc2VuXCA7CivmsLTpgZPlt6XkuosgPiBzdWlkb3Vrb3VqaVwgOwor5LiA57SZ5Y2K6YqtID4gaXNzaGloYW5zZW5cIDsKK+WPjeWwhOmBi+WLlSA+IGhhbnNoYXVuZG91XCA7CivloanpoZ7murbmtrIgPiBlbnJ1aXlvdWVraVwgOwor5aSW5Lq66YOo6ZqKID4gZ2FpamluYnV0YWlcIDsKK+aLnemHkeS4u+e+qSA+IGhhaWtpbnNodWdpXCA7CivnlbDkvZPlkIzlv4MgPiBpdGFpZG91c2hpblwgOwor5LmX5pWw5Yq55p6cID4gam91c3V1a291a2FcIDsKK+WFqOebm+aZguS7oyA+IHplbnNlaWppZGFpXCA7CivpnaLlkJHkuI3og4wgPiBtZW5rb3VmdWhhaVwgOwor56m655CG56m66KuWID4ga3V1cmlrdXVyb25cIDsKK+mdnuW4uOmajuautSA+IGhpam91a2FpZGFuXCA7Civlgrfnl43ou43kurogPiBzaG91aWd1bmppblwgOwor5pyI6LOm6LKp5aOyID4gZ2VwcHVoYW5iYWlcIDsKK+S4h+S4luS4gOezuyA+IGJhbnNlaWlra2VpXCA7CivnrKzkuozpg6jplbcgPiBkYWluaWJ1Y2hvdVwgOwor6KGM5YSA5L2c5rOVID4gZ3lvdWdpc2Fob3VcIDsKK+mHjeWKoOeul+eojiA+IGp1dWthc2FuemVpXCA7CivkuIDlv4PkuI3kubEgPiBpc3NoaW5mdXJhblwgOwor6LuN5LqL6KOB5YikID4gZ3VuamlzYWliYW5cIDsKK+eFp+aYjuWZqOWFtyA+IHNob3VtZWlraWd1XCA7CivlsY3pmYDmnpfnjosgPiBzaGlkYXJpbicnb3VcIDsKK+mBjuWOu+WujOS6hiA+IGtha29rYW5yeW91XCA7CivmiKblvozmrKflt54gPiBzZW5nb291c2h1dVwgOwor6aaW6ISz5Lya6K2wID4gc2h1bm91a2FpZ2lcIDsKK+WutuW6reaWmeeQhiA+IGthdGVpcnlvdXJpXCA7Civml6XmnKzpioDooYwgPiBuaWhvbmdpbmtvdVwgOwor6YGg5Lqk6L+R5pS7ID4gZW5rb3VraW5rb3VcIDsKK+aXi+WbnumBi+WLlSA+IHNlbmthaXVuZG91XCA7CivluLDlm73lrZDlpbMgPiBraWtva3VzaGlqb1wgOwor6ZuM6ZuE5reY5rGwID4gc2hpeXV1dG91dGFcIDsKK+mKgOacrOS9jeWItiA+IGdpbmhvbicnaXNlaVwgOwor6Ieq5qWt6Ieq5b6XID4gamlnb3VqaXRva3VcIDsKK+S4u+agvOijnOiqniA+IHNodWtha3Vob2dvXCA7CivlgpjlvaLlmajlrpggPiBzYW5rZWlraWthblwgOwor6Zu75YyW6KO95ZOBID4gZGVua2FzZWloaW5cIDsKK+izh+eUo+S+oeWApCA+IHNoaXNhbmthY2hpXCA7CivkuK3lpK7nq7bppqwgPiBjaHV1b3VrZWliYVwgOwor6LWk5a2X6LKh5pS/ID4gYWthaml6YWlzZWlcIDsKK+aUv+ayu+S6oeWRvSA+IHNlaWppYm91bWVpXCA7CivkupTljYHlubTnpa0gPiBnb2p1dW5lbnNhaVwgOwor6YG65peP5bm06YeRID4gaXpva3VuZW5raW5cIDsKK+S6uuW3peaghOmkiiA+IGppbmtvdWVpeW91XCA7Civmk6zlj6TlhbjnmoQgPiBnaWtvdGVudGVraVwgOwor6Zu75rCX5Lya56S+ID4gZGVua2lnYWlzaGFcIDsKK+awl+maj+awl+WEmCA+IGtpenVpa2ltYW1hXCA7CivnhKHlj43li5XpioMgPiBtdWhhbmRvdWp1dVwgOwor6YGg5b+D5YiG6ZuiID4gZW5zaGluYnVucmlcIDsKK+WgtOWklummrOWIuCA+IGpvdWdhaWJha2VuXCA7CivpnZLlubTmmYLku6MgPiBzZWluZW5qaWRhaVwgOwor6Ieq55Sx5ZWP6aGMID4gaml5dXVtb25kYWlcIDsKK+a8q+eUu+mbkeiqjCA+IG1hbmdhemFzc2hpXCA7CivkupzpiZvkuK3mr5IgPiBhZW5jaHV1ZG9rdVwgOwor56WW5YWI5Lyd5p2lID4gc29zZW5kZW5yYWlcIDsKK+S4gOWFmuaUr+mFjSA+IGl0dG91c2hpaGFpXCA7CivkuLvoprPkuLvnvqkgPiBzaHVrYW5zaHVnaVwgOwor5ZG85ZC45Zmo57O7ID4ga29reXV1a2lrZWlcIDsKK+eCuuabv+aKleapnyA+IGthd2FzZXRvdWtpXCA7CivkuIDnn6XljYrop6MgPiBpdGNoaWhhbmthaVwgOwor5LiN5a6a5Yag6KmeID4gZnV0ZWlrYW5zaGlcIDsKK+S7o+itsOaUv+S9kyA+IGRhaWdpc2VpdGFpXCA7CivlubPlkozmlLvli6IgPiBoZWl3YWtvdXNlaVwgOwor5L2O5L6h5qC85YyWID4gdGVpa2FrYWt1a2FcIDsKK+iCmOaOm+akheWtkCA+IGhpamlrYWtlaXN1XCA7Civlhazli5nngb3lrrMgPiBrb3VtdXNhaWdhaVwgOwor5pmv5rCX5b6q55KwID4ga2Vpa2lqdW5rYW5cIDsKK+mWouS/guazleimjyA+IGthbmtlaWhvdWtpXCA7Civos4DoqZ7kuqTmj5sgPiBnYXNoaWtvdWthblwgOwor6ICV5Zyw5pW055CGID4ga291Y2hpc2VpcmlcIDsKK+ihqOijj+S4gOS9kyA+IGh5b3VyaWl0dGFpXCA7CivlpbTpmrfop6PmlL4gPiBkb3JlaWthaWhvdVwgOwor6Zi/5aSa56aP6LGGID4gb3RhZnVrdW1hbWVcIDsKK+S8gealreaVtOWCmSA+IGtpZ3lvdXNlaWJpXCA7Civou43kuovooYzli5UgPiBndW5qaWtvdWRvdVwgOwor5Zyw5pa56Ieq5rK7ID4gY2hpaG91amljaGlcIDsKK+S4luS/l+S4u+e+qSA+IHNlem9rdXNodWdpXCA7Civpq5jngq3ntKDpi7wgPiBrb3V0YW5zb2tvdVwgOwor5pyJ5qmf6IKl5paZID4geXV1a2loaXJ5b3VcIDsKK+avlOS+i+mFjeWIhiA+IGhpcmVpaGFpYnVuXCA7Civlj43lr77pgYvli5UgPiBoYW50YWl1bmRvdVwgOwor5re75LuY5pu46aGeID4gdGVucHVzaG9ydWlcIDsKK+aBi+aEm+mBiuaIryA+IHJlbicnYWl5dXVnaVwgOwor5oqV5bCE5Y6f55CGID4gdG91c2hhZ2VucmlcIDsKK+Wkp+iogOWjruiqniA+IHRhaWdlbnNvdWdvXCA7Civph5HmnKzkvY3liLYgPiBraW5ob24nJ2lzZWlcIDsKK+mAoOiqnuaIkOWIhiA+IHpvdWdvc2VpYnVuXCA7Civnmb7np5Hovp7lhbggPiBoeWFra2FqaXRlblwgOwor5LiH5Luj5LiN5piTID4gYmFuZGFpZnVla2lcIDsKK+WNsemZuuinkuW6piA+IGtpa2Vua2FrdWRvXCA7CivljJblrablhbXlmaggPiBrYWdha3VoZWlraVwgOwor5ryi5a2X5Yi26ZmQID4ga2FuamlzZWlnZW5cIDsKK+W5tOWKn+WItuW6piA+IG5lbmtvdXNlaWRvXCA7CivmtbflupXngavlsbEgPiBrYWl0ZWlrYXphblwgOwor6ZqU6Z205o6755eSID4ga2Fra2Fzb3V5b3VcIDsKK+mdnuaIpuirluiAhSA+IGhpc2Vucm9uc2hhXCA7CivkuIfkuJbkuI3mmJMgPiBiYW5zZWlmdWVraVwgOwor5YaN55Sf57mK57atID4gc2Fpc2Vpc2VuJydpXCA7CivpgYvou6Lns7vntbEgPiB1bnRlbmtlaXRvdVwgOwor5Lu75oSP5ZCM6KGMID4gbmluJydpZG91a291XCA7Civoh6jmmYLlm73kvJogPiByaW5qaWtva2thaVwgOwor6Kmm6aiT5pyf6ZaTID4gc2hpa2Vua2lrYW5cIDsKK+W5tOWKn+WKoOS/uCA+IG5lbmtvdWthaG91XCA7Civlv5zmj7Tlm6PplbcgPiBvdWVuZGFuY2hvdVwgOwor6LuN5Yy757eP55ujID4gZ3VuJydpc291a2FuXCA7CivmhYjlloTlm6PkvZMgPiBqaXplbmRhbnRhaVwgOwor6Ieq57+S5pmC6ZaTID4gamlzaHV1amlrYW5cIDsKK+WbveWutuijnOWEnyA+IGtva2thaG9zaG91XCA7Civnm5vogIXlv4XoobAgPiBzZWlqYWhpc3N1aVwgOwor5Lq65paH5Li7576pID4gamluYnVuc2h1Z2lcIDsKK+mbu+ipseeVquWPtyA+IGRlbndhYmFuZ291XCA7CivnkIboq5bkvZPns7sgPiByaXJvbnRhaWtlaVwgOwor5pel5pys5rW35rqdID4gbmlob25rYWlrb3VcIDsKK+e1jOW4uOWIqeebiiA+IGtlaWpvdXJpZWtpXCA7CivlvJXosqzovp7ku7sgPiBpbnNla2lqaW5pblwgOwor5Yem5aWz6Iiq5rW3ID4gc2hvam9rb3VrYWlcIDsKK+S4gOi7kuS4gOi7kiA+IGlra2VuJydpa2tlblwgOwor5ZWP562U54Sh55SoID4gbW9uZG91bXV5b3VcIDsKK+mBi+WRveirluiAhSA+IHVubWVpcm9uc2hhXCA7Civoj5znqK7mooXpm6ggPiBuYXRhbmVkenV5dVwgOwor6Kqy5aSW5o6I5qWtID4ga2FnYWlqdWd5b3VcIDsKK+mbo+awkeW4sOmChCA+IG5hbm1pbmtpa2FuXCA7Civlgbblg4/noLTlo4ogPiBndXV6b3VoYWthaVwgOwor5oyH56S66KOF572uID4gc2hpamlzb3VjaGlcIDsKK+WuieWFqOWcsOW4ryA+IGFuemVuY2hpdGFpXCA7Civoh6rlt7HopIfoo70gPiBqaWtvZnVrdXNlaVwgOwor5LuW5Lq66KGM5YSAID4gdGFuaW5neW91Z2lcIDsKK+WIpOWumOi0lOWxkyA+IGhvdWdhbmJpaWtpXCA7CivlnKfmkL7nqbrmsJcgPiBhc3Nha3VrdXVraVwgOwor5YGl5bq3566h55CGID4ga2Vua291a2FucmlcIDsKK+ippumok+mjm+ihjCA+IHNoaWtlbmhpa291XCA7CivnlJ/nlKPpgY7libAgPiBzZWlzYW5rYWpvdVwgOwor55Sf55CG5LyR5pqHID4gc2VpcmlreXV1a2FcIDsKK+S6pOmam+WgtOijjyA+IGtvdXNhaWpvdXJpXCA7CivosYrogqXmnKznt5ogPiBob3VoaWhvbnNlblwgOwor5Yik5pat6KaP5rqWID4gaGFuZGFua2lqdW5cIDsKK+awl+aBr+WlhOOAhSA+IGtpc29rdWVuJydlblwgOwor5Yik5pat5Z+65rqWID4gaGFuZGFua2lqdW5cIDsKK+Wkqeizh+iLsemCgSA+IHRlbnNoaWVpbWFpXCA7CivmirXmipfpgYvli5UgPiB0ZWlrb3V1bmRvdVwgOwor6YO15L6/5YiH5omLID4geXV1Ymlua2l0dGVcIDsKK+eUsOWckumDveW4giA+IGRlbicnZW50b3NoaVwgOwor6KGj5paZ5ZOB5bqXID4gaXJ5b3VoaW50ZW5cIDsKK+S6jOmDqOWQiOWUsSA+IG5pYnVnYXNzaG91XCA7Civpm7vlrZDpoK3ohLMgPiBkZW5zaGl6dW5vdVwgOwor5Ymy6LOm6LKp5aOyID4ga2FwcHVoYW5iYWlcIDsKK+mqqOiRo+i2o+WRsyA+IGtvdHRvdXNodW1pXCA7Civou43lgpnliLbpmZAgPiBndW5iaXNlaWdlblwgOwor6YGL5YuV5LiN6LazID4gdW5kb3VidXNva3VcIDsKK+WItumZkOa8ouWtlyA+IHNlaWdlbmthbmppXCA7CivnhKHlj43li5XnoLIgPiBtdWhhbmRvdWhvdVwgOwor5Y6f5Zug5LiN5piOID4gZ2VuJydpbmZ1bWVpXCA7Civou73oh6rli5Xou4ogPiBrZWlqaWRvdXNoYVwgOwor5Y6f5a2Q5pmC5LujID4gZ2Vuc2hpamlkYWlcIDsKK+eLkOeWkemAoeW3oSA+IGtvZ2lzaHVuanVuXCA7CivnqIvluqbllY/poYwgPiB0ZWlkb21vbmRhaVwgOwor6KaP5a6a5omT5bitID4ga2l0ZWlkYXNla2lcIDsKK+miqOe0gOe0iuS5sSA+IGZ1dWtpYmlucmFuXCA7CivluILlj4LkuovkvJogPiBzaGlzYW5qaWthaVwgOwor6KiY5oa26KOF572uID4ga2lva3Vzb3VjaGlcIDsKK+mbu+awl+S8neWwjiA+IGRlbmtpZGVuZG91XCA7CivmtbflpJbmtL7lhbUgPiBrYWlnYWloYWhlaVwgOwor5aSp6LOm5Lq65qipID4gdGVucHVqaW5rZW5cIDsKK+aHuOWegumBi+WLlSA+IGtlbnN1aXVuZG91XCA7CivnpZ7np5jkuLvnvqkgPiBzaGlucGlzaHVnaVwgOwor6YGg5oWu5Lya6YeIID4gZW5yeW9lc2hha3VcIDsKK+aal+WPt+aJi+azlSA+IGFuZ291c2h1aG91XCA7CivpgYvovLjlpKfoh6MgPiB1bicneXVkYWlqaW5cIDsKK+mdnuirlueQhueahCA+IGhpcm9ucml0ZWtpXCA7Civlj7Pnv7zlm6PkvZMgPiB1eW9rdWRhbnRhaVwgOwor5L+d5YGl6KGb55SfID4gaG9rZW4nJ2Vpc2VpXCA7Civnm5flk4HmlYXosrcgPiB0b3VoaW5rb2JhaVwgOwor6Z2Z5q2i6LuM6YGTID4gc2Vpc2hpa2lkb3VcIDsKK+aFtuaHiee+qeWhviA+IGtlaW91Z2lqdWt1XCA7Civlv6vliIDkubHpursgPiBrYWl0b3VyYW5tYVwgOwor6Iez6L+R6Led6ZuiID4gc2hpa2lua3lvcmlcIDsKK+aQjeWus+S/nemZuiA+IHNvbmdhaWhva2VuXCA7Civmp4vmiJDopoHntKAgPiBrb3VzZWl5b3Vzb1wgOwor5Y2U6K2w5LqL6aCFID4ga3lvdWdpamlrb3VcIDsKK+iInuWPsOS/s+WEqiA+IGJ1dGFpaGFpeXV1XCA7CivljbHmqZ/kuIDpq6ogPiBraWtpaXBwYXRzdVwgOwor5Yy75a2m6ZuR6KqMID4gaWdha3V6YXNzaGlcIDsKK+eJqeS+oeawtOa6liA+IGJ1a2thc3VpanVuXCA7CivotaTljYHlrZfpmYQgPiBzZWtpanV1amlmdVwgOwor5om26aSK5a625pePID4gZnV5b3VrYXpva3VcIDsKK+eri+aGsuaUv+ayuyA+IHJpa2tlbnNlaWppXCA7Civkurrlt6Xoh5PlmaggPiBqaW5rb3V6b3VraVwgOwor56Wt5pS/5LiA6Ie0ID4gc2Fpc2VpaXRjaGlcIDsKK+S4jeiogOWun+ihjCA+IGZ1Z2Vuamlra291XCA7Civku5Xkuovpg6jlsYsgPiBzaGlnb3RvYmV5YVwgOwor5oiQ5Lq65pig55S7ID4gc2VpamluJydlaWdhXCA7Civoh6rnlLHllrbmpa0gPiBqaXl1dWVpZ3lvdVwgOwor5qiZ5rqW6Kqk5beuID4gaHlvdWp1bmdvc2FcIDsKK+S5s+WFkOiEmuawlyA+IG55dXVqaWtha2tlXCA7Civou43pnIDlt6XloLQgPiBndW5qdWtvdWpvdVwgOwor55u45Yqg5bmz5Z2HID4gc291a2FoZWlraW5cIDsKK+eyl+ijveS5semAoCA+IHNvc2VpcmFuem91XCA7CivlvqHlkI3lvqHnkr0gPiBneW9tZWlneW9qaVwgOwor5paH5rK75Li7576pID4gYnVuY2hpc2h1Z2lcIDsKK+iHqueEtua3mOaxsCA+IHNoaXplbnRvdXRhXCA7CivlrrblroXmjZzmn7sgPiBrYXRha3Vzb3VzYVwgOwor5pei5oiQ5qaC5b+1ID4ga2lzZWlnYWluZW5cIDsKK+aVtOWCmeW3peWgtCA+IHNlaWJpa291am91XCA7Civlr77nqbrnoLLngasgPiB0YWlrdXVob3VrYVwgOwor5rue56m65pmC6ZaTID4gdGFpa3V1amlrYW5cIDsKK+iyv+aYk+i1pOWtlyA+IGJvdWVraWFrYWppXCA7CivkuIDoqIDlsYXlo6sgPiBpY2hpZ2Vua29qaVwgOwor5bGL5LiK5bqt5ZySID4gb2t1am91dGVpZW5cIDsKK+mfs+WjsOihqOiomCA+IG9uc2VpaHlvdWtpXCA7Civlr6nnvo7kuLvnvqkgPiBzaGluYmlzaHVnaVwgOwor5b+c55So5ZWP6aGMID4gb3V5b3Vtb25kYWlcIDsKK+S6kuaBtemWoueojiA+IGdva2Vpa2FuemVpXCA7Civou5/mgKfkuIvnlrMgPiBuYW5zZWlnZWthblwgOwor5Zu96Kqe6L6e5YW4ID4ga29rdWdvaml0ZW5cIDsKK+WFrOiqjeWAmeijnCA+IGtvdW5pbmtvdWhvXCA7CivnlJ/lubTmnIjml6UgPiBzZWluZW5nYXBwaVwgOwor5aWH562W57im5qiqID4ga2lzYWt1anV1b3VcIDsKK+WFieWtpuaWh+WtlyA+IGtvdWdha3Vtb2ppXCA7CivlgZzou4rmmYLplpMgPiB0ZWlzaGFqaWthblwgOwor5YWx5ZKM5pS/5rK7ID4ga3lvdXdhc2VpamlcIDsKK+WbveW6q+WCteaoqSA+IGtva2tvc2Fpa2VuXCA7Civlo7DluK/mqKHlhpkgPiBzZWl0YWltb3NoYVwgOwor5pyA5aSn6ZmQ5bqmID4gc2FpZGFpZ2VuZG9cIDsKK+WFq+WIhumfs+espiA+IGhhY2hpYnVvbnB1XCA7Civku67mg7PnqbrplpMgPiBrYXNvdWt1dWthblwgOwor5bmz5oiQ5pmC5LujID4gaGVpc2VpamlkYWlcIDsKK+WIqeebiuekvuS8miA+IHJpZWtpc2hha2FpXCA7Civlrrbluq3oqKrllY8gPiBrYXRlaWhvdW1vblwgOwor6JaE5Yip5aSa5aOyID4gaGFrdXJpdGFiYWlcIDsKK+awkeS4u+S4u+e+qSA+IG1pbnNodXNodWdpXCA7CivlpbPmgKflkI3oqZ4gPiBqb3NlaW1laXNoaVwgOwor5oSb5oaO5L215a2YID4gYWl6b3VoZWlzb25cIDsKK+WPjeWwhOS9nOeUqCA+IGhhbnNoYXNheW91XCA7CivmnInkuovnq4vms5UgPiB5dXVqaXJpcHBvdVwgOwor55m65aOw5Zmo5a6YID4gaGFzc2Vpa2lrYW5cIDsKK+WpmuekvOiho+ijhSA+IGtvbnJlaWlzaG91XCA7CivkuK3lpK7nqoHnoLQgPiBjaHV1b3V0b3BwYVwgOwor5LiJ6aCt5pS/5rK7ID4gc2FudG91c2VpamlcIDsKK+WNsemZuuWcsOW4ryA+IGtpa2VuY2hpdGFpXCA7CivljJblrabkvZznlKggPiBrYWdha3VzYXlvdVwgOwor54Sh6ZaT5Zyw542EID4gbXVnZW5qaWdva3VcIDsKK+W+gOW+qeWIh+espiA+IG91ZnVrdWtpcHB1XCA7CivlrZjlnKjnkIbnlLEgPiBzb256YWlyaXl1dVwgOwor6Z2e56S+5Lqk55qEID4gaGlqYWtvdXRla2lcIDsKK+WwgeW7uuWItuW6piA+IGhvdWtlbnNlaWRvXCA7CivkurrouqvkuovmlYUgPiBqaW5zaGluamlrb1wgOwor5YWs6ZaL5o2c5p+7ID4ga291a2Fpc291c2FcIDsKK+aIkeeUsOW8leawtCA+IGdhZGVuJydpbnN1aVwgOwor5YuV5L2c6KiY6YyyID4gZG91c2FraXJva3VcIDsKK+aIkOWxpOeBq+WxsSA+IHNlaXNvdWthemFuXCA7CivliKnnm4rphY3lvZMgPiByaWVraWhhaXRvdVwgOwor5LiA5omA5oe45ZG9ID4gaXNzaG9rZW5tZWlcIDsKK+a6kOazieiqsueojiA+IGdlbnNlbmthemVpXCA7CivmlL/msrvntZDnpL4gPiBzZWlqaWtlc3NoYVwgOwor6aiO6aas5rCR5pePID4ga2liYW1pbnpva3VcIDsKK+malOS4lumBuuS8nSA+IGtha3VzZWlpZGVuXCA7Civlj6TpgZPlhbflsYsgPiBmdXJ1ZG91Z3V5YVwgOwor5ZC55aWP5qW95ZmoID4gc3Vpc291Z2Fra2lcIDsKK+apn+mKg+aOg+WwhCA+IGtpanV1c291c2hhXCA7CivmrablrrblsYvmlbcgPiBidWtleWFzaGlraVwgOwor552h55yg5pmC6ZaTID4gc3VpbWluamlrYW5cIDsKK+eEoeiomOWQjeagqiA+IG11a2ltZWlrYWJ1XCA7Civkuovli5nnt4/plbcgPiBqaW11c291Y2hvdVwgOwor5Li75rK75Yq56IO9ID4gc2h1amlrb3Vub3VcIDsKK+Wkqea0peW+oeelliA+IGFtYXRzdW1pb3lhXCA7CivmsJfosaHooZvmmJ8gPiBraXNob3VlaXNlaVwgOwor5pyJ5Yq55pyf6ZmQID4geXV1a291a2lnZW5cIDsKK+i+suWltOino+aUviA+IG5vdWRva2FpaG91XCA7Civlv4Poh5Ppurvnl7ogPiBzaGluem91bWFoaVwgOwor6YWU55Sf5aSi5q27ID4gc3Vpc2VpbXVzaGlcIDsKK+acieWKueacn+mWkyA+IHl1dWtvdWtpZ2VuXCA7CivnhKHms5XlnLDluK8gPiBtdWhvdWNoaXRhaVwgOwor6KGX6aCt5Yuf6YeRID4gZ2FpdG91Ym9raW5cIDsKK+iNkuWUkOeEoeeovSA+IGtvdXRvdW11a2VpXCA7CivmoITppIrkuI3otrMgPiBlaXlvdWZ1c29rdVwgOwor5ZCN6KqJ5biC5rCRID4gbWVpeW9zaGltaW5cIDsKK+i7jeS6i+WQjOebnyA+IGd1bmppZG91bWVpXCA7CivmnInlirnkvZznlKggPiB5dXVrb3VzYXlvdVwgOwor5YWI6YGj6YOo6ZqKID4gc2Vua2VuYnV0YWlcIDsKK+WYieiogOWWhOihjCA+IGthZ2VuemVua291XCA7CivlkIjlkIzkvJrorbAgPiBnb3Vkb3VrYWlnaVwgOwor6LW35q275Zue55SfID4ga2lzaGlrYWlzZWlcIDsKK+mAj+imlueUu+azlSA+IHRvdXNoaWdhaG91XCA7CivnhKHpiq3ml4XooYwgPiBtdXNlbnJ5b2tvdVwgOwor5L+d5a6J6Kit5YKZID4gaG9hbnNldHN1YmlcIDsKK+WGhemDqOmXmOS6iSA+IG5haWJ1dG91c291XCA7CivkuI3mraPono3os4cgPiBmdXNlaXl1dXNoaVwgOwor5ryi6Iux6L6e5YW4ID4ga2FuJydlaWppdGVuXCA7CivpoJjlnJ/kv53lhaggPiByeW91ZG9ob3plblwgOwor54Sh5LqL5oGv54G9ID4gYnVqaXNva3VzYWlcIDsKK+aMh+WQjeaJi+mFjSA+IHNoaW1laXRlaGFpXCA7CivpgYropqfpo5vooYwgPiB5dXVyYW5oaWtvdVwgOwor5Y+X6aiT5Zyw542EID4ganVrZW5qaWdva3VcIDsKK+itpuWCmeW8t+WMliA+IGtlaWJpa3lvdWthXCA7Civlv4PnkIbkuLvnvqkgPiBzaGlucmlzaHVnaVwgOwor6Zui5ama6Ki06KifID4gcmlrb25zb3Nob3VcIDsKK+mfs+iok+e0ouW8lSA+IG9ua3Vuc2FrdWluXCA7CivljbHpmbrlm6DlrZAgPiBraWtlbicnaW5zaGlcIDsKK+i2hemBjuWLpOWLmSA+IGNob3VrYWtpbm11XCA7CivpgLLmrankuLvnvqkgPiBzaGlucG9zaHVnaVwgOwor5L+d5YWo5Lya56S+ID4gaG96ZW5rYWlzaGFcIDsKK+iHquW3see0ueS7iyA+IGppa29zaG91a2FpXCA7CivkurrpgZPmlK/mj7QgPiBqaW5kb3VzaGllblwgOwor5biM5bCR5L6h5YCkID4ga2lzaG91a2FjaGlcIDsKK+WppuS6uuenkeWtpiA+IGZ1amlua2FnYWt1XCA7CivmlK/mj7Tlm6PkvZMgPiBzaGllbmRhbnRhaVwgOwor5a6H5a6Z56m66ZaTID4gdWNodXVrdXVrYW5cIDsKK+WMlueyp+eFieeTpiA+IGtlc2hvdXJlbmdhXCA7Civml6nmnJ/nmbroposgPiBzb3VraWhha2tlblwgOwor6Ieq54S25rK755mSID4gc2hpemVuY2hpeXVcIDsKK+S4jeWPr+efpeeahCA+IGZ1a2FjaGl0ZWtpXCA7CivoqLToqJ/osrvnlKggPiBzb3Nob3VoaXlvdVwgOwor54G95a6z5L+d6Zm6ID4gc2FpZ2FpaG9rZW5cIDsKK+Wkp+WZqOaZqeaIkCA+IHRhaWtpYmFuc2VpXCA7CivmlbDnj6DkuIDpgKMgPiBqdXp1aWNoaXJlblwgOwor5paH5piO6ZaL5YyWID4gYnVubWVpa2Fpa2FcIDsKK+WPjeWLleS4u+e+qSA+IGhhbmRvdXNodWdpXCA7CivmlL/lupzpq5jlrpggPiBzZWlmdWtvdWthblwgOwor5Lqs6YO95bqc6K2mID4ga3lvdXRvZnVrZWlcIDsKK+WLpOeOi+aUmOWktyA+IGtpbicnbm91am91aVwgOwor56m65oy66YOo6ZqKID4ga3V1dGVpYnV0YWlcIDsKK+WkmuWjq+a4iOa4iCA+IHRhc2hpc2Vpc2VpXCA7CivkuI3lmajnlKjogIUgPiBidWtpeW91bW9ub1wgOwor5YW156uZ5Z+65ZywID4gaGVpdGFua2ljaGlcIDsKK+acieeQhumWouaVsCA+IHl1dXJpa2Fuc3V1XCA7CivkvY7lvorotqPlkbMgPiB0ZWlrYWlzaHVtaVwgOwor5Lq65bel6aCt6ISzID4gamlua291enVub3VcIDsKK+WNgeWFremfs+espiA+IGp1dXJva3VvbnB1XCA7CivlpYfmg7PlpKnlpJYgPiBraXNvdXRlbmdhaVwgOwor5YaF5a656KaL5pysID4gbmFpeW91bWlob25cIDsKK+aWmeeQhumBk+WFtyA+IHJ5b3VyaWRvdWd1XCA7CivlpKflnI/oiKrot68gPiB0YWlrZW5rb3Vyb1wgOwor5rqW5YKZ566h5Yi2ID4ganVuYmlrYW5zZWlcIDsKK+S4u+iEs+S8muitsCA+IHNodW5vdWthaWdpXCA7CivpmaPpoK3mjIfmj64gPiBqaW50b3VzaGlraVwgOwor6IeT5Zmo56e75qSNID4gem91a2lpc2hva3VcIDsKK+WfuuacrOamguW/tSA+IGtpaG9uZ2FpbmVuXCA7CivkvJrorbDml6XnqIsgPiBrYWlnaW5pdHRlaVwgOwor5YWs5a6a5Zyw5L6hID4ga291dGVpY2hpa2FcIDsKK+WfuuekjueglOeptiA+IGtpc29rZW5reXV1XCA7CivnkrDlooPmsZrmn5MgPiBrYW5reW91b3NlblwgOwor55aR5b+D5pqX6ay8ID4gZ2lzaGluJydhbmtpXCA7Civnt4/nkIblpKfoh6MgPiBzb3VyaWRhaWppblwgOwor6Ieq5bex5rqA6LazID4gamlrb21hbnpva3VcIDsKK+e1tuWvvuS4u+e+qSA+IHpldHRhaXNodWdpXCA7CivmraPlkbPlgKTmrrUgPiBzaG91bWluZWRhblwgOwor5YCL5Lq65pWZ5o6IID4ga29qaW5reW91anVcIDsKK+WwkeWjruawl+mLrSA+IHNob3Vzb3VraWVpXCA7CivmnbHkupzoq7jlm70gPiB0b3Vhc2hva29rdVwgOwor5ZaH5Y+t5rC05LuZID4gcmFwcGF6dWlzZW5cIDsKK+Wun+ihjOWPr+iDvSA+IGppa2tvdWthbm91XCA7CivkuovliY3pgYvli5UgPiBqaXplbicndW5kb3VcIDsKK+WkluadpeaCo+iAhSA+IGdhaXJhaWthbmphXCA7Civpgb/pm6PoqJPnt7QgPiBoaW5hbmt1bnJlblwgOwor6LKp5aOy6YOo6ZaAID4gaGFuYmFpYnVtb25cIDsKK+WKtOWDjemBi+WLlSA+IHJvdWRvdXVuZG91XCA7CivmupblgpnpioDooYwgPiBqdW5iaWdpbmtvdVwgOwor5bm557ea6YGT6LevID4ga2Fuc2VuZG91cm9cIDsKK+S4jemAj+aYjuaApyA+IGZ1dG91bWVpc2VpXCA7CivliqDlnKfmsLTngokgPiBrYWF0c3VzdWlyb1wgOwor5bm05pyf5aWJ5YWsID4gbmVua2lib3Vrb3VcIDsKK+ihqOmfs+aWh+WtlyA+IGh5b3Vvbm1vbmppXCA7CivmjIflkI3miZPogIUgPiBzaGltZWlkYXNoYVwgOwor57eP5Y+45Luk6YOoID4gc291c2hpcmVpYnVcIDsKK+S8nee1seS4u+e+qSA+IGRlbnRvdXNodWdpXCA7CivkuLvopoHpg73luIIgPiBzaHV5b3V0b3NoaVwgOwor5L2O5rip5q666I+MID4gdGVpb25zYWtraW5cIDsKK+Wkq+WppumWouS/giA+IGZ1dWZ1a2Fua2VpXCA7CivkvZzmpa3mmYLplpMgPiBzYWd5b3VqaWthblwgOwor6Z2e5bi45omL5q61ID4gaGlqb3VzaHVkYW5cIDsKK+WwguWItuaUv+ayuyA+IHNlbnNlaXNlaWppXCA7CivmmKDnlLvnm6PnnaMgPiBlaWdha2FudG9rdVwgOwor5r+D5reh55S75YOPID4gbm91dGFuZ2F6b3VcIDsKK+eBr+eBq+euoeWItiA+IHRvdWtha2Fuc2VpXCA7Civph43opoHkuovpoIUgPiBqdXV5b3VqaWtvdVwgOwor6Z2e5bi45ZG86ZuGID4gaGlqb3Vrb3NodXVcIDsKK+eri+WAmeijnOiAhSA+IHJpa2tvdWhvc2hhXCA7CivmtYTljJboo4Xnva4gPiBqb3VrYXNvdWNoaVwgOwor5b6h55Sf5oaO5qeYID4gb2FpbmlrdXNhbWFcIDsKK+S6uuWToea3mOaxsCA+IGppbicnaW50b3V0YVwgOwor5Lqk6YCa5LqL5pWFID4ga291dHN1dWppa29cIDsKK+Wbm+i8qumnhuWLlSA+IHlvbnJpbmt1ZG91XCA7Civku6PnkIblhazkvb8gPiBkYWlyaWtvdXNoaVwgOwor5aSW5YuZ5aSn6IejID4gZ2FpbXVkYWlqaW5cIDsKK+mHjuaIpuegsuWFtSA+IHlhc2VuaG91aGVpXCA7CivlnLDlkI3ovp7lhbggPiBjaGltZWlqaXRlblwgOwor5LiN5YuV55Sj5bGLID4gZnVkb3VzYW4nJ3lhXCA7CivkvZPmhJ/muKnluqYgPiB0YWlrYW4nJ29uZG9cIDsKK+ims+WFiemDveW4giA+IGthbmtvdXRvc2hpXCA7CivlkIzmgKfmhJvogIUgPiBkb3VzZWlhaXNoYVwgOwor6YOo6ZqK5pKk6YCAID4gYnV0YWl0ZXR0YWlcIDsKK+WNlOitsOS8muWToSA+IGt5b3VnaWthaWluXCA7CivllZPokpnpgYvli5UgPiBrZWltb3V1bmRvdVwgOwor5LqA55Sy5qih5qeYID4ga2lra291bW95b3VcIDsKK+ihm+eUn+eKtuaFiyA+IGVpc2Vpam91dGFpXCA7Civpjpblm73kuLvnvqkgPiBzYWtva3VzaHVnaVwgOwor5Zmo55So6LKn5LmPID4ga2l5b3ViaW5ib3VcIDsKK+ecvOeyvueWsuWKtCA+IGdhbnNlaWhpcm91XCA7CivlrqPkvJ3mqZ/plqIgPiBzZW5kZW5raWthblwgOwor5L2V5pmC5L2V5pmCID4gaXRzdW5hbmRva2lcIDsKK+awkeaoqeS4u+e+qSA+IG1pbmtlbnNodWdpXCA7CivlubTmrKHnt4/kvJogPiBuZW5qaXNvdWthaVwgOwor5rip5Y+k55+l5pawID4gb25rb2NoaXNoaW5cIDsKK+eEoeWEn+S6pOS7mCA+IG11c2hvdWtvdWZ1XCA7Civnn63mnJ/miYvlvaIgPiB0YW5raXRlZ2F0YVwgOwor5YaF5YuZ5aSn6IejID4gbmFpbXVkYWlqaW5cIDsKK+S4gOS4luS4gOS7oyA+IGlzc2VpY2hpZGFpXCA7CivkuovpoIXntKLlvJUgPiBqaWtvdXNha3VpblwgOwor5pS+5bCE57ea56eRID4gaG91c2hhc2Vua2FcIDsKK+eah+WkquWtkOWmgyA+IGtvdXRhaXNoaWhpXCA7CivlppbmgKrlpInljJYgPiB5b3VrYWloZW5nZVwgOwor5aSJ5b2i6YOo6ZaAID4gaGVua2VpYnVtb25cIDsKK+mHjuaIpueXhemZoiA+IHlhc2VuYnlvdWluXCA7CivmiKbngb3lnLDljLogPiBzZW5zYWljaGlrdVwgOwor54m55YuZ5qmf6ZaiID4gdG9rdW11a2lrYW5cIDsKK+egguezluWkp+aguSA+IHNhdG91ZGFpa29uXCA7CivljYrliqDlt6Xlk4EgPiBoYW5rYWtvdWhpblwgOwor5LqM562J5YiG57eaID4gbml0b3VidW5zZW5cIDsKK+aOiOalreaZgumWkyA+IGp1Z3lvdWppa2FuXCA7CivlpKnnpZ7lnLDnpYcgPiB0ZW5qaW5jaGlnaVwgOwor6L+95Yqg5LqI566XID4gdHN1aWtheW9zYW5cIDsKK+mdnuWQiOeQhueahCA+IGhpZ291cml0ZWtpXCA7CivlirTovrLmlL/lupwgPiByb3Vub3VzZWlmdVwgOwor5LiL5oSP5LiK6YGUID4ga2Fpam91dGF0c3VcIDsKK+S5l+i7iuaLkuWQpiA+IGpvdXNoYWt5b2hpXCA7CivmsLTmtJfkvr/miYAgPiBzdWlzZW5iZW5qb1wgOwor5Y+O57SN5a625YW3ID4gc2h1dW5vdWthZ3VcIDsKK+acqumWi+WivuWcsCA+IG1pa2Fpa29uY2hpXCA7CivmraPlvZPpmLLooZsgPiBzZWl0b3Vib3VlaVwgOwor5a2m56eR6Kmm6aiTID4gZ2Fra2FzaGlrZW5cIDsKK+a9nOawtOavjeiJpiA+IHNlbnN1aWJva2FuXCA7Civkvb/nlKjkvqHlgKQgPiBzaGl5b3VrYWNoaVwgOwor5a6Y5bCK5rCR5Y2RID4ga2Fuc29ubWlucGlcIDsKK+aZrumBjeaWh+azlSA+IGZ1aGVuYnVucG91XCA7CivpgY7libDkurrlj6MgPiBrYWpvdWppbmtvdVwgOwor5Ye65YWI5qmf6ZaiID4gZGVzYWtpa2lrYW5cIDsKK+Wuo+S8neWKueaenCA+IHNlbmRlbmtvdWthXCA7CivmmYLjgIXliLvjgIUgPiBqaWppa29ra29rdVwgOwor6L+R5Ly86KiI566XID4ga2luamlrZWlzYW5cIDsKK+itt+aGsumBi+WLlSA+IGdva2VuJyd1bmRvdVwgOwor5Y6f5Zug57WQ5p6cID4gZ2VuJydpbmtla2thXCA7Civlj4vou43pg6jpmoogPiB5dXVndW5idXRhaVwgOwor54Sh5bC95Lya56S+ID4gbXVqaW5nYWlzaGFcIDsKK+WPpOS7iuadseilvyA+IGtva29udG91emFpXCA7CivnnIvorbflqabplbcgPiBrYW5nb2Z1Y2hvdVwgOwor5oKy5oak5oW35oWoID4gaGlmdW5rb3VnYWlcIDsKK+WPpOS7o+aWh+aYjiA+IGtvZGFpYnVubWVpXCA7CivnhKHnlKPmlL/lhZogPiBtdXNhbnNlaXRvdVwgOwor6YG45oyZ5rqW5YKZID4gc2Vua3lvanVuYmlcIDsKK+aEj+itmOS4jeaYjiA+IGlzaGlraWZ1bWVpXCA7CivntYTlkIjkuLvnvqkgPiBrdW1pYWlzaHVnaVwgOwor5YCL5L2T55m655SfID4ga290YWloYXNzZWlcIDsKK+Wbm+WIhumfs+espiA+IHNoaWJ1bicnb25wdVwgOwor5L2/5b6S5pu457ChID4gc2hpdG9zaG9rYW5cIDsKK+WEquaflOS4jeaWrSA+IHl1dWp1dWZ1ZGFuXCA7CivnhY7ppIXokrLlm6MgPiBzZW5iZWlidXRvblwgOwor5LqI5a6a6Kq/5ZKMID4geW90ZWljaG91d2FcIDsKK+WFiOelluS8neadpSA+IHNlbnpvZGVucmFpXCA7Civkuovmpa3pg6jliLYgPiBqaWd5b3VidXNlaVwgOwor6Ieo5pmC5YiX6LuKID4gcmluamlyZXNzaGFcIDsKK+Wumuacn+ippumokyA+IHRlaWtpc2hpa2VuXCA7Civnt4/lkIjoqrLnqI4gPiBzb3Vnb3VrYXplaVwgOwor6YGg6ZqU6Kyb576pID4gZW5rYWt1a291Z2lcIDsKK+a1t+W6leayueeUsCA+IGthaXRlaXl1ZGVuXCA7CivnnJ/kuIDmloflrZcgPiBtYWljaGltb25qaVwgOwor6Zu76Kmx6Kq/5p+7ID4gZGVud2FjaG91c2FcIDsKK+aKgOihk+aPtOWKqSA+IGdpanV0c3VlbmpvXCA7CivlgY/lkJHlm57ot68gPiBoZW5rb3VrYWlyb1wgOwor5LqI5a6a57SN56iOID4geW90ZWlub3V6ZWlcIDsKK+eah+WQjumZm+S4iyA+IGtvdWdvdWhlaWthXCA7CivpgKPpgqbliLbluqYgPiByZW5wb3VzZWlkb1wgOwor6Zu75rCX6Zu75a2QID4gZGVua2lkZW5zaGlcIDsKK+S7o+ihjOapn+mWoiA+IGRhaWtvdWtpa2FuXCA7CivnlrLlirTlm7DmhoogPiBoaXJvdWtvbnBhaVwgOwor55uX6Zuj5L+d6Zm6ID4gdG91bmFuaG9rZW5cIDsKK+e0lOecn+eEoeWeoiA+IGp1bnNoaW5tdWt1XCA7Civms5Xli5nlpKfoh6MgPiBob3VtdWRhaWppblwgOwor5YiR5LqL5Yem5YiGID4ga2VpamlzaG9idW5cIDsKK+mnkOi7iumBleWPjSA+IGNodXVzaGFpaGFuXCA7CivmmYLmqZ/lsJrml6kgPiBqaWtpc2hvdXNvdVwgOwor5bm06YeR5Z+66YeRID4gbmVua2lua2lraW5cIDsKK+mBqeazleihjOeCuiA+IHRla2lob3Vrb3VpXCA7CivnianopovpgYrlsbEgPiBtb25vbWl5dXNhblwgOwor5b6X5oSP5rqA6Z2iID4gdG9rdWltYW5tZW5cIDsKK+aZguW3ruWHuuWLpCA+IGppc2FzaHVra2luXCA7CivmlL/msrvllY/poYwgPiBzZWlqaW1vbmRhaVwgOwor57W25a++5pWs6KqeID4gemV0dGFpa2VpZ29cIDsKK+mNteebpOalveWZqCA+IGtlbmJhbmdha2tpXCA7CivoqLToqJ/kuovku7YgPiBzb3Nob3VqaWtlblwgOwor5oSP5ZGz5b255YmyID4gaW1peWFrdXdhcmlcIDsKK+S+oeagvOWuieWumiA+IGtha2FrdWFudGVpXCA7Civku4rkuIrpmZvkuIsgPiBraW5qb3VoZWlrYVwgOwor6Zu75rCX57O757WxID4gZGVua2lrZWl0b3VcIDsKK+WFjOaPm+mKgOihjCA+IGRha2FuZ2lua291XCA7Civnmb7np5HkuovlhbggPiBoeWFra2FqaXRlblwgOwor5YWo5Lya5LiA6Ie0ID4gemVua2FpaXRjaGlcIDsKK+m6u+iWrOaCo+iAhSA+IG1heWFrdWthbmphXCA7Civlv4PmqZ/kuIDou6IgPiBzaGlua2lpdHRlblwgOwor54Sh5ZCN5oim5aOrID4gbXVtZWlzZW5zaGlcIDsKK+WUr+S4gOeEoeS6jCA+IHl1aWl0c3VtdW5pXCA7CivosqHmlL/lronlrpogPiB6YWlzZWlhbnRlaVwgOwor55yL6K235a2m5qChID4ga2FuZ29nYWtrb3VcIDsKK+WIhumhnuWfuua6liA+IGJ1bnJ1aWtpanVuXCA7Civmlofmm7jlgb3pgKAgPiBidW5zaG9naXpvdVwgOwor5a2k6LuN5aWu6ZeYID4ga29ndW5mdW50b3VcIDsKK+aVsOasoeaXheWIuCA+IHN1dWppcnlva2VuXCA7CivlkIjmiJDnuYrntq0gPiBnb3VzZWlzZW4nJ2lcIDsKK+iytOaXj+aUv+ayuyA+IGtpem9rdXNlaWppXCA7CivljZrmhJvkuLvnvqkgPiBoYWt1YWlzaHVnaVwgOwor5LiA5paJ5qSc5oyZID4gaXNzZWlrZW5reW9cIDsKK+S9jua4qei8uOmAgSA+IHRlaW9uJyd5dXNvdVwgOwor6aKo5YWJ5piO5aqaID4gZnV1a291bWVpYmlcIDsKK+W+jOmDqOW6p+W4rSA+IGtvdWJ1emFzZWtpXCA7CivlgIvkurrmipXos4cgPiBrb2ppbnRvdXNoaVwgOwor5L+d6Zm65Lya56S+ID4gaG9rZW5nYWlzaGFcIDsKK+ehq+WMluawtOe0oCA+IHJ5dXVrYXN1aXNvXCA7Civml6XmnKzliJfls7YgPiBuaWhvbnJldHRvdVwgOwor5oim5pmC5YWs5YK1ID4gc2Vuamlrb3VzYWlcIDsKK+a1t+WToee1hOWQiCA+IGthaWlua3VtaWFpXCA7Civkv67ovp7nlpHllY8gPiBzaHV1amlnaW1vblwgOwor5rOV5a6a6LKo5bmjID4gaG91dGVpa2FoZWlcIDsKK+S9k+WGheWPl+eyviA+IHRhaW5haWp1c2VpXCA7Civmpb3oprPkuLvnvqkgPiByYWtrYW5zaHVnaVwgOwor5YWl6Zmi5oKj6ICFID4gbnl1dWlua2FuamFcIDsKK+mWoumAo+S6i+mghSA+IGthbnJlbmppa291XCA7Civljp/kvqHoqIjnrpcgPiBnZW5rYWtlaXNhblwgOwor6Zu75a2Q5Zue6LevID4gZGVuc2hpa2Fpcm9cIDsKK+mHjeeCueS4u+e+qSA+IGp1dXRlbnNodWdpXCA7CivkvqHpm7vlrZDluK8gPiBrYWRlbnNoaXRhaVwgOwor5pyJ5Yq56ZyA6KaBID4geXV1a291anV5b3VcIDsKK+S6i+alreW5tOW6piA+IGppZ3lvdW5lbmRvXCA7Civnm7jlj43lrprnkIYgPiBzb3VoYW50ZWlyaVwgOwor5YWt5YiG5YSA5bqnID4gcm9rdWJ1bmdpemFcIDsKK+WuieWumueKtuaFiyA+IGFudGVpam91dGFpXCA7CivmsJHkuLvmlL/msrsgPiBtaW5zaHVzZWlqaVwgOwor5YyW5a2m57mK57atID4ga2FnYWt1c2VuJydpXCA7Civntbblr77pn7PmhJ8gPiB6ZXR0YWlvbmthblwgOwor6Ieq54S256C05aOKID4gc2hpemVuaGFrYWlcIDsKK+WgsemBk+apn+mWoiA+IGhvdWRvdWtpa2FuXCA7CivmjZXomZzkuqTmj5sgPiBob3J5b2tvdWthblwgOwor5L6h5YCk5Yik5patID4ga2FjaGloYW5kYW5cIDsKK+aJi+e3tOaJi+euoSA+IHRlcmVudGVrdWRhXCA7CivlmajmorDkvZPmk40gPiBraWthaXRhaXNvdVwgOwor6aSK6ICB5L+d6Zm6ID4geW91cm91aG9rZW5cIDsKK+S4jeW9k+ihqOekuiA+IGZ1dG91aHlvdWppXCA7CivlronlhajpgYvou6IgPiBhbnplbicndW50ZW5cIDsKK+S6pOmam+evhOWbsiA+IGtvdXNhaWhhbicnaVwgOwor5b+c55So56eR5a2mID4gb3V5b3VrYWdha3VcIDsKK+S4jeaVtOWQiOS6uiA+IGZ1c2VpZ291amluXCA7CivljZjlhYPliLbluqYgPiB0YW5nZW5zZWlkb1wgOwor5LiA5q2p5YmN6YCyID4gaXBwb3plbnNoaW5cIDsKK+WbveeOi+mZm+S4iyA+IGtva3VvdWhlaWthXCA7CivmlL7pgIHooZvmmJ8gPiBob3Vzb3VlaXNlaVwgOwor5a+C5YWJ5rWE5ZyfID4gamFra291am91ZG9cIDsKK+W+jOeUn+Wkp+S6iyA+IGdvc2hvdWRhaWppXCA7CivkuInmsJHkuLvnvqkgPiBzYW5taW5zaHVnaVwgOwor5rCX566h5YiH6ZaLID4ga2lrYW5zZWtrYWlcIDsKK+WCsuWyuOS4jemBnCA+IGdvdWdhbmZ1c29uXCA7CivlrrbniLbplbfliLYgPiBrYWZ1Y2hvdXNlaVwgOwor5pqX6buS5pif6ZuyID4gYW5rb2t1c2VpdW5cIDsKK+i/keS7o+WbveWutiA+IGtpbmRhaWtva2thXCA7CivliY3pgJTmnInmnJsgPiB6ZW50b3l1dWJvdVwgOwor6Z+z5qW955CG6KuWID4gb25nYWt1cmlyb25cIDsKK+WnlOiol+iyqeWjsiA+IGl0YWt1aGFuYmFpXCA7CivkuInlr5Llm5vmuKkgPiBzYW5rYW5zaGlvblwgOwor6LKn5LmP5omA5bivID4gYmluYm91am90YWlcIDsKK+W+oeS8veiNieWtkCA+IG90b2dpem91c2hpXCA7CivnpZ7lpYjlt53nnIwgPiBrYW5hZ2F3YWtlblwgOwor6Ly/6KuW6Kq/5p+7ID4geW9yb25jaG91c2FcIDsKK+mbu+awl+ijhee9riA+IGRlbmtpc291Y2hpXCA7CivlnLDmlrnorbDkvJogPiBjaGlob3VnaWthaVwgOwor6KOF55Sy6YOo6ZqKID4gc291a291YnV0YWlcIDsKK+S4jeWPr+WFpeaApyA+IGZ1a2FueXV1c2VpXCA7CivljZfkuqzmnKjntr8gPiBuYW5raW5tb21lblwgOwor5Y2w6LGh5Li7576pID4gaW5zaG91c2h1Z2lcIDsKK+WkmuWjq+a4iOOAhSA+IHRhc2hpc2Vpc2VpXCA7CivkuIDlvLXkuIDlvJsgPiBpdGNob3Vpc3NoaVwgOwor5Yy66ZaT5YiX6LuKID4ga3VrYW5yZXNzaGFcIDsKK+ebuOaAneebuOaEmyA+IHNvdXNoaXNvdWFpXCA7CivoiKrnqbrln7rlnLAgPiBrb3VrdXVraWNoaVwgOwor55uj5p+76KiY6YyyID4ga2Fuc2FraXJva3VcIDsKK+aKgOihk+enu+i7oiA+IGdpanV0c3VpdGVuXCA7CivnlKPlhZDliLbpmZAgPiBzYW5qaXNlaWdlblwgOwor6aO95ZKM54q25oWLID4gaG91d2Fqb3V0YWlcIDsKK+efpeiDveaknOafuyA+IGNoaW5vdWtlbnNhXCA7CivlraTlvbHmgoTnhLYgPiBrb2Vpc2hvdXplblwgOwor5LqU56iu56u25oqAID4gZ29zaHVreW91Z2lcIDsKK+Wbo+S9k+S/nemZuiA+IGRhbnRhaWhva2VuXCA7Civlp4nlprnpg73luIIgPiBzaGltYWl0b3NoaVwgOwor5LiN6YCa566H5omAID4gZnV0c3V1a2FzaG9cIDsKK+egtOmCqumhleatoyA+IGhhamFrZW5zaG91XCA7CivmlL/msrvlm6PkvZMgPiBzZWlqaWRhbnRhaVwgOwor5LiA5Zac5LiA5oaCID4gaWtraWljaGl5dXVcIDsKK+a6luWCmeWRveS7pCA+IGp1bmJpbWVpcmVpXCA7Civlj5fpqJPnp5Hnm64gPiBqdWtlbmthbW9rdVwgOwor5pyo566h5qW95ZmoID4gbW9ra2FuZ2Fra2lcIDsKK+S4remrmOmfs+mDqCA+IGNodXVrb3VvbmJ1XCA7Civlj4vmhJvntZDlqZogPiB5dXVhaWtla2tvblwgOwor5rW36LuN5Z+65ZywID4ga2FpZ3Vua2ljaGlcIDsKK+mbu+WtkOe0oOWtkCA+IGRlbnNoaXNvc2hpXCA7CivmhJvlm73pgYvli5UgPiBhaWtva3V1bmRvdVwgOwor5Lq65paH5Zyw55CGID4gamlubW9uY2hpcmlcIDsKK+WKtOWDjeS6ieitsCA+IHJvdWRvdXNvdWdpXCA7Civmg4XloLHlh6bnkIYgPiBqb3Vob3VzaG9yaVwgOwor5Y+v5aSJ6LOH5pysID4ga2FoZW5zaGlob25cIDsKK+eCuuabv+W3ruebiiA+IGthd2FzZXNhZWtpXCA7Civoqpjmi5Dkuovku7YgPiB5dXVrYWlqaWtlblwgOwor5LiJ5aSn6YO95biCID4gc2FuZGFpdG9zaGlcIDsKK+aJgOimgeaZgumWkyA+IHNob3lvdWppa2FuXCA7CivlpbPmqKnpgYvli5UgPiBqb2tlbicndW5kb3VcIDsKK+WIhuaVo+WHpueQhiA+IGJ1bnNhbnNob3JpXCA7CivotbDooYzlj6/og70gPiBzb3Vrb3VrYW5vdVwgOwor5rWB6KiA6aOb6KqeID4gcnl1dWdlbmhpZ29cIDsKK+S4gOaWsOe0gOWFgyA+IGlzc2hpbmtpZ2VuXCA7CivlvpLmiYvkvZPmk40gPiB0b3NodXRhaXNvdVwgOwor5bCB5bu65Li7576pID4gaG91a2Vuc2h1Z2lcIDsKK+WPl+mok+aIpuS6iSA+IGp1a2Vuc2Vuc291XCA7Civlh7rpm7LlpKfnpL4gPiBpenVtb3RhaXNoYVwgOwor5qip6ZaA5Yui5a62ID4ga2VubW9uc2Vpa2FcIDsKK+eEoee3muaTjee4piA+IG11c2Vuc291anV1XCA7CivlgJ/lrrbkuonorbAgPiBzaGFra2Fzb3VnaVwgOwor5a6H5a6Z56eR5a2mID4gdWNodXVrYWdha3VcIDsKK+WPpOWFuOiKuOiDvSA+IGtvdGVuZ2Vpbm91XCA7Civosaroj6/ntaLniJsgPiBnb3VrYWtlbnJhblwgOwor5ryi6Iux5a2X5YW4ID4ga2FuJydlaWppdGVuXCA7CivlqabkurrpgYvli5UgPiBmdWppbicndW5kb3VcIDsKK+S4jeWLleaYjueOiyA+IGZ1ZG91bXlvdW91XCA7CivkvZPlpJblj5fnsr4gPiB0YWlnYWlqdXNlaVwgOwor5Yuk5YuZ5bm06ZmQID4ga2lubXVuZW5nZW5cIDsKK+a6gOWgtOS4gOiHtCA+IG1hbmpvdWl0Y2hpXCA7CivliY3kuJbnlJ/lrZggPiB6ZW5zZXNlaXpvblwgOwor5Lya6KiI5bm05bqmID4ga2Fpa2VpbmVuZG9cIDsKK+S4h+iRieS7ruWQjSA+IG1hbicneW91Z2FuYVwgOwor5YKN6IG06ZqP5oSPID4gYm91Y2hvdXp1aWlcIDsKK+e1tuWvvuWkmuaVsCA+IHpldHRhaXRhc3V1XCA7CivntIXnmb3oqablkIggPiBrb3VoYWt1amlhaVwgOwor5Lya6KiI55uj5p+7ID4ga2Fpa2Vpa2Fuc2FcIDsKK+WFq+e0mOS4gOWuhyA+IGhha2tvdWljaGl1XCA7CivoiJ7lj7Doo4Xnva4gPiBidXRhaXNvdWNoaVwgOwor5LqL5YuZ6ZW35a6YID4gamltdWNob3VrYW5cIDsKK+S4gOiIrOekvuS8miA+IGlwcGFuc2hha2FpXCA7Civml6XluJ3mmYLku6MgPiBuaXR0ZWlqaWRhaVwgOwor55m75Z2C6LuK57eaID4gdG9oYW5zaGFzZW5cIDsKK+S4lueVjOacgOWkpyA+IHNla2Fpc2FpZGFpXCA7CivmjIflsI7ljp/nkIYgPiBzaGlkb3VnZW5yaVwgOwor6YCg5qyh6aGb5rKbID4gem91aml0ZW5wYWlcIDsKK+iIquepuueuoeeQhiA+IGtvdWt1dWthbnJpXCA7CivmhJ/mn5PntYzot68gPiBrYW5zZW5rZWlyb1wgOwor5LqM562J6LuN5pu5ID4gbml0b3VndW5zb3VcIDsKK+mYsueBq+Whl+aWmSA+IGJvdWthdG9yeW91XCA7Civoh6rnuIToh6rnuJsgPiBqaWpvdWppYmFrdVwgOwor6YCU5Lit5LiL6LuKID4gdG9jaHV1Z2VzaGFcIDsKK+eFjumkheW4g+WboyA+IHNlbmJlaWJ1dG9uXCA7CivnkrDlooPkv53orbcgPiBrYW5reW91aG9nb1wgOwor5ZiY55m66KaL5ZmoID4gdXNvaGFra2Vua2lcIDsKK+mdouS8muaZgumWkyA+IG1lbmthaWppa2FuXCA7Civph43mqZ/plqLpioMgPiBqdXVraWthbmp1dVwgOwor5rOV5qGI5a+p6K2wID4gaG91YW5zaGluZ2lcIDsKK+iHquWLleWItuW+oSA+IGppZG91c2VpZ3lvXCA7CivlgIvkurrmjIflsI4gPiBrb2ppbnNoaWRvdVwgOwor6Ieq54S255m654GrID4gc2hpemVuaGFra2FcIDsKK+S4u+WLmeWkp+iHoyA+IHNodW11ZGFpamluXCA7Civnn63mnJ/msbrmiKYgPiB0YW5raWtlc3NlblwgOwor6KiA6Kqe6YGL55SoID4gZ2VuZ291bicneW91XCA7Civnspfoo73mv6vpgKAgPiBzb3NlaXJhbnpvdVwgOwor5Y2x6Zm65oCd5oOzID4ga2lrZW5zaGlzb3VcIDsKK+epuuWfn+euoeeQhiA+IGt1dWlraWthbnJpXCA7CivlvqHmrr/lpbPkuK0gPiBnb3RlbmpvY2h1dVwgOwor6Zqj5L+d5LqL5qWtID4gcmlucG9qaWd5b3VcIDsKK+WQiOaEj+W/g+S4rSA+IGdvdWlzaGluanV1XCA7CivkuJbnlYzoqJjpjLIgPiBzZWthaWtpcm9rdVwgOwor5Z+65pys5p2h5Lu2ID4ga2lob25qb3VrZW5cIDsKK+i+suawkeS4gOaPhiA+IG5vdW1pbicnaWtraVwgOwor5YmN5Luj5pyq6IGeID4gemVuZGFpbWltb25cIDsKK+ikh+WQiOaxmuafkyA+IGZ1a3Vnb3Vvc2VuXCA7Civntbblr77pm7bluqYgPiB6ZXR0YWlyZWlkb1wgOwor5qeL5oiQ5Y+v6IO9ID4ga291c2Vpa2Fub3VcIDsKK+S4gOS6uuiInuWPsCA+IGhpdG9yaWJ1dGFpXCA7Civnmq7kuIvntYTnuZQgPiBoaWthc29zaGlraVwgOwor5Zyw5LiL6LOH5rqQID4gY2hpa2FzaGlnZW5cIDsKK+eZveWMluWAi+S9kyA+IGhha3VrYWtvdGFpXCA7Civpm7voqbHlm57nt5ogPiBkZW53YWthaXNlblwgOwor5LiN5q2j5ZKs5ZCIID4gZnVzZWlrb3Vnb3VcIDsKK+e+juWuueS9k+aTjSA+IGJpeW91dGFpc291XCA7CivljZTorbDpm6LlqZogPiBreW91Z2lyaWtvblwgOwor5rip5pqW5YmN57eaID4gb25kYW56ZW5zZW5cIDsKK+aWsOimj+S/neeuoSA+IHNoaW5raWhva2FuXCA7CivkuIDosqvnlarlj7cgPiBpa2thbmJhbmdvdVwgOwor54++6KGM5rOV6KaPID4gZ2Vua291aG91a2lcIDsKK+elluWbveW+qeW4sCA+IHNva29rdWZ1a2tpXCA7CivlkKvmsLTngq3ntKAgPiBnYW5zdWl0YW5zb1wgOwor5Yq05YON5pmC6ZaTID4gcm91ZG91amlrYW5cIDsKK+eCuuabv+ebuOWgtCA+IGthd2FzZXNvdWJhXCA7CivkuJbnlYzkuIDlkaggPiBzZWthaWlzc2h1dVwgOwor5Yy755mC5rOV5Lq6ID4gaXJ5b3Vob3VqaW5cIDsKK+m8k+iInua/gOWKsSA+IGtvYnVnZWtpcmVpXCA7CivmmYLmnJ/lsJrml6kgPiBqaWtpc2hvdXNvdVwgOwor57KS5bqm5YiG5biDID4gcnl1dWRvYnVucHVcIDsKK+aKleS4i+izh+acrCA+IHRvdWthc2hpaG9uXCA7CivnlKjmhI/lkajliLAgPiB5b3Vpc2h1dXRvdVwgOwor5YaF54eD5qmf6ZaiID4gbmFpbmVua2lrYW5cIDsKK+mYsuawtOWKoOW3pSA+IGJvdXN1aWtha291XCA7CivlgIvkurrmtojosrsgPiBrb2ppbnNob3VoaVwgOwor5Luu5oCn6L+R6KaWID4ga2FzZWlraW5zaGlcIDsKK+WwiueOi+aUmOWktyA+IHNvbicnbm91am91aVwgOwor56m65rCX5Lyd5p+TID4ga3V1a2lkZW5zZW5cIDsKK+W5vOW5tOaZguS7oyA+IHlvdW5lbmppZGFpXCA7CivnpL7kvJrlvqnluLAgPiBzaGFrYWlmdWtraVwgOwor6Zu75rCX6KO95ZOBID4gZGVua2lzZWloaW5cIDsKK+aZguaZguWIu+WIuyA+IGppamlrb2trb2t1XCA7CivkuIDosqvkvZzmpa0gPiBpa2thbnNhZ3lvdVwgOwor5rue5Zyo5pyf6ZaTID4gdGFpemFpa2lrYW5cIDsKK+eEoeW9ouiyoeeUoyA+IG11a2VpemFpc2FuXCA7CivnhKHmlq3ou6LovIkgPiBtdWRhbnRlbnNhaVwgOwor5Z2H6KGh5LqI566XID4ga2lua291eW9zYW5cIDsKK+S7mOW4r+adoeS7tiA+IGZ1dGFpam91a2VuXCA7Civou43kuovlt6XloLQgPiBndW5qaWtvdWpvdVwgOwor5pyJ5Yq55pWw5a2XID4geXV1a291c3V1amlcIDsKK+iHjeS4i+S4ueeUsCA+IHNlaWthdGFuZGVuXCA7CivoqabnlKjmnJ/plpMgPiBzaGl5b3VraWthblwgOwor5YyW5a2m5aSJ5YyWID4ga2FnYWt1aGVua2FcIDsKK+iHquWLlei7iueojiA+IGppZG91c2hhemVpXCA7CivoqIDoqp7pgZPmlq0gPiBnb25nb2RvdWRhblwgOwor5ouF5L+d54mp5qipID4gdGFucG9idWtrZW5cIDsKK+WWtualreaZgumWkyA+IGVpZ3lvdWppa2FuXCA7CivmhJvlprvlvIHlvZMgPiBhaXNhaWJlbnRvdVwgOwor576O55qE5auM5oKqID4gYml0ZWtpa2VuJydvXCA7CivkuInljYPkuJbnlYwgPiBzYW56ZW5zZWthaVwgOwor5aSa6YeN5pS+6YCBID4gdGFqdXVob3Vzb3VcIDsKK+S6jOmHjeWkluS6pCA+IG5panV1Z2Fpa291XCA7Civkuojlgpnlt6XkvZwgPiB5b2Jpa291c2FrdVwgOwor6IKx5o6b5qSF5a2QID4gaGlqaWtha2Vpc3VcIDsKK+efreazouaUvumAgSA+IHRhbnBhaG91c291XCA7CivpoqjlhYnntbbkvbMgPiBmdXVrb3V6ZWtrYVwgOwor5Li75oOF5Li7576pID4gc2h1am91c2h1Z2lcIDsKK+ihjOWLleS4u+e+qSA+IGtvdWRvdXNodWdpXCA7Civoh6rliIboh6rouqsgPiBqaWJ1bmppc2hpblwgOwor5aSc5YWJ5aGX5paZID4geWFrb3V0b3J5b3VcIDsKK+W4sOeEoeS7ruiqrCA+IGtpbXVrYXNldHN1XCA7CivluILloLTljp/nkIYgPiBzaGlqb3VnZW5yaVwgOwor5Lqs5ruL5Zyw5pa5ID4ga2VpamljaGlob3VcIDsKK+Wkp+e+qeWQjeWIhiA+IHRhaWdpbWVpYnVuXCA7CivlkbzlkLjpgYvli5UgPiBrb2t5dXV1bmRvdVwgOwor6J665peL6ZqO5q61ID4gcmFzZW5rYWlkYW5cIDsKK+iLseiqnuaVmeiCsiA+IGVpZ29reW91aWt1XCA7CivosaHniZnmtbflsrggPiB6b3VnZWthaWdhblwgOwor5pel5pys6ISz54KOID4gbmlob24nJ25vdWVuXCA7CivlkozprYLmvKLmiY0gPiB3YWtvbmthbnNhaVwgOwor57WM5Za25YaN5bu6ID4ga2VpZWlzYWlrZW5cIDsKK+iEs+S4i+WeguS9kyA+IG5vdWthc3VpdGFpXCA7Civli5/ph5HpgYvli5UgPiBib2tpbicndW5kb3VcIDsKK+WIu+iLpuWLieWKsSA+IGtva2t1YmVucmVpXCA7Civml6LlqZrnlLfmgKcgPiBraWtvbmRhbnNlaVwgOwor5rK75rC05bel5LqLID4gY2hpc3Vpa291amlcIDsKK+aXpeacrOS6uuirliA+IG5paG9uamlucm9uXCA7Civou43kuovlhazlgrUgPiBndW5qaWtvdXNhaVwgOwor5Y2B5Lq65Y2B6ImyID4ganV1bmludG9pcm9cIDsKK+eEoemFjeS8muekviA+IG11aGFpZ2Fpc2hhXCA7Civlrrbml4/miYvlvZMgPiBrYXpva3V0ZWF0ZVwgOwor576F6Yed55uk5bqnID4gcmFzaGluYmFuemFcIDsKK+emj+elieapn+WZqCA+IGZ1a3VzaGlraWtpXCA7CivmmqvlrprkuojnrpcgPiB6YW50ZWl5b3NhblwgOwor6Ieq6LK75Ye654mIID4gamloaXNodXBwYW5cIDsKK+W4uOeUqOa8ouWtlyA+IGpvdXlvdWthbmppXCA7Civnjovkvq/osrTml48gPiBvdWtvdWtpem9rdVwgOwor5Lq65L2T5qih5Z6LID4gamludGFpbW9rZWlcIDsKK+aXpeilv+i+nuWFuCA+IG5pc3NlaWppdGVuXCA7CivmhJ/mg4Xnp7vlhaUgPiBrYW5qb3Vpbnl1dVwgOwor5Zyw5pa556u26aasID4gY2hpaG91a2VpYmFcIDsKK+e1jOa4iOWKueaenCA+IGtlaXphaWtvdWthXCA7CivmsJHkuovoqLToqJ8gPiBtaW5qaXNvc2hvdVwgOwor5YyW5a2m6KiY5Y+3ID4ga2FnYWt1a2lnb3VcIDsKK+WPguWKoOaEj+itmCA+IHNhbmthaXNoaWtpXCA7CivmiKbmmYLkvZPliLYgPiBzZW5qaXRhaXNlaVwgOwor6Ieq55Sx5biC5aC0ID4gaml5dXVzaGlqb3VcIDsKK+WGt+aIv+WujOWCmSA+IHJlaWJvdWthbmJpXCA7Civoh6rlt7Hlj4zlr74gPiBqaWtvc291dHN1aVwgOwor54Gr54e15o6b5biDID4ga290YXRzdWdha2VcIDsKK+W4jOacm+S+oeagvCA+IGtpYm91a2FrYWt1XCA7Civpgbjlr77mnKzpg6ggPiBzZW50YWlob25idVwgOwor5YWI6aCt5omT6ICFID4gc2VudG91ZGFzaGFcIDsKK+WQjeWJjeepuumWkyA+IG5hbWFla3V1a2FuXCA7CivmtYXojYnmtbfoi5QgPiBhc2FrdXNhbm9yaVwgOwor5LqL5qWt5pys6YOoID4gamlneW91aG9uYnVcIDsKK+eQhuirlumXmOS6iSA+IHJpcm9udG91c291XCA7Civkurrlj6PlopfliqAgPiBqaW5rb3V6b3VrYVwgOwor5aSW5Lqk6L6e5LukID4gZ2Fpa291amlyZWlcIDsKK+awj+Wnk+WItuW6piA+IHNoaXNlaXNlaWRvXCA7CivnuITmlofmmYLku6MgPiBqb3Vtb25qaWRhaVwgOwor5LiW55WM5aSn5oimID4gc2VrYWl0YWlzZW5cIDsKK+apn+WLlea8lOe/kiA+IGtpZG91ZW5zaHV1XCA7Civoh6rorablm6Plk6EgPiBqaWtlaWRhbicnaW5cIDsKK+mbu+awl+aKteaKlyA+IGRlbmtpdGVpa291XCA7CivpmLLpn7Poo4Xnva4gPiBib3VvbnNvdWNoaVwgOwor6LKg5YK15ZCI6KiIID4gZnVzYWlnb3VrZWlcIDsKK+mBiui7jeiomOiAhSA+IHl1dWd1bmtpc2hhXCA7CivkvqHlgKTkvZPns7sgPiBrYWNoaXRhaWtlaVwgOwor5LqM6YeN57WQ5amaID4gbmlqdXVrZWtrb25cIDsKK+S4gOmVt+S4gOefrSA+IGl0Y2hvdWl0dGFuXCA7CivorbfpgIHoiLnlm6MgPiBnb3NvdXNlbmRhblwgOwor54qv6KGM54++5aC0ID4gaGFua291Z2VuYmFcIDsKK+aEj+imi+W6g+WRiiA+IGlrZW5rb3Vrb2t1XCA7CivlloTlm6DlloTmnpwgPiB6ZW4nJ2luemVua2FcIDsKK+eEoeS6uuWcsOW4ryA+IG11amluY2hpdGFpXCA7CivntYzllrbou6Lmj5sgPiBrZWllaXRlbmthblwgOwor6LKp5aOy5qmf5LyaID4gaGFuYmFpa2lrYWlcIDsKK+mBoOmalOaTjeS9nCA+IGVua2FrdXNvdXNhXCA7CivmhaPnlKjoqp7lj6UgPiBrYW4nJ3lvdWdva3VcIDsKK+a2suS9k+epuuawlyA+IGVraXRhaWt1dWtpXCA7Civlh7rliIPljIXkuIEgPiBkZWJhYm91Y2hvdVwgOwor5Zyf6K6a5pys57eaID4gZG9zYW5ob25zZW5cIDsKK+iyoeaUv+aUr+aPtCA+IHphaXNlaXNoaWVuXCA7Civlrq7lu7fnlLvlrrYgPiBreXV1dGVpZ2FrYVwgOwor5pyA5b6M5YiX6LuKID4gc2FpZ29yZXNzaGFcIDsKK+eQhuW3peWtpumDqCA+IHJpa291Z2FrdWJ1XCA7Civkv53nrqHkvJrnpL4gPiBob2thbmdhaXNoYVwgOwor6YWN5ZCI56aB5b+MID4gaGFpZ291a2lua2lcIDsKK+mBjuWJsOaKleizhyA+IGtham91dG91c2hpXCA7CivlrrbplbfliLbluqYgPiBrYWNob3VzZWlkb1wgOwor5Y+v6IG06Led6ZuiID4ga2FjaG91a3lvcmlcIDsKK+imqumhnue4geiAhSA+IHNoaW5ydWllbmphXCA7CivlroflrpnljJblraYgPiB1Y2h1dWthZ2FrdVwgOwor54Sh55CG5b+D5LitID4gbXVyaXNoaW5qdXVcIDsKK+W5tOizgOiRieabuCA+IG5lbmdhaGFnYWtpXCA7CivpgKPpgqbkuojnrpcgPiByZW5wb3V5b3NhblwgOwor5Ym15L6h5a2m5LyaID4gc291a2FnYWtrYWlcIDsKK+WIqeWtkOijnOe1piA+IHJpc2hpaG9reXV1XCA7CivmoLnmnKzljp/nkIYgPiBrb25wb25nZW5yaVwgOwor5a6J5YWo5L+d6ZqcID4gYW56ZW5ob3Nob3VcIDsKK+WBpeW6t+S/nemZuiA+IGtlbmtvdWhva2VuXCA7Civmmpfpu5LmmYLku6MgPiBhbmtva3VqaWRhaVwgOwor5LiW5Luj5Lqk5LujID4gc2VkYWlrb3V0YWlcIDsKK+i7oumAgembu+ipsSA+IHRlbnNvdWRlbndhXCA7CivmmK3lkozmmYLku6MgPiBzaG91d2FqaWRhaVwgOwor5L2/55So6Kix5Y+vID4gc2hpeW91a3lva2FcIDsKK+mfs+alveaYoOeUuyA+IG9uZ2FrdWVpZ2FcIDsKK+Wuh+WumemBiuazsyA+IHVjaHV1eXV1ZWlcIDsKK+S/neWBpeWItuW6piA+IGhva2Vuc2VpZG9cIDsKK+a6luWCmemBi+WLlSA+IGp1bmJpdW5kb3VcIDsKK+S7o+itsOWItuW6piA+IGRhaWdpc2VpZG9cIDsKK+aooeWei+WcsOWbsyA+IG1va2VpY2hpenVcIDsKK+eEoeiMtuiLpuiMtiA+IG11Y2hha3VjaGFcIDsKK+WPpOW+gOS7iuadpSA+IGtvb3Vrb25yYWlcIDsKK+aRqeWIqeaUr+WkqSA+IG1hcmlzaGl0ZW5cIDsKK+S6uueCuua3mOaxsCA+IGppbicnaXRvdXRhXCA7CivnqLzlg43mmYLplpMgPiBrYWRvdWppa2FuXCA7CivljLvnmYLliLbluqYgPiBpcnlvdXNlaWRvXCA7CivpnaLnvbXnvbXlgJIgPiBtZW5iYWJhdG91XCA7CivpgbjmjJnpgZXlj40gPiBzZW5reW9paGFuXCA7Civml6XmnKzmmYLplpMgPiBuaWhvbmppa2FuXCA7CivlpbTpmrfliLbluqYgPiBkb3JlaXNlaWRvXCA7Civmp4vpgKDkv53mjIEgPiBrb3V6b3Vob2ppXCA7Civoh6rli5Xou4rljJYgPiBqaWRvdXNoYWthXCA7Civml6XmnKzmm7jntIAgPiBuaWhvbnNob2tpXCA7CivkuI3nqbrmiJDlsLEgPiBmdWt1dWpvdWp1XCA7CivlubPlkozpgYvli5UgPiBoZWl3YXVuZG91XCA7CivlhazlrprmranlkIggPiBrb3V0ZWlidWFpXCA7CivlpKnooaPnhKHnuKsgPiB0ZW4nJ2ltdWhvdVwgOwor55CG6Lev5pW054S2ID4gcmlyb3NlaXplblwgOwor5Y2X5Lqs57m75a2QID4gbmFua2luanVzdVwgOwor6Jma54Sh5Li7576pID4ga3lvbXVzaHVnaVwgOwor5qip5aiB5Li7576pID4ga2VuJydpc2h1Z2lcIDsKK+awl+eCjuS4h+S4iCA+IGtpZW5iYW5qb3VcIDsKK+S4ieS4ieS5neW6piA+IHNhbnNhbmt1ZG9cIDsKK+ioiOeul+apn+mWkyA+IGtlaXNhbmtpbWFcIDsKK+ekvOWEgOS9nOazlSA+IHJlaWdpc2Fob3VcIDsKK+a7heiMtuiLpuiMtiA+IG1lY2hha3VjaGFcIDsKK+iAs+S4i+iFuueCjiA+IGppa2FzZW4nJ2VuXCA7Civnn7PmsrnljbHmqZ8gPiBzZWtpeXVraWtpXCA7CivliJHkuovkuovku7YgPiBrZWlqaWppa2VuXCA7CivliKnnlKjkvqHlgKQgPiByaXlvdWthY2hpXCA7Civlm57nt5rosqDojbcgPiBrYWlzZW5mdWthXCA7CivpppblsL7kuIDosqsgPiBzaHViaWlra2FuXCA7CivljLvnmYLkv53pmbogPiBpcnlvdWhva2VuXCA7Civmraboo4Xop6PpmaQgPiBidXNvdWthaWpvXCA7CivooajmhI/mloflrZcgPiBoeW91aW1vbmppXCA7Civpg73luILlm73lrrYgPiB0b3NoaWtva2thXCA7CivnhKHngrrlvpLpo58gPiBtdWl0b3Nob2t1XCA7CivmmKDnlLvpn7Pmpb0gPiBlaWdhb25nYWt1XCA7CivliY3lvozlt6blj7MgPiB6ZW5nb3NheXV1XCA7Civph47miKbnibnnp5EgPiB5YXNlbnRva2thXCA7CivkuI3nvojlpZTmlL4gPiBmdWtpaG9ucG91XCA7CivkuIDmiYvosqnlo7IgPiBpdHRlaGFuYmFpXCA7CivlvZPluqfpoJDph5EgPiB0b3V6YXlva2luXCA7CivmoZzoirHniJvmvKsgPiBvdWthcmFubWFuXCA7Civoh6rnlLHoh6rlnKggPiBqaXl1dWppemFpXCA7Civkub7nh6XnhKHlkbMgPiBrYW5zb3VtdW1pXCA7CivkuozpoIXlrprnkIYgPiBuaWtvdXRlaXJpXCA7CivmtLvmgKfmsZrms6UgPiBrYXNzZWlvZGVpXCA7CivkuInkuInkupTkupQgPiBzYW5zYW5nb2dvXCA7CivlnKjluqvnrqHnkIYgPiB6YWlrb2thbnJpXCA7Civngavngb3kv53pmbogPiBrYXNhaWhva2VuXCA7CivnvbXoqYjpm5HoqIAgPiBiYXJpem91Z29uXCA7CivpgZPot6/lsIHpjpYgPiBkb3Vyb2Z1dXNhXCA7CivlsI/lp5Tlk6HkvJogPiBzaG91aWlua2FpXCA7CivkuqTmuInlp5Tlk6EgPiBrb3VzaG91aWluXCA7CivlkIjlkIzooYzngrogPiBnb3Vkb3Vrb3VpXCA7Civngonovrroq4foqbEgPiByb2hlbmRhbndhXCA7CivpgY7ljrvliIboqZ4gPiBrYWtvYnVuc2hpXCA7CivllrbliKnkvJrnpL4gPiBlaXJpZ2Fpc2hhXCA7CivkurrkuovkuI3nnIEgPiBqaW5qaWZ1c2VpXCA7CivnlbDmgKfplqLkv4IgPiBpc2Vpa2Fua2VpXCA7CivkuovmlYXljp/lm6AgPiBqaWtvZ2VuJydpblwgOwor5a625Ye65bCR5aWzID4gaWVkZXNob3Vqb1wgOwor5Y+k5YW45Li7576pID4ga290ZW5zaHVnaVwgOwor5LiN5rOV5oqV5qOEID4gZnVob3V0b3VraVwgOwor5LqM6YeN6J665peLID4gbmlqdXVyYXNlblwgOwor5L2N55u46YCf5bqmID4gaXNvdXNva3Vkb1wgOwor6Z+z6Z+76YOo6ZaAID4gb24nJ2luYnVtb25cIDsKK+apn+iDveS4u+e+qSA+IGtpbm91c2h1Z2lcIDsKK+apn+aisOitpuWCmSA+IGtpa2Fpa2VpYmlcIDsKK+WfuuekjuippumokyA+IGtpc29zaGlrZW5cIDsKK+WutuW6reiPnOWckiA+IGthdGVpc2FpZW5cIDsKK+mBk+i3r+W3peS6iyA+IGRvdXJva291amlcIDsKK+S6nOeIvueEtuS4gSA+IGFydXplbmNoaW5cIDsKK+Wbm+iLpuWFq+iLpiA+IHNoaWt1aGFra3VcIDsKK+WnlOe0sOmdouirhyA+IGlzYWltZW5kYW5cIDsKK+WvvuagoeippuWQiCA+IHRhaWtvdWppYWlcIDsKK+S6uuawl+S9nOWutiA+IG5pbmtpc2Fra2FcIDsKK+aaluWGrOeVsOWkiSA+IGRhbnRvdWloZW5cIDsKK+Wls+aAp+S4gOiIrCA+IGpvc2VpaXBwYW5cIDsKK+aAqueNo+aYoOeUuyA+IGthaWp1dWVpZ2FcIDsKK+WkmueoruWkmuanmCA+IHRhc2h1dGF5b3VcIDsKK+S6jOmDqOaVmeaOiCA+IG5pYnVreW91anVcIDsKK+mAn+W6pumBleWPjSA+IHNva3Vkb2loYW5cIDsKK+aoquaWreatqemBkyA+IG91ZGFuaG9kb3VcIDsKK+iIl+ijhemBk+i3ryA+IGhvc291ZG91cm9cIDsKK+eEoee3muaKgOW4qyA+IG11c2VuZ2lzaGlcIDsKK+mjm+mzpeaZguS7oyA+IGFzdWthamlkYWlcIDsKK+Wbnui3r+WfuuadvyA+IGthaXJva2liYW5cIDsKK+W9ouaIkOWkluenkSA+IGtlaXNlaWdla2FcIDsKK+Wuh+WumeWFteWZqCA+IHVjaHV1aGVpa2lcIDsKK+eVsOW4uOawl+ixoSA+IGlqb3VraXNob3VcIDsKK+eEoeapn+WMluWtpiA+IG11a2lrYWdha3VcIDsKK+iHqueUseS4u+e+qSA+IGppeXV1c2h1Z2lcIDsKK+S9jeiomOi/vei0iCA+IGlraXRzdWlzb3VcIDsKK+Wun+WGmeaYoOeUuyA+IGppc3NoYWVpZ2FcIDsKK+iHqueUseaZgumWkyA+IGppeXV1amlrYW5cIDsKK+W+oeekvOWlieWFrCA+IG9yZWlib3Vrb3VcIDsKK+WckuiKuOeUqOWFtyA+IGVuZ2VpeW91Z3VcIDsKK+egtOiMtuebruiMtiA+IGhhY2hhbWVjaGFcIDsKK+S4jeepj+aWh+abuCA+IGZ1b25idW5zaG9cIDsKK+a8ouWtl+aWh+WMliA+IGthbmppYnVua2FcIDsKK+S6iOWCmeippumokyA+IHlvYmlzaGlrZW5cIDsKK+WKtOWLmeeuoeeQhiA+IHJvdW11a2FucmlcIDsKK+W5s+WSjOS8muitsCA+IGhlaXdha2FpZ2lcIDsKK+S7u+WLmemDqOmaiiA+IG5pbm11YnV0YWlcIDsKK+Wwj+mWk+eJqeWxiyA+IGtvbWFtb25veWFcIDsKK+e4puaoqueEoeWwvSA+IGp1dW91bXVqaW5cIDsKK+WbveWutuS4u+e+qSA+IGtva2thc2h1Z2lcIDsKK+mBjuWJsOaKleS4jiA+IGtham91dG91eW9cIDsKK+irlueQhuWbnui3ryA+IHJvbnJpa2Fpcm9cIDsKK+iHquWjiuS9nOeUqCA+IGppa2Fpc2F5b3VcIDsKK+a6luWCmeacn+mWkyA+IGp1bmJpa2lrYW5cIDsKK+WkqeS4i+eEoeWPjCA+IHRlbmthbXVzb3VcIDsKK+S4gOeAieWNg+mHjCA+IGlzc2hhc2VucmlcIDsKK+aoquihjOmXiuatqSA+IG91a291a2FwcG9cIDsKK+WJsOS9meS+oeWApCA+IGpvdXlva2FjaGlcIDsKK+aWh+WMluWbveWutiA+IGJ1bmtha29ra2FcIDsKK+iInuWPsOeoveWPpCA+IGJ1dGFpZ2Vpa29cIDsKK+S8iuWLouWkp+W7nyA+IGlzZXRhaWJ5b3VcIDsKK+ebuOS6kuaUr+aPtCA+IHNvdWdvc2hpZW5cIDsKK+aZrumBjeWOn+eQhiA+IGZ1aGVuZ2VucmlcIDsKK+S4jeWNs+S4jemboiA+IGZ1c29rdWZ1cmlcIDsKK+aCquWboOaCquaenCA+IGFrdWluJydha2thXCA7CivkuInjgIXkuZ3luqYgPiBzYW5zYW5rdWRvXCA7CivpmYTlkozpm7flkIwgPiBmdXdhcmFpZG91XCA7CivljJbnsqfpg6jlsYsgPiBrZXNob3ViZXlhXCA7Civno6joo73nn7PlmaggPiBtYXNlaXNla2tpXCA7CivniLblrZDlrrbluq0gPiBmdXNoaWthdGVpXCA7CivkvZnpn7vlq4vlq4sgPiB5b2luam91am91XCA7CivnuITmloflnJ/lmaggPiBqb3Vtb25kb2tpXCA7CivosqHli5nnrqHnkIYgPiB6YWltdWthbnJpXCA7CivnqYLnirboirHluo8gPiBzdWlqb3VrYWpvXCA7Civovp7mm7jpg6jploAgPiBqaXNob2J1bW9uXCA7CivmqZ/li5Xpg6jpmoogPiBraWRvdWJ1dGFpXCA7Civkv53lronlh6bliIYgPiBob2Fuc2hvYnVuXCA7CivmhI/mgJ3ooajnpLogPiBpc2hpaHlvdWppXCA7CivllrbliKnkuovmpa0gPiBlaXJpamlneW91XCA7Civnmq7ohprnp7vmpI0gPiBoaWZ1aXNob2t1XCA7CivorbDkuovlpqjlrrMgPiBnaWppYm91Z2FpXCA7Civku5jlkozpm7flkIwgPiBmdXdhcmFpZG91XCA7CivkuIDpqI7lvZPljYMgPiBpa2tpdG91c2VuXCA7CivpmL/pvLvlj6vllpogPiBhYmlreW91a2FuXCA7Civntbblr77muKnluqYgPiB6ZXR0YWlvbmRvXCA7Civpu4Tph5HkuJbnlYwgPiBvdWdvbnNla2FpXCA7Civmo5LmuKnluqboqIggPiBib3VvbmRva2VpXCA7Civlj43lr77mhI/oposgPiBoYW50YWlpa2VuXCA7CivmrKPmsYLmtYTlnJ8gPiBnb25ndWpvdWRvXCA7Civph5HosqjmupblgpkgPiBraW5rYWp1bmJpXCA7Civoq5bnkIbntKDlrZAgPiByb25yaXNvc2hpXCA7CivpnLLlnLDmoL3ln7kgPiByb2ppc2FpYmFpXCA7Civlj6TlorPmmYLku6MgPiBrb2Z1bmppZGFpXCA7CivnhKHnhZnngavolqwgPiBtdWVua2F5YWt1XCA7CivmlL/msrvmqZ/mp4sgPiBzZWlqaWtpa291XCA7CivmhI/lv5fmsbrlrpogPiBpc2hpa2V0dGVpXCA7CivosqDojbfliIbmlaMgPiBmdWthYnVuc2FuXCA7CivkuI3lgY/kuI3lhZogPiBmdWhlbmZ1dG91XCA7CivlkIzluornlbDlpKIgPiBkb3VzaG91aW11XCA7CivnhKHpmZDou4zpgZMgPiBtdWdlbmtpZG91XCA7Civou43kuovpoafllY8gPiBndW5qaWtvbW9uXCA7CivogL3nvo7kuLvnvqkgPiB0YW5iaXNodWdpXCA7CivllpzliofmmKDnlLsgPiBraWdla2llaWdhXCA7Civmm7znj6Dmspnoj68gPiBtYW5qdXNoYWdlXCA7CivmqKHmk6zoqabpqJMgPiBtb2dpc2hpa2VuXCA7Civopo/liYfpgZXlj40gPiBraXNva3VpaGFuXCA7CivlpI/ngonlhqzmiYcgPiBrYXJvdG91c2VuXCA7Civpm6jlpKnmsbrooYwgPiB1dGVua2Vra291XCA7CivmhI/opovkuqTmj5sgPiBpa2Vua291a2FuXCA7CivkuI3kub7mgKfmsrkgPiBmdWthbnNlaXl1XCA7Civms4zlsL/lmajnp5EgPiBoaW55b3VraWthXCA7CivluLfluYTkuIrlpY8gPiBpYWt1am91c291XCA7CivlhajmqKnlp5Tlk6EgPiB6ZW5rZW4nJ2lpblwgOwor5ryU566X5qmf5qeLID4gZW56YW5raWtvdVwgOwor54Sh6JOL6LKo6LuKID4gbXVnYWlrYXNoYVwgOwor5LqM5Y2B5LiW57SAID4gbmlqaXNzZWlraVwgOwor5L+d6K235Yem5YiGID4gaG9nb3Nob2J1blwgOwor55qu6Iaa56eR5a2mID4gaGlmdWthZ2FrdVwgOwor6KGG5oSa5pS/5rK7ID4gc2h1Z3VzZWlqaVwgOwor5L6N5b6T5q2m5a6YID4gamlqdXVidWthblwgOwor5o6n6Ki05pyf6ZaTID4ga291c29raWthblwgOwor5LiK5L2N5qeL6YCgID4gam91aWtvdXpvdVwgOwor5bi45Lu75aeU5ZOhID4gam91bmluJydpaW5cIDsKK+iKneWxheWwj+WxiyA+IHNoaWJhaWdveWFcIDsKK+WFrOenn+WFrOiqsiA+IGtvdXNva291a2FcIDsKK+aYk+aEn+afk+aApyA+IGlrYW5zZW5zZWlcIDsKK+e0gOS8iuWci+WxiyA+IGtpbm9rdW5peWFcIDsKK+WknOm3ueiVjum6piA+IHlvdGFrYXNvYmFcIDsKK+WLpOWLmeaZgumWkyA+IGtpbm11amlrYW5cIDsKK+WOreS4luS4u+e+qSA+IGVuc2Vpc2h1Z2lcIDsKK+WNmOS9jeiomOWPtyA+IHRhbicnaWtpZ291XCA7CivmjpLku5bkuLvnvqkgPiBoYWl0YXNodWdpXCA7Civlroflrpnpo5vooYwgPiB1Y2h1dWhpa291XCA7Civku67lkI3ojYnntJkgPiBrYW5hem91c2hpXCA7CivlnZHlhoXkuovmlYUgPiBrb3VuYWlqaWtvXCA7Civoq5bnkIbmvJTnrpcgPiByb25yaWVuemFuXCA7Civpm7vmsJfmr5vluIMgPiBkZW5raW1vdWZ1XCA7Civpm7LprKLoirHpoZQgPiB1bmJpbmthZ2FuXCA7CivlvqHliY3kvJrorbAgPiBnb3plbmthaWdpXCA7Civkuojlgpnoqr/mn7sgPiB5b2JpY2hvdXNhXCA7CivlubPlkozkuLvnvqkgPiBoZWl3YXNodWdpXCA7CivnqLLojbflr7/lj7ggPiBpbmFyaXp1c2hpXCA7Civms6jmhI/kuovpoIUgPiBjaHV1aWppa291XCA7Civog7jpg6jlpJbnp5EgPiBreW91YnVnZWthXCA7CivpnZ7lj6/mj5vnvqQgPiBoaWtha2FuZ3VuXCA7CivpgbrkvJ3mg4XloLEgPiBpZGVuam91aG91XCA7Civlr4TnlJ/ngavlsbEgPiBraXNlaWthemFuXCA7Civkuozpg6jmjojmpa0gPiBuaWJ1anVneW91XCA7CivpnZ7llrbliKnnmoQgPiBoaWVpcml0ZWtpXCA7CivmsrPlt53lt6XkuosgPiBrYXNlbmtvdWppXCA7Civnm7jmiYvmrKHnrKwgPiBhaXRlc2hpZGFpXCA7Civkvr/lrpzkuLvnvqkgPiBiZW5naXNodWdpXCA7Civnmq7ohprlkbzlkLggPiBoaWZ1a29reXV1XCA7CivkupzmiJDlsaTlnI8gPiBhc2Vpc291a2VuXCA7Civnqbrou43lpKflsIkgPiBrdXVndW50YWlpXCA7CivkuInjgIXkupTjgIUgPiBzYW5zYW5nb2dvXCA7CivmorXlkozovp7lhbggPiBib253YWppdGVuXCA7CivmjqfoqLTnkIbnlLEgPiBrb3Vzb3JpeXV1XCA7Civpg6jpmorljLrliIYgPiBidXRhaWt1YnVuXCA7CivmgqrprZTkuLvnvqkgPiBha3VtYXNodWdpXCA7Civorbflsrjlt6XkuosgPiBnb2dhbmtvdWppXCA7CivkvZnpn7vlq4vjgIUgPiB5b2luam91am91XCA7CivnlLDlpKvph47kurogPiBkZW5wdXlhamluXCA7CivlpYflpYfmgKrmgKogPiBraWtpa2Fpa2FpXCA7CivnpZ7ku6PmloflrZcgPiBqaW5kYWltb2ppXCA7Civlj6TlhbjmmYLku6MgPiBrb3RlbmppZGFpXCA7CivluILkvJrorbDlk6EgPiBzaGlrYWlnaWluXCA7CivljbHpmbrosqDmi4UgPiBraWtlbmZ1dGFuXCA7CivlgaXlurfkuI3lrokgPiBrZW5rb3VmdWFuXCA7Civlv5zmgKXmuKHmsrMgPiBvdWt5dXV0b2thXCA7Civkuozph43lkKblrpogPiBuaWp1dWhpdGVpXCA7CivmhI/msJfooZ3lpKkgPiBpa2lzaG91dGVuXCA7CivljLvlrabnlKjoqp4gPiBpZ2FrdXlvdWdvXCA7CivoiJ7lj7DlirnmnpwgPiBidXRhaWtvdWthXCA7Civpm7vkvY3lt67oqIggPiBkZW4nJ2lzYWtlaVwgOwor5bqm5pWw5YiG5biDID4gZG9zdXVidW5wdVwgOwor6YGL6YCB5L+d6Zm6ID4gdW5zb3Vob2tlblwgOwor6auY5omL5bCP5omLID4gdGFrYXRla290ZVwgOwor54Sh5ZGz5Lm+54elID4gbXVtaWthbnNvdVwgOwor5LiL6Zmi6K2w6ZW3ID4ga2FpbmdpY2hvdVwgOwor6LuN5YKZ566h55CGID4gZ3VuYmlrYW5yaVwgOwor5qi56ISC5Yqg5belID4ganVzaGlrYWtvdVwgOwor5Yip5rC05bel5LqLID4gcmlzdWlrb3VqaVwgOwor6Z2e5bi45LqL5oWLID4gaGlqb3VqaXRhaVwgOwor5q2m6KOF6JyC6LW3ID4gYnVzb3Vob3VraVwgOwor5pyJ5aOw6Z+z5YyWID4geXV1c2Vpb25rYVwgOwor5L6h5YCk5Z+65rqWID4ga2FjaGlraWp1blwgOwor6Kq/55CG5Zmo5YW3ID4gY2hvdXJpa2lndVwgOwor56Cy54WZ5by+6ZuoID4gaG91ZW5kYW4nJ3VcIDsKK+mmrOiAs+adsemiqCA+IGJhaml0b3VmdXVcIDsKK+W5s+ihjOenu+WLlSA+IGhlaWtvdWlkb3VcIDsKK+ijnOWKqeWLleipniA+IGhvam9kb3VzaGlcIDsKK+WQpuWumuW/nOetlCA+IGhpdGVpb3V0b3VcIDsKK+iHquW3seizh+acrCA+IGppa29zaGlob25cIDsKK+m7hOmHkeaZguS7oyA+IG91Z29uamlkYWlcIDsKK+WRveS7pOS4gOS4iyA+IG1laXJlaWlra2FcIDsKK+e0jeS7mOacn+mZkCA+IG5vdWZ1a2lnZW5cIDsKK+aRuOaTrOippumokyA+IG1vZ2lzaGlrZW5cIDsKK+Wwj+WFkOm6u+eXuiA+IHNob3VuaW1haGlcIDsKK+Wuo+S8neiomOS6iyA+IHNlbmRlbmtpamlcIDsKK+Wkj+Wto+S8keaahyA+IGtha2lreXV1a2FcIDsKK+iHqOaZguaUv+W6nCA+IHJpbmppc2VpZnVcIDsKK+S4ieaXpeS4ieaZqSA+IG1pa2thbWliYW5cIDsKK+eEoeeQhumbo+mhjCA+IG11cmluYW5kYWlcIDsKK+S6iOWCmeijhee9riA+IHlvYmlzb3VjaGlcIDsKK+aenOaoueagveWfuSA+IGthanVzYWliYWlcIDsKK+eyl+iho+eyl+mjnyA+IHNvaXNvc2hva3VcIDsKK+S6uuawkeWnlOWToSA+IGppbm1pbicnaWluXCA7Civpo73lkozokrjmsJcgPiBob3V3YWpvdWtpXCA7CivljLnlpKvljLnlqaYgPiBoaXBwdWhpcHB1XCA7CivkuozliIbpn7PnrKYgPiBuaWJ1bicnb25wdVwgOwor5Y2D5rOi5LiH5rOiID4gc2VucGFiYW5wYVwgOwor55Ww5bi455m655SfID4gaWpvdWhhc3NlaVwgOwor5rK75a6J6YOo6ZqKID4gY2hpYW5idXRhaVwgOwor5YiD5YK35rKZ5rGwID4gbmluam91emF0YVwgOwor5LiN5rS75oCn5YyWID4gZnVrYXNzZWlrYVwgOwor5bel5LqL54++5aC0ID4ga291amlnZW5iYVwgOwor6Ieq5bex5a6j5LydID4gamlrb3NlbmRlblwgOwor5rCX566h5pSv54KOID4ga2lrYW5zaGllblwgOwor5omL5YmN5Yud5omLID4gdGVtYWVnYXR0ZVwgOwor5L+d5a6I5Li7576pID4gaG9zaHVzaHVnaVwgOwor5pyo56uv5b6u5aG1ID4ga29wcGFtaWppblwgOwor5q275Lqh6KiY5LqLID4gc2hpYm91a2lqaVwgOwor6YGO5Ymw5Yip55uKID4ga2Fqb3VyaWVraVwgOwor5aWz5bCK55S35Y2RID4gam9zb25kYW5waVwgOwor5Y2B5LqM5Y2Y6KGjID4ganV1bmloaXRvZVwgOwor5YiG6Zui6Kqy56iOID4gYnVucmlrYXplaVwgOwor5Lu75oSP5o2c5p+7ID4gbmluJydpc291c2FcIDsKK+S4iuS9jeamguW/tSA+IGpvdWlnYWluZW5cIDsKK+iInuWPsOmBk+WFtyA+IGJ1dGFpZG91Z3VcIDsKK+S4iuaYoOaZgumWkyA+IGpvdWVpamlrYW5cIDsKK+ioiOWZqOmjm+ihjCA+IGtlaWtpaGlrb3VcIDsKK+aIpueBveWtpOWFkCA+IHNlbnNhaWtvamlcIDsKK+WfuuacrOWOn+eQhiA+IGtpaG9uZ2VucmlcIDsKK+aDheaEj+aKleWQiCA+IGpvdWl0b3Vnb3VcIDsKK+euoeeQhuapn+iDvSA+IGthbnJpa2lub3VcIDsKK+iHqOaZguiomOWPtyA+IHJpbmppa2lnb3VcIDsKK+WFteW9ueW/jOmBvyA+IGhlaWVraWtpaGlcIDsKK+aIpuS6ieaYoOeUuyA+IHNlbnNvdWVpZ2FcIDsKK+iyoeaUv+WNseapnyA+IHphaXNlaWtpa2lcIDsKK+aciemZkOiKseW6jyA+IHl1dWdlbmtham9cIDsKK+i7jeS6i+WfuuWcsCA+IGd1bmppa2ljaGlcIDsKK+S4jeato+S6i+S7tiA+IGZ1c2VpamlrZW5cIDsKK+WHuuadpeasoeesrCA+IGRla2lzaGlkYWlcIDsKK+WkieS9k+S7ruWQjSA+IGhlbnRhaWdhbmFcIDsKK+iLsembhOS4u+e+qSA+IGVpeXV1c2h1Z2lcIDsKK+eXtOipseWWp+WYqSA+IGNoaXdhZ2Vua2FcIDsKK+eDj+acieWFiOeUnyA+IHV5dXVzZW5zZWlcIDsKK+aGsuazlemBleWPjSA+IGtlbnBvdWloYW5cIDsKK+Wbnui7ouakheWtkCA+IGthaXRlbicnaXN1XCA7Civog73nmbvljYrls7YgPiBub3RvaGFudG91XCA7CivliqPmgKfpgbrkvJ0gPiByZXNzZWlpZGVuXCA7Civoq4vosqDliLbluqYgPiB1a2VvaXNlaWRvXCA7CivmsLTou4rlsI/lsYsgPiBzdWlzaGFnb3lhXCA7CivopJDmr5vlkoznqK4gPiBha2FnZXdhc2h1XCA7Civlm7rlrprosqDlgrUgPiBrb3RlaWZ1c2FpXCA7Civkvp3poZjlhY3lrpggPiBpZ2FubWVua2FuXCA7CivmlL/lupzmqZ/plqIgPiBzZWlmdWtpa2FuXCA7Civkuovku7boqJjogIUgPiBqaWtlbmtpc2hhXCA7CivlubPlronlvozmnJ8gPiBoZWlhbmtvdWtpXCA7Civpm4fnlKjkv53pmbogPiBrb3lvdWhva2VuXCA7Civkv53orbfosr/mmJMgPiBob2dvYm91ZWtpXCA7CivkuJbnlYzliLbopocgPiBzZWthaXNlaWhhXCA7CivnhKHmqZ/ogqXmlpkgPiBtdWtpaGlyeW91XCA7Civpq5jph47osYbohZAgPiBrb3V5YWRvdWZ1XCA7Civku6PorbDmlL/msrsgPiBkYWlnaXNlaWppXCA7CivmhI/ppqzlv4PnjL8gPiBpYmFzaGluJydlblwgOwor5Lqk6YCa6YG65YWQID4ga291dHN1dWlqaVwgOwor6YG65qOE6LKo54mpID4gaWtpa2Ftb3RzdVwgOwor54Kt5YyW5rC057SgID4gdGFua2FzdWlzb1wgOwor5Zuy56KB5LiJ57SaID4gaWdvc2Fua3l1dVwgOwor55Sj5amm5Lq656eRID4gc2FuZnVqaW5rYVwgOwor55CG5oOz5Li7576pID4gcmlzb3VzaHVnaVwgOwor5Y2B5a2X56Cy54GrID4ganV1amlob3VrYVwgOwor6YO96YGT5bqc55yMID4gdG9kb3VmdWtlblwgOwor6bqd6aaZ6LGM6LGGID4gamFrb3VlbmRvdVwgOwor55uy5ZSW5a2m5qChID4gbW91YWdha2tvdVwgOwor5L+d5a6J5p2h5L6LID4gaG9hbmpvdXJlaVwgOwor55+z5Zmo5pmC5LujID4gc2Vra2lqaWRhaVwgOwor5Ly86Z2e55CG5bGIID4gZXNlcmlrdXRzdVwgOwor6KiY5b+15YiH5omLID4ga2luZW5raXR0ZVwgOwor5YCL5Lq65YCL5Lq6ID4ga29qaW5rb2ppblwgOwor5bu25rue5Yip5a2QID4gZW50YWlyaXNoaVwgOwor5YiG5rS+5Li7576pID4gYnVucGFzaHVnaVwgOwor5q+A6KqJ6KSS6LK2ID4ga2l5b2hvdWhlblwgOwor5ZSv576O5Li7576pID4geXVpYmlzaHVnaVwgOwor6LuN5LqL6KGb5pifID4gZ3VuamllaXNlaVwgOwor54Sh5oiR5aSi5LitID4gbXVnYW11Y2h1dVwgOwor5LqI5a6a5pyf6ZmQID4geW90ZWlraWdlblwgOwor56uL5L2T5pig55S7ID4gcml0dGFpZWlnYVwgOwor5aSp5rCX5qih5qeYID4gdGVua2ltb3lvdVwgOwor54Gr5Y+j5Y6f5rmWID4ga2Frb3VnZW5rb1wgOwor6KGo6Z+z5a2X5q+NID4gaHlvdW9uamlib1wgOwor6Z+z5aOw6KiA6KqeID4gb25zZWlnZW5nb1wgOwor5LiA5pio5pio5pelID4gc2FraW90b3RvaVwgOwor6ISx5rOV6KGM54K6ID4gZGFwcG91a291aVwgOwor5YCL5Lq65Li7576pID4ga29qaW5zaHVnaVwgOwor5LiN5q2j6KaP6LuNID4gZnVzZWlraWd1blwgOwor5YeG55yL6K235ammID4ganVua2FuZ29mdVwgOwor5q+N5a2Q5a625bqtID4gYm9zaGlrYXRlaVwgOwor5ZCM5ZCN55Ww5Lq6ID4gZG91bWVpaWppblwgOwor6IKy5YWQ5pmC6ZaTID4gaWt1amlqaWthblwgOwor5pmC5L6h55m66KGMID4gamlrYWhha2tvdVwgOwor5Lya6K2w5LqL6aCFID4ga2FpZ2lqaWtvdVwgOwor5Luu5oOz6KiY5oa2ID4ga2Fzb3VraW9rdVwgOwor6YOo5YiG6bq76YWUID4gYnVidW5tYXN1aVwgOwor5qSc5LqL5o6n6Ki0ID4ga2Vuamlrb3Vzb1wgOwor57WM5Za2566h55CGID4ga2VpZWlrYW5yaVwgOwor6aOb6KGM5pmC6ZaTID4gaGlrb3VqaWthblwgOwor5Zub5a2X54af6KqeID4geW9qaWp1a3Vnb1wgOwor6Ieo5qmf5b+c5aSJID4gcmlua2lvdWhlblwgOwor5a6a5pyf5L+d6Zm6ID4gdGVpa2lob2tlblwgOwor6YCg6KiA6aOb6KqeID4gem91Z2VuaGlnb1wgOwor5LqL5YuZ55So5ZOBID4gamltdXlvdWhpblwgOwor6KiA6Kqe5Zyw55CGID4gZ2VuZ29jaGlyaVwgOwor54qv572q6KGM54K6ID4gaGFuemFpa291aVwgOwor6Ly46YCB5qmf6ZaiID4geXVzb3VraWthblwgOwor6KOc5Yqp6Imm6ImHID4gaG9qb2thbnRlaVwgOwor5LqU6YeM6Zyn5LitID4gZ29yaW11Y2h1dVwgOwor5LiJ5pel5aSp5LiLID4gbWlra2F0ZW5rYVwgOwor5Z+65pys5Y2Y5L2NID4ga2lob250YW4nJ2lcIDsKK+eMtuS6iOacn+mWkyA+IHl1dXlva2lrYW5cIDsKK+iri+iyoOW3peS6iyA+IHVrZW9pa291amlcIDsKK+aEj+aAneaxuuWumiA+IGlzaGlrZXR0ZWlcIDsKK+W+jOmAgOaWh+WtlyA+IGtvdXRhaW1vamlcIDsKK+eUt+WwiuWls+WNkSA+IGRhbnNvbmpvaGlcIDsKK+Wkp+aFiOWkp+aCsiA+IGRhaWppZGFpaGlcIDsKK+WmguS9leanmOW4qyA+IGlrYXNhbWFzaGlcIDsKK+iHqOeVjOS6i+aVhSA+IHJpbmthaWppa29cIDsKK+WboOaenOmWouS/giA+IGluZ2FrYW5rZWlcIDsKK+eVsOeoruS6pOmFjSA+IGlzaHVrb3VoYWlcIDsKK+WknOmWk+WLpOWLmSA+IHlha2Fua2lubXVcIDsKK+W+oeWbveiHquaFoiA+IG9rdW5pamltYW5cIDsKK+elnue1jOenkeWMuyA+IHNoaW5rZWlrYWlcIDsKK+WujOWFqOippuWQiCA+IGthbnplbmppYWlcIDsKK+WFrOekuuWcsOS+oSA+IGtvdWppY2hpa2FcIDsKK+S4gOWtl+S4gOWPpSA+IGljaGlqaWlra3VcIDsKK+WOn+eQhuS4u+e+qSA+IGdlbnJpc2h1Z2lcIDsKK+erpeipseS9nOWutiA+IGRvdXdhc2Fra2FcIDsKK+WmqOWus+ihjOeCuiA+IGJvdWdhaWtvdWlcIDsKK+mBi+WWtue1jOiyuyA+IHVuJydlaWtlaWhpXCA7Civkuozpg6jlkIjlpY8gPiBuaWJ1Z2Fzc291XCA7CivlkI3oqonmr4DmkI0gPiBtZWl5b2tpc29uXCA7CivoqJjpjLLmmKDnlLsgPiBraXJva3VlaWdhXCA7CivpgYvmkKznrqHnkIYgPiB1bnBhbmthbnJpXCA7CivljLvnp5HlpKflraYgPiBpa2FkYWlnYWt1XCA7CivliqDmuJvkuZfpmaQgPiBrYWdlbmpvdWpvXCA7CivpmL/niYfmiKbkuokgPiBhaGVuc2Vuc291XCA7CivllK/llK/oq77oq74gPiBpaWRha3VkYWt1XCA7Civnm7jlr77oqqTlt64gPiBzb3V0YWlnb3NhXCA7Civpo7LphZLpgYvou6IgPiBpbnNodXVudGVuXCA7CivmjIflkI3oqablkIggPiBzaGltZWlqaWFpXCA7CivlvpLlvJ/liLbluqYgPiB0b3RlaXNlaWRvXCA7CivntIvnvr3kuozph40gPiBtb25oYWJ1dGFlXCA7CivosqjluaPliLbluqYgPiBrYWhlaXNlaWRvXCA7Civml6XlkozkuIvpp4QgPiBoaXlvcmlnZXRhXCA7CivkuJbnlYzlubPlkowgPiBzZWthaWhlaXdhXCA7CivnhKHnkIbplqLmlbAgPiBtdXJpa2Fuc3V1XCA7Civpn7PlkJDmnJfmnJcgPiBvbnRvcm91cm91XCA7CivmooXpm6jliY3nt5ogPiBiYWl1emVuc2VuXCA7Civpm7vmsJfmmYLoqIggPiBkZW5raWRva2VpXCA7CivkuozljYHlm5vml6UgPiBuaWp1dXlva2thXCA7CivmgrLmrYzmhbfmhaggPiBoaWtha291Z2FpXCA7CivkuojpmLLljLvlraYgPiB5b2JvdWlnYWt1XCA7CivlvZPmnJ/liKnnm4ogPiB0b3VraXJpZWtpXCA7Civnmq7kuIvohILogqogPiBoaWthc2hpYm91XCA7Civpmbbno4HlmajlupcgPiB0b3VqaWtpdGVuXCA7CivliIfnrKblo7LloLQgPiBraXBwdXVyaWJhXCA7Civoo7jkvZPkuLvnvqkgPiByYXRhaXNodWdpXCA7Civpn7PmqJnmloflrZcgPiBvbnB5b3Vtb2ppXCA7CivkuI3mraPopo/miKYgPiBmdXNlaWtpc2VuXCA7Civntbblr77kvY3nva4gPiB6ZXR0YWlpY2hpXCA7CivnsKHmmJPkv53pmbogPiBrYW4nJ2lob2tlblwgOwor5a+h6aCt5pS/5rK7ID4ga2F0b3VzZWlqaVwgOwor5LiL5rC05Yem55CGID4gZ2VzdWlzaG9yaVwgOwor6KiY5oa257Sg5a2QID4ga2lva3Vzb3NoaVwgOwor6Z+z5aOw6KiY5Y+3ID4gb25zZWlraWdvdVwgOwor5ZKM5bmz5Lya6K2wID4gd2FoZWlrYWlnaVwgOwor56C05aOK5Li7576pID4gaGFrYWlzaHVnaVwgOwor5a6H5a6Z5Z+65ZywID4gdWNodXVraWNoaVwgOwor5LiN5Y+v55+l6KuWID4gZnVrYWNoaXJvblwgOwor6Ieq6KGb5omL5q61ID4gamllaXNodWRhblwgOwor5bCP5aOy5YCk5q61ID4ga291cmluZWRhblwgOwor5biC5aC06KaP5qihID4gc2hpam91a2lib1wgOwor6K2w5ZOh56uL5rOVID4gZ2lpbnJpcHBvdVwgOwor5a2m57Sa5aeU5ZOhID4gZ2Fra3l1dWlpblwgOwor6K2w5Lya5Li7576pID4gZ2lrYWlzaHVnaVwgOwor5Z+656SO56eR5a2mID4ga2lzb2thZ2FrdVwgOwor5o2c5p+75pys6YOoID4gc291c2Fob25idVwgOwor5a6H5a6Z5o6i5p+7ID4gdWNodXV0YW5zYVwgOwor5Lqc6bq757mU54mpID4gYW1hb3JpbW9ub1wgOwor6aCG5bqP5LiN5ZCMID4ganVuam9mdWRvdVwgOwor57WM5riI5o+05YqpID4ga2VpemFpZW5qb1wgOwor57Sv566X5rip5bqmID4gcnVpc2Fub25kb1wgOwor5rWq5ryr5Li7576pID4gcm9tYW5zaHVnaVwgOwor5q2m6KOF6YO95biCID4gYnVzb3V0b3NoaVwgOwor5bmz5ZKM5Zu95a62ID4gaGVpd2Frb2trYVwgOwor6YGT6Lev5Zyw5ZuzID4gZG91cm9jaGl6dVwgOwor5b6h5pyx5Y2w6Ii5ID4gZ29zaHVpbnNlblwgOwor5aSc6YOO6Ieq5aSnID4geWFyb3VqaWRhaVwgOwor6YOo5YiG5ZCm5a6aID4gYnVidW5oaXRlaVwgOwor6Kyb5ZKM5Lya6K2wID4ga291d2FrYWlnaVwgOwor57eo57WE5qmf5qKwID4gaGVuc29raWthaVwgOwor5Yy755mC5Zmo5qKwID4gaXJ5b3VraWthaVwgOwor5q2j6KaP5YiG5biDID4gc2Vpa2lidW5wdVwgOwor5Lya5ZOh5ZCN57C/ID4ga2FpaW5tZWlib1wgOwor5aSp5aSJ5Zyw55WwID4gdGVucGVuY2hpaVwgOwor5pyJ5Y+y5Lul5p2lID4geXV1c2hpaXJhaVwgOwor5L+d6K236Zai56iOID4gaG9nb2thbnplaVwgOwor5pyq5biw6YKE6ICFID4gbWlraWthbnNoYVwgOwor5LiJ5pel5Z2K5Li7ID4gbWlra2Fib3V6dVwgOwor56K65Zu65LiN5YuVID4ga2Fra29mdWRvdVwgOwor5LiN5YG05LiN6ZuiID4gZnVzb2t1ZnVyaVwgOwor5paH5oi/5YW35bGLID4gYnVuYm91Z3V5YVwgOwor5bq354WV5a2X5YW4ID4ga291a2lqaXRlblwgOwor5pyq5p2l5rC45YqrID4gbWlyYWllaWdvdVwgOwor54Sh55CG566X5q61ID4gbXVyaXNhbmRhblwgOwor6Jme576O5Lq66I2JID4gZ3ViaWppbnNvdVwgOwor6LGh54mZ57Sw5belID4gem91Z2V6YWlrdVwgOwor5ruF6Iy25ruF6Iy2ID4gbWVjaGFtZWNoYVwgOwor6aKo6LuK5bCP5bGLID4gZnV1c2hhZ295YVwgOwor5a2Q5L6b6YOo5bGLID4ga29kb21vYmV5YVwgOwor5rGC5oSb6KqH56S6ID4ga3l1dWFpa29qaVwgOwor546L5pS/5b6p5Y+kID4gb3VzZWlmdWtrb1wgOwor5LiA5Lq66YOo5bGLID4gaGl0b3JpYmV5YVwgOwor5LiN6LK36YGL5YuVID4gZnViYWl1bmRvdVwgOwor5ZCd5ZeH5ZCd5ZeHID4ga2VjaGlrZWNoaVwgOwor5a6a5pyf6aCQ6YeRID4gdGVpa2l5b2tpblwgOwor5LiA5a6a5pyf6ZaTID4gaXR0ZWlraWthblwgOwor5Zyw5LiL6YGL5YuVID4gY2hpa2F1bmRvdVwgOwor5oeQ55aR5Li7576pID4ga2FpZ2lzaHVnaVwgOwor6J6N6YCa54Sh56KNID4geXV1enV1bXVnZVwgOwor5L+d5a6J6KaB5ZOhID4gaG9hbicneW91aW5cIDsKK+S4u+aIkeS4u+e+qSA+IHNodWdhc2h1Z2lcIDsKK+S4jeS9nOeCuueKryA+IGZ1c2FrdWloYW5cIDsKK+iIl+ijheeFieeTpiA+IGhvc291cmVuZ2FcIDsKK+aKleW9seWbs+azlSA+IHRvdWVpenVob3VcIDsKK+e3j+eKtuiKseW6jyA+IHNvdWpvdWtham9cIDsKK+a4hea1hOeEoeWeoiA+IHNlaWpvdW11a3VcIDsKK+S4iemdouiomOS6iyA+IHNhbm1lbmtpamlcIDsKK+aJjeawl+e4puaoqiA+IHNhaWtpanV1b3VcIDsKK+acrOS9jeiyqOW5oyA+IGhvbicnaWthaGVpXCA7Civppqzpub/kuIHlr6cgPiBiYWthdGVpbmVpXCA7Civml6XokaHovp7mm7ggPiBuaXBwb2ppc2hvXCA7CivkvY3nm7jnqbrplpMgPiBpc291a3V1a2FuXCA7CivmtbfkuovooZvmmJ8gPiBrYWlqaWVpc2VpXCA7CivnqbrmsJfmqZ/morAgPiBrdXVraWtpa2FpXCA7CivlhbHlkIzkupXmiLggPiBreW91ZG91aWRvXCA7CivlkIjnkIbkuLvnvqkgPiBnb3VyaXNodWdpXCA7CivlpKnmtKXlvqHlp4kgPiBhbWF0c3VtaWtvXCA7CivlpKnmiYvlj6ToiJ4gPiB0ZW50ZWtvbWFpXCA7CivlpJzlhYnmmYLoqIggPiB5YWtvdWRva2VpXCA7Civoh6rou6Lou4rlsYsgPiBqaXRlbnNoYXlhXCA7Civoh6rlrrbnlKjou4ogPiBqaWtheW91c2hhXCA7CivljZjkvY3liLbluqYgPiB0YW4nJ2lzZWlkb1wgOwor5paH5a2X5oOF5aCxID4gbW9qaWpvdWhvdVwgOwor6KaP5Yi26Kej6ZmkID4ga2lzZWlrYWlqb1wgOwor5rCX54SU5LiH5LiIID4ga2llbmJhbmpvdVwgOwor5LiL5rC05bel5LqLID4gZ2VzdWlrb3VqaVwgOwor5ZCI5oSP5oOF5q27ID4gZ291aWpvdXNoaVwgOwor5q2m6KOF5bmz5ZKMID4gYnVzb3VoZWl3YVwgOwor5LuY5biv5LqL6aCFID4gZnV0YWlqaWtvdVwgOwor6KGM5pa55LiN5piOID4geXVrdWVmdW1laVwgOwor5aSp5rCX5LqI5aCxID4gdGVua2l5b2hvdVwgOwor5LiN5bmz5LiN5rqAID4gZnVoZWlmdW1hblwgOwor6KKr5L+d6Zm66ICFID4gaGlob2tlbnNoYVwgOwor6Kaq5a2Q6Zu76KmxID4gb3lha29kZW53YVwgOwor5aSa5oOF5aSa5oGoID4gdGFqb3V0YWtvblwgOwor57WM5Za256C057a7ID4ga2VpZWloYXRhblwgOwor6LOb5Yqp5Lya5ZOhID4gc2Fuam9rYWlpblwgOwor5LiL6YOo5qeL6YCgID4ga2FidWtvdXpvdVwgOwor5q+O5Zyf5puc5pelID4gbWFpZG95b3ViaVwgOwor5LqI566X5o6q572uID4geW9zYW5zb2NoaVwgOwor5LiN56mP5YiG5a2QID4gZnVvbmJ1bnNoaVwgOwor5Zac5oCS5ZOA5qW9ID4ga2lkb2FpcmFrdVwgOwor5ryi5ZKM6L6e5YW4ID4ga2Fud2FqaXRlblwgOwor5Y+L6Kq85Zu95a62ID4geXV1Z2lrb2trYVwgOwor55u45LqS5L+d6Zm6ID4gc291Z29ob2tlblwgOwor5LqL5aSn5Li7576pID4gamlkYWlzaHVnaVwgOwor5LqU6Lyq5Lya6K2wID4gZ29yaW5rYWlnaVwgOwor6Kqe5b2i5aSJ5YyWID4gZ29rZWloZW5rYVwgOwor6Z2e5oim6ZeY5ZOhID4gaGlzZW50b3VpblwgOwor54Sh5b+154Sh5oOzID4gbXVuZW5tdXNvdVwgOwor5ryU566X5omL6aCGID4gZW56YW50ZWp1blwgOwor5q2m5pat5Li7576pID4gYnVkYW5zaHVnaVwgOwor5LiW6Kmx5Lq66ZaTID4gc2V3YW5pbmdlblwgOwor5bm+5L2V5bmz5Z2HID4ga2lrYWhlaWtpblwgOwor5Lq65bel6ZmN6ZuoID4gamlua291a291dVwgOwor6Ieq5ZWP6Ieq562UID4gamltb25qaXRvdVwgOwor55qH57SA5bm05bqmID4ga291a2luZW5kb1wgOwor5Y+j6IWU5aSW56eRID4ga291a291Z2VrYVwgOwor6ISz5oCn6bq755e6ID4gbm91c2VpbWFoaVwgOwor5LqU5Y2B6Z+z6aCGID4gZ29qdXVvbmp1blwgOwor5ryU566X57K+5bqmID4gZW56YW5zZWlkb1wgOwor5Y2B5a2X5p6254q2ID4ganV1amlrYWpvdVwgOwor5LiN6ICB5LiN5q27ID4gZnVyb3VmdXNoaVwgOwor5LiW55WM5Li7576pID4gc2VrYWlzaHVnaVwgOwor6J666Yi/57Sw5belID4gcmFkZW56YWlrdVwgOwor6KiY6LyJ5LqL6aCFID4ga2lzYWlqaWtvdVwgOwor54Kt57Sg57mK57atID4gdGFuc29zZW4nJ2lcIDsKK+eEoee3mumbu+ipsSA+IG11c2VuZGVud2FcIDsKK+a4qeaDheS4u+e+qSA+IG9uam91c2h1Z2lcIDsKK+WAi+S6uue1jOWWtiA+IGtvamlua2VpZWlcIDsKK+WllOaUvuS4jee+iCA+IGhvbnBvdWZ1a2lcIDsKK+mJhOWZqOaZguS7oyA+IHRla2tpamlkYWlcIDsKK+eJqeS+oemosOiytCA+IGJ1a2thdG91a2lcIDsKK+aXpeacrOiInui4iiA+IG5paG9uYnV5b3VcIDsKK+iBvuWUluWtpuagoSA+IHJvdWFnYWtrb3VcIDsKK+ePvuS7o+iLseiqniA+IGdlbmRhaWVpZ29cIDsKK+WNgeS6jOS9v+W+kiA+IGp1dW5pc2hpdG9cIDsKK+aXpeacrOW6reWckiA+IG5paG9udGVpZW5cIDsKK+mBuuS8neaal+WPtyA+IGlkZW4nJ2FuZ291XCA7Civou43kuovovLjpgIEgPiBndW5qaXl1c291XCA7CivkvLTmgKfpgbrkvJ0gPiBoYW5zZWlpZGVuXCA7CivntYzllrblj4LliqAgPiBrZWllaXNhbmthXCA7CivkuojlgpnpgbjmjJkgPiB5b2Jpc2Vua3lvXCA7CivkuojlgpnoiabpmoogPiB5b2Jpa2FudGFpXCA7CivkuojlgpnpgbjmiYsgPiB5b2Jpc2Vuc2h1XCA7CivkuI3lgLbmiLTlpKkgPiBmdWd1dGFpdGVuXCA7CivlubPlkozpg6jpmoogPiBoZWl3YWJ1dGFpXCA7CivllK/jgIXoq77jgIUgPiBpaWRha3VkYWt1XCA7Civoo4HliKTmspnmsbAgPiBzYWliYW56YXRhXCA7CivllrbliKnms5XkurogPiBlaXJpaG91amluXCA7CivorbDkvJrmlL/msrsgPiBnaWthaXNlaWppXCA7Civpm6jlpKnpoIblu7YgPiB1dGVuanVuJydlblwgOwor5LuY5biv6LK755SoID4gZnV0YWloaXlvdVwgOwor5Luj6K2w5ZOh5ZujID4gZGFpZ2lpbmRhblwgOwor5LqM6YeN6Kqy56iOID4gbmlqdXVrYXplaVwgOwor5om26aSK5o6n6ZmkID4gZnV5b3Vrb3Vqb1wgOwor6KGb5pif6YO95biCID4gZWlzZWl0b3NoaVwgOwor6Zu75rCX5Zue6LevID4gZGVua2lrYWlyb1wgOwor5Zyw5LiL5LqM6ZqOID4gY2hpa2FuaWthaVwgOwor6aCQ6YeR5Y+j5bqnID4geW9raW5rb3V6YVwgOwor6Imy5oGL5rKZ5rGwID4gaXJva29pemF0YVwgOwor6LKo5bmj5L6h5YCkID4ga2FoZWlrYWNoaVwgOwor5q6L5YuZ5pW055CGID4gemFubXVzZWlyaVwgOwor5YWs5Za25L+d6Zm6ID4ga291ZWlob2tlblwgOwor6K2y5rih5ouF5L+dID4gam91dG90YW5wb1wgOwor5LiA5a625Zuj5qySID4gaWtrYWRhbnJhblwgOwor5Luj6K2w5ZOh5LyaID4gZGFpZ2lpbmthaVwgOwor6KOc5q2j5LqI566XID4gaG9zZWl5b3NhblwgOwor6YGO5Ymw6Ziy6KGbID4ga2Fqb3Vib3VlaVwgOwor5LqI5YKZ5bqn5bitID4geW9iaXphc2VraVwgOwor6KGb55Sf5Z+65rqWID4gZWlzZWlraWp1blwgOwor5L+d6K235Zuj5L2TID4gaG9nb2RhbnRhaVwgOwor5YSA6KOF6aas6LuKID4gZ2lzb3ViYXNoYVwgOwor5pmC5LqL5ZWP6aGMID4gamlqaW1vbmRhaVwgOwor5aSr5amm5Zan5ZipID4gZnV1ZnVnZW5rYVwgOwor5pat5Zu65oqX6K2wID4gZGFua29rb3VnaVwgOwor5LqU6Lyq6IGW54GrID4gZ29yaW5zZWlrYVwgOwor6Ieq5YiG5Yud5omLID4gamlidW5rYXR0ZVwgOwor6LuN6ZyA5pmv5rCXID4gZ3VuanVrZWlraVwgOwor5Z+65bqV6YOo6ZaAID4ga2l0ZWlidW1vblwgOwor5Li45aSq5bCP5bGLID4gbWFydXRhZ295YVwgOwor5LqI5oOz5Yip55uKID4geW9zb3VyaWVraVwgOwor5LqU6Z+z6Z+z6ZqOID4gZ29vbicnb25rYWlcIDsKK+eBq+awl+WOs+emgSA+IGtha2lnZW5raW5cIDsKK+WNgeWtl+aetuWDjyA+IGp1dWppa2F6b3VcIDsKK+WHpueQhumBjueoiyA+IHNob3Jpa2F0ZWlcIDsKK+S4gOWumuS4jeWkiSA+IGl0dGVpZnVoZW5cIDsKK+aciOS4i+e+juS6uiA+IGdla2thYmlqaW5cIDsKK+eArOaIuOWGhea1tyA+IHNldG9uYWlrYWlcIDsKK+iAgeaUv+ayu+WutiA+IHJvdXNlaWppa2FcIDsKK+WKn+WIqeS4u+e+qSA+IGtvdXJpc2h1Z2lcIDsKK+imj+WItue3qeWSjCA+IGtpc2Vpa2Fud2FcIDsKK+WmguaYr+aIkeiBniA+IG55b3plZ2Ftb25cIDsKK+aYjuayu+aZguS7oyA+IG1laWppamlkYWlcIDsKK+WQjOWMluS9nOeUqCA+IGRvdWthc2F5b3VcIDsKK+WIpemAlOmgkOmHkSA+IGJldHRveW9raW5cIDsKK+S4i+eoruagueaApyA+IGdlc3Vrb25qb3VcIDsKK+aPtOWKqeS6pOmamyA+IGVuam9rb3VzYWlcIDsKK+WbveS8muitsOWToSA+IGtva2thaWdpaW5cIDsKK+Wcn+WcsOWIqeeUqCA+IHRvY2hpcml5b3VcIDsKK+aghOaer+ebm+ihsCA+IGVpa29zZWlzdWlcIDsKK+ebuOS6kuS9nOeUqCA+IHNvdWdvc2F5b3VcIDsKK+iInuWPsOiho+ijhSA+IGJ1dGFpaXNob3VcIDsKK+WQiOitsOWItuW6piA+IGdvdWdpc2VpZG9cIDsKK+mbjOmbhOeVsOagqiA+IHNoaXl1dWlzaHVcIDsKK+WPjeWwhOiqpOW3riA+IGhhbnNoYWdvc2FcIDsKK+Whqee0oOmFuOWhqSA+IGVuc29zYW4nJ2VuXCA7Civntbblr77oqqTlt64gPiB6ZXR0YWlnb3NhXCA7CivnianmkI3kuovmlYUgPiBidXNzb25qaWtvXCA7Civlhajpg6jkv53pmbogPiB6ZW5idWhva2VuXCA7Civmgqrlt6vlsbHmiK8gPiB3YXJ1ZnV6YWtlXCA7CivmlbTlvaLlpJbnp5EgPiBzZWlrZWlnZWthXCA7CivmrablrrbmlL/mqKkgPiBidWtlc2Vpa2VuXCA7CivkuozpoIXliIbluIMgPiBuaWtvdWJ1bnB1XCA7CivmmKDnlLvkvJrnpL4gPiBlaWdhZ2Fpc2hhXCA7CivpiYTnoLLnmb7lkIggPiB0ZXBwb3V5dXJpXCA7CivlkI3oqonkvJrlk6EgPiBtZWl5b2thaWluXCA7Civlv5zli5/nlKjntJkgPiBvdWJveW91c2hpXCA7Civoh6rmtYTkvZznlKggPiBqaWpvdXNheW91XCA7CivlpJbosqjpoJDph5EgPiBnYWlrYXlva2luXCA7CivmgZDmgJbmmKDnlLsgPiBreW91ZnVlaWdhXCA7CivoqrLnqI7mjqfpmaQgPiBrYXplaWtvdWpvXCA7CivoqLHlrrnoqqTlt64gPiBreW95b3Vnb3NhXCA7CivkuI3lrprmnJ/liJEgPiBmdXRlaWtpa2VpXCA7CivmmI7msrvntq3mlrAgPiBtZWlqaWlzaGluXCA7CivoqIDoqp7mqZ/og70gPiBnZW5nb2tpbm91XCA7Civkv53nqI7lgInluqsgPiBob3plaXNvdWtvXCA7CivljLvnmYLmqZ/plqIgPiBpcnlvdWtpa2FuXCA7Civnn7PkupXogbDkupIgPiBpc2hpaXNvdWdvXCA7Civou43kuovlsIHpjpYgPiBndW5qaWZ1dXNhXCA7CivkvY3pmo7li7LnrYkgPiBpa2Fpa3VudG91XCA7CivogJDngavnhYnnk6YgPiB0YWlrYXJlbmdhXCA7Civlj6Tku4rnhKHpoZ4gPiBrb2tvbm11cnVpXCA7Civpm7vms6LnrqHnkIYgPiBkZW5wYWthbnJpXCA7CivmsJHkuovkuovku7YgPiBtaW5qaWppa2VuXCA7Civoh6rnhLbkv53orbcgPiBzaGl6ZW5ob2dvXCA7CivnlLvlg4/lh6bnkIYgPiBnYXpvdXNob3JpXCA7CivnqK7nqK7pm5HlpJogPiBzaHVqdXphdHRhXCA7CivmmKDnlLvkv7PlhKogPiBlaWdhaGFpeXV1XCA7Civnm67ojLbnm67ojLYgPiBtZWNoYW1lY2hhXCA7Civno4HmsJfpjLLpn7MgPiBqaWtpcm9rdW9uXCA7CivkuI3ljZTlkozpn7MgPiBmdWt5b3V3YW9uXCA7CivmnKzkvY3oqJjlj7cgPiBob24nJ2lraWdvdVwgOwor6KGb55Sf566h55CGID4gZWlzZWlrYW5yaVwgOwor55u45LqS5Li7576pID4gc291Z29zaHVnaVwgOwor5b+c5Yuf6LOH6YeRID4gb3Vib3NoaWtpblwgOwor5b6p5Y+k5Li7576pID4gZnVra29zaHVnaVwgOwor5qyh5Lqc56Gr6YW4ID4gamlhcnl1dXNhblwgOwor5bmz5a6J5pmC5LujID4gaGVpYW5qaWRhaVwgOwor5oOF5aCx5qmf5ZmoID4gam91aG91a2lraVwgOwor5LiJ5L2N5LiA5L2TID4gc2FubWlpdHRhaVwgOwor5pS/5YuZ5qyh5a6YID4gc2VpbXVqaWthblwgOwor6ZuM6ZuE55Ww5L2TID4gc2hpeXV1aXRhaVwgOwor5q2m5pat5pS/5rK7ID4gYnVkYW5zZWlqaVwgOwor6YW45YyW54Kt57SgID4gc2Fua2F0YW5zb1wgOwor5rC05b2p55S75a62ID4gc3Vpc2FpZ2FrYVwgOwor5Z+656SO5Luj6KydID4ga2lzb3RhaXNoYVwgOwor5LiA5p2v5qmf5auMID4gaXBwYWlraWdlblwgOwor6YGT6Lev6Ly46YCBID4gZG91cm95dXNvdVwgOwor5Lqc54ax5biv5p6XID4gYW5ldHRhaXJpblwgOwor6Z2S5oGv5ZCQ5oGvID4gYW9pa2l0b2lraVwgOwor5oWH5oeD54Sh56S8ID4gaW5naW5idXJlaVwgOwor57Oe55yf6Z2i55uuID4ga3Vzb21hamltZVwgOwor6Ieq5Li76KaP5Yi2ID4gamlzaHVraXNlaVwgOwor5byl55Sf5pmC5LujID4geWF5b2lqaWRhaVwgOwor55uu6Iy26Ium6Iy2ID4gbWVjaGFrdWNoYVwgOwor5LqI5YKZ5Lya6KuHID4geW9iaWthaWRhblwgOwor562J5L2N5qeL6YCgID4gdG91aWtvdXpvdVwgOwor5LuW5rWB6Kmm5ZCIID4gdGFyeXV1amlhaVwgOwor5a6J5a6a5pON5L2cID4gYW50ZWlzb3VzYVwgOwor54Sh5YSf6KGM54K6ID4gbXVzaG91a291aVwgOwor5aSP5pyf5LyR5pqHID4ga2FraWt5dXVrYVwgOwor5aSP5pyf5a2m5qChID4ga2FraWdha2tvdVwgOwor5a6H5a6Z5Yy75a2mID4gdWNodXVpZ2FrdVwgOwor5ZCN6KqJ6Zmk6ZqKID4gbWVpeW9qb3RhaVwgOwor5LqU6IeT5YWt6IWRID4gZ296b3Vyb3BwdVwgOwor5Z+36KGM5aeU5ZOhID4gc2hpa2tvdWlpblwgOwor5Zub6Z2i5qWa5q2MID4gc2hpbWVuc29rYVwgOwor5aiB6aKo5aCC5aCCID4gaWZ1dWRvdWRvdVwgOwor6LuN5LqL5Lya6K2wID4gZ3VuamlrYWlnaVwgOwor6Leb6KGM5pmv5rCXID4gaGFrb3VrZWlraVwgOwor6aWC6aOp57KJ55eFID4gdWRvbmtvYnlvdVwgOwor5aSp5LiL5LiA5ZOBID4gdGVua2FpcHBpblwgOwor5Z+65Zyw6ZaJ6Y6WID4ga2ljaGloZWlzYVwgOwor562G6KiY55So5YW3ID4gaGlra2l5b3VndVwgOwor6JK45rCX5qmf6ZaiID4gam91a2lraWthblwgOwor56OB5rCX5oq15oqXID4gamlraXRlaWtvdVwgOwor5LiB5a2X5a6a6KaPID4gdGVpamlqb3VnaVwgOwor5Zu65a6a6YeR5YipID4ga290ZWlraW5yaVwgOwor6LW35YuV5pmC6ZaTID4ga2lkb3VqaWthblwgOwor6Ieq5bex5qy6556eID4gamlrb2dpbWFuXCA7CivmhbDlronml4XooYwgPiBpYW5yeW9rb3VcIDsKK+mbu+awl+WZqOWFtyA+IGRlbmtpa2lndVwgOwor5Y2x5qmf5omT6ICFID4ga2lraWRhc2hhXCA7CivloanljJbmsLTntKAgPiBlbmthc3Vpc29cIDsKK+S6uuS6i+eVsOWLlSA+IGppbmppaWRvdVwgOwor5Lqc6Ymb6YmE5p2/ID4gYWVudGVwcGFuXCA7Civpga7kuoznhKHkuowgPiBzaGFuaW11bmlcIDsKK+mBuuS8neWcsOWbsyA+IGlkZW5jaGl6dVwgOwor5LiN5rOV6KGM54K6ID4gZnVob3Vrb3VpXCA7CivmrbvkvZPpgbrmo4QgPiBzaGl0YWlpa2lcIDsKK+WGhemHjuWuieaJkyA+IG5haXlhYW5kYVwgOwor5bmz56mP54Sh5LqLID4gaGVpb25idWppXCA7CivmmI7mmI7lvozml6UgPiBzaGlhc2F0dGVcIDsKK+S4gOawl+WRteaIkCA+IGlra2lrYXNlaVwgOwor5q2m5Zmo6LK45LiOID4gYnVraXRhaXlvXCA7CivkuIDlpKvlpJrlprsgPiBpcHB1dGFzYWlcIDsKK+WNseapn+eqgeegtCA+IGtpa2l0b3BwYVwgOwor5Yy755mC5qmf5ZmoID4gaXJ5b3VraWtpXCA7CivlpKnkuIvnhKHmr5QgPiB0ZW5rYW11aGlcIDsKK+aOqeitt+mDqOmaiiA+IGVuZ29idXRhaVwgOwor6aas6bm/6YeO6YOOID4gYmFrYXlhcm91XCA7Civlj6Poqp7oi7Hoqp4gPiBrb3Vnb2VpZ29cIDsKK+mJhOeBq+WRs+WZjCA+IHRla2thbWlzb1wgOwor6Zi/5byl6ZmA57WMID4gYW1pZGFreW91XCA7CivpmL/lvKXpmYDnsaQgPiBhbWlkYWt1amlcIDsKK+WtmOWcqOaEj+e+qSA+IHNvbnphaWlnaVwgOwor5Y+I5b6T5YWE5byfID4gbWF0YWl0b2tvXCA7Civnvr3mr5vluIPlm6MgPiB1bW91ZnV0b25cIDsKK+WIqeW3seS4u+e+qSA+IHJpa29zaHVnaVwgOwor5Za25Yip5Li7576pID4gZWlyaXNodWdpXCA7CivnhKHlo7DmmKDnlLsgPiBtdXNlaWVpZ2FcIDsKK+ijnOWKqea8ouWtlyA+IGhvam9rYW5qaVwgOwor5ZKM6Iux6L6e5pu4ID4gd2FlaWppc2hvXCA7CivlkIzkvY3lhYPntKAgPiBkb3VpZ2Vuc29cIDsKK+WGjeW+k+WFhOW8nyA+IGZ1dGFpdG9rb1wgOwor5Lqc6Ymb5Ye454mIID4gYWVudG9wcGFuXCA7Civno4HmsJfmta7kuIogPiBqaWtpZnVqb3VcIDsKK+S4jeazleenu+awkSA+IGZ1aG91aW1pblwgOwor6LaK5qip6KGM54K6ID4gZWtrZW5rb3VpXCA7CivkuLvmhI/kuLvnvqkgPiBzaHVpc2h1Z2lcIDsKK+iHquW3seaknOafuyA+IGppa29rZW5zYVwgOwor5aSa5LqL5aSa6ZujID4gdGFqaXRhbmFuXCA7CivvvKHvvKLvvKPpoIYgPiDEk2LEq3NoxKtqdW5cIDsKK+aEj+awl+aPmuaPmiA+IGlraXlvdXlvdVwgOwor5ZKM6Iux6L6e5YW4ID4gd2FlaWppdGVuXCA7CivkuI3mhI/oqabpqJMgPiBmdWlzaGlrZW5cIDsKK+aooeevhOippuWQiCA+IG1vaGFuamlhaVwgOwor5LqM6YeN5q+N6Z+zID4gbmlqdXVib2luXCA7CivmoITogIDmoIToj68gPiBlaXlvdWVpZ2FcIDsKK+avjeiqnuipseiAhSA+IGJvZ293YXNoYVwgOwor5pyo5oi45b6h5YWNID4ga2lkb2dvbWVuXCA7Civoh6rlt7Hnlo7lpJYgPiBqaWtvc29nYWlcIDsKK+WfuuekjuaOp+mZpCA+IGtpc29rb3Vqb1wgOwor5LiA5a6a5rip5bqmID4gaXR0ZWlvbmRvXCA7CivmiYvliY3lkbPlmYwgPiB0ZW1hZW1pc29cIDsKK+WFgeaWh+WFgeatpiA+IGluYnVuaW5idVwgOwor6Ieq5pq06Ieq5qOEID4gamlib3VqaWtpXCA7Civnm7jmkrLpg6jlsYsgPiBzdW1vdWJleWFcIDsKK+iHquW3seS/neWtmCA+IGppa29ob3pvblwgOwor5aSa5LqL5aSa56uvID4gdGFqaXRhdGFuXCA7CivmmI7jgIXlvozml6UgPiBzaGlhc2F0dGVcIDsKK+abluaYp+aooeeziiA+IGFpbWFpbW9rb1wgOwor5LqL5YuZ5qyh5a6YID4gamltdWppa2FuXCA7CivmsJflrofluoPlpKcgPiBraXVrb3VkYWlcIDsKK+WkmuaVsOaEj+imiyA+IHRhc3V1aWtlblwgOwor5q2v56eR5Yy75birID4gc2hpa2Fpc2hpXCA7Civnvo7ljJbpgYvli5UgPiBiaWthdW5kb3VcIDsKK+iHquW3seS4u+e+qSA+IGppa29zaHVnaVwgOwor5a6f6KGM5aeU5ZOhID4gamlra291aWluXCA7CivlkIjmsJfpgZPlrrYgPiBhaWtpZG91a2FcIDsKK+mBuuaXj+aJtuWKqSA+IGl6b2t1ZnVqb1wgOwor5aiR576F5Y+M5qi5ID4gc2FyYXNvdWp1XCA7CivmhI/msJfmj5rjgIUgPiBpa2l5b3V5b3VcIDsKK+iHquW3semhleekuiA+IGppa29rZW5qaVwgOwor6Ieq5bex6LKg5ouFID4gamlrb2Z1dGFuXCA7CivpnLLlpKnpoqjlkYIgPiByb3RlbmJ1cm9cIDsKK+aEj+awl+aKleWQiCA+IGlraXRvdWdvdVwgOwor6YGL5ZCm5aSp6LOmID4gdW5wdXRlbnB1XCA7Civlr4zmoITppIrljJYgPiBmdWVpeW91a2FcIDsKK+WNsOW6puaUr+mCoyA+IGluZG9zaGluYVwgOwor5qyn5YyW5Li7576pID4gb3VrYXNodWdpXCA7CivnhKHkuoznhKHkuIkgPiBtdW5pbXV6YW5cIDsKK+S4ieaXpeS4ieWknCA+IG1pa2thbWl5b1wgOwor54mh5Li55rW36ICBID4gYm90YW4nJ2ViaVwgOwor6Zu75rCX5qmf5ZmoID4gZGVua2lraWtpXCA7Civoh6rlt7Hlq4zmgqogPiBqaWtva2VuJydvXCA7Civln7rmnKzlkIjmhI8gPiBraWhvbmdvdWlcIDsKK+Wwj+WFkOenkeWMuyA+IHNob3VuaWthaVwgOwor5oiR5q2m6ICF576FID4gZ2FtdXNoYXJhXCA7Civoh6rlt7HniqDnibIgPiBqaWtvZ2lzZWlcIDsKK+ebuOS6kuaJtuWKqSA+IHNvdWdvZnVqb1wgOwor5ZCM6Z+z55Ww576pID4gZG91b24nJ2lnaVwgOwor6Ieq5bex5pys5L2NID4gamlrb2hvbicnaVwgOwor55Ww5bi46auY5ripID4gaWpvdWtvdW9uXCA7Civou43kuovmj7TliqkgPiBndW5qaWVuam9cIDsKK+W8iuiho+egtOW4vSA+IGhlaWloYWJvdVwgOwor5LiD5LqU5LiJ57iEID4gc2hpbWVuYXdhXCA7CivmlofljJbpgbrnlKMgPiBidW5rYWlzYW5cIDsKK+WPiOW+k+WnieWmuSA+IG1hdGFpdG9rb1wgOwor6Ieq5a625Y+X57K+ID4gamlrYWp1c2VpXCA7Civoh6rlrrblj5fnsokgPiBqaWthanVmdW5cIDsKK+awkeeUn+WnlOWToSA+IG1pbnNlaWlpblwgOwor5oSb5LuW5Li7576pID4gYWl0YXNodWdpXCA7CivkuIDlhZrkuIDmtL4gPiBpdHRvdWlwcGFcIDsKK+aAquWlh+aYoOeUuyA+IGthaWtpZWlnYVwgOwor6YeI6L+m54mf5bC8ID4gc2hha2FtdW5pXCA7CivnpL7kvJrntYzmuIggPiBzaGFrYWlrZWlcIDsKK+e1kOi3j+i2uuW6pyA+IGtla2thZnV6YVwgOwor6JOW6bq75a2Q5rK5ID4gaGltYXNoaXl1XCA7CivlpKnmsJflhbflkIggPiB0ZW5raWd1YWlcIDsKK+S4gOWPo+WQjOmfsyA+IGlra3Vkb3VvblwgOwor5LiN5Y+v5oCd6K2wID4gZnVrYXNoaWdpXCA7CivljLvkuovkvJ3pgZMgPiBpamlkZW5kb3VcIDsKK+mfs+mDqOiomOWPtyA+IG9uYnVraWdvdVwgOwor5aWI6Imv5pmC5LujID4gbmFyYWppZGFpXCA7CivogLPpvLvlkr3llokgPiBqaWJpaW5rb3VcIDsKK+epuuawl+axmuafkyA+IGt1dWtpb3NlblwgOwor54OP5bi95a2Q6LKdID4gZWJvc2hpZ2FpXCA7CivmnInosaHnhKHosaEgPiB1em91bXV6b3VcIDsKK+i1t+iotOeMtuS6iCA+IGtpc295dXV5b1wgOwor5LyK5Yui56We5a6uID4gaXNlamluZ3V1XCA7CivlsLjkvY3ntKDppJAgPiBzaGlpc29zYW5cIDsKK+mHjuWkqemiqOWRgiA+IG5vdGVuYnVyb1wgOwor54Sh55CG54Sh5L2TID4gbXVyaW11dGFpXCA7CivmhI/msJfou5Lpq5ggPiBpa2lrZW5rb3VcIDsKK+iqnuWwvuWkieWMliA+IGdvYmloZW5rYVwgOwor5Lmd5YiG5Lmd5Y6YID4ga3VidWt1cmluXCA7Civoh6rlt7Hopo/liLYgPiBqaWtva2lzZWlcIDsKK+WQjOWnlOWToeS8miA+IGRvdWlpbmthaVwgOwor5rKZ576F5Y+M5qi5ID4gc2FyYXNvdWp1XCA7CivkuIDlprvlpJrlpKsgPiBpc3NhaXRhZnVcIDsKK+S4jeato+ihjOeCuiA+IGZ1c2Vpa291aVwgOwor54++54q257at5oyBID4gZ2Vuam91aWppXCA7Civnvo7ovp7pupflj6UgPiBiaWppcmVpa3VcIDsKK+S4jeiogOS4jeiqniA+IGZ1Z2VuZnVnb1wgOwor5LiL6YOo5qmf6ZaiID4ga2FidWtpa2FuXCA7CivlgIvkurroqqTlt64gPiBrb2ppbmdvc2FcIDsKK+iHqueUseaEj+W/lyA+IGppeXV1aXNoaVwgOwor5LqM5qyh6KiY5oa2ID4gbmlqaWtpb2t1XCA7CivljLrkvJrorbDlk6EgPiBrdWthaWdpaW5cIDsKK+WPpOS6i+iomOS8nSA+IGtvamlraWRlblwgOwor54Sh54K654Sh562WID4gbXVpbXVzYWt1XCA7CivlsI/nlJ/mhI/msJcgPiBrb25hbWFpa2lcIDsKK+axmuafk+mZpOWOuyA+IG9zZW5qb2t5b1wgOwor5om26aSK576p5YuZID4gZnV5b3VnaW11XCA7Civmk6zlj6TkuLvnvqkgPiBnaWtvc2h1Z2lcIDsKK+S5neWvuOS6lOWIhiA+IGt1c3VuZ29idVwgOwor5oSP5rCX6LuS5piCID4gaWtpa2Vua291XCA7CivlpbPpg47onJjom5sgPiBqb3JvdWd1bW9cIDsKK+S4jemaj+aEj+etiyA+IGZ1enVpaWtpblwgOwor56e76KGM5pyf6ZaTID4gaWtvdWtpa2FuXCA7Civku5jliqDkvqHlgKQgPiBmdWtha2FjaGlcIDsKK+Wcn+WjjOaxmuafkyA+IGRvam91b3NlblwgOwor5LiK6Zmi6K2w5ZOhID4gam91aW5naWluXCA7CivlvqHlrrbpqJLli5UgPiBvaWVzb3Vkb3VcIDsKK+S6jOW6puS4ieW6piA+IG5pZG9zYW5kb1wgOwor6auY56WW6aCt5be+ID4ga29zb3p1a2luXCA7Civkuojlgpnpg6jlk4EgPiB5b2JpYnVoaW5cIDsKK+iHquW3seaJueWIpCA+IGppa29oaWhhblwgOwor6Ieq55S76Ieq6LObID4gamlnYWppc2FuXCA7Civoh6rnlLvoh6rorpogPiBqaWdhamlzYW5cIDsKK+mmluS9jeaJk+iAhSA+IHNodWlkYXNoYVwgOwor5Zug5p6c5b+c5aCxID4gaW5nYW91aG91XCA7CivkuIvlpbPkuIvnlLcgPiBnZWpvZ2VuYW5cIDsKK+WuiealveakheWtkCA+IGFucmFrdWlzdVwgOwor5aeU5ZOh5LuY6KiXID4gaWluZnV0YWt1XCA7CivkuojlgpnpgYvli5UgPiB5b2JpdW5kb3VcIDsKK+mBuueUo+euoeeQhiA+IGlzYW5rYW5yaVwgOwor5LqJ6K2w6KGM54K6ID4gc291Z2lrb3VpXCA7CivpurvlqYbosYbohZAgPiBtxIFib2RvdWZ1XCA7CivmlofljJbmmKDnlLsgPiBidW5rYWVpZ2FcIDsKK+aEj+WRs+WGheWuuSA+IGltaW5haXlvdVwgOwor5LqI5YKZ5Yik5LqLID4geW9iaWhhbmppXCA7CivmrablrrbmmYLku6MgPiBidWtlamlkYWlcIDsKK+WMu+eZgumBjuiqpCA+IGlyeW91a2Fnb1wgOwor5q2m5a625pS/5rK7ID4gYnVrZXNlaWppXCA7CivlpbPnjovpmZvkuIsgPiBqb291aGVpa2FcIDsKK+Wkp+awl+axmuafkyA+IHRhaWtpb3NlblwgOwor5Z+656SO5bel5LqLID4ga2lzb2tvdWppXCA7CivnhKHnkIblvoDnlJ8gPiBtdXJpb3Vqb3VcIDsKK+S9leaZguaZguWIhiA+IGl0c3VqaWJ1blwgOwor55u45LqS5L6d5a2YID4gc291Z29pem9uXCA7Civoqp7lvZnopo/liYcgPiBnb2lraXNva3VcIDsKK+iHquW3seW8geittyA+IGppa29iZW5nb1wgOwor5LqU5Y2B6Z+z5ZuzID4gZ29qdXVvbnp1XCA7CivliKnku5bkuLvnvqkgPiByaXRhc2h1Z2lcIDsKK+WKoOaMgeeliOeltyA+IGthamlraXRvdVwgOwor6Iqx5Y2J5ZyS6Iq4ID4ga2FraWVuZ2VpXCA7Civlkozoo73oi7Hoqp4gPiB3YXNlaWVpZ29cIDsKK+S7ruWQjeaJi+acrCA+IGthbmFkZWhvblwgOwor6Iux5ZKM6L6e5YW4ID4gZWl3YWppdGVuXCA7CivkuojlgpnkvJrorbAgPiB5b2Jpa2FpZ2lcIDsKK+S6jOmZouWItuW6piA+IG5paW5zZWlkb1wgOwor5aSP5pyf5pmC6ZaTID4ga2FraWppa2FuXCA7CivkupXmiLjlsYvlvaIgPiBpZG95YWthdGFcIDsKK+iHquW3seefm+ebviA+IGppa29tdWp1blwgOwor5Y2x5qmf566h55CGID4ga2lraWthbnJpXCA7Civln7rnpI7kvZPmuKkgPiBraXNvdGFpb25cIDsKK+ebguiYreebhuS8miA+IHVyYWJvbicnZVwgOwor5Yy756eR5q2v56eRID4gaWthc2hpa2FcIDsKK+S6jOW6puaJi+mWkyA+IG5pZG9kZW1hXCA7Civkuo7omK3nm4bkvJogPiB1cmFib24nJ2VcIDsKK+aBteavlOWvv+mhlCA+IGViaXN1Z2FvXCA7CivmhJrlm7PmhJrlm7MgPiBndXp1Z3V6dVwgOwor5ZKM5rCX6Je56Je5ID4gd2FraWFpYWlcIDsKK+S4jeecn+mdouebriA+IGZ1bWFqaW1lXCA7CivlvpfmiYvli53miYsgPiBldGVrYXR0ZVwgOwor5a+E5LuY6KGM54K6ID4ga2lmdWtvdWlcIDsKK+S5juWPpOatoueCuSA+IG9rb3RvdGVuXCA7Civlr4zlo6vkupTmuZYgPiBmdWppZ29rb1wgOwor5piv5piv6Z2e6Z2eID4gemV6ZWhpaGlcIDsKK+aIkeWIqeaIkeWIqSA+IGdhcmlnYXJpXCA7CivmsZ/miLjmmYLku6MgPiBlZG9qaWRhaVwgOwor5q2v56eR5Yy76ZmiID4gc2hpa2FpaW5cIDsKK+aEj+awl+mYu+WWqiA+IGlraXNvc291XCA7CivpgZXniq/ooYzngrogPiBpaGFua291aVwgOwor5oG15q+U6aCI6KybID4gZWJpc3Vrb3VcIDsKK+S4gOatqeS4gOatqSA+IGlwcG9pcHBvXCA7CivlkozmsJfol7njgIUgPiB3YWtpYWlhaVwgOwor54Sh5pyf5bu25pyfID4gbXVraWVua2lcIDsKK+i1pOmzpei1pOiFuSA+IGFrYWtva2tvXCA7CivlpKnniL7kuY7ms6IgPiB0ZW5pd29oYVwgOwor5L6d5oCZ6LSU5bGTID4gZWtvaGlpa2lcIDsKK+S6i+WLmeapn+WZqCA+IGppbXVraWtpXCA7Civoh6rlt7HmmpfnpLogPiBqaWtvYW5qaVwgOwor5Lyv5YmM6KW/54i+ID4gYnVyYWppcnVcIDsKK+S4i+mZouitsOWToSA+IGthaW5naWluXCA7Civpm7vmsJfmpIXlrZAgPiBkZW5raWlzdVwgOwor5bmz5ZKM57at5oyBID4gaGVpd2FpamlcIDsKK+acieeCuui7ouWkiSA+IHVpdGVucGVuXCA7Civoi7HlsI/mloflrZcgPiBlaWtvbW9qaVwgOwor5L2V5Yem5YW25YemID4gZG9rb3Nva29cIDsKK+W8lueIvuS5juazoiA+IHRlbml3b2hhXCA7Civlh7rmnaXlhbflkIggPiBkZWtpZ3VhaVwgOwor5oSP5ZGz6YOo6ZaAID4gaW1pYnVtb25cIDsKK+Wcn+W3puihm+mWgCA+IGRvemFlbW9uXCA7CivmhI/lkbPljp/nkIYgPiBpbWlnZW5yaVwgOwor5L6d5Lyw6LSU5bGTID4gZWtvaGlpa2lcIDsKK+WppuS6uuenkeWMuyA+IGZ1amlua2FpXCA7Civng4/luL3lrZDlkI0gPiBlYm9zaGluYVwgOwor6aKo6YKq5rCX5ZGzID4ga2F6ZWdpbWlcIDsKK+W3pumhp+WPs+echCA+IHNha291YmVuXCA7Civku67lkI3mloflrZcgPiBrYW5hbW9qaVwgOwor5Zyw5LiL6Laz6KKLID4gamlrYXRhYmlcIDsKK+Wkp+ecn+mdouebriA+IG9vbWFqaW1lXCA7CivmpJzpnZ7pgZXkvb8gPiBrZWJpaXNoaVwgOwor5b6h54Sh5rKZ5rGwID4gZ29idXNhdGFcIDsKK+WPs+mhp+W3puechCA+IHVrb3NhYmVuXCA7CivpgZXms5XooYzngrogPiBpaG91a291aVwgOwor5Lya5oSP5paH5a2XID4ga2FpaW1vamlcIDsKK+WQiOe4geWlh+e4gSA+IGFpZW5raWVuXCA7Civnm6Pmn7vlp5Tlk6EgPiBrYW5zYWlpblwgOwor55Ww5Y+j5ZCM6Z+zID4gaWt1ZG91b25cIDsKK+W8leeBq+a4qeW6piA+IGlua2FvbmRvXCA7CivpmL/lj6TlsYvosp0gPiBha295YWdhaVwgOwor55Sf55yf6Z2i55uuID4ga2ltYWppbWVcIDsKK+aYr+OAhemdnuOAhSA+IHplemVoaWhpXCA7CivnhKHnkIbnn6LnkIYgPiBtdXJpeWFyaVwgOwor56S65aiB6YGL5YuVID4gamlpdW5kb3VcIDsKK+S4gOWkq+S4gOWppiA+IGlwcHVpcHB1XCA7CivkupTliIbkupTliIYgPiBnb2J1Z29idVwgOwor5aSp54i+6YGg5rOiID4gdGVuaXdvaGFcIDsKK+W+jOmzpee+vemZoiA+IGdvdG9iYWluXCA7CivmnInogLbnhKHogLYgPiB1eWFtdXlhXCA7CivkupznsbPliKnliqAgPiBhbWVyaWthXCA7CivojY/og6HpurvmsrkgPiBlZ29tYXl1XCA7Civnmq7ohprnp5HljLsgPiBoaWZ1a2FpXCA7Civlj7PlvoDlt6blvoAgPiB1b3VzYW91XCA7Civkupzpurvku4HmsrkgPiBhbWFuaXl1XCA7Civpmpzms6Xng4/os4ogPiBhb3JpaWthXCA7CivlvqHmiqvpnLLnm64gPiBvaGlyb21lXCA7CivotaTllYTmnKjps6UgPiBha2FnZXJhXCA7Civkv53orbflp5Tlk6EgPiBob2dvaWluXCA7CivpmL/lvJfliKnliqAgPiBhZnVyaWthXCA7Civku4rml6XmmI7ml6UgPiBreW91YXN1XCA7Civkupzmi4nmr5jkupwgPiBhcmFiaWFcIDsKK+S8iuWLoua1t+iAgSA+IGlzZWViaVwgOwor5Lqc5YmM5q+U5LqcID4gYXJhYmlhXCA7Civnt5HllYTmnKjps6UgPiBhb2dlcmFcIDsKK+W+oeebruimi+W+lyA+IG9tZW1pZVwgOwor5a+/5pWZ5a6kID4ga290b2J1a2lreW91c2hpdHN1XCA7Civnp4HlsI/oqqwgPiB3YXRha3VzaGlzaG91c2V0c3VcIDsKK+S4g+S4g+aXpSA+IHNoaWNoaXNoaWNoaW5pY2hpXCA7CivntKvpnLLojYkgPiBtdXJhc2FraXRzdXl1a3VzYVwgOwor5LiD44CF5pelID4gc2hpY2hpc2hpY2hpbmljaGlcIDsKK+i7veWPo+ipsSA+IGthcnVrdWNoaWJhbmFzaGlcIDsKK+akjeeJqeizqiA+IHNob2t1YnV0c3VzaGl0c3VcIDsKK+Wuv+ebtOWupCA+IHNodWt1Y2hva3VzaGl0c3VcIDsKK+S4gOWPo+ipsSA+IGhpdG9rdWNoaWJhbmFzaGlcIDsKK+etjeeUn+a0uyA+IHRha2Vub2tvc2Vpa2F0c3VcIDsKK+itsua4oeS6uiA+IHl1enVyaXdhdGFzaGluaW5cIDsKK+WGheW5leipsSA+IHVjaGltYWt1YmFuYXNoaVwgOwor6ZuG5pyt5L+CID4gc2h1dXNhdHN1Z2FrYXJpXCA7Civph5Hmp4zpoK0gPiBrYW5hZHp1Y2hpYXRhbWFcIDsKK+WHuuacreaOmyA+IHNodXNzYXRzdWdha2FyaVwgOwor5LiJ5oyH6bSOID4gbWl0c3V5dWJpa2Ftb21lXCA7Civlh7rmnK3kv4IgPiBzaHVzc2F0c3VnYWthcmlcIDsKK+iFsOi1pOeHlSA+IGtvc2hpYWthdHN1YmFtZVwgOwor6Ki65a+f5a6kID4gc2hpbnNhdHN1c2hpdHN1XCA7CivorZjliKXlipsgPiBzaGlraWJldHN1cnlva3VcIDsKK+engeiHqui6qyA+IHdhdGFrdXNoaWppc2hpblwgOwor5bmz5riF55ubID4gdGFpcmFub2tpeW9tb3JpXCA7CivlhaXlh7rlipsgPiBueXV1c2h1dHN1cnlva3VcIDsKK+e0m+WkseWxiiA+IGZ1bnNoaXRzdXRvZG9rZVwgOwor5rGC6IG35L+CID4ga3l1dXNob2t1Z2FrYXJpXCA7Civph5Hlo7rnnLwgPiBrYW5hdHN1Ym9tYW5ha29cIDsKK+mZs+WIl+WupCA+IGNoaW5yZXRzdXNoaXRzdVwgOwor54m55Yil5a6kID4gdG9rdWJldHN1c2hpdHN1XCA7CivntKvmsLTmmbYgPiBtdXJhc2FraXp1aXNob3VcIDsKK+WPlue3oOW9uSA+IHRvcmlzaGltYXJpeWFrdVwgOwor54mH5Y+j6bCvID4ga2F0YWt1Y2hpaXdhc2hpXCA7CivkuI3lgJLnv4EgPiBva2lhZ2FyaWtvYm9zaGlcIDsKK+S4jeiCluengSA+IGZ1c2hvdXdhdGFrdXNoaVwgOwor5aSx5qWt546HID4gc2hpdHN1Z3lvdXJpdHN1XCA7Civmir3lh7rniakgPiBjaHV1c2h1dHN1YnV0c3VcIDsKK+Wls+WPi+mBlCA+IG9uJyduYXRvbW9kYWNoaVwgOwor55m+5pel5ZKzID4gaHlha3VuaWNoaXpla2lcIDsKK+ihjOWIl+W8jyA+IGd5b3VyZXRzdXNoaWtpXCA7Civlj5bmibHkurogPiB0b3JpYXRzdWthaW5pblwgOwor5Ye65YWl5Zu9ID4gc2h1dHN1bnl1dWtva3VcIDsKK+aJjeanjOmgrSA+IHNhaWR6dWNoaWF0YW1hXCA7CivpgIboqqznmoQgPiBneWFrdXNldHN1dGVraVwgOwor5Ymv6aOf54mpID4gZnVrdXNob2t1YnV0c3VcIDsKK+eToueuqumvsCA+IGh5b3V0YW4nJ25hbWF6dVwgOwor5p2x5Y2K55CDID4gaGlnYXNoaWhhbmt5dXVcIDsKK+WLleeJqeizqiA+IGRvdWJ1dHN1c2hpdHN1XCA7CivotorkuK3opIwgPiBldGNodXVmdW5kb3NoaVwgOwor5Y2w5Y2K57qPID4gc2hpcnVzaGliYW50ZW5cIDsKK+S7leaWueipsSA+IHNoaWthdGFiYW5hc2hpXCA7CivmlLnmnK3kv4IgPiBrYWlzYXRzdWdha2FyaVwgOwor5YmD5YiA6KemID4ga2FtaXNvcmlrYWJ1cmVcIDsKK+Wjsua4oeiovCA+IHVyaXdhdGFzaGlzaG91XCA7CivlkYrliKXlvI8gPiBrb2t1YmV0c3VzaGlraVwgOwor5aS+6ZuR54mpID4ga3lvdXphdHN1YnV0c3VcIDsKK+e3keeZveiJsiA+IHJ5b2t1aGFrdXNob2t1XCA7Civohp3plqLnr4AgPiBzaGl0c3VrYW5zZXRzdVwgOwor5o6l57aa5Y+jID4gc2V0c3V6b2t1Z3VjaGlcIDsKK+WHneedgOWKmyA+IGd5b3VjaGFrdXJ5b2t1XCA7Civmh5Dli5jlrpogPiBmdXRva29yb2thbmpvdVwgOwor5o+Q5Ye654mpID4gdGVpc2h1dHN1YnV0c3VcIDsKK+WHuuacreWPoyA+IHNodXNzYXRzdWd1Y2hpXCA7CivlpKnml6Xnk6YgPiB0ZW5qaXRzdWdhd2FyYVwgOwor5aSi54mp6KqeID4geXVtZW1vbm9nYXRhcmlcIDsKK+S4gOaYlOWJjSA+IGhpdG9tdWthc2hpbWFlXCA7Civnmb7ljZLplbcgPiBoeWFrdXNvdHN1Y2hvdVwgOwor6YCG6KGM5YiXID4gZ3lha3VneW91cmV0c3VcIDsKK+aXreaXpeeroCA+IGt5b2t1aml0c3VzaG91XCA7Civlubzlj4vpgZQgPiBvc2FuYXRvbW9kYWNoaVwgOwor5bC76Lu95aWzID4gc2hpcmlnYXJ1b24nJ25hXCA7Civnmb3piaLlt7sgPiBzaGlyb2hhY2hpbWFraVwgOwor6JaE57Sr6ImyID4gdXN1bXVyYXNha2lpcm9cIDsKK+WHuuWhgeeOhyA+IHNodXRzdXJ1aXJpdHN1XCA7Civpm7vkv6Hmn7EgPiBkZW5zaGluYmFzaGlyYVwgOwor5YaF6Ki86KmxID4gbmFpc2hvdWJhbmFzaGlcIDsKK+e3keeOieefsyA+IHJ5b2t1Z3lva3VzZWtpXCA7Civohp3ok4vpqqggPiBzaGl0c3VnYWlrb3RzdVwgOwor5Luu5Ye6542EID4ga2FyaXNodXRzdWdva3VcIDsKK+eJueWIpeiBtyA+IHRva3ViZXRzdXNob2t1XCA7Civlkb3ovpvovpsgPiBpbm9jaGlnYXJhZ2FyYVwgOwor6Lui5YWl5bGKID4gdGVuJydueXV1dG9kb2tlXCA7Civlj5fku5jkv4IgPiB1a2V0c3VrZWdha2FyaVwgOwor5bCx6IG3546HID4gc2h1dXNob2t1cml0c3VcIDsKK+e1puaWmeiiiyA+IGt5dXVyeW91YnVrdXJvXCA7CivmpI3nianlraYgPiBzaG9rdWJ1dHN1Z2FrdVwgOwor5aSn5ZKM6a2CID4geWFtYXRvZGFtYXNoaWlcIDsKK+S4i+WPsOaJgCA+IHNoaW1vZGFpZG9rb3JvXCA7CivlsLHogbflj6MgPiBzaHV1c2hva3VndWNoaVwgOwor562L6IKJ6LOqID4ga2luJyduaWt1c2hpdHN1XCA7Civlipvku5XkuosgPiBjaGlrYXJhc2hpZ290b1wgOwor5auh5Ye65a2QID4gY2hha3VzaHV0c3VzaGlcIDsKK+eJh+iiluacuiA+IGthdGFzb2RlZHp1a3VlXCA7CivljZLmpa3lvI8gPiBzb3RzdWd5b3VzaGlraVwgOwor5YWJ6YCa5L+hID4gaGlrYXJpdHN1dXNoaW5cIDsKK+WPlue3oOazlSA+IHRvcmlzaGltYXJpaG91XCA7CivmiYvooZPlrqQgPiBzaHVqdXRzdXNoaXRzdVwgOwor6Kmm552A5a6kID4gc2hpY2hha3VzaGl0c3VcIDsKK+eIhueZuueJqSA+IGJha3VoYXRzdWJ1dHN1XCA7CivnjKrmrabogIUgPiBpbm9zaGlzaGltdXNoYVwgOwor5aSn6buS5p+xID4gZGFpa29rdWJhc2hpcmFcIDsKK+mOluW4t+WtkCA+IGt1c2FyaWthdGFiaXJhXCA7CivkuI3our7ogIUgPiBidXNoaXRzdWtlbW9ub1wgOwor5LiJ6Imy6I+rID4gc2Fuc2hva3VzdW1pcmVcIDsKK+WRvei+m+OAhSA+IGlub2NoaWdhcmFnYXJhXCA7Civlh7rlipvnt5ogPiBzaHV0c3VyeW9rdXNlblwgOwor54iG55m65YqbID4gYmFrdWhhdHN1cnlva3VcIDsKK+edgOS/oeWxgCA+IGNoYWt1c2hpbmt5b2t1XCA7CivmjpLlh7rniakgPiBoYWlzaHV0c3VidXRzdVwgOwor6Ymx54mp6LOqID4ga291YnV0c3VzaGl0c3VcIDsKK+aMr+WHuuWxgCA+IGZ1cmlkYXNoaWt5b2t1XCA7Civln7fli5nlrqQgPiBzaGl0c3VtdXNoaXRzdVwgOwor55m654ax6YePID4gaGF0c3VuZXRzdXJ5b3VcIDsKK+Wkp+WFq+i7iiA+IGRhaWhhY2hpZ3VydW1hXCA7Civnm7TmjqXnmoQgPiBjaG9rdXNldHN1dGVraVwgOworzrjnkIboq5YgPiBzaGlcIMyEdGFcIMyEcmlyb25cIDsKK+aUueacremLjyA+IGthaXNhdHN1aGFzYW1pXCA7CivkuI3mnZ/ogIUgPiBmdXRzdXRzdWthbW9ub1wgOwor54eV5Y2D6bOlID4gdHN1YmFtZWNoaWRvcmlcIDsKK+S8keaGqeWupCA+IGt5dXVrZWlzaGl0c3VcIDsKK+aXpeayoeWJjSA+IG5pY2hpYm90c3V6ZW5cIDsKK+eLkOagvOWtkCA+IGtpdHN1bmVnb3VzaGlcIDsKK+mWsuimp+WupCA+IGV0c3VyYW5zaGl0c3VcIDsKK+W7uuevieeJqSA+IGtlbmNoaWt1YnV0c3VcIDsKK+Wun+izqueahCA+IGppc3NoaXRzdXRla2lcIDsKK+e/jOOAheaXpSA+IHlva3V5b2t1aml0c3VcIDsKK+ippuiBtOWupCA+IHNoaWNob3VzaGl0c3VcIDsKK+WPpOW8t+iAhSA+IGZ1cnV0c3V3YW1vbm9cIDsKK+eLuOWbg+WtkCA+IHRhbnVraWJheWFzaGlcIDsKK+akjeavm+ihkyA+IHNob2t1bW91anV0c3VcIDsKK+aXp+ato+aciCA+IGt5dXVzaG91Z2F0c3VcIDsKK+S4uOm8u+icgiA+IG1hcnVoYW5hYmFjaGlcIDsKK+iEmuiJsuiAhSA+IGt5YWt1c2hva3VzaGFcIDsKK+adsea1t+WyuCA+IGhpZ2FzaGlrYWlnYW5cIDsKK+ebtOeri+iMjiA+IGNob2t1cml0c3VrZWlcIDsKK+eZvembquWnqyA+IHNoaXJheXVraWhpbWVcIDsKK+aWreeGseeahCA+IGRhbicnbmV0c3V0ZWtpXCA7Civms6XnuITlvI8gPiBkb3JvbmF3YXNoaWtpXCA7CivoprPplrLlvI8gPiBrYW4nJ2V0c3VzaGlraVwgOwor5ZC45rm/5oCnID4ga3l1dXNoaXRzdXNlaVwgOwor5raI5qW155qEID4gc2hvdWt5b2t1dGVraVwgOwor5ryC5rWB54mpID4gaHlvdXJ5dXVidXRzdVwgOwor5LiL5LqM5qGBID4gc2hpbW9mdXRha2V0YVwgOwor5oaC6ayx6LOqID4geXV1dXRzdXNoaXRzdVwgOwor5L+E5oiQ6YeRID4gbml3YWthbmFyaWtpblwgOwor5Y+O56mr54mpID4gc2h1dWtha3VidXRzdVwgOwor6LK45LuY6YeRID4ga2FzaGl0c3VrZWtpblwgOwor5YuV54mp6YGUID4gZG91YnV0c3V0YWNoaVwgOwor6aOf57On5bqBID4gc2hva3VyeW91Y2hvdVwgOwor6IW655eF6LOqID4gc2VuYnlvdXNoaXRzdVwgOwor5rCR57SE6KqsID4gbWluJyd5YWt1c2V0c3VcIDsKK+WQuOa5v+WJpCA+IGt5dXVzaGl0c3V6YWlcIDsKK+S6jOeti+mBkyA+IGZ1dGFzdWppbWljaGlcIDsKK+WNiumVt+mdtCA+IGhhbicnbmFnYWd1dHN1XCA7CivmoKHplbflrqQgPiBrb3VjaG91c2hpdHN1XCA7Civmsbrmlq3lipsgPiBrZXRzdWRhbnJ5b2t1XCA7Civlt67lh7rkurogPiBzYXNoaWRhc2hpbmluXCA7CivkuIPmm5zooaggPiBzaGljaGl5b3VoeW91XCA7CivngbDnt5HoibIgPiBrYWlyeW9rdXNob2t1XCA7CivmnKzos6rnmoQgPiBob25zaGl0c3V0ZWtpXCA7CivmsYLlv4PlipsgPiBreXV1c2hpbnJ5b2t1XCA7CivntZDlm6PlvI8gPiBrZXRzdWRhbnNoaWtpXCA7CivmlLnmnK3lj6MgPiBrYWlzYXRzdWd1Y2hpXCA7CivnuYHmrpblipsgPiBoYW5zaG9rdXJ5b2t1XCA7Civlm4PlrZDoqZ4gPiBoYXlhc2hpa290b2JhXCA7Civkurrlt67mjIcgPiBoaXRvc2FzaGl5dWJpXCA7CivkuIPpnaLps6UgPiBzaGljaGltZW5jaG91XCA7CivnmbroqIDlipsgPiBoYXRzdWdlbnJ5b2t1XCA7Civlh7rkuJbpoK0gPiBzaHVzc2VnYXNoaXJhXCA7Civpm4bkuK3lipsgPiBzaHV1Y2h1dXJ5b2t1XCA7CivlsYjovrHnmoQgPiBrdXRzdWpva3V0ZWtpXCA7CivllYblo7LmlbUgPiBzaG91YmFpZ2F0YWtpXCA7Civlh7rnlJ/lsYogPiBzaHVzc2VpdG9kb2tlXCA7CivohLHnjYTlm5ogPiBkYXRzdWdva3VzaHV1XCA7Civlj6Tmrablo6sgPiBmdXJ1dHN1d2Ftb25vXCA7CivlnJ/nlKPoqbEgPiBtaXlhZ2ViYW5hc2hpXCA7Civnmb3oo4XmnZ8gPiBzaGlyb3Nob3V6b2t1XCA7CivohbDlt77nnYAgPiBrb3NoaWdpbmNoYWt1XCA7CivljYrnhp/ljbUgPiBoYW5qdWt1dGFtYWdvXCA7CivmsqHluLjorZggPiBib3RzdWpvdXNoaWtpXCA7Civpm4blobXooosgPiBzaHV1amluYnVrdXJvXCA7CivkuInkuIvlpbQgPiBzYW5zaGl0YXlha2tvXCA7CivlnLDos6rlraYgPiBjaGlzaGl0c3VnYWt1XCA7Civmpb3lsYvoqbEgPiBnYWt1eWFiYW5hc2hpXCA7CivlvLflparniakgPiBnb3VkYXRzdWJ1dHN1XCA7CivplpHml6XmnIggPiBrYW5qaXRzdWdldHN1XCA7CivmjJHnmbrnmoQgPiBjaG91aGF0c3V0ZWtpXCA7CivnpZ3npa3ml6UgPiBzaHVrdXNhaWppdHN1XCA7CivlvavliLvooZMgPiBjaG91a29rdWp1dHN1XCA7CivkuK3nq4vlm70gPiBjaHV1cml0c3Vrb2t1XCA7CivllqvnhZnlrqQgPiBraXRzdWVuc2hpdHN1XCA7CivkuIDkuKHml6UgPiBpY2hpcnlvdWppdHN1XCA7CivmqYvohJroiJ8gPiBreW91a3lha3VzaHV1XCA7CivmvKzniannn7MgPiB0c3VrZW1vbm9pc2hpXCA7CivlpJblh7rkuK0gPiBnYWlzaHV0c3VjaHV1XCA7CivpiYTmn5PoibIgPiB0ZXRzdXNlbnNob2t1XCA7Civni6znq4vlv4MgPiBkb2t1cml0c3VzaGluXCA7Civku4rmnIjmnKsgPiBrb25nZXRzdW1hdHN1XCA7Civlrp/nianlpKcgPiBqaXRzdWJ1dHN1ZGFpXCA7Civmi77lvpfniakgPiBzaHV1dG9rdWJ1dHN1XCA7CivlgInmlbfmlpkgPiBrdXJhc2hpa2lyeW91XCA7Civos4fmlpnlrqQgPiBzaGlyeW91c2hpdHN1XCA7CivosrfnianooosgPiBrYWltb25vYnVrdXJvXCA7CivlkLjlj47lipsgPiBreXV1c2h1dXJ5b2t1XCA7Civni6znq4vlm70gPiBkb2t1cml0c3Vrb2t1XCA7CivooYDlsL/nl4cgPiBrZXRzdW55b3VzaG91XCA7CivlvavliLvniakgPiBjaG91a29rdWJ1dHN1XCA7CivloKrlv43ooosgPiBrYW4nJ25pbmJ1a3Vyb1wgOwor56S+6ZW35a6kID4gc2hhY2hvdXNoaXRzdVwgOwor5Li85YuY5a6aID4gZG9uYnVyaWthbmpvdVwgOwor546J5a2Q5Li8ID4gdGFtYWdvZG9uYnVyaVwgOwor57iu5Yi354mIID4gc2h1a3VzYXRzdWJhblwgOwor5LuK5pel55qEID4ga29uJyduaWNoaXRla2lcIDsKK+a0nuWvn+WKmyA+IGRvdXNhdHN1cnlva3VcIDsKK+advumjn+iZqyA+IG1hdHN1a3VpbXVzaGlcIDsKK+iKi+iUk+W8jyA+IGltb2R6dXJ1c2hpa2lcIDsKK+izqumHj+aVsCA+IHNoaXRzdXJ5b3VzdXVcIDsKK+WIpemFjemBlCA+IGJldHN1aGFpdGF0c3VcIDsKK+S7iuaXpeanmCA+IGtvbicnbmljaGlzYW1hXCA7CivlhqDlpKfkvJogPiBrYW5tdXJpdGFpa2FpXCA7Civov73opIfmm7IgPiB0c3VpZnVrdWt5b2t1XCA7CivntYTlkIjpoK0gPiBrdW1pYWlnYXNoaXJhXCA7CivmlaPmranml4EgPiBzYW5wb2thdGFnYXRhXCA7CivkvpvoqJfniakgPiBreW91dGFrdWJ1dHN1XCA7Civlh7rpoZjkurogPiBzaHV0c3VnYW4nJ25pblwgOwor57KY552A5YqbID4gbmVuY2hha3VyeW9rdVwgOwor5a6/5rOK5paZID4gc2h1a3VoYWt1cnlvdVwgOwor5p6d5Z6C5qGcID4gc2hpZGFyZXpha3VyYVwgOwor5Y+k5Luj57SrID4ga29kYWltdXJhc2FraVwgOwor5p6d5Z6C5p+zID4gc2hpZGFyZXlhbmFnaVwgOwor5rex57eR6ImyID4gZnVrYW1pZG9yaWlyb1wgOwor56mN6Zuq6YePID4gc2VraXNldHN1cnlvdVwgOwor56CU56m25a6kID4ga2Vua3l1dXNoaXRzdVwgOwor5bel5L2c5a6kID4ga291c2FrdXNoaXRzdVwgOwor5L2c5YqH6KGTID4gc2FrdWdla2lqdXRzdVwgOwor55+t5pel5pyIID4gdGFuaml0c3VnZXRzdVwgOwor6LuK5o6M5a6kID4gc2hhc2hvdXNoaXRzdVwgOwor6Ki65a+f5paZID4gc2hpbnNhdHN1cnlvdVwgOwor5L+457Wm6KKLID4gaG91a3l1dWJ1a3Vyb1wgOwor5raI5aSx54K5ID4gc2hvdXNoaXRzdXRlblwgOwor6Kqt5pu45a6kID4gZG9rdXNob3NoaXRzdVwgOwor5a6/5rOK5YWIID4gc2h1a3VoYWt1c2FraVwgOwor6K2Y5Yil5a2QID4gc2hpa2liZXRzdXNoaVwgOwor5Y2X5Y2K55CDID4gbWluYW1paGFua3l1dVwgOwor6IG35ZOh5a6kID4gc2hva3VpbnNoaXRzdVwgOwor5L+h546E6KKLID4gc2hpbmdlbmJ1a3Vyb1wgOwor5oGL54mp6KqeID4ga29pbW9ub2dhdGFyaVwgOwor5LiA57KS56iuID4gaGl0b3RzdWJ1ZGFuZVwgOwor57eR5p+x55+zID4gcnlva3VjaHV1c2VraVwgOwor5piU5rCX6LOqID4gbXVrYXNoaWthdGFnaVwgOwor5L+E5YuJ5by3ID4gbml3YWthYmVua3lvdVwgOwor6YCy5a2m546HID4gc2hpbmdha3VyaXRzdVwgOwor5q6/5qeY6JuZID4gdG9ub3NhbWFnYWVydVwgOwor6Z2Z6ISI6KGAID4gam91bXlha3VrZXRzdVwgOwor5LiA562L6YGTID4gaGl0b3N1amltaWNoaVwgOwor5bCx5qWt546HID4gc2h1dWd5b3VyaXRzdVwgOwor5YaF57eS6KmxID4gbmFpc2hvYmFuYXNoaVwgOwor6LqB6ayx6LOqID4gc291dXRzdXNoaXRzdVwgOwor54ax5Yq5546HID4gbmV0c3Vrb3VyaXRzdVwgOwor55uu55qE54mpID4gbW9rdXRla2lidXRzdVwgOwor5Y+N55m65YqbID4gaGFucGF0c3VyeW9rdVwgOwor5qSN54mp6KqMID4gc2hva3VidXRzdXNoaVwgOwor6K2m5a+f5YqbID4ga2Vpc2F0c3VyeW9rdVwgOwor6LKo54mp5a6kID4ga2Ftb3RzdXNoaXRzdVwgOwor5oeQ5Lit6Y+hID4ga2FpY2h1dWthZ2FtaVwgOwor5reh57eR6ImyID4gdGFucnlva3VzaG9rdVwgOwor5aSp56u66bygID4gdGVuamlrdW5lenVtaVwgOwor57Wx546H5YqbID4gdG91cml0c3VyeW9rdVwgOwor5a6f6Yyy54mpID4gaml0c3Vyb2t1bW9ub1wgOwor5a+G5YWl5Zu9ID4gbWl0c3VueXV1Z29rdVwgOwor55u06Ly45Ye6ID4gY2hva3V5dXNodXRzdVwgOwor5oOa5rCX6KmxID4gbm9yb2tlYmFuYXNoaVwgOwor5LyR6aSK5a6kID4ga3l1dXlvdXNoaXRzdVwgOwor6Zmz5YiX56qTID4gY2hpbnJldHN1bWFkb1wgOwor55m+5YiG546HID4gaHlha3VidW5yaXRzdVwgOwor5Ye66KGA55eHID4gc2h1a2tldHN1c2hvdVwgOwor5a+G6Ly45Ye6ID4gbWl0c3V5dXNodXRzdVwgOwor5Yik5Yil5byPID4gaGFuYmV0c3VzaGlraVwgOwor5qSN54mp55WMID4gc2hva3VidXRzdWthaVwgOwor54ax5Yqb5a2mID4gbmV0c3VyaWtpZ2FrdVwgOwor5paw5q2j5pyIID4gc2hpbnNob3VnYXRzdVwgOwor5Li76aOf54mpID4gc2h1c2hva3VidXRzdVwgOwor6Zmz5YiX5qOaID4gY2hpbnJldHN1ZGFuYVwgOwor6ZuR5Y+O5YWlID4gemF0c3VzaHV1bnl1dVwgOwor57+M57+M5pelID4geW9rdXlva3VqaXRzdVwgOwor6Kmx5Y2K5YiGID4gaGFuYXNoaWhhbmJ1blwgOwor5Yqb5LiN6LazID4gY2hpa2FyYWJ1c29rdVwgOwor5bCx5a2m546HID4gc2h1dWdha3VyaXRzdVwgOwor5rC05LiK55S6ID4gbWluYWthbWltYWNoaVwgOwor6Kaq5YiH5b+DID4gc2hpbnNldHN1c2hpblwgOwor5Yi25L2c5a6kID4gc2Vpc2FrdXNoaXRzdVwgOwor5Y2z54mp55qEID4gc29rdWJ1dHN1dGVraVwgOwor5rGy5Y+W5Y+jID4ga3VtaXRvcmlndWNoaVwgOwor5bu/5pel6bygID4gaGF0c3VrYW5lenVtaVwgOwor57eP6aCY5aiYID4gc291cnlvdW11c3VtZVwgOwor5LiD56aP56WeID4gc2hpY2hpZnVrdWppblwgOwor54m55Yil5bitID4gdG9rdWJldHN1c2VraVwgOwor5aSa6KGA6LOqID4gdGFrZXRzdXNoaXRzdVwgOwor5qC454iG55m6ID4ga2FrdWJha3VoYXRzdVwgOwor5b6X56Wo546HID4gdG9rdWh5b3VyaXRzdVwgOwor6KGo5b2w5byPID4gaHlvdXNob3VzaGlraVwgOwor5YWl5a2m5byPID4gbnl1dWdha3VzaGlraVwgOwor54Gw55m96LOqID4ga2FpaGFrdXNoaXRzdVwgOwor6aOf55So5rK5ID4gc2hva3V5b3VhYnVyYVwgOwor6IG35qWt55qEID4gc2hva3VneW91dGVraVwgOwor6aOf55Sf5rS7ID4gc2hva3VzZWlrYXRzdVwgOwor5Li45LiA5pyIID4gbWFydWhpdG90c3VraVwgOwor6IG35qWt55eFID4gc2hva3VneW91YnlvdVwgOwor5Li45LiA5pelID4gbWFydWljaGluaWNoaVwgOwor5q+S54mp5a2mID4gZG9rdWJ1dHN1Z2FrdVwgOwor5bCx6IG35YWIID4gc2h1dXNob2t1c2FraVwgOwor5Y+j57SE5p2fID4ga3VjaGl5YWt1c29rdVwgOwor5a6f5Yqb6ICFID4gaml0c3VyeW9rdXNoYVwgOwor5rmn5Ye66YePID4geXV1c2h1dHN1cnlvdVwgOwor562S5LqV562SID4gdHN1dHN1aWR6dXRzdVwgOwor5Lya5aCC5Y+4ID4ga2FpZG91ZHp1a2FzYVwgOwor6ZaT5q2H54axID4ga2Fua2V0c3VuZXRzdVwgOwor5ZOy5a2m55qEID4gdGV0c3VnYWt1dGVraVwgOwor6Kqt5ZSH6KGTID4gZG9rdXNoaW5qdXRzdVwgOwor6ZaT5qyg54axID4ga2Fua2V0c3VuZXRzdVwgOwor6KO46Zu755CDID4gaGFkYWthZGVua3l1dVwgOwor6JuL55m96LOqID4gdGFucGFrdXNoaXRzdVwgOwor5o6S5rOE54mpID4gaGFpc2V0c3VidXRzdVwgOwor6aOf6IKJ55uuID4gc2hva3VuaWt1bW9rdVwgOwor5rS75YuV5YqbID4ga2F0c3Vkb3VyeW9rdVwgOwor5L6155Wl55qEID4gc2hpbnJ5YWt1dGVraVwgOwor5Yed6ZuG5YqbID4gZ3lvdXNodXVyeW9rdVwgOwor5L+E54uC6KiAID4gbml3YWtha3lvdWdlblwgOwor542F5a2Q6aCtID4gc2hpc2hpZ2FzaGlyYVwgOwor6Kaz5a+f5YqbID4ga2Fuc2F0c3VyeW9rdVwgOwor6ISx5Yqb5oSfID4gZGF0c3VyeW9rdWthblwgOwor5pSv5Ye66aGNID4gc2hpc2h1dHN1Z2FrdVwgOwor5aSn6JmQ5q66ID4gZGFpZ3lha3VzYXRzdVwgOwor5YmN5rih6YeRID4gbWFld2F0YXNoaWtpblwgOwor5Lmz55m96ImyID4gbnl1dWhha3VzaG9rdVwgOwor57WC5qWt5byPID4gc2h1dWd5b3VzaGlraVwgOwor54iG55m655qEID4gYmFrdWhhdHN1dGVraVwgOwor5riF5YWD56+AID4ga2l5b21vdG9idXNoaVwgOwor6Zu36Kaq54i2ID4ga2FtaW5hcmlveWFqaVwgOwor56We57WM6LOqID4gc2hpbmtlaXNoaXRzdVwgOwor5o6l552A5YqbID4gc2V0Y2hha3VyeW9rdVwgOwor5LqU5pyI5bmfID4gc2F0c3VraW5vYm9yaVwgOwor6YCG6Ly45Ye6ID4gZ3lha3V5dXNodXRzdVwgOwor55qE5Lit546HID4gdGVraWNodXVyaXRzdVwgOwor5bu66Kit6LK7ID4ga2Vuc2V0c3VoaXlvdVwgOwor5bGI5oqY546HID4ga3Vzc2V0c3VyaXRzdVwgOwor6Ii56ZW35a6kID4gc2VuY2hvdXNoaXRzdVwgOwor5Li75pWZ5a6kID4gc2h1a3lvdXNoaXRzdVwgOwor5a6k5YaF5qW9ID4gc2hpdHN1bmFpZ2FrdVwgOwor5Lq65oOF6KmxID4gbmluam91YmFuYXNoaVwgOwor5r+D57eR6ImyID4gbm91cnlva3VzaG9rdVwgOwor5b+c5o6l5a6kID4gb3VzZXRzdXNoaXRzdVwgOwor5L6155Wl5Zu9ID4gc2hpbnJ5YWt1a29rdVwgOwor5L6N5rCX6LOqID4gc2FtdXJhaWthdGFnaVwgOwor55Sz6L685pu4ID4gbW91c2hpa29taXNob1wgOwor55u06Kqs5rOVID4gY2hva3VzZXRzdWhvdVwgOwor5LiL55S66aKoID4gc2hpdGFtYWNoaWZ1dVwgOwor6aOf5Lit5q+SID4gc2hva3VjaHV1ZG9rdVwgOwor55Sj5Ye66auYID4gc2Fuc2h1dHN1ZGFrYVwgOwor5L6b5Ye657GzID4ga3lvdXNodXRzdW1haVwgOwor5aKX6Kit546HID4gem91c2V0c3VyaXRzdVwgOwor5Zyn5Yqb6Y2LID4gYXRzdXJ5b2t1bmFiZVwgOwor5Zuj5qCX55y8ID4gZG9uZ3VyaW1hbmFrb1wgOwor5Zyn5Yqb6YecID4gYXRzdXJ5b2t1Z2FtYVwgOwor5rCX5a+G5a6kID4ga2ltaXRzdXNoaXRzdVwgOwor5b+c5o6l5L+CID4gb3VzZXRzdWdha2FyaVwgOwor5aWz5oi/6KmeID4gbnlvdWJvdWtvdG9iYVwgOwor5YiG5YiX5byPID4gYnVucmV0c3VzaGlraVwgOwor6Kaq5Lu75byPID4gc2hpbicnbmluc2hpa2lcIDsKK+eUn+a0u+WKmyA+IHNlaWthdHN1cnlva3VcIDsKK+iqreW/g+ihkyA+IGRva3VzaGluanV0c3VcIDsKK+mnhemVt+WupCA+IGVraWNob3VzaGl0c3VcIDsKK+WutuS7mOWomCA+IGlldHN1a2ltdXN1bWVcIDsKK+eZvuaXpeiNiSA+IGh5YWt1bmljaGlzb3VcIDsKK+S4oeS4ieaXpSA+IHJ5b3VzYW4nJ25pY2hpXCA7Civml5fooYzliJcgPiBoYXRhZ3lvdXJldHN1XCA7CivnnInllL7niakgPiBtYXl1dHN1YmFtb25vXCA7CivpgLLooYzkv4IgPiBzaGlua291Z2FrYXJpXCA7Civli5XmpI3niakgPiBkb3VzaG9rdWJ1dHN1XCA7Civlv4XopoHniakgPiBoaXRzdXlvdWJ1dHN1XCA7CivkuInou7jlrqQgPiBzYW5qaWt1c2hpdHN1XCA7CivlvoXlkIjlrqQgPiBtYWNoaWFpc2hpdHN1XCA7CivljZrnianlraYgPiBoYWt1YnV0c3VnYWt1XCA7CivntZDntK7ooZMgPiBrZXNzYXRzdWp1dHN1XCA7Civmt7flhaXniakgPiBrb24nJ255dXVidXRzdVwgOwor5Lq65oOF5Zm6ID4gbmluam91YmFuYXNoaVwgOwor5Ye65bit546HID4gc2h1c3Nla2lyaXRzdVwgOwor55u05o6l56iOID4gY2hva3VzZXRzdXplaVwgOwor5aSx5qWt6ICFID4gc2hpdHN1Z3lvdXNoYVwgOwor54mn55Wc5qWtID4gYm9rdWNoaWt1Z3lvdVwgOwor5qeL56+J54mpID4ga291Y2hpa3VidXRzdVwgOwor6Kit56uL6ICFID4gc2V0c3VyaXRzdXNoYVwgOwor6Laz6ZW36JyCID4gYXNoaW5hZ2FiYWNoaVwgOwor57KY5ray6LOqID4gbmVuJydla2lzaGl0c3VcIDsKK+ebtOaOpeazlSA+IGNob2t1c2V0c3Vob3VcIDsKK+W5vemciuipsSA+IHl1dXJlaWJhbmFzaGlcIDsKK+WQjOizqueahCA+IGRvdXNoaXRzdXRla2lcIDsKK+Wft+edgOW/gyA+IHNodXVjaGFrdXNoaW5cIDsKK+WKm+mWouS/giA+IGNoaWthcmFrYW5rZWlcIDsKK+eJqeizqueahCA+IGJ1c3NoaXRzdXRla2lcIDsKK+iSuOeZuueGsSA+IGpvdWhhdHN1bmV0c3VcIDsKK+iWqeaRqemWpSA+IHNhdHN1bWFiYXRzdVwgOwor6KaW6IG0546HID4gc2hpY2hvdXJpdHN1XCA7CivnlbPmsLTnt7QgPiB0YXRhbWlzdWlyZW5cIDsKK+W5leWDmumVtyA+IGJha3VyeW91Y2hvdVwgOwor54++5a6f55qEID4gZ2Vuaml0c3V0ZWtpXCA7CivnlLvkuIDnmoQgPiBrYWt1aXRzdXRla2lcIDsKK+WNuOmFkuiyqSA+IG9yb3NoaXNodWhhblwgOwor6Kaq5pel5a62ID4gc2hpbicnbmljaGlrYVwgOwor5YaF5Ye66KGAID4gbmFpc2h1a2tldHN1XCA7CivmvaTnrYbmlpkgPiBqdW5waXRzdXJ5b3VcIDsKK+eUsOiIjuS+jSA+IGluYWthemFtdXJhaVwgOwor6YeR6YeY5rWBID4ga2FuYWt1Z2lyeXV1XCA7CivlibXkvZzlipsgPiBzb3VzYWt1cnlva3VcIDsKK+WNs+aIpuWKmyA+IHNva3VzZW5yeW9rdVwgOwor5ous57SE562LID4ga2F0c3V5YWt1a2luXCA7CivoqqzlvpflipsgPiBzZXR0b2t1cnlva3VcIDsKK+mQmOaSnuWggiA+IGthbmV0c3VraWRvdVwgOwor5pen5b2i5byPID4ga3l1dWtlaXNoaWtpXCA7Civpu4Tnjonnn7MgPiBrb3VneW9rdXNla2lcIDsKK+Wun+mok+WupCA+IGppa2tlbnNoaXRzdVwgOwor5a+G5ryB6ICFID4gbWl0c3VyeW91c2hhXCA7Civmva7msZDooaggPiBjaG91c2VraWh5b3VcIDsKK+eZveeGseaIpiA+IGhha3VuZXRzdXNlblwgOwor5b6T5bGe56+AID4ganV1em9rdXNldHN1XCA7CivmirzliIfluLMgPiBvc2hpa2lyaWNob3VcIDsKK+mJseeJqeWtpiA+IGtvdWJ1dHN1Z2FrdVwgOwor5bem5b+D5a6kID4gc2FzaGluc2hpdHN1XCA7CivmpbXlvanoibIgPiBnb2t1c2Fpc2hpa2lcIDsKK+iCneW/g+imgSA+IGthbmppbmthbmFtZVwgOwor5bu656+J5qWtID4ga2VuY2hpa3VneW91XCA7Civmi5Lpo5/nl4cgPiBreW9zaG9rdXNob3VcIDsKK+eGsembu+WvviA+IG5ldHN1ZGVudHN1aVwgOwor6Y6W5Lyd5YuVID4ga3VzYXJpZGVuZG91XCA7Civmi6HlpKfnjocgPiBrYWt1ZGFpcml0c3VcIDsKK+eLguS/oeeahCA+IGt5b3VzaGludGVraVwgOwor6KGo54++5YqbID4gaHlvdWdlbnJ5b2t1XCA7CivkuK3nq4vpnaIgPiBjaHV1cml0c3VtZW5cIDsKK+iyneauu+iZqyA+IGthaWdhcmFtdXNoaVwgOwor5LiA55Wq5pifID4gaWNoaWJhbmJvc2hpXCA7Civos4PlgJ/kurogPiBjaGluc2hha3VuaW5cIDsKK+ijhemjvueahCA+IHNvdXNob2t1dGVraVwgOwor5r6x57KJ6LOqID4gZGVucHVuc2hpdHN1XCA7CivljYPml6XojYkgPiBzZW4nJ25pY2hpc291XCA7CivkuIPkupToqr8gPiBzaGljaGlnb2Nob3VcIDsKK+S4reWbveacjSA+IGNodXVnb2t1ZnVrdVwgOwor6auY5aSp5Y6fID4gdGFrYW1hZ2FoYXJhXCA7Civli5jlrprkv4IgPiBrYW5qb3VnYWthcmlcIDsKK+aLmOadn+WKmyA+IGtvdXNva3VyeW9rdVwgOwor5rKI5r6x54mpID4gY2hpbmRlbmJ1dHN1XCA7Civlmajos6rnmoQgPiBraXNoaXRzdXRla2lcIDsKK+WNg+aXpee0hSA+IHNlbicnbmljaGlrb3VcIDsKK+W7uuevieWtpiA+IGtlbmNoaWt1Z2FrdVwgOwor5pWX6KGA55eHID4gaGFpa2V0c3VzaG91XCA7CivljYHkuIDmnIggPiBqdXVpY2hpZ2F0c3VcIDsKK+iii+aIuOajmiA+IGZ1a3Vyb3RvZGFuYVwgOwor5oud54mp5pWZID4gaGFpYnV0c3VreW91XCA7CivlvqnorpDlv4MgPiBmdWt1c2h1dXNoaW5cIDsKK+aXp+W5tOacqyA+IGt5dXVuZW5tYXRzdVwgOwor5aSx6IG36ICFID4gc2hpc3Nob2t1c2hhXCA7CivlhoXlibLlvJUgPiB1Y2hpd2FyaWJpa2lcIDsKK+WHuueUo+eOhyA+IHNodXNzYW5yaXRzdVwgOwor5YaZ5a6f55qEID4gc2hhaml0c3V0ZWtpXCA7CivmjqXntprpp4UgPiBzZXRzdXpva3Vla2lcIDsKK+ijvemJhOalrSA+IHNlaXRldHN1Z3lvdVwgOwor5Ye655Sf546HID4gc2h1c3NlaXJpdHN1XCA7CivnnYDnianlp78gPiBraW1vbm9zdWdhdGFcIDsKK+epjealteetliA+IHNla2t5b2t1c2FrdVwgOwor5bCP5paH56+AID4gc2hvdWJ1bnNldHN1XCA7CivntYTnuZTlipsgPiBzb3NoaWtpcnlva3VcIDsKK+aWreeGseadkCA+IGRhbicnbmV0c3V6YWlcIDsKK+iRl+S9nOeJqSA+IGNob3Nha3VidXRzdVwgOwor55uy5ruF5rOVID4gbWVrdXJhbWVwcG91XCA7CivpmYTnnYDlipsgPiBmdWNoYWt1cnlva3VcIDsKK+a8gua1geacqCA+IGh5b3VyeXV1Ym9rdVwgOwor57Sz5aOr6Z20ID4gc2hpbnNoaWd1dHN1XCA7CivmtZrmuKvoiLkgPiBzaHVuc2V0c3VzZW5cIDsKK+a3seWxseeDjyA+IG1peWFtYWdhcmFzdVwgOwor55Sf6Iet54mpID4gbmFtYWd1c2Ftb25vXCA7Civlr6nliKTlvbkgPiBzaGlucGFuJyd5YWt1XCA7CivnqY3mpbXnmoQgPiBzZWtreW9rdXRla2lcIDsKK+eZuuWjsuWFgyA+IGhhdHN1YmFpbW90b1wgOwor5LuP6aCC6Z2iID4gYnV0Y2hvdWR6dXJhXCA7Civlj5blvJXpq5ggPiB0b3JpaGlraWRha2FcIDsKK+mXluWFpeiAhSA+IGNoaW4nJ255dXVzaGFcIDsKK+avrOagl+mgrSA+IGlnYWd1cmlhdGFtYVwgOwor5bu656+J5LitID4ga2VuY2hpa3VjaHV1XCA7CivlvLHlsI/lm70gPiBqYWt1c2hvdWtva3VcIDsKK+eZuuWjsuS4rSA+IGhhdHN1YmFpY2h1dVwgOwor5b6p6K6Q5YqHID4gZnVrdXNodXVnZWtpXCA7CivkuIvku5XkuosgPiBzaGl0YXNoaWdvdG9cIDsKK+a2iOalteaApyA+IHNob3VreW9rdXNlaVwgOwor6YeR5qyg55eFID4ga2lua2V0c3VieW91XCA7CivogbToppbnjocgPiBjaG91c2hpcml0c3VcIDsKK+a3seWxseahnCA+IG1peWFtYXpha3VyYVwgOwor6LOq5ZWP6ICFID4gc2hpdHN1bW9uc2hhXCA7CivnqbrntITmnZ8gPiBrYXJheWFrdXNva3VcIDsKK+aOpee2muipniA+IHNldHN1em9rdXNoaVwgOwor5oq56aaZ6a+oID4gbWFra291a3VqaXJhXCA7CivoirHnm5fkurogPiBoYW5hbnVzdWJpdG9cIDsKK+S5vueHpeWupCA+IGthbnNvdXNoaXRzdVwgOwor5bC/5q+S55eHID4gbnlvdWRva3VzaG91XCA7CivnmYfnmarnjokgPiBrYW5zaGFrdWRhbWFcIDsKK+S4gOS6uueJqSA+IGljaGlqaW5idXRzdVwgOwor5Y2U57SE5Zu9ID4ga3lvdXlha3Vrb2t1XCA7CivmnKvku6PniakgPiBtYXRzdWRhaW1vbm9cIDsKK+WJg+WIgOiyoCA+IGthbWlzb3JpbWFrZVwgOwor5LiA6Laz5YWIID4gaGl0b2FzaGlzYWtpXCA7CivmnpzniannsaAgPiBrdWRhbW9ub2thZ29cIDsKK+S4lumWk+ipsSA+IHNla2VuYmFuYXNoaVwgOwor6KGM5qW95a6iID4ga291cmFrdWt5YWt1XCA7CivntIvnmb3onbYgPiBtb25zaGlyb2Nob3VcIDsKK+WFpea5r+WuoiA+IG55dXV0b3VreWFrdVwgOwor6ZeH5Y+W5byVID4geWFtaXRvcmloaWtpXCA7CivpgLLmsLTlvI8gPiBzaGluc3Vpc2hpa2lcIDsKK+S7ruaJlemHkSA+IGthcmliYXJhaWtpblwgOwor57SZ5bGR57GgID4ga2FtaWt1enVrYWdvXCA7Civkub7nh6XljbUgPiBrYW5zb3V0YW1hZ29cIDsKK+e3keWGhemanCA+IHJ5b2t1bmFpc2hvdVwgOwor5qW15qW96bOlID4gZ29rdXJha3VjaG91XCA7Civos4PosrjlgJ8gPiBjaGludGFpc2hha3VcIDsKK+WRiueZuuiAhSA+IGtva3VoYXRzdXNoYVwgOwor55m96KGA55eFID4gaGFra2V0c3VieW91XCA7CivnnJ/nj6Dos6ogPiBzaGluanVzaGl0c3VcIDsKK+eJh+WxsemHjCA+IGthdGF5YW1hemF0b1wgOwor54us56uL56WtID4gZG9rdXJpdHN1c2FpXCA7CivkuojntITkv4IgPiB5b3lha3VnYWthcmlcIDsKK+m7hOe3keiJsiA+IG91cnlva3VzaG9rdVwgOwor5YmN6YCy5YqbID4gemVuc2hpbnJ5b2t1XCA7Civnorrnjofoq5YgPiBrYWt1cml0c3Vyb25cIDsKK+eLrOeri+ePrSA+IGRva3VyaXRzdWhhblwgOwor562J5Zyn5byPID4gdG91YXRzdXNoaWtpXCA7CivntKDkurrnrYsgPiBzaGlyb3V0b3N1amlcIDsKK+e+juS6uuWxgCA+IHRzdXRzdW1vdGFzZVwgOwor5YCf5Zyw5paZID4gc2hha3VjaGlyeW91XCA7Civpu4TnhrHnl4UgPiBrb3VuZXRzdWJ5b3VcIDsKK+aKleelqOeOhyA+IHRvdWh5b3VyaXRzdVwgOwor6ISF6L+r55qEID4ga3lvdWhha3V0ZWtpXCA7Civlm6PntZDlv4MgPiBkYW5rZXRzdXNoaW5cIDsKK+izquWVj+abuCA+IHNoaXRzdW1vbnNob1wgOwor5Lit56uL5oCnID4gY2h1dXJpdHN1c2VpXCA7CivlkYrnmbrnirYgPiBrb2t1aGF0c3Vqb3VcIDsKK+WPjeW+qeiqrCA+IGhhbnB1a3VzZXRzdVwgOwor5Y2w5Yi36KGTID4gaW5zYXRzdWp1dHN1XCA7Civog73lipvntaYgPiBub3VyeW9rdWt5dXVcIDsKK+e3tOe/kuabsiA+IHJlbnNodXVreW9rdVwgOwor6LaF6IO95YqbID4gY2hvdW5vdXJ5b2t1XCA7CivmoLjliIboo4IgPiBrYWt1YnVucmV0c3VcIDsKK+eLrOeri+aoqSA+IGRva3VyaXRzdWtlblwgOwor5b6F5a616I2JID4gbWF0c3V5b2lndXNhXCA7CivkuIDkurrlqJggPiBoaXRvcmltdXN1bWVcIDsKK+WbveeojuWxgCA+IGtva3V6ZWlreW9rdVwgOwor5LiA6Z2i6K2YID4gaWNoaW1lbnNoaWtpXCA7Civlh7rpoZjogIUgPiBzaHV0c3VnYW5zaGFcIDsKK+WLv+W/mOiNiSA+IHdhc3VyZW5hZ3VzYVwgOwor5by357a/6JasID4ga3lvdW1lbicneWFrdVwgOwor5qK25pyo6a6qID4ga2FqaWtpbWFndXJvXCA7CivlpLHmmI7ogIUgPiBzaGl0c3VtZWlzaGFcIDsKK+Wls+mBk+alvSA+IG9uJyduYWRvdXJha3VcIDsKK+aIkOmVt+eOhyA+IHNlaWNob3VyaXRzdVwgOwor56K65a6f5oCnID4ga2FrdWppdHN1c2VpXCA7Civpu5Loo4XmnZ8gPiBrdXJvc2hvdXpva3VcIDsKK+eGseaLoeaVoyA+IG5ldHN1a2FrdXNhblwgOwor5b+g6Iej6JS1ID4gY2h1dXNoaW5ndXJhXCA7Civli5XnianlraYgPiBkb3VidXRzdWdha3VcIDsKK+S4gOaemuS4iyA+IGljaGltYWlzaGl0YVwgOwor6Iez5p2x5LqsID4gaXRhcnV0b3VreW91XCA7Civni6znq4vmgKcgPiBkb2t1cml0c3VzZWlcIDsKK+mbqOW+jOmbqiA+IGFtZW5vY2hpeXVraVwgOwor5YWr55uu6bC7ID4geWF0c3VtZXVuYWdpXCA7CivlpKnni5foqbEgPiB0ZW5ndWJhbmFzaGlcIDsKK+ahiOWGheS/giA+IGFuJyduYWlnYWthcmlcIDsKK+a1geihjOiJsiA+IHJ5dXVrb3VzaG9rdVwgOwor6Y2+5Lmz55+zID4gc2hvdW55dXVzZWtpXCA7CivmjqXntprmgKcgPiBzZXRzdXpva3VzZWlcIDsKK+ecn+Wun+aApyA+IHNoaW5qaXRzdXNlaVwgOwor6aqo6IKJ6IWrID4ga290c3VuaWt1c2h1XCA7CivniqznlZznlJ8gPiBpbnVjaGlrdXNob3VcIDsKK+mgmOWPjuiovCA+IHJ5b3VzaHV1c2hvdVwgOwor5pi85YWJ6ImyID4gY2h1dWtvdXNob2t1XCA7CivljJfmpbXnhoogPiBob2treW9rdWd1bWFcIDsKK+WPuOS7pOWupCA+IHNoaXJlaXNoaXRzdVwgOwor5Y2w5Yi354mpID4gaW5zYXRzdWJ1dHN1XCA7Civmir3osaHnmoQgPiBjaHV1c2hvdXRla2lcIDsKK+eZveaLjeWtkCA+IHNoaXJhYnlvdXNoaVwgOwor5o+Q5Ye66ICFID4gdGVpc2h1dHN1c2hhXCA7CivogJDlnKflipsgPiB0YWlhdHN1cnlva3VcIDsKK+WHuOmdoumPoSA+IHRvdHN1bWVua3lvdVwgOwor6auY6KGA5ZynID4ga291a2V0c3VhdHN1XCA7Civmn7HmmYLoqIggPiBoYXNoaXJhZG9rZWlcIDsKK+WCmOatr+i7iiA+IGthc2FoYWd1cnVtYVwgOwor6LuN5Zu96ImyID4gZ3Vua29rdXNob2t1XCA7Civlhavpg47mvZ8gPiBoYWNoaXJvdWdhdGFcIDsKK+Wuv+WRveeahCA+IHNodWt1bWVpdGVraVwgOwor5Lit5b+D6KeSID4gY2h1dXNoaW5rYWt1XCA7CivplbfpoIjpr6ggPiBuYWdhc3VrdWppcmFcIDsKK+S/ruS6huiovCA+IHNodXVyeW91c2hvdVwgOwor5q6144CF55WgID4gZGFuZGFuYmF0YWtlXCA7CivmrrXjgIXnlZEgPiBkYW5kYW5iYXRha2VcIDsKK+WkmuiCieizqiA+IHRhbmlrdXNoaXRzdVwgOwor6YCy5YWl54GvID4gc2hpbicnbnl1dXRvdVwgOwor6ZuG57SE55qEID4gc2h1dXlha3V0ZWtpXCA7CivlhbXlha3njokgPiBoeW91cm9rdWRhbWFcIDsKK+aRqeaTpueGsSA+IG1hc2F0c3VuZXRzdVwgOwor5oqA6KGT5YqbID4gZ2lqdXRzdXJ5b2t1XCA7Civku67murbmjqUgPiBrYXJpeW91c2V0c3VcIDsKK+mrmOWTgeizqiA+IGtvdWhpbnNoaXRzdVwgOwor5pmS5pyo57a/ID4gc2FyYXNoaW1vbWVuXCA7CivkvLjnuK7ms5UgPiBzaGluc2h1a3Vob3VcIDsKK+WFremAo+eZuiA+IHJva3VyZW5wYXRzdVwgOwor5L2155m655eHID4gaGVpaGF0c3VzaG91XCA7CivmrKDkuY/nl4cgPiBrZXRzdWJvdXNob3VcIDsKK+mWouevgOaKgCA+IGthbnNldHN1d2F6YVwgOwor5rKI5rKh6Ii5ID4gY2hpbmJvdHN1c2VuXCA7CivlrrnnqY3njocgPiB5b3VzZWtpcml0c3VcIDsKK+S4u+WKm+agqiA+IHNodXJ5b2t1a2FidVwgOwor5Lm+5rm/6KiIID4ga2Fuc2hpdHN1a2VpXCA7CivkuZ3mmJ/ooZMgPiBreXV1c2VpanV0c3VcIDsKK+WPo+WFq+S4gSA+IGt1Y2hpaGF0Y2hvdVwgOwor5qSc5a+f5bqBID4ga2Vuc2F0c3VjaG91XCA7CivooajooajntJkgPiBvbW90ZWJ5b3VzaGlcIDsKK+ebtOWPluW8lSA+IGppa2l0b3JpaGlraVwgOwor5aSn5a2m5Y2SID4gZGFpZ2FrdXNvdHN1XCA7CivlpLHoqp7nl4cgPiBzaGl0c3Vnb3Nob3VcIDsKK+mZjembqumHjyA+IGtvdXNldHN1cnlvdVwgOwor5ryB5bir55S6ID4gcnlvdXNoaW1hY2hpXCA7Civnianopovmq5MgPiBtb25vbWl5YWd1cmFcIDsKK+WPluasoeW6lyA+IHRvcml0c3VnaXRlblwgOwor5pyn5pyI5aScID4gb2Jvcm9kenVraXlvXCA7Civkuqvmpb3nmoQgPiBreW91cmFrdXRla2lcIDsKK+awtOWKm+WtpiA+IHN1aXJ5b2t1Z2FrdVwgOwor5Y+W5byV5YWIID4gdG9yaWhpa2lzYWtpXCA7CivlhaXlipvnt5ogPiBueXV1cnlva3VzZW5cIDsKK+S9juihgOWcpyA+IHRlaWtldHN1YXRzdVwgOwor5Ly457iu5oCnID4gc2hpbnNodWt1c2VpXCA7Civlvovku6TliLYgPiByaXRzdXJ5b3VzZWlcIDsKK+W9ouW8j+eahCA+IGtlaXNoaWtpdGVraVwgOwor5Luy56uL5Lq6ID4gbmFrYWRhY2hpbmluXCA7CivmmIfpmY3lj6MgPiBzaG91a291Z3VjaGlcIDsKK+iomOmMsuS/giA+IGtpcm9rdWdha2FyaVwgOwor5bel5L2c54mpID4ga291c2FrdWJ1dHN1XCA7CivmraPnm7TogIUgPiBzaG91amlraW1vbm9cIDsKK+S4reW/g+eahCA+IGNodXVzaGludGVraVwgOwor6Ieq57+S5a6kID4gamlzaHV1c2hpdHN1XCA7Civku4rmmI7ml6UgPiBrb25teW91bmljaGlcIDsKK+mWk+aOpeeahCA+IGthbnNldHN1dGVraVwgOwor5Ye654mI54mpID4gc2h1cHBhbmJ1dHN1XCA7CivmoLjou43nuK4gPiBrYWt1Z3Vuc2h1a3VcIDsKK+S4gOimi+itmCA+IGljaGlrZW5zaGlraVwgOwor5pS75pKD5YqbID4ga291Z2VraXJ5b2t1XCA7CivmlbTpq6rmlpkgPiBzZWloYXRzdXJ5b3VcIDsKK+S4g+mdouWAkiA+IHNoaWNoaW1lbmRvdVwgOwor6ICQ5rm/5oCnID4gdGFpc2hpdHN1c2VpXCA7Civku4/mloflraYgPiBmdXRzdWJ1bmdha3VcIDsKK+eVkeawtOe3tCA+IGhhdGFrZXN1aXJlblwgOwor5YuF5pKw6ZuGID4gY2hva3VzZW5zaHV1XCA7CivkuIPpnaLkvZMgPiBzaGljaGltZW50YWlcIDsKK+WKueeOh+eahCA+IGtvdXJpdHN1dGVraVwgOwor54ax6YeP6KiIID4gbmV0c3VyeW91a2VpXCA7Civms6jph4jogIUgPiBjaHV1c2hha3VzaGFcIDsKK+eLreW/g+eXhyA+IGt5b3VzaGluc2hvdVwgOwor5byl54yb5b+DID4geWF0YWtlZ29rb3JvXCA7Civnt4/oirHlvI8gPiBzb3ViYW5hc2hpa2lcIDsKK+WNlOWVhuWbvSA+IGt5b3VzaG91a29rdVwgOwor5LiD57WD55C0ID4gc2hpY2hpZ2Vua2luXCA7CivniIboo4LlvL4gPiBiYWt1cmV0c3VkYW5cIDsKK+Wul+aVmeW/gyA+IHNodXVreW91c2hpblwgOwor5YWs5YWx54mpID4ga291a3lvdWJ1dHN1XCA7CivmlZHmgKXnrrEgPiBreXV1a3l1dWJha29cIDsKK+eLguipqeabsiA+IGt5b3VzaGlreW9rdVwgOwor5L+E5YiG6ZmQID4gbml3YWthYnVuZ2VuXCA7CivlrpfmlZnlraYgPiBzaHV1a3lvdWdha3VcIDsKK+S4gOaXpeS4rSA+IGljaGluaWNoaWp1dVwgOwor5rGC6IG36ICFID4ga3l1dXNob2t1c2hhXCA7CivnlZzmrrrloLQgPiBjaGlrdXNhdHN1YmFcIDsKK+WtpuW5tOacqyA+IGdha3VuZW5tYXRzdVwgOwor56mA6LGh6JmrID4ga29rdXpvdW11c2hpXCA7CivnhKHpn7/lrqQgPiBtdWt5b3VzaGl0c3VcIDsKK+etjeWMu+iAhSA+IHRha2Vub2tvaXNoYVwgOwor5r2b5b+D5YqbID4gc2Vuc2hpbnJ5b2t1XCA7CivoiIjooYzkuLsgPiBrb3VneW91bnVzaGlcIDsKK+S/rumjvuWtkCA+IHNodXVzaG9rdXNoaVwgOwor5Y+O55uK546HID4gc2h1dWVraXJpdHN1XCA7CivnpZ3lhIDooosgPiBzaHV1Z2lidWt1cm9cIDsKK+WpmuWnu+WxiiA+IGtvbicnaW50b2Rva2VcIDsKK+manOWus+eJqSA+IHNob3VnYWlidXRzdVwgOwor6buS6Yq555eFID4ga3Vyb3NhYmlieW91XCA7CivkurrnianoqZUgPiBqaW5idXRzdWh5b3VcIDsKK+mbkeaJgOW+lyA+IHphdHN1c2hvdG9rdVwgOwor5Yml6KO96KGTID4gaGFrdXNlaWp1dHN1XCA7Civni6zljaDmrLIgPiBkb2t1c2VuJyd5b2t1XCA7CivntbbmnJvnmoQgPiB6ZXRzdWJvdXRla2lcIDsKK+WkqeeEtuiJsiA+IHRlbicnbmVuc2hva3VcIDsKK+iEguiCquizqiA+IHNoaWJvdXNoaXRzdVwgOwor5a6X5pWZ5YqHID4gc2h1dWt5b3VnZWtpXCA7Civlh7rloLTogIUgPiBzaHV0c3Vqb3VzaGFcIDsKK+S5vua8huWDjyA+IGthbnNoaXRzdXpvdVwgOwor5YaF572w55qEID4gbmFpYmF0c3V0ZWtpXCA7CivkuIPop5LlvaIgPiBzaGljaGlrYWtrZWlcIDsKK+WNs+iIiOabsiA+IHNva2t5b3VreW9rdVwgOwor5pWj55m655qEID4gc2FucGF0c3V0ZWtpXCA7CivluoPlj6Pnk7YgPiBoaXJva3VjaGliaW5cIDsKK+Wcp+e4rueOhyA+IGFzc2h1a3VyaXRzdVwgOwor5a6/5rOK5Lq6ID4gc2h1a3VoYWt1bmluXCA7CivnjKnntIXnhrEgPiBzaG91a291bmV0c3VcIDsKK+WNlOWKm+mLvCA+IGt5b3VyeW9rdWtvdVwgOwor5omA55Wq5ZywID4gdG9rb3JvYmFuY2hpXCA7Civms6jph4jmm7ggPiBjaHV1c2hha3VzaG9cIDsKK+eJueW+tOmHjyA+IHRva3VjaG91cnlvdVwgOwor5oeQ5bel5ZCIID4gZnV0b2tvcm9ndWFpXCA7Civmj4/lhpnlipsgPiBieW91c2hhcnlva3VcIDsKK+eUn+eJqeWtpiA+IHNlaWJ1dHN1Z2FrdVwgOwor5oeQ5YW35ZCIID4gZnV0b2tvcm9ndWFpXCA7Civoqq3mm7jlipsgPiBkb2t1c2hvcnlva3VcIDsKK+efpeitmOassiA+IGNoaXNoaWtpeW9rdVwgOwor5YWo6YCf5YqbID4gemVuc29rdXJ5b2t1XCA7CivooajjgIXntJkgPiBvbW90ZWJ5b3VzaGlcIDsKK+a3see0heiJsiA+IHNoaW5rb3VzaG9rdVwgOwor6Luf552A6Zm4ID4gbmFuY2hha3VyaWt1XCA7CivoibLmg4Xni4IgPiBzaGlraWpvdWt5b3VcIDsKK+mDteS+v+iiiyA+IHl1dWJpbmJ1a3Vyb1wgOwor6Ki65a+f5Y+wID4gc2hpbnNhdHN1ZGFpXCA7Civms6HmsqvnmoQgPiBob3VtYXRzdXRla2lcIDsKK+S7rumHiOaUviA+IGthcmlzaGFrdWhvdVwgOwor5oCl6YCy55qEID4ga3l1dXNoaW50ZWtpXCA7CivoqLrlr5/liLggPiBzaGluc2F0c3VrZW5cIDsKK+alteWwj+WApCA+IGt5b2t1c2hvdWNoaVwgOwor5L6b6KGA6ICFID4ga3lvdWtldHN1c2hhXCA7Civlj47lhaXlvbkgPiBzaHV1bnl1dXlha3VcIDsKK+auteauteeVoCA+IGRhbmRhbmJhdGFrZVwgOwor5q615q6155WRID4gZGFuZGFuYmF0YWtlXCA7Civnr4DnlKjpm4YgPiBzZXRzdXlvdXNodXVcIDsKK+mFjemBlOaWmSA+IGhhaXRhdHN1cnlvdVwgOwor5paw5Y2S6ICFID4gc2hpbnNvdHN1c2hhXCA7Civlj47nm6PlipsgPiBzaHV1a2Fucnlva3VcIDsKK+eZvuiRieeusSA+IGh5YWt1eW91YmFrb1wgOwor5Y2U5Yqb6ICFID4ga3lvdXJ5b2t1c2hhXCA7CivpgJ/pgZTkvr8gPiBzb2t1dGF0c3ViaW5cIDsKK+mKgOeZveiJsiA+IGdpbmhha3VzaG9rdVwgOwor5aS+56u55qGDID4ga3lvdWNoaWt1dG91XCA7CivnlZznlJ/pgZMgPiBjaGlrdXNob3Vkb3VcIDsKK+mbqui+seaIpiA+IHNldHN1am9rdXNlblwgOwor5p2x5Lqs552AID4gdG91a3lvdWNoYWt1XCA7Civpm7vkv6HlsYAgPiBkZW5zaGlua3lva3VcIDsKK+mdkuiJsueXhyA+IHNlaXNob2t1c2hvdVwgOwor5bqD5ZGK5Li7ID4ga291a29rdW51c2hpXCA7CivmnbHkuqznmbogPiB0b3VreW91aGF0c3VcIDsKK+WFqOi6q+a1tCA+IHplbnNoaW4nJ3lva3VcIDsKK+WkieizquiAhSA+IGhlbnNoaXRzdXNoYVwgOwor5aSP5pyo56uLID4gbmF0c3Vrb2RhY2hpXCA7Civorablr5/luoEgPiBrZWlzYXRzdWNob3VcIDsKK+alreeVjOWInSA+IGd5b3VrYWloYXRzdVwgOwor5aSp6ZW356+AID4gdGVuY2hvdXNldHN1XCA7CivnlKPopKXnhrEgPiBzYW5qb2t1bmV0c3VcIDsKK+WNmOWLneW8jyA+IHRhbnNob3VzaGlraVwgOwor6aCt6aCC6aqoID4gdG91Y2hvdWtvdHN1XCA7Civlo4rooYDnl4UgPiBrYWlrZXRzdWJ5b3VcIDsKK+eci+adv+WomCA+IGthbmJhbm11c3VtZVwgOwor57eo6ZuG5bGAID4gaGVuc2h1dWt5b2t1XCA7CivmmbTlvozpm6ggPiBoYXJlbm9jaGlhbWVcIDsKK+a1geWLlemjnyA+IHJ5dXVkb3VzaG9rdVwgOwor6aOf6YGT5qW9ID4gc2hva3Vkb3VyYWt1XCA7Civmr5vnuZTpjKYgPiBrZW9yaW5pc2hpa2lcIDsKK+axguS6uuWPoyA+IGt5dXVqaW5ndWNoaVwgOwor57WC552A6aeFID4gc2h1dWNoYWt1ZWtpXCA7Civpu5LmsLTnhrEgPiBrb2t1c3VpbmV0c3VcIDsKK+S7rumAsue0miA+IGthcmlzaGlua3l1dVwgOwor6YWN6YGU5YWIID4gaGFpdGF0c3VzYWtpXCA7Civlr53nianoqp4gPiBuZW1vbm9nYXRhcmlcIDsKK+iLpeauv+WOnyA+IHdha2F0b25vYmFyYVwgOwor5Ya36JS15a6kID4gcmVpem91c2hpdHN1XCA7CivmsqHkuqTmuIkgPiBib3RzdWtvdXNob3VcIDsKK+mdmeiEiOeYpCA+IGpvdW15YWt1cnl1dVwgOwor6aqo57WE57mUID4ga290c3Vzb3NoaWtpXCA7CivljYPljZLplbcgPiBzZW5zb3RzdWNob3VcIDsKK+ebtOi9hOWcsCA+IGNob2trYXRzdWNoaVwgOwor5LiA562L57mpID4gaGl0b3N1amluYXdhXCA7CivkuIDnrYvnuIQgPiBoaXRvc3VqaW5hd2FcIDsKK+WwseiBt+mboyA+IHNodXVzaG9rdW5hblwgOwor6Kqs57WM56+AID4gc2Vra3lvdWJ1c2hpXCA7Civlv4Pouqvnl4cgPiBzaGluc2hpbnNob3VcIDsKK+mdouS8muWupCA+IG1lbmthaXNoaXRzdVwgOwor54us5Ym15YqbID4gZG9rdXNvdXJ5b2t1XCA7Civlp4vmpa3lvI8gPiBzaGlneW91c2hpa2lcIDsKK+adpeWuouetiyA+IHJhaWt5YWt1c3VqaVwgOwor6YCy5a2m5aG+ID4gc2hpbmdha3VqdWt1XCA7Civnm67nmoTmoLwgPiBtb2t1dGVraWtha3VcIDsKK+agoeato+S/giA+IGtvdXNlaWdha2FyaVwgOwor5Yqb6Ieq5oWiID4gY2hpa2FyYWppbWFuXCA7CivlsYvmlbfnlLogPiB5YXNoaWtpbWFjaGlcIDsKK+acjemjvuWTgSA+IGZ1a3VzaG9rdWhpblwgOwor6Iao5by1546HID4gYm91Y2hvdXJpdHN1XCA7Civoia/lv4PnmoQgPiByeW91c2hpbnRla2lcIDsKK+epuuW/teS7jyA+IHNvcmFuZW5idXRzdVwgOwor55qG55qG5qeYID4gbWluYW1pbmFzYW1hXCA7Civog73njofntaYgPiBub3VyaXRzdWt5dXVcIDsKK+WghuepjeeJqSA+IHRhaXNla2lidXRzdVwgOwor5Ye657SN5L+CID4gc3VpdG91Z2FrYXJpXCA7Civok4TnqY3nrqEgPiBjaGlrdXNla2lrYW5cIDsKK+eLrOi6q+iAhSA+IGRva3VzaGlubW9ub1wgOwor55+z56u56ImyID4gc2VraWNoaWt1aXJvXCA7Civnm7TohbjnmYwgPiBjaG9rdWNob3VnYW5cIDsKK+eqgeeZuueahCA+IHRvcHBhdHN1dGVraVwgOwor6Iq46KGT55qEID4gZ2VpanV0c3V0ZWtpXCA7CivpnZ7mmbbos6ogPiBoaXNob3VzaGl0c3VcIDsKK+eOieicgOm7jSA+IHRvdW1vcm9rb3NoaVwgOwor5bCP5b+D6ICFID4gc2hvdXNoaW5tb25vXCA7Civpu5LmsLTlvJUgPiBrdXJvbWl6dWhpa2lcIDsKK+aEn+eGseWJpCA+IGthbicnbmV0c3V6YWlcIDsKK+Wor+alveWupCA+IGdvcmFrdXNoaXRzdVwgOwor6Y6u55eb6JasID4gY2hpbnRzdXV5YWt1XCA7Civog73njofnmoQgPiBub3VyaXRzdXRla2lcIDsKK+WQiOWUseabsiA+IGdhc3Nob3VreW9rdVwgOwor5Li56aCC6ba0ID4gdGFuY2hvdWR6dXJ1XCA7CivpnanmlrDnmoQgPiBrYWt1c2hpbnRla2lcIDsKK+WuouWVhuWjsiA+IGt5YWt1c2hvdWJhaVwgOwor5LiA5ous5byPID4gaWtrYXRzdXNoaWtpXCA7CivnlZznlKPmpa0gPiBjaGlrdXNhbmd5b3VcIDsKK+WHuuihgOatuyA+IHNodWtrZXRzdXNoaVwgOwor55m96auq6aCtID4gc2hpcmFnYWF0YW1hXCA7CivmlrDlvaLlvI8gPiBzaGlua2Vpc2hpa2lcIDsKK+WFseacieeJqSA+IGt5b3V5dXVidXRzdVwgOwor55Sz5ZGK566xID4gc2hpbmtva3ViYWtvXCA7Civmm7jnlZnmlpkgPiBrYWtpdG9tZXJ5b3VcIDsKK+W4jOmHiOeGsSA+IGtpc2hha3VuZXRzdVwgOwor5bGx5Y+j55yMID4geWFtYWd1Y2hpa2VuXCA7Civln7fnrYbogIUgPiBzaGlwcGl0c3VzaGFcIDsKK+WVhuWPluW8lSA+IHNob3V0b3JpaGlraVwgOwor5qSN54mp5rK5ID4gc2hva3VidXRzdXl1XCA7Civlh7rooYDmlpEgPiBzaHVra2V0c3VoYW5cIDsKK+S8geeUu+WupCA+IGtpa2FrdXNoaXRzdVwgOwor5L615YWl6LuNID4gc2hpbicnbnl1dWd1blwgOwor5ryB542y54mpID4gZ3lva2FrdWJ1dHN1XCA7CivlipvlrabnmoQgPiByaWtpZ2FrdXRla2lcIDsKK+eWs+eZqueOiSA+IGthbnNoYWt1ZGFtYVwgOwor57SE5p2f5LqLID4geWFrdXNva3Vnb3RvXCA7CivntYzluLflrZAgPiBreW91a2F0YWJpcmFcIDsKK+eBq+a2iOWjtyA+IGhpa2VzaGl0c3Vib1wgOwor5Yip5LyR6bygID4gcmlreXV1bmV6dW1pXCA7CivpoIblv5zlipsgPiBqdW4nJ25vdXJ5b2t1XCA7CivkuIvljYrouqsgPiBzaGltb2hhbnNoaW5cIDsKK+ihqOaxuuaoqSA+IGh5b3VrZXRzdWtlblwgOwor5oqe5LiA55qEID4gdGFrdWl0c3V0ZWtpXCA7CivmtYHli5XniakgPiByeXV1ZG91YnV0c3VcIDsKK+mZs+i/sOabuCA+IGNoaW5qdXRzdXNob1wgOwor6L+95oK85byPID4gdHN1aXRvdXNoaWtpXCA7Civpo7Lpo5/niakgPiBpbnNob2t1YnV0c3VcIDsKK+aYvOmjn+S8miA+IGNodXVzaG9rdWthaVwgOwor55Wc55Sj5a2mID4gY2hpa3VzYW5nYWt1XCA7CivorZjlrZfnjocgPiBzaGlraWppcml0c3VcIDsKK+m8u+mrmOmrmCA+IGhhbmF0YWthZGFrYVwgOwor54m55Yil5rOVID4gdG9rdWJldHN1aG91XCA7Civlh7rmvIHmqKkgPiBzaHV0c3VneW9rZW5cIDsKK+mztuiBt+S6uiA+IHRvYmlzaG9rdW5pblwgOwor6Y6u6a2C5puyID4gY2hpbmtvbmt5b2t1XCA7Civlh7rmvJTmlpkgPiBzaHV0c3VlbnJ5b3VcIDsKK+mAmuS/l+eahCA+IHRzdXV6b2t1dGVraVwgOwor5L615YWl6ICFID4gc2hpbicnbnl1dXNoYVwgOwor56m65Ye65by1ID4ga2FyYXNodXRjaG91XCA7CivooYDlnKfoqIggPiBrZXRzdWF0c3VrZWlcIDsKK+iDhuaxgeizqiA+IHRhbmp1dXNoaXRzdVwgOwor6buE56Kn546JID4ga291aGVraWd5b2t1XCA7CivpmpTmnIjliIogPiBrYWt1Z2V0c3VrYW5cIDsKK+W+qeWOn+WKmyA+IGZ1a3VnZW5yeW9rdVwgOwor56uj5bel5byPID4gc2h1bmtvdXNoaWtpXCA7Civnq7bkuonnjocgPiBreW91c291cml0c3VcIDsKK+epjeeri+mHkSA+IHRzdW1pdGF0ZWtpblwgOwor5qSN54mp5ZySID4gc2hva3VidXRzdWVuXCA7Civni6zouqvlr64gPiBkb2t1c2hpbnJ5b3VcIDsKK+WFpeacreiAhSA+IG55dXVzYXRzdXNoYVwgOwor5paw5YWl55SfID4gc2hpbicnbnl1dXNlaVwgOwor56We6Kyh6ZuGID4gc2hpbicneW91c2h1dVwgOwor5Lih5qW156uvID4gcnlvdWt5b2t1dGFuXCA7CivluLPpnaLpnaIgPiBjaG91bWVuZHp1cmFcIDsKK+imi+epjeabuCA+IG1pdHN1bW9yaXNob1wgOwor56CU5YmK5LujID4ga2Vuc2FrdXNoaXJvXCA7CivmtLvli5XnmoQgPiBrYXRzdWRvdXRla2lcIDsKK+WFqOiDveWKmyA+IHplbicnbm91cnlva3VcIDsKK+mjn+iCiemhniA+IHNob2t1bmlrdXJ1aVwgOwor6IK65rS76YePID4gaGFpa2F0c3VyeW91XCA7CivplovnpajnjocgPiBrYWloeW91cml0c3VcIDsKK+W4uOitmOeahCA+IGpvdXNoaWtpdGVraVwgOwor5Y+O5a655YqbID4gc2h1dXlvdXJ5b2t1XCA7CivosaHlvrTnmoQgPiBzaG91Y2hvdXRla2lcIDsKK+iHquaFouipsSA+IGppbWFuYmFuYXNoaVwgOwor5oub5b6F5a6iID4gc2hvdXRhaWt5YWt1XCA7CivkuqTpn7/mm7IgPiBrb3VreW91a3lva3VcIDsKK+mbu+ino+izqiA+IGRlbmthaXNoaXRzdVwgOwor5bmz5bqV6Ii5ID4gaGlyYXNva29idW5lXCA7CivlsLHku7vlvI8gPiBzaHV1bmluc2hpa2lcIDsKK+WGt+WHjeWupCA+IHJlaXRvdXNoaXRzdVwgOwor6YWN6Iaz5a6kID4gaGFpemVuc2hpdHN1XCA7CivluoPls7bnnIwgPiBoaXJvc2hpbWFrZW5cIDsKK+aapuaUueatoyA+IGtveW9taWthaXNlaVwgOwor5b6z5bed5pa5ID4gdG9rdWdhd2FnYXRhXCA7Civku67lhaXlraYgPiBrYXJpbnl1dWdha3VcIDsKK+WOn+W9ouizqiA+IGdlbmtlaXNoaXRzdVwgOwor6buS6Imy6IWrID4ga29rdXNob2t1c2h1XCA7CivljZLmpa3nlJ8gPiBzb3RzdWd5b3VzZWlcIDsKK+WbnuW+qeWKmyA+IGthaWZ1a3VyeW9rdVwgOwor5YWl5Lya5byPID4gbnl1dWthaXNoaWtpXCA7CivlkJHlv4PlipsgPiBrb3VzaGlucnlva3VcIDsKK+eOieiZq+iJsiA+IHRhbWFtdXNoaWlyb1wgOwor54m55Yil5Y+3ID4gdG9rdWJldHN1Z291XCA7CivohLHmr5vnl4cgPiBkYXRzdW1vdXNob3VcIDsKK+Wni+eQg+W8jyA+IHNoaWt5dXVzaGlraVwgOwor5L2V6Imy5pCoID4gbmFuc2hva3V6dXJpXCA7Civkv6HoqJfmpa0gPiBzaGludGFrdWd5b3VcIDsKK+WDu+agueaApyA+IGhpZ2FtaWtvbmpvdVwgOwor5aWq5LiJ5oyvID4gZGF0c3VzYW5zaGluXCA7CivpiYTngavkuLwgPiB0ZWtrYWRvbmJ1cmlcIDsKK+Wkp+emj+mkhSA+IGRhaWZ1a3Vtb2NoaVwgOwor5L6155Wl6LuNID4gc2hpbnJ5YWt1Z3VuXCA7Civlj43nianos6ogPiBoYW5idXNzaGl0c3VcIDsKK+WItueQg+WKmyA+IHNlaWt5dXVyeW9rdVwgOwor6Zm455Sj54mpID4gcmlrdXNhbmJ1dHN1XCA7CivovrLkvZzniakgPiBub3VzYWt1YnV0c3VcIDsKK+ernOiIjOiYrSA+IHJ5dXV6ZXRzdXJhblwgOwor5Za25qWt55WRID4gZWlneW91YmF0YWtlXCA7Civogonpo5/njaMgPiBuaWt1c2hva3VqdXVcIDsKK+azleW+i+WtpiA+IGhvdXJpdHN1Z2FrdVwgOwor5paw55m65piOID4gc2hpbmhhdHN1bWVpXCA7CivpgJfnlZnlrqIgPiB0b3VyeXV1a3lha3VcIDsKK+W+s+WztuecjCA+IHRva3VzaGltYWtlblwgOwor5riF5rC05a+6ID4ga2l5b21penVkZXJhXCA7CivnhrHlrrnph48gPiBuZXRzdXlvdXJ5b3VcIDsKK+aWh+ethualrSA+IGJ1bnBpdHN1Z3lvdVwgOwor6ISz5Ye66KGAID4gbm91c2h1a2tldHN1XCA7CivpnLLlh7rnl4cgPiByb3NodXRzdXNob3VcIDsKK+mrmOi2s+ifuSA+IHRha2Fhc2hpZ2FuaVwgOwor56eB5ai856qfID4gc2hpc2hvdWt1dHN1XCA7Civpu5LoibLnmYwgPiBrb2t1c2hva3VnYW5cIDsKK+iyp+ihgOeXhyA+IGhpbmtldHN1c2hvdVwgOwor6KqN6K2Y56WoID4gbmluc2hpa2loeW91XCA7Civnlqvnl4XnpZ4gPiB5YWt1YnlvdWdhbWlcIDsKK+mcsuWHuueLgiA+IHJvc2h1dHN1a3lvdVwgOwor5a+G54yf6ICFID4gbWl0c3VyeW91c2hhXCA7CivlhavkuIjls7YgPiBoYWNoaWpvdWppbWFcIDsKK+mZjeelnuihkyA+IGtvdXNoaW5qdXRzdVwgOwor5ZOy5a2m6ICFID4gdGV0c3VnYWt1c2hhXCA7CivlipvkuIDmna8gPiBjaGlrYXJhaXBwYWlcIDsKK+WHuuWTgeeJqSA+IHNodXBwaW5idXRzdVwgOwor54Gw55m96ImyID4ga2FpaGFrdXNob2t1XCA7Civni6zlsYXlrqQgPiBkb2treW9zaGl0c3VcIDsKK+aOpeW+heS/giA+IHNldHRhaWdha2FyaVwgOwor5LiH5bm06ZuqID4gbWFuJyduZW4nJ3l1a2lcIDsKK+eLguaDs+absiA+IGt5b3Vzb3VreW9rdVwgOwor5L6155Wl6ICFID4gc2hpbnJ5YWt1c2hhXCA7CivnlLrlvbnkurogPiBtYWNoaXlha3VuaW5cIDsKK+iasOickueciSA+IGdlamlnZWppbWF5dVwgOwor5a2m57+S5aG+ID4gZ2FrdXNodXVqdWt1XCA7CivmlrDnmbrlo7IgPiBzaGluaGF0c3ViYWlcIDsKK+ertuS6ieWKmyA+IGt5b3Vzb3VyeW9rdVwgOwor5aSx5ZCN5rCPID4gc2hpdHN1bWVpc2hpXCA7CivooajluqfmlbcgPiBvbW90ZXphc2hpa2lcIDsKK+W+tOeZuuS7pCA+IGNob3VoYXRzdXJlaVwgOwor5Ymv5Y+O5YWlID4gZnVrdXNodXVueXV1XCA7CivmgZDllp3nvaogPiBreW91a2F0c3V6YWlcIDsKK+WxiOaKmOi7uCA+IGt1c3NldHN1amlrdVwgOwor5ZCI5YiH6KKLID4gZ2Fzc2FpYnVrdXJvXCA7Civmtojmga/pgJogPiBzaG91c29rdXRzdXVcIDsKK+agquS4u+aoqSA+IGthYnVudXNoaWtlblwgOwor5Y2g5pyJ546HID4gc2VuJyd5dXVyaXRzdVwgOwor5Y2X5Lqs6KKLID4gbmFua2luYnVrdXJvXCA7Civpq5jpq5jmjIcgPiB0YWthdGFrYXl1YmlcIDsKK+eZveiJsuWFiSA+IGhha3VzaG9rdWtvdVwgOwor6ZCY5Lmz55+zID4gc2hvdW55dXVzZWtpXCA7Civml6XnsbPljZQgPiBuaWNoaWJlaWt5b3VcIDsKK+WxiOaKmOinkiA+IGt1c3NldHN1a2FrdVwgOwor5q665Lq655qEID4gc2F0c3VqaW50ZWtpXCA7Civlt6blm6PmiYcgPiBoaWRhcml1Y2hpd2FcIDsKK+mYsuWhteWupCA+IGJvdWppbnNoaXRzdVwgOwor5ZCr5pyJ546HID4gZ2FuJyd5dXVyaXRzdVwgOwor6ISI5pCP5pWwID4gbXlha3VoYWt1c3V1XCA7CivmjqjpgLLlipsgPiBzdWlzaGlucnlva3VcIDsKK+iBvuahn+aVtyA+IHRzdW5ib3NhamlraVwgOwor57iu57es55q6ID4gY2hpcmltZW5qaXdhXCA7Civmrrrkurrni4IgPiBzYXRzdWppbmt5b3VcIDsKK+i8uOWHuuWFpSA+IHl1c2h1dHN1bnl1dVwgOwor6Kaz5a6i5bitID4ga2Fua3lha3VzZWtpXCA7Civlkb3lhqXliqAgPiBpbm9jaGlteW91Z2FcIDsKK+ihqOWFreeOiSA+IGh5b3Vyb2t1ZGFtYVwgOwor5qOu5p6X5rW0ID4gc2hpbnJpbicneW9rdVwgOwor6ICV5L2c54mpID4ga291c2FrdWJ1dHN1XCA7CivniIbnmbrnrqEgPiBiYWt1aGF0c3VrYW5cIDsKK+m7kuWFq+S4iCA+IGt1cm9oYWNoaWpvdVwgOwor5Y2K6Lqr5rW0ID4gaGFuc2hpbicneW9rdVwgOwor5pqX57eR6ImyID4gYW5yeW9rdXNob2t1XCA7CivnrYvogonnl5sgPiBraW4nJ25pa3V0c3V1XCA7Civogbfog73ntaYgPiBzaG9rdW5vdWt5dXVcIDsKK+aWsOeUn+eJqSA+IHNoaW5zZWlidXRzdVwgOwor5YeM6ZyE6IqxID4gbm91emVua2F6dXJhXCA7Civpu5LoibLlsIkgPiBrb2t1c2hpa2lqb3VcIDsKK+WBtueZuueahCA+IGd1dWhhdHN1dGVraVwgOwor54m555Sj54mpID4gdG9rdXNhbmJ1dHN1XCA7CivljJbnsqflrqQgPiBrZXNob3VzaGl0c3VcIDsKK+e3j+aUr+WHuiA+IHNvdXNoaXNodXRzdVwgOwor5ZOy5a2m5pu4ID4gdGV0c3VnYWt1c2hvXCA7CivljZrnianppKggPiBoYWt1YnV0c3VrYW5cIDsKK+S7suS7i+eJqSA+IGNodXVrYWlidXRzdVwgOwor55m96aCt6beyID4gaGFrdXRvdXdhc2hpXCA7CivmnIDmlrDlvI8gPiBzYWlzaGluc2hpa2lcIDsKK+Wxsei6kei6hSA+IHlhbWF0c3V0c3VqaVwgOwor55yB6Zu75YqbID4gc2hvdWRlbnJ5b2t1XCA7CivkuIDljLnni7wgPiBpcHBpa2lvb2thbWlcIDsKK+a2iOaBr+etiyA+IHNob3Vzb2t1c3VqaVwgOwor5LiH5bm0562GID4gbWFuJyduZW5oaXRzdVwgOwor5LuH5ZCM5rCPID4ga2F0YWtpZG91c2hpXCA7CivlsYDlnLDnmoQgPiBreW9rdWNoaXRla2lcIDsKK+mdqeaJi+iiiyA+IGthd2F0ZWJ1a3Vyb1wgOwor5LiD5YiG6KKWID4gc2hpY2hpYnVzb2RlXCA7Civlv4PpnIrooZMgPiBzaGlucmVpanV0c3VcIDsKK+advuerueaihSA+IHNob3VjaGlrdWJhaVwgOwor5qC46ZaL55m6ID4ga2FrdWthaWhhdHN1XCA7Civlm73pmpvoibIgPiBrb2t1c2Fpc2hva3VcIDsKK+WtkOS+m+W/gyA+IGtvZG9tb2dva29yb1wgOwor5YuF6YG46ZuGID4gY2hva3VzZW5zaHV1XCA7Civnsr7npZ7lipsgPiBzZWlzaGlucnlva3VcIDsKK+WGjeeqgeWFpSA+IHNhaXRvdHN1bnl1dVwgOwor55m65L+h5bGAID4gaGFzc2hpbmt5b2t1XCA7CivlpKflkozlv4MgPiB5YW1hdG9nb2tvcm9cIDsKK+iqv+W+i+W4qyA+IGNob3VyaXRzdXNoaVwgOwor6L6e6IG36aGYID4gamlzaG9rdW5lZ2FpXCA7Civopqrlr4bmhJ8gPiBzaGlubWl0c3VrYW5cIDsKK+eqk+mam+aXjyA+IG1hZG9naXdhem9rdVwgOwor5YaZ55yf6KGTID4gc2hhc2hpbmp1dHN1XCA7CivlvqnlhYPlipsgPiBmdWt1Z2Vucnlva3VcIDsKK+i8u+WwhOeGsSA+IGZ1a3VzaGFuZXRzdVwgOwor5L6b6L+w6ICFID4ga3lvdWp1dHN1c2hhXCA7CivnpZ7ntYznr4AgPiBzaGlua2Vpc2V0c3VcIDsKK+eIhueZuuaApyA+IGJha3VoYXRzdXNlaVwgOwor5YWo5pel5Yi2ID4gemVuJyduaWNoaXNlaVwgOwor5raI5q+S6JasID4gc2hvdWRva3V5YWt1XCA7CivpgZPlvrPlvosgPiBkb3V0b2t1cml0c3VcIDsKK+WbvemYsuiJsiA+IGtva3Vib3VzaG9rdVwgOwor57WC5pyr6KuWID4gc2h1dW1hdHN1cm9uXCA7CivlsIbou43ogbcgPiBzaG91Z3Vuc2hva3VcIDsKK+iNieaciOa1gSA+IHNvdWdldHN1cnl1dVwgOwor5piO6LWk6ImyID4gbWVpc2VraXNob2t1XCA7Civku5jnnYDlipsgPiBmdWNoYWt1cnlva3VcIDsKK+ino+axuuetliA+IGthaWtldHN1c2FrdVwgOwor5Y+j5ZSH6KOCID4ga291c2hpbnJldHN1XCA7CivkuIPojYnnsqUgPiBuYW5ha3VzYWdheXVcIDsKK+WVhualreWtpiA+IHNob3VneW91Z2FrdVwgOwor5bu66Kit55yBID4ga2Vuc2V0c3VzaG91XCA7CivliIbliKXlv4MgPiBmdW5iZXRzdXNoaW5cIDsKK+W7uuioreeahCA+IGtlbnNldHN1dGVraVwgOwor5LqM57+75b25ID4gcnlhbmZhbicneWFrdVwgOwor5Y+j5ouN5a2QID4ga3VjaGlieW91c2hpXCA7Civoqo3oqLzlvI8gPiBuaW5zaG91c2hpa2lcIDsKK+e3j+aLrOeahCA+IHNvdWthdHN1dGVraVwgOwor5omY6Ymi5YOnID4gdGFrdWhhdHN1em91XCA7CivllYbmpa3lm70gPiBzaG91Z3lvdWtva3VcIDsKK+S7suS6uuWPoyA+IG5ha291ZG9ndWNoaVwgOwor5qGc5YmN57eaID4gc2FrdXJhemVuc2VuXCA7Civpvo3oiIzomK0gPiByeXV1emV0c3VyYW5cIDsKK+W8t+WItuWKmyA+IGt5b3VzZWlyeW9rdVwgOwor5b+F6Kqt5pu4ID4gaGl0c3Vkb2t1c2hvXCA7CivlnKflipvoqIggPiBhdHN1cnlva3VrZWlcIDsKK+maj+ethumbhiA+IHp1aWhpdHN1c2h1dVwgOwor54yr55uu55+zID4gbmVrb21va3VzZWtpXCA7Civli4nlvLfmnLogPiBiZW5reW91enVrdWVcIDsKK+eZveeOiealvCA+IGhha3VneW9rdXJvdVwgOwor6ZaL6YCa5byPID4ga2FpdHN1dXNoaWtpXCA7Civopb/ljYrnkIMgPiBuaXNoaWhhbmt5dXVcIDsKK+WVhOacqOmzpSA+IHRha3Vib2t1Y2hvdVwgOwor5Y2Y5LiA5b2iID4gdGFuJydpY2hpZ2F0YVwgOwor5b+F54S255qEID4gaGl0c3V6ZW50ZWtpXCA7CivmsLTon7fonoIgPiBtaXp1a2FtYWtpcmlcIDsKK+aYn+aciOWknCA+IGhvc2hpZHp1a3V5b1wgOwor57ie57mU54mpID4gc2hpbWFvcmltb25vXCA7Civlu7roqK3mpa0gPiBrZW5zZXRzdWd5b3VcIDsKK+m8u+mrmOOAhSA+IGhhbmF0YWthZGFrYVwgOwor5ZWG5Lq66KGXID4gc2hvdW5pbm1hY2hpXCA7CivkuIDluZXniakgPiBoaXRvbWFrdW1vbm9cIDsKK+eZvuS6uuWKmyA+IGh5YWt1bmlucmlraVwgOwor5L6b6L+w5pu4ID4ga3lvdWp1dHN1c2hvXCA7Civlrp/mpa3nlYwgPiBqaXRzdWd5b3VrYWlcIDsKK+ihjOW5s+mNiyA+IHl1a2loaXJhbmFiZVwgOwor6JC95oiQ5byPID4gcmFrdXNlaXNoaWtpXCA7Civmn7Plt53pjYsgPiB5YW5hZ2F3YW5hYmVcIDsKK+iIque2muWKmyA+IGtvdXpva3VyeW9rdVwgOwor55u05o6l6LK7ID4gY2hva3VzZXRzdWhpXCA7CivlsbHmoqjnnIwgPiB5YW1hbmFzaGlrZW5cIDsKK+ajl+aksOWtkCA+IG5hdHN1bWV5YXNoaVwgOwor5Yi65r+A54mpID4gc2hpZ2VraWJ1dHN1XCA7CivmvKvpgYrlrqIgPiBtYW4nJ3l1dWt5YWt1XCA7Civpo5/nianmsrkgPiBzaG9rdWJ1dHN1eXVcIDsKK+eTpueFjumkhSA+IGthd2FyYXNlbmJlaVwgOwor6Kaq5a2Q5Li8ID4gb3lha29kb25idXJpXCA7CivokZfov7Dmpa0gPiBjaG9qdXRzdWd5b3VcIDsKK+iSvOeZveiJsiA+IHNvdWhha3VzaG9rdVwgOwor5LiD6L665b2iID4gc2hpY2hpaGVua2VpXCA7CivlubTmnKvov4QgPiBuZW5tYXRzdW1hZGVcIDsKK+WjsuaYpeWuvyA+IGJhaXNodW4nJ3lhZG9cIDsKK+izqueCueezuyA+IHNoaXRzdXRlbmtlaVwgOwor5b6h5Ly96KmxID4gb3RvZ2liYW5hc2hpXCA7Civmk43mpa3njocgPiBzb3VneW91cml0c3VcIDsKK+aeleWxj+miqCA+IG1ha3VyYWJ5b3VidVwgOwor6KGA5ray5a2mID4ga2V0c3Vla2lnYWt1XCA7Civln7rnnaPmlZkgPiBraXJpc3V0b2t5b3VcIDsKK+m8oOiKseeBqyA+IG5lenVtaWhhbmFiaVwgOwor5o2V54mp5bizID4gdG9yaW1vbm9jaG91XCA7CivmjZXnianluJYgPiB0b3JpbW9ub2Nob3VcIDsKK+iyr+iUteWupCA+IGNob3pvdXNoaXRzdVwgOwor5byU5ZWP5a6iID4gY2hvdW1vbmt5YWt1XCA7CivpgbrlpLHniakgPiBpc2hpdHN1YnV0c3VcIDsKK+WLleiEiOihgCA+IGRvdW15YWtrZXRzdVwgOwor5YWl5aC05byPID4gbnl1dWpvdXNoaWtpXCA7CivntLDog57os6ogPiBzYWlib3VzaGl0c3VcIDsKK+ihgOa2suWeiyA+IGtldHN1ZWtpZ2F0YVwgOwor5qiZ6K2Y54GvID4gaHlvdXNoaWtpdG91XCA7CivljIXmi6znmoQgPiBob3VrYXRzdXRla2lcIDsKK+WKh+S4reWKhyA+IGdla2ljaHV1Z2VraVwgOwor5a6f55So55qEID4gaml0c3V5b3V0ZWtpXCA7Civkvo3lhavpqI4gPiBzYW11cmFpaGFra2lcIDsKK+S4remWk+iJsiA+IGNodXVrYW5zaG9rdVwgOwor6ZaL6IW56KGTID4ga2FpZnVrdWp1dHN1XCA7Civnm7TmkoPlvL4gPiBjaG9rdWdla2lkYW5cIDsKK+WJr+eUo+eJqSA+IGZ1a3VzYW5idXRzdVwgOwor5ZG95Lit546HID4gbWVpY2h1dXJpdHN1XCA7CivooYDlj4vnl4UgPiBrZXRzdXl1dWJ5b3VcIDsKK+eyvueZveeOhyA+IHNlaWhha3VyaXRzdVwgOwor5Z2H6LOq5oCnID4ga2luc2hpdHN1c2VpXCA7CivmiLjnsY3kv4IgPiBrb3Nla2lnYWthcmlcIDsKK+aOpeWuoualrSA+IHNla2t5YWt1Z3lvdVwgOwor6JOE6Ia/55eHID4gY2hpa3Vub3VzaG91XCA7CivoirHlvaLmoKogPiBoYW5hZ2F0YWthYnVcIDsKK+aMr+WHuuS6uiA+IGZ1cmlkYXNoaW5pblwgOwor6Ki76YeI6ICFID4gY2h1dXNoYWt1c2hhXCA7CivnpoHmrLLnmoQgPiBraW4nJ3lva3V0ZWtpXCA7CivkuIDliIbliKUgPiBoaXRvZnVuYmV0c3VcIDsKK+WNiueLrOeriyA+IGhhbmRva3VyaXRzdVwgOwor5Z+35YuZ5LitID4gc2hpdHN1bXVjaHV1XCA7Civopqrml6XmtL4gPiBzaGluJyduaWNoaWhhXCA7Civnpo/ls7bnnIwgPiBmdWt1c2hpbWFrZW5cIDsKK+iqv+iJsuadvyA+IGNob3VzaG9rdWJhblwgOwor5Ymq5a6a6YuPID4gc2VudGVpYmFzYW1pXCA7Civnt5Hpu4ToibIgPiByeW9rdW91c2hva3VcIDsKK+S4i+Wxi+aVtyA+IHNoaW1veWFzaGlraVwgOwor6LuK55So5ZOBID4ga3VydW1heW91aGluXCA7CivogJDkuYXlipsgPiB0YWlreXV1cnlva3VcIDsKK+WvneWPsOiZqyA+IHNoaW5kYWltdXNoaVwgOwor5Zec6JmQ55qEID4gc2hpZ3lha3V0ZWtpXCA7CivkuK3ntpnlsYAgPiBjaHV1a2Vpa3lva3VcIDsKK+mVt+W6g+iIjCA+IGNob3Vrb3V6ZXRzdVwgOwor5pel5rKh5b6MID4gbmljaGlib3RzdWdvXCA7Civli5XohIjnmKQgPiBkb3VteWFrdXJ5dXVcIDsKK+S4gOi8quaMvyA+IGljaGlyaW56YXNoaVwgOwor6JK455m655q/ID4gam91aGF0c3V6YXJhXCA7Civos4PlgJ/mqKkgPiBjaGluc2hha3VrZW5cIDsKK+WNuOWVj+WxiyA+IG9yb3NoaWRvbicneWFcIDsKK+mYsua5v+WJpCA+IGJvdXNoaXRzdXphaVwgOwor5Y+O56mr6auYID4gc2h1dWtha3VkYWthXCA7Civlho3lh7rnmbogPiBzYWlzaHVwcGF0c3VcIDsKK+WNlOWlj+absiA+IGt5b3Vzb3VreW9rdVwgOwor5ZGo5qW15pifID4gc2h1dWt5b2t1c2VpXCA7Civpm7booYzliJcgPiByZWlneW91cmV0c3VcIDsKK+WHuueZuueCuSA+IHNodXBwYXRzdXRlblwgOwor5ZCI5qC8546HID4gZ291a2FrdXJpdHN1XCA7CivooYzpgLLmm7IgPiBrb3VzaGlua3lva3VcIDsKK+eZveeGseeBryA+IGhha3VuZXRzdXRvdVwgOwor6aOf5paZ5ZOBID4gc2hva3VyeW91aGluXCA7Civmk43ou4rkv4IgPiBzb3VzaGFnYWthcmlcIDsKK+WIuuaIn+eJqSA+IHNoaWdla2lidXRzdVwgOwor5rm/6Zu75rGgID4gc2hpdHN1ZGVuY2hpXCA7CivoprPmjozooZMgPiBrYW5zaG91anV0c3VcIDsKK+ecn+mqqOmggiA+IHNoaW5rb3RjaG91XCA7Civlv4XopoHlk4EgPiBoaXRzdXlvdWhpblwgOwor55S75LiW55qEID4ga2FrdXNlaXRla2lcIDsKK+eGqOaWl+iiiyA+IG5vc2hpYnVrdXJvXCA7CivmuKzlnLDlraYgPiBzb2t1Y2hpZ2FrdVwgOwor6ZuB5pyo6ZGiID4gZ2FuZ2l5YXN1cmlcIDsKK+WGjeWJsuW8lSA+IHNhaXdhcmliaWtpXCA7CivlpYnnjK7lvI8gPiBob3VrZW5zaGlraVwgOwor5Yid6KqV55SfID4gaGF0c3V0YW5qb3VcIDsKK+S4ieacrOi2syA+IHNhbmJvbicnYXNoaVwgOwor5Yik5pat5YqbID4gaGFuZGFucnlva3VcIDsKK+WNlOiqv+aApyA+IGt5b3VjaG91c2VpXCA7CivlpKnpgZPkub4gPiB0ZW50b3Vib3NoaVwgOwor55m95pel5aSiID4gaGFrdWppdHN1bXVcIDsKK+WIhuaekOihqCA+IGJ1bnNla2loeW91XCA7Civmib/oq77mm7ggPiBzaG91ZGFrdXNob1wgOwor5bCR6aOf5a62ID4gc2hvdXNob2t1a2FcIDsKK+S7ruWft+ihjCA+IGthcmlzaGlra291XCA7Civmj6HlipvoqIggPiBha3VyeW9rdWtlaVwgOwor5LiN6Laz5YudID4gZnVzb2t1Z2FjaGlcIDsKK+W+jOmAsuWbvSA+IGtvdXNoaW5rb2t1XCA7CivmtJfnnLzolqwgPiBzZW5nYW4nJ3lha3VcIDsKK+W+qee/kuaWhyA+IGZ1a3VzaHV1YnVuXCA7CivmraLooYDluK8gPiBzaGlrZXRzdXRhaVwgOwor5LiL5a6/5paZID4gZ2VzaHVrdXJ5b3VcIDsKK+mHjemHj+e0miA+IGp1dXJ5b3VreXV1XCA7CivliY3pgLLou7ggPiB6ZW5zaGluamlrdVwgOwor6YmE55+z5b+DID4gdGVzc2VraXNoaW5cIDsKK+eUmOiMtuiUkyA+IGFtYWNoYWR6dXJ1XCA7CivnvbLlkI3lvI8gPiBzaG9tZWlzaGlraVwgOwor5Lq65b+D5ZywID4gaGl0b2dva29jaGlcIDsKK+WbmuS6uuacjSA+IHNodXVqaW5mdWt1XCA7CivlvovlhIDogIUgPiByaWNoaWdpbW9ub1wgOwor6ZuB5pyo6LuKID4gZ2FuZ2lndXJ1bWFcIDsKK+aGguasneeXhyA+IHl1dXV0c3VzaG91XCA7Civlrp/pqJPlvI8gPiBqaWtrZW5zaGlraVwgOwor54uC5L+h6ICFID4ga3lvdXNoaW5zaGFcIDsKK+awkeaXj+eahCA+IG1pbnpva3V0ZWtpXCA7CivnmbroqIDogIUgPiBoYXRzdWdlbnNoYVwgOwor5Y2Y57im5YiXID4gdGFuanV1cmV0c3VcIDsKK+S4ieS6uue1hCA+IHNhbicnbmluZ3VtaVwgOwor6buS5paR55eFID4ga29rdWhhbmJ5b3VcIDsKK+aCquaCquaIryA+IHdhcnVpdGF6dXJhXCA7Civlrp/nlKjlk4EgPiBqaXRzdXlvdWhpblwgOwor5aSn6IW/6aqoID4gZGFpdGFpa290c3VcIDsKK+awtOicnOahgyA+IHN1aW1pdHN1dG91XCA7CivmvILmtYHoiLkgPiBoeW91cnl1dXNlblwgOwor6aC45YuV6ISIID4ga2VpZG91bXlha3VcIDsKK+eUn+WFteazlSA+IG5hbWFieW91aG91XCA7Civng4/nvr3oibIgPiBrYXJhc3ViYWlyb1wgOwor5byf5byf5a2QID4gb3RvdXRvZGVzaGlcIDsKK+WKh+aWh+WtpiA+IGdla2lidW5nYWt1XCA7CivliqDolqzpo68gPiBrYXlha3VtZXNoaVwgOwor5YyX5Y2K55CDID4ga2l0YWhhbmt5dXVcIDsKK+mbhuS4ree3miA+IHNodXVjaHV1c2VuXCA7Civlvpfmpa3lo6sgPiB0b2t1Z3lvdXNoaVwgOwor5YmN6YCy6KeSID4gemVuc2hpbmtha3VcIDsKK+mkiuauluaxoCA+IHlvdXNob2t1Y2hpXCA7Civll5zomZDmgKcgPiBzaGlneWFrdXNlaVwgOwor5LiJ5Lq656ewID4gc2FuJyduaW5zaG91XCA7CivkuK3ntJrlk4EgPiBjaHV1a3l1dWhpblwgOwor5ryC5rWB6ICFID4gaHlvdXJ5dXVzaGFcIDsKK+iqmOaDkeeJqSA+IHl1dXdha3Vtb25vXCA7CivpoK3ok4vpqqggPiB0b3VnYWlrb3RzdVwgOwor55m65piO5ZOBID4gaGF0c3VtZWloaW5cIDsKK+WkseagvOiAhSA+IHNoaWtrYWt1c2hhXCA7CivmiJDnuL7ooaggPiBzZWlzZWtpaHlvdVwgOwor5rOo5paH5YWIID4gY2h1dW1vbnNha2lcIDsKK+aXouaxuuWbmiA+IGtpa2V0c3VzaHV1XCA7CivmkYLli5Xoq5YgPiBzZXRzdWRvdXJvblwgOwor5LyP5rWB5rC0ID4gZnVrdXJ5dXVzdWlcIDsKK+eLrOijgeeahCA+IGRva3VzYWl0ZWtpXCA7Civpq5joqr/lrZAgPiB0YWthY2hvdXNoaVwgOwor56uL6ISa5ZywID4gcmlra3lha3VjaGlcIDsKK+WGjeani+eviSA+IHNhaWtvdWNoaWt1XCA7Civmq5PlpKrpvJMgPiB5YWd1cmFkYWlrb1wgOwor5q2i6KGA5YmkID4gc2hpa2V0c3V6YWlcIDsKK+S4oeaWueWFsSA+IHJ5b3Vob3V0b21vXCA7Civmnb7okYnmnZYgPiBtYXRzdWJhZHp1ZVwgOwor5rKW56mN57WxID4gY2h1dXNla2l0b3VcIDsKK+S7leS6i+eusSA+IHNoaWdvdG9iYWtvXCA7CivmsLfphovphbggPiBoeW91c2FrdXNhblwgOwor5pu457GN5ZWGID4gc2hvc2VraXNob3VcIDsKK+S7rue2tOacrCA+IGthcml0b2ppaG9uXCA7Civnmbrpm7vmiYAgPiBoYXRzdWRlbnNob1wgOwor5a6Y6IO955qEID4ga2FuJydub3V0ZWtpXCA7CivmnKvmoqLnmoQgPiBtYXNzaG91dGVraVwgOwor5Lit6ZaT5Zu9ID4gY2h1dWthbmtva3VcIDsKK+aAnee0oueahCA+IHNoaXNha3V0ZWtpXCA7Civlh7rouqvmoKEgPiBzaHVzc2hpbmtvdVwgOwor54Gw6Z2S6ImyID4gaGFpc2Vpc2hva3VcIDsKK+iIqua1t+ihkyA+IGtvdWthaWp1dHN1XCA7CivlsI/mnbHkuqwgPiBzaG91dG91a3lvdVwgOwor5Y2D5Lq65YqbID4gc2VuJyduaW5yaWtpXCA7Civkurrlt6Xoip0gPiBqaW5rb3VzaGliYVwgOwor6Lu96YeP57SaID4ga2VpcnlvdWt5dXVcIDsKK+aLmOadn+WcpyA+IGtvdXNva3VhdHN1XCA7CivmiKbpl5jlipsgPiBzZW50b3VyeW9rdVwgOwor55CD6Z2i6Y+hID4ga3l1dW1lbmt5b3VcIDsKK+S6uuW9ouWKhyA+IG5pbmd5b3VnZWtpXCA7CivnhKHpqqjogIUgPiBidWtvdHN1bW9ub1wgOwor55S65aWJ6KGMID4gbWFjaGlidWd5b3VcIDsKK+epuuiovOaWhyA+IGthcmFzaG91bW9uXCA7CivmsLfphaLphbggPiBoeW91c2FrdXNhblwgOwor5pS+54mp57eaID4gaG91YnV0c3VzZW5cIDsKK+iqv+WtkOiAhSA+IGNob3VzaGltb25vXCA7Civnj77lrp/mhJ8gPiBnZW5qaXRzdWthblwgOwor56mN5YiG5a2mID4gc2VraWJ1bmdha3VcIDsKK+ePvuWun+aApyA+IGdlbmppdHN1c2VpXCA7Civpq5jpm7vlnKcgPiBrb3VkZW4nJ2F0c3VcIDsKK+WtpuWVj+eahCA+IGdha3Vtb250ZWtpXCA7CivlrabnqbbnmoQgPiBnYWtreXV1dGVraVwgOwor5Y+O56mr56WtID4gc2h1dWtha3VzYWlcIDsKK+eJqeeQhuWtpiA+IGJ1dHN1cmlnYWt1XCA7CivlnoLnm7Tnt5ogPiBzdWljaG9rdXNlblwgOwor5q205Y+y5a2mID4gcmVraXNoaWdha3VcIDsKK+a9pOa7keWJpCA+IGp1bmthdHN1emFpXCA7CivntYTnuZTlraYgPiBzb3NoaWtpZ2FrdVwgOwor55m66Zu75a2QID4gaGF0c3VkZW5zaGlcIDsKK+S4ieWwiuS7jyA+IHNhbnpvbmJ1dHN1XCA7CivlvJXlj5bkurogPiBoaWtpdG9yaW5pblwgOwor5ryC5rOK6ICFID4gaHlvdWhha3VzaGFcIDsKK+ecn+eUsOiZqyA+IHNhbmFkYW11c2hpXCA7Civpl4fllYbkurogPiB5YW1pc2hvdW5pblwgOwor5YWl5ryB5paZID4gbnl1dWd5b3J5b3VcIDsKK+S4g+WuneeEvCA+IHNoaXBwb3V5YWtpXCA7Civpi7zpiYTmnb8gPiBrb3V0ZXRzdWJhblwgOwor5YSq6Imv5qCqID4geXV1cnlvdWthYnVcIDsKK+acrOagvOeahCA+IGhvbmtha3V0ZWtpXCA7CivlvqnorpDmiKYgPiBmdWt1c2h1dXNlblwgOwor5pq05Yqb5ZujID4gYm91cnlva3VkYW5cIDsKK+WIneiouuaWmSA+IHNob3NoaW5yeW91XCA7Civlj6PpgZTogIUgPiBrdWNoaWRhc3NoYVwgOwor6ICQ54ax5oCnID4gdGFpbmV0c3VzZWlcIDsKK+Wil+ihgOWJpCA+IHpvdWtldHN1emFpXCA7CivljJfljJfmnbEgPiBob2t1aG9rdXRvdVwgOwor55m66KiA5qipID4gaGF0c3VnZW5rZW5cIDsKK+aApeaIkOmVtyA+IGt5dXVzZWljaG91XCA7Civlh7ros4fpoY0gPiBzaHVzc2hpZ2FrdVwgOwor5YaF5YiG5rOMID4gbmFpYnVucGl0c3VcIDsKK+Wbm+aXrOevgCA+IHNoaWp1bnNldHN1XCA7CivkuZ3lrpjps6UgPiBreXV1a2FuY2hvdVwgOwor6ICB5Lq65YqbID4gcm91amlucnlva3VcIDsKK+W7uuevieWjqyA+IGtlbmNoaWt1c2hpXCA7CivlpKrmpbXmi7MgPiB0YWlreW9rdWtlblwgOwor55Sf55Wq57WEID4gbmFtYWJhbmd1bWlcIDsKK+mkiuauluWgtCA+IHlvdXNob2t1am91XCA7CivomZrohLHmhJ8gPiBreW9kYXRzdWthblwgOwor6LGh54mZ6LOqID4gem91Z2VzaGl0c3VcIDsKK+mahum8u+ihkyA+IHJ5dXViaWp1dHN1XCA7CivooajpnaLnqY0gPiBoeW91bWVuc2VraVwgOwor5Yqq5Yqb6LOeID4gZG9yeW9rdXNob3VcIDsKK+WNgeS6uuS4piA+IGp1dW5pbicnbmFtaVwgOwor6Jas6ZG16aCtID4geWFrYW4nJ2F0YW1hXCA7CivllYblo7LnrYsgPiBzaG91YmFpc3VqaVwgOwor5riv5rm+5bGAID4ga291d2Fua3lva3VcIDsKK+awtOWVhuWjsiA+IG1penVzaG91YmFpXCA7CivpiYTpgZPkvr8gPiB0ZXRzdWRvdWJpblwgOwor5rCR5peP5a2mID4gbWluem9rdWdha3VcIDsKK+attOWPsuWKhyA+IHJla2lzaGlnZWtpXCA7Civmup3lvaLpi7wgPiBtaXpvZ2F0YWtvdVwgOwor5piO5pmw5aSiID4gbWVpc2VraXl1bWVcIDsKK+mAoOihgOWJpCA+IHpvdWtldHN1emFpXCA7Civmlq3ntprnmoQgPiBkYW56b2t1dGVraVwgOwor5byP6YOo55yBID4gc2hpa2lidXNob3VcIDsKK+altemBk+iAhSA+IGdva3Vkb3Vtb25vXCA7CivplovmoKHlvI8gPiBrYWlrb3VzaGlraVwgOwor5rCR57SE6KuWID4gbWluJyd5YWt1cm9uXCA7CivpmLLlvqHnjocgPiBib3VneW9yaXRzdVwgOwor6KGo6Z2i55qEID4gaHlvdW1lbnRla2lcIDsKK+ioiOaZguS/giA+IGtlaWppZ2FrYXJpXCA7Civlvoznmbrlk4EgPiBrb3VoYXRzdWhpblwgOwor6Jap5pGp54S8ID4gc2F0c3VtYXlha2lcIDsKK+WHuui6q+WcsCA+IHNodXNzaGluY2hpXCA7CivorbfouqvooZMgPiBnb3NoaW5qdXRzdVwgOwor5LiO5aSq6KmxID4geW90YWJhbmFzaGlcIDsKK+WGjeWFpeWtpiA+IHNhaW55dXVnYWt1XCA7CivljZTntITmm7ggPiBreW91eWFrdXNob1wgOwor6Kq/5a2Q54mpID4gY2hvdXNoaW1vbm9cIDsKK+S4iee+veeDjyA+IHNhbmJhZ2FyYXN1XCA7CivoqKrllY/lrqIgPiBob3Vtb25reWFrdVwgOwor5rK76aiT6JasID4gY2hpa2VuJyd5YWt1XCA7CivmgKflloToqqwgPiBzZWl6ZW5zZXRzdVwgOwor5LuV5LqL5p+EID4gc2hpZ290b2dhcmFcIDsKK+Wkp+aguei2syA+IGRhaWtvbicnYXNoaVwgOwor5YWJ54Cs6b6NID4gbWl0c3VzZXJ5dXVcIDsKK+eLvOiXieiAhSA+IHJvdXpla2ltb25vXCA7Civlv4Pmi43mlbAgPiBzaGlucGFrdXN1dVwgOwor5YuV54mp6KqMID4gZG91YnV0c3VzaGlcIDsKK+i/lOWNtOWApCA+IGhlbmt5YWt1Y2hpXCA7CivnhKHpp4ToqbEgPiBtdWRhYmFuYXNoaVwgOwor5YiG5a2Q5byPID4gYnVuc2hpc2hpa2lcIDsKK+mZjei7iuWPoyA+IGtvdXNoYWd1Y2hpXCA7CivmpJzlh7rlmaggPiBrZW5zaHV0c3VraVwgOwor6JC96JGJ5p2+ID4gcmFrdXlvdXNob3VcIDsKK+alteWJjee3miA+IGt5b2t1emVuc2VuXCA7CivotoXotorngrkgPiBjaG91ZXRzdXRlblwgOwor6buS54yp44CFID4ga3Vyb3Nob3Vqb3VcIDsKK+WbveaFtuevgCA+IGtva2tlaXNldHN1XCA7CivlpKnnlKPniakgPiB0ZW5zYW5idXRzdVwgOwor57Sz5aOr6YyyID4gc2hpbnNoaXJva3VcIDsKK+WGjeWFpeWbvSA+IHNhaW55dXVrb2t1XCA7CivnsKHmvZTmgKcgPiBrYW5rZXRzdXNlaVwgOwor5YiH5pat6Z2iID4gc2V0c3VkYW5tZW5cIDsKK+W8lei+vOe3miA+IGhpa2lrb21pc2VuXCA7Civnspflv73ogIUgPiBzb2tvdHN1bW9ub1wgOwor6ZaL5Lya5byPID4ga2Fpa2Fpc2hpa2lcIDsKK+aEn+WCt+eahCA+IGthbnNob3V0ZWtpXCA7CivluILmnInniakgPiBzaGl5dXVidXRzdVwgOwor6IGW6IG36ICFID4gc2Vpc2hva3VzaGFcIDsKK+S4reiho+WaoiA+IG5ha2FnYWt1c2hpXCA7Civni6znq4voqp4gPiBkb2t1cml0c3Vnb1wgOwor6IKy5YWQ5a6kID4gaWt1amlzaGl0c3VcIDsKK+e5geauluWcsCA+IGhhbnNob2t1Y2hpXCA7CivkuIDkurrnp7AgPiBpY2hpbmluc2hvdVwgOwor6ZW35bSO55yMID4gbmFnYXNha2lrZW5cIDsKK+mbu+WKm+ioiCA+IGRlbnJ5b2t1a2VpXCA7Civoo73msLfnmr8gPiBzZWloeW91emFyYVwgOwor5Li756iO5bGAID4gc2h1emVpa3lva3VcIDsKK+aOpee2muiqniA+IHNldHN1em9rdWdvXCA7Civnibnpm4blj7cgPiB0b2t1c2h1dWdvdVwgOwor6buS6KSQ6ImyID4ga29ra2Fzc2hva3VcIDsKK+S4reWbveS6uiA+IGNodXVnb2t1amluXCA7CivlvpPlsZ7lm70gPiBqdXV6b2t1a29rdVwgOwor5Y+j6L+U562UID4ga3VjaGloZW50b3VcIDsKK+a4m+ihsOeOhyA+IGdlbnN1aXJpdHN1XCA7CivlsI7pm7vnjocgPiBkb3VkZW5yaXRzdVwgOwor5LiA5LqG57ChID4gaWNoaXJ5b3VrYW5cIDsKK+WGjei8uOWHuiA+IHNhaXl1c2h1dHN1XCA7CivpnZLpioXoibIgPiBzZWlkb3VzaG9rdVwgOwor6ZqK5ZWG5a6/ID4gdGFpc2hvdXlhZG9cIDsKK+W8j+asoeesrCA+IHNoaWtpc2hpZGFpXCA7CivnlJ/nlKPniakgPiBzZWlzYW5idXRzdVwgOwor5bm76Kaa55eHID4gZ2Vua2FrdXNob3VcIDsKK+aKleaJi+WKmyA+IHRvdXNodXJ5b2t1XCA7CivplonkvJrlvI8gPiBoZWlrYWlzaGlraVwgOwor5rKW56mN5bGkID4gY2h1dXNla2lzb3VcIDsKK+WCrOecoOihkyA+IHNhaW1pbmp1dHN1XCA7CivonZnonaDlgpggPiBrb3Vtb3JpZ2FzYVwgOwor5ZCR5pel5oCnID4ga291bmljaGlzZWlcIDsKK+WQuOWPlue0mSA+IHN1aXRvcmlnYW1pXCA7CivmhoLprLHnl4cgPiB5dXV1dHN1c2hvdVwgOwor6auY5Zyn55qEID4ga291YXRzdXRla2lcIDsKK+acieWKm+iAhSA+IHl1dXJ5b2t1c2hhXCA7CivliKXllY/poYwgPiBiZXRzdW1vbmRhaVwgOwor5Luj5pWw5byPID4gZGFpc3V1c2hpa2lcIDsKK+WFpea4r+aWmSA+IG55dXVrb3VyeW91XCA7CivnhKHlrr/ogIUgPiBtdXNodWt1bW9ub1wgOwor5Y6f5a2Q5YqbID4gZ2Vuc2hpcnlva3VcIDsKK+aIkOaWh+W+iyA+IHNlaWJ1bnJpdHN1XCA7CivnlLfkuIDljLkgPiBvdG9rb2lwcGlraVwgOwor5aGe5qCT55eHID4gc29rdXNlbnNob3VcIDsKK+WVhuWjsuafhCA+IHNob3ViYWlnYXJhXCA7CivohbnotrPpoZ4gPiBmdWt1c29rdXJ1aVwgOwor5p2x5Y2w5bqmID4gaGlnYXNoaWluZG9cIDsKK+izh+acrOWKmyA+IHNoaWhvbnJ5b2t1XCA7CivnpYflnJLnpa0gPiBnaW9ubWF0c3VyaVwgOwor5LiK5Lqs5LitID4gam91a3lvdWNodXVcIDsKK+WCrOecoOiWrCA+IHNhaW1pbicneWFrdVwgOwor54++6LGh5a2mID4gZ2Vuc2hvdWdha3VcIDsKK+eni+a0peWztiA+IGFraXRzdXNoaW1hXCA7CivnvorlsI/lsYsgPiBoaXRzdWppZ295YVwgOwor6KOF6aO+5ZOBID4gc291c2hva3VoaW5cIDsKK+WNg+aXpeaJiyA+IHNlbicnbmljaGl0ZVwgOwor5qSN5rCR5ZywID4gc2hva3VtaW5jaGlcIDsKK+WkluWIhuazjCA+IGdhaWJ1bnBpdHN1XCA7CivpmqPov5HmiYAgPiB0b25hcmlraW5qb1wgOwor5a++6aCC6KeSID4gdGFpY2hvdWtha3VcIDsKK+iCqeeUsumqqCA+IGtlbmtvdWtvdHN1XCA7CivohbDlvIHlvZMgPiBrb3NoaWJlbnRvdVwgOwor5Y+j5ben6ICFID4ga3VjaGlnb3VzaGFcIDsKK+S4jeS4luWHuiA+IGZ1c2Vpc2h1dHN1XCA7CivlhYjml6Xku5ggPiBzYWtpaGlkenVrZVwgOwor6YCP6KaW5YqbID4gdG91c2hpcnlva3VcIDsKK+WJteioreiAhSA+IHNvdXNldHN1c2hhXCA7Civph5HprZrpiaIgPiBraW5neW9iYWNoaVwgOwor6KGS5a2m55qEID4gZ2VuZ2FrdXRla2lcIDsKK+mHkeefs+WtpiA+IGtpbnNla2lnYWt1XCA7Civph47oj5znlZEgPiB5YXNhaWJhdGFrZVwgOwor55u05oSf55qEID4gY2hva2thbnRla2lcIDsKK+WLleeJqeebuCA+IGRvdWJ1dHN1c291XCA7Civos4Pku5XkuosgPiBjaGluc2hpZ290b1wgOwor54m56Kix5Li7ID4gdG9ra3lvbnVzaGlcIDsKK+Wliee0jeeJqSA+IGhvdW5vdWJ1dHN1XCA7Civkv53ph4jkuK0gPiBob3NoYWt1Y2h1dVwgOwor6Z2S6JeN6ImyID4gc2VpcmFuc2hva3VcIDsKK+iEhei/q+iAhSA+IGt5b3VoYWt1c2hhXCA7Civli5XniannlYwgPiBkb3VidXRzdWthaVwgOwor6YCa6KGM5LiKID4gdHN1dWtvdWRvbWVcIDsKK+W8t+WlquiAhSA+IGdvdWRhdHN1c2hhXCA7CivohIXov6vnvaogPiBreW91aGFrdXphaVwgOwor5Zuj57WQ5qipID4gZGFua2V0c3VrZW5cIDsKK+e0hOWNiuW5tCA+IHlha3VoYW4nJ25lblwgOwor5oqV56Wo566xID4gdG91aHlvdWJha29cIDsKK+e0oOS6uuiKuCA+IHNoaXJvdXRvZ2VpXCA7CivnqY3mpbXmgKcgPiBzZWtreW9rdXNlaVwgOwor5qW15bqn5qiZID4ga3lva3V6YWh5b3VcIDsKK+Wvneato+aciCA+IG5lc2hvdWdhdHN1XCA7CivmtZrmuKvmqZ8gPiBzaHVuc2V0c3VraVwgOwor57+86Z2i56mNID4geW9rdW1lbnNla2lcIDsKK+e3j+ebrumMsiA+IHNvdW1va3Vyb2t1XCA7CivmoLjlj43lv5wgPiBrYWt1aGFuJydub3VcIDsKK+WItumFuOiWrCA+IHNlaXNhbicneWFrdVwgOwor6LaF5Lq655qEID4gY2hvdWppbnRla2lcIDsKK+esrOS4gOa1gSA+IGRhaWljaGlyeXV1XCA7CivotrPmi43lrZAgPiBhc2hpYnlvdXNoaVwgOwor5byx5p2Q5paZID4geW93YXphaXJ5b3VcIDsKK+aOpeinpue3miA+IHNlc3Nob2t1c2VuXCA7Civlvbnlipvlo6sgPiB5YWt1cmlraXNoaVwgOwor57Wx6L2E6ICFID4gdG91a2F0c3VzaGFcIDsKK+S7leS6i+S4rSA+IHNoaWdvdG9jaHV1XCA7CivlnJ/nmb7lp5MgPiBkb2J5YWt1c2hvdVwgOwor5paH5a2m6LOeID4gYnVuZ2FrdXNob3VcIDsKK+aLm+iri+WbvSA+IHNob3VzZWlrb2t1XCA7Civnt4/lj47lhaUgPiBzb3VzaHV1bnl1dVwgOwor5ris6YeP6Ii5ID4gc29rdXJ5b3VzZW5cIDsKK+WAn+WcsOaoqSA+IHNoYWt1Y2hpa2VuXCA7CivmspbnqY3kuJYgPiBjaHV1c2VraXNlaVwgOwor5Y+j6L+w5pu4ID4ga291anV0c3VzaG9cIDsKK+auieiBt+iAhSA+IGp1bnNob2t1c2hhXCA7Civnl4XomavlrrMgPiBieW91Y2h1dWdhaVwgOwor5oqA6KGT55qEID4gZ2lqdXRzdXRla2lcIDsKK+Wwj+iqrOWutiA+IHNob3VzZXRzdWthXCA7CivnibnntITlupcgPiB0b2t1eWFrdXRlblwgOwor5Lqk6YCa6YePID4ga291dHN1dXJ5b3VcIDsKK+mBk+ahiOWGhSA+IG1pY2hpYW4nJ25haVwgOwor6YGT5pmu6KuLID4gbWljaGlidXNoaW5cIDsKK+WlveiJsuiAhSA+IGtvdXNob2t1c2hhXCA7Civmtojoh63liaQgPiBzaG91c2h1dXphaVwgOwor54us5ZaE55qEID4gZG9rdXplbnRla2lcIDsKK+ino+WDj+WKmyA+IGthaXpvdXJ5b2t1XCA7CivmtbjpgI/lnKcgPiBzaGludG91YXRzdVwgOwor54ax6KGA5ryiID4gbmVra2V0c3VrYW5cIDsKK+Wyqeefs+WtpiA+IGdhbnNla2lnYWt1XCA7CivonJzmn5HnlZEgPiBtaWthbmJhdGFrZVwgOwor54OP5aSp54uXID4ga2FyYXN1dGVuZ3VcIDsKK+e0s+Wjq+eahCA+IHNoaW5zaGl0ZWtpXCA7CivnqpLmga/mrbsgPiBjaGlzc29rdXNoaVwgOwor5LiJ5aSn56+AID4gc2FuZGFpc2V0c3VcIDsKK+a0u+aWreWxpCA+IGthdHN1ZGFuc291XCA7Civnm67pvLvnq4sgPiBtZWhhbmFkYWNoaVwgOwor5ZGo5pyf5b6LID4gc2h1dWtpcml0c3VcIDsKK+mAgOe0heiJsiA+IHRhaWtvdXNob2t1XCA7Civmkq7lg4/nrqEgPiBzYXRzdXpvdWthblwgOwor6IW55YWr5YiGID4gaGFyYWhhY2hpYnVcIDsKK+mAsuWFpei3ryA+IHNoaW4nJ255dXVyb1wgOwor6IOM5pel5oCnID4gaGFpaml0c3VzZWlcIDsKK+mWk+Wlj+absiA+IGthbnNvdWt5b2t1XCA7CivmjIfljZflvbkgPiBzaGluYW4nJ3lha3VcIDsKK+iEhei/q+eKtiA+IGt5b3VoYWt1am91XCA7Civlip/lkI3lv4MgPiBrb3VteW91c2hpblwgOwor5Zue5pWZ5Zu9ID4ga2Fpa3lvdWtva3VcIDsKK+mqqOiGnOeCjiA+IGtvdHN1bWFrdWVuXCA7CivmsqLlurXmvKwgPiB0YWt1YW5kenVrZVwgOwor5qC55YiH6JmrID4gbmVraXJpbXVzaGlcIDsKK+mAgeaWmeWFsSA+IHNvdXJ5b3V0b21vXCA7CivlvLXmnKzkurogPiBjaG91aG9uJyduaW5cIDsKK+S5l+i7iuWPoyA+IGpvdXNoYWd1Y2hpXCA7CivkuIDml6Xot68gPiBpY2hpbmljaGlqaVwgOwor5Zyw6LOq5ZuzID4gY2hpc2hpdHN1enVcIDsKK+eri+aYjuaIpiA+IHJpdHN1bWVpc2VuXCA7Civmir3osaHoq5YgPiBjaHV1c2hvdXJvblwgOwor5LuV6Kiz6KGoID4gc2hpd2FrZWh5b3VcIDsKK+WbveeojuW6gSA+IGtva3V6ZWljaG91XCA7CivmgKfmgqroqqwgPiBzZWlha3VzZXRzdVwgOwor5oeQ6YO355eFID4ga2Fpa3lvdWJ5b3VcIDsKK+afkeapmOmhniA+IGthbmtpdHN1cnVpXCA7CivkuIDpn7Pnr4AgPiBpY2hpb25zZXRzdVwgOwor6IKp6IOb6aqoID4ga2Vua291a290c3VcIDsKK+iEseeCremFuCA+IGRhdHN1dGFuc2FuXCA7CivmlrDmioDooZMgPiBzaGluZ2lqdXRzdVwgOwor6YCG5o6i55+lID4gZ3lha3V0YW5jaGlcIDsKK+aLvuW+l+iAhSA+IHNodXV0b2t1c2hhXCA7Civlrp3nianmrr8gPiBob3Vtb3RzdWRlblwgOwor5Zar54WZ5bitID4ga2l0c3VlbnNla2lcIDsKK+WGt+ihgOa8oiA+IHJlaWtldHN1a2FuXCA7CivkuLvlipvoiaYgPiBzaHVyeW9rdWthblwgOwor6LuK5aSn5belID4ga3VydW1hZGFpa3VcIDsKK+mBjumjn+eXhyA+IGthc2hva3VzaG91XCA7Civlrr/lkb3oq5YgPiBzaHVrdW1laXJvblwgOwor5YWl6YeR56WoID4gbnl1dWtpbmh5b3VcIDsKK+iKseWxi+aVtyA+IGhhbmF5YXNoaWtpXCA7CivlhbHnmb3pq6ogPiB0b21vc2hpcmFnYVwgOwor5Y+j5bqn5L+CID4ga291emFrYWthcmlcIDsKK+eUn+WtmOeOhyA+IHNlaXpvbnJpdHN1XCA7CivnhormnKznnIwgPiBrdW1hbW90b2tlblwgOwor55u06Yqt5b2iID4gY2hva3VzZW5rZWlcIDsKK+WLleeJqeaApyA+IGRvdWJ1dHN1c2VpXCA7Civljp/niIbnl4cgPiBnZW5iYWt1c2hvdVwgOwor6Zu75YuV5byPID4gZGVuZG91c2hpa2lcIDsKK+eUn+eUo+WKmyA+IHNlaXNhbnJ5b2t1XCA7Civlia/niafluKsgPiBmdWt1Ym9rdXNoaVwgOwor6IGW6aSQ5byPID4gc2Vpc2Fuc2hpa2lcIDsKK+mAhumWouaVsCA+IGd5YWt1a2Fuc3V1XCA7CivkuIPkupTkuIkgPiBzaGljaGlnb3NhblwgOwor6aeQ55WZ6LuNID4gY2h1dXJ5dXVndW5cIDsKK+WUr+eJqeirliA+IHl1aWJ1dHN1cm9uXCA7Civml4XllYbkurogPiB0YWJpc2hvdW5pblwgOwor5oqA6KGT5paZID4gZ2lqdXRzdXJ5b3VcIDsKK+e3tOe/kuW4syA+IHJlbnNodXVjaG91XCA7CivpgKDnn7Ppq5ggPiB6b3Vrb2t1ZGFrYVwgOwor6LuN6ZqK5byPID4gZ3VudGFpc2hpa2lcIDsKK+e/u+ios+iAhSA+IGhvbicneWFrdXNoYVwgOwor5r2k55uu6bCvID4gdXJ1bWVpd2FzaGlcIDsKK+iMtuikkOiJsiA+IGNoYWthc3Nob2t1XCA7Civnorrlrp/luqYgPiBrYWt1aml0c3Vkb1wgOwor57eP5Yqb5oimID4gc291cnlva3VzZW5cIDsKK+WlveiJsua8oiA+IGtvdXNob2t1a2FuXCA7CivliJ3mipXnqL8gPiBoYXRzdXRvdWtvdVwgOwor5LiH5LiH5LiAID4gbWFubWFuJydpY2hpXCA7CivntLPlo6vmnI0gPiBzaGluc2hpZnVrdVwgOwor5LiA5LuV5LqLID4gaGl0b3NoaWdvdG9cIDsKK+WXheelnue1jCA+IGt5dXVzaGlua2VpXCA7CivntpnntprnmoQgPiBrZWl6b2t1dGVraVwgOwor5paH5a2m55qEID4gYnVuZ2FrdXRla2lcIDsKK+WFremHjeWUsSA+IHJva3VqdXVzaG91XCA7CivnjoTkurrnrYsgPiBrdXJvdXRvc3VqaVwgOwor5ZuD5a2Q5pa5ID4gaGF5YXNoaWthdGFcIDsKK+Wkp+S6uueJqSA+IGRhaWppbmJ1dHN1XCA7CivlkIzns7voibIgPiBkb3VrZWlzaG9rdVwgOwor57SF55m957KJID4gYmVuaW9zaGlyb2lcIDsKK+Wuo+iqk+W8jyA+IHNlbnNlaXNoaWtpXCA7CivkuK3lkoznhrEgPiBjaHV1d2FuZXRzdVwgOwor5raI6ICX55qEID4gc2hvdWtvdXRla2lcIDsKK+aUu+aSg+eahCA+IGtvdWdla2l0ZWtpXCA7Civln4volLXniakgPiBtYWl6b3VidXRzdVwgOwor5Ymv6Kqt5pysID4gZnVrdWRva3Vob25cIDsKK+m6nemmmem8oCA+IGpha291bmV6dW1pXCA7CivmnKjos4Plrr8gPiBraWNoaW4nJ3lhZG9cIDsKK+Wbm+inkuafsSA+IHNoaWtha3VjaHV1XCA7CivkuK3nqbrlo4EgPiBjaHV1a3V1a2FiZVwgOwor6ICD6Ki85a2mID4ga291c2hvdWdha3VcIDsKK+Wun+iovOeahCA+IGppc3Nob3V0ZWtpXCA7CivmlZHmuIjnrZYgPiBreXV1c2Fpc2FrdVwgOwor6LuN5Zu96Kq/ID4gZ3Vua29rdWNob3VcIDsKK+eZveidi+eXhSA+IGhha3Vyb3VieW91XCA7Civni4Lniqznl4UgPiBreW91a2VuYnlvdVwgOwor5rCR6KGG55qEID4gbWluc2h1dXRla2lcIDsKK+S4gOS4oeW5tCA+IGljaGlyeW91bmVuXCA7CivlpKfku4/mrr8gPiBkYWlidXRzdWRlblwgOwor5Yi56YKj55qEID4gc2V0c3VuYXRla2lcIDsKK+WLheS7u+WumCA+IGNob2t1bmlua2FuXCA7Civlj4zljYHnr4AgPiBzb3VqdXVzZXRzdVwgOwor5aW96Imy5pysID4ga291c2hva3Vib25cIDsKK+eqkuWMlueJqSA+IGNoaWtrYWJ1dHN1XCA7CivkuInop5Lnv7wgPiBzYW5rYWt1eW9rdVwgOwor5oiQ6ZW35qCqID4gc2VpY2hvdWthYnVcIDsKK+efs+adkOWVhiA+IHNla2l6YWlzaG91XCA7CivkvpvoqJfph5EgPiBreW91dGFrdWtpblwgOwor54yr6aGN5aSnID4gYnlvdWdha3VkYWlcIDsKK+WcsOaWueiJsiA+IGNoaWhvdXNob2t1XCA7CivnlJ/kuK3ntpkgPiBuYW1hY2h1dWtlaVwgOwor5ZC45Y+O5YmkID4ga3l1dXNodXV6YWlcIDsKK+W7uuiUveeOhyA+IGtlbnBlaXJpdHN1XCA7CivlrqLoprPnmoQgPiBreWFra2FudGVraVwgOwor5b6L576p6ICFID4gcmljaGlnaW1vbm9cIDsKK+S4i+e0muiBtyA+IGtha3l1dXNob2t1XCA7Civkv67po77oqp4gPiBzaHV1c2hva3Vnb1wgOwor5aSn6aOf5ryiID4gdGFpc2hva3VrYW5cIDsKK+WGt+eskeeahCA+IHJlaXNob3V0ZWtpXCA7CivmlK/ntabpoY0gPiBzaGlreXV1Z2FrdVwgOwor5LiN5Z2H6LOqID4gZnVraW5zaGl0c3VcIDsKK+S7o+ihqOeahCA+IGRhaWh5b3V0ZWtpXCA7CivlhaXpgZPpm7IgPiBueXV1ZG91Z3Vtb1wgOwor5YWx6YCa54K5ID4ga3lvdXRzdXV0ZW5cIDsKK+WFrOW+s+W/gyA+IGtvdXRva3VzaGluXCA7CivlvaLlvI/oq5YgPiBrZWlzaGlraXJvblwgOwor6YeR55Kw6aOfID4ga2lua2Fuc2hva3VcIDsKK+WHuuacreaJgCA+IHNodXNzYXRzdWpvXCA7CivljJfmpbXmtbcgPiBob2treW9rdWthaVwgOwor6KGM5a6Y5bqBID4gZ3lvdWthbmNob3VcIDsKK+S/nei6q+ihkyA+IGhvc2hpbmp1dHN1XCA7CivpkZHorZjnnLwgPiBrYW5zaGlraWdhblwgOwor5YyX5qW15rSLID4gaG9ra3lva3V5b3VcIDsKK+W9q+WIu+eVjCA+IGNob3Vrb2t1a2FpXCA7Civppqzpub/oqbEgPiBiYWthYmFuYXNoaVwgOwor54mp57SN56iOID4gYnV0c3Vub3V6ZWlcIDsKK+S4i+Wls+S4rSA+IHNoaW1vam9jaHV1XCA7CivlnLDkuIvlrqQgPiBjaGlrYXNoaXRzdVwgOwor6LK45pys5bGLID4ga2FzaGlob24nJ3lhXCA7Civpjb7kubPmtJ4gPiBzaG91bnl1dWRvdVwgOwor6IG35ZOh6YyyID4gc2hva3VpbnJva3VcIDsKK+air+WtkOmFkiA+IGhhc2hpZ296YWtlXCA7Civmu57lnKjlrqIgPiB0YWl6YWlreWFrdVwgOwor6JOE6Zu75rGgID4gY2hpa3VkZW5jaGlcIDsKK+ippuaOmOiAhSA+IHNoaWt1dHN1c2hhXCA7CivlpKflrablr64gPiBkYWlnYWt1cnlvdVwgOwor5aer5bCP5p2+ID4gaGltZWtvbWF0c3VcIDsKK+ecn+Wun+WRsyA+IHNoaW5qaXRzdW1pXCA7Civml4XlvbnogIUgPiB0YWJpeWFrdXNoYVwgOwor5Zu95rCR55qEID4ga29rdW1pbnRla2lcIDsKK+aIpuayoeiAhSA+IHNlbmJvdHN1c2hhXCA7CivmtYHooYznl4UgPiByeXV1a291YnlvdVwgOwor5b2r5Yi754mIID4gY2hvdWtva3ViYW5cIDsKK+WRqOaXi+alrSA+IHNodXVzZW5neW91XCA7Civlm6PmiYfomasgPiB1Y2hpd2FtdXNoaVwgOwor5Y+j5bCP6KiAID4ga3VjaGlrb2dvdG9cIDsKK+S7u+WRveW8jyA+IG5pbm1laXNoaWtpXCA7Civpm7vlipvlgrUgPiBkZW5yeW9rdXNhaVwgOwor5Yqb5YuV55qEID4gcmlraWRvdXRla2lcIDsKK+Wkj+W4veWtkCA+IG5hdHN1Ym91c2hpXCA7CivnnaHnnKDolqwgPiBzdWltaW4nJ3lha3VcIDsKK+WNuOebuOWgtCA+IG9yb3NoaXNvdWJhXCA7CivljbDliLfmpa0gPiBpbnNhdHN1Z3lvdVwgOwor5Lyd5bCO546HID4gZGVuZG91cml0c3VcIDsKK+ibuOWFpemBkyA+IHRha29ueXV1ZG91XCA7Civoq4foqbHlrqQgPiBkYW53YXNoaXRzdVwgOwor5a6J5pyI57WmID4geWFzdWdla2t5dXVcIDsKK+WMl+alteaYnyA+IGhva2t5b2t1c2VpXCA7CivlvqHpnIrku6MgPiBtaXRhbWFzaGlyb1wgOwor5ris6YeP5aOrID4gc29rdXJ5b3VzaGlcIDsKK+WHuumhmOaZgiA+IHNodXRzdWdhbmppXCA7CivkuInop5LnkLQgPiBzYW5rYWt1Z290b1wgOwor6YmE5p2h57ayID4gdGV0c3Vqb3Vtb3VcIDsKK+e/u+ios+aoqSA+IGhvbicneWFrdWtlblwgOwor546J5p2T5a2QID4gdGFtYWpha3VzaGlcIDsKK+W3pealreWbvSA+IGtvdWd5b3Vrb2t1XCA7Civlkajml4vmlpkgPiBzaHV1c2VucnlvdVwgOwor6L+95pKD5oimID4gdHN1aWdla2lzZW5cIDsKK+WCt+eXheWFtSA+IHNob3VieW91aGVpXCA7CivlvbzlsrjmoZwgPiBoaWdhbnpha3VyYVwgOwor5LiA5pmC5omVID4gaWNoaWppYmFyYWlcIDsKK+WGheWuueeJqSA+IG5haXlvdWJ1dHN1XCA7CivnhKHkuIDniakgPiBtdWljaGltb3RzdVwgOwor5Yq05YON5YqbID4gcm91ZG91cnlva3VcIDsKK+iLpeerueS6rSA+IHdha2F0YWtldGVpXCA7Civnv7voqLPmm7ggPiBob24nJ3lha3VzaG9cIDsKK+WIsOedgOmnhSA+IHRvdWNoYWt1ZWtpXCA7CivlsJHlm73msJEgPiBzaG91a29rdW1pblwgOwor55Sf5a2m5ZWPID4gbmFtYWdha3Vtb25cIDsKK+S7iuaciOWIhiA+IGtvbmdldHN1YnVuXCA7CivliIbmlbDlvI8gPiBidW5zdXVzaGlraVwgOwor5o6I6LOe5byPID4ganVzaG91c2hpa2lcIDsKK+aOjOS4reacrCA+IHNob3VjaHV1Ym9uXCA7CivnnIHlipvljJYgPiBzaG91cnlva3VrYVwgOwor5Luj6KGo5qC8ID4gZGFpaHlvdWtha3VcIDsKK+aYvOiIiOihjCA+IGhpcnVrb3VneW91XCA7Civpu5nnpLrpjLIgPiBtb2t1c2hpcm9rdVwgOwor5qSc5a+f5a6YID4ga2Vuc2F0c3VrYW5cIDsKK+S+m+iol+iAhSA+IGt5b3V0YWt1c2hhXCA7CivmtbfnlKPniakgPiBrYWlzYW5idXRzdVwgOwor6KSq57SF6ImyID4gdGFpa291c2hva3VcIDsKK+i/lOS/oeeUqCA+IGhlbnNoaW4nJ3lvdVwgOwor6YGB6LWw5puyID4gdG9uc291a3lva3VcIDsKK+i+u+W8t+eblyA+IHRzdWppZ291dG91XCA7CivlhazlvI/miKYgPiBrb3VzaGlraXNlblwgOwor6YeR55Kw6J2VID4ga2lua2Fuc2hva3VcIDsKK+mdtOS4gOi2syA+IGt1dHN1aXNzb2t1XCA7CivmtaroirHnr4AgPiBuYW5pd2FidXNoaVwgOwor5ZCE5aSn5a2mID4ga2FrdWRhaWdha3VcIDsKK+e3j+mAgOWNtCA+IHNvdXRhaWt5YWt1XCA7Civlm73msJHmnI0gPiBrb2t1bWluZnVrdVwgOwor5a6f5Zyo6KuWID4gaml0c3V6YWlyb25cIDsKK+aVkeaApei7iiA+IGt5dXVreXV1c2hhXCA7CivplpPmjqXnqI4gPiBrYW5zZXRzdXplaVwgOwor5Lmx6ZaL55m6ID4gcmFua2FpaGF0c3VcIDsKK+aJgOW4r+S4uyA+IHNob3RhaW51c2hpXCA7CivpmLLlr5LpnbQgPiBib3VrYW5ndXRzdVwgOwor5LiJ6KeS5p+xID4gc2Fua2FrdWNodXVcIDsKK+S7leios+W4syA+IHNoaXdha2VjaG91XCA7CivnspjnnYDmgKcgPiBuZW5jaGFrdXNlaVwgOwor5a+G6YCg6YWSID4gbWl0c3V6b3VzaHVcIDsKK+S4gOWknOa8rCA+IGljaGl5YWR6dWtlXCA7Civmlpzop5Lmn7EgPiBzaGFrYWt1Y2h1dVwgOwor5a++54Wn55qEID4gdGFpc2hvdXRla2lcIDsKK+W9ueS6uumiqCA+IHlha3VuaW5rYXplXCA7CivoiLnoiLbmpa0gPiBzZW5wYWt1Z3lvdVwgOwor5rC06YGT5bGAID4gc3VpZG91a3lva3VcIDsKK+Wni+eZuumnhSA+IHNoaWhhdHN1ZWtpXCA7CivljJfmpbXlnI8gPiBob2treW9rdWtlblwgOwor5pel55So5ZOBID4gbmljaGl5b3VoaW5cIDsKK+WPjemAhuiAhSA+IGhhbmd5YWt1c2hhXCA7CivnmbvpjLLmuIggPiB0b3Vyb2t1enVtaVwgOwor5bCC5aOy5bGAID4gc2VuYmFpa3lva3VcIDsKK+aoqeWKm+iAhSA+IGtlbnJ5b2t1c2hhXCA7CivmgZLkuYXnmoQgPiBrb3VreXV1dGVraVwgOwor5Y+N6YCG572qID4gaGFuZ3lha3V6YWlcIDsKK+eJueetieW4rSA+IHRva3V0b3VzZWtpXCA7CivlhoXmnI3olqwgPiBuYWlmdWt1eWFrdVwgOwor6IeG55eF6aKoID4gb2t1YnlvdWthemVcIDsKK+S+m+e1puiAhSA+IGt5b3VreXV1c2hhXCA7CivlvavliLvluKsgPiBjaG91a29rdXNoaVwgOwor5rGC5Lq66ZujID4ga3l1dWppbicnbmFuXCA7CivpoJrli5XohIggPiBrZWlkb3VteWFrdVwgOwor6Kmm5o6Y5qipID4gc2hpa3V0c3VrZW5cIDsKK+WcqOS6rOS4rSA+IHphaWt5b3VjaHV1XCA7CivmlrnnqIvlvI8gPiBob3V0ZWlzaGlraVwgOwor6Z2Z5Yqb5a2mID4gc2VpcmlraWdha3VcIDsKK+S4gOimp+ihqCA+IGljaGlyYW5oeW91XCA7CivljJfmnJ3prq4gPiBraXRhY2hvdXNlblwgOwor55m+5Y2D6bOlID4gbW9tb2NoaWRvcmlcIDsKK+mKg+WJo+ihkyA+IGp1dWtlbmp1dHN1XCA7CivntI3pqqjloIIgPiBub3Vrb3RzdWRvdVwgOwor6ICz5bCP6aqoID4gamlzaG91a290c3VcIDsKK+Wkp+mdmeiEiCA+IGRhaWpvdW15YWt1XCA7CivntYzmuIjlipsgPiBrZWl6YWlyeW9rdVwgOwor5a2m5Y2U5LyaID4gZ2FrdWt5b3VrYWlcIDsKK+S4reW/g+eCuSA+IGNodXVzaGludGVuXCA7CivljJfmpbXlhYkgPiBob2treW9rdWtvdVwgOwor6aOf5ZOB5bqXID4gc2hva3VoaW50ZW5cIDsKK+mgmOWPjuabuCA+IHJ5b3VzaHV1c2hvXCA7CivpgJrnn6XooaggPiB0c3V1Y2hpaHlvdVwgOwor6YCj55m66YqDID4gcmVucGF0c3VqdXVcIDsKK+aUu+aSg+WBtCA+IGtvdWdla2lnYXdhXCA7CivlpKfkuK3lsI8gPiBkYWljaHV1c2hvdVwgOwor5bmz5Z2H5b6LID4gaGVpa2lucml0c3VcIDsKK+i1pOajn+ibhyA+IHlhbWFrYWdhc2hpXCA7CivoprPlv7XnmoQgPiBrYW4nJ25lbnRla2lcIDsKK+WwgumWgOiBtyA+IHNlbm1vbnNob2t1XCA7CivlhbHpgLLkvJogPiBreW91c2hpbmthaVwgOwor5L+h55So54q2ID4gc2hpbicneW91am91XCA7CivnuZTnianmpa0gPiBvcmltb25vZ3lvdVwgOwor6LaF54m55oClID4gY2hvdXRva2t5dXVcIDsKK+i/lOS/oeaWmSA+IGhlbnNoaW5yeW91XCA7Civlo4HmlrDogZ4gPiBrYWJlc2hpbmJ1blwgOwor6J6N6Kej54axID4geXV1a2FpbmV0c3VcIDsKK+evgOWNmuWjqyA+IGZ1c2hpaGFrYXNlXCA7CivopovniankurogPiBrZW5idXRzdW5pblwgOwor55m76Yyy5paZID4gdG91cm9rdXJ5b3VcIDsKK+WRqOaXi+S6uiA+IHNodXVzZW4nJ25pblwgOwor6auY6bqX6IqdID4ga291cmFpc2hpYmFcIDsKK+S4jeimquWIhyA+IGZ1c2hpbnNldHN1XCA7CivopqrlkYrnvaogPiBzaGlua29rdXphaVwgOwor6JSm57SF6JGJID4gdHN1dGFtb21pamlcIDsKK+S6lOebrumuqCA+IGdvbW9rdXp1c2hpXCA7Civnt6jpm4bplbcgPiBoZW5zaHV1Y2hvdVwgOwor5Ye654mI5qWtID4gc2h1cHBhbmd5b3VcIDsKK+iqv+aVmeW4qyA+IGNob3VreW91c2hpXCA7CivpgLLpp5Dou40gPiBzaGluY2h1dWd1blwgOwor5Yil5YuV6ZqKID4gYmV0c3Vkb3V0YWlcIDsKK+mAhuWZtOWwhCA+IGd5YWt1ZnVuc2hhXCA7Civkuozlj6Pnm64gPiBmdXRha3VjaGltZVwgOwor6YCG5ZG96aGMID4gZ3lha3VtZWlkYWlcIDsKK+eymOedgOWJpCA+IG5lbmNoYWt1emFpXCA7CivnlJ/niannlYwgPiBzZWlidXRzdWthaVwgOwor5LqU55uu6aOvID4gZ29tb2t1bWVzaGlcIDsKK+aOoeaOmOaoqSA+IHNhaWt1dHN1a2VuXCA7CivlhajluYXnmoQgPiB6ZW5wdWt1dGVraVwgOwor5b2r5Yi75YiAID4gY2hvdWtva3V0b3VcIDsKK+eglOeptuW/gyA+IGtlbmt5dXVzaGluXCA7Civni6zljaDnmoQgPiBkb2t1c2VudGVraVwgOwor6YW45Lit5q+SID4gc2FuY2h1dWRva3VcIDsKK+i2heaWsOaYnyA+IGNob3VzaGluc2VpXCA7CivpoILmiLTniakgPiBjaG91ZGFpbW9ub1wgOwor5a6/5rOK5omAID4gc2h1a3VoYWt1am9cIDsKK+WjsuWNtOebiiA+IGJhaWt5YWt1ZWtpXCA7Civmp4vpgKDlvI8gPiBrb3V6b3VzaGlraVwgOwor5Luj6KGo5L2cID4gZGFpaHlvdXNha3VcIDsKK+mBjuWkseeKryA+IGthc2hpdHN1aGFuXCA7CivntJnkuIDmnpogPiBrYW1paWNoaW1haVwgOwor5YaN6KqN6K2YID4gc2Fpbmluc2hpa2lcIDsKK+miqOeJqeipqSA+IGZ1dWJ1dHN1c2hpXCA7Civlrp/plqLmlbAgPiBqaXRzdWthbnN1dVwgOwor5aSn5aW954mpID4gZGFpa291YnV0c3VcIDsKK+S5s+a/gea2siA+IG55dXVkYWt1ZWtpXCA7CivmsLTlhrflvI8gPiBzdWlyZWlzaGlraVwgOwor5b+D6YWN5oCnID4gc2hpbnBhaXNob3VcIDsKK+W+jOWni+acqyA+IGF0b3NoaW1hdHN1XCA7Civlhajli6LlipsgPiB6ZW5zZWlyeW9rdVwgOwor6Zui5b+D546HID4gcmlzaGlucml0c3VcIDsKK+S+m+e1pua6kCA+IGt5b3VreXV1Z2VuXCA7CivlpKfmlofnr4AgPiBkYWlidW5zZXRzdVwgOwor5LiA5aSc5aa7ID4gaGl0b3lvZHp1bWFcIDsKK+e1kOWQiOWtkCA+IGtldHN1Z291c2hpXCA7CivmrbvkuqHnjocgPiBzaGlib3VyaXRzdVwgOwor5pmC5bGA5p+EID4gamlreW9rdWdhcmFcIDsKK+mFjeW9k+eOhyA+IGhhaXRvdXJpdHN1XCA7CivmlbTpqqjluKsgPiBzZWlrb3RzdXNoaVwgOwor6Zai56iO546HID4ga2FuemVpcml0c3VcIDsKK+S4reavkuatuyA+IGNodXVkb2t1c2hpXCA7CivmnIDliY3liJcgPiBzYWl6ZW5yZXRzdVwgOwor5b6h5omA6LuKID4gZ29zaG9ndXJ1bWFcIDsKK+WGheabsueQgyA+IG5haWt5b2treXV1XCA7Civop6PmlaPoqqwgPiBrYWlzYW5zZXRzdVwgOwor5bu66YCg54mpID4ga2Vuem91YnV0c3VcIDsKK+eMruihgOi7iiA+IGtlbmtldHN1c2hhXCA7CivlsI/lk4Hpm4YgPiBzaG91aGluc2h1dVwgOwor6ZyK5a6J5a6kID4gcmVpYW5zaGl0c3VcIDsKK+mbouedgOmZuCA+IHJpY2hha3VyaWt1XCA7Civpq5jph47ogZYgPiBrb3V5YWhpamlyaVwgOwor5pW06auq5YmkID4gc2VpaGF0c3V6YWlcIDsKK+WHpuS4luihkyA+IHNob3NlaWp1dHN1XCA7CivlhavluaHlrq4gPiBoYWNoaW1hbmd1dVwgOwor5q2M5ZSx5YqbID4ga2FzaG91cnlva3VcIDsKK+WbnuaKmOaQjSA+IGthaXNldHN1c29uXCA7Civpqqjku5XkuosgPiBob25lc2hpZ290b1wgOwor6IeG55eF6ICFID4gb2t1YnlvdW1vbm9cIDsKK+acnemjr+WJjSA+IGFzYW1lc2hpbWFlXCA7CivliIrooYzniakgPiBrYW5rb3VidXRzdVwgOwor55y86Y+h5qmLID4gbWVnYW5lYmFzaGlcIDsKK+izvOWFpeWFiCA+IGtvdW55dXVzYWtpXCA7CivlvJjku4HmoLwgPiBrb3VuaW5reWFrdVwgOwor5pen5aSn6Zm4ID4ga3l1dXRhaXJpa3VcIDsKK+iouuWvn+aXpSA+IHNoaW5zYXRzdWJpXCA7CivmnbHlrq7ogbcgPiB0b3VndXVzaG9rdVwgOwor6K2m5a+f572yID4ga2Vpc2F0c3VzaG9cIDsKK+WGl+irh+WPoyA+IGpvdWRhbmd1Y2hpXCA7CivnuZTnianllYYgPiBvcmltb25vc2hvdVwgOwor5YWr6L665b2iID4gaGFjaGloZW5rZWlcIDsKK+mHneS7leS6iyA+IGhhcmlzaGlnb3RvXCA7Civlpb3kurrniakgPiBrb3VqaW5idXRzdVwgOwor5b6B5pyN5qyyID4gc2VpZnVrdXlva3VcIDsKK+ino+iqrOiAhSA+IGthaXNldHN1c2hhXCA7CivluoPlkYrmpa0gPiBrb3Vrb2t1Z3lvdVwgOwor5Ym156uL6ICFID4gc291cml0c3VzaGFcIDsKK+ino+eGseiWrCA+IGdlbmV0c3V5YWt1XCA7Civml6Xmm5zniYggPiBuaWNoaXlvdWJhblwgOwor5paw5b+r6YCfID4gc2hpbmthaXNva3VcIDsKK+S4reW5tOiAhSA+IGNodXVuZW5tb25vXCA7CivmiLTlhqDlvI8gPiB0YWlrYW5zaGlraVwgOwor6Lu95qWt5birID4ga2FydXdhemFzaGlcIDsKK+S4reW/g+WcsCA+IGNodXVzaGluY2hpXCA7CivllYbmhaPnv5IgPiBzaG91a2Fuc2h1dVwgOwor55Sf54mp5oimID4gc2VpYnV0c3VzZW5cIDsKK+aVkeaApeazlSA+IGt5dXVreXV1aG91XCA7Civpo5/liY3phZIgPiBzaG9rdXplbnNodVwgOwor5rex5aSc5pePID4gc2hpbicneWF6b2t1XCA7Civov6vmkoPnoLIgPiBoYWt1Z2VraWhvdVwgOwor6YCy6LuN5LitID4gc2hpbmd1bmNodXVcIDsKK+WqkumFjOS6uiA+IGJhaXNoYWt1bmluXCA7CivkuKHmgKfnmoQgPiByeW91c2VpdGVraVwgOwor5r2c5Yui5YqbID4gc2Vuc2Vpcnlva3VcIDsKK+atpumqqOiAhSA+IGJ1a290c3Vtb25vXCA7Civkv53lgaXlrqQgPiBob2tlbnNoaXRzdVwgOwor5bqD5ZGK5paZID4ga291a29rdXJ5b3VcIDsKK+mAn+WKm+W6piA+IHNva3VyeW9rdWRvXCA7Civnm4bmj5Dnga8gPiBib25kam91Y2hpblwgOwor6IG056We57WMID4gY2hvdXNoaW5rZWlcIDsKK+i2heWkp+WbvSA+IGNob3V0YWlrb2t1XCA7Civlh7rniYjlhYMgPiBzaHVwcGFubW90b1wgOwor6aas6bm/5YqbID4gYmFrYWRqaWthcmFcIDsKK+mZuOWNiueQgyA+IHJpa3VoYW5reXV1XCA7CivntbHnjofogIUgPiB0b3Vzb3RzdXNoYVwgOwor5YWs5YWx5b+DID4ga291a3lvdXNoaW5cIDsKK+S4reWFsei7jSA+IGNodXVreW91Z3VuXCA7CivmvILnmb3liaQgPiBoeW91aGFrdXphaVwgOwor5Y+O5YWl5rqQID4gc2h1dW55dXVnZW5cIDsKK+auv+anmOmiqCA+IHRvbm9zYW1hZnV1XCA7Civlv4PphY3kuosgPiBzaGlucGFpZ290b1wgOwor5aSq6Zm954axID4gdGFpeW91bmV0c3VcIDsKK+WIpOaxuuaWhyA+IGhhbmtldHN1YnVuXCA7Civkv6Hku7DnmoQgPiBzaGlua291dGVraVwgOwor6Iad5ouN5a2QID4gaGl6YWJ5b3VzaGlcIDsKK+i3oeWni+acqyA+IGF0b3NoaW1hdHN1XCA7Civnm7Lnm67nmoQgPiBtb3Vtb2t1dGVraVwgOwor56We6YCa5YqbID4gamludHN1dXJpa2lcIDsKK+aBkOWmu+eXhSA+IGt5b3VzYWlieW91XCA7Civlv6Dlrp/luqYgPiBjaHV1aml0c3Vkb1wgOwor5L+h5Lu754q2ID4gc2hpbicnbmluam91XCA7CivmlrDlj4LogIUgPiBzaGluemFubW9ub1wgOwor55yf54qv5Lq6ID4gc2hpbmhhbicnbmluXCA7Civorablr5/niqwgPiBrZWlzYXRzdWtlblwgOwor5Y+i5pmC6ZuoID4gbXVyYXNoaWd1cmVcIDsKK+a1t+mjn+a0niA+IGthaXNob2t1ZG91XCA7Civlj4LliJfogIUgPiBzYW5yZXRzdXNoYVwgOwor55Sf54mp5ZyPID4gc2VpYnV0c3VrZW5cIDsKK+S+m+e1puWcsCA+IGt5b3VreXV1Y2hpXCA7CivlubLmuInnuJ4gPiBrYW5zaG91amltYVwgOwor54us5Ym155qEID4gZG9rdXNvdXRla2lcIDsKK+afk+iJsuS9kyA+IHNlbnNob2t1dGFpXCA7CivluqfpoK3pr6ggPiB6YXRvdWt1amlyYVwgOwor55uu55qE6KuWID4gbW9rdXRla2lyb25cIDsKK+ecgeeVpeaZgiA+IHNob3VyeWFrdWppXCA7Civnn7Pngq3mrrsgPiBzZWtpdGFuZ2FyYVwgOwor5YiG6KOC5oCnID4gYnVucmV0c3VzZWlcIDsKK+efree4ruW9oiA+IHRhbnNodWt1a2VpXCA7CivmnInogbfogIUgPiB5dXVzaG9rdXNoYVwgOwor6Kaq5ZKM5YqbID4gc2hpbndhcnlva3VcIDsKK+WFiOOAheaciCA+IHNlbnNlbmdldHN1XCA7CivmnInkvZPniakgPiB5dXV0YWlidXRzdVwgOwor55+t57Wh55qEID4gdGFucmFrdXRla2lcIDsKK+mtheWKm+eahCA+IG1pcnlva3V0ZWtpXCA7CivljJblrablvI8gPiBrYWdha3VzaGlraVwgOwor5aSq6Zm95pelID4gdGFpeW91aml0c3VcIDsKK+mHjueQg+eGsSA+IHlha3l1dW5ldHN1XCA7Civorablr5/mqKkgPiBrZWlzYXRzdWtlblwgOwor54ax5rCX55CDID4gbmV0c3VraWt5dXVcIDsKK+epuuaDs+WKmyA+IGt1dXNvdXJ5b2t1XCA7CivpnZnlsqHnnIwgPiBzaGl6dW9rYWtlblwgOwor5Y+N6YCG5Lq6ID4gaGFuZ3lha3VuaW5cIDsKK+afk+mrquWJpCA+IHNlbnBhdHN1emFpXCA7Civlhajouqvnl4UgPiB6ZW5zaGluYnlvdVwgOwor6IW56Kmx6KGTID4gZnVrdXdhanV0c3VcIDsKK+a1gemHj+ioiCA+IHJ5dXVyeW91a2VpXCA7Civnt5rnuZTpnaIgPiBzZW5zaGlraW1lblwgOwor5a6M57WQ57eoID4ga2Fua2V0c3VoZW5cIDsKK+WtpueUn+iovCA+IGdha3VzZWlzaG91XCA7CivpgKDluaPlsYAgPiB6b3VoZWlreW9rdVwgOwor6Kqs5piO5pu4ID4gc2V0c3VtZWlzaG9cIDsKK+iHque1pueOhyA+IGppa3l1dXJpdHN1XCA7CivmiZPnianluKsgPiB1Y2hpbW9ub3NoaVwgOwor5oOo5q666ICFID4gemFuc2F0c3VzaGFcIDsKK+ejr+W3vuedgCA+IGlzb2dpbmNoYWt1XCA7CivoqLzkurrluK0gPiBzaG91bmluc2VraVwgOwor6Iul55m96auqID4gd2FrYXNoaXJhZ2FcIDsKK+aVsOWtpueahCA+IHN1dWdha3V0ZWtpXCA7Civnm7Tlhobmn7EgPiBjaG9rdWVuY2h1dVwgOwor6Kqs5piO5paHID4gc2V0c3VtZWlidW5cIDsKK+awtOeUo+eJqSA+IHN1aXNhbmJ1dHN1XCA7CivmlZnliYfmnKwgPiBreW91c29rdWJvblwgOwor5LmZ5aWz5b+DID4gb3RvbWVnb2tvcm9cIDsKK+aIpuWLneWbvSA+IHNlbnNob3Vrb2t1XCA7CivljZfljJfmnJ0gPiBuYW5ib2t1Y2hvdVwgOwor5bm75oOz5puyID4gZ2Vuc291a3lva3VcIDsKK+aXheiIiOihjCA+IHRhYmlrb3VneW91XCA7CivosYbpm7vnkIMgPiBtYW1lZGVua3l1dVwgOwor6Kej6Kqs5pu4ID4ga2Fpc2V0c3VzaG9cIDsKK+e/vOaJi+ebriA+IHlva3VzaHVtb2t1XCA7CivlqZrntITogIUgPiBrb24nJ3lha3VzaGFcIDsKK+mDoeW9ueaJgCA+IGd1bicneWFrdXNob1wgOwor55+l6K2Y5bGkID4gY2hpc2hpa2lzb3VcIDsKK+aSnuacqOmuqyA+IHNodW1va3V6YW1lXCA7CivnobzphbjmnKsgPiBob3VzYW5tYXRzdVwgOwor5aaW6KGT6ICFID4geW91anV0c3VzaGFcIDsKK+S9meeZvemggSA+IHlvaGFrdXBlZWppXCA7CivntbHkuIDnmoQgPiB0b3VpdHN1dGVraVwgOwor6Lqr6Zqc6ICFID4gc2hpbnNob3VzaGFcIDsKK+mjn+WNk+WhqSA+IHNob2t1dGFrdWVuXCA7CivlhavlrZfpq60gPiBoYWNoaWppaGlnZVwgOwor5b6p5rS756WtID4gZnVra2F0c3VzYWlcIDsKK+S4u+eUo+eJqSA+IHNodXNhbmJ1dHN1XCA7Civnvo7ooZPnmoQgPiBiaWp1dHN1dGVraVwgOwor54+N54++6LGhID4gY2hpbmdlbnNob3VcIDsKK+S4ieeonOmPoSA+IHNhbnJ5b3VreW91XCA7CivlpKfpmbjmo5ogPiB0YWlyaWt1ZGFuYVwgOwor5q6/5qeY6Iq4ID4gdG9ub3NhbWFnZWlcIDsKK+a1t+mjn+W0liA+IGthaXNob2t1Z2FpXCA7CivlhYPnpoToopYgPiBnZW5yb2t1c29kZVwgOwor5paH5pWZ5pePID4gYnVua3lvdXpva3VcIDsKK+a5v+W6puioiCA+IHNoaXRzdWRva2VpXCA7Civlj6zpm4bogIUgPiBzaG91c2h1dXNoYVwgOwor5YWr5qW15ouzID4gaGFra3lva3VrZW5cIDsKK+S/oeS7sOW/gyA+IHNoaW5rb3VzaGluXCA7CivkurrkuIDlgI0gPiBoaXRvaWNoaWJhaVwgOwor5ZCI6KGG5Zu9ID4gZ2Fzc2h1dWtva3VcIDsKK+apn+mWouWupCA+IGtpa2Fuc2hpdHN1XCA7CivlhrfljbTmtrIgPiByZWlreWFrdWVraVwgOwor5ryB542y6auYID4gZ3lva2FrdWRha2FcIDsKK+WFrOeUqOeJqSA+IGtvdXlvdWJ1dHN1XCA7CivljZjnmbrpioMgPiB0YW5wYXRzdWp1dVwgOwor5Ya35Y205rC0ID4gcmVpa3lha3VzdWlcIDsKK+eMrueri+ihqCA+IGtvbmRhdGVoeW91XCA7Civoi6XojYnoibIgPiB3YWtha3VzYWlyb1wgOwor5LiJ5Zu95LiAID4gc2FuZ29rdWljaGlcIDsKK+edo+S/g+eKtiA+IHRva3Vzb2t1am91XCA7Civku67lj5flj5YgPiBrYXJpdWtldG9yaVwgOwor6KKL5bCP6LevID4gZnVrdXJva291amlcIDsKK+itpuWvn+WumCA+IGtlaXNhdHN1a2FuXCA7Civoh6rnhLblvosgPiBzaGl6ZW5yaXRzdVwgOwor6IG35YuZ57WmID4gc2hva3VtdWt5dXVcIDsKK+eZgumkiuS4rSA+IHJ5b3V5b3VjaHV1XCA7CivlkIjmiJDniakgPiBnb3VzZWlidXRzdVwgOwor5LiJ6KGM5Y2KID4gbWlrdWRhcmloYW5cIDsKK+ihjOaUv+WtpiA+IGd5b3VzZWlnYWt1XCA7Civlrp/ooYzlipsgPiBqaWtrb3VyeW9rdVwgOwor6ZW354Gr6YmiID4gbmFnYWhpYmFjaGlcIDsKK+a1t+mjn+WPsCA+IGthaXNob2t1ZGFpXCA7Civpg7Xkvr/niakgPiB5dXViaW5idXRzdVwgOwor56m65rCX5p6VID4ga3V1a2ltYWt1cmFcIDsKK+WlqOWtpumHkSA+IHNob3VnYWt1a2luXCA7CivlhaznlJ/mtLsgPiBrb3VzZWlrYXRzdVwgOwor6YGu6JS954mpID4gc2hhaGVpYnV0c3VcIDsKK+e1uee5lOeJqSA+IGtpbnVvcmltb25vXCA7CivoirjooZPoq5YgPiBnZWlqdXRzdXJvblwgOwor6Jas5Yq554mpID4geWFra291YnV0c3VcIDsKK+W6reS7leS6iyA+IG5pd2FzaGlnb3RvXCA7Civmgqros6rljJYgPiBha3VzaGl0c3VrYVwgOwor55+l6K2Y5Lq6ID4gY2hpc2hpa2lqaW5cIDsKK+eZveWGhemanCA+IGhha3VuYWlzaG91XCA7Civmpb3lpKnnmoQgPiByYWt1dGVudGVraVwgOwor5Yil5YuY5a6aID4gYmV0c3VrYW5qb3VcIDsKK+mHkeadk+WtkCA+IGthbmFqYWt1c2hpXCA7CivplbflpKfmga8gPiBjaG91dGFpc29rdVwgOwor6IG05Y+W5paZID4gY2hvdXNodXJ5b3VcIDsKK+mguOmdmeiEiCA+IGtlaWpvdW15YWt1XCA7CivmvIHnjbLph48gPiBneW9rYWt1cnlvdVwgOwor6Kqe5a2m5YqbID4gZ29nYWt1cnlva3VcIDsKK+a6luWCmeWupCA+IGp1bmJpc2hpdHN1XCA7CivkuK3lubTlopcgPiBjaHV1ZG9zaGltYVwgOwor6IOM562L5YqbID4gaGFpa2lucnlva3VcIDsKK+aJgOacieeJqSA+IHNob3l1dWJ1dHN1XCA7CivnlKPlnJ/npZ4gPiB1YnVzdW5hZ2FtaVwgOwor5pqX6LWk6ImyID4gYW5zZWtpc2hva3VcIDsKK+S7leeri+eJqSA+IHNoaXRhdGVtb25vXCA7CivkuIPlm57lv4wgPiBzaGljaGlrYWlraVwgOwor5rq26Kej54axID4geW91a2FpbmV0c3VcIDsKK+exs+WNgeeykiA+IGtvbWVqdXVyeXV1XCA7Civnibnms6jlk4EgPiB0b2t1Y2h1dWhpblwgOwor5Yil5YON6ZqKID4gYmV0c3Vkb3V0YWlcIDsKK+WPpOaWsOiBniA+IGZ1cnVzaGluYnVuXCA7CivphY3pgZTkurogPiBoYWl0YXRzdW5pblwgOwor5Lqs5Lq65b2iID4ga3lvdW5pbmd5b3VcIDsKK+WujOe1kOaWhyA+IGthbmtldHN1YnVuXCA7Civlj43lr77oibIgPiBoYW50YWlzaG9rdVwgOwor5ZWG5ZOB5a2mID4gc2hvdWhpbmdha3VcIDsKK+WFpeWwhOinkiA+IG55dXVzaGFrYWt1XCA7CivmtojpmLLluoEgPiBzaG91Ym91Y2hvdVwgOwor5aWH6bqX5omAID4ga2lyZWlkb2tvcm9cIDsKK+WxseWQueiJsiA+IHlhbWFidWtpaXJvXCA7CivmiZPmkoPnjocgPiBkYWdla2lyaXRzdVwgOwor6KuL5rGC6aGNID4gc2Vpa3l1dWdha3VcIDsKK+eZvuW5tOelrSA+IGh5YWt1bmVuc2FpXCA7CivmipHnlZnogIUgPiB5b2t1cnl1dXNoYVwgOwor6aOf6YCj5pifID4gc2hva3VyZW5zZWlcIDsKK+iQveacreWApCA+IHJha3VzYXRzdW5lXCA7Civoh6rnhLblipsgPiBzaGl6ZW5yeW9rdVwgOwor56eY5pu45a6kID4gaGlzaG9zaGl0c3VcIDsKK+WNg+eni+alvSA+IHNlbnNodXVyYWt1XCA7CivmjqLnqbblv4MgPiB0YW5reXV1c2hpblwgOwor5Ymv56S+6ZW3ID4gZnVrdXNoYWNob3VcIDsKK+aciOS+i+S8miA+IGdldHN1cmVpa2FpXCA7CivmlbDml6XplpMgPiBzdXVqaXRzdWthblwgOwor5ZG95ZCN5byPID4gbWVpbWVpc2hpa2lcIDsKK+aMh+WwjuWKmyA+IHNoaWRvdXJ5b2t1XCA7CivmhJ/opprnmoQgPiBrYW5rYWt1dGVraVwgOwor5YaN6ZaL55m6ID4gc2Fpa2FpaGF0c3VcIDsKK+WFpeWtpumboyA+IG55dXVnYWt1bmFuXCA7CivliIbmipjlraYgPiBidW5zZWtpZ2FrdVwgOwor6Iul6Lyp6ICFID4gamFrdWhhaW1vbm9cIDsKK+W5heWkieiqvyA+IGhhYmFoZW5jaG91XCA7CivlsI/mg5HmmJ8gPiBzaG91d2FrdXNlaVwgOwor5Lq654mp5YOPID4gamluYnV0c3V6b3VcIDsKK+i6gemsseeXhSA+IHNvdXV0c3VieW91XCA7Civnm7TovLjlhaUgPiBjaG9rdXl1bnl1dVwgOwor5L+D6YCy5YmkID4gc29rdXNoaW56YWlcIDsKK+m8u+WHuuihgCA+IGJpc2h1a2tldHN1XCA7CivmgKXpgLLlhZogPiBreXV1c2hpbnRvdVwgOwor6YeR5ama5byPID4ga2lua29uc2hpa2lcIDsKK+a6gOiJpumjviA+IG1hbmthbnNob2t1XCA7Civlgo3ov7fmg5EgPiBoYXRhbWVpd2FrdVwgOwor5pi86aOf5pmCID4gY2h1dXNob2t1amlcIDsKK+iKuOihk+elrSA+IGdlaWp1dHN1c2FpXCA7CivlrabnlJ/mnI0gPiBnYWt1c2VpZnVrdVwgOwor5bCx5qWt5ZywID4gc2h1dWd5b3VjaGlcIDsKK+ihqOekuueJqSA+IGh5b3VqaWJ1dHN1XCA7Civou6LlhaXnlJ8gPiB0ZW4nJ255dXVzZWlcIDsKK+WFpeWtpumHkSA+IG55dXVnYWt1a2luXCA7CivpnanmlrDns7sgPiBrYWt1c2hpbmtlaVwgOwor6Zm95qW157eaID4geW91a3lva3VzZW5cIDsKK+WHuua8lOiAhSA+IHNodXRzdWVuc2hhXCA7CivkvJrorbDlrqQgPiBrYWlnaXNoaXRzdVwgOwor6Zm46YGL5bGAID4gcmlrdXVua3lva3VcIDsKK+i/veW+tOmHkSA+IHRzdWljaG91a2luXCA7Civmrrroj4zlipsgPiBzYWtraW5yeW9rdVwgOwor5oqV5a6/6ICFID4gdG91c2h1a3VzaGFcIDsKK+aWsOW6geiIjiA+IHNoaW5jaG91c2hhXCA7CivlhrfljbTliaQgPiByZWlreWFrdXphaVwgOwor6YGK6Kan5a6iID4geXV1cmFua3lha3VcIDsKK+m7hOmHkeiZqyA+IGtvZ2FuZW11c2hpXCA7Civpu5Lmrbvnl4UgPiBrb2t1c2hpYnlvdVwgOwor6YO15L6/5bGAID4geXV1Ymlua3lva3VcIDsKK+WPjeWwhOeOhyA+IGhhbnNoYXJpdHN1XCA7CivmlZnnmofluoEgPiBreW91a291Y2hvdVwgOwor6Iul6bOl5Li8ID4gd2FrYWRvcmlkb25cIDsKK+e+juihk+WVhiA+IGJpanV0c3VzaG91XCA7Civmu7Tlrprph48gPiB0ZWtpdGVpcnlvdVwgOwor56We5a2m6ICFID4gc2hpbmdha3VzaGFcIDsKK+Wvhui8uOWFpSA+IG1pdHN1eXVueXV1XCA7CivouI/liIfnlaogPiBmdW1pa2lyaWJhblwgOwor5YmN5aWP5puyID4gemVuc291a3lva3VcIDsKK+ijuOS4gOiyqyA+IGhhZGFrYWlra2FuXCA7CivlpY/ps7Tmm7IgPiBzb3VtZWlreW9rdVwgOwor56eB55Sf5rS7ID4gc2hpc2Vpa2F0c3VcIDsKK+eUsumJhOiJpiA+IGtvdXRldHN1a2FuXCA7Civlv4Poh5Pnl4UgPiBzaGluem91YnlvdVwgOwor6Yys6YeR6KGTID4gcmVua2luanV0c3VcIDsKK+m7kuWGhemanCA+IGtva3VuYWlzaG91XCA7CivmnInorZjogIUgPiB5dXVzaGlraXNoYVwgOwor5bGx5rSl5rOiID4geWFtYXRzdW5hbWlcIDsKK+iiluePjeacrCA+IHNodXVjaGluYm9uXCA7CivlhYjnnYDpoIYgPiBzZW5jaGFrdWp1blwgOwor5a6f5ZCN6KmeID4gaml0c3VtZWlzaGlcIDsKK+mYsumjn+WJpCA+IGJvdXNob2t1emFpXCA7Civlr77np7Dou7ggPiB0YWlzaG91amlrdVwgOwor6L+R5pel54K5ID4ga2luaml0c3V0ZW5cIDsKK+iXjeaZtuefsyA+IHJhbnNob3VzZWtpXCA7CivlpbPlrZDkvpsgPiBvbicnbmFrb2RvbW9cIDsKK+ayoemjn+WtkCA+IG1vc3Nob2t1c2hpXCA7Civkv67nuZXkuK0gPiBzaHV1emVuY2h1dVwgOwor6ICz5a2m5ZWPID4gbWltaWdha3Vtb25cIDsKK+mVt+eykuexsyA+IGNob3VyeXV1bWFpXCA7CivnpZ7kv6Hlv4MgPiBrYW1pc2hpbmppblwgOwor5aWo5a2m55SfID4gc2hvdWdha3VzZWlcIDsKK+ims+WFteW8jyA+IGthbnBlaXNoaWtpXCA7Civoi6XlubTlnosgPiBqYWt1bmVuZ2F0YVwgOwor6byg5rW36LGaID4gbmV6dW1paXJ1a2FcIDsKK+mbhuepjeWgtCA+IHNodXVzZWtpam91XCA7CivmjIfkurrlvaIgPiB5dWJpbmluZ3lvdVwgOwor5puy6Iq45birID4ga3lva3VnZWlzaGlcIDsKK+m6pueykuiFqyA+IGJha3VyeXV1c2h1XCA7Civnm67nmoTlnLAgPiBtb2t1dGVraWNoaVwgOwor5a2m55Sf5a+uID4gZ2FrdXNlaXJ5b3VcIDsKK+WQiOaIkOWKmyA+IGdvdXNlaXJ5b2t1XCA7Civmj5DkvpvlgbQgPiB0ZWlreW91Z2F3YVwgOwor5LmX6ZmN5a6iID4gam91a291a3lha3VcIDsKK+WGheimqueOiyA+IG5haXNoaW4nJ25vdVwgOwor57Oe5YuJ5by3ID4ga3Vzb2Jlbmt5b3VcIDsKK+efoue2meaXqSA+IHlhdHN1Z2liYXlhXCA7CivlpInmm7LngrkgPiBoZW5reW9rdXRlblwgOwor6ZW35Zub6KeSID4gbmFnYXNoaWtha3VcIDsKK+imquWIh+awlyA+IHNoaW5zZXRzdWdpXCA7Civlia/npZ7ntYwgPiBmdWt1c2hpbmtlaVwgOwor6JGJ57eR5L2TID4geW91cnlva3V0YWlcIDsKK+iPiuS6uuW9oiA+IGtpa3VuaW5neW91XCA7CivnjqnlvITniakgPiBnYW5yb3VidXRzdVwgOwor5Y+j6KiA6JGJID4ga3VjaGlrb3RvYmFcIDsKK+mbhuWQiOeahCA+IHNodXVnb3V0ZWtpXCA7CivlibLlvZPpoY0gPiB3YXJpYXRlZ2FrdVwgOwor5bi457+S55qEID4gam91c2h1dXRla2lcIDsKK+aEn+Wcp+e0mSA+IGthbicnYXRzdXNoaVwgOwor57SF54y/5a2QID4gYmVuaW1hc2hpa29cIDsKK+W8vuaAp+eOhyA+IGRhbnNlaXJpdHN1XCA7Civmt6HntIXoibIgPiB0YW5rb3VzaG9rdVwgOwor5p+z6KGM5p2OID4geWFuYWdpZ291cmlcIDsKK+a1geWLleeahCA+IHJ5dXVkb3V0ZWtpXCA7CivnkrDlooPluoEgPiBrYW5reW91Y2hvdVwgOwor5piG6Jmr5a2mID4ga29uY2h1dWdha3VcIDsKK+W4uOaXpemggyA+IHRzdW5laGlnb3JvXCA7Civmr5Tnv7zloZogPiBoaXlva3VkenVrYVwgOwor5re35oiQ54mpID4ga29uc2VpYnV0c3VcIDsKK+a6tuino+WKmyA+IHlvdWthaXJ5b2t1XCA7CivmlZnogrLplbcgPiBreW91aWt1Y2hvdVwgOwor54S85Y2054KJID4gc2hvdWt5YWt1cm9cIDsKK+eZveaqgOayuSA+IGJ5YWt1ZGFuJyd5dVwgOwor54m95byV5YqbID4ga2VuJydpbnJ5b2t1XCA7CivoprPlhYnlsYAgPiBrYW5rb3VreW9rdVwgOwor5YWl5a2m6ICFID4gbnl1dWdha3VzaGFcIDsKK+WbveWtpuiAhSA+IGtva3VnYWt1c2hhXCA7CivmtLvli5XoqowgPiBrYXRzdWRvdXNoaVwgOwor5Ye65Zyf5ZOBID4gc2h1dHN1ZG9oaW5cIDsKK+e0meihqOe0mSA+IGthbWlieW91c2hpXCA7CivoprPlhYnlrqIgPiBrYW5rb3VreWFrdVwgOwor5YWx5a2m5Yi2ID4ga3lvdWdha3VzZWlcIDsKK+e+nuaBpeW/gyA+IHNodXVjaGlzaGluXCA7CivomavnnLzpj6EgPiBtdXNoaW1lZ2FuZVwgOwor6KiA6JGJ6LOqID4ga290b2JhamljaGlcIDsKK+WtpuiAheiGmiA+IGdha3VzaGFoYWRhXCA7CivpgJrkv6HntrIgPiB0c3V1c2hpbm1vdVwgOwor5pmu5Y+K546HID4gZnVreXV1cml0c3VcIDsKK+WNg+mzpei2syA+IGNoaWRvcmlhc2hpXCA7Civou6LovY3miYsgPiB0ZW50ZXRzdXNodVwgOwor6LO86LK35YqbID4ga291YmFpcnlva3VcIDsKK+WtpuiAheiCjCA+IGdha3VzaGFoYWRhXCA7CivlhaXos57ogIUgPiBueXV1c2hvdXNoYVwgOwor6Zm46LuN55yBID4gcmlrdWd1bnNob3VcIDsKK+S7ruWHuuaJgCA+IGthcmlzaHVzc2hvXCA7Civlj6TnianllYYgPiBrb2J1dHN1c2hvdVwgOwor6LGh5b606KmpID4gc2hvdWNob3VzaGlcIDsKK+S4i+WNlOitsCA+IHNoaXRha3lvdWdpXCA7Civlj6zpm4bku6QgPiBzaG91c2h1dXJlaVwgOwor54Wn5Lya5YWIID4gc2hvdWthaXNha2lcIDsKK+WghuepjeWtpiA+IHRhaXNla2lnYWt1XCA7Civoqq3op6PlipsgPiBkb2trYWlyeW9rdVwgOwor6IW457WQ5qC4ID4gY2hvdWtla2tha3VcIDsKK+W5tOaBsOWlvSA+IHRvc2hpa2Fra291XCA7CivpgJrnlKPnnIEgPiB0c3V1c2Fuc2hvdVwgOwor6YCa55Sj55u4ID4gdHN1dXNhbnNob3VcIDsKK+edo+WtpuWumCA+IHRva3VnYWt1a2FuXCA7Civmh5DkuK3niakgPiBrYWljaHV1bW9ub1wgOwor6YCa5L+h56S+ID4gdHN1dXNoaW5zaGFcIDsKK+WNg+efs+iIuSA+IHNlbmdva3VidW5lXCA7Civph5HniZvlrq4gPiBraW5neXV1a3l1dVwgOwor5o6l5ZCI5a2QID4gc2V0c3Vnb3VzaGlcIDsKK+eah+WupOiyuyA+IGtvdXNoaXRzdWhpXCA7Civov73lvrTnqI4gPiB0c3VpY2hvdXplaVwgOwor5bGA5aSW6ICFID4ga3lva3VnYWlzaGFcIDsKK+e/jOe/jOW5tCA+IHlva3V5b2t1bmVuXCA7CivnibnliKXmqZ8gPiB0b2t1YmV0c3VraVwgOwor5reh6KSQ6ImyID4gdGFua2Fzc2hva3VcIDsKK+WBj+Wft+eXhSA+IGhlbnNodXVieW91XCA7Civlrabnv5LogIUgPiBnYWt1c2h1dXNoYVwgOwor6Ziy6Z+z5a6kID4gYm91b25zaGl0c3VcIDsKK+iCieS9k+eahCA+IG5pa3V0YWl0ZWtpXCA7Civmlpnph5HooaggPiByeW91a2luaHlvdVwgOwor5YaF6Zm45Zu9ID4gbmFpcmlrdWtva3VcIDsKK+WMheWuueWKmyA+IGhvdXlvdXJ5b2t1XCA7Civlh7rmvIHmnJ8gPiBzaHV0c3VneW9raVwgOwor5Li75Lq65b25ID4gc2h1amluJyd5YWt1XCA7CivmiJDlip/njocgPiBzZWlrb3VyaXRzdVwgOwor5YWs5pyJ54mpID4ga291eXV1YnV0c3VcIDsKK+ims+iJpuW8jyA+IGthbmthbnNoaWtpXCA7CivmnIjlpJzojLggPiB0c3VraXlvdGFrZVwgOwor5YWl5a2m55SfID4gbnl1dWdha3VzZWlcIDsKK+aYjuW+jOaXpSA+IG15b3Vnb25pY2hpXCA7CivmtLvli5XogIUgPiBrYXRzdWRvdXNoYVwgOwor5LiJ5Y6f6ImyID4gc2FuZ2Vuc2hva3VcIDsKK+WBj+Wft+eLgiA+IGhlbnNodXVreW91XCA7Civokovku4vnn7MgPiBzaG91a2Fpc2VraVwgOwor55Sz5ZGK5pu4ID4gc2hpbmtva3VzaG9cIDsKK+e3qOesoOiMuCA+IGFtaWdhc2F0YWtlXCA7CivlsI/ljYrml6UgPiBrb2hhbicnbmljaGlcIDsKK+ihqOW9sOeKtiA+IGh5b3VzaG91am91XCA7CivlhoXoqLzkuosgPiBuYWlzaG91Z290b1wgOwor6Ki65pat5a2mID4gc2hpbmRhbmdha3VcIDsKK+WNl+alteeCuSA+IG5hbmt5b2t1dGVuXCA7Civmm7LlsITnoLIgPiBreW9rdXNoYWhvdVwgOwor5a++56ew55qEID4gdGFpc2hvdXRla2lcIDsKK+eUsumJhOadvyA+IGtvdXRldHN1YmFuXCA7CivlhYjnmbrpmoogPiBzZW5wYXRzdXRhaVwgOwor5oCn55Sf5rS7ID4gc2Vpc2Vpa2F0c3VcIDsKK+aknOmWsuWumCA+IGtlbicnZXRzdWthblwgOwor5rWB6YCa56iOID4gcnl1dXRzdXV6ZWlcIDsKK+a0l+a/r+eziiA+IHNlbnRha3Vub3JpXCA7CivljYrnm7Tnt5ogPiBoYW5jaG9rdXNlblwgOwor5rSX5r+v57GgID4gc2VudGFrdWthZ29cIDsKK+aOpeWQiOWJpCA+IHNldHN1Z291emFpXCA7CivovrLnlKPniakgPiBub3VzYW5idXRzdVwgOwor5o6l5Y+X5Zu9ID4gc2V0c3VqdWtva3VcIDsKK+WNl+altea1tyA+IG5hbmt5b2t1a2FpXCA7CivntZDohpzngo4gPiBrZXRzdW1ha3VlblwgOwor6Kaq552m5LyaID4gc2hpbmJva3VrYWlcIDsKK+ehq+WMlueJqSA+IHJ5dXVrYWJ1dHN1XCA7Civmg7Plg4/lipsgPiBzb3V6b3VyeW9rdVwgOwor6Iq46KGT5ZOBID4gZ2VpanV0c3VoaW5cIDsKK+WNl+altea0iyA+IG5hbmt5b2t1eW91XCA7Civlho3muKzph48gPiBzYWlzb2t1cnlvdVwgOwor6Zyy5Ye66KiIID4gcm9zaHV0c3VrZWlcIDsKK+eVmeWtpueUnyA+IHJ5dXVnYWt1c2VpXCA7CivmsLTku5XkuosgPiBtaXp1c2hpZ290b1wgOwor5a2m57+S55SoID4gZ2FrdXNodXV5b3VcIDsKK+azqOWwhOmHnSA+IGNodXVzaGFiYXJpXCA7CivoprPlr5/ogIUgPiBrYW5zYXRzdXNoYVwgOwor6YCa5L+h5qyEID4gdHN1dXNoaW5yYW5cIDsKK+S6lOaciOmXhyA+IHNhdHN1a2l5YW1pXCA7CivnmbrnnYDloLQgPiBoYXRjaGFrdWpvdVwgOwor6Ly45Ye656iOID4geXVzaHV0c3V6ZWlcIDsKK+WwseiBt+aZgiA+IHNodXVzaG9rdWppXCA7CivnnYDnnLzngrkgPiBjaGFrdWdhbnRlblwgOwor56m65Ya35byPID4ga3V1cmVpc2hpa2lcIDsKK+a6tuaOpeW3pSA+IHlvdXNldHN1a291XCA7CivkuLjmnKjmqYsgPiBtYXJ1a2liYXNoaVwgOwor5bGx5b2i55yMID4geWFtYWdhdGFrZW5cIDsKK+S6pOmciuihkyA+IGtvdXJlaWp1dHN1XCA7CivlibXpgKDoqqwgPiBzb3V6b3VzZXRzdVwgOwor5oub5b6F5bitID4gc2hvdXRhaXNla2lcIDsKK+mbquS4iui7iiA+IHNldHN1am91c2hhXCA7CivkuqTpn7/mpb0gPiBrb3VreW91Z2FrdVwgOwor6L6y5qWt5Zu9ID4gbm91Z3lvdWtva3VcIDsKK+WNk+i2iumiqCA+IHRha3VldHN1ZnV1XCA7Civpjq7nl5vmgKcgPiBjaGludHN1dXNlaVwgOwor6KqN6K2Y6KuWID4gbmluc2hpa2lyb25cIDsKK+WwseWvneWJjSA+IHNodXVzaGluemVuXCA7Civlj4zmm7Lnt5ogPiBzb3VreW9rdXNlblwgOwor5aSP5pmC5Yi7ID4gbmF0c3VqaWtva3VcIDsKK+Wkj+Wkp+aguSA+IG5hdHN1ZGFpa29uXCA7CivmnZHlhavliIYgPiBtdXJhaGFjaGlidVwgOwor5YKY5LyQ5p6XID4gc2FuYmF0c3VyaW5cIDsKK+W4uOioremkqCA+IGpvdXNldHN1a2FuXCA7CivljZfmpbXmmJ8gPiBuYW5reW9rdXNlaVwgOwor56We5a2m5aOrID4gc2hpbmdha3VzaGlcIDsKK+S4iuWRiuWvqSA+IGpvdWtva3VzaGluXCA7CivlhYjlhaXoprMgPiBzZW4nJ255dXVrYW5cIDsKK+WFiOWFpeimiyA+IHNlbicnbnl1dWtlblwgOwor5rSX5r+v54mpID4gc2VudGFrdW1vbm9cIDsKK+S4h+iRiembhiA+IG1hbicneW91c2h1dVwgOwor5rqA5bee5Zu9ID4gbWFuc2h1dWtva3VcIDsKK+ihqOW/oOWhlCA+IGh5b3VjaHV1dG91XCA7CivkuInph43mrrogPiBzYW5qdXVzYXRzdVwgOwor5YiG5rOM5rayID4gYnVucGl0c3Vla2lcIDsKK+mao+aOpeecjCA+IHJpbnNldHN1a2VuXCA7CivlmJjlhavnmb4gPiB1c29oYXBweWFrdVwgOwor6Iie6LiP5a6kID4gYnV0b3VzaGl0c3VcIDsKK+W9k+WxgOiAhSA+IHRvdWt5b2t1c2hhXCA7Civnt6nooZ3lm70gPiBrYW5zaG91a29rdVwgOwor6JeB5Lq65b2iID4gd2FyYW5pbmd5b3VcIDsKK+W9semfv+WKmyA+IGVpa3lvdXJ5b2t1XCA7Civmlofnr4DmlbAgPiBidW5zZXRzdXN1dVwgOwor5oKq5o6o6YePID4gd2FydXp1aXJ5b3VcIDsKK+WQq+aciemHjyA+IGdhbicneXV1cnlvdVwgOwor6KqY6Zu7546HID4geXV1ZGVucml0c3VcIDsKK+ims+Wvn+ecvCA+IGthbnNhdHN1Z2FuXCA7Civmipvniannt5ogPiBob3VidXRzdXNlblwgOwor6KOP5YiH6ICFID4gdXJhZ2lyaW1vbm9cIDsKK+mYsumbquaelyA+IGJvdXNldHN1cmluXCA7CivlpKnnpZ7pq60gPiB0ZW5zaGluaGlnZVwgOwor5q665a6z6ICFID4gc2F0c3VnYWlzaGFcIDsKK+aVmeiCsuecgSA+IGt5b3Vpa3VzaG91XCA7Civpm6LkubPpo58gPiByaW55dXVzaG9rdVwgOwor5pWZ6IKy55qEID4ga3lvdWlrdXRla2lcIDsKK+eJueWIpeWMuiA+IHRva3ViZXRzdWt1XCA7CivosqHmlL/lipsgPiB6YWlzZWlyeW9rdVwgOwor5by356Gs562WID4ga3lvdWtvdXNha3VcIDsKK+aWsOW5tOWPtyA+IHNoaW4nJ25lbmdvdVwgOwor56Ov6aa05p2+ID4gc29uYXJlbWF0c3VcIDsKK+WFpemkqOaWmSA+IG55dXVrYW5yeW91XCA7Civniannm7jpo68gPiBtb3Nzb3VtZXNoaVwgOwor6KO96Z2p5qWtID4gc2Vpa2FrdWd5b3VcIDsKK+S4reWtpueUnyA+IGNodXVnYWt1c2VpXCA7CivovLjlh7rmuK8gPiB5dXNodXRzdWtvdVwgOwor5Y2X5qW15bivID4gbmFua3lva3V0YWlcIDsKK+a6tuaOpeWJpCA+IHlvdXNldHN1emFpXCA7CivmgKXnl4XkurogPiBreXV1YnlvdW5pblwgOwor5a+E5a6/5paZID4ga2lzaHVrdXJ5b3VcIDsKK+mrmOWztueUsCA+IHRha2FzaGltYWRhXCA7CivlsI/mraPmnIggPiBrb3Nob3VnYXRzdVwgOwor5YuV5Yqb6KiIID4gZG91cnlva3VrZWlcIDsKK+alteWkp+WApCA+IGt5b2t1ZGFpY2hpXCA7Civlh7rph5HpoY0gPiBzaHVra2luZ2FrdVwgOwor55Sz5ZGK5Yi2ID4gc2hpbmtva3VzZWlcIDsKK+WtkOS+m+mBlCA+IGtvZG9tb3RhY2hpXCA7CivlqpLku4vniakgPiBiYWlrYWlidXRzdVwgOwor6buE6YGT6ImyID4ga291ZG91c2hva3VcIDsKK+S4ieiRieiZqyA+IHNhbicneW91Y2h1dVwgOwor5YWo6LOq5YyWID4gemVuc2hpdHN1a2FcIDsKK+eUn+a0u+mboyA+IHNlaWthdHN1bmFuXCA7CivntLDli5XohIggPiBzYWlkb3VteWFrdVwgOwor56eB5pyJ54mpID4gc2hpeXV1YnV0c3VcIDsKK+ikh+mbkeWMliA+IGZ1a3V6YXRzdWthXCA7Civli6LlipvlnI8gPiBzZWlyeW9rdWtlblwgOwor6KSH6KSH57eaID4gZnVrdWZ1a3VzZW5cIDsKK+aWsOW5tOS8miA+IHNoaW4nJ25lbmthaVwgOwor5LiN56K65a6fID4gZnVrYWt1aml0c3VcIDsKK+mOrueXm+WJpCA+IGNoaW50c3V1emFpXCA7CivmgKrkurrniakgPiBrYWlqaW5idXRzdVwgOwor6YCa5a2m55SfID4gdHN1dWdha3VzZWlcIDsKK+eIhuW/g+WcsCA+IGJha3VzaGluY2hpXCA7Civlp4vmnKvmm7ggPiBzaGltYXRzdXNob1wgOwor56u25LqJ5b+DID4ga3lvdXNvdXNoaW5cIDsKK+WJvei7veiAhSA+IGh5b3VraW5tb25vXCA7CivohbjplonloZ4gPiBjaG91aGVpc29rdVwgOwor6LuN5b2T5bGAID4gZ3VudG91a3lva3VcIDsKK+eZveWtkOmzqSA+IHNoaXJha29iYXRvXCA7CivnlLrlvbnloLQgPiBtYWNoaXlha3ViYVwgOwor5LiN5b+g5a6fID4gZnVjaHV1aml0c3VcIDsKK+WNmuWtpuiAhSA+IGhha3VnYWt1c2hhXCA7CivmiKbnlaXkuIogPiBzZW5yeWFrdWpvdVwgOwor5Y2X5qW15ZyPID4gbmFua3lva3VrZW5cIDsKK+S4oeiEmuimjyA+IHJ5b3VreWFrdWtpXCA7CivlhbHoqLPogIUgPiBreW91eWFrdXNoYVwgOwor5b+N6ICQ5YqbID4gbmludGFpcnlva3VcIDsKK+mbhumHkeS6uiA+IHNodXVraW4nJ25pblwgOwor5Y2B5YWr6YeRID4ganV1aGFjaGlraW5cIDsKK+WAn+eUqOiAhSA+IHNoYWt1eW91c2hhXCA7CivmjIHkuYXlipsgPiBqaWt5dXVyeW9rdVwgOwor5bGA5Zyw6aKoID4ga3lva3VjaGlmdXVcIDsKK+eZuueZjOaApyA+IGhhdHN1Z2Fuc2VpXCA7Civmj5rpmbjmlpkgPiB5b3VyaWt1cnlvdVwgOwor5a+G6LK/5piTID4gbWl0c3Vib3Vla2lcIDsKK+mAmuS/oeWToSA+IHRzdXVzaGluJydpblwgOwor5Yag5YuV6ISIID4ga2FuZG91bXlha3VcIDsKK+WkieWlj+absiA+IGhlbnNvdWt5b2t1XCA7CivooajlvbDlj7AgPiBoeW91c2hvdWRhaVwgOwor6JGs6YCB5puyID4gc291c291a3lva3VcIDsKK+WNg+WIhueOhyA+IHNlbmJ1bnJpdHN1XCA7CivkuLjkuIDlubQgPiBtYXJ1aWNoaW5lblwgOwor6ICB5buD54mpID4gcm91aGFpYnV0c3VcIDsKK+WNl+alteWFiSA+IG5hbmt5b2t1a291XCA7Civnmq7nrpfnlKggPiBrYXdhemFuJyd5b3VcIDsKK+i/veWIhuevgCA+IG9pd2FrZWJ1c2hpXCA7CivlvrPlt53li6IgPiB0b2t1Z2F3YXplaVwgOwor5Ym16YCg54mpID4gc291em91YnV0c3VcIDsKK+WIneiIqua1tyA+IGhhdHN1a291a2FpXCA7Civos7zoqq3mlpkgPiBrb3Vkb2t1cnlvdVwgOwor5b6X56Wo5pWwID4gdG9rdWh5b3VzdXVcIDsKK+mbquaZr+iJsiA+IHl1a2lnZXNoaWtpXCA7Civnsr7npZ7nmoQgPiBzZWlzaGludGVraVwgOwor5b6z5bed5YWsID4gdG9rdWdhd2Frb3VcIDsKK+a0u+WLleWutiA+IGthdHN1ZG91c2hhXCA7Civoh6rnq4vlv4MgPiBqaXJpdHN1c2hpblwgOwor5ry46YCy55qEID4gemVuc2hpbnRla2lcIDsKK+aVmeS8muaapiA+IGt5b3VrYWlyZWtpXCA7CivmrrrkurrogIUgPiBzYXRzdWppbnNoYVwgOwor57K+56We55eFID4gc2Vpc2hpbmJ5b3VcIDsKK+auuuS6uue9qiA+IHNhdHN1amluemFpXCA7CivmiJDlubTlvI8gPiBzZWluZW5zaGlraVwgOwor6ISx55+z5rK5ID4gZGF0c3VzZWtpeXVcIDsKK+WFiOmAsuWbvSA+IHNlbnNoaW5rb2t1XCA7CivlnJ/lm6PlrZAgPiB0c3VjaGlkYW5nb1wgOwor5re35ZCI54mpID4ga29uZ291YnV0c3VcIDsKK+i7jealvemVtyA+IGd1bmdha3VjaG91XCA7Civms5XlvovkuIogPiBob3VyaXRzdWpvdVwgOwor55Wc54qs56iOID4gY2hpa3VrZW56ZWlcIDsKK+aigeWxseaziiA+IHJ5b3V6YW5wYWt1XCA7CivlvavloZHooZMgPiBjaG91c29qdXRzdVwgOwor5Luj55So6aOfID4gZGFpeW91c2hva3VcIDsKK+S4puacqOmBkyA+IG5hbWlraW1pY2hpXCA7CivluLPmnKzkurogPiBjaG91aG9uJyduaW5cIDsKK+Wuneefs+eusSA+IGhvdXNla2liYWtvXCA7CivljZLmpa3lvowgPiBzb3RzdWd5b3Vnb1wgOwor5Y+j6KeS5YqbID4ga3VjaGlkenVtb3VcIDsKK+S6i+alreS4uyA+IGppZ3lvdW51c2hpXCA7Civoh6romZDnmoQgPiBqaWd5YWt1dGVraVwgOwor5LiL55u46KuHID4gc2hpdGFzb3VkYW5cIDsKK+emv+mgreeXhSA+IHRva3V0b3VieW91XCA7CivlvL7nnYDngrkgPiBkYW5jaGFrdXRlblwgOwor5LqU5pyI55eFID4gZ29nYXRzdWJ5b3VcIDsKK+W8vuWKm+aApyA+IGRhbnJ5b2t1c2VpXCA7CivmoLjniIblvL4gPiBrYWt1YmFrdWRhblwgOwor5Lim5pyo6LevID4gbmFtaWtpbWljaGlcIDsKK+WVhualreihlyA+IHNob3VneW91Z2FpXCA7CivpoK3mloflrZcgPiBrYXNoaXJhbW9qaVwgOwor57iu57es57SZID4gY2hpcmltZW5zaGlcIDsKK+aIquaWremdoiA+IHNldHN1ZGFubWVuXCA7CivljZfkuqzomasgPiBuYW5raW5tdXNoaVwgOwor6KOB5rG65pu4ID4gc2Fpa2V0c3VzaG9cIDsKK+aguOeHg+aWmSA+IGtha3VuZW5yeW91XCA7CivpgJDlrZfoqLMgPiBjaGlrdWppeWFrdVwgOwor5LiA5b656ICFID4gaXR0ZXRzdW1vbm9cIDsKK+W+oeWNlOWKmyA+IGdva3lvdXJ5b2t1XCA7Civkv4LlsZ7kuK0gPiBrZWl6b2t1Y2h1dVwgOwor55eF5Lit5ZCfID4gYnlvdWNodXVnaW5cIDsKK+altemZkOWApCA+IGt5b2t1Z2VuY2hpXCA7CivmlZnogrLlraYgPiBreW91aWt1Z2FrdVwgOwor6Zu76Kmx5a6kID4gZGVud2FzaGl0c3VcIDsKK+mBoOW/g+WKmyA+IGVuc2hpbnJ5b2t1XCA7Civlrq7ltI7nnIwgPiBtaXlhemFraWtlblwgOwor5ZWG5bel5qWtID4gc2hvdWtvdWd5b3VcIDsKK+ihneWLleeahCA+IHNob3Vkb3V0ZWtpXCA7Civog4bnn7Pnl4cgPiB0YW5zZWtpc2hvdVwgOwor6Ly45Ye65ZOBID4geXVzaHV0c3VoaW5cIDsKK+S4ieecoOialSA+IHNhbm1pbmthaWtvXCA7CivplpPmrKDms4kgPiBrYW5rZXRzdXNlblwgOwor5aSp6b6N5bedID4gdGVucnl1dWthd2FcIDsKK+aVmee/kueUnyA+IGt5b3VzaHV1c2VpXCA7CivpmqPmjqXlnLAgPiByaW5zZXRzdWNoaVwgOwor55m655Sf546HID4gaGFzc2Vpcml0c3VcIDsKK+iRoeiQhOeVkSA+IGJ1ZG91YmF0YWtlXCA7CivlooPnlYzmqJkgPiBreW91a2FpaHlvdVwgOwor56m66LuN5YqbID4ga3V1Z3Vucnlva3VcIDsKK+S6pOWjsOabsiA+IGtvdXNlaWt5b2t1XCA7Civnj77lhoXplqMgPiBnZW4nJ25haWtha3VcIDsKK+WNoOaYn+ihkyA+IHNlbnNlaWp1dHN1XCA7CivpppnovpvmlpkgPiBrb3VzaGlucnlvdVwgOwor55S66YGT5aC0ID4gbWFjaGlkb3Vqb3VcIDsKK+WLleWKm+a6kCA+IGRvdXJ5b2t1Z2VuXCA7CivmgZLnrYnlvI8gPiBrb3V0b3VzaGlraVwgOwor6KiO5LyQ6LuNID4gdG91YmF0c3VndW5cIDsKK+ihqOeci+advyA+IG9tb3Rla2FuYmFuXCA7Civmv4PpnZLoibIgPiBub3VzZWlzaG9rdVwgOwor5q665Lq654qvID4gc2F0c3VqaW5oYW5cIDsKK+aui+W/teizniA+IHphbicnbmVuc2hvdVwgOwor6ISz5YWF6KGAID4gbm91anV1a2V0c3VcIDsKK+mjn+S6uueoriA+IHNob2t1amluc2h1XCA7CivotaTopJDoibIgPiBzZWtrYXNzaG9rdVwgOwor6IiI5L+h6YyyID4ga291c2hpbnJva3VcIDsKK+mbu+eGseWZqCA+IGRlbicnbmV0c3VraVwgOwor5L2c5puy6ICFID4gc2Fra3lva3VzaGFcIDsKK+WVhuaomeaoqSA+IHNob3VoeW91a2VuXCA7CivluLjorZjkurogPiBqb3VzaGlraWppblwgOwor6Kaz5a6i5bGkID4ga2Fua3lha3Vzb3VcIDsKK+S4gOmHjeahnCA+IGhpdG9lemFrdXJhXCA7CivlhYjlhYjmnIggPiBzZW5zZW5nZXRzdVwgOwor5Zyw5YuV6KqsID4gY2hpZG91c2V0c3VcIDsKK+eZveS6nOizqiA+IGhha3Vhc2hpdHN1XCA7CivohqDnnYDliaQgPiBrb3VjaGFrdXphaVwgOwor5LiA5q616JC9ID4gaWNoaWRhbnJha3VcIDsKK+i7jeeUqOmzqSA+IGd1bicneW91YmF0b1wgOwor5L+X5paH5a2mID4gem9rdWJ1bmdha3VcIDsKK+mbu+Wcp+ioiCA+IGRlbicnYXRzdWtlaVwgOwor6Jas5bGA5pa5ID4geWFra3lva3Vob3VcIDsKK+azleWItuWxgCA+IGhvdXNlaWt5b2t1XCA7CivolqzlrabogIUgPiB5YWt1Z2FrdXNoYVwgOwor5L+C5LqJ54mpID4ga2Vpc291YnV0c3VcIDsKK+mQmOS5s+a0niA+IHNob3VueXV1ZG91XCA7CivohLHmr5vliaQgPiBkYXRzdW1vdXphaVwgOwor566h6L2E5qipID4ga2Fua2F0c3VrZW5cIDsKK+WAn+eUqOabuCA+IHNoYWt1eW91c2hvXCA7CivlpYnlhazlj6MgPiBob3Vrb3VndWNoaVwgOwor5pS+6YCB5bGAID4gaG91c291a3lva3VcIDsKK+m7hOeZveiJsiA+IGtvaGFrdXNob2t1XCA7Civnvr3nuZToorQgPiBoYW9yaWhha2FtYVwgOwor6Zmk5bmV5byPID4gam9tYWt1c2hpa2lcIDsKK+W8t+WItueahCA+IGt5b3VzZWl0ZWtpXCA7CivlvLflv4PliaQgPiBreW91c2hpbnphaVwgOwor55Sf5rS755KwID4gc2Vpa2F0c3VrYW5cIDsKK+aYpeS4gOeVqiA+IGhhcnVpY2hpYmFuXCA7CivljYHlhavnlaogPiBqdXVoYWNoaWJhblwgOwor57WC6Lqr5a6YID4gc2h1dXNoaW5rYW5cIDsKK+aciOmVt+efsyA+IGdldGNob3VzZWtpXCA7CivmlZnogbflk6EgPiBreW91c2hva3VpblwgOwor6YCB5Yil5LyaID4gc291YmV0c3VrYWlcIDsKK+WHuuWTgeWbvSA+IHNodXBwaW5rb2t1XCA7CivljZfkuqznlLogPiBuYW5raW5tYWNoaVwgOwor6YGT5b6z55qEID4gZG91dG9rdXRla2lcIDsKK+WVhualreeVjCA+IHNob3VneW91a2FpXCA7Civlj47ntI3poY0gPiBzaHV1bm91Z2FrdVwgOwor6byO56uL5oimID4gdGVpcml0c3VzZW5cIDsKK+WOn+WJh+eahCA+IGdlbnNva3V0ZWtpXCA7Civlgo3ogbTmlpkgPiBib3VjaG91cnlvdVwgOwor5Y2D5YaG5pytID4gc2VuJydlbnNhdHN1XCA7Civlrprlj47lhaUgPiB0ZWlzaHV1bnl1dVwgOwor5YWt5aSn5beeID4gcm9rdWRhaXNodXVcIDsKK+WJsuW8leWIuCA+IHdhcmliaWtpa2VuXCA7CivkvY/nlJ/mtLsgPiBqdXVzZWlrYXRzdVwgOwor5YmN56uL6IW6ID4gemVucml0c3VzZW5cIDsKK+WGmeecn+mbhiA+IHNoYXNoaW5zaHV1XCA7Civnmb7kuIfpgY0gPiBoeWFrdW1hbmJlblwgOwor6J2J5pmC6ZuoID4gc2VtaXNoaWd1cmVcIDsKK+WJsuW8leWCtSA+IHdhcmliaWtpc2FpXCA7CivmjqXnnYDliaQgPiBzZXRjaGFrdXphaVwgOwor5omL6KGT5Y+wID4gc2h1anV0c3VkYWlcIDsKK+mYsueBq+aJiSA+IGJvdWthdG9iaXJhXCA7CivkubHlhaXogIUgPiByYW4nJ255dXVzaGFcIDsKK+ioiOeUu+eahCA+IGtlaWtha3V0ZWtpXCA7Civoqr/ljbDlvI8gPiBjaG91aW5zaGlraVwgOwor6YCG6Lui5bGkID4gZ3lha3V0ZW5zb3VcIDsKK+m7hOiJsuiZqyA+IGtvZ2FuZW11c2hpXCA7CivnlJ/mtLvms5UgPiBzZWlrYXRzdWhvdVwgOwor57KY5Zyf6LOqID4gbmVuZG9zaGl0c3VcIDsKK+mAhui8uOWFpSA+IGd5YWt1eXVueXV1XCA7CivmlrDoiIjlm70gPiBzaGlua291a29rdVwgOwor5Ym16YCg5YqbID4gc291em91cnlva3VcIDsKK+WQiOebrueahCA+IGdvdW1va3V0ZWtpXCA7CivmlrDkurros54gPiBzaGluamluc2hvdVwgOwor6aCa6Z2Z6ISIID4ga2Vpam91bXlha3VcIDsKK+mbu+WgseWxgCA+IGRlbnBvdWt5b2t1XCA7CivkuInluZXniakgPiBzYW5tYWt1bW9ub1wgOwor55m95pyo6JOuID4gaGFrdW1va3VyZW5cIDsKK+WVhualrea4ryA+IHNob3VneW91a291XCA7CivolqznvZDpoK0gPiB5YWthbicnYXRhbWFcIDsKK+S4gOmHjOWhmiA+IGljaGlyaWR6dWthXCA7CivntYLouqvliJEgPiBzaHV1c2hpbmtlaVwgOwor5YuV5Yqb5a2mID4gZG91cmlraWdha3VcIDsKK+evgOaWmeeQhiA+IHNlY2hpcnlvdXJpXCA7Civlh7rlk4HkurogPiBzaHVwcGluJyduaW5cIDsKK+WCjeiBtOW4rSA+IGJvdWNob3VzZWtpXCA7CivkuI3pganliIcgPiBmdXRla2lzZXRzdVwgOwor5a2m6Zqb55qEID4gZ2FrdXNhaXRla2lcIDsKK+ernOmqqOW6pyA+IHJ5dXVrb3RzdXphXCA7Civku67mnaHntIQgPiBrYXJpam91eWFrdVwgOwor6ZqO57Sa56ugID4ga2Fpa3l1dXNob3VcIDsKK+aKteaKl+WKmyA+IHRlaWtvdXJ5b2t1XCA7Civmo67mnpflraYgPiBzaGlucmluZ2FrdVwgOwor55m+5LiH6KiAID4gaHlha3VtYW5nZW5cIDsKK+WMlueyp+S4iyA+IGtlc2hvdXNoaXRhXCA7CivotaTmj5Dnga8gPiBha2FjaG91Y2hpblwgOwor5Ym16YCg5Li7ID4gc291em91bnVzaGlcIDsKK+WAmeWtneizoiA+IGhvdXNoYXVzaGVuXCA7CivolqznvLbpoK0gPiB5YWthbicnYXRhbWFcIDsKK+WGrOWwhui7jSA+IGZ1eXVzaG91Z3VuXCA7Civni6znv5Lmm7ggPiBkb2t1c2h1dXNob1wgOwor5YWs6Ki85paZID4ga291c2hvdXJ5b3VcIDsKK+e2v+e5lOeJqSA+IG1lbicnb3JpbW9ub1wgOwor5YWI5YWl5Li7ID4gc2VuJydueXV1c2h1XCA7CivmnIDntYLnmoQgPiBzYWlzaHV1dGVraVwgOwor5pys5bu656+JID4gaG9ua2VuY2hpa3VcIDsKK+eLl+WwvuiNiSA+IGVub2tvcm9ndXNhXCA7CivooYzllYbkurogPiBneW91c2hvdW5pblwgOwor5YiH5YiG5rOVID4gc2V0c3VidW5ob3VcIDsKK+Wwj+eZvuWnkyA+IGtvYnlha3VzaG91XCA7Civlv4PkuIjlpKsgPiBrb2tvcm9qb3VidVwgOwor6bOl6aGe5a2mID4gY2hvdXJ1aWdha3VcIDsKK+W8seW5tOiAhSA+IGpha3VuZW5tb25vXCA7CivkuK3pmorplbcgPiBjaHV1dGFpY2hvdVwgOwor55u46KuH5b25ID4gc291ZGFuJyd5YWt1XCA7Civpo5/kuovmmYIgPiBzaG9rdWppZG9raVwgOwor5YWr6Z2i5L2TID4gaGFjaGltZW50YWlcIDsKK+WOn+WIpOaxuiA+IGdlbmhhbmtldHN1XCA7CivmpbXlnLDlnI8gPiBreW9rdWNoaWtlblwgOwor55uj5a+f5a6YID4ga2Fuc2F0c3VrYW5cIDsKK+eZveeOieeyiSA+IHNoaXJhdGFtYWtvXCA7CivllYbmpa3mlocgPiBzaG91Z3lvdWJ1blwgOwor5aSp5YuV6KqsID4gdGVuZG91c2V0c3VcIDsKK+i+u+iqrOazlSA+IHRzdWppc2VwcG91XCA7CivnhYnkuLnooZMgPiByZW50YW5qdXRzdVwgOwor6KW/5rW35bK4ID4gbmlzaGlrYWlnYW5cIDsKK+aApeS4iuaYhyA+IGt5dXVqb3VzaG91XCA7Civlrp3nn7PllYYgPiBob3VzZWtpc2hvdVwgOwor5o+b566X546HID4ga2Fuc2Fucml0c3VcIDsKK+W7uuioreiAhSA+IGtlbnNldHN1c2hhXCA7CivljJfjgIXopb8gPiBob2t1aG9rdXNlaVwgOwor6YqA5ama5byPID4gZ2lua29uc2hpa2lcIDsKK+S4oeiEmuWZqCA+IHJ5b3VreWFrdWtpXCA7Civljp/li5XlipsgPiBnZW5kb3VyeW9rdVwgOwor5L+E5pmv5rCXID4gbml3YWthZ2Vpa2lcIDsKK+aCquaIr+iAhSA+IGl0YXp1cmFtb25vXCA7CivlpKfnpo/luLMgPiBkYWlmdWt1Y2hvdVwgOwor5pmC56+A5p+EID4gamlzZXRzdWdhcmFcIDsKK+WQuOihgOmsvCA+IGt5dXVrZXRzdWtpXCA7Civns5blsL/nl4UgPiB0b3VueW91YnlvdVwgOwor6Lui5Lu75YWIID4gdGVuJyduaW5zYWtpXCA7CivmlK/phY3lipsgPiBzaGloYWlyeW9rdVwgOwor5Y2Y6Z+z56+AID4gdGFuJydvbnNldHN1XCA7CivmlrDogZ7nqK4gPiBzaGluYnVuZGFuZVwgOwor5byf44CF5a2QID4gb3RvdXRvZGVzaGlcIDsKK+S9juS4mOmZtSA+IHRlaWt5dXVyeW91XCA7Civlm73pmpvnmoQgPiBrb2t1c2FpdGVraVwgOwor6YO35Zyf6ImyID4ga3lvdWRvc2hva3VcIDsKK+ernOeUsOWnqyA+IHRhdHN1dGFoaW1lXCA7CivlsI/lrabppKggPiBzaG91Z2FrdWthblwgOwor5L2/56+A5ZujID4gc2hpc2V0c3VkYW5cIDsKK+a2iOaBr+aWhyA+IHNob3Vzb2t1YnVuXCA7Civnt4vooaPojYkgPiBoaWdvcm9tb3NvdVwgOwor5Li76KiI5bGAID4gc2h1a2Vpa3lva3VcIDsKK+mBk+W+s+W/gyA+IGRvdXRva3VzaGluXCA7CivmnKrmsbrlm5ogPiBtaWtldHN1c2h1dVwgOwor5oSb5ZSx5puyID4gYWlzaG91a3lva3VcIDsKK+Wxseajn+ibhyA+IHlhbWFrYWdhc2hpXCA7CivlgbXlr5/pmoogPiB0ZWlzYXRzdXRhaVwgOwor55m65L+h5YG0ID4gaGFzc2hpbmdhd2FcIDsKK+mBoOWxsemHjCA+IHRvb3lhbWF6YXRvXCA7CivnpZ7ntYznl5sgPiBzaGlua2VpdHN1dVwgOwor56We57WM55eHID4gc2hpbmtlaXNob3VcIDsKK+elnue1jOeXhSA+IHNoaW5rZWlieW91XCA7CivlrprnnYDmtrIgPiB0ZWljaGFrdWVraVwgOwor5byB6Ki85a2mID4gYmVuc2hvdWdha3VcIDsKK+eZuuS/oeS6uiA+IGhhc3NoaW4nJ25pblwgOwor57eR5Zyw5bivID4gcnlva3VjaGl0YWlcIDsKK+eUn+a0u+WcjyA+IHNlaWthdHN1a2VuXCA7CivnhrHkvJ3lsI4gPiBuZXRzdWRlbmRvdVwgOwor6YGT5b6z5a2mID4gZG91dG9rdWdha3VcIDsKK+mBqeagvOiAhSA+IHRla2lrYWt1c2hhXCA7Civlm7Pmm7jlrqQgPiB0b3Nob3NoaXRzdVwgOwor6Kaz6Z+z5qeYID4ga2FuJydub25zYW1hXCA7CivntZDlqZrlvI8gPiBrZWtrb25zaGlraVwgOwor6KW/5rSL5byPID4gc2VpeW91c2hpa2lcIDsKK+eUt+WGpeWIqSA+IG90b2tvbXlvdXJpXCA7CivkuIrohZXpqqggPiBqb3V3YW5rb3RzdVwgOwor55Sf5ZG95YqbID4gc2VpbWVpcnlva3VcIDsKK+ehrOmqqOa8oiA+IGtvdWtvdHN1a2FuXCA7CivllYbmpa3lnLAgPiBzaG91Z3lvdWNoaVwgOwor5LiH5bm05bqKID4gbWFuJyduZW5kb2tvXCA7CivorJvph4jluKsgPiBrb3VzaGFrdXNoaVwgOwor5reh6buE6ImyID4gdGFua291c2hva3VcIDsKK+S4ieW5heWvviA+IHNhbnB1a3V0c3VpXCA7Civom4vnmb3lsL8gPiB0YW5wYWt1bnlvdVwgOwor5Yi65r+A6IetID4gc2hpZ2VraXNodXVcIDsKK+iNiemei+iZqyA+IHdhcmFqaW11c2hpXCA7Civph5Hono3mpa0gPiBraW4nJ3l1dWd5b3VcIDsKK+iPnOeoruayuSA+IG5hdGFuZWFidXJhXCA7Civpm5vkurrlvaIgPiBoaW5hbmluZ3lvdVwgOwor54Sh552A6Zm4ID4gbXVjaGFrdXJpa3VcIDsKK+S4iuWIhuWIpSA+IGpvdWZ1bmJldHN1XCA7CivlpKfli5XohIggPiBkYWlkb3VteWFrdVwgOwor56We54Sh5pyIID4ga2FuJyduYWR6dWtpXCA7CivlubzpprTmn5MgPiBvc2FuYW5hamltaVwgOwor5YaG5ZGo546HID4gZW5zaHV1cml0c3VcIDsKK+WVhualreWPsiA+IHNob3VneW91c2hpXCA7CivlsbHlsrPnl4UgPiBzYW5nYWt1YnlvdVwgOwor6Kaq5Lu75a6YID4gc2hpbicnbmlua2FuXCA7Civov73ot6HogIUgPiB0c3Vpc2VraXNoYVwgOwor55m65Lya5byPID4gaGFra2Fpc2hpa2lcIDsKK+WkqemBk+iZqyA+IHRlbnRvdW11c2hpXCA7CivluorpnaLnqY0gPiB5dWthbWVuc2VraVwgOwor54u46Kaq54i2ID4gdGFudWtpb3lhamlcIDsKK+acqOefs+a8oiA+IGJva3VzZWtpa2FuXCA7Civlm73pmLLnnIEgPiBrb2t1Ym91c2hvdVwgOwor5Zu95paH5a2mID4ga29rdWJ1bmdha3VcIDsKK+awkeS/l+WtpiA+IG1pbnpva3VnYWt1XCA7CivnlJ/mrpbohbogPiBzZWlzaG9rdXNlblwgOwor6Ieq5q6655qEID4gamlzYXRzdXRla2lcIDsKK+mAoOeJqeS4uyA+IHpvdWJ1dHN1c2h1XCA7CivnlKjlhbXooZMgPiB5b3VoZWlqdXRzdVwgOwor6YCA6IG36YeRID4gdGFpc2hva3VraW5cIDsKK+W9juaciOeKtiA+IHdhbmdldHN1am91XCA7CivnlJ/msqHlubQgPiBzZWlib3RzdW5lblwgOwor5Y2Y5LiA5oCnID4gdGFuJydpdHN1c2VpXCA7CivmjIHntprlipsgPiBqaXpva3VyeW9rdVwgOwor5paw6IGe5qWtID4gc2hpbmJ1bmd5b3VcIDsKK+elnue1jOaguCA+IHNoaW5rZWlrYWt1XCA7CivmnqLou7jlm70gPiBzdXVqaWt1a29rdVwgOwor5LiJ6Imy54mIID4gc2Fuc2hva3ViYW5cIDsKK+ebtOims+eahCA+IGNob2trYW50ZWtpXCA7CivkuK3plpPpp4UgPiBjaHV1a2FuJydla2lcIDsKK+iDveijheadnyA+IG5vdXNob3V6b2t1XCA7CivntZDmmbblraYgPiBrZXNzaG91Z2FrdVwgOwor6Kej5rG65rOVID4ga2Fpa2V0c3Vob3VcIDsKK+itpuaIkuiJsiA+IGtlaWthaXNob2t1XCA7CivkuIDmr5vkvZwgPiBpY2hpbW91c2FrdVwgOwor5rip54ax5oCnID4gb24nJ25ldHN1c2VpXCA7CivlhoXlj43ohJogPiBuYWloYW5reWFrdVwgOwor5bu257iE5ryBID4gaGFlbmF3YXJ5b3VcIDsKK+ebtOaWueS9kyA+IGNob2t1aG91dGFpXCA7Civlrrbml4/pgZQgPiBrYXpva3V0YWNoaVwgOwor5Yi65r+A55qEID4gc2hpZ2VraXRla2lcIDsKK+S6pOaPm+WxgCA+IGtvdWthbmt5b2t1XCA7CivkuIPlubTlv4wgPiBzaGljaGluZW5raVwgOwor5oKq5oiv5pu4ID4gaXRhenVyYWdha2lcIDsKK+WNg+S6uumHnSA+IHNlbicnbmluYmFyaVwgOwor5raI5q+S5rayID4gc2hvdWRva3Vla2lcIDsKK+ayueegpeefsyA+IGFidXJhdG9pc2hpXCA7Civni5DppYLpo6kgPiBraXRzdW5ldWRvblwgOwor5ZCI5bee5Zu9ID4gZ2Fzc2h1dWtva3VcIDsKK+a/g+ikkOiJsiA+IG5vdWthc3Nob2t1XCA7CivmnZDmnKjllYYgPiB6YWltb2t1c2hvdVwgOwor5Y6f6Imy54mIID4gZ2Vuc2hva3ViYW5cIDsKK+WNmOmgheW8jyA+IHRhbmtvdXNoaWtpXCA7CivlnJ/msJfoibIgPiB0c3VjaGlrZWlyb1wgOwor5LuY5bGe56+AID4gZnV6b2t1c2V0c3VcIDsKK+S4gOeVqum2jyA+IGljaGliYW5kb3JpXCA7CivntIvnq6DlraYgPiBtb25zaG91Z2FrdVwgOwor55yf5Y+q5LitID4gbWF0dGFkYW5ha2FcIDsKK+WHuuW4reiAhSA+IHNodXNzZWtpc2hhXCA7CivploDliY3nlLogPiBtb256ZW5tYWNoaVwgOwor5pWZ6KiT55qEID4ga3lvdWt1bnRla2lcIDsKK+iyr+mHkeWxgCA+IGNob2tpbmt5b2t1XCA7Civlrpjlg5roh60gPiBrYW5yeW91c2h1dVwgOwor6LmE6YmE5belID4gdGVpdGV0c3Vrb3VcIDsKK+elnue1jOWtpiA+IHNoaW5rZWlnYWt1XCA7CivooajnjoTplqIgPiBvbW90ZWdlbmthblwgOwor5Ye65by15bqXID4gc2h1dGNob3V0ZW5cIDsKK+aXheihjOmehCA+IHJ5b2tvdWthYmFuXCA7CivljJfjgIXmnbEgPiBob2t1aG9rdXRvdVwgOwor5rib5aGp6aOfID4gZ2VuJydlbnNob2t1XCA7Civlm6PkvZPlrqIgPiBkYW50YWlreWFrdVwgOwor5b+D6ZyK5a2mID4gc2hpbnJlaWdha3VcIDsKK+Wkp+ato+eQtCA+IHRhaXNob3Vnb3RvXCA7CivmrKDli6TnjocgPiBrZWtraW5yaXRzdVwgOwor5a6a552A5YmkID4gdGVpY2hha3V6YWlcIDsKK+WFpeWgtOaWmSA+IG55dXVqb3VyeW91XCA7CivpgJDoqp7oqLMgPiBjaGlrdWdveWFrdVwgOwor5oCd6ICD5YqbID4gc2hpa291cnlva3VcIDsKK+S5s+eUqOeJmyA+IG55dXV5b3VneXV1XCA7CivmraPopprlnYogPiBzaG91Z2FrdWJvdVwgOwor57eR6Je76aGeID4gcnlva3Vzb3VydWlcIDsKK+ebruaSg+iAhSA+IG1va3VnZWtpc2hhXCA7Civpu5Lmm5znn7MgPiBrb2t1eW91c2VraVwgOwor5rqA5LiA5bm0ID4gbWFuJydpY2hpbmVuXCA7CivmsqHmiJHnmoQgPiBib3RzdWdhdGVraVwgOwor5ZCr5aG1546HID4gZ2Fuamlucml0c3VcIDsKK+mAgOiBt+iAhSA+IHRhaXNob2t1c2hhXCA7CivolLXlsYvmlbcgPiBrdXJheWFzaGlraVwgOwor5YaN5bu656+JID4gc2Fpa2VuY2hpa3VcIDsKK+eMrui6q+eahCA+IGtlbnNoaW50ZWtpXCA7CivlpqjlrrPniakgPiBib3VnYWlidXRzdVwgOwor54K555y86JasID4gdGVuZ2FuJyd5YWt1XCA7CivlhYPpppbnm7ggPiBtb3Rvc2h1c2hvdVwgOwor5oGQ5rC055eFID4ga3lvdXN1aWJ5b3VcIDsKK+WvhuWjsuWTgSA+IG1pdHN1YmFpaGluXCA7Civnn7Plt53nnIwgPiBpc2hpa2F3YWtlblwgOwor5Ymv5Lya6ZW3ID4gZnVrdWthaWNob3VcIDsKK+eZuuaYjuiAhSA+IGhhdHN1bWVpc2hhXCA7CivlibXkvZznmoQgPiBzb3VzYWt1dGVraVwgOwor5aSn6YCG572qID4gdGFpZ3lha3V6YWlcIDsKK+S4gOWFg+eahCA+IGljaGlnZW50ZWtpXCA7Civnmb7pnaLnm7ggPiBoeWFrdW1lbnNvdVwgOwor5LiN5L6155WlID4gZnVzaGlucnlha3VcIDsKK+Wwj+WtpueUnyA+IHNob3VnYWt1c2VpXCA7Civku5jlsZ7niakgPiBmdXpva3VidXRzdVwgOwor5YuJ5by35LitID4gYmVua3lvdWNodXVcIDsKK+WGmeecn+W4syA+IHNoYXNoaW5jaG91XCA7CivkuIDnm67mlaMgPiBpY2hpbW9rdXNhblwgOwor6aKo5Yqb6KiIID4gZnV1cnlva3VrZWlcIDsKK+a0u+eUqOW9oiA+IGthdHN1eW91a2VpXCA7Civoh6rli5XmiYkgPiBqaWRvdXRvYmlyYVwgOwor5Lya56S+56uLID4ga2Fpc2hhcml0c3VcIDsKK+imi+ebruW9oiA+IG1pbWVrYXRhY2hpXCA7CivpkZHliKXmiYAgPiBrYW5iZXRzdXNob1wgOwor5Luu5aWR57SEID4ga2FyaWtlaXlha3VcIDsKK+aguOaLoeaVoyA+IGtha3VrYWt1c2FuXCA7Civlkajovrrlm70gPiBzaHV1aGVua29rdVwgOwor5b+F54S25oCnID4gaGl0c3V6ZW5zZWlcIDsKK+m7kueMqeeMqSA+IGt1cm9zaG91am91XCA7CivkuKHmm7/llYYgPiByeW91Z2Flc2hvdVwgOwor6ISx6Imy5YmkID4gZGFzc2hva3V6YWlcIDsKK+WPs+W/g+WupCA+IHVzaGluc2hpdHN1XCA7CivkuK3lpK7lj6MgPiBjaHV1b3VndWNoaVwgOwor55yf6I+M55eHID4gc2hpbmtpbnNob3VcIDsKK+Wcp+WKm+azoiA+IGF0c3VyeW9rdWhhXCA7Civlhajlm73nmoQgPiB6ZW5rb2t1dGVraVwgOwor57iE5qKv5a2QID4gbmF3YWJhc2hpZ29cIDsKK+aIkeeJqemhlCA+IHdhZ2Ftb25vZ2FvXCA7Civpo5/loILou4ogPiBzaG9rdWRvdXNoYVwgOwor5ZaE55+l6K2YID4gemVuY2hpc2hpa2lcIDsKK+S4gOWGhuacrSA+IGljaGllbnNhdHN1XCA7CivoppbogbToppogPiBzaGljaG91a2FrdVwgOwor6ICQ54ax6Yu8ID4gdGFpbmV0c3Vrb3VcIDsKK+mdqeWRveeahCA+IGtha3VtZWl0ZWtpXCA7CivlsI/kvJHmraIgPiBzaG91a3l1dXNoaVwgOwor5aW95Y+W57WEID4ga291dG9yaWt1bWlcIDsKK+WNmuWlleWuvyA+IGJha3VjaGl5YWRvXCA7CivohLPosqfooYAgPiBub3VoaW5rZXRzdVwgOwor5oKq44CF5oivID4gd2FydWl0YXp1cmFcIDsKK+a0l+ekvOW8jyA+IHNlbnJlaXNoaWtpXCA7CivnlLLpqqjmlocgPiBrb3Vrb3RzdWJ1blwgOwor5pel6YqA5Yi4ID4gbmljaGlnaW5rZW5cIDsKK+iyp+awkeeqnyA+IGhpbm1pbmt1dHN1XCA7CivlpYnnjK7niakgPiBob3VrZW5idXRzdVwgOwor5a6f5qWt5a62ID4gaml0c3VneW91a2FcIDsKK+iDuOeul+eUqCA+IG11bmV6YW4nJ3lvdVwgOwor5Yas5pyo56uLID4gZnV5dWtvZGFjaGlcIDsKK+e1kOe0ruezuCA+IGtlc3NhdHN1c2hpXCA7CivpgIblrqPkvJ0gPiBneWFrdXNlbmRlblwgOwor6a6u57SF6ImyID4gc2Vua291c2hva3VcIDsKK+WFpeWbveeojiA+IG55dXVrb2t1emVpXCA7Civmi6HlpKfpj6EgPiBrYWt1ZGFpa3lvdVwgOwor6YGT5qW96ICFID4gZG91cmFrdW1vbm9cIDsKK+Wls+aIv+W9uSA+IG55b3Vib3V5YWt1XCA7CivmnaHntITlm70gPiBqb3V5YWt1a29rdVwgOwor5Luj5pu/54mpID4gZGFpdGFpYnV0c3VcIDsKK+a3t+WHneWcnyA+IGtvbmt1cml6ZXRvXCA7Civmtojmr5LliaQgPiBzaG91ZG9rdXphaVwgOwor5LiH6IO96JasID4gbWFuJydub3V5YWt1XCA7Civkv6HmhpHmgKcgPiBzaGlucHlvdXNlaVwgOwor5YiX5Lyd5L2TID4gcmV0c3VkZW50YWlcIDsKK+WPo+WPr+eskSA+IGt1Y2hpb2thc2hpXCA7Civlrp/nlJ/mtLsgPiBqaXNzZWlrYXRzdVwgOwor55m+5aeT5a62ID4gaHlha3VzaG91eWFcIDsKK+S4gOWxgOmDqCA+IGljaGlreW9rdWJ1XCA7CivplpPkuIDpq6ogPiBrYW4nJ2lwcGF0c3VcIDsKK+W5tOagvOWlvSA+IHRvc2hpa2Fra291XCA7CivpjqfkuIDlhbcgPiB5b3JvaWljaGlndVwgOwor55S65Lq654mpID4gY2hvdW5pbm1vbm9cIDsKK+mAmuios+WumCA+IHRzdXV5YWt1a2FuXCA7Civlv4XopoHmgqogPiBoaXRzdXlvdWFrdVwgOwor6YmE6YGT57ayID4gdGV0c3Vkb3Vtb3VcIDsKK+WOn+eUo+eJqSA+IGdlbnNhbmJ1dHN1XCA7Civlmajmpb3mm7IgPiBraWdha3VreW9rdVwgOwor5b+F6KaB5oCnID4gaGl0c3V5b3VzZWlcIDsKK+WNiumdouitmCA+IGhhbm1lbnNoaWtpXCA7CivlpKLlv4PlnLAgPiB5dW1lZ29rb2NoaVwgOwor5LuK6YCx5LitID4ga29uc2h1dWNodXVcIDsKK+ipseS4i+aJiyA+IGhhbmFzaGliZXRhXCA7CivpmLLonZXliaQgPiBib3VzaG9rdXphaVwgOwor5bCP5LmX55qEID4gc2hvdWpvdXRla2lcIDsKK+eri+iEmueCuSA+IHJpa2t5YWt1dGVuXCA7CivkuI3kv6Hlrp8gPiBmdXNoaW5qaXRzdVwgOwor5LqJ5aWq5oimID4gc291ZGF0c3VzZW5cIDsKK+WVhuWtpuWjqyA+IHNob3VnYWt1c2hpXCA7CivkuIrlsYvmlbcgPiBrYW1peWFzaGlraVwgOwor6Iul5aSn5bCGID4gd2FrYWRhaXNob3VcIDsKK+aTjeiIteWupCA+IHNvdWRhc2hpdHN1XCA7CivmiJDkurrlvI8gPiBzZWlqaW5zaGlraVwgOwor5paw6Z2i55uuID4gc2hpbm1lbm1va3VcIDsKK+azqOaWh+acjSA+IGNodXVtb25mdWt1XCA7CivkuIrmo5/lvI8gPiBqb3V0b3VzaGlraVwgOwor6LWk6YqF6ImyID4gc2hha3Vkb3Vpcm9cIDsKK+WQkeWtpuW/gyA+IGtvdWdha3VzaGluXCA7CivmuIfmnJvogIUgPiBrYXRzdWJvdXNoYVwgOwor5rG957y25a6kID4ga2lrYW5zaGl0c3VcIDsKK+Wft+mBlOWQjyA+IHNoaXR0YXRzdXJpXCA7CivkuZflv4PlnLAgPiBub3JpZ29rb2NoaVwgOwor5byU56Wt5paZID4gY2hvdXNhaXJ5b3VcIDsKK+WIuuaIn+eahCA+IHNoaWdla2l0ZWtpXCA7CivkuIvmpJzliIYgPiBzaGl0YWtlbmJ1blwgOwor6ZaL5YKs5byPID4ga2Fpc2Fpc2hpa2lcIDsKK+eUsOiIjuWomCA+IGluYWthbXVzdW1lXCA7CivnrrHngavpiaIgPiBoYWtvaGliYWNoaVwgOwor5Ymv6aaW55u4ID4gZnVrdXNodXNob3VcIDsKK+aVteaEvuW/gyA+IHRla2lnYWlzaGluXCA7Civph4jnqbrmtbcgPiBzaGFrdWt1dWthaVwgOwor5YyX5YyX6KW/ID4gaG9rdWhva3VzZWlcIDsKK+e1hOe5lOelqCA+IHNvc2hpa2loeW91XCA7Civlh7rouqvogIUgPiBzaHVzc2hpbnNoYVwgOwor5LuV5LqL6YePID4gc2hpZ290b3J5b3VcIDsKK+WNiuaciOW9oiA+IGhhbmdldHN1a2VpXCA7CivliIblrZDoqqwgPiBidW5zaGlzZXRzdVwgOwor5Y2K5pyI5byBID4gaGFuZ2V0c3ViZW5cIDsKK+ato+etlOeOhyA+IHNlaXRvdXJpdHN1XCA7CivlraPnr4DnmoQgPiBraXNldHN1dGVraVwgOwor5Y6f5a2Q6KqsID4gZ2Vuc2hpc2V0c3VcIDsKK+elnuWYl+elrSA+IGthbicnbmFtZXNhaVwgOwor5qGn6Iie5Y+wID4gaGlub2tpYnV0YWlcIDsKK+WvvuWxgOiAhSA+IHRhaWt5b2t1c2hhXCA7Civosp3mrrvpqqggPiBrYWlnYXJhYm9uZVwgOwor5Y2D5Lih566xID4gc2VucnlvdWJha29cIDsKK+e0lOWPjuWFpSA+IGp1bnNodXVueXV1XCA7CivniannkIbnmoQgPiBidXRzdXJpdGVraVwgOwor5p6X55Sj54mpID4gcmluc2FuYnV0c3VcIDsKK+eqgeeEtuatuyA+IHRvdHN1emVuc2hpXCA7CivoqLzlj5bms5UgPiBzaG91dG9yaWhvdVwgOwor5q205Y+y55qEID4gcmVraXNoaXRla2lcIDsKK+e1hOe5lOeahCA+IHNvc2hpa2l0ZWtpXCA7CivotIjlkYjlvI8gPiB6b3V0ZWlzaGlraVwgOwor56mN6LyJ6YePID4gc2VraXNhaXJ5b3VcIDsKK+iHqueZuueahCA+IGppaGF0c3V0ZWtpXCA7CivlnJ/nn7PmtYEgPiBkb3Nla2lyeXV1XCA7CivluILnlLrmnZEgPiBzaGljaG91c29uXCA7Civpo5/loanmsLQgPiBzaG9rdWVuc3VpXCA7CivmvaTmu5HmsrkgPiBqdW5rYXRzdXl1XCA7CivmtYHmmJ/nvqQgPiByeXV1c2VpZ3VuXCA7CivlpZHntITph5EgPiBrZWl5YWt1a2luXCA7CivmsbrorbDmlocgPiBrZXRzdWdpYnVuXCA7CivokrjnlZnphZIgPiBqb3VyeXV1c2h1XCA7Civph53okYnmqLkgPiBzaGluJyd5b3VqdVwgOwor54yb5YuJ5by3ID4gbW91YmVua3lvdVwgOwor5rex5Yi75YyWID4gc2hpbmtva3VrYVwgOwor5omA5b6X6aGUID4gdG9rb3JvZWdhb1wgOwor5b6h5a6i5qeYID4gb2t5YWt1c2FtYVwgOwor6JS15pu456WoID4gem91c2hvaHlvdVwgOwor5Lq65bel6ZuqID4gamlua291eXVraVwgOwor5ZCM6IW55LuUID4gZG91ZnVrdXNoaVwgOwor5bCE5YCW5b+DID4gc2hha291c2hpblwgOwor5Y2a5aOr5Y+3ID4gaGFrdXNoaWdvdVwgOwor5YWl5ryB6ICFID4gbnl1dWd5b3NoYVwgOwor5Yil6Zmk5qipID4gYmV0c3Vqb2tlblwgOwor5oim6ZeY5pyNID4gc2VudG91ZnVrdVwgOwor6aSK6baP5qWtID4geW91a2VpZ3lvdVwgOwor6K2w5rG65qipID4gZ2lrZXRzdWtlblwgOwor5YWl5ZyS5paZID4gbnl1dWVucnlvdVwgOwor5YSq5YWI55qEID4geXV1c2VudGVraVwgOwor5ZCM5LiA6KaWID4gZG91aXRzdXNoaVwgOwor6Zuj6KGM6YGTID4gbmFuZ3lvdWRvdVwgOwor6YG65aSx5ZOBID4gaXNoaXRzdWhpblwgOwor6aOf5paH5YyWID4gc2hva3VidW5rYVwgOwor5rCR5Li75Zu9ID4gbWluc2h1a29rdVwgOwor5YaN5biw54axID4gc2Fpa2luZXRzdVwgOwor54Kt5YyW54mpID4gdGFua2FidXRzdVwgOwor5pat54mH55qEID4gZGFucGVudGVraVwgOwor5rq65q275L2TID4gZGVraXNoaXRhaVwgOwor5rW35rSL5a2mID4ga2FpeW91Z2FrdVwgOwor5q2v56We57WMID4gc2hpc2hpbmtlaVwgOwor5Y+N5oqX55qEID4gaGFua291dGVraVwgOwor6ZaL5YKs5Zu9ID4ga2Fpc2Fpa29rdVwgOwor5b6h5Lih6KaqID4gZ29yeW91c2hpblwgOwor5L+u5q2j5rayID4gc2h1dXNlaWVraVwgOwor5Y6a55Sf55yBID4ga291c2Vpc2hvdVwgOwor6auY57Sa6LuKID4ga291a3l1dXNoYVwgOwor6Luf5paH5a2mID4gbmFuYnVuZ2FrdVwgOwor6Kmm5L2c5ZOBID4gc2hpc2FrdWhpblwgOwor6Kaz6Kan5paZID4ga2FucmFucnlvdVwgOwor5LiN5L+h5Lu7ID4gZnVzaGluJyduaW5cIDsKK+S4ieiEmuaetiA+IHNhbmt5YWt1a2FcIDsKK+WkieaFi+eahCA+IGhlbnRhaXRla2lcIDsKK+S5numrmOiplSA+IGtvdWtvdWh5b3VcIDsKK+avm+awiOiLlCA+IG1vdXNlbmdva2VcIDsKK+S4ieWwuuW4ryA+IHNhbmpha3VvYmlcIDsKK+W/nOaApeetliA+IG91a3l1dXNha3VcIDsKK+S6uumBk+eahCA+IGppbmRvdXRla2lcIDsKK+a1t+mFuOa8vyA+IHVtaWhvb3p1a2lcIDsKK+aJv+iqjeeKtiA+IHNob3VuaW5qb3VcIDsKK+maj+ethuWutiA+IHp1aWhpdHN1a2FcIDsKK+aguOiejeWQiCA+IGtha3V5dXVnb3VcIDsKK+aKvemBuOWIuCA+IGNodXVzZW5rZW5cIDsKK+WFjeioseiovCA+IG1lbmt5b3Nob3VcIDsKK+e+juWuueihkyA+IGJpeW91anV0c3VcIDsKK+ijj+iyuOWxiyA+IHVyYWdhc2hpeWFcIDsKK+mYsuavkumdoiA+IGJvdWRva3VtZW5cIDsKK+W8geaFtuifuSA+IGJlbmtlaWdhbmlcIDsKK+S6jOe3muW8jyA+IG5pc2Vuc2hpa2lcIDsKK+W/heimgeS6iyA+IGhpdHN1eW91amlcIDsKK+eZuuaYjuWutiA+IGhhdHN1bWVpa2FcIDsKK+eLrOijgeiAhSA+IGRva3VzYWlzaGFcIDsKK+ecuuacm+aoqSA+IGNob3Vib3VrZW5cIDsKK+WGhemAmuiAhSA+IG5haXRzdXVzaGFcIDsKK+S4remVt+acnyA+IGNodXVjaG91a2lcIDsKK+ePvuixoeirliA+IGdlbnNob3Vyb25cIDsKK+mtlOihk+W4qyA+IG1hanV0c3VzaGlcIDsKK+WbveWcn+W6gSA+IGtva3Vkb2Nob3VcIDsKK+epjeWIhuazlSA+IHNla2lidW5ob3VcIDsKK+S/oeWPt+eBryA+IHNoaW5nb3V0b3VcIDsKK+WNiumZsOmZvSA+IGhhbicnaW4nJ3lvdVwgOwor5bmz6Z2i6Y+hID4gaGVpbWVua3lvdVwgOwor5a6F6YWN5L6/ID4gdGFrdWhhaWJpblwgOwor6JCO57iu55eHID4gaXNodWt1c2hvdVwgOwor5aSp55uu5bGxID4gdGVubW9rdXphblwgOwor5YGP5bmz6LazID4gaGVucGVpc29rdVwgOwor5rOV5a2m5aOrID4gaG91Z2FrdXNoaVwgOwor55m654WZ562SID4gaGF0c3VlbnRvdVwgOwor5YG06aCt6JGJID4gc29rdXRvdXlvdVwgOwor5aSp55qH5p2vID4gdGVuJydub3VoYWlcIDsKK+e0sOiDnuaguCA+IHNhaWJvdWtha3VcIDsKK+eLrOaTheWgtCA+IGRva3VzZW5qb3VcIDsKK+ijvemLvOalrSA+IHNlaWtvdWd5b3VcIDsKK+WFieeGseiyuyA+IGtvdW5ldHN1aGlcIDsKK+aEm+mDt+W/gyA+IGFpa3lvdXNoaW5cIDsKK+eUn+eUo+mrmCA+IHNlaXNhbmRha2FcIDsKK+a1t+awtOa1tCA+IGthaXN1aXlva3VcIDsKK+S7rue5g+W4ryA+IGthcmlob3V0YWlcIDsKK+WPiuesrOiAhSA+IGt5dXVkYWlzaGFcIDsKK+exs+mZuOi7jSA+IGJlaXJpa3VndW5cIDsKK+azqOaWh+WTgSA+IGNodXVtb25oaW5cIDsKK+aBkuW4uOeahCA+IGtvdWpvdXRla2lcIDsKK+S6uuW9ouW4qyA+IG5pbmd5b3VzaGlcIDsKK+amtOaVo+W8viA+IHJ5dXVzYW5kYW5cIDsKK+eZuumbu+apnyA+IGhhdHN1ZGVua2lcIDsKK+aXp+W4guihlyA+IGt5dXVzaGlnYWlcIDsKK+ims+imp+W4rSA+IGthbnJhbnNla2lcIDsKK+Wun+eUqOWMliA+IGppdHN1eW91a2FcIDsKK+iAg+ePvuWtpiA+IGtvdWdlbmdha3VcIDsKK+mWi+WCrOS4rSA+IGthaXNhaWNodXVcIDsKK+eUo+alreeVjCA+IHNhbmd5b3VrYWlcIDsKK+W6tuawkeWKhyA+IHNob21pbmdla2lcIDsKK+S4jeS7leacqyA+IGZ1c2hpbWF0c3VcIDsKK+WRhuawl+iAhSA+IHV0c3VrZW1vbm9cIDsKK+ino+WJluWtpiA+IGthaWJvdWdha3VcIDsKK+S7ruWfi+iRrCA+IGthcmltYWlzb3VcIDsKK+mHo+mBk+WFtyA+IHRzdXJpZG91Z3VcIDsKK+eUn+eUo+mhjSA+IHNlaXNhbmdha3VcIDsKK+aCsuWKh+eahCA+IGhpZ2VraXRla2lcIDsKK+WMl+awt+a0iyA+IGhvcHB5b3V5b3VcIDsKK+WNgeS6jOaciCA+IGp1dW5pZ2F0c3VcIDsKK+WQjOWtpuW5tCA+IGRvdWdha3VuZW5cIDsKK+ePvuS7o+eahCA+IGdlbmRhaXRla2lcIDsKK+WkouWIpOaWrSA+IHl1bWVoYW5kYW5cIDsKK+Wys+WPi+S8miA+IGdha3V5dXVrYWlcIDsKK+WLmOWumuWwuyA+IGthbmpvdWppcmlcIDsKK+WQiOWuv+aJgCA+IGdhc3NodWt1am9cIDsKK+igseaDkeeahCA+IGtvd2FrdXRla2lcIDsKK+epuumWk+i7uCA+IGt1dWthbmppa3VcIDsKK+S4remWk+WxpCA+IGNodXVrYW5zb3VcIDsKK+eJuee0mumFkiA+IHRva2t5dXVzaHVcIDsKK+e9suWQjeWbvSA+IHNob21laWtva3VcIDsKK+a8lOWKh+eahCA+IGVuZ2VraXRla2lcIDsKK+S6pOaIpuWbvSA+IGtvdXNlbmtva3VcIDsKK+WkluW9oueahCA+IGdhaWtlaXRla2lcIDsKK+S4remWk+WtkCA+IGNodXVrYW5zaGlcIDsKK+aVtOa1geWtkCA+IHNlaXJ5dXVzaGlcIDsKK+WEquWFiOagqiA+IHl1dXNlbmthYnVcIDsKK+efreWFteaApSA+IHRhbnBlaWt5dXVcIDsKK+W8geaFtue4niA+IGJlbmtlaWppbWFcIDsKK+eJoeS4uembqiA+IGJvdGFuJyd5dWtpXCA7CivmlpzmoLzmgKcgPiBzaGFrYWt1c2VpXCA7Civpq5jop5LnoLIgPiBrb3VrYWt1aG91XCA7CivmrbTlubTpvaIgPiByZWtpbmVucmVpXCA7CivnhKHliIbliKUgPiBtdWZ1bmJldHN1XCA7CivliLrmiJ/mgKcgPiBzaGlnZWtpc2VpXCA7CivpgJrooYznqI4gPiB0c3V1a291emVpXCA7CivotoXoh6rnhLYgPiBjaG91c2hpemVuXCA7CivliYrmsLfmqZ8gPiBzYWt1aHlvdWtpXCA7CivlpZHntITogIUgPiBrZWl5YWt1c2hhXCA7CivlpJznm5fomasgPiB5b3RvdW11c2hpXCA7CivlronlhajnjocgPiBhbnplbnJpdHN1XCA7Civljp/lrZDnl4cgPiBnZW5zaGlzaG91XCA7Civljp/lrZDnl4UgPiBnZW5zaGlieW91XCA7CivlraPnr4DmhJ8gPiBraXNldHN1a2FuXCA7Civml6fli5jlrpogPiBreXV1a2Fuam91XCA7Civku67oqr/ljbAgPiBrYXJpY2hvdWluXCA7CivkuZfou4ros4MgPiBqb3VzaGFjaGluXCA7CivpmLLomavliaQgPiBib3VjaHV1emFpXCA7CivmoLjmiKbkuokgPiBrYWt1c2Vuc291XCA7Civnmbrlo7Lml6UgPiBoYXRzdWJhaWJpXCA7CivlrprotrPmlbAgPiB0ZWlzb2t1c3V1XCA7Civph4znpZ7mpb0gPiBzYXRva2FndXJhXCA7CivolqnmkanoiosgPiBzYXRzdW1haW1vXCA7Civlp6bpgJrnvaogPiBrYW50c3V1emFpXCA7CivlsbHmnpflraYgPiBzYW5yaW5nYWt1XCA7Civlia/orbDplbcgPiBmdWt1Z2ljaG91XCA7CivoiKrnqbrnl4UgPiBrb3VrdXVieW91XCA7CivmvKLotorpn7MgPiBrYW4nJ2V0c3VvblwgOwor5Ye65YWl5Y+jID4gZGVpcmlndWNoaVwgOwor5Luu57SN56iOID4ga2FyaW5vdXplaVwgOwor57eP5ZCI55qEID4gc291Z291dGVraVwgOwor5Luy6KOB6ICFID4gY2h1dXNhaXNoYVwgOwor5Ye65bGV6ICFID4gc2h1dHRlbnNoYVwgOwor5rS75a2X5L2TID4ga2F0c3VqaXRhaVwgOwor6IKY6YmE56CyID4gaGlqaWRlcHBvdVwgOwor5a++6Lmg5ZywID4gdGFpc2VraWNoaVwgOwor5bu75ryV5qWtID4ga2Fpc291Z3lvdVwgOwor5L2O6Zqc56KNID4gdGVpc2hvdWdhaVwgOwor5q6L5L2Z6aGNID4gemFuJyd5b2dha3VcIDsKK+ayu+eZguazlSA+IGNoaXJ5b3Vob3VcIDsKK+apn+aisOayuSA+IGtpa2FpYWJ1cmFcIDsKK+iHqueZuuaApyA+IGppaGF0c3VzZWlcIDsKK+S/oeWPt+aJiyA+IHNoaW5nb3VzaHVcIDsKK+agg+acqOecjCA+IHRvY2hpZ2lrZW5cIDsKK+iqv+afu+elqCA+IGNob3VzYWh5b3VcIDsKK+e3qOW5tOWPsiA+IGhlbicnbmVuc2hpXCA7CivlnJ/nnYDmsJEgPiBkb2NoYWt1bWluXCA7CivpgLLlkYjmnKwgPiBzaGludGVpYm9uXCA7CivnkZ7lrp3nq6AgPiB6dWlob3VzaG91XCA7CivokL3pgbjogIUgPiByYWt1c2Vuc2hhXCA7CivlhoXli5jlrpogPiB1Y2hpa2Fuam91XCA7CivlpYnntI3poY0gPiBob3Vub3VnYWt1XCA7CivntLDog57lraYgPiBzYWlib3VnYWt1XCA7Civmnpzlrp/lupcgPiBrYWppdHN1dGVuXCA7Civlrp/mmYLplpMgPiBqaXRzdWppa2FuXCA7CivlhaXmvIHmqKkgPiBueXV1Z3lva2VuXCA7CivokZfkvZzogIUgPiBjaG9zYWt1c2hhXCA7CivohLHohILkubMgPiBkYXNzaGlueXV1XCA7Civnpa3npYDmlpkgPiBzYWlzaGlyeW91XCA7CivlhoXlvIHmhbYgPiB1Y2hpYmVua2VpXCA7CivlkJHkuIrlv4MgPiBrb3Vqb3VzaGluXCA7CivniafnvorogIUgPiBib2t1eW91c2hhXCA7Civlj4LoprPkurogPiBzYW5rYW4nJ25pblwgOwor5Z2H5LiA5YyWID4ga2luJydpdHN1a2FcIDsKK+WFseWQjOiAhSA+IGt5b3Vkb3VzaGFcIDsKK+aYjuacneS9kyA+IG1pbmNob3V0YWlcIDsKK+WhqeiDoeakkiA+IHNoaW9rb3Nob3VcIDsKK+iAkOmch+aApyA+IHRhaXNoaW5zZWlcIDsKK+aWsOilv+iYrSA+IG55xatqxKtyYW5kb1wgOwor5LiA5p6a6LKdID4gaWNoaW1haWdhaVwgOwor5Lmx5pq06ICFID4gcmFuYm91bW9ub1wgOwor5ZCE5LiA6YOoID4ga2FrdWljaGlidVwgOwor6Zmw5pel5ZCRID4ga2FnZWhpbmF0YVwgOwor57Sr5a645q6/ID4gc2hpc2hpbmRlblwgOwor5bm96ZyK5qCqID4geXV1cmVpa2FidVwgOwor5omA5b6X6ICFID4gc2hvdG9rdXNoYVwgOwor6LuN5LqL5YqbID4gZ3VuamlyeW9rdVwgOwor5Yud6LKg5LqLID4gc2hvdWJ1Z290b1wgOwor57Wm5rC06LuKID4ga3l1dXN1aXNoYVwgOwor57Sw6IOe5aOBID4gc2FpYm91aGVraVwgOwor5Y+v6YCG5oCnID4ga2FneWFrdXNlaVwgOwor5oe46LOe6YeRID4ga2Vuc2hvdWtpblwgOwor5pqm5bm06b2iID4gcmVraW5lbnJlaVwgOwor5ZCr5Ze96JasID4gZ2Fuc291eWFrdVwgOwor6KaL5a2m6ICFID4ga2VuZ2FrdXNoYVwgOwor5YSq5YWI5bitID4geXV1c2Vuc2VraVwgOwor5bCR5pWw6ICFID4gc2hvdXN1dXNoYVwgOwor5YWx5ZCM57eaID4ga3lvdWRvdXNlblwgOwor5Y+K56ys54K5ID4ga3l1dWRhaXRlblwgOwor5YiG6aGe6KGoID4gYnVucnVpaHlvdVwgOwor6L+R55y86Y+hID4ga2luZ2Fua3lvdVwgOwor6Zai5pWw5pePID4ga2Fuc3V1em9rdVwgOwor55S65p2R5Yi2ID4gY2hvdXNvbnNlaVwgOwor5qW15oKq5Lq6ID4gZ29rdWFrdW5pblwgOwor5byV5Y+X5Lq6ID4gaGlraXVrZW5pblwgOwor57eo5bm05L2TID4gaGVuJyduZW50YWlcIDsKK+S7o+mhmOS6uiA+IGRhaWdhbicnbmluXCA7CivmnInlipvppqwgPiB5dXVyeW9rdWJhXCA7CivpmaTpm6rou4ogPiBqb3NldHN1c2hhXCA7CivlpKflr6npmaIgPiBkYWlzaGluJydpblwgOwor56iO6Zai6ZW3ID4gemVpa2FuY2hvdVwgOwor5Lit6ZaT5L2TID4gY2h1dWthbnRhaVwgOwor5ruL6aSK54mpID4gaml5b3VidXRzdVwgOwor5Lmd5bel5aSnID4ga3l1dWtvdWRhaVwgOwor5Yqg5rm/5ZmoID4ga2FzaGl0c3VraVwgOwor5paw6KiC54mIID4gc2hpbnRlaWJhblwgOwor5Y2B5Lq65YqbID4ganV1bmlucmlraVwgOwor5LiL5a6/5Lq6ID4gZ2VzaHVrdW5pblwgOwor5aSn5qWt54mpID4gb293YXphbW9ub1wgOwor5YG06Z2i6KazID4gc29rdW1lbmthblwgOwor54++6LGh55WMID4gZ2Vuc2hvdWthaVwgOwor6L+96Kmm6aiTID4gdHN1aXNoaWtlblwgOwor5YWI5aSp55qEID4gc2VudGVudGVraVwgOwor5bu656+J5a62ID4ga2VuY2hpa3VrYVwgOwor5rC06YeP6KiIID4gc3VpcnlvdWtlaVwgOwor6Kaq6KGb6ZqKID4gc2hpbicnZWl0YWlcIDsKK+WFiOWkqeeXhSA+IHNlbnRlbmJ5b3VcIDsKK+e5geauluacnyA+IGhhbnNob2t1a2lcIDsKK+iIueW5vemciiA+IGZ1bmF5dXVyZWlcIDsKK+awkeaXj+aApyA+IG1pbnpva3VzZWlcIDsKK+W+oeS6huaJvyA+IGdvcnlvdXNob3VcIDsKK+awtOibh+W6pyA+IG1penVoZWJpemFcIDsKK+aLneWklueahCA+IGhhaWdhaXRla2lcIDsKK+WIuuaIn+WJpCA+IHNoaWdla2l6YWlcIDsKK+aJgOW+l+eojiA+IHNob3Rva3V6ZWlcIDsKK+ajieWun+ayuSA+IG1lbmppdHN1eXVcIDsKK+WLpOe2muiAhSA+IGtpbnpva3VzaGFcIDsKK+Wkqeeah+WItiA+IHRlbicnbm91c2VpXCA7CivllqvnhZnou4ogPiBraXRzdWVuc2hhXCA7Civlrp/nv5LnlJ8gPiBqaXNzaHV1c2VpXCA7CivkvZPns7vnmoQgPiB0YWlrZWl0ZWtpXCA7CivpgYroiIjnqI4gPiB5dXVreW91emVpXCA7Civkv67pgZPlo6sgPiBzaHV1ZG91c2hpXCA7CivmlrDmlZnlvpIgPiBzaGlua3lvdXRvXCA7CivljZropqfkvJogPiBoYWt1cmFua2FpXCA7CivliY3nmbvpjLIgPiB6ZW50b3Vyb2t1XCA7CivmnbHmtIvlraYgPiB0b3V5b3VnYWt1XCA7CivlpKflsIbou40gPiBkYWlzaG91Z3VuXCA7Civkv6Hlj7floZQgPiBzaGluZ291dG91XCA7Civljp/lrZDmoLggPiBnZW5zaGlrYWt1XCA7CivlpKflhazlm70gPiB0YWlrb3Vrb2t1XCA7CivkvJHmga/miYAgPiBreXV1c29rdWpvXCA7Civpq5jpmpzlrrMgPiBrb3VzaG91Z2FpXCA7CivmsYLpgZPogIUgPiBreXV1ZG91c2hhXCA7CivlpKnlrojplqMgPiB0ZW5zaHVrYWt1XCA7Civkub7nianlsYsgPiBrYW5idXRzdXlhXCA7CivmsLTpiYTnoLIgPiBtaXp1ZGVwcG91XCA7CivljYPkuInlsYsgPiBzZW5taXRzdXlhXCA7CivlhaXmuK/nqI4gPiBueXV1a291emVpXCA7CivpioDooYzmpa0gPiBnaW5rb3VneW91XCA7CivkvJHms4rmiYAgPiBreXV1aGFrdWpvXCA7Civkurrlt6XnmoQgPiBqaW5rb3V0ZWtpXCA7CivogbToppbogIUgPiBjaG91c2hpc2hhXCA7CivkuKHlm73oqp4gPiByeW91a29rdWdvXCA7Civpq5jngKzoiJ8gPiB0YWthc2VidW5lXCA7CivntYTnuZTlkI0gPiBzb3NoaWtpbWVpXCA7CivlkIzmnJ/lvI8gPiBkb3VraXNoaWtpXCA7CivlpKfohbjoj4wgPiBkYWljaG91a2luXCA7CivljYrni4LkubEgPiBoYW5reW91cmFuXCA7CivotIXmsqLlk4EgPiB6ZWl0YWt1aGluXCA7CivkuIDmnKzpgZMgPiBpcHBvbm1pY2hpXCA7CivliKnmvaTnjocgPiByaWp1bnJpdHN1XCA7Civov6vlrrPogIUgPiBoYWt1Z2Fpc2hhXCA7CivlpKfmpbXmrr8gPiBkYWlnb2t1ZGVuXCA7Civph43ph4/mhJ8gPiBqdXVyeW91a2FuXCA7Civnvo7lrabnmoQgPiBiaWdha3V0ZWtpXCA7CivlhpnnlJ/luLMgPiBzaGFzZWljaG91XCA7Civlu4Pmo4TniakgPiBoYWlraWJ1dHN1XCA7Civpm7vno4Hnn7MgPiBkZW5qaXNoYWt1XCA7CivlhpnnlJ/luJYgPiBzaGFzZWljaG91XCA7CivpgKDllrbniakgPiB6b3VlaWJ1dHN1XCA7CivmioDooZPpnaIgPiBnaWp1dHN1bWVuXCA7Civku5Xnva7ogIUgPiBzaGlva2ltb25vXCA7CivmmYLliLvooaggPiBqaWtva3VoeW91XCA7Civmr5Lnp5HlraYgPiBkb2t1a2FnYWt1XCA7Civnm7TooYzkvr8gPiBjaG9ra291YmluXCA7CivmiYvlhoXogbcgPiB0ZW5haXNob2t1XCA7Civml4XooYzlhYggPiByeW9rb3VzYWtpXCA7CivmoLjlvL7poK0gPiBrYWt1ZGFudG91XCA7Civnqbrpm4blkIggPiBrdXVzaHV1Z291XCA7CivnibnoqLHmlpkgPiB0b2treW9yeW91XCA7CivkuLvmg4XnmoQgPiBzaHVqb3V0ZWtpXCA7Civmm7TooaPlrqQgPiBrb3Vpc2hpdHN1XCA7CivkvJrluK3ohrMgPiBrYWlzZWtpemVuXCA7CivljYPkuIDlpJwgPiBzZW4nJ2ljaGl5YVwgOwor55yf55Sw57SQID4gc2FuYWRhaGltb1wgOwor6YGT5a2m6ICFID4gZG91Z2FrdXNoYVwgOwor5o+u55m65oCnID4ga2loYXRzdXNlaVwgOwor5Ye66LOH6YeRID4gc2h1c3NoaWtpblwgOwor54mn576K54qsID4gYm9rdXlvdWtlblwgOwor6JK455WZ5rC0ID4gam91cnl1dXN1aVwgOwor562J5Zyn57eaID4gdG91YXRzdXNlblwgOwor5q+S5ZGz5b25ID4gZG9rdW1peWFrdVwgOwor5YSq6Imv5bqXID4geXV1cnlvdXRlblwgOwor5YaF6Iq46ICFID4gdWNoaWdlaXNoYVwgOwor5oKq6YGU6ICFID4gd2FydWRhc3NoYVwgOwor5LiJ6Z2i6Y+hID4gc2FubWVua3lvdVwgOwor54u46JWO6bqmID4gdGFudWtpc29iYVwgOwor6KOP5pu45Lq6ID4gdXJhZ2FraW5pblwgOwor54m55aSn5Y+3ID4gdG9rdWRhaWdvdVwgOwor57WE57mU5L2TID4gc29zaGlraXRhaVwgOwor54++5a6f5YyWID4gZ2Vuaml0c3VrYVwgOwor5aSa55uu55qEID4gdGFtb2t1dGVraVwgOwor5bCG5p2l5oCnID4gc2hvdXJhaXNlaVwgOwor5LiA5Lq66IW5ID4gaGl0b3JpYmFyYVwgOwor55S75LiA5YyWID4ga2FrdWl0c3VrYVwgOwor6YeN6YeR5bGeID4ganV1a2luem9rdVwgOwor56uL5Lya5Lq6ID4gdGFjaGlhaW5pblwgOwor5q205Y+y5LiKID4gcmVraXNoaWpvdVwgOwor6KO96YmE5omAID4gc2VpdGV0c3Vqb1wgOwor5LiA5Lq66ICFID4gaGl0b3JpbW9ub1wgOwor6YGu5pat5aOBID4gc2hhZGFucGVraVwgOwor54m55aOy5aC0ID4gdG9rdWJhaWpvdVwgOwor5ZGK55+l5p2/ID4ga29rdWNoaWJhblwgOwor5rKW56mN5pyfID4gY2h1dXNla2lraVwgOwor5Luu6KiY5YWlID4ga2FyaWtpbnl1dVwgOwor5L+u6YGT5LyaID4gc2h1dWRvdWthaVwgOwor5qGf5qKv5a2QID4gc2FuYmFzaGlnb1wgOwor55Wq5Y+35pytID4gYmFuZ291ZnVkYVwgOwor5bCR5pWw54K5ID4gc2hvdXN1dXRlblwgOwor5bGx54yr5bqnID4geWFtYW5la296YVwgOwor5a+d5Y+w5Yi4ID4gc2hpbmRhaWtlblwgOwor5rC06YqA5p+xID4gc3VpZ2luY2h1dVwgOwor6LWk5rW35LqAID4gYWthdW1pZ2FtZVwgOwor6aqo55u45a2mID4ga29zc291Z2FrdVwgOwor5aSn6Ie85q2vID4gZGFpa3l1dXNoaVwgOwor5rCR5peP5Y+yID4gbWluem9rdXNoaVwgOwor5LqU56ic6YOtID4gZ29yeW91a2FrdVwgOwor5omB5bmz6LazID4gaGVucGVpc29rdVwgOwor5aWR57SE5pu4ID4ga2VpeWFrdXNob1wgOwor5b2x5rOV5birID4ga2FnZWJvdXNoaVwgOwor6YeR5Ymb55+zID4ga29uZ291c2VraVwgOwor54m56Kix5bqBID4gdG9ra3lvY2hvdVwgOwor54m55aOy5ZOBID4gdG9rdWJhaWhpblwgOwor5LiL6KuL6LKgID4gc2hpdGF1a2VvaVwgOwor5Y+O56mr5pyfID4gc2h1dWtha3VraVwgOwor6Zm45oim6ZqKID4gcmlrdXNlbnRhaVwgOwor57Wm5rC0566hID4ga3l1dXN1aWthblwgOwor56We56eY55qEID4gc2hpbnBpdGVraVwgOwor6YeN6YeP5Zm4ID4ganV1cnlvdXRvblwgOwor5Y+O56mr5pmCID4gc2h1dWtha3VqaVwgOwor6auY5Zyn57iuID4ga291YXNzaHVrdVwgOwor6JGX5L2c5qipID4gY2hvc2FrdWtlblwgOwor5Luj5Z+36KGMID4gZGFpc2hpa2tvdVwgOwor6ZmQ5a6a55qEID4gZ2VudGVpdGVraVwgOwor6auY5Zyn57eaID4ga291YXRzdXNlblwgOwor5Luu5o6h55SoID4ga2FyaXNhaXlvdVwgOwor5pS56Z2p6ICFID4ga2Fpa2FrdXNoYVwgOwor5Zyw5LiL6YmEID4gY2hpa2F0ZXRzdVwgOwor5bCK546L5YWaID4gc29uJydub3V0b3VcIDsKK+WWq+eFmeiAhSA+IGtpdHN1ZW5zaGFcIDsKK+Wcn+S/temamyA+IGRvaHlvdWdpd2FcIDsKK+Wkp+WxseeMqyA+IG9veWFtYW5la29cIDsKK+iIquepuuWtpiA+IGtvdWt1dWdha3VcIDsKK+WOn+adkOaWmSA+IGdlbnphaXJ5b3VcIDsKK+WHuueUo+aVsCA+IHNodXNzYW5zdXVcIDsKK+ashOWPgueFpyA+IHJhbnNhbnNob3VcIDsKK+WHuueUn+aVsCA+IHNodXNzZWlzdXVcIDsKK+WuiOWCmeeOhyA+IHNodWJpcml0c3VcIDsKK+aWh+iKuOWtpiA+IGJ1bmdlaWdha3VcIDsKK+e0heWGoOmzpSA+IGtvdWthbmNob3VcIDsKK+WIneWgtOaJgCA+IGhhdHN1YmFzaG9cIDsKK+S5s+eKtua2siA+IG55dXVqb3Vla2lcIDsKK+WNmOWdkOW8jyA+IHRhbnphc2hpa2lcIDsKK+WcqOeVmeawkSA+IHphaXJ5dXVtaW5cIDsKK+e+jumhlOihkyA+IGJpZ2FuanV0c3VcIDsKK+eFruayuOWZqCA+IHNoYWZ1dHN1a2lcIDsKK+WEquiJr+WTgSA+IHl1dXJ5b3VoaW5cIDsKK+aIpuihk+WutiA+IHNlbmp1dHN1a2FcIDsKK+S7leS6i+W4qyA+IHNoaWdvdG9zaGlcIDsKK+eEoeeUn+eJqSA+IG11c2VpYnV0c3VcIDsKK+mbkeaWh+WutiA+IHphdHN1YnVua2FcIDsKK+WQjOiqv+iAhSA+IGRvdWNob3VzaGFcIDsKK+S6iOe0hOW4rSA+IHlveWFrdXNla2lcIDsKK+mHkeefs+aWhyA+IGtpbnNla2lidW5cIDsKK+e3tOe/kuiIuSA+IHJlbnNodXVzZW5cIDsKK+a4rOa3seapnyA+IHNva3VzaGlua2lcIDsKK+eZuuimi+aWmSA+IGhha2tlbnJ5b3VcIDsKK+ihkuWtpuiAhSA+IGdlbmdha3VzaGFcIDsKK+Wwj+aVsOeCuSA+IHNob3VzdXV0ZW5cIDsKK+W8leWHuueJqSA+IGhpa2lkZW1vbm9cIDsKK+mWi+aetuW8jyA+IGthaWthc2hpa2lcIDsKK+WMheWQq+eahCA+IGhvdWdhbnRla2lcIDsKK+WQiOWlj+iqvyA+IGdhc3NvdWNob3VcIDsKK+WFseWSjOWbvSA+IGt5b3V3YWtva3VcIDsKK+WvqeWIpOWToSA+IHNoaW5wYW4nJ2luXCA7CivmuIXmnJ3kvZMgPiBzZWljaG91dGFpXCA7Civooajml6XmnKwgPiBvbW90ZW5paG9uXCA7Civnj77ku6PliocgPiBnZW5kYWlnZWtpXCA7CivljbPlirnolqwgPiBzb2trb3V5YWt1XCA7Civml6XpgYvli5UgPiBuaWNoaXVuZG91XCA7Civogbfpmo7liLYgPiBzaG9ra2Fpc2VpXCA7CivliY3ou4rou7ggPiB6ZW5zaGFqaWt1XCA7CivkuIrmmIfnt5ogPiBqb3VzaG91c2VuXCA7CivmqZ/lr4bmgKcgPiBraW1pdHN1c2VpXCA7CivmmI7ntLDooaggPiBtZWlzYWloeW91XCA7Civkv67ovp7lraYgPiBzaHV1amlnYWt1XCA7CivlkI3oqonogbcgPiBtZWl5b3Nob2t1XCA7Civlm5vlpKnnjosgPiBzaGl0ZW4nJ25vdVwgOwor5Lq655u45a2mID4gbmluc291Z2FrdVwgOwor5o6I5qWt5paZID4ganVneW91cnlvdVwgOwor6Ymb5Lit5q+SID4gZW5jaHV1ZG9rdVwgOwor5rK755mC5LujID4gY2hpcnlvdWRhaVwgOwor5biv6buE6ImyID4gdGFpb3VzaG9rdVwgOwor6LW35bel5byPID4ga2lrb3VzaGlraVwgOwor5Y+W5b6X6ICFID4gc2h1dG9rdXNoYVwgOwor5oKq5bmz562JID4gYWt1YnlvdWRvdVwgOwor5pyx5a2Q5a2mID4gc2h1c2hpZ2FrdVwgOwor6Lu96YeR5bGeID4ga2Vpa2luem9rdVwgOwor5YGl6ISa5a62ID4ga2Vua3lha3VrYVwgOwor5YWI6Kaa6ICFID4gc2Vua2FrdXNoYVwgOwor5LiN5pW06ISIID4gZnVzZWlteWFrdVwgOwor5Luy6ZaT5YaFID4gbmFrYW1hdWNoaVwgOwor5bCG5p2l5YOPID4gc2hvdXJhaXpvdVwgOwor5L2O5pWZ5LyaID4gdGVpa3lvdWthaVwgOwor5oCn6KGd5YuVID4gc2Vpc2hvdWRvdVwgOwor57SZ6Iqd5bGFID4ga2FtaXNoaWJhaVwgOwor5L2c5oiQ6ICFID4gc2FrdXNlaXNoYVwgOwor5Zue5pil5YmkID4ga2Fpc2h1bnphaVwgOwor5raI6LK76YePID4gc2hvdWhpcnlvdVwgOwor5Lim6KO95ZOBID4gbmFtaXNlaWhpblwgOwor5bCC5pyJ5qipID4gc2VuJyd5dXVrZW5cIDsKK+S5l+mmrOmdtCA+IGpvdWJhZ3V0c3VcIDsKK+WHuuizh+iAhSA+IHNodXNzaGlzaGFcIDsKK+WMluefs+WtpiA+IGthc2VraWdha3VcIDsKK+iBtOiouuWZqCA+IGNob3VzaGlua2lcIDsKK+eMqeeMqeighSA+IHNob3Vqb3ViYWVcIDsKK+S5seaVsOihqCA+IHJhbnN1dWh5b3VcIDsKK+Wfi+eri+WcsCA+IHVtZXRhdGVjaGlcIDsKK+WFseWQjOaApyA+IGt5b3Vkb3VzZWlcIDsKK+eGn+e3tOiAhSA+IGp1a3VyZW5zaGFcIDsKK+adseWMl+adsSA+IHRvdWhva3V0b3VcIDsKK+eUn+S9k+iGnCA+IHNlaXRhaW1ha3VcIDsKK+awkeihhumnhSA+IG1pbnNodXVla2lcIDsKK+Wuh+WumemjnyA+IHVjaHV1c2hva3VcIDsKK+aXpeWFiea1tCA+IG5pa2tvdXlva3VcIDsKK+S7o+aVsOWtpiA+IGRhaXN1dWdha3VcIDsKK+iDveW9ueiAhSA+IG5vdXlha3VzaGFcIDsKK+ayluepjeWcnyA+IGNodXVzZWtpZG9cIDsKK+W8leWKm+WcjyA+IGlucnlva3VrZW5cIDsKK+S4reaKmOW4vSA+IG5ha2FvcmVib3VcIDsKK+mdnua0u+WLlSA+IGhpa2F0c3Vkb3VcIDsKK+S4jeWni+acqyA+IGZ1c2hpbWF0c3VcIDsKK+acieWKn+eroCA+IHl1dWtvdXNob3VcIDsKK+aKleelqOiAhSA+IHRvdWh5b3VzaGFcIDsKK+aUu+aSg+maiiA+IGtvdWdla2l0YWlcIDsKK+WgseWRiuiAhSA+IGhvdWtva3VzaGFcIDsKK+eZuuihqOiAhSA+IGhhcHB5b3VzaGFcIDsKK+aDo+euoemgmCA+IHNvdWthbnJ5b3VcIDsKK+mBuOaKnuiCoiA+IHNlbnRha3VzaGlcIDsKK+aKgOihk+iAhSA+IGdpanV0c3VzaGFcIDsKK+mAsuatqeeahCA+IHNoaW5wb3Rla2lcIDsKK+Wfi+iUtemHjyA+IG1haXpvdXJ5b3VcIDsKK+S7leS6i+WPsCA+IHNoaWdvdG9kYWlcIDsKK+aAp+aIkOeGnyA+IHNlaXNlaWp1a3VcIDsKK+awuOW5tOmWkyA+IG5hZ2FuZW5rYW5cIDsKK+iDjOaVmeiAhSA+IGhhaWt5b3VzaGFcIDsKK+aJi+W3pealrSA+IHNodWtvdWd5b3VcIDsKK+eUs+iri+iAhSA+IHNoaW5zZWlzaGFcIDsKK+a8lOWHuuWutiA+IGVuc2h1dHN1a2FcIDsKK+S4gOWuieW/gyA+IGhpdG9hbnNoaW5cIDsKK+ihjOalveWcsCA+IGtvdXJha3VjaGlcIDsKK+mjn+euoeazlSA+IHNob2trYW5ob3VcIDsKK+ims+a4rOiIuSA+IGthbnNva3VzZW5cIDsKK+ertuWQiOiAhSA+IGt5b3Vnb3VzaGFcIDsKK+WBpeiEs+WJpCA+IGtlbicnbm91emFpXCA7Civph5HliZvmnZYgPiBrb25nb3VkenVlXCA7CivorJ3ogonnpa0gPiBzaGFuaWt1c2FpXCA7CivopIflhpnntJkgPiBmdWt1c2hhc2hpXCA7CivpgLHliIroqowgPiBzaHV1a2Fuc2hpXCA7Civlj47nqI7miYAgPiBzaHV1emVpc2hvXCA7CivpgJrooYzkurogPiB0c3V1a291bmluXCA7CivpkZHlrprmlpkgPiBrYW50ZWlyeW91XCA7CivlkIzkuIDkurogPiBkb3VpdHN1bmluXCA7Civpq5jmva7nt5ogPiBrb3VjaG91c2VuXCA7CivmtbjpgI/mgKcgPiBzaGludG91c2VpXCA7CivooYDoibLntKAgPiBrZXNzaGlraXNvXCA7CivohLPpnIfnm6ogPiBub3VzaGludG91XCA7Civos4PosrjkurogPiBjaGludGFpbmluXCA7Civlh7rnlJ/lnLAgPiBzaHVzc2VpY2hpXCA7Civnt7Tnv5LnlJ8gPiByZW5zaHV1c2VpXCA7CivluqfluK3ooaggPiB6YXNla2loeW91XCA7CivoprPmuKzogIUgPiBrYW5zb2t1c2hhXCA7CivlnLDnjYTogLMgPiBqaWdva3VtaW1pXCA7Civpq5jntJrlk4EgPiBrb3VreXV1aGluXCA7CivpgaDml6XngrkgPiBlbmppdHN1dGVuXCA7CivmvKLlrabogIUgPiBrYW5nYWt1c2hhXCA7CivniafloLTps6UgPiBtYWtpYmF0b3JpXCA7CivmrbvliJHlm5ogPiBzaGlrZWlzaHV1XCA7CivmsLfnoILns5YgPiBrb29yaXphdG91XCA7CivlhbHokZfogIUgPiBreW91Y2hvc2hhXCA7Civpqqjpq4Tngo4gPiBrb3RzdXp1aWVuXCA7CivmlL7niaflnLAgPiBob3Vib2t1Y2hpXCA7Civnmb3ooYDnkIMgPiBoYWtrZWtreXV1XCA7CivmurblsqnmtYEgPiB5b3VnYW5yeXV1XCA7CivmrbvlgrfogIUgPiBzaGlzaG91c2hhXCA7CivlvI/pg6jlrpggPiBzaGlraWJ1a2FuXCA7CivohIblvLHmgKcgPiB6ZWlqYWt1c2VpXCA7CivntabmsLTmoJMgPiBreXV1c3Vpc2VuXCA7CivoprPmuKzntrIgPiBrYW5zb2t1bW91XCA7CivmgKXooYzliLggPiBreXV1a291a2VuXCA7CivlvqHpnq3mkrsgPiBnb2JlbnRhdHN1XCA7Civnt5HljYHlrZcgPiByeW9rdWp1dWppXCA7CivmtYHnt5rlvaIgPiByeXV1c2Vua2VpXCA7Civljp/lp4vnmoQgPiBnZW5zaGl0ZWtpXCA7CivniafnvorlnLAgPiBib2t1eW91Y2hpXCA7Civln7znjonnnIwgPiBzYWl0YW1ha2VuXCA7CivmlLvmkoPou40gPiBrb3VnZWtpZ3VuXCA7CivmlbXoiabpmoogPiB0ZWtpa2FudGFpXCA7Civpo5/lmajmo5ogPiBzaG9ra2lkYW5hXCA7CivkvJ3pgIHlhYggPiBkZW5zb3VzYWtpXCA7CivnqLLojbfprqggPiBpbmFyaXp1c2hpXCA7Civlvqnoqr/lmaggPiBmdWt1Y2hvdWtpXCA7CivlpKfnl4XkurogPiBkYWlieW91bmluXCA7CivlhbHlirTogIUgPiBreW91cm91c2hhXCA7Civnl4Xljp/oj4wgPiBieW91Z2Vua2luXCA7CivmnJ3prq7kurogPiBjaG91c2VuamluXCA7CivlhKrotormqKkgPiB5dXVldHN1a2VuXCA7CivkuIDkurrml4UgPiBoaXRvcml0YWJpXCA7Civmloflraboq5YgPiBidW5nYWt1cm9uXCA7CivogonmhJ/nmoQgPiBuaWtrYW50ZWtpXCA7CivmgKXooYzkvr8gPiBreXV1a291YmluXCA7CivnlLLkuZnkuJkgPiBrb3VvdHN1aGVpXCA7CivkuK3ms6LplbcgPiBjaHV1aGFjaG91XCA7CivnhKHogbfogIUgPiBtdXNob2t1c2hhXCA7Civlj47nqI7lrpggPiBzaHV1emVpa2FuXCA7Civlrabpg6jplbcgPiBnYWt1YnVjaG91XCA7CivotoXmoLzlrZAgPiBjaG91a291c2hpXCA7Civpl4rokYnmqLkgPiBrYXRzdXlvdWp1XCA7CivlhbHps7TogIUgPiBreW91bWVpc2hhXCA7CivnhKHkvZPniakgPiBtdXRhaWJ1dHN1XCA7Civmta7msJflpbMgPiB1d2FraW9uJyduYVwgOwor55m756uc6ZaAID4gdG91cnl1dW1vblwgOwor5LiA576p55qEID4gaWNoaWdpdGVraVwgOwor56ys5LiA5p2hID4gZGFpaWNoaWpvdVwgOwor5YaF55So6JasID4gbmFpeW91eWFrdVwgOwor5bqn5qiZ6Lu4ID4gemFoeW91amlrdVwgOwor562W5rqQ5ZywID4gc2FrdWdlbmNoaVwgOwor5YSq55Sf5a2mID4geXV1c2VpZ2FrdVwgOwor5YiG6ZqK6ZW3ID4gYnVudGFpY2hvdVwgOwor5YmN5YCf6YeRID4gemVuc2hha2tpblwgOwor5Luy6KOB5Lq6ID4gY2h1dXNhaW5pblwgOwor6LWk6YGT56WtID4gc2VraWRvdXNhaVwgOwor5p2x5YyX5aSnID4gdG91aG9rdWRhaVwgOwor5a6f6Ki86KuWID4gamlzc2hvdXJvblwgOwor5LiN54eD54mpID4gZnVuZW5idXRzdVwgOwor5YWo5by36aKoID4gemVua3lvdWZ1dVwgOwor5bCP5aSp5ZywID4gc2hvdXRlbmNoaVwgOwor6YWi6YW45aGpID4gc2FrdXNhbicnZW5cIDsKK+i2hemfs+mAnyA+IGNob3VvbnNva3VcIDsKK+WvhuWRiuiAhSA+IG1pa2tva3VzaGFcIDsKK+WIhumhnuWtpiA+IGJ1bnJ1aWdha3VcIDsKK+W9q+mHkeW4qyA+IGNob3VraW5zaGlcIDsKK+WFsemAmuiqniA+IGt5b3V0c3V1Z29cIDsKK+elnuenmOWtpiA+IHNoaW5oaWdha3VcIDsKK+S4gOacrOapiyA+IGlwcG9uYmFzaGlcIDsKK+esrOS6lOWIlyA+IGRhaWdvcmV0c3VcIDsKK+e0s+Wjq+eUqCA+IHNoaW5zaGl5b3VcIDsKK+S4gOaemuWyqSA+IGljaGltYWlpd2FcIDsKK+a1gee3muWeiyA+IHJ5dXVzZW5rZWlcIDsKK+S4gOacrOanjSA+IGlwcG9uJyd5YXJpXCA7Civlm7Dnqq7ogIUgPiBrb25reXV1c2hhXCA7CivlhqzmlK/luqYgPiBmdXl1aml0YWt1XCA7CivlhbHlkIzkvZMgPiBreW91ZG91dGFpXCA7CivlsJHmlbDlhZogPiBzaG91c3V1dG91XCA7CivlhajmsJHooYYgPiB6ZW5taW5zaHV1XCA7Civnm7jlj43nmoQgPiBzb3VoYW50ZWtpXCA7Civmta7pgYrniakgPiBmdXl1dWJ1dHN1XCA7CivlirTlg43nnIEgPiByb3Vkb3VzaG91XCA7Civlravmga/lrZAgPiBtYWdvbXVzdWtvXCA7CivlirTlg43nm7ggPiByb3Vkb3VzaG91XCA7CivkvpvppIrloZogPiBrdXlvdWR6dWthXCA7Civpp4bpgJDoiaYgPiBrdWNoaWt1a2FuXCA7CivntKDkurrnm64gPiBzaGlyb3V0b21lXCA7CivpgLHliIrntJkgPiBzaHV1a2Fuc2hpXCA7Civnsr7ogonlupcgPiBzZWluaWt1dGVuXCA7Civlj4zmrrvpoZ4gPiBzb3VrYWt1cnVpXCA7CivlpajlirHph5EgPiBzaG91cmVpa2luXCA7CivkuI3nsr7pq60gPiBidXNob3VoaWdlXCA7Civog73li5XnmoQgPiBub3Vkb3V0ZWtpXCA7CivntITljYrliIYgPiB5YWt1aGFuYnVuXCA7CivntrLmvIHmpa0gPiBhbWlneW9neW91XCA7Civmjojmpa3kuK0gPiBqdWd5b3VjaHV1XCA7Civlsqnnn7PlnI8gPiBnYW5zZWtpa2VuXCA7Civlvbnnm67mn4QgPiB5YWt1bWVnYXJhXCA7CivkuIDmnKzmnb4gPiBpcHBvbm1hdHN1XCA7CivloannhY7ppIUgPiBzaGlvc2VuYmVpXCA7CivkuI3lpoLluLAgPiBob3RvdG9naXN1XCA7CivljZfjgIXopb8gPiBuYW4nJ25hbnNlaVwgOwor5Zyo5a2m55SfID4gemFpZ2FrdXNlaVwgOwor5YmD5YiA56ClID4ga2FtaXNvcmlkb1wgOwor5aSa55m65oCnID4gdGFoYXRzdXNlaVwgOwor5YSq6LaK5oSfID4geXV1ZXRzdWthblwgOwor54m557Sa5ZOBID4gdG9ra3l1dWhpblwgOwor5LiJ6KeS6YyQID4gc2Fua2FrdXN1aVwgOwor5b+F5rK76JasID4gaGl0Y2hpeWFrdVwgOwor5Y2Y5oyv5YuVID4gdGFuc2hpbmRvdVwgOwor5Li75by16ICFID4gc2h1Y2hvdXNoYVwgOwor5o6S5LuW5b6LID4gaGFpdGFyaXRzdVwgOwor5YSq6LaK5oCnID4geXV1ZXRzdXNlaVwgOwor5b2i5oWL5a2mID4ga2VpdGFpZ2FrdVwgOwor5bel5qWt55WMID4ga291Z3lvdWthaVwgOwor5bel5qWt55SoID4ga291Z3lvdXlvdVwgOwor56mN5Lmx6ZuyID4gc2VraXJhbicndW5cIDsKK+aLneims+aWmSA+IGhhaWthbnJ5b3VcIDsKK+mgmOa1t+e3miA+IHJ5b3VrYWlzZW5cIDsKK+inkuWIhuaVoyA+IGtha3VidW5zYW5cIDsKK+S4jeimi+itmCA+IGZ1a2Vuc2hpa2lcIDsKK+Wkp+WtpueUnyA+IGRhaWdha3VzZWlcIDsKK+acgOWMl+erryA+IHNhaWhva3V0YW5cIDsKK+ihqOmdouS4iiA+IGh5b3VtZW5qb3VcIDsKK+a/g+ehq+mFuCA+IG5vdXJ5dXVzYW5cIDsKK+awtOWMlueJqSA+IHN1aWthYnV0c3VcIDsKK+i2heS8neWwjiA+IGNob3VkZW5kb3VcIDsKK+aWh+WtpuiAhSA+IGJ1bmdha3VzaGFcIDsKK+eyl+ebrumbqiA+IHphcmFtZXl1a2lcIDsKK+WPsuWtpuiAhSA+IHNoaWdha3VzaGFcIDsKK+Wbveawkei7jSA+IGtva3VtaW5ndW5cIDsKK+WSgOWavOetiyA+IHNvc2hha3VraW5cIDsKK+S9j+aJgOmMsiA+IGp1dXNob3Jva3VcIDsKK+mnkOWBnOi7iiA+IGNodXV0ZWlzaGFcIDsKK+akjeaoueelrSA+IHNob2t1anVzYWlcIDsKK+inkumAn+W6piA+IGtha3Vzb2t1ZG9cIDsKK+Wkp+i1pOaWkSA+IGRhaXNla2loYW5cIDsKK+WcsOS4rea1tyA+IGNoaWNodXVrYWlcIDsKK+WVhuWjsuS6uiA+IHNob3ViYWluaW5cIDsKK+WPl+WPluS6uiA+IHVrZXRvcmluaW5cIDsKK+imi+acrOW4giA+IG1paG9uJydpY2hpXCA7CivmipXnpajmqKkgPiB0b3VoeW91a2VuXCA7CivmjqLnhafnga8gPiB0YW5zaG91dG91XCA7Civlhajli53ou40gPiB6ZW5zaG91Z3VuXCA7CivntabmsLTloZQgPiBreXV1c3VpdG91XCA7Civmva7lubLni6kgPiBzaGlvaGlnYXJpXCA7CivniaHnvorluqcgPiBvaGl0c3VqaXphXCA7Civlj47nqI7kurogPiBzaHV1emVpbmluXCA7Civpgbjmip7mqKkgPiBzZW50YWt1a2VuXCA7CivmjqHngrnooaggPiBzYWl0ZW5oeW91XCA7Civlt6Xlt6Xlm5sgPiBrdW5rdW5zaGlpXCA7CivoqJjpjLLnmoQgPiBraXJva3V0ZWtpXCA7CivosYbmnb/pioAgPiBtYW1laXRhZ2luXCA7Civntbblr77ph48gPiB6ZXR0YWlyeW91XCA7CivmnbHljJfkurogPiB0b3Vob2t1amluXCA7Civmtbfou43nnIEgPiBrYWlndW5zaG91XCA7Civph5HliZvlipsgPiBrb25nb3VyaWtpXCA7CivnnJ/mmpfpl4cgPiBtYWt1cmF5YW1pXCA7CivmpJznlqvlrpggPiBrZW4nJ2VraWthblwgOwor5a++6LGh5aSWID4gdGFpc2hvdWdhaVwgOwor5paw5r2f55yMID4gbmlpZ2F0YWtlblwgOwor6ZeH5YaN6LKpID4geWFtaXNhaWhhblwgOwor5YuV54mp5oSbID4gZG91YnV0c3VhaVwgOwor5L2/55So6YePID4gc2hpeW91cnlvdVwgOwor6JeB5Y2K57SZID4gd2FyYWJhbnNoaVwgOwor5paw6ZaL5ZywID4gc2hpbmthaWNoaVwgOwor6Z2e5bi46K2YID4gaGlqb3VzaGlraVwgOwor5LiA6Z2i6KazID4gaWNoaW1lbmthblwgOwor566h57WD5qW9ID4ga2FuZ2VuZ2FrdVwgOwor5pyA5oG15Zu9ID4gc2Fpa2Vpa29rdVwgOwor5oWi5oCn55qEID4gbWFuc2VpdGVraVwgOwor5o6o6KiI5a2mID4gc3Vpa2VpZ2FrdVwgOwor5Ymv6aCY5LqLID4gZnVrdXJ5b3VqaVwgOwor5Y2w5Yi36ICFID4gaW5zYXRzdXNoYVwgOwor6ICQ54Gr5YqbID4gdGFpa2FyeW9rdVwgOwor5Y+L56aF5p+TID4geXV1emVuem9tZVwgOwor5aCx5ZGK5pu4ID4gaG91a29rdXNob1wgOwor6aqo5qC8562LID4ga29ra2FrdWtpblwgOwor6Je75aGp6I2JID4gbW9zaGlvZ3VzYVwgOwor6ZuG5aSn5oiQID4gc2h1dXRhaXNlaVwgOwor5oWi5oCn55eFID4gbWFuc2VpYnlvdVwgOwor5a6j6KiA55qEID4gc2VuZ2VudGVraVwgOwor5YWt6YeN5aWPID4gcm9rdWp1dXNvdVwgOwor6Z+z6Z+/5a2mID4gb25reW91Z2FrdVwgOwor5bel5qWt5rivID4ga291Z3lvdWtvdVwgOwor57eP6L6e6IG3ID4gc291amlzaG9rdVwgOwor6LuN5Zuj6ZW3ID4gZ3VuZGFuY2hvdVwgOwor5bm06ZW36ICFID4gbmVuY2hvdXNoYVwgOwor57eP5YuZ5bGAID4gc291bXVreW9rdVwgOwor6Z2i55u4562GID4gbWVuc291ZnVkZVwgOwor5pWj5q2p6YGTID4gc2FucG9taWNoaVwgOwor56S65Zyn6KiIID4gc2hpYXRzdWtlaVwgOwor5LiW57SA5pyrID4gc2Vpa2ltYXRzdVwgOwor56ys5LiJ5Zu9ID4gZGFpc2FuZ29rdVwgOwor5oqV56Wo5pWwID4gdG91aHlvdXN1dVwgOwor5L2V566H5pyIID4gbmFua2FnZXRzdVwgOwor55Sz6KuL5pu4ID4gc2hpbnNlaXNob1wgOwor6IW56Iac54KOID4gZnVrdW1ha3VlblwgOwor5rip5rOJ55S6ID4gb25zZW5tYWNoaVwgOwor5Li75YuV55qEID4gc2h1ZG91dGVraVwgOwor5LiN5paH5b6LID4gZnVidW5yaXRzdVwgOwor5byB5b2T566xID4gYmVudG91YmFrb1wgOwor5aSp5L2T5a2mID4gdGVudGFpZ2FrdVwgOwor5Y2w5Yi357SZID4gaW5zYXRzdXNoaVwgOwor5L2O5oiQ6ZW3ID4gdGVpc2VpY2hvdVwgOwor5L+v5Luw6KeSID4gZnVneW91a2FrdVwgOwor5pS+54ax5ZmoID4gaG91bmV0c3VraVwgOwor57SU6Imv5ZOBID4ganVucnlvdWhpblwgOwor5YKZ5b6M6KGoID4gYmluZ29vbW90ZVwgOwor5pqX5q666ICFID4gYW5zYXRzdXNoYVwgOwor5bmz5pWZ5ZOhID4gaGlyYWt5b3VpblwgOwor5LiN6Kaa6ICFID4gZnVrYWt1bW9ub1wgOwor5oiQ6ZW354K5ID4gc2VpY2hvdXRlblwgOwor5p2x5qiq57eaID4gdG91eW9rb3NlblwgOwor5pWR5riI6ICFID4ga3l1dXNhaXNoYVwgOwor55+l6IO955qEID4gY2hpbm91dGVraVwgOwor5bm76Kaa5YmkID4gZ2Vua2FrdXphaVwgOwor5p6c54mp5bGLID4ga3VkYW1vbm95YVwgOwor5Lq65qC86ICFID4gamlua2FrdXNoYVwgOwor6YeR5bGe6ZaTID4ga2luem9rdWthblwgOwor6Iqx5p+z55eFID4ga2FyeXV1YnlvdVwgOwor6ICB5aSn5Zu9ID4gcm91dGFpa29rdVwgOwor5Luj6KiA5Lq6ID4gZGFpZ2VuJyduaW5cIDsKK+W/g+W+l+mhlCA+IGtva29yb2VnYW9cIDsKK+S7o+ihqOiAhSA+IGRhaWh5b3VzaGFcIDsKK+S4u+efpeeahCA+IHNodWNoaXRla2lcIDsKK+aWh+WtpueVjCA+IGJ1bmdha3VrYWlcIDsKK+WIh+aWreapnyA+IHNldHN1ZGFua2lcIDsKK+S4gOaZgueahCA+IGljaGlqaXRla2lcIDsKK+S6pOmAmue2siA+IGtvdXRzdXVtb3VcIDsKK+WcsOeQg+S6uiA+IGNoaWt5dXVqaW5cIDsKK+WcsOeQg+S4iiA+IGNoaWt5dXVqb3VcIDsKK+mAhuaPkOahiCA+IGd5YWt1dGVpYW5cIDsKK+WvvuaVsOihqCA+IHRhaXN1dWh5b3VcIDsKK+aVl+aIpuWbvSA+IGhhaXNlbmtva3VcIDsKK+WNsOWIt+ekviA+IGluc2F0c3VzaGFcIDsKK+aWsOijveWTgSA+IHNoaW5zZWloaW5cIDsKK+altei3nemboiA+IGt5b2t1a3lvcmlcIDsKK+eGn+e3tOW3pSA+IGp1a3VyZW5rb3VcIDsKK+iJsue0oOS9kyA+IHNoaWtpc290YWlcIDsKK+S4uOegpeefsyA+IG1hcnV0b2lzaGlcIDsKK+WQjOaXj+S8miA+IGRvdXpva3VrYWlcIDsKK+e1jOa4iOeahCA+IGtlaXphaXRla2lcIDsKK+eJm+S5s+WxiyA+IGd5dXVueXV1eWFcIDsKK+e3tOe/kuWgtCA+IHJlbnNodXVqb3VcIDsKK+eJueijveWTgSA+IHRva3VzZWloaW5cIDsKK+S4jeiqoOWunyA+IGZ1c2Vpaml0c3VcIDsKK+W+k+adpeWeiyA+IGp1dXJhaWdhdGFcIDsKK+WvvuixoeS9kyA+IHRhaXNob3V0YWlcIDsKK+eyieefs+m5uCA+IGtvbmFzZWtrZW5cIDsKK+WknOWwv+eXhyA+IHlhbnlvdXNob3VcIDsKK+i2heaWh+mdoiA+IGNob3VidW5tZW5cIDsKK+WLleeJqeWckiA+IGRvdWJ1dHN1ZW5cIDsKK+e3j+ebo+edoyA+IHNvdWthbnRva3VcIDsKK+Wun+mam+eahCA+IGppc3NhaXRla2lcIDsKK+mgvOS/oee0mSA+IHJhaXNoaW5zaGlcIDsKK+Wuo+aVmeW4qyA+IHNlbmt5b3VzaGlcIDsKK+iyrOS7u+iAhSA+IHNla2luaW5zaGFcIDsKK+mWouevgOeCjiA+IGthbnNldHN1ZW5cIDsKK+WFsemztOadvyA+IGt5b3VtZWliYW5cIDsKK+Wul+S4u+WbvSA+IHNvdXNodWtva3VcIDsKK+aXp+i7jeS6uiA+IGt5dXVndW5qaW5cIDsKK+WNiua/geeCuSA+IGhhbmRha3V0ZW5cIDsKK+WNiumVt+W9oiA+IGhhbmNob3VrZWlcIDsKK+S4reawtOmBkyA+IGNodXVzdWlkb3VcIDsKK+mBuOaJi+adkSA+IHNlbnNodW11cmFcIDsKK+WNsOWIt+eUqCA+IGluc2F0c3V5b3VcIDsKK+mciuafqei7iiA+IHJlaWt5dXVzaGFcIDsKK+a1t+WyuOerryA+IGthaWdhbmJhdGFcIDsKK+WklueUqOiWrCA+IGdhaXlvdXlha3VcIDsKK+e0q+aWkeeXhSA+IHNoaWhhbmJ5b3VcIDsKK+ibuOmFjeW9kyA+IHRha29oYWl0b3VcIDsKK+mrmOaJgOeXhSA+IGtvdXNob2J5b3VcIDsKK+Wkp+Wwj+S+vyA+IGRhaXNob3ViZW5cIDsKK+exs+WbveawkSA+IGJlaWtva3VtaW5cIDsKK+WQuOawtOaApyA+IGt5dXVzdWlzZWlcIDsKK+W/teS6lOaXpSA+IG5lbmdvbmljaGlcIDsKK+WHuuadpeW/gyA+IGRla2lnb2tvcm9cIDsKK+S4reW/g+mDqCA+IGNodXVzaGluYnVcIDsKK+eUn+S9k+WtpiA+IHNlaXRhaWdha3VcIDsKK+iCr+WumueahCA+IGtvdXRlaXRla2lcIDsKK+mBuOaKnuWtkCA+IHNlbnRha3VzaGlcIDsKK+WLleeJqeWMliA+IGRvdWJ1dHN1a2FcIDsKK+awtOW5s+e/vCA+IHN1aWhlaXlva3VcIDsKK+iyv+aYk+alrSA+IGJvdWVraWd5b3VcIDsKK+iFsOW4g+WboyA+IGtvc2hpYnV0b25cIDsKK+eIhuaSg+apnyA+IGJha3VnZWtpa2lcIDsKK+iogOihjOmMsiA+IGdlbmtvdXJva3VcIDsKK+Wbo+WcsOaXjyA+IGRhbmNoaXpva3VcIDsKK+S5seiqv+WtkCA+IHJhbmNob3VzaGlcIDsKK+WCmeiThOexsyA+IGJpY2hpa3VtYWlcIDsKK+Wkp+S5l+eahCA+IGRhaWpvdXRla2lcIDsKK+eEoeiDveWKmyA+IG11bm91cnlva3VcIDsKK+mFqui+suWgtCA+IHJha3Vub3Vqb3VcIDsKK+iyqOWuouiIuSA+IGtha3lha3VzZW5cIDsKK+aEn+afk+eXhyA+IGthbnNlbnNob3VcIDsKK+ecn+eQhuaVmSA+IHNoaW5yaWt5b3VcIDsKK+aFiOWWhOmNiyA+IGppemVuJyduYWJlXCA7CivmioDooZPlo6sgPiBnaWp1dHN1c2hpXCA7Civlk6jmiJLoiYcgPiBzaG91a2FpdGVpXCA7CivphZLnn7PphbggPiBzaHVzZWtpc2FuXCA7CivmlbfluIPlm6MgPiBzaGlraWJ1dG9uXCA7Civlj43liYfph5EgPiBoYW5zb2t1a2luXCA7CivmnInmqZ/niakgPiB5dXVraWJ1dHN1XCA7Civmir3osaHnlLsgPiBjaHV1c2hvdWdhXCA7Civnp5/lgJ/mqKkgPiBzb3NoYWt1a2VuXCA7CivlhoXnlLPmm7ggPiBuYWlzaGluc2hvXCA7CivlkIzntJrnlJ8gPiBkb3VreXV1c2VpXCA7CivlkJHnsbPnmoQgPiBrb3ViZWl0ZWtpXCA7CivopqrooZvlhbUgPiBzaGluJydlaWhlaVwgOwor5LuP5paH56eRID4gZnV0c3VidW5rYVwgOwor5Y+W5byV5omAID4gdG9yaWhpa2lqb1wgOwor6Zu76LuK6LODID4gZGVuc2hhY2hpblwgOwor6ZuG5pWj5ZywID4gc2h1dXNhbmNoaVwgOwor57a65oOz5puyID4ga2lzb3VreW9rdVwgOwor5LiK6Kq/5a2QID4gdXdhY2hvdXNoaVwgOwor5YaF6IeT5byTID4gbmFpem91a3l1dVwgOwor5Y2K6ZaL5Zu9ID4gaGFua2Fpa29rdVwgOwor6KO96YCg5qWtID4gc2Vpem91Z3lvdVwgOwor6L+95pKD5qmfID4gdHN1aWdla2lraVwgOwor5LiJ6KeS562LID4gc2Fua2FrdWtpblwgOwor562J5rex57eaID4gdG91c2hpbnNlblwgOwor6aeG5YuV5YqbID4ga3Vkb3VyeW9rdVwgOwor6YeN5bel5qWtID4ganV1a291Z3lvdVwgOwor6bq757mU54mpID4gYXNhb3JpbW9ub1wgOwor5pel5bCE55eFID4gbmlzc2hhYnlvdVwgOwor54ax6KGA5YWQID4gbmVra2V0c3VqaVwgOwor6YeR5bGe6KO9ID4ga2luem9rdXNlaVwgOwor5pys5aWR57SEID4gaG9ua2VpeWFrdVwgOwor6buE6KSQ6ImyID4gb3VrYXNzaG9rdVwgOwor6LO85YWl6ICFID4ga291bnl1dXNoYVwgOwor5LiN57K+6ICFID4gYnVzaG91bW9ub1wgOwor5Li75b+c5YqbID4gc2h1b3VyeW9rdVwgOwor5Z+8546J5YuiID4gc2FpdGFtYXplaVwgOwor6YeN5YK36ICFID4ganV1c2hvdXNoYVwgOwor5YK35a6z572qID4gc2hvdWdhaXphaVwgOwor5L2c5oim5LiKID4gc2FrdXNlbmpvdVwgOwor5r2c5rC055eFID4gc2Vuc3VpYnlvdVwgOwor5Lit5oCn57SZID4gY2h1dXNlaXNoaVwgOwor6Ki655mC5omAID4gc2hpbnJ5b3Vqb1wgOwor5pel5pys6aOfID4gbmlob25zaG9rdVwgOwor56i85YON546HID4ga2Fkb3VyaXRzdVwgOwor6YCj5ZCI5Zu9ID4gcmVuZ291a29rdVwgOwor5YWs5rCR5a2mID4ga291bWluZ2FrdVwgOwor56CU56m26ICFID4ga2Vua3l1dXNoYVwgOwor6Z2Z5rC05ZynID4gc2Vpc3VpYXRzdVwgOwor55m76Yyy6ICFID4gdG91cm9rdXNoYVwgOwor6IiI6KGM55WMID4ga291Z3lvdWthaVwgOwor5rqW5rG65YudID4ganVua2Vzc2hvdVwgOwor5aSp546L5pifID4gdGVuJydub3VzZWlcIDsKK+air+WtkOi7iiA+IGhhc2hpZ29zaGFcIDsKK+S4ieimquetiSA+IHNhbnNoaW50b3VcIDsKK+S4jee0lOeJqSA+IGZ1anVuYnV0c3VcIDsKK+S4iuWls+S4rSA+IGthbWlqb2NodXVcIDsKK+mzpeWPluecjCA+IHRvdHRvcmlrZW5cIDsKK+mHjeeXh+iAhSA+IGp1dXNob3VzaGFcIDsKK+iyp+S5j+msriA+IGJpbmJvdWt1amlcIDsKK+WUr+S4gOW6piA+IHRhZGFpY2hpZG9cIDsKK+WlveiJsuWutiA+IGtvdXNob2t1a2FcIDsKK+avm+earuWVhiA+IGtlZ2F3YXNob3VcIDsKK+avlOi8g+e0miA+IGhpa2FrdWt5dXVcIDsKK+ePvuWcqOmrmCA+IGdlbnphaWRha2FcIDsKK+mZuOa1t+epuiA+IHJpa3VrYWlrdXVcIDsKK+WPjOecvOmPoSA+IHNvdWdhbmt5b3VcIDsKK+mnkOi8quWgtCA+IGNodXVyaW5qb3VcIDsKK+eZvemJhOmJsSA+IGhha3V0ZWtrb3VcIDsKK+Wkp+WuruS6uiA+IG9vbWl5YWJpdG9cIDsKK+mbquWQiOaIpiA+IHl1a2lnYXNzZW5cIDsKK+eJh+agl+eyiSA+IGthdGFrdXJpa29cIDsKK+eZuuihqOS8miA+IGhhcHB5b3VrYWlcIDsKK+WQkOeAieeJqSA+IHRvc2hhYnV0c3VcIDsKK+ijj+ihqOe0mSA+IHVyYWJ5b3VzaGlcIDsKK+WIh+aWreWbsyA+IHNldHN1ZGFuenVcIDsKK+aAneaDkeiytyA+IG9tb3dha3VnYWlcIDsKK+ims+W/teirliA+IGthbicnbmVucm9uXCA7Civnjonpn7Pnm6QgPiBneW9rdW9uYmFuXCA7Civlj43li5XnmoQgPiBoYW5kb3V0ZWtpXCA7CivmlZHlkb3oiYcgPiBreXV1bWVpdGVpXCA7Civntbblr77nmoQgPiB6ZXR0YWl0ZWtpXCA7CivmuKzph4/lm7MgPiBzb2t1cnlvdXp1XCA7CivkuInlpKflm70gPiBzYW5kYWlrb2t1XCA7CivlnLDmlrnnl4UgPiBjaGlob3VieW91XCA7Civlh7rniYjogIUgPiBzaHVwcGFuc2hhXCA7Civkvpvntabot68gPiBreW91a3l1dXJvXCA7Civnq5zmto7pppkgPiByeXV1emVua291XCA7CivlsITniIbloLQgPiBzaGFiYWt1am91XCA7CivmuKzph4/lmaggPiBzb2t1cnlvdWtpXCA7CivlnJ/kv5flraYgPiBkb3pva3VnYWt1XCA7Civnvo7lpbPmoZwgPiBiaWpvemFrdXJhXCA7CivljZfjgIXmnbEgPiBuYW4nJ25hbnRvdVwgOwor5Lq65qC85qipID4gamlua2FrdWtlblwgOwor5YiG6Kej55qEID4gYnVua2FpdGVraVwgOwor5LuW6Kaa55qEID4gdGFrYWt1dGVraVwgOwor5aSp5Li75pWZID4gdGVuc2h1a3lvdVwgOwor6Zuq5YyW57KnID4geXVraWdlc2hvdVwgOwor5b2i5byP576OID4ga2Vpc2hpa2liaVwgOwor6Zu76YCa5aSnID4gZGVudHN1dWRhaVwgOwor56CU56m256S+ID4ga2Vua3l1dXNoYVwgOwor5LiJ6KeS54K5ID4gc2Fua2FrdXRlblwgOwor5Lyd5pu46bOpID4gZGVuc2hvYmF0b1wgOwor5LuW6Kaa55eHID4gdGFrYWt1c2hvdVwgOwor5raI6ICX5oimID4gc2hvdW1vdXNlblwgOwor5LuV6Kiz5pu4ID4gc2hpd2FrZXNob1wgOwor6YGK5LyR5ZywID4geXV1a3l1dWNoaVwgOwor5Y+N5b+c5oCnID4gaGFuJydub3VzZWlcIDsKK+aatOi1sOaXjyA+IGJvdXNvdXpva3VcIDsKK+e0gOWFg+evgCA+IGtpZ2Vuc2V0c3VcIDsKK+a4qeazieWuvyA+IG9uc2VuJyd5YWRvXCA7CivllJDovpvlrZAgPiB0b3VnYXJhc2hpXCA7Civml6XkuK3pn5MgPiBuaXRjaHV1a2FuXCA7CivnkIbop6PlipsgPiByaWthaXJ5b2t1XCA7CivlhazlhbHosqEgPiBrb3VreW91emFpXCA7CivmpJzlrprmlpkgPiBrZW50ZWlyeW91XCA7CivluILplbfpgbggPiBzaGljaG91c2VuXCA7Civlronmma7oq4sgPiB5YXN1YnVzaGluXCA7CivmsLTpgZPmlpkgPiBzdWlkb3VyeW91XCA7CivkuKHmiJDmlZcgPiByeW91c2VpYmFpXCA7CivliJ3nr4Dlj6UgPiBoYXRzdXpla2t1XCA7Civmr5TovIPnmoQgPiBoaWtha3V0ZWtpXCA7Civlm73pgKPou40gPiBrb2t1cmVuZ3VuXCA7CivkuIrntJrnlJ8gPiBqb3VreXV1c2VpXCA7CivnhKHpoJPnnYAgPiBtdXRvbmNoYWt1XCA7Civlrablj4vkvJogPiBnYWt1eXV1a2FpXCA7Civlho3mnaXmnIggPiBzYXJhaWdldHN1XCA7Civlvozml6Xoq4cgPiBnb2ppdHN1ZGFuXCA7CivlgpnojZLpo58gPiBiaWtvdXNob2t1XCA7CivkuI3ooYzot6EgPiBmdWd5b3VzZWtpXCA7Civmlpzpmb3ml48gPiBzaGF5b3V6b2t1XCA7CivpnZLljJbniakgPiBzZWlrYWJ1dHN1XCA7CivlpKnnjovlsbEgPiB0ZW4nJ25vdXphblwgOwor5Y6E5LuL6ICFID4geWFra2FpbW9ub1wgOwor5YuH54yb5b+DID4geXV1bW91c2hpblwgOwor5q2m5Yqb5oimID4gYnVyeW9rdXNlblwgOwor5LiJ6KeS5rOVID4gc2Fua2FrdWhvdVwgOwor5a6X5pWZ55S7ID4gc2h1dWt5b3VnYVwgOwor56CU56m255SfID4ga2Vua3l1dXNlaVwgOwor5Ye65aWU6ICFID4gc2h1cHBvbnNoYVwgOwor5Y+O55uK6YeRID4gc2h1dWVraWtpblwgOwor5rC36I+T5a2QID4ga29vcmlnYXNoaVwgOwor6Lu95bel5qWtID4ga2Vpa291Z3lvdVwgOwor6KiY5oa25YqbID4ga2lva3VyeW9rdVwgOwor5Y2z6IiI6KmpID4gc29ra3lvdXNoaVwgOwor5Y+k55Sf54mpID4ga29zZWlidXRzdVwgOwor54ax5oSb6ICFID4gbmV0c3VhaXNoYVwgOwor5aSp6aCC54K5ID4gdGVuY2hvdXRlblwgOwor54Sh6LOH5YqbID4gbXVzaGlyeW9rdVwgOwor6IiI6KGM5qipID4ga291Z3lvdWtlblwgOwor5p2+5qC55rK5ID4gc2hvdWtvbicneXVcIDsKK+eZvua4iOalvSA+IGt1ZGFyYWdha3VcIDsKK+WcqOS7u+S4rSA+IHphaW5pbmNodXVcIDsKK+a7nuWcqOS4rSA+IHRhaXphaWNodXVcIDsKK+WHuueJiOekviA+IHNodXBwYW5zaGFcIDsKK+ijveiMtualrSA+IHNlaWNoYWd5b3VcIDsKK+iyv+aYk+WVhiA+IGJvdWVraXNob3VcIDsKK+WbveWLmeecgSA+IGtva3VtdXNob3VcIDsKK+S4reWNl+exsyA+IGNodXVuYW5iZWlcIDsKK+ahkOS4gOiRiSA+IGtpcmloaXRvaGFcIDsKK+WIneevgOS+myA+IGhhdHN1emVra3VcIDsKK+WFpemBuOiAhSA+IG55dXVzZW5zaGFcIDsKK+e4puekvuS8miA+IHRhdGVzaGFrYWlcIDsKK+aTjee4puW4rSA+IHNvdWp1dXNla2lcIDsKK+WRqOaXi+WxiyA+IHNodXVzZW4nJ3lhXCA7Civmloflrablo6sgPiBidW5nYWt1c2hpXCA7Civlt6XlrabogIUgPiBrb3VnYWt1c2hhXCA7Civlj6TkvJ3oqqwgPiBrb2RlbnNldHN1XCA7CivljbDliLflt6UgPiBpbnNhdHN1a291XCA7CivmvZzmsLTmnI0gPiBzZW5zdWlmdWt1XCA7CivlpKfkuLvmlZkgPiBkYWlzaHVreW91XCA7CivkuIrloLTmoKogPiBqb3Vqb3VrYWJ1XCA7CivpoZ7lnovnmoQgPiBydWlrZWl0ZWtpXCA7CivlkLnlh7rniakgPiBmdWtpZGVtb25vXCA7CivmipfnnJ/oj4wgPiBrb3VzaGlua2luXCA7Civpm6Pms6LmvZ8gPiBuYW5pd2FnYXRhXCA7Civnp5/lgJ/lnLAgPiBzb3NoYWt1Y2hpXCA7CivliqDovrLnoLIgPiBrYW4nJ25vbmhvdVwgOwor6YCg55+z56iOID4gem91a29rdXplaVwgOwor6aeQ6LuK5aC0ID4gY2h1dXNoYWpvdVwgOwor6Kmm566X6KGoID4gc2hpc2FuaHlvdVwgOwor57WM5riI5a2mID4ga2VpemFpZ2FrdVwgOwor5oCl5Yu+6YWNID4ga3l1dWtvdWJhaVwgOwor5YSA5byP55SoID4gZ2lzaGlraXlvdVwgOwor6KGA5qCT55eHID4ga2Vzc2Vuc2hvdVwgOwor5LyK6YGU5ae/ID4gZGF0ZXN1Z2F0YVwgOwor55eF5Y6f5L2TID4gYnlvdWdlbnRhaVwgOwor5YWr5YiG55uuID4gaGFjaGlidW5tZVwgOwor6Kej5p6Q5oCnID4ga2Fpc2VraXNlaVwgOwor5a6i6Kaz5oCnID4ga3lha2thbnNlaVwgOwor6LaF5aqS5L2TID4gY2hvdWJhaXRhaVwgOwor5rC06Iqt6JWJID4gbWl6dWJhc2hvdVwgOwor6ZW35pyf55qEID4gY2hvdWtpdGVraVwgOwor55y86Y+h6JuHID4gbWVnYW5laGViaVwgOwor5Ye654mI55WMID4gc2h1cHBhbmthaVwgOwor5byB5YSf6YeRID4gYmVuc2hvdWtpblwgOwor5o6S5aSW55qEID4gaGFpZ2FpdGVraVwgOwor5pyq54af6ICFID4gbWlqdWt1bW9ub1wgOwor5YiG5pWj5Z6LID4gYnVuc2FuZ2F0YVwgOwor55+t57eo6ZuGID4gdGFucGVuc2h1dVwgOwor5reh6Lev5bO2ID4gYXdhamlzaGltYVwgOwor5aKX5q6W54KJID4gem91c2hva3Vyb1wgOwor5LiL6KaL5p2/ID4gc2hpdGFtaWl0YVwgOwor5YiG5pWZ5aC0ID4gYnVua3lvdWpvdVwgOwor5Y+y5paZ6aSoID4gc2hpcnlvdWthblwgOwor6KGA5bCP5p2/ID4ga2Vzc2hvdWJhblwgOwor6YeR6Imy5aCCID4ga29uamlraWRvdVwgOwor5ryi5pa56JasID4ga2FucG91eWFrdVwgOwor57+76Kiz5a62ID4gaG9uJyd5YWt1a2FcIDsKK+W5s+etieimsyA+IGJ5b3Vkb3VrYW5cIDsKK+aknOafu+WumCA+IGtlbnNob3VrYW5cIDsKK+aWh+WtpuWPsiA+IGJ1bmdha3VzaGlcIDsKK+WkieWIhuWtpiA+IGhlbmJ1bmdha3VcIDsKK+WJjeagveeJqSA+IHNlbnphaW1vbm9cIDsKK+W8t+WjruWJpCA+IGt5b3Vzb3V6YWlcIDsKK+a1t+eUo+alrSA+IGthaXNhbmd5b3VcIDsKK+eMrue0jeiAhSA+IGtlbicnbm91c2hhXCA7Civlha3pgKPmmJ8gPiByb2t1cmVuc2VpXCA7Civli4XpoZjlr7ogPiBjaG9rdWdhbmppXCA7CivkvJ3mn5Pnl4UgPiBkZW5zZW5ieW91XCA7CivkuK3oj6/pjYsgPiBjaHV1a2FuYWJlXCA7CivlpKnkuIrlt50gPiB0ZW5qb3VnYXdhXCA7CivmtIvoiqXlrZAgPiB5b3VnYXJhc2hpXCA7Civnmobli6Tos54gPiBrYWlraW5zaG91XCA7Civph5HlsZ7niYcgPiBraW56b2t1aGVuXCA7CivlpYfooZPluKsgPiBraWp1dHN1c2hpXCA7CivlopfliqDnjocgPiB6b3VrYXJpdHN1XCA7CivmqJnmupblnosgPiBoeW91anVua2VpXCA7Civph5HotaToibIgPiBraW4nJ2FrYWlyb1wgOwor6LKs5Lu75oSfID4gc2VraW5pbmthblwgOwor5reL5be056+AID4gcmlucGFzZXRzdVwgOwor5L6b54mp5Y+wID4ga3Vtb3RzdWRhaVwgOwor57Gz5Zu95Lq6ID4gYmVpa29rdWppblwgOwor562J5rip5byPID4gdG91b25zaGlraVwgOwor5YmN5Lu76ICFID4gemVuJyduaW5zaGFcIDsKK+ijvemAoOWFgyA+IHNlaXpvdW1vdG9cIDsKK+aDheWgsemHjyA+IGpvdWhvdXJ5b3VcIDsKK+a2iOiAl+WTgSA+IHNob3Vtb3VoaW5cIDsKK+S4oeaJi+WIqSA+IHJ5b3V0ZWtpa2lcIDsKK+iThOmbu+WZqCA+IGNoaWt1ZGVua2lcIDsKK+Wvvuinkue3miA+IHRhaWtha3VzZW5cIDsKK+S4gOaZqeS4rSA+IGhpdG9iYW5qdXVcIDsKK+aal+WJo+auuiA+IGFua2Vuc2F0c3VcIDsKK+mgrei2s+mhniA+IHRvdXNva3VydWlcIDsKK+WcqOadseS6rCA+IHphaXRvdWt5b3VcIDsKK+ajhOiogOiRiSA+IHN1dGVrb3RvYmFcIDsKK+WFjeeojuihqCA+IG1lbnplaWh5b3VcIDsKK+WbveawkeaApyA+IGtva3VtaW5zZWlcIDsKK+W9q+WIu+WutiA+IGNob3Vrb2t1a2FcIDsKK+iqreabuOeVjCA+IGRva3VzaG9rYWlcIDsKK+S9v+eUqOaWmSA+IHNoaXlvdXJ5b3VcIDsKK+WxheeVmeawkSA+IGt5b3J5dXVtaW5cIDsKK+aXi+WFieinkiA+IHNlbmtvdWtha3VcIDsKK+Wwj+mWk+S9vyA+IGtvbWFkenVrYWlcIDsKK+inkuiGnOeCjiA+IGtha3VtYWt1ZW5cIDsKK+mwreiEmumhniA+IGtpa3lha3VydWlcIDsKK+mRkeitmOWutiA+IGthbnNoaWtpa2FcIDsKK+iIiOihjOW4qyA+IGtvdWd5b3VzaGlcIDsKK+WstuWkqeS4iyA+IGtha2FhZGVua2FcIDsKK+WbuuW9oueJqSA+IGtva2VpYnV0c3VcIDsKK+e0oee4vuezuCA+IGJvdXNla2lpdG9cIDsKK+WQneWXh+WutiA+IHJpbnNob2t1a2FcIDsKK+eCuuabv+WwuyA+IGthd2FzZWppcmlcIDsKK+iqreiAheashCA+IGRva3VzaGFyYW5cIDsKK+WOhOS7i+eJqSA+IHlha2thaW1vbm9cIDsKK+WHuuS4luS9nCA+IHNodXNzZXNha3VcIDsKK+WLleaRqeaTpiA+IGRvdW1hc2F0c3VcIDsKK+mDqOWIhumjnyA+IGJ1YnVuc2hva3VcIDsKK+WHuueJiOazlSA+IHNodXBwYW5ob3VcIDsKK+iqsumhjOabsiA+IGthZGFpa3lva3VcIDsKK+auuuiZq+WJpCA+IHNhdGNodXV6YWlcIDsKK+iWhOmbquiNiSA+IHVzdXl1a2lzb3VcIDsKK+S6uuS9k+WtpiA+IGppbnRhaWdha3VcIDsKK+W5s+WfjuS6rCA+IGhlaWpvdWt5b3VcIDsKK+S4ieinkuW4vSA+IHNhbmtha3Vib3VcIDsKK+ihneaSg+azoiA+IHNob3VnZWtpaGFcIDsKK+S4ieinkuW3viA+IHNhbmtha3VraW5cIDsKK+mDtemAgeaWmSA+IHl1dXNvdXJ5b3VcIDsKK+efs+eCremFuCA+IHNla2l0YW5zYW5cIDsKK+W+geacjeiAhSA+IHNlaWZ1a3VzaGFcIDsKK+W8t+ihjOi7jSA+IGt5b3Vrb3VndW5cIDsKK+S7o+ihqOWboyA+IGRhaWh5b3VkYW5cIDsKK+iEmuacrOWutiA+IGt5YWt1aG9ua2FcIDsKK+iPk+WtkOmJoiA+IGthc2hpYmFjaGlcIDsKK+ebtOWGhumMkCA+IGNob2t1ZW5zdWlcIDsKK+WHuueJiOaoqSA+IHNodXBwYW5rZW5cIDsKK+WGjeacjeW9uSA+IHNhaWZ1a3Vla2lcIDsKK+eUn+aUvumAgSA+IG5hbWFob3Vzb3VcIDsKK+ioiOeul+WwuiA+IGtlaXNhbmpha3VcIDsKK+mAmuWLpOiAhSA+IHRzdXVraW5zaGFcIDsKK+S4gOWhgee3miA+IGljaGlydWlzZW5cIDsKK+a2sumHj+ioiCA+IGVraXJ5b3VrZWlcIDsKK+WIh+aUr+S4uSA+IGtpcmlzaGl0YW5cIDsKK+mXh+W4guWgtCA+IHlhbWlzaGlqb3VcIDsKK+manOWus+iAhSA+IHNob3VnYWlzaGFcIDsKK+iytOaXj+eahCA+IGtpem9rdXRla2lcIDsKK+WNsOWIt+S6uiA+IGluc2F0c3VuaW5cIDsKK+a1t+iziuiIuSA+IGthaXpva3VzZW5cIDsKK+WNl+WNl+ilvyA+IG5hbicnbmFuc2VpXCA7CivohLPmjK/nm6ogPiBub3VzaGludG91XCA7Civmir3osaHljJYgPiBjaHV1c2hvdWthXCA7CivorJvnv5LkvJogPiBrb3VzaHV1a2FpXCA7CivmhJvnjqnniakgPiBhaWdhbmJ1dHN1XCA7Civpurvpm4DlsYsgPiBtYXplamFuJyd5YVwgOwor5Lyd5p+T5q+SID4gZGVuc2VuZG9rdVwgOwor5LuW5Zu96ICFID4gdGFrb2t1bW9ub1wgOwor6YeN5bGk55qEID4ganV1c291dGVraVwgOwor5LqU6YeN5aGUID4gZ29qdXVub3RvdVwgOwor5LiL57Sa5a+pID4ga2FreXV1c2hpblwgOwor5L2O5omA5b6XID4gdGVpc2hvdG9rdVwgOwor5bCC6ZaA56ugID4gc2VubW9uc2hvdVwgOwor6Yuz6YCg5omAID4gY2h1dXpvdXNob1wgOwor55+t5pmC5pelID4gdGFuamlqaXRzdVwgOwor5LyR5qWt5pelID4ga3l1dWd5b3ViaVwgOwor5YWI56uv55qEID4gc2VudGFudGVraVwgOwor5Zan5Zip6IWwID4ga2Vua2Fnb3NoaVwgOwor6I2J5Y+M57SZID4ga3VzYXpvdXNoaVwgOwor56m65oOz55qEID4ga3V1c291dGVraVwgOwor6Zuq6YGU56OoID4geXVraWRhcnVtYVwgOwor5YaF5Lqk5riJID4gbmFpa291c2hvdVwgOwor5bqD5ZGK56S+ID4ga291a29rdXNoYVwgOwor6LKo54mp6aeFID4ga2Ftb3RzdWVraVwgOwor6LKn5LmP57GkID4gYmluYm91Z3VqaVwgOwor5a++6Kmx5byPID4gdGFpd2FzaGlraVwgOwor5YWx55Sj6LuNID4ga3lvdXNhbmd1blwgOwor5LiN5om/6Ku+ID4gZnVzaG91ZGFrdVwgOwor5rGC5Lq66KqMID4ga3l1dWppbnNoaVwgOwor6Z6t5q+b6JmrID4gYmVubW91Y2h1dVwgOwor57Ch5Y2Y5pyNID4ga2FudGFuZnVrdVwgOwor5Lit5oCn5a2QID4gY2h1dXNlaXNoaVwgOwor6buS56mC55eFID4ga3Vyb2hvYnlvdVwgOwor5YiG5ouF6aGNID4gYnVudGFuZ2FrdVwgOwor5aSq6Zm96JmrID4gdGFpeW91Y2h1dVwgOwor5pqr5a6a55qEID4gemFudGVpdGVraVwgOwor5Luj6KGo5L6LID4gZGFpaHlvdXJlaVwgOwor5ZCM5Zu95rCRID4gZG91a29rdW1pblwgOwor6KiY5b+154mpID4ga2luZW5idXRzdVwgOwor5pen5L2T5Yi2ID4ga3l1dXRhaXNlaVwgOwor5Y2X5rSL5p2QID4gbmFuJyd5b3V6YWlcIDsKK+mdnuW4uOWPoyA+IGhpam91Z3VjaGlcIDsKK+S4iuihqOe0mSA+IHV3YWJ5b3VzaGlcIDsKK+mdoueZveWRsyA+IG9tb3NoaXJvbWlcIDsKK+S/neWtmOmjnyA+IGhvem9uc2hva3VcIDsKK+WNiuaEj+itmCA+IGhhbicnaXNoaWtpXCA7CivmnKzoqr/lrZAgPiBob25jaG91c2hpXCA7CivnuZTlpbPmmJ8gPiBzaG9rdWpvc2VpXCA7CivlsILploDnmoQgPiBzZW5tb250ZWtpXCA7CivloLHlhJ/ph5EgPiBob3VzaG91a2luXCA7Civmk7LlvL7nrZIgPiB0ZWtpZGFudG91XCA7CivosqfkuY/npZ4gPiBiaW5ib3VnYW1pXCA7Civlm57mvJXmpa0gPiBrYWlzb3VneW91XCA7CivlpKfntbHpoJggPiBkYWl0b3VyeW91XCA7Civph4/lrZDoq5YgPiByeW91c2hpcm9uXCA7CivkuK3lipvnsokgPiBjaHV1cmlraWtvXCA7CivnnLzpj6HnjL8gPiBtZWdhbmV6YXJ1XCA7Civmpa3nlYzntJkgPiBneW91a2Fpc2hpXCA7CivpnZ7lhazlvI8gPiBoaWtvdXNoaWtpXCA7CivmsLTlhbXmnI0gPiBzdWloZWlmdWt1XCA7Civosq/mnKjloLQgPiBjaG9ib2t1am91XCA7Civmoq/lrZDmrrUgPiBoYXNoaWdvZGFuXCA7CivlvZPmrbPpp5IgPiB0b3VzYWlnb21hXCA7CivlrpfmlZnlrrYgPiBzaHV1a3lvdWthXCA7CivnoJTnqbblrpggPiBrZW5reXV1a2FuXCA7CivmronmlZnogIUgPiBqdW5reW91c2hhXCA7Civmronpm6PogIUgPiBqdW4nJ25hbnNoYVwgOwor5aOB6Ki06KifID4ga2FiZXpvc2hvdVwgOwor546J5pW055CGID4gZ3lva3VzZWlyaVwgOwor6Iyo5Z+O55yMID4gaWJhcmFraWtlblwgOwor5bGI5puy6YOoID4ga3Vra3lva3VidVwgOwor6KSS5aWo6YeRID4gaG91c2hvdWtpblwgOwor5raI6Ziy6ZqKID4gc2hvdWJvdXRhaVwgOwor5pyn5piG5biDID4gb2Jvcm9rb25idVwgOwor55yL55eF5Lq6ID4ga2FuYnlvdW5pblwgOwor6Iqx6Zu76LuKID4gaGFuYWRlbnNoYVwgOwor5Zyw5paH5a2mID4gY2hpbW9uZ2FrdVwgOwor5Y+j5L6b5pu4ID4ga291a3lvdXNob1wgOwor6YeR5bGe5oCnID4ga2luem9rdXNlaVwgOwor6I2J6YeO55CDID4ga3VzYXlha3l1dVwgOwor5qSc5LqL5bGAID4ga2VuamlreW9rdVwgOwor5YWt6L665b2iID4gcm9rdWhlbmtlaVwgOwor6Kqt6ICF5bGkID4gZG9rdXNoYXNvdVwgOwor5YKs5L+D54q2ID4gc2Fpc29rdWpvdVwgOwor5YK+5pac6KeSID4ga2Vpc2hha2FrdVwgOwor5Y+O55uj54q2ID4gc2h1dWthbmpvdVwgOwor5Zyw6ZyH5a2mID4gamlzaGluZ2FrdVwgOwor5Zyo5LiW5LitID4gemFpc2VpY2h1dVwgOwor5aWl5bqn5pW3ID4gb2t1emFzaGlraVwgOwor576O6KGT6aSoID4gYmlqdXRzdWthblwgOwor6Kix5a656YePID4ga3lveW91cnlvdVwgOwor5bCE5pKD5aC0ID4gc2hhZ2VraWpvdVwgOwor5b6M5aSp55qEID4ga291dGVudGVraVwgOwor6aeQ5bGv5ZywID4gY2h1dXRvbmNoaVwgOwor6ISz5rqi6KGAID4gbm91aWtrZXRzdVwgOwor5a2Y5ZG95LitID4gem9ubWVpY2h1dVwgOwor57O75YiX5YyWID4ga2VpcmV0c3VrYVwgOwor5Ye654mI5bGLID4gc2h1cHBhbicneWFcIDsKK+Wvqee+jueahCA+IHNoaW5iaXRla2lcIDsKK+aBkuS5heaApyA+IGtvdWt5dXVzZWlcIDsKK+eJh+iyv+aYkyA+IGthdGFib3Vla2lcIDsKK+aWh+eMruWtpiA+IGJ1bmtlbmdha3VcIDsKK+aZguS7o+iJsiA+IGppZGFpc2hva3VcIDsKK+Wkp+Wkp+eahCA+IGRhaWRhaXRla2lcIDsKK+S6jOmHjeapiyA+IG5panV1YmFzaGlcIDsKK+WcsOiqjOWtpiA+IGNoaXNoaWdha3VcIDsKK+WMluWtpueahCA+IGthZ2FrdXRla2lcIDsKK+iCieW8vuaIpiA+IG5pa3VkYW5zZW5cIDsKK+S4gOe1g+eQtCA+IGljaGlnZW5raW5cIDsKK+mBiueJp+awkSA+IHl1dWJva3VtaW5cIDsKK+aguOWun+mokyA+IGtha3VqaWtrZW5cIDsKK+iyqOeJqei7iiA+IGthbW90c3VzaGFcIDsKK+axguS6uuiAhSA+IGt5dXVqaW5zaGFcIDsKK+WcsOmch+WbvSA+IGppc2hpbmtva3VcIDsKK+WxheeVmeWcsCA+IGt5b3J5dXVjaGlcIDsKK+manOWtkOe0mSA+IHNob3VqaWdhbWlcIDsKK+a9nOWHveeXhSA+IHNlbmthbmJ5b3VcIDsKK+W8leeOh+iAhSA+IGluc290c3VzaGFcIDsKK+a1t+iziueJiCA+IGthaXpva3ViYW5cIDsKK+S/oeS7sOiAhSA+IHNoaW5rb3VzaGFcIDsKK+a2iOmYsui7iiA+IHNob3Vib3VzaGFcIDsKK+S4ieetieizniA+IHNhbnRvdXNob3VcIDsKK+eEoeitpuWvnyA+IG11a2Vpc2F0c3VcIDsKK+W9qeiJsueUuyA+IHNhaXNob2t1Z2FcIDsKK+WLp+WRiuiAhSA+IGthbmtva3VzaGFcIDsKK+W6g+WRiuashCA+IGtvdWtva3VyYW5cIDsKK+iznumHkeeOiyA+IHNob3VraW4nJ291XCA7CivpgJrnn6XnirYgPiB0c3V1Y2hpam91XCA7Civlt6XkvZzlk4EgPiBrb3VzYWt1aGluXCA7CivlnLDmlL/lraYgPiBjaGlzZWlnYWt1XCA7CivlpKrpmb3npZ4gPiB0YWl5b3VzaGluXCA7Civntpnmib/ogIUgPiBrZWlzaG91c2hhXCA7CivkubPoo73lk4EgPiBueXV1c2VpaGluXCA7CivpgYrmkoPpmoogPiB5dXVnZWtpdGFpXCA7CivljZHmgK/ogIUgPiBoaWt5b3Vtb25vXCA7Civlho3mlZnogrIgPiBzYWlreW91aWt1XCA7Civlm73lhoXnt5ogPiBrb2t1bmFpc2VuXCA7CivlmZvnhZnojYkgPiBrYW1pdGFiYWtvXCA7CivmhYjlloTluIIgPiBqaXplbicnaWNoaVwgOwor5Zue5oOz6YyyID4ga2Fpc291cm9rdVwgOwor5aSW5Lqk55qEID4gZ2Fpa291dGVraVwgOwor5L+u55CG5LitID4gc2h1dXJpY2h1dVwgOwor5LiJ562J6KaqID4gc2FudG91c2hpblwgOwor5Zyw6KGo6Z2iID4gY2hpaHlvdW1lblwgOwor5bmy5riJ6KiIID4ga2Fuc2hvdWtlaVwgOwor56CU56m25LyaID4ga2Vua3l1dWthaVwgOwor6IKW5YOP5qipID4gc2hvdXpvdWtlblwgOwor5b255LiN6LazID4geWFrdWJ1c29rdVwgOwor5rOo5oSP5YqbID4gY2h1dWlyeW9rdVwgOwor6IW55LiK5q27ID4gZnVrdWpvdXNoaVwgOwor57eo6ZuG6ICFID4gaGVuc2h1dXNoYVwgOwor5bqD5ZGK5p2/ID4ga291a29rdWJhblwgOwor5riJ56a96aGeID4gc2hvdWtpbnJ1aVwgOwor5YCS6Yyv6ICFID4gdG91c2FrdXNoYVwgOwor5rC055ax55ihID4gbWl6dWJvdXNvdVwgOwor5bmz562J5qipID4gYnlvdWRvdWtlblwgOwor5aSn6ZyH54G9ID4gZGFpc2hpbnNhaVwgOwor6YeN55eH5L6LID4ganV1c2hvdXJlaVwgOwor5Zyw5Z+f55qEID4gY2hpaWtpdGVraVwgOwor5YWx55Sj57O7ID4ga3lvdXNhbmtlaVwgOwor6ZaL6ZaJ5qmLID4ga2FpaGVpa3lvdVwgOwor6LaF6Zu75bCOID4gY2hvdWRlbmRvdVwgOwor6Zmz5oOF5pu4ID4gY2hpbmpvdXNob1wgOwor5oqV5qmf54axID4gdG91a2luZXRzdVwgOwor5YaX6KuH5LqLID4gam91ZGFua290b1wgOwor5pyA6auY57SaID4gc2Fpa291a3l1dVwgOwor5oCd5oOR5birID4gb21vd2FrdXNoaVwgOwor6KW/5pel5pysID4gbmlzaGluaWhvblwgOwor6L+R5Luj55qEID4ga2luZGFpdGVraVwgOwor6LaF5aSn5Z6LID4gY2hvdW9vZ2F0YVwgOwor56CV5rC36Ii5ID4gc2FpaHlvdXNlblwgOwor5ryB5qWt5rOVID4gZ3lvZ3lvdWhvdVwgOwor5pyq6Kej5rG6ID4gbWlrYWlrZXRzdVwgOwor5beo5Lq65Zu9ID4ga3lvamlua29rdVwgOwor5pyA5bCP6ZmQID4gc2Fpc2hvdWdlblwgOwor5YWs5YWx5oCnID4ga291a3lvdXNlaVwgOwor54Sh57K+6autID4gYnVzaG91aGlnZVwgOwor5bel5a2m5aOrID4ga291Z2FrdXNoaVwgOwor6YWS6YCg5qWtID4gc2h1em91Z3lvdVwgOwor6Imy6Ymb562GID4gaXJvZW5waXRzdVwgOwor54Gr5omT55+zID4gaGl1Y2hpaXNoaVwgOwor6Ya46YCg5qWtID4gam91em91Z3lvdVwgOwor5Y2Y55y86Y+hID4gdGFuZ2Fua3lvdVwgOwor5ryB5qWt5qipID4gZ3lvZ3lvdWtlblwgOwor55+z54Gv57GgID4gaXNoaWRvdXJvdVwgOwor5Y2X5rC35rSLID4gbmFucHlvdXlvdVwgOwor6bGI5aC06J+5ID4gdGFyYWJhZ2FuaVwgOwor5bKh5bGx55yMID4gb2theWFtYWtlblwgOwor57Sh57i+5belID4gYm91c2VraWtvdVwgOwor6LW354iG6JasID4ga2liYWt1eWFrdVwgOwor56K66KqN5pu4ID4ga2FrdW5pbnNob1wgOwor6KqV55Sf55+zID4gdGFuam91c2VraVwgOwor6Ziy6Iet5YmkID4gYm91c2h1dXphaVwgOwor6Yyr6KO95ZOBID4gc3V6dXNlaWhpblwgOwor6LKo54mp6Ii5ID4ga2Ftb3RzdXNlblwgOwor5LiA5aGB5omLID4gaWNoaXJ1aXNodVwgOwor6ISa57ea576OID4ga3lha3VzZW5iaVwgOwor5pyJ5L6h54mpID4geXV1a2FidXRzdVwgOwor5qSN55Sf5ZuzID4gc2hva3VzZWl6dVwgOwor55m65oOF5pyfID4gaGF0c3Vqb3VraVwgOwor55m95rC056S+ID4gaGFrdXN1aXNoYVwgOwor5o6h566X5qCqID4gc2Fpc2Fua2FidVwgOwor6ZW35LiB5aC0ID4gbmFnYWNob3ViYVwgOwor5pyJ5a2U6JmrID4geXV1a291Y2h1dVwgOwor5aSp54S255eYID4gdGVuJyduZW50b3VcIDsKK+Wbm+aLjeWtkCA+IHlvbmJ5b3VzaGlcIDsKK+WGl+mVt+ezuyA+IGpvdWNob3VrZWlcIDsKK+aXpeacrOW8jyA+IG5paG9uc2hpa2lcIDsKK+a6gOW5tOm9oiA+IG1hbicnbmVucmVpXCA7CivmtojpmLLoiYcgPiBzaG91Ym91dGVpXCA7CivlsI/mtrLog54gPiBzaG91ZWtpaG91XCA7CivpppbllLHogIUgPiBzaHVzaG91c2hhXCA7Civml6XmnKzlubMgPiBuaWhvbmRhaXJhXCA7CivpiYTpnaLnmq4gPiB0ZXRzdW1lbnBpXCA7CivkuLvmqKnlm70gPiBzaHVrZW5rb2t1XCA7Civosrfmjpvph5EgPiBrYWlrYWtla2luXCA7Civnn7PngbDnn7MgPiBzZWtrYWlzZWtpXCA7CivnsbPllY/lsYsgPiBrb21lZG9uJyd5YVwgOwor5oCd5oOz5YqHID4gc2hpc291Z2VraVwgOwor5LiH5Zu95rCRID4gYmFua29rdW1pblwgOwor5Yun5ZGK54q2ID4ga2Fua29rdWpvdVwgOwor5pWX5YyX5oSfID4gaGFpYm9rdWthblwgOwor5a+G6Ly46Ii5ID4gbWl0c3V5dXNlblwgOwor5Y+v5aSJ57+8ID4ga2FoZW4nJ3lva3VcIDsKK+WBj+mgreeXmyA+IGhlbnRvdXRzdXVcIDsKK+W5tOm9oue1piA+IG5lbnJlaWt5dXVcIDsKK+mAj+ejgeeOhyA+IHRvdWppcml0c3VcIDsKK+WOhOS7i+S6iyA+IHlha2thaWdvdG9cIDsKK+S8j+WwhOa/oCA+IGZ1a3VzaGFnb3VcIDsKK+aHuOWjheWegiA+IGtlbicneW91c3VpXCA7CivnlYzno4HmpbUgPiBrYWlqaWt5b2t1XCA7Civlv5znlKjlipsgPiBvdXlvdXJ5b2t1XCA7Civml6Xmm5zml6UgPiBuaWNoaXlvdWJpXCA7CivmtojpmLLnvbIgPiBzaG91Ym91c2hvXCA7CivosqfkuY/mgKcgPiBiaW5ib3VzaG91XCA7CivmoLjltKnlo4ogPiBrYWt1aG91a2FpXCA7Civoqq3mm7jkvJogPiBkb2t1c2hva2FpXCA7CivkuI3mvZTmhJ8gPiBmdWtldHN1a2FuXCA7CivmlbDlrabogIUgPiBzdXVnYWt1c2hhXCA7CivogbTlj5bogIUgPiBjaG91c2h1c2hhXCA7Civoqq3mm7jkurogPiBkb2t1c2hvamluXCA7CivliY3ku7vlnLAgPiB6ZW4nJ25pbmNoaVwgOwor5ryB6Imy5a62ID4gZ3lvc2hva3VrYVwgOwor6KO95L2c6ICFID4gc2Vpc2FrdXNoYVwgOwor5rKh5YCL5oCnID4gYm90c3Vrb3NlaVwgOwor5YWo5bqX5LitID4gemVudGVuY2h1dVwgOwor5a6Y57Wm5ZOBID4ga2Fua3l1dWhpblwgOwor55m96YeR5pePID4gaGFra2luem9rdVwgOwor5aSp5paH5a2mID4gdGVubW9uZ2FrdVwgOwor5YW15a2m6ICFID4gaGVpZ2FrdXNoYVwgOwor5ZCI5ZSx6ZqKID4gZ2Fzc2hvdXRhaVwgOwor5LiN5oiQ56uLID4gZnVzZWlyaXRzdVwgOwor54yu57SN5ZOBID4ga2VuJydub3VoaW5cIDsKK+e0sOeykuWIhiA+IHNhaXJ5dXVidW5cIDsKK+eMm+e3tOe/kiA+IG1vdXJlbnNodXVcIDsKK+S+i+WklueahCA+IHJlaWdhaXRla2lcIDsKK+WKueeOh+WMliA+IGtvdXJpdHN1a2FcIDsKK+mZpOiZq+iPiiA+IGpvY2h1dWdpa3VcIDsKK+e0heeUn+WnnCA+IGJlbmlzaG91Z2FcIDsKK+W5suaLk+WcsCA+IGthbnRha3VjaGlcIDsKK+WHjeWCt+iAhSA+IHRvdXNob3VzaGFcIDsKK+WNl+WNl+adsSA+IG5hbicnbmFudG91XCA7CivlkIzlm73kurogPiBkb3Vrb2t1amluXCA7Civnm67nmoToqp4gPiBtb2t1dGVraWdvXCA7CivkuInlm73lv5cgPiBzYW5nb2t1c2hpXCA7CivkurrniannlLsgPiBqaW5idXRzdWdhXCA7CivlkLjlhaXlmaggPiBreXV1bnl1dWtpXCA7CivpmLLlr5LmnI0gPiBib3VrYW5mdWt1XCA7Civkv67pmaLplbcgPiBzaHV1aW5jaG91XCA7Civlm73lhoXms5UgPiBrb2t1bmFpaG91XCA7CivmjqLnqbbogIUgPiB0YW5reXV1c2hhXCA7CivliJ3lv4PogIUgPiBzaG9zaGluc2hhXCA7CivmnKrplovnmbogPiBtaWthaWhhdHN1XCA7CivluoPlkYrloZQgPiBrb3Vrb2t1dG91XCA7Civplovmi5PogIUgPiBrYWl0YWt1c2hhXCA7CivkurrpoZ7lraYgPiBqaW5ydWlnYWt1XCA7Civnn6Xml6XmtL4gPiBjaGluaWNoaWhhXCA7CivmnIDpq5jmva4gPiBzYWlrb3VjaG91XCA7CivlpKnnhLbmuK8gPiB0ZW4nJ25lbmtvdVwgOwor5Y+N6YCG5YWQID4gaGFuZ3lha3VqaVwgOwor5LiA5Zu96ICFID4gaWtrb2t1bW9ub1wgOwor5aW95p2Q5paZID4ga291emFpcnlvdVwgOwor5aSq6Zm95pqmID4gdGFpeW91cmVraVwgOwor5bi455So55mWID4gam91eW91aGVraVwgOwor5pep5pWZ6IKyID4gc291a3lvdWlrdVwgOwor5qC85a2Q57ieID4ga291c2hpamltYVwgOwor5Y+N6LuN55qEID4gaGFuZ3VudGVraVwgOwor6Jas5YyF57SZID4geWFrdWhvdXNoaVwgOwor5YW15pu56ZW3ID4gaGVpc291Y2hvdVwgOwor5ryi5paH5a2mID4ga2FuYnVuZ2FrdVwgOwor5oCl5YWI6YuSID4ga3l1dXNlbnBvdVwgOwor5Y+j5aWH6bqXID4ga3VjaGlnaXJlaVwgOwor6KGM5pS/5rOVID4gZ3lvdXNlaWhvdVwgOwor6Iqx6KiA6JGJID4gaGFuYWtvdG9iYVwgOwor6YCB6YeR6aGNID4gc291a2luZ2FrdVwgOwor5rGC5ama6ICFID4ga3l1dWtvbnNoYVwgOwor5YaN6Kq/5pW0ID4gc2FpY2hvdXNlaVwgOwor6aKo6KaL6baPID4ga2F6YW1pZG9yaVwgOwor5Z+35pS/5a6YID4gc2hpc3NlaWthblwgOwor6IO95qW95aCCID4gbm91Z2FrdWRvdVwgOwor5aW95LiL54mpID4ga291a2FidXRzdVwgOwor5Y+M55m65qmfID4gc291aGF0c3VraVwgOwor5YWs5YWx5YK1ID4ga291a3lvdXNhaVwgOwor5pio5bm05p2lID4gc2FrdW5lbnJhaVwgOwor5o+Q5L6b6ICFID4gdGVpa3lvdXNoYVwgOwor6Ya46YCg5a2mID4gam91em91Z2FrdVwgOwor5b6X54K55ZyPID4gdG9rdXRlbmtlblwgOwor5a+p576O5a2mID4gc2hpbmJpZ2FrdVwgOwor5aWz5L6/5omAID4gb24nJ25hYmVuam9cIDsKK+WRieacjeeJqSA+IGdvZnVrdW1vbm9cIDsKK+eXh+WAmee+pCA+IHNob3Vrb3VndW5cIDsKK+agvOWtkOeqkyA+IGtvdXNoaW1hZG9cIDsKK+aWh+aYjuWbvSA+IGJ1bm1laWtva3VcIDsKK+ihjOaUv+aoqSA+IGd5b3VzZWlrZW5cIDsKK+mHkeacqOeKgCA+IGtpbm1va3VzZWlcIDsKK+enkeWtpueahCA+IGthZ2FrdXRla2lcIDsKK+aJi+acreWeiyA+IHRlZnVkYWdhdGFcIDsKK+WFqOiIrOeahCA+IHplbnBhbnRla2lcIDsKK+eJueauiumLvCA+IHRva3VzaHVrb3VcIDsKK+Wcp+e4ruaApyA+IGFzc2h1a3VzZWlcIDsKK+WumOaIv+mVtyA+IGthbmJvdWNob3VcIDsKK+eZveegguezliA+IHNoaXJvemF0b3VcIDsKK+aYpeWIhueCuSA+IHNodW5idW50ZW5cIDsKK+aXp+S4u+S6uiA+IGt5dXVzaHVqaW5cIDsKK+iRiee3kee0oCA+IHlvdXJ5b2t1c29cIDsKK+WGhemdoueahCA+IG5haW1lbnRla2lcIDsKK+iCuue1kOaguCA+IGhhaWtla2tha3VcIDsKK+WbnuWPjumHkSA+IGthaXNodXVraW5cIDsKK+e2v+W4veWtkCA+IHdhdGFib3VzaGlcIDsKK+aApemAsua0viA+IGt5dXVzaGluaGFcIDsKK+iKuOihk+mZoiA+IGdlaWp1dHN1aW5cIDsKK+amtOW8vuegsiA+IHJ5dXVkYW5wb3VcIDsKK+WGkumZuuW/gyA+IGJvdWtlbnNoaW5cIDsKK+WPr+eHg+eJqSA+IGthbmVuYnV0c3VcIDsKK+aXpeacrOS4gCA+IG5paG9uJydpY2hpXCA7Civkv67nt7TogIUgPiBzaHV1cmVuc2hhXCA7Civlj43lsITpj6EgPiBoYW5zaGFreW91XCA7Civkuoznm7Top5IgPiBuaWNob2trYWt1XCA7CivlnovlpInmj5sgPiBrYXRhaGVua2FuXCA7Civljrvli6LniZsgPiBreW9zZWl1c2hpXCA7Civniq/nvarlraYgPiBoYW56YWlnYWt1XCA7Civljp/nsY3lnLAgPiBnZW5zZWtpY2hpXCA7CivmgKfpgZPlvrMgPiBzZWlkb3V0b2t1XCA7CivlubPmu5HljJYgPiBoZWlrYXRzdWthXCA7Civpg7Xkvr/nrrEgPiB5dXViaW5iYWtvXCA7Civlj5fkv6HmlpkgPiBqdXNoaW5yeW91XCA7Civlho3ntYTnuZQgPiBzYWlzb3NoaWtpXCA7Civnvo7ooZPnlYwgPiBiaWp1dHN1a2FpXCA7CivkuI3nrYnlvI8gPiBmdWRvdXNoaWtpXCA7CivntITlrprmm7ggPiB5YWt1am91c2hvXCA7CivkuInnrofml6UgPiBzYW5nYW5pY2hpXCA7CivnmbrnpaXlnLAgPiBoYXNzaG91Y2hpXCA7Civli53miYvlj6MgPiBrYXR0ZWd1Y2hpXCA7CivlpJXpo5/lvowgPiB5dXVzaG9rdWdvXCA7CivmkKzlhaXml6UgPiBoYW4nJ255dXViaVwgOwor6LGq5ZWG5bGkID4gZ291c2hvdXNvdVwgOwor5aW06LGG6IWQID4geWFra29kb3VmdVwgOwor5oSf6Kaa6KuWID4ga2Fua2FrdXJvblwgOwor5Zu955Sj6LuKID4ga29rdXNhbnNoYVwgOwor5LiN5rWB6YCaID4gZnVyeXV1dHN1dVwgOwor5qmL6aCt5aChID4ga3lvdXRvdWhvdVwgOwor5aSP5pmC6ZaTID4gbmF0c3VqaWthblwgOwor55+z54Kt5bGkID4gc2VraXRhbnNvdVwgOwor57W55LiA5Yy5ID4ga2ludWlwcGlraVwgOwor5bu655m95pu4ID4ga2VucGFrdXNob1wgOwor5raI6Ziy5rOVID4gc2hvdWJvdWhvdVwgOwor5Lit6L+R5p2xID4gY2h1dWtpbnRvdVwgOwor6Ki85Lq65Y+wID4gc2hvdW5pbmRhaVwgOwor5rC055Sj5qWtID4gc3Vpc2FuZ3lvdVwgOwor5aWH5oOz5puyID4ga2lzb3VreW9rdVwgOwor5q+U5L6L5byPID4gaGlyZWlzaGlraVwgOwor55S35omA5bivID4gb3Rva29qb3RhaVwgOwor5L+u5pW054mIID4gc2h1dXNlaWhhblwgOwor5Ya35rC05rW0ID4gcmVpc3VpeW9rdVwgOwor5aSP576957mUID4gbmF0c3ViYW9yaVwgOwor6KSS6KiA6JGJID4gaG9tZWtvdG9iYVwgOwor5LqL5YuZ5py6ID4gamltdWR6dWt1ZVwgOwor5Li75YKs5Zu9ID4gc2h1c2Fpa29rdVwgOwor5aSn5aSW5YiIID4gb29zb3RvZ2FyaVwgOwor5riF566X5Lq6ID4gc2Vpc2FuJyduaW5cIDsKK+S9j+awkeelqCA+IGp1dW1pbmh5b3VcIDsKK+eEoee3muWxgCA+IG11c2Vua3lva3VcIDsKK+aCquadkOaWmSA+IGFrdXphaXJ5b3VcIDsKK+aXpeeFp+ioiCA+IG5pc3Nob3VrZWlcIDsKK+aUr+aMgeeOhyA+IHNoaWppcml0c3VcIDsKK+S6jOmAo+eZuiA+IG5pcmVucGF0c3VcIDsKK+WFt+ixoeeahCA+IGd1c2hvdXRla2lcIDsKK+WJr+aKteW9kyA+IGZ1a3V0ZWl0b3VcIDsKK+iDuOiGnOeCjiA+IGt5b3VtYWt1ZW5cIDsKK+mZpOa5v+WZqCA+IGpvc2hpdHN1a2lcIDsKK+S5l+aPm+mnhSA+IG5vcmlrYWVla2lcIDsKK+WPpOacrOWxiyA+IGZ1cnVob24nJ3lhXCA7Civlt6jlpKfnl4cgPiBreW9kYWlzaG91XCA7Civnn6Xml6XlrrYgPiBjaGluaWNoaWthXCA7Civnmb3nnLzoppYgPiBoYWt1Z2Fuc2hpXCA7CivnhaflsITms5UgPiBzaG91c2hhaG91XCA7CivotaTkv6Hlj7cgPiBha2FzaGluZ291XCA7CivplbfmlrnlvaIgPiBjaG91aG91a2VpXCA7CivkuIflm73lj7IgPiBiYW5rb2t1c2hpXCA7CivpgKDlhbXlu6AgPiB6b3VoZWlzaG91XCA7CivmnbHkuqzmub4gPiB0b3VreW91d2FuXCA7Civni6zlibXmgKcgPiBkb2t1c291c2VpXCA7CivmlL7mtarnmZYgPiBob3Vyb3VoZWtpXCA7CivooYzmlL/lrpggPiBneW91c2Vpa2FuXCA7CivmsqHotqPlkbMgPiBib3RzdXNodW1pXCA7CivpmbbphZTlooMgPiB0b3VzdWlreW91XCA7Civlj43lsITop5IgPiBoYW5zaGFrYWt1XCA7CivlhaznlJ/mtq8gPiBrb3VzaG91Z2FpXCA7CivnibnlirnolqwgPiB0b2trb3V5YWt1XCA7CivlpJrpoIXlvI8gPiB0YWtvdXNoaWtpXCA7Civooajmg4XnrYsgPiBoeW91am91a2luXCA7CivliKnnm4rnjocgPiByaWVraXJpdHN1XCA7CivkuInmi43lrZAgPiBzYW5ieW91c2hpXCA7Civph4/osqnlupcgPiByeW91aGFudGVuXCA7Civnt6jpm4blrZAgPiBoZW5zaHV1c2hpXCA7CivlhpfplbfmgKcgPiBqb3VjaG91c2VpXCA7CivpvLvnnLzpj6EgPiBoYW5hbWVnYW5lXCA7CivlhoXoppbpj6EgPiBuYWlzaGlreW91XCA7CivotaTnv6Hnv6AgPiBha2FzaG91YmluXCA7CivnhrHmqZ/plqIgPiBuZXRzdWtpa2FuXCA7CivmkYLorbfohbogPiBzZXRzdWdvc2VuXCA7Civlr77mipfnrZYgPiB0YWlrb3VzYWt1XCA7Civov5Hku6PliocgPiBraW5kYWlnZWtpXCA7CivlvrnlupXnmoQgPiB0ZXR0ZWl0ZWtpXCA7CivmrbTku6Plj7IgPiByZWtpZGFpc2hpXCA7Civml6nopovooaggPiBoYXlhbWloeW91XCA7CivmipXlsITop5IgPiB0b3VzaGFrYWt1XCA7Civnm6PnnaPogIUgPiBrYW50b2t1c2hhXCA7CivlhbHnlKPlnI8gPiBreW91c2Fua2VuXCA7Civlrp/ooYzkuK0gPiBqaWtrb3VjaHV1XCA7CivnjJvmlLvmkoMgPiBtb3Vrb3VnZWtpXCA7Civpm7vlrZDmrrsgPiBkZW5zaGlrYWt1XCA7CivmnZHlvbnloLQgPiBtdXJheWFrdWJhXCA7Civpmbjou5/poqggPiByaWt1bmFucHV1XCA7CivmlL/msrvoibIgPiBzZWlqaXNob2t1XCA7Civmr43lrZDojYkgPiBoYWhha29ndXNhXCA7CivnibnlvoXnlJ8gPiB0b2t1dGFpc2VpXCA7CivkuK3nm6TmiKYgPiBjaHV1YmFuc2VuXCA7CivoiJ7ouI/pnbQgPiBidXRvdWd1dHN1XCA7CivlpKfpmarlr6kgPiBkYWliYWlzaGluXCA7CivnhKHnuIHku48gPiBtdWVuYm90b2tlXCA7Civoqo3lrproqLwgPiBuaW50ZWlzaG91XCA7Civnvo7ooZPmm7ggPiBiaWp1dHN1c2hvXCA7CivoqIjph4/ms5UgPiBrZWlyeW91aG91XCA7Civljp/mjK/li5UgPiBnZW5zaGluZG91XCA7CivlraboirjkvJogPiBnYWt1Z2Vpa2FpXCA7CivohILogqrlv4MgPiBzaGlib3VzaGluXCA7Civni7jppYLpo6kgPiB0YW51a2l1ZG9uXCA7CivmsLTnlKPluoEgPiBzdWlzYW5jaG91XCA7CivlkIjmhrLnmoQgPiBnb3VrZW50ZWtpXCA7CivkuLvkvZPnmoQgPiBzaHV0YWl0ZWtpXCA7CivnqoPnm5fni4IgPiBzZXR0b3VreW91XCA7CivlpbPkuIDoiKwgPiBvbicnbmFpcHBhblwgOwor5rG65Yud57eaID4ga2Vzc2hvdXNlblwgOwor5Y+j5LiK5omLID4ga3VjaGlqb3V6dVwgOwor5bel5aC06ZW3ID4ga291am91Y2hvdVwgOwor5peX5LqM5rWBID4gaGF0YW5pcnl1dVwgOwor5Y2z5L2N5byPID4gc29rdWlzaGlraVwgOwor5oeQ5p+U562WID4ga2FpanV1c2FrdVwgOwor5bm75oOz5YqHID4gZ2Vuc291Z2VraVwgOwor5LqL5YuZ5a6kID4gamltdXNoaXRzdVwgOwor6LaF6KaP5YmHID4gY2hvdWtpc29rdVwgOwor5qC45a625pePID4ga2FrdWthem9rdVwgOwor5aSV5pyI5aScID4geXV1ZHp1a2V5b1wgOwor5aSn6KGG6LuKID4gZGFpc2h1dXNoYVwgOwor54Sh57GN6ICFID4gbXVzZWtpbW9ub1wgOwor5pel54us5LyKID4gbmljaGlkb2t1aVwgOwor5oKq57+S5oWjID4gYWt1c2h1dWthblwgOwor56Gr6YW46YqFID4gcnl1dXNhbmRvdVwgOwor5rC055Sj5a2mID4gc3Vpc2FuZ2FrdVwgOwor5bm456aP5oSfID4ga291ZnVrdWthblwgOwor6LOg5YSf6YeRID4gYmFpc2hvdWtpblwgOwor5YWx55Sj5YWaID4ga3lvdXNhbnRvdVwgOwor6Ii55p2/5aGAID4gZnVuYWl0YWJlaVwgOwor5YWo5a2m6YCjID4gemVuZ2FrdXJlblwgOwor55u06LWw6LevID4gY2hva3Vzb3Vyb1wgOwor5rC36LGG6IWQID4ga29vcmlkb3VmdVwgOwor5YWl5bGF6ICFID4gbnl1dWt5b3NoYVwgOwor5pel6Zmw6ICFID4gaGlrYWdlbW9ub1wgOwor57W257iB57eaID4gemV0c3VlbnNlblwgOwor5ZOB6KmV5LyaID4gaGlucHlvdWthaVwgOwor5rC055O25bqnID4gbWl6dWdhbWV6YVwgOwor5ZCE5Zuj5L2TID4ga2FrdWRhbnRhaVwgOwor5p2l5p2l6YCxID4gcmFpcmFpc2h1dVwgOwor5Zub5Y2B6ZuAID4gc2hpanV1a2FyYVwgOwor6YCa55So6ZaAID4gdHN1dXlvdW1vblwgOwor54iq5qWK5p6dID4gdHN1bWF5b3VqaVwgOwor5pWj6auq5bGLID4gc2FucGF0c3V5YVwgOwor5qCh5q2j5Yi3ID4ga291c2VpenVyaVwgOwor6buS55y86Y+hID4ga3Vyb21lZ2FuZVwgOwor6YCg6Ii55qWtID4gem91c2VuZ3lvdVwgOwor6Kaz5YqH5LyaID4ga2FuZ2VraWthaVwgOwor5YWs5a6z55eFID4ga291Z2FpYnlvdVwgOwor5Y+X5L+h5YG0ID4ganVzaGluZ2F3YVwgOwor5LyB5qWt5b+DID4ga2lneW91c2hpblwgOwor5L+u57mV5belID4gc2h1dXplbmtvdVwgOwor5Y2Y6Lqr6YqDID4gdGFuc2hpbmp1dVwgOwor55m+5bm055uuID4gaHlha3VuZW5tZVwgOwor5rKh55CG5oOzID4gYm90c3VyaXNvdVwgOwor6Z2Z6ISI54KOID4gam91bXlha3VlblwgOwor5YWo6IO96ICFID4gemVuJydub3VzaGFcIDsKK+WRieacjeWVhiA+IGdvZnVrdXNob3VcIDsKK+ecgeizh+a6kCA+IHNob3VzaGlnZW5cIDsKK+mbhuWQiOirliA+IHNodXVnb3Vyb25cIDsKK+emgeeFmeW4rSA+IGtpbicnZW5zZWtpXCA7CivplbfmlrnkvZMgPiBjaG91aG91dGFpXCA7Civlj5fkv6HkurogPiBqdXNoaW4nJ25pblwgOwor5peX5LqM5peSID4gaGF0YW5pcnl1dVwgOwor5oCl5YGc6LuKID4ga3l1dXRlaXNoYVwgOwor57Oe5bqm6IO4ID4ga3Vzb2Rva3lvdVwgOwor5raI6Ziy5aOrID4gc2hvdWJvdXNoaVwgOwor5pyJ55CG5byPID4geXV1cmlzaGlraVwgOwor57WC5YiX6LuKID4gc2h1dXJlc3NoYVwgOwor5omA5pyJ5qC8ID4gc2hveXV1a2FrdVwgOwor55+l6Kaa55+lID4gY2hpa2FrdWNoaVwgOwor6YGK5pKD5omLID4geXV1Z2VraXNodVwgOwor6Kej54ax5YmkID4gZ2VuZXRzdXphaVwgOwor5bqX5bGL54mpID4gdGVuJyd5YW1vbm9cIDsKK+mBiuaSg+aIpiA+IHl1dWdla2lzZW5cIDsKK+WxseawtOmWoyA+IHNhbnN1aWtha3VcIDsKK+iqrOaVmeW4qyA+IHNla2t5b3VzaGlcIDsKK+WztuW4neWbvSA+IHRvdXRlaWtva3VcIDsKK+WNkeWKo+a8oiA+IGhpcmV0c3VrYW5cIDsKK+WFqOeUn+a2ryA+IHplbnNob3VnYWlcIDsKK+WFqOS8muihhiA+IHplbmthaXNodXVcIDsKK+WPjuWuueiAhSA+IHNodXV5b3VzaGFcIDsKK+ino+mbhuWQiCA+IGthaXNodXVnb3VcIDsKK+ebuOWvvueahCA+IHNvdXRhaXRla2lcIDsKK+efs+eBsOS5syA+IHNla2thaW55dXVcIDsKK+WFseacieiAhSA+IGt5b3V5dXVzaGFcIDsKK+aMh+WumuW4rSA+IHNoaXRlaXNla2lcIDsKK+WVhuWTgeWQjSA+IHNob3VoaW5tZWlcIDsKK+agueacrOeahCA+IGtvbnBvbnRla2lcIDsKK+e+juihk+WxlSA+IGJpanV0c3V0ZW5cIDsKK+e4nuaooeanmCA+IHNoaW1hbW95b3VcIDsKK+a2iOmYsuWboyA+IHNob3Vib3VkYW5cIDsKK+S5vuiRoeiQhCA+IGhvc2hpYnVkb3VcIDsKK+e+veaguei7iiA+IGhhbmVndXJ1bWFcIDsKK+eZuuWLleapnyA+IGhhdHN1ZG91a2lcIDsKK+mXmOeJm+WjqyA+IHRvdWd5dXVzaGlcIDsKK+WQjOaDheelqCA+IGRvdWpvdWh5b3VcIDsKK+WFpeS8mumHkSA+IG55dXVrYWlraW5cIDsKK+eGseehrOWMliA+IG5ldHN1a291a2FcIDsKK+mXmOeJm+WgtCA+IHRvdWd5dXVqb3VcIDsKK+WPjeWvvuelqCA+IGhhbnRhaWh5b3VcIDsKK+WGt+WNtOWZqCA+IHJlaWt5YWt1a2lcIDsKK+WAn+WFpemHkSA+IGthcmlpcmVraW5cIDsKK+WVhuWTgeWIuCA+IHNob3VoaW5rZW5cIDsKK+atk+alveihlyA+IGthbnJha3VnYWlcIDsKK+eglOWJiuebpCA+IGtlbnNha3ViYW5cIDsKK+acrOexjeWcsCA+IGhvbnNla2ljaGlcIDsKK+awl+asneeXhyA+IGtpdXRzdXNob3VcIDsKK+aBi+Wls+aIvyA+IGtvaW55b3Vib3VcIDsKK+iEs+elnue1jCA+IG5vdXNoaW5rZWlcIDsKK+iGoOWOn+eXhSA+IGtvdWdlbmJ5b3VcIDsKK+eJveWItueQgyA+IGtlbnNlaWt5dXVcIDsKK+aWsOmAoOiIuSA+IHNoaW56b3VzZW5cIDsKK+aEn+immueCuSA+IGthbmtha3V0ZW5cIDsKK+WBveWQm+WtkCA+IG5pc2VrdW5zaGlcIDsKK+axuuWLneeCuSA+IGtlc3Nob3V0ZW5cIDsKK+WkmuaVsOaxuiA+IHRhc3V1a2V0c3VcIDsKK+aEj+itmOeahCA+IGlzaGlraXRla2lcIDsKK+WPjeWwhOeahCA+IGhhbnNoYXRla2lcIDsKK+S4jea0u+eZuiA+IGZ1a2FwcGF0c3VcIDsKK+WPl+mgmOiovCA+IGp1cnlvdXNob3VcIDsKK+e0lOaWh+WtpiA+IGp1bmJ1bmdha3VcIDsKK+eJueaApeWIuCA+IHRva2t5dXVrZW5cIDsKK+m7hOmHkeihkyA+IG91Z29uanV0c3VcIDsKK+S7ruWLmOWumiA+IGthcmlrYW5qb3VcIDsKK+mciumVt+mhniA+IHJlaWNob3VydWlcIDsKK+WFqOi6q+WDjyA+IHplbnNoaW56b3VcIDsKK+Wvhui8uOWTgSA+IG1pdHN1eXVoaW5cIDsKK+aXouioree3miA+IGtpc2V0c3VzZW5cIDsKK+S6jOmAo+W8jyA+IG5pcmVuc2hpa2lcIDsKK+a4m+mAn+adkCA+IGdlbnNva3V6YWlcIDsKK+WFieejgeawlyA+IGhpa2FyaWppa2lcIDsKK+iovOaYjuabuCA+IHNob3VtZWlzaG9cIDsKK+mWi+aLk+WcsCA+IGthaXRha3VjaGlcIDsKK+iomOi/sOWtkCA+IGtpanV0c3VzaGlcIDsKK+S7ruWFjeiosSA+IGthcmltZW5reW9cIDsKK+WNsOixoeeahCA+IGluc2hvdXRla2lcIDsKK+aXp+aVmeW+kiA+IGt5dXVreW91dG9cIDsKK+iyqOeJqeS+vyA+IGthbW90c3ViaW5cIDsKK+acieacm+agqiA+IHl1dWJvdWthYnVcIDsKK+aFo+S+i+eahCA+IGthbnJlaXRla2lcIDsKK+ims+ebuOWtpiA+IGthbnNvdWdha3VcIDsKK+iCieeUqOeoriA+IG5pa3V5b3VzaHVcIDsKK+WfuuWcsOWxgCA+IGtpY2hpa3lva3VcIDsKK+imluelnue1jCA+IHNoaXNoaW5rZWlcIDsKK+mBqeW/nOeXhyA+IHRla2lvdXNob3VcIDsKK+S4remrmOeUnyA+IGNodXVrb3VzZWlcIDsKK+S4i+a6luWCmSA+IHNoaXRhanVuYmlcIDsKK+S/oemgvOaEnyA+IHNoaW5yYWlrYW5cIDsKK+eZuumFteS5syA+IGhha2tvdW55dXVcIDsKK+aXheiKuOS6uiA+IHRhYmlnZWluaW5cIDsKK+S6uumbquW0qSA+IGhpdG9uYWRhcmVcIDsKK+S4u+S/oeWPtyA+IHNodXNoaW5nb3VcIDsKK+S/oeWlieiAhSA+IHNoaW5wb3VzaGFcIDsKK+Wwuuiyq+azlSA+IHNoYWtrYW5ob3VcIDsKK+e+juihk+WTgSA+IGJpanV0c3VoaW5cIDsKK+mAmuS/oeiyuyA+IHRzdXVzaGluaGlcIDsKK+S/oemgvOaApyA+IHNoaW5yYWlzZWlcIDsKK+aEn+immuavmyA+IGthbmtha3Vtb3VcIDsKK+mghuW/nOaApyA+IGp1bicnbm91c2VpXCA7CivluLjnv5LogIUgPiBqb3VzaHV1c2hhXCA7Civnvo7ooZPlj7IgPiBiaWp1dHN1c2hpXCA7CivmqoDpgqPlr7ogPiBkYW4nJ25hZGVyYVwgOwor5Y2D5q2z6aO0ID4gY2hpdG9zZWFtZVwgOwor6KO95p2Q5qWtID4gc2VpemFpZ3lvdVwgOwor5paw5qmf6Lu4ID4gc2hpbmtpamlrdVwgOwor6IKJ6aWF6aCtID4gbmlrdW1hbmp1dVwgOwor5rC06LOH5rqQID4gbWl6dXNoaWdlblwgOwor55m96bOl5bqnID4gaGFrdWNob3V6YVwgOwor55m+5YiG5q+UID4gaHlha3VidW5oaVwgOwor6Kmm6YeR55+zID4gc2hpa2luc2VraVwgOwor5YSq562J6LOeID4geXV1dG91c2hvdVwgOwor5aSn6KGG57SZID4gdGFpc2h1dXNoaVwgOwor6Iqx6KaL5pmCID4gaGFuYW1pZG9raVwgOwor5aGX5pOm5YmkID4gdG9zYXRzdXphaVwgOwor5pyo6KO95ZOBID4gbW9rdXNlaWhpblwgOwor5YaF6KeS55CDID4gbmFpa2Fra3l1dVwgOwor6aWS6IiM5a62ID4gam91emV0c3VrYVwgOwor54ax5Yem55CGID4gbmV0c3VzaG9yaVwgOwor5paw5bm557eaID4gc2hpbmthbnNlblwgOwor5YuV5ZCR6KGoID4gZG91a291aHlvdVwgOwor5Lqk6Z+/6KmpID4ga291a3lvdXNoaVwgOwor5oyo5ou254q2ID4gYWlzYXRzdWpvdVwgOwor6Zml5rKh5rmWID4ga2FuYm90c3Vrb1wgOwor5LiN5rS75rqMID4gZnVrYXBwYXRzdVwgOwor5L+h5aSp57+BID4gc2hpbnRlbicnb3VcIDsKK+i1t+mbu+WKmyA+IGtpZGVucnlva3VcIDsKK+mOrumtguelrSA+IGNoaW5rb25zYWlcIDsKK+iItuadpeWTgSA+IGhha3VyYWloaW5cIDsKK+aJi+WhqeeavyA+IHRlc2hpb3phcmFcIDsKK+m7kuW6lee/syA+IGt1cm9zb2tvaGlcIDsKK+WtpueUn+W4vSA+IGdha3VzZWlib3VcIDsKK+awtOagveWfuSA+IG1penVzYWliYWlcIDsKK+WWtumAoOeJqSA+IGVpem91YnV0c3VcIDsKK+aXpeeFp+aoqSA+IG5pc3Nob3VrZW5cIDsKK+WFiemHj+WtkCA+IGtvdXJ5b3VzaGlcIDsKK+S4h+aEmuevgCA+IGJhbmd1c2V0c3VcIDsKK+iDveeLguiogCA+IG5vdWt5b3VnZW5cIDsKK+aUr+aMgeWKmyA+IHNoaWppcnlva3VcIDsKK+e1seioiOihqCA+IHRvdWtlaWh5b3VcIDsKK+WFiOWPsuWtpiA+IHNlbnNoaWdha3VcIDsKK+ehq+mFuOe0mSA+IHJ5dXVzYW5zaGlcIDsKK+aAp+W3ruWIpSA+IHNlaXNhYmV0c3VcIDsKK+acrOWbveS6uiA+IGhvbmdva3VqaW5cIDsKK+W3qOimlueahCA+IGt5b3NoaXRla2lcIDsKK+i7oui9jeapnyA+IHRlbnRldHN1a2lcIDsKK+ihqOW/oOeikSA+IGh5b3VjaHV1aGlcIDsKK+WPjuizhOe9qiA+IHNodXV3YWl6YWlcIDsKK+iWrOWJpOW4qyA+IHlha3V6YWlzaGlcIDsKK+W+jOimi+S6uiA+IGtvdWtlbicnbmluXCA7CivpgKPnlKjlvaIgPiByZW4nJ3lvdWtlaVwgOwor5L2Z55m95rOoID4geW9oYWt1Y2h1dVwgOwor5Lyd57Wx55qEID4gZGVudG91dGVraVwgOwor6Kaq5qip6ICFID4gc2hpbmtlbnNoYVwgOwor5YaG5aSp5LqVID4gbWFydXRlbmpvdVwgOwor5bCR5bm06ZmiID4gc2hvdW5lbicnaW5cIDsKK+attOmdkueCrSA+IHJla2lzZWl0YW5cIDsKK+igj+W3peiIuSA+IGthbmlrb3VzZW5cIDsKK+ebruWFq+WIhiA+IG1laGFjaGlidW5cIDsKK+Wbm+WNgeiCqSA+IHNoaWp1dWthdGFcIDsKK+alveims+eahCA+IHJha2thbnRla2lcIDsKK+W/g+WBnOatoiA+IHNoaW50ZWlzaGlcIDsKK+mAn+WwhOegsiA+IHNva3VzaGFob3VcIDsKK+WkmuinkueahCA+IHRha2FrdXRla2lcIDsKK+aWsOW7uuadkCA+IHNoaW5rZW56YWlcIDsKK+axuuWLneaIpiA+IGtlc3Nob3VzZW5cIDsKK+S4jeW/heimgSA+IGZ1aGl0c3V5b3VcIDsKK+aJgemdkuefsyA+IGhlbnNlaXNla2lcIDsKK+WPjOeQg+iPjCA+IHNvdWt5dXVraW5cIDsKK+awtOe+iue+riA+IG1penV5b3VrYW5cIDsKK+aKnOacrOeahCA+IGJhcHBvbnRla2lcIDsKK+WNmOeZuuapnyA+IHRhbnBhdHN1a2lcIDsKK+i7oumAgeWFiCA+IHRlbnNvdXNha2lcIDsKK+WFpeS8muiAhSA+IG55dXVrYWlzaGFcIDsKK+S4uOacqOiIuSA+IG1hcnVraWJ1bmVcIDsKK+S4uOacqOiInyA+IG1hcnVraWJ1bmVcIDsKK+W4jOmHiOa2siA+IGtpc2hha3Vla2lcIDsKK+aciOabnOaXpSA+IGdldHN1eW91YmlcIDsKK+acgOizg+azlSA+IHNhaWNoaW5ob3VcIDsKK+mdqeaWsOa0viA+IGtha3VzaGluaGFcIDsKK+aOouaxguiAhSA+IHRhbmt5dXVzaGFcIDsKK+aIpueXheatuyA+IHNlbmJ5b3VzaGlcIDsKK+eUt+aAp+eahCA+IGRhbnNlaXRla2lcIDsKK+S5s+mFuOiPjCA+IG55dXVzYW5raW5cIDsKK+WJjeeFp+eBryA+IHplbnNob3V0b3VcIDsKK+iFuOaNu+i7oiA+IGNob3VuZW50ZW5cIDsKK+imquWIhuagqiA+IG95YWJ1bmthYnVcIDsKK+WtpueUqOWTgSA+IGdha3V5b3VoaW5cIDsKK+eJueauiuaApyA+IHRva3VzaHVzZWlcIDsKK+WNmOiJsueUuyA+IHRhbnNob2t1Z2FcIDsKK+S7leeri+WIuCA+IHNoaXRhdGVrZW5cIDsKK+mZsOW8geaFtiA+IGthZ2ViZW5rZWlcIDsKK+a3t+ihgOWFkCA+IGtvbmtldHN1amlcIDsKK+iyqeWjsuWFgyA+IGhhbmJhaW1vdG9cIDsKK+W4uOe/kueKryA+IGpvdXNodXVoYW5cIDsKK+a4hea2vOWJpCA+IHNlaXJ5b3V6YWlcIDsKK+acgOWwj+WApCA+IHNhaXNob3VjaGlcIDsKK+awtOaXj+mkqCA+IHN1aXpva3VrYW5cIDsKK+WFseeKr+iAhSA+IGt5b3VoYW5zaGFcIDsKK+Wvv+WPuOmjryA+IHN1c2hpbWVzaGlcIDsKK+aApei7ouaPmyA+IGt5dXV0ZW5rYW5cIDsKK+aLm+W+heeKtiA+IHNob3V0YWlqb3VcIDsKK+aJk+aSsuWCtyA+IGRhYm9rdXNob3VcIDsKK+eJueW+heWIuCA+IHRva3V0YWlrZW5cIDsKK+avkuS6uuWPgiA+IGRva3VuaW5qaW5cIDsKK+WkqeeruuiRtSA+IHRlbmppa3Vhb2lcIDsKK+Wls+S4luW4ryA+IG9uJyduYWpvdGFpXCA7CivkurrplpPnmoQgPiBuaW5nZW50ZWtpXCA7CivoqLrmlq3mm7ggPiBzaGluZGFuc2hvXCA7CivomJroi5TlraYgPiBzZW50YWlnYWt1XCA7Civljp/nqL/mlpkgPiBnZW5rb3VyeW91XCA7Civnm6PnnaPlrpggPiBrYW50b2t1a2FuXCA7CivllYbli5nnnIEgPiBzaG91bXVzaG91XCA7CivlrqPlkYrmm7ggPiBzZW5rb2t1c2hvXCA7CivlpJzlpJzkuK0gPiB5b3J1eW9uYWthXCA7CivpgJrkv6HnsL8gPiB0c3V1c2hpbmJvXCA7CivloIbnqY3lsqkgPiB0YWlzZWtpZ2FuXCA7CivmipHnlZnmiYAgPiB5b2t1cnl1dWpvXCA7Civmkp7mnKjmnZYgPiBzaHVtb2t1enVlXCA7Civpu4Tph5HnjocgPiBvdWdvbnJpdHN1XCA7CivloIbnqY3lsaQgPiB0YWlzZWtpc291XCA7CivlkIjllLHlm6MgPiBnYXNzaG91ZGFuXCA7Civlpb3mlbXmiYsgPiBrb3V0ZWtpc2h1XCA7Civmlofnq6DpoYwgPiBidW5zaG91ZGFpXCA7Civph5HnianlsYsgPiBrYW5hbW9ub3lhXCA7Civlm6Poj4rnpa0gPiBkYW5naWt1c2FpXCA7Civnt6nooZ3mtrIgPiBrYW5zaG91ZWtpXCA7Civlr4Tlrr/oiI4gPiBraXNodWt1c2hhXCA7CivmvZzmnJvpj6EgPiBzZW5ib3VreW91XCA7CivmlrDlt6bnv7wgPiBzaGluc2F5b2t1XCA7CivpgaHlj4rnmoQgPiBzb2t5dXV0ZWtpXCA7CivlkIzmg4Xlv4MgPiBkb3Vqb3VzaGluXCA7CivkuIvnqL3lj6QgPiBzaGl0YWdlaWtvXCA7Civnq7bkuonogIUgPiBreW91c291c2hhXCA7CivllYblupfooZcgPiBzaG91dGVuZ2FpXCA7CivnjonmiYvnrrEgPiB0YW1hdGViYWtvXCA7CivkuIrljYrouqsgPiBqb3VoYW5zaGluXCA7CivmuKzlrprms5UgPiBzb2t1dGVpaG91XCA7CivpmY3lnKfliaQgPiBrb3VhdHN1emFpXCA7CivmgKXlgr7mlpwgPiBreXV1a2Vpc2hhXCA7CivkuKHmo7LpoZ4gPiByeW91c2VpcnVpXCA7CivmnIDkuIrntJogPiBzYWlqb3VreXV1XCA7CivlgYPmnIjliIAgPiBlbmdldHN1dG91XCA7CivnnIvorbfljZIgPiBrYW5nb3NvdHN1XCA7Civnvavnt5rooaggPiBrZWlzZW5oeW91XCA7Civph53lnJ/nq5wgPiBoYXJpbW9ndXJhXCA7Civnga/lj7DlroggPiB0b3VkYWltb3JpXCA7Civku67lhY3nirYgPiBrYXJpbWVuam91XCA7CivlvL7olqzluqsgPiBkYW4nJ3lha3Vrb1wgOwor5ZCI5rOV55qEID4gZ291aG91dGVraVwgOwor5oyr5oqY5oSfID4gemFzZXRzdWthblwgOwor5bmy6JGh6JCEID4gaG9zaGlidWRvdVwgOwor6LWk5paw6IGeID4gYWthc2hpbmJ1blwgOwor6Iag552A6KqeID4ga291Y2hha3Vnb1wgOwor57WC5q2i5b2iID4gc2h1dXNoaWtlaVwgOwor5Ye65riv6Ii5ID4gc2h1a2tvdXNlblwgOwor6Ly45YWl6aGNID4geXVueXV1Z2FrdVwgOwor55Sy5q676aGeID4ga291a2FrdXJ1aVwgOwor6Zqc5aOB55S7ID4gc2hvdWhla2lnYVwgOwor5rq25o6l5qmfID4geW91c2V0c3VraVwgOwor5LmX57WE5ZOhID4gbm9yaWt1bWlpblwgOwor6IWO6IeT55eFID4gamluem91YnlvdVwgOwor5Y+v5pCs5byPID4ga2FoYW5zaGlraVwgOwor5YGl562G5a62ID4ga2VucGl0c3VrYVwgOwor5q2j5Lit57eaID4gc2VpY2h1dXNlblwgOwor5Y2D5bm06ZaTID4gc2VuJyduZW5rYW5cIDsKK+ajkuejgeefsyA+IGJvdWppc2hha3VcIDsKK+ims+iznumtmiA+IGthbnNob3VneW9cIDsKK+elnuWtpuagoSA+IHNoaW5nYWtrb3VcIDsKK+S9nOalreacjSA+IHNhZ3lvdWZ1a3VcIDsKK+eZuuedgOaJgCA+IGhhdGNoYWt1am9cIDsKK+imqui/keaEnyA+IHNoaW5raW5rYW5cIDsKK+S5seazpea1gSA+IHJhbmRlaXJ5dXVcIDsKK+W9k+ebtOWToSA+IHRvdWNob2t1aW5cIDsKK+e1seioiOeahCA+IHRvdWtlaXRla2lcIDsKK+iKuOihk+WutiA+IGdlaWp1dHN1a2FcIDsKK+eOhOmWouWFiCA+IGdlbmthbnNha2lcIDsKK+a3sea1t+mtmiA+IHNoaW5rYWlneW9cIDsKK+WQjOW/l+eahCA+IGRvdXNoaXRla2lcIDsKK+S+oeWNg+mHkSA+IGF0YWlzZW5raW5cIDsKK+S5neWbnuaIpiA+IGt5dXVrYWlzZW5cIDsKK+WNiuawuOS5hSA+IGhhbicnZWlreXV1XCA7Civpm5HlvbnlqaYgPiB6YXRzdWVraWZ1XCA7Civlhrflh43mpa0gPiByZWl0b3VneW91XCA7CivkuKHnlJ/poZ4gPiByeW91c2VpcnVpXCA7CivlhJLmlZnnmoQgPiBqdWt5b3V0ZWtpXCA7Civmj5rpmbjoiaYgPiB5b3VyaWt1a2FuXCA7Civph43orLnmhY4gPiBqdXVraW5zaGluXCA7Civlh43osYbohZAgPiBzaGltaWRvdWZ1XCA7CivmsLjosLflnJIgPiBuYWdhdGFuaWVuXCA7Civkuozmp73lvI8gPiBuaXNvdXNoaWtpXCA7Civnm7jkuZfnqY0gPiBzb3Vqb3VzZWtpXCA7Civoj4zpoZ7lraYgPiBraW5ydWlnYWt1XCA7Civpm5HlvbnlpKsgPiB6YXRzdWVraWZ1XCA7CivmlrDliIrmm7ggPiBzaGlua2Fuc2hvXCA7CivpnZLlsJHlubQgPiBzZWlzaG91bmVuXCA7CivmjqjpgLLogIUgPiBzdWlzaGluc2hhXCA7CivliJfluK3ogIUgPiByZXNzZWtpc2hhXCA7Civlm73nlKPlk4EgPiBrb2t1c2FuaGluXCA7Civmh5Dml6foq4cgPiBrYWlreXV1ZGFuXCA7Civmnq/ojYnnhrEgPiBrb3NvdW5ldHN1XCA7CivkuK3nlLLmnb8gPiBjaHV1a2FucGFuXCA7Civntr/lrp/msrkgPiBtZW5qaXRzdXl1XCA7Civln4vkvI/mra8gPiBtYWlmdWt1c2hpXCA7CivlhoXnt5LkuosgPiBuYWlzaG9nb3RvXCA7CivkuIDnrYnljZIgPiBpdHRvdXNvdHN1XCA7CivnpZ7ku6PmnYkgPiBqaW5kYWlzdWdpXCA7CivlgKTltanmoKogPiBuZWdhc2FrYWJ1XCA7CivmlL/msrvlipsgPiBzZWlqaXJ5b2t1XCA7CivnrZTnlLPmm7ggPiB0b3VzaGluc2hvXCA7CivkubHlv4PogIUgPiByYW5zaGluc2hhXCA7CivkurrplpPmpa0gPiBuaW5nZW53YXphXCA7CivlhbHorIDogIUgPiBreW91Ym91c2hhXCA7CivmnaXos5PluK0gPiByYWloaW5zZWtpXCA7CivoiJ7ouI/mm7IgPiBidXRvdWt5b2t1XCA7Civkv67ooYzogIUgPiBzaHVneW91c2hhXCA7Civls7bmoLnnnIwgPiBzaGltYW5la2VuXCA7CivlvLfnoazoq5YgPiBreW91a291cm9uXCA7Civms5Xmsrvlm70gPiBob3VjaGlrb2t1XCA7CivkuI3lvpfnrZYgPiBmdXRva3VzYWt1XCA7CivlnKjnsbPkuK0gPiB6YWliZWljaHV1XCA7CivljL/lkI3mgKcgPiB0b2t1bWVpc2VpXCA7CivnmbvlsbHpnbQgPiB0b3phbmd1dHN1XCA7CivluqfmlbfniaIgPiB6YXNoaWtpcm91XCA7CivnpZ7moLzljJYgPiBzaGlua2FrdWthXCA7CivotaTlpJbnt5ogPiBzZWtpZ2Fpc2VuXCA7CivolqznlKjphZIgPiB5YWt1eW91c2h1XCA7CivntZDmoLjoj4wgPiBrZWtrYWt1a2luXCA7CivojYnlsaXomasgPiB6b3VyaW11c2hpXCA7CivlpKfooYbmgKcgPiB0YWlzaHV1c2VpXCA7Civlr4Tlrr/nlJ8gPiBraXNodWt1c2VpXCA7CivmmIfmsZ7msLQgPiBzaG91a291c3VpXCA7CivmrabogIXmhYQgPiBtdXNoYWJ1cnVpXCA7Civmlofnq6Doq5YgPiBidW5zaG91cm9uXCA7Civnibnpgbjlk4EgPiB0b2t1c2VuaGluXCA7Civov5HopqrogIUgPiBraW5zaGluc2hhXCA7CivopIfmlbDlvaIgPiBmdWt1c3V1a2VpXCA7Civlub3pgoPlooMgPiB5dXVzdWlreW91XCA7Civlho3mipXnpaggPiBzYWl0b3VoeW91XCA7CivkuI3mtLvli5UgPiBmdWthdHN1ZG91XCA7Civlhajlr67liLYgPiB6ZW5yeW91c2VpXCA7Civov73mgrzkvJogPiB0c3VpdG91a2FpXCA7Civnmb3lhbXmiKYgPiBoYWt1aGVpc2VuXCA7Civoq4vmsYLmqKkgPiBzZWlreXV1a2VuXCA7Civlv6DpnIrloZQgPiBjaHV1cmVpdG91XCA7CivpmpnplpPpoqggPiBzdWtpbWFrYXplXCA7CivlhbHmnInlnLAgPiBreW91eXV1Y2hpXCA7CivniYfngrrmm78gPiBrYXRhZ2F3YXNlXCA7Civnt6nooZ3lvIEgPiBrYW5zaG91YmVuXCA7Civlrr/moLnojYkgPiBzaHVra29uc291XCA7CivlpKfnq4vogIUgPiBvb2RhdGVtb25vXCA7Civms7DlsbHmnKggPiB0YWlzYW5ib2t1XCA7Civmir3nsaTliLggPiBjaHV1c2Vua2VuXCA7Civns7jnirbomasgPiBzaGlqb3VjaHV1XCA7CivntbbnuIHkvZMgPiB6ZXRzdWVudGFpXCA7CivpnZLmnpzniakgPiBzZWlrYWJ1dHN1XCA7Civph4zoqIDokYkgPiBzYXRva290b2JhXCA7Civos7zoqq3ogIUgPiBrb3Vkb2t1c2hhXCA7Civlo7Losrfpq5ggPiBiYWliYWlkYWthXCA7CivmjLrpgLLpmoogPiB0ZWlzaGludGFpXCA7CivohLHmsLTnl4cgPiBkYXNzdWlzaG91XCA7Civli6fpgLLluLMgPiBrYW5qaW5jaG91XCA7Civmi6HlvLXljJYgPiBrYWt1Y2hvdWthXCA7CivmrrrkurrprLwgPiBzYXRzdWppbmtpXCA7CivmtYHli5XmgKcgPiByeXV1ZG91c2VpXCA7Civlm5vph43llLEgPiBzaGlqdXVzaG91XCA7CivmlZnogrLogIUgPiBreW91aWt1c2hhXCA7Civlj43lr77lgbQgPiBoYW50YWlnYXdhXCA7CivnkLTkuIDlvLUgPiBrb3RvaXRjaG91XCA7CivlhoXlnKjnmoQgPiBuYWl6YWl0ZWtpXCA7CivkuInmrrXot7MgPiBzYW5kYW50b2JpXCA7Civpo5vouo3nmoQgPiBoaXlha3V0ZWtpXCA7CivmiYvplbfnjL8gPiB0ZW5hZ2F6YXJ1XCA7CivogIHnnLzpj6EgPiByb3VnYW5reW91XCA7Civku67lh6bliIYgPiBrYXJpc2hvYnVuXCA7CivlhajkurrmoLwgPiB6ZW5qaW5rYWt1XCA7CivliIbms4zniakgPiBidW5waWJ1dHN1XCA7Civoq4vmsYLmm7ggPiBzZWlreXV1c2hvXCA7CivkuI3msbrmlq0gPiBmdWtldHN1ZGFuXCA7CivlhYjlhYjpgLEgPiBzZW5zZW5zaHV1XCA7Civoh7Tlkb3nmoQgPiBjaGltZWl0ZWtpXCA7CivkubPnn7Poi7EgPiBueXV1c2VraWVpXCA7CivosqHmlL/lraYgPiB6YWlzZWlnYWt1XCA7CivnrqHlvKbmpb0gPiBrYW5nZW5nYWt1XCA7Civpo7Lpo5/lupcgPiBpbnNob2t1dGVuXCA7CivntJnoo73lk4EgPiBrYW1pc2VpaGluXCA7Civpu4Tph5HlvosgPiBvdWdvbnJpdHN1XCA7Civms5XlvovmoYggPiBob3VyaXRzdWFuXCA7CivljYrnm7Lnl4cgPiBoYW5tb3VzaG91XCA7CivnoZ3phbjpioAgPiBzaG91c2FuZ2luXCA7CivpmLLnt4/nnIEgPiBib3Vzb3VzaG91XCA7CivpgIbmr5TkvosgPiBneWFrdWhpcmVpXCA7CivmipXmm7jnrrEgPiB0b3VzaG9iYWtvXCA7Civln47kuIvnlLogPiBqb3VrYW1hY2hpXCA7CivnibnliKXlp5QgPiB0b2t1YmV0c3VpXCA7CivmnZHoip3lsYUgPiBtdXJhc2hpYmFpXCA7Civntpnmga/lrZAgPiBtYW1hbXVzdWtvXCA7Civnmbrkv6Hpn7MgPiBoYXNzaGluJydvblwgOwor5Zub5q2755CDID4gc2hpc2hpa3l1dVwgOwor54yu6YeR566xID4ga2Vua2luYmFrb1wgOwor5oim55Wl5a62ID4gc2Vucnlha3VrYVwgOwor5YWs6IG05LyaID4ga291Y2hvdWthaVwgOwor5rCX6ayx55eHID4ga2l1dHN1c2hvdVwgOwor6KSH5pWw5ZueID4gZnVrdXN1dWthaVwgOwor5Lya6KiI5a2mID4ga2Fpa2VpZ2FrdVwgOwor57Ch55Wl5YyWID4ga2Fucnlha3VrYVwgOwor57Wm6Zu757eaID4ga3l1dWRlbnNlblwgOwor5ZCJ56Wl5aSpID4ga2lzc2hvdXRlblwgOwor5b6h5b2x55+zID4gbWlrYWdlaXNoaVwgOwor5YaF5Zu955SjID4gbmFpa29rdXNhblwgOwor6Zuq5pyI6IqxID4gc2V0c3VnZWtrYVwgOwor56eB5pu4566xID4gc2hpc2hvYmFrb1wgOwor55u05pig6aSoID4gY2hva3VlaWthblwgOwor55eF55CG5a2mID4gYnlvdXJpZ2FrdVwgOwor5b6p5Yi754mIID4gZnVra29rdWJhblwgOwor6YCA5buD55qEID4gdGFpaGFpdGVraVwgOwor5Lq66ZaT5a2mID4gbmluZ2VuZ2FrdVwgOwor5LiL552A6aGeID4gc2hpdGFnaXJ1aVwgOwor5ZSQ5aSJ5pyoID4gdG91aGVuYm9rdVwgOwor57ea5pKu5b2xID4gc2Vuc2F0c3VlaVwgOwor5paw55Sf6Z2iID4gc2hpbnNlaW1lblwgOwor5pWw5pel5b6MID4gc3V1aml0c3Vnb1wgOwor6LaF5ZCI6YeRID4gY2hvdWdvdWtpblwgOwor5aSa5Zu957GNID4gdGFrb2t1c2VraVwgOwor56mN566X5rOVID4gc2VraXNhbmhvdVwgOwor5aSW54K65rOVID4gZ2FpdGFtZWhvdVwgOwor5Ye65ZOB6ICFID4gc2h1cHBpbnNoYVwgOwor6Kaa6YaS5YmkID4ga2FrdXNlaXphaVwgOwor6auY5bGx6J22ID4ga291emFuY2hvdVwgOwor6L+R57iB5bGeID4ga2luJydlbnpva3VcIDsKK+S4iumBlOmDqCA+IGthbmRhY2hpbWVcIDsKK+WPr+mNm+mJhCA+IGthdGFudGV0c3VcIDsKK+W/g+eQhueahCA+IHNoaW5yaXRla2lcIDsKK+S5l+aPm+WIuCA+IG5vcmlrYWVrZW5cIDsKK+aVmeiCsueVjCA+IGt5b3Vpa3VrYWlcIDsKK+mZsOaltee3miA+IGlua3lva3VzZW5cIDsKK+WNiuiJh+i6qyA+IGhhbnRlaXNoaW5cIDsKK+imquWFhOW8nyA+IG95YWt5b3VkYWlcIDsKK+aXhemkqOalrSA+IHJ5b2thbmd5b3VcIDsKK+Wtpuacn+acqyA+IGdha2tpbWF0c3VcIDsKK+WIsOadpeeJqSA+IHRvdXJhaW1vbm9cIDsKK+ayluS7suS7lSA+IG9raW5ha2FzaGlcIDsKK+WkluWbveijvSA+IGdhaWtva3VzZWlcIDsKK+e1guebpOaIpiA+IHNodXViYW5zZW5cIDsKK+mAhuWFiee3miA+IGd5YWtrb3VzZW5cIDsKK+ixoeW+tOa0viA+IHNob3VjaG91aGFcIDsKK+WLp+mAsuWFgyA+IGthbmppbm1vdG9cIDsKK+mtmumhnuWtpiA+IGd5b3J1aWdha3VcIDsKK+e4nueRqueRmSA+IHNoaW1hbWVub3VcIDsKK+ecn+epuueuoSA+IHNoaW5rdXVrYW5cIDsKK+iIjuWIqeWIpSA+IHNoYXJpYmV0c3VcIDsKK+S6rOmYquelniA+IGtlaWhhbnNoaW5cIDsKK+aFo+e/kuazlSA+IGthbnNodXVob3VcIDsKK+mgremZgOiiiyA+IHp1ZGFidWt1cm9cIDsKK+mZsOalteeuoSA+IGlua3lva3VrYW5cIDsKK+a3t+WSjOeJqSA+IGtvbndhYnV0c3VcIDsKK+WIgOmNm+WGtiA+IGthdGFuYWthamlcIDsKK+a9nOS8j+aApyA+IHNlbnB1a3VzZWlcIDsKK+aLm+W+heWIuCA+IHNob3V0YWlrZW5cIDsKK+WPl+mbo+evgCA+IGp1bmFuc2V0c3VcIDsKK+a4rOWumuWApCA+IHNva3V0ZWljaGlcIDsKK+WMlueyp+e0mSA+IGtlc2hvdWdhbWlcIDsKK+Wkp+aGsueroCA+IGRhaWtlbnNob3VcIDsKK+WNmOiJsuWFiSA+IHRhbnNob2trb3VcIDsKK+eUsuauu+e2sSA+IGtvdWtha3Vrb3VcIDsKK+mbhuWQiOS9kyA+IHNodXVnb3V0YWlcIDsKK+eri+W+gOeUnyA+IHRhY2hpb3Vqb3VcIDsKK+WtkOWurumguCA+IHNoaWt5dXVrZWlcIDsKK+e1jOmok+eahCA+IGtlaWtlbnRla2lcIDsKK+WMlueyp+eusSA+IGtlc2hvdWJha29cIDsKK+S6jOeVquaYnyA+IG5pYmFuYm9zaGlcIDsKK+azleW+i+WutiA+IGhvdXJpdHN1a2FcIDsKK+a0l+a/r+advyA+IHNlbnRha3VpdGFcIDsKK+a7keayouWJpCA+IGthdHRha3V6YWlcIDsKK+WvvuensOaApyA+IHRhaXNob3VzZWlcIDsKK+WwkeW5tOazlSA+IHNob3VuZW5ob3VcIDsKK+W+s+W3neWutiA+IHRva3VnYXdha2VcIDsKK+a1geWLleS9kyA+IHJ5dXVkb3V0YWlcIDsKK+e1guWIiuWPtyA+IHNodXVrYW5nb3VcIDsKK+ebo+S/ruiAhSA+IGthbnNodXVzaGFcIDsKK+WFsee3qOiAhSA+IGt5b3VoZW5zaGFcIDsKK+e1seioiOWtpiA+IHRvdWtlaWdha3VcIDsKK+i8qumDree3miA+IHJpbmtha3VzZW5cIDsKK+i7jeiJpumzpSA+IGd1bmthbmRvcmlcIDsKK+WVhuiIuemaiiA+IHNob3VzZW50YWlcIDsKK+i2hea6gOWToSA+IGNob3VtYW4nJ2luXCA7CivniYfmiYvpjYsgPiBrYXRhdGVuYWJlXCA7CivogqHplqLnr4AgPiBrb2thbnNldHN1XCA7Civoqr/lkbPmlpkgPiBjaG91bWlyeW91XCA7Civlj4jlsI/kvZwgPiBtYXRha29zYWt1XCA7CivkuI3mraPnm7QgPiBmdXNob3VqaWtpXCA7CivmtKrnqY3lsaQgPiBrb3VzZWtpc291XCA7CivmpJzlnKflmaggPiBrZW4nJ2F0c3VraVwgOwor5p+T54mp5bGLID4gc29tZW1vbm95YVwgOwor6YWN6Iaz5Lq6ID4gaGFpemVuJyduaW5cIDsKK+Wig+eVjOe3miA+IGt5b3VrYWlzZW5cIDsKK+mdmeeJqeeUuyA+IHNlaWJ1dHN1Z2FcIDsKK+aVmeiCsuazlSA+IGt5b3Vpa3Vob3VcIDsKK+WPjumbhumtlCA+IHNodXVzaHV1bWFcIDsKK+mbouiBt+iAhSA+IHJpc2hva3VzaGFcIDsKK+WgseWlqOmHkSA+IGhvdXNob3VraW5cIDsKK+iCoemWk+evgCA+IGtva2Fuc2V0c3VcIDsKK+eJp+W4q+mkqCA+IGJva3VzaGlrYW5cIDsKK+WNoOmgmOi7jSA+IHNlbnJ5b3VndW5cIDsKK+S4reeUn+S7oyA+IGNodXVzZWlkYWlcIDsKK+S4i+WNiuacnyA+IHNoaW1vaGFua2lcIDsKK+aVmeS8muazlSA+IGt5b3VrYWlob3VcIDsKK+WOn+awtOeIhiA+IGdlbnN1aWJha3VcIDsKK+WIuue5jeezuCA+IHNoaXNodXVpdG9cIDsKK+aQreS5l+apiyA+IHRvdWpvdWt5b3VcIDsKK+efs+m5uOeusSA+IHNla2tlbmJha29cIDsKK+Wbnui7oui7uCA+IGthaXRlbmppa3VcIDsKK+WIu+S4gOWIuyA+IGtva3Vpa2tva3VcIDsKK+WJtemAoOeahCA+IHNvdXpvdXRla2lcIDsKK+eXtOWRhueXhyA+IGNoaWhvdXNob3VcIDsKK+aOkuawtOmHjyA+IGhhaXN1aXJ5b3VcIDsKK+WQhOaDheWgsSA+IGtha3Vqb3Vob3VcIDsKK+aguOaWh+azlSA+IGtha3VidW5wb3VcIDsKK+Wkp+OAheeahCA+IGRhaWRhaXRla2lcIDsKK+WjsuS4iumrmCA+IHVyaWFnZWRha2FcIDsKK+a3seaIkOWyqSA+IHNoaW5zZWlnYW5cIDsKK+iDuOS4ieWvuCA+IG11bmVzYW56dW5cIDsKK+W+l+aEj+WuoiA+IHRva3Vpa3lha3VcIDsKK+W+tOWFteWItiA+IGNob3VoZWlzZWlcIDsKK+aAp+acrOiDvSA+IHNlaWhvbicnbm91XCA7CivkvJHoqLrml6UgPiBreXV1c2hpbmJpXCA7Civln7fph5Hpi7wgPiBzaGlra29uZ291XCA7Civnq5znmq7lt7sgPiByeXV1aGltYWtpXCA7Civlm57luLDnhrEgPiBrYWlraW5ldHN1XCA7CivnpZ3os4DkvJogPiBzaHVrdWdha2FpXCA7CivnlJ/mtLvosrsgPiBzZWlrYXRzdWhpXCA7Civms5Xli5nlsYAgPiBob3VtdWt5b2t1XCA7CivkuK3lrabmoKEgPiBjaHV1Z2Fra291XCA7CivmnIjopovojYkgPiB0c3VraW1pc291XCA7CivpgJrkv5fljJYgPiB0c3V1em9rdWthXCA7Civnm7TkuqTmgKcgPiBjaG9ra291c2VpXCA7CivnqLLnhrHnl4UgPiBpbW9jaGlieW91XCA7Civpq5jouI/nmoQgPiBrb3V0b3V0ZWtpXCA7Civntabmlpnml6UgPiBreXV1cnlvdWJpXCA7CivkuIflubTpnZIgPiBtYW4nJ25lbnNlaVwgOwor5bCP5YmN5o+QID4gc2hvdXplbnRlaVwgOwor5YWt5LiJ5Yi2ID4gcm9rdXNhbnNlaVwgOwor6YCg5p6X5a2mID4gem91cmluZ2FrdVwgOwor5YWo6LKs5Lu7ID4gemVuc2VraW5pblwgOwor54Wn5piO5by+ID4gc2hvdW1laWRhblwgOwor5oSb5Zu95b+DID4gYWlrb2t1c2hpblwgOwor55+z6bm455q/ID4gc2Vra2VuemFyYVwgOwor5LqI5a6a6KqsID4geW90ZWlzZXRzdVwgOwor6ISz56Gs5aGeID4gbm91a291c29rdVwgOwor57eP5aSn5bCGID4gc291ZGFpc2hvdVwgOwor5aeL5pyr5bGLID4gc2hpbWF0c3V5YVwgOwor5Zu95pyJ5p6XID4ga29rdXl1dXJpblwgOwor6Jas5a2m6YOoID4geWFrdWdha3VidVwgOwor5om55Yik5YqbID4gaGloYW5yeW9rdVwgOwor562J6Lqr5aSnID4gdG91c2hpbmRhaVwgOwor57eP5pS75pKDID4gc291a291Z2VraVwgOwor6auY5bGx55eFID4ga291emFuYnlvdVwgOwor5LqU5pyI56WtID4gZ29nYXRzdXNhaVwgOwor6LuN5qW96ZqKID4gZ3VuZ2FrdXRhaVwgOwor5LiJ6YeN5ZSxID4gc2FuanV1c2hvdVwgOwor5Y2X5Lqs6LGGID4gbmFua2lubWFtZVwgOwor5puy6aas5birID4ga3lva3ViYXNoaVwgOwor5Ymv5Y+45LukID4gZnVrdXNoaXJlaVwgOwor5pi85pel5LitID4gaGlydWhpbmFrYVwgOwor5bi46K2Y5a62ID4gam91c2hpa2lrYVwgOwor6KiA6JGJ5bC7ID4ga290b2JhamlyaVwgOwor6IK65rW45r2kID4gaGFpc2hpbmp1blwgOwor6ICV5L2c6ICFID4ga291c2FrdXNoYVwgOwor5ZCM5b+D5YaGID4gZG91c2hpbicnZW5cIDsKK+iHtOatu+mHjyA+IGNoaXNoaXJ5b3VcIDsKK+W8geiovOirliA+IGJlbnNob3Vyb25cIDsKK+aWsOeZu+WgtCA+IHNoaW50b3Vqb3VcIDsKK+W8t+WKm+eyiSA+IGt5b3VyaWtpa29cIDsKK+S6iOWCmeWupCA+IHlvYmlzaGl0c3VcIDsKK+W6l+mgreagqiA+IHRlbnRvdWthYnVcIDsKK+eZuuWwhOiWrCA+IGhhc3NoYXlha3VcIDsKK+WMlueyp+awtCA+IGtlc2hvdW1penVcIDsKK+WNgemAsuazlSA+IGppc3NoaW5ob3VcIDsKK+aWh+ethuWutiA+IGJ1bnBpdHN1a2FcIDsKK+W+k+mHj+eojiA+IGp1dXJ5b3V6ZWlcIDsKK+eTpuWxi+aguSA+IGthd2FyYXlhbmVcIDsKK+mWouS/guiqvyA+IGthbmtlaWNob3VcIDsKK+WUr+W/g+irliA+IHl1aXNoaW5yb25cIDsKK+WKseaMr+euoSA+IHJlaXNoaW5rYW5cIDsKK+WFqOaXpeepuiA+IHplbicnbmlra3V1XCA7CivkuozmnprohbAgPiBuaW1haWdvc2hpXCA7CivmtYHliJHlnLAgPiByeXV1a2VpY2hpXCA7CivmtKrnqY3kuJYgPiBrb3VzZWtpc2VpXCA7CivpnIfngb3lnLAgPiBzaGluc2FpY2hpXCA7CivnnLzou5/oho8gPiBnYW4nJ25hbmtvdVwgOwor5rC05pm25L2TID4gc3Vpc2hvdXRhaVwgOwor54K55ruF5ZmoID4gdGVubWV0c3VraVwgOwor5YWE5byf5YiGID4ga3lvdWRhaWJ1blwgOwor6YeR6ZaA5qmLID4ga2lubW9ua3lvdVwgOwor5pmv5Yud5ZywID4ga2Vpc2hvdWNoaVwgOwor5YaF5o6l5YaGID4gbmFpc2V0c3VlblwgOwor55Sf5rS76IumID4gc2Vpa2F0c3VrdVwgOwor5p2x54Wn5a6uID4gdG91c2hvdWd1dVwgOwor5Y+X6Zuj5puyID4ganVuYW5reW9rdVwgOwor5a++5rWB5ZyPID4gdGFpcnl1dWtlblwgOwor5Y2x6Zm654mpID4ga2lrZW5idXRzdVwgOwor56CU5L+u55SfID4ga2Vuc2h1dXNlaVwgOwor6L+R6Kaq5amaID4ga2luc2hpbmtvblwgOwor5Lqk6Kqt5paHID4ga291ZG9rdWJ1blwgOwor6ISz5Y2S5LitID4gbm91c290Y2h1dVwgOwor54S85q275L2TID4gc2hvdXNoaXRhaVwgOwor5LiA56We5pWZID4gaXNzaGlua3lvdVwgOwor5rS+5Ye65omAID4gaGFzaHV0c3Vqb1wgOwor5oyv5YuV6KiIID4gc2hpbmRvdWtlaVwgOwor5bGI5oqY6KqeID4ga3Vzc2V0c3Vnb1wgOwor5puy6aas5ZujID4ga3lva3ViYWRhblwgOwor5rOo5bCE5rayID4gY2h1dXNoYWVraVwgOwor56aP56aE5a+/ID4gZnVrdXJva3VqdVwgOwor57SZ5ZC56ZuqID4ga2FtaWZ1YnVraVwgOwor5Luy5LuL6ICFID4gY2h1dWthaXNoYVwgOwor6ZuG6YWN5Lq6ID4gc2h1dWhhaW5pblwgOwor5a6a56SO5byPID4gdGVpc29zaGlraVwgOwor6KOB5Yik6ZW3ID4gc2FpYmFuY2hvdVwgOwor6Zu76Kmx5bGAID4gZGVud2FreW9rdVwgOwor5L+456W/57GzID4gaG91cm9rdW1haVwgOwor6Iqx5ZC56ZuqID4gaGFuYWZ1YnVraVwgOwor5YW157On57GzID4gaHlvdXJvdW1haVwgOwor6KeS57Sw5belID4gdHN1bm96YWlrdVwgOwor6Ly46YCB5YqbID4geXVzb3VyeW9rdVwgOwor5p6X6YeO5bqBID4gcmluJyd5YWNob3VcIDsKK+aUr+mFjeeahCA+IHNoaWhhaXRla2lcIDsKK+Wkqum8k+apiyA+IHRhaWtvYmFzaGlcIDsKK+eulOWKm+eyiSA+IGhha3VyaWtpa29cIDsKK+eNheWtkOm8uyA+IHNoaXNoaWJhbmFcIDsKK+mAo+maiumVtyA+IHJlbnRhaWNob3VcIDsKK+err+acq+apnyA+IHRhbm1hdHN1a2lcIDsKK+WQueWlj+alvSA+IHN1aXNvdWdha3VcIDsKK+eGseWwhOeXhSA+IG5lc3NoYWJ5b3VcIDsKK+W+s+eUqOeTtiA+IHRva3V5b3ViaW5cIDsKK+Wkqea0peelniA+IGFtYXRzdWthbWlcIDsKK+mZjeawtOmHjyA+IGtvdXN1aXJ5b3VcIDsKK+WHuumHkeiAhSA+IHNodWtraW5zaGFcIDsKK+WFuOWei+eahCA+IHRlbmtlaXRla2lcIDsKK+S4reaeouaApyA+IGNodXVzdXVzZWlcIDsKK+i/t+W9qeacjSA+IG1laXNhaWZ1a3VcIDsKK+S9j+WuhemboyA+IGp1dXRha3VuYW5cIDsKK+WMlueyp+aWmSA+IGtlc2hvdXJ5b3VcIDsKK+W/g+eQhuWtpiA+IHNoaW5yaWdha3VcIDsKK+iKs+WQjemMsiA+IGhvdW1laXJva3VcIDsKK+WLleWKm+eCiSA+IGRvdXJ5b2t1cm9cIDsKK+Wwj+WFkOeXhSA+IHNob3VuaWJ5b3VcIDsKK+WwkeW5tOWboyA+IHNob3VuZW5kYW5cIDsKK+WFqOmdoueahCA+IHplbm1lbnRla2lcIDsKK+Wwj+W4guawkSA+IHNob3VzaGltaW5cIDsKK+WJr+asoeeahCA+IGZ1a3VqaXRla2lcIDsKK+akjumWk+advyA+IHRzdWlrYW5iYW5cIDsKK+iqsueojueOhyA+IGthemVpcml0c3VcIDsKK+mDteaUv+ecgSA+IHl1dXNlaXNob3VcIDsKK+Wkj+WgtOaJgCA+IG5hdHN1YmFzaG9cIDsKK+WOmuWMlueypyA+IGF0c3VnZXNob3VcIDsKK+S6jOS6uue1hCA+IGZ1dGFyaWd1bWlcIDsKK+iHtOWRveWCtyA+IGNoaW1laXNob3VcIDsKK+WJr+mDveW/gyA+IGZ1a3V0b3NoaW5cIDsKK+eZuuahiOiAhSA+IGhhdHN1YW5zaGFcIDsKK+W8t+WKm+eKryA+IGdvdXJpa2loYW5cIDsKK+a0l+a/r+S7oyA+IHNlbnRha3VkYWlcIDsKK+mBiuazs+ihkyA+IHl1dWVpanV0c3VcIDsKK+ijvemZtualrSA+IHNlaXRvdWd5b3VcIDsKK+eQg+W6p+aomSA+IGt5dXV6YWh5b3VcIDsKK+WNoOacieaoqSA+IHNlbicneXV1a2VuXCA7CivmsojkuIHoirEgPiBjaGluY2hvdWdlXCA7CivokaHokITniZkgPiBwb3J1dG9nYXJ1XCA7CivmlZnkvJrloIIgPiBreW91a2FpZG91XCA7CivmlK/lupfplbcgPiBzaGl0ZW5jaG91XCA7CivlvqHlubTnjokgPiBvdG9zaGlkYW1hXCA7Civopb/mtIvokbEgPiBzZWl5b3VuZWdpXCA7Civnk5zlrp/poZQgPiB1cml6YW5lZ2FvXCA7CivnnJ/nqbrluK8gPiBzaGlua3V1dGFpXCA7Civov73pgIHmpJwgPiB0c3Vpc291a2VuXCA7CivmnKrmsbrnm6MgPiBtaWtldHN1a2FuXCA7Civmma7pgJrmoKogPiBmdXRzdXVrYWJ1XCA7CivllYblupfkuLsgPiBzaG91dGVuc2h1XCA7CivmjqHnn7PloLQgPiBzYWlzZWtpam91XCA7CivniaLlkI3kuLsgPiByb3VuYW51c2hpXCA7CivntK/pgLLnqI4gPiBydWlzaGluemVpXCA7CivlpKfnq7bkuokgPiBkYWlreW91c291XCA7Civmo67mnpfms5UgPiBzaGlucmluaG91XCA7CivlkIzpg7fkurogPiBkb3VreW91amluXCA7CivmtL7lh7rlqaYgPiBoYXNodXRzdWZ1XCA7CivlhoXlm73lgrUgPiBuYWlrb2t1c2FpXCA7CivmlK/luqbph5EgPiBzaGl0YWt1a2luXCA7Civlho3mtbjnpLwgPiBzYWlzaGlucmVpXCA7Civlm73mnInlnLAgPiBrb2t1eXV1Y2hpXCA7CivopqrlsZXmm7ggPiBzaGludGVuc2hvXCA7Civlu4nmgaXlv4MgPiByZW5jaGlzaGluXCA7Civnmobml6Lpo58gPiBrYWlraXNob2t1XCA7Civou6LlsYXlhYggPiB0ZW5reW9zYWtpXCA7CivpgKPntaHpp4UgPiByZW5yYWt1ZWtpXCA7Civpm7voqbHlj6MgPiBkZW53YWd1Y2hpXCA7Civnsr7li6Tos54gPiBzZWlraW5zaG91XCA7CivlgaXlv5jnl4cgPiBrZW5ib3VzaG91XCA7CivmlZnkvJrlj7IgPiBreW91a2Fpc2hpXCA7CivlsJHlubTkvJogPiBzaG91bmVua2FpXCA7CivotIvmiYvntJkgPiBuaXNldGVnYW1pXCA7Civlh7rlvoHou40gPiBzaHVzc2VpZ3VuXCA7CivoqIjnlLvogIUgPiBrZWlrYWt1c2hhXCA7CivmlaPmlofnmoQgPiBzYW5idW50ZWtpXCA7CivmjLrouqvpmoogPiB0ZWlzaGludGFpXCA7Civlj4vlpb3nmoQgPiB5dXVrb3V0ZWtpXCA7Civlj6zllprnirYgPiBzaG91a2Fuam91XCA7Civoqo3oqLzogIUgPiBuaW5zaG91c2hhXCA7CivlubTnlKPpoY0gPiBuZW5zYW5nYWt1XCA7Civmj5vnrpfooaggPiBrYW56YW5oeW91XCA7CivmspbnuITnnIwgPiBva2luYXdha2VuXCA7CivmlZHkuJbou40gPiBreXV1c2VpZ3VuXCA7CivmuoDotrPmhJ8gPiBtYW56b2t1a2FuXCA7CivlpYnlhazlhYggPiBob3Vrb3VzYWtpXCA7Civpm7vloLHmlpkgPiBkZW5wb3VyeW91XCA7CivojZLkuovluKsgPiBhcmFnb3Rvc2hpXCA7CivmoYPmupDpg7cgPiB0b3VnZW5reW91XCA7Civok67mnIjlsLwgPiByZW5nZXRzdW5pXCA7Civnvr3mlpHomoogPiBoYW1hZGFyYWthXCA7Civnp4Hmm7jlh70gPiBzaGlzaG9iYWtvXCA7CivmnLTlv7Xku4EgPiBib2t1bmVuamluXCA7CivlrZDlrq7nmYwgPiBzaGlreXV1Z2FuXCA7Civno4HlipvoqIggPiBqaXJ5b2t1a2VpXCA7CivmoLnnspLoj4wgPiBrb25yeXV1a2luXCA7CivnuKbml4vnm6QgPiB0YXRlc2VuYmFuXCA7CivluILlvbnmiYAgPiBzaGl5YWt1c2hvXCA7CivmpJzmtYHoqIggPiBrZW5yeXV1a2VpXCA7CivljbPlo7LkvJogPiBzb2t1YmFpa2FpXCA7Civlu7bkurrlk6EgPiBub2JlamluJydpblwgOwor6Kq/5ZCI5YmkID4gY2hvdWdvdXphaVwgOwor6KaB56K66KqNID4geW91a2FrdW5pblwgOwor5bi457eR5qi5ID4gam91cnlva3VqdVwgOwor6YG455CD55y8ID4gc2Vua3l1dWdhblwgOwor55+z5ZCI5oimID4gaXNoaWdhc3NlblwgOwor5bCB5bu655qEID4gaG91a2VudGVraVwgOwor6aeQ5Zyo5omAID4gY2h1dXphaXNob1wgOwor5LiW5biv5Li7ID4gc2V0YWludXNoaVwgOwor5bmz5bi45b+DID4gaGVpam91c2hpblwgOwor6LGG5Y+w6aKoID4gbWFtZXRhaWZ1dVwgOwor6Ymx5bGx5qWtID4ga291emFuZ3lvdVwgOwor5qeL5paH5pyoID4ga291YnVubW9rdVwgOwor5Y+C6KyA6ZW3ID4gc2FuYm91Y2hvdVwgOwor5YaZ55yf6aSoID4gc2hhc2hpbmthblwgOwor5oim5pmC6ImyID4gc2VuamlzaG9rdVwgOwor5L2P5a6F6KGXID4ganV1dGFrdWdhaVwgOwor6aCT54+N5ryiID4gdG9uY2hpbmthblwgOwor5byx6YW45oCnID4gamFrdXNhbnNlaVwgOwor5Lit5LuV5YiHID4gbmFrYWppa2lyaVwgOwor5Yid6Iie5Y+wID4gaGF0c3VidXRhaVwgOwor5YaZ55yf6aGUID4gc2hhc2hpbmdhb1wgOwor5Y2X5Lqs546JID4gbmFua2luZGFtYVwgOwor6Ii557GN5rivID4gc2Vuc2VraWtvdVwgOwor54eQ54Gw55+zID4gcmlua2Fpc2VraVwgOwor5LiA5bm06ZaTID4gaWNoaW5lbmthblwgOwor6Z2e5o6l6KemID4gaGlzZXNzaG9rdVwgOwor5oyB57aa55qEID4gaml6b2t1dGVraVwgOwor5Za25qWt5LitID4gZWlneW91Y2h1dVwgOwor6LaF6YGO6aGNID4gY2hvdWthZ2FrdVwgOwor6aCQ6LK4546HID4geW90YWlyaXRzdVwgOwor5Luj55So6IKJID4gZGFpeW91bmlrdVwgOwor5pmC57O75YiXID4gamlrZWlyZXRzdVwgOwor5a2Q5L6b5pyNID4ga29kb21vZnVrdVwgOwor6K2m6KaW5bqBID4ga2Vpc2hpY2hvdVwgOwor5YWN55ar5oCnID4gbWVuJydla2lzZWlcIDsKK+ezu+e1seeahCA+IGtlaXRvdXRla2lcIDsKK+i7jeeUqOmHkSA+IGd1bicneW91a2luXCA7CivojZLku5XkuosgPiBhcmFzaGlnb3RvXCA7CivnmbvlsbHlrqIgPiB0b3phbmt5YWt1XCA7CivkvY7os4Pph5EgPiB0ZWljaGluZ2luXCA7CivkvrXlrrPogIUgPiBzaGluZ2Fpc2hhXCA7Civlo7LkuIrnpaggPiB1cmlhZ2VweW91XCA7CivmlL7pgIHliocgPiBob3Vzb3VnZWtpXCA7Civml6XnqIvooaggPiBuaXR0ZWloeW91XCA7Civlia/okazlk4EgPiBmdWt1c291aGluXCA7CivmjL/lhaXmlocgPiBzb3VueXV1YnVuXCA7CivliJ3lrabogIUgPiBzaG9nYWt1c2hhXCA7CivmlZnnv5LmiYAgPiBreW91c2h1dWpvXCA7CivlhaXloLTploAgPiBueXV1am91bW9uXCA7CivlrpjluoHooZcgPiBrYW5jaG91Z2FpXCA7Civopo/liYfnmoQgPiBraXNva3V0ZWtpXCA7CivlsI/lhorlrZAgPiBzaG91c2Fzc2hpXCA7CivovLvlsITnt5ogPiBmdWt1c2hhc2VuXCA7CivljYHpgLLliLYgPiBqaXNzaGluc2VpXCA7CivopIfoo73lk4EgPiBmdWt1c2VpaGluXCA7Civon7nlt6XoiLkgPiBrYW5pa291c2VuXCA7Civmo67mnpfluK8gPiBzaGlucmludGFpXCA7CivntZDmmbbns7sgPiBrZXNzaG91a2VpXCA7CivnhKHnp6nluo8gPiBtdWNoaXRzdWpvXCA7CivkuLvoprPnmoQgPiBzaHVrYW50ZWtpXCA7CivnoLTlo4rlipsgPiBoYWthaXJ5b2t1XCA7CivkuInmr5vkvZwgPiBzYW5tb3VzYWt1XCA7Civmoafnmq7okbogPiBoaXdhZGFidWtpXCA7CivlipvnuZTmqZ8gPiByaWtpc2hva2tpXCA7Civlha3pnaLkvZMgPiByb2t1bWVudGFpXCA7Civnmb3kurrnqK4gPiBoYWt1amluc2h1XCA7CivmsY7npZ7oq5YgPiBoYW5zaGlucm9uXCA7Civku67lrprmrL4gPiBrYXJpdGVpa2FuXCA7CivntI3nqI7poY0gPiBub3V6ZWlnYWt1XCA7Civoq7jlpJblm70gPiBzaG9nYWlrb2t1XCA7CivlpJbmjqXlhoYgPiBnYWlzZXRzdWVuXCA7Civoo73ntJnmpa0gPiBzZWlzaGlneW91XCA7CivpiZvnm7Tnt5ogPiBlbmNob2t1c2VuXCA7Civlv4Ppm7voqIggPiBzaGluZGVua2VpXCA7Civnpo/liKnooaggPiBmdWt1cmloeW91XCA7Civlvq7nlJ/niakgPiBiaXNlaWJ1dHN1XCA7Civlrp3nn7PlupcgPiBob3VzZWtpdGVuXCA7CivlibXmpa3ogIUgPiBzb3VneW91c2hhXCA7Civpnanoo73lk4EgPiBrYXdhc2VpaGluXCA7CivlubPlubTkvZwgPiBoZWluZW5zYWt1XCA7CivnlJ/mhYvlraYgPiBzZWl0YWlnYWt1XCA7CivnjL/oip3lsYUgPiBzYXJ1c2hpYmFpXCA7CivloLTlpJbmoKogPiBqb3VnYWlrYWJ1XCA7CivlvIHoqLzms5UgPiBiZW5zaG91aG91XCA7CivljZTlrprmm7ggPiBreW91dGVpc2hvXCA7CivkupTml6znr4AgPiBnb2p1bnNldHN1XCA7CivliJ3ku7vntaYgPiBzaG9uaW5reXV1XCA7Civpmbjmm7nnrYkgPiByaWt1c291dG91XCA7Civlpb3miJDnuL4gPiBrb3VzZWlzZWtpXCA7CivpgJrmnInmgKcgPiB0c3V1eXV1c2VpXCA7CivogbTlsI7niqwgPiBjaG91ZG91a2VuXCA7Civno4Hlipvnt5ogPiBqaXJ5b2t1c2VuXCA7Civpm6LlqZrnjocgPiByaWtvbnJpdHN1XCA7CivnoZ3phbjloakgPiBzaG91c2FuJydlblwgOwor5YaN56K66KqNID4gc2Fpa2FrdW5pblwgOwor55m65qGI5qipID4gaGF0c3VhbmtlblwgOwor55qG5pei6J2VID4ga2Fpa2lzaG9rdVwgOwor6YWq6KO95ZOBID4gcmFrdXNlaWhpblwgOwor5Zyf5oCn6aqoID4gZG9zaG91Ym9uZVwgOwor6YG/5aaK6JasID4gaGluaW4nJ3lha3VcIDsKK+eZuueUn+WtpiA+IGhhc3NlaWdha3VcIDsKK+S6uueorueahCA+IGppbnNodXRla2lcIDsKK+ejgeefs+ebpCA+IGppc2hha3ViYW5cIDsKK+Wkp+iUtee1jCA+IGRhaXpvdWt5b3VcIDsKK+ays+WOn+m2uCA+IGthd2FyYWhpd2FcIDsKK+eVmee9ruWgtCA+IHJ5dXVjaGlqb3VcIDsKK+mAmumiqOWtlCA+IHRzdXVmdXVrb3VcIDsKK+imgeaxguiAhSA+IHlvdWt5dXVzaGFcIDsKK+ijveezuOalrSA+IHNlaXNoaWd5b3VcIDsKK+efpeaBteiiiyA+IGNoaWVidWt1cm9cIDsKK+e0memJhOegsiA+IGthbWlkZXBwb3VcIDsKK+WInemjm+ihjCA+IGhhdHN1aGlrb3VcIDsKK+eZu+WxseWPoyA+IHRvemFuZ3VjaGlcIDsKK+iyr+awtOmHjyA+IGNob3N1aXJ5b3VcIDsKK+ekvuS8mumNiyA+IHNoYWthaW5hYmVcIDsKK+auiuWLsuizniA+IHNodWt1bnNob3VcIDsKK+mBi+WLlemdtCA+IHVuZG91Z3V0c3VcIDsKK+S6pOmam+WbvSA+IGtvdXNhaWtva3VcIDsKK+WFq+aWh+WtlyA+IGhhY2hpbW9uamlcIDsKK+mWi+eZuumDqCA+IGthaWhhdHN1YnVcIDsKK+iqv+WNsOWbvSA+IGNob3Vpbmtva3VcIDsKK+ebuOe2mueojiA+IHNvdXpva3V6ZWlcIDsKK+idi+S6uuW9oiA+IHJvdW5pbmd5b3VcIDsKK+S6uuWQjemMsiA+IGppbm1laXJva3VcIDsKK+iQveesrOeUnyA+IHJha3VkYWlzZWlcIDsKK+WHneeBsOWyqSA+IGd5b3VrYWlnYW5cIDsKK+WIqeS7mOWCtSA+IHJpdHN1a2lzYWlcIDsKK+S9k+iFlOWjgSA+IHRhaWtvdWhla2lcIDsKK+aMh+aOjOe0iyA+IHNoaXNob3Vtb25cIDsKK+Wlh+i3oeeahCA+IGtpc2VraXRla2lcIDsKK+ibi+eZvea6kCA+IHRhbnBha3VnZW5cIDsKK+aWreacq+mtlCA+IGRhbm1hdHN1bWFcIDsKK+ips+S8neekviA+IHNob3VkZW5zaGFcIDsKK+iRrOWEgOW8jyA+IHNvdWdpc2hpa2lcIDsKK+aQjeWus+mhjSA+IHNvbmdhaWdha3VcIDsKK+mJhOmLvOalrSA+IHRla2tvdWd5b3VcIDsKK+S4gOW8pueQtCA+IGljaGlnZW5raW5cIDsKK+aal+e0q+iJsiA+IGFuc2hpc2hva3VcIDsKK+WFiOS7u+mghiA+IHNlbicnbmluanVuXCA7Civlpb3miKbnmoQgPiBrb3VzZW50ZWtpXCA7CivpmLLplbflrpggPiBib3VjaG91a2FuXCA7CivmsLTlnKfoqIggPiBzdWlhdHN1a2VpXCA7CivlpJblm73li6IgPiBnYWlrb2t1emVpXCA7Civpn5Plm73kurogPiBrYW5rb2t1amluXCA7CivmlaLpl5jos54gPiBrYW50b3VzaG91XCA7Civmr5LopovlvbkgPiBkb2t1bWl5YWt1XCA7CivmqZ/lhoXpo58gPiBraW5haXNob2t1XCA7Civoo4/nlarntYQgPiB1cmFiYW5ndW1pXCA7Civlm73pmLLoq5YgPiBrb2t1Ym91cm9uXCA7CivlrpjmsYLlk4EgPiBrYW5reXV1aGluXCA7Civlm73pmpvnt5ogPiBrb2t1c2Fpc2VuXCA7Civosrjph5HluqsgPiBrYXNoaWtpbmtvXCA7CivpgJ/oqJjooZMgPiBzb2traWp1dHN1XCA7Civlm73oqIDokYkgPiBrdW5pa290b2JhXCA7CivljJDooYznlrkgPiBmdWtrb3VzaGluXCA7CivnlLrlt6XloLQgPiBtYWNoaWtvdWJhXCA7Civoh7PmgKXkvr8gPiBzaGlreXV1YmluXCA7Civlrp3lhqDnq6AgPiBob3VrYW5zaG91XCA7Civoo73ns5bmpa0gPiBzZWl0b3VneW91XCA7Civoi6Xml6bpgqMgPiB3YWthZGFuJyduYVwgOwor5oyR5oim6ICFID4gY2hvdXNlbnNoYVwgOwor6YmE6Ymx55+zID4gdGVra291c2VraVwgOwor5qiq6ZqU6IacID4gb3VrYWt1bWFrdVwgOwor5ZCM5qWt6ICFID4gZG91Z3lvdXNoYVwgOwor5rS755So6KqeID4ga2F0c3V5b3Vnb1wgOwor5rex5ZG85ZC4ID4gc2hpbmtva3l1dVwgOwor5LiJ55Wq6baPID4gc2FuYmFuZG9yaVwgOwor5Yik5Lu75a6YID4gaGFuJyduaW5rYW5cIDsKK+WHuuWLpOiAhSA+IHNodWtraW5zaGFcIDsKK+WkluWbveWCtSA+IGdhaWtva3VzYWlcIDsKK+mAo+e1oeiIuSA+IHJlbnJha3VzZW5cIDsKK+iQveesrOeCuSA+IHJha3VkYWl0ZW5cIDsKK+mAsuihjOebuCA+IHNoaW5rb3Vzb3VcIDsKK+S4ieeVqumzpSA+IHNhbmJhbmRvcmlcIDsKK+axuuWumueahCA+IGtldHRlaXRla2lcIDsKK+iCieaWmeeQhiA+IG5pa3VyeW91cmlcIDsKK+aWh+azleeahCA+IGJ1bnBvdXRla2lcIDsKK+WbveaWh+azlSA+IGtva3VidW5wb3VcIDsKK+i2heW8qee0miA+IGNob3Vkb2t5dXVcIDsKK+Wkp+iUteecgSA+IG9va3VyYXNob3VcIDsKK+aEn+aDheeahCA+IGthbmpvdXRla2lcIDsKK+S5l+WQiOiIuSA+IG5vcmlhaWJ1bmVcIDsKK+W+s+eUqOWTgSA+IHRva3V5b3VoaW5cIDsKK+eHg+aWmeajkiA+IG5lbnJ5b3Vib3VcIDsKK+S6jOaXpemFlCA+IGZ1dHN1a2F5b2lcIDsKK+elnue1jOezuyA+IHNoaW5rZWlrZWlcIDsKK+S7ruitsOmVtyA+IGthcmlnaWNob3VcIDsKK+eLrOaWreirliA+IGRva3VkYW5yb25cIDsKK+WkluWbveS6uiA+IGdhaWtva3VqaW5cIDsKK+ePjeeznua8oiA+IGNoaW5wdW5rYW5cIDsKK+aMr+WLleadvyA+IHNoaW5kb3ViYW5cIDsKK+S4u+aVmeWGoCA+IHNodWt5b3VrYW5cIDsKK+ato+aVmeW4qyA+IHNlaWt5b3VzaGlcIDsKK+e0sOiPjOWtpiA+IHNhaWtpbmdha3VcIDsKK+iAleS9nOWcsCA+IGtvdXNha3VjaGlcIDsKK+aUuemAsuWFmiA+IGthaXNoaW50b3VcIDsKK+S4ieWIhuaQlyA+IHNhbmJ1dHN1a2lcIDsKK+S8kemWkeWcsCA+IGt5dXVrYW5jaGlcIDsKK+i7jeeUqOiJpiA+IGd1bicneW91a2FuXCA7CivmlrDogZ7ntJkgPiBzaGluYnVuc2hpXCA7CivovLvlsITngrkgPiBmdWt1c2hhdGVuXCA7CivkuJbkv5fnmoQgPiBzZXpva3V0ZWtpXCA7Civph43lnKfmhJ8gPiBqdXVhdHN1a2FuXCA7CivosYbpiYTnoLIgPiBtYW1lZGVwcG91XCA7CivlhKrnp4Dlk4EgPiB5dXVzaHV1aGluXCA7Civph5Hono3nlYwgPiBraW4nJ3l1dWthaVwgOwor5YKN6IG05Yi4ID4gYm91Y2hvdWtlblwgOwor6LKv6YeR566xID4gY2hva2luYmFrb1wgOwor5Zu95aKD57eaID4ga29ra3lvdXNlblwgOwor6JqV57O45qWtID4gc2Fuc2hpZ3lvdVwgOwor5LiA5bm06I2JID4gaWNoaW5lbnNvdVwgOwor6auY5a+G5bqmID4ga291bWl0c3Vkb1wgOwor5YWN55ar5L2TID4gbWVuJydla2l0YWlcIDsKK+ejgeawl+W1kCA+IGppa2lhcmFzaGlcIDsKK+aMr+WLleaVsCA+IHNoaW5kb3VzdXVcIDsKK+Wkp+ekvOacjSA+IHRhaXJlaWZ1a3VcIDsKK+aUueiJr+eoriA+IGthaXJ5b3VzaHVcIDsKK+WMl+WbveS6uiA+IGhva2tva3VqaW5cIDsKK+mAo+e1oee3miA+IHJlbnJha3VzZW5cIDsKK+eJouW9ueS6uiA+IHJvdXlha3VuaW5cIDsKK+WGheelneiogCA+IG5haXNodXVnZW5cIDsKK+WNiui6q+WDjyA+IGhhbnNoaW56b3VcIDsKK+Wkp+m7kuWkqSA+IGRhaWtva3V0ZW5cIDsKK+S4jeWIhuWJsiA+IGZ1YnVua2F0c3VcIDsKK+ilv+WMl+ilvyA+IHNlaWhva3VzZWlcIDsKK+S4reS4luWPsiA+IGNodXVzZWlzaGlcIDsKK+aAkumrquWkqSA+IGRvaGF0c3V0ZW5cIDsKK+WPjemdqeWRvSA+IGhhbmtha3VtZWlcIDsKK+aWsOiBnuekviA+IHNoaW5idW5zaGFcIDsKK+S4gOapn+i7uCA+IGljaGlraWppa3VcIDsKK+mbhumtmueBryA+IHNodXVneW90b3VcIDsKK+mbquimi+mFkiA+IHl1a2ltaXpha2VcIDsKK+WdiuS4u+mgrSA+IGJvdXp1YXRhbWFcIDsKK+WFiOmok+eahCA+IHNlbmtlbnRla2lcIDsKK+mXh+e1puS4jiA+IHlhbWlreXV1eW9cIDsKK+WCjeiBtOS6uiA+IGJvdWNob3VuaW5cIDsKK+S6i+Wun+S4iiA+IGppaml0c3Vqb3VcIDsKK+e+qeS+oOW/gyA+IGdpa3lvdXNoaW5cIDsKK+eUqOawtOWggCA+IHlvdXN1aWJvcmlcIDsKK+S7ruaZruiriyA+IGthcmlidXNoaW5cIDsKK+WNoOmgmOWcsCA+IHNlbnJ5b3VjaGlcIDsKK+WvneijheWTgSA+IHNoaW5zb3VoaW5cIDsKK+eUuuWGheS8miA+IGNob3VuYWlrYWlcIDsKK+WQjOebn+WbvSA+IGRvdW1laWtva3VcIDsKK+eZuuiCsuacnyA+IGhhdHN1aWt1a2lcIDsKK+iqk+e0hOabuCA+IHNlaXlha3VzaG9cIDsKK+eZuuWxleS4rSA+IGhhdHRlbmNodXVcIDsKK+iMtueVqueahCA+IGNoYWJhbnRla2lcIDsKK+eJueeUo+WTgSA+IHRva3VzYW5oaW5cIDsKK+ijveeyiealrSA+IHNlaWZ1bmd5b3VcIDsKK+a2iOWOu+azlSA+IHNob3VreW9ob3VcIDsKK+iCm+mWgOWtpiA+IGtvdW1vbmdha3VcIDsKK+Wkp+WPuOaVmSA+IGRhaXNoaWt5b3VcIDsKK+WmhOaDs+eXhyA+IG1vdXNvdXNob3VcIDsKK+W+oeeUqOmBlCA+IGdveW91ZGF0c3VcIDsKK+WxleekuueJqSA+IHRlbmppYnV0c3VcIDsKK+iHquauuuiAhSA+IGppc2F0c3VzaGFcIDsKK+WwhOW5uOW/gyA+IHNoYWtvdXNoaW5cIDsKK+S9nOabsuWutiA+IHNha2t5b2t1a2FcIDsKK+WFrOaVmeS8miA+IGtvdWt5b3VrYWlcIDsKK+ioiOeUu+aApyA+IGtlaWtha3VzZWlcIDsKK+WIh+i/q+aEnyA+IHNlcHBha3VrYW5cIDsKK+S4uOWkqeS6lSA+IG1hcnV0ZW5qb3VcIDsKK+aeouWvhumZoiA+IHN1dW1pdHN1aW5cIDsKK+Wbm+WFreWIpCA+IHNoaXJva3ViYW5cIDsKK+i/veS9k+mokyA+IHRzdWl0YWlrZW5cIDsKK+WFpeWgtOiAhSA+IG55dXVqb3VzaGFcIDsKK+WNiueXheS6uiA+IGhhbmJ5b3VuaW5cIDsKK+aNnOe0oumaiiA+IHNvdXNha3V0YWlcIDsKK+WPi+WlveWbvSA+IHl1dWtvdWtva3VcIDsKK+auv+S4iuS6uiA+IHRlbmpvdWJpdG9cIDsKK+aIquaWreapnyA+IHNldHN1ZGFua2lcIDsKK+eEoeawtOeJqSA+IG11c3VpYnV0c3VcIDsKK+WBpeW6t+eahCA+IGtlbmtvdXRla2lcIDsKK+aWsOS9k+aTjSA+IHNoaW50YWlzb3VcIDsKK+epuuS4ree3miA+IGt1dWNodXVzZW5cIDsKK+eUsOiIjumBkyA+IGluYWthbWljaGlcIDsKK+azouS5g+iKsSA+IG5hbWlub2hhbmFcIDsKK+WBtuWDj+aVmSA+IGd1dXpvdWt5b3VcIDsKK+elnuipseWtpiA+IHNoaW53YWdha3VcIDsKK+ebuOe2muaoqSA+IHNvdXpva3VrZW5cIDsKK+aAp+aVmeiCsiA+IHNlaWt5b3Vpa3VcIDsKK+WJjeWTqOe3miA+IHplbnNob3VzZW5cIDsKK+eLrOWlj+iAhSA+IGRva3Vzb3VzaGFcIDsKK+i1pOihgOeQgyA+IHNla2tla2t5dXVcIDsKK+WkqeWPsOWulyA+IHRlbmRhaXNodXVcIDsKK+i7jealveaJiyA+IGd1bmdha3VzaHVcIDsKK+i7jeiJpuW3uyA+IGd1bmthbm1ha2lcIDsKK+aal+ikkOiJsiA+IGFua2Fzc2hva3VcIDsKK+mAhuS9nOeUqCA+IGd5YWt1c2F5b3VcIDsKK+aMkeaIpueKtiA+IGNob3VzZW5qb3VcIDsKK+aknOmHj+e3miA+IGtlbnJ5b3VzZW5cIDsKK+e2suadk+WtkCA+IGFtaWpha3VzaGlcIDsKK+WGjeazqOaWhyA+IHNhaWNodXVtb25cIDsKK+WGheWPjei2syA+IG5haWhhbnNva3VcIDsKK+ekvueUqOaXjyA+IHNoYXlvdXpva3VcIDsKK+W5tOWwkeiAhSA+IG5lbnNob3VzaGFcIDsKK+aWsOeUn+S7oyA+IHNoaW5zZWlkYWlcIDsKK+S/neeuoeeJqSA+IGhva2FuYnV0c3VcIDsKK+WEquWLneiAhSA+IHl1dXNob3VzaGFcIDsKK+aUueiJr+eCuSA+IGthaXJ5b3V0ZW5cIDsKK+e1puaOkuawtCA+IGt5dXVoYWlzdWlcIDsKK+WkqeecvOmPoSA+IHRlbmdhbmt5b3VcIDsKK+S4iemAo+WLnSA+IHNhbnJlbnNob3VcIDsKK+S4jeeZuuW8viA+IGZ1aGF0c3VkYW5cIDsKK+WNiuWumOeahCA+IGhhbmthbnRla2lcIDsKK+aMr+WLleWtkCA+IHNoaW5kb3VzaGlcIDsKK+a0u+eZuuWMliA+IGthcHBhdHN1a2FcIDsKK+WPjumbhuWutiA+IHNodXVzaHV1a2FcIDsKK+mFuOWMlumJhCA+IHNhbmthdGV0c3VcIDsKK+aWsOS6uueOiyA+IHNoaW5qaW4nJ291XCA7Civlu7bml6XmlbAgPiBub2Jlbmlzc3V1XCA7CivlpYnnjK7poIwgPiBob3VrZW5zaG91XCA7CivosrjlupfoiJcgPiBrYXNoaXRlbnBvXCA7CivkuozkurrlhbEgPiBmdXRhcml0b21vXCA7Civlj47mloLliaQgPiBzaHV1cmVuemFpXCA7Civlm73pmpvms5UgPiBrb2t1c2FpaG91XCA7Civpq5jlrablubQgPiBrb3VnYWt1bmVuXCA7CivmoLjngb3lrrMgPiBrYWt1c2FpZ2FpXCA7CivkvL3ojYnlrZAgPiB0b2dpem91c2hpXCA7Civnhb3mg4XnmoQgPiBzZW5qb3V0ZWtpXCA7Civoqo3oqLzlrpggPiBuaW5zaG91a2FuXCA7CivppIrompXmpa0gPiB5b3VzYW5neW91XCA7CivngavlsbHohIggPiBrYXphbm15YWt1XCA7Civoj5znqK7mrrsgPiBuYXRhbmVnYXJhXCA7Civpgb/mmpHlrqIgPiBoaXNob2t5YWt1XCA7CivmsY7lv4Poq5YgPiBoYW5zaGlucm9uXCA7Civmm7joqZXmrIQgPiBzaG9oeW91cmFuXCA7CivlhaXloLTnqI4gPiBueXV1am91emVpXCA7CivoqabkvZzou4ogPiBzaGlzYWt1c2hhXCA7CivnjYTkuK3oqJggPiBnb2t1Y2h1dWtpXCA7CivkubPlhYTlvJ8gPiBjaGlreW91ZGFpXCA7CivkuozkuIPml6UgPiBmdXRhbmFub2thXCA7CivmraPmlZnkvJogPiBzZWlreW91a2FpXCA7CivlhYjnlJ/mlrkgPiBzZW5zZWlnYXRhXCA7CivojYnpm7Lpm4AgPiBrdXNhaGliYXJpXCA7Civkvo3lvpPogbcgPiBqaWp1dXNob2t1XCA7CivlnLDlvaLlraYgPiBjaGlrZWlnYWt1XCA7CivkuIDnm7Tnt5ogPiBpdGNob2t1c2VuXCA7CivlpKnnnLzpgJogPiB0ZW5nYW50c3V1XCA7Civku7LosrfkurogPiBuYWthZ2FpbmluXCA7CivolqznkIblraYgPiB5YWt1cmlnYWt1XCA7Civlm73mloflsIIgPiBrb2t1YnVuc2VuXCA7CivkuIDlubTnlJ8gPiBpY2hpbmVuc2VpXCA7CivlrprlvI/ljJYgPiB0ZWlzaGlraWthXCA7CivllYbmpa3ljJYgPiBzaG91Z3lvdWthXCA7CivkuIDovKrou4ogPiBpY2hpcmluc2hhXCA7Civmu7Lngq3pi7wgPiBzaGludGFua291XCA7Civou43nlKjniqwgPiBndW4nJ3lvdWtlblwgOwor5YWt6KeS5aCCID4gcm9ra2FrdWRvdVwgOwor5bqK5pqW5oi/ID4geXVrYWRhbmJvdVwgOwor562G5LiN57K+ID4gZnVkZWJ1c2hvdVwgOwor5YWs6Ki85Lq6ID4ga291c2hvdW5pblwgOwor6JaE5Yqb57KJID4gaGFrdXJpa2lrb1wgOwor54mn6I2J5ZywID4gYm9rdXNvdWNoaVwgOwor5bGe5oCn5YCkID4gem9rdXNlaWNoaVwgOwor6Kej5q+S6JasID4gZ2Vkb2t1eWFrdVwgOwor5rqA5pyf5pelID4gbWFua2lqaXRzdVwgOwor5ZCN5L2c6YG4ID4gbWVpc2FrdXNlblwgOwor5ZWG55So5paHID4gc2hvdXlvdWJ1blwgOwor5Zu96Kqe5a2mID4ga29rdWdvZ2FrdVwgOwor5Y+v5Y+K55qEID4ga2FreXV1dGVraVwgOwor5YaZ55yf54+tID4gc2hhc2hpbmhhblwgOwor5LiA5YWD6KuWID4gaWNoaWdlbnJvblwgOwor6Kq/5Ymk5birID4gY2hvdXphaXNoaVwgOwor5Y2Y5LiJ5b2iID4gdGFuc2FuZ2F0YVwgOwor55Sy5YaR5birID4ga2F0Y2h1dXNoaVwgOwor5YWI5Lu76ICFID4gc2VuJyduaW5zaGFcIDsKK+absue3mue+jiA+IGt5b2t1c2VuYmlcIDsKK+WFrOe0hOaVsCA+IGtvdXlha3VzdXVcIDsKK+eGseeLguiAhSA+IG5la2t5b3VzaGFcIDsKK+awtOe0i+WtpiA+IHN1aW1vbmdha3VcIDsKK+S6uueoruWtpiA+IGppbnNodWdha3VcIDsKK+aui+W/jeaApyA+IHphbicnbmluc2VpXCA7Civnm7jplqLnmoQgPiBzb3VrYW50ZWtpXCA7CivlhpnnnJ/niYggPiBzaGFzaGluYmFuXCA7CivnlJ/mga/lnLAgPiBzZWlzb2t1Y2hpXCA7Civnn6XmgKfnmoQgPiBjaGlzZWl0ZWtpXCA7CivmnKrnmbrpgZQgPiBtaWhhdHRhdHN1XCA7CivplovluZXmiKYgPiBrYWltYWt1c2VuXCA7CivlvozphY3moKogPiBrb3VoYWlrYWJ1XCA7CivlgZzms4rlnLAgPiB0ZWloYWt1Y2hpXCA7CivnvbnmgqPnjocgPiByaWthbnJpdHN1XCA7CivpgLLooYzlvaIgPiBzaGlua291a2VpXCA7CivpgZPlvrPkuIogPiBkb3V0b2t1am91XCA7CivnpL7kvJrnmoQgPiBzaGFrYWl0ZWtpXCA7CivpnIfmupDlnLAgPiBzaGluZ2VuY2hpXCA7CivmmJ/pm7LoqqwgPiBzZWl1bnNldHN1XCA7CivmsrPljp/ogIUgPiBrYXdhcmFtb25vXCA7CivmurrmrbvogIUgPiBkZWtpc2hpc2hhXCA7CivmtbfllYbms5UgPiBrYWlzaG91aG91XCA7CivnkIbpq6rlupcgPiByaWhhdHN1dGVuXCA7Civpnanlkb3ou40gPiBrYWt1bWVpZ3VuXCA7Civmm7joqozlraYgPiBzaG9zaGlnYWt1XCA7CivnkIbpq6rluKsgPiByaWhhdHN1c2hpXCA7CivkuJbkv5flv4MgPiBzZXpva3VzaGluXCA7Civpganku7vogIUgPiB0ZWtpbmluc2hhXCA7CivlpInlnKfmiYAgPiBoZW4nJ2F0c3Vqb1wgOwor5ryi5rCR5pePID4ga2FubWluem9rdVwgOwor6YGp55So5oCnID4gdGVraXlvdXNlaVwgOwor55u06KuH5YikID4gamlrYWRhbnBhblwgOwor6IOM5L+h6ICFID4gaGFpc2hpbnNoYVwgOwor562G6ICV5paZID4gaGlra291cnlvdVwgOwor5Lyd5rOV6IKMID4gZGVuYm91aGFkYVwgOwor57mK5q+b6JmrID4gc2VubW91Y2h1dVwgOwor56u25aOy5Lq6ID4ga3lvdWJhaW5pblwgOwor5L2c6Kme6ICFID4gc2FrdXNoaXNoYVwgOwor5a6J5q276KGTID4gYW5zaGlqdXRzdVwgOwor5qmf5YuV5YqbID4ga2lkb3VyeW9rdVwgOwor5pyA57WC5ZueID4gc2Fpc2h1dWthaVwgOwor5Li76KaB5Zu9ID4gc2h1eW91a29rdVwgOwor5Y+N6Zm95a2QID4gaGFuJyd5b3VzaGlcIDsKK+WGheWQkeeahCA+IG5haWtvdXRla2lcIDsKK+mYsua9ruWgpCA+IGJvdWNob3V0ZWlcIDsKK+a2suaZtuebpCA+IGVraXNob3ViYW5cIDsKK+elnue1jOaIpiA+IHNoaW5rZWlzZW5cIDsKK+m7hOWFq+S4iCA+IGtpaGFjaGlqb3VcIDsKK+ihqOS6jOmajiA+IG9tb3RlbmlrYWlcIDsKK+ippumok+eahCA+IHNoaWtlbnRla2lcIDsKK+WxoOauuuWgtCA+IHRvc2F0c3Vqb3VcIDsKK+aXheaUr+W6piA+IHRhYmlqaXRha3VcIDsKK+abuOewoembhiA+IHNob2thbnNodXVcIDsKK+WlveaIpuWbvSA+IGtvdXNlbmtva3VcIDsKK+WWtuael+WxgCA+IGVpcmlua3lva3VcIDsKK+eEoemHjeWKmyA+IG11anV1cnlva3VcIDsKK+mBuuWkseiAhSA+IGlzaGl0c3VzaGFcIDsKK+eUn+W+l+aoqSA+IHNlaXRva3VrZW5cIDsKK+exs+mokuWLlSA+IGtvbWVzb3Vkb3VcIDsKK+aWsOS9k+WItiA+IHNoaW50YWlzZWlcIDsKK+ihgOa4heWtpiA+IGtlc3NlaWdha3VcIDsKK+mDqOmVt+mWsiA+IGJ1Y2hvdWV0c3VcIDsKK+WknOaDs+absiA+IHlhc291a3lva3VcIDsKK+amguW/teeahCA+IGdhaW5lbnRla2lcIDsKK+epuuS4reaoqSA+IGt1dWNodXVrZW5cIDsKK+WRqOmBiuWIuCA+IHNodXV5dXVrZW5cIDsKK+WJteS9nOiAhSA+IHNvdXNha3VzaGFcIDsKK+WQq+ezlumHjyA+IGdhbnRvdXJ5b3VcIDsKK+WAuee0hOWutiA+IGtlbicneWFrdWthXCA7Civlh7rlvLXmiYAgPiBzaHV0Y2hvdWpvXCA7CivnrqHnkIbogbcgPiBrYW5yaXNob2t1XCA7CivmgZDmgJbnl4cgPiBreW91ZnVzaG91XCA7CivmlL/nlaXlrrYgPiBzZWlyeWFrdWthXCA7CivlhazooYbntrIgPiBrb3VzaHV1bW91XCA7CivlhaXloLTmqKkgPiBueXV1am91a2VuXCA7CivnnaPmiKbpmoogPiB0b2t1c2VudGFpXCA7CivljYPnvr3ptrQgPiBzZW5iYWR6dXJ1XCA7CivkvY/lroXlnLAgPiBqdXV0YWt1Y2hpXCA7CivlhoXmg5HmmJ8gPiBuYWl3YWt1c2VpXCA7CivnnJ/mraPnm7QgPiBtYXNob3VqaWtpXCA7CivlraPnr4DpoqggPiBraXNldHN1ZnV1XCA7CivkvY7lrablubQgPiB0ZWlnYWt1bmVuXCA7CivlrabnsY3nsL8gPiBnYWt1c2VraWJvXCA7Civnq4vkvZPpj6EgPiByaXR0YWlreW91XCA7CivkuozpoIXlvI8gPiBuaWtvdXNoaWtpXCA7Civnmb7ml6XntIUgPiBzYXJ1c3ViZXJpXCA7Civou43nlaXlrrYgPiBndW5yeWFrdWthXCA7CivmsJHorZrpm4YgPiBtaW5kYW5zaHV1XCA7CivmhbDllY/ooosgPiBpbW9uYnVrdXJvXCA7Civmtojnn7PngbAgPiBzaG91c2Vra2FpXCA7CivljZjkuIDljJYgPiB0YW4nJ2l0c3VrYVwgOwor5bCC55So6LuKID4gc2VuJyd5b3VzaGFcIDsKK+S7leiInueJqSA+IHNoaW1haW1vbm9cIDsKK+Wkp+eZvemzpSA+IG9vaGFrdWNob3VcIDsKK+e3qeW+kOabsiA+IGthbmpva3lva3VcIDsKK+WIgOWJo+WVhiA+IHRvdWtlbnNob3VcIDsKK+S8veiKneWxhSA+IHRvZ2lzaGliYWlcIDsKK+WknOOAheS4rSA+IHlvcnV5b25ha2FcIDsKK+awl+ixoeW6gSA+IGtpc2hvdWNob3VcIDsKK+eAnemdkueCrSA+IHJla2lzZWl0YW5cIDsKK+S4gOWGhueOiSA+IGljaGllbmRhbWFcIDsKK+eNheWtkOWuriA+IHNoaXNoaWt5dXVcIDsKK+W3oea0i+iJpiA+IGp1bicneW91a2FuXCA7Civlv4XpnIDlk4EgPiBoaXRzdWp1aGluXCA7CivkuI3kv6HnlKggPiBmdXNoaW4nJ3lvdVwgOwor5ris5Zyw57eaID4gc29rdWNoaXNlblwgOwor6auY5pyo5bGkID4ga291Ym9rdXNvdVwgOwor5qGD5rqQ5aKDID4gdG91Z2Vua3lvdVwgOwor6KGo5bGk5oCnID4gaHlvdXNvdXNlaVwgOwor5Ye65bit57C/ID4gc2h1c3Nla2lib1wgOwor6Kaq546L5aaDID4gc2hpbicnbm91aGlcIDsKK+mFjee1puezuyA+IGhhaWt5dXVrZWlcIDsKK+WkieWcp+WZqCA+IGhlbicnYXRzdWtpXCA7Civlrp/kvZPpj6EgPiBqaXR0YWlreW91XCA7CivlhKrli53mna8gPiB5dXVzaG91aGFpXCA7CivpgankuI3pgakgPiB0ZWtpZnV0ZWtpXCA7CivnpL7kuqTnmoQgPiBzaGFrb3V0ZWtpXCA7CivphY3ntabnsbMgPiBoYWlreXV1bWFpXCA7Civmm7joqJjlsYAgPiBzaG9raWt5b2t1XCA7CivotIjlj47os4QgPiB6b3VzaHV1d2FpXCA7Civlh7jlh7nntJkgPiB0b3RzdW91c2hpXCA7Civoo4HliKTkurogPiBzYWliYW4nJ25pblwgOwor5LuK6YGT5b+DID4gaW1hZG91c2hpblwgOwor57S55LuL6ICFID4gc2hvdWthaXNoYVwgOwor56m65Lit5oimID4ga3V1Y2h1dXNlblwgOwor5rCX6LGh5a2mID4ga2lzaG91Z2FrdVwgOwor55u457aa5Lq6ID4gc291em9rdW5pblwgOwor6KKr5ZGK5bitID4gaGlrb2t1c2VraVwgOwor5Lmz6ISC6IKqID4gbnl1dXNoaWJvdVwgOwor6L6y54mn5ZywID4gbm91Ym9rdWNoaVwgOwor5oKq5oiv5a2QID4gaXRhenVyYWtrb1wgOwor5bCE55qE5aC0ID4gc2hhdGVraWpvdVwgOwor5YmN5ZOo5oimID4gemVuc2hvdXNlblwgOwor5rOV5a2m6ICFID4gaG91Z2FrdXNoYVwgOwor5YWo5Zu957SZID4gemVua29rdXNoaVwgOwor5pWR6Zuj6Ii5ID4ga3l1dW5hbnNlblwgOwor6YeR6J6N5YK1ID4ga2luJyd5dXVzYWlcIDsKK+S4iui8ieWcpyA+IGpvdXNhaWF0c3VcIDsKK+WPo+WWp+WYqSA+IGt1Y2hpZ2Vua2FcIDsKK+aIkOS6uueXhSA+IHNlaWppbmJ5b3VcIDsKK+iKseawtOacqCA+IGhhbmFtaXp1a2lcIDsKK+mAoOWckuihkyA+IHpvdWVuanV0c3VcIDsKK+S5s+iFuueCjiA+IG55dXVzZW4nJ2VuXCA7CivmtbfmtYHnk7YgPiBrYWlyeXV1YmluXCA7CivliIblhYnlraYgPiBidW5rb3VnYWt1XCA7CivmsJHkuLvnmoQgPiBtaW5zaHV0ZWtpXCA7Civnsr7nmb3ns5YgPiBzZWloYWt1dG91XCA7CivnhKHmqZ/os6ogPiBtdWtpc2hpdHN1XCA7CivpgJroqbHmlpkgPiB0c3V1d2FyeW91XCA7CivmlLnoia/lk4EgPiBrYWlyeW91aGluXCA7Civnsr7nmb3nsbMgPiBzZWloYWt1bWFpXCA7Civlv6vliYrpi7wgPiBrYWlzYWt1a291XCA7Civml6XlkJHmsLQgPiBoaW5hdGFtaXp1XCA7CivmiYfmg4XnmoQgPiBzZW5qb3V0ZWtpXCA7Civpmarlr6nlk6EgPiBiYWlzaGluJydpblwgOwor5bir5Zuj6ZW3ID4gc2hpZGFuY2hvdVwgOwor57WE6IG35L2TID4gc29zaG9rdXRhaVwgOwor5p6c5a6f6YWSID4ga2FqaXRzdXNodVwgOwor5am/6aSK5a2QID4gbXVrb3lvdXNoaVwgOwor5YaZ55yf5birID4gc2hhc2hpbnNoaVwgOwor5LiL5qSc5p+7ID4gc2hpdGFrZW5zYVwgOwor6aKo6YKq6JasID4ga2F6ZWd1c3VyaVwgOwor5YSq5Yud5oimID4geXV1c2hvdXNlblwgOwor6YCj57aa5L2TID4gcmVuem9rdXRhaVwgOwor5aSp5YiR55eFID4gdGVua2VpYnlvdVwgOwor5Y2K57+F55uuID4gaGFuc2hpbW9rdVwgOwor6Iy255Wq5YqHID4gY2hhYmFuZ2VraVwgOwor5YaZ55yf5bGLID4gc2hhc2hpbicneWFcIDsKK+iJr+WwjuS9kyA+IHJ5b3Vkb3V0YWlcIDsKK+aVkeS4luS4uyA+IGt5dXVzZWlzaHVcIDsKK+ayk+aJi+mzpSA+IGhvdG90b2dpc3VcIDsKK+acquedgOaJiyA+IG1pY2hha3VzaHVcIDsKK+S9nOipqeazlSA+IHNha3VzaGlob3VcIDsKK+ecn+mtmumwuSA+IG1hbmFnYXRzdW9cIDsKK+WHuuW8teWToSA+IHNodXRjaG91aW5cIDsKK+S6uuWKm+i7iiA+IGppbnJpa2lzaGFcIDsKK+Wbvemam+S6uiA+IGtva3VzYWlqaW5cIDsKK+a4rOmVt+apnyA+IHNva3VjaG91a2lcIDsKK+Wwj+S4u+imsyA+IHNob3VzaHVrYW5cIDsKK+Wun+i3teeahCA+IGppc3NlbnRla2lcIDsKK+mAo+e1kOWZqCA+IHJlbmtldHN1a2lcIDsKK+iAkOS5heaApyA+IHRhaWt5dXVzZWlcIDsKK+adieS4puacqCA+IHN1Z2luYW1pa2lcIDsKK+e1guS6huW+jCA+IHNodXVyeW91Z29cIDsKK+WkqemBk+anmCA+IHRlbnRvdXNhbWFcIDsKK+aSruW9semaiiA+IHNhdHN1ZWl0YWlcIDsKK+iKseiPluiSsiA+IGhhbmFzaG91YnVcIDsKK+aknOecvOmPoSA+IGtlbmdhbmt5b3VcIDsKK+mFuOWMlueJqSA+IHNhbmthYnV0c3VcIDsKK+Wwj+S9nOaWmSA+IGtvc2FrdXJ5b3VcIDsKK+W6tuawkeeahCA+IHNob21pbnRla2lcIDsKK+i8quiInuabsiA+IHJpbmJ1a3lva3VcIDsKK+WHjee1kOWZqCA+IHRvdWtldHN1a2lcIDsKK+Wkj+icnOafkSA+IG5hdHN1bWlrYW5cIDsKK+etieaWueeahCA+IHRvdWhvdXRla2lcIDsKK+Wyqea4heawtCA+IGl3YXNoaW1penVcIDsKK+eri+ahiOiAhSA+IHJpdHN1YW5zaGFcIDsKK+iRl+i/sOWutiA+IGNob2p1dHN1a2FcIDsKK+iEs+aiheavkiA+IG5vdWJhaWRva3VcIDsKK+i7jeeUqOWTgSA+IGd1bicneW91aGluXCA7Civlg5Xku7LplpMgPiBib2t1bmFrYW1hXCA7Civpm6PoppbogbQgPiBuYW5zaGljaG91XCA7CivlvrPnvqnlv4MgPiB0b2t1Z2lzaGluXCA7CivliLrmv4DmgKcgPiBzaGlnZWtpc2VpXCA7CivpgKPntaHlhYggPiByZW5yYWt1c2VuXCA7Civov5HmtbfniakgPiBraW5rYWltb25vXCA7CivmnbHmtIvpgJogPiB0b3V5b3V0c3V1XCA7CivpiYTnoLLnjokgPiB0ZXBwb3VkYW1hXCA7CivkvqHmoLzooaggPiBrYWtha3VoeW91XCA7Civoqr/lgZzogIUgPiBjaG91dGVpc2hhXCA7CivmrbTlj7LoprMgPiByZWtpc2hpa2FuXCA7Civlu7rnr4nosrsgPiBrZW5jaGlrdWhpXCA7Civkurrmg4XliocgPiBuaW5qb3VnZWtpXCA7CivlpJrnpZ7mlZkgPiB0YXNoaW5reW91XCA7CivliY3lk6jlnLAgPiB6ZW5zaG91Y2hpXCA7CivkuIDluqbkuIggPiBpY2hpZG9kYWtlXCA7CivpgKPntaHkvJogPiByZW5yYWt1a2FpXCA7CivkuIDoiKzogbcgPiBpcHBhbnNob2t1XCA7CivnpL7kvJrlraYgPiBzaGFrYWlnYWt1XCA7CivlgbXlr5/mqZ8gPiB0ZWlzYXRzdWtpXCA7Civlr53lj7Dou4ogPiBzaGluZGFpc2hhXCA7CivlubTku6PniakgPiBuZW5kYWltb25vXCA7CivkuKHmm7/kurogPiByeW91Z2FlbmluXCA7CivlkIjmoLzogIUgPiBnb3VrYWt1c2hhXCA7CivlsILnlKjnt5ogPiBzZW4nJ3lvdXNlblwgOwor5biv5Z+f5bmFID4gdGFpaWtpaGFiYVwgOwor5Yid5LiA5b+1ID4gc2hvaWNoaW5lblwgOwor57S55LuL54q2ID4gc2hvdWthaWpvdVwgOwor5raI5q+S5ZmoID4gc2hvdWRva3VraVwgOwor5pem6YKj6KGGID4gZGFuJyduYXNodXVcIDsKK+WgheS/oeekvCA+IGtlbnNoaW5yZWlcIDsKK+WumOWFrOW6gSA+IGthbmtvdWNob3VcIDsKK+iBtOiBnuWDpyA+IGNob3Vtb25zb3VcIDsKK+WkquW5s+alvSA+IHRhaWhlaXJha3VcIDsKK+S4oeWkqeenpCA+IHJ5b3V0ZW5iaW5cIDsKK+WtlOmbgOefsyA+IGt1amFrdXNla2lcIDsKK+WJteS9nOaoqSA+IHNvdXNha3VrZW5cIDsKK+iJsuS6i+W4qyA+IGlyb2dvdG9zaGlcIDsKK+mZjemtlOihkyA+IGtvdW1hanV0c3VcIDsKK+Wwkeizh+acrCA+IHNob3VzaGlob25cIDsKK+izh+eUo+agqiA+IHNoaXNhbmthYnVcIDsKK+aBkOaAluW/gyA+IGt5b3VmdXNoaW5cIDsKK+Wun+mok+eahCA+IGppa2tlbnRla2lcIDsKK+S9v+W+kumBlCA+IHNoaXRvdGFjaGlcIDsKK+WuiemFkuWgtCA+IHlhc3VzYWthYmFcIDsKK+iBtOiBnuS8miA+IGNob3Vtb25rYWlcIDsKK+iCsuWFkOmjnyA+IGlrdWppc2hva3VcIDsKK+eUt+S+v+aJgCA+IG90b2tvYmVuam9cIDsKK+mmluWun+aknCA+IGt1YmlqaWtrZW5cIDsKK+e0sOiDnuiGnCA+IHNhaWJvdW1ha3VcIDsKK+WQjeS6uuiCjCA+IG1laWppbmhhZGFcIDsKK+Wwj+WtpuagoSA+IHNob3VnYWtrb3VcIDsKK+aXp+iXqeS4uyA+IGt5dXVoYW5zaHVcIDsKK+awkeacieaelyA+IG1pbicneXV1cmluXCA7CivotaTpiYTpibEgPiBzZWtpdGVra291XCA7CivmnKzojYnlraYgPiBob256b3VnYWt1XCA7Civkv67mraPogIUgPiBzaHV1c2Vpc2hhXCA7CivpoqjpgJ/oqIggPiBmdXVzb2t1a2VpXCA7CivmvZzlnKjnmoQgPiBzZW56YWl0ZWtpXCA7CivlpInmi43lrZAgPiBoZW5ieW91c2hpXCA7Civml6fmgJ3mg7MgPiBreXV1c2hpc291XCA7Civpm5HmnKjmnpcgPiB6b3Vib2t1cmluXCA7CivlhaXloLTliLggPiBueXV1am91a2VuXCA7CivmiKbpl5jnmoQgPiBzZW50b3V0ZWtpXCA7CivntYLpm7vou4ogPiBzaHV1ZGVuc2hhXCA7Civog4znvo7pr6ggPiBzZW1pa3VqaXJhXCA7CivnqbTmnZPlrZAgPiBhbmFqYWt1c2hpXCA7CivkuIDlubTkuK0gPiBpY2hpbmVuanV1XCA7CivpiYTnoLLmsLQgPiB0ZXBwb3VtaXp1XCA7Civlhajlm73msJEgPiB6ZW5rb2t1bWluXCA7Civkurrlj6PlraYgPiBqaW5rb3VnYWt1XCA7Civnm7Tmu5HpmY0gPiBjaG9ra2Fra291XCA7CivkuIrnlLPmm7ggPiBqb3VzaGluc2hvXCA7Civph53ljYPmnKwgPiBoYXJpc2VuYm9uXCA7CivkuInmpa3lnLAgPiBzYW5neW91Y2hpXCA7CivkuKblpKfmirUgPiBuYW1pdGFpdGVpXCA7Civnmb3pm7Lnn7MgPiBoYWt1dW5zZWtpXCA7CivmrKDluK3ogIUgPiBrZXNzZWtpc2hhXCA7CivlvJXlvZPph5EgPiBoaWtpYXRla2luXCA7Civoo4Xpo77pn7MgPiBzb3VzaG9rdW9uXCA7CivoppbogbTogIUgPiBzaGljaG91c2hhXCA7CivkubPoh63lhZAgPiBueXV1c2h1dWppXCA7CivmiYvmsqLmnKwgPiBzaHV0YWt1Ym9uXCA7CivorabmiJLlv4MgPiBrZWlrYWlzaGluXCA7CivkuK3lm73oqp4gPiBjaHV1Z29rdWdvXCA7CivlhaXmiYvpm6MgPiBueXV1c2h1bmFuXCA7Civpm7vmtYHoqIggPiBkZW5yeXV1a2VpXCA7CivlsbHmopTlrZAgPiBrdWNoaW5hc2hpXCA7CivlkJvkuLvlm70gPiBrdW5zaHVrb2t1XCA7Civpn7Pmpb3lraYgPiBvbmdha3VnYWt1XCA7CivpjK/lrZfnl4cgPiBzYWt1amlzaG91XCA7CivlpKfnm6Tnn7MgPiBkYWliYW5qYWt1XCA7CivliIblrZDph48gPiBidW5zaGlyeW91XCA7CivkuIDnlarojLYgPiBpY2hpYmFuY2hhXCA7CivpgYXliLvogIUgPiBjaGlrb2t1c2hhXCA7Civlho3nmbrotrMgPiBzYWlob3Nzb2t1XCA7Civlr77ouaDnmoQgPiB0YWlzaG90ZWtpXCA7Civmp43ooZPlrrYgPiBzb3VqdXRzdWthXCA7CivmrYzorKHmm7IgPiBrYXlvdWt5b2t1XCA7CivmtLvkurrnlLsgPiBrYXRzdWppbmdhXCA7CivkuozoqIDnm64gPiBmdXRha290b21lXCA7Civljp/lrZDph48gPiBnZW5zaGlyeW91XCA7CivlpKfluYXniakgPiBvb2hhYmFtb25vXCA7Civni6zlpY/kvJogPiBkb2t1c291a2FpXCA7CivohLHoh63liaQgPiBkYXNzaHV1emFpXCA7Civlv6vpgJ/oiLkgPiBrYWlzb2t1c2VuXCA7CivnlJ/mrpblmaggPiBzZWlzaG9rdWtpXCA7Civou4rkuK3oq4cgPiBzaGFjaHV1ZGFuXCA7Civpjq7pnZnliaQgPiBjaGluc2VpemFpXCA7CivlkIjkvbXnl4cgPiBnYXBwZWlzaG91XCA7Civmh4fopqrkvJogPiBrb25zaGlua2FpXCA7Civnib3niZvmmJ8gPiBrZW5neXV1c2VpXCA7CivliLrmv4DliaQgPiBzaGlnZWtpemFpXCA7CivojLbmn4TmnZMgPiBjaGFiaXNoYWt1XCA7CivmnInnpZ7oq5YgPiB5dXVzaGlucm9uXCA7Civlkb3kuK3mlbAgPiBtZWljaHV1c3V1XCA7Civmlrnop6Pnn7MgPiBob3VrYWlzZWtpXCA7Civlo7Lmjpvph5EgPiB1cmlrYWtla2luXCA7CivotoXlt6jmmJ8gPiBjaG91a3lvc2VpXCA7Civnq4vkvZPnmoQgPiByaXR0YWl0ZWtpXCA7Civnmb3mmLzlpKIgPiBoYWt1Y2h1dW11XCA7CivmlrDoqJjpjLIgPiBzaGlua2lyb2t1XCA7Civms6jop6PogIUgPiBjaHV1a2Fpc2hhXCA7Civkv53ph4jph5EgPiBob3NoYWt1a2luXCA7Civlj43nspLlrZAgPiBoYW5yeXV1c2hpXCA7CivkuIvotrPmlpkgPiBnZXNva3VyeW91XCA7Civms6jmlofmm7ggPiBjaHV1bW9uc2hvXCA7CivljJblkIjniakgPiBrYWdvdWJ1dHN1XCA7CivlsYvlvaLoiLkgPiB5YWthdGFidW5lXCA7CivpgYvli5XlipsgPiB1bmRvdXJ5b2t1XCA7Civpipjpipjnmr8gPiBtZWltZWl6YXJhXCA7Civpu5Lmm5zlsqkgPiBrb2t1eW91Z2FuXCA7Civljp/kvZzogIUgPiBnZW5zYWt1c2hhXCA7CivlhbXnq5nlraYgPiBoZWl0YW5nYWt1XCA7CivntLDlr4bnlLsgPiBzYWltaXRzdWdhXCA7CivkuIDnlarnt5ogPiBpY2hpYmFuc2VuXCA7CivljYrkurrliY0gPiBoYW4nJ25pbm1hZVwgOwor6ISz5qKX5aGeID4gbm91a291c29rdVwgOwor5YqH5aC06KGXID4gZ2VraWpvdWdhaVwgOwor5p2l44CF6YCxID4gcmFpcmFpc2h1dVwgOwor5rG66K2w5qipID4ga2V0c3VnaWtlblwgOwor5YqD5LiA5YyWID4ga2FrdWl0c3VrYVwgOwor5LiA5qe95byPID4gaXNzb3VzaGlraVwgOwor5a6F5oCl5L6/ID4gdGFra3l1dWJpblwgOwor6ICB5Lq655eFID4gcm91amluYnlvdVwgOwor5ZCI5qC854K5ID4gZ291a2FrdXRlblwgOwor6Kmm5L6b5ZOBID4gc2hpa3lvdWhpblwgOwor5Lit5aCF5omLID4gY2h1dWtlbnNodVwgOwor6JGb6aWF6aCtID4ga3V6dW1hbmp1dVwgOwor5o6l5a6i5ammID4gc2Vra3lha3VmdVwgOwor5rS75a2X5pysID4ga2F0c3VqaWhvblwgOwor6ZyN5YWs6bOlID4gaG90b3RvZ2lzdVwgOwor5ZWP6aGM5YqHID4gbW9uZGFpZ2VraVwgOwor6IG06Kyb55SfID4gY2hvdWtvdXNlaVwgOwor6LO96Yqt566xID4gc2Fpc2VuYmFrb1wgOwor5o+Q5ZSx6ICFID4gdGVpc2hvdXNoYVwgOwor5Zm06aOv54mpID4gZnVucGFubW9ub1wgOwor5YiG5qW15YyWID4gYnVua3lva3VrYVwgOwor566h55CG5bGAID4ga2FucmlreW9rdVwgOwor6KeS6YyQ5Y+wID4ga2FrdXN1aWRhaVwgOwor56aP5bKh55yMID4gZnVrdW9rYWtlblwgOwor54us5aOH5aC0ID4gZG9rdWRhbmpvdVwgOwor5Luy6ZaT6KSSID4gbmFrYW1hYm9tZVwgOwor6ZqP5oOz6YyyID4genVpc291cm9rdVwgOwor5pKu5b2x6ICFID4gc2F0c3VlaXNoYVwgOwor5aaC6I+p6JapID4gbnlvYm9zYXRzdVwgOwor5ZG95Lit5by+ID4gbWVpY2h1dWRhblwgOwor55yf5YiG5pWwID4gc2hpbmJ1bnN1dVwgOwor6ZuH55So5Li7ID4ga295b3VudXNoaVwgOwor6YmE56Cy5by+ID4gdGVwcG91ZGFtYVwgOwor5bGv55Sw5YW1ID4gdG9uZGVuaGVpXCA7CivmlbXpg6jpmoogPiB0ZWtpYnV0YWlcIDsKK+aKteW9k+aoqSA+IHRlaXRvdWtlblwgOwor5p2R5aSr5a2QID4gc29ucHV1c2hpXCA7Civmj5rmsLTou4ogPiB5b3VzdWlzaGFcIDsKK+aVkeaPtOi7jSA+IGt5dXVlbmd1blwgOwor6IKy5q+b5YmkID4gaWt1bW91emFpXCA7Civpu5LpoK3lt74gPiBrdXJvenVraW5cIDsKK+ino+avkuWJpCA+IGdlZG9rdXphaVwgOwor6auY5ae/5YuiID4ga291c2hpc2VpXCA7CivlsYvlj7DlupcgPiB5YXRhaW1pc2VcIDsKK+i1t+ejgeWKmyA+IGtpamlyeW9rdVwgOwor5Y6f55Sf5p6XID4gZ2Vuc2VpcmluXCA7CivmrbTlj7LnlLsgPiByZWtpc2hpZ2FcIDsKK+WJjeWNiueUnyA+IHplbmhhbnNlaVwgOwor5a2Y5Zyo6KuWID4gc29uemFpcm9uXCA7CivluIzmnJvnmoQgPiBraWJvdXRla2lcIDsKK+S6uuW3pembtyA+IGppbmtvdXJhaVwgOwor5bCC55So5qmfID4gc2VuJyd5b3VraVwgOwor5bqm6YeP6KGhID4gZG9yeW91a291XCA7CivlhZrlpKfkvJogPiB0b3V0YWlrYWlcIDsKK+WQjOS5l+iAhSA+IGRvdWpvdXNoYVwgOwor5Yq05YuV6ICFID4gcm91ZG91c2hhXCA7CivljZjmlbDlnosgPiB0YW5zdXVrZWlcIDsKK+W+k+WFhOW8nyA+IGp1dWtlaXRlaVwgOwor6b2n5q2v6aGeID4gZ2Vzc2hpcnVpXCA7CivlhqDmnKjploAgPiBrYWJ1a2ltb25cIDsKK+S7mOWxnuWTgSA+IGZ1em9rdWhpblwgOwor6Kiq5ZWP6ICFID4gaG91bW9uc2hhXCA7CivnmbrpoK3kurogPiBob3R0b3VuaW5cIDsKK+aWh+mBuOW3pSA+IGJ1bnNlbmtvdVwgOwor5ZCM5bGF5Lq6ID4gZG91a3lvbmluXCA7Civlj4LoqaPkurogPiBzYW5rZWluaW5cIDsKK+W9ueWToeS8miA+IHlha3VpbmthaVwgOwor5a2k56uL6KqeID4ga29yaXRzdWdvXCA7CivnlJ/oj5PlrZAgPiBuYW1hZ2FzaGlcIDsKK+WLmOWumuabuCA+IGthbmpvdXNob1wgOwor6ZaL5YKs5ZywID4ga2Fpc2FpY2hpXCA7CivokL3lvozogIUgPiByYWt1Z29zaGFcIDsKK+eUt+WtkOagoSA+IGRhbnNoaWtvdVwgOwor5LiA6Ium5Yq0ID4gaGl0b2t1cm91XCA7CivlgqzmtpnlvL4gPiBzYWlydWlkYW5cIDsKK+e1seayu+aoqSA+IHRvdWNoaWtlblwgOwor56aB6Lui6LyJID4ga2ludGVuc2FpXCA7CivmuK/mub7nqI4gPiBrb3V3YW56ZWlcIDsKK+S4jeWvm+WuuSA+IGZ1a2FuJyd5b3VcIDsKK+S4jeS/oeS7sCA+IGZ1c2hpbmtvdVwgOwor5aSq5YWs5pybID4gdGFpa291Ym91XCA7CivkuLjmi6zlvKcgPiBtYXJ1Z2Fra29cIDsKK+WkluWQkeaApyA+IGdhaWtvdXNlaVwgOwor5LiN6Laz5YmNID4gdGFyYXp1bWFlXCA7Civkuozlm73plpMgPiBuaWtva3VrYW5cIDsKK+S8muiRrOiAhSA+IGthaXNvdXNoYVwgOwor56aP5a+/6I2JID4gZnVrdWp1c291XCA7Civms5Xmm7nnlYwgPiBob3Vzb3VrYWlcIDsKK+mBi+i8uOecgSA+IHVuJyd5dXNob3VcIDsKK+mBi+i8uOebuCA+IHVuJyd5dXNob3VcIDsKK+S5l+i7iumnhSA+IGpvdXNoYWVraVwgOwor5pyd6a6u6KqeID4gY2hvdXNlbmdvXCA7Civpnanlkb3lrrYgPiBrYWt1bWVpa2FcIDsKK+apn+WvhuiyuyA+IGtpbWl0c3VoaVwgOwor5Lq66YCg57GzID4gamluem91bWFpXCA7CivmtIvlk4HlupcgPiB5b3VoaW50ZW5cIDsKK+WAi+S6uueahCA+IGtvamludGVraVwgOwor5LiA5YWD5YyWID4gaWNoaWdlbmthXCA7CivkvJ3pgZPoiLkgPiBkZW5kb3VzZW5cIDsKK+Wcp+i/q+aEnyA+IGFwcGFrdWthblwgOwor5LqI6Ziy562WID4geW9ib3VzYWt1XCA7Civoi6XpmqDlsYUgPiB3YWthaW5reW9cIDsKK+WumuS9j+iAhSA+IHRlaWp1dXNoYVwgOwor5rC05rq25oCnID4gc3VpeW91c2VpXCA7CivpgbroqIDmm7ggPiB5dWlnb25zaG9cIDsKK+S7o+eHg+i7iiA+IGRhaW5lbnNoYVwgOwor5aSJ5oiQ5bKpID4gaGVuc2VpZ2FuXCA7CivkuIDlrprph48gPiBpdHRlaXJ5b3VcIDsKK+iLpueBsOefsyA+IGt1a2Fpc2VraVwgOwor5bem5b+D5oi/ID4gc2FzaGluYm91XCA7CivovKrnlarliLYgPiByaW5iYW5zZWlcIDsKK+iri+mhmOiAhSA+IHNlaWdhbnNoYVwgOwor5Zyn6L+r5oCnID4gYXBwYWt1c2VpXCA7CivnvoXnlJ/ploAgPiByYXNob3Vtb25cIDsKK+WAi+S6uueUqCA+IGtvamluJyd5b3VcIDsKK+S6q+WPl+iAhSA+IGt5b3VqdXNoYVwgOwor5b6h6Laz5Yq0ID4gZ29zb2t1cm91XCA7CivniKzomavpoZ4gPiBoYWNodXVydWlcIDsKK+i/t+S/oeWutiA+IG1laXNoaW5rYVwgOwor5pu457Ch5paHID4gc2hva2FuYnVuXCA7CivoqLHlj6/oqLwgPiBreW9rYXNob3VcIDsKK+awkeS4u+WFmiA+IG1pbnNodXRvdVwgOwor5aSq5YiA5YWIID4gdGFjaGlzYWtpXCA7CivkvJ3pgZPogIUgPiBkZW5kb3VzaGFcIDsKK+ebo+imluiIuSA+IGthbnNoaXNlblwgOwor57iE5pqW57C+ID4gbmF3YW5vcmVuXCA7Civntr/oo73lk4EgPiBtZW5zZWloaW5cIDsKK+WHuui1sOmmrCA+IHNodXNzb3ViYVwgOwor5LqM6ZqO5bu6ID4gbmlrYWlkYXRlXCA7Civkv67mraPmoYggPiBzaHV1c2VpYW5cIDsKK+Wuo+S8neaIpiA+IHNlbmRlbnNlblwgOwor6KuL6LKg5qWtID4gdWtlb2lneW91XCA7CivpoZ7kurrnjL8gPiBydWlqaW4nJ2VuXCA7CivlkIjnkIbnmoQgPiBnb3VyaXRla2lcIDsKK+WLneiyoOW4qyA+IHNob3VidXNoaVwgOwor57O46Jqv6JqTID4gaXRvbWltaXp1XCA7Civlu7bplbfmiKYgPiBlbmNob3VzZW5cIDsKK+Wcn+W7uualrSA+IGRva2VuZ3lvdVwgOwor6LSI5ZGI5ZOBID4gem91dGVpaGluXCA7Civph5HpibHlnLAgPiBraW5rb3VjaGlcIDsKK+aYvOW+oemjryA+IGhpcnVnb2hhblwgOwor6JKZ5Y+k6KWeID4gbW91a29oaWRhXCA7CivljYrmnIjliIogPiBoYW5nZWtrYW5cIDsKK+ecjOawkeeojiA+IGtlbm1pbnplaVwgOwor5omH5YuV6ICFID4gc2VuZG91c2hhXCA7Civpm4bkvJrmiYAgPiBzaHV1a2Fpam9cIDsKK+acqOW3peWgtCA+IG1va2tvdWpvdVwgOwor5rSS6JC96ICFID4gc2hhcmVtb25vXCA7CivmiKbpl5jluL0gPiBzZW50b3Vib3VcIDsKK+WkleWMlueypyA+IHl1dWdlc2hvdVwgOwor5Y+v5YuV5aCwID4ga2Fkb3V6ZWtpXCA7CivlpKflubTlopcgPiBvb3Rvc2hpbWFcIDsKK+azleeQhuWtpiA+IGhvdXJpZ2FrdVwgOwor6buE6aC36JuHID4gYW9kYWlzaG91XCA7CivpgI/mmI7kvZMgPiB0b3VtZWl0YWlcIDsKK+aVhemanOi7iiA+IGtvc2hvdXNoYVwgOwor55uj6KaW6ICFID4ga2Fuc2hpc2hhXCA7CivlvIHmhbbojYkgPiBiZW5rZWlzb3VcIDsKK+WtmOWcqOiAhSA+IHNvbnphaXNoYVwgOwor5YWo5Zu95Yy6ID4gemVua29rdWt1XCA7CivlpKnnmofml5cgPiB0ZW4nJ25vdWtpXCA7Civlrpjlg5rljJYgPiBrYW5yeW91a2FcIDsKK+aXouW+l+aoqSA+IGtpdG9rdWtlblwgOwor5YWJ57ea6YqDID4ga291c2VuanV1XCA7Civku67pnaLliocgPiBrYW1lbmdla2lcIDsKK+apn+aisOeahCA+IGtpa2FpdGVraVwgOwor54ao5paX57SZID4gbm9zaGlnYW1pXCA7CivlhpnmpI3mqZ8gPiBzaGFzaG9ra2lcIDsKK+acrOS9k+irliA+IGhvbnRhaXJvblwgOwor55m65aOw5rOVID4gaGFzc2VpaG91XCA7Civntabmua/lmaggPiBreXV1dG91a2lcIDsKK+mBiuiIiOiyuyA+IHl1dWt5b3VoaVwgOwor5bmz5a6J5LqsID4gaGVpYW5reW91XCA7CivnlJ/mrKDkvLggPiBuYW1hYWt1YmlcIDsKK+mAgeS7mOWFiCA+IHNvdWZ1c2FraVwgOwor5aSW6YeO5bitID4gZ2FpeWFzZWtpXCA7Civnq4vkvZPmiKYgPiByaXR0YWlzZW5cIDsKK+ebo+imlue2siA+IGthbnNoaW1vdVwgOwor5pyI5rC06YeRID4gZ2Vzc3Vpa2luXCA7CivmraPmipXmiYsgPiBzZWl0b3VzaHVcIDsKK+mBoOi1pOWkliA+IGVuc2VraWdhaVwgOwor5oyH56S66JasID4gc2hpaml5YWt1XCA7Civkv6Hlj7fmqZ8gPiBzaGluZ291a2lcIDsKK+S6leaIuOi7iiA+IGlkb2d1cnVtYVwgOwor5pyJ5ZCN56iOID4geXV1bWVpemVpXCA7Civnq4vkvZPmhJ8gPiByaXR0YWlrYW5cIDsKK+WEquWFiOaoqSA+IHl1dXNlbmtlblwgOwor5a6f6aiT5aC0ID4gamlra2Vuam91XCA7CivniaHkuLnppIUgPiBib3RhbW9jaGlcIDsKK+e1jOWbo+mAoyA+IGtlaWRhbnJlblwgOwor5pat6aCt5Y+wID4gZGFudG91ZGFpXCA7CivkuojntITogIUgPiB5b3lha3VzaGFcIDsKK+e1guWknOeBryA+IHNodXV5YXRvdVwgOwor5pqX6buS6Z2iID4gYW5rb2t1bWVuXCA7CivlrqPkvJ3lsYsgPiBzZW5kZW4nJ3lhXCA7Civku6Pmm7/lk4EgPiBkYWl0YWloaW5cIDsKK+eCremFuOWhqSA+IHRhbnNhbicnZW5cIDsKK+S4i+Wuv+WxiyA+IGdlc2h1a3V5YVwgOwor6KOc57Wm57eaID4gaG9reXV1c2VuXCA7CivlkI3kurrmiKYgPiBtZWlqaW5zZW5cIDsKK+S4gOiIrOW4rSA+IGlwcGFuc2VraVwgOwor6YGt6Zuj6ICFID4gc291bmFuc2hhXCA7Civljp/lrZDnoLIgPiBnZW5zaGlob3VcIDsKK+WAkue9ruazlSA+IHRvdWNoaWhvdVwgOwor54Wn5rqW5ZmoID4gc2hvdWp1bmtpXCA7Civljp/kvY/msJEgPiBnZW5qdXVtaW5cIDsKK+iBluWFrOS8miA+IHNlaWtvdWthaVwgOwor5Y6f55Sj5ZywID4gZ2Vuc2FuY2hpXCA7Civpnanlkb3lhZAgPiBrYWt1bWVpamlcIDsKK+WEqumnv+mmrCA+IHl1dXNodW5iYVwgOwor5Li75oOF6KuWID4gc2h1am91cm9uXCA7CivpqqjokaPlk4EgPiBrb3R0b3VoaW5cIDsKK+euoeiyoeS6uiA+IGthbnphaW5pblwgOwor5ryU5YqH55WMID4gZW5nZWtpa2FpXCA7CivpioDplqPlr7ogPiBnaW5rYWt1amlcIDsKK+miqOmzpeW6pyA+IGZ1dWNob3V6YVwgOwor5oyf55685ZmoID4ga3lvdWtlbmtpXCA7CivmlZnmjojms5UgPiBreW91anVob3VcIDsKK+mbu+awl+mHnCA+IGRlbmtpZ2FtYVwgOwor6Zu75rCX6YePID4gZGVua2lyeW91XCA7CivngrnlhYnmupAgPiB0ZW5rb3VnZW5cIDsKK+aXpeWIiue0mSA+IG5pa2thbnNoaVwgOwor6ZaT54uC6KiAID4gYWlreW91Z2VuXCA7CivogIHkurrmgKcgPiByb3VqaW5zZWlcIDsKK+ioiOaVsOeuoSA+IGtlaXN1dWthblwgOwor6YeR5Yip6Z6YID4ga2lucmlzaG91XCA7Civku67mlL/lupwgPiBrYXJpc2VpZnVcIDsKK+ePvuS7o+eJiCA+IGdlbmRhaWJhblwgOwor5L2O5ae/5YuiID4gdGVpc2hpc2VpXCA7CivmgKXpmY3kuIsgPiBreXV1a291a2FcIDsKK+S/oeWPt+aXlyA+IHNoaW5nb3VraVwgOwor56ul6Kmx5YqHID4gZG91d2FnZWtpXCA7Civlrp/pqJPlj7AgPiBqaWtrZW5kYWlcIDsKK+awtOaIkOWyqSA+IHN1aXNlaWdhblwgOwor5b6h5a+u5Lq6ID4gZ29yeW91bmluXCA7Civoh6rouqvnlaogPiBqaXNoaW5iYW5cIDsKK+egguaZguioiCA+IHN1bmFkb2tlaVwgOwor6KGA6YGU56OoID4gY2hpZGFydW1hXCA7CivppIrpto/loLQgPiB5b3VrZWlqb3VcIDsKK+iEsei1sOWFtSA+IGRhc3NvdWhlaVwgOwor6I2Y5ZyS5Yi2ID4gc2hvdWVuc2VpXCA7CivliY3ljYrmiKYgPiB6ZW5wYW5zZW5cIDsKK+iok+ipgeWtpiA+IGt1bmtvZ2FrdVwgOwor6LuK5LqV5oi4ID4ga3VydW1haWRvXCA7CivlpJbli5nnnIEgPiBnYWltdXNob3VcIDsKK+aWsOaZguS7oyA+IHNoaW5qaWRhaVwgOwor5riJ5aSW6YOoID4gc2hvdWdhaWJ1XCA7CivmhJ/lhYnntJkgPiBrYW5rb3VzaGlcIDsKK+aSruW9seapnyA+IHNhdHN1ZWlraVwgOwor5LiA55Sf5ravID4gaXNzaG91Z2FpXCA7CivmsLTmupDlnLAgPiBzdWlnZW5jaGlcIDsKK+aVtOa1geWZqCA+IHNlaXJ5dXVraVwgOwor6YqA6KGM55WMID4gZ2lua291a2FpXCA7Civnj77kvY/miYAgPiBnZW5qdXVzaG9cIDsKK+WJjeWPo+S4iiA+IG1hZWtvdWpvdVwgOwor5Zyw5a++56m6ID4gY2hpdGFpa3V1XCA7CivnrKzkuIDpm4YgPiBkYWlpc3NodXVcIDsKK+Wkqeeah+WutiA+IHRlbicnbm91a2VcIDsKK+e1puayueiIuSA+IGt5dXV5dXNlblwgOwor5Luj5pu45Lq6ID4gZGFpc2hvbmluXCA7CivlibXlp4vogIUgPiBzb3VzaGlzaGFcIDsKK+S+oeagvOW4ryA+IGtha2FrdXRhaVwgOwor5aC05omA5p+EID4gYmFzaG9nYXJhXCA7Civkv6Hlj7fmiYAgPiBzaGluZ291am9cIDsKK+aCquW+queSsCA+IGFrdWp1bmthblwgOwor5a6f6aiT5YCkID4gamlra2VuY2hpXCA7CivkuI3poqjmtYEgPiBidWZ1dXJ5dXVcIDsKK+Wuo+S8neWToSA+IHNlbmRlbicnaW5cIDsKK+mZpOmbu+mHnSA+IGpvZGVuYmFyaVwgOwor6KGb55Sf5a2mID4gZWlzZWlnYWt1XCA7CivnmbropovogIUgPiBoYWtrZW5zaGFcIDsKK+azleeOi+W6gSA+IGhvdW91Y2hvdVwgOwor5LiA55Wq5omLID4gaWNoaWJhbnRlXCA7CivpmZDnlYzngrkgPiBnZW5rYWl0ZW5cIDsKK+adv+ebrue0mSA+IGl0YW1lZ2FtaVwgOwor5oSB5ZiG5aC0ID4gc2h1dXRhbmJhXCA7CivoirHnm7jmkrIgPiBoYW5henVtb3VcIDsKK+atr+enkeWtpiA+IHNoaWthZ2FrdVwgOwor5LuV5LqL552AID4gc2hpZ290b2dpXCA7CivlhYnmlofnpL4gPiBrb3VidW5zaGFcIDsKK+mrmOeHpeWcsCA+IGtvdXNvdWNoaVwgOwor6L6y5Zyw5rOVID4gbm91Y2hpaG91XCA7CivokZvmoLnmua8gPiBrYWtrb250b3VcIDsKK+WFiembu+euoSA+IGtvdWRlbmthblwgOwor6Lqr5YiG5p+EID4gbWlidW5nYXJhXCA7CivoprPopqfliLggPiBrYW5yYW5rZW5cIDsKK+emgeWItuWTgSA+IGtpbnNlaWhpblwgOwor5b2T57Gk6ICFID4gdG91c2Vuc2hhXCA7CivpgLLljJboq5YgPiBzaGlua2Fyb25cIDsKK+WGjeaknOiojiA+IHNhaWtlbnRvdVwgOwor5Y2K5aSP55SfID4gaGFuZ2VzaG91XCA7CivlvqHpo6/mmYIgPiBnb2hhbmRva2lcIDsKK+aEm+W8n+WtkCA+IG1hbmFkZXNoaVwgOwor5omL5byV5pu4ID4gdGViaWtpc2hvXCA7Civmj67nmbrmsrkgPiBraWhhdHN1eXVcIDsKK+e/sOael+mZoiA+IGthbnJpbicnaW5cIDsKK+aVtOWQiOaApyA+IHNlaWdvdXNlaVwgOwor5paZ55CG55WqID4gcnlvdXJpYmFuXCA7CivljYHkuozlrq4gPiBqdXVuaWt5dXVcIDsKK+eUn+eUo+iyoSA+IHNlaXNhbnphaVwgOwor5LiA5Luj6KiYID4gaWNoaWRhaWtpXCA7CivlhYPlp4vnpa0gPiBnZW5zaGlzYWlcIDsKK+S6oeWRveiAhSA+IGJvdW1laXNoYVwgOwor5pyJ56iO5ZOBID4geXV1emVpaGluXCA7CivlpKfkvb/ppKggPiB0YWlzaGlrYW5cIDsKK+mZkOWumuipniA+IGdlbnRlaXNoaVwgOwor54Sh6aeE6aOvID4gbXVkYW1lc2hpXCA7Civnt4/msbrnrpcgPiBzb3VrZXNzYW5cIDsKK+attOWPsuWutiA+IHJla2lzaGlrYVwgOwor5rW35rC05bi9ID4ga2Fpc3VpYm91XCA7CivmjqfpmaTpoY0gPiBrb3Vqb2dha3VcIDsKK+WutuaUv+WtpiA+IGthc2VpZ2FrdVwgOwor5YaF5byf5a2QID4gdWNoaWRlc2hpXCA7CivlpJrlv5nkuK0gPiB0YWJvdWNodXVcIDsKK+WOn+WvuOWkpyA+IGdlbnN1bmRhaVwgOwor5qmf6IO955qEID4ga2lub3V0ZWtpXCA7CivlpbPmgKfnmoQgPiBqb3NlaXRla2lcIDsKK+a7kee/lOapnyA+IGthc3Nob3VraVwgOwor5bm05aeL54q2ID4gbmVuc2hpam91XCA7CivlrZDnhanmgqkgPiBrb2Jvbicnbm91XCA7CivmjIfljZfou4ogPiBzaGluYW5zaGFcIDsKK+WGmeeUn+aWhyA+IHNoYXNlaWJ1blwgOwor5YaF6YGK5pifID4gbmFpeXV1c2VpXCA7Civoi6booYzogIUgPiBrdWd5b3VzaGFcIDsKK+e9quaCquaEnyA+IHphaWFrdWthblwgOwor54Sh55eH54q2ID4gbXVzaG91am91XCA7Civop5LnoILns5YgPiBrYWt1emF0b3VcIDsKK+eUn+i/lOS6iyA+IG5hbWFoZW5qaVwgOwor5Y2Y57SU5oCnID4gdGFuanVuc2VpXCA7CivlpKflg6fmraMgPiBkYWlzb3Vqb3VcIDsKK+S4gOi6q+S4iiA+IGlzc2hpbmpvdVwgOwor5L+u6YGT5bC8ID4gc2h1dWRvdW5pXCA7Civou43mlL7pgIEgPiBndW5ob3Vzb3VcIDsKK+eZu+iomOaWmSA+IHRvdWtpcnlvdVwgOwor6Iux5Zu95Lq6ID4gZWlrb2t1amluXCA7Civlgb3oqLzogIUgPiBnaXNob3VzaGFcIDsKK+mBk+i3r+apiyA+IGRvdXJva3lvdVwgOwor5pKu5b2x5omAID4gc2F0c3VlaWpvXCA7CivlvaLmhYvoq5YgPiBrZWl0YWlyb25cIDsKK+WBveiovOe9qiA+IGdpc2hvdXphaVwgOwor6aaW6KyA6ICFID4gc2h1Ym91c2hhXCA7CivopIflj7fljJYgPiBmdWt1Z291a2FcIDsKK+esrOS4gOi8ryA+IGRhaWlzc2h1dVwgOwor5aeL56WW6bOlID4gc2hpc29jaG91XCA7CivnibnoqLHms5UgPiB0b2treW9ob3VcIDsKK+mkiuavm+WJpCA+IHlvdW1vdXphaVwgOwor5rWu5rCX6ICFID4gdXdha2ltb25vXCA7Civmmpfpu5LooZcgPiBhbmtva3VnYWlcIDsKK+Wkp+WFg+W4pSA+IGRhaWdlbnN1aVwgOwor5YWN6Kix54q2ID4gbWVua3lvam91XCA7CivlpJzlhYnomasgPiB5YWtvdWNodXVcIDsKK+Wlh+WkqeeDiCA+IGtpdGVyZXRzdVwgOwor5YyZ5Yqg5ribID4gc2FqaWthZ2VuXCA7CivmipXmiYvmnb8gPiB0b3VzaHViYW5cIDsKK+W+k+alreWToSA+IGp1dWd5b3VpblwgOwor5om56KmV55y8ID4gaGloeW91Z2FuXCA7Civkv67pgZPlpbMgPiBzaHV1ZG91am9cIDsKK+Wcp+eXm+eCuSA+IGF0dHN1dXRlblwgOwor5rW35YW16ZqKID4ga2FpaGVpdGFpXCA7CivogIPoqrLooaggPiBrb3VrYWh5b3VcIDsKK+m6puiKveezliA+IGJha3VnYXRvdVwgOwor5paH6Iq45qyEID4gYnVuZ2VpcmFuXCA7CivlpJznm7Lnl4cgPiB5YW1vdXNob3VcIDsKK+aKleeov+iAhSA+IHRvdWtvdXNoYVwgOwor54Sh5beu5YilID4gbXVzYWJldHN1XCA7CivnqbrmjLrpmoogPiBrdXV0ZWl0YWlcIDsKK+W+ruiqv+aVtCA+IGJpY2hvdXNlaVwgOwor5Y+j5b+g5a6fID4ga3VjaGltYW1lXCA7CivoirHmqKHmp5ggPiBoYW5hbW95b3VcIDsKK+acieWQjeagoSA+IHl1dW1laWtvdVwgOwor54m56Kix5qipID4gdG9ra3lva2VuXCA7Civmp4vmiJDlrZAgPiBrb3VzZWlzaGlcIDsKK+iri+mhmOabuCA+IHNlaWdhbnNob1wgOwor5ouh5aOw5qmfID4ga2FrdXNlaWtpXCA7CivoqI7oq5bkvJogPiB0b3Vyb25rYWlcIDsKK+aLmOe9ruaJgCA+IGtvdWNoaXNob1wgOwor5Lqk5riJ5ZOhID4ga291c2hvdWluXCA7CivlirTlvbnloLQgPiByb3Vla2lqb3VcIDsKK+mVt+Wwvum2jyA+IG5hZ2FvZG9yaVwgOwor5rC06YqA54GvID4gc3VpZ2ludG91XCA7CivkuLvmiJDliIYgPiBzaHVzZWlidW5cIDsKK+S/rui+nuazlSA+IHNodXVqaWhvdVwgOwor5Y2T6Kmx5LyaID4gdGFrdXdha2FpXCA7CivmiYvlt6XoirggPiBzaHVrb3VnZWlcIDsKK+aWmeeQhuazlSA+IHJ5b3VyaWhvdVwgOwor5om/6KqN5ZuzID4gc2hvdW5pbnp1XCA7CivmnKzls7bkurogPiBob250b3VqaW5cIDsKK+aBkuW4uOaApyA+IGtvdWpvdXNlaVwgOwor6ZW35bC+6bOlID4gbmFnYW9kb3JpXCA7CivntYTnuZTljJYgPiBzb3NoaWtpa2FcIDsKK+W+oeaWsOmAoCA+IGdvc2hpbnpvdVwgOwor5Lm+6Zu75rGgID4ga2FuZGVuY2hpXCA7Civoh6rkvZzovrIgPiBqaXNha3Vub3VcIDsKK+WItuepuuaoqSA+IHNlaWt1dWtlblwgOwor6Iqx5qSw6I+cID4gaGFuYXlhc2FpXCA7Civnq7bmioDloLQgPiBreW91Z2lqb3VcIDsKK+aXp+WItuW6piA+IGt5dXVzZWlkb1wgOwor5YWx5ZKM5pS/ID4ga3lvdXdhc2VpXCA7CivlsIrnjovlrrYgPiBzb24nJ25vdWthXCA7CivpgYXpgLLlhZAgPiBjaGlzaGluamlcIDsKK+aghOmkiuWtpiA+IGVpeW91Z2FrdVwgOwor5LiN5LuL5YWlID4gZnVrYWlueXV1XCA7CivmipXmiYvmiKYgPiB0b3VzaHVzZW5cIDsKK+eKrOW8teWtkCA+IGludWhhcmlrb1wgOwor6YCB6Zu757eaID4gc291ZGVuc2VuXCA7CivljbXpu4TlmqIgPiByYW4nJ291bm91XCA7CivmsJflnKfoqIggPiBraWF0c3VrZWlcIDsKK+mnhuiZq+WJpCA+IGt1Y2h1dXphaVwgOwor54qs6L+954mpID4gaW51b3Vtb25vXCA7CivkuInmlpHptokgPiBtaWZ1dXp1cmFcIDsKK+aLjeWtkOacqCA+IGh5b3VzaGlnaVwgOwor5aSa5q+b5L2cID4gdGFtb3VzYWt1XCA7CivmiYvojbfniakgPiB0ZW5pbW90c3VcIDsKK+WHoOW4s+mdoiA+IGtpY2hvdW1lblwgOwor5qih56+E55qEID4gbW9oYW50ZWtpXCA7CivnrYboqJjluLMgPiBoaWtraWNob3VcIDsKK+mVt+i3nemboiA+IGNob3VreW9yaVwgOwor576O5bCR5bm0ID4gYmlzaG91bmVuXCA7Civkub7nh6XmnZAgPiBrYW5zb3V6YWlcIDsKK+eUn+eUo+iAhSA+IHNlaXNhbnNoYVwgOwor5LiN5pyN5b6TID4gZnVmdWt1anV1XCA7CivmnKzmoLzmtL4gPiBob25rYWt1aGFcIDsKK+WOn+WtkOaIpiA+IGdlbnNoaXNlblwgOwor5LiN5aSJ6YePID4gZnVoZW5yeW91XCA7CivpoZTpprTmn5MgPiBrYW9uYWppbWlcIDsKK+iQveiRieaouSA+IHJha3V5b3VqdVwgOwor5LiJ6aCt562LID4gc2FudG91a2luXCA7Civku6PoqIDogIUgPiBkYWlnZW5zaGFcIDsKK+aPrueZuuW6piA+IGtpaGF0c3Vkb1wgOwor5aSn6Ieq54S2ID4gZGFpc2hpemVuXCA7CivkuI3mmYLnnYAgPiBmdWppY2hha3VcIDsKK+e1seWItue3miA+IHRvdXNlaXNlblwgOwor5YWJ6Zu75rGgID4ga291ZGVuY2hpXCA7CivoirHkvpvppIogPiBoYW5ha3V5b3VcIDsKK+mbo+WVj+mhjCA+IG5hbm1vbmRhaVwgOwor57aZ6Zu76Y21ID4ga2VpZGVua2VuXCA7CivmqZ/morDlraYgPiBraWthaWdha3VcIDsKK+WppuS6uueXhSA+IGZ1amluYnlvdVwgOwor5ZCM5aW96ICFID4gZG91a291c2hhXCA7Civlgb3lporlqKAgPiBnaW5pbnNoaW5cIDsKK+eBq+e4hOmKgyA+IGhpbmF3YWp1dVwgOwor5YmN5YuY5a6aID4gbWFla2Fuam91XCA7Civml6LnmbrooaggPiBraWhhcHB5b3VcIDsKK+eUsueKtuiFuiA+IGtvdWpvdXNlblwgOwor56i95Y+k5LqLID4ga2Vpa29nb3RvXCA7CivmiJDmlofms5UgPiBzZWlidW5ob3VcIDsKK+imj+agvOWTgSA+IGtpa2FrdWhpblwgOwor5LuV5LqL5pelID4gc2hpZ290b2JpXCA7CivliIbkuI7nqI4gPiBidW4nJ3lvemVpXCA7Civnmb3nhKHlnqIgPiBzaGlyb211a3VcIDsKK+S6jOetieizniA+IG5pdG91c2hvdVwgOwor5a6a5LyR5pelID4gdGVpa3l1dWJpXCA7Civnmb3nga/msrkgPiBoYWt1dG91eXVcIDsKK+mBi+i7ouW4rSA+IHVudGVuc2VraVwgOwor5YWs5rCR6aSoID4ga291bWlua2FuXCA7Civnr6TovrLlrrYgPiB0b2t1bm91a2FcIDsKK+iMieiOieiKsSA+IG1hdHN1cmlrYVwgOwor5Lq65bel5rivID4gamlua291a291XCA7Civpq5jpmbXlnJ8gPiBrb3VyeW91ZG9cIDsKK+aEn+WFieadvyA+IGthbmtvdWJhblwgOwor5LiJ5LmX5qC5ID4gc2Fuam91a29uXCA7CivnlLfpoqjlkYIgPiBvdG9rb2J1cm9cIDsKK+Wls+mDjuiKsSA+IG9taW5hZXNoaVwgOwor5rue57SN6ICFID4gdGFpbm91c2hhXCA7CivkvJ3pgZPluKsgPiBkZW5kb3VzaGlcIDsKK+W/nOWPrOWFtSA+IG91c2hvdWhlaVwgOwor6KSH5Y2B5a2XID4gZnVrdWp1dWppXCA7Civlho3mp4vmiJAgPiBzYWlrb3VzZWlcIDsKK+acieauteiAhSA+IHl1dWRhbnNoYVwgOwor5Y2Y6KGj54mpID4gaGl0b2Vtb25vXCA7Civopo/moLzliKQgPiBraWtha3ViYW5cIDsKK+esrOS4ieiAhSA+IGRhaXNhbnNoYVwgOwor5L2T5pON5aC0ID4gdGFpc291am91XCA7CivkuLvmtYHmtL4gPiBzaHVyeXV1aGFcIDsKK+W6g+WgseWumCA+IGtvdWhvdWthblwgOwor5Lq65bel5rGgID4gamlua291aWtlXCA7Civlj6Pok4vlnoIgPiBrb3VnYWlzdWlcIDsKK+mHkeWJm+eggiA+IGtvbmdvdXNoYVwgOwor5Y2B5LiJ5aScID4ganV1c2FuJyd5YVwgOwor5aSn5a2m6ZmiID4gZGFpZ2FrdWluXCA7CivkuZfnlKjou4ogPiBqb3V5b3VzaGFcIDsKK+S4jeaYjueiuiA+IGZ1bWVpa2FrdVwgOwor6JyD5rCX5qW8ID4gc2hpbmtpcm91XCA7CivopIfokYnmqZ8gPiBmdWt1eW91a2lcIDsKK+S6jOetieimqiA+IG5pdG91c2hpblwgOwor6I2J56u26aasID4ga3VzYWtlaWJhXCA7CivpmqDlhYPosYYgPiBpbmdlbm1hbWVcIDsKK+e0r+S5l+aguSA+IHJ1aWpvdWtvblwgOwor5p2x5rSL5Lq6ID4gdG91eW91amluXCA7Civnq7bmioDkvJogPiBreW91Z2lrYWlcIDsKK+WLp+iqmOWToSA+IGthbicneXV1aW5cIDsKK+iAgeWphuW/gyA+IHJvdWJhc2hpblwgOwor5YK15qip6ICFID4gc2Fpa2Vuc2hhXCA7CivnrKzkuIDnvqkgPiBkYWlpY2hpZ2lcIDsKK+Wcp+WAkueahCA+IGF0dG91dGVraVwgOwor5LiN5piO556tID4gZnVtZWlyeW91XCA7CivmlL7pm7vnrqEgPiBob3VkZW5rYW5cIDsKK+WJjei6q+mggyA+IG1hZW1pZ29yb1wgOwor5bCR5pWw5rS+ID4gc2hvdXN1dWhhXCA7CivnibnmjZzpg6ggPiB0b2t1c291YnVcIDsKK+iqv+mmrOW4qyA+IGNob3ViYXNoaVwgOwor55CG6KuW55qEID4gcmlyb250ZWtpXCA7Civpo7LmsLTph48gPiBpbnN1aXJ5b3VcIDsKK+iqv+eQhuazlSA+IGNob3VyaWhvdVwgOwor57Sv54qv6ICFID4gcnVpaGFuc2hhXCA7Civlpb3pg73lkIggPiBrb3V0c3Vnb3VcIDsKK+WuieWFqOWfnyA+IGFuemVuJydpa2lcIDsKK+iZmuaghOW/gyA+IGt5b2Vpc2hpblwgOwor5a6a5pyf55qEID4gdGVpa2l0ZWtpXCA7Civoqo3lj6/oqLwgPiBuaW5rYXNob3VcIDsKK+S/oeW/g+WutiA+IHNoaW5qaW5rYVwgOwor5by35aem572qID4gZ291a2FuemFpXCA7CivmlZnmjojkvJogPiBreW91anVrYWlcIDsKK+mAo+WQiOi7jSA+IHJlbmdvdWd1blwgOwor6YeN5ZCI5L2TID4ganV1Z291dGFpXCA7CivliqDomZDmhJsgPiBrYWd5YWt1YWlcIDsKK+ays+W3neaVtyA+IGthc2VuamlraVwgOwor6LuN6ZqK6JGsID4gZ3VudGFpc291XCA7CivmlbDlubTplpMgPiBzdXVuZW5rYW5cIDsKK+i7veawl+eQgyA+IGtlaWtpa3l1dVwgOwor6Z2S5rWu6I2JID4gYW91a2lrdXNhXCA7Civlronmpb3mrbsgPiBhbnJha3VzaGlcIDsKK+mHkeW5s+ezliA+IGtvbnBlaXRvdVwgOwor5a6a5L2P5ZywID4gdGVpanV1Y2hpXCA7Civph5HovKrpmpsgPiBrb25yaW56YWlcIDsKK+aWmeeQhuW6lyA+IHJ5b3VyaXRlblwgOwor6LK/5piT6aKoID4gYm91ZWtpZnV1XCA7Civkurrlt6XmnpcgPiBqaW5rb3VyaW5cIDsKK+a1t+mBi+alrSA+IGthaXVuZ3lvdVwgOwor6KGj6aOf5L2PID4gaXNob2t1anV1XCA7Civlr53lhbfpoZ4gPiBzaGluZ3VydWlcIDsKK+adseWNl+adsSA+IHRvdW5hbnRvdVwgOwor55Sy5p2/5ZOhID4ga291aGFuJydpblwgOwor54++5Luj5Y+yID4gZ2VuZGFpc2hpXCA7CivmoLnoj5zpoZ4gPiBrb25zYWlydWlcIDsKK+WumuS+i+S8miA+IHRlaXJlaWthaVwgOwor5rG66ZeY54q2ID4ga2V0dG91am91XCA7CivompXljbXntJkgPiBzYW5yYW5zaGlcIDsKK+WkluiSmeWPpCA+IHNvdG9tb3Vrb1wgOwor6LuK5Lih5YyWID4gc2hhcnlvdWthXCA7CivmhJ/lhYnmgKcgPiBrYW5rb3VzZWlcIDsKK+esrOS4gOeroCA+IGRhaWlzc2hvdVwgOwor6Ieo55WM54K5ID4gcmlua2FpdGVuXCA7CivllYblo7LmsJcgPiBzaG91YmFpZ2lcIDsKK+WbveaGsuazlSA+IGtva2tlbnBvdVwgOwor5Lih6Zmb5LiLID4gcnlvdWhlaWthXCA7CivpmZDlrprniYggPiBnZW50ZWliYW5cIDsKK+WJjei7iui8qiA+IHplbnNoYXJpblwgOwor6ZuE54mb57OeID4gb3VzaGlrdXNvXCA7CivkuI3lpornl4cgPiBmdW5pbnNob3VcIDsKK+Wkiea1geWZqCA+IGhlbnJ5dXVraVwgOwor6Yed5L6b6aSKID4gaGFyaWt1eW91XCA7Civlvq7oppbnmoQgPiBiaXNoaXRla2lcIDsKK+ebo+imluWhlCA+IGthbnNoaXRvdVwgOwor5Y2g5oug5ZywID4gc2Vua3lvY2hpXCA7CivmjIflkJHmgKcgPiBzaGlrb3VzZWlcIDsKK+S4gOS6uueUqCA+IGhpdG9yaXlvdVwgOwor6Kq/6aas5aC0ID4gY2hvdWJham91XCA7Civlho3ovLjlhaUgPiBzYWl5dW55dXVcIDsKK+e2v+a0peimiyA+IHdhdGF0c3VtaVwgOwor5YSq6Imv5YWQID4geXV1cnlvdWppXCA7Civmta7li5XnpaggPiBmdWRvdWh5b3VcIDsKK+WFiOWkqeaApyA+IHNlbnRlbnNlaVwgOwor5b2i5oiQ5bGkID4ga2Vpc2Vpc291XCA7CivluKvnr4Tku6MgPiBzaGloYW5kYWlcIDsKK+S8keatouespiA+IGt5dXVzaGlmdVwgOwor5LiN6Z2i55uuID4gZnVtZW5tb2t1XCA7CivlsI/ns6Dpm6ggPiBrb251a2FhbWVcIDsKK+acrOS6iOeulyA+IGhvbicneW9zYW5cIDsKK+aMh+WNl+eVqiA+IHNoaW5hbmJhblwgOwor5ouh5aOw5ZmoID4ga2FrdXNlaWtpXCA7Civoh6rnlLHmpa0gPiBqaXl1dWd5b3VcIDsKK+emgei8uOWTgSA+IGtpbicneXVoaW5cIDsKK+WPuOS8muiAhSA+IHNoaWthaXNoYVwgOwor5oqV56i/5qyEID4gdG91a291cmFuXCA7CivmjL/oqbHnmoQgPiBzb3V3YXRla2lcIDsKK+mBk+S4reiomCA+IGRvdWNodXVraVwgOwor5Y2K5aGp5rC0ID4gaGFuJydlbnN1aVwgOwor5o6S5LuW55qEID4gaGFpdGF0ZWtpXCA7CivlpKfohbjngo4gPiBkYWljaG91ZW5cIDsKK+WwvOazleW4qyA+IGFtYWhvdXNoaVwgOwor5a6a572u57ayID4gdGVpY2hpYW1pXCA7Civoirjog73nlYwgPiBnZWlub3VrYWlcIDsKK+WNiua/gemfsyA+IGhhbmRha3VvblwgOwor6YWN566h5belID4gaGFpa2Fua291XCA7Civnj77ku6PkurogPiBnZW5kYWlqaW5cIDsKK+i+sua8geawkSA+IG5vdWd5b21pblwgOwor5aWz5oCn5a2mID4gam9zZWlnYWt1XCA7Civkub7nh6XlnLAgPiBrYW5zb3VjaGlcIDsKK+WIhumhnuazlSA+IGJ1bnJ1aWhvdVwgOwor55+z6IaP5YOPID4gc2Vra291em91XCA7CivlvbHmrabogIUgPiBrYWdlbXVzaGFcIDsKK+a0u+eJiOacrCA+IGthcHBhbmJvblwgOwor5LuV5LqL5aC0ID4gc2hpZ290b2JhXCA7CivlqabkurrmnI0gPiBmdWppbmZ1a3VcIDsKK+WvneW/g+WcsCA+IG5lZ29rb2NoaVwgOwor57W15be754mpID4gZW1ha2ltb25vXCA7CivkuI3mlpnnsKEgPiBmdXJ5b3VrZW5cIDsKK+WMluefs+WxpCA+IGthc2VraXNvdVwgOwor5pmp6aSQ5LyaID4gYmFuc2Fua2FpXCA7Civku5XmlL7poYwgPiBzaGlob3VkYWlcIDsKK+WFseWSjOWItiA+IGt5b3V3YXNlaVwgOwor5qGI5YaF54q2ID4gYW4nJ25haWpvdVwgOwor5aSa5YWD55qEID4gdGFnZW50ZWtpXCA7CivliLbmtbfmqKkgPiBzZWlrYWlrZW5cIDsKK+S6pOmFjeeoriA+IGtvdWhhaXNodVwgOwor5Zyo5L2P6ICFID4gemFpanV1c2hhXCA7CivmiJDnhp/mnJ8gPiBzZWlqdWt1a2lcIDsKK+WFseWSjOWFmiA+IGt5b3V3YXRvdVwgOwor5bmz5pa55qC5ID4gaGVpaG91a29uXCA7Civoq5zloLHlk6EgPiBjaG91aG91aW5cIDsKK+iIiOWlruWJpCA+IGtvdWZ1bnphaVwgOwor5YWI6KaL6ICFID4gc2Vua2Vuc2hhXCA7CivoiKrnqbrliLggPiBrb3VrdXVrZW5cIDsKK+WFiembu+WtkCA+IGtvdWRlbnNoaVwgOwor5aOy5Zu95aW0ID4gYmFpa29rdWRvXCA7CivnuYHliIbmlbAgPiBoYW5idW5zdXVcIDsKK+aAp+ihjOWLlSA+IHNlaWtvdWRvdVwgOwor6YqA6KGM5Yi4ID4gZ2lua291a2VuXCA7CivkuIfkuIfmrbMgPiBiYW5iYW56YWlcIDsKK+WBnOiIueWgtCA+IHRlaXNlbmpvdVwgOwor5ZiG6aGY5pu4ID4gdGFuZ2Fuc2hvXCA7Civlho3nlJ/nlKMgPiBzYWlzZWlzYW5cIDsKK+WcsOWvvuWcsCA+IGNoaXRhaWNoaVwgOwor5paH5L2T6KuWID4gYnVudGFpcm9uXCA7Civoqr/mn7vlm6MgPiBjaG91c2FkYW5cIDsKK+WNmOihjOacrCA+IHRhbmtvdWJvblwgOwor5bCP5aSc5puyID4gc2F5b2t5b2t1XCA7Civlh7rkuJbplpMgPiBzaHVzc2VrZW5cIDsKK+WNmOihjOabuCA+IHRhbmtvdXNob1wgOwor5LiA5pmC6ZaTID4gaWNoaWppa2FuXCA7CivmuKnms4npg7cgPiBvbnNlbmt5b3VcIDsKK+acieWQjeS6uiA+IHl1dW1laWppblwgOwor5b6M55Sy5p2/ID4ga291a2FucGFuXCA7CivlvLHkvZPljJYgPiBqYWt1dGFpa2FcIDsKK+e1jOa4iOmdoiA+IGtlaXphaW1lblwgOwor5L+u6aiT6YGTID4gc2h1Z2VuZG91XCA7CivlvoDnlJ/pmpsgPiBvdWpvdWdpd2FcIDsKK+aui+WtmOiAhSA+IHphbnpvbnNoYVwgOwor6Iiq56m65L6/ID4ga291a3V1YmluXCA7CivmoLjmraboo4UgPiBrYWt1YnVzb3VcIDsKK+Wfi+iUtemHkSA+IG1haXpvdWtpblwgOwor5a2k56uL5YyWID4ga29yaXRzdWthXCA7CivogZblrrbml48gPiBzZWlrYXpva3VcIDsKK+S5vueHpeWJpCA+IGthbnNvdXphaVwgOwor5rOl54Kt5ZywID4gZGVpdGFuY2hpXCA7CivlpJbovKroiLkgPiBnYWlyaW5zZW5cIDsKK+ikh+WIqeazlSA+IGZ1a3VyaWhvdVwgOwor6JK455WZ5ZmoID4gam91cnl1dWtpXCA7CivpkZHlrprmm7ggPiBrYW50ZWlzaG9cIDsKK+ijveawt+apnyA+IHNlaWh5b3VraVwgOwor5be75a+/5Y+4ID4gbWFraXp1c2hpXCA7CivmtojosrvosqEgPiBzaG91aGl6YWlcIDsKK+iRl+S9nOWutiA+IGNob3Nha3VrYVwgOwor5biC6LKp5ZOBID4gc2hpaGFuaGluXCA7Civlt7vpoK3oqIAgPiBrYW50b3VnZW5cIDsKK+iqv+eQhuW4qyA+IGNob3VyaXNoaVwgOwor55yf5qGR55OcID4gbWFrdXdhdXJpXCA7Civpmo/lvpPogIUgPiB6dWlqdXVzaGFcIDsKK+S4gOWvuOWFiCA+IGlzc3Vuc2FraVwgOwor5paH5a2m6YOoID4gYnVuZ2FrdWJ1XCA7CivkuojntITliLYgPiB5b3lha3VzZWlcIDsKK+e3mumAn+W6piA+IHNlbnNva3Vkb1wgOwor5bmz6Z2i5b2iID4gaGVpbWVua2VpXCA7CivopIfmr5TkvosgPiBmdWt1aGlyZWlcIDsKK+aVo+awtOi7iiA+IHNhbnN1aXNoYVwgOwor5LiA5pmC6YeRID4gaWNoaWppa2luXCA7CivliY3lubTluqYgPiB6ZW4nJ25lbmRvXCA7CivnmbrooYzogIUgPiBoYWtrb3VzaGFcIDsKK+WBnOeVmeaJgCA+IHRlaXJ5dXVqb1wgOwor5a6u5Z+O55yMID4gbWl5YWdpa2VuXCA7CivliY3liY3lm54gPiB6ZW56ZW5rYWlcIDsKK+eHl+W+s+WIqSA+IGthbmRva3VyaVwgOwor5q275YiR5aC0ID4gc2hpa2Vpam91XCA7Civlt7vlrZDmnKwgPiBrYW5zaGlob25cIDsKK+eUuuitsOS8miA+IGNob3VnaWthaVwgOwor5Lq655Sf6KazID4gamluc2Vpa2FuXCA7CivnnJ/nj6Dosp0gPiBzaGluanVnYWlcIDsKK+S6rOmDveW4giA+IGt5b3V0b3NoaVwgOwor6Zuo5Y+w6aKoID4gYW1ldGFpZnV1XCA7Civoh6rnlLHlvaIgPiBqaXl1dWdhdGFcIDsKK+WFjeioseWItiA+IG1lbmt5b3NlaVwgOwor6ZuR5aCx5qyEID4gemFwcG91cmFuXCA7CivmhJvlhZrlv4MgPiBhaXRvdXNoaW5cIDsKK+mYsuatouazlSA+IGJvdXNoaWhvdVwgOwor6YG45oyZ5rOVID4gc2Vua3lvaG91XCA7CivlpKnkupXoo48gPiB0ZW5qb3V1cmFcIDsKK+WNiumZsOW9sSA+IGhhbicnaW4nJ2VpXCA7CivmnIDph43ngrkgPiBzYWlqdXV0ZW5cIDsKK+S4gOWvvuS4gCA+IGl0dGFpaWNoaVwgOwor6YG45oyZ5rCRID4gc2Vua3lvbWluXCA7CivmlZnllIbogIUgPiBreW91c2FzaGFcIDsKK+aWmeeQhuS6uiA+IHJ5b3VyaW5pblwgOwor6Ieq55Sx5bitID4gaml5dXVzZWtpXCA7CivmnIjliIroqowgPiBnZWtrYW5zaGlcIDsKK+S4jeeGn+e3tCA+IGZ1anVrdXJlblwgOwor5Y+k5YW455qEID4ga290ZW50ZWtpXCA7CivlpInmrbvogIUgPiBoZW5zaGlzaGFcIDsKK+acrOagvOWMliA+IGhvbmtha3VrYVwgOwor5LuV5LiK5belID4gc2hpYWdla291XCA7CivniaHkuLnmnY8gPiBib3Rhbmt5b3VcIDsKK+W5s+aWueW9oiA+IGhlaWhvdWtlaVwgOwor5Yq05YON6ICFID4gcm91ZG91c2hhXCA7CivlpInljJbnkIMgPiBoZW5rYWt5dXVcIDsKK+mBoOmalOimliA+IGVua2FrdXNoaVwgOwor6ZuR6KiY5bizID4gemFra2ljaG91XCA7CivlnKjmoKHnlJ8gPiB6YWlrb3VzZWlcIDsKK+aRqeaTpumfsyA+IG1hc2F0c3VvblwgOwor6JuN54OP6LOKID4gaG90YXJ1aWthXCA7Civlho3nlJ/ms5UgPiBzYWlzZWlob3VcIDsKK+WkmueZuuapnyA+IHRhaGF0c3VraVwgOwor5rS754mI5bGLID4ga2FwcGFuJyd5YVwgOwor6YeR5Ymb5omLID4ga29uZ291c2h1XCA7CivooqvlrrPpoY0gPiBoaWdhaWdha3VcIDsKK+mBuOaMmeaoqSA+IHNlbmt5b2tlblwgOwor5Z+65pys57WmID4ga2lob25reXV1XCA7CivpnZ7ph5HlsZ4gPiBoaWtpbnpva3VcIDsKK+eMqeeMqee3iyA+IHNob3Vqb3VoaVwgOwor5Zue5pWZ5b6SID4ga2Fpa3lvdXRvXCA7CivmjIfnpLrlhYggPiBzaGlqaXNha2lcIDsKK+WCmeW/mOmMsiA+IGJpYm91cm9rdVwgOwor56CC57OW6buNID4gc2F0b3VraWJpXCA7CivmoYjlhoXmm7ggPiBhbicnbmFpc2hvXCA7Civlip/lirTph5EgPiBrb3Vyb3VraW5cIDsKK+iiq+W3ruWIpSA+IGhpc2FiZXRzdVwgOwor55eY55eV6Z2iID4gYWJhdGF6dXJhXCA7CivmnLHmlofph5EgPiBzaHVidW5raW5cIDsKK+S4jeisueaFjiA+IGZ1a2luc2hpblwgOwor6IKd56Gs5aSJID4ga2Fua291aGVuXCA7CivmnKvmnJ/nmoQgPiBtYWtraXRla2lcIDsKK+ekvOWlieWFrCA+IHJlaWJvdWtvdVwgOwor5Y2U5oqA6ICFID4ga3lvdWdpc2hhXCA7CivlpJrotrPpoZ4gPiB0YXNva3VydWlcIDsKK+elnuenmOaApyA+IHNoaW5waXNlaVwgOwor5rK46aiw54K5ID4gZnV0dG91dGVuXCA7CivppIrprZrmsaAgPiB5b3VneW9jaGlcIDsKK+mtlOazleeahCA+IG1haG91dGVraVwgOwor6KO95rC35omAID4gc2VpaHlvdWpvXCA7CivplqLopb/lvIEgPiBrYW5zYWliZW5cIDsKK+WFq+WNg+iNiSA+IHlhY2hpZ3VzYVwgOwor6YGT5Lqk5rOVID4gZG91a291aG91XCA7Civph47oj5zmsYEgPiB5YXNhaWppcnVcIDsKK+aWoeaXi+aWmSA+IGFzc2VucnlvdVwgOwor6Iiq5rW35aOrID4ga291a2Fpc2hpXCA7Civmta7li5XmoKogPiBmdWRvdWthYnVcIDsKK+a3t+S6pOaelyA+IGtvbmtvdXJpblwgOwor5qih56+E5ZuaID4gbW9oYW5zaHV1XCA7CivorJvnvqnpjLIgPiBrb3VnaXJva3VcIDsKK+eUn+WtmOiAhSA+IHNlaXpvbnNoYVwgOwor5LiN6Kys5oCnID4gZnVieXV1c2VpXCA7CivlsI7pm7vmgKcgPiBkb3VkZW5zZWlcIDsKK+aUuemdqeahiCA+IGthaWtha3VhblwgOwor5rOV5pS55q2jID4gaG91a2Fpc2VpXCA7CivnlJ/nlKPmgKcgPiBzZWlzYW5zZWlcIDsKK+S4iuS4reS4iyA+IGpvdWNodXVnZVwgOwor57Wm5rC05omAID4ga3l1dXN1aWpvXCA7CivnjJznlpHlv4MgPiBzYWlnaXNoaW5cIDsKK+S4jeiqv+azlSA+IGJ1Y2hvdWhvdVwgOwor5Y+X5YuV55qEID4ganVkb3V0ZWtpXCA7Civoh6rnlLHlnosgPiBqaXl1dWdhdGFcIDsKK+iqv+eQhuWPsCA+IGNob3VyaWRhaVwgOwor56m66ZaR5ZywID4ga3V1a2FuY2hpXCA7CivlirTlg43npa0gPiByb3Vkb3VzYWlcIDsKK+WGjeadpemAsSA+IHNhcmFpc2h1dVwgOwor5Luj6KGo6YOoID4gZGFpaHlvdWJ1XCA7Civlg4XlsJHlt64gPiBraW5zaG91c2FcIDsKK+WRqOacn+aApyA+IHNodXVraXNlaVwgOwor6aOb6KGM5pyNID4gaGlrb3VmdWt1XCA7CivkuI3nibnlrpogPiBmdXRva3V0ZWlcIDsKK+ihqOmdouWMliA+IGh5b3VtZW5rYVwgOwor5biC5pyJ5ZywID4gc2hpeXV1Y2hpXCA7CivmqJnmupboqp4gPiBoeW91anVuZ29cIDsKK+awtOW5s+mdoiA+IHN1aWhlaW1lblwgOwor5Lqk6YCa6LevID4ga291dHN1dXJvXCA7CivmtojosrvogIUgPiBzaG91aGlzaGFcIDsKK+WPpOmBk+WFtyA+IGZ1cnVkb3VndVwgOwor5Z+65pys55qEID4ga2lob250ZWtpXCA7CivojYnlm6PlrZAgPiBrdXNhZGFuZ29cIDsKK+ecn+ePoOiJsiA+IHNoaW5qdWlyb1wgOwor57Wx5bil5qipID4gdG91c3Vpa2VuXCA7Civnt7Tnv5LmqZ8gPiByZW5zaHV1a2lcIDsKK+aYh+mZjeiItSA+IHNob3Vrb3VkYVwgOwor5YW15bqr55yMID4gaHlvdWdva2VuXCA7CivlhazmtbfkuIogPiBrb3VrYWlqb3VcIDsKK+a/gOaIpuWMuiA+IGdla2lzZW5rdVwgOwor5YSA56S855qEID4gZ2lyZWl0ZWtpXCA7CivmnInlubPns5YgPiBhcnVoZWl0b3VcIDsKK+S6pOmAmuiyuyA+IGtvdXRzdXVoaVwgOwor6YeR6a2a6I2JID4ga2luZ3lvc291XCA7CivnnYDngavngrkgPiBjaGFra2F0ZW5cIDsKK+mBuOaMmeaIpiA+IHNlbmt5b3NlblwgOwor5a6X5Li75qipID4gc291c2h1a2VuXCA7CivmsLTphbjmoLkgPiBzdWlzYW5rb25cIDsKK+i1pOWNgeWtlyA+IHNla2lqdXVqaVwgOwor6JOE6Z+z5qmfID4gY2hpa3VvbmtpXCA7Civoh6rlsIrlv4MgPiBqaXNvbnNoaW5cIDsKK+ihqOiomOazlSA+IGh5b3VraWhvdVwgOwor6Zyy5aSp5ZWGID4gcm90ZW5zaG91XCA7CivkvJHlu7fml6UgPiBreXV1dGVpYmlcIDsKK+mjsumFkueZliA+IGluc2h1aGVraVwgOwor5LiA5paJ6auYID4gaXNzZWlkYWthXCA7Civlh6bliJHlj7AgPiBzaG9rZWlkYWlcIDsKK+WGt+aIv+i7iiA+IHJlaWJvdXNoYVwgOwor5qSc55ar5omAID4ga2VuJydla2lqb1wgOwor54Wn5bqm6KiIID4gc2hvdWRva2VpXCA7Civlj47nqI7lkI8gPiBzaHV1emVpcmlcIDsKK+WWieiHquaFoiA+IG5vZG9qaW1hblwgOwor6YeR55yL5p2/ID4ga2lua2FuYmFuXCA7CivmlaPlvL7pioMgPiBzYW5kYW5qdXVcIDsKK+Wfuemkiua2siA+IGJhaXlvdWVraVwgOwor5aSp54uX6aKoID4gdGVuZ3VrYXplXCA7CivkuIDmnKzmnYkgPiBpcHBvbnN1Z2lcIDsKK+a4rOW+ruioiCA+IHNva3ViaWtlaVwgOwor6aKo6Ie05p6XID4gZnV1Y2hpcmluXCA7CivlnLDnkIblraYgPiBjaGlyaWdha3VcIDsKK+e+jumjn+WutiA+IGJpc2hva3VrYVwgOwor5bC/6YGT54KOID4gbnlvdWRvdWVuXCA7CivonrPonoLmi7MgPiB0b3Vyb3VrZW5cIDsKK+iqv+eQhuS6uiA+IGNob3VyaW5pblwgOwor5Zar54WZ5omAID4ga2l0c3VlbmpvXCA7CivmmYLliIbmmYIgPiBqaWJ1bmRva2lcIDsKK+WFq+mHjeahnCA+IHlhZXpha3VyYVwgOwor5Y2X6Juu6Ii5ID4gbmFuYmFuc2VuXCA7CivosYzosYbosYYgPiBlbmRvdW1hbWVcIDsKK+WbnuaVsOWIuCA+IGthaXN1dWtlblwgOwor6KO96YCg6ICFID4gc2Vpem91c2hhXCA7Civph43lvbnkvJogPiBqdXV5YWtrYWlcIDsKK+WMl+asp+S6uiA+IGhva3VvdWppblwgOwor5LiA5Lq65a2QID4gaGl0b3Jpa2tvXCA7CivmrbvnlJ/oprMgPiBzaGlzZWlrYW5cIDsKK+eCreeWveeXhSA+IHRhbnNvYnlvdVwgOwor55m95Zyw5ZuzID4gaGFrdWNoaXp1XCA7CivpvIjnlLLoibIgPiBiZWtrb3Vpcm9cIDsKK+S5l+i7iuWIuCA+IGpvdXNoYWtlblwgOwor5ris56iL5ZmoID4gc29rdXRlaWtpXCA7CivmoYjlhoXlrKIgPiBhbicnbmFpam91XCA7CivlhoboiJ7mm7IgPiBlbmJ1a3lva3VcIDsKK+a2iOiyu+eojiA+IHNob3VoaXplaVwgOwor5aOB5LiA6YeNID4ga2FiZWhpdG9lXCA7Civlm5vpnaLkvZMgPiBzaGltZW50YWlcIDsKK+WcqOadpee3miA+IHphaXJhaXNlblwgOwor5aSn55CG55+zID4gZGFpcmlzZWtpXCA7CivnlJ/nlKPlnLAgPiBzZWlzYW5jaGlcIDsKK+eJh+eUsOiIjiA+IGthdGFpbmFrYVwgOwor6KSH5YaZ5qmfID4gZnVrdXNoYWtpXCA7Civpoqjkv5fnlLsgPiBmdXV6b2t1Z2FcIDsKK+WBtOmdouWbsyA+IHNva3VtZW56dVwgOwor6KiA6Kqe5a2mID4gZ2VuZ29nYWt1XCA7Civlt6HoiKroiLkgPiBqdW5rb3VzZW5cIDsKK+WOn+Wni+aelyA+IGdlbnNoaXJpblwgOwor6Iez5LiK5qipID4gc2hpam91a2VuXCA7CivlsI/lo7LllYYgPiBrb3VyaXNob3VcIDsKK+e1seWItuWTgSA+IHRvdXNlaWhpblwgOwor56ys5LiA5a+pID4gZGFpaXNzaGluXCA7CivntIXmr5vkurogPiBrb3Vtb3VqaW5cIDsKK+ishOWGmeeJiCA+IHRvdXNoYWJhblwgOwor5o6n6Ki05a+pID4ga291c29zaGluXCA7CivkuK3lj6Tou4ogPiBjaHV1a29zaGFcIDsKK+aWsOe0gOWFgyA+IHNoaW5raWdlblwgOwor57e057+S5omAID4gcmVuc2h1dWpvXCA7Civnq4vmlrnmoLkgPiByaXBwb3Vrb25cIDsKK+efremfs+majiA+IHRhbicnb25rYWlcIDsKK+Wuo+iqk+abuCA+IHNlbnNlaXNob1wgOwor5LqM5ouN5a2QID4gbmlieW91c2hpXCA7CivlirTovrLlhZogPiByb3Vub3V0b3VcIDsKK+W9vOWyuOiKsSA+IGhpZ2FuYmFuYVwgOwor5b+g6a2C56KRID4gY2h1dWtvbmhpXCA7CivmnInlirnmgKcgPiB5dXVrb3VzZWlcIDsKK+S4ieaXpeaciCA+IG1pa2FkenVraVwgOwor55m65oyv5qmfID4gaGFzc2hpbmtpXCA7Civnt4/li5nluoEgPiBzb3VtdWNob3VcIDsKK+a1geihjOiqniA+IHJ5dXVrb3Vnb1wgOwor5YaF6a6u5Lq6ID4gbmFpc2VuamluXCA7CivnlJ/nkIbnmoQgPiBzZWlyaXRla2lcIDsKK+WQjeiqieaFviA+IG1laXlveW9rdVwgOwor5Yqq5Yqb5a62ID4gZG9yeW9rdWthXCA7CivlnKjmnaXnqK4gPiB6YWlyYWlzaHVcIDsKK+WKoOehq+azlSA+IGthcnl1dWhvdVwgOwor5aSn5a625pePID4gZGFpa2F6b2t1XCA7Civmma/mlZnlvpIgPiBrZWlreW91dG9cIDsKK+mrmOepjembsiA+IGtvdXNla2l1blwgOwor5LmX6Ii55Yi4ID4gam91c2Vua2VuXCA7Civlho3lr6nmn7sgPiBzYWlzaGluc2FcIDsKK+eUqOiqnumbhiA+IHlvdWdvc2h1dVwgOwor6LKg5YK36ICFID4gZnVzaG91c2hhXCA7CivlirTlg43ms5UgPiByb3Vkb3Vob3VcIDsKK+axjueUqOapnyA+IGhhbicneW91a2lcIDsKK+WQjeiqieW/gyA+IG1laXlvc2hpblwgOwor6ZGR5a6a5Lq6ID4ga2FudGVpbmluXCA7CivmipXnpajml6UgPiB0b3VoeW91YmlcIDsKK+WFiOihjOipniA+IHNlbmtvdXNoaVwgOwor54us5ryU5LyaID4gZG9rdWVua2FpXCA7Civpn7Ppn7vlraYgPiBvbicnaW5nYWt1XCA7Civlip/lirTogIUgPiBrb3Vyb3VzaGFcIDsKK+iEs+e0sOiDniA+IG5vdXNhaWJvdVwgOwor576O5paH6Kq/ID4gYmlidW5jaG91XCA7CivmmI7ntLDmm7ggPiBtZWlzYWlzaG9cIDsKK+eUt+aWh+WtlyA+IG90b2tvbW9qaVwgOwor57eP5YuY5a6aID4gc291a2Fuam91XCA7Civlm57opqfmnb8gPiBrYWlyYW5iYW5cIDsKK+S7u+WRveeKtiA+IG5pbm1laWpvdVwgOwor5LiK57SN6YeRID4gam91bm91a2luXCA7Civmi7fllY/lj7AgPiBnb3Vtb25kYWlcIDsKK+S4iuWlj+aWhyA+IGpvdXNvdWJ1blwgOwor6Ieq6LKs54K5ID4gamlzZWtpdGVuXCA7Civliqnnm6PnnaMgPiBqb2thbnRva3VcIDsKK+WHpueUn+iokyA+IHNob3NlaWt1blwgOwor5pys6Kmm6aiTID4gaG9uc2hpa2VuXCA7CivlpJbkv6Hpg6ggPiBnYWlzaGluYnVcIDsKK+S4gOS6uuWJjSA+IGhpdG9yaW1hZVwgOwor5Yq05YON5qipID4gcm91ZG91a2VuXCA7CivlnLDnkIPlhIAgPiBjaGlreXV1Z2lcIDsKK+WcsOS4iuaoqSA+IGNoaWpvdWtlblwgOwor6YeR5bGP6aKoID4ga2luYnlvdWJ1XCA7CivlsI7pm7vkvZMgPiBkb3VkZW50YWlcIDsKK+WFseebiuiyuyA+IGt5b3Vla2loaVwgOwor5LiN6KqN5om/ID4gZnVuaW5zaG91XCA7Civppqzpub/pnaIgPiBiYWthZHp1cmFcIDsKK+Wcn+eUqOazoiA+IGRveW91bmFtaVwgOwor57eP6YG45oyZID4gc291c2Vua3lvXCA7CivliLblvqHnm6QgPiBzZWlneW9iYW5cIDsKK+W/g+aEj+awlyA+IGtva29yb2lraVwgOwor6YeN5Yq05YONID4ganV1cm91ZG91XCA7CivmiYvmprTlvL4gPiB0ZXJ5dXVkYW5cIDsKK+S4gOaemuS4iiA+IGljaGltYWl1ZVwgOwor5aSp5LqV54GvID4gdGVuam91dG91XCA7CivppIrprZrloLQgPiB5b3VneW9qb3VcIDsKK+aKleelqOaJgCA+IHRvdWh5b3Vqb1wgOwor5bqn5qiZ57O7ID4gemFoeW91a2VpXCA7CivlhoblgJ/mrL4gPiBlbnNoYWtrYW5cIDsKK+e1tuWvvuirliA+IHpldHRhaXJvblwgOwor5o2V6Jmr57ayID4gaG9jaHV1YW1pXCA7Civlh7rmnaXmmJ8gPiBkZWtpYm9zaGlcIDsKK+iKseafs+eVjCA+IGthcnl1dWthaVwgOwor5YWs5rCR5qipID4ga291bWlua2VuXCA7CivlpoLkvZXoqLEgPiBpa2FiYWthcmlcIDsKK+a4heaVmeW+kiA+IHNlaWt5b3V0b1wgOwor57Sr5aSW57eaID4gc2hpZ2Fpc2VuXCA7CivlkIzlpb3kvJogPiBkb3Vrb3VrYWlcIDsKK+a0l+i7iuWgtCA+IHNlbnNoYWpvdVwgOwor5bGV5pyb6LuKID4gdGVuYm91c2hhXCA7Civmmpflj7fluLMgPiBhbmdvdWNob3VcIDsKK+W5jOmmrOi7iiA+IGhvcm9iYXNoYVwgOwor5aSn5LyB5qWtID4gZGFpa2lneW91XCA7Civlo7LnrJHlqaYgPiBiYWlzaG91ZnVcIDsKK+aOoeeCueiAhSA+IHNhaXRlbnNoYVwgOwor6ZaT6ZqZ5q+UID4ga2FuZ2VraWhpXCA7Civlo67ooYzkvJogPiBzb3Vrb3VrYWlcIDsKK+WGjeeUn+WTgSA+IHNhaXNlaWhpblwgOwor5YWs56S+5YK1ID4ga291c2hhc2FpXCA7CivmnKrmnaXlraYgPiBtaXJhaWdha3VcIDsKK+acq+Wni+e1giA+IHN1ZXNoaWp1dVwgOwor5r2c5rC06ImmID4gc2Vuc3Vpa2FuXCA7CivmsLTpgZPnrqEgPiBzdWlkb3VrYW5cIDsKK+WkqeeQhuaVmSA+IHRlbnJpa3lvdVwgOwor5LqI5oOz6auYID4geW9zb3VkYWthXCA7CivmiYvmn4TpoZQgPiB0ZWdhcmFnYW9cIDsKK+aJi+iKuOWTgSA+IHNodWdlaWhpblwgOwor5bmz6KGh6YyYID4gaGVpa291c3VpXCA7Civmipfmr5LntKAgPiBrb3Vkb2t1c29cIDsKK+Wkp+ixhueylSA+IGRhaXp1a2FzdVwgOwor56CU56m26LK7ID4ga2Vua3l1dWhpXCA7Civnn6Xog73niq8gPiBjaGlub3VoYW5cIDsKK+mBuOaJi+aoqSA+IHNlbnNodWtlblwgOwor6bqd6aaZ6bm/ID4gamFrb3VqaWthXCA7Civmtbflsrjnt5ogPiBrYWlnYW5zZW5cIDsKK+iyv+aYk+a4ryA+IGJvdWVraWtvdVwgOwor5pqm5bm05bqmID4gcmVraW5lbmRvXCA7CivlpKnlrq7lm7MgPiB0ZW5reXV1enVcIDsKK+acieaoqeiAhSA+IHl1dWtlbnNoYVwgOwor5L2T6KOB5LiKID4gdGVpc2Fpam91XCA7CivkvIrpgZTnlLcgPiBkYXRlb3Rva29cIDsKK+S8keWIiuaXpSA+IGt5dXVrYW5iaVwgOwor5Y+k5YW45a2mID4ga290ZW5nYWt1XCA7CivmlLnoqILniYggPiBrYWl0ZWliYW5cIDsKK+eUn+WtmOaoqSA+IHNlaXpvbmtlblwgOwor6Kmy5ZWP6aGMID4gZ2FpbW9uZGFpXCA7Civmmpflj7flraYgPiBhbmdvdWdha3VcIDsKK+S7o+ihjOiAhSA+IGRhaWtvdXNoYVwgOwor5YWr5Y2D5q2zID4geWFjaGl0b3NlXCA7Civlj6PnnJ/kvLwgPiBrdWNoaW1hbmVcIDsKK+WHuueJiOmDqCA+IHNodXBwYW5idVwgOwor6Kaz5ris5omAID4ga2Fuc29rdWpvXCA7CivntYzmuIjnlYwgPiBrZWl6YWlrYWlcIDsKK+S4jeeGseW/gyA+IGZ1bmVzc2hpblwgOwor5YWs5rOV5Lq6ID4ga291aG91amluXCA7CivkvJHnnKDmnJ8gPiBreXV1bWlua2lcIDsKK+WJr+e3j+eQhiA+IGZ1a3Vzb3VyaVwgOwor5Ly05aWP6ICFID4gYmFuc291c2hhXCA7Civlr77oq4fogIUgPiB0YWlkYW5zaGFcIDsKK+iyv+aYk+azlSA+IGJvdWVraWhvdVwgOwor5ZyS6YGK5LyaID4gZW4nJ3l1dWthaVwgOwor6LOb5oiQ6ICFID4gc2Fuc2Vpc2hhXCA7Civoirjog73kurogPiBnZWlub3VqaW5cIDsKK+WIhuitsuWcsCA+IGJ1bmpvdWNoaVwgOwor5bGI5YWJ5oCnID4ga3Vra291c2VpXCA7CivnnJ/nj6Dmub4gPiBzaGluanV3YW5cIDsKK+S6pOmAmuemjSA+IGtvdXRzdXVrYVwgOwor5oud54Gr5pWZID4gaGFpa2FreW91XCA7CivnrofmnaHmm7ggPiBrYWpvdWdha2lcIDsKK+mBuOaMmeS6uiA+IHNlbmt5b25pblwgOwor6YWq6L6y5a62ID4gcmFrdW5vdWthXCA7Civlt6Xoirjlk4EgPiBrb3VnZWloaW5cIDsKK+acquadpeWeiyA+IG1pcmFpZ2F0YVwgOwor5byB6bCT6aGeID4gYmVuc2FpcnVpXCA7CivnhKHos4fmoLwgPiBtdXNoaWtha3VcIDsKK+S7u+WRveaoqSA+IG5pbm1laWtlblwgOwor6Jmr5Z6C54KOID4gY2h1dXN1aWVuXCA7CivnoLTokL3miLggPiBnb3JvdHN1a2lcIDsKK+iThOmfs+WZqCA+IGNoaWt1b25raVwgOwor57ep5LiL6JasID4ga2FuZ2V5YWt1XCA7CivmnInmqZ/nmoQgPiB5dXVraXRla2lcIDsKK+ato+WPjeWvviA+IHNlaWhhbnRhaVwgOwor6Z2S5rW35Y6fID4gYW91bmFiYXJhXCA7Civlh7npnaLpj6EgPiBvdW1lbmt5b3VcIDsKK+WgsemBk+mZoyA+IGhvdWRvdWppblwgOwor5Yqj5Yui5oSfID4gcmVzc2Vpa2FuXCA7CivlvqHmlpnlnLAgPiBnb3J5b3VjaGlcIDsKK+ioiOeul+iAhSA+IGtlaXNhbnNoYVwgOwor54Sh6aeE5Y+jID4gbXVkYWd1Y2hpXCA7CivmnY7mib/mmakgPiByaXNob3ViYW5cIDsKK+emj+mfs+abuCA+IGZ1a3VpbnNob1wgOwor5YWr5Y2m5o6MID4gaGFra2VzaG91XCA7Civoh6rkuLvnmoQgPiBqaXNodXRla2lcIDsKK+mAsuatqeWFmiA+IHNoaW5wb3RvdVwgOwor55u45Y+N5oCnID4gc291aGFuc2VpXCA7Civog73li5XmhYsgPiBub3Vkb3V0YWlcIDsKK+WPuOS7pOWumCA+IHNoaXJlaWthblwgOwor5Zyw6ZyH6KiIID4gamlzaGlua2VpXCA7CivntJnkuIDph40gPiBrYW1paGl0b2VcIDsKK+awtOWKoOa4myA+IG1penVrYWdlblwgOwor5Ye654mI6LK7ID4gc2h1cHBhbmhpXCA7CivmnpzloLHogIUgPiBrYWhvdW1vbm9cIDsKK+aIkOmVt+acnyA+IHNlaWNob3VraVwgOwor5rWE5Zyf5pWZID4gam91ZG9reW91XCA7CivlpKnkupXmnb8gPiB0ZW5qb3VpdGFcIDsKK+mbhuWhteapnyA+IHNodXVqaW5raVwgOwor5YeM5rOi5oCnID4gcnlvdWhhc2VpXCA7Civlv6vnlLflrZAgPiBrYWlkYW5zaGlcIDsKK+WkqeeLl+iMuCA+IHRlbmd1dGFrZVwgOwor54uZ5pKD5YW1ID4gc29nZWtpaGVpXCA7CivlpJbovKrlsbEgPiBnYWlyaW56YW5cIDsKK+aYh+mZjeapnyA+IHNob3Vrb3VraVwgOwor5pS+54Gr54uCID4gaG91a2FreW91XCA7CivpoqjppqzniZsgPiBmdXViYWd5dXVcIDsKK+mZtuWZqOWVhiA+IHRvdWtpc2hvdVwgOwor5LiJ5aGB57eaID4gc2FucnVpc2VuXCA7CivpgZPnvqnlv4MgPiBkb3VnaXNoaW5cIDsKK+i2heaZguepuiA+IGNob3VqaWt1dVwgOwor5b6u57KS5a2QID4gYmlyeXV1c2hpXCA7CivmsLTlubPnt5ogPiBzdWloZWlzZW5cIDsKK+WGjeWwi+WVjyA+IHNhaWppbm1vblwgOwor5riF5o6D6LuKID4gc2Vpc291c2hhXCA7CivmnIDliY3nt5ogPiBzYWl6ZW5zZW5cIDsKK+e1tuWvvuiAhSA+IHpldHRhaXNoYVwgOwor5q2j56K65bqmID4gc2Vpa2FrdWRvXCA7CivmsLfliYrmqZ8gPiBoeW91c2Fra2lcIDsKK+WIhuino+iDvSA+IGJ1bmthaW5vdVwgOwor5Zub6KeS5b2iID4gc2hpa2Fra2VpXCA7CivlrqPoqIDmm7ggPiBzZW5nZW5zaG9cIDsKK+WPuOS7pOWhlCA+IHNoaXJlaXRvdVwgOwor56uL5aSq5a2QID4gcml0dGFpc2hpXCA7CivmnInouYTpoZ4gPiB5dXV0ZWlydWlcIDsKK+S9v+eUqOiAhSA+IHNoaXlvdXNoYVwgOwor5aSp5LiK55WMID4gdGVuam91a2FpXCA7CivpnZLmtbfkuoAgPiBhb3VtaWdhbWVcIDsKK+adpemBiuiAhSA+IHJhaXl1dXNoYVwgOwor5beo5Lq66LuNID4ga3lvamluZ3VuXCA7Civlrabpg6jnlJ8gPiBnYWt1YnVzZWlcIDsKK+W3peWtpumDqCA+IGtvdWdha3VidVwgOwor5pWZ56eR5pu4ID4ga3lvdWthc2hvXCA7CivntYzmuIjms5UgPiBrZWl6YWlob3VcIDsKK+egtOWCt+miqCA+IGhhc2hvdWZ1dVwgOwor5oyB5Y+C5Lq6ID4gamlzYW4nJ25pblwgOwor57eP552j5bqcID4gc291dG9rdWZ1XCA7Civml6XmnKzpq6ogPiBuaWhvbmdhbWlcIDsKK+WItuW+oeajkiA+IHNlaWd5b2JvdVwgOwor5qSc5qGI5pu4ID4ga2VuJydhbnNob1wgOwor5q2p6YGT5qmLID4gaG9kb3VreW91XCA7CivlnLDmlrnntJkgPiBjaGlob3VzaGlcIDsKK+aXpeWCreWPliA+IGhpeW91dG9yaVwgOwor5Zyw542E5aSJID4gamlnb2t1aGVuXCA7CivlkIjlpY/lm6MgPiBnYXNzb3VkYW5cIDsKK+eZuuaMr+WZqCA+IGhhc3NoaW5raVwgOwor5aSp5LqV5omHID4gdGVuam91c2VuXCA7Civlhajlj43lsIQgPiB6ZW5oYW5zaGFcIDsKK+WkiemAn+apnyA+IGhlbnNva3VraVwgOwor54Sh55CG5byPID4gbXVyaXNoaWtpXCA7Civou73lirTlg40gPiBrZWlyb3Vkb3VcIDsKK+ato+WPjeWQiCA+IHNlaWhhbmdvdVwgOwor57WM5riI5qyEID4ga2VpemFpcmFuXCA7CivnlJ/lrZflvJUgPiBpa2lqaWJpa2lcIDsKK+aKleelqOWMuiA+IHRvdWh5b3VrdVwgOwor5pyo5puc5pelID4gbW9rdXlvdWJpXCA7Civlh7rmnKjlubQgPiBkZWtpZG9zaGlcIDsKK+eik+awt+WzoCA+IHVzdWl0b3VnZVwgOwor5Yqg5YWl6YeRID4ga2FueXV1a2luXCA7CivmsJHplpPkurogPiBtaW5rYW5qaW5cIDsKK+WFrOWLn+agqiA+IGtvdWJva2FidVwgOwor5LmX6aas5pyNID4gam91YmFmdWt1XCA7Civml6XmnKzpoJggPiBuaWhvbnJ5b3VcIDsKK+iRl+abuOWQjSA+IGNob3Nob21laVwgOwor57WM5Za25a2mID4ga2VpZWlnYWt1XCA7Civnmb3piZvpibEgPiBoYWt1ZW5rb3VcIDsKK+eyl+ebruezliA+IHphcmFtZXRvdVwgOwor5YaF546E6ZaiID4gbmFpZ2Vua2FuXCA7CivlnLDmlrnnqI4gPiBjaGlob3V6ZWlcIDsKK+W3oeafu+mVtyA+IGp1bnNhY2hvdVwgOwor5Y2w5Yi35qmfID4gaW5zYXRzdWtpXCA7Civlh43mrbvogIUgPiB0b3VzaGlzaGFcIDsKK+eZvemKheiyqCA+IGhha3Vkb3VrYVwgOwor5aSp55CD5ZuzID4gdGVua3l1dXp1XCA7CivlhavljYPlubQgPiB5YWNoaXRvc2VcIDsKK+WOn+Wni+S6uiA+IGdlbnNoaWppblwgOwor5Yqg5bel6LODID4ga2Frb3VjaGluXCA7Civnq7novKrpuqkgPiBjaGlrdXdhZnVcIDsKK+S4gOaWueeahCA+IGlwcG91dGVraVwgOwor5Ye65LuV5LqLID4gZGVzaGlnb3RvXCA7CivmraPlv7XloLQgPiBzaG91bmVuYmFcIDsKK+aflOmBk+WgtCA+IGp1dWRvdWpvdVwgOwor6ISK6auE54KOID4gc2VraXp1aWVuXCA7Civkuozph43ph5wgPiBuaWp1dWdhbWFcIDsKK+eri+aWueS9kyA+IHJpcHBvdXRhaVwgOwor6YGg6ZqU5oCnID4gZW5rYWt1c2VpXCA7Civou73mrYzliocgPiBrZWlrYWdla2lcIDsKK+WItuWLleeBryA+IHNlaWRvdXRvdVwgOwor5YKs55yg5YmkID4gc2FpbWluemFpXCA7Civku4rkuIDluqYgPiBpbWFpY2hpZG9cIDsKK+aUu+mYsuaIpiA+IGtvdWJvdXNlblwgOwor5rWE5Zyf5a6XID4gam91ZG9zaHV1XCA7Civmk43nuKbmob8gPiBzb3VqdXVrYW5cIDsKK+aWh+aYjumkqCA+IGJ1bm1laWthblwgOwor5bCO6Zai5pWwID4gZG91a2Fuc3V1XCA7Civmu57lnKjlnLAgPiB0YWl6YWljaGlcIDsKK+S4iue0jeexsyA+IGpvdW5vdW1haVwgOwor5a6H5a6Z5pyNID4gdWNodXVmdWt1XCA7CivliKnlj6PogIUgPiByaWtvdW1vbm9cIDsKK+aWueazleirliA+IGhvdWhvdXJvblwgOwor6JOL54S25oCnID4gZ2FpemVuc2VpXCA7CivljYroo73lk4EgPiBoYW5zZWloaW5cIDsKK+S4gOWgtOmdoiA+IGljaGliYW1lblwgOwor55+z54mI55S7ID4gc2VraWJhbmdhXCA7CivnmbvpjLLnsL8gPiB0b3Vyb2t1Ym9cIDsKK+S4gOaYqOaZqSA+IGlzc2FrdWJhblwgOwor5aSa5qW15YyWID4gdGFreW9rdWthXCA7CivlpKfkuIDnlaogPiBvb2ljaGliYW5cIDsKK+ihm+aYn+WbvSA+IGVpc2Vpa29rdVwgOwor5LiL57Sa55SfID4ga2FreXV1c2VpXCA7CivmqJnmupbmmYIgPiBoeW91anVuamlcIDsKK+mrmOm9ouiAhSA+IGtvdXJlaXNoYVwgOwor5LiA5LiB5YmNID4gaXRjaG91bWFlXCA7CivmqKrmgYvmhZUgPiB5b2tvcmVuYm9cIDsKK+iyoeeUo+eojiA+IHphaXNhbnplaVwgOwor5LqM6YeN6LqrID4gbmlqdXVzaGluXCA7CivnlJ/nkIblraYgPiBzZWlyaWdha3VcIDsKK+eGseWZqOWFtyA+IG5ldHN1a2lndVwgOwor5a+S5Ya357SXID4ga2FucmVpc2hhXCA7CivmsLTpgZPmoJMgPiBzdWlkb3VzZW5cIDsKK+aOoue0ouacqCA+IHRhbnNha3VnaVwgOwor56CU56m256eRID4ga2Vua3l1dWthXCA7Civlrp/mlr3kvosgPiBqaXNzaGlyZWlcIDsKK+mVt+mfs+majiA+IGNob3VvbmthaVwgOwor5LiN6KmV5YikID4gZnVoeW91YmFuXCA7CivpgbjmiYvlm6MgPiBzZW5zaHVkYW5cIDsKK+WKn+WIqeeahCA+IGtvdXJpdGVraVwgOwor5aSp55CD5YSAID4gdGVua3l1dWdpXCA7CivnnJ/nj6DlsaQgPiBzaGluanVzb3VcIDsKK+W5s+Wdh+eCuSA+IGhlaWtpbnRlblwgOwor6YCj5ZCI5LyaID4gcmVuZ291a2FpXCA7Civlt6Xmpa3ljJYgPiBrb3VneW91a2FcIDsKK+i1pOmBk+WEgCA+IHNla2lkb3VnaVwgOwor5paH5a2m5bqnID4gYnVuZ2FrdXphXCA7CivlirTlg43lhZogPiByb3Vkb3V0b3VcIDsKK+e1jOa4iOaIpiA+IGtlaXphaXNlblwgOwor57Gz56m66LuNID4gYmVpa3V1Z3VuXCA7CivmlbflsYXnva4gPiBzaGlraWljaGlcIDsKK+mFjeW9k+mHkSA+IGhhaXRvdWtpblwgOwor6aOb6JqK55eHID4gaGlidW5zaG91XCA7CivotaTnl6Loj4wgPiBzZWtpcmlraW5cIDsKK+S6lOWNgeiCqSA+IGdvanV1a2F0YVwgOwor6auY562J5a6YID4ga291dG91a2FuXCA7CivlnLDmlrnniYggPiBjaGlob3ViYW5cIDsKK+eJh+iEs+ayuSA+IGhlbicnbm91eXVcIDsKK+WlieihjOaJgCA+IGJ1Z3lvdXNob1wgOwor6IKv5a6a5paHID4ga291dGVpYnVuXCA7CivoirPpppnliaQgPiBob3Vrb3V6YWlcIDsKK+eBq+eBvea1gSA+IGthc2Fpcnl1dVwgOwor5Y2w5Yi35omAID4gaW5zYXRzdWpvXCA7CivlpKfogZbloIIgPiBkYWlzZWlkb3VcIDsKK+e1jOa4iOaApyA+IGtlaXphaXNlaVwgOwor6JuH57SL55+zID4gamFtb25zZWtpXCA7CivmtYHooYzmrYwgPiByeXV1a291a2FcIDsKK+S4ieinkua0siA+IHNhbmtha3VzdVwgOwor5LiJ5paH5YikID4gc2FubW9uYmFuXCA7CivkuInop5Lms6IgPiBzYW5rYWt1aGFcIDsKK+Wun+mam+aApyA+IGppc3NhaXNlaVwgOwor56u555+i5p2lID4gdGFrZXlhcmFpXCA7CivlubPooYznt5ogPiBoZWlrb3VzZW5cIDsKK+iRseWdiuS4uyA+IG5lZ2lib3V6dVwgOwor5a2r5byf5a2QID4gbWFnb2Rlc2hpXCA7CivlrrnnqY3mr5QgPiB5b3VzZWtpaGlcIDsKK+WItumFuOWJpCA+IHNlaXNhbnphaVwgOwor5Y2g5Y+W5qipID4gc2Vuc2h1a2VuXCA7CivkuLvnnLzngrkgPiBzaHVnYW50ZW5cIDsKK+mBoOmalOWcsCA+IGVua2FrdWNoaVwgOwor5LiJ6KeS5q+UID4gc2Fua2FrdWhpXCA7CivplbfmmYLplpMgPiBjaG91amlrYW5cIDsKK+WNiuerr+iAhSA+IGhhbnBhbW9ub1wgOwor54us56aB5rOVID4gZG9ra2luaG91XCA7CivluoPlkYrosrsgPiBrb3Vrb2t1aGlcIDsKK+acgOWEqumBhyA+IHNhaXl1dWd1dVwgOwor5Y+w6aKo55y8ID4gdGFpZnV1Z2FuXCA7CivmnKrmlZnogrIgPiBtaWt5b3Vpa3VcIDsKK+ijgeaWreW4qyA+IHNhaWRhbnNoaVwgOwor5YWo5Y2Y5bCEID4gemVudGFuc2hhXCA7CivlirnmnpznmoQgPiBrb3VrYXRla2lcIDsKK+epuuaJi+W9oiA+IGt1dXRlZ2F0YVwgOwor5Y2w5Yi75birID4gaW5rb2t1c2hpXCA7CivpnZLlubTovKkgPiBzZWluZW5oYWlcIDsKK+WJsueDueW6lyA+IGthcHBvdXRlblwgOwor6LK/5piT5ZOBID4gYm91ZWtpaGluXCA7CivliYrlsqnmqZ8gPiBzYWt1Z2Fua2lcIDsKK+WujOS6huW+jCA+IGthbnJ5b3Vnb1wgOwor5aSn5LiK5q61ID4gZGFpam91ZGFuXCA7CivlnJLoirjlraYgPiBlbmdlaWdha3VcIDsKK+aMh+ebuOaSsiA+IHl1Yml6dW1vdVwgOwor6IKp55Sy5bivID4ga2Vua291dGFpXCA7CivmraPlvZPmgKcgPiBzZWl0b3VzZWlcIDsKK+egguezluawtCA+IHNhdG91bWl6dVwgOwor5pa56YyQ5b2iID4gaG91c3Vpa2VpXCA7Civnm7jlvZPmlbAgPiBzb3V0b3VzdXVcIDsKK+mGuOmAoOmFkiA+IGpvdXpvdXNodVwgOwor5bem5Lit6ZaTID4gc2FjaHV1a2FuXCA7CivkvJ3ku6TogIUgPiBkZW5yZWlzaGFcIDsKK+acqOe2v+mHnSA+IG1vbWVuYmFyaVwgOwor5pyo54mI55S7ID4gbW9rdWhhbmdhXCA7CivmpJzmn7vlvbkgPiBrZW5zYXlha3VcIDsKK+W/mOW5tOS8miA+IGJvdW5lbmthaVwgOwor5a6H5a6Z5a2mID4gdWNodXVnYWt1XCA7CivnnJ/nkIblgKQgPiBzaGlucmljaGlcIDsKK+mFjeawtOeuoSA+IGhhaXN1aWthblwgOwor5aSq6Zm96aKoID4gdGFpeW91ZnV1XCA7Civkvb/nlKjms5UgPiBzaGl5b3Vob3VcIDsKK+WNsOWIt+WxiyA+IGluc2F0c3V5YVwgOwor6Z+z5aOw5a2mID4gb25zZWlnYWt1XCA7CivkvIrpgZTlpbMgPiBkYXRlb24nJ25hXCA7Civlia/oqZ7lj6UgPiBmdWt1c2hpa3VcIDsKK+Wun+aVsOS9kyA+IGppc3N1dXRhaVwgOwor6KOP6ZW35bGLID4gdXJhbmFnYXlhXCA7CivmnbHlt6XlpKcgPiB0b3Vrb3VkYWlcIDsKK+iKseaZguioiCA+IGhhbmFkb2tlaVwgOwor6KO96YCg5ZOBID4gc2Vpem91aGluXCA7CivoqIjnrpfmm7ggPiBrZWlzYW5zaG9cIDsKK+WItuWLleaJiyA+IHNlaWRvdXNodVwgOwor5LiN6KaP5b6LID4gZnVraXJpdHN1XCA7Civlj6PohZTnmYwgPiBrb3Vrb3VnYW5cIDsKK+WbnuetlOiAhSA+IGthaXRvdXNoYVwgOwor5Y2Y5b6T6ZmjID4gdGFuanV1amluXCA7Civlj43oi7Hpm4QgPiBoYW4nJ2VpeXV1XCA7CivkuLvmqKnogIUgPiBzaHVrZW5zaGFcIDsKK+Wkp+acrOWxsSA+IGRhaWhvbnphblwgOwor5Lit5ZKM5YmkID4gY2h1dXdhemFpXCA7CivmhYjlloTnrrEgPiBqaXplbmJha29cIDsKK+acgOW3pue/vCA+IHNhaXNheW9rdVwgOwor5LiJ6KeS5peXID4gc2Fua2FrdWtpXCA7CivliqDlhaXogIUgPiBrYW55dXVzaGFcIDsKK+ijvuaooeanmCA+IHN1c29tb3lvdVwgOwor5LiA6Zq755y8ID4gaXNzZWtpZ2FuXCA7Civkvb/nlKjmqKkgPiBzaGl5b3VrZW5cIDsKK+i/keS9k+ipqSA+IGtpbnRhaXNoaVwgOwor5aSp54u85pifID4gdGVucm91c2VpXCA7Civlho3niq/ogIUgPiBzYWloYW5zaGFcIDsKK+WTqOaIkuapnyA+IHNob3VrYWlraVwgOwor6YCa6YGO6aeFID4gdHN1dWthZWtpXCA7CivlpKfkurrlhbEgPiBvdG9uYWRvbW9cIDsKK+eCuuaUvumhjCA+IHNoaWhvdWRhaVwgOwor6Ium5b+D6KuHID4ga3VzaGluZGFuXCA7Civmk43nuKblo6sgPiBzb3VqdXVzaGlcIDsKK+ecn+ePoOWFiSA+IHNoaW5qdWtvdVwgOwor6YCf5bqm6KiIID4gc29rdWRva2VpXCA7CivnhKHosqzku7sgPiBtdXNla2luaW5cIDsKK+aSreS9hue3miA+IGJhbnRhbnNlblwgOwor6IGW6KqV56WtID4gc2VpdGFuc2FpXCA7CivnhKHkuIDmlocgPiBtdWljaGltb25cIDsKK+W4uOWIhuaVsCA+IGpvdWJ1bnN1dVwgOwor5YaN6ICD5oWuID4gc2Fpa291cnlvXCA7CivlhIDlhbjplbcgPiBnaXRlbmNob3VcIDsKK+W3peWtpuenkSA+IGtvdWdha3VrYVwgOwor5Lqk5q2T5LyaID4ga291a2Fua2FpXCA7CivlpKnosaHlhIAgPiB0ZW5zaG91Z2lcIDsKK+W8leeUqOaWhyA+IGluJyd5b3VidW5cIDsKK+iNkuazleW4qyA+IGFyYWhvdXNoaVwgOwor55mC6aSK6LK7ID4gcnlvdXlvdWhpXCA7CivmqZ/plqLplbcgPiBraWthbmNob3VcIDsKK+WQkeWcsOaApyA+IGtvdWNoaXNlaVwgOwor5Yex5peL6ZaAID4gZ2Fpc2VubW9uXCA7CivoqK3lgpnosrsgPiBzZXRzdWJpaGlcIDsKK+ijgee4q+W4qyA+IHNhaWhvdXNoaVwgOwor6LKh55Sj5qipID4gemFpc2Fua2VuXCA7CivlkIzooYzogIUgPiBkb3Vrb3VzaGFcIDsKK+aKleefs+apnyA+IHRvdXNla2lraVwgOwor5oSb5qCh5b+DID4gYWlrb3VzaGluXCA7CivkvI/prZTmrr8gPiBmdWt1bWFkZW5cIDsKK+iMtuWZqOe1hCA+IGNoYWtpZ3VtaVwgOwor5LiJ5aGB5omLID4gc2FucnVpc2h1XCA7CivomZrnhKHnmoQgPiBreW9tdXRla2lcIDsKK+S8neWwjuaApyA+IGRlbmRvdXNlaVwgOwor5paH5a2X5YiXID4gbW9qaXJldHN1XCA7Civlj43oirvpoZ4gPiBoYW5zdXVydWlcIDsKK+WumuWei+ipqSA+IHRlaWtlaXNoaVwgOwor5rC06I+T5a2QID4gbWl6dWdhc2hpXCA7Civkvb/nlKjmlrkgPiBzaGl5b3Vob3VcIDsKK+m7jeWbo+WtkCA+IGtpYmlkYW5nb1wgOwor6Luf5Y+j6JOLID4gbmFua291Z2FpXCA7Civpl4fnm7jloLQgPiB5YW1pc291YmFcIDsKK+Wuh+WumeWNmiA+IHVjaHV1aGFrdVwgOwor5pyA5YmN5oimID4gc2FpemVuc2VuXCA7CivoiqXlrZDoj5wgPiBrYXJhc2hpbmFcIDsKK+ePjemBk+WFtyA+IGNoaW5kb3VndVwgOwor6buE6KGo57SZID4ga2lieW91c2hpXCA7CivlvpPlp4nlprkgPiBqdXVzaGltYWlcIDsKK+WtkOemj+iAhSA+IGtvYnVrdXNoYVwgOwor5oCd5oOz55WMID4gc2hpc291a2FpXCA7CivmsJHooYbljJYgPiBtaW5zaHV1a2FcIDsKK+mIjem7hOiJsiA+IG5pYnVraWlyb1wgOwor5LiJ6KeS5b2iID4gc2Fua2Fra2VpXCA7CivlpKfmnKzllrYgPiBkYWlob24nJ2VpXCA7CivnjJvnibnoqJMgPiBtb3V0b2trdW5cIDsKK+S6iOWRiue3qCA+IHlva29rdWhlblwgOwor5Ya35rm/5biDID4gcmVpc2hpcHB1XCA7CivmqJnmupbljJYgPiBoeW91anVua2FcIDsKK+WNl+ibruS6uiA+IG5hbmJhbmppblwgOwor55Sw5ZyS6KmpID4gZGVuJydlbnNoaVwgOwor5LiJ6KeS5bqnID4gc2Fua2FrdXphXCA7Civlho3oqabpqJMgPiBzYWlzaGlrZW5cIDsKK+WvkuW4r+aelyA+IGthbnRhaXJpblwgOwor5YK+5pac6Z2iID4ga2Vpc2hhbWVuXCA7CivmrbvkuqHogIUgPiBzaGlib3VzaGFcIDsKK+S4ieinkuW4hiA+IHNhbmtha3Vob1wgOwor5Y2K56uv54mpID4gaGFucGFtb25vXCA7CivlqZrlp7vms5UgPiBrb24nJ2luaG91XCA7CivkuInop5Llt54gPiBzYW5rYWt1c3VcIDsKK+S6jOmHjeeqkyA+IG5panV1bWFkb1wgOwor6Ieq54S26aGeID4gc2hpemVucnVpXCA7CivlsILlo7Llk4EgPiBzZW5iYWloaW5cIDsKK+S4jee1seS4gCA+IGZ1dG91aXRzdVwgOwor5aSc5Lya5pyNID4geWFrYWlmdWt1XCA7CivkuojlkYrnr4cgPiB5b2tva3VoZW5cIDsKK+WFmua0vuW/gyA+IHRvdWhhc2hpblwgOwor5oCd5oOz54qvID4gc2hpc291aGFuXCA7CivlvIHlvZPku6MgPiBiZW50b3VkYWlcIDsKK+iCneiHk+eZjCA+IGthbnpvdWdhblwgOwor57WM5riI5Lq6ID4ga2VpemFpamluXCA7Civku4/mlZnlvpIgPiBidWtreW91dG9cIDsKK+exs+a1t+i7jSA+IGJlaWthaWd1blwgOwor5ZCr5rK55bGkID4gZ2FuJyd5dXNvdVwgOwor5oOF5aCx6KqMID4gam91aG91c2hpXCA7Civlh7Hml4vou40gPiBnYWlzZW5ndW5cIDsKK+iQveS8jeiAhSA+IHJha3Vnb3NoYVwgOwor6J6N6Kej54K5ID4geXV1a2FpdGVuXCA7Civmt4vlt7TnkIMgPiByaW5wYWt5dXVcIDsKK+WrjOeFmeaoqSA+IGtlbicnZW5rZW5cIDsKK+Wkq+WppuS7siA+IGZ1dWZ1bmFrYVwgOwor5oSf5p+T5Y6fID4ga2Fuc2VuZ2VuXCA7Civov47os5PppKggPiBnZWloaW5rYW5cIDsKK+ipleitsOS8miA+IGh5b3VnaWthaVwgOwor5aW955S35a2QID4ga291ZGFuc2hpXCA7Civml6nmmKXos6YgPiBzb3VzaHVuZnVcIDsKK+WWiemgreeZjCA+IGtvdXRvdWdhblwgOwor5a+d5qWt5birID4gbmV3YXphc2hpXCA7CivkurrmoLzljJYgPiBqaW5rYWt1a2FcIDsKK+e2uum6l+S6iyA+IGtpcmVpZ290b1wgOwor6KiY5ZCN5qCqID4ga2ltZWlrYWJ1XCA7CivmkLrluK/lk4EgPiBrZWl0YWloaW5cIDsKK+mnkOWxr+aJgCA+IGNodXV0b25qb1wgOwor56CU56m25omAID4ga2Vua3l1dWpvXCA7CivmnIDlhYjnq68gPiBzYWlzZW50YW5cIDsKK+WxheS9j+iAhSA+IGt5b2p1dXNoYVwgOwor6KqH5by15rOVID4ga29jaG91aG91XCA7CivoppbopprljJYgPiBzaGlrYWt1a2FcIDsKK+S4reiPr+ihlyA+IGNodXVrYWdhaVwgOwor6YCj5Yik54q2ID4gcmVuYmFuam91XCA7Civpup3pppnnjKsgPiBqYWtvdW5la29cIDsKK+WkieWFieaYnyA+IGhlbmtvdXNlaVwgOwor5a+p5p+75a6YID4gc2hpbnNha2FuXCA7CivlpJrnlKjkuK0gPiB0YXlvdWNodXVcIDsKK+aXqeadseaIpiA+IHNvdXRvdXNlblwgOwor6buZ56eY5qipID4gbW9rdWhpa2VuXCA7CivlhpLpmbroq4cgPiBib3VrZW5kYW5cIDsKK+W4uOWCmeiWrCA+IGpvdWJpeWFrdVwgOwor5aaK5amm5pyNID4gbmlucHVmdWt1XCA7CivkvZPph43oqIggPiB0YWlqdXVrZWlcIDsKK+itpuWumOmaiiA+IGtlaWthbnRhaVwgOwor6Kyb6KuH56S+ID4ga291ZGFuc2hhXCA7Civov5Hku6PoqakgPiBraW5kYWlzaGlcIDsKK+eFmeiNiemKrSA+IHRhYmFrb3NlblwgOwor6ZaT5oqV6KmeID4ga2FudG91c2hpXCA7CivnrZTlvIHogIUgPiB0b3ViZW5zaGFcIDsKK+W5s+ihjOajkiA+IGhlaWtvdWJvdVwgOwor6J+75Zyw542EID4gYXJpamlnb2t1XCA7CivmiYHmoYPohbogPiBoZW50b3VzZW5cIDsKK+WFrOWIpOW7tyA+IGtvdWhhbnRlaVwgOwor5pWw5YSE5bm0ID4gc3V1b2t1bmVuXCA7Civnm4bnga/nsaAgPiBib25kb3Vyb3VcIDsKK+e1guaIpuW+jCA+IHNodXVzZW5nb1wgOwor57eo6ZuG6YOoID4gaGVuc2h1dWJ1XCA7Civlkajlm7LplbcgPiBzaHV1aWNob3VcIDsKK+WFrOmBuOWItiA+IGtvdXNlbnNlaVwgOwor5L+u55CG5belID4gc2h1dXJpa291XCA7CivmnIDpganljJYgPiBzYWl0ZWtpa2FcIDsKK+WMluWtpuiAhSA+IGthZ2FrdXNoYVwgOwor6LSI6LOE572qID4gem91d2FpemFpXCA7CivkuI3mib/oqo0gPiBmdXNob3VuaW5cIDsKK+S6lOmHjeWUsSA+IGdvanV1c2hvdVwgOwor5bm06b2i6aCGID4gbmVucmVpanVuXCA7Civos63ljZrloLQgPiB0b2Jha3Vqb3VcIDsKK+eci+WuiOiAhSA+IGthbnNodXNoYVwgOwor5byx6Zu75ZmoID4gamFrdWRlbmtpXCA7Civml6XmnKznmoQgPiBuaWhvbnRla2lcIDsKK+mWi+WivuWcsCA+IGthaWtvbmNoaVwgOwor56aB54yf5pyfID4ga2lucnlvdWtpXCA7CivliY3poY3pg6ggPiB6ZW5nYWt1YnVcIDsKK+ipleirluWutiA+IGh5b3Vyb25rYVwgOwor5LiA5paJ5a6JID4gaXNzZWl5YXN1XCA7CivkuIDopqrnrYkgPiBpc3NoaW50b3VcIDsKK+WGjeaUvumAgSA+IHNhaWhvdXNvdVwgOwor6IiI6KGM5YyWID4ga291Z3lvdWthXCA7CivljJblrabnt5ogPiBrYWdha3VzZW5cIDsKK+aIpuatu+iAhSA+IHNlbnNoaXNoYVwgOwor5LiA5paH5a2XID4gaWNoaW1vbmppXCA7Civmloflo6vpgKMgPiBidW5zaGlyZW5cIDsKK+acqOe2v+ezuCA+IG1vbWVuJydpdG9cIDsKK+eEpumbu+awlyA+IHNob3VkZW5raVwgOwor5o6I5LiO5byPID4ganV5b3NoaWtpXCA7Civnm67liIbph48gPiBtZWJ1bnJ5b3VcIDsKK+WkqeS4i+S4gCA+IHRlbmthaWNoaVwgOwor5Lit5Y+k5ZOBID4gY2h1dWtvaGluXCA7CivluILloLTmgKcgPiBzaGlqb3VzZWlcIDsKK+S4reaAp+WhqSA+IGNodXVzZWllblwgOwor5paH6Kqe6Kq/ID4gYnVuZ29jaG91XCA7CivmlaPlhbXnt5ogPiBzYW5wZWlzZW5cIDsKK+a1geihjOWFkCA+IHJ5dXVrb3VqaVwgOwor5Y+I5b6T5byfID4gbWF0YWl0b2tvXCA7CivohbnmmYLoqIggPiBoYXJhZG9rZWlcIDsKK+W4g+iii+iFuSA+IGhvdGVpYmFyYVwgOwor54Sh5pWZ6IKyID4gbXVreW91aWt1XCA7CivnoJTnqbblrrYgPiBrZW5reXV1a2FcIDsKK+aVmeWMuuawkSA+IGt5b3VrdW1pblwgOwor5Zyw6ZyH5bivID4gamlzaGludGFpXCA7CivplbfmnJ/miKYgPiBjaG91a2lzZW5cIDsKK+mAmuefpeewvyA+IHRzdXVjaGlib1wgOwor5Yqg5bel5qWtID4ga2Frb3VneW91XCA7CivkuI3ooYznirYgPiBmdWd5b3Vqb3VcIDsKK+iDoem6u+ayuSA+IGdvbWFhYnVyYVwgOwor5pel5pys54y/ID4gbmlob256YXJ1XCA7Civml6fkuJbnlYwgPiBreXV1c2VrYWlcIDsKK+awtOW5s+WLlSA+IHN1aWhlaWRvdVwgOwor55+t5aSn55SfID4gdGFuZGFpc2VpXCA7Civogpblg4/nlLsgPiBzaG91em91Z2FcIDsKK+S4gOinkueNoyA+IGlra2FrdWp1dVwgOwor5Y+v5aSJ6ZW3ID4ga2FoZW5jaG91XCA7CivkuIDopoHntKAgPiBpY2hpeW91c29cIDsKK+WFkOerpeWKhyA+IGppZG91Z2VraVwgOwor5Z+L6JGs5ZywID4gbWFpc291Y2hpXCA7CivkuIroo73mnKwgPiBqb3VzZWlib25cIDsKK+S4oeaAp+iKsSA+IHJ5b3VzZWlrYVwgOwor5a6f6KGM6ICFID4gamlra291c2hhXCA7Civlgr7mlpzoqIggPiBrZWlzaGFrZWlcIDsKK+eKr+e9quiAhSA+IGhhbnphaXNoYVwgOwor57W25Lqk54q2ID4gemVra291am91XCA7CivlpJbmnaXogIUgPiBnYWlyYWlzaGFcIDsKK+S8neWwjuS9kyA+IGRlbmRvdXRhaVwgOwor5pac5ruR6ZmNID4gc2hha2Fra291XCA7CivluLjlubPlgIkgPiBqb3VoZWlzb3VcIDsKK+S4u+WCrOiAhSA+IHNodXNhaXNoYVwgOwor5p+U6Luf5oCnID4ganV1bmFuc2VpXCA7CivliIbmi4Xph5EgPiBidW50YW5raW5cIDsKK+WGt+iUtei7iiA+IHJlaXpvdXNoYVwgOwor5pyA6auY6KOBID4gc2Fpa291c2FpXCA7CivliqDlhaXmqKkgPiBrYW55dXVrZW5cIDsKK+WJjeS9j+aJgCA+IHplbmp1dXNob1wgOwor5bGV5pyb5aGUID4gdGVuYm91dG91XCA7CivpgY7mlY/nl4cgPiBrYWJpbnNob3VcIDsKK+S6uumgreeojiA+IG5pbnRvdXplaVwgOwor6Iie5Y+w5YqHID4gYnV0YWlnZWtpXCA7CivlubPlnYflgKQgPiBoZWlraW5jaGlcIDsKK+agvOWtkOmdoiA+IGtvdXNoaW1lblwgOwor5rC06Iy25bGLID4gbWl6dWNoYXlhXCA7Civmg4XloLHntrIgPiBqb3Vob3Vtb3VcIDsKK+W3tOaXpuadjyA+IGhhdGFua3lvdVwgOwor5a+p576O55y8ID4gc2hpbmJpZ2FuXCA7Civlh6bkuJboqJMgPiBzaG9zZWlrdW5cIDsKK+iHqueEtuimsyA+IHNoaXplbmthblwgOwor6ISC6IKq6YW4ID4gc2hpYm91c2FuXCA7CivploDlpJbmvKIgPiBtb25nYWlrYW5cIDsKK+aKl+iPjOaApyA+IGtvdWtpbnNlaVwgOwor5Lyd5p+T5oCnID4gZGVuc2Vuc2VpXCA7CivmnKrntYTnuZQgPiBtaXNvc2hpa2lcIDsKK+awtOanmOa2siA+IHN1aXlvdWVraVwgOwor5pWR5Yqp6ZqKID4ga3l1dWpvdGFpXCA7Civkv53lrZjph48gPiBob3pvbnJ5b3VcIDsKK+aguOWFteWZqCA+IGtha3VoZWlraVwgOwor5LiN5rqA6LazID4gZnVtYW56b2t1XCA7Civplbfoq4forbAgPiBuYWdhZGFuZ2lcIDsKK+WGkumZuuiAhSA+IGJvdWtlbnNoYVwgOwor57696JKy5ZujID4gaGFuZWJ1dG9uXCA7CivlnLDmlrnlgrUgPiBjaGlob3VzYWlcIDsKK+acrOWgtOeJqSA+IGhvbmJhbW9ub1wgOwor6Kqe5a2m6ICFID4gZ29nYWt1c2hhXCA7Civlho3oqabooYwgPiBzYWlzaGlrb3VcIDsKK+WxheS4iOmrmCA+IGl0YWtlZGFrYVwgOwor5aSq6Zm957O7ID4gdGFpeW91a2VpXCA7CivnoJTnqbblk6EgPiBrZW5reXV1aW5cIDsKK+W8pee4q+etliA+IGJpaG91c2FrdVwgOwor54Sh5aCx6YWsID4gbXVob3VzaHV1XCA7CivomIbmup3mqYsgPiByb2tvdWt5b3VcIDsKK+e1tuWvvuWApCA+IHpldHRhaWNoaVwgOwor5aSp6aCC5YSAID4gdGVuY2hvdWdpXCA7Civmtbfos4rnjosgPiBrYWl6b2t1b3VcIDsKK+iyoeeVjOS6uiA+IHphaWthaWppblwgOwor6aKo5p2l5Z2KID4gZnV1cmFpYm91XCA7Civlr5LlhrflnLAgPiBrYW5yZWljaGlcIDsKK+WJjee9ruipniA+IHplbmNoaXNoaVwgOwor5Yqg5Yik5Lq6ID4ga2FoYW4nJ25pblwgOwor5YuV5ruR6LuKID4gZG91a2Fzc2hhXCA7CivntZDmsLfmnJ8gPiBrZXBweW91a2lcIDsKK+Wxleacm+WPsCA+IHRlbmJvdWRhaVwgOwor56S85oud5aCCID4gcmVpaGFpZG91XCA7Civpq5jmgKfog70gPiBrb3VzZWlub3VcIDsKK+S5vua1t+iLlCA+IGhvc2hpbm9yaVwgOwor5L2/55So5L6LID4gc2hpeW91cmVpXCA7CivmnInnlLDnhLwgPiBhcml0YXlha2lcIDsKK+mrmOWRqOazoiA+IGtvdXNodXVoYVwgOwor5bC/5qSc5p+7ID4gbnlvdWtlbnNhXCA7CivnkrDnirbnt5ogPiBrYW5qb3VzZW5cIDsKK+eZuuaDs+azlSA+IGhhc3NvdWhvdVwgOwor5YWN56iO54K5ID4gbWVuemVpdGVuXCA7CivlgKTmrrXooaggPiBuZWRhbmh5b3VcIDsKK+ebtOW8n+WtkCA+IGppa2lkZXNoaVwgOwor6YCj6YKm5Yi2ID4gcmVucG91c2VpXCA7Civkvb/nlKjkurogPiBzaGl5b3VuaW5cIDsKK+akjeacqOmJoiA+IHVla2liYWNoaVwgOwor54Wn5bCE6YeOID4gc2hvdXNoYXlhXCA7CivmhYjlloTlv4MgPiBqaXplbnNoaW5cIDsKK+acqOeFieeTpiA+IG1va3VyZW5nYVwgOwor5pyo57a/54mpID4gbW9tZW5tb25vXCA7Civlha3liIblhIAgPiByb2t1YnVuZ2lcIDsKK+imluWcsOW5syA+IHNoaWNoaWhlaVwgOwor5bel5L2c5ZOhID4ga291c2FrdWluXCA7Civlm57mvJXlupcgPiBrYWlzb3V0ZW5cIDsKK+efs+eCree0gCA+IHNla2l0YW5raVwgOwor5oqV5qmf55qEID4gdG91a2l0ZWtpXCA7CivnjJ/niqzluqcgPiByeW91a2VuemFcIDsKK+earuiyoeW4gyA+IGthd2F6YWlmdVwgOwor6ISz6KGA5qCTID4gbm91a2Vzc2VuXCA7CivmraPliYfljJYgPiBzZWlzb2t1a2FcIDsKK+Wkp+WlpeanmCA+IG9vb2t1c2FtYVwgOwor5qyg6Zml6LuKID4ga2Vra2Fuc2hhXCA7CivkuIDlpKfkuosgPiBpY2hpZGFpamlcIDsKK+mAo+WIhuaVsCA+IHJlbmJ1bnN1dVwgOwor5L+u55CG5LujID4gc2h1dXJpZGFpXCA7CivolYHpurvnlrkgPiBqaW5tYXNoaW5cIDsKK+WFt+eUs+abuCA+IGd1c2hpbnNob1wgOwor6Kqt5pu45a62ID4gZG9rdXNob2thXCA7Civnvo7ooZPpg6ggPiBiaWp1dHN1YnVcIDsKK+aEn+isneelrSA+IGthbnNoYXNhaVwgOwor6LK05pa55pa5ID4gYW5hdGFnYXRhXCA7CivmnbHkuqzpg70gPiB0b3VreW91dG9cIDsKK+aXp+Wtl+S9kyA+IGt5dXVqaXRhaVwgOwor54Sh6Kq/5rOVID4gYnVjaG91aG91XCA7Civoo73kvZzosrsgPiBzZWlzYWt1aGlcIDsKK+S6jOmAsemWkyA+IG5pc2h1dWthblwgOwor6YOo6JC95rCRID4gYnVyYWt1bWluXCA7CivliqDnm5/lm70gPiBrYW1laWtva3VcIDsKK+S4gOWknOS4rSA+IGhpdG95YWp1dVwgOwor5qeL6YCg5L2TID4ga291em91dGFpXCA7CivkuK3ljLvlraYgPiBjaHV1aWdha3VcIDsKK+WPl+S/oeiAhSA+IGp1c2hpbnNoYVwgOwor5Lya6K2w6YyyID4ga2FpZ2lyb2t1XCA7CivnpoHnhZnou4ogPiBraW4nJ2Vuc2hhXCA7Civpm7vlrZDpioMgPiBkZW5zaGlqdXVcIDsKK+WFt+S9k+etliA+IGd1dGFpc2FrdVwgOwor6LuK5o6M5Yy6ID4gc2hhc2hvdWt1XCA7Civku5blm73msJEgPiB0YWtva3VtaW5cIDsKK+WEkuWtpuiAhSA+IGp1Z2FrdXNoYVwgOwor5ZCN5o6i5YG1ID4gbWVpdGFudGVpXCA7Civlm73pgKPml5cgPiBrb2t1cmVua2lcIDsKK+WPiOW+k+WFhCA+IG1hdGFpdG9rb1wgOwor6a+j54OP6LOKID4gc3VydW1laWthXCA7CivlhajluILmsJEgPiB6ZW5zaGltaW5cIDsKK+WgsemBk+WumCA+IGhvdWRvdWthblwgOwor5pel5pys5pm0ID4gbmlob25iYXJlXCA7CivluIPlm6Pnmq4gPiBmdXRvbmdhd2FcIDsKK+S/rue5leiyuyA+IHNodXV6ZW5oaVwgOwor5bCC6ZaA5pu4ID4gc2VubW9uc2hvXCA7CivlhaznlKjou4ogPiBrb3V5b3VzaGFcIDsKK+iAkOaAp+iPjCA+IHRhaXNlaWtpblwgOwor5ZCM56iu6aGeID4gZG91c2h1cnVpXCA7Civpn7Pln5/lpJYgPiBvbicnaWtpZ2FpXCA7CivopqrlkozmgKcgPiBzaGlud2FzZWlcIDsKK+WJjemgreiRiSA+IHplbnRvdXlvdVwgOwor54+g5pqW57C+ID4gdGFtYW5vcmVuXCA7CivkuZ3mmJ/lrrYgPiBreXV1c2Vpa2FcIDsKK+mAmuawl+WtlCA+IHRzdXVraWtvdVwgOwor6Zqj5Lq65oSbID4gcmluamluJydhaVwgOwor5LiN5om/55+lID4gZnVzaG91Y2hpXCA7CivmrbvkuqHmlbAgPiBzaGlib3VzdXVcIDsKK+WxheS9j+aoqSA+IGt5b2p1dWtlblwgOwor6Ymk5ous5bynID4ga2FnaWtha2tvXCA7CivlgKbmgKDmhJ8gPiBrZW50YWlrYW5cIDsKK+WGt+iUteiIuSA+IHJlaXpvdXNlblwgOwor5ZCI5oiQ6YWSID4gZ291c2Vpc2h1XCA7CivlkbPlmYzmsYEgPiBtaXNvc2hpcnVcIDsKK+aMh+WwjuiAhSA+IHNoaWRvdXNoYVwgOwor5Y2K5Y+v6YCaID4gaGFua2F0c3V1XCA7CivnhKHorablkYogPiBtdWtlaWtva3VcIDsKK+Wkp+ilv+mDtyA+IGRhaXNhaWdvdVwgOwor552h55yg5YmkID4gc3VpbWluemFpXCA7Civml4vnm6Tlt6UgPiBzZW5iYW5rb3VcIDsKK+W4r+WIhuaVsCA+IHRhaWJ1bnN1dVwgOwor5b6M57aZ6ICFID4ga291a2Vpc2hhXCA7Civplbfoq4fnvqkgPiBuYWdhZGFuZ2lcIDsKK+WkqeaXpeWhqSA+IHRlbnBpc2hpb1wgOwor5aiB5Zyn55qEID4gaWF0c3V0ZWtpXCA7Civkuozph43lupUgPiBuaWp1dXpva29cIDsKK+WPiOW8n+WtkCA+IG1hdGFkZXNoaVwgOwor5pWR5ZG95YW3ID4ga3l1dW1laWd1XCA7CivnpoHnjJ/ljLogPiBraW5yeW91a3VcIDsKK+W8qee0muiJpiA+IGRva3l1dWthblwgOwor5oGS5LmF5YyWID4ga291a3l1dWthXCA7CivlhbfkvZPnmoQgPiBndXRhaXRla2lcIDsKK+iFueS4gOadryA+IGhhcmFpcHBhaVwgOwor5qC855CG6KuWID4ga2FrdXJpcm9uXCA7CivmhJ/orJ3nirYgPiBrYW5zaGFqb3VcIDsKK+ePvuihjOeKryA+IGdlbmtvdWhhblwgOwor5pel5LuY5Y2wID4gaGlkenVrZWluXCA7CivlpKrpmb3nga8gPiB0YWl5b3V0b3VcIDsKK+W4uOeUqOiAhSA+IGpvdXlvdXNoYVwgOwor5oOF5aCx5rqQID4gam91aG91Z2VuXCA7Civlhazkvb/ppKggPiBrb3VzaGlrYW5cIDsKK+W4hueri+iynSA+IGhvdGF0ZWdhaVwgOwor6Iul5q2m6ICFID4gd2FrYW11c2hhXCA7CivmuIXnrpfmm7ggPiBzZWlzYW5zaG9cIDsKK+acrOihl+mBkyA+IGhvbmthaWRvdVwgOwor6YO15L6/6LuKID4geXV1Ymluc2hhXCA7CivkuIDngrnmqZ8gPiBpY2hpdGVua2lcIDsKK+Wkj+miqOmCqiA+IG5hdHN1a2F6ZVwgOwor5Lit6YGT5rS+ID4gY2h1dWRvdWhhXCA7CivmmrTpoqjln58gPiBib3VmdXVpa2lcIDsKK+eZuuemgeacrCA+IGhha2tpbmJvblwgOwor5Zyn6Zu75rCXID4gYXRzdWRlbmtpXCA7Civlt6jkurrlhZogPiBreW9qaW50b3VcIDsKK+aZguS7o+eJqSA+IGppZGFpbW9ub1wgOwor5bGP6aKo5bKpID4gYnlvdWJ1aXdhXCA7Civlv6voqJjpjLIgPiBrYWlraXJva3VcIDsKK+aatOmiqOWcjyA+IGJvdWZ1dWtlblwgOwor6Kyb6KuH5birID4ga291ZGFuc2hpXCA7CivkuI3miJDnuL4gPiBmdXNlaXNla2lcIDsKK+Wkmumfs+evgCA+IHRhb25zZXRzdVwgOwor6YCj5biv5oSfID4gcmVudGFpa2FuXCA7Civpg6jliIbnmoQgPiBidWJ1bnRla2lcIDsKK+WwgumWgOW6lyA+IHNlbm1vbnRlblwgOwor5oWj55So6Z+zID4ga2FuJyd5b3VvblwgOwor5aSc5LuV5LqLID4geW9zaGlnb3RvXCA7CivmvJTnv5LmnpcgPiBlbnNodXVyaW5cIDsKK+afkOmrmOagoSA+IGJvdWtvdWtvdVwgOwor57a/6I+T5a2QID4gd2F0YWdhc2hpXCA7Civot6jnt5rmqYsgPiBrb3Nlbmt5b3VcIDsKK+eFmeiNieebhiA+IHRhYmFrb2JvblwgOwor5Y+X6aiT56WoID4ganVrZW5oeW91XCA7CivlhoXmlpzoppYgPiBuYWlzaGFzaGlcIDsKK+mbu+S/oeapnyA+IGRlbnNoaW5raVwgOwor5Zyn57iu5qmfID4gYXNzaHVrdWtpXCA7Civlrp/ooYzmqKkgPiBqaWtrb3VrZW5cIDsKK+enkeWtpuiAhSA+IGthZ2FrdXNoYVwgOwor54++6KGM5rOVID4gZ2Vua291aG91XCA7Civoh6rnhLbnlYwgPiBzaGl6ZW5rYWlcIDsKK+aHuOWegue3miA+IGtlbnN1aXNlblwgOwor5LiK5omL6ICFID4gam91enVtb25vXCA7Civml6XmnKzlraYgPiBuaWhvbmdha3VcIDsKK+aOkumanOWZqCA+IGhhaXNob3VraVwgOwor55yf5aSP5pelID4gbWFuYXRzdWJpXCA7CivmhJ/nhKHph48gPiBrYW5tdXJ5b3VcIDsKK+e1puS7mOmHkSA+IGt5dXVmdWtpblwgOwor5Luj5ZCN6KmeID4gZGFpbWVpc2hpXCA7CivmlZHliqnoiLkgPiBreXV1am9zZW5cIDsKK+eJveW8lei7iiA+IGtlbicnaW5zaGFcIDsKK+WxheS9j+aApyA+IGt5b2p1dXNlaVwgOwor5oqX5Yed5Zu6ID4ga291Z3lvdWtvXCA7CivnnIvorbfplbcgPiBrYW5nb2Nob3VcIDsKK+S9juaAp+iDvSA+IHRlaXNlaW5vdVwgOwor54Sh6KiI55S7ID4gbXVrZWlrYWt1XCA7CivlpJrpnaLop5IgPiB0YW1lbmtha3VcIDsKK+S9juWRqOazoiA+IHRlaXNodXVoYVwgOwor55CG5oOz6YO3ID4gcmlzb3VreW91XCA7CivooqvniIbogIUgPiBoaWJha3VzaGFcIDsKK+eyvuijveezliA+IHNlaXNlaXRvdVwgOwor5YyW5a2m5oimID4ga2FnYWt1c2VuXCA7CivmnInnlKjmgKcgPiB5dXV5b3VzZWlcIDsKK+Wor+alveihlyA+IGdvcmFrdWdhaVwgOwor5b6M5aSp5oCnID4ga291dGVuc2VpXCA7CivmoKHlj4vkvJogPiBrb3V5dXVrYWlcIDsKK+WNmOWIqeihqCA+IHRhbnJpaHlvdVwgOwor55mC6aSK5omAID4gcnlvdXlvdWpvXCA7Civkv53lrojnmoQgPiBob3NodXRla2lcIDsKK+eah+awkeWFmiA+IGtvdW1pbnRvdVwgOwor5LqM6YeN5ZSxID4gbmlqdXVzaG91XCA7CivlhY3nqI7lupcgPiBtZW56ZWl0ZW5cIDsKK+WNteiDjueUnyA+IHJhbnRhaXNlaVwgOwor57ea6aaZ5LujID4gc2Vua291ZGFpXCA7Civlr77op5LljJYgPiB0YWlrYWt1a2FcIDsKK+acgOmrmOeCuSA+IHNhaWtvdXRlblwgOwor5pyA5L2O6ZmQID4gc2FpdGVpZ2VuXCA7CivmrYzlkIjmiKYgPiB1dGFnYXNzZW5cIDsKK+W5s+WSjOizniA+IGhlaXdhc2hvdVwgOwor5pWw5L+C5pWwID4gc3V1a2Vpc3V1XCA7CivmnKjngq3nlLsgPiBtb2t1dGFuZ2FcIDsKK+WGjemZjeiHqCA+IHNhaWtvdXJpblwgOwor5YaN6Kq/5p+7ID4gc2FpY2hvdXNhXCA7Civpq5jph47mp5kgPiBrb3V5YW1ha2lcIDsKK+Wumua7kei7iiA+IHRlaWthc3NoYVwgOwor5Ly85oiR6JyCID4gamlnYWJhY2hpXCA7Civml4vlhYnmgKcgPiBzZW5rb3VzZWlcIDsKK+WQjeaKleaJiyA+IG1laXRvdXNodVwgOwor5o6h566X5oCnID4gc2Fpc2Fuc2VpXCA7CivkvIHmpa3ogIUgPiBraWd5b3VzaGFcIDsKK+mKgOegguWtkCA+IGdpbnN1bmFnb1wgOwor5Zu95YiG5a+6ID4ga29rdWJ1bmppXCA7CivppIrosZrloLQgPiB5b3V0b25qb3VcIDsKK+mdnuWvvuensCA+IGhpdGFpc2hvdVwgOwor5LiN6Yq56Yu8ID4gZnVzaHV1a291XCA7CivkuIDpmaLliLYgPiBpY2hpaW5zZWlcIDsKK+aJi+S7leS6iyA+IHRlc2hpZ290b1wgOwor6IOG5Zqi54KOID4gdGFuJydub3VlblwgOwor5by35omT6ICFID4ga3lvdWRhc2hhXCA7Civopo/nr4TnmoQgPiBraWhhbnRla2lcIDsKK+e+hee0l+e0mSA+IHJhc2hhZ2FtaVwgOwor6ISx6KGj5aC0ID4gZGF0c3Vpam91XCA7CivmlZHliqnntrIgPiBreXV1am9tb3VcIDsKK+W9k+mBuOiAhSA+IHRvdXNlbnNoYVwgOwor5aSq6Zmw5pqmID4gdGFpaW5yZWtpXCA7Civmj5rnvr3onbYgPiBhZ2VoYWNob3VcIDsKK+Wjq+WQm+WtkCA+IHNoaWt1bnNoaVwgOwor6IWw576955uuID4ga29zaGliYW1lXCA7CivniYfkuIDmlrkgPiBrYXRhaXBwb3VcIDsKK+mYv+eJh+eqnyA+IGFoZW5rdXRzdVwgOwor5ZC+5pyo6aaZID4gd2FyZW1va291XCA7CivlpKflnovou4ogPiBvb2dhdGFzaGFcIDsKK+Wkj+Wto+eGsSA+IGtha2luZXRzdVwgOwor5YaF6Zm46ZynID4gbmFpcmlrdW11XCA7CivmpI3lrZfmqZ8gPiBzaG9rdWppa2lcIDsKK+mBiuimp+iIuSA+IHl1dXJhbnNlblwgOwor5Lmz5oi/54KOID4gbnl1dWJvdWVuXCA7CivohLPmjKvlgrcgPiBub3V6YXNob3VcIDsKK+WtpueUn+iqsiA+IGdha3VzZWlrYVwgOwor6JeB5biD5ZujID4gd2FyYWJ1dG9uXCA7CivmipXmqZ/lv4MgPiB0b3VraXNoaW5cIDsKK+mDteS+v+iIuSA+IHl1dWJpbnNlblwgOwor6Z2S5bm05ZujID4gc2VpbmVuZGFuXCA7Civli6flkYrmoYggPiBrYW5rb2t1YW5cIDsKK+WkqeaWh+WPsCA+IHRlbm1vbmRhaVwgOwor6Ieq54S25rOVID4gc2hpemVuaG91XCA7Civnn7PngbDmtJ4gPiBzZWtrYWlkb3VcIDsKK+Wil+WIiuWPtyA+IHpvdWthbmdvdVwgOwor5YaF5aSn6IejID4gbmFpZGFpamluXCA7Civnj77lnKjlnLAgPiBnZW56YWljaGlcIDsKK+aIpui7iumaiiA+IHNlbnNoYXRhaVwgOwor5LqM6YeN5Li4ID4gbmlqdXVtYXJ1XCA7CivphZLpgKDloLQgPiBzaHV6b3Vqb3VcIDsKK+aEm+iqreiAhSA+IGFpZG9rdXNoYVwgOwor55+z54Gw5rC0ID4gc2Vra2Fpc3VpXCA7CivlpKflnLDpnIcgPiBkYWlqaXNoaW5cIDsKK+S4jeaLoeWkpyA+IGZ1a2FrdWRhaVwgOwor5Li75bCO6ICFID4gc2h1ZG91c2hhXCA7Civpq5jokpTntbUgPiB0YWthbWFraWVcIDsKK+iHqueEtuatuyA+IHNoaXplbnNoaVwgOwor5bGF5L2P5ZywID4ga3lvanV1Y2hpXCA7CivmsbrmrbvpmoogPiBrZXNzaGl0YWlcIDsKK+S4u+iEs+iAhSA+IHNodW5vdXNoYVwgOwor6Iie5qW96Z2iID4gYnVnYWt1bWVuXCA7CivprZrku4vpoZ4gPiBneW9rYWlydWlcIDsKK+acgOmrmOaknCA+IHNhaWtvdWtlblwgOwor54ax5rGa5p+TID4gbmV0c3Vvc2VuXCA7CivmgZLmmJ/lubQgPiBrb3VzZWluZW5cIDsKK+iHquWcqOmJpCA+IGppemFpa2FnaVwgOwor56u26LWw6aasID4ga3lvdXNvdWJhXCA7CivlvqHmiYvmtJcgPiBtaXRhcmFzaGlcIDsKK+Wil+W5heWZqCA+IHpvdWZ1a3VraVwgOwor5pel5pys5YG0ID4gbmlob25nYXdhXCA7CivkurrpoZ7lj7IgPiBqaW5ydWlzaGlcIDsKK+iLpuWKtOanmCA+IGt1cm91c2FtYVwgOwor56aA6KuL5pu4ID4gcmluc2Vpc2hvXCA7Civkv7Poq6fluKsgPiBoYWlrYWlzaGlcIDsKK+aFo+eUqOiqniA+IGthbicneW91Z29cIDsKK+Wls+WtpueUnyA+IGpvZ2FrdXNlaVwgOwor6Zu75a2Q566hID4gZGVuc2hpa2FuXCA7CivmorXlpKnnjosgPiBib250ZW4nJ291XCA7CivlkIjmiJDntJkgPiBnb3VzZWlzaGlcIDsKK+m7hOmKhemJsSA+IGtvdWRvdWtvdVwgOwor5Y+45pWZ5Yy6ID4gc2hpa3lvdWt1XCA7Civop6PmlaPmqKkgPiBrYWlzYW5rZW5cIDsKK+mBqem9ouacnyA+IHRla2lyZWlraVwgOwor5aiB5ZqH55qEID4gaWtha3V0ZWtpXCA7CivpioPpgKPlsIQgPiBqdXVyZW5zaGFcIDsKK+WFjeeojuWTgSA+IG1lbnplaWhpblwgOwor6auY5rC05rqWID4ga291c3VpanVuXCA7CivlpKrpmb3lubQgPiB0YWl5b3VuZW5cIDsKK+efs+e0sOW3pSA+IGlzaGl6YWlrdVwgOwor5a+d5bCP5L6/ID4gbmVzaG91YmVuXCA7CivlhrfolLXms5UgPiByZWl6b3Vob3VcIDsKK+mFjeWIhuazlSA+IGhhaWJ1bmhvdVwgOwor6IC9576O55qEID4gdGFuYml0ZWtpXCA7CivmvZzoiKroiYcgPiBzZW5rb3V0ZWlcIDsKK+WQjOeqk+eUnyA+IGRvdXNvdXNlaVwgOwor5pS+5rWq6ICFID4gaG91cm91c2hhXCA7CivnqK7mpoLlv7UgPiBzaHVnYWluZW5cIDsKK+aXqeaYjuaIpiA+IHNvdW1laXNlblwgOwor5b6u56mN5YiGID4gYmlzZWtpYnVuXCA7Civps6XnnrDlm7MgPiBjaG91a2FuenVcIDsKK+Wls+eOi+icgiA+IGpvb3ViYWNoaVwgOwor5aSW5Lqk5a6YID4gZ2Fpa291a2FuXCA7Civmra/ogonngo4gPiBzaGluaWt1ZW5cIDsKK+iHqueEtuaelyA+IHNoaXplbnJpblwgOwor5ryU57+S5aC0ID4gZW5zaHV1am91XCA7CivlsI/puqboibIgPiBrb211Z2lpcm9cIDsKK+mtmuiynemhniA+IGd5b2thaXJ1aVwgOwor5b6p5Y+k6Kq/ID4gZnVra29jaG91XCA7Civlj43nnIHkvJogPiBoYW5zZWlrYWlcIDsKK+eGseW4r+mtmiA+IG5ldHRhaWd5b1wgOwor5Y2Y6JGJ5qmfID4gdGFuJyd5b3VraVwgOwor5omA5pyJ6ICFID4gc2hveXV1c2hhXCA7Civosqnlo7LogIUgPiBoYW5iYWlzaGFcIDsKK+S4u+S6uumhlCA+IHNodWppbmdhb1wgOwor5ruR56i96ICFID4gb2Rva2Vtb25vXCA7CivmsLTpo6LppYkgPiBtaXp1a2lraW5cIDsKK+a1t+S4iuazlSA+IGthaWpvdWhvdVwgOwor54ax5Y+v5aGRID4gbmV0c3VrYXNvXCA7CivljJblrablk4EgPiBrYWdha3VoaW5cIDsKK+WtkOayouWxsSA+IGtvZGFrdXNhblwgOwor5L2Z5rC05ZCQID4geW9zdWloYWtpXCA7CivmmKjlubTluqYgPiBzYWt1bmVuZG9cIDsKK+iHqueEtuaVsCA+IHNoaXplbnN1dVwgOwor5YaN6KiC54mIID4gc2FpdGVpYmFuXCA7CivpnZLlubTkvJogPiBzZWluZW5rYWlcIDsKK+ePvuWcsOS6uiA+IGdlbmNoaWppblwgOwor5biC6KGX5oimID4gc2hpZ2Fpc2VuXCA7Civmh5DnlpHlv4MgPiBrYWlnaXNoaW5cIDsKK+acneaXpeW9sSA+IGFzYWhpa2FnZVwgOwor6KqY5bCO5by+ID4geXV1ZG91ZGFuXCA7Civosqnlo7LntrIgPiBoYW5iYWltb3VcIDsKK+WFq+eZvuS4hyA+IHlhb3lvcm96dVwgOwor6LKn5LmP5Lq6ID4gYmluYm91bmluXCA7Civlt6XkuovkuK0gPiBrb3VqaWNodXVcIDsKK+eqg+ebl+e9qiA+IHNldHRvdXphaVwgOwor5Y6f6KOB5YikID4gZ2Vuc2FpYmFuXCA7CivngrnngavolqwgPiB0ZW5rYXlha3VcIDsKK+a1t+S4iuaoqSA+IGthaWpvdWtlblwgOwor5YyW5a2m5YmkID4ga2FnYWt1emFpXCA7Civnsr7oo73ms5UgPiBzZWlzZWlob3VcIDsKK+aWueecvOe0mSA+IGhvdWdhbnNoaVwgOwor5Y+X6LOe6ICFID4ganVzaG91c2hhXCA7CivmjqjolqbogIUgPiBzdWlzZW5zaGFcIDsKK+mbquaooeanmCA+IHl1a2ltb3lvdVwgOwor5LiA57Sa5ZOBID4gaWtreXV1aGluXCA7CivmoLzlrZDngrkgPiBrb3VzaGl0ZW5cIDsKK+izvOiyt+iAhSA+IGtvdWJhaXNoYVwgOwor5LiA562J6LOeID4gaXR0b3VzaG91XCA7Civku5blm73kurogPiB0YWtva3VqaW5cIDsKK+epuuawl+a1tCA+IGt1dWtpeW9rdVwgOwor5aSW5Lqk5ZujID4gZ2Fpa291ZGFuXCA7Civln7fooYzpg6ggPiBzaGlra291YnVcIDsKK+eQhuelnuirliA+IHJpc2hpbnJvblwgOwor5Y+X6aiT5paZID4ganVrZW5yeW91XCA7Civli53miYvlhYMgPiBrYXR0ZW1vdG9cIDsKK+ebuOWvvuirliA+IHNvdXRhaXJvblwgOwor5YiK6KGM5LyaID4ga2Fua291a2FpXCA7CivljZHph5HlsZ4gPiBoaWtpbnpva3VcIDsKK+S/neiCsuaWmSA+IGhvaWt1cnlvdVwgOwor57eP6LOH55SjID4gc291c2hpc2FuXCA7CivkvY/msJHnqI4gPiBqdXVtaW56ZWlcIDsKK+Wcp+e4ruWZqCA+IGFzc2h1a3VraVwgOwor5L+457Wm5pelID4gaG91a3l1dWJpXCA7CivooYzmlL/lupwgPiBneW91c2VpZnVcIDsKK+WHpuWls+iGnCA+IHNob2pvbWFrdVwgOwor6ZqP5Ly06ICFID4genVpaGFuc2hhXCA7Civou4rmtbfogIEgPiBrdXJ1bWFlYmlcIDsKK+aCquWuo+S8nSA+IGFrdXNlbmRlblwgOwor5aSa6Z2i55qEID4gdGFtZW50ZWtpXCA7Civlr77miKbou4ogPiB0YWlzZW5zaGFcIDsKK+iLpuWKtOaApyA+IGt1cm91c2hvdVwgOwor5oGQ5aa75a62ID4ga3lvdXNhaWthXCA7CivkuLvlrrDogIUgPiBzaHVzYWlzaGFcIDsKK+WNium5ueawtCA+IGhhbmthbnN1aVwgOwor5a+G6Iiq6ICFID4gbWlra291c2hhXCA7CivkuIDnrYnopqogPiBpdHRvdXNoaW5cIDsKK+azqOmAo+e4hCA+IHNoaW1lbmF3YVwgOwor6KOc5by3562LID4gaG9reW91a2luXCA7CivnnIvmnb/lsYsgPiBrYW5iYW4nJ3lhXCA7CivnpL7lk6Hlr64gPiBzaGFpbnJ5b3VcIDsKK+WRvOWQuOazlSA+IGtva3l1dWhvdVwgOwor5L2T6YeP5ZmoID4gdGFpcnlvdWtpXCA7CivljJblrabkuIogPiBrYWdha3Vqb3VcIDsKK+S8veiXjemzpSA+IGdhcmFuY2hvdVwgOwor5b+D6IeT6YOoID4gc2hpbnpvdWJ1XCA7CivmnIDpq5jls7AgPiBzYWlrb3Vob3VcIDsKK+ertui8quWgtCA+IGtlaXJpbmpvdVwgOwor6YeN5ama6ICFID4ganV1a29uc2hhXCA7CivopoHmkoPmqZ8gPiB5b3VnZWtpa2lcIDsKK+awl+WMlueGsSA+IGtpa2FuZXRzdVwgOwor5pel5pWZ57WEID4gbmlra3lvdXNvXCA7CivkuInnrYnmmJ8gPiBzYW50b3VzZWlcIDsKK+WRveWQjeazlSA+IG1laW1laWhvdVwgOwor5Y+C5Yqg5Zu9ID4gc2Fua2Frb2t1XCA7CivmnKrplovmi5MgPiBtaWthaXRha3VcIDsKK+WGjee3qOaIkCA+IHNhaWhlbnNlaVwgOwor6YCP5rC05oCnID4gdG91c3Vpc2VpXCA7Civlj43lr77oq5YgPiBoYW50YWlyb25cIDsKK+WtpuiKuOWToSA+IGdha3VnZWlpblwgOwor5Ya35YeN6a2aID4gcmVpdG91Z3lvXCA7CivmlZfmrovlhbUgPiBoYWl6YW5oZWlcIDsKK+abuOeUn+irliA+IHNob3NlaXJvblwgOwor5b+X5pyb6ICFID4gc2hpYm91c2hhXCA7CivosqHmlL/pm6MgPiB6YWlzZWluYW5cIDsKK+WItueZjOWJpCA+IHNlaWdhbnphaVwgOwor55m65rOh5YmkID4gaGFwcG91emFpXCA7CivkvJ3lpYfnmoQgPiBkZW5raXRla2lcIDsKK+e1huWJteiGjyA+IGJhbnNvdWtvdVwgOwor5L+d5a2Y5paZID4gaG96b25yeW91XCA7Civnn7PngbDlsqkgPiBzZWtrYWlnYW5cIDsKK+WFteWtpuagoSA+IGhlaWdha2tvdVwgOwor5a+M5bGx55yMID4gdG95YW1ha2VuXCA7Civov5Hku6Plj7IgPiBraW5kYWlzaGlcIDsKK+ipsuW9k+iAhSA+IGdhaXRvdXNoYVwgOwor54K55pWw5Yi2ID4gdGVuc3V1c2VpXCA7Civpq5jnn6XnnIwgPiBrb3VjaGlrZW5cIDsKK+WPo+S4iuabuCA+IGtvdWpvdXNob1wgOwor6Kej5pS+5oSfID4ga2FpaG91a2FuXCA7CivlubPlkoznmoQgPiBoZWl3YXRla2lcIDsKK+iHqumWieeXhyA+IGppaGVpc2hvdVwgOwor6aOy55So5rC0ID4gaW4nJ3lvdXN1aVwgOwor5aSq6Zm95YWJID4gdGFpeW91a291XCA7CivmqYvpoK3kv50gPiBreW91dG91aG9cIDsKK+WPpOabuOW4giA+IGtvc2hvaWNoaVwgOwor5aSp54S25aGpID4gdGVuJyduZW5lblwgOwor5YWs5a6z572qID4ga291Z2FpemFpXCA7Civmt6vlo7Llrr8gPiBpbmJhaXlhZG9cIDsKK+i1t+iri+aWhyA+IGtpc2hvdW1vblwgOwor56KB55uk57ieID4gZ29iYW5qaW1hXCA7Civkv5fkuJbplpMgPiB6b2t1c2VrZW5cIDsKK+eUmOe0jeixhiA+IGFtYW5hdHRvdVwgOwor5Lm+6YWq57SgID4ga2FucmFrdXNvXCA7Civlhrbph5HlraYgPiB5YWtpbmdha3VcIDsKK+WGl+mVt+W6piA+IGpvdWNob3Vkb1wgOwor56eB5a626ZuGID4gc2hpa2FzaHV1XCA7CivluILooZflnLAgPiBzaGlnYWljaGlcIDsKK+WPr+iqreaApyA+IGthZG9rdXNlaVwgOwor5piO56S655qEID4gbWVpaml0ZWtpXCA7CivlpKflm57ou6IgPiBkYWlrYWl0ZW5cIDsKK+WRieacjeW6lyA+IGdvZnVrdXRlblwgOwor5Lit6I+v5Li8ID4gY2h1dWthZG9uXCA7CivlpKfopb/mtIsgPiB0YWlzZWl5b3VcIDsKK+eQhuaDs+eahCA+IHJpc291dGVraVwgOwor5aa75biv6ICFID4gc2FpdGFpc2hhXCA7Civlhavlrp3oj5wgPiBoYXBwb3VzYWlcIDsKK+WPjOi5hOeNuCA+IHNvdXRlaWp1dVwgOwor5Zu95YWo5ZyfID4ga29rdXplbmRvXCA7CivkuozpgLLms5UgPiBuaXNoaW5ob3VcIDsKK+e+veW4g+WboyA+IGhhbmVidXRvblwgOwor6Ieq54S25aKXID4gc2hpemVuem91XCA7CivmmYLku6PliocgPiBqaWRhaWdla2lcIDsKK+a3t+aIkOmFkiA+IGtvbnNlaXNodVwgOwor5YWs5YCN5pWwID4ga291YmFpc3V1XCA7Civlh6bmlrnnrosgPiBzaG9ob3VzZW5cIDsKK+eZjOe0sOiDniA+IGdhbnNhaWJvdVwgOwor57Sv5rib56iOID4gcnVpZ2VuemVpXCA7CivmiYDkvZzkuosgPiBzaG9zYWdvdG9cIDsKK+eEoemZkOWwjyA+IG11Z2Vuc2hvdVwgOwor56qD55uX54qvID4gc2V0dG91aGFuXCA7Civku5XmiYvmoKogPiBzaGl0ZWthYnVcIDsKK+WPo+S4i+aJiyA+IGt1Y2hpYmV0YVwgOwor6YeR5puc5pelID4ga2luJyd5b3ViaVwgOwor5L2O5rC05rqWID4gdGVpc3VpanVuXCA7Civoo73kvZzmiYAgPiBzZWlzYWt1am9cIDsKK+S8neWjsOeuoSA+IGRlbnNlaWthblwgOwor6Zmw5q2m6ICFID4ga2FnZW11c2hhXCA7Civph4/lrZDljJYgPiByeW91c2hpa2FcIDsKK+WlveS4gOWvviA+IGtvdWl0dHN1aVwgOwor5LqL5YuZ5bGAID4gamltdWt5b2t1XCA7Civlia/pvLvohZQgPiBmdWt1YmlrdXVcIDsKK+a1quiyu+eZliA+IHJvdWhpaGVraVwgOwor57Wm6LK755SfID4ga3l1dWhpc2VpXCA7CivnnIzkurrkvJogPiBrZW5qaW5rYWlcIDsKK+S4u+S7u+iAhSA+IHNodW5pbnNoYVwgOwor5YWs55So5paHID4ga291eW91YnVuXCA7CivooYzmlL/ljLogPiBneW91c2Vpa3VcIDsKK+aOqOiWpueKtiA+IHN1aXNlbmpvdVwgOwor5Lit6Led6ZuiID4gY2h1dWt5b3JpXCA7CivlhbHnlKPljJYgPiBreW91c2Fua2FcIDsKK+S8muacn+S4rSA+IGthaWtpY2h1dVwgOwor6YeO55CD5aC0ID4geWFreXV1am91XCA7CivplpHlj6Tps6UgPiBrYW5rb2RvcmlcIDsKK+eUo+ikpeacnyA+IHNhbmpva3VraVwgOwor5Li75bCO5qipID4gc2h1ZG91a2VuXCA7Civli5/ph5HnrrEgPiBib2tpbmJha29cIDsKK+ehrOWPo+iTiyA+IGtvdWtvdWdhaVwgOwor5Y+y6KiY5oqEID4gc2hpa2lzaG91XCA7CivlubTpvaLlsaQgPiBuZW5yZWlzb3VcIDsKK+mgremggumDqCA+IHRvdWNob3VidVwgOwor5pep5aC057GzID4gaGF5YWJhbWFpXCA7Civlj6Poqp7oqLMgPiBrb3Vnb3lha3VcIDsKK+ayueWcp+ioiCA+IHl1YXRzdWtlaVwgOwor5LqM5q+b5L2cID4gbmltb3VzYWt1XCA7CivmpJzns5boqIggPiBrZW50b3VrZWlcIDsKK+iqmOWwjuS9kyA+IHl1dWRvdXRhaVwgOwor55yf5Zub6KeSID4gbWFzaGlrYWt1XCA7CivnlLPlkb3oqJggPiBzaGlubWVpa2lcIDsKK+iEguiCquWxpCA+IHNoaWJvdXNvdVwgOwor54mp5ZOB56iOID4gYnVwcGluemVpXCA7Civps7Pnv4XpkJggPiBob3VzaGl0b3VcIDsKK+WxpOepjembsiA+IHNvdXNla2l1blwgOwor56eS5pmC6KiIID4gYnlvdWRva2VpXCA7Civnj4rnkZrnpIEgPiBzYW5nb3Nob3VcIDsKK+mAo+S9k+ipniA+IHJlbnRhaXNoaVwgOwor5bGB55CG5bGIID4gaGVyaWt1dHN1XCA7CivlkIzmg4XogIUgPiBkb3Vqb3VzaGFcIDsKK+W/l+mhmOiAhSA+IHNoaWdhbnNoYVwgOwor5rWq5Lq655SfID4gcm91bmluc2VpXCA7CivkuI3lj6/pgIYgPiBmdWthZ3lha3VcIDsKK+Wkp+mYquW4giA+IG9vc2FrYXNoaVwgOwor5oSb6Kqt5pu4ID4gYWlkb2t1c2hvXCA7Civlj6/loZHniakgPiBrYXNvYnV0c3VcIDsKK+aWsOmAoOiqniA+IHNoaW56b3Vnb1wgOwor5Y+N5a++6ICFID4gaGFudGFpc2hhXCA7Civpu5LnoILns5YgPiBrdXJvemF0b3VcIDsKK+eOhOexs+iMtiA+IGdlbm1haWNoYVwgOwor5ryU57m55rOVID4gZW4nJ2VraWhvdVwgOwor6Ieo5aC05oSfID4gcmluam91a2FuXCA7CivlgY/opb/poqggPiBoZW5zZWlmdXVcIDsKK+mmmeWRs+aWmSA+IGtvdW1pcnlvdVwgOwor5q2j55Sy5p2/ID4gc2Vpa2FucGFuXCA7Civlr6norbDkvJogPiBzaGluZ2lrYWlcIDsKK+mdkuajruecjCA+IGFvbW9yaWtlblwgOwor5LiN5oSf55eHID4gZnVrYW5zaG91XCA7CivnpoHooZvpmoogPiBraW4nJ2VpdGFpXCA7CivmlL7msLTou4ogPiBob3VzdWlzaGFcIDsKK+iAkOawtOaApyA+IHRhaXN1aXNlaVwgOwor546E6Zai55WqID4gZ2Vua2FuYmFuXCA7CivliY3lpJznpa0gPiB6ZW4nJ3lhc2FpXCA7CivmnIjmoYLlhqAgPiBnZWtrZWlrYW5cIDsKK+S6jOWIgOa1gSA+IG5pdG91cnl1dVwgOwor5omA5pyJ5qipID4gc2hveXV1a2VuXCA7Civlhrflh43ou4ogPiByZWl0b3VzaGFcIDsKK+adpeS8muiAhSA+IHJhaWthaXNoYVwgOwor5LiK562J5ZOBID4gam91dG91aGluXCA7CivojZLnmYLmsrsgPiBhcmFyeW91amlcIDsKK+alveims+irliA+IHJha2thbnJvblwgOwor5YC26IiO5a6XID4ga3VzaGFzaHV1XCA7CivnhKHoqIDliocgPiBtdWdvbmdla2lcIDsKK+WFpeiLkeWIuCA+IG55dXVlbmtlblwgOwor6IWx6Z6Y54KOID4ga2Vuc2hvdWVuXCA7Civpq5jlubTogIUgPiBrb3VuZW5zaGFcIDsKK+aOoua1t+eBryA+IHRhbmthaXRvdVwgOwor54Sh6KaP5b6LID4gbXVraXJpdHN1XCA7CivlvaLlrrnoqZ4gPiBrZWl5b3VzaGlcIDsKK+WyqembsumbgCA+IGl3YWhpYmFyaVwgOwor5b6S56u26LWwID4gdG9reW91c291XCA7CivkuI3miKbli50gPiBmdXNlbnNob3VcIDsKK+iHqueEtuS6uiA+IHNoaXplbmppblwgOwor5a625bqt55qEID4ga2F0ZWl0ZWtpXCA7Civpq5jmsJflnKcgPiBrb3VraWF0c3VcIDsKK+a7keeoveacrCA+IGtva2tlaWJvblwgOwor5aWz5a2Q5a+uID4gam9zaGlyeW91XCA7CivmlL/msrvnmoQgPiBzZWlqaXRla2lcIDsKK+S4iuetieWFtSA+IGpvdXRvdWhlaVwgOwor5Y6f56i/57SZID4gZ2Vua291c2hpXCA7CivoibLnnLzpj6EgPiBpcm9tZWdhbmVcIDsKK+alveitnOWPsCA+IGdha3VmdWRhaVwgOwor5Ya35rC05aGKID4gcmVpc3Vpa2FpXCA7Civkv53orbfoibIgPiBob2dvc2hva3VcIDsKK+iJsuWPjuW3riA+IGlyb3NodXVzYVwgOwor576O6KGT5a62ID4gYmlqdXRzdWthXCA7Civlho3oqZXkvqEgPiBzYWloeW91a2FcIDsKK+ertuS6iemmrCA+IGt5b3Vzb3ViYVwgOwor5rqW5YKZ5LitID4ganVuYmljaHV1XCA7CivlhYnlkIjmiJAgPiBrb3Vnb3VzZWlcIDsKK+aCquadoeS7tiA+IGFrdWpvdWtlblwgOwor5LiJ5oKq6LajID4gc2FuYWt1c2h1XCA7CivkuLvnlKPlnLAgPiBzaHVzYW5jaGlcIDsKK+iytOaWueOAhSA+IGFuYXRhZ2F0YVwgOwor5be756mN6ZuyID4ga2Vuc2VraXVuXCA7CivluIznoavphbggPiBraXJ5dXVzYW5cIDsKK+iEseepgOapnyA+IGRha2tva3VraVwgOwor6byO6KuH5LyaID4gdGVpZGFua2FpXCA7CivopIfmnKzkvY0gPiBmdWt1aG9uJydpXCA7Civkv5fotqPlkbMgPiB6b2t1c2h1bWlcIDsKK+e1guatouespiA+IHNodXVzaGlmdVwgOwor57K+6KO95ZOBID4gc2Vpc2VpaGluXCA7CivmhrLlhbXpmoogPiBrZW5wZWl0YWlcIDsKK+mFjeWBtuiAhSA+IGhhaWd1dXNoYVwgOwor5YWF5b2T6YeRID4ganV1dG91a2luXCA7CivmtojngavmoJMgPiBzaG91a2FzZW5cIDsKK+WvhOeVmeiAhSA+IGtpcnl1dXNoYVwgOwor54Gw56We5qW9ID4gaGFpa2FndXJhXCA7CivkuI3ph4/oposgPiBmdXJ5b3VrZW5cIDsKK+mHkeS4gOWwgSA+IGtpbicnaXBwdXVcIDsKK+W6iumBi+WLlSA+IHl1a2F1bmRvdVwgOwor5a+E55Sf6JmrID4ga2lzZWljaHV1XCA7CivkuInnrYnliIYgPiBzYW50b3VidW5cIDsKK+WWq+awtOe3miA+IGtpc3N1aXNlblwgOwor5oKq546J5YyWID4gYWt1ZGFtYWthXCA7CivotoXnsKHmmJMgPiBjaG91a2FuJydpXCA7CivmiK/kvZzogIUgPiBnZXNha3VzaGFcIDsKK+mdkueToueuqiA+IGFvYnlvdXRhblwgOwor5oKj6ICF5qeYID4ga2FuamFzYW1hXCA7CivkupTlr7jph5ggPiBnb3N1bmt1Z2lcIDsKK+S7rueZu+iomCA+IGthcml0b3VraVwgOwor5ZCI5ZCM6LuNID4gZ291ZG91Z3VuXCA7CivpnZ7nj77mpa0gPiBoaWdlbmd5b3VcIDsKK+WLpOWKtOiAhSA+IGtpbnJvdXNoYVwgOwor5Zu65a6a6ZW3ID4ga290ZWljaG91XCA7Civmrrroj4zliaQgPiBzYWtraW56YWlcIDsKK+a0i+acjeWxiyA+IHlvdWZ1a3V5YVwgOwor6LW354iG5YmkID4ga2liYWt1emFpXCA7CivooajnpLrnga8gPiBoeW91aml0b3VcIDsKK+S+v+WIqeW4syA+IGJlbnJpY2hvdVwgOwor5Y+W5p2Q54+tID4gc2h1emFpaGFuXCA7CivohILogqrkvZMgPiBzaGlib3V0YWlcIDsKK+mDteS+v+WxiyA+IHl1dWJpbicneWFcIDsKK+S4rei+nuWFuCA+IGNodXVqaXRlblwgOwor5rSX6Z2i5Y+wID4gc2VubWVuZGFpXCA7CivlhoXoo4/pm5sgPiBkYWlyaWJpbmFcIDsKK+WFqOS6jOmHjSA+IHplbicnbmlqdXVcIDsKK+a6tuino+aApyA+IHlvdWthaXNlaVwgOwor5pW05pWw6KuWID4gc2Vpc3V1cm9uXCA7CivmsJHnpL7lhZogPiBtaW5zaGF0b3VcIDsKK+S8geeUu+abuCA+IGtpa2FrdXNob1wgOwor55Sf5Zyw542EID4gaWtpamlnb2t1XCA7CivntJTnsbPphZIgPiBqdW5tYWlzaHVcIDsKK+WbnumBiumtmiA+IGthaXl1dWd5b1wgOwor54Sh6Zai5b+DID4gbXVrYW5zaGluXCA7Civlj4vkurrplpMgPiB5dXVqaW5rYW5cIDsKK+acieaWkOmWoyA+IHl1dWhpa2FrdVwgOwor6LKp5aOy5bqXID4gaGFuYmFpdGVuXCA7Civlv5fmnJvmoKEgPiBzaGlib3Vrb3VcIDsKK+Wliei/jumWgCA+IGhvdWdlaW1vblwgOwor6Z2i5Lya5Lq6ID4gbWVua2FpbmluXCA7CivkuIDnrofmnIggPiBpa2thZ2V0c3VcIDsKK+mAgeawtOeuoSA+IHNvdXN1aWthblwgOwor5Ya35YeN6Ii5ID4gcmVpdG91c2VuXCA7CivlubTphY3ogIUgPiBuZW5wYWlzaGFcIDsKK+aJi+aVsOaWmSA+IHRlc3V1cnlvdVwgOwor6Zui6a2C55eFID4gcmlrb25ieW91XCA7CivmsLTkuK3oirEgPiBzdWljaHV1a2FcIDsKK+WLleWQjeipniA+IGRvdW1laXNoaVwgOwor6buE6YeR6ImyID4ga29nYW5laXJvXCA7CivkuozlhYPnmoQgPiBuaWdlbnRla2lcIDsKK+e4nuagl+m8oCA+IHNoaW1hcmlzdVwgOwor5aiv5qW95aC0ID4gZ29yYWt1am91XCA7CivpgYropqflnLAgPiB5dXVyYW5jaGlcIDsKK+acrOWboOWdiiA+IGhvbicnaW5ib3VcIDsKK+WFseaghOWcjyA+IGt5b3VlaWtlblwgOwor55u45a++5q27ID4gYWl0YWlqaW5pXCA7Civlm73oh6rmhaIgPiBrdW5pamltYW5cIDsKK+mHjeWkp+imliA+IGp1dWRhaXNoaVwgOwor5LyB5qWt5YaFID4ga2lneW91bmFpXCA7CivlkIznqpPkvJogPiBkb3Vzb3VrYWlcIDsKK+azleiTruiNiSA+IGhvdXJlbnNvdVwgOwor5rW35aSW54mIID4ga2FpZ2FpYmFuXCA7CivmiYfnirblnLAgPiBzZW5qb3VjaGlcIDsKK+aJk+aSg+aIpiA+IGRhZ2VraXNlblwgOwor6YCP5YaZ57SZID4gdG91c2hhc2hpXCA7Civkurrmloflj7IgPiBqaW5idW5zaGlcIDsKK+aMh+WumuWIuCA+IHNoaXRlaWtlblwgOwor6aaZ5rC055O2ID4ga291c3VpYmluXCA7CivnhrHluK/nl4UgPiBuZXRhaWJ5b3VcIDsKK+S8neiomOeJqSA+IGRlbmtpbW9ub1wgOwor6KiI6YeP5ZmoID4ga2VpcnlvdWtpXCA7Civoo5zlhJ/ph5EgPiBob3Nob3VraW5cIDsKK+i7veeKr+e9qiA+IGtlaWhhbnphaVwgOwor6Zyw5by+6YqDID4gc2FuZGFuanV1XCA7CivlkIjmhrLmgKcgPiBnb3VrZW5zZWlcIDsKK+WcsOmOruelrSA+IGppY2hpbnNhaVwgOwor5Li75L2T5oCnID4gc2h1dGFpc2VpXCA7CivntKDnspLlrZAgPiBzb3J5dXVzaGlcIDsKK+Wlh+m6l+S6iyA+IGtpcmVpZ290b1wgOwor6J2/5Zyw542EID4gaGFlamlnb2t1XCA7CivlpKfngb3lrrMgPiBkYWlzYWlnYWlcIDsKK+alveWkqeWutiA+IHJha3V0ZW5rYVwgOwor55CG5oCn55qEID4gcmlzZWl0ZWtpXCA7CivpvJPnrJvpmoogPiBrb3Rla2l0YWlcIDsKK+WvkuaaluioiCA+IGthbmRhbmtlaVwgOwor6Iqx57KJ55eHID4ga2FmdW5zaG91XCA7CivkurrngrrnmoQgPiBqaW4nJ2l0ZWtpXCA7Civlj5fpoJjogIUgPiBqdXJ5b3VzaGFcIDsKK+S8geeUu+aApyA+IGtpa2FrdXNlaVwgOwor5YaF6ZyA5Z6LID4gbmFpanVnYXRhXCA7Civljp/miJDlsqkgPiBnZW5zZWlnYW5cIDsKK+ihqOekuuadvyA+IGh5b3VqaWJhblwgOwor5rC45LmF5q2vID4gZWlreXV1c2hpXCA7CivljYPnpL7mnK0gPiBzZW5qYWZ1ZGFcIDsKK+iPqeaPkOW/gyA+IGJvZGFpc2hpblwgOwor6KGo56S65pu4ID4gaHlvdWppc2hvXCA7Civnsr7nrpfmm7ggPiBzZWlzYW5zaG9cIDsKK+aUvuawtOeuoSA+IGhvdXN1aWthblwgOwor5Y+M5a2Q6JGJID4gc291c2hpeW91XCA7CivmgKfou6Lmj5sgPiBzZWl0ZW5rYW5cIDsKK+i8uOmAgemHjyA+IHl1c291cnlvdVwgOwor5omA5pyJ5ZywID4gc2hveXV1Y2hpXCA7CivpvJPmiYvplbcgPiBrb3NodWNob3VcIDsKK+e3j+acrOW6lyA+IHNvdWhvbnRlblwgOwor5YWD5rCX6ICFID4gZ2Vua2ltb25vXCA7Civku6PlvIHogIUgPiBkYWliZW5zaGFcIDsKK+eUuuWMu+iAhSA+IG1hY2hpaXNoYVwgOwor6KO95p2Q5omAID4gc2VpemFpc2hvXCA7Civlj43kubHou40gPiBoYW5yYW5ndW5cIDsKK+e3j+S6uuWPoyA+IHNvdWppbmtvdVwgOwor5bqX5LuV6IieID4gbWlzZWppbWFpXCA7CivkuK3kv53ogIUgPiBjaHV1aG9zaGFcIDsKK+eri+azleiAhSA+IHJpcHBvdXNoYVwgOwor6I2J55u45pKyID4ga3VzYXp1bW91XCA7CivkuojlgpnpjKggPiB5b2JpaWthcmlcIDsKK+atk+mAgeS8miA+IGthbnNvdWthaVwgOwor5Y+M57+F6aGeID4gc291c2hpcnVpXCA7CivntJnntLDlt6UgPiBrYW1pemFpa3VcIDsKK+WxseawtOiNmCA+IHNhbnN1aXNvdVwgOwor6KGo5rKZ5rGwID4gb21vdGV6YXRhXCA7CivllJDnjYXlrZAgPiBrYXJhamlzaGlcIDsKK+W5s+WSjOWbvSA+IGhlaXdha29rdVwgOwor5L2O5rCX5ZynID4gdGVpa2lhdHN1XCA7CivkvZzmpa3nlKggPiBzYWd5b3V5b3VcIDsKK+awtOWus+WcsCA+IHN1aWdhaWNoaVwgOwor57eP5pys5bGxID4gc291aG9uemFuXCA7CivmvJToqqzlrrYgPiBlbnpldHN1a2FcIDsKK+ebsuiFuOeCjiA+IG1vdWNob3VlblwgOwor56iA56Gr6YW4ID4ga2lyeXV1c2FuXCA7CivpgaPllJDkvb8gPiBrZW50b3VzaGlcIDsKK+S9nOalreePrSA+IHNhZ3lvdWhhblwgOwor5rS75oCn54KtID4ga2Fzc2VpdGFuXCA7CivmnIDlsI/ljJYgPiBzYWlzaG91a2FcIDsKK+S5l+mZjeWgtCA+IGpvdWtvdWpvdVwgOwor5L+X5LiW55WMID4gem9rdXNla2FpXCA7Civmr5vnuZTniakgPiBrZW9yaW1vbm9cIDsKK+W/l+mhmOabuCA+IHNoaWdhbnNob1wgOwor5LiN5q276bOlID4gZnVzaGljaG91XCA7CivmgrLoprPnmoQgPiBoaWthbnRla2lcIDsKK+aIkOWKn+iAhSA+IHNlaWtvdXNoYVwgOwor55yL6K235a2mID4ga2FuZ29nYWt1XCA7CivkuIrlkJHnt5ogPiBqb3Vrb3VzZW5cIDsKK+a2iOeCjuWJpCA+IHNob3VlbnphaVwgOwor5YWs5LyR5pelID4ga291a3l1dWJpXCA7Civnt4/nvbfmpa0gPiBzb3VoaWd5b3VcIDsKK+WGjeaKleizhyA+IHNhaXRvdXNoaVwgOwor5q2M5YqH5aC0ID4ga2FnZWtpam91XCA7CivmtYTmsLTloLQgPiBqb3VzdWlqb3VcIDsKK+awtOiAleazlSA+IHN1aWtvdWhvdVwgOwor5aSn5ryU57+SID4gZGFpZW5zaHV1XCA7Civlrp/muKzlm7MgPiBqaXNzb2t1enVcIDsKK+iGqOW8teW6piA+IGJvdWNob3Vkb1wgOwor5pig5YaZ5bmVID4gZWlzaGFtYWt1XCA7CivkuIrmsLTpgZMgPiBqb3VzdWlkb3VcIDsKK+WFqOS9j+awkSA+IHplbmp1dW1pblwgOwor5rWE5rC05ZywID4gam91c3VpY2hpXCA7CivnlLfmgKfnlKggPiBkYW5zZWl5b3VcIDsKK+WlveWlh+W/gyA+IGtvdWtpc2hpblwgOwor6IKJ5L2T576OID4gbmlrdXRhaWJpXCA7Civlm73lrrbnmoQgPiBrb2trYXRla2lcIDsKK+eKoOeJsueahCA+IGdpc2VpdGVraVwgOwor6YCj5a2Q56qTID4gcmVuamltYWRvXCA7Civnm7jlr77mgKcgPiBzb3V0YWlzZWlcIDsKK+mWouW/g+S6iyA+IGthbnNoaW5qaVwgOwor6JKy5Zuj55quID4gZnV0b25nYXdhXCA7CivljJfmlpfmmJ8gPiBob2t1dG9zZWlcIDsKK+acrOaLoOWcsCA+IGhvbmt5b2NoaVwgOwor6Iie6LiP55eFID4gYnV0b3VieW91XCA7CivlhoXlpJbkurogPiBuYWlnYWlqaW5cIDsKK+S4i+eoruWlsyA+IGdlc3VvbicnbmFcIDsKK+i1pOmbu+i7iiA+IGFrYWRlbnNoYVwgOwor57KY5p2/5bKpID4gbmVuYmFuZ2FuXCA7Civkuovmpa3ogIUgPiBqaWd5b3VzaGFcIDsKK+atk+i/juS8miA+IGthbmdlaWthaVwgOwor6KiX5YWQ5omAID4gdGFrdWppc2hvXCA7Civkv53oqLzph5EgPiBob3Nob3VraW5cIDsKK+eMqeOAhee3iyA+IHNob3Vqb3VoaVwgOwor5rC05pmC6KiIID4gbWl6dWRva2VpXCA7Civnm7LlsI7niqwgPiBtb3Vkb3VrZW5cIDsKK+iyqeWjsuS6uiA+IGhhbmJhaW5pblwgOwor5Lq65Zu96KiYID4gamlua29rdWtpXCA7Civmma7lj4rniYggPiBmdWt5dXViYW5cIDsKK+WNiumDqOaXjyA+IGhhbmJ1em9rdVwgOwor6aOb6YGT5YW3ID4gdG9iaWRvdWd1XCA7CivkurrplpPnlYwgPiBuaW5nZW5rYWlcIDsKK+S5s+avjei7iiA+IHViYWd1cnVtYVwgOwor5oOo5q275L2TID4gemFuc2hpdGFpXCA7CivpgYvmkKzkurogPiB1bnBhbicnbmluXCA7CivmipfnlJ/liaQgPiBrb3VzZWl6YWlcIDsKK+S4lui/t+iogCA+IHlvbWFpZ290b1wgOwor5Lyd6KiA5p2/ID4gZGVuZ29uYmFuXCA7Civoh6rnq4voqp4gPiBqaXJpdHN1Z29cIDsKK+eGseW4r+aelyA+IG5ldHRhaXJpblwgOwor5rC45LmF5oCnID4gZWlreXV1c2VpXCA7Civoo73mnKzlsYsgPiBzZWlob24nJ3lhXCA7Civmsb3ou4ros4MgPiBraXNoYWNoaW5cIDsKK+emgeijj+anmCA+IGtpbnJpc2FtYVwgOwor5oWj55So5Y+lID4ga2FuJyd5b3VrdVwgOwor6Kaz5YWJ5ZywID4ga2Fua291Y2hpXCA7CivkvJropovogIUgPiBrYWlrZW5zaGFcIDsKK+adseWkqee0hSA+IHRvdXRlbmtvdVwgOwor6Kaz5YWJ5ZujID4ga2Fua291ZGFuXCA7CivmioDlt6fnmoQgPiBnaWtvdXRla2lcIDsKK+alvemaoOWxhSA+IHJha3Vpbmt5b1wgOwor6auY6YCf5bqmID4ga291c29rdWRvXCA7Civnp4HnlJ/lrZAgPiBzaGlzZWlzaGlcIDsKK+aXpeiomOW4syA+IG5pa2tpY2hvdVwgOwor5pS/5rK75a2mID4gc2VpamlnYWt1XCA7CivmsLTnkIblraYgPiBzdWlyaWdha3VcIDsKK+avjeWtkOWvriA+IGJvc2hpcnlvdVwgOwor552A5b+D5ZywID4ga2lnb2tvY2hpXCA7CivmiJLljrPku6QgPiBrYWlnZW5yZWlcIDsKK+aKleS4jumHjyA+IHRvdXlvcnlvdVwgOwor5ZO65Lmz6aGeID4gaG9ueXV1cnVpXCA7CivlpKfonZnonaAgPiBvb2tvdW1vcmlcIDsKK+eEoeaKleelqCA+IG11dG91aHlvdVwgOwor5oyH5LqG5ZuzID4gc2hpcnlvdXp1XCA7Civpganlv5zmgKcgPiB0ZWtpb3VzZWlcIDsKK+WbnumAgei7iiA+IGthaXNvdXNoYVwgOwor5ryr5omN5birID4gbWFuemFpc2hpXCA7CivoirHngavluKsgPiBoYW5hYmlzaGlcIDsKK+S6i+alreeojiA+IGppZ3lvdXplaVwgOwor5Y+O5a655omAID4gc2h1dXlvdWpvXCA7Civlm73nkr3mm7ggPiBrb2t1amlzaG9cIDsKK+aEn+immuWZqCA+IGthbmtha3VraVwgOwor5pWZ6IKy6LK7ID4ga3lvdWlrdWhpXCA7Civlm7rlrprntaYgPiBrb3RlaWt5dXVcIDsKK+Wxleimp+S8miA+IHRlbnJhbmthaVwgOwor5Lqk5Luj5Yi2ID4ga291dGFpc2VpXCA7Civlt6HoppboiYcgPiBqdW5zaGl0ZWlcIDsKK+W3oeimluiIuSA+IGp1bnNoaXNlblwgOwor5rGO6Zai5pWwID4gaGFua2Fuc3V1XCA7CivlhajkurrnlJ8gPiB6ZW5qaW5zZWlcIDsKK+aWreW8t+W6piA+IGRhbmt5b3Vkb1wgOwor5Yem5aWz5L2cID4gc2hvam9zYWt1XCA7CivlgIvmgKfnmoQgPiBrb3NlaXRla2lcIDsKK+WFqOmfs+majiA+IHplbicnb25rYWlcIDsKK+WPjeS5seiAhSA+IGhhbnJhbnNoYVwgOwor6Lu96Z+z5qW9ID4ga2Vpb25nYWt1XCA7Civpkb/lsqnmqZ8gPiBzYWt1Z2Fua2lcIDsKK+WbnuW+qeacnyA+IGthaWZ1a3VraVwgOwor5LiN5ZCI5qC8ID4gZnVnb3VrYWt1XCA7Civlkajms6LoqIggPiBzaHV1aGFrZWlcIDsKK+S4jeWPr+asoCA+IGZ1a2FrZXRzdVwgOwor56Gs5YyW55eHID4ga291a2FzaG91XCA7CivpgIblirnmnpwgPiBneWFra291a2FcIDsKK+S4gOetieWbvSA+IGl0dG91a29rdVwgOwor5YWo5bCB5ZywID4gemVuaG91Y2hpXCA7CivliIbphY3ph5EgPiBidW5wYWlraW5cIDsKK+WbnumBiuiIuSA+IGthaXl1dXNlblwgOwor5YWs5Lya5aCCID4ga291a2FpZG91XCA7CivnhKHooajmg4UgPiBtdWh5b3Vqb3VcIDsKK+awtOmkg+WtkCA+IHN1aWd5b3V6YVwgOwor6aKo5Zyf55eFID4gZnV1ZG9ieW91XCA7CivpgIPpgb/nmoQgPiB0b3VoaXRla2lcIDsKK+WPpOaWh+WtpiA+IGtvYnVuZ2FrdVwgOwor5YSq562J55SfID4geXV1dG91c2VpXCA7Civlm7rlrprnpaggPiBrb3RlaWh5b3VcIDsKK+WvvuWQkei7iiA+IHRhaWtvdXNoYVwgOwor5LqL5qWt55WMID4gamlneW91a2FpXCA7CivmibnliKTnmoQgPiBoaWhhbnRla2lcIDsKK+WkqeWcsOS6uiA+IHRlbmNoaWppblwgOwor6KGA57Wx5pu4ID4ga2V0dG91c2hvXCA7CivkuK3kuozpmo4gPiBjaHV1bmlrYWlcIDsKK+WxseiRoeiQhCA+IHlhbWFidWRvdVwgOwor6buE6YGT6Z2iID4ga291ZG91bWVuXCA7Civlj5fpm6PpgLEgPiBqdW5hbnNodXVcIDsKK+WwiuWOs+atuyA+IHNvbmdlbnNoaVwgOwor6ICD5Y+k5a2mID4ga291a29nYWt1XCA7Civkv53pmbroqLwgPiBob2tlbnNob3VcIDsKK+mrmOWIhuWtkCA+IGtvdWJ1bnNoaVwgOwor5Yal5Yqg6YeRID4gbXlvdWdha2luXCA7CivlhoXlnLDnsbMgPiBuYWljaGltYWlcIDsKK+aer+iRieWJpCA+IGthcmVoYXphaVwgOwor5oub5b6F5pelID4gc2hvdXRhaWJpXCA7CivoqpPpoZjmqKkgPiBzZWlnYW5rZW5cIDsKK+aEm+WbveiAhSA+IGFpa29rdXNoYVwgOwor6Ki06aGY5Lq6ID4gc29nYW4nJ25pblwgOwor6aCY5LqL6aSoID4gcnlvdWppa2FuXCA7CivkuLvniq/ogIUgPiBzaHVoYW5zaGFcIDsKK+mYsuitt+WjgSA+IGJvdWdvaGVraVwgOwor6LOH6YeR5rqQID4gc2hpa2luZ2VuXCA7CivpvKDlkqznl4cgPiBzb2tvdXNob3VcIDsKK+S4iemHjeeblyA+IHNhbmp1dXRvdVwgOwor6YCj5L2T5b2iID4gcmVudGFpa2VpXCA7Civnj77mrrXpmo4gPiBnZW5kYW5rYWlcIDsKK+aIkOW5tOiAhSA+IHNlaW5lbnNoYVwgOwor6YeR6Kej56aBID4ga2lua2Fpa2luXCA7Civnvr3lrZDnqoEgPiBoYW5ldHN1a2lcIDsKK+a0l+a/r+eyiSA+IHNlbnRha3Vrb1wgOwor5YWJ5YyW5a2mID4ga291a2FnYWt1XCA7CivovrLlrabpg6ggPiBub3VnYWt1YnVcIDsKK+S4u+S7u+WItiA+IHNodW5pbnNlaVwgOwor6Iie6LiP5pyNID4gYnV0b3VmdWt1XCA7CivntYzpqJPoq5YgPiBrZWlrZW5yb25cIDsKK+e1jOmok+irhyA+IGtlaWtlbmRhblwgOwor5pOm6YGO5YK3ID4gc2Fra2FzaG91XCA7Civlho3oo73lk4EgPiBzYWlzZWloaW5cIDsKK+Wbm+mHjeWljyA+IHNoaWp1dXNvdVwgOwor55u45a++5YCkID4gc291dGFpY2hpXCA7Civmr43lrZDlhbEgPiBib3NoaXRvbW9cIDsKK+mJhOeBq+W3uyA+IHRla2thbWFraVwgOwor6Iux5L2c5paHID4gZWlzYWt1YnVuXCA7CivmiKbou4rlhbUgPiBzZW5zaGFoZWlcIDsKK+WGjeaKleeovyA+IHNhaXRvdWtvdVwgOwor5pWZ6aSK6YOoID4ga3lvdXlvdWJ1XCA7Civnq4vms5XmqKkgPiByaXBwb3VrZW5cIDsKK+WmpeWNlOeCuSA+IGRha3lvdXRlblwgOwor6Zuy5LuZ5bKzID4gdW56ZW5kYWtlXCA7Civlj5fpoJjmm7ggPiBqdXJ5b3VzaG9cIDsKK+S4jea0u+WMliA+IGZ1a2F0c3VrYVwgOwor5paH56ug6KqeID4gYnVuc2hvdWdvXCA7CivpnZLkv6Hlj7cgPiBhb3NoaW5nb3VcIDsKK+aZguioiOeavyA+IHRva2VpemFyYVwgOwor5bm95Yal55WMID4geXV1bWVpa2FpXCA7Civln7fooYzlkI8gPiBzaGlra291cmlcIDsKK+etiemrmOe3miA+IHRvdWtvdXNlblwgOwor57We6aaW5Y+wID4ga291c2h1ZGFpXCA7CivnoLTmk6bpn7MgPiBoYXNhdHN1b25cIDsKK+mAgeWPl+S/oSA+IHNvdWp1c2hpblwgOwor5LiA56We6KuWID4gaXNzaGlucm9uXCA7CivnnYDpgZPmpb0gPiBraWRvdXJha3VcIDsKK+aYjuW+jOW5tCA+IG15b3Vnb25lblwgOwor5rOV5YuZ55yBID4gaG91bXVzaG91XCA7CivphbXntKDlraYgPiBrb3Vzb2dha3VcIDsKK+a3t+WQiOmFkiA+IGtvbmdvdXNodVwgOwor5Zuz5YOP5a2mID4genV6b3VnYWt1XCA7CivlpYnliqDluLMgPiBob3VnYWNob3VcIDsKK+aEn+WYhuipniA+IGthbnRhbnNoaVwgOwor5YmN5aOy5Yi4ID4gbWFldXJpa2VuXCA7Civlv5fpoZjlhbUgPiBzaGlnYW5oZWlcIDsKK+WPjeWwhOWFiSA+IGhhbnNoYWtvdVwgOwor55qu57Sw5belID4ga2F3YXphaWt1XCA7CivlvqnmsLTlmaggPiBmdWt1c3Vpa2lcIDsKK+mWoumAo+aApyA+IGthbnJlbnNlaVwgOwor57Wx6Kqe5a2mID4gdG91Z29nYWt1XCA7CivmmbTnnLzogIUgPiBzZWlnYW5zaGFcIDsKK+ism+a8lOaWmSA+IGtvdWVucnlvdVwgOwor5pWs6ICB5LyaID4ga2Vpcm91a2FpXCA7CivmmYLplpPou7ggPiBqaWthbmppa3VcIDsKK+WPjeWvvuWFmiA+IGhhbnRhaXRvdVwgOwor5pCt5LmX6ICFID4gdG91am91c2hhXCA7CivnpL7msJHlhZogPiBzaGFtaW50b3VcIDsKK+e1nummluWIkSA+IGtvdXNodWtlaVwgOwor5Ym15bu66ICFID4gc291a2Vuc2hhXCA7CivmnIDlpKfpmZAgPiBzYWlkYWlnZW5cIDsKK+alk+WtkOmmmSA+IGZ1dXNoaWtvdVwgOwor5re35oiQ5bKpID4ga29uc2VpZ2FuXCA7CivntJnnspjlnJ8gPiBrYW1pbmVuZG9cIDsKK+adoeS7tuaWhyA+IGpvdWtlbmJ1blwgOwor5oSP6K2Y5L2TID4gaXNoaWtpdGFpXCA7Civnp4HkvIHmpa0gPiBzaGlraWd5b3VcIDsKK+epuuaooeanmCA+IHNvcmFtb3lvdVwgOwor5YWs5pyJ5p6XID4ga291eXV1cmluXCA7CivlsbHmsLTmpbwgPiBzYW5zdWlyb3VcIDsKK+WvhOeVmeWcsCA+IGtpcnl1dWNoaVwgOwor5pat5Ymb5oCnID4gZGFuZ291c2VpXCA7CivnqbrlhYPmsJcgPiBrYXJhZ2Vua2lcIDsKK+aJk+eul+eahCA+IGRhc2FudGVraVwgOwor6YCA6JS15ZOBID4gdGFpem91aGluXCA7CivlvbHpn7/lnI8gPiBlaWt5b3VrZW5cIDsKK+ecn+WWhOe+jiA+IHNoaW56ZW5iaVwgOwor5Luy5L+d6ICFID4gY2h1dWhvc2hhXCA7CivmiYvooZPooaMgPiBzaHVqdXRzdWlcIDsKK+S6uumWk+aEmyA+IG5pbmdlbicnYWlcIDsKK+eQhuefpeeahCA+IHJpY2hpdGVraVwgOwor55Cl54+A6ImyID4ga29oYWt1aXJvXCA7CivlvqHolK3mp5ggPiBva2FnZXNhbWFcIDsKK+avm+e0sOeuoSA+IG1vdXNhaWthblwgOwor55m96IOh6bq7ID4gc2hpcm9nb21hXCA7CivkuLvkurrlhawgPiBzaHVqaW5rb3VcIDsKK+S6uumWk+aApyA+IG5pbmdlbnNlaVwgOwor5Y2Y5a2U6aGeID4gdGFua291cnVpXCA7CivlkIzlirTogIUgPiBkb3Vyb3VzaGFcIDsKK+WNs+aZguaApyA+IHNva3VqaXNlaVwgOwor5Lmz5ZGR5YWQID4gY2hpbm9taWdvXCA7CivkuI3lvrPmvKIgPiBmdXRva3VrYW5cIDsKK+mBremBh+aIpiA+IHNvdWd1dXNlblwgOwor5Y+I5a625p2lID4gbWF0YWdlcmFpXCA7CivmraPmm7jms5UgPiBzZWlzaG9ob3VcIDsKK+eLrOiHquaApyA+IGRva3VqaXNlaVwgOwor5byB6LKh5aSpID4gYmVuemFpdGVuXCA7Civli6Tli5nlhYggPiBraW5tdXNha2lcIDsKK+aMgeS5heaIpiA+IGppa3l1dXNlblwgOwor6YeN6KaB6KaWID4ganV1eW91c2hpXCA7CivnqbrmooXpm6ggPiBrYXJhdHN1eXVcIDsKK+a3t+aIkOWboyA+IGtvbnNlaWRhblwgOwor54Gr5Y+j5aOBID4ga2Frb3VoZWtpXCA7CivmmYLplpPooaggPiBqaWthbmh5b3VcIDsKK+egguWIqemBkyA+IGphcmltaWNoaVwgOwor5Lya6KiI5a6YID4ga2Fpa2Vpa2FuXCA7Civos6Tmpa3lqaYgPiBzZW5neW91ZnVcIDsKK+e1jOmok+iAhSA+IGtlaWtlbnNoYVwgOwor6Z+T5Zu96KqeID4gaGFua29rdWdvXCA7CivmlZnmnZDosrsgPiBreW91emFpaGlcIDsKK+WLneWIqeiAhSA+IHNob3VyaXNoYVwgOwor5r2c5LyP5pyfID4gc2VucHVrdWtpXCA7CivlpKflm6PlhoYgPiBkYWlkYW4nJ2VuXCA7CivljYjliY3mp5ggPiBnb3plbnNhbWFcIDsKK+a1t+a9rumfsyA+IGthaWNob3VvblwgOwor5q2j54qv6ICFID4gc2VpaGFuc2hhXCA7Civlj6/lnKfmgKcgPiBrYWF0c3VzZWlcIDsKK+iIueWkp+W3pSA+IGZ1bmFkYWlrdVwgOwor5Zyf5Zyw5p+EID4gdG9jaGlnYXJhXCA7CivnmbvoiLfnpLwgPiB0b3VnZW5yZWlcIDsKK+aUv+W6nOetiyA+IHNlaWZ1c3VqaVwgOwor5rS75oCn5YmkID4ga2Fzc2VpemFpXCA7Civlj43kvZPliLYgPiBoYW50YWlzZWlcIDsKK+iXu+iPjOmhniA+IHNvdWtpbnJ1aVwgOwor5ruR55+z57KJID4ga2Fzc2VraWtvXCA7Civnt6nooZ3lmaggPiBrYW5zaG91a2lcIDsKK+mzqee+veiJsiA+IGhhdG9iYWlyb1wgOwor6aGV5b6u6Y+hID4ga2VuYmlreW91XCA7CivmuKzlrprlmaggPiBzb2t1dGVpa2lcIDsKK+WQjeW6l+ihlyA+IG1laXRlbmdhaVwgOwor5Yip5LyR6ImyID4gcmlreXV1aXJvXCA7Civlm73kuovniq8gPiBrb2t1amloYW5cIDsKK+a3t+aIkOWTgSA+IGtvbnNlaWhpblwgOwor5YiG6YWN6ICFID4gYnVucGFpc2hhXCA7CivljYrpgI/mmI4gPiBoYW50b3VtZWlcIDsKK+WIhuawtOe3miA+IGJ1bnN1aXNlblwgOwor6YGK5oiv55qEID4geXV1Z2l0ZWtpXCA7Civov5HoppbnnLwgPiBraW5zaGlnYW5cIDsKK+S4u+isgOiAhSA+IHNodWJvdXNoYVwgOwor5Lya6KiI5aOrID4ga2Fpa2Vpc2hpXCA7CivliJ3lubTlhbUgPiBzaG9uZW5oZWlcIDsKK+WQjOW5tOi8qSA+IGRvdW5lbnBhaVwgOwor54+N54Sh6aGeID4gY2hpbm11cnVpXCA7Civnrp3lj6Pku6QgPiBrYW5rb3VyZWlcIDsKK+WQiOazleaApyA+IGdvdWhvdXNlaVwgOwor57eP6aCY5LqLID4gc291cnlvdWppXCA7Civlt57mlL/lupwgPiBzaHV1c2VpZnVcIDsKK+WVhuWLmeWumCA+IHNob3VtdWthblwgOwor5b+c5o6l6ZaTID4gb3VzZXRzdW1hXCA7Civlj4LkvJrogIUgPiBzYW5rYWlzaGFcIDsKK+S6lOS6uue1hCA+IGdvbmluZ3VtaVwgOwor6buE5rC05pm2ID4ga2l6dWlzaG91XCA7CivlhoXoo4/mp5ggPiBkYWlyaXNhbWFcIDsKK+Wkp+ihhuWMliA+IHRhaXNodXVrYVwgOwor6YeN5aSn5oCnID4ganV1ZGFpc2VpXCA7CivlpJblm73oqp4gPiBnYWlrb2t1Z29cIDsKK+WLouWKm+WutiA+IHNlaXJ5b2trYVwgOwor5aOw5qW95a62ID4gc2VpZ2FrdWthXCA7Civoo73pnbTmpa0gPiBzZWlrYWd5b3VcIDsKK+eusemmrOi7iiA+IGhha29iYXNoYVwgOwor5a6u5YaF55yBID4ga3VuYWlzaG91XCA7Civkuovmpa3miYAgPiBqaWd5b3VzaG9cIDsKK+epv+WxseeUsiA+IHNlbnphbmtvdVwgOwor6Ieo5riv57eaID4gcmlua291c2VuXCA7CivllK/lkI3oq5YgPiB5dWltZWlyb25cIDsKK+aUuemAoOi7iiA+IGthaXpvdXNoYVwgOwor6buE6YeR5Zu9ID4gb3Vnb25rb2t1XCA7CivoiovnvornvrkgPiBpbW95b3VrYW5cIDsKK+abtOeUn+WTgSA+IGtvdXNlaWhpblwgOwor6IqL576K576uID4gaW1veW91a2FuXCA7CivluoPlsI/ot68gPiBoaXJva291amlcIDsKK+epuui/lOS6iyA+IHNvcmFoZW5qaVwgOwor6IWQ5qSN5ZyfID4gZnVzaG9rdWRvXCA7CivmrKHlloTnrZYgPiBqaXplbnNha3VcIDsKK+mBoOecvOmPoSA+IHRvb21lZ2FuZVwgOwor5Ym16YCg6ICFID4gc291em91c2hhXCA7CivkvJHpm7vml6UgPiBreXV1ZGVuYmlcIDsKK+adv+mWgOW6lyA+IGhhbm1vbnRlblwgOwor5bCO5YWl6YOoID4gZG91bnl1dWJ1XCA7CivnpoXllY/nrZQgPiB6ZW5tb25kb3VcIDsKK+ikh+aVsOWAiyA+IGZ1a3VzdXVrb1wgOwor55uy5a2m5qChID4gbW91Z2Fra291XCA7CivoqZ7oj6/pm4YgPiBzaGlrYXNodXVcIDsKK+eglOS/ruiqsiA+IGtlbnNodXVrYVwgOwor5by+5oCn5L2TID4gZGFuc2VpdGFpXCA7CivnjK7lkYjmnKwgPiBrZW50ZWlib25cIDsKK+WwvumVt+m2jyA+IG9uYWdhZG9yaVwgOwor5pS+6YCB57ayID4gaG91c291bW91XCA7CivpurvphZTolqwgPiBtYXN1aXlha3VcIDsKK+WNg+W5tOe0gCA+IHNlbicnbmVua2lcIDsKK+WDp+W4veW8gSA+IHNvdWJvdWJlblwgOwor5aSq6byT6IW5ID4gdGFpa29iYXJhXCA7CivliY3oo4XnoLIgPiB6ZW5zb3Vob3VcIDsKK+WIhumBo+maiiA+IGJ1bmtlbnRhaVwgOwor5ZC55aWP6ICFID4gc3Vpc291c2hhXCA7Civlpb3op5LlrrYgPiBrb3VrYWt1a2FcIDsKK+aCquWkqeWAmSA+IGFrdXRlbmtvdVwgOwor5o6o6YCy5qmfID4gc3Vpc2hpbmtpXCA7CivpiaTljYHlrZcgPiBrYWdpanV1amlcIDsKK+S5seawl+a1gSA+IHJhbmtpcnl1dVwgOwor5Ya35YeN5YmkID4gcmVpdG91emFpXCA7CivliJ3lr77pnaIgPiBzaG90YWltZW5cIDsKK+acquWPjui8iSA+IG1pc2h1dXNhaVwgOwor5Zec5aW95ZOBID4gc2hpa291aGluXCA7CivngavnoJXmtYEgPiBrYXNhaXJ5dXVcIDsKK+aCquWkqeS9vyA+IGFrdXRlbnNoaVwgOwor5by35YyW57GzID4ga3lvdWthbWFpXCA7CivmsLTpm7foiYcgPiBzdWlyYWl0ZWlcIDsKK+ims+alk+S8miA+IGthbnB1dWthaVwgOwor5L2T6aiT6KuHID4gdGFpa2VuZGFuXCA7CivnhKHmhJ/oppogPiBtdWthbmtha3VcIDsKK+e+pOmAn+W6piA+IGd1bnNva3Vkb1wgOwor6Zu757eP56CUID4gZGVuc291a2VuXCA7CivkuI3norrlrpogPiBmdWtha3V0ZWlcIDsKK+eZveeZvuWQiCA+IHNoaXJheXVyaVwgOwor6Iie6LiK5YqHID4gYnV5b3VnZWtpXCA7Civngavlj6PkuJggPiBrYWtvdWt5dXVcIDsKK+S4jeato+eiuiA+IGZ1c2Vpa2FrdVwgOwor6Zm95a2Q57eaID4geW91c2hpc2VuXCA7CivmmYLplpPntaYgPiBqaWthbmt5dXVcIDsKK+WIhuawtOeVjCA+IGJ1bnN1aWthaVwgOwor5Lmx5Y+N5bCEID4gcmFuaGFuc2hhXCA7Civop6PnrZTmrIQgPiBrYWl0b3VyYW5cIDsKK+mtmumbt+iJhyA+IGd5b3JhaXRlaVwgOwor5YWs5pyJ5ZywID4ga291eXV1Y2hpXCA7CivmrLrnnp7nmoQgPiBnaW1hbnRla2lcIDsKK+aYjueereW6piA+IG1laXJ5b3Vkb1wgOwor5Lya6KiI5L+CID4ga2Fpa2Vpa2VpXCA7CivovLjlhaXnqI4gPiB5dW55dXV6ZWlcIDsKK+S4jeW/g+W+lyA+IGZ1a29rb3JvZVwgOwor5LqM5qWt5ZywID4gbmlneW91Y2hpXCA7CivljZjlrZDoq5YgPiB0YW5zaGlyb25cIDsKK+iovOaLoOmHkSA+IHNob3Vrb2tpblwgOwor55Sf5ryU5aWPID4gbmFtYWVuc291XCA7Civlvq7liIblraYgPiBiaWJ1bmdha3VcIDsKK+WwguW+k+iAhSA+IHNlbmp1dXNoYVwgOwor5LuZ5Y+w5L6vID4gc2VuZGFpa291XCA7CivlhYTlvJ/mhJsgPiBreW91ZGFpYWlcIDsKK+S4h+iPr+mPoSA+IG1hbmdla3lvdVwgOwor56aB5ryB5pyfID4ga2lucnlvdWtpXCA7CivkurrplpPlg48gPiBuaW5nZW56b3VcIDsKK+WbnuW4sOeahCA+IGthaWtpdGVraVwgOwor5biC5rCR56iOID4gc2hpbWluemVpXCA7Civlr4zlo6vpoY0gPiBmdWppYml0YWlcIDsKK+WFiemAn+W6piA+IGtvdXNva3Vkb1wgOwor6ZaL56Wo5omAID4ga2FpaHlvdWpvXCA7CivkvZPogrLppKggPiB0YWlpa3VrYW5cIDsKK+Wkieiqv+azoiA+IGhlbmNob3VoYVwgOwor5ZCM55uf6LuNID4gZG91bWVpZ3VuXCA7CivlkYroqLTkurogPiBrb2t1c29uaW5cIDsKK+WtpuWjq+mZoiA+IGdha3VzaGlpblwgOwor5YCr55CG55qEID4gcmlucml0ZWtpXCA7CivngrnpvLvolqwgPiB0ZW5iaXlha3VcIDsKK+aKleabuOashCA+IHRvdXNob3JhblwgOwor6Ki06Kif5rOVID4gc29zaG91aG91XCA7Civlm5vljYrliIYgPiBzaGloYW5idW5cIDsKK+WQuOmfs+adkCA+IGt5dXVvbnphaVwgOwor5Yid5L2T6aiTID4gc2hvdGFpa2VuXCA7CivovLjlhaXnm6QgPiB5dW55dXViYW5cIDsKK+S4jeefpeeBqyA+IHNoaXJhbnVoaVwgOwor5Y2157Sw6IOeID4gcmFuc2FpYm91XCA7CivkuozmpbXljJYgPiBuaWt5b2t1a2FcIDsKK+WNl+S6rOmMoCA+IG5hbmtpbmpvdVwgOwor6bOp5pmC6KiIID4gaGF0b2Rva2VpXCA7Civlk7rkubPnk7YgPiBob255dXViaW5cIDsKK+ilv+a0i+miqCA+IHNlaXlvdWZ1dVwgOwor5pei6KO95pyNID4ga2lzZWlmdWt1XCA7Civph47lpJbliocgPiB5YWdhaWdla2lcIDsKK+aZrumBjeeahCA+IGZ1aGVudGVraVwgOwor5LqL5qWt5ZujID4gamlneW91ZGFuXCA7CivlsI/lvbnkurogPiBrb3lha3VuaW5cIDsKK+mzpeWqkuiKsSA+IGNob3ViYWlrYVwgOwor6Ieq5rK76aCYID4gamljaGlyeW91XCA7CivnoLTlo4rnmoQgPiBoYWthaXRla2lcIDsKK+eqruaOquWkpyA+IGt5dXVzb2RhaVwgOwor6YGU56Oo6Ii5ID4gZGFydW1hc2VuXCA7CivlhoXlnKjmgKcgPiBuYWl6YWlzZWlcIDsKK+Wwj+iNt+eJqSA+IGtvbmltb3RzdVwgOwor5pel57O75Lq6ID4gbmlra2VpamluXCA7Civnsr7npZ7np5EgPiBzZWlzaGlua2FcIDsKK+S4gOWQiOebriA+IGljaGlnb3VtZVwgOwor5L2P5bGF6LehID4ganV1a3lvYXRvXCA7Civlho3mipflvIEgPiBzYWlrb3ViZW5cIDsKK+i+suS9nOalrSA+IG5vdXNhZ3lvdVwgOwor6J6i5YWJ54eIID4ga2Vpa291dG91XCA7Civku5jlubTooaggPiBmdW5lbnB5b3VcIDsKK+ato+iqpOihqCA+IHNlaWdvaHlvdVwgOwor5Zub6Lyq6LuKID4geW9ucmluc2hhXCA7Civph5HnsbPns5YgPiBrb25wZWl0b3VcIDsKK+S4iemHjeWljyA+IHNhbmp1dXNvdVwgOwor5L+d6Ki85pu4ID4gaG9zaG91c2hvXCA7CivlkKblrprnmoQgPiBoaXRlaXRla2lcIDsKK+S4jemAo+e2miA+IGZ1cmVuem9rdVwgOwor5q2m5pat55qEID4gYnVkYW50ZWtpXCA7Civlh7rnqYLmnJ8gPiBzaHVzc3Vpa2lcIDsKK+S4iuWNiuacnyA+IGthbWloYW5raVwgOwor5Y2Y5a2Q6JGJID4gdGFuc2hpeW91XCA7Civlvq7liIbllYYgPiBiaWJ1bnNob3VcIDsKK+e+qeWFhOW8nyA+IGdpa3lvdWRhaVwgOwor6KSH57Sg5pWwID4gZnVrdXNvc3V1XCA7Civou6LmoKHnlJ8gPiB0ZW5rb3VzZWlcIDsKK+aYvOWknOW4ryA+IGNodXV5YW9iaVwgOwor5LqL5Lu26KGoID4gamlrZW5oeW91XCA7CivonqLlhYnnga8gPiBrZWlrb3V0b3VcIDsKK+W8t+ehrOa0viA+IGt5b3Vrb3VoYVwgOwor5o6S5rCX6YePID4gaGFpa2lyeW91XCA7CivlpbPmloflrZcgPiBvbicnbmFtb2ppXCA7CivnhKHmiYDlsZ4gPiBtdXNob3pva3VcIDsKK+WRqOazouaVsCA+IHNodXVoYXN1dVwgOwor54yb56a96aGeID4gbW91a2lucnVpXCA7CivnlJ/mhYvns7sgPiBzZWl0YWlrZWlcIDsKK+aVo+aWh+ipqSA+IHNhbmJ1bnNoaVwgOwor5qC95Z+556iuID4gc2FpYmFpc2h1XCA7Civljp/okZfogIUgPiBnZW5jaG9zaGFcIDsKK+mbu+ipseaWmSA+IGRlbndhcnlvdVwgOwor5oqA6IO96LOeID4gZ2lub3VzaG91XCA7Civmlpnph5HmiYAgPiByeW91a2luam9cIDsKK+aUr+mFjeiAhSA+IHNoaWhhaXNoYVwgOwor5rSX5r+v5bGLID4gc2VudGFrdXlhXCA7CivlgbTov5HogIUgPiBzb2traW5zaGFcIDsKK+Wun+ekvuS8miA+IGppc3NoYWthaVwgOwor5b6h6YCj57WhID4gZ29yZW5yYWt1XCA7Civpppnlt53nnIwgPiBrYWdhd2FrZW5cIDsKK+eCuea7tOWZqCA+IHRlbnRla2lraVwgOwor5LqI5a6a6KGoID4geW90ZWloeW91XCA7CivlvIHorbfmlpkgPiBiZW5nb3J5b3VcIDsKK+S4u+imgemnhSA+IHNodXlvdWVraVwgOwor5a++5b+c562WID4gdGFpb3VzYWt1XCA7CivovLjlhaXmuK8gPiB5dW55dXVrb3VcIDsKK+WQjOW/l+S8miA+IGRvdXNoaWthaVwgOwor6L+O5pKD5qmfID4gZ2VpZ2VraWtpXCA7CivkurrlnLDlkI0gPiBqaW5jaGltZWlcIDsKK+S/nemZuuaWmSA+IGhva2VucnlvdVwgOwor5aSn5ZKM6IqLID4geWFtYXRvaW1vXCA7Civpq5jlhKrlhYggPiBrb3V5dXVzZW5cIDsKK+aUvumAgeazlSA+IGhvdXNvdWhvdVwgOwor56S65Yqb5ZuzID4gamlyeW9rdXp1XCA7Civpm6rlpbPpg44gPiB5dWtpam9yb3VcIDsKK+mbtue0sOi+siA+IHJlaXNhaW5vdVwgOwor55yf5riF5rC0ID4gbWFzaGltaXp1XCA7CivliqnlpKrliIAgPiBzdWtlZGFjaGlcIDsKK+WFi+W3seW/gyA+IGtva2tpc2hpblwgOwor6Kit6KiI6ICFID4gc2Vra2Vpc2hhXCA7CivnhKHnpZ7oq5YgPiBtdXNoaW5yb25cIDsKK+acieiii+mhniA+IHl1dXRhaXJ1aVwgOwor5LiA5q666YKjID4gaXNzZXRzdW5hXCA7Civlv4PnkIbmiKYgPiBzaGlucmlzZW5cIDsKK+W+oeattOattCA+IG9yZWtpcmVraVwgOwor5LiN5bmz562JID4gZnVieW91ZG91XCA7CivliKnlsL/liaQgPiByaW55b3V6YWlcIDsKK+e1ueepjembsiA+IGtlbnNla2l1blwgOwor54mn5q2M55qEID4gYm9ra2F0ZWtpXCA7CivmvLjov5Hnt5ogPiB6ZW5raW5zZW5cIDsKK+WtkOWuieiynSA+IGtveWFzdWthaVwgOwor5peF5pel6KiYID4gdGFiaW5pa2tpXCA7Civlo7LkuIrph5EgPiB1cmlhZ2VraW5cIDsKK+WPl+e1puiAhSA+IGp1a3l1dXNoYVwgOwor5piO5bm05bqmID4gbXlvdW5lbmRvXCA7CivkuozmnproiIwgPiBuaW1haWppdGFcIDsKK+S4iemHjeWGoCA+IHNhbmp1dWthblwgOwor6KqY6Zu75a2QID4geXV1ZGVuc2hpXCA7CivplqLkv4LoqZ4gPiBrYW5rZWlzaGlcIDsKK+e0oemMmOW9oiA+IGJvdXN1aWtlaVwgOwor5aWJ5bmj5L2/ID4gaG91aGVpc2hpXCA7CivpnanntLDlt6UgPiBrYXdhemFpa3VcIDsKK+W4guawkeazlSA+IHNoaW1pbmhvdVwgOwor5pyA5pWs56S8ID4gc2Fpa2VpcmVpXCA7Civoi6blrabnlJ8gPiBrdWdha3VzZWlcIDsKK+W+l+aEj+WFiCA+IHRva3Vpc2FraVwgOwor6Zuo5LuV5bqmID4gYW1haml0YWt1XCA7Civlkajms6LluK8gPiBzaHV1aGF0YWlcIDsKK+euoeWItuWumCA+IGthbnNlaWthblwgOwor54eD5paZ6LK7ID4gbmVucnlvdWhpXCA7CivlubTovKnogIUgPiBuZW5wYWlzaGFcIDsKK+mHj+iomOWPtyA+IHJ5b3VraWdvdVwgOwor55m65YWJ5L2TID4gaGFra291dGFpXCA7CivljYrlhoblvaIgPiBoYW4nJ2Vua2VpXCA7CivlhobomavpoZ4gPiBlbmNodXVydWlcIDsKK+aHuOaDs+aWhyA+IGtlc291YnVtaVwgOwor5qSc5r2u5ZmoID4ga2VuY2hvdWtpXCA7Civlp4nlprnnt6ggPiBzaGltYWloZW5cIDsKK+ihgOezluWApCA+IGtldHRvdWNoaVwgOwor54Sh6YeN6YePID4gbXVqdXVyeW91XCA7Civpm7voqbHluLMgPiBkZW53YWNob3VcIDsKK+WNiOWJjeS4rSA+IGdvemVuY2h1dVwgOwor5Za25qWt5omAID4gZWlneW91c2hvXCA7CivnsbPluILloLQgPiBiZWlpY2hpYmFcIDsKK+S4jeWLleW/gyA+IGZ1ZG91c2hpblwgOwor5o6o6YCy5ZmoID4gc3Vpc2hpbmtpXCA7CivlsI/liKTlvaIgPiBrb2JhbmdhdGFcIDsKK+WbnumAgeW6lyA+IGthaXNvdXRlblwgOwor54Wn5piO5ZmoID4gc2hvdW1laWtpXCA7CivlvrnnlLLlvL4gPiB0ZWtrb3VkYW5cIDsKK+WuruWGheW6gSA+IGt1bmFpY2hvdVwgOwor5biC5rCR5qipID4gc2hpbWlua2VuXCA7CivljYPlubTmnJ8gPiBzZW4nJ25lbmtpXCA7CivljYroiLfnoLIgPiBoYW5nZW5ob3VcIDsKK+aoqeWogeetiyA+IGtlbicnaXN1amlcIDsKK+Wkiembu+aJgCA+IGhlbmRlbnNob1wgOwor6Zu76Kej5rayID4gZGVua2FpZWtpXCA7Civpm7LkuIrkurogPiB1bmpvdWJpdG9cIDsKK+S4gOWRqOW5tCA+IGlzc2h1dW5lblwgOwor566h5Yi25aGUID4ga2Fuc2VpdG91XCA7Civoj6/ljrPntYwgPiBrZWdvbmt5b3VcIDsKK+WvvuaDheWgsSA+IHRhaWpvdWhvdVwgOwor5qC85aSJ5YyWID4ga2FrdWhlbmthXCA7CivmlZnogrLlrrYgPiBreW91aWt1a2FcIDsKK+WuieaBr+mmmSA+IGFuc29rdWtvdVwgOwor55+z6bm45rC0ID4gc2Vra2Vuc3VpXCA7CivkuI3li4nlvLcgPiBmdWJlbmt5b3VcIDsKK+WhqeWMlueJqSA+IGVua2FidXRzdVwgOwor5Lih55So5qmfID4gcnlvdXlvdWtpXCA7CivlvZPkuJbpoqggPiB0b3VzZWlmdXVcIDsKK+agvOWkqeS6lSA+IGdvdXRlbmpvdVwgOwor5Lit6ICV5qmfID4gY2h1dWtvdWtpXCA7CivkuI3pganmoLwgPiBmdXRla2tha3VcIDsKK+mBoOW/g+WIhiA+IGVuc2hpbmJ1blwgOwor5pmu6YCa5rOVID4gZnV0c3V1aG91XCA7CivlqpLmn5PliaQgPiBiYWlzZW56YWlcIDsKK+egtOijgumfsyA+IGhhcmV0c3VvblwgOwor5Li76Kaz6KuWID4gc2h1a2Fucm9uXCA7CivkuoznlarkvZwgPiBuaWJhbnNha3VcIDsKK+eUn+WRvee3miA+IHNlaW1laXNlblwgOwor56m65a++56m6ID4ga3V1dGFpa3V1XCA7CivnjJvlkLnpm6ogPiBtb3VmdWJ1a2lcIDsKK+mrmOWwhOegsiA+IGtvdXNoYWhvdVwgOwor5LiA5q2p6YqAID4gaWNoaWJ1Z2luXCA7CivnpoHmvIHljLogPiBraW5yeW91a3VcIDsKK+WliOiJr+a8rCA+IG5hcmFkenVrZVwgOwor5b2i6LGh5YyWID4ga2Vpc2hvdWthXCA7CivlhoXlnLDkurogPiBuYWljaGlqaW5cIDsKK+efs+WNl+iKsSA+IHNoYWt1bmFnZVwgOwor5YKA5YSh5birID4ga2FpcmFpc2hpXCA7CivkuIDmranph5EgPiBpY2hpYnVraW5cIDsKK+eXqeaIkeaFoiA+IHlhc2VnYW1hblwgOwor5oKq5Zug57iBID4gYWt1aW4nJ25lblwgOwor5LiN55yg55eHID4gZnVtaW5zaG91XCA7Civpm7vop6Pmp70gPiBkZW5rYWlzb3VcIDsKK+azleiPr+WulyA+IGhva2tlc2h1dVwgOwor5LiA556s6ZaTID4gaXNzaHVua2FuXCA7CivmraPkuInkvY0gPiBzaG91c2FubWlcIDsKK+W8vumBk+W8viA+IGRhbmRvdWRhblwgOwor5re35ZCI5p6XID4ga29uZ291cmluXCA7CivmsLTloqjnlLsgPiBzdWlib2t1Z2FcIDsKK+S6pOaYk+S8miA+IGtvdWVraWthaVwgOwor6auY5qWK5a2QID4gdGFrYXlvdWppXCA7CivmqKnlqIHnmoQgPiBrZW4nJ2l0ZWtpXCA7CivnpL7nlKjou4ogPiBzaGF5b3VzaGFcIDsKK+WIhuawtOW2uiA+IGJ1bnN1aXJlaVwgOwor5a2Q5L6b55SoID4ga29kb21veW91XCA7CivopqrlrZ3ooYwgPiBveWFrb3Vrb3VcIDsKK+eZuuWwhOetkiA+IGhhc3NoYXRvdVwgOwor5ou+5LiH5YaGID4ganV1bWFuJydlblwgOwor5Yuk55qH5a62ID4ga2luJydub3VrYVwgOwor5Lmz5YyW5YmkID4gbnl1dWthemFpXCA7Civov5HlnLDngrkgPiBraW5jaGl0ZW5cIDsKK+eEoeertuS6iSA+IG11a3lvdXNvdVwgOwor5Lqk6Zqb5rOVID4ga291c2FpaG91XCA7Civnp4HmnInlnLAgPiBzaGl5dXVjaGlcIDsKK+WPguS4juiAhSA+IHNhbicneW9zaGFcIDsKK+mjsuaWmeawtCA+IGlucnlvdXN1aVwgOwor56eL5pel5ZKMID4gYWtpYml5b3JpXCA7CivljLrlvbnmiYAgPiBrdXlha3VzaG9cIDsKK+eri+W/l+S8nSA+IHJpc3NoaWRlblwgOwor5aSp56ek5qOSID4gdGVuYmluYm91XCA7CivlpInoqr/lmaggPiBoZW5jaG91a2lcIDsKK+Wwj+WIpOWeiyA+IGtvYmFuZ2F0YVwgOwor6Zai5L+C6ICFID4ga2Fua2Vpc2hhXCA7CivlpKfmiJDlip8gPiBkYWlzZWlrb3VcIDsKK+S6jOS6uuensCA+IG5pbmluc2hvdVwgOwor5YG25YOP6KaWID4gZ3V1em91c2hpXCA7CivlgbbouYTpoZ4gPiBndXV0ZWlydWlcIDsKK+adpeioquiAhSA+IHJhaWhvdXNoYVwgOwor6aiS5Lmx572qID4gc291cmFuemFpXCA7CivlrozmiJDlk4EgPiBrYW5zZWloaW5cIDsKK+WJtemAoOaApyA+IHNvdXpvdXNlaVwgOwor5o6S5rC0566hID4gaGFpc3Vpa2FuXCA7Civlj4joq4vosqAgPiBtYXRhdWtlb2lcIDsKK+mHkemWo+WvuiA+IGtpbmtha3VqaVwgOwor6KqY6Zu75L2TID4geXV1ZGVudGFpXCA7CivljZfkuqznsbMgPiBuYW5raW5tYWlcIDsKK+eEoeelnue1jCA+IG11c2hpbmtlaVwgOwor6YqA5Lqk5o+bID4gZ2lua291a2FuXCA7CivkuI3lubLmuIkgPiBmdWthbnNob3VcIDsKK+ijveWhqealrSA+IHNlaWVuZ3lvdVwgOwor5pWZ5Lya5ZOhID4ga3lvdWthaWluXCA7CivmkK3kuZfliLggPiB0b3Vqb3VrZW5cIDsKK+mBjuehq+mFuCA+IGthcnl1dXNhblwgOwor6YGL5ZG955qEID4gdW5tZWl0ZWtpXCA7CivoprPmoZzkvJogPiBrYW4nJ291a2FpXCA7CivnhKHnpLzogIUgPiBidXJlaW1vbm9cIDsKK+ani+aWh+azlSA+IGtvdWJ1bnBvdVwgOwor5o6l6L+R5oimID4gc2Vra2luc2VuXCA7CivnhKHms5XogIUgPiBtdWhvdW1vbm9cIDsKK+S4jemBqeW9kyA+IGZ1dGVraXRvdVwgOwor54Sh5rC06Y2LID4gbXVzdWluYWJlXCA7CivmnIjntabml6UgPiBnZWtreXV1YmlcIDsKK+aWpeWAmemaiiA+IHNla2tvdXRhaVwgOwor5Ym15qWt6LK7ID4gc291Z3lvdWhpXCA7Civph43opoHmgKcgPiBqdXV5b3VzZWlcIDsKK+e3j+WjsuS4iiA+IHNvdXVyaWFnZVwgOwor5Y2B5YaG546JID4ganV1ZW5kYW1hXCA7CivlgKvnkIblraYgPiByaW5yaWdha3VcIDsKK+S4gOmAsemWkyA+IGlzc2h1dWthblwgOwor56S+5YaF5aCxID4gc2hhbmFpaG91XCA7CivkvY/lroXosrsgPiBqdXV0YWt1aGlcIDsKK+WxiOWcsOaApyA+IGt1dGNoaXNlaVwgOwor5Zu95pyJ5YyWID4ga29rdXl1dWthXCA7CivpgJrpoqjmqZ8gPiB0c3V1ZnV1a2lcIDsKK+WutuWxi+aVtyA+IGlleWFzaGlraVwgOwor5bGx5qSS6a2aID4gc2Fuc2hvdXVvXCA7Civlhazmlofmm7ggPiBrb3VidW5zaG9cIDsKK+axuuWumuirliA+IGtldHRlaXJvblwgOwor5L+d6Ki85Lq6ID4gaG9zaG91bmluXCA7Civmsr/mtbflt54gPiBlbmthaXNodXVcIDsKK+S4jemBk+W+syA+IGZ1ZG91dG9rdVwgOwor5L6/5LmX6ICFID4gYmluam91c2hhXCA7CivkuIDljYfnk7YgPiBpc3Nob3ViaW5cIDsKK+epuuiFueaZgiA+IGt1dWZ1a3VqaVwgOwor5YmN6KGb5oimID4gemVuJydlaXNlblwgOwor5oSf5oOF6KuWID4ga2Fuam91cm9uXCA7CivmlK/phY3mqKkgPiBzaGloYWlrZW5cIDsKK+Wbo+WtkOm8uyA+IGRhbmdvYmFuYVwgOwor5YWo6KuW54K5ID4gemVucm9udGVuXCA7CivpgZPljJbogIUgPiBkb3VrZW1vbm9cIDsKK+ilv+a0i+e0mSA+IHNlaXlvdXNoaVwgOwor5pu46KiY6ZW3ID4gc2hva2ljaG91XCA7Civlv4zoqIDokYkgPiBpbWlrb3RvYmFcIDsKK+mbo+S6i+alrSA+IG5hbmppZ3lvdVwgOwor5LuY5biv55qEID4gZnV0YWl0ZWtpXCA7Civpq5jpo5vou4ogPiB0YWthYmlzaGFcIDsKK+mbu+ipseS4rSA+IGRlbndhY2h1dVwgOwor6buE6YGT5bivID4ga291ZG91dGFpXCA7Civpq5jmoKHnlJ8gPiBrb3Vrb3VzZWlcIDsKK+iCuuawtOiFqyA+IGhhaXN1aXNodVwgOwor5ZWG55So6KqeID4gc2hvdXlvdWdvXCA7CivnlaXoqJjms5UgPiByeWFra2lob3VcIDsKK+iRoeiQhOajmiA+IGJ1ZG91ZGFuYVwgOwor5aWJ5YWs5Lq6ID4gaG91a291bmluXCA7Civku4/ms5Xlg6cgPiBidXBwb3Vzb3VcIDsKK+S9k+iCsuelrSA+IHRhaWlrdXNhaVwgOwor5pmu6YCa5by+ID4gZnV0c3V1ZGFuXCA7CivmiKbkuK3mtL4gPiBzZW5jaHV1aGFcIDsKK+mrmOWxseW4ryA+IGtvdXphbnRhaVwgOwor5oCn54qv572qID4gc2VpaGFuemFpXCA7CivmsJHoirjlk4EgPiBtaW5nZWloaW5cIDsKK+imquS8muekviA+IG95YWdhaXNoYVwgOwor5Y+C6LOA5bizID4gc2FuZ2FjaG91XCA7CivkuInovKrou4ogPiBzYW5yaW5zaGFcIDsKK+eUo+enkeWtpiA+IHNhbmthZ2FrdVwgOwor6LuK5YaF54GvID4gc2hhbmFpdG91XCA7CivljLvli5nlrqQgPiBpbXVzaGl0c3VcIDsKK+awuOe2muaApyA+IGVpem9rdXNlaVwgOwor5o6i5qSc6ZqKID4gdGFua2VudGFpXCA7Civlrp/li5nlrrYgPiBqaXRzdW11a2FcIDsKK+W/hemgiOagvCA+IGhpc3N1a2FrdVwgOwor5aSn5ZKM5q2MID4geWFtYXRvdXRhXCA7CivkuLjlpKrmnZAgPiBtYXJ1dGF6YWlcIDsKK+eglOS/ruaJgCA+IGtlbnNodXVqb1wgOwor5LiA5Yi56YKjID4gaXNzZXRzdW5hXCA7CivlhazmmI7lhZogPiBrb3VtZWl0b3VcIDsKK+e1teepuuiogCA+IGVzb3JhZ290b1wgOwor576F6Yed55ukID4gcmFzaGluYmFuXCA7Civlmajph4/kurogPiBraXJ5b3VqaW5cIDsKK+Wbvemam+iqniA+IGtva3VzYWlnb1wgOwor5Zub6L665b2iID4gc2hpaGVua2VpXCA7CivnmbrkvZznmoQgPiBob3NzYXRla2lcIDsKK+iBvuWtpuagoSA+IHJvdWdha2tvdVwgOwor5o6D5rW36ImHID4gc291a2FpdGVpXCA7Civlj4LogIPmm7ggPiBzYW5rb3VzaG9cIDsKK+WMlueyp+WTgSA+IGtlc2hvdWhpblwgOwor5Zyw5bmz6Z2iID4gY2hpaGVpbWVuXCA7CivkvY7og73ogIUgPiB0ZWlub3VzaGFcIDsKK+WFiOmok+irliA+IHNlbmtlbnJvblwgOwor6ZuG6Iux56S+ID4gc2h1dWVpc2hhXCA7CivnlKjmsLTmsaAgPiB5b3VzdWljaGlcIDsKK+WPl+mbo+WKhyA+IGp1bmFuZ2VraVwgOwor5YCJ5bqr5qWtID4gc291a29neW91XCA7CivljYPlha3mnKwgPiBzZW5yb3Bwb25cIDsKK+i8uOWFpeWTgSA+IHl1bnl1dWhpblwgOwor5YyW57Kn5Y+wID4ga2VzaG91ZGFpXCA7CivloanliqDmuJsgPiBzaGlva2FnZW5cIDsKK+ibjeWFieeHiCA+IGtlaWtvdXRvdVwgOwor5aiY5a2Q6LuNID4gam91c2hpZ3VuXCA7Civoh6rmsrvnnIEgPiBqaWNoaXNob3VcIDsKK+WwvumVt+eMvyA+IG9uYWdhemFydVwgOwor6K2m6Ziy5ZujID4ga2VpYm91ZGFuXCA7CivmraPop6PogIUgPiBzZWlrYWlzaGFcIDsKK+mZkOW6pumhjSA+IGdlbmRvZ2FrdVwgOwor5YaN5rSX56S8ID4gc2Fpc2VucmVpXCA7Civlp4nlprnmoKEgPiBzaGltYWlrb3VcIDsKK+agvOmXmOaKgCA+IGtha3V0b3VnaVwgOwor6Z2S5pil5pyfID4gc2Vpc2h1bmtpXCA7CivpgJ/oqJjpjLIgPiBzb2traXJva3VcIDsKK+WEquWLnemmrCA+IHl1dXNob3ViYVwgOwor5rCX5YCZ5a2mID4ga2lrb3VnYWt1XCA7Civnl4XpmaLoiLkgPiBieW91aW5zZW5cIDsKK+WbveaWh+enkSA+IGtva3VidW5rYVwgOwor5ouF5b2T6ICFID4gdGFudG91c2hhXCA7CivmnaXloLTogIUgPiByYWlqb3VzaGFcIDsKK+ibjeWFieeBryA+IGtlaWtvdXRvdVwgOwor5o6S5rC05rqdID4gaGFpc3Vpa291XCA7Civls7vkuIvliaQgPiBzaHVuZ2V6YWlcIDsKK+WkluWVhumDqCA+IGdhaXNob3VidVwgOwor5q2j5pa55b2iID4gc2VpaG91a2VpXCA7CivmnIjntYzluK8gPiBnZWtrZWl0YWlcIDsKK+inkuihjOeBryA+IGtha3VhbmRvblwgOwor6Kqy5b606YeRID4ga2FjaG91a2luXCA7CivkuqTmj5voiLkgPiBrb3VrYW5zZW5cIDsKK+S/neeuoeiovCA+IGhva2Fuc2hvdVwgOwor5re75Yqg54mpID4gdGVua2Ftb25vXCA7CivkuIDliIbpioAgPiBpY2hpYnVnaW5cIDsKK+adpeims+iAhSA+IHJhaWthbnNoYVwgOwor57a6576F5pifID4ga2lyYWJvc2hpXCA7CivlsbHlsrPpg6ggPiBzYW5nYWt1YnVcIDsKK+eZuuWxleaApyA+IGhhdHRlbnNlaVwgOwor5LiA5YiG6YeRID4gaWNoaWJ1a2luXCA7CivljZTlrprmoYggPiBreW91dGVpYW5cIDsKK+azqOWwhOWZqCA+IGNodXVzaGFraVwgOwor5Y+45rOV5qipID4gc2hpaG91a2VuXCA7CivmraPmlLvms5UgPiBzZWlrb3Vob3VcIDsKK+aJi+aLjeWtkCA+IHRlYnlvdXNoaVwgOwor56S+5Lya6Z2iID4gc2hha2FpbWVuXCA7CivosaHnmq7nl4UgPiB6b3VoaWJ5b3VcIDsKK+emgeWPjeiogCA+IGtpbmhhbmdlblwgOwor54Sh5Y+M56qTID4gbXVzb3VtYWRvXCA7CivmmYLplpPlibIgPiBqaWthbndhcmlcIDsKK+eUqOW/g+ajkiA+IHlvdWppbmJvdVwgOwor5YaN5oSf5p+TID4gc2Fpa2Fuc2VuXCA7Civmr5voo73lk4EgPiBtb3VzZWloaW5cIDsKK+WMlueyp+S7oyA+IGtlc2hvdWRhaVwgOwor5qC857SN5bqrID4ga2FrdW5vdWtvXCA7Civnt4/ntKLlvJUgPiBzb3VzYWt1aW5cIDsKK+S6iOWvqeW7tyA+IHlvc2hpbnRlaVwgOwor6Iy25bGL6YWSID4gY2hheWF6YWtlXCA7Civlm5vliIblhoYgPiBzaGlidW4nJ2VuXCA7CivkvZfkvY/lsYUgPiB3YWJpenVtYWlcIDsKK+eJh+aJi+ahtiA+IGthdGF0ZW9rZVwgOwor5Ym15YiK5Y+3ID4gc291a2FuZ291XCA7Civlm5vliIblha0gPiBzaGlidXJva3VcIDsKK+mYsua9nOe2siA+IGJvdXNlbm1vdVwgOwor5ZCN5Yi65YikID4gbWVpc2hpYmFuXCA7CivmsrPnq6Xlt7sgPiBrYXBwYW1ha2lcIDsKK+WQkeWFieaApyA+IGtvdWtvdXNlaVwgOwor5Yuy5LiA562JID4ga3VuJydpdHRvdVwgOwor5Y+N54mp5bGLID4gdGFubW9ub3lhXCA7CivkupLorbLnmoQgPiBnb2pvdXRla2lcIDsKK+S4lueVjOeahCA+IHNla2FpdGVraVwgOwor5b6h6L+35oORID4gZ29tZWl3YWt1XCA7CivkuInpg6jkvZwgPiBzYW5idXNha3VcIDsKK+ato+mdouWbsyA+IHNob3VtZW56dVwgOwor6KGo5YW35birID4gaHlvdWd1c2hpXCA7CivkuI3pganku7sgPiBmdXRla2luaW5cIDsKK+e1jOS8geW6gSA+IGtlaWtpY2hvdVwgOwor6YGL5YuV6aCYID4gdW5kb3VyeW91XCA7CivlhYjoiKzmnaUgPiBzZW5wYW5yYWlcIDsKK+WumuWGoOipniA+IHRlaWthbnNoaVwgOwor6buE6YGT5YWJID4ga291ZG91a291XCA7CivmjqXlsL7ovp4gPiBzZXRzdWJpamlcIDsKK+awtOeEoeaciCA+IG1pbmFkenVraVwgOwor6aeQ5Zyo5ZOhID4gY2h1dXphaWluXCA7CivovLjlsL/nrqEgPiB5dW55b3VrYW5cIDsKK+WbvemYsuiyuyA+IGtva3Vib3VoaVwgOwor5L6N5b6T6ZW3ID4gamlqdXVjaG91XCA7Civmrrrpoqjmma8gPiBzYXBwdXVrZWlcIDsKK+S4reaUr+mCoyA+IG5ha2FzaGluYVwgOwor6Kqk5oy/5YWlID4gZ29zb3VueXV1XCA7CivmraPmlZnmjoggPiBzZWlreW91anVcIDsKK+S8keeBq+WxsSA+IGt5dXVrYXphblwgOwor5a2Q5a6I5q2MID4ga29tb3JpdXRhXCA7CivmsbrlrprnqL8gPiBrZXR0ZWlrb3VcIDsKK+mYsueBq+WjgSA+IGJvdWthaGVraVwgOwor5Y+w5rm+5Lq6ID4gdGFpd2FuamluXCA7Civml6Xnq6Dml5cgPiBuaXNzaG91a2lcIDsKK+mDqOmaiumVtyA+IGJ1dGFpY2hvdVwgOwor5b6h55yf5b2xID4gZ29zaGluJydlaVwgOwor5Yed5Zu654K5ID4gZ3lvdWtvdGVuXCA7CivmlK/lupfntrIgPiBzaGl0ZW5tb3VcIDsKK+aVsOihqOekuiA+IHN1dWh5b3VqaVwgOwor6aKo5ZCR6KiIID4gZnV1a291a2VpXCA7Civom43lhYnmnb8gPiBrZWlrb3ViYW5cIDsKK+aWsOiBnuiIlyA+IHNoaW5idW5ob1wgOwor6KW/5Y2X6KW/ID4gc2VpbmFuc2VpXCA7Civpgb/pm7fph50gPiBoaXJhaXNoaW5cIDsKK+eNheWtkOiIniA+IHNoaXNoaW1haVwgOwor5Lu75pyf5LitID4gbmlua2ljaHV1XCA7CivmlrnpnaLpmoogPiBob3VtZW50YWlcIDsKK+miqOmItOiNiSA+IGZ1dXJpbnNvdVwgOwor6Iqx6YeO6I+cID4gaGFuYXlhc2FpXCA7Civmm7Lni6zmpb0gPiBreW9rdWdvbWFcIDsKK+ecn+WQkeazlSA+IG1ha2tvdWhvdVwgOwor5ZWG6Ii55peXID4gc2hvdXNlbmtpXCA7CivnoJTkv67lk6EgPiBrZW5zaHV1aW5cIDsKK+ipleWIpOiomCA+IGh5b3ViYW5raVwgOwor5pmu6YCa5L6/ID4gZnV0c3V1YmluXCA7Civlia/nn6XkuosgPiBmdWt1Y2hpamlcIDsKK+avjembhuWboyA+IGJvc2h1dWRhblwgOwor5LiJ5Yag546LID4gc2Fua2FuJydvdVwgOwor5oGL5oSb6KazID4gcmVuJydhaWthblwgOwor5L216KGM57eaID4gaGVpa291c2VuXCA7CivlnLDlvbnmqKkgPiBjaGlla2lrZW5cIDsKK+aZrumAmuS6uiA+IGZ1dHN1dWppblwgOwor5YWI5bCO6ICFID4gc2VuZG91c2hhXCA7Civlho3ljZTorbAgPiBzYWlreW91a2lcIDsKK+aKlemZjeiAhSA+IHRvdWtvdXNoYVwgOwor5Luj6LWt6ImyID4gdGFpc2hhaXJvXCA7CivmjqXlsL7oqp4gPiBzZXRzdWJpZ29cIDsKK+WKh+S9nOWutiA+IGdla2lzYWtrYVwgOwor6YeN5oim6LuKID4ganV1c2Vuc2hhXCA7Civpn7Pmpb3pmoogPiBvbmdha3V0YWlcIDsKK+WGjeemgeatoiA+IHNhaWtpbnNoaVwgOwor54e76JK45YmkID4ga3Vuam91emFpXCA7CivmtIvoo4HluKsgPiB5b3VzYWlzaGlcIDsKK+ecn+ato+mdoiA+IG1hc2hvdW1lblwgOwor5pyI57WM5YmNID4gZ2Vra2VpbWFlXCA7CivpgYvli5Xph48gPiB1bmRvdXJ5b3VcIDsKK+S9juWxseW4ryA+IHRlaXphbnRhaVwgOwor5Yqx5oyv5ZmoID4gcmVpc2hpbmtpXCA7Civoi7Hpm4TnmoQgPiBlaXl1dXRla2lcIDsKK+iomOiAheW4rSA+IGtpc2hhc2VraVwgOwor5YGl5bq36ICFID4ga2Vua291c2hhXCA7CivogqXmuoDnl4cgPiBoaW1hbnNob3VcIDsKK+acgOWkp+WApCA+IHNhaWRhaWNoaVwgOwor6KiI55S75qGIID4ga2Vpa2FrdWFuXCA7Civoj6/ljrPlrpcgPiBrZWdvbnNodXVcIDsKK+S4u+imgeeCuSA+IHNodXlvdXRlblwgOwor5Luu5L2P5bGFID4ga2FyaXp1bWFpXCA7CivkvJrlk6HoqLwgPiBrYWlpbnNob3VcIDsKK+eyvuiWhOWFkCA+IHNlaWhha3VqaVwgOwor5oy/5YWl5ZuzID4gc291bnl1dXp1XCA7CivkuIHlubTogIUgPiB0ZWluZW5zaGFcIDsKK+ebo+afu+W9uSA+IGthbnNheWFrdVwgOwor6JaE5YyW57KnID4gdXN1Z2VzaG91XCA7Civlh7rli6TnsL8gPiBzaHVra2luYm9cIDsKK+S4reWkrue3miA+IGNodXVvdXNlblwgOwor5bGl5q205pu4ID4gcmlyZWtpc2hvXCA7CivppIrll6PlrZAgPiB5b3VzaGlzaGlcIDsKK+Wkp+a1t+WOnyA+IG9vdW5hYmFyYVwgOwor5L2O5L6h5qC8ID4gdGVpa2FrYWt1XCA7CivkuqTpmpvkuIogPiBrb3VzYWlqb3VcIDsKK+WPguiAg+WTgSA+IHNhbmtvdWhpblwgOwor56We57WM56eRID4gc2hpbmtlaWthXCA7CivlsI/kvZzovrIgPiBrb3Nha3Vub3VcIDsKK+engeaWh+abuCA+IHNoaWJ1bnNob1wgOwor5rG65a6a54mIID4ga2V0dGVpYmFuXCA7Civlv4PkuI3lhaggPiBzaGluZnV6ZW5cIDsKK+S5s+W5vOWFkCA+IG55dXV5b3VqaVwgOwor6KaP5YmH5pu4ID4ga2lzb2t1c2hvXCA7CivliqDpmaTlvI8gPiBrYWpvc2hpa2lcIDsKK+WPuOazleWumCA+IHNoaWhvdWthblwgOwor56m65a++5ZywID4ga3V1dGFpY2hpXCA7CivmraPoppbnnLwgPiBzZWlzaGlnYW5cIDsKK+aXqeaFtuaIpiA+IHNvdWtlaXNlblwgOwor5o6Y5YmK5qmfID4ga3Vzc2FrdWtpXCA7CivmnKrnorrlrpogPiBtaWtha3V0ZWlcIDsKK+mrmOaetuapiyA+IGtvdWtha3lvdVwgOwor5YCL5Yil5YyWID4ga29iZXRzdWthXCA7CivmjL/lhaXlj6UgPiBzb3VueXV1a3VcIDsKK+aUv+aoqeWFmiA+IHNlaWtlbnRvdVwgOwor5bCE5Yip5b+DID4gc2hhcmlzaGluXCA7Civnm6Plr5/ljLsgPiBrYW5zYXRzdWlcIDsKK+mBk+WMluaWuSA+IGRvdWtlZ2F0YVwgOwor5Y2K5LqM6YeNID4gaGFuJyduaWp1dVwgOwor56aB5rK755SjID4ga2luY2hpc2FuXCA7CivljZjoqp7pm4YgPiB0YW5nb3NodXVcIDsKK+eUqOawtOWcsCA+IHlvdXN1aWlrZVwgOwor6LuK6auY55+tID4gc2hha291dGFuXCA7CivmtojljJbohbogPiBzaG91a2FzZW5cIDsKK+i/kea1t+mtmiA+IGtpbmthaWd5b1wgOwor5o6S5rC05a2UID4gaGFpc3Vpa291XCA7CivmnKjph5HlnJ8gPiBtb2t1a2luZG9cIDsKK+aMgee2muaApyA+IGppem9rdXNlaVwgOwor5ZCN5bel5aSnID4gbWVpa291ZGFpXCA7CivmlK/phY3kurogPiBzaGloYWluaW5cIDsKK+W5ueS6i+mVtyA+IGthbmppY2hvdVwgOwor6ZW35rC06LevID4gY2hvdXN1aXJvXCA7CivlubPlhZrlk6EgPiBoaXJhdG91aW5cIDsKK+W+queSsOe3miA+IGp1bmthbnNlblwgOwor5LiL5YmL5LiKID4gZ2Vrb2t1am91XCA7CivkuIrlsaTpoqggPiBqb3Vzb3VmdXVcIDsKK+Wcp+W7tumLvCA+IGF0c3VlbmtvdVwgOwor6I+g6JaQ6I2JID4gaG91cmVuc291XCA7CivmupbmlZnlk6EgPiBqdW5reW91aW5cIDsKK+WHueecvOmPoSA+IG91Z2Fua3lvdVwgOwor54mp5L6h6auYID4gYnVra2FkYWthXCA7Civoqpjmi5DnvaogPiB5dXVrYWl6YWlcIDsKK+W+queSsOezuyA+IGp1bmthbmtlaVwgOwor5rS+55Sf55qEID4gaGFzZWl0ZWtpXCA7CivntKDlj43lv5wgPiBzb2hhbicnbm91XCA7CivlnKjpg7fogIUgPiB6YWlnb3VzaGFcIDsKK+WMl+a1t+mBkyA+IGhva2thaWRvdVwgOwor5p6X5qqO55eFID4gcmluZ29ieW91XCA7Civolqzkuovms5UgPiB5YWt1amlob3VcIDsKK+efreavm+eoriA+IHRhbm1vdXNodVwgOwor5qaC5b+16KuWID4gZ2FpbmVucm9uXCA7CivpgZPlvrPlrrYgPiBkb3V0b2t1a2FcIDsKK+WPguS4juWumCA+IHNhbicneW9rYW5cIDsKK+acgOe1guahiCA+IHNhaXNodXVhblwgOwor5LiW55WM5pawID4gc2VrYWlzaGluXCA7Civlj4LogIPkurogPiBzYW5rb3VuaW5cIDsKK+Wxi+WPsOmqqCA+IHlhdGFpYm9uZVwgOwor5aSn5q2T6L+OID4gZGFpa2FuZ2VpXCA7CivkuIrlsaTpmo4gPiBqb3Vzb3VrYWlcIDsKK+S4gOWIh+e1jCA+IGlzc2Fpa3lvdVwgOwor5YaN6YWN572uID4gc2FpaGFpY2hpXCA7CivogozopabooqIgPiBoYWRhanViYW5cIDsKK+WFreinkuW9oiA+IHJva2tha2tlaVwgOwor5paw55Sf5YWQID4gc2hpbnNlaWppXCA7CivlhYjkvY/ogIUgPiBzZW5qdXVzaGFcIDsKK+mGnOalreWppiA+IHNodWd5b3VmdVwgOwor6KOB5Yik5qipID4gc2FpYmFua2VuXCA7CivlpKfnpZ7lrq4gPiBkYWlqaW5ndXVcIDsKK+ato+aVmeWToSA+IHNlaWt5b3VpblwgOwor5oKq5oiv552AID4gaXRhenVyYWdpXCA7CivmmLzooYznga8gPiBoaXJ1YW5kb25cIDsKK+WcsOW5s+e3miA+IGNoaWhlaXNlblwgOwor6YWN6Zu757eaID4gaGFpZGVuc2VuXCA7Civnmb3poK3nv4EgPiBoYWt1dG91b3VcIDsKK+eZuuWwhOWPsCA+IGhhc3NoYWRhaVwgOwor5Li76Zmj5ZywID4gc2h1amluY2hpXCA7CivmhJ/mg7PmlocgPiBrYW5zb3VidW5cIDsKK+a2iOWMluezuyA+IHNob3VrYWtlaVwgOwor5Li76Kaz5oCnID4gc2h1a2Fuc2VpXCA7CivlpKfms5Xlu7cgPiBkYWlob3V0ZWlcIDsKK+acgOe1guaXpSA+IHNhaXNodXViaVwgOwor5rG65a6a5qipID4ga2V0dGVpa2VuXCA7CivlhY7lsI/lsYsgPiB1c2FnaWdveWFcIDsKK+WkmuelnuirliA+IHRhc2hpbnJvblwgOwor5b6M5Y2K55SfID4ga291aGFuc2VpXCA7CivlopfoqILniYggPiB6b3V0ZWliYW5cIDsKK+aJgOWcqOWcsCA+IHNob3phaWNoaVwgOwor54G95a6z5ZywID4gc2FpZ2FpY2hpXCA7CivmtojljJbnrqEgPiBzaG91a2FrYW5cIDsKK+W5tOS7o+mghiA+IG5lbmRhaWp1blwgOwor56We57WM54KOID4gc2hpbmtlaWVuXCA7CivlpYnku5XogIUgPiBob3VzaGlzaGFcIDsKK+WGjeWPl+a1uCA+IHNhaWp1c2hpblwgOwor5pON5qWt6LK7ID4gc291Z3lvdWhpXCA7CivkuozkurrliY0gPiBmdXRhcmltYWVcIDsKK+WvjOWjq+WjuiA+IGZ1aml0c3Vib1wgOwor55m+6LKo5bqXID4gaHlha2thdGVuXCA7CivmqKrmlq3luZUgPiBvdWRhbm1ha3VcIDsKK+S6jOS6uuWIhiA+IGZ1dGFyaWJ1blwgOwor57SN56iO6ICFID4gbm91emVpc2hhXCA7CivphbjmgKfntJkgPiBzYW5zZWlzaGlcIDsKK+W3puWPs+i7uCA+IHNheXV1amlrdVwgOwor5aSp5rC05qG2ID4gdGVuc3Vpb2tlXCA7CivlhazplovnirYgPiBrb3VrYWlqb3VcIDsKK+iytOmHkeWxniA+IGtpa2luem9rdVwgOwor5rOi576F6JycID4gaGFyYW1pdHN1XCA7Civni6nnjJ/mnJ8gPiBzaHVyeW91a2lcIDsKK+aWh+azleabuCA+IGJ1bnBvdXNob1wgOwor5Y2g6aCY5LiLID4gc2VucnlvdWthXCA7Civnh4PnhLzngokgPiBuZW5zaG91cm9cIDsKK+WPpOethuWutiA+IGtvaGl0c3VrYVwgOwor6Ziy6KGb5bqBID4gYm91ZWljaG91XCA7CivlpKfnpa3lj7ggPiBkYWlzYWlzaGlcIDsKK+mbm+e9jOeynyA+IGhpbmFnZXNoaVwgOwor5YWo5aSp5YCZID4gemVudGVua291XCA7CivotoXnn63ms6IgPiBjaG91dGFucGFcIDsKK+aUvuWwhOiDvSA+IGhvdXNoYW5vdVwgOwor5YmN56eR6ICFID4gemVua2Ftb25vXCA7Civplbfph47nnIwgPiBuYWdhbm9rZW5cIDsKK+mdkuWkp+WwhiA+IGFvZGFpc2hvdVwgOwor55+l5oG154axID4gY2hpZW5ldHN1XCA7CivljIXoo4XntJkgPiBob3Vzb3VzaGlcIDsKK+S8muWToeeroCA+IGthaWluc2hvdVwgOwor57Gz55Sj5ZywID4gYmVpc2FuY2hpXCA7Civlhavop5LlvaIgPiBoYWtrYWtrZWlcIDsKK+S6lOWkp+a0siA+IGdvZGFpc2h1dVwgOwor5paw5a2m5pyfID4gc2hpbmdha2tpXCA7CivphY3pm7vnm6QgPiBoYWlkZW5iYW5cIDsKK+iLseaWh+WtpiA+IGVpYnVuZ2FrdVwgOwor5a2Q5a6I5ZSEID4ga29tb3JpdXRhXCA7CivlvqHlhYTlvJ8gPiBnb2t5b3VkYWlcIDsKK+ijgeWIpOaJgCA+IHNhaWJhbnNob1wgOwor5Y+C6Zmi6YG4ID4gc2FuJydpbnNlblwgOwor6LuN5Lq66aKoID4gZ3VuamluZnV1XCA7CivnhKHlvpfngrkgPiBtdXRva3V0ZW5cIDsKK+irlueQhueahCA+IHJvbnJpdGVraVwgOwor5YqD5pyf55qEID4ga2Fra2l0ZWtpXCA7CivkuInnnIHloIIgPiBzYW5zZWlkb3VcIDsKK+iZmuW8seWFkCA+IGt5b2pha3VqaVwgOwor5b2T5LqL5Zu9ID4gdG91amlrb2t1XCA7Civoq5bkuonogIUgPiByb25zb3VzaGFcIDsKK+aUvuWwhOe3miA+IGhvdXNoYXNlblwgOwor5bSH5oud6ICFID4gc3V1aGFpc2hhXCA7CivlgaXlurfms5UgPiBrZW5rb3Vob3VcIDsKK+aAquaWh+abuCA+IGthaWJ1bnNob1wgOwor6YCu5o2V5q20ID4gdGFpaG9yZWtpXCA7CivnrYbpoK3ogIUgPiBoaXR0b3VzaGFcIDsKK+S5vueUn+WnnCA+IGthbnNob3VnYVwgOwor55Sf5q6L6ICFID4gc2VpemFuc2hhXCA7Civmt6HmsLTprZogPiB0YW5zdWlneW9cIDsKK+i0iOetlOWTgSA+IHpvdXRvdWhpblwgOwor5Lqk5o+b5omLID4ga291a2Fuc2h1XCA7Civom43lhYnkvZMgPiBrZWlrb3V0YWlcIDsKK+awt+eCueS4iyA+IGh5b3V0ZW5rYVwgOwor6KqY5ouQ54qvID4geXV1a2FpaGFuXCA7CivnhY7njonlrZAgPiBpcml0YW1hZ29cIDsKK+iIiOS/oeaJgCA+IGtvdXNoaW5qb1wgOwor55SY5ZGz5paZID4ga2FubWlyeW91XCA7CivoqabpqJPntJkgPiBzaGlrZW5zaGlcIDsKK+eGj+iSuOWJpCA+IGt1bmpvdXphaVwgOwor6IKJ6KWm6KKiID4gbmlrdWp1YmFuXCA7Civnm6PlrojkurogPiBrYW5zaHVuaW5cIDsKK+Wil+Wkp+WPtyA+IHpvdWRhaWdvdVwgOwor5ruR6LWw6LyqID4ga2Fzc291cmluXCA7Civlho3libXpgKAgPiBzYWlzb3V6b3VcIDsKK+ilv+a0i+WPsiA+IHNlaXlvdXNoaVwgOwor5oi457GN5rOVID4ga29zZWtpaG91XCA7CivojZLnianlsYsgPiBhcmFtb25veWFcIDsKK+S4reilv+mDqCA+IGNodXVzZWlidVwgOwor6Ieq5YuV55qEID4gamlkb3V0ZWtpXCA7CivlgJ/lrrbkurogPiBzaGFra2FuaW5cIDsKK+azleWtpumDqCA+IGhvdWdha3VidVwgOwor6LuN6LOH6YeRID4gZ3Vuc2hpa2luXCA7Civmlofms5XmgKcgPiBidW5wb3VzZWlcIDsKK+i+suWkq+eXhyA+IG5vdWZ1c2hvdVwgOwor5p2Q5paZ6LK7ID4gemFpcnlvdWhpXCA7CivlgqzmtpnpioMgPiBzYWlydWlqdXVcIDsKK+WkieaPm+WtkCA+IGhlbmthbnNoaVwgOwor5p2Q5pyo5bGLID4gemFpbW9rdXlhXCA7Civosqfnqq7ljJYgPiBoaW5reXV1a2FcIDsKK+aXqeWQiOeCuSA+IGhheWFnYXRlblwgOwor6IKl5rqA5oCnID4gaGltYW5zaG91XCA7Civou4rppqzos4MgPiBzaGFiYWNoaW5cIDsKK+ernOmojuWFtSA+IHJ5dXVraWhlaVwgOwor5Zyf5Y+w55+zID4gZG9kYWlpc2hpXCA7CivluLDntI3nmoQgPiBraW5vdXRla2lcIDsKK+ippumok+euoSA+IHNoaWtlbmthblwgOwor55S35a2Q6auYID4gZGFuc2hpa291XCA7CivlpKflj43lr74gPiBkYWloYW50YWlcIDsKK+mdnuWbveawkSA+IGhpa29rdW1pblwgOwor5bCP6LGG6bGSID4gYXp1a2ltYXN1XCA7CivojqLosYzosYYgPiBzYXlhZW5kb3VcIDsKK+S4oeabv+apnyA+IHJ5b3VnYWVraVwgOwor57a/54Gr6JasID4gbWVua2F5YWt1XCA7CivkurrmsJHou40gPiBqaW5taW5ndW5cIDsKK+asoOWLpOiAhSA+IGtla2tpbnNoYVwgOwor5bCP5L2c57GzID4ga29zYWt1bWFpXCA7Civms6Xmnb/lsqkgPiBkZWliYW5nYW5cIDsKK+aTrOmdqee0mSA+IGdpa2FrdXNoaVwgOwor6LK06YeN5ZOBID4ga2ljaG91aGluXCA7CivngavlsbHnpKsgPiBrYXphbnJla2lcIDsKK+mhlOWGmeecnyA+IGthb2phc2hpblwgOwor5YWx5ryU6ICFID4ga3lvdWVuc2hhXCA7CivmlZHorbfnj60gPiBreXV1Z29oYW5cIDsKK+WGjeW+queSsCA+IHNhaWp1bmthblwgOwor6I275rGf56+AID4gb2dpZWJ1c2hpXCA7Civpm4blhYnlmaggPiBzaHV1a291a2lcIDsKK+S4gOmDqOWIhiA+IGljaGlidWJ1blwgOwor6KOF55Sy6LuKID4gc291a291c2hhXCA7CivmlrDkuJbntIAgPiBzaGluc2Vpa2lcIDsKK+ijgeWIpOWumCA+IHNhaWJhbmthblwgOwor5Ye65Yuk5pelID4gc2h1a2tpbmJpXCA7CivpgIHkv6HmqZ8gPiBzb3VzaGlua2lcIDsKK+mbkeWxheWcsCA+IHpha2t5b2NoaVwgOwor6Iux5pWw5Zu9ID4gZWlzdXVrb2t1XCA7Civkv53nrqHmlpkgPiBob2thbnJ5b3VcIDsKK+WNiuiytOefsyA+IGhhbmtpc2VraVwgOwor6LuN55So5qmfID4gZ3VuJyd5b3VraVwgOwor6JmO6JC956ybID4gbW9nYXJpYnVlXCA7CivnlJ/pgoTogIUgPiBzZWlrYW5zaGFcIDsKK+aHh+irh+S8miA+IGtvbmRhbmthaVwgOwor5pyq5YWs6KGoID4gbWlrb3VoeW91XCA7Civopb/mtIvkurogPiBzZWl5b3VqaW5cIDsKK+eUsOiIjuiAhSA+IGluYWthbW9ub1wgOwor5raI5YyW5rayID4gc2hvdWthZWtpXCA7CivlgaXlurfmlrkgPiBrZW5rb3Vob3VcIDsKK+eptOWxheS6uiA+IGtla2t5b2ppblwgOwor5aao5qWt5ZOhID4gYm91Z3lvdWluXCA7CivpoqjlkYLmlbcgPiBmdXJvc2hpa2lcIDsKK+S9leabnOaXpSA+IG5hbicneW91YmlcIDsKK+itpuaIkue3miA+IGtlaWthaXNlblwgOwor5Lqk5o+b5ayiID4ga291a2Fuam91XCA7CivlpKfpgZPoirggPiBkYWlkb3VnZWlcIDsKK+WBnOatoue3miA+IHRlaXNoaXNlblwgOwor5YuJ5by35a62ID4gYmVua3lvdWthXCA7CivmtarmvKvnmoQgPiByb21hbnRla2lcIDsKK+WLp+S4lue4kiA+IGthbnpleW9yaVwgOwor56u557Sw5belID4gdGFrZXphaWt1XCA7CivnlKPljbXlj6MgPiBzYW5yYW5rb3VcIDsKK+aEn+WLleipniA+IGthbmRvdXNoaVwgOwor5rC05Zyn5qmfID4gc3VpYXRzdWtpXCA7Civpn7Pmpb3npa0gPiBvbmdha3VzYWlcIDsKK+S6uuaDheacrCA+IG5pbmpvdWJvblwgOwor55qH6ZyK5q6/ID4ga291cmVpZGVuXCA7Civkvb/lkb3ogIUgPiBzaGltZWlzaGFcIDsKK+S7o+eUqOWTgSA+IGRhaXlvdWhpblwgOwor6JGJ6I+c6aGeID4geW91c2FpcnVpXCA7CivlhpnnnJ/mqZ8gPiBzaGFzaGlua2lcIDsKK+eUt+S8iumBlCA+IG90b2tvZGF0ZVwgOwor5YW156uZ57eaID4gaGVpdGFuc2VuXCA7CivluK/pm7vkvZMgPiB0YWlkZW50YWlcIDsKK+aWh+WMlueahCA+IGJ1bmthdGVraVwgOwor5pyq55m66KGoID4gbWloYXBweW91XCA7CivlhYjkvY/msJEgPiBzZW5qdXVtaW5cIDsKK+mAlOS4iuWbvSA+IHRvam91a29rdVwgOwor5Y2K6Z+z6ZqOID4gaGFuJydvbmthaVwgOwor55m95pyo5bGLID4gc2hpcm9raXlhXCA7Civku5Xmp5jmm7ggPiBzaGl5b3VzaG9cIDsKK+awkeS6i+eahCA+IG1pbmppdGVraVwgOwor5oiQ5bGk5ZyPID4gc2Vpc291a2VuXCA7CivokrjmsJflnKcgPiBqb3VraWF0c3VcIDsKK+S4oeabv+aJgCA+IHJ5b3VnYWVqb1wgOwor5b6M5Y2K5oimID4ga291aGFuc2VuXCA7Civlub3lr4LlkbMgPiB5dXVqYWt1bWlcIDsKK+W4neeOi+WtpiA+IHRlaW91Z2FrdVwgOwor6LKv5rC05rGgID4gY2hvc3VpY2hpXCA7CivmlrDkuJbnlYwgPiBzaGluc2VrYWlcIDsKK+WRveS7pOazlSA+IG1laXJlaWhvdVwgOwor54++5YOP5rayID4gZ2Vuem91ZWtpXCA7CivoprPopqfou4ogPiBrYW5yYW5zaGFcIDsKK+S8muekvuiRrCA+IGthaXNoYXNvdVwgOwor56aB6YWS5rOVID4ga2luc2h1aG91XCA7CivohLPohpzngo4gPiBub3VtYWt1ZW5cIDsKK+S6lOWkp+W3niA+IGdvZGFpc2h1dVwgOwor5paH6YOo55yBID4gbW9uYnVzaG91XCA7Civou43kuovpgJogPiBndW5qaXRzdXVcIDsKK+iEs+iFq+eYjSA+IG5vdXNodXlvdVwgOwor5LiW55WM5LiAID4gc2VrYWlpY2hpXCA7Civlho3liIbphY0gPiBzYWlidW5wYWlcIDsKK+aOm+W4g+WboyA+IGtha2VidXRvblwgOwor5aSW5rSL6Ii5ID4gZ2FpeW91c2VuXCA7CivntYTogbflm7MgPiBzb3Nob2t1enVcIDsKK+S6pOaPm+WTgSA+IGtvdWthbmhpblwgOwor54Gr6aOf6bOlID4gaGlrdWlkb3JpXCA7Civosq/msLTmp70gPiBjaG9zdWlzb3VcIDsKK+a1t+awtOmtmiA+IGthaXN1aWd5b1wgOwor57K+6YCy5pelID4gc2hvdWppbmJpXCA7CivkuInoibLml5cgPiBzYW5zaG9ra2lcIDsKK+mAg+S6oeiAhSA+IHRvdWJvdXNoYVwgOwor6YGT5YW3566xID4gZG91Z3ViYWtvXCA7Civlh7rlu7fml6UgPiBzaHV0dGVpYmlcIDsKK+eUu+Wtpue0mSA+IGdhZ2FrdXNoaVwgOwor6LKv6JS15omAID4gY2hvem91c2hvXCA7CivmnbHmtbfpgZMgPiB0b3VrYWlkb3VcIDsKK+S6pOaPm+WPsCA+IGtvdWthbmRhaVwgOwor5oim5pmC5LitID4gc2VuamljaHV1XCA7Civmt7fliIbmlbAgPiBrb25idW5zdXVcIDsKK+eUn+efs+eBsCA+IHNlaXNla2thaVwgOwor5LiN5qSc5p2fID4gZnVrZW5zb2t1XCA7CivlsI/mnb7oj5wgPiBrb21hdHN1bmFcIDsKK+iIn+Wkp+W3pSA+IGZ1bmFkYWlrdVwgOwor6LSI5ZGI6ICFID4gem91dGVpc2hhXCA7CivpoZ7mpoLlv7UgPiBydWlnYWluZW5cIDsKK+S7u+WkqeWggiA+IG5pbnRlbmRvdVwgOwor5Y2X5pa555SjID4gbmFucG91c2FuXCA7CivntZDntI3ph5EgPiB5dWlub3VraW5cIDsKK+WkquWIgOetiyA+IHRhY2hpc3VqaVwgOwor54af5a2X6KiTID4ganVrdWppa3VuXCA7Civlo7DmmI7mm7ggPiBzZWltZWlzaG9cIDsKK+WVj+mhjOeCuSA+IG1vbmRhaXRlblwgOwor5YiG5bel5aC0ID4gYnVua291am91XCA7CivlrprlubTliLYgPiB0ZWluZW5zZWlcIDsKK+WcsOWFg+e0mSA+IGppbW90b3NoaVwgOwor6aCQ6KiX6YeRID4geW90YWt1a2luXCA7CivpmLLnqbrnoLIgPiBib3VrdXVob3VcIDsKK+mdmeWcp+avlCA+IHNlaWF0c3VoaVwgOwor5Zue6aGn6YyyID4ga2Fpa29yb2t1XCA7CivkuKHmm7/lsYsgPiByeW91Z2FleWFcIDsKK+S6uuawl+iAhSA+IG5pbmtpbW9ub1wgOwor5LiN6Imv5ZOBID4gZnVyeW91aGluXCA7CivlsI/kvr/miYAgPiBzaG91YmVuam9cIDsKK+W+queSsOaApyA+IGp1bmthbnNlaVwgOwor5ZWG55So5YyWID4gc2hvdXlvdWthXCA7CivkuqTmj5vlhoYgPiBrb3VrYW4nJ2VuXCA7CivoqabpqJPms5UgPiBzaGlrZW5ob3VcIDsKK+WtpuWckuelrSA+IGdha3VlbnNhaVwgOwor5oSf5q2O6KmeID4ga2FudGFuc2hpXCA7CivnrKzlha3mhJ8gPiBkYWlyb2trYW5cIDsKK+iyp+awkeihlyA+IGhpbm1pbmdhaVwgOwor5ZG95Luk5pu4ID4gbWVpcmVpc2hvXCA7CivljYrlsI7kvZMgPiBoYW5kb3V0YWlcIDsKK+WFteWZqOW7oCA+IGhlaWtpc2hvdVwgOwor6KOB5Yik5LiKID4gc2FpYmFuam91XCA7Civlo7LmmKXlqaYgPiBiYWlzaHVucHVcIDsKK+S4i+WFi+S4iiA+IGdla29rdWpvdVwgOwor6YWN6Zu75omAID4gaGFpZGVuc2hvXCA7CivnpL7kuqTnlYwgPiBzaGFrb3VrYWlcIDsKK+WEquWLneaXlyA+IHl1dXNob3VraVwgOwor5omL5ZOB5birID4gdGVqaW5hc2hpXCA7Civpq4Tohpzngo4gPiB6dWltYWt1ZW5cIDsKK+mbqOaUr+W6piA+IGFtYWppdGFrdVwgOwor5L+u6YGT6ZmiID4gc2h1dWRvdWluXCA7Civmtbfom4fluqcgPiB1bWloZWJpemFcIDsKK+WRveS7pOaWhyA+IG1laXJlaWJ1blwgOwor5p2x5rSL6aKoID4gdG91eW91ZnV1XCA7CivlvJ/mga/lrZAgPiBvdG9tdXN1a29cIDsKK+S6lOWkp+WbvSA+IGdvZGFpa29rdVwgOwor5o6l6aqo5Yy7ID4gc2Vra290c3VpXCA7CivmnJvpgaDpj6EgPiBib3Vlbmt5b3VcIDsKK+aihembqOepuiA+IHRzdXl1em9yYVwgOwor5bel5ZOh5a+uID4ga291aW5yeW91XCA7CivnhKHpgYrnl4UgPiBtdXl1dWJ5b3VcIDsKK+Wbvemam+WMliA+IGtva3VzYWlrYVwgOwor6ama55Ww55qEID4ga3lvdWl0ZWtpXCA7CivplqLmnbHlvIEgPiBrYW50b3ViZW5cIDsKK+ikh+WQiOiqniA+IGZ1a3Vnb3Vnb1wgOwor5byY5riI5LyaID4ga291c2Fpa2FpXCA7Civoh7Pov5HlvL4gPiBzaGlraW5kYW5cIDsKK+acrOW5tOW6piA+IGhvbicnbmVuZG9cIDsKK+aVkeitt+aJgCA+IGt5dXVnb3Nob1wgOwor5ZGR5rCX6ICFID4gbm9ua2ltb25vXCA7CivlsI/kvZzmqKkgPiBrb3Nha3VrZW5cIDsKK+S7o+eQhuavjSA+IGRhaXJpaGFoYVwgOwor5YiG55WM57eaID4gYnVua2Fpc2VuXCA7Civnq6/looPmnJ8gPiBoYXpha2Fpa2lcIDsKK+WJjeOAheWbniA+IHplbnplbmthaVwgOwor6Kqe5rqQ5a2mID4gZ29nZW5nYWt1XCA7Civlv4Ppm7vlm7MgPiBzaGluZGVuenVcIDsKK+WBpeW6t+WcsCA+IGtlbmtvdWNoaVwgOwor5rCP5a2Q5pytID4gdWppa29mdWRhXCA7Civoq7jllY/poYwgPiBzaG9tb25kYWlcIDsKK+WPo+WUh+acnyA+IGtvdXNoaW5raVwgOwor5bCG5qOL55ukID4gc2hvdWdpYmFuXCA7CivnjYXlrZDllJAgPiBzaGlzaGl0b3VcIDsKK+W5s+S/oeW+kiA+IGhlaXNoaW50b1wgOwor5aSn5rCX5ZynID4gdGFpa2lhdHN1XCA7CivlsIbou43lrrYgPiBzaG91Z3Vua2VcIDsKK+WNg+S7o+e0mSA+IGNoaXlvZ2FtaVwgOwor5Li75oim6KuWID4gc2h1c2Vucm9uXCA7CivliqPnrYnnlJ8gPiByZXR0b3VzZWlcIDsKK+aWsOWtl+S9kyA+IHNoaW5qaXRhaVwgOwor57SN5ZOB5pu4ID4gbm91aGluc2hvXCA7CivnmoflpKrlrZAgPiBrb3V0YWlzaGlcIDsKK+mokuaTvue9qiA+IHNvdWpvdXphaVwgOwor5Y2K5a6Y5aCxID4gaGFua2FucG91XCA7CivlkIzkvLTogIUgPiBkb3VoYW5zaGFcIDsKK+a1t+m8oOadvyA+IG5hbWFrb2JhblwgOwor5YeG5aOr5a6YID4ganVuc2hpa2FuXCA7Civlrp/pqJPogIUgPiBqaWtrZW5zaGFcIDsKK+S7o+eQhualrSA+IGRhaXJpZ3lvdVwgOwor5LiA5qyh5YWDID4gaWNoaWppZ2VuXCA7CivnlKjnm4rmqKkgPiB5b3Vla2lrZW5cIDsKK+S4iuiFleetiyA+IGpvdXdhbmtpblwgOwor5Y+C5pS/5qipID4gc2Fuc2Vpa2VuXCA7Civlt6HnpLzogIUgPiBqdW5yZWlzaGFcIDsKK+Wun+mok+e+pCA+IGppa2tlbmd1blwgOwor56m65pmv5rCXID4ga2FyYWdlaWtpXCA7CivlhpnnnJ/lrrYgPiBzaGFzaGlua2FcIDsKK+i7iuakheWtkCA+IGt1cnVtYWlzdVwgOwor5o+u5q+r5paZID4ga2lnb3VyeW91XCA7CivorablkYrpn7MgPiBrZWlrb2t1b25cIDsKK+aVmeaOiOmZoyA+IGt5b3VqdWppblwgOwor5Yid5LiD5pelID4gc2hvbmFub2thXCA7Civlronlv4PmhJ8gPiBhbnNoaW5rYW5cIDsKK+Wkp+WFpemBkyA+IG9vbnl1dWRvdVwgOwor56S+5Lya5oKqID4gc2hha2FpYWt1XCA7CivkuLvoo73lk4EgPiBzaHVzZWloaW5cIDsKK+eEoeawl+WKmyA+IG11a2lyeW9rdVwgOwor56S+5Lya5oCnID4gc2hha2Fpc2VpXCA7CivohLHohILntr8gPiBkYXNzaGltZW5cIDsKK+awl+ixoeWPsCA+IGtpc2hvdWRhaVwgOwor5ZG95Luk5b2iID4gbWVpcmVpa2VpXCA7Civoq5bnkIblraYgPiByb25yaWdha3VcIDsKK+Wun+S9k+irliA+IGppdHRhaXJvblwgOwor5bCP5Lya5rS+ID4gc2hvdWthaWhhXCA7CivlkIzlgKTmgKcgPiBkb3VjaGlzZWlcIDsKK+mFuOaAp+WyqSA+IHNhbnNlaWdhblwgOwor5LiL6Laz55WqID4gZ2Vzb2t1YmFuXCA7CivmlqXlgJnlhbUgPiBzZWtrb3VoZWlcIDsKK+WlveW9semfvyA+IGtvdWVpa3lvdVwgOwor6YKv6YSy5birID4ga2FudGFuc2hpXCA7CivnlJ/ljJblraYgPiBzZWlrYWdha3VcIDsKK+ippuS5l+i7iiA+IHNoaWpvdXNoYVwgOwor6Kaz6Kan6ICFID4ga2FucmFuc2hhXCA7CivlpYnos4DluLMgPiBob3VnYWNob3VcIDsKK+Wcp+WItueahCA+IGFzc2VpdGVraVwgOwor54Kt6YW457SZID4gdGFuc2Fuc2hpXCA7Civlho3lvpPlvJ8gPiBzYWlqdXV0ZWlcIDsKK+S9meioiOiAhSA+IHlva2VpbW9ub1wgOwor5LiN5a+d55WqID4gZnVzaGluYmFuXCA7CivnkIblsYjlsYsgPiByaWt1dHN1eWFcIDsKK+S/neeuoeS6uiA+IGhva2FuJyduaW5cIDsKK+WEquiJr+mmrCA+IHl1dXJ5b3ViYVwgOwor6YGL6Ly46YePID4gdW4nJ3l1cnlvdVwgOwor5aSq5bmz5rSLID4gdGFpaGVpeW91XCA7Civosq/olLXlk4EgPiBjaG96b3VoaW5cIDsKK+WNmOezlumhniA+IHRhbnRvdXJ1aVwgOwor6IGa5qW956ysID4ganVyYWt1ZGFpXCA7CivnlJ/ljYrlj68gPiBuYW1haGFua2FcIDsKK+WNlOitsOaJgCA+IGt5b3VnaXNob1wgOwor5LuK5bm05bqmID4ga29uJyduZW5kb1wgOwor5YeG5pWZ5ZOhID4ganVua3lvdWluXCA7CivnpL7kvJrlsaQgPiBzaGFrYWlzb3VcIDsKK+WBpeW6t+S9kyA+IGtlbmtvdXRhaVwgOwor5oCd5pil5pyfID4gc2hpc2h1bmtpXCA7CivmlL7lsITmgKcgPiBob3VzaGFzZWlcIDsKK+iZq+WqkuiKsSA+IGNodXViYWlrYVwgOwor5YaZ55yf5ZmoID4gc2hhc2hpbmtpXCA7CivlhoXlkJHmgKcgPiBuYWlrb3VzZWlcIDsKK+aUueWul+iAhSA+IGthaXNvdXNoYVwgOwor5YSq5b6F5Yi4ID4geXV1dGFpa2VuXCA7Civlm5vkurrntYQgPiB5b25pbmd1bWlcIDsKK+mAgOWssOeahCA+IHRhaWVpdGVraVwgOwor5ZaE5b6M562WID4gemVuZ29zYWt1XCA7CivliqnmiYvluK0gPiBqb3NodXNla2lcIDsKK+eBq+acqOmHkSA+IGthbW9rdWtpblwgOwor5rCP5a2Q5bizID4gdWppa29jaG91XCA7CivnmoflpKrlkI4gPiBrb3V0YWlnb3VcIDsKK+eJueaUu+maiiA+IHRva2tvdXRhaVwgOwor6YG66KiA6ICFID4geXVpZ29uc2hhXCA7Civpg7flnJ/lj7IgPiBreW91ZG9zaGlcIDsKK+S7mOWxnuagoSA+IGZ1em9rdWtvdVwgOwor57Wx5rK76ICFID4gdG91Y2hpc2hhXCA7CivlkI3kurroirggPiBtZWlqaW5nZWlcIDsKK+WHhOaWh+WPpSA+IHN1Z29tb25rdVwgOwor5oim54G96ICFID4gc2Vuc2Fpc2hhXCA7CivoqabkvZzmqZ8gPiBzaGlzYWt1a2lcIDsKK+m7hOaer+iMtiA+IGtpZ2FyYWNoYVwgOwor6IOD6IW46JasID4gaWNob3V5YWt1XCA7Civpmb3pm7vlrZAgPiB5b3VkZW5zaGlcIDsKK+aWh+auiuanmCA+IG1vbmp1c2FtYVwgOwor5LuY5bGe5pu4ID4gZnV6b2t1c2hvXCA7CivoqI7oq5bogIUgPiB0b3Vyb25zaGFcIDsKK+Wkmuaxl+eXhyA+IHRha2Fuc2hvdVwgOwor5oqV5omL6ZmjID4gdG91c2h1amluXCA7CivkuK3ntpnmiYAgPiBjaHV1a2Vpam9cIDsKK+agueaLoOWcsCA+IGtvbmt5b2NoaVwgOwor5rOV5Lq656iOID4gaG91amluemVpXCA7CivlnLDlhYPmsJEgPiBqaW1vdG9taW5cIDsKK+W5tOacn+iAhSA+IG5lbmtpbW9ub1wgOwor6Z+z5qW95oCnID4gb25nYWt1c2VpXCA7CivooqvlkYrkurogPiBoaWtva3VuaW5cIDsKK+aWh+WMluW6gSA+IGJ1bmthY2hvdVwgOwor5YGP5ZCR5p2/ID4gaGVua291YmFuXCA7Civog4zku7vnvaogPiBoYWluaW56YWlcIDsKK+WCjeims+iAhSA+IGJvdWthbnNoYVwgOwor5pif54q25L2TID4gc2Vpam91dGFpXCA7CivmtojljJbliaQgPiBzaG91a2F6YWlcIDsKK+asp+W3nueJiCA+IG91c2h1dWJhblwgOwor5bCP6LGG57KlID4gYXp1a2lnYXl1XCA7Civns7vlm7PlraYgPiBrZWl6dWdha3VcIDsKK+ippumok+WumCA+IHNoaWtlbmthblwgOwor55+z5qWg6IqxID4gc2hha3VuYWdlXCA7Civmm7jnsKHnrosgPiBzaG9rYW5zZW5cIDsKK+WGjemFjeWIhiA+IHNhaWhhaWJ1blwgOwor5Y2U6K2w5a6YID4ga3lvdWdpa2FuXCA7CivlkIzpoZ7poIUgPiBkb3VydWlrb3VcIDsKK+iHqui7oui7uCA+IGppdGVuamlrdVwgOwor5LiK55Sy5p2/ID4gam91a2FucGFuXCA7CivlhajlnLDmlrkgPiB6ZW5jaGlob3VcIDsKK+S8muekvuazlSA+IGthaXNoYWhvdVwgOwor5aWJ5LuV5ZOBID4gaG91c2hpaGluXCA7CivmiKrmi7PpgZMgPiBzZWtrZW5kb3VcIDsKK+S7leiInuWxiyA+IHNoaW1vdGF5YVwgOwor5oqY6KG35qGIID4gc2V0Y2h1dWFuXCA7CivoiKrnqbrpmoogPiBrb3VrdXV0YWlcIDsKK+idpuifh+WPoyA+IGdhbWFndWNoaVwgOwor56aB5q2i5rOVID4ga2luc2hpaG91XCA7CivpgZPlhbfmlrkgPiBkb3VndWthdGFcIDsKK+aXpumCo+iKuCA+IGRhbicnbmFnZWlcIDsKK+aJtumkiuaWmSA+IGZ1eW91cnlvdVwgOwor5LiN5L+h5b+DID4gZnVzaGluamluXCA7CivlubPlronmnJ0gPiBoZWlhbmNob3VcIDsKK+WGhemHjuW4rSA+IG5haXlhc2VraVwgOwor5Zug5p6c5b6LID4gaW5nYXJpdHN1XCA7Civou73mvJTliocgPiBrZWllbmdla2lcIDsKK+adv+mHkeW3pSA+IGJhbmtpbmtvdVwgOwor5a6a5L6h6KGoID4gdGVpa2FoeW91XCA7Civnr6Tlv5flrrYgPiB0b2t1c2hpa2FcIDsKK+ippumok+WgtCA+IHNoaWtlbmpvdVwgOwor5peF6KGM6ICFID4gcnlva291c2hhXCA7Civmra/pvabngo4gPiBzaGlnaW4nJ2VuXCA7Civom7jlnYrkuLsgPiB0YWtvYm91enVcIDsKK+WPguaUv+WumCA+IHNhbnNlaWthblwgOwor6LuN5LqL55qEID4gZ3Vuaml0ZWtpXCA7Civlj6Tpiq3lraYgPiBrb3Nlbmdha3VcIDsKK+i7jeWumOaGsiA+IGd1bmthbmtlblwgOwor6Zai5pWw6KuWID4ga2Fuc3V1cm9uXCA7CivmsrvnmYLosrsgPiBjaGlyeW91aGlcIDsKK+adv+mHkeWxiyA+IGJhbmtpbicneWFcIDsKK+aTjei7iuWgtCA+IHNvdXNoYWpvdVwgOwor5oqV6J6N6LOHID4gdG91eXV1c2hpXCA7Civpnanlkb3mrYwgPiBrYWt1bWVpa2FcIDsKK+ekvuS6pOaApyA+IHNoYWtvdXNlaVwgOwor5pOs54iG5by+ID4gZ2liYWt1ZGFuXCA7Civnq7nonLvom4kgPiB0YWtldG9uYm9cIDsKK+i2heWFmua0viA+IGNob3V0b3VoYVwgOwor5ZWP6aGM5aSWID4gbW9uZGFpZ2FpXCA7CivkuIDoiKznmoQgPiBpcHBhbnRla2lcIDsKK+izh+acrOmHkSA+IHNoaWhvbmtpblwgOwor55S35a2Q55SoID4gZGFuc2hpeW91XCA7Civlr77nlJ/okYkgPiB0YWlzZWl5b3VcIDsKK+ekvuS8muWFmiA+IHNoYWthaXRvdVwgOwor5Y6t5LiW55qEID4gZW5zZWl0ZWtpXCA7CivoqJPnt7TnlJ8gPiBrdW5yZW5zZWlcIDsKK+i0iOWRiOacrCA+IHpvdXRlaWJvblwgOwor5aSi6YGK55eFID4gbXV5dXVieW91XCA7Civlrrbml4/ms5UgPiBrYXpva3Vob3VcIDsKK+S6uuawl+agqiA+IG5pbmtpa2FidVwgOwor6Kqt5b6M5oSfID4gZG9rdWdva2FuXCA7CivljZjntLDog54gPiB0YW5zYWlib3VcIDsKK+mztOemvemhniA+IG1laWtpbnJ1aVwgOwor5YaF6YOo55qEID4gbmFpYnV0ZWtpXCA7Civnt7TlhbXloLQgPiByZW5wZWlqb3VcIDsKK+Wkp+WJjeaPkCA+IGRhaXplbnRlaVwgOwor5YaN5b6T5YWEID4gc2FpanV1a2VpXCA7Civlj6/li5XmqYsgPiBrYWRvdWt5b3VcIDsKK+eUu+acn+eahCA+IGtha2tpdGVraVwgOwor6Z+z5qW95aCCID4gb25nYWt1ZG91XCA7CivojZLpmqDlhYMgPiBzYXlhaW5nZW5cIDsKK+a0l+ekvOWQjSA+IHNlbnJlaW1laVwgOwor54++5qWt5ZOhID4gZ2VuZ3lvdWluXCA7CivkuIDlt6XlpKsgPiBoaXRva3VmdXVcIDsKK+iGneWwj+WDpyA+IGhpemFrb3pvdVwgOwor5L2c6Kme5a62ID4gc2FrdXNoaWthXCA7CivkvZzngrrnmoQgPiBzYWt1aXRla2lcIDsKK+Wwj+Wuh+WumSA+IHNob3V1Y2h1dVwgOwor6aKo5rC05a6zID4gZnV1c3VpZ2FpXCA7CivljZjmlbDlvaIgPiB0YW5zdXVrZWlcIDsKK+awtOa6tua2siA+IHN1aXlvdWVraVwgOwor5aSn6LuK6LyqID4gZGFpc2hhcmluXCA7CivmlLnlrprniYggPiBrYWl0ZWloYW5cIDsKK+ekvuS8muS6uiA+IHNoYWthaWppblwgOwor5oKq5b2x6Z+/ID4gYWt1ZWlreW91XCA7Civopb/pg6jliocgPiBzZWlidWdla2lcIDsKK+mbkeiyqOWVhiA+IHpha2thc2hvdVwgOwor5Yqj562J5oSfID4gcmV0dG91a2FuXCA7CivpgI/mmI7mgKcgPiB0b3VtZWlzZWlcIDsKK+iLpeWkq+WppiA+IHdha2FmdXVmdVwgOwor54++5Luj6KmpID4gZ2VuZGFpc2hpXCA7CivpmbDpmb3pgZMgPiBvbm15b3Vkb3VcIDsKK+S8keaGqeaJgCA+IGt5dXVrZWlqb1wgOwor6YWN57Wm5omAID4gaGFpa3l1dWpvXCA7Civoo4XouqvlhbcgPiBzb3VzaGluZ3VcIDsKK+eEoeasoOW4rSA+IG11a2Vzc2VraVwgOwor6Ieq5Yi25b+DID4gamlzZWlzaGluXCA7Civlia/kvZznlKggPiBmdWt1c2F5b3VcIDsKK+WGjemBuOaMmSA+IHNhaXNlbmt5b1wgOwor6Zqg5Yy/6ICFID4gaW50b2t1c2hhXCA7CivlkIzkurrnqK4gPiBkb3VqaW5zaHVcIDsKK+mBi+mAgealrSA+IHVuc291Z3lvdVwgOwor5YaF5YuZ55yBID4gbmFpbXVzaG91XCA7Civngq3phbjmsLQgPiB0YW5zYW5zdWlcIDsKK+WLpOeOi+WutiA+IGtpbicnbm91a2FcIDsKK+ihm+eUn+eahCA+IGVpc2VpdGVraVwgOwor56u25oqA6ICFID4ga3lvdWdpc2hhXCA7Civlho3nmbrooYwgPiBzYWloYWtrb3VcIDsKK+mBuuiogOeKtiA+IHl1aWdvbmpvdVwgOwor54K555y85rC0ID4gdGVuZ2Fuc3VpXCA7Civou73lkIjph5EgPiBrZWlnb3VraW5cIDsKK+S4gOeZuuWxiyA+IGlwcGF0c3V5YVwgOwor5YWo6KO95ZOBID4gemVuc2VpaGluXCA7Civlv5zlj6zogIUgPiBvdXNob3VzaGFcIDsKK+WPpOWNsOe0mSA+IGZ1cnVpbnNoaVwgOwor6LOH5pys6LKhID4gc2hpaG9uemFpXCA7Civlm57poafnmoQgPiBrYWlrb3Rla2lcIDsKK+S6jOimquetiSA+IG5pc2hpbnRvdVwgOwor5Lqk5oim5qipID4ga291c2Vua2VuXCA7CivluoPloLHoqowgPiBrb3Vob3VzaGlcIDsKK+S+i+W5tOelrSA+IHJlaW5lbnNhaVwgOwor5LqI6Ziy6JasID4geW9ib3V5YWt1XCA7Civlkozlo7DlraYgPiB3YXNlaWdha3VcIDsKK+mfs+alveWPsiA+IG9uZ2FrdXNoaVwgOwor6JCO57iu6IWOID4gaXNodWt1amluXCA7Civnm5fogbTlmaggPiB0b3VjaG91a2lcIDsKK+S6iOe0hOmHkSA+IHlveWFrdWtpblwgOwor5pil5aC05omAID4gaGFydWJhc2hvXCA7Civnp5/lurjoqr8gPiBzb3lvdWNob3VcIDsKK+WOn+WtkOirliA+IGdlbnNoaXJvblwgOwor54Sh5qmf54mpID4gbXVraWJ1dHN1XCA7CivmsbrorbDmoYggPiBrZXRzdWdpYW5cIDsKK+WJteS9nOWutiA+IHNvdXNha3VrYVwgOwor54ib54af5pyfID4gcmFuanVrdWtpXCA7CivkuK3plpPmtL4gPiBjaHV1a2FuaGFcIDsKK+mHjOeoi+aomSA+IHJpdGVpaHlvdVwgOwor6LOH5pys6KuWID4gc2hpaG9ucm9uXCA7Civku4rmp5jmrYwgPiBpbWF5b3V1dGFcIDsKK+S8mua0peWhlyA+IGFpZHp1bnVyaVwgOwor5Li45Z2K5Li7ID4gbWFydWJvdXp1XCA7Civnp7vmpI3mgKcgPiBpc2hva3VzZWlcIDsKK+WJjeW+jOetliA+IHplbmdvc2FrdVwgOwor5Yil5aSp5ZywID4gYmV0dGVuY2hpXCA7CivljZTorbDkvJogPiBreW91Z2lrYWlcIDsKK+mYsuepuuWjlSA+IGJvdWt1dWdvdVwgOwor6YGL6YCB5paZID4gdW5zb3VyeW91XCA7Civlub3pnIroiLkgPiB5dXVyZWlzZW5cIDsKK+S8r+WCmee3miA+IGhha3ViaXNlblwgOwor6IOD6IW455eFID4gaWNob3VieW91XCA7CivlkYrnpLrmnb8gPiBrb2t1amliYW5cIDsKK+Wwj+S9nOS6uiA+IGtvc2FrdW5pblwgOwor6Zui6ZaT562WID4gcmlrYW5zYWt1XCA7CivmsJHmlbDoqJggPiBtaW5zdXVraVwgOwor6YmE56Cy5bqnID4gdGVwcG91emFcIDsKK+aWh+WMluS6uiA+IGJ1bmthamluXCA7CivmnKjlt6XmiYAgPiBtb2trb3Vqb1wgOwor5LiA6Iis5rOVID4gaXBwYW5ob3VcIDsKK+WKtOWLmeiAhSA+IHJvdW11c2hhXCA7CivmlofluqvmnKwgPiBidW5rb2JvblwgOwor5Luj55CG5Lq6ID4gZGFpcmluaW5cIDsKK+a1t+awtOedgCA+IGthaXN1aWdpXCA7Civoh6rlt7HmtYEgPiBqaWtvcnl1dVwgOwor5LiB5a+n6KqeID4gdGVpbmVpZ29cIDsKK+mfs+alveS8miA+IG9uZ2Fra2FpXCA7CivlkIzog57mhJsgPiBkb3Vob3VhaVwgOwor5q+b5ZSQ5Lq6ID4ga2V0b3VqaW5cIDsKK+awkeS6i+S4iiA+IG1pbmppam91XCA7Civmt6HlvannlLsgPiB0YW5zYWlnYVwgOwor5pyf5b6F5YCkID4ga2l0YWljaGlcIDsKK+WFqOijuOS9kyA+IHplbnJhdGFpXCA7Civnq4vkvZPmtL4gPiByaXR0YWloYVwgOwor6K236YCB6Ii5ID4gZ29zb3VzZW5cIDsKK+mHjuibruS6uiA+IHlhYmFuamluXCA7CivlpbPmgKfou40gPiBqb3NlaWd1blwgOwor5ZCM6Laj5ZGzID4gZG91c2h1bWlcIDsKK+WPr+WLleaApyA+IGthZG91c2VpXCA7CivkuI3ppIrnlJ8gPiBmdXlvdWpvdVwgOwor6aO95ZKM54K5ID4gaG91d2F0ZW5cIDsKK+aXouW+gOeXhyA+IGtpb3VzaG91XCA7CivkuIDoh7TngrkgPiBpdGNoaXRlblwgOwor562G6KiY6ICFID4gaGlra2lzaGFcIDsKK+mAgemiqOapnyA+IHNvdWZ1dWtpXCA7Civlp6vlvqHlrZAgPiBoaW1lbWlrb1wgOwor5omL6YWN5pu4ID4gdGVoYWlzaG9cIDsKK+iEs+ePiueRmiA+IG5vdXNhbmdvXCA7CivkuIrlsaTlnJ8gPiBqb3Vzb3Vkb1wgOwor5LqI57SE6KqeID4geW95YWt1Z29cIDsKK+ayueanveiIuSA+IHl1c291c2VuXCA7CivkuIDlr7joposgPiBjaG90dG9taVwgOwor5LqI6Ziy57eaID4geW9ib3VzZW5cIDsKK+WLmOWumuaXpSA+IGthbmpvdWJpXCA7CivlhoXluJHph5EgPiBuYWlkb2tpblwgOwor5Lyd6YCB6LevID4gZGVuc291cm9cIDsKK+mKgOe0sOW3pSA+IGdpbnphaWt1XCA7Civkurrnm7joposgPiBuaW5zb3VtaVwgOwor6aKo5Yi655S7ID4gZnV1c2hpZ2FcIDsKK+WNiOmkkOS8miA+IGdvc2Fua2FpXCA7CivnhKHmrKDli6QgPiBtdWtla2tpblwgOwor5q+U6YeN6KiIID4gaGlqdXVrZWlcIDsKK+mBi+mAgeW6lyA+IHVuc291dGVuXCA7Civmk43kvZznm6QgPiBzb3VzYWJhblwgOwor5Zyo5bqr5ZOBID4gemFpa29oaW5cIDsKK+awkeS4u+WMliA+IG1pbnNodWthXCA7Civlu7bmu57ph5EgPiBlbnRhaWtpblwgOwor5ZSQ56C06aKoID4ga2FyYWhhZnVcIDsKK+iHquWFrOawkSA+IGppa291bWluXCA7Civos6LlpKvkurogPiBrZW5wdWppblwgOwor6YGL6Lui6ICFID4gdW50ZW5zaGFcIDsKK+S4jeagvOWlvSA+IGJ1a2Fra291XCA7Civlgqzmt6vliaQgPiBzYWlpbnphaVwgOwor5qCE6aSK55+tID4gZWl5b3V0YW5cIDsKK+WMu+WtpueVjCA+IGlnYWt1a2FpXCA7CivnhKHluLjmhJ8gPiBtdWpvdWthblwgOwor6IOM5qC85aW9ID4gc2VrYWtrb3VcIDsKK+Wxseafu+WtkCA+IHNhbnphc2hpXCA7CivljLvlrabnlJ8gPiBpZ2FrdXNlaVwgOwor6ZaL5qWt5Yy7ID4ga2FpZ3lvdWlcIDsKK+S+v+iho+maiiA+IGJlbicnaXRhaVwgOwor5bm55LqL5LyaID4ga2FuamlrYWlcIDsKK+WkmuWOn+WtkCA+IHRhZ2Vuc2hpXCA7CivljYHlrZflvaIgPiBqdXVqaWtlaVwgOwor5aSW6YeO5omLID4gZ2FpeWFzaHVcIDsKK+WBpeiDg+mMoCA+IGtlbicnaWpvdVwgOwor6Zai6KW/6aasID4ga2Fuc2FpYmFcIDsKK+aMh+ekuuipniA+IHNoaWppc2hpXCA7CivmmI7ml6XokYkgPiBhc2hpdGFiYVwgOwor55+t6Led6ZuiID4gdGFua3lvcmlcIDsKK+S4gOi7kuWxiyA+IGlra2VuJyd5YVwgOwor6Iq45YKZ57eaID4gZ2VpYmlzZW5cIDsKK+mZo+Wkqum8kyA+IGppbmRhaWtvXCA7CivnnJ/lhqzml6UgPiBtYWZ1eXViaVwgOwor5Zub5a2j5aCxID4gc2hpa2lob3VcIDsKK+S4gOi7kuWutiA+IGlra2VuJyd5YVwgOwor57mB6I+v6KGXID4gaGFua2FnYWlcIDsKK+iok+e3tOaJgCA+IGt1bnJlbmpvXCA7CivmtbfmsLTmuKkgPiBrYWlzdWlvblwgOwor562L6Zu75ZuzID4ga2luZGVuenVcIDsKK+azjOWwv+W5viA+IGhpbnlvdWtpXCA7CivkuI3lronlv4MgPiBmdWFuc2hpblwgOwor6Kiq5ZWP552AID4gaG91bW9uZ2lcIDsKK+S8muekvuWToSA+IGthaXNoYWluXCA7Civms5XnjovmqKkgPiBob3VvdWtlblwgOwor5LiN5bCO5L2TID4gZnVkb3V0YWlcIDsKK+WNmOippuWQiCA+IHRhbnNoaWFpXCA7CivlhpnnlJ/nlLsgPiBzaGFzZWlnYVwgOwor566h55CG5Lq6ID4ga2FucmluaW5cIDsKK+S4gOWutuiogCA+IGlra2Fnb3RvXCA7CivlkIzmnJ/nlJ8gPiBkb3VraXNlaVwgOwor5LiB5a6a6KaPID4gdGVpam91Z2lcIDsKK+WuiOWCmemaiiA+IHNodWJpdGFpXCA7CivkvbXlkIjnvaogPiBoZWlnb3phaVwgOwor5rCX54Sh57K+ID4ga2lidXNob3VcIDsKK+S4ieaemuebriA+IHNhbm1haW1lXCA7CivmiYvphY3luKsgPiB0ZWhhaXNoaVwgOwor54Sh6Ieq6KaaID4gbXVqaWtha3VcIDsKK+eBq+S6i+azpSA+IGthamlkb3JvXCA7Civkurrlt6Xoqp4gPiBqaW5rb3Vnb1wgOwor5pei5b6A5q20ID4ga2lvdXJla2lcIDsKK+S4gOiIrOaApyA+IGlwcGFuc2VpXCA7CivlubTmnIjml6UgPiBuZW5nYXBwaVwgOwor5aSJ5oiQ5ZmoID4gaGVuc2Vpa2lcIDsKK+acquS/oeiAhSA+IG1pc2hpbmphXCA7CivkuI3moYjlhoUgPiBmdWFuJyduYWlcIDsKK+iHquajhOmFkiA+IHlha2V6YWtlXCA7CivloZHlvL7mgKcgPiBzb2RhbnNlaVwgOwor5q2m5Zmo5YCJID4gYnVraWd1cmFcIDsKK+iBtOmfs+WZqCA+IGNob3VvbmtpXCA7CivlubPku67lkI0gPiBoaXJhZ2FuYVwgOwor5oSf55+l5ZmoID4ga2FuY2hpa2lcIDsKK+WJjeWNiuacnyA+IHplbnBhbmtpXCA7Civnqbroq5blrrYgPiBrdXVyb25rYVwgOwor6L6y6ZaR5pyfID4gbm91a2Fua2lcIDsKK+S4jeizm+aIkCA+IGZ1c2Fuc2VpXCA7CivppIrpto/lrrYgPiB5b3VrZWlrYVwgOwor5Y2B5LqM5pSvID4ganV1bmlzaGlcIDsKK+ani+aIkOavlCA+IGtvdXNlaWhpXCA7CivlkJHml6XokbUgPiBoaW1hd2FyaVwgOwor5qmf5qWt5a62ID4ga2lneW91a2FcIDsKK+awtOa7uOS8nSA+IHN1aWtvZGVuXCA7CivlvqHlrKLmp5ggPiBvam91c2FtYVwgOwor6Ieo5bqK5Yy7ID4gcmluc2hvdWlcIDsKK+aghOmkiua6kCA+IGVpeW91Z2VuXCA7CivlpJrlubTojYkgPiB0YW5lbnNvdVwgOwor6I235Y6E5LuLID4gbml5YWtrYWlcIDsKK+WKseejgeaQjSA+IHJlaWppc29uXCA7Civlronlhajnk6MgPiBhbnplbmJlblwgOwor6YeN6YW457SgID4ganV1c2Fuc29cIDsKK+S6jOWhgeaJiyA+IG5pcnVpc2h1XCA7CivmnKjlt6XlhbcgPiBtb2trb3VndVwgOwor54K555y85ZmoID4gdGVuZ2Fua2lcIDsKK+iOq+Wkp+WwjyA+IG1lcml5YXN1XCA7Civoo73pi7zmiYAgPiBzZWlrb3Vqb1wgOwor6Zqg6JS95a2QID4gaW5wZWlzaGlcIDsKK+WLmOWumuWgtCA+IGthbmpvdWJhXCA7Civnvr3lm6PmiYcgPiBoYXVjaGl3YVwgOwor56C05oiS5YOnID4gaGFrYWlzb3VcIDsKK+eArOaIuOeJqSA+IHNldG9tb25vXCA7CivlpKfoi7Hmlq0gPiBkYWllaWRhblwgOwor5rOM5bC/5ZmoID4gaGlueW91a2lcIDsKK+WFiOitsOaoqSA+IHNlbmdpa2VuXCA7Civlj43mipfmnJ8gPiBoYW5rb3VraVwgOwor5pys5Lya6K2wID4gaG9ua2FpZ2lcIDsKK+iLseexs+S6uiA+IGVpYmVpamluXCA7CivkvY7poIbkvY0gPiB0ZWlqdW4nJ2lcIDsKK+S4jeiAgeaziSA+IGZ1cm91c2VuXCA7CivlkI3lrpvkurogPiBuYWF0ZW5pblwgOwor6Ieq55Sx6KmpID4gaml5dXVzaGlcIDsKK+aEj+W/l+eahCA+IGlzaGl0ZWtpXCA7CivmiKbpl5jlk6EgPiBzZW50b3VpblwgOwor5Y6f55S75YOPID4gZ2VuZ2F6b3VcIDsKK+Wkp+iFv+mDqCA+IGRhaXRhaWJ1XCA7Civmu4vos4DnnIwgPiBzaGlnYWtlblwgOwor6YeN5rC057SgID4ganV1c3Vpc29cIDsKK+S6uumAoOa5liA+IGppbnpvdWtvXCA7Civoq4vosqDluKsgPiB1a2VvaXNoaVwgOwor5rC05rqW5ZmoID4gc3VpanVua2lcIDsKK+a8q+eUu+acrCA+IG1hbmdhaG9uXCA7CivkupLmj5vmgKcgPiBnb2thbnNlaVwgOwor56iu56iu55u4ID4gc2h1anVzb3VcIDsKK+S6iOmYsuazlSA+IHlvYm91aG91XCA7Civlronlhajnga8gPiBhbnplbnRvdVwgOwor6YGL6YCB5Lq6ID4gdW5zb3VuaW5cIDsKK+S4iummluWwviA+IGpvdXNodWJpXCA7Civku4/oiI7liKkgPiBidXNzaGFyaVwgOwor6IiH5aSq6ICFID4geW90YW1vbm9cIDsKK+a6gOWkqeS4iyA+IG1hbnRlbmthXCA7CivkvqHmoLzlt64gPiBrYWtha3VzYVwgOwor54Sh6Iqx5p6cID4gaWNoaWppa3VcIDsKK+S4jeS6uuaDhSA+IGZ1bmluam91XCA7CivlnJ/lu7rlsYsgPiBkb2tlbicneWFcIDsKK+mBruaWreapnyA+IHNoYWRhbmtpXCA7CivkubHmna3mra8gPiByYW5ndWliYVwgOwor6J2L57Sw5belID4gcm91emFpa3VcIDsKK+eznOeIm+aApyA+IGJpcmFuc2VpXCA7CivosrTlhazlrZAgPiBraWtvdXNoaVwgOwor5buJ5L6h54mIID4gcmVua2FiYW5cIDsKK+WOn+WtkOeCiSA+IGdlbnNoaXJvXCA7Civou6Lmj5vngokgPiB0ZW5rYW5yb1wgOwor6buO5piO5pyfID4gcmVpbWVpa2lcIDsKK+iPluiSsua5ryA+IHNob3VidXl1XCA7CivnhKHpp4TpqqggPiBtdWRhYm9uZVwgOwor6aGe5Ly85ZOBID4gcnVpamloaW5cIDsKK+mjm+ihjOmaiiA+IGhpa291dGFpXCA7Civph5Hps7PoirEgPiBraW5wb3VnZVwgOwor6buS6Zuy5q+NID4ga3Vyb3VubW9cIDsKK+ebuOaJi+aWuSA+IGFpdGVnYXRhXCA7CivkuI3lrozlhaggPiBmdWthbnplblwgOwor56WW5Zu95oSbID4gc29rb2t1YWlcIDsKK+WLn+mbhuiyuyA+IGJvc2h1dWhpXCA7CivnlJ/nlKPosrsgPiBzZWlzYW5oaVwgOwor57Wx5ZCI5YyWID4gdG91Z291a2FcIDsKK+aXheihjOWutiA+IHJ5b2tvdWthXCA7CivnpL7lpJbnp5ggPiBzaGFnYWloaVwgOwor5b6T5L6h56iOID4ganV1a2F6ZWlcIDsKK+S9v+W+kuabuCA+IHNoaXRvc2hvXCA7Civlr53ljJbnsqcgPiBuZWdlc2hvdVwgOwor5Ym15LiW5pyfID4gc291c2Vpa2lcIDsKK+mHkeebrumvmyA+IGtpbm1lZGFpXCA7CivkuIrkuIvnt5ogPiBqb3VnZXNlblwgOwor55CG5LqL5Zu9ID4gcmlqaWtva3VcIDsKK+awtOa6luWEgCA+IHN1aWp1bmdpXCA7Civlho3kv53pmbogPiBzYWlob2tlblwgOwor5LiL6aas5YWIID4gZ2ViYXNha2lcIDsKK+azieiyqOe0mSA+IHNlbmthc2hpXCA7CivlvqHku6TlrKIgPiBnb3JlaWpvdVwgOwor6Zu75rCX6KGXID4gZGVua2lnYWlcIDsKK+i7jeaUv+mDqCA+IGd1bnNlaWJ1XCA7CivlvqHpoYznm64gPiBvZGFpbW9rdVwgOwor54Sh5L+d6Ki8ID4gbXVob3Nob3VcIDsKK+WPr+WIhuaApyA+IGthYnVuc2VpXCA7CivkupzpiZvpiYQgPiBhZW50ZXRzdVwgOwor5YuV5a6J5a6aID4gZG91YW50ZWlcIDsKK+WIkeS6i+S4iiA+IGtlaWppam91XCA7CivlpbPmgKfnlKggPiBqb3NlaXlvdVwgOwor5Lm+54el54KJID4ga2Fuc291cm9cIDsKK+iCsuWFkOazlSA+IGlrdWppaG91XCA7CivmhJvps6XlrrYgPiBhaWNob3VrYVwgOwor5pys6Iie5Y+wID4gaG9uYnV0YWlcIDsKK+WAi+S6uuaApyA+IGtvamluc2VpXCA7Civkvp3lrZjnl4cgPiBpem9uc2hvdVwgOwor5oKq5oCn5bqmID4gYWt1c2VpZG9cIDsKK+e+jueUt+WtkCA+IGJpbmFuc2hpXCA7Civpm7vms6Lms5UgPiBkZW5wYWhvdVwgOwor6LuN5LqL5LiKID4gZ3Vuamlqb3VcIDsKK+eDj+eKgOinkiA+IHVzYWlrYWt1XCA7CivlgY/lvq7liIYgPiBoZW5iaWJ1blwgOwor57Sg5a+S6LKnID4gc3VrYW5waW5cIDsKK+ixmuWwj+WxiyA+IGJ1dGFnb3lhXCA7Civlu7bmu57nqI4gPiBlbnRhaXplaVwgOwor5Yal546L5pifID4gbWVpb3VzZWlcIDsKK+WGhuebpOeKtiA+IGVuYmFuam91XCA7CivolLXmm7jlrrYgPiB6b3VzaG9rYVwgOwor6Yyy6Z+z5qmfID4gcm9rdW9ua2lcIDsKK+mBjuiIrOadpSA+IGthaGFucmFpXCA7CivpkZrlrZTmqZ8gPiBzYW5rb3VraVwgOwor5LiA6Iis5Lq6ID4gaXBwYW5qaW5cIDsKK+ebuOaJi+W9uSA+IGFpdGV5YWt1XCA7CivmranlkIjntaYgPiBidWFpa3l1dVwgOwor5LqV5oi457axID4gaWRvZHp1bmFcIDsKK+aXouefpeaVsCA+IGtpY2hpc3V1XCA7Civlt6Xli5nlupcgPiBrb3VtdXRlblwgOwor5LiA5pyx6YqAID4gaXNzaHVnaW5cIDsKK+iIquepuuapnyA+IGtvdWt1dWtpXCA7Civpu5LnubvlrZAgPiBrdXJvanVzdVwgOwor55m76KiY5omAID4gdG91a2lzaG9cIDsKK+mBqeaZguaJkyA+IHRla2lqaWRhXCA7CivlkIjnkIbmgKcgPiBnb3VyaXNlaVwgOwor6Zmw6Zu75a2QID4gaW5kZW5zaGlcIDsKK+WKqeWLleipniA+IGpvZG91c2hpXCA7CivmhbDol4nmlpkgPiBpc2hhcnlvdVwgOwor6KGb55Sf5YW1ID4gZWlzZWloZWlcIDsKK+S9jueJqeS+oSA+IHRlaWJ1a2thXCA7CivlgIvkurrlsZUgPiBrb2ppbnRlblwgOwor5a6f5L2T5YyWID4gaml0dGFpa2FcIDsKK+mCqumtlOiAhSA+IGphbWFtb25vXCA7CivnsbPorbDkvJogPiBiZWlnaWthaVwgOwor54Sh5bC96JS1ID4gbXVqaW56b3VcIDsKK+i7ouaPm+acnyA+IHRlbmthbmtpXCA7Civku6PorbDlo6sgPiBkYWlnaXNoaVwgOwor6by75r+B6Z+zID4gYmlkYWt1b25cIDsKK+mrmOmbu+S9jSA+IGtvdWRlbicnaVwgOwor5oyB5Y+C6YeRID4gamlzYW5raW5cIDsKK+WUr+eQhuirliA+IHl1aXJpcm9uXCA7CivlkI3mnJvlrrYgPiBtZWlib3VrYVwgOwor5aSa5YWD6KuWID4gdGFnZW5yb25cIDsKK+iHquajhOezniA+IHlha2VrdXNvXCA7CivmraPnrKblj7cgPiBzZWlmdWdvdVwgOwor54Sh55Sj6ICFID4gbXVzYW5zaGFcIDsKK+iCsuWFkOabuCA+IGlrdWppc2hvXCA7CivlrprmnJ/oiLkgPiB0ZWlraXNlblwgOwor5omL5byB5b2TID4gdGViZW50b3VcIDsKK+S5vueHpeapnyA+IGthbnNvdWtpXCA7CivkuInml6XplpMgPiBtaWtrYWthblwgOwor5Y2B5LqM5YiGID4ganV1bmlidW5cIDsKK+eoveWPpOWPsCA+IGtlaWtvZGFpXCA7CivlhYjpoK3kvI0gPiBzZW50b3Vnb1wgOwor5Ye65p2l6auYID4gZGVraWRha2FcIDsKK+S4ieS4luebuCA+IHNhbnplc291XCA7CivpgYvmoLnpiI0gPiB1bmtvbmRvblwgOwor6KGb55Sf5LiKID4gZWlzZWlqb3VcIDsKK+WMu+WtpuWjqyA+IGlnYWt1c2hpXCA7Civoq4vosqDkurogPiB1a2VvaW5pblwgOwor5pat6Z2i5ZuzID4gZGFubWVuenVcIDsKK+iZmuS7rueMvyA+IGtva2V6YXJ1XCA7CivmnKrkvb/nlKggPiBtaXNoaXlvdVwgOwor6Zu75rOi5pifID4gZGVucGFzZWlcIDsKK+mfs+mfu+irliA+IG9uJydpbnJvblwgOwor5qmf5qKw5belID4ga2lrYWlrb3VcIDsKK+WGjeWwgemOliA+IHNhaWZ1dXNhXCA7CivpmLLms6LloKQgPiBib3VoYXRlaVwgOwor6YGL6Lui5omLID4gdW50ZW5zaHVcIDsKK+S6ieimh+aIpiA+IHNvdWhhc2VuXCA7Civpu5LmloflrZcgPiBrdXJvbW9qaVwgOwor54Sh6aeE6LazID4gbXVkYWFzaGlcIDsKK+edgOeJqeWcsCA+IGtpbW9ub2ppXCA7CivlpJbmsJflnI8gPiBnYWlraWtlblwgOwor6ZaL5Lya5pelID4ga2Fpa2FpYmlcIDsKK+eUseadpeabuCA+IHl1cmFpc2hvXCA7CivptZ3lj6PnmKEgPiBnYWtvdXNvdVwgOwor5Lm+54el5p6cID4ga2Fuc291a2FcIDsKK+WuieWFqOaApyA+IGFuemVuc2VpXCA7Civkub7nh6XmnJ8gPiBrYW5zb3VraVwgOwor5qCE6aSK5aOrID4gZWl5b3VzaGlcIDsKK+WPsOW4g+W3viA+IGRhaWJ1a2luXCA7Civmp4vmiJDlk6EgPiBrb3VzZWlpblwgOwor5qih56+E55SfID4gbW9oYW5zZWlcIDsKK+WuieWFqOW8gSA+IGFuemVuYmVuXCA7Civpp4bli5XovKogPiBrdWRvdXJpblwgOwor5p2x5rSL5Y+yID4gdG95b2Z1bWlcIDsKK+WNmOeyvuW6piA+IHRhbnNlaWRvXCA7CivngavmnKjlnJ8gPiBrYW1va3Vkb1wgOwor5Luj6K2w5Yi2ID4gZGFpZ2lzZWlcIDsKK+acquWumueovyA+IG1pdGVpa291XCA7CivkuJboqbHniakgPiBzZXdhbW9ub1wgOwor6Kaz5oim6KiYID4ga2Fuc2Vua2lcIDsKK+WkqeeTnOeyiSA+IHRlbmthZnVuXCA7CivlvaLmiJDmnJ8gPiBrZWlzZWlraVwgOwor5pS+5pig5qipID4gaG91ZWlrZW5cIDsKK+ebo+imluaJgCA+IGthbnNoaWpvXCA7CivlvqHmnKzlsIogPiBnb2hvbnpvblwgOwor5Y2Y57SU5YyWID4gdGFuanVua2FcIDsKK+WAi+S6uuWQjSA+IGtvamlubWVpXCA7CivmpJznnLzljLsgPiBrZW5nYW4nJ2lcIDsKK+WMu+WtpuWPsiA+IGlnYWt1c2hpXCA7CivmnKrouI/ls7AgPiBtaXRvdWhvdVwgOwor5pat5pat5Zu6ID4gZGFuZGFua29cIDsKK+aaluaIv+WZqCA+IGRhbmJvdWtpXCA7CivmlqHml4vogIUgPiBhc3NlbnNoYVwgOwor5LuP55Sf5LyaID4gYnVzc2hvdWVcIDsKK+imj+agvOWMliA+IGtpa2FrdWthXCA7Civlj7jku6Tpg6ggPiBzaGlyZWlidVwgOwor5oSP5Yyg5qipID4gaXNob3VrZW5cIDsKK+WwiuaVrOiqniA+IHNvbmtlaWdvXCA7CivlvaLmhYvntKAgPiBrZWl0YWlzb1wgOwor576O5bCR5aWzID4gYmlzaG91am9cIDsKK+WGhumBi+WLlSA+IGVuJyd1bmRvdVwgOwor6LGh54mZ6ImyID4gem91Z2Vpcm9cIDsKK+mBruaWreWZqCA+IHNoYWRhbmtpXCA7CivoqLHlj6/mm7ggPiBreW9rYXNob1wgOwor5ZWG6K2w5ZOhID4gc2hvdWdpaW5cIDsKK+W+oeS4gOaWsCA+IGdvaXNzaGluXCA7CivmhInlv6vniq8gPiB5dWthaWhhblwgOwor5oyH56S65p2/ID4gc2hpamliYW5cIDsKK+mJhOW3peaJgCA+IHRla2tvdWpvXCA7CivntYzllrbpm6MgPiBrZWllaW5hblwgOwor6Zmw6Zm95birID4gb24nJ3lvdWppXCA7Civmj5vmsJfmiYcgPiBrYW5raXNlblwgOwor6Z2e5ZCI5rOVID4gaGlnb3Vob3VcIDsKK+mjm+ihjOiJhyA+IGhpa291dGVpXCA7Civpo5vooYzoiLkgPiBoaWtvdXNlblwgOwor57WM5Za26ZmjID4ga2VpZWlqaW5cIDsKK+W+oeadpeWFiSA+IGdvcmFpa291XCA7CivkuI3mlq3ojYkgPiBmdWRhbnNvdVwgOwor5qCE6aSK5YmkID4gZWl5b3V6YWlcIDsKK+mAo+mOluW6lyA+IHJlbnNhdGVuXCA7CivlhbXms5XlrrYgPiBoZWlob3VrYVwgOwor6aC75bqm5pWwID4gaGluZG9zdXVcIDsKK+izh+acrOWutiA+IHNoaWhvbmthXCA7CivmnIDlj7Pnv7wgPiBzYWl1eW9rdVwgOwor5qCE6aSK5YiGID4gZWl5b3VidW5cIDsKK+WPr+WHpuWIhiA+IGthc2hvYnVuXCA7Civokpnlj6TmlpEgPiBtb3Vrb2hhblwgOwor5a+S56i95Y+kID4ga2FuZ2Vpa29cIDsKK+esrOS4iee0gCA+IGRhaXNhbmtpXCA7CivnoILpoqjlkYIgPiBzdW5hYnVyb1wgOwor6YGL6Lui5aOrID4gdW50ZW5zaGlcIDsKK+esrOS4gOe3miA+IGRhaWlzc2VuXCA7CivpgqrprZTniakgPiBqYW1hbW9ub1wgOwor6YqA6KGM5a62ID4gZ2lua291a2FcIDsKK+S4ieS7meWPiSA+IHNhbnNlbnNhXCA7Civlho3lt6XkuosgPiBzYWlrb3VqaVwgOwor6KOP5pel5pysID4gdXJhbmlob25cIDsKK+iiq+WCreiAhSA+IGhpeW91c2hhXCA7Civou73msLTngokgPiBrZWlzdWlyb1wgOwor6Ieq55Sx5rivID4gaml5dXVrb3VcIDsKK+W+oeabueWtkCA+IG9uem91c2hpXCA7CivpmLLmsLTmiYkgPiBib3VzdWloaVwgOwor5bGF5b+D5ZywID4gaWdva29jaGlcIDsKK+WcsOS4i+mBkyA+IGNoaWthZG91XCA7CivnhKHpp4ToirEgPiBtdWRhYmFuYVwgOwor5LiO5aSq6ICFID4geW90YW1vbm9cIDsKK+eEoeWumuimiyA+IG11dGVpa2VuXCA7Civnvo7lrrnluKsgPiBiaXlvdXNoaVwgOwor55m654Gr54K5ID4gaGFra2F0ZW5cIDsKK+ePvuS7o+WMliA+IGdlbmRhaWthXCA7Civnpo/kupXnnIwgPiBmdWt1aWtlblwgOwor5LiN5pWs6JmUID4gZnVrZWlrZW5cIDsKK+S4geWtkOayuSA+IGNob3VqaXl1XCA7Civkub7nh6XlraMgPiBrYW5zb3VraVwgOwor5pat5pat5LmOID4gZGFuZGFua29cIDsKK+iyoeWLmeWumCA+IHphaW11a2FuXCA7CivmlpnnkIblsYsgPiByeW91cml5YVwgOwor5YGc6LuK5aC0ID4gdGVpc2hhYmFcIDsKK+aEn+WFieW6piA+IGthbmtvdWRvXCA7CivnhKHog73ogIUgPiBtdW5vdXNoYVwgOwor5Lqk5Y+J54K5ID4ga291c2F0ZW5cIDsKK+awt+ays+acnyA+IGh5b3VnYWtpXCA7CivkvY7pm7vkvY0gPiB0ZWlkZW4nJ2lcIDsKK+WHuuS4lumtmiA+IHNodXNzZXVvXCA7CivpgYvou6Llj7AgPiB1bnRlbmRhaVwgOwor6YeO5b+D5a62ID4geWFzaGlua2FcIDsKK+iHqueUseaoqSA+IGppeXV1a2VuXCA7CivpmLLmsLTluIMgPiBib3VzdWlmdVwgOwor5YaN6Ieo5rS+ID4gc2FpcmluaGFcIDsKK+WQjeWgtOmdoiA+IG1laWJhbWVuXCA7CivnrYboqJjkvZMgPiBoaWtraXRhaVwgOwor5bym5qW95ZmoID4gZ2VuZ2Fra2lcIDsKK+a7nuWcqOiyuyA+IHRhaXphaWhpXCA7Civopo/lrprlgKQgPiBraXRlaWNoaVwgOwor5LiA5L2T5oSfID4gaXR0YWlrYW5cIDsKK+i1pOegguezliA+IGFrYXphdG91XCA7CivniZvlsI/lsYsgPiB1c2hpZ295YVwgOwor5buJ5L6h5ZOBID4gcmVua2FoaW5cIDsKK+awkemcgOWTgSA+IG1pbmp1aGluXCA7CivnnJ/kurrplpMgPiBtYW5pbmdlblwgOwor6YeR55ue6IqxID4ga2luc2Vua2FcIDsKK+WPluaymeaxsCA+IHRvcml6YXRhXCA7CivpioDooYzlk6EgPiBnaW5rb3VpblwgOwor5bGk5L2N5a2mID4gc291aWdha3VcIDsKK+mAj+imluWbsyA+IHRvdXNoaXp1XCA7CivlkI3nvqnkurogPiBtZWlnaW5pblwgOwor57Wm5rK55omAID4ga3l1dXl1am9cIDsKK+iHqui1sOegsiA+IGppc291aG91XCA7Civlr4TnqL/ogIUgPiBraWtvdXNoYVwgOwor5oqS5oOF6KmpID4gam9qb3VzaGlcIDsKK+WGhuWIg+WIgCA+IGVuamludG91XCA7Civkub7nh6XlmaggPiBrYW5zb3VraVwgOwor5LiJ5LiD5pelID4gbWluYW5va2FcIDsKK+WvuuWwj+WxiyA+IHRlcmFrb3lhXCA7CivlvqHmm7nlj7ggPiBvbnpvdXNoaVwgOwor55Sw6Zuy6ZuAID4gdGFoaWJhcmlcIDsKK+a4qea5v+W4gyA+IG9uc2hpcHB1XCA7CivlvqHpnaLnm7ggPiBnb21lbnNvdVwgOwor5LiK5pmv5rCXID4gam91a2Vpa2lcIDsKK+iCsuiLseS8miA+IGlrdWVpa2FpXCA7CivkuZfppqzpmoogPiBqb3ViYXRhaVwgOwor5Zyw5LiL6KGXID4gY2hpa2FnYWlcIDsKK+mdkuaHuOW3oyA+IGFva2FrZXN1XCA7CivkuI3mlaznvaogPiBmdWtlaXphaVwgOwor5Y6f5a2Q5L6hID4gZ2Vuc2hpa2FcIDsKK+e3j+atpue3miA+IHNvdWJ1c2VuXCA7CivkuI3nuLnnt7sgPiBidWtpcnlvdVwgOwor6Kej5YOP5bqmID4ga2Fpem91ZG9cIDsKK+aOp+iotOeKtiA+IGtvdXNvam91XCA7Civlho3mpJzmn7sgPiBzYWlrZW5zYVwgOwor6KSH5bqn5qmfID4gZnVrdXpha2lcIDsKK+aJueipleWutiA+IGhpaHlvdWthXCA7CivlvqHkuK3lhYMgPiBvY2h1dWdlblwgOwor5Lq655yf5Ly8ID4gaGl0b21hbmVcIDsKK+eahOWcsOS9jSA+IHRla2ljaGlpXCA7Civmj5vmsJflj6MgPiBrYW5raWtvdVwgOwor6Kq/5p+75ZOhID4gY2hvdXNhaW5cIDsKK+S4luipseW9uSA+IHNld2F5YWt1XCA7Civmgqrnn6XmgbUgPiB3YXJ1ZGppZVwgOwor55+t5pyf6ZaTID4gdGFua2lrYW5cIDsKK+W+oeS4u+S6uiA+IGdvc2h1amluXCA7CivlkIzmmYLmgKcgPiBkb3VqaXNlaVwgOwor6buE5aSJ57GzID4gb3VoZW5tYWlcIDsKK+S9meaJgOiAhSA+IHlvc29tb25vXCA7Civmu4vppIrliIYgPiBqaXlvdWJ1blwgOwor5qOa54mh5Li5ID4gdGFuYWJvdGFcIDsKK+mKmOmFkuWxiyA+IG1laXNodXlhXCA7CivloanpoZ7ms4kgPiBlbnJ1aXNlblwgOwor5L+d6I+M6ICFID4gaG9raW5zaGFcIDsKK+mYsuegguaelyA+IGJvdXNhcmluXCA7CivplonkuJbnlYwgPiBoZWlzZWthaVwgOwor5Zyw5LiL6IyOID4gY2hpa2FrZWlcIDsKK+Wkmui+uuW9oiA+IHRhaGVua2VpXCA7CivkuI3mmI7mnJcgPiBmdW1laXJvdVwgOwor5rOl54Gr5bGxID4gZGVpa2F6YW5cIDsKK+S6rOmDveW6nCA+IGt5b3V0b2Z1XCA7Civku6TlpKvkurogPiByZWlmdWppblwgOwor57235YWN5qipID4gaGltZW5rZW5cIDsKK+S4geWtl+W9oiA+IHRlaWppa2VpXCA7CivlgJnoo5zogIUgPiBrb3Vob3NoYVwgOwor57W155S76aSoID4ga2FpZ2FrYW5cIDsKK+WbveWWtuWMliA+IGtva3VlaWthXCA7CivnianmlYXogIUgPiBidWtrb3NoYVwgOwor5YmN55u45pKyID4gbWFlenVtb3VcIDsKK+eglOexs+apnyA+IGtlbm1haWtpXCA7Civmmpfpu5LmnJ8gPiBhbmtva3VraVwgOwor54++5pmC54K5ID4gZ2Vuaml0ZW5cIDsKK+mao+S/nemkqCA+IHJpbnBva2FuXCA7CivnhLzlpLflvL4gPiBzaG91aWRhblwgOwor5LiB5a2X5bivID4gdGVpaml0YWlcIDsKK+WKoOmFjeexsyA+IGthaGFpbWFpXCA7Civpq5jnsr7luqYgPiBrb3VzZWlkb1wgOwor6Zmw6Zai5pWwID4gaW5rYW5zdXVcIDsKK+awtOazs+W4vSA+IHN1aWVpYm91XCA7CivosrjosrvnlJ8gPiB0YWloaXNlaVwgOwor5aKX56iO5qGIID4gem91emVpYW5cIDsKK+mkk+msvOWFsSA+IGdha2lkb21vXCA7CivoqLHlj6/liLYgPiBreW9rYXNlaVwgOwor5aWz5oCn5YOPID4gam9zZWl6b3VcIDsKK+eBq+aYn+W5tCA+IGthc2VpbmVuXCA7CivkupznoavphbggPiBhcnl1dXNhblwgOwor5YaN6LuN5YKZID4gc2FpZ3VuYmlcIDsKK+adv+Wxi+iynSA+IGl0YXlhZ2FpXCA7CivmlqHml4vmoYggPiBhc3NlbicnYW5cIDsKK+iKseW0l+WyqSA+IGtha291Z2FuXCA7CivmnKrlrozmiJAgPiBtaWthbnNlaVwgOwor54Sh55So5b+DID4gYnV5b3VqaW5cIDsKK+aIkOaWh+WMliA+IHNlaWJ1bmthXCA7Civnspfmgqrlk4EgPiBzb2FrdWhpblwgOwor5o6n6Ki05qipID4ga291c29rZW5cIDsKK+iqv+eQhuWgtCA+IGNob3VyaWJhXCA7CivlnLDkuIvnt5ogPiBjaGlrYXNlblwgOwor5Lqc56Gd6YW4ID4gYXNob3VzYW5cIDsKK+Wumuacn+aIpiA+IHRlaWtpc2VuXCA7CivkvZPns7vljJYgPiB0YWlrZWlrYVwgOwor57WM5Za26ICFID4ga2VpZWlzaGFcIDsKK+iiq+WGmeS9kyA+IGhpc2hhdGFpXCA7CivliIblqKnmnJ8gPiBidW5iZW5raVwgOwor5b6M5LuV6IieID4gYXRvamltYWlcIDsKK+ijj+mdouWPsiA+IHJpbWVuc2hpXCA7CivopovkuJbniakgPiBtaXNlbW9ub1wgOwor6KKr55So6ICFID4gaGl5b3VzaGFcIDsKK+iqnuW9meWKmyA+IGdvaXJ5b2t1XCA7CivprZTms5Xnk7YgPiBtYWhvdWJpblwgOwor5YiG5aip5pmCID4gYnVuYmVuamlcIDsKK+S4iuS4i+WLlSA+IGpvdWdlZG91XCA7CivlubPpnaLlm7MgPiBoZWltZW56dVwgOwor6ICQ54Gr5oCnID4gdGFpa2FzZWlcIDsKK+WGjeWumue+qSA+IHNhaXRlaWdpXCA7Civpm7vmsJflt6UgPiBkZW5raWtvdVwgOwor5Y+N5Y+k57GgID4gaG9ndWthZ29cIDsKK+W+oemZjeiqlSA+IGdva291dGFuXCA7CivmmI7mlofljJYgPiBtZWlidW5rYVwgOwor6IW55YW35ZCIID4gaGFyYWd1YWlcIDsKK+mBuOaMmeaXpSA+IHNlbmt5b2JpXCA7CivovLjnsr7nrqEgPiB5dXNlaWthblwgOwor5bCP5aOy5bqXID4ga291cml0ZW5cIDsKK+Wuh+WumeirliA+IHVjaHV1cm9uXCA7CivpkZHlrprlrrYgPiBrYW50ZWlrYVwgOwor5Zu65rq25L2TID4ga295b3V0YWlcIDsKK+ahiOWGheaJgCA+IGFuJyduYWlqb1wgOwor6Ieq5L+h5a62ID4gamlzaGlua2FcIDsKK+S6nOmJm+acqyA+IGFlbm1hdHN1XCA7CivlsI7pm7vluqYgPiBkb3VkZW5kb1wgOwor55yM55+l5LqLID4ga2VuY2hpamlcIDsKK+Wuh+WumeimsyA+IHVjaHV1a2FuXCA7Civpm7vli5XmqZ8gPiBkZW5kb3VraVwgOwor5LiA5LiB55uuID4gaXRjaG91bWVcIDsKK+S8iumBlOihhiA+IGRhdGVzaHV1XCA7CivohYvnqqnohbogPiBla2lrYXNlblwgOwor5LiN5paH5rOVID4gZnVidW5wb3VcIDsKK+S4gOiyq+aApyA+IGlra2Fuc2VpXCA7Civlj6PlhoXngo4gPiBrb3VuYWllblwgOwor6YGO5LiN6LazID4ga2FmdXNva3VcIDsKK+aEm+eUqOiAhSA+IGFpeW91c2hhXCA7CivlhazmsJHnp5EgPiBrb3VtaW5rYVwgOwor5Ye65qC85a2QID4gZGVnb3VzaGlcIDsKK+S7iuS4lue0gCA+IGtvbnNlaWtpXCA7CivmnKrlqZrogIUgPiBtaWtvbnNoYVwgOwor5YCZ6KOc55SfID4ga291aG9zZWlcIDsKK+adseWNl+S6nCA+IHRvdW5hbicnYVwgOwor5L6b6aSK5aGUID4ga3V5b3V0b3VcIDsKK+WBpeiDg+WJpCA+IGtlbicnaXphaVwgOwor5L+u6aiT6ICFID4gc2h1Z2VuamFcIDsKK+aflOmBk+edgCA+IGp1dWRvdWdpXCA7Civlvq7ns7vmlbAgPiBiaWtlaXN1dVwgOwor5LuV572u5aC0ID4gc2hpb2tpYmFcIDsKK+W5s+aWueWSjCA+IGhlaWhvdXdhXCA7CivkvLTlpY/pg6ggPiBiYW5zb3VidVwgOwor5Y+k5YaZ5pysID4ga29zaGFob25cIDsKK+WHuuadpeeJqSA+IGRla2ltb25vXCA7CivlnJ/ppYXpoK0gPiBkb21hbmp1dVwgOwor5LiW6Kmx5Lq6ID4gc2V3YWJpdG9cIDsKK+e+jumhlOawtCA+IGJpZ2Fuc3VpXCA7Civoh6rnlLHliJEgPiBqaXl1dWtlaVwgOwor5aGp6aKo5ZGCID4gc2hpb2J1cm9cIDsKK+WFhembu+WZqCA+IGp1dWRlbmtpXCA7CivooqvpqJPogIUgPiBoaWtlbnNoYVwgOwor5bCP54aK5bqnID4ga29ndW1hemFcIDsKK+aJi+S/oeiqniA+IHRlc2hpbmdvXCA7CivotaTmr5vluIMgPiBha2FnZXR0b1wgOwor5rC05b2p55S7ID4gc3Vpc2FpZ2FcIDsKK+S4gOS6uuWvnSA+IGhpdG9yaW5lXCA7CivpnZLlkbPms6UgPiBhb21pZG9yb1wgOwor6Ieq55Sx5YWaID4gaml5dXV0b3VcIDsKK+iKmeiTieWzsCA+IGZ1eW91aG91XCA7CivokL3oirHnlJ8gPiByYWtrYXNlaVwgOwor5bGx6ZaT6YOoID4gc2Fua2FuYnVcIDsKK+WQjOaZguS7oyA+IGRvdWppZGFpXCA7CivnhKHlrpfmtL4gPiBtdXNodXVoYVwgOwor6LuN5pS/5bqcID4gZ3Vuc2VpZnVcIDsKK+WppuS6uuS8miA+IGZ1amlua2FpXCA7Civlr7rlrZDlsYsgPiB0ZXJha295YVwgOwor5Y6f57mK57atID4gZ2Vuc2VuJydpXCA7Civntpnpm7vmsJcgPiBrZWlkZW5raVwgOwor5Y+z5Lit6ZaTID4gdWNodXVrYW5cIDsKK+S4jeaWh+aYjiA+IGZ1YnVubWVpXCA7CivlubPlnJ/plpMgPiBoaXJhZG9tYVwgOwor5qyh55S35Z2KID4gamluYW5ib3VcIDsKK+iGgOiDseeCjiA+IGJvdWtvdWVuXCA7CivmnInlirnmiZMgPiB5dXVrb3VkYVwgOwor6Zuo6YeP6KiIID4gdXJ5b3VrZWlcIDsKK+Wuh+WumeiIuSA+IHVjaHV1c2VuXCA7CivmuJvoobDlmaggPiBnZW5zdWlraVwgOwor57mw57O45qmfID4gc291c2hpa2lcIDsKK+WkmuiKuOaApyA+IHRhZ2Vpc2VpXCA7CivotaTliIfnrKYgPiBha2FnaXBwdVwgOwor54Gr5pif5Lq6ID4ga2FzZWlqaW5cIDsKK+aXpeiIquapnyA+IG5pa2tvdWtpXCA7Civku4rkuJbnlYwgPiBrb25zZWthaVwgOwor6LuN6ZyA5ZOBID4gZ3VuanVoaW5cIDsKK+awtOiSuOawlyA+IHN1aWpvdWtpXCA7CivljZjmvKLlrZcgPiB0YW5rYW5qaVwgOwor5Y2B5paH5a2XID4ganV1bW9uamlcIDsKK+WuiOWCmeWFtSA+IHNodWJpaGVpXCA7Civmmpflj7fmlocgPiBhbmdvdWJ1blwgOwor6auY562J56eRID4ga291dG91a2FcIDsKK+a3u+S5l+WToSA+IHRlbmpvdWluXCA7CivmoYjlhoXlm7MgPiBhbicnbmFpenVcIDsKK+WQiOiogOiRiSA+IGFpa290b2JhXCA7CivlrprmnJ/liLggPiB0ZWlraWtlblwgOwor5LqI566X5qGIID4geW9zYW4nJ2FuXCA7CivlpJrmp5jmgKcgPiB0YXlvdXNlaVwgOwor5ZCN5paH5a62ID4gbWVpYnVua2FcIDsKK+iHquizoOazlSA+IGppYmFpaG91XCA7Civlh7rkuI3nsr4gPiBkZWJ1c2hvdVwgOwor5a6J5bGx5bKpID4gYW56YW5nYW5cIDsKK+iAgeWkp+WutiA+IHJvdXRhaWthXCA7CivmsI/ntKDmgKcgPiB1amlzdWpvdVwgOwor5LiK5aSp5rCXID4gam91dGVua2lcIDsKK+esrOS4gOWjsCA+IGRhaWlzc2VpXCA7CivlsI7ngavnt5ogPiBkb3VrYXNlblwgOwor5L6d6aC85b+DID4gaXJhaXNoaW5cIDsKK+Wuh+Wumee3miA+IHVjaHV1c2VuXCA7CivosqDlgrXogIUgPiBmdXNhaXNoYVwgOwor5b6M6aCt6YOoID4ga291dG91YnVcIDsKK+earuiGmueXhSA+IGhpZnVieW91XCA7CivogIHlpKvlqaYgPiByb3VmdXVmdVwgOwor5Zyw5LiL5rC0ID4gY2hpa2FzdWlcIDsKK+mbu+awl+S7oyA+IGRlbmtpZGFpXCA7Civlrprnvqnln58gPiB0ZWlnaWlraVwgOwor5pS+54Gr572qID4gaG91a2F6YWlcIDsKK+mbqOWQiOe+vSA+IGFtYWdhcHBhXCA7Civlj5fliJHogIUgPiBqdWtlaXNoYVwgOwor6Z2e5YWs6ZaLID4gaGlrb3VrYWlcIDsKK+aZruiri+WgtCA+IGZ1c2hpbmJhXCA7CivlpJrls7bmtbcgPiB0YXRvdWthaVwgOwor5Yq05YON5q2MID4gcm91ZG91a2FcIDsKK+WvhOa4r+WcsCA+IGtpa291Y2hpXCA7CivlrprmnJ/kvr8gPiB0ZWlraWJpblwgOwor5pyq5p2l5b2iID4gbWlyYWlrZWlcIDsKK+mjm+ihjOWjqyA+IGhpa291c2hpXCA7CivlpornlKPlqaYgPiBuaW5zYW5wdVwgOwor55+t5pmC6ZaTID4gdGFuamlrYW5cIDsKK+WBj+W3ruWApCA+IGhlbnNhY2hpXCA7CivkuIvpmY3nt5ogPiBrYWtvdXNlblwgOwor5rSL6I+T5a2QID4geW91Z2FzaGlcIDsKK+aWreijgeapnyA+IGRhbnNhaWtpXCA7Civpo5vooYzloLQgPiBoaWtvdWpvdVwgOwor5bel5YW35YWlID4ga291Z3VpcmVcIDsKK+S9k+a4qeioiCA+IHRhaW9ua2VpXCA7CivnmbrooYzml6UgPiBoYWtrb3ViaVwgOwor5ou35ZWP5YW3ID4gZ291bW9uZ3VcIDsKK+mZpOWkluS+iyA+IGpvZ2FpcmVpXCA7Civlr7/ogIHkurogPiBqdXJvdWppblwgOwor5YWs5Y+W5aeUID4ga291dG9yaWlcIDsKK+mZouWkluWboyA+IGluZ2FpZGFuXCA7CivkuI3lpInmgKcgPiBmdWhlbnNlaVwgOwor5aSa55Sj57O7ID4gdGFzYW5rZWlcIDsKK+Wwj+imj+aooSA+IHNob3VraWJvXCA7CivlkIjorbDliLYgPiBnb3VnaXNlaVwgOwor57at566h5p2fID4gaWthbnNva3VcIDsKK+mrmOa4qeioiCA+IGtvdW9ua2VpXCA7CivliJ3nrYnnp5EgPiBzaG90b3VrYVwgOwor6KiY5oa25rOVID4ga2lva3Vob3VcIDsKK+S7iuacneaWuSA+IGtlc2FnYXRhXCA7CivpgbjmjJnljLogPiBzZW5reW9rdVwgOwor56C056CV5oCnID4gaGFzYWlzZWlcIDsKK+m5v+mHjuiLkSA+IHJva3V5YW9uXCA7CivoiJ7lj7Doo48gPiBidXRhaXVyYVwgOwor57WM5Za25qipID4ga2VpZWlrZW5cIDsKK+S4jeeHg+aApyA+IGZ1bmVuc2VpXCA7CivnpZ7npYflrpggPiBqaW5naWthblwgOwor5rCP57Sg5aeTID4gdWppc3Vqb3VcIDsKK+iiq+Wus+iAhSA+IGhpZ2Fpc2hhXCA7CivmsLTphbjln7ogPiBzdWlzYW5raVwgOwor5aSp5L2T5ZuzID4gdGVudGFpenVcIDsKK+i/kei3nemboiA+IGtpbmt5b3JpXCA7CivmupbnpL7lk6EgPiBqdW5zaGFpblwgOwor5Lq65Lu26LK7ID4gamlua2VuaGlcIDsKK+W4uOW+l+aEjyA+IGpvdXRva3VpXCA7Civnmq7ohILohbogPiBoaXNoaXNlblwgOwor54Sh5a6a5b2iID4gbXV0ZWlrZWlcIDsKK+WPr+eUqOaApyA+IGtheW91c2VpXCA7CivkurrnlJ/mtL4gPiBqaW5zZWloYVwgOwor55m66KGM5omAID4gaGFra291am9cIDsKK+aRqeWkqealvCA+IG1hdGVucm91XCA7CivlsI/plpPniakgPiBrb21hbW9ub1wgOwor5b6h5aSn5bGkID4gZ290YWlzb3VcIDsKK+itpuWCmemaiiA+IGtlaWJpdGFpXCA7CivlibLng7nnnYAgPiBrYXBwb3VnaVwgOwor5Y2U5ZKM6Z+zID4ga3lvdXdhb25cIDsKK+WPl+WLleaFiyA+IGp1ZG91dGFpXCA7Civnt4/li5Xlk6EgPiBzb3Vkb3VpblwgOwor6Iqx5p6X57OWID4ga2FyaW50b3VcIDsKK+ato+ekvuWToSA+IHNlaXNoYWluXCA7CivnrYnmuKnnt5ogPiB0b3VvbnNlblwgOwor5b6h6ZyK5bGLID4gbWl0YW1heWFcIDsKK+S4gOWkleipsSA+IGlzc2VraXdhXCA7CivlsI/ngrrmm78gPiBrb2dhd2FzZVwgOwor56ys5LiA5L2NID4gZGFpaWNoaWlcIDsKK+eojumWouWQjyA+IHplaWthbnJpXCA7CivppIrogrLosrsgPiB5b3Vpa3VoaVwgOwor5rWB6Y+R6aasID4geWFidXNhbWVcIDsKK+aOp+iotOS6uiA+IGtvdXNvbmluXCA7CivojLboqbHkvJogPiBjaGF3YWthaVwgOwor5Zar57eK5LqLID4ga2lra2luamlcIDsKK+WQuOmHkeWJmyA+IGtva29uZ291XCA7CivogIHnt7TlrrYgPiByb3VyZW5rYVwgOwor5LiN6Kq/5ZKMID4gZnVjaG91d2FcIDsKK+awl+euoeaUryA+IGtpa2Fuc2hpXCA7CivmsLTphbjljJYgPiBzdWlzYW5rYVwgOwor5aSn5Lq65rCXID4gZGFpbmlua2lcIDsKK+mdkumKheWZqCA+IHNlaWRvdWtpXCA7Civpo5vooYzkvr8gPiBoaWtvdWJpblwgOwor5Y+v6IO95rOVID4ga2Fub3Vob3VcIDsKK+ecn+ePoOavjSA+IHNoaW5qdWJvXCA7CivlsILmlLvnp5EgPiBzZW5rb3VrYVwgOwor5YyW6Ia/6I+MID4ga2Fub3VraW5cIDsKK+mdnuW4uOe3miA+IGhpam91c2VuXCA7Civnsr7kuIDmna8gPiBzZWlpcHBhaVwgOwor6YGH5LiN6YGHID4gZ3V1ZnVndXVcIDsKK+acquiAleWcsCA+IG1pa291Y2hpXCA7CivploDkuIvnlJ8gPiBtb25rYXNlaVwgOwor5LiA6aKo5ZGCID4gaGl0b2Z1cm9cIDsKK+WfuemkiuWfuiA+IGJhaXlvdWtpXCA7Civou43pmorljJYgPiBndW50YWlrYVwgOwor5ryU6Iq45LyaID4gZW5nZWlrYWlcIDsKK+aWh+S6uueUuyA+IGJ1bmppbmdhXCA7Civnj77mmYLku6MgPiBnZW5qaWRhaVwgOwor5bqD56+E5ZuyID4ga291aGFuJydpXCA7CivlhoblsYvmoLkgPiBtYXJ1eWFuZVwgOwor5Z+56aSK5ZyfID4gYmFpeW91ZG9cIDsKK+Wvkuawl+WboyA+IGthbmtpZGFuXCA7CivnspfliKnnm4ogPiBhcmFyaWVraVwgOwor5LqI566X5aSWID4geW9zYW5nYWlcIDsKK+mdnuawkeS4uyA+IGhpbWluc2h1XCA7Civlj5fnm4rogIUgPiBqdWVraXNoYVwgOwor5a6J5a6a5p2/ID4gYW50ZWliYW5cIDsKK+iomOW/temkqCA+IGtpbmVua2FuXCA7CivlpKflroflrpkgPiBkYWl1Y2h1dVwgOwor5Lqc5oCl5oCnID4gYWt5dXVzZWlcIDsKK+ioiOeul+ewvyA+IGtlaXNhbmJvXCA7CivpnZnmraLnlLsgPiBzZWlzaGlnYVwgOwor5LiN5pW05ZCIID4gZnVzZWlnb3VcIDsKK+S6jOmHjemhjiA+IG5panV1YWdvXCA7CivliLblvqHmqZ8gPiBzZWlneW9raVwgOwor5LqM562J5YiGID4gbml0b3VidW5cIDsKK+W5s+eCieazlSA+IGhlaXJvaG91XCA7CivkupTnqJzloKEgPiBnb3J5b3Vob1wgOwor5pyq5p2l5YOPID4gbWlyYWl6b3VcIDsKK+i2s+a4qeWZqCA+IHNva3VvbmtpXCA7CivkuoznrYnlhbUgPiBuaXRvdWhlaVwgOwor6LK05peP6ZmiID4ga2l6b2t1aW5cIDsKK+e2membu+WZqCA+IGtlaWRlbmtpXCA7CivoqJjlj7foq5YgPiBraWdvdXJvblwgOwor5ZCN6Kme5Y+lID4gbWVpc2hpa3VcIDsKK+S8nemmrOiIuSA+IHRlbm1hc2VuXCA7CivpioDmsrPns7sgPiBnaW5nYWtlaVwgOwor5aSn5a6u5Y+4ID4gZGFpZ3V1amlcIDsKK+a1geihjOebriA+IGhheWFyaW1lXCA7CivpgaDoppbnnLwgPiBlbnNoaWdhblwgOwor5Y215bej54KOID4gcmFuc291ZW5cIDsKK+acquS6oeS6uiA+IG1pYm91amluXCA7CivkuI3ntYzmuIggPiBmdWtlaXphaVwgOwor5byV55So56ymID4gaW4nJ3lvdWZ1XCA7Civmn5TpgZPlrrYgPiBqdXVkb3VrYVwgOwor5LiN5Z2H6KGhID4gZnVraW5rb3VcIDsKK+WvvuipseiAhSA+IHRhaXdhc2hhXCA7CivoqJ/li5npg6ggPiBzaG91bXVidVwgOwor5b6h6ZyK5YmNID4gZ29yZWl6ZW5cIDsKK+WFjOaPm+WIuCA+IGRha2Fua2VuXCA7CivkuI3mkYLnlJ8gPiBmdXNlc3NlaVwgOwor5pel5pys6aKoID4gbmlob25mdXVcIDsKK+WAmeijnOWcsCA+IGtvdWhvY2hpXCA7CivnoILpmLLmnpcgPiBzYWJvdXJpblwgOwor5LiL5aOr5a6YID4ga2FzaGlrYW5cIDsKK+W4guitsOS8miA+IHNoaWdpa2FpXCA7CivkuIDmmYLmnJ8gPiBpY2hpamlraVwgOwor6Ieq6LKg5b+DID4gamlmdXNoaW5cIDsKK+ebuOWQiOWCmCA+IGFpYWlnYXNhXCA7CivorJnorbLoqp4gPiBrZW5qb3Vnb1wgOwor5om25oyB57GzID4gZnVjaGltYWlcIDsKK+WGjei1t+WLlSA+IHNhaWtpZG91XCA7CivnjaPljLvlraYgPiBqdXVpZ2FrdVwgOwor6Z2e5bi455SoID4gaGlqb3V5b3VcIDsKK+egtOW7ieaBpSA+IGhhcmVuY2hpXCA7Civlh7rmlL7poYwgPiBkZWhvdWRhaVwgOwor5a6J5a6a5oSfID4gYW50ZWlrYW5cIDsKK+mkiuiAgemZoiA+IHlvdXJvdWluXCA7Civph47oia/njKsgPiBub3JhbmVrb1wgOwor5pyq5LiB5bm0ID4gbWl0ZWluZW5cIDsKK+WuieWumuaApyA+IGFudGVpc2VpXCA7CivmsbrnrpfmnJ8gPiBrZXNzYW5raVwgOwor6Ieq5LmX5qC5ID4gamlqb3Vrb25cIDsKK+WFqOiNt+mHjSA+IHplbmthanV1XCA7CivlpaXlvqHmrr8gPiBva3Vnb3RlblwgOwor6KO96YCg5omAID4gc2Vpem91am9cIDsKK+W/q+eUt+WFkCA+IGthaWRhbmppXCA7Civml7rmlofnpL4gPiBvdWJ1bnNoYVwgOwor6LaF6Z+z5rOiID4gY2hvdW9ucGFcIDsKK+WuiOitt+mciiA+IHNodWdvcmVpXCA7CivmnKjmm77lt50gPiBraXNvZ2F3YVwgOwor5byx6Z+z5ZmoID4gamFrdW9ua2lcIDsKK+axuueul+aXpSA+IGtlc3NhbmJpXCA7Civoh6rkuLvmqKkgPiBqaXNodWtlblwgOwor6IO95byB5a62ID4gbm91YmVua2FcIDsKK+WPr+iDveaApyA+IGthbm91c2VpXCA7CivlpKfml6bpgqMgPiBvb2RhbicnbmFcIDsKK+WNsOW6puaVmSA+IGluZG9reW91XCA7CivnhKHkurrls7YgPiBtdWppbnRvdVwgOwor55yf5Ly85LqLID4gbWFuZWdvdG9cIDsKK+ishOWGmeWZqCA+IHRvdXNoYWtpXCA7CivluLDpgoTogIUgPiBraWthbnNoYVwgOwor5Yqp55Sj6ZmiID4gam9zYW4nJ2luXCA7CivlpbPlupflk6EgPiBqb3RlbicnaW5cIDsKK+ibuOmDqOWxiyA+IHRha29iZXlhXCA7CivkuojnrpfkuIogPiB5b3NhbmpvdVwgOwor5a6a5pmC5Yi2ID4gdGVpamlzZWlcIDsKK+ato+W8puazoiA+IHNlaWdlbmhhXCA7CivkvZnmiYDkuosgPiB5b3NvZ290b1wgOwor6aas6bm/6ICFID4gYmFrYW1vbm9cIDsKK+WEgOekvOWFtSA+IGdpcmVpaGVpXCA7Civml6XmnKzphZIgPiBuaWhvbnNodVwgOwor5pep55Sj5YWQID4gc291emFuamlcIDsKK+aOoee2v+WZqCA+IHNhaW1lbmtpXCA7Civoi7HpgKPpgqYgPiBlaXJlbnBvdVwgOwor5pep55Sf5YWQID4gc291c2VpamlcIDsKK+WKoOebn+iAhSA+IGthbWVpc2hhXCA7CivpmY3pm6jph48gPiBrb3V1cnlvdVwgOwor6K2m5YKZ6ImHID4ga2VpYml0ZWlcIDsKK+WHuuadpeS6iyA+IGRla2lnb3RvXCA7CivkvqHpm7vlrZAgPiBrYWRlbnNoaVwgOwor5Y+k55Sf55WMID4ga29zZWlrYWlcIDsKK+WItuWLleapnyA+IHNlaWRvdWtpXCA7Civph5HprZrlsYsgPiBraW5neW95YVwgOwor5pyo5aSp6JO8ID4gbWF0YXRhYmlcIDsKK+WNiuijuOS9kyA+IGhhbnJhdGFpXCA7Civml6XmnKzou40gPiBuaWhvbmd1blwgOwor5pel5pys6LuKID4gbmlob25zaGFcIDsKK+S/rue+hemBkyA+IHNodXJhZG91XCA7CivllYbooYzngrogPiBzaG91a291aVwgOwor5p2h6YeM5Yi2ID4gam91cmlzZWlcIDsKK+aKleW9seazlSA+IHRvdWVpaG91XCA7CivmnInlsL7poZ4gPiB5dXViaXJ1aVwgOwor5qyn576F5be0ID4geW91cm9wcGFcIDsKK+S4lumWk+S9kyA+IHNla2VudGVpXCA7CivkvIrpgZTlt7sgPiBkYXRlbWFraVwgOwor5rC05Yip5qipID4gc3VpcmlrZW5cIDsKK+WPsuWtpuWutiA+IHNoaWdha2thXCA7CivntI3ku5jph5EgPiBub3VmdWtpblwgOwor6JWO6bqm5q67ID4gc29iYWdhcmFcIDsKK+aWueWQkeiItSA+IGhvdWtvdWRhXCA7CivlpI/oh7Pnt5ogPiBnZXNoaXNlblwgOwor5LiN5Z2H562JID4gZnVraW50b3VcIDsKK+Wuh+WumeW4vSA+IHVjaHV1Ym91XCA7CivnhKHpoLzmvKIgPiBidXJhaWthblwgOwor5r+D5bqm6KiIID4gbm91ZG9rZWlcIDsKK+S4gOaYqOW5tCA+IG90b3Rvc2hpXCA7CivmnKrntYzpqJMgPiBtaWtlaWtlblwgOwor5pyd5a+d5Z2KID4gYXNhbmVib3VcIDsKK+mBjuWkp+imliA+IGthZGFpc2hpXCA7Civnv6Hnv6DoibIgPiBoaXN1aWlyb1wgOwor5Zyf5qC55oCnID4gZG9rb25qb3VcIDsKK+e3j+aooeanmCA+IHNvdW1veW91XCA7CivoqIjnrpfmqZ8gPiBrZWlzYW5raVwgOwor5byB5b2T5bGLID4gYmVudG91eWFcIDsKK+S7o+aJk+iAhSA+IGRhaWRhc2hhXCA7CivpoqjlqpLoirEgPiBmdXViYWlrYVwgOwor54Sh6Kmm6aiTID4gbXVzaGlrZW5cIDsKK+mGuOmAoOmFoiA+IGpvdXpvdXN1XCA7Civlj43li5XmtL4gPiBoYW5kb3VoYVwgOwor57WM5riI5a62ID4ga2VpemFpa2FcIDsKK+a3i+W3tOiFuiA+IHJpbnBhc2VuXCA7Civoh6rkuLvmgKcgPiBqaXNodXNlaVwgOwor6LaK5aSp5qW9ID4gZXRlbnJha3VcIDsKK+aoqeWIqemHkSA+IGtlbnJpa2luXCA7CivmhaLmgKfljJYgPiBtYW5zZWlrYVwgOwor5o6I5Lmz5pyfID4ganVueXV1a2lcIDsKK+WwgumWgOiqniA+IHNlbm1vbmdvXCA7CivliY3oiJ7lj7AgPiBtYWVidXRhaVwgOwor6YG456eR55SfID4gc2Vua2FzZWlcIDsKK+Wto+WIiuiqjCA+IGtpa2Fuc2hpXCA7Civlrp/pmpvlrrYgPiBqaXNzYWlrYVwgOwor5LiA5pi85aScID4gaXRjaHV1eWFcIDsKK+ihhuitsOmZoiA+IHNodXVnaWluXCA7Civml6XmnKzoo70gPiBuaWhvbnNlaVwgOwor5Y2w5Yik5birID4gaW5iYW5zaGlcIDsKK+Wwj+eBq+WZqCA+IHNob3VrYWtpXCA7CivnhKHpoqjluK8gPiBtdWZ1dXRhaVwgOwor5Yi25b6h5ZmoID4gc2VpZ3lva2lcIDsKK+i1sOafu+e3miA+IHNvdXNhc2VuXCA7CivnqbrmiYvlrrYgPiBrYXJhdGVrYVwgOwor5LiN5Zmo6YePID4gYnVraXJ5b3VcIDsKK+WkqeS6leWApCA+IHRlbmpvdW5lXCA7CivoqIjnrpfmnKggPiBrZWlzYW5naVwgOwor5o6h54Kt5omAID4gc2FpdGFuam9cIDsKK+W8geWLmeWumCA+IGJlbm11a2FuXCA7Civlj5fnm4rmqKkgPiBqdWVraWtlblwgOwor5Yqg5bel57SZID4ga2Frb3VzaGlcIDsKK+aVmeWLmeiqsiA+IGt5b3VtdWthXCA7CivpgKPli5XmqZ8gPiByZW5kb3VraVwgOwor5Lqk5beu54K5ID4ga291c2F0ZW5cIDsKK+itsOS6i+mMsiA+IGdpamlyb2t1XCA7Civlho3mnaXlubQgPiBzYXJhaW5lblwgOwor5LiA5pio5aScID4gaXNzYWt1eWFcIDsKK+Wuh+WumeWhtSA+IHVjaHV1amluXCA7CivmsLTpgZPlsYsgPiBzdWlkb3V5YVwgOwor6YeN6LuM5p2hID4ganV1a2lqb3VcIDsKK+mBlee0hOmHkSA+IGl5YWt1a2luXCA7CivpuJrptaHnl4UgPiBvdW11YnlvdVwgOwor5Y2Y5oCn6IqxID4gdGFuc2Vpa2FcIDsKK+azqOaEj+eCuSA+IGNodXVpdGVuXCA7CivluLjlgpnph5EgPiBqb3ViaWtpblwgOwor6Lui56e75oCnID4gdGVuJydpc2VpXCA7CivmtLvngavlsbEgPiBrYWtrYXphblwgOwor5Yqg5bel56iOID4ga2Frb3V6ZWlcIDsKK+e+jueyp+mZoiA+IGJpc2hvdWluXCA7CivojLbnrqrnrKUgPiBjaGFkYW5zdVwgOwor5Zm054Gr5bGxID4gZnVua2F6YW5cIDsKK+WcsOaWueaZgiA+IGNoaWhvdWppXCA7CivmgqrppJPprLwgPiB3YXJ1Z2FraVwgOwor5Y2a5oSb5a62ID4gaGFrdWFpa2FcIDsKK+aDheWgsemDqCA+IGpvdWhvdWJ1XCA7Civml6XmnKzojLYgPiBuaWhvbmNoYVwgOwor5YWJ6KGM5beuID4ga291a291c2FcIDsKK+WkluiAs+mBkyA+IGdhaWppZG91XCA7CivlnLDpnIfms6IgPiBqaXNoaW5oYVwgOwor5LiJ5aGB5omTID4gc2FucnVpZGFcIDsKK+WLvuW8leeKtiA+IGtvdWluam91XCA7CivlnLDpm7fmupAgPiBqaXJhaWdlblwgOwor6Zu75qmf5a2QID4gZGVua2lzaGlcIDsKK+W4uOWCmei7jSA+IGpvdWJpZ3VuXCA7CivlsI/lnovljJYgPiBrb2dhdGFrYVwgOwor5Yi35q+b5YWIID4gaGFrZXNha2lcIDsKK+mdkuWGhemanCA+IGFvc29rb2hpXCA7CivoqZXorbDlk6EgPiBoeW91Z2lpblwgOwor5YWs5YiG5q+NID4ga291YnVuYm9cIDsKK+WPr+iBtOW6piA+IGthY2hvdWRvXCA7CivnhKHmnaHku7YgPiBtdWpvdWtlblwgOwor55+i6aOb55m9ID4geWFnYXN1cmlcIDsKK+aJi+iFleWutiA+IHNodXdhbmthXCA7CivmpJzkuovmraMgPiBrZW5qaXNlaVwgOwor5YG95ZaE6ICFID4gZ2l6ZW5zaGFcIDsKK+S8neWwjuW6piA+IGRlbmRvdWRvXCA7Civlhazli5/lgrUgPiBrb3Vib3NhaVwgOwor5qmf6Zai6YqDID4ga2lrYW5qdXVcIDsKK+atpuWLh+S8nSA+IGJ1eXV1ZGVuXCA7CivliLblvqHkuIsgPiBzZWlneW9rYVwgOwor6JOu6I+v6I2JID4gcmVuZ2Vzb3VcIDsKK+WgseefpeapnyA+IGhvdWNoaWtpXCA7CivlpI/oh7PngrkgPiBnZXNoaXRlblwgOwor5q2m6Iq46ICFID4gYnVnZWlzaGFcIDsKK+i1sOmmrOeBryA+IHNvdW1hdG91XCA7Civmra/ou4zmnaEgPiBzaGlraWpvdVwgOwor5LqM6YeN56iOID4gbmlqdXV6ZWlcIDsKK+ato+avlOS+iyA+IHNlaWhpcmVpXCA7CivpoJDph5HogIUgPiB5b2tpbnNoYVwgOwor5Yqg6YCf5bqmID4ga2Fzb2t1ZG9cIDsKK+ato+W9k+WMliA+IHNlaXRvdWthXCA7CivmiYvkuI3otrMgPiB0ZWJ1c29rdVwgOwor5YG054Gr5bGxID4gc29ra2F6YW5cIDsKK+mBjuS4jeWPiiA+IGthZnVreXV1XCA7CivmrrrpvKDliaQgPiBzYXNzb3phaVwgOwor6KiY5b+156WtID4ga2luZW5zYWlcIDsKK+S4jeaJi+mamyA+IGZ1dGVnaXdhXCA7CivkuI3nrYnovrogPiBmdXRvdWhlblwgOwor6KKr5a6z5ZywID4gaGlnYWljaGlcIDsKK+apn+mWoui7iiA+IGtpa2Fuc2hhXCA7Civml6XmnKzntJkgPiBuaWhvbnNoaVwgOwor5a6H5a6Z5Lq6ID4gdWNodXVqaW5cIDsKK+a9nOawtOWkqyA+IHNlbnN1aWZ1XCA7CivlvqHpmYDku48gPiBvZGFidXRzdVwgOwor5aSc5a2m5qChID4geWFnYWtrb3VcIDsKK+WGjeS4iuaYoCA+IHNhaWpvdWVpXCA7CivlpJbmnaXoqp4gPiBnYWlyYWlnb1wgOwor6Zuj56C06Ii5ID4gbmFucGFzZW5cIDsKK+mnkuS4i+mnhCA+IGtvbWFnZXRhXCA7Civms6jmhI/mm7ggPiBjaHV1aXNob1wgOwor5LqU6YeN5aWPID4gZ29qdXVzb3VcIDsKK+a8q+irh+WutiA+IG1hbmRhbmthXCA7CivlgI3nsr7luqYgPiBiYWlzZWlkb1wgOwor57SN5LuY6ICFID4gbm91ZnVzaGFcIDsKK+WZtOeBq+WPoyA+IGZ1bmtha291XCA7Civku4vorbfkurogPiBrYWlnb25pblwgOwor6YGT6K2w5LyaID4gZG91Z2lrYWlcIDsKK+acieapn+S9kyA+IHl1dWtpdGFpXCA7CivmrbvnlKPlhZAgPiBzaGl6YW5qaVwgOwor5LiN6KaP5YmHID4gZnVraXNva3VcIDsKK+a9nOawtOWZqCA+IHNlbnN1aWtpXCA7CivmlbTlgpnlt6UgPiBzZWliaWtvdVwgOwor6I2S5q2m6ICFID4gYXJhbXVzaGFcIDsKK+mBoOWcsOeCuSA+IGVuY2hpdGVuXCA7CivlpJblrZfntJkgPiBnYWlqaXNoaVwgOwor5LuK5pmC5YiGID4gaW1hamlidW5cIDsKK+WPjeWLleWutiA+IGhhbmRvdWthXCA7CivmqZ/plqLoqowgPiBraWthbnNoaVwgOwor5aSn5pmm5pelID4gb29taXNva2FcIDsKK+S4jeeyvuW3pyA+IGZ1c2Vpa291XCA7CivlpKfkuIjlpKsgPiBkYWlqb3VidVwgOwor5L+d5YWo5LyaID4gaG96ZW5rYWlcIDsKK+WQjOe0oOS9kyA+IGRvdXNvdGFpXCA7Civlho3kuqTku5ggPiBzYWlrb3VmdVwgOwor5aSp5pel5rOVID4gdGVucGlob3VcIDsKK+WuiOitt+elniA+IHNodWdvamluXCA7CivntYTlkIjosrsgPiBrdW1pYWloaVwgOwor6I2S6JWq5ZywID4ga291YnVjaGlcIDsKK+aEm+Wqm+ecjCA+IGVoaW1la2VuXCA7CivoqIjnrpflmaggPiBrZWlzYW5raVwgOwor5pyq6Z2S5bm0ID4gbWlzZWluZW5cIDsKK+S6uuS6i+ashCA+IGppbmppcmFuXCA7Civplbfpn7PnrKYgPiBjaG91b25wdVwgOwor5LiN5Z2H5paJID4gZnVraW5zZWlcIDsKK+a6luWCmemHkSA+IGp1bmJpa2luXCA7Civmt4vlt7TmtrIgPiByaW5wYWVraVwgOwor5LqL5YuZ6ZW3ID4gamltdWNob3VcIDsKK+S/rueQhuWxiyA+IHNodXVyaXlhXCA7Civmh5DnlpHoq5YgPiBrYWlnaXJvblwgOwor5ZaJ6aCt54KOID4ga291dG91ZW5cIDsKK+eWjuWkluaEnyA+IHNvZ2Fpa2FuXCA7CivliqDpgJ/lmaggPiBrYXNva3VraVwgOwor5Yqg5bel5q2vID4ga2Frb3VzaGlcIDsKK+W6reS4i+mnhCA+IG5pd2FnZXRhXCA7CivpnZ7luLjli6QgPiBoaWpvdWtpblwgOwor6YeO55CD6YOoID4geWFreXV1YnVcIDsKK+WJjemnhuaIpiA+IHplbmt1c2VuXCA7CivmjIflsI7pg6ggPiBzaGlkb3VidVwgOwor6LKh55Sj5a62ID4gemFpc2Fua2FcIDsKK+WxheWCrOS/gyA+IGl6YWlzb2t1XCA7CivlvZPmrbPppqwgPiB0b3VzYWliYVwgOwor5LuB546L5YqbID4gbmlvdXJpa2lcIDsKK+WkmuiCieaenCA+IHRhbmlrdWthXCA7CivmnIDnm5vmnJ8gPiBzYWlzZWlraVwgOwor5Y+N5q+U5L6LID4gaGFucGlyZWlcIDsKK+Wls+WtkOmrmCA+IGpvc2hpa291XCA7Civplovlm57ot68gPiBrYWlrYWlyb1wgOwor5a+p5p+75ZOhID4gc2hpbnNhaW5cIDsKK+m6nemmmeawtCA+IGpha291c3VpXCA7Civml6XmnKzniqwgPiBuaWhvbmtlblwgOwor5LqL5YuZ6YePID4gamltdXJ5b3VcIDsKK+W8leeUqOWPpSA+IGluJyd5b3VrdVwgOwor56eR5a2m6ZmiID4ga2FnYWt1aW5cIDsKK+WJjemgremDqCA+IHplbnRvdWJ1XCA7CivljYHlm5vml6UgPiBqdXV5b2trYVwgOwor6YCj5q2M5birID4gcmVuZ2FzaGlcIDsKK+aUr+aPtOiAhSA+IHNoaWVuc2hhXCA7CivmorbmnKjluqcgPiBrYWppa2l6YVwgOwor5Zyw5pa55Yy6ID4gY2hpaG91a3VcIDsKK+WxseeBq+S6iyA+IHlhbWFrYWppXCA7CivmiY3mnKrmuoAgPiBzYWltaW1hblwgOwor5Lq66aGe54y/ID4gamlucnVpZW5cIDsKK+itsOWumuabuCA+IGdpdGVpc2hvXCA7CivojLblnYrkuLsgPiBjaGFib3V6dVwgOwor5Yqg55uf5bqXID4ga2FtZWl0ZW5cIDsKK+e3qeS4i+WJpCA+IGthbmdlemFpXCA7CivokIzpu4ToibIgPiBtb2VnaWlyb1wgOwor56m65rCX6YqDID4ga3V1a2lqdXVcIDsKK+m5ueawtOa5liA+IGthbnN1aWtvXCA7CivmtbfogIHohbAgPiBlYmlnb3NoaVwgOwor55Sf6KiI6LK7ID4gc2Vpa2VpaGlcIDsKK+WPguWKoOiAhSA+IHNhbmthc2hhXCA7Civml6XmnKzmtbcgPiBuaWhvbmthaVwgOwor6KKr5LmX5pWwID4gaGlqb3VzdXVcIDsKK+aJi+miqOeQtCA+IHRlZnV1a2luXCA7Civms6jmhI/loLEgPiBjaHV1aWhvdVwgOwor6aKo5pmv55S7ID4gZnV1a2VpZ2FcIDsKK+mbu+WtkOmfsyA+IGRlbnNoaW9uXCA7Civou6LljJbns5YgPiB0ZW5rYXRvdVwgOwor6ZaJ57WM5pyfID4gaGVpa2Vpa2lcIDsKK+WHuueEoeeyviA+IGRlYnVzaG91XCA7CivkupLliqnnmoQgPiBnb2pvdGVraVwgOwor5Lm+5omA5bivID4ga2Fuam90YWlcIDsKK+Wkp+mfs+WjsCA+IGRhaW9uam91XCA7CivnoLTnlKPogIUgPiBoYXNhbnNoYVwgOwor6ZaJ5Zue6LevID4gaGVpa2Fpcm9cIDsKK+apn+mWoue0mSA+IGtpa2Fuc2hpXCA7Civog6Hpurvmk4IgPiBnb21hc3VyaVwgOwor5qmf6Zu35Y6fID4ga2lyYWlnZW5cIDsKK+WkmuWtlOaApyA+IHRha291c2VpXCA7CivlkIjmiJDpn7MgPiBnb3VzZWlvblwgOwor56C06a2U5byTID4gaGFtYXl1bWlcIDsKK+mAoOW9seWJpCA+IHpvdWVpemFpXCA7CivlgKbmgKDmnJ8gPiBrZW50YWlraVwgOwor5pyq57SN6ICFID4gbWlub3VzaGFcIDsKK+S6jOmHjeaYnyA+IG5panV1c2VpXCA7CivnuYHkvZPlrZcgPiBoYW50YWlqaVwgOwor5raI6Z+z5ZmoID4gc2hvdW9ua2lcIDsKK+WkmuS6uuaVsCA+IHRhbmluenV1XCA7CivotbTku7vlnLAgPiBmdW5pbmNoaVwgOwor5Y+k55Sf5LujID4ga29zZWlkYWlcIDsKK+iKneWxheawlyA+IHNoaWJhaWdlXCA7CivmqKrluqfmqJkgPiBvdXphaHlvdVwgOwor6Ieq6K2m5ZujID4gamlrZWlkYW5cIDsKK+aaq+WumuahiCA+IHphbnRlaWFuXCA7CivprZrluILloLQgPiB1b2ljaGliYVwgOwor6aeF6aas6LuKID4gZWtpYmFzaGFcIDsKK+WvvuipseS9kyA+IHRhaXdhdGFpXCA7CivmuIXmjoPlpKsgPiBzZWlzb3VmdVwgOwor6auY5oSf5bqmID4ga291a2FuZG9cIDsKK+e0gOWFg+WJjSA+IGtpZ2VuemVuXCA7Civno6jnoJTntJkgPiBtYWtlbnNoaVwgOwor54Gr6Jyl6Jy0ID4gaGl0b2thZ2VcIDsKK+aXouWpmuiAhSA+IGtpa29uc2hhXCA7CivmkKzpgIHms6IgPiBoYW5zb3VoYVwgOwor55aO6ZaL6ICFID4gc29rYWlzaGFcIDsKK+aAneaDs+WutiA+IHNoaXNvdWthXCA7CivlsqnnlLDluK8gPiBpd2F0YW9iaVwgOwor6ZaL6ZaJ5qmfID4ga2FpaGVpa2lcIDsKK+W6j+egtOaApSA+IGpvaGFreXV1XCA7CivotrPlv6Dlrp8gPiBhc2hpbWFtZVwgOwor5Y2K5rib5pyfID4gaGFuZ2Vua2lcIDsKK+iHqueEtue+jiA+IHNoaXplbmJpXCA7CivliY3kuJbntIAgPiB6ZW5zZWlraVwgOwor56CU56Oo57SZID4ga2VubWFzaGlcIDsKK+mdkuWGmeecnyA+IGFvamFzaGluXCA7CivnpYjnpbfmm7ggPiBraXRvdXNob1wgOwor5biw6YKE5YW1ID4ga2lrYW5oZWlcIDsKK+mWiee1jOW+jCA+IGhlaWtlaWdvXCA7CivlpJrmlrnpnaIgPiB0YWhvdW1lblwgOwor54eV5bC+5pyNID4gZW5iaWZ1a3VcIDsKK+emgOitsOabuCA+IHJpbmdpc2hvXCA7CivniLblhYTkvJogPiBmdWtlaWthaVwgOwor6auY6bqX5qW9ID4ga29tYWdha3VcIDsKK+WFqOebm+acnyA+IHplbnNlaWtpXCA7Civkuojmg7PlpJYgPiB5b3NvdWdhaVwgOwor5omB5qGD5rK5ID4gaGVudG91eXVcIDsKK+mdkuW5tOacnyA+IHNlaW5lbmtpXCA7CivlnYfnrYnljJYgPiBraW50b3VrYVwgOwor5Y+X6aiT6ICFID4ganVrZW5zaGFcIDsKK+aZguS7o+ebuCA+IGppZGFpc291XCA7CivlopfliqDliIYgPiB6b3VrYWJ1blwgOwor5LqM6YCj6YqDID4gbmlyZW5qdXVcIDsKK+S4gOWbnui7oiA+IGlra2FpdGVuXCA7CivkuLvohLPpg6ggPiBzaHVub3VidVwgOwor57SN5LuY5pu4ID4gbm91ZnVzaG9cIDsKK+WNmOW8geiKsSA+IHRhbmJlbmthXCA7CivmtYHmtarogIUgPiBydXJvdXNoYVwgOwor6I2S5Yip55uKID4gYXJhcmlla2lcIDsKK+iPk+WtkOebhiA+IGthc2hpYm9uXCA7CivlhaznlKjoqp4gPiBrb3V5b3Vnb1wgOwor5aSq6Zm954KJID4gdGFpeW91cm9cIDsKK+WPl+i6q+W9oiA+IHVrZW1pa2VpXCA7CivmsJHllrbljJYgPiBtaW4nJ2Vpa2FcIDsKK+S6uuacm+WutiA+IGppbmJvdWthXCA7Civnt4/kuozpmo4gPiBzb3VuaWthaVwgOwor6Kej6ZuH6ICFID4ga2Fpa29zaGFcIDsKK+a8ouaZguS7oyA+IGthbmppZGFpXCA7CivlhoXlpJbph44gPiBuYWlnYWl5YVwgOwor54mH5Luu5ZCNID4ga2F0YWthbmFcIDsKK+iEseiho+aJgCA+IGRhdHN1aWpvXCA7CivkuI3pjIbpi7wgPiBmdXNlaWtvdVwgOwor6LSI5LiO6ICFID4gem91eW9zaGFcIDsKK+S/neWuiOezuyA+IGhvc2h1a2VpXCA7Civmtbfppqzlm54gPiBrYWliYWthaVwgOwor6Ieq5aCV6JC9ID4gamlkYXJha3VcIDsKK+acrOWhgeaJkyA+IGhvbnJ1aWRhXCA7CivmhJvppJDkvJogPiBhaXNhbmthaVwgOwor5a++5oqX6aasID4gdGFpa291YmFcIDsKK+S7ruWQjeaWhyA+IGthbmFidW1pXCA7Civog6HpurvloakgPiBnb21hc2hpb1wgOwor5Yqg5bel5ZOBID4ga2Frb3VoaW5cIDsKK+aoqeWIqeabuCA+IGtlbnJpc2hvXCA7Civlu4PopoHntKAgPiBoYWl5b3Vzb1wgOwor56m65oOz5a62ID4ga3V1c291a2FcIDsKK+aXouWumuWApCA+IGtpdGVpY2hpXCA7Civosqnlo7Lpg6ggPiBoYW5iYWlidVwgOwor55y86Y+h5bGLID4gbWVnYW5leWFcIDsKK+WJjeS4lueVjCA+IHplbnNla2FpXCA7CivmnKzloLTmiYAgPiBob25iYXNob1wgOwor6Jma54Sh5YWaID4ga3lvbXV0b3VcIDsKK+S6uumhnuaEmyA+IGppbnJ1aWFpXCA7Civkuozph43lpY8gPiBuaWp1dXNvdVwgOwor5oSb5aW96ICFID4gYWlrb3VzaGFcIDsKK+WQiOaIkOiqniA+IGdvdXNlaWdvXCA7Civnn7Pngavnn6IgPiBpc2hpYml5YVwgOwor5Ye657SN57C/ID4gc3VpdG91Ym9cIDsKK+i7jeeuoeWMuiA+IGd1bmthbmt1XCA7Civnp4vnlLDnnIwgPiBha2l0YWtlblwgOwor5YSS5a2m55WMID4ganVnYWtrYWlcIDsKK+S4i+aJi+ezniA+IGhldGFrdXNvXCA7CivmnKrlor7lnLAgPiBtaWtvbmNoaVwgOwor5aSn5aSa5pWwID4gZGFpdGFzdXVcIDsKK+WtkOWNiOe3miA+IHNoaWdvc2VuXCA7CivmraPluLjljJYgPiBzZWlqb3VrYVwgOwor55m66YW157SgID4gaGFra291c29cIDsKK+i3nembouioiCA+IGt5b3Jpa2VpXCA7CivoiLnlsI/lsYsgPiBmdW5hZ295YVwgOwor6Ya46YCg5omAID4gam91em91am9cIDsKK+Wkp+e0jeiogCA+IGRhaW5hZ29uXCA7CivlpKnmloflrrYgPiB0ZW5tb25rYVwgOwor5qih6YCg6ICFID4gbW96b3VzaGFcIDsKK+WvneS4jei2syA+IG5lYnVzb2t1XCA7CivlsILploDlrrYgPiBzZW5tb25rYVwgOwor5pyq54S25b2iID4gbWl6ZW5rZWlcIDsKK+WJquijgeapnyA+IHNlbnNhaWtpXCA7Civos7zosrfpg6ggPiBrb3ViYWlidVwgOwor5oWI5ZaE5LyaID4gaml6ZW5rYWlcIDsKK+aCqui2o+WRsyA+IGFrdXNodW1pXCA7CivotIjkuI7nqI4gPiB6b3V5b3plaVwgOwor5L+d5a2Y57O7ID4gaG96b25rZWlcIDsKK+awl+WLlei7iiA+IGtpZG91c2hhXCA7CivmsLjkvY/ogIUgPiBlaWp1dXNoYVwgOwor5pyq54af5YWQID4gbWlqdWt1amlcIDsKK+iomOW/teWTgSA+IGtpbmVuaGluXCA7CivnoLTnk5znl4UgPiBoYWthYnlvdVwgOwor56C055Sj5rOVID4gaGFzYW5ob3VcIDsKK+WBnOmbu+aXpSA+IHRlaWRlbmJpXCA7Civlj5fpqJPnlJ8gPiBqdWtlbnNlaVwgOwor6Zm46JK45rCXID4gb2tham91a2lcIDsKK+Wun+ihjOaZgiA+IGppa2tvdWppXCA7CivmqKHpgKDntJkgPiBtb3pvdXNoaVwgOwor5LqM5Y6f5a2QID4gbmlnZW5zaGlcIDsKK+S7luaJgOiAhSA+IHlvc29tb25vXCA7Civnp4vnlLDniqwgPiBha2l0YWtlblwgOwor5LiH5Zu95peXID4gYmFua29ra2lcIDsKK+S6i+WLmeeahCA+IGppbXV0ZWtpXCA7Civmjqjnp7vnmoQgPiBzdWlpdGVraVwgOwor56m65rCX56m0ID4ga3V1a2lhbmFcIDsKK+WPl+WuueiAhSA+IGp1eW91c2hhXCA7Civns6DlkbPlmYwgPiBudWthbWlzb1wgOwor5pa55b2i5rOiID4gaG91a2VpaGFcIDsKK+aIpuWJjea0viA+IHNlbnplbmhhXCA7Civlh6bnkIbloLQgPiBzaG9yaWpvdVwgOwor5LqM5bym55C0ID4gbmlnZW5raW5cIDsKK+mFkumAoOWutiA+IHNodXpvdWthXCA7CivmjrLnpLrmnb8gPiBrZWlqaWJhblwgOwor5YaF6aKo5ZGCID4gdWNoaWJ1cm9cIDsKK+S4reWKtOWnlCA+IGNodXVyb3VpXCA7CivmhJvnjKvlrrYgPiBhaWJ5b3VrYVwgOwor5LiJ5Zue5b+MID4gc2Fua2Fpa2lcIDsKK+e3j+S7leiIniA+IHNvdWppbWFpXCA7CivphrjpgKDlrrYgPiBqb3V6b3VrYVwgOwor5Lqk5LuY6YeRID4ga291ZnVraW5cIDsKK+aJh+miqOapnyA+IHNlbnB1dWtpXCA7CivlhajlgJnoo5wgPiB6ZW5rb3Vob1wgOwor55CG5oOz6KuWID4gcmlzb3Vyb25cIDsKK+aXpeacrOWPsiA+IG5paG9uc2hpXCA7CivmvKLmlbDlrZcgPiBrYW5zdXVqaVwgOwor6Lyd54WM5bidID4ga2lrb3V0ZWlcIDsKK+aUr+aMgeiAhSA+IHNoaWppc2hhXCA7CivlpKfmloflrZcgPiBkYWltb25qaVwgOwor5a2Q5Y2I55KwID4gc2hpZ29rYW5cIDsKK+iJtuemj+WutiA+IGVucHVrdWthXCA7CivplovplonlmaggPiBrYWloZWlraVwgOwor5bCC6ZaA5Yy7ID4gc2VubW9uJydpXCA7Civmm7TlubTmnJ8gPiBrb3VuZW5raVwgOwor5bCC6ZaA5YyWID4gc2VubW9ua2FcIDsKK+aXpeacrOWIgCA+IG5paG9udG91XCA7CivkuI3ooYzlhIAgPiBmdWd5b3VnaVwgOwor5biw5bej5oCnID4ga2lzb3VzZWlcIDsKK+S4i+aJi+eJqSA+IGdldGVtb25vXCA7Civmj5DmoYjogIUgPiB0ZWlhbnNoYVwgOwor5Y+X5L+h5qmfID4ganVzaGlua2lcIDsKK+aPmuWtkOaxnyA+IHlvdXN1a291XCA7CivntYzluLjosrsgPiBrZWlqb3VoaVwgOwor5rW3546L5pifID4ga2Fpb3VzZWlcIDsKK+W5vOeomuWckiA+IHlvdWNoaWVuXCA7CivkvIHnlLvoqrIgPiBraWtha3VrYVwgOwor5pyI5qGC5qi5ID4gZ2Vra2VpanVcIDsKK+acquiomOWFpSA+IG1pa2lueXV1XCA7CivnoJTno6jmnZAgPiBrZW5tYXphaVwgOwor5LqM5bm06I2JID4gbmluZW5zb3VcIDsKK+e+qeWLh+i7jSA+IGdpeXV1Z3VuXCA7Civmlofoqp7mlocgPiBidW5nb2J1blwgOwor6KqV55Sf5pelID4gdGFuam91YmlcIDsKK+mHkeaZguioiCA+IGtpbmRva2VpXCA7CivnqbrmtJ7ljJYgPiBrdXVkb3VrYVwgOwor57Oe5ZGz5ZmMID4ga3Vzb21pc29cIDsKK+aXpeacrOS6uiA+IG5paG9uamluXCA7CivmgKfpgYrmiK8gPiBzZWl5dXVnaVwgOwor5qyh54K56ICFID4gaml0ZW5zaGFcIDsKK+mYsuiFkOWJpCA+IGJvdWZ1emFpXCA7Civml6XmnKzkuK0gPiBuaWhvbmp1dVwgOwor6IWV55u45pKyID4gdWRlenVtb3VcIDsKK+S4jeevgOWItiA+IGZ1c2Vzc2VpXCA7CivlnLDln5/lt64gPiBjaGlpa2lzYVwgOwor5L+d6K236bOlID4gaG9nb2Nob3VcIDsKK+Wwj+aJi+WFiCA+IGtvdGVzYWtpXCA7CivnhKHpmY3msLQgPiBtdWtvdXN1aVwgOwor6by75ZG85ZC4ID4gYmlrb2t5dXVcIDsKK+mHjemojuWFtSA+IGp1dWtpaGVpXCA7Civlj6Tku6Plj7IgPiBrb2RhaXNoaVwgOwor6IO96Iie5Y+wID4gbm91YnV0YWlcIDsKK+ertummrOmmrCA+IGtlaWJhdW1hXCA7CivlhY3np5/lnLAgPiBtZW5zb2NoaVwgOwor5LqM5qyh55qEID4gbmlqaXRla2lcIDsKK+a8lOWlj+iAhSA+IGVuc291c2hhXCA7CivlhbfkvZPmgKcgPiBndXRhaXNlaVwgOwor5LiA562J6LuKID4gaXR0b3VzaGFcIDsKK+S4jeWTgeihjCA+IGZ1aGlua291XCA7Civnibnnp5HlhbUgPiB0b2trYWhlaVwgOwor6ISC6IKq5rK5ID4gc2hpYm91eXVcIDsKK+W3puWkp+iHoyA+IHNhZGFpamluXCA7Civph5HlrZfloZQgPiBraW5qaXRvdVwgOwor6auY6YeO5bGxID4ga291eWFzYW5cIDsKK+Wkp+eGiuW6pyA+IG9vZ3VtYXphXCA7CivlhpLpmbrlrrYgPiBib3VrZW5rYVwgOwor5aGp5r+D5bqmID4gZW4nJ25vdWRvXCA7Civml6XkuYPkuLggPiBoaW5vbWFydVwgOwor5L2V5Yem6L+EID4gZG9rb21hZGVcIDsKK+i/keS8vOWApCA+IGtpbmppY2hpXCA7CivpgI/no4HmgKcgPiB0b3VqaXNlaVwgOwor5L+d6K236aCYID4gaG9nb3J5b3VcIDsKK+eJuea0vuWToSA+IHRva3VoYWluXCA7CivllL7mtrLohbogPiBkYWVraXNlblwgOwor5bqt5pyo5oi4ID4gbml3YWtpZG9cIDsKK+W+jOaPtOiAhSA+IGtvdWVuc2hhXCA7Civpu4TpiYTpibEgPiBvdXRla2tvdVwgOwor5Y+k5Luj5Lq6ID4ga29kYWlqaW5cIDsKK+S6i+WLmeacjSA+IGppbXVmdWt1XCA7CivlsI/puqbnsokgPiBrb211Z2lrb1wgOwor5LiN5rq25oCnID4gZnV5b3VzZWlcIDsKK+mhp+WVj+WboyA+IGtvbW9uZGFuXCA7Civkv53mnInogIUgPiBob3l1dXNoYVwgOwor6YG/55eF6ZmiID4gaGlieW91aW5cIDsKK+WJjeaZr+awlyA+IG1hZWdlaWtpXCA7CivmqZ/plqLlo6sgPiBraWthbnNoaVwgOwor5aSW5Lqk5ZOhID4gZ2Fpa291aW5cIDsKK+mKheebuOWgtCA+IGRvdXNvdWJhXCA7Civlgr7mlpzluqYgPiBrZWlzaGFkb1wgOwor6auY5bqm6KiIID4ga291ZG9rZWlcIDsKK+i/keacquadpSA+IGtpbm1pcmFpXCA7CivmjZXpr6joiLkgPiBob2dlaXNlblwgOwor5Yqg5a6z6ICFID4ga2FnYWlzaGFcIDsKK+aVsOePoOeOiSA+IGp1enVkYW1hXCA7CivmiYvnvr3lhYggPiB0ZWJhc2FraVwgOwor6KOc5Yqp57+8ID4gaG9qb3lva3VcIDsKK+aFiOaCsuW/gyA+IGppaGlzaGluXCA7CivlpJbosqjlgrUgPiBnYWlrYXNhaVwgOwor5oOF5aCx5YyWID4gam91aG91a2FcIDsKK+e3j+S6iOeulyA+IHNvdXlvc2FuXCA7CivnnJ/lpJzkuK0gPiBtYXlvbmFrYVwgOwor5LiL5oSP6K2YID4ga2Fpc2hpa2lcIDsKK+S7o+eoveWPpCA+IGRhaWdlaWtvXCA7CivmsLjkvY/mqKkgPiBlaWp1dWtlblwgOwor5L+d5pyJ57GzID4gaG95dXVtYWlcIDsKK+iHquWbveiqniA+IGppa29rdWdvXCA7Civlj43lr77oqp4gPiBoYW50YWlnb1wgOwor5aSJ55Ww5L2TID4gaGVuJydpdGFpXCA7CivliKnlt7HnmoQgPiByaWtvdGVraVwgOwor5bu65YW35bGLID4gdGF0ZWd1eWFcIDsKK+mYsuWvkuWFtyA+IGJvdWthbmd1XCA7CivlpbPlrabmoKEgPiBqb2dha2tvdVwgOwor5L+d5a6I5oCnID4gaG9zaHVzZWlcIDsKK+WlveaZr+awlyA+IGtvdWtlaWtpXCA7CivkuqTku5jogIUgPiBrb3VmdXNoYVwgOwor5Y+v5aSJ5pWwID4ga2FoZW5zdXVcIDsKK+iKseaWh+WtlyA+IGhhbmFtb2ppXCA7CivpnaLkvJrml6UgPiBtZW5rYWliaVwgOwor54WZ6I2J5bGLID4gdGFiYWtveWFcIDsKK+mbqOaooeanmCA+IGFtZW1veW91XCA7Civmj7rnsYPmnJ8gPiB5b3VyYW5raVwgOwor56qB56C05Y+jID4gdG9wcGFrb3VcIDsKK+i/keS7o+WMliA+IGtpbmRhaWthXCA7Civngrnngavns7sgPiB0ZW5rYWtlaVwgOwor5LqM5bm055SfID4gbmluZW5zZWlcIDsKK+aYn+awl+S9kyA+IHNlaWtpdGFpXCA7CivkuI3nrYnlj7cgPiBmdWRvdWdvdVwgOwor5LqU6L665b2iID4gZ29oZW5rZWlcIDsKK+S6jOi8qui7iiA+IG5pcmluc2hhXCA7CivnlKjnrqrnrKUgPiB5b3VkYW5zdVwgOwor5Ya36JS15bqrID4gcmVpem91a29cIDsKK+S4jeaJgOWtmCA+IGZ1c2hvem9uXCA7CivmipXlhYnlmaggPiB0b3Vrb3VraVwgOwor5aWz5a2Q5qChID4gam9zaGlrb3VcIDsKK+a1nOiMhOWtkCA+IGhhbWFuYXN1XCA7Civlj6Tmm7jlsZUgPiBrb3Nob3RlblwgOwor5LqM5Y2B5LujID4gbmlqdXVkYWlcIDsKK+W4guihl+WbsyA+IHNoaWdhaXp1XCA7CivmqLnmnp3nirYgPiBqdXNoaWpvdVwgOwor5bqP55uk5oimID4gam9iYW5zZW5cIDsKK+eBq+aIkOWyqSA+IGthc2VpZ2FuXCA7CivntYTlkIjlk6EgPiBrdW1pYWlpblwgOwor5Lqc6ISx6Ie8ID4gYWRha2t5dXVcIDsKK+mssemHkeiJsiA+IHVrb24nJ2lyb1wgOwor6ay85q2m6ICFID4gb25pbXVzaGFcIDsKK+aWnOaKleW9sSA+IHNoYXRvdWVpXCA7Civmu5HnqbrmqZ8gPiBrYWtrdXVraVwgOwor6Lu96aiO5YW1ID4ga2Vpa2loZWlcIDsKK+S6jOWFg+irliA+IG5pZ2Vucm9uXCA7CivmiYvmlpnnkIYgPiB0ZXJ5b3VyaVwgOwor5Y2Y5Yip5rOVID4gdGFucmlob3VcIDsKK+W+oeelnui8vyA+IG9taWtvc2hpXCA7CivlhYjpi63ljJYgPiBzZW4nJ2Vpa2FcIDsKK+aSkuW4g+WJpCA+IHNhcHB1emFpXCA7CivlkYnmnI3lsYsgPiBnb2Z1a3V5YVwgOwor5Y+X5L+h5ZmoID4ganVzaGlua2lcIDsKK+a6tuino+eCiSA+IHlvdWthaXJvXCA7Civlj6/lpInmgKcgPiBrYWhlbnNlaVwgOwor5bm06b2i5beuID4gbmVucmVpc2FcIDsKK+WIgOWcreWutiA+IHRvdWtlaWthXCA7Civps7Pku5noirEgPiBob3VzZW5rYVwgOwor5bCO5rOi566hID4gZG91aGFrYW5cIDsKK+WNmOavlOS+iyA+IHRhbnBpcmVpXCA7CivmjZXpr6jnoLIgPiBob2dlaWhvdVwgOwor55u06Laz6KKLID4gamlrYXRhYmlcIDsKK+aCquWkqumDjiA+IGFrdXRhcm91XCA7CivmnInnkIbmlbAgPiB5dXVyaXN1dVwgOwor6YOo5YiG5ZOBID4gYnVidW5oaW5cIDsKK+WPr+eHg+aApyA+IGthbmVuc2VpXCA7CivkuI3lloTmhJ8gPiBmdXplbmthblwgOwor5rSX6Z2i5omAID4gc2VubWVuam9cIDsKK+mAgeayueeuoSA+IHNvdXl1a2FuXCA7CivmoLzlrZDmiLggPiBrb3VzaGlkb1wgOwor5YW35L2T5L6LID4gZ3V0YWlyZWlcIDsKK+aUr+aMgeadrSA+IHNoaWppa291XCA7CivnhKHpmZDlpKcgPiBtdWdlbmRhaVwgOwor57K+57Gz5omAID4gc2VpbWFpam9cIDsKK+e1seiqnuirliA+IHRvdWdvcm9uXCA7CivmnKrplovlor4gPiBtaWthaWtvblwgOwor5L2c5qWt6LK7ID4gc2FneW91aGlcIDsKK+Wkp+mYquW6nCA+IG9vc2FrYWZ1XCA7CivnjIrnvo7muJMgPiBnZWliaWtlaVwgOwor5omT5pKD546LID4gZGFnZWtpb3VcIDsKK+W6g+iRieaouSA+IGtvdXlvdWp1XCA7CivojYnlibXmnJ8gPiBzb3Vzb3VraVwgOwor5L6N6KGb6ZW3ID4gamllaWNob3VcIDsKK+S6jOmAsuacqCA+IG5pc2hpbmdpXCA7CivpoZXlnKjljJYgPiBrZW56YWlrYVwgOwor5YaN6Kmm5ZCIID4gc2Fpc2hpYWlcIDsKK+S8nemfs+WZqCA+IGRlbicnb25raVwgOwor576p5YuZ55qEID4gZ2ltdXRla2lcIDsKK+i8uOWNteeuoSA+IHl1cmFua2FuXCA7CivkvY7liKnph5EgPiB0ZWlyaWtpblwgOwor5oim5Yip5ZOBID4gc2VucmloaW5cIDsKK+aWh+iqnuS9kyA+IGJ1bmdvdGFpXCA7Civkub7mgKfmsrkgPiBrYW5zZWl5dVwgOwor5pOC57KJ5pyoID4gc3VyaWtvZ2lcIDsKK+aMh+WwjuWToSA+IHNoaWRvdWluXCA7CivmnKrplovlnLAgPiBtaWthaWNoaVwgOwor56eY5pu45a6YID4gaGlzaG9rYW5cIDsKK+atpuWutueJqSA+IGJ1a2Vtb25vXCA7CivmlbTnkIbliLggPiBzZWlyaWtlblwgOwor6IKy6Zub5ZmoID4gaWt1c3V1a2lcIDsKK+Wcp+aQvuapnyA+IGFzc2FrdWtpXCA7CivkuozliIbms5UgPiBuaWJ1bmhvdVwgOwor5re35oiQ6KqeID4ga29uc2VpZ29cIDsKK+ePiOeQsuiLkSA+IGtvdWhpaWVuXCA7Civkuozpg6jkvZwgPiBuaWJ1c2FrdVwgOwor57eP5Lya5bGLID4gc291a2FpeWFcIDsKK+S7leaJi+aIpiA+IHNoaXRlc2VuXCA7Civlpb3lpb3niLogPiBrb3Vrb3V5YVwgOwor56iO5YuZ572yID4gemVpbXVzaG9cIDsKK+iyqeWjsuapnyA+IGhhbmJhaWtpXCA7CivnqbrmsJflrZQgPiBrdXVraWtvdVwgOwor55ay5Yq05oSfID4gaGlyb3VrYW5cIDsKK+aUvuawtOi3ryA+IGhvdXN1aXJvXCA7CivkvJrorbDmiYAgPiBrYWlnaXNob1wgOwor5b2i5a656KqeID4ga2VpeW91Z29cIDsKK+S4gOWbnuaIpiA+IGlra2Fpc2VuXCA7CivnlpHllY/oqZ4gPiBnaW1vbnNoaVwgOwor6Ium5Yq05Lq6ID4ga3Vyb3VuaW5cIDsKK+iBlueBq+WPsCA+IHNlaWthZGFpXCA7CivmsLTkvY3mqJkgPiBzdWlpaHlvdVwgOwor5oKy6Kaz6KuWID4gaGlrYW5yb25cIDsKK+WmhOiqnuaIkiA+IG1vdWdva2FpXCA7CivmsLjlsI/kvZwgPiBlaWtvc2FrdVwgOwor54Kt57Sg6Yu8ID4gdGFuc29rb3VcIDsKK+e5iue2readnyA+IHNlbmlzb2t1XCA7Civop6PmlL7ljLogPiBrYWlob3VrdVwgOwor5L+d5a6I5YWaID4gaG9zaHV0b3VcIDsKK+e0heS4gOeCuSA+IGtvdWl0dGVuXCA7CivkvIHmpa3lrrYgPiBraWd5b3VrYVwgOwor5a625bqt55SoID4ga2F0ZWl5b3VcIDsKK+iZmuepuuiUtSA+IGtva3V1em91XCA7CivkvJroqIjoqrIgPiBrYWlrZWlrYVwgOwor5Yuk5YuZ6ICFID4ga2lubXVzaGFcIDsKK+i3nembouaEnyA+IGt5b3Jpa2FuXCA7CivkuI3miJDlip8gPiBmdXNlaWtvdVwgOwor56WI5bm056WtID4ga2luZW5zYWlcIDsKK+eci+itt+azlSA+IGthbmdvaG91XCA7CivlgqzkuovloLQgPiBzYWlqaWpvdVwgOwor6ay85YW16ZqKID4ga2loZWl0YWlcIDsKK+Wls+WtkOWkpyA+IGpvc2hpZGFpXCA7CivllK/miJHoq5YgPiB5dWlnYXJvblwgOwor5pyq6KO95ZOBID4gbWlzZWloaW5cIDsKK+eEoee1seWItiA+IG11dG91c2VpXCA7CivpgKDoiLnmiYAgPiB6b3VzZW5qb1wgOwor6Lqr5pSv5bqmID4gbWlqaXRha3VcIDsKK+mHkeacrOS9jSA+IGtpbmhvbicnaVwgOwor5aSa6Z2i5oCnID4gdGFtZW5zZWlcIDsKK+Wkp+Wei+apnyA+IG9vZ2F0YWtpXCA7CivmnKrplovkurogPiBtaWthaWppblwgOwor6JeB5bGL5qC5ID4gd2FyYXlhbmVcIDsKK+aciOS4lueVjCA+IGdlc3Nla2FpXCA7CivlvpfmhI/poZQgPiB0b2t1aWdhb1wgOwor5omL6ZaT6ZqZID4gdGVtYWhpbWFcIDsKK+epuuawl+WPoyA+IGt1dWtpa291XCA7CivmlL/msrvniq8gPiBzZWlqaWhhblwgOwor5rSX6Z2i5ZmoID4gc2VubWVua2lcIDsKK+S6uuaWh+WtlyA+IGhpdG9tb2ppXCA7CivmqKHpgKDlk4EgPiBtb3pvdWhpblwgOwor5ZG85ZC45ZmoID4ga29reXV1a2lcIDsKK+Wcn+WcsOmRkSA+IHRvY2hpa2FuXCA7CivmsJfpgIHnrqEgPiBraXNvdWthblwgOwor5L2O6YeR5YipID4gdGVpa2lucmlcIDsKK+W4veWtkOWxiyA+IGJvdXNoaXlhXCA7CivlvqHmiJDlip8gPiBnb3NlaWtvdVwgOwor54+K55Ga5rW3ID4gc2FuZ29rYWlcIDsKK+abs+WFieW8viA+IGVpa291ZGFuXCA7CivljYPph4znnLwgPiBzZW5yaWdhblwgOwor6JC95LiL5YKYID4gcmFra2FzYW5cIDsKK+a4oeiIquiAhSA+IHRva291c2hhXCA7CivkuIvmiYvkurogPiBnZXNodW5pblwgOwor5Yem5aWz5p6XID4gc2hvam9yaW5cIDsKK+S6i+alremDqCA+IGppZ3lvdWJ1XCA7Civlr4zlsbHmiL8gPiBmdXphbmJvdVwgOwor5o6l5b6F6LK7ID4gc2V0dGFpaGlcIDsKK+e5iue2reaApyA+IHNlbicnaXNlaVwgOwor5omL6Kmx5rOVID4gc2h1d2Fob3VcIDsKK+S/nemkiuWcsCA+IGhveW91Y2hpXCA7CivliKnlt7Hlv4MgPiByaWtvc2hpblwgOwor54K554Gr5qCTID4gdGVua2FzZW5cIDsKK+mOlOmJseeCiSA+IHlvdWtvdXJvXCA7Civlj6/mj5vnvqQgPiBrYWthbmd1blwgOwor5Lya6K2w5aC0ID4ga2FpZ2lqb3VcIDsKK+S6uumdnuS6uiA+IG5pbnBpbmluXCA7CivoirHnsonnrqEgPiBrYWZ1bmthblwgOwor6YGO5r+A5rS+ID4ga2FnZWtpaGFcIDsKK+a6tuino+W6piA+IHlvdWthaWRvXCA7Civlj6Xoqq3ngrkgPiBrdXRvdXRlblwgOwor5o2c5p+76ZmjID4gc291c2FqaW5cIDsKK+S8gealreWMliA+IGtpZ3lvdWthXCA7CivllrbliKnnmoQgPiBlaXJpdGVraVwgOwor6KKr54G96ICFID4gaGlzYWlzaGFcIDsKK+S4jeW+k+mghiA+IGZ1anV1anVuXCA7Civlj43lsITngokgPiBoYW5zaGFyb1wgOwor5L2d5YOC55eFID4ga3VydWJ5b3VcIDsKK+mDveS8muS6uiA+IHRva2FpamluXCA7CivlkarnpoHpgZMgPiBqdWtvbmRvdVwgOwor5Y+k54mI5pysID4ga29oYW5ib25cIDsKK+a4rOWAmeaJgCA+IHNva2tvdWpvXCA7CivmtL7pgaPpmoogPiBoYWtlbnRhaVwgOwor5q2T6L+O5a60ID4ga2FuZ2VpZW5cIDsKK+aIkOWKn+ijoSA+IHNlaWtvdXJpXCA7Civlrrbluq3mrIQgPiBrYXRlaXJhblwgOwor5aSa5aSJ5pWwID4gdGFoZW5zdXVcIDsKK+eUt+aAp+e+jiA+IGRhbnNlaWJpXCA7Civpq5jmqZ/og70gPiBrb3VraW5vdVwgOwor5Lq66ZaT6IumID4gbmluZ2Vua3VcIDsKK+S4ieWRs+e3miA+IHNoYW1pc2VuXCA7Civlr7/llpznhLwgPiBzdWtpeWFraVwgOwor5ZCM56iL5bqmID4gZG91dGVpZG9cIDsKK+WlveWhqeiPjCA+IGtvdWVua2luXCA7CivpgIHmsJfnrqEgPiBzb3VraWthblwgOwor54qg54my6ICFID4gZ2lzZWlzaGFcIDsKK+iKsee0i+advyA+IGthbW9uYmFuXCA7Civpm7vlrZDljJYgPiBkZW5zaGlrYVwgOwor5bC95pyq5p2lID4gamlubWlyYWlcIDsKK+WPpeiqreazlSA+IGt1dG91aG91XCA7Civlpb3lpKnmsJcgPiBrb3V0ZW5raVwgOwor5rWE5YyW5qe9ID4gam91a2Fzb3VcIDsKK+acieWjsOmfsyA+IHl1dXNlaW9uXCA7Civlj43kvZznlKggPiBoYW5zYXlvdVwgOwor5YWo6Ieq5YuVID4gemVuamlkb3VcIDsKK+WPjeWvvua0viA+IGhhbnRhaWhhXCA7Civlh6blpbPmgKcgPiBzaG9qb3NlaVwgOwor5omL6ZaT6LODID4gdGVtYWNoaW5cIDsKK+S4gOWbnuWIhiA+IGlra2FpYnVuXCA7Civnvbnngb3ogIUgPiByaXNhaXNoYVwgOwor6LKv54Kt5omAID4gY2hvdGFuam9cIDsKK+acieS6uuWMliA+IHl1dWppbmthXCA7CivljbDosaHmtL4gPiBpbnNob3VoYVwgOwor6Kyb5ryU6ICFID4ga291ZW5zaGFcIDsKK+anjemojuWFtSA+IHNvdWtpaGVpXCA7CivpgIPpgb/ooYwgPiB0b3VoaWtvdVwgOwor5YaF54Gr6ImHID4gbmFpa2F0ZWlcIDsKK+Wcp+aQvuWZqCA+IGFzc2FrdWtpXCA7CivliKnmqKnlsYsgPiByaWtlbicneWFcIDsKK+WFieW6puioiCA+IGtvdWRva2VpXCA7CivplrLlhbXlj7AgPiBlcHBlaWRhaVwgOwor5re356iu6KqeID4ga29uc2h1Z29cIDsKK+mAj+mBjuaApyA+IHRvdWthc2VpXCA7CivkvJropovoqJggPiBrYWlrZW5raVwgOwor55u45Ly854K5ID4gc291aml0ZW5cIDsKK+ieuuWtkOmHmCA+IG5lamlrdWdpXCA7Civlh6blpbPls7AgPiBzaG9qb2hvdVwgOwor55yL6K235birID4ga2FuZ29zaGlcIDsKK+aciemggueCuSA+IHVjaG91dGVuXCA7CivkuIDnrYnmmJ8gPiBpdHRvdXNlaVwgOwor5LiL5rC06YGTID4gZ2VzdWlkb3VcIDsKK+mdnuS6uuaDhSA+IGhpbmluam91XCA7CivkuLvnvqnogIUgPiBzaHVnaXNoYVwgOwor5rS+6YGj6LuNID4gaGFrZW5ndW5cIDsKK+WGjeaPkOahiCA+IHNhaXRlaWFuXCA7Civnvo7mhI/orZggPiBiaWlzaGlraVwgOwor57eP5pys5a62ID4gc291aG9ua2VcIDsKK+W6puWkluimliA+IGRvZ2Fpc2hpXCA7CivpgaDlvoHpmoogPiBlbnNlaXRhaVwgOwor55CG5oOz5Z6LID4gcmlzb3VrZWlcIDsKK+S7ruWIhuaVsCA+IGthYnVuc3V1XCA7CivliqnmlbDoqZ4gPiBqb3N1dXNoaVwgOwor57K+566X5omAID4gc2Vpc2Fuam9cIDsKK+a2iOeBq+WZqCA+IHNob3VrYWtpXCA7CivlpJrpnaLkvZMgPiB0YW1lbnRhaVwgOwor5b2i6aq45YyWID4ga2VpZ2Fpa2FcIDsKK+asp+exs+S6uiA+IG91YmVpamluXCA7CivntYzluKvlsYsgPiBreW91aml5YVwgOwor6Kqk5aSJ5o+bID4gZ29oZW5rYW5cIDsKK+mChOS7mOmHkSA+IGthbnB1a2luXCA7CivmmanlvqHpo68gPiBiYW5nb2hhblwgOwor6IWV6Ieq5oWiID4gdWRlamltYW5cIDsKK+a1hOawtOWZqCA+IGpvdXN1aWtpXCA7CivliqnmlZnoq60gPiBqb2t5b3V5dVwgOwor55yL6K235aOrID4ga2FuZ29zaGlcIDsKK+awuOWtkOS9nCA+IGVpa29zYWt1XCA7Civlh6blpbPlnLAgPiBzaG9qb2NoaVwgOwor5Yip55So6ICFID4gcml5b3VzaGFcIDsKK+eEoeeyvuWNtSA+IG11c2VpcmFuXCA7CivnhKHplqLkv4IgPiBtdWthbmtlaVwgOwor5q2j5a2X5rOVID4gc2Vpamlob3VcIDsKK+i7jeWMu+eboyA+IGd1bicnaWthblwgOwor6K2m5LiW5a62ID4ga2Vpc2Vpa2FcIDsKK+adpeWtpuacnyA+IHJhaWdha2tpXCA7CivmmKDnlLvoqZUgPiBlaWdhaHlvdVwgOwor5om55Yik6ICFID4gaGloYW5zaGFcIDsKK+W5s+WPmeaWhyA+IGhlaWpvYnVuXCA7CivkuInph43oi6YgPiBzYW5qdXVrdVwgOwor5qih5YCj6ICFID4gbW9ob3VzaGFcIDsKK+S6iOmBuOS8miA+IHlvc2Vua2FpXCA7CivmvJTlpY/kvJogPiBlbnNvdWthaVwgOwor5LiN5rS75oCnID4gZnVrYXNzZWlcIDsKK+mWi+WPo+mDqCA+IGthaWtvdWJ1XCA7Civlj4zog7TmqZ8gPiBzb3Vkb3VraVwgOwor6aCI5byl5bGxID4gc2h1bWlzZW5cIDsKK+WBvemAoOe9qiA+IGdpem91emFpXCA7Civnp4DnlLvlrrYgPiBzaHV1Z2FrYVwgOwor5Lqk5Luj5ZOhID4ga291dGFpaW5cIDsKK+i1pOmbu+ipsSA+IGFrYWRlbndhXCA7CivmnInmnJ/liJEgPiB5dXVraWtlaVwgOwor5Y+j6Kmx5rOVID4ga291d2Fob3VcIDsKK+aIuOS4u+aoqSA+IGtvc2h1a2VuXCA7CivlhazlronlrpggPiBrb3VhbmthblwgOwor5q2v54mZ54q2ID4gc2hpZ2Fqb3VcIDsKK+S8neWjsOWZqCA+IGRlbnNlaWtpXCA7Civkv53pmbrph5EgPiBob2tlbmtpblwgOwor5oyH5pWw6YOoID4gc2hpc3V1YnVcIDsKK+ixquiPr+iIuSA+IGdvdWthc2VuXCA7CivkuLjmmpfoqJggPiBtYXJ1YW5raVwgOwor5Z+65rqW54K5ID4ga2lqdW50ZW5cIDsKK+W+jOaPtOS8miA+IGtvdWVua2FpXCA7CivnnIzorbDkvJogPiBrZW5naWthaVwgOwor6KGM5Zyo5omAID4gYW56YWlzaG9cIDsKK+WPo+iqnuaWhyA+IGtvdWdvYnVuXCA7Civlr53nhZnojYkgPiBuZXRhYmFrb1wgOwor5pat56C05aOKID4gZGFuaGFrYWlcIDsKK+ejgemJhOmJsSA+IGppdGVra291XCA7Civlhobngrrmm78gPiBlbmdhd2FzZVwgOwor55yL6K235YW1ID4ga2FuZ29oZWlcIDsKK+WWtualremDqCA+IGVpZ3lvdWJ1XCA7CivkuI3mtojljJYgPiBmdXNob3VrYVwgOwor5LiN5b6z576pID4gZnV0b2t1Z2lcIDsKK+WcsOWQuembqiA+IGppZnVidWtpXCA7CivpoIjlvKXlo4cgPiBzaHVtaWRhblwgOwor5L2Q5bmV5rS+ID4gc2FiYWt1aGFcIDsKK+mgk+eXtOawlyA+IHRvbmNoaWtpXCA7CivlpJrmlbDlhZogPiB0YXN1dXRvdVwgOwor6Ly46YCB6Ii5ID4geXVzb3VzZW5cIDsKK+aOoeayueaoqSA+IHNhaXl1a2VuXCA7CivmnaXkuJbntIAgPiByYWlzZWlraVwgOwor5bGx5rC055S7ID4gc2Fuc3VpZ2FcIDsKK+aOg+mZpOS6uiA+IHNvdWppbmluXCA7CivkuIDnrYnlnLAgPiBpdHRvdWNoaVwgOwor56iO5YuZ5a6YID4gemVpbXVrYW5cIDsKK+eci+itt+S6uiA+IGthbmdvbmluXCA7CivljYrliIfnrKYgPiBoYW5raXBwdVwgOwor5Zyn54CY5ZmoID4gYXRzdXJva2lcIDsKK+Wfuua6luazlSA+IGtpanVuaG91XCA7Civlj5forJvogIUgPiBqdWtvdXNoYVwgOwor5ris6Led5YSAID4gc29ra3lvZ2lcIDsKK+WGt+WHjeapnyA+IHJlaXRvdWtpXCA7CivnrYnot53pm6IgPiB0b3VreW9yaVwgOwor5LiN5ZCN5pWwID4gZnVtZWlzdXVcIDsKK+ippumBi+i7oiA+IHNoaXVudGVuXCA7Civnvqnli4flhbUgPiBnaXl1dWhlaVwgOwor6Kaq55S76Z2iID4gb3lhZ2FtZW5cIDsKK+aLkuWQpuaoqSA+IGt5b2hpa2VuXCA7Civkuoznlarnt5ogPiBuaWJhbnNlblwgOwor5Za25qWt6LK7ID4gZWlneW91aGlcIDsKK+ebuOS8vOW9oiA+IHNvdWppa2VpXCA7Civlj4znlJ/lhZAgPiBzb3VzZWlqaVwgOwor572554G95rCRID4gcmlzYWltaW5cIDsKK+WvhOeUn+acqCA+IHlhZG9yaWdpXCA7CivngavolqzluqsgPiBrYXlha3Vrb1wgOwor6LWk6aCt5be+ID4gYWthenVraW5cIDsKK+icpeictOW6pyA+IHRva2FnZXphXCA7CivorabloLHpn7MgPiBrZWlob3VvblwgOwor5aSn6Jyl6Jy0ID4gb290b2thZ2VcIDsKK+abtOeUn+acnyA+IGtvdXNlaWtpXCA7CivnlpHllY/mlocgPiBnaW1vbmJ1blwgOwor6I2354K65pu/ID4gbmlnYXdhc2VcIDsKK+Wcp+a/vuWZqCA+IGF0c3Vyb2tpXCA7CivohY7oh5Pngo4gPiBqaW56b3VlblwgOwor57ea57at5p2fID4gc2VuaXNva3VcIDsKK+WvhOi0iOiAhSA+IGtpem91c2hhXCA7Civlrrbluq3lhoUgPiBrYXRlaW5haVwgOwor6JC96Kqe5a62ID4gcmFrdWdva2FcIDsKK+eEoeevgOaTjSA+IG11c2Vzc291XCA7CivlrrnnlpHogIUgPiB5b3VnaXNoYVwgOwor5bGV6ZaL5ZuzID4gdGVua2FpenVcIDsKK+engeeUn+WFkCA+IHNoaXNlaWppXCA7CivlpKfmiYvnrYsgPiBvb3Rlc3VqaVwgOwor5YWs5a6a5L6hID4ga291dGVpa2FcIDsKK+awl+WIhuWxiyA+IGtpYnVuJyd5YVwgOwor5LiA562J5YW1ID4gaXR0b3VoZWlcIDsKK+S4i+awtOeuoSA+IGdlc3Vpa2FuXCA7CivmlbTmlbDmr5QgPiBzZWlzdXVoaVwgOwor56S+5YuZ5omAID4gc2hhbXVzaG9cIDsKK+mrmOWxpOmbsiA+IGtvdXNvdXVuXCA7CivluLjlpZfoqp4gPiBqb3V0b3Vnb1wgOwor6Ii55aSW5qmfID4gc2VuZ2Fpa2lcIDsKK+WPjOaal+i7iiA+IHNvdWFuc2hhXCA7Civml4XlrqLmqZ8gPiByeW9rYWtraVwgOwor6YGL5Za26ICFID4gdW4nJ2Vpc2hhXCA7CivmgaPmhI/nmoQgPiBzaGlpdGVraVwgOwor56C05aSp6I2SID4gaGF0ZW5rb3VcIDsKK+eGseW4r+WknCA+IG5ldHRhaXlhXCA7CivpgZTmiJDluqYgPiB0YXNzZWlkb1wgOwor5aSa6KeS5b2iID4gdGFrYWtrZWlcIDsKK+WFpeS8muaoqSA+IGlyaWFpa2VuXCA7CivljYPokYnnnIwgPiBjaGliYWtlblwgOwor5LqU5pyI6ZuoID4gc2FtaWRhcmVcIDsKK+aciemgguWkqSA+IHVjaG91dGVuXCA7CivmupbkvJrlk6EgPiBqdW5rYWlpblwgOwor5rC05puc5pelID4gc3VpeW91YmlcIDsKK+a4h+awtOacnyA+IGthc3N1aWtpXCA7Civnq7bppqzloLQgPiBrZWliYWpvdVwgOwor6bOp5bCP5bGLID4gaGF0b2dveWFcIDsKK+S4jeato+imliA+IGZ1c2Vpc2hpXCA7Civlm5vljYrmnJ8gPiBzaGloYW5raVwgOwor54aU6Ymx54KJID4geW91a291cm9cIDsKK+S9nOeUqOeCuSA+IHNheW91dGVuXCA7CivpgYrlnJLlnLAgPiB5dXVlbmNoaVwgOwor6LuM6YGT6Ii5ID4ga2lkb3VzZW5cIDsKK+W8geeQhuWjqyA+IGJlbnJpc2hpXCA7CivpurvphZTpioMgPiBtYXN1aWp1dVwgOwor5pyo6J665a2QID4gbW9rdW5lamlcIDsKK+atqeaVsOioiCA+IGhvc3V1a2VpXCA7CivkuLvpoYzmrYwgPiBzaHVkYWlrYVwgOwor5q2j5Lya5ZOhID4gc2Vpa2FpaW5cIDsKK+W+ruWIhuazlSA+IGJpYnVuaG91XCA7Civli5Xlk6Hku6QgPiBkb3VpbnJlaVwgOwor6Z2S55Om5Y+wID4gc2VpZ2FkYWlcIDsKK+a4oeiIueWgtCA+IHRvc2Vuam91XCA7CivmhI/orZjkuIsgPiBpc2hpa2lrYVwgOwor5L+d6K235Zu9ID4gaG9nb2tva3VcIDsKK+WQjOaAp+aEmyA+IGRvdXNlaWFpXCA7CivmsrnlnKflmaggPiB5dWF0c3VraVwgOwor54eV6Z2S5ouzID4gZW5zZWlrZW5cIDsKK+W5vOW5tOacnyA+IHlvdW5lbmtpXCA7Civosaroj6/niYggPiBnb3VrYWJhblwgOwor5Yy75Y6f55eFID4gaWdlbmJ5b3VcIDsKK+mbu+ipsee3miA+IGRlbndhc2VuXCA7Civlhrflh43luqsgPiByZWl0b3Vrb1wgOwor6YKE5LuY56iOID4ga2FucHV6ZWlcIDsKK+W8geitt+iAhSA+IGJlbmdvc2hhXCA7Civpm7voqbHntrIgPiBkZW53YW1vdVwgOwor55m75bGx6YGTID4gdG96YW5kb3VcIDsKK+mHjembu+apnyA+IGp1dWRlbmtpXCA7CivkuI3mgbDlpb0gPiBidWtha2tvdVwgOwor6Zi/5oi/6bOlID4gYWhvdWRvcmlcIDsKK+S6iOWCmeeahCA+IHlvYml0ZWtpXCA7CivmibbliqnmlpkgPiBmdWpvcnlvdVwgOwor54y/55+l5oG1ID4gc2FydWRqaWVcIDsKK+WcsOiUtemhlCA+IGppem91Z2FvXCA7CivkvZzmpa3loLQgPiBzYWd5b3ViYVwgOwor56m655u45aC0ID4ga3V1c291YmFcIDsKK+a3t+WQiOiqniA+IGtvbmdvdWdvXCA7CivlpqXljZTmoYggPiBkYWt5b3VhblwgOwor5oWw6Kyd5paZID4gaXNoYXJ5b3VcIDsKK+eEoeaKteaKlyA+IG11dGVpa291XCA7CivokYnnr4DngrkgPiBoYXNldHRlblwgOwor5LuW5YuV6KmeID4gdGFkb3VzaGlcIDsKK+acquaIkOW5tCA+IG1pc2VpbmVuXCA7Civmi5jlvJXnirYgPiBrb3VpbmpvdVwgOwor5pig55S754uCID4gZWlnYWt5b3VcIDsKK+azleiPr+e1jCA+IGhva2VreW91XCA7CivphaLmlpnnkIYgPiBzdXJ5b3VyaVwgOwor5pS/5bqc57GzID4gc2VpZnVtYWlcIDsKK+Wlvee1kOaenCA+IGtvdWtla2thXCA7CivmtLvmgKfljJYgPiBrYXNzZWlrYVwgOwor5Yqp6KiA6ICFID4gam9nb25zaGFcIDsKK+ijj+WNg+WutiA+IHVyYXNlbmtlXCA7CivoiI7liKnloZQgPiBzaGFyaXRvdVwgOwor5LiN56Wd5YSAID4gYnVzaHV1Z2lcIDsKK+mBjua4oeeahCA+IGthdG90ZWtpXCA7CivpmbboirjlrrYgPiB0b3VnZWlrYVwgOwor5L2c5qWt5ZOhID4gc2FneW91aW5cIDsKK+WFqOS4lueVjCA+IHplbnNla2FpXCA7CivlpJrmkanlt50gPiB0YW1hZ2F3YVwgOwor5b6u6Ium56yRID4gYmlrdXNob3VcIDsKK+asuueenuiAhSA+IGdpbWFuc2hhXCA7Civnq4vms5XlupwgPiByaXBwb3VmdVwgOwor6KKr54G95ZywID4gaGlzYWljaGlcIDsKK+eMm+aJk+iAhSA+IG1vdWRhc2hhXCA7CivkuI3npaXkuosgPiBmdXNob3VqaVwgOwor57WQ5p6c6KuWID4ga2Vra2Fyb25cIDsKK+S4i+awtOa6nSA+IGdlc3Vpa291XCA7CivmsLTpoqjlkYIgPiBtaXp1YnVyb1wgOwor5pa55L2N6KeSID4gaG91aWtha3VcIDsKK+mYsuWhteedgCA+IGJvdWppbmdpXCA7Civml6Loppbmg7MgPiBraXNoaWthblwgOwor5Y+j6Kqe5L2TID4ga291Z290YWlcIDsKK+W5uemDqOS8miA+IGthbmJ1a2FpXCA7CivkuqTpmpvosrsgPiBrb3VzYWloaVwgOwor5omL6ZaT5pqHID4gdGVtYWhpbWFcIDsKK+atpuWjq+mBkyA+IGJ1c2hpZG91XCA7CivprZTmlrnpmaMgPiBtYWhvdWppblwgOwor6JGh6JCE6YWSID4gYnVkb3VzaHVcIDsKK+WGt+WHjeWZqCA+IHJlaXRvdWtpXCA7Civlj4zlrZDluqcgPiBmdXRhZ296YVwgOwor6ISx5rC05qmfID4gZGFzc3Vpa2lcIDsKK+eBq+WPo+WOnyA+IGtha291Z2VuXCA7CivkvY7mrKHlhYMgPiB0ZWlqaWdlblwgOwor5Y6z5Yas5pyfID4gZ2VudG91a2lcIDsKK+S4uOirs+iomCA+IG1hcnVhbmtpXCA7CivkuI3pgIDou6IgPiBmdXRhaXRlblwgOwor5omL5Zyf55SjID4gdGVtaXlhZ2VcIDsKK+WNsemZuuimliA+IGtpa2Vuc2hpXCA7CivoiJ7ouIrlm6MgPiBidXRvdWRhblwgOwor5LiN5rG65a6aID4gZnVrZXR0ZWlcIDsKK+WbnuW4sOe3miA+IGthaWtpc2VuXCA7CivljLrmsJHnqI4gPiBrdW1pbnplaVwgOwor5L2V55Wq55uuID4gbmFuYmFubWVcIDsKK+iEseawl+awtCA+IGRha2tpc3VpXCA7CivliJHli5nmiYAgPiBrZWltdXNob1wgOwor5YGl5ZWW5a62ID4ga2VudGFua2FcIDsKK+egtOWjiuiAhSA+IGhha2Fpc2hhXCA7Civoh6rmhI/orZggPiBqaWlzaGlraVwgOwor5LiD5Y2B6LevID4gbmFuYXNvamlcIDsKK+ims+iHquWcqCA+IGthbmppemFpXCA7CivpgaDlv4PmqZ8gPiBlbnNoaW5raVwgOwor5pyx5Y2w6Ii5ID4gc2h1aW5zZW5cIDsKK+a0l+a/r+apnyA+IHNlbnRha2tpXCA7CivkuI3li5XnlKMgPiBmdWRvdXNhblwgOwor5Zm05rCX5a2UID4gZnVua2lrb3VcIDsKK+idpuWkt+adviA+IGV6b21hdHN1XCA7CivprLzliJHkuosgPiBvbmlrZWlqaVwgOwor5oSf5ZiG56ymID4ga2FudGFuZnVcIDsKK+azleWMu+WtpiA+IGhvdWlnYWt1XCA7Civps6XlsI/lsYsgPiB0b3JpZ295YVwgOwor6Ieq5Za25qWtID4gamllaWd5b3VcIDsKK+eyvumMrOaJgCA+IHNlaXJlbmpvXCA7Civpu4Toj5bokrIgPiBraXNob3VidVwgOwor5Lqc5aSn6Zm4ID4gYXRhaXJpa3VcIDsKK+WCmeiAg+ashCA+IGJpa291cmFuXCA7CivmnKrmiJDlk4EgPiBtaXNlaWhpblwgOwor54mH5omL6ZaTID4ga2F0YXRlbWFcIDsKK+S6uumWk+WRsyA+IG5pbmdlbm1pXCA7CivnhKHmhI/orZggPiBtdWlzaGlraVwgOwor5oqV6LOH5a62ID4gdG91c2hpa2FcIDsKK+S4i+awtOadvyA+IGdlc3VpaXRhXCA7CivppqzouYTlvaIgPiBiYXRlaWtlaVwgOwor5YWo6Z+z56ymID4gemVuJydvbnB1XCA7Civpq5jovJ3luqYgPiBrb3VraWRvdVwgOwor5LiN5Y+v5L61ID4gZnVrYXNoaW5cIDsKK+m7hOWPo+WFkCA+IGtvdWtvdWppXCA7CivliIbnp5HkvJogPiBidW5rYWthaVwgOwor6JyY6Jub6IacID4ga3Vtb21ha3VcIDsKK+S6i+alreWutiA+IGppZ3lvdWthXCA7CivlhaXkvJrlnLAgPiBpcmlhaWNoaVwgOwor5Zuz5pu46aSoID4gdG9zaG9rYW5cIDsKK+ijveeJiOaJgCA+IHNlaWhhbmpvXCA7CivmnbHlpKflr7ogPiB0b3VkYWlqaVwgOwor5Lit5L2N5pWwID4gY2h1dWlzdXVcIDsKK+WPguizgOiAhSA+IHNhbmdhc2hhXCA7Civmibnlh4bmm7ggPiBoaWp1bnNob1wgOwor6Iie6LiP5LyaID4gYnV0b3VrYWlcIDsKK+eQhuWMluWtpiA+IHJpa2FnYWt1XCA7CivnmbvlsbHogIUgPiB0b3phbnNoYVwgOwor5Yqp5pWZ5o6IID4gam9reW91anVcIDsKK+WIkeWLmeWumCA+IGtlaW11a2FuXCA7CivmlL/li5nlrpggPiBzZWltdWthblwgOwor5q2j576p5oSfID4gc2VpZ2lrYW5cIDsKK+WMu+iWrOWTgSA+IGl5YWt1aGluXCA7CivljJbnsqfnnYAgPiBrZXNob3VnaVwgOwor54Gr6YGU56OoID4gaGlkYXJ1bWFcIDsKK+S4jeW+ueW6lSA+IGZ1dGV0dGVpXCA7CivnlZnlrojlroUgPiBydXN1dGFrdVwgOwor5Yeh6Kmm5ZCIID4gYm9uc2hpYWlcIDsKK+S4h+atqeioiCA+IG1hbnBva2VpXCA7Civkuozmnprosp0gPiBuaW1haWdhaVwgOwor55So5rC06LevID4geW91c3Vpcm9cIDsKK+aZguioiOW6lyA+IHRva2VpdGVuXCA7Civlm7rlrprlrZAgPiBrb3RlaXNoaVwgOwor5pyJ54WZ54KtID4geXV1ZW50YW5cIDsKK+ism+a8lOS8miA+IGtvdWVua2FpXCA7Civoo4/prLzploAgPiB1cmFraW1vblwgOwor5b6h5q+N5qeYID4gb2thYXNhbWFcIDsKK+mBk+elluelniA+IGRvdXNvamluXCA7CivlkIjms5XljJYgPiBnb3Vob3VrYVwgOwor6aaW6YO95ZyPID4gc2h1dG9rZW5cIDsKK+S4ieavm+eMqyA+IG1pa2VuZWtvXCA7CivmjqLnn6XmqZ8gPiB0YW5jaGlraVwgOwor5q2754Gr5bGxID4gc2hpa2F6YW5cIDsKK+iJsuaooeanmCA+IGlyb21veW91XCA7Civns7jpm7voqbEgPiBpdG9kZW53YVwgOwor6YeN5aSn5YyWID4ganV1ZGFpa2FcIDsKK+S4ieauteebriA+IHNhbmRhbm1lXCA7Civnpa3lo4fluqcgPiBzYWlkYW56YVwgOwor5YWE5byf5a2QID4gYW5pZGVzaGlcIDsKK+mBi+WRveirliA+IHVubWVpcm9uXCA7Civmma7pgJrnp5EgPiBmdXRzdXVrYVwgOwor5LiK5Y+k5Y+yID4gam91a29zaGlcIDsKK+mgkOiyr+mHkSA+IHlvY2hva2luXCA7CivlpqXlvZPmgKcgPiBkYXRvdXNlaVwgOwor6JGh6JCE6ImyID4gYnVkb3Vpcm9cIDsKK+aOkuawtOi3ryA+IGhhaXN1aXJvXCA7CivmqKrmlq3pnaIgPiBvdWRhbm1lblwgOwor5pW057WM5qmfID4gc2Vpa2Vpa2lcIDsKK+S6i+alreWMliA+IGppZ3lvdWthXCA7CivnsKHkvZPlrZcgPiBrYW50YWlqaVwgOwor5Y+v5rq254mHID4ga2F5b3VoZW5cIDsKK+WEgOS7l+WFtSA+IGdpam91aGVpXCA7CivpmbjlsYvmoLkgPiByb2t1eWFuZVwgOwor5bqn6KuH5LyaID4gemFkYW5rYWlcIDsKK+W4huWJjeiIuSA+IGhvbWFlc2VuXCA7CivmjIfoqbHms5UgPiBzaGl3YWhvdVwgOwor5YG96YCg5ZOBID4gZ2l6b3VoaW5cIDsKK+S4luW4r+aVsCA+IHNldGFpc3V1XCA7CivkuIDlkajmnJ8gPiBpc3NodXVraVwgOwor5Lit6ICz54KOID4gY2h1dWppZW5cIDsKK+WvjOWjq+mAmiA+IGZ1aml0c3V1XCA7CivlrrblsYvnqI4gPiBrYW9rdXplaVwgOwor5qmf5YuV6ZqKID4ga2lkb3V0YWlcIDsKK+mYsueBq+e3miA+IGJvdWthc2VuXCA7CivmlZnorbfpmaIgPiBreW91Z29pblwgOwor6J665a2Q5bGxID4gbmVqaXlhbWFcIDsKK+S5s+WFkOmZoiA+IG55dXVqaWluXCA7CivohZXmmYLoqIggPiB1ZGVkb2tlaVwgOwor5pyx5Y2w54q2ID4gc2h1aW5qb3VcIDsKK+ecn+aEj+e+qSA+IHNoaW4nJ2lnaVwgOwor6YGK5oqA5aC0ID4geXV1Z2lqb3VcIDsKK+WLp+W3peWgtCA+IGthbmtvdWJhXCA7CivkuInlhqDppqwgPiBzYW5rYW5iYVwgOwor5aSp5omN5YWQID4gdGVuc2FpamlcIDsKK+mAhuiMguacqCA+IHNha2Ftb2dpXCA7Civoo5zlhYXlhbUgPiBob2p1dWhlaVwgOwor5bu66K2w6ICFID4ga2VuZ2lzaGFcIDsKK+W4uOWknOeBryA+IGpvdXlhdG91XCA7CivojYnlsYvmoLkgPiBrdXNheWFuZVwgOwor5qip5aiB6ICFID4ga2VuJydpc2hhXCA7CivnoJXlsqnmqZ8gPiBzYWlnYW5raVwgOwor6JGh6JCE57OWID4gYnVkb3V0b3VcIDsKK+eZveS6nOmkqCA+IGhha3Vha2FuXCA7Civmt7flkozmgKcgPiBrb253YXNlaVwgOwor5YyW57Kn5q6/ID4ga2V3YWlkZW5cIDsKK+WNg+WIhuavlCA+IHNlbmJ1bmhpXCA7CivmmYLoqIjlj7AgPiB0b2tlaWRhaVwgOwor5ZCM5q+N5aeJID4gZG91Ym9zaGlcIDsKK+S4iuW+l+aEjyA+IGpvdXRva3VpXCA7Civpu4TmsLTku5kgPiBraXN1aXNlblwgOwor5byx5ZGz5ZmMID4geW93YW1pc29cIDsKK+eVmeWuiOS4rSA+IHJ1c3VjaHV1XCA7CivlpInlo7DmnJ8gPiBoZW5zZWlraVwgOwor5bCP5YWQ56eRID4gc2hvdW5pa2FcIDsKK+S4ieWNgeaIuCA+IHNhbmppa2tvXCA7Civpm7vpm6LlsaQgPiBkZW5yaXNvdVwgOwor6auY6LiP5rS+ID4ga291dG91aGFcIDsKK+eQhuW3peezuyA+IHJpa291a2VpXCA7CivnhKHnpLzorJsgPiBidXJlaWtvdVwgOwor5LiA5ZGo5b+MID4gaXNzaHV1a2lcIDsKK+S4jeWNgeWIhiA+IGZ1anV1YnVuXCA7Civlk7rkubPmnJ8gPiBob255dXVraVwgOwor55+z5rK5546LID4gc2VraXl1b3VcIDsKK+WPr+mOlOeJhyA+IGtheW91aGVuXCA7CivlvqHliKnnm4ogPiBnb3JpeWFrdVwgOwor5oqV5pu45a62ID4gdG91c2hva2FcIDsKK+mBuueVmeWTgSA+IGlyeXV1aGluXCA7CivpgbrkvJ3nl4UgPiBpZGVuYnlvdVwgOwor5o+a54Kt5qmfID4geW91dGFua2lcIDsKK+mdnuWkieaPmyA+IGhpaGVua2FuXCA7CivmlLnmraPmoYggPiBrYWlzZWlhblwgOwor6auY6auY5bqmID4ga291a291ZG9cIDsKK+e1jOeUo+WppiA+IGtlaXNhbnB1XCA7CivotaToo7joo7ggPiBzZWtpcmFyYVwgOwor5re35ZCI5qmfID4ga29uZ291a2lcIDsKK+WvhOi0iOWTgSA+IGtpem91aGluXCA7CivlpJzooYzmgKcgPiB5YWtvdXNlaVwgOwor6ZG95a2U5qmfID4gc2Fua291a2lcIDsKK+WJjeihm+a0viA+IHplbicnZWloYVwgOwor5pyq5rG6566XID4gbWlrZXNzYW5cIDsKK+S4u+imgemDqCA+IHNodXlvdWJ1XCA7Civpgb/lr5LlnLAgPiBoaWthbmNoaVwgOwor5rC05Z6i6ZuiID4gbWl6dWdvcmlcIDsKK+WnlOiol+eUnyA+IGl0YWt1c2VpXCA7CivorabloLHmqZ8gPiBrZWlob3VraVwgOwor5rip572o5rOVID4gb24nJ2FucG91XCA7Civlr77lv5zniYggPiB0YWlvdWJhblwgOwor5ZaH5Zib5pWZID4gcmFtYWt5b3VcIDsKK+mBuueVmeWIhiA+IGlyeXV1YnVuXCA7CivmmIbluIPojLYgPiBrb25idWNoYVwgOwor5LmX566X5ZmoID4gam91emFua2lcIDsKK+iRrOWEgOekviA+IHNvdWdpc2hhXCA7CivliKTmpJzkuosgPiBoYW5rZW5qaVwgOwor54m555Ww54K5ID4gdG9rdWl0ZW5cIDsKK+S/nemZuuWxiyA+IGhva2VuJyd5YVwgOwor5LiN6YO95ZCIID4gZnV0c3Vnb3VcIDsKK+aJgOaMgemHkSA+IHNob2ppa2luXCA7CivomY7msrPosZogPiB0b3JhZnVndVwgOwor5oqA6IO96ICFID4gZ2lub3VzaGFcIDsKK+aKl+itsOaWhyA+IGtvdWdpYnVuXCA7Civml6Loo73lk4EgPiBraXNlaWhpblwgOwor5Z+656SO55qEID4ga2lzb3Rla2lcIDsKK+iynee0sOW3pSA+IGthaXphaWt1XCA7Civpu5Lnmb7lkIggPiBrdXJveXVyaVwgOwor6Iy26I+T5a2QID4gY2hhZ2FzaGlcIDsKK+WQpuWumuaWhyA+IGhpdGVpYnVuXCA7CivlvIHorbflo6sgPiBiZW5nb3NoaVwgOwor5omL6KOP5YmjID4gc2h1cmlrZW5cIDsKK+mKgOaZguioiCA+IGdpbmRva2VpXCA7CivkuInpgKPnrKYgPiBzYW5yZW5wdVwgOwor5bCP5YiH5a2QID4ga29raXJpa29cIDsKK+W9ouiAjOS4iiA+IGtlaWppam91XCA7CivmkK3kuZflk6EgPiB0b3Vqb3VpblwgOwor5LiW55WM6KazID4gc2VrYWlrYW5cIDsKK+aOouefpeWZqCA+IHRhbmNoaWtpXCA7CivlgInluqvnlaogPiBzb3Vrb2JhblwgOwor5paH56eR57O7ID4gYnVua2FrZWlcIDsKK+iDveaWh+WutiA+IG5vdWJ1bmthXCA7CivlvIHorbflm6MgPiBiZW5nb2RhblwgOwor6YqA5LiW55WMID4gZ2luc2VrYWlcIDsKK+aZrumBjeaApyA+IGZ1aGVuc2VpXCA7Civlj6/murbmgKcgPiBrYXlvdXNlaVwgOwor5YyI54mZ5YipID4gaGFuZ2FyaWlcIDsKK+eMv+ecn+S8vCA+IHNhcnVtYW5lXCA7CivnjKrlj6PmiY0gPiBjaG9rb3phaVwgOwor6Yuz54mp5birID4gaW1vbm9zaGlcIDsKK+eEoemJhOegsiA+IG11dGVwcG91XCA7CivlkIzliIbmr40gPiBkb3VidW5ib1wgOwor5pyq5raI5YyWID4gbWlzaG91a2FcIDsKK+W6g+adseiqniA+IGthbnRvbmdvXCA7CivkuIDnp4HkurogPiBpc3NoaWppblwgOwor5ryi6JS16KqeID4ga2Fuem91Z29cIDsKK+S6jOS6uuebriA+IGZ1dGFyaW1lXCA7Civlr4zlo6vntbkgPiBmdWppZ2ludVwgOwor6IKb6ZaA56eRID4ga291bW9ua2FcIDsKK+mdmembu+awlyA+IHNlaWRlbmtpXCA7Civljp/li5XmqZ8gPiBnZW5kb3VraVwgOwor5Lm+6Ii55rigID4ga2FuZG9ra3VcIDsKK+m8k+WQueiAhSA+IGtvc3Vpc2hhXCA7CivlpKflkoznha4gPiB5YW1hdG9uaVwgOwor6Iy26YGT5YW3ID4gY2hhZG91Z3VcIDsKK+aOkuawl+euoSA+IGhhaWtpa2FuXCA7CivlvZPkuovogIUgPiB0b3VqaXNoYVwgOwor5aKT6KqM6YqYID4gYm9zaGltZWlcIDsKK+efreawtOi3ryA+IHRhbnN1aXJvXCA7CivllqvojLblupcgPiBraXNzYXRlblwgOwor5pmC6ZaT5bivID4gamlrYW50YWlcIDsKK+eEoeawtOmFuCA+IG11c3Vpc2FuXCA7CivnoLTpmLLms5UgPiBoYWJvdWhvdVwgOwor5ZCI5q2T5pyoID4gbmVtdW5va2lcIDsKK+iBluatjOmaiiA+IHNlaWthdGFpXCA7CivljbDntJnnqI4gPiBpbnNoaXplaVwgOwor5oyH5o+u6ICFID4gc2hpa2lzaGFcIDsKK+aWh+aIv+WFtyA+IGJ1bmJvdWd1XCA7Civkv53nrqHph5EgPiBob2thbmtpblwgOwor5pyA5aSa5pWwID4gc2FpdGFzdXVcIDsKK+S4jemAj+aYjiA+IGZ1dG91bWVpXCA7CivmoL3ln7nmiYAgPiBzYWliYWlqb1wgOwor5p6X5qqO6YWSID4gcmluZ29zaHVcIDsKK+avjee0sOiDniA+IGJvc2FpYm91XCA7Civlpb3miZPogIUgPiBrb3VkYXNoYVwgOwor5YaG562S5b2iID4gZW50b3VrZWlcIDsKK+aRgumWouWutiA+IHNla2thbmtlXCA7CivmraPopo/ou40gPiBzZWlraWd1blwgOwor5bi45aWX5Y+lID4gam91dG91a3VcIDsKK+acquaxuua4iCA+IG1pa2Vzc2FpXCA7CivntYPmpb3lmaggPiBnZW5nYWtraVwgOwor57SN5oi46ImyID4gbmFuZG9pcm9cIDsKK+mdnue3muW9oiA+IGhpc2Vua2VpXCA7CivpoqjlkYLph5wgPiBmdXJvZ2FtYVwgOwor5byB6K235Lq6ID4gYmVuZ29uaW5cIDsKK+mOruWuiOW6nCA+IGNoaW5qdWZ1XCA7CivkuIDlvLXnvoUgPiBpdGNob3VyYVwgOwor5a2Q5Lya56S+ID4ga29nYWlzaGFcIDsKK+S4jeWHjea4ryA+IGZ1dG91a291XCA7CivljbXloZTloLQgPiByYW50b3ViYVwgOwor5Lit5aSu6YOoID4gY2h1dW91YnVcIDsKK+S4jeWHjea2siA+IGZ1dG91ZWtpXCA7CivlpKnnp6TluqcgPiB0ZW5iaW56YVwgOwor5Y2x6Zm65oCnID4ga2lrZW5zZWlcIDsKK+S4jeWHjea1tyA+IGZ1dG91a2FpXCA7CivnmbvlsbHluL0gPiB0b3phbmJvdVwgOwor54WO6LGG6IWQID4gaXJpZG91ZnVcIDsKK+WIuOWjsuapnyA+IGtlbmJhaWtpXCA7CivmmYLplpPlpJYgPiBqaWthbmdhaVwgOwor5rCX5YCZ5bivID4ga2lrb3V0YWlcIDsKK+alveWZqOW6lyA+IGdha2tpdGVuXCA7CivkuI3liIbmmI4gPiBmdWJ1bm1laVwgOwor5q2j6Zu75rCXID4gc2VpZGVua2lcIDsKK+acrOmHkeW6qyA+IGhvbmtpbmtvXCA7Civlj6/pjpTmgKcgPiBrYXlvdXNlaVwgOwor6ZuE5byB5a62ID4geXV1YmVua2FcIDsKK+S7mOW4r+eKryA+IGZ1dGFpaGFuXCA7Civopb/mtIvnooEgPiBzZWl5b3Vnb1wgOwor5oim5LqJ5b6MID4gc2Vuc291Z29cIDsKK+aVj+iFleWutiA+IGJpbndhbmthXCA7CivkuK3ku6XkuIogPiBjaHV1aWpvdVwgOwor6auY5LiL6aeEID4gdGFrYWdldGFcIDsKK+mdnuWjsuWTgSA+IGhpYmFpaGluXCA7CivkvZXku6Pnm64gPiBuYW5kYWltZVwgOwor6auY5p6257eaID4ga291a2FzZW5cIDsKK+awtOmdouS4iyA+IHN1aW1lbmthXCA7Civnsr7msrnmiYAgPiBzZWl5dXNob1wgOwor5p2x6KW/5bGLID4gdG91emFpeWFcIDsKK+mKheeJiOeUuyA+IGRvdWhhbmdhXCA7Civngorpo6/lmaggPiBzdWloYW5raVwgOwor5YWD5bil5bqcID4gZ2Vuc3VpZnVcIDsKK+mzpeS5i+W3oyA+IHRvcmlub3N1XCA7CivljLvnmYLou4ogPiBpcnlvdXNoYVwgOwor54m555Ww5oCnID4gdG9rdWlzZWlcIDsKK+WGrOiHs+e3miA+IHRvdWppc2VuXCA7Civnqb/lrZTmqZ8gPiBzZW5rb3VraVwgOwor54Sh6JOL6LuKID4gbXVnYWlzaGFcIDsKK+aKteaKl+WZqCA+IHRlaWtvdWtpXCA7CivokrjmsJfoiLkgPiBqb3VraXNlblwgOwor6Z2e6Kix5a65ID4gaGlreW95b3VcIDsKK+mBoOi/keazlSA+IGVua2luaG91XCA7Civku67lrprms5UgPiBrYXRlaWhvdVwgOwor5re35ZCI5ZmoID4ga29uZ291a2lcIDsKK+ilv+a0i+eUuyA+IHNlaXlvdWdhXCA7CivpgZTno6jlv4wgPiBkYXJ1bWFraVwgOwor55Wz5oiQ6KqeID4gam91c2VpZ29cIDsKK+aAquS6i+S7tiA+IGthaWppa2VuXCA7CivmiYDmjIHogIUgPiBzaG9qaXNoYVwgOwor5pOs5Lq65rOVID4gZ2lqaW5ob3VcIDsKK+a6luWkp+aJiyA+IGp1bicnb290ZVwgOwor5Zue6Lui5qmfID4ga2FpdGVua2lcIDsKK+WPr+WTgOebuCA+IGthd2Fpc291XCA7CivkuqTpmpvlrrYgPiBrb3VzYWlrYVwgOwor6Zui5Lmz5pyfID4gcmlueXV1a2lcIDsKK+ejgeaAp+WxpCA+IGppc2Vpc291XCA7CivotorlhqzpmoogPiBldHRvdXRhaVwgOwor6K2c6Z2i5Y+wID4gZnVtZW5kYWlcIDsKK+S7ruWwj+WxiyA+IGthcmlnb3lhXCA7Civnm67oq5boposgPiBtb2t1cm9taVwgOwor5LuZ6Iqx57SZID4gc2Vua2FzaGlcIDsKK+a8lOeul+WtkCA+IGVuemFuc2hpXCA7CivmnInpmZDlgIsgPiB5dXVnZW5rb1wgOwor5oi46Zqc5a2QID4gdG9zaG91amlcIDsKK+WPr+mNm+aApyA+IGthdGFuc2VpXCA7CivlpKrpvJPliKQgPiB0YWlrb2JhblwgOwor5rW35Z2K5Li7ID4gdW1pYm91enVcIDsKK+m7jemtmuWtkCA+IGtpYmluYWdvXCA7CivllrbmnpfnvbIgPiBlaXJpbnNob1wgOwor5pmu6L665oCnID4gZnVoZW5zZWlcIDsKK+WbuuacieWApCA+IGtveXV1Y2hpXCA7CivpgbrkvJ3lraYgPiBpZGVuZ2FrdVwgOwor6IKy56iu5omAID4gaWt1c2h1am9cIDsKK+mHkemNjemHkSA+IGtpbm1la2tpXCA7CivpvLvpoqjpgqogPiBoYW5ha2F6ZVwgOwor5Y+C5LqL5a6YID4gc2FuamlrYW5cIDsKK+ebuOirh+aJgCA+IHNvdWRhbmpvXCA7CivnhKHnqI7lk4EgPiBtdXplaWhpblwgOwor5b+c562U6IO9ID4gb3V0b3Vub3VcIDsKK+aknOWVj+aJgCA+IGtlbm1vbmpvXCA7CivlsqHloLTmiYAgPiBva2FiYXNob1wgOwor5Zyw6JS15bCKID4gaml6b3Vzb25cIDsKK+epuuS4lui+niA+IGthcmFzZWppXCA7CivooajlhbflsYsgPiBoeW91Z3V5YVwgOwor5byU5oWw6YeRID4gY2hvdWlraW5cIDsKK+WIneeUo+WppiA+IHNob3NhbnB1XCA7CivmmpfoqJjniakgPiBhbmtpbW9ub1wgOwor6bq76YWU5YmkID4gbWFzdWl6YWlcIDsKK+iXquWMu+iAhSA+IHlhYnVpc2hhXCA7CivkvZXmmYLpoIMgPiBpdHN1Z29yb1wgOwor5LqM576p55qEID4gbmlnaXRla2lcIDsKK+mbgeearue0mSA+IGdhbnBpc2hpXCA7Civml6XlkozoposgPiBoaXlvcmltaVwgOwor56S+5Lya6YOoID4gc2hha2FpYnVcIDsKK+WIpeS4lueVjCA+IGJlc3Nla2FpXCA7CivnhKHlkI3msI8gPiBtdW1laXNoaVwgOwor6ZuH5YKt6ICFID4ga295b3VzaGFcIDsKK+e1oue3nuWtkCA+IGF5YWRvbnN1XCA7CivmuKbnirbmlocgPiBrYWpvdW1vblwgOwor6Ieq5YuV6LuKID4gamlkb3VzaGFcIDsKK+mZpOiNieWJpCA+IGpvc291emFpXCA7CivkuI3lhazmraMgPiBmdWtvdXNlaVwgOwor6ZeY5oqA5aC0ID4gdG91Z2lqb3VcIDsKK+S4u+iomOaGtiA+IHNodWtpb2t1XCA7CivpvLvkuIvplbcgPiBiaWthY2hvdVwgOwor5pyA5aSn5YyWID4gc2FpZGFpa2FcIDsKK+mYsueCjuWJpCA+IGJvdWVuemFpXCA7CivmurbpibHngokgPiB5b3Vrb3Vyb1wgOwor5L2V5pmC6ZaTID4gbmFuamlrYW5cIDsKK+ezu+e1seaouSA+IGtlaXRvdWp1XCA7CivlvqHoh6rouqsgPiBnb2ppc2hpblwgOwor5LiK6I+T5a2QID4gam91Z2FzaGlcIDsKK+iiq+a4m+aVsCA+IGhpZ2Vuc3V1XCA7CivmmJ/mnaHml5cgPiBzZWlqb3VraVwgOwor55aO5rC05oCnID4gc29zdWlzZWlcIDsKK+iHquayu+aoqSA+IGppY2hpa2VuXCA7CivpgK7mjZXogIUgPiB0YWlob3NoYVwgOwor5LqM6aCt562LID4gbml0b3VraW5cIDsKK+e0oOa1quS6uiA+IHN1cm91bmluXCA7Civnp4vloLTmiYAgPiBha2liYXNob1wgOwor6Ii554Gr5LqLID4gZnVuYWthamlcIDsKK+iCsueoruWutiA+IGlrdXNodWthXCA7CivmraPoqrLlpJYgPiBzZWlrYWdhaVwgOwor54WJ55Om5aGAID4gcmVuZ2FiZWlcIDsKK+iLseaWh+azlSA+IGVpYnVucG91XCA7CivmnKrmsbrlrpogPiBtaWtldHRlaVwgOwor6aaW6ISz6YOoID4gc2h1bm91YnVcIDsKK+WBpeW6t+e+jiA+IGtlbmtvdWJpXCA7CivkuKHorbDpmaIgPiByeW91Z2lpblwgOwor5oSb5ZSx5q2MID4gYWlzaG91a2FcIDsKK+S6jOacrOajkiA+IG5paG9uYm91XCA7CivpnZLnianlsYsgPiBhb21vbm95YVwgOwor5Luu5a6a5b2iID4ga2F0ZWlrZWlcIDsKK+iHquWLleipniA+IGppZG91c2hpXCA7Civkvr/lrpzkuIogPiBiZW5naWpvdVwgOwor55Sw6IiO6aKoID4gaW5ha2FmdXVcIDsKK+acneW+oemjryA+IGFzYWdvaGFuXCA7CivmjIfmj67mqKkgPiBzaGlraWtlblwgOwor6Kit6KiI5ZuzID4gc2Vra2VpenVcIDsKK+mDqOWkluiAhSA+IGJ1Z2Fpc2hhXCA7CivokazlhIDloLQgPiBzb3VnaWpvdVwgOwor56OB5oCn5L2TID4gamlzZWl0YWlcIDsKK+mKgOacrOS9jSA+IGdpbmhvbicnaVwgOwor5pS/5YWa5ZOhID4gc2VpdG91aW5cIDsKK+WvvuW/nOWApCA+IHRhaW91Y2hpXCA7Civou43oiabml5cgPiBndW5rYW5raVwgOwor5LqM5LmX5qC5ID4gbmlqb3Vrb25cIDsKK+aMh+aPruajkiA+IHNoaWtpYm91XCA7Civmr43lm73oqp4gPiBib2tva3Vnb1wgOwor55S755So57SZID4gZ2F5b3VzaGlcIDsKK+aknOa4qeWZqCA+IGtlbicnb25raVwgOwor6aeG5r2c6ImHID4ga3VzZW50ZWlcIDsKK+WgleiDjue9qiA+IGRhdGFpemFpXCA7Civno4HmsJflraYgPiBqaWtpZ2FrdVwgOwor5oeQ54KJ54GwID4ga2Fpcm9iYWlcIDsKK+imgeazqOaEjyA+IHlvdWNodXVpXCA7CivliJ3nlJ/lhZAgPiBzaG9zZWlqaVwgOwor5LiN6a6u5piOID4gZnVzZW5tZWlcIDsKK+Wkqem1nue1qCA+IGJpcm91ZG91XCA7Civoo73ns5bmiYAgPiBzZWl0b3Vqb1wgOwor5YWI6aeG6ICFID4gc2Vua3VzaGFcIDsKK+WKqeaIkOmHkSA+IGpvc2Vpa2luXCA7CivmuKHmnaXkurogPiB0b3JhaWppblwgOwor6YCf6KiY6ICFID4gc29ra2lzaGFcIDsKK+iJpui8ieapnyA+IGthbnNhaWtpXCA7CivnhKHlkI3mjIcgPiBtdW1laXNoaVwgOwor6KO957KJ5qmfID4gc2VpZnVua2lcIDsKK+S5seWxpOmbsiA+IHJhbnNvdXVuXCA7Civlj4LkuovkvJogPiBzYW5qaWthaVwgOwor5o6S5rCX5byBID4gaGFpa2liZW5cIDsKK+ato+e1sea0viA+IHNlaXRvdWhhXCA7Civoo5zkvZDlvbkgPiBob3NheWFrdVwgOwor5pyq6YWN5b2TID4gbWloYWl0b3VcIDsKK+aYr+mdnuWFsSA+IHplaGl0b21vXCA7CivmnKrliIrooYwgPiBtaWthbmtvdVwgOwor5p6i5qmf5Y2/ID4gc3V1a2lrZWlcIDsKK+acqumBgue9qiA+IG1pc3VpemFpXCA7CivmlofljJbosqEgPiBidW5rYXphaVwgOwor5q2m6KOF6Ii5ID4gYnVzb3VzZW5cIDsKK+iomOiAheWboyA+IGtpc2hhZGFuXCA7CivlvqHnlKjpgrggPiBnb3lvdXRlaVwgOwor5b6h5YWI5qOSID4gb3Nha2lib3VcIDsKK+WumuavlOS+iyA+IHRlaWhpcmVpXCA7Civlr4zlo6vlt50gPiBmdWppa2F3YVwgOwor55Sj5Y215pyfID4gc2FucmFua2lcIDsKK+WIhuebuOapnyA+IGJ1bnNvdWtpXCA7CivkuIrlsaTpm7IgPiBqb3Vzb3V1blwgOwor5LiJ5qyh5YWDID4gc2FuamlnZW5cIDsKK+e+pOmmrOecjCA+IGd1bm1ha2VuXCA7CivlhbXnq5npg6ggPiBoZWl0YW5idVwgOwor5LiN5YWs5bmzID4gZnVrb3VoZWlcIDsKK+WJjem8u+e3kiA+IG1hZWhhbmFvXCA7CivkuI3lh43liaQgPiBmdXRvdXphaVwgOwor54mp55yf5Ly8ID4gbW9ub21hbmVcIDsKK+mBiuatqemBkyA+IHl1dWhvZG91XCA7Civlj6/lk4Dmg7MgPiBrYXdhaXNvdVwgOwor56if6K2w5pu4ID4gcmluZ2lzaG9cIDsKK+eEoeWItumZkCA+IG11c2VpZ2VuXCA7CivkvZPogrLlrrYgPiB0YWlpa3VrYVwgOwor5YiG5bKQ6aeFID4gYnVua2lla2lcIDsKK+WMu+eZgueUqCA+IGlyeW91eW91XCA7CivpgK7mjZXnirYgPiB0YWlob2pvdVwgOwor6YGO5Y675bizID4ga2Frb2Nob3VcIDsKK+apn+WLleaApyA+IGtpZG91c2VpXCA7CivnhrHpoqjngokgPiBuZXBwdXVyb1wgOwor5q2p6KGM6ICFID4gaG9rb3VzaGFcIDsKK+WGhumMkOW9oiA+IGVuc3Vpa2VpXCA7Civlrojpiq3lpbQgPiBzaHVzZW5kb1wgOwor6YGT5YyW5birID4gZG91a2VzaGlcIDsKK+S4i+iFuemDqCA+IGthZnVrdWJ1XCA7Civlj43mlL/lupwgPiBoYW5zZWlmdVwgOwor5Zue6Lui5YSAID4ga2FpdGVuZ2lcIDsKK+S4iuiNieWxpSA+IHV3YXpvdXJpXCA7CivnsbPkuIrpmaIgPiBiZWlqb3VpblwgOwor5LiA5biz576FID4gaXRjaG91cmFcIDsKK+acneeoveWPpCA+IGFzYWdlaWtvXCA7Civoo73nsonmiYAgPiBzZWlmdW5qb1wgOwor6KKr5rK76ICFID4gaGljaGlzaGFcIDsKK+WurueUsOWutiA+IG1peWF0YWtlXCA7Civov5HooZvlhbUgPiBrb25vZWhlaVwgOwor5bKp5omL55yMID4gaXdhdGVrZW5cIDsKK+mAo+maiuaXlyA+IHJlbnRhaWtpXCA7CivnrqHmpb3lmaggPiBrYW5nYWtraVwgOwor6Kyd5oGp5LyaID4gc2hhb25rYWlcIDsKK+mkiuicguWutiA+IHlvdWhvdWthXCA7CivkupTnt5rntJkgPiBnb3NlbnNoaVwgOwor5bmz55Sf552AID4gaGVpemVpZ2lcIDsKK+apn+W4huiIuSA+IGtpaGFuc2VuXCA7CivpnZ7mjpLmsLQgPiBoaWhhaXN1aVwgOwor552A55Wq5Y+3ID4ga2liYW5nb3VcIDsKK+S4jeWAq+e9qiA+IGZ1cmluemFpXCA7Civpo7TntLDlt6UgPiBhbWV6YWlrdVwgOwor5YG95Ly855eHID4gZ2lqaXNob3VcIDsKK+Wkp+W6g+mWkyA+IG9vaGlyb21hXCA7Civpgb/pm6PogIUgPiBoaW5hbnNoYVwgOwor5a6a5bi45rOiID4gdGVpam91aGFcIDsKK+aMh+aPruWumCA+IHNoaWtpa2FuXCA7Civku5jlsZ7oqp4gPiBmdXpva3Vnb1wgOwor5bm05Lya6LK7ID4gbmVua2FpaGlcIDsKK+aVheiyt+iAhSA+IGtvYmFpc2hhXCA7CivkupTlpKfmtIsgPiBnb2RhaXlvdVwgOwor54+q6Je75ZyfID4ga2Vpc291ZG9cIDsKK+S6uuWQjeewvyA+IGppbm1laWJvXCA7CivmjpLmsJflj6MgPiBoYWlraWtvdVwgOwor6YG/5aaK5rOVID4gaGluaW5ob3VcIDsKK+iQjOacqOiJsiA+IG1vZWdpaXJvXCA7CivnibnkvqHlk4EgPiB0b2trYWhpblwgOwor5o+a5oqX5q+UID4geW91a291aGlcIDsKK+mbh+eUqOiAhSA+IGtveW91c2hhXCA7Civovp7mm7jpoZ4gPiBqaXNob3J1aVwgOwor5aSn5b6A55SfID4gZGFpb3Vqb3VcIDsKK+i/vei1t+iotCA+IHRzdWlraXNvXCA7CivpgY7ljYrmlbAgPiBrYWhhbnN1dVwgOwor5a6J5oGv5pelID4gYW5zb2t1YmlcIDsKK+WGjea1ruS4iiA+IHNhaWZ1am91XCA7Civlm7Pmm7jliLggPiB0b3Nob2tlblwgOwor55m66LW35Lq6ID4gaG9ra2luaW5cIDsKK+mBk+WFt+irliA+IGRvdWd1cm9uXCA7CivliIbnm7jlv5wgPiBidW5zb3VvdVwgOwor56uL5YCZ6KOcID4gcmlra291aG9cIDsKK+mBv+aakeWcsCA+IGhpc2hvY2hpXCA7CivmjqXpqqjmnKggPiBuaXdhdG9rb1wgOwor56S+5Lya56eRID4gc2hha2Fpa2FcIDsKK+S4iuapn+WrjCA+IGpvdWtpZ2VuXCA7CivkuqTmj5vmiYAgPiBrb3VrYW5qb1wgOwor5Zac5q2M5YqHID4ga2lrYWdla2lcIDsKK+a3u+WKoOWJpCA+IHRlbmthemFpXCA7CivmnKrlvqnlk6EgPiBtaWZ1a3VpblwgOwor6KyZ6YGc6KqeID4ga2Vuc29uZ29cIDsKK+acquWHpue9riA+IG1pc2hvY2hpXCA7CivlnLDlvaLlm7MgPiBjaGlrZWl6dVwgOwor5pyq55+l5pWwID4gbWljaGlzdXVcIDsKK+WFq+a9rui3ryA+IHlhc2hpb2ppXCA7Civku6PnkIbogIUgPiBkYWlyaXNoYVwgOwor6LuN5Luk6YOoID4gZ3VucmVpYnVcIDsKK+aoquaWh+WtlyA+IHlva29tb2ppXCA7CivlpKrlj6Tku6MgPiB0YWlrb2RhaVwgOwor5bm+5L2V5a2mID4ga2lrYWdha3VcIDsKK+ilv+a0i+WMliA+IHNlaXlvdWthXCA7CivliJHkvZnogIUgPiBrZWl5b3NoYVwgOwor5rih5LiW5Lq6ID4gdG9zZWluaW5cIDsKK+e+hemHneWEgCA+IHJhc2hpbmdpXCA7CivlrZDpn7PnvqQgPiBzaGlpbmd1blwgOwor5pqX6Ki85YyWID4gYW5zaG91a2FcIDsKK+a7kei1sOi3ryA+IGthc3NvdXJvXCA7Civoo73lm7Pmnb8gPiBzZWl6dWJhblwgOwor55qH57Wx6K2cID4ga291dG91ZnVcIDsKK+eQhuWtpumDqCA+IHJpZ2FrdWJ1XCA7Civoi7Hoqp7lob4gPiBlaWdvanVrdVwgOwor5oKy5Zac5YqHID4gaGlraWdla2lcIDsKK+S/neeuoeaelyA+IGhva2FucmluXCA7Civlho3mraboo4UgPiBzYWlidXNvdVwgOwor6LWk6Jy76JuJID4gYWthdG9uYm9cIDsKK+S6iOmljOS8miA+IHlvc2Vua2FpXCA7CivnhKHovrrpmpsgPiBtdWhlbnphaVwgOwor5LiN6Ieq54S2ID4gZnVzaGl6ZW5cIDsKK+iFjuS4jeWFqCA+IGppbmZ1emVuXCA7CivlrrTkvJrloLQgPiBlbmthaWpvdVwgOwor57WM5LiW5a62ID4ga2Vpc2Vpa2FcIDsKK+S4jeS/oeiAhSA+IGZ1c2hpbmphXCA7CivljZjmnKzkvY0gPiB0YW5ob24nJ2lcIDsKK+WGhumMkOWPsCA+IGVuc3VpZGFpXCA7Civlm6DmnpzogIUgPiBpbmdhbW9ub1wgOwor5LiN5L+h576pID4gZnVzaGluZ2lcIDsKK+i7jeS6i+mdoiA+IGd1bmppbWVuXCA7CivmgZLmsrPmspkgPiBnb3VnYXNoYVwgOwor5Ym15qGI6ICFID4gc291YW5zaGFcIDsKK+iHquayu+S9kyA+IGppY2hpdGFpXCA7CivnnYDlsLrlnLAgPiBraWpha3VqaVwgOwor5b6M5Y2K5pyfID4ga291aGFua2lcIDsKK+iHquayu+S8miA+IGppY2hpa2FpXCA7CivkvqHlgKToprMgPiBrYWNoaWthblwgOwor6KW/6YGK6KiYID4gc2VpeXV1a2lcIDsKK+W5tOS7o+iomCA+IG5lbmRhaWtpXCA7CivmhJ/mg4XlrrYgPiBrYW5qb3VrYVwgOwor5paH5YyW56WtID4gYnVua2FzYWlcIDsKK+WkieaPm+WZqCA+IGhlbmthbmtpXCA7CivkuJbnlYzlj7IgPiBzZWthaXNoaVwgOwor5Y+X57K+5Y21ID4ganVzZWlyYW5cIDsKK+e3j+aMh+aPriA+IHNvdXNoaWtpXCA7CivlubTnlLLmlpAgPiB0b3NoaWdhaVwgOwor5LiN5YWF5YiGID4gZnVqdXVidW5cIDsKK+azpeS7leWQiCA+IGRvcm9qaWFpXCA7CivmuIXlrZDpn7MgPiBzZWlzaGlpblwgOwor5LqM5pyf5L2cID4gbmlraXNha3VcIDsKK+aoque0i+etiyA+IG91bW9ua2luXCA7CivpgYvli5XnlYwgPiB1bmRvdWthaVwgOwor5pyq55m66KaLID4gbWloYWtrZW5cIDsKK+WBtuWDj+WMliA+IGd1dXpvdWthXCA7Civoo5zogbTlmaggPiBob2Nob3VraVwgOwor6Iux6Kqe5YqHID4gZWlnb2dla2lcIDsKK+mbu+eul+apnyA+IGRlbnNhbmtpXCA7Civlho3lkJ/lkbMgPiBzYWlnaW5taVwgOwor5YaG6YyQ5L2TID4gZW5zdWl0YWlcIDsKK+S6iOmknuS8miA+IHlvc2Vua2FpXCA7CivpnZLlpKnkupUgPiBhb3RlbmpvdVwgOwor6Z2e5oim6KuWID4gaGlzZW5yb25cIDsKK+acqueZuuihjCA+IG1paGFra291XCA7Civnm7jloLTluKsgPiBzb3ViYXNoaVwgOwor5Y+k5oim5aC0ID4ga29zZW5qb3VcIDsKK+S4ieeVs+e0gCA+IHNhbmpvdWtpXCA7Civlpb3mhI/nmoQgPiBrb3VpdGVraVwgOwor5b6h6aaz6LWwID4gZ29jaGlzb3VcIDsKK+aJtumkiuiAhSA+IGZ1eW91c2hhXCA7CivljYHlrZfou40gPiBqdXVqaWd1blwgOwor5oyJ5omL56S8ID4gYW5zaHVyZWlcIDsKK+WQjOS9jeinkiA+IGRvdWlrYWt1XCA7CivovKrou6LmqZ8gPiByaW50ZW5raVwgOwor5Y6t5Lq66ICFID4gZW5qaW5zaGFcIDsKK+eEoemFjeW9kyA+IG11aGFpdG91XCA7Civlr4zoo5XnqI4gPiBmdXl1dXplaVwgOwor6YGO5Yq05q27ID4ga2Fyb3VzaGlcIDsKK+e0heihm+WFtSA+IGtvdWVpaGVpXCA7CivnrqHnkIbogIUgPiBrYW5yaXNoYVwgOwor5aSc5ZWG5Lq6ID4geW9ha2luZG9cIDsKK+iIjOS4i+iFuiA+IHpla2thc2VuXCA7CivmiYDmjIHlk4EgPiBzaG9qaWhpblwgOwor57SA6KGM5paHID4ga2lrb3VidW5cIDsKK+eBq+WxseeBsCA+IGthemFuYmFpXCA7CivpqI7lo6vpgZMgPiBraXNoaWRvdVwgOwor5Ymw5L2Z6YeRID4gam91eW9raW5cIDsKK+ixiuawtOacnyA+IGhvdXN1aWtpXCA7CivkvY7og73lhZAgPiB0ZWlub3VqaVwgOwor5biw57SN5rOVID4ga2lub3Vob3VcIDsKK+eNheWtkOW6pyA+IHNoaXNoaXphXCA7CivkuqTmj5vlmaggPiBrb3VrYW5raVwgOwor5LiW55WM5Lq6ID4gc2VrYWlqaW5cIDsKK+ihm+eUn+maiiA+IGVpc2VpdGFpXCA7CivnkIbkuovplbcgPiByaWppY2hvdVwgOwor5bmz5bGL5qC5ID4gaGlyYXlhbmVcIDsKK+WFg+iAgemZoiA+IGdlbnJvdWluXCA7Civmo4TmqKnogIUgPiBraWtlbnNoYVwgOwor5LiW55WM5LitID4gc2VrYWlqdXVcIDsKK+ays+WPo+a4ryA+IGtha291a291XCA7CivkuI3kvZPoo4EgPiBmdXRlaXNhaVwgOwor5q+S6JyY6JubID4gZG9rdWd1bW9cIDsKK+WNmOiqnuevhyA+IHRhbmdvaGVuXCA7CivnlJ/lvpLmlbAgPiBzZWl0b3N1dVwgOwor576K55qu57SZID4geW91aGlzaGlcIDsKK+avjeezu+WItiA+IGJva2Vpc2VpXCA7CivlsZXnpLrloLQgPiB0ZW5qaWpvdVwgOwor5b6M6YG655eHID4ga291aXNob3VcIDsKK+S4jeWumuipniA+IGZ1dGVpc2hpXCA7CivliqDmi4XogIUgPiBrYXRhbnNoYVwgOwor6Zm96Zu75rCXID4geW91ZGVua2lcIDsKK+Wuo+S8neiyuyA+IHNlbmRlbmhpXCA7CivliofmmKDnlLsgPiBnZWtpZWlnYVwgOwor54Sh5bi46KazID4gbXVqb3VrYW5cIDsKK+mBiuiVqeWFkCA+IHl1dXRvdWppXCA7Civph5HmuoDlrrYgPiBraW5tYW5rYVwgOwor6Yyg5YmN5bGLID4gam91bWFleWFcIDsKK+efpeWQjeW6piA+IGNoaW1laWRvXCA7Civlh7rpsYjnm64gPiBkZXRhcmFtZVwgOwor5oeH6Kmx5LyaID4ga29ud2FrYWlcIDsKK+mBv+mbo+awkSA+IGhpbmFubWluXCA7CivljYHlrZfooZcgPiBqdXVqaWdhaVwgOwor5Li75ryU6ICFID4gc2h1ZW5zaGFcIDsKK+S4luS/l+WMliA+IHNlem9rdWthXCA7Civnspfoo73lk4EgPiBzb3NlaWhpblwgOwor5Y+z5b+D5oi/ID4gdXNoaW5ib3VcIDsKK+Wcp+WItuiAhSA+IGFzc2Vpc2hhXCA7CivlsZXnpLrlk4EgPiB0ZW5qaWhpblwgOwor5pu46KiY5a6YID4gc2hva2lrYW5cIDsKK+mDt+Wcn+aEmyA+IGt5b3Vkb2FpXCA7Civosq/olLXluqsgPiBjaG96b3Vrb1wgOwor5LiL6aas6KmVID4gZ2ViYWh5b3VcIDsKK+S4jeiDveiAhSA+IGZ1bm91c2hhXCA7CivkuI3oia/ljJYgPiBmdXJ5b3VrYVwgOwor6JaE6I2357OWID4gaGFra2F0b3VcIDsKK+iWhOiNt+eyviA+IGhha2thc2VpXCA7Civmr5TllqnnmoQgPiBoaXl1dGVraVwgOwor5LqJ6K2w5qipID4gc291Z2lrZW5cIDsKK+mHjeemgemMriA+IGp1dWtpbmtvXCA7CivpgYvli5XmrIQgPiB1bmRvdXJhblwgOwor5pmu5YGP5oCnID4gZnVoZW5zZWlcIDsKK+i+sue5geacnyA+IG5vdWhhbmtpXCA7CivmhJ/lj5fmgKcgPiBrYW5qdXNlaVwgOwor5YW15Zmo5belID4gaGVpa2lrb3VcIDsKK+WAqumbsuaelyA+IGdlaXVucmluXCA7CivpgYvpgIHoiLkgPiB1bnNvdXNlblwgOwor6YGK5Ya26YOOID4geXV1eWFyb3VcIDsKK+eUu+S7mee0mSA+IGdhc2Vuc2hpXCA7CivlpJrmrrXpmo4gPiB0YWRhbmthaVwgOwor6Kmm6aiT5qmfID4gc2hpa2Vua2lcIDsKK+S4gOiIrOirliA+IGlwcGFucm9uXCA7CivliqDnrpfnqI4gPiBrYXNhbnplaVwgOwor5YiG5bKQ57eaID4gYnVua2lzZW5cIDsKK+WWh+WPreaJiyA+IHJhcHBhc2h1XCA7CivlhY3nvarnrKYgPiBtZW56YWlmdVwgOwor54qs6buE5qWKID4gaW51dHN1Z2VcIDsKK+WOreS4luimsyA+IGVuc2Vpa2FuXCA7CivljYrkuJbntIAgPiBoYW5zZWlraVwgOwor6YW15q+N6I+MID4ga291Ym9raW5cIDsKK+WGt+e9qOazlSA+IHJlaWFucG91XCA7CivmhJvolLXniYggPiBhaXpvdWJhblwgOwor5b6h5YGJ5pa5ID4gb2VyYWdhdGFcIDsKK+iomOaVsOazlSA+IGtpc3V1aG91XCA7CivnqbrkuIvmiYsgPiBrYXJhaGV0YVwgOwor5LiN5YGl5bq3ID4gZnVrZW5rb3VcIDsKK+aOouaknOWutiA+IHRhbmtlbmthXCA7CivlpKfmsJflnI8gPiB0YWlraWtlblwgOwor542F5a2Q5ZC8ID4gc2hpc2hpa3VcIDsKK+S7o+eQhuaoqSA+IGRhaXJpa2VuXCA7Civnianku7bosrsgPiBidWtrZW5oaVwgOwor5q2j6KaP5YW1ID4gc2Vpa2loZWlcIDsKK+WGjemFjeW4gyA+IHNhaWhhaWZ1XCA7Civlm5vnlbPljYogPiB5b2pvdWhhblwgOwor5bGV56S65LyaID4gdGVuamlrYWlcIDsKK+Wkp+mDveW4giA+IGRhaXRvc2hpXCA7CivlhYjlrabmnJ8gPiBzZW5nYWtraVwgOwor5oKq5rSS6JC9ID4gd2FydWphcmVcIDsKK+iHquawkeWFmiA+IGppbWludG91XCA7CivljLvnmYLlk4EgPiBpcnlvdWhpblwgOwor5YaF5rKZ5rGwID4gdWNoaXphdGFcIDsKK+WIhuWFieWZqCA+IGJ1bmtvdWtpXCA7CivopqrkuI3lrZ0gPiBveWFmdWtvdVwgOwor57iB6LW354mpID4gZW5naW1vbm9cIDsKK+a1geaYn+mbqCA+IHJ5dXVzZWl1XCA7CivlubTosqLnsbMgPiBuZW5ndW1haVwgOwor5rSX5rWE5ZmoID4gc2Vuam91a2lcIDsKK+ayuemAgeiIuSA+IHl1c291c2VuXCA7CivlvqrnkrDlmaggPiBqdW5rYW5raVwgOwor5YGl5bq35YWQID4ga2Vua291amlcIDsKK+eojueQhuWjqyA+IHplaXJpc2hpXCA7Civkurrmg4XlkbMgPiBuaW5qb3VtaVwgOwor5auM55aR6ICFID4ga2VuZ2lzaGFcIDsKK+etieiqnue3miA+IHRvdWdvc2VuXCA7CivljYHlrZfnt5ogPiBqdXVqaXNlblwgOwor5LiN5L2/55SoID4gZnVzaGl5b3VcIDsKK+S4gOeUn+mdoiA+IGlzc2VpbWVuXCA7Civml4XooYzoqJggPiByeW9rb3VraVwgOwor5YCL5L2T576kID4ga290YWlndW5cIDsKK+WPo+iTi+mfsyA+IGtvdWdhaW9uXCA7CivlnKflu7bmqZ8gPiBhdHN1ZW5raVwgOwor5ZKM5aOw5rOVID4gd2FzZWlob3VcIDsKK+mrmOmgu+W6piA+IGtvdWhpbmRvXCA7CivlsI/osYboibIgPiBhenVraWlyb1wgOwor5Y6z576O5riTID4gZ2VuYmlrZWlcIDsKK+eBq+WxseW8viA+IGthemFuZGFuXCA7CivljYroq6fpn7MgPiBoYW5rYWlvblwgOwor5raI5YyW5ZmoID4gc2hvdWtha2lcIDsKK+axguazleiAhSA+IGd1aG91c2hhXCA7CivngavlsbHluK8gPiBrYXphbnRhaVwgOwor5LiL6aeE566xID4gZ2V0YWJha29cIDsKK+iKnea1t+iAgSA+IHNoaWJhZWJpXCA7CivlpKfliIbnnIwgPiBvb2l0YWtlblwgOwor5bGx576K6autID4geWFnaWhpZ2VcIDsKK+eArOaIuOmamyA+IHNldG9naXdhXCA7CivngavlsbHls7YgPiBrYXphbnRvdVwgOwor5LiN5a+p54GrID4gZnVzaGluYmlcIDsKK+WlieS7leWlsyA+IGhvdXNoaW1lXCA7CivngavlsbHlsqkgPiBrYXphbmdhblwgOwor546J56CC5YipID4gdGFtYWphcmlcIDsKK+S4gOWIhuWNiiA+IGlwcHVuaGFuXCA7CivoirHps6XnlLsgPiBrYWNob3VnYVwgOwor54Sh6I+M5rOVID4gbXVraW5ob3VcIDsKK+eEoeWFjeiosSA+IG11bWVua3lvXCA7CivlvoXpgb/nt5ogPiB0YWloaXNlblwgOwor562J5pmC5oCnID4gdG91amlzZWlcIDsKK+W5tOizgOeKtiA+IG5lbmdham91XCA7Civlj6Tlj4LogIUgPiBrb3NhbnNoYVwgOwor5oSf5q2O56ymID4ga2FudGFuZnVcIDsKK+WIhuWykOeCuSA+IGJ1bmtpdGVuXCA7Civkvo3lvpPlrpggPiBqaWp1dWthblwgOwor5YaF6YeO5omLID4gbmFpeWFzaHVcIDsKK+ayuemAgeeuoSA+IHl1c291a2FuXCA7CivkuI3nlKjlv4MgPiBidXlvdWppblwgOwor6KqY6Ju+54GvID4geXV1Z2F0b3VcIDsKK+ioiOeQhuWjqyA+IGtlaXJpc2hpXCA7Civpm5HosqjlupcgPiB6YWtrYXRlblwgOwor5bqn5Y+z6YqYID4gemF5dXVtZWlcIDsKK+WtkOmfs+aApyA+IHNoaWluc2VpXCA7CivmnJ/lvoXmhJ8gPiBraXRhaWthblwgOwor6YGL5YuV5a62ID4gdW5kb3VzaGFcIDsKK+aEmumAo+maiiA+IGd1cmVudGFpXCA7Civljp/lrZDpm7IgPiBnZW5zaGl1blwgOwor5Luj55CG5bqXID4gZGFpcml0ZW5cIDsKK+iruOWZqOaisCA+IHNob2tpa2FpXCA7Civmk43oiLXmiYsgPiBzb3VkYXNodVwgOwor5Ye65q2v5LqAID4gZGViYWthbWVcIDsKK+S4jeWBpeWFqCA+IGZ1a2VuemVuXCA7Civnm7joo5zmgKcgPiBzb3Vob3NlaVwgOwor6Ieq6Lui6LuKID4gaml0ZW5zaGFcIDsKK+WIneacn+WApCA+IHNob2tpY2hpXCA7CivmjqXpoK3ovp4gPiBzZXR0b3VqaVwgOwor55Sf5b6S5LyaID4gc2VpdG9rYWlcIDsKK+i1pOijuOOAhSA+IHNla2lyYXJhXCA7CivpoJDoqIDogIUgPiB5b2dlbnNoYVwgOwor6ZaL5YKs5pelID4ga2Fpc2FpYmlcIDsKK+iDtOmWk+WjsCA+IGRvdW1hZ29lXCA7Civog4znlarlj7cgPiBzZWJhbmdvdVwgOwor5rWu5rWq6ICFID4gZnVyb3VzaGFcIDsKK+S8muWToeWIuCA+IGthaWlua2VuXCA7CivkvJrlk6HliLYgPiBrYWlpbnNlaVwgOwor6Iux57Gz5rOVID4gZWliZWlob3VcIDsKK+WQiOeQhuirliA+IGdvdXJpcm9uXCA7CivlpKfpg6jliIYgPiBkYWlidWJ1blwgOwor5LqU6KeS5b2iID4gZ29rYWtrZWlcIDsKK+ekvuS8muWMliA+IHNoYWthaWthXCA7CivkuK3opo/mqKEgPiBjaHV1a2lib1wgOwor5aSn6YO95LyaID4gZGFpdG9rYWlcIDsKK+itt+mAgei7iiA+IGdvc291c2hhXCA7Civph43miYvku6MgPiBvbW90ZWRhaVwgOwor5bqD5aCx6YOoID4ga291aG91YnVcIDsKK+WJteS4luiomCA+IHNvdXNlaWtpXCA7CivkuInmna/phaIgPiBzYW5iYWl6dVwgOwor56+A54Kt5ZmoID4gc2V0dGFua2lcIDsKK+W4jOacm+iAhSA+IGtpYm91c2hhXCA7CivlpJbnp5HlraYgPiBnZWthZ2FrdVwgOwor5YiR5LqL54qvID4ga2VpamloYW5cIDsKK+mFjee3muWbsyA+IGhhaXNlbnp1XCA7CivmqZ/morDoq5YgPiBraWthaXJvblwgOwor5bed56eL5rKZID4ga2F3YWFpc2FcIDsKK+aWh+WMluWcjyA+IGJ1bmtha2VuXCA7CivmjqXpoK3oqp4gPiBzZXR0b3Vnb1wgOwor5LqL5pWF5q20ID4gamlrb3Jla2lcIDsKK+WxseWwj+WxiyA+IHlhbWFnb3lhXCA7Civns7jonLvom4kgPiBpdG90b25ib1wgOwor56e76Lui5YWIID4gaXRlbnNha2lcIDsKK+Wkp+WLsuS9jSA+IGRhaWt1bicnaVwgOwor5aSn55uu546JID4gb29tZWRhbWFcIDsKK+WumOWFrOWQjyA+IGthbmtvdXJpXCA7CivljZTorbDlk6EgPiBreW91Z2lpblwgOwor6LuN5LqL54qvID4gZ3VuamloYW5cIDsKK+maj+ihjOWToSA+IHp1aWtvdWluXCA7CivkuIDovrrlgJIgPiBpcHBlbnRvdVwgOwor54++5Luj6KqeID4gZ2VuZGFpZ29cIDsKK+iBtOmfs+apnyA+IGNob3VvbmtpXCA7CivkuI3lsI7mgKcgPiBmdWRvdXNlaVwgOwor55CG5a655birID4gcml5b3VzaGlcIDsKK+S5semrmOS4iyA+IHJhbmtvdWdlXCA7Civlj5nmg4XoqakgPiBqb2pvdXNoaVwgOwor56S+5Lqk5a62ID4gc2hha291a2FcIDsKK+aWh+WMluWPsiA+IGJ1bmthc2hpXCA7CivkuI3nlKjlk4EgPiBmdXlvdWhpblwgOwor6YCP5piO5bqmID4gdG91bWVpZG9cIDsKK+S4jeWumuazlSA+IGZ1dGVpaG91XCA7CivmuKnmjpLmsLQgPiBvbmhhaXN1aVwgOwor5aSp6Iqx57KJID4gdGVua2FmdW5cIDsKK+iIquepuui3ryA+IGtvdWt1dXJvXCA7Civos4fnlKPlrrYgPiBzaGlzYW5rYVwgOwor6aGe5Ly854K5ID4gcnVpaml0ZW5cIDsKK+a3oeawtOa5liA+IHRhbnN1aWtvXCA7CivkuojoqIDogIUgPiB5b2dlbnNoYVwgOwor5bqD5aCx6KqyID4ga291aG91a2FcIDsKK+Wwj+S6uuaVsCA+IGtvbmluenV1XCA7CivmhJvnn6XnnIwgPiBhaWNoaWtlblwgOwor5Lq66YCg6JeNID4gamluem91YWlcIDsKK+WMu+WtpuiAhSA+IGlnYWt1c2hhXCA7CivmgqrmhJ/mg4UgPiBha2thbmpvdVwgOwor5Luu57SN6YeRID4ga2Fub3VraW5cIDsKK+acquWHpuWIhiA+IG1pc2hvYnVuXCA7Civlt67phY3kurogPiBzYWhhaW5pblwgOwor5L2O6aC75bqmID4gdGVpaGluZG9cIDsKK+S9nOeCuueKryA+IHNha3VpaGFuXCA7Civmra/np5HnlKggPiBzaGlrYXlvdVwgOwor5YaN5Yem55CGID4gc2Fpc2hvcmlcIDsKK+mBi+WLleS8miA+IHVuZG91a2FpXCA7CivoirHojKPok5kgPiBoYW5hZ296YVwgOwor546E5q2m5bKpID4gZ2VuYnVnYW5cIDsKK+a2sueKtuWMliA+IGVraWpvdWthXCA7CivnhKHliKnmga8gPiBtdXJpc29rdVwgOwor6Zmj576957mUID4gamluYmFvcmlcIDsKK+aIpumXmOapnyA+IHNlbnRvdWtpXCA7CivmnInmhI/nmoQgPiB5dXVpdGVraVwgOwor5ZWP6aGM5YWQID4gbW9uZGFpamlcIDsKK+WCteWLmeiAhSA+IHNhaW11c2hhXCA7CivkuIDpqI7oqI4gPiBpa2tpdWNoaVwgOwor6KOc57Wm6LevID4gaG9reXV1cm9cIDsKK+S4i+WxpOWcnyA+IGthc291ZG9cIDsKK+i1t+WLleapnyA+IGtpZG91a2lcIDsKK+WNgeWtl+aetiA+IGp1dWppa2FcIDsKK+S6uuW3pembqCA+IGppbmtvdXVcIDsKK+mkk+msvOmBkyA+IGdha2lkb3VcIDsKK+S4jeWumuacnyA+IGZ1dGVpa2lcIDsKK+aooeaTrOW6lyA+IG1vZ2l0ZW5cIDsKK+WPpOatpumBkyA+IGtvYnVkb3VcIDsKK+aghOmkiue0oCA+IGVpeW91c29cIDsKK+i6q+WLneaJiyA+IG1pZ2F0dGVcIDsKK+eEoeWIqeWtkCA+IG11cmlzaGlcIDsKK+eRoOeSg+iJsiA+IHJ1cmlpcm9cIDsKK+iDg+iFuOeCjiA+IGljaG91ZW5cIDsKK+i1t+WLleaZgiA+IGtpZG91amlcIDsKK+auuumZo+W4qyA+IHRhdGVzaGlcIDsKK+mhnue+qeiqniA+IHJ1aWdpZ29cIDsKK+WutuioiOewvyA+IGtha2VpYm9cIDsKK+eZu+iomOewvyA+IHRvdWtpYm9cIDsKK+mHjeavjemfsyA+IGp1dWJvaW5cIDsKK+mBheefpeaBtSA+IG9zb2RqaWVcIDsKK+Wkp+mBjuWOuyA+IGRhaWtha29cIDsKK+WKoOeul+WZqCA+IGthc2Fua2lcIDsKK+Wkp+ebuOaSsiA+IG9venVtb3VcIDsKK+apn+iDveiqniA+IGtpbm91Z29cIDsKK+acieawl+mfsyA+IHl1dWtpb25cIDsKK+S4jeadoeeQhiA+IGZ1am91cmlcIDsKK+Wkp+mBk+WFtyA+IG9vZG91Z3VcIDsKK+WumuS9jee9riA+IHRlaWljaGlcIDsKK+mBi+mAgeWxiyA+IHVuc291eWFcIDsKK+mAoOWWtuiyuyA+IHpvdWVpaGlcIDsKK+iSmeWPpOiqniA+IG1vdWtvZ29cIDsKK+apn+aisOenkSA+IGtpa2Fpa2FcIDsKK+asoeW5tOW6piA+IGppbmVuZG9cIDsKK+WkmumHjeWMliA+IHRhanV1a2FcIDsKK+WNg+S7o+WlsyA+IGNoaXlvam9cIDsKK+WPpOekvuWvuiA+IGtvc2hhamlcIDsKK+S4gOWxpOebriA+IGlzc291bWVcIDsKK+WokeWphuawlyA+IHNoYWJha2VcIDsKK+WKseejgeapnyA+IHJlaWppa2lcIDsKK+S4jemmluWwviA+IGZ1c2h1YmlcIDsKK+aCquaEn+WMliA+IGFra2Fua2FcIDsKK+W+hemBv+aJgCA+IHRhaWhpam9cIDsKK+Wbm+iCoeWQjSA+IHNoaWtvbmFcIDsKK+S4jeS6uuawlyA+IGZ1bmlua2lcIDsKK+ilv+asp+WMliA+IHNlaW91a2FcIDsKK+S6jOmajuWxiyA+IG5pa2FpeWFcIDsKK+ajkuaal+iomCA+IGJvdWFua2lcIDsKK+S4jeS4gOiHtCA+IGZ1aXRjaGlcIDsKK+ihgOWPjeWQkCA+IGNoaWhlZG9cIDsKK+abs+eBq+W8viA+IGVpa2FkYW5cIDsKK+S6jOmajuWutiA+IG5pa2FpeWFcIDsKK+ewoee0oOWMliA+IGthbnNva2FcIDsKK+WAi+S9k+W3riA+IGtvdGFpc2FcIDsKK+WQjOmfs+iqniA+IGRvdW9uZ29cIDsKK+S5l+WLmeWToSA+IGpvdW11aW5cIDsKK+ijj+acqOaIuCA+IHVyYWtpZG9cIDsKK+mHkeavmOe+hSA+IGtvbnBpcmFcIDsKK+eEoemAoOS9nCA+IG11em91c2FcIDsKK+WNgeS6jOaZgiA+IGp1dW5pamlcIDsKK+aEj+aDs+WkliA+IGlzb3VnYWlcIDsKK+S4jeWuieWumiA+IGZ1YW50ZWlcIDsKK+mZsOmbu+awlyA+IGluZGVua2lcIDsKK+iWhOmmrOm5vyA+IHVzdWJha2FcIDsKK+S4geWtl+i3ryA+IHRlaWppcm9cIDsKK+aPkOekuumDqCA+IHRlaWppYnVcIDsKK+aFsOWVj+WTgSA+IGltb25oaW5cIDsKK+imquaWh+WtlyA+IG95YW1vamlcIDsKK+eQhuiyoeWutiA+IHJpemFpa2FcIDsKK+eoveWPpOaXpSA+IGtlaWtvYmlcIDsKK+S6jOWhgeaJkyA+IG5pcnVpZGFcIDsKK+aJi+ebuOimiyA+IHRlc291bWlcIDsKK+WknOebl+ibviA+IHlvdG91Z2FcIDsKK+Wls+aAp+e+jiA+IGpvc2VpYmlcIDsKK+miqOmCquWjsCA+IGthemVnb2VcIDsKK+WOreS4luWutiA+IGVuc2Vpa2FcIDsKK+eGqOaWl+ebriA+IG5vc2hpbWVcIDsKK+mZsOisgOWutiA+IGluYm91a2FcIDsKK+maj+aEj+etiyA+IHp1aWlraW5cIDsKK+aJi+WKoOa4myA+IHRla2FnZW5cIDsKK+iumue+juatjCA+IHNhbmJpa2FcIDsKK+WQjOS9jeS9kyA+IGRvdWl0YWlcIDsKK+mhnumfs+iqniA+IHJ1aW9uZ29cIDsKK+WPieaJi+e2siA+IHNhZGVhbWlcIDsKK+Wwj+e2rOm2jyA+IGtvanVrZWlcIDsKK+aZtOmbqOioiCA+IHNlaXVrZWlcIDsKK+aWh+W6q+WMliA+IGJ1bmtva2FcIDsKK+mHjuasoemmrCA+IHlhaml1bWFcIDsKK+ihl+i3r+aouSA+IGdhaXJvanVcIDsKK+aOp+iotOmZoiA+IGtvdXNvaW5cIDsKK+S7meS6uuaOjCA+IHNhYm90ZW5cIDsKK+e+qeaPtOmHkSA+IGdpZW5raW5cIDsKK+S/r+eesOWbsyA+IGZ1a2FuenVcIDsKK+W+oeaWsOmmmSA+IG9zaGlua29cIDsKK+W+oeWutuS6uiA+IGdva2VuaW5cIDsKK+Wkp+WvuumZoiA+IGRhaWppaW5cIDsKK+eDj+e+veeOiSA+IHViYXRhbWFcIDsKK+aAp+ihjOeCuiA+IHNlaWtvdWlcIDsKK+S4gOiIrOWMliA+IGlwcGFua2FcIDsKK+WNgeS6lOWknCA+IGp1dWdveWFcIDsKK+S6jOmZouWItiA+IG5paW5zZWlcIDsKK+WutuaUv+WppiA+IGthc2VpZnVcIDsKK+esrOS6jOe+qSA+IGRhaW5pZ2lcIDsKK+ecn+mtmuadvyA+IG1hbmFpdGFcIDsKK+WGhui7jOmBkyA+IGVua2lkb3VcIDsKK+mHjuiRoeiQhCA+IG5vYnVkb3VcIDsKK+W/nOWLn+iAhSA+IG91Ym9zaGFcIDsKK+m6u+Wun+ayuSA+IGFzYW1peXVcIDsKK+iMtumjr+S6iyA+IHNhaGFuamlcIDsKK+WFq+mHjembsiA+IHlhZWd1bWFcIDsKK+acqui4j+afuyA+IG1pdG91c2FcIDsKK+e1teiRieabuCA+IGVoYWdha2lcIDsKK+eoveWPpOWgtCA+IGtlaWtvYmFcIDsKK+WuieWFqOacnyA+IGFuemVua2lcIDsKK+WPjeaEj+iqniA+IGhhbicnaWdvXCA7CivlgIvkurrlt64gPiBrb2ppbnNhXCA7Civnt4/li5npg6ggPiBzb3VtdWJ1XCA7Civorabpg6joo5wgPiBrZWlidWhvXCA7CivkuI7lpKrpg44gPiB5b3Rhcm91XCA7CivkvY3niYzloIIgPiBpaGFpZG91XCA7CivnvqnlpKrlpKsgPiBnaWRheXV1XCA7CivkuInpnq3phZIgPiBzaGFucGVuXCA7CivlpoPmrr/kuIsgPiBoaWRlbmthXCA7CivmvKvnlLvlrrYgPiBtYW5nYWthXCA7CivkuI3mnKzmhI8gPiBmdWhvbicnaVwgOwor5q2p5ZCI566XID4gYnVhaXphblwgOwor6Kqe5b2Z55qEID4gZ29pdGVraVwgOwor56ys5LiA6KqyID4gZGFpaWtrYVwgOwor5LqV5oi456uvID4gaWRvYmF0YVwgOwor55CG5LqL5LyaID4gcmlqaWthaVwgOwor54Gr5puc5pelID4ga2F5b3ViaVwgOwor5b6h5LiN5rWEID4gZ29mdWpvdVwgOwor5pyq5a6a576pID4gbWl0ZWlnaVwgOwor5a++5L2N5rOVID4gdGFpaWhvdVwgOwor5rWu5rWq5YWQID4gZnVyb3VqaVwgOwor5amm5Lq656eRID4gZnVqaW5rYVwgOwor5LuW5LiW55WMID4gdGFzZWthaVwgOwor5oWw5Yq06YeRID4gaXJvdWtpblwgOwor55CG5LiN5bC9ID4gcmlmdWppblwgOwor5Y2Y5Z2Q5qmfID4gdGFuemFraVwgOwor5LiN6aO95ZKMID4gZnVob3V3YVwgOwor5Luj6K2w5ZOhID4gZGFpZ2lpblwgOwor6Z2e5ZCI55CGID4gaGlnb3VyaVwgOwor57eP5YuZ6KqyID4gc291bXVrYVwgOwor5qSw5a2Q5rK5ID4geWFzaGl5dVwgOwor5rC05rOz552AID4gc3VpZWlnaVwgOwor57W16I2J57SZID4gZXpvdXNoaVwgOwor5bCP54qs5bqnID4ga29pbnV6YVwgOwor6LWk5ZGz5ZmMID4gYWthbWlzb1wgOwor5a++576p6KqeID4gdGFpZ2lnb1wgOwor5rGa5p+T6I+MID4gb3NlbmtpblwgOwor5LiJ5pel6LevID4gbWlra2FqaVwgOwor5bGF6YWS5bGLID4gaXpha2F5YVwgOwor6Ieq5a626KO9ID4gamlrYXNlaVwgOwor5aGX5biD5YmkID4gdG9mdXphaVwgOwor5Y+k5YW46KqeID4ga290ZW5nb1wgOwor576p5o2Q6YeRID4gZ2llbmtpblwgOwor5LiN5pmv5rCXID4gZnVrZWlraVwgOwor5ZCI55CG5YyWID4gZ291cmlrYVwgOwor5ouJ5LiB6KqeID4gcmF0ZW5nb1wgOwor6Zu756OB5rOiID4gZGVuamloYVwgOwor6Zu756OB5rCXID4gZGVuamlraVwgOwor5a6J5YWo5ZmoID4gYW56ZW5raVwgOwor5qmf5qKw5YyWID4ga2lrYWlrYVwgOwor5qCE6aSK5L6hID4gZWl5b3VrYVwgOwor56ys5LqM5qyhID4gZGFpbmlqaVwgOwor5LqV5oi45rC0ID4gaWRvbWl6dVwgOwor5LiA5YCL5Lq6ID4gaWtrb2ppblwgOwor5Lqh56WW54i2ID4gYm91c29mdVwgOwor5b6h5pyx5Y2wID4gZ29zaHVpblwgOwor55Ww5oCn5L2TID4gaXNlaXRhaVwgOwor6Z2e5ZCM5pyfID4gaGlkb3VraVwgOwor5Y2B6Zyy55ukID4gc29yb2JhblwgOwor562G6KiY5YW3ID4gaGlra2lndVwgOwor56mP5YGl5rS+ID4gb25rZW5oYVwgOwor6IKy5YWQ5ZySID4gaWt1amllblwgOwor6Zu75rCX54KJID4gZGVua2lyb1wgOwor5L6d5a2Y5oCnID4gaXpvbnNlaVwgOwor5q+U5Y+h5bGxID4gaGllaXphblwgOwor5L6d6aC86ICFID4gaXJhaXNoYVwgOwor6KO95rK55omAID4gc2VpeXVqb1wgOwor5Z+65pys6KqeID4ga2lob25nb1wgOwor5b6h5LiJ5a62ID4gZ29zYW5rZVwgOwor5LqU56+A5Y+lID4gZ29zZWtrdVwgOwor6Kqk5YuV5L2cID4gZ29kb3VzYVwgOwor5b2x5Y2w5pysID4gZWlpbmhvblwgOwor57WM5Za26LK7ID4ga2VpZWloaVwgOwor5YaG55u45aC0ID4gZW5zb3ViYVwgOwor6KKr55aR6ICFID4gaGlnaXNoYVwgOwor5pS+54Gr6a2UID4gaG91a2FtYVwgOwor5LiN5pat552AID4gZnVkYW5naVwgOwor6IGW6Lev5YqgID4gc2Vpcm9rYVwgOwor5LiL57ea6YOoID4ga2FzZW5idVwgOwor5aSa5qyh5YWDID4gdGFqaWdlblwgOwor5Ly86Z2e6ICFID4gZXNlbW9ub1wgOwor6ISz5aSW56eRID4gbm91Z2VrYVwgOwor5b6h5LiL5ZWPID4gZ29rYW1vblwgOwor6IaD6IKt6IeNID4gb3R0b3NlaVwgOwor5aWz5oCn5ZmoID4gam9zZWlraVwgOwor5a215Y215ZmoID4gZnVyYW5raVwgOwor54Sh55CG6KejID4gbXVyaWthaVwgOwor54i25oCn5oSbID4gZnVzZWlhaVwgOwor6Z2e5q2m6KOFID4gaGlidXNvdVwgOwor5ZCM54i25q+NID4gZG91ZnVib1wgOwor5aWz5oCn5YyWID4gam9zZWlrYVwgOwor54Sh5pyf6ZmQID4gbXVraWdlblwgOwor6Ieq5a6255SoID4gamlrYXlvdVwgOwor5a6257O75ZuzID4ga2FrZWl6dVwgOwor5LiA5LiW57SAID4gaXNzZWlraVwgOwor6Ieq55Sx5bqmID4gaml5dXVkb1wgOwor5rGa5p+T5rqQID4gb3NlbmdlblwgOwor5L6d6aC854q2ID4gaXJhaWpvdVwgOwor56ys5LiA5q2pID4gZGFpaXBwb1wgOwor5b6u5aG15a2QID4gbWlqaW5rb1wgOwor6LSU5bGT55uuID4gaGlpa2ltZVwgOwor6Zu756OB5aC0ID4gZGVuamliYVwgOwor5LiA5L2T5YyWID4gaXR0YWlrYVwgOwor5b6h5pel5qeYID4gb2hpc2FtYVwgOwor6Z+z57695bGLID4gb3Rvd2F5YVwgOwor5Yy76Zmi6ZW3ID4gaWluY2hvdVwgOwor5Y2w5qyn6KqeID4gaW4nJ291Z29cIDsKK+WHuuadpeeniyA+IGRla2lha2lcIDsKK+mjm+ihjOapnyA+IGhpa291a2lcIDsKK+eEoeS9nOeCuiA+IG11c2FrdWlcIDsKK+mDveW4gumDqCA+IHRvc2hpYnVcIDsKK+W6p+iSsuWboyA+IHphYnV0b25cIDsKK+aUvuiqsuW+jCA+IGhvdWthZ29cIDsKK+S4gOacrOawlyA+IGlwcG9uZ2lcIDsKK+mbu+awl+WxiyA+IGRlbmtpeWFcIDsKK+acquadpea0viA+IG1pcmFpaGFcIDsKK+aghOiqieekvCA+IGVpeW9yZWlcIDsKK+ezluiho+mMoCA+IHRvdWlqb3VcIDsKK+eQhuirluWutiA+IHJpcm9ua2FcIDsKK+aJk+alveWZqCA+IGRhZ2Fra2lcIDsKK+eEoeS9nOazlSA+IGJ1c2Fob3VcIDsKK+S7geeOi+mWgCA+IG5pb3Vtb25cIDsKK+WPpOWFuOa0viA+IGtvdGVuaGFcIDsKK+e0oOWwgeWutiA+IHNvaG91a2FcIDsKK+atqeWQiOWItiA+IGJ1YWlzZWlcIDsKK+mtmuays+WyuCA+IHVvZ2FzaGlcIDsKK+iHqueUseWMliA+IGppeXV1a2FcIDsKK+aOiOeUo+aJgCA+IGp1c2Fuam9cIDsKK+mnhuWLleapnyA+IGt1ZG91a2lcIDsKK+S6jOeuh+aJgCA+IG5pa2FzaG9cIDsKK+mBleeKr+iAhSA+IGloYW5zaGFcIDsKK+iHqueUu+WDjyA+IGppZ2F6b3VcIDsKK+W9ouaEj+aLsyA+IGtlaWlrZW5cIDsKK+avjeaAp+aEmyA+IGJvc2VpYWlcIDsKK+S6leaIuOWBtCA+IGlkb2dhd2FcIDsKK+egtOegleapnyA+IGhhc2Fpa2lcIDsKK+mBleitpue9qiA+IGlrZWl6YWlcIDsKK+W4jOWcn+mhniA+IGtpZG9ydWlcIDsKK+S6nOmJm+W8lSA+IGFlbmJpa2lcIDsKK+WkquWusOW6nCA+IGRhemFpZnVcIDsKK+S8iumBlOiAhSA+IGRhdGVzaGFcIDsKK+mAgeipseWZqCA+IHNvdXdha2lcIDsKK+S8tOWkqemAoyA+IGJhdGVyZW5cIDsKK+S6nOm6u+W4gyA+IGFtYW51bm9cIDsKK+Wls+mDjuWxiyA+IGpvcm91eWFcIDsKK+WZtOmcp+WZqCA+IGZ1bm11a2lcIDsKK+iLseWNmOiqniA+IGVpdGFuZ29cIDsKK+iNt+mmrOi7iiA+IG5pYmFzaGFcIDsKK+aTrOaFi+iqniA+IGdpdGFpZ29cIDsKK+eVsOmCpuS6uiA+IGlob3VqaW5cIDsKK+aAquaIkeS6uiA+IGtlZ2FuaW5cIDsKK+WKueaenOmfsyA+IGtvdWthb25cIDsKK+Wik+eikemKmCA+IGJvaGltZWlcIDsKK+mjm+ihjOWutiA+IGhpa291a2FcIDsKK+eBq+eGqOaWlyA+IGhpbm9zaGlcIDsKK+WEquS9jeaApyA+IHl1dWlzZWlcIDsKK+eEoei2o+WRsyA+IG11c2h1bWlcIDsKK+mBjuePvuacqiA+IGthZ2VubWlcIDsKK+mVt+akheWtkCA+IG5hZ2Fpc3VcIDsKK+iBvuWUluiAhSA+IHJvdWFzaGFcIDsKK+aWh+Wtl+ebpCA+IG1vamliYW5cIDsKK+S6lOWNgemfsyA+IGdvanV1b25cIDsKK+WkqeWppue+hSA+IHRlbnB1cmFcIDsKK+WvnemBk+WFtyA+IG5lZG91Z3VcIDsKK+eVsOWIhuWtkCA+IGlidW5zaGlcIDsKK+iHquiyqeapnyA+IGppaGFua2lcIDsKK+WFq+mHjeWeoyA+IHlhZWdha2lcIDsKK+eEoeS+oeWApCA+IG11a2FjaGlcIDsKK+S6uuS6i+mZoiA+IGppbmppaW5cIDsKK+S4jeWknOWfjiA+IGZ1eWFqb3VcIDsKK+e+juS4iOWkqyA+IGJpam91ZnVcIDsKK+aYk+aQjeWTgSA+IGlzb25oaW5cIDsKK+WwvOWDp+mZoiA+IG5pc291aW5cIDsKK+eEoeeQhuaVsCA+IG11cmlzdXVcIDsKK+eEoemfu+ipqSA+IG11aW5zaGlcIDsKK+WkmuanmOWMliA+IHRheW91a2FcIDsKK+eUsuaWkOaApyA+IGthaXNob3VcIDsKK+Wxi+agueijjyA+IHlhbmV1cmFcIDsKK+aatOmiqOmbqCA+IGJvdWZ1dXVcIDsKK+eUn+eQhuaXpSA+IHNlaXJpYmlcIDsKK+WIhumZkOiAhSA+IGJ1Z2VuamFcIDsKK+S6uuS6i+mDqCA+IGppbmppYnVcIDsKK+m4mum1oeiynSA+IG91bXVnYWlcIDsKK+S4gOS4geWtlyA+IGl0dGVpamlcIDsKK+WIhumboua0viA+IGJ1bnJpaGFcIDsKK+Wwj+e0sOW3pSA+IGtvemFpa3VcIDsKK+aal+WPt+WMliA+IGFuZ291a2FcIDsKK+WNsOW6pua0iyA+IGluZG95b3VcIDsKK+Whqee0oOmFuCA+IGVuc29zYW5cIDsKK+S+nemgvOS6uiA+IGlyYWluaW5cIDsKK+eItuavjeS8miA+IGZ1Ym9rYWlcIDsKK+mjsumFkuWutiA+IGluc2h1a2FcIDsKK+S4jeiqjeWPryA+IGZ1bmlua2FcIDsKK+aFsOWKtOS8miA+IGlyb3VrYWlcIDsKK+ixhuiFkOWxiyA+IHRvdWZ1eWFcIDsKK+WIhumbouapnyA+IGJ1bnJpa2lcIDsKK+eBq+eCjueTtiA+IGthZW5iaW5cIDsKK+W+oeWkmuWIhiA+IGdvdGFidW5cIDsKK+iHqOaZguiyuyA+IHJpbmppaGlcIDsKK+Wkp+Wkqum8kyA+IG9vZGFpa29cIDsKK+WmguS9leeoiyA+IGlrYWhvZG9cIDsKK+eJoeeJm+W6pyA+IG91c2hpemFcIDsKK+WKoOW3peiyuyA+IGtha291aGlcIDsKK+S6uuS6i+iqsiA+IGppbmppa2FcIDsKK+mHjuiJr+eKrCA+IG5vcmFpbnVcIDsKK+iug+e+juatjCA+IHNhbmJpa2FcIDsKK+aXpeacrOmWkyA+IG5paG9ubWFcIDsKK+Wkp+ixhuayuSA+IGRhaXp1eXVcIDsKK+WFkOerpeeUuyA+IGppZG91Z2FcIDsKK+a8lOiInuWgtCA+IGVuYnVqb3VcIDsKK+S8vOmdnuS6iyA+IGVzZWdvdG9cIDsKK+S4jee1kOaenCA+IGZ1a2Vra2FcIDsKK+WcsOS4i+WMliA+IGNoaWtha2FcIDsKK+WFq+eZvumVtyA+IHlhb2Nob3VcIDsKK+mBjumjveWSjCA+IGthaG91d2FcIDsKK+aXqeWwkeWlsyA+IHNhb3RvbWVcIDsKK+WmguS9leeJqSA+IGlrYW1vbm9cIDsKK+eJiOeUu+WutiA+IGhhbmdha2FcIDsKK+aEm+mjsuiAhSA+IGFpaW5zaGFcIDsKK+WuieWumuWZqCA+IGFudGVpa2lcIDsKK+mnhOiPk+WtkCA+IGRhZ2FzaGlcIDsKK+WUkOiDoem6uyA+IHRvdWdvbWFcIDsKK+WBnOmfs+espiA+IHRlaW9ucHVcIDsKK+WckuiKuOWutiA+IGVuZ2Vpa2FcIDsKK+aKleW9seapnyA+IHRvdWVpa2lcIDsKK+iLseWQieWIqSA+IGlnaXJpc3VcIDsKK+W6p+W4g+WboyA+IHphYnV0b25cIDsKK+eEoeWjsOmfsyA+IG11c2Vpb25cIDsKK+WUkOiMhOWtkCA+IHRvdW5hc3VcIDsKK+aXpeacrOiqniA+IG5paG9uZ29cIDsKK+W+k+S4ieS9jSA+IGp1c2FubWlcIDsKK+WppuWls+WtkCA+IGZ1am9zaGlcIDsKK+W3peS6i+iyuyA+IGtvdWppaGlcIDsKK+a4qeW6puioiCA+IG9uZG9rZWlcIDsKK+WuieWumuWMliA+IGFudGVpa2FcIDsKK+azleieuuiynSA+IGhvcmFnYWlcIDsKK+mdnuW4uOaZgiA+IGhpam91amlcIDsKK+WFq+WNg+S7oyA+IHlhY2hpeW9cIDsKK+S4jee0sOW3pSA+IGJ1c2Fpa3VcIDsKK+S9meawtOi3ryA+IHlvc3Vpcm9cIDsKK+ebuOmBleeCuSA+IHNvdWl0ZW5cIDsKK+abvOiNvOe+hSA+IG1hbmRhcmFcIDsKK+WcsOmbt+eBqyA+IGppcmFpa2FcIDsKK+WFrOWLmeWToSA+IGtvdW11aW5cIDsKK+ahiOWxseWtkCA+IGtha2FzaGlcIDsKK+WPpOS7o+iqniA+IGtvZGFpZ29cIDsKK+eUn+S4gOacrCA+IGtpaXBwb25cIDsKK+i6q+i0lOWxkyA+IG1pYmlpa2lcIDsKK+acquaVtOeQhiA+IG1pc2VpcmlcIDsKK+S6iOenkeeUnyA+IHlva2FzZWlcIDsKK+acque1jOmBjiA+IG1pa2Vpa2FcIDsKK+a1t+advuiynSA+IG1pcnVnYWlcIDsKK+WFteWFkOW4ryA+IGhla29vYmlcIDsKK+i6q+Wlh+m6lyA+IG1pZ2lyZWlcIDsKK+aknOafu+WToSA+IGtlbnNhaW5cIDsKK+WNseapn+aEnyA+IGtpa2lrYW5cIDsKK+i1pOiMhOWtkCA+IGFrYW5hc3VcIDsKK+err+atpuiAhSA+IGhhbXVzaGFcIDsKK+WNsOW6puS6uiA+IGluZG9qaW5cIDsKK+WGheWuieaJkyA+IG5haWFuZGFcIDsKK+Wxi+agueadvyA+IHlhbmVpdGFcIDsKK+eEoeacn+WIkSA+IG11a2lrZWlcIDsKK+iomOW/teeikSA+IGtpbmVuaGlcIDsKK+mDveW4guWMliA+IHRvc2hpa2FcIDsKK+W6nOefpeS6iyA+IGZ1Y2hpamlcIDsKK+WGheiAs+eCjiA+IG5haWppZW5cIDsKK+WMl+S6rOiqniA+IHBla2luZ29cIDsKK+eKrOWwj+WxiyA+IGludWdveWFcIDsKK+W9vOWyuOS8miA+IGhpZ2FuJydlXCA7Civnm7jlvJ/lrZAgPiBhaWRlc2hpXCA7Civps7Plh7DluqcgPiBob3VvdXphXCA7Civlkr3poK3ngo4gPiBpbnRvdWVuXCA7CivmipXlvbHlm7MgPiB0b3VlaXp1XCA7CivkuI3ooZvnlJ8gPiBmdWVpc2VpXCA7CivmlbTnkIbpg6ggPiBzZWlyaWJ1XCA7CivlhaXmr43lsYsgPiBpcmltb3lhXCA7CivlpJrotqPlkbMgPiB0YXNodW1pXCA7Civpn7PoqJjlj7cgPiBvbmtpZ291XCA7CivlsI/lnYrkuLsgPiBrb2JvdXp1XCA7Civml6XmnKznlLsgPiBuaWhvbmdhXCA7CivntIDlhYPlvowgPiBraWdlbmdvXCA7CivkvZPmuKnlmaggPiB0YWlvbmtpXCA7Civlvq7muKnmua8gPiBiaW9udG91XCA7CivosrTlqabkurogPiBraWZ1amluXCA7Civlj7PlpKfoh6MgPiB1ZGFpamluXCA7CivluLDljJbkurogPiBraWthamluXCA7CivmiKblvozmtL4gPiBzZW5nb2hhXCA7Civlj5flg4/mqZ8gPiBqdXpvdWtpXCA7CivoqJjlv7XmqLkgPiBraW5lbmp1XCA7Civnsonlvq7lobUgPiBrb21pamluXCA7CivngrrmlL/ogIUgPiBpc2Vpc2hhXCA7CivlpKfniqzluqcgPiBvb2ludXphXCA7Civml6XmmYLoqIggPiBoaWRva2VpXCA7CivmmYLkuovoq5YgPiBqaWppcm9uXCA7Civkv53ppIrpmaIgPiBob3lvdWluXCA7Civoh6rnhLbolq8gPiBqaW5lbmpvXCA7Civkv53lgaXmiYAgPiBob2tlbmpvXCA7Civpm6LlvIHoirEgPiByaWJlbmthXCA7CivmrKHkuJbku6MgPiBqaXNlZGFpXCA7CivkuI3lmajnlKggPiBidWtpeW91XCA7CivmiYvlpYfpupcgPiB0ZWdpcmVpXCA7Civloanln7rmgKcgPiBlbmtpc2VpXCA7CivoqJjlv7Xml6UgPiBraW5lbmJpXCA7Civpq5jnpZbniLYgPiBrb3Vzb2Z1XCA7Civku4rml6XkuK0gPiBreW91anV1XCA7CivouqvntrrpupcgPiBtaWdpcmVpXCA7CivokI7pu4Tnl4UgPiBpb3VieW91XCA7Civmk6zlj6TmlocgPiBnaWtvYnVuXCA7CivlnLDooaPpoZ4gPiBjaGlpcnVpXCA7CivlqYbnvoXploAgPiBiYXJhbW9uXCA7Civnp5jmm7joqrIgPiBoaXNob2thXCA7CivljbDnlLvntJkgPiBpbmdhc2hpXCA7Civkuojmg7PlsYsgPiB5b3NvdXlhXCA7CivmhYjlloTlrrYgPiBqaXplbmthXCA7Civml6nkuZnlpbMgPiBzYW90b21lXCA7CivlnJ/mm5zml6UgPiBkb3lvdWJpXCA7CivpmY3pm6jmnpcgPiBrb3V1cmluXCA7CivmnJ3poqjlkYIgPiBhc2FidXJvXCA7Civlho3kuIvku5ggPiBzYWlrYWZ1XCA7CivmtIvnlLvlrrYgPiB5b3VnYWthXCA7Civlrpropo/luqcgPiBqb3VnaXphXCA7CivpnIDnlKjlrrYgPiBqdXlvdWthXCA7Civkv53lgaXlqaYgPiBob2tlbmZ1XCA7Civpq5jnpZbmr40gPiBrb3Vzb2JvXCA7CivlpJbogLPngo4gPiBnYWlqaWVuXCA7CivkuI3oo4Hlj68gPiBmdXNhaWthXCA7Civorablgpnlk6EgPiBrZWliaWluXCA7CivoqqTkvZzli5UgPiBnb3NhZG91XCA7Civku67lkI3mnKwgPiBrYW5haG9uXCA7CivliqnnlKPmiYAgPiBqb3NhbmpvXCA7CivlpKfmmYLku6MgPiBvb2ppZGFpXCA7Civmnrjmq57phbggPiBrdWVuc2FuXCA7CivomZrnhKHlg6cgPiBrb211c291XCA7CivlrLDoqJjlj7cgPiBlaWtpZ291XCA7Civkv53lgaXljLsgPiBob2tlbicnaVwgOwor5LqM5Y2B5q2zID4gaGF0YWNoaVwgOwor6aCt5a2X6KqeID4gdG91amlnb1wgOwor5pyo5aSq5YiAID4ga2lkYWNoaVwgOwor6JOu6I+v5bqnID4gcmVuZ2V6YVwgOwor5oSb5pu45a62ID4gYWlzaG9rYVwgOwor6aas5YiA6LKdID4gbWF0ZWdhaVwgOwor6Laj5oSP5pu4ID4gc2h1aXNob1wgOwor6YGL5pCs6LK7ID4gdW5wYW5oaVwgOwor5pSY5aS36KuWID4gam91aXJvblwgOwor5oeQ55aR5rS+ID4ga2FpZ2loYVwgOwor54Sh54WZ54KtID4gbXVlbnRhblwgOwor5a6J6Z2Z5pmCID4gYW5zZWlqaVwgOwor5aWz55Sf5b6SID4gam9zZWl0b1wgOwor6JmO54eV5ouzID4ga29lbmtlblwgOwor5q2j5bi45L2NID4gc2Vpam91aVwgOwor6KOc5Yqp6YeRID4gaG9qb2tpblwgOwor6Zi/5amG5pOmID4gYWJhenVyZVwgOwor5LqM5Y2B5pelID4gaGF0c3VrYVwgOwor55C155C26KGMID4gYml3YWtvdVwgOwor56eY5pu456eRID4gaGlzaG9rYVwgOwor5Yqp55Sj5ammID4gam9zYW5wdVwgOwor5L+u576F5aC0ID4gc2h1cmFiYVwgOwor5omL5LiA5p2vID4gdGVpcHBhaVwgOwor54Sh57ea5qmfID4gbXVzZW5raVwgOwor5LiH54Gv5LyaID4gbWFuZG91ZVwgOwor5omL57a66bqXID4gdGVnaXJlaVwgOwor5rC05L2N6KiIID4gc3VpaWtlaVwgOwor5ryi5pa55Yy7ID4ga2FucG91aVwgOwor576955uu5p2/ID4gaGFtZWl0YVwgOwor5YW35L2T5qGIID4gZ3V0YWlhblwgOwor5pel5pys5YyWID4gbmlob25rYVwgOwor56CU56Oo5qmfID4ga2VubWFraVwgOwor5aSn6ZuR5oqKID4gb296YXBwYVwgOwor5Y+k5LqV5oi4ID4gZnVydWlkb1wgOwor6IOD5r2w55iNID4gaWthaXlvdVwgOwor5aSa576p5oCnID4gdGFnaXNlaVwgOwor55SY6Zyy54WuID4ga2Fucm9uaVwgOwor5LmZ5aWz5bqnID4gb3RvbWV6YVwgOwor5L+d5a6I5rS+ID4gaG9zaHVoYVwgOwor5Y+Z5LqL6KmpID4gam9qaXNoaVwgOwor5aSn5o6D6ZmkID4gb29zb3VqaVwgOwor54OP6b6N6Iy2ID4gxatyb25jaGFcIDsKK+Wls+eOi+ifuyA+IGpvb3VhcmlcIDsKK+WNiuavjemfsyA+IGhhbmJvaW5cIDsKK+eEoeaUv+W6nCA+IG11c2VpZnVcIDsKK+e+qeWSjOWboyA+IGdpd2FkYW5cIDsKK+WlveS6i+WutiA+IGtvdXp1a2FcIDsKK+ihjOeCuuiAhSA+IGtvdWlzaGFcIDsKK+apn+mWouW6qyA+IGtpa2Fua29cIDsKK+apn+mWouW6pyA+IGtpa2FuemFcIDsKK+WQjOaEj+imiyA+IGRvdWlrZW5cIDsKK+itsOS6i+WggiA+IGdpamlkb3VcIDsKK+WkqeezuOeTnCA+IGhlY2hpbWFcIDsKK+S/neWuieaelyA+IGhvYW5yaW5cIDsKK+iFkOiRieWcnyA+IGZ1eW91ZG9cIDsKK+a1t+ixmuW6pyA+IGlydWthemFcIDsKK+iHquihm+maiiA+IGppZWl0YWlcIDsKK+e5iue2ree0oCA+IHNlbicnaXNvXCA7Civnp7vooYzmgKcgPiBpa291c2VpXCA7Civmua/mua/lqYYgPiB5dXRhbnBvXCA7CivkuqTlsL7mnJ8gPiBrb3ViaWtpXCA7Civpmbbno4HlmaggPiB0b3VqaWtpXCA7Civph43ppqzloLQgPiBvbW9iYWJhXCA7CivmrbPmmYLoqJggPiBzYWlqaWtpXCA7CivpmL/lpJrnpo8gPiBvdGFmdWt1XCA7CivlvqHnr4Dku4sgPiBvc2Vra2FpXCA7Civoj5PlrZDlsYsgPiBrYXNoaXlhXCA7CivnlarlsI/lsYsgPiBiYW5nb3lhXCA7CivmhJvniqzlrrYgPiBhaWtlbmthXCA7CivogL3nvo7mtL4gPiB0YW5iaWhhXCA7Civkv53ogrLmiYAgPiBob2lrdWpvXCA7CivpgYrpm6Lln7ogPiB5dXVyaWtpXCA7CivkupLliqnkvJogPiBnb2pva2FpXCA7Civoo5zliqnnt5ogPiBob2pvc2VuXCA7Civkuovli5nmiYAgPiBqaW11c2hvXCA7Civkv53orbfph5EgPiBob2dva2luXCA7Civoj5PlrZDlmaggPiBrYXNoaWtpXCA7CivmhJvlprvlrrYgPiBhaXNhaWthXCA7CivppIrniLbmr40gPiB5b3VmdWJvXCA7Civotbfpm7vmqZ8gPiBraWRlbmtpXCA7CivkuozmrbvlvowgPiBuaXNoaWdvXCA7CivokYnniaHkuLkgPiBoYWJvdGFuXCA7Civlt7LnhLblvaIgPiBpemVua2VpXCA7CivljZjluqfmqZ8gPiB0YW56YWtpXCA7CivlpKfopo/mqKEgPiBkYWlraWJvXCA7CivlhbfkvZPljJYgPiBndXRhaWthXCA7Civkv53lronlrpggPiBob2Fua2FuXCA7Civph47njaPmtL4gPiB5YWp1dWhhXCA7Civpm7vkvY3lt64gPiBkZW4nJ2lzYVwgOwor6Z2e5a++5b+cID4gaGl0YWlvdVwgOwor6JOW6bq75a2QID4gaGltYXNoaVwgOwor6KO45L2T55S7ID4gcmF0YWlnYVwgOwor5LqL5YuZ5a6YID4gamltdWthblwgOwor6LW36Ki054q2ID4ga2lzb2pvdVwgOwor6YeO5pqu55SoID4geWFib3lvdVwgOwor54Sh54Gv54GrID4gbXV0b3VrYVwgOwor54Sh6KiY5ZCNID4gbXVraW1laVwgOwor6YO96K2w6YG4ID4gdG9naXNlblwgOwor5L+d6IKy5ZySID4gaG9pa3VlblwgOwor5L+d6IKy5ZmoID4gaG9pa3VraVwgOwor5oSb5aW95a62ID4gYWlrb3VrYVwgOwor5aeU5Lu754q2ID4gaW5pbmpvdVwgOwor55So5Zmo55S7ID4geW91a2lnYVwgOwor5L+d6aSK5omAID4gaG95b3Vqb1wgOwor5a625bqt56eRID4ga2F0ZWlrYVwgOwor5LiN5ZCN6KqJID4gZnVtZWl5b1wgOwor5LqU6Lyq5peXID4gZ29yaW5raVwgOwor5L2c5qWt6KGjID4gc2FneW91aVwgOwor5pyo5oi46YqtID4ga2lkb3NlblwgOwor6ICz5LiL6IW6ID4gamlrYXNlblwgOwor5a625bqt552AID4ga2F0ZWlnaVwgOwor5aSW6Zmw6YOoID4gZ2FpaW5idVwgOwor5ZKM6I+T5a2QID4gd2FnYXNoaVwgOwor6Ieq5Zyo55S7ID4gaml6YWlnYVwgOwor6ICV6YGL5qmfID4ga291dW5raVwgOwor5LiA5Zue5b+MID4gaWtrYWlraVwgOwor5LiN5Y+v6KejID4gZnVrYWthaVwgOwor5LiN5Y+v6KaWID4gZnVrYXNoaVwgOwor57eP55CG5bqcID4gc291cmlmdVwgOwor5LqM5YiG5pyoID4gbmlidW5naVwgOwor5bqD6L6e6IuRID4ga291amllblwgOwor5aSa5pWw5rS+ID4gdGFzdXVoYVwgOwor5L+d6K236ICFID4gaG9nb3NoYVwgOwor5aSc6ZaT6YOoID4geWFrYW5idVwgOwor55WZ5a6I6Zu7ID4gcnVzdWRlblwgOwor5o6D6Zmk5qmfID4gc291amlraVwgOwor5LqL5YuZ5LyaID4gamltdWthaVwgOwor5LqL5YmN5b6MID4gaml6ZW5nb1wgOwor6I+p5o+Q5qi5ID4gYm9kYWlqdVwgOwor6LKd54us5qW9ID4gYmFpZ29tYVwgOwor54Sh6Ziy5YKZID4gbXVib3ViaVwgOwor5LiN5oCd6K2wID4gZnVzaGlnaVwgOwor5LiN56mP5b2TID4gZnVvbnRvdVwgOwor5Y+v5aGR5p2QID4ga2Fzb3phaVwgOwor5qKz57a/5qmfID4gc29tZW5raVwgOwor54Sh5omL6aCGID4gbXV0ZWp1blwgOwor5bC+54q26IqxID4gYmlqb3VrYVwgOwor5L6/5Yip5bGLID4gYmVucml5YVwgOwor5LqI55+l5aSiID4geW9jaGltdVwgOwor5b6h56We57GkID4gb21pa3VqaVwgOwor5pig5YaZ5qmfID4gZWlzaGFraVwgOwor5L+d6K2356iOID4gaG9nb3plaVwgOwor5Y+Z5LqL5paHID4gam9qaWJ1blwgOwor6Iux5Lya6KmxID4gZWlrYWl3YVwgOwor5LiN5Y+v6IO9ID4gZnVrYW5vdVwgOwor5pig55S76aSoID4gZWlnYWthblwgOwor6aKo6Zuy5YWQID4gZnV1dW5qaVwgOwor5qWV5YaG5b2iID4gZGFlbmtlaVwgOwor5ryU5aWP5a62ID4gZW5zb3VrYVwgOwor5Y+v5aGR5oCnID4ga2Fzb3NlaVwgOwor6KKr6Zmk5pWwID4gaGlqb3N1dVwgOwor5LqM5qyh5YWDID4gbmlqaWdlblwgOwor5omL5paH5bqrID4gdGVidW5rb1wgOwor5LiA566H5omAID4gaWtrYXNob1wgOwor5LqI5YKZ6ZqKID4geW9iaXRhaVwgOwor55aR5ZWP56ymID4gZ2ltb25mdVwgOwor5Zu65a6a6LK7ID4ga290ZWloaVwgOwor5piO5rK75bqnID4gbWVpaml6YVwgOwor55CG5oOz5a62ID4gcmlzb3VrYVwgOwor5Zyf5aOH5aC0ID4gZG90YW5iYVwgOwor5LqM5qyh5LyaID4gbmlqaWthaVwgOwor576p5YuZ5oSfID4gZ2ltdWthblwgOwor5LiJ5Y+J6LevID4gc2Fuc2Fyb1wgOwor5rOi5biD6Iy2ID4gaGFidWNoYVwgOwor5LiN5oSb5oOzID4gYnVhaXNvdVwgOwor5LiA566H5bm0ID4gaWtrYW5lblwgOwor5LqI5YKZ6YeRID4geW9iaWtpblwgOwor5LiN5Y+v55+lID4gZnVrYWNoaVwgOwor6I+p5o+Q5a+6ID4gYm9kYWlqaVwgOwor56Gr6buE5bGxID4gaW91eWFtYVwgOwor57Sg5Zug5pWwID4gc29pbnN1dVwgOwor5LuP6Jit6KW/ID4gZnVyYW5zdVwgOwor5LiN5ZCI55CGID4gZnVnb3VyaVwgOwor5o6D6Zmk5ammID4gc291amlmdVwgOwor6YeO5pqu5aSpID4geWFib3RlblwgOwor5a625YW3562JID4ga2FndXRvdVwgOwor6JaU6JaH6ImyID4gYmFyYWlyb1wgOwor5LiN5oSJ5b+rID4gZnV5dWthaVwgOwor6L6y5qmf5YW3ID4gbm91a2lndVwgOwor6Ly46YCB6LK7ID4geXVzb3VoaVwgOwor55yL6K235ammID4ga2FuZ29mdVwgOwor5b6h56We54GrID4gZ29qaW5rYVwgOwor5LqI5YKZ6LuNID4geW9iaWd1blwgOwor5Y+k5paH5pu4ID4ga29tb25qb1wgOwor6Ieq6KGb5qipID4gamllaWtlblwgOwor5o6D6Zmk5ZmoID4gc291amlraVwgOwor55CG5oOz5YyWID4gcmlzb3VrYVwgOwor5ZCI5rCj6YGTID4gYWlraWRvdVwgOwor54K554Gr5ZmoID4gdGVua2FraVwgOwor57695LqM6YeNID4gaGFidXRhZVwgOwor6KaP5rqW5YyWID4ga2lqdW5rYVwgOwor6auY5bqm5beuID4ga291ZG9zYVwgOwor5ZCI5rCX6YGTID4gYWlraWRvdVwgOwor54Sh5Zmo55SoID4gYnVraXlvdVwgOwor5a+E5LuY6YeRID4ga2lmdWtpblwgOwor54Gr5Y+j5rmWID4ga2Frb3Vrb1wgOwor5pS/5rK75bGLID4gc2Vpaml5YVwgOwor5YCL44CF5Lq6ID4ga29rb2ppblwgOwor5Y+v5aGR5YmkID4ga2Fzb3phaVwgOwor5pS/5rK75a62ID4gc2VpamlrYVwgOwor6YGL5Za26LK7ID4gdW4nJ2VpaGlcIDsKK+idpuWkt+iPiiA+IGV6b2dpa3VcIDsKK+S/neitt+aelyA+IGhvZ29yaW5cIDsKK+acqOaIuOeVqiA+IGtpZG9iYW5cIDsKK+a1heefpeaBtSA+IGFzYWRqaWVcIDsKK+mdkuixjOixhiA+IGFvZW5kb3VcIDsKK+Wls+S4iOWkqyA+IGpvam91YnVcIDsKK+WGhuiomOWPtyA+IGVua2lnb3VcIDsKK+S6nOWvkuW4ryA+IGFrYW50YWlcIDsKK+axn+aIuOW3nSA+IGVkb2dhd2FcIDsKK+avlOmbu+iNtyA+IGhpZGVua2FcIDsKK+W5vOWFkOiqniA+IHlvdWppZ29cIDsKK+aal+aal+ijoSA+IGFuJydhbnJpXCA7CivkuI3mtYTloLQgPiBmdWpvdWJhXCA7Civmmpfmmpfoo48gPiBhbicnYW5yaVwgOwor5rmv5rK75aC0ID4gdG91amliYVwgOwor6ISz5ZGz5ZmMID4gbm91bWlzb1wgOwor5a2Q55S76Z2iID4ga29nYW1lblwgOwor5Y+v6KaW5YyWID4ga2FzaGlrYVwgOwor5LiN5rOo5oSPID4gZnVjaHV1aVwgOwor6K236KGb6ImmID4gZ29laWthblwgOwor5qyh5omT6ICFID4gamlkYXNoYVwgOwor5oqr6Zyy5a60ID4gaGlyb3VlblwgOwor6Ieq6KGb5a6YID4gamllaWthblwgOwor55WZ5a6I55WqID4gcnVzdWJhblwgOwor5Lqc6Z+z6YCfID4gYW9uc29rdVwgOwor5b6h5rOo5oSPID4gZ29jaHV1aVwgOwor5Yy756eR5a2mID4gaWthZ2FrdVwgOwor55Ww5pa55oCnID4gaWhvdXNlaVwgOwor54Sh6ZGR5p+7ID4gbXVrYW5zYVwgOwor5LqM55Wq55uuID4gbmliYW5tZVwgOwor56Gs5YyW5rK5ID4ga291a2F5dVwgOwor5pig55S756WtID4gZWlnYXNhaVwgOwor5pig55S756S+ID4gZWlnYXNoYVwgOwor5LiN5q2j6KaPID4gZnVzZWlraVwgOwor6I2K5qOY57eaID4gYmFyYXNlblwgOwor5oWw6ZyK56WtID4gaXJlaXNhaVwgOwor5a2m5qCh5Yy7ID4gZ2Fra291aVwgOwor6YeR5paH5a2XID4ga2lubW9qaVwgOwor5b6h5rOV5bqmID4gZ29oYXR0b1wgOwor5rCX5L+d6aSKID4ga2lob3lvdVwgOwor6YmE54Gr5aC0ID4gdGVra2FiYVwgOwor5Yuk5YuZ5ZOhID4ga2lubXVpblwgOwor55Ww5pif5Lq6ID4gaXNlaWppblwgOwor5pig55S755WMID4gZWlnYWthaVwgOwor5LqU55W/5YaFID4gZ29raW5haVwgOwor5b6h56C0566XID4gZ29oYXNhblwgOwor5pmu5q61552AID4gZnVkYW5naVwgOwor5ZCm5a6a6KqeID4gaGl0ZWlnb1wgOwor6YGV5oay5oCnID4gaWtlbnNlaVwgOwor5aGp5YyW6YqAID4gZW5rYWdpblwgOwor5L+d6K235Y+4ID4gaG9nb3NoaVwgOwor5b6X5oSP5rCXID4gdG9rdWlnZVwgOwor5omL57Sw5belID4gdGV6YWlrdVwgOwor6IiO5Yip5aGpID4gc2hhcmllblwgOwor6Kaq6aas6bm/ID4gb3lhYmFrYVwgOwor6Iie6LiK5a62ID4gYnV0b3VrYVwgOwor5aWH5b2i5YWQID4ga2lrZWlqaVwgOwor5Y2I5b6M5LitID4gZ29nb2p1dVwgOwor6Kmt5byB5a62ID4ga2liZW5rYVwgOwor6IOD5rSX5rWEID4gaXNlbmpvdVwgOwor5LiN5ZCM5YyWID4gZnVkb3VrYVwgOwor55Ww5pWZ5b6SID4gaWt5b3V0b1wgOwor5rmv5Yqg5ribID4geXVrYWdlblwgOwor6Z2e6Kqy56iOID4gaGlrYXplaVwgOwor5ZKM5qW95ZmoID4gd2FnYWtraVwgOwor6YGV5rOV6ICFID4gaWhvdXNoYVwgOwor6Ly46YCB5qmfID4geXVzb3VraVwgOwor5LiO6YeO5YWaID4geW95YXRvdVwgOwor5byV54Gr54K5ID4gaW5rYXRlblwgOwor57695a2Q5p2/ID4gaGFnb2l0YVwgOwor6Z+z5rKZ5rGwID4gb3Rvc2F0YVwgOwor56a+5pys56eRID4ga2Fob25rYVwgOwor5LiN5Y+v5YiGID4gZnVrYWJ1blwgOwor6byg5b6E6YOoID4gc29rZWlidVwgOwor5Lm+6I+T5a2QID4gaGlnYXNoaVwgOwor54Sh5oqA5benID4gbXVnaWtvdVwgOwor6YO96K2w5LyaID4gdG9naWthaVwgOwor5LqI5YKZ5qChID4geW9iaWtvdVwgOwor6Kaz5LiW6Z+zID4ga2FuemVvblwgOwor5Y2K6YGO5Y67ID4gaGFua2Frb1wgOwor5LiN5Y+C5YqgID4gZnVzYW5rYVwgOwor6YGV5Y+N6ICFID4gaWhhbnNoYVwgOwor5oGj5oSP5oCnID4gc2hpaXNlaVwgOwor5LuY5Yqg56iOID4gZnVrYXplaVwgOwor5pmC6KiI5bqnID4gdG9rZWl6YVwgOwor6YOo5bGL5LujID4gaGV5YWRhaVwgOwor5q+N6Z+z5oCnID4gYm9pbnNlaVwgOwor5LiN5b6X5oSPID4gZnV0b2t1aVwgOwor6Zu76Kmx5qmfID4gZGVud2FraVwgOwor54Sh5ouF5L+dID4gbXV0YW5wb1wgOwor5o6q6L6e5rOVID4gc29qaWhvdVwgOwor5YWr5Lmd5YiGID4gaGFra3VidVwgOwor5qC55aSq5p2/ID4gbmVkYWl0YVwgOwor54Gr5Yqg5ribID4gaGlrYWdlblwgOwor5Lqc54eQ6YW4ID4gYXJpbnNhblwgOwor5pmC6KiI5bGLID4gdG9rZWl5YVwgOwor6Z2S5LqM5omNID4gYW9uaXNhaVwgOwor6YeO5pS+5ZuzID4gbm9ob3V6dVwgOwor5bm85YWQ5pyfID4geW91amlraVwgOwor5oyJ5pGp6IaPID4gYW5tYWtvdVwgOwor5rCX6Ium5Yq0ID4ga2lndXJvdVwgOwor5pS/5bqc5qGIID4gc2VpZnVhblwgOwor5LqM546L6ZaAID4gbmlvdW1vblwgOwor5LqI5YKZ5b25ID4geW9iaWVraVwgOwor5LiN6YGT55CGID4gZnVkb3VyaVwgOwor6YeR54Sh5Z6iID4ga2lubXVrdVwgOwor5YG96YCg5Y2wID4gZ2l6b3VpblwgOwor54Sh5om55YikID4gbXVoaWhhblwgOwor5Zuz5pu46LK7ID4gdG9zaG9oaVwgOwor5bm46YGL5YWQID4ga291dW5qaVwgOwor5aGp5rC05rmWID4gZW5zdWlrb1wgOwor5rWB5biD5pysID4gcnVmdWJvblwgOwor5bGx6Iy26IqxID4gc2F6YW5rYVwgOwor56e75rCR5rOVID4gaW1pbmhvdVwgOwor6ay855m+5ZCIID4gb25peXVyaVwgOwor5aWI6Imv55yMID4gbmFyYWtlblwgOwor5LiN5Yud5omLID4gZnVrYXR0ZVwgOwor5aSp6bqp576FID4gdGVucHVyYVwgOwor5LiN5Yip55uKID4gZnVyaWVraVwgOwor5biC5ZCP5ZOhID4gc2hpcmlpblwgOwor5oSP6KaL5pu4ID4gaWtlbnNob1wgOwor5oWw6ZyK5aGUID4gaXJlaXRvdVwgOwor5oiR5Yip5YuJID4gZ2FyaWJlblwgOwor5pOs5a6d54+gID4gZ2lib3NoaVwgOwor5aSn5ZKM57W1ID4geWFtYXRvZVwgOwor5bCP5YiH5omLID4ga29naXR0ZVwgOwor6Lui6Lev5ZmoID4gdGVucm9raVwgOwor5Yik5LqL6KOcID4gaGFuamlob1wgOwor5bGg6JiH5pWjID4gdG9zb3NhblwgOwor5b6h5bqD55uuID4gb2hpcm9tZVwgOwor5Y+C6K2w6ZmiID4gc2FuZ2lpblwgOwor5LqI5YKZ5ZOBID4geW9iaWhpblwgOwor55CG5bel56eRID4gcmlrb3VrYVwgOwor54Gr6JGs5aC0ID4ga2Fzb3ViYVwgOwor5a+S5Z6i6ZuiID4ga2FuZ29yaVwgOwor6Ziy6KGb6LK7ID4gYm91ZWloaVwgOwor6aas5bCP5bGLID4gdW1hZ295YVwgOwor5LqI5YKZ5YW1ID4geW9iaWhlaVwgOwor5bCP6YGT5YW3ID4ga29kb3VndVwgOwor5biM5YWD57SgID4ga2lnZW5zb1wgOwor5LiW55WM6KqeID4gc2VrYWlnb1wgOwor6K236KGb5YW1ID4gZ29laWhlaVwgOwor5b2i6ICM5LiLID4ga2VpamlrYVwgOwor6Z2S6Zu76KmxID4gYW9kZW53YVwgOwor5LqM5p6a55uuID4gbmltYWltZVwgOwor5LiJ5beu6LevID4gc2Fuc2Fyb1wgOwor5LuW5bqc55yMID4gdGFmdWtlblwgOwor5L+d57ea5Yy6ID4gaG9zZW5rdVwgOwor5Ye656i95Y+kID4gZGVnZWlrb1wgOwor5LiN5YW36ICFID4gZnVndXNoYVwgOwor5ryU566X5qmfID4gZW56YW5raVwgOwor5bmy6I+T5a2QID4gaGlnYXNoaVwgOwor6YG65Lyd5rOVID4gaWRlbmhvdVwgOwor5Yy75YyW5a2mID4gaWthZ2FrdVwgOwor6YG65a625pePID4gaWthem9rdVwgOwor5bCP5Yip5Y+jID4ga29yaWtvdVwgOwor5aSp5rCX6YGLID4gdGVua2l1blwgOwor5bqc6K2w5LyaID4gZnVnaWthaVwgOwor5L+d6Zm65Yy7ID4gaG9rZW4nJ2lcIDsKK+atoumfs+WZqCA+IHNoaW9ua2lcIDsKK+WQiOawl+S8miA+IGFpa2lrYWlcIDsKK+mGjemGkOWRsyA+IGRhaWdvbWlcIDsKK+aEj+Wbs+eahCA+IGl0b3Rla2lcIDsKK+WcsOejgeawlyA+IGNoaWppa2lcIDsKK+eUn+aEj+awlyA+IG5hbWFpa2lcIDsKK+Wbm+asoeWFgyA+IHlvamlnZW5cIDsKK+W+oeebrueOiSA+IG9tZWRhbWFcIDsKK+WFrOaWh+aJgCA+IGt1bW9uam9cIDsKK+W+oeW6p+aJgCA+IGdvemFzaG9cIDsKK+Wkp+mLuOWxkSA+IG9nYWt1enVcIDsKK+eUmOa1t+iLlCA+IGFtYW5vcmlcIDsKK+W7uuitsOahiCA+IGtlbmdpYW5cIDsKK+eigeS8muaJgCA+IGdva2Fpam9cIDsKK+mYsueBq+aIuCA+IGJvdWthZG9cIDsKK+eZu+WxseWutiA+IHRvemFua2FcIDsKK+eCiuS6i+WgtCA+IHN1aWppYmFcIDsKK+eEoeaEm+aDsyA+IGJ1YWlzb3VcIDsKK+iLseaWh+enkSA+IGVpYnVua2FcIDsKK+mFuOaAp+mbqCA+IHNhbnNlaXVcIDsKK+Wwiueah+eOiyA+IHNvbicnbm91XCA7CivmtL7nlJ/oqp4gPiBoYXNlaWdvXCA7CivpgbrkvJ3mgKcgPiBpZGVuc2VpXCA7CivljLvnmYLosrsgPiBpcnlvdWhpXCA7CivlpKfnpZbniLYgPiBkYWlzb2Z1XCA7Civou43ojbzliKkgPiBndW5kYXJpXCA7Civnmb3kupzntIAgPiBoYWt1YWtpXCA7CivpqI7ppqzmiKYgPiBraWJhc2VuXCA7Civnm67kuIDmna8gPiBtZWlwcGFpXCA7CivoqJjkuovmlocgPiBraWppYnVuXCA7CivlkozlpKrpvJMgPiB3YWRhaWtvXCA7CivkuojlrprmoYggPiB5b3RlaWFuXCA7CivnrKblj7flmaggPiBmdWdvdWtpXCA7Civmm7joqJjoo5wgPiBzaG9raWhvXCA7Civlv5zmj7Tlm6MgPiBvdWVuZGFuXCA7CivpgbrkvJ3lrZAgPiBpZGVuc2hpXCA7CivpmaTojYnlmaggPiBqb3NvdWtpXCA7Civkuojlrprml6UgPiB5b3RlaWJpXCA7Civkv53mjIHogIUgPiBob2ppc2hhXCA7Civmm7zpmYDnvoUgPiBtYW5kYXJhXCA7CivljZjkvY3lhYMgPiB0YW5pZ2VuXCA7CivmhI/lnLDmgqogPiBpaml3YXJ1XCA7Civnm4rojZLnlLcgPiBtYXN1cmFvXCA7CivkuIrlh7rmnaUgPiBqb3VkZWtpXCA7CivnrKblj7fljJYgPiBmdWdvdWthXCA7CivkuI3nm7jlv5wgPiBmdXNvdW91XCA7Civoi7Hoqp7niYggPiBlaWdvYmFuXCA7Civph43ngavlmaggPiBqdXVrYWtpXCA7CivmkanliKnmlK8gPiBtYXJpc2hpXCA7CivnlbDnq6/oppYgPiBpdGFuc2hpXCA7CivokazlhIDlsYsgPiBzb3VnaXlhXCA7CivpoIXkvY3nva4gPiBrb3VpY2hpXCA7CivljLvluKvms5UgPiBpc2hpaG91XCA7CivokaHokITlnJIgPiBidWRvdWVuXCA7CivkupTmlpfnsbMgPiBnb3RvYmVpXCA7Civlj6/mhJvmsJcgPiBrYXdhaWdlXCA7CivkupTnt5rorZwgPiBnb3NlbmZ1XCA7CivlvqHlupzlhoUgPiBnb2Z1bmFpXCA7CivlrZDppqzluqcgPiBrb3VtYXphXCA7CivlsI/oiqXlrZAgPiBrb2tlc2hpXCA7CivmgZLmuKnlmaggPiBrb3VvbmtpXCA7Civnn6XmgbXogIUgPiBjaGllc2hhXCA7CivpgbrotIjliIYgPiBpem91YnVuXCA7CivlpKrliIDprZogPiB0YWNoaXVvXCA7CivliqnmvJTogIUgPiBqb2Vuc2hhXCA7Civku6PnkIbpg6ggPiBkYWlyaWJ1XCA7Civnp7vli5XkvZMgPiBpZG91dGFpXCA7CivpgYvli5XosrsgPiB1bmRvdWhpXCA7CivlpKnptZ3ntaggPiBiaXJvdWRvXCA7CivkuIDphbjljJYgPiBpc3NhbmthXCA7CivpgaDot53pm6IgPiBlbmt5b3JpXCA7CivkvZDos4DnnIwgPiBzYWdha2VuXCA7Civpq5jpn7Ppg6ggPiBrb3VvbmJ1XCA7CivnlbDnq6/ogIUgPiBpdGFuc2hhXCA7CivlvKXmrKHppqwgPiB5YWppdW1hXCA7CivogJXogJjmqZ8gPiBrb3V1bmtpXCA7CivmhJ/ljJbpmaIgPiBrYW5rYWluXCA7CivkuI3mqZ/lq4wgPiBmdWtpZ2VuXCA7Civpg6jlpJbnp5ggPiBidWdhaWhpXCA7CivkupznhrHluK8gPiBhbmV0dGFpXCA7Civlr4zlo6vlsbEgPiBmdWppc2FuXCA7CivmjIfmj67miYAgPiBzaGlraWpvXCA7CivnlJ/phqTmsrkgPiBraWpvdXl1XCA7CivmtYTnkaDnkoMgPiBqb3VydXJpXCA7Civoo5zkvZDlrpggPiBob3Nha2FuXCA7CivpgY7ljrvlvaIgPiBrYWtva2VpXCA7CivojYnku67lkI0gPiBzb3VnYW5hXCA7CivlvqHmqZ/lq4wgPiBnb2tpZ2VuXCA7CivkuI3lsaXooYwgPiBmdXJpa291XCA7Civmk6zkurrljJYgPiBnaWppbmthXCA7CivliIbluqblmaggPiBidW5kb2tpXCA7Civlh7rnm67ph5EgPiBkZW1la2luXCA7CivlpJzmsb3ou4ogPiB5b2dpc2hhXCA7Civlt6bmtL7ns7sgPiBzYWhha2VpXCA7CivoqZDmrLrnvaogPiBzYWdpemFpXCA7CivppYLpo6nlsYsgPiB1ZG9uJyd5YVwgOwor5aSi5oOz5a62ID4gbXVzb3VrYVwgOwor6KiY6K2c5rOVID4ga2lmdWhvdVwgOwor5LiA5q275b6MID4gaXNzaGlnb1wgOwor6Z2e6KGb55SfID4gaGllaXNlaVwgOwor6Kqk5oqV5LiLID4gZ290b3VrYVwgOwor5LiN6Ieq55SxID4gZnVqaXl1dVwgOwor6Iux5pWw5a2XID4gZWlzdXVqaVwgOwor55+l5oOF5oSPID4gY2hpam91aVwgOwor6aKo5ZGC5qG2ID4gZnVyb29rZVwgOwor6Iux6Kqe5ZyPID4gZWlnb2tlblwgOwor5L2O6Z+z6YOoID4gdGVpb25idVwgOwor5LqM5pyf5Yi2ID4gbmlraXNlaVwgOwor5pOs5aOw6KqeID4gZ2lzZWlnb1wgOwor55So5YuZ5ZOhID4geW91bXVpblwgOwor5b6h6Ium5Yq0ID4gZ29rdXJvdVwgOwor5pyq55m76KiYID4gbWl0b3VraVwgOwor57Ch5piT5YyWID4ga2FuJydpa2FcIDsKK+S4gOmBjuaApyA+IGlra2FzZWlcIDsKK+mBi+mAgeiyuyA+IHVuc291aGlcIDsKK+WMu+W4q+S8miA+IGlzaGlrYWlcIDsKK+iHquWPmeS8nSA+IGppam9kZW5cIDsKK+Wkqeawl+WxiyA+IHRlbmtpeWFcIDsKK+mbo+aYk+W6piA+IG5hbicnaWRvXCA7Civku67mlbDpg6ggPiBrYXN1dWJ1XCA7CivljYHlrZfot68gPiBqdXVqaXJvXCA7CivpvKDouYrpg6ggPiBzb2tlaWJ1XCA7CivosqDnrKblj7cgPiBmdWZ1Z291XCA7CivlpKflvqHmiYAgPiBvb2dvc2hvXCA7CivliIbluIPlm7MgPiBidW5wdXp1XCA7Civoo73lm7PlrrYgPiBzZWl6dWthXCA7CivmiKbmmYLkuIsgPiBzZW5qaWthXCA7CivlpKnmsJflm7MgPiB0ZW5raXp1XCA7Civos5vnvo7mrYwgPiBzYW5iaWthXCA7Civou43kuovosrsgPiBndW5qaWhpXCA7Civngo7lpKnkuIsgPiBlbnRlbmthXCA7CivogqXmuoDlhZAgPiBoaW1hbmppXCA7CivmtarmvKvmtL4gPiByb21hbmhhXCA7Civotbfph43mqZ8gPiBraWp1dWtpXCA7CivlnKfnoJXmqZ8gPiBhc3NhaWtpXCA7Civlm57ot6/lm7MgPiBrYWlyb3p1XCA7CivlhbXlmajluqsgPiBoZWlraWtvXCA7CivlspDpmJznnIwgPiBnaWZ1a2VuXCA7Civlurbli5noqrIgPiBzaG9tdWthXCA7Civpm6LnuIHnirYgPiByaWVuam91XCA7CivmraPopo/ljJYgPiBzZWlraWthXCA7Civku4rlh7rmnaUgPiBpbWFkZWtpXCA7CivmpJzms6LlmaggPiBrZW5wYWtpXCA7CivntbXlj4zntJkgPiBlem91c2hpXCA7CivkuIvku5jph5EgPiBrYWZ1a2luXCA7Civpgb/pm6PmiYAgPiBoaW5hbmpvXCA7CivniYfmhI/lnLAgPiBrYXRhaWppXCA7CivljLvlrabpg6ggPiBpZ2FrdWJ1XCA7CivkuojloLHpn7MgPiB5b2hvdW9uXCA7CivpoqjlkYLku6MgPiBmdXJvZGFpXCA7Civlvoznn6XmgbUgPiBhdG9kamllXCA7Civlt67mqZ/plqIgPiBzYWtpa2FuXCA7Civlp5Tlk6HplbcgPiBpaW5jaG91XCA7CivoqZDmrLrluKsgPiBzYWdpc2hpXCA7CivlpJbnpZbniLYgPiBnYWlzb2Z1XCA7Civoq5bnkIblkowgPiByb25yaXdhXCA7Civph47llrblnLAgPiB5YWVpY2hpXCA7Civpm7Dlm7LmsJcgPiBmdW4nJ2lraVwgOwor5Zug576O57eaID4gaW5iaXNlblwgOwor5rCX5LiI5aSrID4ga2lqb3VidVwgOwor5Yid5pyf5YyWID4gc2hva2lrYVwgOwor5q2p6KGM5ZmoID4gaG9rb3VraVwgOwor5rmv6LGG6IWQID4geXVkb3VmdVwgOwor6KOP6IOM5oi4ID4gdXJhc2Vkb1wgOwor5Yqg566X5qmfID4ga2FzYW5raVwgOwor5pS+55Sf5LyaID4gaG91am91ZVwgOwor6IKy5YWQ6ZmiID4gaWt1amlpblwgOwor5LiN5L2c54K6ID4gZnVzYWt1aVwgOwor5q2m6KOF5YW3ID4gYnVzb3VndVwgOwor5LiL6aeE55WqID4gZ2V0YWJhblwgOwor6Ieq5YuV5YyWID4gamlkb3VrYVwgOwor54Sh6YGg5oWuID4gYnVlbnJ5b1wgOwor6YGL5YuV5aC0ID4gdW5kb3ViYVwgOwor5a626KiI6LK7ID4ga2FrZWloaVwgOwor6Z+z5qW95a62ID4gb25nYWtrYVwgOwor5aSW56WW5q+NID4gZ2Fpc29ib1wgOwor5Yq05YuZ6KqyID4gcm91bXVrYVwgOwor54Sh6LuM6YGTID4gbXVraWRvdVwgOwor5LiN5L2c5rOVID4gYnVzYWhvdVwgOwor5Y2B5a2X54GrID4ganV1amlrYVwgOwor6IOD55eZ5pSjID4gaWtlaXJlblwgOwor6YGL5YuV5ZOhID4gdW5kb3VpblwgOwor5qmf5qKw6KqeID4ga2lrYWlnb1wgOwor576O5a656ZmiID4gYml5b3VpblwgOwor5LiA6Lui5qmfID4gaXR0ZW5raVwgOwor5p2T5paH5a2XID4gc2hhbW9qaVwgOwor5o6i5p+75qmfID4gdGFuc2FraVwgOwor55Sw6IiO5a62ID4gaW5ha2F5YVwgOwor6YGL6Lui6LK7ID4gdW50ZW5oaVwgOwor5qmZ55qu5rK5ID4gdG91aGl5dVwgOwor6YGO5bm05bqmID4ga2FuZW5kb1wgOwor6YGL5YuV5YW3ID4gdW5kb3VndVwgOwor5b6h5a2Y55+lID4gZ296b25qaVwgOwor5a625pS/56eRID4ga2FzZWlrYVwgOwor5bCP5aWH6bqXID4ga29naXJlaVwgOwor56e75L2P6ICFID4gaWp1dXNoYVwgOwor6YGT5YW35bGLID4gZG91Z3V5YVwgOwor5ZCM576p6KqeID4gZG91Z2lnb1wgOwor5qih5pOs5oimID4gbW9naXNlblwgOwor6JKy5YWs6IuxID4gdGFucG9wb1wgOwor56i95Y+k552AID4ga2Vpa29naVwgOwor5LiL5LiW6KmxID4gZ2VzZXdhXCA7Civov6bmpbznvoUgPiBrYXJ1cmFcIDsKK+aJi+W/oOWunyA+IHRlbWFtZVwgOwor6aeE5rSS6JC9ID4gZGFqYXJlXCA7CivkuIvpp4TlsYsgPiBnZXRheWFcIDsKK+mnhOazleieuiA+IGRhYm9yYVwgOwor6YGO5L+d6K23ID4ga2Fob2dvXCA7CivpnZ7llrbliKkgPiBoaWVpcmlcIDsKK+e1jOe3r+WEgCA+IGtlaWlnaVwgOwor5ZGR5YW16KGbID4gbm9uYmVlXCA7CivkuI3nvqnnkIYgPiBmdWdpcmlcIDsKK+acieaEj+W3riA+IHl1dWlzYVwgOwor6auY57ev5bqmID4ga291aWRvXCA7CivkuI3osp7lr50gPiBmdXRlbmVcIDsKK+atr+WMu+iAhSA+IGhhaXNoYVwgOwor5Ly86aGU57W1ID4gbmlnYW9lXCA7Civmra/np5HljLsgPiBzaGlrYWlcIDsKK+eBq+S6i+WgtCA+IGthamliYVwgOwor6LGq6Zuo56aNID4gZ291dWthXCA7Civkupzpurvoo70gPiBhbWFzZWlcIDsKK+S8vOmhlOeUuyA+IG5pZ2FvZVwgOwor6aeE6YWS6JC9ID4gZGFqYXJlXCA7CivlsbHnvorluqcgPiB5YWdpemFcIDsKK+WNkuWhlOWphiA+IHNvdG9iYVwgOwor5Lqc6bq76ImyID4gYW1haXJvXCA7CivpnZLmtbfoi5QgPiBhb25vcmlcIDsKK+S8vOmdnuimqiA+IGVzZW95YVwgOwor5Lqc6bq757O4ID4gYW1haXRvXCA7Civlha3ljYHot68gPiBtdXNvamlcIDsKK+S6nOa4qeW4ryA+IGFvbnRhaVwgOwor5L2Z5omA6KaLID4geW9zb21pXCA7Civlp5Tlk6HkvJogPiBpaW5rYWlcIDsKK+S+neWtmOW6piA+IGl6b25kb1wgOwor6Zi/5YOn56WHID4gYXNvdWdpXCA7CivlhavljYHot68gPiB5YXNvamlcIDsKK+S8iuWLouidpiA+IGlzZWViaVwgOwor5LyK5Yui6JuvID4gaXNlZWJpXCA7Civmm77npZbniLYgPiBoaWppamlcIDsKK+imi+aghOWdiiA+IG1pZWJvdVwgOwor5Lqc6Ymb54mIID4gYWVuYmFuXCA7CivlvqHnjKrlj6MgPiBvY2hva29cIDsKK+mujuS4puWlsyA+IGFpbmFtZVwgOwor5bmz5piT5YyWID4gaGVpaWthXCA7Civlronkv53nkIYgPiBhbnBvcmlcIDsKK+abvuelluavjSA+IGhpYmFiYVwgOwor57GQ5qSF5a2QID4gdG91aXN1XCA7CivlsI/mloflrZcgPiBrb21vamlcIDsKK+S9meaJgOebriA+IHlvc29tZVwgOwor5LiL6Zmi6K2wID4ga2FpbmdpXCA7CivlrbXljJblmaggPiBmdWtha2lcIDsKK+S6nOmJm+advyA+IGFlbmJhblwgOwor5omL55yf5Ly8ID4gdGVtYW5lXCA7CivkuI3lpoLmhI8gPiBmdW55b2lcIDsKK+a5r+aWh+WtlyA+IHl1bW9qaVwgOwor55Ww5qmf56iuID4gaWtpc2h1XCA7CivkupznoJLphbggPiBhaGlzYW5cIDsKK+mYv+S/rue+hSA+IGFzaHVyYVwgOwor5b6h6ZuR54WuID4gb3pvdW5pXCA7Civnmq7ohprnp5EgPiBoaWZ1a2FcIDsKK+W8n+Wwj+eItiA+IG90b29qaVwgOwor5Li75rK75Yy7ID4gc2h1amlpXCA7CivkuI3oqqDmhI8gPiBmdXNlaWlcIDsKK+W+oeipoOatjCA+IGdvZWlrYVwgOwor6IOD5LiL5Z6CID4gaWthc3VpXCA7CivliLfmr5vnm64gPiBoYWtlbWVcIDsKK+eUsueDj+iziiA+IGtvdWlrYVwgOwor5LyK6YGU552AID4gZGF0ZWdpXCA7CivlvqHopovoiJ4gPiBvbWltYWlcIDsKK+iDjOaWh+WtlyA+IHNlbW9qaVwgOwor5YSq5puH6I+vID4gdWRvbmdlXCA7CivlvqHopYHopJMgPiBvbXV0c3VcIDsKK+ilv+ePreeJmSA+IHN1cGVpblwgOwor5LiN6KaL55uuID4gbWlqaW1lXCA7CivolY7puqbnsokgPiBzb2Jha29cIDsKK+aireWtkOmtmiA+IGthbWFzdVwgOwor5LiN6ZqP5oSPID4gZnV6dWlpXCA7CivntKvpmb3oirEgPiBhamlzYWlcIDsKK+mHjuiJr+edgCA+IG5vcmFnaVwgOwor5LqO6Jit55uGID4gdXJhYm9uXCA7Civoi6blkbPntKAgPiBrdW1pc29cIDsKK+eEoeS6i+aVhSA+IG11amlrb1wgOwor5LiA5pio5pelID4gb3RvdG9pXCA7Civlh7rmnaXlgKQgPiBkZWtpbmVcIDsKK+S8iuWLouS4uSA+IGlzZXRhblwgOwor6aOy5YW16KGbID4gbm9uYmVlXCA7CivmraTlh6bnrYkgPiBrb2tvcmFcIDsKK+mcsuilv+S6nCA+IHJvc2hpYVwgOwor55uu5Yy76ICFID4gbWVpc2hhXCA7CivlpoLkvZXmp5ggPiBpa2F5b3VcIDsKK+egtOmtlOefoiA+IGhhbWF5YVwgOwor55u46YOo5bGLID4gYWliZXlhXCA7CivlraTlhZDpmaIgPiBrb2ppaW5cIDsKK+S7iuaXpeaXpSA+IGt5b3ViaVwgOwor6I285p6z5bC8ID4gZGFraW5pXCA7CivmtbfogIHpjKAgPiBlYmlqb3VcIDsKK+iVjum6puWxiyA+IHNvYmF5YVwgOwor6ZuM5o275a2QID4gbWVuZWppXCA7Civlj6TkuovoqJggPiBrb2ppa2lcIDsKK+ecn+mdouebriA+IG1hamltZVwgOwor6YKj55Sx5LuWID4gbmF5dXRhXCA7CivlgLbmpb3pg6ggPiBrdXJhYnVcIDsKK+Wxi+agueWxiyA+IHlhbmV5YVwgOwor5rW36ICB6Iy2ID4gZWJpY2hhXCA7CivpmL/lqr3muK8gPiBhbWFrb3VcIDsKK+ejgeaWueS9jSA+IGppaG91aVwgOwor6Y2b5Ya25bGLID4ga2FqaXlhXCA7Civloanln7rluqYgPiBlbmtpZG9cIDsKK+efoue+veaguSA+IHlhYmFuZVwgOwor55m+5ZCI5qC5ID4geXVyaW5lXCA7CivpmL/nvoXmvKIgPiBhcmFrYW5cIDsKK+mHjui3r+WtkCA+IG5vamlrb1wgOwor6ZuM6J665a2QID4gbWVuZWppXCA7CivlnJ/kuIvluqcgPiBkb2dlemFcIDsKK+aFsOWuieiAhSA+IGlhbnNoYVwgOwor57W15pel6KiYID4gZW5pa2tpXCA7CivpmYDnvoXlsLwgPiBkYXJhbmlcIDsKK+e+heaWueS9jSA+IHJhaG91aVwgOwor55Ww5L2T5a2XID4gaXRhaWppXCA7CivlkIzmhI/oqp4gPiBkb3VpZ29cIDsKK+mfi+mnhOWkqSA+IGlkYXRlblwgOwor54K65pS/5a62ID4gaXNlaWthXCA7Civkuozluqbnm64gPiBuaWRvbWVcIDsKK+aVsOWvhOWxiyA+IHN1a2l5YVwgOwor5ZCM5oSP576pID4gZG91aWdpXCA7CivlpKfooojoo58gPiBvb2dlc2FcIDsKK+S6i+WLmeWxiyA+IGppbXV5YVwgOwor5rWu5LiW57W1ID4gdWtpeW9lXCA7CivnkLXnkLbmuZYgPiBiaXdha29cIDsKK+S6i+WLmeWutiA+IGppbXVrYVwgOwor5Yqg55WZ5aSaID4ga2FydXRhXCA7CivkuI3lj6/pgb8gPiBmdWthaGlcIDsKK+S6i+WLmeWZqCA+IGppbXVraVwgOwor5b6h5rSS6JC9ID4gb3NoYXJlXCA7Civkuovli5nlk6EgPiBqaW11aW5cIDsKK+akjeacqOWxiyA+IHVla2l5YVwgOwor5LiN5Y+v6KqkID4gZnVrYWdvXCA7CivlvqHph4jov6YgPiBvc2hha2FcIDsKK+WNsOWtl+apnyA+IGluamlraVwgOwor56Gr6buE5rOJID4gaW91c2VuXCA7CivljZLpg73lqYYgPiBzb3RvYmFcIDsKK+WBieS4iOWkqyA+IGlqb3VmdVwgOwor5biD5rW36IuUID4gZnVub3JpXCA7CivnnLzljLvogIUgPiBtZWlzaGFcIDsKK+ecvOenkeWMuyA+IGdhbmthaVwgOwor5oWw5a6J5LyaID4gaWFua2FpXCA7CivmiqvpnLLnm64gPiBoaXJvbWVcIDsKK+S6iOWCmemmrCA+IHlvYmliYVwgOwor5rCX5YyW5ZmoID4ga2lrYWtpXCA7CivmrabogIXntbUgPiBtdXNoYWVcIDsKK+miqOWcn+iomCA+IGZ1ZG9raVwgOwor5b6h5rKz56ulID4gb2thcHBhXCA7CivmhJvnhZnlrrYgPiBhaWVua2FcIDsKK+mDqOWxi+edgCA+IGhleWFnaVwgOwor5LqI5YKZ6LK7ID4geW9iaWhpXCA7CivngJjpgY7lmaggPiByb2tha2lcIDsKK+ijnOWKqeWToSA+IGhvam9pblwgOwor5q+U5LiY5bC8ID4gYmlrdW5pXCA7Civms6LmraLloLQgPiBoYXRvYmFcIDsKK+aYk+WLleW6piA+IGlkb3Vkb1wgOwor57W15Zuz6Z2iID4gZXp1bWVuXCA7Civoo7jlqabnlLsgPiByYWZ1Z2FcIDsKK+atqeS4gOatqSA+IGhvaXBwb1wgOwor5LiJ5Y2B6LevID4gbWlzb2ppXCA7CivkuI3mspnmsbAgPiBidXNhdGFcIDsKK+S4jeatu+i6qyA+IGZ1amltaVwgOwor5ZGK5aSp5a2QID4gaGliYXJpXCA7CivliqDlpYjpmYAgPiBrYW5hZGFcIDsKK+S7pemBoOaoqSA+IGllbmtlblwgOwor5pa96aST6ay8ID4gc2VnYWtpXCA7CivkuInph43nnIwgPiBtaWVrZW5cIDsKK+W+oeaymeaxsCA+IGdvc2F0YVwgOwor5q+b57m75a2QID4ga2VqdXN1XCA7CivkuI3lkIzmhI8gPiBmdWRvdWlcIDsKK+S6iOWCmeenkSA+IHlvYmlrYVwgOwor5rGf5oi45YmNID4gZWRvbWFlXCA7Civnm4LomK3nm4YgPiB1cmFib25cIDsKK+S/neitt+WMuiA+IGhvZ29rdVwgOwor5rWF6IyF55SfID4gYXNhaml1XCA7CivlrrblhbflsYsgPiBrYWd1eWFcIDsKK+Wwj+awl+WRsyA+IGtva2ltaVwgOwor5aSp6JqV57O4ID4gdGVndXN1XCA7CivnlbDmlofljJYgPiBpYnVua2FcIDsKK+WknOimi+S4liA+IHlvbWlzZVwgOwor5L2N55u45beuID4gaXNvdXNhXCA7CivmlbDlpYflsYsgPiBzdWtpeWFcIDsKK+iWlOiWh+WckiA+IGJhcmFlblwgOwor6YGO5rih5pyfID4ga2F0b2tpXCA7CivlsYXloLTmiYAgPiBpYmFzaG9cIDsKK+mBleWSjOaEnyA+IGl3YWthblwgOwor55Sf6JWO6bqmID4ga2lzb2JhXCA7Civlr53plpPnnYAgPiBuZW1ha2lcIDsKK+S4ieWNgeaXpSA+IG1pc29rYVwgOwor5LiN5rCX5ZGzID4gYnVraW1pXCA7CivmnIDkuIvkvY0gPiBzYWlrYWlcIDsKK+W+oeats+aariA+IG9zZWlib1wgOwor5LqI5YKZ5ZOhID4geW9iaWluXCA7CivmmKDnlLvljJYgPiBlaWdha2FcIDsKK+asp+WNsOiqniA+IG91aW5nb1wgOwor5Zuz5qGI5a62ID4genVhbmthXCA7Civlv5zmj7TmrYwgPiBvdWVua2FcIDsKK+mfi+mZgOWkqSA+IGlkYXRlblwgOwor5q2M6Iie5LyOID4ga2FidWtpXCA7CivpmL/omK3pmYAgPiBvcmFuZGFcIDsKK+atjOeVmeWkmiA+IGthcnV0YVwgOwor54Sh5oWI5oKyID4gbXVqaWhpXCA7Civlj5foqbHlmaggPiBqdXdha2lcIDsKK+e/u+i7iumtmiA+IG1hbmJvdVwgOwor5LiN5Ye65p2lID4gZnVkZWtpXCA7Civpm5HprZrlr50gPiB6YWtvbmVcIDsKK+S8iuWkquWIqSA+IGl0YXJpaVwgOwor6aWC6aOp57KJID4gdWRvbmtvXCA7CivnlJjmtbfogIEgPiBhbWFlYmlcIDsKK+Wwj+mmrOm5vyA+IGtvYmFrYVwgOwor5b6h6I+T5a2QID4gb2thc2hpXCA7CivnlKPnp5HljLsgPiBzYW5rYWlcIDsKK+S4ieefpeWcnyA+IHRhdGFraVwgOwor6LOT5L2N6KqeID4gaGluaWdvXCA7CivmkanojqvmnrMgPiBtYW1ha2lcIDsKK+Wwj+eZvuWQiCA+IHNheXVyaVwgOwor54Sh5rKZ5rGwID4gYnVzYXRhXCA7Civng4/luL3lrZAgPiBlYm9zaGlcIDsKK+ellueItuavjSA+IHNvZnVib1wgOwor5Y2B5YWt5aScID4gaXpheW9pXCA7Civov4Llm57ot68gPiB1a2Fpcm9cIDsKK+ilpOikuOWutiA+IGJvcm95YVwgOwor6Z2S57Sr6JiHID4gYW9qaXNvXCA7Civmv77pgY7lmaggPiByb2tha2lcIDsKK+S4jeWFt+WQiCA+IGZ1Z3VhaVwgOwor55+l5oG15q2vID4gY2hpZWJhXCA7CivkuI3otbfoqLQgPiBmdWtpc29cIDsKK+eEoeWMu+adkSA+IG11aXNvblwgOwor5p6c5qi55ZySID4ga2FqdWVuXCA7CivlvqHou6LlqYYgPiBvdGVuYmFcIDsKK+miqOWRguWxiyA+IGZ1cm95YVwgOwor5oSP5ZGz6KuWID4gaW1pcm9uXCA7CivnhKHpgqrmsJcgPiBtdWpha2lcIDsKK+miqOWRguWgtCA+IGZ1cm9iYVwgOwor6Zi/6JiH5bGxID4gYXNvc2FuXCA7Civpro7prZrlpbMgPiBhaW5hbWVcIDsKK+W+oeWutuiKuCA+IG9pZWdlaVwgOwor54Sh5rCX5ZGzID4gYnVraW1pXCA7CivlhoXnp5HljLsgPiBuYWlrYWlcIDsKK+Wkp+mDqOWxiyA+IG9vYmV5YVwgOwor5aCV6IOO5Yy7ID4gZGF0YWlpXCA7CivkuI3nlKjmhI8gPiBmdXlvdWlcIDsKK+S5heaFiOebriA+IGt1amltZVwgOwor5aSn5b6h5LujID4gb29taXlvXCA7CivmnInmhI/nvqkgPiB5dXVpZ2lcIDsKK+mHjuiWlOiWhyA+IG5vYmFyYVwgOwor5qKF6Zuo5pyfID4gYmFpdWtpXCA7CivogLPpvLvnp5EgPiBqaWJpa2FcIDsKK+eUu+aetuW6pyA+IGdha2F6YVwgOwor5LiN5a6J5rCXID4gZnVhbmdlXCA7CivlpKflh7rmnaUgPiBvb2Rla2lcIDsKK+miqOmCquawlyA+IGthemVrZVwgOwor5q2m5Zmo5bqrID4gYnVraWtvXCA7CivkvIrlkYLms6IgPiBpcm9oYVwgOwor5Lqc6Ymb6I+vID4gYWVua2FcIDsKK+e2reaMgeiyuyA+IGlqaWhpXCA7Civkvp3kvLDlnLAgPiBla29qaVwgOwor5oSP5rCX5ZywID4gaWt1amlcIDsKK+eni+WIgOmtmiA+IHNhbm1hXCA7Civlhavph43mra8gPiB5YWViYVwgOwor5aSn5Lyv54i2ID4gb29vamlcIDsKK+Wkp+S8r+avjSA+IG9vb2JhXCA7CivntKvpm7Loi7EgPiBnZW5nZVwgOwor5pyq5pu+5pyJID4gbWl6b3VcIDsKK+S8r+eItuiytCA+IG9qaWtpXCA7Civkupzpurvku4EgPiBhbWFuaVwgOwor5LqU5Y2B6LevID4gaXNvamlcIDsKK+acqOS5g+S8iiA+IG1paXJhXCA7CivkuozljYHph40gPiBoYXRhZVwgOwor5L2c5YuZ6KGjID4gc2FtdWVcIDsKK+WxheeVmeWuiCA+IGlydXN1XCA7Civlr53mpIXlrZAgPiBuZWlzdVwgOwor5bqn5qSF5a2QID4gemFpc3VcIDsKK+mbquiKseiPnCA+IG9rYXJhXCA7Civlhavnmb7lsYsgPiB5YW95YVwgOwor56Gr6buE6I+vID4gaW91a2FcIDsKK+Wwj+aEj+awlyA+IGtvaWtpXCA7CivlvqHnpZ7phZIgPiBvbWlraVwgOwor5LyK5L2Q5pyoID4gaXNha2lcIDsKK+aFsOWuieWppiA+IGlhbmZ1XCA7CivlpKfopovlvpcgPiBvb21pZVwgOwor5bCE5omL5bqnID4gaXRlemFcIDsKK+S4jeaEj+awlyA+IGJ1aWtpXCA7CivojY/og6HpursgPiBlZ29tYVwgOwor57W15paH5a2XID4gZW1vamlcIDsKK+S6lOWAjeWtkCA+IGZ1c2hpXCA7CivmgbXmr5Tlr78gPiBlYmlzdVwgOwor55WZ5a6I5bGFID4gcnVzdWlcIDsKK+S4jeW+l+aJiyA+IGZ1ZXRlXCA7CivnhKHmhI/nvqkgPiBtdWlnaVwgOwor5L6d5oCZ5ZywID4gZWtvamlcIDsKK+mmmeWFt+W4qyA+IHlhc2hpXCA7CivlpKflj5TniLYgPiBvb29qaVwgOwor54Sh5oSP5ZGzID4gbXVpbWlcIDsKK+Wkp+WPlOavjSA+IG9vb2JhXCA7CivmhI/lm7rlnLAgPiBpa29qaVwgOwor5b6h6L6e5YSAID4gb2ppZ2lcIDsKK+mYv+W8pemZgCA+IGFtaWRhXCA7CivlsYXlkIjpgZMgPiBpYWRvdVwgOwor5pyq6YCa5aWzID4gb2Jva29cIDsKK+WbsueCieijjyA+IGlyb3JpXCA7CivlvqHkuJbovp4gPiBvc2VqaVwgOwor5aSW56eR5Yy7ID4gZ2VrYWlcIDsKK+efs+aWkemtmiA+IHVndWlcIDsKK+WmgumbqOmcsiA+IGpvcm9cIDsKK+eZvuiIjOmzpSA+IG1venVcIDsKK+a1ruWhteWtkCA+IHVua2FcIDsKK+S6nOe0sOS6nCA+IGFqaWFcIDsKK+S8vOiAjOmdniA+IGVzZVwgOwor5piU6KmxID4gbXVrYXNoaWJhbmFzaGlcIDsKK+S6peW5tCA+IGlub3NoaXNoaWRvc2hpXCA7CivoqbHoqbEgPiBoYW5hc2hpYmFuYXNoaVwgOwor5LiL5ZSHID4gc2hpdGFrdWNoaWJpcnVcIDsKK+aYlOaYlCA+IG11a2FzaGltdWthc2hpXCA7CivmmJTjgIUgPiBtdWthc2hpbXVrYXNoaVwgOwor6Kmx44CFID4gaGFuYXNoaWJhbmFzaGlcIDsKK+engeeriyA+IHdhdGFrdXNoaXJpdHN1XCA7Civmh5DliIAgPiBmdXRva29yb2dhdGFuYVwgOwor5b+d5raZID4ga2F0YWppa2VuYW1pZGFcIDsKK+WNl+adsSA+IG1pbmFtaWhpZ2FzaGlcIDsKK+WPpOWFtSA+IGZ1cnV0c3V3YW1vbm9cIDsKK+WGhei4nSA+IHVjaGlrdXJ1YnVzaGlcIDsKK+iIjOm8kyA+IHNoaXRhdHN1ZHp1bWlcIDsKK+WBpeiAhSA+IHNoaXRhdGFrYW1vbm9cIDsKK+ahnOelrSA+IHNha3VyYW1hdHN1cmlcIDsKK+S5s+eqhCA+IGNoaWNoaXNoaWJvcmlcIDsKK+izouaJgCA+IGthc2hpa29kb2tvcm9cIDsKK+mdoumtgiA+IHRzdXJhZGFtYXNoaWlcIDsKK+S7j+S9nCA+IGhvdG9rZWR6dWt1cnVcIDsKK+adseWNlyA+IGhpZ2FzaGltaW5hbWlcIDsKK+WkqeeJmyA+IGthbWlraXJpbXVzaGlcIDsKK+WkouW5uyA+IHl1bWVtYWJvcm9zaGlcIDsKK+aBmeiZqyA+IHRzdXRzdWdhbXVzaGlcIDsKK+engeWFsSA+IHdhdGFrdXNoaWRvbW9cIDsKK+engeS6iyA+IHdhdGFrdXNoaWdvdG9cIDsKK+mDveW/mCA+IG1peWFrb3dhc3VyZVwgOwor6YGT5qiZID4gbWljaGlzaGlydWJlXCA7CivovrvnpL4gPiB0c3VqaXlhc2hpcm9cIDsKK+iLpee0qyA+IHdha2FtdXJhc2FraVwgOwor55Wz6bCvID4gdGF0YW1paXdhc2hpXCA7Civnm7LmmqYgPiBtZWt1cmFnb3lvbWlcIDsKK+iFuem8kyA+IGhhcmF0c3VkenVtaVwgOwor5YaF5oeQID4gdWNoaWJ1dG9rb3JvXCA7CivpsLvkuLwgPiB1bmFnaWRvbmJ1cmlcIDsKK+i6vuaWuSA+IHNoaXRzdWtla2F0YVwgOwor5YO75b+DID4gaGlnYW1pZ29rb3JvXCA7CivmpL/msrkgPiB0c3ViYWtpYWJ1cmFcIDsKK+afj+mkhSA+IGthc2hpd2Ftb2NoaVwgOwor5p+E6aCtID4gdHN1a2FnYXNoaXJhXCA7Civkv4Tnm7IgPiBuaXdha2FtZWt1cmFcIDsKK+aeleipniA+IG1ha3VyYWtvdG9iYVwgOwor5YCZ5omAID4gc291cm91dG9rb3JvXCA7CivmoYLnlLcgPiBrYXRzdXJhb3Rva29cIDsKK+WxseaHkCA+IHlhbWFmdXRva29yb1wgOwor5Li86aOvID4gZG9uYnVyaW1lc2hpXCA7CivkuLzpiaIgPiBkb25idXJpYmFjaGlcIDsKK+WAkuS6iyA+IHNha2FzYW1hZ290b1wgOwor5pqB6ZeHID4gYWthdHN1a2l5YW1pXCA7Civmnb7mr6wgPiBtYXRzdXBva2t1cmlcIDsKK+mgreiZsSA+IGF0YW1hc2hpcmFtaVwgOwor5p2+5p6XID4gbWF0c3ViYXlhc2hpXCA7CivmnZ/mn7EgPiB0c3VrYWJhc2hpcmFcIDsKK+S7j+W/gyA+IGhvdG9rZWdva29yb1wgOwor5pyq5bm0ID4gaGl0c3VqaWRvc2hpXCA7CivosLfmh5AgPiB0YW5pYnV0b2tvcm9cIDsKK+mbgemqqCA+IGthcmlnYW5lYm9uZVwgOwor5p2x5Y+jID4gaGlnYXNoaWd1Y2hpXCA7Civmna/kuosgPiBzYWthenVraWdvdG9cIDsKK+eLrOaelSA+IGhpdG9yaW1ha3VyYVwgOwor5LiA5aGKID4gaGl0b2thdGFtYXJpXCA7CivlqJjlv4MgPiBtdXN1bWVnb2tvcm9cIDsKK+Wkj+elrSA+IG5hdHN1bWF0c3VyaVwgOwor5piU5byPID4gbXVrYXNoaXNoaWtpXCA7CivlprnlqJggPiBpbW91dG9tdXN1bWVcIDsKK+mcnOafsSA+IHNoaW1vYmFzaGlyYVwgOwor5pif5Y2wID4gaG9zaGlqaXJ1c2hpXCA7CivooovpvKAgPiBmdWt1cm9uZXp1bWlcIDsKK+e2muafhCA+IHRzdWR6dWtpZ2FyYVwgOwor5Zyf6JuNID4gdHN1Y2hpYm90YXJ1XCA7CivlnJ/nhZkgPiB0c3VjaGlrZW11cmlcIDsKK+aHkOmKrSA+IGZ1dG9rb3JvemVuaVwgOwor6Yu46a6rID4gbm9rb2dpcml6YW1lXCA7CivlnJ/ln4MgPiB0c3VjaGlib2tvcmlcIDsKK+ibjeiiiyA+IGhvdGFydWJ1a3Vyb1wgOwor5oeQ57SZID4gZnV0b2tvcm9nYW1pXCA7Civnp4HpgZQgPiB3YXRhc2hpdGFjaGlcIDsKK+aJgOaJgCA+IHRva29yb2Rva29yb1wgOwor6YeR6Yu4ID4ga2FuZW5va29naXJpXCA7CivmiK/kuosgPiB0YXdhbXVyZWdvdG9cIDsKK+WTgeW9oiA+IHNoaW5ha2F0YWNoaVwgOwor5Yui6LuKID4gaGF6dW1pZ3VydW1hXCA7Civlk4Dlk4kgPiBrYW5hc2hpaWthbmFcIDsKK+aJgOOAhSA+IHRva29yb2Rva29yb1wgOwor5rC055uDID4gbWl6dXNha2F6dWtpXCA7CivljIXntJkgPiB0c3V0c3VtaWdhbWlcIDsKK+awtOadryA+IG1penVzYWthenVraVwgOwor5biv6Yu4ID4gb2Jpbm9rb2dpcmlcIDsKK+WPrOS9vyA+IG1lc2hpdHN1a2FpXCA7Civlipvnn7MgPiBjaGlrYXJhaXNoaVwgOwor55m96bygID4gc2hpcm9uZXp1bWlcIDsKK+WKm+eYpCA+IGNoaWthcmFrb2J1XCA7CivlipvmsLQgPiBjaGlrYXJhbWl6dVwgOwor5Y2X5Y+jID4gbWluYW1pZ3VjaGlcIDsKK+WKm+alrSA+IGNoaWthcmF3YXphXCA7CivpgIbnnasgPiBzYWthbWF0c3VnZVwgOwor6bC556+AID4ga2F0c3VvYnVzaGlcIDsKK+WFnOiZqyA+IGthYnV0b211c2hpXCA7CivlvaLkvZMgPiBuYXJpa2F0YWNoaVwgOwor5bqK5p+xID4gdG9rb2Jhc2hpcmFcIDsKK+WHuuayoSA+IHNodXRzdWJvdHN1XCA7Civlt6bnq68gPiBoaWRhcmloYXNoaVwgOwor5be055OmID4gdG9tb2VnYXdhcmFcIDsKK+WIh+aXpSA+IHNoaW1la2lyaWJpXCA7Civlubzlv4MgPiBvc2FuYWdva29yb1wgOwor6Iqx5621ID4gaGFuYW11c2hpcm9cIDsKK+eUt+mwpSA+IG90b2tveWFtb21lXCA7CivoirHnpa0gPiBoYW5hbWF0c3VyaVwgOwor5Yid5ae/ID4gaGF0c3VzdWdhdGFcIDsKK+mrmOipsSA+IHRha2FiYW5hc2hpXCA7Civohp3poK0gPiBoaXphZ2FzaGlyYVwgOwor5be75p+xID4gbWFraWJhc2hpcmFcIDsKK+W6leWKmyA+IHNva29kamlrYXJhXCA7CivnlbPooaggPiB0YXRhbWlvbW90ZVwgOwor5Ye65YqbID4gc2h1dHN1cnlva3VcIDsKK+ahnOmkhSA+IHNha3VyYW1vY2hpXCA7CivmoZzpo68gPiBzYWt1cmFtZXNoaVwgOwor55u05Ye6ID4gY2hva3VzaHV0c3VcIDsKK+eVs+iBtyA+IHRhdGFtaXNob2t1XCA7CivojYnlhqAgPiBrdXNha2FubXVyaVwgOwor55Oi6JmrID4gdGVudG91bXVzaGlcIDsKK+W3puS4iyA+IGhpZGFyaXNoaXRhXCA7Civnmb7lh7ogPiBoeWFrdXNodXRzdVwgOwor6Iul5L6NID4gd2FrYXphbXVyYWlcIDsKK+WAmeeUsSA+IHNvdXJvdXlvc2hpXCA7CivkvL3oqbEgPiB0b2dpYmFuYXNoaVwgOwor5p2+6aO+ID4gbWF0c3VrYXphcmlcIDsKK+adsemiqCA+IGhpZ2FzaGlrYXplXCA7CivotaTntKsgPiBha2FtdXJhc2FraVwgOwor5p+z6IWwID4geWFuYWdpZ29zaGlcIDsKK+eUt+W/gyA+IG90b2tvZ29rb3JvXCA7CivkurrombEgPiBoaXRvc2hpcmFtaVwgOwor542j6YGTID4ga2Vtb25vbWljaGlcIDsKK+S4gOmbqyA+IGhpdG9zaGl6dWt1XCA7Civnvorpm7IgPiBoaXRzdWppZ3Vtb1wgOwor54y/6L2hID4gc2FydWd1dHN1d2FcIDsKK+iEiOaJgCA+IG15YWt1ZG9rb3JvXCA7CivkvYbmm7ggPiB0YWRhc2hpZ2FraVwgOwor6IWw5YiAID4ga29zaGlnYXRhbmFcIDsKK+iyoueJqSA+IG1pdHN1Z2ltb25vXCA7CivlrqLlrqQgPiBreWFrdXNoaXRzdVwgOwor5Lq65p+xID4gaGl0b2Jhc2hpcmFcIDsKK+aXl+mgrSA+IGhhdGFnYXNoaXJhXCA7CivlrZDlubQgPiBuZXp1bWlkb3NoaVwgOwor5peL6aKoID4gdHN1bXVqaWthemVcIDsKK+izquWunyA+IHNoaXRzdWppdHN1XCA7CivkuLzniakgPiBkb25idXJpbW9ub1wgOwor5p2W5p+xID4gdHN1ZWhhc2hpcmFcIDsKK+S4i+eevCA+IHNoaXRhbWFidXRhXCA7CivmnYnmnpcgPiBzdWdpYmF5YXNoaVwgOwor5pmS6ICFID4gc2FyYXNoaW1vbm9cIDsKK+S4gOa7tCA+IGhpdG9zaGl6dWt1XCA7CivkuK3mn7EgPiBuYWthYmFzaGlyYVwgOwor54u454i6ID4gdGFudWtpamlqaWlcIDsKK+WroeWupCA+IGNoYWt1c2hpdHN1XCA7Civni5DnjL8gPiBraXRzdW5lemFydVwgOwor5p2x5YyXID4gaGlnYXNoaWtpdGFcIDsKK+S4g+aciCA+IHNoaWNoaWdhdHN1XCA7CivkuIDmmJQgPiBoaXRvbXVrYXNoaVwgOwor5p2x5YG0ID4gaGlnYXNoaWdhd2FcIDsKK+S4gOaSriA+IGhpdG90c3VtYW1pXCA7Civpo77ku5ggPiBrYXphcml0c3VrZVwgOwor5auh5Ye6ID4gY2hha3VzaHV0c3VcIDsKK+S4i+W/gyA+IHNoaXRhZ29rb3JvXCA7CivlpI/ooaMgPiBuYXRzdWdvcm9tb1wgOwor5LiN5ZecID4gYnV0YXNoaW5hbWlcIDsKK+mbgOicgiA+IHN1enVtZWJhY2hpXCA7CivntYTpoK0gPiBrdW1pZ2FzaGlyYVwgOwor57eR6JmrID4gbWlkb3JpbXVzaGlcIDsKK+mbquekqyA+IHl1a2l0c3VidXRlXCA7Civml5fmqJkgPiBoYXRhamlydXNoaVwgOwor5aSi54++ID4geXVtZXV0c3V0c3VcIDsKK+mbm+elrSA+IGhpbmFtYXRzdXJpXCA7CivlpbPml7EgPiBvbicnbmFoaWRlcmlcIDsKK+Wls+W/gyA+IG9uJyduYWdva29yb1wgOwor5o+h6a6oID4gbmlnaXJpenVzaGlcIDsKK+mdmeW/gyA+IHNoaXp1Z29rb3JvXCA7CivpmqPnlLogPiB0b25hcmltYWNoaVwgOwor5aSn5pmmID4gb290c3Vnb21vcmlcIDsKK+aPoemjryA+IG5pZ2lyaW1lc2hpXCA7CivntKvoibIgPiBtdXJhc2FraWlyb1wgOwor5peX5Y2wID4gaGF0YWppcnVzaGlcIDsKK+mbquW6hyA+IHl1a2liaXNhc2hpXCA7CivplbfoqbEgPiBuYWdhYmFuYXNoaVwgOwor57SZ56SrID4ga2FtaXRzdWJ1dGVcIDsKK+ijuOiZqyA+IGhhZGFrYW11c2hpXCA7CivoqbHkuK0gPiBoYW5hc2hpY2h1dVwgOwor5aG15Z+DID4gY2hpcmlob2tvcmlcIDsKK+mPoemkhSA+IGthZ2FtaW1vY2hpXCA7Civng4/lj6MgPiBrYXJhc3VndWNoaVwgOwor56uv6YeRID4gaGFzaGl0YWdhbmVcIDsKK+aOp+WupCA+IGhpa2Flc2hpdHN1XCA7CivnsbPljbAgPiBrb21lamlydXNoaVwgOwor5ZSQ6YymID4ga2FyYW5pc2hpa2lcIDsKK+iduOeJmyA+IGRlbmRlbm11c2hpXCA7Civpu5LptqsgPiBrdXJvdHN1Z3VtaVwgOwor6Yym6JuHID4gbmlzaGlraWhlYmlcIDsKK+WbveS+jSA+IGt1bml6YW11cmFpXCA7CivmuK/nlLogPiBtaW5hdG9tYWNoaVwgOwor6Jmr6JasID4gbXVzaGlndXN1cmlcIDsKK+WUkOe0hSA+IGthcmFrdXJlbmFpXCA7Civno6/pta8gPiBpc29oaXlvZG9yaVwgOwor5ZG957axID4gaW5vY2hpZHp1bmFcIDsKK+mHkei9oSA+IGthbmFndXRzdXdhXCA7Civlj6Pou4ogPiBrdWNoaWd1cnVtYVwgOwor5Y+W6Kq/ID4gdG9yaXNoaXJhYmVcIDsKK+m8u+afsSA+IGhhbmFiYXNoaXJhXCA7Civnqq/ljbAgPiBrYW1hamlydXNoaVwgOwor6JSm6Ji/ID4gdHN1dGFrYXp1cmFcIDsKK+WPlue3oCA+IHRvcmlzaGltYXJpXCA7CivolKbolJMgPiB0c3V0YWthenVyYVwgOwor5rC36KKLID4ga29vcmlidWt1cm9cIDsKK+WNl+ilvyA+IG1pbmFtaW5pc2hpXCA7CivljIXph5EgPiB0c3V0c3VtaWtpblwgOwor5Y+k54uQID4gZnVydWdpdHN1bmVcIDsKK+WKm+mdqSA+IGNoaWthcmFnYXdhXCA7Civnp4HlhIAgPiB3YXRha3VzaGlnaVwgOwor5Yqb6LazID4gY2hpa2FyYWFzaGlcIDsKK+engeS+myA+IHdhdGFzaGlkb21vXCA7CivlipvosqAgPiBjaGlrYXJhbWFrZVwgOwor5rC05r6EID4gbWl6dXN1bWFzaGlcIDsKK+WPluaJsSA+IHRvcmlhdHN1a2FpXCA7CivpiYTlhZwgPiB0ZXRzdWthYnV0b1wgOwor5rC35p6VID4ga29vcmltYWt1cmFcIDsKK+awtOafsSA+IG1penViYXNoaXJhXCA7CivliIfpgJogPiBraXJpZG9vc2hpXCA7Civpr7Dpq60gPiBuYW1henVoaWdlXCA7Civlj6Plj6MgPiBrdWNoaWd1Y2hpXCA7CivliJ3oqaMgPiBoYXRzdW1vdWRlXCA7Civnn7PnlbMgPiBpc2hpZGF0YW1pXCA7CivpgIboqqwgPiBneWFrdXNldHN1XCA7CivojLjpm7IgPiBraW5va29ndW1vXCA7Civov5HpgZMgPiBjaGlrYW1pY2hpXCA7Civov5Hov5EgPiBjaGlrYWRqaWthXCA7CivmsLTlv4MgPiBtaXp1Z29rb3JvXCA7CivnoILnhZkgPiBzdW5ha2VtdXJpXCA7Civlt53prZogPiBrYXdhemFrYW5hXCA7Civlja/lubQgPiB1c2FnaWRvc2hpXCA7Civov5Hot68gPiBjaGlrYW1pY2hpXCA7CivovrvovrsgPiB0c3VqaXRzdWppXCA7CivljJfmnpUgPiBraXRhbWFrdXJhXCA7Civnorrln7cgPiBrYWt1c2hpdHN1XCA7CivmsLflrqQgPiBoeW91c2hpdHN1XCA7CivmsbrliKUgPiBrZXRzdWJldHN1XCA7CivlvozmioAgPiB1c2hpcm93YXphXCA7CivljY3lt7QgPiBtYW5qaWRvbW9lXCA7Civlv4PlrqQgPiBzaGluc2hpdHN1XCA7CivnnYDoibIgPiBjaGFrdXNob2t1XCA7Civlhobpj6EgPiBtYXJ1a2FnYW1pXCA7CivpgaPnm7QgPiB5YXJpbmFvc2hpXCA7CivnnYDohLEgPiBjaGFrdWRhdHN1XCA7CivlvZfmmJ8gPiBob3VraWJvc2hpXCA7CivlhobpiYsgPiBtYXJ1Z2FuJyduYVwgOwor5b6M5b6MID4gbm9jaGlub2NoaVwgOwor5Y245ZWGID4gb3Jvc2hpc2hvdVwgOwor6L676KSEID4gdHN1aml0c3VtYVwgOwor6Iqx6bC5ID4gaGFuYWdhdHN1b1wgOwor6ba05Zi0ID4gdHN1cnVoYXNoaVwgOwor5YWI6ZqjID4gc2FraWRvbmFyaVwgOwor5bem6LazID4gaGlkYXJpYXNoaVwgOwor5b6X5aSxID4gdG9rdXNoaXRzdVwgOwor5ZKE44CFID4gdG90c3V0b3RzdVwgOwor6YWS5YemID4gc2FrZWRva29yb1wgOwor5q2z5pyIID4gdG9zaGl0c3VraVwgOwor5qiq6LuKID4geW9rb2d1cnVtYVwgOwor5Y2T5Ye6ID4gdGFrdXNodXRzdVwgOwor5byP5pelID4gc2hpa2lqaXRzdVwgOwor5YWl6LOqID4gbnl1dXNoaWNoaVwgOwor552A552AID4gY2hha3VjaGFrdVwgOwor5Y2X5YG0ID4gbWluYW1pZ2F3YVwgOwor55qu6KGjID4ga2F3YWdvcm9tb1wgOwor5Yy65Yy6ID4gbWFjaGltYWNoaVwgOwor552A55m6ID4gY2hha3VoYXRzdVwgOwor6Iqx6YuPID4gaGFuYWJhc2FtaVwgOwor5bqt5ryGID4gbml3YXVydXNoaVwgOwor56CC5bWQID4gc3VuYWFyYXNoaVwgOwor5bm055S3ID4gdG9zaGlvdG9rb1wgOwor5qyh5qyhID4gdHN1Z2l0c3VnaVwgOwor5YiA55a1ID4ga2F0YW5ha2l6dVwgOwor6YGV5qOaID4gY2hpZ2FpZGFuYVwgOwor55u0562GID4gY2hva3VoaXRzdVwgOwor5byQ5b+DID4gZnV0YWdva29yb1wgOwor55u056uLID4gY2hva3VyaXRzdVwgOwor5YWc6J+5ID4ga2FidXRvZ2FuaVwgOwor55uy56qTID4gbWVrdXJhbWFkb1wgOwor5Ye6542EID4gc2h1dHN1Z29rdVwgOwor5Ye654yfID4gc2h1dHN1cnlvdVwgOwor56CC5Z+DID4gc3VuYWJva29yaVwgOwor5bem6ICzID4gaGlkYXJpbWltaVwgOwor5Yqb5bivID4gY2hpa2FyYW9iaVwgOwor56CC5ZqiID4gc3VuYWJ1a3Vyb1wgOwor5YWJ6JiaID4gaGlrYXJpZ29rZVwgOwor6Iqx6KmeID4gaGFuYWtvdG9iYVwgOwor5Yid5rC3ID4gaGF0c3Vnb29yaVwgOwor6Ium6Im+ID4gbmlnYXlvbW9naVwgOwor5Ye65ryBID4gc2h1dHN1cnlvdVwgOwor55q/56ekID4gc2FyYWJha2FyaVwgOwor5q665LyQID4gc2F0c3ViYXRzdVwgOwor5rK444CFID4gZnV0c3VmdXRzdVwgOwor5YWO6ISjID4gbWl0c3VrdWNoaVwgOwor5bqn5oqAID4gc3V3YXJpd2F6YVwgOwor5Y+j44CFID4ga3VjaGlndWNoaVwgOwor6Imv6LOqID4gcnlvdXNoaXRzdVwgOwor5qeN6KG+ID4geWFyaWJ1c3VtYVwgOwor6YCQ5pelID4gY2hpa3VqaXRzdVwgOwor6Iul57eRID4gd2FrYW1pZG9yaVwgOwor6LuK6LODID4ga3VydW1hY2hpblwgOwor6YCG5o6lID4gZ3lha3VzZXRzdVwgOwor55WR6bygID4gaGF0YW5lenVtaVwgOwor552A5omVID4gY2hha3ViYXJhaVwgOwor5Ye65pKDID4gc2h1dHN1Z2VraVwgOwor5bOg6YGTID4gdG91Z2VtaWNoaVwgOwor5bm05by3ID4gdG9zaGlkenV5b1wgOwor6Im26Im2ID4gdHN1eWF0c3V5YVwgOwor55Sw6bWRID4gaG90b3RvZ2lzdVwgOwor5bGx6a+oID4geWFtYWt1amlyYVwgOwor6I2J5p6VID4ga3VzYW1ha3VyYVwgOwor552A5a6fID4gY2hha3VqaXRzdVwgOwor5YK36JasID4ga2l6dWd1c3VyaVwgOwor6Iy25p+xID4gY2hhYmFzaGlyYVwgOwor5bia5pifID4gaG91a2lib3NoaVwgOwor55u05o6lID4gY2hva3VzZXRzdVwgOwor5bqV5ZyfID4gc29rb3RzdWNoaVwgOwor55Wz6YedID4gdGF0YW1paGFyaVwgOwor55m654axID4gaGF0c3VuZXRzdVwgOwor5YiH5a6fID4gc2V0c3VqaXRzdVwgOwor5bGx6aKqID4geWFtYW9yb3NoaVwgOwor5YWJ54mpID4gaGlrYXJpbW9ub1wgOwor5YmU5Ye6ID4gdGVraXNodXRzdVwgOwor55Sf6a2aID4gbmFtYXpha2FuYVwgOwor55u05oiqID4gY2hva3VzZXRzdVwgOwor5YGP6L66ID4ga2F0YWhvcm9yaVwgOwor6Iqx55WRID4gaGFuYWJhdGFrZVwgOwor5YCZ6ZaTID4gc291cm91YWlkYVwgOwor6YCy5Ye6ID4gc2hpbnNodXRzdVwgOwor5bqX5Y24ID4gdGFuYW9yb3NoaVwgOwor55Wl6L+wID4gcnlha3VqdXRzdVwgOwor5bi45bi4ID4gdHN1bmVkenVuZVwgOwor55a16JasID4ga2l6dWd1c3VyaVwgOwor5Yil5Y+jID4gYmV0c3VrdWNoaVwgOwor5YWr5qmLID4geWF0c3VoYXNoaVwgOwor6L6w5bm0ID4gdGF0c3Vkb3NoaVwgOwor5Yil5YilID4gYmV0c3ViZXRzdVwgOwor5bC76aSgID4gc2hpcmltb2NoaVwgOwor5Ye65Zu9ID4gc2h1dHN1Z29rdVwgOwor5bC76aSFID4gc2hpcmltb2NoaVwgOwor5Yy644CFID4gbWFjaGltYWNoaVwgOwor55m95qi6ID4gc2hpcmFrYW5iYVwgOwor5YWr5pyIID4gaGFjaGlnYXRzdVwgOwor6LiP6LuKID4gZnVtaWd1cnVtYVwgOwor5b6M44CFID4gbm9jaGlub2NoaVwgOwor55Wl6KqsID4gcnlha3VzZXRzdVwgOwor55Sz6L68ID4gbW91c2hpa29taVwgOwor5YiH5YiHID4gc2V0c3VzZXRzdVwgOwor55uy5aOBID4gbWVrdXJha2FiZVwgOwor6a+o5bmVID4ga3VqaXJhbWFrdVwgOwor55m95pifID4gc2hpcm9ib3NoaVwgOwor55m+5pelID4gaHlha3VuaWNoaVwgOwor6Iac6LOqID4gbWFrdXNoaXRzdVwgOwor5Ye65YWlID4gc2h1dHN1bnl1dVwgOwor5bm05LiLID4gdG9zaGlzaGl0YVwgOwor5L+C6ZW3ID4ga2FrYXJpY2hvdVwgOwor5YCZ6Kq/ID4gc291cm91Y2hvdVwgOwor6a+o5bC6ID4ga3VqaXJhamFrdVwgOwor55ub5ZyfID4gbW9yaXRzdWNoaVwgOwor6Iqx5pqmID4gaGFuYWdveW9taVwgOwor55u05YiXID4gY2hva3VyZXRzdVwgOwor55Sy6J+5ID4ga2FidXRvZ2FuaVwgOwor5Ya95Ya9ID4gcmV0c3VyZXRzdVwgOwor5YWl5a6kID4gbnl1dXNoaXRzdVwgOwor5bGx6I2SID4geWFtYWFyYXNoaVwgOwor5YKR54mpID4ga2V0c3VidXRzdVwgOwor55Wl562GID4gcnlha3VoaXRzdVwgOwor5bem5YipID4gaGlkYXJpa2lraVwgOwor5Ly46aSFID4gbm9zaGltb2NoaVwgOwor5YaF5YaRID4gdWNoaWthYnV0b1wgOwor5YaF5YWcID4gdWNoaWthYnV0b1wgOwor5bem5YG0ID4gaGlkYXJpZ2F3YVwgOwor5YWl5Y+jID4gaGFpcmlndWNoaVwgOwor5a6k6ZW3ID4gc2hpdHN1Y2hvdVwgOwor5YSq5ae/ID4geWFzYXN1Z2F0YVwgOwor5YWO5Y+jID4gbWl0c3VrdWNoaVwgOwor55Sz56uLID4gbW91c2hpdGF0ZVwgOwor5qC46LOqID4ga2FrdXNoaXRzdVwgOwor5qSN54mpID4gc2hva3VidXRzdVwgOwor5bKp54eVID4gaXdhdHN1YmFtZVwgOwor5qyh44CFID4gdHN1Z2l0c3VnaVwgOwor5YSy5Y+jID4gbW91a2VndWNoaVwgOwor5qOf55OmID4gbXVuYWdhd2FyYVwgOwor6auY5p6VID4gdGFrYW1ha3VyYVwgOwor6IS56ISbID4gZnVrdXJhaGFnaVwgOwor6auY5puHID4gdGFrYWd1bW9yaVwgOwor5qGc6IqxID4gc2FrdXJhYmFuYVwgOwor5qGR6Iu6ID4ga3V3YWljaGlnb1wgOwor6ISa6ImyID4ga3lha3VzaG9rdVwgOwor5qGc6IKJID4gc2FrdXJhbmlrdVwgOwor6IKp6LuKID4ga2F0YWd1cnVtYVwgOwor5Yil44CFID4gYmV0c3ViZXRzdVwgOwor6LOq6YePID4gc2hpdHN1cnlvdVwgOwor55Wc5q66ID4gY2hpa3VzYXRzdVwgOwor5p2c6bWRID4gaG90b3RvZ2lzdVwgOwor6ISI6ISIID4gbXlha3VteWFrdVwgOwor552A44CFID4gY2hha3VjaGFrdVwgOwor5qWU5b2iID4ga3VzYWJpZ2F0YVwgOwor5qGc57SZID4gc2FrdXJhZ2FtaVwgOwor5YiH44CFID4gc2V0c3VzZXRzdVwgOwor55eF5a6kID4gYnlvdXNoaXRzdVwgOwor6IqL5L6NID4gaW1vemFtdXJhaVwgOwor6IKJ6LOqID4gbmlrdXNoaXRzdVwgOwor6L+R44CFID4gY2hpa2FkamlrYVwgOwor5a6d6Ii5ID4gdGFrYXJhYnVuZVwgOwor5bGx5qGcID4geWFtYXpha3VyYVwgOwor5YG05a6kID4gc29rdXNoaXRzdVwgOwor6Iad5p6VID4gaGl6YW1ha3VyYVwgOwor5Lmz6aaWID4gY2hpY2hpa3ViaVwgOwor5bi444CFID4gdHN1bmVkenVuZVwgOwor5a2Q6KaPID4gaG90b3RvZ2lzdVwgOwor5qW15YqbID4ga3lva3VyeW9rdVwgOwor6L6744CFID4gdHN1aml0c3VqaVwgOwor5qGR55WRID4ga3V3YWJhdGFrZVwgOwor55Wl5byPID4gcnlha3VzaGlraVwgOwor5Ya944CFID4gcmV0c3VyZXRzdVwgOwor5p6V6KixID4gbWFrdXJhbW90b1wgOwor5a6d57GkID4gdGFrYXJha3VqaVwgOwor5a6d566xID4gdGFrYXJhYmFrb1wgOwor6LOq6I2JID4gc2hpY2hpZ3VzYVwgOwor6aqo5aO3ID4ga290c3V0c3Vib1wgOwor5a6/55u0ID4gc2h1a3VjaG9rdVwgOwor5YKZ5LuYID4gc29uYWV0c3VrZVwgOwor55Wl5aWqID4gcnlha3VkYXRzdVwgOwor5bGx5bWQID4geWFtYWFyYXNoaVwgOwor5p2+6JmrID4gbWF0c3VtdXNoaVwgOwor5Lmz6LOqID4gbnl1dXNoaXRzdVwgOwor5Lih6ZqjID4gcnlvdWRvbmFyaVwgOwor5bGh5bGhID4gc2hpYmFzaGliYVwgOwor576k6ZuAID4gbXVyYXN1enVtZVwgOwor5pyo6LOqID4gbW9rdXNoaXRzdVwgOwor5a6f54mpID4gaml0c3VidXRzdVwgOwor6LOq56iuID4gc2hpY2hpZ3VzYVwgOwor5LiL6ZyyID4gc2hpdGF0c3V5dVwgOwor55Wc5YqbID4gY2hpa3VyeW9rdVwgOwor5a+S5qS/ID4ga2FudHN1YmFraVwgOwor6LOq55qEID4gc2hpdHN1dGVraVwgOwor5qOa5Y24ID4gdGFuYW9yb3NoaVwgOwor5qKU5a2QID4ga3VjaGluYXNoaVwgOwor6amA5ZywID4gbWFzc2hpZ3VyYVwgOwor5bGx5YiAID4geWFtYWdhdGFuYVwgOwor5LiL6YGTID4gc2hpdGFtaWNoaVwgOwor5LiN6Lq+ID4gYnVzaGl0c3VrZVwgOwor55Sf5Y21ID4gbmFtYXRhbWFnb1wgOwor6aKo6JasID4ga2F6ZWd1c3VyaVwgOwor5puy6KqsID4ga3lva3VzZXRzdVwgOwor5Li46KO4ID4gbWFydWhhZGFrYVwgOwor6aOv57KSID4gbWVzaGl0c3VidVwgOwor54yr6LuKID4gbmVrb2d1cnVtYVwgOwor5LiJ6LaKID4gbWl0c3Vrb3NoaVwgOwor5a6i5pyIID4ga3lha3VnZXRzdVwgOwor5pmC6bOlID4gaG90b3RvZ2lzdVwgOwor6aGU6LKMID4ga2Fva2F0YWNoaVwgOwor5a6k5paZID4gc2hpdHN1cnlvdVwgOwor5bC65YWrID4gc2hha3VoYWNoaVwgOwor6Im244CFID4gdHN1eWF0c3V5YVwgOwor5p2x55S3ID4gYXp1bWFvdG9rb1wgOwor5a+d5a6kID4gc2hpbnNoaXRzdVwgOwor6LOq5qi4ID4gc2hpdHN1Ym9rdVwgOwor6IKY5p6VID4gaGlqaW1ha3VyYVwgOwor5LuP5ruFID4gYnV0c3VtZXRzdVwgOwor5bCP5YyFID4ga29kenV0c3VtaVwgOwor5a+G5a+GID4gbWl0c3VtaXRzdVwgOwor5bCx5LitID4gbmFrYW5kenVrdVwgOwor5LiK6JOGID4gdXdhbXVzaGlyb1wgOwor6LOq5py0ID4gc2hpdHN1Ym9rdVwgOwor6ISx5YqbID4gZGF0c3VyeW9rdVwgOwor6LOq5pytID4gc2hpY2hpZnVkYVwgOwor5LiJ6I+xID4gbWl0c3ViaXNoaVwgOwor5Luu5p6VID4ga2FyaW1ha3VyYVwgOwor5L6b5Ye6ID4ga3lvdXNodXRzdVwgOwor5a6u5a6kID4ga3l1dXNoaXRzdVwgOwor5pil6ZyeID4gaGFydWdhc3VtaVwgOwor6aOf54mpID4gc2hva3Vtb3RzdVwgOwor5piU6aKoID4gbXVrYXNoaWZ1dVwgOwor5a6d5bO2ID4gdGFrYXJhamltYVwgOwor5LuP5qeYID4gaG90b2tlc2FtYVwgOwor6ISa5YqbID4ga3lha3VyeW9rdVwgOwor5LiL6IG3ID4gc2hpdGFzaG9rdVwgOwor5puy56+AID4ga3lva3VzZXRzdVwgOwor5puy562GID4ga3lva3VoaXRzdVwgOwor5LiA57qPID4gaGl0b21hdG9tZVwgOwor6aOv5quDID4gbWVzaGliaXRzdVwgOwor6LKd5p+xID4ga2FpYmFzaGlyYVwgOwor5LiK5621ID4gdXdhbXVzaGlyb1wgOwor5puy55u0ID4ga3lva3VjaG9rdVwgOwor5Li455OmID4gbWFydWdhd2FyYVwgOwor5LiD56uIID4gbmFuYWthbWFkb1wgOwor5LiA56m0ID4gaGl0b3RzdWFuYVwgOwor5a2r5aiYID4gbWFnb211c3VtZVwgOwor5LuP5oCnID4gaG90b2tlc2hvdVwgOwor6Z2Z6Z2ZID4gc2hpenVzaGl6dVwgOwor5a6f5YqbID4gaml0c3VyeW9rdVwgOwor5puy546HID4ga3lva3VyaXRzdVwgOwor5aSn6byTID4gb290c3VkenVtaVwgOwor54uQ6ImyID4ga2l0c3VuZWlyb1wgOwor54m56LOqID4gdG9rdXNoaXRzdVwgOwor5LiA552hID4gaGl0b25lbXVyaVwgOwor5LiL55S6ID4gc2hpdGFtYWNoaVwgOwor5Lq65b+DID4gaGl0b2dva29yb1wgOwor5LiD55SfID4gc2hpY2hpc2hvdVwgOwor54eV6bqmID4ga2FyYXN1bXVnaVwgOwor5LiA55WqID4gaGl0b3RzdWdhaVwgOwor54mp6KqeID4gbW9ub2dhdGFyaVwgOwor5aWz6YGUID4gb24nJ25hdGFjaGlcIDsKK+acp+aciCA+IG9ib3JvZHp1a2lcIDsKK+eJh+i3myA+IGthdGFjaGluYmFcIDsKK+acq+aXpSA+IG1hdHN1aml0c3VcIDsKK+acm+aciCA+IG1vY2hpZHp1a2lcIDsKK+S6jOW/gyA+IGZ1dGFnb2tvcm9cIDsKK+mdqeizqiA+IGtha3VzaGl0c3VcIDsKK+Wkp+mavCA+IG9vaGF5YWJ1c2FcIDsKK+aciOaciCA+IHRzdWtpZHp1a2lcIDsKK+S4gOa4oSA+IGhpdG93YXRhcmlcIDsKK+WxoeOAhSA+IHNoaWJhc2hpYmFcIDsKK+adnOWuhyA+IGhvdG90b2dpc3VcIDsKK+WmvuiFuSA+IG1la2FrZWJhcmFcIDsKK+mbsumcniA+IGt1bW9rYXN1bWlcIDsKK+mdqeiiiyA+IGthd2FidWt1cm9cIDsKK+aekOWHuiA+IHNla2lzaHV0c3VcIDsKK+aeleWFgyA+IG1ha3VyYW1vdG9cIDsKK+S4jeadnyA+IGZ1dHN1dHN1a2FcIDsKK+eMq+afsyA+IG5la295YW5hZ2lcIDsKK+absuaKmCA+IGt5b2t1c2V0c3VcIDsKK+iyuOS7mCA+IGthc2hpdHN1a2VcIDsKK+eLuOaxgSA+IHRhbnVraWppcnVcIDsKK+S4jeaKsSA+IGtha2F3YXJhenVcIDsKK+S4gOaJgCA+IGhpdG90b2tvcm9cIDsKK+absuWwuiA+IGt5b2t1c2hha3VcIDsKK+mbquizqiA+IHl1a2lzaGl0c3VcIDsKK+mhlOW9oiA+IGthb2thdGFjaGlcIDsKK+eKh+eKhyA+IGhpc2hpaGlzaGlcIDsKK+mbm+ixhiA+IGhpeW9rb21hbWVcIDsKK+e2sumgrSA+IGFtaWdhc2hpcmFcIDsKK+WhqemtmiA+IHNoaW96YWthbmFcIDsKK+S4reWftyA+IGNodXVzaGl0c3VcIDsKK+Wkj+iZqyA+IG5hdHN1bXVzaGlcIDsKK+e2vumMpiA+IGF5YW5pc2hpa2lcIDsKK+aciOWIpSA+IHRzdWtpYmV0c3VcIDsKK+WlqueVpSA+IGRhdHN1cnlha3VcIDsKK+e5gee5gSA+IHNoaWdlc2hpZ2VcIDsKK+eDj+m6piA+IGthcmFzdW11Z2lcIDsKK+S4gOWRqCA+IGhpdG9tZWd1cmlcIDsKK+eDj+mzqSA+IGthcmFzdWJhdG9cIDsKK+iopeiopSA+IHRvdHN1dG90c3VcIDsKK+aXheeDjyA+IHRhYmlnYXJhc3VcIDsKK+S4g+WFiSA+IG5hbmFoaWthcmlcIDsKK+WomOWpvyA+IG11c3VtZW11a29cIDsKK+aXpeayoSA+IG5pY2hpYm90c3VcIDsKK+e0sOmbqiA+IHNhc2FtZXl1a2lcIDsKK+mgreWIhiA+IGthc2hpcmFidW5cIDsKK+aWkeeJmyA+IG1hZGFyYXVzaGlcIDsKK+e3keiJsiA+IHJ5b2t1c2hva3VcIDsKK+aXpeaciCA+IG5pY2hpZ2V0c3VcIDsKK+aXreaXpSA+IGt5b2t1aml0c3VcIDsKK+inkuizqiA+IGtha3VzaGl0c3VcIDsKK+mao+e1hCA+IHRvbmFyaWd1bWlcIDsKK+eDj+mHkSA+IGthcmFzdWdhbmVcIDsKK+mavOenkSA+IGhheWFidXNha2FcIDsKK+eJqeW/gyA+IG1vbm9nb2tvcm9cIDsKK+aXheaelSA+IHRhYmltYWt1cmFcIDsKK+e0hembgCA+IGJlbmlzdXp1bWVcIDsKK+eItuaWuSA+IGNoaWNoaWthdGFcIDsKK+WhteiKpSA+IGNoaXJpYWt1dGFcIDsKK+mbqOeHlSA+IGFtYXRzdWJhbWVcIDsKK+WmueWpvyA+IGltb3V0b211a29cIDsKK+mbqueFmSA+IHl1a2lrZW11cmlcIDsKK+WlquaOoCA+IGRhdHN1cnlha3VcIDsKK+inkuibmSA+IHRzdW5vZ2FlcnVcIDsKK+WksealrSA+IHNoaXRzdWd5b3VcIDsKK+ioreeriyA+IHNldHN1cml0c3VcIDsKK+mbkeeJqSA+IHphdHN1YnV0c3VcIDsKK+eGseeDiCA+IG5ldHN1cmV0c3VcIDsKK+maj+elniA+IGthbicnbmFnYXJhXCA7Civoo7jpuqYgPiBoYWRha2FtdWdpXCA7CivpnJzmnIggPiBzaGltb3RzdWtpXCA7CivlpKLmnpUgPiB5dW1lbWFrdXJhXCA7Civml4Xlv4MgPiB0YWJpZ29rb3JvXCA7Civniqzkvo0gPiBpbnV6YW11cmFpXCA7CivorZjliKUgPiBzaGlraWJldHN1XCA7Civlpr7lh7ogPiBzaG91c2h1dHN1XCA7Civnt5HnjokgPiByeW9rdWd5b2t1XCA7Civng4/om4cgPiBrYXJhc3VoZWJpXCA7Civnibnlh7ogPiB0b2t1c2h1dHN1XCA7CivntJnooosgPiBrYW1pYnVrdXJvXCA7Civpm6rmn7MgPiB5dWtpeWFuYWdpXCA7CivmmKXkvJEgPiBoYXJ1eWFzdW1pXCA7CivmnIjjgIUgPiB0c3VraWR6dWtpXCA7Civop6bnmbogPiBzaG9rdWhhdHN1XCA7CivntpnniLYgPiBtYW1hY2hpY2hpXCA7Civng4/ntJkgPiBrYXJhc3VnYW1pXCA7Civml6Xku48gPiBuaWNoaWZ1dHN1XCA7CivmjpvplbcgPiBrYWthcmljaG91XCA7CivpnbTkuIsgPiBrdXRzdXNoaXRhXCA7CivnuK7lsLogPiBzaHVrdXNoYWt1XCA7CivlpbPkuLsgPiBvbicnbmFhcnVqaVwgOwor5pW15aSxID4gdGVraXNoaXRzdVwgOwor5pWZ5a6kID4ga3lvdXNoaXRzdVwgOwor57W25ruFID4gemV0c3VtZXRzdVwgOwor6KaB55+zID4ga2FuYW1laXNoaVwgOwor6KOP6KmxID4gdXJhYmFuYXNoaVwgOwor57KJ6JasID4ga29uYWd1c3VyaVwgOwor57iu5Yi3ID4gc2h1a3VzYXRzdVwgOwor5Zyf6LGaID4gdHN1Y2hpYnV0YVwgOwor54OI54OIID4gcmV0c3VyZXRzdVwgOwor5pWR5Ye6ID4ga3l1dXNodXRzdVwgOwor5aOB5ZyfID4ga2FiZXRzdWNoaVwgOwor57WQ5pyrID4ga2V0c3VtYXRzdVwgOwor6Kaq5p+xID4gb3lhYmFzaGlyYVwgOwor57Kb57KbID4gc2h1a3VzaHVrdVwgOwor5Zu96KibID4ga3VuaW5hbWFyaVwgOwor57a/5Z+DID4gd2F0YWJva29yaVwgOwor6Kaq5pelID4gc2hpbicnbmljaGlcIDsKK+eBvOeGsSA+IHNoYWt1bmV0c3VcIDsKK+mbh+S4uyA+IHlhdG9pbnVzaGlcIDsKK+e2meWomCA+IG1hbWFtdXN1bWVcIDsKK+eEvOWksSA+IHNob3VzaGl0c3VcIDsKK+ios+WHuiA+IHlha3VzaHV0c3VcIDsKK+eDiOaXpSA+IHJldHN1aml0c3VcIDsKK+e3oOS7mCA+IHNoaW1ldHN1a2VcIDsKK+ioo+WIpSA+IGtldHN1YmV0c3VcIDsKK+etkumzpSA+IHRzdXRzdWRvcmlcIDsKK+iii+iAsyA+IGZ1a3Vyb21pbWlcIDsKK+e1kOWunyA+IGtldHN1aml0c3VcIDsKK+e2muWHuiA+IHpva3VzaHV0c3VcIDsKK+a/g+e0qyA+IGtvbXVyYXNha2lcIDsKK+a6nem8oCA+IGRvYnVuZXp1bWlcIDsKK+eym+auuiA+IHNodWt1c2F0c3VcIDsKK+ihgOiEiCA+IGtldHN1bXlha3VcIDsKK+mOjOm8rCA+IGthbWFpdGFjaGlcIDsKK+iii+eJqSA+IGZ1a3Vyb21vbm9cIDsKK+ilv+WPoyA+IG5pc2hpZ3VjaGlcIDsKK+aRmOWHuiA+IHRla2lzaHV0c3VcIDsKK+evgOevgCA+IGZ1c2hpYnVzaGlcIDsKK+etkuiiliA+IHRzdXRzdXNvZGVcIDsKK+ezuOWNsCA+IGl0b2ppcnVzaGlcIDsKK+eCuuS6uiA+IGhpdG90b25hcmlcIDsKK+eCreS/tSA+IHN1bWlkYXdhcmFcIDsKK+icgOmtgiA+IGhvdG90b2dpc3VcIDsKK+exs+aJgCA+IGtvbWVkb2tvcm9cIDsKK+err+i/kSA+IGhhc2hpZGppa2FcIDsKK+mOlumOjCA+IGt1c2FyaWdhbWFcIDsKK+a7heijgiA+IG1ldHN1cmV0c3VcIDsKK+a9rueFmSA+IHNoaW9rZW11cmlcIDsKK+ethuiIjCA+IGhpdHN1emV0c3VcIDsKK+mMpumviSA+IG5pc2hpa2lnb2lcIDsKK+a7keiEsSA+IGthdHN1ZGF0c3VcIDsKK+aOoOWlqiA+IHJ5YWt1ZGF0c3VcIDsKK+ethuetkiA+IGZ1ZGVkenV0c3VcIDsKK+aPj+WHuiA+IGJ5b3VzaHV0c3VcIDsKK+Wcn+WjgSA+IHRzdWNoaWthYmVcIDsKK+aJi+e2miA+IHRldHN1ZHp1a2lcIDsKK+ieouefsyA+IGhvdGFydWlzaGlcIDsKK+icnOicgiA+IG1pdHN1YmFjaGlcIDsKK+euseafsyA+IGhha295YW5hZ2lcIDsKK+euseaelSA+IGhha29tYWt1cmFcIDsKK+exs+S/tSA+IGtvbWVkYXdhcmFcIDsKK+icguicnCA+IGhhY2hpbWl0c3VcIDsKK+erueetkiA+IHRha2VkenV0c3VcIDsKK+err+erryA+IGhhc2hpYmFzaGlcIDsKK+eukuaYnyA+IGhvdWtpYm9zaGlcIDsKK+idtueVqiA+IGNob3V0c3VnYWlcIDsKK+aLoOaJgCA+IHlvcmlkb2tvcm9cIDsKK+m7kum8oCA+IGt1cm9uZXp1bWlcIDsKK+ihqOWPoyA+IG9tb3RlZ3VjaGlcIDsKK+eriOelniA+IGthbWFkb2dhbWlcIDsKK+m7kumuqiA+IGt1cm9tYWd1cm9cIDsKK+ewh+WHuiA+IHpva3VzaHV0c3VcIDsKK+ihqOWHuiA+IGh5b3VzaHV0c3VcIDsKK+WUkOihoyA+IGthcmFrb3JvbW9cIDsKK+ethuaXgSA+IGZ1ZGV6dWt1cmlcIDsKK+m9o+iQvSA+IGtvbWFvdG9zaGlcIDsKK+mMqOe2sSA+IGlrYXJpZHp1bmFcIDsKK+etkuW9oiA+IHRzdXRzdWdhdGFcIDsKK+a3see3kSA+IGZ1a2FtaWRvcmlcIDsKK+m8u+iWrCA+IGhhbmFndXN1cmlcIDsKK+aJgOafhCA+IHRva29yb2dhcmFcIDsKK+aMgeS4uyA+IG1vY2hpbnVzaGlcIDsKK+aLmeWKoyA+IHNldHN1cmV0c3VcIDsKK+ibjeefsyA+IGhvdGFydWlzaGlcIDsKK+a8guWksSA+IGh5b3VzaGl0c3VcIDsKK+mHnem8oCA+IGhhcmluZXp1bWlcIDsKK+a1geizqiA+IHJ5dXVzaGljaGlcIDsKK+aKveWHuiA+IGNodXVzaHV0c3VcIDsKK+icnOaciCA+IG1pdHN1Z2V0c3VcIDsKK+epuua2mSA+IHNvcmFuYW1pZGFcIDsKK+a4i+a4iyA+IHNoaWJ1c2hpYnVcIDsKK+a7suWHuiA+IHNoaW5zaHV0c3VcIDsKK+emj+iiiyA+IGZ1a3VidWt1cm9cIDsKK+etkuWFiCA+IHRzdXRzdXNha2lcIDsKK+ethuWKmyA+IGhpdHN1cnlva3VcIDsKK+aKhOWHuiA+IHNob3VzaHV0c3VcIDsKK+aIkeW/gyA+IHdhZ2Frb2tvcm9cIDsKK+m7kuiLuiA+IGt1cm9pY2hpZ29cIDsKK+enqeemhCA+IGNoaXRzdXJva3VcIDsKK+WPiOmaoyA+IG1hdGFkb25hcmlcIDsKK+mHkemLjyA+IGthbmFiYXNhbWlcIDsKK+aHkOaJiyA+IGZ1dG9rb3JvZGVcIDsKK+m7kue3kSA+IGt1cm9taWRvcmlcIDsKK+aFhOeDiCA+IHJpdHN1cmV0c3VcIDsKK+mLuOatryA+IG5va29naXJpYmFcIDsKK+a6jOWJjCA+IGhhdHN1cmF0c3VcIDsKK+aDn+elniA+IGthbicnbmFnYXJhXCA7Civmtbfnh5UgPiB1bWl0c3ViYW1lXCA7Civph5HooosgPiBrYW5hYnVrdXJvXCA7CivmsrnomasgPiBhYnVyYW11c2hpXCA7CivpioDni5AgPiBnaW5naXRzdW5lXCA7CivljZfpoqggPiBtaW5hbWlrYXplXCA7CivomZDmrrogPiBneWFrdXNhdHN1XCA7CivmsLTpj6EgPiBtaXp1a2FnYW1pXCA7CivmtLvniakgPiBrYXRzdWJ1dHN1XCA7CivljbXphZIgPiB0YW1hZ296YWtlXCA7Civnr4DjgIUgPiBmdXNoaWJ1c2hpXCA7Civpg73ps6UgPiBtaXlha29kb3JpXCA7Civmsbroo4IgPiBrZXRzdXJldHN1XCA7CivolqznrrEgPiBrdXN1cmliYWtvXCA7CivpuqbnlZEgPiBtdWdpYmF0YWtlXCA7Civpu5LmvIYgPiBrb2t1c2hpdHN1XCA7Civllonku48gPiBub2RvYm90b2tlXCA7Civph5Hogb4gPiBrYW5hdHN1bmJvXCA7CivlkLjmub8gPiBreXV1c2hpdHN1XCA7CivmsLTolqwgPiBtaXp1Z3VzdXJpXCA7Civms4nnhrEgPiBpenVtaW5ldHN1XCA7CivmtbTlrqQgPiB5b2t1c2hpdHN1XCA7CivmhJvlqJggPiBtYW5hbXVzdW1lXCA7Civlj6Tni7ggPiBmdXJ1ZGFudWtpXCA7CivmsrPng48gPiBrYXdhZ2FyYXN1XCA7Civnp4HlrpsgPiB3YXRhc2hpYXRlXCA7Civlv4XnvbAgPiBoaXRzdWJhdHN1XCA7CivnpZ3ml6UgPiBzaHVrdWppdHN1XCA7CivlkIrmqYsgPiB0c3VyaWJhc2hpXCA7CivlvaLoqLEgPiBrYXRhYmFrYXJpXCA7CivmsrjmsrggPiBmdXRzdWZ1dHN1XCA7Civms6LmnpUgPiBuYW1pbWFrdXJhXCA7CivnoofntrEgPiBpa2FyaWR6dW5hXCA7CivmsLTnp6QgPiBtaXp1YmFrYXJpXCA7CivmtYHlpLEgPiByeXV1c2hpdHN1XCA7Civmtbjlh7ogPiBzaGluc2h1dHN1XCA7CivpiYvlsZEgPiBrYW4nJ25ha3V6dVwgOwor6I+x6aSFID4gaGlzaGltb2NoaVwgOwor5ZCJ5pelID4ga2ljaGluaWNoaVwgOwor6Jas5oyHID4ga3VzdXJpeXViaVwgOwor5ZCE5pa5ID4gb25vb25vZ2F0YVwgOwor6YeR5qeMID4ga2FuYWR6dWNoaVwgOwor56CC6KKLID4gc3VuYWJ1a3Vyb1wgOwor5ZKE5ZKEID4gdG90c3V0b3RzdVwgOwor5YmN6aCtID4gbWFlZ2FzaGlyYVwgOwor5rWB5Ye6ID4gcnl1dXNodXRzdVwgOwor5rS75YqbID4ga2F0c3VyeW9rdVwgOwor5Y2154S8ID4gdGFtYWdveWFraVwgOwor5rC054WZID4gbWl6dWtlbXVyaVwgOwor6YGT6YGTID4gbWljaGltaWNoaVwgOwor5by36IWwID4gdHN1eW9nb3NoaVwgOwor5rS75LuPID4ga2F0c3VidXRzdVwgOwor5Yid6ZycID4gaGF0c3VzaGltb1wgOwor5Y+z5bemID4gbWlnaWhpZGFyaVwgOwor5ZCE5a6kID4ga2FrdXNoaXRzdVwgOwor552A6ZuqID4gY2hha3VzZXRzdVwgOwor5b+F5ruFID4gaGl0c3VtZXRzdVwgOwor6YeM5b+DID4gc2F0b2dva29yb1wgOwor6JG156WtID4gYW9pbWF0c3VyaVwgOwor5rK55aO3ID4gYWJ1cmF0c3Vib1wgOwor5riL44CFID4gc2hpYnVzaGlidVwgOwor5Yi76LazID4ga2l6YW1pYXNoaVwgOwor5rC05p6VID4gbWl6dW1ha3VyYVwgOwor5YuF562GID4gY2hva3VoaXRzdVwgOwor6bCv6ZuyID4gaXdhc2hpZ3Vtb1wgOwor5b+D5p+EID4ga29rb3JvZ2FyYVwgOwor552m6KiAID4gbXV0c3Vnb3RvXCA7Civlj47lpaogPiBzaHV1ZGF0c3VcIDsKK+aBkOWWnSA+IGt5b3VrYXRzdVwgOwor55uu6aCtID4gbWVnYXNoaXJhXCA7CivojYnppKAgPiBrdXNhbW9jaGlcIDsKK+WKh+iBtyA+IGdla2lzaG9rdVwgOwor6Jas5LujID4ga3VzdXJpZGFpXCA7CivlvLfnm7QgPiBreW91Y2hva3VcIDsKK+WQhOWGiiA+IGtha3VzYXRzdVwgOwor6YCa6KqsID4gdHN1dXNldHN1XCA7CivmsrPlj6MgPiBrYXdhZ3VjaGlcIDsKK+mAhuiziiA+IGd5YWt1em9rdVwgOwor6YGT6I2JID4gbWljaGlrdXNhXCA7CivmrbvnpZ4gPiBzaGluaWdhbWlcIDsKK+mBqeiBtyA+IHRla2lzaG9rdVwgOwor5qyg6JC9ID4ga2V0c3VyYWt1XCA7Civlt7vprqggPiBtYWtpenVzaGlcIDsKK+WLneeOhyA+IHNob3VyaXRzdVwgOwor5Ye66LuNID4gc2h1dHN1Z3VuXCA7CivljYrml6UgPiBoYW4nJ25pY2hpXCA7CivljoTlubQgPiB5YWt1ZG9zaGlcIDsKK+WJpeiEsSA+IGhha3VkYXRzdVwgOwor5b6S5qGcID4gYWRhemFrdXJhXCA7CivljYPml6UgPiBzZW4nJ25pY2hpXCA7CivliKXooYwgPiBiZXRzdWd5b3VcIDsKK+iQveedgCA+IHJha3VjaGFrdVwgOwor6YCG6KWyID4gZ3lha3VzaHV1XCA7Civmr5LmrrogPiBkb2t1c2F0c3VcIDsKK+eiuuWunyA+IGtha3VqaXRzdVwgOwor6YeN5Ye6ID4ganV1c2h1dHN1XCA7Civlj6PlhYggPiBrdWNoaXNha2lcIDsKK+WPo+WFgyA+IGt1Y2hpbW90b1wgOwor5byP55uuID4gc2hpa2ltb2t1XCA7CivljZPmipwgPiB0YWt1YmF0c3VcIDsKK+ayoeWFpSA+IGJvdHN1bnl1dVwgOwor5Y+z5LiLID4gbWlnaXNoaXRhXCA7CivlvLfng4ggPiBreW91cmV0c3VcIDsKK+mAuOiEsSA+IGl0c3VkYXRzdVwgOwor55m96buSID4gc2hpcm9rdXJvXCA7Civnm7TpgZQgPiBqaWtpdGF0c3VcIDsKK+aBi+S7hyA+IGtvaWdhdGFraVwgOwor55u06YCyID4gY2hva3VzaGluXCA7Civnm7TpgJogPiBjaG9rdXRzdXVcIDsKK+WJveeqgyA+IGh5b3VzZXRzdVwgOwor5Ymy5664ID4gd2FyaWJhc2hpXCA7CivlhY3pu5wgPiBtZW5jaHV0c3VcIDsKK+mHkeS7jyA+IGthbmFidXRzdVwgOwor55m96be6ID4gc2hpcmFzYWdpXCA7CivphrXlh7ogPiBreW9zaHV0c3VcIDsKK+ebtOi9hCA+IGNob2trYXRzdVwgOwor5Y2g5birID4gdXJhbmFpc2hpXCA7Civnmq7pnbQgPiBrYXdhZ3V0c3VcIDsKK+aApeWIhyA+IGt5dXVzZXRzdVwgOwor6YWJ5bm0ID4gdG9yaWRvc2hpXCA7CivnnJ/oo7ggPiBtYXBwYWRha2FcIDsKK+WHuuihgCA+IHNodWtrZXRzdVwgOwor55m96bGaID4gc2hpcm9naXN1XCA7CivpgZPnrYsgPiBtaWNoaXN1amlcIDsKK+mBk+erryA+IG1pY2hpYmF0YVwgOwor5Y245aOyID4gb3Jvc2hpdXJpXCA7Civlv5jlpLEgPiBib3VzaGl0c3VcIDsKK+iUreWPoyA+IGthZ2VndWNoaVwgOwor5Y215aSnID4gdGFtYWdvZGFpXCA7CivliJ3oirEgPiBoYXRzdWhhbmFcIDsKK+mBk+eoiyA+IG1pY2hpbm9yaVwgOwor55m96auqID4gaGFrdWhhdHN1XCA7Civno5TliJEgPiBoYXJpdHN1a2VcIDsKK+W9puaYnyA+IGhpa29ib3NoaVwgOwor6L6b6L6jID4gc2hpbnJhdHN1XCA7CivmraPniakgPiBzaG91YnV0c3VcIDsKK+WTgeOAhSA+IHNoaW5hamluYVwgOwor5Ye66JeNID4gc2h1dHN1cmFuXCA7CivlubToi6UgPiB0b3NoaXdha2FcIDsKK+mAhuiHoyA+IGd5YWt1c2hpblwgOwor5bmz6IqdID4gaGlyYXNoaWJhXCA7CivmqKrpnaIgPiB5b2tvdHN1cmFcIDsKK+ebtOiqrSA+IGNob2t1ZG9rdVwgOwor5Yed6KGAID4gZ3lvdWtldHN1XCA7CivpgIPohbAgPiBuaWdlZ29zaGlcIDsKK+W/g+WkqiA+IHRva29yb3RlblwgOwor5b+D5aSpID4gdG9rb3JvdGVuXCA7Civnm7ToqLMgPiBjaG9rdXlha3VcIDsKK+WIneiAsyA+IGhhdHN1bWltaVwgOwor55m96ZuqID4gaGFrdXNldHN1XCA7Civlh7roibIgPiBzaHVzc2hva3VcIDsKK+W7g+eWviA+IGhhaXNoaXRzdVwgOwor5YqH54OIID4gZ2VraXJldHN1XCA7CivpgJ/nrYYgPiBzb2t1aGl0c3VcIDsKK+awtOWPoyA+IG1penVndWNoaVwgOwor5q665oiuID4gc2F0c3VyaWt1XCA7CivlvozlrqQgPiBrb3VzaGl0c3VcIDsKK+iThOWmviA+IGNoaWt1c2hvdVwgOwor5Ye6576kID4gc2h1dHN1Z3VuXCA7CivpgLLnmbogPiBzaGlucGF0c3VcIDsKK+iMtuiiiyA+IGNoYWJ1a3Vyb1wgOwor5Yid56m6ID4gaGF0c3V6b3JhXCA7CivmqKrpgZMgPiB5b2tvbWljaGlcIDsKK+iQveacrSA+IHJha3VzYXRzdVwgOwor5Yiu55uuID4ga2F0c3Vtb2t1XCA7Civnmb3phZIgPiBzaGlyb3pha2VcIDsKK+WLmOaJgCA+IGthbmRva29yb1wgOwor6L+956qBID4gdHN1aXRvdHN1XCA7CivlvI/mnI0gPiBzaGlraWZ1a3VcIDsKK+WNlOWKmyA+IGt5b3VyeW9rdVwgOwor55+z5oyBID4gaXNoaW1vY2hpXCA7CivokL3ml6UgPiByYWt1aml0c3VcIDsKK+mAuOeJqSA+IGljaGltb3RzdVwgOwor55u06IW4ID4gY2hva3VjaG91XCA7CivmrbTml6UgPiByZWtpaml0c3VcIDsKK+mAsueJqSA+IHNoaW5tb3RzdVwgOwor5Ye656uLID4gc2h1dHRhdHN1XCA7CivnnJ/nrYYgPiBzaGlucGl0c3VcIDsKK+ato+aciCA+IHNob3VnYXRzdVwgOwor5Yed57iuID4gZ3lvdXNodWt1XCA7CivnnYDnm64gPiBjaGFrdW1va3VcIDsKK+WFreitmCA+IHJva3VzaGlraVwgOwor5Yed57WQID4gZ3lvdWtldHN1XCA7CivnnLznlr4gPiBnYW5zaGl0c3VcIDsKK+atjOaelSA+IHV0YW1ha3VyYVwgOwor77y457eaID4gZWtrdXN1c2VuXCA7Civnn6XmgokgPiBjaGlzaGl0c3VcIDsKK+WIpeeJqSA+IGJldHN1bW9ub1wgOwor55u057WQID4gY2hva2tldHN1XCA7Civlh53nq4sgPiBneW91cml0c3VcIDsKK+W4uOevgCA+IHRva29idXNoaVwgOwor5qiZ6K2YID4gaHlvdXNoaWtpXCA7Civlvozlh7ogPiBrb3VzaHV0c3VcIDsKK+WIneeJqSA+IGhhdHN1bW9ub1wgOwor6Iqx6YGTID4gaGFuYW1pY2hpXCA7Civlh7rnmbogPiBzaHVwcGF0c3VcIDsKK+WMl+WPoyA+IGtpdGFndWNoaVwgOwor5bm0546JID4gdG9zaGlkYW1hXCA7CivmqZnoibIgPiBkYWlkYWlpcm9cIDsKK+efqeW3riA+IGthbmV6YXNoaVwgOwor5Y2D5LiHID4gY2hpeW9yb3p1XCA7CivlvJPlvKYgPiB5dW1pZHp1cnVcIDsKK+ebsueptCA+IG1la3VyYWFuYVwgOwor6I2J566SID4ga3VzYWJvdWtpXCA7Civlh7rnj74gPiBzaHV0c3VnZW5cIDsKK+WHneedgCA+IGd5b3VjaGFrdVwgOwor5Yqj5byxID4gcmV0c3VqYWt1XCA7CivnnJ/njocgPiBzaGluc290c3VcIDsKK+iLpuiZqyA+IG5pZ2FtdXNoaVwgOwor5qmL6ISaID4ga3lvdWt5YWt1XCA7Civlt6bohZUgPiBoaWRhcml1ZGVcIDsKK+mrmOm8viA+IHRha2FpYmlraVwgOwor55yf54mpID4gc2hpbmJ1dHN1XCA7CivlvJTlrqIgPiBjaG91a3lha3VcIDsKK+eZvuiWrCA+IGh5YWt1eWFrdVwgOwor6Iy2562SID4gY2hhZHp1dHN1XCA7CivlvJ/lqJggPiBvdG9tdXN1bWVcIDsKK+ecgeeVpSA+IHNob3VyeWFrdVwgOwor6YCG5rWBID4gZ3lha3VyeXV1XCA7CivmrYzlv4MgPiB1dGFnb2tvcm9cIDsKK+mAseacqyA+IHNodXVtYXRzdVwgOwor552A5rC3ID4gY2hha3VoeW91XCA7Civnmb3oj4ogPiBzaGlyYWdpa3VcIDsKK+W5tOazoiA+IHRvc2hpbmFtaVwgOwor5q2j5a6kID4gc2Vpc2hpdHN1XCA7Civoj4rmnIggPiBraWt1ZHp1a2lcIDsKK+WIpealrSA+IGJldHN1Z3lvdVwgOwor5bm05q+OID4gdG9zaGlnb3RvXCA7CivpgLHml6UgPiBzaHV1aml0c3VcIDsKK+iKseihlyA+IGhhbmFtYWNoaVwgOwor5bed57iBID4ga2F3YWJ1Y2hpXCA7CivlvaLku6MgPiBrYXRhc2hpcm9cIDsKK+eZveiJsiA+IGhha3VzaG9rdVwgOwor5Yil5qOfID4gYmV0c3VtdW5lXCA7Civlhornq4sgPiBzYWt1cml0c3VcIDsKK+WztumiqCA+IHNoaW1ha2F6ZVwgOwor5byx5Y2SID4gamFrdXNvdHN1XCA7Civlg5XpgZQgPiBib2t1dGFjaGlcIDsKK+mrremdoiA+IGhpZ2VkenVyYVwgOwor5by15YqbID4gY2hvdXJ5b2t1XCA7Civou5/os6ogPiBuYW5zaGl0c3VcIDsKK+iPseW9oiA+IGhpc2hpZ2F0YVwgOwor6YCy5o2XID4gc2hpbmNob2t1XCA7Civlg7voqqwgPiBoZWtpc2V0c3VcIDsKK+iMtueVkSA+IGNoYWJhdGFrZVwgOwor5qiq57axID4geW9rb2R6dW5hXCA7CivlhY7ogLMgPiB1c2FnaW1pbWlcIDsKK+WHuuasoCA+IHNodWtrZXRzdVwgOwor5bO26ZmwID4gc2hpbWFrYWdlXCA7Civnn6LljbAgPiB5YWppcnVzaGlcIDsKK+edgOacjSA+IGNoYWt1ZnVrdVwgOwor5bu65Z2qID4gdGF0ZXRzdWJvXCA7Civlia/lsLogPiBmdWt1c2hha3VcIDsKK+WIneaYpSA+IGhhdHN1aGFydVwgOwor5YWx56uLID4ga3lvdXJpdHN1XCA7CivoirHoj7EgPiBoYW5hYmlzaGlcIDsKK+W7tuWdqiA+IG5vYmV0c3Vib1wgOwor5qW16YePID4ga3lva3VyeW91XCA7Civoia/orZggPiByeW91c2hpa2lcIDsKK+W8n+WIhiA+IG90b3V0b2J1blwgOwor6Imy6Kq/ID4gc2hpa2ljaG91XCA7Civps7blj6MgPiB0b2JpZ3VjaGlcIDsKK+WFq+emjyA+IGhhY2hpZnVrdVwgOwor6Imy6KaaID4gc2hpa2lrYWt1XCA7Civnn7Pku48gPiBzZWtpYnV0c3VcIDsKK+ats+WHuiA+IHNhaXNodXRzdVwgOwor55u05rWBID4gY2hva3VyeXV1XCA7Civoio3olqwgPiBzaGFrdXlha3VcIDsKK+WHuuacrSA+IHNodXNzYXRzdVwgOwor5Ymy5aKXID4gd2FyaW1hc2hpXCA7Civoip3ojYkgPiBzaGliYWt1c2FcIDsKK+ecn+adsSA+IG1haGlnYXNoaVwgOwor5qi455u0ID4gYm9rdWNob2t1XCA7CivliaXlpaogPiBoYWt1ZGF0c3VcIDsKK+W5leacqyA+IGJha3VtYXRzdVwgOwor5qSO6aqoID4gdHN1aWtvdHN1XCA7CivmraPlh7ogPiBzZWlzaHV0c3VcIDsKK+WHtuaXpSA+IGt5b3VqaXRzdVwgOwor6YGK5aSxID4geXV1c2hpdHN1XCA7Civou4ronaYgPiBrdXJ1bWFlYmlcIDsKK+WIneW9uSA+IGhhdHN1eWFrdVwgOwor6YG45Ye6ID4gc2Vuc2h1dHN1XCA7CivpgIblv4MgPiBneWFrdXNoaW5cIDsKK+i/q+aMgSA+IHNlcmltb2NoaVwgOwor552A5bqKID4gY2hha3VzaG91XCA7CivlubTlvLEgPiB0b3NoaXlvd2FcIDsKK+Wxsem2iSA+IHlhbWF1enVyYVwgOwor77y35p2vID4gZGFidXJ1aGFpXCA7CivnnYDluK0gPiBjaGFrdXNla2lcIDsKK+i+u+acrSA+IHRzdWppZnVkYVwgOwor6YGp5YiHID4gdGVraXNldHN1XCA7Civnmbrnl4UgPiBoYXRzdWJ5b3VcIDsKK+eXheitmCA+IGJ5b3VzaGlraVwgOwor5Ym15Ye6ID4gc291c2h1dHN1XCA7CivliKXlrqQgPiBiZXNzaGl0c3VcIDsKK+W5tOW1qSA+IHRvc2hpa2FzYVwgOwor5Yid5a2rID4gaGF0c3VtYWdvXCA7Civlh7rlvqEgPiBzaHV0c3VneW9cIDsKK+W5veWupCA+IHl1dXNoaXRzdVwgOwor55m9546JID4gc2hpcmF0YW1hXCA7Civnm7TmkoMgPiBjaG9rdWdla2lcIDsKK+W5tOWvhCA+IHRvc2hpeW9yaVwgOwor5qaO6Iy4ID4gZW5va2l0YWtlXCA7CivoiLnomasgPiBmdW5hbXVzaGlcIDsKK+eZveeGsSA+IGhha3VuZXRzdVwgOwor5qW16JaEID4ga3lva3VoYWt1XCA7Civnmb3nhoogPiBzaGlyb2t1bWFcIDsKK+W4huafsSA+IGhvYmFzaGlyYVwgOwor5Ymy5LuYID4gd2FyaXRzdWtlXCA7CivliJ3lpKIgPiBoYXRzdXl1bWVcIDsKK+WIhuWupCA+IGJ1bnNoaXRzdVwgOwor5bq25Ye6ID4gc2hvc2h1dHN1XCA7CivlhaXmu4UgPiBueXV1bWV0c3VcIDsKK+WJsuS4iyA+IHdhcmlzaGl0YVwgOwor5biC5p2+ID4gaWNoaW1hdHN1XCA7CivlhKrnlLcgPiB5YXNhb3Rva29cIDsKK+iKseeUuiA+IGhhbmFtYWNoaVwgOwor6L2i5q66ID4gcmVraXNhdHN1XCA7CivnmYjnlr4gPiBoYWlzaGl0c3VcIDsKK+ecn+WunyA+IHNoaW5qaXRzdVwgOwor55m95rudID4gc2hpcmF0YWtpXCA7CivpgJ/lj6MgPiBoYXlha3VjaGlcIDsKK+mAsuWFpSA+IHNoaW4nJ255dXVcIDsKK+WEsueJqSA+IG1vdWtlbW9ub1wgOwor6IWw6auYID4ga29zaGlkYWthXCA7CivmqYvmoYEgPiBoYXNoaWdldGFcIDsKK+mqqOizqiA+IGtvc3NoaXRzdVwgOwor6IWw6aqoID4ga29zaGlib25lXCA7Civkv67po74gPiBzaHV1c2hva3VcIDsKK+eZvea1qiA+IHNoaXJhbmFtaVwgOwor55m95rWcID4gc2hpcmFoYW1hXCA7CivoibbnqK4gPiB0c3V5YWRhbmVcIDsKK+mAn+WKmyA+IHNva3VyeW9rdVwgOwor6L675bqXID4gdHN1amltaXNlXCA7Civnmb3ms6IgPiBzaGlyYW5hbWlcIDsKK+iMtuaJgCA+IGNoYWRva29yb1wgOwor5bqD5Y+jID4gaGlyb2t1Y2hpXCA7CivlsLrpqqggPiBzaGFra290c3VcIDsKK+WHuuWhgSA+IHNodXRzdXJ1aVwgOwor55uu5bqHID4gbWFiaXNhc2hpXCA7Civnmb3msLQgPiBzaGlyb21penVcIDsKK+iJsuelniA+IHNoaWtpc2hpblwgOwor5YWl5qSNID4gbnl1dXNob2t1XCA7Civnm7TlsZ4gPiBjaG9rdXpva3VcIDsKK+WIneWHuiA+IHNob3NodXRzdVwgOwor5Yeh5aSxID4gYm9uc2hpdHN1XCA7Civlha3mnIggPiByb2t1Z2F0c3VcIDsKK+WFpeacrSA+IG55dXVzYXRzdVwgOwor6YCB5Ye6ID4gc291c2h1dHN1XCA7CivlsbHpgZMgPiB5YW1hbWljaGlcIDsKK+mAgOWHuiA+IHRhaXNodXRzdVwgOwor5qW956+AID4gZ2FrdXNldHN1XCA7CivluLjlpI8gPiB0b2tvbmF0c3VcIDsKK+eUs+mBlCA+IHNoaW50YXRzdVwgOwor6Iul5p2+ID4gd2FrYW1hdHN1XCA7CivlsYDplbcgPiBreW9rdWNob3VcIDsKK+msvOeTpiA+IG9uaWdhd2FyYVwgOwor5bid5a6kID4gdGVpc2hpdHN1XCA7CivluorkuIsgPiB5dWthc2hpdGFcIDsKK+edgOS/oSA+IGNoYWt1c2hpblwgOwor55m95pytID4gc2hpcm9mdWRhXCA7CivliIflhaUgPiBzZXRzdW55dXVcIDsKK+aomeacrSA+IGh5b3VzYXRzdVwgOwor5Ye65YuVID4gc2h1dHN1ZG91XCA7Civov6vlipsgPiBoYWt1cnlva3VcIDsKK+WxkemJhCA+IGt1enV0ZXRzdVwgOwor6auq57axID4ga2FtaWR6dW5hXCA7CivpgJDkuIAgPiBjaGlrdWljaGlcIDsKK+S+temjnyA+IHNoaW5zaG9rdVwgOwor6Iqx5rC3ID4gaGFuYWdvb3JpXCA7Civkv4Tpm6ggPiBuaXdha2FhbWVcIDsKK+iGoOizqiA+IGtvdXNoaXRzdVwgOwor6Iy25a6kID4gY2hhc2hpdHN1XCA7Civnmb3ml6UgPiBoYWt1aml0c3VcIDsKK+S+oOmqqCA+IGt5b3Vrb3RzdVwgOwor5bCR6aOfID4gc2hvdXNob2t1XCA7Civlt7PlubQgPiBoZWJpZG9zaGlcIDsKK+iJtueJqSA+IHRzdXlhbW9ub1wgOwor5bCP6aOfID4gc2hvdXNob2t1XCA7CivlhrflpbQgPiBoaXlheWFra29cIDsKK+Wwj+mgrSA+IGtvZ2FzaGlyYVwgOwor5bGI6L6xID4ga3V0c3Vqb2t1XCA7CivpqqjohpwgPiBrb3RzdW1ha3VcIDsKK+eUuuinkiA+IG1hY2hpa2Fkb1wgOwor6L675ZCbID4gdHN1amlnaW1pXCA7CivnnIHlipsgPiBzaG91cnlva3VcIDsKK+mvieW5nyA+IGtvaW5vYm9yaVwgOwor6LWk6bCvID4gYWthaXdhc2hpXCA7CivpqqjogokgPiBrb3RzdW5pa3VcIDsKK+WGheWupCA+IG5haXNoaXRzdVwgOwor5bed5bK4ID4ga2F3YWdpc2hpXCA7CivluZXkuIsgPiBtYWt1c2hpdGFcIDsKK+ebruWNsCA+IG1lamlydXNoaVwgOwor5bC76Lu9ID4gc2hpcmlnYXJ1XCA7CivnlLfooYYgPiBvdG9rb3NodXVcIDsKK+mwkOWPoyA+IHdhbmlndWNoaVwgOwor5L+h6LaKID4gc2hpbicnZXRzdVwgOwor5L+K6YC4ID4gc2h1bicnaXRzdVwgOwor5bGe6KiXID4gc2hva3V0YWt1XCA7Civnm7LliKQgPiBtZWt1cmFiYW5cIDsKK+iDuOmqqCA+IGt5b3Vrb3RzdVwgOwor5a+d6aOfID4gc2hpbnNob2t1XCA7CivoibLmsqIgPiBzaGlraXRha3VcIDsKK+WFreWwuiA+IHJva3VzaGFrdVwgOwor6L6b5Y+jID4ga2FyYWt1Y2hpXCA7CivoibLmrLIgPiBzaGlraXlva3VcIDsKK+alteeGsSA+IGdva3VuZXRzdVwgOwor6Lez6JmrID4gdG9iaW11c2hpXCA7Civnl5vng4ggPiB0c3V1cmV0c3VcIDsKK+iHo+evgCA+IHNoaW5zZXRzdVwgOwor6aqo566xID4ga290c3ViYWtvXCA7CivnmoflrqQgPiBrb3VzaGl0c3VcIDsKK+S/l+iqrCA+IHpva3VzZXRzdVwgOwor5YSy5b25ID4gbW91a2V5YWt1XCA7Civkvpvov7AgPiBreW91anV0c3VcIDsKK+Wzu+eDiCA+IHNodW5yZXRzdVwgOwor55S36IW5ID4gb3Rva29iYXJhXCA7CivmpbXmtYEgPiBreW9rdXJ5dXVcIDsKK+eVpeeroCA+IHJ5YWt1c2hvdVwgOwor5YaN5Ye6ID4gc2Fpc2h1dHN1XCA7Civlt53lj6MgPiBrYXdhZ3VjaGlcIDsKK+iJr+aXpSA+IHJ5b3VqaXRzdVwgOwor55Wl56ewID4gcnlha3VzaG91XCA7Civlt6bliY0gPiBoaWRhcmltYWVcIDsKK+WvvuizqiA+IHRhaXNoaXRzdVwgOwor5bCP6KqsID4gc2hvdXNldHN1XCA7Civlt6blhZogPiBoaWRhcml0b3VcIDsKK+iEh+mBkyA+IHdha2ltaWNoaVwgOwor5qO556ekID4gc2FvYmFrYXJpXCA7CivmoZzosp0gPiBzYWt1cmFnYWlcIDsKK+eXheayoSA+IGJ5b3Vib3RzdVwgOwor5YWx5YqbID4ga3lvdXJ5b2t1XCA7CivoiLnmqYsgPiBmdW5hYmFzaGlcIDsKK+mrquayuSA+IGthbWlhYnVyYVwgOwor55eF5q2/ID4gYnlvdWJvdHN1XCA7CivkvrXonZUgPiBzaGluc2hva3VcIDsKK+eXheasoCA+IGJ5b3VrZXRzdVwgOwor5YWr5YiHID4geWF0c3VnaXJpXCA7CivlhaXlipsgPiBueXV1cnlva3VcIDsKK+eUuuetiyA+IG1hY2hpc3VqaVwgOwor6Imy5oW+ID4gc2hpa2l5b2t1XCA7CivohILotrMgPiBhYnVyYWFzaGlcIDsKK+eUuueriyA+IGNob3VyaXRzdVwgOwor6ISa6Ki7ID4ga3lha3VjaHV1XCA7CivmpbXmnIggPiBnb2t1Z2V0c3VcIDsKK+iEguizqiA+IHNoaXNoaXRzdVwgOwor6Iif5qmLID4gZnVuYWhhc2hpXCA7CivkvpvooYAgPiBreW91a2V0c3VcIDsKK+W3neS4iyA+IGthd2FzaGltb1wgOwor5a6f6YyyID4gaml0c3Vyb2t1XCA7CivnlZznlJ8gPiBjaGlrdXNob3VcIDsKK+iJsuW8sSA+IHNoaWtpamFrdVwgOwor55m65Ye6ID4gaGFzc2h1dHN1XCA7CivohbDnuIQgPiBrb3NoaW5hd2FcIDsKK+eUn+evgCA+IG5hbWFidXNoaVwgOwor5bCx6IG3ID4gc2h1dXNob2t1XCA7CivotrPohbAgPiBhc2hpa29zaGlcIDsKK+WFpeS7jyA+IG55dXVidXRzdVwgOwor5YWl5LqkID4gaXJpbWFqaXJpXCA7CivohbDntJAgPiBrb3NoaWhpbW9cIDsKK+S/rueviSA+IHNodXVjaGlrdVwgOwor6IKJ6aOfID4gbmlrdXNob2t1XCA7Civkv6HntIQgPiBzaGluJyd5YWt1XCA7CivohLHokL0gPiBkYXRzdXJha3VcIDsKK+S9k+izqiA+IHRhaXNoaXRzdVwgOwor6Lyp5Ye6ID4gaGFpc2h1dHN1XCA7Civkv67npZMgPiBzaHV1ZnV0c3VcIDsKK+WtpumWpSA+IGdha3ViYXRzdVwgOwor5L2N6LKgID4ga3VyYWltYWtlXCA7Civoi5fku6MgPiBuYXdhc2hpcm9cIDsKK+WxseeUtyA+IHlhbWFvdG9rb1wgOwor5qGc6I2JID4gc2FrdXJhc291XCA7CivlrqLotrMgPiBreWFrdWFzaGlcIDsKK+WxnuebriA+IHNob2t1bW9rdVwgOwor5L+X562GID4gem9rdWhpdHN1XCA7CivlsI/ogbcgPiBzaG91c2hva3VcIDsKK+WEn+WNtCA+IHNob3VreWFrdVwgOwor5qW95b6LID4gZ2FrdXJpdHN1XCA7CivmoZzoibIgPiBzYWt1cmFpcm9cIDsKK+Wwj+e+iiA+IGtvaGl0c3VqaVwgOwor5a6f6LOqID4gamlzc2hpdHN1XCA7CivogpjpiYQgPiBoaWppdGV0c3VcIDsKK+izg+mkhSA+IGNoaW5tb2NoaVwgOwor5a6d6LKdID4gdGFrYXJhZ2FpXCA7Civou73lj6MgPiBrYXJ1a3VjaGlcIDsKK+i2heiEsSA+IGNob3VkYXRzdVwgOwor55S354mpID4gb3Rva29tb25vXCA7CivogbfplbcgPiBzaG9rdWNob3VcIDsKK+S7j+mhlCA+IGhvdG9rZWdhb1wgOwor5LuP6aCYID4gZnV0c3VyeW91XCA7CivnlaXmrbQgPiByeWFrdXJla2lcIDsKK+mqqOafhCA+IGtvdHN1Z2FyYVwgOwor6LWk6ImyID4gc2VraXNob2t1XCA7CivlsI/nr4AgPiBzaG91c2V0c3VcIDsKK+Wwu+eZliA+IHNoaXJpa3VzZVwgOwor6Iag5ryGID4ga291c2hpdHN1XCA7Civls7blvbEgPiBzaGltYWthZ2VcIDsKK+alteWwjyA+IGt5b2t1c2hvdVwgOwor5L+154mpID4gaHlvdW1vdHN1XCA7CivnlJ/niKogPiBuYW1hZHp1bWVcIDsKK+advumiqCA+IG1hdHN1a2F6ZVwgOwor6LaF57W2ID4gY2hvdXpldHN1XCA7CivoiLnlrqQgPiBzZW5zaGl0c3VcIDsKK+iFuueGsSA+IHNlbicnbmV0c3VcIDsKK+adn+mrqiA+IHNva3VoYXRzdVwgOwor6Lui5Ye6ID4gdGVuc2h1dHN1XCA7CivohKnnq7kgPiBzaHV1Y2hpa3VcIDsKK+WztuWztiA+IHNoaW1hamltYVwgOwor55Wl5pyNID4gcnlha3VmdWt1XCA7Civls7blsbEgPiBzaGltYXlhbWFcIDsKK+msseWLgyA+IHV0c3Vib3RzdVwgOwor5p2x6ZuyID4gc2hpbm9ub21lXCA7CivnlJ/mu4UgPiBzaG91bWV0c3VcIDsKK+S/l+eJqSA+IHpva3VidXRzdVwgOwor6ISx56GrID4gZGF0c3VyeXV1XCA7CivohIjntaEgPiBteWFrdXJha3VcIDsKK+WtpuitmCA+IGdha3VzaGlraVwgOwor5L6155WlID4gc2hpbnJ5YWt1XCA7CivlraboqqwgPiBnYWt1c2V0c3VcIDsKK+iBt+iyrCA+IHNob2t1c2VraVwgOwor6Im25LqLID4gdHN1eWFnb3RvXCA7CivnjonptKsgPiB0YW1hc2hpZ2lcIDsKK+eTpueJiCA+IGthd2FyYWJhblwgOwor5YK35Y+jID4ga2l6dWd1Y2hpXCA7Civlr4bntIQgPiBtaXRzdXlha3VcIDsKK+WtpuihkyA+IGdha3VqdXRzdVwgOwor6LuS5LiLID4gbm9raXNoaXRhXCA7Civou4rku6MgPiBrdXJ1bWFkYWlcIDsKK+WAn+aWmSA+IHNoYWt1cnlvdVwgOwor6LOH6LOqID4gc2hpc2hpdHN1XCA7CivkurrpgZQgPiBoaXRvdGFjaGlcIDsKK+WAmeaWhyA+IHNvdXJvdWJ1blwgOwor5a+655S3ID4gdGVyYW90b2tvXCA7CivmpbXljJcgPiBreW9rdWhva3VcIDsKK+iEseeNhCA+IGRhdHN1Z29rdVwgOwor55S65pa5ID4gbWFjaGlrYXRhXCA7Civnl5vliIcgPiB0c3V1c2V0c3VcIDsKK+mrmOWdjyA+IHRha2F0c3VraVwgOwor6LK46LODID4ga2FzaGljaGluXCA7CivlgInmlbcgPiBrdXJhc2hpa2lcIDsKK+S5numjnyA+IGtvdHN1amlraVwgOwor5Ly457iuID4gc2hpbnNodWt1XCA7Civkurros6ogPiBoaXRvamljaGlcIDsKK+acnemjnyA+IGNob3VzaG9rdVwgOwor55a15Y+jID4ga2l6dWd1Y2hpXCA7Civls7vliKUgPiBzaHVuYmV0c3VcIDsKK+WxiuabuCA+IHRvZG9rZXNob1wgOwor5a6i562LID4ga3lha3VzdWppXCA7CivmnI3po74gPiBmdWt1c2hva3VcIDsKK+WCkeWHuiA+IGtlc3NodXRzdVwgOwor5LyR6IG3ID4ga3l1dXNob2t1XCA7CivnlLLmiYAgPiBrYW5kb2tvcm9cIDsKK+S6jOmBkyA+IGZ1dGFtaWNoaVwgOwor6Ii55Li7ID4gZnVuYW51c2hpXCA7Civpo5/pgJogPiBzaG9rdXRzdXVcIDsKK+WuoueoriA+IGt5YWt1ZGFuZVwgOwor6LOK6JmQID4gem9rdWd5YWt1XCA7CivkubPpiaIgPiBueXV1YmFjaGlcIDsKK+aciOmhjSA+IGdldHN1Z2FrdVwgOwor5pyI6aCDID4gdHN1a2lnb3JvXCA7CivkvZznlLcgPiBzYWt1b3Rva29cIDsKK+eUt+W9uSA+IG90b2tveWFrdVwgOwor5LiK6bayID4gam91Yml0YWtpXCA7CivohZXmnpUgPiB1ZGVtYWt1cmFcIDsKK+i1pOeGsSA+IHNla2luZXRzdVwgOwor6IiM5YWIID4gc2hpdGFzYWtpXCA7CivohbnmjIEgPiBoYXJhbW9jaGlcIDsKK+ePjeiqrCA+IGNoaW5zZXRzdVwgOwor5LuY6JC9ID4gdHN1a2VvY2hpXCA7CivohbDmjpsgPiBrb3NoaWtha2VcIDsKK+S5hemXiiA+IGt5dXVrYXRzdVwgOwor5a+G54yfID4gbWl0c3VyeW91XCA7CivnlLPlubQgPiBzYXJ1ZG9zaGlcIDsKK+adkOizqiA+IHphaXNoaXRzdVwgOwor5p2+6J2JID4gbWF0c3V6ZW1pXCA7CivkuqzooaggPiBreW91b21vdGVcIDsKK+iEmuazqCA+IGt5YWt1Y2h1dVwgOwor5qKF5pqmID4gdW1lZ295b21pXCA7CivkvZzniakgPiBzYWt1bW90c3VcIDsKK+iznue9sCA+IHNob3ViYXRzdVwgOwor5a2Q576KID4ga29oaXRzdWppXCA7CivlrqTnlLogPiBtdXJvbWFjaGlcIDsKK+Wwj+absiA+IHNob3VreW9rdVwgOwor5qSc5Ye6ID4ga2Vuc2h1dHN1XCA7Civkv4rmipwgPiBzaHVuYmF0c3VcIDsKK+Wvhua8gSA+IG1pdHN1cnlvdVwgOwor6IKJ562GID4gbmlrdWhpdHN1XCA7CivohbDlvLEgPiBrb3NoaXlvd2FcIDsKK+iDhueOiSA+IGtpbW90dGFtYVwgOwor5p2+6Iy4ID4gbWF0c3V0YWtlXCA7CivmoZzmoYMgPiBzYWt1cmFuYm9cIDsKK+Wvgua7hSA+IGpha3VtZXRzdVwgOwor5pys6LOqID4gaG9uc2hpdHN1XCA7Civku5TnvoogPiBrb2hpdHN1amlcIDsKK+eUo+WupCA+IHNhbnNoaXRzdVwgOwor6IWw5biDID4ga29zaGludW5vXCA7CivohbDlt7sgPiBrb3NoaW1ha2lcIDsKK+S9g+eFriA+IHRzdWt1ZGFuaVwgOwor5L615o6gID4gc2hpbnJ5YWt1XCA7CivmoYHmqYsgPiBrZXRhYmFzaGlcIDsKK+actOiopSA+IGJva3V0b3RzdVwgOwor6aOf6JmrID4gc2hva3VjaHV1XCA7Civmnb7ohIIgPiBtYXRzdXlhbmlcIDsKK+S4g+mboyA+IHNoaWNoaW5hblwgOwor5L2O5rm/ID4gdGVpc2hpdHN1XCA7CivnlLflnYIgPiBvdG9rb3pha2FcIDsKK+Wuv+aziiA+IHNodWt1aGFrdVwgOwor5Lyv54i1ID4gaGFrdXNoYWt1XCA7CivmopPlvJMgPiBhenVzYXl1bWlcIDsKK+mkheiCjCA+IG1vY2hpaGFkYVwgOwor5bGF5a6kID4ga3lvc2hpdHN1XCA7CivmnKjoqKUgPiBib2t1dG90c3VcIDsKK+mhjemamyA+IGhpdGFpZ2l3YVwgOwor55WZ5YilID4gcnl1dWJldHN1XCA7Civkv6Hlrp8gPiBzaGluaml0c3VcIDsKK+i0iOeJqSA+IG9rdXJpbW9ub1wgOwor6aeQ5pelID4gY2h1dW5pY2hpXCA7Civmn7/muIsgPiBrYWtpc2hpYnVcIDsKK+S4i+mHkSA+IHNoaXRhZ2FuZVwgOwor5Lit6LaKID4gY2h1dWdvc2hpXCA7CivlqpLos6ogPiBiYWlzaGl0c3VcIDsKK+S5vuiNiSA+IGhvc2hpZ3VzYVwgOwor55C054iqID4ga290b2R6dW1lXCA7CivohbDlnqMgPiBrb3NoaWdha2lcIDsKK+S/guWumCA+IGtha2FyaWthblwgOwor6ISI5pCPID4gbXlha3VoYWt1XCA7CivnjonomasgPiB0YW1hbXVzaGlcIDsKK+eUn+WUviA+IG5hbWF0c3ViYVwgOwor6aOf6IKJID4gc2hva3VuaWt1XCA7Civmnb7nrKAgPiBtYXRzdWthc2FcIDsKK+iEiOaLjSA+IG15YWt1aGFrdVwgOwor5LiD6YGTID4gc2hpY2hpZG91XCA7CivnlLPlhaUgPiBtb3VzaGlpcmVcIDsKK+WuouanmCA+IGt5YWt1c2FtYVwgOwor5Lmz6ImyID4gbnl1dXNob2t1XCA7Civmm7Loqr8gPiBreW9rdWNob3VcIDsKK+WAn+S4uyA+IGthcmludXNoaVwgOwor5Lm+6IKJID4gaG9zaGluaWt1XCA7Civlrr/mlpkgPiBzaHVrdXJ5b3VcIDsKK+Wun+alrSA+IGppdHN1Z3lvdVwgOwor5a6/5pW1ID4gc2h1a3V0ZWtpXCA7CivkuIPovKogPiBzaGljaGlyaW5cIDsKK+eUo+WHuiA+IHNhbnNodXRzdVwgOwor5L2V5pelID4gbmFuJyduaWNoaVwgOwor6LOq54K5ID4gc2hpdHN1dGVuXCA7CivohLPlrqQgPiBub3VzaGl0c3VcIDsKK+WxseS8jyA+IHlhbWFidXNoaVwgOwor5a6f5qCqID4gaml0c3VrYWJ1XCA7CivkvrXlpaogPiBzaGluZGF0c3VcIDsKK+eUuuS4rSA+IG1hY2hpbmFrYVwgOwor55S65LimID4gbWFjaGluYW1pXCA7CivkuIros6ogPiBqb3VzaGl0c3VcIDsKK+S4i+iyvCA+IHNoaXRhYmFyaVwgOwor6aOf57SFID4gc2hva3ViZW5pXCA7CivkvqDlrqIgPiBreW91a3lha3VcIDsKK+abtOihoyA+IGtvcm9tb2dhZVwgOwor6aOf57OnID4gc2hva3VyeW91XCA7CivkuK3ooaggPiBuYWthb21vdGVcIDsKK+Wwj+WnkSA+IGtvanV1dG9tZVwgOwor5qCD5pyoID4gdG9jaGlub2tpXCA7CivohILmgKcgPiBhYnVyYXNob3VcIDsKK+WAieS4uyA+IGt1cmFudXNoaVwgOwor5LiD6LOiID4gc2hpY2hpa2VuXCA7CivlsLvlj5YgPiBzaGlyaXRvcmlcIDsKK+agvOW8jyA+IGtha3VzaGlraVwgOwor5pi86bO2ID4gaGlydXRvbmJpXCA7Civkuq7nm7QgPiByeW91Y2hva3VcIDsKK+aaoumBlCA+IGNob3V0YXRzdVwgOwor6IWw5YWDID4ga29zaGltb3RvXCA7CivohIflt64gPiB3YWtpemFzaGlcIDsKK+adieeuuCA+IHN1Z2liYXNoaVwgOwor5LuY54S8ID4gdHN1a2V5YWtpXCA7CivlrabmrpYgPiBnYWt1c2hva3VcIDsKK+agquW8jyA+IGthYnVzaGlraVwgOwor5p+P5qeZID4gYnlha3VzaGluXCA7Civni6zphYwgPiBkb2t1c2hha3VcIDsKK+WvheW5tCA+IHRvcmFkb3NoaVwgOwor6LOq5qipID4gc2hpY2hpa2VuXCA7CivlsI/lkoQgPiBrb2JhbmFzaGlcIDsKK+S4uOiFsCA+IG1hcnVnb3NoaVwgOwor5pi86aOvID4gaGlydW1lc2hpXCA7CivkvJDmnKggPiBiYXRzdWJva3VcIDsKK+S/iuWCkSA+IHNodW5rZXRzdVwgOwor6IG35q20ID4gc2hva3VyZWtpXCA7CivkuYvnuZ4gPiBzaGluJydueXV1XCA7CivmnrbmqYsgPiBrYWtlaGFzaGlcIDsKK+afj+acqCA+IGthc2hpd2FnaVwgOwor5Luu5qmLID4ga2FyaWJhc2hpXCA7CivosYbnspIgPiBtYW1ldHN1YnVcIDsKK+S8keaXpSA+IGt5dXVqaXRzdVwgOwor5Lit6IWwID4gY2h1dWdvc2hpXCA7CivkuIrolqwgPiB1d2FndXN1cmlcIDsKK+WvhuWupCA+IG1pc3NoaXRzdVwgOwor546J56ugID4gZ3lva3VzaG91XCA7CivkvrXlhaUgPiBzaGluJydueXV1XCA7Civlrr/lsIYgPiBzaHVrdXNob3VcIDsKK+WwhuWNkiA+IHNob3Vzb3RzdVwgOwor5Lih6IiMID4gcnlvdXpldHN1XCA7Civogbfmpa0gPiBzaG9rdWd5b3VcIDsKK+WwjuWHuiA+IGRvdXNodXRzdVwgOwor5a6/5a2mID4gc2h1a3VnYWt1XCA7CivlsI/lhoogPiBzaG91c2F0c3VcIDsKK+S4oeiEmiA+IHJ5b3VreWFrdVwgOwor6ISx5Ye6ID4gZGFzc2h1dHN1XCA7CivlrqLluK0gPiBreWFrdXNla2lcIDsKK+S4i+iNiSA+IHNoaXRha3VzYVwgOwor5bCE5Ye6ID4gc2hhc2h1dHN1XCA7CivmmqbooZMgPiByZWtpanV0c3VcIDsKK+actOebtCA+IGJva3VjaG9rdVwgOwor6LWk5ZyfID4gYWthdHN1Y2hpXCA7CivohIXllp0gPiBreW91a2F0c3VcIDsKK+S4ree1tiA+IGNodXV6ZXRzdVwgOwor5LiL6IW5ID4gc2hpdGFiYXJhXCA7CivohLHkv5cgPiBkYXRzdXpva3VcIDsKK+afj+aJiyA+IGthc2hpd2FkZVwgOwor5Lm+54mpID4gaG9zaGltb25vXCA7Civlrp/lraYgPiBqaXRzdWdha3VcIDsKK+ahn+S/tSA+IHNhbmRhd2FyYVwgOwor54yf6ImyID4gcnlvdXNob2t1XCA7CivkuIDohIggPiBpY2hpbXlha3VcIDsKK+i1pOWPoyA+IHNla2lndWNoaVwgOwor5Lit56uLID4gY2h1dXJpdHN1XCA7CivogbfmjowgPiBzaG9rdXNob3VcIDsKK+WupOWkliA+IHNoaXRzdWdhaVwgOwor5a+S5Y21ID4ga2FudGFtYWdvXCA7Civls7bjgIUgPiBzaGltYWppbWFcIDsKK+izquaEnyA+IHNoaXRzdWthblwgOwor5qC85YilID4ga2FrdWJldHN1XCA7CivmoLjlipsgPiBrYWt1cnlva3VcIDsKK+S4oeerryA+IHJ5b3VoYXNoaVwgOwor5Lih56uLID4gcnlvdXJpdHN1XCA7CivogJDmub8gPiB0YWlzaGl0c3VcIDsKK+S4i+e0kCA+IHNoaXRhaGltb1wgOwor5LuK5pelID4ga29uJyduaWNoaVwgOwor5pep6aOvID4gaGF5YW1lc2hpXCA7CivosrjmlrkgPiBrYXNoaWthdGFcIDsKK+S5vua5vyA+IGthbnNoaXRzdVwgOwor6aGN57iBID4gZ2FrdWJ1Y2hpXCA7CivkuIDnspIgPiBoaXRvdHN1YnVcIDsKK+Wroea1gSA+IGNoYWt1cnl1dVwgOwor5puy55uuID4ga3lva3Vtb2t1XCA7Civpo5/mrLIgPiBzaG9rdXlva3VcIDsKK+aftOWeoyA+IHNoaWJhZ2FraVwgOwor5Lqu5pyIID4gcnlvdWdldHN1XCA7CivkuIvnqb8gPiBzaGl0YWJha2lcIDsKK+S4gOevgCA+IGhpdG9mdXNoaVwgOwor6Z2p6Z20ID4ga2F3YWd1dHN1XCA7CivkuK3nlaUgPiBjaHV1cnlha3VcIDsKK+eKtuiiiyA+IGpvdWJ1a3Vyb1wgOwor54mp6YePID4gYnV0c3VyeW91XCA7CivmnKvmtYEgPiBtYXRzdXJ5dXVcIDsKK+agquS4uyA+IGthYnVudXNoaVwgOwor5LiL55+zID4gc2hpdGFpc2hpXCA7Civpo6/mmYIgPiBtZXNoaWRva2lcIDsKK+S9nOS7mCA+IHNha3VkenVrZVwgOwor5LiK5568ID4gdXdhbWFidXRhXCA7CivkvK/lj5QgPiBoYWt1c2h1a3VcIDsKK+eIqumdqSA+IHRzdW1ha2F3YVwgOwor5a6k5YaFID4gc2hpdHN1bmFpXCA7Civlrr/kuLsgPiB5YWRvbnVzaGlcIDsKK+S5hea/tiA+IGt5dXVrYXRzdVwgOwor5LqM5pyIID4gZnV0YXRzdWtpXCA7Civml6XpjLIgPiBuaWNoaXJva3VcIDsKK+S4gOeepSA+IGljaGliZXRzdVwgOwor5Luk5a6kID4gcmVpc2hpdHN1XCA7CivkvZPkuK0gPiBrYXJhZGFqdXVcIDsKK+S7suWlvSA+IG5ha2F5b3NoaVwgOwor6aOf5paZID4gc2hva3VyeW91XCA7Civoqr/pq6ogPiBjaG91aGF0c3VcIDsKK+eJqeizqiA+IGJ1c3NoaXRzdVwgOwor5pep6YGTID4gaGF5YW1pY2hpXCA7CivmlrDpm6ogPiBzaGluc2V0c3VcIDsKK+eJh+mBkyA+IGthdGFtaWNoaVwgOwor54m56KitID4gdG9rdXNldHN1XCA7Civku4/lraYgPiBidXRzdWdha3VcIDsKK+mcsumcnCA+IHRzdXl1amltb1wgOwor5pyt5p2fID4gc2F0c3V0YWJhXCA7CivlpI/ps6UgPiBuYXRzdWRvcmlcIDsKK+izquWVjyA+IHNoaXRzdW1vblwgOwor54us56uLID4gZG9rdXJpdHN1XCA7CivmnIjmrKEgPiB0c3VraW5hbWlcIDsKK+isrOiqrCA+IGJ5dXVzZXRzdVwgOwor5a2m5Y2SID4gZ2FrdXNvdHN1XCA7Civmm7LmtYEgPiBreW9rdXJ5dXVcIDsKK+mjn+aFviA+IHNob2t1eW9rdVwgOwor5LiA54mpID4gaWNoaW1vdHN1XCA7CivlpbTovKkgPiB5YXRzdWJhcmFcIDsKK+WtpuWKmyA+IGdha3VyeW9rdVwgOwor5Lqu5a+fID4gcnlvdXNhdHN1XCA7CivkuK3mrKEgPiBuYWthdHN1Z2lcIDsKK+izquWIuCA+IHNoaWNoaWtlblwgOwor5a2k5YWQID4gbWluYXNoaWdvXCA7Civml6forZggPiBreXV1c2hpa2lcIDsKK+S6uuWmuyA+IGhpdG9kenVtYVwgOwor5paw6YeIID4gc2hpbnNoYWt1XCA7Civml6Xoq74gPiBuaWNoaWRha3VcIDsKK+aXp+iqrCA+IGt5dXVzZXRzdVwgOwor6IKh5LiLID4gbWF0YXNoaXRhXCA7Civnj43lrqIgPiBjaGlua3lha3VcIDsKK+WklumdoiA+IHNvdG9kenVyYVwgOwor5pil6ImyID4gc2h1bnNob2t1XCA7Civnv4zmnIggPiB5b2t1Z2V0c3VcIDsKK+iBtOWKmyA+IGNob3VyeW9rdVwgOwor5Lqs5aWzID4ga3lvdW9uJyduYVwgOwor5Liy5p+/ID4ga3VzaGlnYWtpXCA7CivkuZ3mipggPiBreXV1c2V0c3VcIDsKK+e/jOaXpSA+IHlva3VqaXRzdVwgOwor5paf6YWMID4gc2hpbnNoYWt1XCA7CivkuKHmpbUgPiByeW91a3lva3VcIDsKK+S7j+WQjSA+IGJ1dHN1bXlvdVwgOwor54m56ImyID4gdG9rdXNob2t1XCA7CivkuqHlpLEgPiBib3VzaGl0c3VcIDsKK+mjn+WuoiA+IHNob2treWFrdVwgOwor54i26KaqID4gY2hpY2hpb3lhXCA7Civku67kvY8gPiBrYXJpenVtYWlcIDsKK+S6huWvnyA+IHJ5b3VzYXRzdVwgOwor6Zuq6Z20ID4geXVraWd1dHN1XCA7Civnj77lh7ogPiBnZW5zaHV0c3VcIDsKK+S7j+WKmyA+IGJ1dHN1cmlraVwgOwor6Kq/6YGUID4gY2hvdXRhdHN1XCA7CivkuIvmp5ggPiBzaGltb3phbWFcIDsKK+e5sOi2iiA+IGt1cmlrb3NoaVwgOwor54mp6IWwID4gbW9ub2dvc2hpXCA7CivkuInmpI8gPiBtaXRzdW1hdGFcIDsKK+S4oeaXpSA+IHJ5b3VqaXRzdVwgOwor5p2+5Y6fID4gbWF0c3ViYXJhXCA7Civos4PlgJ8gPiBjaGluc2hha3VcIDsKK+eGn+mjnyA+IGp1a3VzaG9rdVwgOwor5paw6KqsID4gc2hpbnNldHN1XCA7Civku5jkurogPiB0c3VrZWJpdG9cIDsKK+aWsOiosyA+IHNoaW4nJ3lha3VcIDsKK+aWsOiorSA+IHNoaW5zZXRzdVwgOwor546J5bCGID4gZ3lva3VzaG91XCA7CivmnIjlvbEgPiB0c3VraWthZ2VcIDsKK+aciOW9oiA+IHRzdWtpZ2F0YVwgOwor5LiD5pucID4gc2hpY2hpeW91XCA7CivkuIDmnIggPiBoaXRvdHN1a2lcIDsKK+WkqeizqiA+IHRlbnNoaXRzdVwgOwor5LiL5pW3ID4gc2hpdGFqaWtpXCA7CivkuIPmmJ8gPiBzaGljaGlzZWlcIDsKK+aYn+epuiA+IGhvc2hpem9yYVwgOwor54m5562GID4gdG9rdWhpdHN1XCA7CivkuIDml6UgPiB0c3VpdGFjaGlcIDsKK+S6uuS8nSA+IGhpdG9kenV0ZVwgOwor54uQ54GrID4ga2l0c3VuZWJpXCA7CivniIboo4IgPiBiYWt1cmV0c3VcIDsKK+eJueeriyA+IHRva3VyaXRzdVwgOwor5Lq65LuYID4gaGl0b2R6dWtpXCA7CivpnZLokI0gPiBhb3VraWt1c2FcIDsKK+WkseiogCA+IHNoaXRzdWdlblwgOwor6Zuq6YGTID4geXVraW1pY2hpXCA7Civpm5HpjLIgPiB6YXRzdXJva3VcIDsKK+Wls+iFuSA+IG9uJyduYWJhcmFcIDsKK+mjn+WNkyA+IHNob2t1dGFrdVwgOwor54ax6YePID4gbmV0c3VyeW91XCA7Civpm6rovrEgPiBzZXRzdWpva3VcIDsKK+aWsOiWrCA+IHNoaW4nJ3lha3VcIDsKK+mgreagqiA+IGF0YW1ha2FidVwgOwor5aSx6KGAID4gc2hpa2tldHN1XCA7CivmmqbmnIggPiByZWtpZ2V0c3VcIDsKK+WkieizqiA+IGhlbnNoaXRzdVwgOwor6aOf5Ye6ID4gaGFtaWRhc2hpXCA7CivlpJzoqbEgPiB5b2JhbmFzaGlcIDsKK+S4gOaKuSA+IGljaGltYXRzdVwgOwor5aSp6KKLID4gdGVuYnVrdXJvXCA7CivpnbTntJAgPiBrdXRzdWhpbW9cIDsKK+aapuaXpSA+IHJla2lqaXRzdVwgOwor6Kmz6L+wID4gc2hvdWp1dHN1XCA7Civpo5/lgrcgPiBzaG9rdXNob3VcIDsKK+eJueeZuiA+IHRva3VoYXRzdVwgOwor6Z2056+mID4ga3V0c3ViZXJhXCA7CivkuIvlvbkgPiBzaGl0YXlha3VcIDsKK+S4oeWyuCA+IHJ5b3VnaXNoaVwgOwor5puy5a2mID4ga3lva3VnYWt1XCA7Civnhp/pgZQgPiBqdWt1dGF0c3VcIDsKK+mdtOeuhiA+IGt1dHN1YmVyYVwgOwor5LiR5bm0ID4gdXNoaWRvc2hpXCA7CivpnLLojYkgPiB0c3V5dWt1c2FcIDsKK+iplemHiCA+IGh5b3VzaGFrdVwgOwor5LiA5b6LID4gaWNoaXJpdHN1XCA7CivniannmYIgPiBidXRzdXJ5b3VcIDsKK+miqOWPoyA+IGthemFndWNoaVwgOwor5aSP6J2JID4gbmF0c3V6ZW1pXCA7CivpnJ7ojYkgPiBrYXN1bWlzb3VcIDsKK+eJp+eVnCA+IGJva3VjaGlrdVwgOwor6Kq/6ImyID4gY2hvdXNob2t1XCA7CivnhLzppIUgPiB5YWtpbW9jaGlcIDsKK+acq+WDmiA+IGJhdHN1cnlvdVwgOwor6Ki76YeIID4gY2h1dXNoYWt1XCA7CivoqbPoqqwgPiBzaG91c2V0c3VcIDsKK+aWsOe3kSA+IHNoaW5yeW9rdVwgOwor5aSx6ISaID4gc2hpa2t5YWt1XCA7CivlpLHogbcgPiBzaGlzc2hva3VcIDsKK+aWsOe0hCA+IHNoaW4nJ3lha3VcIDsKK+Wkj+iPiiA+IG5hdHN1Z2lrdVwgOwor57ie6JuHID4gc2hpbWFoZWJpXCA7CivkuK3lk7IgPiBjaHV1dGV0c3VcIDsKK+ios+i/sCA+IHlha3VqdXRzdVwgOwor5paw56+JID4gc2hpbmNoaWt1XCA7CivlpI/ojYkgPiBuYXRzdWd1c2FcIDsKK+eOieS4siA+IHRhbWFndXNoaVwgOwor5Lit5Y+jID4gbmFrYWd1Y2hpXCA7CivlpbPnmZYgPiBvbicnbmFndXNlXCA7Civlp6XmoZwgPiB1YmF6YWt1cmFcIDsKK+S4reWNkiA+IGNodXVzb3RzdVwgOwor5LiL5Z2CID4gc2hpbW9zYWthXCA7CivpoqjkuIsgPiBrYXphc2hpbW9cIDsKK+mcnue2siA+IGthc3VtaWFtaVwgOwor5Lih5Y+jID4gcnlvdWd1Y2hpXCA7CivniKrnmq4gPiB0c3VtYWthd2FcIDsKK+eIhueruSA+IGJha3VjaGlrdVwgOwor5pel54usID4gbmljaGlkb2t1XCA7Civml6fniakgPiBreXV1YnV0c3VcIDsKK+eNo+WBjyA+IGtlbW9ub2hlblwgOwor6Zyy56iLID4gdHN1eXVob2RvXCA7Civoqr/nr4AgPiBjaG91c2V0c3VcIDsKK+mgreWtlyA+IGthc2hpcmFqaVwgOwor542E5Y2SID4gZ29rdXNvdHN1XCA7Civntabpo58gPiBreXV1c2hva3VcIDsKK+S4lOWPiCA+IGthdHN1bWF0YVwgOwor5pyI5LimID4gdHN1a2luYW1pXCA7CivnianmtYEgPiBidXRzdXJ5dXVcIDsKK+S4oeWHuCA+IHJ5b3V0b3RzdVwgOwor6Zmz6L+wID4gY2hpbmp1dHN1XCA7CivmlrDnnYAgPiBzaGluY2hha3VcIDsKK+Wls+eJqSA+IG9uJyduYW1vbm9cIDsKK+S4jeWNsCA+IGZ1amlydXNoaVwgOwor5pu45LuYID4ga2FraXRzdWtlXCA7CivoqbDojYkgPiB0c3VtZWt1c2FcIDsKK+S4reS9jSA+IGNodXVndXJhaVwgOwor54aK6JyCID4ga3VtYWJhY2hpXCA7CivmlZnogbcgPiBreW91c2hva3VcIDsKK+WkseekvCA+IHNoaXRzdXJlaVwgOwor5LiD5Y6YID4gc2hpY2hpcmluXCA7CivnianmrLIgPiBidXRzdXlva3VcIDsKK+S4gOWPoyA+IGhpdG9rdWNoaVwgOwor5pOC6YmiID4gc3VyaWJhY2hpXCA7CivniIbnmbogPiBiYWt1aGF0c3VcIDsKK+aYqOaXpSA+IHNha3VqaXRzdVwgOwor57iu57SEID4gc2h1a3V5YWt1XCA7CivlpLHnnYAgPiBzaGl0Y2hha3VcIDsKK+S4gOWIpSA+IGljaGliZXRzdVwgOwor5LiA5YiXID4gaWNoaXJldHN1XCA7CivkuIvlgbQgPiBzaGl0YWdhd2FcIDsKK+mbgOiJsiA+IHN1enVtZWlyb1wgOwor5LiA5YSyID4gaGl0b21vdWtlXCA7Civml4/mu4UgPiB6b2t1bWV0c3VcIDsKK+S4i+S9nCA+IHNoaXRhc2FrdVwgOwor6Kq/55WlID4gY2hvdXJ5YWt1XCA7CivmmJTml6UgPiBzZWtpaml0c3VcIDsKK+aWreeGsSA+IGRhbicnbmV0c3VcIDsKK+aYjuaXpSA+IG15b3VuaWNoaVwgOwor5LiL5LiLID4gc2hpbW9qaW1vXCA7Civmlbfnn7MgPiBzaGlraWlzaGlcIDsKK+eJueaSriA+IHRva3VzYXRzdVwgOwor6Kaq6ZayID4gc2hpbicnZXRzdVwgOwor6aGY5LqLID4gbmVnYWlnb3RvXCA7CivpoLvlh7ogPiBoaW5zaHV0c3VcIDsKK+e2suiiiyA+IGFtaWJ1a3Vyb1wgOwor5paZ546HID4gcnlvdXJpdHN1XCA7Civop5LpgJAgPiBrYWt1Y2hpa3VcIDsKK+S4g+S4iSA+IHNoaWNoaXNhblwgOwor57Sw6Z2iID4gaG9zb29tb3RlXCA7Civpm4bntZAgPiBzaHV1a2V0c3VcIDsKK+ilv+miqCA+IG5pc2hpa2F6ZVwgOwor5aSP55epID4gbmF0c3V5YXNlXCA7CivnianmjIcgPiBtb25vc2FzaGlcIDsKK+aYn+W9sSA+IGhvc2hpa2FnZVwgOwor54us5YqbID4gZG9rdXJ5b2t1XCA7Civop6boqLogPiBzaG9rdXNoaW5cIDsKK+WjuueavyA+IHRzdWJvemFyYVwgOwor572q5Lq6ID4gdHN1bWliaXRvXCA7Civnianmhb4gPiBidXRzdXlva3VcIDsKK+aVt+eJqSA+IHNoaWtpbW9ub1wgOwor6Zuq55S3ID4geXVraW90b2tvXCA7CivlpI/niakgPiBuYXRzdW1vbm9cIDsKK+e1seioiCA+IGJhcmF0c3VraVwgOwor5aWz5pa5ID4gb24nJ25hZ2F0YVwgOwor5paw5qmLID4gc2hpbmJhc2hpXCA7CivnhrHnl4UgPiBuZXRzdWJ5b3VcIDsKK+mbu+eGsSA+IGRlbicnbmV0c3VcIDsKK+aYn+WxkSA+IGhvc2hpa3V6dVwgOwor6ZqU57W2ID4ga2FrdXpldHN1XCA7Civni6zku48gPiBkb2t1ZnV0c3VcIDsKK+Wmu+WupCA+IHNhaXNoaXRzdVwgOwor54mp5bmyID4gbW9ub2hvc2hpXCA7CivntLDpgZMgPiBob3NvbWljaGlcIDsKK+ezp+mjnyA+IHJ5b3VzaG9rdVwgOwor54mp5beuID4gbW9ub3Nhc2hpXCA7CivnhrHnkIMgPiBuZXRzdWt5dXVcIDsKK+e4nueJqSA+IHNoaW1hbW9ub1wgOwor5paw5p6VID4gbmlpbWFrdXJhXCA7CivntabooYAgPiBreXV1a2V0c3VcIDsKK+aWsOacrSA+IHNoaW5zYXRzdVwgOwor5paw5pyIID4gc2hpbmdldHN1XCA7CivmlrDmm7IgPiBzaGlua3lva3VcIDsKK+aXp+W8jyA+IGt5dXVzaGlraVwgOwor6Kmw54mpID4gdHN1bWVtb25vXCA7Civng4/osp0gPiBrYXJhc3VnYWlcIDsKK+mdtOW6lSA+IGt1dHN1em9rb1wgOwor5pen5bm0ID4gZnVydXRvc2hpXCA7CivmmJ/lnosgPiBob3NoaWdhdGFcIDsKK+mVt+mrqiA+IGNob3VoYXRzdVwgOwor5aWz5b2iID4gb24nJ25hZ2F0YVwgOwor5aSx5pybID4gc2hpdHN1Ym91XCA7CivnhLzntZAgPiBzaG91a2V0c3VcIDsKK+Whtee0mSA+IGNoaXJpZ2FtaVwgOwor5aSx5piOID4gc2hpdHN1bWVpXCA7CivntJnos6ogPiBzaGlzaGl0c3VcIDsKK+mbquaykyA+IHl1a2lndXRzdVwgOwor5paH5pyIID4gZnVtaWR6dWtpXCA7Civngq3os6ogPiB0YW5zaGl0c3VcIDsKK+iqheauuiA+IGNodXVzYXRzdVwgOwor5aSn5piUID4gb29tdWthc2hpXCA7CivplbfpnbQgPiBuYWdhZ3V0c3VcIDsKK+ezuOi7iiA+IGl0b2d1cnVtYVwgOwor5aSc5pmSID4geW96YXJhc2hpXCA7CivlpI/mnI0gPiBuYXRzdWZ1a3VcIDsKK+mdtOWiqCA+IGt1dHN1enVtaVwgOwor6KO46aasID4gaGFkYWthdW1hXCA7CivlprnliIYgPiBpbW91dG9idW5cIDsKK+aXpeWiqCA+IG5pY2hpYm9rdVwgOwor5paw5byPID4gc2hpbnNoaWtpXCA7CivlpI/mmYIgPiBuYXRzdWRva2lcIDsKK+eCuOijgiA+IHNha3VyZXRzdVwgOwor54m55YilID4gdG9rdWJldHN1XCA7CivopIfpm5EgPiBmdWt1emF0c3VcIDsKK+mdtOWeiyA+IGt1dHN1Z2F0YVwgOwor57KS6aOfID4gcnl1dXNob2t1XCA7CivntZDohpwgPiBrZXRzdW1ha3VcIDsKK+e4nuafhCA+IHNoaW1hZ2FyYVwgOwor5aSx5oGLID4gc2hpdHN1cmVuXCA7CivlpLHlv7UgPiBzaGl0c3VuZW5cIDsKK+mbqOabhyA+IGFtYWd1bW9yaVwgOwor6KmV5rG6ID4gaHlvdWtldHN1XCA7Civoqr/lvosgPiBjaG91cml0c3VcIDsKK+Wls+WdgiA+IG9uJyduYXpha2FcIDsKK+e2mueZuiA+IHpva3VoYXRzdVwgOwor6ZuR5qCqID4gemF0c3VrYWJ1XCA7Civoq5Llr58gPiByeW91c2F0c3VcIDsKK+eJm+WIuiA+IGd5dXVzYXNoaVwgOwor5Z+36JGXID4gc2h1dWNoYWt1XCA7Civml6nlj6MgPiBoYXlha3VjaGlcIDsKK+ezluizqiA+IHRvdXNoaXRzdVwgOwor54mH5Y+jID4ga2F0YWt1Y2hpXCA7CivntLDohbAgPiBob3NvZ29zaGlcIDsKK+mbhuacrSA+IHNodXVzYXRzdVwgOwor5pel5Ye6ID4gbmlzc2h1dHN1XCA7CivntYLntZAgPiBzaHV1a2V0c3VcIDsKK+WdqumHjyA+IHRzdWJvcnlvdVwgOwor5aW05YenID4geWFra29kYWtvXCA7CivopqrnrYYgPiBzaGlucGl0c3VcIDsKK+e2v+ayuSA+IHdhdGFhYnVyYVwgOwor54S254S2ID4gc2hpa2FqaWthXCA7CivnhKbnhrEgPiBzaG91bmV0c3VcIDsKK+Wkj+WxsSA+IG5hdHN1eWFtYVwgOwor54iq5YiHID4gdHN1bWVraXJpXCA7CivmlL/miYAgPiBtYW5kb2tvcm9cIDsKK+aVmeW8jyA+IGt5b3VzaGlraVwgOwor54iq5YWIID4gdHN1bWFzYWtpXCA7CivloanmvKwgPiBzaGlvZHp1a2VcIDsKK+e4ruWwjyA+IHNodWt1c2hvdVwgOwor5LiL44CFID4gc2hpbW9qaW1vXCA7CivlpZTlh7ogPiBob25zaHV0c3VcIDsKK+malOaciCA+IGtha3VnZXRzdVwgOwor5pKD55m6ID4gZ2VraWhhdHN1XCA7Civln7fnrYYgPiBzaGlwcGl0c3VcIDsKK+malOaXpSA+IGtha3VqaXRzdVwgOwor5paw5YWlID4gc2hpbicnbnl1dVwgOwor5pal5YqbID4gc2VraXJ5b2t1XCA7CivntYLnmbogPiBzaHV1aGF0c3VcIDsKK+WkseWRvSA+IHNoaXRzdW1laVwgOwor5Z2C6YGTID4gc2FrYW1pY2hpXCA7CivlpLHlkI0gPiBzaGl0c3VtZWlcIDsKK+aSsua7hSA+IGJva3VtZXRzdVwgOwor6Kmz5a+fID4gc2hvdXNhdHN1XCA7Civpm6rlpbMgPiB5dWtpb24nJ25hXCA7CivoqbPlr4YgPiBzaG91bWl0c3VcIDsKK+mbkeWtpiA+IHphdHN1Z2FrdVwgOwor6Ziy5rm/ID4gYm91c2hpdHN1XCA7CivlnYfos6ogPiBraW5zaGl0c3VcIDsKK+Wft+edgCA+IHNodXVjaGFrdVwgOwor54OP55OcID4ga2FyYXN1dXJpXCA7CivmkrLmrrogPiBib2t1c2F0c3VcIDsKK+aRmOeZuiA+IHRla2loYXRzdVwgOwor5aSP5ZCRID4gbmF0c3VtdWtpXCA7CivmjajpiaIgPiBzdXRlYmFjaGlcIDsKK+WcsOizqiA+IGNoaXNoaXRzdVwgOwor5aCF54mpID4ga2F0YWJ1dHN1XCA7Civlm73piYQgPiBrb2t1dGV0c3VcIDsKK+inkuaovSA+IHRzdW5vZGFydVwgOwor5pKD5ruFID4gZ2VraW1ldHN1XCA7Civns6fnp6MgPiByeW91bWF0c3VcIDsKK+mao+WupCA+IHJpbnNoaXRzdVwgOwor6Ki65a+fID4gc2hpbnNhdHN1XCA7CivlpJbku5ggPiBzb3RvZHp1a2VcIDsKK+Wkj+S9nCA+IG5hdHN1c2FrdVwgOwor54Wn5bC6ID4gc2hvdXNoYWt1XCA7Civpm6rlhY4gPiB5dWtpdXNhZ2lcIDsKK+e1guaxuiA+IHNodXVrZXRzdVwgOwor6KWy54i1ID4gc2h1dXNoYWt1XCA7Civopobmu4UgPiBmdWt1bWV0c3VcIDsKK+WiqOWjtyA+IHN1bWl0c3Vib1wgOwor6KqF5LyQID4gY2h1dWJhdHN1XCA7CivmlL7lh7ogPiBob3VzaHV0c3VcIDsKK+e1gualtSA+IHNodXVreW9rdVwgOwor6KO457eaID4gaGFkYWthc2VuXCA7CivopobmsqEgPiBmdWt1Ym90c3VcIDsKK+eFqeWeiyA+IHVydXNhZ2F0YVwgOwor6KmU5YuFID4gc2hvdWNob2t1XCA7CivmlK/lh7ogPiBzaGlzaHV0c3VcIDsKK+e2ouWvhiA+IGNodXVtaXRzdVwgOwor57WE5puyID4ga3VtaWt5b2t1XCA7CivntYLmnKsgPiBzaHV1bWF0c3VcIDsKK+e1guabsiA+IHNodXVreW9rdVwgOwor57aZ5a6kID4ga2Vpc2hpdHN1XCA7Civlm73ooaggPiBrdW5pb21vdGVcIDsKK+e1guaXpSA+IHNodXVqaXRzdVwgOwor57eg5YiHID4gc2hpbWVraXJpXCA7CivlnJ/oibIgPiB0c3VjaGlpcm9cIDsKK+aOpee2miA+IHNldHN1em9rdVwgOwor57Gz57KSID4ga29tZXRzdWJ1XCA7Civns5/mvKwgPiBrYXN1ZHp1a2VcIDsKK+eym+eZvSA+IHNodWt1aGFrdVwgOwor6KGX6KeSID4gbWFjaGlrYWRvXCA7CivmkqvlrZAgPiBuYWRlc2hpa29cIDsKK+ezoOayuSA+IG51a2FhYnVyYVwgOwor6ZW354mpID4gY2hvdWJ1dHN1XCA7CivpmbDlj6MgPiBrYWdlZ3VjaGlcIDsKK+imquW/gyA+IG95YWdva29yb1wgOwor6KGG6KqsID4gc2h1dXNldHN1XCA7CivntbblppkgPiB6ZXRzdW15b3VcIDsKK+ezuOahnCA+IGl0b3pha3VyYVwgOwor6Zmz5YiXID4gY2hpbnJldHN1XCA7Civns7jmn7MgPiBpdG95YW5hZ2lcIDsKK+Wft+aLlyA+IHNoaXRzdXlvdVwgOwor54S85Y20ID4gc2hvdWt5YWt1XCA7Civmv4DogbcgPiBnZWtpc2hva3VcIDsKK+imquWvhiA+IHNoaW5taXRzdVwgOwor57WC5bGAID4gc2h1dWt5b2t1XCA7CivnrZLpn7MgPiB0c3V0c3VvdG9cIDsKK+e0i+aJgCA+IG1vbmRva29yb1wgOwor6KKL57ayID4gZnVrdXJvYW1pXCA7CivoqIDkvJ0gPiBrb3RvZHp1dGVcIDsKK+eBq+afsSA+IGhpYmFzaGlyYVwgOwor6Zal5pePID4gYmF0c3V6b2t1XCA7CivopLbmm7IgPiBzaHV1a3lva3VcIDsKK+inkuWPiSA+IHRzdW5vbWF0YVwgOwor5oqc6YyoID4gYmF0c3VieW91XCA7Civlm73nq4sgPiBrb2t1cml0c3VcIDsKK+a/gOeqgSA+IGdla2l0b3RzdVwgOwor6ZaA5p2+ID4ga2Fkb21hdHN1XCA7CivmipzpgZMgPiBudWtlbWljaGlcIDsKK+mVt+aciCA+IG5hZ2F0c3VraVwgOwor6KGA6IKJID4ga2V0c3VuaWt1XCA7CivntJvlpLEgPiBmdW5zaGl0c3VcIDsKK+aMr+eymyA+IHNoaW5zaHVrdVwgOwor5Zyf54miID4gdHN1Y2hpcm91XCA7Civmv4DnmbogPiBnZWtpaGF0c3VcIDsKK+exs+ayuSA+IGtvbWVhYnVyYVwgOwor562L6YGTID4gc3VqaW1pY2hpXCA7Civnr7Pnr6UgPiBoaWNoaXJpa2lcIDsKK+ihneeqgSA+IHNob3V0b3RzdVwgOwor6Kaq5YiHID4gc2hpbnNldHN1XCA7CivnsbPmq4MgPiBrb21lYml0c3VcIDsKK+ernOmqqCA+IHJ5dXVrb3RzdVwgOwor57WQ5LqGID4ga2V0c3VyeW91XCA7CivmiZjpiaIgPiB0YWt1aGF0c3VcIDsKK+mWj+W5tCA+IHVydXVkb3NoaVwgOwor562J6LOqID4gdG91c2hpdHN1XCA7CivlmLHoqJcgPiBzaG9rdXRha3VcIDsKK+evgOe0hCA+IHNldHN1eWFrdVwgOwor5r+A54OIID4gZ2VraXJldHN1XCA7Civon4fom5kgPiBoaWtpZ2FlcnVcIDsKK+icgOm7jSA+IG1vcm9rb3NoaVwgOwor6KGA55y8ID4gY2hpbWFuYWtvXCA7CivnrrjnrrEgPiBoYXNoaWJha29cIDsKK+ikh+W8jyA+IGZ1a3VzaGlraVwgOwor6KW/5YG0ID4gbmlzaGlnYXdhXCA7CivmkI3lpLEgPiBzb25zaGl0c3VcIDsKK+mXluWFpSA+IGNoaW4nJ255dXVcIDsKK+icgumzpSA+IGhhY2hpZG9yaVwgOwor54K65L2TID4gdGVpdGFyYWt1XCA7CivmjJHnmbogPiBjaG91aGF0c3VcIDsKK+a6tuizqiA+IHlvdXNoaXRzdVwgOwor54Gw5ZyfID4gaGFpdHN1Y2hpXCA7Civoo4/miYkgPiB1cmF0b2JpcmFcIDsKK+aQrOWHuiA+IGhhbnNodXRzdVwgOwor57Kb5a2mID4gc2h1a3VnYWt1XCA7Civplr7lgKQgPiBzaGlraWljaGlcIDsKK+ijj+aDhSA+IHVyYW5hc2FrZVwgOwor6J+H6IKhID4ga2FlcnVtYXRhXCA7CivooYDnhZkgPiBjaGlrZW11cmlcIDsKK+ihqOaxuiA+IGh5b3VrZXRzdVwgOwor5ruR6JC9ID4ga2F0c3VyYWt1XCA7CivmjIHniakgPiBtb2NoaW1vbm9cIDsKK+mWgOWPoyA+IGthZG9ndWNoaVwgOwor5r2c54axID4gc2VuJyduZXRzdVwgOwor5oyf5q66ID4ga3lvdXNhdHN1XCA7CivooajmnK0gPiBoeW91c2F0c3VcIDsKK+ihqOabuCA+IG9tb3RlZ2FraVwgOwor57OK5LujID4gbm9yaXNoaXJvXCA7CivnqbTpmpkgPiBrZXRzdWdla2lcIDsKK+mMr+mbkSA+IHNha3V6YXRzdVwgOwor5Zyn5a+GID4gYXRzdW1pdHN1XCA7CivlnKjlrqQgPiB6YWlzaGl0c3VcIDsKK+a8rOeJqSA+IHRzdWtlbW9ub1wgOwor6Jyc6LGGID4gbWl0c3VtYW1lXCA7CivmvILnnYAgPiBoeW91Y2hha3VcIDsKK+aPkOWHuiA+IHRlaXNodXRzdVwgOwor5rex6Z20ID4gZnVrYWd1dHN1XCA7Civnr4DmrLIgPiBzZXRzdXlva3VcIDsKK+iii+W4ryA+IGZ1a3Vyb29iaVwgOwor5Zix55uuID4gc2hva3Vtb2t1XCA7CivnqYDpo58gPiBrb2t1c2hva3VcIDsKK+epjembqiA+IHNla2lzZXRzdVwgOwor56+A5qaRID4gZnVzaGlrdXJlXCA7CivooYDml48gPiBrZXRzdXpva3VcIDsKK+etlueVpSA+IHNha3VyeWFrdVwgOwor6Y286KGTID4gc2hpbmp1dHN1XCA7CivmjJHmkqUgPiBjaG91aGF0c3VcIDsKK+aLk+auliA+IHRha3VzaG9rdVwgOwor6JuZ6LezID4ga2FlcnV0b2JpXCA7CivmjpLlh7ogPiBoYWlzaHV0c3VcIDsKK+Wcp+WKmyA+IGF0c3VyeW9rdVwgOwor56u5566SID4gdGFrZWJvdWtpXCA7CivpvLvpnaIgPiBoYW5hZHp1cmFcIDsKK+erv+enpCA+IHNhb2Jha2FyaVwgOwor6KKW5Y+jID4gc29kZWd1Y2hpXCA7Civmjbvlh7ogPiBuZW5zaHV0c3VcIDsKK+mLs+mJhCA+IGNodXV0ZXRzdVwgOwor56ug56+AID4gc2hvdXNldHN1XCA7CivllZPon4QgPiBrZWljaGl0c3VcIDsKK+a2membqCA+IG5hbWlkYWFtZVwgOwor56+k5a6fID4gdG9rdWppdHN1XCA7Civpjpbns7ggPiBrdXNhcmlpdG9cIDsKK+emv+m3siA+IGhhZ2V3YXNoaVwgOwor6KGA5bC/ID4ga2V0c3VueW91XCA7Civmh7LnvbAgPiBjaG91YmF0c3VcIDsKK+WbveWKmyA+IGtva3VyeW9rdVwgOwor5Zu95YilID4ga3VuaWJldHN1XCA7Civmir3mlpcgPiBoaWtpZGFzaGlcIDsKK+a1uOmjnyA+IHNoaW5zaG9rdVwgOwor56+J5bGxID4gdHN1a2l5YW1hXCA7Civoopbku5ggPiBzb2RldHN1a2VcIDsKK+aJvOauuiA+IHlha3VzYXRzdVwgOwor6KGA5aGXID4gY2hpbWlkb3JvXCA7Civpurnpu7QgPiBrb3VqaWthYmlcIDsKK+a2memHkSA+IG5hbWlkYWtpblwgOwor6KGA5ZynID4ga2V0c3VhdHN1XCA7Civmva7looMgPiBzaGlvemFrYWlcIDsKK+eon+izqiA+IGhpbnNoaXRzdVwgOwor5rm/55SwID4gc2hpdHN1ZGVuXCA7Civpu5Lpq6ogPiBrb2t1aGF0c3VcIDsKK+aJk+a2iCA+IHVjaGlrZXNoaVwgOwor6KGo5YG0ID4gb21vdGVnYXdhXCA7Civom5nogqEgPiBrYWVydW1hdGFcIDsKK+mQmOaSniA+IGthbmV0c3VraVwgOwor6KGM5YiXID4gZ3lvdXJldHN1XCA7CivnrJHmrrogPiBzaG91c2F0c3VcIDsKK+aJjeanjCA+IHNhaWR6dWNoaVwgOwor5rm/5r2kID4gc2hpdHN1anVuXCA7CivooZfkuKYgPiBtYWNoaW5hbWlcIDsKK+m8u+ihnSA+IGhhbmF0c3VraVwgOwor5riL57SZID4gc2hpYnVnYW1pXCA7Civlk4Hos6ogPiBoaW5zaGl0c3VcIDsKK+m8oOismyA+IG5lenVtaWtvdVwgOwor6Y+h5p2/ID4ga2FnYW1paXRhXCA7CivnqbrnqbQgPiBrYXJha2V0c3VcIDsKK+m6pumjryA+IG11Z2ltZXNoaVwgOwor6Yu86ImyID4gaGFnYW5laXJvXCA7CivmiZXmmoEgPiBmdXRzdWd5b3VcIDsKK+iZq+ieuyA+IG11c2hpa2VyYVwgOwor56ul5q2MID4gd2FyYWJldXRhXCA7CivmiZPmk7IgPiBjaG91Y2hha3VcIDsKK+a0u+mHjyA+IGthdHN1cnlvdVwgOwor5oug5Ye6ID4ga3lvc2h1dHN1XCA7CivlmbTlh7ogPiBmdW5zaHV0c3VcIDsKK+a4i+eariA+IHNoaWJ1a2F3YVwgOwor6JeB6Z20ID4gd2FyYWd1dHN1XCA7Civnrpflh7ogPiBzYW5zaHV0c3VcIDsKK+mOluaoiyA+IGt1c2FyaXRvaVwgOwor5rS76Lu4ID4ga2F0c3VqaWt1XCA7Civmub/mnb8gPiBzaGl0c3ViYW5cIDsKK+a1ruiiiyA+IHVraWJ1a3Vyb1wgOwor5rW46J2VID4gc2hpbnNob2t1XCA7CivllYbnlaUgPiBzaG91cnlha3VcIDsKK+a0u+i6jSA+IGthdHN1eWFrdVwgOwor6Ymx6LOqID4ga291c2hpdHN1XCA7CivomavohbkgPiBtdXNoaWJhcmFcIDsKK+m8oOiJsiA+IG5lenVtaWlyb1wgOwor5rOl6Z20ID4gZG9yb2d1dHN1XCA7CivmtpzogbcgPiB0b2t1c2hva3VcIDsKK+ethuWiqCA+IGhpdHN1Ym9rdVwgOwor6Yed6bC7ID4gaGFyaXVuYWdpXCA7CivpvLvntrEgPiBoYW5hZHp1bmFcIDsKK+ethuWhmiA+IGZ1ZGVkenVrYVwgOwor5rud5aO6ID4gdGFraXRzdWJvXCA7Civmu53lo7cgPiB0YWtpdHN1Ym9cIDsKK+WRiumBlCA+IGtva3V0YXRzdVwgOwor5ryP5Ye6ID4gcm91c2h1dHN1XCA7CivnrYblnKcgPiBoaXRzdWF0c3VcIDsKK+eqrualtSA+IGt5dXVreW9rdVwgOwor6YeR6a+xID4ga2luc2hhY2hpXCA7CivnpoDos6ogPiBoaW5zaGl0c3VcIDsKK+WPo+mrrSA+IGt1Y2hpaGlnZVwgOwor6Jmr57GgID4gbXVzaGlrYWdvXCA7CivmtYHooYAgPiByeXV1a2V0c3VcIDsKK+aGkeeJqSA+IHRzdWtpbW9ub1wgOwor56mN546HID4gc2VraXJpdHN1XCA7CivpvLvnqoEgPiBoYW5hdHN1a2lcIDsKK+mHnOmjryA+IGthbWFtZXNoaVwgOwor5rex54iqID4gZnVrYWR6dW1lXCA7Civnq7nluJsgPiBjaGlrdWhha3VcIDsKK+eni+iJsiA+IHNodXVzaG9rdVwgOwor5rOh6YqtID4gYWJ1a3V6ZW5pXCA7Civms6jph4ggPiBjaHV1c2hha3VcIDsKK+aEgeiJsiA+IHNodXVzaG9rdVwgOwor5oKq6LOqID4gYWt1c2hpdHN1XCA7Civmt4vnlr4gPiByaW5zaGl0c3VcIDsKK+m6l+izqiA+IHJlaXNoaXRzdVwgOwor6bq76KKLID4gYXNhYnVrdXJvXCA7Civmu53lj6MgPiB0YWtpZ3VjaGlcIDsKK+m8oOeulyA+IG5lenVtaXphblwgOwor5rm/5byPID4gc2hpc3NoaWtpXCA7CivnqYDniakgPiBrb2t1bW90c3VcIDsKK+azpemBkyA+IGRvcm9taWNoaVwgOwor5Y+k6Z20ID4gZnVydWd1dHN1XCA7CivmsojprLEgPiBjaGluJyd1dHN1XCA7CivlkJvpgZQgPiBraW1pdGFjaGlcIDsKK+m3sum8uyA+IHdhc2hpYmFuYVwgOwor5oqY5LyPID4gc2hha3VidWt1XCA7CivpvKDnqbQgPiBuZXp1bWlhbmFcIDsKK+a7keWPsCA+IHN1YmVyaWRhaVwgOwor56uc5be7ID4gdGF0c3VtYWtpXCA7Civph6PpkJggPiB0c3VyaWdhbmVcIDsKK+m7kuiJsiA+IGtva3VzaG9rdVwgOwor56m25qW1ID4ga3l1dWt5b2t1XCA7CivmuoDlrqQgPiBtYW5zaGl0c3VcIDsKK+m3pum3ryA+IG1pc29zYXphaVwgOwor56uv5aWzID4gaGFzaGl0YW1lXCA7Civph6Pph50gPiB0c3VyaWJhcmlcIDsKK+mHkemOliA+IGtpbmd1c2FyaVwgOwor6Jek6JSTID4gZnVqaWR6dXJ1XCA7CivpiZvoibIgPiBuYW1hcmlpcm9cIDsKK+a4i+afvyA+IHNoaWJ1Z2FraVwgOwor5ZC46KGAID4ga3l1dWtldHN1XCA7Civlj6TpiYQgPiBmdXJ1dGV0c3VcIDsKK+a1t+elniA+IHdhdGF0c3VtaVwgOwor6Yi06JmrID4gc3V6dW11c2hpXCA7CivlkIzos6ogPiBkb3VzaGl0c3VcIDsKK+WPo+mHkSA+IGt1Y2hpZ2FuZVwgOwor56qB5pKDID4gdG90c3VnZWtpXCA7Civpt5PptKMgPiB5YW1hdXp1cmFcIDsKK+m7kue4gSA+IGt1cm9idWNoaVwgOwor6Y6u5ZynID4gY2hpbicnYXRzdVwgOwor5Zaq5aSxID4gc291c2hpdHN1XCA7CivnqK7msrkgPiB0YW5lYWJ1cmFcIDsKK+WUkOargyA+IGthcmFiaXRzdVwgOwor5Y+j6Lu9ID4ga3VjaGlnYXJ1XCA7Civnqq7lsYggPiBreXV1a3V0c3VcIDsKK+m7kueruSA+IGt1cm9jaGlrdVwgOwor5Y+L6YGUID4gdG9tb2RhY2hpXCA7Civlk4HniakgPiBzaGluYW1vbm9cIDsKK+erueWFiSA+IHRha2VtaXRzdVwgOwor6JeB6IueID4gd2FyYWR6dXRvXCA7Civmub/ljp8gPiBzaGl0c3VnZW5cIDsKK+elnuiJsiA+IHNoaW5zaG9rdVwgOwor5ZSQ5p2+ID4ga2FyYW1hdHN1XCA7CivnpZ7ogbcgPiBzaGluc2hva3VcIDsKK+WPo+iosSA+IGt1Y2hpbW90b1wgOwor6JqK5p+xID4ga2FiYXNoaXJhXCA7Civnq7nkuLIgPiB0YWtlZ3VzaGlcIDsKK+a2iOa7hSA+IHNob3VtZXRzdVwgOwor6Yed6KGTID4gc2hpbmp1dHN1XCA7Civpu5Lnmb0gPiBrb2t1Ynlha3VcIDsKK+elnue9sCA+IHNoaW5iYXRzdVwgOwor5rK56J2JID4gYWJ1cmF6ZW1pXCA7CivmgKfos6ogPiBzZWlzaGl0c3VcIDsKK+WPluiqrCA+IHRvcmlzZXRzdVwgOwor5rC36ZuqID4gaHlvdXNldHN1XCA7Civom7jlo7wgPiB0YWtvdHN1Ym9cIDsKK+ibuOWjtyA+IHRha290c3Vib1wgOwor5rmn5Ye6ID4geW91c2h1dHN1XCA7CivnqbrlrqQgPiBrdXVzaGl0c3VcIDsKK+mMmOW9oiA+IHRzdW11Z2F0YVwgOwor5oap5a6kID4ga2Vpc2hpdHN1XCA7CivmgKXoqK0gPiBreXV1c2V0c3VcIDsKK+mHkeiUkyA+IGthbmVkenVydVwgOwor5raI5qW1ID4gc2hvdWt5b2t1XCA7Civph6PoiLkgPiB0c3VyaWJ1bmVcIDsKK+awt+mHiCA+IGh5b3VzaGFrdVwgOwor6Ymi54mpID4gaGFjaGltb25vXCA7CivmtZrmuKsgPiBzaHVuc2V0c3VcIDsKK+a3keW+syA+IHNodWt1dG9rdVwgOwor56Wd56aPID4gc2h1a3VmdWt1XCA7CivmsqHokL0gPiBib3RzdXJha3VcIDsKK+eqk+WPoyA+IG1hZG9ndWNoaVwgOwor5ZGK55m6ID4ga29rdWhhdHN1XCA7Civlk4Hmn4QgPiBzaGluYWdhcmFcIDsKK+aCqueWviA+IGFrdXNoaXRzdVwgOwor5ZC4552AID4ga3l1dWNoYWt1XCA7CivphYzph48gPiBzaGFrdXJ5b3VcIDsKK+WPo+iEhyA+IGt1Y2hpd2FraVwgOwor56K66KqsID4ga2FrdXNldHN1XCA7CivoloTnt5EgPiB1c3VtaWRvcmlcIDsKK+WTgeaVsCA+IHNoaW5ha2F6dVwgOwor6bm/55quID4gc2hpa2FnYXdhXCA7Civom5nlj4ggPiBrYWVydW1hdGFcIDsKK+m7meauuiA+IG1va3VzYXRzdVwgOwor5oGQ57iuID4ga3lvdXNodWt1XCA7CivompXlrqQgPiBzYW5zaGl0c3VcIDsKK+eqgeWHuiA+IHRvc3NodXRzdVwgOwor6YO96aKoID4gbWl5YWtvZnV1XCA7Civmsrnns58gPiBhYnVyYWthc3VcIDsKK+awtOizqiA+IHN1aXNoaXRzdVwgOwor56qB5YWlID4gdG90c3VueXV1XCA7CivmsrnnspUgPiBhYnVyYWthc3VcIDsKK+eooOWvhiA+IGNob3VtaXRzdVwgOwor6buS5qirID4ga3Vyb2dhc2hpXCA7CivmtLvmrbQgPiBrYXRzdXJla2lcIDsKK+WPo+e0hSA+IGt1Y2hpYmVuaVwgOwor56eL5pelID4gc2h1dWppdHN1XCA7Civlj7Pnq68gPiBtaWdpaGFzaGlcIDsKK+iWrOeTtiA+IGt1c3VyaWJpblwgOwor5ZOy5a2mID4gdGV0c3VnYWt1XCA7CivpiYTmuIsgPiBrYW5hc2hpYnVcIDsKK+WPjue4riA+IHNodXVzaHVrdVwgOwor5b+M6KmeID4gaW1pa290b2JhXCA7Civlj7Dnp6QgPiBkYWliYWthcmlcIDsKK+a1t+aJhyA+IGhvdGF0ZWdhaVwgOwor5b+F6KqtID4gaGl0c3Vkb2t1XCA7CivljZrorZggPiBoYWt1c2hpa2lcIDsKK+m7kuadviA+IGt1cm9tYXRzdVwgOwor44CG5YiHID4gc2hpbWVraXJpXCA7CivljZPorZggPiB0YWt1c2hpa2lcIDsKK+iWrOeJqSA+IHlha3VidXRzdVwgOwor5rex5YiHID4gc2hpbnNldHN1XCA7Civnoazos6ogPiBrb3VzaGl0c3VcIDsKK+awt+idlSA+IGh5b3VzaG9rdVwgOwor5Y2T6KqsID4gdGFrdXNldHN1XCA7Civpu5LmmJ8gPiBrdXJvYm9zaGlcIDsKK+engOaKnCA+IHNodXViYXRzdVwgOwor5b+D6KGAID4gc2hpbmtldHN1XCA7CivmsLTomasgPiBtaXp1bXVzaGlcIDsKK+iUk+iNiSA+IHRzdXJ1a3VzYVwgOwor5by36aOvID4ga293YW1lc2hpXCA7CivnpajmsbogPiBoeW91a2V0c3VcIDsKK+iRm+mkhSA+IGt1enVtb2NoaVwgOwor6baJ6LGGID4gdXp1cmFtYW1lXCA7Civph5Hnm6UgPiBrYW5hZGFyYWlcIDsKK+efr+mjviA+IGt5b3VzaG9rdVwgOwor5Y+j55mWID4ga3VjaGlndXNlXCA7Civnn7PpoK0gPiBpc2hpYXRhbWFcIDsKK+mzpem7kCA+IHRvcmltb2NoaVwgOwor5raZ5aOwID4gbmFtaWRhZ29lXCA7CivokL3pq6ogPiByYWt1aGF0c3VcIDsKK+WLhemhjSA+IGNob2t1Z2FrdVwgOwor5Y216ImyID4gdGFtYWdvaXJvXCA7CivnqLLlhYkgPiBpbmFiaWthcmlcIDsKK+WPjuedgCA+IHNodXVjaGFrdVwgOwor5raI5aSxID4gc291c2hpdHN1XCA7Civmrr/pgZQgPiB0b25vdGFjaGlcIDsKK+axguiBtyA+IGt5dXVzaG9rdVwgOwor6JC96aO+ID4gcmFrdXNob2t1XCA7CivmsojnnYAgPiBjaGluY2hha3VcIDsKK+iWrOauuiA+IHlha3VzYXRzdVwgOwor56Wl5pyIID4gc2hvdXRzdWtpXCA7Civnp4HlrqQgPiBzaGlzaGl0c3VcIDsKK+W9ouizqiA+IGtlaXNoaXRzdVwgOwor5Y+O546HID4gc2h1dXJpdHN1XCA7CivnpZ7mm7IgPiBzaGlua3lva3VcIDsKK+eiuueriyA+IGtha3VyaXRzdVwgOwor5Y2g6ICFID4gdXJhbmFpc2hhXCA7Civlk4Hlk4EgPiBzaGluYWppbmFcIDsKK+awt+e1kCA+IGh5b3VrZXRzdVwgOwor5b+g56+AID4gY2h1dXNldHN1XCA7CivpiaLlt7sgPiBoYWNoaW1ha2lcIDsKK+WShOWutiA+IGhhbmFzaGlrYVwgOwor6Yq35Y20ID4gc2hvdWt5YWt1XCA7CivmtojljbQgPiBzaG91a3lha3VcIDsKK+efjemRoCA+IGtha3VzaGFrdVwgOwor5b6p6IG3ID4gZnVrdXNob2t1XCA7Civmr5LomasgPiBkb2t1bXVzaGlcIDsKK+WNk+e1tiA+IHRha3V6ZXRzdVwgOwor5Y+W5raIID4gdG9yaWtlc2hpXCA7Civlkajlr4YgPiBzaHV1bWl0c3VcIDsKK+WJr+mjnyA+IGZ1a3VzaG9rdVwgOwor6JKf6JK7ID4ga29uJydueWFrdVwgOwor5ZCE5pyIID4ga2FrdXRzdWtpXCA7CivmrrXooosgPiBkYW5idWt1cm9cIDsKK+a1uOWFpSA+IHNoaW4nJ255dXVcIDsKK+WPjuayoSA+IHNodXVib3RzdVwgOwor6YmE5bGRID4gdGV0c3VrdXp1XCA7CivljZPnrYYgPiB0YWt1aGl0c3VcIDsKK+eiuueOhyA+IGtha3VyaXRzdVwgOwor5Y+W5qyhID4gdG9yaXRzdWdpXCA7CivljZPnq4sgPiB0YWt1cml0c3VcIDsKK+elnuW8jyA+IHNoaW5zaGlraVwgOwor5q2j6YGTID4gbWFzYW1pY2hpXCA7CivmsojmsqEgPiBjaGluYm90c3VcIDsKK+avkuiIjCA+IGRva3V6ZXRzdVwgOwor56Oo5rGBID4gdG9naXNoaXJ1XCA7CivlvbnogbcgPiB5YWt1c2hva3VcIDsKK+a0i+WupCA+IHlvdXNoaXRzdVwgOwor56Kn546JID4gaGVraWd5b2t1XCA7Civmra/os6ogPiBzaGlzaGl0c3VcIDsKK+mFt+eGsSA+IGtva3VuZXRzdVwgOwor6JS15rWaID4ga3VyYXphcmFlXCA7CivmgYvmlbUgPiBrb2lnYXRha2lcIDsKK+WPo+aXqSA+IGt1Y2hpYmF5YVwgOwor5rGB54mpID4gc2hpcnVtb25vXCA7Civphbfng4ggPiBrb2t1cmV0c3VcIDsKK+iThOepjSA+IGNoaWt1c2VraVwgOwor5byx6JmrID4geW93YW11c2hpXCA7CivlvrTnmbogPiBjaG91aGF0c3VcIDsKK+W/oOeDiCA+IGNodXVyZXRzdVwgOwor5oOc5YilID4gc2VraWJldHN1XCA7CivmtLvliocgPiBrYXRzdWdla2lcIDsKK+WPsOaJgCA+IGRhaWRva29yb1wgOwor5b6M56iLID4gbm9jaGlob2RvXCA7Civlj43ml6UgPiBoYW4nJ25pY2hpXCA7CivlvJPooZMgPiBreXV1anV0c3VcIDsKK+mBoOi/kSA+IG9jaGlrb2NoaVwgOwor5Yqb6KqsID4gcmlraXNldHN1XCA7CivptKzoibIgPiB1Z3Vpc3Vpcm9cIDsKK+WNmueJqSA+IGhha3VidXRzdVwgOwor5Y2Y54mpID4gaGl0b2Vtb25vXCA7Civmr5LnrYYgPiBkb2t1aGl0c3VcIDsKK+WRkeWPoyA+IG5vbWlndWNoaVwgOwor5ZG95LmeID4gaW5vY2hpZ29pXCA7CivlkIzlrqQgPiBkb3VzaGl0c3VcIDsKK+aBi+W/gyA+IGtvaWdva29yb1wgOwor5oKq5Y+jID4gd2FydWd1Y2hpXCA7CivliJ3pm6ogPiBoYXRzdXl1a2lcIDsKK+W8seiFsCA+IHlvd2Fnb3NoaVwgOwor6YCG6Z6YID4gZ3lha3V6YXlhXCA7CivlubTpoIMgPiB0b3NoaWdvcm9cIDsKK+edgOmZuCA+IGNoYWt1cmlrdVwgOwor5ZGK5YilID4ga29rdWJldHN1XCA7CivmsLTmsrkgPiBtaXp1YWJ1cmFcIDsKK+awt+awtCA+IGtvb3JpbWl6dVwgOwor5ZGI5Ye6ID4gdGVpc2h1dHN1XCA7CivliY3ovL8gPiBzYWtpZ29zaGlcIDsKK+WPt+WupCA+IGdvdXNoaXRzdVwgOwor5rKz5bK4ID4ga2F3YWdpc2hpXCA7CivlvLfnuK4gPiBreW91c2h1a3VcIDsKK+WHuumhmCA+IHNodXRzdWdhblwgOwor5Ye66aGMID4gc2h1dHN1ZGFpXCA7CivmgZDlr58gPiBreW91c2F0c3VcIDsKK+mxl+mbsiA+IHVyb2tvZ3Vtb1wgOwor6bSD6IiMID4gZ2VraXpldHN1XCA7CivnpZ7li4UgPiBzaGluY2hva3VcIDsKK+elneWLnSA+IHNodWt1c2hvdVwgOwor6YCa6YeIID4gdHN1dXNoYWt1XCA7CivnoILnspIgPiBzdW5hdHN1YnVcIDsKK+mAn+mBlCA+IHNva3V0YXRzdVwgOwor5Ye66ZmjID4gc2h1dHN1amluXCA7CivpgJrpgZQgPiB0c3V1dGF0c3VcIDsKK+WInemHnCA+IGhhdHN1Z2FtYVwgOwor5Ye66ZaAID4gc2h1dHN1bW9uXCA7Civph6PloIAgPiB0c3VyaWJvcmlcIDsKK+i/kemggyA+IGNoaWthZ29yb1wgOwor6bO26IG3ID4gdG9iaXNob2t1XCA7Civnn7PnrYYgPiBzZWtpaGl0c3VcIDsKK+efs+eruSA+IHNla2ljaGlrdVwgOwor5byV57axID4gaGlraWR6dW5hXCA7CivnpZ7ku48gPiBzaGluYnV0c3VcIDsKK+efreetkiA+IHRhbmR6dXRzdVwgOwor5q+S54mpID4gZG9rdWJ1dHN1XCA7CivljbPml6UgPiBzb2t1aml0c3VcIDsKK+mAg+mBkyA+IG5pZ2VtaWNoaVwgOwor56We5Li7ID4ga2FuJydudXNoaVwgOwor5ZCI5Y2wID4gYWlqaXJ1c2hpXCA7CivljZLmpa0gPiBzb3RzdWd5b3VcIDsKK+WLneedgCA+IHNob3VjaGFrdVwgOwor5ZCQ5Ye6ID4gdG9zaHV0c3VcIDsKK+mHkeWeiyA+IGthbmFnYXRhXCA7Civnn7PnpZ4gPiBzaGFrdWppblwgOwor5ZCN5Yi5ID4gbWVpc2F0c3VcIDsKK+W8vuedgCA+IGRhbmNoYWt1XCA7CivokL3nsY0gPiByYWt1c2VraVwgOwor55+i562SID4geWFkenV0c3VcIDsKK+W/g+acjSA+IHNoaW5wdWt1XCA7CivpgIbou6IgPiBneWFrdXRlblwgOwor5ZCI5YqbID4gZ291cnlva3VcIDsKK+iWmeWIgCA+IG5hZ2luYXRhXCA7CivlkIzliJcgPiBkb3VyZXRzdVwgOwor55u06Z2iID4gY2hva3VtZW5cIDsKK+W+qealrSA+IGZ1a3VneW91XCA7CivoloTlj6MgPiB1c3VrdWNoaVwgOwor6I2J6aOfID4gc291c2hva3VcIDsKK+W4uOmXhyA+IHRva295YW1pXCA7CivlkIjlhoogPiBnb3VzYXRzdVwgOwor5Yml6JC9ID4gaGFrdXJha3VcIDsKK+iMtumrqiA+IGNoYXBhdHN1XCA7CivpgJ/oqq0gPiBzb2t1ZG9rdVwgOwor5Y6z5a+GID4gZ2VubWl0c3VcIDsKK+WHuumDtyA+IHNodWtreW91XCA7CivljprlupUgPiBhdHN1em9rb1wgOwor5byV56qTID4gaGlraW1hZG9cIDsKK+WIhui9hCA+IGJ1bmthdHN1XCA7CivpgJroqq0gPiB0c3V1ZG9rdVwgOwor6YGc6ImyID4gc29uc2hva3VcIDsKK+i/vei3oSA+IHRzdWlzZWtpXCA7Civli7LniLUgPiBrdW5zaGFrdVwgOwor6YCa6KizID4gdHN1dXlha3VcIDsKK+WPquWPqiA+IHRhZGF0YWRhXCA7Civlj4vlnqMgPiB0b21vZ2FraVwgOwor5Y2K5pyIID4gaGFudHN1a2lcIDsKK+ecn+i/uSA+IHNoaW5zZWtpXCA7CivlkInkvosgPiBraXRzdXJlaVwgOwor6L+R6YmEID4ga2ludGV0c3VcIDsKK+iMtumjryA+IGNoYW1lc2hpXCA7CivliKXoqIAgPiBiZXRzdWdlblwgOwor5q6W55SjID4gc2hva3VzYW5cIDsKK+mHkeWPoyA+IGtpbmd1Y2hpXCA7CivpgKDooYAgPiB6b3VrZXRzdVwgOwor6bOl57GgID4gdG9yaWthZ29cIDsKK+WLg+eZuiA+IGJvcHBhdHN1XCA7Civlu7rnr4kgPiBrZW5jaGlrdVwgOwor5Ye66LqrID4gc2h1c3NoaW5cIDsKK+WNgeaciCA+IGp1dWdhdHN1XCA7Civlj6PljaAgPiBrdWNoaXVyYVwgOwor5q2j56uLID4gc2Vpcml0c3VcIDsKK+mvqOmqqCA+IGdlaWtvdHN1XCA7CivmsYLlv4MgPiBreXV1c2hpblwgOwor55u46Y6aID4gYWlkenVjaGlcIDsKK+ecvOitmCA+IGdhbnNoaWtpXCA7Civlv4Pmi40gPiBzaGlucGFrdVwgOwor5b285q2kID4ga2FyZWtvcmVcIDsKK+atr+ejqCA+IGhhbWlnYWtpXCA7CivokL3nn7MgPiByYWt1c2VraVwgOwor5bid6ZeVID4gdGVpa2V0c3VcIDsKK+WGhemwkCA+IHVjaGl3YW5pXCA7CivnnJ/ouZ8gPiBzaGluc2VraVwgOwor5Y+k5Ym1ID4gZnVydWtpenVcIDsKK+m0qOeMnyA+IGthbW9yeW91XCA7CivmsqHljbQgPiBib2treWFrdVwgOwor6YeR5YqbID4ga2lucnlva3VcIDsKK+WPs+WBtCA+IG1pZ2lnYXdhXCA7Civlh7rotoUgPiBzaHV0Y2hvdVwgOwor5Y+j5YmNID4ga3VjaGltYWVcIDsKK+WIu+iWhCA+IGtva3VoYWt1XCA7CivnnJ/ot6EgPiBzaGluc2VraVwgOwor5rC05oCnID4gbWl6dXNob3VcIDsKK+W6g+iiliA+IGhpcm9zb2RlXCA7Civph43lipsgPiBqdXVyeW9rdVwgOwor55u46YmEID4gc291dGV0c3VcIDsKK+iNt+i7iiA+IG5pZ3VydW1hXCA7Civli5XniakgPiBkb3VidXRzdVwgOwor55+l55WlID4gY2hpcnlha3VcIDsKK+ebrumMsiA+IG1va3Vyb2t1XCA7CivliIfoq5YgPiBzZXRzdXJvblwgOwor5Ye26LOKID4ga3lvdXpva3VcIDsKK+edgOijhSA+IGNoYWt1c291XCA7CivpgYXohIggPiBjaGlteWFrdVwgOwor5rC05byVID4gbWl6dWhpa2lcIDsKK+apiOmqqCA+IHRvdWtvdHN1XCA7CivmrrLmu4UgPiBzZW5tZXRzdVwgOwor5Y+k5YK3ID4gZnVydWtpenVcIDsKK+WGoOmbqiA+IGthbnNldHN1XCA7CivljJfmpbUgPiBob2treW9rdVwgOwor5bm76KGTID4gZ2VuanV0c3VcIDsKK+awt+W6iiA+IGh5b3VzaG91XCA7CivlioPnrZYgPiBrYWt1c2FrdVwgOwor5Y2z5bitID4gc29rdXNla2lcIDsKK+WPiOWPiCA+IG1hdGFtYXRhXCA7CivmsLTlupUgPiBtaW5hc29rb1wgOwor55u06YWNID4gY2hva3VoYWlcIDsKK+WIh+iogCA+IHNldHN1Z2VuXCA7CivmgKXlkYogPiBreXV1a29rdVwgOwor6YeI5YW4ID4gc2hha3V0ZW5cIDsKK+avq+acqyA+IGdvdW1hdHN1XCA7CivljYrmipggPiBoYW5zZXRzdVwgOwor5bmz6KKWID4gaGlyYXNvZGVcIDsKK+mvm+mjryA+IHRhaW1lc2hpXCA7CivliIfopoEgPiBzZXRzdXlvdVwgOwor5be76ZuyID4gbWFraWd1bW9cIDsKK+aui+eJqSA+IHphbmJ1dHN1XCA7CivmhYvjgIUgPiB3YXphd2F6YVwgOwor5Yqr55WlID4gZ291cnlha3VcIDsKK+WPjeWIpSA+IHRhbmJldHN1XCA7CivmraPnm7QgPiBzaG91amlraVwgOwor5Yq5546HID4ga291cml0c3VcIDsKK+WPquS6iyA+IHRhZGFnb3RvXCA7CivnoqnlraYgPiBzZWtpZ2FrdVwgOwor5rC05bWpID4gbWl6dWthc2FcIDsKK+ebtOmAgSA+IGNob2t1c291XCA7CivliIboo4IgPiBidW5yZXRzdVwgOwor5b255p+EID4geWFrdWdhcmFcIDsKK+WHjOi+sSA+IHJ5b3Vqb2t1XCA7CivlvovmlocgPiByaXRzdWJ1blwgOwor56iL44CFID4gaG9kb2hvZG9cIDsKK+WPjuWFpSA+IHNodXVueXV1XCA7Civoi6Xpto8gPiB3YWthZG9yaVwgOwor5rKI5YuHID4gY2hpbicneXV1XCA7Civlj4zlha0gPiBzdWdvcm9rdVwgOwor5buD57W2ID4gaGFpemV0c3VcIDsKK+mBk+ezuCA+IG1pY2hpaXRvXCA7CivlibXnq4sgPiBzb3VyaXRzdVwgOwor5Y2U5b+DID4ga3lvdXNoaW5cIDsKK+WMl+acnSA+IGhva3VjaG91XCA7Civli4fng4ggPiB5dXVyZXRzdVwgOwor5oCn5YilID4gc2VpYmV0c3VcIDsKK+WLg+eEtiA+IGJvdHN1emVuXCA7CivljZjlvI8gPiB0YW5zaGlraVwgOwor5Y+C5YiXID4gc2FucmV0c3VcIDsKK+awl+W/gyA+IGtpZ29rb3JvXCA7Civlt53poqggPiBrYXdha2F6ZVwgOwor5YiA6KGTID4gdG91anV0c3VcIDsKK+WMoeaVkSA+IGt5b3VreXV1XCA7CivmrbvniakgPiBzaGlidXRzdVwgOwor5Yiz6IifID4ga3VyaWJ1bmVcIDsKK+W9vOaYryA+IGthcmVrb3JlXCA7CivliIbonZUgPiBidW5zaG9rdVwgOwor55m96bOlID4gaGFrdWNob3VcIDsKK+WFtemjnyA+IGhlaXNob2t1XCA7Civmrr/mp5ggPiB0b25vc2FtYVwgOwor5Y+C5YWlID4gc2FuJydueXV1XCA7Civlj5fku5ggPiB1a2V0c3VrZVwgOwor5Y2Y5bivID4gaGl0b2VvYmlcIDsKK+efr+a/gCA+IGt5b3VnZWtpXCA7CivmgKrlgpEgPiBrYWlrZXRzdVwgOwor5Yi66IKhID4gc2FzdW1hdGFcIDsKK+axsuWPliA+IGt1bWl0b3JpXCA7CivnoILmtZwgPiBzdW5haGFtYVwgOwor6YGU562GID4gdGFwcGl0c3VcIDsKK+WJsuekvCA+IGthdHN1cmVpXCA7Civmr47mnIggPiBtYWl0c3VraVwgOwor5Y2H5b2iID4gbWFzdWdhdGFcIDsKK+W3nemcpyA+IGthd2FnaXJpXCA7CivliofnmoQgPiBnZWtpdGVraVwgOwor5YiG6JiWID4gYnVua2V0c3VcIDsKK+WPlOS4liA+IHNodWt1c2VpXCA7CivlhYDpt7kgPiBoYWdldGFrYVwgOwor5YuY5rG6ID4ga2Fua2V0c3VcIDsKK+WNs+WmmSA+IHNva3VteW91XCA7CivliaPnqoEgPiBrZW50c3VrdVwgOwor5b+F5a6aID4gaGl0c3Vqb3VcIDsKK+aApeS/oSA+IGt5dXVzaGluXCA7CivliY3ntIQgPiB6ZW4nJ3lha3VcIDsKK+WKh+eXmyA+IGdla2l0c3V1XCA7CivljYjlubQgPiB1bWFkb3NoaVwgOwor5bmz6JC9ID4gaGlyYW9jaGlcIDsKK+ehrOW8jyA+IGtvdXNoaWtpXCA7CivluLjorZggPiBqb3VzaGlraVwgOwor5b+D5a2mID4gc2hpbmdha3VcIDsKK+avjuaXpSA+IG1haW5pY2hpXCA7Civnmb3pqqggPiBoYWtrb3RzdVwgOwor5Y2H5bitID4gbWFzdXNla2lcIDsKK+aoqumiqCA+IHlva29rYXplXCA7CivmgKXkvLggPiBreXV1c2hpblwgOwor6bCQ6LazID4gd2FuaWFzaGlcIDsKK+mBheethiA+IGNoaWhpdHN1XCA7Civmr43mlrkgPiBoYWhha2F0YVwgOwor5rC35aOBID4gaHlvdWhla2lcIDsKK+eenuedgCA+IG1hbmNoYWt1XCA7CivovpvovpsgPiBrYXJhZ2FyYVwgOwor55u46K2YID4gc291c2hpa2lcIDsKK+iPnOeuuCA+IHNhaWJhc2hpXCA7CivpgLHntaYgPiBzaHV1a3l1dVwgOwor5YWr6Z2iID4gaGFjaGltZW5cIDsKK+WNmuWtpiA+IGhha3VnYWt1XCA7CivmrpbmsJEgPiBzaG9rdW1pblwgOwor6YCy57SaID4gc2hpbmt5dXVcIDsKK+WJjeevgCA+IHplbnNldHN1XCA7Civlvpflv4MgPiB0b2t1c2hpblwgOwor552A6Ii5ID4gY2hha3VzZW5cIDsKK+W8lea9riA+IGhpa2lzaGlvXCA7CivluLjoqK0gPiBqb3VzZXRzdVwgOwor5b6X5b6XID4gdG9rdXRva3VcIDsKK+iQvea9riA+IHJha3VjaG91XCA7CivlvLHmr5IgPiBqYWt1ZG9rdVwgOwor5Y6l5Ya3ID4ga2V0c3VyZWlcIDsKK+iUteWFgyA+IGt1cmFtb3RvXCA7Civlu7rniakgPiB0YXRlbW9ub1wgOwor5q275ruFID4gc2hpbWV0c3VcIDsKK+WLh+axuiA+IHl1dWtldHN1XCA7CivlhYjpq5ggPiBzYWtpZGFrYVwgOwor55m66aeFID4gaGF0c3Vla2lcIDsKK+mAgOiJsiA+IHRhaXNob2t1XCA7CivmsJflrqQgPiBraXNoaXRzdVwgOwor5YaG6YyQID4gbWFydWdpcmlcIDsKK+WLnealvSA+IHNob3VyYWt1XCA7CivlhY7ppqwgPiB1c2FnaXVtYVwgOwor5qyg56S8ID4ga2V0c3VyZWlcIDsKK+W9k+aciCA+IHRvdWdldHN1XCA7CivljYPls7YgPiBjaGlzaGltYVwgOwor5qiq6ZuyID4geW9rb2d1bW9cIDsKK+W+kOW+kCA+IHNvcm9zb3JvXCA7CivlhYPpq5ggPiBtb3RvZGFrYVwgOwor5bir6KqsID4gc2hpc2V0c3VcIDsKK+WMheaRgiA+IGhvdXNldHN1XCA7Civmrr/mlrkgPiB0b25vZ2F0YVwgOwor5rCR5a6/ID4gbWluc2h1a3VcIDsKK+mAo+e1kCA+IHJlbmtldHN1XCA7Civnm7ToqIAgPiBjaG9rdWdlblwgOwor5b2O5pyIID4gd2FuZ2V0c3VcIDsKK+W3oemMqyA+IGp1bnNoYWt1XCA7CivlvY7mm7IgPiB3YW5reW9rdVwgOwor55u06KeSID4gY2hva2tha3VcIDsKK+W7ieebtCA+IHJlbmNob2t1XCA7Civnm7ToppogPiBjaG9ra2FrdVwgOwor55u06KaWID4gY2hva3VzaGlcIDsKK+atu+a0uyA+IHNoaWthdHN1XCA7Civlv4PlooMgPiBzaGlua3lvdVwgOwor5bmz6ISIID4gaGVpbXlha3VcIDsKK+W9k+aXpSA+IHRvdWppdHN1XCA7CivlvqnlraYgPiBmdWt1Z2FrdVwgOwor5YWl6ZajID4gbnl1dWtha3VcIDsKK+aoqumVtyA+IHlva29uYWdhXCA7CivmrbvmsqEgPiBzaGlib3RzdVwgOwor5YyF5ousID4gaG91a2F0c3VcIDsKK+mAgOiBtyA+IHRhaXNob2t1XCA7Civlv6DlkYogPiBjaHV1a29rdVwgOwor5be76Lu4ID4gbWFraWppa3VcIDsKK+eZvumbtyA+IGh5YWt1cmFpXCA7Civnmb7pm6MgPiBoeWFrdW5hblwgOwor5Ye66Iq9ID4gc2h1dHN1Z2FcIDsKK+iPheesoCA+IHN1Z2VnYXNhXCA7CivliZvnm7QgPiBnb3VjaG9rdVwgOwor5Yqg5rm/ID4ga2FzaGl0c3VcIDsKK+eZuumbuyA+IGhhdHN1ZGVuXCA7CivliIbohIggPiBidW5teWFrdVwgOwor55uj6KizID4ga2FuJyd5YWt1XCA7CivlvI/ms5UgPiBzaGlraWhvdVwgOwor6YGF552AID4gY2hpY2hha3VcIDsKK+WFmumWpSA+IHRvdWJhdHN1XCA7CivliKXntI0gPiBiZXRzdW5vdVwgOwor5YiR572wID4ga2VpYmF0c3VcIDsKK+WGhemBlCA+IG5haXRhdHN1XCA7Civmrbvmrb8gPiBzaGlib3RzdVwgOwor5b+D5ZqiID4gc2hpbicnbm91XCA7CivlvbnlvpcgPiB5YWt1dG9rdVwgOwor6YCj56uLID4gcmVucml0c3VcIDsKK+mDt+aEgSA+IGt5b3VzaHV1XCA7Civlvbflvb8gPiBob3VmdXRzdVwgOwor5bqt55+zID4gbml3YWlzaGlcIDsKK+WIh+iAhSA+IGtpcmVtb25vXCA7CivpgYXnmbogPiBjaGloYXRzdVwgOwor5YWD6Z6YID4gbW90b3NheWFcIDsKK+W/mOWNtCA+IGJvdWt5YWt1XCA7CivmrbTmrbQgPiByZWtpcmVraVwgOwor56K65L+hID4ga2FrdXNoaW5cIDsKK+efs+afsSA+IHNla2ljaHV1XCA7CivmrKDnlaogPiBrZXRzdWJhblwgOwor5b2w5b6zID4gc2hvdXRva3VcIDsKK+mxiOiFuSA+IHRhcmFmdWt1XCA7CivlibLniakgPiB3YXJlbW9ub1wgOwor5bmV6IejID4gYmFrdXNoaW5cIDsKK+WFpemLjyA+IG55dXVreW91XCA7Civou73ptKggPiBrYXJ1Z2Ftb1wgOwor5byv5puyID4gd2Fua3lva3VcIDsKK+W/teS7jyA+IG5lbmJ1dHN1XCA7Civoj4rnn7MgPiBraWt1aXNoaVwgOwor5Ya36KGAID4gcmVpa2V0c3VcIDsKK+W5s+e1uSA+IGhpcmFnaW51XCA7CivphZLlkZEgPiBzYWtlbm9taVwgOwor6JGJ5qGcID4gaGF6YWt1cmFcIDsKK+edgOexsyA+IGNoYWt1YmVpXCA7CivlvLfmlbUgPiBreW91dGVraVwgOwor5rGC5YSfID4ga3l1dXNob3VcIDsKK+mAmuensCA+IHRzdXVzaG91XCA7Civlv6Dlg5UgPiBjaHV1Ym9rdVwgOwor5rC05YqbID4gc3Vpcnlva3VcIDsKK+aui+aciCA+IHphbmdldHN1XCA7Civli4Xmm7ggPiBjaG9rdXNob1wgOwor5YWx6YCaID4ga3lvdXRzdXVcIDsKK+WJjeeVpSA+IHplbnJ5YWt1XCA7Civmrormm7QgPiBrb3Rvc2FyYVwgOwor5bym5pyIID4gZ2VuZ2V0c3VcIDsKK+ebruiWrCA+IG1lZ3VzdXJpXCA7CivljZTllYYgPiBreW91c2hvdVwgOwor55m+6YysID4gaHlha3VyZW5cIDsKK+WFrOmBlCA+IGtvdXRhdHN1XCA7CivlvLHmlbUgPiBqYWt1dGVraVwgOwor6YCG566XID4gZ3lha3VzYW5cIDsKK+m7meOAhSA+IG1va3Vtb2t1XCA7CivlhavpgZQgPiBoYXR0YXRzdVwgOwor5YWr6YGTID4gaGFjaGlkb3VcIDsKK+WMl+WxsSA+IGtpdGF5YW1hXCA7Civlib/mu4UgPiBzb3VtZXRzdVwgOwor5buD54mpID4gaGFpYnV0c3VcIDsKK+WFrOi/sCA+IGtvdWp1dHN1XCA7Civlv6Dkv6EgPiBjaHV1c2hpblwgOwor55qu6LOqID4gaGlzaGl0c3VcIDsKK+efs+aWhyA+IGlzaGlidW1pXCA7CivlvaLlvI8gPiBrZWlzaGlraVwgOwor5YeL6JC9ID4gY2hvdXJha3VcIDsKK+WLheaXqCA+IGNob2t1c2hpXCA7CivljbjlgKQgPiBvcm9zaGluZVwgOwor55+t5pelID4gdGFuaml0c3VcIDsKK+awtOWFiCA+IG1penVzYWtpXCA7Civlt7foqqwgPiBrb3VzZXRzdVwgOwor5YWx6LubID4ga3lvdXlha3VcIDsKK+m7kuOAhSA+IGt1cm9ndXJvXCA7CivliaXnhLwgPiBzdWtpeWFraVwgOwor6YCi552AID4gaG91Y2hha3VcIDsKK+W7g+eGsSA+IGhhaW5ldHN1XCA7CivlvbnlroUgPiB5YWt1dGFrdVwgOwor5Yiw552AID4gdG91Y2hha3VcIDsKK+iMueibuCA+IHl1ZGVkYWtvXCA7CivlvLfmjK8gPiBreW91c2hpblwgOwor5YaN6KqsID4gc2Fpc2V0c3VcIDsKK+mAo+eZuiA+IHJlbnBhdHN1XCA7CivlvqnllLEgPiBmdWt1c2hvdVwgOwor55+l5pelID4gY2hpbmljaGlcIDsKK+W+tOWPjiA+IGNob3VzaHV1XCA7Civli4XmkrAgPiBjaG9rdXNlblwgOwor5YiG56+AID4gYnVuc2V0c3VcIDsKK+mFjeWIlyA+IGhhaXJldHN1XCA7Civlh6bnvbAgPiBzaG9iYXRzdVwgOwor5YaN6KitID4gc2Fpc2V0c3VcIDsKK+attOacnSA+IHJla2ljaG91XCA7Civliofmr5IgPiBnZWtpZG9rdVwgOwor6L+956m2ID4gdHN1aWt5dXVcIDsKK+ats+acqyA+IHNhaW1hdHN1XCA7CivmqKrou7ggPiB5b2tvamlrdVwgOwor5YiG562GID4gYnVucGl0c3VcIDsKK+i8r+mMsiA+IHNodXVyb2t1XCA7CivljYrlj6MgPiBoYW5rdWNoaVwgOwor5Y2B5ZOyID4ganV0dGV0c3VcIDsKK+eZvumBuCA+IGh5YWt1c2VuXCA7Civlu4nmvZQgPiByZW5rZXRzdVwgOwor5YWI6YeRID4gc2FraWdhbmVcIDsKK+i7vemjnyA+IGtlaXNob2t1XCA7CivliIbnq4sgPiBidW5yaXRzdVwgOwor5YaF6KizID4gdWNoaXdha2VcIDsKK+i/veemjyA+IHRzdWlmdWt1XCA7CivnmbrpgZQgPiBoYXR0YXRzdVwgOwor5qyy5rexID4geW9rdWJ1a2FcIDsKK+atquabsiA+IHdhaWt5b2t1XCA7CivlhaXotoUgPiBueXV1Y2hvdVwgOwor5Ymy5rOoID4gd2FyaWNodXVcIDsKK+awkeWKmyA+IG1pbnJ5b2t1XCA7CivljJflo4EgPiBob2t1aGVraVwgOwor5buD5ruFID4gaGFpbWV0c3VcIDsKK+awtOS4iiA+IG1pbmFrYW1pXCA7CivliJ3nm4YgPiBoYXRzdWJvblwgOwor5q2j5pytID4gc2hvdWZ1ZGFcIDsKK+iRrOW8jyA+IHNvdXNoaWtpXCA7CivlhaXos54gPiBueXV1c2hvdVwgOwor5YWI6YGUID4gc2VuZGF0c3VcIDsKK+atouacqCA+IHRvbWFyaWdpXCA7CivnnYDnnLwgPiBjaGFrdWdhblwgOwor5Y2K5YiHID4gaGFuc2V0c3VcIDsKK+WIneeZuiA+IHNob2hhdHN1XCA7Civou5/pqqggPiBuYW5rb3RzdVwgOwor5b2T5bGAID4gdG91a3lva3VcIDsKK+auuuWusyA+IHNhdHN1Z2FpXCA7CivokL3mjowgPiByYWt1c2hvdVwgOwor5YWx6KizID4ga3lvdXlha3VcIDsKK+W8t+W8sSA+IGt5b3VqYWt1XCA7Civlv4PkuK0gPiBzaGluY2h1dVwgOwor5bmz55q/ID4gaGlyYXphcmFcIDsKK+WIneeUoyA+IGhhdHN1emFuXCA7CivluLjnt5EgPiBqb3VyeW9rdVwgOwor5Y2X5LuPID4gbmFuZnV0c3VcIDsKK+WKq+aOoCA+IGdvdXJ5YWt1XCA7CivljYHlhasgPiBqdXVoYWNoaVwgOwor5YWs6KitID4ga291c2V0c3VcIDsKK+mBqealrSA+IHRla2lneW91XCA7CivprLHprLEgPiB1dHN1dXRzdVwgOwor6L+955m9ID4gdHN1aWhha3VcIDsKK+W+k+WNkiA+IGp1dXNvdHN1XCA7CivlvqHlhqAgPiBva2FubXVyaVwgOwor5b6L5ZGCID4gcml0c3VyeW9cIDsKK+i+o+iFlSA+IHJhdHN1d2FuXCA7CivnnYDnlKggPiBjaGFrdXlvdVwgOwor6YCG55SoID4gZ3lha3V5b3VcIDsKK+mAhueUoyA+IGd5YWt1emFuXCA7Civlha3opqogPiByb2t1c2hpblwgOwor5b6M5Y+jID4gYXRva3VjaGlcIDsKK+WFqOiosyA+IHplbicneWFrdVwgOwor5Y2Y5LiAID4gdGFuJydpdHN1XCA7CivluK/nt5EgPiB0YWlyeW9rdVwgOwor55+z5byTID4gaXNoaXl1bWlcIDsKK+mBuOabsiA+IHNlbmt5b2t1XCA7CivpgJrniZIgPiB0c3V1Y2hvdVwgOwor55u057eaID4gY2hva3VzZW5cIDsKK+ecjOeriyA+IGtlbnJpdHN1XCA7CivliKXnirYgPiBiZXRzdWpvdVwgOwor5YeN57WQID4gdG91a2V0c3VcIDsKK+W3neidiSA+IGthd2FzZW1pXCA7Civpg7flm70gPiBreW91a29rdVwgOwor5Ymv5qWtID4gZnVrdWd5b3VcIDsKK+i/veeUsyA+IHRzdWlzaGluXCA7CivnoILlsbEgPiBzdW5heWFtYVwgOwor5b6L5YuVID4gcml0c3Vkb3VcIDsKK+ato+aOpSA+IHNlaXNldHN1XCA7Civov6vnnJ8gPiBoYWt1c2hpblwgOwor55yB562GID4gc2VpaGl0c3VcIDsKK+W8n+W+oSA+IG90b3V0b2dvXCA7CivlhYfos4ogPiBreW91em9rdVwgOwor5YeE57W2ID4gc2VpemV0c3VcIDsKK+W+jOWIlyA+IGtvdXJldHN1XCA7CivlvLflsIYgPiBreW91c2hvdVwgOwor5bm0546HID4gbmVucml0c3VcIDsKK+WGl+iIjCA+IGpvdXpldHN1XCA7CivmqJnoqLsgPiBoeW91Y2h1dVwgOwor55yf55m9ID4gbWFzc2hpcm9cIDsKK+WFuOiWrCA+IHRlbicneWFrdVwgOwor5byx5bCRID4gamFrdXNob3VcIDsKK+W8seWwjyA+IGpha3VzaG91XCA7Civnm7TnrZQgPiBjaG9rdXRvdVwgOwor55+z5bGxID4gaXNoaXlhbWFcIDsKK+iMnOiJsiA+IGFrYW5laXJvXCA7CivnmbroqIAgPiBoYXRzdWdlblwgOwor5byT5b2iID4geXVtaW5hcmlcIDsKK+WJr+acqCA+IGZ1a3Vib2t1XCA7CivnnJ/nl4cgPiBzaGluc2hvdVwgOwor5Yqj5oOFID4gcmV0c3Vqb3VcIDsKK+WGpee9sCA+IG1laWJhdHN1XCA7CivnpZ7jgIUgPiBrYW1pZ2FtaVwgOwor5Yqj5oKqID4gcmV0c3Vha3VcIDsKK+muruihgCA+IHNlbmtldHN1XCA7CivlvbnlibIgPiB5YWt1d2FyaVwgOwor55+z5a6kID4gaXNoaW11cm9cIDsKK+iLpeihhiA+IHdha2FzaHV1XCA7Civmr43lkJsgPiBoYWhhZ2ltaVwgOwor5bmz54axID4gaGVpbmV0c3VcIDsKK+ebtOeojiA+IGNob2t1emVpXCA7Civov5HnnYAgPiBraW5jaGFrdVwgOwor6YGT5p2/ID4gbWljaGlpdGFcIDsKK+WLheWuoyA+IGNob2t1c2VuXCA7Civnn6nlsLogPiBrYW5lamFrdVwgOwor5YiH54mpID4ga2lyZW1vbm9cIDsKK+mBuOaKnCA+IHNlbmJhdHN1XCA7Civnmb3on7sgPiBzaGlyb2FyaVwgOwor5by35aWqID4gZ291ZGF0c3VcIDsKK+WIuuauuiA+IHNoaXNhdHN1XCA7Civlh6Hnmb4gPiBib25weWFrdVwgOwor5b6L5LukID4gcml0c3VyZWlcIDsKK+WGheiFvyA+IHVjaGltb21vXCA7Civou43plqUgPiBndW5iYXRzdVwgOwor5bmj54mpID4gaGVpbW90c3VcIDsKK+mAuOalvSA+IGl0c3VyYWt1XCA7CivpgJ/msbogPiBzb2trZXRzdVwgOwor5YyX5YG0ID4gaG9rdXNva3VcIDsKK+W9q+WIuyA+IGNob3Vrb2t1XCA7CivpgIbmva4gPiBzYWthc2hpb1wgOwor56Cy5YiXID4gaG91cmV0c3VcIDsKK+ato+W8jyA+IHNlaXNoaWtpXCA7CivlhqDntbYgPiBrYW56ZXRzdVwgOwor5q6/5Y6fID4gdG9ub2JhcmFcIDsKK+WHuOeKtiA+IHRvdHN1am91XCA7CivlhoXogqEgPiB1Y2hpbW9tb1wgOwor6YGU5paHID4gdGF0c3VidW5cIDsKK+W+geS8kCA+IHNlaWJhdHN1XCA7Civlubvmu4UgPiBnZW5tZXRzdVwgOwor5by+5ZynID4gZGFuJydhdHN1XCA7Civou73ou70gPiBrYXJ1Z2FydVwgOwor5YWF6KGAID4ganV1a2V0c3VcIDsKK+WGheiBtyA+IG5haXNob2t1XCA7Civou5/piYQgPiBuYW50ZXRzdVwgOwor5bmy5r2uID4gaGlraXNoaW9cIDsKK+efs+WiqCA+IHNla2lib2t1XCA7CivliKTmsbogPiBoYW5rZXRzdVwgOwor55+t5aScID4gbWlqaWtheW9cIDsKK+W8t+WcpyA+IGt5b3VhdHN1XCA7CivlubPmu5EgPiBoZWlrYXRzdVwgOwor5by35Zu9ID4ga3lvdWtva3VcIDsKK+msoumVtyA+IGJpbicnbmFnYVwgOwor5YaG572QID4gbWFydWdhbWFcIDsKK+ebtOebtCA+IGppa2lqaWtpXCA7Civlt7vntJkgPiBtYWtpZ2FtaVwgOwor5YW86IG3ID4ga2Vuc2hva3VcIDsKK+asoOaWhyA+IGtldHN1YnVuXCA7CivlhqznqbogPiBmdXl1em9yYVwgOwor6YGF5pelID4gY2hpaml0c3VcIDsKK+WIpeauvyA+IGJldHN1ZGVuXCA7CivliKXmrrUgPiBiZXRzdWRhblwgOwor6YCG5rWqID4gc2FrYW5hbWlcIDsKK+eZveiTriA+IGJ5YWt1cmVuXCA7Civnn7PlnqMgPiBpc2hpZ2FraVwgOwor6YO35L+XID4ga3lvdXpva3VcIDsKK+i7uOi2syA+IGppa3Vhc2hpXCA7CivpgIbms6IgPiBzYWthbmFtaVwgOwor55uu55qEID4gbW9rdXRla2lcIDsKK+iQqeWxniA+IGhhZ2l6b2t1XCA7CivpgJ/mpa0gPiBoYXlhd2F6YVwgOwor5q615YilID4gdGFuYmV0c3VcIDsKK+W4gueriyA+IHNoaXJpdHN1XCA7Civoi6XojYkgPiB3YWtha3VzYVwgOwor552A5rC0ID4gY2hha3VzdWlcIDsKK+i7oui9jSA+IHRlbnRldHN1XCA7CivpsJDnmq4gPiB3YW5pZ2F3YVwgOwor5q2i5a6/ID4gc2hpc2h1a3VcIDsKK+iKuOihkyA+IGdlaWp1dHN1XCA7CivmraPlrpcgPiBtYXNhbXVuZVwgOwor5qiq6IW5ID4geW9rb2JhcmFcIDsKK+WGl+ethiA+IGpvdWhpdHN1XCA7CivlhazogbcgPiBrb3VzaG9rdVwgOwor5ZCE44CFID4gc29yZXpvcmVcIDsKK+WIg+a4oSA+IGhhd2F0YXJpXCA7Civps6nlsL4gPiBtaXpvb2NoaVwgOwor6auj6au0ID4gaG91ZnV0c3VcIDsKK+WHuua8lCA+IHNodXRzdWVuXCA7CivpganlvbkgPiB0ZWtpeWFrdVwgOwor6Lqr6ZW3ID4gc2hpbmNob3VcIDsKK+WKm+WtpiA+IHJpa2lnYWt1XCA7CivoibLpgZMgPiBzaGlraWRvdVwgOwor55m+6Iq4ID4gaHlha3VnZWlcIDsKK+WLouWKmyA+IHNlaXJ5b2t1XCA7CivoiLnpnIogPiBmdW5hZGFtYVwgOwor6L+95rGCID4gdHN1aWt5dXVcIDsKK+egguWOnyA+IHN1bmFoYXJhXCA7CivlvY7lhaUgPiB3YW4nJ255dXVcIDsKK+WItuacrSA+IHNlaXNhdHN1XCA7Civmpb3plbcgPiBnYWt1Y2hvdVwgOwor55u055CDID4gY2hva2t5dXVcIDsKK+WIhuazjCA+IGJ1bnBpdHN1XCA7CivmpbXpmZAgPiBreW9rdWdlblwgOwor6a6r6IaaID4gc2FtZWhhZGFcIDsKK+eZuuiJsiA+IGhhc3Nob2t1XCA7CivokazliJcgPiBzb3VyZXRzdVwgOwor5YuF5ZWPID4gY2hva3Vtb25cIDsKK+W8vuWKmyA+IGRhbnJ5b2t1XCA7CivlvI/loLQgPiBzaGlraWpvdVwgOwor6auY6auYID4gdGFrYWRha2FcIDsKK+WJsuW8lSA+IHdhcmliaWtpXCA7CivmrLLlv4MgPiB5b2t1c2hpblwgOwor6YG45bGAID4gc2Vua3lva3VcIDsKK+WJlOaKiSA+IHRla2tldHN1XCA7CivmrLLlvpcgPiB5b2t1dG9rdVwgOwor6a6u6IKJID4gc2VuJyduaWt1XCA7CivpgIbmp5ggPiBzYWthc2FtYVwgOwor6YCy5pKDID4gc2hpbmdla2lcIDsKK+WLleWKmyA+IGRvdXJ5b2t1XCA7Civli4Xlkb0gPiBjaG9rdW1laVwgOwor5Yeb54OIID4gcmlucmV0c3VcIDsKK+atpuWjqyA+IG1vbm9ub2Z1XCA7CivprqvogowgPiBzYW1laGFkYVwgOwor5q665Lq6ID4gc2F0c3VqaW5cIDsKK+WDrei2iiA+IHNlbicnZXRzdVwgOwor6YCj5pelID4gcmVuaml0c3VcIDsKK+ato+WkoiA+IG1hc2F5dW1lXCA7CivliLfmlbAgPiBzYXRzdXN1dVwgOwor6LuL6L2iID4gYXRzdXJla2lcIDsKK+WIpeadoSA+IGJldHN1am91XCA7CivlhLLok4QgPiBjaG9jaGlrdVwgOwor5YaG56qTID4gbWFydW1hZG9cIDsKK+iLpeiAhSA+IHdha2Ftb25vXCA7Civou4rovYQgPiBzaGFrYXRzdVwgOwor5oGQ44CFID4ga293YWdvd2FcIDsKK+mAmuaagSA+IHRzdXVneW91XCA7CivliY3miZUgPiBtYWViYXJhaVwgOwor55m+6IGeID4gaHlha3VidW5cIDsKK+eZuuiCsiA+IGhhdHN1aWt1XCA7Civlj6rjgIUgPiB0YWRhdGFkYVwgOwor6YCQ5p2hID4gY2hpa3Vqb3VcIDsKK+ebiuebiiA+IG1hc3VtYXN1XCA7CivmqKrnuJ4gPiB5b2tvamltYVwgOwor6YGU5byBID4gdGF0c3ViZW5cIDsKK+W3o+eqnyA+IHNvdWt1dHN1XCA7Civlt53nrYsgPiBrYXdhc3VqaVwgOwor5YOj6LaKID4gc2VuJydldHN1XCA7Civlt77nnYAgPiBraW5jaGFrdVwgOwor5YWN6IG3ID4gbWVuc2hva3VcIDsKK+WLh+WKmyA+IHl1dXJ5b2t1XCA7Civlt53nq68gPiBrYXdhYmF0YVwgOwor5YuB5Y2SID4ga2Vpc290c3VcIDsKK+WGheelnSA+IHVjaGlpd2FpXCA7CivojYnniakgPiBrdXNhbW9ub1wgOwor5bKz6bqTID4gZ2FrdXJva3VcIDsKK+WIhualtSA+IGJ1bmt5b2t1XCA7Civmp43ooZMgPiBzb3VqdXRzdVwgOwor6YCj5o6lID4gcmVuc2V0c3VcIDsKK+WFpeexjSA+IG55dXVzZWtpXCA7Civlia/lsIYgPiBmdWt1c2hvdVwgOwor5Ymv5a+pID4gZnVrdXNoaW5cIDsKK+efpeWKmyA+IGNoaXJ5b2t1XCA7CivlibLlrokgPiB3YXJpeWFzdVwgOwor5Yem5rG6ID4gc2hva2V0c3VcIDsKK+W5tOacqyA+IG5lbm1hdHN1XCA7Civlub7ml6UgPiBpa3VuaWNoaVwgOwor5bm05pyIID4gbmVuZ2V0c3VcIDsKK+WIh+agqiA+IGtpcmlrYWJ1XCA7CivlirnlipsgPiBrb3VyeW9rdVwgOwor6aq46aqoID4gZ2Fpa290c3VcIDsKK+WFrOeriyA+IGtvdXJpdHN1XCA7CivlvI/lj7AgPiBzaGlraWRhaVwgOwor6aqo6bGXID4ga290c3VyaW5cIDsKK+WGjeeZuiA+IHNhaWhhdHN1XCA7CivmrbvlipsgPiBzaGlyeW9rdVwgOwor5Yq05YqbID4gcm91cnlva3VcIDsKK+aoquetiyA+IHlva29zdWppXCA7Civlt4znqp8gPiBnYW5rdXRzdVwgOwor5Yas54mpID4gZnV5dW1vbm9cIDsKK+mAhuaVsCA+IGd5YWt1c3V1XCA7CivlhY7ntrIgPiB1c2FnaWFtaVwgOwor55m957O4ID4gc2hpcmFpdG9cIDsKK+atu+WIpSA+IHNoaWJldHN1XCA7CivliIfmnK0gPiBraXJpZnVkYVwgOwor5YiH5pybID4gc2V0c3Vib3VcIDsKK+W5s+aXpSA+IGhlaWppdHN1XCA7Civlt6bnm64gPiBoaWRhcmltZVwgOwor6Lu96JSRID4ga2VpYmV0c3VcIDsKK+WJo+WuoiA+IGtlbmt5YWt1XCA7CivlhoXnmbogPiBuYWloYXRzdVwgOwor5YuF5L2/ID4gY2hva3VzaGlcIDsKK+iKi+iZqyA+IGltb211c2hpXCA7Civlj4jjgIUgPiBtYXRhbWF0YVwgOwor5qSL6bOlID4gbXVrdWRvcmlcIDsKK+W5s+aUvyA+IGhpcmFtYXNhXCA7Civpqqjpq4QgPiBrb3RzdXp1aVwgOwor55uu5risID4gbW9rdXNva3VcIDsKK+WFg+e3oCA+IG1vdG9qaW1lXCA7Civnn7PkuoAgPiBpc2hpZ2FtZVwgOwor5YWI57SwID4gc2FraWJvc29cIDsKK+WLheS7uyA+IGNob2t1bmluXCA7Civnn5vlhYggPiBob2tvc2FraVwgOwor5bqm5bqmID4gdGFiaXRhYmlcIDsKK+WLheS7pCA+IGNob2t1cmVpXCA7CivlhYjntIQgPiBzZW4nJ3lha3VcIDsKK+iQqeWOnyA+IGhhZ2l3YXJhXCA7CivlhaXnpZ4gPiBueXV1c2hpblwgOwor5q2v5YiXID4gc2hpcmV0c3VcIDsKK+WIh+aWrSA+IHNldHN1ZGFuXCA7Civlu4Plq6EgPiBoYWljaGFrdVwgOwor5q2q5YqbID4gd2Fpcnlva3VcIDsKK+W8j+WFuCA+IHNoaWtpdGVuXCA7Civov73mkoMgPiB0c3VpZ2VraVwgOwor6IqL6JSTID4gaW1vZHp1cnVcIDsKK+aomeeroCA+IGh5b3VzaG91XCA7Civlt7vniakgPiBtYWtpbW9ub1wgOwor55u45q66ID4gc291c2F0c3VcIDsKK+WGl+eJqSA+IGpvdWJ1dHN1XCA7CivliY3lsYggPiB6ZW5rdXRzdVwgOwor5Yiz5b2iID4ga3VyaWthdGFcIDsKK+ato+WJsiA+IHNlaWthdHN1XCA7Civouo3pgLIgPiB5YWt1c2hpblwgOwor5byB5YilID4gYmVuYmV0c3VcIDsKK+edgOaJiyA+IGNoYWt1c2h1XCA7CivmraPliIcgPiBzZWlzZXRzdVwgOwor6Iy25rysID4gY2hhZHp1a2VcIDsKK+aAluOAhSA+IGtvd2Fnb3dhXCA7CivnlZnps6UgPiByeXV1Y2hvdVwgOwor6YGO5aSxID4ga2FzaGl0c3VcIDsKK+iIuei2syA+IGZ1bmFhc2hpXCA7CivlhbXnlaUgPiBoZWlyeWFrdVwgOwor55m956WoID4gaGFrdWh5b3VcIDsKK+WBj+mjnyA+IGhlbnNob2t1XCA7Civlt6XnjocgPiBrb3VyaXRzdVwgOwor5q2M5ZCIID4gdXRhYXdhc2VcIDsKK+i6kei6hSA+IHRzdXRzdWppXCA7CivmrYzlj6MgPiB1dGFndWNoaVwgOwor6bC55pyoID4ga2F0c3VvZ2lcIDsKK+i/q+aSgyA+IGhha3VnZWtpXCA7Civnm7jmp4wgPiBhaWR6dWNoaVwgOwor5rGy44CFID4ga3l1dWt5dXVcIDsKK+WIneaBiyA+IGhhdHN1a29pXCA7CivlhYjnqIsgPiBzYWtpaG9kb1wgOwor552A5oOzID4gY2hha3Vzb3VcIDsKK+iIueizgyA+IGZ1bmFjaGluXCA7CivojLbmuIsgPiBjaGFzaGlidVwgOwor6YCP5b65ID4gdG91dGV0c3VcIDsKK+eXhei6qyA+IGJ5b3VzaGluXCA7CivpgLLlraYgPiBzaGluZ2FrdVwgOwor5qaC6KqsID4gZ2Fpc2V0c3VcIDsKK+iQveS4gSA+IHJha3VjaG91XCA7CivpgJrluLMgPiB0c3V1Y2hvdVwgOwor5bqK5bqXID4gdG9rb21pc2VcIDsKK+iJr+iWrCA+IHJ5b3V5YWt1XCA7CivmrKDloLQgPiBrZXRzdWpvdVwgOwor5YiH5oi7ID4gc2V0c3VyYWlcIDsKK+aomeefsyA+IGh5b3VzZWtpXCA7Civlgb3ph5EgPiBuaXNlZ2FuZVwgOwor55uu5qiZID4gbW9rdWh5b3VcIDsKK+alveiqvyA+IGdha3VjaG91XCA7CivlipvlgIYgPiByaWtpcnlvdVwgOwor6YG45YilID4gc2VuYmV0c3VcIDsKK+WIuuWuoiA+IHNoaWt5YWt1XCA7CivluJ3mrKAgPiB0ZWlrZXRzdVwgOwor5Ye65o2QID4gc2h1dHN1ZW5cIDsKK+edgOW/gyA+IGtpZ29rb3JvXCA7CivpgJDlubQgPiBjaGlrdW5lblwgOwor6a6r55quID4gc2FtZWdhd2FcIDsKK+W6g+W6gyA+IGhpcm9iaXJvXCA7CivmqKrnlLogPiB5b2tvY2hvdVwgOwor6L+R5pelID4ga2luaml0c3VcIDsKK+W6g+W5hSA+IGhpcm9oYWJhXCA7CivlipvkvZwgPiByaWtpc2FrdVwgOwor6bOp5L+hID4ga3l1dXNoaW5cIDsKK+aknOmWsiA+IGtlbicnZXRzdVwgOwor556s5Yi7ID4gc2h1bmtva3VcIDsKK+eZuuedgCA+IGhhdGNoYWt1XCA7CivmpbXoq5YgPiBreW9rdXJvblwgOwor552A5by+ID4gY2hha3VkYW5cIDsKK+WFuOeJqSA+IHRlbmJ1dHN1XCA7Civnmb3nmpkgPiBoYWt1c2VraVwgOwor55m955m9ID4gaGFrdWhha3VcIDsKK+WIh+aDhSA+IHNldHN1am91XCA7CivliJHlvosgPiBrZWlyaXRzdVwgOwor5qiZ55qEID4gaHlvdXRla2lcIDsKK+WHuuaJgCA+IGRlZG9rb3JvXCA7Civov73lvrQgPiB0c3VpY2hvdVwgOwor552A5bqVID4gY2hha3V0ZWlcIDsKK+WFmueVpSA+IHRvdXJ5YWt1XCA7CivmpbXoqIAgPiBreW9rdWdlblwgOwor5bqK5bGxID4gdG9rb3lhbWFcIDsKK+eXm+immiA+IHRzdXVrYWt1XCA7CivlubTlvI8gPiBuZW5zaGlraVwgOwor55m655mMID4gaGF0c3VnYW5cIDsKK+edgOW4vSA+IGNoYWt1Ym91XCA7CivlhoXmv6AgPiB1Y2hpYm9yaVwgOwor5YWI552AID4gc2VuY2hha3VcIDsKK+edgOW4ryA+IGNoYWt1dGFpXCA7CivluLjmmKUgPiB0b2tvaGFydVwgOwor6L+95byUID4gdHN1aWNob3VcIDsKK+iNt+aNjCA+IG5pc2FiYWtpXCA7CivlubPluq0gPiBoaXJhbml3YVwgOwor5bGx6bOpID4geWFtYWJhdG9cIDsKK+mAsuWigyA+IHNoaW5reW91XCA7CivlsbHps6UgPiB5YW1hZG9yaVwgOwor6YCa5a2mID4gdHN1dWdha3VcIDsKK+eVnOmhniA+IGNoaWt1cnVpXCA7CivlubPlupUgPiBoaXJhem9rb1wgOwor5YWl542EID4gbnl1dWdva3VcIDsKK+WFrOeItSA+IGtvdXNoYWt1XCA7CivoibLoibYgPiBpcm90c3V5YVwgOwor5bmz5bmVID4gaGlyYW1ha3VcIDsKK+WFiOeZuiA+IHNlbnBhdHN1XCA7CivlibTliIcgPiBnYWlzZXRzdVwgOwor55m955OcID4gc2hpcm91cmlcIDsKK+i/keaOpSA+IGtpbnNldHN1XCA7CivoubLouJ4gPiB0c3VrdWJhaVwgOwor6Lui6IG3ID4gdGVuc2hva3VcIDsKK+mAj+WvnyA+IHRvdXNhdHN1XCA7CivliofkvZwgPiBnZWtpc2FrdVwgOwor552A5bK4ID4gY2hha3VnYW5cIDsKK+i7uOe0oiA+IGppa3VzYWt1XCA7CivluK3mlpkgPiBzZWtpcnlvdVwgOwor5qyg5Y+3ID4ga2V0c3Vnb3VcIDsKK+eZuuePviA+IGhhdHN1Z2VuXCA7Civnmb7njaMgPiBoeWFrdWp1dVwgOwor5YOa6Ii5ID4gdG9tb2J1bmVcIDsKK+ecn+W/gyA+IG1hZ29rb3JvXCA7CivliofkuK0gPiBnZWtpY2h1dVwgOwor6LmE6YmEID4gdGVpdGV0c3VcIDsKK+WHuuW8tSA+IHNodXRjaG91XCA7Civlg6fogbcgPiBzb3VzaG9rdVwgOwor6YCA5bGIID4gdGFpa3V0c3VcIDsKK+WJjeWTsiA+IHplbnRldHN1XCA7Civlh7rlu6wgPiBzaHV0c3Vyb1wgOwor6YGp5L2cID4gdGVraXNha3VcIDsKK+WGheazlSA+IHVjaGlub3JpXCA7Civlh7rluqYgPiBzaHV0c3Vkb1wgOwor5YqD5LiAID4ga2FrdWl0c3VcIDsKK+i7uOeusSA+IGppa3ViYWtvXCA7Civls6HosLcgPiBreW91a29rdVwgOwor5Ye65bitID4gc2h1c3Nla2lcIDsKK+WIpeWjsiA+IGJldHN1YmFpXCA7CivluJ3ml6UgPiB0ZWlqaXRzdVwgOwor5qeL56+JID4ga291Y2hpa3VcIDsKK+ebruaSgyA+IG1va3VnZWtpXCA7Civou43ogbcgPiBndW5zaG9rdVwgOwor5YiG5bGAID4gYnVua3lva3VcIDsKK+WGrOacjSA+IGZ1eXVmdWt1XCA7CivojLbmnZMgPiBjaGFzaGFrdVwgOwor6a6u54OIID4gc2VucmV0c3VcIDsKK+mrmOiqrCA+IGtvdXNldHN1XCA7CivlhpnmpI0gPiBzaGFzaG9rdVwgOwor5Yil5aCCID4gYmV0c3Vkb3VcIDsKK+WIhuWuvyA+IGJ1bnNodWt1XCA7Civlhajmu4UgPiB6ZW5tZXRzdVwgOwor5bGx6aKoID4geWFtYWthemVcIDsKK+iNieaRuiA+IGt1c2F6dXJpXCA7CivlhYjniakgPiBzYWtpbW9ub1wgOwor55m+54K5ID4gaHlha3V0ZW5cIDsKK+mAhuWkoiA+IHNha2F5dW1lXCA7CivlhYnnhrEgPiBrb3VuZXRzdVwgOwor5YmN5YiXID4gemVucmV0c3VcIDsKK+mAhuWigyA+IGd5YWtreW91XCA7CivnmYfnmaogPiBrYW5zaGFrdVwgOwor6LuN57iuID4gZ3Vuc2h1a3VcIDsKK+murea8gSA+IHNha2VyeW91XCA7CivpgZTkurogPiB0YXRzdWppblwgOwor6Imy57SZID4gc2hpa2lzaGlcIDsKK+eZvea/gSA+IGhha3VkYWt1XCA7CivlhIHnp4AgPiBzaHVuc2h1dVwgOwor5bmF5bqDID4gaGFiYWhpcm9cIDsKK+W5s+WjsCA+IGh5b3VzaG91XCA7CivlsbHpnKcgPiB5YW1hZ2lyaVwgOwor6YC45Ye6ID4gaXNzaHV0c3VcIDsKK+ebl+aSriA+IHRvdXNhdHN1XCA7CivlhaXmtbQgPiBueXV1eW9rdVwgOwor5qyg5L6/ID4ga2V0c3ViaW5cIDsKK+i7veefsyA+IGthcnVpc2hpXCA7CivliIflprsgPiBraXJpenVtYVwgOwor5be75pyrID4ga2FubWF0c3VcIDsKK+mAmuWVhiA+IHRzdXVzaG91XCA7Civot53pqqggPiBreW9rb3RzdVwgOwor5YWl5rSlID4gbnl1dXNoaW5cIDsKK+eUn+mmliA+IG5hbWFrdWJpXCA7CivlhaXmtJsgPiBueXV1cmFrdVwgOwor55u05oOFID4gY2hva3Vqb3VcIDsKK+WHtuWuhSA+IGt5b3V0YWt1XCA7CivlsbHpmpsgPiB5YW1hZ2l3YVwgOwor5bqt5YWIID4gbml3YXNha2lcIDsKK+WxsemZsCA+IHlhbWFrYWdlXCA7CivliYPliIAgPiBrYW1pc29yaVwgOwor5qiq5rOiID4geW9rb25hbWlcIDsKK+edgOWcsCA+IGNoYWt1Y2hpXCA7Civnm5fmjpggPiB0b3VrdXRzdVwgOwor55yB5bqBID4gc2hvdWNob3VcIDsKK+eVmemHkSA+IHRvbWVnYW5lXCA7CivmqYvmooEgPiBreW91cnlvdVwgOwor55S66ZW3ID4gY2hvdWNob3VcIDsKK+WxnumgmCA+IHpva3VyeW91XCA7CivpgJrlkYogPiB0c3V1a29rdVwgOwor5YmN5YCfID4gemVuc2hha3VcIDsKK+asoOS5jyA+IGtldHN1Ym91XCA7CivmpbXoh7QgPiBreW9rdWNoaVwgOwor5Yil5ZG9ID4gYmV0c3VtZWlcIDsKK+iJr+etliA+IHJ5b3VzYWt1XCA7CivnlJjpo58gPiBhbWFzaG9rdVwgOwor5YaF5p6gID4gdWNoaXdha3VcIDsKK+WIpeWQjSA+IGJldHN1bWVpXCA7CivmqYvmna0gPiBoYXNoaWd1aVwgOwor5Yil5Y+3ID4gYmV0c3Vnb3VcIDsKK+api+admSA+IGhhc2hpZ3VpXCA7CivlgJ/piq0gPiBzaGFrdXNlblwgOwor55yJ5bC7ID4gbWF5dWppcmlcIDsKK+ecn+WmgiA+IHNoaW4nJ255b1wgOwor6Iul5rC0ID4gd2FrYW1penVcIDsKK+mAmuWKmyA+IHRzdXVyaWtpXCA7CivlupflhYggPiBtaXNlc2FraVwgOwor55WU6YGTID4gYXplbWljaGlcIDsKK+iLpeauvyA+IHdha2F0b25vXCA7CivpgJrliYcgPiB0c3V1c29rdVwgOwor5Yid5Y+jID4gc2hva3VjaGlcIDsKK+aoveafvyA+IHRhcnVnYWtpXCA7Civoh63oppogPiBzaHV1a2FrdVwgOwor6YCx5LyRID4gc2h1dWt5dXVcIDsKK+ecgeWvnyA+IHNlaXNhdHN1XCA7CivmqKrmp5ggPiB5b2tvemFtYVwgOwor5qiq5qeNID4geW9rb3lhcmlcIDsKK+WGt+W+uSA+IHJlaXRldHN1XCA7CivnnaPkv4MgPiB0b2t1c29rdVwgOwor5Yik5YilID4gaGFuYmV0c3VcIDsKK+iKs+eDiCA+IGhvdXJldHN1XCA7CivluLjlrqIgPiBqb3VreWFrdVwgOwor5biz5bC7ID4gY2hvdWppcmlcIDsKK+WHuuWcnyA+IHNodXRzdWRvXCA7Civoi5fmsLQgPiBuYXdhbWl6dVwgOwor5YWI5rG6ID4gc2Vua2V0c3VcIDsKK+i7veeOhyA+IGtlaXNvdHN1XCA7CivlsbHpib4gPiB5YW1hYm9rb1wgOwor6auE6JmrID4genVpbXVzaGlcIDsKK+eahuanmCA+IG1pbmFzYW1hXCA7CivliKXlhowgPiBiZXNzYXRzdVwgOwor5Yil5YaKID4gYmVzc2F0c3VcIDsKK+W4t+WtkCA+IGthdGFiaXJhXCA7CivojYnluIIgPiBrdXNhaWNoaVwgOwor55m95qqAID4gYnlha3VkYW5cIDsKK+iLpeanmCA+IHdha2FzYW1hXCA7Civnm7TlsIQgPiBjaG9rdXNoYVwgOwor5bGx6YeMID4geWFtYXphdG9cIDsKK+mAgOWNtCA+IHRhaWt5YWt1XCA7Civov73lj4ogPiB0c3Vpa3l1dVwgOwor5qeN546JID4geWFyaWRhbWFcIDsKK+eUsumJhCA+IGtvdXRldHN1XCA7CivlsYDpnaIgPiBreW9rdW1lblwgOwor6YCa5L+hID4gdHN1dXNoaW5cIDsKK+altee3miA+IGt5b2t1c2VuXCA7CivpgJrkv5cgPiB0c3V1em9rdVwgOwor6Ii557iBID4gZnVuYWJlcmlcIDsKK+eak+aciCA+IGtvdWdldHN1XCA7CivoibLnm7ggPiBzaGlraXNvdVwgOwor6Imy55uyID4gc2hpa2ltb3VcIDsKK+ecieWiqCA+IG1heXV6dW1pXCA7CivlhoXmjqUgPiBuYWlzZXRzdVwgOwor5be05oimID4gdG9tb2VzZW5cIDsKK+WFqOabsiA+IHplbmt5b2t1XCA7CivlvpDjgIUgPiBzb3Jvc29yb1wgOwor6Lu454mpID4gamlrdW1vbm9cIDsKK+alree4viA+IGd5b3VzZWtpXCA7CivlhaXmnKggPiBueXV1Ym9rdVwgOwor55m75qW1ID4gdG91a3lva3VcIDsKK+altee0sCA+IGdva3Vib3NvXCA7CivlhaXmnJ0gPiBueXV1Y2hvdVwgOwor6YCB5YilID4gc291YmV0c3VcIDsKK+i2s+mmliA+IGFzaGlrdWJpXCA7CivlhbzmkYIgPiBrZW5zZXRzdVwgOwor5Yil5L6/ID4gYmV0c3ViaW5cIDsKK+W5tOWIpSA+IG5lbmJldHN1XCA7CivlsYDpmZAgPiBreW9rdWdlblwgOwor55Sf6YyyID4gbmFtYXJva3VcIDsKK+W3p+aLmSA+IGtvdXNldHN1XCA7Civnmb3mooUgPiBzaGlyYXVtZVwgOwor6IeG6KqsID4gb2t1c2V0c3VcIDsKK+WFiOanmCA+IHNha2lzYW1hXCA7Civlhajml6UgPiB6ZW5qaXRzdVwgOwor5biD5byVID4gbnVub2Jpa2lcIDsKK+ebo+WvnyA+IGthbnNhdHN1XCA7CivliIblipsgPiBidW5yeW9rdVwgOwor5YKN6ICzID4ga2F0YW1pbWlcIDsKK+eVpeiogCA+IHJ5YWt1Z2VuXCA7CivliKXkurogPiBiZXRzdW5pblwgOwor5YiG5YmyID4gYnVua2F0c3VcIDsKK+Wwj+mtmiA+IGtvemFrYW5hXCA7Civlt6bmiYsgPiBoaWRhcml0ZVwgOwor6Imy55S6ID4gaXJvbWFjaGlcIDsKK+iJsueUtyA+IGlyb290b2tvXCA7Civmpb3nq6AgPiBnYWt1c2hvdVwgOwor5YiG5YilID4gYnVuYmV0c3VcIDsKK+WIhuWIlyA+IGJ1bnJldHN1XCA7CivprLHnl4UgPiB1dHN1YnlvdVwgOwor6YCG5L+uID4gZ3lha3VzaHVcIDsKK+ebtOWjsiA+IGNob2t1YmFpXCA7CivlgJ/osrggPiBzaGFrdXRhaVwgOwor5YCf6LKhID4gc2hha3V6YWlcIDsKK+WGrOWxsSA+IGZ1eXV5YW1hXCA7CivliIblhoogPiBidW5zYXRzdVwgOwor6LuN55WlID4gZ3Vucnlha3VcIDsKK+eUqOmBlCA+IHlvdXRhdHN1XCA7CivojZLlpLcgPiBhcmFlYmlzdVwgOwor5qW156uvID4ga3lva3V0YW5cIDsKK+ecn+WNlyA+IG1hbWluYW1pXCA7CivnlaXoo4UgPiByeWFrdXNvdVwgOwor5YiX5LydID4gcmV0c3VkZW5cIDsKK+WFseaMryA+IGt5b3VzaGluXCA7CivoiLnnq68gPiBmdW5hYmF0YVwgOwor6a+o5bqnID4ga3VqaXJhemFcIDsKK+edgOS7uyA+IGNoYWt1bmluXCA7CivovrvloIIgPiB0c3VqaWRvdVwgOwor5L+66YGUID4gb3JldGFjaGlcIDsKK+ecn+WLhyA+IHNoaW4nJ3l1dVwgOwor5YKY57SZID4ga2FzYWdhbWlcIDsKK+eZveaYvCA+IGhha3VjaHV1XCA7Civnl7znlr4gPiBrb3NoaXRzdVwgOwor5Ye65YemID4gZGVkb2tvcm9cIDsKK+WBveiAhSA+IG5pc2Vtb25vXCA7CivlhYvmnI0gPiBrb2t1ZnVrdVwgOwor55S76LOqID4gZ2FzaGl0c3VcIDsKK+i3s+i6jSA+IGNob3V5YWt1XCA7Civov73kvLggPiB0c3Vpc2hpblwgOwor55m65piOID4gaGF0c3VtZWlcIDsKK+mAhuS4iiA+IGd5YWt1am91XCA7CivlhYjmnIggPiBzZW5nZXRzdVwgOwor5bmz5LuEID4gaHlvdXNva3VcIDsKK+WGhuW9oiA+IG1hcnVnYXRhXCA7CivlsJHpoY0gPiBzaG91Z2FrdVwgOwor6L+U5Y20ID4gaGVua3lha3VcIDsKK+Wwj+mhjSA+IHNob3VnYWt1XCA7Civlh7blhYYgPiBreW91Y2hvdVwgOwor6amA6YCyID4gYmFrdXNoaW5cIDsKK+alk+ezliA+IGthZWRldG91XCA7CivluZXlhoUgPiBtYWt1dWNoaVwgOwor5be75bC6ID4gbWFraWpha3VcIDsKK+WFiOaXpSA+IHNlbmppdHN1XCA7CivlgJ/opqcgPiBzaGFrdXJhblwgOwor6aeS6bOlID4ga29tYWRvcmlcIDsKK+WBpeiEmiA+IGtlbmt5YWt1XCA7CivluZXlg5ogPiBiYWt1cnlvdVwgOwor5YaZ5a6fID4gc2hhaml0c3VcIDsKK+WFg+aXpSA+IGdhbmppdHN1XCA7Civnmb3mj48gPiBoYWt1YnlvdVwgOwor5bC76YeNID4gc2hpcmlvbW9cIDsKK+iEm+mqqCA+IGtlaWtvdHN1XCA7CivlhYPmlrkgPiBtb3Rva2F0YVwgOwor55m65o+aID4gaGF0c3V5b3VcIDsKK+iMtuWjuiA+IGNoYXRzdWJvXCA7Civkv67ouqsgPiBzaHV1c2hpblwgOwor55m65o6YID4gaGFra3V0c3VcIDsKK+W3neW6lSA+IGthd2F6b2tvXCA7Civlt53luoogPiBrYXdhZG9rb1wgOwor5Ye25L2cID4ga3lvdXNha3VcIDsKK+amgueVpSA+IGdhaXJ5YWt1XCA7Civlt53luYUgPiBrYXdhaGFiYVwgOwor5Ye65LqsID4gc2h1a2t5b3VcIDsKK+WCt+eXhSA+IHNob3VieW91XCA7CivmpI7ojLggPiBzaGlpdGFrZVwgOwor5bee5beeID4gc2h1dXNodXVcIDsKK+WBnOiBtyA+IHRlaXNob2t1XCA7CivkvpHpo58gPiB5dXVzaG9rdVwgOwor5YaF5bGAID4gbmFpa3lva3VcIDsKK+eUt+imqiA+IG90b2tvb3lhXCA7Civlh5vlhr0gPiByaW5yZXRzdVwgOwor6Iqx5p+EID4gaGFuYWdhcmFcIDsKK+WFrOW8jyA+IGtvdXNoaWtpXCA7CivlsbHopZ4gPiB5YW1haGlkYVwgOwor6L675Y2gID4gdHN1aml1cmFcIDsKK+anmOanmCA+IHNhbWF6YW1hXCA7CivnnJ/kuK0gPiBtYW4nJ25ha2FcIDsKK+WGheWvhiA+IG5haW1pdHN1XCA7CivoirHmnZ8gPiBoYW5hdGFiYVwgOwor5YaF5a6fID4gbmFpaml0c3VcIDsKK+WFseW4gyA+IHRvbW9udW5vXCA7CivlsbHoo74gPiB5YW1hc3Vzb1wgOwor6auY56m6ID4gdGFrYXpvcmFcIDsKK+iKseacrSA+IGhhbmFmdWRhXCA7Civnmb7mhYsgPiBoeWFrdXRhaVwgOwor55eU55a+ID4gamlzaGl0c3VcIDsKK+WFq+W5oSA+IGhhY2hpbWFuXCA7Civlt6Hlr58gPiBqdW5zYXRzdVwgOwor6Lu95qWtID4ga2FydXdhemFcIDsKK+W3neWwuyA+IGthd2FqaXJpXCA7Civnm7TliY0gPiBjaG9rdXplblwgOwor5qOS6KGTID4gYm91anV0c3VcIDsKK+iNieWPoiA+IGt1c2FtdXJhXCA7CivoirHmmYIgPiBoYW5hZG9raVwgOwor5YWl5bmVID4gbnl1dW1ha3VcIDsKK+ebtOWIgCA+IGNob2t1dG91XCA7Civnmbrmg4UgPiBoYXRzdWpvdVwgOwor5L+z6KyUID4gaGFpZ3lha3VcIDsKK+WyqeiEiCA+IGdhbm15YWt1XCA7CivluLPlhYMgPiBjaG91bW90b1wgOwor55eF55qEID4gYnlvdXRla2lcIDsKK+aoquW5hSA+IHlva29oYWJhXCA7Civnl4XnmZYgPiBieW91aGVraVwgOwor6IO46auYID4gbXVuYWRha2FcIDsKK+S/g+mAsiA+IHNva3VzaGluXCA7CivmqJnlvrQgPiBoeW91Y2hvdVwgOwor55eF55eHID4gYnlvdXNob3VcIDsKK+WGt+WNtCA+IHJlaWt5YWt1XCA7Civoho/ooYAgPiBrb3VrZXRzdVwgOwor5YK354mpID4ga2l6dW1vbm9cIDsKK+eZvuW8iiA+IGh5YWt1aGVpXCA7Civlh53kubMgPiBneW91bnl1dVwgOwor55Wc6IiOID4gY2hpa3VzaGFcIDsKK+WFseWtpiA+IGt5b3VnYWt1XCA7CivlhoXlo5UgPiB1Y2hpYm9yaVwgOwor5bCR6YePID4gc2hvdXJ5b3VcIDsKK+WFqOWxgCA+IHplbmt5b2t1XCA7CivlhYvlvqkgPiBrb2t1ZnVrdVwgOwor55m+5bm0ID4gaHlha3VuZW5cIDsKK+i2s+i7vSA+IGFzaGlnYXJ1XCA7CivlsI/ph48gPiBzaG91cnlvdVwgOwor5YGl562GID4ga2VucGl0c3VcIDsKK+WvkumkhSA+IGthbm1vY2hpXCA7Civlr67plbcgPiByeW91Y2hvdVwgOwor5YWI5b25ID4gc2VuJyd5YWt1XCA7Civkv4rotrMgPiBzaHVuc29rdVwgOwor5YaF5aCAID4gdWNoaWJvcmlcIDsKK+WFpeWvgiA+IG55dXVqYWt1XCA7Civoh6PnsY0gPiBzaGluc2VraVwgOwor5L+h6KqNID4gc2hpbicnbmluXCA7CivlhoblnosgPiBtYXJ1Z2F0YVwgOwor6L6b5YudID4gc2hpbnNob3VcIDsKK+WFpeWtpiA+IG55dXVnYWt1XCA7Civmpa3niakgPiB3YXphbW9ub1wgOwor6LWk6Z20ID4gYWthZ3V0c3VcIDsKK+i2s+i3oSA+IHNva3VzZWtpXCA7Civkv6HoqLwgPiBzaGluc2hvdVwgOwor5bee5aKDID4gc2h1dWt5b3VcIDsKK+S/oeiolyA+IHNoaW50YWt1XCA7Civlrr/pp4UgPiBzaHVrdWVraVwgOwor5qW154K5ID4ga3lva3V0ZW5cIDsKK+S/l+iqvyA+IHpva3VjaG91XCA7CivoiIznmYwgPiB6ZXRzdWdhblwgOwor55u05LitID4gdGFkYW5ha2FcIDsKK+iKseaIvyA+IGhhbmFmdXNhXCA7Civnm7TkuIogPiBjaG9rdWpvdVwgOwor55ar55eFID4geWFrdWJ5b3VcIDsKK+iLpeWuriA+IHdha2FtaXlhXCA7CivlhYPluLMgPiBtb3RvY2hvdVwgOwor5a+b6ZeKID4ga2Fua2F0c3VcIDsKK+WvuOmJhCA+IHN1bnRldHN1XCA7Civnmb7lrrMgPiBoeWFrdWdhaVwgOwor5YG255m6ID4gZ3V1aGF0c3VcIDsKK+Wwj+i6qyA+IHNob3VzaGluXCA7Civlrr/poZggPiBzaHVrdWdhblwgOwor55Sf6JasID4gc2hvdXlha3VcIDsKK+Wuv+mhjCA+IHNodWt1ZGFpXCA7Civnk7boqbAgPiBiaW5kenVtZVwgOwor5YGP56qfID4gaGVua3V0c3VcIDsKK+WFiOWxsSA+IHNha2l5YW1hXCA7CivnlLfoibIgPiBuYW5zaG9rdVwgOwor6ISx6LyqID4gZGF0c3VyaW5cIDsKK+i5tOeQgyA+IHNodXVreXV1XCA7CivlgLnntIQgPiBrZW4nJ3lha3VcIDsKK+iNieS4iCA+IGt1c2F0YWtlXCA7CivlhaXlob4gPiBueXV1anVrdVwgOwor6auY546HID4ga291cml0c3VcIDsKK+mnv+i2syA+IHNodW5zb2t1XCA7CivlhKrlvaIgPiB5YXNhZ2F0YVwgOwor5YWI5a6iID4gc2Vua3lha3VcIDsKK+eWteeJqSA+IGtpenVtb25vXCA7Civkv5fooYYgPiB6b2t1c2h1dVwgOwor5bGx6IaaID4geWFtYWhhZGFcIDsKK+amleaouSA+IGdhanVtYXJ1XCA7CivlhYjlrokgPiBzYWtpeWFzdVwgOwor6aas6Z2iID4gdW1hZHp1cmFcIDsKK+ebl+S8kCA+IHRvdWJhdHN1XCA7Civnmb7lp5MgPiBoeWFrdXNlaVwgOwor5bKp56qfID4gZ2Fua3V0c3VcIDsKK+attOOAhSA+IHJla2lyZWtpXCA7CivlhYXlrp8gPiBqdXVqaXRzdVwgOwor6Iqx5b2iID4gaGFuYWdhdGFcIDsKK+ebl+S6uiA+IG51c3ViaXRvXCA7Civnmb3lppkgPiBzaGlyb3RhZVwgOwor5bGx6ISIID4geWFtYW5hbWlcIDsKK+iKseW8gSA+IGhhbmFiaXJhXCA7CivlsbHogowgPiB5YW1haGFkYVwgOwor5YWl5Zu9ID4gbnl1dWtva3VcIDsKK+altea0iyA+IGt5b2t1eW91XCA7Civnmb3lo4EgPiBoYWt1aGVraVwgOwor6auY54axID4ga291bmV0c3VcIDsKK+eZveWiqCA+IGhha3Vib2t1XCA7Civnmbrlo7IgPiBoYXRzdWJhaVwgOwor5YaF5YqbID4gbmFpcnlva3VcIDsKK+i1pOmKhSA+IHNoYWt1ZG91XCA7Civlgb3niakgPiBuaXNlbW9ub1wgOwor55qu5YmlID4ga2F3YWhhZ2lcIDsKK+W3qOWIuSA+IGt5b3NhdHN1XCA7Civpqqjnm6QgPiBrb3RzdWJhblwgOwor6a+J5Y+jID4ga29pZ3VjaGlcIDsKK+eUn+iJsiA+IHNlaXNob2t1XCA7CivlhYjlpKogPiBzYWtpYnV0b1wgOwor6LaF6LaKID4gY2hvdWV0c3VcIDsKK+WumumjnyA+IHRlaXNob2t1XCA7CivlhbXljZIgPiBoZWlzb3RzdVwgOwor5qeY5byPID4geW91c2hpa2lcIDsKK+S8tOmjnyA+IGJhbnNob2t1XCA7CivlhbXlipsgPiBoZWlyeW9rdVwgOwor5qW95qW9ID4gcmFrdXJha3VcIDsKK+mrmOa9riA+IHRha2FzaGlvXCA7CivlhoXlgbQgPiB1Y2hpZ2F3YVwgOwor6ISF6L+rID4ga3lvdWhha3VcIDsKK+mrmOa9lCA+IGtvdWtldHN1XCA7CivohbnohpwgPiBmdWt1bWFrdVwgOwor5YaF5YCJID4gdWNoaWd1cmFcIDsKK+iKseWuiCA+IGhhbmFtb3JpXCA7Civog7jpg60gPiBreW91a2FrdVwgOwor5YW25YW2ID4gc29yZXpvcmVcIDsKK+eXheavkiA+IGJ5b3Vkb2t1XCA7CivmpbXmpb0gPiBnb2t1cmFrdVwgOwor5qW15qW1ID4gZ29rdWdva3VcIDsKK+eXheattCA+IGJ5b3VyZWtpXCA7CivoirHlq4EgPiBoYW5heW9tZVwgOwor5YWo5YqbID4gemVucnlva3VcIDsKK+WFseWFsSA+IHRvbW9kb21vXCA7CivoirHlqb8gPiBoYW5hbXVrb1wgOwor6LSL6aaWID4gbmlzZWt1YmlcIDsKK+S+m+iolyA+IGt5b3V0YWt1XCA7Civoi6XlkJsgPiB3YWthZ2ltaVwgOwor5bGA6IiOID4ga3lva3VzaGFcIDsKK+W3nuS/lyA+IHNodXV6b2t1XCA7Civkv6HohbkgPiBzaGlucHVrdVwgOwor5qSN55SfID4gc2hva3VzZWlcIDsKK+aoqeWKmyA+IGtlbnJ5b2t1XCA7CivlhKrlpbMgPiB5YXNhb24nJ2FcIDsKK+eUu+etliA+IGtha3VzYWt1XCA7Civmn5Ppq6ogPiBzZW5wYXRzdVwgOwor5a6/6YWUID4gc2h1a3VzdWlcIDsKK+i1q+i1qyA+IGtha3VrYWt1XCA7CivkvLjplbcgPiBzaGluY2hvdVwgOwor5a+G6YCgID4gbWl0c3V6b3VcIDsKK+alveabsiA+IGdha2t5b2t1XCA7Civpq5jms6IgPiB0YWthbmFtaVwgOwor5Lya6aOfID4ga2Fpc2hva3VcIDsKK+WAkueriyA+IHRvdXJpdHN1XCA7Civkv5foh60gPiB6b2t1c2h1dVwgOwor6Imy5oSfID4gc2hpa2lrYW5cIDsKK+W3puS4iiA+IGhpZGFyaXVlXCA7CivlhYjlk7IgPiBzZW50ZXRzdVwgOwor5qW15p2xID4ga3lva3V0b3VcIDsKK+iJsuaDhSA+IHNoaWtpam91XCA7CivprZrlsYsgPiBzYWthbmF5YVwgOwor6Lez566xID4gdG9iaWJha29cIDsKK+i7n+W8jyA+IG5hbnNoaWtpXCA7Civpq5jmrr8gPiB0YWthZG9ub1wgOwor5YGP54mHID4ga2F0YWhhcmFcIDsKK+W3neS4iiA+IGthd2FrYW1pXCA7CivlsbHnqIsgPiB5YW1haG9kb1wgOwor55m65YuVID4gaGF0c3Vkb3VcIDsKK+WFiOWPoyA+IHNlbmt1Y2hpXCA7CivogovpqqggPiByb2trb3RzdVwgOwor55Wc55SjID4gY2hpa3VzYW5cIDsKK+iJsuW9qSA+IHNoaWtpc2FpXCA7Civoia/lv4MgPiByeW91c2hpblwgOwor55Sf57GzID4gbmFtYWdvbWVcIDsKK+eUqOethiA+IHlvdWhpdHN1XCA7CivlhaXkv6EgPiBueXV1c2hpblwgOwor6IeT54mpID4gem91bW90c3VcIDsKK+S/l+e/kiA+IHpva3VzaHV1XCA7CivpgZnjgIUgPiBoYXJ1YmFydVwgOwor6aqo54GwID4ga290c3ViYWlcIDsKK+iIueaXhSA+IGZ1bmF0YWJpXCA7CivoiLnmlrkgPiBmdW5ha2F0YVwgOwor6Iqx5ZySID4gaGFuYXpvbm9cIDsKK+WFpeS8uCA+IG55dXVzaGluXCA7CivlhYnlipsgPiBrb3VyeW9rdVwgOwor6LuN5b6LID4gZ3Vucml0c3VcIDsKK+i7jeW9uSA+IGd1bicneWFrdVwgOwor55m+5YSEID4gaHlha3Vva3VcIDsKK+WxkeexoCA+IGt1enVrYWdvXCA7Civnl5vmkoMgPiB0c3V1Z2VraVwgOwor5YWo5LmzID4gemVuJydueXV1XCA7CivmoLzoqr8gPiBrYWt1Y2hvdVwgOwor5YWl5LqsID4gbnl1dWt5b3VcIDsKK+i8uOWHuiA+IHl1c2h1dHN1XCA7CivmpoLmi6wgPiBnYWlrYXRzdVwgOwor6Iag552AID4ga291Y2hha3VcIDsKK+S/oee1jCA+IHNoaW5reW91XCA7CivkvbXoqK0gPiBoZWlzZXRzdVwgOwor55m+5YCNID4gaHlha3ViYWlcIDsKK+i7iuW6pyA+IGt1cnVtYXphXCA7CivlhYjlhaUgPiBzZW4nJ255dXVcIDsKK+aoquS4gSA+IHlva29jaG91XCA7CivlgJ/nlKggPiBzaGFrdXlvdVwgOwor5a6/6LODID4geWFkb2NoaW5cIDsKK+eVnOeKrCA+IGNoaWt1a2VuXCA7Civlgo3mnZYgPiBzb2JhZHp1ZVwgOwor5YWD5YWDID4gbW90b21vdG9cIDsKK+WvneiiiyA+IG5lYnVrdXJvXCA7Civoip3lnLAgPiBzaGliYWNoaVwgOwor55qE5LitID4gdGVraWNodXVcIDsKK+Wwsee4myA+IHNodXViYWt1XCA7Civlr4borIAgPiBtaXRzdWJvdVwgOwor5a+G6KuHID4gbWl0c3VkYW5cIDsKK+eZuuS7pCA+IGhhdHN1cmVpXCA7Civoia/lsIYgPiByeW91c2hvdVwgOwor5a6i6LuKID4ga3lha3VzaGFcIDsKK+iEseiJsiA+IGRhc3Nob2t1XCA7Civnmb7kuJYgPiBoeWFrdXNlaVwgOwor6auY5pytID4ga291c2F0c3VcIDsKK+eZvuS4hyA+IGh5YWt1bWFuXCA7CivlsI/ohbggPiBzaG91Y2hvdVwgOwor5LuZ6aqoID4gc2Vua290c3VcIDsKK+WuiemFkiA+IHlhc3V6YWtlXCA7Civlg7vlooMgPiBoZWtpa3lvdVwgOwor5a2m6ZW3ID4gZ2FrdWNob3VcIDsKK+i7iuWxiyA+IGt1cnVtYXlhXCA7CivlhKrliqMgPiB5dXVyZXRzdVwgOwor6Lqr5b+DID4gc2hpbnNoaW5cIDsKK+eXm+aDnCA+IHRzdXVzZWtpXCA7Civlgb3mnK0gPiBuaXNlZnVkYVwgOwor6LSL6YeRID4gbmlzZWdhbmVcIDsKK+WAn+eJqSA+IGthcmltb25vXCA7CivluqbjgIUgPiB0YWJpdGFiaVwgOwor6LWk6JuZID4gYWthZ2FlcnVcIDsKK+WCt+W/gyA+IHNob3VzaGluXCA7Civku5jppqwgPiB0c3VrZXVtYVwgOwor6LWk6JmrID4gYWthbXVzaGlcIDsKK+S9l+iogCA+IHdhYmlnb3RvXCA7CivnlJ/nmq4gPiBuYW1ha2F3YVwgOwor5YG05p2WID4gc29iYWR6dWVcIDsKK+alteaApyA+IGt5b2t1c2VpXCA7Civnl5vlv4MgPiB0c3V1c2hpblwgOwor6Imy5aWzID4gaXJvb24nJ25hXCA7CivovKrkvJAgPiByaW5iYXRzdVwgOwor5YCN546HID4gYmFpcml0c3VcIDsKK+S/l+ensCA+IHpva3VzaG91XCA7CivlsbHnjL8gPiB5YW1hemFydVwgOwor5bGx54yrID4geWFtYW5la29cIDsKK+S8nemBlCA+IGRlbnRhdHN1XCA7CivmpI3msJEgPiBzaG9rdW1pblwgOwor5a+16IejID4gY2hvdXNoaW5cIDsKK+akjeavmyA+IHNob2t1bW91XCA7CivogonpjYsgPiBuaWt1bmFiZVwgOwor55S354i1ID4gZGFuc2hha3VcIDsKK+S6uumtgiA+IGhpdG9kYW1hXCA7Civohbnnl5sgPiBmdWt1dHN1dVwgOwor6Ii55bqVID4gZnVuYXpva29cIDsKK+iIueW6iiA+IGZ1bmFkb2tvXCA7Civpp4bokL0gPiBrYWtlb2NoaVwgOwor5qW15biMID4gZ29rdW1hcmVcIDsKK+S/iuengCA+IHNodW5zaHV1XCA7CivkurrpqqggPiBqaW5rb3RzdVwgOwor5bCP57WQID4ga29tdXN1YmlcIDsKK+Wun+iqrCA+IGppc3NldHN1XCA7CivlsaXniakgPiBoYWtpbW9ub1wgOwor55eF5b60ID4gYnlvdWNob3VcIDsKK+WumuiqrCA+IHRlaXNldHN1XCA7Civoh6jmnIggPiByaW5nZXRzdVwgOwor55eF5byxID4gYnlvdWpha3VcIDsKK+W6g+OAhSA+IGhpcm9iaXJvXCA7CivpqqjmnZAgPiBrb3RzdXphaVwgOwor55Sj54mpID4gc2FuYnV0c3VcIDsKK+WumOiorSA+IGthbnNldHN1XCA7CivmpJzmnK0gPiBrZW5zYXRzdVwgOwor6Iej5pyNID4gc2hpbnB1a3VcIDsKK+iyqumjnyA+IGRvbnNob2t1XCA7Civnl4XluoogPiBieW91c2hvdVwgOwor5L+h55SoID4gc2hpbicneW91XCA7CivohIfohbkgPiB3YWtpYmFyYVwgOwor55Sf54mpID4gbmFtYW1vbm9cIDsKK+S+m+e1piA+IGt5b3VreXV1XCA7CivlsYDnlaogPiBreW9rdWJhblwgOwor5bCP562WID4gc2hvdXNha3VcIDsKK+anjeWFiCA+IHlhcmlzYWtpXCA7Civnl7Dlo7ogPiB0YW50c3Vib1wgOwor6auq5bqKID4ga2FtaWRva29cIDsKK+WvkuiJsiA+IGthbnNob2t1XCA7CivmpI3moL0gPiBzaG9rdXNhaVwgOwor5LyR6LazID4ga3l1dXNva3VcIDsKK+iIueWuvyA+IGZ1bmF5YWRvXCA7Civku4/ploAgPiBidXRzdW1vblwgOwor6Ii55a6iID4gc2Vua3lha3VcIDsKK+WCjeW9uSA+IHdha2l5YWt1XCA7Civogonov6sgPiBuaWt1aGFrdVwgOwor5qC46IacID4ga2FrdW1ha3VcIDsKK+S6oemquCA+IG5ha2lnYXJhXCA7Civoh5jmnIggPiByb3VnZXRzdVwgOwor5qSN5p6XID4gc2hva3VyaW5cIDsKK+WujOiosyA+IGthbicneWFrdVwgOwor6IO46IacID4ga3lvdW1ha3VcIDsKK+mjvemjnyA+IGhvdXNob2t1XCA7Civkv67nhp8gPiBzaHV1anVrdVwgOwor5a6F6Ki6ID4gdGFrdXNoaW5cIDsKK+Wwj+emhCA+IHNob3Vyb2t1XCA7CivkvJ3oqqwgPiBkZW5zZXRzdVwgOwor6Laz55mWID4gYXNoaWt1c2VcIDsKK+iEseeojiA+IGRhdHN1emVpXCA7Civkuqzpn78gPiBreW91a3lvdVwgOwor6Lui5YWlID4gdGVuJydueXV1XCA7Civlr77nq4sgPiB0YWlyaXRzdVwgOwor6IWr54mpID4gc2h1bW90c3VcIDsKK+alteWkpyA+IGt5b2t1ZGFpXCA7CivnlaXmm7ggPiByeWFrdXNob1wgOwor5a6/6IiOID4gc2h1a3VzaGFcIDsKK+i7jeWNkiA+IGd1bnNvdHN1XCA7Civls7Dls7AgPiBtaW5lbWluZVwgOwor5a656ImyID4geW91c2hva3VcIDsKK+S7i+mMryA+IGthaXNoYWt1XCA7Civmo67mo64gPiBzaGluc2hpblwgOwor5bWM5YWlID4ga2FuJydueXV1XCA7Civou5LliKUgPiBrZW5iZXRzdVwgOwor5YG05b25ID4gc29iYXlha3VcIDsKK+i7ouWAnyA+IHRlbnNoYWt1XCA7CivohIrntKIgPiBzZWtpc2FrdVwgOwor5LyR6Ki6ID4ga3l1dXNoaW5cIDsKK+iyoemWpSA+IHphaWJhdHN1XCA7CivnkrDnr4AgPiBrYW5zZXRzdVwgOwor5pyo6bygID4ga2luZXp1bWlcIDsKK+mqqOaKmCA+IGtvc3NldHN1XCA7CivohJrnq4sgPiBreWF0YXRzdVwgOwor5YO75LqLID4gaGlnYWdvdG9cIDsKK+eVpeaWhyA+IHJ5YWt1YnVuXCA7Civou5LlhYggPiBub2tpc2FraVwgOwor5qC557W2ID4ga29uemV0c3VcIDsKK+alteWcsCA+IGt5b2t1Y2hpXCA7Civmnp3pgZMgPiBlZGFtaWNoaVwgOwor5a6/6ICBID4gc2h1a3Vyb3VcIDsKK+S9v+evgCA+IHNoaXNldHN1XCA7Civosrjph5EgPiBrYXNoaWtpblwgOwor6auY5a+fID4ga291c2F0c3VcIDsKK+WAkuanmCA+IHNha2FzYW1hXCA7CivnlJ/mtLsgPiBzZWlrYXRzdVwgOwor6auY5a+GID4ga291bWl0c3VcIDsKK+S7j+mBkyA+IGJ1dHN1ZG91XCA7CivkvZXogIUgPiBuYW5pbW9ub1wgOwor6Imv5L+XID4gcnlvdXpva3VcIDsKK+S9j+iBtyA+IGp1dXNob2t1XCA7Civmn5TooZMgPiBqdXVqdXRzdVwgOwor55Sf5rC0ID4gbmFtYW1penVcIDsKK+iDuOezniA+IG11bmVrdXNvXCA7CivlrqLoiLkgPiBreWFrdXNlblwgOwor6ICQ6aOfID4gdGFpc2hva3VcIDsKK+iAgemqqCA+IHJvdWtvdHN1XCA7CivmnpXovrogPiBtYWt1cmFiZVwgOwor5bCk54mpID4geXV1YnV0c3VcIDsKK+WuouiIjiA+IGt5YWt1c2hhXCA7CivkubHpq6ogPiByYW5wYXRzdVwgOwor5L2T572wID4gdGFpYmF0c3VcIDsKK+eXm+WTrSA+IHRzdXVrb2t1XCA7CivnlJ/mrpYgPiBzZWlzaG9rdVwgOwor5Lq66YeMID4gaGl0b3phdG9cIDsKK+WuouiGsyA+IGt5YWt1emVuXCA7CivogonopqogPiBuaWt1c2hpblwgOwor5a+M57GkID4gdG9taWt1amlcIDsKK+WBteWvnyA+IHRlaXNhdHN1XCA7Civog73nrYYgPiBub3VoaXRzdVwgOwor5Lm+6aKoID4ga2FyYWthemVcIDsKK+mrquWeiyA+IGthbWlnYXRhXCA7Civoia/kuYUgPiByeW91a3l1dVwgOwor5p2R6ZuoID4gbXVyYXNhbWVcIDsKK+i7kuS4piA+IG5va2luYW1pXCA7Civou5LkuIggPiBub2tpdGFrZVwgOwor5a+S56u5ID4ga2FuY2hpa3VcIDsKK+aciOm9oiA+IGdldHN1cmVpXCA7Civmpb3ljKAgPiBnYWt1c2hvdVwgOwor5qW95YudID4gcmFrdXNob3VcIDsKK+i3s+aigSA+IGNob3VyeW91XCA7Civlr5LnqbogPiBzYW11em9yYVwgOwor5Luw6KeSID4gZ3lvdWtha3VcIDsKK+alveWKhyA+IGdha3VnZWtpXCA7Civpo4Tpo4QgPiBoeW91aHlvdVwgOwor5pyo6aqoID4gbW9ra290c3VcIDsKK+S+r+eItSA+IGtvdXNoYWt1XCA7Civnjonpq4QgPiBneW9rdXp1aVwgOwor6IG06Ki6ID4gY2hvdXNoaW5cIDsKK+S/l+a1gSA+IHpva3VyeXV1XCA7CivlrprogbcgPiB0ZWlzaG9rdVwgOwor5a6Y6IG3ID4ga2Fuc2hva3VcIDsKK+WBpeWunyA+IGtlbmppdHN1XCA7Civosarpm6ogPiBnb3VzZXRzdVwgOwor6IG06KaaID4gY2hvdWtha3VcIDsKK+ePjemHjSA+IGNoaW5jaG91XCA7Civnm7TjgIUgPiBqaWtpamlraVwgOwor6Ieq5a6kID4gamlzaGl0c3VcIDsKK+WBtOWjgSA+IHNva3VoZWtpXCA7CivmpJzlsL8gPiBrZW4nJ255b3VcIDsKK+S5sembkSA+IHJhbnphdHN1XCA7CivlsZ7mnJsgPiBzaG9rdWJvdVwgOwor6IG06KGGID4gY2hvdXNodXVcIDsKK+S4rem7kiA+IG5ha2FndXJvXCA7CivmpJzlr58gPiBrZW5zYXRzdVwgOwor5Lq66LazID4gaGl0b2FzaGlcIDsKK+WvvueJqSA+IHRhaWJ1dHN1XCA7CivogonoloQgPiBuaWt1aGFrdVwgOwor546J6aGUID4gZ3lva3VnYW5cIDsKK+mir+miryA+IHNhc3NhdHN1XCA7CivlgY/lsYggPiBoZW5rdXRzdVwgOwor5LuP6KqsID4gYnVzc2V0c3VcIDsKK+WztuWPsCA+IHNoaW1hZGFpXCA7Civku4foro4gPiBreXV1c2h1dVwgOwor5L2155m6ID4gaGVpaGF0c3VcIDsKK+mnkOeVmSA+IGNodXVyeXV1XCA7CivnlaXluL0gPiByeWFrdWJvdVwgOwor5pyd6aOvID4gYXNhbWVzaGlcIDsKK+S9leeoiyA+IG5hbmlob2RvXCA7Civpoqjpo58gPiBmdXVzaG9rdVwgOwor55Wz5bGLID4gdGF0YW1peWFcIDsKK+WBtOWcpyA+IHNva3VhdHN1XCA7CivotJbnvaogPiBzaG9rdXphaVwgOwor6IKp6IKYID4ga2F0YWhpamlcIDsKK+afk+iJsiA+IHNlbnNob2t1XCA7CivouqvkuK0gPiBzaGluY2h1dVwgOwor5p2R6YeMID4gbXVyYXphdG9cIDsKK+S7meihkyA+IHNlbmp1dHN1XCA7Civoh6rlpLEgPiBqaXNoaXRzdVwgOwor5L+X5qW9ID4gem9rdWdha3VcIDsKK+mmluetiyA+IGt1YmlzdWppXCA7CivkvYfnq4sgPiBjaG9yaXRzdVwgOwor6LSL6ICFID4gbmlzZW1vbm9cIDsKK+WvhuedgCA+IG1pdGNoYWt1XCA7CivohbDmnb8gPiBrb3NoaWl0YVwgOwor6IKh6IKJID4gbW9tb25pa3VcIDsKK+iEsea8jyA+IGRhdHN1cm91XCA7Civog7jnl5sgPiBreW91dHN1dVwgOwor5Li46au3ID4gbWFydW1hZ2VcIDsKK+WxiOabsiA+IGt1a2t5b2t1XCA7CivoiLnkurogPiBmdW5hYml0b1wgOwor6aqo5aSqID4gaG9uZWJ1dG9cIDsKK+mrmOWNkiA+IGtvdXNvdHN1XCA7CivlsLHmpa0gPiBzaHV1Z3lvdVwgOwor6aOf6YGTID4gc2hva3Vkb3VcIDsKK+iwt+miqCA+IHRhbmlrYXplXCA7Civkv6HmnI0gPiBzaGlucHVrdVwgOwor5Luu6JG6ID4ga2FyaWJ1a2lcIDsKK+miqOmbqiA+IGZ1dXNldHN1XCA7CivlrozntZAgPiBrYW5rZXRzdVwgOwor5p+U6IKMID4geWF3YWhhZGFcIDsKK+mnkOeLrCA+IGNodXVkb2t1XCA7CivnjonploAgPiBneW9rdW1vblwgOwor6aWS6IiMID4gam91emV0c3VcIDsKK+aciOmjnyA+IGdlc3Nob2t1XCA7CivmoJfnn7MgPiBrdXJpaXNoaVwgOwor5bCP5rOiID4gc2F6YW5hbWlcIDsKK+ebiuOAhSA+IG1hc3VtYXN1XCA7Civlrprnq4sgPiB0ZWlyaXRzdVwgOwor5Li46aaWID4gbWFydWt1YmlcIDsKK+S4remrmCA+IG5ha2FkYWthXCA7Civlrpjnq4sgPiBrYW5yaXRzdVwgOwor6IO9546HID4gbm91cml0c3VcIDsKK+i2s+alrSA+IGFzaGl3YXphXCA7CivmnKjpkLggPiBib2t1dGFrdVwgOwor5Li76aOfID4gc2h1c2hva3VcIDsKK+mpmuaElSA+IGt5b3VnYWt1XCA7Civkv5fmm7IgPiB6b2treW9rdVwgOwor5LuZ6JasID4gc2VuJyd5YWt1XCA7CivkvZznl4UgPiBzYWt1YnlvdVwgOwor5L2V55m+ID4gbmFuYnlha3VcIDsKK+S7geihkyA+IGppbmp1dHN1XCA7Civkv6HmlZkgPiBzaGlua3lvdVwgOwor5qGc5rmvID4gc2FrdXJheXVcIDsKK+aknOWcpyA+IGtlbicnYXRzdVwgOwor5LiA6b2jID4gaGl0b2tvbWFcIDsKK+i2s+aisCA+IGFzaGlrYXNlXCA7CivmnIjpnaIgPiBnZXRzdW1lblwgOwor5Lmz6YWqID4gbnl1dXJha3VcIDsKK+WwveaXpSA+IGppbmppdHN1XCA7CivlsJHmrLIgPiBzaG91eW9rdVwgOwor55S75byVID4ga2FrdWJpa2lcIDsKK+eVmeWtpiA+IHJ5dXVnYWt1XCA7Civlrabnv5IgPiBnYWt1c2h1dVwgOwor6LeL5paHID4gYmF0c3VidW5cIDsKK+WxseW9piA+IHlhbWFiaWtvXCA7CivlsbHlvaIgPiB5YW1hZ2F0YVwgOwor55eF5LitID4gYnlvdWNodXVcIDsKK+Wwj+assiA+IHNob3V5b2t1XCA7CivlgbblipsgPiBndXVyeW9rdVwgOwor5p+T57mUID4gc2Vuc2hva3VcIDsKK+S7u+iBtyA+IG5pbnNob2t1XCA7CivohLHmr5sgPiBkYXRzdW1vdVwgOwor5bCC5rG6ID4gc2Vua2V0c3VcIDsKK+ain+aVtSA+IGt5b3V0ZWtpXCA7CivmnKjpi48gPiBraWJhc2FtaVwgOwor6Iif5Lq6ID4gZnVuYWJpdG9cIDsKK+iyp+ihgCA+IGhpbmtldHN1XCA7CivotrPmnrcgPiBhc2hpa2FzZVwgOwor6ICz6KixID4gbWltaW1vdG9cIDsKK+WCkeS6uiA+IGtldHN1amluXCA7Civlr77msbogPiB0YWlrZXRzdVwgOwor5bCE5q66ID4gc2hhc2F0c3VcIDsKK+S7pOiJsiA+IHJlaXNob2t1XCA7CivlsIHmrrogPiBmdXVzYXRzdVwgOwor5bCP5qeMID4ga29kenVjaGlcIDsKK+Wtpue4viA+IGdha3VzZWtpXCA7CivlsbHlt50gPiB5YW1hZ2F3YVwgOwor6auY5L2OID4gdGFrYWhpa3VcIDsKK+S4remggyA+IG5ha2Fnb3JvXCA7Civogbfog70gPiBzaG9rdW5vdVwgOwor5bGI5oqYID4ga3Vzc2V0c3VcIDsKK+Wun+ebtCA+IGppdGNob2t1XCA7CivohbDmipggPiBrb3NoaW9yZVwgOwor5a6f55uKID4gaml0c3Vla2lcIDsKK+WumuedgCA+IHRlaWNoYWt1XCA7CivmooHmnKggPiByeW91Ym9rdVwgOwor5YG25YG2ID4gdGFtYXRhbWFcIDsKK+absumdoiA+IGt5b2t1bWVuXCA7CivotrPml6kgPiBhc2hpYmF5YVwgOwor5Lit6ZyHID4gY2h1dXNoaW5cIDsKK+iIjOS7oyA+IHpldHN1ZGFpXCA7Civmn7Hnn7MgPiBjaHV1c2VraVwgOwor5bGx5bGxID4geWFtYXlhbWFcIDsKK+S4remalCA+IGNodXVrYWt1XCA7CivlsYDmiYAgPiBreW9rdXNob1wgOwor6LKv6JOEID4gY2hvY2hpa3VcIDsKK+S9jueOhyA+IHRlaXJpdHN1XCA7Civlt57jgIUgPiBzaHV1c2h1dVwgOwor5p+T562GID4gc2VucGl0c3VcIDsKK+S/oeaGkSA+IHNoaW5weW91XCA7CivmoZ/mqYsgPiBzYW5iYXNoaVwgOwor55S75a6kID4gZ2FzaGl0c3VcIDsKK+iCiee0sCA+IG5pa3Vib3NvXCA7CivlrqLnlKggPiBreWFrdXlvdVwgOwor5Lit6ZmQID4gbmFrYWdpcmlcIDsKK+S9leeJqSA+IG5hbmltb25vXCA7CivlsbHlr7ogPiB5YW1hZGVyYVwgOwor54yf6bOlID4gcnlvdWNob3VcIDsKK+WtpuexjSA+IGdha3VzZWtpXCA7CivkuIfpqqggPiBiYW5rb3RzdVwgOwor5L+u5b6pID4gc2h1dWZ1a3VcIDsKK+S7j+iJpiA+IGZ1dHN1a2FuXCA7Civohbnlv4MgPiBmdWt1c2hpblwgOwor5a6f55SoID4gaml0c3V5b3VcIDsKK+S/ruW+lyA+IHNodXV0b2t1XCA7Civog4bnlaUgPiB0YW5yeWFrdVwgOwor5YW244CFID4gc29yZXpvcmVcIDsKK+S4uOmRvyA+IG1hcnVub21pXCA7CivlsbHlroggPiB5YW1hbW9yaVwgOwor6Laz5pG6ID4gYXNoaXp1cmlcIDsKK+mjn+iogCA+IHNob2t1Z2VuXCA7CivlgIvlrqQgPiBrb3NoaXRzdVwgOwor5LqM6KiAID4gZnV0YWtvdG9cIDsKK+S9k+eGsSA+IHRhaW5ldHN1XCA7CivlhbHjgIUgPiB0b21vZG9tb1wgOwor5Luu57a0ID4ga2FyaXRvamlcIDsKK+S8keelpSA+IGt5dXVzaG91XCA7CivlsYjlvpMgPiBrdXRzdWp1dVwgOwor5a6f54++ID4gaml0c3VnZW5cIDsKK+ePvuiBtyA+IGdlbnNob2t1XCA7CivosYHpgZQgPiBrYXR0YXRzdVwgOwor5L+h5b+1ID4gc2hpbicnbmVuXCA7CivpoY7pqqggPiBnYWtrb3RzdVwgOwor5LiJ6aOfID4gc2Fuc2hva3VcIDsKK+S6huimmiA+IHJ5b3VrYWt1XCA7CivkuIDpp5IgPiBoaXRva29tYVwgOwor576k6ZuyID4gbXVyYWt1bW9cIDsKK+aciOmHkSA+IGdldHN1a2luXCA7CivotaTmsoggPiBzZWtpY2hpblwgOwor5LiL6aGOID4gc2hpdGFhZ29cIDsKK+WxseWnqyA+IHlhbWFoaW1lXCA7CivohILmsZcgPiBhYnVyYWFzZVwgOwor6IWw5byBID4ga29zaGliZW5cIDsKK+WuneeOiSA+IGhvdWd5b2t1XCA7CivlsJHmlbUgPiBzaG91dGVraVwgOwor5L615pKDID4gc2hpbmdla2lcIDsKK+mpjeWwhiA+IGd5b3VzaG91XCA7CivkuJjpmbUgPiBreXV1cnlvdVwgOwor55Wl5ZCNID4gcnlha3VtZWlcIDsKK+Wwj+aVtSA+IHNob3V0ZWtpXCA7CivnlaXlj7cgPiByeWFrdWdvdVwgOwor6Laz5oqAID4gYXNoaXdhemFcIDsKK+eVpeWPsiA+IHJ5YWt1c2hpXCA7CivlrprnjocgPiB0ZWlyaXRzdVwgOwor55Wq5Y2SID4gYmFuc290c3VcIDsKK+eVpeWPliA+IHJ5YWt1c2h1XCA7Civlrp/nirYgPiBqaXRzdWpvdVwgOwor5YCf5ZywID4gc2hha3VjaGlcIDsKK+S9teauuiA+IGhlaXNhdHN1XCA7CivogZbogbcgPiBzZWlzaG9rdVwgOwor6IWw5bivID4ga29zaGlvYmlcIDsKK+S4iumdtCA+IHV3YWd1dHN1XCA7Civohpzlo4EgPiBtYWt1aGVraVwgOwor6ISx5paHID4gZGF0c3VidW5cIDsKK+WtmOeriyA+IHNvbnJpdHN1XCA7Civlrp3niakgPiBob3Vtb3RzdVwgOwor5L+X5b2iID4gem9rdWd5b3VcIDsKK+S6uuiGmiA+IGhpdG9oYWRhXCA7CivpoqjotrMgPiBrYXphYXNoaVwgOwor5Lm+6KOCID4ga2FucmV0c3VcIDsKK+ahjuaijyA+IHNoaWtrb2t1XCA7CivkuIDpoIMgPiBoaXRva29yb1wgOwor57+M6YCxID4geW9rdXNodXVcIDsKK+WvvuaXpSA+IHRhaW5pY2hpXCA7CivmnqDntYQgPiB3YWt1Z3VtaVwgOwor5Lq66ISaID4gaGl0b2FzaGlcIDsKK+e/u+iosyA+IGhvbicneWFrdVwgOwor5Lq66ISIID4gamlubXlha3VcIDsKK+WxseWfjiA+IHlhbWFqaXJvXCA7CivpoLjpqqggPiBrZWlrb3RzdVwgOwor5L6b5paZID4ga3lvdXJ5b3VcIDsKK+iEmuacrCA+IGt5YWt1aG9uXCA7CivmnbHoip0gPiB0b3VzaGliYVwgOwor6LWk5qirID4gYWthZ2FzaGlcIDsKK+iAkOidlSA+IHRhaXNob2t1XCA7CivohIrmpI4gPiBzZWtpdHN1aVwgOwor5p+054qsID4gc2hpYmFpbnVcIDsKK+S/ruWtpiA+IHNodXVnYWt1XCA7Civkv4rlvrMgPiBzaHVudG9rdVwgOwor5pyI6LyqID4gZ2V0c3VyaW5cIDsKK+S7sueniyA+IGNodXVzaHV1XCA7CivkuLvov7AgPiBzaHVqdXRzdVwgOwor5Lq66IKMID4gaGl0b2hhZGFcIDsKK+S6uuiCiSA+IGppbicnbmlrdVwgOwor5aqS6YWMID4gYmFpc2hha3VcIDsKK+S+i+aciCA+IHJlaWdldHN1XCA7CivnlJ/lqJggPiBraW11c3VtZVwgOwor5Luj562GID4gZGFpaGl0c3VcIDsKK+iEiuaigSA+IHNla2lyeW91XCA7Civlr4bmrrogPiBtaXNzYXRzdVwgOwor5pq06aOfID4gYm91c2hva3VcIDsKK+WxseWbvSA+IHlhbWFndW5pXCA7CivogbfnqK4gPiBzaG9rdXNodVwgOwor5LiA6ZqbID4gaGl0b2tpd2FcIDsKK+S5vuidlSA+IGthbnNob2t1XCA7CivkuIDpmoUgPiBoaXRvc3VtaVwgOwor5bCx5bqKID4gc2h1dXNob3VcIDsKK+S4iOmVtyA+IHRha2VuYWdhXCA7CivpoK3pq6ogPiB0b3VoYXRzdVwgOwor54yl6ZuRID4gd2FpemF0c3VcIDsKK+iBr+eriyA+IHJlbnJpdHN1XCA7CivohIrmn7EgPiBzZWtpY2h1dVwgOwor6aCt6aqoID4gdG91a290c3VcIDsKK+i2s+W9oiA+IGFzaGlnYXRhXCA7CivlronniakgPiB5YXN1bW9ub1wgOwor5a+S5qW1ID4ga2Fua3lva3VcIDsKK+i2s+W8sSA+IGFzaGl5b3dhXCA7CivlgJnlk4kgPiBzb3Vyb3V5YVwgOwor5L6L5pelID4gcmVpaml0c3VcIDsKK+S4remAnyA+IGNodXVzb2t1XCA7CivnlJ/lo4EgPiBuYW1ha2FiZVwgOwor5pu06L+tID4ga291dGV0c3VcIDsKK+ain+WwhiA+IGt5b3VzaG91XCA7CivlhYPjgIUgPiBtb3RvbW90b1wgOwor6IKJ55qEID4gbmlrdXRla2lcIDsKK+iDuOakjiA+IGt5b3V0c3VpXCA7CivpoqjoqqwgPiBmdXVzZXRzdVwgOwor5qGC5pyIID4ga2VpZ2V0c3VcIDsKK+WupOa4qSA+IHNoaXRzdW9uXCA7Civku5nnqp8gPiBzZW5rdXRzdVwgOwor5a+n5pelID4gbmVpaml0c3VcIDsKK+i0i+eJqSA+IG5pc2Vtb25vXCA7Civnlarku5ggPiBiYW5kenVrZVwgOwor6LWk5p2+ID4gYWthbWF0c3VcIDsKK+eVpeS9kyA+IHJ5YWt1dGFpXCA7CivmooXlubIgPiB1bWVib3NoaVwgOwor5L+X5a2mID4gem9rdWdha3VcIDsKK+iFueWjgSA+IGZ1a3VoZWtpXCA7CivkuK3ou7ggPiBjaHV1amlrdVwgOwor55Wl5LydID4gcnlha3VkZW5cIDsKK+iFuOWjgSA+IGNob3VoZWtpXCA7CivosaHomasgPiB6b3VtdXNoaVwgOwor5p6X56uLID4gcmlucml0c3VcIDsKK+WsjOe+niA+IGt5b3VzaHV1XCA7Civos6rnlpEgPiBzaGl0c3VnaVwgOwor5bGx5ZC5ID4geWFtYWJ1a2lcIDsKK+i4j+WIhyA+IGZ1bWlraXJpXCA7CivlsLHlr50gPiBzaHV1c2hpblwgOwor5p2P6Iy4ID4gYW56dXRha2VcIDsKK+eUn+WbvSA+IHNob3Vrb2t1XCA7Civkv6HlpbMgPiBzaGluJydueW9cIDsKK+adn+iEqSA+IHNva3VzaHV1XCA7CivlsI/lv4MgPiBzaG91c2hpblwgOwor5a6/5qWtID4gc2h1a3Vnb3VcIDsKK+eUs+WRiiA+IHNoaW5rb2t1XCA7Civlr5LmnIggPiBrYW5nZXRzdVwgOwor5pyJ6K2YID4geXV1c2hpa2lcIDsKK+S9mualvSA+IGl0c3VyYWt1XCA7CivlsLHlraYgPiBzaHV1Z2FrdVwgOwor6aSF57ayID4gbW9jaGlhbWlcIDsKK+S9leanmCA+IG5hbmlzYW1hXCA7Civnv4Hosp0gPiBva2luYWdhaVwgOwor5a+M5pytID4gdG9taWZ1ZGFcIDsKK+WxgOWkliA+IGt5b2t1Z2FpXCA7Civpo5/ohrMgPiBzaG9rdXplblwgOwor5p2J6IuUID4gc3VnaWdva2VcIDsKK+WvhuaelyA+IG1pdHN1cmluXCA7CivlgInljZIgPiBzb3Vzb3RzdVwgOwor55Sy5Y2SID4ga291c290c3VcIDsKK+WuouauvyA+IGt5YWt1ZGVuXCA7CivkuKbotrMgPiBuYW1pYXNoaVwgOwor5Lqk57mUID4ga291c2hva3VcIDsKK+eVkeS9nCA+IGhhdGFzYWt1XCA7Civnk6blsYsgPiBrYXdhcmF5YVwgOwor5a6i5q27ID4ga3lha3VzaGlcIDsKK+eUt+WJjSA+IG90b2tvbWFlXCA7CivlsYDloLEgPiBreW9rdWhvdVwgOwor6aGw6LmZID4gaGluc2h1a3VcIDsKK+WuruanmCA+IG1peWFzYW1hXCA7CivkvZzmn4QgPiBzYWt1Z2FyYVwgOwor54yu6YWMID4ga2Vuc2hha3VcIDsKK+mjn+iCsiA+IHNob2t1aWt1XCA7CivpoqjonZUgPiBmdXVzaG9rdVwgOwor5Lih6LazID4gcnlvdXNva3VcIDsKK+S6jOiCoSA+IGZ1dGFtYXRhXCA7Civnk6blrrYgPiBrYXdhcmF5YVwgOwor5LiK6YGUID4gam91dGF0c3VcIDsKK+iGneWFgyA+IGhpemFtb3RvXCA7CivmnJvonIAgPiBib3VzaG9rdVwgOwor5a6/5pybID4gc2h1a3Vib3VcIDsKK+iEseW4vSA+IGRhdHN1Ym91XCA7CivnlLPlh7ogPiBtb3VzaGlkZVwgOwor5p+E54mpID4gZ2FyYW1vbm9cIDsKK+S4iui/sCA+IGpvdWp1dHN1XCA7CivkvZzmm7IgPiBzYWtreW9rdVwgOwor6ICz57OeID4gbWltaWt1c29cIDsKK+iAgeiLpSA+IHJvdW55YWt1XCA7CivogonniZsgPiBuaWt1Z3l1dVwgOwor5bGx5YWDID4geWFtYW1vdG9cIDsKK+WxgOWcsCA+IGt5b2t1Y2hpXCA7Civosp7nr4AgPiB0ZWlzZXRzdVwgOwor5p2f57ibID4gc29rdWJha3VcIDsKK+acq+iRiSA+IG1hdHN1eW91XCA7CivkvZXmnIggPiBuYW5nYXRzdVwgOwor5bC65ZywID4gc2hha3VjaGlcIDsKK+ixmuiNiSA+IGJ1dGFrdXNhXCA7Civmm7Loq5YgPiBreW9rdXJvblwgOwor5bGx5YG0ID4geWFtYWdhd2FcIDsKK+WwkeWwkSA+IHNob3VzaG91XCA7CivlsJHlsIYgPiBzaG91c2hvdVwgOwor5pqX6ZeHID4ga3VyYXlhbWlcIDsKK+S8kea8gSA+IGt5dXVyeW91XCA7CivnjonokbEgPiB0YW1hbmVnaVwgOwor5Lmz6IetID4gbnl1dXNodXVcIDsKK+eUmOWPoyA+IGFtYWt1Y2hpXCA7CivmnKjoj58gPiBtaW1penVrdVwgOwor5ayM56yRID4ga3lvdXNob3VcIDsKK+eUo+WIpSA+IHNhbmJldHN1XCA7CivmnIjonZUgPiBnZXNzaG9rdVwgOwor5bCP5a2mID4gc2hvdWdha3VcIDsKK+anmOOAhSA+IHNhbWF6YW1hXCA7Civkvr/lo7ogPiBiZW50c3Vib1wgOwor5LiA6LybID4gaWNoaXJ5b3VcIDsKK+iznOeJqSA+IHRhbWFtb25vXCA7CivnlJ/liKUgPiBzZWliZXRzdVwgOwor6aaW5p63ID4ga3ViaWthc2VcIDsKK+WtkOeItSA+IHNoaXNoYWt1XCA7CivkvovlvI8gPiByZWlzaGlraVwgOwor54++55SfID4gZ2VuJyduYW1hXCA7CivmnKjoi7ogPiBraWljaGlnb1wgOwor54qs6beyID4gaW51d2FzaGlcIDsKK+acrOiJsiA+IGhvbnNob2t1XCA7CivkubHohIggPiByYW5teWFrdVwgOwor5a6a5qSNID4gdGVpc2hva3VcIDsKK+i7veOAhSA+IGthcnVnYXJ1XCA7Civlr4bmjqUgPiBtaXNzZXRzdVwgOwor5LiA6LqNID4gaWNoaXlha3VcIDsKK+WxseS6uiA+IHlhbWFiaXRvXCA7CivohIfmga8gPiBreW91c29rdVwgOwor57696KGjID4gaGFnb3JvbW9cIDsKK+acjeiWrCA+IGZ1a3V5YWt1XCA7CivlsZ7lg5ogPiB6b2t1cnlvdVwgOwor6Laz5Z6LID4gYXNoaWdhdGFcIDsKK+eUu+S4gCA+IGtha3VpdHN1XCA7CivmorXliLkgPiBib25zZXRzdVwgOwor5LyP5rWBID4gZnVrdXJ5dXVcIDsKK+WvvuWxgCA+IHRhaWt5b2t1XCA7CivnjKvotrMgPiBuZWtvYXNoaVwgOwor5bCP5aiYID4ga29tdXN1bWVcIDsKK+S7o+eJqSA+IGRhaWJ1dHN1XCA7Civlp6vpsZIgPiBoaW1lbWFzdVwgOwor5pys6IWwID4gaG9uZ29zaGlcIDsKK+S4gOi2syA+IGhpdG9hc2hpXCA7CivohbnliIcgPiBoYXJha2lyaVwgOwor5Lih6KaqID4gcnlvdXNoaW5cIDsKK+aZqemjryA+IGJhbm1lc2hpXCA7Civnv7znv7wgPiB5b2t1eW9rdVwgOwor55Sf5YK3ID4gbmFtYWtpenVcIDsKK+ixmuiCiSA+IGJ1dGFuaWt1XCA7CivohIflvbkgPiB3YWtpeWFrdVwgOwor6aCt6YeRID4gYXRhbWFraW5cIDsKK+e+juizqiA+IGJpc2hpdHN1XCA7CivlsYrlh7ogPiB0b2Rva2VkZVwgOwor6LWk5b+DID4gc2VraXNoaW5cIDsKK+acrOiBtyA+IGhvbnNob2t1XCA7CivnirbpqqggPiBqb3Vrb3RzdVwgOwor57+g6ImyID4gc3Vpc2hva3VcIDsKK+S4oeiiliA+IHJ5b3Vzb2RlXCA7CivmoLjlv4MgPiBrYWt1c2hpblwgOwor5Li46JasID4gZ2FuJyd5YWt1XCA7CivkvLjmmqIgPiBzaGluY2hvdVwgOwor5pyd6IejID4gY2hvdXNoaW5cIDsKK+Wuv+aJgCA+IHNodWt1c2hvXCA7CivmnpzniakgPiBrdWRhbW9ub1wgOwor54++54mpID4gZ2VuYnV0c3VcIDsKK+S4i+iriyA+IHNoaXRhdWtlXCA7CivmnKjogLMgPiBraWt1cmFnZVwgOwor5bC95YqbID4gamlucnlva3VcIDsKK+S6uueVnCA+IGppbmNoaWt1XCA7Civku67mvIYgPiBrYXNoaXRzdVwgOwor5p2R56uLID4gc29ucml0c3VcIDsKK+miqOiEmiA+IGthemFhc2hpXCA7Civkv4Llk6EgPiBrYWthcmlpblwgOwor5LiA6Ku+ID4gaWNoaWRha3VcIDsKK+Wwj+WbvSA+IHNob3Vrb2t1XCA7CivlrabmrbQgPiBnYWt1cmVraVwgOwor5a6/5oKqID4gc2h1a3Vha3VcIDsKK+iDuOW6pyA+IG11bmFndXJhXCA7CivkuIDoqq0gPiBpY2hpZG9rdVwgOwor5a6X5pWZID4gc2h1dWt5b3VcIDsKK+WvpeWvpSA+IHJ5b3VyeW91XCA7CivmnInoibIgPiB5dXVzaG9rdVwgOwor54ut6YePID4ga3lvdXJ5b3VcIDsKK+adpeedgCA+IHJhaWNoYWt1XCA7CivkvJHmpa0gPiBreXV1Z3lvdVwgOwor5pyI6ImyID4gZ2Vzc2hva3VcIDsKK+S/ruS6hiA+IHNodXVyeW91XCA7Civog7jluYUgPiBtdW5laGFiYVwgOwor5LiA6KiAID4gaGl0b2tvdG9cIDsKK+Wuv+W/lyA+IHNodWt1c2hpXCA7CivogLPnlr4gPiBqaXNoaXRzdVwgOwor6IWV5YqbID4gd2Fucnlva3VcIDsKK+iFueS4rSA+IGZ1a3VjaHV1XCA7CivkuIDop5IgPiBoaXRva2Fkb1wgOwor6IKJ5qyyID4gbmlrdXlva3VcIDsKK+ePoOeOiSA+IHNodWd5b2t1XCA7Civku4DniakgPiBqdXVtb3RzdVwgOwor5Li76ImyID4gc2h1c2hva3VcIDsKK+i0i+acrSA+IG5pc2VmdWRhXCA7Civogqnmm7ggPiBrYXRhZ2FraVwgOwor5L+h5LyPID4gc2hpbnB1a3VcIDsKK+S/oeS7uyA+IHNoaW4nJ25pblwgOwor5a6/5byKID4gc2h1a3VoZWlcIDsKK+msseOAhSA+IHV0c3V1dHN1XCA7CivkubHnrYYgPiByYW5waXRzdVwgOwor5Lq654mpID4gamluYnV0c3VcIDsKK+S/l+S/oSA+IHpva3VzaGluXCA7CivnjK7ooYAgPiBrZW5rZXRzdVwgOwor5qC85a6JID4ga2FrdXlhc3VcIDsKK+S4oeiTiyA+IHJ5b3VidXRhXCA7Civlrabmpa0gPiBnYWt1Z3lvdVwgOwor5Lq654i1ID4gamluc2hha3VcIDsKK+eMpeikuyA+IHdhaXNldHN1XCA7CivosZrnrrEgPiBidXRhYmFrb1wgOwor5Luu5q6/ID4ga2FyaWRvbm9cIDsKK+mjm+efsyA+IHRvYmlpc2hpXCA7CivkubHnq4sgPiByYW5yaXRzdVwgOwor5a6/5bizID4geWFkb2Nob3VcIDsKK+WvkuWvkiA+IHNhbXV6YW11XCA7CivmnLHnrYYgPiBzaHVoaXRzdVwgOwor5Li76ISIID4gc2h1bXlha3VcIDsKK+S7mOa3uyA+IHRzdWtpc29pXCA7CivmnKznr4AgPiBob25idXNoaVwgOwor5puy6Iq4ID4ga3lva3VnZWlcIDsKK+acq+evgCA+IG1hc3NldHN1XCA7CivotrPlhYMgPiBhc2hpbW90b1wgOwor6LKh54mpID4gemFpYnV0c3VcIDsKK+Wwj+WQjSA+IHNob3VteW91XCA7CivkuZfntYQgPiBub3Jpa3VtaVwgOwor5a+d5ae/ID4gbmVzdWdhdGFcIDsKK+abs+iIuSA+IGhpa2lidW5lXCA7Civnv4znv4wgPiB5b2t1eW9rdVwgOwor5pyr562GID4gbWFwcGl0c3VcIDsKK+aYvOmggyA+IGhpcnVnb3JvXCA7CivogqHml4UgPiBtYXRhdGFiaVwgOwor54us6LqrID4gZG9rdXNoaW5cIDsKK+eQtOabsiA+IGtpbmt5b2t1XCA7CivkuqzniakgPiBreW91bW9ub1wgOwor5p+Q5pyIID4gYm91Z2V0c3VcIDsKK+ixhueylSA+IG1hbWVrYXN1XCA7Civlrp/mg4UgPiBqaXRzdWpvdVwgOwor5Lit6IW5ID4gY2h1dWZ1a3VcIDsKK+mghumAhiA+IGp1bmd5YWt1XCA7CivmnYnnmq4gPiBzdWdpa2F3YVwgOwor5bCG5Y+IID4gaGF0YW1hdGFcIDsKK+iEseWNtCA+IGRha2t5YWt1XCA7Civlr4Llr6UgPiBzZWtpcnlvdVwgOwor5a+C5a+eID4gc2VraWJha3VcIDsKK+mjn+eUqCA+IHNob2t1eW91XCA7Civmn5Dml6UgPiBib3VqaXRzdVwgOwor5pmp6YWMID4gYmFuc2hha3VcIDsKK+S4reiCiSA+IGNodXVuaWt1XCA7Civosp7ng4ggPiB0ZWlyZXRzdVwgOwor6aOy54mpID4gbm9taW1vbm9cIDsKK+S4oeiGmiA+IHJ5b3VoYWRhXCA7Civku7LmoLggPiBjaHV1a2FrdVwgOwor5Lmd56mAID4ga3l1dWtva3VcIDsKK+Wun+W8viA+IGppdHN1ZGFuXCA7CivkuIvokKAgPiBzaGl0YW1vZVwgOwor5puy6ICFID4ga3VzZW1vbm9cIDsKK+WumuW+iyA+IHRlaXJpdHN1XCA7CivmoYPlnJIgPiBtb21vem9ub1wgOwor6aaW5be7ID4ga3ViaW1ha2lcIDsKK+S7j+awlyA+IGhvdG9rZWdpXCA7CivmmKXpoqggPiBoYXJ1a2F6ZVwgOwor5Lim6IKJID4gbmFtaW5pa3VcIDsKK+WuouW5tCA+IGt5YWt1bmVuXCA7CivotorljZcgPiBiZXRvbmFtdVwgOwor5Lih6ISHID4gcnlvdXdha2lcIDsKK+S8uOW8tSA+IHNoaW5jaG91XCA7CivpoqjnqpMgPiBrYXphbWFkb1wgOwor6aKo56m0ID4gZnV1a2V0c3VcIDsKK+S7j+auvyA+IGJ1dHN1ZGVuXCA7Civog7jlo4EgPiBreW91aGVraVwgOwor5a6a5byPID4gdGVpc2hpa2lcIDsKK+aYn+mjnyA+IHNlaXNob2t1XCA7CivkuKHogpggPiByeW91aGlqaVwgOwor5Lih6IKMID4gcnlvdWhhZGFcIDsKK+iynua9lCA+IHRlaWtldHN1XCA7Civlq6HnlLcgPiBjaGFrdW5hblwgOwor5Lmz55m9ID4gbnl1dWhha3VcIDsKK+S9juWvhiA+IHRlaW1pdHN1XCA7CivkuKHogLMgPiByeW91bWltaVwgOwor5Lmx55m6ID4gcmFucGF0c3VcIDsKK+iEheWahyA+IGt5b3VrYWt1XCA7CivmmrTomZAgPiBib3VneWFrdVwgOwor6IKY5o6bID4gaGlqaWtha2VcIDsKK+S4oee/vCA+IHJ5b3V5b2t1XCA7Civlr4blo7IgPiBtaXRzdWJhaVwgOwor5pyo55+zID4gYm9rdXNla2lcIDsKK+eOieeglSA+IGd5b2t1c2FpXCA7CivkuIPojYkgPiBuYW5ha3VzYVwgOwor5a6u5a6IID4gbWl5YW1vcmlcIDsKK+aboOiBtyA+IGtvdXNob2t1XCA7Civnjonnn7MgPiB0YW1haXNoaVwgOwor5LiJ6ImyID4gc2Fuc2hva3VcIDsKK+S7suaYpSA+IGNodXVzaHVuXCA7CivmoZHljp8gPiBrdXdhYmFyYVwgOwor6K2Y6Za+ID4gc2hpa2lpa2lcIDsKK+S6uuazoiA+IGhpdG9uYW1pXCA7CivmmKXpm6ggPiBoYXJ1c2FtZVwgOwor57+z55uuID4ga2FzdW1pbWVcIDsKK+eMv+iCoSA+IHNhcnVtYXRhXCA7Civmm7Lnt5ogPiBreW9rdXNlblwgOwor5LyR5oiaID4ga3l1dXNla2lcIDsKK+WuouWxpCA+IGt5YWt1c291XCA7CivmmKXpmb0gPiBzaHVuJyd5b3VcIDsKK+iynua3kSA+IHRlaXNodWt1XCA7CivlrojlvbkgPiBtb3JpeWFrdVwgOwor5Li756+AID4gc2h1c2V0c3VcIDsKK+S4gOiKsSA+IGhpdG9oYW5hXCA7CivpoZToibIgPiBnYW5zaG9rdVwgOwor5Lit57SwID4gY2h1dWJvc29cIDsKK+S4ree0miA+IGNodXVreXV1XCA7CivotoXlhYsgPiBjaG91a29rdVwgOwor5Li7562GID4gc2h1aGl0c3VcIDsKK+eOh+ebtCA+IHNvdGNob2t1XCA7CivnjKvoiIwgPiBuZWtvaml0YVwgOwor5LiJ6ISaID4gc2Fua3lha3VcIDsKK+aZuuitmCA+IGNoaXNoaWtpXCA7CivkuIvogqUgPiBzaGltb2dvZVwgOwor5a6f5a6zID4gaml0c3VnYWlcIDsKK+mkiuauliA+IHlvdXNob2t1XCA7CivlsI/kuIAgPiBzaG91aWNoaVwgOwor6LKq5qyyID4gZG9uJyd5b2t1XCA7CivkurrmrLIgPiBqaW4nJ3lva3VcIDsKK+iAkOeGsSA+IHRhaW5ldHN1XCA7Civlrp/lrZggPiBqaXRzdXpvblwgOwor6aCY6KKWID4gcnlvdXNodXVcIDsKK+S8keaBryA+IGt5dXVzb2t1XCA7Civml7HprYMgPiBrYW5iYXRzdVwgOwor54m56ZuGID4gdG9rdXNodXVcIDsKK+acq+eUtyA+IGJhdHN1bmFuXCA7Civlrr/lnYogPiBzaHVrdWJvdVwgOwor6Z+z6LOqID4gb25zaGl0c3VcIDsKK+S4uOeqkyA+IG1hcnVtYWRvXCA7CivnjKvohJogPiBuZWtvYXNoaVwgOwor5a+45YCfID4gc3Vuc2hha3VcIDsKK+i2heS/lyA+IGNob3V6b2t1XCA7Civmm7LnrqEgPiBreW9rdWthblwgOwor5LyR5b+DID4ga3l1dXNoaW5cIDsKK+iEiOWLlSA+IG15YWt1ZG91XCA7CivpoZXogbcgPiBrZW5zaG9rdVwgOwor6IKp5bmFID4ga2F0YWhhYmFcIDsKK+ahiOWHuiA+IGFuc2h1dHN1XCA7CivogqHlvJUgPiBtb21vaGlraVwgOwor5Li456a/ID4gbWFydWhhZ2VcIDsKK+S+m+S6uiA+IHRvbW9iaXRvXCA7Civkurrmp5ggPiBoaXRvc2FtYVwgOwor5Lmz54mbID4gbnl1dWd5dXVcIDsKK+WwguS4gCA+IHNlbicnaXRzdVwgOwor5p6V5pyoID4gbWFrdXJhZ2lcIDsKK+iCoeW6pyA+IG1hdGFndXJhXCA7CivnibnplbcgPiB0b2t1Y2hvdVwgOwor6aCC6KeSID4gY2hvdWtha3VcIDsKK+eLuOiXuyA+IHRhbnVraW1vXCA7CivnvLboqbAgPiBrYW5kenVtZVwgOwor5LiA57+8ID4gaWNoaXlva3VcIDsKK+Wun+WmuSA+IGppdHN1bWFpXCA7CivkuK3nqbogPiBuYWthem9yYVwgOwor5p+U5byxID4gbnl1dWpha3VcIDsKK+mjsuawtCA+IG5vbWltaXp1XCA7CivkuK3nqIsgPiBuYWthaG9kb1wgOwor5LuK5pyIID4ga29uZ2V0c3VcIDsKK+iyuOacrCA+IGthc2hpaG9uXCA7CivkuKbnq4sgPiBoZWlyaXRzdVwgOwor5a6J5a6/ID4geWFzdXlhZG9cIDsKK+iDveWKmyA+IG5vdXJ5b2t1XCA7CivkuK3np4sgPiBjaHV1c2h1dVwgOwor54mp6ZmwID4gbW9ub2thZ2VcIDsKK+WuieWuiSA+IHlhc3V5YXN1XCA7CivlrablvrMgPiBnYWt1dG9rdVwgOwor57+S55mWID4gc2h1dWhla2lcIDsKK+S4uOefsyA+IG1hcnVpc2hpXCA7CivkuIfnt5EgPiBiYW5yeW9rdVwgOwor5a6/5ZG9ID4gc2h1a3VtZWlcIDsKK+S7j+aWhyA+IGZ1dHN1YnVuXCA7CivniZvpnakgPiBneXV1a2F3YVwgOwor6IGW5pelID4gc2Vpaml0c3VcIDsKK+S6uuafhCA+IGhpdG9nYXJhXCA7Civpq5jjgIUgPiB0YWthZGFrYVwgOwor5Lqr5qW9ID4ga3lvdXJha3VcIDsKK+advuafjyA+IHNob3VoYWt1XCA7CivnvqTnq7kgPiBtdXJhdGFrZVwgOwor6K2m6LmVID4ga2VpaGl0c3VcIDsKK+S5s+a/gSA+IG55dXVkYWt1XCA7Civnv6DnjokgPiBzdWlneW9rdVwgOwor5pel6aOfID4gbmlzc2hva3VcIDsKK+S7h+aVtSA+IGt5dXV0ZWtpXCA7CivpnbrpnqggPiBtYWtrYXRzdVwgOwor5ae/6KaLID4gc3VnYXRhbWlcIDsKK+Wun+WcqCA+IGppdHN1emFpXCA7CivmnIjnlaogPiB0c3VraWJhblwgOwor55Kw5LiDID4ga2FuJyduYW5hXCA7Civog7jlhYggPiBtdW5hc2FraVwgOwor6IO45YWDID4gbXVuYW1vdG9cIDsKK+S4gOe1hCA+IGhpdG9rdW1pXCA7CivnjKvns54gPiBuZWtvYmFiYVwgOwor5pen6aCYID4ga3l1dXJ5b3VcIDsKK+mdtOmfsyA+IGt1dHN1b3RvXCA7CivkuZfniakgPiBub3JpbW9ub1wgOwor6aKo54mpID4gZnV1YnV0c3VcIDsKK+S9nOWKhyA+IHNha3VnZWtpXCA7CivmmpboibIgPiBkYW5zaG9rdVwgOwor5L2V5Y2SID4gbmFuaXRvem9cIDsKK+eOh+eEtiA+IHNvdHN1emVuXCA7CivkvJHlraYgPiBreXV1Z2FrdVwgOwor5LiJ562GID4gc2FucGl0c3VcIDsKK+S9j+WPiyA+IHN1bWl0b21vXCA7Civmnb7mmI4gPiB0YWltYXRzdVwgOwor5YG244CFID4gdGFtYXRhbWFcIDsKK+S7ruW9uSA+IGthcml5YWt1XCA7CivkuK3nmr8gPiBjaHV1emFyYVwgOwor6IO45YCJID4gbXVuYWd1cmFcIDsKK+S6uuaVsCA+IGhpdG9rYXp1XCA7CivlqZrntIQgPiBrb24nJ3lha3VcIDsKK+S4i+eptCA+IHNoaXRhYW5hXCA7CivkvZPlipsgPiB0YWlyeW9rdVwgOwor5a6/5YWtID4geWFkb3Jva3VcIDsKK+iAs+actiA+IG1pbWl0YWJ1XCA7Civmm7jnlZkgPiBrYWtpdG9tZVwgOwor5LiA562LID4gaGl0b3N1amlcIDsKK+WtpuWvriA+IGdha3VyeW91XCA7CivkuIDnrYYgPiBoaXRvZnVkZVwgOwor54mH6ZqFID4ga2F0YXN1bWlcIDsKK+ixgeeEtiA+IGthdHN1emVuXCA7CivkvY7liqMgPiB0ZWlyZXRzdVwgOwor54mH6ZmwID4ga2F0YWthZ2VcIDsKK+S6peaciCA+IGdhaWdldHN1XCA7CivnibnpgLIgPiB0b2t1c2hpblwgOwor6LOq5bGLID4gc2hpY2hpeWFcIDsKK+eMqueqgSA+IGNob3RvdHN1XCA7CivkuqzmlrkgPiBreW91Z2F0YVwgOwor54mb6Y2LID4gZ3l1dW5hYmVcIDsKK+Wun+WQjSA+IGppdHN1bWVpXCA7CivmnaXmnIggPiByYWlnZXRzdVwgOwor6IO45LitID4ga3lvdWNodXVcIDsKK+S4gOeoriA+IGhpdG9rdXNhXCA7Civnv5Lnhp8gPiBzaHV1anVrdVwgOwor5piO6YGUID4gbWVpdGF0c3VcIDsKK+aeoeW9oiA+IG1hc3VnYXRhXCA7Civlrr/kvr8gPiBzaHVrdWJlblwgOwor5a+G5LukID4gbWl0c3VyZWlcIDsKK+eJuei8ryA+IHRva3VzaHV1XCA7CivkuIDnp5IgPiBpY2hpYnlvdVwgOwor5Li754mpID4gc2h1YnV0c3VcIDsKK+e+pOeZuiA+IGd1bnBhdHN1XCA7Civmm7LnkIMgPiBreW9ra3l1dVwgOwor5pep6ZCYID4gaGF5YWdhbmVcIDsKK+izouWvnyA+IGtlbnNhdHN1XCA7CivkuozmoYEgPiBmdXRha2V0YVwgOwor5p2l5pelID4gcmFpbmljaGlcIDsKK+aYh+mAsiA+IHNob3VzaGluXCA7CivniKrpn7MgPiB0c3VtYW90b1wgOwor5pat6auqID4gZGFucGF0c3VcIDsKK+absueOiSA+IG1hZ2F0YW1hXCA7CivlrqLliIYgPiBreWFrdWJ1blwgOwor5LiY55a5ID4ga3l1dXNoaW5cIDsKK+S9leS9lSA+IG5hbmluYW5pXCA7Civog4blipsgPiB0YW5yeW9rdVwgOwor5LqL5p+EID4ga290b2dhcmFcIDsKK+S7ruWuriA+IGthcmltaXlhXCA7Civmm7jniakgPiBzaG9tb3RzdVwgOwor54mb6YWqID4gZ3l1dXJha3VcIDsKK+eLrOe/kiA+IGRva3VzaHV1XCA7Civku67lroUgPiBrYXJpdGFrdVwgOwor5a2Q5a6dID4ga29kYWthcmFcIDsKK+mfruiRsSA+IG5pcmFuZWdpXCA7CivkvZfkurogPiB3YWJpYml0b1wgOwor5LuP5byPID4gYnVzc2hpa2lcIDsKK+mguOetiyA+IGt1YmlzdWppXCA7Civosqrmhb4gPiBkb24nJ3lva3VcIDsKK+ism+mHiCA+IGtvdXNoYWt1XCA7CivkuInnm7QgPiBzYW5jaG9rdVwgOwor5L2V5LqLID4gbmFuaWdvdG9cIDsKK+iCieWkqiA+IG5pa3VidXRvXCA7CivkuInnmb4gPiBzYW5ieWFrdVwgOwor5peP6ZW3ID4gem9rdWNob3VcIDsKK+eJueizniA+IHRva3VzaG91XCA7CivlrqLlg6cgPiBreWFrdXNvdVwgOwor5Lqk5o6lID4ga291c2V0c3VcIDsKK+mhlOedgCA+IGdhbmNoYWt1XCA7CivkubPmpa0gPiBueXV1Z3lvdVwgOwor5pel6YqAID4gbmljaGlnaW5cIDsKK+aeleW4rSA+IGNoaW5zZWtpXCA7Civos5PlrqIgPiBoaW5reWFrdVwgOwor5a6f5YOPID4gaml0c3V6b3VcIDsKK+Wun+WDjSA+IGppdHN1ZG91XCA7Civlrq7kurogPiBtaXlhYml0b1wgOwor5pen6YeMID4gZnVydXNhdG9cIDsKK+S4gOeavyA+IGhpdG9zYXJhXCA7CivkuIDnmq4gPiBoaXRva2F3YVwgOwor5LqM5pa5ID4gZnV0YWthdGFcIDsKK+S4iueVpSA+IGpvdXJ5YWt1XCA7Civos4rlsIYgPiB6b2t1c2hvdVwgOwor6LKr5b65ID4ga2FudGV0c3VcIDsKK+aeouWvhiA+IHN1dW1pdHN1XCA7CivkuIDnmZYgPiBoaXRva3VzZVwgOwor55CD5a+pID4ga3l1dXNoaW5cIDsKK+WuruS4rSA+IGt5dXVjaHV1XCA7CivosYbmrrsgPiBtYW1lZ2FyYVwgOwor54++5bC6ID4gZ2Vuc2hha3VcIDsKK+S6uuW9sSA+IGhpdG9rYWdlXCA7CivlrqLkvZMgPiBreWFrdXRhaVwgOwor5a6f5L6LID4gaml0c3VyZWlcIDsKK+acqOanjCA+IGtpZHp1Y2hpXCA7Civku6Tlp6ogPiByZWl0ZXRzdVwgOwor54++5a6fID4gZ2Vuaml0c3VcIDsKK+iCh+WbvSA+IGNob3Vrb2t1XCA7CivlrqLkurogPiBreWFrdWppblwgOwor6Zy56Z2CID4gaGVraXJla2lcIDsKK+itsuiRiSA+IHl1enVyaWhhXCA7CivosLfmsLQgPiB0YW5pbWl6dVwgOwor6LGq5pelID4gZ291bmljaGlcIDsKK+acjeavkiA+IGZ1a3Vkb2t1XCA7Civogbfln58gPiBzaG9rdWlraVwgOwor5pq055m6ID4gYm91aGF0c3VcIDsKK+S6rOW9oiA+IGt5b3VnYXRhXCA7Civpo5/mjIcgPiBzaG9rdXNoaVwgOwor54m06KemID4gdGVpc2hva3VcIDsKK+aXpei8qiA+IG5pY2hpcmluXCA7CivogqnlhYggPiBrYXRhc2FraVwgOwor5aSW6bCQID4gc290b3dhbmlcIDsKK+mgu+eZuiA+IGhpbnBhdHN1XCA7CivkvK/ku7IgPiBoYWt1Y2h1dVwgOwor5pys5pysID4gbW90b21vdG9cIDsKK+acrOacqyA+IGhvbm1hdHN1XCA7CivkuIfniakgPiBiYW5tb3RzdVwgOwor54ut56qEID4ga3lvdXNha3VcIDsKK+eOieadryA+IGd5b2t1aGFpXCA7CivnjK7niakgPiBrZW5tb3RzdVwgOwor5Lq65bGxID4gaGl0b3lhbWFcIDsKK+aXqei2syA+IGhheWFhc2hpXCA7Civkuobmib8gPiByeW91c2hvdVwgOwor5Lit5rWBID4gY2h1dXJ5dXVcIDsKK+mcp+mbqCA+IGtpcmlzYW1lXCA7CivlpKfpo58gPiB0YWlzaG9rdVwgOwor5paH6aO+ID4gYnVuc2hva3VcIDsKK+izouWTsiA+IGtlbnRldHN1XCA7CivniYfotrMgPiBrYXRhYXNoaVwgOwor5LiA54mHID4gaGl0b2hpcmFcIDsKK+acrOaXpSA+IGhvbmppdHN1XCA7Civkub7mi60gPiBrYXJhYnVraVwgOwor6aOf5oSfID4gc2hva3VrYW5cIDsKK+aVtOmrqiA+IHNlaWhhdHN1XCA7Civku4/lo4cgPiBidXRzdWRhblwgOwor5a2m5YmyID4gZ2FrdXdhcmlcIDsKK+aVtOmqqCA+IHNlaWtvdHN1XCA7CivotIvkvZwgPiBuaXNlc2FrdVwgOwor5a2m5YmHID4gZ2FrdXNva3VcIDsKK+absuawtCA+IGt5b2t1c3VpXCA7CivpoqjmnIggPiBmdXVnZXRzdVwgOwor6Zyc6ZuqID4gc291c2V0c3VcIDsKK+S5seaOmCA+IHJhbmt1dHN1XCA7CivkuK3mr5IgPiBjaHV1ZG9rdVwgOwor5Lmd5pelID4ga29rb25va2FcIDsKK+aXpeixqiA+IG5pY2hpZ291XCA7Civku4/loIIgPiBidXRzdWRvdVwgOwor5Lmd5pePID4ga3l1dXpva3VcIDsKK+mfv+esmyA+IGt5b3V0ZWtpXCA7Civoqq3pn78gPiB5b21pa3lvdVwgOwor6Kyb6KqsID4ga291c2V0c3VcIDsKK+eJm+inkiA+IGd5dXVrYWt1XCA7CivlpKfpm6ogPiB0YWlzZXRzdVwgOwor5aSW6aOfID4gZ2Fpc2hva3VcIDsKK+iAs+WxjiA+IG1pbWlrdXNvXCA7CivlpJXpo68gPiB5dXVtZXNoaVwgOwor6IG35ZCNID4gc2hva3VtZWlcIDsKK+aZqeevgCA+IGJhbnNldHN1XCA7CivkuozlvbkgPiBmdXRheWFrdVwgOwor5aSV6aOfID4geXV1c2hva3VcIDsKK+S6jOW9oiA+IGZ1dGFuYXJpXCA7CivmmKXoj4ogPiBzaHVuZ2lrdVwgOwor5a2m5YOVID4gZ2FrdWJva3VcIDsKK+ixhuaWmSA+IG1hbWVyeW91XCA7CivnjonmkacgPiBneW9rdXNhaVwgOwor5pyd5pW1ID4gY2hvdXRla2lcIDsKK+aVo+mrqiA+IHNhbnBhdHN1XCA7CivorI7orI4gPiBuYXpvbmF6b1wgOwor5bGx44CFID4geWFtYXlhbWFcIDsKK+WmhOiqrCA+IG1vdXNldHN1XCA7CivpoJPnnYAgPiB0b25jaGFrdVwgOwor5LuP5Zm4ID4gZnV0c3V0b25cIDsKK+WmluihkyA+IHlvdWp1dHN1XCA7Civpm5vps6UgPiBoaW5hZG9yaVwgOwor6Zu76aO+ID4gZGVuc2hva3VcIDsKK+WtpuS/riA+IGdha3VzaHV1XCA7Civml6foqLMgPiBreXV1eWFrdVwgOwor5pyI5pyrID4gdHN1a2l6dWVcIDsKK+eLrOeZvSA+IGRva3VoYWt1XCA7CivnjJvng4ggPiBtb3VyZXRzdVwgOwor54iq6LehID4gdHN1bWVhdG9cIDsKK+S7ruWInSA+IGthcmlzb21lXCA7CivmnaXlrqIgPiByYWlreWFrdVwgOwor5pyI5pucID4gZ2V0c3V5b3VcIDsKK+e/jOacnSA+IHlva3VjaG91XCA7CivnuYHpm5EgPiBoYW56YXRzdVwgOwor6IG35Yi2ID4gc2hva3VzZWlcIDsKK+aWsOmAsiA+IHNoaW5zaGluXCA7CivogbfliIYgPiBzaG9rdWJ1blwgOwor5Lm+5byPID4ga2Fuc2hpa2lcIDsKK+mdouitmCA+IG1lbnNoaWtpXCA7CivkurrlnqMgPiBoaXRvZ2FraVwgOwor5aSx6YyvID4gc2hpc3Nha3VcIDsKK+S5heaWuSA+IGhpc2FrYXRhXCA7CivmnIjmmI4gPiBnZXRzdW1laVwgOwor5aOw6auYID4ga293YWRha2FcIDsKK+irlui/sCA+IHJvbmp1dHN1XCA7Civnv4zmmKUgPiB5b2t1c2h1blwgOwor6Ku+6Ku+ID4gZGFrdWRha3VcIDsKK+itmOiAhSA+IHNoaWtpc2hhXCA7Civku5Xlj6MgPiBzaGlrdWNoaVwgOwor5Lit5qC4ID4gY2h1dWtha3VcIDsKK+ixoeW+tCA+IHNob3VjaG91XCA7Civnj43lppkgPiBjaGlubXlvdVwgOwor6LKd5aGaID4ga2FpZHp1a2FcIDsKK+iBluWTsiA+IHNlaXRldHN1XCA7CivpnaLoqbAgPiBtZW5raXRzdVwgOwor57ie6aasID4gc2hpbWF1bWFcIDsKK+mjn+WwvSA+IHNob2t1amluXCA7Civos63kuosgPiBrYWtlZ290b1wgOwor5LiA5rWBID4gaWNoaXJ5dXVcIDsKK+S4reafhCA+IGNodXVnYXJhXCA7Civmm7jmnK0gPiBzaG9zYXRzdVwgOwor5aaZ6JasID4gbXlvdXlha3VcIDsKK+S4u+aXpSA+IHNodWppdHN1XCA7Civoq7joq7ggPiBtb3JvbW9yb1wgOwor6Z2Z6KyQID4gc2VpaGl0c3VcIDsKK+iruOiqrCA+IHNob3NldHN1XCA7Civos4flipsgPiBzaGlyeW9rdVwgOwor5aWz6KaqID4gb24nJ25hb3lhXCA7Civmm7Tmm7QgPiBzYXJhc2FyYVwgOwor5p2T5a2QID4gc2hha3VzaGlcIDsKK+absuabsiA+IGt1bWFndW1hXCA7CivmmbrnlaUgPiBjaGlyeWFrdVwgOwor5piO6ImyID4gbWVpc2hva3VcIDsKK+aXpeidlSA+IG5pc3Nob2t1XCA7Civku5blh7ogPiB0YXNodXRzdVwgOwor6Zuo6Z20ID4gYW1hZ3V0c3VcIDsKK+acrOW8jyA+IGhvbnNoaWtpXCA7Civku4/liY0gPiBidXRzdXplblwgOwor6Kq/6YCyID4gY2hvdXNoaW5cIDsKK+mbqumbsiA+IHl1a2lndW1vXCA7Civpm6jpnLAgPiBhbWVhcmFyZVwgOwor5LuP5Yi5ID4gYnVzc2V0c3VcIDsKK+acqOW9qyA+IG1va3VjaG91XCA7CivmmpHnhrEgPiBzaG9uZXRzdVwgOwor54mp6ImyID4gYnVzc2hva3VcIDsKK+iBt+S6uiA+IHNob2t1bmluXCA7Civoq6forJQgPiBrYWlneWFrdVwgOwor54us54m5ID4gZG9rdXRva3VcIDsKK+WksemAnyA+IHNoaXNzb2t1XCA7CivmmKXnua0gPiBoYXJ1bWF5dVwgOwor6aSe5YilID4gc2VuYmV0c3VcIDsKK+eGsemhmCA+IG5ldHN1Z2FuXCA7CivmnKvlubQgPiBtYXRzdW5lblwgOwor5auh5a2rID4gY2hha3Vzb25cIDsKK+eJqeiHrSA+IG1vbm9ndXNhXCA7CivogZbliKUgPiBzZWliZXRzdVwgOwor5auh5a2QID4gY2hha3VzaGlcIDsKK+irpOirpCA+IGdha3VnYWt1XCA7Civni6HnjL4gPiBrb3VrYXRzdVwgOwor6ICD5a+fID4ga291c2F0c3VcIDsKK+mbkemjnyA+IHphc3Nob2t1XCA7CivkuLvmjIEgPiBzaHVtb2NoaVwgOwor5ayw5YWQID4gbWlkb3JpZ29cIDsKK+e4pumVtyA+IHRhdGVuYWdhXCA7Civmlr3oqK0gPiBzaGlzZXRzdVwgOwor54uC55qEID4ga3lvdXRla2lcIDsKK+S6ieWlqiA+IHNvdWRhdHN1XCA7Civpno/ohpwgPiBreW91bWFrdVwgOwor5LuP5YOPID4gYnV0c3V6b3VcIDsKK+iAgeWunyA+IHJvdWppdHN1XCA7CivlpKfpgIYgPiBkYWlneWFrdVwgOwor5pel6JOuID4gbmljaGlyZW5cIDsKK+eGsembtyA+IG5ldHN1cmFpXCA7Civoqabpo58gPiBzaGlzaG9rdVwgOwor5pW36YeRID4gc2hpa2lraW5cIDsKK+S6uuWKmyA+IGppbnJ5b2t1XCA7CivkuZ3lt54gPiBreXV1c2h1dVwgOwor5paw6Kq/ID4gc2hpbmNob3VcIDsKK+mjn+WggiA+IHNob2t1ZG91XCA7Civlq6HlprsgPiBjaGFrdXNhaVwgOwor5LiA5qOfID4gaGl0b211bmVcIDsKK+Wksei3oSA+IHNoaXNzZWtpXCA7CivkurrliLogPiBqaW5zYXNoaVwgOwor6Zu76YmEID4gZGVudGV0c3VcIDsKK+S6uuWIpSA+IG5pbmJldHN1XCA7Civoq5boqqwgPiByb25zZXRzdVwgOwor5pys5bGAID4gaG9ua3lva3VcIDsKK+S4reaMhyA+IG5ha2F5dWJpXCA7CivosrjlgJ8gPiB0YWlzaGFrdVwgOwor542y5b6XID4ga2FrdXRva3VcIDsKK+irluipsCA+IHJvbmtpdHN1XCA7CivkuIDmoYEgPiBoaXRva2V0YVwgOwor5pa96KGTID4gc2hpanV0c3VcIDsKK+mhm+acqyA+IHRlbm1hdHN1XCA7CivosqvlhaUgPiBrYW4nJ255dXVcIDsKK+iyoeWKmyA+IHphaXJ5b2t1XCA7Civoqp7pg6ggPiBrYXRhcmliZVwgOwor57+S5b6XID4gc2h1dXRva3VcIDsKK+S4ieabsiA+IHNhbmt5b2t1XCA7Civmma/niakgPiBrZWlidXRzdVwgOwor5pa56KGTID4gaG91anV0c3VcIDsKK+eJuee0hCA+IHRva3V5YWt1XCA7CivkuIDmnpogPiBoaXRvaGlyYVwgOwor57mw6KiAID4ga3VyaWdvdG9cIDsKK+eJm+iCiSA+IGd5dXVuaWt1XCA7CivmnYnlnqMgPiBzdWdpZ2FraVwgOwor546L5a6kID4gb3VzaGl0c3VcIDsKK+S4gOadnyA+IGhpdG90YWJhXCA7CivkuqzliocgPiBreW91Z2VraVwgOwor54mh576KID4gb2hpdHN1amlcIDsKK+iwt+W6lSA+IHRhbml6b2tvXCA7CivkuIDmnKggPiBpY2hpYm9rdVwgOwor5Lq65YKRID4gamlua2V0c3VcIDsKK+mfnOeVpSA+IHRvdXJ5YWt1XCA7Civml6foh6MgPiBreXV1c2hpblwgOwor5pio56eLID4gc2FrdXNodXVcIDsKK+WlveiJsiA+IGtvdXNob2t1XCA7CivosLflt50gPiB0YW5pZ2F3YVwgOwor5LuE5LuEID4gaG9ub2Jvbm9cIDsKK+iyt+S4uyA+IGthaW51c2hpXCA7CivkuIDmmYIgPiBoaXRvdG9raVwgOwor5piH57WmID4gc2hvdWt5dXVcIDsKK+eJh+iGnSA+IGthdGFoaXphXCA7CivkuZflrqIgPiBqb3VreWFrdVwgOwor5Li45b2iID4gbWFydWdhdGFcIDsKK+mjsuWKqSA+IG5vbWlzdWtlXCA7Civmm7LmgqogPiBreW9rdWFrdVwgOwor5piH57SaID4gc2hvdWt5dXVcIDsKK+S4gOaXlyA+IGhpdG9oYXRhXCA7CivkuIDml48gPiBpY2hpem9rdVwgOwor6aOf5ZOBID4gc2hva3VoaW5cIDsKK+eJqee0jSA+IGJ1dHN1bm91XCA7CivlpLHoqr8gPiBzaGl0Y2hvdVwgOwor54Wu6a2aID4gbml6YWthbmFcIDsKK+WkseiqniA+IHNoaXRzdWdvXCA7CivogLPlhYMgPiBtaW1pbW90b1wgOwor5pep6ICzID4gaGF5YW1pbWlcIDsKK+S4uOW6lSA+IG1hcnV6b2tvXCA7CivpnaLoibIgPiBtZW5zaG9rdVwgOwor5Lq65Lq6ID4gaGl0b2JpdG9cIDsKK+aVo+mAuCA+IHNhbicnaXRzdVwgOwor5Lit5b+DID4gY2h1dXNoaW5cIDsKK+eJh+iCjCA+IGthdGFoYWRhXCA7CivoqbPpjLIgPiBzaG91cm9rdVwgOwor5auh5ZejID4gY2hha3VzaGlcIDsKK+abuOW8jyA+IHNob3NoaWtpXCA7CivkurrkuosgPiBoaXRvZ290b1wgOwor57eP6auqID4gc291aGF0c3VcIDsKK+acjeWxniA+IGZ1a3V6b2t1XCA7CivnibnnqK4gPiB0b2t1ZGFuZVwgOwor5Lit5b2iID4gY2h1dWdhdGFcIDsKK+eJh+iAsyA+IGthdGFtaW1pXCA7Civml6fnv5IgPiBreXV1c2h1dVwgOwor5Lq65LitID4gaGl0b25ha2FcIDsKK+S6uuS4piA+IGhpdG9uYW1pXCA7Civnibnnp7AgPiB0b2t1c2hvdVwgOwor5LiA5pKDID4gaWNoaWdla2lcIDsKK+S4reW6rSA+IG5ha2FuaXdhXCA7CivlsJHjgIUgPiBzaG91c2hvdVwgOwor5aeL55m6ID4gc2hpaGF0c3VcIDsKK+isnee1tiA+IHNoYXpldHN1XCA7Civkub7lkrMgPiBrYXJhemVraVwgOwor5Lit5bmVID4gbmFrYW1ha3VcIDsKK+S4reW5hSA+IGNodXVoYWJhXCA7Civoq7johp0gPiBtb3JvaGl6YVwgOwor6Ku46IaaID4gbW9yb2hhZGFcIDsKK+S4reW4rSA+IG5ha2FzZWtpXCA7CivmnJ3lpJUgPiBjaG91c2VraVwgOwor54mn56ybID4gYm9rdXRla2lcIDsKK+S4oeW+lyA+IHJ5b3V0b2t1XCA7CivnuKbou7ggPiB0YXRlamlrdVwgOwor6Z2S6ImyID4gc2Vpc2hva3VcIDsKK+mjn+WJjSA+IHNob2t1emVuXCA7Civlp6bniakgPiBrYW5idXRzdVwgOwor6aOf5Yi7ID4gc2hva2tva3VcIDsKK+eOieWeoyA+IHRhbWFnYWtpXCA7Civpm4bpjLIgPiBzaHV1cm9rdVwgOwor6Zuy6LazID4ga3Vtb2FzaGlcIDsKK+e3kemiqCA+IHJ5b2t1ZnV1XCA7CivniannqK4gPiBtb25vZGFuZVwgOwor5Lim5bmFID4gbmFtaWhhYmFcIDsKK+WmmeetliA+IG15b3VzYWt1XCA7CivpnZnohIggPiBqb3VteWFrdVwgOwor54mp56iOID4gYnV0c3V6ZWlcIDsKK+S4u+WuoiA+IHNodWt5YWt1XCA7Civpo7zkuLsgPiBrYWludXNoaVwgOwor6Ku46IKMID4gbW9yb2hhZGFcIDsKK+S4puW3viA+IG5hbWloYWJhXCA7CivkuqTkuqQgPiBrb21vZ29tb1wgOwor54iG6JasID4gYmFrdXlha3VcIDsKK+S4reWztiA+IG5ha2FqaW1hXCA7CivmlYXpg7cgPiBmdXJ1c2F0b1wgOwor5LqL5YWxID4ga290b2RvbW9cIDsKK+S4jeaCiSA+IGZ1c2hpdHN1XCA7Civml6fntIQgPiBreXV1eWFrdVwgOwor54mn56WeID4gYm9rdXNoaW5cIDsKK+e3kemdkiA+IHJva3VzaG91XCA7CivmlrnoiJ8gPiBoYWtvYnVuZVwgOwor6aOv5LqLID4gbWFtYWdvdG9cIDsKK+S4reWwjyA+IGNodXVzaG91XCA7Civmm7LlsIQgPiBreW9rdXNoYVwgOwor6ZuB6YeRID4ga2FyaWdhbmVcIDsKK+aXpeexsyA+IG5pY2hpYmVpXCA7CivnhLzps6UgPiB5YWtpdG9yaVwgOwor6Ky555u0ID4ga2luY2hva3VcIDsKK+S4reWtpiA+IGNodXVnYWt1XCA7Civnt7TpiYQgPiByZW50ZXRzdVwgOwor6Kq/6JasID4gY2hvdXlha3VcIDsKK+WkieiqrCA+IGhlbnNldHN1XCA7CivmlbXopbIgPiB0ZWtpc2h1dVwgOwor5pS+6YCQID4gaG91Y2hpa3VcIDsKK+S4ieW9uSA+IHNhbicneWFrdVwgOwor54Wp6ZuRID4gaGFuemF0c3VcIDsKK+iqjeitmCA+IG5pbnNoaWtpXCA7Civml6fnq6AgPiBreXV1c2hvdVwgOwor57eR6ZaAID4gcnlva3Vtb25cIDsKK+adkeS6uiA+IG11cmFiaXRvXCA7CivkuIvluK8gPiBzaGl0YW9iaVwgOwor5LiA5b25ID4gaGl0b3lha3VcIDsKK+ixquWCkSA+IGdvdWtldHN1XCA7CivkuovkuosgPiBrb3RvZ290b1wgOwor57a/6ZuyID4gd2F0YWd1bW9cIDsKK+S5seWFpSA+IHJhbicnbnl1dVwgOwor57a/6ZuqID4gd2F0YXl1a2lcIDsKK+S6iOS6iCA+IGthbmVnYW5lXCA7Civml6fnp7AgPiBreXV1c2hvdVwgOwor5LiW5bGAID4gc2Vpa3lva3VcIDsKK+e3tOmBlCA+IHJlbnRhdHN1XCA7CivmmofmmocgPiBoaW1haGltYVwgOwor5LiA5buJID4gaGl0b2thZG9cIDsKK+mahumahiA+IHJ5dXVyeXV1XCA7CivkuIDluqYgPiBoaXRvdGFiaVwgOwor6ZqF6ZqFID4gc3VtaXp1bWlcIDsKK+S4gOW5tCA+IGhpdG90b3NlXCA7CivpnZnnspsgPiBzZWlzaHVrdVwgOwor5aGp6a6tID4gc2hpb3pha2VcIDsKK+aXj+exjSA+IHpva3VzZWtpXCA7CivlpKfokpwgPiBuaW4nJ25pa3VcIDsKK+S4gOW5lSA+IGhpdG9tYWt1XCA7CivkuLjlnosgPiBtYXJ1Z2F0YVwgOwor5aWJ6IG3ID4gaG91c2hva3VcIDsKK+i1q+OAhSA+IGtha3VrYWt1XCA7CivkuIDlt7sgPiBoaXRvbWFraVwgOwor6Zuj6KmwID4gbmFua2l0c3VcIDsKK+mbgOi6jSA+IGpha3V5YWt1XCA7CivkuK3loZcgPiBuYWthbnVyaVwgOwor6Zmq6aOfID4gYmFpc2hva3VcIDsKK+mgjOaYpSA+IHNob3VzaHVuXCA7CivkuIflsYsgPiB5b3JvenV5YVwgOwor5Lit5Z6jID4gbmFrYWdha2lcIDsKK+S4reWeiyA+IGNodXVnYXRhXCA7CivpoqjlipsgPiBmdXVyeW9rdVwgOwor5LiK5a6iID4gam91a3lha3VcIDsKK+S5seS8kCA+IHJhbmJhdHN1XCA7Civmmbrml6UgPiBjaGluaWNoaVwgOwor54yr5bGeID4gbmVrb3pva3VcIDsKK+WvkuOAhSA+IHNhbXV6YW11XCA7CivkuIDlsbEgPiBoaXRveWFtYVwgOwor5Lit5Zu9ID4gY2h1dWdva3VcIDsKK+WkqeiJsiA+IHRlbnNob2t1XCA7CivpoIPml6UgPiBrZWlqaXRzdVwgOwor6Kmz6Ki7ID4gc2hvdWNodXVcIDsKK+mbkeirhyA+IHphdHN1ZGFuXCA7Civml4/np7AgPiB6b2t1c2hvdVwgOwor5pel55u0ID4gbml0Y2hva3VcIDsKK+e3kemFkiA+IHJ5b2t1c2h1XCA7CivkuIDlrqQgPiBpc3NoaXRzdVwgOwor5aSq6IW/ID4gZnV0b21vbW9cIDsKK+mgmOaJvyA+IHJ5b3VzaG91XCA7Civmlq3ntbYgPiBkYW56ZXRzdVwgOwor5LiA5a2QID4gaGl0b3JpZ29cIDsKK+Wnq+anmCA+IGhpbWVzYW1hXCA7Civpm7vok4QgPiBkZW5jaGlrdVwgOwor5pyr5LujID4gbWF0c3VkYWlcIDsKK+WjnOipsCA+IGJpbmR6dW1lXCA7CivoqIDpnIogPiBrb3RvZGFtYVwgOwor5Lih5Zu9ID4gcnlvdWdva3VcIDsKK+S4u+WPliA+IHNodXVkb3JpXCA7Civpm6jom5kgPiBhbWFnYWVydVwgOwor54af6KqtID4ganVrdWRva3VcIDsKK+eOieS9kyA+IGd5b2t1dGFpXCA7CivniafniZsgPiBib2t1Z3l1dVwgOwor5aG+6ZW3ID4ganVrdWNob3VcIDsKK+WkquiCoSA+IGZ1dG9tb21vXCA7CivmnInlipsgPiB5dXVyeW9rdVwgOwor54ax6KGAID4gbmVra2V0c3VcIDsKK+aVo+iWrCA+IHNhbicneWFrdVwgOwor546J5LujID4gZ3lva3VkYWlcIDsKK+WkqeiBtyA+IHRlbnNob2t1XCA7CivmlofohIggPiBidW5teWFrdVwgOwor6ZuG6Ki7ID4gc2h1dWNodXVcIDsKK+malOmAsSA+IGtha3VzaHV1XCA7Civml6XnlKggPiBuaWNoaXlvdVwgOwor5pu45Y+WID4ga2FraXRvcmlcIDsKK+S4u+WKmyA+IHNodXJ5b2t1XCA7CivmnIjlhoUgPiBnZXRzdW5haVwgOwor5LiD5aScID4gc2hpY2hpeWFcIDsKK+S5nuS4kCA+IGtvdHN1Z2FpXCA7CivkuIPlpJUgPiB0YW5hYmF0YVwgOwor6Kyh54mpID4gdXRhaW1vbm9cIDsKK+mgu+WwvyA+IGhpbicnbnlvdVwgOwor5aSp572wID4gdGVuYmF0c3VcIDsKK+mdoueZvSA+IG9tb3NoaXJvXCA7Civmm7LlkI0gPiBreW9rdW1laVwgOwor57eP6L2EID4gc291a2F0c3VcIDsKK+S4reWPpCA+IGNodXVidXJ1XCA7CivkvZXjgIUgPiBuYW5pbmFuaVwgOwor5LiA5aSxID4gaXNzaGl0c3VcIDsKK+eLvOW6pyA+IG9va2FtaXphXCA7CivoqLzot6EgPiBzaG91c2VraVwgOwor5aWu55m6ID4gZnVucGF0c3VcIDsKK+aWsOepgCA+IHNoaW5rb2t1XCA7CivoqZXoqLsgPiBoeW91Y2h1dVwgOwor5aSJ6ImyID4gaGVuc2hva3VcIDsKK+aYjua7hSA+IG1laW1ldHN1XCA7Civpmbjph6MgPiBva2FkenVyaVwgOwor6KyA55WlID4gYm91cnlha3VcIDsKK+S4gOWhqSA+IGhpdG9zaGlvXCA7CivpoqjkuIogPiBrYXpha2FtaVwgOwor5aSW6IKhID4gc290b21hdGFcIDsKK+e/kuS/lyA+IHNodXV6b2t1XCA7CivpmY3pm6ogPiBrb3VzZXRzdVwgOwor54us5b6XID4gZG9rdXRva3VcIDsKK+e1tumjnyA+IHplc3Nob2t1XCA7Civmm7jliJ0gPiBrYWtpem9tZVwgOwor6KiT6YeIID4ga3Vuc2hha3VcIDsKK+iqpue/kiA+IHNob3VzaHV1XCA7CivniIbnrJEgPiBiYWt1c2hvdVwgOwor57+S5L2cID4gc2h1dXNha3VcIDsKK+abuOWGiiA+IHNob3NhdHN1XCA7Civnibnms6ggPiB0b2t1Y2h1dVwgOwor5pyI5L6LID4gZ2V0c3VyZWlcIDsKK+aapuWtpiA+IHJla2lnYWt1XCA7CivkuLjlgrcgPiB0YW1ha2l6dVwgOwor5aWJ56WdID4gaG91c2h1a3VcIDsKK+mgjOW+syA+IHNob3V0b2t1XCA7CivpmLLpo58gPiBib3VzaG9rdVwgOwor54iq55eVID4gdHN1bWVhdG9cIDsKK+S4reWFsSA+IGNodXVreW91XCA7CivkuKbliJcgPiBoZWlyZXRzdVwgOwor5LmF5LmFID4gaGlzYWJpc2FcIDsKK+e3keixhiA+IHJ5b2t1dG91XCA7Civlpb3niakgPiBrb3VidXRzdVwgOwor6Zuy6ISaID4ga3Vtb2FzaGlcIDsKK+mdkueVsyA+IGFvZGF0YW1pXCA7Civpm5voj4ogPiBoaW5hZ2lrdVwgOwor5aSx562WID4gc2hpc3Nha3VcIDsKK+aZguaZgiA+IHRva2lkb2tpXCA7CivkuK3lgrcgPiBjaHV1c2hvdVwgOwor5aSx56yRID4gc2hpc3Nob3VcIDsKK+aVl+iJsiA+IGhhaXNob2t1XCA7Civpm6rohpogPiB5dWtpaGFkYVwgOwor6Zuj6ImyID4gbmFuc2hva3VcIDsKK+aal+WupCA+IGFuc2hpdHN1XCA7CivpmbXovrEgPiByeW91am9rdVwgOwor5LiL5ZGzID4gc2hpdGFhamlcIDsKK+e1kOmrqiA+IGtlcHBhdHN1XCA7CivnhLzphY4gPiBzaG91Y2h1dVwgOwor5pi85pmCID4gaGlydWRva2lcIDsKK+WjsOiJsiA+IHNlaXNob2t1XCA7CivkuLjkuosgPiBtYXJ1Z290b1wgOwor5paH56+AID4gYnVuc2V0c3VcIDsKK+aWh+eusSA+IGZ1bWliYWtvXCA7CivlpKfnrZIgPiBvb2R6dXRzdVwgOwor5Li45Li4ID4gbWFydW1hcnVcIDsKK+mYsumbqiA+IGJvdXNldHN1XCA7Civpm6rogowgPiB5dWtpaGFkYVwgOwor6Kiz6KqtID4geWFrdWRva3VcIDsKK+S4g+WRsyA+IHNoaWNoaW1pXCA7CivmlrnnlaUgPiBob3VyeWFrdVwgOwor5Li45LiAID4gbWFydWljaGlcIDsKK+eLreWwjyA+IGt5b3VzaG91XCA7CivkuK3kvY4gPiBuYWthYmlrdVwgOwor57eP6KqsID4gc291c2V0c3VcIDsKK+Wni+acqyA+IHNoaW1hdHN1XCA7CivmlofnrYYgPiBidW5waXRzdVwgOwor5aSn56ulID4gb293YXJhd2FcIDsKK+mdkueOiSA+IHNlaWd5b2t1XCA7CivkuKHlgbQgPiByeW91c29rdVwgOwor5aSx56WeID4gc2hpc3NoaW5cIDsKK+mbhuiQvSA+IHNodXVyYWt1XCA7CivpnZnniakgPiBzZWlidXRzdVwgOwor5LiH5Y2SID4gYmFuc290c3VcIDsKK+S4reS6rCA+IGNodXVreW91XCA7CivkuIDlkJEgPiBoaXRhc3VyYVwgOwor54us5a2mID4gZG9rdWdha3VcIDsKK+aYqOacnSA+IHNha3VjaG91XCA7CivkuIDlj6IgPiBoaXRvbXVyYVwgOwor5puy5LqLID4ga3VzZWdvdG9cIDsKK+mbkeiJsiA+IHphc3Nob2t1XCA7CivkuK3kuK0gPiBuYWthbmFrYVwgOwor5a6J44CFID4geWFzdXlhc3VcIDsKK+aVmee/kiA+IGt5b3VzaHV1XCA7CivpmZ7pgLIgPiBzaG91c2hpblwgOwor6aGe5YilID4gcnVpYmV0c3VcIDsKK+e4rue3rCA+IGNoaXJpbWVuXCA7CivmmKjmmoEgPiBzYWt1Z3lvdVwgOwor57WQ6aGYID4ga2VjaGlnYW5cIDsKK+aYqOaYpSA+IHNha3VzaHVuXCA7CivkuIfliKUgPiBiYW5iZXRzdVwgOwor54S86LqrID4gc2hvdXNoaW5cIDsKK+mggeWyqSA+IGtldHN1Z2FuXCA7CivkuKbkuKYgPiBuYW1pbmFtaVwgOwor57im57ieID4gdGF0ZWppbWFcIDsKK+iml+mtlCA+IG5vem9raW1hXCA7CivlopfoqK0gPiB6b3VzZXRzdVwgOwor5LiA5YmyID4gaWNoaXdhcmlcIDsKK+WkleeriyA+IHl1dWRhY2hpXCA7CivloanovpsgPiBzaGlva2FyYVwgOwor6Kej6YeIID4ga2Fpc2hha3VcIDsKK+aXp+a1gSA+IGt5dXVyeXV1XCA7CivkuKHkuKEgPiByeW91cnlvdVwgOwor6K2m5oqcID4ga2VpYmF0c3VcIDsKK+WkieevgCA+IGhlbnNldHN1XCA7Civntbnph50gPiBraW51YmFyaVwgOwor542E5LitID4gZ29rdWNodXVcIDsKK+S4gOWFpSA+IGhpdG9zaGlvXCA7CivkuIDlhYggPiBoaXRvbWF6dVwgOwor5piH5qC8ID4gc2hvdWtha3VcIDsKK+e5reeOiSA+IG1heXVkYW1hXCA7CivmmI7mnIggPiBtZWlnZXRzdVwgOwor6Z6t5pK7ID4gYmVudGF0c3VcIDsKK+mbqOeykiA+IGFtZXRzdWJ1XCA7CivlopfooYAgPiB6b3VrZXRzdVwgOwor5pq05YqbID4gYm91cnlva3VcIDsKK+ims+mWsiA+IGthbicnZXRzdVwgOwor5piT5piTID4geWFzdXlhc3VcIDsKK+e3keiXuyA+IHJ5b2t1c291XCA7Civlo67ntbYgPiBzb3V6ZXRzdVwgOwor5pWZ57GNID4ga3lvdXNla2lcIDsKK+mgmOWbvSA+IHJ5b3Vnb2t1XCA7CivmmI7mmKUgPiBteW91c2h1blwgOwor5LiH5LujID4geW9yb3p1eW9cIDsKK+aUr+iEiCA+IHNoaW15YWt1XCA7Civni6zlm70gPiBkb2t1a29rdVwgOwor5pKw6L+wID4gc2VuanV0c3VcIDsKK+S4ieS4iyA+IHNhbnNoaXRhXCA7CivlpKfnlaUgPiB0YWlyeWFrdVwgOwor5aWz5rCXID4gb24nJ25ha2tlXCA7CivloanosYYgPiBzaGlvbWFtZVwgOwor5LiH5LiWID4geW9yb3p1eW9cIDsKK+S4h+S4gCA+IG1hbicnaWNoaVwgOwor6Zuq56m6ID4geXVraXpvcmFcIDsKK+isgOauuiA+IGJvdXNhdHN1XCA7CivntYTplbcgPiBrdW1pY2hvdVwgOwor6KiA6KqsID4gZ2Vuc2V0c3VcIDsKK+aXqealrSA+IGhheWF3YXphXCA7Civop5LpgJogPiBrYWt1dHN1dVwgOwor5LiA5LihID4gaWNoaXJ5b3VcIDsKK+S4gOS4gCA+IGl0c3VpdHN1XCA7CivntbHovYQgPiB0b3VrYXRzdVwgOwor6Kyh5puyID4geW91a3lva3VcIDsKK+e0hemxkiA+IGJlbmltYXN1XCA7Civni6zllLEgPiBkb2t1c2hvdVwgOwor5paw5r2uID4gc2hpbmNob3VcIDsKK+e3keiMtiA+IHJ5b2t1Y2hhXCA7CivmmLzluK0gPiBoaXJ1c2VraVwgOwor57SF6a6tID4gYmVuaXpha2VcIDsKK+e0jemqqCA+IG5vdWtvdHN1XCA7Civml6fmoKogPiBreXV1a2FidVwgOwor5aer5a6uID4gaGltZW1peWFcIDsKK+WinOiQvSA+IHRzdWlyYWt1XCA7CivmlbDnmb4gPiBzdXVoeWFrdVwgOwor6ZuG57SEID4gc2h1dXlha3VcIDsKK+iqmOeZuiA+IHl1dWhhdHN1XCA7CivpoJjlj44gPiByeW91c2h1dVwgOwor54mH5qCXID4ga2F0YWt1cmlcIDsKK+aXrOaciCA+IGp1bmdldHN1XCA7CivlpKnniLUgPiB0ZW5zaGFrdVwgOwor54WO6JasID4gc2VuJyd5YWt1XCA7Civpm7vnlaUgPiBkZW5yeWFrdVwgOwor5paH54mpID4gYnVuYnV0c3VcIDsKK+aUueeviSA+IGthaWNoaWt1XCA7CivoqabnrYsgPiB0YW1lc3VqaVwgOwor6Kmm562GID4gc2hpaGl0c3VcIDsKK+aXp+aapiA+IGt5dXVyZWtpXCA7Civml6Xmm5wgPiBuaWNoaXlvdVwgOwor6ZqU6IacID4ga2FrdW1ha3VcIDsKK+aXrOaXpSA+IGp1bmppdHN1XCA7CivmlaPnmbogPiBzYW5wYXRzdVwgOwor6ZuR56iOID4gemF0c3V6ZWlcIDsKK+iqreeJqSA+IHlvbWltb25vXCA7Civpm6rnm7IgPiBzZXRzdW1vdVwgOwor6K2m5a+fID4ga2Vpc2F0c3VcIDsKK+ino+iqrCA+IGthaXNldHN1XCA7Civnt6nnt6kgPiB5dXJ1eXVydVwgOwor5pep5pepID4gaGF5YWJheWFcIDsKK+inkuiynSA+IHRzdW5vZ2FpXCA7CivmkYLpo58gPiBzZXNzaG9rdVwgOwor6KW/6ZmjID4gbmlzaGlqaW5cIDsKK+inpuinkiA+IHNob2trYWt1XCA7Civlo4HntJkgPiBrYWJlZ2FtaVwgOwor6Kem6KaaID4gc2hva2tha3VcIDsKK+aXp+aVtSA+IGt5dXV0ZWtpXCA7CivnibnlvrQgPiB0b2t1Y2hvdVwgOwor57SQ6Z2pID4gaGltb2thd2FcIDsKK+aXp+aVmSA+IGt5dXVreW91XCA7Civpm4bnqY0gPiBzaHV1c2VraVwgOwor5Z+L6aqoID4gbWFpa290c3VcIDsKK+aXl+acrCA+IGhhdGFtb3RvXCA7CivlpJbniakgPiBnYWlidXRzdVwgOwor6Ked6KemID4gdGVpc2hva3VcIDsKK+e0mumVtyA+IGt5dXVjaG91XCA7CivmlqzmrrogPiB6YW5zYXRzdVwgOwor54mp5oOFID4gYnV0c3Vqb3VcIDsKK+e3oOe1kCA+IHRlaWtldHN1XCA7CivpnanmlrAgPiBrYWt1c2hpblwgOwor6ZuG56WoID4gc2h1dWh5b3VcIDsKK+aZuuWKmyA+IGNoaXJ5b2t1XCA7Civpm6jnlLcgPiBhbWVvdG9rb1wgOwor54iG5rKIID4gYmFrdWNoaW5cIDsKK+WknOeDjyA+IHlvZ2FyYXN1XCA7Civlp6vlnqMgPiBoaW1lZ2FraVwgOwor54aK56y5ID4ga3VtYXphc2FcIDsKK+eGseeZuiA+IG5lcHBhdHN1XCA7CivpoIbliJcgPiBqdW5yZXRzdVwgOwor5aKo57mpID4gc3VtaW5hd2FcIDsKK+ismeaKkSA+IGtlbicneW9rdVwgOwor5pKu6KaBID4gc2F0c3V5b3VcIDsKK+eLrOS/riA+IGRva3VzaHV1XCA7CivlpInniakgPiBoZW5idXRzdVwgOwor5aKo57iEID4gc3VtaW5hd2FcIDsKK+aYpeWutSA+IHNodW5zaG91XCA7CivnianlvbEgPiBtb25va2FnZVwgOwor6ZeH6ZuyID4geWFtaWt1bW9cIDsKK+e2muiQvSA+IHpva3VyYWt1XCA7Civpm6rnjokgPiB5dWtpZGFtYVwgOwor5pGY6YyyID4gdGVraXJva3VcIDsKK+S7hOOAhSA+IGhvbm9ib25vXCA7Civml6nmioAgPiBoYXlhd2F6YVwgOwor57WC6LqrID4gc2h1dXNoaW5cIDsKK+e3iue4riA+IGtpbnNodWt1XCA7CivoqabnnYAgPiBzaGljaGFrdVwgOwor5aSW5r+gID4gc290b2JvcmlcIDsKK+WmvuWuhSA+IHNob3V0YWt1XCA7CivmmJ/lrr8gPiBzZWlzaHVrdVwgOwor6KeS6KKWID4ga2FrdXNvZGVcIDsKK+mXh+mXhyA+IHlhbWl5YW1pXCA7CivlpJrmub8gPiB0YXNoaXRzdVwgOwor5Lq644CFID4gaGl0b2JpdG9cIDsKK+mdouaOpSA+IG1lbnNldHN1XCA7Civpm5HnlKggPiB6YXRzdXlvdVwgOwor5paw5qCqID4gc2hpbmthYnVcIDsKK+aRuui2syA+IHN1cmlhc2hpXCA7Civml4Hml4EgPiBrYXRhZ2F0YVwgOwor5paw5p+EID4gc2hpbmdhcmFcIDsKK+aUv+eVpSA+IHNlaXJ5YWt1XCA7CivopovpgJogPiBtaXRvb3NoaVwgOwor6Zuj54mpID4gbmFuYnV0c3VcIDsKK+imi+i/lCA+IG1pa2Flc2hpXCA7CivlopfntZAgPiB6b3VrZXRzdVwgOwor5piO5a+fID4gbWVpc2F0c3VcIDsKK+Wnq+WQmyA+IGhpbWVnaW1pXCA7CivmlLvnlaUgPiBrb3VyeWFrdVwgOwor57WQ6KuWID4ga2V0c3Vyb25cIDsKK+Wlj+absiA+IHNvdWt5b2t1XCA7CivpnL3mnIggPiBzZWlnZXRzdVwgOwor6Ziy6J2VID4gYm91c2hva3VcIDsKK+aWsOaapiA+IHNoaW5yZWtpXCA7CivnhLzogokgPiB5YWtpbmlrdVwgOwor54a+54OIID4gc2hpcmV0c3VcIDsKK+e1kOiogCA+IGtldHN1Z2VuXCA7CivoqLznpaggPiBzaG91aHlvdVwgOwor6ZqP562GID4genVpaGl0c3VcIDsKK+WkluazlSA+IHNvdG9ub3JpXCA7CivmlrDmmKUgPiBzaGluc2h1blwgOwor5paw5penID4gc2hpbmt5dXVcIDsKK+mZuOe2miA+IHJpa3V6b2t1XCA7CivnhrHnhrEgPiBhdHN1YXRzdVwgOwor5aKX56+JID4gem91Y2hpa3VcIDsKK+S6pOOAhSA+IGtvbW9nb21vXCA7CivplpPpo58gPiBrYW5zaG9rdVwgOwor57iu5ribID4gc2h1a3VnZW5cIDsKK+aWsOaVmSA+IHNoaW5reW91XCA7Civlo67ng4ggPiBzb3VyZXRzdVwgOwor57mB5q6WID4gaGFuc2hva3VcIDsKK+WkqealtSA+IHRlbmt5b2t1XCA7Civni4Lkv6EgPiBreW91c2hpblwgOwor5pen5bmVID4ga3l1dWJha3VcIDsKK+e1ueiOoiA+IGtpbnVzYXlhXCA7CivlpLHmoLwgPiBzaGlra2FrdVwgOwor6Zao6ZalID4ga2VpYmF0c3VcIDsKK+aXpeW4uCA+IG5pY2hpam91XCA7Civpm5HnhLYgPiB6YXRzdXplblwgOwor5pWX5ruFID4gaGFpbWV0c3VcIDsKK+aUvueGsSA+IGhvdW5ldHN1XCA7CivoqpjmrrogPiB5dXVzYXRzdVwgOwor6ZeK6YGUID4ga2F0dGF0c3VcIDsKK+mZjeiBtyA+IGtvdXNob2t1XCA7CivntKDos6ogPiBzb3NoaXRzdVwgOwor5Z6C6auqID4gdGFyZWdhbWlcIDsKK+mbgeeIqiA+IGdhbmR6dW1lXCA7CivnuKbms6IgPiB0YXRlbmFtaVwgOwor57Sw6KqsID4gc2Fpc2V0c3VcIDsKK+iouueZgiA+IHNoaW5yeW91XCA7CivntprntpogPiB6b2t1em9rdVwgOwor54iG5pKDID4gYmFrdWdla2lcIDsKK+imi+itmCA+IGtlbnNoaWtpXCA7CivoqrDmn5AgPiBkYXJlc29yZVwgOwor54S857OeID4geWFrZWt1c29cIDsKK+aXi+W+iyA+IHNlbnJpdHN1XCA7Civoq7jlvI8gPiBzaG9zaGlraVwgOwor54ax5rqQID4gbmV0c3VnZW5cIDsKK+ino+iBtyA+IGthaXNob2t1XCA7CivkuovjgIUgPiBrb3RvZ290b1wgOwor5aSc5qGcID4geW96YWt1cmFcIDsKK+aWh+acqyA+IGJ1bm1hdHN1XCA7Civml6flroUgPiBreXV1dGFrdVwgOwor6Kq/5pWZID4gY2hvdWt5b3VcIDsKK+S6iOOAhSA+IGthbmVnYW5lXCA7CivmmYLlgbYgPiB0b2tpdGFtYVwgOwor5aaC5a6fID4gbnlvaml0c3VcIDsKK+aWjuaXpSA+IHNhaWppdHN1XCA7Civop5LohpwgPiBrYWt1bWFrdVwgOwor54ax5raZID4gbmV0c3VydWlcIDsKK+irkuaJvyA+IHJ5b3VzaG91XCA7Civpm7vmpbUgPiBkZW5reW9rdVwgOwor5aG1566xID4gZ29taWJha29cIDsKK+aVj+a0uyA+IGJpbmthdHN1XCA7Civplovpl6IgPiBrYWlieWFrdVwgOwor54Wl55m6ID4ga2FucGF0c3VcIDsKK+Wkp+aXpSA+IGRhaW5pY2hpXCA7Civpn5PkurogPiBrYXJhYml0b1wgOwor5aSW5p6gID4gc290b3dha3VcIDsKK+aVt+advyA+IHNoaWtpaXRhXCA7CivoqqzmmI4gPiBzZXRzdW1laVwgOwor57im5qiqID4gdGF0ZXlva29cIDsKK+imgeiooyA+IHlvdWtldHN1XCA7CivlopfnmbogPiB6b3VoYXRzdVwgOwor5piO5ZOyID4gbWVpdGV0c3VcIDsKK+WknOaYvCA+IHlvcnVoaXJ1XCA7CivngrnoqLMgPiB0ZW4nJ3lha3VcIDsKK+WkleaciCA+IHl1dWR6dWtpXCA7CivmlrnlvI8gPiBob3VzaGlraVwgOwor6ZaA6ZalID4gbW9uYmF0c3VcIDsKK+mjhOOAhSA+IGh5b3VoeW91XCA7CivmmKXlhYggPiBoYXJ1c2FraVwgOwor5aeL5YCkID4gaGFqaW1lbmVcIDsKK+aWsOW9oiA+IHNoaW5nYXRhXCA7Civnv7zjgIUgPiB5b2t1eW9rdVwgOwor6Zm455u4ID4gcmlrdXNob3VcIDsKK+e1uee2vyA+IGtpbnV3YXRhXCA7CivniYblo4EgPiBzaG91aGVraVwgOwor5aOK5ruFID4ga2FpbWV0c3VcIDsKK+mam+eJqSA+IGtpd2Ftb25vXCA7CivlpK3mipggPiB5b3VzZXRzdVwgOwor5aWo5a2mID4gc2hvdWdha3VcIDsKK+mbhuazqCA+IHNodXVjaHV1XCA7CivmlbXmlrkgPiB0ZWtpZ2F0YVwgOwor6ZW36ZW3ID4gbmFnYW5hZ2FcIDsKK+aWsOW5tCA+IHNoaW4nJ25lblwgOwor54iG5b+DID4gYmFrdXNoaW5cIDsKK+e0hOirviA+IHlha3VkYWt1XCA7CivmlbDml6UgPiBzdXVqaXRzdVwgOwor5pys44CFID4gbW90b21vdG9cIDsKK+mYsue4riA+IGJvdXNodWt1XCA7Civmk4Hnq4sgPiB5b3VyaXRzdVwgOwor5pWw5pWwID4ga2F6dWthenVcIDsKK+Wkp+aJgCA+IG9vZG9rb3JvXCA7Civml6flm70gPiBreXV1a29rdVwgOwor5Zyw6bygID4gamluZXp1bWlcIDsKK+e0lOihgCA+IGp1bmtldHN1XCA7Civnsonpo74gPiBmdW5zaG9rdVwgOwor57im5pu4ID4gdGF0ZWdha2lcIDsKK+aTpueWtSA+IHN1cmlraXp1XCA7Civnsonpo58gPiBmdW5zaG9rdVwgOwor5aGa56m0ID4gdHN1a2FhbmFcIDsKK+WkluaOpSA+IGdhaXNldHN1XCA7CivoqZXms6ggPiBoeW91Y2h1dVwgOwor54Wn54S8ID4gdGVyaXlha2lcIDsKK+WkseW/gyA+IHNoaXNzaGluXCA7CivntbbnrYYgPiB6ZXBwaXRzdVwgOwor6Zuj5puyID4gbmFua3lva3VcIDsKK+ioiOeVpSA+IGtlaXJ5YWt1XCA7CivlpJnmiJAgPiBzaHVrdXNlaVwgOwor6KaL6JC9ID4gbWlvdG9zaGlcIDsKK+eCueiWrCA+IHRlbicneWFrdVwgOwor54K46JasID4gc2FrdXlha3VcIDsKK+aWsOWuhSA+IHNoaW50YWt1XCA7Civln4voqK0gPiBtYWlzZXRzdVwgOwor5o6l6aqoID4gc2Vra290c3VcIDsKK+mZveeJqSA+IHlvdWJ1dHN1XCA7Civoq5blrqIgPiByb25reWFrdVwgOwor6KeS56ybID4gdHN1bm9idWVcIDsKK+eGseacmyA+IG5ldHN1Ym91XCA7Civplbfph50gPiBjaG91c2hpblwgOwor6Zay6KqtID4gZXRzdWRva3VcIDsKK+iqsOW9vCA+IHRhcmVrYXJlXCA7CivnsbPpo58gPiBiZWlzaG9rdVwgOwor57Si6I6rID4gc2FrdWJha3VcIDsKK+e1kOe4hCA+IGtldHN1am91XCA7CivkuYXjgIUgPiBoaXNhYmlzYVwgOwor6ZuR5puyID4gemFra3lva3VcIDsKK+WkquW3uyA+IGZ1dG9tYWtpXCA7CivmlrDlprsgPiBuaWlkenVtYVwgOwor57WQ57SuID4ga2Vzc2F0c3VcIDsKK+WkmeW/lyA+IHNodWt1c2hpXCA7Civnv4zjgIUgPiB5b2t1eW9rdVwgOwor5pen5YqHID4ga3l1dWdla2lcIDsKK+aRmOiKryA+IHRla2lzaGluXCA7CivplqLoqqwgPiBrYW5zZXRzdVwgOwor54mp5LqLID4gbW9ub2dvdG9cIDsKK+ios+azqCA+IHlha3VjaHV1XCA7CivmlLnmnK0gPiBrYWlzYXRzdVwgOwor54Wu5rK4ID4gc2hhZnV0c3VcIDsKK+Wkp+W1kCA+IG9vYXJhc2hpXCA7Civoo73piYQgPiBzZWl0ZXRzdVwgOwor6KOF6aO+ID4gc291c2hva3VcIDsKK+mbkeaWhyA+IHphdHN1YnVuXCA7CivkuLjjgIUgPiBtYXJ1bWFydVwgOwor57SZ6IqxID4ga2FtaWJhbmFcIDsKK+eEvOeJqSA+IHlha2ltb25vXCA7CivmlbXlvbkgPiB0ZWtpeWFrdVwgOwor57WQ56+AID4ga2Vzc2V0c3VcIDsKK+mVt+i7uCA+IGNob3VqaWt1XCA7CivlpJbluq0gPiBzb3Rvbml3YVwgOwor57WE57SQID4ga3VtaWhpbW9cIDsKK+eykumKgCA+IHRzdWJ1Z2luXCA7CivpnIfluYUgPiBzaGlucHVrdVwgOwor5pW05byPID4gc2Vpc2hpa2lcIDsKK+mWi+ixgSA+IGthaWthdHN1XCA7CivplbfouqsgPiBjaG91c2hpblwgOwor57iB5pelID4gZW4nJ25pY2hpXCA7CivlpKflsYAgPiB0YWlreW9rdVwgOwor5paw5Z6LID4gc2hpbmdhdGFcIDsKK+WknOW1kCA+IHlvYXJhc2hpXCA7CivmlbDlvI8gPiBzdXVzaGlraVwgOwor5pu044CFID4gc2FyYXNhcmFcIDsKK+eJm+S5syA+IGd5dXVueXV1XCA7CivkuK3jgIUgPiBuYWthbmFrYVwgOwor5puy44CFID4ga3VtYWd1bWFcIDsKK+mVt+i2syA+IGNob3Vzb2t1XCA7CivloanniakgPiBzaGlvbW9ub1wgOwor6KaB6IG3ID4geW91c2hva3VcIDsKK+eJh+WBtCA+IGthdGFnYXdhXCA7CivopLbopZ4gPiBzaHV1aGVraVwgOwor6ZuA5paRID4gc29iYWthc3VcIDsKK+aXp+S/lyA+IGt5dXV6b2t1XCA7Civpm7LlvaIgPiBrdW1vZ2F0YVwgOwor57WM56m0ID4ga2Vpa2V0c3VcIDsKK+S4puOAhSA+IG5hbWluYW1pXCA7Civmkp7nnYAgPiBkb3VjaGFrdVwgOwor5pen5L2cID4ga3l1dXNha3VcIDsKK+e0heiKsSA+IGJlbmliYW5hXCA7CivpmbDmub8gPiBpbnNoaXRzdVwgOwor57eo5puyID4gaGVua3lva3VcIDsKK+e1hOeriyA+IGt1bWl0YXRlXCA7CivplovoqK0gPiBrYWlzZXRzdVwgOwor5Lih44CFID4gcnlvdXJ5b3VcIDsKK+e0sOe0sCA+IGhvc29ib3NvXCA7CivoqabmjpggPiBzaGlrdXRzdVwgOwor5aGp54S8ID4gc2hpb3lha2lcIDsKK+WkluWxgCA+IGdhaWt5b2t1XCA7CivlopfmrpYgPiB6b3VzaG9rdVwgOwor5pen5Lq6ID4gZnVydWJpdG9cIDsKK+ios+alrSA+IHlha3VneW91XCA7CivmjpLpm6ogPiBoYWlzZXRzdVwgOwor57Kb6LuNID4gc2h1a3VndW5cIDsKK+eGseaEnyA+IG5ldHN1a2FuXCA7CivlpLHlopwgPiBzaGl0dHN1aVwgOwor5Zu96bOlID4ga29rdWNob3VcIDsKK+iruOWFsSA+IG1vcm90b21vXCA7CivlpKvlpKsgPiBzb3Jlem9yZVwgOwor57Sh57mUID4gYm91c2hva3VcIDsKK+WkluWuoiA+IGdhaWt5YWt1XCA7CivnhrHmg4UgPiBuZXRzdWpvdVwgOwor5aSW5a2rID4gc290b21hZ29cIDsKK+ezluicnCA+IHRvdW1pdHN1XCA7CivoqqDlrp8gPiBzZWlqaXRzdVwgOwor6Zuj5b25ID4gbmFuJyd5YWt1XCA7CivmlZHmgKUgPiBreXV1a3l1dVwgOwor5aGX54mpID4gbnVyaW1vbm9cIDsKK+eJiOS4iyA+IGhhbnNoaXRhXCA7CivpmaTmub8gPiBqb3NoaXRzdVwgOwor54aU5o6lID4geW91c2V0c3VcIDsKK+e1seeOhyA+IHRvdXNvdHN1XCA7Civplbfoqr8gPiBjaG91Y2hvdVwgOwor5peF5YWIID4gdGFiaXNha2lcIDsKK+eCuee2tCA+IHRlbnRldHN1XCA7CivntLDnrYYgPiBzYWloaXRzdVwgOwor6Zuq5ba6ID4gc2V0c3VyZWlcIDsKK+e1ueeJqSA+IGtpbnVtb25vXCA7CivoqLPmn4QgPiB3YWtlZ2FyYVwgOwor6KWf6IWwID4gZXJpa29zaGlcIDsKK+e1kOedgCA+IGtldGNoYWt1XCA7Civnt5HmnpcgPiByeW9rdXJpblwgOwor57WQ55ufID4ga2V0c3VtZWlcIDsKK+eGseW8gSA+IG5ldHN1YmVuXCA7Civpm5Hlv7UgPiB6YXRzdW5lblwgOwor6KiO5q27ID4gdWNoaWppbmlcIDsKK+aUr+aJlSA+IHNoaWhhcmFpXCA7CivopqrnnaYgPiBzaGluYm9rdVwgOwor5aCA56uvID4gaG9yaWJhdGFcIDsKK+mZpeayoSA+IGthbmJvdHN1XCA7CivmlrDliocgPiBzaGluZ2VraVwgOwor6KeS54mbID4ga2FrdWd5dXVcIDsKK+mbkeW9uSA+IHphdHN1ZWtpXCA7Civpm6rlsbEgPiB5dWtpeWFtYVwgOwor6Ku45Lq6ID4gbW9yb2JpdG9cIDsKK+mZo+ayoSA+IGppbmJvdHN1XCA7Civpmb3mpbUgPiB5b3VreW9rdVwgOwor54i25LiKID4gY2hpY2hpdWVcIDsKK+mbquWusyA+IHNldHN1Z2FpXCA7CivplbfoopYgPiBuYWdhc29kZVwgOwor5LiA44CFID4gaXRzdWl0c3VcIDsKK+mYsueGsSA+IGJvdW5ldHN1XCA7Civpm6PlsYAgPiBuYW5reW9rdVwgOwor57iE5by1ID4gbmF3YWJhcmlcIDsKK+WkluWggCA+IHNvdG9ib3JpXCA7CivntYznlaUgPiBrZWlyeWFrdVwgOwor6KOP6YGTID4gdXJhbWljaGlcIDsKK+mao+aOpSA+IHJpbnNldHN1XCA7Civntpnmr40gPiBtYW1haGFoYVwgOwor5aSn5ZadID4gZGFpa2F0c3VcIDsKK+e0meethiA+IHNoaWhpdHN1XCA7CivmlZnlraYgPiBreW91Z2FrdVwgOwor6Zyy5Ye6ID4gcm9zaHV0c3VcIDsKK+ioquaXpSA+IGhvdW5pY2hpXCA7CivloanmsLQgPiBzaGlvbWl6dVwgOwor5pW35ZywID4gc2hpa2ljaGlcIDsKK+mahuaYjCA+IHJ5dXVzaG91XCA7CivmlrDkv64gPiBzaGluc2h1dVwgOwor5aSn5ZCJID4gZGFpa2ljaGlcIDsKK+aWsOS9nCA+IHNoaW5zYWt1XCA7CivplqLohIcgPiBzZWtpd2FrZVwgOwor54et5Y+wID4gc2hva3VkYWlcIDsKK+eCreeqryA+IHN1bWlnYW1hXCA7Civpm7vlnKcgPiBkZW4nJ2F0c3VcIDsKK+mbqOWlsyA+IGFtZW9uJyduYVwgOwor54iG5YK3ID4gYmFrdXNob3VcIDsKK+aWsOS7uyA+IHNoaW4nJ25pblwgOwor5r+A6ZyHID4gZ2VraXNoaW5cIDsKK+mWk+iJsiA+IGthbnNob2t1XCA7CivlpInlnKcgPiBoZW4nJ2F0c3VcIDsKK+imqueOiyA+IHNoaW4nJ25vdVwgOwor5aSn5Y2SID4gZGFpc290c3VcIDsKK+e3j+aLrCA+IHNvdWthdHN1XCA7Civop6PmsbogPiBrYWlrZXRzdVwgOwor5pS/5bGAID4gc2Vpa3lva3VcIDsKK+WjgeW9uSA+IGthYmV5YWt1XCA7Civmjpvou7ggPiBrYWtlamlrdVwgOwor57iE5bC7ID4gbmF3YWppcmlcIDsKK+ijsuiloCA+IHVjaGlrYWtlXCA7Civln7rnnaMgPiBraXJpc3V0b1wgOwor6KSq6ImyID4gdGFpc2hva3VcIDsKK+Wkp+WIpSA+IHRhaWJldHN1XCA7CivlpKfliIcgPiB0YWlzZXRzdVwgOwor5paJ5YiXID4gc2VpcmV0c3VcIDsKK+mbquWbvSA+IHl1a2lndW5pXCA7CivlpKflhoogPiB0YWlzYXRzdVwgOwor57e75a+GID4gY2hpbWl0c3VcIDsKK+mWkeiBtyA+IGthbnNob2t1XCA7CivlpInlk7IgPiBoZW50ZXRzdVwgOwor57O456u5ID4gc2hpY2hpa3VcIDsKK+mWi+iEmiA+IGthaWt5YWt1XCA7CivmlK/lsYAgPiBzaGlreW9rdVwgOwor5aSx5L+dID4gc2hpdHN1aG9cIDsKK+e1gueGhCA+IHNodXVzb2t1XCA7CivlpJblipsgPiBnYWlyeW9rdVwgOwor6Kq/5LyPID4gY2hvdWJ1a3VcIDsKK+mbm+WeiyA+IGhpbmFnYXRhXCA7CivopoHnlaUgPiB5b3VyeWFrdVwgOwor5pWR5Zu9ID4ga3l1dWtva3VcIDsKK+mWgOiEiCA+IG1vbm15YWt1XCA7CivopJDoibIgPiBrYXNzaG9rdVwgOwor5pW05YiXID4gc2VpcmV0c3VcIDsKK+mbu+WKmyA+IGRlbnJ5b2t1XCA7CivmjqXop6YgPiBzZXNzaG9rdVwgOwor5pWw5YiXID4gc3V1cmV0c3VcIDsKK+Wkp+S7jyA+IGRhaWJ1dHN1XCA7CivplqLnr4AgPiBrYW5zZXRzdVwgOwor5pS+5Z+SID4gaG91cmF0c3VcIDsKK+e1nuauuiA+IGtvdXNhdHN1XCA7CivlpJblgbQgPiBzb3RvZ2F3YVwgOwor6KGo6ZaAID4gb21vdGVtb25cIDsKK+aVsOWGiiA+IHN1dXNhdHN1XCA7Civpm7LliqkgPiBrdW1vc3VrZVwgOwor6Zuq5Y6fID4gc2V0c3VnZW5cIDsKK+mbkeWaoiA+IHphdHN1bm91XCA7Civmv4HphZIgPiBkb2J1cm9rdVwgOwor5Zyf6LOqID4gZG9zaGl0c3VcIDsKK+aVteWBtCA+IHRla2lnYXdhXCA7CivoqKXlvIEgPiB0b3RzdWJlblwgOwor6KOP6KGoID4gdXJhb21vdGVcIDsKK+iqreS6hiA+IGRva3VyeW91XCA7CivngbDnr6kgPiBoYWlmdXJ1aVwgOwor57Kl6IW5ID4ga2F5dWJhcmFcIDsKK+eAieihgCA+IHNoYWtldHN1XCA7CivloIXngq0gPiBrYXRhenVtaVwgOwor57a/5byTID4gd2F0YXl1bWlcIDsKK+e4ruWGmSA+IHNodWt1c2hhXCA7CivmlZnljZMgPiBreW91dGFrdVwgOwor5Z6C6ICzID4gdGFyZW1pbWlcIDsKK+ipsOWVjyA+IGtpdHN1bW9uXCA7Civlo7LljbQgPiBiYWlreWFrdVwgOwor5o6h6KGAID4gc2Fpa2V0c3VcIDsKK+e4puWIlyA+IGp1dXJldHN1XCA7CivooYzpnakgPiBneW91a2FrdVwgOwor57W25pybID4gemV0c3Vib3VcIDsKK+aSg+ayiCA+IGdla2ljaGluXCA7Civop5Lmn7EgPiBrYWt1Y2h1dVwgOwor5Zu96L6xID4ga29rdWpva3VcIDsKK+aVmeWJhyA+IGt5b3Vzb2t1XCA7CivloqjlrqIgPiBib2treWFrdVwgOwor5aOr5Y2SID4gc2hpc290c3VcIDsKK+WcsOiiiyA+IGppYnVrdXJvXCA7CivmlbXkuK0gPiB0ZWtpY2h1dVwgOwor5aOy5Ye6ID4gdXJpZGFzaGlcIDsKK+e3iuWvhiA+IGtpbm1pdHN1XCA7Civmj7rnr60gPiB5dXJpa2Fnb1wgOwor6Zuq5YOPID4gc2V0c3V6b3VcIDsKK+e0heeOiSA+IGtvdWd5b2t1XCA7CivnsbPolLUgPiBrb21lZ3VyYVwgOwor5r2u6aKoID4gc2hpb2themVcIDsKK+Wei+e0mSA+IGthdGFnYW1pXCA7CivoqKrlrqIgPiBob3VreWFrdVwgOwor6Kix5auBID4gaWluYXp1a2VcIDsKK+aNj+mAoCA+IG5ldHN1em91XCA7CivmlaPkvZogPiBzYW4nJ2l0c3VcIDsKK+ioseWpmiA+IGlpbmF6dWtlXCA7CivntKLmvKAgPiBzYWt1YmFrdVwgOwor6ZaP56eSID4gdXJ1dWJ5b3VcIDsKK+a9pOmjviA+IGp1bnNob2t1XCA7Civmi7PpqqggPiBnZW5rb3RzdVwgOwor57a/5a+GID4gbWVubWl0c3VcIDsKK+a/gOi2iiA+IGdla2lldHN1XCA7Civntr/lrp8gPiBtZW5qaXRzdVwgOwor57Sw5rOiID4gc2F6YW5hbWlcIDsKK+manOWjgSA+IHNob3VoZWtpXCA7Civlm73os4ogPiBrb2t1em9rdVwgOwor54K55ruFID4gdGVubWV0c3VcIDsKK+inpuaJiyA+IHNob2t1c2h1XCA7Civnr4Dpo58gPiBzZXNzaG9rdVwgOwor5r+A6LOeID4gZ2VraXNob3VcIDsKK+ijvee5lCA+IHNlaXNob2t1XCA7CivntabmlpkgPiBreXV1cnlvdVwgOwor57SU5r2UID4ganVua2V0c3VcIDsKK+malOWjgSA+IGtha3VoZWtpXCA7CivmlL7liJcgPiBob3VyZXRzdVwgOwor6Zm45bCGID4gcmlrdXNob3VcIDsKK+e1gualrSA+IHNodXVneW91XCA7Civpm6rkuIogPiBzZXRzdWpvdVwgOwor57Kf57KSID4gem9rdXJ5dXVcIDsKK+ims+aciCA+IGthbmdldHN1XCA7CivntbHmi6wgPiB0b3VrYXRzdVwgOwor5ou+6ZuGID4gc2h1dXNodXVcIDsKK+e3keWcsCA+IHJ5b2t1Y2hpXCA7CivnhKblv4MgPiBzaG91c2hpblwgOwor56+A6Zu7ID4gc2V0c3VkZW5cIDsKK+eymOeymCA+IG5lYmFuZWJhXCA7Civngo7nhrEgPiBlbicnbmV0c3VcIDsKK+WbveiosSA+IGt1bmltb3RvXCA7CivplovnmbogPiBrYWloYXRzdVwgOwor57KS57KSID4gcnl1dXJ5dXVcIDsKK+aZguOAhSA+IHRva2lkb2tpXCA7Civop6PlvI8gPiBrYWlzaGlraVwgOwor6Kaq5pePID4gc2hpbnpva3VcIDsKK+mVt+efsyA+IGNob3VzZWtpXCA7CivnsonnsokgPiBrb25hZ29uYVwgOwor5pCN546HID4gc29ucml0c3VcIDsKK+ihqOixoSA+IGh5b3VzaG91XCA7Civpm4fkurogPiB5YXRvaW5pblwgOwor6Kit5ZWPID4gc2V0c3Vtb25cIDsKK+immuabuCA+IG9ib2VnYWtpXCA7CivmvIbpu5IgPiBzaGlra29rdVwgOwor57eo5YWlID4gaGVuJydueXV1XCA7Civmi5Lpo58gPiBreW9zaG9rdVwgOwor6ZuG5LitID4gc2h1dWNodXVcIDsKK+e0r+aciCA+IHJ1aWdldHN1XCA7CivlnoLnm7QgPiBzdWljaG9rdVwgOwor57SF5q67ID4gYmVuaWdhcmFcIDsKK+aLm+mbhiA+IHNob3VzaHV1XCA7CivmkqXlvKYgPiBoYXRzdWdlblwgOwor6KGM6LehID4gZ3lvdXNla2lcIDsKK+inkuW6lyA+IGthZG9taXNlXCA7Civnt7TkubMgPiByZW4nJ255dXVcIDsKK+exs+ezoCA+IGtvbWVudWthXCA7Civnt4/lipsgPiBzb3VyeW9rdVwgOwor57Sv5pelID4gcnVpaml0c3VcIDsKK+WcqOiBtyA+IHphaXNob2t1XCA7Civnt4/liKUgPiBzb3ViZXRzdVwgOwor5Z+L5rKhID4gbWFpYm90c3VcIDsKK+imquaImiA+IHNoaW5zZWtpXCA7CivnspjnnYAgPiBuZW5jaGFrdVwgOwor57Oe5rqcID4ga3Vzb2RhbWVcIDsKK+e3iuWIhyA+IGtpbnNldHN1XCA7Civnr4npgKAgPiBjaGlrdXpvdVwgOwor6Kem5aqSID4gc2hva3ViYWlcIDsKK+maiuWIlyA+IHRhaXJldHN1XCA7CivntKLmlbUgPiBzYWt1dGVraVwgOwor5aKX5Yi3ID4gem91c2F0c3VcIDsKK+aYk+OAhSA+IHlhc3V5YXN1XCA7Civnt5Hkvr8gPiByeW9rdWJlblwgOwor5r2u6LazID4gc2hpb2FzaGlcIDsKK+mWsuattCA+IGV0c3VyZWtpXCA7CivntI3mnK0gPiBub3VzYXRzdVwgOwor57WC5oGvID4gc2h1dXNva3VcIDsKK+aMr+iiliA+IGZ1cmlzb2RlXCA7Civns5/msYEgPiBrYXN1amlydVwgOwor57SE5p2fID4geWFrdXNva3VcIDsKK+ihhuiplSA+IHNodXVoeW91XCA7CivmipHprLEgPiB5b2t1dXRzdVwgOwor5oyH6LKrID4geXViaW51a2lcIDsKK+e1tuWkpyA+IHpldHN1ZGFpXCA7Civmv4Doh60gPiBnZWtpc2h1dVwgOwor6KaL5omAID4gbWlkb2tvcm9cIDsKK+aPm+eJqSA+IGthbmJ1dHN1XCA7CivnspfnjocgPiBhcmFyaXRzdVwgOwor57WC5bmVID4gc2h1dW1ha3VcIDsKK+ilsuaSgyA+IHNodXVnZWtpXCA7CivntZDlsYAgPiBrZWtreW9rdVwgOwor562L6aqoID4gc3VqaWJvbmVcIDsKK+aTpuWCtyA+IHN1cmlraXp1XCA7CivoprPlr58gPiBrYW5zYXRzdVwgOwor6Kaz5a6iID4ga2Fua3lha3VcIDsKK+a/q+eriyA+IHJhbnJpdHN1XCA7CivmjqXnnYAgPiBzZXRjaGFrdVwgOwor6Zmj5YiXID4gamlucmV0c3VcIDsKK+mWk+athyA+IGthbmtldHN1XCA7CivlnJ/nrYYgPiB0c3VrdXNoaVwgOwor6KGw6ImyID4gc3Vpc2hva3VcIDsKK+eym+eEtiA+IHNodWt1emVuXCA7CivplpPmrKAgPiBrYW5rZXRzdVwgOwor57Sw5byVID4gaG9zb2Jpa2lcIDsKK+imquWxgCA+IG95YWt5b2t1XCA7CivnrqHovYQgPiBrYW5rYXRzdVwgOwor6Zml5YWlID4ga2FuJydueXV1XCA7CivooajoirggPiBvbW90ZWdlaVwgOwor5pep44CFID4gaGF5YWJheWFcIDsKK+ijheedgCA+IHNvdWNoYWt1XCA7CivntYLlr6kgPiBzaHV1c2hpblwgOwor5r+D57iuID4gbm91c2h1a3VcIDsKK+iojuS8kCA+IHRvdWJhdHN1XCA7CivorI7jgIUgPiBuYXpvbmF6b1wgOwor57WC5a61ID4gc2h1dXNob3VcIDsKK+Wft+W/gyA+IHNodXVzaGluXCA7Civmj5Dnga8gPiBjaG91Y2hpblwgOwor5pGY5b+DID4gdGVraXNoaW5cIDsKK+ijj+eUuiA+IHVyYW1hY2hpXCA7CivnhYnkubMgPiByZW4nJ255dXVcIDsKK+Wcn+elniA+IHVjaGlnYW1pXCA7CivloIDlt50gPiBob3Jpa2F3YVwgOwor57W25ZG9ID4gemV0c3VtZWlcIDsKK+mZi+WKoyA+IHJvdXJldHN1XCA7CivopoHlvI8gPiB5b3VzaGlraVwgOwor562G6aCGID4gaGl0c3VqdW5cIDsKK+iitOedgCA+IGhha2FtYWdpXCA7Civoppblr58gPiBzaGlzYXRzdVwgOwor57Ch57SEID4ga2FuJyd5YWt1XCA7Civlm73nsY0gPiBrb2t1c2VraVwgOwor5oy96IKJID4gaGlraW5pa3VcIDsKK+e2muS8uCA+IHpva3VzaGluXCA7CivnspvmuIUgPiBzaHVrdXNlaVwgOwor57Sw5a+GID4gc2FpbWl0c3VcIDsKK+mWk+afhCA+IGFpZGFnYXJhXCA7CivmkoPlopwgPiBnZWtpdHN1aVwgOwor5aCF5a6fID4ga2Vuaml0c3VcIDsKK+iruOOAhSA+IG1vcm9tb3JvXCA7Civlm73nrZYgPiBrb2t1c2FrdVwgOwor5r+r55m6ID4gcmFucGF0c3VcIDsKK+ethumZoyA+IGhpdHN1amluXCA7CivntZDlm6MgPiBrZXRzdWRhblwgOwor6J6i6ZuqID4ga2Vpc2V0c3VcIDsKK+mWj+aciCA+IGp1bmdldHN1XCA7Civopoblr6kgPiBmdWt1c2hpblwgOwor6ZaL5pytID4ga2Fpc2F0c3VcIDsKK+e0ouWvniA+IHNha3ViYWt1XCA7CivonbbprqsgPiBjaG91emFtZVwgOwor5pCm5omLID4ga2FyYW1ldGVcIDsKK+Wbo+e1kCA+IGRhbmtldHN1XCA7Civml4HjgIUgPiBrYXRhZ2F0YVwgOwor57SZ5bGRID4ga2FtaWt1enVcIDsKK+eyleaxgSA+IGthc3VqaXJ1XCA7CivooYDoibIgPiBrZXNzaG9rdVwgOwor57Kb5q2jID4gc2h1a3VzZWlcIDsKK+mWgOacrSA+IG1vbnNhdHN1XCA7Civoq6TjgIUgPiBnYWt1Z2FrdVwgOwor57W25YCrID4gemV0c3VyaW5cIDsKK+Wei+aeoCA+IGthdGF3YWt1XCA7Civmir3osaEgPiBjaHV1c2hvdVwgOwor5oqE6YyyID4gc2hvdXJva3VcIDsKK+mRkeitmCA+IGthbnNoaWtpXCA7Civpl4fluIIgPiB5YW1paWNoaVwgOwor6J6N6ZuqID4geXV1c2V0c3VcIDsKK+ewkueriyA+IHNhbnJpdHN1XCA7CivntZDlkIggPiBrZXRzdWdvdVwgOwor5Zyw54axID4gY2hpbmV0c3VcIDsKK+mWk+aOpSA+IGthbnNldHN1XCA7CivnrYvph5EgPiBzdWppZ2FuZVwgOwor6Kaq5ZGKID4gc2hpbmtva3VcIDsKK+eul+ihkyA+IHNhbmp1dHN1XCA7CivmvaToibIgPiBqdW5zaG9rdVwgOwor6KGo56ugID4gaHlvdXNob3VcIDsKK+imquWPiyA+IHNoaW4nJ3l1dVwgOwor5ryi6KizID4ga2FuJyd5YWt1XCA7Civplbfml4UgPiBuYWdhdGFiaVwgOwor6Ziy5Lq6ID4gc2FraW1vcmlcIDsKK+e0s+WVhiA+IHNoaW5zaG91XCA7Civon7vonIIgPiBhcmliYWNoaVwgOwor5r+A55ebID4gZ2VraXRzdXVcIDsKK+ims+WFpSA+IGthbicnbnl1dVwgOwor6KGd56uLID4gdHN1aXRhdGVcIDsKK+aKteinpiA+IHRlaXNob2t1XCA7CivnsKHnlaUgPiBrYW5yeWFrdVwgOwor5o6h5rG6ID4gc2Fpa2V0c3VcIDsKK+aNqOeMqyA+IHN1dGVuZWtvXCA7CivnrrHoiLkgPiBoYWtvYnVuZVwgOwor566x6IifID4gaGFrb2J1bmVcIDsKK+ifgOiwtyA+IGtvbWVrYW1pXCA7Civon6/omasgPiBneW91Y2h1dVwgOwor5aSr44CFID4gc29yZXpvcmVcIDsKK+ijgeaxuiA+IHNhaWtldHN1XCA7CivoppblipsgPiBzaGlyeW9rdVwgOwor57KJ5pyrID4gZnVubWF0c3VcIDsKK+aOg+a7hSA+IHNvdW1ldHN1XCA7Civln5LlpJYgPiByYWNoaWdhaVwgOwor5o6S5rOEID4gaGFpc2V0c3VcIDsKK+ilv+WTsiA+IHNlaXRldHN1XCA7CivlnarmlbAgPiB0c3Vib3N1dVwgOwor57Oe5bC/ID4gZnVuJydueW91XCA7Civooajnmb0gPiBoeW91aGFrdVwgOwor5Zub55m+ID4geW9uaHlha3VcIDsKK+e0sOWIpSA+IHNhaWJldHN1XCA7CivmiYvpj6EgPiB0ZWthZ2FtaVwgOwor6Kaq5Lu7ID4gc2hpbicnbmluXCA7CivooI/ogqEgPiBnYW5pbWF0YVwgOwor5aCA5YmyID4gaG9yaXdhcmlcIDsKK+mWouWuiCA+IHNla2ltb3JpXCA7CivooYDnqI4gPiBrZXRzdXplaVwgOwor5Z+35YuZID4gc2hpdHN1bXVcIDsKK+aNleeJqSA+IHRvcmltb25vXCA7CivmiJDpppkgPiBuYXJpa3lvdVwgOwor57WC5LqGID4gc2h1dXJ5b3VcIDsKK+exs+adviA+IGJlaW1hdHN1XCA7Civnr4Dns7ggPiBmdXNoaWl0b1wgOwor5Z6L5byPID4ga2Vpc2hpa2lcIDsKK+evgOexsyA+IHNldHN1bWFpXCA7CivmlbDjgIUgPiBrYXp1a2F6dVwgOwor5om/6Ku+ID4gc2hvdWRha3VcIDsKK+ethuirhyA+IGhpdHN1ZGFuXCA7CivmioToqLMgPiBzaG91eWFrdVwgOwor6ZaL5bGAID4ga2Fpa3lva3VcIDsKK+eqrumzpSA+IGt5dXVjaG91XCA7Civon7nogqEgPiBnYW5pbWF0YVwgOwor6Y6M6aaWID4ga2FtYWt1YmlcIDsKK+eri+mjnyA+IHJpc3Nob2t1XCA7CivooYbnm64gPiBzaHV1bW9rdVwgOwor562G6KemID4gaGlzc2hva3VcIDsKK+ewoea9lCA+IGthbmtldHN1XCA7CivlnoLluZUgPiB0YXJlbWFrdVwgOwor56uL6aGYID4gcml0c3VnYW5cIDsKK+aRguWLlSA+IHNldHN1ZG91XCA7Civnsr7lr4YgPiBzZWltaXRzdVwgOwor56+A56m0ID4gZnVzaGlhbmFcIDsKK+aOpeaWrSA+IHNldHN1ZGFuXCA7CivooYDnm58gPiBrZXRzdW1laVwgOwor56+A56iOID4gc2V0c3V6ZWlcIDsKK+ezuOWPoyA+IGl0b2d1Y2hpXCA7CivmiYvou4ogPiB0ZWd1cnVtYVwgOwor6ZW35bC7ID4gbmFnYWppcmlcIDsKK+a/gea1gSA+IGRha3VyeXV1XCA7CivntKDkurogPiBzaGlyb3V0b1wgOwor5r+A5rWBID4gZ2VraXJ5dXVcIDsKK+Wft+S6iyA+IHNoaXRzdWppXCA7CivmiYDovYQgPiBzaG9rYXRzdVwgOwor5ouS57W2ID4ga3lvemV0c3VcIDsKK+aOkuaXpSA+IGhhaW5pY2hpXCA7Civns7vliJcgPiBrZWlyZXRzdVwgOwor54ax44CFID4gYXRzdWF0c3VcIDsKK+ihsOa7hSA+IHN1aW1ldHN1XCA7CivmjqHmjpggPiBzYWlrdXRzdVwgOwor5Z+S5YaFID4gcmFjaGluYWlcIDsKK+WcqOaXpSA+IHphaW5pY2hpXCA7CivmvIHoibIgPiBneW9zaG9rdVwgOwor5ouZ562GID4gc2VwcGl0c3VcIDsKK+e0lOS4gCA+IGp1bicnaXRzdVwgOwor5pCs5YWlID4gaGFuJydueXV1XCA7CivplqLlj5YgPiBzZWtpdG9yaVwgOwor5pC+5LmzID4gc2FrdW55dXVcIDsKK+ibrumqqCA+IGJhbmtvdHN1XCA7CivmvKvnrYYgPiBtYW5waXRzdVwgOwor56+A55SoID4gc2V0c3V5b3VcIDsKK+aKnOe+pCA+IGJhdHN1Z3VuXCA7CivmiYDoqqwgPiBzaG9zZXRzdVwgOwor5Zu95p+EID4ga3VuaWdhcmFcIDsKK+a6tuihgCA+IHlvdWtldHN1XCA7CivplpHljbQgPiBrYW5reWFrdVwgOwor5omL6KKLID4gdGVidWt1cm9cIDsKK+mWo+WDmiA+IGtha3VyeW91XCA7CivmiYvooZMgPiBzaHVqdXRzdVwgOwor57ep44CFID4geXVydXl1cnVcIDsKK+expOW8lSA+IGt1amliaWtpXCA7CivnsKHmnK0gPiBrYW5zYXRzdVwgOwor6J226J22ID4gY2hvdWNob3VcIDsKK+eti+iCiSA+IGtpbicnbmlrdVwgOwor56qT6ZqbID4gbWFkb2dpd2FcIDsKK+mWk+WFqyA+IGthbnBhY2hpXCA7CivmuJvpo58gPiBnZW5zaG9rdVwgOwor56y56IifID4gc2FzYWJ1bmVcIDsKK+aOpeWyuCA+IHNldHN1Z2FuXCA7CivmiK/oqIAgPiB0YXdhZ290b1wgOwor57K+5YqbID4gc2Vpcnlva3VcIDsKK+ihgOa2siA+IGtldHN1ZWtpXCA7CivnqbrpoqggPiBrYXJha2F6ZVwgOwor6KCP546JID4ga2FuaXRhbWFcIDsKK+ihgOa2mSA+IGtldHN1cnVpXCA7CivmvbDmu4UgPiBrYWltZXRzdVwgOwor5oi46KKLID4gdG9idWt1cm9cIDsKK+aOqOWvnyA+IHN1aXNhdHN1XCA7CivmjqXlrqIgPiBzZWtreWFrdVwgOwor5ZeF6KaaID4ga3l1dWtha3VcIDsKK+aKmOevgCA+IG9yaWZ1c2hpXCA7CivmvaTmu5EgPiBqdW5rYXRzdVwgOwor6ZaT5LyQID4ga2FuYmF0c3VcIDsKK+mOjOi2syA+IGthbWFhc2hpXCA7Civmva7mtYEgPiBjaG91cnl1dVwgOwor5Zub5pyIID4gc2hpZ2F0c3VcIDsKK+mVt+WIgCA+IG5hZ2luYXRhXCA7CivlmLLnrJEgPiBjaG91c2hvdVwgOwor56qu6L+9ID4ga3l1dXRzdWlcIDsKK+eqrui/qyA+IGt5dXVoYWt1XCA7CivmiKbooZMgPiBzZW5qdXRzdVwgOwor5o+h5YqbID4gYWt1cnlva3VcIDsKK+ikh+WLnSA+IGZ1a3VzaG91XCA7Civon7nnjokgPiBrYW5pdGFtYVwgOwor5r2u5rGQID4gY2hvdXNla2lcIDsKK+ewoeaKnCA+IGthbmJhdHN1XCA7Civmva7msLQgPiBzaGlvbWl6dVwgOwor56+A5ribID4gc2V0c3VnZW5cIDsKK+mNm+mJhCA+IHRhbnRldHN1XCA7CivpmobjgIUgPiByeXV1cnl1dVwgOwor6ZqF44CFID4gc3VtaXp1bWlcIDsKK+aPmuWKmyA+IHlvdXJ5b2t1XCA7Civnq7nolq4gPiB0YWtleWFidVwgOwor5omN6ImyID4gc2Fpc2hva3VcIDsKK+ibjembqiA+IGtlaXNldHN1XCA7Civnq4voq5YgPiByaXRzdXJvblwgOwor57Gz5Z2qID4gYmVpdHN1Ym9cIDsKK+ethueusSA+IGZ1ZGViYWtvXCA7CivmuKzph48gPiBzb2t1cnlvdVwgOwor562J562JID4gbmFkb25hZG9cIDsKK+eri+iogCA+IHJpdHN1Z2VuXCA7CivnspvlhZogPiBzaHVrdXRvdVwgOwor6KO45Ye6ID4gcmFzaHV0c3VcIDsKK+mNi+mHnCA+IG5hYmVrYW1hXCA7CivooZ3mkoMgPiBzaG91Z2VraVwgOwor5ryC55m9ID4gaHlvdWhha3VcIDsKK+a3t+mbkSA+IGtvbnphdHN1XCA7CivplbfkuYUgPiBjaG91a3l1dVwgOwor5Zue5oqYID4ga2Fpc2V0c3VcIDsKK+WcsOWigyA+IGRqaXpha2FpXCA7CivmjL/mipwgPiBzb3ViYXRzdVwgOwor6J2m6IWwID4gZWJpZ29zaGlcIDsKK+iho+aJiyA+IGtvcm9tb2RlXCA7Civoobflv4MgPiBjaHV1c2hpblwgOwor6Ju46LazID4gdGFrb2FzaGlcIDsKK+e2muOAhSA+IHpva3V6b2t1XCA7Civmt7HplbcgPiBzaGluY2hvdVwgOwor5ZWG6YePID4gc2hvdXJ5b3VcIDsKK+aMn+aSgyA+IGt5b3VnZWtpXCA7CivmjqXlkIggPiBzZXRzdWdvdVwgOwor6KOP5Y+jID4gdXJhZ3VjaGlcIDsKK+ialemjnyA+IHNhbnNob2t1XCA7CivmipHnlZkgPiB5b2t1cnl1dVwgOwor6Yys6YmEID4gcmVudGV0c3VcIDsKK+a9ruaZgiA+IHNoaW9kb2tpXCA7Civmv4Plr4YgPiBub3VtaXRzdVwgOwor6KGo5b60ID4gaHlvdWNob3VcIDsKK+ihqOW9sCA+IGh5b3VzaG91XCA7Civlm73lraYgPiBrb2t1Z2FrdVwgOwor5ryg5rygID4gYmFrdWJha3VcIDsKK+aOqOWKmyA+IHN1aXJ5b2t1XCA7Civmj4nkuosgPiBtb21lZ290b1wgOwor56u257+UID4ga3lvdXNob3VcIDsKK+m8u+mrrSA+IGhhbmFoaWdlXCA7Civnq4vokbUgPiB0YWNoaWFvaVwgOwor57KJ5LmzID4gZnVuJydueXV1XCA7CivooZ3lv4MgPiBzaG91c2hpblwgOwor6by76auYID4gaGFuYXRha2FcIDsKK+WWgOihgCA+IGtha2tldHN1XCA7CivmiY3nrYYgPiBzYWloaXRzdVwgOwor5oqV54mpID4gbmFnZW1vbm9cIDsKK+WcsOWNtSA+IGppdGFtYWdvXCA7CivnsbPlgIkgPiBrb21lZ3VyYVwgOwor6KKW5Z6jID4gc29kZWdha2lcIDsKK+a3semFkiA+IGZ1a2F6YWtlXCA7CivlnLDlipsgPiBjaGlyeW9rdVwgOwor56m66LGGID4gc29yYW1hbWVcIDsKK+aMr+W5hSA+IHNoaW5wdWt1XCA7CivpvLvpoqggPiBoYW5ha2F6ZVwgOwor5o6S5YiXID4gaGFpcmV0c3VcIDsKK+exs+S7jyA+IGJlaWZ1dHN1XCA7CivmjZXlpLEgPiBob3NoaXRzdVwgOwor56uq57ieID4gdGF0ZWppbWFcIDsKK+aKhOeJqSA+IHNob3Vtb25vXCA7Civnq7nnsKEgPiBjaGlrdWthblwgOwor5ryC5ryCID4gaHlvdWh5b3VcIDsKK+aKueauuiA+IG1hc3NhdHN1XCA7Civoo4/ku5ggPiB1cmFkenVrZVwgOwor5ZSQ6YukID4ga2FyYXN1a2lcIDsKK+aGtuiqrCA+IG9rdXNldHN1XCA7CivlnKflh7ogPiBhc3NodXRzdVwgOwor56uL6ISaID4gcmlra3lha3VcIDsKK+erueeuhiA+IHRha2ViZXJhXCA7Civlm73lm70gPiBrdW5pZ3VuaVwgOwor57CS5aWqID4gc2FuZGF0c3VcIDsKK+Wdh+S4gCA+IGtpbicnaXRzdVwgOwor5ryP5rOEID4gcm91c2V0c3VcIDsKK+m8u+mdqSA+IGhhbmFnYXdhXCA7CivnqbroqqwgPiBrdXVzZXRzdVwgOwor5Zyn5YWlID4gYXRzdW55dXVcIDsKK+aMmeW8jyA+IGt5b3NoaWtpXCA7Civmv6vlhaUgPiByYW4nJ255dXVcIDsKK+mLvOmJhCA+IGtvdXRldHN1XCA7CivnqbroqIAgPiBzb3JhZ290b1wgOwor5ZSQ6YeRID4ga2FyYWthbmVcIDsKK+iZjumsmiA+IHRvcmFoaWdlXCA7CivmurbnmbogPiB5b3VoYXRzdVwgOwor5ru05ru0ID4gdGVraXRla2lcIDsKK+a8gua1gSA+IGh5b3VyeXV1XCA7CivomY7pq60gPiB0b3JhaGlnZVwgOwor6Y+R55+iID4ga2FidXJheWFcIDsKK+a8guaziiA+IGh5b3VoYWt1XCA7CivomZrpo74gPiBreW9zaG9rdVwgOwor5ouZ5paHID4gc2V0c3VidW5cIDsKK+euj+absiA+IHNvdWt5b2t1XCA7CivonqLngasgPiBob3RhcnViaVwgOwor6ZGR5pytID4ga2Fuc2F0c3VcIDsKK+aJjeeVpSA+IHNhaXJ5YWt1XCA7CivpioDpvKAgPiBnaW4nJ25lenVcIDsKK+a/q+S8kCA+IHJhbmJhdHN1XCA7Civmi77lvpcgPiBzaHV1dG9rdVwgOwor5Zu95Y6fID4ga3VuaWJhcmFcIDsKK+ibnuidkyA+IG5hbWVrdWppXCA7CivmjozkuK0gPiBzaG91Y2h1dVwgOwor56a/6be5ID4gaGFnZXRha2FcIDsKK+epuuidiSA+IHV0c3VzZW1pXCA7Civnr4nluq0gPiBjaGlrdXRlaVwgOwor56+k5a2mID4gdG9rdWdha3VcIDsKK+iejeeGsSA+IHl1dW5ldHN1XCA7Civpu5npu5kgPiBtb2t1bW9rdVwgOwor6Y2L6JOLID4gbmFiZWJ1dGFcIDsKK+aIkOeriyA+IHNlaXJpdHN1XCA7CivnrYbmtJcgPiBmdWRlYXJhaVwgOwor5Zuw5Y20ID4ga29ua3lha3VcIDsKK+aHuOe1tiA+IGtlbnpldHN1XCA7Civpu5Lpu7QgPiBrdXJva2FiaVwgOwor5rW36aOfID4ga2Fpc2hva3VcIDsKK+m7kum7kiA+IGt1cm9ndXJvXCA7CivmhY7ph40gPiBzaGluY2hvdVwgOwor6buS6bqmID4ga3Vyb211Z2lcIDsKK+aIkOeoiyA+IG5hcnVob2RvXCA7Civlm73lhYMgPiBrdW5pbW90b1wgOwor5omN54mpID4gc2FpYnV0c3VcIDsKK+m7kum3uiA+IGt1cm9zYWdpXCA7CivpiaTpvLsgPiBrYWdpYmFuYVwgOwor5re36KGAID4ga29ua2V0c3VcIDsKK+euseW6rSA+IGhha29uaXdhXCA7Civmi5nmgqogPiBzZXRzdWFrdVwgOwor5raI6ZW3ID4gc2hvdWNob3VcIDsKK+e0sOOAhSA+IGhvc29ib3NvXCA7Civpu5LptKggPiBrdXJvZ2Ftb1wgOwor5ouh5by1ID4ga2FrdWNob3VcIDsKK+mKgOmrqiA+IGdpbnBhdHN1XCA7Civom4bomasgPiB1amltdXNoaVwgOwor6J2V55SaID4gc2hva3VqaW5cIDsKK+ialeixhiA+IHNvcmFtYW1lXCA7CivooI3luqcgPiBzYXNvcml6YVwgOwor6KKW5LiIID4gc29kZXRha2VcIDsKK+aIpueVpSA+IHNlbnJ5YWt1XCA7Civlm57li4UgPiBrYWljaG9rdVwgOwor5Zu95Lq6ID4ga3VuaWJpdG9cIDsKK+a5v+eWuSA+IHNoaXNzaGluXCA7CivlmLHmnJsgPiBzaG9rdWJvdVwgOwor5rWc6aKoID4gaGFtYWthemVcIDsKK+erqueQtCA+IHRhdGVnb3RvXCA7CivmuIvojLYgPiBzaGlidWNoYVwgOwor6KGM5ZWGID4gZ3lvdXNob3VcIDsKK+eqruetliA+IGt5dXVzYWt1XCA7CivomrDonJIgPiBnZWppZ2VqaVwgOwor5oqX5pelID4ga291bmljaGlcIDsKK+a4i+iJsiA+IHNoaWJ1aXJvXCA7CivmtLvprZogPiBrYXRzdWd5b1wgOwor56+J5aCkID4gY2hpa3V0ZWlcIDsKK+epuuiAsyA+IHNvcmFtaW1pXCA7Civpiq3ph5EgPiB6ZW5pa2FuZVwgOwor5oud5a+fID4gaGFpc2F0c3VcIDsKK+aJv+acjSA+IHNob3VmdWt1XCA7CivmiKrnhLYgPiBzZXRzdXplblwgOwor6b6N6IifID4gcnl1dXNodXVcIDsKK+a3t+iJsiA+IGtvbnNob2t1XCA7CivmuqLmtYEgPiBpdHN1cnl1dVwgOwor5rue5pelID4gdGFpbmljaGlcIDsKK+aKleaKgCA+IG5hZ2V3YXphXCA7CivmiJvnhLYgPiBrYXRzdXplblwgOwor5oiR54mpID4gd2FnYW1vbm9cIDsKK+m8u+iosSA+IGhhbmFtb3RvXCA7Civnp5Lph50gPiBieW91c2hpblwgOwor5oyv5L2cID4gc2hpbnNha3VcIDsKK+a6neazpSA+IGRvYnVkb3JvXCA7CivpipHpiYQgPiBzZW50ZXRzdVwgOwor56aE6auYID4gcm9rdWRha2FcIDsKK+a6neawtCA+IGRvYnVtaXp1XCA7CivmhoLoibIgPiB5dXVzaG9rdVwgOwor56m657GkID4ga2FyYWt1amlcIDsKK+mJhOmqqCA+IHRla2tvdHN1XCA7Civmua/nhZkgPiB5dWtlbXVyaVwgOwor5rSX6auqID4gc2VucGF0c3VcIDsKK+a3oeiJsiA+IHRhbnNob2t1XCA7Civnp4HpiYQgPiBzaGl0ZXRzdVwgOwor56eS6YCfID4gYnlvdXNva3VcIDsKK+evpOS/oSA+IHRva3VzaGluXCA7CivnqbrnrrEgPiBrYXJhYmFrb1wgOwor56qB56uLID4gdG90dGF0c3VcIDsKK+WUkOiNiSA+IGthcmFrdXNhXCA7Civon7vloZogPiBhcmlkenVrYVwgOwor5r2u5YWIID4gc2hpb3Nha2lcIDsKK+iZmuiqrCA+IGt5b3NldHN1XCA7CivooYDkvr8gPiBrZXRzdWJlblwgOwor6KGM5LitID4gZ3lvdWNodXVcIDsKK+a0i+mrqiA+IHlvdWhhdHN1XCA7CivmiKbmsqEgPiBzZW5ib3RzdVwgOwor5oyH5YWIID4geXViaXNha2lcIDsKK+mMpue1tSA+IG5pc2hpa2llXCA7CivllYbnrZYgPiBzaG91c2FrdVwgOwor5omL5p6VID4gdGVtYWt1cmFcIDsKK+engOmAuCA+IHNodXVpdHN1XCA7Civnr4DliIYgPiBzZXRzdWJ1blwgOwor5oim5q2/ID4gc2VuYm90c3VcIDsKK+erueanjSA+IHRha2V5YXJpXCA7Civono3mjqUgPiB5dXVzZXRzdVwgOwor6buS6YmEID4ga3Vyb2dhbmVcIDsKK+a9nOWFpSA+IHNlbicnbnl1dVwgOwor6buS6YeRID4ga3Vyb2dhbmVcIDsKK+a0i+mjnyA+IHlvdXNob2t1XCA7CivnrYnlvI8gPiB0b3VzaGlraVwgOwor6Jep6ZalID4gaGFuYmF0c3VcIDsKK+a1gemHjyA+IHJ5dXVyeW91XCA7CivmhJ/op6YgPiBrYW5zaG9rdVwgOwor6Y2854G4ID4gc2hpbmt5dXVcIDsKK+eqgeeZuiA+IHRvcHBhdHN1XCA7CivpiaTph50gPiBrYWdpYmFyaVwgOwor5oqV5a6/ID4gdG91c2h1a3VcIDsKK+erueaelyA+IGNoaWt1cmluXCA7CivmurbmjqUgPiB5b3VzZXRzdVwgOwor5ZWT55m6ID4ga2VpaGF0c3VcIDsKK+erueadkCA+IGNoaWt1emFpXCA7CivnqbrnmbogPiBrdXVoYXRzdVwgOwor5omV5outID4gZnVzc2hva3VcIDsKK+elnumiqCA+IGthbWlrYXplXCA7CivnqoPnlKggPiBzZXRzdXlvdVwgOwor5rWB6YCfID4gcnl1dXNva3VcIDsKK+a1gemAmiA+IHJ5dXV0c3V1XCA7Civmu53lt50gPiB0YWtpZ2F3YVwgOwor56mA57KSID4ga29rdXJ5dXVcIDsKK+etkeWtkCA+IGtva2lyaWtvXCA7Civnq6/mnKsgPiB0YW5tYXRzdVwgOwor5ZSQ57SZID4ga2FyYWthbWlcIDsKK+iWpumqqCA+IHNlbmtvdHN1XCA7CivplbfjgIUgPiBuYWdhbmFnYVwgOwor6Ju454S8ID4gdGFrb3lha2lcIDsKK+elnembuyA+IHNodWt1ZGVuXCA7CivmgZDpvo0gPiBreW91cnl1dVwgOwor56eB6KqsID4gc2hpc2V0c3VcIDsKK+WTgeiWhCA+IHNoaW5hdXN1XCA7Civmi53lgJ8gPiBoYWlzaGFrdVwgOwor5oiq5patID4gc2V0c3VkYW5cIDsKK+a1t+idlSA+IGthaXNob2t1XCA7CivnrpflhaUgPiBzYW4nJ255dXVcIDsKK+eorue0mSA+IHRhbmVnYW1pXCA7CivmuKnnhrEgPiBvbicnbmV0c3VcIDsKK+mJhOmJoiA+IHRlcHBhY2hpXCA7Civnp4HoqK0gPiBzaGlzZXRzdVwgOwor5rqA5pyIID4gbWFuZ2V0c3VcIDsKK+mNi+eJqSA+IG5hYmVtb25vXCA7Civmub7mm7IgPiB3YW5reW9rdVwgOwor5rOi6aKoID4gbmFtaWthemVcIDsKK+mRkeWIpSA+IGthbmJldHN1XCA7Civpu5LosbkgPiBrdXJvaHlvdVwgOwor5oi/5oi/ID4gZnVzYWZ1c2FcIDsKK+m7kuixhiA+IGt1cm9tYW1lXCA7CivllJDnqoEgPiB0b3V0b3RzdVwgOwor6buZ6Ku+ID4gbW9rdWRha3VcIDsKK+mHjum8oCA+IG5vbmV6dW1pXCA7CivllqzmnKggPiBreW91Ym9rdVwgOwor6buZ6KqtID4gbW9rdWRva3VcIDsKK+aBpemqqCA+IGNoaWtvdHN1XCA7CivmiYvlv4MgPiB0ZWdva29yb1wgOwor56qB54S2ID4gdG90c3V6ZW5cIDsKK+aKvOWIhyA+IG9zaGlraXJpXCA7CivmipHlnKcgPiB5b2t1YXRzdVwgOwor5oW256WdID4ga2Vpc2h1a3VcIDsKK+ethuWkqiA+IGZ1ZGVidXRvXCA7CivpiYTpgZMgPiB0ZXRzdWRvdVwgOwor57KY44CFID4gbmViYW5lYmFcIDsKK+elnumPoSA+IHNoaW5reW91XCA7CivmuInnjJ8gPiBzaG91cnlvdVwgOwor6Jma6ISxID4ga3lvZGF0c3VcIDsKK+ays+mxkiA+IGthd2FtYXN1XCA7Civpiq3oi5QgPiB6ZW5pZ29rZVwgOwor56uL5pytID4gdGF0ZWZ1ZGFcIDsKK+WZm+WCtyA+IGthbWlraXp1XCA7Civph47ptrIgPiBub2JpdGFraVwgOwor5ryU5Ye6ID4gZW5zaHV0c3VcIDsKK+a4rOa3sSA+IHNva3VzaGluXCA7CivpvLvntJkgPiBoYW5hZ2FtaVwgOwor5rip5ripID4gbnVrdW51a3VcIDsKK+m8u+ezniA+IGhhbmFrdXNvXCA7CivnsonjgIUgPiBrb25hZ29uYVwgOwor5oKq6YCGID4gYWt1Z3lha3VcIDsKK+aCqui+oyA+IGFrdXJhdHN1XCA7CivmiKbmhYQgPiBzZW5yaXRzdVwgOwor6buS6KGoID4ga29rdWh5b3VcIDsKK+a2vOeniyA+IHJ5b3VzaHV1XCA7CivpvLvnrYsgPiBoYW5hc3VqaVwgOwor6bqp6LOqID4gZnVzaGl0c3VcIDsKK+ayiOm7mSA+IGNoaW5tb2t1XCA7Civom43ngasgPiBob3RhcnViaVwgOwor6YeR6auqID4ga2lucGF0c3VcIDsKK+mJiOixhiA+IG5hdGFtYW1lXCA7Civno6/pt7ggPiBpc29zaGlnaVwgOwor5rqd5bedID4gZG9idWdhd2FcIDsKK+mOlOaOpSA+IHlvdXNldHN1XCA7CivpjbXmnZ8gPiBrYWdpdGFiYVwgOwor56We6YCfID4gc2hpbnNva3VcIDsKK+m7kuibhyA+IGt1cm9oZWJpXCA7CivmuoDmgqYgPiBtYW4nJ2V0c3VcIDsKK+aIkeaIkSA+IHdhcmV3YXJlXCA7CivmuIXmvZQgPiBzZWlrZXRzdVwgOwor562G5ZCNID4gaGl0c3VtZWlcIDsKK+eoi+eoiyA+IGhvZG9ob2RvXCA7CivonY7luqcgPiBzYXNvcml6YVwgOwor56iu55WcID4gc2h1Y2hpa3VcIDsKK+eti+WKmyA+IGtpbnJ5b2t1XCA7CivpioXoibIgPiBkb3VzaG9rdVwgOwor5Y+N6aqoID4gaGFua290c3VcIDsKK+a6luWwuiA+IGp1bnNoYWt1XCA7Civlj6zpm4YgPiBzaG91c2h1dVwgOwor5rOo6YCyID4gY2h1dXNoaW5cIDsKK+WVhuazgSA+IHNob3VreW91XCA7Civpi7znjokgPiBrb3VneW9rdVwgOwor5rm/5bqmID4gc2hpdHN1ZG9cIDsKK+ifhOS8jyA+IGNoaXBwdWt1XCA7CivmtYXokbEgPiBhc2F0c3VraVwgOwor5oiS5b6LID4ga2Fpcml0c3VcIDsKK+eruuWtpiA+IGppa3VnYWt1XCA7CivlkLnosqsgPiBmdWtpbnVraVwgOwor56y55Y6fID4gc2FzYWhhcmFcIDsKK+eqk+aeoCA+IG1hZG93YWt1XCA7CivllJDniakgPiB0b3Vtb3RzdVwgOwor5Y+i6ZuyID4gbXVyYWt1bW9cIDsKK+WPoumbqCA+IG11cmFzYW1lXCA7CivmtpznpZ4gPiB0b2t1c2hpblwgOwor56uv5bGAID4gdGFua3lva3VcIDsKK+aKnuS4gCA+IHRha3VpdHN1XCA7CivmiKblsYAgPiBzZW5reW9rdVwgOwor562G5YWIID4gZnVkZXNha2lcIDsKK+mKreeusSA+IHplbmliYWtvXCA7CivpjKjms4ogPiBieW91aGFrdVwgOwor6YmE6KGAID4gdGVra2V0c3VcIDsKK+a3t+a1tCA+IGtvbicneW9rdVwgOwor5rex5rexID4gZnVrYWJ1a2FcIDsKK+iXquibhyA+IHlhYnVoZWJpXCA7CivnqK7niakgPiB0YW5lbW9ub1wgOwor56iu54mbID4gdGFuZXVzaGlcIDsKK+ibh+avkiA+IGhlYmlkb2t1XCA7CivmiIzlubQgPiBpbnVkb3NoaVwgOwor6by755a+ID4gYmlzaGl0c3VcIDsKK+a7keWJpCA+IGthdHN1emFpXCA7Civpu5LoiLkgPiBrdXJvZnVuZVwgOwor5ZWG5qiZID4gc2hvdWh5b3VcIDsKK+m8jueriyA+IHRlaXJpdHN1XCA7CivpioDnv7wgPiBnaW4nJ3lva3VcIDsKK+azpei2syA+IGRvcm9hc2hpXCA7CivpjozlvaIgPiBrYW1hZ2F0YVwgOwor5ruF5Y20ID4gbWVra3lha3VcIDsKK+mHo+mKrSA+IHRzdXJpc2VuXCA7CivllYbmpa0gPiBzaG91Z3lvdVwgOwor6Ymx6ISIID4ga291bXlha3VcIDsKK+WPjumbhiA+IHNodXVzaHV1XCA7Civomornh7sgPiBrYWlidXNoaVwgOwor5ZCE6YCxID4ga2FrdXNodXVcIDsKK+elnuiolyA+IHNoaW50YWt1XCA7Civmib/kvI8gPiBzaG91ZnVrdVwgOwor5ZCD6YCGID4gc2hha2t1cmlcIDsKK+m6ueiPjCA+IGtvdWppa2luXCA7Civpu4ToibIgPiBrb3VzaG9rdVwgOwor5ZG96ISIID4gbWVpbXlha3VcIDsKK+m7kuiCiSA+IGt1cm9uaWt1XCA7Civpuqbol4EgPiBtdWdpd2FyYVwgOwor56u55Z6jID4gdGFrZWdha2lcIDsKK+mNm+aOpSA+IHRhbnNldHN1XCA7Civph53ph5EgPiBoYXJpZ2FuZVwgOwor6YqA57iBID4gZ2luYnVjaGlcIDsKK+mHkemMhiA+IGthbmFzYWJpXCA7CivnqI7njocgPiB6ZWlyaXRzdVwgOwor56uL5bGxID4gdGF0ZXlhbWFcIDsKK+m6puiSlCA+IG11Z2ltYWtpXCA7Civph5HpiYQgPiBraW50ZXRzdVwgOwor5Y+k6YeRID4gZnVydWdhbmVcIDsKK+WPpOmHjCA+IGZ1cnVzYXRvXCA7CivllYTmnKggPiB0YWt1Ym9rdVwgOwor5Y+j6YeNID4ga3VjaGlvbW9cIDsKK+a4h+acmyA+IGthdHN1Ym91XCA7CivmiY3lipsgPiBzYWlyeW9rdVwgOwor5Y+k6YWSID4gZnVydXpha2VcIDsKK+a4heacnSA+IHNoaW5jaG91XCA7CivpvLvnhoogPiBoYW5hZ3VtYVwgOwor56yR5YqHID4gc2hvdWdla2lcIDsKK+mMq+adliA+IHNoYWt1am91XCA7Civnqbrmkq4gPiBrdXVzYXRzdVwgOwor6buZ57SEID4gbW9rdXlha3VcIDsKK+ekvuiqrCA+IHNoYXNldHN1XCA7CivmtYXnt5EgPiBzZW5yeW9rdVwgOwor5Y+O6YyyID4gc2h1dXJva3VcIDsKK+aJi+WIgCA+IHRlZ2F0YW5hXCA7CivnqY3mpbUgPiBzZWtreW9rdVwgOwor5omT5YK3ID4gdWNoaWtpenVcIDsKK+mJhOiJsiA+IHRldHN1aXJvXCA7Civlm73jgIUgPiBrdW5pZ3VuaVwgOwor56aP6ICzID4gZnVrdW1pbWlcIDsKK+a7heS6oSA+IG1ldHN1Ym91XCA7CivmhYTnhLYgPiByaXRzdXplblwgOwor5Y+j6L+wID4ga291anV0c3VcIDsKK+WQjOiqrCA+IGRvdXNldHN1XCA7CivnqpLmga8gPiBjaGlzc29rdVwgOwor5Y+z6LazID4gbWlnaWFzaGlcIDsKK+aylumHoyA+IG9raWR6dXJpXCA7Civnq7nlj6IgPiB0YWthbXVyYVwgOwor6buS57GzID4ga3Vyb2dvbWVcIDsKK+WPjumHjyA+IHNodXVyeW91XCA7CivpiYTohZUgPiB0ZXRzdXdhblwgOwor5Y+b6YCGID4gaGFuZ3lha3VcIDsKK+m7nueptCA+IHRlbmtldHN1XCA7CivmsLTps6UgPiBtaXp1ZG9yaVwgOwor5rqA5ZarID4gbWFua2l0c3VcIDsKK+WRiOiJsiA+IHRlaXNob2t1XCA7CivmiJHlm70gPiB3YWdha3VuaVwgOwor6Jau6JuHID4geWFidWhlYmlcIDsKK+WPseiyrCA+IHNoaXNzZWtpXCA7CivmgqroiIwgPiBha3V6ZXRzdVwgOwor6JmO54yrID4gdG9yYW5la29cIDsKK+a0kuiEsSA+IHNoYWRhdHN1XCA7CivpurvntrEgPiBhc2FkenVuYVwgOwor6buQ56u/ID4gbW9jaGl6YW9cIDsKK+WQq+iThCA+IGdhbmNoaWt1XCA7Civlj43pgIYgPiBoYW5neWFrdVwgOwor5Y+C6YWMID4gc2Fuc2hha3VcIDsKK+aIpuWKmyA+IHNlbnJ5b2t1XCA7Civlj47ovK8gPiBzaHV1c2h1dVwgOwor5ZCE6KGMID4ga2FrdWd5b3VcIDsKK+aIpuWIlyA+IHNlbnJldHN1XCA7CivpjYvlupUgPiBuYWJlem9rb1wgOwor5oCl6YCyID4ga3l1dXNoaW5cIDsKK+aCquiAhSA+IHdhcnVtb25vXCA7CivmgKXpgJ8gPiBreXV1c29rdVwgOwor5oCl6L+9ID4ga3l1dXRzdWlcIDsKK+aApei/qyA+IGt5dXVoYWt1XCA7CivpvLvmsLQgPiBoYW5hbWl6dVwgOwor5oK957W2ID4gc2VpemV0c3VcIDsKK+eqruWigyA+IGt5dXVreW91XCA7CivmgrbntbYgPiBtb256ZXRzdVwgOwor5ZGo56ugID4gc2h1dXNob3VcIDsKK+W/q+mXiiA+IGthaWthdHN1XCA7CivmsLTpo58gPiBzdWlzaG9rdVwgOwor56u25L2cID4ga3lvdXNha3VcIDsKK+eri+WRvSA+IHJpdHN1bWVpXCA7CivljrPpgZQgPiBnZW50YXRzdVwgOwor5Y6z6YC5ID4gZ2VudGF0c3VcIDsKK+a5vuWFpSA+IHdhbicnbnl1dVwgOwor5rip5a6kID4gb25zaGl0c3VcIDsKK+mHjeiqrCA+IGp1dXNldHN1XCA7CivpjYvlsLsgPiBuYWJlamlyaVwgOwor5rex5oaCID4gc2hpbicneXV1XCA7CivmsLfpnIcgPiBoeW91c2hpblwgOwor6YmE562GID4gdGVwcGl0c3VcIDsKK+a0u+ecvCA+IGthdHN1Z2FuXCA7Civlj6Poo48gPiBrdWNoaXVyYVwgOwor5rSe56qfID4gZG91a3V0c3VcIDsKK+aIkeWEmCA+IHdhZ2FtYW1hXCA7CivmsLTpmpsgPiBtaXp1Z2l3YVwgOwor6YeN6KSHID4gY2hvdWZ1a3VcIDsKK+engeeJqSA+IHNoaWJ1dHN1XCA7CivmtLvnmbogPiBrYXBwYXRzdVwgOwor6bqm56iIID4gbXVnaXdhcmFcIDsKK+eqkuWhniA+IGNoaXNzb2t1XCA7CivmtojmsoggPiBzaG91Y2hpblwgOwor5ZCM6ImyID4gZG91c2hva3VcIDsKK+aCquethiA+IGFrdWhpdHN1XCA7CivnoazpqqggPiBrb3Vrb3RzdVwgOwor5oiR5L6tID4gd2FnYW1hbWFcIDsKK+ayouigjyA+IHNhd2FnYW5pXCA7CivmsqLon7kgPiBzYXdhZ2FuaVwgOwor5oar5a+fID4gYmluc2F0c3VcIDsKK+m6l+ethiA+IHJlaWhpdHN1XCA7Civol4HntJkgPiB3YXJhZ2FtaVwgOwor56uL5YOPID4gcml0c3V6b3VcIDsKK+a0u+eUqCA+IGthdHN1eW91XCA7Civmtojmr5IgPiBzaG91ZG9rdVwgOwor5ZWG5a2mID4gc2hvdWdha3VcIDsKK+aIkeS6uiA+IHdhcmVoaXRvXCA7CivpjYvloqggPiBuYWJlenVtaVwgOwor5oiQ5LuPID4gam91YnV0c3VcIDsKK+m7kueMqyA+IGt1cm9uZWtvXCA7CivmiJHkuosgPiB3YWdha290b1wgOwor5ZCM6IOeID4gaGFyYWthcmFcIDsKK+mJseeJqSA+IGtvdWJ1dHN1XCA7CivmgKXopbIgPiBreXV1c2h1dVwgOwor5ZCM6IG3ID4gZG91c2hva3VcIDsKK+epuuWkoiA+IHNvcmF5dW1lXCA7Civms6XnuIQgPiBkb3JvbmF3YVwgOwor5b606ZuGID4gY2hvdXNodXVcIDsKK+mFi+mVtyA+IHNodXVjaG91XCA7CivljYrpnbQgPiBoYW5ndXRzdVwgOwor5oK2552AID4gbW9uY2hha3VcIDsKK+m7hOeOiSA+IGtvdWd5b2t1XCA7Civpu5LnhoogPiBrdXJvZ3VtYVwgOwor6JKy6a2aID4ga2FtYXRvdG9cIDsKK+aDqOeDiCA+IHNhbnJldHN1XCA7CivllonlhYMgPiBub2RvbW90b1wgOwor56m65aCAID4ga2FyYWJvcmlcIDsKK+iWhOiGnCA+IGhha3VtYWt1XCA7Civnqq/lhYMgPiBrYW1hbW90b1wgOwor5rib5ZynID4gZ2VuJydhdHN1XCA7Civnp4Hmt5EgPiBzaGlzaHVrdVwgOwor56ia5ouZID4gY2hpc2V0c3VcIDsKK+elkOethiA+IHl1dWhpdHN1XCA7Civlj6TojYkgPiBmdXJ1a3VzYVwgOwor5Y+j6I2SID4ga3VjaGlhcmFcIDsKK+elnuelniA+IGthbWlnYW1pXCA7CivnpZ3npbcgPiBzaHVrdXRvdVwgOwor56We56WQID4gc2hpbicneXV1XCA7CivnpZ3npa0gPiBzaHVrdXNhaVwgOwor5ZGK55m9ID4ga29rdWhha3VcIDsKK+m7hOeGsSA+IGtvdW5ldHN1XCA7CivljYrplbcgPiBoYW4nJ25hZ2FcIDsKK+mJhOeTtiA+IHRldHN1YmluXCA7CivmsLTpg6ggPiBtaXp1bm9idVwgOwor5oKq55mWID4gd2FydWd1c2VcIDsKK+m7kua9riA+IGt1cm9zaGlvXCA7Civok4Tpm7sgPiBjaGlrdWRlblwgOwor5q+N6bOlID4gaGFoYWRvcmlcIDsKK+WPo+iIjCA+IGtvdXpldHN1XCA7CivnpZ3noLIgPiBzaHVrdWhvdVwgOwor5q+b6auqID4gbW91aGF0c3VcIDsKK+ekvOevgCA+IHJlaXNldHN1XCA7Civlj4rokL0gPiBreXV1cmFrdVwgOwor6YqD5q66ID4ganV1c2F0c3VcIDsKK+a4heWbvSA+IHNoaW5rb2t1XCA7Civmg4XnhrEgPiBqb3VuZXRzdVwgOwor56m65ZKzID4ga2FyYXpla2lcIDsKK+ibruWKmyA+IGJhbnJ5b2t1XCA7CivmhYvmhYsgPiB3YXphd2F6YVwgOwor6YeR6ISIID4ga2lubXlha3VcIDsKK+WPquiAhSA+IHRhZGFtb25vXCA7Civmh4fliIcgPiBrb25zZXRzdVwgOwor56aB54mpID4ga2lubW90c3VcIDsKK+iZkOaUvyA+IGd5YWt1c2VpXCA7CivlkI3nrYYgPiBtZWloaXRzdVwgOwor56K66Ki8ID4ga2FrdXNob3VcIDsKK+ekvueotyA+IHNoYXNob2t1XCA7CivlkIznrYYgPiBkb3VoaXRzdVwgOwor5oCl6JC9ID4ga3l1dXJha3VcIDsKK+a0u+a6jCA+IGthcHBhdHN1XCA7CivphY3pgZQgPiBoYWl0YXRzdVwgOwor6Yu45bGRID4gbm9rb2t1enVcIDsKK+mHjeiBtyA+IGp1dXNob2t1XCA7CivmtYHmtYEgPiByeXV1cnl1dVwgOwor5reA5bedID4geW9kb2dhd2FcIDsKK+aDkea6uiA+IHdha3VkZWtpXCA7CivmtYXmspMgPiBhc2FndXRzdVwgOwor5ZCM56m0ID4gZG91a2V0c3VcIDsKK+aDqOauuiA+IHphbnNhdHN1XCA7CivphbfoqZUgPiBrb2t1aHlvdVwgOwor6Yej57O4ID4gdHN1cmlpdG9cIDsKK+a0l+eGiiA+IGFyYWlndW1hXCA7Civlv4PouqsgPiBzaGluc2hpblwgOwor6YeN572wID4ganV1YmF0c3VcIDsKK+a1geawtyA+IHJ5dXVoeW91XCA7Civms6jnm64gPiBjaHV1bW9rdVwgOwor5Y+M6ISaID4gc291a3lha3VcIDsKK+axl+ihgCA+IGthbmtldHN1XCA7Civmtarmm7IgPiByb3VreW9rdVwgOwor6YeR57iBID4ga2luYnVjaGlcIDsKK+WNiumBkyA+IGhhbm1pY2hpXCA7CivljJfpmbggPiBob2t1cmlrdVwgOwor5Y6f6JasID4gZ2VuJyd5YWt1XCA7CivljbPoq74gPiBzb2t1ZGFrdVwgOwor5rS75q66ID4ga2Fzc2F0c3VcIDsKK+WUr+WUryA+IHRhZGF0YWRhXCA7CivlkajmtYEgPiBzaHV1cnl1dVwgOwor56iy5aa7ID4gaW5hZHp1bWFcIDsKK+WPs+ethiA+IHl1dWhpdHN1XCA7CivllJDloqggPiBrYXJhc3VtaVwgOwor5Y+y562GID4gc2hpaGl0c3VcIDsKK+mHo+ervyA+IHRzdXJpemFvXCA7Civph53nrrEgPiBoYXJpYmFrb1wgOwor56eB5puyID4gc2hpa3lva3VcIDsKK+W/g+ixoSA+IHNoaW5zaG91XCA7CivllLHlkI0gPiBzaG91bXlvdVwgOwor5Y+q566hID4gaGl0YXN1cmFcIDsKK+WQjOedgCA+IGRvdWNoYWt1XCA7CivmtKXmtKUgPiBzaGluc2hpblwgOwor5Y2T6LaKID4gdGFrdWV0c3VcIDsKK+aBkOernCA+IGt5b3VyeXV1XCA7CivpvLvlsY4gPiBoYW5ha3Vzb1wgOwor5riF5Ya9ID4gc2VpcmV0c3VcIDsKK+iSkOmbhiA+IHNodXVzaHV1XCA7Civlj5bntYQgPiB0b3Jpa3VtaVwgOwor6JKy6Ym+ID4ga2FtYWJva29cIDsKK+a1t+aKnCA+IGthaWJhdHN1XCA7Civph5HnrrEgPiBrYW5lYmFrb1wgOwor6Jma5byPID4ga3lvc2hpa2lcIDsKK+a2iOaBryA+IHNob3Vzb2t1XCA7CivmsJfos6ogPiBraXNoaXRzdVwgOwor5q676aCCID4ga2FrdWNob3VcIDsKK+WPo+esmyA+IGt1Y2hpYnVlXCA7CivlkITnnIEgPiBrYWt1c2hvdVwgOwor5Y6f6Iy4ID4gaGFyYXRha2VcIDsKK+m0m+m0piA+IG9zaGlkb3JpXCA7CivolqznjokgPiBrdXN1ZGFtYVwgOwor6JmQ5b6FID4gZ3lha3V0YWlcIDsKK+m7kuaeoCA+IGt1cm93YWt1XCA7CivphbfoloQgPiBrb2t1aGFrdVwgOwor5b+D6Ki8ID4gc2hpbnNob3VcIDsKK+mHkeeptCA+IGtpbmtldHN1XCA7Civljp/oibIgPiBnZW5zaG9rdVwgOwor6buS5pyNID4ga3Vyb2Z1a3VcIDsKK+WLnemmrCA+IGthY2hpdW1hXCA7Civmt7HliLsgPiBzaGlua29rdVwgOwor56C06ZCYID4gd2FyZWdhbmVcIDsKK+W/heimgSA+IGhpdHN1eW91XCA7Civmt7flhaUgPiBrb24nJ255dXVcIDsKK+W/jeihkyA+IG5pbmp1dHN1XCA7CivljrPnvbAgPiBnZW5iYXRzdVwgOwor5rWB5pyoID4gcnl1dWJva3VcIDsKK+mIjeeJqSA+IGRvbmJ1dHN1XCA7Civlj7jnm7QgPiBzaGljaG9rdVwgOwor5Y2U6Kq/ID4ga3lvdWNob3VcIDsKK+W+jOi/sCA+IGtvdWp1dHN1XCA7CivnpoHmrLIgPiBraW4nJ3lva3VcIDsKK+a4h+S7sCA+IGthdHN1Z291XCA7Civnp6nluo8gPiBjaGl0c3Vqb1wgOwor5Y2S6KuWID4gc290c3Vyb25cIDsKK+awtOidlSA+IHN1aXNob2t1XCA7CivmtYHmmqIgPiByeXV1Y2hvdVwgOwor5rC06JycID4gc3VpbWl0c3VcIDsKK+efs+mrmCA+IGtva3VkYWthXCA7CivmvILjgIUgPiBoeW91aHlvdVwgOwor5b606Ki8ID4gY2hvdXNob3VcIDsKK+WRveaXpSA+IG1laW5pY2hpXCA7CivlvqnorpAgPiBmdWt1c2h1dVwgOwor5b6p6K6OID4gZnVrdXNodXVcIDsKK+WQjOeOhyA+IGRvdXJpdHN1XCA7Civmg5zmmKUgPiBzZWtpc2h1blwgOwor56S854mpID4gcmVpbW90c3VcIDsKK+efremrqiA+IHRhbnBhdHN1XCA7CivomZrlrp8gPiBreW9qaXRzdVwgOwor5rKW56mNID4gY2h1dXNla2lcIDsKK+iThOiyoSA+IGNoaWt1emFpXCA7Civlj47nqasgPiBzaHV1a2FrdVwgOwor5oGL552AID4gcmVuY2hha3VcIDsKK+W+qeiqvyA+IGZ1a3VjaG91XCA7CivmgqnmrrogPiBub3VzYXRzdVwgOwor5b6p6KqmID4gZnVrdXNob3VcIDsKK+ayu+eVpSA+IGNoaXJ5YWt1XCA7CivlkI3niakgPiBtZWlidXRzdVwgOwor5YyX6YCyID4gaG9rdXNoaW5cIDsKK+m7hOaYjyA+IHRhc29nYXJlXCA7Civlj7LnlaUgPiBzaGlyeWFrdVwgOwor5rOl5r+YID4gbnVrYXJ1bWlcIDsKK+iXpOajmiA+IGZ1amlkYW5hXCA7CivljJfovrAgPiBob2t1c2hpblwgOwor5Y6z57KbID4gZ2Vuc2h1a3VcIDsKK+mJhOajkiA+IHRldHN1Ym91XCA7CivpvJPlrqQgPiBrb3NoaXRzdVwgOwor6bOp6bqmID4gaGF0b211Z2lcIDsKK+ayiOepjSA+IGNoaW5zZWtpXCA7CivpiYTmooMgPiBrYW5hdGVrb1wgOwor5by36ZyHID4ga3lvdXNoaW5cIDsKK+iQvemthCA+IHJha3VoYWt1XCA7Civph4/nmoQgPiByeW91dGVraVwgOwor5b+g6ImvID4gY2h1dXJ5b3VcIDsKK+iXqeacrSA+IGhhbnNhdHN1XCA7Civlj6TnlrUgPiBmdXJ1a2l6dVwgOwor5YuF6aGYID4gY2hva3VnYW5cIDsKK+mFkuiUtSA+IHNha2FndXJhXCA7Civli4XpoYwgPiBjaG9rdWRhaVwgOwor5b+g6IejID4gY2h1dXNoaW5cIDsKK+W8semchyA+IGpha3VzaGluXCA7CivnrYnjgIUgPiBuYWRvbmFkb1wgOwor56aB5pytID4ga2luc2F0c3VcIDsKK+eoruWIpSA+IHNodWJldHN1XCA7Civpu5LmiL8gPiBrdXJvYnVzYVwgOwor5oKm5qW9ID4gZXRzdXJha3VcIDsKK+awtOiNiSA+IG1penVrdXNhXCA7CivmhJvlrZAgPiBpdG9zaGlnb1wgOwor6YmE5p2QID4gdGV0c3V6YWlcIDsKK+W8pumfsyA+IHRzdXJ1b3RvXCA7CivllJDlgpggPiBrYXJha2FzYVwgOwor6bqm5p2fID4gbXVnaXRhYmFcIDsKK+awtOiMjiA+IG1penVndWtpXCA7CivmhoLkuosgPiB1cmVpZ290b1wgOwor55+t6Z20ID4gdGFuZ3V0c3VcIDsKK+awtOiLlCA+IG1penVnb2tlXCA7CivmtIvmoqggPiB5b3VuYXNoaVwgOwor5q6L6ZuqID4gemFuc2V0c3VcIDsKK+WOmue0mSA+IGF0c3VnYW1pXCA7CivmtbTlrqIgPiB5b2treWFrdVwgOwor56We5qmLID4gc2hpbmt5b3VcIDsKK+awtOiIuSA+IG1penVidW5lXCA7Civms6XmsrwgPiBkb3JvbnVtYVwgOwor5Y+N55m6ID4gaGFucGF0c3VcIDsKK+elnuanmCA+IGthbWlzYW1hXCA7Civlj4znmbogPiBzb3VoYXRzdVwgOwor56Oo55+zID4gdG9naWlzaGlcIDsKK+W8gemrqiA+IGJlbnBhdHN1XCA7Civms6XmsLQgPiBkb3JvbWl6dVwgOwor5rOh5rKrID4gaG91bWF0c3VcIDsKK+elnualrSA+IGthbWl3YXphXCA7CivmsLTohbkgPiBtaXp1YmFyYVwgOwor5Y+C552AID4gc2FuY2hha3VcIDsKK+iWrOavkiA+IHlha3Vkb2t1XCA7CivnorrntIQgPiBrYWt1eWFrdVwgOwor6YWS6ImyID4gc2h1c2hva3VcIDsKK+awtOiEiCA+IHN1aW15YWt1XCA7CivnpZ7mo5ogPiBrYW1pZGFuYVwgOwor5Y+k54mpID4gZnVydW1vbm9cIDsKK+W/q+e1tiA+IGthaXpldHN1XCA7CivphY3oibIgPiBoYWlzaG9rdVwgOwor6YeR54mpID4ga2FuYW1vbm9cIDsKK+elnuagvCA+IHNoaW5rYWt1XCA7Civnpr/lsbEgPiBoYWdleWFtYVwgOwor5Y2B6JasID4gZG9rdWRhbWlcIDsKK+ayiOeXmyA+IGNoaW50c3V1XCA7CivmgKXnl4UgPiBreXV1YnlvdVwgOwor6Yed54G4ID4gc2hpbmt5dXVcIDsKK+efs+mPgyA+IHNla2l6b2t1XCA7Civnpa3ml6UgPiBzYWlqaXRzdVwgOwor5Y2Y6ImyID4gdGFuc2hva3VcIDsKK+W/g+iFuSA+IHNoaW5wdWt1XCA7CivmsbrnnYAgPiBrZXRjaGFrdVwgOwor56iO5YilID4gemVpYmV0c3VcIDsKK+m7kuW5lSA+IGt1cm9tYWt1XCA7CivnpZ3mna8gPiBzaHVrdWhhaVwgOwor56We5pyoID4gc2hpbmJva3VcIDsKK+aCquaTpiA+IHdhcnV6dXJlXCA7CivpvLvlhYggPiBoYW5hc2FraVwgOwor6by75YWDID4gaGFuYW1vdG9cIDsKK+elnuaciCA+IGtvdWR6dWtpXCA7Civlj47njbIgPiBzaHV1a2FrdVwgOwor5rCR6I2JID4gdGFtaWd1c2FcIDsKK+a0u+W8gSA+IGthdHN1YmVuXCA7CivnoZ3olqwgPiBzaG91eWFrdVwgOwor5ZKM5a6kID4gd2FzaGl0c3VcIDsKK+mHiOeEtiA+IHNoYWt1emVuXCA7Civnp7DlkI0gPiBzaG91bXlvdVwgOwor56aB5oW+ID4ga2luJyd5b2t1XCA7Civlk7LkurogPiB0ZXRzdWppblwgOwor56aP5b6zID4gZnVrdXRva3VcIDsKK+m7kuWxsSA+IGt1cm95YW1hXCA7Civli7/oq5YgPiBtb2NoaXJvblwgOwor5by36L+rID4ga3lvdWhha3VcIDsKK+W8lOmQmCA+IGNob3VzaG91XCA7CivmgKrniakgPiBrYWlidXRzdVwgOwor56aP5byVID4gZnVrdWJpa2lcIDsKK+ayvOayoiA+IHNob3V0YWt1XCA7CivonbbjgIUgPiBjaG91Y2hvdVwgOwor6JaE5rC3ID4gaGFrdWh5b3VcIDsKK+WNkuiAhSA+IHNvdHN1c2hhXCA7CivmsrnmsZcgPiBhYnVyYWFzZVwgOwor5Y6f55m6ID4gZ2VucGF0c3VcIDsKK+WJsumrmCA+IHdhcmlkYWthXCA7CivokZfov7AgPiBjaG9qdXRzdVwgOwor56Cy6KGTID4gaG91anV0c3VcIDsKK+WOmueariA+IGF0c3VrYXdhXCA7Civli4XpgbggPiBjaG9rdXNlblwgOwor5rGC56mNID4ga3l1dXNla2lcIDsKK+avm+iZsSA+IGtlamlyYW1pXCA7CivphZLns58gPiBzYWtla2FzdVwgOwor6YWS57KVID4gc2FrZWthc3VcIDsKK+WKh+mchyA+IGdla2lzaGluXCA7CivlvJXph5EgPiBoaWtpZ2FuZVwgOwor5Y+k5rKzID4gZnVydWthd2FcIDsKK+W+qee/kiA+IGZ1a3VzaHV1XCA7Civmr5Lom4cgPiBkb2t1aGViaVwgOwor6YmE5bqKID4ga2FuYXRva29cIDsKK+WQjeaciCA+IG1laWdldHN1XCA7CivlkI3mm7IgPiBtZWlreW9rdVwgOwor6YmE5bi9ID4gdGV0c3Vib3VcIDsKK+WQjOaciCA+IGRvdWdldHN1XCA7CivmgKXmv4AgPiBreXV1Z2VraVwgOwor5Y2g566XID4gdXJheWFzYW5cIDsKK+WNlOe0hCA+IGt5b3V5YWt1XCA7Civmr5LolqwgPiBkb2t1eWFrdVwgOwor5rG654S2ID4ga2V0c3V6ZW5cIDsKK+auluiyoSA+IHNob2t1emFpXCA7Civph43mrrogPiBqdXVzYXRzdVwgOwor5oOF5a6fID4gam91aml0c3VcIDsKK+eni+WPoyA+IGFraWd1Y2hpXCA7Civph5HmrKAgPiBraW5rZXRzdVwgOwor5Y2Y56+AID4gdGFuc2V0c3VcIDsKK+a0i+W8jyA+IHlvdXNoaWtpXCA7Civlj5bmsbogPiB0b3Jpa2ltZVwgOwor5ZCM5pelID4gZG91aml0c3VcIDsKK+elreW8jyA+IHNhaXNoaWtpXCA7CivomZDkvb8gPiBneWFrdXNoaVwgOwor5rKQ5rW0ID4gbW9rdXlva3VcIDsKK+W+kuiAhSA+IHRhZGFtb25vXCA7CivpiYTlsbEgPiB0ZXRzdXphblwgOwor5Y6f54mpID4gZ2VuYnV0c3VcIDsKK+WKm+mHjyA+IHJpa2lyeW91XCA7CivmtJ7lr58gPiBkb3VzYXRzdVwgOwor5by36Kq/ID4ga3lvdWNob3VcIDsKK+mBk+mghiA+IG1pY2hpanVuXCA7CivnpZ7lvrMgPiBzaGludG9rdVwgOwor5b+D56WeID4gc2hpbnNoaW5cIDsKK+mBiumjnyA+IHl1dXNob2t1XCA7CivlvqnnsY0gPiBmdWt1c2VraVwgOwor5qyg6aOfID4ga2Vzc2hva3VcIDsKK+aApea1gSA+IGt5dXVyeXV1XCA7Civmr5LojLggPiBkb2t1dGFrZVwgOwor5bu26YeRID4gbm9iZWdhbmVcIDsKK+eijOeijCA+IHJva3Vyb2t1XCA7Civpiq3kuoAgPiB6ZW5pZ2FtZVwgOwor5q2v6LuKID4gaGFndXJ1bWFcIDsKK+W8t+ilsiA+IGt5b3VzaHV1XCA7CivlvJXotoogPiBoaWtrb3NoaVwgOwor5YmD6auqID4gdGVpaGF0c3VcIDsKK+W/veeEtiA+IGtvdHN1emVuXCA7Civph5HmooMgPiBrYW5hdGVrb1wgOwor5Y+k5qCqID4gZnVydWthYnVcIDsKK+WLheirmiA+IGNob2t1am91XCA7Civoj5zpo58gPiBzYWlzaG9rdVwgOwor5oKE5oKEID4gc3Vnb3N1Z29cIDsKK+ehrOethiA+IGtvdWhpdHN1XCA7CivnpZ7lt54gPiBzaGluc2h1dVwgOwor5b2p6ImyID4gc2Fpc2hva3VcIDsKK+W/heedgCA+IGhpdGNoYWt1XCA7Civnn6XorZggPiBjaGlzaGlraVwgOwor5oiR44CFID4gd2FyZXdhcmVcIDsKK+mAsumnkCA+IHNoaW5jaHV1XCA7CivmhIHlgrcgPiBzaHV1c2hvdVwgOwor5Y+k5pyNID4gZnVydWZ1a3VcIDsKK+awtOeTtiA+IG1penVnYW1lXCA7Civlv4PnmoQgPiBzaGludGVraVwgOwor6buZ5YqHID4gbW9rdWdla2lcIDsKK+WQvuWtkCA+IHdhZ2ltb2tvXCA7CivmsJfnn60gPiBraW1pamlrYVwgOwor6JWD5q6WID4gaGFuc2hva3VcIDsKK+W+l+etliA+IHRva3VzYWt1XCA7Civli4Xoo4EgPiBjaG9rdXNhaVwgOwor5b6T56+AID4ganV1c2V0c3VcIDsKK+mBqemHjyA+IHRla2lyeW91XCA7Civlv4Pnl5sgPiBzaGludHN1dVwgOwor5YqH6YCaID4gZ2VraXRzdXVcIDsKK+mHkeaYnyA+IGtpbmJvc2hpXCA7CivmsbLmsbIgPiBreXV1a3l1dVwgOwor5by+6JasID4gZGFuJyd5YWt1XCA7CivljZjnmbogPiB0YW5wYXRzdVwgOwor5b+F55SoID4gaGl0c3V5b3VcIDsKK+WNkuebtCA+IHNvdGNob2t1XCA7CivmsLTnjokgPiBtaXp1dGFtYVwgOwor56We5a2mID4gc2hpbmdha3VcIDsKK+emgeWcpyA+IGtpbicnYXRzdVwgOwor56eA5L2cID4gc2h1dXNha3VcIDsKK+W+s+ebriA+IHRva3Vtb2t1XCA7Civph4zmlrkgPiBzYXRva2F0YVwgOwor5rOV5b6LID4gaG91cml0c3VcIDsKK+ekvOW8jyA+IHJlaXNoaWtpXCA7Civlj47mnZ8gPiBzaHV1c29rdVwgOwor6YeI5piOID4gc2hha3VtZWlcIDsKK+a0u+WLlSA+IGthdHN1ZG91XCA7Civpu5LlhoYgPiBrdXJvbWFydVwgOwor5rOV5byPID4gaG91c2hpa2lcIDsKK+awtOeJqSA+IG1penVtb25vXCA7CivlvpfnpaggPiB0b2t1aHlvdVwgOwor6YGl6YGlID4gaGFydWJhcnVcIDsKK+a0vuWHuiA+IGhhc2h1dHN1XCA7Civph4jmlL4gPiBzaGFrdWhvdVwgOwor5rWB5YWlID4gcnl1dW55dXVcIDsKK+aui+iZkCA+IHphbmd5YWt1XCA7CivolqzlsYsgPiBrdXN1cml5YVwgOwor6Jas5bGAID4geWFra3lva3VcIDsKK+ehrOebtCA+IGtvdWNob2t1XCA7CivlkIjlvI8gPiBnb3VzaGlraVwgOwor56We5aaZID4gc2hpbm15b3VcIDsKK+mBoOmBkyA+IHRvb21pY2hpXCA7CivlvZPogbcgPiB0b3VzaG9rdVwgOwor5bqV6Z2pID4gc29rb2dhd2FcIDsKK+mGnOalrSA+IHNodXVneW91XCA7CivolqzlraYgPiB5YWt1Z2FrdVwgOwor56Gd55+zID4gc2hvdXNla2lcIDsKK+mBmemBmSA+IGhhcnViYXJ1XCA7Civnpo/liqkgPiBmdWt1c3VrZVwgOwor5q+b562GID4gbW91aGl0c3VcIDsKK+W/q+a0uyA+IGthaWthdHN1XCA7CivljrvmnIggPiBreW9nZXRzdVwgOwor5q2j6KaaID4gc2hvdWdha3VcIDsKK+edgOmnhSA+IGNoYWt1ZWtpXCA7Civlj43mkqUgPiBoYW5wYXRzdVwgOwor5bu66KitID4ga2Vuc2V0c3VcIDsKK+aBkOaCpiA+IGt5b3VldHN1XCA7CivolK3mp5ggPiBrYWdlc2FtYVwgOwor56We5Z+fID4gc2hpbicnaWtpXCA7CivljYPnlJ8gPiBzZW4nJ25hcmlcIDsKK+iWhOW8sSA+IGhha3VqYWt1XCA7CivmgY3mg5ogPiBrb3Vrb3RzdVwgOwor5b+F54S2ID4gaGl0c3V6ZW5cIDsKK+aBkOaBkCA+IGtvd2Fnb3dhXCA7CivlkIzlsYAgPiBkb3VreW9rdVwgOwor6buS5Li4ID4ga3Vyb21hcnVcIDsKK+iSuOedgCA+IGpvdWNoYWt1XCA7CivljYrnjokgPiBoYW5neW9rdVwgOwor6YCG6aKoID4gZ3lha3VmdXVcIDsKK+WIhumqqCA+IGJ1bmtvdHN1XCA7CivnpZ7lm70gPiBzaGlua29rdVwgOwor5bm86aGUID4gb3NhbmFnYW9cIDsKK+W8t+iGnCA+IGt5b3VtYWt1XCA7CivlkIzlrr8gPiBkb3VzaHVrdVwgOwor5ZCN5a6fID4gbWVpaml0c3VcIDsKK+atouihgCA+IHNoaWtldHN1XCA7CivpgJDpm7sgPiBjaGlrdWRlblwgOwor5Y+O5ou+ID4gc2h1dXNodXVcIDsKK+WLleiEiCA+IGRvdW15YWt1XCA7CivnnYDpoIYgPiBjaGFrdWp1blwgOwor6JK455m6ID4gam91aGF0c3VcIDsKK+mAhumghiA+IGd5YWt1anVuXCA7CivlkIjlrr8gPiBnYXNzaHVrdVwgOwor5YqH6KmVID4gZ2VraWh5b3VcIDsKK+mFuOasoCA+IHNhbmtldHN1XCA7CivpiYTliaQgPiB0ZXRzdXphaVwgOwor56Gs546JID4ga291Z3lva3VcIDsKK+axuuaWrSA+IGtldHN1ZGFuXCA7CivlvoznmbogPiBrb3VoYXRzdVwgOwor5Ymv6LOeID4gZnVrdXNob3VcIDsKK+mJhOWIhiA+IHRldHN1YnVuXCA7CivmsrPlupUgPiBrYXdhem9rb1wgOwor5Y2S54S2ID4gc290c3V6ZW5cIDsKK+edgOmbuyA+IGNoYWt1ZGVuXCA7CivluoPpl4ogPiBrb3VrYXRzdVwgOwor5Y+L5oiQID4gdG9tb25hcmlcIDsKK+awtOa0nyA+IG1penViYW5hXCA7CivljbPmsbogPiBzb2trZXRzdVwgOwor5b6M55WlID4ga291cnlha3VcIDsKK+WJjei/sCA+IHplbmp1dHN1XCA7CivlibLorbIgPiBrYXRzdWpvdVwgOwor5Y6f5puyID4gZ2Vua3lva3VcIDsKK+WIh+mhmCA+IHNldHN1Z2FuXCA7Civlh7rpp5UgPiBzaHV0c3VnYVwgOwor5b6M55SjID4gbm9jaGl6YW5cIDsKK+iQveiOqyA+IHJha3ViYWt1XCA7CivpganoqZUgPiB0ZWtpaHlvdVwgOwor5b+Z5q66ID4gYm91c2F0c3VcIDsKK+iTi+eJqSA+IGZ1dGFtb25vXCA7CivmuKnjgIUgPiBudWt1bnVrdVwgOwor5Ye66aasID4gc2h1dHN1YmFcIDsKK+mBqeiosyA+IHRla2l5YWt1XCA7CivmsLTmsqEgPiBzdWlib3RzdVwgOwor5b6h54mpID4gZ3lvYnV0c3VcIDsKK+W9k+evgCA+IHRvdXNldHN1XCA7CivlkLjlj6MgPiBzdWlrdWNoaVwgOwor5oKL5ZeHID4gcmluc2hva3VcIDsKK+WQuOWPjiA+IGt5dXVzaHV1XCA7Civlj6Tlt50gPiBmdXJ1a2F3YVwgOwor5Ym16KitID4gc291c2V0c3VcIDsKK+mHneWxsSA+IGhhcml5YW1hXCA7CivmronogbcgPiBqdW5zaG9rdVwgOwor5Y+W5byVID4gdG9yaWhpa2lcIDsKK+ayoeW5tCA+IGJvdHN1bmVuXCA7Civlj7Llrp8gPiBzaGlqaXRzdVwgOwor6JGJ6ISIID4geW91bXlha3VcIDsKK+WPsOWvhiA+IHRhaW1pdHN1XCA7CivpgZTorZggPiB0YXNzaGlraVwgOwor5Y+O5b6XID4gc2h1dXRva3VcIDsKK+m6puS9nCA+IG11Z2lzYWt1XCA7CivmgKfmgqogPiBzaG91d2FydVwgOwor5Y2R5rm/ID4gaGlzaGl0c3VcIDsKK+WQneWXhyA+IHJpbnNob2t1XCA7CivlvpPniakgPiBqdXVidXRzdVwgOwor5b2555WcID4gZWtpY2hpa3VcIDsKK+mJhOS6uiA+IHRldHN1amluXCA7CivmrbvohIggPiBzaGlteWFrdVwgOwor5Yeh6aqoID4gYm9ua290c3VcIDsKK+mHkeWxkSA+IGthbmFrdXp1XCA7Civlv4XmrrogPiBoaXNzYXRzdVwgOwor5Y+k5a+6ID4gZnVydWRlcmFcIDsKK+a0m+S4rSA+IHJha3VjaHV1XCA7Civlh7jpnaIgPiB0b3RzdW1lblwgOwor5ZC45YWlID4ga3l1dW55dXVcIDsKK+WIsOmBlCA+IHRvdXRhdHN1XCA7Civlj6Plrp8gPiBrb3VqaXRzdVwgOwor5YqH6JasID4gZ2VraXlha3VcIDsKK+efree4riA+IHRhbnNodWt1XCA7CivlhrfpuqYgPiBoaXlhbXVnaVwgOwor56Wd5YW4ID4gc2h1a3V0ZW5cIDsKK+WHuumZsyA+IHNodXRjaGluXCA7CivmraPoibIgPiBzZWlzaG9rdVwgOwor6JGb57GgID4gdHN1ZHp1cmFcIDsKK+W+s+ayoiA+IHRva3V0YWt1XCA7Civph4jlsIogPiBzaGFrdXNvblwgOwor5bmz6Y2LID4gaGlyYW5hYmVcIDsKK+mFkuaovSA+IHNha2FkYXJ1XCA7CivlvIHoiIwgPiBiZW56ZXRzdVwgOwor6L+96YyyID4gdHN1aXJva3VcIDsKK+aBi+WmuyA+IGtvaWR6dW1hXCA7CivmgJbmgJYgPiBrb3dhZ293YVwgOwor5b6p5rS7ID4gZnVra2F0c3VcIDsKK+awt+afsSA+IGh5b3VjaHV1XCA7Civmgavllp0gPiBkb3VrYXRzdVwgOwor6YGp6JasID4gdGVraXlha3VcIDsKK+WJo+ihkyA+IGtlbmp1dHN1XCA7CivljrPlvosgPiBnZW5yaXRzdVwgOwor5Yqr572wID4gZ291YmF0c3VcIDsKK+W9q+eQoiA+IGNob3V0YWt1XCA7CivljJbniakgPiBiYWtlbW9ub1wgOwor6Jaq5YmyID4gbWFraXdhcmlcIDsKK+W9k+ebtCA+IHRvdWNob2t1XCA7CivliY3oqqwgPiB6ZW5zZXRzdVwgOwor5Ymv6Jm5ID4gZnVrdW5pamlcIDsKK+WMl+eIhiA+IGhva3ViYWt1XCA7Civnn6LntaMgPiB5YWdhc3VyaVwgOwor6I6r6YCGID4gYmFrdWdla2lcIDsKK+W4uOmjnyA+IGpvdXNob2t1XCA7CivpsJDprqsgPiB3YW5pemFtZVwgOwor5rOo5YWlID4gY2h1dW55dXVcIDsKK+aApeWzuyA+IGt5dXVzaHVuXCA7Civps6nog7ggPiBoYXRvbXVuZVwgOwor5YuF562UID4gY2hva3V0b3VcIDsKK+awt+aZtiA+IGh5b3VzaG91XCA7Civlupfos4MgPiB0YW5hY2hpblwgOwor6L6u6auqID4gYmVucGF0c3VcIDsKK+WNl+altSA+IG5hbmt5b2t1XCA7Civlv4PmoLkgPiBrb2tvcm9uZVwgOwor5Yas6bOlID4gZnV5dWRvcmlcIDsKK+egtOeJqSA+IHdhcmVtb25vXCA7CivllK/jgIUgPiB0YWRhdGFkYVwgOwor5Y2U5qWtID4ga3lvdWd5b3VcIDsKK+WHnembhiA+IGd5b3VzaHV1XCA7CivlkITlkIQgPiBzb3Jlem9yZVwgOwor6YCB6YGUID4gc291dGF0c3VcIDsKK+W9q+eJqSA+IGhvcmltb25vXCA7CivlupXosYYgPiBzb2tvbWFtZVwgOwor6bOl6IKMID4gdG9yaWhhZGFcIDsKK+WLvueOiSA+IG1hZ2F0YW1hXCA7Civps6XogokgPiB0b3JpbmlrdVwgOwor5YqH6IetID4gZ2VraXNodXVcIDsKK+avjeeJqSA+IGhhaGFtb25vXCA7CivmgZDlmocgPiBreW91a2FrdVwgOwor5rex44CFID4gZnVrYWJ1a2FcIDsKK+ecn+mNriA+IHNoaW5jaHV1XCA7CivmgKDlsYggPiB0YWlrdXRzdVwgOwor56S+5YWxID4gc2hha3lvdVwgOwor5b+D5p2QID4gc2hpbnphaVwgOwor6L+R6ZaTID4gY2hpa2FtYVwgOwor5Y675bCxID4ga3lvc2h1dVwgOwor5YmN6KGoID4gemVucHlvdVwgOwor5ZCb5YG0ID4ga3Vuc29rdVwgOwor6L+96YCBID4gdHN1aXNvdVwgOwor5Y2g5pyJID4gc2VuJyd5dXVcIDsKK+W/jOaXpSA+IGtpbmljaGlcIDsKK+WNoOabuCA+IHVyYWJ1bWlcIDsKK+W4s+mdoiA+IGNob3VtZW5cIDsKK+ebtOmfsyA+IGNob2t1b25cIDsKK+WKn+e4viA+IGtvdXNla2lcIDsKK+awkealrSA+IG1pbmd5b3VcIDsKK+iWhOWRvSA+IGhha3VtZWlcIDsKK+W4remghiA+IHNla2lqdW5cIDsKK+ebiumzpSA+IGVraWNob3VcIDsKK+ayluWkqSA+IGNodXV0ZW5cIDsKK+W/nOaOpSA+IG91c2V0c3VcIDsKK+eeoOiLpSA+IGRvdWpha3VcIDsKK+W+jOa1gSA+IGtvdXJ5dXVcIDsKK+WPrOWWmiA+IHNob3VrYW5cIDsKK+W8leeulyA+IGhpa2l6YW5cIDsKK+WNnOabuCA+IHVyYWJ1bWlcIDsKK+W4r+mdqSA+IG9iaWthd2FcIDsKK+WHuumHkSA+IHNodWtraW5cIDsKK+WPq+WWmiA+IGt5b3VrYW5cIDsKK+WQieWHtiA+IGtpa2t5b3VcIDsKK+mHjeWcpyA+IGp1dWF0c3VcIDsKK+i/sOmDqCA+IGp1dHN1YnVcIDsKK+m3suW6pyA+IHdhc2hpemFcIDsKK+W8k+eurSA+IGt5dXVzZW5cIDsKK+WIhumAsiA+IGJ1bnNoaW5cIDsKK+iPqeiWqSA+IGJvc2F0c3VcIDsKK+WIhumAnyA+IGZ1bnNva3VcIDsKK+awtOaSgyA+IHN1aWdla2lcIDsKK+ayouWcsCA+IHNhd2FjaGlcIDsKK+WIh+i/qyA+IHNlcHBha3VcIDsKK+WNl+acnSA+IG5hbmNob3VcIDsKK+W/teW/tSA+IG5lbicnbmVuXCA7CivvvK7pn78gPiBlbnVreW91XCA7CivmraPntpogPiBzZWl6b2t1XCA7CivokL3nrKwgPiByYWt1ZGFpXCA7Civph6PlkIggPiB0c3VyaWFpXCA7CivmraPntbkgPiBzaG91a2VuXCA7CivljrPlrrkgPiBnZW4nJ3lvdVwgOwor6YCy6KGMID4gc2hpbmtvdVwgOwor5ZCJ5YWGID4ga2l0Y2hvdVwgOwor5YuV55qEID4gZG91dGVraVwgOwor5ZCM5YOaID4gZG91cnlvdVwgOwor5q2j57WMID4gc2Vpa3lvdVwgOwor5YyX5rqAID4gaG9rdW1hblwgOwor5Y2K5qC8ID4gaGFua2FrdVwgOwor6YCa6KyAID4gdHN1dWJvdVwgOwor5Y+s5ZG9ID4gc2hvdW1laVwgOwor6YCa6KuWID4gdHN1dXJvblwgOwor5bqP6KqsID4gam9zZXRzdVwgOwor5rOl5LitID4gZGVpY2h1dVwgOwor5bqV6KeSID4gdGVpa2FrdVwgOwor5Ymy6IiIID4gd2FyaWtvdVwgOwor5b6z5pybID4gdG9rdWJvdVwgOwor5oCl5aSJID4ga3l1dWhlblwgOwor5Y+j5ZSHID4ga291c2hpblwgOwor6bOl57ayID4gdG9yaWFtaVwgOwor5oGt5YC5ID4ga3lvdWtlblwgOwor5Y+r5Y+3ID4ga3lvdWdvdVwgOwor5YiG6LqrID4gYnVuc2hpblwgOwor5Yi66KGdID4gc2hpc2hvdVwgOwor5bm96LC3ID4geXV1a29rdVwgOwor6YSZ5q2MID4gaGluYXV0YVwgOwor5q6154mpID4gZGFubW9ub1wgOwor5ZCM5L+hID4gZG91c2hpblwgOwor55+z55ukID4gc2VraWJhblwgOwor5q2756WoID4gc2hpaHlvdVwgOwor5Ymy6IW5ID4ga2FwcHVrdVwgOwor5buQ6IiOID4ga3l1dXNoYVwgOwor6YCa6KiIID4gdHN1dWtlaVwgOwor5ZCM5L62ID4gZG91cnlvdVwgOwor5Y+w5YyXID4gdGFpaG9rdVwgOwor5Yuk546LID4ga2luJydub3VcIDsKK+W7j+iIjiA+IGt5dXVzaGFcIDsKK+W/q+W+qSA+IGthaWZ1a3VcIDsKK+awkeaciSA+IG1pbicneXV1XCA7CivmrbTnqIsgPiByZWtpdGVpXCA7CivnoLTmu4UgPiBoYW1ldHN1XCA7CivmgKXlopcgPiBreXV1em91XCA7CivpgJrop6MgPiB0c3V1a2FpXCA7CivliKToqq0gPiBoYW5kb2t1XCA7Civph43llLEgPiBqdXVzaG91XCA7CivlkI3kvZwgPiBtZWlzYWt1XCA7CivpgJroprMgPiB0c3V1a2FuXCA7CivlvJTnpa0gPiBjaG91c2FpXCA7CivlkITlgZwgPiBrYWt1dGVpXCA7CivmganlgJ8gPiBvbnNoYWt1XCA7Civlj7LliocgPiBzaGlnZWtpXCA7CivljJfmtIsgPiBob2t1eW91XCA7CivpgJropqcgPiB0c3V1cmFuXCA7CivpganogIUgPiB0ZWtpc2hhXCA7Civlia/ohY4gPiBmdWt1amluXCA7CivnpL7kuK0gPiBzaGFjaHV1XCA7Civov73otIggPiB0c3Vpem91XCA7CivmgKXloLEgPiBreXV1aG91XCA7CivluKvplbcgPiBzaGljaG91XCA7CivliIDouqsgPiB0b3VzaGluXCA7CivliqDnrYYgPiBrYWhpdHN1XCA7Civljrvlo7AgPiBreW9zaG91XCA7CivlkI3ku6MgPiBteW91ZGFpXCA7CivljKHmraMgPiBreW91c2VpXCA7CivlkIjkvZwgPiBnYXNzYWt1XCA7CivlvpPmpa0gPiBqdXVneW91XCA7CivljYrmmYIgPiBoYW50b2tpXCA7CivokL3no5AgPiByYWt1YmFuXCA7Civljp/lr6kgPiBnZW5zaGluXCA7Civmr5LmtrIgPiBkb2t1ZWtpXCA7CivlvbzmsI8gPiBrYXJlc2hpXCA7CivluJ3pmbUgPiB0ZWlyeW91XCA7CivlvrPmlL8gPiB0b2t1c2VpXCA7CivmsJHml48gPiBtaW56b2t1XCA7CivpgaDogLMgPiB0b29taW1pXCA7CivlkI3kuLsgPiBuYW51c2hpXCA7CivmgKXlnYIgPiBreXV1aGFuXCA7CivliJ3oqLogPiBzaG9zaGluXCA7CivluoPop5IgPiBrb3VrYWt1XCA7CivlkInkuosgPiBraXRzdWppXCA7CivmsI/ml48gPiBzaGl6b2t1XCA7CivlvJTnoLIgPiBjaG91aG91XCA7Civlu7rnrZYgPiBrZW5zYWt1XCA7CivliY3okYkgPiB6ZW4nJ3lvdVwgOwor6YCa6KGMID4gdHN1dWtvdVwgOwor5ZCM5LiAID4gZG91aXRzdVwgOwor5bm+6KixID4gaWt1YmFrdVwgOwor6YeN5Y6aID4gY2hvdWtvdVwgOwor6I236YCBID4gbmlva3VyaVwgOwor5b6p5penID4gZnVra3l1dVwgOwor5rKh5Y+OID4gYm9zc2h1dVwgOwor5bu756ugID4ga2Fpc2hvdVwgOwor5Y2a5o2cID4gaGFrdXNvdVwgOwor55+l55qEID4gY2hpdGVraVwgOwor5ZCE5Lq6ID4ga2FrdWppblwgOwor5q6L55WZID4gemFucnl1dVwgOwor5bmV6LuNID4gYmFrdWd1blwgOwor5bu656uLID4ga29ucnl1dVwgOwor5rKD5ZywID4geW9rdWNoaVwgOwor6YGK6IiIID4geXV1a3lvdVwgOwor5b6p5paHID4gZnVrdWJ1blwgOwor5ZCI5LiAID4gZ291aXRzdVwgOwor5Yil6KGoID4gYmVwcHlvdVwgOwor5Ymv572yID4gZnVrdXNob1wgOwor5Y+X5Y+WID4gdWtldG9yaVwgOwor5b+D5oi/ID4gc2hpbmJvdVwgOwor5Y+k5Yi5ID4ga29zYXRzdVwgOwor5Yq055u4ID4gcm91c2hvdVwgOwor6YOt5riFID4ga2FrdXNlaVwgOwor5Ye66LWwID4gc2h1c3NvdVwgOwor5bm76KaaID4gZ2Vua2FrdVwgOwor5Ymb6IW5ID4gZ291ZnVrdVwgOwor5q2v55+zID4gc2hpc2VraVwgOwor5oGl5LiYID4gY2hpa3l1dVwgOwor6JC955ukID4gcmFrdWJhblwgOwor5YWo6bqmID4gemVuYmFrdVwgOwor5Y2a5omTID4gYmFrdWNoaVwgOwor6L+96KqNID4gdHN1aW5pblwgOwor6YeP5YiRID4gcnlvdWtlaVwgOwor56K65a6aID4ga2FrdXRlaVwgOwor6YeN5Yi7ID4ganV1a29rdVwgOwor56K65a6IID4ga2FrdXNodVwgOwor6L+96KmmID4gdHN1aXNoaVwgOwor5Ye66LOHID4gc2h1c3NoaVwgOwor55yf6LSLID4gc2hpbmdhblwgOwor5rCX5oyBID4ga2ltb2NoaVwgOwor5bmz6KeSID4gaGVpa2FrdVwgOwor5q2j56K6ID4gc2Vpa2FrdVwgOwor6L+96KiOID4gdHN1aXRvdVwgOwor5q+s5qCXID4gaWdhZ3VyaVwgOwor5q2755eFID4gc2hpYnlvdVwgOwor5YWx6bO0ID4ga3lvdW1laVwgOwor5Y+N5Y+OID4gdGFuc2h1dVwgOwor5b+W5bqmID4gc29udGFrdVwgOwor5biv6YeRID4gb2JpZ2FuZVwgOwor6I2Y6YeNID4gc291Y2hvdVwgOwor5b+D5oOFID4gc2hpbmpvdVwgOwor5Yy55pW1ID4gaGl0dGVraVwgOwor6YOo5rS7ID4gYnVrYXRzdVwgOwor6YeO5YWOID4gbm91c2FnaVwgOwor5rC45bm0ID4gbmFnYW5lblwgOwor6YCG6KGMID4gZ3lha2tvdVwgOwor6L+F6YCfID4gamluc29rdVwgOwor5b6M5pu4ID4gYXRvZ2FraVwgOwor5YmN6IaKID4gemVucGFrdVwgOwor6YeR5YG0ID4ga2luZ2F3YVwgOwor5b+D5oCnID4gc2hpbnNlaVwgOwor55+z54mIID4gc2VraWJhblwgOwor6L+w6KqeID4ganV0c3Vnb1wgOwor56Kn5bGxID4gaGVraXphblwgOwor5rKI5ZCfID4gY2hpbmdpblwgOwor6YeN5YK3ID4ganV1c2hvdVwgOwor5YmN6ISzID4gemVuJydub3VcIDsKK+W5tOihqCA+IG5lbnB5b3VcIDsKK+WJjeiEmiA+IG1hZWFzaGlcIDsKK+atjuensCA+IHRhbnNob3VcIDsKK+WHuuismyA+IHNodWtrb3VcIDsKK+WIuuiNiSA+IGlyYWt1c2FcIDsKK+WNg+aMryA+IHNlbmJ1cmlcIDsKK+mAsuiIqiA+IHNoaW5rb3VcIDsKK+W/g+W+lyA+IGtva29yb2VcIDsKK+aBkuS5hSA+IGtvdWt5dXVcIDsKK+WPquS7iiA+IHRhZGFpbWFcIDsKK+WPjeWJhyA+IGhhbnNva3VcIDsKK+WPo+S+myA+IGtvdWt5b3VcIDsKK+W8t+eBqyA+IHRzdXlvYmlcIDsKK+aBi+S7siA+IGtvaW5ha2FcIDsKK+WJjeiCoiA+IG1hZWFzaGlcIDsKK+atu+eQgyA+IHNoaWt5dXVcIDsKK+WKqeeVqiA+IHN1a2ViYW5cIDsKK+W+jOaXpSA+IGdvbmljaGlcIDsKK+mFjeW9uSA+IGhhaXlha3VcIDsKK+aBi+S6uiA+IGtvaWJpdG9cIDsKK+W4gumVtyA+IHNoaWNob3VcIDsKK+aAquWKmyA+IGthaXJpa2lcIDsKK+W+geacjSA+IHNlaWZ1a3VcIDsKK+avjeanmCA+IGthYXNhbWFcIDsKK+ecn+irpiA+IHNoaW50ZWlcIDsKK+W8seeCuSA+IGpha3V0ZW5cIDsKK+mAo+iNmCA+IHJlbmNoYW5cIDsKK+WGhumhlCA+IG1hcnVnYW9cIDsKK+ebsumAsiA+IG1vdXNoaW5cIDsKK+W/oOWtnSA+IGNodXVrb3VcIDsKK+mzpeeesCA+IGNob3VrYW5cIDsKK+W5vOiZqyA+IHlvdWNodXVcIDsKK+iQveeQgyA+IHJha2t5dXVcIDsKK+W3qOmhjSA+IGt5b2dha3VcIDsKK+WJsueulyA+IHdhcml6YW5cIDsKK+WPjeWFsSA+IGhhbmt5b3VcIDsKK+aui+eFpyA+IHphbnNob3VcIDsKK+WMl+adsSA+IGhva3V0b3VcIDsKK+W/g+W6lSA+IHNoaW50ZWlcIDsKK+mAuOiBniA+IGl0c3VidW5cIDsKK+mFkuW4rSA+IHNodXNla2lcIDsKK+efs+eCrSA+IHNla2l0YW5cIDsKK+awt+WxsSA+IGh5b3V6YW5cIDsKK+W8leeOhyA+IGluc290c3VcIDsKK+W7tuedgCA+IGVuY2hha3VcIDsKK+awt+WxiyA+IGtvb3JpeWFcIDsKK+WNseWxgCA+IGtpa3lva3VcIDsKK+WHuOinkiA+IHRva2tha3VcIDsKK+ebrumAgSA+IG1va3Vzb3VcIDsKK+W+s+aApyA+IHRva3VzZWlcIDsKK+ebtOi8uCA+IGNob2t1eXVcIDsKK+egleawtyA+IHNhaWh5b3VcIDsKK+ecn+iogCA+IHNoaW5nb25cIDsKK+W7uueZvSA+IGtlbnBha3VcIDsKK+atpueVpSA+IGJ1cnlha3VcIDsKK+aAp+WIhiA+IHNob3VidW5cIDsKK+WGl+mVtyA+IGpvdWNob3VcIDsKK+eiuuWgsSA+IGtha3Vob3VcIDsKK+W6p+iBtyA+IHphc2hva3VcIDsKK+WPo+S4rSA+IGtvdWNodXVcIDsKK+ecnuiogCA+IHNoaW5nb25cIDsKK+WGt+mFtyA+IHJlaWtva3VcIDsKK+autOauuiA+IG91c2F0c3VcIDsKK+WFpemtgiA+IG55dXVrb25cIDsKK+W/l+WtpiA+IHNoaWdha3VcIDsKK+W+gOaXpSA+IG91aml0c3VcIDsKK+axguWpmiA+IGt5dXVrb25cIDsKK+WPjeWBtCA+IGhhbnNva3VcIDsKK+W7tueZuiA+IGVucGF0c3VcIDsKK+ecn+ilvyA+IG1hbmlzaGlcIDsKK+W8k+eKtiA+IGt5dXVqb3VcIDsKK+mGnOWQjSA+IHNodXVtZWlcIDsKK+awkeW/gyA+IG1pbnNoaW5cIDsKK+aoqemrmCA+IGtlbmRha2FcIDsKK+awkeW+syA+IG1pbnRva3VcIDsKK+WPjeS/lyA+IGhhbnpva3VcIDsKK+axuuWLnSA+IGtlc3Nob3VcIDsKK+WGhemZuCA+IG5haXJpa3VcIDsKK+ebtOi3ryA+IGNob2t1cm9cIDsKK+mBqeeiuiA+IHRla2tha3VcIDsKK+iMtumHnCA+IGNoYWdhbWFcIDsKK+mAmuiIqiA+IHRzdXVrb3VcIDsKK+i+m+mFuCA+IHNoaW5zYW5cIDsKK+W4jOmHiCA+IGtpc2hha3VcIDsKK+WHtuihjCA+IGt5b3Vrb3VcIDsKK+avjuacnSA+IG1haWNob3VcIDsKK+eZvemvqCA+IGhha3VnZWlcIDsKK+WNiuW8kyA+IGhhbmt5dXVcIDsKK+WIneiNtyA+IGhhdHN1bmlcIDsKK+WMl+aUryA+IGhva3VzaGlcIDsKK+WGhemWsiA+IG5haWV0c3VcIDsKK+WGhemWoyA+IG5haWtha3VcIDsKK+mFjeWxniA+IGhhaXpva3VcIDsKK+iUteWMvyA+IHpvdXRva3VcIDsKK+W4q+i1sCA+IHNoaXdhc3VcIDsKK+ayiOWAqyA+IGNoaW5yaW5cIDsKK+W9sOaYjiA+IHNob3VtZWlcIDsKK+mFkuWuoiA+IHNodWtha3VcIDsKK+avlOaXpSA+IGhpbmljaGlcIDsKK+WOn+WRiiA+IGdlbmtva3VcIDsKK+eZvemtmiA+IHNoaXJhdW9cIDsKK+WNiuW5tCA+IGhhbicnbmVuXCA7CivliY3ntI0gPiB6ZW4nJ25vdVwgOwor6YGL562GID4gdW5waXRzdVwgOwor6be55YygID4gdGFrYWpvdVwgOwor5q2054S2ID4gcmVraXplblwgOwor5YWs6aCYID4ga291cnlvdVwgOwor6L+R6KaqID4ga2luc2hpblwgOwor5oCl5L2/ID4ga3l1dXNoaVwgOwor5Ym955uXID4gaHlvdXRvdVwgOwor5bm86IulID4geW91amFrdVwgOwor5YWo6aGNID4gemVuZ2FrdVwgOwor5qiZ6auYID4gaHlvdWtvdVwgOwor5Y2z5aOyID4gc29rdWJhaVwgOwor5Y2D5bqmID4gY2hpdGFiaVwgOwor5by35rCXID4gdHN1eW9raVwgOwor5bqB6IiOID4gY2hvdXNoYVwgOwor5YqH55WMID4gZ2VraWthaVwgOwor5Y2D5bm0ID4gY2hpdG9zZVwgOwor5YqH55SaID4gZ2VraWppblwgOwor5qiq6aGUID4geW9rb2dhb1wgOwor5Yun5qWtID4ga2FuZ3lvdVwgOwor5Yed6KaWID4gZ3lvdXNoaVwgOwor5Yi657mNID4gc2hpc2h1dVwgOwor556g55uuID4gZG91bW9rdVwgOwor5YaN6YyyID4gc2Fpcm9rdVwgOwor55yf6JmrID4gbWFtdXNoaVwgOwor6bOl542jID4gY2hvdWp1dVwgOwor5b655a61ID4gdGVzc2hvdVwgOwor5Y2R5bGIID4gaGlrdXRzdVwgOwor5Yqg54axID4ga2FuZXRzdVwgOwor5YaN6YuzID4gc2FpY2h1dVwgOwor5rC35aGKID4gaHlvdWthaVwgOwor5Y2S5a+/ID4gc290c3VqdVwgOwor5by35qyyID4gZ291eW9rdVwgOwor5Y2U5a6aID4ga3lvdXRlaVwgOwor5YW16ZW3ID4gaGVpY2hvdVwgOwor6YWM5ammID4gc2hha3VmdVwgOwor56Cy5pKDID4gaG91Z2VraVwgOwor5rCX5a+GID4ga2ltaXRzdVwgOwor6YG455CDID4gc2Vua3l1dVwgOwor5Y6f5YmHID4gZ2Vuc29rdVwgOwor5YWx6ZeYID4ga3lvdXRvdVwgOwor55u06KurID4gY2hva2thblwgOwor55m66aasID4gaGF0c3ViYVwgOwor5Yi657WhID4gc2hpcmFrdVwgOwor5YWo6ZuGID4gemVuc2h1dVwgOwor5Y2T5a2QID4gdGVpYnVydVwgOwor55u06KuMID4gY2hva2thblwgOwor55u06KuHID4gamlraWRhblwgOwor5YWl6Zu7ID4gbnl1dWRlblwgOwor5YmN56ugID4gemVuc2hvdVwgOwor55+z5q61ID4gaXNoaWRhblwgOwor5q2m54OIID4gYnVyZXRzdVwgOwor55u06KmxID4gY2hva3V3YVwgOwor56OB5YqbID4gamlyeW9rdVwgOwor5rC05Z6iID4gbWl6dWFrYVwgOwor5bmz6Ie8ID4gaGlyYXVzdVwgOwor5b255omAID4geWFrdXNob1wgOwor6YGp55SoID4gdGVraXlvdVwgOwor6YCj57aaID4gcmVuem9rdVwgOwor5by35qipID4ga3lvdWtlblwgOwor5Y215ZqiID4gcmFuJydub3VcIDsKK+awj+WvuiA+IHVqaWRlcmFcIDsKK+WFpemaiiA+IG55dXV0YWlcIDsKK+W/g+WkliA+IHNoaW5nYWlcIDsKK+WNiuWutSA+IGhhbnNob3VcIDsKK+mAo+e1oSA+IHJlbnJha3VcIDsKK+WItue0hCA+IHNlaXlha3VcIDsKK+eekeebriA+IG1laW1va3VcIDsKK+WKm+eCuSA+IHJpa2l0ZW5cIDsKK+awtOWcpyA+IHN1aWF0c3VcIDsKK+W5u+iBtCA+IGdlbmNob3VcIDsKK+efr+atoyA+IGt5b3VzZWlcIDsKK+aomemhjCA+IGh5b3VkYWlcIDsKK+awt+WaoiA+IGh5b3Vub3VcIDsKK+W/teWKmyA+IG5lbnJpa2lcIDsKK+ebtOimsyA+IGNob2trYW5cIDsKK+WNmuWllSA+IGJha3VjaGlcIDsKK+ebtOimpyA+IGppa2lyYW5cIDsKK+WNg+WwiyA+IGNoaWhpcm9cIDsKK+WFqOmVtyA+IHplbmNob3VcIDsKK+WNmuWkpyA+IGhha3VkYWlcIDsKK+iQvea2mSA+IHJha3VydWlcIDsKK+WGhemHkSA+IHVjaGlraW5cIDsKK+eZu+mggiA+IHRvdWNob3VcIDsKK+ebl+iziiA+IHRvdXpva3VcIDsKK+WNmuWjqyA+IGhha3VzaGlcIDsKK+eah+mZtSA+IGtvdXJ5b3VcIDsKK+eZuumfsyA+IGhhdHN1b25cIDsKK+WFpemWgCA+IG55dXVtb25cIDsKK+avkuaJiyA+IGRva3VzaHVcIDsKK+efs+apiyA+IHNla2t5b3VcIDsKK+ecn+iPjCA+IHNoaW5raW5cIDsKK+eZvemdoiA+IGhha3VtZW5cIDsKK+W+ueWknCA+IHRldHN1eWFcIDsKK+efs+anqCA+IHNla2tha3VcIDsKK+W/q+WLnSA+IGthaXNob3VcIDsKK+WIh+iFuSA+IHNlcHB1a3VcIDsKK+W/oOWQmyA+IGNodXVrdW5cIDsKK+iUteS6uiA+IGt1cm91ZG9cIDsKK+WHtuiNkiA+IGt5b3Vrb3VcIDsKK+W5tOiAgSA+IHRvc2hpb2lcIDsKK+iLlOmhniA+IGtva2VydWlcIDsKK+eZuumcsiA+IGhhdHN1cm9cIDsKK+WFh+mhniA+IGt5b3VydWlcIDsKK+mAlOe1tiA+IHRvemV0c3VcIDsKK+ebtOihjCA+IGNob2trb3VcIDsKK+WKm+a8lSA+IHJpa2lzb3VcIDsKK+WNoOWcsCA+IHNoaW1lamlcIDsKK+W/g+WcsCA+IGtva29jaGlcIDsKK+WFiOmggyA+IHNlbmtvcm9cIDsKK+atu+avkiA+IHNoaWRva3VcIDsKK+W6nOeriyA+IGZ1cml0c3VcIDsKK+W4q+ihqCA+IHNoaWh5b3VcIDsKK+WOn+S9nCA+IGdlbnNha3VcIDsKK+WNsOWTsiA+IGludGV0c3VcIDsKK+WGt+iplSA+IHJlaWh5b3VcIDsKK+W/g+WboCA+IHNoaW4nJ2luXCA7Civlh7roiKogPiBzaHVra291XCA7CivpgJ/nrpcgPiBzb2t1c2FuXCA7CivljoTliY0gPiB5YWt1bWFlXCA7Civmrovmpa0gPiB6YW5neW91XCA7CivojZLooYwgPiBhcmFneW91XCA7CivlhoXpgJogPiBuYWl0c3V1XCA7Civli53mma8gPiBzaG91a2VpXCA7Civnnq3nhLYgPiByeW91emVuXCA7CivlvpPlsZ4gPiBqdXV6b2t1XCA7CivlvKbmpb0gPiBnZW5nYWt1XCA7CivlioPnhLYgPiBrYWt1emVuXCA7CivljbPlkJ8gPiBzb2t1Z2luXCA7CivljYPlp6sgPiBzZW5oaW1lXCA7Civlv6Dli6QgPiBjaHV1a2luXCA7Civlv6Dli4cgPiBjaHV1eXV1XCA7CivlhrfoppogPiByZWlrYWt1XCA7CivpgJrnrpcgPiB0c3V1c2FuXCA7CivpgIbnuIEgPiBneWFrdWVuXCA7CivliJ3ntJogPiBzaG9reXV1XCA7Civmr5LmgKcgPiBkb2t1c2VpXCA7Civlt6HpgYogPiBqdW4nJ3l1dVwgOwor5b6T5a65ID4gc2hvdXlvdVwgOwor5Y2X5Zu9ID4gbmFuZ29rdVwgOwor5by35pq0ID4ga3lvdWJvdVwgOwor5bmV6IiOID4gYmFrdXNoYVwgOwor5rC35Y6fID4gaHlvdWdlblwgOwor5bmz57mUID4gaGlyYW9yaVwgOwor5b+c5YqbID4gb3VyeW9rdVwgOwor5Yud5pWXID4gc2hvdWhhaVwgOwor5rGC5YiRID4ga3l1dWtlaVwgOwor5be76LKdID4gbWFraWdhaVwgOwor5byP5qyhID4gc2hpa2lqaVwgOwor55+z5p2/ID4gc2VraWJhblwgOwor5YaZ6LGhID4gc2hhc2hvdVwgOwor5q6L5p+xID4gemFuY2h1dVwgOwor55+z5p2QID4gc2VraXphaVwgOwor5b6M5a6uID4ga291a3l1dVwgOwor6YKm5qW9ID4gaG91Z2FrdVwgOwor5Ymj546JID4ga2VuZGFtYVwgOwor5YyX5ba6ID4gaG9rdXJlaVwgOwor5bm057WmID4gbmVua3l1dVwgOwor5YWo6YePID4gemVucnlvdVwgOwor5b6M5a2mID4ga291Z2FrdVwgOwor6YKE5rWBID4ga2Fucnl1dVwgOwor5Y2z5Yi7ID4gc29ra29rdVwgOwor5Ye26IGeID4ga3lvdWJ1blwgOwor5rCR5Zu9ID4gbWlua29rdVwgOwor5YWl6YeRID4gbnl1dWtpblwgOwor5Ymb55CDID4gZ291a3l1dVwgOwor5Y2K5Zu9ID4gaGFuZ29rdVwgOwor5rC45YilID4gZWliZXRzdVwgOwor6YW35L2/ID4ga29rdXNoaVwgOwor5b+r5L2cID4ga2Fpc2FrdVwgOwor5Y2w5Yi3ID4gaW5zYXRzdVwgOwor6L+957SNID4gdHN1aW5vdVwgOwor5rC35YiDID4gaHlvdWppblwgOwor5YWt6YGTID4gcm9rdWRvdVwgOwor5YyX5bK4ID4gaG9rdWdhblwgOwor5YmN55SfID4gemVuc2hvdVwgOwor6YCB57GNID4gc291c2VraVwgOwor5Yil56ewID4gYmVzc2hvdVwgOwor5bqt55WqID4gbml3YWJhblwgOwor6L6y6JasID4gbm91eWFrdVwgOwor6L+R6IejID4ga2luc2hpblwgOwor6YGK54yfID4geXV1cnlvdVwgOwor55m76YyyID4gdG91cm9rdVwgOwor5Y2g5Y2cID4gc2VuYm9rdVwgOwor6JGJ5pyIID4gaGFkenVraVwgOwor5beo6LOKID4ga3lvem9rdVwgOwor6I+v54etID4ga2FzaG9rdVwgOwor5b2T5oORID4gdG91d2FrdVwgOwor5b2r5belID4gY2hvdWtvdVwgOwor5YiG57SNID4gYnVuJydub3VcIDsKK+WIneepgiA+IGhhdHN1aG9cIDsKK+W/heWLnSA+IGhpc3Nob3VcIDsKK+eZvemKkSA+IGhha3VzZW5cIDsKK+WFqOmAnyA+IHplbnNva3VcIDsKK+WFpemBuCA+IG55dXVzZW5cIDsKK+WFqOmAmiA+IHplbnRzdXVcIDsKK+eZvemKhSA+IGhha3Vkb3VcIDsKK+eZvemKgCA+IGhha3VnaW5cIDsKK+WFpemBkyA+IG55dXVkb3VcIDsKK+mCquabsiA+IGpha3lva3VcIDsKK+WNnOWNoCA+IGJva3VzZW5cIDsKK+W3peizgyA+IGtvdWNoaW5cIDsKK+awt+WDjyA+IGh5b3V6b3VcIDsKK+mBiueJpyA+IHl1dWJva3VcIDsKK+mAseeVqiA+IHNodXViYW5cIDsKK+W/g+WKtCA+IHNoaW5yb3VcIDsKK+WIneeniyA+IHNob3NodXVcIDsKK+W5vueoiyA+IGlrdWhvZG9cIDsKK+aui+aVtSA+IHphbnRla2lcIDsKK+mAmueglCA+IHRzdXVrZW5cIDsKK+WNlOWQjCA+IGt5b3Vkb3VcIDsKK+W5s+etiSA+IGJ5b3Vkb3VcIDsKK+mBjueGsSA+IGthbmV0c3VcIDsKK+WNs+WApCA+IHNva3VjaGlcIDsKK+mAmuefpSA+IHRzdXVjaGlcIDsKK+eZgumkiiA+IHJ5b3V5b3VcIDsKK+W5tOerryA+IHRvc2hpaGFcIDsKK+W6reeQgyA+IHRlaWt5dXVcIDsKK+auieaVmSA+IGp1bmt5b3VcIDsKK+atjOayoiA+IHV0YXphd2FcIDsKK+WLgeaVtSA+IGtlaXRla2lcIDsKK+WGjeiqvyA+IHNhaWNob3VcIDsKK+WHneiEgiA+IGd5b3VzaGlcIDsKK+WGjeiqrSA+IHNhaWRva3VcIDsKK+axguS6uiA+IGt5dXVqaW5cIDsKK+WKn+alrSA+IGtvdWd5b3VcIDsKK+iJsum7kiA+IGlyb2d1cm9cIDsKK+WNl+WMlyA+IG5hbmJva3VcIDsKK+WNmuWKtCA+IGJha3Vyb3VcIDsKK+egtOWxgCA+IGhha3lva3VcIDsKK+WNmOWLnSA+IHRhbnNob3VcIDsKK+ato+alrSA+IHNlaWd5b3VcIDsKK+W4r+iKryA+IG9iaXNoaW5cIDsKK+WNiuWRqCA+IGhhbnNodXVcIDsKK+mBoea6kCA+IHNha3VnZW5cIDsKK+WFqOi6qyA+IHplbnNoaW5cIDsKK+avkuWusyA+IGRva3VnYWlcIDsKK+WGheisgSA+IG5haWV0c3VcIDsKK+WGheirviA+IG5haWRha3VcIDsKK+W5uOemjyA+IGtvdWZ1a3VcIDsKK+WLpOaBqiA+IGtpbmtha3VcIDsKK+WHuueyviA+IHNodXNzZWlcIDsKK+W+qeWRvSA+IGZ1a3VtZWlcIDsKK+iLpemAoCA+IHdha2F6b3VcIDsKK+W6mueUsyA+IGtvdXNoaW5cIDsKK+ebtOiIqiA+IGNob2trb3VcIDsKK+W6l+eVqiA+IG1pc2ViYW5cIDsKK+mtjemtjiA+IG1vdXJ5b3VcIDsKK+WFiemHjyA+IGtvdXJ5b3VcIDsKK+W7k+a4hSA+IGtha3VzZWlcIDsKK+mBqeazlSA+IHRla2lob3VcIDsKK+WEqumVtyA+IHl1dWNob3VcIDsKK+W/meS4rSA+IGJvdWNodXVcIDsKK+WNkeWKoyA+IGhpcmV0c3VcIDsKK+WIqeeZuiA+IHJpaGF0c3VcIDsKK+W+qeWPtyA+IGZ1a3Vnb3VcIDsKK+W/g+WDjyA+IHNoaW56b3VcIDsKK+mAo+eUqCA+IHJlbicneW91XCA7CivmsJflipsgPiBraXJ5b2t1XCA7CivmsLfkurogPiBoeW91amluXCA7CivmrrXlubMgPiBkYW5iaXJhXCA7CivlhbHosqkgPiBreW91aGFuXCA7CivlhoXoqLwgPiBuYWlzaG91XCA7CivlhoXoqLogPiBuYWlzaGluXCA7CivliYrniYcgPiBzYWt1aGVuXCA7CivmraPmoLwgPiBzZWlrYWt1XCA7CivlvLfmhb4gPiBnb3V5b2t1XCA7Civlvqnljp8gPiBmdWt1Z2VuXCA7CivnmbrpgLIgPiBoYXNzaGluXCA7CivlvJTmlocgPiBjaG91YnVuXCA7CivljJflpKkgPiBob2t1dGVuXCA7CivljJflpKcgPiBob2t1ZGFpXCA7CivlhYPph5EgPiBtb3Rva2luXCA7CivlhoXop5IgPiBuYWlrYWt1XCA7Civoi6XovKkgPiBqYWt1aGFpXCA7Civnm4romasgPiBla2ljaHV1XCA7CivlvrPliKkgPiB0b2trdXJpXCA7Civli4HmjbcgPiBrZWlzaG91XCA7Civlv4Xkv64gPiBoaXNzaHV1XCA7Civnm7LohbggPiBtb3VjaG91XCA7CivlvrPliIYgPiB0b2t1YnVuXCA7CivokrjlmaggPiBtdXNoaWtpXCA7Civlvq7lipsgPiBiaXJ5b2t1XCA7CivljL/lkI0gPiB0b2t1bWVpXCA7CivlurXngrkgPiBpb3JpdGVuXCA7Civlu7bmo5IgPiBub2JlYm91XCA7CivluLjnv5IgPiBqb3VzaHV1XCA7CivliLbnkIMgPiBzZWlreXV1XCA7CivliIbnp5IgPiBmdW5ieW91XCA7CivmrZPmpb0gPiBrYW5yYWt1XCA7CivmsLTkuK0gPiBzdWljaHV1XCA7Civpg6jlsYAgPiBidWt5b2t1XCA7Civlh43ogokgPiB0b3VuaWt1XCA7CivpgJrnlKggPiB0c3V1eW91XCA7CivojYnoibIgPiBrdXNhaXJvXCA7CivljJflooMgPiBob2treW91XCA7CivprYLprYQgPiBrb25wYWt1XCA7CivlvrTlhbUgPiBjaG91aGVpXCA7CivphY3kv6EgPiBoYWlzaGluXCA7CivpgJfnlZkgPiB0b3VyeXV1XCA7CivpganmraMgPiB0ZWtpc2VpXCA7CivmraPmnJ0gPiBzZWljaG91XCA7CivmraPmnJQgPiBzZWlzYWt1XCA7CivlhajosbkgPiB6ZW5weW91XCA7Civlh4TohZUgPiBzdWdvdWRlXCA7CivmraPmnI0gPiBzZWlmdWt1XCA7CivljZTlg40gPiBreW91ZG91XCA7CivlhYnpgJ8gPiBrb3Vzb2t1XCA7Civli5jlv40gPiBrYW4nJ25pblwgOwor5YWI6YCyID4gc2Vuc2hpblwgOwor5YWI6YCxID4gc2Vuc2h1dVwgOwor5YWl6LKiID4gbnl1dWtvdVwgOwor6YWS5LujID4gc2FrYWRhaVwgOwor55m96LqrID4gc2hpcm9taVwgOwor5ber6KGTID4gZnVqdXRzdVwgOwor6YCf55CDID4gc29ra3l1dVwgOwor6L+U57SNID4gaGVuJydub3VcIDsKK+W+qeWIuyA+IGZ1a2tva3VcIDsKK+WFseisgCA+IGt5b3Vib3VcIDsKK+i7vemchyA+IGtlaXNoaW5cIDsKK+iNkuiCnSA+IGFyYWdpbW9cIDsKK+WHuuepgiA+IHNodXNzdWlcIDsKK+W8leaPmyA+IGhpa2lrYWVcIDsKK+i8u+i8syA+IGZ1a3Vzb3VcIDsKK+assuaxgiA+IHlva2t5dXVcIDsKK+W7tuadvyA+IG5vYmVpdGFcIDsKK+ecn+epuiA+IHNoaW5rdXVcIDsKK+ecvOebriA+IGdhbm1va3VcIDsKK+W8leaOpSA+IGluc2V0c3VcIDsKK+iJsumtlCA+IHNoaWtpbWFcIDsKK+W/heS4rSA+IGhpdGNodXVcIDsKK+i8qumDrSA+IHJpbmtha3VcIDsKK+WNmOS9nCA+IHRhbnNha3VcIDsKK+ecgee3miA+IHNob3VzZW5cIDsKK+W+tOWAmSA+IGNob3Vrb3VcIDsKK+W8vuW5lSA+IGRhbm1ha3VcIDsKK+W5tOebiiA+IG5lbicnZWtpXCA7CivlvqnlhZogPiBmdWt1dG91XCA7CivlhYnou7ggPiBrb3VqaWt1XCA7Civlu7/ml6UgPiBoYXRzdWthXCA7CivlvLHlv5cgPiBqYWt1c2hpXCA7CivljJflm70gPiBob2trb2t1XCA7CivlvLflvJMgPiBnb3VreXV1XCA7CivlvqnlhYMgPiBmdWt1Z2VuXCA7CivlvLflvIEgPiBreW91YmVuXCA7CivpgoTmmqYgPiBrYW5yZWtpXCA7CivlirHmjK8gPiByZWlzaGluXCA7Civovp7oibIgPiBqaXNob2t1XCA7Civlh7rnpL4gPiBzaHVzc2hhXCA7CivojYnogqUgPiBrdXNhZ29lXCA7CivliKnnjocgPiByaXJpdHN1XCA7CivnmbrotrMgPiBob3Nzb2t1XCA7CivlhazoqZUgPiBrb3VoeW91XCA7CivmraPmlZkgPiBzZWlreW91XCA7CivlhazoqLwgPiBrb3VzaG91XCA7CivljYHlha0gPiBqdXVyb2t1XCA7CivliKXnj40gPiBiZXRjaGluXCA7CivljZTkvJogPiBreW91a2FpXCA7CivlhYjoubQgPiBzZW5zaHV1XCA7CivljLrliKUgPiBrdWJldHN1XCA7CivljYPlhIQgPiBzZW4nJ29rdVwgOwor5rCX5L2NID4ga2lndXJhaVwgOwor5byx5byfID4gamFrdXRlaVwgOwor5YWx6KWfID4gdG9tb2VyaVwgOwor55y855eFID4gZ2FuYnlvdVwgOwor5YWt6KeSID4gcm9ra2FrdVwgOwor5Y2S5LyNID4gc290c3Vnb1wgOwor5rCR5L+XID4gbWluem9rdVwgOwor5q6v5a6uID4gaGlua3l1dVwgOwor56CU5a2mID4ga2VuZ2FrdVwgOwor5q6L5b+1ID4gemFuJyduZW5cIDsKK+iNt+epjSA+IG5pZHp1bWlcIDsKK+WNl+S4rSA+IG5hbmNodXVcIDsKK+WGt+iCiSA+IHJlaW5pa3VcIDsKK+iQveaJiyA+IHJha3VzaHVcIDsKK+ebuOe2miA+IHNvdXpva3VcIDsKK+aui+W/jSA+IHphbicnbmluXCA7CivmsJfku5ggPiBraWR6dWtlXCA7CivlhaXoqaYgPiBueXV1c2hpXCA7Civmrovlv4MgPiB6YW5zaGluXCA7CivlibXmpa0gPiBzb3VneW91XCA7Civlh6HnrZYgPiBib25zYWt1XCA7Civli4nlvLcgPiBiZW5reW91XCA7CivlhbHoo48gPiB0b21vdXJhXCA7CivlvozljoQgPiBhdG95YWt1XCA7CivokL3miJAgPiByYWt1c2VpXCA7Civlhajop5IgPiB6ZW5rYWt1XCA7CivlvLHlubQgPiBqYWt1bmVuXCA7Civli6flraYgPiBrYW5nYWt1XCA7CivljYrkvZwgPiBoYW5zYWt1XCA7CivlvpfliIYgPiB0b2t1YnVuXCA7CivovInpjLIgPiBzYWlyb2t1XCA7CivlurbmtYEgPiBzaG9yeXV1XCA7CivmrbTmiKYgPiByZWtpc2VuXCA7Civlt53onaYgPiBrYXdhZWJpXCA7CivmrYzmm7IgPiBrYWt5b2t1XCA7CivlvoXlkIggPiBtYWNoaWFpXCA7CivluLDntZAgPiBraWtldHN1XCA7Civnn7Pluq0gPiBzZWtpdGVpXCA7CivljZLkuK0gPiBzb3RjaHV1XCA7CivljZPkuIogPiB0YWt1am91XCA7CivliYrmuJsgPiBzYWt1Z2VuXCA7CivlhYXotrMgPiBqdXVzb2t1XCA7CivljYrkvJEgPiBoYW5reXV1XCA7CivojLbohbkgPiBjaGFiYXJhXCA7CivlhY3osqwgPiBtZW5zZWtpXCA7CivljLnlhJQgPiBoaXRjaHV1XCA7CivpganmoLwgPiB0ZWtrYWt1XCA7CivojZLnuIQgPiBhcmFuYXdhXCA7Civlg7vpmoUgPiBoZWtpZ3V1XCA7CivliofmmpEgPiBnZWtpc2hvXCA7Civnm7TntYwgPiBjaG9ra2VpXCA7Civnm67nuIEgPiBtYWJ1Y2hpXCA7Civlg7vpmawgPiBoZWtpc3V1XCA7CivpgY3mrbQgPiBoZW5yZWtpXCA7CivluK/ntJkgPiBvYmlnYW1pXCA7CivluoPni60gPiBrb3VreW91XCA7CivliLrmv4AgPiBzaGlnZWtpXCA7CivlubLnk6IgPiBrYW5weW91XCA7CivphJnliqMgPiBoaXJldHN1XCA7Civovp7ogbcgPiBqaXNob2t1XCA7CivlhJ/ph5EgPiBzaG91a2luXCA7CivmsI/kurogPiB1amloaXRvXCA7Civnm7Tns7sgPiBjaG9ra2VpXCA7Civnm5fogbQgPiB0b3VjaG91XCA7CivlhazooaggPiBrb3VoeW91XCA7Civnn6XlvrMgPiBjaGl0b2t1XCA7CivpgYrmrbQgPiB5dXVyZWtpXCA7CivlhazooYYgPiBrb3VzaHV1XCA7CivlhYjosqAgPiBzZW5tYWtlXCA7Civnn6XlvpcgPiBjaGl0b2t1XCA7CivnnLznkIMgPiBnYW5reXV1XCA7CivluL3nq6AgPiBib3VzaG91XCA7Civov5Hnp7AgPiBraW5zaG91XCA7Civlvqnku4cgPiBmdWtreXV1XCA7CivnmbrorbAgPiBoYXRzdWdpXCA7Civlh7rnm6MgPiBzaHVra2FuXCA7CivpgIHnkIMgPiBzb3VreXV1XCA7Civoia/poqggPiByeW91ZnV1XCA7CivliIbnlZkgPiBidW5yeXV1XCA7Civli5jlr6kgPiBrYW5zaGluXCA7CivpganmnZAgPiB0ZWtpemFpXCA7CivpgoDmkoMgPiB5b3VnZWtpXCA7CivpgKPmv4EgPiByZW5kYWt1XCA7Civmrb/lvowgPiBib3RzdWdvXCA7CivnnJ/nm7ggPiBzaGluc291XCA7CivnnJ/nm7QgPiBtYXNzdWd1XCA7CivlvbnlkI0gPiB5YWt1bWVpXCA7CivlvpPlg5UgPiBqdXVib2t1XCA7CivpgZPmpb0gPiBkb3VyYWt1XCA7Civnnqzmlq0gPiBzaHVuZGFuXCA7Civnmbroqp4gPiBoYXRzdWdvXCA7Civli6flpaggPiBrYW5zaG91XCA7CivlipvmipUgPiByaWtpdG91XCA7CivliJHnjYQgPiBrZWlnb2t1XCA7Civnmb7oqIggPiBoeWFra2VpXCA7CivlhJ/pgoQgPiBzaG91a2FuXCA7CivljYPkuKEgPiBzZW5yeW91XCA7CivlvozlhYggPiBhdG9zYWtpXCA7CivljYHkuZ0gPiBqdXVreXV1XCA7CivnmbroqbEgPiBoYXRzdXdhXCA7CivovIPph48gPiBrb3VyeW91XCA7CivljJfljYogPiBob2t1aGFuXCA7Civlu4Pmpa0gPiBoYWlneW91XCA7CivnmbroqLsgPiBoYXRjaHV1XCA7CivljYHkuKEgPiBqdXVyeW91XCA7CivlipvmiKYgPiByaWtpc2VuXCA7CivljYHkuIMgPiBqdXVuYW5hXCA7CivljYHkuIAgPiBqdXVpY2hpXCA7CivlvJXlvZMgPiBoaWtpYXRlXCA7CivpgLjmsJEgPiBpdHN1bWluXCA7CivlvovlhIAgPiByaWNoaWdpXCA7CivliY3mrbQgPiB6ZW5yZWtpXCA7Civlia/mnKwgPiBmdWt1aG9uXCA7CivoibHpm6MgPiBrYW4nJ25hblwgOwor5byP5b6uID4gc2hpa2liaVwgOwor6YGK5qW9ID4geXV1cmFrdVwgOwor6Lu96YePID4ga2VpcnlvdVwgOwor6Lu96YeNID4ga2VpY2hvdVwgOwor55uu566XID4gbW9rdXNhblwgOwor5Ymv5pu4ID4gZnVrdXNob1wgOwor5Ye655SjID4gc2h1c3NhblwgOwor5Ye655SfID4gc2h1c3NlaVwgOwor55m66KaaID4gaGFra2FrdVwgOwor6YCy5rC0ID4gc2hpbnN1aVwgOwor5qyy5pybID4geW9rdWJvdVwgOwor5YuH5bCGID4geXV1c2hvdVwgOwor55uf57SEID4gbWVpeWFrdVwgOwor55u456ewID4gc291c2hvdVwgOwor5b285YemID4ga2FzaGlrb1wgOwor55+u5bCPID4gd2Fpc2hvdVwgOwor552r5q+bID4gbWF0c3VnZVwgOwor6YK45a6FID4gdGVpdGFrdVwgOwor55+t5bCPID4gdGFuc2hvdVwgOwor55uu56uvID4gbWVoYXNoaVwgOwor5YuJ5a2mID4gYmVuZ2FrdVwgOwor6a+o6IKJID4gZ2VpbmlrdVwgOwor6IyJ6I6JID4gbWF0c3VyaVwgOwor5YSq6LaKID4geXV1ZXRzdVwgOwor55m+6KGMID4gaHlha2tvdVwgOwor6L+R55y8ID4gY2hpa2FtZVwgOwor6I+M5q+SID4ga2luZG9rdVwgOwor5q205bm0ID4gcmVraW5lblwgOwor5byT5birID4geXVtaXNoaVwgOwor5YWJ6KaaID4ga291a2FrdVwgOwor5YWI6KaaID4gc2Vua2FrdVwgOwor5b6M5L2cID4gYXRvc2FrdVwgOwor5beo6Ii2ID4ga3lvaGFrdVwgOwor5bqV5rWBID4gdGVpcnl1dVwgOwor6L+R55uuID4gY2hpa2FtZVwgOwor55m66KGoID4gaGFwcHlvdVwgOwor6YG45oqeID4gc2VudGFrdVwgOwor5qyg5qC8ID4ga2Vra2FrdVwgOwor5YWx6JGXID4ga3lvdWNob1wgOwor5bqD5rygID4ga291YmFrdVwgOwor6I2J56ybID4ga3VzYWJ1ZVwgOwor5Yud5aCxID4gc2hvdWhvdVwgOwor5Yid5r2uID4gc2hvY2hvdVwgOwor5Yqp5bmzID4gc3VrZWJlaVwgOwor5by35aSnID4ga3lvdWRhaVwgOwor6Lyq6KqtID4gcmluZG9rdVwgOwor55+l5bCGID4gY2hpc2hvdVwgOwor5YaF6IacID4gbmFpbWFrdVwgOwor5by35aOuID4ga3lvdXNvdVwgOwor5b255YOnID4geWFrdXNvdVwgOwor5YqH5oimID4gZ2VraXNlblwgOwor5q+S5YiDID4gZG9rdWppblwgOwor55m96J2LID4gaGFrdXJvdVwgOwor5biG57axID4gaG9kenVuYVwgOwor6LuN6ZW3ID4gZ3VuY2hvdVwgOwor5Yqb5b25ID4gcmlraWVraVwgOwor5Ya356yRID4gcmVpc2hvdVwgOwor6Iy257KlID4gY2hhZ2F5dVwgOwor5bu75b+DID4ga2Fpc2hpblwgOwor55yL55eFID4ga2FuYnlvdVwgOwor55uu56S8ID4gbW9rdXJlaVwgOwor6Ly46KGAID4geXVrZXRzdVwgOwor5Yud5ZywID4gc2hvdWNoaVwgOwor5Yid5rmvID4gaGF0c3V5dVwgOwor5YWH6KGMID4ga3lvdWtvdVwgOwor5Ye254ybID4ga3lvdW1vdVwgOwor6Imm6ZW3ID4ga2FuY2hvdVwgOwor5YeN55+zID4gdG91c2VraVwgOwor5Yi25qyyID4gc2VpeW9rdVwgOwor5b2i5YudID4ga2Vpc2hvdVwgOwor5Ye654mIID4gc2h1cHBhblwgOwor5byf5auBID4gb3RveW9tZVwgOwor5Ye254q2ID4ga3lvdWpvdVwgOwor5qi66ImyID4ga2FiYWlyb1wgOwor6YCA5r2uID4gdGFpY2hvdVwgOwor56CC5ZywID4gc3VuYWNoaVwgOwor6YGT5pWZID4gZG91a3lvdVwgOwor6YGO5pelID4ga2FqaXRzdVwgOwor6YO35YWaID4ga3lvdXRvdVwgOwor6Lui6YedID4gdGVuc2hpblwgOwor6Iy2566xID4gY2hhYmFrb1wgOwor5biw552AID4ga2ljaGFrdVwgOwor6YGp5omAID4gdGVraXNob1wgOwor5YO76YKRID4gaGVraXl1dVwgOwor5q2O5oGvID4gdGFuc29rdVwgOwor6Iub6JmQID4ga2FneWFrdVwgOwor5YaZ57WMID4gc2hha3lvdVwgOwor5q2T5b+DID4ga2Fuc2hpblwgOwor5b2r5YOPID4gY2hvdXpvdVwgOwor55+z5aGUID4gc2VraXRvdVwgOwor6L+U55CDID4gaGVua3l1dVwgOwor55+z5aGAID4gaXNoaWJlaVwgOwor5byf5aerID4gb3RvaGltZVwgOwor5Yip5q6WID4gcmlzaG9rdVwgOwor5b255Lq6ID4geWFrdW5pblwgOwor5biv55quID4gb2Jpa2F3YVwgOwor6L6x55+lID4gam9rdWNoaVwgOwor5Yun5ZGKID4ga2Fua29rdVwgOwor55uy55uuID4gbW91bW9rdVwgOwor55eb6aKoID4gdHN1dWZ1dVwgOwor6YC45p2QID4gaXRzdXphaVwgOwor5Ye654KtID4gc2h1dHRhblwgOwor5byx5Zu9ID4gamFra29rdVwgOwor5bm55rWBID4ga2Fucnl1dVwgOwor5q2v5a2mID4gc2hpZ2FrdVwgOwor5bmy5riJID4ga2Fuc2hvdVwgOwor6I2354mpID4gbmltb3RzdVwgOwor5YyX5LiKID4gaG9rdWpvdVwgOwor5Ymv5omLID4gZnVrdXNodVwgOwor5Ym95oKNID4gaHlvdWthblwgOwor6Imy6YeMID4gaXJvemF0b1wgOwor6Lui6YCyID4gdGVuc2hpblwgOwor55uk55+zID4gYmFuamFrdVwgOwor6L6y55u4ID4gbm91c2hvdVwgOwor6YGK5pKDID4geXV1Z2VraVwgOwor5YWl6Ii5ID4gbnl1dXNlblwgOwor5YiG5rqcID4gYnVucnl1dVwgOwor5YWl6IiOID4gbnl1dXNoYVwgOwor6YCQ5qyhID4gY2hpa3VqaVwgOwor6L6655aGID4gaGVua3lvdVwgOwor5YmN5pa5ID4gbWFla2F0YVwgOwor55m96I+cID4gaGFrdXNhaVwgOwor5Ymy5oSbID4ga2F0c3VhaVwgOwor6YGp5oCnID4gdGVraXNlaVwgOwor55uj552jID4ga2FudG9rdVwgOwor6LqB6ayxID4gc291dXRzdVwgOwor56CU5YmKID4ga2Vuc2FrdVwgOwor5qW96ZqKID4gZ2FrdXRhaVwgOwor5q2j5a6iID4gc2Vpa2FrdVwgOwor5q6J5Zu9ID4ganVua29rdVwgOwor5YWo6IO9ID4gemVuJydub3VcIDsKK+mAhuavlCA+IGd5YWt1aGlcIDsKK+WGpeemjyA+IG1laWZ1a3VcIDsKK+edpuaciCA+IG11dHN1a2lcIDsKK+mAuOaWhyA+IGl0c3VidW5cIDsKK+WIu+acrCA+IGtva3Vob25cIDsKK+ato+WtkCA+IHNob3VzaGlcIDsKK+W5veasnSA+IHl1dXV0c3VcIDsKK+auuuWCtyA+IHNhc3Nob3VcIDsKK+WGhee0hCA+IG5haXlha3VcIDsKK+W8t+WRsyA+IHRzdXlvbWlcIDsKK+WJo+aInyA+IGtlbmdla2lcIDsKK+i/lOeFpyA+IGhlbnNob3VcIDsKK+iJh+mVtyA+IHRlaWNob3VcIDsKK+mBqeW9kyA+IHRla2l0b3VcIDsKK+i7oui6qyA+IHRlbnNoaW5cIDsKK+WIhua1gSA+IGJ1bnJ5dXVcIDsKK+aoqeiDvSA+IGtlbicnbm91XCA7Civlh7bmvKIgPiBreW91a2FuXCA7CivmraPlq6EgPiBzZWl0ZWtpXCA7CivmrLLmg4UgPiB5b2t1am91XCA7CivluqfmlbcgPiB6YXNoaWtpXCA7CivmpbzplqMgPiByb3VrYWt1XCA7CivliIbms6ggPiBidW5jaHV1XCA7CivljIXkuIEgPiBob3VjaG91XCA7CivliLbmnI0gPiBzZWlmdWt1XCA7Civnmbroir0gPiBoYXRzdWdhXCA7CivpgLLmlbAgPiBzaGluc3V1XCA7Civlh7rmuK8gPiBzaHVra291XCA7Civnmb7oiKwgPiBoeWFwcGFuXCA7Civlh7rmuKAgPiBzaHVra3lvXCA7CivpgLLmlLsgPiBzaGlua291XCA7CivokL3ln44gPiByYWt1am91XCA7CivlibLlvZMgPiB3YXJpYXRlXCA7CivmrLLlv7UgPiB5b2t1bmVuXCA7CivmqJ/ohLMgPiBzaG91bm91XCA7Civov5HngasgPiBjaGlrYWJpXCA7CivliKXmoLwgPiBiZWtrYWt1XCA7Civnlr7poqggPiBzaGlwcHV1XCA7CivokL3lnLAgPiByYWt1Y2hpXCA7CivlhbHnt6ggPiBreW91aGVuXCA7CivmraTlpbQgPiBrb3lhdHN1XCA7CivlvLfli6IgPiBreW91c2VpXCA7Civnm5fnmZYgPiB0b3VoZWtpXCA7CivoiLnplbcgPiBzZW5jaG91XCA7CivnoJTkv64gPiBrZW5zaHV1XCA7CivliLfmlrAgPiBzYXNzaGluXCA7Civmrr/kuK0gPiBkZW5jaHV1XCA7CivlvLflipsgPiBnb3VyaWtpXCA7Civluo/mm7IgPiBqb2t5b2t1XCA7Civluormnb8gPiB5dWthaXRhXCA7CivpgJrmnIkgPiB0c3V1eXV1XCA7CivliZvmhI4gPiBnb3VmdWt1XCA7CivlhbXns6cgPiBoeW91cm91XCA7CivpgbflrqIgPiBzZW5rYWt1XCA7CivlvLfliZsgPiBreW91Z291XCA7Civnm4bnn7MgPiBib25zZWtpXCA7CivmrKPmgqYgPiBraW5ldHN1XCA7CivlvLfliLYgPiBreW91c2VpXCA7CivlhbXnsq4gPiBoeW91cm91XCA7CivpgZPlv4MgPiBkb3VzaGluXCA7CivlhbjnsY0gPiB0ZW5zZWtpXCA7CivpgZPlvrMgPiBkb3V0b2t1XCA7Civnl4Xpm6MgPiBieW91bmFuXCA7Civlipvlo6sgPiByaWtpc2hpXCA7Civou4rovJsgPiBzaGFyeW91XCA7Civou4rovIwgPiBzaGFyeW91XCA7CivlhbXnsY0gPiBoZWlzZWtpXCA7CivlioPlrpogPiBrYWt1dGVpXCA7CivpgJ/mlq0gPiBzb2t1ZGFuXCA7Civou4rou7ggPiBzaGFqaWt1XCA7CivlhoXnqY0gPiBuYWlzZWtpXCA7CivpgI/mnpAgPiB0b3VzZWtpXCA7CivlhqDnnIEgPiBrYW5zaG91XCA7CivliaPlvaIgPiBrZW5nYXRhXCA7CivojZLniakgPiBhcmFtb25vXCA7Civnm7LniIYgPiBtb3ViYWt1XCA7Civlg7voq5YgPiBoZWtpcm9uXCA7CivlvLflhbUgPiBreW91aGVpXCA7CivlhazntIQgPiBrb3V5YWt1XCA7CivmrrXkuJggPiBkYW5reXV1XCA7CivovrLniacgPiBub3Vib2t1XCA7CivlhaXntr8gPiBpcmV3YXRhXCA7CivmqKrnt5ogPiB5b2tvc2VuXCA7Civnmb3nvr0gPiBzaGlyYWhhXCA7Civls7vpmbogPiBzaHVua2VuXCA7Civlt6vnpZ0gPiBmdXNodWt1XCA7Civou7joo4UgPiBqaWt1c291XCA7Civnm6PnjYQgPiBrYW5nb2t1XCA7CivliKXmmYIgPiBiZXRzdWppXCA7CivlvJTllY8gPiBjaG91bW9uXCA7Civli4Xli5ggPiBjaG9ra2FuXCA7CivlhajntJogPiB6ZW5reXV1XCA7CivlhoXnpo8gPiBuYWlmdWt1XCA7CivlhpnnnJ8gPiBzaGFzaGluXCA7CivlhajntI0gPiB6ZW4nJ25vdVwgOwor5Yed5rueID4gZ3lvdXRhaVwgOwor6YGT5bqKID4gZG91c2hvdVwgOwor5q6K5YudID4gc2h1c2hvdVwgOwor6LuN6LazID4gZ3Vuc29rdVwgOwor6auY6aGNID4ga291Z2FrdVwgOwor5YO76KiAID4gaGVraWdlblwgOwor5Ymj5bmVID4ga2VubWFrdVwgOwor5Ye25q2zID4ga3lvdXNhaVwgOwor5Ymb5by3ID4gZ291a3lvdVwgOwor5YiG5qWtID4gYnVuZ3lvdVwgOwor55yf5q2jID4gc2hpbnNlaVwgOwor6Lui6Kq/ID4gdGVuY2hvdVwgOwor5q2M5aerID4gdXRhaGltZVwgOwor6YGg5bGxID4gdG9veWFtYVwgOwor5qiq57O4ID4geW9rb2l0b1wgOwor5qyh5byPID4gamlzaGlraVwgOwor5by35YGlID4ga3lvdWtlblwgOwor6YGK5byLID4geXV1eW9rdVwgOwor6YG65aSxID4gaXNoaXRzdVwgOwor6YG45aWoID4gc2Vuc2hvdVwgOwor5YO76KaLID4gaGVraWtlblwgOwor6Iqx6JG1ID4gaGFuYWFvaVwgOwor6JC95ZG9ID4gcmFrdW1laVwgOwor6YGK5buTID4geXV1a2FrdVwgOwor6Luf6Kq/ID4gbmFuY2hvdVwgOwor5qi556uLID4ganVyaXRzdVwgOwor6a2U6KGTID4gbWFqdXRzdVwgOwor5Yeh5rWBID4gYm9ucnl1dVwgOwor5biC55S6ID4gc2hpY2hvdVwgOwor6IiM6Z+zID4gemV0c3VvblwgOwor5Yid5pelID4gaGF0c3VoaVwgOwor5byV5Y+XID4gaGlraXVrZVwgOwor5YqH5aSJID4gZ2VraWhlblwgOwor5bu65Zu9ID4ga2Vua29rdVwgOwor55+t5YaKID4gdGFuemFrdVwgOwor55+z5YOPID4gc2VraXpvdVwgOwor552j5oimID4gdG9rdXNlblwgOwor5Yi65oifID4gc2hpZ2VraVwgOwor55y65pybID4gY2hvdWJvdVwgOwor5YqH5aOHID4gZ2VraWRhblwgOwor6L+R5rOBID4ga2lua3lvdVwgOwor5qyg5bitID4ga2Vzc2VraVwgOwor5beo55+zID4ga3lvc2VraVwgOwor5YmN5b60ID4gemVuY2hvdVwgOwor5q205Y+yID4gcmVraXNoaVwgOwor55m957eaID4gaGFrdXNlblwgOwor5bmz5pyNID4gaGVpZnVrdVwgOwor6Lui6KaGID4gdGVucHVrdVwgOwor5qmf55WlID4ga2lyeWFrdVwgOwor5YqH5aC0ID4gZ2VraWpvdVwgOwor6Lqr6L+RID4gbWlkamlrYVwgOwor5YSq6ImvID4geXV1cnlvdVwgOwor6YCG5peFID4gZ2VraXJ5b1wgOwor6Lqr6L66ID4gc2hpbnBlblwgOwor5YiG5p6QID4gYnVuc2VraVwgOwor5byx5L2TID4gamFrdXRhaVwgOwor5Ye65qO6ID4gc2h1a2thblwgOwor55m957SZID4gaGFrdXNoaVwgOwor5YWa57GNID4gdG91c2VraVwgOwor5qiq56ybID4geW9rb2J1ZVwgOwor55m657WmID4gaGFra3l1dVwgOwor6Lu96JaEID4ga2VpaGFrdVwgOwor5byV5YqbID4gaW5yeW9rdVwgOwor5YaF55u4ID4gbmFpc2hvdVwgOwor5YWs56ewID4ga291c2hvdVwgOwor5YaG55uGID4gbWFydWJvblwgOwor6JGX5L2cID4gY2hvc2FrdVwgOwor55ep6LqrID4gc291c2hpblwgOwor6Iqx6ImyID4gaGFuYWlyb1wgOwor6YCf5oiQID4gc29rdXNlaVwgOwor6auY6ZajID4ga291a2FrdVwgOwor5bem55u0ID4gc2FjaG9rdVwgOwor5YmN5bm0ID4gemVuJyduZW5cIDsKK+mAgeaWmSA+IHNvdXJ5b3VcIDsKK+mxl+acqCA+IHJpbmJva3VcIDsKK+eZveeyiSA+IG9zaGlyb2lcIDsKK+WGheeahCA+IG5haXRla2lcIDsKK+iLpuevgCA+IGt1c2V0c3VcIDsKK+eZveexsyA+IGhha3VtYWlcIDsKK+efreS/oSA+IHRhbnNoaW5cIDsKK+iPr+WunyA+IGthaml0c3VcIDsKK+aoqueptCA+IHlva29hbmFcIDsKK+iIiOmahiA+IGtvdXJ5dXVcIDsKK+altemBkyA+IGdva3Vkb3VcIDsKK+iJr+ioiCA+IHJ5b3VrZWlcIDsKK+ect+aXjyA+IGtlbnpva3VcIDsKK+mBk+WtpiA+IGRvdWdha3VcIDsKK+WBtOmdoiA+IHNva3VtZW5cIDsKK+WHuuagoSA+IHNodWtrb3VcIDsKK+W5o+adnyA+IGhlaXNva3VcIDsKK+WKqeWLoiA+IHN1a2V6ZWlcIDsKK+WKn+WQjSA+IGtvdW15b3VcIDsKK+iJh+i6qyA+IHRlaXNoaW5cIDsKK+mBjuWvhiA+IGthbWl0c3VcIDsKK+WKh+WboyA+IGdla2lkYW5cIDsKK+WKquWKmyA+IGRvcnlva3VcIDsKK+W6reW4qyA+IG5pd2FzaGlcIDsKK+efs+S6rSA+IHNla2l0ZWlcIDsKK+mqqOmqvCA+IGtva2tha3VcIDsKK+WKqeWKmyA+IGpvcnlva3VcIDsKK+W7n+WggiA+IGJ5b3Vkb3VcIDsKK+i/veaUviA+IHRzdWlob3VcIDsKK+WzoemWkyA+IGt5b3VrYW5cIDsKK+iNkua2vCA+IGtvdXJ5b3VcIDsKK+atu+WCtyA+IHNoaXNob3VcIDsKK+mBiuWuoiA+IHl1dWtha3VcIDsKK+WFpeekviA+IG55dXVzaGFcIDsKK+api+eVlCA+IGt5b3VoYW5cIDsKK+mBiuWtpiA+IHl1dWdha3VcIDsKK+ats+WFpSA+IHNhaW55dXVcIDsKK+WGheeUsyA+IG5haXNoaW5cIDsKK+mzqeWQiCA+IGt5dXVnb3VcIDsKK+asoOWtlyA+IGtldHN1amlcIDsKK+ato+WMlyA+IHNlaWhva3VcIDsKK+WCt+i3oSA+IGtpenVhdG9cIDsKK+atpuWKmyA+IGJ1cnlva3VcIDsKK+mBqeWcsCA+IHRla2ljaGlcIDsKK+WKn+WKmyA+IGtvdXJpa2lcIDsKK+iNkuazoiA+IGFyYW5hbWlcIDsKK+i/kealrSA+IGtpbmd5b3VcIDsKK+ecn+abuCA+IHNoaW5zaG9cIDsKK+iItui8iSA+IGhha3VzYWlcIDsKK+W6teWupCA+IGFuaml0c3VcIDsKK+WHtuaatCA+IGt5b3Vib3VcIDsKK+WFseebiiA+IGt5b3Vla2lcIDsKK+ato+WJryA+IHNlaWZ1a3VcIDsKK+mAmuaApyA+IHRzdXVzZWlcIDsKK+ato+WJhyA+IHNlaXNva3VcIDsKK+WJjeWvqSA+IHplbnNoaW5cIDsKK+msseihgCA+IHVra2V0c3VcIDsKK+WFvOeUqCA+IGtlbicneW91XCA7CivlirTkvZwgPiByb3VzYWt1XCA7CivpgJrlv7UgPiB0c3V1bmVuXCA7Civlh4vmrosgPiBjaG91emFuXCA7CivlhrfmtrwgPiByZWlyeW91XCA7Civou73oiJ8gPiBrZWlzaHV1XCA7CivokL3kvZMgPiByYWt1dGFpXCA7CivnmoTnorogPiB0ZWtrYWt1XCA7CivpgKPlubQgPiByZW4nJ25lblwgOwor5YiH5o+bID4ga2lyaWthZVwgOwor55eV6LehID4ga29uc2VraVwgOwor5bmy5ouTID4ga2FudGFrdVwgOwor5q275Lq6ID4gc2hpYml0b1wgOwor5YWs55qEID4ga291dGVraVwgOwor5bu65YmNID4gdGF0ZW1hZVwgOwor5YiH5o6bID4ga2lra2FrZVwgOwor6YCy5bGVID4gc2hpbnRlblwgOwor5qyg5aaCID4ga2V0c3Vqb1wgOwor6aqo6aCCID4ga290Y2hvdVwgOwor5qiq552AID4gb3VjaGFrdVwgOwor5YiG5o6MID4gYnVuc2hvdVwgOwor5byB5YSfID4gYmVuc2hvdVwgOwor5YiR5oiuID4ga2VpcmlrdVwgOwor6YCa5byKID4gdHN1dWhlaVwgOwor55m656WlID4gaGFzc2hvdVwgOwor6YCa5byBID4gdHN1dWJlblwgOwor5q205LydID4gcmVraWRlblwgOwor5bm95oSBID4geXV1c2h1dVwgOwor6JC95Lq6ID4gb2NodXVkb1wgOwor5YWl55ujID4gbnl1dWthblwgOwor5q275LitID4gc2hpY2h1dVwgOwor5q205Lu7ID4gcmVraW5pblwgOwor5Yil5b6MID4gYmV0c3Vnb1wgOwor5q205LujID4gcmVraWRhaVwgOwor5q205LuVID4gcmVraXNoaVwgOwor5YWx55SoID4ga3lvdXlvdVwgOwor5qW16LKnID4gZ29rdWhpblwgOwor5YWx55SjID4ga3lvdXNhblwgOwor5YWx55SfID4ga3lvdXNlaVwgOwor5qip55uKID4ga2VuJydla2lcIDsKK+W5u+aDkSA+IGdlbndha3VcIDsKK+i7ouiQvSA+IHRlbnJha3VcIDsKK+W5leaUvyA+IGJha3VzZWlcIDsKK+ecjOaciSA+IGtlbicneXV1XCA7Civov73mh5AgPiB0c3Vpa2FpXCA7CivprZrohbkgPiBneW9mdWt1XCA7CivpgJrluLggPiB0c3V1am91XCA7Civov73mhrYgPiB0c3Vpb2t1XCA7Civnm5vms4EgPiBzZWlreW91XCA7CivliJ3lv4MgPiBzaG9zaGluXCA7CivouorouocgPiBjaHV1Y2hvXCA7Civlt53njbogPiBrYXdhdXNvXCA7CivprLzok64gPiBvbmliYXN1XCA7CivnnJ/mka8gPiBzaGluc2hpXCA7Civnmobnm64gPiBrYWltb2t1XCA7Civnmb3noIIgPiBoYWt1c2hhXCA7CivpgJrlt7sgPiB0c3V1a2FuXCA7CivmrbTkuJYgPiByZWtpc2hpXCA7CivmpoLoqZUgPiBnYWloeW91XCA7CivlvIvkurogPiB5b2t1amluXCA7CivoiKrot6EgPiBrb3VzZWtpXCA7Civlh53mnJsgPiBneW91Ym91XCA7Civlgr7op5IgPiBrZWlrYWt1XCA7CivlhbjnjYQgPiB0ZW5nb2t1XCA7Civpr5vnhLwgPiB0YWl5YWtpXCA7CivpganlkIggPiB0ZWtpZ291XCA7CivliofliaQgPiBnZWtpemFpXCA7CivliKXluK0gPiBiZXNzZWtpXCA7CivlhYPnpoQgPiBnZW5yb2t1XCA7Civov73mg7MgPiB0c3Vpc291XCA7Civlgr7opoYgPiBrZWlmdWt1XCA7CivprZrogokgPiBneW9uaWt1XCA7Civov73mgrwgPiB0c3VpdG91XCA7CivlhaXnlKggPiBueXV1eW91XCA7Civnmb3nnLwgPiBoYWt1Z2FuXCA7Civpq5jpgLIgPiBrb3VzaGluXCA7CivojZLmpa0gPiBhcmF3YXphXCA7Civnl5voq5YgPiB0c3V1cm9uXCA7CivliLrlrZAgPiBzYXNoaWtvXCA7CivmraPkvZMgPiBzaG91dGFpXCA7CivpgIblvpIgPiBneWFrdXRvXCA7Civpq5jpgJ8gPiBrb3Vzb2t1XCA7CivlsbHpupMgPiBzYW5yb2t1XCA7CivlubzlvLEgPiB5b3VqYWt1XCA7Civov47mmKUgPiBnZWlzaHVuXCA7Civnmb3nm64gPiBzaGlyb21lXCA7CivliJflvLcgPiByZWtreW91XCA7CivovrLmpa0gPiBub3VneW91XCA7CivliIfmhJsgPiBzZXRzdWFpXCA7CivlgJnps6UgPiBrb3VjaG91XCA7CivpgoTkv5cgPiBnZW56b2t1XCA7CivpgJ/lsIQgPiBzb2t1c2hhXCA7Civov7fmg5EgPiBtZWl3YWt1XCA7CivluoPlt54gPiBrb3VzaHV1XCA7CivpgLzloZ4gPiBoaXNzb2t1XCA7CivlubPlvqkgPiBoZWlmdWt1XCA7Civnmb3nmawgPiBoYWt1c2VuXCA7Civnl5voqIAgPiB0c3V1Z2VuXCA7CivliJ3lt7MgPiBoYXRzdW1pXCA7Civnlr7otbAgPiBzaGlzc291XCA7CivliJfluqcgPiByZXRzdXphXCA7CivnnYDluqcgPiBjaGFrdXphXCA7CivlhbHniq8gPiBreW91aGFuXCA7CivojLbmrrsgPiBjaGFnYXJhXCA7Civov73lvpMgPiB0c3VpanV1XCA7CivmraPkuK0gPiBzZWljaHV1XCA7CivouqzooYwgPiBreXV1a291XCA7Civnmb3nl7QgPiBoYWt1Y2hpXCA7Civlh7bmiYsgPiBreW91c2h1XCA7CivluILms4EgPiBzaGlreW91XCA7CivliJfluK0gPiByZXNzZWtpXCA7CivluJ3mpa0gPiB0ZWlneW91XCA7CivliY3lnoIgPiBtYWVkYXJlXCA7CivnnKnmg5EgPiBnZW53YWt1XCA7Civlv7XjgIUgPiBuZW4nJ25lblwgOwor552A5belID4gY2hha2tvdVwgOwor5Ymy5YuYID4gd2FyaWthblwgOwor6YCA5bqBID4gdGFpY2hvdVwgOwor55m655a5ID4gaG9zc2hpblwgOwor5bm05bm0ID4gbmVuJyduZW5cIDsKK+mzpeS6uiA+IGNob3VqaW5cIDsKK+i/juaSgyA+IGdlaWdla2lcIDsKK+mAsuWhgSA+IHNoaW5ydWlcIDsKK+WJo+WRkSA+IGtlbicnbm9uXCA7CivlhpLmtpwgPiBib3V0b2t1XCA7CivmpJzpj6EgPiBrZW5reW91XCA7CivlhYjnmocgPiBzZW4nJ25vdVwgOwor6YCA5bitID4gdGFpc2VraVwgOwor5Yil5a60ID4gYmV0c3VlblwgOwor6YCx5aCxID4gc2h1dWhvdVwgOwor5Ymy5YmNID4gd2FyaW1hZVwgOwor5YaG5ruRID4gZW5rb3RzdVwgOwor5Yil5a6FID4gYmV0dGFrdVwgOwor5YWN55arID4gbWVuJydla2lcIDsKK+ebm+alrSA+IHNlaWd5b3VcIDsKK+WyoemZtSA+IGtvdXJ5b3VcIDsKK+WJsuWIpCA+IHdhcmloYW5cIDsKK+i7uOe3miA+IGppa3VzZW5cIDsKK+mrmOi2syA+IGtvdXNva3VcIDsKK+WEquengCA+IHl1dXNodXVcIDsKK+WBtOi+uiA+IHNva3VoZW5cIDsKK+asoOWToSA+IGtldHN1aW5cIDsKK+ajkumxiCA+IGJvdWRhcmFcIDsKK+WFpeeJqSA+IGlyZW1vbm9cIDsKK+WFpeeJoiA+IG55dXVyb3VcIDsKK+ecn+aDhSA+IHNoaW5qb3VcIDsKK+mBuOS7uyA+IHNlbicnbmluXCA7Civlh7bmgqogPiBreW91YWt1XCA7CivliJ3lr6kgPiBzaG9zaGluXCA7CivnlarplbcgPiBiYW5jaG91XCA7CivlubzlsJEgPiB5b3VzaG91XCA7CivojYnmnKggPiBzb3Vtb2t1XCA7Civlho3ms6ggPiBzYWljaHV1XCA7Civnm67mmJ8gPiBtZWJvc2hpXCA7CivnnJ/mgKcgPiBzaGluc2VpXCA7Civlub3lr4IgPiB5dXVqYWt1XCA7CivlibXlgrcgPiBzb3VzaG91XCA7CivlgbTou4ogPiBzb2t1c2hhXCA7CivlhajnhLwgPiB6ZW5zaG91XCA7CivliJ3lrZAgPiBoYXRzdWdvXCA7Civlg5roiaYgPiByeW91a2FuXCA7Civlh7rlvoEgPiBzaHVzc2VpXCA7Civlub3lrqIgPiB5dXVrYWt1XCA7CivliIblt7sgPiBidW5tYWtpXCA7CivpgJrlpb0gPiB0c3V1a291XCA7CivoiIjotqMgPiBreW91c2h1XCA7CivliaPliocgPiBrZW5nZWtpXCA7Civnmannl4UgPiByYWlieW91XCA7CivpgJrlpY8gPiB0c3V1c291XCA7CivnlqPotrMgPiBpYm9hc2hpXCA7Civoia/og70gPiByeW91bm91XCA7CivovInnqY0gPiBzYWlzZWtpXCA7CivojLbmo5ogPiBjaGFkYW5hXCA7CivlubzlrZAgPiBvc2FuYWdvXCA7CivpgankvosgPiB0ZWtpcmVpXCA7CivmpJzph50gPiBrZW5zaGluXCA7Civlh7rlu7cgPiBzaHV0dGVpXCA7CivliY3lk6ggPiB6ZW5zaG91XCA7CivltKnokL0gPiBob3VyYWt1XCA7CivnnJ/lvbEgPiBzaGluJydlaVwgOwor5bm05bCRID4gbmVuc2hvdVwgOwor5bmj5bibID4gaGVpaGFrdVwgOwor5Ye25by+ID4ga3lvdWRhblwgOwor6YCf5aCxID4gc29rdWhvdVwgOwor55Sy6auYID4ga291ZGFrYVwgOwor55m954q2ID4gaGFrdWpvdVwgOwor6YGp5Lu7ID4gdGVraW5pblwgOwor5Yi25ZynID4gc2VpYXRzdVwgOwor5Ymb5YqbID4gZ291cmlraVwgOwor55a+6KaWID4gc2hpc3NoaVwgOwor6Ium54axID4ga3VuZXRzdVwgOwor55m654uCID4gaGFra3lvdVwgOwor5Ym15L2cID4gc291c2FrdVwgOwor5qqE5paHID4gZ2VraWJ1blwgOwor5YaF5rGgID4gdWNoaWlrZVwgOwor55uu5pKlID4gbWViYWNoaVwgOwor5YGP6YedID4gaGVuc2hpblwgOwor6YCA5a2mID4gdGFpZ2FrdVwgOwor5YGP6YeNID4gaGVuY2hvdVwgOwor5bm05a2QID4gdG9zaGlnb1wgOwor6YCa5aCxID4gdHN1dWhvdVwgOwor5YKN6Ki8ID4gYm91c2hvdVwgOwor5YKN6Ki7ID4gYm91Y2h1dVwgOwor5Ye65biGID4gc2h1cHBhblwgOwor5Ymj5YWIID4ga2Vuc2FraVwgOwor5YWI546LID4gc2VuJydub3VcIDsKK+WHtuW5tCA+IGt5b3VuZW5cIDsKK+ecn+W5syA+IG1hcHBpcmFcIDsKK+eZkuedgCA+IHl1Y2hha3VcIDsKK+WJr+S9vyA+IGZ1a3VzaGlcIDsKK+mrmOiqvyA+IGtvdWNob3VcIDsKK+iOq+WkpyA+IGJha3VkYWlcIDsKK+WJjeWOhCA+IG1hZXlha3VcIDsKK+mtmuernCA+IGd5b3J5dXVcIDsKK+WFsea4iCA+IGt5b3VzYWlcIDsKK+WFh+eMmyA+IGt5b3Vtb3VcIDsKK+i/t+WuriA+IG1laWt5dXVcIDsKK+mBheWIuyA+IGNoaWtva3VcIDsKK+ebuOaJvyA+IHNvdXNob3VcIDsKK+mrmOiplSA+IGtvdWh5b3VcIDsKK+W5lOW5lSA+IG1hbm1ha3VcIDsKK+ajrumWkSA+IHNoaW5rYW5cIDsKK+mAsuWRiCA+IHNoaW50ZWlcIDsKK+i+n+aYkyA+IGhla2lla2lcIDsKK+WFh+eKtiA+IGt5b3Vqb3VcIDsKK+WFpea8gSA+IG55dXVneW9cIDsKK+ebtOaKqyA+IGNob2t1aGlcIDsKK+eZuueFmSA+IGhhdHN1ZW5cIDsKK+iIn+ihjCA+IHNodXVrb3VcIDsKK+WyuOi+uiA+IGtpc2hpYmVcIDsKK+mrmOinkiA+IGtvdWtha3VcIDsKK+mBk+S/lyA+IGRvdXpva3VcIDsKK+mAsuWPliA+IHNoaW5zaHVcIDsKK+iGqOmahiA+IGJvdXJ5dXVcIDsKK+WAjemhjSA+IGJhaWdha3VcIDsKK+ebruaMhyA+IG1va3VzaGlcIDsKK+mtlOeqnyA+IG1ha3V0c3VcIDsKK+WHneW/tSA+IGd5b3VuZW5cIDsKK+W3oeattCA+IGp1bnJla2lcIDsKK+WxsemggiA+IHNhbmNob3VcIDsKK+i7ouexjSA+IHRlbnNla2lcIDsKK+WFpea5ryA+IG55dXV0b3VcIDsKK+W5veWigyA+IHl1dWt5b3VcIDsKK+WHuuWxlSA+IHNodXR0ZW5cIDsKK+iNkuaKgCA+IGFyYXdhemFcIDsKK+WFpea4ryA+IG55dXVrb3VcIDsKK+WFpea4oCA+IG55dXVreW9cIDsKK+iLm+eDiCA+IGthcmV0c3VcIDsKK+WFieeFpyA+IGtvdXNob3VcIDsKK+i/q+WusyA+IGhha3VnYWlcIDsKK+WFq+a0siA+IHlhc2hpbWFcIDsKK+i9n+ayiCA+IGdvdWNoaW5cIDsKK+ecjOW6gSA+IGtlbmNob3VcIDsKK+WHoeW6uCA+IGJvbicneW91XCA7CivnmYfnmZYgPiBrYW5wZWtpXCA7CivoibLntKAgPiBzaGlraXNvXCA7Civov5HlubQgPiBraW4nJ25lblwgOwor55u05oSfID4gY2hva2thblwgOwor55uG5pquID4gYm9ua3VyZVwgOwor6LmJ6LeMID4gc2F0ZXRzdVwgOwor5bm05aKXID4gdG9zaGltYVwgOwor6YGK5L6gID4geXV1a3lvdVwgOwor5YmN5YWGID4gemVuY2hvdVwgOwor55mH55eHID4ga2Fuc2hvdVwgOwor6L2i5q27ID4gcmVraXNoaVwgOwor6YGT5Li7ID4gZG91c2h1dVwgOwor5YeL5oK0ID4gY2hvdXN1aVwgOwor5YOn57GNID4gc291c2VraVwgOwor6YGT5LitID4gZG91Y2h1dVwgOwor5bGx6Zm9ID4gc2FuJyd5b3VcIDsKK+W3pealrSA+IGtvdWd5b3VcIDsKK+WxsemZtSA+IHNhbnJ5b3VcIDsKK+asoOS8uCA+IGtlbnNoaW5cIDsKK+mBiuS8kSA+IHl1dWt5dXVcIDsKK+eXmOiLlyA+IHRvdWJ5b3VcIDsKK+W5veWbmiA+IHl1dXNodXVcIDsKK+mAseWIiiA+IHNodXVrYW5cIDsKK+W6luWOqCA+IGhvdWNodXVcIDsKK+WAkumWoyA+IHRvdWtha3VcIDsKK+WIl+WbvSA+IHJla2tva3VcIDsKK+edo+WKsSA+IHRva3VyZWlcIDsKK+W3oealrSA+IGp1bmd5b3VcIDsKK+aomea6liA+IGh5b3VqdW5cIDsKK+iPiuWIpCA+IGtpa3ViYW5cIDsKK+eUo+mhjSA+IHNhbmdha3VcIDsKK+mAseWGhSA+IHNodXVuYWlcIDsKK+WCvuiBtCA+IGtlaWNob3VcIDsKK+mwu+WxiyA+IHVuYWdpeWFcIDsKK+W4r+W/gyA+IG9iaXNoaW5cIDsKK+WFpeawtCA+IG55dXVzdWlcIDsKK+WItuWLnSA+IHNlaXNob3VcIDsKK+WIu+WIuyA+IGtva2tva3VcIDsKK+WCmeiThCA+IGJpY2hpa3VcIDsKK+iIiOihjCA+IGtvdWd5b3VcIDsKK+mAmuWQjSA+IHRvb3JpbmFcIDsKK+i7jeexjSA+IGd1bnNla2lcIDsKK+iIueiItiA+IHNlbnBha3VcIDsKK+mAo+WLnSA+IHJlbnNob3VcIDsKK+mAmuWPsiA+IHRzdXVzaGlcIDsKK+ebtOW+jCA+IGNob2t1Z29cIDsKK+ebtOW+hCA+IGNob2trZWlcIDsKK+ebtOW+gCA+IGNob2t1b3VcIDsKK+S/rumkiiA+IHNodXV5b3VcIDsKK+WFh+a8oiA+IGt5b3VrYW5cIDsKK+eXheiPjCA+IGJ5b3VraW5cIDsKK+WDreensCA+IHNlbnNob3VcIDsKK+WHuuWllCA+IHNodXBwb25cIDsKK+i+m+aKsSA+IHNoaW5ib3VcIDsKK+alveiBliA+IGdha3VzZWlcIDsKK+WBpeiouiA+IGtlbnNoaW5cIDsKK+i7veeXhyA+IGtlaXNob3VcIDsKK+iIueiFuSA+IHNlbnB1a3VcIDsKK+eZvea0siA+IHNoaXJhc3VcIDsKK+WHoeWwjyA+IGJvbnNob3VcIDsKK+WJjeS7uyA+IHplbicnbmluXCA7Civlt6jmnKggPiBreW9ib2t1XCA7CivoiKzoi6UgPiBoYW4nJ255YVwgOwor5YK36ICFID4gc2hvdXNoYVwgOwor5YaG5puyID4gZW5reW9rdVwgOwor5bC+6aqoID4gYmlrb3RzdVwgOwor5YaF5pyNID4gbmFpZnVrdVwgOwor5bqD5ZGKID4ga291a29rdVwgOwor6Iqd55SfID4gc2hpYmFmdVwgOwor6YCa5YukID4gdHN1dWtpblwgOwor6Ieq6KqsID4gamlzZXRzdVwgOwor5YWF5rqiID4ganV1aXRzdVwgOwor55yL5a6iID4ga2Fua2FrdVwgOwor6Iy25omYID4gY2hhdGFrdVwgOwor55yf5aSPID4gbWFuYXRzdVwgOwor5Ye25aSJID4ga3lvdWhlblwgOwor6L665bmFID4gaGVucHVrdVwgOwor5bqX5YaFID4gdGVuJyduYWlcIDsKK+WIuuWCtyA+IHNoaXNob3VcIDsKK+W3neafsyA+IHNlbnJ5dXVcIDsKK+eZuuazqCA+IGhhdGNodXVcIDsKK+alreiFuSA+IGdvdWhhcmFcIDsKK+iJr+eoriA+IHJ5b3VzaHVcIDsKK+WFseajsiA+IGt5b3VzZWlcIDsKK+WAn+mHkSA+IHNoYWtraW5cIDsKK+WJiuS6lSA+IHNha3VzZWlcIDsKK+eVsOizqiA+IGlzaGl0c3VcIDsKK+W6j+WIlyA+IGpvcmV0c3VcIDsKK+mAn+WGmSA+IHNva3VzaGFcIDsKK+WAkumMryA+IHRvdXNha3VcIDsKK+W4neW+syA+IHRlaXRva3VcIDsKK+mAmuWIhiA+IHRzdXVidW5cIDsKK+i/veWWhCA+IHRzdWl6ZW5cIDsKK+WFvOaciSA+IGtlbicneXV1XCA7Civlh7bloLEgPiBreW91aG91XCA7CivmpJzoqo0gPiBrZW4nJ25pblwgOwor6I2S5be7ID4gYXJhbWFraVwgOwor55eF6IiOID4gYnlvdXNoYVwgOwor6Iie6Iy4ID4gbWFpdGFrZVwgOwor5qKf6aaWID4ga3lvdXNodVwgOwor6YCx5LukID4gc2h1dXJlaVwgOwor5YeG5beeID4ganVuc2h1dVwgOwor5YWx5qCTID4gdG9tb3NlblwgOwor5qSc6Ki8ID4ga2Vuc2hvdVwgOwor5qSc6Ki6ID4ga2Vuc2hpblwgOwor5bi45a6/ID4gam91eWFkb1wgOwor5L+h6aC8ID4gc2hpbnJhaVwgOwor5YWJ5rKiID4ga291dGFrdVwgOwor5bid5bufID4gdGVpYnlvdVwgOwor5Ye55ZywID4ga3Vib2NoaVwgOwor5Ye45Z2KID4gZGVrb2JvdVwgOwor6IWx6Z6YID4ga2Vuc2hvdVwgOwor6LuN56WoID4gZ3VucHlvdVwgOwor55ub5b6zID4gc2VpdG9rdVwgOwor55Sf6ZW3ID4gc2VpY2hvdVwgOwor5qWt6ICFID4gZ3lvdXNoYVwgOwor6LuN56WeID4gZ3Vuc2hpblwgOwor5YWl5qO6ID4gbnl1dWthblwgOwor6LmI6KWyID4gdG91c2h1dVwgOwor6YCy5LiKID4gc2hpbmpvdVwgOwor6Iif6ImHID4gc2h1dXRlaVwgOwor5bm95YudID4geXV1c2hvdVwgOwor5beo5pOYID4ga3lvaGFrdVwgOwor6Iif6IiqID4gc2h1dWtvdVwgOwor5qiq5qOSID4geW9rb2JvdVwgOwor5Yi25L2cID4gc2Vpc2FrdVwgOwor5bm05Y+OID4gbmVuc2h1dVwgOwor5YeL5bC9ID4gY2hvdWppblwgOwor55uX5b+DID4gdG91c2hpblwgOwor5YWl5qKFID4gbnl1dWJhaVwgOwor6IWT6aqoID4gaGlrb3RzdVwgOwor5YWx5pyJID4ga3lvdXl1dVwgOwor6bCk5a2QID4gYnVyaWtrb1wgOwor55u45a6iID4gYWlreWFrdVwgOwor55yf5ZugID4gc2hpbicnaW5cIDsKK+i/veWPtyA+IHRzdWlnb3VcIDsKK+mAo+S9nCA+IHJlbnNha3VcIDsKK+WFjuasoCA+IHRva2V0c3VcIDsKK+WFhuawkSA+IGNob3VtaW5cIDsKK+WIpeWEgCA+IGJldHN1Z2lcIDsKK+WFpeagoSA+IG55dXVrb3VcIDsKK+iJr+efpSA+IHJ5b3VjaGlcIDsKK+mAo+S8kSA+IHJlbmt5dXVcIDsKK+WIh+WRsyA+IGtpcmVhamlcIDsKK+mAoOS9nCA+IHpvdXNha3VcIDsKK+WFreabuCA+IHJva3VzaG9cIDsKK+edgOWJoyA+IGNoYWtrZW5cIDsKK+WIhuWRqCA+IGJ1bnNodXVcIDsKK+WFreabnCA+IHJva3V5b3VcIDsKK+WFq+aclCA+IGhhc3Nha3VcIDsKK+WIquS/riA+IHNhbnNodXVcIDsKK+WHhuWwhiA+IGp1bnNob3VcIDsKK+ecjOWigyA+IGtlbmt5b3VcIDsKK+iFlemmliA+IHVkZWt1YmlcIDsKK+ecvOWKmyA+IGdhbnJpa2lcIDsKK+iNkuWvpSA+IGtvdXJ5b3VcIDsKK+mAmuS+iyA+IHRzdXVyZWlcIDsKK+WyrOinkiA+IGtvdWtha3VcIDsKK+aomeamnCA+IGh5b3Vib3VcIDsKK+WFpeadpSA+IG55dXVyYWlcIDsKK+eVpeitnCA+IHJ5YWt1ZnVcIDsKK+i9ouaWrSA+IHJla2lkYW5cIDsKK+i7oueUqCA+IHRlbicneW91XCA7CivnmpDmnIggPiBzYXRzdWtpXCA7CivpgKPkuK0gPiByZW5jaHV1XCA7CivlhYPmrYwgPiBtb3RvdXRhXCA7CivoibLnmb0gPiBpcm9qaXJvXCA7Civlsqnop5IgPiBpd2FrYWRvXCA7CivpgJPkv6EgPiB0ZWlzaGluXCA7CivlupbkuIEgPiBob3VjaG91XCA7CivojLblupcgPiBjaGFtaXNlXCA7Civlh53loYogPiBneW91a2FpXCA7CivpgIblhYkgPiBneWFra291XCA7Civmop/pm4QgPiBreW91eXV1XCA7Civlh7rlk4EgPiBzaHVwcGluXCA7CivmorXpkJggPiBib25zaG91XCA7CivoiLnntJogPiBzZW5reXV1XCA7CivovrLlraYgPiBub3VnYWt1XCA7CivpgJrkurogPiB0c3V1amluXCA7CivnlaXoqp4gPiByeWFrdWdvXCA7Civlg63nlKggPiBzZW4nJ3lvdVwgOwor6YCa5LqkID4gdHN1dWtvdVwgOwor6LiK6LqNID4geW91eWFrdVwgOwor6Iy25bitID4gY2hhc2VraVwgOwor6L+95YiKID4gdHN1aWthblwgOwor55So6YePID4geW91cnlvdVwgOwor6Ieq6JmQID4gamlneWFrdVwgOwor6ay855WcID4ga2ljaGlrdVwgOwor6IWQ6aOfID4gZnVzaG9rdVwgOwor5bm05YaFID4gbmVuJyduYWlcIDsKK+WFrOaVtSA+IGtvdXRla2lcIDsKK+WCjeiBtCA+IGJvdWNob3VcIDsKK+W3puaKmCA+IHNhc2V0c3VcIDsKK+WFrOaVmSA+IGtvdWt5b3VcIDsKK+eZveahgyA+IGhha3V0b3VcIDsKK+iLpeaenSA+IHdha2FlZGFcIDsKK+WHuuWQkSA+IHNodWtrb3VcIDsKK+i/keWbvSA+IGtpbmdva3VcIDsKK+iIueexjSA+IHNlbnNla2lcIDsKK+WFg+aomSA+IGdlbnB5b3VcIDsKK+WHuuWPoyA+IGRlZ3VjaGlcIDsKK+WIh+WJiiA+IHNlc3Nha3VcIDsKK+eVpeinoyA+IHJ5YWtrYWlcIDsKK+WIgOWMoCA+IHRvdXNob3VcIDsKK+eZuuahiCA+IGhhdHN1YW5cIDsKK+eUo+mHjyA+IHNhbnJ5b3VcIDsKK+i7n+eQgyA+IG5hbmt5dXVcIDsKK+WIpeS6iyA+IGJldHN1amlcIDsKK+S/rumMrCA+IHNodXVyZW5cIDsKK+ebtOWljyA+IGppa2lzb3VcIDsKK+W4guW6gSA+IHNoaWNob3VcIDsKK+iIque2miA+IGtvdXpva3VcIDsKK+iJr+eUsCA+IHJ5b3VkZW5cIDsKK+i2s+mfsyA+IGFzaGlvdG9cIDsKK+WFiOajkiA+IHNha2lib3VcIDsKK+WIiOWFpSA+IGthcmlpcmVcIDsKK+eZveacqCA+IHNoaXJha2lcIDsKK+aomeacrCA+IGh5b3Vob25cIDsKK+eah+aXjyA+IGtvdXpva3VcIDsKK+WHuuWLpCA+IHNodWtraW5cIDsKK+eZveabuCA+IGhha3VzaG9cIDsKK+i+uuWigyA+IGhlbmt5b3VcIDsKK+mAgeS/oSA+IHNvdXNoaW5cIDsKK+i7jeeUqCA+IGd1bicneW91XCA7CivliJ3kubMgPiBzaG9ueXV1XCA7CivlubPkv6EgPiBoZWlzaGluXCA7Civnmb7mma8gPiBoeWFra2VpXCA7CivojZLlo4EgPiBhcmFrYWJlXCA7CivlhavmjpsgPiBoYWtrYWtlXCA7CivovKrmpa0gPiByaW5neW91XCA7CivojLblr64gPiBjaGFyeW91XCA7CivlubPkvZwgPiBoZWlzYWt1XCA7Civnm7Lln7cgPiBtb3VzaHV1XCA7CivnlJjphZIgPiBhbWF6YWtlXCA7CivlhYnmnZ8gPiBrb3Vzb2t1XCA7CivlhYPmoJMgPiBtb3Rvc2VuXCA7CivlhavmjLogPiBoYXRjaG91XCA7CivnnJ/liaMgPiBzaGlua2VuXCA7Civlh7nlh7ggPiBvdXRvdHN1XCA7CivovpvlrZAgPiBrYXJhc2hpXCA7Civlh7jlh7kgPiB0b3RzdW91XCA7Civnmb7mlrkgPiBoeWFwcG91XCA7CivlubPkvI8gPiBoZWlmdWt1XCA7CivlhoXlv4MgPiBuYWlzaGluXCA7CivlgbTog4wgPiBzb2t1aGFpXCA7CivnmYLms5UgPiByeW91aG91XCA7CivlhaXmjpsgPiBpcmVrYWt1XCA7Civov7fkv6EgPiBtZWlzaGluXCA7Civlh7bliIMgPiBreW91amluXCA7Civlh7rlhbggPiBzaHV0dGVuXCA7Civlh7rlhbUgPiBzaHVwcGVpXCA7Civnmb3mlpEgPiBoYWt1aGFuXCA7CivliIDlgrcgPiB0b3VzaG91XCA7CivpgIDkuqwgPiB0YWlreW91XCA7Civnmb3mlocgPiBoYWt1YnVuXCA7Civlh7jlhoYgPiB0b3RzdWVuXCA7CivlsbHos4ogPiBzYW56b2t1XCA7CivnnLzkuK0gPiBnYW5jaHV1XCA7CivlgbTogZ4gPiBzb2t1YnVuXCA7Civmpa3nqK4gPiBneW91c2h1XCA7CivlhYfmmrQgPiBreW91Ym91XCA7CivlhavmiYsgPiB5YXRzdWRlXCA7CivoibLniakgPiBpcm9tb25vXCA7CivlhYPmnJ0gPiBnZW5jaG91XCA7Civnl7Pnl4UgPiByaW5ieW91XCA7CivlhYPmnI0gPiBnZW5wdWt1XCA7Civkv67pgZMgPiBzaHV1ZG91XCA7Civlh7blhZogPiBreW91dG91XCA7CivlhYvmmI4gPiBrb2t1bWVpXCA7CivlubTkuIogPiB0b3NoaXVlXCA7Civkv6Hph5EgPiBzaGlua2luXCA7CivlhYnmmI4gPiBrb3VteW91XCA7CivlhbHmhJ8gPiBreW91a2FuXCA7Civlt6Xlu6AgPiBrb3VzaG91XCA7Civpq5jntaYgPiBrb3VreXV1XCA7Civkv53ph4ggPiBob3NoYWt1XCA7CivlhaXmiYsgPiBueXV1c2h1XCA7CivlhaXmiYAgPiBueXV1c2hvXCA7Civov7DkvZwgPiBqdXNzYWt1XCA7CivlhoXluZUgPiBuYWltYWt1XCA7CivmqZ/lr4YgPiBraW1pdHN1XCA7CivouI/opbIgPiB0b3VzaHV1XCA7Civpq5jntJogPiBrb3VreXV1XCA7Civnm7TllrYgPiBjaG9rdWVpXCA7Civnm7TllqkgPiBjaG9rdXl1XCA7CivlsI/pnaIgPiBzaG91bWVuXCA7CivlsL/phbggPiBueW91c2FuXCA7CivovpvlpLcgPiBrb2J1c2hpXCA7Civlha3mg4UgPiByb2t1am91XCA7Civpq5jnsrEgPiBrb3VyeWFuXCA7CivlsI/pm6MgPiBzaG91bmFuXCA7CivlsYDpg6ggPiBreW9rdWJ1XCA7CivluJ3lm70gPiB0ZWlrb2t1XCA7Civlh7rkvJogPiBzaHVra2FpXCA7CivlsI/pmoogPiBzaG91dGFpXCA7CivprLHnhLYgPiB1dHN1emVuXCA7CivlhbHlvbkgPiBreW91ZWtpXCA7Civlh7rku5UgPiBzaHVzc2hpXCA7Civlgrfnl5UgPiBzaG91a29uXCA7Civlho3lr6kgPiBzYWlzaGluXCA7CivnnIzlhoUgPiBrZW4nJ25haVwgOwor55Sz6KuLID4gc2hpbnNlaVwgOwor55m65oyvID4gaGFzc2hpblwgOwor5bC/6YGTID4gbnlvdWRvdVwgOwor5YG057eaID4gc29rdXNlblwgOwor5YWs5b6zID4ga291dG9rdVwgOwor5bCR6ZaiID4gc2hvdWthblwgOwor5bi45YudID4gam91c2hvdVwgOwor5bCR6ZaRID4gc2hvdWthblwgOwor5Yal5aKDID4gbWVpa3lvdVwgOwor55yf5Lq6ID4gc2hpbmppblwgOwor55m95omHID4gaGFrdXNlblwgOwor5bCP6ZaRID4gc2hvdWthblwgOwor5Ya35ZiyID4gcmVpY2hvdVwgOwor5YWo5b+DID4gemVuc2hpblwgOwor55eb55eSID4gdHN1dXlvdVwgOwor6aa06bm/ID4gdG9uYWthaVwgOwor55u05Y+CID4gamlraXNhblwgOwor5YWl5b+1ID4gbnl1dW5lblwgOwor6ISK6auEID4gc2VraXp1aVwgOwor55yf5LiLID4gbWFzaGl0YVwgOwor5YaG5a6JID4gZW4nJ3lhc3VcIDsKK+WwiumVtyA+IHNvbmNob3VcIDsKK+WFrOW6gSA+IGtvdWNob3VcIDsKK+i/lOS/oSA+IGhlbnNoaW5cIDsKK+WBveethiA+IGdpaGl0c3VcIDsKK+ebuOWJiyA+IHNvdWtva3VcIDsKK+W4q+WMoCA+IHNoaXNob3VcIDsKK+iGneihjCA+IHNoaWtrb3VcIDsKK+i7ouazqCA+IHRlbmNodXVcIDsKK+WFpeW7tyA+IG55dXV0ZWlcIDsKK+S/l+i8qSA+IHpva3VoYWlcIDsKK+iEmumfuyA+IGt5YWt1aW5cIDsKK+W3peWtpiA+IGtvdWdha3VcIDsKK+WHoeS/lyA+IGJvbnpva3VcIDsKK+WvkumukiA+IGthbmJ1bmFcIDsKK+alreeXhSA+IGdvdWJ5b3VcIDsKK+i+suWNmiA+IG5vdWhha3VcIDsKK+i+suWNlCA+IG5vdWt5b3VcIDsKK+WFh+aJiyA+IGt5b3VzaHVcIDsKK+WFqOW5hSA+IHplbnB1a3VcIDsKK+WFq+W3niA+IHlhc2hpbWFcIDsKK+WFqOW4rSA+IHplbnNla2lcIDsKK+mrmOemhCA+IGtvdXJva3VcIDsKK+i/keS9nCA+IGtpbnNha3VcIDsKK+iNt+S4uyA+IG5pbnVzaGlcIDsKK+iJr+a4ryA+IHJ5b3Vrb3VcIDsKK+WvuOmamSA+IHN1bmdla2lcIDsKK+WHoeS9nCA+IGJvbnNha3VcIDsKK+alreeVjCA+IGd5b3VrYWlcIDsKK+ebuOWFiyA+IHNvdWtva3VcIDsKK+ebruWJjSA+IG1va3V6ZW5cIDsKK+WyqeiCjCA+IGl3YWhhZGFcIDsKK+WHoeS6uiA+IGJvbicnbmluXCA7Civkv6HosqkgPiBzaGlucGFuXCA7Civkv5fotqMgPiB6b2t1c2h1XCA7Civkv67oq5YgPiBzaHV1cm9uXCA7Civlt6flppkgPiBrb3VteW91XCA7CivlhbXlraYgPiBoZWlnYWt1XCA7CivnlLDonrogPiB0YW5pc2hpXCA7Civnmbrlv4MgPiBob3NzaGluXCA7Civlh43lgrcgPiB0b3VzaG91XCA7CivnlKPopKUgPiBzYW5qb2t1XCA7CivlsI/pioMgPiBzaG91anV1XCA7Civoia/ms5UgPiByeW91aG91XCA7CivlhYfmgqogPiBreW91YWt1XCA7Civkvr/pgJogPiBiZW50c3V1XCA7CivlsI/piaIgPiBrb2JhY2hpXCA7Civoi6XlubQgPiBqYWt1bmVuXCA7CivlhYfmgo0gPiBreW91a2FuXCA7CivotaTpo68gPiBzZWtpaGFuXCA7CivluJ3liocgPiB0ZWlnZWtpXCA7CivlhbHlrZggPiBreW91em9uXCA7CivnnIHku6QgPiBzaG91cmVpXCA7Civoh6rnspsgPiBqaXNodWt1XCA7Civnmb7luqYgPiBoeWFrdWRvXCA7CivlhoXlo4EgPiBuYWloZWtpXCA7Civkv67oqIIgPiBzaHV1dGVpXCA7CivlhY3lvbkgPiBtZW4nJ2VraVwgOwor55a+55eFID4gc2hpcHBlaVwgOwor5YWD5oKqID4gZ2VuJydha3VcIDsKK+eWvOeXmyA+IHRvdXRzdXVcIDsKK+Wus+mzpSA+IGdhaWNob3VcIDsKK+WCjeeZvSA+IGJvdWhha3VcIDsKK+aknOe0oiA+IGtlbnNha3VcIDsKK+iJr+awkSA+IHJ5b3VtaW5cIDsKK+WFqOWvriA+IHplbnJ5b3VcIDsKK+WFpeWxhSA+IG55dXVreW9cIDsKK+eUsuiZqyA+IGtvdWNodXVcIDsKK+i6geeXhSA+IHNvdWJ5b3VcIDsKK+eZu+W6gSA+IHRvdWNob3VcIDsKK+WFqOWuuSA+IHplbicneW91XCA7CivlhaXlsIQgPiBueXV1c2hhXCA7CivnlLDomasgPiB0YW11c2hpXCA7Civnm7Lkv6EgPiBtb3VzaGluXCA7Civnmb3luIYgPiBzaGlyYWhvXCA7Civpq5jnm7QgPiBrb3VqaWtpXCA7Civohr/og7ggPiBub3VreW91XCA7CivlsIrph40gPiBzb25jaG91XCA7CivnlJ/ooYAgPiBuYW1hY2hpXCA7CivlhaXlr4cgPiBueXV1a291XCA7CivlhajlraYgPiB6ZW5nYWt1XCA7CivlhYflvL4gPiBreW91ZGFuXCA7CivlhaXlrpogPiBueXV1am91XCA7Civou6Lmpa0gPiB0ZW5neW91XCA7CivlsYjoqJcgPiBrdXR0YWt1XCA7Civnm7TkvJ0gPiBqaWtpZGVuXCA7CivojLbljJkgPiBjaGFzYWppXCA7Civoh6rnrYYgPiBqaWhpdHN1XCA7Civoi5fluoogPiBuYWVkb2tvXCA7CivotaTpnaIgPiBzZWtpbWVuXCA7CivovpvlirQgPiBzaGlucm91XCA7CivlhYTlvJ8gPiBreW91ZGFpXCA7Civkv4ros6IgPiBzaHVua2VuXCA7CivlhazlqLwgPiBrb3VzaG91XCA7CivlhoXlnKcgPiBuYWlhdHN1XCA7Civnl5vngrkgPiB0c3V1dGVuXCA7Civnm7TkuqQgPiBjaG9ra291XCA7CivlhYjlubQgPiBzZW4nJ25lblwgOwor55ax55a5ID4gaG91c2hpblwgOwor5L+X6KyhID4gem9rdXlvdVwgOwor6a6u5bCRID4gc2Vuc2hvdVwgOwor5bCP6YGTID4ga29taWNoaVwgOwor6Ieq56uLID4gamlyaXRzdVwgOwor5L+u6KGMID4gc2h1Z3lvdVwgOwor5YaF5Zu9ID4gbmFpa29rdVwgOwor5L+X6Ku6ID4gem9rdWdlblwgOwor6IaP6JasID4ga291eWFrdVwgOwor6Iez56aPID4gc2hpZnVrdVwgOwor5a+66YqtID4gdGVyYXNlblwgOwor6L6y5L2cID4gbm91c2FrdVwgOwor5L+X6KumID4gem9rdXRhaVwgOwor5bCP6YCVID4gc2hvdWtlaVwgOwor5L+K6LGqID4gc2h1bmdvdVwgOwor5L+X6KuWID4gem9rdXJvblwgOwor55eH54q2ID4gc2hvdWpvdVwgOwor5L+X6KuHID4gem9rdWRhblwgOwor5bCO6YCaID4gZG91dHN1dVwgOwor6a2a5pePID4gZ3lvem9rdVwgOwor5YWl5am/ID4gaXJpbXVrb1wgOwor6Ie856CyID4ga3l1dWhvdVwgOwor5YO75p2RID4gaGVraXNvblwgOwor6a6o5bGLID4gc3VzaGl5YVwgOwor5YGl56WlID4ga2Vuc2hvdVwgOwor5a+E6aOfID4ga2lzaG9rdVwgOwor55m95bGxID4gaGFrdXNhblwgOwor55eF54q2ID4gYnlvdWpvdVwgOwor5YWD5bm0ID4gZ2FuJyduZW5cIDsKK+Wwj+i+siA+IHNob3Vub3VcIDsKK+W4reS4iiA+IHNla2lqb3VcIDsKK+iNkuS6iyA+IGFyYWdvdG9cIDsKK+ebo+S/riA+IGthbnNodXVcIDsKK+WBuOeblyA+IGNodXV0b3VcIDsKK+WDu+abuCA+IGhla2lzaG9cIDsKK+eVmee9riA+IHJ5dXVjaGlcIDsKK+i+m+WFmiA+IGthcmF0b3VcIDsKK+agvOmXmCA+IGtha3V0b3VcIDsKK+eVque1hCA+IGJhbmd1bWlcIDsKK+S/l+iogCA+IHpva3VnZW5cIDsKK+mtguafsSA+IGtvbmNodXVcIDsKK+i8quW7kyA+IHJpbmtha3VcIDsKK+eZvuWumCA+IGh5YWtrYW5cIDsKK+S9nOmiqCA+IHNha3VmdXVcIDsKK+mmrOmjnyA+IGJhc2hva3VcIDsKK+iJpuapiyA+IGthbmt5b3VcIDsKK+aomeWumiA+IGh5b3V0ZWlcIDsKK+iGqOiEuSA+IGJvdWNob3VcIDsKK+WAluiHoyA+IGtvdXNoaW5cIDsKK+aoquWlqiA+IG91ZGF0c3VcIDsKK+eZveWtkCA+IHNoaXJva29cIDsKK+W3qOWVhiA+IGt5b3Nob3VcIDsKK+WGjeWRiiA+IHNhaWtva3VcIDsKK+mnhemVtyA+IGVraWNob3VcIDsKK+i7jealvSA+IGd1bmdha3VcIDsKK+WxseiKiyA+IHlhbWFpbW9cIDsKK+W4neS6rCA+IHRlaWt5b3VcIDsKK+i8u+WwhCA+IGZ1a3VzaGFcIDsKK+WFpeWjsCA+IG5pc3Nob3VcIDsKK+i7veaNtyA+IGtlaXNob3VcIDsKK+WvhumbsiA+IG1pdHN1dW5cIDsKK+WCvuazqCA+IGtlaWNodXVcIDsKK+WFpeWiqCA+IGlyZXp1bWlcIDsKK+WvhumbhiA+IG1pc3NodXVcIDsKK+iDuOmWkyA+IGt5b3VrYW5cIDsKK+iJsuafhCA+IGlyb2dhcmFcIDsKK+iDjOmrmCA+IHNlaXRha2FcIDsKK+Wwhui7jSA+IHNob3VndW5cIDsKK+amguazgSA+IGdhaWt5b3VcIDsKK+WFqOWfnyA+IHplbicnaWtpXCA7CivoirPlv4MgPiBob3VzaGluXCA7CivlhaXloLQgPiBueXV1am91XCA7Civnm5fkvZwgPiB0b3VzYWt1XCA7CivlhYnlraYgPiBrb3VnYWt1XCA7CivlsbHohbkgPiBzYW5wdWt1XCA7CivlhYjlraYgPiBzZW5nYWt1XCA7CivohJrpg6ggPiBreWFrdWJ1XCA7Civlhazlm70gPiBrb3Vrb2t1XCA7CivlhaXln44gPiBueXV1am91XCA7Civog7TplbcgPiBkb3VuYWdhXCA7CivmqYvlj7AgPiBreW91ZGFpXCA7Civlg6fmnI0gPiBzb3VmdWt1XCA7CivpppjpppYgPiBrYWt1c2h1XCA7Civlho3li50gPiBzYWlzaG91XCA7CivohbnolLUgPiBmdWt1em91XCA7Civoia/mnZAgPiByeW91emFpXCA7CivnmYfmgKcgPiBrYW5zaG91XCA7CivkvY7poY0gPiB0ZWlnYWt1XCA7CivprZrmi5MgPiBneW90YWt1XCA7CivovJTlvLwgPiBob2hpdHN1XCA7Civlhajlm70gPiB6ZW5nb2t1XCA7CivlhaXlnZEgPiBueXV1a291XCA7CivovpvkuqUgPiBzaGluZ2FpXCA7Civoia/mm7ggPiByeW91c2hvXCA7CivlrrDpoJggPiBzYWlyeW91XCA7Civnmb3lpKogPiBzaGlyYXRhXCA7Civnmb3lpJwgPiBieWFrdXlhXCA7CivoubTniKogPiBrZWR6dW1lXCA7Civlt6jljKAgPiBreW9zaG91XCA7CivotaTpjIYgPiBha2FzYWJpXCA7CivlhaXlm6MgPiBueXV1ZGFuXCA7Civlt6XljZogPiBrb3VoYWt1XCA7CivlhYTlq4EgPiBhbml5b21lXCA7Civlt67liKUgPiBzYWJldHN1XCA7CivlhqrkuZcgPiBiZWtpam91XCA7Civou43mnI0gPiBndW5wdWt1XCA7Civlt6XljKAgPiBrb3VzaG91XCA7CivnlLLog4QgPiBrYXRjaHV1XCA7Civoh6rnmbogPiBqaWhhdHN1XCA7CivnlaLnq58gPiBoaWtreW91XCA7CivmoKHplrIgPiBrb3VldHN1XCA7Civnlo7nlaUgPiBzb3J5YWt1XCA7CivlsqnnpIEgPiBnYW5zaG91XCA7CivmoKHplbcgPiBrb3VjaG91XCA7CivlgrfmrY4gPiBzaG91dGFuXCA7CivoibLmlocgPiBpcm9idW1pXCA7Civnmoflm70gPiBrb3Vrb2t1XCA7CivpppbpoJggPiBzaHVyeW91XCA7CivotaTph5EgPiBha2FnYW5lXCA7CivpqZXogoYgPiBreW91c2hpXCA7CivlrabpvaIgPiBnYWt1cmVpXCA7CivlhbHlkIwgPiBreW91ZG91XCA7CivlrrXpl4cgPiB5b2l5YW1pXCA7CivlsI/oq5YgPiBzaG91cm9uXCA7CivlhYflpIkgPiBreW91aGVuXCA7CivkvZPplbcgPiB0YWljaG91XCA7CivlgZznlZkgPiB0ZWlyeXV1XCA7CivluILkuK0gPiBzaGljaHV1XCA7Civlsqnnn7MgPiBnYW5zZWtpXCA7CivohbnoirggPiBoYXJhZ2VpXCA7CivlhazlkYogPiBrb3Vrb2t1XCA7Civnmb3lnLAgPiBzaGlyb2ppXCA7CivmoLjphbggPiBrYWt1c2FuXCA7Civlha3lkIggPiByaWt1Z291XCA7CivoiLnmrYwgPiBmdW5hdXRhXCA7Civlr77osaEgPiB0YWlzaG91XCA7CivpqLDokL0gPiB0b3VyYWt1XCA7CivmpJznlqsgPiBrZW4nJ2VraVwgOwor6IWQ6J2VID4gZnVzaG9rdVwgOwor5a6a6aGNID4gdGVpZ2FrdVwgOwor5YGP55mWID4gaGVucGVraVwgOwor5bCP6KiIID4gc2hvdWtlaVwgOwor5YaF5YK3ID4gbmFpc2hvdVwgOwor5YW45YmHID4gdGVuc29rdVwgOwor5YWF5aGeID4ganV1c29rdVwgOwor5qOS57ieID4gYm91amltYVwgOwor5YWt5Y2BID4gcm9rdWp1dVwgOwor6LWk6YGTID4gc2VraWRvdVwgOwor5L216YCyID4gaGVpc2hpblwgOwor55Sf6IKJID4gc2VpbmlrdVwgOwor5qSN55quID4gc2hva3VoaVwgOwor5a6f6ZyAID4gaml0c3VqdVwgOwor5YWN5ZuaID4gbWVuc2h1dVwgOwor6aeG6YCQID4ga3VjaGlrdVwgOwor6aeQ6LuKID4gY2h1dXNoYVwgOwor5qCq6YeRID4ga2FidWtpblwgOwor6Ieq546JID4gamlneW9rdVwgOwor5a6/6YqtID4geWFkb3NlblwgOwor6aaW6ZW3ID4gc2h1Y2hvdVwgOwor6IW56IOMID4gZnVrdWhhaVwgOwor5YWo5YudID4gemVuc2hvdVwgOwor5p+x6aCtID4gY2h1dXRvdVwgOwor55eb5qOSID4gdHN1dWJvdVwgOwor55eF5q27ID4gYnlvdXNoaVwgOwor5YKN5rWBID4gYm91cnl1dVwgOwor5bCE6KeSID4gc2hha2FrdVwgOwor5a6i6ZaTID4ga3lha3VtYVwgOwor5bel5L2cID4ga291c2FrdVwgOwor5YSA5byPID4gZ2lzaGlraVwgOwor6LuK5o6MID4gc2hhc2hvdVwgOwor55Sw57SzID4gZGVuc2hpblwgOwor5YKN5rOoID4gYm91Y2h1dVwgOwor5a++6KizID4gdGFpeWFrdVwgOwor5YW85L+uID4ga2Vuc2h1dVwgOwor6LWk6LuNID4gc2VraWd1blwgOwor6ISC6LqrID4gYWJ1cmFtaVwgOwor5bOh5rm+ID4ga3lvdXdhblwgOwor6LuN5ouhID4gZ3Vua2FrdVwgOwor55m+5ZGzID4gaHlha3VtaVwgOwor5a++6KeSID4gdGFpa2FrdVwgOwor5p+x6Z2iID4gY2h1dW1lblwgOwor5beo5LmzID4ga3lvbnl1dVwgOwor5YWs5YWxID4ga291a3lvdVwgOwor5YWx5YONID4ga3lvdWRvdVwgOwor55S7562GID4gZ2FoaXRzdVwgOwor5L6b6KanID4ga3lvdXJhblwgOwor5a+46KmVID4gc3VucHlvdVwgOwor5YWx5YKsID4ga3lvdXNhaVwgOwor5YaF5LitID4gdWNoaWp1dVwgOwor5a656YePID4geW91cnlvdVwgOwor6IWr6IS5ID4gc2h1Y2hvdVwgOwor5a+G6YCaID4gbWl0dHN1dVwgOwor6Iif5q2MID4gZnVuYXV0YVwgOwor5YC255m6ID4gZ3VoYXRzdVwgOwor5YW85Lu7ID4ga2VuJyduaW5cIDsKK+WFrOWDlSA+IGtvdWJva3VcIDsKK+WFpeWGpiA+IG55dXVrb3VcIDsKK+S9k+mHjyA+IHRhaXJ5b3VcIDsKK+WFrOWCtyA+IGtvdXNob3VcIDsKK+Wul+mWgCA+IHNodXVtb25cIDsKK+iHhueXhSA+IG9rdWJ5b3VcIDsKK+WFqOWEqiA+IHplbicneXV1XCA7Civou73lsJEgPiBrZWlzaG91XCA7CivlhaXlhZogPiBueXV1dG91XCA7CivkvpHop7QgPiB5dXVzaG91XCA7CivlgY/ni60gPiBoZW5reW91XCA7CivnlaXnlLsgPiByeWFrdWdhXCA7Civkv7jntaYgPiBob3VreXV1XCA7Civlrr/pgYsgPiBzaHVrdXVuXCA7CivoiLnmnb8gPiBmdW5haXRhXCA7Civkv4roi7EgPiBzaHVuJydlaVwgOwor6Iqz5aKoID4gaG91Ym9rdVwgOwor5YGP54uCID4gaGVua3lvdVwgOwor55m+5YyBID4gaHlha3VtZVwgOwor55Sf57W5ID4gc3V6dXNoaVwgOwor6Luf5byxID4gbmFuamFrdVwgOwor5LyR6aSoID4ga3l1dWthblwgOwor5a+G6Ly4ID4gbWl0c3V5dVwgOwor5YWa5YmHID4gdG91c29rdVwgOwor5L+u57mVID4gc2h1dXplblwgOwor5bCx6IiqID4gc2h1dWtvdVwgOwor5LyR6aSKID4ga3l1dXlvdVwgOwor5L6L6Ki8ID4gcmVpc2hvdVwgOwor5qa05by+ID4gcnl1dWRhblwgOwor5bGx56mNID4gc2Fuc2VraVwgOwor6Ii25p2lID4gaGFrdXJhaVwgOwor5bGx56icID4gc2FucnlvdVwgOwor6LWk6LKnID4gc2VraWhpblwgOwor5L+u57e0ID4gc2h1dXJlblwgOwor6Iux5YKRID4gZWlrZXRzdVwgOwor5qW15pqRID4gZ29rdXNob1wgOwor55eF5qOfID4gYnlvdXRvdVwgOwor6IKM6aqoID4ga2lrb3RzdVwgOwor6Imv5oCnID4gcnlvdXNlaVwgOwor6Laz6Iq4ID4gYXNoaWdlaVwgOwor6IW457eaID4gY2hvdXNlblwgOwor5YOn5b2iID4gc291Z3lvdVwgOwor6Lyq5ZSxID4gcmluc2hvdVwgOwor5YGJ54mpID4gZXJhbW9ub1wgOwor55m95YiDID4gaGFrdWppblwgOwor5YWs5LyRID4ga291a3l1dVwgOwor5L6u6JSRID4gYnViZXRzdVwgOwor6Iul5YWaID4gd2FrYXRvdVwgOwor55eF5qC5ID4gYnlvdWtvblwgOwor5Lya6ZuGID4ga2Fpc2h1dVwgOwor5bGR57O4ID4ga3V6dWl0b1wgOwor5qKf572qID4ga3lvdXphaVwgOwor6Iul5YOnID4gd2FrYXpvdVwgOwor55m95YW1ID4gaGFrdWhlaVwgOwor5YWI5YudID4gc2Vuc2hvdVwgOwor5L2O6YCfID4gdGVpc29rdVwgOwor5YWl5LyaID4gbnl1dWthaVwgOwor5bGR57GzID4ga3V6dW1haVwgOwor6Lu95aaZID4ga2VpbXlvdVwgOwor6Ieq5ruFID4gamltZXRzdVwgOwor5LyR6Zu7ID4ga3l1dWRlblwgOwor5bO25qC5ID4gc2hpbWFuZVwgOwor5a2m6aKoID4gZ2FrdWZ1dVwgOwor5YO15bGNID4ga3lvbnNoaVwgOwor5YWr5LiBID4gaGF0Y2hvdVwgOwor5YWI5Yi7ID4gc2Vua29rdVwgOwor6IKJ6aWFID4gbmlrdW1hblwgOwor5L216KqtID4gaGVpZG9rdVwgOwor6aas6LezID4gdW1hdG9iaVwgOwor6Lui5bGeID4gdGVuem9rdVwgOwor6LWk6KqgID4gc2VraXNlaVwgOwor6Imv5birID4gcnlvdXNoaVwgOwor5Lya6ZW3ID4ga2FpY2hvdVwgOwor5YWH5YiDID4ga3lvdWppblwgOwor5a6a6YePID4gdGVpcnlvdVwgOwor6Imv5belID4gcnlvdWtvdVwgOwor5qC86KiAID4ga2FrdWdlblwgOwor6aeB6KuWID4gYmFrdXJvblwgOwor5YWD5Ye2ID4gZ2Vua3lvdVwgOwor6IKJ6aGeID4gbmlrdXJ1aVwgOwor6Ie85q2vID4ga3l1dXNoaVwgOwor55a85pyoID4gaGlpcmFnaVwgOwor6Lui5a6FID4gdGVudGFrdVwgOwor5qCE6YGUID4gZWl0YXRzdVwgOwor6Lui5a2mID4gdGVuZ2FrdVwgOwor55m65L+hID4gaGFzc2hpblwgOwor5LyR6ZaRID4ga3l1dWthblwgOwor6Iie5puyID4gYnVreW9rdVwgOwor6Ieq5rS7ID4gamlrYXRzdVwgOwor5L+456aEID4gaG91cm9rdVwgOwor5L+456W/ID4gaG91cm9rdVwgOwor6Iul5Lq6ID4gd2Frb3Vkb1wgOwor5qW95omNID4gZ2FrdXNhaVwgOwor5a+G6K2wID4gbWl0c3VnaVwgOwor6IiI5qWtID4ga291Z3lvdVwgOwor5YWD5YWHID4gZ2Vua3lvdVwgOwor6aaZ6LuKID4ga3lvdXNoYVwgOwor5L+X57SvID4gem9rdXJ1aVwgOwor5a2m6ZqbID4gZ2FrdXNhaVwgOwor5YGc5rOKID4gdGVpaGFrdVwgOwor5qWK5p+zID4geW91cnl1dVwgOwor55m95Lq6ID4gaGFrdWppblwgOwor5L+h566hID4gc2hpbmthblwgOwor5bCP6IiFID4ga29qdXV0b1wgOwor6Ieq5rG6ID4gamlrZXRzdVwgOwor55m+5LqLID4gaHlha3VqaVwgOwor5bKp5ry/ID4gZ2Fuc2hvdVwgOwor55CG6auqID4gcmloYXRzdVwgOwor5a+G6KqeID4gbWl0c3Vnb1wgOwor5YWG5YCZID4gY2hvdWtvdVwgOwor6IO46KWfID4ga3lvdWtpblwgOwor6auY5pyoID4ga291Ym9rdVwgOwor5bC/566hID4gbnlvdWthblwgOwor6ayx5bGIID4gdWtrdXRzdVwgOwor6LuN5bGeID4gZ3Vuem9rdVwgOwor55eb5oakID4gdHN1dWZ1blwgOwor5bGx55WqID4geWFtYWJhblwgOwor5qW95oOzID4gZ2FrdXNvdVwgOwor6Ieq5q66ID4gamlzYXRzdVwgOwor5bCP6ISzID4gc2hvdW5vdVwgOwor5YSq5YudID4geXV1c2hvdVwgOwor6ISx6Ie8ID4gZGFra3l1dVwgOwor6aaW6LazID4gc2h1c29rdVwgOwor6ISx6IetID4gZGFzc2h1dVwgOwor6LuN5bCGID4gZ3Vuc2hvdVwgOwor5YK35oK0ID4gc2hvdXN1aVwgOwor5YGP5rWBID4gaGVucnl1dVwgOwor6ISz6IacID4gbm91bWFrdVwgOwor5a+S6KGMID4ga2FuZ3lvdVwgOwor5YWI5Lu7ID4gc2VuJyduaW5cIDsKK+Wwj+iDniA+IHNob3Vob3VcIDsKK+eXm+aEnyA+IHRzdXVrYW5cIDsKK+ePvumrmCA+IGdlbmRha2FcIDsKK+Wwj+iDhiA+IHNob3V0YW5cIDsKK+iHo+awkSA+IHNoaW5taW5cIDsKK+i7jeWuuSA+IGd1bicneW91XCA7CivprLzlqYYgPiBvbmliYWJhXCA7CivkvZzoqakgPiBzYWt1c2hpXCA7CivkvZzoqZ4gPiBzYWt1c2hpXCA7CivohLHohbggPiBkYXRjaG91XCA7CivlroXphY0gPiB0YWt1aGFpXCA7Civou43lraYgPiBndW5nYWt1XCA7CivmoKHoqLsgPiBrb3VjaHV1XCA7CivkvJHpjJggPiBreXV1c3VpXCA7CivnlLDnlZEgPiBkZW5wYXRhXCA7Civlgrflv7AgPiBzaG91c3VpXCA7CivlsJHogIUgPiBzaG91c2hhXCA7Civnl5vmgaggPiB0c3V1a29uXCA7Civoh7PmpbUgPiBzaGlnb2t1XCA7CivmpbXmgqogPiBnb2t1YWt1XCA7CivlronpgLggPiBhbicnaXRzdVwgOwor5L2T6Kq/ID4gdGFpY2hvdVwgOwor5YO75ZywID4gaGVraWNoaVwgOwor5YO75ZyoID4gaGVraXphaVwgOwor5a6a6LehID4gam91c2VraVwgOwor6auY5pWZID4ga291a3lvdVwgOwor5qWt5oWLID4gZ3lvdXRhaVwgOwor6Lyq5L2cID4gcmluc2FrdVwgOwor55eb5b+rID4gdHN1dWthaVwgOwor5bKp5rOiID4gaXdhbmFtaVwgOwor5bO75ouSID4gc2h1bmt5b1wgOwor5L2O6Kq/ID4gdGVpY2hvdVwgOwor6Imv5aa7ID4gcnlvdXNhaVwgOwor5Yi744CFID4ga29ra29rdVwgOwor6IeG5risID4gb2t1c29rdVwgOwor5L2c6KO9ID4gc2FrdXNlaVwgOwor55Sj55ebID4gc2FudHN1dVwgOwor6IG36ZqOID4gc2hva2thaVwgOwor6Imv5aW9ID4gcnlvdWtvdVwgOwor55Wd5rqdID4gdW5lbWl6b1wgOwor5qW15b6uID4ga3lva3ViaVwgOwor5p6c6aOfID4ga2FzaG9rdVwgOwor5qGR6IuXID4gc291YnlvdVwgOwor6Iac54q2ID4gbWFrdWpvdVwgOwor55SY55quID4gYW1ha2F3YVwgOwor6LWk6JWqID4gYWtha2FidVwgOwor5bGx54qsID4geWFtYWludVwgOwor5L+K56ulID4gc2h1bmRvdVwgOwor5qW95birID4gZ2FrdXNoaVwgOwor5qGR6ImyID4ga3V3YWlyb1wgOwor6IWV56ugID4gd2Fuc2hvdVwgOwor6aas6KGTID4gYmFqdXRzdVwgOwor55eF5oWLID4gYnlvdXRhaVwgOwor6IWV56uLID4gdWRldGF0ZVwgOwor5p+p6LuKID4ga3l1dXNoYVwgOwor6IW555mSID4gaGFyYWlzZVwgOwor6Iie5omHID4gbWFpb3VnaVwgOwor5YOF5bCRID4ga2luc2hvdVwgOwor5a+u6IiOID4gcnlvdXNoYVwgOwor5qW15bqmID4ga3lva3Vkb1wgOwor5YGV5qW9ID4ga2FpcmFrdVwgOwor55CD6Z2iID4ga3l1dW1lblwgOwor5bCP57eoID4gc2hvdWhlblwgOwor6Iqz5L+hID4gaG91c2hpblwgOwor55eF5oKjID4gYnlvdWthblwgOwor55S754S2ID4ga2FrdXplblwgOwor55CD6Zu7ID4ga3l1dWRlblwgOwor5a6i6KqeID4ga3lha3Vnb1wgOwor5p6V6aCtID4gY2hpbnRvdVwgOwor6Ii55bmFID4gc2VucHVrdVwgOwor5qW15bemID4ga3lva3VzYVwgOwor55Oi566qID4gaHlvdXRhblwgOwor6Iq45LqLID4gZ2VpZ290b1wgOwor5qSN5qi5ID4gc2hva3VqdVwgOwor5a6f6KmxID4gaml0c3V3YVwgOwor55a+5oKjID4gc2hpa2thblwgOwor6aqo5qC8ID4ga29ra2FrdVwgOwor5qGD6ImyID4gbW9tb2lyb1wgOwor5qSc5qChID4ga2VuZ3lvdVwgOwor5a6f6Ki8ID4gamlzc2hvdVwgOwor5LuK6aCDID4gaW1hZ29yb1wgOwor6IWw55ebID4geW91dHN1dVwgOwor5bCP57KSID4ga290c3VidVwgOwor5qWt5birID4gd2F6YXNoaVwgOwor6Iqx5LujID4gaGFuYWRhaVwgOwor5a6i6KazID4ga3lha2thblwgOwor5L+X55y8ID4gem9rdWdhblwgOwor5L2/6IejID4gc2hpc2hpblwgOwor5a+S6I+KID4ga2FuZ2lrdVwgOwor5LyR6LyJID4ga3l1dXNhaVwgOwor5bC755uuID4gc2hpcmltZVwgOwor5a6a6KmVID4gdGVpaHlvdVwgOwor5LyR6LuiID4ga3l1dXRlblwgOwor55eF5byKID4gYnlvdWhlaVwgOwor5YK35a6zID4gc2hvdWdhaVwgOwor5a6a6KizID4gdGVpeWFrdVwgOwor6LuN5Zu9ID4gZ3Vua29rdVwgOwor6a2U5YqbID4gbWFyeW9rdVwgOwor5qSc5p2fID4ga2Vuc29rdVwgOwor5bGF55WZID4ga3lvcnl1dVwgOwor6Lu95YK3ID4ga2Vpc2hvdVwgOwor6aSo6ZW3ID4ga2FuY2hvdVwgOwor5bKp5qOaID4gaXdhZGFuYVwgOwor5LuP6ZmAID4gYnV0c3VkYVwgOwor5a6z6JmrID4gZ2FpY2h1dVwgOwor5bCx55ygID4gc2h1dW1pblwgOwor6ISH6IO9ID4gd2FraW5vdVwgOwor5YSE5YWGID4gb2t1Y2hvdVwgOwor55eF5bejID4gYnlvdXNvdVwgOwor6LWk6IaaID4gYWthaGFkYVwgOwor6LOe6YeRID4gc2hvdWtpblwgOwor5bCP56ulID4ga293YXBwYVwgOwor5LuP6ZajID4gYnVra2FrdVwgOwor5L+Q55m6ID4gcmloYXRzdVwgOwor5LuP6ZaTID4gYnV0c3VtYVwgOwor6LWk6IW5ID4gYWthaGFyYVwgOwor6Lu95L+hID4ga2Vpc2hpblwgOwor6IWO55+zID4gamluc2VraVwgOwor5bO25bqBID4gdG91Y2hvdVwgOwor6Imv5ZOBID4gcnlvdWhpblwgOwor5L+X55SoID4gem9rdXlvdVwgOwor6IOD6KKLID4gaWJ1a3Vyb1wgOwor6Lu95L27ID4ga2VpY2hvdVwgOwor5bO75ba6ID4gc2h1bnJlaVwgOwor5bO75bauID4gc2h1bmtlblwgOwor5bm044CFID4gbmVuJyduZW5cIDsKK+WEkuS7jyA+IGp1YnV0c3VcIDsKK+mtheWKmyA+IG1pcnlva3VcIDsKK+mrmOW+syA+IGtvdXRva3VcIDsKK+iyuOmWkyA+IGthc2hpbWFcIDsKK+iDuOiHhiA+IGt5b3Vva3VcIDsKK+mtmuS/oSA+IGd5b3NoaW5cIDsKK+iFleeZvSA+IHdhbnBha3VcIDsKK+i1pOiCjCA+IGFrYWhhZGFcIDsKK+iDuOiFuiA+IGt5b3VzZW5cIDsKK+S6rOmiqCA+IGt5b3VmdXVcIDsKK+iDuOiFlCA+IGt5b3Vrb3VcIDsKK+alveWkqSA+IHJha3V0ZW5cIDsKK+iJr+WPiyA+IHJ5b3V5dXVcIDsKK+iEseepgCA+IGRha2tva3VcIDsKK+ePremVtyA+IGhhbmNob3VcIDsKK+S8neiqpiA+IGRlbnNob3VcIDsKK+WwiuensCA+IHNvbnNob3VcIDsKK+WBg+aciCA+IGVuZ2V0c3VcIDsKK+S/rueFiSA+IHNodXVyZW5cIDsKK+WvvuetliA+IHRhaXNha3VcIDsKK+Wwj+ekviA+IHNob3VzaGFcIDsKK+alveWjqyA+IGdha3VzaGlcIDsKK+WAn+asviA+IHNoYWtrYW5cIDsKK+alveWjhyA+IGdha3VkYW5cIDsKK+S+v+ebiiA+IGJlbicnZWtpXCA7CivkvJroqq0gPiBrYWlkb2t1XCA7Civmo7rmobYgPiBrYW4nJ29rZVwgOwor6LW357WQID4ga2lrZXRzdVwgOwor6Iiq5a6ZID4ga291Y2h1dVwgOwor5L2O6JC9ID4gdGVpcmFrdVwgOwor55eF5a6zID4gYnlvdWdhaVwgOwor5YGJ5pa5ID4gZXJhZ2F0YVwgOwor5qKf54ybID4ga3lvdW1vdVwgOwor55WM5qiZID4ga2FpaHlvdVwgOwor6LOD6YqtID4gY2hpbnNlblwgOwor5L2e6IejID4gbmVpc2hpblwgOwor5L2Z6ImyID4geW9zaG9rdVwgOwor6aOy6aOfID4gaW5zaG9rdVwgOwor5YOa5Y+LID4gcnlvdXl1dVwgOwor5LyR6KybID4ga3l1dWtvdVwgOwor6LOD6YqAID4gY2hpbmdpblwgOwor5a2m6LOHID4gZ2FrdXNoaVwgOwor55S65rCRID4gY2hvdW1pblwgOwor5YK+5Zu9ID4ga2Vpa29rdVwgOwor5Lqk6Z+/ID4ga291a3lvdVwgOwor6Imv5YmkID4gcnlvdXphaVwgOwor5L+C55WZID4ga2Vpcnl1dVwgOwor55S35rCXID4gb3Rva29naVwgOwor5bCP55+lID4gc2hvdWNoaVwgOwor5a++56ewID4gdGFpc2hvdVwgOwor6LOD6YeRID4gY2hpbmdpblwgOwor5qWT5bGeID4gZnV1em9rdVwgOwor6IOD6JasID4gaWd1c3VyaVwgOwor5LuZ6YO3ID4gc2Vua3lvdVwgOwor5qCX6ImyID4ga3VyaWlyb1wgOwor6LO86KqtID4ga291ZG9rdVwgOwor6LuK5YqbID4gc2hhcmlraVwgOwor5qW95ZujID4gZ2FrdWRhblwgOwor6Iel5omAID4gZnVzaGlkb1wgOwor5L2T6IetID4gdGFpc2h1dVwgOwor6aas6ISaID4gYmFreWFrdVwgOwor5L6N56uLID4gamlyaXRzdVwgOwor5a+456eSID4gc3VuYnlvdVwgOwor55Sy5q67ID4ga291a2FrdVwgOwor6LW3562GID4ga2loaXRzdVwgOwor6aeQ57GzID4gY2h1dWJlaVwgOwor5Lm+6a2aID4gaG9zaGl1b1wgOwor6Iez5oClID4gc2hpa3l1dVwgOwor6IKd6KaBID4ga2FuJyd5b3VcIDsKK+eUn+a2ryA+IHNob3VnYWlcIDsKK+S8muihhiA+IGthaXNodXVcIDsKK+ajruaelyA+IHNoaW5yaW5cIDsKK+i1pOe1hCA+IGFrYWd1bWlcIDsKK+i7ouS7uyA+IHRlbicnbmluXCA7CivmoLzntI0gPiBrYWt1bm91XCA7Civpq5jlsJogPiBrb3VzaG91XCA7CivlsI/nmaogPiBrb3NoYWt1XCA7CivotaTntJkgPiBha2FnYW1pXCA7CivpqZrmrY4gPiBreW91dGFuXCA7Civotbfnq4sgPiBraXJpdHN1XCA7CivlgrflmIYgPiBzaG91dGFuXCA7CivkvZzogIUgPiBzYWt1c2hhXCA7Civpo5/ppIwgPiBzaG9rdWppXCA7CivohbjmuoAgPiBjaG91bWFuXCA7Civku7LosrcgPiBuYWthZ2FpXCA7Civnl4XlpIkgPiBieW91aGVuXCA7Civlg6XlgJYgPiBneW91a291XCA7Civos6DosqwgPiBiYWlzZWtpXCA7Civlg6fkv5cgPiBzb3V6b2t1XCA7Civos57os5sgPiBzaG91c2FuXCA7CivlsIrnmocgPiBzb24nJ25vdVwgOwor546E6bqmID4gZ2VuYmFrdVwgOwor6ISI566hID4gbXlha2thblwgOwor5p6i6Lu4ID4gc3V1amlrdVwgOwor6Iie5aerID4gbWFpaGltZVwgOwor55eb5ZiGID4gdHN1dXRhblwgOwor5bCo54qsID4gbXVrdWludVwgOwor5qOf5qKBID4gdG91cnlvdVwgOwor5a626IG3ID4ga2FzaG9rdVwgOwor5qC557KSID4ga29ucnl1dVwgOwor5bGg5q66ID4gdG9zYXRzdVwgOwor6LOK6LuNID4gem9rdWd1blwgOwor6IW45rayID4gY2hvdWVraVwgOwor6IiO5a6FID4gc2hhdGFrdVwgOwor5a6457+wID4gc2hpbmthblwgOwor6Lqr5ZG9ID4gc2hpbm1laVwgOwor55ar5a2mID4gZWtpZ2FrdVwgOwor5bCP55S6ID4ga29tYWNoaVwgOwor5bCP55S3ID4ga29vdG9rb1wgOwor6IWw5rmvID4ga29zaGl5dVwgOwor5bCE55qEID4gc2hhdGVraVwgOwor5bCP55SoID4gc2hvdXlvdVwgOwor6ISz55eHID4gbm91c2hvdVwgOwor6ISz55eFID4gbm91YnlvdVwgOwor5bCP55SfID4gc2hvdXNlaVwgOwor6Ieq5b6LID4gamlyaXRzdVwgOwor5bGx5qSSID4gc2Fuc2hvdVwgOwor5L2z56+AID4ga2FzZXRzdVwgOwor5L+u5rOVID4gc2h1dWhvdVwgOwor5LuK6YCxID4ga29uc2h1dVwgOwor6IGW6YCxID4gc2Vpc2h1dVwgOwor5L2O57+8ID4gdGVpeW9rdVwgOwor6Imy5LqLID4gaXJvZ290b1wgOwor5p+/6ImyID4ga2FraWlyb1wgOwor55Kw56SBID4ga2Fuc2hvdVwgOwor55Sw5qW9ID4gZGVuZ2FrdVwgOwor5LuK6L+EID4gaW1hbWFkZVwgOwor5Lm+6aOvID4gaG9zaGlpaVwgOwor6Imv5Lq6ID4gcnlvdWppblwgOwor5a6/57iBID4gc2h1a3VlblwgOwor6Iej5b6TID4gc2hpbmp1dVwgOwor5YG05bCEID4gc29rdXNoYVwgOwor6IW55rC0ID4gZnVrdXN1aVwgOwor6Ieo5bqKID4gcmluc2hvdVwgOwor6LeL5riJID4gYmFzc2hvdVwgOwor5L6154qvID4gc2hpbnBhblwgOwor5a++55eHID4gdGFpc2hvdVwgOwor5Lmz6aaZID4gbnl1dWtvdVwgOwor5Luu6KqsID4ga2FzZXRzdVwgOwor5bCC55SoID4gc2VuJyd5b3VcIDsKK+eUuuadkSA+IGNob3Vzb25cIDsKK+WAkuacqCA+IHRvdWJva3VcIDsKK+WBj+W/gyA+IGhlbnNoaW5cIDsKK+iHqOW4rSA+IHJpbnNla2lcIDsKK+iznuipniA+IHNob3VzaGlcIDsKK+aetuiorSA+IGthc2V0c3VcIDsKK+S/ruatoyA+IHNodXVzZWlcIDsKK+acqOmtmiA+IG1va3VneW9cIDsKK+iBtOismyA+IGNob3Vrb3VcIDsKK+WCrOWRiiA+IHNhaWtva3VcIDsKK+mrmOWjsCA+IHRha2Fnb2VcIDsKK+S9teensCA+IGhlaXNob3VcIDsKK+S6pOmMryA+IGtvdXNha3VcIDsKK+amguWJhyA+IGdhaXNva3VcIDsKK+S7ruiorSA+IGthc2V0c3VcIDsKK+iAkOmchyA+IHRhaXNoaW5cIDsKK+aghOiBtyA+IGVpc2hva3VcIDsKK+S7j+i3oSA+IGJ1c3Nla2lcIDsKK+S+m+eUqCA+IGt5b3V5b3VcIDsKK+iyq+mAmiA+IGthbnRzdXVcIDsKK+iBlui5nyA+IHNlaXNla2lcIDsKK+WztuWbvSA+IHRvdWdva3VcIDsKK+WwiueOiyA+IHNvbicnbm91XCA7CivnlKPmpa0gPiBzYW5neW91XCA7CivohbDmsJcgPiBrb3NoaWtlXCA7Civou4rkuK0gPiBzaGFjaHV1XCA7Civku7DoppYgPiBneW91c2hpXCA7CivlgrflibUgPiBzaG91c291XCA7Civou4rkuKEgPiBzaGFyeW91XCA7Civpo5/plpMgPiBzaG9ra2FuXCA7Civku67opqogPiBrYXJpb3lhXCA7CivogrLoi5cgPiBpa3VieW91XCA7Civlrpjog70gPiBrYW4nJ25vdVwgOwor6LOD6LK4ID4gY2hpbnRhaVwgOwor5bKh5oOaID4gb2thYm9yZVwgOwor6IGW6LehID4gc2Vpc2VraVwgOwor5p6d6LGGID4gZWRhbWFtZVwgOwor5p2R6ZW3ID4gc29uY2hvdVwgOwor6IG06KixID4gY2hvdWt5b1wgOwor5pyd6a6uID4gY2hvdXNlblwgOwor55Sf5qWtID4gbmFyaXdhaVwgOwor5Luj6KqtID4gZGFpZG9rdVwgOwor54++6LGhID4gZ2Vuc2hvdVwgOwor5Lmz6aCtID4gbnl1dXRvdVwgOwor5bCP54mHID4gc2hvdWhlblwgOwor5a6f57+SID4gamlzc2h1dVwgOwor5Luy6KOBID4gY2h1dXNhaVwgOwor5bCP54iqID4ga29kenVtZVwgOwor55aO5a+GID4gc29taXRzdVwgOwor6IG06KejID4gY2hvdWthaVwgOwor6LKn6L6yID4gaGluJydub3VcIDsKK+S7o+iouiA+IGRhaXNoaW5cIDsKK+iBtOimliA+IGNob3VzaGlcIDsKK+iFuuanmCA+IHNlbicneW91XCA7CivlsZ7moLwgPiB6b2trYWt1XCA7CivlgrflhbUgPiBzaG91aGVpXCA7Civmpb3lhbggPiBnYWt1dGVuXCA7CivnlLvmlbAgPiBrYWt1c3V1XCA7CivkvY7ntJogPiB0ZWlreXV1XCA7Civohrrmh7IgPiB5b3VjaG91XCA7CivlgI3ml6cgPiBiYWlreXV1XCA7Civpq5jlnKcgPiBrb3VhdHN1XCA7Civogp3okYkgPiBrYW4nJ3lvdVwgOwor55S65pS/ID4gY2hvdXNlaVwgOwor5L+u5qWtID4gc2h1Z3lvdVwgOwor5qW15YiRID4ga3lva2tlaVwgOwor5bKp5bqKID4gZ2Fuc2hvdVwgOwor5a+u55SfID4gcnlvdXNlaVwgOwor55eF5ZCNID4gYnlvdW1laVwgOwor5p2x6YCyID4gdG91c2hpblwgOwor5qCh56ugID4ga291c2hvdVwgOwor5qK25qOSID4ga2FqaWJvdVwgOwor5qW15YagID4ga3lva2thblwgOwor5qW15YaFID4gZ29rdW5haVwgOwor55eF5Y+LID4gYnlvdXl1dVwgOwor6aqw5a2QID4gc2Fpa29yb1wgOwor5bKh5byVID4gb2thaGlraVwgOwor5YK05YOCID4gc2VtdXNoaVwgOwor5YGc5a2mID4gdGVpZ2FrdVwgOwor5pyx6Z6YID4gc2h1emF5YVwgOwor5a6f57i+ID4gamlzc2VraVwgOwor55eF5Y6fID4gYnlvdWdlblwgOwor5qW15YWJID4ga3lva2tvdVwgOwor5Lqo6YCaID4ga291dHN1dVwgOwor5pys6aCYID4gaG9ucnlvdVwgOwor5Lq66LehID4gaGl0b2F0b1wgOwor5LuY6KitID4gZnVzZXRzdVwgOwor6aaW57SaID4gc2h1a3l1dVwgOwor5L6b54mpID4ga3Vtb3RzdVwgOwor5bO75Y6zID4gc2h1bmdlblwgOwor6LGh6ZmQID4gc2hvdWdlblwgOwor6Lqr5L2TID4gc2hpbnRhaVwgOwor6Iez5aaZID4gc2hpbXlvdVwgOwor55SY5qCXID4gYW1hZ3VyaVwgOwor5LuV6KizID4gc2hpd2FrZVwgOwor6IiI5Zu9ID4ga291a29rdVwgOwor5Lqk6YCaID4ga291dHN1dVwgOwor6LqN5YuVID4geWFrdWRvdVwgOwor5Luj6KGoID4gZGFpaHlvdVwgOwor5Lqi6YCyID4ga291c2hpblwgOwor55eF5YuiID4gYnlvdXNlaVwgOwor5qOy5oGvID4gc2Vpc29rdVwgOwor6IOM57SEID4gaGFpeWFrdVwgOwor5a6556mNID4geW91c2VraVwgOwor5LuP6KqeID4gYnV0c3Vnb1wgOwor6IWw5qSOID4geW91dHN1aVwgOwor6Lqr5LujID4gc2hpbmRhaVwgOwor546J6Z+zID4gZ3lva3VvblwgOwor5a+T55uuID4gZ3V1bW9rdVwgOwor5p2l6YCxID4gcmFpc2h1dVwgOwor6Ii55YG0ID4gc2Vuc29rdVwgOwor5pys6ZyHID4gaG9uc2hpblwgOwor5L2T56mNID4gdGFpc2VraVwgOwor5pyo6Z20ID4ga2lndXRzdVwgOwor6aaZ566xID4ga291YmFrb1wgOwor5LyR6IiqID4ga3l1dWtvdVwgOwor5pyd6aKoID4gYXNha2F6ZVwgOwor5a++54WnID4gdGFpc2hvdVwgOwor6Ii35YG0ID4gZ2Vuc29rdVwgOwor5qC555ikID4ga29ucnl1dVwgOwor5bKp5bGxID4gaXdheWFtYVwgOwor5qW95Lq6ID4gZ2FrdWppblwgOwor6LGG6aGeID4gbWFtZXJ1aVwgOwor5a6Y57WmID4ga2Fua3l1dVwgOwor546J6ZyyID4gZ3lva3Vyb1wgOwor6Lqr5LiKID4gc2hpbmpvdVwgOwor6Ii55L6/ID4gZnVuYWJpblwgOwor5YKs5L+DID4gc2Fpc29rdVwgOwor55Sf5pawID4gc2Vpc2hpblwgOwor6ISz5ry/ID4gbm91c2hvdVwgOwor6IS55rqAID4gY2hvdW1hblwgOwor6LaF54S2ID4gY2hvdXplblwgOwor5Lyd57+SID4gZGVuc2h1dVwgOwor55WZ5bm0ID4gcnl1dW5lblwgOwor6LSF6IKJID4gemVpbmlrdVwgOwor6auY5Y+wID4gdGFrYWRhaVwgOwor5bKp5a6kID4gaXdhbXVyb1wgOwor5L+15pWwID4gaHlvdXN1dVwgOwor5pyU6aKoID4gc2FrdWZ1dVwgOwor5a2m6Iq4ID4gZ2FrdWdlaVwgOwor6aaW56ugID4gc2h1c2hvdVwgOwor55S35omLID4gb3Rva29kZVwgOwor5qKF5q+SID4gYmFpZG9rdVwgOwor5qSN5a2XID4gc2hva3VqaVwgOwor5pyd6Z2EID4gYXNhbW95YVwgOwor5bGI5pyNID4ga3VwcHVrdVwgOwor5pyd6ZynID4gYXNhZ2lyaVwgOwor5L+h5p2hID4gc2hpbmpvdVwgOwor57+w6ZW3ID4ga2FuY2hvdVwgOwor6IKM6ImyID4gaGFkYWlyb1wgOwor5a2m6IiOID4gZ2FrdXNoYVwgOwor5L+h5pybID4gc2hpbmJvdVwgOwor5L+u5pW0ID4gc2h1dXNlaVwgOwor5L+h5pu4ID4gc2hpbnNob1wgOwor5qW15LiKID4gZ29rdWpvdVwgOwor55eH5YCZID4gc2hvdWtvdVwgOwor5LyR6ICVID4ga3l1dWtvdVwgOwor6Ii55LitID4gc2VuY2h1dVwgOwor5Ly4562LID4gc2hpbmtpblwgOwor6IKJ6ImyID4gbmlrdWlyb1wgOwor5L+u5pS5ID4gc2h1dWthaVwgOwor5bK45aOBID4gZ2FucGVraVwgOwor5a6M57SNID4ga2FuJydub3VcIDsKK+S6uuiovCA+IG5pbnNob3VcIDsKK+S5vumFqiA+IGthbnJha3VcIDsKK+eXh+S+iyA+IHNob3VyZWlcIDsKK+eVpeWtlyA+IHJ5YWt1amlcIDsKK+iGqOW8tSA+IGJvdWNob3VcIDsKK+Wxi+aVtyA+IHlhc2hpa2lcIDsKK+S/ruaSsCA+IHNodXVzZW5cIDsKK+S8j+e9qiA+IGZ1a3V6YWlcIDsKK+WvhueUuyA+IG1pdHN1Z2FcIDsKK+eXheS9kyA+IGJ5b3V0YWlcIDsKK+iAg+mHjyA+IGtvdXJ5b3VcIDsKK+mkoeicnCA+IGFubWl0c3VcIDsKK+WumOeqryA+IGthbicneW91XCA7Civku5TomasgPiBzaGljaHV1XCA7CivogL3oqq0gPiB0YW5kb2t1XCA7CivlsI/msLQgPiBzaG91c3VpXCA7CivogonohasgPiBuaWt1c2h1XCA7Civkv5fmm7ggPiB6b2t1c2hvXCA7CivogIHphpwgPiByb3VzaHV1XCA7CivpqZXmhaIgPiBreW91bWFuXCA7CivlgJTlvLcgPiBrdWtreW91XCA7Civnl4XkurogPiBieW91bmluXCA7CivlgY/ln7cgPiBoZW5zaHV1XCA7Civkv47mnb8gPiBtYW5haXRhXCA7CivkubPphbggPiBueXV1c2FuXCA7CivlrabogIUgPiBnYWt1c2hhXCA7CivlrrDnm7ggPiBzYWlzaG91XCA7CivkuLvpoJggPiBzaHVyeW91XCA7Civlsqnlo4EgPiBnYW5wZWtpXCA7Civkva/ni4IgPiB5b3VreW91XCA7CivkuLjpoZQgPiBtYXJ1Z2FvXCA7Civmm7PppqwgPiBoaWtpdW1hXCA7Civlr77mtYEgPiB0YWlyeXV1XCA7CivpoZTpu5IgPiBnYW5ndXJvXCA7CivkvI/nuKsgPiBmdXNlbnVpXCA7Civmm7LppqwgPiBreW9rdWJhXCA7CivotaTnh5AgPiBzZWtpcmluXCA7CivlgpHkvZwgPiBrZXNzYWt1XCA7CivnkZ7npaUgPiB6dWlzaG91XCA7CivpqZXmgaMgPiBreW91c2hpXCA7CivkvI/nt5ogPiBmdWt1c2VuXCA7CivlgoDlhKEgPiBrdWd1dHN1XCA7Civnj43oq4cgPiBjaGluZGFuXCA7Civkv5fmlocgPiB6b2t1YnVuXCA7CivkuqToqq0gPiBrb3Vkb2t1XCA7CivlgJLluZUgPiB0b3ViYWt1XCA7CivlrrbnlZwgPiBrYWNoaWt1XCA7CivkuK3po68gPiBjaHV1aGFuXCA7CivnkIPoj4wgPiBreXV1a2luXCA7Civpppbnm7ggPiBzaHVzaG91XCA7CivkuK3poqggPiBjaHV1YnV1XCA7Civpoqjpjq4gPiBmdXVjaGluXCA7CivlgJ/lsYsgPiBzaGFrdXlhXCA7Civls7bkuK0gPiB0b3VjaHV1XCA7Civlrp3nn7MgPiBob3VzZWtpXCA7Civog4bnn7MgPiB0YW5zZWtpXCA7CivlsbHluKsgPiB5YW1hc2hpXCA7Civpo5/osrsgPiBzaG9rdWhpXCA7CivkuqTop5IgPiBrb3VrYWt1XCA7CivmnKjph5EgPiBtb2t1a2luXCA7Civlrprnn7MgPiBqb3VzZWtpXCA7CivlsZ7mgKcgPiB6b2t1c2VpXCA7CivohLPmqYsgPiBub3VreW91XCA7CivkuK3poIUgPiBjaHV1a291XCA7CivmnaXoqLogPiByYWlzaGluXCA7CivnkIPojI4gPiBreXV1a2VpXCA7CivlsbHltr0gPiBzYW5nYWt1XCA7Civogqnnq6AgPiBrZW5zaG91XCA7CivnlJ/mga8gPiBzZWlzb2t1XCA7Civkvr/mnI0gPiBiZW5wdWt1XCA7CivkuqHopqogPiBib3VzaGluXCA7CivlgaXli50gPiBrZW5zaG91XCA7Civku5XojYkgPiBzaGlndXNhXCA7CivkuZ3ph40gPiBrb2tvbm9lXCA7Civkv4rmlY8gPiBzaHVuYmluXCA7CivmnaXopbIgPiByYWlzaHV1XCA7CivkuLvplbcgPiBzaHVjaG91XCA7CivouIrlrZcgPiBvZG9yaWppXCA7CivlsbHls6EgPiB5YW1ha2FpXCA7CivotaTmva4gPiBha2FzaGlvXCA7CivmnIDplbcgPiBzYWljaG91XCA7CivlrabntJogPiBnYWtreXV1XCA7CivogbTogZ4gPiBjaG91bW9uXCA7CivlsbHlsrMgPiBzYW5nYWt1XCA7CivnlJ/lvpcgPiBzZWl0b2t1XCA7CivnlaXlm7MgPiByeWFrdXp1XCA7CivkuKHpoK0gPiByeW91dG91XCA7CivlsJrmm7QgPiBuYW9zYXJhXCA7CivlsY/mga8gPiBoZWlzb2t1XCA7CivkuK3pmoogPiBjaHV1dGFpXCA7CivmnKjpgKAgPiBtb2t1em91XCA7CivkvJ3npaggPiBkZW5weW91XCA7CivmnJ3phZIgPiBhc2F6YWtlXCA7CivlrrnniakgPiBpcmVtb25vXCA7CivnlLvlrpogPiBrYWt1dGVpXCA7Civlr4LnhLYgPiBzZWtpemVuXCA7CivnlJjlv4MgPiBrYW5zaGluXCA7CivlsILmpa0gPiBzZW5neW91XCA7Civot6HlvaIgPiBhdG9rYXRhXCA7CivlgbbkvZwgPiBndXVzYWt1XCA7Civmm7nplbcgPiBzb3VjaG91XCA7CivlsI/mn4QgPiBrb2R6dWthXCA7CivlrZ3ntYwgPiBrb3VreW91XCA7CivogbTnvaogPiBjaG91emFpXCA7CivkvZnnhrEgPiB5b25ldHN1XCA7CivlsbHlrrkgPiBzYW4nJ3lvdVwgOwor5Lih6Z2iID4gcnlvdW1lblwgOwor5L+h5oSbID4gc2hpbicnYWlcIDsKK+S/l+aJjSA+IHpva3VzYWlcIDsKK+WtmOe2miA+IHNvbnpva3VcIDsKK+acm+mDtyA+IGJvdWt5b3VcIDsKK+eMm+mzpSA+IG1vdWNob3VcIDsKK+WuneeUnyA+IGhvdXNob3VcIDsKK+e+jumrqiA+IGJpaGF0c3VcIDsKK+WwmuaXqSA+IHNob3Vzb3VcIDsKK+S4remWkyA+IGNodXVrYW5cIDsKK+S4gOmrqiA+IGlwcGF0c3VcIDsKK+S7sue2mSA+IGNodXVrZWlcIDsKK+WwhuagoSA+IHNob3Vrb3VcIDsKK+WuieedgCA+IGFuY2hha3VcIDsKK+S4oembhCA+IHJ5b3V5dXVcIDsKK+Wto+evgCA+IGtpc2V0c3VcIDsKK+S6ieionyA+IHNvdXNob3VcIDsKK+S6jOimqiA+IGZ1dGFveWFcIDsKK+ixmui2syA+IHRvbnNva3VcIDsKK+WumOeUqCA+IGthbicneW91XCA7CivkvZnng4ggPiB5b3JldHN1XCA7Civmnb7okYkgPiBtYXRzdWJhXCA7Civlronnm7QgPiBhbmNob2t1XCA7CivpoqjpgJ8gPiBmdXVzb2t1XCA7CivpoY7pq60gPiBhZ29oaWdlXCA7Civnv7zos5sgPiB5b2t1c2FuXCA7CivlsZ7ls7YgPiB6b2t1dG91XCA7Civogrrnl4UgPiBoYWlieW91XCA7CivlsI/mmbogPiBzaG91Y2hpXCA7Civlrp/nkIYgPiBqaXRzdXJpXCA7CivlsI/mma8gPiBzaG91a2VpXCA7Civlrabnq6UgPiBnYWt1ZG91XCA7Civmo4vlrqIgPiBraWt5YWt1XCA7CivmnKvot68gPiBtYXRzdXJvXCA7CivkvrXmlLsgPiBzaGlua291XCA7CivlsIbmnaUgPiBzaG91cmFpXCA7Civkuobop6MgPiByeW91a2FpXCA7CivnlZHlnLAgPiBoYXRhY2hpXCA7Civkv6Hlv4MgPiBzaGluamluXCA7Civlr77moLwgPiB0YWlrYWt1XCA7CivlsYjlvLcgPiBrdWtreW91XCA7CivlrabnqpMgPiBnYWt1c291XCA7Civmop/mgqogPiBreW91YWt1XCA7CivnlLflqLwgPiBkYW5zaG91XCA7CivlraTnq4sgPiBrb3JpdHN1XCA7CivohbnluK8gPiBmdWt1dGFpXCA7CivlrabnqbYgPiBnYWtreXV1XCA7Civkv5fmg4UgPiB6b2t1am91XCA7CivkuoboposgPiByeW91a2VuXCA7CivkuLjpi7wgPiBtYXJ1a291XCA7Civkv4rmiY0gPiBzaHVuc2FpXCA7Civkv5fmgqogPiB6b2t1YWt1XCA7CivogbfntYQgPiBzaG9rdXNvXCA7Civlr5LmtYEgPiBrYW5yeXV1XCA7CivnvqTpm4YgPiBndW5zaHV1XCA7CivnvqTpm4QgPiBndW4nJ3l1dVwgOwor5bGx5aelID4geWFtYXViYVwgOwor5LiK6aGOID4gam91Z2FrdVwgOwor5a+d5q6/ID4gc2hpbmRlblwgOwor5bCR5pWwID4gc2hvdXN1dVwgOwor55S35aa+ID4gZGFuc2hvdVwgOwor5bCP5paOID4gc2hvdXNhaVwgOwor6ISC5rCXID4gYWJ1cmFrZVwgOwor5bCC5pyJID4gc2VuJyd5dXVcIDsKK+WwveW/oCA+IGppbmNodXVcIDsKK+Wwj+aVsCA+IHNob3VzdXVcIDsKK+adoeiZqyA+IGpvdWNodXVcIDsKK+eVpeWPmSA+IHJ5YWt1am9cIDsKK+e+jumjnyA+IGJpc2hva3VcIDsKK+WxseWlpSA+IHlhbWFva3VcIDsKK+ePjeiUtSA+IGNoaW56b3VcIDsKK+WwiuaXjyA+IHNvbnpva3VcIDsKK+S/l+W/tSA+IHpva3VuZW5cIDsKK+agvOautSA+IGtha3VkYW5cIDsKK+S4gOmjnyA+IGlzc2hva3VcIDsKK+WwhuaYnyA+IHNob3VzZWlcIDsKK+iBr+e1oSA+IHJlbnJha3VcIDsKK+WtpuelrSA+IGdha3VzYWlcIDsKK+eNhOmWgCA+IGdva3Vtb25cIDsKK+S/g+aIkCA+IHNva3VzZWlcIDsKK+iAg+iovCA+IGtvdXNob3VcIDsKK+WujOeSpyA+IGthbnBla2lcIDsKK+eUn+WusyA+IHNob3VnYWlcIDsKK+S5seiqvyA+IHJhbmNob3VcIDsKK+S6uuiHoyA+IGppbnNoaW5cIDsKK+S4gOmhniA+IGljaGlydWlcIDsKK+S5seiqrSA+IHJhbmRva3VcIDsKK+S6gOijgiA+IGtpcmV0c3VcIDsKK+iDuOawtCA+IGt5b3VzdWlcIDsKK+aeoOe3miA+IHdha3VzZW5cIDsKK+S8keecoCA+IGt5dXVtaW5cIDsKK+iHqOS8kSA+IHJpbmt5dXVcIDsKK+S7hOiBniA+IHNva3VidW5cIDsKK+S9jua9riA+IHRlaWNob3VcIDsKK+S8j+ebriA+IGZ1c2hpbWVcIDsKK+S4h+mboyA+IGJhbicnbmFuXCA7CivpqZXlpaIgPiBreW91c2hhXCA7CivlsY7lsL8gPiBzaGlueW91XCA7CivkuIrpmbggPiBqb3VyaWt1XCA7CivlsLrluqYgPiBzaGFrdWRvXCA7Civos6Tnp7AgPiBzZW5zaG91XCA7CivkuIfpmpwgPiBiYW5zaG91XCA7CivmnIDpgakgPiBzYWl0ZWtpXCA7CivlsLHlvbkgPiBzaHV1ZWtpXCA7CivkuIDpnaIgPiBpY2hpbWVuXCA7Civlr77mlbUgPiB0YWl0ZWtpXCA7CivmnJ3osqIgPiBjaG91a291XCA7Civku4/nuIEgPiBidXRzdWVuXCA7Civku5XntYQgPiBzaGlrdW1pXCA7CivmoZDmnZAgPiBraXJpemFpXCA7CivlsITmkoMgPiBzaGFnZWtpXCA7CivmoKHms6ggPiBrb3VjaHV1XCA7CivkuIDpm6ggPiBoaXRvYW1lXCA7Civmn7HnirYgPiBjaHV1am91XCA7CivkvZzms4EgPiBzYWtreW91XCA7CivkuIDpm6MgPiBpY2hpbmFuXCA7CivlsbHlnLAgPiB5YW1hY2hpXCA7Civkv4rlvaYgPiBzaHVuZ2VuXCA7Civog7TmrLIgPiBkb3V5b2t1XCA7CivpoY3pnaIgPiBnYWt1bWVuXCA7CivkuIrplbcgPiBqb3VjaG91XCA7Civnj43oirggPiBjaGluZ2VpXCA7Civmo67ljrMgPiBzaGluZ2VuXCA7CivnlLflm5ogPiBkYW5zaHV1XCA7Civmoq/lrZAgPiBoYXNoaWdvXCA7CivmnpXntbUgPiBtYWt1cmFlXCA7CivnlarlgpggPiBiYW5nYXNhXCA7CivkuIDpmaMgPiBpY2hpamluXCA7Civku4/ntYwgPiBidWtreW91XCA7CivpoKzpq60gPiBob29oaWdlXCA7CivmnKroqK0gPiBtaXNldHN1XCA7CivnlaXlhIAgPiByeWFrdWdpXCA7Civpp7/miY0gPiBzaHVuc2FpXCA7Civog73mpb0gPiBub3VnYWt1XCA7CivlsI/miY0gPiBzaG91c2FpXCA7CivkuLvou7ggPiBzaHVqaWt1XCA7CivpoKzpqqggPiBob29ib25lXCA7CivkubHooYwgPiByYW5neW91XCA7Civlq4noppYgPiBzaGlzc2hpXCA7CivlsI/miJAgPiBzaG91c2VpXCA7CivogonnnLwgPiBuaWt1Z2FuXCA7CivkuK3pgZMgPiBjaHV1ZG91XCA7CivlsJHmhqkgPiBzaG91a2VpXCA7CivlrqLmvJQgPiBreWFrdWVuXCA7Civlroznhp8gPiBrYW5qdWt1XCA7CivkuIDploAgPiBpY2hpbW9uXCA7CivmmpfprLEgPiBhbicndXRzdVwgOwor5bCP5oapID4gc2hvdWtlaVwgOwor5Lit6YCAID4gY2h1dXRhaVwgOwor5qSN5LuYID4gdWV0c3VrZVwgOwor55CG56qfID4gcmlrdXRzdVwgOwor5a6f5ryUID4gaml0c3VlblwgOwor5L+u5aW9ID4gc2h1dWtvdVwgOwor5bC85a+6ID4gYW1hZGVyYVwgOwor5Lit6L6yID4gY2h1dW5vdVwgOwor5p2R6JC9ID4gc29ucmFrdVwgOwor5pyr6KOUID4gbWF0c3VlaVwgOwor5bC65a+4ID4gc2VraXN1blwgOwor6ama5ZiGID4ga3lvdXRhblwgOwor5qKi5a2QID4gc2hvdXNoaVwgOwor5a+45o+PID4gc3VuYnlvdVwgOwor5pyo6KO9ID4gbW9rdXNlaVwgOwor5L2X5q2MID4gd2FiaXV0YVwgOwor5Lim6YCyID4gaGVpc2hpblwgOwor5L+u5aOrID4gc2h1dXNoaVwgOwor6aKo6KmVID4gZnV1aHlvdVwgOwor55Wq5Lq6ID4gYmFuJyduaW5cIDsKK+Wus+avkiA+IGdhaWRva3VcIDsKK+WtpueUnyA+IGdha3VzZWlcIDsKK+acl+iqrSA+IHJvdWRva3VcIDsKK+acl+iqpiA+IHJvdXNob3VcIDsKK+Wun+a4rCA+IGppc3Nva3VcIDsKK+eUn+WeoyA+IGlrZWdha2lcIDsKK+WxnuWbvSA+IHpva2tva3VcIDsKK+S6lOiJsiA+IGdvc2hva3VcIDsKK+i1pOacrSA+IGFrYWZ1ZGFcIDsKK+adv+e3oCA+IGl0YWppbWVcIDsKK+ePjeiBniA+IGNoaW5idW5cIDsKK+eUuuWQjSA+IGNob3VtZWlcIDsKK+acneimiyA+IGNob3VrZW5cIDsKK+aarumbqiA+IGJvc2V0c3VcIDsKK+S7leeoriA+IHNoaWd1c2FcIDsKK+S9s+aciCA+IGthZ2V0c3VcIDsKK+iCieeVjCA+IG5pa3VrYWlcIDsKK+WuruauvyA+IGt5dXVkZW5cIDsKK+adpeiBtCA+IHJhaWNob3VcIDsKK+mgremgmCA+IHRvdXJ5b3VcIDsKK+S7u+eUqCA+IG5pbicneW91XCA7Civog7jmnb8gPiBtdW5haXRhXCA7Civkv6HlpYkgPiBzaGlucG91XCA7CivmopPlrq4gPiBzaGlreXV1XCA7Civmnb/ntJkgPiBpdGFnYW1pXCA7CivpoK3poIIgPiB0b3VjaG91XCA7CivkuozoibIgPiBuaXNob2t1XCA7Civpp5DmlK8gPiBjaHV1c2hpXCA7CivlsI/lvoQgPiBzaG91a2VpXCA7Civmm7Lot68gPiBreW9rdXJvXCA7CivlsJHlvJ8gPiBzaG91dGVpXCA7CivkuKHovKogPiByeW91cmluXCA7CivmnKjonYsgPiBtb2t1cm91XCA7CivkuIDpjKAgPiBpY2hpam91XCA7Civlrp/ms4EgPiBqaWtreW91XCA7CivotaTml5cgPiBha2FoYXRhXCA7CivlsI/lvJ8gPiBzaG91dGVpXCA7Civkv5flp5MgPiB6b2t1c2VpXCA7Civkv4LlsZ4gPiBrZWl6b2t1XCA7CivkvbPml6UgPiBrYWppdHN1XCA7CivkuKHou40gPiByeW91Z3VuXCA7Civog47mr5IgPiB0YWlkb2t1XCA7CivnlZnku7sgPiByeXV1bmluXCA7CivmnL3okYkgPiBrdWNoaWJhXCA7Civmnb7nsZ8gPiBzaG91cmFpXCA7CivlsI/lurcgPiBzaG91a291XCA7CivlsbHli5ggPiB5YW1ha2FuXCA7CivlsJHlubQgPiBzaG91bmVuXCA7Civku4rnqIsgPiBpbWFob2RvXCA7Civpp5LmkI0gPiBrb21hc29uXCA7CivnvarpmpwgPiB6YWlzaG91XCA7CivlsI/lupcgPiBzaG91dGVuXCA7Civlrr/moLkgPiBzaHVra29uXCA7CivmnIjoqZUgPiBnZXBweW91XCA7CivnvbLplbcgPiBzaG9jaG91XCA7Civku4rnp4sgPiBrb25zaHV1XCA7CivnlLrliLYgPiBjaG91c2VpXCA7CivkuIvpg6ggPiBzaGltb2JlXCA7CivlsILlv7UgPiBzZW4nJ25lblwgOwor5p2f576kID4gc29rdWd1blwgOwor5a6f5q+NID4gaml0c3Vib1wgOwor5bCC5b+DID4gc2Vuc2hpblwgOwor54yu6YWsID4ga2Vuc2h1dVwgOwor5LiB6YeNID4gdGVpY2hvdVwgOwor5LiN6YGUID4gZnV0YXRzdVwgOwor5Li76Kq/ID4gc2h1Y2hvdVwgOwor5LiL6YGUID4ga2F0YXRzdVwgOwor6aOb6ISaID4gaGlreWFrdVwgOwor55S65YaFID4gY2hvdW5haVwgOwor5pyI6KaLID4gdHN1a2ltaVwgOwor5L+X5aG1ID4gem9rdWppblwgOwor5YCL5YilID4ga29iZXRzdVwgOwor5bGe5ZCNID4gem9rdW1laVwgOwor5YCh5L2vID4gc2hvdXlvdVwgOwor5LuY552AID4gZnVjaGFrdVwgOwor5LiK6YCyID4gam91c2hpblwgOwor5pyN6KOFID4gZnVrdXNvdVwgOwor5L2T5qC8ID4gdGFpa2FrdVwgOwor54yf6YqDID4gcnlvdWp1dVwgOwor5Lqk57WhID4ga291cmFrdVwgOwor5qOE5Y20ID4ga2lreWFrdVwgOwor5L2V5p+QID4gbmFuaWJvdVwgOwor5qCh5pyNID4ga291ZnVrdVwgOwor5LuV552AID4gc2hpa2lzZVwgOwor5pyo6JSmID4ga2lkenV0YVwgOwor6LKn56quID4gaGlua3l1dVwgOwor6IKJ54mHID4gbmlrdWhlblwgOwor5bCG5bilID4gc2hvdXN1aVwgOwor55S35YSqID4gZGFuJyd5dXVcIDsKK+acqOiTriA+IG1va3VyZW5cIDsKK+absuitnCA+IGt5b2t1ZnVcIDsKK+ail+WhniA+IGtvdXNva3VcIDsKK+eUsuWGkSA+IGthdGNodXVcIDsKK+S+teWusyA+IHNoaW5nYWlcIDsKK+iCpea6nCA+IGtvZWRhbWVcIDsKK+iznueOqSA+IHNob3VnYW5cIDsKK+WAn+S6uiA+IGthcmluaW5cIDsKK+S6uuensCA+IG5pbnNob3VcIDsKK+S/iuWjqyA+IHNodW5zaGlcIDsKK+acieihhiA+IHl1dXNodXVcIDsKK+abuOiplSA+IHNob2h5b3VcIDsKK+WvhuaVmSA+IG1pa2t5b3VcIDsKK+ixquiFuSA+IGdvdWZ1a3VcIDsKK+S4gOmBkyA+IGljaGlkb3VcIDsKK+S4gOmBhyA+IGljaGlndXVcIDsKK+abuOiovCA+IHNob3Nob3VcIDsKK+iyq+emhCA+IGthbnJva3VcIDsKK+i2iuW5tCA+IGV0c3VuZW5cIDsKK+S4gOmAoyA+IGljaGlyZW5cIDsKK+eUn+WNlCA+IHNlaWt5b3VcIDsKK+S4iei7uCA+IHNhbmppa3VcIDsKK+iAgeiHoyA+IHJvdXNoaW5cIDsKK+adoee0hCA+IGpvdXlha3VcIDsKK+S/ruWPsiA+IHNodXVzaGlcIDsKK+ixhuiUtSA+IG1hbWV6b3VcIDsKK+S9meaXpSA+IHlvaml0c3VcIDsKK+eQg+eVjCA+IGt5dXVrYWlcIDsKK+S9nOaWhyA+IHNha3VidW5cIDsKK+Wwj+WvkiA+IHNob3VrYW5cIDsKK+iznueKtiA+IHNob3Vqb3VcIDsKK+adnOe1tiA+IHRvemV0c3VcIDsKK+S9juacqCA+IHRlaWJva3VcIDsKK+WwiuWxniA+IHNvbnpva3VcIDsKK+mmrOaWuSA+IHVtYWthdGFcIDsKK+S5seiHoyA+IHJhbnNoaW5cIDsKK+S9leaZgiA+IG5hbmRva2lcIDsKK+i1pOaJiyA+IHNla2lzaHVcIDsKK+Wwj+WumCA+IHNob3VrYW5cIDsKK+S5s+iFuiA+IG55dXVzZW5cIDsKK+WwkeWtkCA+IHNob3VzaGlcIDsKK+eMrui6qyA+IGtlbnNoaW5cIDsKK+WAkuS8jyA+IHRvdWZ1a3VcIDsKK+iznueJjCA+IHNob3VoYWlcIDsKK+absuinoyA+IGt5b2trYWlcIDsKK+ePjeetlCA+IGNoaW50b3VcIDsKK+S4gOi8qiA+IGljaGlyaW5cIDsKK+WvteW5uCA+IGNob3Vrb3VcIDsKK+eUuuS8miA+IGNob3VrYWlcIDsKK+WumualrSA+IHRlaWd5b3VcIDsKK+mpleWCsiA+IGt5b3Vnb3VcIDsKK+mpmuWAkiA+IGt5b3V0b3VcIDsKK+WwiuWuuSA+IHNvbicneW91XCA7Civnj77nlKggPiBnZW4nJ3lvdVwgOwor5LiK6LazID4gam91c29rdVwgOwor5a6Y5qWtID4ga2FuZ3lvdVwgOwor5Lih6KuWID4gcnlvdXJvblwgOwor5LiA6LuNID4gaWNoaWd1blwgOwor55S65Lq6ID4gY2hvdW5pblwgOwor5LiK6LaKID4gam91ZXRzdVwgOwor5bCK5a6FID4gc29udGFrdVwgOwor6aCF6aCYID4ga291cnlvdVwgOwor6aaZ5pyoID4ga291Ym9rdVwgOwor5bGA5ZOhID4ga3lva3VpblwgOwor5bCC5bGeID4gc2Vuem9rdVwgOwor5L2V5pWFID4gbmFuaXl1ZVwgOwor5Lqi56ucID4ga291cnlvdVwgOwor54yb6YCyID4gbW91c2hpblwgOwor5LuL55eFID4ga2FpYnlvdVwgOwor5bCG5a6YID4gc2hvdWthblwgOwor5LuP55S7ID4gYnV0c3VnYVwgOwor6ISx5a2XID4gZGF0c3VqaVwgOwor54yb6L+9ID4gbW91dHN1aVwgOwor6LSF5rKiID4gemVpdGFrdVwgOwor5L+h5Y+3ID4gc2hpbmdvdVwgOwor55Sw5L2cID4gZGVuc2FrdVwgOwor5Lyv5qW9ID4gYmFrdXJvdVwgOwor5a6a5qC8ID4gdGVpa2FrdVwgOwor5bGx5LitID4gc2FuY2h1dVwgOwor6IO45oeQID4ga3lvdWthaVwgOwor5pys6IW5ID4gaG9ucHVrdVwgOwor5a++5a+pID4gdGFpc2hpblwgOwor5LqU56+AID4gZ29zZXRzdVwgOwor5Li76Jm5ID4gc2h1bmlqaVwgOwor5Lim6KO9ID4gbmFtaXNlaVwgOwor55Sa5YWtID4gamlucm9rdVwgOwor54uC6aiSID4ga3lvdXNvdVwgOwor6LWk5oGlID4gYWthaGFqaVwgOwor5pyx6IKJID4gc2h1bmlrdVwgOwor5L2Z5o6lID4geW9zZXRzdVwgOwor55Sy5LmZID4ga291b3RzdVwgOwor5LqV562SID4gaWR6dXRzdVwgOwor5pys6IO9ID4gaG9uJydub3VcIDsKK+S4h+ixoSA+IGJhbnNob3VcIDsKK+eRo+acqyA+IHNhbWF0c3VcIDsKK+mmmeaWmSA+IGtvdXJ5b3VcIDsKK+S/l+WQjSA+IHpva3VtZWlcIDsKK+eQg+eKtiA+IGt5dXVqb3VcIDsKK+iDtOaFviA+IGRvdXlva3VcIDsKK+S6uueahyA+IG5pbicnbm91XCA7CivkurrnmoQgPiBqaW50ZWtpXCA7CivkvI/msLQgPiBmdWt1c3VpXCA7CivlsJHlo64gPiBzaG91c291XCA7CivohIblvLEgPiB6ZWlqYWt1XCA7CivppZHmuIcgPiBraWthdHN1XCA7CivlsI/lpIkgPiBzaG91aGVuXCA7CivkuLvolqwgPiBzaHV5YWt1XCA7Civos7zmsYIgPiBrb3VreXV1XCA7CivlrpjmnIkgPiBrYW4nJ3l1dVwgOwor5LyR5q2iID4ga3l1dXNoaVwgOwor5LqG57ChID4gcnlvdWtlblwgOwor5LuW54mpID4gdGFidXRzdVwgOwor57696JmrID4gaGFtdXNoaVwgOwor55Sj5LyRID4gc2Fua3l1dVwgOwor6IOO5pWZID4gdGFpa3lvdVwgOwor5L2c5oimID4gc2FrdXNlblwgOwor5Lyv5p6XID4gYmVydXJpblwgOwor5L2c5oiQID4gc2FrdXNlaVwgOwor5a+S5b+DID4ga2Fuc2hpblwgOwor54uC6aKoID4ga3lvdWZ1dVwgOwor5a6j5pWZID4gc2Vua3lvdVwgOwor6IOM5pWZID4gaGFpa3lvdVwgOwor6LGK6IO4ID4gaG91a3lvdVwgOwor5p+z5p2hID4gcnl1dWpvdVwgOwor5bCG5aOrID4gc2hvdXNoaVwgOwor55Sf5LmzID4gc2Vpbnl1dVwgOwor5a6X5peoID4gc2h1dXNoaVwgOwor5L6v5Zu9ID4ga291a29rdVwgOwor576k6KGGID4gZ3Vuc2h1dVwgOwor5a6X5pePID4gc291em9rdVwgOwor6IKJ5rGgID4gbmlrdWNoaVwgOwor5qKT5YygID4gc2hpc2hvdVwgOwor5LiJ6KeSID4gc2Fua2FrdVwgOwor5LiL6KaLID4gc2hpdGFtaVwgOwor5LyP5qiLID4gZnVzZWRvaVwgOwor6IKJ5rGBID4gbmlrdWp1dVwgOwor5Lmz57OWID4gbnl1dXRvdVwgOwor546E57+BID4gZ2VuJydub3VcIDsKK+S4gOiqrCA+IGlzc2V0c3VcIDsKK+mnkOWxryA+IGNodXV0b25cIDsKK+WwseWKtCA+IHNodXVyb3VcIDsKK+iDuOW6lSA+IGt5b3V0ZWlcIDsKK+Wuo+aPmiA+IHNlbicneW91XCA7CivosrfniakgPiBrYWltb25vXCA7CivpoZvopoYgPiB0ZW5wdWt1XCA7Civkv67kuqQgPiBzaHV1a291XCA7CivlsYXlgJkgPiBpc291cm91XCA7CivmnI3ohrogPiBmdWt1eW91XCA7Civlrr/mgKggPiBzaHVrdWVuXCA7CivogIznq4sgPiBqaXJpdHN1XCA7Civmnq/muIcgPiBrb2thdHN1XCA7Civpoqjnv5IgPiBmdXVzaHV1XCA7CivkuZfnvoMgPiBqb3ViZWtpXCA7CivlsYjkvLggPiBrdXNzaGluXCA7Civkv5flg6cgPiB6b2t1c291XCA7CivpoZXopoEgPiBrZW4nJ3lvdVwgOwor6IKH5q2zID4gY2hvdXNhaVwgOwor5bGI5LyPID4ga3VwcHVrdVwgOwor5pys57WmID4gaG9ua3l1dVwgOwor5Lit6JGJID4gY2h1dXlvdVwgOwor572q6LehID4gemFpc2VraVwgOwor6aOb56SrID4gdHN1YnV0ZVwgOwor5p2h55uuID4gam91bW9rdVwgOwor5LiA6KanID4gaWNoaXJhblwgOwor5a+G5bqmID4gbWl0c3Vkb1wgOwor5LiK6KGoID4gam91aHlvdVwgOwor5LiL6KGAID4gZ2VrZXRzdVwgOwor5pyA6ImvID4gc2FpcnlvdVwgOwor6Laz5Yq0ID4gc29rdXJvdVwgOwor5a6I5penID4gc2h1a3l1dVwgOwor5bCP5ZaEID4gc2hvdXplblwgOwor5Luu5rG6ID4ga2FrZXRzdVwgOwor5a+b5a65ID4ga2FuJyd5b3VcIDsKK+S8keagoSA+IGt5dXVrb3VcIDsKK+S/oeS7sCA+IHNoaW5rb3VcIDsKK+agluaBryA+IHNlaXNva3VcIDsKK+S6leebriA+IHNlaW1va3VcIDsKK+WwmuWPiCA+IG5hb21hdGFcIDsKK+aal+i6jSA+IGFuJyd5YWt1XCA7CivogIPnqbYgPiBrb3VreXV1XCA7CivmmanpkJggPiBiYW5zaG91XCA7CivosqjniakgPiBrYW1vdHN1XCA7Civlrp/mioAgPiBqaXRzdWdpXCA7CivmnKznsaQgPiBob25rdWppXCA7CivohLHllrYgPiBkYXRzdWVpXCA7CivkvZPlvpcgPiB0YWl0b2t1XCA7CivmnKznsY0gPiBob25zZWtpXCA7CivmnKjnsr4gPiBtb2t1c2VpXCA7CivlsI/lk4EgPiBzaG91aGluXCA7CivmnInogbcgPiB5dXVzb2t1XCA7CivkvbPlrqIgPiBrYWt5YWt1XCA7Civnvo7ooZMgPiBiaWp1dHN1XCA7CivnvarosqwgPiB6YWlzZWtpXCA7CivotaTlrZAgPiBzZWtpc2hpXCA7CivlrrPlv4MgPiBnYWlzaGluXCA7Civkv5fkvZMgPiB6b2t1dGFpXCA7CivmmLzppJAgPiBjaHV1c2FuXCA7CivkuoznnYAgPiBuaWNoYWt1XCA7Civkv5fkvJ0gPiB6b2t1ZGVuXCA7Civkuobnn6UgPiByeW91Y2hpXCA7CivmoLjlrZAgPiBrYWt1c2hpXCA7CivmnKznrrEgPiBob25iYWtvXCA7CivmnI3nvaogPiBmdWt1emFpXCA7Civkuoznm7QgPiBuaWNob2t1XCA7CivppqzluIIgPiB1bWFpY2hpXCA7CivnkrDlooMgPiBrYW5reW91XCA7CivlsI/lj7IgPiBzaG91c2hpXCA7Civkv5fkurogPiB6b2t1amluXCA7CivkvZXlubQgPiBuYW4nJ25lblwgOwor54yb6KWyID4gbW91c2h1dVwgOwor5bCP5Y+jID4ga29ndWNoaVwgOwor5p2+54WkID4gc2hvdWJhaVwgOwor5pys562LID4gaG9uc3VqaVwgOwor5p2x54usID4gdG91ZG9rdVwgOwor542j6IKJID4ganV1bmlrdVwgOwor5Lit6IiIID4gY2h1dWtvdVwgOwor5LqM55m+ID4gbmloeWFrdVwgOwor5puy6IieID4ga3VzZW1haVwgOwor54+N542jID4gY2hpbmp1dVwgOwor5pys56ugID4gaG9uc2hvdVwgOwor5Li757+8ID4gc2h1eW9rdVwgOwor5L+X5LiWID4gem9rdXNlaVwgOwor576k6JC9ID4gZ3VucmFrdVwgOwor6aO0546JID4gYW1lZGFtYVwgOwor6ICE56KMID4gbW91cm9rdVwgOwor5a6u5bu3ID4ga3l1dXRlaVwgOwor5bCx5Lu7ID4gc2h1dW5pblwgOwor5aaZ6b2iID4gbXlvdXJlaVwgOwor5pmC6ZuoID4gc2hpZ3VyZVwgOwor5a6u5bqtID4ga3l1dXRlaVwgOwor5Lit6ISzID4gY2h1dW5vdVwgOwor5pyo56uLID4ga29kYWNoaVwgOwor546L56uLID4gb3VyaXRzdVwgOwor5bCP5YuHID4gc2hvdXl1dVwgOwor6IG35qipID4gc2hva2tlblwgOwor5L615YamID4gc2hpbmtvdVwgOwor54++5rOBID4gZ2Vua3lvdVwgOwor5a+E5a6/ID4ga2lzaHVrdVwgOwor6IOM5b6zID4gaGFpdG9rdVwgOwor57+S57e0ID4gc2h1dXJlblwgOwor5qC85aSWID4ga2FrdWdhaVwgOwor5LiK6JSfID4gam91em9rdVwgOwor5Lit6IOMID4gY2h1dXplaVwgOwor6LWk5aSWID4gc2VraWdhaVwgOwor5Lih6Ii3ID4gcnlvdWdlblwgOwor5a2j5pyrID4ga2ltYXRzdVwgOwor5p+T5paZID4gc2VucnlvdVwgOwor5p2+5r+kID4gc2hvdXRvdVwgOwor5p+E5p2TID4gaGlzaGFrdVwgOwor54us6LWwID4gZG9rdXNvdVwgOwor5Luu5qSNID4ga2FzaG9rdVwgOwor546J56i/ID4gZ3lva2tvdVwgOwor5bCP5YiAID4gc2hvdXRvdVwgOwor5L6/5L6rID4gYmVuJyduZWlcIDsKK+mgreiouyA+IHRvdWNodXVcIDsKK+S7luauuiA+IHRhc2F0c3VcIDsKK+S4i+iRiSA+IHNoaXRhYmFcIDsKK+i2s+S7oyA+IGFzaGlkYWlcIDsKK+aciee1piA+IHl1dWt5dXVcIDsKK+S+v+S9niA+IGJlbicnbmVpXCA7CivkuK3ogIEgPiBjaHV1cm91XCA7CivmnIjntaYgPiBnZWtreXV1XCA7Civpp5DlnKggPiBjaHV1emFpXCA7CivpppbluK0gPiBzaHVzZWtpXCA7CivmnInntYIgPiB5dXVzaHV1XCA7CivkuKHohZUgPiByeW91dWRlXCA7CivnjYToiI4gPiBnb2t1c2hhXCA7CivpoK3op5IgPiB0b3VrYWt1XCA7CivpoZvokL0gPiB0ZW5yYWt1XCA7CivlsI/lhZogPiBzaG91dG91XCA7CivkvqDli4cgPiBreW91eXV1XCA7CivlsI7lhaUgPiBkb3VueXV1XCA7CivkvJ3mib8gPiBkZW5zaG91XCA7Civog7jlo7AgPiBreW91c2VpXCA7CivkuZnnqK4gPiBvdHN1c2h1XCA7CivkuZfnqY0gPiBqb3VzZWtpXCA7CivniZ3pto8gPiBtZW5kb3JpXCA7CivnvqToh6MgPiBndW5zaGluXCA7CivlrZ/mmKUgPiBtb3VzaHVuXCA7Civkvpvli6IgPiB0b21vemVpXCA7Civkub7nlZkgPiBrYW5yeXV1XCA7Civlr6nllY8gPiBzaGlubW9uXCA7Civos47mpa0gPiBzZW5neW91XCA7Civos57mna8gPiBzaG91aGFpXCA7Civku4vmrrsgPiBrYWlrYWt1XCA7CivkuIDokYkgPiBpY2hpeW91XCA7CivmnIDntYIgPiBzYWlzaHV1XCA7CivkubPnmYwgPiBueXV1Z2FuXCA7CivlsIblhbUgPiBzaG91aGVpXCA7CivniZ3ps6UgPiBtZW5kb3JpXCA7Civku7DmnJsgPiBneW91Ym91XCA7Civlrpflu58gPiBzb3VieW91XCA7Civkub7nk6IgPiBrYW5weW91XCA7CivogL3murogPiB0YW5kZWtpXCA7CivkvY/lroUgPiBqdXV0YWt1XCA7CivkuKHogIUgPiByeW91c2hhXCA7CivotoXli6QgPiBjaG91a2luXCA7CivosqvmtYEgPiBrYW5yeXV1XCA7CivlrpjluoEgPiBrYW5jaG91XCA7CivogIHnl4UgPiByb3VieW91XCA7CivlrprluK0gPiBqb3VzZWtpXCA7Civos5PmoLwgPiBoaW5rYWt1XCA7CivmnJ3npLwgPiBjaG91cmVpXCA7CivlsI/kvr8gPiBzaG9uYmVuXCA7Civlr7jliocgPiBzdW5nZWtpXCA7CivlsIHlhaUgPiBmdXVueXV1XCA7CivorabpkJggPiBrZWlzaG91XCA7CivmmKXpm7cgPiBzaHVucmFpXCA7Civlr5Llm70gPiBrYW5rb2t1XCA7Civkvq/kvK8gPiBrb3VoYWt1XCA7CivkuK3nt6ggPiBjaHV1aGVuXCA7CivmnKrnnYAgPiBtaWNoYWt1XCA7CivmnKznnIEgPiBob25zaG91XCA7Civmm7jntYwgPiBzaG9reW91XCA7Civlr7jliLsgPiBzdW5rb2t1XCA7CivkuovniakgPiBqaWJ1dHN1XCA7Civku5Xmpa0gPiBzaGl3YXphXCA7CivpppblsIYgPiBzaHVzaG91XCA7CivkvJHmiKYgPiBreXV1c2VuXCA7Civnj77mpa0gPiBnZW5neW91XCA7Civmm7PntrIgPiBoaWtpYW1pXCA7CivlsIrkv6EgPiBzb25zaGluXCA7CivkuK3ntpkgPiBjaHV1a2VpXCA7CivotoXlh6EgPiBjaG91Ym9uXCA7Civku7Lmlq0gPiBjaHV1ZGFuXCA7CivlsI/kvJ0gPiBzaG91ZGVuXCA7Civpnqbpn4YgPiBidXJhbmtvXCA7CivosarnkIMgPiBnb3VreXV1XCA7CivkubHnlKggPiByYW4nJ3lvdVwgOwor6aCY6KejID4gcnlvdWthaVwgOwor5LiD6ImyID4gbmFuYWlyb1wgOwor5LiK6IaKID4gam91aGFrdVwgOwor5L2V5aW0ID4gZG95YXRzdVwgOwor5p6X5qWtID4gcmluZ3lvdVwgOwor5LiA6Iq4ID4gaWNoaWdlaVwgOwor5LyR5oapID4ga3l1dWtlaVwgOwor5p2x5riFID4gdG91c2hpblwgOwor54qs6YeYID4gaW51a3VnaVwgOwor55CD5qC5ID4ga3l1dWtvblwgOwor5pyq55m6ID4gbWloYXRzdVwgOwor5bCP5Lq6ID4gc2hvdW5pblwgOwor5L2X5aOwID4gd2FiaWdvZVwgOwor5LiA6ImyID4gaGl0b2lyb1wgOwor5Li7562LID4gc2h1c3VqaVwgOwor5LiL6ISaID4ga2FreWFrdVwgOwor5Lit57O4ID4gY2h1dWl0b1wgOwor576k576KID4gZ3VuJyd5b3VcIDsKK+izh+agvCA+IHNoaWtha3VcIDsKK+abuOexjSA+IHNob3Nla2lcIDsKK+Wuv+WgtCA+IHNodWt1YmFcIDsKK+aYpemXmCA+IHNodW50b3VcIDsKK+WwguS/riA+IHNlbnNodXVcIDsKK+Wwj+S5lyA+IHNob3Vqb3VcIDsKK+S8uOWxlSA+IHNoaW50ZW5cIDsKK+S+i+WIuyA+IHJlaWtva3VcIDsKK+aatOiQvSA+IGJvdXJha3VcIDsKK+eLgui6gSA+IGt5b3Vzb3VcIDsKK+iyqOauliA+IGthc2hva3VcIDsKK+S6rOa0myA+IGtlaXJha3VcIDsKK+S8muW/gyA+IGthaXNoaW5cIDsKK+S4reexsyA+IGNodXViZWlcIDsKK+S6pOa4iSA+IGtvdXNob3VcIDsKK+mgjOipniA+IHNob3VzaGlcIDsKK+S4h+iDvSA+IG1hbicnbm91XCA7CivkuInogrIgPiBzYW4nJ2lrdVwgOwor5LiJ6IKhID4gc2FubWF0YVwgOwor5LiA6IazID4gaWNoaXplblwgOwor5a2m5omNID4gZ2FrdXNhaVwgOwor54m56Zu7ID4gdG9rdWRlblwgOwor6aCG6Kq/ID4ganVuY2hvdVwgOwor5769566SID4gaGFib3VraVwgOwor6ISa5YWJID4ga3lha2tvdVwgOwor5a6a5a6/ID4gam91eWFkb1wgOwor5a+p5YikID4gc2hpbnBhblwgOwor54us6KOBID4gZG9rdXNhaVwgOwor576K6IacID4geW91bWFrdVwgOwor5pyr55SfID4gc3VlbmFyaVwgOwor5p+75a+fID4gc2FzYXRzdVwgOwor6LGq54mpID4gZXJhbW9ub1wgOwor5Lit56+HID4gY2h1dWhlblwgOwor5bCC5Lu7ID4gc2VuJyduaW5cIDsKK+e+iuiFuCA+IHlvdWNob3VcIDsKK+S4iue/vCA+IGpvdXlva3VcIDsKK+S8keaAoCA+IGt5dXV0YWlcIDsKK+S5seeNsiA+IHJhbmtha3VcIDsKK+S6pOa1gSA+IGtvdXJ5dXVcIDsKK+WnpumAmiA+IGthbnRzdXVcIDsKK+e+qee1tiA+IGdpemV0c3VcIDsKK+aYh+mghiA+IHNob3VqdW5cIDsKK+iyneavkiA+IGthaWRva3VcIDsKK+WumOWtpiA+IGthbmdha3VcIDsKK+ePvuaciSA+IGdlbicneXV1XCA7Civosp3mrrwgPiBrYWlnYXJhXCA7Civosp3mrrsgPiBrYWlnYXJhXCA7Civos57mj5ogPiBzaG91eW91XCA7CivkuK3nrYkgPiBjaHV1dG91XCA7Civnianpn7MgPiBtb25vb3RvXCA7CivkubPnirYgPiBueXV1am91XCA7CivkuLvnpZ4gPiBzaHVzaGluXCA7CivmnpfmnKggPiByaW5ib2t1XCA7Civnjonnkr0gPiBneW9rdWppXCA7CivkvJrluK0gPiBrYWlzZWtpXCA7Civni7zol4kgPiByb3V6ZWtpXCA7CivnvorogokgPiB5b3VuaWt1XCA7Civnv7znirYgPiB5b2t1am91XCA7CivpoJDooYAgPiB5b2tldHN1XCA7CivpoqjnlrkgPiBmdXVzaGluXCA7CivkvJHlu7cgPiBreXV1dGVpXCA7CivnjonnkZsgPiBneW9rdWVpXCA7Civlrq7ln44gPiBreXV1am91XCA7CivotoXkurogPiBjaG91amluXCA7Civlrr/llrYgPiBzaHVrdWVpXCA7Civmnp3ml48gPiBzaGl6b2t1XCA7Civku5bml6UgPiB0YWppdHN1XCA7CivogIHnhp8gPiByb3VqdWt1XCA7CivoroPos54gPiBzYW5zaG91XCA7Civos4fmlpkgPiBzaGlyeW91XCA7Civpp5DlhbUgPiBjaHV1aGVpXCA7CivkuIDnvqQgPiBpY2hpZ3VuXCA7CivkvY7lnKcgPiB0ZWlhdHN1XCA7Civmnb7mpZMgPiBzaG91ZnV1XCA7Civku4rmnJ0gPiBrb25jaG91XCA7CivkuLnnoqcgPiB0YW5wZWtpXCA7Civmmq7oibIgPiBib3Nob2t1XCA7Civku5XmlrkgPiBzaGlrYXRhXCA7Civpo6LmuIcgPiBraWthdHN1XCA7Civku4rmm7QgPiBpbWFzYXJhXCA7Civlr4blkYogPiBtaWtrb2t1XCA7CivmmIfpmY0gPiBzaG91a291XCA7Civniq/ot6EgPiBoYW5zZWtpXCA7CivosrTmnK0gPiBraXNhdHN1XCA7Civpo4TnhLYgPiBoeW91emVuXCA7Civku4rmmoEgPiBrb25neW91XCA7Civml6nppqwgPiBoYXlhdW1hXCA7CivkvZzlk4EgPiBzYWt1aGluXCA7CivosqDmpbUgPiBmdWt5b2t1XCA7CivkurrmoLwgPiBqaW5rYWt1XCA7CivmnKzniakgPiBob25tb25vXCA7Civku4rmmYIgPiBpbWFkb2tpXCA7CivmnaXmrbQgPiByYWlyZWtpXCA7Civpn7PoqLMgPiBvbicneWFrdVwgOwor5LuK5pilID4ga29uc2h1blwgOwor5LuK5piUID4ga29uc2VraVwgOwor6IGa5paCID4gc2h1dXJlblwgOwor5LuP5pWZID4gYnVra3lvdVwgOwor6LKv5pyoID4gY2hvYm9rdVwgOwor5pyo54qAID4gbW9rdXNlaVwgOwor6LK35pilID4gYmFpc2h1blwgOwor5a+M5YqbID4gZnVyeW9rdVwgOwor5LiK57SaID4gam91a3l1dVwgOwor5LiK57SZID4gdXdhZ2FtaVwgOwor6IGa5pWjID4gc2h1dXNhblwgOwor5LiK57SQID4gdXdhaGltb1wgOwor5LiJ57SaID4gc2Fua3l1dVwgOwor5LuK5pa5ID4gaW1hZ2F0YVwgOwor5Lih56iuID4gcnlvdXNodVwgOwor5pyo54mIID4gbW9rdWhhblwgOwor5pyo54mHID4gbW9rdWhlblwgOwor5a2d5b+DID4ga291c2hpblwgOwor54uC6KmpID4ga3lvdXNoaVwgOwor6IOM5ZynID4gaGFpYXRzdVwgOwor5Lm+5rqcID4ga2Fucnl1dVwgOwor6IKJ5by+ID4gbmlrdWRhblwgOwor542E56qTID4gZ29rdXNvdVwgOwor5a2m5bm0ID4gZ2FrdW5lblwgOwor6IGW5pWZID4gc2Vpa3lvdVwgOwor5a6i5ZyfID4ga3lha3Vkb1wgOwor6K206LKsID4ga2Vuc2VraVwgOwor5pyN55SoID4gZnVrdXlvdVwgOwor5L2O5ZSxID4gdGVpc2hvdVwgOwor5pen6aKoID4ga3l1dWZ1dVwgOwor54yu57SNID4ga2VuJydub3VcIDsKK+WtmOW/tSA+IHpvbicnbmVuXCA7CivnjofniL4gPiBzb3RzdWppXCA7CivlrabluL0gPiBnYWt1Ym91XCA7CivmmI7pj6EgPiBtZWlreW91XCA7CivmnKznhLYgPiBob24nJ25lblwgOwor54uC6KiAID4ga3lvdWdlblwgOwor5LuV5o6bID4gc2hpa2FrZVwgOwor5qCq5Yi4ID4ga2FidWtlblwgOwor6aOb5rKrID4gaGltYXRzdVwgOwor6aKo54uCID4gZnV1a3lvdVwgOwor5a2Q5oGvID4gc2hpc29rdVwgOwor6aas5Yy5ID4gYmFoaXRzdVwgOwor5pu455uuID4gc2hvbW9rdVwgOwor5LiK566xID4gdXdhYmFrb1wgOwor6IO45YOPID4ga3lvdXpvdVwgOwor5LyP5bCEID4gZnVrdXNoYVwgOwor6IO05YWDID4gZG91bW90b1wgOwor5a6a5ZynID4gdGVpYXRzdVwgOwor5pqX6ImyID4gYW5zaG9rdVwgOwor5a6M5aOBID4ga2FuYmVraVwgOwor6IOG5ZqiID4gdGFuJydub3VcIDsKK+ixiueGnyA+IGhvdWp1a3VcIDsKK+S4iuetliA+IGpvdXNha3VcIDsKK+mhjue0kCA+IGFnb2hpbW9cIDsKK+acqOeCrSA+IG1va3V0YW5cIDsKK+S9meWKmyA+IHlvcnlva3VcIDsKK+S9k+WNlCA+IHRhaWt5b3VcIDsKK+mmluWUsSA+IHNodXNob3VcIDsKK+S4reebpCA+IGNodXViYW5cIDsKK+agoeWJhyA+IGtvdXNva3VcIDsKK+iAs+agkyA+IG1pbWlzZW5cIDsKK+S9meWJsiA+IHlva2F0c3VcIDsKK+S4h+etliA+IGJhbnNha3VcIDsKK+S7pOaBryA+IHJlaXNva3VcIDsKK+eJh+mdoiA+IGthdGFtZW5cIDsKK+WvhuWEgCA+IG1pdHN1Z2lcIDsKK+eJuemFjSA+IHRva3VoYWlcIDsKK+S5s+a4hSA+IG55dXVzZWlcIDsKK+aXpemcsiA+IG5pY2hpcm9cIDsKK+eMruetliA+IGtlbnNha3VcIDsKK+S9meWIhyA+IHlvc2V0c3VcIDsKK+S6q+aciSA+IGt5b3V5dXVcIDsKK+iBtOW+kyA+IGNob3VqdXVcIDsKK+S5s+a2siA+IG55dXVla2lcIDsKK+aguOS7gSA+IGtha3VqaW5cIDsKK+WuouWToSA+IGt5YWt1aW5cIDsKK+aYn+i+sCA+IHNlaXNoaW5cIDsKK+eMrueriyA+IGtvbmRhdGVcIDsKK+S4oeecvCA+IHJ5b3VnYW5cIDsKK+S9leWHpiA+IGRva29pcmFcIDsKK+ixhueCrSA+IG1hbWV0YW5cIDsKK+Wun+WToSA+IGppdHN1aW5cIDsKK+eJuemBuCA+IHRva3VzZW5cIDsKK+Wuo+WRiiA+IHNlbmtva3VcIDsKK+S9neWDgiA+IHNlbXVzaGlcIDsKK+ePjeacrCA+IGNoaW5wb25cIDsKK+S7o+W9uSA+IGRhaXlha3VcIDsKK+S5sea1gSA+IHJhbnJ5dXVcIDsKK+S4gOerryA+IGlwcGFzaGlcIDsKK+S4ieeniyA+IHNhbnNodXVcIDsKK+WuueWFsSA+IHlvdWt5b3VcIDsKK+agoeWDlSA+IGtvdWJva3VcIDsKK+ePjeabuCA+IGNoaW5zaG9cIDsKK+S9leWFsSA+IG5hbnRvbW9cIDsKK+WvkuS4rSA+IGthbmNodXVcIDsKK+S4nuebuCA+IGpvdXNob3VcIDsKK+S4reeTtiA+IGNodXViaW5cIDsKK+S4h+emjyA+IG1hbnB1a3VcIDsKK+adpeacnSA+IHJhaWNob3VcIDsKK+iBt+W3pSA+IHNob2trb3VcIDsKK+WuheWcsCA+IHRha3VjaGlcIDsKK+S5s+axgSA+IG55dXVqdXVcIDsKK+WuruWIkSA+IGt5dXVrZWlcIDsKK+mjvOaWmSA+IHNoaXJ5b3VcIDsKK+S8j+WljyA+IGZ1a3Vzb3VcIDsKK+Wun+WPjiA+IGppc3NodXVcIDsKK+agoeWAiSA+IGF6ZWt1cmFcIDsKK+e/leeEtiA+IGt5dXV6ZW5cIDsKK+aWsOmuriA+IHNoaW5zZW5cIDsKK+ixiua8gSA+IGhvdXJ5b3VcIDsKK+itq+iogCA+IHV3YWdvdG9cIDsKK+acnea9riA+IGFzYXNoaW9cIDsKK+miqOa9riA+IGZ1dWNob3VcIDsKK+eQg+W9oiA+IGt5dXVrZWlcIDsKK+iDtOS4rSA+IGRvdW5ha2FcIDsKK+mgmuiCiSA+IGtlaW5pa3VcIDsKK+Wun+WNsCA+IGppdHN1aW5cIDsKK+S9nOS+iyA+IHNha3VyZWlcIDsKK+acrOa1gSA+IGhvbnJ5dXVcIDsKK+WvhuS6iyA+IG1pdHN1amlcIDsKK+S7sOWxsSA+IGd5b3VzYW5cIDsKK+S7j+aBqSA+IGJ1dHN1b25cIDsKK+S7luW+iyA+IHRhcml0c3VcIDsKK+adpeaYpSA+IHJhaWhhcnVcIDsKK+S5s+atryA+IG55dXVzaGlcIDsKK+S8keWgtCA+IGt5dXVqb3VcIDsKK+ePvuW9uSA+IGdlbicnZWtpXCA7CivkuIDnpLwgPiBpY2hpcmVpXCA7CivpoIboia8gPiBqdW5yeW91XCA7Civku5XlvaIgPiBzaGlrYXRhXCA7CivkuIrnn7MgPiB1d2Fpc2hpXCA7CivkuKHnlKggPiByeW91eW91XCA7CivkuKHnlJ8gPiByeW91c2VpXCA7Civlrp/li5kgPiBqaXRzdW11XCA7CivkupTmnIggPiBzYXRzdWtpXCA7CivlrZDlsYAgPiBrb2t5b2t1XCA7CivkuI3nnYAgPiBmdWNoYWt1XCA7CivkuIvnnYAgPiBzaGl0YWdpXCA7CivmnKrmsbogPiBtaWtldHN1XCA7CivlpKfpu5IgPiBkYWlrb2t1XCA7CivmoKHkuoYgPiBrb3VyeW91XCA7CivmmILpgLIgPiBrb3VzaGluXCA7Civku5XluqYgPiBzaGl0YWt1XCA7CivlrablpJYgPiBnYWt1Z2FpXCA7Civlrp/liKkgPiBqaXRzdXJpXCA7CivlrpfljKAgPiBzb3VzaG91XCA7CivpoKzntIUgPiBob29iZW5pXCA7CivlrZDlrq4gPiBzaGlreXV1XCA7CivpnaLplbcgPiBvbW9uYWdhXCA7CivorZjoqp4gPiBzaGlraWdvXCA7CivkvY7kv5cgPiB0ZWl6b2t1XCA7Civlrablo6sgPiBnYWt1c2hpXCA7CivkuIvnm64gPiBzaGl0YW1lXCA7CivlpYfpqqggPiBraWtvdHN1XCA7CivmnY/mnpcgPiBreW91cmluXCA7CivlrZHlrZEgPiBib3VmdXJpXCA7CivogZblvrMgPiBzZWl0b2t1XCA7Civmmpfnt5EgPiBhbnJ5b2t1XCA7CivppqzkuLsgPiBiYW51c2hpXCA7CivnibnotaYgPiB0b2t1c2hhXCA7CivkuI3nmbogPiBmdWhhdHN1XCA7CivkuZ3ms4kgPiBreXV1c2VuXCA7CivkvZXkurogPiBuYW5waXRvXCA7CivkvI/lnKggPiBmdWt1emFpXCA7CivogbflrokgPiBzaG9rdWFuXCA7CivlrprliYcgPiB0ZWlzb2t1XCA7CivmlrDpppkgPiBzaGlua291XCA7Civmma/oibIgPiBrZXNoaWtpXCA7CivlrprliLsgPiB0ZWlrb2t1XCA7CivmnZHmnIkgPiBzb24nJ3l1dVwgOwor5p2Q5pyoID4gemFpbW9rdVwgOwor5pyn5rCXID4gb2Jvcm9nZVwgOwor5LiH55uuID4gYmFubW9rdVwgOwor6LK35b6XID4ga2FpZG9rdVwgOwor6Zyy6aqoID4gcm9rb3RzdVwgOwor5LuP5bqnID4gYnV0c3V6YVwgOwor6aOb5pytID4gaGlzYXRzdVwgOwor5Lyd5ZSxID4gZGVuc2hvdVwgOwor5aSn6be6ID4gZGFpc2FnaVwgOwor5LiK55m9ID4gam91aGFrdVwgOwor6KuW6aeBID4gcm9uYmFrdVwgOwor6aKo5rWBID4gZnV1cnl1dVwgOwor5a2m5aCxID4gZ2FrdWhvdVwgOwor6IKJ5aOwID4gbmlrdXNlaVwgOwor5Luj5bCGID4gZGFpc2hvdVwgOwor6LGK5rKDID4gaG91eW9rdVwgOwor5paw6aSoID4gc2hpbmthblwgOwor5Lya5ZWGID4ga2Fpc2hvdVwgOwor6IGW5bufID4gc2VpYnlvdVwgOwor5a625Li7ID4geWFudXNoaVwgOwor5LiA552AID4gaXRjaGFrdVwgOwor5LiA55y8ID4gaWNoaWdhblwgOwor5LiA55y4ID4gaWNoaWJvdVwgOwor6K2Y6KaLID4gc2hpa2tlblwgOwor5p+Q5Zu9ID4gYm91a29rdVwgOwor5p2J5p2QID4gc3VnaXphaVwgOwor5LuB5b+DID4gamluc2hpblwgOwor5LiA55ygID4gaWNoaW1pblwgOwor5LuB5b6zID4gamludG9rdVwgOwor5a6b5YWIID4gYXRlc2FraVwgOwor55CG5bGIID4gcmlrdXRzdVwgOwor5paw6aKoID4gc2hpbnB1dVwgOwor5LiA55u0ID4gaXRjaG9rdVwgOwor5LuK5bm0ID4ga29uJyduZW5cIDsKK+iDmuS5syA+IGhhaW55dXVcIDsKK+S6jOaXpSA+IGZ1dHN1a2FcIDsKK+aWremjnyA+IGRhbmppa2lcIDsKK+WujOWLnSA+IGthbnNob3VcIDsKK+S5s+ajkiA+IG55dXVib3VcIDsKK+S5neatuyA+IGt5dXVzaGlcIDsKK+S4i+eVpSA+IGdlcnlha3VcIDsKK+eRnuWFhiA+IHp1aWNob3VcIDsKK+aWsOmhlCA+IHNoaW5nYW9cIDsKK+S4h+eXhSA+IG1hbmJ5b3VcIDsKK+iDjOS/oSA+IGhhaXNoaW5cIDsKK+iukuiHoyA+IHphbnNoaW5cIDsKK+S4u+a9riA+IHNodWNob3VcIDsKK+mfu+iEmiA+IGlua3lha3VcIDsKK+S4gOeZuiA+IGlwcGF0c3VcIDsKK+S4iueUsyA+IGpvdXNoaW5cIDsKK+e/vOajnyA+IHlva3V0b3VcIDsKK+S4ieeUtyA+IHNhbicnbmFuXCA7CivmnZDmlpkgPiB6YWlyeW91XCA7Civlrpjlg5ogPiBrYW5yeW91XCA7Civmlofps6UgPiBidW5jaG91XCA7CivkurrlvrMgPiBuaW50b2t1XCA7Civku7DlpKkgPiBneW91dGVuXCA7Civos4rlrrMgPiB6b2t1Z2FpXCA7CivkuK3ngrkgPiBjaHV1dGVuXCA7CivpoYznm64gPiBkYWltb2t1XCA7CivkurrlvaIgPiBuaW5neW91XCA7CivniZvou4ogPiBneXV1c2hhXCA7Civos4rlrZAgPiB6b2t1c2hpXCA7CivmnKzmpa0gPiBob25neW91XCA7CivogIHmnb4gPiByb3VzaG91XCA7Civml6fpgqYgPiBreXV1aG91XCA7Civmnpzlrp8gPiBrYWppdHN1XCA7CivkuIDnlbMgPiBpY2hpam91XCA7CivosqflvLEgPiBoaW5qYWt1XCA7CivniIbpoqggPiBiYWt1ZnV1XCA7CivogIHmnL0gPiByb3VreXV1XCA7Civml6npgJ8gPiBzYXNzb2t1XCA7Civml6fpgZMgPiBreXV1ZG91XCA7CivogIHmnKggPiByb3Vib2t1XCA7Civnibnoqo0gPiB0b2t1bmluXCA7CivkuIDnlLcgPiBpY2hpbmFuXCA7CivmnKzmo5ogPiBob25kYW5hXCA7CivlppnotqMgPiBteW91c2h1XCA7CivpnIrps6UgPiByZWljaG91XCA7CivnianosaEgPiBidXNzaG91XCA7Civku4/lr7ogPiBidXRzdWppXCA7CivmnKvmoqIgPiBtYXNzaG91XCA7Civoq5bpm6MgPiByb24nJ25hblwgOwor5LiK546JID4gam91ZGFtYVwgOwor5a6a5LyRID4gdGVpa3l1dVwgOwor6KuW6ZuGID4gcm9uc2h1dVwgOwor5p6X5a2mID4gcmluZ2FrdVwgOwor5a2m5ZWPID4gZ2FrdW1vblwgOwor6LGq5pePID4gZ291em9rdVwgOwor6IG35aC0ID4gc2hva3ViYVwgOwor5pys5qC8ID4gaG9ua2FrdVwgOwor5aW96YGpID4ga291dGVraVwgOwor5Lya5YmHID4ga2Fpc29rdVwgOwor5Li75rWBID4gc2h1cnl1dVwgOwor5pei6L+wID4ga2lqdXRzdVwgOwor576p54OIID4gZ2lyZXRzdVwgOwor54mp6K2wID4gYnV0c3VnaVwgOwor6LK45a62ID4ga2FzaGl5YVwgOwor5pyJ5q+SID4geXV1ZG9rdVwgOwor5paw6ZaLID4gc2hpbmthaVwgOwor5LiL54mpID4ga2FidXRzdVwgOwor5LuZ5aWzID4gc2VuJydueW9cIDsKK+eIhumbtyA+IGJha3VyYWlcIDsKK+S8j+WLoiA+IGZ1c2V6ZWlcIDsKK+eJueijvSA+IHRva3VzZWlcIDsKK+S4iueJqSA+IGpvdW1vbm9cIDsKK+eLguiAhSA+IGt5b3VzaGFcIDsKK+aeoOWkliA+IHdha3VnYWlcIDsKK+acrOacnSA+IGhvbmNob3VcIDsKK+eJueijhSA+IHRva3Vzb3VcIDsKK+mgmOepuiA+IHJ5b3VrdXVcIDsKK+WtpuWQjSA+IGdha3VtZWlcIDsKK+aXp+i5nyA+IGZ1cnVhdG9cIDsKK+acq+acnyA+IG1hdHN1Z29cIDsKK+acqOadryA+IG1va3VoYWlcIDsKK+isrOirliA+IGJ5dXVyb25cIDsKK+acqOadkCA+IG1va3V6YWlcIDsKK+S6q+W5tCA+IGt5b3VuZW5cIDsKK+WtpuWPiyA+IGdha3V5dXVcIDsKK+eMqeeMqSA+IHNob3Vqb3VcIDsKK+S8keWIiiA+IGt5dXVrYW5cIDsKK+acqOacrCA+IG1va3Vob25cIDsKK+S4i+eGsSA+IGdlbmV0c3VcIDsKK+eJqeiovCA+IGJ1c3Nob3VcIDsKK+WuieS9miA+IGFuJydpdHN1XCA7CivmnaXlvqkgPiByYWlmdWt1XCA7Civml6fot6EgPiBmdXJ1YXRvXCA7Civpm7fps6UgPiByYWljaG91XCA7Civku5nlooMgPiBzZW5reW91XCA7CivkuLnmr5IgPiB0YW5kb2t1XCA7Civml6fotr4gPiBreXV1c2hpXCA7CivmnKjmm5wgPiBtb2t1eW91XCA7Civmm7LmtaYgPiBreW9rdWhvXCA7CivpoZ7nhLwgPiBydWlzaG91XCA7CivpoqjmoLwgPiBmdXVrYWt1XCA7CivnkIPloLQgPiBreXV1am91XCA7Civmnb7lsYsgPiBtYXRzdXlhXCA7CivlrozkuoYgPiBrYW5yeW91XCA7CivpoK3nm64gPiB0b3Vtb2t1XCA7CivkuZ3mnIggPiBrdWdhdHN1XCA7CivkvI/lhbUgPiBmdWt1aGVpXCA7Civnibnono0gPiB0b2t1eXV1XCA7CivkubHmkoMgPiByYW5nZWtpXCA7CivnjaPmrLIgPiBqdXV5b2t1XCA7CivlpKnpoJggPiB0ZW5yeW91XCA7CivosqjlrqIgPiBrYWt5YWt1XCA7CivosYbmnb8gPiBtYW1laXRhXCA7CivlpKnpoIIgPiB0ZW5jaG91XCA7CivmnKjmmJ8gPiBtb2t1c2VpXCA7CivmnJ/mnKsgPiBraW1hdHN1XCA7Civos7zlhaUgPiBrb3VueXV1XCA7CivppIXlsYsgPiBtb2NoaXlhXCA7Civlq6HmiqsgPiBjaGFrdWhpXCA7CivmnJ3mnaUgPiBjaG91cmFpXCA7CivorKzoposgPiBieXV1a2VuXCA7CivpnIfpp60gPiBzaGluZ2FpXCA7CivkuIvngasgPiBzaGl0YWJpXCA7CivosYbmnKwgPiBtYW1laG9uXCA7Civos57lk4EgPiBzaG91aGluXCA7CivlrabliLYgPiBnYWt1c2VpXCA7CivlppnoqIggPiBteW91a2VpXCA7Civku4rlpJUgPiBrb24nJ3l1dVwgOwor54yf54qsID4gcnlvdWtlblwgOwor5Lmd5pifID4ga3l1dXNlaVwgOwor5ae/57W1ID4gc3VnYXRhZVwgOwor5aSx6ZmlID4gc2hpa2thblwgOwor6IG35ZOhID4gc2hva3VpblwgOwor5pa56YedID4gaG91c2hpblwgOwor5aSc6aOfID4geWFzaG9rdVwgOwor55CD5ZujID4ga3l1dWRhblwgOwor5paw6YutID4gc2hpbicnZWlcIDsKK+S4reautSA+IGNodXVkYW5cIDsKK+S4oea0iyA+IHJ5b3V5b3VcIDsKK+WkmumjnyA+IHRhc2hva3VcIDsKK+iCluWDjyA+IHNob3V6b3VcIDsKK+adseWxiyA+IGF6dW1heWFcIDsKK+ism+iqrSA+IGtvdWRva3VcIDsKK+WkqembsiA+IGFtYWd1bW9cIDsKK+S4jea9lCA+IGZ1a2V0c3VcIDsKK+WtpuWGhSA+IGdha3VuYWlcIDsKK+S4reatoyA+IGNodXVzZWlcIDsKK+S4reatoiA+IGNodXVzaGlcIDsKK+aWh+mdqSA+IGJ1bmtha3VcIDsKK+adn+W4ryA+IHNva3V0YWlcIDsKK+acn+aXpSA+IGtpaml0c3VcIDsKK+ism+iplSA+IGtvdWh5b3VcIDsKK+mjn+W+jCA+IHNob2t1Z29cIDsKK+S4jea7hSA+IGZ1bWV0c3VcIDsKK+eMm+eIhiA+IG1vdWJha3VcIDsKK+WtpuWDpyA+IGdha3Vzb3VcIDsKK+acneaWuSA+IGFzYWdhdGFcIDsKK+WklemiqCA+IHl1dWthemVcIDsKK+mfs+evgCA+IG9uc2V0c3VcIDsKK+Wkp+mZuCA+IHRhaXJpa3VcIDsKK+S5s+aIvyA+IG55dXVib3VcIDsKK+S8keS8miA+IGt5dXVrYWlcIDsKK+aWh+mbhiA+IGJ1bnNodXVcIDsKK+S4oeawjyA+IHJ5b3VzaGlcIDsKK+S7j+WbvSA+IGZ1a2tva3VcIDsKK+iBtOWPliA+IGNob3VzaHVcIDsKK+iBt+WNsCA+IHNob2t1aW5cIDsKK+eLrOecvCA+IGRva3VnYW5cIDsKK+acneaUvyA+IGNob3VzZWlcIDsKK+S4i+a5ryA+IHNoaW1veXVcIDsKK+miqOaVmSA+IGZ1dWt5b3VcIDsKK+aWsOmFkiA+IHNoaW5zaHVcIDsKK+WknOmcsiA+IHlvdHN1eXVcIDsKK+mdouiyrCA+IG1lbnNla2lcIDsKK+S6uuWjsCA+IGhpdG9nb2VcIDsKK+ePjeWunSA+IGNoaW5wb3VcIDsKK+e6kui2syA+IHRlbnNva3VcIDsKK+S4u+agvCA+IHNodWtha3VcIDsKK+adkeW6hCA+IHNvbnNob3VcIDsKK+WmhOiplSA+IG1vdWh5b3VcIDsKK+iBt+WLmSA+IHNob2t1bXVcIDsKK+mjr+WxiyA+IG1lc2hpeWFcIDsKK+aYhuiZqyA+IGtvbmNodXVcIDsKK+adv+WjgSA+IGl0YWthYmVcIDsKK+aWsOmDjiA+IHNoaW5yb3VcIDsKK+S6uuWigyA+IGppbmt5b3VcIDsKK+e6j+i2syA+IHRlbnNva3VcIDsKK+S7suWGrCA+IGNodXV0b3VcIDsKK+S5vuW+syA+IGtlbnRva3VcIDsKK+abuOajmiA+IHNob2RhbmFcIDsKK+WlveiqvyA+IGtvdWNob3VcIDsKK+WklemdhCA+IHl1dW1veWFcIDsKK+aWsOmBuCA+IHNoaW5zZW5cIDsKK+adpeWuhSA+IHJhaXRha3VcIDsKK+e9rueJqSA+IG9raW1vbm9cIDsKK+eNhOatuyA+IGdva3VzaGlcIDsKK+acq+aKgCA+IG1hdHN1Z2lcIDsKK+acreaJgCA+IGZ1ZGFzaG9cIDsKK+WklemcpyA+IHl1dWdpcmlcIDsKK+mgkueZvSA+IGhhbnBha3VcIDsKK+aXp+imsyA+IGt5dXVrYW5cIDsKK+S4iua1tyA+IHNoYW5oYWlcIDsKK+aWpOmHjyA+IGtpbnJ5b3VcIDsKK+aWsOmBkyA+IHNoaW5kb3VcIDsKK+S7suWFhCA+IGNodXVrZWlcIDsKK+aXouiorSA+IGtpc2V0c3VcIDsKK+iziuWQjSA+IHpva3VtZWlcIDsKK+aZqeeniyA+IGJhbnNodXVcIDsKK+WlveiplSA+IGtvdWh5b3VcIDsKK+S4iua1gSA+IGpvdXJ5dXVcIDsKK+WsjOWnvyA+IGt5b3VzaGlcIDsKK+aWsOmAoCA+IHNoaW56b3VcIDsKK+S5l+aPmyA+IG5vcmlrYWVcIDsKK+S4iea1gSA+IHNhbnJ5dXVcIDsKK+S4iua0myA+IGpvdXJha3VcIDsKK+mbjOm2jyA+IG1lbmRvcmlcIDsKK+acq+aIkCA+IHVyYW5hcmlcIDsKK+eJh+imqiA+IGthdGFveWFcIDsKK+izoOWEnyA+IGJhaXNob3VcIDsKK+S4iea0iyA+IHNhbicneW91XCA7Civnv4zmmakgPiB5b2t1YmFuXCA7CivkuZ3mi50gPiBreXV1aGFpXCA7Civku67lhY0gPiBrYXJpbWVuXCA7CivkuLjmnZAgPiBtYXJ1emFpXCA7Civku7vkvqAgPiBuaW5reW91XCA7CivkuqzlpKcgPiBreW91ZGFpXCA7Civml6foo70gPiBreXV1c2VpXCA7CivkuLjmnKwgPiBtYXJ1Ym9uXCA7CivogonkvZMgPiBuaWt1dGFpXCA7CivmnIjml6UgPiB0c3VraWhpXCA7CivkuKHmp5ggPiByeW91eW91XCA7CivpnIrplbcgPiByZWljaG91XCA7CivmnInmlpkgPiB5dXVyeW91XCA7Civpm4zps6UgPiBtZW5kb3JpXCA7CivmlbXpmaMgPiB0ZWtpamluXCA7CivpoIXnm64gPiBrb3Vtb2t1XCA7CivlpInpnakgPiBoZW5rYWt1XCA7CivkubHlv4MgPiByYW5zaGluXCA7CivkuIDmtaogPiBpY2hpcm91XCA7CivmlL7ps6UgPiBob3VjaG91XCA7CivlrIzlo7AgPiBreW91c2VpXCA7Civmlpnph5EgPiByeW91a2luXCA7CivogIHlvLEgPiByb3VqYWt1XCA7CivlpJXpl4cgPiB5dXV5YW1pXCA7CivmlbDpmrsgPiBzdXVzZWtpXCA7CivmnL3lu4MgPiBreXV1aGFpXCA7CivosaHlvaIgPiBzaG91a2VpXCA7CivmlrDou4ogPiBzaGluc2hhXCA7CivkuK3mnqIgPiBjaHV1c3V1XCA7CivkuovlsYAgPiBqaWt5b2t1XCA7Civmlofpjq4gPiBidW5jaGluXCA7CivkuKHmo7IgPiByeW91c2VpXCA7Civku67lgJ8gPiBrYXNoYWt1XCA7CivkuK3mnbEgPiBjaHV1dG91XCA7Civku6PlhaUgPiBkYWlueXV1XCA7CivkuIDms6EgPiBoaXRvYXdhXCA7CivmlZnppIogPiBreW91eW91XCA7Civpm6jpoqggPiBhbWVrYXplXCA7CivkuIvmra8gPiBzaGl0YWJhXCA7Civosarlt54gPiBnb3VzaHV1XCA7CivmnIDmlrAgPiBzYWlzaGluXCA7Civku6PlhJ8gPiBkYWlzaG91XCA7Civpnanoo4UgPiBrYXdhc291XCA7Civku4/ljbAgPiBmdXRzdWluXCA7CivkuLvmlZkgPiBzaHVreW91XCA7CivkuIDmsbogPiBpa2tldHN1XCA7Civkuovlrp8gPiBqaWppdHN1XCA7CivkuK3mm7QgPiBjaHV1a291XCA7Civkuojlr58gPiB5b3NhdHN1XCA7CivkuIDmsZcgPiBoaXRvYXNlXCA7Civoq7joqLMgPiBzaG93YWtlXCA7CivmnJ3mhrIgPiBjaG91a2VuXCA7Civlp6bnrZYgPiBrYW5zYWt1XCA7Civku7Lku5UgPiBuYWthc2hpXCA7CivmnKzlv4MgPiBob25zaGluXCA7Civku7Lku4sgPiBjaHV1a2FpXCA7Civku7LkurogPiBuYWtvdWRvXCA7CivkuqzlnLAgPiBreW91Y2hpXCA7CivmnKzlvqkgPiBob25wdWt1XCA7Civosrflj44gPiBiYWlzaHV1XCA7CivmlZnpoK0gPiBreW91dG91XCA7CivkuIDmr6sgPiBpY2hpZ291XCA7CivmnqDlhoUgPiB3YWt1bmFpXCA7CivkuK3mma8gPiBjaHV1a2VpXCA7CivkuIDmr5sgPiBpY2hpbW91XCA7CivogLPlnqIgPiBtaW1pYWthXCA7CivniafojYkgPiBib2t1c291XCA7CivmmYLnr4AgPiBqaXNldHN1XCA7CivpoZXmraMgPiBrZW5zaG91XCA7CivmnbHlm70gPiB0b3Vnb2t1XCA7CivlpKfph48gPiB0YWlyeW91XCA7CivmlZnpnq0gPiBreW91YmVuXCA7CivppKjlhoUgPiBrYW4nJ25haVwgOwor5Lit5pesID4gY2h1dWp1blwgOwor54up54yfID4gc2h1cnlvdVwgOwor5pu05pawID4ga291c2hpblwgOwor57im6ZqUID4ganV1a2FrdVwgOwor5Lit5patID4gY2h1dWRhblwgOwor6ZuR6aeBID4gemFwcGFrdVwgOwor6aCT54uCID4gdG9ua3lvdVwgOwor6Zuo6ZuyID4gYW1hZ3Vtb1wgOwor5aSx6YCPID4gc2hpdHRvdVwgOwor5Lih5pu/ID4gcnlvdWdhZVwgOwor6Zuq6ZqgID4gc2V0Y2hpblwgOwor5pen6JepID4ga3l1dWhhblwgOwor5Lit5pWwID4gY2h1dXN1dVwgOwor5pyr5bqnID4gbWF0c3V6YVwgOwor6aO05Z2KID4gYW1lbmJvdVwgOwor5Luj5L2cID4gZGFpc2FrdVwgOwor5pys5bqBID4gaG9uY2hvdVwgOwor5Li45pCNID4gbWFydXpvblwgOwor5p6X5YaFID4gcmluJyduYWlcIDsKK+acrOW5tCA+IGhvbicnbmVuXCA7Civoq6foqr8gPiBrYWljaG91XCA7CivmnKvluoMgPiBzdWVoaXJvXCA7CivkuK3mlK8gPiBjaHV1c2hpXCA7Civml4HoqLsgPiBib3VjaHV1XCA7Civku6PkvJEgPiBkYWlreXV1XCA7CivniafoiI4gPiBib2t1c2hhXCA7Civku4/lhbcgPiBidXRzdWd1XCA7CivkuqHlm70gPiBib3Vrb2t1XCA7CivorabnrJsgPiBrZWl0ZWtpXCA7CivmnKvluK0gPiBtYXNzZWtpXCA7CivorLnogbQgPiBraW5jaG91XCA7Civoq7jooYwgPiBzaG9neW91XCA7CivnjonluqcgPiBneW9rdXphXCA7CivogIHlsJEgPiByb3VzaG91XCA7CivmnKzlt54gPiBob25zaHV1XCA7Civml6folLUgPiBreXV1em91XCA7CivkuYXmh5AgPiBreXV1a2FpXCA7CivogIHlsIYgPiByb3VzaG91XCA7CivnjJvmr5IgPiBtb3Vkb2t1XCA7Civnt5jpu5kgPiBrYW5tb2t1XCA7Civku4vlhaUgPiBrYWlueXV1XCA7CivmmKjntJkgPiBzYWt1c2hpXCA7CivkuIDmp5ggPiBpY2hpeW91XCA7Civnv5LmhaMgPiBzaHV1a2FuXCA7Civmm53mm7ggPiBiYWt1c2hvXCA7CivkuKHmlrkgPiByeW91aG91XCA7CivosbnlpIkgPiBoeW91aGVuXCA7CivmlZHpm6MgPiBreXV1bmFuXCA7CivnkIPkvZMgPiBreXV1dGFpXCA7CivkuKHmlq0gPiByeW91ZGFuXCA7CivlpaXooYwgPiBva3V5dWtpXCA7CivmnJ3lu7cgPiBjaG91dGVpXCA7CivmlofpgJogPiBidW50c3V1XCA7Civpo5/loakgPiBzaG9rdWVuXCA7CivnhrHpm7IgPiBuZXRzdXVuXCA7Civpm7vpi7MgPiBkZW5jaHV1XCA7CivmlZnploAgPiBreW91bW9uXCA7Civpm5Hpn7MgPiB6YXRzdW9uXCA7Civmlrnop5IgPiBob3VnYWt1XCA7Civni5vniqwgPiBrb21haW51XCA7Civnj43llY8gPiBjaGlubW9uXCA7CivlpLHouKogPiBzaGlzc291XCA7CivniZvoiI4gPiBneXV1c2hhXCA7Civku5nkurogPiBzZW4nJ25pblwgOwor6ZuB6aaWID4gZ2Fua3ViaVwgOwor5pqm5rOVID4gcmVraWhvdVwgOwor5aSp6Lu4ID4gdGVuamlrdVwgOwor6Kqe6YeIID4gZ29zaGFrdVwgOwor5Lq65YmNID4gaGl0b21hZVwgOwor54++5Lu7ID4gZ2VuJyduaW5cIDsKK+WknOmBkyA+IHlvbWljaGlcIDsKK+irluiqvyA+IHJvbmNob3VcIDsKK+S5meW3oSA+IG90c3VqdW5cIDsKK+Wkj+mHjiA+IG5hdHN1bm9cIDsKK+e/kuaApyA+IHNodXVzZWlcIDsKK+WklumDrSA+IGdhaWtha3VcIDsKK+ePjeWTgSA+IGNoaW5waW5cIDsKK+acneW4giA+IGFzYWljaGlcIDsKK+WlieiqrSA+IGhvdWRva3VcIDsKK+WsjOWQjSA+IGt5b3VtZWlcIDsKK+aYvOekvCA+IGNodXVyZWlcIDsKK+eJp+iAhSA+IGJva3VzaGFcIDsKK+eNo+aFviA+IGp1dXlva3VcIDsKK+acq+WwviA+IG1hdHN1YmlcIDsKK+S4i+acnyA+IHNoaW1va2lcIDsKK+Wkp+i6qyA+IHRhaXNoaW5cIDsKK+mgreazqCA+IHRvdWNodXVcIDsKK+aVsOmHjyA+IHN1dXJ5b3VcIDsKK+eHl+mFkiA+IGthbnpha2VcIDsKK+S7leS6iyA+IHNoaWdvdG9cIDsKK+aWsOiogiA+IHNoaW50ZWlcIDsKK+irluiplSA+IHJvbnB5b3VcIDsKK+S4iuacjSA+IHV3YWZ1a3VcIDsKK+acqOWxpSA+IHBva2t1cmlcIDsKK+acq+WvuiA+IG1hdHN1amlcIDsKK+irluiovCA+IHJvbnNob3VcIDsKK+eJqee9riA+IG1vbm9va2lcIDsKK+acjeW+kyA+IGZ1a3VqdXVcIDsKK+S4ieaciCA+IG1pdHN1a2lcIDsKK+acjeW9uSA+IGZ1a3Vla2lcIDsKK+S4oeaQjSA+IHJ5b3V6b25cIDsKK+eJm+iEgiA+IGd5dXVzaGlcIDsKK+eJp+e+iiA+IGJva3V5b3VcIDsKK+aWh+i6qyA+IGJ1bnNoaW5cIDsKK+Wjq+mVtyA+IHNoaWNob3VcIDsKK+WkiemHjyA+IGhlbnJ5b3VcIDsKK+S4h+aciSA+IGJhbicneXV1XCA7CivmnKzlroUgPiBob250YWt1XCA7Civmm7LmioAgPiBreW9rdWdpXCA7CivpnZLom5kgPiBhb2dhZXJ1XCA7CivmnInlvrMgPiB5dXV0b2t1XCA7CivnibnntJogPiB0b2treXV1XCA7CivnjK7mnKggPiBrZW5ib2t1XCA7Civpo5vlnLAgPiB0b2JpY2hpXCA7CivnjKvmnb8gPiBuZWtvaXRhXCA7Civml6Xoi7EgPiBuaWNoaWVpXCA7Civku4/kuosgPiBidXRzdWppXCA7Civoq4vorIEgPiBzZWlldHN1XCA7CivmmJPntYwgPiBla2lreW91XCA7Civoqanpm4YgPiBzaGlzaHV1XCA7Civosp3libIgPiBrYWl3YXJpXCA7CivkuI3ml6UgPiBmdWppdHN1XCA7CivmmpbmtYEgPiBkYW5yeXV1XCA7CivkuIDmnaEgPiBpY2hpam91XCA7CivpnZLomasgPiBhb211c2hpXCA7Civoq5Lop6MgPiByeW91a2FpXCA7CivmlLnpnakgPiBrYWlrYWt1XCA7CivkuIrmmIcgPiBqb3VzaG91XCA7CivkuInmmKUgPiBzYW5zaHVuXCA7CivmnL3lo4ogPiBreXV1a2FpXCA7CivkuIDmnK0gPiBpc3NhdHN1XCA7CivogJDlnKcgPiB0YWlhdHN1XCA7CivkuIDmnJsgPiBpY2hpYm91XCA7CivmlrDoo4UgPiBzaGluc291XCA7CivnuKvph50gPiBudWliYXJpXCA7Civku4HkvqAgPiBqaW5reW91XCA7CivpoILngrkgPiBjaG91dGVuXCA7CivkuIDmm7IgPiBpa2t5b2t1XCA7CivkuLnlv7UgPiB0YW4nJ25lblwgOwor6Z+z54mpID4gaW5tb3RzdVwgOwor5pel6IieID4gbmljaGlidVwgOwor5pen6IeYID4ga3l1dXJvdVwgOwor542j5b+DID4ganV1c2hpblwgOwor6KuL6KiXID4gc2VpdGFrdVwgOwor5Li55b+DID4gdGFuc2hpblwgOwor6ICB5aKDID4gcm91a3lvdVwgOwor5Li75b25ID4gc2h1eWFrdVwgOwor5aSn6LOeID4gdGFpc2hvdVwgOwor5LuK5LiAID4gaW1haWNoaVwgOwor5LiH5pabID4gYmFua29rdVwgOwor5LiJ5pWZID4gc2Fua3lvdVwgOwor5LiA5pmpID4gaGl0b2JhblwgOwor6aCY5rW3ID4gcnlvdWthaVwgOwor5Li75by1ID4gc2h1Y2hvdVwgOwor5aSp6LGhID4gdGVuc2hvdVwgOwor5pmp54afID4gYmFuanVrdVwgOwor5aal57WQID4gZGFrZXRzdVwgOwor5pil56eLID4gaGFydWFraVwgOwor6LKp5L+DID4gaGFuc29rdVwgOwor54mb57y2ID4gZ3l1dWthblwgOwor5pyA5by3ID4gc2Fpa3lvdVwgOwor5aSJ6YCfID4gaGVuc29rdVwgOwor5aSJ6YCaID4gaGVudHN1dVwgOwor54uC54qsID4ga3lvdWtlblwgOwor57+M5bm0ID4geW9rdW5lblwgOwor5pmp54WnID4gYmFuc2hvdVwgOwor6Kyb57+SID4ga291c2h1dVwgOwor5paH6LKsID4gYnVuc2VraVwgOwor5pqX5q66ID4gYW5zYXRzdVwgOwor5pW16LuNID4gdGVraWd1blwgOwor54m5562JID4gdG9rdXRvdVwgOwor54mH6IWVID4ga2F0YXVkZVwgOwor5aWH6KGTID4ga2lqdXRzdVwgOwor5LiA5pesID4gaWNoaWp1blwgOwor5Lme5am/ID4ga29pbXVrb1wgOwor6aC45qSOID4ga2VpdHN1aVwgOwor6LKs5Lu7ID4gc2VraW5pblwgOwor6aGU5paZID4gZ2FucnlvdVwgOwor6KqV6L6wID4gdGFuc2hpblwgOwor5pac6KeSID4gc2hha2FrdVwgOwor5pyr5aWzID4gbWF0c3Vqb1wgOwor6aGV5pWZID4ga2Vua3lvdVwgOwor5Lit5oCnID4gY2h1dXNlaVwgOwor5pyx5aKoID4gc2h1Ym9rdVwgOwor5LiB5pWwID4gY2hvdXN1dVwgOwor5LiA5paHID4gaWNoaW1vblwgOwor5peX6ImyID4gaGF0YWlyb1wgOwor5pqX5qydID4gYW4nJ3V0c3VcIDsKK+Wls+iJsiA+IGpvc2hva3VcIDsKK+aXp+iBniA+IGt5dXVidW5cIDsKK+eJh+iCuiA+IGthdGFoYWlcIDsKK+S4u+W4rSA+IHNodXNla2lcIDsKK+aUr+manCA+IHNoaXNob3VcIDsKK+acseWhlyA+IHNodW51cmlcIDsKK+S7gOS4gCA+IGp1dWljaGlcIDsKK+mgmOawtCA+IHJ5b3VzdWlcIDsKK+mdouiItSA+IG9tb2thamlcIDsKK+mgmOawkSA+IHJ5b3VtaW5cIDsKK+S4uOW4ryA+IG1hcnVvYmlcIDsKK+e3j+mrmCA+IHNvdWRha2FcIDsKK+isgOiHoyA+IGJvdXNoaW5cIDsKK+WjsOmHjyA+IHNlaXJ5b3VcIDsKK+acp+WknCA+IG9ib3JveW9cIDsKK+Wkiei6qyA+IGhlbnNoaW5cIDsKK+WjgemdoiA+IGhla2ltZW5cIDsKK+e/sOWiqCA+IGthbmJva3VcIDsKK+S5meWnqyA+IG90b2hpbWVcIDsKK+eOhOWmmSA+IGdlbm15b3VcIDsKK+e+uOW8sSA+IHJ1aWpha3VcIDsKK+WkqeiqhSA+IHRlbmNodXVcIDsKK+S5neWkqSA+IGt5dXV0ZW5cIDsKK+S5neWkpyA+IGt5dXVkYWlcIDsKK+S4ieaMryA+IHNhbnNoaW5cIDsKK+S6jOWNgSA+IGhhdGFjaGlcIDsKK+S4jeaKnCA+IGZ1YmF0c3VcIDsKK+S4reW6uCA+IGNodXV5b3VcIDsKK+mhleaPmiA+IGtlbicneW91XCA7CivlpKfoqbAgPiBvb2R6dW1lXCA7CivkuKHmgKcgPiByeW91c2VpXCA7Civoqr/oo70gPiBjaG91c2VpXCA7CivosarllYYgPiBnb3VzaG91XCA7Civmlofoqr8gPiBidW5jaG91XCA7CivlpKfoqZQgPiB0YWlzaG91XCA7Civmm7LluqYgPiBreW9rdWRvXCA7CivkuK3lubQgPiBjaHV1bmVuXCA7Civnt6jpm4YgPiBoZW5zaHV1XCA7CivkuIDmj6EgPiBpY2hpYWt1XCA7Civmm7LluocgPiBreW9rdWhpXCA7CivlqYnmm7IgPiBlbmt5b2t1XCA7Civoqqzoq60gPiBzZXRzdXl1XCA7Civni4LngL4gPiBreW91cmFuXCA7CivkuqTkv6EgPiBrb3VzaGluXCA7CivkuK3luL0gPiBjaHV1Ym91XCA7CivmmKXnnKAgPiBzaHVubWluXCA7CivpoKzmoYEgPiBob29nZXRhXCA7CivkuK3lt7sgPiBjaHV1a2FuXCA7Civniafnq6UgPiBib2t1ZG91XCA7CivmnbHkuqwgPiB0b3VreW91XCA7CivmnKzlm70gPiBob25nb2t1XCA7CivoqqzoqbEgPiBzZXRzdXdhXCA7Civpo5/liLggPiBzaG9ra2VuXCA7CivkuLvlsIYgPiBzaHVzaG91XCA7CivmnaXkv6EgPiByYWlzaGluXCA7CivmnIDlsJEgPiBzYWlzaG91XCA7CivmnIDlsI8gPiBzYWlzaG91XCA7CivkuLvlr6kgPiBzaHVzaGluXCA7CivkuozliJcgPiBuaXJldHN1XCA7CivkuIDmi6wgPiBpa2thdHN1XCA7CivpnZ7ogbcgPiBoaXNob2t1XCA7CivmlLnpi7MgPiBrYWljaHV1XCA7CivnjJvmkoMgPiBtb3VnZWtpXCA7CivmlY/pgJ8gPiBiaW5zb2t1XCA7CivpoKzmnZYgPiBob29kenVlXCA7CivmlrDokZcgPiBzaGluY2hvXCA7Civnj43ku4AgPiBjaGluanV1XCA7Civnvp7mgaUgPiBzaHV1Y2hpXCA7CivkuZ3lnLAgPiBreXV1Y2hpXCA7CivmmI7norogPiBtZWlrYWt1XCA7Civnt4/poY0gPiBzb3VnYWt1XCA7CivkuozlhasgPiBuaWhhY2hpXCA7Civoq6voh6MgPiBrYW5zaGluXCA7CivpnZnogbQgPiBzZWljaG91XCA7Civmma/ms4EgPiBrZWlreW91XCA7Civnt4/poJggPiBzb3VyeW91XCA7Civml6XntaYgPiBuaWtreXV1XCA7CivlpKfooYYgPiB0YWlzaHV1XCA7CivmnLHllIcgPiBzaHVzaGluXCA7Civpm4bph5EgPiBzaHV1a2luXCA7Civpm6jotrMgPiBhbWVhc2hpXCA7CivmlbToqr8gPiBzZWljaG91XCA7CivmlbfoqK0gPiBmdXNldHN1XCA7CivmmqbmlbAgPiByZWtpc3V1XCA7CivmlrDojLYgPiBzaGluY2hhXCA7CivpoqjlnKcgPiBmdXVhdHN1XCA7Civnt4/pnakgPiBzb3VnYXdhXCA7CivkuK3lsIogPiBjaHV1em9uXCA7CivlpJbop5IgPiBnYWlrYWt1XCA7CivkuK3lsIYgPiBjaHV1am91XCA7CivmmI7nnq0gPiBtZWlyeW91XCA7CivnuLfoqqwgPiBydXNldHN1XCA7Civpm4bphY0gPiBzaHV1aGFpXCA7CivmnIjlpK4gPiBnZXRzdW91XCA7CivkuK3lrq4gPiBjaHV1Z3V1XCA7Civntr/po7QgPiB3YXRhYW1lXCA7CivmnIjlpJwgPiB0c3VraXlvXCA7CivniYjnsY0gPiBoYW5zZWtpXCA7CivlpInoqr8gPiBoZW5jaG91XCA7CivkuInlvrMgPiBzYW50b2t1XCA7CivpmbDprLEgPiBpbicndXRzdVwgOwor57eR6ZmwID4gcnlva3VpblwgOwor5pW16KaWID4gdGVraXNoaVwgOwor6Kyb56m2ID4ga291a3l1dVwgOwor5pS+6YC4ID4gaG91aXRzdVwgOwor5LiK5b25ID4gdXdheWFrdVwgOwor5aKX6aGNID4gem91Z2FrdVwgOwor5LiA5oGvID4gaGl0b2lraVwgOwor5paw6IiIID4gc2hpbmtvdVwgOwor5Lmz5YmkID4gbnl1dXphaVwgOwor5piO55m9ID4gbWVpaGFrdVwgOwor5pS56YCyID4ga2Fpc2hpblwgOwor5LiL5bqnID4gc2hpbW96YVwgOwor6KyZ56ewID4ga2Vuc2hvdVwgOwor6aCY5pyJID4gcnlvdXl1dVwgOwor5LiA5b+1ID4gaWNoaW5lblwgOwor5LiH5byVID4gbWFuYmlraVwgOwor6ICV5L2cID4ga291c2FrdVwgOwor54m555SjID4gdG9rdXNhblwgOwor6aGV5b2wID4ga2Vuc2hvdVwgOwor5pyo5Y+jID4ga2lndWNoaVwgOwor5LiA5b65ID4gaXR0ZXRzdVwgOwor6aGU5b25ID4ga2FveWFrdVwgOwor57+75Yi7ID4gaG9ua29rdVwgOwor6aOf5LqLID4gc2hva3VqaVwgOwor57eP6ZW3ID4gc291Y2hvdVwgOwor5LiJ5bm0ID4gc2FuJyduZW5cIDsKK+aXpeeriyA+IGhpdGFjaGlcIDsKK+aVkeiypyA+IGt5dXVoaW5cIDsKK+aWreiFuCA+IGRhbmNob3VcIDsKK+S4iuW4rSA+IGpvdXNla2lcIDsKK+iqjeiovCA+IG5pbnNob3VcIDsKK+adj+S7gSA+IGt5b3VuaW5cIDsKK+S4h+W5tCA+IG1hbicnbmVuXCA7CivniannmoQgPiBidXR0ZWtpXCA7Civml6fnqL8gPiBreXV1a291XCA7CivpmbjpoqggPiByaWt1ZnV1XCA7CivkuIDlvI8gPiBpc3NoaWtpXCA7CivmnJfllLEgPiByb3VzaG91XCA7Civni4LmrbsgPiBreW91c2hpXCA7CivogIHlg5UgPiByb3Vib2t1XCA7CivnvqTlsI8gPiBndW5zaG91XCA7Civnirbms4EgPiBqb3VreW91XCA7CivmlrDogZ4gPiBzaGluYnVuXCA7CivkuK3lpK0gPiBjaHV1eW91XCA7CivmnKzliYcgPiBob25zb2t1XCA7CivkuK3lpKkgPiBjaHV1dGVuXCA7CivntrHpoJggPiBrb3VyeW91XCA7CivkuK3lpJYgPiBjaHV1Z2FpXCA7CivmlZnoqqggPiBreW91a2FpXCA7CivlpbTnrYkgPiB5YXRzdXJhXCA7Civni6zmlq0gPiBkb2t1ZGFuXCA7CivoqbDosqwgPiBraXNzZWtpXCA7CivogJDkuYUgPiB0YWlreXV1XCA7CivpmorplbcgPiB0YWljaG91XCA7Civpm6Poqq0gPiBuYW5kb2t1XCA7CivpoaflrqIgPiBrb2t5YWt1XCA7Civni6zmlocgPiBkb2t1YnVuXCA7CivkuIDluJYgPiBpY2hpam91XCA7Civml5fnq78gPiBoYXRhemFvXCA7CivpnIrolqwgPiByZWl5YWt1XCA7CivkuIDlt6EgPiBpY2hpanVuXCA7CivnhLzpppkgPiBzaG91a291XCA7CivmlZnoqJMgPiBreW91a3VuXCA7CivkuI3lsYggPiBmdWt1dHN1XCA7CivmnKjliIAgPiBib2t1dG91XCA7CivntprpqLAgPiB6b2t1dG91XCA7CivmlrDnvoUgPiBzaGlyYWdpXCA7Civlo7Doqr8gPiBzZWljaG91XCA7CivlopfplbcgPiB6b3VjaG91XCA7CivmmoHmmJ8gPiBneW91c2VpXCA7Civpmbrpm6MgPiBrZW4nJ25hblwgOwor5LiK5bGlID4gdXdhYmFraVwgOwor5pys5YWDID4gaG9ubW90b1wgOwor5Lit5aCFID4gY2h1dWtlblwgOwor5Lit5aCCID4gY2h1dWRvdVwgOwor5aSP6JqVID4gbmF0c3Vnb1wgOwor5LiJ5bC6ID4gc2FuamFrdVwgOwor5aSp6I2JID4gdGVuZ3VzYVwgOwor5pyI5ZWGID4gZ2Vzc2hvdVwgOwor57ea6YePID4gc2VucnlvdVwgOwor5LiN5a6fID4gZnVqaXRzdVwgOwor6Z2i56mNID4gbWVuc2VraVwgOwor5LiL5a6/ID4gZ2VzaHVrdVwgOwor6K2w5rG6ID4gZ2lrZXRzdVwgOwor5Lmx5L2cID4gcmFuc2FrdVwgOwor5LiL5a62ID4gc2hpdGF5YVwgOwor5LiK5a6/ID4gam91eWFkb1wgOwor6LGK5Ye2ID4gaG91a3lvdVwgOwor54yf5birID4gcnlvdXNoaVwgOwor5pen55+lID4ga3l1dWNoaVwgOwor54mb55eYID4gZ3l1dXRvdVwgOwor6Kmz6KuWID4gc2hvdXJvblwgOwor54mp55CGID4gYnV0c3VyaVwgOwor5pu05ZywID4gc2FyYWNoaVwgOwor54mb55arID4gZ3l1dWVraVwgOwor5pyo5YOPID4gbW9rdXpvdVwgOwor5pyd5YiKID4gY2hvdWthblwgOwor5pyd5YeqID4gYXNhbmFnaVwgOwor5Li75ZSxID4gc2h1c2hvdVwgOwor57eo6LyvID4gaGVuc2h1dVwgOwor5LiA5bGAID4gaWtreW9rdVwgOwor5LiA5bC6ID4gaXNzaGFrdVwgOwor54us5o6iID4gZG9rdXRhblwgOwor57eR6YeOID4gcnlva3V5YVwgOwor5LiD5a6dID4gc2hpcHBvdVwgOwor6Kmz6KiAID4gc2hvdWdlblwgOwor57eP6YePID4gc291cnlvdVwgOwor5pen55ukID4ga3l1dWJhblwgOwor6Kmz6KejID4gc2hvdWthaVwgOwor5aWR57SEID4ga2VpeWFrdVwgOwor6Zuj6KGMID4gbmFuZ3lvdVwgOwor5pyI5Y+OID4gZ2Vzc2h1dVwgOwor6ZuR6KmxID4gemF0c3V3YVwgOwor5pen55uGID4ga3l1dWJvblwgOwor5LiA5a6/ID4gaXNzaHVrdVwgOwor5Lmx5LiBID4gcmFuY2hvdVwgOwor54Sh6aqoID4gYnVrb3RzdVwgOwor5aOy6KGMID4gdXJleXVraVwgOwor6aCB5pWwID4gcMSTamlzdXVcIDsKK+aWree2miA+IGRhbnpva3VcIDsKK+mfs+absiA+IG9uZ3lva3VcIDsKK+S4gOWtmCA+IGljaGl6b25cIDsKK+WkleiPhSA+IHl1dXN1Z2VcIDsKK+aWveetliA+IHNoaXNha3VcIDsKK+aXpeeZvSA+IG5pcHBha3VcIDsKK+Wkp+iFuCA+IGRhaWNob3VcIDsKK+eJoueNhCA+IHJvdWdva3VcIDsKK+eKrOaphyA+IGludXpvcmlcIDsKK+S4juWlqiA+IHlvZGF0c3VcIDsKK+acrOS6uiA+IGhvbicnbmluXCA7CivpmaTpm6ogPiBqb3NldHN1XCA7Civnhp/oq4cgPiBqdWt1ZGFuXCA7CivlpLHogIMgPiBzaGlra291XCA7CivniaHnjKsgPiBvc3VuZWtvXCA7CivmmanmmKUgPiBiYW5zaHVuXCA7CivlpJzoibIgPiB5YXNob2t1XCA7Civni6zmiL8gPiBkb2t1Ym91XCA7Civmma/mlZkgPiBrZWlreW91XCA7CivkuK3llZMgPiBjaHV1a2VpXCA7CivmlrDnsbMgPiBzaGlubWFpXCA7CivmlrnnrZYgPiBob3VzYWt1XCA7Civniqzmp5kgPiBpbnVtYWtpXCA7CivmnKjku48gPiBraWJ1dHN1XCA7Civml6nnlaogPiBoYXlhYmFuXCA7CivlpJroibIgPiB0YXNob2t1XCA7CivmmqblubQgPiByZWtpbmVuXCA7CivmnKzkuLggPiBob25tYXJ1XCA7CivmmanmlrkgPiBiYW5nYXRhXCA7CivlpKnogbQgPiB0ZW5jaG91XCA7Civnua3ntKwgPiBrZW5jaHV1XCA7CivnjJ/lrpggPiByeW91a2FuXCA7CivpnZLnpaggPiBzZWloeW91XCA7CivosYrkvZwgPiBob3VzYWt1XCA7CivnjJvlsIYgPiBtb3VzaG91XCA7Civpoqjkv5cgPiBmdXV6b2t1XCA7Civni4LmmrQgPiBreW91Ym91XCA7CivkuIrlo7AgPiBqb3VzaG91XCA7CivkuIjlpKsgPiBtYXN1cmFvXCA7CivmnIjliKkgPiBnZXRzdXJpXCA7CivmlLnoqLMgPiBrYWl5YWt1XCA7Civlopfph48gPiB6b3VyeW91XCA7Civpm7bokL0gPiByZWlyYWt1XCA7CivkuLjljYEgPiBtYXJ1anV1XCA7Civpm4boqIggPiBzaHV1a2VpXCA7CivoqbHooZMgPiB3YWp1dHN1XCA7CivniZ3niqwgPiBtZXN1aW51XCA7Civnhp/opqcgPiBqdWt1cmFuXCA7Civnhp/oppYgPiBqdWt1c2hpXCA7CivpnaLnm64gPiBtZW5tb2t1XCA7CivnhY7pjYsgPiBpcmluYWJlXCA7CivnjoTkurogPiBrdXJvdXRvXCA7Civmlq3nrrEgPiBkYW5iYWtvXCA7CivmnJ3kvJogPiBjaG91a2FpXCA7CivloavpmpkgPiB0ZW5nZWtpXCA7CivkuIrloZcgPiB1d2FudXJpXCA7CivkuIDlpoIgPiBpY2hpbnlvXCA7CivkuI3ln5IgPiBmdXJhY2hpXCA7Civnt4rov6sgPiBraW5wYWt1XCA7CivkuIflooMgPiBiYW5reW91XCA7Civoq5bnrZYgPiByb25zYWt1XCA7CivoqLPovIkgPiB5YWt1c2FpXCA7CivmnInlhJ8gPiB5dXVzaG91XCA7CivmmI7mvoQgPiBtZWljaG91XCA7CivkuIDlpKcgPiBpY2hpZGFpXCA7CivoqZXoq5YgPiBoeW91cm9uXCA7Civoqr/nt7QgPiBjaG91cmVuXCA7CivkuK3ljp8gPiBjaHV1Z2VuXCA7CivoqqTohLEgPiBnb2RhdHN1XCA7Civni4LmlocgPiBreW91YnVuXCA7Civoqq3ogIUgPiBkb2t1c2hhXCA7Civlo7LolqwgPiBiYWl5YWt1XCA7CivosYbkubMgPiB0b3VueXV1XCA7CivkuIDlo7AgPiBoaXRva29lXCA7CivpnIrogokgPiByZWluaWt1XCA7CivkuK3ljYogPiBjaHV1aGFuXCA7CivmlpnntJkgPiByeW91c2hpXCA7CivmlbTohbggPiBzZWljaG91XCA7CivkuIvlnLAgPiBzaGl0YWppXCA7CivmlrDnqK4gPiBzaGluc2h1XCA7CivlopfpgLIgPiB6b3VzaGluXCA7CivpnaLnlpQgPiBtZW5jaG91XCA7CivpoILmiLQgPiBjaG91ZGFpXCA7Civoq5bnqbYgPiByb25reXV1XCA7CivmlrDnqI4gPiBzaGluemVpXCA7CivpmY3pm7kgPiBrb3VoeW91XCA7CivpnZnnmoQgPiBzZWl0ZWtpXCA7CivoqZXoqIAgPiBoeW91Z2VuXCA7CivkuIvlm7MgPiBzaGl0YXp1XCA7CivkuIDloYEgPiBpY2hpcnVpXCA7CivmlLnooYwgPiBrYWlneW91XCA7CivkuIDloLQgPiBpY2hpam91XCA7CivkuLjlhawgPiBtYXJ1a291XCA7Civoqp7ohIggPiBnb215YWt1XCA7Civlpb3nkIMgPiBrb3VreXV1XCA7CivkuInlm70gPiBzYW5nb2t1XCA7CivkuKHlkI0gPiByeW91bWVpXCA7Civpmo/ouqsgPiB6dWlzaGluXCA7CivkuIDloIIgPiBpY2hpZG91XCA7CivkuIflm70gPiBiYW5rb2t1XCA7CivnhKHpm5EgPiBtdXphdHN1XCA7CivkuK3liY0gPiBjaHV1emVuXCA7CivopqrpuJ4gPiBzaGlucmFuXCA7CivmlpnnsKEgPiByeW91a2VuXCA7Civpm7vohLMgPiBkZW4nJ25vdVwgOwor5Lit5YikID4gY2h1dWJhblwgOwor5Lit5YiGID4gY2h1dWJ1blwgOwor57W26aCCID4gemV0Y2hvdVwgOwor6aCR5by3ID4gZ2Fua3lvdVwgOwor5pen54mIID4ga3l1dWJhblwgOwor57mL57ibID4ga2VpYmFrdVwgOwor5peP55SfID4gem9rdXNlaVwgOwor6KuH56yRID4gZGFuc2hvdVwgOwor5aSq57O4ID4gZnV0b2l0b1wgOwor5aeL5qWtID4gc2hpZ3lvdVwgOwor5LiA5ZujID4gaWNoaWRhblwgOwor6KiY6L+wID4ga2lqdXRzdVwgOwor5pep54afID4gc291anVrdVwgOwor6KqH6ImyID4ga29zaG9rdVwgOwor6KiX6YCBID4gdGFrdXNvdVwgOwor6KiI6YePID4ga2VpcnlvdVwgOwor57Wx6aCYID4gdG91cnlvdVwgOwor6ZuM6JiCID4gbWVzaGliZVwgOwor5Lit5YWDID4gY2h1dWdlblwgOwor6aCG5b+cID4ganVuJydub3VcIDsKK+mZuOmAgSA+IHJpa3Vzb3VcIDsKK+aciOS6iyA+IGdldHN1amlcIDsKK+imqumzpSA+IG95YWRvcmlcIDsKK+e1pumkiiA+IGt5dXV5b3VcIDsKK+eJueautSA+IHRva3VkYW5cIDsKK+S4oeWJjSA+IHJ5b3VtYWVcIDsKK+Wkp+eykiA+IG9vdHN1YnVcIDsKK+S4ieWUsSA+IHNhbnNob3VcIDsKK+S4iuWUhyA+IGpvdXNoaW5cIDsKK+iok+i/qiA+IGt1bnRla2lcIDsKK+eJueauiiA+IHRva3VzaHVcIDsKK+iqrOe1jCA+IHNla2t5b3VcIDsKK+Wig+mBhyA+IGt5b3VndXVcIDsKK+aXpeeFpyA+IG5pc3Nob3VcIDsKK+aVkeiNkiA+IGt5dXVrb3VcIDsKK+ippuiWrCA+IHNoaXlha3VcIDsKK+ipkOihkyA+IHNhanV0c3VcIDsKK+S4oeWIhiA+IHJ5b3VidW5cIDsKK+mbjOiViiA+IG1lc2hpYmVcIDsKK+S4oeWIgCA+IHJ5b3V0b3VcIDsKK+aSpemfsyA+IGhhdHN1b25cIDsKK+abuOS/oSA+IHNob3NoaW5cIDsKK+aZguaXpSA+IGppaml0c3VcIDsKK+S4gOWWnSA+IGlra2F0c3VcIDsKK+S4jeWQiSA+IGZ1a2l0c3VcIDsKK+e3qeihnSA+IGthbnNob3VcIDsKK+S4iuWRiiA+IGpvdWtva3VcIDsKK+S4oeWFqCA+IHJ5b3V6ZW5cIDsKK+mZuOi7jSA+IHJpa3VndW5cIDsKK+S4oeWFmiA+IHJ5b3V0b3VcIDsKK+S4gOWVjyA+IGljaGltb25cIDsKK+iovOiogCA+IHNob3VnZW5cIDsKK+aYh+axniA+IHNob3Vrb3VcIDsKK+mbqOiEmiA+IGFtZWFzaGlcIDsKK+aWsOebpCA+IHNoaW5iYW5cIDsKK+iou+inoyA+IGNodXVrYWlcIDsKK+mfu+W+iyA+IGlucml0c3VcIDsKK+aatOWcpyA+IGJvdWF0c3VcIDsKK+WkqeeruiA+IHRlbmppa3VcIDsKK+ioseirviA+IGt5b2Rha3VcIDsKK+eIhueglSA+IGJha3VzYWlcIDsKK+S4oeWDjyA+IHJ5b3V6b3VcIDsKK+eLguaFiyA+IGt5b3V0YWlcIDsKK+Wkp+eskSA+IHRhaXNob3VcIDsKK+Wpv+WFpSA+IG11a29pcmlcIDsKK+ios+ipqSA+IHlha3VzaGlcIDsKK+aYh+auvyA+IHNob3VkZW5cIDsKK+mbouiEsSA+IHJpZGF0c3VcIDsKK+ios+ipniA+IHlha3VzaGlcIDsKK+aYh+autSA+IHNob3VkYW5cIDsKK+eJp+awkSA+IGJva3VtaW5cIDsKK+WkqeeqkyA+IHRlbm1hZG9cIDsKK+S4gOWRvSA+IGljaGltZWlcIDsKK+aVmeiCsiA+IGt5b3Vpa3VcIDsKK+S4gOWRsyA+IGhpdG9hamlcIDsKK+WkseemgSA+IHNoaWtraW5cIDsKK+e3j+iplSA+IHNvdWh5b3VcIDsKK+WmmeazlSA+IG15b3Vob3VcIDsKK+e1pumbuyA+IGt5dXVkZW5cIDsKK+S4reS7lSA+IG5ha2FzaGlcIDsKK+imqumqqCA+IG95YWJvbmVcIDsKK+aWh+eroCA+IGJ1bnNob3VcIDsKK+abuOS4rSA+IHNob2NodXVcIDsKK+S4h+WNmiA+IGJhbnBha3VcIDsKK+S4gOWQjSA+IGljaGltZWlcIDsKK+S4gOWQjCA+IGljaGlkb3VcIDsKK+mfs+W+iyA+IG9ucml0c3VcIDsKK+S4i+WKoyA+IGdlcmV0c3VcIDsKK+mbo+iBtCA+IG5hbmNob3VcIDsKK+S4gOWPtyA+IGljaGlnb3VcIDsKK+S4gOWPsCA+IGljaGlkYWlcIDsKK+mbouiBtyA+IHJpc2hva3VcIDsKK+S4ieWKqSA+IHNhbnN1a2VcIDsKK+S4oeS+vyA+IHJ5b3ViZW5cIDsKK+aYpeacrCA+IHNodW5wb25cIDsKK+S4g+WNgSA+IG5hbmFqdXVcIDsKK+S4reS4liA+IGNodXVzZWlcIDsKK+imv+mdoiA+IHRla2ltZW5cIDsKK+WkqeemjyA+IHRlbnB1a3VcIDsKK+aWsOeUsCA+IHNoaW5kZW5cIDsKK+S4h+WKmyA+IG1hbnJpa2lcIDsKK+aWsOeUnyA+IHNoaW5zZWlcIDsKK+S4iuWIuyA+IGpvdWtva3VcIDsKK+S4geWNiiA+IGNob3VoYW5cIDsKK+Wkp+emjyA+IGRhaWZ1a3VcIDsKK+mhmOWKmyA+IGdhbnJpa2lcIDsKK+WkqeelkCA+IHRlbicneXV1XCA7CivmmKjmmakgPiBzYWt1YmFuXCA7CivmmanlubQgPiBiYW4nJ25lblwgOwor54Wn6KanID4gc2hvdXJhblwgOwor5pil5pqWID4gc2h1bmRhblwgOwor57eK6KaBID4ga2luJyd5b3VcIDsKK+S4gOWLuiA+IGlzc2hha3VcIDsKK+iqk+e0hCA+IHNlaXlha3VcIDsKK+aZuuWwhiA+IGNoaXNob3VcIDsKK+WmqOalrSA+IGJvdWd5b3VcIDsKK+ipqeiIiCA+IHNoaWt5b3VcIDsKK+S4oeS6uiA+IHJ5b3VuaW5cIDsKK+ims+mfsyA+IGthbicnbm9uXCA7CivmmYLmipggPiB0b2tpb3JpXCA7Civnib3mnZ8gPiBrZW5zb2t1XCA7CivmkrDpjLIgPiBzZW5yb2t1XCA7CivmlLnoia8gPiBrYWlyeW91XCA7Civmlr3niakgPiBzZW1vdHN1XCA7Civlpa7mv4AgPiBmdW5nZWtpXCA7CivkuKHkuIkgPiByeW91c2FuXCA7Civpm7vnrpcgPiBkZW5zb3JvXCA7CivopqrpoZ4gPiBzaGlucnVpXCA7Civni6zlpY8gPiBkb2t1c291XCA7CivntZDpnLIgPiBrZXRzdXJvXCA7Civml6fms5UgPiBreXV1aG91XCA7CivmlZnnt7QgPiBreW91cmVuXCA7CivnibnmnIkgPiB0b2t1eXV1XCA7CivkuIrlgbQgPiB1d2FnYXdhXCA7CivmmbblrZAgPiBzaG91c2hpXCA7CivnuKbns7ggPiB0YXRlaXRvXCA7CivkuIDlhoogPiBpc3NhdHN1XCA7Civlp6bmgqogPiBrYW4nJ2FrdVwgOwor6KeS6YyQID4ga2FrdXN1aVwgOwor57WQ6ZuGID4ga2Vzc2h1dVwgOwor5LiL5YCkID4gc2hpdGFuZVwgOwor5aWz5rmvID4gb24nJ25heXVcIDsKK+S4gOWFgyA+IGljaGlnZW5cIDsKK+e+heWIlyA+IHJhcmV0c3VcIDsKK+aaluWbvSA+IGRhbmtva3VcIDsKK+eIvea2vCA+IHNvdXJ5b3VcIDsKK+WkqeecnyA+IHRlbnNoaW5cIDsKK+mZs+isnSA+IGNoaW5zaGFcIDsKK+aWkeeZvSA+IGhhbnBha3VcIDsKK+S4gOWEhCA+IGljaGlva3VcIDsKK+iok+iqrSA+IGt1bmRva3VcIDsKK+S4mOS4iiA+IGt5dXVqb3VcIDsKK+eIm+eGnyA+IHJhbmp1a3VcIDsKK+WlveazgSA+IGtvdWt5b3VcIDsKK+aXouaxuiA+IGtpa2V0c3VcIDsKK+ippuiBtCA+IHNoaWNob3VcIDsKK+aYjuacnSA+IG1pbmNob3VcIDsKK+iol+iogCA+IHRha3VnZW5cIDsKK+mgmOWfnyA+IHJ5b3Vpa2lcIDsKK+aageWkqSA+IGd5b3V0ZW5cIDsKK+iogOiyrCA+IGdlbnNla2lcIDsKK+aWsOeJiCA+IHNoaW5wYW5cIDsKK+imqumbuyA+IHNoaW5kZW5cIDsKK+WkqueZvSA+IHRhaWhha3VcIDsKK+eJueaXqCA+IHRva3VzaGlcIDsKK+S4iuS9nCA+IGpvdXNha3VcIDsKK+WkqeeahyA+IHRlbicnbm91XCA7CivkuIrkvLggPiBqb3VzaGluXCA7CivmlbDnp5IgPiBzdXVieW91XCA7CivmlaPnrZYgPiBzYW5zYWt1XCA7Civmlofnm7ggPiBidW5zaG91XCA7Civlo7LntIQgPiBiYWl5YWt1XCA7CivkuInkvLggPiBzYW5zaGluXCA7Civml6fmrZMgPiBreXV1a2FuXCA7CivlpKfnmb0gPiB0YWloYWt1XCA7CivkuIfkvZwgPiBtYW5zYWt1XCA7CivmmI7mmbAgPiBtZWlzZWtpXCA7CivmmanlraYgPiBiYW5nYWt1XCA7CivpoJjlnLAgPiByeW91Y2hpXCA7CivnhKbouoEgPiBzaG91c291XCA7CivmmI7mmakgPiBteW91YmFuXCA7CivkuIDlgI0gPiBpY2hpYmFpXCA7Civmlaznp7AgPiBrZWlzaG91XCA7CivntYLpm7sgPiBzaHV1ZGVuXCA7CivkuIrkurogPiBzaG91bmluXCA7Civml6XmrKcgPiBuaWNoaW91XCA7CivkuIrkuqwgPiBqb3VreW91XCA7CivmmI7mmJ8gPiBteW91am91XCA7CivkuInkurogPiBzYW4nJ25pblwgOwor57im56ybID4gdGF0ZWJ1ZVwgOwor6ZuG576kID4gc2h1dWd1blwgOwor5LiH5Lq6ID4gbWFuJyduaW5cIDsKK+aVmeevhCA+IGt5b3VoYW5cIDsKK+S4gOS+iyA+IGljaGlyZWlcIDsKK+Wkp+eXhSA+IHRhaWJ5b3VcIDsKK+aVrOelniA+IGtlaXNoaW5cIDsKK+eJueaSsCA+IHRva3VzZW5cIDsKK+iqv+eQtCA+IGNob3VraW5cIDsKK+mgreWPliA+IHRvdWRvcmlcIDsKK+mghuWigyA+IGp1bmt5b3VcIDsKK+mbqOesoCA+IGFtYWdhc2FcIDsKK+e1pumHkSA+IGt5dXVraW5cIDsKK+ips+e0sCA+IHNob3VzYWlcIDsKK+e4pueptCA+IHRhdGVhbmFcIDsKK+S4gOS7uyA+IGljaGluaW5cIDsKK+Wkp+eUtyA+IG9vb3Rva29cIDsKK+S4gOS7oyA+IGljaGlkYWlcIDsKK+e9sOWJhyA+IGJhc3Nva3VcIDsKK+mch+ebqiA+IHNoaW50b3VcIDsKK+mciueahCA+IHJlaXRla2lcIDsKK+mdmeazqCA+IGpvdWNodXVcIDsKK+WkluebuCA+IGdhaXNob3VcIDsKK+WkmueZuiA+IHRhaGF0c3VcIDsKK+mbqOepuiA+IGFtYXpvcmFcIDsKK+eEtuirviA+IHplbmRha3VcIDsKK+iprue0oiA+IHNlbnNha3VcIDsKK+e5i+eVmSA+IGtlaXJ5dXVcIDsKK+aVo+elqCA+IHNhbnB5b3VcIDsKK+e3tOe/kiA+IHJlbnNodXVcIDsKK+ipleiAhSA+IGh5b3VzaGFcIDsKK+eGn+e3tCA+IGp1a3VyZW5cIDsKK+S4gOS4uCA+IGljaGlnYW5cIDsKK+WklueahCA+IGdhaXRla2lcIDsKK+eLrOWWhCA+IGRva3V6ZW5cIDsKK+Wkj+edgCA+IG5hdHN1Z2lcIDsKK+ipqee1jCA+IHNoaWt5b3VcIDsKK+eJueaNnCA+IHRva3Vzb3VcIDsKK+WkqeeQgyA+IHRlbmt5dXVcIDsKK+aXp+ajsiA+IGt5dXVzZWlcIDsKK+Wmu+aIuCA+IHRzdW1hZG9cIDsKK+aVmeeoiyA+IGt5b3V0ZWlcIDsKK+aWkeeMqyA+IGhhbm15b3VcIDsKK+aZi+WxsSA+IHNoaW56YW5cIDsKK+eMn+S6uiA+IHJ5b3VqaW5cIDsKK+aXi+avmyA+IHRzdW11amlcIDsKK+WgsemFrCA+IGhvdXNodXVcIDsKK+eDiOmchyA+IHJlc3NoaW5cIDsKK+aYpeaDhSA+IHNodW5qb3VcIDsKK+e3rOe+iiA+IG1lbicneW91XCA7Civml6fmoJYgPiBreXV1c2VpXCA7CivnuJ/npLwgPiBqb2t1cmVpXCA7CivlpKfnjYQgPiB0YWlnb2t1XCA7CivlpKfnjJ8gPiB0YWlyeW91XCA7Civni4LlpZQgPiBreW91aG9uXCA7CivloqjoibIgPiBzdW1paXJvXCA7Civnt4/oirEgPiBzb3ViYW5hXCA7CivmlabnnaYgPiB0b25ib2t1XCA7CivopoHpoJggPiB5b3VyeW91XCA7Civni6zlkJ8gPiBkb2t1Z2luXCA7CivopobpnaIgPiBmdWt1bWVuXCA7CivnuZTniakgPiBvcmltb25vXCA7Civmlaznmb0gPiBrZWloYWt1XCA7CivlpZTmtYEgPiBob25yeXV1XCA7Civml6fmnaUgPiBreXV1cmFpXCA7Civml6nmnJ0gPiBzb3VjaG91XCA7Civml6fmnZEgPiBreXV1c29uXCA7CivmmYLlsYAgPiBqaWt5b2t1XCA7CivmlK/ntaYgPiBzaGlreXV1XCA7CivmlL/nrZYgPiBzZWlzYWt1XCA7Civni6zljaAgPiBkb2t1c2VuXCA7CivlpInnl4cgPiBoZW5zaG91XCA7Civml6XmnJ0gPiBuaXRjaG91XCA7CivmlK/ntKIgPiBzaGlzYWt1XCA7CivlpoLmnIggPiBuaWdhdHN1XCA7Civml6nmmoEgPiBzb3VneW91XCA7CivlpLHngrkgPiBzaGl0dGVuXCA7Civpm5HnqYAgPiB6YWtrb2t1XCA7CivopZ/pq6ogPiBlcmlnYW1pXCA7Civopqrph4wgPiBveWF6YXRvXCA7Civnhafoh6ggPiBzaG91cmluXCA7Civml6nmmKUgPiBzb3VzaHVuXCA7CivmmKjlubQgPiBzYWt1bmVuXCA7CivorLnmhY4gPiBraW5zaGluXCA7Civop6Poqq0gPiBrYWlkb2t1XCA7CivlpKnnhLYgPiB0ZW4nJ25lblwgOwor5paw5rOVID4gc2hpbnBvdVwgOwor5aWl5qeYID4gb2t1c2FtYVwgOwor54us5Ym1ID4gZG9rdXNvdVwgOwor5pel5pmCID4gbmljaGlqaVwgOwor57eR6IKlID4gcnlva3VoaVwgOwor6aCY5YiGID4gcnlvdWJ1blwgOwor57ev57O4ID4geW9rb2l0b1wgOwor6Zuq55m9ID4gc2VwcGFrdVwgOwor54m55oCnID4gdG9rdXNlaVwgOwor54m55oClID4gdG9ra3l1dVwgOwor5pS756m2ID4ga291a3l1dVwgOwor6aCY5YaFID4gcnlvdW5haVwgOwor6ZmE6KitID4gZnVzZXRzdVwgOwor6Zu755CDID4gZGVua3l1dVwgOwor54m95by3ID4ga2Vua3lvdVwgOwor54mH5pa5ID4ga2F0YWhvdVwgOwor5pWZ55qHID4ga3lvdWtvdVwgOwor6Kme56ugID4gc2hpc2hvdVwgOwor6Kiz6ICFID4geWFrdXNoYVwgOwor54m55b6FID4gdG9rdXRhaVwgOwor6KWf6aaWID4gZXJpa3ViaVwgOwor5aWq5qC8ID4gZGFra2FrdVwgOwor5pW154q2ID4gdGVraWpvdVwgOwor5pKD6YCAID4gZ2VraXRhaVwgOwor6Zuj55mWID4gbmFua3VzZVwgOwor5pS556ewID4ga2Fpc2hvdVwgOwor5aaZ5omLID4gbXlvdXNodVwgOwor5pil5bWQID4gc2h1bnJhblwgOwor6KWy6Zu3ID4gc2h1dXJhaVwgOwor5aaZ5omAID4gbXlvdXNob1wgOwor6Kaq6L+RID4gc2hpbmtpblwgOwor5piO5b60ID4gbWVpY2hvdVwgOwor5piO5b6zID4gbWVpdG9rdVwgOwor6Zuj55eHID4gbmFuc2hvdVwgOwor6Zuj55eFID4gbmFuYnlvdVwgOwor54Sh6KGAID4gbXVrZXRzdVwgOwor6Kaa6YaSID4ga2FrdXNlaVwgOwor57eg57SEID4gdGVpeWFrdVwgOwor6K2Y5a2XID4gc2hpa2lqaVwgOwor6Ziy6KucID4gYm91Y2hvdVwgOwor5pqB5YWJID4gZ3lvdWtvdVwgOwor5pWZ55SfID4ga3lvdXNlaVwgOwor5piU5bm0ID4gc2VraW5lblwgOwor6KuL5rGCID4gc2Vpa3l1dVwgOwor5aSn5ryBID4gdGFpcnlvdVwgOwor54KS6aOvID4gY2hhYWhhblwgOwor6aCD5Yi7ID4ga2Vpa29rdVwgOwor6Zml6JC9ID4ga2FucmFrdVwgOwor6KqY54iGID4geXV1YmFrdVwgOwor6Z2S5p2+ID4gc2Vpc2hvdVwgOwor5aSW54K6ID4gZ2FpdGFtZVwgOwor6Ki857SZID4gc2hvdXNoaVwgOwor6ZyH54G9ID4gc2hpbnNhaVwgOwor5pmv5YudID4ga2Vpc2hvdVwgOwor5pil5a+SID4gc2h1bmthblwgOwor57Wx6KaaID4gdG91a2FrdVwgOwor54iG5q27ID4gYmFrdXNoaVwgOwor57ay6IacID4gbW91bWFrdVwgOwor54af55+lID4ganVrdWNoaVwgOwor5piO5bm0ID4gbXlvdW5lblwgOwor5aSp5risID4gdGVuc29rdVwgOwor5aSp5ribID4gdGVuYmlraVwgOwor5aWP5qW9ID4gc291Z2FrdVwgOwor6aCY5LyaID4gcnlvdWthaVwgOwor6Kq/5rOVID4gY2hvdWhvdVwgOwor5piM5bmzID4gc2hvdWhlaVwgOwor5aeJ5am/ID4gYW5lbXVrb1wgOwor57WC6LuKID4gc2h1dXNoYVwgOwor5pqR5LitID4gc2hvY2h1dVwgOwor57a/576KID4gbWVuJyd5b3VcIDsKK+eyvum6piA+IHNlaWJha3VcIDsKK+eGn+edoSA+IGp1a3VzdWlcIDsKK+e4q+eJqSA+IG51aW1vbm9cIDsKK+aWr+alrSA+IHNoaWd5b3VcIDsKK+aZtuWFiSA+IHNob3Vrb3VcIDsKK+e3iue4myA+IGtpbmJha3VcIDsKK+ims+izniA+IGthbnNob3VcIDsKK+mfk+WbvSA+IGthbmtva3VcIDsKK+mbo+eQgyA+IG5hbmt5dXVcIDsKK+eGn+ecoCA+IGp1a3VtaW5cIDsKK+WiqOezuCA+IHN1bWlpdG9cIDsKK+mZsOiGsyA+IGthZ2V6ZW5cIDsKK+ipqeeahCA+IHNoaXRla2lcIDsKK+mgmOS4uyA+IHJ5b3VzaHVcIDsKK+aYn+WtpiA+IHNlaWdha3VcIDsKK+Wkqea0pSA+IHRlbnNoaW5cIDsKK+mdkuaYpSA+IHNlaXNodW5cIDsKK+aah+S6uiA+IGhpbWFqaW5cIDsKK+ims+ixoSA+IGthbnNob3VcIDsKK+mfs+WKmyA+IG9ucnlva3VcIDsKK+eCuumKgCA+IHRhbWVnaW5cIDsKK+iok+iCsiA+IGt1bicnaWt1XCA7CivlpaXmlrkgPiBva3VnYXRhXCA7Civni6nkurogPiBrYXJ5dWRvXCA7CivntK/pgLIgPiBydWlzaGluXCA7CivlpKnms6MgPiB0ZW5reXV1XCA7Civlpa7mkoMgPiBmdW5nZWtpXCA7CivnhLzoiosgPiB5YWtpaW1vXCA7Civml6fmh5AgPiBreXV1a2FpXCA7Civpmaroh6MgPiBiYWlzaGluXCA7CivniafluKsgPiBib2t1c2hpXCA7CivmlrDmoYggPiBzaGluJydhblwgOwor6ZyH5rqQID4gc2hpbmdlblwgOwor5pen5oWjID4ga3l1dWthblwgOwor6ZqO57SaID4ga2Fpa3l1dVwgOwor5pen5oWLID4ga3l1dXRhaVwgOwor54m55a6aID4gdG9rdXRlaVwgOwor5pio5aSVID4gc2FrdXl1dVwgOwor6Zq755y8ID4gc2VraWdhblwgOwor54eD54S8ID4gbmVuc2hvdVwgOwor5paw5p2lID4gc2hpbnJhaVwgOwor5piT5a2mID4gZWtpZ2FrdVwgOwor5aKX57WmID4gem91a3l1dVwgOwor5pen5oKqID4ga3l1dWFrdVwgOwor5pWw5ru0ID4gc3V1dGVraVwgOwor57a+57W5ID4gYXlhZ2ludVwgOwor57Si6YGTID4gc2FrdWRvdVwgOwor5aa75aa+ID4gc2Fpc2hvdVwgOwor5pen5oGoID4ga3l1dWtvblwgOwor5pep5oClID4gc291a3l1dVwgOwor57WQ6KqeID4ga2V0c3Vnb1wgOwor5paw5pu4ID4gc2hpbnNob1wgOwor57SU6YePID4ganVucnlvdVwgOwor5aWz5omLID4gb24nJ25hZGVcIDsKK+eGseeLgiA+IG5la2t5b3VcIDsKK+Wls+aIvyA+IG55b3Vib3VcIDsKK+Wklua1tyA+IHNvdG91bWlcIDsKK+Wkp+atoyA+IHRhaXNob3VcIDsKK+WkseaoqSA+IHNoaWtrZW5cIDsKK+Wkp+assiA+IHRhaXlva3VcIDsKK+e1kOiolyA+IGtldHRha3VcIDsKK+WkluazqCA+IGdhaWNodXVcIDsKK+mYsuiZqyA+IGJvdWNodXVcIDsKK+WkluaziiA+IGdhaWhha3VcIDsKK+aWsOaYnyA+IHNoaW5zZWlcIDsKK+imhui8qiA+IGZ1a3VyaW5cIDsKK+aVtOa1gSA+IHNlaXJ5dXVcIDsKK+mgguS4iiA+IGNob3Vqb3VcIDsKK+eGseeHlyA+IGF0c3VrYW5cIDsKK+aXpeW9kyA+IGhpYXRhcmlcIDsKK+ezoOmbqCA+IG51a2FhbWVcIDsKK+e3j+ensCA+IHNvdXNob3VcIDsKK+aXp+W8iiA+IGt5dXVoZWlcIDsKK+eBq+mjnyA+IGthc2hva3VcIDsKK+eJueWkpyA+IHRva3VkYWlcIDsKK+imquiosSA+IG95YW1vdG9cIDsKK+aYpeWdiiA+IGhhcnVib3VcIDsKK+ipq+eKtiA+IHdhYmlqb3VcIDsKK+mbu+a1gSA+IGRlbnJ5dXVcIDsKK+itpuWRiiA+IGtlaWtva3VcIDsKK+eJueWjsiA+IHRva3ViYWlcIDsKK+aWsOaUvyA+IHNoaW5zZWlcIDsKK+aWrOaWsCA+IHphbnNoaW5cIDsKK+eKr+WJhyA+IGhhbnNva3VcIDsKK+manOeijSA+IHNob3VnYWlcIDsKK+eEoeiJsiA+IG11c2hva3VcIDsKK+WkluauuyA+IGdhaWtha3VcIDsKK+mbjOeKrCA+IG1lc3VpbnVcIDsKK+WkqealrSA+IHRlbmd5b3VcIDsKK+irluaVtSA+IHJvbnRla2lcIDsKK+mbgOeQgyA+IGphbmt5dXVcIDsKK+aWh+anmCA+IG1vbicneW91XCA7CivlpKfmpa0gPiB0YWlneW91XCA7Civml6fluKsgPiBreXV1c2hpXCA7Civml4XmiYAgPiB0YWJpc2hvXCA7Civns7jpi7ggPiBpdG9ub2tvXCA7CivmlrDmkrAgPiBzaGluc2VuXCA7CivoprPooYYgPiBrYW5zaHV1XCA7CivmlL7niacgPiBob3Vib2t1XCA7CivnibnloLEgPiB0b2t1aG91XCA7Civmlofmpb0gPiBidW5yYWt1XCA7CivnhKHohbAgPiBtdWdvc2hpXCA7Civopqroo4EgPiBzaGluc2FpXCA7CivpnaLlvbEgPiBvbW9rYWdlXCA7CivnhZnnqoEgPiBlbnRvdHN1XCA7CivlopPnqbQgPiBib2tldHN1XCA7Civni4LkurogPiBreW91amluXCA7Civoqr/mm7ggPiBjaG91c2hvXCA7CivmmIflpKkgPiBzaG91dGVuXCA7CivopqrooZsgPiBzaGluJydlaVwgOwor54uC5LmxID4ga3lvdXJhblwgOwor6Z2p5bivID4ga2F3YW9iaVwgOwor5aSp5p+xID4gdGVuY2h1dVwgOwor5peF5oSBID4gcnlvc2h1dVwgOwor6Kej6ISxID4gZ2VkYXRzdVwgOwor5pi85YmNID4gaGlydW1hZVwgOwor57aa57eoID4gem9rdWhlblwgOwor54ax5ryUID4gbmV0c3VlblwgOwor6Zuq5rSeID4gYm9uYm9yaVwgOwor54Sh6IG3ID4gbXVzaG9rdVwgOwor57eP552jID4gc291dG9rdVwgOwor6ZaT6ZqZID4ga2FuZ2VraVwgOwor6KaW6Ki6ID4gc2hpc2hpblwgOwor6ZaT6ZqUID4ga2Fua2FrdVwgOwor6Z205bGLID4ga3V0c3V5YVwgOwor5aCF6Kq/ID4ga2VuY2hvdVwgOwor5paO5pyNID4gc2FpZnVrdVwgOwor5pen5bGFID4ga3l1dWt5b1wgOwor57ep55CDID4ga2Fua3l1dVwgOwor57aZ57aaID4ga2Vpem9rdVwgOwor5aSp5pydID4gdGVuY2hvdVwgOwor6KaW6KeSID4gc2hpa2FrdVwgOwor5pen5bCBID4ga3l1dWhvdVwgOwor6Kqk5qSNID4gZ29zaG9rdVwgOwor6ZmL57+SID4gcm91c2h1dVwgOwor5aSn5pyoID4gdGFpYm9rdVwgOwor5Z+O6YOtID4gam91a2FrdVwgOwor5pWR5riIID4ga3l1dXNhaVwgOwor6KaW6KaaID4gc2hpa2FrdVwgOwor57eP55quID4gc291Z2F3YVwgOwor6Zm456iyID4gcmlrdXRvdVwgOwor5pWZ5rOVID4ga3lvdWhvdVwgOwor6Kq/5pW0ID4gY2hvdXNlaVwgOwor5pen5a6YID4ga3l1dWthblwgOwor5aSx5pWsID4gc2hpa2tlaVwgOwor6ZaL6ZmzID4ga2FpY2hpblwgOwor5aSx5pWXID4gc2hpcHBhaVwgOwor5aW95bCaID4ga291c2hvdVwgOwor5aWH5oqcID4ga2liYXRzdVwgOwor5aSx5pS/ID4gc2hpc3NlaVwgOwor6KiO56m2ID4gdG91a3l1dVwgOwor6ZyK5p+pID4gcmVpa3l1dVwgOwor6Kqt5pysID4gZG9rdWhvblwgOwor6Ziy6IetID4gYm91c2h1dVwgOwor6Kqt5pu4ID4gZG9rdXNob1wgOwor54qv5Lq6ID4gaGFuJyduaW5cIDsKK+WlpeW6rSA+IG9rdW5pd2FcIDsKK+iqrOacjSA+IHNlcHB1a3VcIDsKK+WmiuWooCA+IG5pbnNoaW5cIDsKK+WlpeW6lSA+IG9rdXpva29cIDsKK+eJp+WcsCA+IGJva3VjaGlcIDsKK+aVpuaouCA+IHRvbmJva3VcIDsKK+WlveWtpiA+IGtvdWdha3VcIDsKK+e3qOeJqSA+IGFtaW1vbm9cIDsKK+e2muevhyA+IHpva3VoZW5cIDsKK+WkqeaVtSA+IHRlbnRla2lcIDsKK+e1jOiUtSA+IGt5b3V6b3VcIDsKK+mciuacqCA+IHJlaWJva3VcIDsKK+WknOabsiA+IHlha3lva3VcIDsKK+e3j+eUuyA+IHNvdWtha3VcIDsKK+Wkp+aVtSA+IHRhaXRla2lcIDsKK+eJueWRvSA+IHRva3VtZWlcIDsKK+mZo+esoCA+IGppbmdhc2FcIDsKK+mahuebmyA+IHJ5dXVzZWlcIDsKK+ipleeCuSA+IGh5b3V0ZW5cIDsKK+aWsOaCoyA+IHNoaW5rYW5cIDsKK+aVkeawkSA+IGt5dXVtaW5cIDsKK+imgeiosyA+IHlvdXlha3VcIDsKK+aXp+WnkyA+IGt5dXVzZWlcIDsKK+mZjee1piA+IGtvdWt5dXVcIDsKK+aXp+WmuyA+IGt5dXVzYWlcIDsKK+aWh+aVmSA+IGJ1bmt5b3VcIDsKK+mdouWuuSA+IG1lbicneW91XCA7CivlpInmooMgPiBoZW50ZWtvXCA7CivnsbPpuqYgPiBiZWliYWt1XCA7CivntLDonrogPiBraXNoYWdvXCA7CivnhrHmsJcgPiBuZXRzdWtlXCA7CivmmKjlhqwgPiBzYWt1dG91XCA7CivmmKXliIYgPiBzaHVuYnVuXCA7CivoprPoj4ogPiBrYW5naWt1XCA7Civml6flpb0gPiBreXV1a291XCA7Civpm7vmn7EgPiBkZW5jaHV1XCA7Civplovpkb8gPiBrYWlzYWt1XCA7Civplbfpm6ggPiBuYWdhYW1lXCA7CivlpInmoLwgPiBoZW5rYWt1XCA7Civml6flpZcgPiBreXV1dG91XCA7Civoqp7mnKsgPiBnb21hdHN1XCA7Civns6fpgZMgPiByeW91ZG91XCA7CivopZ/otrMgPiBlcmlhc2hpXCA7CivorLnlkYogPiBraW5rb2t1XCA7CivoqqzmlZkgPiBzZWtreW91XCA7CivmkZjopoEgPiB0ZWtpeW91XCA7CivorYnliLggPiBzaG91a2VuXCA7CivmlZnmqKkgPiBreW91a2VuXCA7Civml6blpJUgPiB0YW5zZWtpXCA7Civmlq3lv7UgPiBkYW4nJ25lblwgOwor5pel5aScID4gbmljaGl5YVwgOwor5Z+O6LehID4gam91c2VraVwgOwor5pel5aSVID4gbmlzc2VraVwgOwor5pil5YWJID4gc2h1bmtvdVwgOwor5pS+5rWBID4gaG91cnl1dVwgOwor6ZyH5pemID4gc2hpbnRhblwgOwor5aWl5bGxID4gb2t1eWFtYVwgOwor5pen5aKfID4ga3l1dWt5b1wgOwor6Z2Z5a+CID4gc2VpamFrdVwgOwor6Kej57SEID4ga2FpeWFrdVwgOwor5aSx5oqVID4gc2hpdHRvdVwgOwor57ax55uuID4ga291bW9rdVwgOwor54Gr6YmiID4gaGliYWNoaVwgOwor57W257iBID4gemV0c3VlblwgOwor5aSV5pa5ID4geXV1Z2F0YVwgOwor5Z+36KGMID4gc2hpa2tvdVwgOwor57KX6aOfID4gc29zaG9rdVwgOwor5pWs5pyNID4ga2VpZnVrdVwgOwor5aSW5pW1ID4gZ2FpdGVraVwgOwor5pWF5q66ID4ga29zYXRzdVwgOwor6KaB6KGdID4geW91c2hvdVwgOwor5aaE5Z+3ID4gbW91c2h1dVwgOwor5aKD55uuID4gc2FrYWltZVwgOwor5aSP5pelID4ga2FqaXRzdVwgOwor6ZyH5pK8ID4gc2hpbmthblwgOwor5pWm5py0ID4gdG9uYm9rdVwgOwor5aOw5qW9ID4gc2VpZ2FrdVwgOwor5pen5Z6LID4ga3l1dWtlaVwgOwor5peF5a6iID4gcnlva2FrdVwgOwor6Z2i5aaWID4gbWVuJyd5b3VcIDsKK+aYreS7oyA+IHNob3VkYWlcIDsKK+eEoeethiA+IG11aGl0c3VcIDsKK+eJueWGmSA+IHRva3VzaGFcIDsKK+WkseaFiyA+IHNoaXR0YWlcIDsKK+aXp+WdgCA+IGt5dXVzaGlcIDsKK+e1kOiFuCA+IGtldGNob3VcIDsKK+aXp+WcsCA+IGt5dXVjaGlcIDsKK+eJueWFuCA+IHRva3V0ZW5cIDsKK+WgquiDvSA+IHRhbicnbm91XCA7Civoo73pnakgPiBzZWlrYWt1XCA7CivlpLHmhI8gPiBzaGl0c3VpXCA7CivniIblvL4gPiBiYWt1ZGFuXCA7CivnibnlhY0gPiB0b2t1bWVuXCA7CivmlK/mtYEgPiBzaGlyeXV1XCA7Civmj5rpmbggPiB5b3VyaWt1XCA7CivopqroiLkgPiBveWFidW5lXCA7CivpmbjnlKMgPiByaWt1c2FuXCA7CivpmbjnlJ8gPiByaWt1c2VpXCA7CivpnaLlo4EgPiBtZW5wZWtpXCA7CivmjqLps6UgPiB0YW5jaG91XCA7Civopqroh6ggPiBzaGlucmluXCA7CivntIToqIAgPiB5YWt1Z2VuXCA7CivlooPnlYwgPiBreW91a2FpXCA7CivmlZnmnaEgPiBreW91am91XCA7Civnspfpm5EgPiBzb3phdHN1XCA7CivmlZnmnZAgPiBreW91emFpXCA7CivmlZnmnKwgPiBreW91aG9uXCA7Civpm7vmkoMgPiBkZW5nZWtpXCA7CivmlZnmm7ggPiBreW91c2hvXCA7CivpmY3npZ4gPiBrb3VzaGluXCA7CivplpPov5EgPiBtYWRqaWthXCA7CivmlrDlsYUgPiBzaGlua3lvXCA7CivntLroibIgPiBrb24nJ2lyb1wgOwor57aZ55uuID4gdHN1Z2ltZVwgOwor6Zu35pKDID4gcmFpZ2VraVwgOwor5aG+55SfID4ganVrdXNlaVwgOwor6Kq/5bymID4gY2hvdWdlblwgOwor5aSx5b2TID4gc2hpdHRvdVwgOwor54eD5paZID4gbmVucnlvdVwgOwor6KiI55S7ID4ga2Vpa2FrdVwgOwor54m55L6LID4gdG9rdXJlaVwgOwor6Zqg5ruFID4gaW5tZXRzdVwgOwor54m55L2/ID4gdG9rdXNoaVwgOwor5aSn5oGvID4gdGFpc29rdVwgOwor6ZuG5qipID4gc2h1dWtlblwgOwor6ZaL6YCaID4ga2FpdHN1dVwgOwor6Zmj55ebID4gamludHN1dVwgOwor5aSW5oiaID4gZ2Fpc2VraVwgOwor5aSp5b+DID4gdGVuc2hpblwgOwor57WE6IG3ID4gc29zaG9rdVwgOwor57ay54yfID4gYW1pcnlvdVwgOwor5pav5a2mID4gc2hpZ2FrdVwgOwor5pW15omLID4gdGVraXNodVwgOwor5aOy5pilID4gYmFpc2h1blwgOwor5aSn5b6zID4gZGFpdG9rdVwgOwor6Zui5pelID4gcmluaWNoaVwgOwor57K+6YCyID4gc2hvdWppblwgOwor5aSn5b25ID4gdGFpeWFrdVwgOwor57K+6YCaID4gc2VpdHN1dVwgOwor54WJ542EID4gcmVuZ29rdVwgOwor6Kaq572yID4gc2hpbnNob1wgOwor6Ku45Zu9ID4gc2hva29rdVwgOwor5pen5ZCNID4ga3l1dW1laVwgOwor54mb5YiAID4gZ3l1dXRvdVwgOwor6Zuj5pW1ID4gbmFudGVraVwgOwor5pen5Y+3ID4ga3l1dWdvdVwgOwor54Cd6Z2SID4gcmVraXNlaVwgOwor5aSn5byTID4gZGFpa3l1dVwgOwor5pen5Y+LID4ga3l1dXl1dVwgOwor57WQ57iBID4ga2VjaGllblwgOwor6KKe6b6NID4ga29ucnlvdVwgOwor5paw5amaID4gc2hpbmtvblwgOwor5paH5byxID4gYnVuamFrdVwgOwor5pel5Y+OID4gbmlzc2h1dVwgOwor6ZuR5pyoID4gem91Ym9rdVwgOwor6Kqs5b6XID4gc2V0dG9rdVwgOwor6Z2W5Zu9ID4gc2Vpa29rdVwgOwor5piO5LquID4gbWVpcnlvdVwgOwor5aSp5bmVID4gdGVubWFrdVwgOwor5aOr5pePID4gc2hpem9rdVwgOwor54af5p+/ID4ganVrdXNoaVwgOwor6Zay6KanID4gZXRzdXJhblwgOwor6Z2p5ZG9ID4ga2FrdW1laVwgOwor57mU5biDID4gc2hva3VmdVwgOwor5pel5Y2wID4gbmljaGlpblwgOwor57mK5byxID4gc2VuamFrdVwgOwor57Sw6IWVID4gaG9zb3VkZVwgOwor57mU5belID4gc2hva2tvdVwgOwor54Wn5rqWID4gc2hvdWp1blwgOwor6Zu25oimID4gemVyb3NlblwgOwor5pW15oOFID4gdGVraWpvdVwgOwor5piH5Lu7ID4gc2hvdW5pblwgOwor6Kaa6ICFID4ga2FrdXNoYVwgOwor6KaW6IG0ID4gc2hpY2hvdVwgOwor57WE57mUID4gc29zaGlraVwgOwor6ZW36YCdID4gY2hvdXNlaVwgOwor6ZmE552AID4gZnVjaGFrdVwgOwor6Kys5LydID4gYnl1dWRlblwgOwor5aSW5b+DID4gZ2Fpc2hpblwgOwor5pW15oCnID4gdGVraXNlaVwgOwor6Kqg5b+gID4gc2VpY2h1dVwgOwor6KqY5oORID4geXV1d2FrdVwgOwor54mn5Lq6ID4gYm9rdWppblwgOwor5pen5Yi2ID4ga3l1dXNlaVwgOwor57WM57O4ID4gdGF0ZWl0b1wgOwor6ZW36L66ID4gY2hvdWhlblwgOwor6Kqg5b+DID4gc2Vpc2hpblwgOwor6ZyK5bufID4gcmVpYnlvdVwgOwor6Kmu5pa5ID4gc2Vua2F0YVwgOwor5pen5YiKID4ga3l1dWthblwgOwor5pet5YWJID4ga3lva2tvdVwgOwor5aSx5a++ID4gc2hpdHRhaVwgOwor54mH5YmNID4ga2F0YW1hZVwgOwor6Kuc5aCxID4gY2hvdWhvdVwgOwor5aKo5rGgID4gYm9rdWNoaVwgOwor5Z6C6L+5ID4gc3VpamFrdVwgOwor5pW05b6pID4gc2VpZnVrdVwgOwor5pen5YasID4ga3l1dXRvdVwgOwor5pSv5p+xID4gc2hpY2h1dVwgOwor5aKo5rGBID4gYm9rdWp1dVwgOwor5pS55pqmID4ga2FpcmVraVwgOwor5paw5aCxID4gc2hpbnBvdVwgOwor5aSW5buTID4gZ2Fpa2FrdVwgOwor6Ziq56WeID4gaGFuc2hpblwgOwor6Kq/5a2QID4gY2hvdXNoaVwgOwor5pen5YW4ID4ga3l1dXRlblwgOwor5pW15by+ID4gdGVraWRhblwgOwor6ZaA6LehID4gbW9uemVraVwgOwor57KX6YeRID4gYXJhZ2FuZVwgOwor5pS/5pW1ID4gc2VpdGVraVwgOwor6Kaq57GzID4gc2hpbmJlaVwgOwor5pWP5o23ID4gYmluc2hvdVwgOwor54mI5YWDID4gaGFubW90b1wgOwor5pS/5pWZID4gc2Vpa3lvdVwgOwor6Kmm5paZID4gc2hpcnlvdVwgOwor6KWB6KSTID4gbXV0c3VraVwgOwor57SU6ImvID4ganVucnlvdVwgOwor5aSJ5b+DID4gaGVuc2hpblwgOwor5pWZ5oiSID4ga3lvdWthaVwgOwor5aSn5bCPID4gZGFpc2hvdVwgOwor5aSn5bCGID4gZGFpc2hvdVwgOwor5pen5YK1ID4ga3l1dXNhaVwgOwor6ZaT6KucID4ga2FuY2hvdVwgOwor6KaL57+SID4gbWluYXJhaVwgOwor5pS55pawID4ga2Fpc2hpblwgOwor5paw5ZywID4gc2hpbmNoaVwgOwor57mL5bGeID4ga2Vpem9rdVwgOwor5pS+5pOyID4gaG91dGVraVwgOwor5pW35biDID4gc2hpa2lmdVwgOwor6ZuG5pWjID4gc2h1dXNhblwgOwor5o6h6ZuGID4gc2Fpc2h1dVwgOwor54mb5Li8ID4gZ3l1dWRvblwgOwor6KeS55uGID4ga2FrdWJvblwgOwor54i95YeJID4gc291cnlvdVwgOwor6KmU5pu4ID4gc2hvdXNob1wgOwor5aSn5a2mID4gZGFpZ2FrdVwgOwor6Kaq562JID4gc2hpbnRvdVwgOwor5aOB5p2/ID4ga2FiZWl0YVwgOwor5aaE5L+hID4gbW91c2hpblwgOwor5paH5a2mID4gYnVuZ2FrdVwgOwor5pS75pKDID4ga291Z2VraVwgOwor57eR5qi5ID4gcnlva3VqdVwgOwor54iq5Y2wID4gdHN1bWVpblwgOwor5pen5L6LID4ga3l1dXJlaVwgOwor5pSv5pePID4gc2hpem9rdVwgOwor57Oe6J2/ID4ga3Vzb2JhZVwgOwor5aKc5q27ID4gdHN1aXNoaVwgOwor5aWo5YqxID4gc2hvdXJlaVwgOwor57mU5aerID4gb3JpaGltZVwgOwor6Kq/5aOwID4gY2hvdXNlaVwgOwor6KSS6LOeID4gaG91c2hvdVwgOwor57SF6ImyID4gYmVuaWlyb1wgOwor6Zm45rW3ID4gcmlrdWthaVwgOwor57WC56uvID4gc2h1dXRhblwgOwor5pel5LyvID4gbmlwcGFrdVwgOwor5peL5YmKID4gc2Vuc2FrdVwgOwor6KeS55WqID4ga2Fkb2JhblwgOwor57K+6KqtID4gc2VpZG9rdVwgOwor57mU5aWzID4gc2hva3Vqb1wgOwor5pen5LqkID4ga3l1dWtvdVwgOwor5pel5LuYID4gaGlkenVrZVwgOwor54ax5oSbID4gbmV0c3VhaVwgOwor5aKD5ravID4ga3lvdWdhaVwgOwor6Zyc5aScID4gc2hpbW95b1wgOwor54Sm54elID4gc2hvdXNvdVwgOwor5aWz5YKRID4gam9rZXRzdVwgOwor5aSp5aWzID4gdGVuJydueW9cIDsKK+inkueTtiA+IGtha3ViaW5cIDsKK+e0oee4viA+IGJvdXNla2lcIDsKK+ipqeaKhCA+IHNoaXNob3VcIDsKK+aXp+S4uyA+IGt5dXVzaHVcIDsKK+Wkp+WlsyA+IG9vb24nJ25hXCA7CivmlbXlr74gPiB0ZWtpdGFpXCA7CivoqIjmuKwgPiBrZWlzb2t1XCA7CivmlrDlk4EgPiBzaGlucGluXCA7CivlpYnllLEgPiBob3VzaG91XCA7Civopqrnpa0gPiBzaGluc2FpXCA7CivmlpnlnLAgPiByeW91Y2hpXCA7CivnhKHnhrEgPiBtdW5ldHN1XCA7CivntZDnn7MgPiBrZXNzZWtpXCA7CivplbforJsgPiBjaG91a291XCA7Civnt4/moZAgPiBzb3VnaXJpXCA7CivnhKbngrkgPiBzaG91dGVuXCA7Civnhp/miJAgPiBqdWt1c2VpXCA7CivoqLzmm7ggPiBzaG91c2hvXCA7Civoq5blkYogPiByb25rb2t1XCA7CivnhrHlv4MgPiBuZXNzaGluXCA7Civop6PnhrEgPiBnZW5ldHN1XCA7CivlpYnlkYogPiBob3Vrb2t1XCA7CivlpLHlnLAgPiBzaGl0Y2hpXCA7CivmlrDlj4IgPiBzaGluemFuXCA7Civpm4bmiJAgPiBzaHV1c2VpXCA7CivmlbDlraYgPiBzdXVnYWt1XCA7CivmlZnluKsgPiBreW91c2hpXCA7CivmkoPnoJUgPiBnZWtpc2FpXCA7Civoqq3lo7IgPiB5b21pdXJpXCA7Civmjpjpkb8gPiBrdXNzYWt1XCA7Civpm7nlrrMgPiBoeW91Z2FpXCA7Civnt4/mn4QgPiBzb3VnYXJhXCA7CivpnIrlppkgPiByZWlteW91XCA7CivlpInlrrkgPiBoZW4nJ3lvdVwgOwor5peF5YOnID4gdGFiaXNvdVwgOwor6KO46LazID4gaGFkYXNoaVwgOwor6KuW5Y+KID4gcm9ua3l1dVwgOwor5o6h6YyyID4gc2Fpcm9rdVwgOwor54af5oWuID4ganVrdXJ5b1wgOwor6KaB57SEID4geW91eWFrdVwgOwor54KO6ImyID4gZW5zaG9rdVwgOwor54ax5bu2ID4gbmV0c3VlblwgOwor6Kiz5pysID4geWFrdWhvblwgOwor6Ki85piOID4gc2hvdW1laVwgOwor5aKo5pu4ID4gYm9rdXNob1wgOwor57Sb57O+ID4gZnVua3l1dVwgOwor6Kiz5pu4ID4geWFrdXNob1wgOwor5o6o6YePID4gc3VpcnlvdVwgOwor5pKe55CDID4gZG91a3l1dVwgOwor5aSZ5aScID4gc2h1a3V5YVwgOwor54ax5bqmID4gbmV0c3Vkb1wgOwor6ZyH5aSuID4gc2hpbicnb3VcIDsKK+WghuepjSA+IHRhaXNla2lcIDsKK+e0r+epjSA+IHJ1aXNla2lcIDsKK+mau+aJiyA+IHNla2lzaHVcIDsKK+WkqeWbvSA+IHRlbmdva3VcIDsKK+ijj+mHmCA+IHVyYWt1Z2lcIDsKK+ijj+mHkSA+IHVyYWdhbmVcIDsKK+aUquaLjCA+IGtha3VoYW5cIDsKK+eEmeeDmSA+IGhvdXJva3VcIDsKK+mZuOapiyA+IHJpa2t5b3VcIDsKK+iqjeWuuSA+IG5pbicneW91XCA7CivoqLzmlocgPiBzaG91bW9uXCA7CivoqLrmlq0gPiBzaGluZGFuXCA7CivlpKflm70gPiB0YWlrb2t1XCA7CivpmbDmrJ0gPiBpbicndXRzdVwgOwor6Ki75paHID4gY2h1dW1vblwgOwor57S656KnID4ga29ucGVraVwgOwor5paw5Yi2ID4gc2hpbnNlaVwgOwor5pS55oKbID4ga2Fpc2h1blwgOwor6Kmp5b+DID4gc2hpc2hpblwgOwor57W254ShID4gemV0c3VtdVwgOwor5aSW5aOBID4gZ2FpaGVraVwgOwor54af5oCdID4ganVrdXNoaVwgOwor5paw5YiKID4gc2hpbmthblwgOwor5paw5YiAID4gc2hpbnRvdVwgOwor6ZyE5aOMID4gc2hvdWpvdVwgOwor5pS+5b+DID4gaG91c2hpblwgOwor54yp44CFID4gc2hvdWpvdVwgOwor5aGe5rqQID4gc29rdWdlblwgOwor5aSn5Zi0ID4gb29oYXNoaVwgOwor57WC55ukID4gc2h1dWJhblwgOwor57SN57WMID4gbm91a3lvdVwgOwor5pWZ5bCOID4ga3lvdWRvdVwgOwor5paw5YW1ID4gc2hpbnBlaVwgOwor54S85q27ID4gc2hvdXNoaVwgOwor6Kiz5paHID4geWFrdWJ1blwgOwor5paw5YWaID4gc2hpbnRvdVwgOwor5pS55b+DID4ga2Fpc2hpblwgOwor54Wn5pifID4gc2hvdXNlaVwgOwor5o6b6YeRID4ga2FrZWtpblwgOwor5pWX5bCGID4gaGFpc2hvdVwgOwor5o6o6YCyID4gc3Vpc2hpblwgOwor54Wn5piOID4gc2hvdW1laVwgOwor6ZuE5b+DID4geXV1c2hpblwgOwor6Zm45qOyID4gcmlrdXNlaVwgOwor6KSH6KaWID4gZnVrdXNoaVwgOwor57K+6JmrID4gc2VpY2h1dVwgOwor5pW15aGBID4gdGVraXJ1aVwgOwor57ay5qOaID4gYW1pZGFuYVwgOwor6Zm45qOaID4gcmlrdWhvdVwgOwor5pWZ5a6YID4ga3lvdWthblwgOwor5Zu96aKoID4ga29rdWZ1dVwgOwor6ZqG5pu/ID4gcnl1dXRhaVwgOwor57ea5o+PID4gc2VuYnlvdVwgOwor6KaL56WeID4ga2Vuc2hpblwgOwor6KOB6YePID4gc2FpcnlvdVwgOwor6Kq/5ZCIID4gY2hvdWdvdVwgOwor5pS/5bqBID4gc2VpY2hvdVwgOwor6Kq/5Y+3ID4gY2hvdWdvdVwgOwor6Zmw5qW1ID4gaW5reW9rdVwgOwor5aSP5aC0ID4gbmF0c3ViYVwgOwor57SF57WEID4gYWthZ3VtaVwgOwor6KeS54GvID4ga2FrdXRvdVwgOwor6KSH6KO9ID4gZnVrdXNlaVwgOwor5aSW5ZynID4gZ2FpYXRzdVwgOwor5paJ5ZSxID4gc2Vpc2hvdVwgOwor54af5bm0ID4ganVrdW5lblwgOwor57WQ55CDID4ga2Vra3l1dVwgOwor5aCG55+zID4gdGFpc2VraVwgOwor5aSW5Zu9ID4gZ2Fpa29rdVwgOwor5o6l6L6eID4gc2V0c3VqaVwgOwor57K+6JaEID4gc2VpaGFrdVwgOwor5pW15ZywID4gdGVraWNoaVwgOwor5o2V6aOfID4gaG9zaG9rdVwgOwor5pW15Zu9ID4gdGVra29rdVwgOwor57WC55SfID4gc2h1dXNlaVwgOwor6Kej5raIID4ga2Fpc2hvdVwgOwor5aSJ5Z+fID4gaGVuJydpa2lcIDsKK+mZveaapiA+IHlvdXJla2lcIDsKK+Wkp+WQjSA+IGRhaW15b3VcIDsKK+WkseWKuSA+IHNoaWtrb3VcIDsKK+aWsOS9kyA+IHNoaW50YWlcIDsKK+WbvembuyA+IGtva3VkZW5cIDsKK+Wkp+WPoyA+IG9vZ3VjaGlcIDsKK+aOmOmAsiA+IGt1c3NoaW5cIDsKK+iqv+WJpCA+IGNob3V6YWlcIDsKK+mZuOabuSA+IHJpa3Vzb3VcIDsKK+WbvemboyA+IGtva3VuYW5cIDsKK+e3qeaApSA+IGthbmt5dXVcIDsKK+aUr+W6piA+IHNoaXRha3VcIDsKK+mZveaYpSA+IHlvdXNodW5cIDsKK+WbvemamyA+IGtva3VzYWlcIDsKK+Wkp+WOhCA+IHRhaXlha3VcIDsKK+e0i+eroCA+IG1vbnNob3VcIDsKK+aUr+W6gSA+IHNoaWNob3VcIDsKK+WcsOmBkyA+IGppbWljaGlcIDsKK+imqueOiSA+IG95YWRhbWFcIDsKK+aWsOS6uiA+IHNoaW5qaW5cIDsKK+aVheWunyA+IGtvaml0c3VcIDsKK+WkluWVhiA+IGdhaXNob3VcIDsKK+WbvemYsiA+IGtva3Vib3VcIDsKK+aUvuWwvyA+IGhvdW55b3VcIDsKK+ino+awtyA+IGthaWh5b3VcIDsKK+aWh+WNmiA+IGJ1bmhha3VcIDsKK+aTr+aWpSA+IGhpbnNla2lcIDsKK+Wkp+WLnSA+IHRhaXNob3VcIDsKK+aVmeWjhyA+IGt5b3VkYW5cIDsKK+e4ruWbsyA+IHNodWt1enVcIDsKK+mWk+iGnCA+IGthbm1ha3VcIDsKK+Wkp+WKmyA+IGRhaXJpa2lcIDsKK+aTjealrSA+IHNvdWd5b3VcIDsKK+WkqeWJhyA+IHRlbnNva3VcIDsKK+aOqOizniA+IHN1aXNob3VcIDsKK+eEoeasoCA+IG11a2V0c3VcIDsKK+ipqeWtpiA+IHNoaWdha3VcIDsKK+a/gOmXmCA+IGdla2l0b3VcIDsKK+ims+eFpyA+IGthbnNob3VcIDsKK+WkluWRqCA+IGdhaXNodXVcIDsKK+mWk+iEsyA+IGthbicnbm91XCA7CivmlZnloLQgPiBreW91am91XCA7Civlm7Dpm6MgPiBrb24nJ25hblwgOwor57im5Z2RID4gdGF0ZWtvdVwgOwor57Wm5rqQID4ga3l1dWdlblwgOwor6Zyy5LuPID4gcm9mdXRzdVwgOwor6Kqh5ZGKID4ga2Fpa29rdVwgOwor57Wm5rmvID4ga3l1dXRvdVwgOwor5Zyw6Lu4ID4gY2hpamlrdVwgOwor54K6552AID4gc2hpa2lzZVwgOwor5aSn5Ye2ID4gZGFpa3lvdVwgOwor6KaB55uuID4geW91bW9rdVwgOwor5pS75a2mID4ga291Z2FrdVwgOwor57WE54mIID4ga3VtaWhhblwgOwor6Kq/5YGcID4gY2hvdXRlaVwgOwor5pS55a6XID4ga2Fpc2h1dVwgOwor57mU5YWDID4gb3JpbW90b1wgOwor6KWf56ugID4gZXJpc2hvdVwgOwor6ZaL6IW5ID4ga2FpZnVrdVwgOwor6Zub5aOHID4gaGluYWRhblwgOwor5aSn5YW1ID4gZGFpaHlvdVwgOwor54et5YWJID4gc2hva2tvdVwgOwor6KGo6aGMID4gaHlvdWRhaVwgOwor6ZyH5YuVID4gc2hpbmRvdVwgOwor5pWZ5ZujID4ga3lvdWRhblwgOwor57SU55yfID4ganVuc2hpblwgOwor6Zq35bGeID4gcmVpem9rdVwgOwor5pac5LqkID4gaGFzdWthaVwgOwor57mB5YqHID4gaGFuZ2VraVwgOwor54Wp5oKpID4gYm9uJydub3VcIDsKK+ijveiWrCA+IHNlaXlha3VcIDsKK+WjsuWbvSA+IGJhaWtva3VcIDsKK+WkseS9kyA+IHNoaXR0YWlcIDsKK+e0lOebiiA+IGp1bicnZWtpXCA7Civmlpnkuq0gPiByeW91dGVpXCA7CivopqrngpkgPiBzaGluc2hhXCA7CivopIfokYkgPiBmdWt1eW91XCA7CivoqbPloLEgPiBzaG91aG91XCA7Civnt57luLMgPiBkb25jaG91XCA7CivmlbXli6IgPiB0ZWtpemVpXCA7CivooajpnaIgPiBoeW91bWVuXCA7CivplbfoiosgPiBuYWdhaW1vXCA7CivpmqPluK0gPiByaW5zZWtpXCA7CivntJTnmb0gPiBqdW5wYWt1XCA7CivoqZXlrpogPiBoeW91dGVpXCA7CivpmLLmr5IgPiBib3Vkb2t1XCA7CivmlbDljLkgPiBzdXVoaWtpXCA7CivlpJXliLsgPiB5dXVrb2t1XCA7Civpm7vljZMgPiBkZW50YWt1XCA7CivntYLngrkgPiBzaHV1dGVuXCA7Civnt4rmgKUgPiBraW5reXV1XCA7CivpmY3moLwgPiBrb3VrYWt1XCA7CivntabmsLQgPiBreXV1c3VpXCA7Civnsr7ogokgPiBzZWluaWt1XCA7CivmlbXliY0gPiB0ZWtpemVuXCA7CivlpJXlh6ogPiB5dXVuYWdpXCA7CivloZ7moJMgPiBzb2t1c2VuXCA7CivnuZrkubEgPiByeW91cmFuXCA7CivlpKnkvZEgPiB0ZW4nJ3l1dVwgOwor6Kmp5aKDID4gc2hpa3lvdVwgOwor57iE5aKoID4gam91Ym9rdVwgOwor5aSn5L2cID4gdGFpc2FrdVwgOwor6Kaq5r2uID4gb3lhc2hpb1wgOwor5Zuj6ZW3ID4gZGFuY2hvdVwgOwor6ZeY55eFID4gdG91YnlvdVwgOwor6KOc6KGAID4gaG9rZXRzdVwgOwor6Kaz5risID4ga2Fuc29rdVwgOwor54Wu5bmyID4gbmlib3NoaVwgOwor5Zub6Zi/ID4gYXp1bWF5YVwgOwor57ax5omLID4gdHN1bmFkZVwgOwor6Zm45oimID4gcmlrdXNlblwgOwor5aSp5Lq6ID4gdGVuJyduaW5cIDsKK+eBjOiFuCA+IGthbmNob3VcIDsKK+e3iuW8tSA+IGtpbmNob3VcIDsKK+mbhuWhtSA+IHNodXVqaW5cIDsKK+malOW5tCA+IGtha3VuZW5cIDsKK+mZjeacjSA+IGtvdWZ1a3VcIDsKK+WkluWCtyA+IGdhaXNob3VcIDsKK+WkieWJhyA+IGhlbnNva3VcIDsKK+mbhuWhiiA+IHNodXVrYWlcIDsKK+eEoeacrSA+IG11c2F0c3VcIDsKK+e0heeZvSA+IGtvdWhha3VcIDsKK+ino+aekCA+IGthaXNla2lcIDsKK+eEoeaciCA+IG11Z2V0c3VcIDsKK+Wil+W+tCA+IHpvdWNob3VcIDsKK+ilsueUqCA+IHNodXV5b3VcIDsKK+iqrOS8jyA+IHNlcHB1a3VcIDsKK+eGseWUsSA+IG5lc3Nob3VcIDsKK+aWieS4gCA+IHNlaWl0c3VcIDsKK+WkluS/oSA+IGdhaXNoaW5cIDsKK+aWh+S4rSA+IGJ1bmNodXVcIDsKK+Wil+W8tyA+IHpvdWt5b3VcIDsKK+mZuuaCqiA+IGtlbicnYWt1XCA7CivplbfogIMgPiBjaG91a291XCA7CivplbfogIEgPiBjaG91cm91XCA7CivooYzpoK0gPiBneW91dG91XCA7Civnt5rlr6kgPiBzZW5zaGluXCA7Civopb/ni6wgPiBzZWlkb2t1XCA7CivmlZHlkb0gPiBreXV1bWVpXCA7CivpmqDlr4YgPiBvbm1pdHN1XCA7Civplqjnp4AgPiBrZWlzaHV1XCA7CivpnI3kubEgPiBrYWt1cmFuXCA7Civlm73pgZMgPiBrb2t1ZG91XCA7CivntZDmsLcgPiBrZXBweW91XCA7Civpm4blm6MgPiBzaHV1ZGFuXCA7Civlm73pgKMgPiBrb2t1cmVuXCA7CivpmbPmg4UgPiBjaGluam91XCA7CivngavnrrggPiBoaWJhc2hpXCA7Civlo7LljZwgPiBiYWlib2t1XCA7CivmlZfljJcgPiBoYWlib2t1XCA7CivpmpzlrrMgPiBzaG91Z2FpXCA7CivlopfluYUgPiB6b3VmdWt1XCA7Civmk7LlvL4gPiB0ZWtpZGFuXCA7Civmva7pqJIgPiBzaGlvc2FpXCA7CivntKLnhLYgPiBzYWt1emVuXCA7CivnhLzmiJAgPiBzaG91c2VpXCA7Civpm7vkv6EgPiBkZW5zaGluXCA7CivntprmipUgPiB6b2t1dG91XCA7Civmv6voqq0gPiByYW5kb2t1XCA7Civntpnmib8gPiBrZWlzaG91XCA7Civntr7luIMgPiBheWFudW5vXCA7CivnspjohpwgPiBuZW5tYWt1XCA7CivmkYLnkIYgPiBzZXRzdXJpXCA7Civpm6rlhqQgPiBzZXRzdWVuXCA7CivmlL/llYYgPiBzZWlzaG91XCA7CivloqjlroggPiBib2t1c2h1XCA7CivnsonojLYgPiBrb25hY2hhXCA7Civop5LmnZAgPiBrYWt1emFpXCA7CivntYzmrbQgPiBrZWlyZWtpXCA7Civpm6LliKUgPiByaWJldHN1XCA7Civpl5jniZsgPiB0b3VneXV1XCA7CivnhaflsIQgPiBzaG91c2hhXCA7Civmkanmu4UgPiBtYW1ldHN1XCA7Civlm73ou40gPiBrb2t1Z3VuXCA7CivloZfmk6YgPiB0b3NhdHN1XCA7Civmv6vop7QgPiByYW5zaG91XCA7Civplbfnt6ggPiBjaG91aGVuXCA7CivmlZnlhbggPiBreW91dGVuXCA7CivlnLDooaggPiBjaGloeW91XCA7CivoqbLljZogPiBnYWloYWt1XCA7CivmjqjolqwgPiBzdWl5YWt1XCA7CivpmbPlvIEgPiBjaGluYmVuXCA7Civns7jnk5wgPiBoZWNoaW1hXCA7Civngqznh7UgPiBrb3RhdHN1XCA7CivooYzplpMgPiBneW91a2FuXCA7Civpm6jlgpggPiBhbWFnYXNhXCA7Civplovnq4sgPiBrYWlyeXV1XCA7CivntYLmraIgPiBzaHV1c2hpXCA7Civmkp7mnKggPiBzaHVtb2t1XCA7Civpm5Hli5kgPiB6YXRzdW11XCA7CivntLDmtYEgPiBzYWlyeXV1XCA7CivoqI7luZUgPiB0b3ViYWt1XCA7Civpm4blkIggPiBzaHV1Z291XCA7CivmjajosaEgPiBzaGFzaG91XCA7Civngq7ng5kgPiBob3Vyb2t1XCA7CivlnLDonIIgPiBqaWJhY2hpXCA7Civpmbrls7sgPiBrZW5zaHVuXCA7CivopqrmqKkgPiBzaGlua2VuXCA7CivooZfpjLIgPiBnYWlyb2t1XCA7CivopIfnt5ogPiBmdWt1c2VuXCA7Civpm5HliYcgPiB6YXNzb2t1XCA7Civoo4XolqwgPiBzb3V5YWt1XCA7Civlm73os5MgPiBrb2t1aGluXCA7Civngrnmu7QgPiB0ZW50ZWtpXCA7CivpmbjlsrggPiByaWt1Z2FuXCA7CivloZfmirkgPiB0b21hdHN1XCA7CivoqanliocgPiBzaGlnZWtpXCA7CivplovnpaggPiBrYWloeW91XCA7Civmkrnmi4wgPiBrYWt1aGFuXCA7Civpmb3lsIQgPiBoaXphc2hpXCA7CivnhrHlgrcgPiBuZXNzaG91XCA7CivplqLnmb0gPiBrYW5wYWt1XCA7Civoo5zoibIgPiBob3Nob2t1XCA7CivnhKbmha4gPiBzaG91cnlvXCA7CivpmarluK0gPiBiYWlzZWtpXCA7CivntZDmoLggPiBrZWtrYWt1XCA7CivmjK/piLQgPiBzaGlucmVpXCA7CivmlZnkvJogPiBreW91a2FpXCA7Civpm5HlhbUgPiB6b3VoeW91XCA7CivpmqPlm70gPiByaW5nb2t1XCA7CivntYPmpb0gPiBnZW5nYWt1XCA7Civpm4DljZMgPiBqYW50YWt1XCA7CivpmbjlsIEgPiByaWt1ZnV1XCA7Civpm6rkuK0gPiBzZXRjaHV1XCA7CivloqjloKQgPiBib2t1dGVpXCA7CivoqJflrqMgPiB0YWt1c2VuXCA7Civnsr7npZ4gPiBzZWlzaGluXCA7CivmkI3nm4ogPiBzb24nJ2VraVwgOwor6Zmj5bmVID4gamlubWFrdVwgOwor54Gw55q/ID4gaGFpemFyYVwgOwor57KX57iEID4gYXJhbmF3YVwgOwor5oyM6ZeYID4ga2FrdXRvdVwgOwor5oy66YCyID4gdGVpc2hpblwgOwor57O454iqID4gaGVjaGltYVwgOwor6KSS56ugID4gaG91c2hvdVwgOwor57WQ5p2fID4ga2Vzc29rdVwgOwor54Gw55m9ID4ga2FpaGFrdVwgOwor5pWZ5Li7ID4ga3lvdXNodVwgOwor6Kem5oSfID4gc2hva2thblwgOwor5oub6a2CID4gc2hvdWtvblwgOwor6Kaq5qCqID4gb3lha2FidVwgOwor57K+56K6ID4gc2Vpa2FrdVwgOwor5Zu96KuWID4ga29rdXJvblwgOwor57eR5ZyfID4gcnlva3Vkb1wgOwor6ZuG5YWJID4gc2h1dWtvdVwgOwor57WQ5pm2ID4ga2Vzc2hvdVwgOwor6KOc6IG3ID4gaG9zaG9rdVwgOwor5r+A6KuWID4gZ2VraXJvblwgOwor6Kmz5LydID4gc2hvdWRlblwgOwor57SF5r2uID4ga291Y2hvdVwgOwor5pWR5LiWID4ga3l1dXNlaVwgOwor6KaB5rGCID4geW91a3l1dVwgOwor6Zmq5a+pID4gYmFpc2hpblwgOwor5oy66LqrID4gdGVpc2hpblwgOwor54ax5LitID4gbmV0Y2h1dVwgOwor6Kaq5pu4ID4gc2hpbnNob1wgOwor6KOP6IW5ID4gdXJhaGFyYVwgOwor6KmV5YikID4gaHlvdWJhblwgOwor57SN5ra8ID4gbm91cnlvdVwgOwor5Zuz6KqsID4genVzZXRzdVwgOwor6Kmp5L2cID4gc2hpc2FrdVwgOwor6ZaT55S3ID4gbWFvdG9rb1wgOwor5pG65pysID4gc2hvdWhvblwgOwor6ZuR5LqLID4gemF0c3VqaVwgOwor5pS55L+uID4ga2Fpc2h1dVwgOwor6ZuM5LyPID4gc2hpZnVrdVwgOwor57WM5paHID4ga3lvdW1vblwgOwor57W25oGvID4gemVzc29rdVwgOwor6Zmj5a65ID4gamluJyd5b3VcIDsKK+ippuS9nCA+IHNoaXNha3VcIDsKK+mZuOWkpyA+IHJpa3VkYWlcIDsKK+ikpeeYoSA+IGpva3Vzb3VcIDsKK+eyl+etiyA+IGFyYXN1amlcIDsKK+eyvueZvSA+IHNlaWhha3VcIDsKK+ihjOmAsiA+IGtvdXNoaW5cIDsKK+mVt+efrSA+IGNob3V0YW5cIDsKK+aOo+iCmCA+IHNlaWNodXVcIDsKK+imquaWuSA+IG95YWthdGFcIDsKK+aUueS9nCA+IGthaXNha3VcIDsKK+ioreWWtiA+IHNldHN1ZWlcIDsKK+mbhuS8miA+IHNodXVrYWlcIDsKK+Wft+aoqSA+IHNoaWtrZW5cIDsKK+e1teW/gyA+IGVnb2tvcm9cIDsKK+aLnemgmCA+IGhhaXJ5b3VcIDsKK+e1tuW+jCA+IHpldHN1Z29cIDsKK+imquaUvyA+IHNoaW5zZWlcIDsKK+euoemgmCA+IGthbnJ5b3VcIDsKK+eymOeooCA+IG5lbmNodXVcIDsKK+aSruW9sSA+IHNhdHN1ZWlcIDsKK+WhqeWusyA+IHNoaW9nYWlcIDsKK+ijnOe2tCA+IGhvdGV0c3VcIDsKK+evpOi+siA+IHRva3Vub3VcIDsKK+aPrueZuiA+IGtpaGF0c3VcIDsKK+ios+WQjSA+IHlha3VtZWlcIDsKK+eDj+acqCA+IGtva3V0YW5cIDsKK+maiuWVhiA+IHRhaXNob3VcIDsKK+WghuacsSA+IHRzdWlzaHVcIDsKK+mZuOWcsCA+IHJpa3VjaGlcIDsKK+Wig+WfnyA+IGt5b3Vpa2lcIDsKK+aMh+mHnSA+IHNoaXNoaW5cIDsKK+WbnuiqrSA+IGthaWRva3VcIDsKK+eFp+WQiCA+IHNob3Vnb3VcIDsKK+iovOWIuCA+IHNob3VrZW5cIDsKK+ipleS8nSA+IGh5b3VkZW5cIDsKK+eBuOeCuSA+IGt5dXV0ZW5cIDsKK+Wei+eVqiA+IGthdGFiYW5cIDsKK+eEvOWjsiA+IHNodXVtYWlcIDsKK+WbnuiouiA+IGthaXNoaW5cIDsKK+ikh+ecvCA+IGZ1a3VnYW5cIDsKK+iplOS7pCA+IHNob3VyZWlcIDsKK+Wig+WcsCA+IGt5b3VjaGlcIDsKK+e3qOS/riA+IGhlbnNodXVcIDsKK+e1seW5lSA+IHRvdWJha3VcIDsKK+eBq+eHtSA+IGtvdGF0c3VcIDsKK+aSreW3niA+IGJhbnNodXVcIDsKK+eEoeWuvyA+IG11c2h1a3VcIDsKK+inkuW4vSA+IGtha3Vib3VcIDsKK+eBq+eGsSA+IGthbmV0c3VcIDsKK+mVt+eUtyA+IGNob3VuYW5cIDsKK+imquaMhyA+IG95YXl1YmlcIDsKK+inkuW4ryA+IGtha3VvYmlcIDsKK+eEoeWunyA+IG11aml0c3VcIDsKK+mVt+eUnyA+IGNob3VzZWlcIDsKK+e0ouadoSA+IHNha3Vqb3VcIDsKK+ihqOinoyA+IGh5b3VrYWlcIDsKK+e3j+WJhyA+IHNvdXNva3VcIDsKK+Wbm+inkiA+IHNoaWtha3VcIDsKK+e0i+anmCA+IG1vbicneW91XCA7Civlopflj44gPiB6b3VzaHV1XCA7CivooYzos54gPiBrb3VzaG91XCA7CivnrqHplbcgPiBrYW5jaG91XCA7Civntr7lj5YgPiBheWF0b3JpXCA7CivntprloLEgPiB6b2t1aG91XCA7CivmjqLntKIgPiB0YW5zYWt1XCA7CivooYDot68gPiBrZXRzdXJvXCA7CivloLHlvrMgPiBob3V0b2t1XCA7Civmkanmk6YgPiBtYXNhdHN1XCA7CivloLHlvqkgPiBob3VmdWt1XCA7Civmj5DnnaMgPiB0ZWl0b2t1XCA7CivopovmlpkgPiBrZW5yeW91XCA7Civooajoo4UgPiBoeW91c291XCA7CivntYLmiKYgPiBzaHV1c2VuXCA7Civlm73okawgPiBrb2t1c291XCA7Civopb/mmqYgPiBzZWlyZWtpXCA7CivnsaDntaEgPiByb3VyYWt1XCA7Civnspfnmq4gPiBhcmFrYXdhXCA7Civngq3mn7EgPiB0YW5jaHV1XCA7CivloKrlv40gPiBrYW4nJ25pblwgOwor6Kaq5oSbID4gc2hpbicnYWlcIDsKK+ihk+iqniA+IGp1dHN1Z29cIDsKK+ims+W/tSA+IGthbicnbmVuXCA7CivntJTmnLQgPiBqdW5ib2t1XCA7CivoqJPlkYogPiBrdW5rb2t1XCA7Civopb/ml6UgPiBuaXNoaWJpXCA7CivopbLmnaUgPiBzaHV1cmFpXCA7CivnsbPnqYAgPiBiZWlrb2t1XCA7Civnr4Dov6sgPiBzZXBwYWt1XCA7Civln7fmlL8gPiBzaGlzc2VpXCA7Civmk4Hlo4EgPiB5b3VoZWtpXCA7CivoqK3lgpkgPiBzZXRzdWJpXCA7CivooYDosYYgPiBjaGltYW1lXCA7CivoqLzkurogPiBzaG91bmluXCA7CivlnKfnuK4gPiBhc3NodWt1XCA7Civmjoznt6ggPiBzaG91aGVuXCA7Civnt5LkvZwgPiBzaG9zYWt1XCA7CivloYHlr6kgPiBydWlzaGluXCA7CivlorPkuJggPiBmdW5reXV1XCA7CivnspfnlaUgPiBzb3J5YWt1XCA7CivntJrmlbAgPiBreXV1c3V1XCA7CivntIvmnI0gPiBtb25wdWt1XCA7Civoo5Xnpo8gPiB5dXVmdWt1XCA7CivmjpvnrpcgPiBrYWtlemFuXCA7CivooYboq5YgPiBzaHV1cm9uXCA7Civlm57omasgPiBrYWljaHV1XCA7Civmjqjnp7AgPiBzdWlzaG91XCA7CivntbXlp78gPiBlc3VnYXRhXCA7CivopoHmkoMgPiB5b3VnZWtpXCA7CivlnLDnsY0gPiBjaGlzZWtpXCA7CivmjqLnqbYgPiB0YW5reXV1XCA7CivmjozntIsgPiBzaG91bW9uXCA7CivnspLnlYwgPiByeXV1a2FpXCA7CivmjafohbkgPiBob3VmdWt1XCA7CivmkI3mtYEgPiBzb25yeXV1XCA7CivmvIbpo58gPiBzaGlra3VpXCA7CivnhafkvJogPiBzaG91a2FpXCA7CivmjJnoqLwgPiBreW9zaG91XCA7Civngrnmj48gPiB0ZW5ieW91XCA7CivlnKjnsY0gPiB6YWlzZWtpXCA7Civmi5PpioAgPiB0YWt1Z2luXCA7Civntbblo4EgPiB6ZXBwZWtpXCA7CivpmpTkuJYgPiBrYWt1c2VpXCA7CivpmbjlhbUgPiByaWt1aGVpXCA7CivntrHlhbcgPiB0c3VuYWd1XCA7CivnspfnjokgPiBhcmF0YW1hXCA7CivntrLlhYMgPiBhbWltb3RvXCA7CivoqIDlj4ogPiBnZW5reXV1XCA7Civns7jmnqAgPiBpdG93YWt1XCA7CivpmaTljbQgPiBqb2t5YWt1XCA7CivmvKvpjLIgPiBtYW5yb2t1XCA7Civpmo/kuIAgPiB6dWlpY2hpXCA7Civns7jmnYkgPiBpdG9zdWdpXCA7CivngbDmrrsgPiBoYWlnYXJhXCA7CivoqKrkuK0gPiBob3VjaHV1XCA7CivmkYLmlL8gPiBzZXNzaG91XCA7CivloanlkbMgPiBzaGlvYWppXCA7CivlnLDnqY0gPiBjaGlzZWtpXCA7CivntZDlsL4gPiBrZXRzdWJpXCA7CivntITmlbAgPiB5YWt1c3V1XCA7CivpmLLlo4EgPiBib3VoZWtpXCA7Civns77mmI4gPiBreXV1bWVpXCA7CivloYHlo4EgPiBydWloZWtpXCA7CivntZDlr6kgPiBrZXNzaGluXCA7CivntLDlv4MgPiBzYWlzaGluXCA7CivmjqHnn7MgPiBzYWlzZWtpXCA7CivloIXlv40gPiBrZW4nJ25pblwgOwor57KS54q2ID4gcnl1dWpvdVwgOwor5ouZ6YCfID4gc2Vzc29rdVwgOwor5r2u6KejID4gY2hvdWthaVwgOwor5pKu5ZyfID4gc2F0c3Vkb1wgOwor5ry46YCyID4gemVuc2hpblwgOwor6Kaq5bGVID4gc2hpbnRlblwgOwor6KaP5b6LID4ga2lyaXRzdVwgOwor5oyB6KqsID4gamlzZXRzdVwgOwor6KaW5bqKID4gc2hpc2hvdVwgOwor6KeS5ZywID4ga2Fkb2NoaVwgOwor57WM5a2mID4ga2VpZ2FrdVwgOwor57KL54uCID4gc3Vpa3lvdVwgOwor6KOP55m9ID4gdXJhamlyb1wgOwor5aG15YWlID4gZ29taWlyZVwgOwor5aCx5aWoID4gaG91c2hvdVwgOwor57Sw5bivID4gaG9zb29iaVwgOwor6Kaq5a2QID4gc2hpbnNoaVwgOwor54Sh5Y+jID4gbXVrdWNoaVwgOwor5Z+35b+1ID4gc2h1dW5lblwgOwor6Zm45LiKID4gcmlrdWpvdVwgOwor5ryr6YGKID4gbWFuJyd5dXVcIDsKK+e1tuWUsSA+IHplc3Nob3VcIDsKK+WbnuiFuCA+IGthaWNob3VcIDsKK+mVt+axnyA+IGNob3Vrb3VcIDsKK+WcsOebriA+IGNoaW1va3VcIDsKK+aLjei7iiA+IGhha3VzaGFcIDsKK+eEoeWKmyA+IG11cnlva3VcIDsKK+aKvemBuCA+IGNodXVzZW5cIDsKK+aNnOe0oiA+IHNvdXNha3VcIDsKK+mWi+alrSA+IGthaWd5b3VcIDsKK+e1tuWPqyA+IHpla2t5b3VcIDsKK+WbveeyiyA+IGtva3VzdWlcIDsKK+aOm+eVmSA+IGtlaXJ5dXVcIDsKK+imquWlvSA+IHNoaW5rb3VcIDsKK+mWiealrSA+IGhlaWd5b3VcIDsKK+WgseWbvSA+IGhvdWtva3VcIDsKK+exs+eLrCA+IGJlaWRva3VcIDsKK+aMr+iIniA+IGZ1cnVtYWlcIDsKK+eutOiogCA+IHNoaW5nZW5cIDsKK+e1guWniyA+IHNodXVzaGlcIDsKK+mVt+atjiA+IGNob3V0YW5cIDsKK+mVt+atjCA+IG5hZ2F1dGFcIDsKK+aMr+iIiCA+IHNoaW5rb3VcIDsKK+imluWtpiA+IHNoaWdha3VcIDsKK+mZnuS7uyA+IHNob3VuaW5cIDsKK+e0meW5hSA+IHNoaWZ1a3VcIDsKK+e0meW4syA+IHNoaWNob3VcIDsKK+e1jOWggiA+IGt5b3Vkb3VcIDsKK+mZo+S4rSA+IGppbmNodXVcIDsKK+e0jeW+lyA+IG5hdHRva3VcIDsKK+e1tuWLnSA+IHplc3Nob3VcIDsKK+eymOa2siA+IG5lbicnZWtpXCA7CivlnJ/nnYAgPiBkb2NoYWt1XCA7Civlm73nrYkgPiBrb2t1dG91XCA7CivloILlroggPiBkb3Vtb3JpXCA7Civmi53orIEgPiBoYWlldHN1XCA7CivmkqTlj44gPiB0ZXNzaHV1XCA7CivnsaDnkIMgPiByb3VreXV1XCA7Civnga/mmI4gPiB0b3VteW91XCA7Civmi53oqq0gPiBoYWlkb2t1XCA7Civon7bosp0gPiBtYXRlZ2FpXCA7CivnrYnplpEgPiBuYW96YXJpXCA7Civmi5voq4sgPiBzaG91c2VpXCA7Civpj6TpqqggPiBydWtvdHN1XCA7CivopovlraYgPiBrZW5nYWt1XCA7CivmipXpjKggPiB0b3VieW91XCA7CivntYzlm70gPiBrZWlrb2t1XCA7CivlnKjnlZkgPiB6YWlyeXV1XCA7CivmkI3mlpkgPiBzb25yeW91XCA7CivntJDluK8gPiBjaHV1dGFpXCA7Civpj6Hpq5ggPiBreW91a291XCA7CivlnK3nkqcgPiBrZWloZWtpXCA7Civmj4/ms5UgPiBieW91aG91XCA7Civoo73msLcgPiBzZWloeW91XCA7CivlnLDnkIMgPiBjaGlreXV1XCA7CivpkZHos54gPiBrYW5zaG91XCA7Civlm73nqI4gPiBrb2t1emVpXCA7Civmv6vnlKggPiByYW4nJ3lvdVwgOwor57SA5b6LID4ga2lyaXRzdVwgOwor6ZaA5p+xID4gbW9uY2h1dVwgOwor6ZmN5LyPID4ga291ZnVrdVwgOwor5aCx5ZGKID4gaG91a29rdVwgOwor57Sz5aOrID4gc2hpbnNoaVwgOwor57O+5by+ID4ga3l1dWRhblwgOwor6KGS6ICAID4gZ2VuJyd5b3VcIDsKK+WbsOeqriA+IGtvbmt5dXVcIDsKK+ihqOe0mSA+IGh5b3VzaGlcIDsKK+eDiOWlsyA+IHJldHN1am9cIDsKK+mYsuWFsSA+IGJvdWt5b3VcIDsKK+aSsOS/riA+IHNlbnNodXVcIDsKK+mXmOWwhiA+IHRvdXNob3VcIDsKK+imquWWhCA+IHNoaW56ZW5cIDsKK+a/q+eNsiA+IHJhbmtha3VcIDsKK+a8q+iqrSA+IG1hbmRva3VcIDsKK+mWouaJgCA+IHNla2lzaG9cIDsKK+eAn+a0kiA+IHNob3VzaGFcIDsKK+WfjuW7kyA+IGpvdWtha3VcIDsKK+ezuOW6lSA+IGl0b3pva29cIDsKK+a8q+iplSA+IG1hbnB5b3VcIDsKK+eBjOacqCA+IGthbmJva3VcIDsKK+imi+WigyA+IG1pc2FrYWlcIDsKK+e1jOWPsiA+IGt5b3VzaGlcIDsKK+aKmOi+vCA+IG9yaWtvbWlcIDsKK+WbnueroCA+IGthaXNob3VcIDsKK+aOiOeItSA+IGp1c2hha3VcIDsKK+etiemHjyA+IHRvdXJ5b3VcIDsKK+mPoemdoiA+IGt5b3VtZW5cIDsKK+e1jOWNlCA+IGtlaWt5b3VcIDsKK+WbuuedgCA+IGtvY2hha3VcIDsKK+aOqOa4rCA+IHN1aXNva3VcIDsKK+WbveebiiA+IGtva3Vla2lcIDsKK+a7sumAjyA+IHNoaW50b3VcIDsKK+ims+WKhyA+IGthbmdla2lcIDsKK+e0hOWumiA+IHlha3Vqb3VcIDsKK+WgseWEnyA+IGhvdXNob3VcIDsKK+ikh+acrCA+IGZ1a3Vob25cIDsKK+mVt+aWhyA+IGNob3VidW5cIDsKK+aSqeS5sSA+IHJ5b3VyYW5cIDsKK+aOoua4rCA+IHRhbnNva3VcIDsKK+aKlei6qyA+IHRvdXNoaW5cIDsKK+e1seS4gCA+IHRvdWl0c3VcIDsKK+mWi+aLkyA+IGthaXRha3VcIDsKK+mWouW/gyA+IGthbnNoaW5cIDsKK+ijnOauuiA+IGhvc2F0c3VcIDsKK+ezuOWxkSA+IGl0b2t1enVcIDsKK+aSg+WJoyA+IGdla2lrZW5cIDsKK+aJgemhjSA+IGhlbmdha3VcIDsKK+a8lOiqrCA+IGVuemV0c3VcIDsKK+WeguaVmSA+IHN1aWt5b3VcIDsKK+ikh+aYnyA+IGZ1a3VzZWlcIDsKK+etiemAnyA+IHRvdXNva3VcIDsKK+aJgOmgmCA+IHNob3J5b3VcIDsKK+eruemmrCA+IGNoaWt1YmFcIDsKK+ijnOasoCA+IGhva2V0c3VcIDsKK+WbveeUoyA+IGtva3VzYW5cIDsKK+ihgOe4gSA+IGtldHN1ZW5cIDsKK+ikh+aWuSA+IGZ1a3Vob3VcIDsKK+eyl+acqyA+IHNvbWF0c3VcIDsKK+ihk+etliA+IGp1c3Nha3VcIDsKK+ikh+aWhyA+IGZ1a3VidW5cIDsKK+a/gOeUmiA+IGdla2lqaW5cIDsKK+mOrumtgiA+IGNoaW5nb25cIDsKK+ikh+aVsCA+IGZ1a3VzdXVcIDsKK+eBr+W/gyA+IHRvdXNoaW5cIDsKK+aQjeW+lyA+IHNvbnRva3VcIDsKK+WgleWKmyA+IGRhcnlva3VcIDsKK+e1guWIiiA+IHNodXVrYW5cIDsKK+aOouaxgiA+IHRhbmt5dXVcIDsKK+imquWFgyA+IG95YW1vdG9cIDsKK+aIkOmzpSA+IHNlaWNob3VcIDsKK+mPoemRkSA+IGt5b3VrYW5cIDsKK+ihgOeziiA+IGNoaW5vcmlcIDsKK+etiei6qyA+IHRvdXNoaW5cIDsKK+a8uOiQvSA+IHplbnJha3VcIDsKK+eyl+aWuSA+IGFyYWthdGFcIDsKK+ezuOWnqyA+IGl0b2hpbWVcIDsKK+evgOe+qSA+IHNldHN1Z2lcIDsKK+ethui5nyA+IGhpc3Nla2lcIDsKK+mVt+aJgCA+IGNob3VzaG9cIDsKK+ethui3oSA+IGhpc3Nla2lcIDsKK+a9rue0hSA+IGNob3Vrb3VcIDsKK+aJgOmVtyA+IHNob2Nob3VcIDsKK+e1guWApCA+IG93YXJpbmVcIDsKK+e0sOWJhyA+IHNhaXNva3VcIDsKK+ihgOetiyA+IGNoaXN1amlcIDsKK+a9heiFuCA+IGthbmNob3VcIDsKK+WfjuWjgSA+IGpvdWhla2lcIDsKK+WcsOauuyA+IGNoaWtha3VcIDsKK+aRmOWPliA+IHRla2lzaHVcIDsKK+aLm+iHtCA+IHNob3VjaGlcIDsKK+etluisgCA+IHNha3Vib3VcIDsKK+imquS6pCA+IHNoaW5rb3VcIDsKK+eyvuW8tyA+IHNlaWt5b3VcIDsKK+aKmOinkiA+IHNla2tha3VcIDsKK+iejemAmiA+IHl1dWR6dXVcIDsKK+mWi+W5lSA+IGthaW1ha3VcIDsKK+WWq+mpmiA+IGJpa2t1cmlcIDsKK+mWi+W4syA+IGthaWNob3VcIDsKK+ewh+eUnyA+IHpva3VzZWlcIDsKK+WdkeacqCA+IGtvdWJva3VcIDsKK+e0muWPiyA+IGt5dXV5dXVcIDsKK+mWieW5lSA+IGhlaW1ha3VcIDsKK+mOlumqqCA+IHNha290c3VcIDsKK+a6gOmhjSA+IG1hbmdha3VcIDsKK+ihl+edgCA+IG1hY2hpZ2lcIDsKK+aMr+ebqiA+IHNoaW50b3VcIDsKK+ilv+WMlyA+IHNlaWhva3VcIDsKK+imhuWIuyA+IGZ1a2tva3VcIDsKK+Wcp+auuiA+IGFzc2F0c3VcIDsKK+mOrumdmSA+IGNoaW5zZWlcIDsKK+ifi+ifgCA+IGtvb3JvZ2lcIDsKK+a/oOa0siA+IGdvdXNodXVcIDsKK+aLneiBtCA+IGhhaWNob3VcIDsKK+aJjemHjyA+IHNhaXJ5b3VcIDsKK+a/geeCuSA+IGRha3V0ZW5cIDsKK+e1guS4liA+IHNodXVzZWlcIDsKK+igj+e8tiA+IGthbmlrYW5cIDsKK+ernOmhlCA+IHJ5b3VnYW5cIDsKK+mVt+W+hCA+IGNob3VrZWlcIDsKK+mVt+W+gSA+IGNob3VzZWlcIDsKK+Wft+WIgCA+IHNoaXR0b3VcIDsKK+aKmOihtyA+IHNldGNodXVcIDsKK+ilsuWQjSA+IHNodXVtZWlcIDsKK+aLm+iBmCA+IHNob3VoZWlcIDsKK+aKmOihnSA+IHNlc3Nob3VcIDsKK+e0ueS7iyA+IHNob3VrYWlcIDsKK+e0heWUhyA+IGtvdXNoaW5cIDsKK+ihqOePviA+IGh5b3VnZW5cIDsKK+Wbm+eQgyA+IHNoaWt5dXVcIDsKK+WeguW/gyA+IHN1aXNoaW5cIDsKK+aOqOacjSA+IHN1aWZ1a3VcIDsKK+ihhuefpSA+IHNodXVjaGlcIDsKK+mWkeWvgiA+IGthbmpha3VcIDsKK+ezvuWVjyA+IGt5dXVtb25cIDsKK+ijj+abuCA+IHVyYWdha2lcIDsKK+ethuiqhSA+IGhpdGNodXVcIDsKK+aJv+iqjSA+IHNob3VuaW5cIDsKK+mVt+W5vCA+IGNob3V5b3VcIDsKK+mVt+W5tCA+IG5hZ2FuZW5cIDsKK+mWo+WkliA+IGtha3VnYWlcIDsKK+imgeWEnyA+IHlvdXNob3VcIDsKK+etieinkiA+IHRvdWtha3VcIDsKK+WYhuizniA+IHRhbnNob3VcIDsKK+etieimqiA+IHRvdXNoaW5cIDsKK+aQvuWPliA+IHNha3VzaHVcIDsKK+WgheS6uiA+IGthdGFqaW5cIDsKK+ijheadnyA+IHNvdXpva3VcIDsKK+Wcn+apiyA+IGRvYmFzaGlcIDsKK+WcsOaguCA+IGNoaWtha3VcIDsKK+aJi+i/kSA+IHRlZGppa2FcIDsKK+ijj+aWuSA+IHVyYWthdGFcIDsKK+ezvuWQiCA+IGt5dXVnb3VcIDsKK+ifuee8tiA+IGthbmlrYW5cIDsKK+a/gOa4myA+IGdla2lnZW5cIDsKK+eyl+W/vSA+IHNva290c3VcIDsKK+e0jeWFpSA+IG5vdW55dXVcIDsKK+aKgOihkyA+IGdpanV0c3VcIDsKK+aKleiWrCA+IHRvdXlha3VcIDsKK+a/gOa1qiA+IGdla2lyb3VcIDsKK+e0hOWIhiA+IHlha3VidW5cIDsKK+WbveazlSA+IGtva3Vob3VcIDsKK+aJi+i5nyA+IHNodXNla2lcIDsKK+aIkOmVtyA+IHNlaWNob3VcIDsKK+eykuW+hCA+IHJ5dXVrZWlcIDsKK+mVt+WumCA+IGNob3VrYW5cIDsKK+aJi+i3oSA+IHNodXNla2lcIDsKK+mVt+WtkCA+IGNob3VzaGlcIDsKK+WbveawkSA+IGtva3VtaW5cIDsKK+eyvuWmmSA+IHNlaW15b3VcIDsKK+a/geawtCA+IGRha3VzdWlcIDsKK+ibn+m+jSA+IGtvdXJ5b3VcIDsKK+aOkuaWpSA+IGhhaXNla2lcIDsKK+mWieWhniA+IGhlaXNva3VcIDsKK+ihjOeKtiA+IGd5b3Vqb3VcIDsKK+idtuiynSA+IGNob3VnYWlcIDsKK+iln+WFgyA+IGVyaW1vdG9cIDsKK+ihgOeQgyA+IGtla2t5dXVcIDsKK+aLmeetliA+IHNlc3Nha3VcIDsKK+aHuOmalCA+IGtlbmtha3VcIDsKK+ijj+aKgCA+IHVyYXdhemFcIDsKK+WcqOaWuSA+IHphaWthdGFcIDsKK+eruei8qiA+IGNoaWt1d2FcIDsKK+aOkuaSgyA+IGhhaWdla2lcIDsKK+evgOebriA+IGZ1c2hpbWVcIDsKK+aOoeaKniA+IHNhaXRha3VcIDsKK+aNleauuiA+IGhvc2F0c3VcIDsKK+mWi+WbvSA+IGthaWtva3VcIDsKK+ien+iZqyA+IG1laWNodXVcIDsKK+eBveWOhCA+IHNhaXlha3VcIDsKK+Wcn+aXpSA+IGRvbmljaGlcIDsKK+ikkuWlqCA+IGhvdXNob3VcIDsKK+mVt+WkpyA+IGNob3VkYWlcIDsKK+aIkOmKgCA+IG5hcmlnaW5cIDsKK+evhOeWhyA+IGhhbmNodXVcIDsKK+Wbnua1gSA+IGthaXJ5dXVcIDsKK+eyl+WvhiA+IHNvbWl0c3VcIDsKK+aOjOaPoSA+IHNob3Vha3VcIDsKK+aIkOmHkSA+IG5hcmlraW5cIDsKK+a9lOeZvSA+IGtlcHBha3VcIDsKK+a9lOeZliA+IGtlcHBla2lcIDsKK+a8ouexjSA+IGthbnNla2lcIDsKK+Wcp+aOpSA+IGFzc2V0c3VcIDsKK+aKveexpCA+IGNodXVzZW5cIDsKK+ertui1sCA+IGt5b3Vzb3VcIDsKK+eykuWtkCA+IHJ5dXVzaGlcIDsKK+aJjeimmiA+IHNhaWtha3VcIDsKK+eBq+WPoyA+IGhpZ3VjaGlcIDsKK+aJgOisgiA+IGl3YXl1cnVcIDsKK+eskeimpyA+IHNob3VyYW5cIDsKK+mWk+WPoyA+IG1hZ3VjaGlcIDsKK+aQj+WLlSA+IGhha3Vkb3VcIDsKK+aIpui3oSA+IHNlbnNla2lcIDsKK+mWo+WGhSA+IGtha3VuYWlcIDsKK+a6gOi6qyA+IG1hbnNoaW5cIDsKK+WbveacrCA+IGtva3Vob25cIDsKK+ijj+W6rSA+IHVyYW5pd2FcIDsKK+ijj+W6lyA+IHVyYWRhbmFcIDsKK+WbveaciSA+IGtva3V5dXVcIDsKK+WbveabuCA+IGtva3VzaG9cIDsKK+eBq+WKmyA+IGthcnlva3VcIDsKK+mVt+WYhiA+IGNob3V0YW5cIDsKK+ernOi7iiA+IHJ5dXVzaGFcIDsKK+aIkei8qSA+IHdhZ2FoYWlcIDsKK+a6gOi2syA+IG1hbnpva3VcIDsKK+ihgOa9riA+IGNoaXNoaW9cIDsKK+a8hue1tSA+IHVydXNoaWVcIDsKK+eyl+WjgSA+IGFyYWthYmVcIDsKK+ihgOa8vyA+IGtlc3Nob3VcIDsKK+m9t+m9qiA+IGFrdXNla3VcIDsKK+a/gOaakSA+IGdla2lzaG9cIDsKK+WVhumtgiA+IHNob3Vrb25cIDsKK+WcsOW/gyA+IGNoaXNoaW5cIDsKK+epuummrCA+IGthcmF1bWFcIDsKK+mVt+WUhCA+IG5hZ2F1dGFcIDsKK+aQjeWCtyA+IHNvbnNob3VcIDsKK+eul+ebpCA+IHNvcm9iYW5cIDsKK+WbveaWhyA+IGtva3VidW5cIDsKK+mWi+WJiiA+IGthaXNha3VcIDsKK+aJgOihjCA+IHNob2d5b3VcIDsKK+WbveaVmSA+IGtva2t5b3VcIDsKK+mVt+WRvSA+IGNob3VtZWlcIDsKK+WbveaUvyA+IGtva3VzZWlcIDsKK+a6ouihgCA+IGlra2V0c3VcIDsKK+exs+WvqSA+IGJlaXNoaW5cIDsKK+WdqeWgnSA+IHJ1dHN1Ym9cIDsKK+evgOeFmSA+IHNldHN1ZW5cIDsKK+Wbo+aglyA+IGRvbmd1cmlcIDsKK+a4m+mhjSA+IGdlbmdha3VcIDsKK+Wbs+aYnyA+IHp1Ym9zaGlcIDsKK+ijj+WxsSA+IHVyYXlhbWFcIDsKK+aKmOe0mSA+IG9yaWdhbWlcIDsKK+aLmOeVmSA+IGtvdXJ5dXVcIDsKK+ihjOawtCA+IGd5b3V6dWlcIDsKK+eyieWjgSA+IGZ1bnBla2lcIDsKK+eri+i6qyA+IHJpc3NoaW5cIDsKK+aOpeWwviA+IHNldHN1YmlcIDsKK+erueijvSA+IHRha2VzZWlcIDsKK+WVhumkqCA+IHNob3VrYW5cIDsKK+eul+eUqCA+IHNhbicneW91XCA7CivooYDmsoggPiBrZXRjaGluXCA7CivplpPkvZwgPiBrYW5zYWt1XCA7CivmiYvolJMgPiB0ZWR6dXJ1XCA7CivopIflkIggPiBmdWt1Z291XCA7CivplbfliaMgPiBjaG91a2VuXCA7Civngavku5ggPiBoaXRzdWtlXCA7CivllJDpu40gPiB0b3VraWJpXCA7CivlnLDls6EgPiBjaGlreW91XCA7Civnr4nmuK8gPiBjaGlra291XCA7Civmj5DllLEgPiB0ZWlzaG91XCA7CivnqbrpmpkgPiBrdXVnZWtpXCA7CivmipznqbQgPiBudWtlYW5hXCA7CivplpHkurogPiBoaW1hamluXCA7CivnqbrpmbggPiBrdXVyaWt1XCA7CivonZnonaAgPiBoZW5wdWt1XCA7CivmioTntJkgPiBzaG91c2hpXCA7Civlm57mmKUgPiBrYWlzaHVuXCA7CivplpPkuK0gPiBhaWRhanV1XCA7Civmib/ntpkgPiBzaG91a2VpXCA7CivnrYnntJogPiB0b3VreXV1XCA7CivmjpLlsL8gPiBoYWlueW91XCA7CivmjbflvoQgPiBzaG91a2VpXCA7Civlm73miYsgPiBrb2t1c2h1XCA7CivmjqjlpaggPiBzdWlzaG91XCA7CivooYzmpb0gPiBrb3VyYWt1XCA7CivplbflhYQgPiBjaG91a2VpXCA7CivooajmmI4gPiBoeW91bWVpXCA7Civmv4DmiKYgPiBnZWtpc2VuXCA7Civlm57mlZkgPiBrYWlreW91XCA7CivlnLDlraYgPiBjaGlnYWt1XCA7CivmvIHnpIEgPiBneW9zaG91XCA7CivooajmlawgPiBoeW91a2VpXCA7CivmhoLprLEgPiB5dXV1dHN1XCA7Civmh7jos54gPiBrZW5zaG91XCA7Civmv4DmhqQgPiBnZWtpZnVuXCA7Civnqb/pkb8gPiBzZW5zYWt1XCA7CivmvaTmsqIgPiBqdW50YWt1XCA7CivmjK/mm78gPiBmdXJpa2FlXCA7Civnr6bmo5IgPiBiZXJhYm91XCA7CivopIflhpkgPiBmdWt1c2hhXCA7CivmipXnpaggPiB0b3VoeW91XCA7Civlm73mg4UgPiBrb2t1am91XCA7CivlnKjlroUgPiB6YWl0YWt1XCA7CivlnKjlraYgPiB6YWlnYWt1XCA7Civmh5Dpg7cgPiBrYWlreW91XCA7Civmv4Dmg4UgPiBnZWtpam91XCA7Civnsr7kuIAgPiBzZWlpdHN1XCA7CivlmajniakgPiBraWJ1dHN1XCA7CivnsbPlm70gPiBiZWlrb2t1XCA7Civnq4voqLwgPiByaXNzaG91XCA7Civmjpvlo7AgPiBrYWtlZ29lXCA7CivooYzmnKsgPiB5dWt1c3VlXCA7CivooYzmm7ggPiBneW91c2hvXCA7CivmuL7ouqsgPiBrb25zaGluXCA7CivmiYHoiJ8gPiBoZW5zaHV1XCA7CivmipXnn7MgPiB0b3VzZWtpXCA7CivmjIfmqJkgPiBzaGloeW91XCA7Civlm7Dmg5EgPiBrb253YWt1XCA7CivmjJ/mm7ggPiBreW91c2hvXCA7Civmj4/lhpkgPiBieW91c2hhXCA7CivooYbmnJsgPiBzaHV1Ym91XCA7CivplbfkuIogPiBjaG91am91XCA7Civoobfmg4UgPiBjaHV1am91XCA7CivmuJvph48gPiBnZW5yeW91XCA7CivmvoTmmI4gPiBjaG91bWVpXCA7CivooYbmmbogPiBzaHV1Y2hpXCA7CivlmInnr4AgPiBrYXNldHN1XCA7CivooYzmlbAgPiBneW91c3V1XCA7Civlm7PlvI8gPiB6dXNoaWtpXCA7CivooYzmlL8gPiBneW91c2VpXCA7CivmiJDomasgPiBzZWljaHV1XCA7CivmvL/mtrIgPiBzaG91ZWtpXCA7CivlnLDlnaogPiBqaXRzdWJvXCA7CivnqYDpoZ4gPiBrb2t1cnVpXCA7CivmvKDnhLYgPiBiYWt1emVuXCA7Civnq7boiYcgPiBreW91dGVpXCA7Civoo73kvZwgPiBzZWlzYWt1XCA7CivnqoHpgLIgPiB0b3NzaGluXCA7Civmj5DkvpsgPiB0ZWlreW91XCA7Civmt7HplpEgPiBzaGlua2FuXCA7CivnsbPlj44gPiBiZWlzaHV1XCA7Civnqb/pgJogPiBzZW50c3V1XCA7CivmuJvpgJ8gPiBnZW5zb2t1XCA7Civooajmg4UgPiBoeW91am91XCA7CivnrKbnr4AgPiBmdXNldHN1XCA7CivlmbTmtYEgPiBmdW5yeXV1XCA7Civmib/nn6UgPiBzaG91Y2hpXCA7CivnqK7ppqwgPiB0YW5ldW1hXCA7Civmt6Hpm6ogPiBhd2F5dWtpXCA7CivllZPov6ogPiBrZWl0ZWtpXCA7CivmjqXlj5cgPiBzZXRzdWp1XCA7CivmjKjmi7YgPiBhaXNhdHN1XCA7CivmjKvmipggPiB6YXNldHN1XCA7CivmjqXlj44gPiBzZXNzaHV1XCA7CivmiYvntrEgPiB0YWR6dW5hXCA7CivoobDlvLEgPiBzdWlqYWt1XCA7Civlm57lv4MgPiBrYWlzaGluXCA7Civlm73lr74gPiBrb2t1dGFpXCA7CivmvIHnjbIgPiBneW9rYWt1XCA7Civlm57lvqkgPiBrYWlmdWt1XCA7CivnrZTnlLMgPiB0b3VzaGluXCA7CivmiYnntbUgPiB0b2JpcmFlXCA7Civlm73lrp0gPiBrb2t1aG91XCA7CivmvIHnjJ8gPiBneW9yeW91XCA7Civlm73lrpogPiBrb2t1dGVpXCA7Civlm73lroggPiBrb2t1c2h1XCA7CivnrJHntI0gPiBzaG91bm91XCA7CivmipXnkIMgPiB0b3VreXV1XCA7Civlm5rlvbkgPiBzaHV1ZWtpXCA7CivllIfpn7MgPiBzaGluJydvblwgOwor5o235aCxID4gc2hvdWhvdVwgOwor5o6i5YudID4gdGFuc2hvdVwgOwor5oqV542EID4gdG91Z29rdVwgOwor6KGM5oiQID4gaWtpbmFyaVwgOwor5ruR55+zID4ga2Fzc2VraVwgOwor5riF6YGpID4gc2VpdGVraVwgOwor5rqA6IW5ID4gbWFucHVrdVwgOwor6by76aqoID4gYmlrb3RzdVwgOwor5Zyw5Y+jID4gamlndWNoaVwgOwor5omL566SID4gdGVib3VraVwgOwor5ryC54S2ID4gaHlvdXplblwgOwor5ZSQ6ZaAID4ga2FyYW1vblwgOwor5ra86aKoID4gcnlvdWZ1dVwgOwor5rue55WZID4gdGFpcnl1dVwgOwor5oyH5pGYID4gc2hpdGVraVwgOwor5ra16aSKID4ga2FuJyd5b3VcIDsKK+aKuea2iCA+IG1hc3Nob3VcIDsKK+ernOiEsyA+IHJ5dXVub3VcIDsKK+WbveWkpyA+IGtva3VkYWlcIDsKK+exs+S/lyA+IGJlaXpva3VcIDsKK+WbveWkliA+IGtva3VnYWlcIDsKK+aOmOWJiiA+IGt1c3Nha3VcIDsKK+ihk+W+jCA+IGp1dHN1Z29cIDsKK+WbveWjqyA+IGtva3VzaGlcIDsKK+ijj+WBtCA+IHVyYWdhd2FcIDsKK+a/geWjsCA+IGRhbWlnb2VcIDsKK+exs+S9nCA+IGJlaXNha3VcIDsKK+a/gOWkiSA+IGdla2loZW5cIDsKK+WUsemBkyA+IHNob3Vkb3VcIDsKK+WVj+iyrCA+IG1vbnNla2lcIDsKK+aMkeaIpiA+IGNob3VzZW5cIDsKK+WbveWigyA+IGtva2t5b3VcIDsKK+ihqOWxpCA+IGh5b3Vzb3VcIDsKK+epuuiwtyA+IGt1dWtva3VcIDsKK+aIpue4viA+IHNlbnNla2lcIDsKK+a/gOWilyA+IGdla2l6b3VcIDsKK+aHh+imqiA+IGtvbnNoaW5cIDsKK+err+e2sSA+IGhhZHp1bmFcIDsKK+a3semBoCA+IHNoaW4nJ2VuXCA7CivmuJPosLcgPiBrZWlrb2t1XCA7Civnr6Tlv5cgPiB0b2t1c2hpXCA7Civoo4/kvZwgPiB1cmFzYWt1XCA7CivllpzoibIgPiBraXNob2t1XCA7Civoo4LlgrcgPiByZXNzaG91XCA7Civom67opZ8gPiBiYW5rYXJhXCA7CivnsbPkuK0gPiBiZWljaHV1XCA7Civnq4vohbkgPiByaXBwdWt1XCA7CivnqI7poY0gPiB6ZWlnYWt1XCA7Civmi5vmnaUgPiBzaG91cmFpXCA7Civnq7/nq7kgPiBzYW9kYWtlXCA7CivmvKvmpb0gPiBtYW5nYWt1XCA7Civmt6vpgLggPiBpbicnaXRzdVwgOwor5ouY5p2fID4ga291c29rdVwgOwor56m66Kq/ID4ga3V1Y2hvdVwgOwor56qB6KeSID4gdG9ra2FrdVwgOwor6Jmr6aGeID4gY2h1dXJ1aVwgOwor5o265Y2wID4gbmF0c3VpblwgOwor6KGG5bq2ID4gc2h1dXNob1wgOwor56u556u/ID4gdGFrZXphb1wgOwor5ZWP6Ki6ID4gbW9uc2hpblwgOwor5ouT5pysID4gdGFrdWhvblwgOwor5ryC5rWqID4gaHlvdXJvdVwgOwor5ouh5pWjID4ga2FrdXNhblwgOwor6Ju56JmrID4geW91Y2h1dVwgOwor6Yuz6Yu8ID4gY2h1dWtvdVwgOwor56mN6LyJID4gc2VraXNhaVwgOwor5rW36bOlID4ga2FpY2hvdVwgOwor5Zu95ZaqID4ga29rdXNvdVwgOwor5ZWG6KuHID4gc2hvdWRhblwgOwor56m66KWyID4ga3V1c2h1dVwgOwor5oiQ57i+ID4gc2Vpc2VraVwgOwor566G5qOSID4gYmVyYWJvdVwgOwor5Zyo5L+XID4gemFpem9rdVwgOwor5oux5omLID4ga3lvdXNodVwgOwor5ZaE6ImvID4gemVucnlvdVwgOwor6KGS5a2mID4gZ2VuZ2FrdVwgOwor6Yuz6YeRID4gY2h1dWtpblwgOwor56m66KGMID4ga3V1Z3lvdVwgOwor5Zyw5Li7ID4gamludXNoaVwgOwor5Zyw5LitID4gY2hpY2h1dVwgOwor5oiQ57SEID4gc2VpeWFrdVwgOwor5ZuD5a2QID4gaGF5YXNoaVwgOwor56eA6bqXID4gc2h1dXJlaVwgOwor5r+r5L2cID4gcmFuc2FrdVwgOwor6KGX5ai8ID4gZ2Fpc2hvdVwgOwor5Zu95ZCNID4ga29rdW1laVwgOwor5Zu95Y+4ID4ga29rdXNoaVwgOwor5Zu95Y+3ID4ga29rdWdvdVwgOwor5Zu95Y+yID4ga29rdXNoaVwgOwor6Yyv6KeSID4gc2Fra2FrdVwgOwor5Zyo5LqsID4gemFpa3lvdVwgOwor6KGd5aSpID4gc2hvdXRlblwgOwor566H5pyIID4ga2FnZXRzdVwgOwor5ZyP5YaFID4ga2VuJyduYWlcIDsKK+mMr+immiA+IHNha2tha3VcIDsKK+aLjeaVsCA+IGhha3VzdXVcIDsKK+a8ouacnSA+IGthbmNob3VcIDsKK+euoeaOjCA+IGthbnNob3VcIDsKK+WcqOS4rSA+IHphaWNodXVcIDsKK+a9nOW/gyA+IHNlbnNoaW5cIDsKK+WbnuWbvSA+IGthaWtva3VcIDsKK+a9m+W/gyA+IHNlbnNoaW5cIDsKK+ihqOWcqCA+IGh5b3V6YWlcIDsKK+a7tOawtCA+IHRla2lzdWlcIDsKK+aJk+eOhyA+IGRhcml0c3VcIDsKK+mLs+mAoCA+IGNodXV6b3VcIDsKK+WbveWLoiA+IGtva3VzZWlcIDsKK+Wbm+WbvSA+IHNoaWtva3VcIDsKK+WbveWKtCA+IGtva3Vyb3VcIDsKK+a3seisnSA+IHNoaW5zaGFcIDsKK+aLneaJvyA+IGhhaXNob3VcIDsKK+a3seisgCA+IHNoaW5ib3VcIDsKK+WaruWwjiA+IGt5b3Vkb3VcIDsKK+a/gOWLlSA+IGdla2lkb3VcIDsKK+eri+exsyA+IHJ5dXViZWlcIDsKK+eti+azqCA+IGtpbmNodXVcIDsKK+a/gOWKsSA+IGdla2lyZWlcIDsKK+aKkeatoiA+IHlva3VzaGlcIDsKK+a8ouaXjyA+IGthbnpva3VcIDsKK+a6gOelqCA+IG1hbnB5b3VcIDsKK+evgOW6piA+IHNldHN1ZG9cIDsKK+emvemzpSA+IGtpbmNob3VcIDsKK+aItOeZvSA+IHRhaWhha3VcIDsKK+aLmeaKgCA+IHNldHN1Z2lcIDsKK+a8gealrSA+IGd5b2d5b3VcIDsKK+a8lOabsiA+IGVua3lva3VcIDsKK+a2sumHjyA+IGVraXJ5b3VcIDsKK+ibh+igjSA+IGRha2F0c3VcIDsKK+WbveWGhSA+IGtva3VuYWlcIDsKK+m8jumdqSA+IHRlaWtha3VcIDsKK+iblOiZqyA+IGthaWNodXVcIDsKK+WbveWFuCA+IGtva3V0ZW5cIDsKK+idi+efsyA+IHJvdXNla2lcIDsKK+ernOelniA+IHJ5dXVqaW5cIDsKK+a2iOmYsiA+IHNob3Vib3VcIDsKK+a1gem6lyA+IHJ5dXVyZWlcIDsKK+err+eahCA+IHRhbnRla2lcIDsKK+a4qeiJsiA+IG9uc2hva3VcIDsKK+ibh+idjiA+IGRha2F0c3VcIDsKK+WbveWCtSA+IGtva3VzYWlcIDsKK+a6lueUqCA+IGp1bicneW91XCA7CivnqbTolLUgPiBhbmFndXJhXCA7Civmi43miYsgPiBoYWt1c2h1XCA7CivmtojplpEgPiBzaG91a2FuXCA7CivmiYvnh60gPiB0ZXNob2t1XCA7CivllqrnpZ4gPiBzb3VzaGluXCA7Civlm5vlkaggPiBzaGlzaHV1XCA7Civlm57lj44gPiBrYWlzaHV1XCA7CivnrrHluKsgPiBoYWtvc2hpXCA7Civooajlj7cgPiBoeW91Z291XCA7Civpu4TpursgPiB0c3VuYXNvXCA7CivomavphbggPiBtdXNoaXp1XCA7CivmuoDnm64gPiBtYW5tb2t1XCA7Civmi53lvqkgPiBoYWlmdWt1XCA7CivpkJjmpbwgPiBzaG91cm91XCA7Civnq4vnp4sgPiByaXNzaHV1XCA7Civnp4vpoqggPiBzaHV1ZnV1XCA7CivmirzmjbogPiBvdW5hdHN1XCA7Civlm73kvb8gPiBrb2t1c2hpXCA7Civmi5vlvoUgPiBzaG91dGFpXCA7CivmtabpoqggPiB1cmFrYXplXCA7CivnqbrojLYgPiBrYXJhY2hhXCA7Civlm73kvZMgPiBrb2t1dGFpXCA7Civnq5znnLwgPiByeXV1Z2FuXCA7CivmtbfpmbggPiBrYWlyaWt1XCA7CivnqIDph4ggPiBraXNoYWt1XCA7CivnqI7ovrwgPiB6ZWlrb21pXCA7Civpu5Lpr5sgPiBrdXJvZGFpXCA7CivnqbroibIgPiBzb3JhaXJvXCA7CivmjJnlm70gPiBreW9rb2t1XCA7Civlm73kuLsgPiBrb2t1c2h1XCA7CivoobDlhYYgPiBzdWljaG91XCA7Civlm73kuK0gPiBrdW5panV1XCA7Civnp4vpnJwgPiBzaHV1c291XCA7CivllonnrJsgPiBub2RvYnVlXCA7Civnp4vpnJYgPiBzaHV1cmluXCA7Civom67nv5IgPiBiYW5zaHV1XCA7Civpu4Tps6UgPiBrb3VjaG91XCA7CivooYzllZMgPiBneW91a2VpXCA7Civnp4vpm6ggPiBha2lzYW1lXCA7CivnqbrohbkgPiBrdXVmdWt1XCA7Civmu4vmrpYgPiBqaXNob2t1XCA7CivooZ3li5UgPiBzaG91ZG91XCA7CivmjL/lhaUgPiBzb3VueXV1XCA7Civlkozpo58gPiB3YXNob2t1XCA7Civmipzmk6IgPiBiYXR0ZWtpXCA7Civmuq/mupAgPiBzYWt1Z2VuXCA7Civmipvmk7IgPiBob3V0ZWtpXCA7CivllYboiLkgPiBzaG91c2VuXCA7CivpjbXnqbQgPiBrYWdpYW5hXCA7CivmjK/li5UgPiBzaGluZG91XCA7Civon7vlt7sgPiBhcmltYWtpXCA7CivmibbmpI0gPiBmdXNob2t1XCA7CivmioTmnKwgPiBzaG91aG9uXCA7CivmjIflnKcgPiBzaGlhdHN1XCA7CivmipXmk7IgPiB0b3V0ZWtpXCA7CivmjIflm7MgPiBzYXNoaXp1XCA7CivmurrmsLQgPiBkZWtpc3VpXCA7Civnr4nlnLAgPiB0c3VraWppXCA7Civpu5LpoqggPiBrb2t1ZnV1XCA7CivonYvnh60gPiByb3Vzb2t1XCA7CivmurrmrbsgPiBkZWtpc2hpXCA7Civmi5nlroUgPiBzZXR0YWt1XCA7CivmiYvmsqIgPiBzaHV0YWt1XCA7Civmg6PpoJggPiBzb3VyeW91XCA7CivnpoHps6UgPiBraW5jaG91XCA7CivmipHmj5ogPiB5b2t1eW91XCA7Civlm5rkurogPiBzaHV1amluXCA7CivmuIXogbQgPiBzZWljaG91XCA7CivnrIrms5UgPiB6YXJ1aG91XCA7Civmh4fnr6QgPiBrb250b2t1XCA7Civnq7bmvJUgPiBreW91c291XCA7Civmt7Poia8gPiBqdW5yeW91XCA7CivmuJvntaYgPiBnZW5reXV1XCA7Civpj5bmrrogPiBvdXNhdHN1XCA7CivllJDolq8gPiBrYXJhaW1vXCA7CivnqI7oqr8gPiB6ZWljaG91XCA7CivnrJHmraIgPiBzaG91c2hpXCA7CivomK3pi7MgPiByYW5jaHV1XCA7Civmi6HlpKcgPiBrYWt1ZGFpXCA7CivpioXpkLggPiBkb3V0YWt1XCA7Civmi43lrZAgPiBoeW91c2hpXCA7CivpioXpj6EgPiBkb3VreW91XCA7CivmtbjpgI8gPiBzaGludG91XCA7CivnrZbmiKYgPiBzYWt1c2VuXCA7CivmiJDnhp8gPiBzZWlqdWt1XCA7CivmupzmsaAgPiB0YW1laWtlXCA7Civmtabph4wgPiB1cmF6YXRvXCA7Civmua/nhqggPiB5dW5vc2hpXCA7CivllqvnhZkgPiBraXRzdWVuXCA7CivlmInml6UgPiBrYWppdHN1XCA7CivmuoDmva4gPiBtYW5jaG91XCA7Civnp7Dos5sgPiBzaG91c2FuXCA7CivlmoflmocgPiBrYWtrYWt1XCA7CivllYbntYwgPiBzaG91a2VpXCA7Civmi5PlpKcgPiB0YWt1ZGFpXCA7CivmupDmtYEgPiBnZW5yeXV1XCA7CivnqY7ohLEgPiBlaWRhdHN1XCA7CivnqoHnq68gPiB0b3BwYW5hXCA7CivooYzkvZMgPiBneW91dGFpXCA7CivmvKLlraYgPiBrYW5nYWt1XCA7Civpu4Tpm4AgPiBrb3VqYWt1XCA7CivlloDnl7AgPiBrYWt1dGFuXCA7CivpvLvooYAgPiBoYW5hZGppXCA7CivpjK/ntpwgPiBzYWt1c291XCA7Civmt7HogJUgPiBzaGlua291XCA7CivooZPkuK0gPiBqdXRjaHV1XCA7CivmtL7plqUgPiBoYWJhdHN1XCA7CivlloTnlKggPiB6ZW4nJ3lvdVwgOwor6Juf56ucID4ga291cnlvdVwgOwor5ryG5belID4gc2hpa2tvdVwgOwor5oay56ugID4ga2Vuc2hvdVwgOwor6bq76ZuAID4gbWF6ZWphblwgOwor5oim5rOBID4gc2Vua3lvdVwgOwor5ryB5birID4gcnlvdXNoaVwgOwor56+G5Yi7ID4gdGVua29rdVwgOwor6KGG5Lq6ID4gc2h1dWppblwgOwor5omA5qWtID4gc2hvZ3lvdVwgOwor56m256ufID4ga3Vra3lvdVwgOwor5Ziy5byEID4gY2hvdXJvdVwgOwor5oiv5q2MID4gemFyZXV0YVwgOwor6KCi5YuVID4gc2h1bmRvdVwgOwor5ZSQ6Ie8ID4ga2FyYXVzdVwgOwor5rqA5rSyID4gbWFuc2h1dVwgOwor5rm+5rWBID4gd2Fucnl1dVwgOwor5ZaE546JID4gemVuZGFtYVwgOwor56eB6YCaID4gc2hpdHN1dVwgOwor56iu6IuXID4gc2h1YnlvdVwgOwor5rW36LOKID4ga2Fpem9rdVwgOwor56iu6IqLID4gdGFuZWltb1wgOwor5rmu5ruFID4gaW5tZXRzdVwgOwor5oim5q20ID4gc2VucmVraVwgOwor5oyH5YCkID4gc2FzaGluZVwgOwor5rW36LG5ID4ga2FpaHlvdVwgOwor5rW36LGhID4gc2VpdWNoaVwgOwor56qu54q2ID4ga3l1dWpvdVwgOwor5oq85aOyID4gb3NoaXVyaVwgOwor5ZOB6KmVID4gaGlucHlvdVwgOwor5oOo6YW3ID4gemFua29rdVwgOwor5oKq6aOfID4gYWt1amlraVwgOwor6Juu55qEID4gYmFudGVraVwgOwor5rex57SFID4gc2hpbmtvdVwgOwor56We6auEID4gc2hpbnp1aVwgOwor6JiH6YmEID4gc290ZXRzdVwgOwor562J5by1ID4gdG91Y2hvdVwgOwor6J+E5bGFID4gY2hpa2t5b1wgOwor5oSa6KqsID4gZ3VzZXRzdVwgOwor5oe45r+BID4ga2VuZGFrdVwgOwor5ZWG56S+ID4gc2hvdXNoYVwgOwor6YqD6LqrID4ganV1c2hpblwgOwor5rqd5p2/ID4gZG9idWl0YVwgOwor5riF56eLID4gc2Vpc2h1dVwgOwor5oSf6KaaID4ga2Fua2FrdVwgOwor5riF56aPID4gc2VpZnVrdVwgOwor5rib55uKID4gZ2VuJydla2lcIDsKK+a4heelpSA+IHNlaXNob3VcIDsKK+WaouS4rSA+IG5vdWNodXVcIDsKK+elnumljCA+IHNoaW5zZW5cIDsKK+m+jeelniA+IHJ5dXVqaW5cIDsKK+enmOiooyA+IGhpa2V0c3VcIDsKK+epuueZvSA+IGt1dWhha3VcIDsKK+a9nOS8jyA+IHNlbnB1a3VcIDsKK+WYhuaBryA+IHRhbnNva3VcIDsKK+iZueiJsiA+IG5pamlpcm9cIDsKK+etluWumiA+IHNha3V0ZWlcIDsKK+a1gemAoyA+IHJ5dXVyZW5cIDsKK+a1ruiqrCA+IGZ1c2V0c3VcIDsKK+epjeeulyA+IHNla2lzYW5cIDsKK+aCqumYuyA+IHRzdXdhcmlcIDsKK+aGtueXhSA+IG9rdWJ5b3VcIDsKK+aFo+e/kiA+IGthbnNodXVcIDsKK+a3seeqkyA+IHNoaW5zb3VcIDsKK+aIr+absiA+IGdpa3lva3VcIDsKK+aJi+aOjCA+IHNodXNob3VcIDsKK+aCo+mboyA+IGthbicnbmFuXCA7Civmi6HlhYUgPiBrYWt1anV1XCA7CivnpZ7pn7sgPiBzaGluJydpblwgOwor56mA57KJID4ga29rdWZ1blwgOwor5ZOo6IiOID4gc2hvdXNoYVwgOwor566h5YaFID4ga2FuJyduYWlcIDsKK+mRv+S6lSA+IHNha3VzZWlcIDsKK+WUkOezuCA+IGthcmFpdG9cIDsKK+mJhOmOmiA+IHRldHRzdWlcIDsKK+epuueTtiA+IGthcmFiaW5cIDsKK+a6gOagqiA+IG1hbmthYnVcIDsKK+mLvOe0oiA+IGtvdXNha3VcIDsKK+aLjeWLlSA+IGhha3Vkb3VcIDsKK+aJi+aKhCA+IHNodXNob3VcIDsKK+enmOihkyA+IGhpanV0c3VcIDsKK+a7keW4rSA+IGthc3Nla2lcIDsKK+elnumciiA+IHNoaW5yZWlcIDsKK+aIkOalrSA+IHNlaWd5b3VcIDsKK+ibi+eZvSA+IHRhbnBha3VcIDsKK+WRqOmBiiA+IHNodXV5dXVcIDsKK+aCoOmVtyA+IHl1dWNob3VcIDsKK+WVhueUqCA+IHNob3V5b3VcIDsKK+a7heW6piA+IG1ldHN1ZG9cIDsKK+a6gOabtCA+IG1hbnphcmFcIDsKK+etluWjqyA+IHNha3VzaGlcIDsKK+WRqOi+uiA+IHNodXVoZW5cIDsKK+aIkOahgiA+IG5hcmlrZWlcIDsKK+a1t+ibhyA+IHVtaWhlYmlcIDsKK+a0u+i3ryA+IGthdHN1cm9cIDsKK+m7kuiygiA+IGt1cm90ZW5cIDsKK+mQmOWjsCA+IHNob3VzZWlcIDsKK+aLmeS9nCA+IHNlc3Nha3VcIDsKK+mKreiRtSA+IHplbmlhb2lcIDsKK+a8huWWsCA+IHNoaWtrdWlcIDsKK+azoumfsyA+IG5hbWlvdG9cIDsKK+eonOe3miA+IHJ5b3VzZW5cIDsKK+eqruawkSA+IGt5dXVtaW5cIDsKK+aJjeW+syA+IHNhaXRva3VcIDsKK+eri+ahiCA+IHJpdHN1YW5cIDsKK+m7meiqjSA+IG1va3VuaW5cIDsKK+aFtuemjyA+IGtlaWZ1a3VcIDsKK+WRteiyrCA+IGthc2hha3VcIDsKK+epuueIhiA+IGt1dWJha3VcIDsKK+WQg+mpmiA+IGJpa2t1cmlcIDsKK+idv+W4syA+IGhhaWNob3VcIDsKK+eqruatuyA+IGt5dXVzaGlcIDsKK+WQhOmnhSA+IGtha3Vla2lcIDsKK+WVhueKtiA+IHNob3Vqb3VcIDsKK+eni+ialSA+IHNodXVzYW5cIDsKK+aKvOWFpSA+IG9zaGlpcmVcIDsKK+a3t+eUqCA+IGtvbicneW91XCA7CivmuKbmva4gPiB1enVzaGlvXCA7Civpu5noppYgPiBtb2t1c2hpXCA7CivomK3omasgPiByYW5jaHV1XCA7Civph6PprZogPiBjaG91Z3lvXCA7CivmiJHmlrkgPiB3YWdhaG91XCA7CivlkIzpoY0gPiBkb3VnYWt1XCA7CivnqbTnhoogPiBhbmFndW1hXCA7CivmtYHoqqwgPiBydXNldHN1XCA7CivmiYDlvpcgPiBzaG90b2t1XCA7Civmupzmga8gPiB0YW1laWtpXCA7Civmt7HnlJogPiBzaGluamluXCA7Civmga3poIYgPiBreW91anVuXCA7CivmvI/liLsgPiByb3Vrb2t1XCA7CivolqnplbcgPiBzYXRjaG91XCA7CivmtYHoqIAgPiByeXV1Z2VuXCA7Civmi4Xku7sgPiB0YW4nJ25pblwgOwor5oSf6IiIID4ga2Fua3lvdVwgOwor5reh55m9ID4gdGFucGFrdVwgOwor56uL5pilID4gcmlzc2h1blwgOwor56qv5qWtID4geW91Z3lvdVwgOwor5oqc5Y67ID4gYmFra3lvdVwgOwor5oqX5ZGKID4ga291a29rdVwgOwor5rip5rW0ID4gb24nJ3lva3VcIDsKK+emgei2syA+IGtpbnNva3VcIDsKK+a6luaApSA+IGp1bmt5dXVcIDsKK+WQg+mfsyA+IGtpdHN1b25cIDsKK+mJhOi3ryA+IHRldHN1cm9cIDsKK+ekvumVtyA+IHNoYWNob3VcIDsKK+epuua8oCA+IGt1dWJha3VcIDsKK+WQhOmdoiA+IGtha3VtZW5cIDsKK+m7kuihgCA+IGt1cm9jaGlcIDsKK+a2iOiAlyA+IHNob3Vtb3VcIDsKK+ero+aIkCA+IHNodW5zZWlcIDsKK+a0l+i2syA+IHNlbnNva3VcIDsKK+m7kuifuyA+IGt1cm9hcmlcIDsKK+aGtua4rCA+IG9rdXNva3VcIDsKK+a1geihjCA+IHJ5dXVrb3VcIDsKK+eqkuatuyA+IGNoaXNzaGlcIDsKK+mHkemrmCA+IGtpbmRha2FcIDsKK+etuuS9kyA+IGt5b3V0YWlcIDsKK+WQhOmajiA+IGtha3VrYWlcIDsKK+WQq+mHjyA+IGdhbnJ5b3VcIDsKK+eni+iNiSA+IGFraWt1c2FcIDsKK+aJjeWtpiA+IHNhaWdha3VcIDsKK+elnumBkyA+IHNoaW50b3VcIDsKK+WQvui8qSA+IHdhZ2FoYWlcIDsKK+aGpOa/gCA+IGZ1bmdla2lcIDsKK+aDheiqvyA+IGpvdWNob3VcIDsKK+aEieiJsiA+IHl1c2hva3VcIDsKK+eoruebriA+IHNodW1va3VcIDsKK+a4hea/gSA+IHNlaWRha3VcIDsKK+etluWLlSA+IHNha3Vkb3VcIDsKK+WRqOimpyA+IHNodXVyYW5cIDsKK+a4hea+hCA+IHNlaWNob3VcIDsKK+aJgOWxniA+IHNob3pva3VcIDsKK+etluWKsSA+IHNha3VyZWlcIDsKK+aIpuW9uSA+IHNlbicnZWtpXCA7CivoloTpm7IgPiB1c3VndW1vXCA7CivoloTpm6ogPiB1c3V5dWtpXCA7CivnpZ3ovp4gPiBzaHVrdWppXCA7CivmipHliLYgPiB5b2t1c2VpXCA7CivmgYvpoqggPiBrb2lrYXplXCA7CivllYbmuK8gPiBzaG91a291XCA7CivnpZ7ovL8gPiBtaWtvc2hpXCA7CivolYHpursgPiBpcmFrdXNhXCA7CivmuJPmtYEgPiBrZWlyeXV1XCA7Civmub/mgKcgPiBzaGlzc2VpXCA7Civnq6Xlv4MgPiBkb3VzaGluXCA7CivmiJLmhY4gPiBrYWlzaGluXCA7CivmipXlhaUgPiB0b3VueXV1XCA7Civpub/ov70gPiBzaGlrYW9pXCA7CivnpZbov7AgPiBzb2p1dHN1XCA7Civmt4vnl4UgPiByaW5ieW91XCA7CivmiIrmiIwgPiBib2p1dHN1XCA7CivolqzphZIgPiB5YWt1c2h1XCA7CivlkarooZMgPiBqdWp1dHN1XCA7Civlj6TpoZQgPiBmdXJ1Z2FvXCA7CivmtYXoloQgPiBzZW5wYWt1XCA7CivmiYvlprsgPiB0ZWR6dW1hXCA7Civmt7fmv4EgPiBrb25kYWt1XCA7Civph5HpoY0gPiBraW5nYWt1XCA7CivpiaTomasgPiBrb3VjaHV1XCA7CivmtaPohbggPiBrYW5jaG91XCA7CivmuIXmtrwgPiBzZWlyeW91XCA7Civmg6jokL0gPiBzYW5yYWt1XCA7CivllYbms5UgPiBzaG91aG91XCA7CivmhaPnlKggPiBrYW4nJ3lvdVwgOwor6YqF6IetID4gZG91c2h1dVwgOwor56yR5aOwID4gc2hvdXNlaVwgOwor6JiK6JOEID4gdW5jaGlrdVwgOwor6YqA6ImyID4gZ2luJydpcm9cIDsKK+m6puinkiA+IGJha2tha3VcIDsKK+aIkuW/gyA+IGthaXNoaW5cIDsKK+aKleS/oSA+IHRvdXNoaW5cIDsKK+a4hea1gSA+IHNlaXJ5dXVcIDsKK+engeiFuSA+IHNoaWZ1a3VcIDsKK+a6gOW5hSA+IG1hbnB1a3VcIDsKK+WPsOmWoyA+IGRhaWtha3VcIDsKK+a6gOW4rSA+IG1hbnNla2lcIDsKK+aJv+WJjSA+IHNob3V6ZW5cIDsKK+WWrOW/lyA+IGt5b3VzaGlcIDsKK+a3sea9rSA+IHNoaW50YW5cIDsKK+WPjemngSA+IGhhbnBha3VcIDsKK+ero+W3pSA+IHNodW5rb3VcIDsKK+a6gOW3niA+IG1hbnNodXVcIDsKK+WWquW/gyA+IHNvdXNoaW5cIDsKK+WQjOmHjyA+IGRvdXJ5b3VcIDsKK+elneizgCA+IHNodWt1Z2FcIDsKK+aCquiplSA+IGFrdWh5b3VcIDsKK+WThOeskSA+IGtvdXNob3VcIDsKK+aCquiosyA+IGFrdXlha3VcIDsKK+aApemosCA+IGt5dXV0b3VcIDsKK+iVqumbkSA+IGJ1emF0c3VcIDsKK+m7kuiMtiA+IGt1cm9jaGFcIDsKK+eojuebriA+IHplaW1va3VcIDsKK+aKmOS4rSA+IHNldGNodXVcIDsKK+enmOe1kCA+IGhpa2V0c3VcIDsKK+WQjOmDtyA+IGRvdWt5b3VcIDsKK+aHsuaIkiA+IGNob3VrYWlcIDsKK+ekuumBlCA+IGppdGF0c3VcIDsKK+mHjemZvSA+IGNob3V5b3VcIDsKK+a3sea3tSA+IHNoaW4nJ2VuXCA7Civmh5Dml6cgPiBrYWlreXV1XCA7CivnrZDkvZMgPiBreW91dGFpXCA7CivomY7nqbQgPiBrb2tldHN1XCA7Civllpjmga8gPiB6ZW5zb2t1XCA7Civlj43pn78gPiBoYW5reW91XCA7Civpjq7lrpogPiBjaGludGVpXCA7Civmt7HmtbcgPiBzaGlua2FpXCA7CivllYbmqKkgPiBzaG91a2VuXCA7CivnrZLkupUgPiB0c3V0c3VpXCA7Civmt7HmtYUgPiBzaGluc2VuXCA7Civlk7LnkIYgPiB0ZXRzdXJpXCA7CivpiI3otrMgPiBkb25zb2t1XCA7CivnqbrmobYgPiBrYXJhb2tlXCA7CivoloTpiI0gPiB1c3Vub3JvXCA7Civmh7LmgqogPiBjaG91YWt1XCA7CivnqbrmoKogPiBrdXVrYWJ1XCA7Civom67ml48gPiBiYW56b2t1XCA7CivolYnpoqggPiBzaG91ZnV1XCA7CivnrJvlkLkgPiBmdWVmdWtpXCA7Civms5XouqsgPiBob3NzaGluXCA7Civnq5zlrq4gPiByeXV1Z3V1XCA7CivnpZ3oqIAgPiBzaHV1Z2VuXCA7Civpj6Hlj7AgPiBreW91ZGFpXCA7CivmgaXovrEgPiBjaGlqb2t1XCA7CivmsojpnZkgPiBjaGluc2VpXCA7Civmh7LlvbkgPiBjaG91ZWtpXCA7CivlloTmgqogPiB6ZW4nJ2FrdVwgOwor5rue5LqsID4gdGFpa3lvdVwgOwor6YeN6Y6uID4ganV1Y2hpblwgOwor5ZCN6LehID4gbWVpc2VraVwgOwor5oCl6ZujID4ga3l1dW5hblwgOwor6JaE6YGHID4gaGFrdWd1dVwgOwor5Y+C6ZuGID4gc2Fuc2h1dVwgOwor5reh5rOKID4gdGFucGFrdVwgOwor5omL5Y+jID4gdGVndWNoaVwgOwor5rKI6ZmNID4gY2hpbmtvdVwgOwor5rW456S8ID4gc2hpbnJlaVwgOwor5ZGo6IiqID4gc2h1dWtvdVwgOwor5ZaE5b+DID4gemVuc2hpblwgOwor5ZaE5b6zID4gemVudG9rdVwgOwor5omT5YqbID4gZGFyeW9rdVwgOwor5rer5qyyID4gaW4nJ3lva3VcIDsKK+mKgOe0mSA+IGdpbmdhbWlcIDsKK+mItOiYrSA+IHN1enVyYW5cIDsKK+aIpuWfnyA+IHNlbicnaWtpXCA7CivlkJ/oqqYgPiBnaW5zaG91XCA7CivnqbbmmI4gPiBreXV1bWVpXCA7Civlk4Hnm64gPiBoaW5tb2t1XCA7CivphpzpoZ4gPiBzaHV1cnVpXCA7CivpvbLmra8gPiBtdXNoaWJhXCA7Civlj6zpgoQgPiBzaG91a2FuXCA7Civms6jop6MgPiBjaHV1a2FpXCA7Civlj6/pgIYgPiBrYWd5YWt1XCA7CivmhoLmrJ0gPiB5dXV1dHN1XCA7CivpioXnrpQgPiBkb3VoYWt1XCA7Civms6joppYgPiBjaHV1c2hpXCA7Civph43ph48gPiBqdXVyeW91XCA7CivmiKblm70gPiBzZW5nb2t1XCA7CivmiYDlj44gPiBzaG9zaHV1XCA7CivmhJvnnYAgPiBhaWNoYWt1XCA7CivpiI3op5IgPiBkb25rYWt1XCA7CivpuqbojLYgPiBtdWdpY2hhXCA7Civpu5Lnt5ogPiBrb2t1c2VuXCA7CivmhJrnm7QgPiBndWNob2t1XCA7CivpioDnrpQgPiBnaW5wYWt1XCA7Civpj6Hlg48gPiBreW91em91XCA7Civol6ToibIgPiBmdWppaXJvXCA7Civlj7LouZ8gPiBzaGlzZWtpXCA7CivmiLjlj6MgPiB0b2d1Y2hpXCA7Civnqbrmj5ogPiBrYXJhYWdlXCA7CivpioDnrJsgPiBnaW50ZWtpXCA7Civmub/lnLAgPiBzaGl0Y2hpXCA7Civmtbfnm7ggPiBrYWlzaG91XCA7CivnrKzkuIAgPiBkYWlpY2hpXCA7CivmuIXmlrAgPiBzZWlzaGluXCA7Civmga3orJkgPiBreW91a2VuXCA7Civph47pgZMgPiBub21pY2hpXCA7CivllJDmrYwgPiBrYXJhdXRhXCA7CivlkIzoqr8gPiBkb3VjaG91XCA7Civlj7Lot6EgPiBzaGlzZWtpXCA7Civpt7npmrwgPiB5b3VzaHVuXCA7Civnq7blkIggPiBreW91Z291XCA7CivlkI3oqLMgPiBtZWl5YWt1XCA7Civlj47ph5EgPiBzaHV1a2luXCA7CivlkIjoqr8gPiBnb3VjaG91XCA7Civlj6PovKogPiBrdWNoaXdhXCA7Civmt7PmnLQgPiBqdW5ib2t1XCA7Civpu4Tnt5EgPiBvdXJ5b2t1XCA7Civlv6DprYIgPiBjaHV1a29uXCA7CivlkIToq5YgPiBrYWt1cm9uXCA7CivmtrjmuIcgPiBrb2thdHN1XCA7CivlkIjoqZUgPiBnYXBweW91XCA7Civlj5nov7AgPiBqb2p1dHN1XCA7Civmt7Hmm7QgPiBzaGlua291XCA7CivmtJfohLMgPiBzZW4nJ25vdVwgOwor5oi45YilID4ga29iZXRzdVwgOwor56We6JGsID4gc2hpbnNvdVwgOwor56uL5aC0ID4gdGFjaGliYVwgOwor5ZSQ5qeYID4ga2FyYXlvdVwgOwor6bq757iEID4gYXNhbmF3YVwgOwor6ba66bSSID4gc2VraXJlaVwgOwor5oKq6IetID4gYWt1c2h1dVwgOwor56mN5pyoID4gdHN1bWlraVwgOwor5Y+k6LehID4gZnVydWF0b1wgOwor5rqW5YmHID4ganVuc29rdVwgOwor5oim5Y+LID4gc2VuJyd5dXVcIDsKK+a1tOeUqCA+IHlva3V5b3VcIDsKK+WQkOihgCA+IHRva2V0c3VcIDsKK+mIjuiZqyA+IGtvdWNodXVcIDsKK+iWhOisnSA+IGhha3VzaGFcIDsKK+mOruWPsCA+IGNoaW5kYWlcIDsKK+ayiOmFlCA+IGNoaW5zdWlcIDsKK+WVhuaJjSA+IHNob3VzYWlcIDsKK+m7meeltyA+IG1va3V0b3VcIDsKK+mHkei1pCA+IGtpbicnYWthXCA7CivmiYDkv6EgPiBzaG9zaGluXCA7CivllYbmiKYgPiBzaG91c2VuXCA7Civnq4vlm70gPiByaWtrb2t1XCA7Civpu5nnpLwgPiBtb2t1cmVpXCA7Civpu5nnpLogPiBtb2t1c2hpXCA7CivompXmpa0gPiBzYW5neW91XCA7CivmiKbli50gPiBzZW5zaG91XCA7Civlj5vot6EgPiBoYW5zZWtpXCA7CivmgJ3ph48gPiBzaGlyeW91XCA7CivmiYvkuK0gPiBzaHVjaHV1XCA7Civmtojnh4ggPiBzaG91dG91XCA7CivnpZ7oi5EgPiBzaGluJydlblwgOwor5omL5LiLID4gdGVzaGl0YVwgOwor5Y+O6LyJID4gc2h1dXNhaVwgOwor5oCl6YG9ID4ga3l1dWt5b1wgOwor56eB55qEID4gc2hpdGVraVwgOwor5rqA5Y2TID4gbWFudGFrdVwgOwor5oCl6YCgID4ga3l1dXpvdVwgOwor5oCl6YCdID4ga3l1dXNlaVwgOwor5rim5be7ID4gdXp1bWFraVwgOwor5rW354yrID4gdW1pbmVrb1wgOwor5oSa54mpID4gZ3VidXRzdVwgOwor6YeN6LKsID4ganV1c2VraVwgOwor6by75rGXID4gaGFuYWFzZVwgOwor5Y+N6LqrID4gaGFuc2hpblwgOwor5oCl6YCBID4ga3l1dXNvdVwgOwor5oiS5ZGKID4ga2Fpa29rdVwgOwor5ZaE5aWzID4gemVuJydueW9cIDsKK+elnuiIiCA+IG1pa29zaGlcIDsKK+aCque/kiA+IGFrdXNodXVcIDsKK+WPrOiriyA+IHNob3VzZWlcIDsKK+mJm+ethiA+IGVucGl0c3VcIDsKK+WPm+iziiA+IGhhbnpva3VcIDsKK+aIkuWQjSA+IGthaW15b3VcIDsKK+WOs+mFtyA+IGdlbmtva3VcIDsKK+ero+WKnyA+IHNodW5rb3VcIDsKK+WUkOacnSA+IHRvdWNob3VcIDsKK+a2iOeBryA+IHNob3V0b3VcIDsKK+W/g+mtgiA+IHNoaW5rb25cIDsKK+WOhOmboyA+IHlha3VuYW5cIDsKK+aIv+S4rSA+IGJvdWNodXVcIDsKK+WPjei3syA+IGhhbmNob3VcIDsKK+a1t+eJmyA+IGthaWd5dXVcIDsKK+mJseefsyA+IGtvdXNla2lcIDsKK+iWrOiOoiA+IHlha2t5b3VcIDsKK+m8u+atjCA+IGhhbmF1dGFcIDsKK+aGkeaLoCA+IGh5b3VreW9cIDsKK+mJhOe0oiA+IHRlc3Nha3VcIDsKK+W/g+mrhCA+IHNoaW56dWlcIDsKK+aApei7oiA+IGt5dXV0ZW5cIDsKK+WPjei2iiA+IGhhbmV0c3VcIDsKK+WQueiBtCA+IGZ1aWNob3VcIDsKK+a5r+WPoyA+IHl1Z3VjaGlcIDsKK+aIpuWCtyA+IHNlbnNob3VcIDsKK+WPpOiqrCA+IGtvc2V0c3VcIDsKK+awtOmjtCA+IG1penVhbWVcIDsKK+WQjeiWrCA+IG1laXlha3VcIDsKK+eov+aWmSA+IGtvdXJ5b3VcIDsKK+WNs+mhjCA+IHNva3VkYWlcIDsKK+W/oOmciiA+IGNodXVyZWlcIDsKK+WPo+iqrCA+IGt1emV0c3VcIDsKK+WPo+iqpiA+IGtvdXNob3VcIDsKK+iWrOiNiSA+IHlha3Vzb3VcIDsKK+eoruadvyA+IHRhbmVpdGFcIDsKK+iZq+awlyA+IG11c2hpa2VcIDsKK+epuuW4rSA+IGt1dXNla2lcIDsKK+a4rOWumiA+IHNva3V0ZWlcIDsKK+a1geeggiA+IHJ5dXVzaGFcIDsKK+a5vuWGhSA+IHdhbicnbmFpXCA7CivmhJXnhLYgPiBnYWt1emVuXCA7CivnqK7mnKwgPiB0YW5laG9uXCA7CivnpZ7ogZYgPiBzaGluc2VpXCA7Civlj47os4QgPiBzaHV1d2FpXCA7Civlj43os4ogPiBoYW56b2t1XCA7CivmhJ/mv4AgPiBrYW5nZWtpXCA7CivptrTpppYgPiBrYWt1c2h1XCA7Civomavmra8gPiBtdXNoaWJhXCA7CivlkITol6kgPiBrYWt1aGFuXCA7CivmtKrnqY0gPiBrb3VzZWtpXCA7Civnq7bkuokgPiBreW91c291XCA7Civlj6Pop5IgPiBrb3VrYWt1XCA7Civnqq7lnLAgPiBreXV1Y2hpXCA7CivllYblupcgPiBzaG91dGVuXCA7CivmsLfpnaIgPiBoeW91bWVuXCA7Civph43oqLMgPiBqdXV5YWt1XCA7CivpiI3oibIgPiBuaWJpaXJvXCA7CivljYPps6UgPiBjaGlkb3JpXCA7Civlj5noqqwgPiBqb3NldHN1XCA7Civlv5fpm4YgPiBzaGlzaHV1XCA7CivnqqrlnLAgPiBrdWJvY2hpXCA7CivmhpTmgrQgPiBzaG91c3VpXCA7Civmt7Hmha4gPiBzaGlucnlvXCA7Civnpo/npYkgPiBmdWt1c2hpXCA7Civnpo7npaUgPiB0ZWlzaG91XCA7CivmsJfpqqggPiBraWtvdHN1XCA7CivnqK7ml48gPiBzaHV6b2t1XCA7Civph4zopqogPiBzYXRvb3lhXCA7CivllYblt6UgPiBzaG91a291XCA7CivmuJvlsJEgPiBnZW5zaG91XCA7Civpu5Lnl6MgPiBrdXJvYXphXCA7CivphovphbggPiBzYWt1c2FuXCA7CivpuqbnrJsgPiBtdWdpYnVlXCA7CivlkJvoh6MgPiBrdW5zaGluXCA7CivmtJ7nqbQgPiBob3JhYW5hXCA7Civmh7jlkIogPiBrZW5jaG91XCA7CivpioPnjJ8gPiBqdXVyeW91XCA7Civlv4PpoZggPiBzaGluZ2FuXCA7Civmt6vmhb4gPiBpbicneW9rdVwgOwor5rW45r2kID4gc2hpbmp1blwgOwor5rqA5L2cID4gbWFuc2FrdVwgOwor5Y+k6KGAID4gZnVydWNoaVwgOwor5oaC5oiaID4geXV1c2VraVwgOwor5ZCr576eID4gZ2Fuc2h1dVwgOwor56m65bCGID4ga3V1c2hvdVwgOwor5b+D6aCtID4gc2hpbnRvdVwgOwor5ZSQ5o+aID4ga2FyYWFnZVwgOwor5oim5LitID4gc2VuY2h1dVwgOwor5rC06Zm4ID4gc3VpcmlrdVwgOwor5Y2g6aCYID4gc2VucnlvdVwgOwor5rW45rysID4gc2hpbnNoaVwgOwor5b+D6Z+zID4gc2hpbicnb25cIDsKK+WRqOefpSA+IHNodXVjaGlcIDsKK+WVk+WtpiA+IGtlaWdha3VcIDsKK+iWq+iCsiA+IGt1bicnaWt1XCA7CivmhIHnhLYgPiBzaHV1emVuXCA7Civpu4Tnmb0gPiBrb3VoYWt1XCA7Civlj43oqLwgPiBoYW5zaG91XCA7CivmtYHnlKggPiByeXV1eW91XCA7CivmuoDkuoYgPiBtYW5yeW91XCA7CivmtYHnlKMgPiByeXV1emFuXCA7CivnqY3mgqogPiBzZWtpYWt1XCA7CivpiZvnm7QgPiBlbmNob2t1XCA7CivmgqrnrZYgPiBha3VzYWt1XCA7Civpuqbnp4sgPiBtdWdpYWtpXCA7Civph5Hono0gPiBraW4nJ3l1dVwgOwor5b+F6ZyAID4gaGl0c3VqdVwgOwor5oaC5oSBID4geXV1c2h1dVwgOwor56We57WMID4gc2hpbmtlaVwgOwor5b+D6ZyKID4gc2hpbnJlaVwgOwor5oSf5rOjID4ga2Fua3l1dVwgOwor5Y+O6KanID4gc2h1dXJhblwgOwor5ZCM6IifID4gZG91c2h1dVwgOwor5oOH552mID4gdG9uYm9rdVwgOwor5rW35rexID4ga2Fpc2hpblwgOwor6Juu5aKDID4gYmFua3lvdVwgOwor5Y+N6KaGID4gaGFucHVrdVwgOwor56aP55u4ID4gZnVrdXNvdVwgOwor56qB5aaCID4gdG90c3Vqb1wgOwor5ray5pm2ID4gZWtpc2hvdVwgOwor5ZCM6IW5ID4gZG91ZnVrdVwgOwor5rW35rWBID4ga2Fpcnl1dVwgOwor5ZCE6IisID4ga2FrdWhhblwgOwor5ris5ZywID4gc29rdWNoaVwgOwor5oaC5b+DID4geXV1c2hpblwgOwor56mN5byKID4gc2VraWhlaVwgOwor6Jma5qWtID4ga3lvZ3lvdVwgOwor5rK56I+cID4gYWJ1cmFuYVwgOwor5Y2K6aGNID4gaGFuZ2FrdVwgOwor5rG66K2wID4ga2V0c3VnaVwgOwor6YmE55+zID4gdGVzc2VraVwgOwor5b+r6YGpID4ga2FpdGVraVwgOwor56mN5bm0ID4gc2VraW5lblwgOwor5rW45rC0ID4gc2hpbnN1aVwgOwor6YW36YGHID4ga29rdWd1dVwgOwor56eY5rG6ID4gaGlrZXRzdVwgOwor5b+r6YCfID4ga2Fpc29rdVwgOwor6buZ54S2ID4gbW9rdW5lblwgOwor6YWq6YW4ID4gcmFrdXNhblwgOwor56We56ulID4gc2hpbmRvdVwgOwor6YeJ6JasID4geXV1eWFrdVwgOwor5ZSx5bCOID4gc2hvdWRvdVwgOwor5ZGK55+lID4ga29rdWNoaVwgOwor5oCl6KGMID4ga3l1dWtvdVwgOwor5ZWG5aSnID4gc2hvdWRhaVwgOwor5rex5bGkID4gc2hpbnNvdVwgOwor5ZWG5aOyID4gc2hvdWJhaVwgOwor5oGL6I2JID4ga29pZ3VzYVwgOwor5oW25byUID4ga2VpY2hvdVwgOwor6YWi6YW4ID4gc2FrdXNhblwgOwor5rGC6YGTID4ga3l1dWRvdVwgOwor5rWm5rOiID4gdXJhbmFtaVwgOwor6Jas57GgID4geWFrdXJvdVwgOwor5riJ5aSWID4gc2hvdWdhaVwgOwor6buS54K5ID4ga29rdXRlblwgOwor6buS54KtID4ga29rdXRhblwgOwor5rC06YePID4gc3VpcnlvdVwgOwor56m65ZynID4ga3V1YXRzdVwgOwor56eL5rC0ID4gc2h1dXN1aVwgOwor5Y+z6IWVID4gbWlnaXVkZVwgOwor5Y+j6Iy2ID4ga3VjaGlqYVwgOwor5ZOB5qC8ID4gaGlua2FrdVwgOwor5b6S6aOfID4gdG9zaG9rdVwgOwor6YWq6L6yID4gcmFrdW5vdVwgOwor6JaE6IKJID4gdXN1bmlrdVwgOwor5Y+s6Ie0ID4gc2hvdWNoaVwgOwor5YyX6a6uID4gaG9rdXNlblwgOwor6bu05q+SID4gYmFpZG9rdVwgOwor6buE54afID4ga291anVrdVwgOwor5ZGq54mpID4ganVidXRzdVwgOwor5b+r6LazID4ga2Fpc29rdVwgOwor5Y+O6JS1ID4gc2h1dXpvdVwgOwor5Y+k6ImyID4ga29zaG9rdVwgOwor5rW05qe9ID4geW9rdXNvdVwgOwor5ra85oSfID4gcnlvdWthblwgOwor6YeR6ImyID4ga29uamlraVwgOwor6YWS6YePID4gc2h1cnlvdVwgOwor5oWi5b+DID4gbWFuc2hpblwgOwor5ZCM57SaID4gZG91a3l1dVwgOwor5Y6f6Ki7ID4gZ2VuY2h1dVwgOwor5oSB5q2OID4gc2h1dXRhblwgOwor5Y+j6IetID4ga291c2h1dVwgOwor5ZqH44CFID4ga2Fra2FrdVwgOwor5oKq55eHID4gYWt1c2hvdVwgOwor5oKq55eFID4gYWt1YnlvdVwgOwor5YyW6aqoID4ga2Frb3RzdVwgOwor6YeM6IqLID4gc2F0b2ltb1wgOwor6Yac6KGMID4gc2h1dWtvdVwgOwor5ZOo5oiSID4gc2hvdWthaVwgOwor5Y+N6JC9ID4gaGFucmFrdVwgOwor5Y2K6ZCYID4gaGFuc2hvdVwgOwor6Jas56iuID4geWFrdXNodVwgOwor5Y+j6IW5ID4ga291ZnVrdVwgOwor5b+D6YWUID4gc2hpbnN1aVwgOwor5b+D6YWNID4gc2hpbnBhaVwgOwor56aB542EID4ga2luZ29rdVwgOwor5rC36LyqID4gaHlvdXJpblwgOwor5oSf5pyNID4ga2FucHVrdVwgOwor5q+S6a2aID4gZG9rdWd5b1wgOwor56aB54yfID4ga2lucnlvdVwgOwor6YeN6IejID4ganV1c2hpblwgOwor5ZaE5Lq6ID4gemVuJyduaW5cIDsKK+WQuOebpCA+IGt5dXViYW5cIDsKK+ibruWLhyA+IGJhbicneXV1XCA7Civmt7HlpaUgPiBzaGluJydvdVwgOwor5ZCE57SZID4ga2FrdXNoaVwgOwor56eB5qyyID4gc2hpeW9rdVwgOwor6bm/56CmID4gcm9rdXNhaVwgOwor56WJ56aPID4gc2hpZnVrdVwgOwor5Y+b6IejID4gaGFuc2hpblwgOwor56S+56ugID4gc2hhc2hvdVwgOwor56qu5LmPID4ga3l1dWJvdVwgOwor5rW45p+TID4gc2hpbnNlblwgOwor6Yuz5belID4gY2h1dWtvdVwgOwor5rex5aScID4gc2hpbicneWFcIDsKK+eiuuiqjSA+IGtha3VuaW5cIDsKK+a4m+WPjiA+IGdlbnNodXVcIDsKK+iWrOekvCA+IHlha3VyZWlcIDsKK+mMqOWcsCA+IGJ5b3VjaGlcIDsKK+iWhOe4gSA+IHVzdWJlcmlcIDsKK+ayu+e4viA+IGNoaXNla2lcIDsKK+a2iOaVoyA+IHNob3VzYW5cIDsKK+elqOeUsCA+IGh5b3VkZW5cIDsKK+eiuuiogCA+IGtha3VnZW5cIDsKK+iWhOe1uSA+IHVzdWdpbnVcIDsKK+W/q+irviA+IGthaWRha3VcIDsKK+WMl+miqCA+IGhva3VmdXVcIDsKK+iWhOe1piA+IGhha2t5dXVcIDsKK+mHjeiBtCA+IGp1dWNob3VcIDsKK+WVhuWTgSA+IHNob3VoaW5cIDsKK+W/q+iqvyA+IGthaWNob3VcIDsKK+mKmOafhCA+IG1laWdhcmFcIDsKK+aCqueOiSA+IGFrdWRhbWFcIDsKK+enmOabsiA+IGhpa3lva3VcIDsKK+iWhOe0mSA+IHVzdWdhbWlcIDsKK+iWhOe0hSA+IHVzdWJlbmlcIDsKK+ensOaPmiA+IHNob3V5b3VcIDsKK+iTmumFuCA+IHNodXVzYW5cIDsKK+a4i+WRsyA+IHNoaWJ1bWlcIDsKK+WNl+mAsiA+IG5hbnNoaW5cIDsKK+m7meatoiA+IG1va3VzaGlcIDsKK+mKmOacqCA+IG1laWJva3VcIDsKK+mJseavkiA+IGtvdWRva3VcIDsKK+WQjeensCA+IG1laXNob3VcIDsKK+WVhuWPtyA+IHNob3Vnb3VcIDsKK+aAqOiJsiA+IGVuc2hva3VcIDsKK+a1geaxlyA+IHJ5dXVrYW5cIDsKK+WMl+mdoiA+IGhva3VtZW5cIDsKK+aCieeahiA+IHNoaWtrYWlcIDsKK+a1geawtCA+IHJ5dXVzdWlcIDsKK+eqgeWFiCA+IHRvc3Nha2lcIDsKK+a0u+azgSA+IGtha2t5b3VcIDsKK+mHiOe+qSA+IHNoYWt1Z2lcIDsKK+W+qemFjSA+IGZ1a3VoYWlcIDsKK+W/oOiqoCA+IGNodXVzZWlcIDsKK+WOn+iZqyA+IGdlbmNodXVcIDsKK+WQhOeoriA+IGtha3VzaHVcIDsKK+WPsuexjSA+IHNoaXNla2lcIDsKK+WQieelpSA+IGtpc3Nob3VcIDsKK+ehq+mFuCA+IHJ5dXVzYW5cIDsKK+aHkOS4rSA+IGthaWNodXVcIDsKK+WNmOi6qyA+IHRhbnNoaW5cIDsKK+W8sem9oiA+IGpha3VyZWlcIDsKK+mEremHjSA+IHRlaWNob3VcIDsKK+W/oOiogCA+IGNodXVnZW5cIDsKK+azoeebmyA+IGF3YW1vcmlcIDsKK+WMl+mZkCA+IGhva3VnZW5cIDsKK+WNh+mBtyA+IHNob3VzZW5cIDsKK+eni+aZtCA+IGFraWJhcmVcIDsKK+eptOWHuSA+IGFuYWJva29cIDsKK+mHkee2siA+IGthbmFhbWlcIDsKK+WPt+esmyA+IGdvdXRla2lcIDsKK+ibh+WPoyA+IGphZ3VjaGlcIDsKK+m7kuaqgCA+IGtva3V0YW5cIDsKK+a3keWlsyA+IHNodWt1am9cIDsKK+aGguWbvSA+IHl1dWtva3VcIDsKK+a0l+a/ryA+IHNlbnRha3VcIDsKK+WQhOekviA+IGtha3VzaGFcIDsKK+WPjOe/vCA+IHNvdXlva3VcIDsKK+WNiui+siA+IGhhbicnbm91XCA7CivnpoHmvIEgPiBraW5yeW91XCA7Civlj6PntIQgPiBrb3V5YWt1XCA7CivmuIXli50gPiBzZWlzaG91XCA7CivpiI3nl5sgPiBkb250c3V1XCA7Civnp4HmnI0gPiBzaGlmdWt1XCA7Civlj6Pns6cgPiBrb3VyeW91XCA7Civph5HntI0gPiBraW4nJ25vdVwgOwor5YyX6ZaAID4ga2l0YW1vblwgOwor5ZC454mpID4gc3VpbW9ub1wgOwor5Y6a6JaEID4ga291aGFrdVwgOwor6Ymx5qWtID4ga291Z3lvdVwgOwor5Y2B6YCyID4gamlzc2hpblwgOwor6Jas55SoID4geWFrdXlvdVwgOwor5rC46KijID4gZWlrZXRzdVwgOwor56mN5ZaEID4gc2VraXplblwgOwor6YqA5p2PID4gZ2luJyduYW5cIDsKK+a4oeS7jyA+IHRvZnV0c3VcIDsKK+ehnemFuCA+IHNob3VzYW5cIDsKK+ejiuiQvSA+IHJhaXJha3VcIDsKK+iZmuW/gyA+IGt5b3NoaW5cIDsKK+a4m+S9nCA+IGdlbnNha3VcIDsKK+WNiui6qyA+IGhhbnNoaW5cIDsKK+aDheazgSA+IGpvdWt5b3VcIDsKK+a0l+a7jCA+IHNlbmRla2lcIDsKK+awt+inoyA+IGh5b3VrYWlcIDsKK+WQjeebriA+IG1laW1va3VcIDsKK+WPpeevgCA+IGt1c2V0c3VcIDsKK+WQjOecgSA+IGRvdXNob3VcIDsKK+a0peazoiA+IHRzdW5hbWlcIDsKK+WPjue5rSA+IHNodXVrZW5cIDsKK+azleeahCA+IGhvdXRla2lcIDsKK+azieefsyA+IHNlbnNla2lcIDsKK+aylue4hCA+IG9raW5hd2FcIDsKK+awkei4iiA+IG1pbicneW91XCA7CivomZrlvLEgPiBreW9qYWt1XCA7CivljZTos5sgPiBreW91c2FuXCA7CivljbPoo70gPiBzb2t1c2VpXCA7Civph5HnrpQgPiBraW5wYWt1XCA7Civlj6TnrYYgPiBrb2hpdHN1XCA7Civlvozph5wgPiBhdG9nYW1hXCA7Civmt7HljpogPiBzaGlua291XCA7CivlvqHovL8gPiBtaWtvc2hpXCA7Civph43nr6QgPiBqdXV0b2t1XCA7Civmt7vliYogPiB0ZW5zYWt1XCA7Civph5HnrZYgPiBraW5zYWt1XCA7CivpibHmn7EgPiBrb3VjaHV1XCA7Civph5HnrYsgPiBraW5zdWppXCA7CivlvpfpgZMgPiB0b2t1ZG91XCA7CivnpKbnn7MgPiBrb3VzZWtpXCA7Civpg7fplqIgPiBreW91a2FuXCA7Civph43nrrEgPiBqdXViYWtvXCA7CivlkITnnIwgPiBrYWt1a2VuXCA7CivljqnoiI4gPiBreXV1c2hhXCA7Civlj6/npZ0gPiBrYXNoaWt1XCA7CivlkIznl4UgPiBkb3VieW91XCA7Civmg4XmrLIgPiBqb3V5b2t1XCA7Civlj47ntI0gPiBzaHV1bm91XCA7CivnqbrkuK0gPiBrdXVjaHV1XCA7Civpu5Lmnb8gPiBrb2t1YmFuXCA7CivnpZ7nga8gPiBzaGludG91XCA7Civol4HngbAgPiB3YXJhYmFpXCA7CivlkIznlLogPiBkb3VjaG91XCA7CivomavlrrMgPiBjaHV1Z2FpXCA7CivmhJ/lv5wgPiBrYW4nJ25vdVwgOwor5ZWG5LyaID4gc2hvdWthaVwgOwor5oSf5b+DID4ga2Fuc2hpblwgOwor5Y2Y6Kq/ID4gdGFuY2hvdVwgOwor6YqD5pKDID4ganV1Z2VraVwgOwor6buE5qKiID4ga291c2hvdVwgOwor5oSf5b6XID4ga2FudG9rdVwgOwor5oOH5qi4ID4gdG9uYm9rdVwgOwor55+z6a+bID4gaXNoaWRhaVwgOwor6Yac6IGeID4gc2h1dWJ1blwgOwor5ZWG5Lq6ID4gc2hvdW5pblwgOwor5b6M6YC4ID4ga291aXRzdVwgOwor5b6M6YCyID4ga291c2hpblwgOwor6YeN56mNID4ganV1c2VraVwgOwor5Y+w55+zID4gZGFpaXNoaVwgOwor5Y2T6KuWID4gdGFrdXJvblwgOwor5q6/6ZajID4gZGVua2FrdVwgOwor6JaE55quID4gdXN1a2F3YVwgOwor5Y6a6Ie8ID4gYXRzdXVzdVwgOwor5Y2a6KanID4gaGFrdXJhblwgOwor5Y2Y6KeSID4gdGFua2FrdVwgOwor6JmO5be7ID4gdG9yYWthblwgOwor5b2T6ZmQID4gdG91Z2lyaVwgOwor56mN5YiGID4gc2VraWJ1blwgOwor5oKE54S2ID4gc2hvdXplblwgOwor5rCR6KyhID4gbWluJyd5b3VcIDsKK+mMr+S5sSA+IHNha3VyYW5cIDsKK+m7kuaWkSA+IGtva3VoYW5cIDsKK+a1geaYnyA+IHJ5dXVzZWlcIDsKK+ayu+eZgiA+IGNoaXJ5b3VcIDsKK+WPsueahCA+IHNoaXRla2lcIDsKK+a3t+S/oSA+IGtvbnNoaW5cIDsKK+mDoemVtyA+IGd1bmNob3VcIDsKK+WNmOikhyA+IHRhbnB1a3VcIDsKK+aui+mrmCA+IHphbmRha2FcIDsKK+aAnee0oiA+IHNoaXNha3VcIDsKK+WPiuesrCA+IGt5dXVkYWlcIDsKK+engOaJjSA+IHNodXVzYWlcIDsKK+mJhOapiyA+IHRla2t5b3VcIDsKK+W8t+miqCA+IGt5b3VmdXVcIDsKK+iWqueCrSA+IHNoaW50YW5cIDsKK+a3t+S9nCA+IGtvbnNha3VcIDsKK+mHkeefsyA+IGtpbnNla2lcIDsKK+mJhOanjCA+IHRldHRzdWlcIDsKK+WPjueojiA+IHNodXV6ZWlcIDsKK+aDnOaVlyA+IHNla2loYWlcIDsKK+eosuWPoiA+IGluYW11cmFcIDsKK+engeaFviA+IHNoaXlva3VcIDsKK+ehrOiqvyA+IGtvdWNob3VcIDsKK+WNiuinkiA+IGhhbmtha3VcIDsKK+W9q+mHkSA+IGNob3VraW5cIDsKK+avkumFkiA+IGRva3VzaHVcIDsKK+a1ruW9qyA+IHVraWJvcmlcIDsKK+eni+aAnSA+IHNodXVzaGlcIDsKK+W+jOi2syA+IGF0b2FzaGlcIDsKK+WMl+i+uiA+IGhva3VoZW5cIDsKK+WUr+S7iiA+IHRhZGFpbWFcIDsKK+mHo+eTtiA+IHRzdXJ1YmVcIDsKK+aFn+WTrSA+IGRvdWtva3VcIDsKK+aDkeaYnyA+IHdha3VzZWlcIDsKK+WNiuilnyA+IGhhbicnZXJpXCA7Civmg4fmnLQgPiB0b25ib2t1XCA7CivmrbvprYQgPiBzaGloYWt1XCA7CivlvLfpna0gPiBreW91amluXCA7CivlkLjmsLQgPiBreXV1c3VpXCA7CivnorrogZ4gPiBrYWt1YnVuXCA7CivmgYvnl4UgPiBrb2l5YW1pXCA7Civph5HnmoQgPiBraW50ZWtpXCA7Civmt7HkuqQgPiBzaGlua291XCA7CivlkajmmJMgPiBzaHV1ZWtpXCA7Civnn6/poqggPiBreW91ZnV1XCA7CivmhbblhYYgPiBrZWljaG91XCA7CivljYroopYgPiBoYW5zb2RlXCA7CivlkLjmrrsgPiBzdWlnYXJhXCA7Civpg7fpgpEgPiBreW91eXV1XCA7CivomavlnoIgPiBjaHV1c3VpXCA7Civlkajml4sgPiBzaHV1c2VuXCA7CivmraPptaAgPiBzZWlrb2t1XCA7CivmsJHooYYgPiBtaW5zaHV1XCA7Civmtbfls6EgPiBrYWlreW91XCA7CivpiYTmn7UgPiB0ZXNzYWt1XCA7CivpiYTmn7EgPiB0ZXRjaHV1XCA7Civmr47pgLEgPiBtYWlzaHV1XCA7Civnp4Hlv4MgPiBzaGlzaGluXCA7CivnpZ7mrr8gPiBzaGluZGVuXCA7CivmrovpoY0gPiB6YW5nYWt1XCA7Civmga/ngb0gPiBzb2t1c2FpXCA7CivlvLHpm7sgPiBqYWt1ZGVuXCA7CivolLXnsbMgPiBrdXJhbWFpXCA7CivmtbflsbEgPiB1bWl5YW1hXCA7Civmrovpn78gPiB6YW5reW91XCA7CivmtIvmpb0gPiB5b3VnYWt1XCA7CivnqYDlgIkgPiBrb2t1c291XCA7Civph43nl4cgPiBqdXVzaG91XCA7Civph43nl4UgPiBqdXVieW91XCA7CivolqzmtrIgPiB5YWt1ZWtpXCA7CivmtbflsIYgPiBrYWlzaG91XCA7CivoloTniakgPiB1c3Vtb25vXCA7Civljp/ntJogPiBnZW5reXV1XCA7Civph43nlbMgPiBjaG91am91XCA7CivoloTniYcgPiBoYWt1aGVuXCA7Civpu5nmg7MgPiBtb2t1c291XCA7Civph4/nlKMgPiByeW91c2FuXCA7Civms6XmtbcgPiBkb3JvdW1pXCA7CivpvLvllIQgPiBoYW5hdXRhXCA7CivlkKbmsbogPiBoaWtldHN1XCA7CivlvqHooosgPiBvZnVrdXJvXCA7CivmgKrnn7MgPiBrYWlzZWtpXCA7CivmsLToirggPiBtaXp1Z2VpXCA7Civph43nlKggPiBjaG91eW91XCA7CivokL3pppYgPiByYWt1c2h1XCA7CivljbPoiIggPiBzb2treW91XCA7Civnp5jlr4YgPiBoaW1pdHN1XCA7CivlkqvlsLogPiBzaGlzZWtpXCA7CivlvZPph48gPiB0b3VyeW91XCA7Civlj47nm6MgPiBzaHV1a2FuXCA7CivljbXohpwgPiByYW5tYWt1XCA7Civlj43nm64gPiBoYW5tb2t1XCA7CivmsLToibIgPiBtaXp1aXJvXCA7CivnoLLouqsgPiBob3VzaGluXCA7Civlj47nm4ogPiBzaHV1ZWtpXCA7CivnpZ7mqKkgPiBzaGlua2VuXCA7Civljp/nsY0gPiBnZW5zZWtpXCA7CivmgrLmm7IgPiBoaWt5b2t1XCA7CivolYPnpZ4gPiBiYW5zaGluXCA7Civph53nirYgPiBoYXJpam91XCA7Civmronpm6MgPiBqdW4nJ25hblwgOwor5b6L6KqeID4gcml0c3Vnb1wgOwor6YqD5bqKID4ganV1c2hvdVwgOwor6buZ5oCdID4gbW9rdXNoaVwgOwor5rOo5rC0ID4gY2h1dXN1aVwgOwor5Y+s54q2ID4gc2hvdWpvdVwgOwor6buZ5b+1ID4gbW9rdW5lblwgOwor5oGL54yrID4ga29pbmVrb1wgOwor6YGp6b2iID4gdGVraXJlaVwgOwor5q2m6aqoID4gYnVrb3RzdVwgOwor5ZKM5byPID4gd2FzaGlraVwgOwor6Jmc5ZuaID4gcnlvc2h1dVwgOwor5rWB5oSfID4gcnl1dWthblwgOwor6Yqa5a2QID4gY2hvdXNoaVwgOwor56aB5pWZID4ga2lua3lvdVwgOwor5Y2Y6JGJID4gdGFuJyd5b3VcIDsKK+m7meW+kyA+IG1va3VqdXVcIDsKK+mHkeeOiSA+IGtpbnRhbWFcIDsKK+mKgOW5lSA+IGdpbm1ha3VcIDsKK+iWquawtCA+IHNoaW5zdWlcIDsKK+efoumdoiA+IHlhb21vdGVcIDsKK+eojuWPjiA+IHplaXNodXVcIDsKK+eosuS9nCA+IGluYXNha3VcIDsKK+a0i+acjSA+IHlvdWZ1a3VcIDsKK+elreacjSA+IHNhaWZ1a3VcIDsKK+aAp+eahCA+IHNlaXRla2lcIDsKK+WPjueUqCA+IHNodXV5b3VcIDsKK+WNsOiCiSA+IGluJyduaWt1XCA7CivmgKfnmZYgPiBzZWloZWtpXCA7CivphZLoiIggPiBzaHVreW91XCA7CivlvIHpp4EgPiBiZW5wYWt1XCA7CivomK3lraYgPiByYW5nYWt1XCA7CivlkI3mtYEgPiBtZWlyeXV1XCA7CivmgbXmsqIgPiBrZWl0YWt1XCA7CivlvaLot6EgPiBrZWlzZWtpXCA7CivlkIzmtYEgPiBkb3VyeXV1XCA7Civph43niq8gPiBjaG91aGFuXCA7CivnoILpiYQgPiBzYXRldHN1XCA7CivmgKfnl4UgPiBzZWlieW91XCA7CivlkYrmlocgPiBrb2t1YnVuXCA7Civlv4Poh5MgPiBzaGluem91XCA7CivlvJTpm7sgPiBjaG91ZGVuXCA7CivokL3pm7cgPiByYWt1cmFpXCA7Civlj4znkqcgPiBzb3VoZWtpXCA7CivmgqrmlrkgPiBha3VnYXRhXCA7CivpibHluoogPiBrb3VzaG91XCA7CivlkIjmtYEgPiBnb3VyeXV1XCA7CivokL3pm4EgPiByYWt1Z2FuXCA7CivmtYHlvL4gPiByeXV1ZGFuXCA7CivnpL7mrbQgPiBzaGFyZWtpXCA7Civnp4HlroUgPiBzaGl0YWt1XCA7CivokL3pmb0gPiByYWt1eW91XCA7Civph43niIYgPiBqdXViYWt1XCA7CivnorrnrZQgPiBrYWt1dG91XCA7Civps6npppYgPiBreXV1c2h1XCA7Civnp4HlraYgPiBzaGlnYWt1XCA7Civlj4LnlLsgPiBzYW5rYWt1XCA7Civli6fovrIgPiBrYW4nJ25vdVwgOwor5Y6f56WoID4gZ2VucHlvdVwgOwor5q2j6aKoID4gc2hvdWZ1dVwgOwor5oCl55SoID4ga3l1dXlvdVwgOwor6buS5bivID4ga3Vyb29iaVwgOwor5YuV6YePID4gZG91cnlvdVwgOwor5ZOo5YW1ID4gc2hvdWhlaVwgOwor6YqA5bCGID4gZ2luc2hvdVwgOwor5Y+Z54i1ID4gam9zaGFrdVwgOwor5b+D6IOGID4gc2hpbnRhblwgOwor5oOF5oW+ID4gam91eW9rdVwgOwor5YyX6KW/ID4gaG9rdXNlaVwgOwor5rW05aC0ID4geW9rdWpvdVwgOwor5b2i6LGhID4ga2Vpc2hvdVwgOwor5rCX6ImyID4ga2lzaG9rdVwgOwor5b+D6IKdID4gc2hpbmthblwgOwor5b+g57SUID4gY2h1dWp1blwgOwor56OQ55+zID4gYmFuamFrdVwgOwor56Wo5pWwID4gaHlvdXN1dVwgOwor5Y+j54GrID4ga3VjaGliaVwgOwor5Y+U54i2ID4gc2h1a3VmdVwgOwor5Y+N54usID4gaGFuZG9rdVwgOwor56eB5ai8ID4gc2hpc2hvdVwgOwor5rOl5qOSID4gZG9yb2JvdVwgOwor56eL5aOwID4gc2h1dXNlaVwgOwor56We5piOID4gc2hpbm1laVwgOwor5rGB57KJID4gc2hpcnVrb1wgOwor5byx6YW4ID4gamFrdXNhblwgOwor5rW35Zu9ID4ga2Fpa29rdVwgOwor6JS155u4ID4gem91c2hvdVwgOwor5Y2D6I2JID4gY2hpZ3VzYVwgOwor5YuY6YCyID4ga2Fuc2hpblwgOwor5Y2a6IGeID4gaGFrdWJ1blwgOwor5ZCr5pyJID4gZ2FuJyd5dXVcIDsKK+WPjeeJqSA+IHRhbm1vbm9cIDsKK+WOn+efsyA+IGdlbnNla2lcIDsKK+WNnOiAhSA+IGJva3VzaGFcIDsKK+mzpemhniA+IGNob3VydWlcIDsKK+ensOWPtyA+IHNob3Vnb3VcIDsKK+W8gemboyA+IGJlbicnbmFuXCA7CivljbPntI0gPiBzb2t1bm91XCA7CivnpL7mpa0gPiBzaGFneW91XCA7CivmsJfohIggPiBraW15YWt1XCA7Civlj7fms6MgPiBnb3VreXV1XCA7CivnpLzmpb0gPiByZWlnYWt1XCA7CivnpZ7mlL8gPiBzaGluc2VpXCA7Civnn63ph50gPiB0YW5zaGluXCA7Civmr43opqogPiBoYWhhb3lhXCA7CivphbfnqI4gPiBrb2t1emVpXCA7Civnp7vlh7ogPiBpc2h1dHN1XCA7CivlvrPogrIgPiB0b2t1aWt1XCA7Civno4Hnn7MgPiBqaXNoYWt1XCA7CivmrovphbcgPiB6YW5rb2t1XCA7Civms5Xmpb0gPiBob3VyYWt1XCA7Civlj43nhacgPiBoYW5zaG91XCA7CivmtojljrsgPiBzaG91a3lvXCA7CivphpznlLcgPiBidW90b2tvXCA7CivnoLToo4IgPiBoYXJldHN1XCA7CivmsLTnsr4gPiBzdWlzaG91XCA7CivlkajlubQgPiBzaHV1bmVuXCA7CivolJHnp7AgPiBiZXNzaG91XCA7CivmtojljbAgPiBrZXNoaWluXCA7CivlkIzmpa0gPiBkb3VneW91XCA7Civnp4Hlob4gPiBzaGlqdWt1XCA7Civli6fos54gPiBrYW5zaG91XCA7CivmgqrmiK8gPiBpdGF6dXJhXCA7Civli5Xou7ggPiBkb3VqaWt1XCA7CivmtYXlraYgPiBzZW5nYWt1XCA7CivnoqfnqbogPiBoZWtpa3V1XCA7CivliojpoK0gPiBoZWtpdG91XCA7Civljprnm7ggPiBrb3VzaG91XCA7Civlipvpl5ggPiByaWtpdG91XCA7Civnn7PpgKAgPiBzZWtpem91XCA7CivmsrnmsJcgPiBhYnVyYWtlXCA7CivomK3lm70gPiByYW5rb2t1XCA7Civlv4Pnt5IgPiBzaGluY2hvXCA7Civlj6/msbogPiBrYWtldHN1XCA7Civli4fpgLIgPiB5dXVzaGluXCA7CivljbPnrZQgPiBzb2t1dG91XCA7CivlvLHovKkgPiBqYWt1aGFpXCA7CivpiYTlv4MgPiB0ZXNzaGluXCA7Civmr5vomasgPiBrZW11c2hpXCA7CivlvJTpioMgPiBjaG91anV1XCA7Civlj4LnhacgPiBzYW5zaG91XCA7CivmgYvmsrMgPiBrb2lrYXdhXCA7CivphY3ntaYgPiBoYWlreXV1XCA7CivlkIzmoLwgPiBkb3VrYWt1XCA7Civms6jmlocgPiBjaHV1bW9uXCA7Civlj7HmraMgPiBzaGlzc2VpXCA7CivolqzmlrkgPiB5YWt1aG91XCA7CivmtLvlrZcgPiBrYXRzdWppXCA7Civljp/nlLEgPiBnZW4nJ3l1dVwgOwor5ZOA5YilID4gYWliZXRzdVwgOwor5b6S6IqxID4gYWRhYmFuYVwgOwor6YCx6b2hID4gc2h1dXJlaVwgOwor56S85pyNID4gcmVpZnVrdVwgOwor6YG46ZuGID4gc2Vuc2h1dVwgOwor5oGL5rC0ID4ga29pbWl6dVwgOwor5ZOA5YiHID4gYWlzZXRzdVwgOwor5ZCI5qC8ID4gZ291a2FrdVwgOwor5oSB5ZiGID4gc2h1dXRhblwgOwor56Sm5qWtID4ga291Z3lvdVwgOwor5rW35Y6fID4gdW5hYmFyYVwgOwor6bq75bGRID4gYXNha3V6dVwgOwor5Y+k5rGgID4gZnVydWlrZVwgOwor6baP6IKJID4ga2VpbmlrdVwgOwor5rOV5pyNID4gaG91ZnVrdVwgOwor5YuY6LKsID4ga2Fuc2VraVwgOwor5oSa5YqjID4gZ3VyZXRzdVwgOwor5raI5YWJID4gc2hvdWtvdVwgOwor5Y2Y57SaID4gdGFua3l1dVwgOwor5ZCN5pyoID4gbWVpYm9rdVwgOwor55+t6Lu4ID4gdGFuamlrdVwgOwor5YuH6LqNID4geXV1eWFrdVwgOwor6Yac54q2ID4gc2h1dWpvdVwgOwor5ZCE5qChID4ga2FrdWtvdVwgOwor5Y+i5rC3ID4gc291aHlvdVwgOwor5oGL5q27ID4ga29pamluaVwgOwor5Yun6KqYID4ga2FuJyd5dXVcIDsKK+aCquW+syA+IGFrdXRva3VcIDsKK+awl+e1tiA+IGtpemV0c3VcIDsKK+m7kuWjhyA+IGtva3V0YW5cIDsKK+W/g+eulyA+IHNoaW56YW5cIDsKK+ayiOa+sSA+IGNoaW5kZW5cIDsKK+W8t+ixqiA+IGt5b3Vnb3VcIDsKK+aCquW9uSA+IGFrdXlha3VcIDsKK+WKiOmWiyA+IGhla2lrYWlcIDsKK+aCquW9oiA+IGFrdWdhdGFcIDsKK+W/g+etiyA+IHNoaW5raW5cIDsKK+WPpOatjCA+IGZ1cnV1dGFcIDsKK+iQvemBuCA+IHJha3VzZW5cIDsKK+ayiOa9nCA+IGNoaW5zZW5cIDsKK+elnuaFriA+IHNoaW5yeW9cIDsKK+WJr+mhjCA+IGZ1a3VkYWlcIDsKK+W8j+mDqCA+IHNoaWtpYnVcIDsKK+W8k+mBkyA+IGt5dXVkb3VcIDsKK+ato+mKmCA+IHNob3VtZWlcIDsKK+WNnOetriA+IGJva3V6ZWlcIDsKK+WRguW+iyA+IHJvcmV0c3VcIDsKK+iRiei6qyA+IHlvdXNoaW5cIDsKK+W+kOiEiCA+IGpvbXlha3VcIDsKK+aEn+WCtyA+IGthbnNob3VcIDsKK+eip+ecvCA+IGhla2lnYW5cIDsKK+W+jOiFuSA+IGF0b2JhcmFcIDsKK+a0i+W8kyA+IHlvdWt5dXVcIDsKK+eerOmWkyA+IHNodW5rYW5cIDsKK+efrei2syA+IHRhbnNva3VcIDsKK+ekuuaVmSA+IHNoaWt5b3VcIDsKK+WNv+ebuCA+IGtlaXNob3VcIDsKK+attOmBiiA+IHJla2l5dXVcIDsKK+ayiOa7niA+IGNoaW50YWlcIDsKK+WQjOaXjyA+IGRvdXpva3VcIDsKK+WJs+mdkiA+IGlyZXp1bWlcIDsKK+W9rOiUmiA+IGhpbnV0c3VcIDsKK+emheWvuiA+IHplbmRlcmFcIDsKK+W+jOiEmiA+IGF0b2FzaGlcIDsKK+aAnea9riA+IHNoaWNob3VcIDsKK+a1ruWKmyA+IGZ1cnlva3VcIDsKK+ejqOa7hSA+IG1hbWV0c3VcIDsKK+atu+i7uCA+IHNoaWppa3VcIDsKK+ato+mHkSA+IHNob3VraW5cIDsKK+a1geWfnyA+IHJ5dXVpa2lcIDsKK+emheWulyA+IHplbnNodXVcIDsKK+m2tOenkSA+IHRzdXJ1a2FcIDsKK+iXqeWtpiA+IGhhbmdha3VcIDsKK+aBreaVrCA+IGt5b3VrZWlcIDsKK+axjueUqCA+IGhhbicneW91XCA7CivmgKXmuJsgPiBreXV1Z2VuXCA7CivnpZ7mgKcgPiBzaGluc2VpXCA7CivmgpTmgpsgPiBrYWlzaHVuXCA7CivnpoXlraYgPiB6ZW5nYWt1XCA7Civlj5Tmr40gPiBzaHVrdWJvXCA7CivlvI/ovp4gPiBzaGlraWppXCA7Civnp4DlkJ8gPiBzaHV1Z2luXCA7CivpgY7po58gPiBrYXNob2t1XCA7Civljp/niIYgPiBnZW5iYWt1XCA7Civps6XpioMgPiBjaG91anV1XCA7CivliY3pq6ogPiBtYWVnYW1pXCA7CivlkoDlmrwgPiBzb3NoYWt1XCA7Civnp5/lgJ8gPiBzb3NoYWt1XCA7CivmrrromasgPiBzYXRjaHV1XCA7Civli6TooYwgPiBnb25neW91XCA7CivmgpblvrMgPiBoYWl0b2t1XCA7Civmr5LojYkgPiBkb2t1c291XCA7CivljbXnmb0gPiByYW5wYWt1XCA7Civnp4vliIYgPiBzaHV1YnVuXCA7Civlj4LmtJsgPiBzYW5yYWt1XCA7CivlkqzlgrcgPiBrb3VzaG91XCA7CivlvovnvqkgPiByaWNoaWdpXCA7Civnp4vlhrcgPiBzaHV1cmVpXCA7CivlvLfopoEgPiBreW91eW91XCA7Civph5Hmo5IgPiBrYW5hYm91XCA7CivoloTmmI4gPiBoYWt1bWVpXCA7CivluqfpqqggPiB6YWtvdHN1XCA7CivliaPpm6MgPiBrZW4nJ25hblwgOwor5b6056iOID4gY2hvdXplaVwgOwor5b6p562UID4gZnVrdXRvdVwgOwor5YuF6KutID4gY2hva3V5dVwgOwor5Yq06LODID4gcm91Y2hpblwgOwor5byx6KaWID4gamFrdXNoaVwgOwor5ZCI5o6MID4gZ2Fzc2hvdVwgOwor5YuF6KqeID4gY2hva3Vnb1wgOwor55+t6Kq/ID4gdGFuY2hvdVwgOwor5Y+45pWZID4gc2hpa3lvdVwgOwor5rKI5q6/ID4gY2hpbmRlblwgOwor6bWs57+8ID4gaG91eW9rdVwgOwor5YuF6KixID4gY2hva2t5b1wgOwor55+t6KmVID4gdGFucHlvdVwgOwor56eY5LuPID4gaGlidXRzdVwgOwor5oCl5q27ID4ga3l1dXNoaVwgOwor5by36KGMID4ga3lvdWtvdVwgOwor5oCn5qyyID4gc2VpeW9rdVwgOwor5rW35LqAID4gdW1pZ2FtZVwgOwor5q+S6IW6ID4gZG9rdXNlblwgOwor5Y+y5paZID4gc2hpcnlvdVwgOwor5rC355SwID4gaHlvdWRlblwgOwor5b+D55y8ID4gc2hpbmdhblwgOwor6YKB6YCyID4gbWFpc2hpblwgOwor5Y+k5pysID4gZnVydWJvblwgOwor56K654S2ID4ga2FrdXplblwgOwor5rSL5a2mID4geW91Z2FrdVwgOwor5b256ICFID4geWFrdXNoYVwgOwor5oOw5YqbID4gZGFyeW9rdVwgOwor5Y+N5qeYID4ga2Fpc2FtYVwgOwor5rCR56aPID4gbWlucHVrdVwgOwor5YmN6aGNID4gemVuZ2FrdVwgOwor5rW35LitID4ga2FpY2h1dVwgOwor5b6M57aaID4ga291em9rdVwgOwor5Y+k5puyID4ga29reW9rdVwgOwor6YGF6ZycID4gb3Nvamltb1wgOwor5ZGo5ZueID4gc2h1dWthaVwgOwor5rSb5aSWID4gcmFrdWdhaVwgOwor5Y2K56WeID4gaGFuc2hpblwgOwor5b2T6JC9ID4gdG91cmFrdVwgOwor6YWS55mWID4gc2h1aGVraVwgOwor6YKq6KqsID4gamFzZXRzdVwgOwor5qyg6ZmkID4ga2V0c3Vqb1wgOwor5rCP56WeID4gdWppZ2FtaVwgOwor6YeR5pucID4ga2luJyd5b3VcIDsKK+auteiQvSA+IGRhbnJha3VcIDsKK+W6p+mjnyA+IHphc2hva3VcIDsKK+WRu+WQnyA+IHNoaW5naW5cIDsKK+mJhOWjgSA+IHRlcHBla2lcIDsKK+eni+S9nCA+IGFraXNha3VcIDsKK+WNg+eniyA+IHNlbnNodXVcIDsKK+WMuueriyA+IGt1cml0c3VcIDsKK+W/oOeKrCA+IGNodXVrZW5cIDsKK+WQhOaJgCA+IGtha3VzaG9cIDsKK+WKh+mBkyA+IGdla2lkb3VcIDsKK+aDqOWKhyA+IHNhbmdla2lcIDsKK+aBi+aWhyA+IGtvaWJ1bWlcIDsKK+mKg+WCtyA+IGp1dXNob3VcIDsKK+azleaCpiA+IGhvdWV0c3VcIDsKK+efpeimmiA+IGNoaWtha3VcIDsKK+mCpuiosyA+IGhvdXlha3VcIDsKK+awtOeQgyA+IHN1aWt5dXVcIDsKK+engeS/oSA+IHNoaXNoaW5cIDsKK+WKm+i1sCA+IHJpa2lzb3VcIDsKK+a1puS6uiA+IHVyYWJpdG9cIDsKK+WPjeaguCA+IGhhbmtha3VcIDsKK+W5vemzpSA+IHl1dWNob3VcIDsKK+iWrOW4qyA+IHlha3VzaGlcIDsKK+elnuWunSA+IHNoaW5wb3VcIDsKK+elnuWumCA+IHNoaW5rYW5cIDsKK+elneWutCA+IHNodWt1ZW5cIDsKK+mKgOWBtCA+IGdpbmdhd2FcIDsKK+WPluabvyA+IHRvcmlrYWVcIDsKK+W8lOipniA+IGNob3VzaGlcIDsKK+WNoOeUqCA+IHNlbicneW91XCA7CivliY3pmbMgPiB6ZW5jaGluXCA7Civnn7PonYsgPiBzZWtpcm91XCA7Civmrbvop5IgPiBzaGlrYWt1XCA7Civok6znlJ8gPiB5b21vZ2l1XCA7CivmtYHli5UgPiByeXV1ZG91XCA7CivljoTngb0gPiB5YWt1c2FpXCA7Civlj6vmj5sgPiBreW91a2FuXCA7CivmgKDmpa0gPiB0YWlneW91XCA7CivmrbToqKogPiByZWtpaG91XCA7CivlkIzlv4MgPiBkb3VzaGluXCA7Civljp/ms6ggPiBnZW5jaHV1XCA7CivpgIbpsZcgPiBnZWtpcmluXCA7Civnn6XooYwgPiBjaGlneW91XCA7CivmgKfmoLwgPiBzZWlrYWt1XCA7CivlkIzlvbkgPiBkb3V5YWt1XCA7CivphbjmvL8gPiBob296dWtpXCA7CivlkInlvrQgPiBraXRjaG91XCA7CivmrbTopqcgPiByZWtpcmFuXCA7CivmsLTniaIgPiBtaXp1cm91XCA7CivmsLTniZsgPiBzdWlneXV1XCA7CivlkIjlvpMgPiBnYXNzaG91XCA7CivljYrnmb0gPiBoYW5wYWt1XCA7Civps6Xosp0gPiB0b3JpZ2FpXCA7CivmsaDmsrwgPiBjaGlzaG91XCA7CivphY3nkIMgPiBoYWlreXV1XCA7Civlub3prLEgPiB5dXV1dHN1XCA7CivmsLTniIYgPiBzdWliYWt1XCA7CivljJfnsbMgPiBob2t1YmVpXCA7CivljZPnlKggPiB0YWt1eW91XCA7CivolYPmpJIgPiBiYW5zaG91XCA7Civlib3ou70gPiBoeW91a2luXCA7Civms6jlsIQgPiBjaHV1c2hhXCA7CivlvrTnlKggPiBjaG91eW91XCA7CivphZTni4IgPiBzdWlreW91XCA7Civlko7kurogPiB0b2dhbmluXCA7CivokYnonIIgPiBoYWJhY2hpXCA7Civlv4PnjL8gPiBzaGluJydlblwgOwor5b6z55SoID4gdG9rdXlvdVwgOwor5oGw5bmFID4ga2FwcHVrdVwgOwor6L+36bOlID4gbWVpY2hvdVwgOwor6YCa6aKoID4gdHN1dWZ1dVwgOwor5Y2B55uuID4ganV1bW9rdVwgOwor6JaE5oOFID4gaGFrdWpvdVwgOwor5q2j6Kq/ID4gc2VpY2hvdVwgOwor5ZCM5bitID4gZG91c2VraVwgOwor5Y+C5pydID4gc2FuY2hvdVwgOwor55yf6buSID4gbWFra3Vyb1wgOwor5Yqj6KeSID4gcmVra2FrdVwgOwor6Jas5a6zID4geWFrdWdhaVwgOwor5oGi5b6pID4ga2FpZnVrdVwgOwor6YCx6ZaTID4gc2h1dWthblwgOwor56aE5ZG9ID4gcm9rdW1laVwgOwor5Y+k5ouZID4ga29zZXRzdVwgOwor5Yi76ZmQID4ga29rdWdlblwgOwor5Y+O5paCID4gc2h1dXJlblwgOwor56We5aSJID4gc2hpbnBlblwgOwor5rC354K5ID4gaHlvdXRlblwgOwor5byB6Ki8ID4gYmVuc2hvdVwgOwor5rC354KtID4gaHlvdXRhblwgOwor5q2O6LOeID4gdGFuc2hvdVwgOwor5ZC45aG1ID4ga3l1dWppblwgOwor5ZCb5a+1ID4ga3VuY2hvdVwgOwor5bmy6a2aID4gaG9zaGl1b1wgOwor5Y+O5pSvID4gc2h1dXNoaVwgOwor5Y+O5pSsID4gc2h1dXJhblwgOwor5ZCE5bqXID4ga2FrdXRlblwgOwor5Y2T55CDID4gdGFra3l1dVwgOwor5oGQ5oWMID4ga3lvdWtvdVwgOwor5Y+j5om/ID4ga291c2hvdVwgOwor5Y6z5qC8ID4gZ2Vua2FrdVwgOwor6JaE5b+XID4gaGFrdXNoaVwgOwor56aA5ZGKID4gcmlua29rdVwgOwor5ZGo5YiwID4gc2h1dXRvdVwgOwor5rGX5rC0ID4gYXNlbWl6dVwgOwor5YyX56uvID4gaG9rdXRhblwgOwor5Y2Y54usID4gdGFuZG9rdVwgOwor5ZCE5biCID4ga2FrdXNoaVwgOwor5Y+N5pKDID4gaGFuZ2VraVwgOwor5rWB5L2TID4gcnl1dXRhaVwgOwor6buS5Lq6ID4ga29rdWppblwgOwor5b2856iLID4gYXJlaG9kb1wgOwor56S+5a6FID4gc2hhdGFrdVwgOwor5rWB5LyaID4gcnl1dWthaVwgOwor5Y2K55CDID4gaGFua3l1dVwgOwor6YGK6YOtID4geXV1a2FrdVwgOwor6YGT6L66ID4gbWljaGliZVwgOwor5bqX6ZW3ID4gdGVuY2hvdVwgOwor5oGS5b+DID4ga291c2hpblwgOwor5q2m6KGTID4gYnVqdXRzdVwgOwor5q6L6I+KID4gemFuZ2lrdVwgOwor5ZCN5bCGID4gbWVpc2hvdVwgOwor5rKh5oiRID4gYm90c3VnYVwgOwor5ZCM5bCPID4gZG91c2hvdVwgOwor5rWB5LqhID4gcnl1dWJvdVwgOwor5Yid6Z+zID4gaGF0c3VuZVwgOwor6YO956uLID4gdG9yaXRzdVwgOwor5ZCO5a6uID4ga291a3l1dVwgOwor5Yil6ZuiID4gYmV0c3VyaVwgOwor5b6T55qEID4ganV1dGVraVwgOwor5ZG95LitID4gbWVpY2h1dVwgOwor56C056u5ID4gaGFjaGlrdVwgOwor6JK855m9ID4gc291aGFrdVwgOwor5rC05ru0ID4gc3VpdGVraVwgOwor6YeP5oSfID4gcnlvdWthblwgOwor5rOV5a2mID4gaG91Z2FrdVwgOwor5YqH6KuWID4gZ2VraXJvblwgOwor5Y2S54i+ID4gc290c3VqaVwgOwor5YqH6KuHID4gZ2VraWRhblwgOwor5oCd5paZID4gc2hpcnlvdVwgOwor56Gs55CDID4ga291a3l1dVwgOwor5Yqb6KGMID4gcnlva2tvdVwgOwor5ZCM5a6XID4gZG91c2h1dVwgOwor6JWD5pePID4gYmFuem9rdVwgOwor56aB5YmHID4ga2luc29rdVwgOwor6YG46KmVID4gc2VucHlvdVwgOwor56Sr5bKpID4gcmVraWdhblwgOwor5ZCE5bGkID4ga2FrdXNvdVwgOwor5Yil6ZmiID4gYmV0c3VpblwgOwor5ZCM5a2mID4gZG91Z2FrdVwgOwor56OB5qW1ID4gamlreW9rdVwgOwor6YCa6ZaiID4gdHN1dWthblwgOwor5Yud6ICFID4gc2hvdXNoYVwgOwor5YqH6KmpID4gZ2VraXNoaVwgOwor5bmy6aOvID4gaG9zaGlpaVwgOwor6YmE5YmHID4gdGVzc29rdVwgOwor6YGF6YCfID4gY2hpc29rdVwgOwor56Kn5rC0ID4gaGVraXN1aVwgOwor55+z6Ie8ID4gaXNoaXVzdVwgOwor5bm06aGNID4gbmVuZ2FrdVwgOwor5by36IKpID4ga3lvdWtlblwgOwor5Y+w5bizID4gZGFpY2hvdVwgOwor5rC05rexID4gc3Vpc2hpblwgOwor5rC35rW3ID4gaHlvdWthaVwgOwor5rOw5Zu9ID4gdGFpa29rdVwgOwor5Yil6ZaTID4gYmV0c3VtYVwgOwor5rGB5rCXID4gc2hpcnVrZVwgOwor5rSb5YaFID4gcmFrdW5haVwgOwor5q+O56eSID4gbWFpYnlvdVwgOwor5b6u54axID4gYmluZXRzdVwgOwor5rC05rW0ID4gc3VpeW9rdVwgOwor5oOR5LmxID4gd2FrdXJhblwgOwor6JC96JGJID4gcmFrdXlvdVwgOwor5Yqg6JmQID4ga2FneWFrdVwgOwor5by36ICFID4ga3lvdXNoYVwgOwor5Y+k5byPID4ga29zaGlraVwgOwor6JK455WZID4gam91cnl1dVwgOwor6YeN5b+DID4ganV1c2hpblwgOwor5Y2K54afID4gaGFuanVrdVwgOwor5rC05rWBID4gc3Vpcnl1dVwgOwor55yf6auEID4gc2hpbnp1aVwgOwor5YmN6YCyID4gemVuc2hpblwgOwor5YmN6YCxID4gemVuc2h1dVwgOwor5Y6f5pyoID4gZ2VuYm9rdVwgOwor6YeN5b25ID4ganV1eWFrdVwgOwor5Y+b5b+DID4gaGFuc2hpblwgOwor5Yuk57aaID4ga2luem9rdVwgOwor6YC86L+rID4gaGlwcGFrdVwgOwor5Y2K54S8ID4gaGFuc2hvdVwgOwor56We5ZOBID4gc2hpbnBpblwgOwor5Y6a5p2/ID4gYXRzdWl0YVwgOwor5rKh5b6MID4gYm90c3Vnb1wgOwor5rOl5Z2KID4gZG9yb2JvdVwgOwor5byx6ICFID4gamFrdXNoYVwgOwor5Y215q67ID4gcmFua2FrdVwgOwor6YeR5bmzID4ga2lucGlyYVwgOwor5Y2x5rCXID4gYWJ1bmFnZVwgOwor5oCl5omAID4ga3l1dXNob1wgOwor5q6756u/ID4ga2FyYXNhb1wgOwor6YaH5py0ID4ganVuYm9rdVwgOwor5Y+W5b6XID4gc2h1dG9rdVwgOwor5Y2z5q27ID4gc29rdXNoaVwgOwor6bSH6ImyID4gdG9raWlyb1wgOwor5Y+w5bC7ID4gZGFpamlyaVwgOwor5ZCb5Zu9ID4ga3Vua29rdVwgOwor5oCn5oW+ID4gc2VpeW9rdVwgOwor6L+96ZqPID4gdHN1aXp1aVwgOwor5Yuy56ugID4ga3Vuc2hvdVwgOwor6YCy6YCAID4gc2hpbnRhaVwgOwor6YCj6YePID4gcmVucnlvdVwgOwor5YmN6LqrID4gemVuc2hpblwgOwor5Y6f5paZID4gZ2VucnlvdVwgOwor5q276IetID4gc2hpc2h1dVwgOwor6YKR6JC9ID4geXV1cmFrdVwgOwor5Ymv6KmeID4gZnVrdXNoaVwgOwor5ZCI5aOBID4gZ2FwcGVraVwgOwor5YmN6LmkID4gemVuc2hvdVwgOwor5Y+y5a2mID4gc2hpZ2FrdVwgOwor5Y+N5b+cID4gaGFuJydub3VcIDsKK+WHuumhjSA+IGRlYml0YWlcIDsKK+WIuemCoyA+IHNldHN1bmFcIDsKK+W5tOmVtyA+IG5lbmNob3VcIDsKK+WPjeW+qSA+IGhhbnB1a3VcIDsKK+WHuumgrSA+IHNodXR0b3VcIDsKK+WIh+mZpCA+IHNldHN1am9cIDsKK+iRreewgCA+IHlvc2hpenVcIDsKK+WHtumhniA+IGt5b3VydWlcIDsKK+eih+aziiA+IHRlaWhha3VcIDsKK+aApeaCoyA+IGt5dXVrYW5cIDsKK+WJjei2syA+IG1hZWFzaGlcIDsKK+WQn+WUsSA+IGdpbnNob3VcIDsKK+a0i+WCmCA+IHlvdWdhc2FcIDsKK+eglOeptiA+IGtlbmt5dXVcIDsKK+mAsui7jSA+IHNoaW5ndW5cIDsKK+aAp+aApSA+IHNlaWt5dXVcIDsKK+emgeS4rSA+IGtpbmNodXVcIDsKK+elnuWJoyA+IHNoaW5rZW5cIDsKK+mFkuavkiA+IHNodWRva3VcIDsKK+elnuWJjSA+IHNoaW56ZW5cIDsKK+mHkeWxniA+IGtpbnpva3VcIDsKK+aApeaApyA+IGt5dXVzZWlcIDsKK+iRpuewviA+IHlvc2hpenVcIDsKK+iWrOWTgSA+IHlha3VoaW5cIDsKK+ayiOaAnSA+IGNoaW5zaGlcIDsKK+WNl+a0iyA+IG5hbicneW91XCA7CivlkIzlm70gPiBkb3Vrb2t1XCA7CivmrbvogokgPiBzaGluaWt1XCA7CivmgKflvrQgPiBzZWljaG91XCA7CivlubPpkb8gPiBoZWlzYWt1XCA7CivokabnsIAgPiB5b3NoaXp1XCA7Civli53nrpcgPiBzaG91c2FuXCA7Civph5HlsIYgPiBraW5zaG91XCA7CivmgJ3mg5EgPiBvbW93YWt1XCA7Civps7boibIgPiB0b2JpaXJvXCA7Civnn7Pntr8gPiBzZWtpbWVuXCA7CivokL3og4YgPiByYWt1dGFuXCA7Civps6XokawgPiBjaG91c291XCA7CivljbHmpbUgPiBraWt5b2t1XCA7CivmsqLlsbEgPiB0YWt1c2FuXCA7CivlvpfngrkgPiB0b2t1dGVuXCA7Civlj4nluqsgPiBhemVrdXJhXCA7CivphbfmmpEgPiBrb2t1c2hvXCA7Civlj4zluYUgPiBzb3VmdWt1XCA7CivlvZPnorogPiB0b3VrYWt1XCA7CivliLrouqsgPiBzYXNoaW1pXCA7CivluoPph48gPiBrb3VyeW91XCA7CivlkITlnLAgPiBrYWt1Y2hpXCA7CivoloTloqggPiB1c3V6dW1pXCA7Civms4rlnLAgPiBoYWt1Y2hpXCA7CivljqjmiL8gPiBjaHV1Ym91XCA7Civlj5vlsIYgPiBoYW5zaG91XCA7CivlkITlm70gPiBrYWtrb2t1XCA7CivokabnrJsgPiBhc2hpYnVlXCA7Civph43lrp0gPiBjaG91aG91XCA7Civph4/lrZAgPiByeW91c2hpXCA7CivluZXpm7sgPiBtYWt1ZGVuXCA7CivliaXoo70gPiBoYWt1c2VpXCA7CivphpzmhYsgPiBzaHV1dGFpXCA7Civlip/oh6MgPiBrb3VzaGluXCA7Civnn63ntaEgPiB0YW5yYWt1XCA7CivolqzljIUgPiB5YWt1aG91XCA7CivmsJHms4ogPiBtaW5wYWt1XCA7CivnpL7lkYogPiBzaGFrb2t1XCA7CivlvIHohpwgPiBiZW5tYWt1XCA7CivpgLLosqIgPiBzaGlua291XCA7CivluLjpp5AgPiBqb3VjaHV1XCA7CivphpzmgqogPiBzaHV1YWt1XCA7Civmsbrlv4MgPiBrZXNzaGluXCA7CivnoJXnn7MgPiBzYWlzZWtpXCA7CivmraPohbkgPiBzZWlmdWt1XCA7Civps6noiI4gPiBreXV1c2hhXCA7CivolqzliaQgPiB5YWt1emFpXCA7Civmr5TnjocgPiBoaXJpdHN1XCA7CivlkIjllLEgPiBnYXNzaG91XCA7Civli77nlZkgPiBrb3VyeXV1XCA7CivliKXovp4gPiBiZXRzdWppXCA7CivlvIrnv5IgPiBoZWlzaHV1XCA7CivlvbnniZsgPiBla2lneXV1XCA7CivpgI3pgaUgPiBzaG91eW91XCA7CivmsrzlnLAgPiBudW1hY2hpXCA7CivpgI3pgZkgPiBzaG91eW91XCA7CivojqvpgKMgPiBiYWt1cmVuXCA7Civms5XlkI0gPiBob3VteW91XCA7Civlu7foh6MgPiB0ZWlzaGluXCA7Civnn7PnrY0gPiBzZWtpanVuXCA7CivnpZ7kvZMgPiBzaGludGFpXCA7Civlj47lrrkgPiBzaHV1eW91XCA7CivmgqDkuYUgPiB5dXVreXV1XCA7Civmsrvlm70gPiBjaGlrb2t1XCA7CivliJ3pgJ8gPiBzaG9zb2t1XCA7CivlkI3lj7cgPiBteW91Z291XCA7Civlv4Pmo5IgPiBzaGluYm91XCA7CivnpZ7ku5kgPiBzaGluc2VuXCA7CivpgLLorJsgPiBzaGlua291XCA7Civms5XljZogPiBob3VoYWt1XCA7CivnpZ7kurogPiBzaGluamluXCA7CivpgIbpgYsgPiBneWFrdXVuXCA7CivnnInpm6ogPiBiaXNldHN1XCA7Civpgbjoia8gPiBzZW5yeW91XCA7Civlh7jpj6EgPiB0b2treW91XCA7CivokrjmupwgPiBqb3VyeXV1XCA7CivlkIjlj6MgPiBhaWt1Y2hpXCA7CivnpL7liYcgPiBzaGFzb2t1XCA7CivmrJ3ooYAgPiB1a2tldHN1XCA7CivmsLTmmbYgPiBzdWlzaG91XCA7CivojZLpp5IgPiBhcmFnb21hXCA7CivlkI3ljKAgPiBtZWlzaG91XCA7CivmsLjml6UgPiBlaWppdHN1XCA7CivmrrrnlJ8gPiBzZXNzaG91XCA7CivljbPmlq0gPiBzb2t1ZGFuXCA7CivliIbph50gPiBmdW5zaGluXCA7CivljYPmrbMgPiBjaGl0b3NlXCA7CivliIbph48gPiBidW5yeW91XCA7CivlkI3li50gPiBtZWlzaG91XCA7CivliKXot68gPiBiZXRzdXJvXCA7Civms5XlipsgPiBob3VyaWtpXCA7Civmr5TnhrEgPiBoaW5ldHN1XCA7Civli6TnmocgPiBraW4nJ25vdVwgOwor5by356GsID4ga3lvdWtvdVwgOwor5rOV5YmHID4gaG91c29rdVwgOwor6YCy6KiAID4gc2hpbmdlblwgOwor5buD6JmaID4gaGFpa3lvXCA7Civlv7/mgJIgPiBmdW4nJ251XCA7CivpgIHov44gPiBzb3VnZWlcIDsKK+i/hembtyA+IGppbnJhaVwgOwor5b+X5pONID4gc2hpc291XCA7CivpgJrosqggPiB0c3V1a2FcIDsKK+WQjeWIuiA+IG1laXNoaVwgOwor5ZCM5YmNID4gZG91emVuXCA7CivnpLzlhbggPiByZWl0ZW5cIDsKK+WJjeihmyA+IHplbicnZWlcIDsKK+efouetiCA+IHlhaGF6dVwgOwor6YeR5Z2RID4ga2lua291XCA7Civljp/lvaIgPiBnZW5rZWlcIDsKK+W+qeaoqSA+IGZ1a2tlblwgOwor5YmN6KGMID4gemVua291XCA7CivlkI3liIYgPiBtZWlidW5cIDsKK+W9oueKtiA+IGtlaWpvdVwgOwor5YiX6LuKID4gcmVzc2hhXCA7CivlkI3liIAgPiBtZWl0b3VcIDsKK+W7g+iXqSA+IGhhaWhhblwgOwor6YWN5pysID4gaGFpaG9uXCA7Civljprlv5cgPiBrb3VzaGlcIDsKK+iWhOWRsyA+IGhha3VtaVwgOwor56S+5YOnID4gc2hhc291XCA7CivlkIjliaQgPiBnb3V6YWlcIDsKK+WQjOWHpiA+IGRvdXNob1wgOwor5rOV5YW4ID4gaG91dGVuXCA7CivnpL7lgrUgPiBzaGFzYWlcIDsKK+W5tOi8qiA+IG5lbnJpblwgOwor5bm06LypID4gbmVucGFpXCA7Civno4Hlv4MgPiBqaXNoaW5cIDsKK+WIhumBoyA+IGJ1bmtlblwgOwor5Y+L5aW9ID4geXV1a291XCA7Civli6TnlaogPiBraW5iYW5cIDsKK+efs+eikSA+IHNla2loaVwgOwor5ZCI5YiHID4gZ2Fzc2FpXCA7CivpgIDou6IgPiB0YWl0ZW5cIDsKK+ato+e3qCA+IHNlaWhlblwgOwor5Y+N5aSJID4gaGFucGVuXCA7Civlj7HlkqQgPiBzaGl0dGFcIDsKK+WQjOWFmiA+IGRvdXRvdVwgOwor5bm96LajID4geXV1c2h1XCA7CivliqDntaYgPiBrYWt5dXVcIDsKK+WQjeWEqiA+IG1laXl1dVwgOwor5Y6z5bCBID4gZ2VucHV1XCA7CivluK/pm7sgPiB0YWlkZW5cIDsKK+W+i+azlSA+IHJpcHBvdVwgOwor5YeM6ZuyID4gcnlvdXVuXCA7Civlv6vmhJ8gPiBrYWlrYW5cIDsKK+mBuOiAgyA+IHNlbmtvdVwgOwor55+i56iuID4geWFkYW5lXCA7CivmsY7mhJsgPiBoYW4nJ2FpXCA7CivlvLfnm5cgPiBnb3V0b3VcIDsKK+WOs+WvkiA+IGdlbmthblwgOwor6YeP5ZmoID4gcnlvdWtpXCA7CivlkI3lg6cgPiBtZWlzb3VcIDsKK+ato+e1sSA+IHNlaXRvdVwgOwor6YGK6JWpID4geXV1dG91XCA7CivmsbrlrpogPiBrZXR0ZWlcIDsKK+iSuOawkSA+IGpvdW1pblwgOwor5by+55eVID4gZGFua29uXCA7Civph43lmbggPiBqdXV0b25cIDsKK+i/gumXiiA+IHVrYXRzdVwgOwor6YCg6KmjID4gem91a2VpXCA7Civmt6HjgIUgPiB0YW50YW5cIDsKK+WOs+WuiCA+IGdlbnNodVwgOwor5Y+w5ZCNID4gdGFpbWVpXCA7CivljrPlrZggPiBnZW5zb25cIDsKK+ato+ezuyA+IHNlaWtlaVwgOwor6YKq56WeID4gamFzaGluXCA7CivovrrpmawgPiBoZW5zdXVcIDsKK+mAoOiogCA+IHpvdWdlblwgOwor6YCD6LWwID4gdG91c291XCA7CivpgJroqp4gPiB0c3V1Z29cIDsKK+WIhui8iSA+IGJ1bnNhaVwgOwor6YW45oCnID4gc2Fuc2VpXCA7Civnm7jplqIgPiBzb3VrYW5cIDsKK+W+jOautSA+IGtvdWRhblwgOwor56S+5LyaID4gc2hha2FpXCA7CivpgJroqbEgPiB0c3V1d2FcIDsKK+W+qeagoSA+IGZ1a2tvdVwgOwor5ZCM5YCkID4gZG91Y2hpXCA7CivliIfouqsgPiBraXJpbWlcIDsKK+WQm+S4uyA+IGt1bnNodVwgOwor6I2J6Z6LID4gd2FyYWppXCA7Civms5XkvosgPiBob3VyZWlcIDsKK+ays+WOnyA+IGthd2FyYVwgOwor5Yi26KOBID4gc2Vpc2FpXCA7CivljZfmlrkgPiBuYW5wb3VcIDsKK+WMl+a1tyA+IGhva2thaVwgOwor5b+g5oSbID4gY2h1dWFpXCA7Civph5Hlk6EgPiBraW4nJ2luXCA7CivljZjmlocgPiB0YW5idW5cIDsKK+eiuuW6piA+IGtha3Vkb1wgOwor5rCR5pybID4gbWluYm91XCA7CivoloTliKkgPiBoYWt1cmlcIDsKK+ekvuS6pCA+IHNoYWtvdVwgOwor5b6u5pyNID4gYmlmdWt1XCA7CivmsYLmhJsgPiBreXV1YWlcIDsKK+WNmOaVsCA+IHRhbnN1dVwgOwor5b+F5pC6ID4gaGlra2VpXCA7Civph5Hlk4EgPiBraW5waW5cIDsKK+WKo+etiSA+IHJldHRvdVwgOwor55uk6Z2iID4gYmFubWVuXCA7CivljKDmsJcgPiBzaG91a2lcIDsKK+WLleeUoyA+IGRvdXNhblwgOwor5bu257SNID4gZW4nJ25vdVwgOwor56CV54mHID4gc2FpaGVuXCA7CivnnJ/pgIYgPiBtYXNha2FcIDsKK+WQjOS9kyA+IGRvdXRhaVwgOwor5rKz5YyXID4ga2Fob2t1XCA7CivnpL7kuLsgPiBzaGFzaHVcIDsKK+WNl+aUryA+IG5hbnNoaVwgOwor5Y+j5ZC7ID4ga291ZnVuXCA7CivlvL7nkLQgPiBkYW5raW5cIDsKK+W4q+mWgCA+IHNoaW1vblwgOwor5rCX5pepID4ga2liYXlhXCA7Civms5Xku6QgPiBob3VyZWlcIDsKK+aApeWgtCA+IGt5dXViYVwgOwor5ZCM5Ly0ID4gZG91aGFuXCA7CivpgKPooaEgPiByZW5rb3VcIDsKK+WPo+WQnyA+IGtvdWdpblwgOwor6YCj6KGMID4gcmVua291XCA7Civms5XkurogPiBob3VqaW5cIDsKK+WGt+mdmSA+IHJlaXNlaVwgOwor6L+U6YeRID4gaGVua2luXCA7Civlj4LloIIgPiBzYW5kb3VcIDsKK+W/q+W8gSA+IGthaWJlblwgOwor5b+g5oGVID4gY2h1dWpvXCA7Civlj6zli58gPiBzaG91Ym9cIDsKK+WQiOS9tSA+IGdvdWhlaVwgOwor5ZCQ5LmzID4gdG9ueXV1XCA7Civov7fotbAgPiBtZWlzb3VcIDsKK+ato+etlCA+IHNlaXRvdVwgOwor5ZCN5Lq6ID4gbWVpamluXCA7CivlkIjkvZMgPiBnYXR0YWlcIDsKK+iWhOWFiSA+IGhha2tvdVwgOwor6JST5bu2ID4gbWFuJydlblwgOwor5b2T54S2ID4gdG91emVuXCA7Civlj43lmawgPiBoYW56ZWlcIDsKK+WOn+WvuCA+IGdlbnN1blwgOwor5ZCM5LuBID4gZG91amluXCA7CivlkIzkurogPiBkb3VuaW5cIDsKK+WFuOm6lyA+IHRlbnJlaVwgOwor5ZCR5LiKID4ga291am91XCA7Civlt6Ppto8gPiBzdWRvcmlcIDsKK+WNgeacrCA+IGp1cHBvblwgOwor5buD6ImmID4gaGFpa2FuXCA7CivmsZ/lsbEgPiBrb3V6YW5cIDsKK+W6p+iWrCA+IHpheWFrdVwgOwor6JCO57iuID4gaXNodWt1XCA7Civph43lkIggPiBqdXVnb3VcIDsKK+W6g+iogCA+IGtvdWdlblwgOwor5buD6Ii5ID4gaGFpc2VuXCA7Civlu5DogqUgPiBreXV1aGlcIDsKK+WQjOS5lyA+IGRvdWpvdVwgOwor5b+c5oClID4gb3VreXV1XCA7Civph5HljbAgPiBraW4nJ2luXCA7CivpgYroirggPiB5dXVnZWlcIDsKK+aui+eXlSA+IHphbmtvblwgOwor5YmN6JGXID4gemVuY2hvXCA7Civoj5bokrIgPiBzaG91YnVcIDsKK+mHjuWOnyA+IG5vaGFyYVwgOwor5rG65aOKID4ga2Vra2FpXCA7Civljp/lrZAgPiBnZW5zaGlcIDsKK+avm+awiCA+IG1vdXNlblwgOwor5Y2g5ougID4gc2Vua3lvXCA7CivlkIzkuIogPiBkb3Vqb3VcIDsKK+WIpeijvSA+IGJlc3NlaVwgOwor5byK56S+ID4gaGVpc2hhXCA7Civmr5Tms4EgPiBoaWt5b3VcIDsKK+mAj+imliA+IHRvdXNoaVwgOwor5Y2K5pWwID4gaGFuc3V1XCA7CivphpzlpbMgPiBzaHV1am9cIDsKK+WKueebriA+IGtpa2ltZVwgOwor5rCR5pS/ID4gbWluc2VpXCA7Civps7Tnpr0gPiBtZWlraW5cIDsKK+awkeaUviA+IG1pbnBvdVwgOwor6L+R6YO3ID4ga2luZ291XCA7CivphZLmiYsgPiBzYWthdGVcIDsKK+i/lOmChCA+IGhlbmthblwgOwor5byT55+iID4geXVtaXlhXCA7CivliY3oj5wgPiB6ZW5zYWlcIDsKK+WPjeWVjyA+IGhhbm1vblwgOwor5Yem6YGHID4gc2hvZ3V1XCA7Civlv4PmioAgPiBzaGluZ2lcIDsKK+i/kemDiiA+IGtpbmtvdVwgOwor6JaE5YCWID4gaGFra291XCA7CivliJ3oposgPiBzaG9rZW5cIDsKK+asoOiIqiA+IGtla2tvdVwgOwor55uX6Zu7ID4gdG91ZGVuXCA7Civlt6jpr6ggPiBreW9nZWlcIDsKK+ayg+WcnyA+IHlva3Vkb1wgOwor5be76aaWID4ga2Fuc2h1XCA7Civlh7rotrMgPiBkZWFzaGlcIDsKK+aui+eUnyA+IHphbnNlaVwgOwor5YyX5qynID4gaG9rdW91XCA7Civnm5fpm6MgPiB0b3VuYW5cIDsKK+WKoOemhCA+IGthcm9rdVwgOwor5Y+35L+4ID4gZ291aG91XCA7Civmrbvnm7ggPiBzaGlzb3VcIDsKK+WNseaApSA+IGtpa3l1dVwgOwor5Ymb6IeGID4gZ291b2t1XCA7CivlvL7niYcgPiBkYW5wZW5cIDsKK+ecjOmBkyA+IGtlbmRvdVwgOwor5Y2z5b+cID4gc29rdW91XCA7CivmrabnpZ4gPiBidXNoaW5cIDsKK+i/lOmAgSA+IGhlbnNvdVwgOwor5b6p5pS5ID4gZnVra2FpXCA7Civph5HliZsgPiBrb25nb3VcIDsKK+W5o+iyoiA+IGhlaWtvdVwgOwor6YWN5omAID4gaGFpc2hvXCA7CivljbXlvaIgPiByYW5rZWlcIDsKK+mHkeWIuCA+IGtpbmtlblwgOwor6YWU5oWLID4gc3VpdGFpXCA7CivlubvoppYgPiBnZW5zaGlcIDsKK+W3qOmtgSA+IGt5b2thaVwgOwor6JWD5ZywID4gYmFuY2hpXCA7CivljYHmlbAgPiBqdXVzdXVcIDsKK+axveWcpyA+IGtpYXRzdVwgOwor5Yeh6YCAID4gYm9udGFpXCA7CivpgZTogIUgPiB0YXNzaGFcIDsKK+W+k+adpSA+IGp1dXJhaVwgOwor6YG4566hID4gc2Vua2FuXCA7CivliIborbIgPiBidW5qb3VcIDsKK+WPuOS8miA+IHNoaWthaVwgOwor5b6h5paZID4gZ29yeW91XCA7Civlhobpq5ggPiBlbmRha2FcIDsKK+i/kei+uiA+IGtpbnBlblwgOwor5Y6f5aeLID4gZ2Vuc2hpXCA7Civlj6PlhoUgPiBrb3VuYWlcIDsKK+WHuuiyuyA+IHNodXBwaVwgOwor6YeR5YagID4ga2lua2FuXCA7CivljbDlvaIgPiBpbmd5b3VcIDsKK+WPuOS7pCA+IHNoaXJlaVwgOwor6YeN5YiRID4ganV1a2VpXCA7Civov73oqLQgPiB0c3Vpc29cIDsKK+WPt+S7pCA+IGdvdXJlaVwgOwor5Yqg56GrID4ga2FyeXV1XCA7CivliZvog4YgPiBnb3V0YW5cIDsKK+mHkeWFtyA+IGthbmFndVwgOwor5Y+O5Y+XID4gc2h1dWp1XCA7CivphY3mha4gPiBoYWlyeW9cIDsKK+i/t+irliA+IG1laXJvblwgOwor5q+O5q+OID4gbWFpbWFpXCA7Civov73oqJggPiB0c3Vpa2lcIDsKK+edoeiTriA+IHN1aXJlblwgOwor5b+D5oSPID4gc2hpbicnaVwgOwor5Ymy57eaID4ga2Fzc2VuXCA7CivliIfoq4wgPiBzZWtrYW5cIDsKK+W/mOW5tCA+IGJvdW5lblwgOwor5Y2z5bqnID4gc29rdXphXCA7Civlt7vpoK0gPiBrYW50b3VcIDsKK+WKueeUqCA+IGtvdXlvdVwgOwor5Yqr55uXID4gZ291dG91XCA7CivokrLmn7MgPiBob3J5dXVcIDsKK+aBkuS+iyA+IGtvdXJlaVwgOwor5Y+y5LydID4gc2hpZGVuXCA7Civlv43lvpMgPiBuaW5qdXVcIDsKK+mFt+WvkiA+IGtva2thblwgOwor5biC6Zu7ID4gc2hpZGVuXCA7Civli4fnjJsgPiB5dXVtb3VcIDsKK+avrOaenCA+IGt5dXVrYVwgOwor6I236LazID4gbmlhc2hpXCA7CivluLjpgZMgPiBqb3Vkb3VcIDsKK+WIhuipniA+IGJ1bnNoaVwgOwor5rK75LmxID4gY2hpcmFuXCA7CivljbXlt6MgPiByYW5zb3VcIDsKK+atu+eUoyA+IHNoaXphblwgOwor5q2755SfID4gc2hpc2VpXCA7CivljZrmhJsgPiBoYWt1YWlcIDsKK+W4uOmAoyA+IGpvdXJlblwgOwor5YaS6aCtID4gYm91dG91XCA7CivmgKflkJEgPiBzZWlrb3VcIDsKK+W4sOmDtyA+IGtpa3lvdVwgOwor5rC05bmzID4gc3VpaGVpXCA7CivmsrvkuJYgPiBjaGlzZWlcIDsKK+W8leeUqCA+IGluJyd5b3VcIDsKK+murum6lyA+IHNlbnJlaVwgOwor55uu6YeYID4gbWVrdWdpXCA7Civlj43li5UgPiBoYW5kb3VcIDsKK+WJjeiFlSA+IG1hZXVkZVwgOwor5Y+y5LmXID4gc2hpam91XCA7CivliIbop6MgPiBidW5rYWlcIDsKK+WPguWQkSA+IHNhbmtvdVwgOwor5Y+z5LiKID4gbWlnaXVlXCA7CivpgaPnsbMgPiBrZW5iZWlcIDsKK+WPpOS/lyA+IGtvem9rdVwgOwor5b6M5pmvID4ga291a2VpXCA7Civlj7LkuIogPiBzaGlqb3VcIDsKK+WOluWkpyA+IGJvdWRhaVwgOwor6YCA6KGMID4gdGFpa291XCA7Civlj6/kuZ8gPiBrYW5hcmlcIDsKK+W5s+ihoSA+IGhlaWtvdVwgOwor5bqn6IiIID4gemFreW91XCA7CivmraPnnLwgPiBzZWlnYW5cIDsKK+W5s+ihjCA+IGhlaWtvdVwgOwor5b6F5pybID4gdGFpYm91XCA7Civno4Hlo4EgPiBqaWhla2lcIDsKK+W3rumhjSA+IHNhZ2FrdVwgOwor5q6L54mHID4gemFucGVuXCA7Civlj6XkvZwgPiBrdXNha3VcIDsKK+W+jOaYhiA+IGtvdWtvblwgOwor5q2j55uuID4gbWFzYW1lXCA7Civnn6LnjokgPiB5YWRhbWFcIDsKK+WNgeaMhyA+IGp1c3NoaVwgOwor5Y2Y5oCnID4gdGFuc2VpXCA7Civljp/lnosgPiBnZW5rZWlcIDsKK+avm+aguSA+IG1vdWtvblwgOwor5biC6ZaAID4gc2hpbW9uXCA7CivokrjmlaMgPiBqb3VzYW5cIDsKK+W+jOaWuSA+IGtvdWhvdVwgOwor6YWN5b2TID4gaGFpdG91XCA7CivliqDnmYIgPiBrYXJ5b3VcIDsKK+W+i+aXiyA+IHJpc3NlblwgOwor5Y+j5LydID4ga291ZGVuXCA7CivphZLlupcgPiBzaHV0ZW5cIDsKK+W4q+mBkyA+IHNoaWRvdVwgOwor5bqV6I23ID4gc29rb25pXCA7CivliIrooYwgPiBrYW5rb3VcIDsKK+WHuuiotCA+IHNodXNzb1wgOwor5Y2a5b6SID4gYmFrdXRvXCA7Civlu4Pnt5ogPiBoYWlzZW5cIDsKK+eggua8oCA+IHNhYmFrdVwgOwor5oCl5YufID4ga3l1dWJvXCA7CivlvLHngasgPiB5b3dhYmlcIDsKK+WJjeiAhSA+IHplbnNoYVwgOwor5oCl5YuZID4ga3l1dW11XCA7Civlt6jpoK0gPiBreW90b3VcIDsKK+iRieeJqSA+IGhhbW9ub1wgOwor5YiG6KKCID4gYnVuYmVpXCA7CivlhobpoIIgPiBlbmNob3VcIDsKK+awl+aBryA+IGtpc29rdVwgOwor5b6M5pS7ID4ga291a291XCA7Civps6nnm64gPiBoYXRvbWVcIDsKK+mHjeS9kyA+IGp1dXRhaVwgOwor5Y6z5ZG9ID4gZ2VubWVpXCA7CivlhpLpmbogPiBib3VrZW5cIDsKK+WOn+WboCA+IGdlbicnaW5cIDsKK+WGhemghSA+IG5haWtvdVwgOwor5YmN57+FID4gemVuc2hpXCA7Civluqbog7ggPiBkb2t5b3VcIDsKK+eci+iyqyA+IGthbmthblwgOwor5Y2R5oCvID4gaGlreW91XCA7CivljZrlvJUgPiBoYWt1aW5cIDsKK+apn+mVtyA+IGtpY2hvdVwgOwor5Ymy56ymID4gd2FyaWZ1XCA7CivmsJfmgKcgPiBraXNob3VcIDsKK+WNgeaIkiA+IGppa2thaVwgOwor5Y+L5YWaID4geXV1dG91XCA7Civlj5fkv6EgPiBqdXNoaW5cIDsKK+ebrumAlCA+IG1va3V0b1wgOwor6L6y6YGTID4gbm91ZG91XCA7Civnn7PngbAgPiBzZWtrYWlcIDsKK+awkeaDhSA+IG1pbmpvdVwgOwor5Y6a5ZywID4gYXRzdWppXCA7Civph43ku7sgPiBqdXVuaW5cIDsKK+i/juizkyA+IGdlaWhpblwgOwor5Y6z5ZCbID4gZ2Vua3VuXCA7CivliY3nva4gPiB6ZW5jaGlcIDsKK+mHjeS7oyA+IGp1dWRhaVwgOwor5YiX6JepID4gcmVwcGFuXCA7Civps6Xnm64gPiB0b3JpbWVcIDsKK+WNmOW8gSA+IHRhbmJlblwgOwor5q615q61ID4gZGFuZGFuXCA7CivmsLTlsYsgPiBtaXp1eWFcIDsKK+W+gOaYlCA+IG91c2VraVwgOwor6YeR5Li7ID4ga2luc2h1XCA7CivnoLTmoLwgPiBoYWtha3VcIDsKK+WNg+aFriA+IHNlbnJ5b1wgOwor5Y675YuiID4ga3lvc2VpXCA7Civlj6PkuIogPiBrb3Vqb3VcIDsKK+W9k+atsyA+IHRvdXNhaVwgOwor55qu6Z2pID4gaGlrYWt1XCA7CivlhoXpnaIgPiBuYWltZW5cIDsKK+W3t+mWkyA+IGtvdWthblwgOwor5Ya36YWSID4gcmVpc2h1XCA7CivljbXlrZAgPiByYW5zaGlcIDsKK+aAquWFiSA+IGthaWtvdVwgOwor5YW86aGMID4ga2VuZGFpXCA7CivmqoDpgqMgPiBkYW4nJ25hXCA7Civph47kuK0gPiBub25ha2FcIDsKK+mAoOiIuSA+IHpvdXNlblwgOwor5Y+C5YaFID4gc2FuZGFpXCA7CivmsLTlrrMgPiBzdWlnYWlcIDsKK+W+ueW6lSA+IHRldHRlaVwgOwor5rCX5byxID4ga2l5b3dhXCA7Civlj5vkubEgPiBoYW5yYW5cIDsKK+W+oeaFtiA+IGd5b2tlaVwgOwor55yM6K2mID4ga2Vua2VpXCA7CivluJ3pgZMgPiB0ZWlkb3VcIDsKK+WIpeiNmCA+IGJlc3NvdVwgOwor56KB5bitID4gZ29zZWtpXCA7CivliJ3okYkgPiBzaG95b3VcIDsKK+W9vOaWuSA+IGthbmF0YVwgOwor55uf6YKmID4gbWVpaG91XCA7Civlv6vloLEgPiBrYWlob3VcIDsKK+WOreWOrSA+IGl5YWl5YVwgOwor5rC05a2QID4gbWl6dWdvXCA7Civlho3plosgPiBzYWlrYWlcIDsKK+mBoOensCA+IGVuc2hvdVwgOwor5YyX5pa5ID4gaG9wcG91XCA7CivlhoXpmaMgPiBuYWlqaW5cIDsKK+WNiuW+hCA+IGhhbmtlaVwgOwor6JGb5rmvID4ga3V6dXl1XCA7Civprq7prZogPiBzZW5neW9cIDsKK+WGt+mBhyA+IHJlaWd1dVwgOwor5Y2K5b2xID4gaGFuJydlaVwgOwor5Y+N5L6LID4gaGFucmVpXCA7Civlt6Ppm5sgPiBzdWhpbmFcIDsKK+W+ruW8sSA+IGJpamFrdVwgOwor6YO35p2RID4gZ291c29uXCA7CivnoazmgKcgPiBrb3VzZWlcIDsKK+mFkuWxiyA+IHNha2F5YVwgOwor5YWs6aSoID4ga291a2FuXCA7CivliY3nt6ggPiB6ZW5wZW5cIDsKK+mAgOiUtSA+IHRhaXpvdVwgOwor5Yed6K2wID4gZ3lvdWdpXCA7CivliY3nt5ogPiB6ZW5zZW5cIDsKK+atr+eKtiA+IHNoaWpvdVwgOwor5bed6Z2iID4ga2F3YW1vXCA7Civljp/lk4EgPiBnZW5waW5cIDsKK+W8leeFpyA+IGluc2hvdVwgOwor5Y2g5bGFID4gc2Vua3lvXCA7CivlhajppKggPiB6ZW5rYW5cIDsKK+WOs+WIkSA+IGdlbmtlaVwgOwor6L+R6KmgID4ga2luJydlaVwgOwor6JKZ5pinID4gbW91bWFpXCA7Civmrovmu5MgPiB6YW5zaGlcIDsKK+aymeS4mCA+IHNha3l1dVwgOwor5q2754K5ID4gc2hpdGVuXCA7Civnm7josowgPiBzb3Vib3VcIDsKK+mAgeiRrCA+IHNvdXNvdVwgOwor55m96a2UID4gaGFrdW1hXCA7CivljZzlsYUgPiBib2treW9cIDsKK+eijeWtkCA+IGdhaXNoaVwgOwor5q+O5pmpID4gbWFpYmFuXCA7CivljrPlhqwgPiBnZW50b3VcIDsKK+atu+eBsCA+IHNoaWthaVwgOwor5Y+L5Lq6ID4geXV1amluXCA7Civnm4rph5EgPiBla2lraW5cIDsKK+WKtOeBvSA+IHJvdXNhaVwgOwor5Y+N5LmxID4gaGFucmFuXCA7CivljZflsrggPiBuYW5nYW5cIDsKK+edgOiNtyA+IGNoYWtrYVwgOwor5Y+L5LqkID4geXV1a291XCA7Civokabmr5sgPiBhc2hpZ2VcIDsKK+asoeesrCA+IHNoaWRhaVwgOwor5Y6a5ZGzID4gYXRzdW1pXCA7CivlhbXpm6MgPiBoZWluYW5cIDsKK+WNs+WknCA+IHNva3V5YVwgOwor5b2i5pyoID4ga2F0YWdpXCA7CivluKvos4cgPiBzaGlzaGlcIDsKK+WNl+WxsSA+IG5hbnphblwgOwor5b+X5aOrID4gc2hpc2hpXCA7CivnnIvoppYgPiBrYW5zaGlcIDsKK+i/keimliA+IGtpbnNoaVwgOwor5beM6aCtID4gZ2FudG91XCA7CivojLbpgZMgPiBjaGFkb3VcIDsKK+asoeeroCA+IGppc2hvdVwgOwor5YW36ZmzID4gZ3VjaGluXCA7CivmgKrkurogPiBrYWlqaW5cIDsKK+eZu+mrmCA+IHRvdWtvdVwgOwor55uk6LieID4gYmFua3lvXCA7CivlhbXpmoogPiBoZWl0YWlcIDsKK+mAo+e9siA+IHJlbnNob1wgOwor5q2j54qvID4gc2VpaGFuXCA7CivljZjlsIQgPiB0YW5zaGFcIDsKK+WPguS8miA+IHNhbmthaVwgOwor5YqH55S7ID4gZ2VraWdhXCA7Civlhajpn7MgPiB6ZW4nJ29uXCA7CivljbXloZQgPiByYW50b3VcIDsKK+WFmummliA+IHRvdXNodVwgOwor6YGO56ewID4ga2FzaG91XCA7CivmgKfkuqQgPiBzZWlrb3VcIDsKK+WNgeW5siA+IGppa2thblwgOwor6Iux6aCYID4gZWlyeW91XCA7CivljZHlsawgPiBoaXpva3VcIDsKK+W3qOmQmCA+IG9vZ2FuZVwgOwor5qiq6aCYID4gb3VyeW91XCA7CivljZHlsZ4gPiBoaXpva3VcIDsKK+efs+ayuSA+IHNla2l5dVwgOwor5bu754q2ID4ga2Fpam91XCA7CivliY3nr4cgPiB6ZW5wZW5cIDsKK+mBlOejqCA+IGRhcnVtYVwgOwor5Y6f5YuVID4gZ2VuZG91XCA7CivljZflrosgPiBuYW5zb3VcIDsKK+WFrOmbuyA+IGtvdWRlblwgOwor5byx5rCXID4geW93YWtpXCA7CivlhajpnaIgPiB6ZW5tZW5cIDsKK+W+oeW5uCA+IG1peXVraVwgOwor5b6Y5b6KID4gaGFpa2FpXCA7Civpg7XmlL8gPiB5dXVzZWlcIDsKK+WNiuWztiA+IGhhbnRvdVwgOwor5Y2R5bCPID4gaGlzaG91XCA7Civnmb3ppqwgPiBoYWt1YmFcIDsKK+ebuOirhyA+IHNvdWRhblwgOwor5qyd56mNID4gdXNzZWtpXCA7CivlvoHmiKYgPiBzZWlzZW5cIDsKK+WJsuebriA+IHdhcmVtZVwgOwor6I+M57O4ID4ga2luc2hpXCA7CivlhajpnIogPiB6ZW5yZWlcIDsKK+W+jOaCoyA+IGtvdWthblwgOwor5biC6YGTID4gc2hpZG91XCA7CivpgKPnuYsgPiByZW5rZWlcIDsKK+W9k+advyA+IGF0ZWl0YVwgOwor5Y+C5LiOID4gc2FuJyd5b1wgOwor5b6M5oKUID4ga291a2FpXCA7Civlj4LkuIogPiBzYW5qb3VcIDsKK+ayiOS4iyA+IGNoaW5rYVwgOwor55yf6JavID4gc2hpbmpvXCA7Civlh73ok4sgPiBrYW5nYWlcIDsKK+WOn+WInSA+IGdlbnNob1wgOwor5YmN56uvID4gemVudGFuXCA7Civlv6vlk4kgPiBrYWlzYWlcIDsKK+awl+WtpiA+IGtpZ2FrdVwgOwor5rC05Z+fID4gc3VpaWtpXCA7Civlvq7lsJEgPiBiaXNob3VcIDsKK+W+ruWwjyA+IGJpc2hvdVwgOwor5YWo6ZqKID4gemVudGFpXCA7CivpgIHoh7QgPiBzb3VjaGlcIDsKK+mAo+e2vyA+IHJlbm1lblwgOwor5Ym155eVID4gc291a29uXCA7CivmrLLnm64gPiB5b2t1bWVcIDsKK+W+l+W6piA+IHRva3Vkb1wgOwor5b6T5byfID4ganV1dGVpXCA7Civpg6jml48gPiBidXpva3VcIDsKK+iVg+S6uiA+IGJhbmppblwgOwor6I+c56iuID4gbmF0YW5lXCA7Civnm7ToqLQgPiBqaWtpc29cIDsKK+WOn+WFuCA+IGdlbnRlblwgOwor5YWs6ZaLID4ga291a2FpXCA7CivpsZfojI4gPiByaW5rZWlcIDsKK+WFpemZoiA+IG55dXVpblwgOwor55+t5q+bID4gdGFubW91XCA7CivlubvogqIgPiBnZW5zaGlcIDsKK+iNkuiqlSA+IGtvdXRhblwgOwor5Yid6ICBID4gc2hvcm91XCA7CivphbflkI8gPiBrb2t1cmlcIDsKK+mAo+e0ryA+IHJlbnJ1aVwgOwor5q275rW3ID4gc2hpa2FpXCA7CivolYPkuLsgPiBiYW5zaHVcIDsKK+W4q+iokyA+IHNoaWt1blwgOwor5qip6ZmQID4ga2VuZ2VuXCA7Civli5jmpJwgPiBrYW5rZW5cIDsKK+mBuueJqSA+IGlidXRzdVwgOwor5YeG6KixID4ganVua3lvXCA7CivphZLloLQgPiBzYWthYmFcIDsKK+WFqOmWiyA+IHplbmthaVwgOwor5q6J5q27ID4ganVuc2hpXCA7Civljp/lg48gPiBnZW56b3VcIDsKK+W7tueEvCA+IGVuc2hvdVwgOwor55uu6KixID4gbWVtb3RvXCA7CivmsLTlmqIgPiBzdWlub3VcIDsKK+W9k+aWuSA+IHRvdWhvdVwgOwor5Ye66I23ID4gc2h1a2thXCA7CivnnJ/oj7AgPiBtYWtvbW9cIDsKK+WFg+mmliA+IGdlbnNodVwgOwor5Y2X5aSpID4gbmFudGVuXCA7Civnm67op5IgPiBtZWthZG9cIDsKK+WGjemBuCA+IHNhaXNlblwgOwor5buD55ukID4gaGFpYmFuXCA7CivnoavlrokgPiByeXV1YW5cIDsKK+apn+i7uCA+IGtpamlrdVwgOwor5Yui5pybID4gc2VpYm91XCA7CivmqKnploAgPiBrZW5tb25cIDsKK+mKmOOAhSA+IG1laW1laVwgOwor5YuY5qGIID4ga2FuJydhblwgOwor5b6M5bm0ID4ga291bmVuXCA7CivljLvlsYAgPiBpa3lva3VcIDsKK+WGjemBiiA+IHNhaXl1dVwgOwor56Cy5omLID4gaG91c2h1XCA7Civnmb3pnLIgPiBoYWt1cm9cIDsKK+iKsemzpSA+IGthY2hvdVwgOwor6L+96IKlID4gdHN1aWhpXCA7Civli5jmoKEgPiBrYW5rb3VcIDsKK+W/teWGmSA+IG5lbnNoYVwgOwor55+l5q2vID4gY2hpc2hpXCA7CivluIbotbAgPiBoYW5zb3VcIDsKK+W+gOW+qSA+IG91ZnVrdVwgOwor55+z5qa0ID4gemFrdXJvXCA7Civnmb3pm7IgPiBoYWt1dW5cIDsKK+WGjemAgSA+IHNhaXNvdVwgOwor5YWJ6aCtID4ga291dG91XCA7CivlvovluKsgPiByaXNzaGlcIDsKK+aEiOOAhSA+IGl5b2l5b1wgOwor5YW16YuSID4gaGVpaG91XCA7Civlh7roirEgPiBkZWJhbmFcIDsKK+atqea4rCA+IGhvc29rdVwgOwor5YWI6aCtID4gc2VudG91XCA7CivluoPnuIEgPiBoaXJvZW5cIDsKK+a1quOAhSA+IHJvdXJvdVwgOwor5Yqb5ryUID4gcmlraWVuXCA7CivpgqrmrLIgPiBqYXlva3VcIDsKK+W/g+WcnyA+IHNoaW5kb1wgOwor5b6u5aaZID4gYmlteW91XCA7CivlvoTluq0gPiBrZWl0ZWlcIDsKK+WIpee0mSA+IGJlc3NoaVwgOwor5b+c5Y+sID4gb3VzaG91XCA7Civlh7roiLkgPiBkZWZ1bmVcIDsKK+mFt+WIkSA+IGtva2tlaVwgOwor5b+r5YiAID4ga2FpdG91XCA7Civnn7Pmo7ogPiBzZWtrYW5cIDsKK+WFiOmerSA+IHNlbmJlblwgOwor5ben6YGFID4ga291Y2hpXCA7CivluqfnpIEgPiB6YXNob3VcIDsKK+mBuOeCrSA+IHNlbnRhblwgOwor5byB5riIID4gYmVuc2FpXCA7CivljYrlpKkgPiBoYW50ZW5cIDsKK+W/l+WQkSA+IHNoaWtvdVwgOwor55uj6KaWID4ga2Fuc2hpXCA7Civlh7roh40gPiBkZWJlc29cIDsKK+W9t+W+qCA+IGhvdWtvdVwgOwor5Y2K5aScID4gaGFuJyd5YVwgOwor5Yi256m6ID4gc2Vpa3V1XCA7Civljp/kurogPiBnZW5qaW5cIDsKK+WGjei7oiA+IHNhaXRlblwgOwor5b2i5oiQID4ga2Vpc2VpXCA7CivluILosqkgPiBzaGloYW5cIDsKK+W3numDvSA+IHNodXV0b1wgOwor5YWJ6Zu7ID4ga291ZGVuXCA7CivnoZ3lrokgPiBzaG91YW5cIDsKK+WInee1jCA+IHNob2tlaVwgOwor5Y2K5aOKID4gaGFua2FpXCA7CivlvJTmrYwgPiBjaG91a2FcIDsKK+i/keiRlyA+IGtpbmNob1wgOwor6JC95qy+ID4gcmFra2FuXCA7CivliIfnvr0gPiBraXJpaGFcIDsKK+ehneWtkCA+IGdhcmFzdVwgOwor5bm557eaID4ga2Fuc2VuXCA7Civpg73lv4MgPiB0b3NoaW5cIDsKK+eiuuS/nSA+IGtha3Vob1wgOwor5q2z5q2zID4gc2Fpc2FpXCA7CivlhYXpm7sgPiBqdXVkZW5cIDsKK+axoOS6rSA+IGNoaXRlaVwgOwor5YaF6LyqID4gdWNoaXdhXCA7CivpgYvnlKggPiB1bicneW91XCA7Civnm5voprMgPiBzZWlrYW5cIDsKK+WNg+WknCA+IHNlbicneWFcIDsKK+W6j+eroCA+IGpvc2hvdVwgOwor5Yi256amID4gc2VpZ3lvXCA7CivliIbnvbIgPiBidW5zaG9cIDsKK+W9ouaFiyA+IGtlaXRhaVwgOwor56Gs5aSJID4ga291aGVuXCA7CivlhYjpmaMgPiBzZW5qaW5cIDsKK+awl+WcpyA+IGtpYXRzdVwgOwor5YWs6YeRID4ga291a2luXCA7Civps6XmuKEgPiBjaG90dG9cIDsKK+mBheeVqiA+IG9zb2JhblwgOwor5Yqb5rOzID4gcmlraWVpXCA7CivmraPmsrkgPiBzaG91eXVcIDsKK+WNsOWMoyA+IGluYmFrb1wgOwor5Y2z5Yq5ID4gc29ra291XCA7CivojbfoiLkgPiBuaWJ1bmVcIDsKK+W6g+evhCA+IGtvdWhhblwgOwor55+z5pyoID4gaXNoaWtpXCA7CivmsZ/kuIogPiBrb3Vqb3VcIDsKK+WNs+WKnyA+IHNva2tvdVwgOwor56Kp5YSSID4gc2VraWp1XCA7CivokZfmm7ggPiBjaG9zaG9cIDsKK+W3nei+uiA+IGthd2FiZVwgOwor6bOp5rS+ID4gaGF0b2hhXCA7Civmr43lvqEgPiBoYWhhZ29cIDsKK+mEreWjsCA+IHRlaXNlaVwgOwor56Cy5by+ID4gaG91ZGFuXCA7CivlvZPmiYAgPiB0b3VzaG9cIDsKK+ebm+ijhSA+IHNlaXNvdVwgOwor6Iqz6aaZID4gaG91a291XCA7Civlv6vkvr8gPiBrYWliZW5cIDsKK+awtOWLoiA+IHN1aXNlaVwgOwor6YO95bqBID4gdG9jaG91XCA7Civlha3pg6ggPiByb2t1YnVcIDsKK+atouawtCA+IHNoaXN1aVwgOwor6a6u6YutID4gc2VuJydlaVwgOwor6YWS5ZCNID4gc2h1bWVpXCA7Civnm5voobAgPiBzZWlzdWlcIDsKK+awkeWboyA+IG1pbmRhblwgOwor6Iq46aKoID4gZ2VpZnV1XCA7CivlvKbmnZAgPiBnZW56YWlcIDsKK+WIneetiSA+IHNob3RvdVwgOwor5YWs6YK4ID4ga291dGVpXCA7CivljbDliLsgPiBpbmtva3VcIDsKK+WJsueDuSA+IGthcHBvdVwgOwor6JOu5Y+wID4gcmVuZGFpXCA7CivmraPmrr8gPiBzZWlkZW5cIDsKK+WGoOipniA+IGthbnNoaVwgOwor5YaN6LKpID4gc2FpaGFuXCA7CivliIfnt5ogPiBzZXNzZW5cIDsKK+WJo+eKtiA+IGtlbmpvdVwgOwor5Y215YaGID4gcmFuJydlblwgOwor6YW35Ly8ID4ga29rdWppXCA7CivliKXnqK4gPiBiZXNzaHVcIDsKK+edpeedqCA+IGhlaWdlaVwgOwor6JGJ5p+EID4geW91aGVpXCA7CivokZfmmI4gPiBjaG9tZWlcIDsKK+W+k+WniSA+IGp1dXNoaVwgOwor5q665oSPID4gc2F0c3VpXCA7Civovp7ooaggPiBqaWh5b3VcIDsKK+WFrOmBuCA+IGtvdXNlblwgOwor5b6T5aa5ID4ganV1bWFpXCA7CivliKnnpo8gPiByaWZ1a3VcIDsKK+WNoOWPliA+IHNlbnNodVwgOwor5q2v5qe9ID4gc2hpc291XCA7CivnnJ/nvqkgPiBzaGluZ2lcIDsKK+avjuW5tCA+IG1haW5lblwgOwor5q6L5pqRID4gemFuc2hvXCA7CivlhazpgZMgPiBrb3Vkb3VcIDsKK+ato+atoyA+IHNlaXNlaVwgOwor5bmz57GzID4gaGVpYmVpXCA7CivphY3lkIggPiBoYWlnb3VcIDsKK+awtOWIhiA+IHN1aWJ1blwgOwor55yf576OID4gc2hpbmJpXCA7CivluYToiI4gPiBha3VzaGFcIDsKK+mtmumxlyA+IGd5b3JpblwgOwor55+i5p+EID4geWFnYXJhXCA7CivlhaXpg6ggPiBueXV1YnVcIDsKK+efs+aWpyA+IHNla2lmdVwgOwor5YaX6KuHID4gam91ZGFuXCA7CivmsLTlhrcgPiBzdWlyZWlcIDsKK+WFtei7iiA+IGhlaXNoYVwgOwor55+u5pifID4gd2Fpc2VpXCA7CivokrzlpKkgPiBzb3V0ZW5cIDsKK+WFqOmBkyA+IHplbmRvdVwgOwor5bm856ulID4geW91ZG91XCA7CivovZ/ovZ8gPiBnb3Vnb3VcIDsKK+edoeecoCA+IHN1aW1pblwgOwor5beo6LOHID4ga3lvc2hpXCA7CivokYnmm7ggPiBoYWdha2lcIDsKK+WFrOi+uiA+IGtvdWhlblwgOwor5YyF5bivID4gaG91dGFpXCA7CivljoTku4sgPiB5YWtrYWlcIDsKK+awkeWWtiA+IG1pbicnZWlcIDsKK+WLh+aWrSA+IHl1dWRhblwgOwor5YuV5o+6ID4gZG91eW91XCA7Civmrr/lvqEgPiB0b25vZ29cIDsKK+awtOWFtSA+IHN1aWhlaVwgOwor5Y2B5ZueID4ganVra2FpXCA7CivljYHlm5sgPiBqdXV5b25cIDsKK+W3qOiyoSA+IGt5b3phaVwgOwor5Y2U5ZKMID4ga3lvdXdhXCA7Civlub3nqpMgPiB5dXVzb3VcIDsKK+W3nei3ryA+IGthd2FqaVwgOwor5be36KuHID4ga291ZGFuXCA7Civnm67ok4sgPiBtYWJ1dGFcIDsKK+WLh+aVoiA+IHl1dWthblwgOwor5beo6LGhID4ga3lvem91XCA7CivmqKnpgZMgPiBrZW5kb3VcIDsKK+WGl+iogCA+IGpvdWdlblwgOwor55+t5paHID4gdGFuYnVuXCA7CivmrKDniYcgPiBrYWtlcmFcIDsKK+mAo+ebnyA+IHJlbm1laVwgOwor5bm856iaID4geW91Y2hpXCA7CivlvozlpKkgPiBrb3V0ZW5cIDsKK+WFt+i2syA+IGd1c29rdVwgOwor6bGX57KJID4gcmlucHVuXCA7CivljJblraYgPiBrYWdha3VcIDsKK+mBteazlSA+IGp1bnBvdVwgOwor55m96YeRID4gaGFra2luXCA7Civlhazou6IgPiBrb3V0ZW5cIDsKK+mBqea4qSA+IHRla2lvblwgOwor5Y2X5Y2KID4gbmFuaGFuXCA7CivpgLjnkIMgPiBpa2t5dXVcIDsKK+mFjeWJpCA+IGhhaXphaVwgOwor55qH6YGTID4ga291ZG91XCA7Civmra/moLkgPiBzaGlrb25cIDsKK+WNkuWOuyA+IHNva2t5b1wgOwor5YaN6KqVID4gc2FpdGFuXCA7CivlhYjpi60gPiBzZW4nJ2VpXCA7CivpgbjmsJEgPiBzZW5taW5cIDsKK+W4guihlyA+IHNoaWdhaVwgOwor5bWp6auYID4gc3V1a291XCA7CivlhYjpi5IgPiBzZW5wb3VcIDsKK+ecn+e2vyA+IG1hd2F0YVwgOwor5qyj54S2ID4ga2luemVuXCA7CivlvozlobUgPiBrb3VqaW5cIDsKK+WFqOi7jSA+IHplbmd1blwgOwor6YCB56i/ID4gc291a291XCA7CivlhrfolLUgPiByZWl6b3VcIDsKK+mFjeWIhiA+IGhhaWJ1blwgOwor5b6p5ZOhID4gZnVrdWluXCA7Civlh7rntI0gPiBzdWl0b3VcIDsKK+WHpue9riA+IHNob2NoaVwgOwor5b6Y5ZueID4gaGFpa2FpXCA7Civov7fnrZQgPiBtZWl0b3VcIDsKK+eZuumFtSA+IGhha2tvdVwgOwor5YaN6KiqID4gc2FpaG91XCA7CivlvozloLEgPiBrb3Vob3VcIDsKK+iNieiRiSA+IGt1c2FiYVwgOwor5b2p5bGkID4gc2Fpc291XCA7CivlubTnqI4gPiBuZW56ZWlcIDsKK+WGjeiogiA+IHNhaXRlaVwgOwor6Iub6YW3ID4ga2Frb2t1XCA7CivlvLfmiZMgPiBreW91ZGFcIDsKK+mCquaVmSA+IGpha3lvdVwgOwor55+i5paHID4geWFidW1pXCA7CivlhoXoq4cgPiBuYWlkYW5cIDsKK+awj+WQjSA+IHNoaW1laVwgOwor5YW36LGhID4gZ3VzaG91XCA7CivnnJ/ntIUgPiBzaGlua3VcIDsKK+WNk+WKuSA+IHRha2tvdVwgOwor6Imm6b2iID4ga2FucmVpXCA7Civli6TmgKAgPiBraW50YWlcIDsKK+WNs+S7iiA+IHNva2tvblwgOwor6YCj55WqID4gcmVuYmFuXCA7CivlvrTli58gPiBjaG91Ym9cIDsKK+mCpuaWhyA+IGhvdWJ1blwgOwor5b2T5bqXID4gdG91dGVuXCA7CivmrKDngrkgPiBrZXR0ZW5cIDsKK+W8iuadkSA+IGhlaXNvblwgOwor5b2T5bm0ID4gdG91bmVuXCA7CivlubTnpa0gPiBuZW5zYWlcIDsKK+W9vOWlsyA+IGthbm9qb1wgOwor5q275paRID4gc2hpaGFuXCA7CivojbfnuIQgPiBuaW5hd2FcIDsKK+atu+aWhyA+IHNoaWJ1blwgOwor6I2P6IuSID4gamluemVuXCA7CivmrbPmmakgPiBzYWliYW5cIDsKK+WMheWuuSA+IGhvdXlvdVwgOwor6L6y6Iq4ID4gbm91Z2VpXCA7CivlubTnpLwgPiBuZW5yZWlcIDsKK+W8lOaXlyA+IGNob3VraVwgOwor6YCA56S+ID4gdGFpc2hhXCA7CivljYrljYogPiBoYW5oYW5cIDsKK+WIpeebgyA+IGJlcHBhaVwgOwor6YGO5r+AID4ga2FnZWtpXCA7CivlhoXoqJMgPiBuYWlrdW5cIDsKK+eah+i7jSA+IGtvdWd1blwgOwor5YaF6KiMID4gbmFpa291XCA7CivmsLTku5kgPiBzdWlzZW5cIDsKK+iNieiNiSA+IHNvdXNvdVwgOwor5Y205LiLID4ga3lha2thXCA7Civli5XmhYsgPiBkb3V0YWlcIDsKK+WGjeijvSA+IHNhaXNlaVwgOwor5q2z5pifID4gc2Fpc2VpXCA7CivlvLfmhaIgPiBnb3VtYW5cIDsKK+W3p+iogCA+IGtvdWdlblwgOwor5biM6JaEID4ga2loYWt1XCA7CivljZjlhYMgPiB0YW5nZW5cIDsKK+mBoOa1hSA+IHRvb2FzYVwgOwor6L2G6L2kID4gcm9rdXJvXCA7Civmr5LlqaYgPiBkb2t1ZnVcIDsKK+ats+aXpiA+IHNhaXRhblwgOwor5Y2X5YWJID4gbmFua291XCA7CivljYHlj7AgPiBqdXVkYWlcIDsKK+mFjeWBtiA+IGhhaWd1dVwgOwor5YaF6KazID4gbmFpa2FuXCA7CivnmbrpgIEgPiBoYXNzb3VcIDsKK+W+oeWRiiA+IG90c3VnZVwgOwor5YaF6KanID4gbmFpcmFuXCA7CivpgaDmtIsgPiBlbicneW91XCA7CivlvL7mgKcgPiBkYW5zZWlcIDsKK+WGheimiyA+IG5haWtlblwgOwor5b2i5a65ID4ga2VpeW91XCA7Civpg6jlsZ4gPiBidXpva3VcIDsKK+ato+adsSA+IHNlaXRvdVwgOwor5by35oOFID4gZ291am91XCA7CivljYPljYMgPiBjaGlkamlcIDsKK+i/kee4gSA+IGtpbicnZW5cIDsKK+ecn+euhyA+IHNoaW5rb1wgOwor6a2a6aGeID4gZ3lvcnVpXCA7Civli4fmiKYgPiB5dXVzZW5cIDsKK+m2j+WPoyA+IGtlaWtvdVwgOwor5bi4572uID4gam91Y2hpXCA7CivljZLlhYggPiBzb3NzZW5cIDsKK+WHuuerryA+IGRlYmFuYVwgOwor6YGg5rKIID4gZW5jaGluXCA7CivmraPmnKwgPiBzZWlob25cIDsKK+ato+acqCA+IG1hc2FraVwgOwor5YWo6LKMID4gemVuYm91XCA7Civpg6jlsIYgPiBidXNob3VcIDsKK+WFiOmBoyA+IHNlbmtlblwgOwor56Gr5YyWID4gcnl1dWthXCA7CivpgaHmsYIgPiBzb2t5dXVcIDsKK+ecvOeevCA+IGdhbmtlblwgOwor5Y2K5YiGID4gaGFucHVuXCA7CivliIbnpL4gPiBidW5zaGFcIDsKK+ato+abuCA+IHNlaXNob1wgOwor5YWl6LK7ID4gbnl1dWhpXCA7Civnn63miYAgPiB0YW5zaG9cIDsKK+WNiOWIuyA+IGdva29rdVwgOwor55m76LyJID4gdG91c2FpXCA7CivlvIrmlrkgPiBoZWlob3VcIDsKK+WNoOS9jyA+IHNlbmp1dVwgOwor5beh6KanID4ganVucmFuXCA7CivmsJflhJggPiBraW1hbWFcIDsKK+W/jOS4rSA+IGtpY2h1dVwgOwor5YaF6KOFID4gbmFpc291XCA7Civli6flt6UgPiBrYW5rb3VcIDsKK+W9ueWgtCA+IHlha3ViYVwgOwor6a2U6aKoID4gbWFrYXplXCA7Civlh7rnqpMgPiBkZW1hZG9cIDsKK+W+jOWXoyA+IGtvdXNoaVwgOwor55uu6ISCID4gbWV5YW5pXCA7Civlt6HoppYgPiBqdW5zaGlcIDsKK+WKqeaVmSA+IGpva3lvdVwgOwor6YWS5LuZID4gc2h1c2VuXCA7Civpto/ljbUgPiBrZWlyYW5cIDsKK+ecn+eruSA+IG1hZGFrZVwgOwor55yL57WMID4ga2Fua2luXCA7Civlu7rmnZAgPiBrZW56YWlcIDsKK+eZuui7iiA+IGhhc3NoYVwgOwor5rCR5YW1ID4gbWlucGVpXCA7CivlvqnliIogPiBmdWtrYW5cIDsKK+WNiuWGhiA+IGhhbicnZW5cIDsKK+WLmOW9kyA+IGthbmRvdVwgOwor5byK5pS/ID4gaGVpc2VpXCA7CivljIjlpbQgPiBreW91ZG9cIDsKK+mFkuS5sSA+IHNodXJhblwgOwor55uy6ICFID4gbW91c2hhXCA7Civlu4PmtrIgPiBoYWlla2lcIDsKK+efh+aYpyA+IG1vdW1haVwgOwor5bem6KGoID4gc2FoeW91XCA7CivpgYXmu54gPiBjaGl0YWlcIDsKK+WIgOekvCA+IHRvdXJlaVwgOwor5byB5piOID4gYmVubWVpXCA7Civlv4PkuosgPiBzaGluamlcIDsKK+WLmOW8gSA+IGthbmJlblwgOwor5qyy5rCXID4geW9rdWtlXCA7Civnn63mha4gPiB0YW5yeW9cIDsKK+WNg+WIhiA+IHNlbmJ1blwgOwor5Yqj5pWXID4gcmVwcGFpXCA7Civmr47lpJUgPiBtYWl5dXVcIDsKK+egsuWjsCA+IGhvdXNlaVwgOwor5YWJ6LyqID4ga291cmluXCA7CivljZLlgJIgPiBzb3R0b3VcIDsKK+WNmOS9kyA+IHRhbnRhaVwgOwor55m+6LazID4gbXVrYWRlXCA7CivmrKfmtLIgPiBvdXNodXVcIDsKK+WLheaEjyA+IGNob2t1aVwgOwor5YWs6KuWID4ga291cm9uXCA7CivljYHliIYgPiBqdXBwdW5cIDsKK+mtmumbtyA+IGd5b3JhaVwgOwor5YWI6LypID4gc2VucGFpXCA7CivlubPnm64gPiBoaXJhbWVcIDsKK+mDt+WjqyA+IGdvdXNoaVwgOwor5q2k5pa5ID4ga29uYXRhXCA7CivliaPms5UgPiBrZW5wb3VcIDsKK+W+ruWCtyA+IGJpc2hvdVwgOwor6Iy26Iy2ID4gY2hhY2hhXCA7CivmraPmlrkgPiBzZWlob3VcIDsKK+atpuaVmSA+IGJ1a3lvdVwgOwor5Ymq5q+bID4gc2VubW91XCA7Civovpvoi6YgPiBzaGlua3VcIDsKK+mFjeS5lyA+IGhhaWpvdVwgOwor5biC6JGsID4gc2hpc291XCA7Civnn5zmjIEgPiBreW91amlcIDsKK+i+suiAlSA+IG5vdWtvdVwgOwor5Y2R5L+XID4gaGl6b2t1XCA7CivljYPlhoYgPiBzZW4nJ2VuXCA7CivliJ3nlJ8gPiBzaG9zZWlcIDsKK+WFrOiqjSA+IGtvdW5pblwgOwor5beh6KGMID4ganVua291XCA7CivljLrlioMgPiBrdWtha3VcIDsKK+ato+aWhyA+IHNlaWJ1blwgOwor5YWs6KmmID4ga291c2hpXCA7CivmsJfkvq0gPiBraW1hbWFcIDsKK+atjOagvCA+IGtha2FrdVwgOwor5bm955WMID4geXV1a2FpXCA7CivmraPmlbAgPiBzZWlzdXVcIDsKK+W+jOWRsyA+IGF0b2FqaVwgOwor56Cy5aGUID4gaG91dG91XCA7CivnoZ3ljJYgPiBzaG91a2FcIDsKK+WFvOihjCA+IGtlbmtvdVwgOwor5by35bqmID4ga3lvdWRvXCA7CivlvavloZEgPiBjaG91c29cIDsKK+WNgeWFqCA+IGp1dXplblwgOwor5YWs6KixID4ga291a3lvXCA7CivnmbrotbAgPiBoYXNzb3VcIDsKK+WNl+S6rCA+IG5hbmtpblwgOwor55+l5oWuID4gY2hpcnlvXCA7CivmrbvmiYAgPiBzaGlzaG9cIDsKK+W5vOeUnyA+IHlvdXNlaVwgOwor6YGT5rCRID4gZG91bWluXCA7CivljYrlgKQgPiBoYW4nJ25lXCA7CivlhazoqIAgPiBrb3VnZW5cIDsKK+aCtuOAhSA+IG1vbm1vblwgOwor6L+U562UID4gaGVudG91XCA7CivojLboibIgPiBjaGFpcm9cIDsKK+aoqeisgCA+IGtlbmJvdVwgOwor6baP5YagID4gdG9zYWthXCA7Civnmb7osqggPiBoeWFra2FcIDsKK+W7u+aWhyA+IGthaWJ1blwgOwor5YuB5oKNID4ga2Vpa2FuXCA7CivlhYPou40gPiBnZW5ndW5cIDsKK+WNgeWEhCA+IGp1dW9rdVwgOwor5byV5omLID4gaGlraXRlXCA7CivlvaLlo7AgPiBrZWlzZWlcIDsKK+mtlOmanCA+IG1hc2hvdVwgOwor5YiH55uuID4ga2lyZW1lXCA7CivlvJXmiLggPiBoaWtpZG9cIDsKK+i7n+miqCA+IG5hbnB1dVwgOwor5bm455SaID4ga291amluXCA7CivlvoXlkb0gPiB0YWltZWlcIDsKK+ecvOeVjCA+IGdhbmthaVwgOwor6Iy26Ie8ID4gY2hhdXN1XCA7Civpgbjmm7ggPiBzZW5zaG9cIDsKK+iLseiosyA+IGVpeWFrdVwgOwor6Lui6Z+zID4gdGVuJydvblwgOwor5q6L5b2xID4gemFuJydlaVwgOwor5b6M5Y2KID4ga291aGFuXCA7CivoirPphocgPiBob3VqdW5cIDsKK+W5tOeUoyA+IG5lbnNhblwgOwor5bm055SfID4gbmVuc2VpXCA7CivljYPlgI0gPiBzZW5iYWlcIDsKK+W7g+auiyA+IGhhaXphblwgOwor6Imv6aasID4gcnlvdWJhXCA7CivlvpPliY0gPiBqdXV6ZW5cIDsKK+W5s+eUnyA+IGhlaXplaVwgOwor6YO35ZyfID4ga3lvdWRvXCA7CivpgYrmsJEgPiB5dXVtaW5cIDsKK+iRm+W4gyA+IGt1enVmdVwgOwor5buD5q2iID4gaGFpc2hpXCA7CivovKrou6IgPiByaW50ZW5cIDsKK+W4huiIuSA+IGhvYnVuZVwgOwor5Y2B5YCNID4ganV1YmFpXCA7Civnn6XmgKcgPiBjaGlzZWlcIDsKK+WJm+avmyA+IGdvdW1vdVwgOwor5q+O5ZueID4gbWFpa2FpXCA7Civmr43lm70gPiBib2tva3VcIDsKK+awkeS6uiA+IG1pbmppblwgOwor55yf56CCID4gbWFzYWdvXCA7CivliqnmiYsgPiBzdWtldGVcIDsKK+atouaPmiA+IHNoaXlvdVwgOwor5bm9546EID4geXV1Z2VuXCA7CivoirjpgZMgPiBnZWlkb3VcIDsKK+WFiOizoiA+IHNlbmtlblwgOwor5Yqg5oyvID4ga2FzaGluXCA7Civnm5vogIUgPiBqb3VzaGFcIDsKK+W9ueWToSA+IHlha3VpblwgOwor5b6u5LmzID4gYmlueXV1XCA7CivnnIznqI4gPiBrZW56ZWlcIDsKK+W4s+ewvyA+IGNob3Vib1wgOwor6YKq5b+DID4gamFzaGluXCA7CivlhKrpgYcgPiB5dXVndXVcIDsKK+efs+W3pSA+IHNla2tvdVwgOwor5YaF6JS1ID4gbmFpem91XCA7CivoiLnpvaIgPiBzZW5yZWlcIDsKK+awkeS4uyA+IG1pbnNodVwgOwor5Yid54qvID4gc2hvaGFuXCA7CivlvozliLsgPiBnb2tva3VcIDsKK+auv+WggiA+IGRlbmRvdVwgOwor5b6p5LqkID4gZnVra291XCA7CivlurbmsJEgPiBzaG9taW5cIDsKK+eerOaZgiA+IHNodW5qaVwgOwor5YSq6YCAID4geXV1dGFpXCA7Civlh7nnm64gPiBrdWJvbWVcIDsKK+W+k+WFhCA+IGp1dWtlaVwgOwor5Yqj5omNID4gcmVzc2FpXCA7CivljYPku60gPiBzZW5qaW5cIDsKK+WIhueVjCA+IGJ1bmthaVwgOwor5Y2D5LueID4gc2VuamluXCA7CivovKrot50gPiByaW5reW9cIDsKK+iJpummliA+IGthbnNodVwgOwor6L+U56S8ID4gaGVucmVpXCA7CivliIDnl5UgPiB0b3Vrb25cIDsKK+WIneeJiCA+IHNob2hhblwgOwor6bO05oi4ID4gbmFydXRvXCA7CivljYHku6MgPiBqdXVkYWlcIDsKK+WLmOWumiA+IGthbmpvdVwgOwor5YaF6JKZID4gbmFpbW91XCA7Civnm67ns54gPiBtZWt1c29cIDsKK+W6p+a1tCA+IHpheW9rdVwgOwor5qiZ6KqeID4gaHlvdWdvXCA7Civnmb3oqbEgPiBoYWt1d2FcIDsKK+WIpOeEtiA+IGhhbnplblwgOwor56CC5a2QID4gc3VuYWdvXCA7CivlvIHmiY0gPiBiZW5zYWlcIDsKK+aCoOOAhSA+IHl1dXl1dVwgOwor5qip6KGhID4ga2Vua291XCA7CivlirTlvbkgPiByb3Vla2lcIDsKK+iMl+iNtyA+IG15b3VnYVwgOwor55uu57GgID4gbWVrYWdvXCA7CivnnYDniakgPiBraW1vbm9cIDsKK+i7iumiqCA+IHNoYWZ1dVwgOwor5qiZ6KiYID4gaHlvdWtpXCA7CivprJrpq68gPiBzaHV6ZW5cIDsKK+WJjeautSA+IHplbmRhblwgOwor6YGu5patID4gc2hhZGFuXCA7CivojI7okYkgPiBrZWl5b3VcIDsKK+mBqeaZgiA+IHRla2lqaVwgOwor5bir56+EID4gc2hpaGFuXCA7CivojYnntJkgPiBzb3VzaGlcIDsKK+iQveW+jCA+IHJha3Vnb1wgOwor55uy566hID4gbW91a2FuXCA7CivljYHkuIkgPiBqdXVzYW5cIDsKK+WNgeS4hyA+IGp1dW1hblwgOwor5q+S5ZGzID4gZG9rdW1pXCA7CivokYnlt7sgPiBoYW1ha2lcIDsKK+W4guiChiA+IHNoaXNoaVwgOwor5by15a2QID4gaGFyaWtvXCA7Civnn7PlsYsgPiBpc2hpeWFcIDsKK+W+oeS4uyA+IG9udXNoaVwgOwor6YO95ZCIID4gdHN1Z291XCA7Civlubvnh4ggPiBnZW50b3VcIDsKK+W+oeS4rSA+IG9uY2h1dVwgOwor6Iqx6LyqID4gaGFuYXdhXCA7CivlvIHmhbYgPiBiZW5rZWlcIDsKK+WFjeiosSA+IG1lbmt5b1wgOwor5bmy54qvID4ga2FucGFuXCA7Civliarmnp0gPiBzZW5zaGlcIDsKK+iKsei7uCA+IGthamlrdVwgOwor5bm954S2ID4geXV1emVuXCA7Civlh7nnlLAgPiBrdWJvdGFcIDsKK+iLpuihtyA+IGt1Y2h1dVwgOwor55m66KaLID4gaGFra2VuXCA7CivlhY7op5IgPiB0b2tha3VcIDsKK+W9k+WcsCA+IHRvdWNoaVwgOwor5bmy54mpID4gaGltb25vXCA7CivlubPniYggPiBoZWloYW5cIDsKK+iLpuihjCA+IGt1Z3lvdVwgOwor6a+o6ISCID4gZ2Vpc2hpXCA7Civlho3oiIggPiBzYWlrb3VcIDsKK+iQveW6piA+IG9jaGlkb1wgOwor56Cy5Y+wID4gaG91ZGFpXCA7Civlho3oh6ggPiBzYWlyaW5cIDsKK+egsuWPoyA+IGhvdWtvdVwgOwor55yf55SwID4gc2FuYWRhXCA7CivliqnlvbkgPiBqb3lha3VcIDsKK+avjuWPtyA+IG1haWdvdVwgOwor5Yqj5oCnID4gcmVzc2VpXCA7Civnm67nrIogPiBtZXphcnVcIDsKK+atr+W9oiA+IGhhZ2F0YVwgOwor5by+5aWPID4gZGFuc291XCA7CivljIXlkKsgPiBob3VnYW5cIDsKK+W7g+agoSA+IGhhaWtvdVwgOwor5b6M5L6/ID4ga291YmluXCA7CivpgbjmjJkgPiBzZW5reW9cIDsKK+WMjeWMkCA+IGhvZnVrdVwgOwor6YOK5aSWID4ga291Z2FpXCA7CivlvLflp6YgPiBnb3VrYW5cIDsKK+eZveihoyA+IGJ5YWt1ZVwgOwor5YmW5qScID4gYm91a2VuXCA7Civlt6joiaYgPiBreW9rYW5cIDsKK+mAsuatqSA+IHNoaW5wb1wgOwor5Yeh55y8ID4gYm9uZ2FuXCA7Civlg6fploAgPiBzb3Vtb25cIDsKK+i/lOebgyA+IGhlbnBhaVwgOwor5bel6Iq4ID4ga291Z2VpXCA7Civou43pmoogPiBndW50YWlcIDsKK+i/keecjCA+IGtpbmtlblwgOwor6JC95beuID4gcmFrdXNhXCA7Civlubvnga8gPiBnZW50b3VcIDsKK+W3qOiIuSA+IGt5b3NlblwgOwor6bGX54q2ID4gcmluam91XCA7CivlhoXoiKogPiBuYWlrb3VcIDsKK+WFiOimiyA+IHNlbmtlblwgOwor6LuN6ZmjID4gZ3VuamluXCA7CivovKrorJsgPiByaW5rb3VcIDsKK+aui+WtmCA+IHphbnpvblwgOwor552A54GrID4gY2hha2thXCA7CivlubPnhLYgPiBoZWl6ZW5cIDsKK+WIh+eJhyA+IHNlcHBlblwgOwor55m66KGMID4gaGFra291XCA7CivljJflhYkgPiBob2trb3VcIDsKK+atpuW+syA+IGJ1dG9rdVwgOwor55yJ55uuID4gYmltb2t1XCA7CivnnIjnnIggPiB0YW50YW5cIDsKK+ecvOeCuSA+IGdhbnRlblwgOwor5YuV5aSpID4gZG91dGVuXCA7Civlip/lvrMgPiBrdWRva3VcIDsKK+W+jOS7uyA+IGtvdW5pblwgOwor5buD5p2QID4gaGFpemFpXCA7CivlhoXoh5MgPiBuYWl6b3VcIDsKK+W+jOS7tiA+IGtvdWtlblwgOwor6Imm6ZqKID4ga2FudGFpXCA7Civoi5foo5QgPiBieW91ZWlcIDsKK+WKoOW9uSA+IGtheWFrdVwgOwor6YG45omLID4gc2Vuc2h1XCA7Civlvozku6MgPiBrb3VkYWlcIDsKK+mxl+eJhyA+IHJpbnBlblwgOwor5byK5bqXID4gaGVpdGVuXCA7CivnnJ/nkIYgPiBzaGlucmlcIDsKK+WIg+eJqSA+IGhhbW9ub1wgOwor5YSV6LypID4gc2FpaGFpXCA7Civnmq7ohpwgPiBoaW1ha3VcIDsKK+W+jOS6uiA+IGtvdWppblwgOwor5b255YSAID4geWFrdWdpXCA7CivnnJ/nj6AgPiBzaGluanVcIDsKK+WQpuOAhSA+IGl5YWl5YVwgOwor5Ymq5patID4gc2VuZGFuXCA7CivlhazokawgPiBrb3Vzb3VcIDsKK+egguWgtCA+IHN1bmFiYVwgOwor5byB5b2TID4gYmVudG91XCA7CivlhoXohZQgPiBuYWlrb3VcIDsKK+mAk+a4myA+IHRlaWdlblwgOwor5beh6IiqID4ganVua291XCA7CivlvoDkv6EgPiBvdXNoaW5cIDsKK+i7jemWgCA+IGd1bm1vblwgOwor5bqn5qiZID4gemFoeW91XCA7CivmraPlvZMgPiBzZWl0b3VcIDsKK+iNkuelniA+IGtvdWppblwgOwor6a2a6YGTID4gZ3lvZG91XCA7CivmrbvlsY0gPiBzaGlzaGlcIDsKK+iJh+mmliA+IHRlaXNodVwgOwor6YKq5a6XID4gamFzaHV1XCA7CivmraPlvKYgPiBzZWlnZW5cIDsKK+iNieeovyA+IHNvdWtvdVwgOwor5YuH5ae/ID4geXV1c2hpXCA7Civlho3ogIMgPiBzYWlrb3VcIDsKK+WIhueFmSA+IGJ1bicnZW5cIDsKK+asoOacrCA+IGtlcHBvblwgOwor5b6M5LiWID4ga291c2VpXCA7CivlhYjooYwgPiBzZW5rb3VcIDsKK+i7n+mLvCA+IG5hbmtvdVwgOwor5q+O5YiGID4gbWFpZnVuXCA7CivliLbmraIgPiBzZWlzaGlcIDsKK+mDteWIuCA+IHl1dWtlblwgOwor6I2S56OvID4gYXJhaXNvXCA7Civou73ovKkgPiBrZWloYWlcIDsKK+iPr+aXjyA+IGthem9rdVwgOwor5b2i5YuiID4ga2Vpc2VpXCA7Civmp4vpgKAgPiBrb3V6b3VcIDsKK+iRl+WkpyA+IGNob2RhaVwgOwor5Ye654mpID4gZGVtb25vXCA7CivojIXoiI4gPiBib3VzaGFcIDsKK+W6p+alrSA+IHphZ3lvdVwgOwor5Yud5ZugID4gc2hvdWluXCA7Civnmb3ombkgPiBoYWtrb3VcIDsKK+earuiCiSA+IGhpbmlrdVwgOwor5YmN5qC9ID4gc2VuemFpXCA7Civpq5jpvaIgPiBrb3VyZWlcIDsKK+egsuWFtSA+IGhvdWhlaVwgOwor5YaF6IGeID4gbmFpYnVuXCA7CivliIbngrkgPiBidW50ZW5cIDsKK+atu+WuiCA+IHNoaXNodVwgOwor5bqV5q2iID4gdGVpc2hpXCA7CivlhbXoiLkgPiBoZWlzZW5cIDsKK+WIpeazlSA+IGJlcHBvdVwgOwor5Ye454mIID4gdG9wcGFuXCA7CivlhavojZIgPiBoYWtrb3VcIDsKK+mAmuawlyA+IHRzdXVraVwgOwor5Yqg5beeID4ga2FzaHV1XCA7CivmraPluL0gPiBzZWlib3VcIDsKK+WFteiIjiA+IGhlaXNoYVwgOwor5q2j5bi4ID4gc2Vpam91XCA7Civlu7vlu4ogPiBrYWlyb3VcIDsKK+mAn+atqSA+IHNva3Vob1wgOwor5bmy5r2fID4gaGlnYXRhXCA7Civou73ouoEgPiBrZWlzb3VcIDsKK+mBpeaLnSA+IHlvdWhhaVwgOwor6YGK5pifID4geXV1c2VpXCA7Civoirjoq4cgPiBnZWlkYW5cIDsKK+mBjuaWmSA+IGthcnlvdVwgOwor5YuH5aOuID4geXV1c291XCA7Civli4flo6sgPiB5dXVzaGlcIDsKK+ebo+emgSA+IGthbmtpblwgOwor5ben6ICFID4ga291c2hhXCA7CivlhKroq5ogPiB5dXVqb3VcIDsKK+mzqeW6pyA+IGhhdG96YVwgOwor55+t5aSnID4gdGFuZGFpXCA7Civlt6bnv7wgPiBzYXlva3VcIDsKK+iMtuethSA+IGNoYXNlblwgOwor5YmN5p2/ID4gbWFlaXRhXCA7Civlg7vpgaAgPiBoZWtpZW5cIDsKK+mrmOm6lyA+IGtvdXJhaVwgOwor6Lqr6aCDID4gbWlnb3JvXCA7Civnn7PloYogPiBzZWtrYWlcIDsKK+WJjeadoSA+IHplbmpvdVwgOwor5YWl6I23ID4gbnl1dWthXCA7CivltIfpq5ggPiBzdXVrb3VcIDsKK+WJsuaLoCA+IGtha2t5b1wgOwor5by35Zu6ID4ga3lvdWtvXCA7CivmrZPlvoUgPiBrYW50YWlcIDsKK+W5s+a6liA+IGhlaWp1blwgOwor6Ii56aaWID4gc2Vuc2h1XCA7CivlvJ/lprkgPiB0ZWltYWlcIDsKK+eXm+mjsiA+IHRzdXVpblwgOwor5Yq+5aWPID4gZ2Fpc291XCA7CivlubLmuoAgPiBrYW5tYW5cIDsKK+WJjeabuCA+IHplbnNob1wgOwor5bu25bm0ID4gZW4nJ25lblwgOwor55eF6a2UID4gYnlvdW1hXCA7CivluoPmsY4gPiBrb3VoYW5cIDsKK+WIqeassiA+IHJpeW9rdVwgOwor6YOt5YWsID4ga2Fra291XCA7CivlhazoiI4gPiBrb3VzaGFcIDsKK+W6reacqCA+IG5pd2FraVwgOwor5qW96Z+zID4gZ2FrdW9uXCA7CivmrovloYEgPiB6YW5ydWlcIDsKK+WFpeiLkSA+IG55dXVlblwgOwor6Iul6JGJID4gd2FrYWJhXCA7Civlh4bnnIsgPiBqdW5rYW5cIDsKK+WGjee3qCA+IHNhaWhlblwgOwor5YeN55ihID4gdG91c291XCA7CivluLjnlKggPiBqb3V5b3VcIDsKK+WLsuWKnyA+IGt1bmtvdVwgOwor5byK5a6zID4gaGVpZ2FpXCA7CivmraTlsrggPiBzaGlnYW5cIDsKK+WFqOiIuSA+IHplbnNlblwgOwor5bmz5rehID4gaGVpdGFuXCA7CivlhajoiKwgPiB6ZW5wYW5cIDsKK+WJjeaZryA+IHplbmtlaVwgOwor6YGg5oiaID4gZW5zZWtpXCA7CivmrrrliLAgPiBzYXR0b3VcIDsKK+WHuueBqyA+IHNodWtrYVwgOwor55uu55ubID4gbWVtb3JpXCA7Civoi6Xoj5wgPiB3YWthbmFcIDsKK+W4hueriyA+IGhvdGF0ZVwgOwor6YOh5Yi2ID4gZ3Vuc2VpXCA7Civpg7Xkvr8gPiB5dXViaW5cIDsKK+i7oumAgSA+IHRlbnNvdVwgOwor6YG35bu2ID4gc2VuJydlblwgOwor5q2m5bCGID4gYnVzaG91XCA7Civnm67nmb0gPiBtZWppcm9cIDsKK+W6tuaUvyA+IHNob3NlaVwgOwor55uq55uqID4gdG91dG91XCA7CivliJ3mrrUgPiBzaG9kYW5cIDsKK+W9k+WInSA+IHRvdXNob1wgOwor6Ii56aCtID4gc2VuZG91XCA7CivlvZPliIYgPiB0b3VidW5cIDsKK+mAseacnyA+IHNodXVraVwgOwor6YOO5ZCbID4gcm91a3VuXCA7CivlvJjlpKcgPiBrb3VkYWlcIDsKK+i/keeKtiA+IGtpbmpvdVwgOwor5beo57eoID4ga3lvaGVuXCA7CivmrovlnKggPiB6YW56b25cIDsKK+iKseimiyA+IGhhbmFtaVwgOwor5q+A5YK3ID4ga2lzaG91XCA7CivlhoXnt5ogPiBuYWlzZW5cIDsKK+W3p+e3uyA+IGtvdWNoaVwgOwor5qyg5pCNID4ga2Vzc29uXCA7CivlhoXnt5IgPiBuYWlzaG9cIDsKK+mBt+W5uCA+IHNlbmtvdVwgOwor5YiR5rOVID4ga2VpaG91XCA7Civps7TlrZAgPiBuYXJ1a29cIDsKK+WJjeaWhyA+IHplbmJ1blwgOwor6Ii36aCtID4gZ2VudG91XCA7CivmrablraYgPiBidWdha3VcIDsKK+mBo+aCtiA+IGtlbm1vblwgOwor5Ye65r2uID4gZGVzaGlvXCA7CivluK3nlLsgPiBzZWtpZ2FcIDsKK+mAhuavmyA+IHNha2FnZVwgOwor6YGp5b+cID4gdGVraW91XCA7CivprZrosp0gPiBneW9iYWlcIDsKK+iLpeiKvSA+IHdha2FtZVwgOwor6Lui6LyJID4gdGVuc2FpXCA7CivlhrfnnLwgPiByZWlnYW5cIDsKK+WLpOWLiSA+IGtpbmJlblwgOwor5Yqx5aOwID4gcmVpc2VpXCA7Civmq5vmr5QgPiBzaGlwcGlcIDsKK+mAgeawtCA+IHNvdXN1aVwgOwor5Yuk5Yq0ID4ga2lucm91XCA7CivluILnqI4gPiBzaGl6ZWlcIDsKK+egsuS4uCA+IGhvdWdhblwgOwor5q+N5LmzID4gYm9ueXV1XCA7Civou6Lou6IgPiB0ZW50ZW5cIDsKK+mBlOaIkCA+IHRhc3NlaVwgOwor5YaF57SbID4gbmFpZnVuXCA7Civli7/kvZMgPiBtb3R0YWlcIDsKK+WLmOWQiCA+IGthbmdvdVwgOwor6Iy256KXID4gY2hhd2FuXCA7Civou43phY0gPiBndW5iYWlcIDsKK+W5s+awtCA+IGhlaXN1aVwgOwor5byY5aCxID4ga291aG91XCA7Civps6XlsYsgPiB0b3JpeWFcIDsKK+asvuW+hSA+IGthbnRhaVwgOwor5bmz5rCRID4gaGVpbWluXCA7CivlubPmsI8gPiBoZWlzaGlcIDsKK+eZvuiKsSA+IGh5YWtrYVwgOwor6YCj5p6dID4gcmVuc2hpXCA7Civmr43kuIogPiBoYWhhdWVcIDsKK+WLleWQkSA+IGRvdWtvdVwgOwor55a+6aeGID4gc2hpa2t1XCA7Civlh73muKAgPiBrYW5reW9cIDsKK+i+sueUoyA+IG5vdXNhblwgOwor5YiR5q27ID4ga2Vpc2hpXCA7CivmpbzploAgPiByb3Vtb25cIDsKK+WFrOe9siA+IGtvdXNob1wgOwor556R5oOzID4gbWVpc291XCA7CivlubTmra8gPiBuZW5zaGlcIDsKK+mAoOaelyA+IHpvdXJpblwgOwor6Ii56ZqKID4gc2VudGFpXCA7CivpgaDlv4MgPiBlbnNoaW5cIDsKK+iLm+iLmyA+IGlyYWlyYVwgOwor5byx5ZGzID4geW93YW1pXCA7CivpganluqYgPiB0ZWtpZG9cIDsKK+WJiuaRqSA+IHNha3VtYVwgOwor6Lyq6JS1ID4gcmluem91XCA7CivlvL7lir4gPiBkYW5nYWlcIDsKK+mBlOaEjyA+IHRhdHN1aVwgOwor5bqV5pysID4gdGVpaG9uXCA7CivliLDmnaUgPiB0b3VyYWlcIDsKK+eZuuiJpiA+IGhha2thblwgOwor5YiO5q27ID4gZnVuc2hpXCA7Civou43pgZMgPiBndW5kb3VcIDsKK+WJteW7uiA+IHNvdWtlblwgOwor5YmN5o+QID4gemVudGVpXCA7CivmrbvlnLAgPiBzaGljaGlcIDsKK+WGrOedgCA+IGZ1eXVnaVwgOwor6YCg5pysID4gem91aG9uXCA7CivnnIvngrkgPiBrYW50ZW5cIDsKK+aso+aHkCA+IGtpbmthaVwgOwor6JaE44CFID4gdXN1dXN1XCA7CivliY3mjrIgPiB6ZW5rZWlcIDsKK+WGrOecoCA+IHRvdW1pblwgOwor55m66IiqID4gaGFra291XCA7Civli53liKkgPiBzaG91cmlcIDsKK+W3qOevhyA+IGt5b2hlblwgOwor55m76IeoID4gdG91cmluXCA7Civou4rpgZMgPiBzaGFkb3VcIDsKK+W8t+WMliA+IGt5b3VrYVwgOwor5q2j5aa7ID4gc2Vpc2FpXCA7Civovpvnm64gPiBrYXJhbWVcIDsKK+WLleWLoiA+IGRvdXNlaVwgOwor55e06YiNID4gY2hpZG9uXCA7CivokZflkI0gPiBjaG9tZWlcIDsKK+aui+WTgSA+IHphbnBpblwgOwor5bq45omNID4geW91c2FpXCA7Civli5XlirQgPiBkb3Vyb3VcIDsKK+i7kui8iiA+IGtlbmNoaVwgOwor5YWJ6IqSID4ga291Ym91XCA7CivluK/nirYgPiBvYmlqb3VcIDsKK+iLpuiCiSA+IGt1bmlrdVwgOwor6bOz5aOwID4gaG91c2VpXCA7CivpgKPmmJ8gPiByZW5zZWlcIDsKK+eah+iAgyA+IGtvdWtvdVwgOwor55uu546JID4gbWVkYW1hXCA7Civpq5jpqLAgPiBrb3V0b3VcIDsKK+iMtuebhiA+IGNoYWJvblwgOwor6YOO5YWaID4gcm91ZG91XCA7CivluIPnn7MgPiBmdXNla2lcIDsKK+iHpem+jSA+IGdhcnlvdVwgOwor5byB5aSpID4gYmVudGVuXCA7CivliIfmra8gPiBzZXNzaGlcIDsKK+i7veimliA+IGtlaXNoaVwgOwor55+t5ZG9ID4gdGFubWVpXCA7Civlt6PnrrEgPiBzdWJha29cIDsKK+auv+S4iiA+IHRlbmpvdVwgOwor6Ii36ZaAID4gZ2VubW9uXCA7CivpgbjlrpogPiBzZW50ZWlcIDsKK+WLh+WQjSA+IHl1dW1laVwgOwor5q2j5aSnID4gc2VpZGFpXCA7Civpq5Hpq48gPiBkb2t1cm9cIDsKK+WIqeacrSA+IHJpZnVkYVwgOwor6YG35a6uID4gc2VuZ3V1XCA7Civou6LosrggPiB0ZW50YWlcIDsKK+W5veajsiA+IHl1dXNlaVwgOwor5q2v5Z6iID4gc2hpa291XCA7CivlvIHlo6sgPiBiZW5zaGlcIDsKK+mBk+W/tSA+IGRvdW5lblwgOwor556z5a2UID4gZG91a291XCA7CivnnrPlrZAgPiBkb3VzaGlcIDsKK+atr+WeiyA+IGhhZ2F0YVwgOwor5b2T5LujID4gdG91ZGFpXCA7CivluormnLogPiBzaG91Z2lcIDsKK+WIpeadryA+IGJlcHBhaVwgOwor5YWI6IisID4gc2VucGFuXCA7CivlvZPku4ogPiB0b3Vrb25cIDsKK+WLpOWAuSA+IGtpbmtlblwgOwor5Ymb5oOFID4gZ291am91XCA7CivlvZPkurogPiB0b3VuaW5cIDsKK+mBteWuiCA+IGp1bnNodVwgOwor6LuK6LyqID4gc2hhcmluXCA7CivliJ3moKEgPiBzaG9rb3VcIDsKK+i7jei7iiA+IGd1bnNoYVwgOwor5q2M5a2mID4ga2FnYWt1XCA7CivpgKPmlZcgPiByZW5wYWlcIDsKK+WFqOe3qCA+IHplbnBlblwgOwor5bqV5pWwID4gdGVpc3V1XCA7Civlh7rmsLQgPiBkZW1penVcIDsKK+WFqOe3miA+IHplbnNlblwgOwor6Lu96KOFID4ga2Vpc291XCA7Civouqvpiq0gPiBtaXplbmlcIDsKK+iJpui8iSA+IGthbnNhaVwgOwor5YKN6aGMID4gYm91ZGFpXCA7CivpgZXlvI8gPiBpc2hpa2lcIDsKK+W6g+adsSA+IGthbnRvblwgOwor5biD55uuID4gbnVub21lXCA7Civlhbjnr4QgPiB0ZW5wYW5cIDsKK+W9k+S4uyA+IHRvdXNodVwgOwor55eF6ZmiID4gYnlvdWluXCA7CivpgIHmpJwgPiBzb3VrZW5cIDsKK+WzsOmgrSA+IGhvdXRvdVwgOwor55+l5ZG9ID4gY2hpbWVpXCA7Civlub3moJYgPiB5dXVzZWlcIDsKK+ebl+eUqCA+IHRvdXlvdVwgOwor5Ymb5oCnID4gZ291c2VpXCA7CivmrKPlv6sgPiBraW5rYWlcIDsKK+W9k+S4liA+IHRvdXNlaVwgOwor5YWr57SYID4gaGFra291XCA7Civli4nlirEgPiBiZW5yZWlcIDsKK+mAn+aUuyA+IHNva2tvdVwgOwor5Ye65q67ID4gZGVnYXJhXCA7CivlhY7ogokgPiB0b25pa3VcIDsKK+ecoOawlyA+IG5lbXVrZVwgOwor6Iy255WqID4gY2hhYmFuXCA7CivnnJ/msLQgPiBtYW1penVcIDsKK+W3pueoiyA+IHNhaG9kb1wgOwor5YiG5qipID4gYnVua2VuXCA7Civpq5jpoqggPiBrb3VmdXVcIDsKK+efpeWQjSA+IGNoaW1laVwgOwor5bel56iLID4ga291dGVpXCA7Civlub3mnpcgPiB5dXVyaW5cIDsKK+i/lOa4iCA+IGhlbnNhaVwgOwor5YWo57SZID4gemVuc2hpXCA7Civlhqznk5wgPiB0b3VnYW5cIDsKK+auiuWLsiA+IHNodWt1blwgOwor5YWJ6IOMID4ga291aGFpXCA7Civou4zot6EgPiBraXNla2lcIDsKK+W8seWGoCA+IGpha2thblwgOwor5by+5YCJID4gZGFuc291XCA7Civnn6Xlj4sgPiBjaGl5dXVcIDsKK+WKoOWcpyA+IGthYXRzdVwgOwor6Iy255O2ID4gY2hhYmluXCA7CivpgKPmkLogPiByZW5rZWlcIDsKK+WIneabtCA+IHNob2tvdVwgOwor5Yip5pW1ID4gcml0ZWtpXCA7CivliKTmmI4gPiBoYW5tZWlcIDsKK+atu+WRvSA+IHNoaW1laVwgOwor6YGp5a6cID4gdGVraWdpXCA7Civmrorlip8gPiBzaHVrb3VcIDsKK+W8peWLkiA+IG1pcm9rdVwgOwor5Yal55WMID4gbWVpa2FpXCA7Civoiq3olYkgPiBiYXNob3VcIDsKK+mBi+W8kyA+IHVua3l1dVwgOwor5Ymj5bivID4ga2VudGFpXCA7CivpgIDmoKEgPiB0YWlrb3VcIDsKK+mrmOmfsyA+IHRha2FuZVwgOwor6Imv6LKoID4gcnlvdWthXCA7CivlhbXnq68gPiBoZWl0YW5cIDsKK+efreWJoyA+IHRhbmtlblwgOwor5YWI6IGWID4gc2Vuc2VpXCA7CivlhajnsbMgPiB6ZW5iZWlcIDsKK+ebsueCuSA+IG1vdXRlblwgOwor5Yik5patID4gaGFuZGFuXCA7CivlhbXnq5kgPiBoZWl0YW5cIDsKK+atk+WjsCA+IGthbnNlaVwgOwor5qy95a6aID4ga2ludGVpXCA7CivpgI/mmI4gPiB0b3VtZWlcIDsKK+mHjeOAhSA+IGp1dWp1dVwgOwor6Luf6KuWID4gbmFucm9uXCA7CivpgrjlhoUgPiB0ZWluYWlcIDsKK+eah+e1sSA+IGtvdXRvdVwgOwor6L+R5rW3ID4ga2lua2FpXCA7CivlhY3nvaogPiBtZW56YWlcIDsKK+W7g+W4nSA+IGhhaXRlaVwgOwor5YWI6ICDID4gc2Vua291XCA7Civnn63liIAgPiB0YW50b3VcIDsKK+WLmOS+iyA+IGthbnJlaVwgOwor5YWs566XID4ga291c2FuXCA7CivoiIzpoK0gPiB6ZXR0b3VcIDsKK+mBuOWkliA+IHNlbmdhaVwgOwor5q275Y67ID4gc2hpa3lvXCA7Civou43os4cgPiBndW5zaGlcIDsKK+asp+W3niA+IG91c2h1dVwgOwor5byV5ZCIID4gaGlraWFpXCA7Civlub3mma8gPiB5dXVrZWlcIDsKK+mBiuW6lSA+IHl1dXRlaVwgOwor55+l5YuHID4gY2hpeXV1XCA7Civnn6nliYcgPiBrdXNva3VcIDsKK+W3oeekvCA+IGp1bnJlaVwgOwor6YG15aWJID4ganVucG91XCA7CivlubTmnaUgPiBuZW5yYWlcIDsKK+WIneaXrCA+IHNob2p1blwgOwor5bmz5p2/ID4gaGVpYmFuXCA7CivlhIDooaggPiBnaWh5b3VcIDsKK+atjuWjsCA+IHRhbnNlaVwgOwor5YWo56+HID4gemVucGVuXCA7CivlhbXnqK4gPiBoZWlzaHVcIDsKK+W3qOegsiA+IGt5b2hvdVwgOwor55qG57SNID4ga2Fpbm91XCA7Civoh7Ppq5ggPiBzaGlrb3VcIDsKK+W5veaYjiA+IHl1dW1laVwgOwor5q6L5YWaID4gemFudG91XCA7CivmrKHluK0gPiBqaXNla2lcIDsKK+atjOWjsCA+IHV0YWdvZVwgOwor5qih57SiID4gbW9zYWt1XCA7CivmrovlhYkgPiB6YW5rb3VcIDsKK+WLleS9kyA+IGRvdXRhaVwgOwor5YWD6ICBID4gZ2Vucm91XCA7Civprq7ntIUgPiBzZW5rb3VcIDsKK+WJr+WumCA+IGZ1a2thblwgOwor6Iqz6I2JID4gaG91c291XCA7CivnnJ/mqKogPiBtYXlva29cIDsKK+WFq+erryA+IGhhdHRhblwgOwor5ben55+lID4ga291Y2hpXCA7CivliIbmoKEgPiBidW5rb3VcIDsKK+mAo+aKlSA+IHJlbnRvdVwgOwor5YW456S8ID4gdGVucmVpXCA7Civnm5fniq8gPiB0b3VoYW5cIDsKK+W8vuS4uCA+IGRhbmdhblwgOwor5q2M5aKDID4ga2FreW91XCA7CivlhpnnlJ8gPiBzaGFzZWlcIDsKK+aui+WDjyA+IHphbnpvdVwgOwor5Yq05YuVID4gcm91ZG91XCA7Civmranlk6ggPiBob3Nob3VcIDsKK+ecjOawkSA+IGtlbm1pblwgOwor5YuH5YGlID4geXV1a2VuXCA7CivlhpfnlKggPiBqb3V5b3VcIDsKK+WJquWumiA+IHNlbnRlaVwgOwor5Ymj5bGxID4ga2VuemFuXCA7CivlirTlip8gPiByb3Vrb3VcIDsKK+mAo+aIpiA+IHJlbnNlblwgOwor5Ya354S2ID4gcmVpemVuXCA7CivnoILkuJggPiBzYWt5dXVcIDsKK+WLleS5sSA+IGRvdXJhblwgOwor5Yi25oayID4gc2Vpa2VuXCA7CivlvJPli6IgPiB5dW56ZWlcIDsKK+WGheecgSA+IG5haXNlaVwgOwor5buD5bGxID4gaGFpemFuXCA7CivliY3luq0gPiB6ZW50ZWlcIDsKK+W5s+aYjiA+IGhlaW1laVwgOwor5q275YiRID4gc2hpa2VpXCA7CivlibXlp4sgPiBzb3VzaGlcIDsKK+ecieavmyA+IG1heXVnZVwgOwor6YCg5oiQID4gem91c2VpXCA7Civlt6jnm5cgPiBreW90b3VcIDsKK+W7g+WxiyA+IGhhaW9rdVwgOwor5YiH5pu/ID4gc2V0dGFpXCA7Civlhaznp4EgPiBrb3VzaGlcIDsKK+atu+WHpiA+IHNoaXNob1wgOwor6YCD5pWjID4gdG91c2FuXCA7Civouqvou70gPiBtaWdhcnVcIDsKK+WFiee3miA+IGtvdXNlblwgOwor5buj5aCxID4ga291aG91XCA7Civnn6LlhYggPiB5YXNha2lcIDsKK+W5s+aWuSA+IGhlaWhvdVwgOwor6LuN6KuHID4gZ3VuZGFuXCA7Civoj6/lrqIgPiBrYWtha3VcIDsKK+mBjuWwkSA+IGthc2hvdVwgOwor6YGO5bCPID4ga2FzaG91XCA7CivlubTmlbAgPiBuZW5zdXVcIDsKK+ato+WRsyA+IHNob3VtaVwgOwor6YCA5pWjID4gdGFpc2FuXCA7CivlhaznpL4gPiBrb3VzaGFcIDsKK+iKuOiDvSA+IGdlaW5vdVwgOwor6YCj5oOzID4gcmVuc291XCA7Civlho3nlJ8gPiBzYWlzZWlcIDsKK+aui+S9mSA+IHphbicneW9cIDsKK+mBjuWuoiA+IGtha2FrdVwgOwor6YGj5aSWID4ga2VuZ2FpXCA7CivlhqDnirYgPiBrYW5qb3VcIDsKK+asoeWwhiA+IGppc2hvdVwgOwor5byB5Y+jID4gYmVua291XCA7CivlubLmlK8gPiBrYW5zaGlcIDsKK+eak+ekrCA+IGtvdWJhblwgOwor5q2j5Y+3ID4gc2VpZ291XCA7CivmraPlj7IgPiBzZWlzaGlcIDsKK+iLpueskSA+IGt1c2hvdVwgOwor5YWo56S+ID4gemVuc2hhXCA7CivliIbmmI4gPiBidW5tZWlcIDsKK+W8k+WFtyA+IGt5dXVndVwgOwor6YCy5bqmID4gc2hpbmRvXCA7CivnmYzohasgPiBnYW5zaHVcIDsKK+WKo+WLoiA+IHJlc3NlaVwgOwor5Yq05YONID4gcm91ZG91XCA7Civnn67kurogPiB3YWlqaW5cIDsKK+W7u+WQkSA+IGthaWtvdVwgOwor6I2S5rW3ID4gYXJhdW1pXCA7Civps7Tli5UgPiBtZWlkb3VcIDsKK+WGheeVjCA+IG5haWthaVwgOwor5bqn5bitID4gemFzZWtpXCA7CivmraPljZcgPiBzZWluYW5cIDsKK+iKuOiAhSA+IGdlaXNoYVwgOwor6YGK5a2QID4geXV1c2hpXCA7CivmraPljYggPiBzaG91Z29cIDsKK+WGheeUqCA+IG5haXlvdVwgOwor5Yil5oeHID4gYmVra29uXCA7CivliLblvqEgPiBzZWlneW9cIDsKK+WIhuaVsCA+IGJ1bnN1dVwgOwor5YiG5pWjID4gYnVuc2FuXCA7CivlhKrogIUgPiB5dXVzaGFcIDsKK+eZu+esrCA+IHRvdWRhaVwgOwor5q2v5YagID4gc2hpa2FuXCA7Civlho3nj74gPiBzYWlnZW5cIDsKK+W6t+WvpyA+IGtvdW5laVwgOwor5YWs55+lID4ga291Y2hpXCA7Civlip/lirQgPiBrb3Vyb3VcIDsKK+ashOW5siA+IHJhbmthblwgOwor5YiX5oyZID4gcmVra3lvXCA7CivliY3lsbEgPiB6ZW56YW5cIDsKK+W8peS5hSA+IGJpa3l1dVwgOwor55m656uvID4gaG90dGFuXCA7CivliJ3miKYgPiBzaG9zZW5cIDsKK+i7jeijhSA+IGd1bnNvdVwgOwor5Yil5oSPID4gYmV0c3VpXCA7Civlh7rmmYIgPiBkZWRva2lcIDsKK+mAo+W8viA+IHJlbmRhblwgOwor5YWo55+lID4gemVuY2hpXCA7Civnn6XkurogPiBjaGlqaW5cIDsKK+iMq+eEtiA+IGJvdXplblwgOwor6LyU57+8ID4gaG95b2t1XCA7CivovrLms5UgPiBub3Vob3VcIDsKK+atjOWUsSA+IGthc2hvdVwgOwor5Yip5oGvID4gcmlzb2t1XCA7CivlupzluoEgPiBmdWNob3VcIDsKK+ecn+aalyA+IG1ha3VyYVwgOwor5bq25a2QID4gc2hvc2hpXCA7Civoj6/lpaIgPiBreWFzaGFcIDsKK+iHs+mboyA+IHNoaW5hblwgOwor5YeN5q27ID4gdG91c2hpXCA7CivlirTkvb8gPiByb3VzaGlcIDsKK+W7ieWjsiA+IHJlbmJhaVwgOwor6YCg5b2iID4gem91a2VpXCA7CivmrbvkvZMgPiBzaGl0YWlcIDsKK+mAouW8lSA+IGFpYmlraVwgOwor5YGc6aCTID4gdGVpdG9uXCA7Civnmb7np5EgPiBoeWFra2FcIDsKK+mBuuWRiiA+IHl1aWdvdVwgOwor5Ye95pWwID4ga2Fuc3V1XCA7Civlhrfmt6EgPiByZWl0YW5cIDsKK+mAhuaJiyA+IHNha2F0ZVwgOwor55yf5pi8ID4gbWFoaXJ1XCA7Civlh7rmlrkgPiBkZWthdGFcIDsKK+mBk+WjqyA+IGRvdXNoaVwgOwor5YmN5a6YID4gemVua2FuXCA7CivliaPlo6sgPiBrZW5zaGlcIDsKK+WFrOebiiA+IGtvdWVraVwgOwor6Ii56LevID4gZnVuYWppXCA7CivpgqbkurogPiBob3VqaW5cIDsKK+eWjumalCA+IHNva2FrdVwgOwor5Yi25bi9ID4gc2VpYm91XCA7CivliqDlhaUgPiBrYW55dXVcIDsKK+WGjeeKryA+IHNhaWhhblwgOwor5YWI56uvID4gc2VudGFuXCA7CivovrLmsJEgPiBub3VtaW5cIDsKK+mBoOWbvSA+IG9uZ29rdVwgOwor5YW355SzID4gZ3VzaGluXCA7CivojbfmnK0gPiBuaWZ1ZGFcIDsKK+W4reasoSA+IHNla2lqaVwgOwor5Yip5b6XID4gcml0b2t1XCA7Civlhajnm7IgPiB6ZW5tb3VcIDsKK+atu+S6oSA+IHNoaWJvdVwgOwor5beo542jID4ga3lvanV1XCA7CivlsrjpoK0gPiBnYW50b3VcIDsKK+iQveS8jSA+IHJha3Vnb1wgOwor5q2j5YW1ID4gc2VpaGVpXCA7Civlhajnm5sgPiB6ZW5zZWlcIDsKK+i5iOmetCA+IHRhdGFyYVwgOwor6YCj5bivID4gcmVudGFpXCA7CivpgJ/luqYgPiBzb2t1ZG9cIDsKK+WIsOW6lSA+IHRvdXRlaVwgOwor5YWN56iOID4gbWVuemVpXCA7Civlho3niYggPiBzYWloYW5cIDsKK+WJr+WboCA+IGZ1a3VpblwgOwor55m656aBID4gaGFra2luXCA7CivoiIzpi5IgPiB6ZXBwb3VcIDsKK+mAoOW5oyA+IHpvdWhlaVwgOwor6YGT5aC0ID4gZG91am91XCA7CivmqJnnpLogPiBoeW91amlcIDsKK+W7g+WinyA+IGhhaWt5b1wgOwor5bmz5omLID4gaGlyYXRlXCA7Civov5Tmna8gPiBoZW5wYWlcIDsKK+WBnOmbuyA+IHRlaWRlblwgOwor5YGl6ZeYID4ga2VudG91XCA7CivoiJ/pgYsgPiBzaHV1dW5cIDsKK+aoquebriA+IHlva29tZVwgOwor5bmz5oiQID4gaGVpc2VpXCA7Civlh7Hml4sgPiBnYWlzZW5cIDsKK+WOreOAhSA+IGl5YWl5YVwgOwor55uu5qyhID4gbW9rdWppXCA7Civlhrfms4kgPiByZWlzZW5cIDsKK+WFqOeZkiA+IHplbicneXVcIDsKK+eZveejgSA+IGhha3VqaVwgOwor6L+U5pysID4gaGVucG9uXCA7CivliKXlvaIgPiBiZWtrZWlcIDsKK+W5u+aDsyA+IGdlbnNvdVwgOwor55yL5p2/ID4ga2FuYmFuXCA7Civlho3nh4MgPiBzYWluZW5cIDsKK+edgOaEjyA+IGNoYWt1aVwgOwor5YaF54q2ID4gbmFpam91XCA7CivliKXlvZMgPiBiZXR0b3VcIDsKK+i/keadsSA+IGtpbnRvdVwgOwor5bu65YW3ID4gdGF0ZWd1XCA7Civov5HmnaUgPiBraW5yYWlcIDsKK+i/lOabuCA+IGhlbnNob1wgOwor5bqP5bmVID4gam9tYWt1XCA7CivlgbTpjpYgPiBzb2t1c2FcIDsKK+amguirliA+IGdhaXJvblwgOwor55eF6LqvID4gYnlvdWt1XCA7Civmpb3orZwgPiBnYWt1ZnVcIDsKK+WGt+axlyA+IHJlaWthblwgOwor5YiG5ouFID4gYnVudGFuXCA7CivovqPmsrkgPiByYXpleXVcIDsKK+mrmOmFjSA+IGtvdWhhaVwgOwor5bu35YaFID4gdGVpbmFpXCA7CivliofljJYgPiBnZWtpa2FcIDsKK+WGt+awtCA+IHJlaXN1aVwgOwor5Yid5b+XID4gc2hvc2hpXCA7CivlhaznlLAgPiBrb3VkZW5cIDsKK+mChOWFgyA+IGthbmdlblwgOwor6YCV5bqtID4ga2VpdGVpXCA7CivliKnluYUgPiByaWhhYmFcIDsKK+WFrOeUqCA+IGtvdXlvdVwgOwor5Yeh5pu4ID4gYm9uc2hvXCA7CivpgKPls7AgPiByZW5wb3VcIDsKK+WKh+WLmSA+IGdla2ltdVwgOwor5beh54upID4ganVuc2h1XCA7CivliIfmiYsgPiBraXJldGVcIDsKK+W5u+aAqiA+IGdlbmthaVwgOwor6L+95oWVID4gdHN1aWJvXCA7CivmrabkvqAgPiBidWt5b3VcIDsKK+eZuuegsiA+IGhhcHBvdVwgOwor5buD5Z2RID4gaGFpa291XCA7CivouqvoqLEgPiBtaW1vdG9cIDsKK+mBqeWQpiA+IHRla2loaVwgOwor5Ye65o6bID4gZGVnYWtlXCA7Civlhobnhp8gPiBlbmp1a3VcIDsKK+WFqOeUsiA+IHplbmtvdVwgOwor6L+R5pmvID4ga2lua2VpXCA7CivmrYzliocgPiBrYWdla2lcIDsKK+mAo+WxsSA+IHJlbnphblwgOwor6auY6YKBID4ga291bWFpXCA7CivliY3lpY8gPiB6ZW5zb3VcIDsKK+W6l+WxiyA+IG1pc2V5YVwgOwor5Yem5pa5ID4gc2hvaG91XCA7CivoiKrotbAgPiBrb3Vzb3VcIDsKK+WHpuaWrSA+IHNob2RhblwgOwor6YGN5ZyoID4gaGVuemFpXCA7CivmraPkvb8gPiBzZWlzaGlcIDsKK+WIu+WtlyA+IGtva3VqaVwgOwor5Yil5be7ID4gYmVra2FuXCA7CivlhpfmvKsgPiBqb3VtYW5cIDsKK+amguimsyA+IGdhaWthblwgOwor5YmN5aScID4gemVuJyd5YVwgOwor5bu65YCkID4gdGF0ZW5lXCA7CivlubvlvbEgPiBnZW4nJ2VpXCA7CivpgKPlsIQgPiByZW5zaGFcIDsKK+WJjeWjsiA+IG1hZXVyaVwgOwor5qaC6KaBID4gZ2FpeW91XCA7Civlgo3ovKkgPiBob3ViYWlcIDsKK+eZveeciSA+IGhha3ViaVwgOwor5bOh6YOoID4ga3lvdWJ1XCA7CivliLblrpogPiBzZWl0ZWlcIDsKK+ato+S8nSA+IHNlaWRlblwgOwor6Lu9572qID4ga2VpemFpXCA7CivnlarpoK0gPiBiYW50b3VcIDsKK+WIneW5tCA+IHNob25lblwgOwor6L+w5oeQID4ganVra2FpXCA7CivovpvmsJcgPiBzaGlua2lcIDsKK+alveimsyA+IHJha2thblwgOwor5Ymy5ZCIID4gd2FyaWFpXCA7CivmpbzoprMgPiByb3VrYW5cIDsKK+iLpueXmyA+IGt1dHN1dVwgOwor5biM5rGCID4ga2lreXV1XCA7Civlub7lubQgPiBpa3VuZW5cIDsKK+WGrOavmyA+IGZ1eXVnZVwgOwor5YWI55+lID4gc2VuY2hpXCA7CivlupflrZAgPiB0YW5ha29cIDsKK+mtmue+pCA+IGd5b2d1blwgOwor6YGh5Y+KID4gc29reXV1XCA7CivpgIDlvbkgPiB0YWlla2lcIDsKK+W5vOW5tCA+IHlvdW5lblwgOwor6L+C5puyID4gdWt5b2t1XCA7CivlhKrnrYkgPiB5dXV0b3VcIDsKK+i7jeiRrCA+IGd1bnNvdVwgOwor5Ymy5Y2wID4gd2FyaWluXCA7Civoj6/llYYgPiBrYXNob3VcIDsKK+WIqeWwvyA+IHJpbnlvdVwgOwor5YW154e5ID4gaGVpc2VuXCA7Civlu7bkvLggPiBlbnNoaW5cIDsKK+W6iuWxiyA+IHRva295YVwgOwor6YCA5bu3ID4gdGFpdGVpXCA7CivmqKnnj74gPiBnb25nZW5cIDsKK+WBtOmDqCA+IHNva3VidVwgOwor5biw5pydID4ga2ljaG91XCA7CivluLDmnI0gPiBraWZ1a3VcIDsKK+ecvOW6lSA+IGdhbnRlaVwgOwor6YCA5buDID4gdGFpaGFpXCA7CivliKXlsYUgPiBiZWtreW9cIDsKK+eVmemjsiA+IHJ5dXVpblwgOwor5Yiq5a6aID4gc2FudGVpXCA7Civpga7lhYkgPiBzaGFrb3VcIDsKK+WJjeWdiiA+IHplbmJvdVwgOwor6Luf6IaPID4gbmFua291XCA7CivmrITlpJYgPiByYW5nYWlcIDsKK+WGoOawtCA+IGthbnN1aVwgOwor5Yil5bCBID4gYmVwcHV1XCA7CivnnLzluK8gPiBnYW50YWlcIDsKK+W5s+W5tCA+IGhlaW5lblwgOwor5bmz5bmzID4gaGVpaGVpXCA7Civoh4bpnaIgPiBva3VtZW5cIDsKK+W7g+WTgSA+IGhhaWhpblwgOwor6L+35b2pID4gbWVpc2FpXCA7CivluILmsJEgPiBzaGltaW5cIDsKK+W6hOWxiyA+IHNob3V5YVwgOwor6Imy6ImyID4gaXJvaXJvXCA7Civpq5jouI8gPiBrb3V0b3VcIDsKK+WGoOavmyA+IGthbm1vdVwgOwor5beo5ryiID4ga3lva2FuXCA7CivluLjmlbAgPiBqb3VzdXVcIDsKK+WJteWIiiA+IHNvdWthblwgOwor5YWI55m7ID4gc2VudG91XCA7CivliY3lm54gPiB6ZW5rYWlcIDsKK+i+suaelyA+IG5vdXJpblwgOwor5bmz5bi4ID4gaGVpam91XCA7Civoi5TnmawgPiB0YWlzZW5cIDsKK+eZsueZhyA+IHRlbmthblwgOwor6I2J5qC5ID4gc291a29uXCA7CivnmbvnlKggPiB0b3V5b3VcIDsKK+mrmOi3nSA+IGtvdWt5b1wgOwor5Yik5a6aID4gaGFudGVpXCA7CivliKTlrpggPiBoYW5nYW5cIDsKK+W3neeArCA+IGthd2FzZVwgOwor5bu35LiBID4gdGVpdGVpXCA7CivnmbrnlJ8gPiBoYXNzZWlcIDsKK+i+suadkSA+IG5vdXNvblwgOwor5YG06L+RID4gc29ra2luXCA7Civnm6TmoLkgPiBiYW5rb25cIDsKK+iOmuW4rSA+IGVuc2VraVwgOwor55yf5oSPID4gc2hpbicnaVwgOwor6a2C6IOGID4ga29udGFuXCA7CivliJfls7YgPiByZXR0b3VcIDsKK+i9n+eEtiA+IGdvdXplblwgOwor5buD5ZCIID4gaGFpZ291XCA7CivliKXlrKogPiBiZXBwaW5cIDsKK+asoOWTgSA+IGtlcHBpblwgOwor6a2a57ayID4gZ3lvbW91XCA7CivpgKPlpY8gPiByZW5zb3VcIDsKK+WGhea5ryA+IHVjaGl5dVwgOwor55Sf6bqpID4gbmFtYWZ1XCA7Civlub3lsYUgPiB5dXVreW9cIDsKK+mAo+WknCA+IHJlbicneWFcIDsKK+W3oea8lCA+IGp1bicnZW5cIDsKK+WIhuW6lyA+IGJ1bnRlblwgOwor5q2M5LyaID4gdXRha2FpXCA7CivlhoXmuK8gPiBuYWlrb3VcIDsKK+WFrOeEtiA+IGtvdXplblwgOwor5be75q+bID4gbWFraWdlXCA7Civou43oiaYgPiBndW5rYW5cIDsKK+mAo+WjsCA+IHJlbmpvdVwgOwor6Ieq6YeNID4gamljaG91XCA7CivlhoXmuIggPiBuYWlzYWlcIDsKK+WFiOeVqiA+IHNlbmJhblwgOwor6YGK5ZCfID4geXV1Z2luXCA7CivpgYrlkJsgPiB5dXVrdW5cIDsKK+i7jeiIuSA+IGd1bnNlblwgOwor6I+v5YyXID4ga2Fob2t1XCA7CivojYnmnKwgPiBzb3Vob25cIDsKK+ebsuaWrSA+IG1vdWRhblwgOwor552A5bC6ID4ga2lqYWt1XCA7CivoiajoiZ8gPiBtb3Vkb3VcIDsKK+i/lOaIuyA+IGhlbnJlaVwgOwor5YWI55SfID4gc2Vuc2VpXCA7CivliarliIAgPiBzZW50b3VcIDsKK+WBvei2syA+IGdpc29rdVwgOwor6I2J5pu4ID4gc291c2hvXCA7CivlhajnhLYgPiB6ZW56ZW5cIDsKK+WIl+WvpyA+IHJlZW5pblwgOwor6a2a57K+ID4gZ3lvc2VpXCA7CivoiaboiYcgPiBrYW50ZWlcIDsKK+iJpuiIuSA+IGthbnNlblwgOwor5YaF5rW3ID4gbmFpa2FpXCA7Civnm67mlrkgPiBtZWthdGFcIDsKK+WHoeaJjSA+IGJvbnNhaVwgOwor5Yeh5omLID4gYm9uc2h1XCA7CivlhYnnkrAgPiBrb3VrYW5cIDsKK+WFheeUqCA+IGp1dXlvdVwgOwor6Lyd55+zID4ga2lzZWtpXCA7CivprZrnsokgPiBneW9mdW5cIDsKK+WHoeaIpiA+IGJvbnNlblwgOwor5bq45ZCbID4geW91a3VuXCA7CivlgKTpoIMgPiBuZWdvcm9cIDsKK+WHtuW+kiA+IGt5b3V0b1wgOwor55aO6YCaID4gc290c3V1XCA7Civoh7Pov5EgPiBzaGlraW5cIDsKK+W5ouW5oSA+IGRvdWJhblwgOwor5bmz5bGLID4gaGlyYXlhXCA7CivpgYXlj4IgPiBjaGlzYW5cIDsKK+mAhuWtkCA+IHNha2Fnb1wgOwor55m954uQID4gYnlha2tvXCA7CivlgKTpnpggPiBuZXpheWFcIDsKK+WHuuW6qyA+IHNodWtrb1wgOwor6L+95bC+ID4gdHN1aWJpXCA7CivliIDlt6UgPiB0b3Vrb3VcIDsKK+WHuuW6nCA+IHNodXBwdVwgOwor5Yid5amaID4gc2hva29uXCA7Civlh7rlupcgPiBkZW1pc2VcIDsKK+WGheayuyA+IG5haWNoaVwgOwor6L6y5pS/ID4gbm91c2VpXCA7CivliZvli4cgPiBnb3V5dXVcIDsKK+asoOWLpCA+IGtla2tpblwgOwor5YWx5ryUID4ga3lvdWVuXCA7Civoh6rpgakgPiBqaXRla2lcIDsKK+WHoeaFriA+IGJvbnJ5b1wgOwor5buD5YiKID4gaGFpa2FuXCA7CivpgIDlrpggPiB0YWlrYW5cIDsKK+ecvOWtlCA+IGdhbmtvdVwgOwor55WM6Z2iID4ga2FpbWVuXCA7Civlt6Xms5UgPiBrb3Vob3VcIDsKK+mBr+S4liA+IHRvbnNlaVwgOwor5bmz5a6aID4gaGVpdGVpXCA7Civoj6/lhpEgPiBrYWNodXVcIDsKK+i8queVqiA+IHJpbmJhblwgOwor5bmy5a6zID4ga2FuZ2FpXCA7Civlh7rluKsgPiBzdWlzaGlcIDsKK+mAoOWeiyA+IHpvdWtlaVwgOwor6Iiq6KGMID4ga291a291XCA7CivliY3lkI0gPiB6ZW5tZWlcIDsKK+WHveW2uiA+IGthbnJlaVwgOwor6YGT5YWDID4gZG91Z2VuXCA7CivnmYznoJQgPiBnYW5rZW5cIDsKK+WJjeWPtyA+IHplbmdvdVwgOwor5Yik5aOrID4gaGFuc2hpXCA7CivliY3lj7IgPiB6ZW5zaGlcIDsKK+i8queUnyA+IHJpbnNlaVwgOwor5YaF5rCXID4gdWNoaWtpXCA7Civlgo3oqJMgPiBib3VrdW5cIDsKK+ecuOWtkCA+IGJvdXNoaVwgOwor6YGF5Yq5ID4gY2hpa291XCA7Civnm5vmmpEgPiBzZWlzaG9cIDsKK+i/keaDhSA+IGtpbmpvdVwgOwor5buD5YW1ID4gaGFpaGVpXCA7CivlhY3nirYgPiBtZW5qb3VcIDsKK+WFqOa9sCA+IHplbmthaVwgOwor5bqD5aSnID4ga291ZGFpXCA7Civpq5joq5YgPiBrb3Vyb25cIDsKK+W4huahgSA+IGhvZ2V0YVwgOwor6auY6KuHID4ga291ZGFuXCA7CivmqZ/mpa0gPiBraWd5b3VcIDsKK+mAk+WilyA+IHRlaXpvdVwgOwor5bmV5bqcID4gYmFrdWZ1XCA7CivluK3mjbIgPiBzZWtrZW5cIDsKK+iNt+W9uSA+IG5peWFrdVwgOwor5bm75ae/ID4gZ2Vuc2hpXCA7CivlhoXmrr8gPiBuYWlkZW5cIDsKK+W6g+WjriA+IGtvdXNvdVwgOwor5YKN6KazID4gYm91a2FuXCA7Civoj6/lg5EgPiBrYWt5b3VcIDsKK+W4neaUvyA+IHRlaXNlaVwgOwor55WM6ZqIID4ga2Fpd2FpXCA7CivliIblsIEgPiBidW5wb3VcIDsKK+WIpeWgsSA+IGJlcHBvdVwgOwor5YWs5rqWID4ga291anVuXCA7Civlgo3oppYgPiB3YWtpbWlcIDsKK+WJjeWNiiA+IHplbnBhblwgOwor55m954WZID4gaGFrdWVuXCA7Civlub3lpZEgPiB5dXVrZWlcIDsKK+eUn+muriA+IHNlaXNlblwgOwor6IuU54q2ID4gdGFpam91XCA7CivprZTnrJsgPiBtYXRla2lcIDsKK+WJteS4liA+IHNvdXNlaVwgOwor55uG5qC9ID4gYm9uc2FpXCA7Civpq5joqIAgPiBrb3VnZW5cIDsKK+i3s+mmrCA+IGNob3ViYVwgOwor5bi45oWLID4gam91dGFpXCA7CivluoPloLQgPiBoaXJvYmFcIDsKK+W6g+WgsSA+IGtvdWhvdVwgOwor5bGx6aGbID4gc2FudGVuXCA7CivliIblrZAgPiBidW5zaGlcIDsKK+iHqui6qyA+IGppc2hpblwgOwor5YW15rOVID4gaGVpaG91XCA7CivlgZzou4ogPiB0ZWlzaGFcIDsKK+W5tOWniyA+IG5lbnNoaVwgOwor6auY6KanID4ga291cmFuXCA7CivnlJjpr5sgPiBhbWFkYWlcIDsKK+i/keW9sSA+IGtpbicnZWlcIDsKK+W6g+WfnyA+IGtvdWlraVwgOwor5qiq5rqiID4gb3VpdHN1XCA7Civlhqzml6UgPiBmdXl1YmlcIDsKK+mrmOimiyA+IHRha2FtaVwgOwor5YOn57axID4gc291Z291XCA7CivliY3liY0gPiBtYWVtYWVcIDsKK+W6p+WNkyA+IHphdGFrdVwgOwor5YWs5rW3ID4ga291a2FpXCA7CivlhqDmnKggPiBrYWJ1a2lcIDsKK+iJr+e4gSA+IHJ5b3VlblwgOwor5Ymb5YGlID4gZ291a2VuXCA7Civlgb3oqLwgPiBnaXNob3VcIDsKK+mBjuS/oSA+IGthc2hpblwgOwor5biC5pyJID4gc2hpeXV1XCA7Civluq3liY0gPiB0ZWl6ZW5cIDsKK+WEqueUnyA+IHl1dXNlaVwgOwor5qSc6LuKID4ga2Vuc2hhXCA7Civlupflk6EgPiB0ZW4nJ2luXCA7CivpgLLljJYgPiBzaGlua2FcIDsKK+aoueawtyA+IGp1aHlvdVwgOwor5bqE5ZySID4gc2hvdWVuXCA7Civoh6rotrMgPiBqaXNva3VcIDsKK+mqqOi6qyA+IGhvbmVtaVwgOwor5YWt5rOVID4gcm9wcG91XCA7Civlh7rlrrYgPiBzaHVra2VcIDsKK+W5suWkqSA+IGthbnRlblwgOwor5Yeh5bq2ID4gYm9uc2hvXCA7Civpq5joo4EgPiBrb3VzYWlcIDsKK+eUu+mbhiA+IGdhc2h1dVwgOwor5YWs5rOVID4ga291aG91XCA7CivliIblqKkgPiBidW5iZW5cIDsKK+i8queKtiA+IHJpbmpvdVwgOwor6Imy57O4ID4gaXJvaXRvXCA7CivnlLvpmpwgPiBnYXNob3VcIDsKK+W5s+WjjCA+IGhlaWpvdVwgOwor5bGx6ZyKID4gc2FucmVpXCA7CivlhpnmnKwgPiBzaGFob25cIDsKK+WFpea1tyA+IGlyaXVtaVwgOwor6LmC6LqqID4ganV1cmluXCA7CivouYLoupkgPiBqdXVyaW5cIDsKK+W5leWxiyA+IG1ha3V5YVwgOwor6ay857GNID4ga2lzZWtpXCA7CivliLvljbAgPiBrb2t1aW5cIDsKK+WFieeCuSA+IGtvdXRlblwgOwor5Yeh5bi4ID4gYm9uam91XCA7Civov7flpoQgPiBtZWltb3VcIDsKK+eXm+iLpiA+IHRzdXVrdVwgOwor55uG5pmvID4gYm9ua2VpXCA7CivoiLnojbcgPiBmdW5hbmlcIDsKK+mAo+WQnyA+IHJlbmdpblwgOwor5Yid5ZueID4gc2hva2FpXCA7Civlu4PkurogPiBoYWlqaW5cIDsKK+WJm+S9kyA+IGdvdXRhaVwgOwor6LuK57eaID4gc2hhc2VuXCA7Civlh6DluLMgPiBraWNob3VcIDsKK+WFqOayuyA+IHplbmNoaVwgOwor6YCj5ZCNID4gcmVubWVpXCA7CivpgKPlkIggPiByZW5nb3VcIDsKK+eahua4iCA+IGthaXNhaVwgOwor55uy5oOzID4gbW91c291XCA7CivliJHloLQgPiBrZWlqb3VcIDsKK+W5tOWgsSA+IG5lbnBvdVwgOwor6YCA5aC0ID4gdGFpam91XCA7CivlhoXmpJwgPiBuYWlrZW5cIDsKK+WGjeagoSA+IHNhaWtvdVwgOwor55u45oCnID4gYWlzaG91XCA7Civoi6Xmua8gPiB3YWtheXVcIDsKK+mBi+S8kSA+IHVua3l1dVwgOwor55u45oCdID4gc291c2hpXCA7CivlhazmsJEgPiBrb3VtaW5cIDsKK+W4guaXpSA+IGljaGliaVwgOwor6Iqx55KwID4gaGFuYXdhXCA7Civmp5jnm7ggPiB5b3Vzb3VcIDsKK+iPr+S4rSA+IGthY2h1dVwgOwor5YG46KaWID4gdG91c2hpXCA7CivliY3lgr4gPiB6ZW5rZWlcIDsKK+mxiOWtkCA+IHRhcmFrb1wgOwor5bGN6aq4ID4gc2hpZ2FpXCA7Civoh6rosqwgPiBqaXNla2lcIDsKK+WIhuWkliA+IGJ1bmdhaVwgOwor55uj5oi/ID4ga2FuYm91XCA7CivluIPmlZkgPiBmdWt5b3VcIDsKK+mAoOWPjSA+IHpvdWhhblwgOwor5YiG5aOyID4gYnVuYmFpXCA7Civlh4Tmg6ggPiBzZWlzYW5cIDsKK+ebm+aMmSA+IHNlaWt5b1wgOwor5bmy5Z+OID4ga2Fuam91XCA7Civou73nm64gPiBrYXJ1bWVcIDsKK+W4sOW/gyA+IGtpc2hpblwgOwor6IyY5p6dID4gcmVpc2hpXCA7Civnm7jlvbkgPiBhaXlha3VcIDsKK+W4guaUvyA+IHNoaXNlaVwgOwor5bqn5YWDID4gemFtb3RvXCA7Civlho3mnaUgPiBzYWlyYWlcIDsKK+WFrOatoyA+IGtvdXNlaVwgOwor5YW85qWtID4ga2VuZ291XCA7Civnm77luqcgPiB0YXRlemFcIDsKK+WGt+aIvyA+IHJlaWJvdVwgOwor5Yi25YuVID4gc2VpZG91XCA7CivoibbnrJEgPiBlbnNob3VcIDsKK+ebuOW9kyA+IHNvdXRvdVwgOwor5beh5qScID4ganVua2VuXCA7CivlubPlnaYgPiBoZWl0YW5cIDsKK+WFteaoqSA+IGhlaWtlblwgOwor5Ya35oimID4gcmVpc2VuXCA7Civnmb7muIggPiBrdWRhcmFcIDsKK+WFqOautSA+IHplbmRhblwgOwor6Iez6KuWID4gc2hpcm9uXCA7CivoiLnoiZkgPiBzZW5zb3VcIDsKK+mAneWOuyA+IHNlaWt5b1wgOwor5bGx6ZaTID4geWFtYWFpXCA7CivliLrliLogPiBpcmFpcmFcIDsKK+eak+atryA+IGtvdXNoaVwgOwor5Yil5ZOBID4gYmVwcGluXCA7CivlubPlnYcgPiBoZWlraW5cIDsKK+WxsemWgCA+IHNhbm1vblwgOwor5YKt6Ii5ID4geW91c2VuXCA7Civlhobmn7EgPiBlbmNodXVcIDsKK+eUn+mhniA+IHNlaXJ1aVwgOwor5bmz5ZywID4gaGVpY2hpXCA7CivpgKPli5UgPiByZW5kb3VcIDsKK+WJjeS+vyA+IHplbmJpblwgOwor6Iez6KqgID4gc2hpc2VpXCA7CivlurjkurogPiB5b3VqaW5cIDsKK+W5tOWbniA+IG5lbmthaVwgOwor6YCA5ZujID4gdGFpZGFuXCA7Civnm7LlvpMgPiBtb3VqdXVcIDsKK+WJjeS+iyA+IHplbnJlaVwgOwor5YaX5paHID4gam91YnVuXCA7CivmqYvmnrYgPiBreW91a2FcIDsKK+WFqOaspyA+IHplbicnb3VcIDsKK+i7n+emgSA+IG5hbmtpblwgOwor6YCf5Yq5ID4gc29ra291XCA7Civnnb7kuLggPiBrb3VnYW5cIDsKK+iHs+iogCA+IHNoaWdlblwgOwor5beo5p2QID4ga3lvemFpXCA7CivlhYnmupAgPiBrb3VnZW5cIDsKK+mAo+WIpCA+IHJlbnBhblwgOwor6LuS56uvID4gbm9raWJhXCA7CivluKvlvJ8gPiBzaGl0ZWlcIDsKK+WJjeS7tiA+IHplbmtlblwgOwor5YWs5qipID4ga291a2VuXCA7CivlsY/poqggPiBieW91YnVcIDsKK+ebuOW4rSA+IGFpc2VraVwgOwor5YmN5LujID4gemVuZGFpXCA7CivnlJ/pnaIgPiBzZWltZW5cIDsKK+iLpuaxgSA+IG5pZ2FyaVwgOwor5YmN5Lq6ID4gemVuamluXCA7CivliIflnLAgPiBraXJlamlcIDsKK+WNiuOAhSA+IGhhbmhhblwgOwor6YGB5LiWID4gdG9uc2VpXCA7Civoh7PopoEgPiBzaGl5b3VcIDsKK+WHtuWkoiA+IGt5b3VtdVwgOwor5YiG5ZywID4gYnVuY2hpXCA7CivnnIvlroggPiBrYW5zaHVcIDsKK+iJtuemjyA+IGVucHVrdVwgOwor5YWF5rqAID4ganV1bWFuXCA7Civoi6XmsJcgPiB3YWthZ2VcIDsKK+eXheiLpiA+IGJ5b3VrdVwgOwor5YWo5qipID4gemVua2VuXCA7CivojZLlu4MgPiBrb3VoYWlcIDsKK+eZuuazoSA+IGhhcHBvdVwgOwor55Sj6ZmiID4gc2FuJydpblwgOwor5YiG5ZujID4gYnVuZGFuXCA7Civoh6roqLsgPiBqaWNodXVcIDsKK+W6g+WOnyA+IGtvdWdlblwgOwor5Yid5Y+3ID4gc2hvZ291XCA7CivluK3lt7sgPiBzZWtrZW5cIDsKK+WGjeaVlyA+IHNhaWhhaVwgOwor5YmN5LiWID4gemVuc2VpXCA7CivpgKDlhbUgPiB6b3VoZWlcIDsKK+mAuOS6iyA+IGl0c3VqaVwgOwor5YO755uuID4gaGlnYW1lXCA7Civlgq3ogZggPiB5b3VoZWlcIDsKK+msseepjSA+IHVzc2VraVwgOwor5beo5pifID4ga3lvc2VpXCA7CivliIDlnK0gPiB0b3VrZWlcIDsKK+WGiuaVsCA+IHNhc3N1dVwgOwor5bm85ZCbID4geW91a3VuXCA7CivnmbrmsZcgPiBoYWtrYW5cIDsKK+eUu+mLsiA+IGdhYnlvdVwgOwor5Ye65Z+OID4gZGVqaXJvXCA7CivlubzlkI0gPiB5b3VtZWlcIDsKK+i7iueqkyA+IHNoYXNvdVwgOwor5bCP6by7ID4ga29iYW5hXCA7CivlhoXml6ggPiBuYWlzaGlcIDsKK+eXm+e9tSA+IHRzdXViYVwgOwor6Ieq6KaaID4gamlrYWt1XCA7Civnlr7oi6YgPiBzaGlra3VcIDsKK+WGheaWuSA+IG5haWhvdVwgOwor5YG96JasID4gZ2l5YWt1XCA7Civnl4Xoh6UgPiBieW91Z2FcIDsKK+W4veWtkCA+IGJvdXNoaVwgOwor5YWx5qCEID4ga3lvdWVpXCA7Civou4rnqK4gPiBzaGFzaHVcIDsKK+WApOmBhyA+IGNoaWd1dVwgOwor5bm25ZGRID4gaGVpZG9uXCA7Civluorlh6AgPiBzaG91Z2lcIDsKK+W5vuWNgyA+IGlrdXNlblwgOwor6auY6JGXID4ga291Y2hvXCA7CivovrLlt6UgPiBub3Vrb3VcIDsKK+Wwj+m6piA+IGtvbXVnaVwgOwor5qSc6KiOID4ga2VudG91XCA7CivliIbllrYgPiBidW4nJ2VpXCA7Civmo5Lpi7wgPiBib3Vrb3VcIDsKK+mAgeWRiCA+IHNvdXRlaVwgOwor5bqn5LitID4gemFjaHV1XCA7CivlhoXmlL8gPiBuYWlzZWlcIDsKK+WGheaUuyA+IG5haWtvdVwgOwor5bm25ZCIID4gaGVpZ291XCA7CivlhazmoL0gPiBrb3VzYWlcIDsKK+S/rumZoiA+IHNodXVpblwgOwor5bqV5YCkID4gc29rb25lXCA7CivluLDlsZ4gPiBraXpva3VcIDsKK+W3peaVsCA+IGtvdXN1dVwgOwor5YW15pu5ID4gaGVpc291XCA7CivlhbXmm7ggPiBoZWlzaG9cIDsKK+WIkeWQjSA+IGtlaW1laVwgOwor6LuN56S8ID4gZ3VucmVpXCA7CivmqLnmnKggPiBqdW1va3VcIDsKK+mrmOiPnCA+IHRha2FuYVwgOwor55u45a++ID4gc291dGFpXCA7CivpgKPkv4IgPiByZW5rZWlcIDsKK+W5tOWPtyA+IG5lbmdvdVwgOwor5qSc6KaWID4ga2Vuc2hpXCA7CivlhqXmg7MgPiBtZWlzb3VcIDsKK+iKseeBqyA+IGhhbmFiaVwgOwor5bGV6ZaLID4gdGVua2FpXCA7Civnm7jlrr8gPiBhaXlhZG9cIDsKK+iInuiIniA+IG1haW1haVwgOwor6YCA5Y67ID4gdGFpa3lvXCA7CivlhajmoKEgPiB6ZW5rb3VcIDsKK+W4r+WwgSA+IG9iaWZ1dVwgOwor5YeN5a+SID4gdG91a2FuXCA7CivlubPljp8gPiBoZWlnZW5cIDsKK+ecjOWkliA+IGtlbmdhaVwgOwor5YeN5a6zID4gdG91Z2FpXCA7CivlsbHph44gPiBzYW4nJ3lhXCA7CivpgI/lhpkgPiB0b3VzaGFcIDsKK+WItuS7pCA+IHNlaXJlaVwgOwor5YWt5pysID4gcm9wcG9uXCA7Civoi6bmpb0gPiBrdXJha3VcIDsKK+W4sOWuhSA+IGtpdGFrdVwgOwor55uy5bCEID4gbW91c2hhXCA7Civnlr3ohasgPiBzb3Nob3VcIDsKK+aoquaguSA+IHlva29uZVwgOwor5bm+5YiGID4gaWt1YnVuXCA7CivnlbDoqqwgPiBpc2V0c3VcIDsKK+mtlOeQgyA+IG1ha3l1dVwgOwor5Ye25ZmoID4ga3lvdWtpXCA7CivliJ3lhqwgPiBzaG90b3VcIDsKK+S/nemdqSA+IGhva2FrdVwgOwor5YaN5oyZID4gc2Fpa3lvXCA7Civnm67lsY4gPiBtZWt1c29cIDsKK+S/iummrCA+IHNodW5tZVwgOwor55Sy6YiRID4ga291YmFuXCA7CivlhavmnKwgPiBoYXBwb25cIDsKK+WFrOaciSA+IGtvdXl1dVwgOwor5YGP6KaLID4gaGVua2VuXCA7CivlupzkuK0gPiBmdWNodXVcIDsKK+ebruWwuyA+IG1lamlyaVwgOwor5YW25pa5ID4gc29uYXRhXCA7Civnm5vlubQgPiBzZWluZW5cIDsKK+Wwj+m0qCA+IGtvZ2Ftb1wgOwor5YaN5oudID4gc2FpaGFpXCA7CivpgIDli6IgPiB0YWlzZWlcIDsKK+i/lOWgsSA+IGhlbnBvdVwgOwor6YCj5LqYID4gcmVua291XCA7Civlub3lhqUgPiB5dXVtZWlcIDsKK+i8ieeCrSA+IHNhaXRhblwgOwor5YaF5o6iID4gbmFpdGFuXCA7CivmqKnmn4QgPiBrZW5wZWlcIDsKK+Wwj+mzpSA+IGtvdG9yaVwgOwor5bm05YqfID4gbmVua291XCA7CivnlLDph44gPiBkZW4nJ3lhXCA7CivlhbXmlbAgPiBoZWlzdXVcIDsKK+ebquWwvSA+IHRvdWppblwgOwor55y85YmNID4gZ2FuemVuXCA7Civlhajmm7ggPiB6ZW5zaG9cIDsKK+iJpuegsiA+IGthbnBvdVwgOwor5bqX5Li7ID4gdGVuc2h1XCA7Civou6LnlJ8gPiB0ZW5zZWlcIDsKK+i2s+mnhCA+IGFzaGlkYVwgOwor5YWr5pmvID4gaGFra2VpXCA7CivnmbvmpbwgPiB0b3Vyb3VcIDsKK+S/nemanCA+IGhvc2hvdVwgOwor55uu5a6JID4gbWV5YXN1XCA7CivlhoXmjL8gPiBuYWlzb3VcIDsKK+amgueulyA+IGdhaXNhblwgOwor5YiG5Y6YID4gYnVucmluXCA7Civov73liqAgPiB0c3Vpa2FcIDsKK+aoquacqCA+IHlva29naVwgOwor5YSq5rilID4geXV1YWt1XCA7Civlho3miKYgPiBzYWlzZW5cIDsKK+W4huW9sSA+IGhva2FnZVwgOwor5bm05YidID4gbmVuc2hvXCA7CivohbDplpMgPiB5b3VrYW5cIDsKK+iNieWxiyA+IHNvdW9rdVwgOwor5YWs5piOID4ga291bWVpXCA7CivlubTliIogPiBuZW5rYW5cIDsKK+W5tOWIhiA+IG5lbmJ1blwgOwor5YWo5pm6ID4gemVuY2hpXCA7CivpgIblhZAgPiBzYWthZ29cIDsKK+WFqOaZryA+IHplbmtlaVwgOwor5bmV5Za2ID4gYmFrdWVpXCA7CivlsI/psK0gPiBrb2hhZGFcIDsKK+WIpeS9vyA+IGJlc3NoaVwgOwor5bmz5YiGID4gaGVpYnVuXCA7Civnm7jlp6YgPiBzb3VrYW5cIDsKK+WFreaWuSA+IHJvcHBvdVwgOwor5Yik5L6LID4gaGFucmVpXCA7CivlubPlh6EgPiBoZWlib25cIDsKK+eYi+eZsiA+IGZ1dXRlblwgOwor5bm75YOPID4gZ2Vuem91XCA7CivlhavmlrkgPiBoYXBwb3VcIDsKK+i/veWIhiA+IG9pd2FrZVwgOwor6bCl5aSrID4geWFtb21lXCA7CivnlKjph5EgPiB5b3VraW5cIDsKK+mtlOeJqSA+IG1hbW9ub1wgOwor5YWs5paHID4ga291YnVuXCA7CivnnLzlhYkgPiBnYW5rb3VcIDsKK+iMtuW3viA+IGNoYWtpblwgOwor55u45aW9ID4gc291Z291XCA7CivliJHlhbggPiBrZWl0ZW5cIDsKK+i/keWcqCA+IGtpbnphaVwgOwor5Yil5Lu2ID4gYmVra2VuXCA7CivpgJPkvJ0gPiB0ZWlkZW5cIDsKK+Wxsei+uiA+IHlhbWFiZVwgOwor5YaF5omAID4gbmFpc2hvXCA7CivnlaXoqJggPiByeWFra2lcIDsKK+W3p+aJiyA+IGtvdXNodVwgOwor5YaF5oimID4gbmFpc2VuXCA7CivnnJ/lkbMgPiBzaGlubWlcIDsKK+i6q+epuiA+IG1pc29yYVwgOwor6L+R5ZugID4ga2luJydpblwgOwor6I2J5a2QID4gc291c2hpXCA7CivoiovniYggPiBpbW9iYW5cIDsKK+WFqOaWhyA+IHplbmJ1blwgOwor5beh5oudID4ganVucGFpXCA7CivnlKPph5EgPiBzYW5raW5cIDsKK+eZu+agoSA+IHRvdWtvdVwgOwor5YWo5pWwID4gemVuc3V1XCA7Civnm6PlroggPiBrYW5zaHVcIDsKK+W3peaJiyA+IGtvdXNodVwgOwor5bel5oi/ID4ga291Ym91XCA7CivlhajmlZcgPiB6ZW5wYWlcIDsKK+ecn+WQpiA+IHNoaW5waVwgOwor6Iul5pyoID4gd2FrYWdpXCA7CivliJflgJkgPiByZWtrb3VcIDsKK+i/veWEuiA+IHRzdWluYVwgOwor5Ya35a6zID4gcmVpZ2FpXCA7CivluorkuIogPiB5dWthdWVcIDsKK+WBveiGnCA+IGdpbWFrdVwgOwor5biG5biDID4gaG9udW5vXCA7Civlh53lm7ogPiBneW91a29cIDsKK+mAlOS4rSA+IHRvY2h1dVwgOwor5YaF5oaCID4gbmFpeXV1XCA7Civkv5fplpMgPiB6b2trYW5cIDsKK+S/g+mfsyA+IHNva3VvblwgOwor5bCP6aqoID4ga29ib25lXCA7Civlub3kvZMgPiB5dXV0YWlcIDsKK+WFuOaLoCA+IHRlbmt5b1wgOwor55m75p2/ID4gdG91YmFuXCA7CivliJ3ku6MgPiBzaG9kYWlcIDsKK+WIgOWJoyA+IHRvdWtlblwgOwor5biz5aC0ID4gY2hvdWJhXCA7CivluZXlkI8gPiBiYWt1cmlcIDsKK+mtmueBryA+IGd5b3RvdVwgOwor6Iaa6LqrID4gaGFkYW1pXCA7CivnmZbmr5sgPiBrdXNlZ2VcIDsKK+W5uOS+vyA+IGtvdWJpblwgOwor5YOt546LID4gc2VuJydvdVwgOwor5bmj5Yi2ID4gaGVpc2VpXCA7Civlho3mgJ0gPiBzYWlzaGlcIDsKK+ecjOWWtiA+IGtlbicnZWlcIDsKK+muruaYjiA+IHNlbm1laVwgOwor6I2S5aSpID4ga291dGVuXCA7CivnlJ/phZIgPiBraXpha2VcIDsKK+WIhuWFmiA+IGJ1bnRvdVwgOwor5bm05L+4ID4gbmVucG91XCA7CivliIblhYkgPiBidW5rb3VcIDsKK+WIgOWIgyA+IHRvdWppblwgOwor5bm+5Lq6ID4gaWt1bmluXCA7CivohLPpq4QgPiBub3V6dWlcIDsKK+mppei2syA+IGtpc29rdVwgOwor5YaF5oOFID4gbmFpam91XCA7CivnnJ/ljJcgPiBtYWtpdGFcIDsKK+W3qOaCqiA+IGt5b2FrdVwgOwor5YaF5oKjID4gbmFpa2FuXCA7CivojYrlprsgPiBrZWlzYWlcIDsKK+WFqOaQjSA+IHplbnNvblwgOwor5YiD5YWIID4gaGFzYWtpXCA7CivlsbHot68gPiB5YW1hamlcIDsKK+WGjeW+gSA+IHNhaXNlaVwgOwor6ae/6aasID4gc2h1bm1lXCA7CivnlKPpgZMgPiBzYW5kb3VcIDsKK+W4r+WfnyA+IHRhaWlraVwgOwor5biM5bCRID4ga2lzaG91XCA7CivoiLnnqpMgPiBzZW5zb3VcIDsKK+i/lOWTgSA+IGhlbnBpblwgOwor5bCP6aaWID4ga29rdWJpXCA7CivlubTkvZkgPiBuZW4nJ3lvXCA7CivnlJjphbggPiBrYW5zYW5cIDsKK+eUn+mChCA+IHNlaWthblwgOwor6Ii356qTID4gZ2Vuc291XCA7CivpqJLpnIogPiBzb3VyZWlcIDsKK+W5heWToSA+IGZ1a3VpblwgOwor5YWJ5p2lID4ga291cmFpXCA7Civoh7PoirggPiBzaGlnZWlcIDsKK+W5tOS8miA+IG5lbmthaVwgOwor6YCA5LyaID4gdGFpa2FpXCA7Civlr6Hpu5kgPiBrYW1va3VcIDsKK+WIg+WCtyA+IG5pbmpvdVwgOwor5YaN5bu6ID4gc2Fpa29uXCA7CivmpbXnp5ggPiBnb2t1aGlcIDsKK+mAg+S6oSA+IHRvdWJvdVwgOwor6YCA5Lu7ID4gdGFpbmluXCA7Civlhoblv4MgPiBlbnNoaW5cIDsKK+W5tOS7pCA+IG5lbnJlaVwgOwor5bm05LujID4gbmVuZGFpXCA7Civlgo3nt5ogPiBib3VzZW5cIDsKK+aomeaXlyA+IGh5b3VraVwgOwor55yB5Za2ID4gc2hvdWVpXCA7CivluLDlm70gPiBraWtva3VcIDsKK+edgOS4iCA+IGtpdGFrZVwgOwor6L6y5aC0ID4gbm91am91XCA7Civou73muJsgPiBrZWlnZW5cIDsKK+mqqOiRoyA+IGtvdHRvdVwgOwor6I2S5Z+OID4ga291am91XCA7Civot7XouI8gPiBzZW50b3VcIDsKK+iNmOWckiA+IHNob3VlblwgOwor55mC5rK7ID4gcnlvdWppXCA7CivovrrlnLAgPiBoZW5jaGlcIDsKK+mnnemzpSA+IGRhY2hvdVwgOwor5YaF5b6EID4gbmFpa2VpXCA7Civohbnpg6ggPiBmdWt1YnVcIDsKK+WHuuWFiCA+IGRlc2FraVwgOwor5YWD5p2lID4gZ2FucmFpXCA7CivnnJ/lhqwgPiBtYWZ1eXVcIDsKK+i8quagvSA+IHJpbnNhaVwgOwor5beo5by+ID4ga3lvZGFuXCA7CivlhYPmnKwgPiBnZW5wb25cIDsKK+WFieaZryA+IGtvdWtlaVwgOwor5Ye25YW3ID4ga3lvdWd1XCA7Civoh6roi6UgPiBqaWpha3VcIDsKK+W5tOS4rSA+IG5lbmp1dVwgOwor55yL5Y+WID4ga2Fuc2h1XCA7CivnmbrmlaMgPiBoYXNzYW5cIDsKK+W4q+WboyA+IHNoaWRhblwgOwor6aex6aedID4gcmFrdWRhXCA7CivlhoXlu7cgPiBuYWl0ZWlcIDsKK+WCjeezuyA+IGJvdWtlaVwgOwor5YiG5L2TID4gYnVudGFpXCA7Civov47lkIggPiBnZWlnb3VcIDsKK+avjuOAhSA+IG1haW1haVwgOwor5L+u6YCgID4gc2h1em91XCA7CivnmbvmlIAgPiB0b3VoYW5cIDsKK+iNieWggiA+IHNvdWRvdVwgOwor5bmy5LiOID4ga2FuJyd5b1wgOwor5YiG5LyaID4gYnVua2FpXCA7Civpq4DogokgPiBoaW5pa3VcIDsKK+apn+WxiyA+IGhhdGF5YVwgOwor5YaF5bqtID4gbmFpdGVpXCA7CivovrLlnLAgPiBub3VjaGlcIDsKK+WFrOaGpCA+IGtvdWZ1blwgOwor55ub5aSnID4gc2VpZGFpXCA7CivoiKrnqbogPiBrb3VrdXVcIDsKK+W4guWtkCA+IGljaGlrb1wgOwor5bCK6aGUID4gc29uZ2FuXCA7Civou43niqwgPiBnZW5rZW5cIDsKK+WFiOaWuSA+IHNlbnBvdVwgOwor5L+u6L6eID4gc2h1dWppXCA7CivnlJ/ouqsgPiBuYW1hbWlcIDsKK+aoquaJiyA+IHlva290ZVwgOwor5YGc6Ii5ID4gdGVpc2VuXCA7CivnnIzli6IgPiBrZW5zZWlcIDsKK+WFreaEnyA+IHJva2thblwgOwor55yf5YG9ID4gc2hpbmdpXCA7CivoiKrnqIsgPiBrb3V0ZWlcIDsKK+WIhuS5lyA+IGJ1bmpvdVwgOwor6I2J5ZywID4gc291Y2hpXCA7CivlhYPml6YgPiBnYW50YW5cIDsKK+WFiOaUuyA+IHNlbmtvdVwgOwor5Yem5YiRID4gc2hva2VpXCA7CivnlLvoqr8gPiBnYWNob3VcIDsKK+WGl+WumCA+IGpvdWthblwgOwor5Yem5YiGID4gc2hvYnVuXCA7Civou73msLQgPiBrZWlzdWlcIDsKK+iHquiFuSA+IGppYmFyYVwgOwor55yf5YCLID4gc2hpbmtvXCA7CivkvqHpoY0gPiBrYWdha3VcIDsKK+WIhuS4jiA+IGJ1bicneW9cIDsKK+i8g+atoyA+IGtvdXNlaVwgOwor5Yem5YemID4gc2hvc2hvXCA7CivoipLmtIsgPiBib3V5b3VcIDsKK+Wwj+mbqiA+IGtveXVraVwgOwor5bCP6ZuoID4ga29zYW1lXCA7Civlt6HlubggPiBqdW5rb3VcIDsKK+WwjumbuyA+IGRvdWRlblwgOwor5YW15b25ID4gaGVpZWtpXCA7CivlsI/pm4AgPiBrb2dhcmFcIDsKK+ecn+S+oSA+IHNoaW5rYVwgOwor6L+R5YiKID4ga2lua2FuXCA7Civlh73kurogPiBrYW5qaW5cIDsKK+ebl+WhgSA+IHRvdXJ1aVwgOwor5YW85bivID4ga2VudGFpXCA7Civoi6bmiYsgPiBuaWdhdGVcIDsKK+WvvumhlCA+IHRhaWdhblwgOwor6Iul5omLID4gd2FrYXRlXCA7Civlt6jls7AgPiBreW9ob3VcIDsKK+WGrOWgtCA+IGZ1eXViYVwgOwor5YKs55ygID4gc2FpbWluXCA7CivlhKrmn5QgPiB5dXVqdXVcIDsKK+iKuOaelyA+IGdlaXJpblwgOwor6LuS54GvID4ga2VudG91XCA7Civnm7jlj40gPiBzb3VoYW5cIDsKK+W3qOWyqSA+IGt5b2dhblwgOwor5biv5ZCMID4gdGFpZG91XCA7CivluLjli6QgPiBqb3VraW5cIDsKK+iNmOWPuCA+IHNob3VqaVwgOwor5YWs5b25ID4ga291ZWtpXCA7Civlhajlv6sgPiB6ZW5rYWlcIDsKK+WGheWxpCA+IG5haXNvdVwgOwor6auY562JID4ga291dG91XCA7Civlh43ljp8gPiB0b3VnZW5cIDsKK+alveeVjCA+IGdha2thaVwgOwor6Iqx5p+zID4ga2FyeXV1XCA7CivoirHmn7EgPiBrYWNodXVcIDsKK+iNmOWOsyA+IHNvdWdvblwgOwor5Ye65LiWID4gc2h1c3NlXCA7Civlh7bkuosgPiBreW91amlcIDsKK+W4guWkliA+IHNoaWdhaVwgOwor55eY55ihID4gdG91c291XCA7Civlh4TlkbMgPiBzdWdvbWlcIDsKK+iHque/kiA+IGppc2h1dVwgOwor5Yeh5YOnID4gYm9uc291XCA7Civlr77pnaIgPiB0YWltZW5cIDsKK+eVquiMtiA+IGJhbmNoYVwgOwor5YaK5a2QID4gc291c2hpXCA7CivnlbDoibIgPiBpc2hva3VcIDsKK+W4q+WPiyA+IHNoaXl1dVwgOwor55eY55eVID4gdG91a29uXCA7Civlhoblr4IgPiBlbmpha3VcIDsKK+WFqOW9oiA+IHplbmtlaVwgOwor5q6144CFID4gZGFuZGFuXCA7Civlt57ltI4gPiBzdXNha2lcIDsKK+i/keWCjSA+IGtpbmJvdVwgOwor5YWl5b6hID4gbnl1dWdvXCA7CivlhoXlrrkgPiBuYWl5b3VcIDsKK+WGheWuriA+IG5haWd1dVwgOwor5YWs5bqtID4ga291dGVpXCA7CivlhoXlrpogPiBuYWl0ZWlcIDsKK+W4guWhtSA+IHNoaWppblwgOwor6Le16KiAID4gc2VuZ2VuXCA7CivoirPmm7ggPiBob3VzaG9cIDsKK+eUqOirhyA+IHlvdWRhblwgOwor6Iqx5pyoID4ga2Fib2t1XCA7CivojZLljp8gPiBrb3VnZW5cIDsKK+WFrOW5syA+IGtvdWhlaVwgOwor5YaF5a2rID4gbmFpc29uXCA7CivluILloLQgPiBzaGlqb3VcIDsKK+eUt+ijhSA+IGRhbnNvdVwgOwor5L+d6LqrID4gaG9zaGluXCA7CivnmbrmhqQgPiBoYXBwdW5cIDsKK+WGjeWpmiA+IHNhaWtvblwgOwor6IiM56uvID4gemV0dGFuXCA7Civlhajlu4MgPiB6ZW5wYWlcIDsKK+WFiOaKlSA+IHNlbnRvdVwgOwor5YGV6ICBID4ga2Fpcm91XCA7CivlhajlupcgPiB6ZW50ZW5cIDsKK+ebsuWLlSA+IG1vdWRvdVwgOwor5a++6ZmjID4gdGFpamluXCA7CivkvovpoYwgPiByZWlkYWlcIDsKK+W4r+WJoyA+IHRhaWtlblwgOwor5bid5ZG9ID4gdGVpbWVpXCA7Civou5/ms6UgPiBuYW5kZWlcIDsKK+iMheWxiyA+IGJvdW9rdVwgOwor5YWl5bqrID4gbnl1dWtvXCA7CivnlKjoqIAgPiB5b3VnZW5cIDsKK+eZuuaEjyA+IGhhdHN1aVwgOwor5YWl5bqcID4gbnl1dWZ1XCA7CivoirjmlocgPiBnZWlidW5cIDsKK+WHoeS+iyA+IGhhbnJlaVwgOwor5bCC6ZaAID4gc2VubW9uXCA7Civnmbrmg7MgPiBoYXNzb3VcIDsKK+W4r+WIgCA+IHRhaXRvdVwgOwor6L+R5L2TID4ga2ludGFpXCA7Civoi6blv4MgPiBrdXNoaW5cIDsKK+aqgOWQmyA+IGRhbmt1blwgOwor5YW85a6YID4ga2Vua2FuXCA7CivlhajluIIgPiB6ZW5zaGlcIDsKK+WwlumLrSA+IHNlbicnZWlcIDsKK+WFqOW3uyA+IHplbmthblwgOwor5bC/6LevID4gbnlvdXJvXCA7CivnnIzkvJogPiBrZW5rYWlcIDsKK+ebpOWPsCA+IGJhbmRhaVwgOwor5biD5ZywID4gbnVub2ppXCA7Civoh7PntJQgPiBzaGlqdW5cIDsKK+iNieWOnyA+IHNvdWdlblwgOwor6Ieq57ibID4gamliYWt1XCA7CivmooXphZIgPiB1bWVzaHVcIDsKK+WFg+aJiyA+IG1vdG9kZVwgOwor55yM5LukID4ga2VucmVpXCA7Civlr53pppYgPiBuZWt1YmlcIDsKK+eUn+iqlSA+IHNlaXRhblwgOwor5L+z6KunID4gaGFpa2FpXCA7Civou5/msLQgPiBuYW5zdWlcIDsKK+i/keS7oyA+IGtpbmRhaVwgOwor55yM5Lq6ID4ga2VuamluXCA7Civnm4blnLAgPiBib25jaGlcIDsKK+WGjeWkiSA+IHNhaWhlblwgOwor5YG956ewID4gZ2lzaG91XCA7Civou43muK8gPiBndW5rb3VcIDsKK+WFmuW8iiA+IHRvdWhlaVwgOwor5Yem5LiWID4gc2hvc2VpXCA7CivlhrfljrMgPiByZWlnZW5cIDsKK+iHree0oCA+IHNodXVzb1wgOwor5YaF5aa7ID4gbmFpc2FpXCA7CivojITlrZAgPiBuYXN1YmlcIDsKK+ebn+WPiyA+IG1laXl1dVwgOwor55uX5ZOBID4gdG91aGluXCA7CivnlJ/oqIggPiBzZWlrZWlcIDsKK+iIl+efsyA+IGhvc2VraVwgOwor6Ieq57WmID4gamlreXV1XCA7Civov5TkuIogPiBoZW5qb3VcIDsKK+mtmuairyA+IGd5b3RlaVwgOwor55ub5ZCNID4gc2VpbWVpXCA7Civlhajls7YgPiB6ZW50b3VcIDsKK+i1remhlCA+IHNoYWdhblwgOwor5YWx5a+dID4gdG9tb25lXCA7CivlsI/piq0gPiBrb3plbmlcIDsKK+eah+W4nSA+IGtvdXRlaVwgOwor5YaF5aWPID4gbmFpc291XCA7Civov5HkuJYgPiBraW5zZWlcIDsKK+iHqOe1giA+IHJpbmp1dVwgOwor5bi45L6LID4gam91cmVpXCA7CivojYnlibUgPiBzb3Vzb3VcIDsKK+WFqOWyuCA+IHplbmdhblwgOwor5beo5aSnID4ga3lvZGFpXCA7CivovpvlkbMgPiBrYXJhbWlcIDsKK+WGheWkliA+IG5haWdhaVwgOwor6Iul5bmyID4gamFra2FuXCA7CivlsY3oq4wgPiBzaGlrYW5cIDsKK+ebruWFiCA+IG1lc2FraVwgOwor5bir5YOnID4gc2hpc291XCA7CivluLjkvZMgPiBqb3V0YWlcIDsKK+ebruWFgyA+IG1lbW90b1wgOwor5bi45L2PID4gam91anV1XCA7CivlhajlsbEgPiB6ZW56YW5cIDsKK+i+suWFtSA+IG5vdWhlaVwgOwor5YKN55uuID4gaGF0YW1lXCA7CivlsZXoprMgPiB0ZW5rYW5cIDsKK+WxleimpyA+IHRlbnJhblwgOwor55SY6KiAID4ga2FuZ2VuXCA7CivluLjkvJogPiBqb3VrYWlcIDsKK+W3peWkpyA+IGtvdWRhaVwgOwor5YWs5a6zID4ga291Z2FpXCA7CivluKXlhYggPiBzb3NzZW5cIDsKK+W4uOS7uyA+IGpvdW5pblwgOwor5L+v6KeSID4gZnVrYWt1XCA7Civoi6XluIMgPiB3YWthbWVcIDsKK+W4neWItiA+IHRlaXNlaVwgOwor55e05ryiID4gY2hpa2FuXCA7CivlhazlrpogPiBrb3V0ZWlcIDsKK+i7jeazlSA+IGd1bnBvdVwgOwor5bCP6YeRID4ga29nYW5lXCA7CivnmbvlurggPiB0b3V5b3VcIDsKK+WFqOWwhCA+IHplbnNoYVwgOwor6I2K5YagID4ga2Vpa2FuXCA7CivlhrfliZsgPiByZWlnb3VcIDsKK+W4uOS6uiA+IGpvdWppblwgOwor6a2a5p2/ID4gZ3lvYmFuXCA7CivltKnmvbAgPiBob3VrYWlcIDsKK+WFrOWtkCA+IGtvdXNoaVwgOwor5YOn5q2jID4gc291am91XCA7CivmoZHploAgPiBzb3Vtb25cIDsKK+WGheWgsSA+IG5haWhvdVwgOwor5YWB5oGtID4gaW5reW91XCA7CivlhYnlvakgPiBrb3VzYWlcIDsKK+i7uOacqCA+IGppa3VnaVwgOwor5YWH5b6SID4ga3lvdXRvXCA7Civnm7jkvJ0gPiBzb3VkZW5cIDsKK+i2s+i5tCA+IGFzaGlnZVwgOwor5bid5YagID4gdGVpa2FuXCA7CivkvbXpn7MgPiBwaW4nJ2luXCA7Civpq5jnm64gPiB0YWthbWVcIDsKK+WGhuWfnyA+IGVuJydpa2lcIDsKK+WvkumiqCA+IGthbnB1dVwgOwor6aeF6aCtID4gZWtpdG91XCA7Civlgr7ngIkgPiBrZWlzaGFcIDsKK+WGt+WHjSA+IHJlaXRvdVwgOwor6LuN5rCRID4gZ3VubWluXCA7CivpqqjnsokgPiBrb3BwdW5cIDsKK+eXheeQhiA+IGJ5b3VyaVwgOwor5biw5LyRID4ga2lreXV1XCA7CivluLDkvI8gPiBraWZ1a3VcIDsKK+W4uOS4liA+IHRva295b1wgOwor5YKy54S2ID4gZ291emVuXCA7CivohrXoh5MgPiBzdWl6b3VcIDsKK+WFtuWltCA+IHNvaXRzdVwgOwor5YWF5b2TID4ganV1dG91XCA7Civkv67oo5wgPiBzaHV1aG9cIDsKK+W4g+WRiiA+IGZ1a29rdVwgOwor55qH5bGFID4ga291a3lvXCA7CivoiI7nm6MgPiBzaGFrYW5cIDsKK+eWseeYoSA+IGhvdXNvdVwgOwor5qip5a6YID4ga2Vua2FuXCA7CivlhJLmlZkgPiBqdWt5b3VcIDsKK+W4sOS6rCA+IGtpa3lvdVwgOwor5L+X6K2wID4gem9rdWdpXCA7CivlhrflhYkgPiByZWlrb3VcIDsKK+ebuOS5lyA+IHNvdWpvdVwgOwor5a+d6ZqbID4gbmVnaXdhXCA7CivluKvkvJ0gPiBzaGlkZW5cIDsKK+WGheWcsCA+IG5haWNoaVwgOwor5YWJ5bm0ID4ga291bmVuXCA7CivnmoTlsYsgPiB0ZWtpeWFcIDsKK+ebiuWPiyA+IGVraXl1dVwgOwor5YaF5ZyoID4gbmFpemFpXCA7CivlhbXlpIkgPiBoZWloZW5cIDsKK+WxseiRtSA+IHdhc2FiaVwgOwor5bCP6YGOID4gc2hvdWthXCA7CivlhbXlo6sgPiBoZWlzaGlcIDsKK+WBteefpSA+IHRlaWNoaVwgOwor55ar55mYID4gZWtpcmVpXCA7Civnm7LkurogPiBtb3VqaW5cIDsKK+eah+WuriA+IGtvdWd1dVwgOwor6IO96Z2iID4gbm91bWVuXCA7Civnm5vlhbggPiBzZWl0ZW5cIDsKK+S/neiovCA+IGhvc2hvdVwgOwor5qSc566XID4ga2VuemFuXCA7CivnmoflrpcgPiBrb3Vzb3VcIDsKK+WFiOW4qyA+IHNlbnNoaVwgOwor5YWI5bidID4gc2VudGVpXCA7CivmoLnpm6ogPiBuZXl1a2lcIDsKK+iMheWgtCA+IGtheWFiYVwgOwor5biw5LiAID4ga2lpdHN1XCA7CivnmoflrasgPiBrb3Vzb25cIDsKK+S+rui+sSA+IGJ1am9rdVwgOwor55Wq57eaID4gYmFuc2VuXCA7CivovrLkvJogPiBub3VrYWlcIDsKK+S/l+iqniA+IHpva3Vnb1wgOwor55uu5LuKID4gbW9ra29uXCA7CivlhqXliqAgPiBteW91Z2FcIDsKK+iHpeernCA+IGdhcnlvdVwgOwor55u05LiLID4gY2hva2thXCA7CivlsLjoq4wgPiBzaGlrYW5cIDsKK+WxseiPnCA+IHNhbnNhaVwgOwor6Lui5qChID4gdGVua291XCA7CivovKrlvaIgPiByaW5rZWlcIDsKK+S/l+ipsSA+IHpva3V3YVwgOwor55al55msID4ga2Fpc2VuXCA7CivoiLnnga8gPiBzZW50b3VcIDsKK+iHquensCA+IGppc2hvdVwgOwor6Ium5a2mID4ga3VnYWt1XCA7CivlhYPluKUgPiBnZW5zdWlcIDsKK+iNieS9kyA+IHNvdXRhaVwgOwor55m95a+/ID4gaGFrdWp1XCA7CivlhqXliKkgPiBteW91cmlcIDsKK+W4guWLoiA+IHNoaXNlaVwgOwor5L2T6aiTID4gdGFpa2VuXCA7CivnmbrlsZUgPiBoYXR0ZW5cIDsKK+W3oeWbniA+IGp1bmthaVwgOwor5qeL5paHID4ga291YnVuXCA7CivoiLfnga8gPiBnZW50b3VcIDsKK+i8quW7uyA+IHJpbicnbmVcIDsKK+WFuOWeiyA+IHRlbmtlaVwgOwor5bGx6I2YID4gc2Fuc291XCA7Civlhazlo7IgPiBrb3ViYWlcIDsKK+mmqOmmmSA+IGtlaWtvdVwgOwor6ISx6YCAID4gZGF0dGFpXCA7Civkv5fop6MgPiB6b2trYWlcIDsKK+iDjOmwrSA+IHNlYmlyZVwgOwor55m65bCEID4gaGFzc2hhXCA7Civlg5rmqZ8gPiByeW91a2lcIDsKK+WFqOWkqSA+IHplbnRlblwgOwor5qCh6aKoID4ga291ZnV1XCA7CivotaTploAgPiBha2Ftb25cIDsKK+WGpeWGpSA+IG1laW1laVwgOwor5bGN6J2LID4gc2hpcm91XCA7CivnlZ3nuZQgPiB1bmVvcmlcIDsKK+S/l+imiyA+IHpva2tlblwgOwor5YCJ6I23ID4ga3VyYW5pXCA7CivoirPmg4UgPiBob3Vqb3VcIDsKK+W4guWItiA+IHNoaXNlaVwgOwor6aaW6a2BID4gc2h1a2FpXCA7CivlhaXlpKsgPiBueXV1ZnVcIDsKK+WFqOWjiiA+IHplbmthaVwgOwor55Sf6JaRID4gc2hvdWdhXCA7CivlhazloLEgPiBrb3Vob3VcIDsKK+WEquaApyA+IHl1dXNlaVwgOwor5YW15ZujID4gaGVpZGFuXCA7Civlr77pgYcgPiB0YWlndXVcIDsKK+eUn+iVgyA+IHNlaWJhblwgOwor5L6b6YCyID4gZ3VzaGluXCA7CivlhY3lrpggPiBtZW5rYW5cIDsKK+ahn+mBkyA+IHNhbmRvdVwgOwor5YWI5bCOID4gc2VuZG91XCA7CivluILlhoUgPiBzaGluYWlcIDsKK+Wwj+i3ryA+IHNob3VqaVwgOwor6Lu95oyZID4ga2Vpa3lvXCA7Civoia/moYggPiByeW91YW5cIDsKK+WuuemhlCA+IHlvdWdhblwgOwor5YW85Za2ID4ga2VuJydlaVwgOwor5YaG5ZGzID4gbWFydW1pXCA7Civnm5vkvJogPiBzZWlrYWlcIDsKK+WGhuWRqCA+IGVuc2h1dVwgOwor6Iq45b2TID4gZ2VpdG91XCA7CivlhKrlvoUgPiB5dXV0YWlcIDsKK+eUmOiWryA+IGthbnNob1wgOwor5YaF5ZG9ID4gbmFpbWVpXCA7Civou4rmpJwgPiBzaGFrZW5cIDsKK+iKs+W/lyA+IGhvdXNoaVwgOwor5bCP6LazID4ga29hc2hpXCA7CivnmoflpKkgPiBrb3V0ZW5cIDsKK+Wvvui+uiA+IHRhaWhlblwgOwor6LaF6YGOID4gY2hvdWthXCA7Civnm5vku6MgPiBzZWlkYWlcIDsKK+iLl+WtlyA+IG15b3VqaVwgOwor6IOM6aqoID4gc2Vib25lXCA7CivlhoXlkKsgPiBuYWlnYW5cIDsKK+mmrOmdqSA+IGJha2FrdVwgOwor55uf5Li7ID4gbWVpc2h1XCA7CivlhoXlkJEgPiBuYWlrb3VcIDsKK+WFieWtkCA+IGtvdXNoaVwgOwor6aaZ6aaZID4ga291a291XCA7CivlhoXlkIggPiBuYWlnb3VcIDsKK+iIuea4oCA+IHNlbmt5b1wgOwor55SY6JSXID4ga2Fuc2hvXCA7Civlt6jlj6MgPiBreW9rb3VcIDsKK+WFrOWboyA+IGtvdWRhblwgOwor5YaN5YukID4gc2Fpa2luXCA7CivluILlgrUgPiBzaGlzYWlcIDsKK+WyqeeptCA+IGl3YWFuYVwgOwor5YWD5a+HID4gZ2Vua291XCA7CivkvZnpnIcgPiB5b3NoaW5cIDsKK+WFqOWcsCA+IHplbmNoaVwgOwor55WP57iuID4gaXNodWt1XCA7CivlhpXlhqAgPiBiZW5rYW5cIDsKK+iMtuS8miA+IGNoYWthaVwgOwor55G26aGUID4geW91Z2FuXCA7CivkvY7poK0gPiB0ZWl0b3VcIDsKK+WGhuWNkyA+IGVudGFrdVwgOwor5a+G6ZaJID4gbWlwcGVpXCA7CivlsbHog4wgPiB5YW1hc2VcIDsKK+anmOaFiyA+IHlvdXRhaVwgOwor6Iy25LujID4gY2hhZGFpXCA7CivkvZPpnaIgPiB0YWltZW5cIDsKK+WCrOa2mSA+IHNhaXJ1aVwgOwor6IOM6aazID4gaGFpY2hpXCA7CivlhbHllrYgPiBreW91ZWlcIDsKK+iEsei1sCA+IGRhc3NvdVwgOwor55m+5aScID4gbW9tb3lvXCA7Civoi6blooMgPiBrdWt5b3VcIDsKK+WGmeWDjyA+IHNoYXpvdVwgOwor5a6f6aiTID4gamlra2VuXCA7CivlhaXlnJIgPiBueXV1ZW5cIDsKK+iMtuS6uiA+IGNoYWppblwgOwor6Ium5aGpID4gbmlnYXJpXCA7Civnmbrlpa4gPiBoYXBwdW5cIDsKK+iLseWbvSA+IGVpa29rdVwgOwor5YaF5YyFID4gbmFpaG91XCA7Civlho3liIogPiBzYWlrYW5cIDsKK+eUqOiIuSA+IHlvdXNlblwgOwor6auY54elID4ga291c291XCA7CivlhoXli6QgPiBuYWlraW5cIDsKK+iKseW6iiA+IGthc2hvdVwgOwor6IK66a2aID4gaGFpZ3lvXCA7Civoh6rnmb0gPiBqaWhha3VcIDsKK+WutumbhiA+IGthc2h1dVwgOwor6LuN5pu5ID4gZ3Vuc291XCA7Civou43mm7ggPiBndW5zaG9cIDsKK+WCjeeCuSA+IGJvdXRlblwgOwor5L6/6KanID4gYmVucmFuXCA7Civnmbrlo7AgPiBoYXNzZWlcIDsKK+eZu+WjhyA+IHRvdWRhblwgOwor5qeL5oiQID4ga291c2VpXCA7CivmpJznnLwgPiBrZW5nYW5cIDsKK+WGjeWGjSA+IHNhaXNhaVwgOwor5YCS572uID4gdG91Y2hpXCA7CivmoKHploAgPiBrb3Vtb25cIDsKK+mmlumhjCA+IHNodWRhaVwgOwor5YaF5YmbID4gbmFpZ291XCA7Civou5LmmIIgPiBrZW5rb3VcIDsKK+WFiOWmuyA+IHNlbnNhaVwgOwor5bed5Y6fID4ga2F3YXJhXCA7CivluILkvJogPiBzaGlrYWlcIDsKK+mqqOebuCA+IGtvc3NvdVwgOwor6Lui5o+bID4gdGVua2FuXCA7CivlhbHlkowgPiBreW91d2FcIDsKK+eUmOiNiSA+IGthbnpvdVwgOwor5YaF5YiGID4gbmFpYnVuXCA7CivnlJjojLYgPiBhbWFjaGFcIDsKK+eZu+WgtCA+IHRvdWpvdVwgOwor5a+d6YWSID4gbmV6YWtlXCA7CivlhYTlp4kgPiBrZWlzaGlcIDsKK+ato+OAhSA+IHNlaXNlaVwgOwor5biC5Lq6ID4gc2hpamluXCA7CivlhYTlprkgPiBrZWltYWlcIDsKK+WFpeWWtiA+IG55dXVlaVwgOwor5YW85YukID4ga2Vua2luXCA7CivlhYPlp4sgPiBnZW5zaGlcIDsKK+iGj+iCkyA+IGtvdWtvdVwgOwor6auY54K5ID4ga291dGVuXCA7Civou5LmlbAgPiBrZW5zdXVcIDsKK+WFiOWkqSA+IHNlbnRlblwgOwor5YWI5aScID4gc2VuJyd5YVwgOwor5biC5LqVID4gc2hpc2VpXCA7CivlhoblhoUgPiBlbicnbmFpXCA7CivlhoXlhoUgPiBuYWluYWlcIDsKK+i7jeaXhSA+IGd1bnJ5b1wgOwor5YaF5YW4ID4gbmFpdGVuXCA7Civou73lv6sgPiBrZWlrYWlcIDsKK+iIqua1tyA+IGtvdWthaVwgOwor5qeL5oOzID4ga291c291XCA7CivlrrbplbcgPiBrYWNob3VcIDsKK+WFqOWToSA+IHplbicnaW5cIDsKK+iHqOeVjCA+IHJpbmthaVwgOwor6auY54CsID4gdGFrYXNlXCA7Civlhajlk4EgPiB6ZW5waW5cIDsKK+aknOeXsCA+IGtlbnRhblwgOwor5YWl5ZSQID4gbml0dG91XCA7CivluILkuIogPiBzaGlqb3VcIDsKK+Wwj+ipsSA+IHNob3V3YVwgOwor55qH5ZejID4ga291c2hpXCA7Civlt6XlhbUgPiBrb3VoZWlcIDsKK+iDjOmdqSA+IHNlZ2F3YVwgOwor5beo5YSEID4ga3lvb2t1XCA7Civog4zpnaIgPiBoYWltZW5cIDsKK+i7jeaUvyA+IGd1bnNlaVwgOwor5YK15qipID4gc2Fpa2VuXCA7CivlhYjloZQgPiBzZW50b3VcIDsKK+WFrOWPuCA+IGtvdXNoaVwgOwor6Lyq5aemID4gcmlua2FuXCA7CivoiKrms5UgPiBrb3Vob3VcIDsKK+W3qOWDjyA+IGt5b3pvdVwgOwor55aR542EID4gZ2lnb2t1XCA7CivlsI/oqIAgPiBrb2dvdG9cIDsKK+WGheWCtSA+IG5haXNhaVwgOwor5qSc55WqID4ga2VuYmFuXCA7CivlhYXloasgPiBqdXV0ZW5cIDsKK+WxpOe+pCA+IHNvdWd1blwgOwor6Iqx5bGLID4gaGFuYXlhXCA7Civou5/mipUgPiBuYW50b3VcIDsKK+WGheWBtSA+IG5haXRlaVwgOwor5YWo5Y+yID4gemVuc2hpXCA7Civou6LmiKYgPiB0ZW5zZW5cIDsKK+WBtueEtiA+IGd1dXplblwgOwor55Sf6IKyID4gc2VpaWt1XCA7CivohoDog7EgPiBib3Vrb3VcIDsKK+i7ouaIkCA+IHRlbnNlaVwgOwor5YW15Yi2ID4gaGVpc2VpXCA7Civlsqnnm6QgPiBnYW5iYW5cIDsKK+mtlOaApyA+IG1hc2hvdVwgOwor5YWx5YqpID4ga3lvdWpvXCA7CivovIPlt64gPiBrYWt1c2FcIDsKK+ajkue3miA+IGJvdXNlblwgOwor5YWr5Y2BID4geWFzb2ppXCA7CivlhbXliIMgPiBoZWlqaW5cIDsKK+WGjeS8miA+IHNhaWthaVwgOwor6Iqx5a6iID4ga2FrYWt1XCA7CivoirHlrp8gPiBoYW5hbWlcIDsKK+iLl+WcgyA+IGJ5b3Vob1wgOwor5YaN5Lu7ID4gc2FpbmluXCA7CivkvZnpjLIgPiB5b3Jva3VcIDsKK+eXheawlyA+IGJ5b3VraVwgOwor6IO46YOoID4ga3lvdWJ1XCA7Civpp4XpgJMgPiBla2l0ZWlcIDsKK+WFiOWcqCA+IHNlbnphaVwgOwor5a6f6ZqbID4gamlzc2FpXCA7CivnlJ/ogIUgPiBzaG91amFcIDsKK+eUsee3kiA+IHl1aXNob1wgOwor5L+z6IGWID4gaGFpc2VpXCA7CivlsbHns7sgPiBzYW5rZWlcIDsKK+eUt+ezuyA+IGRhbmtlaVwgOwor5L2z6L6wID4ga2FzaGluXCA7Civlr77oq5YgPiB0YWlyb25cIDsKK+aoqeWOnyA+IGtlbmdlblwgOwor5a+u6LK7ID4gcnlvdWhpXCA7Civlr77oq4cgPiB0YWlkYW5cIDsKK+i6q+afhCA+IG1pZ2FyYVwgOwor5YCr56S+ID4gcmluc2hhXCA7Civlt6jkvZMgPiBreW90YWlcIDsKK+WGheS9jyA+IG5haWp1dVwgOwor55qH5ZCOID4ga291Z291XCA7CivlsI/oopYgPiBrb3NvZGVcIDsKK+WvvuiqniA+IHRzdWlnb1wgOwor6IO96L6vID4gbm91YmVuXCA7Civoi6blkbMgPiBuaWdhbWlcIDsKK+WDp+aIvyA+IHNvdWJvdVwgOwor5YWs5YikID4ga291aGFuXCA7CivprYXmg5EgPiBtaXdha3VcIDsKK+WFrOWIiiA+IGtvdWthblwgOwor5YaN5LiJID4gc2Fpc2FuXCA7CivlhYflmaggPiBreW91a2lcIDsKK+WztuawkSA+IHRvdW1pblwgOwor5qip5YuiID4ga2Vuc2VpXCA7Civlt6jkurogPiBreW9qaW5cIDsKK+WGheS6iSA+IG5haXNvdVwgOwor5bCG6KOcID4gc2hvdWhvXCA7CivlhoXkubEgPiBuYWlyYW5cIDsKK+WFjuWUhyA+IHRvc2hpblwgOwor5YW85L21ID4ga2VucGVpXCA7Civlt6XkurogPiBrb3VqaW5cIDsKK+iKuOWkpyA+IGdlaWRhaVwgOwor5YWs5YWaID4ga291dG91XCA7Civoh6rniIYgPiBqaWJha3VcIDsKK+iIt+airyA+IGdlbnRlaVwgOwor6ISx6KGjID4gZGF0c3VpXCA7CivlhobkuJggPiBlbmt5dXVcIDsKK+S8mumkqCA+IGthaWthblwgOwor6Iqd5bGFID4gc2hpYmFpXCA7Civou5/mgKcgPiBuYW5zZWlcIDsKK+eahuWLpCA+IGthaWtpblwgOwor5beo5LiHID4ga3lvbWFuXCA7Civou43miYcgPiBndW5zZW5cIDsKK+afu+mWsiA+IHNhZXRzdVwgOwor5a+46KiAID4gc3VuZ2VuXCA7Civlr4bpgIEgPiBtaXNzb3VcIDsKK+i8quWbniA+IHJpbicnbmVcIDsKK+eUqOe0mSA+IHlvdXNoaVwgOwor5a+E6YCyID4ga2lzaGluXCA7Civnl5TmoLggPiBqaWtha3VcIDsKK+WFqOWFjSA+IHplbm1lblwgOwor55m65ZCRID4gaGFra291XCA7CivkvZPph40gPiB0YWlqdXVcIDsKK+WFrOWCtSA+IGtvdXNhaVwgOwor5YWa5YuiID4gdG91c2VpXCA7Civmo4TntIQgPiBraXlha3VcIDsKK+S+jeiqrSA+IGppZG9rdVwgOwor6aqo54mMID4ga2FydXRhXCA7CivlgbTmup0gPiBzb2trb3VcIDsKK+WvqeitsCA+IHNoaW5naVwgOwor6aqo54mHID4ga29wcGVuXCA7Civlgr7mlpwgPiBrZWlzaGFcIDsKK+WEkuWtpiA+IGp1Z2FrdVwgOwor6Ieq54S2ID4gc2hpemVuXCA7CivlsILooYwgPiBzZW5rb3VcIDsKK+i1pOi1pCA+IGFrYWFrYVwgOwor6Imy5oKqID4gaXJvYWt1XCA7Civoi6blipsgPiBrdXVyaWlcIDsKK+i6q+aWuSA+IG1pa2F0YVwgOwor5qW35pu4ID4ga2Fpc2hvXCA7Civlrp3pkZEgPiBob3VrYW5cIDsKK+S8mumgrSA+IGthaXRvdVwgOwor5L+h6ICFID4gc2hpbmphXCA7Civotbfoq4sgPiBraXNob3VcIDsKK+iGv+eYjSA+IG5vdXlvdVwgOwor5qaC5pWwID4gZ2Fpc3V1XCA7Civoirjln58gPiBnZWlpa2lcIDsKK+Wwj+iZjiA+IGtvZG9yYVwgOwor6Imy5oGLID4gaXJva29pXCA7CivogrrploAgPiBoYWltb25cIDsKK+WFteS7lyA+IGhlaWpvdVwgOwor5a626YO3ID4ga2FreW91XCA7CivnlaLnlJ8gPiBoaXNzZWlcIDsKK+S/oee+qSA+IHNoaW5naVwgOwor5bKz54i2ID4gZ2FrdWZ1XCA7Civpq5jmrrUgPiBrb3VkYW5cIDsKK+eUn+e0mSA+IGtpZ2FtaVwgOwor6Ia/55axID4gbm91aG91XCA7CivkvovoqIAgPiByZWlnZW5cIDsKK+eah+WFuCA+IGtvdXRlblwgOwor5YWI5ZCbID4gc2Vua3VuXCA7CivkvbPos54gPiBrYXNob3VcIDsKK+WFrOS+ryA+IGtvdWtvdVwgOwor6LWk6LKdID4gYWthZ2FpXCA7Civkvovop6MgPiByZWlrYWlcIDsKK+eahuWFtSA+IGthaWhlaVwgOwor6LuN5oOFID4gZ3Vuam91XCA7Civpq5jmra8gPiB0YWthYmFcIDsKK+WFteS5sSA+IGhlaXJhblwgOwor5L2V6YGNID4gbmFuYmVuXCA7Civlhazkvb8gPiBrb3VzaGlcIDsKK+WFiOWPliA+IHNlbnNodVwgOwor55m65YuBID4gaGFra2VpXCA7Civpp4Tos4MgPiBkYWNoaW5cIDsKK+eZuuWKuSA+IGhha2tvdVwgOwor5bC+57+8ID4gYml5b2t1XCA7Civpq4TmtrIgPiB6dWlla2lcIDsKK+WwgeidiyA+IGZ1dXJvdVwgOwor5YWa5YaFID4gdG91bmFpXCA7CivnlKjnrosgPiB5b3VzZW5cIDsKK+WFrOS9jyA+IGtvdWp1dVwgOwor5YWo5L6/ID4gemVuYmluXCA7CivnlJ/nsosgPiBraXNzdWlcIDsKK+eUsueoriA+IGtvdXNodVwgOwor5L+X6ICzID4gem9rdWppXCA7Civpq5jmrIQgPiBrb3VyYW5cIDsKK+ahv+iPjCA+IGthbmtpblwgOwor5YWs5LyaID4ga291a2FpXCA7CivoiJ7mpb0gPiBidWdha3VcIDsKK+WutOmBiiA+IGVuJyd5dXVcIDsKK+WFg+WPtyA+IGdlbmdvdVwgOwor6aqo54KtID4ga290dGFuXCA7CivnmbrliLggPiBoYWtrZW5cIDsKK+WBtOazsyA+IHNvYmFlaVwgOwor6Iux5L+KID4gZWlzaHVuXCA7CivnlbDniakgPiBpYnV0c3VcIDsKK+WFqOS9kyA+IHplbnRhaVwgOwor55Kw6KaWID4ga2Fuc2hpXCA7CivohLHol6kgPiBkYXBwYW5cIDsKK+eZuuWIiiA+IGhha2thblwgOwor5YWs5Lq6ID4ga291amluXCA7CivlhIDlrrggPiBnaXNoaW5cIDsKK+S/guiIuSA+IGtlaXNlblwgOwor5p+U6aCGID4ganV1anVuXCA7CivlhajkvJogPiB6ZW5rYWlcIDsKK+eVqueKrCA+IGJhbmtlblwgOwor6aas6LqrID4gYmFzaGluXCA7Civnmb3lhYkgPiBoYWtrb3VcIDsKK+eXmeaUoyA+IGtlaXJlblwgOwor5L2O6L+3ID4gdGVpbWVpXCA7Civoiq/lnLAgPiBzaGluamlcIDsKK+S+v+iIuSA+IGJpbnNlblwgOwor5YWo5Lq6ID4gemVuamluXCA7CivohY7oh5MgPiBqaW56b3VcIDsKK+mms+i1sCA+IGNoaXNvdVwgOwor55m65YWJID4gaGFra291XCA7CivlhYPli7IgPiBnZW5rdW5cIDsKK+iFi+iHrSA+IHdha2lnYVwgOwor5YGc5rueID4gdGVpdGFpXCA7CivlhYjliLYgPiBzZW5zZWlcIDsKK+mmmemBkyA+IGtvdWRvdVwgOwor6Iux5LqsID4gZWlreW91XCA7Civnl7TmhYsgPiBjaGl0YWlcIDsKK+WxseegpiA+IHNhbnNhaVwgOwor5a+d6KiAID4gbmVnb3RvXCA7CivkvbPoqr8gPiBrYWNob3VcIDsKK+mrmOalvCA+IGtvdXJvdVwgOwor6Lui5bGFID4gdGVua3lvXCA7CivlgYnng4ggPiBpcmV0c3VcIDsKK+WFieWGoCA+IGtvdWthblwgOwor6a2v5Zu9ID4gcm9rb2t1XCA7CivohIfoposgPiB3YWtpbWlcIDsKK+WFheWIhiA+IGp1dWJ1blwgOwor5qih5L2cID4gbW9zYWt1XCA7CivnmobkvJ0gPiBrYWlkZW5cIDsKK+eXtOaDhSA+IGNoaWpvdVwgOwor5a2d6aSKID4ga291eW91XCA7Civoh6jmuK8gPiByaW5rb3VcIDsKK+W0h+aVrCA+IHN1dWtlaVwgOwor6Lui5a+dID4gZ29yb25lXCA7CivohZDogokgPiBmdW5pa3VcIDsKK+WumOmHkSA+IGthbmtpblwgOwor6Ly45YWlID4geXVueXV1XCA7CivlhYjlhbUgPiBzZW5wZWlcIDsKK+i7jeW4vSA+IGd1bmJvdVwgOwor5YWH5YW3ID4ga3lvdWd1XCA7Civkv5fnuIEgPiB6b2t1ZW5cIDsKK+i7jeW4qyA+IGd1bnNoaVwgOwor6IW5562LID4gZnVra2luXCA7Civoh6rmtpwgPiBqaXRva3VcIDsKK+iGmuedgCA+IGhhZGFnaVwgOwor6LWw6KGMID4gc291a291XCA7CivlrrnotaYgPiB5b3VzaGFcIDsKK+Wwv+e0oCA+IG55b3Vzb1wgOwor5qCE6YCyID4gZWlzaGluXCA7Civmp4vlpJYgPiBrb3VnYWlcIDsKK+alk+aelyA+IGZ1dXJpblwgOwor5YWa5Lq6ID4gdG91amluXCA7Civoh6jmtbcgPiByaW5rYWlcIDsKK+S9meiziiA+IHlvem9rdVwgOwor5qSc5ripID4ga2VuJydvblwgOwor5a+T6KiAID4gZ3V1Z2VuXCA7CivlhZrkuokgPiB0b3Vzb3VcIDsKK+mBheOAhSA+IGNoaWNoaVwgOwor6aaW6LyqID4ga3ViaXdhXCA7CivoirjlkI0gPiBnZWltZWlcIDsKK+WBpeawlyA+IGtlbmFnZVwgOwor6auY5qChID4ga291a291XCA7CivlrZ3poIYgPiBrb3VqdW5cIDsKK+iCm+mWgCA+IGtvdW1vblwgOwor6Ieq5rOoID4gamljaHV1XCA7CivmoITovrEgPiBlaWpva3VcIDsKK+WumOmCuCA+IGthbnRlaVwgOwor6LWk6KO4ID4gc2VraXJhXCA7Civoh7TmrbsgPiBjaGlzaGlcIDsKK+Wwj+iIuSA+IGtvYnVuZVwgOwor5LyN6ZW3ID4gZ29jaG91XCA7CivoibblrrkgPiBlbicneW91XCA7CivlsYjnrYsgPiBrdWtraW5cIDsKK+WuueiyjCA+IHlvdWJvdVwgOwor5bCP6IifID4ga29idW5lXCA7CivnmbrkvJogPiBoYWtrYWlcIDsKK+iHquayiCA+IGppY2hpblwgOwor5a6Y6YG4ID4ga2Fuc2VuXCA7Civnl5vmiZMgPiB0c3V1ZGFcIDsKK+iHreawlyA+IHNodXVraVwgOwor5a626LODID4geWFjaGluXCA7Civnmbvku5kgPiB0b3VzZW5cIDsKK+iKs+WQjSA+IGhvdW1laVwgOwor5a2m6ZmiID4gZ2FrdWluXCA7CivprZTlooMgPiBtYWt5b3VcIDsKK+iIjOaguSA+IHpla2tvblwgOwor5YCJ55qHID4gc291a291XCA7CivltKnlvqEgPiBob3VneW9cIDsKK+S9k+iyjCA+IHRhaWJvdVwgOwor6aWF6aCtID4gbWFuanV1XCA7CivkvZzorZwgPiBzYWt1ZnVcIDsKK+S9teihjCA+IGhlaWtvdVwgOwor5YWI5L6/ID4gc2VuYmluXCA7CivlsI/ohp0gPiBrb2hpemFcIDsKK+WJjeOAhSA+IG1hZW1hZVwgOwor5bKs5rm+ID4ga291d2FuXCA7CivlgJLnlKMgPiB0b3VzYW5cIDsKK+Wwj+iFuSA+IGtvYmFyYVwgOwor5YWI5L6LID4gc2VucmVpXCA7CivlhYPlgKQgPiBtb3RvbmVcIDsKK+S9juizhyA+IHRlaXNoaVwgOwor6aqo5rOVID4ga29wcG91XCA7CivnlJ/noawgPiBzZWlrb3VcIDsKK+iJr+WutiA+IHJ5b3VrZVwgOwor5YWJ5L2TID4ga291dGFpXCA7CivlrpjovrogPiBrYW5wZW5cIDsKK+iLn+S4lCA+IGtvdXNob1wgOwor5bGk55u4ID4gc291c291XCA7Civlrp/ou4ogPiBqaXNzaGFcIDsKK+WFiOS9jyA+IHNlbmp1dVwgOwor5a+G6KiIID4gbWlra2VpXCA7CivlhKrli6IgPiB5dXVzZWlcIDsKK+WCsuaFoiA+IGdvdW1hblwgOwor5LuL6bGXID4ga2FpcmluXCA7Civog7joo48gPiBreW91cmlcIDsKK+Wwj+iEhyA+IGtvd2FraVwgOwor5a+E6KiXID4ga2l0YWt1XCA7CivltIfmi50gPiBzdXVoYWlcIDsKK+amguW/tSA+IGdhaW5lblwgOwor55So55uKID4geW91ZWtpXCA7Civlsa/nlLAgPiB0b25kZW5cIDsKK+iGvueCmSA+IGthaXNoYVwgOwor55m45LiRID4ga2ljaHV1XCA7CivlhYjku6MgPiBzZW5kYWlcIDsKK+mnmOiVqSA+IHRhaXRvdVwgOwor5YGc5q2iID4gdGVpc2hpXCA7CivlsI/ogqEgPiBrb21hdGFcIDsKK+WFiOS6uiA+IHNlbmppblwgOwor6Lui5aSJID4gdGVucGVuXCA7Civou6Llo7IgPiB0ZW5iYWlcIDsKK+WBtOaguSA+IHNva2tvblwgOwor5a6M6YGCID4ga2Fuc3VpXCA7Civlrp/ot7UgPiBqaXNzZW5cIDsKK+WumOi7jSA+IGthbmd1blwgOwor6IOM6LWwID4gaGFpc291XCA7CivouqvlvaIgPiBtaW5hcmlcIDsKK+agoeiokyA+IGtvdWt1blwgOwor5bCP6ICzID4ga29taW1pXCA7CivogbTpn7MgPiBjaG91b25cIDsKK+agoeiogiA+IGtvdXRlaVwgOwor6IiI5pu/ID4ga291dGFpXCA7Civlrrnoqo0gPiB5b3VuaW5cIDsKK+iEseiEgiA+IGRhc3NoaVwgOwor5YWI5Li7ID4gc2Vuc2h1XCA7CivkvJrph4ggPiBlc2hha3VcIDsKK+WtlOmbgCA+IGt1amFrdVwgOwor5qSc5q27ID4ga2Vuc2hpXCA7CivlsI/ogIUgPiBrb21vbm9cIDsKK+S7o+mhmCA+IGRhaWdhblwgOwor6aSK6baPID4geW91a2VpXCA7Civkv4LntK8gPiBrZWlydWlcIDsKK+iCnemKmCA+IGthbm1laVwgOwor5L2T6KqNID4gdGFpbmluXCA7CivkvZnop5IgPiB5b2tha3VcIDsKK+iEseiCmyA+IGRha2tvdVwgOwor5a+d6JeBID4gbmV3YXJhXCA7CivlhKrlhYggPiB5dXVzZW5cIDsKK+izvemKrSA+IHNhaXNlblwgOwor5YG25pyJID4gZ3V1eXV1XCA7Civlr4booYwgPiBtaWtrb3VcIDsKK+WFg+S4iSA+IGdhbnphblwgOwor6Iag54q2ID4ga291am91XCA7CivkvZPoqIAgPiB0YWlnZW5cIDsKK+WBpeajkiA+IGtlbmJvdVwgOwor5Yi644CFID4gaXJhaXJhXCA7CivouqvluYUgPiBtaWhhYmFcIDsKK+S7sumWkyA+IG5ha2FtYVwgOwor5Lyd6YGTID4gZGVuZG91XCA7CivkvLTotbAgPiBiYW5zb3VcIDsKK+i6q+W3viA+IG1paGFiYVwgOwor5a2U6ZaAID4ga291bW9uXCA7Civou6LlnLAgPiB0ZW5jaGlcIDsKK+iJr+WknCA+IHJ5b3V5YVwgOwor5L2T6KaBID4gdGFpeW91XCA7CivkvJ3pgIEgPiBkZW5zb3VcIDsKK+i0i+mAoCA+IGdhbnpvdVwgOwor6a6O5LimID4gYWluYW1lXCA7CivoiLnlvbEgPiBzZW4nJ2VpXCA7CivoiIjmlZcgPiBrb3VoYWlcIDsKK+i7ouWbniA+IHRlbmthaVwgOwor6Ieo5qScID4gcmlua2VuXCA7Civlr77oga8gPiB0YWlyZW5cIDsKK+eZiOWFtSA+IGhhaWhlaVwgOwor6aaW6KyAID4gc2h1Ym91XCA7Civlg5XlqaIgPiBib2t1aGlcIDsKK+ajkueKtiA+IGJvdWpvdVwgOwor6auY5o+aID4ga291eW91XCA7Civku5bpoJggPiB0YXJ5b3VcIDsKK+iBr+maiiA+IHJlbnRhaVwgOwor5a+46IO0ID4genVuZG91XCA7Civlg6floIIgPiBzb3Vkb3VcIDsKK+S+jeiHoyA+IGppc2hpblwgOwor6aiT566XID4ga2VuemFuXCA7CivnlJ/nlKMgPiBzZWlzYW5cIDsKK+eUn+eUnyA+IHNlaXNlaVwgOwor5Lq66a2aID4gbmluZ3lvXCA7CivkvZPoo4EgPiB0ZWlzYWlcIDsKK+i7jeWjqyA+IGd1bnNoaVwgOwor5L6/566hID4gYmVua2FuXCA7CivlgbbmlbAgPiBndXVzdXVcIDsKK+S+v+euiyA+IGJpbnNlblwgOwor6aSK6a2aID4geW91Z3lvXCA7CivlsI7nt5ogPiBkb3VzZW5cIDsKK+iBlumkkCA+IHNlaXNhblwgOwor5a6M6LWwID4ga2Fuc291XCA7CivkvInphY0gPiBrb3VoYWlcIDsKK+mmrOidvyA+IHVtYWJhZVwgOwor6Iqx5L+hID4ga2FzaGluXCA7CivlrqPoqpMgPiBzZW5zZWlcIDsKK+S7pOmWqCA+IHJlaWtlaVwgOwor5YOn5Z2KID4gc291Ym91XCA7Civlr77nva4gPiB0YWljaGlcIDsKK+mnkOiLsSA+IGNodXVlaVwgOwor6IKp6LqrID4ga2F0YW1pXCA7Civku4rpoqggPiBpbWFmdXVcIDsKK+mAmeOAhSA+IGhvdWhvdVwgOwor6Iq45Lq6ID4gZ2VpbmluXCA7Civmn5TpgZMgPiBqdXVkb3VcIDsKK+WxpOeKtiA+IHNvdWpvdVwgOwor6ISx57eaID4gZGFzc2VuXCA7CivmoLnoj5wgPiBrb25zYWlcIDsKK+Wuo+iogCA+IHNlbmdlblwgOwor6IOh6J22ID4ga29jaG91XCA7CivlsI/ns6AgPiBrb251a2FcIDsKK+aknOahiCA+IGtlbicnYW5cIDsKK+aenemaiiA+IHNoaXRhaVwgOwor5a6a6KuWID4gdGVpcm9uXCA7Civmpb3lsYsgPiBnYWt1eWFcIDsKK+mrmOaJgCA+IGtvdXNob1wgOwor55eF5b6MID4gYnlvdWdvXCA7Civohr/msYEgPiBub3VqdXVcIDsKK+WCsuWyuCA+IGdvdWdhblwgOwor5bCP57GzID4ga29nb21lXCA7Civlrabpg6ggPiBnYWt1YnVcIDsKK+iHqOabuCA+IHJpbnNob1wgOwor5p+76KqtID4gc2Fkb2t1XCA7CivohavnmI0gPiBzaHV5b3VcIDsKK+alveWvnSA+IHJha3VuZVwgOwor5bCB57eYID4gZnV1a2FuXCA7CivmoLnojI4gPiBrb25rZWlcIDsKK+iGqOa6gCA+IGJvdW1hblwgOwor5L+u55CGID4gc2h1dXJpXCA7CivohLHns54gPiBkYXBwdW5cIDsKK+S/oeeWkSA+IHNoaW5naVwgOwor5a6f6KaLID4gamlra2VuXCA7Civou43lm6MgPiBndW5kYW5cIDsKK+iHmOaihSA+IHJvdWJhaVwgOwor5a6a6KiAID4gdGVpZ2VuXCA7Civmn7voqLwgPiBzYXNob3VcIDsKK+WAkua9sCA+IHRvdWthaVwgOwor6IiM5oimID4gemVzc2VuXCA7CivlsJbnq68gPiBzZW50YW5cIDsKK+WumOiosSA+IGthbmt5b1wgOwor6auY5oWiID4ga291bWFuXCA7Civmn5Tou58gPiBqdXVuYW5cIDsKK+Wwj+eusSA+IGtvYmFrb1wgOwor6IGW6ZyKID4gc2VpcmVpXCA7CivnmYjkurogPiBoYWlqaW5cIDsKK+i7ouWQkSA+IHRlbmtvdVwgOwor5a+G6JGsID4gbWlzc291XCA7CivlsL3nmIEgPiBqaW5zdWlcIDsKK+S9s+iJryA+IGthcnlvdVwgOwor5bCK57ChID4gc29ua2FuXCA7CivlsI7nrqEgPiBkb3VrZW5cIDsKK+WwhOeyviA+IHNoYXNlaVwgOwor5a6a6KaLID4gdGVpa2VuXCA7Civkv53nlZkgPiBob3J5dXVcIDsKK+ani+WGhSA+IGtvdW5haVwgOwor55Om56SrID4gZ2FyZWtpXCA7Civlrp/oo4UgPiBqaXNzb3VcIDsKK+alteWvkiA+IGdva2thblwgOwor6aeF6IiOID4gZWtpc2hhXCA7CivmnaXprq4gPiByYWlzZW5cIDsKK+S6uumhniA+IGppbnJ1aVwgOwor5p6X6ZaTID4gcmlua2FuXCA7Civlrpfopo8gPiBzaHV1a2lcIDsKK+Wvqee+jiA+IHNoaW5iaVwgOwor5bSp5aOKID4gaG91a2FpXCA7CivkuqHprYIgPiBib3Vrb25cIDsKK+i0iOizhCA+IHpvdXdhaVwgOwor5L2/6IGYID4gc2hpaGVpXCA7CivkurrpoK0gPiBqaW50b3VcIDsKK+i1sOiAhSA+IHNvdXNoYVwgOwor5a2d6YGTID4ga291ZG91XCA7Civlrp/ooYwgPiBqaWtrb3VcIDsKK+i7jeWWtiA+IGd1bicnZWlcIDsKK+WDreWPliA+IHNlbnNodVwgOwor5qeY5L2TID4geW91dGFpXCA7Civos5zph5EgPiBzaGlraW5cIDsKK+agoeiRrCA+IGtvdXNvdVwgOwor6Lu95L6/ID4ga2VpYmVuXCA7Civkvb/ogIUgPiBzaGlzaGFcIDsKK+WumOijvSA+IGthbnNlaVwgOwor5YG25oiQID4gZ3V1c2VpXCA7Civkv5fnlYwgPiB6b2trYWlcIDsKK+i7ouWLpCA+IHRlbmtpblwgOwor5Lqk6ampID4ga291a2FuXCA7Civkv5fnlLsgPiB6b2t1Z2FcIDsKK+advumfuyA+IHNob3VpblwgOwor5a++57GzID4gdGFpYmVpXCA7CivlrovoqZ4gPiBzb3VzaGlcIDsKK+W5s+OAhSA+IGhlaWhlaVwgOwor6Led54iqID4ga3lvc291XCA7Civlg6flj7cgPiBzb3Vnb3VcIDsKK+iEguiCqiA+IHNoaWJvdVwgOwor5Lq66Z2iID4gamlubWVuXCA7CivlsILnrqEgPiBzZW5rYW5cIDsKK+iCjOi6qyA+IGhhZGFtaVwgOwor6Imv5ZCmID4gcnlvdWhpXCA7Civpo7zppIogPiBzaGl5b3VcIDsKK+WztuW2vCA+IHRvdXNob1wgOwor6ICB6b2iID4gcm91cmVpXCA7Civoia/lkI8gPiByeW91cmlcIDsKK+advumcsiA+IHNob3Vyb1wgOwor5bCB562SID4gZnV1dG91XCA7Civpo5vps6UgPiBoaWNob3VcIDsKK+iEmue1hiA+IGt5YWhhblwgOwor5YG25oSfID4gZ3V1a2FuXCA7Civosp3poZ4gPiBrYWlydWlcIDsKK+S7mOmMsiA+IGZ1cm9rdVwgOwor5YGP5peBID4gaGVuYm91XCA7Civku6Pph5EgPiBkYWlraW5cIDsKK+mrmOW8nyA+IGtvdXRlaVwgOwor6LO86LK3ID4ga291YmFpXCA7CivohLHnqL8gPiBkYWtrb3VcIDsKK+WBj+aWnCA+IGhlbnNoYVwgOwor5bGx5rW3ID4gc2Fua2FpXCA7Civlr4boiKogPiBtaWtrb3VcIDsKK+WvkuiCpSA+IGthbmdvZVwgOwor5a++562JID4gdGFpdG91XCA7Civou6LlhpkgPiB0ZW5zaGFcIDsKK+S8muirhyA+IGthaWRhblwgOwor6IiO5byfID4gc2hhdGVpXCA7Civlgr7ln44gPiBrZWlzZWlcIDsKK+WBpeaKlSA+IGtlbnRvdVwgOwor6aa06Ie0ID4ganVuY2hpXCA7CivprZrku4sgPiBneW9rYWlcIDsKK+WCmOWxiyA+IGthc2F5YVwgOwor6auY5bm0ID4ga291bmVuXCA7CivkvbXnva4gPiBoZWljaGlcIDsKK+WwhOeoiyA+IHNoYXRlaVwgOwor5Lyd6KiAID4gZGVuZ29uXCA7Civou4rlj7AgPiBzaGFkYWlcIDsKK+eVs+aVsCA+IGpvdXN1dVwgOwor5a++56m6ID4gdGFpa3V1XCA7CivkvJroqIggPiBrYWlrZWlcIDsKK+S9nOiIiCA+IHNha2tvdVwgOwor6IGv6YKmID4gcmVucG91XCA7Civohbjngo4gPiBjaG91ZW5cIDsKK+S6uumWkyA+IG5pbmdlblwgOwor5a2m6LK7ID4gZ2FrdWhpXCA7CivmnbHpnaIgPiB0b3VtZW5cIDsKK+mrmOW3pSA+IGtvdWtvdVwgOwor5qCh6IiOID4ga291c2hhXCA7CivlsI/noLQgPiBzaG91aGFcIDsKK+izh+mHkSA+IHNoaWtpblwgOwor6auY5ba6ID4gdGFrYW5lXCA7Civpo5vprZogPiB0b2JpdW9cIDsKK+WxseawtCA+IHNhbnN1aVwgOwor5L2Z6IiIID4geW9reW91XCA7CivlsbHmsJcgPiB5YW1ha2VcIDsKK+Wwj+efsyA+IGtvaXNoaVwgOwor6IiI5buDID4ga291aGFpXCA7Civou43li6IgPiBndW56ZWlcIDsKK+S9meiHrSA+IHlvc2h1dVwgOwor5Lya6KaLID4ga2Fpa2VuXCA7CivlgJLmrbsgPiB0b3VzaGlcIDsKK+WwgeemhSA+IGhvdXplblwgOwor6LSF6KiAID4gemVpZ2VuXCA7Civnj77ph5EgPiBnZW5raW5cIDsKK+WxheeEtiA+IGt5b3plblwgOwor5YSE5LiHID4gb2t1bWFuXCA7CivmpJzmjJkgPiBrZW5reW9cIDsKK+i7jeWKnyA+IGd1bmtvdVwgOwor6Lui5YCSID4gdGVudG91XCA7CivnlLrmrakgPiBjaG91YnVcIDsKK+WDp+WFtSA+IHNvdWhlaVwgOwor55aR5oORID4gZ2l3YWt1XCA7Civls7blroggPiB0b3VzaHVcIDsKK+S7o+i/lCA+IGRhaWhlblwgOwor5YGc5oimID4gdGVpc2VuXCA7Civmpb3lnJ8gPiByYWt1ZG9cIDsKK+iHqOaIpiA+IHJpbnNlblwgOwor5a6d6JS1ID4gaG91em91XCA7Civmpb3lnJIgPiByYWt1ZW5cIDsKK+iHs+aDhSA+IHNoaWpvdVwgOwor6auY5bOwID4ga291aG91XCA7Civmnpfph44gPiByaW4nJ3lhXCA7Civou43liLYgPiBndW5zZWlcIDsKK+S6rOmYqiA+IGtlaWhhblwgOwor6LWk57eaID4gYWthc2VuXCA7Civlrrboh6MgPiBrYXNoaW5cIDsKK+S6pOmciiA+IGtvdXJlaVwgOwor5LuW6YO3ID4gdGFreW91XCA7Civou43liIAgPiBndW50b3VcIDsKK+mmmeiNiSA+IGtvdXNvdVwgOwor55e05ZGGID4gY2hpaG91XCA7CivmnaHpoIUgPiBqb3Vrb3VcIDsKK+i7n+S+vyA+IG5hbmJlblwgOwor5bCP55uuID4ga29tb2t1XCA7Civmn5DoqowgPiBib3VzaGlcIDsKK+aghOiQvSA+IGVpcmFrdVwgOwor6LuK5Yi4ID4gc2hha2VuXCA7Civou6LkvY8gPiB0ZW5qdXVcIDsKK+eUqOazlSA+IHlvdWhvdVwgOwor6ImZ5Y+jID4gc291a291XCA7Civoh4bmlq0gPiBva3VkYW5cIDsKK+mrmOWxsSA+IGtvdXphblwgOwor6LqN5aaCID4geWFrdWpvXCA7Civpq5jlsaQgPiBrb3Vzb3VcIDsKK+Wwj+eavyA+IGtvemFyYVwgOwor5bCP55q6ID4ga29qaXdhXCA7CivkuqHpnIogPiBib3VyZWlcIDsKK+S6pOmamyA+IGtvdXNhaVwgOwor6Ii55Z6LID4gc2Vua2VpXCA7CivotaTntYwgPiBzZWtrZWlcIDsKK+S9nuiAhSA+IG5laXNoYVwgOwor5qWt5aCxID4gZ291aG91XCA7CivppqzogokgPiBiYW5pa3VcIDsKK+S9k+iFlCA+IHRhaWtvdVwgOwor5YGV5oiQID4ga2Fpc2VpXCA7CivnlpHlv4MgPiBnaXNoaW5cIDsKK+i7jeWFtSA+IGd1bnBlaVwgOwor5p2l6Zu7ID4gcmFpZGVuXCA7CivmnbHploAgPiB0b3Vtb25cIDsKK+mrmOWwgiA+IGtvdXNlblwgOwor5YGl5b+YID4ga2VuYm91XCA7CivnlKjmsLQgPiB5b3VzdWlcIDsKK+i7iuWGhSA+IHNoYW5haVwgOwor6aat6ICFID4gZ3lvc2hhXCA7CivprYXkuoYgPiBtaXJ5b3VcIDsKK+S6jOmjnyA+IG5pamlraVwgOwor6Ii55ZujID4gc2VuZGFuXCA7CivohILnsokgPiBzaGlmdW5cIDsKK+ePvumAgSA+IGdlbnNvdVwgOwor6auY5a6YID4ga291a2FuXCA7Civoh7PlvZMgPiBzaGl0b3VcIDsKK+eOhOm7hCA+IGdlbmtvdVwgOwor5L2T6IKyID4gdGFpaWt1XCA7Civou43lg6cgPiBndW5zb3VcIDsKK+WxpeattCA+IHJpcmVraVwgOwor5YOn5L62ID4gc291cnlvXCA7CivmnpfpgZMgPiByaW5kb3VcIDsKK+iytOmHjSA+IGtpY2hvdVwgOwor5L2Z57+SID4geW9zaHV1XCA7CivosYrpupcgPiBob3VyZWlcIDsKK+WApOacrSA+IG5lZnVkYVwgOwor5L2O6IO9ID4gdGVpbm91XCA7CivmnaXpmKogPiByYWloYW5cIDsKK+WDp+S9kyA+IHNvdXRhaVwgOwor5L6L56WtID4gcmVpc2FpXCA7CivosrTphawgPiBraXNodXVcIDsKK+iDmuiDjiA+IGhhaXRhaVwgOwor5YOn5Ly9ID4gc291Z3lhXCA7Civmoafnmq4gPiBoaXdhZGFcIDsKK+WCvuWQkSA+IGtlaWtvdVwgOwor5a2Q6LGaID4ga29idXRhXCA7Civosq/ph5EgPiBjaG9raW5cIDsKK+alveWToSA+IGdha3VpblwgOwor5YGl5bq3ID4ga2Vua291XCA7Civoh6rlvpcgPiBqaXRva3VcIDsKK+WDreS4uyA+IHNlbnNodVwgOwor5Luj6LWwID4gZGFpc291XCA7Civku6Pota0gPiB0YWlzaGFcIDsKK+iCuuiRiSA+IGhhaXlvdVwgOwor5YOt5LiKID4gc2Vuam91XCA7Civoh6jlvqEgPiByaW5neW9cIDsKK+iyp+mJsSA+IGhpbmtvdVwgOwor5YGP5oSbID4gaGVuJydhaVwgOwor5YG95a2mID4gZ2lnYWt1XCA7CivlgpHlo6sgPiBrZXNzaGlcIDsKK+mmluiEsyA+IHNodW5vdVwgOwor6LuN5L2/ID4gZ3Vuc2hpXCA7CivnlJ/mrosgPiBzZWl6YW5cIDsKK+eUn+atuyA+IHNlaXNoaVwgOwor5p2/6YeRID4gYmFua2luXCA7Civmo5/mnKggPiBtdW5hZ2lcIDsKK+eVquaJgCA+IGJhbnNob1wgOwor6Lev5qiZID4gcm9oeW91XCA7CivnnIjjgIUgPiB0YW50YW5cIDsKK+eUt+aguSA+IGRhbmtvblwgOwor5L2O572uID4gdGVpY2hpXCA7Civpppbogq8gPiBzaHVrb3VcIDsKK+i7iuS9kyA+IHNoYXRhaVwgOwor6Ii55ZOhID4gc2VuJydpblwgOwor55eF5ZugID4gYnlvdWluXCA7CivlrZfoqLMgPiBqaXlha3VcIDsKK+i7jeS7pCA+IGd1bnJlaVwgOwor5YGP5oCnID4gaGVuc2VpXCA7Civmo43mo5IgPiBrb25ib3VcIDsKK+WxpOalvCA+IHNvdXJvdVwgOwor5YGc5bm0ID4gdGVpbmVuXCA7CivlgpjlnLAgPiBrYXNhamlcIDsKK+iHqOW5uCA+IHJpbmtvdVwgOwor6LuN5Lq6ID4gZ3VuamluXCA7Civoh6rluK0gPiBqaXNla2lcIDsKK+S6iOmchyA+IHlvc2hpblwgOwor5a6Y6IiOID4ga2Fuc2hhXCA7CivpqJLnhLYgPiBzb3V6ZW5cIDsKK+mrmOWkpyA+IGtvdWRhaVwgOwor6Iel5bqKID4gZ2FzaG91XCA7CivlsbHmnpcgPiBzYW5yaW5cIDsKK+alteWPsyA+IGt5b2t1dVwgOwor5pyo6a2CID4ga29kYW1hXCA7Civpq5jlo6sgPiBrb3VzaGlcIDsKK+iFjueCjiA+IGppbicnZW5cIDsKK+WxseadkSA+IHNhbnNvblwgOwor5Lq66YG4ID4gamluc2VuXCA7CivlsI/njKsgPiBrb25la29cIDsKK+S7ruiolyA+IGthdGFrdVwgOwor5a++55SfID4gdGFpc2VpXCA7Civmo5Lmna0gPiBib3VndWlcIDsKK+iIueWPsCA+IHNlbmRhaVwgOwor5Lq66YGTID4gamluZG91XCA7CivpqqjlubkgPiBrb2trYW5cIDsKK+ajkuadmSA+IGJvdWd1aVwgOwor6aas57OnID4gYmFyeW91XCA7Civos4fosqEgPiBzaGl6YWlcIDsKK+mmrOezniA+IG1hZ3Vzb1wgOwor5Lq66YCgID4gamluem91XCA7Civlg4Xlg4UgPiBraW5raW5cIDsKK+alteWNsCA+IGdva3VpblwgOwor5Luj6KydID4gdGFpc2hhXCA7Civku6PorJsgPiBkYWlrb3VcIDsKK+S8muiRrCA+IGthaXNvdVwgOwor5a2d6KGMID4ga291a291XCA7CivnlLLmnb8gPiBrb3VoYW5cIDsKK+i7iuS4iiA+IHNoYWpvdVwgOwor6Iez5bCKID4gc2hpc29uXCA7CivoiIXlp5EgPiBreXV1a29cIDsKK+S6iemXmCA+IHNvdXRvdVwgOwor6IiI5aWuID4ga291ZnVuXCA7CivoiabkuIogPiBrYW5qb3VcIDsKK+iCuuiHkyA+IGhhaXpvdVwgOwor6Lqr5YaFID4gbWl1Y2hpXCA7CivlsI/niakgPiBrb21vbm9cIDsKK+mrmOWggiA+IGtvdWRvdVwgOwor5bCP54mbID4ga291c2hpXCA7CivouqvlhbEgPiBtaWRvbW9cIDsKK+eRtue3mCA+IHlvdWthblwgOwor5YK15Yi4ID4gc2Fpa2VuXCA7Civoh7Plrp0gPiBzaGlob3VcIDsKK+S9k+ezuyA+IHRhaWtlaVwgOwor5YGP5bmzID4gaGVucGVpXCA7CivouqvlhYMgPiBtaW1vdG9cIDsKK+Wvn+efpSA+IHNhdGNoaVwgOwor55Sf5qScID4gc2Vpa2VuXCA7Civkuqzpg70gPiBreW91dG9cIDsKK+acq+mmmSA+IG1ha2tvdVwgOwor6Iez5a2dID4gc2hpa291XCA7CivmnKjppqwgPiBtb2t1YmFcIDsKK+WBtOWlsyA+IHNvYmFtZVwgOwor5pys6aSoID4gaG9ua2FuXCA7Civku6PoqIAgPiBkYWlnZW5cIDsKK+adsemDiiA+IHRvdWtvdVwgOwor6IK66IOeID4gaGFpaG91XCA7Civpq5jlnLAgPiBrb3VjaGlcIDsKK+adsemCpiA+IHRvdWhvdVwgOwor6IGW6LOiID4gc2Vpa2VuXCA7Civkurrou4ogPiBqaW5zaGFcIDsKK+eXtOS6uiA+IGNoaWppblwgOwor5pyx6aGUID4gc2h1Z2FuXCA7CivkurrouqsgPiBoaXRvbWlcIDsKK+eUqOadkCA+IHlvdXphaVwgOwor5Lqk6YWNID4ga291aGFpXCA7CivmnbHpgbcgPiB0b3VzZW5cIDsKK+iCuuiCnSA+IGhhaWthblwgOwor6Laz5rmvID4gYXNoaXl1XCA7Civlrprnva4gPiB0ZWljaGlcIDsKK+WCvuWAkiA+IGtlaXRvdVwgOwor5qWt5YuZID4gZ3lvdW11XCA7CivlgI3mlbAgPiBiYWlzdXVcIDsKK+ahkeeUsCA+IHNvdWRlblwgOwor6ICB6ZuEID4gcm91eXV1XCA7CivoiLnlh7ogPiBmdW5hZGVcIDsKK+iHquWuhSA+IGppdGFrdVwgOwor6ISH55uuID4gd2FraW1lXCA7CivmpJzlsY0gPiBrZW5zaGlcIDsKK+acrOmhmCA+IGhvbmdhblwgOwor5pys6aGMID4gaG9uZGFpXCA7CivkubHpm7IgPiByYW4nJ3VuXCA7Civnlr7lkbwgPiBzaGlra29cIDsKK+WCreWFtSA+IHlvdWhlaVwgOwor6Ii55YW3ID4gZnVuYWd1XCA7CivlrrbnrYsgPiBpZXN1amlcIDsKK+ixiumlkiA+IGhvdWpvdVwgOwor5pys6Z+zID4gaG9uJyduZVwgOwor5LuY6KiXID4gZnV0YWt1XCA7CivkvJroiJggPiBrYWlrYW5cIDsKK+acq+mghSA+IG1ha2tvdVwgOwor55Sf5p2lID4gc2VpcmFpXCA7CivkuqTpgYogPiBrb3V5dXVcIDsKK+WApuaGiiA+IGtlbnBhaVwgOwor5p6i6KaBID4gc3V1eW91XCA7CivporHpoqggPiB0YWlmdXVcIDsKK+Wun+e3miA+IGppc3NlblwgOwor5a+d55mWID4gbmVndXNlXCA7Civoh43luK8gPiBzZWl0YWlcIDsKK+aknOWumiA+IGtlbnRlaVwgOwor5p2l6YK4ID4gcmFpdGVpXCA7CivohbnmoYggPiBmdWt1YW5cIDsKK+eUn+acqCA+IG5hbWFraVwgOwor6I2J44CFID4gc291c291XCA7CivkvZnnqIsgPiB5b2hvZG9cIDsKK+S7o+ihjCA+IGRhaWtvdVwgOwor5bO25Y+4ID4gdG91c2hpXCA7CivlgrLlgKggPiBnb3VreW9cIDsKK+mqqOWtkCA+IGtvc3NoaVwgOwor6Iez5aSnID4gc2hpZGFpXCA7Civkvb/nlKggPiBzaGl5b3VcIDsKK+S5semXmCA+IHJhbnRvdVwgOwor5p2l6YGKID4gcmFpeXV1XCA7CivmnbHou40gPiB0b3VndW5cIDsKK+WxleacmyA+IHRlbmJvdVwgOwor6ICz6LyqID4gbWltaXdhXCA7CivkvZnnpoQgPiB5b3Jva3VcIDsKK+Wwj+a9riA+IGtvc2hpb1wgOwor5a+p55CGID4gc2hpbnJpXCA7CivmorbmnKggPiBrYWppa2lcIDsKK+iyp+izpCA+IGhpbnNlblwgOwor6LKn6LOOID4gaGluc2VuXCA7CivmnaXov44gPiByYWlnb3VcIDsKK+aciemrqiA+IHVoYXRzdVwgOwor6LWk55eiID4gc2VraXJpXCA7Civkvr/ms5UgPiBiZW5wb3VcIDsKK+iIueWAiSA+IHNlbnNvdVwgOwor5L2O56m6ID4gdGVpa3V1XCA7CivmnKjpnIogPiBrb2RhbWFcIDsKK+S8neiBniA+IGRlbmJ1blwgOwor5pys6ZqKID4gaG9udGFpXCA7CivlsqnlsaQgPiBnYW5zb3VcIDsKK+iCneiHkyA+IGthbnpvdVwgOwor5pyd6aGUID4gYXNhZ2FvXCA7CivouqvkuIggPiBtaXRha2VcIDsKK+WApuaAoCA+IGtlbnRhaVwgOwor5pys6ZmjID4gaG9uamluXCA7CivmnKzpmaIgPiBob24nJ2luXCA7CivlsKjmr5sgPiBtdWt1Z2VcIDsKK+Wumue0iyA+IGpvdW1vblwgOwor6aSK6LGaID4geW91dG9uXCA7Civku5jooaggPiBmdWh5b3VcIDsKK+WutuemhCA+IGthcm9rdVwgOwor5pyx6ZaAID4gc2h1bW9uXCA7Civogp3ohY4gPiBrYW5qaW5cIDsKK+S9teeUqCA+IGhlaXlvdVwgOwor6auY5ZCfID4ga291Z2luXCA7CivmnKjpmbAgPiBrb2thZ2VcIDsKK+iIueS9kyA+IHNlbnRhaVwgOwor6auY5ZCNID4ga291bWVpXCA7CivlgJLmh7ggPiB0b3VrZW5cIDsKK+WCteS4uyA+IHNhaXNodVwgOwor54++6KGMID4gZ2Vua291XCA7CivnkrDnirYgPiBrYW5qb3VcIDsKK+adpei7iiA+IHJhaXNoYVwgOwor6IOM562LID4gaGFpa2luXCA7CivlsbHmiYsgPiB5YW1hdGVcIDsKK+iFi+avmyA+IHdha2lnZVwgOwor5L+z5paHID4gaGFpYnVuXCA7Civkvr/mrr8gPiBiZW5kZW5cIDsKK+acgOmrmCA+IHNhaWtvdVwgOwor5qKX5qaCID4ga291Z2FpXCA7Civogp3og4YgPiBrYW50YW5cIDsKK+mrmOWOnyA+IGtvdWdlblwgOwor5pyd6ZyyID4gY2hvdXJvXCA7Civlsa/miYAgPiB0b25zaG9cIDsKK+WCreS6uiA+IHlvdW5pblwgOwor6LOA6KGoID4gZ2FoeW91XCA7CivmnJ3pnJ4gPiBjaG91a2FcIDsKK+WuneeulyA+IGhvdXNhblwgOwor6Iy244CFID4gY2hhY2hhXCA7CivpoqjpnJwgPiBmdXVzb3VcIDsKK+i1t+eIhiA+IGtpYmFrdVwgOwor6IiI5ZGzID4ga3lvdW1pXCA7CivogJDphbggPiB0YWlzYW5cIDsKK+WBpeWcqCA+IGtlbnphaVwgOwor6IKJ6Iq9ID4gbmlrdWdhXCA7Civoh6jloLQgPiByaW5qb3VcIDsKK+WztuWGhSA+IHRvdW5haVwgOwor55So5o2oID4geW91c2hhXCA7CivlraToiJ8gPiBrb3NodXVcIDsKK+S6jOmAsiA+IG5pc2hpblwgOwor5p2R6YGTID4gc29uZG91XCA7CivlgY/lpb0gPiBoZW5rb3VcIDsKK+S6jOmAmiA+IG5pdHN1dVwgOwor5Yal44CFID4gbWVpbWVpXCA7CivlrZDokYkgPiBzaGl5b3VcIDsKK+iCr+e2riA+IGtvdWtlaVwgOwor5L2p55SoID4gaGFpeW91XCA7CivkuZfpmY0gPiBqb3Vrb3VcIDsKK+S6i+i/uSA+IGppc2VraVwgOwor5a6Y562JID4ga2FudG91XCA7CivlgKTluYUgPiBuZWhhYmFcIDsKK+eOhOmWoiA+IGdlbmthblwgOwor6aKo6ZiyID4gZnV1Ym91XCA7CivlsJrmraYgPiBzaG91YnVcIDsKK+aer+iRiSA+IGthcmVoYVwgOwor5a62552jID4ga2F0b2t1XCA7CivlgbblkJ8gPiBndXVraW5cIDsKK+S8nee3miA+IGRlbnNlblwgOwor5YCk5be+ID4gbmVoYWJhXCA7Civoh6rlm70gPiBqaWtva3VcIDsKK+iHqOWcqCA+IHJpbnphaVwgOwor5L2Z55m9ID4geW9oYWt1XCA7Civlrr/nl74gPiBzaHVrdWFcIDsKK+WvhueUnyA+IG1pc3NlaVwgOwor5a+E55WZID4ga2lyeXV1XCA7CivmnaXos5MgPiByYWloaW5cIDsKK+iHs+WWhCA+IHNoaXplblwgOwor5Lyd57WxID4gZGVudG91XCA7CivnlLvlv4MgPiBnYXNoaW5cIDsKK+WwjuawtCA+IGRvdXN1aVwgOwor5p2l6LKiID4gcmFpa291XCA7CivnlLfmgKcgPiBkYW5zZWlcIDsKK+WxheaVtyA+IGlzaGlraVwgOwor6ISx5rOVID4gZGFwcG91XCA7CivlgKTltakgPiBuZWdhc2FcIDsKK+aknOWcsCA+IGtlbmNoaVwgOwor6LGq6YK4ID4gZ291dGVpXCA7CivlgaXllZYgPiBrZW50YW5cIDsKK+S9meeXhSA+IHlvYnlvdVwgOwor6Ieq5ZiyID4gamljaG91XCA7CivosqDoqJcgPiBmdXRha3VcIDsKK+iAgemFkiA+IHJvdXNodVwgOwor5Li76aGMID4gc2h1ZGFpXCA7CivkvY7nm64gPiBoaWt1bWVcIDsKK+S9nOeUuyA+IHNha3VnYVwgOwor542j6aGeID4ganV1cnVpXCA7CivosarpgoEgPiBnb3VtYWlcIDsKK+WwhOazlSA+IHNoYWhvdVwgOwor5Lqk6K2yID4ga291am91XCA7CivkuovouZ8gPiBqaXNla2lcIDsKK+WxseW+hCA+IHNhbmtlaVwgOwor55Kw5r+gID4ga2FuZ291XCA7Civpp4TniakgPiBkYW1vbm9cIDsKK+iEseawtCA+IGRhc3N1aVwgOwor6LGq6YGKID4gZ291eXV1XCA7Civpo5vouo0gPiBoaXlha3VcIDsKK+mrmOWDpyA+IGtvdXNvdVwgOwor6Ie05ZG9ID4gY2hpbWVpXCA7CivkubHphZQgPiByYW5zdWlcIDsKK+S5semFkiA+IHJhbnNodVwgOwor6IiO5YWEID4gc2hha2VpXCA7Civku7Doh6UgPiBneW91Z2FcIDsKK+eVquWkliA+IGJhbmdhaVwgOwor5bKp5aGpID4gZ2FuJydlblwgOwor55Sf5oiQID4gc2Vpc2VpXCA7CivlgY/lnKggPiBoZW56YWlcIDsKK+S6i+i3oSA+IGppc2VraVwgOwor5L2V55WqID4gbmFuYmFuXCA7Civmm7jpoqggPiBzaG9mdXVcIDsKK+iEs+atuyA+IG5vdXNoaVwgOwor5LqM6LazID4gbmlzb2t1XCA7CivlrpfnpZYgPiBzaHV1c29cIDsKK+e+vemiqCA+IGhha2F6ZVwgOwor6LGq6L6yID4gZ291bm91XCA7Civls7bkurogPiB0b3VqaW5cIDsKK+S+oOawlyA+IGt5b3VraVwgOwor55S75bmFID4gZ2FmdWt1XCA7CivmnInpmZAgPiB5dXVnZW5cIDsKK+abuOmhniA+IHNob3J1aVwgOwor6aaZ55uSID4ga291Z291XCA7CivnlLvluLMgPiBnYWNob3VcIDsKK+eUn+aGjiA+IGFpbmlrdVwgOwor6auY5YCkID4gdGFrYW5lXCA7CivkuK3po5sgPiBjaHV1aGlcIDsKK+aeneiRiSA+IHNoaXlvdVwgOwor6LC36ZaTID4gdGFuaW1hXCA7CivkuqToqaIgPiBrb3VqdW5cIDsKK+S4uemdkiA+IHRhbnNlaVwgOwor5p2x6KW/ID4gdG91emFpXCA7Civoh63lkbMgPiBzaHV1bWlcIDsKK+eQtOe3miA+IGtpbnNlblwgOwor6IOh55OcID4ga3l1dXJpXCA7Civlho3jgIUgPiBzYWlzYWlcIDsKK+mjm+i2iiA+IGhpZXRzdVwgOwor55Sf5oWLID4gc2VpdGFpXCA7Civls7bkuLsgPiB0b3VzaHVcIDsKK+adpeirhyA+IHJhaWRhblwgOwor5YCJ5bupID4gc291cmluXCA7CivohZDmnL0gPiBmdWt5dXVcIDsKK+WuieepjyA+IGFuJydub25cIDsKK+WApOWuiSA+IG5leWFzdVwgOwor5Luj6ImmID4gZGFpa2FuXCA7Civlr7jms5UgPiBzdW5wb3VcIDsKK+iDjuebpCA+IHRhaWJhblwgOwor6ICB6L6yID4gcm91bm91XCA7CivkubHpgKAgPiByYW56b3VcIDsKK+WCjeS6uiA+IGJvdWppblwgOwor5bGI5oyHID4ga3Vzc2hpXCA7CivogrLnqK4gPiBpa3VzaHVcIDsKK+aknOWVjyA+IGtlbm1vblwgOwor5qKF5p6XID4gYmFpcmluXCA7CivmnKjph5ggPiBraWt1Z2lcIDsKK+aciemWkSA+IHl1dWthblwgOwor55So5b+DID4geW91amluXCA7CivnlLflt6UgPiBkYW5rb3VcIDsKK+ixvOiyhSA+IGhpa3l1dVwgOwor5pyI6ZaTID4gZ2Vra2FuXCA7CivlsbHlt5MgPiBzYW50ZW5cIDsKK+S7j+iRrCA+IGJ1c3NvdVwgOwor5YCf5a62ID4gc2hha2thXCA7Civmm7jpnaIgPiBzaG9tZW5cIDsKK+WxseW2uiA+IHNhbnJlaVwgOwor5p2l6KiqID4gcmFpaG91XCA7CivkuK3pn7MgPiBjaHV1b25cIDsKK+eUqOW9uSA+IHlvdWVraVwgOwor54+q6Je7ID4ga2Vpc291XCA7CivotIjnrZQgPiB6b3V0b3VcIDsKK+iAgei8qSA+IHJvdWhhaVwgOwor6IG+6ICFID4gcm91c2hhXCA7CivmoZHmtbcgPiBzb3VrYWlcIDsKK+Wwj+alryA+IGtvZGF0ZVwgOwor5p+x56SOID4gY2h1dXNvXCA7CivppIronIIgPiB5b3Vob3VcIDsKK+Wun+ebuCA+IGppc3NvdVwgOwor5LqL6LGhID4gamlzaG91XCA7Civlr5LngrkgPiBrYW50ZW5cIDsKK+iBmuiQvSA+IGp1cmFrdVwgOwor5qSc5ZOBID4ga2VucGluXCA7CivlhoXjgIUgPiBuYWluYWlcIDsKK+WBtuWDjyA+IGd1dXpvdVwgOwor5a2Y572uID4gc29uY2hpXCA7CivmnKzpgrggPiBob250ZWlcIDsKK+S9k+ePviA+IHRhaWdlblwgOwor55Wq5ZywID4gYmFuY2hpXCA7CivmnbHooYwgPiB0b3Vrb3VcIDsKK+acrOmCpiA+IGhvbnBvdVwgOwor55Sy5behID4ga291anVuXCA7CivmnaXoprMgPiByYWlrYW5cIDsKK+mkiuialSA+IHlvdXNhblwgOwor5pys6YG4ID4gaG9uc2VuXCA7CivpoL3pvaIgPiB0YWlyZWlcIDsKK+eSsOa1tyA+IGthbmthaVwgOwor5pyo6YOoID4gbW9rdWJ1XCA7CivmoYPmupAgPiB0b3VnZW5cIDsKK+acrOmBkyA+IGhvbmRvdVwgOwor5bGF5omAID4ga3lvc2hvXCA7CivpoqjpiLQgPiBmdXVyaW5cIDsKK+i3r+W6iiA+IHJvc2hvdVwgOwor5YG95L2cID4gZ2lzYWt1XCA7CivkubHou40gPiByYW5ndW5cIDsKK+iznue+jiA+IHNob3ViaVwgOwor5bGV5oCnID4gdGVuc2VpXCA7Civosq/olLUgPiBjaG96b3VcIDsKK+WwguaoqiA+IHNlbicnb3VcIDsKK+WwguaoqSA+IHNlbmtlblwgOwor5YCh5ammID4gc2hvdWZ1XCA7CivmnJ3ph44gPiBjaG91eWFcIDsKK+iDmuePoCA+IGhhaXNodVwgOwor5pyq6YCyID4gbWlzaGluXCA7CivkvJHnrKYgPiBreXV1ZnVcIDsKK+eUn+W9qSA+IHNlaXNhaVwgOwor6aKo6YeHID4gZnV1c2FpXCA7Civog47nlJ8gPiB0YWlzZWlcIDsKK+eUo+W7gyA+IHNhbnBhaVwgOwor5Luk6IGeID4gcmVpYnVuXCA7Civkv7PlvoogPiBoYWlrYWlcIDsKK+iHquWKmyA+IGppcmlraVwgOwor5L+C5pWwID4ga2Vpc3V1XCA7CivkuK3pmbAgPiBjaHV1aW5cIDsKK+aknOWNsCA+IGtlbicnaW5cIDsKK+eUuuWutiA+IGNob3VrYVwgOwor5bCR5p6XID4gc2hvcmluXCA7CivlgaXlhaggPiBrZW56ZW5cIDsKK+WBj+WQkSA+IGhlbmtvdVwgOwor5a+u5q+NID4gcnlvdWJvXCA7CivoiIjkuqEgPiBrb3Vib3VcIDsKK+eUu+WtpiA+IGdhZ2FrdVwgOwor5bCG5qOLID4gc2hvdWdpXCA7CivkupLop5IgPiBnb2tha3VcIDsKK+izque0oCA+IHNoaXNzb1wgOwor5qC55rqQID4ga29uZ2VuXCA7Civmn7PnnIkgPiByeXV1YmlcIDsKK+S6ieirliA+IHNvdXJvblwgOwor6LWw5rOVID4gc291aG91XCA7CivkuIrpqLAgPiBqb3V0b3VcIDsKK+WxseWutiA+IHlhbWFnYVwgOwor5Lya56S+ID4ga2Fpc2hhXCA7Civlrp/nlJ8gPiBtaXNob3VcIDsKK+acq+i8qSA+IG1hcHBhaVwgOwor5bGe5beuID4gem9rdXNhXCA7CivkuI3pprQgPiBmdW5hcmVcIDsKK+eUn+W5tCA+IHNlaW5lblwgOwor6aiS5pO+ID4gc291am91XCA7CivmpL/kuosgPiBjaGluamlcIDsKK+WvruatjCA+IHJ5b3VrYVwgOwor6aaW54+tID4gc2h1aGFuXCA7CivlrprnlaogPiB0ZWliYW5cIDsKK+WBtuS6uiA+IGd1dWppblwgOwor55S35a2QID4gZGFuc2hpXCA7Civku6PnvbIgPiBkYWlzaG9cIDsKK+S7o+e9riA+IGRhaWNoaVwgOwor6IK655mMID4gaGFpZ2FuXCA7CivkvqHmoLwgPiBrYWtha3VcIDsKK+iHqOWGmSA+IHJpbnNoYVwgOwor5a6Y55WMID4ga2Fua2FpXCA7CivppYznsbMgPiBzZW5tYWlcIDsKK+i2o+aXqCA+IHNodXNoaVwgOwor5LuK6IisID4ga29ucGFuXCA7CivlsIrmnaUgPiBzb25yYWlcIDsKK+air+W9oiA+IHRlaWtlaVwgOwor6L2f44CFID4gZ291Z291XCA7CivohqjlpKcgPiBib3VkYWlcIDsKK+S6jOimiyA+IGZ1dGFtaVwgOwor6Ieq5YSYID4gamltYW1hXCA7CivmnpzogokgPiBrYW5pa3VcIDsKK+aknOWIhiA+IGtlbmJ1blwgOwor5Lih6ZmiID4gcnlvdWluXCA7CivnlLLlrZAgPiBrYXNzaGlcIDsKK+S4gOmpmiA+IGlra3lvdVwgOwor5bCR5pmCID4gc2hvdWppXCA7CivkupTooYwgPiBnb2d5b3VcIDsKK+e+pOmdkiA+IGd1bmpvdVwgOwor6Iez5L6/ID4gc2hpYmVuXCA7CivlsIrmm7ggPiBzb25zaG9cIDsKK+S6iOimmiA+IHlva2FrdVwgOwor5bCP5pi8ID4ga29oaXJ1XCA7CivkvZXngrkgPiBuYW50ZW5cIDsKK+abnemcsiA+IGJha3Vyb1wgOwor5bCP5pilID4ga29oYXJ1XCA7CivkvZnngJ0gPiB5b3Jla2lcIDsKK+WuneePoCA+IGhvdXNodVwgOwor5a++5qChID4gdGFpa291XCA7CivlrZDntLAgPiBzaGlzYWlcIDsKK+eMrumljCA+IGtlbnNlblwgOwor5L+h5b6SID4gc2hpbnRvXCA7Civnlarlj7cgPiBiYW5nb3VcIDsKK+eVquWPsCA+IGJhbmRhaVwgOwor5LiA6aeEID4gaWNoaWRhXCA7CivohIfmr5sgPiB3YWtpZ2VcIDsKK+mhnumhjCA+IHJ1aWRhaVwgOwor5puc6ZyKID4geW91cmVpXCA7CivmoLnmsrsgPiBrb25jaGlcIDsKK+WvuuagvCA+IGppa2FrdVwgOwor5YGJ5YqbID4gaXJ5b2t1XCA7Civlr6HmrLIgPiBrYXlva3VcIDsKK+aciemFjSA+IHl1dWhhaVwgOwor6Ie05LuVID4gY2hpc2hpXCA7CivkuZfou4ogPiBqb3VzaGFcIDsKK+iHquS/riA+IGppc2h1dVwgOwor6Ieq5L+hID4gamlzaGluXCA7Civku5Xnva4gPiBzaGlva2lcIDsKK+miqOi7iiA+IGZ1dXNoYVwgOwor5pqX6buZID4gYW5tb2t1XCA7CivlsbHlpbMgPiB5YW1hbWVcIDsKK+S6rOiRiSA+IGtlaXlvdVwgOwor5pqX6buSID4gYW5rb2t1XCA7CivlsIHmm7ggPiBmdXVzaG9cIDsKK+S7j+iAhSA+IGJ1c3NoYVwgOwor5qOE5a2QID4gc3V0ZWdvXCA7CivlgLnlkJ0gPiBrZW5yaW5cIDsKK+iDuOazsyA+IGt5b3VlaVwgOwor5bGe5a6YID4gem9ra2FuXCA7CivlgJLlo4ogPiB0b3VrYWlcIDsKK+iHquS+myA+IGppa3lvdVwgOwor5LiJ6Z+TID4gc2Fua2FuXCA7CivkuojooaggPiB5b2h5b3VcIDsKK+S4h+mggyA+IGJhbmtlaVwgOwor5LiA6aObID4gaWNoaWhpXCA7Civotbfmpa0gPiBraWd5b3VcIDsKK+WBj+WFiSA+IGhlbmtvdVwgOwor5qGU5qKXID4ga2lreW91XCA7CivmoLnmr5sgPiBrb25tb3VcIDsKK+S9mea7tCA+IHlvdGVraVwgOwor5YCN5aSnID4gYmFpZGFpXCA7Civoh6rkvZwgPiBqaXNha3VcIDsKK+iCsueUnyA+IGlrdXNlaVwgOwor55S75aKDID4gZ2FreW91XCA7CivmnKjos4ogPiB0b2t1c2FcIDsKK+WwiuaVrCA+IHNvbmtlaVwgOwor55S35aOwID4gZGFuc2VpXCA7CivkuIrpnaIgPiBqb3VtZW5cIDsKK+WxheW4uCA+IGt5b2pvdVwgOwor5Luj57SNID4gZGFpbm91XCA7Civlr5LmsJcgPiBzYW11a2VcIDsKK+iHs+S4iiA+IHNoaWpvdVwgOwor5LiJ6Z2iID4gc2FubWVuXCA7CivlsIrmlJggPiBzb25qb3VcIDsKK+WBnOS8miA+IHRlaWthaVwgOwor5YCN5aKXID4gYmFpem91XCA7CivmpJzkvr8gPiBrZW5iZW5cIDsKK+eUn+WtmCA+IHNlaXpvblwgOwor5bGR5bGLID4ga3V6dXlhXCA7CivpoZjpnaIgPiBnYW5tZW5cIDsKK+WxseWhniA+IHNhbnNhaVwgOwor6aKo6LajID4gZnV1c2h1XCA7CivnlLLlo7AgPiBrYW5nb2VcIDsKK+aatOmosCA+IGJvdXRvdVwgOwor5bGx5aGKID4gc2Fua2FpXCA7CivlsILmlq0gPiBzZW5kYW5cIDsKK+iDuOavmyA+IG11bmFnZVwgOwor5bGx5aC0ID4geWFtYWJhXCA7CivlsY/lsYUgPiBoZWlreW9cIDsKK+S4h+mbtyA+IGJhbnJhaVwgOwor5qSc5L2TID4ga2VudGFpXCA7CivlrpjniYggPiBrYW5wYW5cIDsKK+S4iemajiA+IHNhbmdhaVwgOwor5a+d5qeYID4gbmV6YW1hXCA7CivpoZTpnaIgPiBnYW5tZW5cIDsKK+S4iumZkCA+IGpvdWdlblwgOwor5pyL6LypID4gaG91YmFpXCA7CivlsILmlLsgPiBzZW5rb3VcIDsKK+S7geiAhSA+IGppbnNoYVwgOwor55Wq5YW1ID4gYmFucGVpXCA7CivkubHoppYgPiByYW5zaGlcIDsKK+acneizgCA+IGNob3VnYVwgOwor5a++5pWwID4gdGFpc3V1XCA7Civlr6nmn7sgPiBzaGluc2FcIDsKK+WvnealrSA+IG5ld2F6YVwgOwor5pys6KuWID4gaG9ucm9uXCA7CivlgJ/llY8gPiBzaGFtb25cIDsKK+abvumBiiA+IHNvdXl1dVwgOwor6Iej5LqLID4gc2hpbmppXCA7CivnkKLno6ggPiB0YWt1bWFcIDsKK+iFueWtkCA+IGhhcmFrb1wgOwor5qGf5pW3ID4gc2FqaWtpXCA7Civlr77mlK8gPiB0YWlzaGlcIDsKK+mkiuiCsiA+IHlvdWlrdVwgOwor6aKo6LKMID4gZnV1Ym91XCA7CivkvK/niLYgPiBoYWt1ZnVcIDsKK+acrOiqjCA+IGhvbnNoaVwgOwor5a2Q56iuID4ga29kYW5lXCA7Civku5TntLAgPiBzaGlzYWlcIDsKK+adseiIqiA+IHRvdWtvdVwgOwor5bCP5oyHID4ga295dWJpXCA7CivmnIDov5EgPiBzYWlraW5cIDsKK+acquiqrSA+IG1pZG9rdVwgOwor5Luu56ewID4ga2FzaG91XCA7CivkvZPmtrIgPiB0YWlla2lcIDsKK+S4gOmauyA+IGlzc2VraVwgOwor5a+45patID4gc3VuZGFuXCA7CivnlJ/lp5wgPiBzaG91Z2FcIDsKK+S4iemWgCA+IHNhbm1vblwgOwor6ICB6KGwID4gcm91c3VpXCA7Civoi5vjgIUgPiBpcmFpcmFcIDsKK+S9jua4myA+IHRlaWdlblwgOwor6Iej5LiLID4gc2hpbmthXCA7CivlgKHlkowgPiBzaG91d2FcIDsKK+acquipsyA+IG1pc2hvdVwgOwor6IWQ5b+DID4gZnVzaGluXCA7CivmmrTpoqggPiBib3VmdXVcIDsKK+S9meayoiA+IHlvdGFrdVwgOwor5a6a54K5ID4gdGVpdGVuXCA7Civmm7jpgZMgPiBzaG9kb3VcIDsKK+S4remDqCA+IGNodXVidVwgOwor5YGP5Lq6ID4gaGVuamluXCA7CivlgKbljq0gPiBrZW4nJ2VuXCA7Civlrabnm6MgPiBnYWtrYW5cIDsKK+mkiuiAgSA+IHlvdXJvdVwgOwor6IKM552AID4gaGFkYWdpXCA7CivnlKPlo7AgPiB1YnVnb2VcIDsKK+mjtOiJsiA+IGFtZWlyb1wgOwor55Sw5ZywID4gZGVuY2hpXCA7CivmnJ3orbAgPiBjaG91Z2lcIDsKK+eUsOWckiA+IGRlbicnZW5cIDsKK+Wwj+aIkSA+IHNob3VnYVwgOwor5amm6ZW3ID4gZnVjaG91XCA7CivpppnmuK8gPiBob25rb25cIDsKK+aiteWmuyA+IGJvbnNhaVwgOwor5qGC5p6XID4ga2VpcmluXCA7CivkuIDplpMgPiBoaXRvbWFcIDsKK+WtmOefpSA+IHpvbmNoaVwgOwor5Lit6YCUID4gY2h1dXRvXCA7CivnkLrnka8gPiBob3Vyb3VcIDsKK+eUu+WVhiA+IGdhc2hvdVwgOwor5p2l6IiqID4gcmFpa291XCA7CivpoLvpoLsgPiBoaW5waW5cIDsKK+Wwu+WwviA+IHNoaXBwb1wgOwor5qCh5q2jID4ga291c2VpXCA7CivkvovmlocgPiByZWlidW5cIDsKK+eUmuWkpyA+IGppbmRhaVwgOwor5L6L5pWwID4gcmVpc3V1XCA7CivkuozokYkgPiBmdXRhYmFcIDsKK+mjvOiCsiA+IHNoaWlrdVwgOwor5L+z5aOHID4gaGFpZGFuXCA7Civlsa/llrYgPiB0b24nJ2VpXCA7CivmnaXoh6ggPiByYWlyaW5cIDsKK+aiteWkqSA+IGJvbnRlblwgOwor55So5ZywID4geW91Y2hpXCA7CivosrTntLMgPiBraXNoaW5cIDsKK+aatOmcsiA+IGJha3Vyb1wgOwor5a+S5qKFID4ga2FuYmFpXCA7CivmoLnmn6IgPiBrb250ZWlcIDsKK+WwhOaJiyA+IHNoYXNodVwgOwor5L2V5q2zID4gbmFuc2FpXCA7CivnkbbmsaAgPiB5b3VjaGlcIDsKK+WtpueVjCA+IGdha2thaVwgOwor5qCX5q+bID4ga3VyaWdlXCA7CivlsIrmha4gPiBzb25yeW9cIDsKK+S9j+awkSA+IGp1dW1pblwgOwor6ama5ZacID4ga3lvdWtpXCA7CivlsJHmgakgPiBzaG91b25cIDsKK+eUo+WcsCA+IHNhbmNoaVwgOwor5L+X5a2XID4gem9rdWppXCA7Civlr77mipcgPiB0YWlrb3VcIDsKK+S8geeUuyA+IGtpa2FrdVwgOwor55SY5aGpID4gYW1hamlvXCA7CivotaTmnKwgPiBha2Fob25cIDsKK+miqOinoyA+IGZ1dWthaVwgOwor5L215pyJID4gaGVpeXV1XCA7CivlsYvlpJYgPiBva3VnYWlcIDsKK+mmrOaphyA+IGJhc29yaVwgOwor5Lit6LqrID4gbmFrYW1pXCA7CivnkIbnpZ4gPiByaXNoaW5cIDsKK+S9s+acqCA+IGthYm9rdVwgOwor5qC55pysID4gbmVtb3RvXCA7CivogZbnrpcgPiBzZWlzYW5cIDsKK+S6uue1uSA+IGppbmtlblwgOwor5Li76LOTID4gc2h1aGluXCA7CivnlJ/lnLAgPiBzZWljaGlcIDsKK+miqOimiyA+IGthemFtaVwgOwor5a++5oimID4gdGFpc2VuXCA7Civku5bnp7AgPiB0YXNob3VcIDsKK+acm+imiyA+IGJvdWtlblwgOwor6aaZ5rC0ID4ga291c3VpXCA7Civlr5LmnZEgPiBrYW5zb25cIDsKK+adieiPnCA+IHN1Z2luYVwgOwor55WZ5L+dID4gcnl1dWhvXCA7Civog73mm7ggPiBub3VzaG9cIDsKK+S9nOalrSA+IHNhZ3lvdVwgOwor5LuY56WoID4gZnVoeW91XCA7CivlgKjlgrIgPiBreW9nb3VcIDsKK+agueaalyA+IG5la3VyYVwgOwor6Leh5ZywID4gYXRvY2hpXCA7Civkurrns54gPiBqaW5wdW5cIDsKK+WtpueQhiA+IGdha3VyaVwgOwor6ISz5oCnID4gbm91c2VpXCA7CivnlLvljKAgPiBnYXNob3VcIDsKK+S9mealrSA+IHlvZ3lvdVwgOwor5bCP5b2iID4ga29nYXRhXCA7Civkv6Hlo6sgPiBzaGluamlcIDsKK+iFq+WkpyA+IHNodWRhaVwgOwor5Lm+6I+cID4ga2Fuc2FpXCA7CivmnIjorJ0gPiBnZXNzaGFcIDsKK+WvhuagkyA+IG1pc3NlblwgOwor5a+S5pqWID4ga2FuZGFuXCA7Civlr5LmmpEgPiBrYW5zaG9cIDsKK+WtkOeZhyA+IHNoaWthblwgOwor6aKo6KKLID4gZnV1dGFpXCA7CivlgKXlgawgPiBrb3Vzb3VcIDsKK+Wwj+W8lSA+IHNob3VpblwgOwor5L2T5qeYID4gdGFpeW91XCA7CivkurrnsZ8gPiBqaW5yYWlcIDsKK+S4iemHjSA+IHNhbmp1dVwgOwor6LKh57WMID4gemFpa2VpXCA7CivlrZjnlJ8gPiB6b25qb3VcIDsKK+Wtl+eUuyA+IGppa2FrdVwgOwor5LiH6YeRID4gbWFua2luXCA7CivlsIrlvbEgPiBzb24nJ2VpXCA7CivmoLnmlrkgPiBuZWthdGFcIDsKK+eUqOWTgSA+IHlvdWhpblwgOwor5Luu55eFID4ga2VieW91XCA7CivkuIrphZIgPiBqb3VzaHVcIDsKK+Wul+a0viA+IHNodXVoYVwgOwor5a6a5rOVID4gam91aG91XCA7Civlrrbmpa0gPiBrYWd5b3VcIDsKK+eMrumHkSA+IGtlbmtpblwgOwor55Kw5oyHID4ga2Fuc2hpXCA7CivnlKjlkb0gPiB5b3VtZWlcIDsKK+iDoeakkiA+IGtvc2hvdVwgOwor6IGv55ufID4gcmVubWVpXCA7Civog4bmsYEgPiB0YW5qdXVcIDsKK+eQpeePgCA+IGtvaGFrdVwgOwor6IO95paHID4gbm91YnVuXCA7CivlsYXln44gPiBreW9qb3VcIDsKK+S4u+isgCA+IHNodWJvdVwgOwor5a6X5rOVID4gc291aG91XCA7CivlsI/luYUgPiBrb2hhYmFcIDsKK+WtpOeLrCA+IGtvZG9rdVwgOwor55Sj5ZOBID4gc2FucGluXCA7CivpoZjphZIgPiBnYW5zaHVcIDsKK+adsee1jCA+IHRvdWtlaVwgOwor5Lm+6Iq7ID4ga2Fuc3V1XCA7CivlrozmuIggPiBrYW5zYWlcIDsKK+S4jemBqSA+IGZ1dGVraVwgOwor5a+G5pu4ID4gbWlzc2hvXCA7CivogqHngasgPiBtYXRhYmlcIDsKK+mgiOmrryA+IHNodXplblwgOwor5bCO5birID4gZG91c2hpXCA7Civnvo7phpwgPiBiaXNodXVcIDsKK+WwguW+kyA+IHNlbmp1dVwgOwor5LiA6YeMID4gaWNoaXJpXCA7Civlr7XmhJsgPiBjaG91YWlcIDsKK+WuneauvyA+IGhvdWRlblwgOwor5Lmz6I+TID4gbnl1dWthXCA7CivlsI/lt64gPiBzaG91c2FcIDsKK+ePoOeulyA+IHNodXphblwgOwor5LiN6YCaID4gZnV0c3V1XCA7CivohLPlubkgPiBub3VrYW5cIDsKK+S+m+W/nCA+IGt5b3VvdVwgOwor546J6Je7ID4gdGFtYW1vXCA7Civogp3ngo4gPiBrYW4nJ2VuXCA7CivkuInpgbggPiBzYW5zZW5cIDsKK+Wwi+W4uCA+IGppbmpvdVwgOwor5L+u5Za2ID4gc2h1dWVpXCA7CivkuLnoqqAgPiB0YW5zZWlcIDsKK+iDoeahgyA+IGt1cnVtaVwgOwor5LiH6YKmID4gYmFucG91XCA7CivogIHojZggPiByb3Vzb3VcIDsKK+WumOawkSA+IGthbm1pblwgOwor5Lm+6Ii3ID4ga2FuZ2VuXCA7CivlsZ7lkI8gPiB6b2t1cmlcIDsKK+aeoeebriA+IG1hc3VtZVwgOwor5LiB6YWJID4gdGVpeXV1XCA7CivogZ7nn6UgPiBidW5jaGlcIDsKK+WutuagvCA+IGtha2FrdVwgOwor6LaK5b6MID4gZWNoaWdvXCA7CivnlJ/lkb0gPiBzZWltZWlcIDsKK+WwmuWwmiA+IG5hb25hb1wgOwor5LiJ6YCjID4gc2FucmVuXCA7CivnvqnotrMgPiBnaXNva3VcIDsKK+S4u+ioiCA+IHNodWtlaVwgOwor5qCh5pysID4ga291aG9uXCA7Civmmq7pkJggPiBib3Nob3VcIDsKK+WwgeW7uiA+IGhvdWtlblwgOwor5a++5b2TID4gdGFpdG91XCA7CivmnKjolK0gPiBrb2thZ2VcIDsKK+WAkuWDjyA+IHRvdXpvdVwgOwor576F6YedID4gcmFzaGluXCA7CivlsITlubggPiBzaGFrb3VcIDsKK+aiteWUhCA+IGJvbmJhaVwgOwor5LiK6L66ID4gam91aGVuXCA7CivkuIDpg60gPiBpa2tha3VcIDsKK+S4gOmDqCA+IGljaGlidVwgOwor5a6a5qy+ID4gdGVpa2FuXCA7CivkvZXmnpogPiBuYW5tYWlcIDsKK+WvuOW/lyA+IHN1bnNoaVwgOwor5L2e5pm6ID4gbmVpY2hpXCA7CivkuLvoprMgPiBzaHVrYW5cIDsKK+WutuafhCA+IGllZ2FyYVwgOwor5bCP5bO2ID4ga29qaW1hXCA7CivmnKzokawgPiBob25zb3VcIDsKK+eUo+WNtSA+IHNhbnJhblwgOwor5Lq656iuID4gamluc2h1XCA7CivlrozmsrsgPiBrYW5jaGlcIDsKK+S9leadoSA+IG5hbmpvdVwgOwor5Li76KaBID4gc2h1eW91XCA7Civku6PnlKggPiBkYWl5b3VcIDsKK+abuOiqjCA+IHNob3NoaVwgOwor55Sy5YW1ID4ga291aGVpXCA7CivkvK/mr40gPiBoYWt1Ym9cIDsKK+S/s+WQjSA+IGhhaW1laVwgOwor5a6f5qipID4gamlra2VuXCA7Civkv7Plj7cgPiBoYWlnb3VcIDsKK+i2iuW6piA+IG9jaGlkb1wgOwor6aOb57+UID4gaGlzaG91XCA7Civkuojnv5IgPiB5b3NodXVcIDsKK+e+qeiziiA+IGdpem9rdVwgOwor5a+d5oqAID4gbmV3YXphXCA7CivlsI/lsbEgPiBrb3lhbWFcIDsKK+S4iei8qiA+IHNhbnJpblwgOwor5bCK5bSHID4gc29uc3V1XCA7Civkv7Plj4sgPiBoYWl5dXVcIDsKK+S4gOmAsSA+IGlzc2h1dVwgOwor5LyR5ryUID4ga3l1dWVuXCA7CivkuIDpgJogPiBpdHRzdXVcIDsKK+iEh+aIuCA+IHdha2lkb1wgOwor5LiJ6Lu9ID4gc2Fua2VpXCA7CivlsL/lmaggPiBueW91a2lcIDsKK+WvneaJgCA+IHNoaW5qb1wgOwor5bCo5aSnID4gYm91ZGFpXCA7CivkuInou40gPiBzYW5ndW5cIDsKK+eLremcpyA+IHNhZ2lyaVwgOwor5a2Q54yrID4ga29uZWtvXCA7CivmoLnmi6AgPiBrb25reW9cIDsKK+WvoeaFviA+IGtheW9rdVwgOwor5LqV57axID4gaWR6dW5hXCA7CivkuIfou40gPiBiYW5ndW5cIDsKK+mpleWFkCA+IGt5b3VqaVwgOwor6LGq6IOGID4gZ291dGFuXCA7CivmnbHnq68gPiB0b3V0YW5cIDsKK+acrOiNiSA+IGhvbnpvdVwgOwor55Sf5YuVID4gc2VpZG91XCA7Civosrvnm64gPiBoaW1va3VcIDsKK+abuOimiyA+IHNob2tlblwgOwor5LuZ55WMID4gc2Vua2FpXCA7CivlrpjmqKkgPiBrYW5rZW5cIDsKK+abtOiogiA+IGtvdXRlaVwgOwor55Sj5YmNID4gc2FuemVuXCA7CivlsI/lrrQgPiBzaG91ZW5cIDsKK+eOieiPnCA+IHRhbWFuYVwgOwor55Sj5Yi2ID4gc2Fuc2VpXCA7CivlrZTniYggPiBrb3VoYW5cIDsKK+acq+iMtiA+IG1hdGNoYVwgOwor6aOv57GzID4gaGFubWFpXCA7CivpoIbpoqggPiBqdW5wdXVcIDsKK+acseiJsiA+IHNodWlyb1wgOwor5a6f5qScID4gamlra2VuXCA7CivkvJ3ms5UgPiBkZW5wb3VcIDsKK+eUu+S8ryA+IGdhaGFrdVwgOwor55So5YW1ID4geW91aGVpXCA7Civni63pmpggPiBreW91YWlcIDsKK+eNo+ihjCA+IGp1dWtvdVwgOwor5LiN6LazID4gZnVzb2t1XCA7Civos4fnlKMgPiBzaGlzYW5cIDsKK+WrgeiPnCA+IHlvbWVuYVwgOwor5LqU57WMID4gZ29reW91XCA7Civpp4XmiYsgPiBla2lzaHVcIDsKK+WsieeskSA+IGtpc2hvdVwgOwor5LqL57i+ID4gamlzZWtpXCA7CivnlJ/liY0gPiBzZWl6ZW5cIDsKK+ajhOWFkCA+IHN1dGVnb1wgOwor5a2Q54mbID4ga291c2hpXCA7Civku5bnlJ8gPiB0YXNob3VcIDsKK+S4i+i2syA+IGdlc29rdVwgOwor5L2V5pa5ID4gZG9uYXRhXCA7CivosZroiI4gPiB0b25zaGFcIDsKK+i2s+WgtCA+IGFzaGliYVwgOwor5a625pePID4ga2F6b2t1XCA7CivpoIbpoIYgPiBqdW5qdW5cIDsKK+S4gOi6qyA+IGlzc2hpblwgOwor5pys6Ii5ID4gaG9uc2VuXCA7CivogqXmsoMgPiBoaXlva3VcIDsKK+WvvuWyuCA+IHRhaWdhblwgOwor5qKx5YyFID4ga29ucG91XCA7CivkuIDoubQgPiBpc3NodXVcIDsKK+ael+eUoyA+IHJpbnNhblwgOwor5Lq655+lID4gamluY2hpXCA7CivnvbDph5EgPiBiYWtraW5cIDsKK+WutuaVmSA+IGtha3lvdVwgOwor5Luk54q2ID4gcmVpam91XCA7CivkvovlubQgPiByZWluZW5cIDsKK+eLremWkyA+IGhhemFtYVwgOwor6ISb5be+ID4gaGFiYWtpXCA7CivotqPlpb0gPiBzaHVrb3VcIDsKK+WxpeS/riA+IHJpc2h1dVwgOwor5L+h5Y+XID4gc2hpbmp1XCA7Civohp3kuIsgPiBzaGlra2FcIDsKK+S6jOe0miA+IG5pa3l1dVwgOwor6LWr5oCSID4ga2FrdWRvXCA7CivmnKzohrMgPiBob256ZW5cIDsKK+i1t+W6iiA+IGtpc2hvdVwgOwor5LiA6LevID4gaWNoaXJvXCA7CivohIbmgKcgPiB6ZWlzZWlcIDsKK+S9k+aTjSA+IHRhaXNvdVwgOwor5L2/5b25ID4gc2hpZWtpXCA7CivkuK3ooZsgPiBjaHV1ZWlcIDsKK+aZqemkkCA+IGJhbnNhblwgOwor5LuL55SyID4ga2Fpa291XCA7Civogp3msrkgPiBrYW4nJ3l1XCA7CivlsbHkuIogPiBzYW5qb3VcIDsKK+e+pOirliA+IGd1bnJvblwgOwor5bCP5aeTID4ga29zaG91XCA7CivnlKjkvr8gPiB5b3ViZW5cIDsKK+S/s+WEqiA+IGhhaXl1dVwgOwor5LuK55SfID4ga29uam91XCA7CivlsJHlpbMgPiBzaG91am9cIDsKK+S6uuebuCA+IG5pbnNvdVwgOwor5LqI57SEID4geW95YWt1XCA7CivkvpvlrrQgPiBreW91ZW5cIDsKK+S6uuebriA+IGhpdG9tZVwgOwor55So5L6LID4geW91cmVpXCA7CivnlJjlhZogPiBhbWF0b3VcIDsKK+iyp+ebuCA+IGhpbnNvdVwgOwor6IOM5pmvID4gaGFpa2VpXCA7Civpp5LluqcgPiBrb21hemFcIDsKK+S/l+WQjyA+IHpva3VyaVwgOwor5a6J5qW9ID4gYW5yYWt1XCA7CivmoLnmgKcgPiBrb25qb3VcIDsKK+WwluWhlCA+IHNlbnRvdVwgOwor5LiW6KmVID4gc2VoeW91XCA7CivkuZfoiaYgPiBqb3VrYW5cIDsKK+S4puihjCA+IGhlaWtvdVwgOwor54+t55SwID4gaGFuZGVuXCA7CivmnInok4sgPiB5dXVnYWlcIDsKK+S7lOeMqyA+IGtvbmVrb1wgOwor5a6a5pysID4gdGVpaG9uXCA7CivnlKjku7YgPiB5b3VrZW5cIDsKK+S5l+iIuSA+IGpvdXNlblwgOwor6aiw5YuiID4gdG91c2VpXCA7Civlrp/mma8gPiBqaWtrZWlcIDsKK+Wxi+WGhSA+IG9rdW5haVwgOwor5a2m5rS+ID4gZ2FrdWhhXCA7CivpoqjoiLkgPiBmdXVzZW5cIDsKK+eUqOS6uiA+IHlvdW5pblwgOwor5p+U5q+bID4ganV1bW91XCA7CivmnaXnpL4gPiByYWlzaGFcIDsKK+ePvueKtiA+IGdlbmpvdVwgOwor6Z+z6Z+/ID4gb25reW91XCA7CivmnKjogowgPiBraWhhZGFcIDsKK+WwiuWkpyA+IHNvbmRhaVwgOwor6ISz5aSpID4gbm91dGVuXCA7CivlqprolqwgPiBiaXlha3VcIDsKK+miqOiHtCA+IGZ1dWNoaVwgOwor5LiN6Kq/ID4gZnVjaG91XCA7Civlr53luoogPiBuZWRva29cIDsKK+afkOawjyA+IGJvdXNoaVwgOwor5LqU56mAID4gZ29rb2t1XCA7CivkuJbopbIgPiBzZXNodXVcIDsKK+iAgee3tCA+IHJvdXJlblwgOwor55Sf5L2TID4gc2VpdGFpXCA7Civku5TniZsgPiBrb3VzaGlcIDsKK+S4jeipsyA+IGZ1c2hvdVwgOwor5a6f5pa9ID4gamlzc2hpXCA7CivpoLjovKogPiBrdWJpd2FcIDsKK+S4h+isnSA+IGJhbnNoYVwgOwor5LiJ6KuWID4gc2Fucm9uXCA7CivkuI3oqZUgPiBmdWh5b3VcIDsKK+S/l+WLmSA+IHpva3VtdVwgOwor6aeF5byBID4gZWtpYmVuXCA7CivmmanpnJwgPiBiYW5zb3VcIDsKK+S+oOWlsyA+IGt5b3Vqb1wgOwor5pys572yID4gaG9uc2hvXCA7Civlr53lt7sgPiBuZW1ha2lcIDsKK+adkeerpSA+IHNvbmRvdVwgOwor5a6f5pWwID4gamlzc3V1XCA7Civog73lvIEgPiBub3ViZW5cIDsKK+S6uueUnyA+IGppbnNlaVwgOwor5a6I5qCqID4gc2h1c2h1XCA7CivkvZXmiY0gPiBuYW5zYWlcIDsKK+S6ieerryA+IHNvdXRhblwgOwor5qC55bqVID4ga29udGVpXCA7CivkuK3omIcgPiBjaHV1c29cIDsKK+S4gOitsCA+IGljaGlnaVwgOwor5Ly05pifID4gYmFuc2VpXCA7Civpo5vnq5wgPiBoaXJ5dXVcIDsKK+agueW5uSA+IGtvbmthblwgOwor6LWk5bi9ID4gYWthYm91XCA7CivlsI/lnosgPiBrb2dhdGFcIDsKK+mkiueUnyA+IHlvdWpvdVwgOwor5p2v55ukID4gaGFpYmFuXCA7CivmmrTotbAgPiBib3Vzb3VcIDsKK+S4iuioiCA+IGpvdWtlaVwgOwor5bCK5aCCID4gc29uZG91XCA7CivmoLzlt64gPiBrYWt1c2FcIDsKK+WwguWjsiA+IHNlbmJhaVwgOwor5a6/5oSPID4gc2h1a3VpXCA7CivkuI3oppogPiBmdWtha3VcIDsKK+S/s+S6uiA+IGhhaWppblwgOwor5a6M5pysID4ga2FucG9uXCA7CivogLPnm64gPiBqaW1va3VcIDsKK+WumuaVsCA+IHRlaXN1dVwgOwor5L2e5oKqID4gbmVpYWt1XCA7Civkv6/kvI8gPiBmdWZ1a3VcIDsKK+eMruipoCA+IGtlbicnZWlcIDsKK+WvjOW8tyA+IGZ1a3lvdVwgOwor6aiZ5Y+WID4gaGVuc2h1XCA7Civkv6/ku7AgPiBmdWd5b3VcIDsKK+S4iuimpyA+IGpvdXJhblwgOwor5LiH6KiAID4gbWFuZ2VuXCA7Civlr77lpJYgPiB0YWlnYWlcIDsKK+S9j+aJgCA+IGp1dXNob1wgOwor6LKh55WMID4gemFpa2FpXCA7CivogJXnqK4gPiBrb3VzaHVcIDsKK+miqOiBniA+IGZ1dWJ1blwgOwor5LiK6KaGID4gdXdhb29pXCA7CivlrrnmhYsgPiB5b3VkYWlcIDsKK+WwhOWgtCA+IHNoYWpvdVwgOwor5bGN5L2TID4gc2hpdGFpXCA7CivosqHnlKMgPiB6YWlzYW5cIDsKK+S4gOiqniA+IGljaGlnb1wgOwor5a+S5bivID4ga2FudGFpXCA7Civlr7Xlp6sgPiBjaG91a2lcIDsKK+eMruiogCA+IGtlbmdlblwgOwor5Lyd5p+TID4gZGVuc2VuXCA7Civlr6HlsJEgPiBrYXNob3VcIDsKK+S4oeiZjiA+IHJ5b3Vrb1wgOwor54yl6KuHID4gd2FpZGFuXCA7CivotorlooMgPiBla2t5b3VcIDsKK+Wwj+WZqCA+IHNob3VraVwgOwor5LiK6KO9ID4gam91c2VpXCA7CivmnKznt5ogPiBob25zZW5cIDsKK+S8jualvSA+IGdpZ2FrdVwgOwor5L2T5oSfID4gdGFpa2FuXCA7Civkv5flhJIgPiB6b2t1anVcIDsKK+S5g+iHsyA+IG5haXNoaVwgOwor5LiK6KOBID4gam91c2FpXCA7CivkvJ3mnaUgPiBkZW5yYWlcIDsKK+iJsuOAhSA+IGlyb2lyb1wgOwor5a+d5bCPID4gbmVzaG91XCA7CivmnKzntbkgPiBob25rZW5cIDsKK+mjr+ebkiA+IGhhbmdvdVwgOwor5LiL6KGoID4ga2FoeW91XCA7Civos6TmsJEgPiBzZW5taW5cIDsKK+WxheS9jyA+IGt5b2p1dVwgOwor6IWV5YmNID4gdWRlbWFlXCA7Civku67ms4ogPiBrYWhha3VcIDsKK+S9meW+syA+IHlvdG9rdVwgOwor5pys57SZID4gaG9uc2hpXCA7CivotqjlkJEgPiBzdXVrb3VcIDsKK+S9nuW8gSA+IG5laWJlblwgOwor5Lit6I+vID4gY2h1dWthXCA7CivkvZnlvpcgPiB5b3Rva3VcIDsKK+Wus+aCqiA+IGdhaWFrdVwgOwor5bCB5ZywID4gaG91Y2hpXCA7CivlrozmlZcgPiBrYW5wYWlcIDsKK+S6pOeVqiA+IGtvdWJhblwgOwor5L+a5L+XID4gcml6b2t1XCA7CivpoYzoqIAgPiBkYWlnZW5cIDsKK+Wxi+S4iiA+IG9rdWpvdVwgOwor5pyo57WEID4ga2lndW1pXCA7CivmnInog70gPiB5dXVub3VcIDsKK+WwmuWPpCA+IHNob3Vrb1wgOwor6aiS5YuVID4gc291ZG91XCA7Civog4zmiLsgPiBoYWlyZWlcIDsKK+S+i+WkliA+IHJlaWdhaVwgOwor5a6j5oimID4gc2Vuc2VuXCA7CivogLPnkrAgPiBtaW1pd2FcIDsKK+S6lOebriA+IGdvbW9rdVwgOwor5a+T5bGFID4gZ3V1a3lvXCA7CivotqPlkJEgPiBzaHVrb3VcIDsKK+iyoueMriA+IGtvdWtlblwgOwor54us6YC4ID4gZG9pdHN1XCA7CivmoKHluq0gPiBrb3V0ZWlcIDsKK+izh+a6kCA+IHNoaWdlblwgOwor5a+h5ammID4geWFtb21lXCA7CivlsIvllY8gPiBqaW5tb25cIDsKK+aatOirliA+IGJvdXJvblwgOwor5p2h55eVID4gam91a29uXCA7CivmoLzlrZAgPiBrb3VzaGlcIDsKK+S8gealrSA+IGtpZ3lvdVwgOwor5L215a2YID4gaGVpem9uXCA7Civpo7LnlKggPiBpbicneW91XCA7CivkvZPlvaIgPiB0YWlrZWlcIDsKK+WvjOWysyA+IGZ1Z2FrdVwgOwor5a6f5oimID4gamlzc2VuXCA7CivkuLvohLMgPiBzaHVub3VcIDsKK+iDoeW8kyA+IGtva3l1dVwgOwor5pi86aSJID4gaGlydWdlXCA7CivnkLTmn7EgPiBrb3RvamlcIDsKK+i2qOWLoiA+IHN1dXNlaVwgOwor5L6d5ZixID4gaXNob2t1XCA7CivmmLzpo58gPiBoaXJ1Z2VcIDsKK+WvkuWusyA+IGthbmdhaVwgOwor6aCR6L+3ID4gZ2FubWVpXCA7CivlrpvmiYAgPiBhdGVzaG9cIDsKK+afkOafkCA+IGJvdWJvdVwgOwor542j6ISCID4ganV1c2hpXCA7CivkvY7lvoogPiB0ZWlrYWlcIDsKK+acrOeuoSA+IGhvbmthblwgOwor6LKv54KtID4gY2hvdGFuXCA7Civkuoznm64gPiBmdXRhbWVcIDsKK+Wwj+WQjyA+IHNob3VyaVwgOwor5Lq654WZID4gamluJydlblwgOwor5pq06KiAID4gYm91Z2VuXCA7Civkv4rlgYkgPiBzaHVuJydpXCA7CivlsIrlkb0gPiBzb25tZWlcIDsKK+WumOaIvyA+IGthbmJvdVwgOwor5p2+54WZID4gc2hvdWVuXCA7CivogqXmlpkgPiBoaXJ5b3VcIDsKK+S8keaahyA+IGt5dXVrYVwgOwor5L+X5LqLID4gem9rdWppXCA7Civlrp/mhYsgPiBqaXR0YWlcIDsKK+acqOeusSA+IGtpYmFrb1wgOwor5pyJ572qID4geXV1emFpXCA7Civni63ou4wgPiBreW91a2lcIDsKK+izvOabuCA+IGtvdXNob1wgOwor5a2m5qChID4gZ2Fra291XCA7CivmnKjnrqEgPiBtb2trYW5cIDsKK+eOhOexsyA+IGdlbm1haVwgOwor54+I55CyID4ga291aGlpXCA7CivpoqjntIsgPiBmdXVtb25cIDsKK+agquWxiyA+IGthYnV5YVwgOwor5a6f5oSfID4gamlra2FuXCA7CivlsIrlkJsgPiBzb25rdW5cIDsKK+Wun+aEjyA+IGppdHN1aVwgOwor5bCK5ZCNID4gc29ubWVpXCA7CivkvY7lu4kgPiB0ZWlyZW5cIDsKK+mjvOeKrCA+IGthaWludVwgOwor5bCK5Y+3ID4gc29uZ291XCA7Civku5bmtYEgPiB0YXJ5dXVcIDsKK+WwiuWPsCA+IHNvbmRhaVwgOwor5pyr56uvID4gbWF0dGFuXCA7CivlrpjmhrIgPiBrYW5rZW5cIDsKK+S7mOazqCA+IGZ1Y2h1dVwgOwor6aOb55m9ID4ga2FzdXJpXCA7Civos47msJEgPiBzZW5taW5cIDsKK+S9kOW5lSA+IHNhYmFrdVwgOwor5Lq654G9ID4gamluc2FpXCA7CivkuIvolqwgPiBnZXlha3VcIDsKK+WvhuWwgSA+IG1pcHB1dVwgOwor5a605bitID4gZW5zZWtpXCA7CivlsI/ljJkgPiBrb3NhamlcIDsKK+WwiuWOsyA+IHNvbmdlblwgOwor6IKJ5qGCID4gbmlra2VpXCA7CivotbDloYEgPiBzb3VydWlcIDsKK+agvOWlvSA+IGtha2tvdVwgOwor5Lyd5pCsID4gZGVucGFuXCA7Civlr5vlpKcgPiBrYW5kYWlcIDsKK+acrOeovyA+IGhvbmtvdVwgOwor5pu46IKGID4gc2hvc2hpXCA7CivlrozmipUgPiBrYW50b3VcIDsKK+WtkOanmCA+IGtvc2FtYVwgOwor5a6/5bGLID4geWFkb3lhXCA7Civmm7jogZYgPiBzaG9zZWlcIDsKK+Wvv+WRvSA+IGp1bXlvdVwgOwor5LiJ6JS1ID4gc2Fuem91XCA7Civpn7Pph48gPiBvbnJ5b3VcIDsKK+S6oeeKtiA+IGJvdWpvdVwgOwor6LK75raIID4gaGlzaG91XCA7CivlsJblhbUgPiBzZW5wZWlcIDsKK+S5l+eulyA+IGpvdXphblwgOwor5pq06KGMID4gYm91a291XCA7CivmoLnlpKogPiBuZWJ1dG9cIDsKK+itsOmVtyA+IGdpY2hvdVwgOwor5Lm+55uDID4ga2FucGFpXCA7CivlrozmiJAgPiBrYW5zZWlcIDsKK+Wwj+WIqSA+IHNob3VyaVwgOwor5pu457+wID4gc2hva2FuXCA7CivmnaXnirYgPiByYWlqb3VcIDsKK+aciee3miA+IHl1dXNlblwgOwor5LuP5rOVID4gYnVwcG91XCA7CivlronmiYsgPiB5YXN1ZGVcIDsKK+WDheOAhSA+IGtpbmtpblwgOwor5a++5ZCRID4gdGFpa291XCA7CivlrprmgKcgPiB0ZWlzZWlcIDsKK+ixquebmyA+IGdvdXNlaVwgOwor5Lm+55msID4ga2Fuc2VuXCA7Civlr77lj6UgPiB0c3Vpa3VcIDsKK+S4reiAsyA+IGNodXVqaVwgOwor6IKy5oiQID4gaWt1c2VpXCA7CivlrojmiKYgPiBzaHVzZW5cIDsKK+agoeWumiA+IGtvdXRlaVwgOwor5a+S5aSpID4ga2FudGVuXCA7CivmnKznpL4gPiBob25zaGFcIDsKK+S4i+iQvSA+IGdlcmFrdVwgOwor6K2m6ZiyID4ga2VpYm91XCA7Civlr5LlpJwgPiBrYW4nJ3lhXCA7CivlrojmiJAgPiBzaHVzZWlcIDsKK+eJuemrmCA+IHRva2tvdVwgOwor5pyr56S+ID4gbWFzc2hhXCA7Civog7jlpaUgPiBreW91b3VcIDsKK+S9s+WigyA+IGtha3lvdVwgOwor5pmu6YCaID4gZnV0c3V1XCA7CivkvZflr50gPiB3YWJpbmVcIDsKK+Wun+W8nyA+IGppdHRlaVwgOwor546y55OPID4gcmVpcm91XCA7CivogIHnnLwgPiByb3VnYW5cIDsKK+ixiuepoyA+IGhvdWpvdVwgOwor5qC95Z+5ID4gc2FpYmFpXCA7Civnvqnoh6MgPiBnaXNoaW5cIDsKK+eJoem2jyA+IG9uZG9yaVwgOwor5bCP5YW1ID4ga29oeW91XCA7CivmnIjntYwgPiBnZWtrZWlcIDsKK+iDjOW6gyA+IHNlYmlyb1wgOwor5a2j5pilID4ga2lzaHVuXCA7CivlsI/lhZAgPiBzaG91bmlcIDsKK+ixiueolCA+IGhvdW5lblwgOwor54md6beEID4gaGlua2VpXCA7CivlrprlvaIgPiB0ZWlrZWlcIDsKK+adoeeJhyA+IGpvdWhlblwgOwor5L+C5LqJID4ga2Vpc291XCA7CivosaHnnLwgPiB6b3VnYW5cIDsKK+eOs+eRgSA+IHRhaW1haVwgOwor5pqX6KqmID4gYW5zaG91XCA7CivpqJLkurogPiBzb3VqaW5cIDsKK+Wul+W+kiA+IHNodXV0b1wgOwor5a2Q5qCqID4ga29rYWJ1XCA7CivmmLzplpMgPiBoaXJ1bWFcIDsKK+S9juWxpCA+IHRlaXNvdVwgOwor5qC55Z+OID4gbmVqaXJvXCA7CivkuoDnlLIgPiBraWtrb3VcIDsKK+izgOatoyA+IGdhc2hvdVwgOwor6aGV6JGXID4ga2VuY2hvXCA7CivniaHps6UgPiBvbmRvcmlcIDsKK+mokuS5sSA+IHNvdXJhblwgOwor5bCK5YWsID4gc29ua291XCA7CivlrrXlrq4gPiB5b21peWFcIDsKK+S6pOeCuSA+IGtvdXRlblwgOwor5L2P5bCCID4ganV1c2VuXCA7Civpn7PpgJ8gPiBvbnNva3VcIDsKK+S8kOaOoSA+IGJhc3NhaVwgOwor5a625a6FID4ga2F0YWt1XCA7Civpo5vnkIMgPiBoaWt5dXVcIDsKK+aal+iovCA+IGFuc2hvdVwgOwor5bCK5YWEID4gc29ua2VpXCA7Civkvr/kuZcgPiBiaW5qb3VcIDsKK+WwguWItiA+IHNlbnNlaVwgOwor5Lm+55SwID4ga2FuZGVuXCA7CivlrrblraYgPiBrYWdha3VcIDsKK+S8uOW6piA+IHNoaW5kb1wgOwor5Lya5omAID4ga2Fpc2hvXCA7Civkvb/ll74gPiBzaGlzb3VcIDsKK+ixhuenkSA+IG1hbWVrYVwgOwor6ISx5YWaID4gZGF0dG91XCA7CivkvJrmiKYgPiBrYWlzZW5cIDsKK+S9nuWnpiA+IG5laWthblwgOwor5L2P5a62ID4gc3VtaWthXCA7CivnjrLnjrIgPiByZWlyZWlcIDsKK+S+tuS8tCA+IHJ5b2hhblwgOwor6IOe5a2QID4gaG91c2hpXCA7CivlrprlubQgPiB0ZWluZW5cIDsKK+aZgumQmCA+IGppc2hvdVwgOwor6LOc5p2vID4gc2hpaGFpXCA7CivosqHmupAgPiB6YWlnZW5cIDsKK+S4pue9riA+IGhlaWNoaVwgOwor5a6J5oGvID4gYW5zb2t1XCA7CivlsIrlg48gPiBzb256b3VcIDsKK+S4jeiJryA+IGZ1cnlvdVwgOwor5LuV5qijID4gc2hpeW91XCA7CivmnbHmvLggPiB0b3V6ZW5cIDsKK+WumuW4uCA+IHRlaWpvdVwgOwor5L2e5aW4ID4gbmVpa2FuXCA7CivnjK7ojLYgPiBrZW5jaGFcIDsKK+S4gOiPiiA+IGlra2lrdVwgOwor5a6u5a62ID4gbWl5YWtlXCA7CivpoqjnpZ4gPiBmdXVqaW5cIDsKK+iDmuWtkCA+IGhhaXNoaVwgOwor5a2d5pWsID4ga291a2VpXCA7Civlr77lh6YgPiB0YWlzaG9cIDsKK+S4oee+qSA+IHJ5b3VnaVwgOwor5Li557K+ID4gdGFuc2VpXCA7Civku5Xmp5ggPiBzaGl5b3VcIDsKK+WvkuWcsCA+IGthbmNoaVwgOwor5LiN6IiIID4gZnVreW91XCA7CivkuIfoirggPiBiYW5nZWlcIDsKK+S4jeiHoyA+IGZ1c2hpblwgOwor6ISa5Y2KID4ga3lhaGFuXCA7Civos6LmmI4gPiBrZW5tZWlcIDsKK+S4iuiIuSA+IGpvdXNlblwgOwor6LKv5rC0ID4gY2hvc3VpXCA7Civlrrnlp78gPiB5b3VzaGlcIDsKK+S4iuiIqiA+IGpvdWtvdVwgOwor5bCR5L2QID4gc2hvdXNhXCA7Civmnq/mnKggPiBrYXJla2lcIDsKK+S4gOiNmCA+IGlpY2hhblwgOwor5a+45YmNID4gc3VuemVuXCA7Civlro/lvIEgPiBrb3ViZW5cIDsKK+WvvuWGhSA+IHRhaW5haVwgOwor6ICB55SfID4gcm91c2VpXCA7Civku7bmlbAgPiBrZW5zdXVcIDsKK+S4i+iHoyA+IGthc2hpblwgOwor542656WtID4gZGFzc2FpXCA7Civni6zoqp4gPiBkb2t1Z29cIDsKK+S4iuiHvCA+IHV3YXVzdVwgOwor5bCP5L2cID4ga29zYWt1XCA7CivmnKznm5cgPiBob250b3VcIDsKK+mjvea6gCA+IGhvdW1hblwgOwor5qCh5aSWID4ga291Z2FpXCA7Civlr7jliIYgPiBzdW5idW5cIDsKK+eLrOipsSA+IGRva3V3YVwgOwor5bCO5L2TID4gZG91dGFpXCA7CivkuIfoiKwgPiBiYW5wYW5cIDsKK+S4iuiHiCA+IGpvdXJvdVwgOwor5pif6ZycID4gc2Vpc291XCA7Civkvb/lkb0gPiBzaGltZWlcIDsKK+eJqemokiA+IGJ1c3NvdVwgOwor5pyo55uuID4gbW9rdW1lXCA7CivkuLvnrqEgPiBzaHVrYW5cIDsKK+S7pOacmyA+IHJlaWJvdVwgOwor5LiK6IW/ID4gam91dGFpXCA7CivlrqblrpggPiBrYW5nYW5cIDsKK+WvjOWbvSA+IGZ1a29rdVwgOwor5pu057SXID4gc2FyYXNhXCA7CivkurrmsJcgPiBoaXRva2VcIDsKK+acqOeavyA+IGtpemFyYVwgOwor5Lq65rCRID4gamlubWluXCA7CivlsITlgJYgPiBzaGFrb3VcIDsKK+S4iuiFlSA+IGpvdXdhblwgOwor5bCK5L2TID4gc29udGFpXCA7CivmnKjnmq4gPiBtb2t1aGlcIDsKK+S7o+abvyA+IGRhaXRhaVwgOwor5Luj5pu4ID4gZGFpc2hvXCA7Civmn5DmiYAgPiBib3VzaG9cIDsKK+aYgumosCA+IGtvdXRvdVwgOwor5a2Q5pa5ID4ga29rYXRhXCA7CivlsI/kuosgPiBzaG91amlcIDsKK+S9nOWgtCA+IHNha3ViYVwgOwor6LKn5rCRID4gaGlubWluXCA7Civku4rmp5ggPiBpbWF5b3VcIDsKK+Wun+WwhCA+IGppc3NoYVwgOwor5a++5YG2ID4gdGFpZ3V1XCA7CivkuqzmtZwgPiBrZWloaW5cIDsKK+abuOewoSA+IHNob2thblwgOwor5LiN6IKWID4gZnVzaG91XCA7CivmnbHmtbcgPiB0b3VrYWlcIDsKK+acieeojiA+IHl1dXplaVwgOwor5L2T5aSWID4gdGFpZ2FpXCA7CivmnpzmoLggPiBrYWtha3VcIDsKK+mgkOiolyA+IHlvdGFrdVwgOwor6ISx5LyaID4gZGFra2FpXCA7CivkuIDoiIggPiBpa2t5b3VcIDsKK+S4iuiDjCA+IHV3YXplaVwgOwor5a+15YWQID4gY2hvdWppXCA7Civlrozlt6UgPiBrYW5rb3VcIDsKK+S4iuiCoiA+IGpvdXNoaVwgOwor5pm66KyAID4gY2hpYm91XCA7CivpoZ7ogZogPiBydWlqdXVcIDsKK+acrOeVqiA+IGhvbmJhblwgOwor5p2x5rSLID4gdG91eW91XCA7CivnibnpnIAgPiB0b2t1anVcIDsKK+iytOanmCA+IGtpc2FtYVwgOwor6IGw5piOID4gc291bWVpXCA7CivpoqjnnLwgPiBmdXVnYW5cIDsKK+S4iuiBniA+IGpvdWJ1blwgOwor5a6f5a2QID4gamlzc2hpXCA7CivogIHnjaogPiByb3VrYWlcIDsKK+adr+a0lyA+IGhhaXNlblwgOwor5a625aG+ID4ga2FqdWt1XCA7Civku6Tml6ggPiByZWlzaGlcIDsKK+S9teWRkSA+IGhlaWRvblwgOwor6LOH5p2QID4gc2hpemFpXCA7CivkvY7lo7AgPiB0ZWlzZWlcIDsKK+S6ieeCuSA+IHNvdXRlblwgOwor6LOH5pysID4gc2hpaG9uXCA7CivkvZzlnJ8gPiBzYWt1ZG9cIDsKK+WwiuS4iiA+IHNvbmpvdVwgOwor5a+b5Y6zID4ga2FuZ2VuXCA7CivkvJrlvI8gPiBlc2hpa2lcIDsKK+e+mue+iiA+IHJlaXlvdVwgOwor5L215ZCIID4gaGVpZ291XCA7Civkub7nh6UgPiBrYW5zb3VcIDsKK+S8tuWumCA+IHJlaWthblwgOwor5a+b5Y6aID4ga2Fua291XCA7CivkuInogIUgPiBzYW5zaGFcIDsKK+ixqueIvSA+IGdvdXNvdVwgOwor5L2c5ZuzID4gc2FrdXp1XCA7CivnjKvog4wgPiBuZWtvemVcIDsKK+mjm+eBqyA+IHRvYmloaVwgOwor54mH6bGXID4gaGVucmluXCA7CivorabphpIgPiBrZWlzZWlcIDsKK+mnheWQjSA+IGVraW1laVwgOwor5Luj5pWwID4gZGFpc3V1XCA7CivpppnlpaAgPiBrb3VkZW5cIDsKK+ixkOeUsCA+IHRveW90YVwgOwor57+U56C0ID4gc2hvdWhhXCA7Civni6zooYwgPiBkb2trb3VcIDsKK+agueWPtyA+IGtvbmdvdVwgOwor6IKd5b+DID4ga2FuamluXCA7CivniZvppqwgPiBneXV1YmFcIDsKK+S6uuaoqSA+IGppbmtlblwgOwor6IK65bCWID4gaGFpc2VuXCA7CivkuLjnp5ggPiBtYXJ1aGlcIDsKK+mjm+eAkSA+IGhpYmFrdVwgOwor5L2T5Z6LID4gdGFpa2VpXCA7CivpoJLooYwgPiBoYW5rb3VcIDsKK+adseavjiA+IHRvdW1haVwgOwor6aCI6KaBID4gc2h1eW91XCA7Civlr77kurogPiB0YWlqaW5cIDsKK+iDoeWbvSA+IGtva29rdVwgOwor5qGI5YaFID4gYW4nJ25haVwgOwor5L2V5ZueID4gbmFua2FpXCA7Civmma7oq4sgPiBmdXNoaW5cIDsKK+aZgumAnyA+IGppc29rdVwgOwor5a2k5oSBID4ga29zaHV1XCA7CivorbfouqsgPiBnb3NoaW5cIDsKK+acqOeQtCA+IG1va2tpblwgOwor5a6f5aeJID4gamlzc2hpXCA7Civku4/mm7ggPiBidXNzaG9cIDsKK+WujOWwgSA+IGthbnB1dVwgOwor6ICz5q67ID4gamlrYWt1XCA7CivpoZ7nuoIgPiBydWlzYW5cIDsKK+mdkum7tCA+IGFva2FiaVwgOwor5pyo55CGID4gbW9rdXJpXCA7CivkvpvkuI4gPiBreW91eW9cIDsKK+iBoeaYjiA+IHNvdW1laVwgOwor6K6S6KyXID4gemFuYm91XCA7Civlr53liIMgPiBuZXRhYmFcIDsKK+S4gOe+vSA+IGljaGl3YVwgOwor6IKJ5oSfID4gbmlra2FuXCA7Civos6LmiY0gPiBrZW5zYWlcIDsKK+S4gOe+qSA+IGljaGlnaVwgOwor5L2O5ZywID4gdGVpY2hpXCA7CivmoYLlhqAgPiBrZWlrYW5cIDsKK+WuieWvpyA+IGFuJyduZWlcIDsKK+iDveWLlSA+IG5vdWRvdVwgOwor576K5765ID4geW91a2FuXCA7CivppZflv5wgPiBreW91b3VcIDsKK+e+iue+riA+IHlvdWthblwgOwor6IGW5pu4ID4gc2Vpc2hvXCA7CivkuLvnoLIgPiBzaHVob3VcIDsKK+S9juWbniA+IHRlaWthaVwgOwor5a+d5YW3ID4gc2hpbmd1XCA7Civosr/mmJMgPiBib3Vla2lcIDsKK+ePvuaVsCA+IGdlbnN1dVwgOwor6Z+z6Kq/ID4gb25jaG91XCA7CivkuqTmrZMgPiBrb3VrYW5cIDsKK+mnheWJjSA+IGVraW1hZVwgOwor5a6I5a6uID4geWFtb3JpXCA7Civmma/oprMgPiBrZWlrYW5cIDsKK+mfs+iqrSA+IG9uZG9rdVwgOwor5Lqk5qy+ID4ga291a2FuXCA7CivmnprmlbAgPiBtYWlzdXVcIDsKK+iBoeaVjyA+IHNvdWJpblwgOwor6LKn5qOSID4gYmluYm91XCA7CivkuIrnt5ogPiBqb3VzZW5cIDsKK+mghuihjCA+IGp1bmtvdVwgOwor5pyI55u4ID4gZ2Vzc291XCA7CivlrZDmiL8gPiBzaGlib3VcIDsKK+S+i+S8miA+IHJlaWthaVwgOwor5pyA55+tID4gc2FpdGFuXCA7CivpnZLpt7ogPiBhb3NhZ2lcIDsKK+WtpuW+kiA+IGdha3V0b1wgOwor5Li556CCID4gdGFuc2hhXCA7CivmnInnm4ogPiB5dXVla2lcIDsKK+S7iuaZqSA+IGtvbmJhblwgOwor5LqV5rOJID4gc2Vpc2VuXCA7Civlr5LliaQgPiBrYW56YWlcIDsKK+izouaFriA+IGtlbnJ5b1wgOwor5a2d5oKMID4ga291dGVpXCA7Civogq/lrpogPiBrb3V0ZWlcIDsKK+S4i+e1tSA+IHNoaXRhZVwgOwor6K6S6KiAID4gemFuZ2VuXCA7CivotablhY0gPiBzaGFtZW5cIDsKK+S6iOa4rCA+IHlvc29rdVwgOwor57+754S2ID4gaG9uemVuXCA7CivkvLTlpY8gPiBiYW5zb3VcIDsKK+izm+aIkCA+IHNhbnNlaVwgOwor6aKo55C0ID4gZnV1a2luXCA7CivkvJ3lsI4gPiBkZW5kb3VcIDsKK+ael+aUvyA+IHJpbnNlaVwgOwor5qC55YagID4ga29ua2FuXCA7CivotbfkvI8gPiBraWZ1a3VcIDsKK+S4i+e0miA+IGtha3l1dVwgOwor5Li755y8ID4gc2h1Z2FuXCA7CivkuInntYQgPiBtaWt1bWlcIDsKK+S4iee1gyA+IHNhbmdlblwgOwor5a6d5aGUID4gaG91dG91XCA7CivogZbml6ggPiBzZWlzaGlcIDsKK+S4jeeyviA+IGJ1c2hvdVwgOwor5LiK57SNID4gam91bm91XCA7CivnjovniakgPiBvdW1vbm9cIDsKK+S4gOe4tyA+IGljaGlydVwgOwor5LqM5rWBID4gbmlyeXV1XCA7CivohJrkuIsgPiBreWFra2FcIDsKK+agueWFgyA+IG5lbW90b1wgOwor5a+S5Ya3ID4ga2FucmVpXCA7CivogZbmlq0gPiBzZWlkYW5cIDsKK+S9qeWJoyA+IGhhaWtlblwgOwor5auM54WZID4ga2VuJydlblwgOwor5qCh5ZCIID4ga291Z291XCA7CivmnaHmrL4gPiBqb3VrYW5cIDsKK+WtpuW6nCA+IGdha3VmdVwgOwor5LuB5pm6ID4gamluY2hpXCA7CivkurrmnZAgPiBqaW56YWlcIDsKK+agoeWPiyA+IGtvdXl1dVwgOwor5L2p5YiAID4gaGFpdG91XCA7CivmnKrnhp8gPiBtaWp1a3VcIDsKK+acseeCuSA+IHNodXRlblwgOwor5LiK57GzID4gam91bWFpXCA7CivkuK3noLQgPiBjaHV1aGFcIDsKK+S6uuacmyA+IGppbmJvdVwgOwor6LK05pePID4ga2l6b2t1XCA7Civlr6HkvZwgPiBrYXNha3VcIDsKK+WumOWgsSA+IGthbnBvdVwgOwor5Lit56ClID4gbmFrYXRvXCA7Civlro/lpKcgPiBrb3VkYWlcIDsKK+mir+eIvSA+IHNhc3NvdVwgOwor5a6f5ZywID4gaml0Y2hpXCA7CivlrZ3lvJ8gPiBrb3V0ZWlcIDsKK+adv+abuCA+IGJhbnNob1wgOwor6IOM5ZqiID4gaGFpbm91XCA7Civos6blvbkgPiBidXlha3VcIDsKK+acieeUqCA+IHl1dXlvdVwgOwor5a6P5aOuID4ga291c291XCA7CivmnInnlKMgPiB5dXVzYW5cIDsKK+S4meeoriA+IGhlaXNodVwgOwor5a6a5Z6LID4gdGVpa2VpXCA7CivmnIjnlKMgPiBnZXNzYW5cIDsKK+S8j+WxiyA+IGZ1c2V5YVwgOwor5LiA57SaID4gaWtreXV1XCA7CivkurrmmbogPiBqaW5jaGlcIDsKK+WujOWjsiA+IGthbmJhaVwgOwor5p2R5rCRID4gc29ubWluXCA7CivnkIPmioAgPiBreXV1Z2lcIDsKK+aemuaMmSA+IG1haWt5b1wgOwor5pel6aCDID4gaGlnb3JvXCA7CivkuIvnrZYgPiBnZXNha3VcIDsKK+mdkumuqyA+IGFvemFtZVwgOwor5a2X5byVID4gamliaWtpXCA7Civku4HmlL8gPiBqaW5zZWlcIDsKK+S9juWQnyA+IHRlaWdpblwgOwor5pel6Z+TID4gbmlra2FuXCA7CivnkIPmiK8gPiBreXV1Z2lcIDsKK+S9leWNgyA+IG5hbnplblwgOwor5L2V5Y2BID4gbmFuanV1XCA7Civos6LlvJ8gPiBrZW50ZWlcIDsKK+S4iuetiSA+IGpvdXRvdVwgOwor6aas5YqbID4gYmFyaWtpXCA7CivlrZjlu4MgPiB6b25wYWlcIDsKK+iBr+aDsyA+IHJlbnNvdVwgOwor5L2/5LiBID4gc2hpdGVpXCA7CivkuInnrYkgPiBzYW50b3VcIDsKK+S4u+eUqCA+IHNodXlvdVwgOwor5LiA57GMID4gaXRjaHV1XCA7CivkvbPkvZwgPiBrYXNha3VcIDsKK+Wvm+S7gSA+IGthbmppblwgOwor55G25Y+wID4geW91ZGFpXCA7CivlrZDlvbkgPiBrb3lha3VcIDsKK+S8j+WtlyA+IGZ1c2VqaVwgOwor6ICQ5rC0ID4gdGFpc3VpXCA7CivkuIrnq68gPiBqb3V0YW5cIDsKK+mnhOS9nCA+IGRhc2FrdVwgOwor5Li555SwID4gdGFuZGVuXCA7CivkuInnq78gPiBzYW5rYW5cIDsKK+S6uuaWhyA+IGppbm1vblwgOwor6aeF5LydID4gZWtpZGVuXCA7CivkvZPli6IgPiB0YWlzZWlcIDsKK+Wtl+W5lSA+IGppbWFrdVwgOwor5Lyd5aWPID4gZGVuc291XCA7CivlrZDlvJ8gPiBzaGl0ZWlcIDsKK+S4h+erryA+IGJhbnRhblwgOwor5LiK56m6ID4gam91a3V1XCA7CivnjbDnjJsgPiBuZWltb3VcIDsKK+mmmeWQiCA+IGtvdWdvdVwgOwor54mH6ZuyID4gaGVuJyd1blwgOwor54us6IuxID4gZG9rdWVpXCA7CivmoKHlhoUgPiBrb3VuYWlcIDsKK+aXpembgCA+IGhpZ2FyYVwgOwor6aGM57C9ID4gZGFpc2VuXCA7Civlr4blgbUgPiBtaXR0ZWlcIDsKK+mgu+e5gSA+IGhpbnBhblwgOwor5LiA562WID4gaXNzYWt1XCA7CivkvZXliIYgPiBuYW5wdW5cIDsKK+eJvemAoyA+IGtlbnJlblwgOwor5a2r5a2QID4gbWFnb2tvXCA7Civku4vmirEgPiBrYWlob3VcIDsKK+S4ieeoriA+IHNhbnNodVwgOwor5L2T5Yi2ID4gdGFpc2VpXCA7CivppZflrrQgPiBreW91ZW5cIDsKK+S4iueoiyA+IGpvdXRlaVwgOwor5pel6ZmwID4gaGlrYWdlXCA7Civmm7jnlJ8gPiBzaG9zZWlcIDsKK+aXrOmWkyA+IGp1bmthblwgOwor6aas5YWLID4gbWFydWt1XCA7CivlrpjllrYgPiBrYW4nJ2VpXCA7CivkvZPliJEgPiB0YWlrZWlcIDsKK+e+veeUsCA+IGhhbmVkYVwgOwor6aGG57KSID4ga2FyeXV1XCA7CivkuLvnj60gPiBzaHVoYW5cIDsKK+S4gOeskSA+IGlzc2hvdVwgOwor6Z2i6aCsID4gbWVucG9vXCA7Civml6XpmZAgPiBoaWdpcmlcIDsKK+S4jeelpSA+IGZ1c2hvdVwgOwor5Lih55uuID4gcnlvdW1lXCA7CivmnKzmupAgPiBob25nZW5cIDsKK+iCieWxiyA+IG5pa3V5YVwgOwor6IO05L2TID4gZG91dGFpXCA7Civlp6boqIggPiBrYW5rZWlcIDsKK+S6pOabvyA+IGtvdXRhaVwgOwor6Z2Z6aSKID4gc2VpeW91XCA7CivosqHmlL8gPiB6YWlzZWlcIDsKK+WtpOWuoiA+IGtva2FrdVwgOwor5Luk5byfID4gcmVpdGVpXCA7CivmoKrkvqEgPiBrYWJ1a2FcIDsKK+e+juepuiA+IG1pc29yYVwgOwor5pu055SfID4ga291c2VpXCA7Civlr4Tkv6EgPiBraXNoaW5cIDsKK+iBluaIpiA+IHNlaXNlblwgOwor5Lit55SfID4gbmFrYXRlXCA7CivkvZPlhoUgPiB0YWluYWlcIDsKK+iDjOWPjSA+IGhhaWhhblwgOwor54us6IeqID4gZG9rdWppXCA7Civku6PlvIEgPiBkYWliZW5cIDsKK+WvhuS9vyA+IG1pc3NoaVwgOwor5p2x5pa5ID4gdG91aG91XCA7CivorLnpgbggPiBraW5zZW5cIDsKK+ixiua9pCA+IGhvdWp1blwgOwor5Lya5aC0ID4ga2Fpam91XCA7CivkvJrloLEgPiBrYWlob3VcIDsKK+aZguiplSA+IGppaHlvdVwgOwor5a625YWDID4gaWVtb3RvXCA7Civniafph44gPiBib2t1eWFcIDsKK+mdoumdoiA+IG1lbm1lblwgOwor6LOH5oCnID4gc2hpc2VpXCA7Civkuovmpa0gPiBqaWd5b3VcIDsKK+S4geeomiA+IGRldGNoaVwgOwor5p2l5pu4ID4gcmFpc2hvXCA7Civml6XplbcgPiBoaW5hZ2FcIDsKK+S6lOahgSA+IGdva2V0YVwgOwor5Lya5aCCID4ga2FpZG91XCA7Civnvo7np7AgPiBiaXNob3VcIDsKK+WvhuS8miA+IG1pa2thaVwgOwor6LOK5b6SID4gem9rdXRvXCA7CivnjKvnp5EgPiBuZWtva2FcIDsKK+aXhemkqCA+IHJ5b2thblwgOwor6IO05LmxID4gZG91cmFuXCA7Civku7vlrpggPiBuaW5rYW5cIDsKK+iynuaTjSA+IHRlaXNvdVwgOwor5Lqk5piTID4ga291ZWtpXCA7Civlrpjlkb0gPiBrYW5tZWlcIDsKK+WutuWDlSA+IGthYm9rdVwgOwor5Li754qvID4gc2h1aGFuXCA7Civnvavnt5ogPiBrZWlzZW5cIDsKK+Wtn+WtkCA+IG1vdXNoaVwgOwor576k55uyID4gZ3VubW91XCA7Civog47li5UgPiB0YWlkb3VcIDsKK+aYj+i/tyA+IGtvbm1laVwgOwor5Lim55SoID4gaGVpeW91XCA7CivkubPmr40gPiBueXV1Ym9cIDsKK+e+pOeblyA+IGd1bnRvdVwgOwor5LuW5b+DID4gdGFzaGluXCA7CivogIHmrbsgPiByb3VzaGlcIDsKK+WtneWtkCA+IGtvdXNoaVwgOwor57qP6aCtID4gdGVudG91XCA7Civniq/ooYwgPiBoYW5rb3VcIDsKK+ixiua6gCA+IGhvdW1hblwgOwor5L2P5YOnID4ganV1c291XCA7CivlrpjlkI0gPiBrYW5tZWlcIDsKK+S4gOelqCA+IGlwcHlvdVwgOwor5aWU6aiwID4gaG9udG91XCA7Civmn7vlj44gPiBzYXNodXVcIDsKK+S6jOaguCA+IG5pa2FrdVwgOwor5a6f5YuiID4gamlzc2VpXCA7Civku67lsYsgPiBrYXJpeWFcIDsKK+S9nuS6uiA+IG5laWppblwgOwor5pyr5rOVID4gbWFwcG91XCA7CivpppnlhbggPiBrb3VkZW5cIDsKK+Wun+WKuSA+IGppa2tvdVwgOwor5p2l5pa5ID4ga2lrYXRhXCA7CivoraboppYgPiBrZWlzaGlcIDsKK+mjsuaWmSA+IGlucnlvdVwgOwor5a625L+hID4ga2FzaGluXCA7CivlrpjljbAgPiBrYW4nJ2luXCA7CivkurrmiY0gPiBqaW5zYWlcIDsKK+S6uuaJiyA+IGhpdG9kZVwgOwor5pu454q2ID4gc2hvam91XCA7CivlrrnkvZMgPiB5b3VkYWlcIDsKK+S7ruWvnSA+IGthcmluZVwgOwor5a2U5a2fID4ga291bW91XCA7Civku67lrrYgPiBrYXJpaWVcIDsKK+WtlOWtkCA+IGtvdXNoaVwgOwor6IOO5YaFID4gdGFpbmFpXCA7Civku4HmhJsgPiBqaW4nJ2FpXCA7CivmnaXmlLsgPiByYWlrb3VcIDsKK+WuneWJoyA+IGhvdWtlblwgOwor5a625L2cID4ga2FzYWt1XCA7CivlpKfpuqYgPiBvb211Z2lcIDsKK+eLree+qSA+IGt5b3VnaVwgOwor6Kyd6YeRID4gc2hha2luXCA7Civlrp/liJEgPiBqaWtrZWlcIDsKK+mkiuaIkCA+IHlvdXNlaVwgOwor5p2h5paHID4gam91YnVuXCA7CivmoKHkuLsgPiBrb3VzaHVcIDsKK+WtkOWuiCA+IGtvbW9yaVwgOwor5a6/5LiWID4gc3VrdXNlXCA7Civlpa7pl5ggPiBmdW50b3VcIDsKK+Wul+WLmSA+IHNodXVtdVwgOwor5ama56S8ID4ga29ucmVpXCA7CivlrZDlrasgPiBzaGlzb25cIDsKK+S4ieecgSA+IHNhbnNlaVwgOwor5pys5q6/ID4gaG9uZGVuXCA7CivkuInnm7ggPiBzYW5zb3VcIDsKK+eMm+emvSA+IG1vdWtpblwgOwor5a6d5YiAID4gaG91dG91XCA7CivnvqTnlJ8gPiBndW5zZWlcIDsKK+S4gOefsyA+IGlzc2VraVwgOwor5a6f5YaZID4gamlzc2hhXCA7Civku4HmgbUgPiBqaW5rZWlcIDsKK+S6lOaXpSA+IGl0c3VrYVwgOwor6aKo5rWqID4gZnV1cm91XCA7Civmmbrog70gPiBjaGlub3VcIDsKK+S4iueahyA+IGpvdWtvdVwgOwor5Lqk5o+bID4ga291a2FuXCA7CivkuqvmjIEgPiBreW91amlcIDsKK+S4gOeerCA+IGlzc2h1blwgOwor5a6d5YagID4gaG91a2FuXCA7CivlrpjliLYgPiBrYW5zZWlcIDsKK+Wun+WFhCA+IGppa2tlaVwgOwor5a6d5YW4ID4gaG91dGVuXCA7CivpoqjmtJ4gPiBmdXVkb3VcIDsKK+aWrOmmliA+IHphbnNodVwgOwor5pel6YqtID4gaGl6ZW5pXCA7CivkuZfms5UgPiBqb3Vob3VcIDsKK+acrOashCA+IGhvbnJhblwgOwor54yu55uDID4ga2VucGFpXCA7Civkurrmg4UgPiBuaW5qb3VcIDsKK+S9j+S6uiA+IGp1dW5pblwgOwor5LuP5birID4gYnVzc2hpXCA7CivlrrbkuK0gPiBrYWNodXVcIDsKK+WutuS4piA+IHlhbmFtaVwgOwor6LGK5rC0ID4gaG91c3VpXCA7Civos6LlprsgPiBrZW5zYWlcIDsKK+S7o+WumCA+IGRhaWthblwgOwor5LiB55uuID4gY2hvdW1lXCA7Civku6TlrasgPiByZWlzb25cIDsKK+S7j+W3pSA+IGJ1a2tvdVwgOwor5LiA55uuID4gaGl0b21lXCA7CivogonloYogPiBuaWtrYWlcIDsKK+S6rOaIkCA+IGtlaXNlaVwgOwor5pqu56eLID4gYm9zaHV1XCA7CivmmbrogIUgPiBjaGlzaGFcIDsKK+aWuemdoiA+IGhvdW1lblwgOwor5Lm+5p2/ID4ga2FucGFuXCA7CivlrZjlpJYgPiB6b25nYWlcIDsKK+S7pOWsoiA+IHJlaWpvdVwgOwor576O55qEID4gYml0ZWtpXCA7CivkvLblhKogPiByZWl5dXVcIDsKK+S5vuadryA+IGthbnBhaVwgOwor5Lq65oCnID4gamluc2VpXCA7CivkuZfmsJcgPiBub3Jpa2lcIDsKK+S4iueVqiA+IGpvdWJhblwgOwor54uX6IKJID4ga3VuaWt1XCA7CivpoqjmsLQgPiBmdXVzdWlcIDsKK+S5vuadkCA+IGthbnphaVwgOwor6K2c6KGoID4gZnVoeW91XCA7Civku5jlsZ4gPiBmdXpva3VcIDsKK+S4iueVjCA+IGpvdWthaVwgOwor5LiJ55WqID4gc2FuYmFuXCA7CivlrablnJIgPiBnYWt1ZW5cIDsKK+aXqOmFkiA+IHNoaXNodVwgOwor6KyZ6YGcID4ga2Vuc29uXCA7CivkuIrnlLAgPiBqb3VkZW5cIDsKK+S4ieeVjCA+IHNhbmdhaVwgOwor5aSc6be5ID4geW90YWthXCA7Civku7LlpI8gPiBjaHV1a2FcIDsKK+WuiOWLoiA+IHNodXNlaVwgOwor6LSI5ZGIID4gem91dGVpXCA7Civoq5bpoYwgPiByb25kYWlcIDsKK+S8tOWDpyA+IGJhbnNvdVwgOwor5Lya5ZCMID4ga2FpZG91XCA7CivkvJrlkIggPiBrYWlnb3VcIDsKK+eQhuWtpiA+IHJpZ2FrdVwgOwor5Ly65YCZID4gc2hpa291XCA7Civku6Tlqb8gPiByZWlzZWlcIDsKK+eQg+WutCA+IGt5dXVlblwgOwor5Lqk5oimID4ga291c2VuXCA7Civml6fpg70gPiBreXV1dG9cIDsKK+S8r+WFhCA+IGhha2tlaVwgOwor6LSI5Y+3ID4gem91Z291XCA7CivkuK3ngasgPiBjaHV1YmlcIDsKK+S8neWNmCA+IGRlbnRhblwgOwor5a6j5LydID4gc2VuZGVuXCA7CivmnKjmp78gPiBtdWt1Z2VcIDsKK+aWuemZoyA+IGhvdWppblwgOwor6LSL5Y2wID4gbmlzZWluXCA7Civku6TlqJggPiByZWlqb3VcIDsKK+iDjOS7uyA+IGhhaW5pblwgOwor57+75qGIID4gaG9uJydhblwgOwor546L5qeYID4gb3VzYW1hXCA7Civku7vlnLAgPiBuaW5jaGlcIDsKK+Wun+S9kyA+IGppdHRhaVwgOwor5LiA55aLID4gaXBwaWtpXCA7CivogIHmnaUgPiByb3VyYWlcIDsKK+eJqeizhyA+IGJ1c3NoaVwgOwor5LuW5a6XID4gdGFzaHV1XCA7Civml6bpgqMgPiBkYW4nJ25hXCA7Civlpb3phY0gPiBrb3VoYWlcIDsKK+iAgeadiSA+IHJvdXNhblwgOwor5Luk5aeJID4gcmVpc2hpXCA7Civku5XlrpggPiBzaGlrYW5cIDsKK+WujOWFqCA+IGthbnplblwgOwor5Lyd5YuVID4gZGVuZG91XCA7Civmlq3pnaIgPiBkYW5tZW5cIDsKK+S7pOWmuSA+IHJlaW1haVwgOwor5aSc6bOlID4geWFjaG91XCA7CivnjJvnnIEgPiBtb3VzZWlcIDsKK+S4gOeUuyA+IGlra2FrdVwgOwor5p+U5ZKMID4gbnl1dXdhXCA7Civml6npgIAgPiBzb3V0YWlcIDsKK+WumuS+iyA+IHRlaXJlaVwgOwor54++5a2YID4gZ2Vuem9uXCA7CivkubHmna0gPiByYW5ndWlcIDsKK+S8tOS+tiA+IGhhbnJ5b1wgOwor5Lqk5oSfID4ga291a2FuXCA7CivlrprkvY8gPiB0ZWlqdXVcIDsKK+iri+mhmCA+IHNlaWdhblwgOwor5a6I5YW1ID4gc2h1aGVpXCA7CivosqHlvaIgPiB6YWlrZWlcIDsKK+iDjOS4rSA+IHNlbmFrYVwgOwor54m56KixID4gdG9ra3lvXCA7Civoqr/ppqwgPiBjaG91YmFcIDsKK+WtmOWcqCA+IHNvbnphaVwgOwor6IOM5LiIID4gc2V0YWtlXCA7CivnibnoqJMgPiB0b2trdW5cIDsKK+S4jeeMnyA+IGZ1cnlvdVwgOwor54iG6Z+zID4gYmFrdW9uXCA7CivkuqTmg4UgPiBrb3Vqb3VcIDsKK+acrOahiCA+IGhvbicnYW5cIDsKK+S4i+eNhCA+IGdlZ29rdVwgOwor5LuK5bCaID4gaW1hbmFvXCA7CivmnKzmoKEgPiBob25rb3VcIDsKK+S6uuW3pSA+IGppbmtvdVwgOwor5Lmx5pq0ID4gcmFuYm91XCA7CivmnJvmqJMgPiBib3Vyb3VcIDsKK+S4ieeMvyA+IG1pemFydVwgOwor6KuW6ZmjID4gcm9uamluXCA7CivpoZXnj74gPiBrZW5nZW5cIDsKK+S8tuS6uiA+IHJlaWppblwgOwor5p2x5b6BID4gdG91c2VpXCA7CivmlpzpoLggPiBzaGFrZWlcIDsKK+ixquaUviA+IGdvdWhvdVwgOwor5LiA55CGID4gaWNoaXJpXCA7CivkuLvms5UgPiBzaHVob3VcIDsKK+isueiogCA+IGtpbmdlblwgOwor5pyx5pu4ID4gc2h1c2hvXCA7CivppKjlqIMgPiBrYW4nJ2FpXCA7CivniYfovKogPiBrYXRhd2FcIDsKK+acm+alvCA+IGJvdXJvdVwgOwor5a6J5YCkID4geWFzdW5lXCA7CivmnKzmnaUgPiBob25yYWlcIDsKK+aYjuiogCA+IG1laWdlblwgOwor57+w5p6XID4ga2FucmluXCA7Civku6TloIIgPiByZWlkb3VcIDsKK+aYjuinoyA+IG1laWthaVwgOwor5LiH54q2ID4gYmFuam91XCA7CivlrpfkuLsgPiBzb3VzaHVcIDsKK+mciumtgiA+IHJlaWtvblwgOwor5pys5pyoID4gbW90b2tpXCA7CivpnZLpioUgPiBzZWlkb3VcIDsKK+S4gOeNsiA+IGlra2FrdVwgOwor5pys5pybID4gaG9ubW91XCA7Civnvbnnl4UgPiByaWJ5b3VcIDsKK+mhmOeKtiA+IGdhbmpvdVwgOwor5pyr5pyrID4gc3VlenVlXCA7CivlrZDlmqIgPiBzaGlub3VcIDsKK+acrOabuCA+IGhvbnNob1wgOwor5pqX56SBID4gYW5zaG91XCA7CivmmI7oppYgPiBtZWlzaGlcIDsKK+aWnOmdoiA+IHNoYW1lblwgOwor54mH6LqrID4ga2F0YW1pXCA7CivkuozmiYsgPiBmdXRhdGVcIDsKK+irkumXhyA+IHJ5b3VhblwgOwor5Lmx5pWwID4gcmFuc3V1XCA7Civoqr/pn7MgPiBjaG91b25cIDsKK+aYpeialSA+IGhhcnVnb1wgOwor5aW96LuiID4ga291dGVuXCA7CivmnKjmnKsgPiBrb251cmVcIDsKK+iCjOWQiCA+IGhhZGFhaVwgOwor5Lqs5birID4ga2Vpc2hpXCA7CivnjovmnJ0gPiBvdWNob3VcIDsKK+mkqOWkliA+IGthbmdhaVwgOwor5LyB5Y+KID4ga2lreXV1XCA7CivorLnoo70gPiBraW5zZWlcIDsKK+eKrOiIjiA+IGtlbnNoYVwgOwor6Zu36bO0ID4gcmFpbWVpXCA7Civku7vlkb0gPiBuaW5tZWlcIDsKK+abuOazlSA+IHNob2hvdVwgOwor5LuA5a6dID4ganV1aG91XCA7CivkurrlsYsgPiBoaXRveWFcIDsKK+acpuacpyA+IG1vdXJvdVwgOwor5pym5pymID4gbW91bW91XCA7Civku6PlnLAgPiBkYWljaGlcIDsKK+S4rea0siA+IG5ha2FzdVwgOwor6LOb5ZiGID4gc2FudGFuXCA7Civml6XotrMgPiBoaWFzaGlcIDsKK+mdkumFuCA+IHNlaXNhblwgOwor5pac6Zm9ID4gc2hheW91XCA7CivlpKfpoqggPiBvb2themVcIDsKK+iruOmBkyA+IHNob2RvdVwgOwor5aWq6YKEID4gZGFra2FuXCA7CivkuK3ms6IgPiBjaHV1aGFcIDsKK+mfs+e3oCA+IG5lamltZVwgOwor6ZyK6aiTID4gcmVpZ2VuXCA7CivkuI3ngrogPiBmdXRhbWVcIDsKK+WkqemhlCA+IHRlbmdhblwgOwor54mp6KaLID4gbW9ub21pXCA7CivmnKzml6ggPiBob25zaGlcIDsKK+Wjrum9oiA+IHNvdXJlaVwgOwor5a2m5YuZID4gZ2FrdW11XCA7Civmm7/mrYwgPiBrYWV1dGFcIDsKK+WtmOWRvSA+IHpvbm1laVwgOwor5aWu6L+FID4gZnVuamluXCA7Civos63ljZogPiB0b2Jha3VcIDsKK+Wkp+mhmCA+IHRhaWdhblwgOwor5p2J5oi4ID4gc3VnaWRvXCA7Civosqflr5IgPiBoaW5rYW5cIDsKK+WqvuabsyA+IGFpYmlraVwgOwor5pyJ5qeYID4gYXJpeW91XCA7CivmnKzmlocgPiBob25tb25cIDsKK+S7tuWQjSA+IGtlbm1laVwgOwor5p2l5bqXID4gcmFpdGVuXCA7CivmnKzmlbAgPiBob25zdXVcIDsKK+aWp+mRvyA+IGZ1c2FrdVwgOwor5p2l5bm0ID4gcmFpbmVuXCA7CivnjJvnjaMgPiBtb3VqdXVcIDsKK+aWh+mhjCA+IGJ1bmRhaVwgOwor546L5pePID4gb3V6b2t1XCA7CivkvIHlioMgPiBraWtha3VcIDsKK+S6lOW+syA+IGdvdG9rdVwgOwor5LiJ54G9ID4gc2Fuc2FpXCA7Civlpb3otbAgPiBrb3Vzb3VcIDsKK+S4h+eCuSA+IG1hbnRlblwgOwor5LuK5aScID4ga29uJyd5YVwgOwor6aOv5bqXID4gaGFudGVuXCA7CivppIrlrZAgPiB5b3VzaGlcIDsKK+S4reawlyA+IGNodXVraVwgOwor6aGV54S2ID4ga2VuemVuXCA7Civku6Tll6MgPiByZWlzaGlcIDsKK+ismeitsiA+IGtlbmpvdVwgOwor5aOu6bqXID4gc291cmVpXCA7CivmnbHlsrggPiB0b3VnYW5cIDsKK+S8neS7pCA+IGRlbnJlaVwgOwor5LuP5aGUID4gYnV0dG91XCA7CivpnJzpm7AgPiBzb3VmdW5cIDsKK+iznuWRsyA+IHNob3VtaVwgOwor6aCt55ebID4genV0c3V1XCA7CivkuLvmqKkgPiBzaHVrZW5cIDsKK+mbt+mtmiA+IHJhaWd5b1wgOwor5LiH54GvID4gbWFuZG91XCA7CivogZblo4cgPiBzZWlkYW5cIDsKK+iyoeWunSA+IHphaWhvdVwgOwor6Kyb6KuHID4ga291ZGFuXCA7CivlpJzpoqggPiB5b2themVcIDsKK+iyquWpqiA+IGRvbnJhblwgOwor54yu54GvID4ga2VudG91XCA7CivkvJDlgJIgPiBiYXR0b3VcIDsKK+ePvuWcsCA+IGdlbmNoaVwgOwor6IKi5L2TID4gc2hpdGFpXCA7CivnjJvniqwgPiBtb3VrZW5cIDsKK+abtOatoyA+IGtvdXNlaVwgOwor5aSp6Zu3ID4gdGVucmFpXCA7CivmnJ3mmakgPiBhc2FiYW5cIDsKK+ePvuWcqCA+IGdlbnphaVwgOwor5LuW5Zu9ID4gdGFrb2t1XCA7CivmnJfmnJcgPiByb3Vyb3VcIDsKK+S7ruWQjSA+IGtlbXlvdVwgOwor6aKo5pmvID4gZnV1a2VpXCA7Civoq5bpi5IgPiByb25wb3VcIDsKK+aWh+mdoiA+IGJ1bm1lblwgOwor5LyO5YCGID4gZ2lyeW91XCA7CivppIPlrZAgPiBneW91emFcIDsKK+S6leW6lSA+IHNlaXRlaVwgOwor5a2m5YWEID4gZ2Fra2VpXCA7Civniq/nvaogPiBoYW56YWlcIDsKK+Wkp+mboyA+IHRhaW5hblwgOwor5Lit5qynID4gY2h1dW91XCA7CivkvJ3kuJYgPiBkZW5zZWlcIDsKK+izm+WQjCA+IHNhbmRvdVwgOwor5LiN5ryBID4gZnVyeW91XCA7CivlpKrpmb0gPiB0YWl5b3VcIDsKK+WkqemamyA+IHRlbnNhaVwgOwor5pq054q2ID4gYm91am91XCA7Civml4vou6IgPiBzZW50ZW5cIDsKK+WkmumhjSA+IHRhZ2FrdVwgOwor5aSp6Zm6ID4gdGVua2VuXCA7CivogZbloIIgPiBzZWlkb3VcIDsKK+iAgeaJiyA+IHJvdXNodVwgOwor5Lya5Li7ID4ga2Fpc2h1XCA7CivmnbHlrq4gPiB0b3VndXVcIDsKK+adseWunSA+IHRvdWhvdVwgOwor6IGW5Z+fID4gc2VpaWtpXCA7CivlpKfpmoogPiBkYWl0YWlcIDsKK+S7o+WTgSA+IGRhaWhpblwgOwor5pyI5qGCID4gZ2Vra2VpXCA7CivpoJPnn6UgPiB0b25jaGlcIDsKK+iAgeaIkCA+IHJvdXNlaVwgOwor6ICQ5oCnID4gdGFpc2VpXCA7CivmlbXpo5sgPiB0ZWtpaGlcIDsKK+mghuekvCA+IGp1bnJlaVwgOwor5LmX5pWwID4gam91c3V1XCA7CivlpJXpoZQgPiB5dXVnYW9cIDsKK+S5seaIpiA+IHJhbnNlblwgOwor5pmC57+SID4gamlzaHV1XCA7CivogIPmha4gPiBrb3VyeW9cIDsKK+aWremHkSA+IGRhbmtpblwgOwor5LiN5risID4gZnVzb2t1XCA7Civku4vlnKggPiBrYWl6YWlcIDsKK+WkqumWpCA+IHRhaWtvdVwgOwor5pen6Kq8ID4ga3l1dWdpXCA7CivmlbTpoqggPiBzZWlmdXVcIDsKK+S7u+WFjSA+IG5pbm1lblwgOwor5a2Y5YiGID4gem9uYnVuXCA7Civku6TlkI0gPiByZWltZWlcIDsKK+mjsuWxiyA+IG5vbWl5YVwgOwor6IGW5ZywID4gc2VpY2hpXCA7CivkurrlpJYgPiBuaW5nYWlcIDsKK+aWp+mJniA+IGZ1ZXRzdVwgOwor5aSc6ZynID4geW9naXJpXCA7CivnjJvnhLYgPiBtb3V6ZW5cIDsKK+iBr+WQiCA+IHJlbmdvdVwgOwor5Lq65aOrID4gamluc2hpXCA7CivpnaLosowgPiBtZW5ib3VcIDsKK+iyqeWjsiA+IGhhbmJhaVwgOwor5Lm+5oCnID4ga2Fuc2VpXCA7CivkuLvmoLkgPiBzaHVrb25cIDsKK+Wkp+mWoiA+IG9vemVraVwgOwor5pen6KmgID4ga3l1dWVpXCA7Civku4rlm54gPiBrb25rYWlcIDsKK+aXpeiqjCA+IG5pc3NoaVwgOwor5pep6KiIID4gc291a2VpXCA7Civku6Plj4IgPiBkYWlzYW5cIDsKK+Wkp+mWgCA+IGRhaW1vblwgOwor5pys5ougID4gaG9ua3lvXCA7CivmnInmnJsgPiB5dXVib3VcIDsKK+eLoeefpSA+IGtvdWNoaVwgOwor6aOu5bGLID4gbm9taXlhXCA7CivmlbTpoJMgPiBzZWl0b25cIDsKK+aXp+iomCA+IGt5dXVraVwgOwor6Kqy6ZW3ID4ga2FjaG91XCA7CivlpoToqIAgPiBtb3VnZW5cIDsKK+iruOizoiA+IHNob2tlblwgOwor5pmp56iyID4gYmFudG91XCA7CivkupvlsJEgPiBzYXNob3VcIDsKK+S6oeWtkCA+IGJvdXNoaVwgOwor6LK05Zu9ID4ga2lrb2t1XCA7Civml4Xot68gPiB0YWJpamlcIDsKK+ixquW/qyA+IGdvdWthaVwgOwor5pel6KiIID4gbmlra2VpXCA7Civml6noposgPiBoYXlhbWlcIDsKK+mbu+mhlSA+IGRlbmtlblwgOwor6aSo5ZOhID4ga2FuJydpblwgOwor6LOi5YWEID4ga2Vua2VpXCA7CivlpJbpm7sgPiBnYWlkZW5cIDsKK+ePvuWToSA+IGdlbicnaW5cIDsKK+adv+WhgCA+IGl0YWJlaVwgOwor54mH6KiAID4gaGVuZ2VuXCA7CivkuqTlqr4gPiBrb3Vrb3VcIDsKK+S4i+a1gSA+IGthcnl1dVwgOwor572q54q2ID4gemFpam91XCA7Civml6fopo8gPiBreXV1a2lcIDsKK+aWr+mBkyA+IHNoaWRvdVwgOwor54++5ZOBID4gZ2VucGluXCA7CivnjqnlvIQgPiBnYW5yb3VcIDsKK+aUvum3uSA+IGhvdXlvdVwgOwor5a2m5LyaID4gZ2Fra2FpXCA7CivlpYnpgoQgPiBob3VrYW5cIDsKK+S4jeazgSA+IGZ1a3lvdVwgOwor5aWJ6YG3ID4gaG91c2VuXCA7CivoqpPpoZggPiBzZWlnYW5cIDsKK+acrOaHkCA+IGhvbmthaVwgOwor5Li55pyxID4gdGFuc2h1XCA7CivlpKfpkZEgPiB0YWlrYW5cIDsKK+S4uOacqCA+IG1hcnVraVwgOwor5a2m5LqLID4gZ2FrdWppXCA7CivmnIjml6YgPiBnZXR0YW5cIDsKK+WknOmVtyA+IHlvbmFnYVwgOwor5p2x5aSpID4gdG91dGVuXCA7CivlpYnpgIEgPiBob3Vzb3VcIDsKK+adseWkpyA+IHRvdWRhaVwgOwor6Z2i6KuHID4gbWVuZGFuXCA7CivlpYnov44gPiBob3VnZWlcIDsKK+abuOaelyA+IHNob3JpblwgOwor5aW46KiIID4ga2Fua2VpXCA7Civnh5Xpm4AgPiBlbmpha3VcIDsKK+acieaVsCA+IHl1dXN1dVwgOwor54u854u9ID4gcm91YmFpXCA7CivlqpLmn5MgPiBiYWlzZW5cIDsKK+e5gemWkSA+IGhhbmthblwgOwor5Luy5YCkID4gbmFrYW5lXCA7CivkuIrmsLQgPiBqb3VzdWlcIDsKK+iqmOmbuyA+IHl1dWRlblwgOwor5pmC57WmID4gamlreXV1XCA7Civpm4Tpto8gPiBvbmRvcmlcIDsKK+aZtOedgCA+IGhhcmVnaVwgOwor572w54K5ID4gYmF0dGVuXCA7CivkuqHlp4kgPiBib3VzaGlcIDsKK+Wkp+mOjCA+IG9vZ2FtYVwgOwor5Lqh5aa7ID4gYm91c2FpXCA7CivpnZLosYYgPiBhb21hbWVcIDsKK+iyp+WbsCA+IGhpbmtvblwgOwor5Luy5L+dID4gY2h1dWhvXCA7Civnj43lpYcgPiBjaGlua2lcIDsKK+isgOioiCA+IGJvdWtlaVwgOwor5Li75peoID4gc2h1c2hpXCA7CivkuqLlpa4gPiBrb3VmdW5cIDsKK+eJiOihjCA+IGhhbmtvdVwgOwor5aSn6Y2LID4gb29uYWJlXCA7CivmmrTmvKIgPiBib3VrYW5cIDsKK+S4iuautSA+IGpvdWRhblwgOwor5pyA5pepID4gbW9oYXlhXCA7Civpm7fpm7sgPiByYWlkZW5cIDsKK+S4h+awkSA+IGJhbm1pblwgOwor6ICB5buDID4gcm91aGFpXCA7Civku6TlhYQgPiByZWlrZWlcIDsKK+WnlOe4riA+IGlzaHVrdVwgOwor5LmX5omLID4gbm9yaXRlXCA7Civku4/lj4IgPiBidXNzYW5cIDsKK+aYh+iPryA+IHNob3VrYVwgOwor5LiA5rOKID4gaXBwYWt1XCA7Civoq7foq4wgPiBmdXVrYW5cIDsKK+S4u+aWhyA+IHNodWJ1blwgOwor6ZuE6bOlID4gb25kb3JpXCA7Civnj77li6IgPiBnZW5zZWlcIDsKK+iAgeW5vCA+IHJvdXlvdVwgOwor6Kqe6ZW3ID4gZ29jaG91XCA7CivlpZTotbAgPiBob25zb3VcIDsKK+iAgeW5tCA+IHJvdW5lblwgOwor5Lit5pyfID4gY2h1dWtpXCA7CivkuInmrbsgPiBzYW5zaGlcIDsKK+S7luWKmyA+IHRhcmlraVwgOwor5pys5oCnID4gaG9uc2VpXCA7Civku5jliYcgPiBmdXNva3VcIDsKK+e/u+W8hCA+IGhvbnJvdVwgOwor6LKh5ZujID4gemFpZGFuXCA7CivorJnomZogPiBrZW5reW9cIDsKK+S7o+WDpyA+IGRhaXNvdVwgOwor5LqI5a+pID4geW9zaGluXCA7CivkuLvmlLsgPiBzaHVrb3VcIDsKK+iqjOmdoiA+IHNoaW1lblwgOwor5LiH5q27ID4gYmFuc2hpXCA7CivogIHluKsgPiByb3VzaGlcIDsKK+S4h+atsyA+IG1hbnphaVwgOwor5a2Q5L6bID4ga29kb21vXCA7CivlrZjkuqEgPiBzb25ib3VcIDsKK+S6jOWtkCA+IGZ1dGFnb1wgOwor5LiK5qyEID4gam91cmFuXCA7Civku67kvZwgPiBrYXNha3VcIDsKK+mghueVqiA+IGp1bmJhblwgOwor6LOi5Lq6ID4ga2VuamluXCA7Civpm7Lpm4YgPiB1bnNodXVcIDsKK+irs+iqpiA+IGFuc2hvdVwgOwor6Zuy6ZuAID4gaGliYXJpXCA7Civnj77liY0gPiBnZW56ZW5cIDsKK+iAgeW3pyA+IHJvdWtvdVwgOwor5LuL5Y21ID4ga2FpcmFuXCA7CivlpKfpiYggPiBvb25hdGFcIDsKK+ipqemtgiA+IHNoaWtvblwgOwor5aWH6LmfID4ga2lzZWtpXCA7CivnvormsLQgPiB5b3VzdWlcIDsKK+e+pOajsiA+IGd1bnNlaVwgOwor6Zuj6aGMID4gbmFuZGFpXCA7CivlpKnph5EgPiB0ZW5raW5cIDsKK+acrOW9sSA+IGhvbicnZWlcIDsKK+iAkOWvkiA+IHRhaWthblwgOwor5aSp6YeNID4gdGVuanV1XCA7CivkuKbmnKggPiBuYW1pa2lcIDsKK+acrOW9kyA+IGhvbnRvdVwgOwor5pac6L66ID4gc2hhaGVuXCA7Civos6LkuLsgPiBrZW5zaHVcIDsKK+abuOaWjiA+IHNob3NhaVwgOwor576K5q+bID4geW91bW91XCA7CivlpKfph5EgPiB0YWlraW5cIDsKK+mdmeimsyA+IHNlaWthblwgOwor5aWH6LehID4ga2lzZWtpXCA7Civku4HlkJsgPiBqaW5rdW5cIDsKK+S4jeanmCA+IGJ1emFtYVwgOwor5Lq65ZOhID4gamluJydpblwgOwor5Lit5pelID4gbmFrYWJpXCA7CivmnKvlvJ8gPiBtYXR0ZWlcIDsKK+S6uuWTgSA+IGppbnBpblwgOwor5LiJ5qipID4gc2Fua2VuXCA7Civoq67oqaIgPiBzaGlqdW5cIDsKK+e4pumaiiA+IGp1dXRhaVwgOwor5LiA5qyhID4gaWNoaWppXCA7CivnhrHpoqggPiBuZXBwdXVcIDsKK+ixoeW1jCA+IHpvdWdhblwgOwor5aSn6YWUID4gdGFpc3VpXCA7CivkuIrmp5ggPiB1ZXphbWFcIDsKK+Wkp+mFkiA+IG9vemFrZVwgOwor5Lq65ZG9ID4gamlubWVpXCA7CivnuKbpmaMgPiBqdXVqaW5cIDsKK+WrgeW+oSA+IHlvbWVnb1wgOwor6LOe5LiOID4gc2hvdXlvXCA7CivmnJ3mgakgPiBjaG91b25cIDsKK+acrOW6lyA+IGhvbnRlblwgOwor6Zuy6ZaTID4ga3Vtb21hXCA7Civlp4vntYIgPiBzaGlqdXVcIDsKK+irluizmyA+IHJvbnNhblwgOwor5pu05pS5ID4ga291a2FpXCA7CivmlaLpl5ggPiBrYW50b3VcIDsKK+S6uuWQmyA+IGppbmt1blwgOwor54++5YOPID4gZ2Vuem91XCA7CivkurrlkI0gPiBqaW5tZWlcIDsKK+WkremAnSA+IHlvdXNlaVwgOwor5pWj6ZaLID4gc2Fua2FpXCA7Civku4/lhbggPiBidXR0ZW5cIDsKK+S4iealrSA+IHNhbmdvdVwgOwor6Kur6KiAID4ga2FuZ2VuXCA7Civku6Pku7sgPiBkYWluaW5cIDsKK+e+qOacmyA+IHNlbmJvdVwgOwor6Kmm6aiTID4gc2hpa2VuXCA7CivkuJbmn4QgPiB5b2dhcmFcIDsKK+S6uuWPoyA+IGppbmtvdVwgOwor6Kqe6YyyID4gZ29yb2t1XCA7CivmmJPogIUgPiBla2lzaGFcIDsKK+WkqemBkyA+IHRlbmRvdVwgOwor5Lq65Y+CID4gbmluamluXCA7CivlpKnpgY0gPiB0ZW5wZW5cIDsKK+WkqemBiyA+IHRlbicndW5cIDsKK+S4gOaouSA+IGljaGlqdVwgOwor5Luj5Lq6ID4gZGFpbmluXCA7Civku4rlhqwgPiBrb250b3VcIDsKK+S4iuajnyA+IGpvdXRvdVwgOwor5aSn6YGTID4gZGFpZG91XCA7Civpm6LpmpQgPiByaWtha3VcIDsKK+S7j+WDpyA+IGJ1c3NvdVwgOwor5aSa6YePID4gdGFyeW91XCA7Civml6XolK0gPiBoaWthZ2VcIDsKK+iBluWFuCA+IHNlaXRlblwgOwor5pq05rCRID4gYm91bWluXCA7Civpm6LpmbggPiByaXJpa3VcIDsKK+iAgeWusyA+IHJvdWdhaVwgOwor5paH6YG4ID4gYnVuc2VuXCA7CivkuIrmopMgPiBqb3VzaGlcIDsKK+acqOW3pSA+IG1va2tvdVwgOwor5Lmx5bCEID4gcmFuc2hhXCA7CivlpKnovrogPiB0ZXBwZW5cIDsKK+iyrOWLmSA+IHNla2ltdVwgOwor5paH6YGLID4gYnVuJyd1blwgOwor5peF6KOFID4gcnlvc291XCA7Civoq6boprMgPiB0ZWlrYW5cIDsKK+iAgeWtkCA+IHJvdXNoaVwgOwor6LGK5bm0ID4gaG91bmVuXCA7CivlpKfovrIgPiBkYWlub3VcIDsKK+aWueiogCA+IGhvdWdlblwgOwor5aWP6KuLID4gc291c2VpXCA7CivkuInmoYEgPiBtaWtldGFcIDsKK+acrOWztiA+IGhvbnRvdVwgOwor5Li75oimID4gc2h1c2VuXCA7CivogIHlrKIgPiByb3Vqb3VcIDsKK+iBluWDjyA+IHNlaXpvdVwgOwor5LiJ5qChID4gc2Fua291XCA7Civml4XooYwgPiByeW9rb3VcIDsKK+mbo+mWoiA+IG5hbmthblwgOwor5paw6KqeID4gc2hpbmdvXCA7CivlpKfovKogPiB0YWlyaW5cIDsKK+S4jeacvSA+IGZ1a3l1dVwgOwor5pS+6aGMID4gaG91ZGFpXCA7CivmnKzlsbEgPiBob256YW5cIDsKK+Wkqei7jSA+IHRlbmd1blwgOwor5LiJ5p6aID4gc2FubWFpXCA7Civmnb/liY0gPiBpdGFtYWVcIDsKK+ePvuS7oyA+IGdlbmRhaVwgOwor6aC75q27ID4gaGluc2hpXCA7Civnh5DpibEgPiByaW5rb3VcIDsKK+S7geWFhCA+IGppbmtlaVwgOwor5pys5bGLID4gaG9uJyd5YVwgOwor5LiN5pyNID4gZnVmdWt1XCA7Civpm7vpiLQgPiBkZW5yZWlcIDsKK+S4ieadvyA+IHNhbnBhblwgOwor6aGe5pysID4gcnVpaG9uXCA7Civlo7DploAgPiBzZWltb25cIDsKK+abmuaYpyA+IG1vdW1haVwgOwor54++5LuKID4gZ2Vua29uXCA7CivpoqjluK8gPiBmdXV0YWlcIDsKK+S6q+WPlyA+IGt5b3VqdVwgOwor6aKo5birID4gZnV1c2hpXCA7Civku5nkuLkgPiBzZW50YW5cIDsKK+S6uuWHuiA+IGhpdG9kZVwgOwor6aGe5pu4ID4gcnVpc2hvXCA7CivmnKzlsIogPiBob256b25cIDsKK+S4iuacnyA+IGthbWlraVwgOwor54ax6ZeYID4gbmV0dG91XCA7Civnj43lkbMgPiBjaGlubWlcIDsKK+abuOaIvyA+IHNob2JvdVwgOwor5LiA5qGIID4gaWNoaWFuXCA7CivkuInmnKwgPiBzYW5ib25cIDsKK+mkiuWIhiA+IHlvdWJ1blwgOwor5pyJ5oCnID4geXV1c2VpXCA7CivkuIfmnaUgPiBiYW5yYWlcIDsKK+ixquWloiA+IGdvdXNoYVwgOwor5pS56aGMID4ga2FpZGFpXCA7CivkuIrmm7ggPiBqb3VzaG9cIDsKK+acqOWxkSA+IGtpa3V6dVwgOwor5LuP5LyaID4gYnV0c3VlXCA7CivppKjkuLsgPiBrYW5zaHVcIDsKK+S4ieabuSA+IHNhbnNvdVwgOwor5LiJ5pu0ID4gc2Fua291XCA7CivnjK7mna8gPiBrZW5wYWlcIDsKK+S6oeWRvSA+IGJvdW1laVwgOwor5p2x5Y2KID4gdG91aGFuXCA7CivmlYXpmpwgPiBrb3Nob3VcIDsKK+aWreiogCA+IGRhbmdlblwgOwor5aSW6YGKID4gZ2FpeXV1XCA7CivmnInlv5cgPiB5dXVzaGlcIDsKK+acrOWumCA+IGhvbmthblwgOwor546J5bGLID4gdGFtYXlhXCA7CivkuqTlkIggPiBrb3Vnb3VcIDsKK+aWsOimjyA+IHNoaW5raVwgOwor6ICB5aa7ID4gcm91c2FpXCA7CivnjovlsIYgPiBvdXNob3VcIDsKK+S7leS4iiA+IHNoaWFnZVwgOwor6LGq5aOuID4gZ291c291XCA7CivpoZjmnJsgPiBnYW5tb3VcIDsKK+eIrOiZqyA+IGhhY2h1dVwgOwor6IGW5L2TID4gc2VpdGFpXCA7CivnjK7mnKwgPiBrZW5wb25cIDsKK+iAleWcsCA+IGtvdWNoaVwgOwor5Lit5omLID4gbmFrYXRlXCA7CivkuIrmmbogPiBqb3VjaGlcIDsKK+acgOaCqiA+IHNhaWFrdVwgOwor54eQ6YW4ID4gcmluc2FuXCA7Civni6zmvJQgPiBkb2t1ZW5cIDsKK+WkseiyuyA+IHNoaXBwaVwgOwor5Lqk5Y+LID4ga291eXV1XCA7CivpoZjmm7ggPiBnYW5zaG9cIDsKK+acq+WtqyA+IG1hc3NvblwgOwor5Lqh5ZCbID4gYm91a3VuXCA7CivorabnoLIgPiBrZWlob3VcIDsKK+aal+a1gSA+IGFucnl1dVwgOwor6IGW5LydID4gc2VpZGVuXCA7CivmnKvlrZAgPiBtYXNzaGlcIDsKK+S4ieaZryA+IHNhbmtlaVwgOwor546L5a6uID4gb3VreXV1XCA7Civlq4zlq4wgPiBpeWFpeWFcIDsKK+aUvumbuyA+IGhvdWRlblwgOwor6ZuM6ZuEID4gc2hpeXV1XCA7CivmnInlvaIgPiB5dXVrZWlcIDsKK+e/oOW1kCA+IHN1aXJhblwgOwor6aOf5ZmoID4gc2hva2tpXCA7CivlpKfotrMgPiBvb2FzaGlcIDsKK+iBluS7oyA+IHNlaWRhaVwgOwor5Lqh5Y+LID4gYm91eXV1XCA7Civnvo7mnI0gPiBiaWZ1a3VcIDsKK+S7iuS7iiA+IGltYWltYVwgOwor5LiJ5pinID4gc2FubWFpXCA7CivkuIDmnLYgPiBpY2hpZGFcIDsKK+S7iuS6uiA+IGtvbmppblwgOwor6IGW5Lq6ID4gc2VpamluXCA7CivnjaPmgKcgPiBqdXVzZWlcIDsKK+mbsumHjyA+IHVucnlvdVwgOwor5LiK5pesID4gam91anVuXCA7CivlpKfotaYgPiB0YWlzaGFcIDsKK+S4iuaXqCA+IGpvdXNoaVwgOwor5LiA5pydID4gaXRjaG91XCA7CivlpKLot68gPiB5dW1lamlcIDsKK+S4gOacjSA+IGlwcHVrdVwgOwor5aWH6KWyID4ga2lzaHV1XCA7CivkuI3mlbUgPiBmdXRla2lcIDsKK+irh+irliA+IGRhbnJvblwgOwor5Lih5ouzID4gamFua2VuXCA7CivkuIrmlrkgPiBqb3Vob3VcIDsKK+eOieWtkCA+IHRhbWFnb1wgOwor6aOv5Y+wID4gaGFuZGFpXCA7Civml6XoiKogPiBuaWtrb3VcIDsKK+aYjue0sCA+IG1laXNhaVwgOwor576I5p2fID4ga2lzb2t1XCA7Civnvbfmpa0gPiBoaWd5b3VcIDsKK+S6uuWBjyA+IG5pbmJlblwgOwor5aSW6LyqID4gZ2FpcmluXCA7CivlpKnos5wgPiB0ZW5zaGlcIDsKK+S4ieaWuSA+IHNhbnBvdVwgOwor6Z2S6JeNID4gc2VpcmFuXCA7CivlpKnos4cgPiB0ZW5zaGlcIDsKK+mfsueJqSA+IGFlbW9ub1wgOwor5LiK5paHID4gam91YnVuXCA7CivkuLvlvpMgPiBzaHVqdXVcIDsKK+aWreijgSA+IGRhbnNhaVwgOwor5Lq65YCrID4gamlucmluXCA7Civoq4voqJMgPiBzZWlrdW5cIDsKK+eMpeacrCA+IHdhaWhvblwgOwor5Lm+5Z2kID4ga2Vua29uXCA7CivkubHlo7IgPiByYW5iYWlcIDsKK+S4ieaWhyA+IHNhbm1vblwgOwor5aSn6LOiID4gdGFpa2VuXCA7CivkuIfmlrkgPiBiYW5wb3VcIDsKK+WkiemBtyA+IGhlbnNlblwgOwor6aGM5p2QID4gZGFpemFpXCA7Civku4rkuIogPiBraW5qb3VcIDsKK+iBluS4iiA+IHNlaWpvdVwgOwor5aSW6LuKID4gZ2Fpc2hhXCA7Civpm7vpgIEgPiBkZW5zb3VcIDsKK+eOhOWtqyA+IGdlbnNvblwgOwor5pS76ZiyID4ga291Ym91XCA7CivkuKHmiYsgPiByeW91dGVcIDsKK+S4g+aXpSA+IG5hbm9rYVwgOwor5pat6KGMID4gZGFua291XCA7CivmnJ3lrrYgPiBjaG91a2FcIDsKK+WkiemAoCA+IGhlbnpvdVwgOwor6aGY5paHID4gZ2FubW9uXCA7CivmnKzlp5MgPiBob25zZWlcIDsKK+S4gOaYqCA+IGlzc2FrdVwgOwor5aWJ6KGMID4gYnVneW91XCA7CivosqDlgrcgPiBmdXNob3VcIDsKK+S7geS6uiA+IGppbmppblwgOwor5pys5aa7ID4gaG9uc2FpXCA7CivpoqjlrrMgPiBmdXVnYWlcIDsKK+WrieWmrCA+IHNoaXR0b1wgOwor6Kyd572qID4gc2hhemFpXCA7CivnjJ/mnJ8gPiByeW91a2lcIDsKK+S6uuS9kyA+IG5pbnRlaVwgOwor5pel6ISaID4gaGlhc2hpXCA7CivmlofosaogPiBidW5nb3VcIDsKK+S4gOaWsCA+IGlzc2hpblwgOwor5Li75bm5ID4gc2h1a2FuXCA7Civmlr3olqwgPiBzZXlha3VcIDsKK+eLrOazsyA+IGRva3VlaVwgOwor5pac6KaWID4gc2hhc2hpXCA7CivlpKnorbQgPiB0ZW5rZW5cIDsKK+aVsOi7kiA+IHN1dWtlblwgOwor5aSp6K2mID4gdGVua2VpXCA7Civoqrnoq6cgPiBoYWlrYWlcIDsKK+e9qualrSA+IHphaWdvdVwgOwor5pSv6ZqKID4gc2hpdGFpXCA7Civml6nogIEgPiBzb3Vyb3VcIDsKK+mbu+i7iiA+IGRlbnNoYVwgOwor542j5bivID4ganV1dGFpXCA7CivkuIDmlKsgPiBpa2tha3VcIDsKK+S4u+W4hiA+IHNodWhhblwgOwor6aGe5o6oID4gcnVpc3VpXCA7CivmmI7nrZQgPiBtZWl0b3VcIDsKK+S4iuaPkCA+IGpvdXRlaVwgOwor57ea6aaZID4gc2Vua291XCA7CivlpInou6IgPiBoZW50ZW5cIDsKK+S4gOaTsiA+IGl0dGVraVwgOwor5LiK5o6yID4gam91a2VpXCA7CivmnaXlhqYgPiByYWlrb3VcIDsKK+eMm+aakSA+IG1vdXNob1wgOwor6Ku46Iq4ID4gc2hvZ2VpXCA7CivkuqHlhYQgPiBib3VrZWlcIDsKK+S6iOWRiiA+IHlva29rdVwgOwor5LiN5oyvID4gZnVzaGluXCA7Civmm7jlupcgPiBzaG90ZW5cIDsKK+S6uuS4liA+IGppbnNlaVwgOwor5pys5aGBID4gaG9ucnVpXCA7CivosqfkuY8gPiBiaW5ib3VcIDsKK+adpeWFiSA+IHJhaWtvdVwgOwor5aSW6LOHID4gZ2Fpc2hpXCA7Civnh7voo70gPiBrdW5zZWlcIDsKK+miqOWnvyA+IGZ1dXNoaVwgOwor6Zui6YO3ID4gcmlreW91XCA7CivmnKzloIIgPiBob25kb3VcIDsKK+S5neWkjyA+IGt5dXVrYVwgOwor6Z2S6I2JID4gYW9rdXNhXCA7Civoq7joiKwgPiBzaG9oYW5cIDsKK+WkluiyjCA+IGdhaWJvdVwgOwor5pei57+SID4ga2lzaHV1XCA7CivkuK3luqcgPiBjaHV1emFcIDsKK+eKrOeMvyA+IGtlbicnZW5cIDsKK+S4u+WzsCA+IHNodWhvdVwgOwor5LiN5om/ID4gZnVzaG91XCA7CivnvbDmna8gPiBiYXBwYWlcIDsKK+mguOacqCA+IGt1YmlraVwgOwor5LiJ5oudID4gc2FucGFpXCA7Civlppbnsr4gPiB5b3VzZWlcIDsKK+S5meWknCA+IG90c3V5YVwgOwor6aCT5q27ID4gdG9uc2hpXCA7CivmnInlrrMgPiB5dXVnYWlcIDsKK+e/kuWtlyA+IHNodXVqaVwgOwor5aSn6KiIID4gdGFpa2VpXCA7CivmmKXnnYAgPiBoYXJ1Z2lcIDsKK+S4gOaOrCA+IGlra2lrdVwgOwor57eo6ZqKID4gaGVudGFpXCA7Civkuq3kuq0gPiB0ZWl0ZWlcIDsKK+WkqeimpyA+IHRlbnJhblwgOwor6Kqt6KqmID4gZG9rdWp1XCA7CivpoIbms5UgPiBqdW5wb3VcIDsKK+S6rOS6uiA+IGtlaWppblwgOwor5pWX6YCAID4gaGFpdGFpXCA7CivnjJvmlLsgPiBtb3Vrb3VcIDsKK+Wkp+imsyA+IHRhaWthblwgOwor5LqM5YmyID4gbml3YXJpXCA7CivmnKjlnosgPiBraWdhdGFcIDsKK+S4ieaJjSA+IHNhbnNhaVwgOwor5pyb5aSWID4gYm91Z2FpXCA7CivkuK3lt54gPiBuYWthc3VcIDsKK+e+qeW/gyA+IGdpc2hpblwgOwor5aSn6KaBID4gdGFpeW91XCA7CivkuIDmjLogPiBpdGNob3VcIDsKK+aaruaYpSA+IGJvc2h1blwgOwor5Li75bCOID4gc2h1ZG91XCA7CivlqK/mpb0gPiBnb3Jha3VcIDsKK+S6reS4uyA+IHRlaXNodVwgOwor5LiH5omNID4gbWFuemFpXCA7CivmmrTmlL8gPiBib3VzZWlcIDsKK+iqpOisrCA+IGdvYnl1dVwgOwor5pen57iBID4ga3l1dWVuXCA7CivkuoDljZwgPiBraWJva3VcIDsKK+iqreinoyA+IGRva2thaVwgOwor5Li75a6wID4gc2h1c2FpXCA7Civnjovlm70gPiBvdWtva3VcIDsKK+WkmuiqrSA+IHRhZG9rdVwgOwor6aKo5aG1ID4gZnV1amluXCA7Civlo6vpgZMgPiBzaGlkb3VcIDsKK+mgjOatjCA+IHNob3VrYVwgOwor5Lqk5LujID4ga291dGFpXCA7CivkuZfloLQgPiBub3JpYmFcIDsKK+adseS4iiA+IHRvdWpvdVwgOwor5aSi6KaLID4geXVtZW1pXCA7CivkuKHluqYgPiByeW91ZG9cIDsKK+WkieiyjCA+IGhlbmJvdVwgOwor6aC75pWwID4gaGluc3V1XCA7CivoqqToqq0gPiBnb2Rva3VcIDsKK+S4gOaKiiA+IGljaGl3YVwgOwor6aCt5pu4ID4gdG91c2hvXCA7CivmmabmuIsgPiBrYWlqdXVcIDsKK+S4jeaDkSA+IGZ1d2FrdVwgOwor54+N5LqLID4gY2hpbmppXCA7CivmlZfou40gPiBoYWlndW5cIDsKK+adpeS8miA+IHJhaWthaVwgOwor5LiA5omTID4gaWNoaWRhXCA7CivmnaHkvosgPiBqb3VyZWlcIDsKK+S4gOaJiyA+IGhpdG90ZVwgOwor5p2l5Lu7ID4gcmFpbmluXCA7Civmmbrmra8gPiBjaGlzaGlcIDsKK+abvuWtqyA+IGhpbWFnb1wgOwor6Kqk6Ki6ID4gZ29zaGluXCA7CivoqqToqLMgPiBnb3lha3VcIDsKK+abveWtqyA+IGhpbWFnb1wgOwor57im6LWwID4ganV1c291XCA7CivmnKzllrYgPiBob24nJ2VpXCA7Civml6XntYwgPiBuaWtrZWlcIDsKK+acl+WgsSA+IHJvdWhvdVwgOwor5aSa6KeSID4gdGFrYWt1XCA7CivkuIfmhJ8gPiBiYW5rYW5cIDsKK+WliOiQvSA+IG5hcmFrdVwgOwor5aao56KNID4gYm91Z2FpXCA7Civoqp7oqr8gPiBnb2Nob3VcIDsKK+WknOilsiA+IHlhc2h1dVwgOwor54qg54mbID4gZ2lneXV1XCA7Civosarli6IgPiBnb3VzZWlcIDsKK+S4jeaApSA+IGZ1a3l1dVwgOwor5pel57O7ID4gbmlra2VpXCA7CivmmKXnlLsgPiBzaHVuZ2FcIDsKK+adoeS7tiA+IGpvdWtlblwgOwor6ZuF6YePID4gZ2FyeW91XCA7CivmnaHku6QgPiBqb3VyZWlcIDsKK+ixquWLhyA+IGdvdXl1dVwgOwor5pWj6LKhID4gc2FuemFpXCA7CivnhpTpipEgPiB5b3VzZW5cIDsKK+S4jeW/oCA+IGZ1Y2h1dVwgOwor5pei57SEID4ga2l5YWt1XCA7CivlpJboprMgPiBnYWlrYW5cIDsKK+maj+mghiA+IHp1aWp1blwgOwor5p2l5LiWID4gcmFpc2VpXCA7CivnuKbosqsgPiBqdXVrYW5cIDsKK+S4jeW+syA+IGZ1dG9rdVwgOwor57eR6ZuoID4gcnlva3V1XCA7CivmnKzlk6EgPiBob24nJ2luXCA7Civpm7voq4sgPiBkZW5zZWlcIDsKK+WkluimiyA+IHNvdG9taVwgOwor5LiJ5oCdID4gc2Fuc2hpXCA7CivmmI/nnaEgPiBrb25zdWlcIDsKK+ipqemBuCA+IHNoaXNlblwgOwor6Z2i57mLID4gb21vZ2FpXCA7CivpmpvpmZAgPiBzYWlnZW5cIDsKK+aWsOiKvSA+IHNoaW5tZVwgOwor5pyJ5aOwID4geXV1c2VpXCA7CivkubPljJYgPiBueXV1a2FcIDsKK+aVl+i1sCA+IGhhaXNvdVwgOwor5pS/6YGTID4gc2VpZG91XCA7CivmlbDoqZ4gPiBzdXVzaGlcIDsKK+ioqumfkyA+IGhvdWthblwgOwor5piO55y4ID4gbWVpYm91XCA7CivpoK3mlbAgPiB0b3VzdXVcIDsKK+aatOaMmSA+IGJvdWt5b1wgOwor542j5aemID4ganV1a2FuXCA7CivpmpTpm6IgPiBrYWt1cmlcIDsKK+acrOWRvSA+IGhvbm1laVwgOwor6aGe5b2iID4gcnVpa2VpXCA7CivkuK3lrZAgPiBuYWthZ29cIDsKK+iAgeWKnyA+IHJvdWtvdVwgOwor5puz5a2QID4gaGlraWtvXCA7CivlpKnompUgPiB0ZW5zYW5cIDsKK+aUvumAgSA+IGhvdXNvdVwgOwor5aSq6JmaID4gdGFpa3lvXCA7CivlpJboo4UgPiBnYWlzb3VcIDsKK+acrOWQjSA+IGhvbm1laVwgOwor5pS56YG4ID4ga2Fpc2VuXCA7CivkuIrlvKYgPiBqb3VnZW5cIDsKK+Wls+e1piA+IGpva3l1dVwgOwor6Zu76KejID4gZGVua2FpXCA7CivkuInlvKYgPiBzYW5nZW5cIDsKK+e9ruaPmyA+IGNoaWthblwgOwor6KqT6KmeID4gc2Vpc2hpXCA7CivkuozkvLggPiBuaXNoaW5cIDsKK+aciOWgsSA+IGdlcHBvdVwgOwor5pyA5aSnID4gc2FpZGFpXCA7Civnh7vokrggPiBrdW5qb3VcIDsKK+S6keS6kSA+IHVuJydudW5cIDsKK+mamemWkyA+IHN1a2ltYVwgOwor5pyA5aSWID4gc2FpZ2FpXCA7CivlqablvrMgPiBmdXRva3VcIDsKK+aatOaIuyA+IGJvdXJlaVwgOwor5pS56YCgID4ga2Fpem91XCA7CivlpKfomY4gPiBvb2RvcmFcIDsKK+mZtemnlSA+IHJ5b3VnYVwgOwor5aOy6LK3ID4gYmFpYmFpXCA7CivmlK/phY0gPiBzaGloYWlcIDsKK+S4puWtmCA+IGhlaXpvblwgOwor5Li45aSqID4gbWFydXRhXCA7CivmnZHkvJogPiBzb25rYWlcIDsKK+e+juW+syA+IGJpdG9rdVwgOwor5pyq5Y+OID4gbWlzaHV1XCA7CivkuIDlv5wgPiBpY2hpb3VcIDsKK+ipoOmAsiA+IGVpc2hpblwgOwor576k5bO2ID4gZ3VudG91XCA7CivoqpPoqIAgPiBzZWlnZW5cIDsKK+e+pOWzsCA+IGd1bnBvdVwgOwor5pyN5ZywID4gZnVrdWppXCA7CivorJ3npLwgPiBzaGFyZWlcIDsKK+S4gOW/gyA+IGlzc2hpblwgOwor5pyo5Y+iID4ga29tdXJhXCA7CivkuKHlrrYgPiByeW91a2VcIDsKK+S4gOW+syA+IGl0dG9rdVwgOwor5LqM5Lq6ID4gZnV0YXJpXCA7CivogIHlhbUgPiByb3VoZWlcIDsKK+eLguawlyA+IGt5b3VraVwgOwor5LiA5b6XID4gaXR0b2t1XCA7Civnt4/ploAgPiBzb3Vtb25cIDsKK+iAgeWFrCA+IHJvdWtvdVwgOwor54mH56uvID4ga2F0YXdhXCA7CivnjYTlsYsgPiBnb2t1eWFcIDsKK+ism+ekviA+IGtvdXNoYVwgOwor5LiA5b6AID4gaWNoaW91XCA7CivpoIzmoIQgPiBzaG91ZWlcIDsKK+eFjumkhSA+IHNlbmJlaVwgOwor5LiK5bivID4gdXdhb2JpXCA7Civpm5HouI8gPiB6YXR0b3VcIDsKK+abtOWniyA+IGtvdXNoaVwgOwor5paH6Je7ID4gYnVuc291XCA7CivkuIrluJ0gPiBqb3V0ZWlcIDsKK+iAgeWEqiA+IHJvdXl1dVwgOwor54ax6LObID4gbmVzc2FuXCA7CivmlZnorbcgPiBreW91Z29cIDsKK+S5s+WFkCA+IG55dXVqaVwgOwor5LiA5by1ID4gaXRjaG91XCA7CivkuIrlt7sgPiBqb3VrYW5cIDsKK+aatOaFoiA+IGJvdW1hblwgOwor5LiK5bezID4gam91c2hpXCA7CivnvqTlsYUgPiBndW5reW9cIDsKK+e6j+e2vyA+IHRlbm1lblwgOwor5aq+5ZCIID4ga291Z291XCA7CivogIHlg6cgPiByb3Vzb3VcIDsKK+S6ieS5sSA+IHNvdXJhblwgOwor54yb5oKqID4gbW91YWt1XCA7CivlpY/ogZ4gPiBzb3Vtb25cIDsKK+Wkp+iUtSA+IG9va3VyYVwgOwor5aSJ6KOFID4gaGVuc291XCA7CivkuIflt7sgPiBtYW5nYW5cIDsKK+mgk+aZuiA+IHRvbmNoaVwgOwor54uC5q2MID4ga3lvdWthXCA7Civml6XnqIsgPiBuaXR0ZWlcIDsKK+Wnpua3qyA+IGthbicnaW5cIDsKK+S4geW6piA+IGNob3Vkb1wgOwor5aSp6JOLID4gdGVuZ2FpXCA7CivmlZnoq60gPiBreW91eXVcIDsKK+eNheWtkCA+IHNoaXNoaVwgOwor5LiA5bqnID4gaWNoaXphXCA7CivkuK3lpK4gPiBjaHV1b3VcIDsKK+Wlj+iAhSA+IHNvdXNoYVwgOwor5LiB5bm0ID4gdGVpbmVuXCA7CivkuZflkIggPiBub3JpYWlcIDsKK+mfs+aomSA+IG9ucHlvdVwgOwor5pWj6KaLID4gc2Fua2VuXCA7CivkuZflj7cgPiBqb3Vnb3VcIDsKK+aatOaCqiA+IGJvdWFrdVwgOwor5pys5YidID4gaG9uc2hvXCA7CivpoqjlkJEgPiBmdXVrb3VcIDsKK+ipqei2oyA+IHNoaXNodVwgOwor5pys5YiGID4gaG9uYnVuXCA7CivmlZHorbcgPiBreXV1Z29cIDsKK+e4puimpyA+IGp1dXJhblwgOwor5LiA5bmFID4gaXBwdWt1XCA7CivogJDkuY8gPiB0YWlib3VcIDsKK+acjeWWqiA+IGZ1a3Vtb1wgOwor5pyo5YmjID4gYm9ra2VuXCA7CivnuKvoo70gPiBob3VzZWlcIDsKK+S4gOW4rSA+IGlzc2VraVwgOwor5aSn6JGsID4gdGFpc291XCA7CivlpKfokZcgPiB0YWljaG9cIDsKK+aTrOmdqSA+IGdpa2FrdVwgOwor5LiW5a2QID4gc2Vpc2hpXCA7Civoq5bogIUgPiByb25zaGFcIDsKK+irluiAgyA+IHJvbmtvdVwgOwor6Z+z5qW9ID4gb25nYWt1XCA7CivmnJflkJ8gPiByb3VnaW5cIDsKK+mbquimiyA+IHl1a2ltaVwgOwor54mp55SjID4gYnVzc2FuXCA7CivkubHlgKsgPiByYW5yaW5cIDsKK+mbsuihqCA+IHVucHlvdVwgOwor54mb55quID4gZ3l1dWhpXCA7CivkuIrlsaQgPiBqb3Vzb3VcIDsKK+mbo+iokyA+IG5hbmt1blwgOwor5Lmz5L6hID4gbnl1dWthXCA7CivkuI3lr6kgPiBmdXNoaW5cIDsKK+e/u+WAkiA+IGhvbnRvdVwgOwor6ICB5L2TID4gcm91dGFpXCA7Civpmbjpm6IgPiByaWt1cmlcIDsKK+aToemgrSA+IHRhaXRvdVwgOwor5aWH57+SID4ga2lzaHV1XCA7Civpm6Pop6MgPiBuYW5rYWlcIDsKK+aWree9qiA+IGRhbnphaVwgOwor6KiT6Zu7ID4ga3VuZGVuXCA7CivniaLnlaogPiByb3ViYW5cIDsKK+aZgua1gSA+IGppcnl1dVwgOwor5pas572qID4gemFuemFpXCA7Civml4XnsaAgPiBoYXRhZ29cIDsKK+aVouihjCA+IGthbmtvdVwgOwor6LWk44CFID4gYWthYWthXCA7CivmmbTmnJcgPiBzZWlyb3VcIDsKK+S4ieWwgSA+IHNhbnB1dVwgOwor54ax6KqgID4gbmVzc2VpXCA7CivkuInlr7ggPiBzYW56dW5cIDsKK+S4jeWtpiA+IGZ1Z2FrdVwgOwor5LiH5bCLID4gYmFuamluXCA7CivogIHkurogPiByb3VqaW5cIDsKK+eMtuWtkCA+IHl1dXNoaVwgOwor5pm05puHID4gc2VpZG9uXCA7CivkuIrlrpggPiBqb3VrYW5cIDsKK+S4ieWunSA+IHNhbnBvdVwgOwor6aKo5YmNID4gZnV1emVuXCA7CivpmaPpoqggPiBqaW5wdXVcIDsKK+eOhOWGrCA+IGdlbnRvdVwgOwor6ZuG6LKoID4gc2h1dWthXCA7CivnjoflhYggPiBzb3NzZW5cIDsKK+miqOWIuiA+IGZ1dXNoaVwgOwor6Zqn6YGTID4gc3VpZG91XCA7Civlo67oprMgPiBzb3VrYW5cIDsKK+acgOWWhCA+IHNhaXplblwgOwor572q5oKqID4gemFpYWt1XCA7CivkuIflrp0gPiBiYW5wb3VcIDsKK+aaluaIvyA+IGRhbmJvdVwgOwor5pWs6JmUID4ga2Vpa2VuXCA7CivpmqPpgqYgPiByaW5wb3VcIDsKK+S5seS6pCA+IHJhbmtvdVwgOwor6ICB5LitID4gcm91anV1XCA7CivmnKzkv7ggPiBob25wb3VcIDsKK+Wls+elniA+IG1lZ2FtaVwgOwor54qs5q2vID4ga2Vuc2hpXCA7CivpnZLnrYsgPiBhb3N1amlcIDsKK+iruOeoriA+IHNob3NodVwgOwor6Zmj6aCtID4gamludG91XCA7CivpoL3lu4MgPiB0YWloYWlcIDsKK+acieWQjSA+IHl1dW1laVwgOwor5pyL5Y+LID4gaG91eXV1XCA7CivmlofoirggPiBidW5nZWlcIDsKK+mZsOmZvSA+IG9uJyd5b3VcIDsKK+acieWPuCA+IHl1dXNoaVwgOwor5pyJ5Y+yID4geXV1c2hpXCA7CivoqbPoqJggPiBzaG91a2lcIDsKK+S4geWvpyA+IHRlaW5laVwgOwor5LiA5bCGID4gaXNzaG91XCA7CivkuIDlr74gPiBpdHRzdWlcIDsKK+e+qeWhviA+IGdpanVrdVwgOwor5LiA5a+4ID4gY2hvdHRvXCA7CivlpKfoiLkgPiBvb2J1bmVcIDsKK+mdkueruSA+IGFvZGFrZVwgOwor5LiA5a+pID4gaXNzaGluXCA7CivpnannoKUgPiBrYXdhdG9cIDsKK+mbkeiqjCA+IHphc3NoaVwgOwor54mH55y8ID4ga2F0YW1lXCA7Civmlq3nt5ogPiBkYW5zZW5cIDsKK+S5seS4liA+IHJhbnNlaVwgOwor54af6K2wID4ganVrdWdpXCA7CivkuJblpIkgPiBzZWloZW5cIDsKK+acrOS9kyA+IGhvbnRhaVwgOwor6aKo5YWJID4gZnV1a291XCA7CivkuLvlkb0gPiBzaHVtZWlcIDsKK+maoOmAuCA+IGluaXRzdVwgOwor5aSn6IejID4gZGFpamluXCA7Civnvo7lraYgPiBiaWdha3VcIDsKK+S4gOWulyA+IGlzc2h1dVwgOwor6Kmp6KuWID4gc2hpcm9uXCA7CivniYfnm64gPiBrYXRhbWVcIDsKK+aUv+irliA+IHNlaXJvblwgOwor5LiB5a2QID4gY2hvdWppXCA7CivnjoflgJIgPiBzb3R0b3VcIDsKK+acjeWLmSA+IGZ1a3VtdVwgOwor6Z2S56m6ID4gYW96b3JhXCA7CivmlL/oq4cgPiBzZWlkYW5cIDsKK+acieWNiiA+IHl1dWhhblwgOwor5LiA5a2XID4gaWNoaWppXCA7Civpm5HoqIAgPiB6b3Vnb25cIDsKK+e5i+iIuSA+IGtlaXNlblwgOwor5pys5Lu2ID4gaG9ua2VuXCA7CivmlL7oq4cgPiBob3VkYW5cIDsKK+S4u+WQmyA+IHNodWt1blwgOwor5Li45ZGzID4gbWFydW1pXCA7CivmnKzku6MgPiBob25kYWlcIDsKK+Wkp+iFvyA+IGRhaXRhaVwgOwor6Kmm6KuWID4gc2hpcm9uXCA7Civmmanmma8gPiBiYW5rZWlcIDsKK+S4i+WnkyA+IGdlc2hvdVwgOwor5aOu6KGMID4gc291a291XCA7CivlppnnjosgPiBteW91b3VcIDsKK+Wkp+iEsyA+IGRhaW5vdVwgOwor5peF56iLID4gcnlvdGVpXCA7CivlpYnntI0gPiBob3Vub3VcIDsKK+eGn+iqniA+IGp1a3Vnb1wgOwor6ZyK6IqdID4gcmVpc2hpXCA7CivmnInlirkgPiB5dXVrb3VcIDsKK+eLmeaSgyA+IHNvZ2VraVwgOwor5pyJ5YqfID4geXV1a291XCA7CivnjLblpKogPiB5dWRheWFcIDsKK+WknOiIuSA+IHlvZnVuZVwgOwor5pyq5LqGID4gbWlyeW91XCA7Civlp5PmsI8gPiBzZWlzaGlcIDsKK+S4iuWljyA+IGpvdXNvdVwgOwor5pS+6KiAID4gaG91Z2VuXCA7CivlpKfog4YgPiBkYWl0YW5cIDsKK+S4iuWkqSA+IGpvdXRlblwgOwor5pep55SjID4gc291emFuXCA7CivlpKfogqEgPiBvb21hdGFcIDsKK+acgOWNlyA+IHNhaW5hblwgOwor5aSp6IGeID4gdGVuYnVuXCA7CivoqLTov70gPiBzb3RzdWlcIDsKK+eMm+WwhCA+IG1vdXNoYVwgOwor6Kmg6KqmID4gZWlzaG91XCA7Civmmabml6UgPiBtaXNva2FcIDsKK+e5reezuCA+IGtlbnNoaVwgOwor5pS/6KaLID4gc2Vpa2VuXCA7CivnjJ/lraMgPiByeW91a2lcIDsKK+WmhOeUqCA+IGJvdXlvdVwgOwor5pu55Y+4ID4gc291c2hpXCA7CivoqJjpjLIgPiBraXJva3VcIDsKK+abuOWQjSA+IHNob21laVwgOwor5aSn6IGWID4gdGFpc2VpXCA7CivmnIjliIogPiBnZWtrYW5cIDsKK+S4h+WkqSA+IGJhbnRlblwgOwor5LiJ5aOrID4gc2Fuc2hpXCA7CivkuK3lkowgPiBjaHV1d2FcIDsKK+S4u+WLlSA+IHNodWRvdVwgOwor5pS56KiCID4ga2FpdGVpXCA7CivkuK3lkbMgPiBuYWthbWlcIDsKK+aXpeeUoyA+IG5pc3NhblwgOwor6Z2i55u4ID4gbWVuc291XCA7Civnvo7lppkgPiBiaW15b3VcIDsKK+ipleitsCA+IGh5b3VnaVwgOwor5pac57eaID4gc2hhc2VuXCA7CivlpKfogIEgPiB0YWlyb3VcIDsKK+aci+WFmiA+IGhvdXRvdVwgOwor6aKo5L2TID4gZnV1dGVpXCA7CivniZ3niZsgPiBtZXVzaGlcIDsKK+Wil+mFjSA+IHpvdWhhaVwgOwor6Z2i55qwID4gbWVuYm91XCA7CivkuYPlhawgPiBuYWlrb3VcIDsKK+mZo+mWgCA+IGppbm1vblwgOwor5piC54S2ID4ga291emVuXCA7CivkuIDlpbMgPiBpY2hpam9cIDsKK+S4iuWgtCA+IGpvdWpvdVwgOwor6ZmN6aCGID4ga291anVuXCA7CivlpKfnvqQgPiB0YWlndW5cIDsKK+mZoumVtyA+IGluY2hvdVwgOwor5Lit5Y+lID4gY2h1dWt1XCA7CivkuInloYEgPiBzYW5ydWlcIDsKK+acgOWJjSA+IHNhaXplblwgOwor6Zq76KqeID4gc2VraWdvXCA7Civmm4flpKkgPiBkb250ZW5cIDsKK+aciOWFiSA+IGdla2tvdVwgOwor6Kyd54q2ID4gc2hham91XCA7CivpnIrog70gPiByZWlub3VcIDsKK+S4u+WIkSA+IHNodWtlaVwgOwor57aa6ZaLID4gem9ra2FpXCA7Civlp7vml48gPiBpbnpva3VcIDsKK+S4ueWJjSA+IHRhbnplblwgOwor5aWJ562UID4gaG91dG91XCA7CivkuLjliaQgPiBnYW56YWlcIDsKK+Wkp+e9qiA+IGRhaXphaVwgOwor5LiA5aSiID4gaWNoaW11XCA7CivmnIDliJ0gPiBzYWlzaG9cIDsKK+S4gOWknCA+IGhpdG95b1wgOwor5LiA5aSVID4gaXNzZWtpXCA7CivkuIfloLQgPiBtYW5qb3VcIDsKK+iruOebuCA+IHNob3NvdVwgOwor6aGe5Z6LID4gcnVpa2VpXCA7CivlpYfnrZYgPiBraXNha3VcIDsKK+ipleiqniA+IGh5b3Vnb1wgOwor5ama5ae7ID4ga29uJydpblwgOwor5LiO5ZynID4geW9hdHN1XCA7CivnhpTop6MgPiB5b3VrYWlcIDsKK+ino+mhjCA+IGthaWRhaVwgOwor5aSa6IKJID4gdGFuaWt1XCA7CivkuI7lm70gPiB5b2tva3VcIDsKK+aUueijhSA+IGthaXNvdVwgOwor6Kmm6KGMID4gc2hpa291XCA7CivmmpfluZUgPiBhbm1ha3VcIDsKK+mahumBiyA+IHJ5dXV1blwgOwor5peL55ukID4gc2VuYmFuXCA7CivpmY3pnJwgPiBrb3Vzb3VcIDsKK+iqmOiHtCA+IHl1dWNoaVwgOwor5pqW5bivID4gZGFudGFpXCA7CivkuIvlm70gPiBnZWtva3VcIDsKK+aaq+WumiA+IHphbnRlaVwgOwor5pm65oWuID4gY2hpcnlvXCA7Civorabmo5IgPiBrZWlib3VcIDsKK+aWreeoriA+IGRhbnNodVwgOwor54us5b6AID4gZG9rdW91XCA7Civpn5zmmaYgPiB0b3VrYWlcIDsKK+aZi+abuCA+IHNoaW5qb1wgOwor54yf5aWHID4gcnlvdWtpXCA7CivkuInlm7IgPiBtaXRzdWlcIDsKK+WkluiBniA+IGdhaWJ1blwgOwor5LiJ5ZueID4gc2Fua2FpXCA7CivmnIjkv7ggPiBnZXBwb3VcIDsKK+eJuea0viA+IHRva3VoYVwgOwor5Li75YKsID4gc2h1c2FpXCA7CivkuLvlgpggPiBzaHVzYW5cIDsKK+mbgeihjCA+IGdhbmtvdVwgOwor5aSp57ayID4gdGVubW91XCA7CivpmbbphZQgPiB0b3VzdWlcIDsKK+abuOWGmSA+IHNob3NoYVwgOwor5paR57SLID4gaGFubW9uXCA7CivpoZXlnKggPiBrZW56YWlcIDsKK+acieS9kyA+IHl1dXRhaVwgOwor5aSn57axID4gdGFpa291XCA7Civlp6bmmbogPiBrYW5jaGlcIDsKK+eGj+ijvSA+IGt1bnNlaVwgOwor542E5ZCPID4gZ29rdXJpXCA7Civni6zluqcgPiBkb2t1emFcIDsKK+e3qeinoyA+IGthbmthaVwgOwor5LiJ5ZiGID4gc2FudGFuXCA7CivlpYnnpYAgPiBob3VzaGlcIDsKK+S4gOWbvSA+IGlra29rdVwgOwor5ai85a62ID4gc2hvdWthXCA7CivmmYPmm5wgPiBrb3V5b3VcIDsKK+eMn+WgtCA+IHJ5b3ViYVwgOwor6aCY5biDID4gcnlvdWZ1XCA7CivniYfniYcgPiBoZW5wZW5cIDsKK+S4gOWboCA+IGljaGlpblwgOwor6Zyn56ybID4gbXV0ZWtpXCA7CivpmbjpgYsgPiByaWt1dW5cIDsKK+acieS6uiA+IHl1dWppblwgOwor54Sh6ZeHID4gbXV5YW1pXCA7CivmmanmiJAgPiBiYW5zZWlcIDsKK+mbhOicgiA+IG9iYWNoaVwgOwor6Ziy6aKoID4gYm91ZnV1XCA7Civoqanol7sgPiBzaGlzb3VcIDsKK+Wkp+ezuyA+IHRhaWtlaVwgOwor57W56ZuyID4ga2VuJyd1blwgOwor54Wu6LGGID4gbmltYW1lXCA7CivnhpTono0gPiB5b3V5dXVcIDsKK+S4u+S9kyA+IHNodXRhaVwgOwor6KiT6YCjID4ga3VucmVuXCA7CivkuIflloQgPiBtYW56ZW5cIDsKK+WkqeexnyA+IHRlbnJhaVwgOwor5paH57O7ID4gYnVua2VpXCA7CivmnIDkvY4gPiBzYWl0ZWlcIDsKK+e5i+e0ryA+IGtlaXJ1aVwgOwor6Kqt57WMID4gZG9reW91XCA7CivnuYrntLAgPiBzZW5zYWlcIDsKK+aWveeZgiA+IHNlcnlvdVwgOwor5Li75Lu7ID4gc2h1bmluXCA7CivmlazogIEgPiBrZWlyb3VcIDsKK+mghuW9kyA+IGp1bnRvdVwgOwor6Zm96LuiID4geW91dGVuXCA7CivkuKHliIMgPiByeW91YmFcIDsKK+e1nummliA+IGtvdXNodVwgOwor5pel54S8ID4gaGl5YWtlXCA7CivkuIrlk4EgPiBqb3Vib25cIDsKK+aUvuiVqSA+IGhvdXRvdVwgOwor5Li75Lq6ID4gc2h1amluXCA7Civpoavli5UgPiBzZW5kb3VcIDsKK+mbhOiYgiA+IHl1dXp1aVwgOwor6Zi76ZqUID4gc29rYWt1XCA7Civpm6PoiLkgPiBuYW5zZW5cIDsKK+mahui1tyA+IHJ5dXVraVwgOwor6aCG5bu2ID4ganVuJydlblwgOwor6Zuj6IiqID4gbmFua291XCA7CivlqLzlqaYgPiBzaG91ZnVcIDsKK+WnlOabsiA+IGlreW9rdVwgOwor5Lit5YCkID4gbmFrYW5lXCA7CivlpYfnn68gPiBraWt5b3VcIDsKK+e3qeihjCA+IGthbmtvdVwgOwor5aSW57eaID4gZ2Fpc2VuXCA7Civlp7vmiJogPiBpbnNla2lcIDsKK+aYreaghCA+IHNob3VlaVwgOwor6aGe5ZCMID4gcnVpZG91XCA7CivoqqbntYwgPiB6dWt5b3VcIDsKK+aXqeeArCA+IGhheWFzZVwgOwor6Kme6Je7ID4gc2hpc291XCA7Civmm7jkvZMgPiBzaG90YWlcIDsKK+S4reS/nSA+IGNodXVob1wgOwor57eS6KuWID4gY2hvcm9uXCA7CivkuIrlkJEgPiBqb3Vrb3VcIDsKK+iou+iomCA+IGNodXVraVwgOwor5Li75LiKID4gc2h1am91XCA7CivmnIDkuK0gPiBtb25ha2FcIDsKK+S4iuWPuCA+IGpvdXNoaVwgOwor5ae/5oWLID4gc2hpdGFpXCA7Civpm5Hoj4wgPiB6YWtraW5cIDsKK+aWh+evhCA+IGJ1bnBhblwgOwor5paw55uGID4gbmlpYm9uXCA7Civlopfos4cgPiB6b3VzaGlcIDsKK+mbhOiViiA+IHl1dXp1aVwgOwor5pyA5LiKID4gbW9nYW1pXCA7CivlpKfnrYsgPiBvb3N1amlcIDsKK+WqkuS9kyA+IGJhaXRhaVwgOwor54iG56C0ID4gYmFrdWhhXCA7Civnt4/oq5YgPiBzb3Vyb25cIDsKK+S4gOWToSA+IGljaGlpblwgOwor5aSp56ulID4gdGVuZG91XCA7CivnjK7lkYggPiBrZW50ZWlcIDsKK+eLrOWxhSA+IGRva2t5b1wgOwor5ai85aaTID4gc2hvdWdpXCA7CivnibnmqKkgPiB0b2trZW5cIDsKK+ios+iqniA+IHlha3Vnb1wgOwor5aSW57SZID4gZ2Fpc2hpXCA7CivkuK3kvZAgPiBjaHV1c2FcIDsKK+S4h+WPoyA+IGJhbmtvdVwgOwor6ZuR6I2JID4gemFzc291XCA7CivkuIrljYogPiBqb3VoYW5cIDsKK+mZuOi3ryA+IHJpa3Vyb1wgOwor5aqS5LuLID4gYmFpa2FpXCA7CivlpKnnqbogPiB0ZW5rdXVcIDsKK+e3kuiogCA+IGNob2dlblwgOwor5pu05LujID4ga291dGFpXCA7CivoqLToqJ8gPiBzb3Nob3VcIDsKK+mcgOe1piA+IGp1a3l1dVwgOwor6aCt5aOwID4gdG91c2VpXCA7CivkuInljYMgPiBzYW56ZW5cIDsKK+S4ieWNgSA+IHNhbmp1dVwgOwor5pS56JGsID4ga2Fpc291XCA7CivkuI7lipsgPiB5b3Jpa2lcIDsKK+e1jOmokyA+IGtlaWtlblwgOwor5pep5ryPID4gc291cm91XCA7Civpm7vnt5ogPiBkZW5zZW5cIDsKK+Wkp+epuiA+IG9vem9yYVwgOwor5aSW57GzID4gZ2FpbWFpXCA7Civnt4/oqIggPiBzb3VrZWlcIDsKK+S4h+WNgyA+IGJhbnNlblwgOwor5aSp56ifID4gdGVucGluXCA7CivoqLPop6MgPiB5YWtrYWlcIDsKK+e5geewoSA+IGhhbmthblwgOwor5Lit5LqMID4gY2h1dW5pXCA7CivlpYfnmZYgPiBraWhla2lcIDsKK+aVj+iFlSA+IGJpbndhblwgOwor5aSp56ekID4gdGVuYmluXCA7CivntKLpurogPiBzb3VtZW5cIDsKK+e3j+impyA+IHNvdXJhblwgOwor576k5YOPID4gZ3Vuem91XCA7Civnt4/oposgPiBzb3VrZW5cIDsKK+e0oOm6uiA+IHNvdW1lblwgOwor5puZ5YWJID4gc2hva291XCA7CivmlZfogIUgPiBoYWlzaGFcIDsKK+WlrueEtiA+IGZ1bnplblwgOwor5LiH5YqrID4gbWFuZ291XCA7CivkuIrliY0gPiB1d2FtYWVcIDsKK+ioreioiCA+IHNla2tlaVwgOwor5pav55WMID4gc2hpa2FpXCA7CivmlrDnlKsgPiBzaGlucG9cIDsKK+mbhuiNtyA+IHNodXVrYVwgOwor6ZmE6YyyID4gZnVyb2t1XCA7CivmlZnnvqkgPiBreW91Z2lcIDsKK+mbjOiKsSA+IG1lYmFuYVwgOwor5aWH55eFID4ga2lieW91XCA7CivmmbTltZAgPiBzZWlyYW5cIDsKK+mdkueJqSA+IGFvbW9ub1wgOwor54mi5q27ID4gcm91c2hpXCA7CivnirbmhYsgPiBqb3V0YWlcIDsKK+WkqeelniA+IHRlbmppblwgOwor54S26L+EID4gc2FtYWRlXCA7CivpoYzlkI0gPiBkYWltZWlcIDsKK+S4gOWNhyA+IGlzc2hvdVwgOwor5aW95ryiID4ga291a2FuXCA7CivkuIDljLkgPiBpcHBpa2lcIDsKK+mhjOWPtyA+IGRhaWdvdVwgOwor5aSn56WtID4gdGFpc2FpXCA7CivkuInliIYgPiBzYW5wdW5cIDsKK+e+qeS+oCA+IGdpa3lvdVwgOwor54aP6JK4ID4ga3Vuam91XCA7Civpm7bntLAgPiByZWlzYWlcIDsKK+Wkp+ekviA+IHRhaXNoYVwgOwor5aSn56S8ID4gdGFpcmVpXCA7CivoqpPntJkgPiBzZWlzaGlcIDsKK+e3j+ijjyA+IHNvdXVyYVwgOwor54mp5qipID4gYnVra2VuXCA7CivlpJznqbogPiB5b3pvcmFcIDsKK+S4gOWLnSA+IGlzc2hvdVwgOwor5aOu6ICFID4gc291c2hhXCA7Civnt4/oo4EgPiBzb3VzYWlcIDsKK+eEoemHjyA+IG11cnlvdVwgOwor5LiJ5YasID4gc2FudG91XCA7CivkuIDliqkgPiBpY2hpam9cIDsKK+mbgOiNmCA+IGphbnNvdVwgOwor57eK6KSMID4ga2lua29uXCA7CivkuJbkv5cgPiBzZXpva3VcIDsKK+mgveWUkCA+IHRhaXRvdVwgOwor57im57eaID4ganV1c2VuXCA7CivniZvmrakgPiBneXV1aG9cIDsKK+S4h+WGhiA+IG1hbicnZW5cIDsKK+Wil+iogiA+IHpvdXRlaVwgOwor6aCG5a6IID4ganVuc2h1XCA7CivkuIflhaggPiBtYW56ZW5cIDsKK+S4gOWIuyA+IGlra29rdVwgOwor5pen5rS+ID4ga3l1dWhhXCA7CivnvoXljJcgPiByYWhva3VcIDsKK+mbque3miA+IHNlc3NlblwgOwor576k5L2TID4gZ3VudGFpXCA7CivkuIvlg5ogPiBrYXJ5b3VcIDsKK+e0sOmtmiA+IHNheW9yaVwgOwor5LiL5YOVID4gZ2Vib2t1XCA7CivkuIDliKkgPiBpY2hpcmlcIDsKK+Wkp+egsiA+IHRhaWhvdVwgOwor5pq05ZCbID4gYm91a3VuXCA7Civml6fms6IgPiBreXV1aGFcIDsKK+aVsOetiSA+IHN1dXRvdVwgOwor5aWz5rudID4gbWVkYWtpXCA7CivkuJbkvJ0gPiBzZWlkZW5cIDsKK+itpuaJiyA+IGtlaXNodVwgOwor6ZqP6KGMID4genVpa291XCA7Civmk43ou4ogPiBzb3VzaGFcIDsKK+WmguazlSA+IG55b2hvdVwgOwor5LiO5L+hID4geW9zaGluXCA7CivoqJjoqqYgPiBraXNob3VcIDsKK+mbt+euoSA+IHJhaWthblwgOwor5aSa56WlID4gdGFzaG91XCA7CivkuIDlhoYgPiBpY2hpZW5cIDsKK+S4gOWFtyA+IGljaGlndVwgOwor5LiN5L+hID4gZnVzaGluXCA7Civnt6jokZcgPiBoZW5jaG9cIDsKK+itpuaIkiA+IGtlaWthaVwgOwor5aGK6YmxID4ga2Fpa291XCA7CivniJvniJsgPiByYW5yYW5cIDsKK+aaluWcsCA+IGRhbmNoaVwgOwor57a46KiAID4gcmluZ2VuXCA7CivmlL7og4YgPiBob3V0YW5cIDsKK+iok+irrSA+IGt1bicneXVcIDsKK+aboOS4liA+IGtvdXNlaVwgOwor5aSp55y8ID4gdGVuZ2FuXCA7Civoqq3noLQgPiBkb2t1aGFcIDsKK+S4ieWAjSA+IHNhbmJhaVwgOwor6aGb5YCSID4gdGVudG91XCA7Civml4HngrkgPiBib3V0ZW5cIDsKK+ipqeiBliA+IHNoaXNlaVwgOwor54yb5YuHID4gbW91eXV1XCA7CivmlL7ogoYgPiBob3VzaGlcIDsKK+WlieeMriA+IGhvdWtlblwgOwor5LiA5YSAID4gaWNoaWdpXCA7CivntpnotbAgPiBrZWlzb3VcIDsKK+aXpeawuCA+IGhpbmFnYVwgOwor6aGe5L6LID4gcnVpcmVpXCA7CivoqJPoqqEgPiBrdW5rYWlcIDsKK+S4jeS9nCA+IGZ1c2FrdVwgOwor6KiA6LOqID4gZ2VuY2hpXCA7CivorLnmm7ggPiBraW5zaG9cIDsKK+e9suWQjSA+IHNob21laVwgOwor5piO5pyXID4gbWVpcm91XCA7CivkuIrkvosgPiBqb3VyZWlcIDsKK+mXmOm2jyA+IHRvdWtlaVwgOwor5aSp55uDID4gdGVucGFpXCA7CivkuIrkvb8gPiBqb3VzaGlcIDsKK+aYlOaZgiA+IHNla2lqaVwgOwor5pq05YuVID4gYm91ZG91XCA7CivloKTpmLIgPiB0ZWlib3VcIDsKK+iojuirliA+IHRvdXJvblwgOwor5pel5q+OID4gaGlnb3RvXCA7CivkuIrkvZMgPiBqb3V0YWlcIDsKK+S4jeS7siA+IGZ1bmFrYVwgOwor6Kqy55uuID4ga2Ftb2t1XCA7CivlpKfnm4MgPiB0YWloYWlcIDsKK+Wkp+eavyA+IG9vemFyYVwgOwor5LiJ5L2TID4gc2FudGFpXCA7Civmlofnm7IgPiBtb25tb3VcIDsKK+eGsee3miA+IG5lc3NlblwgOwor6aC95YuiID4gdGFpc2VpXCA7Civnhp/ogIMgPiBqdWtrb3VcIDsKK+WkieeoriA+IGhlbnNodVwgOwor5pat54mHID4gZGFucGVuXCA7CivnjJ/lhbcgPiByeW91Z3VcIDsKK+afkOOAhSA+IGJvdWJvdVwgOwor5aKT6KGoID4gYm9oeW91XCA7CivoqJPop6MgPiBrdW5rYWlcIDsKK+aYteaHhyA+IGppa2tvblwgOwor5aWz5rWBID4gam9yeXV1XCA7Civpn7PlrrkgPiBvbicneW91XCA7CivpmY3ou4ogPiBrb3VzaGFcIDsKK+mciuefpSA+IHJlaWNoaVwgOwor5aOw57SLID4gc2VpbW9uXCA7CivkuIrku6MgPiBqb3VkYWlcIDsKK+Wlh+eJuSA+IGtpZG9rdVwgOwor6aCY5ZyfID4gcnlvdWRvXCA7Civnvo7kv5cgPiBiaXpva3VcIDsKK+mghuWliSA+IGp1bnBvdVwgOwor5piT5patID4gZWtpZGFuXCA7CivkuInku6MgPiBzYW5kYWlcIDsKK+S4gOS/tSA+IGlwcHlvdVwgOwor57ax6KaBID4ga291eW91XCA7CivmlL7nva4gPiBob3VjaGlcIDsKK+mXh+m7kiA+IGFua29rdVwgOwor5LiN5LmZID4gZnVpdHN1XCA7CivnjK7kvZMgPiBrZW50YWlcIDsKK+e9quWQjSA+IHphaW1laVwgOwor5piP5piPID4ga29ua29uXCA7Civpm5HnuoIgPiB6YXNzYW5cIDsKK+WmmeahiCA+IG15b3VhblwgOwor5aWz5rOiID4gbWVuYW1pXCA7CivmmI7mmI4gPiBha2Fha2FcIDsKK+S4h+S7niA+IGJhbmppblwgOwor6Zui57GNID4gcmlzZWtpXCA7CivkuI3kuIAgPiBmdWl0c3VcIDsKK+aWmeeQhiA+IHJ5b3VyaVwgOwor5LiK5LmXID4gam91am91XCA7CivmmpfllLEgPiBhbnNob3VcIDsKK+S4ieS5lyA+IHNhbmpvdVwgOwor5piO5patID4gbWVpZGFuXCA7CivntLrpnZIgPiBrb25qb3VcIDsKK+aVrOekvCA+IGtlaXJlaVwgOwor6Zu356WeID4gcmFpamluXCA7Civpmbboo70gPiB0b3VzZWlcIDsKK+S4iuS4liA+IGpvdXNlaVwgOwor5LiK5LiKID4gam91am91XCA7CivmmI7mlocgPiBtZWlidW5cIDsKK+aZtOWkqSA+IHNlaXRlblwgOwor5LiH5LmXID4gYmFuam91XCA7Civoqr/nkIYgPiBjaG91cmlcIDsKK+aWreeEtiA+IGRhbnplblwgOwor5aSp55SjID4gdGVuc2FuXCA7CivlpKnnlJ8gPiB0ZW5zZWlcIDsKK+aZqeWpmiA+IGJhbmtvblwgOwor5piO5pWPID4gbWVpYmluXCA7CivpoZjkuLsgPiBnYW5zaHVcIDsKK+eJiOaoqSA+IGhhbmtlblwgOwor54OI6aKoID4gcmVwcHV1XCA7CivntYTplqMgPiBzb2tha3VcIDsKK+S4h+S4iCA+IGJhbmpvdVwgOwor5LiH5LiHID4gbWFubWFuXCA7CivoqIDoq5YgPiBnZW5yb25cIDsKK+mZuOihjCA+IHJpa2tvdVwgOwor5aSn55SfID4gZGFpc2VpXCA7Civpm4DnvoUgPiBqYWt1cmFcIDsKK+S4geS6pSA+IHRlaWdhaVwgOwor6K2w5bitID4gZ2lzZWtpXCA7Civnvo7kuosgPiBtaWdvdG9cIDsKK+WnkeaBryA+IGtvc29rdVwgOwor57mB55ubID4gaGFuam91XCA7CivkuIDkurogPiBoaXRvcmlcIDsKK+aUvue4piA+IGhvdWp1dVwgOwor6KuW54K5ID4gcm9udGVuXCA7Civoqannt6ggPiBzaGloZW5cIDsKK+eMruS4iiA+IGtlbmpvdVwgOwor5pel5qeYID4gaGlzYW1hXCA7CivpmaroprMgPiBiYWlrYW5cIDsKK+S4gOS6jCA+IGljaGluaVwgOwor5LiA5LqLID4gaWNoaWppXCA7CivntKDpppYgPiBzb2t1YmlcIDsKK+eIm+a8qyA+IHJhbm1hblwgOwor6ZeY6a2CID4gdG91a29uXCA7CivnibnmjqogPiB0b2t1c29cIDsKK+aUv+e2sSA+IHNlaWtvdVwgOwor6Kmm57e0ID4gc2hpcmVuXCA7Civoqofnp7AgPiBrb3Nob3VcIDsKK+WlieeBryA+IGhvdXRvdVwgOwor6KiA6KizID4gaWl3YWtlXCA7Civln7nppIogPiBiYWl5b3VcIDsKK+aUr+e9siA+IHNoaXNob1wgOwor5LiB5LiBID4gdG91dG91XCA7Civoq7jmsI8gPiBzaG9zaGlcIDsKK+iogOiogCA+IGdlbmdlblwgOwor5LiA5LiBID4gaXRjaG91XCA7Civnt4/oj5wgPiBzb3V6YWlcIDsKK+aUv+e1jCA+IHNlaWtlaVwgOwor5aSa55eFID4gdGFieW91XCA7Civpm7bnoJUgPiByZWlzYWlcIDsKK+aSpOmAgCA+IHRldHRhaVwgOwor6KaL6aCDID4gbWlnb3JvXCA7CivmlLnnt6ggPiBrYWloZW5cIDsKK+eEoeizgyA+IG11Y2hpblwgOwor6KiI6KOFID4ga2Vpc291XCA7Civpm4Tnt6ggPiB5dXVoZW5cIDsKK+aVmeenkSA+IGt5b3VrYVwgOwor57ac6KanID4gc291cmFuXCA7CivpnIrnlYwgPiByZWlrYWlcIDsKK+aZuuWaoiA+IGNoaW5vdVwgOwor57iB57WEID4gZW5ndW1pXCA7CivlpJrnlJ8gPiB0YXNob3VcIDsKK+ism+abuCA+IGtvdXNob1wgOwor57Sr6Zu7ID4gc2hpZGVuXCA7CivpnZnmraIgPiBzZWlzaGlcIDsKK+eJueaKgCA+IHRva3VnaVwgOwor54us5ZKMID4gZG9rdXdhXCA7CivmlZnnpZYgPiBreW91c29cIDsKK+aVmeekuiA+IGt5b3VqaVwgOwor5aCF6ZmjID4ga2VuamluXCA7Civoqo3nn6UgPiBuaW5jaGlcIDsKK+eLguWlsyA+IGt5b3Vqb1wgOwor5aSW55SoID4gZ2FpeW91XCA7CivnianmkI0gPiBidXNzb25cIDsKK+imgemghSA+IHlvdWtvdVwgOwor6KaB6aCCID4geW91a291XCA7CivngrnpoK0gPiB0ZW50b3VcIDsKK+aUr+e3miA+IHNoaXNlblwgOwor572w5L+4ID4gYmFwcG91XCA7CivmlofnjK4gPiBidW5rZW5cIDsKK+ipqeevhyA+IHNoaWhlblwgOwor5pel5p+EID4gaGlnYXJhXCA7Civlp4nlvJ8gPiBzaGltYWlcIDsKK+e4geexjSA+IGVuc2VraVwgOwor6Zui56SBID4gcmlzaG91XCA7Civpn7Pln58gPiBvbicnaWtpXCA7CivoqIDooYwgPiBnZW5rb3VcIDsKK+inkui3nSA+IGtha2t5b1wgOwor5aCx6YGTID4gaG91ZG91XCA7Civmlrnms5UgPiBob3Vob3VcIDsKK+aXreaaiSA+IGt5b2traVwgOwor57W26LObID4gemVzc2FuXCA7CivlpoLmnaUgPiBueW9yYWlcIDsKK+Wkp+eJqSA+IG9vbW9ub1wgOwor5piC5o+aID4ga291eW91XCA7CivpnLLmu7QgPiByb3Rla2lcIDsKK+e2muihjCA+IHpva2tvdVwgOwor6Kmm566XID4gc2hpc2FuXCA7Civoq6vmrbsgPiBrYW5zaGlcIDsKK+mZjeiqlSA+IGtvdXRhblwgOwor54mI5pysID4gaGFucG9uXCA7Civoq6vmraIgPiBrYW5zaGlcIDsKK+aaluWGrCA+IGRhbnRvdVwgOwor6Zu755WqID4gZGVuYmFuXCA7Civpm7vnlYwgPiBkZW5rYWlcIDsKK+iumuWYhiA+IHNhbnRhblwgOwor5pep5pmpID4gc291YmFuXCA7CivpnIrnjaMgPiByZWlqdXVcIDsKK+e3qOe6giA+IGhlbnNhblwgOwor5pmC5a6XID4gamlzaHV1XCA7CivmlrDmtL4gPiBzaGlucGFcIDsKK+aXreaXlyA+IGt5b2traVwgOwor6ZuE56+HID4geXV1aGVuXCA7Civpm5HnqK4gPiB6YXNzaHVcIDsKK+e0memdoiA+IHNoaW1lblwgOwor5aWP5rOVID4gc291aG91XCA7CivlpLHngasgPiBzaGlra2FcIDsKK+aWkeeCuSA+IGhhbnRlblwgOwor6Zuq55uuID4geXVraW1lXCA7Civlpb3mnJsgPiBrb3Vib3VcIDsKK+aXp+aZgiA+IGt5dXVqaVwgOwor6KqV55SfID4gdGFuam91XCA7CivmmLzlr50gPiBoaXJ1bmVcIDsKK+aTjeihjCA+IHNvdWtvdVwgOwor54m55oG1ID4gdG9ra2VpXCA7CivmmLzlr5AgPiBoaXJ1bmVcIDsKK+eFmeiNiSA+IHRhYmFrb1wgOwor6Kmp56i/ID4gc2hpa291XCA7CivorablrpggPiBrZWlrYW5cIDsKK+e1tuiugyA+IHplc3NhblwgOwor5pa55q2jID4gaG91c2VpXCA7Civoq5bms5UgPiByb25wb3VcIDsKK+eIm+atuyA+IHJhbnNoaVwgOwor5pW1546LID4gdGVraW91XCA7CivpnoXmjowgPiBvdXNob3VcIDsKK+ishOacrCA+IHRvdWhvblwgOwor5pS556uEID4ga2FpemFuXCA7CivlpoTmlq0gPiBtb3VkYW5cIDsKK+eJueW/qyA+IHRva2thaVwgOwor5aSp54G9ID4gdGVuc2FpXCA7CivpnZLmpbwgPiBzZWlyb3VcIDsKK+mZhOiolyA+IGZ1dGFrdVwgOwor5pen5pWFID4ga3l1dWtvXCA7Civnib3lvJUgPiBrZW4nJ2luXCA7Civmma/lk4EgPiBrZWloaW5cIDsKK+aXpeaVsCA+IGhpa2F6dVwgOwor54mI5pWwID4gaGFuc3V1XCA7Civmlq3msLQgPiBkYW5zdWlcIDsKK+e1puiyuyA+IGt5dXVoaVwgOwor54em54S2ID4gc2FuemVuXCA7CivlppnmioAgPiBteW91Z2lcIDsKK+e0hemhlCA+IGtvdWdhblwgOwor5aa75bivID4gc2FpdGFpXCA7Civpm4Xnp7AgPiBnYXNob3VcIDsKK+WogeWWnSA+IGlrYXRzdVwgOwor6aCR5YalID4gZ2FubWVpXCA7Civoqq3ngrkgPiB0b3V0ZW5cIDsKK+eFjuiMtiA+IHNlbmNoYVwgOwor5piO5b+rID4gbWVpa2FpXCA7Civlpqzlv4MgPiB0b3NoaW5cIDsKK+aZuuWLhyA+IGNoaXl1dVwgOwor6K2r5aaEID4gc2VubW91XCA7CivmmbbljJYgPiBzaG91a2FcIDsKK+aVtOeJiCA+IHNlaWhhblwgOwor6Zu3542jID4gcmFpanV1XCA7CivpnZLmoZAgPiBhb2dpcmlcIDsKK+Wkp+a9riA+IG9vc2hpb1wgOwor5pmu5Y+KID4gZnVreXV1XCA7Civni4LllpwgPiBreW91a2lcIDsKK+Wkqea8oiA+IHRlbmthblwgOwor6Zm26Iq4ID4gdG91Z2VpXCA7Civml5fml6UgPiBoYXRhYmlcIDsKK+mdkuafsyA+IGFveWFnaVwgOwor6Kit572uID4gc2V0Y2hpXCA7CivnianmgKcgPiBidXNzZWlcIDsKK+mZhOihqCA+IGZ1aHlvdVwgOwor6Zuj55SjID4gbmFuemFuXCA7CivorpLlj6MgPiB6YW5rb3VcIDsKK+S7iuOAhSA+IGltYWltYVwgOwor6aCR5YGlID4gZ2Fua2VuXCA7CivmmpfkuK0gPiBhbmNodXVcIDsKK+itt+WbvSA+IGdva29rdVwgOwor5pi85aScID4gY2h1dXlhXCA7CivoqIDokYkgPiBrb3RvYmFcIDsKK+imqui6qyA+IHNoaW5taVwgOwor5pW054S2ID4gc2VpemVuXCA7CivntKHpjJggPiBib3VzdWlcIDsKK+irjOatoiA+IGthbnNoaVwgOwor5aSW54GvID4gZ2FpdG91XCA7CivlpoTmjJkgPiBib3VreW9cIDsKK+e4geefsyA+IGVuc2VraVwgOwor5Z+86YqAID4gc2FpZ2luXCA7CivplpPptKggPiBhaWdhbW9cIDsKK+mcp+awtyA+IG11aHlvdVwgOwor5pSv56S+ID4gc2hpc2hhXCA7CivpnZLmm7ggPiBzZWlzaG9cIDsKK+aYpeWtoyA+IHNodW5raVwgOwor5pWZ55CGID4ga3lvdXJpXCA7Civoq7jmlrkgPiBzaG9ob3VcIDsKK+Wil+e9riA+IHpvdWNoaVwgOwor5aSp5ravID4gdGVuZ2FpXCA7CivoqZDnp7AgPiBzYXNob3VcIDsKK+aRgumWoiA+IHNla2thblwgOwor6K2m5aCxID4ga2VpaG91XCA7Civntr7nvoUgPiByeW91cmFcIDsKK+e3j+e1sSA+IHNvdXRvdVwgOwor6aCY5LqLID4gcnlvdWppXCA7Civni4Llj6UgPiBreW91a3VcIDsKK+WmluaAqiA+IHlvdWthaVwgOwor5pWZ546LID4ga3lvdW91XCA7Civoq7jmlL8gPiBzaG9zZWlcIDsKK+aWveadoSA+IHNoaWpvdVwgOwor6Zmz6IWQID4gY2hpbnB1XCA7CivlpKfmtbcgPiB0YWlrYWlcIDsKK+WnieWmuSA+IHNoaW1haVwgOwor5aCx6KydID4gaG91c2hhXCA7CivlprvlrZAgPiBzYWlzaGlcIDsKK+eLrOS5mSA+IGRvaXRzdVwgOwor54Wp57SvID4gaGFucnVpXCA7CivniYfmiYsgPiBrYXRhdGVcIDsKK+mbu+eBryA+IGRlbnRvdVwgOwor54mH5oi4ID4ga2F0YWRvXCA7CivlpKfmtIsgPiB0YWl5b3VcIDsKK+Wnv+WLoiA+IHNoaXNlaVwgOwor6KeS6KGMID4ga2Fra291XCA7CivlqIHlipsgPiBpcnlva3VcIDsKK+WlveaKlSA+IGtvdXRvdVwgOwor5paR5rCXID4gbXVyYWtpXCA7CivmlabnhYwgPiB0b25rb3VcIDsKK+mbqueJhyA+IHNlcHBlblwgOwor5aSn5rOiID4gb29uYW1pXCA7CivlpInngb0gPiBoZW5zYWlcIDsKK+Wkp+azlSA+IHRhaWhvdVwgOwor6Zu254K5ID4gcmVpdGVuXCA7Civlpb3miYsgPiBrb3VzaHVcIDsKK+aZqeWGrCA+IGJhbnRvdVwgOwor5aW95oimID4ga291c2VuXCA7Civmlq3moYggPiBkYW4nJ2FuXCA7Civmlofms5UgPiBidW5wb3VcIDsKK+WkqeawtCA+IHRlbnN1aVwgOwor6aCR5LiIID4gZ2Fuam91XCA7CivlpJbmua8gPiBzb3RveXVcIDsKK+aWh+ayuyA+IGJ1bmNoaVwgOwor5pWi54S2ID4ga2FuemVuXCA7CivmmablhqUgPiBrYWltZWlcIDsKK+aVmeeItiA+IGt5b3VmdVwgOwor5aaE5oOzID4gbW91c291XCA7CivntJTpioAgPiBqdW5naW5cIDsKK+WkreatuyA+IHlvdXNoaVwgOwor5pS/55WMID4gc2Vpa2FpXCA7CivlpKfmsLQgPiBvb21penVcIDsKK+e2v+e2vyA+IG1lbm1lblwgOwor5aSW5rivID4gZ2Fpa291XCA7Civoqqzms5UgPiBzZXBwb3VcIDsKK+imi+i+vCA+IG1pa29taVwgOwor6Kiq57GzID4gaG91YmVpXCA7CivoqabnlKggPiBzaGl5b3VcIDsKK+e0sOi6qyA+IGhvc29taVwgOwor5Z+O6ZaAID4gam91bW9uXCA7CivmlofmsJEgPiBidW5taW5cIDsKK+eCremJsSA+IHRhbmtvdVwgOwor5pen5oGpID4ga3l1dW9uXCA7Civntr/ntKEgPiBtZW5ib3VcIDsKK+WlveaEnyA+IGtvdWthblwgOwor57SU6YeRID4ganVua2luXCA7Civopb/pg4ogPiBzZWlrb3VcIDsKK+WknOaziiA+IHlhaGFrdVwgOwor5pa95pS/ID4gc2hpc2VpXCA7Civml6fmgKggPiBreXV1ZW5cIDsKK+aWueaWuSA+IGhvdWJvdVwgOwor57a/57O4ID4gbWVuc2hpXCA7Civml6jlv7UgPiBzaGluZW5cIDsKK+aTjeiIuSA+IHNvdXNlblwgOwor5aao5a6zID4gYm91Z2FpXCA7CivpnIrms4kgPiByZWlzZW5cIDsKK+e2vuezuCA+IGF5YWl0b1wgOwor6Zu75rqQID4gZGVuZ2VuXCA7CivlpoTlv7UgPiBtb3VuZW5cIDsKK+eKtuWLoiA+IGpvdXNlaVwgOwor5aeU5ZixID4gaXNob2t1XCA7CivnuYrmr5sgPiBzZW5tb3VcIDsKK+mWoumgrSA+IGthbnRvdVwgOwor5aWJ5pu4ID4gaG91c2hvXCA7CivlpJbmtIsgPiBnYWl5b3VcIDsKK+ilv+mBiiA+IHNlaXl1dVwgOwor57mU5qmfID4gc2hva2tpXCA7Civlpa7miKYgPiBmdW5zZW5cIDsKK+ism+W4qyA+IGtvdXNoaVwgOwor6ZyK5rC0ID4gcmVpc3VpXCA7Civngq3phbggPiB0YW5zYW5cIDsKK+WllOaUviA+IGhvbnBvdVwgOwor57SN6YeRID4gbm91a2luXCA7Civmma/ku7AgPiBrZWlrb3VcIDsKK+e0jemHhyA+IG5vdXNhaVwgOwor5paD5q27ID4gaGVpc2hpXCA7CivoprPopqcgPiBrYW5yYW5cIDsKK+iruOaJiyA+IG1vcm90ZVwgOwor6Z+z5L+hID4gb25zaGluXCA7Civns5bpoZ4gPiB0b3VydWlcIDsKK+eyvumtgiA+IHNlaWtvblwgOwor6KiT57e0ID4ga3VucmVuXCA7Civln7rou7ggPiBraWppa3VcIDsKK+mbo+eCuSA+IG5hbnRlblwgOwor5aSc5q+OID4geW9nb3RvXCA7Civml6XlvbEgPiBoaWthZ2VcIDsKK+aVo+a8qyA+IHNhbm1hblwgOwor57ep55uuID4geXVydW1lXCA7CivniYflvbEgPiBoZW4nJ2VpXCA7Civngb3pm6MgPiBzYWluYW5cIDsKK+WmhOW8gSA+IGJvdWJlblwgOwor6ZyK5q6/ID4gcmVpZGVuXCA7Civml6LlvpcgPiBraXRva3VcIDsKK+Wkp+aoqSA+IHRhaWtlblwgOwor6KuW5peoID4gcm9uc2hpXCA7Civnsr7pq4QgPiBzZWl6dWlcIDsKK+aWr+aWhyA+IHNoaWJ1blwgOwor5Z+06LyqID4gaGFuaXdhXCA7Civoq5bmlq0gPiByb25kYW5cIDsKK+irluaWhyA+IHJvbmJ1blwgOwor54WZ566hID4ga2lzZXJ1XCA7CivniL3lv6sgPiBzb3VrYWlcIDsKK+mZjeiHqCA+IGtvdXJpblwgOwor5aSn5qaCID4gdGFpZ2FpXCA7Civoqr/mn7sgPiBjaG91c2FcIDsKK+mdmeaFiyA+IHNlaXRhaVwgOwor6ZuM54mbID4gbWV1c2hpXCA7Civnt6Dnm58gPiB0ZWltZWlcIDsKK+mWi+mkqCA+IGthaWthblwgOwor6Kqy5qWtID4ga2FneW91XCA7CivnhKHoh60gPiBtdXNodXVcIDsKK+WkieazlSA+IGhlbnBvdVwgOwor6Z2x5bivID4gamludGFpXCA7CivmmI7lpKcgPiBtZWlkYWlcIDsKK+eJn+WtkCA+IGJvdXNoaVwgOwor6Zu75rGgID4gZGVuY2hpXCA7CivplonppKggPiBoZWlrYW5cIDsKK+iruOaCqiA+IHNob2FrdVwgOwor5pif5ZujID4gc2VpZGFuXCA7Civlo4HnlLsgPiBoZWtpZ2FcIDsKK+Wnk+WQjSA+IHNlaW1laVwgOwor57Sg6LazID4gc3Vhc2hpXCA7CivmlbXmrakgPiB0ZWtpZnVcIDsKK+mbqua4kyA+IHNla2tlaVwgOwor6ZuE54qsID4gb3N1aW51XCA7Civpna3luK8gPiBqaW50YWlcIDsKK+Wil+eojiA+IHpvdXplaVwgOwor5pmC5Yi7ID4gamlrb2t1XCA7Civlor7nlLAgPiBrb25kZW5cIDsKK+aUueeJiCA+IGthaWhhblwgOwor54i25b6hID4gdGV0ZWdvXCA7CivplqLploAgPiBrYW5tb25cIDsKK+e0sOisuSA+IHNhaWtpblwgOwor5aGK6IyOID4ga2Fpa2VpXCA7CivpmpXnn7MgPiBpbnNla2lcIDsKK+aYreWSjCA+IHNob3V3YVwgOwor5aSn5qC5ID4gZGFpa29uXCA7CivmlpHmnaEgPiBoYW5qb3VcIDsKK+mWkemdmSA+IGthbnNlaVwgOwor6ZaR6Z2WID4ga2Fuc2VpXCA7CivpnZnmgJ0gPiBzZWlzaGlcIDsKK+aXseWusyA+IGthbmdhaVwgOwor6ZuR54KKID4gem91c3VpXCA7CivlpJzmpa0gPiB5YWd5b3VcIDsKK+iomOeroCA+IGtpc2hvdVwgOwor5piC5aWuID4ga291ZnVuXCA7CivntLDoq5YgPiBzYWlyb25cIDsKK+ippueFiSA+IHNoaXJlblwgOwor54mn5aSrID4gYm9rdWZ1XCA7CivmlofmoYggPiBidW4nJ2FuXCA7Civml4Xmg4UgPiByeW9qb3VcIDsKK+S6keOAhSA+IHVuJydudW5cIDsKK+WkieatuyA+IGhlbnNoaVwgOwor6Zuj5riLID4gbmFuanV1XCA7CivlpJbmp5ggPiB0b3phbWFcIDsKK+Wkp+afhCA+IG9vZ2FyYVwgOwor6Ku45b2mID4gc2hvZ2VuXCA7CivplpPpmpsgPiBtYWdpd2FcIDsKK+WkqeadryA+IHRlbnBhaVwgOwor5aSp5p2lID4gdGVucmFpXCA7CivlpKfmnpogPiB0YWltYWlcIDsKK+eEoeiBiiA+IGJ1cnlvdVwgOwor6ZW36aeGID4gY2hvdWt1XCA7Civlp4vljp8gPiBzaGlnZW5cIDsKK+aVo+awtCA+IHNhbnN1aVwgOwor5aSn5p2vID4gdGFpaGFpXCA7Civpm7Lmr40gPiBraXJhcmFcIDsKK+aXqeWvnSA+IGhheWFuZVwgOwor6KW/6LKiID4gc2FpZ29uXCA7CivmlZnmtL4gPiBreW91aGFcIDsKK+aTjee4piA+IHNvdWp1dVwgOwor57eP55ujID4gc291a2FuXCA7CivlpKfmnKwgPiB0YWlob25cIDsKK+eGsea5ryA+IG5ldHRvdVwgOwor5aSn5pybID4gdGFpbW91XCA7Civoq5bmi6AgPiByb25reW9cIDsKK+aXpeWwhCA+IG5pc3NoYVwgOwor57Sv6KiIID4gcnVpa2VpXCA7CivoqLvnlo8gPiBjaHV1c29cIDsKK+WlieaLnSA+IGhvdWhhaVwgOwor5aSn5pu4ID4gdGFpc2hvXCA7Civml6flrrYgPiBreXV1a2FcIDsKK+eJp+WgtCA+IG1ha2liYVwgOwor6KiI566XID4ga2Vpc2FuXCA7Civml4vlu7sgPiBzZW5rYWlcIDsKK+mZpOexjSA+IGpvc2VraVwgOwor5aeL5YuVID4gc2hpZG91XCA7CivntLDoposgPiBzYWlrZW5cIDsKK+e5iuadoSA+IHNlbmpvdVwgOwor57O46YGKID4gaXRveXV1XCA7Civml6flrZcgPiBreXV1amlcIDsKK+Wkp+aakSA+IHRhaXNob1wgOwor6Zuj5rK7ID4gbmFuY2hpXCA7Civloqjnl5UgPiBib2trb25cIDsKK+eFmeehnSA+IGVuc2hvdVwgOwor6Zai6Y21ID4ga2Fua2VuXCA7Civoq5bmiKYgPiByb25zZW5cIDsKK+eyvumciiA+IHNlaXJlaVwgOwor5pel5a2QID4gbmlzc2hpXCA7CivlpYnmiLQgPiBob3V0YWlcIDsKK+WkqeaYjiA+IHRlbm1laVwgOwor5Z+66Kq/ID4ga2ljaG91XCA7CivnuYHmoIQgPiBoYW4nJ2VpXCA7CivlopPnn7MgPiBib3Nla2lcIDsKK+imi+inoyA+IGtlbmthaVwgOwor5pS+5ryrID4gaG91bWFuXCA7Civlpb3lroggPiBrb3VzaHVcIDsKK+mbjOa7nSA+IG1lZGFraVwgOwor5aem5Lq6ID4ga2FuamluXCA7CivloqjnlLsgPiBib2t1Z2FcIDsKK+mbo+awkSA+IG5hbm1pblwgOwor5pep5amaID4gc291a29uXCA7CivntKDoqq0gPiBzb2Rva3VcIDsKK+imgeirpiA+IHlvdXRlaVwgOwor5aSp5paHID4gdGVubW9uXCA7CivlpKfmlrkgPiBvb2thdGFcIDsKK+imgeiriyA+IHlvdXNlaVwgOwor5pSv54K5ID4gc2hpdGVuXCA7CivopoHoq4cgPiB5b3VkYW5cIDsKK+aWh+aYjiA+IGJ1bm1laVwgOwor6Z2S5bm0ID4gc2VpbmVuXCA7CivplovplokgPiBrYWloZWlcIDsKK+iqnuagvCA+IGdva2FrdVwgOwor6ZW36Z+zID4gY2hvdW9uXCA7Civml6flqaYgPiBreXV1ZnVcIDsKK+mWi+mWgCA+IGthaW1vblwgOwor5pex5aSpID4ga2FudGVuXCA7CivmkKzpgIEgPiBoYW5zb3VcIDsKK+mej+WbuiA+IGt5b3Vrb1wgOwor5paH5pemID4gYnVudGFuXCA7CivorLnllZMgPiBraW5rZWlcIDsKK+e3tOeCrSA+IHJlbnRhblwgOwor5aSn5pWwID4gdGFpc3V1XCA7Civop6PnupwgPiBrYWlyYW5cIDsKK+mWiemWgCA+IGhlaW1vblwgOwor6K2w5LqGID4gZ2lyeW91XCA7CivlpaXlt54gPiBvdXNodXVcIDsKK+aVl+auiyA+IGhhaXphblwgOwor5aKX55uKID4gem91ZWtpXCA7CivlpKfmlZcgPiB0YWloYWlcIDsKK+ism+WjhyA+IGtvdWRhblwgOwor5aSW5p2lID4gZ2FpcmFpXCA7Civpl4fot68gPiB5YW1pamlcIDsKK+iruOWztiA+IHNob3RvdVwgOwor5aSW5p2QID4gZ2FpemFpXCA7CivlpKfmlL8gPiB0YWlzZWlcIDsKK+Wls+WwhiA+IGpvc2hvdVwgOwor6ZaA6ZmiID4gbW9uJydpblwgOwor57SN6LGGID4gbmF0dG91XCA7CivploDpmZAgPiBtb25nZW5cIDsKK+aWueW9oiA+IGhvdWtlaVwgOwor6Zml56m9ID4ga2Fuc2VpXCA7CivpnIrmmbogPiByZWljaGlcIDsKK+aWh+aUvyA+IGJ1bnNlaVwgOwor5aWz5a6YID4gbnlva2FuXCA7CivmkK3ovIkgPiB0b3VzYWlcIDsKK+eEoee1piA+IG11a3l1dVwgOwor5pep5aSpID4gc291dGVuXCA7Civml6nlpKcgPiBzb3VkYWlcIDsKK+ism+WggiA+IGtvdWRvdVwgOwor6KaB6KanID4geW91cmFuXCA7CivpnZLltZAgPiBzZWlyYW5cIDsKK+mbm+autSA+IHN1dWRhblwgOwor6Z2i5a2QID4gbWVudHN1XCA7CivorLnlkYggPiBraW50ZWlcIDsKK+aVsOaemiA+IHN1dW1haVwgOwor6Zuo5qiLID4gYW1hZG9pXCA7Civml6flpKsgPiBreXV1ZnVcIDsKK+aXp+WkoiA+IGt5dXVtdVwgOwor6ZuE5ri+ID4geXV1a29uXCA7CivnuYHmmIwgPiBoYW5qb3VcIDsKK+aUvua1qiA+IGhvdXJvdVwgOwor57aa56i/ID4gem9ra291XCA7Civpm5HmspMgPiB6YXR0b3VcIDsKK+ikh+mfsyA+IGZ1a3VvblwgOwor5piO5ZCbID4gbWVpa3VuXCA7Civml6zloLEgPiBqdW5wb3VcIDsKK+mZuuebuCA+IGtlbnNvdVwgOwor54Sh57K+ID4gYnVzaG91XCA7CivorabkuZcgPiBrZWlqb3VcIDsKK+isueWOsyA+IGtpbmdlblwgOwor54S256iLID4gc2Fob2RvXCA7Civnibnli5kgPiB0b2t1bXVcIDsKK+eJqeWTgSA+IGJ1cHBpblwgOwor6K2m5LiWID4ga2Vpc2VpXCA7CivlopfnlKMgPiB6b3VzYW5cIDsKK+aQjemHkSA+IHNvbmtpblwgOwor6Z2S5bGxID4gc2VpemFuXCA7CivnibnlirkgPiB0b2trb3VcIDsKK+iruOWtkCA+IHNob3NoaVwgOwor54m95Yi2ID4ga2Vuc2VpXCA7Civlpb3lpKkgPiBrb3V0ZW5cIDsKK+eJueWKnyA+IHRva2tvdVwgOwor5aSJ5pu0ID4gaGVua291XCA7CivplbfplpEgPiBub2Rva2FcIDsKK+iqnuaXjyA+IGdvem9rdVwgOwor6KuW5byBID4gcm9uYmVuXCA7Civml6XloLEgPiBuaXBwb3VcIDsKK+mWgOmRkSA+IG1vbmthblwgOwor5aSn5oyZID4gdGFpa3lvXCA7CivloJXokL0gPiBkYXJha3VcIDsKK+mWoumAoyA+IGthbnJlblwgOwor54Wu54mpID4gbmltb25vXCA7Civml4Xlr50gPiB0YWJpbmVcIDsKK+WrjOOAhSA+IGl5YWl5YVwgOwor5pS+5rC0ID4gaG91c3VpXCA7CivmmIflj5kgPiBzaG91am9cIDsKK+e1ueezuCA+IGtlbnNoaVwgOwor6ZmN562JID4ga291dG91XCA7CivpmbPnmq4gPiBjaGlucGlcIDsKK+aVtOaWiSA+IHNlaXNlaVwgOwor5pW05pWwID4gc2Vpc3V1XCA7CivlpKfmirUgPiB0YWl0ZWlcIDsKK+e0q+iYrSA+IHNoaXJhblwgOwor6ZaL6YqAID4ga2FpZ2luXCA7CivnhKHnrZYgPiBtdXNha3VcIDsKK+ispuWSsyA+IGtlaWdhaVwgOwor5aal5Y2UID4gZGFreW91XCA7Civmlo7miJIgPiBzYWlrYWlcIDsKK+WkqeaJjSA+IHRlbnNhaVwgOwor5pyr44CFID4gc3VlenVlXCA7CivlpYnluaMgPiBob3VoZWlcIDsKK+Wkp+aKgCA+IG9vd2F6YVwgOwor57K+6YysID4gc2VpcmVuXCA7Civml6flnJ8gPiBreXV1ZG9cIDsKK+mbu+aWrSA+IGRlbmRhblwgOwor6Zyw5by+ID4gc2FuZGFuXCA7CivmlZnmoYggPiBreW91YW5cIDsKK+WkqeaIkCA+IHRlbnNlaVwgOwor57mK5oyHID4gc2Vuc2hpXCA7CivlppnlkbMgPiBteW91bWlcIDsKK+mbu+aWhyA+IGRlbmJ1blwgOwor5aSn5oimID4gdGFpc2VuXCA7Civoq7jlp4kgPiBzaG9zaGlcIDsKK+ino+etlCA+IGthaXRvdVwgOwor5piO5YidID4gbWVpc2hvXCA7CivntZ7nvaogPiBrb3V6YWlcIDsKK+Wkp+aIkCA+IHRhaXNlaVwgOwor54Sh56quID4gbXVreXV1XCA7CivmlofmiY0gPiBidW5zYWlcIDsKK+aYqOS7iiA+IHNha2tvblwgOwor57K+6YqFID4gc2VpZG91XCA7CivlpInmlbAgPiBoZW5zdXVcIDsKK+e1qOe3niA+IGp1dXRhblwgOwor5pa55a+4ID4gaG91c3VuXCA7CivoqpPmlocgPiBzZWltb25cIDsKK+WkieaUuSA+IGhlbmthaVwgOwor5pS55q2jID4ga2Fpc2VpXCA7CivnuYrmiYsgPiBzZW5zaHVcIDsKK+Wkp+aFtiA+IHRhaWtlaVwgOwor6Zu25pWXID4gcmVpaGFpXCA7CivplpPpgZMgPiBrYW5kb3VcIDsKK+ijvemZtiA+IHNlaXRvdVwgOwor5pat5bSWID4gZGFuZ2FpXCA7Civopa/ooaMgPiBzaGluJydpXCA7CivlpaXlppkgPiBvdW15b3VcIDsKK+e3j+eCuSA+IHNvdXRlblwgOwor5pS/5qipID4gc2Vpa2VuXCA7Civpm6rmma8gPiBzZWtrZWlcIDsKK+aTjeefrSA+IHNvdXRhblwgOwor57Sw6I+MID4gc2Fpa2luXCA7CivmlaPmlocgPiBzYW5idW5cIDsKK+WkqeaBtSA+IHRlbmtlaVwgOwor5pWj5pWjID4gc2FuemFuXCA7CivlpKnmgakgPiB0ZW4nJ29uXCA7CivlpKfmgqMgPiB0YWlrYW5cIDsKK+aWreWxpCA+IGRhbnNvdVwgOwor5Zyf6b6NID4gbW9ndXJhXCA7CivnuKbmlq0gPiBqdXVkYW5cIDsKK+WjsOacmyA+IHNlaWJvdVwgOwor6Kya5Y+3ID4gc2hpZ291XCA7CivlpKnmgKcgPiB0ZW5zZWlcIDsKK+mdkuWkqSA+IHNlaXRlblwgOwor6Zu75o6iID4gZGVudGFuXCA7Civop6PnpoEgPiBrYWlraW5cIDsKK+WkieaPmyA+IGhlbmthblwgOwor5piP5YCSID4ga29udG91XCA7CivmnJfjgIUgPiByb3Vyb3VcIDsKK+iqv+W6piA+IGNob3Vkb1wgOwor5aWz5ZuaID4gam9zaHV1XCA7CivlpKvlvbkgPiBidXlha3VcIDsKK+mZhOelqCA+IGZ1aHlvdVwgOwor5paw5a2XID4gc2hpbmppXCA7Civmkprns7ggPiBuZW5zaGlcIDsKK+Wkp+W/lyA+IHRhaXNoaVwgOwor5pat5a6aID4gZGFudGVpXCA7Civoq5blrpogPiByb250ZWlcIDsKK+eyiembqiA+IGtveXVraVwgOwor57K+6YG4ID4gc2Vpc2VuXCA7CivlobXnlYwgPiBqaW5rYWlcIDsKK+mbhealvSA+IGdhZ2FrdVwgOwor6ZyK5oSfID4gcmVpa2FuXCA7CivmkLrooYwgPiBrZWlrb3VcIDsKK+irluWtnyA+IHJvbm1vdVwgOwor5pel5ZKMID4gaGl5b3JpXCA7CivntrLnirYgPiBtb3Vqb3VcIDsKK+iqmOaLkCA+IHl1dWthaVwgOwor5aOw5piOID4gc2VpbWVpXCA7CivlpKflvaIgPiBvb2d5b3VcIDsKK+mbo+aWhyA+IG5hbmJ1blwgOwor6Kun5aOwID4ga2Fpc2VpXCA7CivnsbPpo68gPiBiZWloYW5cIDsKK+e2sueJiCA+IGFtaWhhblwgOwor5aOy5paHID4gYmFpYnVuXCA7Civml6XlkJEgPiBoaW5hdGFcIDsKK+eyvui+siA+IHNlaW5vdVwgOwor5paw5ammID4gc2hpbnB1XCA7Civlparlm54gPiBkYWtrYWlcIDsKK+eBq+i2syA+IGhpYXNoaVwgOwor54Sm55yJID4gc2hvdWJpXCA7CivmlL7moKEgPiBob3Vrb3VcIDsKK+mYsuepuiA+IGJvdWt1dVwgOwor5aSp5bqVID4gdGVudGVpXCA7CivlpKrlubMgPiB0YWloZWlcIDsKK+iqreW+jCA+IGRva3Vnb1wgOwor5pel5Y+CID4gbmlzc2FuXCA7Civpmpvmtq8gPiBzYWlnYWlcIDsKK+aXi+WbniA+IHNlbmthaVwgOwor5aWl5ZywID4gb2t1Y2hpXCA7CivlpKnlubMgPiB0ZW5iaW5cIDsKK+mciuaApyA+IHJlaXNlaVwgOwor5aSn5bqXID4gb29kYW5hXCA7CivlpJbmgqMgPiBnYWlrYW5cIDsKK+mbkeabuCA+IHphc3Nob1wgOwor6Zaj6K2wID4ga2FrdWdpXCA7CivngbDosp0gPiBoYWlnYWlcIDsKK+WkieaIkCA+IGhlbnNlaVwgOwor5aSp5bidID4gdGVudGVpXCA7CivntYznt5ogPiBrZWlzZW5cIDsKK+eJqeS9kyA+IG1vdHRhaVwgOwor5aSn5bmFID4gb29oYWJhXCA7CivntYzntrggPiBrZWlyaW5cIDsKK+aYjuS4uyA+IG1laXNodVwgOwor5aSn5birID4gZGFpc2hpXCA7CivlpKnlt6UgPiB0ZW5rb3VcIDsKK+Wkp+W4nSA+IHRhaXRlaVwgOwor6KO96YysID4gc2VpcmVuXCA7CivlpoTli5UgPiBtb3Vkb3VcIDsKK+eElOehnSA+IGVuc2hvdVwgOwor57WQ57SNID4geXVpbm91XCA7Civml4Xlm6MgPiByeW9kYW5cIDsKK+e5geW/mSA+IGhhbmJvdVwgOwor5Zyw6auqID4gamlnYW1pXCA7CivpmLLnpqYgPiBib3VneW9cIDsKK+e0sOiDniA+IHNhaWJvdVwgOwor54mp5Lu2ID4gYnVra2VuXCA7CivlpKnltq4gPiB0ZW5rZW5cIDsKK+ijvemLvCA+IHNlaWtvdVwgOwor5pel5YukID4gbmlra2luXCA7CivlpKflt6cgPiB0YWlrb3VcIDsKK+eCueiMtiA+IHRlbmNoYVwgOwor5pes5YiKID4ganVua2FuXCA7CivntIXol7sgPiBrb3Vzb3VcIDsKK+aWsOWlhyA+IHNoaW5raVwgOwor6Zm254S2ID4gdG91emVuXCA7CivplbfpgJQgPiBjaG91dG9cIDsKK+aRmOiKvSA+IHRla2lnYVwgOwor5aSJ5oWLID4gaGVudGFpXCA7Civmj5vph5EgPiBrYW5raW5cIDsKK+aVmeaOiCA+IGt5b3VqdVwgOwor5pWF5penID4ga29reXV1XCA7Civpm4Tmnb4gPiBvbWF0c3VcIDsKK+aXqeWHuiA+IGhheWFkZVwgOwor5aWH5aaZID4ga2lteW91XCA7CivlpJblvoQgPiBnYWlrZWlcIDsKK+WkluW+gSA+IGdhaXNlaVwgOwor5o6l6aCtID4gc2V0dG91XCA7CivlpJblvaIgPiBnYWlrZWlcIDsKK+iok+eCuSA+IGt1bnRlblwgOwor6KuW5aSWID4gcm9uZ2FpXCA7CivpmZDnlYwgPiBnZW5rYWlcIDsKK+WknOW6lyA+IHlvbWlzZVwgOwor57WD57eaID4gZ2Vuc2VuXCA7Civoq77lkKYgPiBkYWt1aGlcIDsKK+aOoumhjCA+IHRhbmRhaVwgOwor57mK5benID4gc2Vua291XCA7CivnhKHnl5sgPiBtdXRzdXVcIDsKK+eEoeeXhSA+IG11YnlvdVwgOwor5pel5YiKID4gbmlra2FuXCA7CivmlZHmj7QgPiBreXV1ZW5cIDsKK+irluWjhyA+IHJvbmRhblwgOwor5aOf5patID4gcm91ZGFuXCA7CivniYfliIMgPiBrYXRhaGFcIDsKK+aVteW9sSA+IHRla2llaVwgOwor57W555uuID4ga2ludW1lXCA7Civnha7msYEgPiBuaWppcnVcIDsKK+ijvumHjiA+IHN1c29ub1wgOwor6Ki05rGCID4gc29reXV1XCA7CivnhYnngq0gPiByZW50YW5cIDsKK+mch+W6piA+IHNoaW5kb1wgOwor5pW05b2iID4gc2Vpa2VpXCA7CivlpJzluIIgPiB5b2ljaGlcIDsKK+Wil+a4myA+IHpvdWdlblwgOwor6ZuB5pu4ID4gZ2Fuc2hvXCA7CivnuYPluK8gPiBob3V0YWlcIDsKK+ipqeaWhyA+IHNoaWJ1blwgOwor5aSJ5oCnID4gaGVuc2VpXCA7CivopovogZ4gPiBrZW5tb25cIDsKK+Wkp+WxsSA+IHRhaXphblwgOwor6Ku45ZCbID4gc2hva3VuXCA7Civoq67llY8gPiBzaGltb25cIDsKK+mWouilvyA+IGthbnNhaVwgOwor6ZW36LqvID4gY2hvdWt1XCA7CivlpKflsaQgPiB0YWlzb3VcIDsKK+mcnOWusyA+IHNvdWdhaVwgOwor57iE5paHID4gam91bW9uXCA7Civml6XlhYkgPiBuaWtrb3VcIDsKK+aUueaYkyA+IGthaWVraVwgOwor5pen5YSAID4ga3l1dWdpXCA7CivlpKflsL0gPiBkYWlqaW5cIDsKK+WjruaMmSA+IHNvdWt5b1wgOwor57SF6JGJID4gbW9taWppXCA7CivmlL7mlaMgPiBob3VzYW5cIDsKK+aWjuWuriA+IHNhaWd1dVwgOwor6KaL6ICFID4ga2Vuc2hhXCA7Civpm6PmiYAgPiBuYW5zaG9cIDsKK+aVl+aIpiA+IGhhaXNlblwgOwor5aWq5Y+WID4gZGFzc2h1XCA7CivmkbjntKIgPiBtb3Nha3VcIDsKK+eJgOWHoCA+IHNob3VnaVwgOwor5aSq5a6IID4gdGFpc2h1XCA7CivmlonlsIQgPiBzZWlzaGFcIDsKK+e1seeboyA+IHRvdWthblwgOwor5aSn5a+SID4gZGFpa2FuXCA7CivlnYrplpMgPiBib3VrYW5cIDsKK+Wkq+WtkCA+IGZ1dXNoaVwgOwor5aSp5a6IID4gdGVuc2h1XCA7CivlpInlvaIgPiBoZW5rZWlcIDsKK+e0oOiCjCA+IHN1aGFkYVwgOwor6ZuE5patID4geXV1ZGFuXCA7CivlpKrlrZcgPiBmdXRvamlcIDsKK+WkquWtkCA+IHRhaXNoaVwgOwor5aSp5a2rID4gdGVuc29uXCA7Civpm5HmkI0gPiB6YXNzb25cIDsKK+mWkeirhyA+IGthbmRhblwgOwor5pel5YKYID4gaGlnYXNhXCA7CivlpKflrpcgPiB0YWlzb3VcIDsKK+WkqeWtkCA+IHRlbnNoaVwgOwor6Z2p5YW3ID4ga2F3YWd1XCA7CivpnaLliY0gPiBtZW56ZW5cIDsKK+mciuWzsCA+IHJlaWhvdVwgOwor6Zq35pu4ID4gcmVpc2hvXCA7Civop5Lnmq4gPiBrYWt1aGlcIDsKK+ishOWGmSA+IHRvdXNoYVwgOwor5o6i6Zm6ID4gdGFua2VuXCA7Civoppbnt5ogPiBzaGlzZW5cIDsKK+aVsOW5tCA+IHN1dW5lblwgOwor5aWu5YqxID4gZnVucmVpXCA7CivpnZ7lipsgPiBoaXJpa2lcIDsKK+irreWRiiA+IHl1a29rdVwgOwor6ZaL6KybID4ga2Fpa291XCA7CivmloflrpggPiBidW5rYW5cIDsKK+aXrOS9mSA+IGp1bicneW9cIDsKK+majuautSA+IGthaWRhblwgOwor6Z2S5Y+yID4gc2Vpc2hpXCA7CivntJnog4wgPiBzaGloYWlcIDsKK+e0heiMtiA+IGtvdWNoYVwgOwor57Sw57e7ID4gc2FpY2hpXCA7Civln4volLUgPiBtYWl6b3VcIDsKK+ijvemAoCA+IHNlaXpvdVwgOwor6ZyK5bGxID4gcmVpemFuXCA7CivnhrHmiKYgPiBuZXNzZW5cIDsKK+ijj+mWgCA+IHVyYW1vblwgOwor5aSJ5bm7ID4gaGVuZ2VuXCA7CivpnIrlsYsgPiB0YW1heWFcIDsKK+Wil+awtCA+IHpvdXN1aVwgOwor6Kyb5LitID4ga291anV1XCA7Civpm6LmhIEgPiByaXNodXVcIDsKK+mbu+W3pSA+IGRlbmtvdVwgOwor5pWj5by+ID4gc2FuZGFuXCA7CivmlpzloZQgPiBzaGF0b3VcIDsKK+WkmuWwkSA+IHRhc2hvdVwgOwor5aSc5a+SID4geW96YW11XCA7Civoq7fliLogPiBmdXVzaGlcIDsKK+WhqeeFriA+IHNoaW9uaVwgOwor5aSc5a6uID4geW9taXlhXCA7CivpnLLlm70gPiByb2tva3VcIDsKK+iruOWIgyA+IG1vcm9oYVwgOwor5aSW5bGkID4gZ2Fpc291XCA7Civln4vokawgPiBtYWlzb3VcIDsKK+e2v+avmyA+IHdhdGFnZVwgOwor57WQ56S+ID4ga2Vzc2hhXCA7CivopJLosrYgPiBob3VoZW5cIDsKK+e0r+e0ryA+IHJ1aXJ1aVwgOwor5Zyw6ZyKID4gY2hpcmVpXCA7CivpnIrlrp0gPiByZWlob3VcIDsKK+WcsOmchyA+IGppc2hpblwgOwor5aCx55+lID4gaG91Y2hpXCA7CivntLDns7ggPiBzYWlzaGlcIDsKK+WknOWtpiA+IHlhZ2FrdVwgOwor6Kqk5a+pID4gZ29zaGluXCA7Civml6XkvIogPiBuaWNoaWlcIDsKK+mYsueWqyA+IGJvdWVraVwgOwor6KeS55WMID4ga2Fra2FpXCA7CivmlY/mhJ8gPiBiaW5rYW5cIDsKK+aVt+WxhSA+IHNoaWtpaVwgOwor54Kt6IK6ID4gdGFuaGFpXCA7Civlpb3kvosgPiBrb3VyZWlcIDsKK+WllOWRvSA+IGhvbm1laVwgOwor54WZ5q+SID4gZW5kb2t1XCA7CivoqoflvLUgPiBrb2Nob3VcIDsKK+eGseaEjyA+IG5ldHN1aVwgOwor5pa55ZCRID4gaG91a291XCA7CivntKvntLogPiBzaGlrb25cIDsKK+WcsOmajiA+IGNoaWthaVwgOwor5pWZ5b6SID4ga3lvdXRvXCA7Civopo/ntIQgPiBraXlha3VcIDsKK+iruOWFhCA+IHNob2tlaVwgOwor6Ku45YWDID4gc2hvZ2VuXCA7Civml6nkuJYgPiBzb3VzZWlcIDsKK+mWi+ilnyA+IGthaWtpblwgOwor5pac5Z2RID4gc2hha291XCA7CivnuKvlt6UgPiBob3Vrb3VcIDsKK+aXheWIuCA+IHJ5b2tlblwgOwor6Zqj5p2RID4gcmluc29uXCA7CivlpKnlpJYgPiB0ZW5nYWlcIDsKK+ipqeaJjSA+IHNoaXNhaVwgOwor5aCh56SBID4gaG9zaG91XCA7CivlpKnlpIkgPiB0ZW5wZW5cIDsKK+mdouWAkiA+IG1lbmRvdVwgOwor5pel5LitID4gaGluYWthXCA7CivlpKnlo7AgPiB0ZW5zZWlcIDsKK+aXi+WFiSA+IHNlbmtvdVwgOwor5aWR5ZCIID4ga2VpZ291XCA7CivpnIrlqpIgPiByZWliYWlcIDsKK+e3muadoSA+IHNlbmpvdVwgOwor6Kej54mIID4ga2FpaGFuXCA7CivmlbTlrrkgPiBzZWl5b3VcIDsKK+aWsOWRsyA+IHNoaW5taVwgOwor5aSp5aOMID4gdGVuam91XCA7CivlpKflpIkgPiB0YWloZW5cIDsKK+e2mua8lCA+IHpva3VlblwgOwor5aOu5b+rID4gc291a2FpXCA7Civoo7jouqsgPiByYXNoaW5cIDsKK+exs+mKrSA+IGJlaXNlblwgOwor54ax5oCnID4gbmVzc2VpXCA7Civoqp7lraYgPiBnb2dha3VcIDsKK+iqmOWwjiA+IHl1dWRvdVwgOwor6ZuR5oSfID4gemFra2FuXCA7Civmlo7loLQgPiBzYWlqb3VcIDsKK+imgee2sSA+IHlvdWtvdVwgOwor57Sv566XID4gcnVpc2FuXCA7Civmloflo6sgPiBidW5zaGlcIDsKK+eCuee3miA+IHRlbnNlblwgOwor5aWz5L2TID4gbnlvdGFpXCA7CivnuIHmiJogPiBlbnNla2lcIDsKK+mdouS9kyA+IG1lbnRlaVwgOwor5paH5aOHID4gYnVuZGFuXCA7CivlpYnlkYggPiBob3V0ZWlcIDsKK+aSg+egtCA+IGdla2loYVwgOwor57K+6KO9ID4gc2Vpc2VpXCA7CivpnaLkvJogPiBtZW5rYWlcIDsKK+e0oeezuCA+IGJvdXNoaVwgOwor5aSp5aCCID4gdGVuZG91XCA7Civpm6LluoogPiByaXNob3VcIDsKK+Wik+aomSA+IGJvaHlvdVwgOwor6ZqO5qKvID4ga2FpdGVpXCA7Civlo7LlupcgPiBiYWl0ZW5cIDsKK+irluWPoiA+IHJvbnNvdVwgOwor6Ku45L6vID4gc2hva291XCA7Civpm7vlrZAgPiBkZW5zaGlcIDsKK+eIteS9jSA+IHNoYWt1aVwgOwor6KW/57WMID4gc2Vpa2VpXCA7Civoqanmg7MgPiBzaGlzb3VcIDsKK+WhiueKtiA+IGthaWpvdVwgOwor6Kaz55u4ID4ga2Fuc291XCA7CivlpbPkurogPiBueW9uaW5cIDsKK+aUueaGsiA+IGthaWtlblwgOwor5aSn5Z+fID4gdGFpaWtpXCA7CivntbbniYggPiB6ZXBwYW5cIDsKK+mbquW0qSA+IG5hZGFyZVwgOwor6Kmp5oOFID4gc2hpam91XCA7CivlpJblp5MgPiBnYWlzZWlcIDsKK+iogOa1tyA+IGdlbmthaVwgOwor54Wn5p+7ID4gc2hvdXNhXCA7CivmlL/mg4UgPiBzZWlqb3VcIDsKK+e0m+e0myA+IGZ1bnB1blwgOwor5aWP5Yq5ID4gc291a291XCA7Civlo67lubQgPiBzb3VuZW5cIDsKK+Wkp+WeiyA+IG9vZ2F0YVwgOwor5aOw5bivID4gc2VpdGFpXCA7CivkuIrjgIUgPiBqb3Vqb3VcIDsKK+Wlj+WKnyA+IHNvdWtvdVwgOwor57SU57a/ID4ganVubWVuXCA7CivlpKnlnLAgPiB0ZW5jaGlcIDsKK+Whqea5ryA+IHNoaW95dVwgOwor6Kmy5b2TID4gZ2FpdG91XCA7CivlnZHpgZMgPiBrb3Vkb3VcIDsKK+Wls+S4rSA+IGpvY2h1dVwgOwor5r+A6auYID4gZ2Vra291XCA7CivmjqLpibEgPiB0YW5rb3VcIDsKK+e3j+abuCA+IHNvdXNob1wgOwor5aSW5aWXID4gZ2FpdG91XCA7Civntr/mo5IgPiBtZW5ib3VcIDsKK+aUr+aJgCA+IHNoaXNob1wgOwor5o6h6YmxID4gc2Fpa291XCA7CivlpKflnLAgPiBkYWljaGlcIDsKK+e0lOe1uSA+IGp1bmtlblwgOwor5pS+5oGjID4gaG91c2hpXCA7CivmloflnosgPiBidW5rZWlcIDsKK+mWgOihmyA+IG1vbicnZWlcIDsKK+mbjOaApyA+IHNoaXNlaVwgOwor5LiH44CFID4gbWFubWFuXCA7CivlnoLoqJMgPiBzdWlrdW5cIDsKK+Wkp+WcjyA+IHRhaWtlblwgOwor6Ziy54qvID4gYm91aGFuXCA7Civoqo3lrpogPiBuaW50ZWlcIDsKK+eBq+iWrCA+IGtheWFrdVwgOwor54ax5bivID4gbmV0dGFpXCA7Civnt7TmiJAgPiByZW5zZWlcIDsKK+eEmueBqyA+IHRha2liaVwgOwor5pS55oKqID4ga2FpYWt1XCA7CivmlL7lv7UgPiBob3VuZW5cIDsKK+Wlh+WLnSA+IGtpc2hvdVwgOwor6ZyK5aC0ID4gcmVpam91XCA7CivntJTns7sgPiBqdW5rZWlcIDsKK+WlouS+iCA+IHNoYXNoaVwgOwor5aWl5LydID4gb2t1ZGVuXCA7CivloanmtbQgPiBlbnlva3VcIDsKK+irh+WQiCA+IGRhbmdvdVwgOwor5LiB44CFID4gdG91dG91XCA7CivoqanlvaIgPiBzaGlrZWlcIDsKK+mciuWfnyA+IHJlaWlraVwgOwor6KuW5YikID4gcm9ucGFuXCA7Civnha7mlrkgPiBuaWthdGFcIDsKK+eGiuaJiyA+IGt1bWFkZVwgOwor57SU57KLID4ganVuc3VpXCA7Civoqq3lm7MgPiBkb2t1enVcIDsKK+mbhOaApyA+IHl1dXNlaVwgOwor54Gr6JOLID4gaGlidXRhXCA7Civoo4Xph5ggPiBzb3V0ZWlcIDsKK+iqv+WSjCA+IGNob3V3YVwgOwor6KiC5q2jID4gdGVpc2VpXCA7CivnhafmmKAgPiBzaG91ZWlcIDsKK+mbhOW/lyA+IHl1dXNoaVwgOwor6Kq/5ZGzID4gY2hvdW1pXCA7CivmjrLovIkgPiBrZWlzYWlcIDsKK+aXheS6uiA+IHJ5b2ppblwgOwor5peF5LqtID4gcnlvdGVpXCA7Civmj5voqIAgPiBrYW5nZW5cIDsKK+e3j+aVsCA+IHNvdXN1dVwgOwor6ZyK5ZywID4gcmVpY2hpXCA7Civmj5roqIAgPiB5b3VnZW5cIDsKK+Wkp+WWqiA+IHRhaXNvdVwgOwor6ZuR5be+ID4gem91a2luXCA7CivlpKnllZMgPiB0ZW5rZWlcIDsKK+maheacqCA+IHN1bWlraVwgOwor5aWJ5YWsID4gaG91a291XCA7Civnt4/mlKwgPiBzb3VyYW5cIDsKK+e3qOaIkCA+IGhlbnNlaVwgOwor6Kaq55aOID4gc2hpbnNvXCA7Civmlrnkvr8gPiBob3ViZW5cIDsKK+mbouWuriA+IHJpa3l1dVwgOwor57Wi54ibID4ga2VucmFuXCA7CivlpJblnLAgPiBnYWljaGlcIDsKK+WkluWcqCA+IGdhaXphaVwgOwor5aGp5rCXID4gc2hpb2tlXCA7CivmjqXov5EgPiBzZWtraW5cIDsKK+mbhOW8gSA+IHl1dWJlblwgOwor57Gz6LuNID4gYmVpZ3VuXCA7Civoqanlt7sgPiBzaGlrYW5cIDsKK+aUueW7gyA+IGthaWhhaVwgOwor6ZqO5pWwID4ga2Fpc3V1XCA7CivlnJLplbcgPiBlbmNob3VcIDsKK+WcsOmHkSA+IGppZ2FuZVwgOwor57ep5oWiID4ga2FubWFuXCA7Civpm7vloLEgPiBkZW5wb3VcIDsKK+iqv+WNsCA+IGNob3VpblwgOwor6Ziy54G9ID4gYm91c2FpXCA7CivlpKnlkb0gPiB0ZW5tZWlcIDsKK+expOmBiyA+IGt1aml1blwgOwor6KOc6LazID4gaG9zb2t1XCA7Civmv4Hpn7MgPiBkYWt1b25cIDsKK+Wkp+WSjCA+IHlhbWF0b1wgOwor6KuH5YikID4gZGFucGFuXCA7CivmlbTlnLAgPiBzZWljaGlcIDsKK+Wkp+WRvSA+IHRhaW1laVwgOwor6ZW36JuHID4gY2hvdWRhXCA7Civmlrnku4ogPiBob3Vrb25cIDsKK+aPkOiogCA+IHRlaWdlblwgOwor6Ki85ougID4gc2hvdWtvXCA7CivntIXnsokgPiBiZW5pa29cIDsKK+WkquWQjiA+IHRhaWtvdVwgOwor5Zyw6YWSID4gaml6YWtlXCA7CivpmrvlvbEgPiBzZWtpZWlcIDsKK+Wjq+WumCA+IHNoaWthblwgOwor5Zyf6Y2LID4gZG9uYWJlXCA7CivlpKnlkI4gPiB0ZW5rb3VcIDsKK+eBsOiJsiA+IGhhaWlyb1wgOwor5aSp5Y+wID4gdGVuZGFpXCA7Civns7vntbEgPiBrZWl0b3VcIDsKK+Wkp+WQmyA+IHRhaWt1blwgOwor6Zmw5qC4ID4gaW5rYWt1XCA7CivlpKflkIwgPiBkYWlkb3VcIDsKK+mat+W+kyA+IHJlaWp1dVwgOwor57Sw55uuID4gaG9zb21lXCA7CivmlK/lvIEgPiBzaGliZW5cIDsKK+aPkOimgSA+IHRlaXlvdVwgOwor54Gr6IqxID4gaGliYW5hXCA7CivlpInlnosgPiBoZW5rZWlcIDsKK+e0lOeoriA+IGp1bnNodVwgOwor6ZuR5bGFID4gemFra3lvXCA7CivpmY3msLQgPiBrb3VzdWlcIDsKK+aWueS4iCA+IGhvdWpvdVwgOwor5Z+L57eaID4gbWFpc2VuXCA7CivmlbDlm54gPiBzdXVrYWlcIDsKK+aWh+WQjSA+IGJ1bm1laVwgOwor5aWV5LiWID4gZWtpc2VpXCA7Civnt6nmgKAgPiBrYW50YWlcIDsKK+ino+azlSA+IGthaWhvdVwgOwor5pSv5bqXID4gc2hpdGVuXCA7Civln7rnn7MgPiBraXNla2lcIDsKK+ijveiiiyA+IHNlaXRhaVwgOwor6aC744CFID4gaGlucGluXCA7CivmlpzlhYkgPiBzaGFrb3VcIDsKK+WlieS9kyA+IGhvdXRhaVwgOwor6ZmE5rOoID4gZnVjaHV1XCA7CivmlqXlgJkgPiBzZWtrb3VcIDsKK+mWouiBryA+IGthbnJlblwgOwor5aWJ5Ly6ID4gaG91c2hpXCA7CivlpKfljYogPiB0YWloYW5cIDsKK+ikkOiXuyA+IGthc3NvdVwgOwor54W95oOFID4gc2Vuam91XCA7CivmlbXllrYgPiB0ZWtpZWlcIDsKK+eEoeavkiA+IG11ZG9rdVwgOwor5aSn5YyZID4gb29zYWppXCA7CivlnKjpg7cgPiB6YWlnb3VcIDsKK+e1tua1tyA+IHpla2thaVwgOwor6ZuE5bOwID4geXV1aG91XCA7CivlpYnku5UgPiBob3VzaGlcIDsKK+e0jeeojiA+IG5vdXplaVwgOwor5Zyf6YecID4gZG9nYW1hXCA7CivlpKfli6IgPiB0YWl6ZWlcIDsKK+Wlj+S4iiA+IHNvdWpvdVwgOwor5pat5LqkID4gZGFua291XCA7Civnt5LmiKYgPiBjaG9zZW5cIDsKK+aUvuWwhCA+IGhvdXNoYVwgOwor5aSn5YuHID4gdGFpeXV1XCA7CivoppbnlYwgPiBzaGlrYWlcIDsKK+irluS6iSA+IHJvbnNvdVwgOwor6KOz6KO+ID4gbW9zdXNvXCA7CivoqablsIQgPiBzaGlzaGFcIDsKK+mZpOaguCA+IGpva2FrdVwgOwor5aSn5YqfID4gdGFpa291XCA7Civop6Pmr5IgPiBnZWRva3VcIDsKK+ipqeWulyA+IHNoaXNvdVwgOwor5paH5YuiID4gYnVuc2VpXCA7CivpmbDmmqYgPiBpbnJla2lcIDsKK+eEoeassiA+IG11eW9rdVwgOwor5aSq5YidID4gdGFpc2hvXCA7CivmlaPlnKggPiBzYW56YWlcIDsKK+eCreekpiA+IHRhbmtvdVwgOwor54Gr6ISaID4gaGlhc2hpXCA7CivoqqPlkYogPiBidWtva3VcIDsKK+WkqeWIkSA+IHRlbmtlaVwgOwor5aSp5YiGID4gdGVuYnVuXCA7Civlo67lpKcgPiBzb3VkYWlcIDsKK+ihsOmgvSA+IHN1aXRhaVwgOwor54K5552bID4gdGVuc2VpXCA7CivlpKfliIYgPiBkYWlidW5cIDsKK+WjruWjqyA+IHNvdXNoaVwgOwor5pWX5aCxID4gaGFpaG91XCA7CivlpJblkJEgPiBnYWlrb3VcIDsKK+Wkp+WIgCA+IGRhaXRvdVwgOwor5pS75a6IID4ga291c2h1XCA7Civpm5HlqZogPiB6YWtrb25cIDsKK+aQjeiAlyA+IHNvbm1vdVwgOwor54K555y8ID4gdGVuZ2FuXCA7CivlnKfov6sgPiBhcHBha3VcIDsKK+WkluWPsiA+IGdhaXNoaVwgOwor5aSn5YehID4gb295b3NvXCA7Civmv6vpgKAgPiByYW56b3VcIDsKK+eGlOWyqSA+IHlvdWdhblwgOwor6ZqP5omAID4genVpc2hvXCA7CivmlLnlrpogPiBrYWl0ZWlcIDsKK+mbheWuoiA+IGdha2FrdVwgOwor57Wx5rK7ID4gdG91Y2hpXCA7CivlpKnlhbUgPiB0ZW5wZWlcIDsKK+ims+eCuSA+IGthbnRlblwgOwor6Zqg5b+NID4gaW4nJ25pblwgOwor5aSn5YW4ID4gdGFpdGVuXCA7CivpmaTmnI0gPiBqb2Z1a3VcIDsKK+Wkp+WFrCA+IHRhaWtvdVwgOwor5aSn5YWoID4gdGFpemVuXCA7CivmlbTlkIggPiBzZWlnb3VcIDsKK+eyvuiIjiA+IHNob3VqYVwgOwor5aSn5YWEID4gdGFpa2VpXCA7CivoqZ7lrpcgPiBzaGlzb3VcIDsKK+WjsOWfnyA+IHNlaWlraVwgOwor6Zu75ZG9ID4gZGVubWVpXCA7Civoo5zoqLsgPiBob2NodXVcIDsKK+iho+mjnyA+IGlzaG9rdVwgOwor54Sh5qeYID4gYnV6YW1hXCA7CivmkbjniYwgPiBtb3VwYWlcIDsKK+aWh+WFuCA+IGJ1bnRlblwgOwor57ea5b2iID4gc2Vua2VpXCA7CivpnIrliaMgPiByZWlrZW5cIDsKK+aVsOWQjSA+IHN1dW1laVwgOwor6KGo6Z+zID4gaHlvdW9uXCA7CivlpJbli6QgPiBnYWlraW5cIDsKK+mciuWJjSA+IHJlaXplblwgOwor6KOc6KeSID4gaG9rYWt1XCA7Civpmo/mhJ8gPiB6dWlrYW5cIDsKK+eCr+ecvCA+IGtlaWdhblwgOwor54Wp5oK2ID4gaGFubW9uXCA7CivoqIjmlbAgPiBrZWlzdXVcIDsKK+WknOWHqiA+IHlvbmFnaVwgOwor6ZqP5oOzID4genVpc291XCA7CivpmLLmsLQgPiBib3VzdWlcIDsKK+aOqOirliA+IHN1aXJvblwgOwor5aSJ5ZCNID4gaGVubWVpXCA7CivntabmsrkgPiBreXV1eXVcIDsKK+iogOaYjiA+IGdlbm1laVwgOwor5aSp5YCZID4gdGVua291XCA7CivntYLnhIkgPiBzaHV1ZW5cIDsKK+eGseWeiyA+IG5la2tlaVwgOwor6Zu35ZCNID4gcmFpbWVpXCA7Civpm7flkIwgPiByYWlkb3VcIDsKK+mcp+S4rSA+IG11Y2h1dVwgOwor5Zub6Z2iID4gc2hpbWVuXCA7Civns5/ns6AgPiBzb3Vrb3VcIDsKK+aVsOWNgyA+IHN1dXNlblwgOwor5pWw5Y2BID4gc3V1anV1XCA7CivopoHnlKggPiB5b3V5b3VcIDsKK+e2muaYoCA+IHpva3VlaVwgOwor6Zmk5palID4gam9zZWtpXCA7Civpm4Tlp78gPiB5dXVzaGlcIDsKK+aUueWnkyA+IGthaXNlaVwgOwor5aSW5YiGID4gZ2FpYnVuXCA7CivnhZbmiL8gPiBkYW5ib3VcIDsKK+aUv+WkiSA+IHNlaWhlblwgOwor5Z+055SfID4gaGFueXV1XCA7CivlpJblh7ogPiBzb3RvZGVcIDsKK+mbsuWRkSA+IHdhbnRhblwgOwor5aSV5YiKID4geXV1a2FuXCA7Civnhanlv5kgPiBoYW5ib3VcIDsKK+e1kOa7niA+IGtldHRhaVwgOwor57Wo5q+vID4ganV1dGFuXCA7Civngonnq68gPiByb2JhdGFcIDsKK+mbkeWgsSA+IHphcHBvdVwgOwor6Kmp5aOHID4gc2hpZGFuXCA7CivlpKfkvr8gPiBkYWliZW5cIDsKK+e1qOavmyA+IGp1dW1vdVwgOwor5aSp5L2/ID4gdGVuc2hpXCA7CivpmLLmraIgPiBib3VzaGlcIDsKK+e0r+eKryA+IHJ1aWhhblwgOwor5o6o6KiIID4gc3Vpa2VpXCA7Civnhaflv5wgPiBzaG91b3VcIDsKK+WkqeS9kyA+IHRlbnRhaVwgOwor57ir5ZCIID4gaG91Z291XCA7Civpm7vli5UgPiBkZW5kb3VcIDsKK+eEtuaWryA+IHNvdWtvdVwgOwor5aSn5L2/ID4gdGFpc2hpXCA7CivoqLzlt6YgPiBzaG91c2FcIDsKK+Wbm+maoyA+IHNoaXJpblwgOwor6Zu75Yq5ID4gZGVua291XCA7CivlpJblhbggPiBnYWl0ZW5cIDsKK+e0sOeJhyA+IHNhaWhlblwgOwor6KaL54y/ID4gbWl6YXJ1XCA7CivlpKfkvZMgPiBkYWl0YWlcIDsKK+Wbm+mahSA+IHlvc3VtaVwgOwor5aCF54miID4ga2Vucm91XCA7CivngavnuIQgPiBoaW5hd2FcIDsKK+aVpuWOmiA+IHRvbmtvdVwgOwor5pS55aSJID4ga2FpaGVuXCA7CivlpInli5UgPiBoZW5kb3VcIDsKK+eFp+W9sSA+IHNob3VlaVwgOwor6ZqP5b6TID4genVpanV1XCA7Civpm4TlpKcgPiB5dXVkYWlcIDsKK+aWh+S+iyA+IGJ1bnJlaVwgOwor6ZmN5p2/ID4ga291YmFuXCA7CivlpKfkvJogPiB0YWlrYWlcIDsKK+mbo+WVjyA+IG5hbm1vblwgOwor5pWZ5ZSGID4ga3lvdXNhXCA7CivmjqLoqKogPiB0YW5ib3VcIDsKK+aNu+i7oiA+IG5lbnRlblwgOwor6KGX6aCtID4gZ2FpdG91XCA7CivlpKfku7sgPiB0YWluaW5cIDsKK+mbhOWjriA+IHl1dXNvdVwgOwor5paH5L2TID4gYnVudGFpXCA7CivlpKfku7AgPiBvb2d5b3VcIDsKK+aVmeWToSA+IGt5b3VpblwgOwor5Zuz6YyyID4genVyb2t1XCA7CivlpKfku6MgPiBkYWlkYWlcIDsKK+WkqeS6lSA+IHRlbmpvdVwgOwor5o6l6KaLID4gc2Vra2VuXCA7Civoo4/opZ8gPiB1cmFlcmlcIDsKK+Wcn+i2syA+IGRvc29rdVwgOwor5aSn5Lq6ID4gZGFpbmluXCA7Civmlo7kuLsgPiBzYWlzaHVcIDsKK+iok+aIkiA+IGt1bmthaVwgOwor5aSW5YK1ID4gZ2Fpc2FpXCA7CivmlYXlm70gPiBrb2tva3VcIDsKK+aOiOizniA+IGp1c2hvdVwgOwor6Kmp5Z6LID4gc2hpa2VpXCA7CivopovniakgPiBtaW1vbm9cIDsKK+e1jOa4iCA+IGtlaXphaVwgOwor57eP5bilID4gc291c3VpXCA7CivlpKnkuLwgPiB0ZW5kb25cIDsKK+WkqeS4uyA+IHRlbnNodVwgOwor5aSn5LmxID4gdGFpcmFuXCA7Civngq3nlLAgPiB0YW5kZW5cIDsKK+eFp+W6piA+IHNob3Vkb1wgOwor6ZqK5b2iID4gdGFpa2VpXCA7Civln47noKYgPiBqb3VzYWlcIDsKK+e1gua8lCA+IHNodXVlblwgOwor5paH5Lq6ID4gYnVuamluXCA7Civoqq3kvJogPiBkb2trYWlcIDsKK+Wkp+S5lyA+IGRhaWpvdVwgOwor5aOy5ZOBID4gYmFpaGluXCA7CivlpKnkuI4gPiB0ZW4nJ3lvXCA7CivlpKnkuIogPiB0ZW5qb3VcIDsKK+Wdh+ihoSA+IGtpbmtvdVwgOwor5pS75Z+OID4ga291am91XCA7CivlnLDorKEgPiBqaXV0YWlcIDsKK+imlueCuSA+IHNoaXRlblwgOwor5pKS5rC0ID4gc2Fuc3VpXCA7Civoo73ojLYgPiBzZWljaGFcIDsKK+eBr+exoCA+IHRvdXJvdVwgOwor6Kqk5L+hID4gZ29zaGluXCA7Civpm7vlhYkgPiBkZW5rb3VcIDsKK+WknOS8vSA+IHlvdG9naVwgOwor57mL5LqJID4ga2Vpc291XCA7CivnhKHmmpcgPiBtdXlhbWlcIDsKK+ijgeiosSA+IHNhaWt5b1wgOwor5pOF5patID4gc2VuZGFuXCA7CivlpJrkvZwgPiB0YXNha3VcIDsKK+eHkOWFiSA+IHJpbmtvdVwgOwor6ZW36ICFID4gY2hvdWphXCA7CivmlaPliaQgPiBzYW56YWlcIDsKK+WcsOiqjCA+IGNoaXNoaVwgOwor5aOy5ZCNID4gYmFpbWVpXCA7Civpmb3mgKcgPiB5b3VzZWlcIDsKK+WkouS4rSA+IG11Y2h1dVwgOwor6Zu35YWJID4gcmFpa291XCA7CivloYrmoLkgPiBrYWlrb25cIDsKK+eEmuabuCA+IGZ1bnNob1wgOwor6KSq57SFID4gdGFpa291XCA7CivmkYLnlJ8gPiBzZXNzZWlcIDsKK+mWouepuiA+IGthbmt1dVwgOwor54Sh5piOID4gbXVteW91XCA7CivmlZnljLogPiBreW91a3VcIDsKK+eyvue3uyA+IHNlaWNoaVwgOwor57K+57e0ID4gc2VpcmVuXCA7Civlm73pgYsgPiBrb2t1dW5cIDsKK+mWiee1jCA+IGhlaWtlaVwgOwor5pWZ5YyWID4ga3lvdWthXCA7CivntbnmnKwgPiBrZW5wb25cIDsKK+ihgOmkhSA+IGtlcHBlaVwgOwor5aSW5LydID4gZ2FpZGVuXCA7Civpm7vlgZwgPiBkZW50ZWlcIDsKK+mghuOAhSA+IGp1bmp1blwgOwor5pWw5YCkID4gc3V1Y2hpXCA7CivplqLnqI4gPiBrYW56ZWlcIDsKK+aVmeWLmSA+IGt5b3VtdVwgOwor5pWw5YCNID4gc3V1YmFpXCA7CivnhKHmlpkgPiBtdXJ5b3VcIDsKK+WknOS4rSA+IHlvbmFrYVwgOwor6Kej5piOID4ga2FpbWVpXCA7CivnhKHmlbUgPiBtdXRla2lcIDsKK+aVo+WFtSA+IHNhbnBlaVwgOwor57WM5rC0ID4ga2Vpc3VpXCA7CivlpJbkurogPiBnYWlqaW5cIDsKK+e0meeJhyA+IHNoaWhlblwgOwor5aSW5LqkID4gZ2Fpa291XCA7Civlo4floLQgPiBkYW5qb3VcIDsKK+aVo+WFiSA+IHNhbmtvdVwgOwor5o2o6LqrID4gc3V0ZW1pXCA7CivpmpzlrZAgPiBzaG91amlcIDsKK+eyvue0sCA+IHNlaXNhaVwgOwor5aGX5paZID4gdG9yeW91XCA7CivntKDnhLwgPiBzdXlha2lcIDsKK+e2meaKlSA+IGtlaXRvdVwgOwor54WZ5bmVID4gZW5tYWt1XCA7CivlpJbkubEgPiBnYWlyYW5cIDsKK+mbkeWTgSA+IHphcHBpblwgOwor6Kej5pWjID4ga2Fpc2FuXCA7Civnsr7ns5YgPiBzZWl0b3VcIDsKK+mXmOeKrCA+IHRvdWtlblwgOwor5pOx5bqnID4ga2FrdXphXCA7Civnsr7nsr4gPiBzZWl6ZWlcIDsKK+ino+aUviA+IGthaWhvdVwgOwor57W25pmvID4gemVra2VpXCA7CivoqabllY8gPiBzaGltb25cIDsKK+ioseWuuSA+IGt5b3lvdVwgOwor6ZqO5bGkID4ga2Fpc291XCA7CivlnLDoo4EgPiBjaGlzYWlcIDsKK+eyvueyiyA+IHNlaXN1aVwgOwor57K+57KJID4gc2VpZnVuXCA7Civmj7rnsYMgPiB5b3VyYW5cIDsKK+aNlemAuCA+IGhvaXRzdVwgOwor57Sb54S2ID4gZnVuemVuXCA7CivmlZHliqkgPiBreXV1am9cIDsKK+eyvuexsyA+IHNlaW1haVwgOwor5pS55ZaEID4ga2FpemVuXCA7CivlpInkvZMgPiBoZW50YWlcIDsKK+aVrOS9kyA+IGtlaXRhaVwgOwor6KaB54K5ID4geW91dGVuXCA7CivlnKfoppogPiBha2tha3VcIDsKK+aVsOS6uiA+IHN1dW5pblwgOwor6Zmw5b6zID4gaW50b2t1XCA7CivmlZnlhbcgPiBreW91Z3VcIDsKK+eBq+eoriA+IGhpZGFuZVwgOwor54K554K5ID4gdGVudGVuXCA7CivoqJjluLMgPiBraWNob3VcIDsKK+ioreWumiA+IHNldHRlaVwgOwor5o6o6JamID4gc3Vpc2VuXCA7Civngo7nl4cgPiBlbnNob3VcIDsKK+aOg+iojiA+IHNvdXRvdVwgOwor6KGG6ZmiID4gc2h1dWluXCA7CivoqanlkJ8gPiBzaGlnaW5cIDsKK+eCueeBryA+IHRlbnRvdVwgOwor54Od5rCRID4gam91bWluXCA7CivoqaDllLEgPiBlaXNob3VcIDsKK+WkieS6uiA+IGhlbmppblwgOwor57Sv5ribID4gcnVpZ2VuXCA7CivnsZDoo70gPiB0b3VzZWlcIDsKK+e2seW4uCA+IGtvdWpvdVwgOwor57K+566hID4gc2Vpa2FuXCA7CivntJTnhLYgPiBqdW56ZW5cIDsKK+mYsuaakSA+IGJvdXNob1wgOwor57K+566XID4gc2Vpc2FuXCA7CivmlbDkuIcgPiBzdXVtYW5cIDsKK+Wegue3miA+IHN1aXNlblwgOwor6ZaJ56uvID4gaGVpdGFuXCA7CivlpInkubEgPiBoZW5yYW5cIDsKK+mWouefpSA+IGthbmNoaVwgOwor6Kmp5Y+LID4gc2hpeXV1XCA7CivntZDmp4sgPiBrZWtrb3VcIDsKK+Wjq+WIhiA+IHNoaWJ1blwgOwor6Zmq5b6TID4gYmFpanV1XCA7CivooaPpiaIgPiBpaGF0c3VcIDsKK+Wbm+mHjSA+IHNoaWp1dVwgOwor5r2u6Z+zID4gY2hvdW9uXCA7CivooqvopoYgPiBoaWZ1a3VcIDsKK+WjsOWEqiA+IHNlaXl1dVwgOwor6Zm25belID4gdG91a291XCA7CivmlaPkvJogPiBzYW5rYWlcIDsKK+aMh+mgrSA+IHNoaXRvdVwgOwor5pS55ZCNID4ga2FpbWVpXCA7Civngq/ngq8gPiBrZWlrZWlcIDsKK+aUueWPtyA+IGthaWdvdVwgOwor6KO957y2ID4gc2Vpa2FuXCA7Civoqozku6MgPiBzaGlkYWlcIDsKK+ilv+a8uCA+IHNlaXplblwgOwor6KGw6YCAID4gc3VpdGFpXCA7CivmlaPkubEgPiBzYW5yYW5cIDsKK+mZo+W9oiA+IGppbmtlaVwgOwor54Kt54GrID4gc3VtaWJpXCA7Civlm73osrsgPiBrb2t1aGlcIDsKK+aUv+WKtCA+IHNlaXJvdVwgOwor5Zyw6JmrID4gbWltaXp1XCA7Civlo67lgaUgPiBzb3VrZW5cIDsKK+ims+aihSA+IGthbmJhaVwgOwor5Zue6YGKID4ga2FpeXV1XCA7CivoprPmoZwgPiBrYW4nJ291XCA7CivmlLvli6IgPiBrb3VzZWlcIDsKK+iqjOS4iiA+IHNoaWpvdVwgOwor57Sw5rCRID4gc2FpbWluXCA7Civlm57pgIEgPiBrYWlzb3VcIDsKK+imgea4ryA+IHlvdWtvdVwgOwor5aCF5rCXID4ga2F0YWdpXCA7Civpm4Tli4EgPiB5dXVrZWlcIDsKK+WeguevhCA+IHN1aWhhblwgOwor54Sh5oW+ID4gbXV5b2t1XCA7Civpmb3lrZAgPiB5b3VzaGlcIDsKK+mbo+S7tiA+IG5hbmtlblwgOwor6Zmk5bmVID4gam9tYWt1XCA7CivntaLmlocgPiBrZW5idW5cIDsKK+iok+WwjiA+IGt1bmRvdVwgOwor5Zub6L66ID4gc2hpaGVuXCA7CivmlZfkuqEgPiBoYWlib3VcIDsKK+mbouS6rCA+IHJpa3lvdVwgOwor57SF54GvID4ga291dG91XCA7Civlo7LkurogPiBiYWluaW5cIDsKK+aUv+WFmiA+IHNlaXRvdVwgOwor6Kmm5YaZID4gc2hpc2hhXCA7Civmva7plpMgPiBzaGlvbWFcIDsKK+mbouS5syA+IHJpbnl1dVwgOwor5pS+5YWNID4gaG91bWVuXCA7Civoo4/oirggPiB1cmFnZWlcIDsKK+aUvuWFiSA+IGhvdWtvdVwgOwor6Kaz5pybID4ga2FuYm91XCA7Civlm57ou6IgPiBrYWl0ZW5cIDsKK+iojuWwiyA+IHRvdWppblwgOwor6KO957SZID4gc2Vpc2hpXCA7CivloLTmlbAgPiBiYWthenVcIDsKK+eBq+eavyA+IGhpemFyYVwgOwor56+G6Zq3ID4gdGVucmVpXCA7Civoo73ns7ggPiBzZWlzaGlcIDsKK+ijveezliA+IHNlaXRvdVwgOwor5aKX5aSnID4gem91ZGFpXCA7Civopb/mtIsgPiBzZWl5b3VcIDsKK+e4geWFiCA+IGVuc2FraVwgOwor57WM5pyoID4ga3lvdWdpXCA7Civlo7LkuIogPiB1cmlhZ2VcIDsKK+mbkeS/syA+IHphcHBhaVwgOwor5Zu96KqeID4ga29rdWdvXCA7Civoo73nsokgPiBzZWlmdW5cIDsKK+e1jOabuCA+IGtlaXNob1wgOwor57e05YqfID4gcmVua291XCA7CivmlLnlhYMgPiBrYWlnZW5cIDsKK+aPm+eulyA+IGthbnphblwgOwor6ZaL55y8ID4ga2FpZ2VuXCA7CivooYzph5EgPiBrb3VraW5cIDsKK+eyl+eylyA+IGFyYWFyYVwgOwor54KK54ioID4gc3Vpc2FuXCA7Civmv4Doqp4gPiBnZWtpZ29cIDsKK+ihl+mBkyA+IGthaWRvdVwgOwor57Sh5q+bID4gYm91bW91XCA7Civlo67kuIEgPiBzb3V0ZWlcIDsKK+eEoeW/gyA+IG11c2hpblwgOwor57Sr5qqAID4gc2hpdGFuXCA7CivngrnmsLQgPiB0ZW5zdWlcIDsKK+e4geWBtCA+IGVuZ2F3YVwgOwor6KOc57+SID4gaG9zaHV1XCA7CivpmaPlsYsgPiBqaW4nJ3lhXCA7Civpm5Hku7YgPiB6YWtrZW5cIDsKK+aOg+iVqSA+IHNvdXRvdVwgOwor6Ziy5oimID4gYm91c2VuXCA7CivntYLmnJ8gPiBzaHV1a2lcIDsKK+mbkeS6uiA+IHpvdW5pblwgOwor57e05YW1ID4gcmVucGVpXCA7CivlopPloLQgPiBoYWthYmFcIDsKK+WeguekuiA+IHN1aXNoaVwgOwor5pS/5L2TID4gc2VpdGFpXCA7Civpm4Xkv5cgPiBnYXpva3VcIDsKK+e0lOawtCA+IGp1bnN1aVwgOwor6Kmp5LuZID4gc2hpc2VuXCA7CivmlL/ku6QgPiBzZWlyZWlcIDsKK+aUvuS7uyA+IGhvdW5pblwgOwor57KJ57OgID4ga29udWthXCA7CivoqankurogPiBzaGlqaW5cIDsKK+aOqOiAgyA+IHN1aWtvdVwgOwor6Zm95aCxID4geW91aG91XCA7Civnt6jliLYgPiBoZW5zZWlcIDsKK+e0lOavmyA+IGp1bm1vdVwgOwor5ouz6ZeYID4ga2VudG91XCA7CivntIXmtpkgPiBrb3VydWlcIDsKK+aUv+S6iSA+IHNlaXNvdVwgOwor57WC5pigID4gc2h1dWVpXCA7CivntKDmqLggPiBzb2Jva3VcIDsKK+aLnemhlCA+IGhhaWdhblwgOwor57SF5rW3ID4ga291a2FpXCA7CivpmYvlt7cgPiByb3Vrb3VcIDsKK+e3mOWPoyA+IGthbmtvdVwgOwor57KJ57GzID4ga29nb21lXCA7CivmjqLogZ4gPiB0YW5idW5cIDsKK+WZtOmjryA+IGZ1bnBhblwgOwor54W95YuVID4gc2VuZG91XCA7CivntpnlrZAgPiBtYW1ha29cIDsKK+e0lOatoyA+IGp1bnNlaVwgOwor6KaH5qWtID4gaGFneW91XCA7CivpmbXlopMgPiByeW91Ym9cIDsKK+ewoeijgSA+IGthbnNhaVwgOwor6Ki85Y2wID4gc2hvdWluXCA7CivoqabkuZcgPiBzaGlqb3VcIDsKK+maoOWMvyA+IGludG9rdVwgOwor6KaP5qC8ID4ga2lrYWt1XCA7CivngavnjokgPiBoaWRhbWFcIDsKK+ioquWVjyA+IGhvdW1vblwgOwor6ZW355uuID4gbmFnYW1lXCA7Civmk43lroggPiBzb3VzaHVcIDsKK+e1seW+oSA+IHRvdWd5b1wgOwor6J+76aOfID4gYXJpa3VpXCA7CivmkL7msrkgPiBzYWt1eXVcIDsKK+ihv+ijjyA+IGVyaXVyYVwgOwor5oyv6LW3ID4gc2hpbmtpXCA7Civnt4/lkIggPiBzb3Vnb3VcIDsKK+ijnOe1piA+IGhva3l1dVwgOwor5pGC5rCPID4gc2Vzc2hpXCA7CivooYzou40gPiBrb3VndW5cIDsKK+ipleS+oSA+IGh5b3VrYVwgOwor6ZaA55WqID4gbW9uYmFuXCA7CivloIXmnZAgPiBrZW56YWlcIDsKK+Wbs+ihqCA+IHp1aHlvdVwgOwor5aCF5pyoID4ga2F0YWdpXCA7Civmj7TnlKggPiBlbicneW91XCA7CivpmLLlvqEgPiBib3VneW9cIDsKK+exs+e2vyA+IGJlaW1lblwgOwor54Gw54e8ID4ga2FpamluXCA7CivngrnmpJwgPiB0ZW5rZW5cIDsKK+WhueWjlSA+IHphbmdvdVwgOwor57SF5q+bID4ga291bW91XCA7Civnt5rliIYgPiBzZW5idW5cIDsKK+e3keWMliA+IHJ5b2trYVwgOwor6ZmL5bGLID4gcm91b2t1XCA7CivlnLDogowgPiBqaWhhZGFcIDsKK+mYsuW8viA+IGJvdWRhblwgOwor6ZmQ5a6aID4gZ2VudGVpXCA7Civoo4Xnva4gPiBzb3VjaGlcIDsKK+majuWQjSA+IGthaW1laVwgOwor6KiA5aSWID4gZ2VuZ2FpXCA7Civop5LluqYgPiBrYWt1ZG9cIDsKK+Weo+eJhiA+IGVuc2hvdVwgOwor57eP5YuiID4gc291emVpXCA7Civlm57oqJMgPiBrYWlrdW5cIDsKK+WjiuS5sSA+IGthaXJhblwgOwor57Wx5bilID4gdG91c3VpXCA7CivoprPmiKYgPiBrYW5zZW5cIDsKK+aOpee3miA+IHNlc3NlblwgOwor57WQ5oiQID4ga2Vzc2VpXCA7CivntITmrL4gPiB5YWtrYW5cIDsKK+ihqOiomCA+IGh5b3VraVwgOwor5pKk5buDID4gdGVwcGFpXCA7CivpmYTlsZ4gPiBmdXpva3VcIDsKK+WboOilsiA+IGluc2h1dVwgOwor5Zue6KanID4ga2FpcmFuXCA7CivnsbPnsokgPiBiZWlmdW5cIDsKK+eFqeWKtCA+IGhhbnJvdVwgOwor5aKo5YiRID4gYm9ra2VpXCA7CivnhKHlraYgPiBtdWdha3VcIDsKK+iiq+iGnCA+IGhpbWFrdVwgOwor5Z+O5rGgID4gam91Y2hpXCA7Civmj4/noLQgPiBieW91aGFcIDsKK+aRmOaenCA+IHRla2lrYVwgOwor57W25bO2ID4gemV0dG91XCA7CivpmbDlmqIgPiBmdWd1cmlcIDsKK+Wjh+S4iiA+IGRhbmpvdVwgOwor6KOP57SLID4gdXJhbW9uXCA7CivntKDmnLQgPiBzb2Jva3VcIDsKK+mWk+eEtiA+IGthbnplblwgOwor5oq56aaZID4gbWFra291XCA7Civmi7PpioMgPiBrZW5qdXVcIDsKK+e0q+aWkSA+IHNoaWhhblwgOwor6KaB5pybID4geW91Ym91XCA7CivoprPmg7MgPiBrYW5zb3VcIDsKK+evgOmFkiA+IHNlc3NodVwgOwor6KaL5pa5ID4gbWlrYXRhXCA7CivntI3mo7ogPiBub3VrYW5cIDsKK+ijgee4qyA+IHNhaWhvdVwgOwor5Zm06ZaAID4gZnVubW9uXCA7Civngrrmm78gPiBrYXdhc2VcIDsKK+ihqOijjyA+IGh5b3VyaVwgOwor6ZqP5YiGID4genVpYnVuXCA7Civntbblr74gPiB6ZXR0YWlcIDsKK+maj+WHpiA+IHp1aXNob1wgOwor57KX55uuID4gemFyYW1lXCA7CivpmaPlnLAgPiBqaW5jaGlcIDsKK+a8oumfsyA+IGthbicnb25cIDsKK+aMh+i8qiA+IHl1Yml3YVwgOwor5o6o566XID4gc3Vpc2FuXCA7CivlnYfnrYkgPiBraW50b3VcIDsKK+eCueaZryA+IHRlbmtlaVwgOwor6ZmQ5aSWID4gZ2VuZ2FpXCA7CivnsonnoJUgPiBmdW5zYWlcIDsKK+WfuuaVmSA+IGtpa3lvdVwgOwor6Zmw5ZSHID4gaW5zaGluXCA7CivopoHml6ggPiB5b3VzaGlcIDsKK+ioiuWVjyA+IGppbm1vblwgOwor6Zqj5Lq6ID4gcmluamluXCA7CivnsbPnqoEgPiBtxJN0b3J1XCA7CivntKDmlbUgPiBzdXRla2lcIDsKK+Wil+WIiiA+IHpvdWthblwgOwor5aKX5YiGID4gem91YnVuXCA7Civnsr7nhYkgPiBzZWlyZW5cIDsKK+a9rui3ryA+IHNoaW9qaVwgOwor57SF5qKFID4ga291YmFpXCA7CivpmY3lo4cgPiBrb3VkYW5cIDsKK+ilv+aWuSA+IHNlaWhvdVwgOwor6KGT6KiIID4ganVra2VpXCA7CivmjqHnrpcgPiBzYWlzYW5cIDsKK+e0jeadryA+IG5vdWhhaVwgOwor5r2w6LWwID4ga2Fpc291XCA7CivooYborbAgPiBzaHV1Z2lcIDsKK+ikkueKtiA+IGhvdWpvdVwgOwor6Ziy5a+SID4gYm91a2FuXCA7CivpmpvkvJogPiBzYWlrYWlcIDsKK+eCueaVsCA+IHRlbnN1dVwgOwor57SN5pysID4gbm91aG9uXCA7Civmi7PpgZMgPiBrb25kb3VcIDsKK+Wil+WFtSA+IHpvdWhlaVwgOwor5piO44CFID4gYWthYWthXCA7CivpmaPllrYgPiBqaW4nJ2VpXCA7CivlnZDnpIEgPiB6YXNob3VcIDsKK+e0meaVsCA+IHNoaXN1dVwgOwor57aZ5ZejID4ga2Vpc2hpXCA7Civnt4/kvZMgPiBzb3V0YWlcIDsKK+aPj+eUuyA+IGJ5b3VnYVwgOwor57Sb5pO+ID4gZnVuam91XCA7CivngbjmsrsgPiBreXV1amlcIDsKK+e3j+S8miA+IHNvdWthaVwgOwor5o6l56iuID4gc2Vzc2h1XCA7Civnt4/ku6MgPiBzb3VkYWlcIDsKK+mWgOeBryA+IG1vbnRvdVwgOwor5oug6YeRID4ga3lva2luXCA7CivploDngasgPiBrYWRvYmlcIDsKK+eFjuWJpCA+IHNlbnphaVwgOwor57W25aW9ID4gemVra291XCA7CivnhKblnJ8gPiBzaG91ZG9cIDsKK+e0oOaPjyA+IHNvYnlvdVwgOwor57SG5puyID4gdWt5b2t1XCA7Civmi53ph5EgPiBoYWlraW5cIDsKK+iisee0lyA+IGZ1a3VzYVwgOwor6ZqP5Ly0ID4genVpaGFuXCA7Civpmb3lhYkgPiB5b3Vrb3VcIDsKK+e1jOW4uCA+IGtlaWpvdVwgOwor5o+Q55C0ID4gdGVpa2luXCA7CivntYzluKsgPiBreW91amlcIDsKK+iomOWFpSA+IGtpbnl1dVwgOwor5Zyo57GzID4gemFpYmVpXCA7Civopprmgp8gPiBrYWt1Z29cIDsKK+Wil+S/uCA+IHpvdWhvdVwgOwor6KKi57qPID4gaGFudGVuXCA7CivplovmuK8gPiBrYWlrb3VcIDsKK+Wil+S+vyA+IHpvdWJpblwgOwor57ac5ZCIID4gc291Z291XCA7CivpmbDliLsgPiBpbmtva3VcIDsKK+a8j+mbuyA+IHJvdWRlblwgOwor6KSQ54KtID4ga2F0dGFuXCA7Civpmo7kuZcgPiBrYWlqb3VcIDsKK+aOu+eXkiA+IHNvdXlvdVwgOwor54KJ5qOaID4gcm9kYW5hXCA7Civop6Plm6MgPiBrYWlkYW5cIDsKK+Wig+WGhSA+IGtlaWRhaVwgOwor6ZqO5LiKID4ga2Fpam91XCA7CivpmZ7lj5kgPiBzaG91am9cIDsKK+aOqOefpSA+IHN1aWNoaVwgOwor5pO+5LmxID4gam91cmFuXCA7CivngavmsLQgPiBoaW1penVcIDsKK+ijveeJiCA+IHNlaWhhblwgOwor56+k6KGMID4gdG9ra291XCA7CivopoHmiYAgPiB5b3VzaG9cIDsKK+WcsOeojiA+IGNoaXplaVwgOwor57W55ZywID4ga2ludWppXCA7CivoqIDli5UgPiBnZW5kb3VcIDsKK+eyvua2siA+IHNlaWVraVwgOwor6Ziy5aG1ID4gYm91amluXCA7CivmjqLnn6UgPiB0YW5jaGlcIDsKK+WgheW/lyA+IGtlbnNoaVwgOwor6Ziy5aGeID4gYm91c2FpXCA7Civlmajph48gPiBraXJ5b3VcIDsKK+aMmeihjCA+IGt5b2tvdVwgOwor54GM5ryRID4ga2FuZ2FpXCA7CivpmKrlpKcgPiBoYW5kYWlcIDsKK+ihgOihjCA+IGtla2tvdVwgOwor6ZW35rmvID4gbmFnYXl1XCA7CivntprliIogPiB6b2trYW5cIDsKK+Wcn+ernCA+IG1vZ3VyYVwgOwor5ry46L+RID4gemVua2luXCA7CivlnJ/nqq8gPiBkb2dhbWFcIDsKK+mZouWGhSA+IGluJyduYWlcIDsKK+WgtOWkliA+IGpvdWdhaVwgOwor6KO954KtID4gc2VpdGFuXCA7CivlnoLmupYgPiBzdWlqdW5cIDsKK+eyieeKtiA+IGZ1bmpvdVwgOwor54Sh5ZGKID4gbXVrb2t1XCA7CivoqJPku6QgPiBrdW5yZWlcIDsKK+imi+W9kyA+IGtlbnRvdVwgOwor57Sv5bm0ID4gcnVpbmVuXCA7Civlm57oiLkgPiBrYWlzZW5cIDsKK+mZjeWPgiA+IGtvdXNhblwgOwor5Zyn56WeID4gYXNzaGluXCA7CivnsbPnlKMgPiBiZWlzYW5cIDsKK+e1kOWpmiA+IGtla2tvblwgOwor5Zue6IiqID4ga2Fpa291XCA7CivplonmraIgPiBoZWlzaGlcIDsKK+e0jeaJgCA+IG5hc3Nob1wgOwor5pKk5ZueID4gdGVra2FpXCA7CivnsaDnm64gPiBrYWdvbWVcIDsKK+e0lOaEmyA+IGp1bicnYWlcIDsKK+aKlemZjSA+IHRvdWtvdVwgOwor57S65bGLID4ga29uJyd5YVwgOwor5omL6by7ID4gdGViYW5hXCA7Civplbfms6IgPiBjaG91aGFcIDsKK+aTjeWFuCA+IHNvdXRlblwgOwor5Z6C5raOID4genVpemVuXCA7CivntKLlvJUgPiBzYWt1aW5cIDsKK+e0lOaDhSA+IGp1bmpvdVwgOwor54K55b+DID4gdGVuamluXCA7CivplqLmnbEgPiBrYW50b3VcIDsKK+eFieS4uSA+IHJlbnRhblwgOwor57W25ZOBID4gemVwcGluXCA7CivmjqLnlaogPiB0YW5iYW5cIDsKK+iojOS6iSA+IGtvdXNvdVwgOwor6ZaA5q2vID4gbW9uc2hpXCA7Civmv4PntLogPiBub3Vrb25cIDsKK+e0hOaJiyA+IHlha3V0ZVwgOwor5Zyw55u4ID4gY2hpc291XCA7CivoobDogJcgPiBzdWltb3VcIDsKK+ethumgrSA+IGhpdHRvdVwgOwor5o6h55SoID4gc2FpeW91XCA7CivngYzmsLQgPiBrYW5zdWlcIDsKK+aNlee4myA+IGhvYmFrdVwgOwor6KOC55eUID4ga2lyZWppXCA7Civnsonngq0gPiBmdW50YW5cIDsKK+mZquS5lyA+IGJhaWpvdVwgOwor5Zub6IKiID4gc2hpc2hpXCA7CivnrqHosqEgPiBrYW56YWlcIDsKK+ijheeUsiA+IHNvdWtvdVwgOwor6KOF55SoID4gc291eW91XCA7CivoqIjkuIogPiBrZWlqb3VcIDsKK+mXmOW/lyA+IHRvdXNoaVwgOwor5Zyn552AID4gYXRzdWdpXCA7CivlnqPmoLkgPiBrYWtpbmVcIDsKK+WboOe/kiA+IGluc2h1dVwgOwor6Z2i44CFID4gbWVubWVuXCA7Civlm5vogZYgPiBzaGlzZWlcIDsKK+ino+WJliA+IGthaWJvdVwgOwor57Wx5ZCIID4gdG91Z291XCA7CivlnJ/nn7MgPiBkb3Nla2lcIDsKK+mWi+aisSA+IGthaWtvblwgOwor6ZmE5YmHID4gZnVzb2t1XCA7CivmvZzooYwgPiBzZW5rb3VcIDsKK+e0meW5oyA+IHNoaWhlaVwgOwor6KWf5oeQID4ga2lua2FpXCA7Civop6Plh40gPiBrYWl0b3VcIDsKK+WcsOeVqiA+IGNoaWJhblwgOwor54Sa5YiRID4gZnVua2VpXCA7CivlnoLmrbsgPiBzdWlzaGlcIDsKK+e0sOWtlyA+IGhvc29qaVwgOwor57Sw5a2UID4gc2Fpa291XCA7CivloIXlroggPiBrZW5zaHVcIDsKK+eEoeWEnyA+IG11c2hvdVwgOwor54Gr5pyoID4ga2Ftb2t1XCA7CivntYLlpJwgPiBzaHV1eWFcIDsKK+WcsOeVjCA+IGNoaWthaVwgOwor6Zai5pWwID4ga2Fuc3V1XCA7CivntYPlo7AgPiBnZW5zZWlcIDsKK+iogOS4iiA+IGdvbmpvdVwgOwor6ZaL5qChID4ga2Fpa291XCA7Civmi53orJ0gPiBoYWlzaGFcIDsKK+mWk+acjSA+IGFpZnVrdVwgOwor6Kej5YWaID4ga2FpdG91XCA7CivplonmoKEgPiBoZWlrb3VcIDsKK+eEoeWCtyA+IG11a2l6dVwgOwor5o+a5rC0ID4geW91c3VpXCA7CivmkqTljrsgPiB0ZWtreW9cIDsKK+ijveazlSA+IHNlaWhvdVwgOwor5rue6ZmjID4gdGFpamluXCA7Civnsr7moLkgPiBzZWlrb25cIDsKK+WboOe4gSA+IGluJyduZW5cIDsKK+ilv+WyuCA+IHNlaWdhblwgOwor5ZiG6aGYID4gdGFuZ2FuXCA7CivmvrHnsokgPiBkZW5wdW5cIDsKK+e1seWItiA+IHRvdXNlaVwgOwor5oyB6JasID4gaml5YWt1XCA7Civlm57nt5ogPiBrYWlzZW5cIDsKK+mWk+aWrSA+IGthbmRhblwgOwor5oud6KazID4gaGFpa2FuXCA7CivopoHlrrMgPiB5b3VnYWlcIDsKK+e0meWxiyA+IGthbWl5YVwgOwor6ZmN5Lu7ID4ga291bmluXCA7Civmi53oposgPiBoYWlrZW5cIDsKK+ifoOi4niA+IGJhbmt5b1wgOwor6ZaT5pWwID4gbWFrYXp1XCA7Civlm73npoEgPiBrb2traW5cIDsKK+aMv+e1tSA+IHNhc2hpZVwgOwor5Zyw542EID4gamlnb2t1XCA7CivnhKHkvJEgPiBtdWt5dXVcIDsKK+WegualiiA+IHN1aXlvdVwgOwor5o6M55CGID4gc2hvdXJpXCA7CivntLDlpKcgPiBzYWlkYWlcIDsKK+mWkeaVoyA+IGthbnNhblwgOwor6ZaL5piOID4ga2FpbWVpXCA7CivlnJ/nlKMgPiBtaXlhZ2VcIDsKK+ino+S9kyA+IGthaXRhaVwgOwor5o6l54K5ID4gc2V0dGVuXCA7Civlm73npI4gPiBrb2t1c29cIDsKK+a7kemZjSA+IGtha2tvdVwgOwor6Zao5oi/ID4ga2VpYm91XCA7CivplovmlrkgPiBrYWlob3VcIDsKK+err+m6lyA+IHRhbnJlaVwgOwor6KGA6Ia/ID4gY2hpdW1pXCA7Civop6Pku7sgPiBrYWluaW5cIDsKK+aWueOAhSA+IGhvdWJvdVwgOwor57W25YCSID4gemV0dG91XCA7CivntJnlrZAgPiBrYW1pa29cIDsKK+eCreWxpCA+IHRhbnNvdVwgOwor5pKk5YW1ID4gdGVwcGVpXCA7CivntKvlpJYgPiBzaGlnYWlcIDsKK+e0r+WilyA+IHJ1aXpvdVwgOwor6KGM6ICFID4gZ3lvdWphXCA7CivmjqHngrkgPiBzYWl0ZW5cIDsKK+aQuuW4ryA+IGtlaXRhaVwgOwor5o6h54KtID4gc2FpdGFuXCA7Civng4jlo6sgPiByZXNzaGlcIDsKK+mWi+aUviA+IGthaWhvdVwgOwor5ryr6KuHID4gbWFuZGFuXCA7CivmiYvpp5IgPiB0ZWdvbWFcIDsKK+WgheWhgSA+IGtlbnJ1aVwgOwor5omL6aaWID4gdGVrdWJpXCA7CivloILloZQgPiBkb3V0b3VcIDsKK+mVt+acnyA+IGNob3VraVwgOwor5aCF5Z+OID4ga2Vuam91XCA7Civngonlv4MgPiByb3NoaW5cIDsKK+ethumLkiA+IGhpcHBvdVwgOwor5aCC5aCCID4gZG91ZG91XCA7CivmvKvoqIAgPiBtYW5nZW5cIDsKK+WbnuetlCA+IGthaXRvdVwgOwor6Kaq5ZKMID4gc2hpbndhXCA7CivntYzlj6MgPiBrZWlrb3VcIDsKK+WfjuW4giA+IGpvdXNoaVwgOwor57W25LqkID4gemVra291XCA7CivlnoLmnKggPiB0YXJ1a2lcIDsKK+WgtOWGhSA+IGpvdW5haVwgOwor5oyJ6IW5ID4gYW5wdWt1XCA7Civoo5zms6ggPiBob2NodXVcIDsKK+WcsOeCuSA+IGNoaXRlblwgOwor5ryi6KmpID4ga2Fuc2hpXCA7Civpl4flsYsgPiB5YW1peWFcIDsKK+e1tuS4liA+IHplc3NlaVwgOwor5oqA6YePID4gZ2lyeW91XCA7CivmiYvpoLggPiB0ZWt1YmlcIDsKK+e1hOWQiCA+IGt1bWlhaVwgOwor54KJ5bqKID4gcm9zaG91XCA7CivmiYvpoIMgPiB0ZWdvcm9cIDsKK+imi+WcsCA+IGtlbmNoaVwgOwor6KaB5aGeID4geW91c2FpXCA7CivooqvniIYgPiBoaWJha3VcIDsKK+ift+iegiA+IHRvdXJvdVwgOwor6KaG5ZyfID4gZnVrdWRvXCA7Civln7nlnLAgPiBiYWljaGlcIDsKK+a9nOiIqiA+IHNlbmtvdVwgOwor6KW/5Z+fID4gc2VpaWtpXCA7Civntabku5ggPiBreXV1ZnVcIDsKK+e1puS7lSA+IGt5dXVqaVwgOwor5Zue56S8ID4ga2FpcmVpXCA7CivmiYDpoZggPiBzaG9nYW5cIDsKK+mXmOWjqyA+IHRvdXNoaVwgOwor57WQ5YWaID4ga2V0dG91XCA7CivngJXmrbsgPiBoaW5zaGlcIDsKK+e0lOWilyA+IGp1bnpvdVwgOwor6ZaL5oimID4ga2Fpc2VuXCA7CivoprPlhYkgPiBrYW5rb3VcIDsKK+ijveadkCA+IHNlaXphaVwgOwor5rqc6aOyID4gcnl1dWluXCA7CivooajnpLogPiBoeW91amlcIDsKK+imgeWcsCA+IHlvdWNoaVwgOwor6KO95pysID4gc2VpaG9uXCA7Civng5nljbAgPiByYWt1aW5cIDsKK+aJi+mamyA+IHRlZ2l3YVwgOwor5omL6ZqZID4gdGVzdWtpXCA7CivntYzlhbggPiBrZWl0ZW5cIDsKK+imquWIhiA+IG95YWJ1blwgOwor57SZ5Z6LID4gc2hpa2VpXCA7CivnrYnovrogPiB0b3VoZW5cIDsKK+eCueWcqCA+IHRlbnphaVwgOwor5Zyw5rqdID4gY2hpa291XCA7CivntabkuI4gPiBreXV1eW9cIDsKK+eCreWhtSA+IHRhbmppblwgOwor5Zu955K9ID4ga29rdWppXCA7CivnspfmnI0gPiBzb2Z1a3VcIDsKK+ihgOe1sSA+IGtldHRvdVwgOwor54Gr5oClID4ga2FreXV1XCA7Civln5/lpJYgPiBpa2lnYWlcIDsKK+erv+mgrSA+IGthbnRvdVwgOwor57Sw5ZCbID4gc2Fpa3VuXCA7Civnga/lvbEgPiBob2thZ2VcIDsKK+aKleizhyA+IHRvdXNoaVwgOwor5ouZ6JGXID4gc2V0Y2hvXCA7CivooYDns5YgPiBrZXR0b3VcIDsKK+aJi+mVtyA+IHRlbmFnYVwgOwor54Gr5b2xID4gaG9rYWdlXCA7CivmjpLmtrIgPiBoYWlla2lcIDsKK+eCreWdkSA+IHRhbmtvdVwgOwor6ZeH5aScID4geWFtaXlvXCA7Civlm73njosgPiBrb2t1b3VcIDsKK+e0heWhtSA+IGtvdWppblwgOwor6KaL5Y+wID4ga2VuZGFpXCA7CivnsonmnKwgPiBmdW5wb25cIDsKK+mVt+aJkyA+IGNob3VkYVwgOwor6KaL5Y+CID4ga2VuemFuXCA7Civnsr7mgo0gPiBzZWlrYW5cIDsKK+Wcj+eCuSA+IGtlbnRlblwgOwor54Gr5bqKID4gaGlkb2tvXCA7CivooYDnrqEgPiBrZWtrYW5cIDsKK+e1jOS8nSA+IGtlaWRlblwgOwor5o2V55CDID4gaG9reXV1XCA7CivmiJDprZogPiBzZWlneW9cIDsKK+ihqOeariA+IGh5b3VoaVwgOwor6KGM56iLID4ga291dGVpXCA7Civmj5rmj5ogPiB5b3V5b3VcIDsKK+WfjuWkliA+IGpvdWdhaVwgOwor5oyH57SLID4gc2hpbW9uXCA7CivmjpLmsLQgPiBoYWlzdWlcIDsKK+WbveeItiA+IGtva3VmdVwgOwor57Sw5YiGID4gc2FpYnVuXCA7Civngb3lrrMgPiBzYWlnYWlcIDsKK+mWi+W7tyA+IGthaXRlaVwgOwor5ZiJ6L6wID4ga2FzaGluXCA7CivmjZXnjbIgPiBob2tha3VcIDsKK+aMgee2miA+IGppem9rdVwgOwor5rq26YqRID4geW91c2VuXCA7Civopo/liYcgPiBraXNva3VcIDsKK+mWieW7tyA+IGhlaXRlaVwgOwor5o+h5omLID4gYWt1c2h1XCA7CivplovlupcgPiBrYWl0ZW5cIDsKK+eyvuW9qSA+IHNlaXNhaVwgOwor5o+Q5pC6ID4gdGVpa2VpXCA7CivmiYvpjYsgPiB0ZW5hYmVcIDsKK+aOg+a1tyA+IHNvdWthaVwgOwor56uc6aasID4gcnl1dW1lXCA7Civln47loZ4gPiBqb3VzYWlcIDsKK+e1jOS4liA+IGtlaXNlaVwgOwor6ZaL5bmzID4ga2FpaGVpXCA7CivmipfoqIAgPiBrb3VnZW5cIDsKK+eqrum8oCA+IGt5dXVzb1wgOwor6ZaJ5bqXID4gaGVpdGVuXCA7Civln47loYEgPiBqb3VydWlcIDsKK+a7kei7iiA+IGthc3NoYVwgOwor56ul6aGUID4gZG91Z2FuXCA7Civlm57nlJ8gPiBrYWlzZWlcIDsKK+a6gOmhmCA+IG1hbmdhblwgOwor6ZaL5be7ID4ga2Fpa2FuXCA7Civopb/ljZcgPiBzZWluYW5cIDsKK+aOouaknCA+IHRhbmtlblwgOwor6ZaA5byfID4gbW9udGVpXCA7CivmiKbpm7IgPiBzZW4nJ3VuXCA7CivmiYvpiaQgPiB0ZWthZ2lcIDsKK+a5vumgrSA+IHdhbnRvdVwgOwor57SN5ZOBID4gbm91aGluXCA7CivllqfpqJIgPiBrZW5zb3VcIDsKK+aQjeWusyA+IHNvbmdhaVwgOwor57Gz5p2QID4gYmVpemFpXCA7Civln47lnYAgPiBqb3VzaGlcIDsKK+aIpumaiiA+IHNlbnRhaVwgOwor5oud6IGeID4gaGFpYnVuXCA7CivonJrps6UgPiBoaWNob3VcIDsKK+aIpumZoyA+IHNlbmppblwgOwor57K+5benID4gc2Vpa291XCA7Civnsr7lt6MgPiBzZWlzb3VcIDsKK+a6gOmdoiA+IG1hbm1lblwgOwor6ZaR5bGFID4ga2Fua3lvXCA7Civnq5zpoK0gPiByeXV1enVcIDsKK+a7kei1sCA+IGthc3NvdVwgOwor5Zar6aOvID4ga2lwcGFuXCA7CivntKLlhbcgPiBzYWt1Z3VcIDsKK+ijj+advyA+IHVyYWl0YVwgOwor6J2m6YygID4gZWJpam91XCA7CivngavlroUgPiBrYXRha3VcIDsKK+aIpumXmCA+IHNlbnRvdVwgOwor5omL6YWMID4gdGVqYWt1XCA7Civmi5nogIUgPiBzZXNzaGFcIDsKK+mWi+WxsSA+IGthaXNhblwgOwor6ZW35bqnID4gY2hvdXphXCA7CivmvKLoi7EgPiBrYW4nJ2VpXCA7CivplonlsbEgPiBoZWl6YW5cIDsKK+WYieizniA+IGthc2hvdVwgOwor5Zyw5qScID4gY2hpa2VuXCA7CivplonlsYUgPiBoZWlreW9cIDsKK+mWi+WwgSA+IGthaWZ1dVwgOwor5pGC5Y+WID4gc2Vzc2h1XCA7CivplqLlpKcgPiBrYW5kYWlcIDsKK+Wbvea8oiA+IGtva2thblwgOwor54K55YWJID4gdGVua291XCA7Civngq3lirQgPiB0YW5yb3VcIDsKK+aKueiMtiA+IG1hdGNoYVwgOwor5Zue54q2ID4ga2Fpam91XCA7CivntK/ku6MgPiBydWlkYWlcIDsKK+aLmOe9riA+IGtvdWNoaVwgOwor57SU5YiGID4ganVuYnVuXCA7Civlnabmh5AgPiB0YW5rYWlcIDsKK+Wdh+aWiSA+IGtpbnNlaVwgOwor5rqA6ZaLID4gbWFua2FpXCA7CivlnYfmlbQgPiBraW5zZWlcIDsKK+e0r+S5lyA+IHJ1aWpvdVwgOwor5o6o5patID4gc3VpZGFuXCA7CivmlaPjgIUgPiBzYW56YW5cIDsKK+aJueiplSA+IGhpaHlvdVwgOwor5o6I5qWtID4ganVneW91XCA7Civono3os4cgPiB5dXVzaGlcIDsKK+aOqOaVsiA+IHN1aWtvdVwgOwor57Sv5LiWID4gcnVpc2VpXCA7CivooYDnm7ggPiBrZXNzb3VcIDsKK+eymOaApyA+IG5lbnNlaVwgOwor6KSH5bqnID4gZnVrdXphXCA7Civmv4Pmt6EgPiBub3V0YW5cIDsKK+aOsuaPmiA+IGtlaXlvdVwgOwor6KaL5LqLID4gbWlnb3RvXCA7Civnsr7lrZAgPiBzZWlzaGlcIDsKK+WgguS4iiA+IGRvdWpvdVwgOwor6J6z6J6CID4gdG91cm91XCA7CivmiYvou70gPiB0ZWdhcnVcIDsKK+eBsOWhtSA+IGhhaWppblwgOwor5Zyo5qChID4gemFpa291XCA7CivopKXlqaYgPiBqb2t1ZnVcIDsKK+a8leiJhyA+IHNvdXRlaVwgOwor6ZW35bGLID4gbmFnYXlhXCA7CivooYDnl7AgPiBrZXR0YW5cIDsKK+mWi+WniyA+IGthaXNoaVwgOwor6KGG55SfID4gc2h1am91XCA7CivopoHku7YgPiB5b3VrZW5cIDsKK+ihgOeXlSA+IGtla2tvblwgOwor5Z+f5YaFID4gaWtpbmFpXCA7Civplbflr78gPiBjaG91anVcIDsKK+imgeS6uiA+IHlvdWppblwgOwor5Zyo5p2lID4gemFpcmFpXCA7CivmjJnnlKggPiBreW95b3VcIDsKK+mVt+WutiA+IG5hZ2F5YVwgOwor6KOB5patID4gc2FpZGFuXCA7CivmipzokIMgPiBiYXNzdWlcIDsKK+e0m+S6iSA+IGZ1bnNvdVwgOwor5omA6LyJID4gc2hvc2FpXCA7CivmiYvotrMgPiB0ZWFzaGlcIDsKK+Wcp+acjSA+IGFwcHVrdVwgOwor57Sb5LmxID4gZnVucmFuXCA7CivmvbDnmI0gPiBrYWl5b3VcIDsKK+mWi+WiviA+IGthaWtvblwgOwor5Zyw5pa5ID4gY2hpaG91XCA7CivmjqjmjJkgPiBzdWlreW9cIDsKK+WbveavjSA+IGtva3Vib1wgOwor57KS5bqmID4gcnl1dWRvXCA7CivlnLDmlocgPiBjaGltb25cIDsKK+ihl+eHiCA+IGdhaXRvdVwgOwor5ri46a2aID4geXV1Z3lvXCA7Civmipfoj4wgPiBrb3VraW5cIDsKK+e0meS4iiA+IHNoaWpvdVwgOwor6ZaL5aC0ID4ga2Fpam91XCA7Civono3op6MgPiB5dXVrYWlcIDsKK+Wbnua8lSA+IGthaXNvdVwgOwor5Zyf5pyoID4gZG9ib2t1XCA7CivplonloLQgPiBoZWlqb3VcIDsKK+iiq+acjSA+IGhpZnVrdVwgOwor5ZaJ6aCtID4ga291dG91XCA7CivplpHlnLAgPiBrYW5jaGlcIDsKK+exs+aHhyA+IGJlaWtvblwgOwor6ZeY5LqJID4gdG91c291XCA7CivntI3kvJogPiBub3VrYWlcIDsKK+mWi+WfjiA+IGthaWpvdVwgOwor6Zaj5ZOhID4ga2FrdWluXCA7CivploDlpJYgPiBtb25nYWlcIDsKK+aNuuafkyA+IG5hc3NlblwgOwor6KKr5pudID4gaGliYWt1XCA7CivmjqjmiLQgPiBzdWl0YWlcIDsKK+WfjuWGhSA+IGpvdW5haVwgOwor566h56uvID4ga2FudGFuXCA7Civln47lhbUgPiBqb3VoZWlcIDsKK+a8geiIuSA+IGd5b3NlblwgOwor6ZeH5YCkID4geWFtaW5lXCA7CivmvJTnv5IgPiBlbnNodXVcIDsKK+aOpeaIpiA+IHNlc3NlblwgOwor5Zue5ri4ID4ga2FpeXV1XCA7CivooZfnga8gPiBnYWl0b3VcIDsKK+ertui8qiA+IGtlaXJpblwgOwor5oyB55eFID4gamlieW91XCA7CivplbflpbMgPiBjaG91am9cIDsKK+WbveaoqSA+IGtva2tlblwgOwor57SK5LmxID4gYnVucmFuXCA7CivplbflpJwgPiBjaG91eWFcIDsKK+aMh+eSsCA+IHl1Yml3YVwgOwor5ouZ56i/ID4gc2Vra291XCA7CivlnJ/mlrkgPiBkb2thdGFcIDsKK+aJk+iouiA+IGRhc2hpblwgOwor5ZaE6ZyKID4gemVucmVpXCA7Civmi53npLwgPiBoYWlyZWlcIDsKK+Wbm+a1tyA+IHNoaWthaVwgOwor5Zyn5pC+ID4gYXNzYWt1XCA7Civmurbop6MgPiB5b3VrYWlcIDsKK+a8lOe5uSA+IGVuJydla2lcIDsKK+ijnOW8tyA+IGhva3lvdVwgOwor6ZaA5ZywID4gbW9uY2hpXCA7Civmi5jnpoEgPiBrb3VraW5cIDsKK+eri+mMkCA+IHJpc3N1aVwgOwor57K+5ZqiID4gc2Vpbm91XCA7CivlloTpmqMgPiB6ZW5yaW5cIDsKK+eskeipsSA+IHNob3V3YVwgOwor6Y6U6YqRID4geW91c2VuXCA7CivmiKbou4ogPiBzZW5zaGFcIDsKK+WdkeW6lSA+IGtvdXRlaVwgOwor54Gv5Y+wID4gdG91ZGFpXCA7CivnrpfnqIsgPiBzYW50ZWlcIDsKK+aJi+iosSA+IHRlbW90b1wgOwor5rig6a2BID4ga3lva2FpXCA7CivoobDmrosgPiBzdWl6YW5cIDsKK+ihsOatuyA+IHN1aXNoaVwgOwor57KJ5bGLID4ga29uYXlhXCA7Civln47ku6MgPiBqb3VkYWlcIDsKK+aJgOirliA+IHNob3JvblwgOwor5Zub5rCRID4gc2hpbWluXCA7Civlm6PmrJIgPiBkYW5yYW5cIDsKK+a6gOi8iSA+IG1hbnNhaVwgOwor5o6l5b6FID4gc2V0dGFpXCA7CivmuoDou4ogPiBtYW5zaGFcIDsKK+aJgOipriA+IHNob3NlblwgOwor5Z+O5Li7ID4gam91c2h1XCA7CivlnKjmiYAgPiB6YWlzaG9cIDsKK+eAkeW4gyA+IGJha3VmdVwgOwor57Gz5bidID4gYmVpdGVpXCA7Civns5bliIYgPiB0b3VidW5cIDsKK+aQreS5lyA+IHRvdWpvdVwgOwor5Zad6YeHID4ga2Fzc2FpXCA7Civplovlj6MgPiBrYWlrb3VcIDsKK+a6tuiejSA+IHlvdXl1dVwgOwor54Gw5YiGID4ga2FpYnVuXCA7CivlmLLnvbUgPiBjaG91YmFcIDsKK+eti+iFqyA+IGtpbnNodVwgOwor6ZaJ5Y+jID4gaGVpa291XCA7Civom67poqggPiBiYW5wdXVcIDsKK+aHh+mhmCA+IGtvbmdhblwgOwor562G6Ie0ID4gaGl0Y2hpXCA7CivmiYDoposgPiBzaG9rZW5cIDsKK+aJgOimgSA+IHNob3lvdVwgOwor5Zuz5p+EID4genVnYXJhXCA7Civoo4XlvL4gPiBzb3VkYW5cIDsKK+aIiui+sCA+IGJvc2hpblwgOwor5ryB57ayID4gZ3lvbW91XCA7Civlm73mmK8gPiBrb2t1emVcIDsKK+eBr+WFiSA+IHRvdWtvdVwgOwor57Oe5L6/ID4gZnVuYmVuXCA7CivonbTonbYgPiBrb2Nob3VcIDsKK+a9rueArCA+IHNoaW9zZVwgOwor6Zai5L+CID4ga2Fua2VpXCA7Civnq6Xosp4gPiBkb3V0ZWlcIDsKK+eqgemiqCA+IHRvcHB1dVwgOwor5r+A5piCID4gZ2Vra291XCA7Civmipjnt5ogPiBzZXNzZW5cIDsKK+eBq+WFiCA+IGhvc2FraVwgOwor57Gz5bGLID4ga29tZXlhXCA7CivngavlhYMgPiBoaW1vdG9cIDsKK+WcsOW9oiA+IGNoaWtlaVwgOwor5rqA6LKrID4gbWFuZ2FuXCA7Civoo4XluYAgPiBzb3V0ZWlcIDsKK+aPuuWLlSA+IHlvdWRvdVwgOwor57Ch5piOID4ga2FubWVpXCA7CivmiK/oqZUgPiBnaWh5b3VcIDsKK+eyvuWLpCA+IHNlaWtpblwgOwor5oqc57O4ID4gYmFzc2hpXCA7CivooYDmuIUgPiBrZXNzZWlcIDsKK+eptOmmrCA+IGFuYXVtYVwgOwor57K+5YqxID4gc2VpcmVpXCA7CivngavlgrcgPiB5YWtlZG9cIDsKK+a7heiPjCA+IG1la2tpblwgOwor562G6ICVID4gaGlra291XCA7Civpjq7orbcgPiBjaGluZ29cIDsKK+ibrumatyA+IGJhbnJlaVwgOwor562G6ICFID4gaGlzc2hhXCA7CivmipznsosgPiBiYXNzdWlcIDsKK+WcsOW6lSA+IGNoaXRlaVwgOwor5Zyo5b25ID4gemFpZWtpXCA7CivmiY3ol7sgPiBzYWlzb3VcIDsKK+WcsOW5syA+IGNoaWhlaVwgOwor57K+5YiwID4gc2VpdG91XCA7Civmj5vllqkgPiBrYW4nJ3l1XCA7CivnsonlobUgPiBmdW5qaW5cIDsKK+WcsOW4ryA+IGNoaXRhaVwgOwor56+A54K5ID4gc2V0dGVuXCA7CivmjqjlrpogPiBzdWl0ZWlcIDsKK+erpeisoSA+IGRvdXlvdVwgOwor5ZWP6aGMID4gbW9uZGFpXCA7CivploDliY0gPiBtb256ZW5cIDsKK+Wbm+ahgSA+IHlva2V0YVwgOwor6KGM5q6KID4gZ3lvdWpvXCA7CivlnablnaYgPiB0YW50YW5cIDsKK+epuumfsyA+IHNvcmFuZVwgOwor6Zai5LiOID4ga2FuJyd5b1wgOwor5Zyn5bu2ID4gYXRzdWVuXCA7CivoobDmm78gPiBzdWl0YWlcIDsKK+mWi+WCrCA+IGthaXNhaVwgOwor6ZaA5Ye6ID4ga2Fkb2RlXCA7Civnsr7lhbUgPiBzZWloZWlcIDsKK+aOoeWvuCA+IHNhaXN1blwgOwor6ZaL5YKYID4ga2Fpc2FuXCA7Civmibbnv7wgPiBmdXlva3VcIDsKK+aQjeS6oSA+IHNvbmJvdVwgOwor6ZaD5YWJID4gc2Vua291XCA7CivnsaDlsYUgPiByb3VreW9cIDsKK+WdkeWkliA+IGtvdWdhaVwgOwor5oe46LuNID4ga2VuZ3VuXCA7Civpvo3ppqwgPiByeXV1bWVcIDsKK+epuumbuyA+IGt1dWRlblwgOwor5Zub5pu4ID4gc2hpc2hvXCA7CivmjJnmraIgPiBreW9zaGlcIDsKK+ijveWTgSA+IHNlaWhpblwgOwor56m66ZqbID4ga3V1c2FpXCA7CivlloTpgZMgPiB6ZW5kb3VcIDsKK+a4hemiqCA+IHNlaWZ1dVwgOwor566h54q2ID4ga2Fuam91XCA7CivpjZvpjKwgPiB0YW5yZW5cIDsKK+WcsOWxpCA+IGNoaXNvdVwgOwor54Gr5LitID4ga2FjaHV1XCA7Civlm73mioAgPiBrb2t1Z2lcIDsKK+mMsumfsyA+IHJva3VvblwgOwor6Y2b6Yu8ID4gdGFua291XCA7Civoo4HlrpogPiBzZWl0ZWlcIDsKK+aJgOiUtSA+IHNob3pvdVwgOwor6ZW35YaGID4gY2hvdWVuXCA7CivplovkvJogPiBrYWlrYWlcIDsKK+a4rOmOliA+IHNva3VzYVwgOwor5r2f5rmWID4gc2VraWtvXCA7CivllonovKogPiBub2Rvd2FcIDsKK+a4i+mdoiA+IGp1dW1lblwgOwor6ZaJ5LyaID4gaGVpa2FpXCA7Civlm57ml4sgPiBrYWlzZW5cIDsKK+ethue0mSA+IGhpc3NoaVwgOwor5o2V5o2JID4gaG9zb2t1XCA7CivnqbrplqggPiBrdXVrZWlcIDsKK+a9ruawlyA+IHNoaW9rZVwgOwor5Zue5paHID4ga2FpYnVuXCA7CivmvJTnm64gPiBlbm1va3VcIDsKK+epuumWkyA+IGt1dWthblwgOwor5Zu95oayID4ga29ra2VuXCA7Civlm57mlbAgPiBrYWlzdXVcIDsKK+aKleeovyA+IHRvdWtvdVwgOwor5Zu95oW2ID4ga29ra2VpXCA7CivmiY3oirggPiBzYWlnZWlcIDsKK+ikh+WIqSA+IGZ1a3VyaVwgOwor6KOP5aOwID4gdXJhZ29lXCA7Civmu57ntI0gPiB0YWlub3VcIDsKK+Wbm+aVoyA+IHNoaXNhblwgOwor5riT6ZaTID4ga2Vpa2FuXCA7Civmi6DngrkgPiBreW90ZW5cIDsKK+aJi+iKuCA+IHNodWdlaVwgOwor5ris6YmbID4gc29rdWVuXCA7CivlnKjlrpggPiB6YWlrYW5cIDsKK+WZtOeFmSA+IGZ1bicnZW5cIDsKK+a7nuexsyA+IHRhaWJlaVwgOwor5ryC56CCID4gaHlvdXNhXCA7CivploDkurogPiBtb25qaW5cIDsKK+ethueulyA+IGhpc3NhblwgOwor5Zu95oGpID4ga29rdW9uXCA7CivmjoPlsIQgPiBzb3VzaGFcIDsKK+mOlOinoyA+IHlvdWthaVwgOwor562G562UID4gaGl0dG91XCA7CivmiY3ohZUgPiBzYWl3YW5cIDsKK+WbsOaGiiA+IGtvbnBhaVwgOwor56+A5rC0ID4gc2Vzc3VpXCA7CivmvYXmvJEgPiBrYW5nYWlcIDsKK+ethuerryA+IGhpdHRhblwgOwor562U56S8ID4gdG91cmVpXCA7CivmiYvohZUgPiBzaHV3YW5cIDsKK+a9nOawtCA+IHNlbnN1aVwgOwor5r+A5oCSID4gZ2VraWRvXCA7CivmiY3og70gPiBzYWlub3VcIDsKK+ijheWhqyA+IHNvdXRlblwgOwor5ouz5rOVID4ga2VucG91XCA7CivmuIXplpEgPiBzZWlrYW5cIDsKK+aOpeWcsCA+IHNldGNoaVwgOwor6Y2b6YCgID4gdGFuem91XCA7Civnq5zonaYgPiBpc2VlYmlcIDsKK+WcsOWkiSA+IGNoaWhlblwgOwor6KGA5qCTID4ga2Vzc2VuXCA7CivmjpLlpJYgPiBoYWlnYWlcIDsKK+Wbo+aJhyA+IHVjaGl3YVwgOwor5omL6IG3ID4gdGVqb2t1XCA7CivnqpPovrogPiBtYWRvYmVcIDsKK+ihk+aVsCA+IGp1c3N1dVwgOwor57Gg5Z+OID4gcm91am91XCA7CivmvKvnhLYgPiBtYW56ZW5cIDsKK+a7nuepuiA+IHRhaWt1dVwgOwor5rex6ZuqID4gbWl5dWtpXCA7CivlnLDloYogPiBjaGlrYWlcIDsKK+WbnuaIpiA+IGthaXNlblwgOwor5r+B5bqmID4gZGFrdWRvXCA7CivmiYvnv7AgPiBzaHVrYW5cIDsKK+WcqOWkqSA+IHphaXRlblwgOwor6KGM5peFID4ga291cnlvXCA7CivnqL3pppYgPiBrZWlzaHVcIDsKK+ernOiZjiA+IHJ5b3Vrb1wgOwor5Zyo5aSWID4gemFpZ2FpXCA7CivoobDmhYsgPiBzdWl0YWlcIDsKK+ihjOaWhyA+IGtvdWJ1blwgOwor6KGA5pu4ID4ga2Vzc2hvXCA7Civoo4LlnLAgPiBraXJlamlcIDsKK+WdkeWPoyA+IGtvdWtvdVwgOwor5Zyw5Z+fID4gY2hpaWtpXCA7CivmuJvphY0gPiBnZW5wYWlcIDsKK+epjembsiA+IHNla2l1blwgOwor5rqA6JKZID4gbWFubW91XCA7CivmvLjmuJsgPiB6ZW5nZW5cIDsKK+WbnuaDsyA+IGthaXNvdVwgOwor5ruR56m6ID4ga2Fra3V1XCA7Civmt7HplpMgPiBmdWthbWFcIDsKK+a7keeovSA+IGtva2tlaVwgOwor5ryr5ryrID4gbWFubWFuXCA7CivpjKzpi7wgPiByZW5rb3VcIDsKK+ihgOaWkSA+IGtlcHBhblwgOwor56ia6bCkID4gd2FyYXNhXCA7CivmuJvpgIAgPiBnZW50YWlcIDsKK+err+iJhyA+IHRhbnRlaVwgOwor5o6l5ZC7ID4gc2VwcHVuXCA7Civmjqjlj4IgPiBzdWlzYW5cIDsKK+aLmOazpSA+IGtvdWRlaVwgOwor562L55uuID4gc3VqaW1lXCA7CivmiKboiaYgPiBzZW5rYW5cIDsKK+ijnOWJhyA+IGhvc29rdVwgOwor5o2o5a2QID4gc3V0ZWdvXCA7CivlmbTms4kgPiBmdW5zZW5cIDsKK+eomumujiA+IGNoaWF5dVwgOwor6Jyl6Jy0ID4gdG9rYWdlXCA7Civmi53mrr8gPiBoYWlkZW5cIDsKK+eomumtmiA+IGNoaWd5b1wgOwor5Z2H5YuiID4ga2luc2VpXCA7Civlm73lr4wgPiBrb2t1ZnVcIDsKK+aOoeWPliA+IHNhaXNodVwgOwor5Z2R5YaFID4ga291bmFpXCA7CivlmbTmsLQgPiBmdW5zdWlcIDsKK+aJi+e0mSA+IHRlZ2FtaVwgOwor566X5rOVID4gc2FucG91XCA7Civlm73lrZcgPiBrb2t1amlcIDsKK+WbmuW+kiA+IHNodXV0b1wgOwor6KGw5bmjID4gc3VpaGVpXCA7Civnr4bmm7ggPiB0ZW5zaG9cIDsKK+eorumhniA+IHNodXJ1aVwgOwor5riF6YWSID4gc2Vpc2h1XCA7CivnsonkvZMgPiBmdW50YWlcIDsKK+Wcj+WkliA+IGtlbmdhaVwgOwor6KOc5YSfID4gaG9zaG91XCA7CivllYbpgYsgPiBzaG91dW5cIDsKK+WbnuW7iiA+IGthaXJvdVwgOwor56m66LuiID4ga3V1dGVuXCA7CivlnYfliIYgPiBraW5idW5cIDsKK+a7heengSA+IG1lc3NoaVwgOwor56m66LuNID4ga3V1Z3VuXCA7Civnqbrou4ogPiBrdXVzaGFcIDsKK+eyi+S6uiA+IHN1aWppblwgOwor5omL57GgID4gdGVrYWdvXCA7CivnqbrouqsgPiBrYXJhbWlcIDsKK+aMh+aVsCA+IHNoaXN1dVwgOwor5ZaE6KGMID4gemVua291XCA7CivpjJrpjJogPiBzb3Vzb3VcIDsKK+aJi+ewoSA+IHNodWthblwgOwor566X5q61ID4gc2FuZGFuXCA7CivmuIXpgYogPiBzZWl5dXVcIDsKK+WcsOWQjSA+IGNoaW1laVwgOwor5rqA6IWUID4gbWFua291XCA7CivmiqvngJ0gPiBoaXJla2lcIDsKK+aLkuatoiA+IGt5b3NoaVwgOwor5omL566xID4gdGViYWtvXCA7CivmiYvnrqEgPiB0ZWt1ZGFcIDsKK+ethueUnyA+IGhpc3NlaVwgOwor6KOc5L+uID4gaG9zaHV1XCA7CivmjqXlhpkgPiBzZXNzaGFcIDsKK+Wbm+W3nSA+IHNoaXNlblwgOwor5omL562LID4gdGVzdWppXCA7CivmiYvnrYggPiB0ZWhhenVcIDsKK+aMmeaJiyA+IGt5b3NodVwgOwor56qB6LKrID4gdG9ra2FuXCA7CivooaHlubMgPiBrb3VoZWlcIDsKK+a6lue4hCA+IGp1bmpvdVwgOwor56u557iBID4gdGFrZWVuXCA7CivmjpLljbUgPiBoYWlyYW5cIDsKK+a5r+iKsSA+IHl1YmFuYVwgOwor5rib6LOHID4gZ2Vuc2hpXCA7CivooYDmiKYgPiBrZXNzZW5cIDsKK+aHh+iriyA+IGtvbnNlaVwgOwor5oeH6KuHID4ga29uZGFuXCA7CivmjajloLQgPiBzdXRlYmFcIDsKK+aOoeWFiSA+IHNhaWtvdVwgOwor5Zyw5YuiID4gY2hpc2VpXCA7Civmua/oiLkgPiB5dWJ1bmVcIDsKK+etkueKtiA+IHRvdWpvdVwgOwor6KGG5oSaID4gc2h1dWd1XCA7CivnqLLploAgPiB0b3Vtb25cIDsKK+ijgeWIpCA+IHNhaWJhblwgOwor56uc6IOGID4gcmluZG91XCA7CivmiYDnrqEgPiBzaG9rYW5cIDsKK+a3semDqCA+IHNoaW5idVwgOwor5oi457GNID4ga29zZWtpXCA7CivmjqLlgbUgPiB0YW50ZWlcIDsKK+evgOaTjSA+IHNlc3NvdVwgOwor6KKr5ZGKID4gaGlrb2t1XCA7Civmt7fov7cgPiBrb25tZWlcIDsKK+a7heebuCA+IG1lc3NvdVwgOwor56uv57eaID4gdGFuc2VuXCA7Civnq6/nt5IgPiB0YW5jaG9cIDsKK+WcqOWLpCA+IHphaWtpblwgOwor5r2U5paOID4ga2Vzc2FpXCA7CivmiJDogrIgPiBzZWlpa3VcIDsKK+iciOiaoyA+IG11a2FkZVwgOwor5Zyn5YudID4gYXNzaG91XCA7CivmtbfpvKAgPiBuYW1ha29cIDsKK+aIpue3miA+IHNlbnNlblwgOwor5ry/5p6cID4gc2hvdWthXCA7Civlm7rln7cgPiBrb3NodXVcIDsKK+aOpeS8tCA+IHNlcHBhblwgOwor56u557CAID4gdGFrZXN1XCA7Civlmajmpb0gPiBraWdha3VcIDsKK+WcsOWFgyA+IGppbW90b1wgOwor5re36LyJID4ga29uc2FpXCA7CivmtrLpnaIgPiBla2ltZW5cIDsKK+ibh+i2syA+IGRhc29rdVwgOwor5ru+5ru+ID4ga29ua29uXCA7Civlm73lnJ8gPiBrb2t1ZG9cIDsKK+iZuemckyA+IGtvdWdlaVwgOwor6KGM5bm4ID4gbWl5dWtpXCA7CivooYzlubQgPiBrb3VuZW5cIDsKK+epuuirliA+IGt1dXJvblwgOwor56m66KuHID4ga3V1ZGFuXCA7CivmvIHmuK8gPiBneW9rb3VcIDsKK+a4heiypyA+IHNlaWhpblwgOwor5omN55+lID4gc2FpY2hpXCA7CivonYvntJkgPiByb3VzaGlcIDsKK+aEm+mzpSA+IGFpY2hvdVwgOwor6Juu6KGMID4gYmFua291XCA7CivmvI/msLQgPiByb3VzdWlcIDsKK+WVhuitsCA+IHNob3VnaVwgOwor6KCx5oORID4ga293YWt1XCA7CivmiK/nrJEgPiBnaXNob3VcIDsKK+eti+eCjiA+IGtpbicnZW5cIDsKK+aOkuS+vyA+IGhhaWJlblwgOwor5Zu95Za2ID4ga29rdWVpXCA7Civlm5vlp5MgPiBzaGlzZWlcIDsKK+aLruaNriA+IGtpa2t5b1wgOwor5oqr5q20ID4gaGlyZWtpXCA7CivmjZXlm5ogPiBob3NodXVcIDsKK+WbnuWkqSA+IGthaXRlblwgOwor5oyv5a2QID4gZnVyaWtvXCA7CivlmbjmlbAgPiB0b25zdXVcIDsKK+a8geazlSA+IGd5b2hvdVwgOwor6KOF5LiBID4gc291dGVpXCA7Civlm6PloYogPiBkYW5rYWlcIDsKK+aNp+WRiCA+IGhvdXRlaVwgOwor5rib6KGwID4gZ2Vuc3VpXCA7CivlnLDku6MgPiBjaGlkYWlcIDsKK+aIpuerryA+IHNlbnRhblwgOwor5Zar57eKID4ga2lra2luXCA7Civlm5vlo7AgPiBzaGlzZWlcIDsKK+aJi+eZliA+IHRla3VzZVwgOwor5ouu5oqXID4ga2lra291XCA7CivpjK/oqqQgPiBzYWt1Z29cIDsKK+eojumWoiA+IHplaWthblwgOwor5ryB5rCRID4gZ3lvbWluXCA7CivlnKjkvY8gPiB6YWlqdXVcIDsKK+iaiumJpCA+IGthYmFyaVwgOwor5oyH5by+ID4gc2hpZGFuXCA7Civlm57loLEgPiBrYWlob3VcIDsKK+WcsOS4iiA+IGNoaWpvdVwgOwor5Zyo5Lu7ID4gemFpbmluXCA7CivlnKfkvI8gPiBhcHB1a3VcIDsKK+a9ruW5siA+IHNoaW9oaVwgOwor5rW36a2aID4ga2FpZ3lvXCA7Civll5znnKAgPiBzaGltaW5cIDsKK+eul+aVsCA+IHNhbnN1dVwgOwor5Zyf5L+1ID4gZG9oeW91XCA7CivlnJLlhoUgPiBlbicnbmFpXCA7Civlm6PlnLAgPiBkYW5jaGlcIDsKK+Wcn+S/lyA+IGRvem9rdVwgOwor6JqK6YedID4ga2FiYXJpXCA7CivooYblr6EgPiBzaHV1a2FcIDsKK+aKnOatryA+IGJhc3NoaVwgOwor5r2u5beuID4gY2hvdXNhXCA7Civmv4PljpogPiBub3Vrb3VcIDsKK+a8ouabuCA+IGthbnNob1wgOwor5omT55CDID4gZGFreXV1XCA7CivpvLvpj6EgPiBiaWt5b3VcIDsKK+espueJkiA+IGZ1Y2hvdVwgOwor5Zyo5LiWID4gemFpc2VpXCA7CivmjojkubMgPiBqdW55dXVcIDsKK+a1t+mpoiA+IGFzaGlrYVwgOwor5ryr5paHID4gbWFuYnVuXCA7CivooajlnJ8gPiBoeW91ZG9cIDsKK+aIkOeulyA+IHNlaXNhblwgOwor5Zu95YuZID4ga29rdW11XCA7Civmtojpn7MgPiBzaG91b25cIDsKK+ewoeWNmCA+IGthbnRhblwgOwor5oiR562JID4gd2FyZXJhXCA7CivmjL3lm54gPiBiYW5rYWlcIDsKK+aKmOaquyA+IHNla2thblwgOwor56m66JmaID4ga3V1a3lvXCA7Civmv4Dli5kgPiBnZWtpbXVcIDsKK+Wcn+S4rSA+IGRvY2h1dVwgOwor5omA55SoID4gc2hveW91XCA7CivmiYDnlKMgPiBzaG9zYW5cIDsKK+a8ouaWuSA+IGthbnBvdVwgOwor5re66KaLID4gc2Vua2VuXCA7Civono3ngrkgPiB5dXV0ZW5cIDsKK+WbveWIqSA+IGtva3VyaVwgOwor5ryi5paHID4ga2FuYnVuXCA7CivmiYvnjokgPiB0ZWRhbWFcIDsKK+a7lOa7lCA+IHRvdXRvdVwgOwor5Zaq56ugID4gbW9zaG91XCA7CivmiJDnqbogPiBzZWlrdXVcIDsKK+Wah+aAkiA+IGtha3Vkb1wgOwor5Zuj5ZOhID4gZGFuJydpblwgOwor562G5rOVID4gaGlwcG91XCA7CivmtbfpoqggPiBrYWlmdXVcIDsKK+aJi+eLrSA+IHRlemVtYVwgOwor5Zu95YWJID4ga29ra291XCA7CivmjIflsI4gPiBzaGlkb3VcIDsKK+m8vumFlCA+IGthbnN1aVwgOwor6YqA6bGXID4gZ2lucmluXCA7CivmhJ/pm7sgPiBrYW5kZW5cIDsKK+WVk+iSmSA+IGtlaW1vdVwgOwor6KGG5aSaID4gc2h1dXRhXCA7CivnqI7ph5EgPiB6ZWlraW5cIDsKK+aMh+WumiA+IHNoaXRlaVwgOwor5rip6ImvID4gb25yeW91XCA7Civllqrnpa0gPiBzb3VzYWlcIDsKK+aHkOiDjiA+IGthaXRhaVwgOwor5rW36Z2iID4ga2FpbWVuXCA7Civpu5LptZAgPiBrdXJvamlcIDsKK+e0r+OAhSA+IHJ1aXJ1aVwgOwor5ryr5omNID4gbWFuemFpXCA7CivooI/luqcgPiBrYW5pemFcIDsKK+ihsOWLoiA+IHN1aXNlaVwgOwor5ryB5p2RID4gZ3lvc29uXCA7Civmtbfpm6MgPiBrYWluYW5cIDsKK+WgguOAhSA+IGRvdWRvdVwgOwor5ZuC5ZuCID4gZ291Z291XCA7CivmvIHmnJ8gPiByeW91a2lcIDsKK+epuuiNtyA+IGthcmFuaVwgOwor5oqx5pOBID4gaG91eW91XCA7Civpi7PosqggPiBjaHV1a2FcIDsKK+ihgOWhiiA+IGtla2thaVwgOwor5Zub5Y2DID4geW9uc2VuXCA7Civlm5vljYEgPiB5b25qdXVcIDsKK+ewoeS+vyA+IGthbmJlblwgOwor5Zu95LyaID4ga29ra2FpXCA7CivnrqHlvKYgPiBrYW5nZW5cIDsKK+a1t+mYsiA+IGthaWJvdVwgOwor5ZSQ6KmpID4gdG91c2hpXCA7CivpvLvovKogPiBoYW5hd2FcIDsKK+WbveS6pCA+IGtva2tvdVwgOwor5Zu95LqLID4ga29rdWppXCA7CivmtbfplqIgPiBrYWlrYW5cIDsKK+aKleabuCA+IHRvdXNob1wgOwor5rW36ZaAID4ga2FpbW9uXCA7Civlm7PkvZMgPiB6dXV0YWlcIDsKK+euseWxiyA+IGhha295YVwgOwor5ruF5rOVID4gbWVwcG91XCA7Civlm5vliIYgPiBzaGlidW5cIDsKK+aKteaKlyA+IHRlaWtvdVwgOwor6ZG95a2UID4gc2Fua291XCA7Civmv4HkuJYgPiBkYWt1c2VcIDsKK+eCueOAhSA+IHRlbnRlblwgOwor6b2y6J2VID4gdXNob2t1XCA7CivmiYvmvIkgPiB0ZXN1a2lcIDsKK+ihqOWFtyA+IGh5b3VndVwgOwor6Y2b57e0ID4gdGFucmVuXCA7Civon7nluqcgPiBrYW5pemFcIDsKK+iar+iakyA+IG1pbWl6dVwgOwor5rq25rayID4geW91ZWtpXCA7CivmvIHmkoggPiBneW9yb3VcIDsKK+evgOWljyA+IHNlc3NvdVwgOwor5ZWG6IiXID4gc2hvdWhvXCA7Civpi7zoo70gPiBrb3VzZWlcIDsKK+aLkOW4ryA+IGthaXRhaVwgOwor5rib6ICXID4gZ2VubW91XCA7Civnq6/niakgPiBoYW1vbm9cIDsKK+aEn+mKmCA+IGthbm1laVwgOwor5oim54qvID4gc2VucGFuXCA7CivmirHmh5AgPiBob3VrYWlcIDsKK+ihjOWPuCA+IGd5b3VqaVwgOwor5ouF5b2TID4gdGFudG91XCA7Civnr4nln44gPiB0c3Vpa2lcIDsKK+eqkue0oCA+IGNoaXNzb1wgOwor5Zuj5L2TID4gZGFudGFpXCA7Civmi6DlroggPiBreW9zaHVcIDsKK+mLreinkiA+IGVpa2FrdVwgOwor56eY6YyyID4gaGlyb2t1XCA7Civmi5vlrrQgPiBzaG91ZW5cIDsKK+engemXmCA+IHNoaXRvdVwgOwor6KGw5LqhID4gc3VpYm91XCA7Civnq5znjosgPiByeXV1b3VcIDsKK+err+eEtiA+IHRhbnplblwgOwor5Zuj5LqkID4gZGFua291XCA7CivlmbTlsIQgPiBmdW5zaGFcIDsKK+ihjOWLlSA+IGtvdWRvdVwgOwor5ZWP572qID4gbW9uemFpXCA7CivmiYvms5UgPiBzaHVob3VcIDsKK+m7m+mdkiA+IHRhaXNlaVwgOwor5ouZ5a6IID4gc2Vzc2h1XCA7CivoobDkuJYgPiBzdWlzZWlcIDsKK+ibh+iFuSA+IGphYmFyYVwgOwor562J5pa5ID4gdG91aG91XCA7Civlkb3poYwgPiBtZWlkYWlcIDsKK+a9nOWcqCA+IHNlbnphaVwgOwor5oWj6KGMID4ga2Fua291XCA7CivmiYvmsLQgPiB0ZW1penVcIDsKK+aKteW9kyA+IHRlaXRvdVwgOwor5oSb6YO3ID4gYWlreW91XCA7CivnrJHmsJcgPiBzaG91a2lcIDsKK+a6nea4oCA+IGtvdWt5b1wgOwor5oqX5ouSID4ga291a3lvXCA7CivmiKbngb0gPiBzZW5zYWlcIDsKK+mKmOmKmCA+IG1laW1laVwgOwor5omL5q+sID4gdGVtYXJpXCA7CivmipjmipggPiBvcmlvcmlcIDsKK+a5r+eOiSA+IHl1ZGFtYVwgOwor5oyr5YK3ID4gemFzaG91XCA7CivnrpflrpogPiBzYW50ZWlcIDsKK+ertua8lCA+IGt5b3VlblwgOwor5oyZ5YuVID4ga3lvZG91XCA7CivmtYHpn7MgPiByeXV1b25cIDsKK+aJi+autSA+IHNodWRhblwgOwor5oiQ54qsID4gc2Vpa2VuXCA7Civpjq7ngasgPiBjaGlua2FcIDsKK+aKl+aIpiA+IGtvdXNlblwgOwor6buS6ZuyID4ga29rdXVuXCA7CivmipXmiYsgPiB0b3VzaHVcIDsKK+a6gOeCuSA+IG1hbnRlblwgOwor6KGM5YSAID4gZ3lvdWdpXCA7CivpjbXnm6QgPiBrZW5iYW5cIDsKK+a1gemcsiA+IHJ5dXVyb1wgOwor5oqK5o2JID4gaGFzb2t1XCA7CivmjIflkJEgPiBzaGlrb3VcIDsKK+ihgOWIpCA+IGtlcHBhblwgOwor5oyH5ZCNID4gc2hpbWVpXCA7Civol7vpoZ4gPiBzb3VydWlcIDsKK+a1gemboiA+IHJ5dXVyaVwgOwor6YqY6YWSID4gbWVpc2h1XCA7CivmtbfpgZMgPiBrYWlkb3VcIDsKK+m8oOiziiA+IHNvem9rdVwgOwor5oyZ5YW1ID4ga3lvaGVpXCA7CivmuKnnqoEgPiBvbmRvcnVcIDsKK+aJi+apnyA+IHRlYmF0YVwgOwor6ZGR5a6aID4ga2FudGVpXCA7CivmjJnlhZogPiBreW90b3VcIDsKK+aLt+WVjyA+IGdvdW1vblwgOwor5oyH5Y2XID4gc2hpbmFuXCA7Civono3mnJcgPiB5dXVyb3VcIDsKK+m6uumhniA+IG1lbnJ1aVwgOwor5rib566XID4gZ2VuemFuXCA7CivpioXpiq0gPiBkb3VzZW5cIDsKK+ertuazsyA+IGt5b3VlaVwgOwor6KGM5L2/ID4ga291c2hpXCA7CivmiLjmr44gPiBrb2dvdG9cIDsKK+mKhemJsSA+IGRvdWtvdVwgOwor5rib562JID4gZ2VudG91XCA7CivmiYvmpa0gPiB0ZXdhemFcIDsKK+a8uOWilyA+IHplbnpvdVwgOwor56aP6Z+zID4gZnVrdWluXCA7CivmupDms4kgPiBnZW5zZW5cIDsKK+a1t+i7jSA+IGthaWd1blwgOwor5raI6LK7ID4gc2hvdWhpXCA7CivmuoDmuoAgPiBtYW5tYW5cIDsKK+a1qumAnyA+IG5hbml3YVwgOwor6YqA6YmxID4gZ2lua291XCA7CivooYzkurogPiBrb3VqaW5cIDsKK+WVj+etlCA+IG1vbmRvdVwgOwor5ZC56bO0ID4gc3VpbWVpXCA7CivnrYbmiY0gPiBoaXNzYWlcIDsKK+ihjOS6iyA+IGd5b3VqaVwgOwor6YqA6Yi0ID4gZ2lucmVpXCA7CivmuIXntJQgPiBzZWlqdW5cIDsKK+ethuaIpiA+IGhpc3NlblwgOwor56e76KitID4gaXNldHN1XCA7CivomZroqpUgPiBreW90YW5cIDsKK+aIpuazlSA+IHNlbnBvdVwgOwor5reL6I+MID4gcmlua2luXCA7CivmurbmnZAgPiB5b3V6YWlcIDsKK+a4m+eojiA+IGdlbnplaVwgOwor5oqX5byBID4ga291YmVuXCA7CivnrZblv5wgPiBzYWt1b3VcIDsKK+epuuepuiA+IGt1dWt1dVwgOwor56u25q2pID4ga3lvdWhvXCA7CivmuIXnsosgPiBzZWlzdWlcIDsKK+engemCuCA+IHNoaXRlaVwgOwor6bqq6aGeID4gbWVucnVpXCA7CivmuKnnn7MgPiBvbmpha3VcIDsKK+iZmuiogCA+IGt5b2dlblwgOwor6buS6Y21ID4ga29ra2VuXCA7CivmiYvmn4QgPiB0ZWdhcmFcIDsKK+engemBuCA+IHNoaXNlblwgOwor5omL5p63ID4gdGVrYXNlXCA7Civmt7fnt5ogPiBrb25zZW5cIDsKK+engemBkyA+IHNoaWRvdVwgOwor562G5oSPID4gaGl0c3VpXCA7Civnr4DliLYgPiBzZXNzZWlcIDsKK+err+atoyA+IHRhbnNlaVwgOwor5omL5pytID4gdGVmdWRhXCA7CivmuIXnrpcgPiBzZWlzYW5cIDsKK+etlOW8gSA+IHRvdWJlblwgOwor5omB5qGDID4gaGVudG91XCA7CivmvZzlh70gPiBzZW5rYW5cIDsKK+a0l+mhlCA+IHNlbmdhblwgOwor5oud5ZWTID4gaGFpa2VpXCA7CivmiKbmrbsgPiBzZW5zaGlcIDsKK+aJi+abuCA+IHNodXNob1wgOwor5re357ShID4ga29uYm91XCA7Civlk4Doqr8gPiBhaWNob3VcIDsKK+a1nOi+uiA+IGhhbWFiZVwgOwor5oSf6KydID4ga2Fuc2hhXCA7Civpu5LpiZsgPiBrb2t1ZW5cIDsKK+aJjeaZuiA+IHNhaWNoaVwgOwor5ZOB6KmeID4gaGluc2hpXCA7CivmuoDmsLQgPiBtYW5zdWlcIDsKK+aIuOajmiA+IHRvZGFuYVwgOwor5rSL6aSoID4geW91a2FuXCA7CivpvI7oq4cgPiB0ZWlkYW5cIDsKK+a5v+awlyA+IHNoaWtrZVwgOwor6KCV5YuVID4gemVuZG91XCA7CivmiJHmtYEgPiBnYXJ5dXVcIDsKK+WVhuenkSA+IHNob3VrYVwgOwor5oud5ZG9ID4gaGFpbWVpXCA7CivmgqrpoqggPiBha3VmdXVcIDsKK+a0l+mdoiA+IHNlbm1lblwgOwor5oud5ZGIID4gaGFpdGVpXCA7CivmvbDkubEgPiBrYWlyYW5cIDsKK+a0i+miqCA+IHlvdWZ1dVwgOwor56m656CyID4ga3V1aG91XCA7CivmvZzlg48gPiBzZW56b3VcIDsKK+aEm+iqrSA+IGFpZG9rdVwgOwor5omL5peXID4gdGViYXRhXCA7CivmhJvoqqYgPiBhaXNob3VcIDsKK+aJgOacmyA+IHNob21vdVwgOwor5omA5pyJID4gc2hveXV1XCA7Civpu5LphZIgPiBrdXJva2lcIDsKK+aJk+aSsiA+IGRhYm9rdVwgOwor5oyH5LukID4gc2hpcmVpXCA7CivnqoPnm5cgPiBzZXR0b3VcIDsKK+mKgOi8qiA+IGdpbnJpblwgOwor56aF6ZaAID4gemVubW9uXCA7CivmiZPmkoMgPiBkYWdla2lcIDsKK+evgOWAuSA+IHNla2tlblwgOwor5om/5byVID4gc2hvdWluXCA7Civnr4TkvosgPiBoYW5yZWlcIDsKK+m7hOmKhSA+IGtvdWRvdVwgOwor5oSP6K2YID4gaXNoaWtpXCA7CivmtJ7ploAgPiBkb3Vtb25cIDsKK+elnummrCA+IHNoaW5tZVwgOwor5oqV5bCEID4gdG91c2hhXCA7Civnrp3lj6MgPiBrYW5rb3VcIDsKK+WWq+awtCA+IGtpc3N1aVwgOwor5ZC46aOyID4ga3l1dWluXCA7Civnqbrnm64gPiBzb3JhbWVcIDsKK+WTgeihjCA+IGhpbmtvdVwgOwor5rmv5rC0ID4geXVtaXp1XCA7CivmiYHml4EgPiBoZW5ib3VcIDsKK+aCqumciiA+IGFrdXJlaVwgOwor6buE6YeRID4ga29nYW5lXCA7CivmiYvmkbogPiB0ZXN1cmlcIDsKK+eogOiWhCA+IGtpaGFrdVwgOwor56uL5rOVID4gcmlwcG91XCA7CivmjIHkuYUgPiBqaWt5dXVcIDsKK+evgOS8miA+IHNlY2hpZVwgOwor5oiR5qyyID4gZ2F5b2t1XCA7Civmua/mrr8gPiB5dWRvbm9cIDsKK+err+agqiA+IGhha2FidVwgOwor56+A5LuLID4gc2Vra2FpXCA7Civnsr7jgIUgPiBzZWl6ZWlcIDsKK+aLkOWPliA+IGthaXNodVwgOwor56eB6LKhID4gc2hpemFpXCA7CivlkLjpn7MgPiBreXV1b25cIDsKK+euoeWItiA+IGthbnNlaVwgOwor5rmn5rC0ID4geXV1c3VpXCA7CivonYvmooUgPiByb3ViYWlcIDsKK+a4mueVlCA+IHNob2hhblwgOwor5Za25qWtID4gZWlneW91XCA7CivmuJvnlKMgPiBnZW5zYW5cIDsKK+mLvOe3miA+IGtvdXNlblwgOwor5rqW5pifID4ganVuc2VpXCA7CivlkIjptKggPiBhaWdhbW9cIDsKK+aJi+aMhyA+IHNodXNoaVwgOwor6buE6YGTID4ga291ZG91XCA7CivmiYvmi60gPiB0ZWZ1a2lcIDsKK+ertuaYoCA+IGt5b3VlaVwgOwor5ZC56ZuqID4gZnVidWtpXCA7CivmurrmhJsgPiBkZWtpYWlcIDsKK+a5r+anvSA+IHl1YnVuZVwgOwor562L5a2QID4gc3VqaWtvXCA7CivmhIHoqLQgPiBzaHV1c29cIDsKK+iWq+mmmSA+IGt1bmtvdVwgOwor6YmE6Yu8ID4gdGVra291XCA7Civnp4Hoq5YgPiBzaGlyb25cIDsKK+a8ouWQjSA+IGthbm1laVwgOwor5rmW5rK8ID4ga29zaG91XCA7CivompXntJkgPiBzYW5zaGlcIDsKK+ialeezuCA+IHNhbnNoaVwgOwor5oKM6aCGID4gdGVpanVuXCA7CivmtJfpjKwgPiBzZW5yZW5cIDsKK+a6gOadryA+IG1hbnBhaVwgOwor6Jas6aSMID4geWFrdWppXCA7CivpjbzmsrsgPiBzaGluamlcIDsKK+mJhOmJsSA+IHRla2tvdVwgOwor56aP6YGLID4gZnVrdXVuXCA7Civmirzlj44gPiBvdXNodXVcIDsKK+err+aVtCA+IHRhbnNlaVwgOwor6Jar6aKoID4ga3VucHV1XCA7CivnqbbnkIYgPiBreXV1cmlcIDsKK+mMsueUuyA+IHJva3VnYVwgOwor6YqT6KGhID4gc2Vua291XCA7CivmsrPpub8gPiBrYWppa2FcIDsKK+mLvOeuoSA+IGtvdWthblwgOwor6by757+8ID4gYml5b2t1XCA7CivmvIblmaggPiBzaGlra2lcIDsKK+emgemFkiA+IGtpbnNodVwgOwor6Jep6YK4ID4gaGFudGVpXCA7CivmiKbmlZcgPiBzZW5wYWlcIDsKK+engeimiyA+IHNoaWtlblwgOwor5rWE6LKhID4gam91emFpXCA7CivomY7okL0gPiBtb2dhcmlcIDsKK+a1t+iYvyA+IGZ1bm9yaVwgOwor5omA5oeQID4gc2hva2FpXCA7CivmuKnngbggPiBvbmt5dXVcIDsKK+a1t+iXuyA+IGthaXNvdVwgOwor5omH5oOFID4gc2Vuam91XCA7Civnp4Hoo70gPiBzaGlzZWlcIDsKK+aCqumKrSA+IGFrdXNlblwgOwor56S+6aKoID4gc2hhZnV1XCA7CivlkI3pppkgPiBtZWlrb3VcIDsKK+WSjOiosyA+IHdheWFrdVwgOwor6YqF6KO9ID4gZG91c2VpXCA7Civmupbmi6AgPiBqdW5reW9cIDsKK+a2meiFuiA+IHJ1aXNlblwgOwor562J5aSWID4gdG91Z2FpXCA7CivmirHljbUgPiBob3VyYW5cIDsKK+aJleW6lSA+IGZ1dHRlaVwgOwor5omA5oSfID4gc2hva2FuXCA7CivmtIvpioAgPiB5b3VnaW5cIDsKK+enmOiWrCA+IGhpeWFrdVwgOwor6Y6u5pKrID4gY2hpbmJ1XCA7CivnpL7poK0gPiBzaGF0b3VcIDsKK+engeihjCA+IHNoaWtvdVwgOwor5Zaq5pyNID4gbW9mdWt1XCA7CivnrpfkvZMgPiBzYW50YWlcIDsKK+WSjOimqiA+IHdhc2hpblwgOwor5omL5b25ID4gdGV5YWt1XCA7CivpioDoo70gPiBnaW5zZWlcIDsKK+m7meiosSA+IG1va2t5b1wgOwor5omL5b2iID4gdGVnYXRhXCA7Civnq7bmioAgPiBreW91Z2lcIDsKK+ialeeoriA+IHNhbnNodVwgOwor5omT5bitID4gZGFzZWtpXCA7CivmuK/mub4gPiBrb3V3YW5cIDsKK+iWq+mZtiA+IGt1bnRvdVwgOwor5omL5byVID4gdGViaWtpXCA7CivmuL7msowgPiBrb250b25cIDsKK+a4m+eCuSA+IGdlbnRlblwgOwor5omH5b2iID4gc2Vua2VpXCA7CivmvJTliocgPiBlbmdla2lcIDsKK+aCqumFkiA+IGFrdXNodVwgOwor5omA5oCdID4gc2hvc2hpXCA7CivnpoHovLggPiBraW4nJ3l1XCA7Civmta7oloQgPiBmdWhha3VcIDsKK+WQjOmhniA+IGRvdXJ1aVwgOwor6YqA6KGMID4gZ2lua291XCA7CivmiY3lubkgPiBzYWlrYW5cIDsKK+a0i+mFkiA+IHlvdXNodVwgOwor6b6N546LID4gcnl1dW91XCA7Civmg4XotqMgPiBqb3VzaHVcIDsKK+aIkOaWhyA+IHNlaWJ1blwgOwor5oe45qGIID4ga2VuJydhblwgOwor5omL5bizID4gdGVjaG91XCA7CivmiJDmlZcgPiBzZWliYWlcIDsKK+iZmuiBniA+IGt5b2J1blwgOwor5ouF5L2TID4gdGFudGFpXCA7CivmiYvluJYgPiB0ZWNob3VcIDsKK+mIjemWkyA+IG5vcm9tYVwgOwor6Yed6a2aID4gaGFyaXlvXCA7CivmiYvlt6UgPiBzaHVrb3VcIDsKK+azoumWkyA+IG5hbWltYVwgOwor6byT6IacID4ga29tYWt1XCA7CivmhqvnhLYgPiBiaW56ZW5cIDsKK+aCqumBkyA+IGFrdWRvdVwgOwor5rWF6KaLID4gc2Vua2VuXCA7Civph47ps6UgPiB5YWNob3VcIDsKK+azoumVtyA+IGhhY2hvdVwgOwor6byT6IW5ID4ga29mdWt1XCA7CivpvJPohbggPiBrb2Nob3VcIDsKK+ayu+mokyA+IGNoaWtlblwgOwor5rq25bKpID4geW91Z2FuXCA7CivmtbfojYkgPiBrYWlzb3VcIDsKK+azlemboyA+IGhvdW5hblwgOwor5ZGz6KqtID4gbWlkb2t1XCA7CivmtJfou4ogPiBzZW5zaGFcIDsKK+WRiui+niA+IGtva3VqaVwgOwor5ZCE6aCFID4ga2Fra291XCA7CivmsrjpqLAgPiBmdXR0b3VcIDsKK+a4qea1tyA+IGF0c3VtaVwgOwor5ZaE5qWtID4gemVuZ291XCA7CivmiYHlubMgPiBoZW5wZWlcIDsKK+eri+aWuSA+IHJpcHBvdVwgOwor56yg5a2QID4ga2FzYWdvXCA7CivmtLvoqIggPiBrYWtrZWlcIDsKK+aKleWQiCA+IHRvdWdvdVwgOwor5oak54S2ID4gZnVuemVuXCA7Civlj7fppKggPiBnb3VrYW5cIDsKK+a7nuWcqCA+IHRhaXphaVwgOwor5rih5riJID4gdG9zaG91XCA7CivmiYDluK8gPiBzaG90YWlcIDsKK+aKl+WOnyA+IGtvdWdlblwgOwor5rim5rWBID4ga2FyeXV1XCA7CivmvKLkurogPiBrYW5qaW5cIDsKK+a8geWKtCA+IGd5b3JvdVwgOwor5rWq6I+vID4gbmFuaXdhXCA7CivmipjljYogPiBzZXBwYW5cIDsKK+mHkemtmiA+IGtpbmd5b1wgOwor5ZiG5aOwID4gdGFuc2VpXCA7CivpipjojLYgPiBtZWljaGFcIDsKK+ensOe+jiA+IHNob3ViaVwgOwor56eB6JS1ID4gc2hpem91XCA7CivlkbPoppogPiBtaWtha3VcIDsKK+m+leeBryA+IGdhbmRvdVwgOwor6bu06I+MID4gYmFpa2luXCA7CivmipzliaMgPiBiYWtrZW5cIDsKK+WWhOaguSA+IHplbmtvblwgOwor5ZCN6ZaAID4gbWVpbW9uXCA7CivnqbrmuK8gPiBrdXVrb3VcIDsKK+WQjOmWgCA+IGRvdW1vblwgOwor6Juu5rCRID4gYmFubWluXCA7CivmipzliIAgPiBiYXR0b3VcIDsKK+WPsOmiqCA+IHRhaWZ1dVwgOwor5oWn55y8ID4ga2VpZ2FuXCA7CivmiY3lrZAgPiBzYWlzaGlcIDsKK+mMmOeKtiA+IHN1aWpvdVwgOwor5rq25aqSID4geW91YmFpXCA7CivnpoXorbIgPiB6ZW5qb3VcIDsKK+ayv+mdqSA+IGVua2FrdVwgOwor5rWq6IqxID4gbmFuaXdhXCA7Civnq6/lvbkgPiBoYXlha3VcIDsKK+WPsOmhlCA+IGRhaWdhblwgOwor5ZGJ6LaKID4gZ29ldHN1XCA7Civlj7DpoK0gPiB0YWl0b3VcIDsKK+a4i+a7niA+IGp1dXRhaVwgOwor5re354S2ID4ga29uemVuXCA7CivnrYvlkIggPiBzdWppYWlcIDsKK+a4m+azlSA+IGdlbnBvdVwgOwor5oqV5Ye9ID4gdG91a2FuXCA7CivlloTmm7ggPiB6ZW5zaG9cIDsKK+epuua0niA+IGt1dWRvdVwgOwor6YiR6YeRID4gYmFua2luXCA7CivmupDlubMgPiBnZW5wZWlcIDsKK+WQjemRkSA+IG1laWthblwgOwor562J5Y+3ID4gdG91Z291XCA7Civll6PlrZAgPiBzaGlzaGlcIDsKK+mHjumnkiA+IG5vZ29tYVwgOwor5rWu6IWrID4gbXVrdW1pXCA7CivmuJvmsLQgPiBnZW5zdWlcIDsKK+m6u+ijjyA+IGFzYXVyYVwgOwor56iu55eYID4gc2h1dG91XCA7CivpiI3ph40gPiBkb25qdXVcIDsKK+WPqemgrSA+IGtvdXRvdVwgOwor5oay5rOVID4ga2VucG91XCA7CivmiYDlrpogPiBzaG90ZWlcIDsKK+mHmOmgrSA+IHRlaXRvdVwgOwor56aA6KuLID4gcmluc2VpXCA7CivmtpnnrqEgPiBydWlrYW5cIDsKK+aJgOWtmCA+IHNob3pvblwgOwor5rOl6YWUID4gZGVpc3VpXCA7CivmuJvmrrogPiBnZW5zYWlcIDsKK+a4m+autSA+IGdlbnRhblwgOwor6Y6u5bqnID4gY2hpbnphXCA7CivnqYLnirYgPiBzdWlqb3VcIDsKK+WPo+mgrSA+IGtvdXRvdVwgOwor5riF5riFID4gc2Vpc2VpXCA7CivlkIjpjbUgPiBhaWthZ2lcIDsKK+ethuWLoiA+IGhpc3NlaVwgOwor56uL5oayID4gcmlra2VuXCA7CivlloTmlL8gPiB6ZW5zZWlcIDsKK+a0nuimiyA+IGRvdWtlblwgOwor56S86YeRID4gcmVpa2luXCA7Civmh5Dmn5QgPiBrYWlqdXVcIDsKK+WPjemosCA+IGhhbnRvdVwgOwor6Jia6IuUID4gc2VudGFpXCA7CivmuoDlubIgPiBtYW5rYW5cIDsKK+emveiIjiA+IGtpbnNoYVwgOwor5ZGK6KutID4ga29rdXl1XCA7CivmuIXmtYQgPiBzZWlqb3VcIDsKK+etieWIhiA+IHRvdWJ1blwgOwor56m65qyEID4ga3V1cmFuXCA7CivmsqHpoK0gPiBib3R0b3VcIDsKK+aKl+S9kyA+IGtvdXRhaVwgOwor5Y+l6ZuGID4ga3VzaHV1XCA7CivmiYvloakgPiB0ZXNoaW9cIDsKK+a5v+W4gyA+IHNoaXBwdVwgOwor56uv5bGxID4gaGF5YW1hXCA7Civmg6Poj5wgPiBzb3V6YWlcIDsKK+aIkOW9oiA+IHNlaWtlaVwgOwor56uc5bqnID4gcnl1dXphXCA7CivpiYToo70gPiB0ZXNzZWlcIDsKK+WRiuiotCA+IGtva3Vzb1wgOwor5rW357a/ID4ga2FpbWVuXCA7Civll5zlpb0gPiBzaGlrb3VcIDsKK+WPl+mgmCA+IGp1cnlvdVwgOwor562G5YaZID4gaGlzc2hhXCA7CivmuIfmsLQgPiBrYXNzdWlcIDsKK+a4iOawkSA+IHNhaW1pblwgOwor56aB6KGbID4ga2luJydlaVwgOwor5oqX5LqJID4ga291c291XCA7CivmuIXmsLQgPiBzZWlzdWlcIDsKK+WQiOmHkSA+IGdvdWtpblwgOwor5re35reGID4ga29ua291XCA7Civlk4HnrYkgPiBoaW50b3VcIDsKK+aJv+WFgSA+IHNob3VpblwgOwor5oKq6KiAID4gYWt1Z2VuXCA7CivnpLzpgYcgPiByZWlndXVcIDsKK+WWnOaCpiA+IGtpZXRzdVwgOwor56uL5b+XID4gcmlzc2hpXCA7CivpvJPnrJsgPiBrb3Rla2lcIDsKK+aIkOW5tCA+IHNlaW5lblwgOwor56eB6ICDID4gc2hpa291XCA7CivmhqTmrbsgPiBmdW5zaGlcIDsKK+m6u+iWrCA+IG1heWFrdVwgOwor5riH5q27ID4ga2Fzc2hpXCA7Civnq6/lrZAgPiB0YW5zaGlcIDsKK+aHh+acmyA+IGtvbm1vdVwgOwor6Jma56S8ID4ga3lvcmVpXCA7Civono3lkIggPiB5dXVnb3VcIDsKK+WQjOmCpiA+IGRvdWhvdVwgOwor5rKI6aaZID4gamlua291XCA7Civmh4fmm7ggPiBrb25zaG9cIDsKK+m7hOiRiSA+IGtvdXlvdVwgOwor562J5YCkID4gdG91Y2hpXCA7Civmub7lsrggPiB3YW5nYW5cIDsKK+a6gOWxsSA+IG1hbnphblwgOwor6J6i5YWJID4ga2Vpa291XCA7Civlj4zpoK0gPiBzb3V0b3VcIDsKK+WVhuapnyA+IHNob3VraVwgOwor5omN5Zm4ID4gc2FpdG9uXCA7CivlkIzpgZMgPiBkb3Vkb3VcIDsKK+eosueGsSA+IGltb2NoaVwgOwor6Y6u5a6IID4gY2hpbmp1XCA7Civmu7TkuIsgPiB0ZWtpa2FcIDsKK+WTgeeoriA+IGhpbnNodVwgOwor6buE6I+KID4ga2lnaWt1XCA7CivmioDlgIYgPiBnaXJ5b3VcIDsKK+aEmuetliA+IGd1c2FrdVwgOwor5re35rKMID4ga29udG9uXCA7CivlkITpg6ggPiBrYWt1YnVcIDsKK+azoui3ryA+IG5hbWlqaVwgOwor5Y+N6Z2iID4gaGFubWVuXCA7CivlloTmiKYgPiB6ZW5zZW5cIDsKK+a0i+ijhSA+IHlvdXNvdVwgOwor5rSL6KOBID4geW91c2FpXCA7CivmiYDlnKggPiBzaG96YWlcIDsKK+aCquihgCA+IG9rZXRzdVwgOwor56We6KmxID4gc2hpbndhXCA7CivmhajnhLYgPiBnYWl6ZW5cIDsKK+ertuWjsiA+IGtlaWJhaVwgOwor6Je76I2JID4gbW9ndXNhXCA7Civnp7vnnYAgPiBpY2hha3VcIDsKK+elneipniA+IG5vcml0b1wgOwor5rSL6KGMID4geW91a291XCA7CivlkIzovKkgPiBkb3VoYWlcIDsKK+aApemgiCA+IGt5dXVzdVwgOwor56eY562WID4gaGlzYWt1XCA7Civmtojno6ggPiBzaG91bWFcIDsKK+m7meiAgyA+IG1va2tvdVwgOwor5oaO5rCXID4gbmlrdWdlXCA7CivlkIzou4ogPiBkb3VzaGFcIDsKK+a2iOejgSA+IHNob3VqaVwgOwor5ZSx5q2MID4gc2hvdWthXCA7CivmhJvnp7AgPiBhaXNob3VcIDsKK+a5luW/gyA+IGtvc2hpblwgOwor5reh5rehID4gdGFudGFuXCA7CivlloTmhJ8gPiB6ZW5rYW5cIDsKK+aymemWgCA+IHNoYW1vblwgOwor56iu54GrID4gdGFuZWJpXCA7CivpioXnt5ogPiBkb3VzZW5cIDsKK+aAqOmciiA+IG9ucnlvdVwgOwor5omL5ZOBID4gdGVqaW5hXCA7CivmiJHlrrYgPiB3YWdheWFcIDsKK+epuuabuSA+IGt1dXNvdVwgOwor5oim5aOrID4gc2Vuc2hpXCA7Civlj43plpMgPiBoYW5rYW5cIDsKK+aJjeWQjSA+IHNhaW1laVwgOwor56S+6LOTID4gc2hhaGluXCA7CivmtrLnirYgPiBla2lqb3VcIDsKK+aBtei0iCA+IGtlaXpvdVwgOwor5Y+j6YqtID4ga291c2VuXCA7CivlloTmgKcgPiB6ZW5zZWlcIDsKK+ekvOizmyA+IHJhaXNhblwgOwor5oim5aG1ID4gc2VuamluXCA7Civph5Hpiq0gPiBraW5zZW5cIDsKK+aHuOW3oyA+IGtha2VzdVwgOwor56mC5rOiID4gaG9uYW1pXCA7Civmh5DmirEgPiBrYWlob3VcIDsKK+WPgumZoiA+IHNhbicnaW5cIDsKK+mPpOWIuyA+IHJ1a29rdVwgOwor6YeR6YqAID4ga2luZ2luXCA7CivpioDntYwgPiBnaW5rZWlcIDsKK+aIpuWgtCA+IHNlbmpvdVwgOwor6YeR6YmxID4ga2lua291XCA7Civmhrbmlq0gPiBva3VkYW5cIDsKK+a4m+aVsCA+IGdlbnN1dVwgOwor5rqA5aSpID4gbWFudGVuXCA7CivlkozntrQgPiB3YXRvamlcIDsKK+a1hOe9qiA+IGpvdXphaVwgOwor5oSf55+lID4ga2FuY2hpXCA7Civms7Dopb8gPiB0YWlzZWlcIDsKK+a0i+iYrSA+IHlvdXJhblwgOwor6YqA57O4ID4gZ2luc2hpXCA7Civmt6HmsLQgPiB0YW5zdWlcIDsKK+a6tuWJpCA+IHlvdXphaVwgOwor56m65paHID4ga3V1YnVuXCA7Civpu4TogowgPiBraWhhZGFcIDsKK+aIkOWpmiA+IHNlaWtvblwgOwor5rOo6KiYID4gY2h1dWtpXCA7CivlkJ/oqaAgPiBnaW4nJ2VpXCA7Civmh7jltJYgPiBrZW5nYWlcIDsKK+mNm+aIkCA+IHRhbnNlaVwgOwor6YqA57KJID4gZ2lucHVuXCA7Civmh6blvLEgPiBkYWpha3VcIDsKK+aBreizgCA+IGt5b3VnYVwgOwor5Y216buEID4gcmFuJydvdVwgOwor5omL5YuVID4gc2h1ZG91XCA7Civol43ol7sgPiByYW5zb3VcIDsKK+aGsuaUvyA+IGtlbnNlaVwgOwor5oim5ZywID4gc2VuY2hpXCA7CivnpLzoroMgPiByYWlzYW5cIDsKK+a6gOWhgSA+IG1hbnJ1aVwgOwor5ZCI6LOHID4gZ291c2hpXCA7CivmuoDloLQgPiBtYW5qb3VcIDsKK+WPt+i7iiA+IGdvdXNoYVwgOwor5rOj6Ki0ID4ga3l1dXNvXCA7Civph43ph40gPiBqdXVqdXVcIDsKK+aBqeizniA+IG9uc2hvdVwgOwor5riF5pu4ID4gc2Vpc2hvXCA7CivmuoDloIIgPiBtYW5kb3VcIDsKK+aJh+WLlSA+IHNlbmRvdVwgOwor5omN5YiGID4gc2FpYnVuXCA7CivmuJvmkI0gPiBnZW5zb25cIDsKK+awtOm7vSA+IGFtZW5ib1wgOwor56We6JuHID4gc2hpbmphXCA7Civlk4Dnl5sgPiBhaXRzdXVcIDsKK+aIkuWjhyA+IGthaWRhblwgOwor6bqm6Iq9ID4gYmFrdWdhXCA7Civlj7Dou4ogPiBkYWlzaGFcIDsKK+WTgeeVqiA+IGhpbmJhblwgOwor6Jar6KO9ID4ga3Vuc2VpXCA7CivmiYvlhpkgPiBzaHVzaGFcIDsKK+a4heaYjiA+IHNlaW1laVwgOwor5rOV6KuWID4gaG91cm9uXCA7Civmsbrpl5ggPiBrZXR0b3VcIDsKK+azleirhyA+IGhvdWRhblwgOwor5Y6f6aGMID4gZ2VuZGFpXCA7CivmiYvlhbUgPiBzaHVoZWlcIDsKK+aJgOWKtCA+IHNob3JvdVwgOwor5Y6f6aCtID4gZ2VudG91XCA7Civph4fphY0gPiBzYWloYWlcIDsKK+WQjeirliA+IG1laXJvblwgOwor5rWF57SFID4gc2Vua291XCA7CivnrKzkuIkgPiBkYWlzYW5cIDsKK+a3u+abuCA+IHRlbnNob1wgOwor5omL5YWIID4gdGVzYWtpXCA7CivmiYvlhYMgPiB0ZW1vdG9cIDsKK+aBqeiukCA+IG9uc2h1dVwgOwor5oGp6K6OID4gb25zaHV1XCA7Civlj6PovrogPiBrb3VoZW5cIDsKK+WOn+mfsyA+IGdlbicnb25cIDsKK+aIkeWftyA+IGdhc2h1dVwgOwor56m65oy6ID4ga3V1dGVpXCA7CivmtLvnt5ogPiBrYXNzZW5cIDsKK+WQjOiqjCA+IGRvdXNoaVwgOwor5Y6a6aGUID4ga291Z2FuXCA7CivlkI3oqZ4gPiBtZWlzaGlcIDsKK+mIjeihjCA+IGRvbmtvdVwgOwor5oeH5oOFID4ga29uam91XCA7Civmt7vmma8gPiB0ZW5rZWlcIDsKK+aJi+WCtyA+IHRla2l6dVwgOwor56m65ouzID4ga3V1a2VuXCA7Civph53ot68gPiBzaGlucm9cIDsKK+espuS4gSA+IGZ1Y2hvdVwgOwor5ZCN6KiAID4gbWVpZ2VuXCA7CivlkIzoqJMgPiBkb3VrdW5cIDsKK+mHkei8qiA+IGthbmF3YVwgOwor5oiQ5Z6LID4gc2Vpa2VpXCA7CivmsqLovrogPiBzYXdhYmVcIDsKK+azleimgSA+IGhvdXlvdVwgOwor56eR55uuID4ga2Ftb2t1XCA7CivpvIjnlLIgPiBiZWtrb3VcIDsKK+icguW3oyA+IGhvdXNvdVwgOwor56m65omLID4ga2FyYXRlXCA7CivnpLzoo4UgPiByZWlzb3VcIDsKK+WQjOimliA+IGRvdXNoaVwgOwor5ZaE5bCOID4gemVuZG91XCA7CivnqbrmiYAgPiBrdXVzaG9cIDsKK+W/temhmCA+IG5lbmdhblwgOwor5ZCI6KiIID4gZ291a2VpXCA7CivpurvnuZQgPiBhc2FvcmlcIDsKK+WPpOi5nyA+IGtvc2VraVwgOwor5ZGq57ibID4ganViYWt1XCA7CivnqbrmiKYgPiBrdXVzZW5cIDsKK+aFqOatjiA+IGdhaXRhblwgOwor5rGX6aGUID4ga2FuZ2FuXCA7Civlv7XpoK0gPiBuZW50b3VcIDsKK+enkeeZvSA+IHNlcmlmdVwgOwor5Y6f6ZqKID4gZ2VudGFpXCA7CivphrXph5EgPiBreW9raW5cIDsKK+eovOalrSA+IGthZ3lvdVwgOwor56uv5Y6zID4gdGFuZ2VuXCA7Civolq7omoogPiB5YWJ1a2FcIDsKK+WRqOe4gSA+IHNodXVlblwgOwor5Zaa5aOwID4ga2Fuc2VpXCA7CivmtbfnlKMgPiBrYWlzYW5cIDsKK+aIpuWPsiA+IHNlbnNoaVwgOwor5rqA5ZOhID4gbWFuJydpblwgOwor5Y+b6LuNID4gaGFuZ3VuXCA7Civpu4TnsokgPiBraW5ha29cIDsKK+eojua6kCA+IHplaWdlblwgOwor5Y+L6YKmID4geXV1aG91XCA7Civpjpblm70gPiBzYWtva3VcIDsKK+erueWIgCA+IHNoaW5haVwgOwor5oSB55yJID4gc2h1dWJpXCA7Civpu5nnp5ggPiBtb2t1aGlcIDsKK+a4heaOgyA+IHNlaXNvdVwgOwor6bq757WyID4gYXNhaXRvXCA7CivpioPnoLIgPiBqdXVob3VcIDsKK+aJjeS6uiA+IHNhaWppblwgOwor5ris5bqmID4gc29rdWRvXCA7CivlkIzoob4gPiBkb3VraW5cIDsKK+mNm+W3pSA+IHRhbmtvdVwgOwor6YW46aGeID4gc2FucnVpXCA7CivmtrzmsJcgPiByeW91a2lcIDsKK+eri+WcsCA+IHJpdGNoaVwgOwor5ZCM6KGMID4gZG91a291XCA7Civnqbrmg7MgPiBrdXVzb3VcIDsKK+aJi+S6pCA+IHNodWtvdVwgOwor6buS56mCID4ga3Vyb2JvXCA7Civmg4Xnt5IgPiBqb3VjaG9cIDsKK+ayg+mHjiA+IHlva3V5YVwgOwor6bq757O4ID4gYXNhaXRvXCA7CivllqflmaogPiBrZW5zb3VcIDsKK+a4qeW6iiA+IG9uc2hvdVwgOwor5oSf54q2ID4ga2Fuam91XCA7CivlkIjoob4gPiBnb3VraW5cIDsKK+aEm+eMqyA+IGFpYnlvdVwgOwor6Ya46YCgID4gam91em91XCA7CivmiKblip8gPiBzZW5rb3VcIDsKK+engeebiiA+IHNoaWVraVwgOwor5rm+5Y+jID4gd2Fua291XCA7Civlj7Loq5YgPiBzaGlyb25cIDsKK+mKg+ecvCA+IGp1dWdhblwgOwor5Y+y6KuHID4gc2hpZGFuXCA7Civnq6Dlj6UgPiBzaG91a3VcIDsKK+mKheebpCA+IGRvdWJhblwgOwor5oa25b+1ID4gb2t1bmVuXCA7Civlkbznp7AgPiBrb3Nob3VcIDsKK+aIpuWJjSA+IHNlbnplblwgOwor6bie6Ly/ID4gcmFuJyd5b1wgOwor5oan5oasID4gZG91a2VpXCA7Civlj4zovKogPiBzb3VyaW5cIDsKK+WPgumBkyA+IHNhbmRvdVwgOwor5ray5rGBID4gZWtpanV1XCA7CivnqL/mnKwgPiBrb3Vob25cIDsKK+a1t+eNoyA+IGthaWp1dVwgOwor5oak5oejID4gZnVubWFuXCA7Civlj7LoqakgPiBzaGlzaGlcIDsKK+WPjei7oiA+IGhhbnRlblwgOwor5Y+N6LuNID4gaGFuZ3VuXCA7Civlj6/oqq0gPiBrYWRva3VcIDsKK+aHuOWegiA+IGtlbnN1aVwgOwor56iO5rOVID4gemVpaG91XCA7CivljrPph40gPiBnZW5qdXVcIDsKK+iWq+iSuCA+IGt1bmpvdVwgOwor5Y+w6KmeID4gc2VyaWZ1XCA7CivpjKzmiJAgPiByZW5zZWlcIDsKK+mKgOebpCA+IGdpbmJhblwgOwor5Y+L6LuNID4geXV1Z3VuXCA7CivlkoznnaYgPiB3YWJva3VcIDsKK+mKgOebgyA+IGdpbnBhaVwgOwor5oak5oWoID4gZnVuZ2FpXCA7CivllJDmnKwgPiB0b3Vob25cIDsKK+mJhOe3miA+IHRlc3NlblwgOwor6Yu85p2/ID4ga291YmFuXCA7CivpvLvmr5sgPiBoYW5hZ2VcIDsKK+WPsuimsyA+IHNoaWthblwgOwor5Y+M6LmEID4gc291dGVpXCA7Civlj5fos54gPiBqdXNob3VcIDsKK+a2iOeBqyA+IHNob3VrYVwgOwor5oiS5Y6zID4ga2FpZ2VuXCA7Civpi7zmnZAgPiBrb3V6YWlcIDsKK+a0l+e3tCA+IHNlbnJlblwgOwor5Y+w6KanID4gdGFpcmFuXCA7Civnp4HnlKggPiBzaGl5b3VcIDsKK+W/l+mhmCA+IHNoaWdhblwgOwor5ZCM6JepID4gZG91aGFuXCA7Civlj6Poq5YgPiBrb3Vyb25cIDsKK+WPo+iqvyA+IGt1Y2hvdVwgOwor5Y+i6KuHID4gc291ZGFuXCA7CivljrPpgbggPiBnZW5zZW5cIDsKK+err+WAqiA+IHRhbmdlaVwgOwor6YeR6KuHID4ga2luZGFuXCA7Civmt7fmiKYgPiBrb25zZW5cIDsKK+aIr+S9nCA+IGdlc2FrdVwgOwor5re35oiQID4ga29uc2VpXCA7CivllprllY8gPiBrYW5tb25cIDsKK+ekvuiRrCA+IHNoYXNvdVwgOwor5oak5oCSID4gZnVuJydudVwgOwor5Y+k6Ki7ID4ga29jaHV1XCA7CivmtYHnn7MgPiBzYXN1Z2FcIDsKK+mJhOeyiSA+IHRlcHB1blwgOwor6YaX6YW1ID4gaGFra291XCA7Civljp/pibEgPiBnZW5rb3VcIDsKK+a4qeWuuSA+IG9uJyd5b3VcIDsKK+m6pueyiSA+IG11Z2lrb1wgOwor5oiQ5YqfID4gc2Vpa291XCA7Civmt7HmiYsgPiBmdWthZGVcIDsKK+m7kuebriA+IGt1cm9tZVwgOwor6YeR6KiAID4ga2luZ2VuXCA7CivmtJfnsbMgPiBzZW5tYWlcIDsKK+aGkOaGqyA+IHJlbmJpblwgOwor5Y6f6YeOID4gZ2VuJyd5YVwgOwor5rCX6a2EID4ga2loYWt1XCA7Civlj5foq74gPiBqdWRha3VcIDsKK+awl+mssSA+IGtpdXRzdVwgOwor5oiQ5YiGID4gc2VpYnVuXCA7CivolqzoiJcgPiB5YWt1aG9cIDsKK+WQjeiRlyA+IG1laWNob1wgOwor6YmE566hID4gdGVra2FuXCA7Civph43oqIAgPiBqdXVnb25cIDsKK+awt+mcpyA+IGh5b3VtdVwgOwor5oSN54S2ID4gYmluemVuXCA7Civph5HopbQgPiBraW5yYW5cIDsKK+aHkOWmiiA+IGthaW5pblwgOwor5rC06Z2iID4gbWlub21vXCA7Civnpo3npo8gPiBrYWZ1a3VcIDsKK+awt+mbqCA+IGhpc2FtZVwgOwor6YmE562LID4gdGVra2luXCA7Civmh7jlkb0gPiBrZW5tZWlcIDsKK+mFlOmhlCA+IHN1aWdhblwgOwor5oaQ5oSNID4gcmVuYmluXCA7CivmtIvntJkgPiB5b3VzaGlcIDsKK+mHjeimliA+IGp1dXNoaVwgOwor5oiQ5YW4ID4gc2VpdGVuXCA7Civpiq3mua8gPiBzZW50b3VcIDsKK+a4heW7iSA+IHNlaXJlblwgOwor5rSL57SFID4geW91a291XCA7Civph43opoEgPiBqdXV5b3VcIDsKK+mHkeijvSA+IGtpbnNlaVwgOwor6YWS6aGeID4gc2h1cnVpXCA7CivlkIjokZcgPiBnb3VjaG9cIDsKK+m2j+mztCA+IGtlaW1laVwgOwor56a9542jID4ga2luanV1XCA7CivmsLTpm7cgPiBzdWlyYWlcIDsKK+WPl+iouyA+IGp1Y2h1dVwgOwor5Y+X6Ki6ID4ganVzaGluXCA7Civlj6Poo4UgPiBrb3Vzb3VcIDsKK+a3seaEjyA+IHNoaW4nJ2lcIDsKK+ejgemHnSA+IGppc2hpblwgOwor5oaQ5oOFID4gcmVuam91XCA7CivmsLTpm6MgPiBzdWluYW5cIDsKK+WQm+iHqCA+IGt1bnJpblwgOwor5oim5LqJID4gc2Vuc291XCA7Civlj5foqJcgPiBqdXRha3VcIDsKK+aIpuS5sSA+IHNlbnJhblwgOwor5rWp54S2ID4ga291emVuXCA7CivnqpPlpJYgPiBzb3VnYWlcIDsKK+WVj+WxiyA+IHRvbicneWFcIDsKK+mJhOeqkyA+IHRlc3NvdVwgOwor5ZCN6Iy2ID4gbWVpY2hhXCA7CivmhafmlY8gPiBrZWliaW5cIDsKK+a4r+WkliA+IGtvdWdhaVwgOwor6JuH5bqnID4gaGViaXphXCA7Civnqb/lrZQgPiBzZW5rb3VcIDsKK+a5r+WFgyA+IHl1bW90b1wgOwor6by75qKBID4gYmlyeW91XCA7Civnp4HniYggPiBzaGloYW5cIDsKK+WPjeirliA+IGhhbnJvblwgOwor56m65a+dID4gc29yYW5lXCA7CivmtYTnlYwgPiBqb3VrYWlcIDsKK+iWhOiWhCA+IHVzdXVzdVwgOwor5rC06ZiyID4gc3VpYm91XCA7CivpioXniYwgPiBkb3VoYWlcIDsKK+WWnOWKhyA+IGtpZ2VraVwgOwor5oaC5oakID4geXV1ZnVuXCA7CivmhJ/mtpkgPiBrYW5ydWlcIDsKK+eptOWxhSA+IGtla2t5b1wgOwor56uL5YasID4gcml0dG91XCA7CivmhoLmha4gPiB5dXVyeW9cIDsKK+a1t+a6nSA+IGthaWtvdVwgOwor56uL5YWaID4gcml0dG91XCA7CivljprpgYcgPiBrb3VndXVcIDsKK+WSjOeLrCA+IHdhZG9rdVwgOwor5oCq6KuHID4ga2FpZGFuXCA7CivmtanngJogPiBrb3VrYW5cIDsKK+mHkeidvyA+IGtpbmJhZVwgOwor6YqA54mMID4gZ2lucGFpXCA7CivmsLTploAgPiBzdWltb25cIDsKK+ibruWjsCA+IGJhbnNlaVwgOwor5ZaE5ZOJID4gemVuemFpXCA7CivlkI/oh60gPiByaXNodXVcIDsKK+WQjOiIuSA+IGRvdXNlblwgOwor5Y2Y6aCFID4gdGFua291XCA7CivljZjpn7MgPiB0YW4nJ29uXCA7CivmtbfmuK8gPiBrYWlrb3VcIDsKK+mJm+eZvSA+IGVucGFrdVwgOwor5Y+C6KyAID4gc2FuYm91XCA7Civmgqrnq6UgPiBha3Vkb3VcIDsKK+aGguaCtiA+IHl1dW1vblwgOwor5oaC5oKjID4geXV1a2FuXCA7Civmta7mvIIgPiBmdWh5b3VcIDsKK+m8u+acqCA+IGhhbmFnaVwgOwor6YWN6Zu7ID4gaGFpZGVuXCA7CivlkozniZsgPiB3YWd5dXVcIDsKK+iWhOiRiSA+IHVzdXlvdVwgOwor5oiQ5L2TID4gc2VpdGFpXCA7CivllJDmiYsgPiBrYXJhdGVcIDsKK+a3q+W/gyA+IGluc2hpblwgOwor5ZWG5a62ID4gc2hvdWthXCA7CivllJDmiLggPiBrYXJhZG9cIDsKK+a0l+ekvCA+IHNlbnJlaVwgOwor5ZCI6Ie0ID4gZ2F0Y2hpXCA7CivljZfpnaIgPiBuYW5tZW5cIDsKK+WPguipoyA+IHNhbmtlaVwgOwor5oaC5oCdID4geXV1c2hpXCA7CivlkJHog4wgPiBrb3VoYWlcIDsKK+a3seW6piA+IHNoaW5kb1wgOwor5oW35oWoID4ga291Z2FpXCA7Civmg6jnirYgPiBzYW5qb3VcIDsKK+WQvuetiSA+IHdhcmVyYVwgOwor5rW35rWcID4ga2FpaGluXCA7CivmsJHpoqggPiBtaW5wdXVcIDsKK+iZmuaniyA+IGt5b2tvdVwgOwor5Y2a6ZuFID4gYmFrdWdhXCA7CivmiJDkurogPiBzZWlqaW5cIDsKK+aCqueojiA+IGFrdXplaVwgOwor6buE55OcID4ga3l1dXJpXCA7CivlkLnnrqEgPiBzdWlrYW5cIDsKK+a0i+eoriA+IHlvdXNodVwgOwor5rW35rSLID4ga2FpeW91XCA7Civnp7vmpI0gPiBpc2hva3VcIDsKK+mJhOegsiA+IHRlcHBvdVwgOwor5ZCE6IeqID4ga2FrdWppXCA7CivpurvnlrkgPiBtYXNoaW5cIDsKK+WWp+S8nSA+IGtlbmRlblwgOwor6JaE6Iy2ID4gdXN1Y2hhXCA7Civlj4LoprMgPiBzYW5rYW5cIDsKK+WRiuekuiA+IGtva3VqaVwgOwor5oSf5q2OID4ga2FudGFuXCA7CivljZfpmoUgPiBuYW5ndXVcIDsKK+WQq+ezliA+IGdhbnRvdVwgOwor6Juu5ZywID4gYmFuY2hpXCA7CivmgqrnpZ4gPiBha3VqaW5cIDsKK+WQjeiBniA+IG1laWJ1blwgOwor56uL5L2TID4gcml0dGFpXCA7CivljYrpn7MgPiBoYW4nJ29uXCA7CivljZfpmZAgPiBuYW5nZW5cIDsKK+aDheeXtCA+IGpvdWNoaVwgOwor56qB5aCkID4gdG90dGVpXCA7CivllqrkuK0gPiBtb2NodXVcIDsKK+a4m+WhqSA+IGdlbicnZW5cIDsKK+a4peWcsCA+IGFrdWNoaVwgOwor5reh5b2pID4gdGFuc2FpXCA7CivmtbfmsLQgPiBrYWlzdWlcIDsKK+a1rua1gSA+IGZ1cnl1dVwgOwor56Wt56WeID4gc2FpamluXCA7CivnpZ7nrKYgPiBzaGlucHVcIDsKK+mHkeiUtSA+IGtpbnpvdVwgOwor5oSb5qyyID4gYWl5b2t1XCA7Civnpa3npYAgPiBzYWlzaGlcIDsKK+WOs+irhyA+IGdlbmRhblwgOwor6JaE6ImyID4gdXN1aXJvXCA7Civnpa3npLwgPiBzYWlyZWlcIDsKK+awkemdkiA+IG1pbnNlaVwgOwor5Y2K6Z2iID4gaGFubWVuXCA7Civlj6Pok4sgPiBrb3VnYWlcIDsKK+a1qua1qiA+IHJvdXJvdVwgOwor5riT5aOwID4ga2Vpc2VpXCA7CivomZrmoLkgPiBreW9rb25cIDsKK+W+rumchyA+IGJpc2hpblwgOwor5b+c6YWsID4gb3VzaHV1XCA7CivljZfploAgPiBuYW5tb25cIDsKK+WOn+izhyA+IGdlbnNoaVwgOwor5rSX55y8ID4gc2VuZ2FuXCA7CivphanphYogPiBtZWl0ZWlcIDsKK+aAp+ihjCA+IHNlaWtvdVwgOwor5ZaE5YemID4gemVuc2hvXCA7CivlkIznvaogPiBkb3V6YWlcIDsKK+a1ruayiCA+IGZ1Y2hpblwgOwor5rC06YqAID4gc3VpZ2luXCA7Civpu5LnhZkgPiBrb2t1ZW5cIDsKK+W+oemhjCA+IGd5b2RhaVwgOwor5Y6z6KiTID4gZ2Vua3VuXCA7CivljbPph5EgPiBzb2traW5cIDsKK+WTgOalvSA+IGFpcmFrdVwgOwor56m65Z+fID4ga3V1aWtpXCA7CivpioDmvKIgPiBnaW5rYW5cIDsKK+a3seWxsSA+IG1peWFtYVwgOwor6YeO6JKcID4gbm9iaXJ1XCA7Civmta7msLcgPiBmdWh5b3VcIDsKK+m2j+mgrSA+IGtlaXRvdVwgOwor56eL5rOiID4gc2h1dWhhXCA7CivmtLvniYggPiBrYXBwYW5cIDsKK+ekvue3miA+IHNoYXNlblwgOwor5rCX6ZW3ID4ga2luYWdhXCA7CivnpZ7np5ggPiBzaGlucGlcIDsKK+epuuWcsCA+IGFraWNoaVwgOwor5Y+w6IeoID4gdGFpcmluXCA7Civmg6jmvrkgPiBzYW50YW5cIDsKK+aEm+alvSA+IGFpZ3lvdVwgOwor6YeO6I+KID4gbm9naWt1XCA7Civnp4vmsJcgPiBzaHV1a2lcIDsKK+azlee3miA+IGhvdXNlblwgOwor5rCR6ZaTID4gbWlua2FuXCA7Civmh4flkb0gPiBrb25tZWlcIDsKK+a4r+WPoyA+IGtvdWtvdVwgOwor5oKq55u4ID4gYWt1c291XCA7CivlvqHpnIogPiBtaXRhbWFcIDsKK+axuuijgSA+IGtlc3NhaVwgOwor5Y2K6ZaLID4gaGFua2FpXCA7Civms5XntrIgPiBob3Vtb3VcIDsKK+aCsueXmyA+IGhpdHN1dVwgOwor6bqm55SwID4gbXVnaXRhXCA7CivptZ7ps6UgPiBnYWNob3VcIDsKK+awtOmDtyA+IHN1aWdvdVwgOwor5ZCI57mKID4gZ291c2VuXCA7Civnp4Hms5UgPiBzaGlob3VcIDsKK+m1nemzpSA+IGdhY2hvdVwgOwor5oWj5oCnID4ga2Fuc2VpXCA7Civljp/oq5YgPiBnZW5yb25cIDsKK+axuuihjCA+IGtla2tvdVwgOwor5oWi5oCnID4gbWFuc2VpXCA7CivlvqHpmbUgPiBnb3J5b3VcIDsKK+W/q+i1sCA+IGthaXNvdVwgOwor5b6T6aCGID4ganV1anVuXCA7CivpvKDml48gPiBzb3pva3VcIDsKK+ayu+iAhSA+IGNoaXNoYVwgOwor5Y6f6KmpID4gZ2Vuc2hpXCA7CivmsLTpgZMgPiBzdWlkb3VcIDsKK+aEn+afkyA+IGthbnNlblwgOwor5oeQ5YmjID4ga2Fpa2VuXCA7Civmg4XnirYgPiBqb3Vqb3VcIDsKK+WQjOe0mSA+IGRvdXNoaVwgOwor6Ymx5ruTID4ga291c2hpXCA7CivlkJHnsbMgPiBrb3ViZWlcIDsKK+mJhOeQtCA+IHRla2tpblwgOwor5ZCM57O7ID4gZG91a2VpXCA7Civnqq7kvZkgPiBreXV1eW9cIDsKK+a1ruaomSA+IGZ1aHlvdVwgOwor6YqA5rOlID4gZ2luZGVpXCA7Civlj6/ogbQgPiBrYWNob3VcIDsKK+iZmuaVsCA+IGt5b3N1dVwgOwor5rW35qOgID4ga2FpZG91XCA7CivmgqrnlqsgPiBha3Vla2lcIDsKK+a4m+WToSA+IGdlbicnaW5cIDsKK+WQg+e3iiA+IGtpa2tpblwgOwor5oGp57WmID4gb25reXV1XCA7CivmsLTovrogPiBtaXp1YmVcIDsKK+W+oemWgCA+IG1pa2Fkb1wgOwor5Y+M6JGJID4gZnV0YWJhXCA7CivlvozpoIUgPiBrb3Vrb3VcIDsKK+eon+aApyA+IGhpbnNlaVwgOwor5re35aOwID4ga29uc2VpXCA7Civlj6PohZQgPiBrb3Vrb3VcIDsKK+mNm+WGtiA+IHRhbicneWFcIDsKK+aCqueUqCA+IGFrdXlvdVwgOwor56qD5Y+WID4gc2Vzc2h1XCA7CivmhInmpb0gPiB5dXJha3VcIDsKK+engOatjCA+IHNodXVrYVwgOwor5Yy66ZW3ID4ga3VjaG91XCA7CivmuJvlj7cgPiBnZW5nb3VcIDsKK+a4r+WGhSA+IGtvdW5haVwgOwor5rC06LuKID4gc3Vpc2hhXCA7CivmuJvlj40gPiBnZW50YW5cIDsKK+mFkumAoCA+IHNodXpvdVwgOwor6JmO5paRID4gdG9yYWZ1XCA7Civpu5LmtbcgPiBrb2trYWlcIDsKK+WQjeetlCA+IG1laXRvdVwgOwor5b6M6ZujID4ga291bmFuXCA7CivnqbrlkI0gPiBrdXVtZWlcIDsKK+a1hea1tyA+IHNlbmthaVwgOwor6Yym5ZywID4ga2luY2hpXCA7Civlj43oi7EgPiBoYW4nJ2VpXCA7CivlkIznrYkgPiBkb3V0b3VcIDsKK+a2suaApyA+IGVraXNlaVwgOwor6by75oGvID4gYmlzb2t1XCA7CivmgqrnkIMgPiBha2t5dXVcIDsKK+WQiOeulyA+IGdhc3NhblwgOwor5Y+N6Iq7ID4gaGFuc3V1XCA7CivmtIvnkLQgPiB5b3VraW5cIDsKK+engeaoqSA+IHNoaWtlblwgOwor6YmE54mHID4gdGVwcGVuXCA7CivnobzphbggPiBob3VzYW5cIDsKK+mJseaziSA+IGtvdXNlblwgOwor5rW35pyIID4ga3VyYWdlXCA7Civmtbfmm7kgPiBrYWlzb3VcIDsKK+mFjemAgSA+IGhhaXNvdVwgOwor5b6M6ZmjID4ga291amluXCA7CivljZfpg4ogPiBuYW5rb3VcIDsKK+axjuirliA+IGhhbnJvblwgOwor5ZSQ5a2QID4ga2FyYWtvXCA7CivmtYHmtL4gPiByeXV1aGFcIDsKK+iWhOe0lyA+IGhha3VzYVwgOwor6Jm55b2pID4ga291c2FpXCA7Civmt7flnKggPiBrb256YWlcIDsKK+WQjOeqkyA+IGRvdXNvdVwgOwor56aB54WZID4ga2luJydlblwgOwor6YqY5p2/ID4gbWVpYmFuXCA7CivpibHmsLQgPiBrb3VzdWlcIDsKK+W+rumHjyA+IGJpcnlvdVwgOwor5rK557W1ID4gYWJ1cmFlXCA7Civmtbfmma8gPiBrYWlrZWlcIDsKK+epuuWMhSA+IGt1dWhvdVwgOwor5Y2K6YeRID4gaGFua2luXCA7Civmr5vpoK0gPiBtb3V0b3VcIDsKK+aEm+aVrCA+IGFpa3lvdVwgOwor5ZCM56iuID4gZG91c2h1XCA7Civnqb/liLogPiBzZW5zaGlcIDsKK+W9oumquCA+IGtlaWdhaVwgOwor5oOo5q27ID4gemFuc2hpXCA7CivmtbfmmJ8gPiBoaXRvZGVcIDsKK+aFiOW/gyA+IGppc2hpblwgOwor5b6M6ZaAID4ga291bW9uXCA7CivmtYTmsLQgPiBqb3VzdWlcIDsKK+a4m+WIkSA+IGdlbmtlaVwgOwor6YeN572qID4ganV1emFpXCA7CivphaLosZogPiBzdWJ1dGFcIDsKK+WNg+mIniA+IHNlbmtpblwgOwor6buE5rW3ID4ga291a2FpXCA7Civlj7DntJkgPiBkYWlzaGlcIDsKK+mFjei7iiA+IGhhaXNoYVwgOwor56We55K9ID4gc2hpbmppXCA7CivnqbrliY0gPiBrdXV6ZW5cIDsKK+a0l+eFiSA+IHNlbnJlblwgOwor5rSL54qsID4geW91a2VuXCA7CivmtLjmtLggPiBrb3Vrb3VcIDsKK+WNsOixoSA+IGluc2hvdVwgOwor5Y2D6YeRID4gc2Vua2luXCA7CivnqK7lrZAgPiBzaHVzaGlcIDsKK+a0uOa0iyA+IGtvdXlvdVwgOwor56eL5pyfID4gc2h1dWtpXCA7CivmsJfov6sgPiBraWhha3VcIDsKK+WQjOekviA+IGRvdXNoYVwgOwor5b2x6Z+/ID4gZWlreW91XCA7CivolJHoppYgPiBiZXNzaGlcIDsKK+W/nOirviA+IG91ZGFrdVwgOwor5rib5YWNID4gZ2VubWVuXCA7CivmsJHpgbggPiBtaW5zZW5cIDsKK+epuuWGtyA+IGt1dXJlaVwgOwor5oOa5rCXID4gbm9yb2tlXCA7CivnpLznoLIgPiByZWlob3VcIDsKK+WNmOi7iiA+IHRhbnNoYVwgOwor5oW25aSnID4ga2VpZGFpXCA7Civlkozmpb0gPiB3YXJha3VcIDsKK+aAquiFlSA+IGthaXdhblwgOwor5ZCI56WtID4gZ291c2FpXCA7Civlj4zogqkgPiBzb3VrZW5cIDsKK+WVhuWLmSA+IHNob3VtdVwgOwor5oKq54axID4gYW5ldHN1XCA7CivlkIjnpYAgPiBnb3VzaGlcIDsKK+aAp+iFuiA+IHNlaXNlblwgOwor5oay5YW1ID4ga2VucGVpXCA7CivmuJvlgrUgPiBnZW5zYWlcIDsKK+m7hOawtCA+IGtpbWl6dVwgOwor6YqY5paHID4gbWVpYnVuXCA7Civlj6PntbUgPiBrdWNoaWVcIDsKK+enkeaWmSA+IGthcnlvdVwgOwor5b6h6YWMID4gb3NoYWt1XCA7CivmsJfou70gPiBraWdhcnVcIDsKK+aAp+iDvSA+IHNlaW5vdVwgOwor5ZGG54S2ID4gYm91emVuXCA7Civms6jnlo8gPiBjaHV1c29cIDsKK+azqOeWjiA+IGNodXVzb1wgOwor5ZWG5YipID4gc2hvdXJpXCA7CivpioXmnb8gPiBkb3ViYW5cIDsKK+mFkuiyqSA+IHNodWhhblwgOwor6Juu5Lq6ID4gYmFuamluXCA7CivllLHlkowgPiBzaG91d2FcIDsKK+WRqOazoiA+IHNodXVoYVwgOwor5rW35pCNID4ga2Fpc29uXCA7CivmgKrogZ4gPiBrYWlidW5cIDsKK+engeaciSA+IHNoaXl1dVwgOwor5oWu5aSWID4gcnlvZ2FpXCA7CivphZLosaogPiBzaHVnb3VcIDsKK+engeabuCA+IHNoaXNob1wgOwor6YeR57O4ID4ga2luc2hpXCA7CivmuJvkv7ggPiBnZW5wb3VcIDsKK+WNiui8qiA+IGhhbnJpblwgOwor5rOV55y8ID4gaG91Z2VuXCA7Civmt7flkIwgPiBrb25kb3VcIDsKK+mKgOadryA+IGdpbnBhaVwgOwor5re35ZCIID4ga29uZ291XCA7Civnn7PpubggPiBzZWtrZW5cIDsKK+mHkeeyiSA+IGtpbnB1blwgOwor6Ymb5q+SID4gZW5kb2t1XCA7CivlvZPpp4UgPiB0b3Vla2lcIDsKK+W+oemBiiA+IGd5b3l1dVwgOwor5rim5LitID4ga2FjaHV1XCA7Civms5Xnm7ggPiBob3Nzb3VcIDsKK+a3seWRsyA+IGZ1a2FtaVwgOwor56We54i2ID4gc2hpbnB1XCA7Civljp/okZcgPiBnZW5jaG9cIDsKK+aCoOeEtiA+IHl1dXplblwgOwor5oSf5oeQID4ga2Fua2FpXCA7Civpuqbmua8gPiBtdWdpeXVcIDsKK+aDs+acmyA+IHNvdWJvdVwgOwor5Y+C6ICDID4gc2Fua291XCA7CivlkIznnIwgPiBkb3VrZW5cIDsKK+WQjeebpCA+IG1laWJhblwgOwor5Y+456WtID4gc2hpc2FpXCA7Civlj5fntaYgPiBqdWt5dXVcIDsKK+WQjOebuCA+IGRvdXNvdVwgOwor5ZCM55ufID4gZG91bWVpXCA7CivmtKrmsLQgPiBrb3V6dWlcIDsKK+WTgOaEgSA+IGFpc2h1dVwgOwor5oSf5oWoID4ga2FuZ2FpXCA7CivljYPovIkgPiBzZW56YWlcIDsKK+ibjeWFiSA+IGtlaWtvdVwgOwor5ZOA5oOcID4gYWlzZWtpXCA7CivlkInnm7ggPiBraXNzb3VcIDsKK+epuuS8vCA+IHNvcmFuaVwgOwor5ZKM5pyNID4gd2FmdWt1XCA7Civnoazou58gPiBrb3VuYW5cIDsKK+mHkeeuoSA+IGtpbmthblwgOwor6Jas55CGID4geWFrdXJpXCA7CivmhJvmho4gPiBhaW5pa3VcIDsKK+WPo+etlCA+IGtvdXRvdVwgOwor5b6M6YeRID4gYXRva2luXCA7CivmhJvmhb4gPiBhaXlva3VcIDsKK+aEn+aDsyA+IGthbnNvdVwgOwor56S+55SoID4gc2hheW91XCA7CivpioDmmKAgPiBnaW4nJ2VpXCA7CivpubXnjbIgPiByb2tha3VcIDsKK+egsumWgCA+IGhvdW1vblwgOwor5rW35oimID4ga2Fpc2VuXCA7CivmhJ/mg4UgPiBrYW5qb3VcIDsKK+aAneiAgyA+IHNoaWtvdVwgOwor5ZOB5oCnID4gaGluc2VpXCA7Civlvqnot68gPiBmdWt1cm9cIDsKK+WRveaguSA+IG1laWtvblwgOwor5oOF5q27ID4gam91c2hpXCA7CivpjKDliaQgPiBqb3V6YWlcIDsKK+a3seWMliA+IHNoaW5rYVwgOwor5Y2z6KGMID4gc29ra291XCA7CivpjKDliY0gPiBqb3VtYWVcIDsKK+awl+ixoSA+IGtpc2hvdVwgOwor5oSb5oOcID4gYWlzZWtpXCA7Civlj7fnoLIgPiBnb3Vob3VcIDsKK+azleeVjCA+IGhva2thaVwgOwor5ZWT5LiKID4ga2Vpam91XCA7CivmtJfmtYQgPiBzZW5qb3VcIDsKK+aEn+aApyA+IGthbnNlaVwgOwor56We54GrID4gc2hpbmthXCA7Civlj4zntJkgPiBzb3VzaGlcIDsKK+WQjeeUoyA+IG1laXNhblwgOwor5oSb5oGvID4gYWlzb2t1XCA7Civol6TmsI8gPiB0b3VzaGlcIDsKK+WNlOitsCA+IGt5b3VnaVwgOwor6buS5pyoID4ga3Vyb2tpXCA7CivmhJrmga8gPiBndXNva3VcIDsKK+WPpOensCA+IGtvc2hvdVwgOwor6bSV6bOlID4gZGFjaG91XCA7Civms6XnirYgPiBkZWlqb3VcIDsKK+W9k+mdoiA+IHRvdW1lblwgOwor5b+F6KaLID4gaGlra2VuXCA7CivpvJPlvJMgPiBrb2t5dXVcIDsKK+WTgOW8lCA+IGFpY2hvdVwgOwor5oKy5rOBID4gaGlreW91XCA7Civms7DnhLYgPiB0YWl6ZW5cIDsKK+WPjeexsyA+IGhhbmJlaVwgOwor5rS75qCTID4ga2Fzc2VuXCA7CivmtYTmm7ggPiBqb3VzaG9cIDsKK+egtOmPoSA+IGhha3lvdVwgOwor56iA5bCRID4ga2lzaG91XCA7CivllYbkuosgPiBzaG91amlcIDsKK+emgeatoiA+IGtpbnNoaVwgOwor5b6M6YCBID4ga291c291XCA7CivlvozpgIAgPiBrb3V0YWlcIDsKK+WPl+eroCA+IGp1c2hvdVwgOwor6YeN56iOID4ganV1emVpXCA7CivphaLom7ggPiBzdWRha29cIDsKK+atr+m9piA+IHNoaWdpblwgOwor5ZCE55WMID4ga2Fra2FpXCA7Civlj6LnpaAgPiBob2tvcmFcIDsKK+aFqOWYhiA+IGdhaXRhblwgOwor5b6T6LuNID4ganV1Z3VuXCA7Civmr5vpiI4gPiBrZWJhcmlcIDsKK+mDqOmVtyA+IGJ1Y2hvdVwgOwor5Y+y55y8ID4gc2hpZ2FuXCA7CivmgrbmrbsgPiBtb25zaGlcIDsKK+autemajiA+IGRhbmthaVwgOwor6by+5aOwID4ga2Fuc2VpXCA7Civmg6jmlZcgPiB6YW5wYWlcIDsKK+aCquazlSA+IGFrdWhvdVwgOwor5b6F6YGHID4gdGFpZ3V1XCA7CivmtIvmtIsgPiB5b3V5b3VcIDsKK+m6uuajkiA+IG1lbmJvdVwgOwor5Y+z55uuID4gbWlnaW1lXCA7Civlv4XoobAgPiBoaXNzdWlcIDsKK+atr+m7kiA+IGhhZ3Vyb1wgOwor6YeN56WaID4gY2hvdXNvXCA7CivlvozovKogPiBrb3VyaW5cIDsKK+W+jOi8qSA+IGtvdWhhaVwgOwor6buO5piOID4gcmVpbWVpXCA7CivmhIjmhIggPiBpeW9peW9cIDsKK+ekvOeKtiA+IHJlaWpvdVwgOwor5rCR6KuWID4gbWlucm9uXCA7Civlj4LnsaAgPiBzYW5yb3VcIDsKK+aCquawtCA+IGFrdXN1aVwgOwor5ru+44CFID4ga29ua29uXCA7CivljKrouqwgPiBoaWt5dXVcIDsKK+W+jOi7jSA+IGtvdWd1blwgOwor5b6M6LuKID4ga291c2hhXCA7CivmhInmgqYgPiB5dWV0c3VcIDsKK+mHneebriA+IGhhcmltZVwgOwor5YyX6YOoID4gaG9rdWJ1XCA7CivlvL7poK0gPiBkYW50b3VcIDsKK+aCquawlyA+IHdhcnVnaVwgOwor55+i6bGIID4geWF0YXJhXCA7CivnpI7nn7MgPiBzb3Nla2lcIDsKK+a1tOW+jCA+IHlva3Vnb1wgOwor5Y2T6KaLID4gdGFra2VuXCA7Civlkb3mlbAgPiBtZWlzdXVcIDsKK+WMl+mDiiA+IGhva2tvdVwgOwor5q6L6aq4ID4gemFuZ2FpXCA7CivmipjjgIUgPiBvcmlvcmlcIDsKK+azpeeCrSA+IGRlaXRhblwgOwor6YeR56CCID4ga2luc2hhXCA7CivlkI3nirYgPiBtZWlqb3VcIDsKK+WLp+mZjSA+IGthbmtvdVwgOwor6JGb6aShID4ga3V6dWFuXCA7Civmta7lv4MgPiBmdXNoaW5cIDsKK+mHjeegsiA+IGp1dWhvdVwgOwor56eB5oakID4gc2hpZnVuXCA7CivmsZfohbogPiBrYW5zZW5cIDsKK+a1t+W6lSA+IGthaXRlaVwgOwor5oCq56ulID4ga2FpZG91XCA7CivmsrznlLAgPiBudW1hZGFcIDsKK+elreauvyA+IHNhaWRlblwgOwor5Y2Y6KGMID4gdGFua291XCA7CivnoLLph5EgPiBob3VraW5cIDsKK+WPpOedgCA+IGZ1cnVnaVwgOwor5Y2K6KejID4gaGFua2FpXCA7CivljZfooYwgPiBuYW5rb3VcIDsKK+mKgOaJhyA+IGdpbnNlblwgOwor6YeN55+zID4gb21vc2hpXCA7CivmsrvnlKMgPiBjaGlzYW5cIDsKK+WLn+mbhiA+IGJvc2h1dVwgOwor5re75LmXID4gdGVuam91XCA7Civpg7fph4wgPiBreW91cmlcIDsKK+WRqOacnyA+IHNodXVraVwgOwor5Y6f572qID4gZ2VuemFpXCA7CivpjKbkuIogPiBraW5qb3VcIDsKK+WRs+aWuSA+IG1pa2F0YVwgOwor56iu5ZCNID4gc2h1bWVpXCA7CivlvLfpn7MgPiBreW91b25cIDsKK+a3t+S6pCA+IGtvbmtvdVwgOwor6JqV5Y21ID4gc2FucmFuXCA7Civnp4HmhJ8gPiBzaGlrYW5cIDsKK+WNgeiqoSA+IGppa2thaVwgOwor5q6L6aaZID4gemFua291XCA7Civpuqrmo5IgPiBtZW5ib3VcIDsKK+axmuiBtyA+IG9zaG9rdVwgOwor6Jep5qChID4gaGFua291XCA7Civmt7fkubEgPiBrb25yYW5cIDsKK+epguWFiCA+IGhvc2FraVwgOwor6YeR55uuID4ga2FuZW1lXCA7Civnp4Hmg4UgPiBzaGlqb3VcIDsKK+a1t+W2uiA+IGthaXJlaVwgOwor5YuV6Z2ZID4gZG91c2VpXCA7CivmgZLnlKMgPiBrb3VzYW5cIDsKK+mHj+ebriA+IHJ5b3VtZVwgOwor5b6z6KGMID4gdG9ra291XCA7CivnoJTpkb0gPiBrZW5zYW5cIDsKK+W8semfsyA+IHlvd2FuZVwgOwor5Yyq6LOKID4gaGl6b2t1XCA7CivlkLjmsJcgPiBreXV1a2lcIDsKK+WLoumWgCA+IHNlaW1vblwgOwor5b+r6IWVID4ga2Fpd2FuXCA7Civnp4HmgaggPiBzaGlrb25cIDsKK+aui+mjryA+IHphbnBhblwgOwor5rC06JGsID4gc3Vpc291XCA7CivljYroo4EgPiBoYW5zYWlcIDsKK+emheaelyA+IHplbnJpblwgOwor5ZSv5LiAID4geXVpdHN1XCA7Civph43nm5cgPiBqdXV0b3VcIDsKK+WQjOeEtiA+IGRvdXplblwgOwor5q276aq4ID4gc2hpZ2FpXCA7CivlvqHoqJcgPiBnb3Rha3VcIDsKK+W+ruihtyA+IGJpY2h1dVwgOwor5b6h6KiAID4gbWlrb3RvXCA7CivmsLfoj5MgPiBoeW91a2FcIDsKK+elnuawlyA+IHNoaW5raVwgOwor5Yq56aiTID4ga291a2VuXCA7CivljZfom64gPiBuYW5iYW5cIDsKK+WNiuihvyA+IGhhbmVyaVwgOwor6Jma5aaEID4ga3lvbW91XCA7CivmsbrnrpcgPiBrZXNzYW5cIDsKK+aEn+WumCA+IGthbmthblwgOwor5YyW6LqrID4ga2VzaGluXCA7CivmgaznhLYgPiB0ZW56ZW5cIDsKK+aDheaZryA+IGpvdWtlaVwgOwor6Jas5rmvID4geWFrdXl1XCA7Civmsb3nrJsgPiBraXRla2lcIDsKK+azleeBryA+IGhvdXRvdVwgOwor5ra85ZGzID4gcnlvdW1pXCA7CivlkIzngrkgPiBkb3V0ZW5cIDsKK+awtOiPnCA+IG1penVuYVwgOwor5rW35bK4ID4ga2FpZ2FuXCA7Civli77phY0gPiBrb3ViYWlcIDsKK+aCqualrSA+IGFrdWdvdVwgOwor5Y+C56aFID4gc2FuemVuXCA7Civljp/ntr8gPiBnZW5tZW5cIDsKK+aDqOaGuiA+IHNhbnRhblwgOwor6Jek5pysID4gdG91aG9uXCA7CivpiYTmnb8gPiB0ZXBwYW5cIDsKK+mDtemAgSA+IHl1dXNvdVwgOwor5q+U6LyDID4gaGlrYWt1XCA7CivmtYXmiY0gPiBzZW5zYWlcIDsKK+efremfsyA+IHRhbicnb25cIDsKK+emgeabuCA+IGtpbnNob1wgOwor6JGJ6aKoID4gaGFrYXplXCA7Civlj6LnlJ8gPiBzb3VzZWlcIDsKK+W+oeijvSA+IGd5b3NlaVwgOwor6JO06I+cID4ganVuc2FpXCA7CivlkKvmsLQgPiBnYW5zdWlcIDsKK+aDs+W/tSA+IHNvdW5lblwgOwor5b2x6LqrID4ga2FnZW1pXCA7Civljp/ntJkgPiBnZW5zaGlcIDsKK+aEm+WsjCA+IGFpa3lvdVwgOwor6Yq35aSPID4gc2hvdWthXCA7Civmr5votrMgPiBrZWFzaGlcIDsKK+WOn+ezuCA+IGdlbnNoaVwgOwor5q2v6auEID4gc2hpenVpXCA7CivmtbflrrkgPiBrYWl5b3VcIDsKK+mKg+W8viA+IGp1dWRhblwgOwor6Jma5aCxID4ga3lvaG91XCA7Civljp/ns5YgPiBnZW50b3VcIDsKK+iQvemmrCA+IHJha3ViYVwgOwor6YeR55KwID4ga2lua2FuXCA7CivnoJXpibEgPiBzYWlrb3VcIDsKK+W8k+mmrCA+IGt5dXViYVwgOwor5Y+M55y8ID4gc291Z2FuXCA7Civlj4znnLggPiBzb3Vib3VcIDsKK+m5ueawtCA+IGthbnN1aVwgOwor56Cy6LuKID4gaG91c2hhXCA7CivmhoLkuJYgPiB5dXVzZWlcIDsKK+WPjeecgSA+IGhhbnNlaVwgOwor5rOo5rK5ID4gY2h1dXl1XCA7CivmtYXmha4gPiBzZW5yeW9cIDsKK+mDt+i7jSA+IGdvdWd1blwgOwor5oOF5pONID4gam91c291XCA7CivnpZ7mqLkgPiBzaGluanVcIDsKK+a2iOWkjyA+IHNob3VrYVwgOwor5rKI56CCID4gY2hpbnNhXCA7Civli6fpioAgPiBrYW5naW5cIDsKK+WMu+ihkyA+IGlqdXRzdVwgOwor6YKm6aGMID4gaG91ZGFpXCA7CivolYPnpL4gPiBiYW5zaGFcIDsKK+eov+S6uiA+IGtvdWppblwgOwor56aB5patID4ga2luZGFuXCA7CivokIzpu44gPiBob3VyZWlcIDsKK+aDsOW8sSA+IGRhamFrdVwgOwor5b6L6KmpID4gcmlzc2hpXCA7CivmhJ/lpa4gPiBrYW5wdW5cIDsKK+WOs+emgSA+IGdlbmtpblwgOwor5raZ5ZqiID4gcnVpbm91XCA7CivnqYLkuKYgPiBob25hbWlcIDsKK+WNteiDniA+IHJhbmhvdVwgOwor5ZCM5rqQID4gZG91Z2VuXCA7CivmhJvlpr4gPiBhaXNob3VcIDsKK+WQjea5ryA+IG1laXRvdVwgOwor6YeO55CDID4geWFreXV1XCA7CivmgKrnm5cgPiBrYWl0b3VcIDsKK+WRieacjSA+IGdvZnVrdVwgOwor56We5qW9ID4ga2FndXJhXCA7Civlv6DnvqkgPiBjaHV1Z2lcIDsKK+iRt+mFkiA+IGt1bnNodVwgOwor5rC06IWrID4gc3Vpc2h1XCA7Civnp5HlraYgPiBrYWdha3VcIDsKK+iXjeafkyA+IGFpem9tZVwgOwor5ZSQ5Lq6ID4gdG91amluXCA7CivmsrnnhLYgPiB5dXV6ZW5cIDsKK+aCquabuCA+IGFrdXNob1wgOwor5b2T6YG4ID4gdG91c2VuXCA7CivmtIvmnKwgPiB5b3Vob25cIDsKK+W+jOimiyA+IGtvdWtlblwgOwor5ZCb5rCRID4ga3VubWluXCA7CivmtIvmm7ggPiB5b3VzaG9cIDsKK+iRiemZsCA+IGhha2FnZVwgOwor6YqA5ba6ID4gZ2lucmVpXCA7CivnpLzms5UgPiByZWlob3VcIDsKK+ayuOeCuSA+IGZ1dHRlblwgOwor56eL5a2jID4gc2h1dWtpXCA7CivmhYvli6IgPiB0YWlzZWlcIDsKK+WSjOW4gyA+IHdha2FtZVwgOwor5oGs5rehID4gdGVudGFuXCA7Civpu5nluqcgPiBtb2t1emFcIDsKK+a2suWJpCA+IGVraXphaVwgOwor5q276ZyKID4gc2hpcmVpXCA7Civmrr/ou40gPiBkZW5ndW5cIDsKK+m7kuW9sSA+IGtva3VlaVwgOwor5byK6aKoID4gaGVpZnV1XCA7Civlj4znlJ8gPiBzb3VzZWlcIDsKK+W/heiHsyA+IGhpc3NoaVwgOwor5b6A6Ki6ID4gb3VzaGluXCA7CivlvoHoqI4gPiBzZWl0b3VcIDsKK+iUl+ezliA+IHNob3RvdVwgOwor6YeR54mMID4ga2lucGFpXCA7CivphY3oiLkgPiBoYWlzZW5cIDsKK+mKheWxsSA+IGRvdXphblwgOwor5oWj5L6LID4ga2FucmVpXCA7Civms5XmsrsgPiBob3VjaGlcIDsKK+a1t+WkliA+IGthaWdhaVwgOwor5Y6f56i/ID4gZ2Vua291XCA7Civljp/nqK4gPiBnZW5zaHVcIDsKK+awtOiAlSA+IHN1aWtvdVwgOwor6YO16LKvID4geXV1Y2hvXCA7Civph47niZsgPiB5YWd5dXVcIDsKK+a0u+aApyA+IGthc3NlaVwgOwor56S+5q6/ID4gc2hhZGVuXCA7CivmhJvln7cgPiBhaXNodXVcIDsKK+WLp+mAsiA+IGthbmppblwgOwor6YeN54mIID4ganV1aGFuXCA7CivmgqrmlocgPiBha3VidW5cIDsKK+eggumHkSA+IHNoYWtpblwgOwor5q2j6aSQID4gc2Vpc2FuXCA7CivphY3ohrMgPiBoYWl6ZW5cIDsKK+axgue4gSA+IGt5dXVlblwgOwor6YqA5bGxID4gZ2luemFuXCA7CivnqI7liLYgPiB6ZWlzZWlcIDsKK+W/jeiAkCA+IG5pbnRhaVwgOwor5oKq5pS/ID4gYWt1c2VpXCA7Civmra/pnaIgPiBzaGltZW5cIDsKK+WQiOazlSA+IGdvdWhvdVwgOwor5q276ZeYID4gc2hpdG91XCA7Civnpa3mlocgPiBzYWltb25cIDsKK+WQhOa0viA+IGtha3VoYVwgOwor6YG66auqID4gaWhhdHN1XCA7CivljZfoiKogPiBuYW5rb3VcIDsKK+aFqOS4liA+IGdhaXNlaVwgOwor56eY5aKDID4gaGlreW91XCA7CivphZLogrQgPiBzaHVrb3VcIDsKK+axgOe3miA+IHRlaXNlblwgOwor5Y6755ewID4ga3lvdGFuXCA7CivmtbfloKEgPiBrYWlob3VcIDsKK+WQjOawjyA+IGRvdXNoaVwgOwor56Wt5pS/ID4gc2Fpc2VpXCA7CivpgbrpqqggPiBpa290c3VcIDsKK+m7kuW3viA+IGt1cm9nb1wgOwor5oGp5rKiID4gb250YWt1XCA7Civmtbfln58gPiBrYWlpa2lcIDsKK+W+hOihjCA+IGtlaWtvdVwgOwor5oSb5Zu9ID4gYWlrb2t1XCA7CivpiYTmi7MgPiB0ZWtrZW5cIDsKK+WQjeauiyA+IG5hZ29yaVwgOwor5rK85rmWID4gc2hvdWtvXCA7CivokazpgIEgPiBzb3Vzb3VcIDsKK+egtOiqvyA+IGhhY2hvdVwgOwor5oOz5a6aID4gc291dGVpXCA7Civmg4XmhJ8gPiBqb3VrYW5cIDsKK+iZmuWQjSA+IGt5b21laVwgOwor5Y6a56S8ID4ga291cmVpXCA7CivnpoHmiYAgPiBraW5zaG9cIDsKK+W8vumBkyA+IGRhbmRvdVwgOwor5rCR6Iq4ID4gbWluZ2VpXCA7CivmhJ/lmIYgPiBrYW50YW5cIDsKK+WTuuS5syA+IGhvbnl1dVwgOwor6YeN54K5ID4ganV1dGVuXCA7CivlkIPmsLQgPiBraXNzdWlcIDsKK+ensOWRvCA+IHNob3Vrb1wgOwor5Y+w5rm+ID4gdGFpd2FuXCA7Civms4nmsLQgPiBzZW5zdWlcIDsKK+mJhOaJhyA+IHRlc3NlblwgOwor5oCq542jID4ga2FpanV1XCA7Civlkajlv4wgPiBzaHV1a2lcIDsKK+awuOe2miA+IGVpem9rdVwgOwor5q2j6Z2iID4gbWF0b21vXCA7Civph43ngbAgPiBqdXVrYWlcIDsKK+awtOe3tCA+IHN1aXJlblwgOwor55+t6YqDID4gdGFuanV1XCA7Civlk4Dlk60gPiBhaWtva3VcIDsKK+awtOe3miA+IHN1aXNlblwgOwor6Ymx5bGxID4ga291emFuXCA7CivljbHntbUgPiBhYnVuYWVcIDsKK+mJseWxpCA+IGtvdXNvdVwgOwor5oGl5q+bID4gY2hpbW91XCA7CivljJfooYwgPiBob2trb3VcIDsKK+aym+eEtiA+IGhhaXplblwgOwor5q636LORID4gaW5zaGluXCA7Civmr5LoposgPiBkb2t1bWlcIDsKK+WKqemVtyA+IGpvY2hvdVwgOwor5ray5L2TID4gZWtpdGFpXCA7Civlj7jms5UgPiBzaGlob3VcIDsKK+mIjeaguSA+IGRvbmtvblwgOwor5oOF5b+1ID4gam91bmVuXCA7Civmgr3mg6ggPiBzZWlzYW5cIDsKK+aDqOWusyA+IHNhbmdhaVwgOwor6Jma5YuiID4ga3lvc2VpXCA7Civnoofnva4gPiB0ZWljaGlcIDsKK+mFjee9riA+IGhhaWNoaVwgOwor5rCX6IO4ID4ga2lreW91XCA7CivlkrPll70gPiBnYWlzb3VcIDsKK+aui+mHkSA+IHphbmtpblwgOwor5b6p6IiqID4gZnVra291XCA7CivlkIzmqKkgPiBkb3VrZW5cIDsKK+avrOiXuyA+IG1hcmltb1wgOwor6Jar5p+TID4ga3Vuc2VuXCA7Civnp4HlpKcgPiBzaGlkYWlcIDsKK+avm+ifuSA+IGtlZ2FuaVwgOwor5b6p6IiIID4gZnVra291XCA7CivmhJvllLEgPiBhaXNob3VcIDsKK+aAp+eKtiA+IHNlaWpvdVwgOwor5ZOB5ZCNID4gaGlubWVpXCA7CivpibHlrrMgPiBrb3VnYWlcIDsKK+WQjOanmCA+IGRvdXlvdVwgOwor5Y2D6IisID4gc2VucGFuXCA7CivmsLTns7sgPiBzdWlrZWlcIDsKK+aCoOaPmiA+IHl1dXlvdVwgOwor5oKq5oqVID4gYWt1dG91XCA7Civljp/nm6QgPiBnZW5iYW5cIDsKK+mztOmWgCA+IG5hcnV0b1wgOwor5YuV6LyqID4gZG91cmluXCA7CivmsrPmtYEgPiBrYXJ5dXVcIDsKK+WOmuedgCA+IGF0c3VnaVwgOwor5oKq5omNID4gYWt1c2FpXCA7CivmgqrmiYsgPiBha3VzaHVcIDsKK+aEn+WQnyA+IGthbmdpblwgOwor5rK85rCXID4gc2hvdWtpXCA7CivmsrvmsLQgPiBjaGlzdWlcIDsKK+aCquaJgCA+IGFrdXNob1wgOwor6YqD5aOwID4ganV1c2VpXCA7CivljbXnrqEgPiByYW5rYW5cIDsKK+atjumhmCA+IHRhbmdhblwgOwor6buS5a2XID4ga3Vyb2ppXCA7Civpu5LlrZAgPiBob2t1cm9cIDsKK+aCtuaCtiA+IG1vbm1vblwgOwor5oKq5oimID4gYWt1c2VuXCA7Civli5Xou6IgPiBkb3V0ZW5cIDsKK+emgOaApyA+IHJpbnNlaVwgOwor5YuH6YKBID4geXV1bWFpXCA7CivljbHnr6QgPiBraXRva3VcIDsKK+engeWgsSA+IHNoaWhvdVwgOwor5oKy5oSBID4gaGlzaHV1XCA7CivmtojljJYgPiBzaG91a2FcIDsKK+ato+mWjyA+IHNlaWp1blwgOwor5q2j6ZaAID4gc2VpbW9uXCA7CivlvaLoposgPiBrYXRhbWlcIDsKK+WQjOajsiA+IGRvdXNlaVwgOwor6baP6IiOID4ga2Vpc2hhXCA7CivljIXoo4UgPiBob3Vzb3VcIDsKK+W+s+e+qSA+IHRva3VnaVwgOwor6JGJ6YW4ID4geW91c2FuXCA7CivlirTpioAgPiByb3VnaW5cIDsKK+WNsOeusSA+IGluYmFrb1wgOwor5b6M6JGJID4ga291eW91XCA7Civpg7XooosgPiB5dXV0YWlcIDsKK+mFjee3miA+IGhhaXNlblwgOwor5YuH6YCAID4geXV1dGFpXCA7CivlkLnmjJkgPiBzdWlreW9cIDsKK+auiumBhyA+IHNodWd1dVwgOwor6JK86IyrID4gc291Ym91XCA7CivmsLTnrqEgPiBzdWlrYW5cIDsKK+elnuaOiCA+IHNoaW5qdVwgOwor5oKq5oWLID4gYWt1dGFpXCA7Civlj6TmtYEgPiBrb3J5dXVcIDsKK+WNgeiDvSA+IGp1dW5vdVwgOwor6YqA5aGKID4gZ2lua2FpXCA7Civol7vlsZEgPiBtb2t1enVcIDsKK+iZmuWDjyA+IGt5b3pvdVwgOwor6YWS57K+ID4gc2h1c2VpXCA7CivlkIzmoLkgPiBkb3Vrb25cIDsKK+aymea8oCA+IHNhYmFrdVwgOwor5rC0562SID4gc3VpdG91XCA7Civpu5nlpZEgPiBtb2trZWlcIDsKK+aEn+WLlSA+IGthbmRvdVwgOwor5ZCM5qChID4gZG91a291XCA7Civph43mtrIgPiBqdXVla2lcIDsKK+WPpOazqCA+IGtvY2h1dVwgOwor5Y2Y57eaID4gdGFuc2VuXCA7CivlvZPoqbIgPiB0b3VnYWlcIDsKK+WNsOeroCA+IGluc2hvdVwgOwor5q+S6Ju+ID4gZG9rdWdhXCA7Civljp/nlKMgPiBnZW5zYW5cIDsKK+WLneiyoCA+IHNob3VidVwgOwor5Y6f55SfID4gZ2Vuc2VpXCA7Civlu7bplbcgPiBlbmNob3VcIDsKK+mHkeazpSA+IGtvbmRlaVwgOwor55+l6YGHID4gY2hpZ3V1XCA7CivmrYzpm4YgPiBrYXNodXVcIDsKK+axoOeVlCA+IGNoaWhhblwgOwor5Y2m566XID4ga2Vpc2FuXCA7Civpu5LlpbQgPiBrb2t1ZG9cIDsKK+aApeeBqyA+IGt5dXVrYVwgOwor56We5oqAID4gc2hpbmdpXCA7CivpioDlnZEgPiBnaW5rb3VcIDsKK+azleabuSA+IGhvdXNvdVwgOwor5ZCM5p2RID4gZG91c29uXCA7CivljprnlJ8gPiBrb3VzZWlcIDsKK+WQjeacrSA+IG5hZnVkYVwgOwor5oKq5oCnID4gYWt1c2VpXCA7CivljZjntJQgPiB0YW5qdW5cIDsKK+WQjeacmyA+IG1laWJvdVwgOwor5Yun6KqsID4ga2FuemVpXCA7CivlkJHmmpEgPiBrb3VzaG9cIDsKK+iYiuWlpSA+IHVuJydub3VcIDsKK+W/q+ecoCA+IGthaW1pblwgOwor5oKq5b+1ID4gYWt1bmVuXCA7CivljYrnuo8gPiBoYW50ZW5cIDsKK+W+oeiAhSA+IGd5b3NoYVwgOwor5rC056iyID4gc3VpdG91XCA7CivlkIzmnIsgPiBkb3Vib3VcIDsKK+WQiOadvyA+IGdvdWJhblwgOwor5ZCM5pu4ID4gZG91c2hvXCA7Civph5HmsJcgPiBrYW5ha2VcIDsKK+enmOWMvyA+IGhpdG9rdVwgOwor5oSf5YaSID4ga2FuYm91XCA7Civnpo/lr78gPiBmdWt1anVcIDsKK+aAqua8oiA+IGthaWthblwgOwor6YmE5belID4gdGVra291XCA7CivlkIjmnKwgPiBnYXBwb25cIDsKK+mBremboyA+IHNvdW5hblwgOwor6YeN5rC0ID4ganV1c3VpXCA7CivmsLTnpr0gPiBzdWlraW5cIDsKK+aEn+WFiSA+IGthbmtvdVwgOwor6Jma5LydID4ga3lvZGVuXCA7CivlkIjmnI0gPiBhaWZ1a3VcIDsKK+aCoOaCoCA+IHl1dXl1dVwgOwor5Y2X57GzID4gbmFuYmVpXCA7Civpto/nvqQgPiBrZWlndW5cIDsKK+mFjeeuoSA+IGhhaWthblwgOwor5ZOA5YK3ID4gYWlzaG91XCA7Civlj5fms6ggPiBqdWNodXVcIDsKK+WKtOmAoyA+IHJvdXJlblwgOwor5Yum6KiOID4gc291dG91XCA7CivljrPnhLYgPiBnZW56ZW5cIDsKK+mJl+WtkCA+IGthbnNoaVwgOwor5Y2Y57ChID4gdGFua2FuXCA7CivolLXniYggPiB6b3VoYW5cIDsKK+awtOelniA+IHN1aWppblwgOwor5oKq5byKID4gYWt1aGVpXCA7CivlibXpnaIgPiBzb3VtZW5cIDsKK+WKtOi+siA+IHJvdW5vdVwgOwor5b6p57iBID4gZnVrdWVuXCA7CivnpZ7mhI8gPiBzaGluJydpXCA7Civpu73li4kgPiBiaW5iZW5cIDsKK+aEj+WKmyA+IGlyeW9rdVwgOwor5b2T6KGMID4gdG91a291XCA7CivnpoXlsLwgPiB6ZW4nJ25pXCA7CivnpZ3mhI8gPiBzaHVrdWlcIDsKK+azleaWhyA+IGhvdWJ1blwgOwor5Yqg6YeNID4ga2FjaG91XCA7CivlkIzmlq0gPiBkb3VkYW5cIDsKK+WPluawtCA+IHNodXN1aVwgOwor5rWE5Z+fID4gam91aWtpXCA7CivlkI3mlocgPiBtZWlidW5cIDsKK+WNiue0mSA+IGhhbnNoaVwgOwor5byU6L6eID4gY2hvdWppXCA7CivpibHlnZEgPiBrb3Vrb3VcIDsKK+WQjeaVsCA+IG1laXN1dVwgOwor6YWS56iOID4gc2h1emVpXCA7CivlkIzmlocgPiBkb3VidW5cIDsKK+WLneiotCA+IHNob3Vzb1wgOwor5Y6f54q2ID4gZ2Vuam91XCA7CivmtbflhoUgPiBrYWlkYWlcIDsKK+WQjOaVsCA+IGRvdXN1dVwgOwor5rW35YW1ID4ga2FpaGVpXCA7CivlvpPogIUgPiBqdXVzaGFcIDsKK+WMheiUtSA+IGhvdXpvdVwgOwor5b6956ugID4ga2lzaG91XCA7Civmr5vojLggPiBtb3Vqb3VcIDsKK+emheWumiA+IHplbmpvdVwgOwor5ZCI5pa5ID4gYWlrYXRhXCA7Civpu5LlnLAgPiBrdXJvamlcIDsKK+ayiOa4oyA+IGNoaW5zYVwgOwor5b6M6IKiID4ga291c2hpXCA7Civpu5LlnJ8gPiBrb2t1ZG9cIDsKK+WOn+eJiCA+IGdlbnBhblwgOwor6JaE5p2/ID4gdXN1aXRhXCA7Civnn63os4cgPiB0YW5zaGlcIDsKK+mHkeaoqSA+IGtpbmtlblwgOwor5Y2X56uvID4gbmFudGFuXCA7CivlvLfoq4sgPiBnb3VzZWlcIDsKK+W8t+irhyA+IGdvdWRhblwgOwor6YqY5YiAID4gbWVpdG91XCA7CivmgpTmgaggPiBrYWlrb25cIDsKK+mBoOmalCA+IGVua2FrdVwgOwor5rG65r2wID4ga2Vra2FpXCA7CivolqbmjJkgPiBzZW5reW9cIDsKK+m7hOWhtSA+IGtvdWppblwgOwor5YuV6KmeID4gZG91c2hpXCA7Civnp4Dlj6UgPiBzaHV1a3VcIDsKK+mHo+aenCA+IGNob3VrYVwgOwor5Y+k5qW9ID4ga29nYWt1XCA7Civlj7jmm7ggPiBzaGlzaG9cIDsKK+W+jOiAhSA+IGtvdXNoYVwgOwor5YyX6IiqID4gaG9ra291XCA7CivpiI3miY0gPiBkb25zYWlcIDsKK+WQuOW8lSA+IGt5dXVpblwgOwor5buD6aC9ID4gaGFpdGFpXCA7Civol7vloakgPiBtb3NoaW9cIDsKK+mKg+WPoyA+IGp1dWtvdVwgOwor5by36KiYID4ga3lvdWtpXCA7CivmgKXmtL4gPiBreXV1aGFcIDsKK+WJtemWiyA+IHNvdWthaVwgOwor5Y+N5q+bID4gaGFubW91XCA7CivoloTmmq4gPiBoYWt1Ym9cIDsKK+efqeixoSA+IGt1c2hvdVwgOwor5rC0552AID4gbWl6dWdpXCA7CivmuoDjgIUgPiBtYW5tYW5cIDsKK+eikeefsyA+IGhpc2VraVwgOwor5oSa5L2cID4gZ3VzYWt1XCA7CivliqDpgJ8gPiBrYXNva3VcIDsKK+W+jOe9riA+IGtvdWNoaVwgOwor5rGa54mpID4gb2J1dHN1XCA7Civlj7Lmm7ggPiBzaGlzaG9cIDsKK+a0quWkpyA+IGtvdWRhaVwgOwor5Y+w5pysID4gZGFpaG9uXCA7Civpto/ns54gPiBrZWlmdW5cIDsKK+awtOebpCA+IHN1aWJhblwgOwor5YyF6I6WID4gaG91a2VpXCA7Civlkoblk64gPiBob3Vrb3VcIDsKK+ekvOaLnSA+IHJlaWhhaVwgOwor5b6u56yRID4gYmlzaG91XCA7CivliaXpm6IgPiBoYWt1cmlcIDsKK+mBuOmJsSA+IHNlbmtvdVwgOwor5Y6f54K5ID4gZ2VudGVuXCA7CivokpDojbcgPiBzaHV1a2FcIDsKK+WNg+evhyA+IHNlbnBlblwgOwor5Y+k5qC8ID4ga29rYWt1XCA7CivmsbrmuIggPiBrZXNzYWlcIDsKK+WNkeensCA+IGhpc2hvdVwgOwor6YiN5oSfID4gZG9ua2FuXCA7CivljIXojI4gPiBob3VrZWlcIDsKK+avm+iEmyA+IGtlenVuZVwgOwor5q+b6ISaID4ga2Vhc2hpXCA7Civps7PovKYgPiBob3VyZW5cIDsKK+WKtOizhyA+IHJvdXNoaVwgOwor5oCq5q27ID4ga2Fpc2hpXCA7CivnoLLoiaYgPiBob3VrYW5cIDsKK+engeWIkSA+IHNoaWtlaVwgOwor6YWU55y8ID4gc3VpZ2FuXCA7CivlubzpvaIgPiB5b3VyZWlcIDsKK+W7u+mAgSA+IGthaXNvdVwgOwor5bu66YCgID4ga2Vuem91XCA7CivliLrprZogPiB0b2dldW9cIDsKK+mDqOiQvSA+IGJ1cmFrdVwgOwor5Y+35pWwID4gZ291c3V1XCA7CivpioPlibUgPiBqdXVzb3VcIDsKK+elluW7nyA+IHNvYnlvdVwgOwor5Y2155SfID4gcmFuc2VpXCA7CivpioPliaMgPiBqdXVrZW5cIDsKK+WPguauvyA+IHNhbmRlblwgOwor5byV6LKsID4gaW5zZWtpXCA7Civol6nlo6sgPiBoYW5zaGlcIDsKK+awtOeXmCA+IHN1aXRvdVwgOwor6YeR5p+RID4ga2lua2FuXCA7Civnn63oqakgPiB0YW5zaGlcIDsKK+aBkuaYnyA+IGtvdXNlaVwgOwor5oOF5aCxID4gam91aG91XCA7CivpupflrrkgPiByZWl5b3VcIDsKK+mEreeuiyA+IHRlaXNlblwgOwor5rC055axID4gc3VpaG91XCA7Civlj6LmnpcgPiBzb3VyaW5cIDsKK+WPs+aWhyA+IHl1dWJ1blwgOwor6YqD5YiRID4ganV1a2VpXCA7Civpg7XoiLkgPiB5dXVzZW5cIDsKK+WQjeaJiyA+IG1laXNodVwgOwor5b6M57eoID4ga291aGVuXCA7Civnp4HlhbUgPiBzaGloZWlcIDsKK+WQjeaJgCA+IG1laXNob1wgOwor6YKC6YCFID4ga2Fpa291XCA7Civlj6TmnKggPiBrb2Jva3VcIDsKK+mHkeadryA+IGtpbnBhaVwgOwor55+l6KyAID4gY2hpYm91XCA7Civnp4HlhZogPiBzaGl0b3VcIDsKK+WQjOaJgCA+IGRvdXNob1wgOwor5ZCM5oi/ID4gZG91Ym91XCA7CivlkJvmgakgPiBrdW4nJ29uXCA7CivlkIjmirEgPiBnb3Vob3VcIDsKK+aDs+WIsCA+IHNvdXRvdVwgOwor5Y6f5r2cID4gZ2Vuc2VuXCA7CivphqTmsrkgPiBzaG91eXVcIDsKK+W+ruemhCA+IGJpcm9rdVwgOwor56KB55+zID4gZ29pc2hpXCA7CivlvozntpkgPiBrb3VrZWlcIDsKK+azsOW5syA+IHRhaWhlaVwgOwor5Y+w5pWwID4gZGFpc3V1XCA7CivmsLTnlLAgPiBzdWlkZW5cIDsKK+a1t+S4iiA+IGthaWpvdVwgOwor5rC055SjID4gc3Vpc2FuXCA7CivlubTpvaIgPiBuZW5yZWlcIDsKK+awtOeUnyA+IHN1aXNlaVwgOwor6YG86YGgID4gcnlvdWVuXCA7CivlupXprZogPiBzb2tvdW9cIDsKK+aBkuaVsCA+IGtvdXN1dVwgOwor56eY5LitID4gaGljaHV1XCA7CivliY3poIUgPiB6ZW5rb3VcIDsKK+WPouabuCA+IHNvdXNob1wgOwor5q666I+MID4gc2Fra2luXCA7Civlu7vou6IgPiBrYWl0ZW5cIDsKK+asoOmZpSA+IGtla2thblwgOwor6YqY5LuZID4gbWVpc2VuXCA7Civnn63oposgPiB0YW5rZW5cIDsKK+WRvOWQuCA+IGtva3l1dVwgOwor5byx6KGMID4gamFra291XCA7Civlkb3lkI0gPiBtZWltZWlcIDsKK+emheWggiA+IHplbmRvdVwgOwor5ZCI5oimID4ga2Fzc2VuXCA7CivlkbzlkI0gPiB5b2JpbmFcIDsKK+atk+mAgSA+IGthbnNvdVwgOwor5ZCI5oiQID4gZ291c2VpXCA7CivmsbrmsLQgPiBrZXNzdWlcIDsKK+WQjOaGgiA+IGRvdXl1dVwgOwor6YqF5YOPID4gZG91em91XCA7CivlkIzmhbYgPiBkb3VrZWlcIDsKK+WNmOecvCA+IHRhbmdhblwgOwor5q2T6L+OID4ga2FuZ2VpXCA7Civph43mm7kgPiBqdXVzb3VcIDsKK+WJjemdoiA+IHplbm1lblwgOwor5Y+k5piUID4ga29zZWtpXCA7CivokrjnsaAgPiBzZWlyb3VcIDsKK+avlOe/vCA+IGhpeW9rdVwgOwor5ZCI5oayID4gZ291a2VuXCA7CivljZjnm7ggPiB0YW5zb3VcIDsKK+mJhOWhlCA+IHRldHRvdVwgOwor5ZCM5oSfID4gZG91a2FuXCA7CivmtarkurogPiByb3VuaW5cIDsKK+WJlOmZpCA+IHRla2lqb1wgOwor5ZCI5oaOID4gYWluaWt1XCA7CivmsqHmm7ggPiBib3NzaG9cIDsKK+asoemVtyA+IGppY2hvdVwgOwor6be55rS+ID4gdGFrYWhhXCA7CivmgqrlprsgPiBha3VzYWlcIDsKK+m6l+WnvyA+IHJlaXNoaVwgOwor5YmN6Zu7ID4gemVuZGVuXCA7Civnn6XoposgPiBjaGlrZW5cIDsKK+axuuatuyA+IGtlc3NoaVwgOwor5oOz5YOPID4gc291em91XCA7Civlj5bmnZAgPiBzaHV6YWlcIDsKK+WQjOaDhSA+IGRvdWpvdVwgOwor5Yi26aatID4gc2VpZ3lvXCA7CivlkJHmgKcgPiBrb3VzZWlcIDsKK+iYreS6uiA+IHJhbmppblwgOwor5q6/6IiOID4gZGVuc2hhXCA7Civoj4zpoZ4gPiBraW5ydWlcIDsKK+elnuWuriA+IGppbmd1dVwgOwor5oKy5aKDID4gaGlreW91XCA7CivljrPmraMgPiBnZW5zZWlcIDsKK+iQveiqniA+IHJha3Vnb1wgOwor6buE5ZC7ID4ga291ZnVuXCA7Civph43mmJ8gPiBqdXVzZWlcIDsKK+WPo+aVsCA+IGtvdXN1dVwgOwor5Y2154q2ID4gcmFuam91XCA7CivmraPos5MgPiBzZWloaW5cIDsKK+W8leiovCA+IGluc2hvdVwgOwor5oKq5aSpID4gYWt1dGVuXCA7Civlvoznr4cgPiBrb3VoZW5cIDsKK+m7hOWPoyA+IGtvdWtvdVwgOwor5ZCM5oCnID4gZG91c2VpXCA7Civmgqrlo7AgPiBha3VzZWlcIDsKK+azsOWxsSA+IHRhaXphblwgOwor6YGt6YGHID4gc291Z3V1XCA7Civph43mlocgPiBqdXVidW5cIDsKK+WJiumZpCA+IHNha3Vqb1wgOwor5Y2K552hID4gaGFuc3VpXCA7CivlkIzlv5cgPiBkb3VzaGlcIDsKK+WQvuWmuSA+IHdhZ2ltb1wgOwor5Y2K55y8ID4gaGFuZ2FuXCA7CivlkIjmgKcgPiBhaXNob3VcIDsKK+engeS6uiA+IHNoaWppblwgOwor5Y+z5oqYID4gdXNldHN1XCA7Civnpa3lo4cgPiBzYWlkYW5cIDsKK+WOn+ayuSA+IGdlbicneXVcIDsKK+ats+ioiCA+IHNhaWtlaVwgOwor5oCn5qC5ID4gc2hvdW5lXCA7CivokZvol6QgPiBrYXR0b3VcIDsKK+WNiuebsiA+IGhhbm1vdVwgOwor5b6M56uvID4ga291dGFuXCA7CivmtYTlhpkgPiBqb3VzaGFcIDsKK+WQjOW9oiA+IGRvdWtlaVwgOwor5YmN6ZaAID4gemVubW9uXCA7CivmgqrloLQgPiB3YXJ1YmFcIDsKK+aCquWgsSA+IGFrdWhvdVwgOwor5rOV5bu3ID4gaG91dGVpXCA7Civlj7PmiYsgPiBtaWdpdGVcIDsKK+WPjOabuCA+IHNvdXNob1wgOwor5b+D55CGID4gc2hpbnJpXCA7Civlj4vmnIsgPiB5dXVob3VcIDsKK+W/q+a8oiA+IGthaWthblwgOwor5Y2H55uuID4gbWFzdW1lXCA7CivnpLzluL0gPiByZWlib3VcIDsKK+WHuum8uyA+IGRlYmFuYVwgOwor5Y+J5pyoID4gbWF0YWdpXCA7Civmranoqr8gPiBob2Nob3VcIDsKK+W6l+mgrSA+IHRlbnRvdVwgOwor56Wt5aC0ID4gc2Fpam91XCA7Civlub3prYIgPiB5dXVrb25cIDsKK+elnuWogSA+IHNoaW4nJ2lcIDsKK+WPiOacqCA+IG1hdGFnaVwgOwor5bm86a2aID4geW91Z3lvXCA7CivliLrpnZIgPiBzaGlzZWlcIDsKK+WOn+awkSA+IGdlbm1pblwgOwor5Ym16YCgID4gc291em91XCA7CivmgbDluqYgPiBjaG91ZG9cIDsKK+WQueWljyA+IHN1aXNvdVwgOwor5ZCN5bqXID4gbWVpdGVuXCA7CivliLjpnaIgPiBrZW5tZW5cIDsKK+WOn+avmyA+IGdlbm1vdVwgOwor6YqD5Li4ID4ganV1Z2FuXCA7CivlubLpsYggPiBoaWRhcmFcIDsKK+WQjOW6lyA+IGRvdXRlblwgOwor5Y+v5oiQID4ga2FuYXJpXCA7CivliLDpoK0gPiB0b3V0b3VcIDsKK+WQiOW8gSA+IGdvdWJlblwgOwor5rOV5birID4gaG91c2hpXCA7CivlvIHoq5YgPiBiZW5yb25cIDsKK+WPjeaYoCA+IGhhbicnZWlcIDsKK+WQjOW5tCA+IGRvdW5lblwgOwor5rOV5biWID4gaG91am91XCA7CivmtYHlhIAgPiByeXV1Z2lcIDsKK+ato+irliA+IHNlaXJvblwgOwor5oOF5Y+yID4gam91c2hpXCA7CivmtLvlhpkgPiBrYXNzaGFcIDsKK+awtOeFriA+IG1penVuaVwgOwor5Yqx6KGMID4gcmVpa291XCA7Civmg4fljpogPiB0b25rb3VcIDsKK+W6p+mVtyA+IHphY2hvdVwgOwor5oGQ5oe8ID4ga3lvdWt1XCA7CivliKXppKggPiBiZWtrYW5cIDsKK+avkue0oCA+IGRva3Vzb1wgOwor5ZCN5belID4gbWVpa291XCA7CivlkIzluIIgPiBkb3VzaGlcIDsKK+awvua/qyA+IGhhbnJhblwgOwor5bqV6Z2iID4gdGVpbWVuXCA7Civlj4zmlrkgPiBzb3Vob3VcIDsKK+WNiueVsyA+IGhhbmpvdVwgOwor56C057SEID4gaGF5YWt1XCA7CivlvbznrYkgPiBrYXJlcmFcIDsKK+mBjumHjyA+IGthcnlvdVwgOwor5Y6Y5q+bID4gcmlubW91XCA7Civlj43mlbAgPiBoYW5zdXVcIDsKK+awkeeUnyA+IG1pbnNlaVwgOwor5q+b566hID4gbW91a2FuXCA7CivljYrnlJ8gPiBoYW5zZWlcIDsKK+ato+iokyA+IHNlaWt1blwgOwor5Y+N5pS7ID4gaGFua291XCA7CivljrvmnaUgPiBreW9yYWlcIDsKK+W8geinoyA+IGJlbmthaVwgOwor6YGL6YedID4gdW5zaGluXCA7CivpgY7phbcgPiBrYWtva3VcIDsKK+WPpOaJiyA+IGZ1cnV0ZVwgOwor5q2j6KejID4gc2Vpa2FpXCA7CivliLbpmZAgPiBzZWlnZW5cIDsKK+avm+etiyA+IGtlc3VqaVwgOwor56S+5bGLID4gc2hhb2t1XCA7CivmsJfnkIMgPiBraWt5dXVcIDsKK+WPr+aDnCA+IGF0dGFyYVwgOwor6YCj6ZqKID4gcmVudGFpXCA7CivpgYrph5EgPiB5dXVraW5cIDsKK+WPo+aJjSA+IGtvdXNhaVwgOwor6YaH5q2jID4ganVuc2VpXCA7Civmg4Xli6IgPiBqb3VzZWlcIDsKK+W5vemmmSA+IHl1dWtvdVwgOwor6YeR5omHID4ga2luc2VuXCA7CivmraPoppYgPiBzZWlzaGlcIDsKK+WQm+WtkCA+IGt1bnNoaVwgOwor5q2i6KazID4gc2hpa2FuXCA7CivliKnpnpggPiByaXpheWFcIDsKK+WIpemghSA+IGJla2tvdVwgOwor5q2j6KW/ID4gc2Vpc2VpXCA7Civnpo/liKkgPiBmdWt1cmlcIDsKK+mBhemIjSA+IGNoaWRvblwgOwor5Y+W5o2oID4gc2h1c2hhXCA7CivliaPpgZMgPiBrZW5kb3VcIDsKK+aAqOaVtSA+IG9udGVraVwgOwor5b6q55KwID4ganVua2FuXCA7Civlu7roqIAgPiBrZW5nZW5cIDsKK+aBi+aEmyA+IHJlbicnYWlcIDsKK+asoOmFjSA+IGtlcHBhaVwgOwor6bWs56iLID4gaG91dGVpXCA7CivolYPmm7ggPiBiYW5zaG9cIDsKK+aBkuaApyA+IGtvdXNlaVwgOwor5bu76KanID4ga2FpcmFuXCA7Civlkb3ku6QgPiBtZWlyZWlcIDsKK+WQjeWxsSA+IG1laXphblwgOwor55yf6bSoID4gbWFnYW1vXCA7CivpgKPplqIgPiByZW5rYW5cIDsKK+WQkeWvkiA+IGtvdWthblwgOwor5rGA5riaID4gdGVpc2hvXCA7CivmgYvmg4UgPiByZW5qb3VcIDsKK+atk+irhyA+IGthbmRhblwgOwor5oGQ5oCWID4ga3lvdWZ1XCA7CivmraPoo4UgPiBzZWlzb3VcIDsKK+WPguaUvyA+IHNhbnNlaVwgOwor5ZCM5bGFID4gZG91a3lvXCA7CivliJ3poK0gPiBzaG90b3VcIDsKK+mBhemFjSA+IGNoaWhhaVwgOwor5buD6YCAID4gaGFpdGFpXCA7CivmsYHmtrIgPiBqdXVla2lcIDsKK+mAmumZoiA+IHRzdXVpblwgOwor5oG15a2YID4ga2Vpem9uXCA7CivoloTlubggPiBoYWtrb3VcIDsKK+WQjOWwgSA+IGRvdWZ1dVwgOwor5Y+w5b2iID4gZGFpa2VpXCA7Civms5XlrpogPiBob3V0ZWlcIDsKK+azleWumCA+IGhvdWthblwgOwor5oGL5oGLID4gcmVucmVuXCA7Civnn7Poi7EgPiBzZWtpZWlcIDsKK+W9qeeuoSA+IHNhaWthblwgOwor6YGg6LazID4gZW5zb2t1XCA7CivljLrnlLsgPiBrdWtha3VcIDsKK+WOs+aakSA+IGdlbnNob1wgOwor5qyh6YCxID4gamlzaHV1XCA7CivliY3ph5EgPiBtYWVraW5cIDsKK+mHjeaFiyA+IGp1dXRhaVwgOwor5q276JS1ID4gc2hpem91XCA7CivmsrvlubMgPiBjaGloZWlcIDsKK+a0i+WTgSA+IHlvdWhpblwgOwor5ZCM5a6aID4gZG91dGVpXCA7CivlkI3lrZcgPiBteW91amlcIDsKK+WJpei6qyA+IG11a2ltaVwgOwor5rC05rqWID4gc3VpanVuXCA7CivmsLTmupAgPiBzdWlnZW5cIDsKK+emgeWItiA+IGtpbnNlaVwgOwor6YCB6aKoID4gc291ZnV1XCA7CivpgbroqIAgPiB5dWlnb25cIDsKK+aBr+WtkCA+IG11c3Vrb1wgOwor5oGp5a+1ID4gb25jaG91XCA7CivpgYXpgYUgPiBjaGljaGlcIDsKK+aCquWQjSA+IGFrdW1laVwgOwor6JS15pysID4gem91aG9uXCA7CivljrPml6ggPiBnZW5zaGlcIDsKK+WOn+ahiCA+IGdlbicnYW5cIDsKK+mHjeaCoyA+IGp1dWthblwgOwor5Y+N5oqXID4gaGFua291XCA7CivnpZblm70gPiBzb2tva3VcIDsKK+W7g+i7iiA+IGhhaXNoYVwgOwor6JS15pu4ID4gem91c2hvXCA7Civmgqrlj4sgPiBha3V5dXVcIDsKK+mFlOa8oiA+IHN1aWthblwgOwor6YeN5oGpID4gY2hvdW9uXCA7CivlubTpoK0gPiBuZW50b3VcIDsKK+ays+W6iiA+IGthc2hvdVwgOwor5rSX5YmkID4gc2VuemFpXCA7Civlub3pnIogPiB5dXVyZWlcIDsKK+elreWPuCA+IHNhaXNoaVwgOwor5YuY6ICDID4ga2Fua291XCA7CivmgZLluLggPiBrb3Vqb3VcIDsKK+aCsuWKhyA+IGhpZ2VraVwgOwor5bqn6YeRID4gemFnYW5lXCA7CivnpoXlg6cgPiB6ZW5zb3VcIDsKK+WPo+W+hCA+IGtvdWtlaVwgOwor5Y+M5omLID4gbW9yb3RlXCA7Civnn7Poho8gPiBzZWtrb3VcIDsKK+efreiJhyA+IHRhbnRlaVwgOwor5rC05ravID4gc3VpZ2FpXCA7Civlj43miKYgPiBoYW5zZW5cIDsKK+WIjumguCA+IGZ1bmtlaVwgOwor5bqm6YePID4gZG9yeW91XCA7CivokrznlJ8gPiBzb3VzZWlcIDsKK+WIhumkqCA+IGJ1bmthblwgOwor5YiG6aSQID4gYnVuc2FuXCA7CivpgYrou40gPiB5dXVndW5cIDsKK+WOn+advyA+IGdlbnBhblwgOwor6YO156iOID4geXV1emVpXCA7Civph47lv4MgPiB5YXNoaW5cIDsKK+WLg+iIiCA+IGJva2tvdVwgOwor5YyW55+zID4ga2FzZWtpXCA7CivnpL7lpJYgPiBzaGFnYWlcIDsKK+aAr+aHpiA+IGt5b3VkYVwgOwor5Y+j5byBID4ga291YmVuXCA7Civlj6Tlu58gPiBrb2J5b3VcIDsKK+W9k+expCA+IHRvdXNlblwgOwor5bqD6ZaTID4gaGlyb21hXCA7Civljp/mnKwgPiBnZW5wb25cIDsKK+awtOa0lyA+IHN1aXNlblwgOwor5rC35rKzID4gaHlvdWdhXCA7CivphrjmiJAgPiBqb3VzZWlcIDsKK+WPguaLnSA+IHNhbnBhaVwgOwor5bmz6Z2iID4gaGVpbWVuXCA7CivlubPpnZkgPiBoZWlzZWlcIDsKK+WQjOWnkyA+IGRvdXNlaVwgOwor6JeJ5Y+jID4gc2hha291XCA7Civljp/mm7ggPiBnZW5zaG9cIDsKK+WQq+WXvSA+IGdhbnNvdVwgOwor5rC05rOhID4gc3VpaG91XCA7CivlkLvlkIggPiBmdW5nb3VcIDsKK+mDt+ekviA+IGdvdXNoYVwgOwor6YCB6Zu7ID4gc291ZGVuXCA7CivliIbpoZ4gPiBidW5ydWlcIDsKK+ayu+WxsSA+IGNoaXNhblwgOwor5b6M55SfID4gZ29zaG91XCA7CivmgbDlpb0gPiBrYWtrb3VcIDsKK+WKoOiWrCA+IGtheWFrdVwgOwor5b+r5qW9ID4ga2VyYWt1XCA7Civlj43mhJ8gPiBoYW5rYW5cIDsKK+WQjOWlvSA+IGRvdWtvdVwgOwor6Jas5ZySID4geWFrdWVuXCA7Civol6nkvq8gPiBoYW5rb3VcIDsKK+aBr+WlsyA+IHNva3Vqb1wgOwor5rOV5aSWID4gaG91Z2FpXCA7CivpiYTlgpggPiB0ZXNzYW5cIDsKK+axn+adkSA+IGtvdXNvblwgOwor5b+15qChID4gbmVua291XCA7CivljZjmvKIgPiB0YW5rYW5cIDsKK+ejgeadnyA+IGppc29rdVwgOwor5ZCN5aSnID4gbWVpZGFpXCA7Civlub3plpEgPiB5dXVrYW5cIDsKK+W5vemWiSA+IHl1dWhlaVwgOwor5b+N5rOVID4gbmlucG91XCA7Civlub3ploAgPiB5dXVtb25cIDsKK+WPguaIpiA+IHNhbnNlblwgOwor5ZCM5aSnID4gZG91ZGFpXCA7Civli7LnrYkgPiBrdW50b3VcIDsKK+W9ueebriA+IHlha3VtZVwgOwor5oOF5Lq6ID4gam91bmluXCA7CivokZfogIUgPiBjaG9zaGFcIDsKK+eepeimiyA+IGJla2tlblwgOwor5ZCN5aOwID4gbWVpc2VpXCA7Civmg4XkuqQgPiBqb3Vrb3VcIDsKK+WPpOW3oyA+IGZ1cnVzdVwgOwor5ZCN5aOrID4gbWVpc2hpXCA7CivpgbXooYwgPiBqdW5rb3VcIDsKK+mAgOmZoyA+IHRhaWppblwgOwor5Ymj6LGqID4ga2VuZ291XCA7CivmsLTmsJcgPiBtaXp1a2VcIDsKK+WQjOWjqyA+IGRvdXNoaVwgOwor5bm06ZmQID4gbmVuZ2VuXCA7Civlj4vmg4UgPiB5dXVqb3VcIDsKK+ayouW6tSA+IHRha3VhblwgOwor6YGO6LOeID4ga2FzaG91XCA7Civmr5Lnn6IgPiBkb2t1eWFcIDsKK+WOs+aOoiA+IGdlbnRhblwgOwor5ZCI5aWPID4gZ2Fzc291XCA7CivmgrLlgrcgPiBoaXNob3VcIDsKK+mHkeW3pSA+IGtpbmtvdVwgOwor5q+b55quID4ga2VnYXdhXCA7CivljZfmup8gPiBuYW5tZWlcIDsKK+iRieiFiyA+IHlvdWVraVwgOwor5YmN6LuNID4gemVuZ3VuXCA7Civli4fogIUgPiB5dXVzaGFcIDsKK+WJjei7iiA+IHplbnNoYVwgOwor5rC05q+NID4ga3VyYWdlXCA7Civnm67pvLsgPiBtZWhhbmFcIDsKK+mDveedoyA+IHRvdG9rdVwgOwor5Y2X5rqAID4gbmFubWFuXCA7CivmgqrlhZogPiBha3V0b3VcIDsKK+WPsuWumCA+IHNoaWthblwgOwor6YGL6LODID4gdW5jaGluXCA7CivmgKfmhJ8gPiBzZWlrYW5cIDsKK+awtOatuyA+IHN1aXNoaVwgOwor5Y6f5paHID4gZ2VuYnVuXCA7CivpgYros4cgPiB5dXVzaGlcIDsKK+m6puS+oSA+IGJha3VrYVwgOwor6YeN5belID4ganV1a291XCA7Civnn6Xog70gPiBjaGlub3VcIDsKK+WJteimiyA+IHNvdWtlblwgOwor56Wt5YW4ID4gc2FpdGVuXCA7Civli5Xnt5ogPiBkb3VzZW5cIDsKK+W/teabuCA+IG5lbnNob1wgOwor5bm06ZaTID4gbmVua2FuXCA7Civlv4XmsrsgPiBoaXRjaGlcIDsKK+emgeS7pCA+IGtpbnJlaVwgOwor5q2v6IyOID4gaGFndWtpXCA7CivmgKfmg4UgPiBzZWlqb3VcIDsKK+aCquWDpyA+IGFrdXNvdVwgOwor5b6T54qvID4ganV1aGFuXCA7CivnpZ7ljJYgPiBzaGlua2FcIDsKK+iXqeS4uyA+IGhhbnNodVwgOwor5Y2g5rOVID4gc2VucG91XCA7Civnn6XogrIgPiBjaGlpa3VcIDsKK+ekvuWboyA+IHNoYWRhblwgOwor5Yq56IO9ID4ga291bm91XCA7CivliIbpmpsgPiBidW56YWlcIDsKK+mBgei1sCA+IHRvbnNvdVwgOwor6JC16IujID4gY2hpc2hhXCA7CivlkInloLEgPiBraXBwb3VcIDsKK+WIhumaiiA+IGJ1bnRhaVwgOwor5Y+N5b2xID4gaGFuJydlaVwgOwor5oCg5oWiID4gdGFpbWFuXCA7CivnoLTnm64gPiB3YXJlbWVcIDsKK+mAoOmFkiA+IHpvdXNodVwgOwor5Ym16KO9ID4gc291c2VpXCA7CivliIbpmaIgPiBidW4nJ2luXCA7CivnpZ7liqkgPiBzaGluam9cIDsKK+WIhumZkCA+IGJ1bmdlblwgOwor5Y2X5rW3ID4gbmFua2FpXCA7CivlkIzlnosgPiBkb3VrZWlcIDsKK+aAneaFriA+IHNoaXJ5b1wgOwor5rG65oimID4ga2Vzc2VuXCA7CivpgKPpgqYgPiByZW5wb3VcIDsKK+WHsemiqCA+IGdhaWZ1dVwgOwor5oCo5b+1ID4gb24nJ25lblwgOwor5YyW55SfID4ga2VzaG91XCA7Civph5HlsbEgPiBraW56YW5cIDsKK+efpeiAhSA+IGNoaXNoYVwgOwor5ZCm5ZCmID4gaXlhaXlhXCA7CivljrPmiJIgPiBnZW5rYWlcIDsKK+WHtumfsyA+IGt5b3VpblwgOwor5b+D5rCXID4gc2hpbmtpXCA7Civmgp/lhaUgPiBnb255dXVcIDsKK+WQjOWcsCA+IGRvdWNoaVwgOwor56Gd54WZID4gc2hvdWVuXCA7CivphY3msLQgPiBoYWlzdWlcIDsKK+mAuOi2syA+IGlzc29rdVwgOwor5oCd5oOzID4gc2hpc291XCA7CivnoKXnn7MgPiB0b2lzaGlcIDsKK+WIh+mWiyA+IHNla2thaVwgOwor5bm06ZGRID4gbmVua2FuXCA7Civlv4XmrbsgPiBoaXNzaGlcIDsKK+WPpOWutiA+IGZ1cnVpZVwgOwor5b2T56S+ID4gdG91c2hhXCA7CivokL3og6QgPiByYWt1aW5cIDsKK+iWrOWRsyA+IHlha3VtaVwgOwor5rC05qe9ID4gc3Vpc291XCA7Civpg47nrYkgPiByb3Vkb3VcIDsKK+mHjeWxpCA+IGp1dXNvdVwgOwor5YmN6LOiID4gemVua2VuXCA7CivnnLzpj6EgPiBtZWdhbmVcIDsKK+ecn+mdoiA+IG1hdG9tb1wgOwor5oKq5L6LID4gYWt1cmVpXCA7Civlj6PlrqMgPiBrb3VzZW5cIDsKK+efoue+vSA+IHlhYmFuZVwgOwor55yf6Z2SID4gbWFzc2FvXCA7CivljYrmuJsgPiBoYW5nZW5cIDsKK+awl+a1gSA+IGtpcnl1dVwgOwor6YCy6LevID4gc2hpbnJvXCA7Civlj6TlraYgPiBrb2dha3VcIDsKK+WPt+WkliA+IGdvdWdhaVwgOwor6JK854S2ID4gc291emVuXCA7CivmrKDorJsgPiBrZWtrb3VcIDsKK+iVqeWwvSA+IHRvdWppblwgOwor5Y+N5bidID4gaGFudGVpXCA7CivmrbvogIUgPiBzaGlzaGFcIDsKK+W/q+aZtCA+IGthaXNlaVwgOwor6YGU6KazID4gdGFra2FuXCA7Civlh7rpmpsgPiBkZWdpd2FcIDsKK+WPjuW3riA+IHNodXVzYVwgOwor5b2i55u4ID4ga2Vpc291XCA7CivmsbrmhI8gPiBrZXRzdWlcIDsKK+W6lei+uiA+IHRlaWhlblwgOwor6YGT6KazID4gZG91a2FuXCA7CivlkJvlkb0gPiBrdW5tZWlcIDsKK+mBlOimiyA+IHRha2tlblwgOwor6YeO5a6/ID4gbm9qdWt1XCA7CivpgYroqqwgPiB5dXV6ZWlcIDsKK+efree3qCA+IHRhbnBlblwgOwor5Ymq6KOBID4gc2Vuc2FpXCA7CivokZvnsokgPiBrdXp1a29cIDsKK+aCquS7pCA+IGFrdXJlaVwgOwor6YCa6YGOID4gdHN1dWthXCA7CivmgJ3lv7UgPiBzaGluZW5cIDsKK+mAmumBiyA+IHRzdXV1blwgOwor6JaE5aGpID4gdXN1amlvXCA7CivnnJ/pmpsgPiBtYWdpd2FcIDsKK+WQhOWbniA+IGtha2thaVwgOwor5oKq5Lq6ID4gYWt1bmluXCA7CivmrbvnvaogPiBzaGl6YWlcIDsKK+mAo+i8iSA+IHJlbnNhaVwgOwor56Wd5YSAID4gc2h1dWdpXCA7CivmsLTmo7IgPiBzdWlzZWlcIDsKK+atpuiHoyA+IGJ1c2hpblwgOwor5Yil6YK4ID4gYmV0dGVpXCA7Civlv6vmlrkgPiBrYWlob3VcIDsKK+azouWPiiA+IGhha3l1dVwgOwor6YCZ6YCZID4gaG91aG91XCA7Civljp/mi6AgPiBnZW5reW9cIDsKK+iWqOWOuyA+IGtvdWt5b1wgOwor5byp57SaID4gZG9reXV1XCA7Civmr5vnjokgPiBrZWRhbWFcIDsKK+m6l+S6uiA+IHJlaWppblwgOwor6YeM5a2QID4gc2F0b2dvXCA7CivnpL7lkb0gPiBzaGFtZWlcIDsKK+W/g+apnyA+IHNoaW5raVwgOwor5q2v6IKJID4gaGFuaWt1XCA7Civojbfpno0gPiBuaWd1cmFcIDsKK+efs+eyiSA+IGlzaGlrb1wgOwor5oKp5LmxID4gbm91cmFuXCA7CivmsJHms5UgPiBtaW5wb3VcIDsKK+mFuOaVlyA+IHNhbnBhaVwgOwor5Y6E5pelID4geWFrdWJpXCA7CivlkYjkuIogPiB0ZWlqb3VcIDsKK+WNl+aspyA+IG5hbicnb3VcIDsKK+mHkeWpmiA+IGtpbmtvblwgOwor6YGK6KanID4geXV1cmFuXCA7CivmuIXjgIUgPiBzZWlzZWlcIDsKK+W7u+iIuSA+IGthaXNlblwgOwor5YyN55CDID4gaG9reXV1XCA7Civpga7olL0gPiBzaGFoZWlcIDsKK+ekvuWQjSA+IHNoYW1laVwgOwor6Jas5Yq5ID4geWFra291XCA7Civokaznpa0gPiBzb3VzYWlcIDsKK+aAneW8gSA+IHNoaWJlblwgOwor5Yil6YCBID4gYmVzc291XCA7CivnpL7lj7IgPiBzaGFzaGlcIDsKK+elreS4uyA+IHNhaXNodVwgOwor5rSL5LiKID4geW91am91XCA7CivmsLTmoJMgPiBzdWlzZW5cIDsKK+iPr+ihqCA+IGthaHlvdVwgOwor5ZCN5ZOBID4gbWVpaGluXCA7CivokaznpLwgPiBzb3VyZWlcIDsKK+mAk+mAgSA+IHRlaXNvdVwgOwor56S+5Y+LID4gc2hheXV1XCA7Civpg6HnnIwgPiBndW5rZW5cIDsKK+mHjeWpmiA+IGp1dWtvblwgOwor5byb57epID4gY2hpa2FuXCA7Civlv5fmnJsgPiBzaGlib3VcIDsKK+mAgemHkSA+IHNvdWtpblwgOwor5Y6a5omLID4gYXRzdWRlXCA7CivluZXplpMgPiBtYWt1YWlcIDsKK+W5tOmHkSA+IG5lbmtpblwgOwor5Y+N5bCEID4gaGFuc2hhXCA7Civlj43lr74gPiBoYW50YWlcIDsKK+awt+acnyA+IGh5b3VraVwgOwor5oKf5LqGID4gZ29yeW91XCA7Civlv7/mh6MgPiBmdW5tYW5cIDsKK+azleWPtyA+IGhvdWdvdVwgOwor5Yqj6ICFID4gcmVzc2hhXCA7Civmrbvnt5ogPiBzaGlzZW5cIDsKK+WPjOWwhCA+IHNvdXNoYVwgOwor5ZCN5ZCfID4gbWVpZ2luXCA7Civlj4zlr74gPiBzb3V0YWlcIDsKK+WQjeWQmyA+IG1laWt1blwgOwor55uu6auYID4gbWVkYWthXCA7Civov5Tpm7sgPiBoZW5kZW5cIDsKK+W5vemCgyA+IHl1dXN1aVwgOwor6YiN5YiAID4gZG9udG91XCA7CivnoLTnjYQgPiBoYWdva3VcIDsKK+WPo+WkliA+IGtvdWdhaVwgOwor5rK55ZynID4geXVhdHN1XCA7Civlh4zpp5UgPiByeW91Z2FcIDsKK+WQjOWQjSA+IGRvdW1laVwgOwor55+t56+HID4gdGFucGVuXCA7Civlja/mnIggPiB1ZHp1a2lcIDsKK+awtOacqCA+IG1penVraVwgOwor5Y2K5q27ID4gaGFuc2hpXCA7CivnoILnpKsgPiBzYXJla2lcIDsKK+asoeihqCA+IGppaHlvdVwgOwor5oCS5by1ID4gZG9jaG91XCA7CivlkITlk6EgPiBrYWt1aW5cIDsKK+W5tOmFjSA+IG5lbnBhaVwgOwor5YmN6KiAID4gemVuZ2VuXCA7CivnoazmsLQgPiBrb3VzdWlcIDsKK+elnuS7oyA+IGppbmRhaVwgOwor6YGK6KGMID4geXV1a291XCA7Civlj6TloqggPiBrb2Jva3VcIDsKK+WPsOWcsCA+IGRhaWNoaVwgOwor5YiG6YqFID4gZnVuZG91XCA7CivpgLjoqbEgPiBpdHN1d2FcIDsKK+iNiemtmiA+IHNvdWd5b1wgOwor5Y2z5pmCID4gc29rdWppXCA7CivmsLTmm5wgPiBzdWl5b3VcIDsKK+mHjeWljyA+IGp1dXNvdVwgOwor5byB6ICFID4gYmVuc2hhXCA7CivpgJrot68gPiB0c3V1cm9cIDsKK+iTruaguSA+IHJlbmtvblwgOwor5bqt6KiTID4gdGVpa2luXCA7Civlj4zlrZAgPiBmdXRhZ29cIDsKK+WQiOWQjCA+IGdvdWRvdVwgOwor6YeN5aSnID4ganV1ZGFpXCA7Civov5HpmqMgPiBraW5yaW5cIDsKK+elnuS6iyA+IHNoaW5qaVwgOwor5YeN6aSSID4gdG91ZGFpXCA7Civph43lpIkgPiBqdXVoZW5cIDsKK+avkueJmSA+IGRva3VnYVwgOwor5b+M5pyNID4ga2lmdWt1XCA7CivlvpLmuIkgPiB0b3Nob3VcIDsKK+WKn+e9qiA+IGtvdXphaVwgOwor6YCB6YKEID4gc291a2FuXCA7CivojZLppqwgPiBhcmF1bWFcIDsKK+mHkeWhiiA+IGtpbmthaVwgOwor5b+r5oyZID4ga2Fpa3lvXCA7CivliIbph44gPiBidW4nJ3lhXCA7CivlvZPnlaogPiB0b3ViYW5cIDsKK+awtOaYnyA+IHN1aXNlaVwgOwor5Y6a5oOFID4ga291am91XCA7CivphZLmna8gPiBzaHVoYWlcIDsKK+awtOaYjiA+IHN1aW1laVwgOwor5ZCM5YuiID4gZG91emVpXCA7Civph5HloIIgPiBrb25kb3VcIDsKK+WPruWagCA+IHRlaW5laVwgOwor6YGC6KGMID4gc3Vpa291XCA7CivmsJfmpb0gPiBraXJha3VcIDsKK+iSvOa1tyA+IHNvdWthaVwgOwor5rCR5qipID4gbWlua2VuXCA7CivliIPph50gPiBoYWJhcmlcIDsKK+W9k+eUqCA+IHRvdXlvdVwgOwor5bmH6ZaTID4gaG91a2FuXCA7CivlirHnsr4gPiByZWlzZWlcIDsKK+WPguWuriA+IHNhbmd1dVwgOwor5ZCM5Yq0ID4gZG91cm91XCA7Civph5Hln44gPiBraW5qb3VcIDsKK+WIpei2oyA+IGJlc3NodVwgOwor5YmN6KOFID4gemVuc291XCA7CivnpL7lhoUgPiBzaGFuYWlcIDsKK+WIhumFjSA+IGJ1bnBhaVwgOwor5rOV5Yi2ID4gaG91c2VpXCA7CivpgbrohLEgPiBpZGF0c3VcIDsKK+eeveiAhSA+IGtvc2hhXCA7CivlkI3liY0gPiBuYW1hZVwgOwor5Y+k5Z2AID4ga29zaGlcIDsKK+W4sOmghiA+IGtpanVuXCA7CivluqfoppYgPiB6YXNoaVwgOwor5b+r5omTID4ga2FpZGFcIDsKK+mAgei+niA+IHNvdWppXCA7CivlkI3liKkgPiBtZWlyaVwgOwor55yJ6ZaTID4gbWlrZW5cIDsKK+ejgeaApyA+IGppc2VpXCA7CivolqzkvqEgPiB5YWtrYVwgOwor56Cy54WZID4gaG91ZW5cIDsKK+ekvOWEgCA+IHJlaWdpXCA7Civms5XlhbcgPiBob3VndVwgOwor5ZCP5YWaID4gcml0b3VcIDsKK+ebrumhlCA+IG1lZ2FvXCA7CivnopHmlocgPiBoaWJ1blwgOwor6YCj6KqeID4gcmVuZ29cIDsKK+mHjeWbsiA+IGNob3VpXCA7Civmsq7llqogPiBzb3NvdVwgOwor6YG657+SID4gaXNodXVcIDsKK+mBuOiAhSA+IHNlbmphXCA7CivmrYzogZYgPiBrYXNlaVwgOwor6YCg6KqeID4gem91Z29cIDsKK+egsueBqyA+IGhvdWthXCA7CivokrjmsJcgPiBqb3VraVwgOwor5oCq5aWHID4ga2Fpa2lcIDsKK+mAo+iomCA+IHJlbmtpXCA7Civph43lmaggPiBqdXVraVwgOwor5Yqg57OWID4ga2F0b3VcIDsKK+aBqeWFuCA+IG9udGVuXCA7CivlvpLmrbsgPiB0b3NoaVwgOwor5bqP6KuWID4gam9yb25cIDsKK+avheeEtiA+IGtpemVuXCA7CivliLbopocgPiBzZWloYVwgOwor5q2O576OID4gdGFuYmlcIDsKK+mAgOi3ryA+IHRhaXJvXCA7Civlv5zmiYsgPiBvdXNodVwgOwor6YCf6KiYID4gc29ra2lcIDsKK+azouS5sSA+IGhhcmFuXCA7Civlv5zmiKYgPiBvdXNlblwgOwor6YCj6KaHID4gcmVucGFcIDsKK+aAqOWjsCA+IGVuc2VpXCA7CivmsrnljZggPiB5dXRhblwgOwor5bqP6KmeID4gam9zaGlcIDsKK+WMu+alrSA+IGlneW91XCA7Civluo/oqIAgPiBqb2dlblwgOwor5b+Y5oiRID4gYm91Z2FcIDsKK+iNt+mHjSA+IGthanV1XCA7CivljLrmpJwgPiBrdWtlblwgOwor5Y2X5paXID4gbmFudG9cIDsKK+ayveWIuCA+IGtva2VuXCA7CivljYrmnJ8gPiBoYW5raVwgOwor5ZCM5L6hID4gZG91a2FcIDsKK+WLleeUuyA+IGRvdWdhXCA7CivmsrPljZcgPiBrYW5hblwgOwor6JaE5YiDID4gdXN1YmFcIDsKK+WKoOeulyA+IGthc2FuXCA7CivlubTos6YgPiBuZW5wdVwgOwor5Y+j5ZGzID4ga291bWlcIDsKK+i/t+i3ryA+IG1laXJvXCA7CivmsrnliaQgPiB5dXphaVwgOwor5bm06LOAID4gbmVuZ2FcIDsKK+WPr+WLlSA+IGthZG91XCA7CivlubTosqIgPiBuZW5ndVwgOwor5b6h5qCqID4gb2thYnVcIDsKK+WOqOWtkCA+IHp1c2hpXCA7CivliKXoqJggPiBiZWtraVwgOwor5Y+k5Y+yID4ga29zaGlcIDsKK+WQj+S6uiA+IHJpamluXCA7CivlkITlgIsgPiBrYWtrb1wgOwor6YKq55+lID4gamFjaGlcIDsKK+WPpOWPgiA+IGtvc2FuXCA7Civms5XkuosgPiBob3VqaVwgOwor6JWD5aS3ID4gYmFuJydpXCA7Civph43lkbMgPiBvbW9taVwgOwor5qi56b2iID4ganVyZWlcIDsKK+WNg+acqCA+IGNoaWdpXCA7Civmra/np5EgPiBzaGlrYVwgOwor5oG15LiOID4ga2VpeW9cIDsKK+mFuOW6piA+IHNhbmRvXCA7CivlirHno4EgPiByZWlqaVwgOwor5Ymj6IieID4ga2VuYnVcIDsKK+azleS4uyA+IGhvc3N1XCA7Civmr43muK8gPiBib2tvdVwgOwor6YeO5ZCIID4geWFnb3VcIDsKK+WQjOS6iyA+IGRvdWppXCA7Civlj6/liIYgPiBrYWJ1blwgOwor6YeO5Y+yID4geWFzaGlcIDsKK+WKqeelrSA+IGpvc2FpXCA7CivljYrml5cgPiBoYW5raVwgOwor5ZCE5L2NID4ga2FrdWlcIDsKK+W+oeacrSA+IG9mdWRhXCA7CivpgY7oiKwgPiBrYWhhblwgOwor5YiG6LOmID4gYnVucHVcIDsKK+eoruOAhSA+IHNodWp1XCA7Civlv5jmgakgPiBib3VvblwgOwor5b6F5qmfID4gdGFpa2lcIDsKK+aBqeS6uiA+IG9uamluXCA7CivlubTorZwgPiBuZW5wdVwgOwor5b+M5oaaID4ga2l0YW5cIDsKK+mBi+iIqiA+IHVua291XCA7CivmsrPlhoUgPiBoYW5vaVwgOwor5oGo5LqLID4ga29uamlcIDsKK+aAp+WZqCA+IHNlaWtpXCA7CivmgJLlo7AgPiBkb3NlaVwgOwor5qmf6aaWID4ga2lzaHVcIDsKK+WIl+iomCA+IHJla2tpXCA7Civlj6TliLYgPiBrb3NlaVwgOwor5Y+N5ZO6ID4gaGFucG9cIDsKK+WNgeaXpSA+IHRvb2thXCA7CivlvqHmmLwgPiBvaGlydVwgOwor6YO95rCRID4gdG9taW5cIDsKK+eci+mBjiA+IGthbmthXCA7Civlj6TliIAgPiBrb3RvdVwgOwor5byl55SfID4geWF5b2lcIDsKK+mAgeipsSA+IHNvdXdhXCA7CivlubPoqp4gPiBoZWlnb1wgOwor5q+S5rCXID4gZG9ra2VcIDsKK+efm+ebviA+IG11anVuXCA7CivnoLTmsLQgPiBoYXN1aVwgOwor6YeR5YipID4ga2lucmlcIDsKK+azieS4iyA+IHNlbmthXCA7Civov5Tovp4gPiBoZW5qaVwgOwor6bWe5q+bID4gZ2Ftb3VcIDsKK+WPmeWLsiA+IGpva3VuXCA7CivmspblkIggPiBva2lhaVwgOwor6bWd5q+bID4gZ2Ftb3VcIDsKK+WPpOWFuCA+IGtvdGVuXCA7Civpr6jpo7IgPiBnZWlpblwgOwor6YeN5YipID4ganV1cmlcIDsKK+WNsOW9sSA+IGluJydlaVwgOwor5Y2Y5omTID4gdGFuZGFcIDsKK+W+oeaVsCA+IG9rYXp1XCA7Civlj5fli5UgPiBqdWRvdVwgOwor6YGT576pID4gZG91Z2lcIDsKK+W+jOaetiA+IGtvdWthXCA7CivpgaDnuIEgPiB0b29lblwgOwor5YiG6KqyID4gYnVua2FcIDsKK+mCpueUuyA+IGhvdWdhXCA7Civph47lhZogPiB5YXRvdVwgOwor552A6KGjID4geWFrdWlcIDsKK+WPl+WIkSA+IGp1a2VpXCA7Civmr47mrKEgPiBtYWlqaVwgOwor5b6M5pyfID4ga291a2lcIDsKK+iVqeWFkCA+IHRvdWppXCA7CivmsrnkupUgPiB5dXNlaVwgOwor5bu656KRID4ga2VucGlcIDsKK+WGpemXhyA+IG1laWFuXCA7CivluIPpmaMgPiBmdWppblwgOwor6I2S6YeOID4ga291eWFcIDsKK+ayu+S4iyA+IGNoaWthXCA7CivovrrphJkgPiBoZW5waVwgOwor6YWS5b6SID4gc2h1dG9cIDsKK+apn+mbtyA+IGtpcmFpXCA7CivmrYznqL8gPiBrYWtvdVwgOwor5byn54q2ID4ga29qb3VcIDsKK+mBt+enuyA+IHNlbicnaVwgOwor6YG456eRID4gc2Vua2FcIDsKK+W4sOmChCA+IGtpa2FuXCA7Civmra/nl5sgPiBoYWl0YVwgOwor5rCR5oi4ID4gbWlua29cIDsKK+WKoOebnyA+IGthbWVpXCA7Civoj4roirEgPiBraWtrYVwgOwor5Y+k5L6LID4ga29yZWlcIDsKK+WPsOS4iyA+IGRhaWthXCA7CivliLvoi6YgPiBrb2trdVwgOwor5q+N5qipID4gYm9rZW5cIDsKK+WPpOS9kyA+IGtvdGFpXCA7CivlvoDmnaUgPiBvdXJhaVwgOwor5Y+X5YOPID4ganV6b3VcIDsKK+WPpeS8miA+IGt1a2FpXCA7Civlj6TkvJ0gPiBrb2RlblwgOwor5b+c5a++ID4gb3V0YWlcIDsKK+WNseWzsCA+IGtpaG91XCA7CivmrrrmsJcgPiBzYWtraVwgOwor5Yqp55SjID4gam9zYW5cIDsKK+W4uOi7jCA+IGpvdWtpXCA7CivluLDovrIgPiBraW5vdVwgOwor5Y+k5LujID4ga29kYWlcIDsKK+WPpOS7iiA+IGtva29uXCA7Civlj6TkurogPiBrb2ppblwgOwor6YGV57SEID4gaXlha3VcIDsKK+WOn+WbsyA+IGdlbnp1XCA7CivljYHmiYsgPiBqaXR0ZVwgOwor5qmf6ZaiID4ga2lrYW5cIDsKK+awkeaEjyA+IG1pbicnaVwgOwor5Y+C5YqgID4gc2Fua2FcIDsKK+WGtumHkSA+IHlha2luXCA7Civnn7PngasgPiBzZWtrYVwgOwor5YW16aasID4gaGVpYmFcIDsKK+W+oeaJgCA+IGdvc2hvXCA7Civph47kurogPiB5YWppblwgOwor5byB55aPID4gYmVuc29cIDsKK+WOn+WZqCA+IGdlbmtpXCA7CivpgKDoirEgPiB6b3VrYVwgOwor5bid6YO9ID4gdGVpdG9cIDsKK+iLsemtgiA+IGVpa29uXCA7Civph4zkurogPiByaWppblwgOwor5Y6t5ZGzID4gaXlhbWlcIDsKK+WNseWusyA+IGtpZ2FpXCA7CivlupfoiJcgPiB0ZW5wb1wgOwor6YWN5biDID4gaGFpZnVcIDsKK+auteatqSA+IHRhbmJ1XCA7CivljZjluqcgPiB0YW56YVwgOwor5Y+Z5Lu7ID4gam9uaW5cIDsKK+asp+exsyA+IG91YmVpXCA7CivlvKfnga8gPiBrb3RvdVwgOwor5oCS5Y+3ID4gZG9nb3VcIDsKK+awuOWtmCA+IGVpem9uXCA7Civlt6XpnaIgPiBrdW1lblwgOwor5YaF6ZyAID4gbmFpanVcIDsKK+WPl+S7uyA+IGp1bmluXCA7Civmr43moKEgPiBib2tvdVwgOwor5b6M5o+0ID4ga291ZW5cIDsKK+ecjOitsCA+IGtlbmdpXCA7Civli6TmsYIgPiBnb25ndVwgOwor55yL6K23ID4ga2FuZ29cIDsKK+WGhumZoyA+IGVuamluXCA7Civphbjln7ogPiBzYW5raVwgOwor56K65Zu6ID4ga2Fra29cIDsKK+W4sOi2qCA+IGtpc3V1XCA7CivluLDotqMgPiBraXNodVwgOwor5b2T5qmfID4gdG91a2lcIDsKK+W8geeQhiA+IGJlbnJpXCA7Civmr43mnZAgPiBib3phaVwgOwor5b6S5omLID4gdG9zaHVcIDsKK+ebm+mBiyA+IHNlaXVuXCA7Civmra/niZkgPiBzaGlnYVwgOwor5rCR5bqmID4gbWluZG9cIDsKK+mBi+eulyA+IHVuemFuXCA7Civlv5zlpIkgPiBvdWhlblwgOwor6YWS5a62ID4gc2h1a2FcIDsKK+W8pea8qyA+IGJpbWFuXCA7CivphZLlrrQgPiBzaHVlblwgOwor6a6f6bGHID4gYW5rb3VcIDsKK+i9n+mfsyA+IGdvdW9uXCA7CivlvqHlv7UgPiBnb25lblwgOwor5b6X5oSPID4gdG9rdWlcIDsKK+apn+mLkiA+IGtpaG91XCA7Civlhbjpm4UgPiB0ZW5nYVwgOwor5Y+M5LqSID4gc291Z29cIDsKK+WLmOawlyA+IGthbmtpXCA7Civmr47mmYIgPiBtYWlqaVwgOwor6L6e6YCAID4gaml0YWlcIDsKK+WOn+WPpSA+IGdlbmt1XCA7CivpgbrnlZkgPiBpcnl1dVwgOwor5qmf6YqDID4ga2lqdXVcIDsKK+mDveaUvyA+IHRvc2VpXCA7Civli5XmsJcgPiBkb3VraVwgOwor5b+c5aCxID4gb3Vob3VcIDsKK+W5vOiKvSA+IHlvdWdhXCA7CivnoazluqYgPiBrb3Vkb1wgOwor5b6p5biwID4gZnVra2lcIDsKK+asuueeniA+IGdpbWFuXCA7CivpgaDnn6IgPiB0b295YVwgOwor6YGO56iLID4ga2F0ZWlcIDsKK+awtOWkqyA+IHN1aWZ1XCA7Civmr43mlpEgPiBib2hhblwgOwor5oCc5L+QID4gcmVpcmlcIDsKK+W4gumDqCA+IHNoaWJ1XCA7CivliqvngasgPiBnb3VrYVwgOwor5Yal6YCUID4gbWVpZG9cIDsKK+WPguS6iyA+IHNhbmppXCA7CivlvqHluaMgPiBnb2hlaVwgOwor5by+5qmfID4gZGFua2lcIDsKK+mBoOecvCA+IGVuZ2FuXCA7CivnoLTmkacgPiBoYXNhaVwgOwor6L+R6KGbID4ga29ub2VcIDsKK+efreazoiA+IHRhbnBhXCA7CivpgaDnm64gPiB0b29tZVwgOwor6YaH5YyWID4ganVua2FcIDsKK+WIpOiAhSA+IGhhbmphXCA7CivnoLTmkI0gPiBoYXNvblwgOwor6YGT56C0ID4gZG91aGFcIDsKK+iLsemciiA+IGVpcmVpXCA7Civli4fmsJcgPiB5dXVraVwgOwor5b2T5pyfID4gdG91a2lcIDsKK+WLleapnyA+IGRvdWtpXCA7CivmsJflrZQgPiBraWtvdVwgOwor5Yqg54K5ID4ga2F0ZW5cIDsKK+mFuOWRsyA+IHNhbm1pXCA7CivlhqDovp4gPiBrYW5qaVwgOwor6Iux6ZuEID4gZWl5dXVcIDsKK+W/q+WRsyA+IGthaW1pXCA7CivljbHlnLAgPiBraWNoaVwgOwor5bmz6IelID4gaGVpZ2FcIDsKK+WOmuWIqSA+IGtvdXJpXCA7CivlvpLlvJ8gPiB0b3RlaVwgOwor55+t5rCXID4gdGFua2lcIDsKK+awkeWutiA+IG1pbmthXCA7CivljJbmiJAgPiBrYXNlaVwgOwor5beu6YeRID4gc2FraW5cIDsKK+aoqumaiiA+IG91dGFpXCA7Civpg6jmlbAgPiBidXN1dVwgOwor5bqD576pID4ga291Z2lcIDsKK+WLh+atpiA+IHl1dWJ1XCA7CivlhYjpp4YgPiBzZW5rdVwgOwor6YKq5rOVID4gamFob3VcIDsKK+WNiuWtoyA+IGhhbmtpXCA7Civlv4zlnqMgPiBpZ2FraVwgOwor5b2T5pmCID4gdG91amlcIDsKK+WJjeenkSA+IHplbmthXCA7CivmsI/lrZAgPiB1amlrb1wgOwor5beu6YWNID4gc2FoYWlcIDsKK+efreatjCA+IHRhbmthXCA7Civnm6PorbcgPiBrYW5nb1wgOwor5YaF6YeOID4gbmFpeWFcIDsKK+ebuOijnCA+IHNvdWhvXCA7CivlvKbmrYwgPiBnZW5rYVwgOwor5Y2D5a62ID4gc2Vua2VcIDsKK+iLpumboyA+IGt1bmFuXCA7CivlvJjms5UgPiBndWhvdVwgOwor5Y6t5Lq6ID4gZW5qaW5cIDsKK+mFuOWMliA+IHNhbmthXCA7CivmqZ/ou6IgPiBraXRlblwgOwor56C05oiSID4gaGFrYWlcIDsKK+avgOaQjSA+IGtpc29uXCA7CivljYHlrZcgPiBqdXVqaVwgOwor5beu6YGjID4gc2FrZW5cIDsKK+W+oeWutCA+IGd5b2VuXCA7Civli5jmn7sgPiBrYW5zYVwgOwor55+u5qi5ID4gd2FpanVcIDsKK+eZvembqCA+IGhha3V1XCA7Civljq3kuJYgPiBlbnNlaVwgOwor5b6h5a6FID4gb3Rha3VcIDsKK+WGhemDqCA+IG5haWJ1XCA7Civljp/kvqEgPiBnZW5rYVwgOwor5Ya36KqeID4gcmVpZ29cIDsKK+W6p+emhSA+IHphemVuXCA7CivojbfokYkgPiBrYXlvdVwgOwor6Ium6ZeYID4ga3V0b3VcIDsKK+i+nuitsiA+IGppam91XCA7CivljLvlraYgPiBpZ2FrdVwgOwor5Yqg5ribID4ga2FnZW5cIDsKK+W6p+ekvCA+IHphcmVpXCA7CivphZLlmaggPiBzaHVraVwgOwor5bem6YG3ID4gc2FzZW5cIDsKK+eZu+mZoiA+IHRvdWluXCA7Civoj6/nlLIgPiBrYWtvdVwgOwor5YWI6Z2eID4gc2VucGlcIDsKK+mBi+eXtCA+IHVuY2hpXCA7CivluILosrsgPiBzaGloaVwgOwor5b6A5bm0ID4gb3VuZW5cIDsKK+W6nOeojiA+IGZ1emVpXCA7CivnoJTmkakgPiBrZW5tYVwgOwor5beh6YKPID4ganVucmFcIDsKK+WJo+eSvSA+IGtlbmppXCA7CivlhY3pmaQgPiBtZW5qb1wgOwor6Iqx6a2BID4gb2lyYW5cIDsKK+W7tua7niA+IGVudGFpXCA7Civlt6bovrogPiBzYWhlblwgOwor5b6u5aG1ID4gbWlqaW5cIDsKK+mDqOaJgCA+IGJ1c2hvXCA7CivljLnlqaYgPiBoaXBwdVwgOwor5YWJ6ZmwID4ga291aW5cIDsKK+asoeeUtyA+IGppbmFuXCA7CivliqDms5UgPiBrYWhvdVwgOwor5b6M5bC+ID4ga291YmlcIDsKK+WGhui7oiA+IGVudGVuXCA7CivpgZPnkIYgPiBkb3VyaVwgOwor5q2z5qyhID4gc2FpamlcIDsKK+WGl+iyuyA+IGpvdWhpXCA7CivliKXnrocgPiBiZWtrb1wgOwor6Iy26KmxID4gY2hhd2FcIDsKK+avjeaApyA+IGJvc2VpXCA7CivpgYXnlpEgPiBjaGlnaVwgOwor5rCX5ZyPID4ga2lrZW5cIDsKK+W3qOi6ryA+IGt5b2t1XCA7CivluILorbAgPiBzaGlnaVwgOwor5rCX5ZujID4ga2lkYW5cIDsKK+W/nOWIhiA+IG91YnVuXCA7CivlvqHlpKcgPiBvbnRhaVwgOwor5Yqg5rC0ID4ga2FzdWlcIDsKK+WMluW3pSA+IGtha291XCA7Civmr5vluIMgPiBtb3VmdVwgOwor5YaN6LW3ID4gc2Fpa2lcIDsKK+awuOWKqyA+IGVpZ291XCA7CivmsJflmqIgPiBraW5vdVwgOwor5rC05YyWID4gc3Vpa2FcIDsKK+mAlOerryA+IHRvdGFuXCA7Civpg73luqYgPiB0c3Vkb1wgOwor5q+N5b2iID4gYm9rZWlcIDsKK+ato+awlyA+IHNlaWtpXCA7CivljLnlpKsgPiBoaXBwdVwgOwor5bmz57SgID4gaGVpc29cIDsKK+iKsemmmSA+IGtha291XCA7Civli7/mgKogPiBtb2trZVwgOwor5YaZ6K2cID4gc2hhZnVcIDsKK+eiuuS5jiA+IGtha2tvXCA7Civnn63mnJ8gPiB0YW5raVwgOwor5q2j5q+UID4gc2VpaGlcIDsKK+W9vOWyuCA+IGhpZ2FuXCA7CivljbDliKQgPiBpbnBhblwgOwor6YO95biCID4gdG9zaGlcIDsKK+avjuW6piA+IG1haWRvXCA7Civlhajpg70gPiB6ZW50b1wgOwor5Y2w5YiAID4gaW50b3VcIDsKK+WFqOmDqCA+IHplbmJ1XCA7CivmsLTliKkgPiBzdWlyaVwgOwor6YCj56C0ID4gcmVucGFcIDsKK+W9qeW6piA+IHNhaWRvXCA7CivlvaLlvbEgPiBrZWllaVwgOwor5Yil56eRID4gYmVra2FcIDsKK+mBoOeBqyA+IHRvb2JpXCA7CivokYnmnKsgPiBoYXp1ZVwgOwor5Yq55p6cID4ga291a2FcIDsKK+W/q+S6iyA+IGthaWppXCA7CivlupznnIwgPiBmdWtlblwgOwor5YaX6KqeID4gam91Z29cIDsKK+WMuuWfnyA+IGt1aWtpXCA7Civli77lvJUgPiBrb3VpblwgOwor5beo6LK7ID4ga3lvaGlcIDsKK+W+oeWdiiA+IGdvYm91XCA7Civnn6LmnaUgPiB5YXJhaVwgOwor5YyW5bCOID4ga2Vkb3VcIDsKK+iLsemCgSA+IGVpbWFpXCA7CivlvozlprsgPiBnb3NhaVwgOwor5q+U5bO2ID4gaGl0b3VcIDsKK+WNmOWPpSA+IHRhbmt1XCA7CivmsJflk4EgPiBraWhpblwgOwor5YaN6K2wID4gc2FpZ2lcIDsKK+W3peiyuyA+IGtvdWhpXCA7Civli53miYsgPiBrYXR0ZVwgOwor5q275pyfID4gc2hpa2lcIDsKK+ecvOeqqSA+IGdhbmthXCA7CivluIPooosgPiBob3RlaVwgOwor6Im26bqXID4gZW5yZWlcIDsKK+WEqumbhSA+IHl1dWdhXCA7Civmr5vlrZQgPiBrZWFuYVwgOwor56C05bGLID4gaGFva3VcIDsKK+WLpOaDsCA+IGtpbmRhXCA7CivlhoXorbAgPiBuYWlnaVwgOwor6L2X6Lu7ID4ga2Fua2FcIDsKK+atlOastyA+IGt5b2tpXCA7CivovLjpioAgPiB5dWdpblwgOwor5YWo6LqvID4gemVua3VcIDsKK+W5s+epjyA+IGhlaW9uXCA7CivljbPkvY0gPiBzb2t1aVwgOwor5biw6ImmID4ga2lrYW5cIDsKK+W6j+ebpCA+IGpvYmFuXCA7Civov5Hnv5IgPiBraW5qdVwgOwor5qih6YCgID4gbW96b3VcIDsKK+avjeWxiyA+IG9tb3lhXCA7CivprZHprYUgPiBjaGltaVwgOwor5rC45L2PID4gZWlqdXVcIDsKK+ecvOenkSA+IGdhbmthXCA7Civnm67ojLYgPiBtZWNoYVwgOwor5YWs6LevID4ga291cm9cIDsKK+WIh+espiA+IGtpcHB1XCA7CivluLDoiKogPiBraWtvdVwgOwor5qiq6LuiID4gb3V0ZW5cIDsKK+W5tOennyA+IG5lbnNvXCA7Civou43pvJMgPiBndW5rb1wgOwor5Y2K5Y+vID4gaGFua2FcIDsKK+WNiuWPpSA+IGhhbmt1XCA7CivpgbjmrYwgPiBzZW5rYVwgOwor5Y2Y5YipID4gdGFucmlcIDsKK+W+s+WMliA+IHRva2thXCA7CivliKnnm4ogPiByaWVraVwgOwor5qyh54K5ID4gaml0ZW5cIDsKK+W9k+W6pyA+IHRvdXphXCA7CivlvpPlm6AgPiBqdXVpblwgOwor5rC45LujID4gZWl0YWlcIDsKK+awl+WLoiA+IGtpc2VpXCA7Civmra/mnLYgPiBzaGlkYVwgOwor5q2z5pquID4gc2VpYm9cIDsKK+avjeWutiA+IG9tb3lhXCA7CivlvbzlpbQgPiBhaXRzdVwgOwor5rCX5YqfID4ga2lrb3VcIDsKK+W+qeWPpCA+IGZ1a2tvXCA7Civnm67oibIgPiBtZWlyb1wgOwor5YeE6Im2ID4gc2VpZW5cIDsKK+avjeWtkCA+IGJvc2hpXCA7CivpgaDmtbcgPiBlbmthaVwgOwor5rCX5YmNID4ga2ltYWVcIDsKK+WNg+WPpCA+IHNlbmtvXCA7Civlhrfoj5MgPiByZWlrYVwgOwor5byV5pWwID4gaW5zdXVcIDsKK+WMquWboyA+IGhpZGFuXCA7CivphY3lgpkgPiBoYWliaVwgOwor5b6u5YuVID4gYmlkb3VcIDsKK+awuOS4liA+IGVpc2VpXCA7CivmrrXlt64gPiBkYW5zYVwgOwor5b255aSrID4gZWtpZnVcIDsKK+awl+WIhiA+IGtpYnVuXCA7CivphZLkv50gPiBzaHVob1wgOwor5YWs6LK7ID4ga291aGlcIDsKK+W8t+aEjyA+IGt5b3VpXCA7CivlhoXopo8gPiBuYWlraVwgOwor6YGg5rOzID4gZW4nJ2VpXCA7CivojYnoirEgPiBzb3VrYVwgOwor5YiG56eRID4gYnVua2FcIDsKK+mFlOS9mSA+IHN1aXlvXCA7Civli5XmgrggPiBkb3VraVwgOwor6JKy5ZujID4gZnV0b25cIDsKK+W+oeWPsCA+IG1pZGFpXCA7Civou43pto8gPiBzaGFtb1wgOwor6YCj55CGID4gcmVucmlcIDsKK+mCquaOqCA+IGphc3VpXCA7CivmsJHliKkgPiBtaW5yaVwgOwor6YG65qWtID4gaWd5b3VcIDsKK+mBi+a8lSA+IHVuc291XCA7CivnoazljJYgPiBrb3VrYVwgOwor6YCj54+gID4gcmVuanVcIDsKK+WIqeeUqCA+IHJpeW91XCA7Civlvq7liIYgPiBiaWJ1blwgOwor55+t5omTID4gdGFuZGFcIDsKK+WNiOWJjSA+IGdvemVuXCA7Civoi7Hos4cgPiBlaXNoaVwgOwor5YaF6KOPID4gZGFpcmlcIDsKK+i8uOmAgSA+IHl1c291XCA7CivlhYjpgJQgPiBzZW5kb1wgOwor5YW16KqeID4gaGVpZ29cIDsKK+WKqeaUuyA+IGpva291XCA7Civmrr/lrocgPiBkZW4nJ3VcIDsKK+iKn+mZpCA+IHNhbmpvXCA7CivliIfno4sgPiBzZXNzYVwgOwor5rCR5YW3ID4gbWluZ3VcIDsKK+WFrOitsCA+IGtvdWdpXCA7CivptYTlsL4gPiBzaGliaVwgOwor5Yy75Y2aID4gaWhha3VcIDsKK+iMtuiPkyA+IGNoYWthXCA7Civlvq7lhYkgPiBiaWtvdVwgOwor5Y2Y5L6hID4gdGFua2FcIDsKK+mFjeS7mCA+IGhhaWZ1XCA7CivmranmlbAgPiBob3N1dVwgOwor56C05aOKID4gaGFrYWlcIDsKK+avjuWknCA+IG1haXlvXCA7Civmrabmlq0gPiBidWRhblwgOwor5Y2Y5L2NID4gdGFuJydpXCA7CivlhYnovJ0gPiBrb3VraVwgOwor5rCX5YCZID4ga2lrb3VcIDsKK+WFvOijnCA+IGtlbnBvXCA7CivliqDmlbAgPiBrYXN1dVwgOwor5b6h5YmNID4gZ296ZW5cIDsKK+WFrOiqsiA+IGtvdWthXCA7CivlvZPlrrYgPiB0b3VrZVwgOwor5by35byVID4gZ291aW5cIDsKK+W+kuWQjSA+IGFkYW5hXCA7CivlvqHlh7ggPiBvZGVrb1wgOwor5b2T5a2XID4gYXRlamlcIDsKK+mFjeS4iyA+IGhhaWthXCA7CivlhazoqLQgPiBrb3Vzb1wgOwor5bmz55mSID4gaGVpeXVcIDsKK+eZuui1tyA+IGhva2tpXCA7CivpgbjmnpwgPiBzZW5rYVwgOwor5rCX5L2TID4ga2l0YWlcIDsKK+mCquaFsyA+IGpha2VuXCA7CivljLrliIYgPiBrdWJ1blwgOwor6I+v5rCPID4ga2FzaGlcIDsKK+mBv+aakSA+IGhpc2hvXCA7CivpgYrms7MgPiB5dXVlaVwgOwor5Yy65YemID4ga3VzaG9cIDsKK+avjeWggiA+IGJvZG91XCA7CivlvqHlhY0gPiBnb21lblwgOwor5b6h5YWIID4gb3Nha2lcIDsKK+WGrOiHsyA+IHRvdWppXCA7CivojLboiJcgPiBjaGFob1wgOwor6Iux6KmpID4gZWlzaGlcIDsKK+WLh+W+gCA+IHl1dW91XCA7CivlvJPmiYsgPiB5dW5kZVwgOwor5Y2K5L6hID4gaGFua2FcIDsKK+WNl+S4iyA+IG5hbmthXCA7CivljLrlhoUgPiBrdW5haVwgOwor6Imy6aaZID4gaXJva2FcIDsKK+W+kuWKtCA+IHRvcm91XCA7Civmr43lnosgPiBib2tlaVwgOwor6YGT5q2MID4gZG91a2FcIDsKK+WFmuitsCA+IHRvdWdpXCA7CivpgqrmgqogPiBqYWFrdVwgOwor5bm055SrID4gbmVucG9cIDsKK+mDqOWkliA+IGJ1Z2FpXCA7CivmrYzmm7ggPiBrYXNob1wgOwor5Ymb5rCXID4gZ291a2lcIDsKK+W8p+W9oiA+IGtva2VpXCA7Civli6LlrrYgPiBzZWlrYVwgOwor5YqD5pyfID4ga2Fra2lcIDsKK+egguWyqSA+IHNhZ2FuXCA7CivpgqrmgYsgPiBqYXJlblwgOwor5biw57SNID4ga2lub3VcIDsKK+W8lOaFsCA+IGNob3VpXCA7CivmsJfkuIggPiBraWpvdVwgOwor5Ymb5q+FID4gZ291a2lcIDsKK+W+qeS9jSA+IGZ1a3VpXCA7CivlvpLliJEgPiB0b2tlaVwgOwor55uu57eaID4gbWVzZW5cIDsKK+iQjOacqCA+IG1vZWdpXCA7CivlhrfnvbUgPiByZWliYVwgOwor5rCR5LqLID4gbWluamlcIDsKK+efqeW9oiA+IGt1a2VpXCA7Civpgbrml48gPiBpem9rdVwgOwor5q+b5ZSQID4ga2V0b3VcIDsKK+WFqOijuCA+IHplbnJhXCA7Civpgqrlv7UgPiBqYW5lblwgOwor5Yqp5oiQID4gam9zZWlcIDsKK+i7jemmrCA+IGd1bmJhXCA7CivlvJTmhI8gPiBjaG91aVwgOwor5Ym15qGIID4gc291YW5cIDsKK+aooeippiA+IG1vc2hpXCA7CivpgYrmrakgPiB5dXVob1wgOwor5Ye555y8ID4gb3VnYW5cIDsKK+W9k+WknCA+IHRvdXlhXCA7Civou4rppqwgPiBzaGFiYVwgOwor5Yqg5ouFID4ga2F0YW5cIDsKK+m0qOWxhSA+IGthbW9pXCA7CivlvqHkvpsgPiBvdG9tb1wgOwor5b6S5YWaID4gdG90b3VcIDsKK+WGhuiTiyA+IGVuZ2FpXCA7CivljYPku6MgPiBjaGl5b1wgOwor5YWE6LK0ID4gYW5pa2lcIDsKK+iLpuiogCA+IGt1Z2VuXCA7CivlvqHkvL0gPiBvdG9naVwgOwor5YyW5ZCIID4ga2Fnb3VcIDsKK+WIqeeCuSA+IHJpdGVuXCA7CivprLzpnaIgPiBraW1lblwgOwor6Ly/6KuWID4geW9yb25cIDsKK+WFmuimjyA+IHRvdWtpXCA7CivljYHkupQgPiBqdXVnb1wgOwor5q275b6MID4gc2hpZ29cIDsKK+WNgeS6jCA+IGp1dW5pXCA7CivmqKrooYwgPiBvdWtvdVwgOwor5Yy75LyvID4gaWhha3VcIDsKK+W+oeS7gSA+IGdvamluXCA7CivlvozlhYkgPiBnb2tvdVwgOwor5Y2D5LiWID4gY2hpeW9cIDsKK+WFiOitsCA+IHNlbmdpXCA7CivljLrkvJogPiBrdWthaVwgOwor6YGg5p2lID4gZW5yYWlcIDsKK+m0n+WwviA+IHNoaWJpXCA7CivnmbvoqJggPiB0b3VraVwgOwor5YmN5q2vID4gbWFlYmFcIDsKK+mBoOacmyA+IGVuYm91XCA7Civlh7rnlaogPiBkZWJhblwgOwor55+l5bexID4gY2hpa2lcIDsKK+WKseW8pyA+IHJlaWtvXCA7CivlvozlgpkgPiBrb3ViaVwgOwor55yL56C0ID4ga2FucGFcIDsKK+W+oeS4iiA+IG9rYW1pXCA7CivlhY3oqLQgPiBtZW5zb1wgOwor5b255YuZID4gZWtpbXVcIDsKK+apn+iDvSA+IGtpbm91XCA7Civokpnlj6QgPiBtb3Vrb1wgOwor5Yag6ICFID4ga2FuamFcIDsKK+W7g+ajhCA+IGhhaWtpXCA7CivliKnmvaQgPiByaWp1blwgOwor5YOn6ZmiID4gc291aW5cIDsKK+i7jemdtCA+IGd1bmthXCA7CivlhqTnvaogPiBlbnphaVwgOwor6YGg5pmvID4gZW5rZWlcIDsKK+WGheiLkSA+IG5haWVuXCA7Civlu4PmoYggPiBoYWlhblwgOwor5q+N5ZCOID4gYm9rb3VcIDsKK+i7jemcgCA+IGd1bmp1XCA7CivluIPnva4gPiBmdWNoaVwgOwor6ay86ZaAID4ga2ltb25cIDsKK+WEkumBkyA+IGp1ZG91XCA7CivpgaDmlrkgPiBlbnBvdVwgOwor5b6T5LqLID4ganV1amlcIDsKK+WCtemsvCA+IHNhaWtpXCA7Civlt6boiLcgPiBzYWdlblwgOwor5YWB6KixID4gaW5reW9cIDsKK+W4sOekviA+IGtpc2hhXCA7CivliqPlvKcgPiByZWtrb1wgOwor6YOo5ZOBID4gYnVoaW5cIDsKK+egguWhtSA+IHNhamluXCA7CivliZvmnpwgPiBnb3VrYVwgOwor5Yid5ryUID4gc2hvZW5cIDsKK+atqeW7iiA+IGhvcm91XCA7CivmrYzmiYsgPiBrYXNodVwgOwor5b6M5LqLID4ga291amlcIDsKK+WLh+WppiA+IHl1dWZ1XCA7CivmrarluqYgPiB3YWlkb1wgOwor5bmz54KJID4gaGVpcm9cIDsKK+i+suenkSA+IG5vdWthXCA7CivmrKHmnaEgPiBqaWpvdVwgOwor5q2m5byBID4gYnViZW5cIDsKK+i7jOmWkyA+IGtpa2FuXCA7Civpg73lhoUgPiB0b25haVwgOwor5byf5a2QID4gZGVzaGlcIDsKK+W3puiEsyA+IHNhbm91XCA7Civlu7bmgKcgPiBlbnNlaVwgOwor6YKm5a62ID4gaG91a2FcIDsKK+WKoOW5tCA+IGthbmVuXCA7Civov5Hnlb8gPiBraW5raVwgOwor5byB5bqnID4gYmVuemFcIDsKK+WIpea0viA+IGJlcHBhXCA7CivmraPluqcgPiBzZWl6YVwgOwor5byV5bCOID4gaW5kb3VcIDsKK+mAo+atjCA+IHJlbmdhXCA7CivprZTpgZMgPiBtYWRvdVwgOwor5b2x5YOPID4gZWl6b3VcIDsKK+W3q+iAhSA+IGZ1c2hhXCA7CivpgqblrZcgPiBob3VqaVwgOwor5Ye554mIID4gb3ViYW5cIDsKK+WGheiAsyA+IG5haWppXCA7CivliqDlt6UgPiBrYWtvdVwgOwor5YuH5aSrID4geXV1ZnVcIDsKK+asp+aWhyA+IG91YnVuXCA7CivlvZPlkKYgPiB0b3VoaVwgOwor5Yip5rC0ID4gcmlzdWlcIDsKK+mAoOasoSA+IHpvdWppXCA7Civlha3oirEgPiByaWtrYVwgOwor5Yem55CGID4gc2hvcmlcIDsKK+W7tuW8lSA+IGVuJydpblwgOwor552/5pm6ID4gZWljaGlcIDsKK+WFq+iLpiA+IGhha2t1XCA7Civmr5TlgKsgPiBoaXJpblwgOwor5biw55yBID4ga2lzZWlcIDsKK+mBjuaVjyA+IGthYmluXCA7Civluo/mra8gPiBqb3NoaVwgOwor5bu25bu2ID4gZW4nJ2VuXCA7Civli5Xlm6AgPiBkb3VpblwgOwor5byK5bGlID4gaGVpcmlcIDsKK+mBuuW+syA+IGl0b2t1XCA7CivnoLTlgKsgPiBoYXJpblwgOwor5YyX5LqsID4gcGVraW5cIDsKK+egguWYtCA+IHNhc2hpXCA7CivliY3mnJ8gPiB6ZW5raVwgOwor5qyh5pWwID4gamlzdXVcIDsKK+mAoOapnyA+IHpvdWtpXCA7Civmr5TkvosgPiBoaXJlaVwgOwor6YOo5YiGID4gYnVidW5cIDsKK+W5s+a4qSA+IGhlaW9uXCA7Civlho3nuIEgPiBzYWllblwgOwor55uu55ypID4gbWVtYWlcIDsKK+aoueiEgiA+IGp1c2hpXCA7Civmrovln7ogPiB6YW5raVwgOwor6YC45pu4ID4gaXNzaG9cIDsKK+mDveS8miA+IHRva2FpXCA7CivmrL3mhZUgPiBraW5ib1wgOwor6YOo5YaFID4gYnVuYWlcIDsKK+WFreiFkSA+IHJvcHB1XCA7CivpgJPmrKEgPiB0ZWlqaVwgOwor6YO95Lq6ID4gdG9qaW5cIDsKK+mBi+aQrCA+IHVucGFuXCA7CivliY3ml6UgPiBtYWViaVwgOwor5q+N5L2TID4gYm90YWlcIDsKK+WIqeaoqSA+IHJpa2VuXCA7CivlhoXnuIEgPiBuYWllblwgOwor6YG35bqnID4gc2VuemFcIDsKK+WKoOWusyA+IGthZ2FpXCA7CivpgaDmha4gPiBlbnJ5b1wgOwor5Yun5YyWID4ga2FuZ2VcIDsKK+WLh+WbsyA+IHl1dXRvXCA7Civoj6nmj5AgPiBib2RhaVwgOwor5YOn6YO9ID4gc291enVcIDsKK+atpuWumCA+IGJ1a2FuXCA7CivliJ3mrakgPiBzaG9ob1wgOwor55+z5ZmoID4gc2Vra2lcIDsKK+mAgOayuyA+IHRhaWppXCA7Civli5Xlk6EgPiBkb3VpblwgOwor6I+y5omNID4gaGlzYWlcIDsKK+WLpOWLmSA+IGtpbm11XCA7CivlvKXlm5sgPiB5YXNoaVwgOwor5q2j5a2XID4gc2VpamlcIDsKK+W3qOe0sCA+IGtvc2FpXCA7CivpgYvmjIcgPiB1bnNoaVwgOwor6bOl5bGFID4gdG9yaWlcIDsKK+W5s+awlyA+IGhlaWtpXCA7CivpgKPmnrYgPiByZW5rYVwgOwor5YiG5rS+ID4gYnVucGFcIDsKK+i7jemDqCA+IGd1bmJ1XCA7CivlhaznvqkgPiBrb3VnaVwgOwor5Ye65rmvID4gaWRleXVcIDsKK+apn+eoriA+IGtpc2h1XCA7CivluqbmlbAgPiBkb3N1dVwgOwor6YGK5oqAID4geXV1Z2lcIDsKK+mAgOatqSA+IHRhaWhvXCA7Civnmofog6QgPiBrb3VpblwgOwor6YKm5ZyfID4gaG91ZG9cIDsKK+mBv+WvkiA+IGhpa2FuXCA7Civpg6jkvJogPiBidWthaVwgOwor5Yip5qC5ID4gcmlrb25cIDsKK+W0jumZvSA+IGtpeW91XCA7CivlubTmrKEgPiBuZW5qaVwgOwor6YGK5oivID4geXV1Z2lcIDsKK+mBoOW+gSA+IGVuc2VpXCA7Civlt67nrYkgPiBzYXRvdVwgOwor6LuM6YGTID4ga2lkb3VcIDsKK+mBuuWwvyA+IGlueW91XCA7Civmrbvlm6AgPiBzaGlpblwgOwor5Yuy5L2NID4ga3VuJydpXCA7CivokazlhbcgPiBzb3VndVwgOwor5YaG562SID4gZW50b3VcIDsKK+WIhuavjSA+IGJ1bmJvXCA7CivojLbnm64gPiBjaGFtZVwgOwor5bqX5pivID4gdGVuemVcIDsKK+WLn+WFtSA+IGJvaGVpXCA7Civmrr/kuIsgPiBkZW5rYVwgOwor5qyd5oakID4gdXBwdW5cIDsKK+iRrOWEgCA+IHNvdWdpXCA7CivpgZXlv4MgPiBpc2hpblwgOwor5byx5YyWID4gamFra2FcIDsKK+WKoOWilyA+IGthem91XCA7CivpgYrmg7AgPiB5dXVkYVwgOwor5Yuf5YK1ID4gYm9zYWlcIDsKK+efreWPpSA+IHRhbmt1XCA7CivlvZPkuosgPiB0b3VqaVwgOwor6YGO5oCgID4ga2F0YWlcIDsKK+WHuuaxgSA+IGRhc2hpXCA7Civnn7PljJYgPiBzZWtrYVwgOwor55uj55CGID4ga2FucmlcIDsKK+WJjeaIryA+IHplbmdpXCA7CivluKvniLYgPiBzaGlmdVwgOwor5q2j5aGpID4gc2VpZW5cIDsKK+apn+efpSA+IGtpY2hpXCA7CivlurjmhJogPiB5b3VndVwgOwor5byV5ZapID4gaW4nJ3l1XCA7CivluJ3njosgPiB0ZWlvdVwgOwor6YG/5aaKID4gaGluaW5cIDsKK+WGheenkSA+IG5haWthXCA7CivpgK7mjZUgPiB0YWlob1wgOwor5bqP5paHID4gam9idW5cIDsKK+mBjuW9kyA+IGthdG91XCA7Civou43ot68gPiBndW5yb1wgOwor5bqP5pWwID4gam9zdXVcIDsKK+aui+WLmSA+IHphbm11XCA7CivliJ3mnJ8gPiBzaG9raVwgOwor6YGg5bO2ID4gZW50b3VcIDsKK+W3peenkSA+IGtvdWthXCA7Civouqvph40gPiBtaW9tb1wgOwor5bqn5omAID4gemFzaG9cIDsKK+WGheekuiA+IG5haWppXCA7CivmraPlnZAgPiBzZWl6YVwgOwor6Lyq6IieID4gcmluYnVcIDsKK+mAlOaWuSA+IHRvaG91XCA7CivlhIDoo4UgPiBnaXNvdVwgOwor5bm95pqXID4geXV1YW5cIDsKK+iLseexsyA+IGVpYmVpXCA7Civou43osrsgPiBndW5waVwgOwor6a2U6KGXID4gbWFnYWlcIDsKK+i7ouiomyA+IHRlbmthXCA7Civou6LoqJggPiB0ZW5raVwgOwor5Yex5q2MID4gZ2Fpa2FcIDsKK+asoeW5tCA+IGppbmVuXCA7CivpgbrloqggPiBpYm9rdVwgOwor55qH57SAID4ga291a2lcIDsKK+mBheW7tiA+IGNoaWVuXCA7CivlubzmmYIgPiB5b3VqaVwgOwor55uG55S7ID4gYm9uZ2FcIDsKK+WIkeacnyA+IGtlaWtpXCA7CivlubTmnJ8gPiBuZW5raVwgOwor5YuV5L2cID4gZG91c2FcIDsKK+WHuuanmCA+IGRleW91XCA7Civoirjoi5EgPiBnZWllblwgOwor5byn5YWJID4ga29rb3VcIDsKK+atjOWjhyA+IGthZGFuXCA7CivlhbXnp5EgPiBoZWlrYVwgOwor5Yqp5ZG9ID4gam9tZWlcIDsKK+mrmOmbhSA+IGtvdWdhXCA7CivluLjmuKkgPiBqb3VvblwgOwor5YWa57SAID4gdG91a2lcIDsKK+WJjeW+jCA+IHplbmdvXCA7CivlhbXnpo0gPiBoZWlrYVwgOwor5qmf55SyID4ga2lrb3VcIDsKK+atpuWVjyA+IGJ1bW9uXCA7CivlirTli5kgPiByb3VtdVwgOwor5beu55uKID4gc2Fla2lcIDsKK+mAo+aJkyA+IHJlbmRhXCA7CivlhKroibYgPiB5dXVlblwgOwor5bq25bm+ID4gc2hva2lcIDsKK+iKseiMjiA+IGtha2VpXCA7CivnoILkuIogPiBzYWpvdVwgOwor6LuN6K2wID4gZ3VuZ2lcIDsKK+i7ouijnCA+IHRlbnBvXCA7CivlubPmmYIgPiBoZWlqaVwgOwor5YaG55ukID4gZW5iYW5cIDsKK+WBvembuyA+IGdpZGVuXCA7Civnmq7nm7ggPiBoaXNvdVwgOwor5biw5rivID4ga2lrb3VcIDsKK+i/lOatjCA+IGhlbmthXCA7CivliY3luqcgPiB6ZW56YVwgOwor5YWs56efID4ga291c29cIDsKK+eXqei6ryA+IHNvdWt1XCA7CivliIbmnKggPiBidW5naVwgOwor5q2j5ZOhID4gc2VpaW5cIDsKK+WGheeariA+IG5haWhpXCA7CivpgZPlrrYgPiBkb3VrYVwgOwor5qih56+EID4gbW9oYW5cIDsKK+iKveiDniA+IGdhaG91XCA7CivliIDmnrYgPiB0b3VrYVwgOwor6LyJ6I23ID4gc2Fpa2FcIDsKK+earueZrCA+IGhpemVuXCA7CivpgYrlsbEgPiB5dXNhblwgOwor5q2m5ZCNID4gYnVtZWlcIDsKK+WFqOenkSA+IHplbmthXCA7CivliqDlj7cgPiBrYWdvdVwgOwor6IqZ6JOJID4gZnV5b3VcIDsKK+W7g+WutiA+IGhhaWthXCA7CivlhaznpLogPiBrb3VqaVwgOwor5q275YWQID4gc2hpamlcIDsKK+ato+WQpiA+IHNlaWhpXCA7CivlupXmhI8gPiBzb2tvaVwgOwor6Ieq6aaWID4gamlzaHVcIDsKK+i7jeiomCA+IGd1bmtpXCA7CivojZLmt6sgPiBrb3VpblwgOwor5Yqj5YyWID4gcmVra2FcIDsKK+mBoOWkpyA+IGVuZGFpXCA7CivliKXmiLggPiBiZWtrb1wgOwor5q2T5ZacID4ga2Fua2lcIDsKK+WFt+ecvCA+IGd1Z2FuXCA7CivmrKHlrpggPiBqaWthblwgOwor55yp5pqIID4gbWVtYWlcIDsKK+i7jeimjyA+IGd1bmtpXCA7CivmrKHlrZAgPiBqaXNoaVwgOwor5q2m5YuyID4gYnVrdW5cIDsKK+W7tuWRvSA+IGVubWVpXCA7CivliqDli6IgPiBrYXNlaVwgOwor5YWD57SgID4gZ2Vuc29cIDsKK+atpuWLhyA+IGJ1eXV1XCA7Civmrablip8gPiBidWtvdVwgOwor5bu35ZCPID4gdGVpcmlcIDsKK+WGhueSsCA+IGVua2FuXCA7CivlsqnprZogPiBpd2FuYVwgOwor5Yid5omLID4gc2hvdGVcIDsKK+eah+elliA+IGtvdXNvXCA7CivlhKrnvo4gPiB5dXViaVwgOwor5YSS6ImvID4ganVnb25cIDsKK+WEkuiJriA+IGp1Z29uXCA7CivlhZDnq6UgPiBqaWRvdVwgOwor5q2T5ZG8ID4ga2Fua29cIDsKK+WKoOWIpCA+IGthaGFuXCA7Civlip/liKkgPiBrb3VyaVwgOwor6bOz5YewID4gaG91b3VcIDsKK+efpeS6iyA+IGNoaWppXCA7CivpgZPlpK4gPiBkb3VvdVwgOwor6LuN6KGjID4gZ3VuJydpXCA7CivliLbluqYgPiBzZWlkb1wgOwor5q2p5YW1ID4gaG9oZWlcIDsKK+iLseefpSA+IGVpY2hpXCA7CivlgZzpn7MgPiB0ZWlvblwgOwor5byV5L6LID4gaW5yZWlcIDsKK+eXtOipsSA+IGNoaXdhXCA7CivliqDlhqAgPiBrYWthblwgOwor6YCj5bqnID4gcmVuemFcIDsKK+iJpOijhSA+IGdpc291XCA7CivpgaDlnLAgPiBlbmNoaVwgOwor6I+v5aOHID4ga2FkYW5cIDsKK+eZu+enkSA+IHRvdWthXCA7Civnmb3npo0gPiBoYWtrYVwgOwor6YGO5aSnID4ga2FkYWlcIDsKK+iLm+eojiA+IGthemVpXCA7CivpgaDlm6AgPiBlbicnaW5cIDsKK+mBiuWlsyA+IHl1dWpvXCA7CivovJ3nt5ogPiBraXNlblwgOwor5YWl55u4ID4gaXJpYWlcIDsKK+WFjeennyA+IG1lbnNvXCA7CivoiovojI4gPiB6dWlraVwgOwor6I+T5a2QID4ga2FzaGlcIDsKK+W5suaIiCA+IGthbmthXCA7Civnlo7plosgPiBzb2thaVwgOwor5YmN5ammID4gemVucHVcIDsKK+WBj+mglyA+IGhlbnBhXCA7CivpgbfljJYgPiBzZW5nZVwgOwor6JC95LiLID4gcmFra2FcIDsKK+WFt+ePviA+IGd1Z2VuXCA7CivliqDkv7ggPiBrYWhvdVwgOwor5Ya35rCXID4gcmVpa2lcIDsKK+WEkuiAhSA+IGp1c2hhXCA7CivoiJfpgZMgPiBob2RvdVwgOwor5YWI56WWID4gc2Vuem9cIDsKK+iIqui3ryA+IGtvdXJvXCA7CivnmbrnoLQgPiBoYXBwYVwgOwor55Wz6Z+7ID4gam91aW5cIDsKK+ebuOajkiA+IGFpYm91XCA7Civlub3lvq4gPiB5dXViaVwgOwor6Iqz57SAID4gaG91a2lcIDsKK+W7g+WckiA+IGhhaWVuXCA7CivmraPkvqEgPiBzZWlrYVwgOwor6L+R5pmCID4ga2luamlcIDsKK+mtmuiCpSA+IGd5b2hpXCA7Civouo3otbcgPiB5YWtraVwgOwor6auY6YGgID4ga291ZW5cIDsKK+WJjeWkqyA+IHplbnB1XCA7CivoirHntIsgPiBrYW1vblwgOwor5YWD56WWID4gZ2Fuc29cIDsKK+WJsOWToSA+IGpvdWluXCA7CivoirHns7ggPiBrYXNoaVwgOwor55uX5rGXID4gbmVhc2VcIDsKK+WFrOeQhiA+IGtvdXJpXCA7CivmrabkurogPiBidWppblwgOwor6Iqx57KJID4ga2FmdW5cIDsKK+W4sOagoSA+IGtpa291XCA7CivoiJ7ouYggPiBidXRvdVwgOwor5bm+5bqmID4gaWt1ZG9cIDsKK+asoeWbniA+IGppa2FpXCA7CivlubTlv4wgPiBuZW5raVwgOwor6Iie6LiPID4gYnV0b3VcIDsKK+msseiSvCA+IHVzc291XCA7CivoiJ7ouIogPiBidXlvdVwgOwor5YaF54KOID4gbmFpZW5cIDsKK+i8quemjSA+IHJpbmthXCA7CivliJHlvpIgPiBrZWl0b1wgOwor5bm05b6MID4gbmVuZ29cIDsKK+mAo+WtkCA+IHJlbmppXCA7Civnm7jmnb8gPiBhaWJhblwgOwor5YmN5aC0ID4gemVuYmFcIDsKK+eUsOm6qSA+IGRlbmJ1XCA7Civlh7nmiYAgPiBvdXNob1wgOwor5YG96YCgID4gZ2l6b3VcIDsKK+W4sOadpSA+IGtpcmFpXCA7Civoi6bnlYwgPiBrdWdhaVwgOwor5YaN5ryUID4gc2FpZW5cIDsKK+W4sOadkSA+IGtpc29uXCA7CivluLjmmYIgPiBqb3VqaVwgOwor5bu25LyaID4gZW5rYWlcIDsKK+aso+WWnCA+IGtpbmtpXCA7CivpgoTku5ggPiBrYW5wdVwgOwor6YGL5Za2ID4gdW4nJ2VpXCA7Civoj5zlnJIgPiBzYWllblwgOwor5bm05bqmID4gbmVuZG9cIDsKK+mAruWknCA+IHRhaXlhXCA7CivpgIDluqcgPiB0YWl6YVwgOwor5Yip5a6zID4gcmlnYWlcIDsKK+iJseiLpiA+IGthbmt1XCA7CivmrKHlloQgPiBqaXplblwgOwor5Yip5a2QID4gcmlzaGlcIDsKK+iNt+aLhSA+IGthdGFuXCA7CivliKXlrrYgPiBiZWtrZVwgOwor6YG65L2cID4gaXNha3VcIDsKK+iNieahiCA+IHNvdWFuXCA7CivojZLmnKggPiBhcmFraVwgOwor5bKp6ZaTID4gaXdhbWFcIDsKK+W6reWckiA+IHRlaWVuXCA7Civpr6jms6IgPiBnZWloYVwgOwor5bm05beuID4gbmVuc2FcIDsKK+mvqOayuSA+IGdlaXl1XCA7CivoubbotbcgPiBrZWtraVwgOwor5YaG5rqAID4gZW5tYW5cIDsKK+iKseepgiA+IGthc3VpXCA7CivovrLmnJ8gPiBub3VraVwgOwor5Yik5a2QID4gaGFua29cIDsKK+iPr+WOsyA+IGtlZ29uXCA7CivpgaDlh7ogPiB0b29kZVwgOwor6YGL5ZG9ID4gdW5tZWlcIDsKK+WFteeBqyA+IGhlaWthXCA7Civnm6Pmn7sgPiBrYW5zYVwgOwor6I+v5Y2XID4ga2FuYW5cIDsKK+mBk+WMliA+IGRvdWtlXCA7CivmrYzku5kgPiBrYXNlblwgOwor6Lui576pID4gdGVuZ2lcIDsKK+asoeWPtyA+IGppZ291XCA7CivmrYzkurogPiBrYWppblwgOwor6auY6LK0ID4ga291a2lcIDsKK+mBjuWNiiA+IGthaGFuXCA7CivliIbluIMgPiBidW5wdVwgOwor55u45pKyID4gc3Vtb3VcIDsKK+iJtuiBniA+IGVuYnVuXCA7Civluo/lpY8gPiBqb3NvdVwgOwor6L+R5omAID4ga2luam9cIDsKK+WHoeaJkyA+IGJvbmRhXCA7Civlh7nlvaIgPiBvdWtlaVwgOwor6IiI6LW3ID4ga291a2lcIDsKK+iIjuiyuyA+IHNoYWhpXCA7CivpgY7li6QgPiBrYWtpblwgOwor6YCa5aScID4gdHN1eWFcIDsKK+mBjuWKtCA+IGthcm91XCA7Civoh6rpgrggPiBqaXRlaVwgOwor6YGL5YuiID4gdW5zZWlcIDsKK+W3qOazoiA+IGt5b2hhXCA7CivpgYvli5UgPiB1bmRvdVwgOwor6L6e5p+EID4gamloZWlcIDsKK+mBjuWJsCA+IGtham91XCA7CivnlZ3plpMgPiB1bmVtYVwgOwor6Ieq6YG4ID4gamlzZW5cIDsKK+i+nuaelyA+IGppcmluXCA7Civnm5vmnJ8gPiBzZWlraVwgOwor5bmz5a62ID4gaGVpa2VcIDsKK+mAo+WdkCA+IHJlbnphXCA7CivpgLjlk4EgPiBpcHBpblwgOwor6YGT5YW3ID4gZG91Z3VcIDsKK+mBjuWIhiA+IGthYnVuXCA7CivlubPlrokgPiBoZWlhblwgOwor5bm05a2jID4gbmVua2lcIDsKK+eahueEoSA+IGthaW11XCA7Civlh6HmhJogPiBib25ndVwgOwor5qmf5qeLID4ga2lrb3VcIDsKK+WIhuWykCA+IGJ1bmtpXCA7CivliY3lj6QgPiB6ZW5rb1wgOwor55S76aSFID4gZ2FiZWlcIDsKK+WFrOa8lCA+IGtvdWVuXCA7Civovp7mm7ggPiBqaXNob1wgOwor6YCg5ZySID4gem91ZW5cIDsKK+WGrOacnyA+IHRvdWtpXCA7Civpq5joqrwgPiBrb3VnaVwgOwor5Ymw5L2ZID4gam91eW9cIDsKK+W6tuWLmSA+IHNob211XCA7CivnlLvpoqggPiBnYWZ1dVwgOwor55ub5pmCID4gc2VpamlcIDsKK+WEgOevhCA+IGdpaGFuXCA7CivoirPnnIkgPiBob3ViaVwgOwor5Yid5aScID4gc2hveWFcIDsKK+WCjeimiyA+IG9rYW1pXCA7CivmqLnmtrIgPiBqdWVraVwgOwor5Yid5aSPID4gc2hva2FcIDsKK+W4jOacmyA+IGtpYm91XCA7Civlt6jmrakgPiBreW9ob1wgOwor5bm85aWzID4geW91am9cIDsKK+eUu+mhjCA+IGdhZGFpXCA7CivliIblrrYgPiBidW5rZVwgOwor5biM5pu4ID4ga2lzaG9cIDsKK+W4sOaKlSA+IGtpdG91XCA7CivlhqTmnokgPiBlbicnb3VcIDsKK+aouea1tyA+IGp1a2FpXCA7Civlub7lpJwgPiBpa3V5b1wgOwor5bm+5aSaID4gaWt1dGFcIDsKK+asoeWFhCA+IGppa2VpXCA7CivmrKHlhYMgPiBqaWdlblwgOwor6L+35a2QID4gbWFpZ29cIDsKK+iHqui7oiA+IGppdGVuXCA7CivmqZ/morAgPiBraWthaVwgOwor5bqn5Y+zID4gemF5dXVcIDsKK+W5u+WkoiA+IGdlbm11XCA7Civlu4nkvqEgPiByZW5rYVwgOwor5YWI54i2ID4gc2VucHVcIDsKK+mBoeS4iiA+IHNvam91XCA7CivmqZ/moLkgPiBraWtvblwgOwor5YG96KqTID4gZ2lzZWlcIDsKK+iIh+irliA+IHlvcm9uXCA7CivpgKDllrYgPiB6b3VlaVwgOwor5Yal5pqXID4gbWVpYW5cIDsKK+iIl+ijhSA+IGhvc291XCA7CivnlbDpg7cgPiBpa3lvdVwgOwor55S76Z2iID4gZ2FtZW5cIDsKK+WAjemfsyA+IGJhaW9uXCA7Civmo4vpoqggPiBraWZ1dVwgOwor55m654GrID4gaGFra2FcIDsKK+WBveioiCA+IGdpa2VpXCA7Civnm7jmhJsgPiBzb3VhaVwgOwor5YG96KiAID4gZ2lnZW5cIDsKK+WFieeElCA+IGtvdWVuXCA7Civlgbboqp4gPiBndXVnb1wgOwor5qmf5p2QID4ga2l6YWlcIDsKK+asoeS+vyA+IGppYmluXCA7CivpgKPlkbwgPiByZW5rb1wgOwor5bem5qeYID4gc2F5b3VcIDsKK+WBtuipoCA+IGd1dWVpXCA7CivprZTnpZ4gPiBtYWppblwgOwor5buK5LiLID4gcm91a2FcIDsKK+mpn+mbqCA+IHNodXV1XCA7Civnm7LmhJsgPiBtb3VhaVwgOwor6Iqx55O2ID4ga2FiaW5cIDsKK+WFieeCjiA+IGtvdWVuXCA7Civlho3moYggPiBzYWlhblwgOwor5YSA56S8ID4gZ2lyZWlcIDsKK+iHquizmyA+IGppc2FuXCA7CivpgKPlj6UgPiByZW5rdVwgOwor6Lev6aCtID4gcm90b3VcIDsKK+asoeS8miA+IGppa2FpXCA7Civov7flpKIgPiBtZWltdVwgOwor6Iux5rOVID4gZWlob3VcIDsKK+iHquiyqSA+IGppaGFuXCA7CivmqZ/mmbogPiBraWNoaVwgOwor6Ium5riLID4ga3VqdXVcIDsKK+WBveijhSA+IGdpc291XCA7Civnm7jlv5wgPiBzb3VvdVwgOwor5qyh5LujID4gamlkYWlcIDsKK+i7jee0gCA+IGd1bmtpXCA7CivlsL7psK0gPiBvYmlyZVwgOwor5bir5oGpID4gc2hpb25cIDsKK+WFrOatpiA+IGtvdWJ1XCA7Civou6Lnp7sgPiB0ZW4nJ2lcIDsKK+i3r+mdoiA+IHJvbWVuXCA7CivlsqHovrogPiBva2FiZVwgOwor5YGJ6LmfID4gaXNla2lcIDsKK+i7ouenkSA+IHRlbmthXCA7Civoh4Dpg6ggPiBkZW5idVwgOwor5YWa5rS+ID4gdG91aGFcIDsKK+mBi+S4iiA+IHVuam91XCA7Civmpa3oi6YgPiBnb3VrdVwgOwor5bGk6ZuyID4gc291dW5cIDsKK+W6p+WDjyA+IHphem91XCA7CivluLfluZUgPiBpYmFrdVwgOwor6YCg5YyWID4gem91a2FcIDsKK+W4t+W4syA+IGljaG91XCA7Civoh6roroMgPiBqaXNhblwgOwor5Yip5Y+jID4gcmlrb3VcIDsKK+apn+aVjyA+IGtpYmluXCA7Civoh6roraYgPiBqaWtlaVwgOwor5YGJ6LehID4gaXNla2lcIDsKK+WFpeatryA+IGlyZWJhXCA7CivlurbkuosgPiBzaG9qaVwgOwor6a2U552hID4gbWFzdWlcIDsKK+aoquatuyA+IG91c2hpXCA7Civou4znr4QgPiBraWhhblwgOwor5YaG5pysID4gZW5wb25cIDsKK+WEkueUnyA+IGp1c2VpXCA7Civlt6Hmn7sgPiBqdW5zYVwgOwor5YaN5pigID4gc2FpZWlcIDsKK+W6teS4uyA+IGFuc2h1XCA7Civoh6roqo0gPiBqaW5pblwgOwor5YKZ6I2SID4gYmlrb3VcIDsKK+W4sOW4hiA+IGtpaGFuXCA7CivoirHniYcgPiBrYWhlblwgOwor6ay856WeID4ga2lqaW5cIDsKK+iGs+mDqCA+IHplbmJ1XCA7CivovLjmtrIgPiB5dWVraVwgOwor55SY6ZyyID4ga2Fucm9cIDsKK+aqgOW+kiA+IGRhbnRvXCA7CivliKnliIMgPiByaWppblwgOwor5Yip5YiAID4gcml0b3VcIDsKK+eVsOixoSA+IGlzaG91XCA7CivojILmnpcgPiBtb3JpblwgOwor5L+d6aSKID4gaG95b3VcIDsKK+WFieazoiA+IGtvdWhhXCA7Civot53pm6IgPiBreW9yaVwgOwor5bem5pa5ID4gc2Fob3VcIDsKK+W6p+S5lyA+IHpham91XCA7CivojYnlurUgPiBzb3VhblwgOwor5qi55p6XID4ganVyaW5cIDsKK+mtlOeVjCA+IG1ha2FpXCA7CivlubPlkowgPiBoZWl3YVwgOwor55yB5a2XID4gc2VpamlcIDsKK+WFt+aciSA+IGd1eXV1XCA7CivpsKXlr6EgPiBrYW5rYVwgOwor5YWs5qGIID4ga291YW5cIDsKK+iHquijvSA+IGppc2VpXCA7Civlh6blpbMgPiBzaG9qb1wgOwor5bid5bqnID4gdGVpemFcIDsKK+WIkeWQjyA+IGtlaXJpXCA7CivpgIHlj5cgPiBzb3VqdVwgOwor5beu5pCNID4gc2Fzb25cIDsKK+aooeanmCA+IG1veW91XCA7CivmqZ/miY0gPiBraXNhaVwgOwor55Wz6KqeID4gam91Z29cIDsKK+WHoeWkqyA+IGJvbnB1XCA7Civlr7/pvaIgPiBqdXJlaVwgOwor5YWD5rCXID4gZ2Vua2lcIDsKK+WIu+S4iyA+IGtva2thXCA7CivpgIDljJYgPiB0YWlrYVwgOwor5YeG5bCJID4ganVuJydpXCA7Civlhrblt6UgPiB5YWtvdVwgOwor5bir5a62ID4gc2hpa2FcIDsKK+aoquafhCA+IG91aGVpXCA7CivlhbjmlYUgPiB0ZW5rb1wgOwor6Imy55uuID4gaXJvbWVcIDsKK+WIqeS+vyA+IHJpYmVuXCA7CivlhazmmocgPiBrb3VrYVwgOwor5YKZ6ICDID4gYmlrb3VcIDsKK+WIpeWAiyA+IGJla2tvXCA7CivnlLvpgZMgPiBnYWRvdVwgOwor6Lev6YqAID4gcm9naW5cIDsKK+W5vOWFkCA+IHlvdWppXCA7CivovrLlrrYgPiBub3VrYVwgOwor6I2J5bGlID4gem91cmlcIDsKK+S/nemZuiA+IGhva2VuXCA7CivlubTliKkgPiBuZW5yaVwgOwor6Iux5pu4ID4gZWlzaG9cIDsKK+WFreaXpSA+IG11aWthXCA7CivliIbljLogPiBidW5rdVwgOwor5YWr5pelID4geW91a2FcIDsKK+WIhuWMliA+IGJ1bmthXCA7CivlhazmlrkgPiBrdWJvdVwgOwor5qiq5pq0ID4gb3Vib3VcIDsKK+WGpeW6nCA+IG1laWZ1XCA7CivliJHlhbcgPiBrZWlndVwgOwor5ben5oqAID4ga291Z2lcIDsKK+iLpuadryA+IGt1aGFpXCA7Civoi7HmmI4gPiBlaW1laVwgOwor5qqA5a62ID4gZGFua2FcIDsKK+aooeacrCA+IG1vaG9uXCA7CivlhaXml6UgPiBpcmloaVwgOwor6Ieq6JamID4gamlzZW5cIDsKK+WwvumVtyA+IG9uYWdhXCA7CivovrLlqaYgPiBub3VmdVwgOwor5bCP6ayiID4ga29iaW5cIDsKK+aji+mBkyA+IGtpZG91XCA7CivliKTkuosgPiBoYW5qaVwgOwor5YiG5YipID4gYnVucmlcIDsKK+iLseaWrSA+IGVpZGFuXCA7CivlgoXogrIgPiBmdWlrdVwgOwor5qiq5patID4gb3VkYW5cIDsKK+iLseaWhyA+IGVpYnVuXCA7Civlh6HlmaggPiBib25raVwgOwor6Iux5pWwID4gZWlzdXVcIDsKK+aoquaWhyA+IG91YnVuXCA7CivlhrTlr5IgPiBnb2thblwgOwor6YCU5LiKID4gdG9qb3VcIDsKK+Wxsei7iiA+IGRhc2hpXCA7CivluIPlt74gPiBmdWtpblwgOwor55u45aC0ID4gc291YmFcIDsKK+ebm+WutCA+IHNlaWVuXCA7CivpqJLpn7MgPiBzb3VvblwgOwor55qG5peiID4ga2Fpa2lcIDsKK+WFmuaYryA+IHRvdXplXCA7CivovrLlpbQgPiBub3Vkb1wgOwor55So6YCUID4geW91dG9cIDsKK+WFieaghCA+IGtvdWVpXCA7CivojLblsYsgPiBjaGF5YVwgOwor6Iqz5rCXID4gaG91a2lcIDsKK+i8v+acmyA+IHlvYm91XCA7CivovrLlpKsgPiBub3VmdVwgOwor6Ieq6JGXID4gamljaG9cIDsKK+WFkOabuSA+IGppc291XCA7Civlh7rliY0gPiBkZW1hZVwgOwor5bmz5L6hID4gaGVpa2FcIDsKK+Wwj+mmrCA+IGtvdW1hXCA7CivmqZ/lt6cgPiBraWtvdVwgOwor5YiR5L2ZID4ga2VpeW9cIDsKK+iNt+WPsCA+IG5pZGFpXCA7CivnlJjphaIgPiBhbWF6dVwgOwor5Yas5a2jID4gdG91a2lcIDsKK+iLl+acqCA+IG5hZWdpXCA7CivlhbXmiIggPiBoZWlrYVwgOwor5bm55LqLID4ga2FuamlcIDsKK+mnu+mmrCA+IGthbmJhXCA7CivnlLvos5sgPiBnYXNhblwgOwor55m95peXID4gaGFra2lcIDsKK+mAgeS7mCA+IHNvdWZ1XCA7CivlhoXlv5wgPiBuYWlvdVwgOwor5YeN5ZyfID4gdG91ZG9cIDsKK+W4r+WcsCA+IG9iaWppXCA7Civlho3luqYgPiBzYWlkb1wgOwor6L665ZyfID4gaGVuZG9cIDsKK+WwvumMoCA+IGJpam91XCA7CivliJHkuosgPiBrZWlqaVwgOwor5YaG5by+ID4gZW5kYW5cIDsKK+ebruWeoiA+IG1lYWthXCA7CivnnLzkuIsgPiBnYW5rYVwgOwor5YaN5biwID4gc2Fpa2lcIDsKK+WGt+WkjyA+IHJlaWthXCA7Civov5Hlj6QgPiBraW5rb1wgOwor5bex5bezID4ga2lzaGlcIDsKK+i7vea1riA+IGtlaWZ1XCA7CivojZLlnJ8gPiBrb3Vkb1wgOwor6Iub5paCID4ga2FyZW5cIDsKK+i7oueCiSA+IHRlbnJvXCA7CivlhajmiLggPiB6ZW5rb1wgOwor6Iub5pS/ID4ga2FzZWlcIDsKK+eUu+iumiA+IGdhc2FuXCA7CivnlLvoroMgPiBnYXNhblwgOwor6L6y5ZySID4gbm91ZW5cIDsKK+W3u+WwviA+IGthbmJpXCA7Civnm5vlpI8gPiBzZWlrYVwgOwor5L2z6bqXID4ga2FyZWlcIDsKK+iJtueEtiA+IGVuemVuXCA7Civoi7HmiY0gPiBlaXNhaVwgOwor6IWw6YOoID4geW91YnVcIDsKK+i7veayuSA+IGtlaXl1XCA7CivluYfliqkgPiBob3Vqb1wgOwor5YaF5biRID4gbmFpZG9cIDsKK+eUu+irhyA+IGdhZGFuXCA7CivlhpnlrZcgPiBzaGFqaVwgOwor5L6b6aSKID4ga3V5b3VcIDsKK+WAkuiqniA+IHRvdWdvXCA7Civnmbrmj64gPiBoYWtraVwgOwor6ay854GrID4gb25pYmlcIDsKK+mtmuayuSA+IGd5b3l1XCA7CivluJ3lnJ8gPiB0ZWlkb1wgOwor5qmf5auMID4ga2lnZW5cIDsKK+eUn+i1tyA+IHNlaWtpXCA7CivoirHmoqggPiBrYXJpblwgOwor5YWM5o+bID4gZGFrYW5cIDsKK+WIgOS4iyA+IHRvdWthXCA7CivprZTms5UgPiBtYWhvdVwgOwor6Ium5oimID4ga3VzZW5cIDsKK+WCt+eXjSA+IHNob3VpXCA7CivlgJnoo5wgPiBrb3Vob1wgOwor5bi45YuZID4gam91bXVcIDsKK+W4sOWPgiA+IGtpc2FuXCA7Civlt6blsrggPiBzYWdhblwgOwor5YaG5bGFID4gbWFkb2lcIDsKK+earuWxpCA+IGhpc291XCA7CivmqLnlubkgPiBqdWthblwgOwor6Ium5oWuID4ga3VyeW9cIDsKK+mmrOm9oiA+IGJhcmVpXCA7CivkvZnpvaIgPiB5b3JlaVwgOwor6Lu95qmfID4ga2Vpa2lcIDsKK+eXlOeYuyA+IGppcm91XCA7Civlt6jlr4wgPiBreW9mdVwgOwor5YaN5auBID4gc2Fpa2FcIDsKK+WGheWutCA+IG5haWVuXCA7Civoh6rnvbIgPiBqaXNob1wgOwor5YWs5bqrID4ga291a29cIDsKK+WCmeegsiA+IGJpaG91XCA7Civlhazluo8gPiBrb3Vqb1wgOwor6Ium5oOFID4ga3Vqb3VcIDsKK+iMtuWckiA+IGNoYWVuXCA7Civoi6bmgrYgPiBrdW1vblwgOwor6Ium5oKpID4ga3Vub3VcIDsKK+eVsOiHrSA+IGlzaHV1XCA7CivnlKjoqp4gPiB5b3Vnb1wgOwor5bem5a6YID4gc2FrYW5cIDsKK+ankOaouSA+IGthaWp1XCA7CivlhpflpJogPiBqb3V0YVwgOwor6Luf5rS+ID4gbmFucGFcIDsKK+WGpeWcnyA+IG1laWRvXCA7CivlhazluIMgPiBrb3VmdVwgOwor55Ww6IW5ID4gaWZ1a3VcIDsKK+WFiOaJiyA+IHNlbnRlXCA7Civlhazlt64gPiBrb3VzYVwgOwor6Iy25ZmoID4gY2hha2lcIDsKK+iHk+iFkSA+IHpvdWZ1XCA7Civov5Hkvo0gPiBraW5qaVwgOwor6ayx5rueID4gdXR0YWlcIDsKK+ahgummrCA+IGtlaW1hXCA7Civov5HkvLwgPiBraW5qaVwgOwor6L+U5LuYID4gaGVucHVcIDsKK+mrmOelliA+IGtvdXNvXCA7CivmooXphaIgPiB1bWV6dVwgOwor6L6y5YuZID4gbm91bXVcIDsKK+W4uOWCmSA+IGpvdWJpXCA7Civoi6blvbkgPiBrdWVraVwgOwor5biD5ZujID4gZnV0b25cIDsKK+i/lOS6iyA+IGhlbmppXCA7CivoiIznpo0gPiB6ZWtrYVwgOwor5YW15a62ID4gaGVpa2FcIDsKK+i/keS6iyA+IGtpbmppXCA7CivltZDmsJcgPiByYW5raVwgOwor6a6u5bqmID4gc2VuZG9cIDsKK+iLm+aApyA+IGthc2VpXCA7CivmorXoqp4gPiBib25nb1wgOwor6aiw6LK0ID4gdG91a2lcIDsKK+WxpeihjCA+IHJpa291XCA7CivnnIzkuIsgPiBrZW5rYVwgOwor5YaF5aWlID4gbmFpb3VcIDsKK+iFlei8qiA+IHVkZXdhXCA7Civotbfpm7sgPiBraWRlblwgOwor5bir5YSSID4gc2hpanVcIDsKK+Wutum0qCA+IGFoaXJ1XCA7Civlr53poZQgPiBuZWdhb1wgOwor6L6y5YW3ID4gbm91Z3VcIDsKK+W4guWWtiA+IHNoaWVpXCA7CivlhoblorMgPiBlbnB1blwgOwor6Imy5rCXID4gaXJva2VcIDsKK+W3peWkqyA+IGtvdWZ1XCA7Civovp7ljrsgPiBqaWt5b1wgOwor6Lui5qmfID4gdGVua2lcIDsKK+msvOatryA+IG9uaWJhXCA7CivlsIHpjpYgPiBmdXVzYVwgOwor6Iux5bGvID4gZWl0b25cIDsKK+WFrOWuiSA+IGtvdWFuXCA7CivlsJbpg6ggPiBzZW5idVwgOwor6L6t5YW4ID4gaml0ZW5cIDsKK+W4uOS6iyA+IGpvdWppXCA7CivlhajlrrYgPiB6ZW5rYVwgOwor55u45Ly8ID4gc291amlcIDsKK+WBiee4viA+IGlzZWtpXCA7Civlt6XloLQgPiBrb3ViYVwgOwor55m65biDID4gaGFwcHVcIDsKK+W4sOS7uyA+IGtpbmluXCA7CivlhYTlvowgPiBhbmlnb1wgOwor55u45LqSID4gc291Z29cIDsKK+WAtuiAhSA+IGt1c2hhXCA7Civkv5rorKEgPiByaXlvdVwgOwor5YWJ5bqmID4ga291ZG9cIDsKK+mms+mnhiA+IGNoaWt1XCA7Civkv5roq7ogPiByaWdlblwgOwor5YWI5bqmID4gc2VuZG9cIDsKK+S/juixhiA+IHNvdG91XCA7Civlhpflk6EgPiBqb3VpblwgOwor6LuN5q2MID4gZ3Vua2FcIDsKK+eUn+idiyA+IGtpcm91XCA7CivlhYvlt7EgPiBrb2traVwgOwor5YaF5ZugID4gbmFpaW5cIDsKK+i3m+ihjCA+IGhha291XCA7Civnm7LkuoAgPiBtb3VraVwgOwor5bir5LqLID4gc2hpamlcIDsKK+iLpuWvkiA+IGt1a2FuXCA7Civovp7lhbggPiBqaXRlblwgOwor55ar55eiID4gZWtpcmlcIDsKK+ebm+WEgCA+IHNlaWdpXCA7CivluILljLogPiBzaGlrdVwgOwor6aas6aaWID4gYmFzaHVcIDsKK+S/muiogCA+IHJpZ2VuXCA7CivkvZnpppkgPiB5b2tvdVwgOwor55m75bGxID4gdG96YW5cIDsKK+eWteeRlSA+IHNoaWthXCA7Civou43mqZ8gPiBndW5raVwgOwor6Iux5ae/ID4gZWlzaGlcIDsKK+WGl+WPpSA+IGpvdWt1XCA7CivovrLkuosgPiBub3VqaVwgOwor5qip5aiBID4ga2VuJydpXCA7Civnm67kuIsgPiBtb2trYVwgOwor5bau5bKoID4ga2Vuc29cIDsKK+alreeBqyA+IGdvdWthXCA7Civoh6rnpL4gPiBqaXNoYVwgOwor55aj55eUID4gaWJvamlcIDsKK+S9memiqCA+IHlvZnV1XCA7CivmqZ/li5UgPiBraWRvdVwgOwor5L2Z6aGeID4geW9ydWlcIDsKK+WFkOWtqyA+IGppc29uXCA7Civnm6PkuosgPiBrYW5qaVwgOwor6aas6aCtID4gYmF0b3VcIDsKK+WAuee0oCA+IGtlbnNvXCA7CivnlJjol7sgPiBhbWFtb1wgOwor55qH5aaDID4ga291aGlcIDsKK+WwvuihjCA+IGJpa291XCA7CivnmoflpbMgPiBrb3Vqb1wgOwor5a626aKoID4ga2FmdXVcIDsKK+W3peWToSA+IGtvdWluXCA7CivlhbXlmaggPiBoZWlraVwgOwor6Im25pu4ID4gZW5zaG9cIDsKK+WEquW8pyA+IHl1dWtvXCA7CivlhazlnJIgPiBrb3VlblwgOwor6L6e5Lu7ID4gamluaW5cIDsKK+ebm+S6iyA+IHNlaWppXCA7Civovp7ku6QgPiBqaXJlaVwgOwor5qOJ6IqxID4gbWVua2FcIDsKK+apn+WGhSA+IGtpbmFpXCA7Civlhazlm7MgPiBrb3V6dVwgOwor5YW15Za2ID4gaGVpZWlcIDsKK+eUsOiIjiA+IGluYWthXCA7Civlt6blj7MgPiBzYXl1dVwgOwor5qmf5YWIID4ga2lzZW5cIDsKK+WFqOWcnyA+IHplbmRvXCA7Civlhajlm7MgPiB6ZW56dVwgOwor6IOv6ZaTID4ga29rYW5cIDsKK+eVsOensCA+IGlzaG91XCA7CivnlLvogZYgPiBnYXNlaVwgOwor5YWs5ZmoID4ga291a2lcIDsKK+S9jumfsyA+IHRlaW9uXCA7Civoh6rnnIEgPiBqaXNlaVwgOwor5biM5LujID4ga2lkYWlcIDsKK+i+nuS4liA+IGppc2VpXCA7CivlhYjlqaYgPiBzZW5wdVwgOwor6LuM5p2hID4ga2lqb3VcIDsKK+Wwj+ixhiA+IGF6dWtpXCA7CivlhbXlk6EgPiBoZWlpblwgOwor5qGI6YWNID4gYW5iYWlcIDsKK+WutumbuyA+IGthZGVuXCA7CivlhoXli5kgPiBuYWltdVwgOwor5bCK6LK0ID4gc29ua2lcIDsKK+W4guS+oSA+IHNoaWthXCA7Civlt67liIYgPiBzYWJ1blwgOwor5YWs5Za2ID4ga291ZWlcIDsKK+WGheWKqSA+IG5haWpvXCA7Civnk6bop6MgPiBnYWthaVwgOwor5Yag5L2NID4ga2FuJydpXCA7Civoi7HlmbggPiBlaXRvblwgOwor5qKF6KaLID4gdW1lbWlcIDsKK+W3peWLmSA+IGtvdW11XCA7CivmqKHlnosgPiBtb2tlaVwgOwor5biM5LiWID4ga2lzZWlcIDsKK+aghOmkiiA+IGVpeW91XCA7Civkv5jomZwgPiBmdXJ5b1wgOwor6a2U5omLID4gbWFzaHVcIDsKK+eUn+iKsSA+IHNlaWthXCA7Civlgb3niYggPiBnaWhhblwgOwor5L2O6ZuyID4gdGVpdW5cIDsKK+WFiOWmoyA+IHNlbnBpXCA7CivluIPku6QgPiBmdXJlaVwgOwor5beo5YipID4ga3lvcmlcIDsKK+eZveWgiiA+IGhha3VhXCA7Civmo4vogZYgPiBraXNlaVwgOwor5YWI5aSrID4gemVucHVcIDsKK+WFvOWLmSA+IGtlbm11XCA7CivmqZ/kvZMgPiBraXRhaVwgOwor55SY6IumID4ga2Fua3VcIDsKK+mmmemcsiA+IGtvdXJvXCA7Civpq5jngokgPiBrb3Vyb1wgOwor55m75Z+OID4gdG9qb3VcIDsKK+i7jeaXlyA+IGd1bmtpXCA7CivkvbPphrggPiBrYWpvdVwgOwor6Lev6IKpID4gcm9rZW5cIDsKK+apn+S8miA+IGtpa2FpXCA7CivkvLzpoZQgPiBuaWdhb1wgOwor55Sy576FID4ga291cmFcIDsKK+WutumWgCA+IGthbW9uXCA7Civoh6rnlLEgPiBqaXl1dVwgOwor5qOE6IOMID4ga2loYWlcIDsKK+S+v+ihoyA+IGJlbicnaVwgOwor5YaG5YWJID4gZW5rb3VcIDsKK+iHqueUqCA+IGppeW91XCA7Civoh6rnlJ8gPiBqaXNlaVwgOwor5L2/6YCUID4gc2hpdG9cIDsKK+i7veW+riA+IGtlaWJpXCA7CivlhbXljKogPiBoZWloaVwgOwor5L2z6YWSID4ga2FzaHVcIDsKK+W3peWFtyA+IGtvdWd1XCA7CivnmbvlnYIgPiB0b2hhblwgOwor5a+M6YmxID4gZnVrb3VcIDsKK+WFrOWQjyA+IGtvdXJpXCA7CivlhoXlhIAgPiBuYWlnaVwgOwor5L6u6KiAID4gYnVnZW5cIDsKK+mojuihjCA+IGtpa291XCA7CivovL/lnLAgPiB5b2NoaVwgOwor5bu244CFID4gZW4nJ2VuXCA7Civmo4TogIEgPiBraXJvdVwgOwor6Iq45a2QID4gZ2Vpa29cIDsKK+iDjOmboiA+IGhhaXJpXCA7Civlt6blgr4gPiBzYWtlaVwgOwor5L+d6I+MID4gaG9raW5cIDsKK+apn+S4iiA+IGtpam91XCA7CivlhazljbAgPiBrb3VpblwgOwor6LyU5bCOID4gaG9kb3VcIDsKK+WFq+WNpiA+IGhha2tlXCA7Civou73luqYgPiBrZWlkb1wgOwor5be05Lq6ID4gaGFqaW5cIDsKK+eUu+e0mSA+IGdhc2hpXCA7Civoi7HlkI0gPiBlaW1laVwgOwor6IW56IWUID4gZnVra29cIDsKK+WFrOWLnyA+IGtvdWJvXCA7Civlhazli5kgPiBrb3VtdVwgOwor55Wq55uuID4gYmFubWVcIDsKK+WFmuWToSA+IHRvdWluXCA7CivlhoXkvo0gPiBuYWlqaVwgOwor5YW85YKZID4ga2VuYmlcIDsKK+msvOaJjSA+IGtpc2FpXCA7Civlr4Tph5EgPiBraWtpblwgOwor6LWw6LevID4gc291cm9cIDsKK+mtlOW8viA+IG1hZGFuXCA7CivlsqHnm64gPiBva2FtZVwgOwor5a6Y6ZyAID4ga2FuanVcIDsKK+WEgOW9oiA+IGdpa2VpXCA7CivlhKrlqYkgPiB5dXVlblwgOwor55Ge6ZuyID4genVpdW5cIDsKK+mrmOa4qSA+IGtvdW9uXCA7CivlsL7oirEgPiBvYmFuYVwgOwor5a++6KmxID4gdGFpd2FcIDsKK+S8nemmrCA+IHRlbm1hXCA7CivovY3lj4kgPiB0ZXNzYVwgOwor5L6d6KiXID4gaXRha3VcIDsKK+iEs+ijoSA+IG5vdXJpXCA7CivmqKnljJYgPiBnb25nZVwgOwor6ISz6KOPID4gbm91cmlcIDsKK+iLpuWQnyA+IGt1Z2luXCA7CivoirjlppMgPiBnZWlnaVwgOwor6Lev57eaID4gcm9zZW5cIDsKK+i1pOi6qyA+IGFrYW1pXCA7CivlhbXlgpkgPiBoZWliaVwgOwor5YaF5LqLID4gbmFpamlcIDsKK+eUmOe+jiA+IGthbmJpXCA7Civlr4zovrIgPiBmdW5vdVwgOwor5L+u576FID4gc2h1cmFcIDsKK+iKpeWtkCA+IGtlc2hpXCA7CivnlpHngrkgPiBnaXRlblwgOwor5bel5LqLID4ga291amlcIDsKK+aoveS/jiA+IHNvbnNvXCA7Civkvo3orJsgPiBqaWtvdVwgOwor6LuN5omLID4gZ3VudGVcIDsKK+aoqeWIqSA+IGtlbnJpXCA7CivkvJrpo7IgPiBrYWlpblwgOwor5YW45L6NID4gdGVuamlcIDsKK+WFrOWEgCA+IGtvdWdpXCA7CivlronpnZkgPiBhbnNlaVwgOwor6aeF6LevID4gZWtpcm9cIDsKK+WEkuWumCA+IGp1a2FuXCA7CivlhaXlhoUgPiBqdWRhaVwgOwor5YWa5YuZID4gdG91bXVcIDsKK+WFt+S9kyA+IGd1dGFpXCA7Civnmbrlj6UgPiBob2trdVwgOwor5L216LW3ID4gaGVpa2lcIDsKK+msseaGpCA+IHVwcHVuXCA7Civoi6blirQgPiBrdXJvdVwgOwor5L2z6LajID4ga2FzaHVcIDsKK+anmOWtkCA+IHlvdXN1XCA7Civkv53ogrIgPiBob2lrdVwgOwor55S756i/ID4gZ2Frb3VcIDsKK+WxseeqqSA+IHNhbmthXCA7CivkvovoqbEgPiByZWl3YVwgOwor5YWF5ZOhID4ganV1aW5cIDsKK+iKseWjhyA+IGthZGFuXCA7CivlhajlgpkgPiB6ZW5iaVwgOwor5YWa5YipID4gdG91cmlcIDsKK+i4j+egtCA+IHRvdWhhXCA7CivlraTpq5ggPiBrb2tvdVwgOwor6Ieq54KKID4gamlzdWlcIDsKK+alreaenCA+IGdvdWthXCA7CivkvbPos5MgPiBrYWhpblwgOwor55Sf57O4ID4ga2lpdG9cIDsKK+WFteS6iyA+IGhlaWppXCA7CivlhYjlj6QgPiBzZW5rb1wgOwor5qih5YaZID4gbW9zaGFcIDsKK+WDp+W+kiA+IHNvdXRvXCA7Civog4Ppj6EgPiBpa3lvdVwgOwor6auY5q2MID4ga291a2FcIDsKK+S+i+imjyA+IHJlaWtpXCA7Civpq5jmrKEgPiBrb3VqaVwgOwor55aO5ryPID4gc29yb3VcIDsKK+WuiemWkSA+IGFua2FuXCA7CivmqLnkuIogPiBqdWpvdVwgOwor5L2Z6LypID4geW9oYWlcIDsKK+aiheiKsSA+IGJhaWthXCA7CivlhIDlrrkgPiBnaXlvdVwgOwor55Sw56efID4gZGVuc29cIDsKK+WDp+W6tSA+IHNvdWFuXCA7Civppqzou4ogPiBiYXNoYVwgOwor5YWs5LqLID4ga291amlcIDsKK+WFiOWLmSA+IHNlbm11XCA7Civkv7rnrYkgPiBvcmVyYVwgOwor5a+M6LK0ID4gZnVra2lcIDsKK+WvoeiogCA+IGthZ2VuXCA7Civpppbpg70gPiBzaHV0b1wgOwor5qih5YCjID4gbW9ob3VcIDsKK+WvjOixqiA+IGZ1Z291XCA7CivppZHppYkgPiBraWtpblwgOwor6aas6LmEID4gYmF0ZWlcIDsKK+i3teelmiA+IHNlbnNvXCA7Civot6/nqIsgPiByb3RlaVwgOwor5a+E6LSIID4ga2l6b3VcIDsKK+S9k+i6ryA+IHRhaWt1XCA7Civnl7TmhJogPiBjaGlndVwgOwor6IOM6YOoID4gaGFpYnVcIDsKK+S/nee3miA+IGhvc2VuXCA7Civoi7HkuLsgPiBlaXNodVwgOwor5a2j6aGMID4ga2lkYWlcIDsKK+WFg+WIqSA+IGdlbnJpXCA7CivkvbXoqJggPiBoZWlraVwgOwor5YCr55CGID4gcmlucmlcIDsKK+i7iuW6qyA+IHNoYWtvXCA7CivogqHplpMgPiBrb2thblwgOwor55Sj56eRID4gc2Fua2FcIDsKK+Wvk+ipsSA+IGd1dXdhXCA7CivkvbPoqIAgPiBrYWdlblwgOwor6Ieq5rWEID4gamlqb3VcIDsKK+eWj+awtCA+IHNvc3VpXCA7Civnlo7msLQgPiBzb3N1aVwgOwor5L2Z6LKhID4geW96YWlcIDsKK+iEvuiHnyA+IGhpem91XCA7CivlrZDppqwgPiBrb3VtYVwgOwor6IS+6IeTID4gaGl6b3VcIDsKK+WDp+WwvCA+IHNvdW5pXCA7CivnmbrkvZwgPiBob3NzYVwgOwor6Lui5auBID4gdGVua2FcIDsKK+iHquayuyA+IGppY2hpXCA7CivnmZLlkIggPiB5dWdvdVwgOwor5YWF5YKZID4ganV1YmlcIDsKK+WDp+WvuiA+IHNvdWppXCA7CivohL7ohasgPiBoaXNodVwgOwor6auY5p62ID4ga291a2FcIDsKK+WwvuexoCA+IGJpcm91XCA7Civnl5vmiYsgPiBpdGFkZVwgOwor55m95LqcID4gaGFrdWFcIDsKK+WDp+WutiA+IHNvdWthXCA7CivlrrbosqEgPiBrYXphaVwgOwor6Lui5amGID4gdGVuYmFcIDsKK+WBpeatqSA+IGtlbnBvXCA7CivprLzlrZAgPiBvbmlnb1wgOwor5qWK5p6dID4geW91amlcIDsKK+WxleekuiA+IHRlbmppXCA7CivlrpjpgJQgPiBrYW50b1wgOwor6Ieq5rCRID4gamltaW5cIDsKK+S/neeuoSA+IGhva2FuXCA7CivmoITou6IgPiBlaXRlblwgOwor5qSc5rOiID4ga2VucGFcIDsKK+S7rumhjCA+IGthZGFpXCA7CivlrZfpnaIgPiBqaW1lblwgOwor6Lev55ukID4gcm9iYW5cIDsKK+WFg+S+oSA+IGdlbmthXCA7CivoiLXmiYsgPiBkYXNodVwgOwor5a6P6YGgID4ga291ZW5cIDsKK+WtkOmfsyA+IHNoaWluXCA7CivoiablsL4gPiBrYW5iaVwgOwor5L2Z6KuHID4geW9kYW5cIDsKK+WEgOWeiyA+IGdpa2VpXCA7Civlr4zoo5UgPiBmdXl1dVwgOwor5qeL5ZuzID4ga291enVcIDsKK+eUo+edgCA+IHVidWdpXCA7CivlgY/ms6IgPiBoZW5oYVwgOwor6ama55WwID4ga3lvdWlcIDsKK+WBveacrCA+IGdpaG9uXCA7Civoibblp78gPiBlbnNoaVwgOwor5YSq5YipID4geXV1cmlcIDsKK+alteaEjyA+IGdva3VpXCA7Civku67pnaIgPiBrYW1lblwgOwor5YG95pu4ID4gZ2lzaG9cIDsKK+Wyoea5ryA+IG9rYXl1XCA7Civmo4vnlYwgPiBraWthaVwgOwor5L+d56iOID4gaG96ZWlcIDsKK+S9meioiCA+IHlva2VpXCA7Civlg4Xlt64gPiBraW5zYVwgOwor5YWE5LqLID4ga2VpamlcIDsKK+i6r+W5uSA+IGt1a2FuXCA7Civlgr7luqYgPiBrZWlkb1wgOwor5L+v556wID4gZnVrYW5cIDsKK+agoeimjyA+IGtvdWtpXCA7Civoh6jmqZ8gPiByaW5raVwgOwor6IKp6YOoID4ga2VuYnVcIDsKK+iJh+W6qyA+IHRlaWtvXCA7CivlsIrogIUgPiBzb25qYVwgOwor6Leh55uuID4gYXRvbWVcIDsKK+i3r+eUqCA+IHJveW91XCA7CivlrrboqJMgPiBrYWt1blwgOwor5a2X6ZaTID4gamlrYW5cIDsKK+WutuioiCA+IGtha2VpXCA7CivoirHlhqAgPiBrYWthblwgOwor5L2O6KqeID4gdGVpZ29cIDsKK+Wun+iyuyA+IGppcHBpXCA7Civlgr7lt64gPiBrZWlzYVwgOwor55S354yrID4gb25la29cIDsKK+eUpueUnyA+IHNvc2VpXCA7CivotbfojYkgPiBraXNvdVwgOwor5p626ZaTID4ga2FrYW5cIDsKK+S9meijlSA+IHlveXV1XCA7CivltanlkbwgPiBzdXVrb1wgOwor5a6Y6LK7ID4ga2FucGlcIDsKK+mkiumviSA+IHlvdXJpXCA7Civou43lpKsgPiBndW5wdVwgOwor55aO5p6XID4gc29yaW5cIDsKK+WutuijgSA+IGthc2FpXCA7Civkv7PnlLsgPiBoYWlnYVwgOwor6LuK5aSrID4gc2hhZnVcIDsKK+S7lumdoiA+IHRhbWVuXCA7CivlsI/ntIsgPiBrb21vblwgOwor5qGD6IqxID4gdG91a2FcIDsKK+eUn+eQhiA+IHNlaXJpXCA7CivohYvnqqkgPiBla2lrYVwgOwor5LuY6ZqPID4gZnV6dWlcIDsKK+mrmOaJuSA+IGtvdWhpXCA7Civlrrbonb8gPiBpZWJhZVwgOwor5qSc5p+7ID4ga2Vuc2FcIDsKK+WCmeW/mCA+IGJpYm91XCA7CivlsI/nsosgPiBrb2lraVwgOwor5a6f6KiYID4gamlra2lcIDsKK+iHquabuCA+IGppc2hvXCA7CivosqvpppYgPiBrYW5qdVwgOwor5YGJ5qWtID4gaWd5b3VcIDsKK+S6uummrCA+IGppbmJhXCA7CivlhITliqsgPiBva2t1dVwgOwor6LK06aGVID4ga2lrZW5cIDsKK+S+jeiAhSA+IGppc2hhXCA7Civoh6rmmrQgPiBqaWJvdVwgOwor5L6/56eYID4gYmVucGlcIDsKK+WumOipsSA+IGthbndhXCA7CivltI7ltJYgPiBraWdhaVwgOwor55aO5pS+ID4gc29ob3VcIDsKK+S9meiWqyA+IHlva3VuXCA7Civoh6rmmI4gPiBqaW1laVwgOwor6Ieo5pmCID4gcmluamlcIDsKK+mkjOmjnyA+IGVqaWtpXCA7Civou43lmaggPiBndW5raVwgOwor5a6a6KaPID4gam91Z2lcIDsKK+iIueWwviA+IHNlbmJpXCA7CivlhIDliJEgPiBnaWtlaVwgOwor5LuK6ZqbID4gaW1hd2FcIDsKK+WEhOWGhiA+IG9rdWVuXCA7CivlhIDliIAgPiBnaXRvdVwgOwor5a6I6K23ID4gc2h1Z29cIDsKK+S8muiyuyA+IGthaWhpXCA7CivlsqnmoLkgPiBpd2FuZVwgOwor6aWL6YKEID4ga2lrYW5cIDsKK+WvoeiBniA+IGthYnVuXCA7Civpq5jmgakgPiBrb3VvblwgOwor55S35rudID4gb2Rha2lcIDsKK+i7ouWMliA+IHRlbmthXCA7CivlhIDlhbggPiBnaXRlblwgOwor55Oc56eRID4gdXJpa2FcIDsKK+i7veS+riA+IGtlaWJ1XCA7CivlrrbolLUgPiBrYXpvdVwgOwor5L6b57GzID4ga3VtYWlcIDsKK+aghOieuiA+IHNhemFlXCA7Civou5/ljJYgPiBuYW5rYVwgOwor5YCk5q61ID4gbmVkYW5cIDsKK+WtpOi7jSA+IGtvZ3VuXCA7Civlgb3mgqogPiBnaWFrdVwgOwor55Ww5pydID4gaWNob3VcIDsKK+S9s+iCtCA+IGtha291XCA7CivnlrLlvIogPiBoaWhlaVwgOwor5Lya6K2wID4ga2FpZ2lcIDsKK+eUmOeFriA+IGFtYW5pXCA7Civlgb3mgKcgPiBnaXNlaVwgOwor5p2l6aeVID4gcmFpZ2FcIDsKK+eUu+azlSA+IGdhaG91XCA7Civlr4ToiKogPiBraWtvdVwgOwor6auY5bqnID4ga291emFcIDsKK+mrmOW6piA+IGtvdWRvXCA7Civoia/ljLsgPiByeW91aVwgOwor5Lyd6KiYID4gZGVua2lcIDsKK+S8muipsSA+IGthaXdhXCA7CivkvZnoirMgPiB5b2hvdVwgOwor5Lmx6bq7ID4gcmFubWFcIDsKK+WCmOWvvyA+IHNhbmp1XCA7CivlsbHmsrMgPiBzYW5nYVwgOwor5bC+54q2ID4gYmlqb3VcIDsKK+iAs+mghiA+IGppanVuXCA7CivkvL3ol40gPiBnYXJhblwgOwor6LOb6L6eID4gc2FuamlcIDsKK+i7jeWMuyA+IGd1bicnaVwgOwor5bCC56eRID4gc2Vua2FcIDsKK+eVsOaVmSA+IGlreW91XCA7CivlhIDku5cgPiBnaWpvdVwgOwor5a6I6KGbID4gc2h1ZWlcIDsKK+WvjOiAhSA+IGZ1c2hhXCA7CivkvJropo8gPiBrYWlraVwgOwor6LuN5YuZID4gZ3VubXVcIDsKK+eUo+a5ryA+IHVidXl1XCA7Civpppnoj68gPiBrb3VnZVwgOwor6Ieq5oiSID4gamlrYWlcIDsKK+WwvueHiCA+IGJpdG91XCA7Civkvpvnpa0gPiBndXNhaVwgOwor6LOT6L6eID4gaGluamlcIDsKK+iDmuiKvSA+IGhhaWdhXCA7CivotbfnrpcgPiBraXNhblwgOwor6Iie5a2QID4gbWFpa29cIDsKK+S9s+e3qCA+IGthaGVuXCA7Civoh6rmhaIgPiBqaW1hblwgOwor6Lui5L2NID4gdGVuJydpXCA7Civpo6LppYkgPiBraWtpblwgOwor5qW95ZmoID4gZ2Fra2lcIDsKK+eWkeW/tSA+IGdpbmVuXCA7Civlr7rnpL4gPiBqaXNoYVwgOwor5L2Z6IGeID4geW9idW5cIDsKK+S6pOmZhCA+IGtvdWZ1XCA7CivlraboqrIgPiBnYWtrYVwgOwor5YOt5L2NID4gc2VuJydpXCA7Civku5jov5EgPiBmdWtpblwgOwor5bC+54GvID4gYml0b3VcIDsKK+mmrOiAlSA+IGJha291XCA7Civnk5znlLAgPiBrYWRlblwgOwor6LiP5p+7ID4gdG91c2FcIDsKK+mrmOWunCA+IGtvdWdpXCA7CivotbfnqL8gPiBraWtvdVwgOwor55S75qW8ID4gZ2Fyb3VcIDsKK+iEseeariA+IGRhcHBpXCA7CivnlY/mnI0gPiBpZnVrdVwgOwor5p2l6ZmiID4gcmFpaW5cIDsKK+S+jeelrSA+IGppc2FpXCA7Civou43lgpkgPiBndW5iaVwgOwor55Sj5rCXID4gc2Fua2VcIDsKK+aliuWtkCA+IHlvdWppXCA7CivlsI/nlbAgPiBzaG91aVwgOwor6Iie5aaTID4gbWFpa29cIDsKK+ajhOatuyA+IGtpc2hpXCA7CivkvZnnvaogPiB5b3phaVwgOwor55Sj5q+bID4gdWJ1Z2VcIDsKK+alreWboCA+IGdvdWluXCA7CivkvovnpLogPiByZWlqaVwgOwor5a626ICBID4ga2Fyb3VcIDsKK+eUn+awlyA+IHNlaWtpXCA7CivkuovpoIUgPiBqaWtvdVwgOwor6IWQ54ibID4gZnVyYW5cIDsKK+Wwj+eTtiA+IGtvYmluXCA7CivkvbPnr4cgPiBrYWhlblwgOwor6ISx55a9ID4gZGFzc29cIDsKK+WyqeaIuCA+IGl3YXRvXCA7Civlr7/nm4MgPiBqdWhhaVwgOwor55Sf5q+NID4gc2VpYm9cIDsKK+iHquW8gSA+IGppYmVuXCA7CivnlarmiYsgPiBiYW50ZVwgOwor5YG45a6JID4gdG91YW5cIDsKK+Wwj+eQtCA+IG9nb3RvXCA7Civkv4TnhLYgPiBnYXplblwgOwor5qOE5qipID4ga2lrZW5cIDsKK+ixqumjsiA+IGdvdWluXCA7CivkuoDpoK0gPiBraXRvdVwgOwor55S75p2/ID4gZ2FiYW5cIDsKK+Wtl+iokyA+IGppa3VuXCA7CivmorPmr5sgPiBzb21vdVwgOwor6aOb6Zu7ID4gaGlkZW5cIDsKK+S6jOmajiA+IG5pa2FpXCA7CivnlLvmnZAgPiBnYXphaVwgOwor5a2X6KejID4gamlrYWlcIDsKK+i7jeS6iyA+IGd1bmppXCA7CivnkIbosqEgPiByaXphaVwgOwor55S75pysID4gZ2Fob25cIDsKK+eUu+acnyA+IGtha2tpXCA7Civoh6rlt6UgPiBqaWtvdVwgOwor6IOD6IW4ID4gaWNob3VcIDsKK+agoee0gCA+IGtvdWtpXCA7CivnlbjlvaIgPiBraWtlaVwgOwor5Luj6K2wID4gZGFpZ2lcIDsKK+S7ruiogCA+IGthZ2VuXCA7CivotbDnoLQgPiBzb3VoYVwgOwor5YK15YuZID4gc2FpbXVcIDsKK+i6q+WIhiA+IG1pYnVuXCA7CivlgIvmnaEgPiBrYWpvdVwgOwor6LWk56aNID4gc2Vra2FcIDsKK+S6iOmYsiA+IHlvYm91XCA7CivlgYnlvrMgPiBpdG9rdVwgOwor6LOE6LOCID4gd2Fpcm9cIDsKK+iCsuiLsSA+IGlrdWVpXCA7CivlsI/niqwgPiBrb2ludVwgOwor5qCE6ICAID4gZWl5b3VcIDsKK+eUseadpSA+IHl1cmFpXCA7CivnlbDlv4MgPiBpc2hpblwgOwor6Ii55Yy7ID4gc2VuJydpXCA7CivmpLDlrZAgPiB5YXNoaVwgOwor5a6257SLID4ga2Ftb25cIDsKK+WutuezuyA+IGtha2VpXCA7CivnlbDlvaIgPiBpZ3lvdVwgOwor5Ly9576FID4ga3lhcmFcIDsKK+iCuuiFkSA+IGhhaWZ1XCA7Civku4/osqggPiBmdWtrYVwgOwor5p2x6YO9ID4gdG91dG9cIDsKK+adsemDqCA+IHRvdWJ1XCA7Civku67oo4UgPiBrYXNvdVwgOwor6Ieq5bC9ID4gamlqaW5cIDsKK+eQhuirliA+IHJpcm9uXCA7CivlgY/lt64gPiBoZW5zYVwgOwor5bCK54i2ID4gc29ucHVcIDsKK+iHquWwiiA+IGppc29uXCA7Civlgb3loLEgPiBnaWhvdVwgOwor5a6a576pID4gdGVpZ2lcIDsKK+WCmeWTgSA+IGJpaGluXCA7Civosqjou4ogPiBrYXNoYVwgOwor5L+X5rCXID4gem9ra2VcIDsKK+iHquWusyA+IGppZ2FpXCA7CivosrjosrsgPiB0YWloaVwgOwor5a+E56i/ID4ga2lrb3VcIDsKK+eVmeaEjyA+IHJ5dXVpXCA7CivkvZXnrocgPiBuYW5rb1wgOwor5YCL5pWwID4ga29zdXVcIDsKK+WvneebuCA+IG5lem91XCA7CivporbpoqggPiBndWZ1dVwgOwor6LK06LOkID4ga2lzZW5cIDsKK+iHquWtmCA+IGppc29uXCA7CivmoYLnmq4gPiBrZWloaVwgOwor6aOy6YWSID4gaW5zaHVcIDsKK+iytOizkyA+IGtpaGluXCA7CivkuqjpgYsgPiBrb3V1blwgOwor55CG6KejID4gcmlrYWlcIDsKK+iytOizjiA+IGtpc2VuXCA7CivotbfnlKggPiBraXlvdVwgOwor5L2V562JID4gbmFucmFcIDsKK+iyqei3ryA+IGhhbnJvXCA7CivmnJ/pppYgPiBraXNodVwgOwor5L+X5q2MID4gem9ra2FcIDsKK+S5l+mmrCA+IGpvdWJhXCA7Civku5joqIAgPiBmdWdlblwgOwor6LWk55uuID4gYWthbWVcIDsKK+S7i+ittyA+IGthaWdvXCA7Civku5boqIAgPiB0YWdvblwgOwor5LqA6ZGRID4ga2lrYW5cIDsKK+iEs+eCjiA+IG5vdWVuXCA7CivmpJzlrZcgPiBrZW5qaVwgOwor5LqU6YeNID4gZ29qdXVcIDsKK+izgOipniA+IGdhc2hpXCA7CivoiJ7lj7AgPiBidXRhaVwgOwor5pyd6aSJID4gYXNhZ2VcIDsKK+WvoeeUtyA+IHlhbW9vXCA7Civku5boposgPiB0YWtlblwgOwor6IiO5Za2ID4gc2hhZWlcIDsKK+S8juiKuCA+IGdpZ2VpXCA7Civnlo7lpJYgPiBzb2dhaVwgOwor5YG25ZugID4gZ3V1aW5cIDsKK+Wuiee9riA+IGFuY2hpXCA7CivosqjosqEgPiBrYXphaVwgOwor5YKN5Y+XID4gYm91anVcIDsKK+iDtOedgCA+IGRvdWdpXCA7Civlrrbnpr0gPiBrYWtpblwgOwor5bKp5bGLID4gaXdheWFcIDsKK+S6jOmHjSA+IGZ1dGFlXCA7CivogqXogrIgPiBoaWlrdVwgOwor5bCP5rudID4gb3Rha2lcIDsKK+S6iOmItCA+IHlvcmVpXCA7Civlgb3lloQgPiBnaXplblwgOwor5qKn5qGQID4gZ290b3VcIDsKK+iyouizpiA+IGtvdWZ1XCA7CivnlLvmiY0gPiBnYXNhaVwgOwor55S75omLID4gZ2FzaHVcIDsKK+WumOe0gCA+IGthbmtpXCA7CivosrToqowgPiBraXNoaVwgOwor6aKo6Z+7ID4gZnV1aW5cIDsKK+eVs+WtlyA+IGpvdWppXCA7Civku5booYwgPiB0YWtvdVwgOwor6IKh6IKxID4ga29rb3VcIDsKK+iyoeiyqCA+IHphaWthXCA7CivnlbDlrpcgPiBpc2h1dVwgOwor5LqS6YG4ID4gZ29zZW5cIDsKK+iHquWjiiA+IGppa2FpXCA7Civmo4TmkI0gPiBraXNvblwgOwor6aKo6Z2hID4gZnV1YmlcIDsKK+mkiuittyA+IHlvdWdvXCA7Civosp3osqggPiBiYWlrYVwgOwor5LyO6IO9ID4gZ2lub3VcIDsKK+acqumWiyA+IG1pa2FpXCA7CivlgIvmiYAgPiBrYXNob1wgOwor6LK06KanID4ga2lyYW5cIDsKK+i1sOeLlyA+IHNvdWt1XCA7Civpoqjpm7IgPiBmdXV1blwgOwor5LmW6ZuiID4ga2FpcmlcIDsKK+eWsuWKtCA+IGhpcm91XCA7Civku67okawgPiBrYXNvdVwgOwor5YG95ZCNID4gZ2ltZWlcIDsKK+S6uuiqniA+IGppbmdvXCA7Civpoqjpm4UgPiBmdXVnYVwgOwor5LqU6LyqID4gZ29yaW5cIDsKK+WBveWPsiA+IGdpc2hpXCA7CivmnJ/pmZAgPiBraWdlblwgOwor5LqI6YG4ID4geW9zZW5cIDsKK+S5l+mZpCA+IGpvdWpvXCA7CivlgY/lpYcgPiBoZW5raVwgOwor5Li76aasID4gc2h1bWVcIDsKK+S/neaciSA+IGhveXV1XCA7Civoh6rlnKggPiBqaXphaVwgOwor6auY5YipID4ga291cmlcIDsKK+acn+mWkyA+IGtpa2FuXCA7CivotbfngrkgPiBraXRlblwgOwor5LqM6LyqID4gbmlyaW5cIDsKK+acnemWkyA+IGFzYW1hXCA7CivohLPms6IgPiBub3VoYVwgOwor5a6f56eRID4gamlra2FcIDsKK+WutuebuCA+IGthc291XCA7CivmnaXos4AgPiByYWlnYVwgOwor5bGg5omAID4gdG9zaG9cIDsKK+eWkeWVjyA+IGdpbW9uXCA7CivoiI7liKkgPiBzaGFyaVwgOwor5a+E55SfID4ga2lzZWlcIDsKK+S6jOi7jSA+IG5pZ3VuXCA7CivlgJLlvbEgPiB0b3VlaVwgOwor5LuW6JamID4gdGF6ZW5cIDsKK+WAi+aApyA+IGtvc2VpXCA7Civpp4TniqwgPiBkYWtlblwgOwor6aOb6LuKID4gaGlzaGFcIDsKK+WxueW6piA+IGtpdHRvXCA7CivkvZznlKggPiBzYXlvdVwgOwor5YCt5a+HID4gd2Frb3VcIDsKK+Wwj+atjCA+IGtvdXRhXCA7CivkuLvpn7MgPiBzaHVvblwgOwor55Ww5aKDID4gaWt5b3VcIDsKK+WuueeWkSA+IHlvdWdpXCA7CivnlLvlu4ogPiBnYXJvdVwgOwor5L2Z55SfID4geW9zZWlcIDsKK+e+jum6lyA+IGJpcmVpXCA7CivlrprnpI4gPiB0ZWlzb1wgOwor5YGP5ZyfID4gaGVuZG9cIDsKK+WyqeWgtCA+IGl3YWJhXCA7Civoh6rllY8gPiBqaW1vblwgOwor5YG95YW1ID4gZ2loZWlcIDsKK+S6pOiqvCA+IGtvdWdpXCA7CivohZXmnKggPiB1ZGVnaVwgOwor5YKY5LiLID4gc2Fua2FcIDsKK+WBpeWQpiA+IGtlbnBpXCA7CivnlLvluKsgPiBnYXNoaVwgOwor55S75biWID4gZ2Fqb3VcIDsKK+WutueUoyA+IGthc2FuXCA7CivnlLvlt6UgPiBnYWtvdVwgOwor6LW35rqQID4ga2lnZW5cIDsKK+e+vemfsyA+IGhhb3RvXCA7Civpq5jkvqEgPiBrb3VrYVwgOwor5YCJ5bqrID4gc291a29cIDsKK+aenOiPnCA+IGthc2FpXCA7CivmnLrovrogPiBraWhlblwgOwor5a++5q+UID4gdGFpaGlcIDsKK+eVsOWbvSA+IGlrb2t1XCA7CivmnZHosrsgPiBzb25waVwgOwor6LOi6ICFID4ga2VuamFcIDsKK+acrOmDqCA+IGhvbmJ1XCA7CivkupLorbIgPiBnb2pvdVwgOwor6IeT5ZmoID4gem91a2lcIDsKK+WvvuaspyA+IHRhaW91XCA7CivogIHouq8gPiByb3VrdVwgOwor55Sj5b6MID4gc2FuZ29cIDsKK+eUqOW6piA+IHlvdWRvXCA7Civmm7jpmaIgPiBzaG9pblwgOwor5qGQ5rK5ID4gdG91eXVcIDsKK+acqumBgiA+IG1pc3VpXCA7CivnlJ/lvpIgPiBzZWl0b1wgOwor55Sf5b6MID4gc2VpZ29cIDsKK+adoeimjyA+IGpvdWtpXCA7CivohJrmsJcgPiBrYWtrZVwgOwor6auY5LiLID4ga291Z2VcIDsKK+iHquWLlSA+IGppZG91XCA7CivnjovpgZMgPiBvdWRvdVwgOwor6LOb576OID4gc2FuYmlcIDsKK+iFkOaVlyA+IGZ1aGFpXCA7CivouYTlj4kgPiB0ZWlzYVwgOwor5LqJ6K2wID4gc291Z2lcIDsKK+acqOmAmiA+IGFrZWJpXCA7Civku5XoiJ4gPiBqaW1haVwgOwor6LaK5qipID4gZWtrZW5cIDsKK+i3i+aJiCA+IGJha2tvXCA7CivkvZnnh7wgPiB5b2ppblwgOwor5YCL5bGVID4ga290ZW5cIDsKK+iHquWJjSA+IGppbWFlXCA7Civoh6rliLYgPiBqaXNlaVwgOwor5YGl5YWQID4ga2VuamlcIDsKK+iDg+eXmyA+IGl0c3V1XCA7CivkuojorIAgPiB5b2JvdVwgOwor6aqo5YyWID4ga29ra2FcIDsKK+Wwj+aenSA+IGtvZWRhXCA7Civog4Pnl4UgPiBpYnlvdVwgOwor6Ieq5YiGID4gamlidW5cIDsKK+iHquWIgyA+IGppamluXCA7Civotbfmr5sgPiBraW1vdVwgOwor55Gq55GZID4gbWVub3VcIDsKK+miqOmCqiA+IGZ1dWphXCA7CivotbfmrbsgPiBraXNoaVwgOwor5p6257eaID4ga2FzZW5cIDsKK+S4iummrCA+IGpvdWJhXCA7CivkvZzngrogPiBzYWt1aVwgOwor6IOM55CGID4gaGFpcmlcIDsKK+WuieecoCA+IGFubWluXCA7Civoh6rlhZogPiBqaXRvdVwgOwor5bC/5oSPID4gbnlvdWlcIDsKK+acm+mBoCA+IGJvdWVuXCA7CivnlLDlrrYgPiBkZW5rYVwgOwor5LqI6KiAID4geW9nZW5cIDsKK+S5nei8qiA+IGt1cmluXCA7CivkubHosrsgPiByYW5waVwgOwor5LuW6IGeID4gdGFidW5cIDsKK+acqui4jyA+IG1pdG91XCA7CivkuonopocgPiBzb3VoYVwgOwor5a+d5rGXID4gbmVhc2VcIDsKK+WBpeS/nSA+IGtlbnBvXCA7Civlr77moYggPiB0YWlhblwgOwor55GV55a1ID4ga2FzaGlcIDsKK+S6iOimiyA+IHlva2VuXCA7CivkuIvpoqggPiBrYWZ1dVwgOwor5LuW6ICFID4gdGFzaGFcIDsKK+eVv+WGhSA+IGtpbmFpXCA7Civku67ntI0gPiBrYW5vdVwgOwor54yq6aaWID4gaWt1YmlcIDsKK+WumueQhiA+IHRlaXJpXCA7CivkuI3poIYgPiBmdWp1blwgOwor5LiA6aaWID4gaXNzaHVcIDsKK+eUo+WxiyA+IHVidXlhXCA7Civku67nsqcgPiBrZXdhaVwgOwor6LGq6KqeID4gZ291Z29cIDsKK+mhnumfuyA+IHJ1aWluXCA7CivpoZ7pn7MgPiBydWlvblwgOwor5a+S5rOiID4ga2FucGFcIDsKK+eUqOWtlyA+IHlvdWppXCA7Civlrabnp5EgPiBnYWtrYVwgOwor6LKn6IumID4gaGlua3VcIDsKK+eUt+WlsyA+IGRhbmpvXCA7CivogIPoqrIgPiBrb3VrYVwgOwor5qC55rCXID4ga29ua2lcIDsKK+i1pOavmyA+IGFrYWdlXCA7CivkuIDpo68gPiBpcHBhblwgOwor55S75aOHID4gZ2FkYW5cIDsKK+WvhOa4ryA+IGtpa291XCA7CivpppnnhZkgPiBrb3VlblwgOwor576O6aKoID4gYmlmdXVcIDsKK+mjm+ihjCA+IGhpa291XCA7CivkuojooYwgPiB5b2tvdVwgOwor5Lqs6I+vID4ga2Vpa2FcIDsKK+WuieeUoyA+IGFuemFuXCA7Civoh6rkvZMgPiBqaXRhaVwgOwor5LiA6aKoID4gaXBwdXVcIDsKK+e+jumhlCA+IGJpZ2FuXCA7CivnlJ/lrrYgPiBzZWlrYVwgOwor5a6f54i2ID4gamlwcHVcIDsKK+iHquS8nSA+IGppZGVuXCA7CivogZbogIUgPiBzZWlqYVwgOwor5L6/5omAID4gYmVuam9cIDsKK+eUu+WgsSA+IGdhaG91XCA7Civoh6rku7sgPiBqaW5pblwgOwor5LiW6ZaTID4gc2VrZW5cIDsKK+S4gOmgrSA+IGl0dG91XCA7CivnlLLlpJwgPiBrb3V5YVwgOwor6Ieq5LuKID4gamlrb25cIDsKK+S4jemajyA+IGZ1enVpXCA7CivpppnngokgPiBrb3Vyb1wgOwor5Li76YOoID4gc2h1YnVcIDsKK+S4gOmghSA+IGlra291XCA7CivpqI7miYsgPiBraXNodVwgOwor55Sw5aSrID4gZGVucHVcIDsKK+izpueojiA+IGZ1emVpXCA7Civpo5vonZcgPiBiYXR0YVwgOwor55K95pu4ID4gamlzaG9cIDsKK+Wwu+W6pyA+IGtvdXphXCA7CivosrTnv7AgPiBraWthblwgOwor55CG57O7ID4gcmlrZWlcIDsKK+iHquS5lyA+IGppam91XCA7CivnlKPlqaYgPiBzYW5wdVwgOwor5LiL6ZmQID4ga2FnZW5cIDsKK+S4i+mZjSA+IGtha291XCA7CivkuIrpmaIgPiBqb3VpblwgOwor6Ieq5Li7ID4gamlzaHVcIDsKK+WvuOaahyA+IHN1bmthXCA7CivmnrbnqbogPiBrYWt1dVwgOwor55Sj5amGID4gc2FuYmFcIDsKK+aji+WjqyA+IGtpc2hpXCA7CivosYzosYYgPiBlbmRvdVwgOwor5LiL6ZiqID4gZ2VoYW5cIDsKK+WvuOaZgiA+IHN1bmppXCA7CivmorXlrZcgPiBib25qaVwgOwor55SY5a2QID4gYW1hZ29cIDsKK+S9k+a4qSA+IHRhaW9uXCA7Civkvr/mhI8gPiBiZW4nJ2lcIDsKK+S7gee+qSA+IGppbmdpXCA7CivlrpvnhLYgPiBlbnplblwgOwor5L2c5rOVID4gc2Fob3VcIDsKK+aknOS6iyA+IGtlbmppXCA7CivkuLvovp4gPiBzaHVqaVwgOwor5pq06aOyID4gYm91aW5cIDsKK+WvneajuiA+IG5la2FuXCA7Civmnpzns5YgPiBrYXRvdVwgOwor5L2O5ripID4gdGVpb25cIDsKK+i1sOafuyA+IHNvdXNhXCA7CivkuIDpmo4gPiBpa2thaVwgOwor5pys6Ki0ID4gaG9uc29cIDsKK+S4gOmaiiA+IGl0dGFpXCA7Civmm7npgZQgPiBzb3VkYVwgOwor55W45Lq6ID4ga2lqaW5cIDsKK+iyp+iAhSA+IGhpbmphXCA7Civkv5Dlt6cgPiByaWtvdVwgOwor5L6L5pmCID4gcmVpamlcIDsKK+WutuazlSA+IGthaG91XCA7CivnlLDlnIMgPiBkZW5wb1wgOwor5bGg5aC0ID4gdG9qb3VcIDsKK+S7mOeuiyA+IGZ1c2VuXCA7CivmnKroposgPiBtaWtlblwgOwor6ICz6IWUID4gamlrb3VcIDsKK+S4gOmWgyA+IGlzc2VuXCA7CivlsJHmhbAgPiBzaG91aVwgOwor5L6u5oWiID4gYnVtYW5cIDsKK+S9nOatjCA+IHNha2thXCA7CivmoYPmnY4gPiB0b3VyaVwgOwor5qCh5q2MID4ga291a2FcIDsKK+e+qemHkSA+IGdpa2luXCA7Civkv53lroggPiBob3NodVwgOwor6aKo6KutID4gZnV1eXVcIDsKK+S4lumKgCA+IHNlZ2luXCA7Civkv53lrZggPiBob3pvblwgOwor6IK654KOID4gaGFpZW5cIDsKK+eUmOWkoiA+IGthbm11XCA7CivlsKTluqYgPiB5dXVkb1wgOwor6IC9576OID4gdGFuYmlcIDsKK+aboOmHjiA+IGtvdXlhXCA7CivosrTntJkgPiBraXNoaVwgOwor5pyI6LOmID4gZ2VwcHVcIDsKK+WxleWikyA+IHRlbmJvXCA7Civkvr/luqcgPiBiZW56YVwgOwor5LqU6IqSID4gZ29ib3VcIDsKK+ePque0oCA+IGtlaXNvXCA7CivmoLjmnpwgPiBrYWtrYVwgOwor5bCK5oSPID4gc29uJydpXCA7CivpppnmsrkgPiBrb3V5dVwgOwor55So5ZmoID4geW91a2lcIDsKK+ahiOaWhyA+IGFubW9uXCA7Civku67nnaEgPiBrYXN1aVwgOwor5pyX6KmgID4gcm91ZWlcIDsKK+WAkuWPpSA+IHRvdWt1XCA7CivlgJLlj5kgPiB0b3Vqb1wgOwor5Luu55ygID4ga2FtaW5cIDsKK+iytOewoSA+IGtpa2FuXCA7Civoh43kuIsgPiBzZWlrYVwgOwor5a6a5ripID4gdGVpb25cIDsKK+S7ruebuCA+IGthc291XCA7CivkupToh5MgPiBnb3pvdVwgOwor6IOM5rOzID4gaGFpZWlcIDsKK+mmmeawlyA+IGtvdWtpXCA7CivkuqHogIUgPiBtb3VqYVwgOwor6Iag5YyWID4ga291a2FcIDsKK+mgremfuyA+IHRvdWluXCA7CivkvbPmma8gPiBrYWtlaVwgOwor5bCW5bqmID4gc2VuZG9cIDsKK+S7luekviA+IHRhc2hhXCA7Civosaroj68gPiBnb3VrYVwgOwor5a+M5pyJID4gZnV5dXVcIDsKK+S4lumAlCA+IHNlaXRvXCA7Civku67nl5ggPiBrYXRvdVwgOwor5LiH6YeMID4gYmFucmlcIDsKK+eQhuefpSA+IHJpY2hpXCA7CivkuJjovrogPiBva2FiZVwgOwor6IW55ZuyID4gZnVrdWlcIDsKK+S9kOanmCA+IHNheW91XCA7Civku4/npZYgPiBidXNzb1wgOwor6aeE5paHID4gZGFidW5cIDsKK+e+qei7jSA+IGdpZ3VuXCA7CivlgI3liqAgPiBiYWlrYVwgOwor5YCt5Lq6ID4gd2FqaW5cIDsKK+S4g+mHjSA+IG5hbmFlXCA7CivkuIvpg44gPiBnZXJvdVwgOwor5LiK6YOoID4gam91YnVcIDsKK+mgk+mmrCA+IHRvbm1hXCA7CivkuInpg6ggPiBzYW5idVwgOwor6LK056iuID4ga2lzaHVcIDsKK+S4jemBnCA+IGZ1c29uXCA7CivlsITlvbEgPiBzaGFlaVwgOwor5LiN6YGHID4gZnVndXVcIDsKK+S4gOmHjSA+IGhpdG9lXCA7CivkuLvoqp4gPiBzaHVnb1wgOwor5L6/5a6cID4gYmVuZ2lcIDsKK+mojuWwhCA+IGtpc2hhXCA7Civlr4Tmm7ggPiBraXNob1wgOwor5LiN6YCeID4gZnV0ZWlcIDsKK+Wwj+W3nSA+IG9nYXdhXCA7Civlr77lv5wgPiB0YWlvdVwgOwor5LiN6YCAID4gZnV0YWlcIDsKK+e+jumFkiA+IGJpc2h1XCA7CivnkZ7msJcgPiB6dWlraVwgOwor5Li76Ki0ID4gc2h1c29cIDsKK+aal+mbsiA+IGFuJyd1blwgOwor6LK056S+ID4ga2lzaGFcIDsKK+eUt+WFkCA+IGRhbmppXCA7CivkuozogIUgPiBuaXNoYVwgOwor55S75YOPID4gZ2F6b3VcIDsKK+S7luecjCA+IHRha2VuXCA7Civkv7PlkbMgPiBoYWltaVwgOwor5L2a5pu4ID4gaXNzaG9cIDsKK+WppumBuCA+IGZ1c2VuXCA7CivnlKjli5kgPiB5b3VtdVwgOwor5amm6YGTID4gZnVkb3VcIDsKK+adkee/gSA+IHNvbm91XCA7Civlronms7AgPiBhbnRhaVwgOwor6IKl5rqAID4gaGltYW5cIDsKK+S4i+i8qSA+IGdlaGFpXCA7CivlrrbmnaUgPiBrZXJhaVwgOwor5a++5bqnID4gdGFpemFcIDsKK+WApOS4iiA+IG5lYWdlXCA7CivnlJjlkbMgPiBrYW5taVwgOwor5L+z5Y+lID4gaGFpa3VcIDsKK+S4gOmBjSA+IGlwcGVuXCA7CivogIHoiJcgPiByb3Vob1wgOwor5pqX6ZeYID4gYW50b3VcIDsKK+abuOiomCA+IHNob2tpXCA7CivkuIvou4ogPiBnZXNoYVwgOwor5bCR5bCJID4gc2hvdWlcIDsKK+eUmuWPpSA+IGppbmt1XCA7Civlrrbmm7ggPiBrYXNob1wgOwor5Lqb57SwID4gc2FzYWlcIDsKK+eQhueUsSA+IHJpeXV1XCA7CivkurrnpZYgPiBqaW5zb1wgOwor5bCP5bCJID4gc2hvdWlcIDsKK+agoeaXlyA+IGtvdWtpXCA7CivkubHoiJ4gPiByYW5idVwgOwor5LqU57eaID4gZ29zZW5cIDsKK+eUmOWPlyA+IGthbmp1XCA7CivkuIDovrogPiBpcHBlblwgOwor5L6N5b6TID4gamlqdXVcIDsKK+WtpOeBryA+IGtvdG91XCA7Civku6PnkIYgPiBkYWlyaVwgOwor6LKi56efID4ga291c29cIDsKK+Wog+msnyA+IGFpa2FuXCA7CivkvJrmtL4gPiBrYWloYVwgOwor5a2Q54qsID4ga29pbnVcIDsKK+iBr+ePoCA+IHJlbmp1XCA7CivnlKjlhbcgPiB5b3VndVwgOwor55S75LyaID4gZ2FrYWlcIDsKK+S7lueVjCA+IHRha2FpXCA7CivkupTntYMgPiBnb2dlblwgOwor5bCP5a2XID4ga29hemFcIDsKK+Wxi+WPtyA+IHlhZ291XCA7CivlsYvlj7AgPiB5YXRhaVwgOwor5bCK5a62ID4gc29ua2FcIDsKK+S4gOi7oiA+IGl0dGVuXCA7CivnlLvkurogPiBnYWppblwgOwor6aGM6L6eID4gZGFpamlcIDsKK+S4gOi7kiA+IGlra2VuXCA7Civlrp/mooUgPiBtaXVtZVwgOwor5YCL5L2TID4ga290YWlcIDsKK+mojuWjqyA+IGtpc2hpXCA7Civlr77ls5kgPiB0YWlqaVwgOwor55Sj5YWQID4gc2FuamlcIDsKK+i3r+WCjSA+IHJvYm91XCA7CivmnKzoiJcgPiBob25wb1wgOwor576k6K2wID4gZ3VuZ2lcIDsKK+S4jeiytyA+IGZ1YmFpXCA7CivlrrbmlL8gPiBrYXNlaVwgOwor5LiL6LOkID4gZ2VzZW5cIDsKK+WvneaBryA+IG5laWtpXCA7CivkuI3osp4gPiBmdXRlaVwgOwor5LiL6LOcID4ga2FzaGlcIDsKK+S4i+izjiA+IGdlc2VuXCA7Civmnq/nh6UgPiBrb3NvdVwgOwor5YCL5Lq6ID4ga29qaW5cIDsKK+acqOiIniA+IGtvbWFpXCA7Civkvb/lvpIgPiBzaGl0b1wgOwor6ICB57+BID4gcm91b3VcIDsKK+e+veifuyA+IGhhYXJpXCA7Civlr5vmgZUgPiBrYW5qb1wgOwor6LK755SoID4gaGl5b3VcIDsKK+mguOmDqCA+IGtlaWJ1XCA7Civku6PniLYgPiBkYWlmdVwgOwor6LKr55uuID4ga2FubWVcIDsKK+Wwj+WnlCA+IHNob3VpXCA7CivnvqnoqJMgPiBnaWt1blwgOwor5LqI57SNID4geW9ub3VcIDsKK+S4h+iyqCA+IGJhbmthXCA7CivkuJboq5YgPiB5b3JvblwgOwor6LGK6Im2ID4gaG91ZW5cIDsKK+i1t+W3pSA+IGtpa291XCA7Civmnb/nm64gPiBpdGFtZVwgOwor6aCt6YeNID4genVvbW9cIDsKK+aiheWckiA+IGJhaWVuXCA7CivosrTnlLcgPiB0YWthb1wgOwor5a6a5pyoID4gam91Z2lcIDsKK+WumuacnyA+IHRlaWtpXCA7CivlsI/lo7IgPiBrb3VyaVwgOwor576O6LKMID4gYmlib3VcIDsKK+Wwj+WjsCA+IGtvZ29lXCA7CivmoYLlurUgPiBrZWlhblwgOwor5LiA6LKrID4gaWtrYW5cIDsKK+S4iuitsCA+IGpvdWdpXCA7CivnlJ/kv50gPiBzZWlob1wgOwor5L6/5ZmoID4gYmVua2lcIDsKK+S4juirliA+IHlvcm9uXCA7CivmnKrogZ4gPiBtaW1vblwgOwor6Z+z6Z+7ID4gb24nJ2luXCA7CivnlKjkuosgPiB5b3VqaVwgOwor5pmv6ZuyID4ga2VpdW5cIDsKK+mgremDqCA+IHRvdWJ1XCA7Civku5TniqwgPiBrb2ludVwgOwor5LqM562JID4gbml0b3VcIDsKK+e9qumBjiA+IHphaWthXCA7CivkuIroq60gPiBqb3V5dVwgOwor5L+X5YyWID4gem9ra2FcIDsKK+Wtl+a6kCA+IGppZ2VuXCA7CivkuojnrpcgPiB5b3NhblwgOwor6aGe6KqeID4gcnVpZ29cIDsKK+i3r+S4iiA+IHJvam91XCA7CivmnKznvqkgPiBob25naVwgOwor6LOA54q2ID4gZ2Fqb3VcIDsKK+WumuaZgiA+IHRlaWppXCA7Civmo4TkuJYgPiBraXNlaVwgOwor6LGG6IWQID4gdG91ZnVcIDsKK+mnhOW8gSA+IGRhYmVuXCA7CivlqaboraYgPiBmdWtlaVwgOwor6LW35bGFID4ga2lreW9cIDsKK+eNhOihoyA+IGdva3VpXCA7Civmnb/nlLsgPiBoYW5nYVwgOwor5LiN6KiAID4gZnVnZW5cIDsKK+S9j+aMgSA+IGp1dWppXCA7CivkvZPmioAgPiB0YWlnaVwgOwor5L+d5Ya3ID4gaG9yZWlcIDsKK+S9meaGpCA+IHlvZnVuXCA7CivkuIroqLQgPiBqb3Vzb1wgOwor5LiK6KiYID4gam91a2lcIDsKK+S9meaFtiA+IHlva2VpXCA7CivkvZzmhI8gPiBzYWt1aVwgOwor5L+d5YWoID4gaG96ZW5cIDsKK+S6jOeoriA+IG5pc2h1XCA7CivmnpznhLYgPiBrYXplblwgOwor5LiN6KaBID4gZnV5b3VcIDsKK+mfs+majiA+IG9ua2FpXCA7Civnvo7oq4cgPiBiaWRhblwgOwor5a625oayID4ga2FrZW5cIDsKK+S6iOeovyA+IHlva291XCA7CivlsI7lm6AgPiBkb3VpblwgOwor5Luj5ryUID4gZGFpZW5cIDsKK+S9meaDhSA+IHlvam91XCA7Civlr6HlsYUgPiBrYWt5b1wgOwor54qs6aasID4ga2VuYmFcIDsKK+mkk+eLvCA+IGdhcm91XCA7CivlsLzlg6cgPiBuaXNvdVwgOwor5L+d5YGlID4gaG9rZW5cIDsKK+e/oee/oCA+IGhpc3VpXCA7Civmnq/mt6EgPiBrb3RhblwgOwor6aCa6YOoID4ga2VpYnVcIDsKK+acque3tCA+IG1pcmVuXCA7CivkuIDoqIggPiBpa2tlaVwgOwor576O6KazID4gYmlrYW5cIDsKK+mgkOmHkSA+IHlva2luXCA7CivkvZnlv7UgPiB5b25lblwgOwor5LiL6KGMID4ga2Frb3VcIDsKK+mhjOipoCA+IGRhaWVpXCA7CivmnKjntr8gPiBtb21lblwgOwor5Li56IqxID4gdGFua2FcIDsKK+S4gOimiyA+IGlra2VuXCA7CivkuLnoibIgPiBuaWlyb1wgOwor546L57WxID4gb3V0b3VcIDsKK+S8muacnyA+IGthaWtpXCA7CivlsIHlnJ8gPiBob3Vkb1wgOwor6Laj5ZGzID4gc2h1bWlcIDsKK+izouavjSA+IGtlbmJvXCA7Civmmpfou6IgPiBhbnRlblwgOwor5pyq57SNID4gbWlub3VcIDsKK+WvvuWdkCA+IHRhaXphXCA7CivkvZnlvKYgPiB5b2dlblwgOwor6K2w6aGMID4gZ2lkYWlcIDsKK+iBlueBqyA+IHNlaWthXCA7CivlsI/llIQgPiBrb3V0YVwgOwor5L2Z5byKID4geW9oZWlcIDsKK+iFkOWIkSA+IGZ1a2VpXCA7CivkvbPlrrkgPiBrYXlvdVwgOwor5a625b6TID4ga2FqdXVcIDsKK+i1pOWtlyA+IGFrYWppXCA7CivppIrniLYgPiB5b3VmdVwgOwor5p2l55SxID4gcmFpeXVcIDsKK+S6iOefpSA+IHlvY2hpXCA7Civku67mrbsgPiBrYXNoaVwgOwor5LiA6KGMID4gaWtrb3VcIDsKK+S+v+WIqSA+IGJlbnJpXCA7Civku67mra8gPiBrYXNoaVwgOwor5qC55a2QID4gbmVra29cIDsKK+WvuOWcnyA+IHN1bmRvXCA7CivkvZXluqYgPiBuYW5kb1wgOwor5LqM55u4ID4gbmlzb3VcIDsKK+iDoeW6pyA+IGFndXJhXCA7Civos5vmrYwgPiBzYW5rYVwgOwor54+K55GaID4gc2FuZ29cIDsKK+ahiOWkliA+IGFuZ2FpXCA7Civkuovnm7ggPiBqaXNvdVwgOwor5a625bqtID4ga2F0ZWlcIDsKK+aer+atuyA+IGtvc2hpXCA7CivohIXlqIEgPiBreW91aVwgOwor5puz6IiqID4gZWlrb3VcIDsKK+eQhuazlSA+IHJpaG91XCA7CivpoqjntIAgPiBmdXVraVwgOwor5Luj5q+NID4gZGFpYm9cIDsKK+eTpuWFqCA+IGdhemVuXCA7CivlrrbluLggPiBrYWpvdVwgOwor5Lq654K6ID4gamluJydpXCA7CivkvJ3mkq0gPiBkZW5wYVwgOwor57216KiAID4gYmFnZW5cIDsKK+mojuWFtSA+IGtpaGVpXCA7CivkvY7luqYgPiB0ZWlkb1wgOwor5qGR5ZySID4gc291ZW5cIDsKK+S6kueUqCA+IGdveW91XCA7CivkuLvnvqkgPiBzaHVnaVwgOwor5p2h55CGID4gam91cmlcIDsKK+Wwj+WLoiA+IGtvemVpXCA7Civlr4Tlr5MgPiBraWd1dVwgOwor5bCK5Y2RID4gc29ucGlcIDsKK+WtpuacnyA+IGdha2tpXCA7CivkuoznlaogPiBuaWJhblwgOwor5pmC6ZmQID4gamlnZW5cIDsKK+iDjOW+jCA+IGhhaWdvXCA7CivniaHpub8gPiBvamlrYVwgOwor5LyB5pybID4ga2lib3VcIDsKK+acrOenkSA+IGhvbmthXCA7CivmnpzmsYEgPiBrYWp1dVwgOwor6aas5bGLID4gdW1heWFcIDsKK+mnheWkqyA+IGVraWZ1XCA7CivkvJ3mjoggPiBkZW5qdVwgOwor5LqL55SxID4gaml5dXVcIDsKK+S/juS4iiA+IHNvam91XCA7CivlsI/liKQgPiBrb2JhblwgOwor5Lm+55quID4ga2FucGlcIDsKK+e+vee/vCA+IHV5b2t1XCA7Civmnp3mr5sgPiBlZGFnZVwgOwor5a+/5Y+4ID4gc3VzaGlcIDsKK+S9nOWutiA+IHNha2thXCA7CivpppbluqcgPiBzaHV6YVwgOwor5pmu6YG4ID4gZnVzZW5cIDsKK+mmluW6nCA+IHNodWZ1XCA7CivkuqHniLYgPiBib3VmdVwgOwor5pmu6YGNID4gZnVoZW5cIDsKK+S9meWvkiA+IHlva2FuXCA7CivmmYLplpMgPiBqaWthblwgOwor5bCB5Y2wID4gZnV1aW5cIDsKK+itnOmdoiA+IGZ1bWVuXCA7Civku7vmnJ8gPiBuaW5raVwgOwor6LWt5ZyfID4gc2hhZG9cIDsKK+WutuWxiyA+IGthb2t1XCA7CivlrrblsYUgPiBrYWt5b1wgOwor6K6a6L6eID4gc2FuamlcIDsKK+iBluayuSA+IHNlaXl1XCA7CivohZDkubEgPiBmdXJhblwgOwor5bCC5YuZID4gc2VubXVcIDsKK+eMn+iZjiA+IHJha2tvXCA7Civmma7ovrogPiBmdWhlblwgOwor5a+d5Z2KID4gbmVib3VcIDsKK+mjtOeFriA+IGFtZW5pXCA7CivmnqLmqZ8gPiBzdXVraVwgOwor576k6IieID4gZ3VuYnVcIDsKK+agueWfuiA+IGtvbmtpXCA7CivkvY/lsYUgPiBzdW1haVwgOwor6IOD5byxID4gaWpha3VcIDsKK+S8neaJiyA+IHRzdXRlXCA7CivlrrXlr50gPiB5b2luZVwgOwor5a6j5biDID4gc2VucHVcIDsKK+i2s+S4iyA+IHNva2thXCA7CivlsI/lg6cgPiBrb3pvdVwgOwor5a6d5bqrID4gaG91a29cIDsKK+mghui3ryA+IGp1bnJvXCA7CivkuIrojbcgPiB1d2FuaVwgOwor5a625a6dID4ga2Fob3VcIDsKK+WwhOWIqSA+IHNoYXJpXCA7CivnjJvomY4gPiBtb3Vrb1wgOwor5a2X5pu4ID4gamlzaG9cIDsKK+S4gOiRpiA+IGljaGlpXCA7Civlrq7lsYUgPiBtaXlhaVwgOwor6LWk5ZywID4gYWthamlcIDsKK+S9kOWumCA+IHNha2FuXCA7CivohLHlhY4gPiBkYXR0b1wgOwor6IGW5q+NID4gc2VpYm9cIDsKK+e+vee5lCA+IGhhb3JpXCA7CivohYvkuIsgPiBla2lrYVwgOwor576p6IKiID4gZ2lzaGlcIDsKK+mojuS5lyA+IGtpam91XCA7Civkvo3lj7IgPiBqaXNoaVwgOwor5a6Y5bqcID4ga2FucHVcIDsKK+acquefpSA+IG1pY2hpXCA7CivmmpfoppYgPiBhbnNoaVwgOwor5p6X5qqOID4gcmluZ29cIDsKK+S7o+ahiCA+IGRhaWFuXCA7CivogZbmrYwgPiBzZWlrYVwgOwor5LuK5qyhID4ga29uamlcIDsKK+iytOauvyA+IGtpZGVuXCA7CivkuIvoiLkgPiBnZXNlblwgOwor5LqL54qvID4gamloYW5cIDsKK+mmluWwviA+IHNodWJpXCA7CivotorlhqwgPiBldHRvdVwgOwor5a6J5b+DID4gYW5qaW5cIDsKK+eMruiKsSA+IGtlbmthXCA7CivogLPmvI8gPiBqaXJvdVwgOwor6LOc5pqHID4gc2hpa2FcIDsKK+S4gOiMjiA+IGlra2VpXCA7Civotbfljp8gPiBraWdlblwgOwor6IO45ZuyID4ga3lvdWlcIDsKK+Wtl+aVsCA+IGppc3V1XCA7CivosqrmsZogPiB0YW4nJ29cIDsKK+ePreasoSA+IGhhbmppXCA7CivkuIvohb8gPiBrYXRhaVwgOwor6aST5q27ID4gZ2FzaGlcIDsKK+aYn+mbsiA+IHNlaXVuXCA7Civlr7/lg48gPiBqdXpvdVwgOwor5L6h5YCkID4ga2FjaGlcIDsKK+S4jeiDvSA+IGZ1bm91XCA7CivlppbprZQgPiB5b3VtYVwgOwor55Kw5YyWID4ga2Fua2FcIDsKK+S4gOiJmCA+IGlzc291XCA7CivmnaXmvJQgPiByYWllblwgOwor5auM55aRID4ga2VuZ2lcIDsKK+i1t+WLlSA+IGtpZG91XCA7Civku67mlbAgPiBrYXN1dVwgOwor5L2Z5aG1ID4geW9qaW5cIDsKK+aZruizoiA+IGZ1Z2VuXCA7CivkuIDoiKwgPiBpcHBhblwgOwor5LyR5oSPID4ga3l1dWlcIDsKK+mkiuavjSA+IHlvdWJvXCA7Civlrrblo7AgPiBrYXNlaVwgOwor5a6f5a62ID4gamlra2FcIDsKK+S4i+iCoiA+IGthc2hpXCA7CivpoJDoqIAgPiB5b2dlblwgOwor5LiA6Ie0ID4gaXRjaGlcIDsKK+mnheWToSA+IGVraWluXCA7CivkvJrlvpcgPiBldG9rdVwgOwor5a+d5Y+wID4gbmVkYWlcIDsKK+S4i+iBniA+IGthYnVuXCA7CivkvbPlk4EgPiBrYWhpblwgOwor5a+h5Y2gID4ga2FzZW5cIDsKK+S4jeiAgSA+IGZ1cm91XCA7CivotaTlkbMgPiBha2FtaVwgOwor6K236YCBID4gZ29zb3VcIDsKK+WvvuS+oSA+IHRhaWthXCA7Civkvo/lhJIgPiBzaHVqdVwgOwor5bCK5LiLID4gc29ua2FcIDsKK+S7luadkSA+IHRhc29uXCA7CivmnZzmvI8gPiB6dXJvdVwgOwor5a+h5YuiID4ga2F6ZWlcIDsKK+Wum+WtlyA+IGF0ZWppXCA7Civmn7vlrpogPiBzYXRlaVwgOwor5a6X5a62ID4gc291a2VcIDsKK+S+jeWDpyA+IGppc291XCA7CivkvZnlnLAgPiB5b2NoaVwgOwor54md6aasID4gaGluYmFcIDsKK+e+juiCsiA+IGJpaWt1XCA7CivmoYjliIYgPiBhbmJ1blwgOwor6IO95ZCPID4gbm91cmlcIDsKK+S7j+aenCA+IGJ1a2thXCA7CivogJDngasgPiB0YWlrYVwgOwor6ICB54i6ID4gcm91eWFcIDsKK+iAgeeItiA+IHJvdWZ1XCA7Civorabpg6ggPiBrZWlidVwgOwor6aCt6JOLID4genVnYWlcIDsKK+i1pOWMliA+IHNla2thXCA7CivnkIbmlbAgPiByaXN1dVwgOwor5Lqc5rWBID4gYXJ5dXVcIDsKK+i1t+WCtSA+IGtpc2FpXCA7CivosaHniZkgPiB6b3VnZVwgOwor5LiA6ICDID4gaWtrb3VcIDsKK+adseatjCA+IHRvdWthXCA7Civorabpgo8gPiBrZWlyYVwgOwor5a6J5bGFID4gYW5reW9cIDsKK+adseaspyA+IHRvdW91XCA7Civpp4bli5UgPiBrdWRvdVwgOwor5a655ZmoID4geW91a2lcIDsKK+i0lOWxkyA+IGhpaWtpXCA7Civlr6HlhbUgPiBrYWhlaVwgOwor5LiW57SAID4gc2Vpa2lcIDsKK+S7luaWuSA+IHRhaG91XCA7Civku4rmnJ8gPiBrb25raVwgOwor5p6c5patID4ga2FkYW5cIDsKK+S7u+aEjyA+IG5pbicnaVwgOwor6aGe57iBID4gcnVpZW5cIDsKK+S9meWWmCA+IHlvemVuXCA7CivorpLoqqMgPiB6YW5idVwgOwor5Lqh5q+NID4gYm91Ym9cIDsKK+aenOaVoiA+IGtha2FuXCA7CivlronlrpogPiBhbnRlaVwgOwor5LiL57eaID4ga2FzZW5cIDsKK+S4i+e3kiA+IHNhZ2VvXCA7CivlroflrpkgPiB1Y2h1dVwgOwor6K6S6Ki0ID4gemFuc29cIDsKK+WumOWlsyA+IGthbmpvXCA7Civpn7PoqakgPiBvbnNoaVwgOwor5LiN57SUID4gZnVqdW5cIDsKK+S4jee0jSA+IGZ1bm91XCA7CivkvI7lt6UgPiBnaWtvdVwgOwor6Z+z6KiTID4gb25rdW5cIDsKK+izouaEmiA+IGtlbmd1XCA7Civog4Plo4EgPiBpaGVraVwgOwor5L2Z5ZG9ID4geW9tZWlcIDsKK+S8neWutiA+IGRlbmthXCA7CivmnZzmsI8gPiB0b3VqaVwgOwor5LiN57KLID4gYnVzdWlcIDsKK+WmlumbsiA+IHlvdXVuXCA7CivotbTku7sgPiBmdW5pblwgOwor6LOm5oCnID4gZnVzZWlcIDsKK+mmtOWMliA+IGp1bmthXCA7CivkuIDnt5ogPiBpc3NlblwgOwor5LiA57eSID4gaXNzaG9cIDsKK+S7o+aJkyA+IGRhaWRhXCA7Civku67mg7MgPiBrYXNvdVwgOwor5qGI5Lu2ID4gYW5rZW5cIDsKK+eNo+eariA+IGp1dWhpXCA7CivkupTmrrUgPiBnb2RhblwgOwor6LOb5oSPID4gc2FuJydpXCA7Civmnb/mnKggPiBoYW5naVwgOwor6LK05pa5ID4ga2lob3VcIDsKK+mjouawkSA+IGtpbWluXCA7CivkuIDntbEgPiBpdHRvdVwgOwor6aOb5rOJID4gaGlzZW5cIDsKK+acqueEtiA+IG1pemVuXCA7Civpp5DkvIogPiBjaHV1aVwgOwor5aW96aSMID4ga291amlcIDsKK+aYoOmFjSA+IGVpaGFpXCA7CivlrrblkJsgPiBrYWt1blwgOwor5a2k5biGID4ga29oYW5cIDsKK+WutuWQjSA+IGthbWVpXCA7CivkuIDns7sgPiBpa2tlaVwgOwor5a+h5Lq6ID4ga2FqaW5cIDsKK+S7ruaApyA+IGthc2VpXCA7CivkvZzli5UgPiBzYWRvdVwgOwor5LiA57O4ID4gaXNzaGlcIDsKK+Wtl+W9oiA+IGppa2VpXCA7CivkuI3nrYkgPiBmdXRvdVwgOwor5qCh5YuZID4ga291bXVcIDsKK+S6uuaZgiA+IG5pbmppXCA7CivnvojntYYgPiBraWhhblwgOwor6aCt6ISzID4genVub3VcIDsKK+S9meWLoiA+IHlvc2VpXCA7CivkuIvnrYkgPiBrYXRvdVwgOwor6aeG5L2/ID4ga3VzaGlcIDsKK+S9s+S+iyA+IGthcmVpXCA7CivkuozmrbsgPiBuaXNoaVwgOwor5a6d5ZmoID4gaG91a2lcIDsKK+acqOeBsCA+IGtpYmFpXCA7CivkuIvnq68gPiBrYXRhblwgOwor5L2Z5YmwID4geW9qb3VcIDsKK+e+hee0lyA+IHJhc2hhXCA7CivlpYfpupcgPiBraXJlaVwgOwor5LuV5omLID4gc2hpdGVcIDsKK+WtpOWztiA+IGtvdG91XCA7CivppqzliLggPiBiYWtlblwgOwor5a6u5Y+4ID4gZ3V1amlcIDsKK+mmmeWRsyA+IGtvdW1pXCA7CivkvZnliIYgPiB5b2J1blwgOwor5Lyd5aWHID4gZGVua2lcIDsKK+eQhuaDsyA+IHJpc291XCA7CivkvbPku4AgPiBrYWp1dVwgOwor5L2z5Lq6ID4ga2FqaW5cIDsKK+S4gOeuoSA+IGlra2FuXCA7CivlrqXlkowgPiB5dXV3YVwgOwor5L2R5YqpID4geXV1am9cIDsKK+agoeWFtyA+IGtvdWd1XCA7CivorbDoq5YgPiBnaXJvblwgOwor5LiA562JID4gaXR0b3VcIDsKK+abuOeUuyA+IHNob2dhXCA7CivnjbLniakgPiBlbW9ub1wgOwor6IO95LqLID4gbm91amlcIDsKK+WlrumjmyA+IGZ1bnBpXCA7CivogqXlpKcgPiBoaWRhaVwgOwor5L2Z5YWaID4geW90b3VcIDsKK+S9meWFiSA+IHlva291XCA7CivosarmsJcgPiBnb3VraVwgOwor55CG5oCnID4gcmlzZWlcIDsKK+aZguirliA+IGppcm9uXCA7CivoraborbcgPiBrZWlnb1wgOwor6LKg5pWwID4gZnVzdXVcIDsKK+S6jOanmCA+IG5peW91XCA7CivnvqnnnLwgPiBnaWdhblwgOwor5p+75ZWPID4gc2Ftb25cIDsKK+eQhuW/tSA+IHJpbmVuXCA7CivpnZLppqwgPiBhb3VtYVwgOwor5L2O5YipID4gdGVpcmlcIDsKK+itq+iqniA+IHNlbmdvXCA7CivmnKrmuoAgPiBtaW1hblwgOwor5a625YaFID4ga2FuYWlcIDsKK+S4luefpSA+IHNlY2hpXCA7Civlrprlk6EgPiB0ZWlpblwgOwor6LK35omLID4ga2FpdGVcIDsKK+WuueWEgCA+IHlvdWdpXCA7Civlrp/lkKYgPiBqaXBwaVwgOwor5p2l5pyfID4gcmFpa2lcIDsKK+S5g+eItiA+IGRhaWZ1XCA7CivlrrblhYQgPiBrYWtlaVwgOwor5a2j5a2QID4ga2lzaGlcIDsKK+S6leahgSA+IGlnZXRhXCA7Civmmpfnv7MgPiBhbicnZWlcIDsKK+acqua4iCA+IG1pc2FpXCA7CivosrTmiYAgPiBraXNob1wgOwor5aeJ6LK0ID4gYW5la2lcIDsKK+aZguioiCA+IHRva2VpXCA7CivogIHmr40gPiByb3Vib1wgOwor5LuW5b+1ID4gdGFuZW5cIDsKK+Wum+WQjSA+IGF0ZW5hXCA7CivlpbPpm6MgPiBqb25hblwgOwor5aW06Zq3ID4gZG9yZWlcIDsKK+S4luebuCA+IHNlc291XCA7Civku7LlsYUgPiBuYWthaVwgOwor6aGV56S6ID4ga2VuamlcIDsKK+S4jeefpSA+IGZ1Y2hpXCA7CivlrpjlkI8gPiBrYW5yaVwgOwor5pyr5rS+ID4gbWFwcGFcIDsKK+S9leWAiyA+IG5hbmtvXCA7CivpnZ7pm6MgPiBoaW5hblwgOwor5LiL55+lID4gZ2VkamlcIDsKK+Wkqum8kyA+IHRhaWtvXCA7CivkuIvnnrAgPiBrYWthblwgOwor6aaZ5YW3ID4ga291Z3VcIDsKK+mgiOiHviA+IHNodXl1XCA7CivmnJ3mua8gPiBhc2F5dVwgOwor5LqU5pu4ID4gZ29zaG9cIDsKK+S6lOabtCA+IGdva291XCA7CivlpZTppqwgPiBob25iYVwgOwor6IGW5oGpID4gc2Vpb25cIDsKK+WrjOawlyA+IGtlbmtpXCA7Civlp5ToqJcgPiBpdGFrdVwgOwor5LiN55ygID4gZnVtaW5cIDsKK+S6nOaXjyA+IGF6b2t1XCA7Civnjovms5UgPiBvdWhvdVwgOwor5LuB5oWIID4gamluamlcIDsKK+S7ruWvkyA+IGthZ3V1XCA7Civku4/lvpIgPiBidXR0b1wgOwor55CG5belID4gcmlrb3VcIDsKK+adv+aIuCA+IGl0YWRvXCA7CivkurrmiJEgPiBqaW5nYVwgOwor5a625L6LID4ga2FyZWlcIDsKK+iyp+aJkyA+IGhpbmRhXCA7CivkvZnkurogPiB5b25pblwgOwor5LuW5bqXID4gdGF0ZW5cIDsKK+Wkp+m7hCA+IGRhaW91XCA7CivkuIrnnYAgPiB1d2FnaVwgOwor5aSn6bq7ID4gdGFpbWFcIDsKK+acrOawlyA+IGhvbmtpXCA7Civku67lrpogPiBrYXRlaVwgOwor5LuW5bm0ID4gdGFuZW5cIDsKK+iAgeaouSA+IHJvdWp1XCA7Civku5jluK8gPiBmdXRhaVwgOwor6IOO5YWQID4gdGFpamlcIDsKK+aYr+iqjSA+IHplbmluXCA7CivosqDmi4UgPiBmdXRhblwgOwor5a625LydID4ga2FkZW5cIDsKK+aal+e3miA+IGFuc2VuXCA7CivkuIrnm64gPiB1d2FtZVwgOwor5qCE5YagID4gZWlrYW5cIDsKK+S9juS+oSA+IHRlaWthXCA7CivnjovmsLQgPiBvdXN1aVwgOwor5LuK5b6MID4ga29uZ29cIDsKK+iBluW+kiA+IHNlaXRvXCA7CivkuJbnlYwgPiBzZWthaVwgOwor5qCE5YW4ID4gZWl0ZW5cIDsKK+Wtn+WlsyA+IG1vdWpvXCA7Civpo5vmnaUgPiBoaXJhaVwgOwor5a625LukID4ga2FyZWlcIDsKK+S6jOabuSA+IG5pc291XCA7Civkuozmm7QgPiBuaWtvdVwgOwor5a605LyaID4gZW5rYWlcIDsKK+mdkumbsiA+IHNlaXVuXCA7CivppqzkuIogPiBiYWpvdVwgOwor5LiK55quID4gam91aGlcIDsKK+S4gOefoiA+IGlzc2hpXCA7CivkvZnkuJYgPiB5b3NlaVwgOwor6aas5LiBID4gYmF0ZWlcIDsKK+WutuS7gCA+IGthanV1XCA7CivmoITlhYkgPiBlaWtvdVwgOwor5a625Lq6ID4ga2VuaW5cIDsKK+itpuihmyA+IGtlaWVpXCA7CivlrZ3lpbMgPiBrb3Vqb1wgOwor5LuB5oGVID4gamluam9cIDsKK+Wtn+WkjyA+IG1vdWthXCA7CivmlpHps6kgPiBpa2FydVwgOwor6aKo5rOiID4gZnV1aGFcIDsKK+adpeaPtCA+IHJhaWVuXCA7Civku4rluqYgPiBrb25kb1wgOwor5LiL55azID4gZ2VrYW5cIDsKK+S8muWToSA+IGthaWluXCA7Civkub7mnq8gPiBrYW5rb1wgOwor5a2k5Z+OID4ga29qb3VcIDsKK+mfs+iJsiA+IG5laXJvXCA7Civkub7mnpwgPiBrYW5rYVwgOwor6ICM5p2lID4gamlyYWlcIDsKK+adnOaSsCA+IHp1c2FuXCA7CivorY7oqZAgPiBraXNzYVwgOwor5LiK55aPID4gam91c29cIDsKK+S4i+eVqiA+IGthYmFuXCA7CivkuI3nlKggPiBmdXlvdVwgOwor6ICD5qGIID4ga291YW5cIDsKK+S4i+eVjCA+IGdla2FpXCA7CivkuIvnlLcgPiBnZW5hblwgOwor5LiL55SwID4gZ2VkZW5cIDsKK+S9juS4iyA+IHRlaWthXCA7CivnkIblrrkgPiByaXlvdVwgOwor5pqW57C+ID4gbm9yZW5cIDsKK+iytOW6lyA+IGtpdGVuXCA7Civkub7mnJ8gPiBrYW5raVwgOwor6ICD5p+7ID4ga291c2FcIDsKK+S7luWxsSA+IHRhemFuXCA7CivkvJ3lj5cgPiBkZW5qdVwgOwor5Li75ryUID4gc2h1ZW5cIDsKK+isnei+niA+IHNoYWppXCA7Civkuojmlq0gPiB5b2RhblwgOwor5a2Q5aWzID4gc2hpam9cIDsKK+S6uuW+jCA+IGppbmdvXCA7CivnjovmqKkgPiBvdWtlblwgOwor6aOb5pWjID4gaGlzYW5cIDsKK+aal+eulyA+IGFuemFuXCA7Civog47ku5QgPiB0YWlqaVwgOwor5Luu5aOwID4ga2FzZWlcIDsKK+WsjOaFiyA+IHNoaW5hXCA7Civnvarnp5EgPiB6YWlrYVwgOwor6IKl5Y6aID4gaGlrb3VcIDsKK+iyoOaApyA+IGZ1c2VpXCA7CivkupLmj5sgPiBnb2thblwgOwor576O55S3ID4gYmluYW5cIDsKK+mcsumhlSA+IHJva2VuXCA7Civnvo7nlLAgPiBiaWRlblwgOwor5Ly25L+QID4gcmVpcmlcIDsKK+WkqemtlCA+IHRlbm1hXCA7CivlrprkvqEgPiB0ZWlrYVwgOwor6Zyy6aCtID4gcm90b3VcIDsKK+iumue+jiA+IHNhbmJpXCA7CivkuIDnlJ8gPiBpc3NlaVwgOwor5a6J5YWoID4gYW56ZW5cIDsKK+S6lOaMhyA+IGdvc2hpXCA7CivogrLlhZAgPiBpa3VqaVwgOwor572M57KfID4ga2VzaGlcIDsKK+Wuo+S4iyA+IHNlbmdlXCA7Civku4/lrrYgPiBidWtrZVwgOwor54m56KiYID4gdG9ra2lcIDsKK+iyqOW5oyA+IGthaGVpXCA7CivlrpjkvY0gPiBrYW4nJ2lcIDsKK+S4gOeSsCA+IGlra2FuXCA7Civml6LpgYIgPiBraXN1aVwgOwor5a215Y21ID4gZnVyYW5cIDsKK+WujOWCmSA+IGthbmJpXCA7CivpoYznlLsgPiBkYWlnYVwgOwor5aW96YGLID4ga291dW5cIDsKK+iBluWvvyA+IHNlaWp1XCA7Civpo5vmj5ogPiBoaXlvdVwgOwor55CD5aiBID4ga3l1dWlcIDsKK+isueipsSA+IGtpbndhXCA7CivkuI3niq8gPiBmdWJvblwgOwor5LuK5a61ID4ga295b2lcIDsKK+WuiOWCmSA+IHNodWJpXCA7CivkupTmiJIgPiBnb2thaVwgOwor54yc55aRID4gc2FpZ2lcIDsKK+WumOS6iyA+IGthbmppXCA7CivmnZ7mhoIgPiBraXl1dVwgOwor5LuK5a2jID4ga29ua2lcIDsKK+eQhuWkliA+IHJpZ2FpXCA7CivpnaLpg6ggPiBtZW5idVwgOwor5piO6KiYID4gbWVpa2lcIDsKK+S7luWnkyA+IHRhc2VpXCA7CivlpbPpg44gPiBqb3JvdVwgOwor5aSp6aasID4gdGVuYmFcIDsKK+iyoeW4gyA+IHNhaWZ1XCA7CivmnKrmnaUgPiBtaXJhaVwgOwor5LiN54eDID4gZnVuZW5cIDsKK+S4gOeMriA+IGlra29uXCA7CivkupTmhJ8gPiBnb2thblwgOwor5pa96YygID4gc2Vqb3VcIDsKK+WuieS9jyA+IGFuanV1XCA7CivogLPlupUgPiBqaXRlaVwgOwor6Z2e6YGTID4gaGlkb3VcIDsKK+S6lOaDhSA+IGdvam91XCA7CivpnKfpm7AgPiBtdWZ1blwgOwor5p2/5bGLID4gaXRheWFcIDsKK+S4gOeKrCA+IGlra2VuXCA7CivkupTmgqogPiBnb2FrdVwgOwor5a2m5Yy6ID4gZ2Fra3VcIDsKK+S6uuWvvyA+IGppbmp1XCA7CivmnInmqZ8gPiB5dXVraVwgOwor6K6D576OID4gc2FuYmlcIDsKK+S4jueCuSA+IHlvdGVuXCA7CivkuIDniYggPiBpcHBhblwgOwor5Lq65a62ID4gamlua2FcIDsKK+mgreeariA+IHRvdWhpXCA7CivmnKrmmI4gPiBtaW1laVwgOwor5LqS5oG1ID4gZ29rZWlcIDsKK+S6i+aFiyA+IGppdGFpXCA7CivmnpzloLEgPiBrYWhvdVwgOwor6Z2i6LyqID4gb21vd2FcIDsKK+iyp+WvjCA+IGhpbnB1XCA7Civnj77loLQgPiBnZW5iYVwgOwor6LKn5a62ID4gaGlua2FcIDsKK+mkiuWutiA+IHlvdWthXCA7CivoqrLpoYwgPiBrYWRhaVwgOwor6aGe54GrID4gcnVpa2FcIDsKK+WtmOWQpiA+IHpvbnBpXCA7CivkuqTlt64gPiBrb3VzYVwgOwor5p2/5a2QID4gaXRhZ29cIDsKK+WloOmDvSA+IHRlbnRvXCA7Civkuovmg4UgPiBqaWpvdVwgOwor6LK05aeJID4ga2lzaGlcIDsKK+S6iOaEnyA+IHlva2FuXCA7CivogZblpJwgPiBzZWl5YVwgOwor5LuK5aSPID4ga29ua2FcIDsKK+Wtl+WPtyA+IGppZ291XCA7Civkuojmg7MgPiB5b3NvdVwgOwor5LqU5b2pID4gZ29zYWlcIDsKK+S7u+WLmSA+IG5pbm11XCA7Civmlrnph4wgPiBob3VyaVwgOwor546L5pS/ID4gb3VzZWlcIDsKK+Wto+WIiiA+IGtpa2FuXCA7Civmnrblj7AgPiBrYWRhaVwgOwor576O54K5ID4gYml0ZW5cIDsKK+S6jOW/tSA+IG5pbmVuXCA7CivorJvoqbEgPiBrb3V3YVwgOwor5LiA54K5ID4gaXR0ZW5cIDsKK+izm+WQpiA+IHNhbnBpXCA7CivlpKfpm6ggPiBvb2FtZVwgOwor5aSV6aSJID4geXV1Z2VcIDsKK+WkqumZsCA+IHRhaWluXCA7CivmnJ3ml6UgPiBhc2FoaVwgOwor5Luj5ZOhID4gZGFpaW5cIDsKK+S4iua8lCA+IGpvdWVuXCA7Civpm7Lpq5ggPiB1bmtvdVwgOwor5LqU5bi4ID4gZ29qb3VcIDsKK+aWh+mbhSA+IGJ1bmdhXCA7CivkuqTlsL4gPiBrb3ViaVwgOwor5LiN5rqAID4gZnVtYW5cIDsKK+i0iOS4jiA+IHpvdXlvXCA7CivkubHmiZMgPiByYW5kYVwgOwor5aSW6aGMID4gZ2VkYWlcIDsKK+eJoeigoyA+IGJvcmVpXCA7Civlpa7otbcgPiBmdW5raVwgOwor5Lq65aSrID4gbmlucHVcIDsKK+iAtuWsoiA+IHlham91XCA7CivkupLluIIgPiBnb3NoaVwgOwor6aSK5aWzID4geW91am9cIDsKK+WmhOiqniA+IG1vdWdvXCA7Civosp7lqaYgPiB0ZWlmdVwgOwor576p5rCRID4gZ2ltaW5cIDsKK+WkmumdoiA+IHRhbWVuXCA7CivogLPlrZQgPiBqaWtvdVwgOwor6Kqe6aGeID4gZ29ydWlcIDsKK+aWuemAlCA+IGhvdXRvXCA7Civku4/lmaggPiBidWtraVwgOwor5Lqk5a6cID4ga291Z2lcIDsKK+aXpeiqsiA+IG5pa2thXCA7Civoga/lj6UgPiByZW5rdVwgOwor6Kqe6aCtID4gZ290b3VcIDsKK+S6nOWxniA+IGF6b2t1XCA7CivmnInmnJ8gPiB5dXVraVwgOwor6LOb5YqpID4gc2Fuam9cIDsKK+iqnumghiA+IGdvanVuXCA7CivkuLvmn7sgPiBzaHVzYVwgOwor5a2j5YCZID4ga2lrb3VcIDsKK+WkmumboyA+IHRhbmFuXCA7CivlrZflhbggPiBqaXRlblwgOwor6LK05ZywID4ga2ljaGlcIDsKK+S7o+WNsCA+IGRhaWluXCA7Civnvqnmra8gPiBnaXNoaVwgOwor5aW96Kq8ID4ga291Z2lcIDsKK+S4jea1hCA+IGZ1am91XCA7Civml6XoqJggPiBuaWtraVwgOwor5Lul5YyXID4gaWhva3VcIDsKK+WtkOWIhiA+IGtvYnVuXCA7CivnjJvngasgPiBtb3VrYVwgOwor5aSW6ZyAID4gZ2FpanVcIDsKK+WtpuS9jSA+IGdha3VpXCA7CivmnKzmiYsgPiBob250ZVwgOwor5p2l5a2jID4gcmFpa2lcIDsKK+iynuWlsyA+IHRlaWpvXCA7Civpn7PnqIsgPiBvbnRlaVwgOwor57+75oSPID4gaG9uJydpXCA7CivorIDorbAgPiBib3VnaVwgOwor5LiN5rOVID4gZnVob3VcIDsKK+e+jua4ryA+IGJpa291XCA7Civku6Pli5kgPiBkYWltdVwgOwor5LiN5rK7ID4gZnVjaGlcIDsKK+e+hea8oiA+IHJha2FuXCA7CivppKzlj6MgPiBrb2tvdVwgOwor572554G9ID4gcmlzYWlcIDsKK+acquaIkCA+IG1pc2VpXCA7CivmnIDmnJ8gPiBzYWlnb1wgOwor6Zuq6aeEID4gc2V0dGFcIDsKK+WklemZvSA+IHl1dWhpXCA7CivlpJzplpMgPiB5YWthblwgOwor5Lqh5ammID4gYm91ZnVcIDsKK+Wlh+mBhyA+IGtpZ3V1XCA7Civmm7jmnrYgPiBzaG9rYVwgOwor6ICB5b6MID4gcm91Z29cIDsKK+S7gOWZqCA+IGp1dWtpXCA7Civml4XosrsgPiByeW9oaVwgOwor5LqV5a6IID4gaW1vcmlcIDsKK+mdkuiynSA+IGFvZ2FpXCA7CivkuIvmsLQgPiBnZXN1aVwgOwor5LqU5a6YID4gZ29rYW5cIDsKK+WliOi+uiA+IG5haGVuXCA7CivmlbTpmaQgPiBzZWlqb1wgOwor5LiN5q+bID4gZnVtb3VcIDsKK+S4i+awkSA+IGdlbWluXCA7CivmnKzmhI8gPiBob24nJ2lcIDsKK+WrjOaCqiA+IGtlbicnb1wgOwor5pen6KGjID4ga3l1dWlcIDsKK+iyp+WcnyA+IGhpbmRvXCA7Civml6Loo70gPiBraXNlaVwgOwor6Zu76ZuiID4gZGVucmlcIDsKK+S4iuawlyA+IGpvdWtpXCA7CivpoZ7mr5QgPiBydWloaVwgOwor6aOi5a+SID4ga2lrYW5cIDsKK+S4gOa0lyA+IGlzc2VuXCA7CivkuIvmrr8gPiBnZWRlblwgOwor5LiN5q27ID4gZnVzaGlcIDsKK+S4i+autSA+IGdlZGFuXCA7Civpm7bpnLIgPiByZWlyb1wgOwor5LiN5q2jID4gZnVzZWlcIDsKK+S6jOWwgSA+IG5pZnV1XCA7Civpm7fpm7IgPiByYWl1blwgOwor5a2X5L2TID4gaml0YWlcIDsKK+acn+aIkCA+IGtpc2VpXCA7Civku5bli5UgPiB0YWRvdVwgOwor6aGe5q2MID4gcnVpa2FcIDsKK+isgeimiyA+IGVra2VuXCA7CivkuqHlpKsgPiBib3VmdVwgOwor5LiK5q2vID4gdXdhYmFcIDsKK+S6jOWuriA+IG5pZ3V1XCA7CivmlpfphZIgPiB0b3NodVwgOwor5LuW5YqxID4gdGFyZWlcIDsKK+S4jeashCA+IGZ1cmFuXCA7Civnj63lk6EgPiBoYW5pblwgOwor6Ku36KqmID4gZnV1anVcIDsKK+WrjOW/jCA+IGtlbmdpXCA7Civku4rlj6QgPiBraW5rb1wgOwor6Kuu6K2wID4gc2hpZ2lcIDsKK+S4ieasoSA+IHNhbmppXCA7CivkuIDmsLQgPiBpc3N1aVwgOwor5LuH5ZCNID4gYWRhbmFcIDsKK+S6iOWumiA+IHlvdGVpXCA7CivosrTlkJsgPiBraWt1blwgOwor5pat6LevID4gZGFucm9cIDsKK+eLvOeFmSA+IHJvdWVuXCA7CivosrTlkI0gPiBraW1laVwgOwor6LK05Y+wID4ga2lkYWlcIDsKK+S7ruS7pCA+IHRhdG9lXCA7CivkuIDmrrUgPiBpdHRhblwgOwor5aWz6KOFID4gam9zb3VcIDsKK+eJm+iSoSA+IGdvYm91XCA7CivmmpfnhLYgPiBhbnplblwgOwor5LiA5q27ID4gaXNzaGlcIDsKK+S4gOatsyA+IGlzc2FpXCA7CivmnaXloLQgPiByYWliYVwgOwor6Kqy6YeRID4ga2FraW5cIDsKK+mfs+ebpCA+IG9uYmFuXCA7Civku4vliqkgPiBrYWlqb1wgOwor5LiH5qmfID4gYmFua2lcIDsKK+mjr+WgtCA+IGhhbmJhXCA7Civnvormra8gPiBzaGlkYVwgOwor6aKo5oOFID4gZnV6ZWlcIDsKK+S7o+S+oSA+IGRhaWthXCA7CivmnrbkuIogPiBrYWpvdVwgOwor5aOw6Z+zID4gc2Vpb25cIDsKK+aal+eCuSA+IGFudGVuXCA7Civni7zngasgPiByb3VrYVwgOwor5LuV5YSAID4gc2hpZ2lcIDsKK+aalueCiSA+IGRhbnJvXCA7CivpnZ7ooYwgPiBoaWtvdVwgOwor5Lm+5a2jID4ga2Fua2lcIDsKK+Wkp+mDqCA+IGRhaWJ1XCA7CivlpYnos4AgPiBob3VnYVwgOwor6LGq5a62ID4gZ291a2FcIDsKK+aZguepuiA+IGppa3V1XCA7Civpn7Pnl7QgPiBvbmNoaVwgOwor5pyf5b6FID4ga2l0YWlcIDsKK+aWh+mDqCA+IG1vbmJ1XCA7CivkupXloLAgPiBpc2VraVwgOwor5aSn6YGOID4gdGFpa2FcIDsKK+aal+a+uSA+IGFudGFuXCA7CivnjovluKsgPiBvdXNoaVwgOwor6Kmx6aGMID4gd2FkYWlcIDsKK+S6i+WkpyA+IGppZGFpXCA7CivlpJrph40gPiB0YWp1dVwgOwor6Kmx6aCtID4gd2F0b3VcIDsKK+S6jOWjqyA+IG5pc2hpXCA7CivkuovlpIkgPiBqaWhlblwgOwor5pmp55SfID4gb2t1dGVcIDsKK+mbqOmWkyA+IGFtYWFpXCA7CivlppboibYgPiB5b3VlblwgOwor5aSW6YeOID4gZ2FpeWFcIDsKK+S4i+agoSA+IGdla291XCA7Civnj77kvqEgPiBnZW5rYVwgOwor6KuW6K2wID4gcm9uZ2lcIDsKK+iyoOWPtyA+IGZ1Z291XCA7Civoqabpo7IgPiBzaGlpblwgOwor6Kqt6YGOID4gZG9ra2FcIDsKK+aYjue+jiA+IG1laWJpXCA7Civku5jkvJogPiBmdWthaVwgOwor6LK05YWsID4ga2lrb3VcIDsKK+iri+iyoCA+IHVrZW9pXCA7CivkuLvmiJEgPiBzaHVnYVwgOwor6aO95ZKMID4gaG91d2FcIDsKK+S6jOWhgSA+IG5pcnVpXCA7CivoqqTphY0gPiBnb2hhaVwgOwor6LK05YWEID4ga2lrZWlcIDsKK+Wlh+itpiA+IGtpa2VpXCA7Civpm6LplpMgPiByaWthblwgOwor57+75a2XID4gaG9uamlcIDsKK+mjm+WgsSA+IGhpaG91XCA7CivosrTlg6cgPiBraXNvdVwgOwor57mL6L6eID4ga2VpamlcIDsKK+aXpeiPryA+IG5pa2thXCA7CivkuojloLEgPiB5b2hvdVwgOwor5LuW5Lq6ID4gdGFuaW5cIDsKK+mbhOmjmyA+IHl1dWhpXCA7CivlpJbpg6ggPiBnYWlidVwgOwor6KuW6KqeID4gcm9uZ29cIDsKK+abnOaXpSA+IHlvdWJpXCA7CivogIHlqaYgPiByb3VmdVwgOwor5aSW6YOOID4gdWlyb3VcIDsKK+mdkuidvyA+IGFvYmFlXCA7Civnvajms5UgPiBhbnBvdVwgOwor5pqX5rigID4gYW5reW9cIDsKK+iAgeWphiA+IHJvdWJhXCA7CivlpYfoq4cgPiBraWRhblwgOwor6LKh5YuZID4gemFpbXVcIDsKK+S4i+abuCA+IGdlc2hvXCA7Civkuq3ljYggPiB0ZWlnb1wgOwor5pa96KGMID4gc2Vrb3VcIDsKK+S4gOagoSA+IGlra291XCA7CivmnIDmhJsgPiBzYWlhaVwgOwor5puW5pinID4gYWltYWlcIDsKK+aXqeiLlyA+IHNhbmFlXCA7CivkuIfmnLYgPiBiYW5kYVwgOwor5pys5a62ID4gaG9ua2VcIDsKK+WklumBkyA+IGdlZG91XCA7CivlqprmhYsgPiBiaXRhaVwgOwor5pmC55+tID4gaml0YW5cIDsKK+aal+a2mSA+IGFucnVpXCA7CivmnInlv4MgPiB1c2hpblwgOwor54++5LiWID4gZ2VuemVcIDsKK+S6jOWbniA+IG5pa2FpXCA7Civnj77kuIsgPiBnZW5rYVwgOwor5pqi5rCXID4gbm9ua2lcIDsKK+iAgeWmkyA+IHJvdWdpXCA7CivmnKrlrpogPiBtaXRlaVwgOwor6ICV5ZyfID4ga291ZG9cIDsKK+acrOWtlyA+IGhvbmppXCA7CivkuI3mmJMgPiBmdWVraVwgOwor5Lqk5Y+JID4ga291c2FcIDsKK+acquWujCA+IG1pa2FuXCA7CivlpYfoqIggPiBraWtlaVwgOwor5LiN5piOID4gZnVtZWlcIDsKK+iyvOS7mCA+IHRlbnB1XCA7CivmnKvlraMgPiBtYWtraVwgOwor6ICB5aWzID4gcm91am9cIDsKK+S4u+aBqSA+IHNodW9uXCA7CivkuIDmna8gPiBpcHBhaVwgOwor576O5pysID4gYmlob25cIDsKK+S4ieaZgiA+IHNhbmppXCA7CivkuIrmmKAgPiBqb3VlaVwgOwor5aWH6KazID4ga2lrYW5cIDsKK+eOi+WtqyA+IG91c29uXCA7CivkuIvml6wgPiBnZWp1blwgOwor5LiN5patID4gZnVkYW5cIDsKK+S4gOacrCA+IGlwcG9uXCA7CivkuI3mlokgPiBmdXNlaVwgOwor5LiN5paHID4gZnVidW5cIDsKK+adkOWZqCA+IHphaWtpXCA7CivkuIvmlrkgPiBrYWhvdVwgOwor5LiN5pW0ID4gZnVzZWlcIDsKK+S4jeaVrCA+IGZ1a2VpXCA7CivkuInml6UgPiBtaWtrYVwgOwor5LiA5pu5ID4gaXNzb3VcIDsKK+S4gOabuCA+IGlzc2hvXCA7CivmmYLnm7ggPiBqaXNvdVwgOwor5LiA5pu0ID4gaWtrb3VcIDsKK+Wni+elliA+IHNoaXNvXCA7CivkuI3mlZcgPiBmdWhhaVwgOwor5LiN5pWPID4gZnViaW5cIDsKK+WkqeizpiA+IHRlbnB1XCA7CivosY7lrZAgPiBqdXNoaVwgOwor6LGK5a+MID4gaG91ZnVcIDsKK+e+juaZryA+IGJpa2VpXCA7CivpnLLoposgPiByb2tlblwgOwor576p5oyZID4gZ2lreW9cIDsKK+S4i+aUviA+IGthaG91XCA7Civoq4foqbEgPiBkYW53YVwgOwor5pyA5b6MID4gc2FpZ29cIDsKK+iytOS6uiA+IGtpamluXCA7CivmlazpgaAgPiBrZWllblwgOwor5pyq5amaID4gbWlrb25cIDsKK+acneWvnSA+IGFzYW5lXCA7CivosrjkuI4gPiB0YWl5b1wgOwor5LqY5Y+kID4ga291a29cIDsKK+aaluawlyA+IG5vbmtpXCA7Civkub7lm7ogPiBrYW5rb1wgOwor5LiN5pKTID4gZnV0b3VcIDsKK+e2uum6lyA+IGtpcmVpXCA7CivosqDlgrUgPiBmdXNhaVwgOwor5LmZ5a2QID4gb3RvZ29cIDsKK+WpmuacnyA+IGtvbmtpXCA7CivlpKfosYYgPiBkYWl6dVwgOwor6Kyb576pID4ga291Z2lcIDsKK+mbqOmHjyA+IHVyeW91XCA7CivkuIDml6YgPiBpdHRhblwgOwor5aWH6KGMID4ga2lrb3VcIDsKK+S6uuS9jSA+IGppbicnaVwgOwor576p5omLID4gZ2lzaHVcIDsKK+e+juaWhyA+IGJpYnVuXCA7CivkuIDmlrkgPiBpcHBvdVwgOwor5pqR5rCXID4gc2hva2lcIDsKK+S4gOaWpCA+IGlra2luXCA7CivnvqnmiKYgPiBnaXNlblwgOwor5LiA5paRID4gaXBwYW5cIDsKK+S4gOaWiSA+IGlzc2VpXCA7CivoqrnorJcgPiBoaWJvdVwgOwor5peX6ImmID4ga2lrYW5cIDsKK+e3i+mviSA+IGhpZ29pXCA7CivkuIDmlZcgPiBpcHBhaVwgOwor576I5peFID4ga2lyeW9cIDsKK+S6lOWNgSA+IGdvanV1XCA7CivnvqnmhqQgPiBnaWZ1blwgOwor5LqM5ZCbID4gbmlrdW5cIDsKK+S4luaJjSA+IHNlc2FpXCA7CivosqvkuLsgPiBrYW5qdVwgOwor5LqM5Y+3ID4gbmlnb3VcIDsKK+acgOW3piA+IHNhaXNhXCA7CivmnKrlor4gPiBtaWtvblwgOwor5Lqh5YWQID4gYm91amlcIDsKK+abuOW6qyA+IHNob2tvXCA7CivmnKzloLQgPiBob25iYVwgOwor6Zu76LevID4gZGVucm9cIDsKK+WkluiyqCA+IGdhaWthXCA7CivkuZnlpbMgPiBvdG9tZVwgOwor5paH6KqeID4gYnVuZ29cIDsKK+S4luaFiyA+IHNldGFpXCA7CivnjqnlkbMgPiBnYW5taVwgOwor6aGn5oWuID4ga29yeW9cIDsKK+iqmOi1tyA+IHl1dWtpXCA7CivkuI3miY0gPiBmdXNhaVwgOwor5aSc6K2mID4geWFrZWlcIDsKK+maoOmhlSA+IGlua2VuXCA7CivkuI3miKYgPiBmdXNlblwgOwor546L5Z+OID4gb3Vqb3VcIDsKK+S4gOaOgyA+IGlzc291XCA7CivkuIrmiYsgPiBqb3V6dVwgOwor5pys5ZyfID4gaG9uZG9cIDsKK+S4luaDhSA+IHNlam91XCA7CivkuIrmiLggPiBqb3Vnb1wgOwor576O5oyZID4gYmlreW9cIDsKK+WkmuisnSA+IHRhc2hhXCA7CivkuI3mhqsgPiBmdWJpblwgOwor5LqL5YmNID4gaml6ZW5cIDsKK+S4gOaMmSA+IGlra3lvXCA7Civpm6LovrIgPiByaW5vdVwgOwor5LiH5oi4ID4gYmFua29cIDsKK+S4gOaMhyA+IGlzc2hpXCA7Civpn7PmupAgPiBvbmdlblwgOwor5LiN5oWuID4gZnVyeW9cIDsKK+iAs+S7iyA+IGppa2FpXCA7CivkuozliIYgPiBuaWJ1blwgOwor5pqr5pmCID4gemFuamlcIDsKK+aYjuekuiA+IG1laWppXCA7Civlo67pgJQgPiBzb3V0b1wgOwor5Li75a62ID4gc2h1a2FcIDsKK+maoOmdoiA+IGlubWVuXCA7CivkuqTku5ggPiBrb3VmdVwgOwor6Ki06aGYID4gc29nYW5cIDsKK+S4jeaEjSA+IGZ1YmluXCA7CivnvqnlvJ8gPiBnaXRlaVwgOwor54i26ICBID4gZnVyb3VcIDsKK+eOh+WcnyA+IHNvdHRvXCA7CivkuqTkupIgPiBrb3Vnb1wgOwor6Kqk6KqNID4gZ29uaW5cIDsKK+mbqui4jyA+IHNldHRhXCA7CivlpKnooaMgPiB0ZW4nJ2lcIDsKK+mdoue9tSA+IG1lbmJhXCA7CivkuIDmiY0gPiBpc3NhaVwgOwor5LqL5YW4ID4gaml0ZW5cIDsKK+WkluiqniA+IGdhaWdvXCA7CivlpJroqIAgPiB0YWdlblwgOwor5LiA5oimID4gaXNzZW5cIDsKK+S4i+aDhSA+IGtham91XCA7CivkupTlgKsgPiBnb3JpblwgOwor6ICV5YW3ID4ga291Z3VcIDsKK+S6lOWAjSA+IGdvYmFpXCA7CivpoIbmrKEgPiBqdW5qaVwgOwor54qg54myID4gZ2lzZWlcIDsKK+iqpOinoyA+IGdva2FpXCA7CivoqqPoqIAgPiBmdWdlblwgOwor5pu45a62ID4gc2hva2FcIDsKK+mhmOaEjyA+IGdhbicnaVwgOwor6Kqe6KqMID4gZ29zaGlcIDsKK+ipremBkyA+IGtpZG91XCA7CivkuLvlqaYgPiBzaHVmdVwgOwor5pmv5rCXID4ga2Vpa2lcIDsKK+S4jeW/qyA+IGZ1a2FpXCA7CivpoqjlnJ8gPiBmdXVkb1wgOwor5Lit5bCJID4gY2h1dWlcIDsKK+mbo+i3ryA+IG5hbnJvXCA7Civnh4PosrsgPiBuZW5waVwgOwor576O5oSfID4gYmlrYW5cIDsKK+acieWkqyA+IHl1dWZ1XCA7CivkupTkvZMgPiBnb3RhaVwgOwor6ICB5YyWID4gcm91a2FcIDsKK+acieWkjyA+IHl1dWthXCA7Civlq4zlkbMgPiBpeWFtaVwgOwor5LiA5oSPID4gaWNoaWlcIDsKK+aZruautSA+IGZ1ZGFuXCA7CivkuozlgI0gPiBuaWJhaVwgOwor6K6a5q2MID4gc2Fua2FcIDsKK+S4i+W+oSA+IGdlZ3lvXCA7CivnjqnlhbcgPiBnYW5ndVwgOwor6Kmt6L6vID4ga2liZW5cIDsKK+S4jeW9kyA+IGZ1dG91XCA7CivlpaXnvqkgPiBva3VnaVwgOwor6Zu76KmxID4gZGVud2FcIDsKK+S4luW4ryA+IHNldGFpXCA7CivmmYLngrkgPiBqaXRlblwgOwor5pWs6KqeID4ga2VpZ29cIDsKK+WknOihjCA+IHlha291XCA7CivnjJvmiZMgPiBtb3VkYVwgOwor6ZyA6KaBID4ganV5b3VcIDsKK+Wkp+ibhyA+IGRhaWphXCA7CivkuIvlvKYgPiBrYWdlblwgOwor5pyx5Y2wID4gc2h1aW5cIDsKK+S6i+S+iyA+IGppcmVpXCA7CivlpJbooqsgPiBnYWloaVwgOwor5LqL5L2TID4gaml0YWlcIDsKK+acgOWkmiA+IHNhaXRhXCA7CivnibnnlbAgPiB0b2t1aVwgOwor5LiN5bm4ID4gZnVrb3VcIDsKK+miqOWWqSA+IGZ1dXl1XCA7CivkuI3lubMgPiBmdWhlaVwgOwor6aGV5b6uID4ga2VuYmlcIDsKK+Wls+ezuyA+IGpva2VpXCA7CivosLflnLAgPiB5YWNoaVwgOwor5LiK5bqnID4gam91emFcIDsKK+e4gei+uiA+IGVucGVuXCA7Civpm4TpgJQgPiB5dXV0b1wgOwor5LqL5Lu2ID4gamlrZW5cIDsKK+S4ieW6piA+IHNhbmRvXCA7CivkuInlupwgPiBzYW5wdVwgOwor5pSv6YOoID4gc2hpYnVcIDsKK+e+juW9oiA+IGJpa2VpXCA7Civlqr7lkowgPiBrb3V3YVwgOwor54i257O7ID4gZnVrZWlcIDsKK+S5l+WToSA+IGpvdWluXCA7Civkuojku6QgPiB5b3JlaVwgOwor5pSv6YKjID4gc2hpbmFcIDsKK+S4i+W3uyA+IGdla2FuXCA7CivkuozkuZcgPiBuaWpvdVwgOwor5LiK5biDID4gam91ZnVcIDsKK+iAgeWEkiA+IHJvdWp1XCA7CivmnKzli5kgPiBob25tdVwgOwor5LqM5LiWID4gbmlzZWlcIDsKK+S6jOS4iSA+IG5pc2FuXCA7CivorbLmuKEgPiBqb3V0b1wgOwor6aKo5ZGzID4gZnV1bWlcIDsKK+e+qeWtkCA+IGdpc2hpXCA7CivkuZ3ljYEgPiBrdWp1dVwgOwor57255oKjID4gcmlrYW5cIDsKK+acquWIsCA+IG1pdG91XCA7Civorbfms5UgPiBnb2hvdVwgOwor6ICM5LuKID4gamlrb25cIDsKK+ixmuWFkCA+IHRvbmppXCA7CivkuIDluK8gPiBpdHRhaVwgOwor6K6D5q2MID4gc2Fua2FcIDsKK+aXuuebmyA+IG91c2VpXCA7CivmnKrliIogPiBtaWthblwgOwor6Zuj6KqeID4gbmFuZ29cIDsKK+aVheiytyA+IGtvYmFpXCA7Civpm5HosrsgPiB6YXBwaVwgOwor546L5Yi2ID4gb3VzZWlcIDsKK+S4u+WboCA+IHNodWluXCA7CivmnLHlhJIgPiBzaHVqdVwgOwor6ZuR6LKoID4gemFra2FcIDsKK+Wlh+iBniA+IGtpYnVuXCA7CivkuI3lsL0gPiBmdWppblwgOwor5LiL5bGxID4gZ2V6YW5cIDsKK+aVl+iotCA+IGhhaXNvXCA7CivkuIvlsaQgPiBrYXNvdVwgOwor5aOw6KqJID4gc2VpeW9cIDsKK+mbhei2oyA+IGdhc2h1XCA7CivkuIrlsYsgPiB1d2F5YVwgOwor546L5YagID4gb3VrYW5cIDsKK+miqOWMliA+IGZ1dWthXCA7Civlo67oqp4gPiBzb3Vnb1wgOwor5LmX5YuZID4gam91bXVcIDsKK+aatOW+kiA+IGJvdXRvXCA7CivnjovlhawgPiBvdWtvdVwgOwor576p5aeJID4gZ2lzaGlcIDsKK+S4jeWuoyA+IGZ1c2VuXCA7CivnvqnlprkgPiBnaW1haVwgOwor546L5YWaID4gb3V0b3VcIDsKK+S4jeWumiA+IGZ1dGVpXCA7CivkuInlsIkgPiBzYW4nJ2lcIDsKK+mZuumYuyA+IGtlbnNvXCA7CivkuI3lrZ0gPiBmdWtvdVwgOwor5LiH5a+/ID4gYmFuanVcIDsKK+ipruitsCA+IHNlbmdpXCA7CivpoZ7lrZcgPiBydWlqaVwgOwor6ZmN6a2UID4gZ291bWFcIDsKK+WkqeiKsSA+IHRlbmthXCA7Civpn7PmoJMgPiBvbnNlblwgOwor576p5aOrID4gZ2lzaGlcIDsKK+S4gOWxpCA+IGlzc291XCA7Civpn7vmm7ggPiBpbnNob1wgOwor5pa957GzID4gc2VtYWlcIDsKK+ipnuizpiA+IHNoaWZ1XCA7CivmnJ/lhoUgPiBraW5haVwgOwor5pei55+lID4ga2ljaGlcIDsKK+itsuatqSA+IGpvdWhvXCA7Civoqa3orIAgPiBraWJvdVwgOwor5paH6IuRID4gYnVuZW5cIDsKK+mdmeepjyA+IHNlaW9uXCA7CivmnLrkuIogPiBraWpvdVwgOwor6Zmw6Zm6ID4gaW5rZW5cIDsKK+S4gOWwiSA+IGljaGlpXCA7CivkuIDlsIEgPiBpcHB1dVwgOwor576O5a65ID4gYml5b3VcIDsKK+aZqeacnyA+IGJhbmtpXCA7CivnuYHoj68gPiBoYW5rYVwgOwor6aC75bqmID4gaGluZG9cIDsKK+irh+e+qSA+IGRhbmdpXCA7CivpmqDpgYEgPiBpbnRvblwgOwor6Z2e56S8ID4gaGlyZWlcIDsKK+acrOS9jSA+IGhvbicnaVwgOwor5LiA5a6aID4gaXR0ZWlcIDsKK+eOi+S+ryA+IG91a291XCA7CivpoJPmjKsgPiB0b256YVwgOwor5LiB5a2XID4gdGVpamlcIDsKK+mbkeiomCA+IHpha2tpXCA7CivkuI3lp5kgPiBmdW5pblwgOwor6Zqg6YCAID4gaW50YWlcIDsKK+mdseeariA+IGppbnBpXCA7CivpoqjlhIAgPiBmdXVnaVwgOwor6Kmp6KqeID4gc2hpZ29cIDsKK+ipreioiCA+IGtpa2VpXCA7CivpmaTpnJwgPiBqb3NvdVwgOwor5aiB5pyNID4gaWZ1a3VcIDsKK+mZpOmciiA+IGpvcmVpXCA7CivkuI3lpoogPiBmdW5pblwgOwor5aGp6aGeID4gZW5ydWlcIDsKK+mZsOmWgCA+IGlubW9uXCA7Civml6fnl74gPiBreXV1YVwgOwor6Z+75paHID4gaW5idW5cIDsKK+e4geirhyA+IGVuZGFuXCA7Civpna3nmq4gPiBqaW5waVwgOwor5pyA5Y+kID4gc2Fpa29cIDsKK+e5geiMgiA+IGhhbm1vXCA7CivlpJroirggPiB0YWdlaVwgOwor6Zmk6ZqKID4gam90YWlcIDsKK+WpmuWutiA+IGtvbmthXCA7CivkuI3lpIkgPiBmdWhlblwgOwor6aGM5a2XID4gZGFpamlcIDsKK+S4ieWlsyA+IHNhbmpvXCA7CivlpJboi5EgPiBnYWllblwgOwor5pyr5LiWID4gbWFzc2VcIDsKK+acieWIqSA+IHl1dXJpXCA7CivkuIvlo6sgPiBrYXNoaVwgOwor5LiJ5aSPID4gc2Fua2FcIDsKK+eJoeeJmyA+IG91c2hpXCA7CivkuIflpKsgPiBiYW5wdVwgOwor5Li75YuZID4gc2h1bXVcIDsKK+eJiOeUuyA+IGhhbmdhXCA7Civoq63npLogPiB5dXNoaVwgOwor6Zu76I23ID4gZGVua2FcIDsKK+mbheiogCA+IGdhZ2VuXCA7CivkuI3loKogPiBmdWthblwgOwor5pqX5b2xID4gYW4nJ2VpXCA7CivpnZLno4EgPiBzZWlqaVwgOwor54Sh6aKoID4gbXVmdXVcIDsKK+mdoueariA+IG1lbnBpXCA7CivpoK3lt74gPiB6dWtpblwgOwor5aSn576pID4gdGFpZ2lcIDsKK+eEoemhniA+IG11cnVpXCA7Civnvo7lpKcgPiBiaWRhaVwgOwor57ea6LevID4gc2Vucm9cIDsKK+eEoemhjCA+IG11ZGFpXCA7CivnhKHpoLwgPiBidXJhaVwgOwor6Kmm6KOcID4gc2hpaG9cIDsKK+mgkeaEmiA+IGdhbmd1XCA7CivkuIDlpKkgPiBpdHRlblwgOwor576O5aOwID4gYmlzZWlcIDsKK+WkmuiDvSA+IHRhbm91XCA7CivkuIvln44gPiBnZWpvdVwgOwor5piv5q2jID4gemVzZWlcIDsKK+S4gOWkiSA+IGlwcGVuXCA7CivnvbflrpggPiBoaWthblwgOwor5pWj6I+vID4gc2FuZ2VcIDsKK+S4gOWjqyA+IGlzc2hpXCA7CivkuIvlnoIgPiBrYXN1aVwgOwor5aSP6IezID4gZ2VzaGlcIDsKK+e3j+i6qyA+IHNvdW1pXCA7CivkuI3lnKggPiBmdXphaVwgOwor5Lit5Yy7ID4gY2h1dWlcIDsKK+iqpOiBniA+IGdvYnVuXCA7CivkuIDloLEgPiBpcHBvdVwgOwor5LiK5ZuzID4gam91enVcIDsKK+mdoueUuyA+IG1lbmdhXCA7CivnhZnpgZMgPiBlbmRvdVwgOwor5aWz55SfID4gam9zZWlcIDsKK+eEoembuyA+IG11ZGVuXCA7CivnhKHpm6MgPiBidW5hblwgOwor5aSW6ICzID4gZ2FpamlcIDsKK+mdnueVqiA+IGhpYmFuXCA7CivpoafllY8gPiBrb21vblwgOwor5pyJ5L6hID4geXV1a2FcIDsKK+acieS9mSA+IHl1dXlvXCA7Civop6Ppm6IgPiBrYWlyaVwgOwor54Sh6ZmQID4gbXVnZW5cIDsKK+ino+mbhyA+IGthaWtvXCA7CivkuI3lloQgPiBmdXplblwgOwor6Zuq6IqxID4gc2Vra2FcIDsKK+aboOWPpCA+IGtvdWtvXCA7Civop6PpmaQgPiBrYWlqb1wgOwor5LiN5ZWPID4gZnVtb25cIDsKK+S4gOWbniA+IGlra2FpXCA7CivpmYTpmo8gPiBmdXp1aVwgOwor57mK57atID4gc2VuJydpXCA7CivmnInkuosgPiB5dXVqaVwgOwor5LiL5ZWPID4ga2Ftb25cIDsKK+aYjuayuyA+IG1laWppXCA7CivkuJnljYggPiBoZWlnb1wgOwor576p5YuHID4gZ2l5dXVcIDsKK+mgkuW4gyA+IGhhbnB1XCA7Civoq5bnoLQgPiByb25wYVwgOwor57215aOwID4gYmFzZWlcIDsKK+S4i+WTgSA+IGdlaGluXCA7CivpmLLpn7MgPiBib3VvblwgOwor5pyI5LiLID4gZ2Vra2FcIDsKK+iomOi8iSA+IGtpc2FpXCA7CivoqJPovp4gPiBrdW5qaVwgOwor5aSi57K+ID4gbXVzZWlcIDsKK+S4i+WRvSA+IGthbWVpXCA7CivkuLvkuosgPiBzaHVqaVwgOwor5aSW57iBID4gZ2FpZW5cIDsKK+S4jeWQjCA+IGZ1ZG91XCA7Civpn7PmhJ8gPiBvbmthblwgOwor5pmC5paHID4gamlidW5cIDsKK+Wlh+efpSA+IGtpY2hpXCA7Civnt4/orZwgPiBzb3VmdVwgOwor5LiL5ZCRID4gZ2Vrb3VcIDsKK+S4i+WQjSA+IGthbWVpXCA7CivorJvmvJQgPiBrb3VlblwgOwor5LiN5Y+CID4gZnVzYW5cIDsKK+mghuW6jyA+IGp1bmpvXCA7CivpoZ7lj6UgPiBydWlrdVwgOwor5LiK5Y+lID4gam91a3VcIDsKK+S4iuWPpCA+IGpvdWtvXCA7CivmnIDkuIsgPiBzYWlrYVwgOwor6Zqg6KaLID4gaW5rZW5cIDsKK+e+qeWFtSA+IGdpaGVpXCA7CivkuInlj4kgPiBzYW5zYVwgOwor5LiA5ZOBID4gaXBwaW5cIDsKK+e+qeWFhCA+IGdpa2VpXCA7CivkuIflj6QgPiBiYW5rb1wgOwor6Zm66LevID4ga2Vucm9cIDsKK+Wni+acnyA+IHNoaWtpXCA7CivkuIvljYogPiBrYWhhblwgOwor6Ziy6ZmkID4gYm91am9cIDsKK+S4jeWLoiA+IGJ1emVpXCA7CivoqbHoirggPiB3YWdlaVwgOwor5LiN5YuVID4gZnVkb3VcIDsKK+S4jeWKtCA+IGZ1cm91XCA7Civnvo7lkI0gPiBiaW1laVwgOwor5aGp6YW4ID4gZW5zYW5cIDsKK+Wkp+eptCA+IG9vYW5hXCA7CivnjKrlj6MgPiBjaG9rb1wgOwor6Zyy55ukID4gcm9iYW5cIDsKK+S4h+WMliA+IGJhbmthXCA7CivlqIHlvrMgPiBpdG9rdVwgOwor5LiA5Y+NID4gaXR0YW5cIDsKK+S4gOWPjCA+IGlzc291XCA7CivmlqTnm64gPiBraW5tZVwgOwor54mn5q2MID4gYm9ra2FcIDsKK+S4i+WJpCA+IGdlemFpXCA7CivnhKHpiq0gPiBtdXNlblwgOwor5aC06Z2iID4gYmFtZW5cIDsKK+iogOi+niA+IGdlbmppXCA7CivoqrLnqI4gPiBrYXplaVwgOwor6Kqy56iLID4ga2F0ZWlcIDsKK+eEoemKmCA+IG11bWVpXCA7CivoqqTnrpcgPiBnb3NhblwgOwor5LiN5YehID4gZnVib25cIDsKK+eIqueJmSA+IHNvdWdhXCA7CivlpKrnpZYgPiB0YWlzb1wgOwor5pqX5aScID4gYW4nJ3lhXCA7CivkuI3lh40gPiBmdXRvdVwgOwor5aSp56WWID4gdGVuc29cIDsKK+S4gOWNiiA+IGlwcGFuXCA7CivkuIDljYMgPiBpc3NlblwgOwor5aaW5rCXID4geW91a2lcIDsKK+Wlvea8lCA+IGtvdWVuXCA7CivoqqTnrZQgPiBnb3RvdVwgOwor5paH56eRID4gYnVua2FcIDsKK+itt+aGsiA+IGdva2VuXCA7CivlpJrnq68gPiB0YXRhblwgOwor5LiO5YWaID4geW90b3VcIDsKK+S4jeWFqCA+IGZ1emVuXCA7CivoqaDojYkgPiBlaXNvdVwgOwor5LiN5YWaID4gZnV0b3VcIDsKK+mbhOiKsSA+IG9iYW5hXCA7Civml6LmuIggPiBraXNhaVwgOwor5aOu576OID4gc291YmlcIDsKK+Wik+iqjCA+IGJvc2hpXCA7CivlpJrnqK4gPiB0YXNodVwgOwor57a66KuHID4ga2lkYW5cIDsKK+eEoemFjSA+IG11aGFpXCA7Civniq/mhI8gPiBoYW4nJ2lcIDsKK+S4i+WDpyA+IGdlc291XCA7CivnvqnkurogPiBnaWppblwgOwor5LiA5YiHID4gaXNzYWlcIDsKK+S4gOWIhiA+IGlwcHVuXCA7CivkuIDliIAgPiBpdHRvdVwgOwor5aWH55GeID4ga2l6dWlcIDsKK+irlueQhiA+IHJvbnJpXCA7CivlpKfnoLQgPiB0YWloYVwgOwor5LiN5YGPID4gZnVoZW5cIDsKK+mbheiHtCA+IGdhY2hpXCA7CivkuI3lgKsgPiBmdXJpblwgOwor6Kmx6ICFID4gd2FzaGFcIDsKK+e9suWToSA+IHNob2luXCA7CivorJvmraYgPiBrb3VidVwgOwor5pel5rOiID4gbmlwcG9cIDsKK+S4luS7oyA+IHNlZGFpXCA7CivkuIDlho0gPiBpc3NhaVwgOwor5LiW5Lq6ID4gc2VqaW5cIDsKK+aVheiAgSA+IGtvcm91XCA7CivnjL/kurogPiBlbmppblwgOwor5pif5paXID4gc2VpdG9cIDsKK+S4iuWApCA+IHV3YW5lXCA7CivkuIDlhZogPiBpdHRvdVwgOwor54Sh6YGTID4gbXVkb3VcIDsKK+S4jeS+vyA+IGZ1YmVuXCA7CivoqI7orbAgPiB0b3VnaVwgOwor5aKX6KOcID4gem91aG9cIDsKK+S4jeS+iyA+IGZ1cmVpXCA7CivnuZTnm64gPiBvcmltZVwgOwor57aZ6LW3ID4ga2Vpa2lcIDsKK+iok+ipsSA+IGt1bndhXCA7CivnhKHovrogPiBtdWhlblwgOwor5LiW5LiKID4gc2Vqb3VcIDsKK+S4juS7tiA+IHlva2VuXCA7CivkuIvkvZMgPiBrYXRhaVwgOwor6aGe5Ly8ID4gcnVpamlcIDsKK+maoOiUvSA+IGlucGVpXCA7CivnvoXlhbggPiByYXRlblwgOwor6Zmw6KyAID4gaW5ib3VcIDsKK+iok+ipgSA+IGt1bmtvXCA7CivkuInkvZAgPiBzYW5zYVwgOwor5LiJ5L2NID4gc2FubWlcIDsKK+WokeWphiA+IHNoYWJhXCA7CivkuI3ku4EgPiBmdWppblwgOwor5LiI5L2ZID4gam91eW9cIDsKK+aYjuaalyA+IG1laWFuXCA7CivlppPmpbwgPiBnaXJvdVwgOwor5paH55uuID4gYXlhbWVcIDsKK+WlveawlyA+IGtvdWtpXCA7CivnjLbkuoggPiB5dXV5b1wgOwor5aSJ56e7ID4gaGVuJydpXCA7CivpmYTov5EgPiBmdWtpblwgOwor5LiL5Lq6ID4gZ2VuaW5cIDsKK+aatOWIqSA+IGJvdXJpXCA7CivmmpfllqkgPiBhbicneXVcIDsKK+WhkemAoCA+IHNvem91XCA7CivlqZrlhIAgPiBrb25naVwgOwor5LiL5LmXID4gZ2Vqb3VcIDsKK+aTrOijvSA+IGdpc2VpXCA7CivntJnprZogPiBzaGltaVwgOwor5LiH5LqLID4gYmFuamlcIDsKK+aTrOijhSA+IGdpc291XCA7CivkuIDkvZMgPiBpdHRhaVwgOwor5LiA5L2NID4gaWNoaWlcIDsKK+iruOa0viA+IHNob2hhXCA7CivkuIrkuIsgPiBqb3VnZVwgOwor5aSc55uXID4geWF0b3VcIDsKK+S4ieS4liA+IHNhbnplXCA7Civpm7vno4EgPiBkZW5qaVwgOwor5pm05aScID4gc2VpeWFcIDsKK+WppuS6uiA+IGZ1amluXCA7CivpoJHlm7ogPiBnYW5rb1wgOwor5pmC5byKID4gamloZWlcIDsKK+S4gOS7tiA+IGlra2VuXCA7Civnvo7kurogPiBiaWppblwgOwor5LiA5LuLID4gaWtrYWlcIDsKK+e9t+WFjSA+IGhpbWVuXCA7CivlpKfnk7YgPiBvb2JpblwgOwor6KiA6KqeID4gZ2VuZ29cIDsKK+WlveapnyA+IGtvdWtpXCA7CivmlYXntJkgPiBrb3NoaVwgOwor5aS354uEID4gaXRla2lcIDsKK+aal+WQmyA+IGFua3VuXCA7CivlpJbnmq4gPiBnYWloaVwgOwor5pqX5ZCIID4gYW5nb3VcIDsKK+aal+WPtyA+IGFuZ291XCA7CivorbflsrggPiBnb2dhblwgOwor5LiA5LiWID4gaXNzZWlcIDsKK+eJqeaVhSA+IGJ1a2tvXCA7CivlpKnnkIYgPiB0ZW5yaVwgOwor5aSP55ygID4ga2FtaW5cIDsKK+e0oOmkiiA+IHNveW91XCA7Civlp5DlvqEgPiBhbmVnb1wgOwor5aSc55WqID4geW9iYW5cIDsKK+mcsueCuSA+IHJvdGVuXCA7CivmmanlpI8gPiBiYW5rYVwgOwor6Z+z5aSnID4gb25kYWlcIDsKK+mfs+WjsCA+IG9uc2VpXCA7CivmlofnkIYgPiBidW5yaVwgOwor5aSa55SoID4gdGF5b3VcIDsKK+WkmueUoyA+IHRhc2FuXCA7CivlpKfnjosgPiBkYWlvdVwgOwor57215YCSID4gYmF0b3VcIDsKK+e0oOmhlCA+IHN1Z2FvXCA7CivmlLnntYQgPiBrYWlzb1wgOwor57Sr6ZuyID4gc2hpdW5cIDsKK+e3qOiAhSA+IGhlbmphXCA7CivlpbPmqKkgPiBqb2tlblwgOwor6Kqk55SoID4gZ295b3VcIDsKK+WnieW+oSA+IGFuZWdvXCA7CivlpJbnlYwgPiBnZWthaVwgOwor5pOB6K23ID4geW91Z29cIDsKK+WkqeeLlyA+IHRlbmd1XCA7CivniLbmqKkgPiBmdWtlblwgOwor5aWl5q2vID4gb2t1YmFcIDsKK+aXqeacnyA+IHNvdWtpXCA7CivntKDpnaIgPiBzdW1lblwgOwor6K2w5a6aID4gZ2l0ZWlcIDsKK+WkqeeItiA+IHRlbnB1XCA7CivpnIDnlKggPiBqdXlvdVwgOwor57ir55uuID4gbnVpbWVcIDsKK+eEoeisgCA+IG11Ym91XCA7Civml4XmrKEgPiByeW9qaVwgOwor5pel5pysID4gbmlob25cIDsKK+eJiOacqCA+IGhhbmdpXCA7CivpnYjmsKMgPiByZWlraVwgOwor54Sh6KuWID4gbXVyb25cIDsKK+mdnualrSA+IGhpZ291XCA7Civloavoo5wgPiB0ZW5wb1wgOwor6Zuj56C0ID4gbmFucGFcIDsKK+aXpuaariA+IHRhbmJvXCA7CivlpInnlbAgPiBoZW4nJ2lcIDsKK+aXouacmyA+IGtpYm91XCA7CivpmZvooZsgPiBoZWllaVwgOwor57O46a2aID4gaXRveW9cIDsKK+mbqOedgCA+IGFtYWdpXCA7CivlqIHlnKcgPiBpYXRzdVwgOwor5aW95pyfID4ga291a2lcIDsKK+WnpuWppiA+IGthbnB1XCA7Civop6Poqp4gPiBrYWlnb1wgOwor5pW055CGID4gc2VpcmlcIDsKK+eEoeiogCA+IG11Z29uXCA7CivlpoLmmK8gPiBueW96ZVwgOwor54i+5p2lID4gamlyYWlcIDsKK+eJh+aZgiA+IGhlbmppXCA7Civntr/oirEgPiBtZW5rYVwgOwor6Zmw6JS9ID4gaW5wZWlcIDsKK+WkqeeCuiA+IHRlbicnaVwgOwor5aiB5ZqHID4gaWtha3VcIDsKK+eEoeimliA+IG11c2hpXCA7CivmlbDnkIYgPiBzdXVyaVwgOwor57WM6YGOID4ga2Vpa2FcIDsKK+eGseeggiA+IG5lc3NhXCA7CivmmJ/luqcgPiBzZWl6YVwgOwor5aSp54GrID4gdGVucGlcIDsKK+WfoOmgrSA+IGZ1dG91XCA7CivnjIrkuIsgPiBnZWlrYVwgOwor6ZmE6KiAID4gZnVnZW5cIDsKK+Wkp+eBqyA+IHRhaWthXCA7Civlp6blpKsgPiBrYW5wdVwgOwor6aCG5YyWID4ganVua2FcIDsKK+mYsuittyA+IGJvdWdvXCA7CivpnZ7mnJsgPiBoaWJvdVwgOwor6aCt5LiKID4genVqb3VcIDsKK+itsOWjqyA+IGdpc2hpXCA7CivmmYLlpb0gPiBqaWtvdVwgOwor6Z2S5qKFID4gYW91bWVcIDsKK+Whl+ijhSA+IHRvc291XCA7CivoqannopEgPiBzaGloaVwgOwor5pWF55+lID4ga29jaGlcIDsKK+maoOe3miA+IGluc2VuXCA7CivlpZHmqZ8gPiBrZWlraVwgOwor6KaW6YeOID4gc2hpeWFcIDsKK+itsOWgtCA+IGdpam91XCA7CivmkbjpgKAgPiBtb3pvdVwgOwor6Zmw6IyOID4gaW5rZWlcIDsKK+aWp+atoyA+IGZ1c2VpXCA7CivpnZLmnpwgPiBzZWlrYVwgOwor54eg54GrID4gb2tpYmlcIDsKK+mfs+WQjSA+IG9ubWVpXCA7CivmmI7luqYgPiBtZWlkb1wgOwor5aal5b2TID4gZGF0b3VcIDsKK+aZguWgsSA+IGppaG91XCA7CivntYzot68gPiBrZWlyb1wgOwor5pav5qeYID4ga2F5b3VcIDsKK+WhqeiUtSA+IGVuem91XCA7CivmmKDlsIQgPiBlaXNoYVwgOwor6aCS5L6hID4gaGFua2FcIDsKK+iruuaWhyA+IG9ubW9uXCA7CivloqjntbUgPiBzdW1pZVwgOwor57Sw6YOoID4gc2FpYnVcIDsKK+e3tOejqCA+IHJlbm1hXCA7CivpmaTojYkgPiBqb3NvdVwgOwor6K2P5auMID4ga2lnZW5cIDsKK+WlpeaXqCA+IG91c2hpXCA7Civln7rph5EgPiBraWtpblwgOwor57WM6LK7ID4ga2VpaGlcIDsKK+iomOiAhSA+IGtpc2hhXCA7CivorJ3mgakgPiBzaGFvblwgOwor5piG5biDID4ga29uYnVcIDsKK+mbsueFmSA+IHVuJydlblwgOwor5aSp5rKzID4gdGVuZ2FcIDsKK+irreaXqCA+IHl1c2hpXCA7Civnh5DngasgPiByaW5rYVwgOwor5aW95omTID4ga291ZGFcIDsKK+aXouaIkCA+IGtpc2VpXCA7CivpmLLooZsgPiBib3VlaVwgOwor5aSn5rKzID4gdGFpZ2FcIDsKK+mbt+eBqyA+IHJhaWthXCA7Civnt4fntKAgPiBzaGlzb1wgOwor57ay576FID4gbW91cmFcIDsKK+WkqeawlyA+IHRlbmtpXCA7CivpoIbkvY0gPiBqdW4nJ2lcIDsKK+iok+e+qSA+IGt1bmdpXCA7CivmmKjlpJwgPiB5dXViZVwgOwor5aSn5rCXID4gdGFpa2lcIDsKK+eEoeiTiyA+IG11Z2FpXCA7Civoqp7mupAgPiBnb2dlblwgOwor6KaH6YGTID4gaGFkb3VcIDsKK+aZruWBjyA+IGZ1aGVuXCA7CivmlaLngrogPiBrYW4nJ2lcIDsKK+mZsOe/syA+IGluJydlaVwgOwor5peX5omLID4ga2lzaHVcIDsKK+ilv+mDqCA+IHNlaWJ1XCA7Civpm4fnlKggPiBrb3lvdVwgOwor6Z+z5YOPID4gb256b3VcIDsKK+Wmu+WlsyA+IHNhaWpvXCA7Civmk43oiLUgPiBzb3VkYVwgOwor5aSn5q2MID4gb291dGFcIDsKK+ism+W6pyA+IGtvdXphXCA7CivmlofmroogPiBtb25qdVwgOwor5pif5aScID4gc2VpeWFcIDsKK+eEoeiPjCA+IG11a2luXCA7CivmlofmraYgPiBidW5idVwgOwor6Z2e5omNID4gaGlzYWlcIDsKK+Wlh+abuCA+IGtpc2hvXCA7CivlpKvmqKkgPiBmdWtlblwgOwor5aSp5qmfID4gdGVua2lcIDsKK+mciuawlyA+IHJlaWtpXCA7CivmmI7lqpogPiBtZWliaVwgOwor54Sh6Iy2ID4gbXVjaGFcIDsKK+mfs+S+vyA+IG9uYmluXCA7CivniaLlsYsgPiByb3V5YVwgOwor5aWH5pm6ID4ga2ljaGlcIDsKK+WkmuavmyA+IHRhbW91XCA7CivlqIHkv6EgPiBpc2hpblwgOwor6Kqe5rOVID4gZ29ob3VcIDsKK+Wkp+aouSA+IHRhaWp1XCA7CivlpJbmsJcgPiBnYWlraVwgOwor54Sh6Iq4ID4gbXVnZWlcIDsKK+Wkp+anmCA+IG9veW91XCA7CivlpaXmiYsgPiBva3V0ZVwgOwor57ax57SAID4ga291a2lcIDsKK+ijvem6uyA+IHNlaW1hXCA7Civnt4/npL4gPiBzb3VqYVwgOwor6Zu75rOiID4gZGVucGFcIDsKK+aZguWNiiA+IGppaGFuXCA7Civorablj6UgPiBrZWlrdVwgOwor6Z2e5oOFID4gaGlqb3VcIDsKK+iri+aahyA+IHNlaWthXCA7CivmmYLljJYgPiBzaGlrZVwgOwor5aWz5oCnID4gam9zZWlcIDsKK+mbqOa7tCA+IHV0ZWtpXCA7CivlpYfmlbAgPiBraXN1dVwgOwor6ZuE54yrID4gb25la29cIDsKK+aZguWLoiA+IGppc2VpXCA7CivmlqfmlqQgPiBmdWtpblwgOwor6Zuy5rW3ID4gdW5rYWlcIDsKK+mbkeeFriA+IHpvdW5pXCA7CivmmYLlirkgPiBqaWtvdVwgOwor5pif5ZuzID4gc2VpenVcIDsKK+eItuaApyA+IGZ1c2VpXCA7CivopoHot68gPiB5b3Vyb1wgOwor5aWz5b6hID4gbnlvZ29cIDsKK+mbu+awlyA+IGRlbmtpXCA7CivmlqHml4sgPiBhc3NlblwgOwor6Zuy5rOlID4gdW5kZWlcIDsKK+itpuWLmSA+IGtlaW11XCA7CivmmYLliLYgPiBqaXNlaVwgOwor6ZuE54mbID4gb3VzaGlcIDsKK+aZguWIhiA+IGppYnVuXCA7CivnhKHog70gPiBtdW5vdVwgOwor5aSa5qeYID4gdGF5b3VcIDsKK+eKrOWEkiA+IGtlbmp1XCA7Civngavpm6MgPiBrYW5hblwgOwor5pWw5qyhID4gc3V1amlcIDsKK+WmluWppiA+IHlvdWZ1XCA7CivmlbXmqZ8gPiB0ZWtraVwgOwor6Zuy5rC0ID4gdW5zdWlcIDsKK+WmluWphiA+IHlvdWJhXCA7Civml5fluZ8gPiBraXNoaVwgOwor6Z2S5oGvID4gYW9pa2lcIDsKK+mWkembhSA+IGthbmdhXCA7CivlpKfmnp0gPiBvb2VkYVwgOwor5aOy5rerID4gYmFpaW5cIDsKK+mcp+aVoyA+IG11c2FuXCA7CivlpbPluJ0gPiBqb3RlaVwgOwor6Zuo5rOoID4gdWNodXVcIDsKK+aUvueBqyA+IGhvdWthXCA7CivlpYnmjIEgPiBob3VqaVwgOwor5aWz5belID4gam9rb3VcIDsKK+mbu+apnyA+IGRlbmtpXCA7Civnt5rnlLsgPiBzZW5nYVwgOwor6Z2e5bi4ID4gaGlqb3VcIDsKK+WmluWlsyA+IHlvdWpvXCA7CivmlrDmiYsgPiBhcmF0ZVwgOwor6Z2Z5bqnID4gc2VpemFcIDsKK+eEoee9qiA+IG11emFpXCA7CivmlaPmrakgPiBzYW5wb1wgOwor6Zuo5rC3ID4gdWh5b3VcIDsKK+aWh+abuCA+IG1vbmpvXCA7CivplovpmaIgPiBrYWlpblwgOwor5aaK5ammID4gbmlucHVcIDsKK+aZguWAmSA+IGppa291XCA7CivplonpmaIgPiBoZWlpblwgOwor5pei5a6aID4ga2l0ZWlcIDsKK+itpuWCmSA+IGtlaWJpXCA7CivlpYfmiY0gPiBraXNhaVwgOwor5aWH5omLID4ga2lzaHVcIDsKK+WkqeaXpSA+IHRlbnBpXCA7CivlpKfmmKAgPiBkYWllaVwgOwor5aSc5p2lID4geWFyYWlcIDsKK+WlveWunCA+IGtvdWdpXCA7CivntJvorbAgPiBmdW5naVwgOwor6Zmk566XID4gam96YW5cIDsKK+aXouWtmCA+IGtpc29uXCA7CivorbDkvJogPiBnaWthaVwgOwor6Zui5rC0ID4gcmlzdWlcIDsKK+iok+ekuiA+IGt1bmppXCA7CivoqabmvJQgPiBzaGllblwgOwor5pKr6IKyID4gYnVpa3VcIDsKK+mYsuiFkCA+IGJvdWZ1XCA7Civoqp7moLkgPiBnb2tvblwgOwor5pKw6ICFID4gc2VuamFcIDsKK+eGseazoiA+IG5lcHBhXCA7CivlpJrmnJsgPiB0YWJvdVwgOwor6Zm256OBID4gdG91amlcIDsKK+Wls+WwiiA+IGpvc29uXCA7CivlpYfmhYsgPiBraXRhaVwgOwor5pmC5LujID4gamlkYWlcIDsKK+itsuS4jiA+IGpvdXlvXCA7CivnhKHnt5ogPiBtdXNlblwgOwor54mi5Zu6ID4gcm91a29cIDsKK+WknOaZryA+IHlha2VpXCA7CivmkZjoqJggPiB0ZWtraVwgOwor5pei5amaID4ga2lrb25cIDsKK+aZguS6uiA+IGppamluXCA7Civpm4Tmu50gPiBvZGFraVwgOwor54mZ5Z+OID4gZ2Fqb3VcIDsKK+Wlh+aDsyA+IGtpc291XCA7Civlo6vmsJcgPiBzaGlraVwgOwor6Kmx5rOVID4gd2Fob3VcIDsKK+eCiei+uiA+IHJvaGVuXCA7CivlpbPlrZAgPiBqb3NoaVwgOwor54Wp55GjID4gaGFuc2FcIDsKK+e3j+eQhiA+IHNvdXJpXCA7CivmmYLkuJYgPiBqaXNlaVwgOwor54i25a2QID4gZnVzaGlcIDsKK+eEoeezliA+IG11dG91XCA7Civpmb3nmq4gPiB5b3VoaVwgOwor5pa95belID4gc2Vrb3VcIDsKK+Wkp+aQjSA+IG9vem9uXCA7Civop6PntYQgPiBrYWlzb1wgOwor5aWH5oCqID4ga2lrYWlcIDsKK+iruOWutiA+IHNob2thXCA7CivnibnljJYgPiB0b2trYVwgOwor6Zyy5oKqID4gcm9ha3VcIDsKK+eKgOWIqSA+IHNhaXJpXCA7CivlpJrmlbAgPiB0YXN1dVwgOwor5aSn5o+aID4gb295b3VcIDsKK+eEoeeyiyA+IGJ1c3VpXCA7CivntrLnm64gPiBhbWltZVwgOwor5aSp5o6IID4gdGVuanVcIDsKK+aYoOWGmSA+IGVpc2hhXCA7CivlpJXml6UgPiB5dXVoaVwgOwor5aWz5am/ID4gam9zZWlcIDsKK+WlveWlhyA+IGtvdWtpXCA7CivlpJbmlrkgPiBzb3Bwb1wgOwor5pS/5rK7ID4gc2VpamlcIDsKK+eyl+mkkCA+IHNvc2FuXCA7Civnspfpo68gPiBzb2hhblwgOwor6ZaJ6Y6WID4gaGVpc2FcIDsKK+e0oOihjCA+IHNva291XCA7CivntbnntbUgPiBraW51ZVwgOwor6K2c5LujID4gZnVkYWlcIDsKK+iotOeKtiA+IHNvam91XCA7CivlpYflvaIgPiBraWtlaVwgOwor5aGp56iOID4gZW56ZWlcIDsKK+aYoOWDjyA+IGVpem91XCA7CivntbXntbkgPiBlZ2ludVwgOwor6ZuR5q2MID4gem91a2FcIDsKK+maoOeEtiA+IGluemVuXCA7CivlpYflvIEgPiBraWJlblwgOwor6Kqe5pWwID4gZ29zdXVcIDsKK+aXouWgsSA+IGtpaG91XCA7Civpmb3nlLsgPiB5b3VnYVwgOwor54Gr6YWSID4ga2FzaHVcIDsKK+e0q+iYhyA+IHNoaXNvXCA7Civoo73pnbQgPiBzZWlrYVwgOwor6Zu25pmCID4gcmVpamlcIDsKK+aYoOWAqyA+IGVpcmluXCA7CivoqanmrYwgPiBzaGlrYVwgOwor57K+6YutID4gc2VpZWlcIDsKK+Wls+WjsCA+IGpvc2VpXCA7CivmlL7mrYwgPiBob3VrYVwgOwor6ZmE566LID4gZnVzZW5cIDsKK+ezu+itnCA+IGtlaWZ1XCA7Civpm7Lmma8gPiB1bmtlaVwgOwor6KqJ5pybID4geW9ib3VcIDsKK+eJiOWbsyA+IGhhbnRvXCA7CivpnLLlupcgPiByb3RlblwgOwor5aWH5beMID4ga2lnYW5cIDsKK+WnieS4iiA+IGFuZXVlXCA7CivmlpzlvbEgPiBzaGFlaVwgOwor54Sh56i9ID4gbXVrZWlcIDsKK+ilsuihoyA+IHNodXVpXCA7CivplpPpgaAgPiBtYWRvb1wgOwor6Zyy5bidID4gcm90ZWlcIDsKK+mbhOatpiA+IHl1dWJ1XCA7CivnhKHnqI4gPiBtdXplaVwgOwor5aSp5oSPID4gdGVuJydpXCA7CivoqaDmrY4gPiBlaXRhblwgOwor6Z2Z5aScID4gc2VpeWFcIDsKK+ism+WSjCA+IGtvdXdhXCA7CivlpKfmhJogPiB0YWlndVwgOwor54Sh56eBID4gbXVzaGlcIDsKK+eFieeTpiA+IHJlbmdhXCA7Civpm7LmlaMgPiB1bnNhblwgOwor6Zui5p2RID4gcmlzb25cIDsKK+WknOaIpiA+IHlhc2VuXCA7CivntIDopoEgPiBraXlvdVwgOwor54Wk54WZID4gYmFpZW5cIDsKK+e1teethiA+IGVmdWRlXCA7CivlpJrmiY0gPiB0YXNhaVwgOwor5paH5oSPID4gYnVuJydpXCA7CivopaTopLggPiByYW5ydVwgOwor5aSn5oKfID4gZGFpZ29cIDsKK+eJueS+oSA+IHRva2thXCA7CivlpYflsqkgPiBraWdhblwgOwor54Sh56S8ID4gYnVyZWlcIDsKK+e5u+WtkCA+IHNodXN1XCA7CivplovpgYsgPiBrYWl1blwgOwor5aSn5oGpID4gZGFpb25cIDsKK+ipsuahiCA+IGdhaWFuXCA7CivlpKLmg7MgPiBtdXNvdVwgOwor6KWm6KKiID4ganViYW5cIDsKK+mbo+aYkyA+IG5hbicnaVwgOwor5peo5ZGzID4gdW1hbWlcIDsKK+ipseafhCA+IHdhaGVpXCA7CivlpYnlrokgPiBob3VhblwgOwor5aCV6IOOID4gZGF0YWlcIDsKK+e0gOihjCA+IGtpa291XCA7CivmlL7mo4QgPiBob3VraVwgOwor5aSa5oSfID4gdGFrYW5cIDsKK+aSreeoriA+IGhhc2h1XCA7CivoqrLlvbkgPiBrYWVraVwgOwor6Zmi55SfID4gaW5zZWlcIDsKK+ijnOmhjCA+IGhvZGFpXCA7CivlpJrmg4UgPiB0YWpvdVwgOwor54Sh55+lID4gbXVjaGlcIDsKK+mbouaVoyA+IHJpc2FuXCA7CivoqabmoYggPiBzaGlhblwgOwor5aSp5bqcID4gdGVucHVcIDsKK+WkmuaBqCA+IHRha29uXCA7CivlpKfluqYgPiB0YWlkb1wgOwor54mp5L6hID4gYnVra2FcIDsKK+iqnuaEnyA+IGdva2FuXCA7CivmlbXmhI8gPiB0ZWtpaVwgOwor5aW95Y+kID4ga291a29cIDsKK+aWh+W6qyA+IGJ1bmtvXCA7CivlpJrlv5kgPiB0YWJvdVwgOwor6KaL6IieID4gbWltYWlcIDsKK+eFlueCiSA+IGRhbnJvXCA7CivloJXnvaogPiBkYXphaVwgOwor5aGp55SwID4gZW5kZW5cIDsKK+aVheaZuiA+IGtvY2hpXCA7CivnhKHnm4ogPiBtdWVraVwgOwor6Zm954KOID4geW91ZW5cIDsKK+Wkp+W3riA+IHRhaXNhXCA7CivnuYrluqYgPiBzZW5kb1wgOwor5aSn5belID4gZGFpa3VcIDsKK+irt+WWqSA+IGZ1dXl1XCA7CivlpJrlvakgPiB0YXNhaVwgOwor6ZaJ6LevID4gaGVpcm9cIDsKK+WkmuW9oiA+IHRha2VpXCA7CivmlazmhZUgPiBrZWlib1wgOwor5aCG6IKlID4gdGFpaGlcIDsKK+aXpeWKoCA+IG5pa2thXCA7Civmj7Tou40gPiBlbmd1blwgOwor57KX6Yu8ID4gc29rb3VcIDsKK+aVrOaEmyA+IGtlaWFpXCA7CivlpJrlvIEgPiB0YWJlblwgOwor5aOw5o+0ID4gc2VpZW5cIDsKK+eGqOaWlyA+IG5vc2hpXCA7CivpnZ7lkb0gPiBoaW1laVwgOwor6KyA5Y+bID4gbXVob25cIDsKK+Wls+WPsiA+IGpvc2hpXCA7CivorIDlj40gPiBtdWhvblwgOwor57KX6YqFID4gc29kb3VcIDsKK+ikkui+niA+IGhvdWppXCA7CivmkanogJcgPiBtYW1vdVwgOwor57KX6YmxID4gc29rb3VcIDsKK+eItuWQmyA+IGZ1a3VuXCA7CivmlL7mmKAgPiBob3VlaVwgOwor5aSW5bu2ID4gZ2FpZW5cIDsKK+WkmuW5uCA+IHRha291XCA7CivlpJrlubQgPiB0YW5lblwgOwor57SF6JOuID4gZ3VyZW5cIDsKK+mbgeacqCA+IGdhbmdpXCA7CivlpYflo7AgPiBraXNlaVwgOwor6Kqe5b2iID4gZ29rZWlcIDsKK+WlhOWlhCA+IGVuJydlblwgOwor6KOP6Z2iID4gcmltZW5cIDsKK+aXouWIiiA+IGtpa2FuXCA7Civmlrnlm7MgPiBob3V6dVwgOwor6Zuo5oi4ID4gYW1hZG9cIDsKK+mcsuWkqSA+IHJvdGVuXCA7Civoo5zplpMgPiBob2thblwgOwor6Kqe5byKID4gZ29oZWlcIDsKK+eJouS5jiA+IHJvdWtvXCA7CivnhKHnlKggPiBtdXlvdVwgOwor54Sh55SjID4gbXVzYW5cIDsKK+eJoeS4uSA+IGJvdGFuXCA7CivlpKflsL4gPiB0YWliaVwgOwor5aSp5a+/ID4gdGVuanVcIDsKK+iqnuW5uSA+IGdva2FuXCA7CivnspfphZIgPiBzb3NodVwgOwor5o6n6ZmkID4ga291am9cIDsKK+WjsuaJiyA+IHVyaXRlXCA7CivlopfmtL4gPiB6b3VoYVwgOwor6KqY5byVID4geXV1aW5cIDsKK+Wkp+WutiA+IHRhaWtlXCA7Civpm4XmlocgPiBnYWJ1blwgOwor6KaH6ICFID4gaGFzaGFcIDsKK+aWieWutiA+IHNlaWthXCA7CivpnLLloLQgPiByb2pvdVwgOwor5aSn5a6JID4gZGFpYW5cIDsKK+aVsOW6piA+IHN1dWRvXCA7CivlpKflrZcgPiBvb2F6YVwgOwor6ZaR6KmxID4ga2Fud2FcIDsKK+WcsOmgrSA+IGppdG91XCA7Civpmbjmua8gPiBva2F5dVwgOwor5pat5Zu6ID4gZGFua29cIDsKK+mbsuW9sSA+IHVuJydlaVwgOwor5paH5a2XID4gbW9uamlcIDsKK+eHleW3oyA+IGVuc291XCA7CivlpaXljbAgPiBva3VpblwgOwor5aSr5ammID4gbWVvdG9cIDsKK+WkmuWxpCA+IHRhc291XCA7CivoqLTmqKkgPiBzb2tlblwgOwor6Zu25bqmID4gcmVpZG9cIDsKK+eCueiAhSA+IHRlbmphXCA7CivntbXnlLsgPiBrYWlnYVwgOwor6Zqg5qOyID4gaW5zZWlcIDsKK+imgee+qSA+IHlvdWdpXCA7CivpnZ7lh6EgPiBoaWJvblwgOwor6Kiq5qynID4gaG91b3VcIDsKK+WcsOmdoiA+IGppbWVuXCA7Civlpb3lgIsgPiBrb3Vrb1wgOwor5aWz5YSqID4gam95dXVcIDsKK+WkqeWogSA+IHRlbicnaVwgOwor5aSr5aa7ID4gZnVzYWlcIDsKK+iqpOWwhCA+IGdvc2hhXCA7CivniLblhYQgPiBmdWtlaVwgOwor5Zyw6Zu3ID4gamlyYWlcIDsKK+iomOazlSA+IGtpaG91XCA7CivnhZbmsJcgPiBkYW5raVwgOwor6Zqg5qCWID4gaW5zZWlcIDsKK+WkmuWtlCA+IHRha291XCA7CivlpJblrq4gPiBnZWt1dVwgOwor54WZ5q27ID4gZW5zaGlcIDsKK+WkquWkqyA+IHRheXV1XCA7Civpmb3msJcgPiB5b3VraVwgOwor5Z+657eaID4ga2lzZW5cIDsKK+Wkp+WlpSA+IG9vb2t1XCA7CivmjpLpmaQgPiBoYWlqb1wgOwor5aSW5a2XID4gZ2FpamlcIDsKK+aVo+W4gyA+IHNhbnB1XCA7CivlpYfllY8gPiBraW1vblwgOwor5aaC5LiKID4gam9qb3VcIDsKK+WlveS6iyA+IGtvdXp1XCA7CivlpKflo7AgPiBvb2dvZVwgOwor6Kqy5aSWID4ga2FnYWlcIDsKK+Wkt+WbvSA+IGlrb2t1XCA7CivmlK/mj7QgPiBzaGllblwgOwor5pOs5q+bID4gZ2ltb3VcIDsKK+e0oOe1uSA+IHNva2VuXCA7CivlpZHljbAgPiBrZWlpblwgOwor6Zuj5bqmID4gbmFuZG9cIDsKK+imj+evhCA+IGtpaGFuXCA7Civmk6zmrbsgPiBnaXNoaVwgOwor5pWw5a2XID4gc3V1amlcIDsKK+WkmuWmuyA+IHRhc2FpXCA7Civmlo7lnqMgPiBpZ2FraVwgOwor6KaB57SgID4geW91c29cIDsKK+aXl+S6rSA+IGtpdGVpXCA7CivmlK/mjIEgPiBzaGlqaVwgOwor6ZuF5oeQID4gZ2FrYWlcIDsKK+aPkOi1tyA+IHRlaWtpXCA7Civpm7LlsYUgPiBrdW1vaVwgOwor6Zyy5ZG9ID4gcm9tZWlcIDsKK+eEoeeBryA+IG11dG91XCA7CivpmbDmr5sgPiBpbm1vdVwgOwor5aSJ5a2XID4gaGVuamlcIDsKK+ilv+e0gCA+IHNlaWtpXCA7CivnuZTlnLAgPiBvcmlqaVwgOwor6ZyK5aSiID4gcmVpbXVcIDsKK+mcsuWRiCA+IHJvdGVpXCA7CivlpJrlpKcgPiB0YWRhaVwgOwor5o6D6ZmkID4gc291amlcIDsKK+Whl+eCrSA+IHRvdGFuXCA7CivmjZXpr6ggPiBob2dlaVwgOwor6Z2e5Lq6ID4gaGluaW5cIDsKK+WkmuWjsiA+IHRhYmFpXCA7CivpnLLlj7AgPiByb2RhaVwgOwor57mB5aSaID4gaGFudGFcIDsKK+mZpOazlSA+IGpvaG91XCA7CivnhJzngokgPiBrb25yb1wgOwor5pa55YaGID4gaG91ZW5cIDsKK+iruOS6iyA+IHNob2ppXCA7CivmlLnmgp8gPiBrYWlnb1wgOwor57aZ5rOzID4ga2VpZWlcIDsKK+WlieWKoCA+IGhvdWdhXCA7Civopo/nqIsgPiBraXRlaVwgOwor6Zui5bO2ID4gcml0b3VcIDsKK+Wlh+WKuSA+IGtpa291XCA7Civoqa3lvIEgPiBraWJlblwgOwor6ZqV5pifID4gaW5zZWlcIDsKK+Wkp+WZqCA+IHRhaWtpXCA7Civpm6LlsrggPiByaWdhblwgOwor54Kt57SgID4gdGFuc29cIDsKK+iqpOWgsSA+IGdvaG91XCA7CivlpJbloLQgPiBnYWliYVwgOwor5pWw5aWHID4gc3V1a2lcIDsKK+mbouWxsSA+IHJpemFuXCA7CivlpKflmJggPiBvb3Vzb1wgOwor57OW6I+TID4gdG91a2FcIDsKK+aVsOWkmiA+IHN1dXRhXCA7Civmj5DorbAgPiB0ZWlnaVwgOwor6ZqP5pmCID4genVpamlcIDsKK+e1jOeUsSA+IGtlaXl1XCA7CivngavokawgPiBrYXNvdVwgOwor6ZyK5ZySID4gcmVpZW5cIDsKK+aUv+W6nCA+IHNlaWZ1XCA7CivlpYflhbUgPiBraWhlaVwgOwor6Zi/5ryVID4gYWtvZ2lcIDsKK+mYsueCjiA+IGJvdWVuXCA7CivmlpfljZcgPiB0b25hblwgOwor5aOy5a2QID4gdXJpa29cIDsKK+mbu+WgtCA+IGRlbmJhXCA7CivlpJblm6AgPiBnYWlpblwgOwor6Ziy54GrID4gYm91a2FcIDsKK+aPkOiotCA+IHRlaXNvXCA7CivpnLLlhYkgPiByb2tvdVwgOwor5aSr5ZCbID4gZnVrdW5cIDsKK+ikh+ihoyA+IGZ1a3VpXCA7CivntYznkIYgPiBrZWlyaVwgOwor5aSn5ZG8ID4gdGFpa29cIDsKK+Wkp+WRsyA+IG9vYWppXCA7Civmlr3kuLsgPiBzZXNodVwgOwor6Zuy5aOMID4gdW5qb3VcIDsKK+Wlh+WBtiA+IGtpZ3V1XCA7CivlpKrlj6QgPiB0YWlrb1wgOwor54Sh5rOVID4gbXVob3VcIDsKK+aVheWxsSA+IGtvemFuXCA7Civmv4PpnKcgPiBub3VtdVwgOwor6Zui5amaID4gcmlrb25cIDsKK+Wkp+WPsCA+IG9vZGFpXCA7CivlnKjph44gPiB6YWl5YVwgOwor54K556S6ID4gdGVuamlcIDsKK+aVmeWnlCA+IGt5b3VpXCA7CivoqoflpKcgPiBrb2RhaVwgOwor54Gr6ImyID4gaGlpcm9cIDsKK+eEtuanmCA+IHNheW91XCA7CivooaPprZogPiBzaGltaVwgOwor6KqY5ZugID4geXV1aW5cIDsKK+eyl+ijvSA+IHNvc2VpXCA7Civmloflj6UgPiBtb25rdVwgOwor54Sh5rC0ID4gbXVzdWlcIDsKK+eDveeBqyA+IGhvdWthXCA7Civnsr7oj68gPiBzZWlrYVwgOwor5aWH5L2TID4ga2l0YWlcIDsKK+eEoeavmyA+IG11bW91XCA7Civnua3kvqEgPiBrZW5rYVwgOwor6Zu75ZmoID4gZGVua2lcIDsKK+Wbs+mdoiA+IHp1bWVuXCA7Civnt6nlvpAgPiBrYW5qb1wgOwor5pS+5bGBID4gaG91aGlcIDsKK+WjsuWlsyA+IGJhaXRhXCA7CivlpKnliqkgPiB0ZW5qb1wgOwor57Gz6LKoID4gYmVpa2FcIDsKK+WbuumZiyA+IGtvcm91XCA7CivnhKHmrosgPiBtdXphblwgOwor6ZaL6IqxID4ga2Fpa2FcIDsKK+eEoeatuyA+IG11c2hpXCA7CivmlofljJYgPiBidW5rYVwgOwor5aWH5Lq6ID4ga2lqaW5cIDsKK+aWreS5jiA+IGRhbmtvXCA7Civlopfmj7QgPiB6b3VlblwgOwor5aSc5Y+JID4geWFzaGFcIDsKK+WfuuebpCA+IGtpYmFuXCA7CivlpKrliIAgPiB0YWNoaVwgOwor6Zmw5pm0ID4gaW5zZWlcIDsKK+Wjq+WlsyA+IHNoaWpvXCA7CivlpKfliKQgPiBvb2JhblwgOwor57Sg55u0ID4gc3VuYW9cIDsKK+imqueIuiA+IG95YWppXCA7CivopqrniLYgPiBveWFqaVwgOwor6Kqy5Yi2ID4ga2FzZWlcIDsKK+mcgOWTgSA+IGp1aGluXCA7Civoo5zorJsgPiBob2tvdVwgOwor6Zuj5aC0ID4gbmFuYmFcIDsKK+e2reaWsCA+IGlzaGluXCA7Civlo7LloLQgPiB1cmliYVwgOwor5aS35L+XID4gaXpva3VcIDsKK+WbnumhpyA+IGthaWtvXCA7CivlpJzli6QgPiB5YWtpblwgOwor5aSn5YaGID4gZGFpZW5cIDsKK+ioiOaZgiA+IGtlaWppXCA7CivloanmooUgPiBhbmJhaVwgOwor6Zmw5paHID4gaW5idW5cIDsKK+mZouacrCA+IGlucG9uXCA7CivlpJrli6IgPiB0YXplaVwgOwor6ZqU5oSPID4ga2FrdWlcIDsKK+Wbm+mhpyA+IHNoaWtvXCA7CivplpPogIUgPiBrYW5qYVwgOwor5aSn5YSSID4gZGFpanVcIDsKK+iqnuWOnyA+IGdvZ2VuXCA7CivlpKflhIAgPiB0YWlnaVwgOwor5aSc5YmNID4geWF6ZW5cIDsKK+ijnOiogiA+IGhvdGVpXCA7CivnsbPoqp4gPiBiZWlnb1wgOwor6Zi75q2iID4gc29zaGlcIDsKK+WkluWLmSA+IGdhaW11XCA7Civpm5HlpJogPiB6YXR0YVwgOwor5aSc5YiGID4geWFidW5cIDsKK+aVl+WboCA+IGhhaWluXCA7CivnsbPoqbEgPiBiZWl3YVwgOwor5Z2Q6KaWID4gemFzaGlcIDsKK+aWieWCmSA+IHNlaWJpXCA7CivlpJrliIYgPiB0YWJ1blwgOwor5aKT5omAID4gYm9zaG9cIDsKK+iqnuWLoiA+IGdvc2VpXCA7CivoqqTliKQgPiBnb2hhblwgOwor5o6h6K2cID4gc2FpZnVcIDsKK+Wjh+WutiA+IGRhbmthXCA7Civlo67lm7MgPiBzb3V0b1wgOwor5Zuz6ZGRID4genVrYW5cIDsKK+WknOWFiSA+IHlha291XCA7CivngrnnlLsgPiB0ZW5nYVwgOwor6Zmk5pWwID4gam9zdXVcIDsKK+mbu+WMliA+IGRlbmthXCA7CivoqqTlhpkgPiBnb3NoYVwgOwor5o6n6Ki0ID4ga291c29cIDsKK+WkmuWFgyA+IHRhZ2VuXCA7CivlpKnkvY0gPiB0ZW4nJ2lcIDsKK+mbsuWPsCA+IHVuZGFpXCA7Civopb/nk5wgPiBzdWlrYVwgOwor6KqN5ZCmID4gbmlucGlcIDsKK+eEoeaguSA+IG11a29uXCA7CivlpInljJYgPiBoZW5nZVwgOwor6Zmi5pS/ID4gaW5zZWlcIDsKK+Wkp+S9kCA+IHRhaXNhXCA7Civoqo3lj68gPiBuaW5rYVwgOwor5aSr5Lq6ID4gZnVqaW5cIDsKK+eBq+e3miA+IGthc2VuXCA7CivntrLmiLggPiBhbWlkb1wgOwor57K+576pID4gc2VpZ2lcIDsKK+iqsOS9lSA+IHN1aWthXCA7CivoqJjmhrYgPiBraW9rdVwgOwor6KO96I+TID4gc2Vpa2FcIDsKK+Wkp+S6iyA+IGRhaWppXCA7Civmv6vosrsgPiByYW5waVwgOwor5aSp5LiLID4gdGVua2FcIDsKK+aWh+S6iyA+IGJ1bmppXCA7Civmk6zmhYsgPiBnaXRhaVwgOwor6Zqg5bGFID4gaW5reW9cIDsKK+aVtOWCmSA+IHNlaWJpXCA7CivntKvnhZkgPiBzaGllblwgOwor5pWs5YW3ID4ga2VpZ3VcIDsKK+eyl+iMtiA+IHNvY2hhXCA7CivlpJzkvJogPiB5YWthaVwgOwor54Sh5pm6ID4gbXVjaGlcIDsKK+mao+WutiA+IHJpbmthXCA7CivntJTnkIYgPiBqdW5yaVwgOwor6Zui5ZCIID4gcmlnb3VcIDsKK+mbo+WPpSA+IG5hbmt1XCA7Civns4rnsr4gPiBrb3NlaVwgOwor57ee5a2QID4gZG9uc3VcIDsKK+mbouWPjSA+IHJpaGFuXCA7CivntKDniYcgPiBzb2hlblwgOwor54WZ5by+ID4gZW5kYW5cIDsKK+iqpOS8nSA+IGdvZGVuXCA7Civpm6rliqAgPiBzZWtrYVwgOwor57O455uuID4gaXRvbWVcIDsKK+e1teafhCA+IGVnYXJhXCA7CivoqJjlv7UgPiBraW5lblwgOwor6KSS576OID4gaG91YmlcIDsKK+mbhOWbsyA+IHl1dXRvXCA7Civngb3npo0gPiBzYWlrYVwgOwor54Sh5patID4gbXVkYW5cIDsKK+eDiOeBqyA+IHJla2thXCA7CivmlbDlgIsgPiBzdXVrb1wgOwor6Zmw5oOoID4gaW5zYW5cIDsKK+eEoeaVsCA+IG11c3V1XCA7CivntbXmnK0gPiBlZnVkYVwgOwor5aSW5LqLID4gZ2FpamlcIDsKK+aVsOS+oSA+IHN1dWthXCA7Civntr/luIMgPiBtZW5wdVwgOwor6KCn6a2aID4gc2hpbWlcIDsKK+WfuueCuSA+IGtpdGVuXCA7CivpmbDmgKcgPiBpbnNlaVwgOwor6Zu75L2NID4gZGVuJydpXCA7CivoqaDlmIYgPiBlaXRhblwgOwor57K+57KXID4gc2Vpc29cIDsKK+mbqOWFtyA+IGFtYWd1XCA7CivlpInkvY0gPiBoZW4nJ2lcIDsKK+mZsOW9sSA+IGluJydlaVwgOwor6KaP5rqWID4ga2lqdW5cIDsKK+e3j+WrgSA+IHNvdWthXCA7CivngrnngasgPiB0ZW5rYVwgOwor6Zui5YWaID4gcml0b3VcIDsKK+aOqeiUvSA+IGVucGVpXCA7CivlpInkuosgPiBoZW5qaVwgOwor6Kmp5Y+lID4gc2hpa3VcIDsKK+mbo+WEgCA+IG5hbmdpXCA7CivntYPmrYwgPiBnZW5rYVwgOwor6Kmm5ZCIID4gc2hpYWlcIDsKK+maoOWjqyA+IGluc2hpXCA7Civmjqnok4sgPiBlbmdhaVwgOwor5aKz5aKTID4gZnVuYm9cIDsKK+e4geWPsCA+IGVuZGFpXCA7Civpm7LkupUgPiBrdW1vaVwgOwor6KGw6YGLID4gc3VpdW5cIDsKK+Wfuua6liA+IGtpanVuXCA7Civpm7bkuIsgPiByZWlrYVwgOwor6ZuF5Y+3ID4gZ2Fnb3VcIDsKK+Wfuua6kCA+IGtpZ2VuXCA7CivoqaDlkJ8gPiBlaWdpblwgOwor5Zyf6KO9ID4gZG9zZWlcIDsKK+ipoOWPsiA+IGVpc2hpXCA7CivnhZnlrrMgPiBlbmdhaVwgOwor5pS/5YuZID4gc2VpbXVcIDsKK+WgtOacqyA+IGJhc3VlXCA7Civlm57pgb8gPiBrYWloaVwgOwor6Zuy5LiKID4gdW5qb3VcIDsKK+aUueWNsCA+IGthaWluXCA7Civntr7lrZAgPiByaW56dVwgOwor54Sh5omNID4gbXVzYWlcIDsKK+eCrOeBqyA+IGt5b2thXCA7CivplovnpZYgPiBrYWlzb1wgOwor54Gr56CyID4ga2Fob3VcIDsKK+mWi+ekuiA+IGthaWppXCA7Civlo7LkvqEgPiBiYWlrYVwgOwor57Gz6IuxID4gYmVpZWlcIDsKK+eFqeWkmiA+IGhhbnRhXCA7Civlo7DkvqEgPiBzZWlrYVwgOwor6Zqg5Z2KID4gb25ib3VcIDsKK+e2uOWtkCA+IHJpbnp1XCA7Civpmrvlj6UgPiBzZWtrdVwgOwor54Sh5oWuID4gbXVyeW9cIDsKK+mbquS4iyA+IHNla2thXCA7CivloIDmsZ8gPiBob3JpZVwgOwor6Zui5Lu7ID4gcmluaW5cIDsKK+e1kOaenCA+IGtla2thXCA7Civpm6jkuK0gPiB1Y2h1dVwgOwor6KGw6LqvID4gc3Vpa3VcIDsKK+e0heeCjiA+IGtvdWVuXCA7CivntrTlrZcgPiB0ZWlqaVwgOwor6Zuj5LqLID4gbmFuamlcIDsKK+WcsOiUtSA+IGppem91XCA7CivnhKHmg7MgPiBtdXNvdVwgOwor54Sh5oOoID4gbXV6YW5cIDsKK+e0r+asoSA+IHJ1aWppXCA7CivnhKHmg4UgPiBtdWpvdVwgOwor57ep5ZKMID4ga2Fud2FcIDsKK+imj+atoyA+IGtpc2VpXCA7CivoqZDlj5YgPiBzYXNodVwgOwor54Sh5oGlID4gbXVjaGlcIDsKK+ijheiNtyA+IHNvdWthXCA7CivnhKHmgKcgPiBtdXNlaVwgOwor6ZuF5YWEID4gZ2FrZWlcIDsKK+eyl+ezliA+IHNvdG91XCA7CivpmqDllqkgPiBpbicneXVcIDsKK+eEoeW/tSA+IG11bmVuXCA7Civlm57ot68gPiBrYWlyb1wgOwor6ZuH5YKtID4ga295b3VcIDsKK+imquacqCA+IG95YWdpXCA7Civpm5HkvZwgPiB6b3VzYVwgOwor54Sh5b2iID4gbXVrZWlcIDsKK+mZkOW6piA+IGdlbmRvXCA7CivnhZnlobUgPiBlbmppblwgOwor5aGB5omTID4gcnVpZGFcIDsKK+aVheS6uiA+IGtvamluXCA7CivlnJ/olLUgPiBkb3pvdVwgOwor6KW/5q2mID4gc2VpYnVcIDsKK+eCjueCjiA+IGVuJydlblwgOwor6KaL5qeYID4gbWl5b3VcIDsKK+aVheS4uyA+IGtvc2h1XCA7Civopb/mrKcgPiBzZWlvdVwgOwor6KaH5qipID4gaGFrZW5cIDsKK+mZouWuoyA+IGluemVuXCA7CivnspfnrKggPiBzb2hvblwgOwor57Sh5qmfID4gYm91a2lcIDsKK+Wbs+inoyA+IHp1a2FpXCA7CivlnKjojbcgPiB6YWlrYVwgOwor6ZeY5rCXID4gdG91a2lcIDsKK+WcsOiJsiA+IGppaXJvXCA7CivnhKHluL0gPiBtdWJvdVwgOwor54Sh5bi4ID4gbXVqb3VcIDsKK+Wcn+iRrCA+IGRvc291XCA7CivmlL/kuosgPiBzZWlqaVwgOwor5o6q572uID4gc29jaGlcIDsKK+Wik+WcsCA+IGJvY2hpXCA7Civnt4/lk6EgPiBzb3VpblwgOwor6ZqP5ZacID4genVpa2lcIDsKK+WcqOiLsSA+IHphaWVpXCA7Civns5zniJsgPiBiaXJhblwgOwor57eP5ZKMID4gc291d2FcIDsKK+mbheS6uiA+IGdhamluXCA7CivloLTmiYAgPiBiYXNob1wgOwor6KGX6LevID4gZ2Fpcm9cIDsKK+mZhOW4ryA+IGZ1dGFpXCA7CivloZflt6UgPiB0b2tvdVwgOwor5Zue6K2wID4ga2FpZ2lcIDsKK+maj+WToSA+IHp1aWluXCA7CivloIXmnpwgPiBrZW5rYVwgOwor6Kix5ZCmID4ga3lvaGlcIDsKK+aLl+mfsyA+IHlvdW9uXCA7CivoqLHlj68gPiBreW9rYVwgOwor6KaL5qCEID4gbWliYWVcIDsKK+e1ueW4gyA+IGtlbnB1XCA7Civpmorlk6EgPiB0YWlpblwgOwor6Zm25ZyfID4gdG91ZG9cIDsKK+aPkOekuiA+IHRlaWppXCA7CivmjInphY0gPiBhbmJhaVwgOwor54Sh5bC9ID4gbXVqaW5cIDsKK+mZpOWkliA+IGpvZ2FpXCA7Civlopflk6EgPiB6b3VpblwgOwor57W15be7ID4gZW1ha2lcIDsKK+ihjOi3ryA+IGtvdXJvXCA7CivmjL/oqbEgPiBzb3V3YVwgOwor6KaL5pysID4gbWlob25cIDsKK+mZouWkliA+IGluZ2FpXCA7Civnt4/li5kgPiBzb3VtdVwgOwor6ZeK5q2pID4ga2FwcG9cIDsKK+WZqumfsyA+IHNvdW9uXCA7Civln7rmnb8gPiBraWJhblwgOwor6Zm25ZmoID4gdG91a2lcIDsKK+e2meWkqyA+IGtlaWZ1XCA7CivnhKHlrrMgPiBtdWdhaVwgOwor6Zqg5YWDID4gaW5nZW5cIDsKK+eEoeWumCA+IG11a2FuXCA7CivoqIPloLEgPiBmdWhvdVwgOwor5Z+65pysID4ga2lob25cIDsKK+eyl+egpSA+IGFyYXRvXCA7CivloLHmgakgPiBob3VvblwgOwor6Zq35LiLID4gcmVpa2FcIDsKK+e0oOadkCA+IHNvemFpXCA7CivpmY3lq4EgPiBrb3VrYVwgOwor57eP5Ye6ID4gc291ZGVcIDsKK+imi+aYoCA+IG1pYmFlXCA7Civntr3lkI0gPiBhZGFuYVwgOwor5ZyS6Iq4ID4gZW5nZWlcIDsKK+eBr+eBqyA+IHRvdWthXCA7Civop6PlrZcgPiBrYWlqaVwgOwor5o2V6JmcID4gaG9yeW9cIDsKK+mao+S/nSA+IHJpbnBvXCA7CivlopPlj4IgPiBib3NhblwgOwor54Gr54G9ID4ga2FzYWlcIDsKK+ioiOWZqCA+IGtlaWtpXCA7CivntYTmiJAgPiBzb3NlaVwgOwor6KO455y8ID4gcmFnYW5cIDsKK+eyl+ebuCA+IHNvc291XCA7Civmi77pgbogPiBzaHV1aVwgOwor57W25a62ID4gemVra2VcIDsKK+iomOWQjSA+IGtpbWVpXCA7CivooaPoo7MgPiBpc2hvdVwgOwor5aKX5YqgID4gem91a2FcIDsKK+iomOWPtyA+IGtpZ291XCA7Civmv77ntJkgPiByb3NoaVwgOwor6Zi75a6zID4gc29nYWlcIDsKK+WcsOe4gSA+IGNoaWVuXCA7CivnhKHlp4sgPiBtdXNoaVwgOwor5Zua6KGjID4gc2h1dWlcIDsKK+iho+ijhSA+IGlzaG91XCA7CivmkanmkI0gPiBtYXNvblwgOwor5Z+65pWwID4ga2lzdXVcIDsKK+ihm+imliA+IGVpc2hpXCA7Civlm73oj68gPiBrb2trYVwgOwor5aGU5amGID4gdG91YmFcIDsKK+e0oOaVsCA+IHNvc3V1XCA7CivlnZDnpoUgPiB6YXplblwgOwor5aKT5YmNID4gYm96ZW5cIDsKK+maoOS6oSA+IG9uYm91XCA7CivnhKHlo7AgPiBtdXNlaVwgOwor5Zyw57SLID4gamltb25cIDsKK+aOsuekuiA+IGtlaWppXCA7CivmvJTpoYwgPiBlbmRhaVwgOwor57SN5pyfID4gbm91a2lcIDsKK+aSkuW4gyA+IHNhbnB1XCA7CivloIXmjIEgPiBrZW5qaVwgOwor5pOs5YuiID4gZ2lzZWlcIDsKK+WbveiKsSA+IGtva2thXCA7CivlnLDnsbMgPiBqaW1haVwgOwor6Kaq5b6hID4gb3lhZ29cIDsKK+eCueaSrSA+IHRlbnBhXCA7Civmv4PoibYgPiBub3VlblwgOwor6Ki05Lq6ID4gc29uaW5cIDsKK+ihl+ihoiA+IGdhaWt1XCA7CivplovmvJQgPiBrYWllblwgOwor6KiO5YyqID4gdG91aGlcIDsKK+e1jOW6piA+IGtlaWRvXCA7Civmk6zliLYgPiBnaXNlaVwgOwor57SL5pelID4gbW9uYmlcIDsKK+aOiOeyviA+IGp1c2VpXCA7CivpmaTlkI0gPiBqb21laVwgOwor54Gv5rK5ID4gdG91eXVcIDsKK+mZpOWPtyA+IGpvZ291XCA7CivpmbblhrYgPiB0b3V5YVwgOwor5Zuw6IumID4ga29ua3VcIDsKK+aKq+mcsiA+IGhpcm91XCA7CivpmaTljrsgPiBqb2t5b1wgOwor6Zmi5Y+3ID4gaW5nb3VcIDsKK+maiuS8jSA+IHRhaWdvXCA7CivntIXml5cgPiBrb3VraVwgOwor6ZqO5LiLID4ga2Fpa2FcIDsKK+aKlemjmyA+IHRvdWhpXCA7Civon7vphbggPiBnaXNhblwgOwor57Sg5oeQID4gc29rYWlcIDsKK+WcsOennyA+IGNoaXNvXCA7CivntLDlvq4gPiBzYWliaVwgOwor6Kib5LydID4ga2FkZW5cIDsKK+aLnei+niA+IGhhaWppXCA7CivlnJ/nrqEgPiBkb2thblwgOwor5Zyw56WHID4gY2hpZ2lcIDsKK+WhiuWcnyA+IGthaWRvXCA7Civoo4/nm64gPiB1cmFtZVwgOwor5oyB6KuWID4gamlyb25cIDsKK+imluW6piA+IHNoaWRvXCA7Civngo7mmpEgPiBlbnNob1wgOwor57K+5rK5ID4gc2VpeXVcIDsKK+eyl+eFriA+IGFyYW5pXCA7Civpl5jmioAgPiB0b3VnaVwgOwor5oy/6IqxID4gc291a2FcIDsKK+aTrOS6uiA+IGdpamluXCA7Civnsr7msJcgPiBzZWlraVwgOwor6KaW5beuID4gc2hpc2FcIDsKK+eEoeWQjSA+IG11bWVpXCA7CivntKDmgKcgPiBzdWpvdVwgOwor6Kaq5a2XID4gb3lhamlcIDsKK+mYu+WWqiA+IHNvc291XCA7CivntI3miLggPiBuYW5kb1wgOwor54Sh5Y+MID4gbXVzb3VcIDsKK+WhqeWIhiA+IGVuYnVuXCA7CivntKDlv5cgPiBzb3NoaVwgOwor57Sw5belID4gc2Fpa3VcIDsKK+mZquS+jSA+IGJhaWppXCA7CivloLDloKQgPiBlbnRlaVwgOwor54Sh5YuiID4gYnV6ZWlcIDsKK+WfuuW6lSA+IGtpdGVpXCA7CivmjrvniKwgPiBzb3VoYVwgOwor5Zyn56CVID4gYXNzYWlcIDsKK+WfuuW5uSA+IGtpa2FuXCA7Civmj67mr6sgPiBraWdvdVwgOwor54Sh5Yq5ID4gbXVrb3VcIDsKK+WcsOebpCA+IGppYmFuXCA7Civlm7LnuZ4gPiBpbnlvdVwgOwor5oud6LOAID4gaGFpZ2FcIDsKK+eBq+ahtiA+IGhpb2tlXCA7CivmjqjnkIYgPiBzdWlyaVwgOwor57KX5ryPID4gc29yb3VcIDsKK+aJtumkiiA+IGZ1eW91XCA7CivmjZXnuIQgPiBob2pvdVwgOwor57W25Y+lID4gemVra3VcIDsKK+Wbm+iCoSA+IHNoaWtvXCA7CivnsKHntKAgPiBrYW5zb1wgOwor5oq86YCBID4gb3Vzb3VcIDsKK+Wcn+eggiA+IGRvc2hhXCA7CivnhKHlhqAgPiBtdWthblwgOwor54K55beuID4gdGVuc2FcIDsKK+WgoeWhgSA+IGhvcnVpXCA7Civmk43kvZwgPiBzb3VzYVwgOwor57SU5bqmID4ganVuZG9cIDsKK+iogOS4iyA+IGdlbmthXCA7Civopo/lrpogPiBraXRlaVwgOwor54Gr5pucID4ga2F5b3VcIDsKK+a7i+mkiiA+IGppeW91XCA7Civmj5vmsJcgPiBrYW5raVwgOwor6ZaL5p62ID4ga2Fpa2FcIDsKK+Wcp+eXlSA+IGFra29uXCA7Civmibnpm6MgPiBoaW5hblwgOwor6KO95rK5ID4gc2VpeXVcIDsKK+WZqOiyoSA+IGtpemFpXCA7CivplpHmmocgPiBrYW5rYVwgOwor54Gr5pifID4ga2FzZWlcIDsKK+mZm+S4iyA+IGhlaWthXCA7Civop5LlipsgPiBzdW1vdVwgOwor57K+5p+7ID4gc2Vpc2FcIDsKK+WcsOeQhiA+IGNoaXJpXCA7CivloLTlkbMgPiBiYWFqaVwgOwor566X6K2cID4gc2FucHVcIDsKK+eDiOWppiA+IHJlcHB1XCA7CivloZHlg48gPiBzb3pvdVwgOwor5o6I55SjID4ganVzYW5cIDsKK+eEoeS9kyA+IG11dGFpXCA7CivooYzohJogPiBhbmd5YVwgOwor54Sh5L2PID4gbXVqdXVcIDsKK+aPuuabsyA+IHlvdWVpXCA7CivntKDlrZAgPiBzb3NoaVwgOwor57WM5Za2ID4ga2VpZWlcIDsKK+Wcn+eUqCA+IGRveW91XCA7CivnhKHku6MgPiBtdWRhaVwgOwor6KCR6J66ID4gc2F6YWVcIDsKK+ieuumIvyA+IHJhZGVuXCA7CivngrnlrZcgPiB0ZW5qaVwgOwor54Sh5Lq6ID4gbXVuaW5cIDsKK+Wcn+eTtiA+IGRvYmluXCA7CivloILlpaUgPiBkb3VvdVwgOwor6Ziy5YW3ID4gYm91Z3VcIDsKK+mZjeS4iyA+IGtvdWthXCA7CivntLrlnLAgPiBrb25qaVwgOwor6ZW35p+EID4gbmFnYWVcIDsKK+iln+W6piA+IGtpbmRvXCA7CivnhKHkuIogPiBtdWpvdVwgOwor6KGj57OnID4gaXJ5b3VcIDsKK+e1tuS9syA+IHpla2thXCA7CivntKDlp5MgPiBzdWpvdVwgOwor6Ziy5YKZID4gYm91YmlcIDsKK+Wbs+ekuiA+IHp1c2hpXCA7CivntZDlj6UgPiBrZWtrdVwgOwor5Z+O5bqcID4gam91ZnVcIDsKK+iejemZpCA+IHl1dWpvXCA7CivmiaPpmaQgPiBrb3Vqb1wgOwor6Zi/5LqAID4gb2thbWVcIDsKK+aJk+mghiA+IGRhanVuXCA7CivmirHosqAgPiBob3VmdVwgOwor5o6S54WZID4gaGFpZW5cIDsKK+a8ouiqniA+IGthbmdvXCA7CivmkYLlrrYgPiBzZWtrZVwgOwor5aCF5Zu6ID4ga2VuZ29cIDsKK+eBq+aJiyA+IGthc2h1XCA7CivmiYvpoIYgPiB0ZWp1blwgOwor5omT6Zu7ID4gZGFkZW5cIDsKK+etlOi+niA+IHRvdWppXCA7Civmj5DmoYggPiB0ZWlhblwgOwor5Z+65ZywID4ga2ljaGlcIDsKK+Wcp+eCuSA+IGF0dGVuXCA7CivplovmiYkgPiBrYWloaVwgOwor6KOc5q2jID4gaG9zZWlcIDsKK+aPoeaWpyA+IGFrdWZ1XCA7CivmiqvorJsgPiBoaWtvdVwgOwor5omT6ZaLID4gZGFrYWlcIDsKK+imgeWbsyA+IHlvdXp1XCA7Civopb/lnJ8gPiBzZWlkb1wgOwor6KaB5ZugID4geW91aW5cIDsKK+ertummrCA+IGtlaWJhXCA7CivnspfmnKggPiBhcmFraVwgOwor5ryP6KmxID4gcm91d2FcIDsKK+aOoeayuSA+IHNhaXl1XCA7Civooqvngb0gPiBoaXNhaVwgOwor5aC05LujID4gYmFkYWlcIDsKK+eyl+aatCA+IHNvYm91XCA7CivlnLDmuKkgPiBjaGlvblwgOwor5o6q5q2iID4gc29zaGlcIDsKK+ijj+avmyA+IHVyYWtlXCA7CivploDmiYkgPiBtb25waVwgOwor6ZaA5oi4ID4gbW9ua29cIDsKK+ezluW6piA+IHRvdWRvXCA7Civplovmgp8gPiBrYWlnb1wgOwor57SZ5ZmoID4gc2hpa2lcIDsKK+aKq+imiyA+IGhpa2VuXCA7CivmkbjlhpkgPiBtb3NoYVwgOwor6KGo552AID4gdXdhZ2lcIDsKK+eCreWboyA+IHRhZG9uXCA7Civlm57nm64gPiBrYWltZVwgOwor5oqX6K2wID4ga291Z2lcIDsKK+a7hemHkSA+IG1la2tpXCA7CivnspfmlL4gPiBzb2hvdVwgOwor6KaB5ZOhID4geW91aW5cIDsKK+aJk+mNtSA+IGRha2VuXCA7CivntK/liqAgPiBydWlrYVwgOwor6J2f6ZuGID4gaXNodXVcIDsKK+eCiuWppiA+IHN1aWZ1XCA7CivngrnlkbwgPiB0ZW5rb1wgOwor5o6S5rCXID4gaGFpa2lcIDsKK+aRuOWAoyA+IG1vaG91XCA7Civopo/liLYgPiBraXNlaVwgOwor54KO5aSpID4gZW50ZW5cIDsKK+WboOeUsSA+IGluJyd5dVwgOwor5Zyw5q2pID4gY2hpaG9cIDsKK+aJi+mMoCA+IHRlam91XCA7Civmv7bmrakgPiBrYXBwb1wgOwor5Zyw5q2MID4gaml1dGFcIDsKK+mWgOW+kiA+IG1vbnRvXCA7CivllrbppIogPiBlaXlvdVwgOwor54KK5aSrID4gc3VpZnVcIDsKK+aMv+eUuyA+IHNvdWdhXCA7Civlm7PniYggPiB6dWhhblwgOwor57K+5bqmID4gc2VpZG9cIDsKK+aPtOW8lSA+IGVuJydpblwgOwor5rue6LKoID4gdGFpa2FcIDsKK+imgeWLmSA+IHlvdW11XCA7CivngavlsbEgPiBrYXphblwgOwor57O75ZuzID4ga2VpenVcIDsKK+Wcp+atuyA+IGFzc2hpXCA7CivmiYvph5EgPiB0ZWtpblwgOwor5Zyf5rCRID4gZG9taW5cIDsKK+eCueWJjSA+IHRlbWFlXCA7CivmjqLmn7sgPiB0YW5zYVwgOwor57SU5YyWID4ganVua2FcIDsKK+e0jeWPlyA+IG5vdWp1XCA7CivmiYvphY0gPiB0ZWhhaVwgOwor5ouJ6Ie0ID4gcmFjaGlcIDsKK+ihm+eUnyA+IGVpc2VpXCA7Civoo5zmlbQgPiBob3NlaVwgOwor6KaB5YW3ID4geW91Z3VcIDsKK+ijnOaVsCA+IGhvc3V1XCA7Civngq3ljJYgPiB0YW5rYVwgOwor5o6I5qipID4ganVrZW5cIDsKK+e0lOWIqSA+IGp1bnJpXCA7CivnrYboqJggPiBoaWtraVwgOwor57Sw5LqLID4gc2FpamlcIDsKK+aMh+ekuiA+IHNoaWppXCA7CivnspfmgqogPiBzb2FrdVwgOwor57Sg5L2TID4gc290YWlcIDsKK+a8lOiKuCA+IGVuZ2VpXCA7Civns57lnJ8gPiBmdW5kb1wgOwor6ZW35bGFID4gbmFnYWlcIDsKK+a8q+e9tSA+IG1hbmJhXCA7CivntJnkvqEgPiBzaGlrYVwgOwor56uv6YqtID4gaGFzZW5cIDsKK+WYieiogCA+IGthZ2VuXCA7CivnspjluqYgPiBuZW5kb1wgOwor566q56ylID4gdGFuc3VcIDsKK+e0gOWFgyA+IGtpZ2VuXCA7Civlm7Pms5UgPiB6dWhvdVwgOwor5r2k55uuID4gdXJ1bWVcIDsKK+WbveatjCA+IGtva2thXCA7Civplovln7ogPiBrYWlraVwgOwor5rmW6Z2iID4ga29tZW5cIDsKK+aPmuWxiyA+IGFnZXlhXCA7CivlnJ/mm5wgPiBkb3lvdVwgOwor57SN5LuYID4gbm91ZnVcIDsKK+ijj+aJiyA+IHVyYXRlXCA7Civonp/om74gPiBtZWlnYVwgOwor5Zyn5pS/ID4gYXNzZWlcIDsKK+mWi+WckiA+IGthaWVuXCA7CivlnJ/mmJ8gPiBkb3NlaVwgOwor54KO5YWJID4gZW5rb3VcIDsKK+aKvOe1tSA+IG9zaGllXCA7Civmua/piq0gPiB5dXNlblwgOwor6Zay5YW1ID4gZXBwZWlcIDsKK+ijnOW8piA+IGhvZ2VuXCA7Civns7jkvqEgPiBzaGlrYVwgOwor6KGM54GvID4gYW5kb25cIDsKK+aJi+ipsSA+IHNodXdhXCA7CivlnKfmjpIgPiBhcHBhaVwgOwor5omL6KiYID4gc2h1a2lcIDsKK+WWtumAoCA+IGVpem91XCA7CivlnLDmiYAgPiBqaXNob1wgOwor57OW5YyWID4gdG91a2FcIDsKK+WWtui+siA+IGVpbm91XCA7Civoo5zlt7sgPiBob2thblwgOwor6KOV5bqmID4geXV1ZG9cIDsKK+eziuWPoyA+IGtva291XCA7CivmioDoirggPiBnaWdlaVwgOwor6Za55Lq6ID4gZW5qaW5cIDsKK+aNnOafuyA+IHNvdXNhXCA7CivmiYvoo70gPiB0ZXNlaVwgOwor5Z+O5LiLID4gam91a2FcIDsKK+eBq+WLoiA+IGthc2VpXCA7Civmi53nnIkgPiBoYWliaVwgOwor5oy95q2MID4gYmFua2FcIDsKK+aOiOaIkiA+IGp1a2FpXCA7CivnspflpKcgPiBzb2RhaVwgOwor5oim6LK7ID4gc2VucGlcIDsKK+WbuuaciSA+IGtveXV1XCA7CivmuKnpoZQgPiBvbmdhblwgOwor54KK5LqLID4gc3VpamlcIDsKK+eCjuS4iiA+IGVuam91XCA7CivmjbvmjKsgPiBuZW56YVwgOwor6KO95aGpID4gc2VpZW5cIDsKK+eBq+WIkSA+IGtha2VpXCA7CivmvJTnrpcgPiBlbnphblwgOwor5rip6aCGID4gb25qdW5cIDsKK+mWi+WMliA+IGthaWthXCA7Civoo5zlsI4gPiBob2RvdVwgOwor5Zug5qWtID4gaW5nb3VcIDsKK+aKgOiDvSA+IGdpbm91XCA7CivnqoHpo5sgPiB0b3BwaVwgOwor5Zu95peXID4ga29ra2lcIDsKK+Wbs+abuCA+IHRvc2hvXCA7CivngavlhYkgPiBrYWtvdVwgOwor6KOc5a6MID4gaG9rYW5cIDsKK+ewoeaYkyA+IGthbicnaVwgOwor6KGS5rCXID4gZ2Vua2lcIDsKK+exs+WvvyA+IGJlaWp1XCA7CivmipXntrIgPiB0b2FtaVwgOwor6KO95ZuzID4gc2VpenVcIDsKK+eymOWcnyA+IG5lbmRvXCA7CivmkI3kv50gPiBzb25wb1wgOwor6KOP5bGLID4gdXJheWFcIDsKK+aOquWumiA+IHNvdGVpXCA7CivmibbogrIgPiBmdWlrdVwgOwor6Zaj5LiLID4ga2Fra2FcIDsKK+aIpuiomCA+IHNlbmtpXCA7CivmiYvoloQgPiB0ZXVzdVwgOwor566h55CGID4ga2FucmlcIDsKK+WcqOW6qyA+IHphaWtvXCA7CivmjafmjIEgPiBob3VqaVwgOwor56ul6KmxID4gZG91d2FcIDsKK+idpuibhCA+IHNoYWtvXCA7Civmj7TlhbUgPiBlbnBlaVwgOwor5Z2R5aSrID4ga291ZnVcIDsKK+iiq+W8viA+IGhpZGFuXCA7CivooYDmsJcgPiBrZWtraVwgOwor5ZiJ6IK0ID4ga2Frb3VcIDsKK+WZqOeUqCA+IGtpeW91XCA7CivplpPku6MgPiBtYWRhaVwgOwor5Zyn5be7ID4gYWtrYW5cIDsKK+aIkuittyA+IGthaWdvXCA7Civnga/kuIsgPiB0b3VrYVwgOwor5ryr55S7ID4gbWFuZ2FcIDsKK+aPmuWPpSA+IGFnZWt1XCA7CivllprotbcgPiBrYW5raVwgOwor6KOc5aGrID4gaG90ZW5cIDsKK+iho+acjSA+IGlmdWt1XCA7Civnspflk4EgPiBzb2hpblwgOwor5Zyf5belID4gZG9rb3VcIDsKK+a4hemfsyA+IHNlaW9uXCA7Civlm6DmlbAgPiBpbnN1dVwgOwor5oiQ6KqeID4gc2VpZ29cIDsKK+Wbm+aXpSA+IHlva2thXCA7CivmiYvojZIgPiB0ZWFyYVwgOwor57Gz5aGpID4gYmVpZW5cIDsKK+aOqeWjlSA+IGVuZ291XCA7CivlmIbnvo4gPiB0YW5iaVwgOwor6J2X6JmrID4gYmF0dGFcIDsKK+iho+aWmSA+IGlyeW91XCA7CivmjZXmiYsgPiBob3NodVwgOwor5Zyo5a62ID4gemFpa2VcIDsKK+ijnOWbniA+IGhva2FpXCA7CivooZvmmJ8gPiBlaXNlaVwgOwor6ZaA5LiLID4gbW9ua2FcIDsKK+ihjOadjiA+IGtvdXJpXCA7CivlmbTngasgPiBmdW5rYVwgOwor57KX5YipID4gYXJhcmlcIDsKK+iiq+WusyA+IGhpZ2FpXCA7Civnr4DmsJcgPiBzZWtraVwgOwor6KOP5ZywID4gdXJhamlcIDsKK+mNjemHkSA+IG1la2tpXCA7CivlmInntI0gPiBrYW5vdVwgOwor5rer6aKoID4gaW5wdXVcIDsKK+aJk+iAhSA+IGRhc2hhXCA7CivlnLDlo7AgPiBqaWdvZVwgOwor6Jy/6JySID4gZW4nJ2VuXCA7Civmt7vpmYQgPiB0ZW5wdVwgOwor5Zu65b2iID4ga29rZWlcIDsKK+aKmOebriA+IG9yaW1lXCA7Civlm73luqsgPiBrb2trb1wgOwor5r+D5bqmID4gbm91ZG9cIDsKK+ethuemjSA+IGhpa2thXCA7CivonLvom4kgPiB0b25ib1wgOwor6KGM5pa5ID4geXVrdWVcIDsKK+ihjeaWhyA+IGVuYnVuXCA7Civoo7jlg48gPiByYXpvdVwgOwor5Zub5omLID4gc2hpZGVcIDsKK+Wbs+W9oiA+IHp1a2VpXCA7CivlnoLkuIsgPiBzdWlrYVwgOwor6JyC6LW3ID4gaG91a2lcIDsKK++8sO+8oyA+IHDEq3NoxKtcIDsKK+aJk+e3miA+IGRhc2VuXCA7CivlnLDlm7MgPiBjaGl6dVwgOwor6KGo5oSPID4gaHlvdWlcIDsKK+aKgOeglCA+IGdpa2VuXCA7CivlnJ/lo4wgPiBkb2pvdVwgOwor5omL57mUID4gdGVvcmlcIDsKK+ijuOS9kyA+IHJhdGFpXCA7Civlm7Plt6UgPiB6dWtvdVwgOwor6KGb5omAID4gZWlzaG9cIDsKK+ihsOW+riA+IHN1aWJpXCA7Civoo4/lkI0gPiB1cmFuYVwgOwor5Zyf5aGKID4gZG9rYWlcIDsKK+aJi+e3tCA+IHRlcmVuXCA7CivlnJ/loYEgPiBkb3J1aVwgOwor5Zyf5aGAID4gZG9iZWlcIDsKK+WUkOmfsyA+IHRvdW9uXCA7Civlm6DlvqogPiBpbmp1blwgOwor57C/5aSWID4gYm9nYWlcIDsKK+WbnuW/jCA+IGthaWtpXCA7CivmjqHlkKYgPiBzYWloaVwgOwor5oqA55ujID4gZ2lrYW5cIDsKK+WbveWutiA+IGtva2thXCA7CivmiI7okbUgPiBqdXVraVwgOwor5Zm05rCXID4gZnVua2lcIDsKK+epuui8uCA+IGt1dXl1XCA7CivlnJ/lnLAgPiB0b2NoaVwgOwor6KOc5YWFID4gaG9qdXVcIDsKK+WdkeWEkiA+IGtvdWp1XCA7Civlm7rlrpogPiBrb3RlaVwgOwor5Zyw5ZSEID4gaml1dGFcIDsKK+WbuuWuiCA+IGtvc2h1XCA7CivmjJnmjqogPiBreW9zb1wgOwor5omT566XID4gZGFzYW5cIDsKK+WdkOWDjyA+IHphem91XCA7CivlnJ/lmqIgPiBkb25vdVwgOwor6KOB5Y+vID4gc2Fpa2FcIDsKK+WcsOWRsyA+IGNoaW1pXCA7CivnqoHotbcgPiB0b2traVwgOwor5Za26IiOID4gZWlzaGFcIDsKK+WbnuW4sCA+IGthaWtpXCA7CivmvLjmrKEgPiB6ZW5qaVwgOwor5Zar6Iy2ID4ga2lzc2FcIDsKK+epuui3ryA+IGt1dXJvXCA7Civlm73lqIEgPiBrb2t1aVwgOwor5r2c5pmCID4gc2VuamlcIDsKK+WcsOWMuiA+IGNoaWt1XCA7CivmjIfmj64gPiBzaGlraVwgOwor5oyJ5o6SID4gYW5iYWlcIDsKK+ijnOS7uyA+IGhvbmluXCA7CivmvKvmrakgPiBtYW5wb1wgOwor57Gz5L6hID4gYmVpa2FcIDsKK+ihhuaEjyA+IHNodXVpXCA7CivmvIHngasgPiBneW9rYVwgOwor5oeH6KmxID4ga29ud2FcIDsKK+epuuiyuyA+IGt1dWhpXCA7CivonInonaMgPiBmdXl1dVwgOwor6Juu6KqeID4gYmFuZ29cIDsKK+ijheWFtyA+IHNvdWd1XCA7CivmiK/ntbUgPiB6YXJlZVwgOwor5Z2Q5LmXID4gemFqb3VcIDsKK+Wbo+WtkCA+IGRhbmdvXCA7CivlnJ/lj7AgPiBkb2RhaVwgOwor5ra86ZuoID4gcnlvdXVcIDsKK+ijheWCmSA+IHNvdWJpXCA7Civlm6DlrZAgPiBpbnNoaVwgOwor5oyJ5omLID4gYW5zaHVcIDsKK+WdiuS4uyA+IGJvdXp1XCA7CivooYblvpIgPiBzaHV0b1wgOwor5ryP5rSpID4gcm91ZWlcIDsKK+Wcp+WItiA+IGFzc2VpXCA7Civlm5vlraMgPiBzaGlraVwgOwor5Za257mVID4gZWl6ZW5cIDsKK+WZqOaisCA+IGtpa2FpXCA7Civnp7vpp5AgPiBpY2h1dVwgOwor5oyB5oiSID4gamlrYWlcIDsKK+iZjumtmiA+IG9rb3plXCA7CivnrpfmnKggPiBzYW5naVwgOwor5Zyw5L6hID4gY2hpa2FcIDsKK+aJi+ebuCA+IHRlc291XCA7CivlmajmnZAgPiBraXphaVwgOwor6ZGR5p+7ID4ga2Fuc2FcIDsKK+Wcp+WAkiA+IGF0dG91XCA7CivmtbfpsLsgPiBhbmFnb1wgOwor5ouF5p62ID4gdGFua2FcIDsKK+mLremLkiA+IGVpaG91XCA7CivmjpLku5YgPiBoYWl0YVwgOwor5oaC6LqrID4gdWtpbWlcIDsKK+aJueeCuSA+IGhpdGVuXCA7CivlnJ/lgbYgPiBkb2d1dVwgOwor6KGM5a6uID4gYW5ndXVcIDsKK+WcsOS4iyA+IGNoaWthXCA7CivnrofmnaEgPiBrYWpvdVwgOwor5Zyf5L6vID4gZG9rb3VcIDsKK+aIpuemjSA+IHNlbmthXCA7CivnrYnmuKkgPiB0b3VvblwgOwor5r+D5YyWID4gbm91a2FcIDsKK+WTgOmhmCA+IGFpZ2FuXCA7CivmjL/lm7MgPiBzb3V6dVwgOwor5Zyf5Lq6ID4gZG9qaW5cIDsKK+a/gOWMliA+IGdla2thXCA7CivmhJvppJAgPiBhaXNhblwgOwor5ZK96aCtID4gaW50b3VcIDsKK+euh+aVsCA+IGtvc3V1XCA7CivlloTnvo4gPiB6ZW5iaVwgOwor5oqV5qmfID4gdG91a2lcIDsKK+ibh+ihjCA+IGRha291XCA7CivmioDms5UgPiBnaWhvdVwgOwor6KGh5ZmoID4ga291a2lcIDsKK+a1hem7hCA+IGFzYWdpXCA7Civmhbbos4AgPiBrZWlnYVwgOwor5ous5bynID4ga2Fra29cIDsKK+etieavlCA+IHRvdWhpXCA7Civmipvmo4QgPiBob3VraVwgOwor6KGX5ZuzID4gZ2FpenVcIDsKK+WckuS4gSA+IGVudGVpXCA7Civmi4fmjIcgPiBib3NoaVwgOwor5oqV5qOEID4gdG91a2lcIDsKK+aJk+eCuSA+IGRhdGVuXCA7CivmtbfpnKcgPiBrYWltdVwgOwor5ryP5paXID4gcm91dG9cIDsKK+evhuWtlyA+IHRlbmppXCA7CivmuKHoiLkgPiB0b3NlblwgOwor5rih6IiqID4gdG9rb3VcIDsKK+a7nuaspyA+IHRhaW91XCA7Civmt6vooYwgPiBpbmtvdVwgOwor56+A5a2jID4gc2Vra2lcIDsKK+euh+aJgCA+IGthc2hvXCA7Civlm7rkvZMgPiBrb3RhaVwgOwor562U5qGIID4gdG91YW5cIDsKK+aLmOW8lSA+IGtvdWluXCA7Civnq6XnlLsgPiBkb3VnYVwgOwor5rip57+SID4gc2FyYWlcIDsKK+evgOWppiA+IHNlcHB1XCA7Civmi5DlvJUgPiBrYWlpblwgOwor5Zad56C0ID4ga2FwcGFcIDsKK+ihjOWToSA+IGtvdWluXCA7CivooZfljLogPiBnYWlrdVwgOwor6buE6a+bID4ga2lkYWlcIDsKK+WSjOmiqCA+IHdhZnV1XCA7Civonrrml4sgPiByYXNlblwgOwor56if6K2wID4gcmluZ2lcIDsKK+aGguiZniA+IHl1dWd1XCA7CivmiYvmt6sgPiBzaHVpblwgOwor6YuS6LW3ID4gaG91a2lcIDsKK+aJk+azlSA+IGRhaG91XCA7Civmt6volakgPiBpbnRvdVwgOwor56eY6Y21ID4gaGlrZW5cIDsKK+aJtuahkSA+IGZ1c291XCA7CivomZrovp4gPiBreW9qaVwgOwor6KGb5YW1ID4gZWloZWlcIDsKK+a4pue3miA+IGthc2VuXCA7Civnqrrnn6UgPiBraWNoaVwgOwor5oSa6YiNID4gZ3Vkb25cIDsKK+ihjOWLmSA+IGtvdW11XCA7CivpvKDovKkgPiBzb2hhaVwgOwor5oyZ5Y+lID4gYWdla3VcIDsKK+WbnuS7mCA+IGthaWZ1XCA7Civnr4Tlm7IgPiBoYW4nJ2lcIDsKK+a4pue0iyA+IGthbW9uXCA7CivmiY3msJcgPiBzYWlraVwgOwor5rW36YeMID4ga2FpcmlcIDsKK+m8oOi5iiA+IHNva2VpXCA7CivmiKbngasgPiBzZW5rYVwgOwor5oqK5o+hID4gaGFha3VcIDsKK+aCsumztCA+IGhpbWVpXCA7CivmuKHnsbMgPiB0b2JlaVwgOwor5ouz5Zu6ID4gZ2Vua29cIDsKK+aKleaJkyA+IHRvdWRhXCA7CivmjIflkbwgPiBzaGlrb1wgOwor6bqS6bqfID4ga2lyaW5cIDsKK+aLt+WZqCA+IGdvdWtpXCA7CivlmajlrpggPiBraWthblwgOwor6Y6W54q2ID4gc2Fqb3VcIDsKK+a6ouawtCA+IGlzc3VpXCA7CivmhYjoqJMgPiBqaWt1blwgOwor5rmW55WUID4ga29oYW5cIDsKK+a1t+mBiyA+IGthaXVuXCA7CivmhoLoi6YgPiB5dXVrdVwgOwor5Zef5q2OID4gc2F0YW5cIDsKK+a1t+i+uiA+IHVtaWJlXCA7CivmhJvou4ogPiBhaXNoYVwgOwor5oqK5omLID4gaGFzaHVcIDsKK+aMgeWPgiA+IGppc2FuXCA7CivmiZPmo5IgPiBkYWJvdVwgOwor5rmv54WOID4geXVzZW5cIDsKK+a1rumBiiA+IGZ1eXV1XCA7CivmvKLlrZcgPiBrYW5qaVwgOwor5oqS5oOFID4gam9qb3VcIDsKK+evgOWPpSA+IHNla2t1XCA7Civnp7voqr8gPiBpY2hvdVwgOwor5oyJ5YiGID4gYW5idW5cIDsKK+aCqumtlCA+IGFrdW1hXCA7CivmioDmiYsgPiBnaXNodVwgOwor5rmv54GMID4geXVrYW5cIDsKK+aJi+ahtiA+IHRlb2tlXCA7CivnqLLojbcgPiBpbmFyaVwgOwor5rqQ5rCPID4gZ2VuamlcIDsKK+aKleW9sSA+IHRvdWVpXCA7Civmtbfot68gPiBrYWlyb1wgOwor5om25oyBID4gZnVjaGlcIDsKK+a1pui+uiA+IHVyYWJlXCA7Civlkozph5EgPiB3YWtpblwgOwor6bqd6aaZID4gamFrb3VcIDsKK+mIjem6uyA+IGRvbm1hXCA7CivllZPnpLogPiBrZWlqaVwgOwor5oKq6aasID4gYWt1bWVcIDsKK+aJi+acrCA+IHRlaG9uXCA7CivmuJvno6ggPiBnZW5tYVwgOwor5oKy6aGYID4gaGlnYW5cIDsKK+eqgeegtCA+IHRvcHBhXCA7CivmtbfosZogPiBpcnVrYVwgOwor5oeQ55aRID4ga2FpZ2lcIDsKK+ibh+euoSA+IGpha2FuXCA7Civlk4DoqakgPiBhaXNoaVwgOwor5r2u5L2NID4gY2hvdWlcIDsKK+WTgOipniA+IGFpc2hpXCA7CivmiZPmlbAgPiBkYXN1dVwgOwor5oSa6KuWID4gZ3Vyb25cIDsKK+aIpuapnyA+IHNlbmtpXCA7CivmiYDmnJ8gPiBzaG9raVwgOwor5ryB5a62ID4gZ3lva2FcIDsKK+aJi+aWpyA+IHRlb25vXCA7CivmvJTlpY8gPiBlbnNvdVwgOwor6buZ6YGOID4gbW9ra2FcIDsKK+aLneWPlyA+IGhhaWp1XCA7CivmtarosrsgPiByb3VoaVwgOwor5omL5pWwID4gdGVzdXVcIDsKK+aIuOadvyA+IHRvaXRhXCA7CivmvKLlnJ8gPiBrYW5kb1wgOwor5ryU5aOHID4gZW5kYW5cIDsKK+aEmuioiCA+IGd1a2VpXCA7Civmua/msrsgPiB0b3VqaVwgOwor6Ymb6YyYID4gZW5zdWlcIDsKK+evgOS+myA+IHNla2t1XCA7Civnq4vmtL4gPiByaXBwYVwgOwor5rOl6bCMID4gZG9qb3VcIDsKK+etieW3riA+IHRvdXNhXCA7CivnrqHljLogPiBrYW5rdVwgOwor5oSa6KaLID4gZ3VrZW5cIDsKK+aKgOW4qyA+IGdpc2hpXCA7Civmg7notbcgPiBqYWtraVwgOwor5ouS5ZCmID4ga3lvaGlcIDsKK+mJm+mJsSA+IGVua291XCA7CivlkbPphoIgPiBtaXJpblwgOwor5ZG96YGLID4gbWVpdW5cIDsKK+aKgOW3pyA+IGdpa291XCA7CivmioDlt6UgPiBnaWtvdVwgOwor6by76Iy4ID4gYmlqb3VcIDsKK+mMrOejqCA+IHJlbm1hXCA7Civnp5joqIggPiBoaWtlaVwgOwor56eB6LK7ID4gc2hpaGlcIDsKK+aEj+iosyA+IGl5YWt1XCA7CivomIfpgKMgPiBzb3JlblwgOwor5ZO66IKyID4gaG9pa3VcIDsKK+a0vumBoyA+IGhha2VuXCA7Civmg7PotbcgPiBzb3VraVwgOwor6YqF6LKoID4gZG91a2FcIDsKK+aCjemmrCA+IGthbmJhXCA7CivmiK/mm7ggPiBnaXNob1wgOwor6YqY6KiYID4gbWVpa2lcIDsKK+aEmuihjCA+IGd1a291XCA7Civnqbrnlo4gPiBrdXVzb1wgOwor5rWu6KiAID4gZnVnZW5cIDsKK+a8geWkqyA+IGd5b2Z1XCA7Civmi53lhbcgPiBoYWlndVwgOwor5oi45pWwID4ga29zdXVcIDsKK+azoumrmCA+IGhha291XCA7CivmiKbmnpwgPiBzZW5rYVwgOwor6YqA6LKoID4gZ2lua2FcIDsKK+err+acrCA+IGhhaG9uXCA7CivpurvphZQgPiBtYXN1aVwgOwor5rSL6ZaTID4geW91bWFcIDsKK+mJhOmOliA+IHRlc3NhXCA7Civnp4HorbAgPiBzaGlnaVwgOwor56aB6YyuID4ga2lua29cIDsKK+a1gei7oiA+IHJ1dGVuXCA7CivmvKLlkowgPiBrYW53YVwgOwor5omL5oqAID4gc2h1Z2lcIDsKK+m8u+iFlCA+IGJpa291XCA7CivmtbTooaMgPiB5b2t1aVwgOwor5ryB5aC0ID4gZ3lvYmFcIDsKK+a4pueKtiA+IGtham91XCA7CivmhI/ooaggPiBpaHlvdVwgOwor5oiv5paHID4gZ2lidW5cIDsKK+a2suiCpSA+IGVraWhpXCA7CivmioDlrpggPiBnaWthblwgOwor56eB6KqeID4gc2hpZ29cIDsKK+aIpuaZgiA+IHNlbmppXCA7Civmt6vnpaAgPiBpbnNoaVwgOwor56m655CGID4ga3V1cmlcIDsKK+aJgOaMgSA+IHNob2ppXCA7Civmh5DngokgPiBrYWlyb1wgOwor5rqA5pyfID4gbWFua2lcIDsKK+WWtuaelyA+IGVpcmluXCA7CivmuZbmsLQgPiBrb3N1aVwgOwor5ZKM6K6aID4gd2FzYW5cIDsKK+engeiomCA+IHNoaWtpXCA7CivmiKbml5cgPiBzZW5raVwgOwor56uv5pWwID4gaGFzdXVcIDsKK+WYmOWtlyA+IHVzb2ppXCA7CivmiJDmoYggPiBzZWlhblwgOwor56WI6aGYID4ga2lnYW5cIDsKK+a4qeeCuSA+IG9udGVuXCA7Civms6LpoK0gPiBoYXRvdVwgOwor5oiQ5p6cID4gc2Vpa2FcIDsKK+aEm+iUtSA+IGFpem91XCA7CivpuqbphZIgPiBiaWlydVwgOwor5ZCN6aasID4gbWVpYmFcIDsKK+WSjOiokyA+IHdha3VuXCA7CivmiLjmiLggPiBrb2tvdVwgOwor5ZKM6KejID4gd2FrYWlcIDsKK+azoumdoiA+IGhhbWVuXCA7CivnrqHkuIsgPiBrYW5rYVwgOwor5omL5b2TID4gdGVhdGVcIDsKK+aCvOi+niA+IHRvdWppXCA7Civnp5jolLUgPiBoaXpvdVwgOwor56iy56mCID4gaW5haG9cIDsKK+m8u+e3kiA+IGhhbmFvXCA7Civlkozoo70gPiB3YXNlaVwgOwor6Yuk57C+ID4gam9yZW5cIDsKK+eorueoriA+IHNodWp1XCA7CivmuLjms7MgPiB5dXVlaVwgOwor5ZKM6KOFID4gd2Fzb3VcIDsKK+aLheS/nSA+IHRhbnBvXCA7Civlkozoo4EgPiB3YXNhaVwgOwor5oaC55uuID4gdWtpbWVcIDsKK+mHjum2jyA+IHlha2VpXCA7CivmuKnmua8gPiBvbnRvdVwgOwor5ZCM6Z+zID4gZG91b25cIDsKK+aGrueEtiA+IGJ1emVuXCA7CivmgqrpgYsgPiBha3V1blwgOwor5oe45p62ID4ga2VuZ2FcIDsKK+aCo+mDqCA+IGthbmJ1XCA7CivmvIHljLogPiBneW9rdVwgOwor5ouJ5LiBID4gcmF0ZW5cIDsKK+iWrOmRtSA+IHlha2FuXCA7Civpipjoj5MgPiBtZWlrYVwgOwor6Jyc5p+RID4gbWlrYW5cIDsKK+m7kuihoyA+IGtva3VlXCA7CivmuKnms4kgPiBvbnNlblwgOwor5oKg6YGgID4geXV1ZW5cIDsKK+aIpuaEjyA+IHNlbicnaVwgOwor5oKf6YGTID4gZ29kb3VcIDsKK+WRs+imiyA+IGFqaW1pXCA7CivmuKHmtbcgPiB0b2thaVwgOwor5Za25omAID4gZWlzaG9cIDsKK+a4qeawtCA+IG9uc3VpXCA7CivpvLvnq68gPiBiaXRhblwgOwor5rih5rSLID4gdG95b3VcIDsKK+aEm+iCsiA+IGFpaWt1XCA7Civmu4XlpJogPiBtZXR0YVwgOwor5Y+36Z+zID4gZ291b25cIDsKK+a3q+eMpSA+IGlud2FpXCA7CivlloTmnpwgPiB6ZW5rYVwgOwor5oOF6Kq8ID4gam91Z2lcIDsKK+a8geWFtyA+IGd5b2d1XCA7Civmgqrot68gPiBha3Vyb1wgOwor5rWF6JyKID4gYXNhcmlcIDsKK+aDheipsSA+IGpvdXdhXCA7CivnqK7nmq4gPiBzaHVoaVwgOwor5oSa6ICFID4gZ3VzaGFcIDsKK+aEmuiAgyA+IGd1a291XCA7CivmiKblvowgPiBzZW5nb1wgOwor6Ymb6KO9ID4gZW5zZWlcIDsKK+emgOitsCA+IHJpbmdpXCA7CivmiY3lqpsgPiBzYWllblwgOwor5omH5a2QID4gc2Vuc3VcIDsKK+aFsOeVmSA+IGlyeXV1XCA7Civnp7vnsY0gPiBpc2VraVwgOwor6YeO6aasID4gbm91bWFcIDsKK+err+W6pyA+IHRhbnphXCA7CivnpoXoqbEgPiB6ZW53YVwgOwor5oiR5oWiID4gZ2FtYW5cIDsKK+WWnOaNqCA+IGtpc2hhXCA7Civlj6TpoqggPiBrb2Z1dVwgOwor56iy55SwID4gaW5hZGFcIDsKK+WPl+mokyA+IGp1a2VuXCA7CivnqbrmsJcgPiBrdXVraVwgOwor5oiR5oOFID4gZ2Fqb3VcIDsKK+aJjeWlsyA+IHNhaWpvXCA7Civnqbrmr40gPiBrdXVib1wgOwor5ZS+5rayID4gZGFla2lcIDsKK+a6gOW6pyA+IG1hbnphXCA7Civllrbluq0gPiBlaXRlaVwgOwor56aB6KOhID4ga2lucmlcIDsKK+emgeijjyA+IGtpbnJpXCA7CivlkbPolb4gPiBtaXJhaVwgOwor6Jma56m6ID4ga29rdXVcIDsKK+aCsuimsyA+IGhpa2FuXCA7Civmt7XmupAgPiBlbmdlblwgOwor5ZKM6Ii5ID4gd2FzZW5cIDsKK+a0i+iqniA+IHlvdWdvXCA7CivmhYjnnLwgPiBqaWdlblwgOwor5Za25bejID4gZWlzb3VcIDsKK+ekvumBiyA+IHNoYXVuXCA7CivmibnliKQgPiBoaWhhblwgOwor5omL5Z6iID4gdGVha2FcIDsKK+iejeWSjCA+IHl1dXdhXCA7CivmgqroqIggPiBha2tlaVwgOwor5om55YeGID4gaGlqdW5cIDsKK+m8k+erpSA+IGtvZG91XCA7CivlkI/pgZMgPiByb2RvdVwgOwor5oqV5LiOID4gdG91eW9cIDsKK+aKleS4iyA+IHRvdWthXCA7Civmh7jmg7MgPiBrZXNvdVwgOwor5Y+X6ZujID4ganVuYW5cIDsKK+aIuOWkliA+IGtvZ2FpXCA7Civmh7rmgpQgPiB6YW5nZVwgOwor6Yuz54mpID4gaW1vbm9cIDsKK+aJjeWZqCA+IHNhaWtpXCA7Civnq6rlrZAgPiBqdXNoaVwgOwor56ym5ZCIID4gZnVnb3VcIDsKK+a3u+awtCA+IHNvdXp1XCA7CivnrKblj7cgPiBmdWdvdVwgOwor5oqA5YCSID4gZ2l0b3VcIDsKK+a4qeaaliA+IG9uZGFuXCA7CivnrYnkvqEgPiB0b3VrYVwgOwor5rih5p2lID4gdG9yYWlcIDsKK+WQjei+niA+IG1laWppXCA7CivmgaXpg6ggPiBjaGlidVwgOwor56ul5a2QID4gZG91amlcIDsKK+aHuOW/tSA+IGtlbmVuXCA7CivmgqrooYwgPiBha2tvdVwgOwor6YW46by7ID4gc2FuYmlcIDsKK+a3oea5liA+IHRhbmtvXCA7Civpu4ToirEgPiBrb3VrYVwgOwor5oiQ5bCxID4gam91anVcIDsKK+enn+eojiA+IHNvemVpXCA7CivlloTmhI8gPiB6ZW4nJ2lcIDsKK+WXn+WYhiA+IHNhdGFuXCA7CivmuIXmpZogPiBzZWlzb1wgOwor6byg55uXID4gc290b3VcIDsKK+azsOiqniA+IHRhaWdvXCA7CivmhJvnpL4gPiBhaXNoYVwgOwor5rK/6YGTID4gZW5kb3VcIDsKK+WWquWutiA+IHNvdWthXCA7Civlj6Tpiq0gPiBrb3NlblwgOwor56S+6LK7ID4gc2hhaGlcIDsKK+erpeWlsyA+IGRvdWpvXCA7CivlkKboqo0gPiBoaW5pblwgOwor5rq25YyWID4geW91a2FcIDsKK+a5luW6lSA+IGtvdGVpXCA7Civmt4vmvJMgPiByaW5yaVwgOwor5omA5ZOhID4gc2hvaW5cIDsKK+WYieS+iyA+IGthcmVpXCA7CivmuIXmoIQgPiBzZWllaVwgOwor6byg55arID4gc29la2lcIDsKK+WWhOW+jCA+IHplbmdvXCA7CivnpYjoq4sgPiBraXNlaVwgOwor5rOV6LKoID4gaG91a2FcIDsKK+eliOiqkyA+IGtpc2VpXCA7CivmtYHnvaogPiBydXphaVwgOwor56uv5Z2QID4gdGFuemFcIDsKK+WXmuWSvSA+IG9ldHN1XCA7CivmganotaYgPiBvbnNoYVwgOwor5ZKM57SZID4gd2FzaGlcIDsKK+aJi+WLoiA+IHRlemVpXCA7CivmuJvmkakgPiBnZW5tYVwgOwor5Y+w6L6eID4gZGFpamlcIDsKK+a3mOaxsCA+IHRvdXRhXCA7Civmganos5wgPiBvbnNoaVwgOwor5rSS6JC9ID4gc2hhcmVcIDsKK+a1t+eggiA+IGthaXNhXCA7CivmiYvliY0gPiB0ZW1hZVwgOwor5Y+w6LyqID4gZGFpd2FcIDsKK+a5luWyuCA+IGtvZ2FuXCA7CivmtLXnvo4gPiBqdW5iaVwgOwor5Y+k6YGTID4ga29kb3VcIDsKK+esrOS6lCA+IGRhaWdvXCA7CivnrKzkuowgPiBkYWluaVwgOwor56S66KuHID4gamlkYW5cIDsKK+mHjumDjiA+IHlhcm91XCA7Civph47pgbggPiB5YXNlblwgOwor5rOV6KqeID4gaG91Z29cIDsKK+WQiOitsCA+IGdvdWdpXCA7Civms5XoqbEgPiBob3V3YVwgOwor5rGX6aasID4ga2FuYmFcIDsKK+aHh+aEjyA+IGtvbicnaVwgOwor5oeK5oKpID4gb3Vub3VcIDsKK+aJk+WAkiA+IGRhdG91XCA7CivlkI3oqokgPiBtZWl5b1wgOwor5oSa55e0ID4gZ3VjaGlcIDsKK+WWtuWboyA+IGVpZGFuXCA7CivmsLTpto8gPiBrdWluYVwgOwor5Y+J6YqDID4gc2FqdXVcIDsKK+a4qeaDhSA+IG9uam91XCA7Civnp7vniZIgPiBpY2hvdVwgOwor56uL5aSPID4gcmlra2FcIDsKK+WUkOaqnCA+IHRvdWhpXCA7Civmg4XnvqkgPiBqb3VnaVwgOwor6Yym5peXID4ga2lua2lcIDsKK+aEm+eUqCA+IGFpeW91XCA7Civms5Xopo8gPiBob3VraVwgOwor5oeI5oCgID4gZ2V0YWlcIDsKK+enn+eVjCA+IHNva2FpXCA7CivmhJrnlJ8gPiBndXNlaVwgOwor6YeI6L+mID4gc2hha2FcIDsKK+a5r+WeoiA+IHl1YWthXCA7CivmgYvot68gPiBrb2lqaVwgOwor5rS+57GzID4gaGFiZWlcIDsKK+aIkOWboCA+IHNlaWluXCA7CivljqbploAgPiBrYW1vblwgOwor5rOV6KKrID4gaGFwcGlcIDsKK+a0i+iIniA+IHlvdWJ1XCA7CivomY7ni7wgPiBrb3JvdVwgOwor5Y+k6La+ID4ga29zaGlcIDsKK+iXjeiJsiA+IGFpaXJvXCA7Civnq6/ljYggPiB0YW5nb1wgOwor6Jma54ShID4ga3lvbXVcIDsKK+aJi+S7oyA+IHRlZGFpXCA7CivmhJvnjqkgPiBhaWdhblwgOwor5Y+X6LqrID4gdWtlbWlcIDsKK+aDqOemjSA+IHNhbmthXCA7CivmuKHlvqEgPiB0b2d5b1wgOwor5rC06a2UID4gc3VpbWFcIDsKK+mHjui2oyA+IHlhc2h1XCA7Civlj6Tos6IgPiBrb2tlblwgOwor5oim5YuZID4gc2VubXVcIDsKK+a1rueUnyA+IGZ1c2VpXCA7Civlv6vpn7MgPiBrYWlvblwgOwor5Zan5ZipID4ga2Vua2FcIDsKK+eomuawlyA+IGNoaWtpXCA7CivmuKnluK8gPiBvbnRhaVwgOwor5omA5L2cID4gc2hvc2FcIDsKK+WPpOixqiA+IGtvZ291XCA7Civph5HosqggPiBraW5rYVwgOwor5oSb54qsID4gYWlrZW5cIDsKK+a1t+eNuiA+IHJha2tvXCA7CivmiJDlk6EgPiBzZWlpblwgOwor5rqW5YKZID4ganVuYmlcIDsKK+aDo+ekviA+IHNvdWphXCA7Civno6/ovrogPiBpc29iZVwgOwor6Ymb566hID4gZW5rYW5cIDsKK+m8u+axgSA+IGJpanV1XCA7Civmtbfni7ggPiBrYWlyaVwgOwor5oOw55ygID4gZGFtaW5cIDsKK+aIv+S6iyA+IGJvdWppXCA7Civlj5nos5wgPiBqb3NoaVwgOwor5oiQ5ZCmID4gc2VpaGlcIDsKK+WPl+i0iCA+IGp1em91XCA7CivmgqrnvbUgPiBha3ViYVwgOwor5oiQ5Y+lID4gc2Vpa3VcIDsKK+aJgOS4jiA+IHNob3lvXCA7CivmgqPogIUgPiBrYW5qYVwgOwor5Y+k6Ku6ID4ga29nZW5cIDsKK+WPr+imliA+IGthc2hpXCA7Civlj6Xoqq0gPiBrdXRvdVwgOwor6buE56aNID4ga291a2FcIDsKK+eosuacqCA+IGluYWdpXCA7CivmiKblgpkgPiBzZW5iaVwgOwor5Y+j6KqeID4ga291Z29cIDsKK+WPpOipqSA+IGtvc2hpXCA7CivmiLjkuLsgPiBrb3NodVwgOwor6YeM6KyhID4gcml5b3VcIDsKK+WPpOiokyA+IGtva3VuXCA7Civnqbrlt6MgPiBha2lzdVwgOwor5Y+k6KiAID4ga29nZW5cIDsKK+aCque4gSA+IGFrdWVuXCA7CivmuKnlrZggPiBvbnpvblwgOwor5Y+X6KybID4ganVrb3VcIDsKK+WNsOmdoiA+IGlubWVuXCA7Civmsb3ou4ogPiBraXNoYVwgOwor5Y+h6KanID4gZWlyYW5cIDsKK+m7hOeggiA+IGtvdXNhXCA7CivnqY7miY0gPiBlaXNhaVwgOwor6YeM6KiAID4gcmlnZW5cIDsKK+WNmOmojiA+IHRhbmtpXCA7Civpho3phpAgPiBkYWlnb1wgOwor5riI5bqmID4gc2FpZG9cIDsKK+WNsemboyA+IGtpbmFuXCA7Civms7PogIUgPiBlaXNoYVwgOwor5ZCN6I+TID4gbWVpa2FcIDsKK+WPguizgCA+IHNhbmdhXCA7CivljbHpmbogPiBraWtlblwgOwor5Za25YCJID4gZWlzb3VcIDsKK+WWquWFtyA+IHNvdWd1XCA7Civlv4XpoIggPiBoaXNzdVwgOwor5oaC5oe8ID4geXV1a3VcIDsKK+WPjeiqniA+IGhhbmdvXCA7CivpvLvmoLkgPiBiaWtvblwgOwor5Y+L6Kq8ID4geXV1Z2lcIDsKK+WQjeiKsSA+IG1laWthXCA7CivmsbrotbcgPiBrZWtraVwgOwor6bq7552hID4gbWFzdWlcIDsKK+WPjeiotCA+IGhhbnNvXCA7Civpi63mlY8gPiBlaWJpblwgOwor6JiH55SfID4gc29zZWlcIDsKK+aEm+a2siA+IGFpZWtpXCA7Civlj4LorbAgPiBzYW5naVwgOwor5ZCN6IiXID4gbWVpaG9cIDsKK+a0vueUnyA+IGhhc2VpXCA7Civnp5jmua8gPiBoaXRvdVwgOwor6buE55a4ID4gb3VkYW5cIDsKK+awl+miqCA+IGtpZnV1XCA7Civmtbfmt7UgPiBrYWllblwgOwor56m05a2QID4gYW5hZ29cIDsKK+WWh+WPrSA+IHJhcHBhXCA7CivpjbzljLsgPiBoYXJpaVwgOwor5oCq6KidID4ga2VnZW5cIDsKK+iWrOe9kCA+IHlha2FuXCA7CivolqznvLYgPiB5YWthblwgOwor5oCd6K2wID4gc2hpZ2lcIDsKK+epj+W9kyA+IG9udG91XCA7Civph47om64gPiB5YWJhblwgOwor5Y2w6ZGRID4gaW5rYW5cIDsKK+aAqOiogCA+IGVuZ2VuXCA7CivljYjppJAgPiBnb3NhblwgOwor5b6u6aKoID4gYmlmdXVcIDsKK+a4r+WbsyA+IGtvdXp1XCA7CivmsZrovrEgPiBvam9rdVwgOwor5ZOA5q2TID4gYWlrYW5cIDsKK+a1rua4uCA+IGZ1eXV1XCA7CivoloTojbcgPiBoYWtrYVwgOwor6YqD54GrID4ganV1a2FcIDsKK+aEmuawkSA+IGd1bWluXCA7Civnp5jms5UgPiBoaWhvdVwgOwor5ZGI56S6ID4gdGVpamlcIDsKK+WWquS4uyA+IG1vc2h1XCA7CivljZfpmL8gPiBuYW4nJ2FcIDsKK+a1rua1qiA+IGZ1cm91XCA7Civpu4Tnj60gPiBvdWhhblwgOwor5ri+5ZCNID4gYWRhbmFcIDsKK+a1t+awlyA+IGthaWtpXCA7CivlvqHpo68gPiBnb2hhblwgOwor5rCX6ZqPID4ga2l6dWlcIDsKK+WQjee+qSA+IG1laWdpXCA7Civms6Lnt5ogPiBoYXNlblwgOwor5rKZ6JqVID4gZ29rYWlcIDsKK+WQjOe+qSA+IGRvdWdpXCA7CivljZHpmYsgPiBoaXJvdVwgOwor5rCR6ZyAID4gbWluanVcIDsKK+eogOabuCA+IGtpc2hvXCA7CivomZrmoIQgPiBreW9laVwgOwor5raF5qeDID4gbmVoYW5cIDsKK+a3u+WtlyA+IHNvZWppXCA7CivlkIjnvr0gPiBrYXBwYVwgOwor5ZOh5pWwID4gaW56dXVcIDsKK+a1ruawlyA+IHV3YWtpXCA7Civms6LntIsgPiBoYW1vblwgOwor56aF55S7ID4gemVuZ2FcIDsKK+eptOWgtCA+IGFuYWJhXCA7CivnopHpipggPiBoaW1laVwgOwor5ZKM5ryiID4gd2FrYW5cIDsKK+aHkOWPpCA+IGthaWtvXCA7CivmhI/mrLIgPiBpeW9rdVwgOwor5oOF55CGID4gam91cmlcIDsKK+mLreaEnyA+IGVpa2FuXCA7Civph47oj5wgPiB5YXNhaVwgOwor5Y+k6Iy2ID4ga29jaGFcIDsKK+elnuelhyA+IGppbmdpXCA7CivmtYTngasgPiBqb3VrYVwgOwor56We56S+ID4gamluamFcIDsKK+m7hOeHkCA+IG91cmluXCA7CivmtYXngKwgPiBhc2FzZVwgOwor5rK56ISCID4geXVzaGlcIDsKK+W+oemboyA+IGdvbmFuXCA7CivpiZvniYggPiBlbmJhblwgOwor6YeN6I23ID4ganV1a2FcIDsKK+ibueWMliA+IHlvdWthXCA7Civph47ojYkgPiB5YXNvdVwgOwor5b6h6ZmwID4gb2thZ2VcIDsKK+WPr+iDvSA+IGthbm91XCA7Civljp/oqp4gPiBnZW5nb1wgOwor6JqV5bqnID4gc2FuemFcIDsKK+awtOmBiyA+IHN1aXVuXCA7CivmuKnljpogPiBvbmtvdVwgOwor5rmW5LiKID4ga29qb3VcIDsKK+WPs+e/vCA+IHV5b2t1XCA7CivpioDms6IgPiBnaW5wYVwgOwor5Y6a6Kq8ID4ga291Z2lcIDsKK+W+jOmhpyA+IGtvdWtvXCA7CivpioDmsrMgPiBnaW5nYVwgOwor5oWV5oOFID4gYm9qb3VcIDsKK+WSjOa0iyA+IHdheW91XCA7CivllZblkbUgPiB0YW5rYVwgOwor5ZCN57C/ID4gbWVpYm9cIDsKK+WMu+mVtyA+IGljaG91XCA7CivljLrplpMgPiBrdWthblwgOwor5rSL55S7ID4geW91Z2FcIDsKK+a3i+W3tCA+IHJpbnBhXCA7CivlloTkuosgPiB6ZW5qaVwgOwor5rim5YuVID4ga2Fkb3VcIDsKK+iWrOemjSA+IHlha2thXCA7CivmhYfmh4MgPiBpbmdpblwgOwor5b+16KqmID4gbmVuanVcIDsKK+aEm+abuCA+IGFpc2hvXCA7CivnpYjnpbcgPiBraXRvdVwgOwor5YyV6aaWID4gaGlzaHVcIDsKK+ayv+e3miA+IGVuc2VuXCA7Civph5HogqUgPiBraW5waVwgOwor5Y+k6IGWID4ga29zZWlcIDsKK+aDheeElCA+IGpvdWVuXCA7Civljp/ooqsgPiBnZW5waVwgOwor6JWX6I2JID4gcm9zb3VcIDsKK+a3q+WllCA+IGlucG9uXCA7Civlj6PogLMgPiBrb3VqaVwgOwor5Y+k6ICBID4ga29yb3VcIDsKK+awl+mHjSA+IGtpb21vXCA7CivljZfpg70gPiBuYW50b1wgOwor5Y2X6YOoID4gbmFuYnVcIDsKK+mJseayuSA+IGtvdXl1XCA7Civmg4Xngo4gPiBqb3VlblwgOwor5rer5aOyID4gaW5iYWlcIDsKK+enmOacrCA+IGhpaG9uXCA7CivmhJrmmKcgPiBndW1haVwgOwor5rWB5rWqID4gcnVyb3VcIDsKK+aDheeBqyA+IGpvdWthXCA7CivmsLTot68gPiBzdWlyb1wgOwor5oWI5oG1ID4gamlrZWlcIDsKK+enmOabuCA+IGhpc2hvXCA7CivmsJfphY0gPiBrZWhhaVwgOwor6Jas56CUID4geWFnZW5cIDsKK+WPl+iDjiA+IGp1dGFpXCA7Civlvq7phrogPiBiaWt1blwgOwor5Y2K6YeMID4gaGFucmlcIDsKK+azleenkSA+IGhvdWthXCA7CivmsrnntJkgPiB5dXNoaVwgOwor56iy5a2QID4gaW5hZ29cIDsKK+awl+mBkyA+IGtpZG91XCA7Civmr5TpoZ4gPiBoaXJ1aVwgOwor5rWB5rCRID4gcnVtaW5cIDsKK+WNg+mHjCA+IHNlbnJpXCA7Civnp5jmlrkgPiBoaWhvdVwgOwor5ZCM56WWID4gZG91c29cIDsKK+aFi+W6piA+IHRhaWRvXCA7CivpiYTngasgPiB0ZWtrYVwgOwor5rKz57O7ID4ga2FrZWlcIDsKK+engeahiCA+IHNoaWFuXCA7Civnpo3mupAgPiBrYWdlblwgOwor56C06aGUID4gaGFnYW5cIDsKK+WNkei/kSA+IGhpa2luXCA7Civpu4TmsrMgPiBrb3VnYVwgOwor5b6h6YecID4gb2thbWFcIDsKK+W+oemHkSA+IG9rYW5lXCA7Civmtabmm7IgPiB1cmF3YVwgOwor5rS75rCXID4ga2Fra2lcIDsKK+WNiumAlCA+IGhhbnRvXCA7CivnqIvluqYgPiB0ZWlkb1wgOwor6YeN57iBID4ganV1ZW5cIDsKK+WPpOe0mSA+IGtvc2hpXCA7Civpg6jpppYgPiBidXNodVwgOwor6YO96Zu7ID4gdG9kZW5cIDsKK+m8k+aJiyA+IGtvc2h1XCA7CivpioPmnrYgPiBqdXVrYVwgOwor5re35ZKMID4ga29ud2FcIDsKK+axveiJhyA+IGtpdGVpXCA7Civmsb3oiLkgPiBraXNlblwgOwor5q+U6ZqjID4gaGlyaW5cIDsKK+aEmuaMmSA+IGd1a3lvXCA7Civlj4vnvqkgPiB5dXVnaVwgOwor5Y+k57GzID4ga29tYWlcIDsKK+WTgOaGqyA+IGFpYmluXCA7CivmuJvkvqEgPiBnZW5rYVwgOwor5ZOA5oaQID4gYWlyZW5cIDsKK+W9qembsiA+IHNhaXVuXCA7CivmsrPnq6UgPiBrYXBwYVwgOwor5re15Y+iID4gZW5zb3VcIDsKK+mDqOmhniA+IGJ1cnVpXCA7Civlk4DmhJ8gPiBhaWthblwgOwor5rOV55qHID4gaG91b3VcIDsKK+WTgOaEjSA+IGFpYmluXCA7CivolKzoj5wgPiBzb3NhaVwgOwor56Oo6ICXID4gbWFtb3VcIDsKK+a1ruaPmiA+IGZ1eW91XCA7CivlkozmnKwgPiB3YWhvblwgOwor5ray5a6JID4gZWtpYW5cIDsKK+epuuS9kCA+IGt1dXNhXCA7CivmuKHkuJYgPiB0b3NlaVwgOwor5Y+X57SNID4ganVub3VcIDsKK+WUkOWcnyA+IHRvdWRvXCA7Civmt7vliqAgPiB0ZW5rYVwgOwor5ZOA5oOFID4gYWlqb3VcIDsKK+WTgOaCvCA+IGFpdG91XCA7Civlkozmm7ggPiB3YXNob1wgOwor5oSb5oaQID4gYWlyZW5cIDsKK+egtOmWgCA+IGhhbW9uXCA7Civlj5fnsr4gPiBqdXNlaVwgOwor5oKq5ryiID4gYWtrYW5cIDsKK+WNkeizpCA+IGhpc2VuXCA7CivmhoLlk60gPiB1a2luZVwgOwor5Y2R6LOOID4gaGlzZW5cIDsKK+WPl+eyiSA+IGp1ZnVuXCA7Civpg6jpnaIgPiBidW1lblwgOwor6by75a2UID4gYmlrb3VcIDsKK+enkeaMmSA+IGtha3lvXCA7Civnn67pto8gPiBjaGFib1wgOwor5q+r6YeQID4gZ291cmlcIDsKK+aEm+aDsyA+IGFpc291XCA7Civmg4XmrYwgPiBqb3VrYVwgOwor6buE5qWKID4gdHN1Z2VcIDsKK+aEm+aDhSA+IGFpam91XCA7Civpi7PlnosgPiBpZ2F0YVwgOwor5b6u6LOkID4gYmlzZW5cIDsKK+W+ruizjiA+IGJpc2VuXCA7Civlvozpg6ggPiBrb3VidVwgOwor5Y2w6KGMID4gaW5rb3VcIDsKK+WQjeeUuyA+IG1laWdhXCA7CivpvKDlt6MgPiBzb3NvdVwgOwor6YOo6ZqKID4gYnV0YWlcIDsKK+WSjOaWhyA+IHdhYnVuXCA7Civmsb3nvZAgPiBraWthblwgOwor5rG957y2ID4ga2lrYW5cIDsKK+aEj+aFviA+IGl5b2t1XCA7CivljZjoqp4gPiB0YW5nb1wgOwor6JaE552AID4gdXN1Z2lcIDsKK+aDheapnyA+IGpvdWtpXCA7Civms6LnirYgPiBoYWpvdVwgOwor56S654++ID4gamlnZW5cIDsKK+m7hOahgyA+IG91dG91XCA7Civlj6TnpaAgPiBrb3NoaVwgOwor6JaE55uuID4gdXN1bWVcIDsKK+WRkeawlyA+IG5vbmtpXCA7CivlvpLovKkgPiB0b2hhaVwgOwor5rOV55CGID4gaG91cmlcIDsKK+mHjOeoiyA+IHJpdGVpXCA7CivljZjoqJggPiB0YW5raVwgOwor56Gs6LKoID4ga291a2FcIDsKK+mHjuemvSA+IHlha2luXCA7Civph43np5EgPiBqdXVrYVwgOwor6YOo6ZaAID4gYnVtb25cIDsKK+W+hemBvyA+IHRhaWhpXCA7CivmhYjlp5EgPiBrdXdhaVwgOwor6JuH5L2TID4gamF0YWlcIDsKK+aEn+W6piA+IGthbmRvXCA7CivpvI7luqcgPiB0ZWl6YVwgOwor5rOV546LID4gaG91b3VcIDsKK+eoveWPpCA+IGtlaWtvXCA7CivmhJrlvJ8gPiBndXRlaVwgOwor5oSa5byEID4gZ3Vyb3VcIDsKK+m8u+WjsCA+IGJpc2VpXCA7CivolqvnhZkgPiBrdW5lblwgOwor5Y+j56KRID4ga291aGlcIDsKK+W+gOmChCA+IG91a2FuXCA7CivmsoPntKAgPiB5b3Vzb1wgOwor5ZCI55CGID4gZ291cmlcIDsKK+ayu+eZkiA+IGNoaXl1XCA7CivmgrLmrY4gPiBoaXRhblwgOwor5rGa6IetID4gb3NodXVcIDsKK+WNkeiogCA+IGhpZ2VuXCA7CivliqDpvaIgPiBrYXJlaVwgOwor5b6B6YCUID4gc2VpdG9cIDsKK+m8oOWusyA+IHNvZ2FpXCA7CivlvKfpq5ggPiBrb2tvdVwgOwor6Ymb5p2/ID4gZW5iYW5cIDsKK+awkeipsSA+IG1pbndhXCA7Civmr5Tph40gPiBoaWp1dVwgOwor5Y2R6KaLID4gaGlrZW5cIDsKK+WToeWkliA+IGluZ2FpXCA7CivlvoDov5QgPiBvdWhlblwgOwor56aN5qC5ID4ga2Frb25cIDsKK+iZmuWtlyA+IGt5b2ppXCA7Civmt7vku5ggPiB0ZW5wdVwgOwor5oaR5L6dID4gaHlvdWlcIDsKK+mHjuegsiA+IHlhaG91XCA7Civlj6Hnn6UgPiBlaWNoaVwgOwor56i85YuVID4ga2Fkb3VcIDsKK+WNmOihoyA+IGhpdG9lXCA7CivmhInlv6sgPiB5dWthaVwgOwor56mP5YGlID4gb25rZW5cIDsKK+WOn+e+qSA+IGdlbmdpXCA7Civms6LngL4gPiBoYXJhblwgOwor5rK555SwID4geXVkZW5cIDsKK+W8vumbqCA+IGRhbicndVwgOwor56mP5L6/ID4gb25iaW5cIDsKK+azoua/pCA+IGhhdG91XCA7Civlj7DnlKsgPiB0YWlob1wgOwor6YO96YKRID4gdG95dXVcIDsKK+WSjOaIpiA+IHdhc2VuXCA7Civlj6/nlKggPiBrYXlvdVwgOwor6bm55rmWID4ga2Fua29cIDsKK+ays+eVlCA+IGthaGFuXCA7Civli4fpo5sgPiB5dXVoaVwgOwor5Y2K6KO4ID4gaGFucmFcIDsKK+W+hOi3ryA+IGtlaXJvXCA7CivlvqHoqaAgPiBneW9laVwgOwor6YeN55uuID4gb21vbWVcIDsKK+WNiuiiqyA+IGhhcHBpXCA7Civnp4HmgKggPiBzaGllblwgOwor56CC6ZiyID4gc2Fib3VcIDsKK+W+ruihjCA+IGJpa291XCA7CivlkarmlocgPiBqdW1vblwgOwor5rOz5rOVID4gZWlob3VcIDsKK+W+oeimpyA+IGdvcmFuXCA7CivnqLzlg40gPiBrYWRvdVwgOwor5ZCQ54CJID4gdG9zaGFcIDsKK+a3q+S5sSA+IGlucmFuXCA7Civlj5fnm4ogPiBqdWVraVwgOwor56We5q2mID4gamlubXVcIDsKK+WQiOeCuSA+IGdhdGVuXCA7CivmhJvlrasgPiBhaXNvblwgOwor5rWF5omLID4gYXNhZGVcIDsKK+aEm+WtgyA+IGFpam91XCA7CivompXlhbcgPiBzYW5ndVwgOwor6YqD5b6MID4ganV1Z29cIDsKK+aEm+WsoiA+IGFpam91XCA7Civljp/ntKAgPiBnZW5zb1wgOwor6JqV5YWQID4gc2FuamlcIDsKK+aFiOWWhCA+IGppemVuXCA7Civmg7DmgKcgPiBkYXNlaVwgOwor5rK554q2ID4geXVqb3VcIDsKK+mHjueUnyA+IHlhc2VpXCA7Civms6LmtaogPiBoYXJvdVwgOwor56eY5a6dID4gaGlob3VcIDsKK+iTruiPryA+IHJlbmdlXCA7CivmhJvlqb8gPiBhaXNlaVwgOwor5b+N6IumID4gbmlua3VcIDsKK+mKg+W6pyA+IGp1dXphXCA7CivljrPnp5ggPiBnZW5waVwgOwor5Y6f57C/ID4gZ2VuYm9cIDsKK+WOs+enkSA+IGdlbmthXCA7Civpi63lhbUgPiBlaWhlaVwgOwor6YqA5bqnID4gZ2luemFcIDsKK+mDoemDqCA+IGd1bmJ1XCA7CivpvLvlj6MgPiBiaWtvdVwgOwor5b6M6KiYID4ga291a2lcIDsKK+aEm+WmuyA+IGFpc2FpXCA7CivmhJrlprsgPiBndXNhaVwgOwor5oW25LqLID4ga2VpamlcIDsKK+eojuWQjyA+IHplaXJpXCA7CivmhJvlpb0gPiBhaWtvdVwgOwor5Yq06Z+zID4gcm91b25cIDsKK+WPr+eHgyA+IGthbmVuXCA7CivmtrLljJYgPiBla2lrYVwgOwor5ZCd5rCXID4gcmlua2lcIDsKK+mEmeimiyA+IGhpa2VuXCA7CivlkozlubMgPiB3YWhlaVwgOwor6YeO542jID4geWFqdXVcIDsKK+mzs+mnlSA+IGhvdWdhXCA7Civph47njKogPiB5YWNob1wgOwor6YKq6Zm6ID4gamFrZW5cIDsKK+W+kuihjCA+IHRva291XCA7CivmsLTogqUgPiBzdWloaVwgOwor5Y+k54mIID4ga29oYW5cIDsKK+WLn+mHkSA+IGJva2luXCA7Civlvozoo5QgPiBrb3VlaVwgOwor5b6Q6KGMID4gam9rb3VcIDsKK+WQjOa0viA+IGRvdWhhXCA7CivphbjntKAgPiBzYW5zb1wgOwor5b6A6KiqID4gb3Vob3VcIDsKK+mHjueKrCA+IHlha2VuXCA7Civlu7bpq4QgPiBlbnp1aVwgOwor56iO5YuZID4gemVpbXVcIDsKK+aCquaXpSA+IGFrdWJpXCA7CivnqJrlhZAgPiBjaGlnb1wgOwor5Yqg6aSQID4ga2FzYW5cIDsKK+WKoOmkiiA+IGtheW91XCA7Civmra/pn7MgPiBzaGlvblwgOwor5b6M6KGbID4ga291ZWlcIDsKK+mFtee0oCA+IGtvdXNvXCA7Civpg4rph44gPiBrb3V5YVwgOwor56eB5a62ID4gc2hpa2FcIDsKK+m8juWdkCA+IHRlaXphXCA7Civlv43ogIUgPiBuaW5qYVwgOwor5Yy76JasID4gaXlha3VcIDsKK+ekvuatjCA+IHNoYWthXCA7CivpvLvlhoUgPiBiaW5haVwgOwor5b6h6JStID4gb2thZ2VcIDsKK+WLoumBiyA+IHNlaXVuXCA7CivlkIzmsJcgPiBkb3VraVwgOwor5Y+l54K5ID4ga3V0ZW5cIDsKK+egtOirhyA+IGhhZGFuXCA7CivlkozlsJogPiBvc2hvdVwgOwor5Y+j54KOID4ga291ZW5cIDsKK+W9k+i3ryA+IHRvdXJvXCA7CivmhYjlhYQgPiBqaWtlaVwgOwor5oOF5oSbID4gam91YWlcIDsKK+ato+mfsyA+IHNlaW9uXCA7CivlkI3mrYwgPiBtZWlrYVwgOwor6YOo6LKhID4gYnV6YWlcIDsKK+WPr+a6tiA+IGtheW91XCA7Civmsr/mtbcgPiBlbmthaVwgOwor6I+v6bqXID4ga2FyZWlcIDsKK+mJhOaJiSA+IHRlcHBpXCA7Civlkr3llokgPiBpbmtvdVwgOwor5rW35ZuzID4ga2FpenVcIDsKK+W+oeiPnCA+IG9rYXp1XCA7CivljbDntr8gPiBpbm1lblwgOwor5rWu5Z+OID4gZnVqb3VcIDsKK+aBkua4qSA+IGtvdW9uXCA7Civlj6Tmva0gPiBrb3RhblwgOwor5rKz5rivID4ga2Frb3VcIDsKK+ays+a4hSA+IGthc2VpXCA7CivljbDntJkgPiBpbnNoaVwgOwor5rCX6IOeID4ga2lob3VcIDsKK+WPo+a8lCA+IGtvdWVuXCA7CivpvJPlkLkgPiBrb3N1aVwgOwor5oSa5ZWPID4gZ3Vtb25cIDsKK+awtOe0oCA+IHN1aXNvXCA7CivomY7lj6MgPiBrb2tvdVwgOwor5b6h6IuRID4gZ3lvZW5cIDsKK+iSsuiWpiA+IGhvc2VuXCA7Civlk4Dlj7cgPiBhaWdvdVwgOwor5oKy5oakID4gaGlmdW5cIDsKK+WTgOWPsiA+IGFpc2hpXCA7CivpurvlubkgPiBvZ2FyYVwgOwor5b+c562UID4gb3V0b3VcIDsKK+WNsOexoCA+IGlucm91XCA7CivmrYzpoqggPiBrYWZ1dVwgOwor5q2m6ZaAID4gYnVtb25cIDsKK+WSjOWnpiA+IHdha2FuXCA7Civnp7vlhaUgPiBpbnl1dVwgOwor5oKy5oS0ID4gaGlzb3VcIDsKK+aui+mDqCA+IHphbmJ1XCA7Civms7DmlpcgPiB0YWl0b1wgOwor5oSf5Y+XID4ga2FuanVcIDsKK+atjOmhjCA+IGthZGFpXCA7CivmgrLmg6ggPiBoaXNhblwgOwor56aB5b+MID4ga2lua2lcIDsKK+aEm+WQnyA+IGFpZ2luXCA7Civmtbflk6EgPiBrYWlpblwgOwor6YG/6ZujID4gaGluYW5cIDsKK+mHjea5ryA+IG9tb3l1XCA7Civmg6Plq4EgPiBzb3VrYVwgOwor6byT5YuVID4ga29kb3VcIDsKK+asuumomSA+IGdpaGVuXCA7Civms5XmoYggPiBob3VhblwgOwor5b6h6IW5ID4gb25ha2FcIDsKK+WSjOWjsCA+IHdhc2VpXCA7CivmsrPmsLQgPiBrYXN1aVwgOwor5ZCN5qGIID4gbWVpYW5cIDsKK+aCsuaBiyA+IGhpcmVuXCA7CivmhJ/ljJYgPiBrYW5rYVwgOwor5q2m6ZGRID4gYnVrYW5cIDsKK+mBuumbhiA+IGlzaHV1XCA7Civlj6Xms5UgPiBrdWhvdVwgOwor5oCq54GrID4ga2Fpa2FcIDsKK+W+rue9qiA+IGJpemFpXCA7Civljp/nlLsgPiBnZW5nYVwgOwor5Y2X57evID4gbmFuJydpXCA7Civlj6Tms5UgPiBrb2hvdVwgOwor6Jma5YG9ID4ga3lvZ2lcIDsKK+WLsuiomCA+IGt1bmtpXCA7CivliaPprLwgPiBrZW5raVwgOwor6YeR5rOiID4ga2lucGFcIDsKK+a1t+WPgiA+IGlyaWtvXCA7Civnp5jlj7IgPiBoaXNoaVwgOwor6YKq6YGTID4gamFkb3VcIDsKK+eogOS7oyA+IGtpZGFpXCA7CivljrPniLYgPiBnZW5wdVwgOwor6Ymx5aSrID4ga291ZnVcIDsKK+aIuOOAhSA+IGtva291XCA7CivpioDlnLAgPiBnaW5qaVwgOwor56S+5pivID4gc2hhemVcIDsKK+ejgeeVjCA+IGppa2FpXCA7CivmtbfljLogPiBrYWlrdVwgOwor5Y2w56iOID4gaW56ZWlcIDsKK+WPo+awlyA+IGtvdWtpXCA7CivlkIzmnJ8gPiBkb3VraVwgOwor6YeN5rK5ID4ganV1eXVcIDsKK+mKheWZqCA+IGRvdWtpXCA7Civnn67ouq8gPiB3YWlrdVwgOwor5rKu5q2iID4gc29zaGlcIDsKK+ayueanvSA+IHl1c291XCA7Civnn63ouq8gPiB0YW5rdVwgOwor5oGL5q2MID4gcmVua2FcIDsKK+enkeWQjSA+IGthbWVpXCA7Civmgqrlv4MgPiBvc2hpblwgOwor6YqD5ZmoID4ganV1a2lcIDsKK+W8mOmBoCA+IGtvdWVuXCA7Civljp/nkIYgPiBnZW5yaVwgOwor5rGX55a5ID4gYXNlbW9cIDsKK+axl+eWoyA+IGFzZW1vXCA7CivmgqrlvpIgPiBha3V0b1wgOwor56G857SgID4gaG91c29cIDsKK+WPl+a0lyA+IGp1c2VuXCA7CivnqIDkuJYgPiBraXNlaVwgOwor56eB5Za2ID4gc2hpZWlcIDsKK+aEj+WMoCA+IGlzaG91XCA7CivpioDlmaggPiBnaW5raVwgOwor5rC056aNID4gc3Vpa2FcIDsKK+emjeWusyA+IGthZ2FpXCA7Civlv6vnmZIgPiBrYWl5dVwgOwor6YeR5q2vID4ga2luYmFcIDsKK+WQjOaZgiA+IGRvdWppXCA7Civnn63ot68gPiB0YW5yb1wgOwor6YGg6Z+zID4gdG9vbmVcIDsKK+W8lemAgCA+IGludGFpXCA7CivpgqPovrogPiBuYWhlblwgOwor5oOF5a6cID4gam91Z2lcIDsKK+aEmuWFhCA+IGd1a2VpXCA7Civmgp/mgKcgPiBnb3NlaVwgOwor5b6u57SwID4gYmlzYWlcIDsKK+WLleitsCA+IGRvdWdpXCA7Civmta7li5UgPiBmdWRvdVwgOwor5YuD6LW3ID4gYm9ra2lcIDsKK+aEmuWDpyA+IGd1c291XCA7Civlvozog6QgPiBrb3VpblwgOwor56aF5a62ID4gemVua2VcIDsKK+m7hOWkiSA+IG91aGVuXCA7CivliqDphY0gPiBrYWhhaVwgOwor5ZOB5L2NID4gaGluJydpXCA7CivlvoDoiKogPiBvdWtvdVwgOwor6YGg6Zu3ID4gZW5yYWlcIDsKK+W/teePoCA+IG5lbmp1XCA7CivmgpTmgp8gPiBrYWlnb1wgOwor5rCX566hID4ga2lrYW5cIDsKK+asp+miqCA+IG91ZnV1XCA7CivmtYTlnJ8gPiBqb3Vkb1wgOwor5ZCr5oSPID4gZ2FuJydpXCA7Civmg4XlqaYgPiBqb3VmdVwgOwor6YeN5qmfID4ganV1a2lcIDsKK+aCp+W3pyA+IHJpa291XCA7CivmsJfnrZIgPiBraXRvdVwgOwor5oCS5r+kID4gZG90b3VcIDsKK+aDueWPpSA+IGpha2t1XCA7CivmranpgZMgPiBob2RvdVwgOwor56Oo5resID4gbWFzYWlcIDsKK+avm+iJsiA+IGtlaXJvXCA7CivmsLjnnKAgPiBlaW1pblwgOwor5by36Ki0ID4gZ291c29cIDsKK+WShOWXnyA+IHRvc3NhXCA7Civnp4HljbAgPiBzaGlpblwgOwor5q2m6YGTID4gYnVkb3VcIDsKK+ato+mCqiA+IHNlaWphXCA7Civlj43mr5QgPiBoYW5waVwgOwor5Yqf6YGOID4ga291a2FcIDsKK+WNsOebuCA+IGluem91XCA7CivljJbohr8gPiBrYW5vdVwgOwor5qyh6aGeID4gamlydWlcIDsKK+WPjeatryA+IHNvcHBhXCA7Civlj43mrakgPiB0YW5idVwgOwor5Ymq6ZmkID4gc2Vuam9cIDsKK+WPsOacqCA+IGRhaWdpXCA7Civms6jmhI8gPiBjaHV1aVwgOwor5Y+N5q2MID4gaGFua2FcIDsKK+mGuOavjSA+IGpvdWJvXCA7CivliY3pp4YgPiB6ZW5rdVwgOwor5q2m6L66ID4gYnVoZW5cIDsKK+W6p+mrmCA+IHpha291XCA7Civmg4XlpKsgPiBqb3VmdVwgOwor5ZKM5ZCNID4gd2FtZWlcIDsKK+aEm+S6uiA+IGFpamluXCA7CivlkozlkIggPiB3YWdvdVwgOwor5Yqx6LW3ID4gcmVpa2lcIDsKK+WNiuerryA+IGhhbnBhXCA7CivoloTml6UgPiB1c3ViaVwgOwor5oSa5Lq6ID4gZ3VqaW5cIDsKK+m7hOWcnyA+IGtvdWRvXCA7Civlv5znlKggPiBvdXlvdVwgOwor6YKm6LKoID4gaG91a2FcIDsKK+engeWIqSA+IHNoaXJpXCA7CivnoLToiLkgPiBoYXNlblwgOwor5ZCm5b+cID4gaXlhb3VcIDsKK+WMu+exjSA+IGlzZWtpXCA7CivljJbogrIgPiBrYWlrdVwgOwor56eY5LydID4gaGlkZW5cIDsKK+avjeiJpiA+IGJva2FuXCA7Civlj5fmpJwgPiBqdWtlblwgOwor5rK55patID4geXVkYW5cIDsKK+edoemtlCA+IHN1aW1hXCA7Civmr43oiLkgPiBib3NlblwgOwor56SO5p2QID4gc296YWlcIDsKK+W7g+mZpCA+IGhhaWpvXCA7Civlj6TmnaUgPiBrb3JhaVwgOwor5rW35LqLID4ga2FpamlcIDsKK+awuOeUnyA+IGVpc2VpXCA7CivliqnotbAgPiBqb3NvdVwgOwor6YGK6ZuiID4geXV1cmlcIDsKK+aAkua2myA+IGRvdG91XCA7CivnpYjlv7UgPiBraW5lblwgOwor5q2z6LK7ID4gc2FpaGlcIDsKK+elluW4qyA+IHNvc2hpXCA7Civlj6Tmm7ggPiBrb3Nob1wgOwor5ZGo5ZuyID4gc2h1dWlcIDsKK+axuuaysyA+IGtla2thXCA7Civpgbfpg70gPiBzZW50b1wgOwor5rG95rC0ID4ga2lzdWlcIDsKK+avlOiCqSA+IGhpa2VuXCA7CivljbDnkrAgPiBpbmthblwgOwor6YeO5pyrID4gbm96dWVcIDsKK+mHjuacmyA+IHlhYm91XCA7CivmhI/kuK0gPiBpY2h1dVwgOwor5oKq5ammID4gYWt1ZnVcIDsKK+WRvOWPtyA+IGtvZ291XCA7CivmraPot68gPiBzZWlyb1wgOwor6Ymx5Yy6ID4ga291a3VcIDsKK+aCquWphiA+IGFrdWJhXCA7CivpibHljJYgPiBrb3VrYVwgOwor5rOi5b2iID4gaGFrZWlcIDsKK+mCpuiqniA+IGhvdWdvXCA7Civlj6HmmbogPiBlaWNoaVwgOwor5ZCE5oi4ID4ga2Fra29cIDsKK+WJjemdniA+IHplbnBpXCA7CivmsZrmv4EgPiBvZGFrdVwgOwor5q+N6IOOID4gYm90YWlcIDsKK+atjOmBkyA+IGthZG91XCA7CivnooHnm6QgPiBnb2JhblwgOwor5q276KqeID4gc2hpZ29cIDsKK+WPr+aSkyA+IGthdG91XCA7CivmgrLlo64gPiBoaXNvdVwgOwor5byY6KqTID4gZ3V6ZWlcIDsKK+a1ruS4liA+IHVraXlvXCA7CivluqfpoK0gPiB6YXRvdVwgOwor5ZCQ5oGvID4gdG9pa2lcIDsKK+a1ruS4iiA+IGZ1am91XCA7Civlj6TmlrkgPiBrb2hvdVwgOwor5rWE5YyWID4gam91a2FcIDsKK+WPoeaXqCA+IGVpc2hpXCA7CivpgqroposgPiBqYWtlblwgOwor5Y+k5paHID4ga29tb25cIDsKK+aCquWlsyA+IGFrdWpvXCA7CivljJbnuYogPiBrYXNlblwgOwor5Y2I56CyID4gZ29ob3VcIDsKK+avm+e5lCA+IGtlb3JpXCA7CivmsZ/muZYgPiBnb3Vrb1wgOwor5oGp5oSbID4gb24nJ2FpXCA7CivmsJfnm7ggPiBraXNvdVwgOwor5oKy5aCxID4gaGlob3VcIDsKK+W+oeekviA+IG9uc2hhXCA7CivmgqrlpKIgPiBha3VtdVwgOwor5YyX57evID4gaG9rdWlcIDsKK+WPmeaZryA+IGpva2VpXCA7CivmraPosqggPiBzZWlrYVwgOwor5q2j6LKgID4gc2VpZnVcIDsKK+emgeWbuiA+IGtpbmtvXCA7CivlkJHlvowgPiBrb3Vnb1wgOwor56GF57SgID4ga2Vpc29cIDsKK+aBqeaDhSA+IG9uam91XCA7Civlj5vml5cgPiBoYW5raVwgOwor6JaE5omLID4gdXN1ZGVcIDsKK+aBqeaBtSA+IG9ua2VpXCA7CivmsLjniaIgPiBlaXJvdVwgOwor6YG66LmfID4gaXNla2lcIDsKK+mHjOaVsCA+IHJpc3V1XCA7CivljYjnnaEgPiBnb3N1aVwgOwor5byV6KaLID4gaW5rZW5cIDsKK+elluWulyA+IHNvc291XCA7CivmtYHliJEgPiBydWtlaVwgOwor5Yqp6KmeID4gam9zaGlcIDsKK+mKgOS9jSA+IGdpbicnaVwgOwor5Y+Z5paHID4gam9idW5cIDsKK+WNl+eUuyA+IG5hbmdhXCA7CivnpLrluqYgPiBzaGlkb1wgOwor6YG66LehID4gaXNla2lcIDsKK+mJhOWZqCA+IHRla2tpXCA7CivpgaXpgaAgPiB5b3VlblwgOwor5byB6K23ID4gYmVuZ29cIDsKK+WLpOiLpiA+IGtpbmt1XCA7Civmr5vns7ggPiBrZWl0b1wgOwor5Yqp6KiAID4gam9nb25cIDsKK+azleW6piA+IGhhdHRvXCA7CivljZfnk5wgPiBuYW5rYVwgOwor5bm96ay8ID4geXV1a2lcIDsKK+WMlueypyA+IGtld2FpXCA7Civmg4XlkbMgPiBqb3VtaVwgOwor5rGf5rKzID4ga291Z2FcIDsKK+WQpuWumiA+IGhpdGVpXCA7CivnoLTnt5ogPiBoYXNlblwgOwor5b2x57W1ID4ga2FnZWVcIDsKK+WQjOW6pyA+IGRvdXphXCA7CivnoLTntrsgPiBoYXRhblwgOwor5Y+j5o6IID4ga291anVcIDsKK+a0vuWFtSA+IGhhaGVpXCA7CivmgJ3moYggPiBzaGlhblwgOwor6JGh6JCEID4gYnVkb3VcIDsKK+W7uuitsCA+IGtlbmdpXCA7CivmraPoqrIgPiBzZWlrYVwgOwor5q+N57eaID4gYm9zZW5cIDsKK+WPjeaXlyA+IGhhbmtpXCA7CivmraPoqqQgPiBzZWlnb1wgOwor5oKy5ZiGID4gaGl0YW5cIDsKK+emheWRsyA+IHplbm1pXCA7Civpg6jnvbIgPiBidXNob1wgOwor5Y+v5oaQID4ga2FyZW5cIDsKK+aCquWboCA+IGFrdWluXCA7CivokpTntbUgPiBtYWtpZVwgOwor6YGO6YeNID4ga2FqdXVcIDsKK+WMleeuuCA+IGhpY2hvXCA7CivljYrnlLAgPiBoYW5kYVwgOwor5qyE6ZaTID4gcmFubWFcIDsKK+iRieiYrSA+IGhhcmFuXCA7CivmganluKsgPiBvbnNoaVwgOwor5q+N57O7ID4gYm9rZWlcIDsKK+mBiumHjCA+IHl1dXJpXCA7CivmsLTngasgPiBzdWlrYVwgOwor5oOo5LqLID4gc2FuamlcIDsKK+elreWZqCA+IHNhaWtpXCA7CivmgajluIMgPiBrb25idVwgOwor5rK55oCnID4geXVzZWlcIDsKK+ato+imjyA+IHNlaWtpXCA7CivnpoHlj6UgPiBraW5rdVwgOwor56S+5a+6ID4gc2hhamlcIDsKK+aBi+aFlSA+IHJlbmJvXCA7CivljLvnmYIgPiBpcnlvdVwgOwor6I+v6YGTID4ga2Fkb3VcIDsKK+mHjuaJiyA+IHlhc2h1XCA7CivnpL7lrrYgPiBzaGFrZVwgOwor6YeN5omLID4gb21vZGVcIDsKK+atpuijhSA+IGJ1c291XCA7Civph47miKYgPiB5YXNlblwgOwor5q2p6KGMID4gaG9rb3VcIDsKK+avm+eptCA+IGtlYW5hXCA7CivljZHnjKUgPiBoaXdhaVwgOwor56C0566XID4gaGFzYW5cIDsKK+WRkeWQkCA+IGRvbnRvXCA7CivmsrnlvakgPiB5dXNhaVwgOwor5Y+h5oWuID4gZWlyeW9cIDsKK+W+oeeUqCA+IGdveW91XCA7CivmtYHkurogPiBydW5pblwgOwor5Y+h5oSfID4gZWlrYW5cIDsKK+atjOisoSA+IGtheW91XCA7CivlkI3lrrYgPiBtZWlrYVwgOwor5b6h55K9ID4gZ3lvamlcIDsKK+WPluaJiyA+IHRvdHRlXCA7CivlkI3lrpsgPiBuYWF0ZVwgOwor5ZCM5a62ID4gZG91a2VcIDsKK+edgOmhniA+IGtpcnVpXCA7Civlj5fmiJIgPiBqdWthaVwgOwor6YGL6YCBID4gdW5zb3VcIDsKK+m7hOS9kyA+IG91dGFpXCA7CivmrYzoq5YgPiBrYXJvblwgOwor6YW15q+NID4ga291Ym9cIDsKK+elluWeiyA+IHNva2VpXCA7Civph43mhJsgPiBqdXVhaVwgOwor56We5ZmoID4gamluZ2lcIDsKK+WQjOWtlyA+IGRvdWppXCA7Civlj7DluqcgPiBkYWl6YVwgOwor5Ymy6LOmID4gd2FwcHVcIDsKK+ecn+mvmyA+IG1hZGFpXCA7Civlj5vmhI8gPiBoYW4nJ2lcIDsKK+atjOipniA+IGthc2hpXCA7CivnnJ/pr4kgPiBtYWdvaVwgOwor5q6L6IqxID4gemFua2FcIDsKK+m7hOS6uiA+IG91amluXCA7CivmsLTmuKkgPiBzdWlvblwgOwor6YGL6Ly4ID4gdW4nJ3l1XCA7Civol6nlhJIgPiBoYW5qdVwgOwor5Ymw6LK7ID4gam91aGlcIDsKK+WJjemDqCA+IHplbmJ1XCA7Civpupflj6UgPiByZWlrdVwgOwor56Oo5pCNID4gbWFzb25cIDsKK+mHjuaApyA+IHlhc2VpXCA7CivokYnojLYgPiBoYWRqYVwgOwor5Y+Z5oOFID4gam9qb3VcIDsKK+W+oeeOiSA+IG90YW1hXCA7CivpgZPot68gPiBkb3Vyb1wgOwor6YGL6LuiID4gdW50ZW5cIDsKK+W5vembhSA+IHl1dWdhXCA7CivliJ3pmaMgPiB1aWppblwgOwor5rK/5bK4ID4gZW5nYW5cIDsKK+mAo+mOliA+IHJlbnNhXCA7CivokYnoir0gPiB5b3VnYVwgOwor5rKz5bedID4ga2FzZW5cIDsKK+mBgei+niA+IHRvbmppXCA7CivliY3pgJQgPiB6ZW50b1wgOwor6YGN6LevID4gaGVucm9cIDsKK+mJm+S4uSA+IGVudGFuXCA7CivmsLTms7MgPiBzdWllaVwgOwor5ZCO5aaDID4ga291aGlcIDsKK+WQjeWmkyA+IG1laWdpXCA7Civlj6PluqcgPiBrb3V6YVwgOwor5b+X5rCXID4gc2hpa2lcIDsKK+WPm+W+kiA+IGhhbnRvXCA7Civph5HluqsgPiBraW5rb1wgOwor5Y2w5rGgID4gaW5jaGlcIDsKK+azpeWcnyA+IGRlaWRvXCA7CivmsrnlsaQgPiB5dXNvdVwgOwor5Yq06IumID4gcm91a3VcIDsKK+WPi+aEmyA+IHl1dWFpXCA7CivpgaDorIAgPiBlbmJvdVwgOwor5ZCM5aScID4gZG91eWFcIDsKK+mHjeW6piA+IGp1dWRvXCA7CivliY3ovKogPiBtYWV3YVwgOwor6YCA6ZmiID4gdGFpaW5cIDsKK+aDheS6iyA+IGpvdWppXCA7CivnoLTnoJUgPiBoYXNhaVwgOwor5Y2x5q6GID4ga2l0YWlcIDsKK+ayu+WuiSA+IGNoaWFuXCA7CivlibDoqp4gPiBqb3Vnb1wgOwor6YeO5birID4geWFzaGlcIDsKK+iQveiKsSA+IHJha2thXCA7Civlj7LlrrYgPiBzaGlrYVwgOwor6YiN5ZmoID4gZG9ua2lcIDsKK+aAp+aEmyA+IHNlaWFpXCA7CivlvJXoiKogPiBpbmtvdVwgOwor56CC57W1ID4gc3VuYWVcIDsKK+W+l+eJqSA+IGVtb25vXCA7CivmspnlvKUgPiBzaGFtaVwgOwor56Wt5YW3ID4gc2FpZ3VcIDsKK+WQq+WRsyA+IGdhbm1pXCA7CivlvoDnlJ8gPiBvdWpvdVwgOwor5YiG6ZuiID4gYnVucmlcIDsKK+mFjea1gSA+IGhhaXJ1XCA7CivlvJXoh7QgPiBpbmNoaVwgOwor5Y+N5b6SID4gaGFudG9cIDsKK+WIiOmZpCA+IGdhaWpvXCA7CivmgKjmgaggPiBlbmtvblwgOwor6YGg6KaWID4gZW5zaGlcIDsKK+elreWEgCA+IHNhaWdpXCA7CivphJnnjKUgPiBoaXdhaVwgOwor5q2v6Iq9ID4gc2hpZ2FcIDsKK+mBoOimiyA+IHRvb21pXCA7CivpubnlkbMgPiBrYW5taVwgOwor6I236aasID4gbml1bWFcIDsKK+ecn+mhlCA+IG1hZ2FvXCA7CivnoILns5YgPiBzYXRvdVwgOwor6YWS5rCXID4gc2h1a2lcIDsKK+m3ueaPmiA+IG91eW91XCA7CivliKnpiI0gPiByaWRvblwgOwor5oCd5oWVID4gc2hpYm9cIDsKK+aAoOaDsCA+IHRhaWRhXCA7CivliKnph5EgPiByaWtpblwgOwor5rKu5a6zID4gc29nYWlcIDsKK+WQjOWdkCA+IGRvdXphXCA7CivljLrngrkgPiBrdXRlblwgOwor5Y+L5byVID4geXV1aW5cIDsKK+mFlOatqSA+IHN1aWhvXCA7Civlh7npnaIgPiBvdW1lblwgOwor6YGT6KmxID4gZG91d2FcIDsKK+WMheeariA+IGhvdWhpXCA7CivpgLjotbAgPiBpc3NvdVwgOwor5buD6KqeID4gaGFpZ29cIDsKK+WQn+WRsyA+IGdpbm1pXCA7Civljq3miKYgPiBlbnNlblwgOwor5q2m6Iq4ID4gYnVnZWlcIDsKK+mBoeihjCA+IHNva291XCA7CivlkI3lmaggPiBtZWlraVwgOwor6I+v6KiAID4ga2FnZW5cIDsKK+W9seeUuyA+IGthZ2VlXCA7CivlvpLnhLYgPiB0b3plblwgOwor6YCj6L6eID4gcmVuamlcIDsKK+W6g+mHjiA+IGtvdXlhXCA7CivmsJfms6EgPiBraWhvdVwgOwor6YeR5a2XID4ga2luamlcIDsKK+W8pee4qyA+IGJpaG91XCA7Civph5HlrZAgPiBraW5zdVwgOwor5byn57eaID4ga29zZW5cIDsKK+asoOiqsiA+IGtla2thXCA7CivljZjmr5QgPiB0YW5waVwgOwor6YGO6KiAID4ga2Fnb25cIDsKK+egtOeUoyA+IGhhc2FuXCA7CivnpL7lk6EgPiBzaGFpblwgOwor5Y2w5qOJID4gaW5tZW5cIDsKK+eglOejqCA+IGtlbm1hXCA7CivmgqrkuosgPiBha3VqaVwgOwor56S65ZSGID4gc2hpc2FcIDsKK+WPr+WkiSA+IGthaGVuXCA7CivlvannlLsgPiBzYWlnYVwgOwor6Jar5YyWID4ga3Vua2FcIDsKK+WPl+WuuSA+IGp1eW91XCA7Civnpa3kuosgPiBzYWlqaVwgOwor56WW5YWIID4gc29zZW5cIDsKK+mIjeWMliA+IGRvbmthXCA7CivmgKflt64gPiBzZWlzYVwgOwor6JCg6Iq9ID4gaG91Z2FcIDsKK+WIpemAlCA+IGJldHRvXCA7CivpgY7opJIgPiBrYWhvdVwgOwor6I236Zu7ID4ga2FkZW5cIDsKK+ehrOa0viA+IGtvdWhhXCA7Civlj7DloLQgPiBkYWliYVwgOwor5ZC+5Lq6ID4gZ29qaW5cIDsKK+azouWLlSA+IGhhZG91XCA7CivoloTlnLAgPiB1c3VqaVwgOwor6YCP6YGOID4gdG91a2FcIDsKK+WNmOapnyA+IHRhbmtpXCA7Civmrrfnm5sgPiBpbnNlaVwgOwor56S+5Y2wID4gc2hhaW5cIDsKK+WNsOadkCA+IGluemFpXCA7CivlubPph44gPiBoZWl5YVwgOwor5Y2w5pysID4gaW5wb25cIDsKK+aBr+WQuSA+IGlidWtpXCA7Civlubnpg6ggPiBrYW5idVwgOwor5Y2w5pu4ID4gaW5zaG9cIDsKK+W5vemBoCA+IHl1dWVuXCA7CivlkI3lj6UgPiBtZWlrdVwgOwor5YmN6KiYID4gemVua2lcIDsKK+mBi+ihjCA+IHVua291XCA7CivmrabogIUgPiBtdXNoYVwgOwor56S+5YuZID4gc2hhbXVcIDsKK+WOn+aEjyA+IGdlbicnaVwgOwor5Y+k5aKzID4ga29mdW5cIDsKK+aBqeWRvSA+IG9ubWVpXCA7Civlj4vlrpwgPiB5dXVnaVwgOwor6YeO5aSpID4gbm90ZW5cIDsKK+WQiOWQpiA+IGdvdWhpXCA7CivlirTntYQgPiByb3Vzb1wgOwor6YeO5aSWID4geWFnYWlcIDsKK+W6p+irhyA+IHphZGFuXCA7CivlvJfntKAgPiBmdXNzb1wgOwor6YCD6YG/ID4gdG91aGlcIDsKK+W5uOmBiyA+IGtvdXVuXCA7CivnoLTniaIgPiBoYXJvdVwgOwor6YG66IejID4gaXNoaW5cIDsKK+W6g+i7jCA+IGtvdWtpXCA7CivmraPnvqkgPiBzZWlnaVwgOwor5rOV5YuZID4gaG91bXVcIDsKK+egtOeJhyA+IGhhaGVuXCA7CivlkIzljJYgPiBkb3VrYVwgOwor6YCA6YG/ID4gdGFpaGlcIDsKK+WPpOWfjiA+IGtvam91XCA7CivlkJDliaQgPiB0b3phaVwgOwor5rCX5qaCID4ga2lnYWlcIDsKK+W6nOitpiA+IGZ1a2VpXCA7CivlvqHmrr8gPiBnb3RlblwgOwor6JCM6Iq9ID4gaG91Z2FcIDsKK+WMuuawkSA+IGt1bWluXCA7CivljprmgakgPiBrb3VvblwgOwor5b+c5o+0ID4gb3VlblwgOwor5bqr6KOPID4ga3VyaVwgOwor5Y+k5ZmoID4ga29raVwgOwor5YeN6ZuoID4gdG91dVwgOwor5b6S5q2pID4gdG9ob1wgOwor5Y+v5ZCmID4ga2FoaVwgOwor5b6Q5q2pID4gam9ob1wgOwor5bqH6K23ID4gaGlnb1wgOwor6YeO5Za2ID4geWFlaVwgOwor5rOV5LyaID4gaG91ZVwgOwor5ZCM5L2NID4gZG91aVwgOwor5Y2x5oe8ID4ga2lndVwgOwor5Y+l5Y+lID4ga3VrdVwgOwor5Y+k5Y+lID4ga29rdVwgOwor5Y+j5Y+XID4ga3VqdVwgOwor5rK75YW3ID4gamlndVwgOwor5Ya36ZuoID4gcmVpdVwgOwor5b2T54K6ID4gdG91aVwgOwor5Y+z5YWaID4gdXRvdVwgOwor5Y2x5oOnID4ga2lndVwgOwor6YG657K+ID4gaXNlaVwgOwor6YeO5Y2RID4geWFoaVwgOwor5Y+z5YK+ID4gdWtlaVwgOwor5Yy75pu4ID4gaXNob1wgOwor6YGV6IOMID4gaWhhaVwgOwor5oCo5ZefID4gZW5zYVwgOwor6bia5ZOlID4gaW5rb1wgOwor56C05q+AID4gaGFraVwgOwor5Y+N5ZCQID4gaGVkb1wgOwor5Y+N5Y+kID4gaG9nb1wgOwor5Y+k5YSAID4ga29naVwgOwor6I+v576OID4ga2FiaVwgOwor5Y2w5bqmID4gaW5kb1wgOwor6YG656i/ID4gaWtvdVwgOwor55u46YGVID4gc291aVwgOwor5bqn6IelID4gemFnYVwgOwor5biw6YCUID4ga2l0b1wgOwor5b+g5a6fID4gbWFtZVwgOwor5YaG6aGxID4gZW5yb1wgOwor56OB5aC0ID4gamliYVwgOwor5Y+k5LqLID4ga29qaVwgOwor56C05qOEID4gaGFraVwgOwor5rC45a+/ID4gZWlqdVwgOwor5q2M56KRID4ga2FoaVwgOwor5b6A5pmCID4gb3VqaVwgOwor56OB5ZyfID4gamlkb1wgOwor6bSJ54mHID4gYWhlblwgOwor5Y2w5a2XID4gaW5qaVwgOwor6YGV566XID4gaXNhblwgOwor5Y+Z5LqLID4gam9qaVwgOwor56OB5ZmoID4gamlraVwgOwor5b6u5b6uID4gYmliaVwgOwor5biw6LevID4ga2lyb1wgOwor5b6h5oSPID4gZ3lvaVwgOwor56CC5rSyID4gc2FzdVwgOwor5Y2I5b6MID4gZ29nb1wgOwor5q+A5qOEID4ga2lraVwgOwor6YGg56WWID4gZW5zb1wgOwor5b6M5omLID4gZ290ZVwgOwor5bmy6JGJID4gaGliYVwgOwor5byV54GrID4gaW5rYVwgOwor5b6h5b2xID4gZ29laVwgOwor6YG655SjID4gaXNhblwgOwor5qi56ZmwID4ganVpblwgOwor6Iux6Z+zID4gZWlvblwgOwor5rGa5ZCNID4gb21laVwgOwor56OB5Yy6ID4gamlrdVwgOwor6YKq5rerID4gamFpblwgOwor6L+C6KiAID4gdWdlblwgOwor56OB5YyWID4gamlrYVwgOwor5Yy75birID4gaXNoaVwgOwor5b285oiRID4gaGlnYVwgOwor5Y2x5Z2QID4ga2l6YVwgOwor5Ym155eNID4gc291aVwgOwor5qmf6YGLID4ga2l1blwgOwor5Yyq5b6SID4gaGl0b1wgOwor5Yqp5ryUID4gam9lblwgOwor6YKq5rCXID4gamFraVwgOwor5byl5qyhID4geWFqaVwgOwor5b6h5a6HID4gZ3lvdVwgOwor5b6A5b6AID4gb3VvdVwgOwor5YiA6IeqID4gdG9qaVwgOwor5b6h5a2QID4gbWlrb1wgOwor5Yy75a6YID4gaWthblwgOwor5Yqg5ripID4ga2FvblwgOwor6YGO55aOID4ga2Fzb1wgOwor5YiA6IOMID4gbWluZVwgOwor5b+c5YufID4gb3Vib1wgOwor6YG65ryPID4gaXJvdVwgOwor5b6M5a62ID4gZ29rZVwgOwor5Yy75aSnID4gaWRhaVwgOwor5q605omTID4gb3VkYVwgOwor5q2p5q2mID4gaG9idVwgOwor6YGV54qvID4gaWhhblwgOwor5YaG6LKoID4gZW5rYVwgOwor5rCX5ZGzID4gZ2ltaVwgOwor5rCX5ZCIID4ga2lhaVwgOwor5biD6KGNID4gZnVlblwgOwor6a2U6a2FID4gbWFtaVwgOwor5b6M5aC0ID4gZ29iYVwgOwor56C05a62ID4gYmFrYVwgOwor5rCX5YyWID4ga2lrYVwgOwor5b6B5aS3ID4gc2VpaVwgOwor5Y2I5ZCOID4gZ29nb1wgOwor5rC05L2NID4gc3VpaVwgOwor5rC45LmFID4gdG93YVwgOwor5bem6KiYID4gc2FraVwgOwor5YaG6KaPID4gZW5raVwgOwor55uI6JmnID4gZWlraVwgOwor6YG65qeLID4gaWtvdVwgOwor5b6h5ZCNID4gbWluYVwgOwor6YOo5bGLID4gaGV5YVwgOwor6Iux6LKoID4gZWlrYVwgOwor6YGO5rihID4ga2F0b1wgOwor6YGV5rOVID4gaWhvdVwgOwor5q635a+MID4gaW5wdVwgOwor5bu25pyfID4gZW5raVwgOwor5qiq6K2wID4gb3VnaVwgOwor56CC5beeID4gc2FzdVwgOwor6Iyj6JOZID4gZ296YVwgOwor6Iux6KqeID4gZWlnb1wgOwor6YGL5rKzID4gdW5nYVwgOwor6YG65pu4ID4gaXNob1wgOwor55+l5oG1ID4gY2hpZVwgOwor6YGL5rCXID4gdW5raVwgOwor6Ly46LSPID4geXVlaVwgOwor5Y2R5LiLID4gaGlnZVwgOwor5Yui5a2QID4gc2Vrb1wgOwor5YyF5ZuyID4gaG91aVwgOwor5b6A5Y+kID4gb3Vrb1wgOwor5Yqg5oyBID4ga2FqaVwgOwor5byn5bqmID4ga29kb1wgOwor6YO95Za2ID4gdG9laVwgOwor5q+U5ZapID4gaGl5dVwgOwor6YG65paHID4gaWJ1blwgOwor6YCi54CsID4gb3VzZVwgOwor5Ye655uuID4gZGVtZVwgOwor5b2Z5aCxID4gaWhvdVwgOwor5q2m5oqAID4gYnVnaVwgOwor6Lyd6LydID4ga2lraVwgOwor5bqn5rSyID4gemFzdVwgOwor5b6h5LujID4gbWl5b1wgOwor5Yui5aiBID4gc2VpaVwgOwor5Yy75LyaID4gaWthaVwgOwor5b6X5L2TID4gZXRhaVwgOwor5b6h5LiWID4gbWl5b1wgOwor5b2x5Y2wID4gZWlpblwgOwor5q2j5oSPID4gc2VpaVwgOwor5YaG6IieID4gZW5idVwgOwor6bWc5YygID4gdWpvdVwgOwor5q+N5Y2wID4gYm9pblwgOwor6YC45qmfID4gaWtraVwgOwor6YOo5ZOhID4gYnVpblwgOwor6YG65oiSID4gaWthaVwgOwor55qu6IaaID4gaGlmdVwgOwor6YG65oa+ID4gaWthblwgOwor5Yi35q+bID4gaGFrZVwgOwor5q2p5bqmID4gaG9kb1wgOwor5qyh5pyfID4gamlraVwgOwor5q2m5bqrID4gYnVrb1wgOwor5qmf57iBID4ga2llblwgOwor56CC5ZyfID4gc2Fkb1wgOwor6YG65oGoID4gaWtvblwgOwor5b6A5LqLID4gb3VqaVwgOwor6Iqx6K2cID4ga2FmdVwgOwor6YG65b+XID4gaXNoaVwgOwor5bqP5qyhID4gam9qaVwgOwor5q+U5L6hID4gaGlrYVwgOwor6YCU5qyhID4gdG9qaVwgOwor5Ym15oSPID4gc291aVwgOwor5q2m5a62ID4gYnVrZVwgOwor5qiq6IelID4gb3VnYVwgOwor6ayx6YeRID4gdWtvblwgOwor5q+U5LiYID4gYmlrdVwgOwor6YO95LiLID4gdG9rYVwgOwor55+i5aC0ID4geWFiYVwgOwor6Iqx6KKrID4ga2FoaVwgOwor6YGV5oayID4gaWtlblwgOwor5bu25a+/ID4gZW5qdVwgOwor55m+6IiMID4gbW96dVwgOwor5q2m5aSrID4gYnVmdVwgOwor56CC5YipID4gamFyaVwgOwor6YOo5LiLID4gYnVrYVwgOwor6YG65a2QID4gaXNoaVwgOwor55695aWzID4gZ296ZVwgOwor5Y+l44CFID4ga3VrdVwgOwor5Ye65q2vID4gZGViYVwgOwor6YGO5bqmID4ga2Fkb1wgOwor5q2m5ZmoID4gYnVraVwgOwor6YGL5bqnID4gdW56YVwgOwor5qyh5bqPID4gamlqb1wgOwor5qih57OKID4gbW9rb1wgOwor6Iqx6Iq9ID4ga2FnYVwgOwor6YG65Z2AID4gaXNoaVwgOwor5bmz5piTID4gaGVpaVwgOwor5Yqg5ZGzID4ga2FtaVwgOwor5q2p5ZCIID4gYnVhaVwgOwor5qyn5a2XID4gb3VqaVwgOwor5Ye65p2lID4gZGVraVwgOwor5YOn6KGjID4gc291aVwgOwor55aO6Z+zID4gc29pblwgOwor5bqn5beeID4gemFzdVwgOwor5qi555quID4ganVoaVwgOwor5bqc5bqrID4gZnVrb1wgOwor6YG65ZOBID4gaWhpblwgOwor55aR6ZuyID4gZ2l1blwgOwor6YG65ZG9ID4gaW1laVwgOwor5q2k5YemID4ga29rb1wgOwor5q2m5YW3ID4gYnVndVwgOwor6YGO5aSaID4ga2F0YVwgOwor5qyh5aWzID4gamlqb1wgOwor5Yeg5qGIID4ga2lhblwgOwor5q2m5YKZID4gYnViaVwgOwor6L+95omLID4gb3R0ZVwgOwor6YG65YqfID4gaWtvdVwgOwor55Ww6aKoID4gaWZ1dVwgOwor6YG65Yi2ID4gaXNlaVwgOwor55Ww6aGeID4gaXJ1aVwgOwor5Yip5bexID4gcmlrb1wgOwor5q2j5L2NID4gc2VpaVwgOwor5Yi35a2QID4gaGFrZVwgOwor5q2m5LqLID4gYnVqaVwgOwor6I2K5qOYID4gYmFyYVwgOwor6a2U576FID4gbWFyYVwgOwor6YG65L2TID4gaXRhaVwgOwor6YGV5Y+NID4gaWhhblwgOwor6YG65LydID4gaWRlblwgOwor6YGO5Y67ID4ga2Frb1wgOwor5qyn5YyWID4gb3VrYVwgOwor55aO6YGgID4gc29lblwgOwor55aR6L6eID4gZ2lqaVwgOwor5bem5rS+ID4gc2FoYVwgOwor6Im2576OID4gZW5iaVwgOwor6ami6aasID4gcm9iYVwgOwor5bKQ6ZicID4gZ2lmdVwgOwor5bqn5ZOhID4gemFpblwgOwor5rC444CFID4gZWllaVwgOwor55yf5biGID4gbWFob1wgOwor55u45omLID4gYWl0ZVwgOwor5bqm5ZCIID4gZG9haVwgOwor6YGV5L6LID4gaXJlaVwgOwor5Yip5ZmoID4gcmlraVwgOwor6Imy57W1ID4gaXJvZVwgOwor55Ww6YKmID4gaWhvdVwgOwor6YGV5LukID4gaXJlaVwgOwor5buD5L2NID4gaGFpaVwgOwor5biD5pa9ID4gZnVzZVwgOwor6Ieq6LK7ID4gamloaVwgOwor6Ieq6LKgID4gamlmdVwgOwor5YWl5rGfID4gaXJpZVwgOwor6Iux5rCXID4gZWlraVwgOwor6ai+6aasID4gcmFiYVwgOwor6Iqx546LID4ga2FvdVwgOwor5qOL6ZmiID4ga2lpblwgOwor5bi35bmEID4gaWFrdVwgOwor6Iux5q2mID4gZWlidVwgOwor55Ww6LajID4gaXNodVwgOwor5YW35qGIID4gZ3VhblwgOwor5Ye65aC0ID4gZGViYVwgOwor6Ieq6KiYID4gamlraVwgOwor5bqn5Li7ID4gemFzdVwgOwor6Ieq6KGbID4gamllaVwgOwor55Ww6KuWID4gaXJvblwgOwor5bKQ6LevID4ga2lyb1wgOwor55u45a2QID4gYWlrb1wgOwor5bqc5LiLID4gZnVrYVwgOwor6a2U546LID4gbWFvdVwgOwor5YGJ6KazID4gaWthblwgOwor55Ww6KaLID4gaWtlblwgOwor5Yip5LuWID4gcml0YVwgOwor6aiO6aasID4ga2liYVwgOwor5qmf5b6uID4ga2liaVwgOwor5qmf5b2xID4ga2llaVwgOwor5bm+5L2VID4ga2lrYVwgOwor5b6A44CFID4gb3VvdVwgOwor55m65p2hID4gYmFuZVwgOwor5YaF5oSPID4gbmFpaVwgOwor5qmf5bqPID4ga2lqb1wgOwor55m45pyqID4ga2liaVwgOwor5bid5aiBID4gdGVpaVwgOwor6L+C5ZueID4gdWthaVwgOwor6YCA5L2NID4gdGFpaVwgOwor5Ye65YiDID4gZGViYVwgOwor5qKF6ZuoID4gYmFpdVwgOwor5qih5pOsID4gbW9naVwgOwor5YaG5bynID4gZW5rb1wgOwor55ey55e6ID4gbWFoaVwgOwor55uu5ZywID4gbWVqaVwgOwor5YaG5bqnID4gZW56YVwgOwor5qmf5bC+ID4ga2liaVwgOwor6Iqx5qi5ID4ga2FqdVwgOwor5biw5Za2ID4ga2llaVwgOwor55S76K2cID4gZ2FmdVwgOwor5qmf5a6cID4ga2lnaVwgOwor5bC+6YOoID4gYmlidVwgOwor55uy5ZSWID4gbW91YVwgOwor5L6d6aGYID4gaWdhblwgOwor5L6d6aC8ID4gaXJhaVwgOwor55aR576pID4gZ2lnaVwgOwor55yf5Ly8ID4gbWFuZVwgOwor5qOL6K2cID4ga2lmdVwgOwor5biw5YyWID4ga2lrYVwgOwor5YWQ5oivID4gamlnaVwgOwor55yf5LiKID4gbWF1ZVwgOwor5ber5a2QID4gbWlrb1wgOwor5biM5ZyfID4ga2lkb1wgOwor6Iqx5pyfID4ga2FraVwgOwor5biM5ZuzID4ga2l0b1wgOwor6aas6bm/ID4gYmFrYVwgOwor6IeZ6ISCID4gZW5qaVwgOwor5YGD6IelID4gZW5nYVwgOwor6IOh6bq7ID4gZ29tYVwgOwor5qCX6bygID4gcmlzdVwgOwor5a+66ZmiID4gamlpblwgOwor55Ww6IGeID4gaWJ1blwgOwor5ber5aWzID4gbWlrb1wgOwor55uu5YemID4gbWVkb1wgOwor6aeE6aasID4gZGFiYVwgOwor6ay85rCXID4ga2lraVwgOwor5Yeg5LiLID4ga2lrYVwgOwor5qmf5ZmoID4ga2lraVwgOwor5YWs5a62ID4ga3VnZVwgOwor6Im25q2MID4gZW5rYVwgOwor5L+d6K23ID4gaG9nb1wgOwor5YW15aiBID4gaGVpaVwgOwor6ayx5rCXID4gdWtraVwgOwor6Lu95piTID4ga2VpaVwgOwor6Iux5a2XID4gZWlqaVwgOwor6Iqx5oq8ID4ga2FvdVwgOwor5L+a6KqeID4gcmlnb1wgOwor55qH5a2QID4gb3VqaVwgOwor5bGg6JiHID4gdG9zb1wgOwor5YaA5ZuzID4ga2l0b1wgOwor6aeG6ZmkID4ga3Vqb1wgOwor5a+d6ZaTID4gbmVtYVwgOwor6L6e5YSAID4gamlnaVwgOwor55uu5LiKID4gbWV1ZVwgOwor5bid5L2NID4gdGVpaVwgOwor5qmf5YyWID4ga2lrYVwgOwor6Lyq5beuID4gd2FzYVwgOwor5L2Z6Z+7ID4geW9pblwgOwor55Ww56uvID4gaXRhblwgOwor6Lyd5bqmID4ga2lkb1wgOwor5a+E6ZmEID4ga2lmdVwgOwor5qmf5YW3ID4ga2lndVwgOwor5bel5ZCIID4gZ3VhaVwgOwor55Ww56iuID4gaXNodVwgOwor5YWQ5aWzID4gamlqb1wgOwor6Iqx5bqPID4ga2Fqb1wgOwor5YW35ZCIID4gZ3VhaVwgOwor6Laz6KKLID4gdGFiaVwgOwor5bGx576KID4geWFnaVwgOwor6Ium5ZyfID4ga3Vkb1wgOwor5L2N6ZqOID4gaWthaVwgOwor5a+/6LOAID4ganVnYVwgOwor6Ieq55S7ID4gamlnYVwgOwor6Iux5ZKMID4gZWl3YVwgOwor5YWs5Y2/ID4ga3VnZVwgOwor55S757SgID4gZ2Fzb1wgOwor5YW25YemID4gc29rb1wgOwor5qKo6IqxID4gcmlrYVwgOwor55Sx57iBID4geXVlblwgOwor5YaG5L6hID4gZW5rYVwgOwor6Iqx5a2jID4ga2FraVwgOwor6a2a5bqnID4gdW96YVwgOwor5YW35YKZID4gZ3ViaVwgOwor6LaK6Ki0ID4gZXNzb1wgOwor6IKl6aasID4gaGliYVwgOwor55m+5ZCIID4geXVyaVwgOwor55qu5LiLID4gaGlrYVwgOwor5YSS5a62ID4ganVrYVwgOwor6Ieq54GrID4gamlrYVwgOwor6LW36Ki0ID4ga2lzb1wgOwor5L+a6ICzID4gcmlqaVwgOwor5a626YGLID4ga2F1blwgOwor55Ww54q2ID4gaWpvdVwgOwor5qWa5qWaID4gc29zb1wgOwor5YWB5Y+vID4gaW5rYVwgOwor5L6N6KGbID4gamllaVwgOwor6aWR6aSTID4ga2lnYVwgOwor6Iqx5ZmoID4ga2FraVwgOwor55qH5L2NID4ga291aVwgOwor5L2z6KmxID4ga2F3YVwgOwor6IOD6YW4ID4gaXNhblwgOwor5YWI5YWIID4gbWFtYVwgOwor5a626LevID4gaWVqaVwgOwor5qGn6JGJID4gaGliYVwgOwor6a2U5aWzID4gbWFqb1wgOwor6aWC6aOpID4gdWRvblwgOwor5a2X6Z+zID4gamlvblwgOwor5a+E6KqeID4ga2lnb1wgOwor6Iqx5Y2JID4ga2FraVwgOwor5a626K2cID4ga2FmdVwgOwor6IO06KGjID4gZG91aVwgOwor6ay85aWzID4ga2lqb1wgOwor6ICz6by7ID4gamliaVwgOwor6aST6ay8ID4gZ2FraVwgOwor6IOk6KOUID4gaW5laVwgOwor5YSy5L2NID4gY2hvaVwgOwor6Ieq5qOEID4geWFrZVwgOwor55CG6Z2eID4gcmloaVwgOwor5Lul6ZmNID4gaWtvdVwgOwor5YSq5L2NID4geXV1aVwgOwor6LW36IelID4ga2lnYVwgOwor6IOe6KGjID4gaG91aVwgOwor5qCE6KqJID4gZWl5b1wgOwor5ayw6Z+zID4gZWlvblwgOwor6LyU5L2QID4gaG9zYVwgOwor5LyK6YGUID4gZGF0ZVwgOwor55Ww5qeYID4gaXlvdVwgOwor5L2Z6JiKID4geW91blwgOwor5a626JqKID4gaWVrYVwgOwor5bC855SrID4gamlob1wgOwor5YGJ5p2QID4gaXphaVwgOwor55Ww5pysID4gaWhvblwgOwor5qSN5pyoID4gdWVraVwgOwor6IO86IOdID4gdGFrb1wgOwor6Iiq5a6HID4ga291dVwgOwor55aR5oe8ID4gZ2lrdVwgOwor55Ww5paHID4gaWJ1blwgOwor55Ww5pWwID4gaXN1dVwgOwor55aR5oOnID4gZ2lndVwgOwor6Ieq5oiRID4gamlnYVwgOwor6aeV57GgID4ga2Fnb1wgOwor6a2B5YGJID4ga2FpaVwgOwor5L+d54ShID4gaG9tdVwgOwor6aeV56+tID4ga2Fnb1wgOwor6aOi6aSTID4ga2lnYVwgOwor6Ieq5oSbID4gamlhaVwgOwor5qCE6I+vID4gZWlnYVwgOwor5YGJ5oyZID4gaWt5b1wgOwor5a2j6KqeID4ga2lnb1wgOwor6IKa6KOPID4gdG9yaVwgOwor5YOn5L2NID4gc291aVwgOwor5YGJ5omNID4gaXNhaVwgOwor55Ww5omNID4gaXNhaVwgOwor6LK76YCUID4gaGl0b1wgOwor55CG6LevID4gcmlyb1wgOwor6LOm6KqyID4gZnVrYVwgOwor6LOm6KmgID4gZnVlaVwgOwor55WP5pWsID4gaWtlaVwgOwor5L+d5ripID4gaG9vblwgOwor6Ieq5bqPID4gamlqb1wgOwor55S75p62ID4gZ2FrYVwgOwor5L2N572uID4gaWNoaVwgOwor5LqM6ZmiID4gbmlpblwgOwor6Ieq5bexID4gamlrb1wgOwor55Ww5oCnID4gaXNlaVwgOwor55Ww5b2pID4gaXNhaVwgOwor55aR5a2XID4gZ2lqaVwgOwor6LGq6ZuoID4gZ291dVwgOwor5LuY6K2wID4gZnVnaVwgOwor5L+d5q+NID4gaG9ib1wgOwor5a6J6IelID4gYW5nYVwgOwor5Lul6KW/ID4gaXNlaVwgOwor5Lqc6Yi0ID4gYXJlaVwgOwor6Ieq5a62ID4gamlrYVwgOwor55Ww5bi4ID4gaWpvdVwgOwor5L6b54qgID4ga3VnaVwgOwor5LuY6KiYID4gZnVraVwgOwor5bCP54GrID4gYm95YVwgOwor6aeE55uuID4gZGFtZVwgOwor5bGL5qC5ID4geWFuZVwgOwor5L6d54S2ID4gaXplblwgOwor5LyK6ImmID4gaWthblwgOwor5YGJ5a65ID4gaXlvdVwgOwor5qKo5p6cID4gcmlrYVwgOwor55Ww5a2YID4gaXpvblwgOwor5LqM6YOoID4gbmlidVwgOwor6aKo6ZuoID4gZnV1dVwgOwor5qOE5o2QID4ga2llblwgOwor5qWV5YaGID4gZGFlblwgOwor5YG95Y2wID4gZ2lpblwgOwor6IKM6IaaID4ga2lmdVwgOwor55Ww5aeTID4gaXNlaVwgOwor5YGJ5aSnID4gaWRhaVwgOwor55Ww5aSJID4gaWhlblwgOwor55WZ5a6IID4gcnVzdVwgOwor5L2N55u4ID4gaXNvdVwgOwor5LiA6byTID4gaWtrb1wgOwor6Ieq5Za2ID4gamllaVwgOwor55So5oSPID4geW91aVwgOwor6ICz6KqeID4gamlnb1wgOwor55Ww5Z+fID4gaWlraVwgOwor55S75biDID4gZ2FmdVwgOwor6auY5L2NID4ga291aVwgOwor5a2X576pID4gamlnaVwgOwor6Ieq5Y+ZID4gamlqb1wgOwor5L+d5oyBID4gaG9qaVwgOwor6aml5bC+ID4ga2liaVwgOwor5YCa5a2QID4gaXNoaVwgOwor6Ieq5YqpID4gamlqb1wgOwor6IOD55mMID4gaWdhblwgOwor55S75a62ID4gZ2FrYVwgOwor6IiI5LqcID4ga291YVwgOwor55Om5pavID4gZ2FzdVwgOwor6Ieq5YipID4gamlyaVwgOwor5a6254i2ID4ga2FmdVwgOwor6aOb6KqeID4gaGlnb1wgOwor5L2Z54WZID4geW9lblwgOwor5LiL6aeEID4gZ2V0YVwgOwor5LiL6aasID4gZ2ViYVwgOwor5YGH5ZCNID4ga2FuYVwgOwor55Ww5ZCNID4gaW1laVwgOwor5L2N54mMID4gaWhhaVwgOwor55Ww5ZCMID4gaWRvdVwgOwor6IC26JiHID4geWFzb1wgOwor5L2Z54KOID4geW9lblwgOwor55Gg55KDID4gcnVyaVwgOwor5LiA6aiOID4gaWtraVwgOwor55aR5Ly8ID4gZ2lqaVwgOwor5YGJ5YuyID4gaWt1blwgOwor5YGJ5Yq5ID4gaWtvdVwgOwor5YGJ5YqfID4gaWtvdVwgOwor55Ww5YuVID4gaWRvdVwgOwor6LKg6I23ID4gZnVrYVwgOwor5LmF6YGgID4ga3VvblwgOwor6Ieq5L2ZID4gaml5b1wgOwor5LiN6ZuiID4gZnVyaVwgOwor5LiA6aGnID4gaWtrb1wgOwor6Ieq5LuWID4gaml0YVwgOwor576O6Z+zID4gYmlvblwgOwor5a2Q562JID4ga29yYVwgOwor5LiL6ZmiID4ga2FpblwgOwor6LW35qGIID4ga2lhblwgOwor5LiN6ZaTID4gYnVtYVwgOwor55S75ZugID4gZ2FpblwgOwor5L2Z5rOiID4geW9oYVwgOwor55WP5Y+LID4gaXl1dVwgOwor55Ww5L6LID4gaXJlaVwgOwor5bCP5omLID4ga290ZVwgOwor55Ww5L2TID4gaXRhaVwgOwor6Laj5oSPID4gc2h1aVwgOwor5YWI44CFID4gbWFtYVwgOwor5YGJ5Lq6ID4gaWppblwgOwor55Ww5Lq6ID4gaWppblwgOwor5L+d5a6JID4gaG9hblwgOwor5L2Z5q6DID4geW9vdVwgOwor6Lev5ZywID4gcm9qaVwgOwor5L6d5ougID4gaWt5b1wgOwor55C155C2ID4gYml3YVwgOwor55CG56eRID4gcmlrYVwgOwor5pqu6ZuyID4gYm91blwgOwor5L+d5aeGID4gaG9ib1wgOwor6IOD5rayID4gaWVraVwgOwor5bGF5aOrID4ga29qaVwgOwor5Lqc6IGWID4gYXNlaVwgOwor5p2O6IqxID4gcmlrYVwgOwor5LiL6YeOID4gZ2V5YVwgOwor5LiK6YeOID4gdWVub1wgOwor6IKM55CGID4ga2ltZVwgOwor6aa05p+TID4gbmFqaVwgOwor5Lqc576kID4gYWd1blwgOwor5LiW6L6eID4gc2VqaVwgOwor5LiN6YGLID4gZnV1blwgOwor5L2Z5qCEID4geW9laVwgOwor6IWw5ZuyID4geW91aVwgOwor5qKo5ZySID4gcmllblwgOwor5L6b5b6hID4gZ3Vnb1wgOwor5qKD5a2QID4gdGVrb1wgOwor6Lev5YqgID4gcnVrYVwgOwor5Lqc57axID4gYWtvdVwgOwor5p6c55quID4ga2FoaVwgOwor5LiN6LuMID4gZnVraVwgOwor5L2Z5pqHID4geW9rYVwgOwor5LiA6YGOID4gaWtrYVwgOwor5bCP5bGLID4ga295YVwgOwor5LiA6YCUID4gaXR0b1wgOwor576O6L6eID4gYmlqaVwgOwor5a6J5rCXID4gYW5raVwgOwor55CJ55KDID4gcnVyaVwgOwor5a655piTID4geW91aVwgOwor5YCL5YCLID4ga29rb1wgOwor5LiN6LW3ID4gZnVraVwgOwor5bCJ5a6YID4gaWthblwgOwor5qCE5p6vID4gZWlrb1wgOwor6LW35bqnID4ga2l6YVwgOwor5a+T5oSPID4gZ3V1aVwgOwor5L6d5a2YID4gaXpvblwgOwor5LiW6KmxID4gc2V3YVwgOwor5Lqc56iuID4gYXNodVwgOwor5pm06ZuoID4gc2VpdVwgOwor5bCP5aScID4gc2F5b1wgOwor5aiB6aKoID4gaWZ1dVwgOwor6aOb57C3ID4gaGllblwgOwor6Z+z6aCtID4gb25kb1wgOwor5L2Z5oqAID4geW9naVwgOwor5LiN6KqeID4gZnVnb1wgOwor5L2Z5omAID4geW9zb1wgOwor546L6ICFID4gb3VqYVwgOwor5a625om2ID4ga2FmdVwgOwor5LiL6KiYID4ga2FraVwgOwor5pqX6YOoID4gYW5idVwgOwor5L6b5aWJID4gZ3VidVwgOwor6IOD5pWjID4gaXNhblwgOwor5LuB546LID4gbmlvdVwgOwor5L6N5amiID4gamloaVwgOwor5LqI56eRID4geW9rYVwgOwor5a6z5oSPID4gZ2FpaVwgOwor5LqI56S6ID4geW9qaVwgOwor5a6J5piTID4gYW4nJ2lcIDsKK+S4i+ihhiA+IGdlc3VcIDsKK+S4iuihoyA+IGpvdWlcIDsKK+S+jeWlsyA+IGppam9cIDsKK+Wtl+avjSA+IGppYm9cIDsKK+iDjOaIuCA+IHNlZG9cIDsKK+WvhOW4rSA+IHlvc2VcIDsKK+S9s+WutCA+IGthZW5cIDsKK+eKoOmjmyA+IGdpaGlcIDsKK+S4jeiZniA+IGZ1Z3VcIDsKK+iFkOWEkiA+IGZ1anVcIDsKK+e9teipiCA+IGJhcmlcIDsKK+WvjOWutiA+IGZ1a2FcIDsKK+S7lua0viA+IHRhaGFcIDsKK+itsOmZoiA+IGdpaW5cIDsKK+i1t+WboCA+IGtpaW5cIDsKK+eOu+eSgyA+IGhhcmlcIDsKK+WuieaJkyA+IGFuZGFcIDsKK+aal+itnCA+IGFucHVcIDsKK+mmrOWtkCA+IG1hZ29cIDsKK+aYr+mdniA+IHplaGlcIDsKK+S6i+eQhiA+IGppcmlcIDsKK+WutuWutiA+IGllaWVcIDsKK+aeuOadniA+IGt1a29cIDsKK+S6jOeOiyA+IG5pb3VcIDsKK+eMv+iHgiA+IGVucGlcIDsKK+aal+iomCA+IGFua2lcIDsKK+aenOaouSA+IGthanVcIDsKK+S9jeWumCA+IGlrYW5cIDsKK+S6keeIviA+IHVuamlcIDsKK+S6nOeCrSA+IGF0YW5cIDsKK+S4gOiNtyA+IGlra2FcIDsKK+i1t+WPpSA+IGtpa3VcIDsKK+S8muaEjyA+IGthaWlcIDsKK+S7peadsSA+IGl0b3VcIDsKK+S7peadpSA+IGlyYWlcIDsKK+mjm+eHlSA+IGhpZW5cIDsKK+WuieW6pyA+IGFuemFcIDsKK+aXl+m8kyA+IGtpa29cIDsKK+mmrOWgtCA+IGJhYmFcIDsKK+mejemmrCA+IGFuYmFcIDsKK+S4gOiHgiA+IGlwcGlcIDsKK+S9s+WRsyA+IGthbWlcIDsKK+S4jee+qSA+IGZ1Z2lcIDsKK+S4jee+iCA+IGZ1a2lcIDsKK+S4jee+hyA+IGZ1a2lcIDsKK+S9s+WPpSA+IGtha3VcIDsKK+acqOeTnCA+IGJva2VcIDsKK+mnhOWPpSA+IGRha3VcIDsKK+iCqeW3viA+IGhpcmVcIDsKK+aZgumBiyA+IGppdW5cIDsKK+mfu+iqniA+IGluZ29cIDsKK+almuOAhSA+IHNvc29cIDsKK+mfs+itnCA+IG9ucHVcIDsKK+S4jee4gSA+IGZ1ZW5cIDsKK+S9jeWcsCA+IGljaGlcIDsKK+aeh+adtyA+IGJpd2FcIDsKK+S4iue1tSA+IHV3YWVcIDsKK+WtpOW9sSA+IGtvZWlcIDsKK+ahiOS+oSA+IGFua2FcIDsKK+eMm+iAhSA+IG1vc2FcIDsKK+agoeWMuyA+IGtvdWlcIDsKK+e+veebriA+IGhhbWVcIDsKK+ahiOS4iyA+IGFua2FcIDsKK+afmuWtkCA+IHl1enVcIDsKK+itt+isqCA+IGdvbXVcIDsKK+S7luaJgCA+IHlvc29cIDsKK+S6jOasoSA+IG5pamlcIDsKK+WmgumcsiA+IGpvcm9cIDsKK+S4jeepjyA+IGZ1b25cIDsKK+WuieWgtSA+IGFuZG9cIDsKK+S4gOeuhyA+IGlra29cIDsKK+S4i+eoriA+IGdlc3VcIDsKK+mmrOWFtyA+IGJhZ3VcIDsKK+S9jeWLsiA+IGlrdW5cIDsKK+S7luaEmyA+IHRhYWlcIDsKK+WutuWHuiA+IGllZGVcIDsKK+S9meWEgCA+IHlvZ2lcIDsKK+WuieWbuiA+IGFua29cIDsKK+WutuWFtyA+IGthZ3VcIDsKK+S4jeejqCA+IGZ1bWFcIDsKK+WutuWFjiA+IGthdG9cIDsKK+aXpemWkyA+IGhpYWlcIDsKK+S8juWlsyA+IGdpam9cIDsKK+WnlOitsiA+IGlqb3VcIDsKK+S9jeWGoCA+IGlrYW5cIDsKK+itt+ihmyA+IGdvZWlcIDsKK+S7i+aEjyA+IGthaWlcIDsKK+WvhOS7mCA+IGtpZnVcIDsKK+mejemDqCA+IGFuYnVcIDsKK+acieeCuiA+IHl1dWlcIDsKK+WvhOS4jiA+IGtpeW9cIDsKK+S9k+S9jSA+IHRhaWlcIDsKK+S9meS6iyA+IHlvamlcIDsKK+mdkumdkiA+IGFvYW9cIDsKK+S7ruWtlyA+IGthbmFcIDsKK+S6jOacnyA+IG5pa2lcIDsKK+S9juS9jSA+IHRlaWlcIDsKK+WuieWQpiA+IGFucGlcIDsKK+iDoeS5sSA+IHVyb25cIDsKK+S6iOacnyA+IHlva2lcIDsKK+WutuS6iyA+IGthamlcIDsKK+e+qeeQhiA+IGdpcmlcIDsKK+itj+iquSA+IGtpaGlcIDsKK+S4i+eXoiA+IGdlcmlcIDsKK+WuieWNsSA+IGFua2lcIDsKK+izreWgtCA+IHRvYmFcIDsKK+mmluS9jSA+IHNodWlcIDsKK+WsieaIryA+IGtpZ2lcIDsKK+S6i+aVhSA+IGppa29cIDsKK+S8geWbsyA+IGtpdG9cIDsKK+e+qeeItiA+IGdpZnVcIDsKK+S7luWutiA+IHRha2VcIDsKK+S4jeeQhiA+IGZ1cmlcIDsKK+izgOWutCA+IGdhZW5cIDsKK+WumuS9jSA+IHRlaWlcIDsKK+Wuh+WGhSA+IHVkYWlcIDsKK+S7peWkliA+IGlnYWlcIDsKK+eRo+S6iyA+IHNhamlcIDsKK+WkoumtlCA+IG11bWFcIDsKK+adpeaEjyA+IHJhaWlcIDsKK+WtteWMliA+IGZ1a2FcIDsKK+iytOWutiA+IGtpa2FcIDsKK+aal+ekuiA+IGFuamlcIDsKK+WuieS/nSA+IGFucG9cIDsKK+WuieS+oSA+IGFua2FcIDsKK+acqOacqCA+IGtpZ2lcIDsKK+mdnumBiyA+IGhpdW5cIDsKK+iBvuWUliA+IHJvdWFcIDsKK+i0j+S9mSA+IGVpeW9cIDsKK+e+veavmyA+IHVtb3VcIDsKK+mfs+e0oCA+IG9uc29cIDsKK+Wtl+WPpSA+IGppa3VcIDsKK+i0iOS9jSA+IHpvdWlcIDsKK+iytOWlsyA+IGtpam9cIDsKK+S7mOWbsyA+IGZ1enVcIDsKK+iCieWIuiA+IG1hbWVcIDsKK+S6i+W+jCA+IGppZ29cIDsKK+S6iOW+jCA+IHlvZ29cIDsKK+S6jOW6piA+IG5pZG9cIDsKK+mfs+espiA+IG9ucHVcIDsKK+e+qeawlyA+IGdpa2lcIDsKK+WAi+OAhSA+IGtva29cIDsKK+e+qeavjSA+IGdpYm9cIDsKK+iqnumfsyA+IGdvb25cIDsKK+S7peWNlyA+IGluYW5cIDsKK+iAjOW+jCA+IGppZ29cIDsKK+WknOmZsCA+IHlhaW5cIDsKK+S7mOWSjCA+IGZ1d2FcIDsKK+eJoeibjiA+IGtha2lcIDsKK+eOi+aJiyA+IG91dGVcIDsKK+e+veaguSA+IGhhbmVcIDsKK+acqOaIuCA+IGtpZG9cIDsKK+S7peWJjSA+IGl6ZW5cIDsKK+adseWktyA+IHRvdWlcIDsKK+mdnuitsCA+IGhpZ2lcIDsKK+mfi+e3qCA+IGloZW5cIDsKK+S7peWGhSA+IGluYWlcIDsKK+S4gOa0viA+IGlwcGFcIDsKK+S4ieavmyA+IG1pa2VcIDsKK+mbt+mbqCA+IHJhaXVcIDsKK+irs+itnCA+IGFucHVcIDsKK+S7mOWKoCA+IGZ1a2FcIDsKK+S4jeasoSA+IGZ1amlcIDsKK+mbkemtmiA+IGpha29cIDsKK+itt+espiA+IGdvZnVcIDsKK+mbsumcpyA+IHVubXVcIDsKK+S6i+WunCA+IGppZ2lcIDsKK+abs+absyA+IGVpZWlcIDsKK+S6jOWtlyA+IG5pamlcIDsKK+S4gOawlyA+IGlra2lcIDsKK+izpuS4jiA+IGZ1eW9cIDsKK+adj+WtkCA+IGFuenVcIDsKK+WnlOe0sCA+IGlzYWlcIDsKK+irs+iomCA+IGFua2lcIDsKK+Wkp+mHjiA+IG9vbm9cIDsKK+S4gOatqSA+IGlwcG9cIDsKK+aWjumDqCA+IGluYmVcIDsKK+S7o+S9jSA+IGRhaWlcIDsKK+eLkOeWkSA+IGtvZ2lcIDsKK+eOi+W6pyA+IG91emFcIDsKK+S7o+S7oyA+IHlveW9cIDsKK+Wlh+iyqCA+IGtpa2FcIDsKK+S7peS4iiA+IGlqb3VcIDsKK+e+qeaXlyA+IGdpa2lcIDsKK+eQhuS6iyA+IHJpamlcIDsKK+acieaEjyA+IHl1dWlcIDsKK+acieaDhSA+IHVqb3VcIDsKK+S4jeacnyA+IGZ1a2lcIDsKK+S7luS6iyA+IHRhamlcIDsKK+eLkueLkiA+IGhpaGlcIDsKK+S7mOS4jiA+IGZ1eW9cIDsKK+S4u+aEjyA+IHNodWlcIDsKK+eLkOeLuCA+IGtvcmlcIDsKK+S4luaVhSA+IHNla29cIDsKK+S4jeaZgiA+IGZ1amlcIDsKK+mcsuiqniA+IHJvZ29cIDsKK+Wkp+i3ryA+IG9vamlcIDsKK+eOi+WutiA+IG91a2VcIDsKK+e+qeaPtCA+IGdpZW5cIDsKK+eOi+WtkCA+IG91amlcIDsKK+S4gOacnyA+IGlra2lcIDsKK+e+qeaNkCA+IGdpZW5cIDsKK+iqueitsCA+IGhpZ2lcIDsKK+iytOS4iyA+IGtpa2FcIDsKK+S4gOaWlyA+IGl0dG9cIDsKK+eOi+WmgyA+IG91aGlcIDsKK+eOi+WlsyA+IG91am9cIDsKK+mdkuiRiSA+IGFvYmFcIDsKK+iqnui3ryA+IGdvcm9cIDsKK+mdkuiPnCA+IGFvbmFcIDsKK+S6kuWKqSA+IGdvam9cIDsKK+acqOWgtCA+IGtpYmFcIDsKK+S6lOWIhiA+IGdvYnVcIDsKK+S4gOaPhiA+IGlra2lcIDsKK+S6i+WLmSA+IGppbXVcIDsKK+S4i+aJiyA+IGhldGFcIDsKK+S4i+aIuCA+IGdla29cIDsKK+adseS6niA+IHRvdWFcIDsKK+adseS6nCA+IHRvdWFcIDsKK+acqOWcsCA+IGtpamlcIDsKK+eOi+WcnyA+IG91ZG9cIDsKK+e+juaKgCA+IGJpZ2lcIDsKK+S4iuaEjyA+IGpvdWlcIDsKK+S4gOaIuCA+IGlra29cIDsKK+eLrOalvSA+IGtvbWFcIDsKK+iqpOiomCA+IGdva2lcIDsKK+mfs+azoiA+IG9ucGFcIDsKK+S6m+S6iyA+IHNhamlcIDsKK+mfu+avjSA+IGluYm9cIDsKK+aYoOeUuyA+IGVpZ2FcIDsKK+S6iOWCmSA+IHlvYmlcIDsKK+S6jOS+oSA+IG5pa2FcIDsKK+aWveiCpSA+IHNlaGlcIDsKK+mhjOaEjyA+IGRhaWlcIDsKK+S6jOS9kCA+IG5pc2FcIDsKK+S6iOS+oSA+IHlva2FcIDsKK+WkluihoyA+IGdhaWlcIDsKK+S4jeW4sCA+IGZ1a2lcIDsKK+aVt+ihjSA+IGZ1ZW5cIDsKK+aXqeeosiA+IHdhc2VcIDsKK+iom+mfsyA+IGthb25cIDsKK+e+veWkqiA+IGhhdGFcIDsKK+eFmemcpyA+IGVubXVcIDsKK+eOi+WMliA+IG91a2FcIDsKK+eFmemcniA+IGVua2FcIDsKK+eFmembqCA+IGVuJyd1XCA7CivpoqjlkYIgPiBmdXJvXCA7Civkub7kvY0gPiBrZW5pXCA7Civmk6zpn7MgPiBnaW9uXCA7CivlqIHmqKkgPiBpa2VuXCA7CivkuIDlt7EgPiBpa2tvXCA7CivnuIHotbcgPiBlbmdpXCA7CivkuZ3liIYgPiBrdWJ1XCA7CivkuI3lrokgPiBmdWFuXCA7CivlppbnlbAgPiB5b3VpXCA7CivoqIPpn7MgPiBmdW9uXCA7CivmnLrkuIsgPiBraWthXCA7CivniLbnpZYgPiBmdXNvXCA7CivkuIvlqaIgPiBrYWhpXCA7CivkuIDlrrYgPiBpa2tlXCA7CivpmbDpmJwgPiBpbmZ1XCA7CivlpYfnuIEgPiBraWVuXCA7CivmmpfmhJogPiBhbmd1XCA7CivkuI7lpKogPiB5b3RhXCA7CivkuIvlpbMgPiBnZWpvXCA7CivnhKHpp4QgPiBtdWRhXCA7CivnuIHoqp4gPiBlbmdvXCA7Civpm4Xoqp4gPiBnYWdvXCA7CivnjovkuosgPiBvdWppXCA7CivmmYLmqZ8gPiBqaWtpXCA7Civml6nnlJ8gPiB3YXNlXCA7CivnjaPljLsgPiBqdXVpXCA7Civnvo7lp6sgPiBiaWtpXCA7CivlqablpbMgPiBmdWpvXCA7Civnvo7lppMgPiBiaWdpXCA7CivpoqjkvY0gPiBmdXVpXCA7Civnvo7lpbMgPiBiaWpvXCA7CivkuZ3kuZ0gPiBrdWt1XCA7CivpnZLnoKUgPiBhb3RvXCA7CivlrrbjgIUgPiBpZWllXCA7CivnhKHpn7MgPiBtdW9uXCA7CivorbDmoYggPiBnaWFuXCA7CivkuI3lm7MgPiBmdXRvXCA7Civpmpjot68gPiBhaXJvXCA7CivnjJvlqIEgPiBtb3VpXCA7CivpmY3pm6ggPiBrb3V1XCA7CivmmbrmhacgPiBjaGllXCA7CivkuI3lmaggPiBmdWtpXCA7CivlpJrnvqkgPiB0YWdpXCA7CivmmrTlqIEgPiBib3VpXCA7CivlpJrnvoUgPiB0YXJhXCA7CivmmYLmnJ8gPiBqaWtpXCA7Civoqp7nvqkgPiBnb2dpXCA7CivpmbDpg6ggPiBpbmJ1XCA7CivlpbPnjosgPiBqb291XCA7CivkuLvkvY0gPiBzaHVpXCA7CivpnZ7nkIYgPiBoaXJpXCA7Civpm7LohIIgPiBmdWtlXCA7Civnvqnli5kgPiBnaW11XCA7Civpm6Loi6YgPiByaWt1XCA7Civmmq7lpJwgPiBib3lhXCA7CivpnZLnlLAgPiBhb3RhXCA7CivkuI3lkowgPiBmdXdhXCA7CivkuI3lkbMgPiBmdW1pXCA7CivpmqDoqp4gPiBpbmdvXCA7CivorbfmkakgPiBnb21hXCA7CivkuInlkbMgPiBzYW1pXCA7CivkuI3lj68gPiBmdWthXCA7CivkuIvlkI8gPiBrYXJpXCA7CivkuIvlj7ggPiBnZXN1XCA7CivkuIvlj6UgPiBnZWt1XCA7CivnuLfnuLcgPiBydXJ1XCA7Civmm7TkvY0gPiBrb3VpXCA7Civlo4HonaggPiBkYW5pXCA7Civnvo7lkbMgPiBiaW1pXCA7CivkuIvljZEgPiBnZWJpXCA7CivorLPmrYwgPiBvdWthXCA7CivorbfmjIEgPiBnb2ppXCA7CivkuIDlj6UgPiBpa2t1XCA7CivkuI3liKkgPiBmdXJpXCA7CivnhKHpiZsgPiBtdWVuXCA7Civnvo7ljJYgPiBiaWthXCA7CivkuIDljLogPiBpa2t1XCA7CivpoK3lnqIgPiBmdWtlXCA7CivkuI3lhbcgPiBmdWd1XCA7CivpoK3lm7IgPiB0b3VpXCA7CivoqJjorZwgPiBraWZ1XCA7CivkuI3lgpkgPiBmdWJpXCA7CivoqJvoqp4gPiBrYWdvXCA7CivniqDmiZMgPiBnaWRhXCA7CivlpJbnp5EgPiBnZWthXCA7Civpm6LnuIEgPiByaWVuXCA7CivkuJbkuosgPiBzZWppXCA7Civpn7vlrZcgPiBpbmppXCA7CivkuJbkuJYgPiB5b3lvXCA7CivlpKfnm64gPiBvb21lXCA7CivnhKHovpwgPiBtdWtvXCA7CivkuIrkvY0gPiBqb3VpXCA7CivkuIvku5ggPiBrYWZ1XCA7CivnuIHogIUgPiBlbmphXCA7Civml6XmrakgPiBoaWJ1XCA7CivkuI3kuowgPiBmdWppXCA7CivkuI3kuoggPiBmdXlvXCA7CivkuIDlgIsgPiBpa2tvXCA7CivniL7msZ0gPiBqaWpvXCA7CivlqIHlrrkgPiBpeW91XCA7Civpn7PlrZcgPiBvbmppXCA7CivlpJznnYAgPiB5b2dpXCA7CivpmaLorbAgPiBpbmdpXCA7CivlpJznm64gPiB5b21lXCA7CivkuIDkvZAgPiBpc3NhXCA7CivniLbmr40gPiBmdWJvXCA7CivpnZ7mr4AgPiBoaWtpXCA7CivmmYLlt64gPiBqaXNhXCA7CivntLDpm6ggPiBzYWl1XCA7CivpnIrnlbAgPiByZWlpXCA7CivoqofnpLogPiBrb2ppXCA7Civln7rpn7MgPiBraW9uXCA7Civnt6/nt5ogPiBpc2VuXCA7CivpmYTorbAgPiBmdWdpXCA7CivmmYLlrpwgPiBqaWdpXCA7Civku6PjgIUgPiB5b3lvXCA7CivpmqDogIUgPiBpbmphXCA7CivmmYLlraMgPiBqaWtpXCA7CivplrvprZQgPiBlbm1hXCA7Civml6Xml6UgPiBoaWJpXCA7CivmlbDnj6AgPiBqdXp1XCA7CivpmYToqJggPiBmdWtpXCA7CivpoKTkvb8gPiBpc2hpXCA7CivpmbDokI4gPiBpbicnaVwgOwor6Z+z5ZCQID4gb250b1wgOwor6Z+z5Y+JID4gb25zYVwgOwor5aiB5ZCNID4gaW1laVwgOwor6Z2S5pyoID4gYW9raVwgOwor5aiB5Y6zID4gaWdlblwgOwor6Kyd5oSPID4gc2hhaVwgOwor57a6576FID4ga2lyYVwgOwor5aiB5YuiID4gaXNlaVwgOwor5Z+66YOoID4ga2lidVwgOwor5aaC5oSPID4gbnlvaVwgOwor6K2s5ZapID4gaGl5dVwgOwor6K2w5ZOhID4gZ2lpblwgOwor5aiB5YWJID4gaWtvdVwgOwor5aW95oSPID4ga291aVwgOwor5aW95oKqID4ga291b1wgOwor5aSc5rCXID4geWFraVwgOwor6Z+z5L6hID4gb25rYVwgOwor6Z+75LqLID4gaW5qaVwgOwor6KiY57SAID4ga2lraVwgOwor5pei5b6AID4ga2lvdVwgOwor6Kqe5rCXID4gZ29raVwgOwor54i+5b6MID4gamlnb1wgOwor5aiB5LukID4gaXJlaVwgOwor5pmC5YuZID4gamltdVwgOwor5aWl5oSPID4gb2t1aVwgOwor5Z6i6ZuiID4ga29yaVwgOwor6Zuy5rCXID4gdW5raVwgOwor6ZaT6ZaTID4gbWFtYVwgOwor5aKT56KRID4gYm9oaVwgOwor6Zuo5rC0ID4gdXN1aVwgOwor6K2y5L2NID4gam91aVwgOwor5aGp57SgID4gZW5zb1wgOwor5pmC5L6hID4gamlrYVwgOwor6K2w5LqLID4gZ2lqaVwgOwor54Sh57iBID4gbXVlblwgOwor5aSc5pqXID4geWFhblwgOwor5pmC5LqLID4gamlqaVwgOwor5pmC5LiLID4gamlrYVwgOwor5aSP5pyfID4ga2FraVwgOwor5aeU5Lu7ID4gaW5pblwgOwor5aW05amiID4gbnVoaVwgOwor57iK5q27ID4gaXNoaVwgOwor5aSn5omLID4gb29kZVwgOwor5pyo44CFID4ga2lnaVwgOwor6Zyy5bqnID4gcm96YVwgOwor6ZuF5q2MID4gZ2FrYVwgOwor6Kmg5q2MID4gZWlrYVwgOwor6Zmw55S7ID4gaW5nYVwgOwor5aSn5oSPID4gdGFpaVwgOwor5aOK5q27ID4gZXNoaVwgOwor54Sh56KNID4gbXVnZVwgOwor6KmQ5qy6ID4gc2FnaVwgOwor6Kqg5oSPID4gc2VpaVwgOwor54WZ54GrID4gZW5rYVwgOwor57WM57evID4ga2VpaVwgOwor6Z2S5ZywID4gYW9qaVwgOwor6Z2S5ZuzID4gYW96dVwgOwor5pWs5oSPID4ga2VpaVwgOwor5pGp576FID4gbWFyYVwgOwor57KX6YeOID4gc295YVwgOwor5aSn5bGLID4gb295YVwgOwor6Kqk5beuID4gZ29zYVwgOwor5aSn5bCJID4gdGFpaVwgOwor5puz44CFID4gZWllaVwgOwor57iB5pWFID4gZW5rb1wgOwor54Sh55CGID4gbXVyaVwgOwor5aSi5a+QID4gbXViaVwgOwor57ev5pu4ID4gaXNob1wgOwor5aSa5bKQID4gdGFraVwgOwor54WZ5rOiID4gZW5wYVwgOwor57OW6KGjID4gdG91aVwgOwor6Zyy5ZywID4gcm9qaVwgOwor5aWz5YWQID4gam9qaVwgOwor5aSa5a+hID4gdGFrYVwgOwor5o+06K23ID4gZW5nb1wgOwor5pen5LqLID4ga3VqaVwgOwor6Kqe5bC+ID4gZ29iaVwgOwor6Kqk5a2XID4gZ29qaVwgOwor54i+5L2ZID4gaml5b1wgOwor6Zyy5Za2ID4gcm9laVwgOwor5LiW44CFID4geW95b1wgOwor5aSl5aSaID4ga2F0YVwgOwor54Sh54WZID4gbXVlblwgOwor5pWw5a+EID4gc3VraVwgOwor5aSP5a2jID4ga2FraVwgOwor6Zi/54mHID4gYWhlblwgOwor6Zmw5rCXID4gaW5raVwgOwor5aSc5aScID4geW95b1wgOwor5aSa5aSaID4gdGF0YVwgOwor5peX5LiLID4ga2lrYVwgOwor5Zyf6ZaTID4gZG9tYVwgOwor5o6q6L6eID4gc29qaVwgOwor57iB5bqnID4gZW56YVwgOwor5pa55L2NID4gaG91aVwgOwor5aSW5ZuyID4gZ2FpaVwgOwor6Kqy5ZOhID4ga2FpblwgOwor5Z+656SOID4ga2lzb1wgOwor54Sh5rS+ID4gbXVoYVwgOwor6KaP55+pID4ga2lrdVwgOwor5aSc5Za2ID4geWFlaVwgOwor5r++6YGOID4gcm9rYVwgOwor6Zuo5aSpID4gdXRlblwgOwor5aWI5L2VID4gaWthblwgOwor6Zuo5aOwID4gdXNlaVwgOwor54Sh5q+UID4gbXVoaVwgOwor6KaL55uuID4gbWltZVwgOwor6Zuo5Z+fID4gdWlraVwgOwor57iB5a62ID4gZW5rYVwgOwor5aSc5Y2KID4geW93YVwgOwor6ZuJ5a2QID4ga2lqaVwgOwor6KGj6aaZID4gaWtvdVwgOwor6Kqe5ZGCID4gZ29yb1wgOwor54Sh5qmfID4gbXVraVwgOwor6KOc6KqeID4gaG9nb1wgOwor57eP5oSPID4gc291aVwgOwor6Zqg5b6uID4gaW5iaVwgOwor6Kqe5Y+lID4gZ29rdVwgOwor5o6p6K23ID4gZW5nb1wgOwor6KOc6KiYID4gaG9raVwgOwor6ZqP5oSPID4genVpaVwgOwor5aS35Lq6ID4gaWppblwgOwor6KGj6aGeID4gaXJ1aVwgOwor5aSc5YW3ID4geWFndVwgOwor54Sh5pyfID4gbXVraVwgOwor57KX6I+TID4gc29rYVwgOwor5aSa5L6hID4gdGFrYVwgOwor6ZyK5L2NID4gcmVpaVwgOwor5pS75ZuyID4ga291aVwgOwor5aSa5LqLID4gdGFqaVwgOwor54Gr566tID4gaGl5YVwgOwor57W15pysID4gZWhvblwgOwor5Zu66L6eID4ga29qaVwgOwor54uS44CFID4gaGloaVwgOwor5Zyf6KqeID4gZG9nb1wgOwor5Zyw6KGjID4gY2hpaVwgOwor5pSY5aS3ID4gam91aVwgOwor6ZuH5ZOhID4ga29pblwgOwor54Sh5o+0ID4gbXVlblwgOwor6ZuF5ZGzID4gZ2FtaVwgOwor57C/6KiYID4gYm9raVwgOwor54Sh5omLID4gbXV0ZVwgOwor54Sh5oiRID4gbXVnYVwgOwor54Gr55+iID4gaGl5YVwgOwor6Zi/5oi/ID4gYWhvdVwgOwor6KaH5rCXID4gaGFraVwgOwor6KOc6IKlID4gaG9oaVwgOwor6Ki05ZugID4gc29pblwgOwor6KaP5qihID4ga2lib1wgOwor6ZuE5YGJID4geXV1aVwgOwor5pWF5LqLID4ga29qaVwgOwor6KKI6KOfID4ga2VzYVwgOwor5aGX5biDID4gdG9mdVwgOwor57W15birID4gZXNoaVwgOwor6Zmk5aScID4gam95YVwgOwor54Sh5a2jID4gbXVraVwgOwor54Gr54SUID4ga2FlblwgOwor54Gr54KOID4ga2FlblwgOwor54Gr54KJID4ga2Fyb1wgOwor5oq86Z+7ID4gb3VpblwgOwor5aGp5Z+6ID4gZW5raVwgOwor5pOs5Y+kID4gZ2lrb1wgOwor54K65pS/ID4gaXNlaVwgOwor54Sh5aGpID4gbXVlblwgOwor5o6o56e7ID4gc3VpaVwgOwor54Sh5Z6iID4gbXVrdVwgOwor54Sh5ZywID4gbXVqaVwgOwor6ZmE5ZuzID4gZnV6dVwgOwor57Sg5omLID4gc3VkZVwgOwor54Gr5rCXID4ga2FraVwgOwor5pOs5Ly8ID4gZ2lqaVwgOwor5aGp5YyWID4gZW5rYVwgOwor6KiY5LqLID4ga2lqaVwgOwor54Sh5ZGzID4gbXVtaVwgOwor5pel44CFID4gaGliaVwgOwor6Zi/5ZGGID4gYWhvdVwgOwor5Zyw55WwID4gY2hpaVwgOwor6ZeH5oSaID4gYW5ndVwgOwor6Zmi5Li7ID4gaW5qdVwgOwor5aCC5a6HID4gZG91dVwgOwor6Z2S44CFID4gYW9hb1wgOwor6Zi/5YWEID4gYWtlaVwgOwor54Sh5L6hID4gbXVrYVwgOwor5aC05ZCIID4gYmFhaVwgOwor57W15YOPID4gZXpvdVwgOwor54Sh5LqMID4gbXVuaVwgOwor54Sh5LqLID4gYnVqaVwgOwor6KGj57SLID4gZW1vblwgOwor57SN5bGLID4gbmF5YVwgOwor6KaL5aC0ID4gbWliYVwgOwor6Zi/5LiWID4gYXNlaVwgOwor56yR6aGUID4gZWdhb1wgOwor5o+25o+EID4geWF5dVwgOwor5Z+65ZugID4ga2lpblwgOwor57Sg5ZywID4gc29qaVwgOwor57Sg5ZugID4gc29pblwgOwor57KX5py2ID4gc29kYVwgOwor5omL6ZaTID4gdGVtYVwgOwor5Zuz55S7ID4genVnYVwgOwor56ug6a2aID4gdGFrb1wgOwor5aSc44CFID4geW95b1wgOwor5aSa44CFID4gdGF0YVwgOwor54Gr5bGLID4gaG95YVwgOwor5om56K2wID4gaGlnaVwgOwor54Cs5oi4ID4gc2V0b1wgOwor6J676JuEID4ga2VyYVwgOwor54Gr5aSrID4ga2FmdVwgOwor6ZaT5aSrID4gbWFidVwgOwor5oyB56KBID4gamlnb1wgOwor5ryU6IieID4gZW5idVwgOwor57OK5aGXID4ga290b1wgOwor57KX5biDID4gc29mdVwgOwor5ryU6ICFID4gZW5qYVwgOwor54Gr5ZmoID4ga2FraVwgOwor6JuZ6bu9ID4gYWJvdVwgOwor5ryU576pID4gZW5naVwgOwor5o6P5pG4ID4gc3VyaVwgOwor6KGM54K6ID4ga291aVwgOwor57Gg5omLID4ga290ZVwgOwor6KGM54GrID4gYW5rYVwgOwor566H566HID4ga29rb1wgOwor6KO45ammID4gcmFmdVwgOwor5Zuz5qGIID4genVhblwgOwor5Zyf5omLID4gZG90ZVwgOwor5rip6ZuFID4gb25nYVwgOwor5o+05YqpID4gZW5qb1wgOwor6J2m6J+HID4gZ2FtYVwgOwor5Zug5p6cID4gaW5nYVwgOwor6KGj5qGBID4gaWtvdVwgOwor6b2f6b2sID4gc29nb1wgOwor54Gr5LqLID4ga2FqaVwgOwor5Zu65oyBID4ga29qaVwgOwor5Zub5pmCID4geW9qaVwgOwor5Zub5pa5ID4geW9tb1wgOwor6J2M6JqqID4ga2F0b1wgOwor5Zu95bqcID4ga29mdVwgOwor5o275a2QID4gbmVqaVwgOwor5Zyw5aC0ID4gamliYVwgOwor5rer6Z2hID4gaW5iaVwgOwor5omL5769ID4gdGViYVwgOwor6Jya6KqeID4gaGlnb1wgOwor5rer6ZuoID4gaW4nJ3VcIDsKK+ijnOWKqSA+IGhvam9cIDsKK+aNqeWtkCA+IG5lamlcIDsKK+a5r+iRiSA+IHl1YmFcIDsKK+aFsOmciiA+IGlyZWlcIDsKK+Wcn+WZqCA+IGRva2lcIDsKK+icmOibmyA+IGt1bW9cIDsKK+aMieaRqSA+IGFubWFcIDsKK+iho+W4ryA+IGl0YWlcIDsKK+ijnOS9kCA+IGhvc2FcIDsKK+aOiOWPlyA+IGp1anVcIDsKK+aJk+egtCA+IGRhaGFcIDsKK+aLv+aNlSA+IGRhaG9cIDsKK+m8u+mfsyA+IGJpb25cIDsKK+Wcn+WMqiA+IGRvaGlcIDsKK+WUlumItCA+IGFyZWlcIDsKK+a8lOatpiA+IGVuYnVcIDsKK+a8lOatjCA+IGVua2FcIDsKK+WcsOS9jSA+IGNoaWlcIDsKK+enu+mghSA+IGlrb3VcIDsKK+WcqOS9jSA+IHphaWlcIDsKK+ihjeWtlyA+IGVuamlcIDsKK+WckuWFkCA+IGVuamlcIDsKK+aEm+mmrCA+IGFpYmFcIDsKK+aOiOS4jiA+IGp1eW9cIDsKK+Wbm+WbsiA+IHNoaWlcIDsKK+WbuuWMliA+IGtva2FcIDsKK+aNleWQjyA+IGhvcmlcIDsKK+aEm+mjsiA+IGFpaW5cIDsKK+WTgOmfsyA+IGFpb25cIDsKK+a1t+mmrCA+IHRvZG9cIDsKK+aEm+mhpyA+IGFpa29cIDsKK+a1t+memCA+IGhveWFcIDsKK+WbnuWQkSA+IGVrb3VcIDsKK+a4oeiLsSA+IHRvZWlcIDsKK+aIr+eUuyA+IGdpZ2FcIDsKK+aFsOisnSA+IGlzaGFcIDsKK+m7tOmbqCA+IGJhaXVcIDsKK+a8lOaKgCA+IGVuZ2lcIDsKK+iho+WGoCA+IGlrYW5cIDsKK+a8lOaIryA+IGVuZ2lcIDsKK+enu+mAgSA+IGlzb3VcIDsKK+WSjOmfsyA+IHdhb25cIDsKK+aKvOW/jSA+IG9zc3VcIDsKK+enu+i7oiA+IGl0ZW5cIDsKK+mKhemRvCA+IGRvcmFcIDsKK+aFsOiXiSA+IGlzaGFcIDsKK+aKiuaMgSA+IGhhamlcIDsKK+aEm+i8nSA+IGFpa2lcIDsKK+a5r+eFriA+IHl1bmlcIDsKK+enu+itsiA+IGlqb3VcIDsKK+aCqumsvCA+IGFra2lcIDsKK+aEj+i2oyA+IGlzaHVcIDsKK+aEm+ittyA+IGFpZ29cIDsKK+enu+ihjCA+IGlrb3VcIDsKK+WTgOipsSA+IGFpd2FcIDsKK+WTgOiotCA+IGFpc29cIDsKK+WRiemgiCA+IGdvc3VcIDsKK+mWk+OAhSA+IG1hbWFcIDsKK+WRiemfsyA+IGdvb25cIDsKK+m7hOmJmyA+IG91ZW5cIDsKK+enmOipsSA+IGhpd2FcIDsKK+a5r+awlyA+IHl1Z2VcIDsKK+ieuuWtkCA+IG5lamlcIDsKK+aEj+imiyA+IGlrZW5cIDsKK+aLh+WNsCA+IGJvaW5cIDsKK+m7hOi6qyA+IGtpbWlcIDsKK+WSjOitsCA+IHdhZ2lcIDsKK+aKvOWNsCA+IG91aW5cIDsKK+WZqOWFtyA+IGtpZ3VcIDsKK+WSjOiqniA+IHdhZ29cIDsKK+aCsumBiyA+IGhpdW5cIDsKK+m8k+iIniA+IGtvYnVcIDsKK+WQkOmcsiA+IHRvcm9cIDsKK+aBqemhpyA+IG9ua29cIDsKK+aBtembqCA+IGtlaXVcIDsKK+a1ruiPryA+IGZ1a2FcIDsKK+a1t+iLlCA+IG5vcmlcIDsKK+a1t+iKiyA+IGthaXVcIDsKK+elnumFkiA+IG1pa2lcIDsKK+a1hOihoyA+IGpvdWVcIDsKK+ays+mmrCA+IGthYmFcIDsKK+iVjum6piA+IHNvYmFcIDsKK+aKvOS4iyA+IG91a2FcIDsKK+a4oeaysyA+IHRva2FcIDsKK+m4mum1oSA+IG91bXVcIDsKK+WQiOmWkyA+IGFpbWFcIDsKK+WPs+mdoiA+IHVtZW5cIDsKK+m8u+elliA+IGJpc29cIDsKK+aCquiyqCA+IGFra2FcIDsKK+a4oeaspyA+IHRvb3VcIDsKK+enu+euoSA+IGlrYW5cIDsKK+WQpumBiyA+IGhpdW5cIDsKK+WPpOmfsyA+IGtvb25cIDsKK+WYlOWQkCA+IG91dG9cIDsKK+aCsuipsSA+IGhpd2FcIDsKK+WSjOiLsSA+IHdhZWlcIDsKK+WPpOmbhSA+IGtvZ2FcIDsKK+a7i+WRsyA+IGppbWlcIDsKK+aJtuWKqSA+IGZ1am9cIDsKK+WUlueEtiA+IGF6ZW5cIDsKK+iYh+iKsyA+IHN1b3VcIDsKK+etieS9jSA+IHRvdWlcIDsKK+iXjeikuCA+IGJvcm9cIDsKK+aCquihoyA+IGFrdWlcIDsKK+elluiqniA+IHNvZ29cIDsKK+aAqumbqCA+IGthaXVcIDsKK+a5r+WxiyA+IHl1eWFcIDsKK+WUvuajhCA+IGRha2lcIDsKK+WPs+i+uiA+IHVoZW5cIDsKK+aFiOeItiA+IGppZnVcIDsKK+WWnOWvvyA+IGtpanVcIDsKK+WPpOmDvSA+IGtvdG9cIDsKK+ayv+i3ryA+IGVucm9cIDsKK+mHjumEmSA+IHlhaGlcIDsKK+a5r+WlsyA+IHl1bmFcIDsKK+WOremboiA+IG9ucmlcIDsKK+m8u+eCjiA+IGJpZW5cIDsKK+mHjui+uiA+IG5vYmVcIDsKK+m7hOe3ryA+IGtvdWlcIDsKK+iVqui+niA+IGJ1amlcIDsKK+aBqeiqvCA+IG9uZ2lcIDsKK+epjuaenCA+IGVpa2FcIDsKK+mLreawlyA+IGVpa2lcIDsKK+WWtuWWtiA+IGVpZWlcIDsKK+azleihoyA+IGhvdWVcIDsKK+ays+ixmiA+IGZ1Z3VcIDsKK+mHjui3ryA+IG5vamlcIDsKK+a4qeW6piA+IG9uZG9cIDsKK+azleieuiA+IGhvcmFcIDsKK+iTlum6uyA+IGhpbWFcIDsKK+aJgOS7pSA+IHl1ZW5cIDsKK+WRquespiA+IGp1ZnVcIDsKK+aFiOavjSA+IGppYm9cIDsKK+WPpOiqniA+IGtvZ29cIDsKK+WWtuWIqSA+IGVpcmlcIDsKK+WPpOiomCA+IGtva2lcIDsKK+W/nOmcgCA+IG91anVcIDsKK+iWlOiWhyA+IGJhcmFcIDsKK+aIkeWIqSA+IGdhcmlcIDsKK+enu+awkSA+IGltaW5cIDsKK+WWh+WYmyA+IHJhbWFcIDsKK+aGjuaCqiA+IHpvdW9cIDsKK+epuuWwiSA+IGt1dWlcIDsKK+epjuaCnyA+IGVpZ29cIDsKK+awl+mfuyA+IGtpaW5cIDsKK+WPs+iRiSA+IHV5b3VcIDsKK+m6u+eXuiA+IG1haGlcIDsKK+WTgOatjCA+IGFpa2FcIDsKK+awl+manCA+IGtpemFcIDsKK+WPl+iYiiA+IGp1dW5cIDsKK+W+oemhlCA+IG9rYW9cIDsKK+aEm+apnyA+IGFpa2lcIDsKK+WPs+iItyA+IHVnZW5cIDsKK+m5teewvyA+IHJvYm9cIDsKK+aBqee+qSA+IG9uZ2lcIDsKK+WNgembqCA+IGp1dXVcIDsKK+WPs+iEsyA+IHVub3VcIDsKK+a4qeWSjCA+IG9ud2FcIDsKK+awuOmBoCA+IGVpZW5cIDsKK+aEmuahiCA+IGd1YW5cIDsKK+mHjuiJryA+IG5vcmFcIDsKK+W/jOmBvyA+IGtpaGlcIDsKK+iSv+mbgCA+IGFvamlcIDsKK+a3q+WppiA+IGlucHVcIDsKK+awl+mLrSA+IGtpZWlcIDsKK+aDsOawlyA+IGRha2lcIDsKK+WSjOawlyA+IHdha2lcIDsKK+iaiuW4syA+IGtheWFcIDsKK+a1t+adviA+IG1pcnVcIDsKK+aFiOaEmyA+IGppYWlcIDsKK+aFiOaCsiA+IGppaGlcIDsKK+WPpee+qSA+IGt1Z2lcIDsKK+WPpOe+qSA+IGtvZ2lcIDsKK+WSjOatjCA+IHdha2FcIDsKK+axmuihjCA+IG9rb3VcIDsKK+WRvOawlyA+IGtva2lcIDsKK+awl+mBiyA+IGtpdW5cIDsKK+iaiuWxiyA+IGtheWFcIDsKK+egtOmiqCA+IGhhZnVcIDsKK+aEm+aSqyA+IGFpYnVcIDsKK+m7hOaziSA+IHlvbWlcIDsKK+WNsOitnCA+IGlucHVcIDsKK+W/nOiotCA+IG91c29cIDsKK+W+oemFkiA+IG1pa2lcIDsKK+avjemfsyA+IGJvaW5cIDsKK+mDvembhSA+IHRvZ2FcIDsKK+m7hOarqCA+IGhhemVcIDsKK+W/jOirsSA+IGtpa2lcIDsKK+WTgOaFlSA+IGFpYm9cIDsKK+WMu+mBkyA+IGlkb3VcIDsKK+WQiOedgCA+IGFpZ2lcIDsKK+epj+WSjCA+IG9ud2FcIDsKK+epuuS9jSA+IGt1dWlcIDsKK+enmOaKgCA+IGhpZ2lcIDsKK+ellueItiA+IHNvZnVcIDsKK+aEm+aFlSA+IGFpYm9cIDsKK+W+oei6qyA+IG9ubWlcIDsKK+WQjOeVsCA+IGRvdWlcIDsKK+WPpOeogCA+IGtva2lcIDsKK+auuumZoyA+IHRhdGVcIDsKK+aFsOWVjyA+IGltb25cIDsKK+WNkeiqniA+IGhpZ29cIDsKK+WNseiZniA+IGtpZ3VcIDsKK+aEj+aAnSA+IGlzaGlcIDsKK+aCsuatjCA+IGhpa2FcIDsKK+WMuuiyuyA+IGt1aGlcIDsKK+aEj+W/lyA+IGlzaGlcIDsKK+WRhuawlyA+IGFra2VcIDsKK+mCqumtlCA+IGphbWFcIDsKK+mCqumsvCA+IGpha2lcIDsKK+mDvemEmSA+IHRvaGlcIDsKK+WMuuitsCA+IGt1Z2lcIDsKK+engeaEjyA+IHNoaWlcIDsKK+W+kuiyuyA+IHRvaGlcIDsKK+aFsOWKtCA+IGlyb3VcIDsKK+egtOmCqiA+IGhhamFcIDsKK+W+gOi3ryA+IG91cm9cIDsKK+a3q+S6iyA+IGluamlcIDsKK+WPpOeUuyA+IGtvZ2FcIDsKK+mCqumjmyA+IGphaGlcIDsKK+elluavjSA+IHNvYm9cIDsKK+W+oeihoyA+IGd5b2lcIDsKK+mLreWIqSA+IGVpcmlcIDsKK+a0vuaJiyA+IGhhZGVcIDsKK+aCquaenCA+IGFra2FcIDsKK+ayueeFmSA+IHl1ZW5cIDsKK+W8pemZgCA+IG1pZGFcIDsKK+mHjueMvyA+IHlhZW5cIDsKK+WPl+eQhiA+IGp1cmlcIDsKK+WRvOW/nCA+IGtvb3VcIDsKK+enmOWlpSA+IGhpb3VcIDsKK+aAqueVsCA+IGthaWlcIDsKK+mDveitsCA+IHRvZ2lcIDsKK+aEj+WkliA+IGlnYWlcIDsKK+avlOirrSA+IGhpeXVcIDsKK+mBuumquCA+IGlnYWlcIDsKK+axmuepoiA+IG93YWlcIDsKK+aEmuWbsyA+IGd1enVcIDsKK+W+geihoyA+IHNlaWlcIDsKK+aDheaEjyA+IGpvdWlcIDsKK+a1geW4gyA+IHJ1ZnVcIDsKK+avjeiqniA+IGJvZ29cIDsKK+mBuummmSA+IGlrb3VcIDsKK+mHjueBqyA+IG5vYmlcIDsKK+WSjOWtlyA+IHdhamlcIDsKK+WQiOatkyA+IG5lbXVcIDsKK+enu+WLlSA+IGlkb3VcIDsKK+WNsOe2rCA+IGluanVcIDsKK+WKoOmZpCA+IGtham9cIDsKK+W+oeiMtiA+IG9jaGFcIDsKK+aEj+WariA+IGlrb3VcIDsKK+mBuumiqCA+IGlmdXVcIDsKK+avgOiqiSA+IGtpeW9cIDsKK+m6u+W4gyA+IG1hZnVcIDsKK+m8u+S4iyA+IGJpa2FcIDsKK+aCquaEnyA+IG9rYW5cIDsKK+aCquaEjyA+IGFrdWlcIDsKK+aEj+WQkSA+IGlrb3VcIDsKK+enu+S9jyA+IGlqdXVcIDsKK+iZmuS9jSA+IGt5b2lcIDsKK+WMu+iAhSA+IGlzaGFcIDsKK+aBteaWuSA+IGVob3VcIDsKK+iZmuS7riA+IGtva2VcIDsKK+enu+S5lyA+IGlqb3VcIDsKK+aEm+WFkCA+IGFpamlcIDsKK+WKoOmHjCA+IGthcmlcIDsKK+mHjuasoSA+IHlhamlcIDsKK+aymeaxsCA+IHNhdGFcIDsKK+enmOWEgCA+IGhpZ2lcIDsKK+WKqei+niA+IGpvamlcIDsKK+atpumBiyA+IGJ1dW5cIDsKK+asp+mcsiA+IG91cm9cIDsKK+W+oeewviA+IG1pc3VcIDsKK+aCquWvkiA+IG9rYW5cIDsKK+WNseeWkSA+IGtpZ2lcIDsKK+WRs+WZjCA+IG1pc29cIDsKK+WPs+aWuSA+IHVob3VcIDsKK+WNsOeUuyA+IGluZ2FcIDsKK+W7iOmWgCA+IGFtb2lcIDsKK+enmOS6iyA+IGhpamlcIDsKK+axmueCuSA+IG90ZW5cIDsKK+WNsOeSvSA+IGluamlcIDsKK+avm+e+vSA+IGtlYmFcIDsKK+emjeWboCA+IGthaW5cIDsKK+mHjuaariA+IHlhYm9cIDsKK+WRteWRtSA+IGtha2FcIDsKK+WQjOaEjyA+IGRvdWlcIDsKK+aAkuawlyA+IGRva2lcIDsKK+WQiOaEjyA+IGdvdWlcIDsKK+W+oeekvCA+IG9yZWlcIDsKK+azouW4gyA+IGhhYnVcIDsKK+W+oeeilyA+IG93YW5cIDsKK+aBo+aEjyA+IHNoaWlcIDsKK+iRteiKsSA+IGtpa2FcIDsKK+WKoOittyA+IGthZ29cIDsKK+mBuui0iCA+IGl6b3VcIDsKK+axmuazpSA+IG9kZWlcIDsKK+mBuuizoiA+IGlrZW5cIDsKK+ejgeawlyA+IGppa2lcIDsKK+mBuuiyoSA+IGl6YWlcIDsKK+efs+iTtCA+IGFvc2FcIDsKK+W+oeebhiA+IG9ib25cIDsKK+aCsuWWnCA+IGhpa2lcIDsKK+axmuawtCA+IG9zdWlcIDsKK+WPjeaVhSA+IGhvZ29cIDsKK+W8iuihoyA+IGhlaWlcIDsKK+aCsuWTgCA+IGhpYWlcIDsKK+mBoOi3ryA+IGVucm9cIDsKK+WMu+eVjCA+IGlrYWlcIDsKK+mBuuiqoSA+IGlrYWlcIDsKK+WMu+eUqCA+IGl5b3VcIDsKK+mBuuiokyA+IGlrdW5cIDsKK+WNl+eEoSA+IG5hbXVcIDsKK+W+geefoiA+IHNveWFcIDsKK+i/vemiqCA+IG9pdGVcIDsKK+aCquWMliA+IGFra2FcIDsKK+awl+eCjiA+IGtpZW5cIDsKK+egkue0oCA+IGhpc29cIDsKK+aAquaIkSA+IGtlZ2FcIDsKK+WPs+WyuCA+IHVnYW5cIDsKK+m6vuS4iyA+IGtpa2FcIDsKK+awuOawuCA+IGVpZWlcIDsKK+axmuafkyA+IG9zZW5cIDsKK+aBqeWogSA+IG9uJydpXCA7CivnpYflnJIgPiBnaW9uXCA7Civlj6TluIwgPiBrb2tpXCA7Civojbfpp4QgPiBuaWRhXCA7CivljbHmqZ8gPiBraWtpXCA7CivmsJfmuKkgPiBraW9uXCA7CivlvpLniL4gPiB0b2ppXCA7CivmgJ3mg58gPiBzaGlpXCA7Civlvq7muKkgPiBiaW9uXCA7CivpgY7oqqQgPiBrYWdvXCA7Civlj6TlrZcgPiBrb2ppXCA7CivlkIjlm7MgPiBhaXp1XCA7CivnoLTnk5wgPiBoYWthXCA7CivpgbrokZcgPiBpY2hvXCA7Civlub7ph40gPiBpa3VlXCA7CivmsZrmkI0gPiBvc29uXCA7CivlkI/lk6EgPiByaWluXCA7Civljq3mgqogPiBlbicnb1wgOwor5Y+v5aGRID4ga2Fzb1wgOwor5Y675bm0ID4ga296b1wgOwor6YG66I2JID4gaXNvdVwgOwor6I6r6L+mID4gYmFrYVwgOwor6YG66IqzID4gaWhvdVwgOwor5ZCN5Yy7ID4gbWVpaVwgOwor5Y6a5oSPID4ga291aVwgOwor5ZCP5YuZID4gcmltdVwgOwor5q2M6IieID4ga2FidVwgOwor6L+C6YGgID4gdWVuXCA7Civlvq7mhI8gPiBiaWlcIDsKK+WPmeS9jSA+IGpvaVwgOwor6L+C6LevID4gdXJvXCA7CivlvpfmiYsgPiBldGVcIDsKK+awl+WuhyA+IGtpdVwgOwor5beu6YGVID4gc2FpXCA7CivljLvlrrYgPiBpa2FcIDsKK+WFq+mHjSA+IHlhZVwgOwor5Yy75ZOhID4gaWluXCA7Civpgbrmo4QgPiBpa2lcIDsKK+WMu+WLmSA+IGltdVwgOwor5Yy75LqLID4gaWppXCA7CivpgbrmhJsgPiBpYWlcIDsKK+mBuuW9sSA+IGllaVwgOwor6YOo5L2NID4gYnVpXCA7CivmrablqIEgPiBidWlcIDsKK+mBuuWtpCA+IGlrb1wgOwor5beu55WwID4gc2FpXCA7CivnlbDpn7MgPiBpb25cIDsKK+mBuuWFkCA+IGlqaVwgOwor6YGV5ZKMID4gaXdhXCA7CivpgbrkuosgPiBpamlcIDsKK+W4jOaciSA+IGtldVwgOwor6L+C5oSaID4gdWd1XCA7CivmrKfkupwgPiBvdWFcIDsKK+asoeS9jSA+IGppaVwgOwor5qyh5LqcID4gamlhXCA7CivnnInlrocgPiBiaXVcIDsKK+i+nuaEjyA+IGppaVwgOwor55Ww6K2wID4gaWdpXCA7Civovp7lvZkgPiBqaWlcIDsKK+WxhemWkyA+IGltYVwgOwor55Ww576pID4gaWdpXCA7CivluLDkvp0gPiBraWVcIDsKK+mmmemtmiA+IGF5dVwgOwor5qmf5L2NID4ga2lpXCA7CivkvLzpnZ4gPiBlc2VcIDsKK+Wwvue+vSA+IG9oYVwgOwor55Ww54i2ID4gaWZ1XCA7CivkvJrpmbAgPiBlaW5cIDsKK+S9jeiomCA+IGlraVwgOwor55Ww5q+NID4gaWJvXCA7CivkupzpursgPiBhbWFcIDsKK+S7pemBoCA+IGllblwgOwor5LyK6KqeID4gaWdvXCA7Civoh6rmhbAgPiBqaWlcIDsKK+WuieiKuCA+IGFraVwgOwor5Lqc6YmbID4gYWVuXCA7CivnlLLmlpAgPiBrYWlcIDsKK+eVj+aHvCA+IGlrdVwgOwor55WP5oCWID4gaWZ1XCA7CivlsL7moLkgPiBvbmVcIDsKK+eUu+aEjyA+IGdhaVwgOwor5qSF5a2QID4gaXN1XCA7CivnlbDlm7MgPiBpdG9cIDsKK+eVsOWMliA+IGlrYVwgOwor6IOD54KOID4gaWVuXCA7CivkvY3mrKEgPiBpamlcIDsKK+S+neaAmSA+IGVrb1wgOwor5Lqc56eRID4gYWthXCA7CivkvZnmhI8gPiB5b2lcIDsKK+S7ruaciSA+IGtldVwgOwor5L6N5Yy7ID4gamlpXCA7CivkupHngrogPiB1bmlcIDsKK+S+neS8sCA+IGVrb1wgOwor5Lqc5qynID4gYW91XCA7Civku6XlvowgPiBpZ29cIDsKK+S7peW+gCA+IGlvdVwgOwor5LuW5oSPID4gdGFpXCA7Civos4DmhI8gPiBnYWlcIDsKK+acieeEoSA+IHVtdVwgOwor6LK05oSPID4ga2lpXCA7CivkvJrljq0gPiBlZW5cIDsKK+aghOS9jSA+IGVpaVwgOwor5LqV5oi4ID4gaWRvXCA7CivpnZ7pgZUgPiBoaWlcIDsKK+WknOmbqCA+IHlhdVwgOwor5aSa6ZuoID4gdGF1XCA7CivkuozlsIkgPiBuaWlcIDsKK+mbqOmcsiA+IHVyb1wgOwor5Lul5LiLID4gaWthXCA7CivloqjprZogPiBpa2FcIDsKK+S4jeaEjyA+IGZ1aVwgOwor5LiL5oSPID4ga2FpXCA7CivkuozkvY0gPiBuaWlcIDsKK+WogeatpiA+IGlidVwgOwor5pyJ5Y2mID4gdWtlXCA7CivnjovkvY0gPiBvdWlcIDsKK+e+heWuhyA+IHJhb1wgOwor57695YyWID4gdWthXCA7CivntbXppqwgPiBlbWFcIDsKK+WnlOajhCA+IGlraVwgOwor5aWH55WwID4ga2lpXCA7CivkuIvkvY0gPiBrYWlcIDsKK+mYv+irmyA+IGF5dVwgOwor5aiB5YSAID4gaWdpXCA7Civlo4rnlr0gPiBlc29cIDsKK+eDj+iziiA+IGlrYVwgOwor5aeU5ZOhID4gaWluXCA7Civpm6jmsJcgPiB1a2lcIDsKK+WnlOS7mCA+IGlmdVwgOwor6Zuo5pyfID4gdWtpXCA7Civoqp7mhI8gPiBnb2lcIDsKK+iqnuW9mSA+IGdvaVwgOwor5aWz5Yy7ID4gam9pXCA7CivlpoLkvZUgPiBkb3VcIDsKK+mbqOW+jCA+IHVnb1wgOwor5pWF5oSPID4ga29pXCA7CivnhKHngrogPiBtdWlcIDsKK+ijnOmBuiA+IGhvaVwgOwor6Zuo5a2jID4gdWtpXCA7Civnt6/luqYgPiBpZG9cIDsKK+mYv+avlCA+IGFiaVwgOwor57at5oyBID4gaWppXCA7Civpm7LkuLkgPiB1bmlcIDsKK+eEoeaEjyA+IG11aVwgOwor6Zi/5a2XID4gYWppXCA7CivpmL/lqr0gPiBhbWFcIDsKK+eBsOaxgSA+IGFrdVwgOwor57W15ZuzID4gZXp1XCA7CivopovlvpcgPiBtaWVcIDsKK+mYv+WQvSA+IGF1blwgOwor54Sh5L2NID4gbXVpXCA7Civmu4vpm6ggPiBqaXVcIDsKK+WbsueigSA+IGlnb1wgOwor57SG5L2ZID4gdXlvXCA7CivooaPmnrYgPiBpa2FcIDsKK+aFiOmbqCA+IGppdVwgOwor5rW36auqID4gb2dvXCA7CivmhI/ppqwgPiBpYmFcIDsKK+Wbs+S8miA+IHp1ZVwgOwor5omA54K6ID4gc2VpXCA7CivmgqrpnLIgPiBvcm9cIDsKK+a1t+iDhiA+IHVuaVwgOwor5rW36ICBID4gZWJpXCA7CivmiJHmhI8gPiBnYWlcIDsKK+m6u+ihoyA+IG1haVwgOwor5oSP576pID4gaWdpXCA7CivonablpLcgPiBlem9cIDsKK+ehq+m7hCA+IGlvdVwgOwor5oWw5pKrID4gaWJ1XCA7Civlvq7pm6ggPiBiaXVcIDsKK+aEj+awlyA+IGlraVwgOwor6Yut5oSPID4gZWlpXCA7CivnqaLlpJogPiBldGFcIDsKK+WMu+mZoiA+IGlpblwgOwor56mi5ZyfID4gZWRvXCA7Civlj7PnuIEgPiB1ZW5cIDsKK+aFsOWuiSA+IGlhblwgOwor5Y2B6YeNID4gdG9lXCA7CivmhJrmhI8gPiBndWlcIDsKK+a1t+WlsyA+IGFtYVwgOwor5oSP5ZywID4gaWppXCA7CivmhI/lm7MgPiBpdG9cIDsKK+WPs+a0viA+IHVoYVwgOwor5oSP5ZGzID4gaW1pXCA7CivokI7pnaEgPiBpYmlcIDsKK+a1t+S6uiA+IGFtYVwgOwor5Yy756eRID4gaWthXCA7CivlubTprZogPiBheXVcIDsKK+WPpeaEjyA+IGt1aVwgOwor5Y+k5oSPID4ga29pXCA7CivpgbroqaAgPiBpZWlcIDsKK+ekuuWogSA+IGppaVwgOwor5rGf5oi4ID4gZWRvXCA7CivkvIrkupUgPiBpaVwgOwor5Zea5ZG8ID4gYWFcIDsKK+i7liA+IHRzdW11Z2lrdXJ1bWFcIDsKK+ezjiA+IHNlbmNoaW1laXRvcnVcIDsKK+eyqCA+IGhla3V0b21lZXRvcnVcIDsKK+eIqyA+IHRzdW1la2FubXVyaVwgOwor5b+EID4gcml0c3VzaGluYmVuXCA7Civlv5cgPiBrb2tvcm96YXNoaVwgOwor5pS/ID4gbWF0c3VyaWdvdG9cIDsKK+m2jiA+IGtpa3VpdGFkYWtpXCA7Civnso0gPiBtaXJpbWVpdG9ydVwgOwor57KBID4ga2lyb21laXRvcnVcIDsKK+extSA+IGRla2FtZWV0b3J1XCA7Civnq7AgPiBzZW5jaGlyaXR0b1wgOwor56uhID4gaGVrdXRvcml0dG9cIDsKK+erkyA+IG1pcmlyaXR0b3J1XCA7Civnq48gPiBraXJvcml0dG9ydVwgOwor55OwID4gZGVzaGlndXJhbXVcIDsKK+W3sSA+IHRzdWNoaW5vdG9cIDsKK+WxoSA+IHNoaWJhc2hpYmFcIDsKK+isgCA+IGhha2FyaWdvdG9cIDsKK+eGnyA+IHRzdWt1ZHp1a3VcIDsKK+WYtCA+IGt1Y2hpYmFzaGlcIDsKK+OAhSA+IGt1cmlrYWVzaGlcIDsKK+mFmyA+IHNha2Vub21vdG9cIDsKK+iplCA+IG1pa290b25vcmlcIDsKK+idnyA+IGhhcmluZXp1bWlcIDsKK+iQmSA+IGt1dGFiaXJlcnVcIDsKK+erlSA+IGRlc2hpcml0dG9cIDsKK+eUhSA+IHNlbmNoaWd1cmFcIDsKK+eTuCA+IGhla3V0b2d1cmFcIDsKK+eTsSA+IG1pcmlndXJhbXVcIDsKK+eTqSA+IGtpcm9ndXJhbXVcIDsKK+eTpyA+IGRla2FndXJhbXVcIDsKK+aThSA+IGhvc2hpaW1hbWFcIDsKK+WLhSA+IG1pa290b25vcmlcIDsKK+WAqSA+IHRzdXJhdHN1cmFcIDsKK+W5uyA+IG1hYm9yb3NoaVwgOwor5bGNID4gc2hpa2FiYW5lXCA7CivlraQgPiBtaW5hc2hpZ29cIDsKK+eMqiA+IGlub3NoaXNoaVwgOwor5ZSHID4ga3VjaGliaXJ1XCA7CivmqqMgPiBob2Jhc2hpcmFcIDsKK+apmCA+IHRhY2hpYmFuYVwgOwor5YW1ID4gdHN1d2Ftb25vXCA7CivpioAgPiBzaGlyb2dhbmVcIDsKK+mCqiA+IHlva29zaGltYVwgOwor6a+QID4gc3ViYXNoaXJpXCA7CivprpcgPiBrb25vc2hpcm9cIDsKK+mYnSA+IGtvemF0b2hlblwgOwor6LidID4ga3VydWJ1c2hpXCA7Civoo4MgPiBrYW1pc2hpbW9cIDsKK+ihpCA+IGtvcm9tb2hlblwgOwor56uNID4gZGVrYXJpdHRvXCA7Civniq0gPiBrZW1vbm9oZW5cIDsKK+aktCA+IHRvZG9tYXRzdVwgOwor5bWZID4geWFtYXNoaW5hXCA7CivlsLggPiBzaGlrYWJhbmVcIDsKK+WHqSA+IGtvZ2FyYXNoaVwgOwor5LqlID4gaW5vc2hpc2hpXCA7CivlvLEgPiBuYXlvbmF5b1wgOwor6LmyID4gdHN1a3ViYWlcIDsKK+WnkSA+IHNodXV0b21lXCA7CivloYogPiBrYXRhbWFyaVwgOwor5aCkID4gdHN1dHN1bWlcIDsKK+m8kyA+IHRzdWR6dW1pXCA7CivmupAgPiBtaW5hbW90b1wgOwor6baPID4gbml3YXRvcmlcIDsKK+WPoiA+IGt1c2FtdXJhXCA7CivljbAgPiBzaGlydXNoaVwgOwor6a2CID4gdGFtYXNoaWlcIDsKK+iFuCA+IGhhcmF3YXRhXCA7Civmna8gPiBzYWthenVraVwgOwor6Zu3ID4ga2FtaW5hcmlcIDsKK+mbgSA+IGthcmlnYW5lXCA7CivmmoEgPiBha2F0c3VraVwgOwor57SrID4gbXVyYXNha2lcIDsKK+aOjCA+IHRlbm9oaXJhXCA7CivmipEgPiBzb21vc29tb1wgOwor5oeQID4gZnV0b2tvcm9cIDsKK+m7myA+IG1heXV6dW1pXCA7CivpsakgPiBoYXRhaGF0YVwgOwor6bCwID4gaGF0YWhhdGFcIDsKK+mvkSA+IGthenVub2tvXCA7CivprYEgPiBzYWtpZ2FrZVwgOwor6ayjID4gdGF0ZWdhbWlcIDsKK+mkniA+IGhhbmFtdWtlXCA7CivpoJEgPiBrYXRha3VuYVwgOwor6Zq8ID4gaGF5YWJ1c2FcIDsKK+mZtSA+IG1pc2FzYWdpXCA7CivploogPiB0c3VrYWVydVwgOwor6Yu4ID4gbm9rb2dpcmlcIDsKK+i6viA+IHNoaXRzdWtlXCA7Civoq7ogPiBrb3Rvd2F6YVwgOwor6KSMID4gZnVuZG9zaGlcIDsKK+ibpCA+IGhhbWFndXJpXCA7CivokpwgPiBuaW4nJ25pa3VcIDsKK+iBviA+IG1pbWlzaGlpXCA7CivntrQgPiB0c3VkenVyaVwgOwor56+BID4gdGFrYW11cmFcIDsKK+etjSA+IHRha2Vub2tvXCA7CivnopEgPiBpc2hpYnVtaVwgOwor55m4ID4gbWl6dW5vdG9cIDsKK+a8oyA+IHNhemFuYW1pXCA7CivmpaAgPiBrdXN1bm9raVwgOwor5berID4ga2FuJyduYWdpXCA7Civlr78gPiBrb3RvYnVraVwgOwor5ZyVID4gdG9zaG9rYW5cIDsKK+W9oiA+IGthdGFjaGlcIDsKK+i9jSA+IHdhZGFjaGlcIDsKK+W3tyA+IGNoaW1hdGFcIDsKK+i3oyA+IGhhZGFzaGlcIDsKK+i2oyA+IG9tb211a2lcIDsKK+WxgCA+IHRzdWJvbmVcIDsKK+WvpyA+IG11c2hpcm9cIDsKK+eNuiA+IGthd2F1c29cIDsKK+eLkCA+IGtpdHN1bmVcIDsKK+WrgiA+IGFuaXlvbWVcIDsKK+ipsSA+IGhhbmFzaGlcIDsKK+eHlSA+IHRzdWJhbWVcIDsKK+a7tCA+IHNoaXp1a3VcIDsKK+a5liA+IG1penV1bWlcIDsKK+WJoyA+IHRzdXJ1Z2lcIDsKK+WHnSA+IHNoaWtvcmlcIDsKK+WGoCA+IGthbm11cmlcIDsKK+akvyA+IHRzdWJha2lcIDsKK+ainyA+IGZ1a3Vyb3VcIDsKK+mggiA+IGl0YWRha2lcIDsKK+afsSA+IGhhc2hpcmFcIDsKK+S/jiA+IG1hbmFpdGFcIDsKK+aelyA+IGhheWFzaGlcIDsKK+S+jSA+IHNhbXVyYWlcIDsKK+e+iiA+IGhpdHN1amlcIDsKK+adsSA+IGhpZ2FzaGlcIDsKK+aYlCA+IG11a2FzaGlcIDsKK+e1jCA+IHRhdGVpdG9cIDsKK+ettSA+IG11c2hpcm9cIDsKK+mMpiA+IG5pc2hpa2lcIDsKK+engSA+IHdhdGFzaGlcIDsKK+elrSA+IG1hdHN1cmlcIDsKK+ekviA+IHlhc2hpcm9cIDsKK+eiuiA+IHRhc2hpa2FcIDsKK+mCuCA+IHlhc2hpa2lcIDsKK+m9siA+IG11c2hpYmFcIDsKK+m7pSA+IGlyZXp1bWlcIDsKK+m2qyA+IHRzdWd1bWlcIDsKK+m1pCA+IGlrYXJ1Z2FcIDsKK+m1hiA+IGNoaWRvcmlcIDsKK+mwmCA+IG11cm9hamlcIDsKK+mvsyA+IHN1a2Vzb3VcIDsKK+msmCA+IGthdHN1cmFcIDsKK+mbqyA+IHNoaXp1a3VcIDsKK+mOuSA+IGthc3VnYWlcIDsKK+mLqSA+IGtpc3Nha2lcIDsKK+mLkiA+IGtpc3Nha2lcIDsKK+mKryA+IGthc3VnYWlcIDsKK+i5hCA+IGhpZHp1bWVcIDsKK+isrCA+IGF5YW1hcmlcIDsKK+iqvCA+IHlvc2hpbWlcIDsKK+iqriA+IHlhc2FzaGlcIDsKK+ilhSA+IGNoaWhheWFcIDsKK+igjiA+IHV3YWJhbWlcIDsKK+idriA+IG1hbXVzaGlcIDsKK+ichiA+IHNoaWppbWlcIDsKK+iZsSA+IHNoaXJhbWlcIDsKK+iYsCA+IGthdHN1cmFcIDsKK+iVviA+IHRzdWJvbWlcIDsKK+iThiA+IG11c2hpcm9cIDsKK+iJgCA+IGhhc2hpa2VcIDsKK+iBoiA+IHNoaWthdG9cIDsKK+e/vCA+IHRzdWJhc2FcIDsKK+exoSA+IHNoaW5zaGlcIDsKK+ekqyA+IHRzdWJ1dGVcIDsKK+ekjiA+IGlzaGl6dWVcIDsKK+edqyA+IG1hdHN1Z2VcIDsKK+eUpiA+IHlvbWlnYWVcIDsKK+eJnCA+IHVzaGloZW5cIDsKK+avriA+IG11c2hpcnVcIDsKK+avnyA+IG11c2hpcnVcIDsKK+alvyA+IGthdHN1cmFcIDsKK+ajlyA+IG5hdHN1bWVcIDsKK+aiuyA+IHNoaWtpbWlcIDsKK+afiiA+IGhpaXJhZ2lcIDsKK+abmSA+IGFrZWJvbm9cIDsKK+aZkiA+IHNhcmFzaGlcIDsKK+aXgSA+IHRzdWt1cmlcIDsKK+aMmCA+IG11c2hpcnVcIDsKK+aLsyA+IGtvYnVzaGlcIDsKK+aAuiA+IGtvcmFlcnVcIDsKK+W+pCA+IHRha2VzaGlcIDsKK+W3vSA+IHRhdHN1bWlcIDsKK+WjrCA+IG1penVub2VcIDsKK+WajyA+IGt1c2hhbWlcIDsKK+WZuiA+IGhhbmFzaGlcIDsKK+S/pCA+IG9tb2thZ2VcIDsKK+S4vCA+IGRvbmJ1cmlcIDsKK+OAgyA+IG9uYWppa3VcIDsKK+eevCA+IG1hYnV0YVwgOwor6L63ID4gc3ViZXJ1XCA7CivnnrMgPiBoaXRvbWlcIDsKK+i8qSA+IHlha2FyYVwgOwor55uyID4gbWVzaGlpXCA7Civou4ogPiBrdXJ1bWFcIDsKK+W6jyA+IHRzdWlkZVwgOwor55qGID4gbWluJyduYVwgOwor5bmVID4gdG9iYXJpXCA7CivluLMgPiB0b2JhcmlcIDsKK+W4nSA+IG1pa2Fkb1wgOwor5bemID4gaGlkYXJpXCA7Civnlr4gPiBzaGl0c3VcIDsKK+eVsyA+IHRhdGFtaVwgOwor55WgID4gaGF0YWtlXCA7CivnlZEgPiBoYXRha2VcIDsKK+eTpiA+IGthd2FyYVwgOwor5bKsID4gbWlzYWtpXCA7CivlsYogPiB0b2Rva2VcIDsKK+WwiiA+IG1pa290b1wgOwor5a6dID4gdGFrYXJhXCA7CivnjaMgPiBrZW1vbm9cIDsKK+eLvCA+IG9va2FtaVwgOwor54usID4gZG9pdHN1XCA7Civlq4kgPiBzaGl0c3VcIDsKK+iqoCA+IG1ha290b1wgOwor6Ki8ID4gYWthc2hpXCA7CivniLYgPiBjaGljaGlcIDsKK+iomyA+IG5hbWFyaVwgOwor5aiYID4gbXVzdW1lXCA7Civlp78gPiBzdWdhdGFcIDsKK+WmviA+IHdhcmF3YVwgOwor5aa5ID4gaW1vdXRvXCA7CivopoEgPiBrYW5hbWVcIDsKK+iltyA+IHRhc3VraVwgOwor54WZID4ga2VtdXJpXCA7CivopZYgPiBmdXN1bWFcIDsKK+WksSA+IHNoaXRzdVwgOwor6KO4ID4gaGFkYWthXCA7CivoorQgPiBoYWthbWFcIDsKK+iiiyA+IGZ1a3Vyb1wgOwor6KGjID4ga29yb21vXCA7Civln7cgPiBzaGl0c3VcIDsKK+a/lSA+IHNoaXRzdVwgOwor6J+LID4gc2hpdHN1XCA7Civln4MgPiBob2tvcmlcIDsKK+ifgCA+IHNodXRzdVwgOwor6bysID4gaXRhY2hpXCA7CivpvKAgPiBuZXp1bWlcIDsKK+WcnyA+IHRzdWNoaVwgOwor5ryGID4gdXJ1c2hpXCA7Civom7kgPiBzYW5hZ2lcIDsKK+ibmSA+IGthd2F6dVwgOwor5rm/ID4gc2hpdHN1XCA7CivlmaggPiB1dHN1d2FcIDsKK+a4ryA+IG1pbmF0b1wgOwor6JasID4ga3VzdXJpXCA7CivolqogPiB0YWtpZ2lcIDsKK+a2mSA+IG5hbWlkYVwgOwor6JaHID4gemVubWFpXCA7CivoloQgPiBzdXN1a2lcIDsKK+m0iSA+IGthcmFzdVwgOwor5Y+xID4gc2hpdHN1XCA7CivljqggPiBrdXJpeWFcIDsKK+WNuCA+IG9yb3NoaVwgOwor5Y21ID4gdGFtYWdvXCA7CivmraogPiBpYml0c3VcIDsKK+mtmiA+IHNha2FuYVwgOwor5Y2XID4gbWluYW1pXCA7CivljKAgPiB0YWt1bWlcIDsKK+aruyA+IHNha3VyYVwgOwor6Iu6ID4gaWNoaWdvXCA7Civli6IgPiBoYXp1bWlcIDsKK+aqnCA+IGhpbm9raVwgOwor6IiFID4gc2h1dXRvXCA7CivmpoogPiBzYWtha2lcIDsKK+WFiSA+IGhpa2FyaVwgOwor6aSoID4geWFrYXRhXCA7CivogrQgPiBzYWthbmFcIDsKK+ahnCA+IHNha3VyYVwgOwor5YCZID4gc291cm91XCA7Civpn78gPiBoaWJpa2lcIDsKK+afsyA+IHlhbmFnaVwgOwor5L+lID4ga3VydW1hXCA7Civkv6EgPiBtYWtvdG9cIDsKK+S/hCA+IG5pd2FrYVwgOwor5L+CID4ga2FrYXJpXCA7Civkvr8gPiB5b3N1Z2FcIDsKK+aelSA+IG1ha3VyYVwgOwor5py6ID4gdHN1a3VlXCA7Civku48gPiBob3Rva2VcIDsKK+abhyA+IGt1bW9yaVwgOwor6ZuAID4gc3V6dW1lXCA7CivkuqwgPiBtaXlha29cIDsKK+maoyA+IHRvbmFyaVwgOwor5LmzID4gY2hpY2hpXCA7CivkuZkgPiBraW5vdG9cIDsKK+S5jSA+IG5hZ2FyYVwgOwor5LiHID4geW9yb3p1XCA7CivkuIMgPiBzaGljaGlcIDsKK+e4gSA+IHlvc3VnYVwgOwor5LiBID4gaGlub3RvXCA7Civnt5EgPiBtaWRvcmlcIDsKK+e1oyA+IGthc3VyaVwgOwor57WGID4ga2l6dW5hXCA7CivnsL4gPiBzdWRhcmVcIDsKK+mPoSA+IGthZ2FtaVwgOwor6Y6WID4ga3VzYXJpXCA7CivnrZIgPiB0c3V0c3VcIDsKK+aNjCA+IHNhYmFraVwgOwor6Yu8ID4gaGFnYW5lXCA7Civnq6UgPiB3YXJhYmVcIDsKK+mLjyA+IGhhc2FtaVwgOwor6YqDID4gdHN1dHN1XCA7CivpiZsgPiBuYW1hcmlcIDsKK+aJiSA+IHRvYmlyYVwgOwor5omAID4gdG9rb3JvXCA7Civpg70gPiBtaXlha29cIDsKK+aCiSA+IHNoaXRzdVwgOwor6b2mID4gaGFndWtpXCA7CivpvIggPiBzdXBwb25cIDsKK+m7nCA+IGNodXRzdVwgOwor6bqpID4gZnVzdW1hXCA7CivpupMgPiBmdW1vdG9cIDsKK+m1pSA+IGtha2VzdVwgOwor6bSsID4gdWd1aXN1XCA7CivptI4gPiBrYW1vbWVcIDsKK+mxuCA+IHN1enVraVwgOwor6bGwID4gc2hpaXJhXCA7CivpsaogPiBzaGlpcmFcIDsKK+mwuSA+IGthdHN1b1wgOwor6bCvID4gaXdhc2hpXCA7CivpsK4gPiBpd2FzaGlcIDsKK+mwmiA+IGhhcmFrYVwgOwor6bCKID4gbmlzaGluXCA7CivpsIYgPiBzYXdhcmFcIDsKK+mvsSA+IHNoYWNoaVwgOwor6a+wID4gbmFtYXp1XCA7Civpr6ggPiBrdWppcmFcIDsKK+mvoyA+IHN1cnVtZVwgOwor6a6qID4gbWFndXJvXCA7CivprpYgPiBrYWppa2FcIDsKK+mugyA+IGhpcmFtZVwgOwor6a24ID4gbmFtYXp1XCA7CivpqK0gPiBzaGl0c3VcIDsKK+miqiA+IG9yb3NoaVwgOwor6Z6QID4ga29oYXplXCA7CivpnJ4gPiBrYXN1bWlcIDsKK+mcmSA+IG1pem9yZVwgOwor6ZubID4gaGl5b2tvXCA7CivpmrIgPiBzaGl0c3VcIDsKK+masCA+IHNoaXRzdVwgOwor6ZGiID4geWFzdXJpXCA7CivpkZUgPiBzaGl0c3VcIDsKK+mOuiA+IGhhYmFraVwgOwor6Yy6ID4ga2F6YXJpXCA7Civpio0gPiBjaGl0c3VcIDsKK+mKiiA+IHNodXRzdVwgOwor6YmlID4gc2h1dHN1XCA7CivpiYsgPiBrYW4nJ25hXCA7CivpiKggPiBoYWJha2lcIDsKK+mGqiA+IG1vcm9taVwgOwor6YOFID4gc2hpdHN1XCA7CivpgZYgPiBhcHBhcmVcIDsKK+i/miA+IHRvdGVtb1wgOwor6LuIID4geWFnYXRlXCA7Civou4UgPiB5YWdhdGVcIDsKK+i6uyA+IHV0c3VrZVwgOwor6LquID4gc2VnYXJlXCA7CivouLUgPiBrYWthdG9cIDsKK+iziSA+IHNodXRzdVwgOwor6LKtID4gc2hpdHN1XCA7CivosZEgPiBjaGl0c3VcIDsKK+iogSA+IGdvbmJlblwgOwor6KKgID4gY2hpdHN1XCA7Civoop8gPiBjaGl0c3VcIDsKK+ihviA+IGZ1c3VtYVwgOwor6KCNID4gc2Fzb3JpXCA7Civon4QgPiBjaGl0c3VcIDsKK+idqCA+IHNoaXRzdVwgOwor6JuNID4gaG90YXJ1XCA7CivolrogPiBuYXp1bmFcIDsKK+iVqCA+IHdhcmFiaVwgOwor6JS2ID4gc29ub2tvXCA7Civok6wgPiB5b21vZ2lcIDsKK+iSuiA+IHNoaXRzdVwgOwor6JKFID4gc3VrdW1vXCA7CivokoEgPiBzaHV0c3VcIDsKK+iOqCA+IHRhYmFrb1wgOwor6Iy4ID4ga2lub2tvXCA7CivohqMgPiBjaGl0c3VcIDsKK+iGoCA+IG5pa2F3YVwgOwor6IWfID4gY2hpdHN1XCA7CivnuoMgPiBrYXN1cmlcIDsKK+e4hSA+IG9kb3NoaVwgOwor57eVID4ga2FzdXJpXCA7CivntYAgPiBjaHV0c3VcIDsKK+ezmCA+IHN1a3Vtb1wgOwor57OSID4gaG9zaGlpXCA7Civnsq0gPiBzdWt1bW9cIDsKK+esgiA+IHV0c3Vib1wgOwor56uIID4ga2FtYWRvXCA7CivnqpIgPiBjaGl0c3VcIDsKK+eqiyA+IGNodXRzdVwgOwor56epID4gY2hpdHN1XCA7Civnp6QgPiBoYWthcmlcIDsKK+emiiA+IG1pc29naVwgOwor56WRID4gY2hpdHN1XCA7CivnpKkgPiBzaGl0c3VcIDsKK+ehsiA+IGhhemFtYVwgOwor56CmID4gdG9yaWRlXCA7CivnlKkgPiBzaHV0c3VcIDsKK+eTvCA+IHNhcmFrZVwgOwor55KxID4gc2hpdHN1XCA7CivnkZ8gPiBzaGl0c3VcIDsKK+eLuCA+IHRhbnVraVwgOwor54mDID4gb3VjaG91XCA7Civng48gPiBrYXJhc3VcIDsKK+a4miA+IG5hZ2lzYVwgOwor5raOID4geW9kYXJlXCA7Civms48gPiBjaHV0c3VcIDsKK+axoiA+IHRzdWNoaVwgOwor5rGAID4gbWlnaXdhXCA7CivmsLUgPiBzYW56dWlcIDsKK+apmSA+IGRhaWRhaVwgOwor5qi1ID4ga2lrb3JpXCA7CivmqK4gPiBob2t1c29cIDsKK+allCA+IGt1c2FiaVwgOwor5qWKID4geWFuYWdpXCA7CivmpLkgPiBzYXdhcmFcIDsKK+akqiA+IGt1bnVnaVwgOwor5qShID4ga3VudWdpXCA7CivmpJsgPiBtb21pamlcIDsKK+akmiA+IGt1bnVnaVwgOwor5qK6ID4gZnVtb3RvXCA7CivmobwgPiBzaGl0c3VcIDsKK+ahjiA+IHNoaXRzdVwgOwor5qCeID4gc2hpb3JpXCA7Civmn5IgPiBzaGl0c3VcIDsKK+adjiA+IHN1bW9tb1wgOwor5pqmID4ga295b21pXCA7CivmmYogPiBzaGl0c3VcIDsKK+aYtCA+IHN1YmFydVwgOwor5pGUID4gc2h1dHN1XCA7CivmjIMgPiBjaGl0c3VcIDsKK+aKtiA+IGNoaXRzdVwgOwor5omWID4gaGFtZXJ1XCA7CivmhpYgPiBuYW1hamlcIDsKK+aEsSA+IHNoaXRzdVwgOwor5b2gID4ga3V3YWt1XCA7CivlvY8gPiBrdXdha3VcIDsKK+W9jSA+IGt1d2FrdVwgOwor5b2JID4ga3V3YWt1XCA7Civlu5MgPiBrdXJ1d2FcIDsKK+W6oiA+IGNoaXRzdVwgOwor5bmfID4gbm9ib3JpXCA7CivluYkgPiB0YXp1bmFcIDsKK+W4mSA+IGNoaXRzdVwgOwor5bWQID4gYXJhc2hpXCA7CivltJIgPiBzaHV0c3VcIDsKK+WygCA+IHNodXRzdVwgOwor5a+hID4geWFtb21lXCA7Civlq58gPiBqaXl1a3VcIDsKK+WmtyA+IGNoaXRzdVwgOwor5aKOID4ga3V3YWt1XCA7CivloLIgPiBzaGl0c3VcIDsKK+WgmyA+IGhpeW9rdVwgOwor5Zy3ID4gYWt1dHN1XCA7CivlkrAgPiBzaHV0c3VcIDsKK+WQjiA+IGtpc2FraVwgOwor5Y+6ID4ga2FtYXN1XCA7CivljqAgPiBrYXdheWFcIDsKK+WOlCA+IHNoaXRzdVwgOwor5Y6AID4gc2hpdHN1XCA7CivljZsgPiBzaHV0c3VcIDsKK+WKlSA+IHNoaXRzdVwgOwor5YWcID4ga2FidXRvXCA7CivlhKggPiBzaGl0c3VcIDsKK+WBqiA+IGhpeW9rdVwgOwor5YCtID4geWFtYXRvXCA7CivkvoQgPiBzaGl0c3VcIDsKK+S8oSA+IGt1cnVtYVwgOwor5LudID4gZG91am91XCA7Civku4cgPiBrYXRha2lcIDsKK+OAkiA+IHl1dWJpblwgOwor6L+wID4ganV0c3VcIDsKK+W/hSA+IGhpdHN1XCA7CivovrsgPiB0c3VqaVwgOwor5b65ID4gdGV0c3VcIDsKK+eepSA+IGJldHN1XCA7CivlvowgPiBub2NoaVwgOwor5b6LID4gcml0c3VcIDsKK+edgCA+IGNoYWt1XCA7CivlvI8gPiBzaGlraVwgOwor55q6ID4gc2hpd2FcIDsKK+i6hSA+IGNob2t1XCA7Civnmb4gPiBoeWFrdVwgOwor55m9ID4gc2hpcm9cIDsKK+eZvCA+IGhvdHN1XCA7CivnmbogPiBoYXRzdVwgOwor5bm4ID4gc2FjaGlcIDsKK+W5tCA+IHRvc2hpXCA7CivnmaogPiBzaGFrdVwgOwor5be0ID4gdG9tb2VcIDsKK+eXhSA+IHlhbWFpXCA7CivnlaUgPiByeWFrdVwgOwor55WiID4gaGl0c3VcIDsKK+eVnCA+IGNoaWt1XCA7CivnlLogPiBtYWNoaVwgOwor55S3ID4gb3Rva29cIDsKK+eUsSA+IHlvc2hpXCA7Civls7YgPiBzaGltYVwgOwor6LOqID4gdGFjaGlcIDsKK+WyuCA+IGtpc2hpXCA7CivlsYggPiBrdXRzdVwgOwor5bC7ID4gc2hpcmlcIDsKK+WwuiA+IHNoYWt1XCA7Civlr6YgPiBqaXRzdVwgOwor5a+fID4gc2F0c3VcIDsKK+WvhiA+IG1pdHN1XCA7CivlrrQgPiB1dGFnZVwgOwor5a6iID4ga3lha3VcIDsKK+eOhyA+IHJpdHN1XCA7CivorZggPiBzaGlraVwgOwor54y+ID4ga2F0c3VcIDsKK+iqrCA+IHNldHN1XCA7CivoqbAgPiBraXRzdVwgOwor54i6ID4gamlqaWlcIDsKK+eItSA+IHNoYWt1XCA7CivoqK0gPiBzZXRzdVwgOwor54iqID4gdHN1bWVcIDsKK+iooyA+IGtldHN1XCA7Civop7ggPiBzaG9rdVwgOwor54etID4gc2hva3VcIDsKK+inpiA+IHNob2t1XCA7Civop5IgPiB0c3Vub1wgOwor5aa7ID4gdHN1bWFcIDsKK+eGsSA+IG5ldHN1XCA7Civopb8gPiBuaXNoaVwgOwor5aW0ID4geWF0c3VcIDsKK+WlqiA+IGRhdHN1XCA7CivlpI8gPiBuYXRzdVwgOwor54OIID4gcmV0c3VcIDsKK+ijgiA+IHJldHN1XCA7CivoorcgPiBhd2FzZVwgOwor54KOID4gaG9ub29cIDsKK+WigyA+IHNha2FpXCA7CivngbwgPiBzaGFrdVwgOwor5aG1ID4gY2hpcmlcIDsKK+WhmiA+IHRzdWthXCA7CivooZcgPiBtYWNoaVwgOwor5Z+6ID4gbW90b2lcIDsKK+a/tiA+IGthdHN1XCA7Civln5IgPiByYWNoaVwgOwor5Z+OID4gc2hpcm9cIDsKK+m9oiA+IHlvd2FpXCA7CivonZUgPiBzaG9rdVwgOwor5r2UID4ga2V0c3VcIDsKK+m8viA+IGliaWtpXCA7CivonIIgPiBoYWNoaVwgOwor6JyAID4gc2hva3VcIDsKK+m7kCA+IG1vY2hpXCA7Civmu5EgPiBrYXRzdVwgOwor5ruFID4gbWV0c3VcIDsKK+ialSA+IGthaWtvXCA7CivmuowgPiBoYXRzdVwgOwor6bm/ID4gc2hpa2FcIDsKK+iZqyA+IG11c2hpXCA7CivomZ4gPiBvc29yZVwgOwor5ZmCID4gdXdhc2FcIDsKK+a4hyA+IGthdHN1XCA7Civmt7UgPiBmdWNoaVwgOwor6beyID4gd2FzaGlcIDsKK+a3kSA+IHNodWt1XCA7Civll4cgPiBzaG9rdVwgOwor6ba0ID4gdHN1cnVcIDsKK+iWlCA+IHNob2t1XCA7CivllocgPiByYXRzdVwgOwor5ZWcID4gc2V0c3VcIDsKK+WUviA+IHRzdWJhXCA7CivmtLsgPiBrYXRzdVwgOwor6JSRID4gYmV0c3VcIDsKK+WTsiA+IHRldHN1XCA7Civms4kgPiBpenVtaVwgOwor6JOEID4gY2hpa3VcIDsKK+ayuSA+IGFidXJhXCA7CivmsqEgPiBib3RzdVwgOwor5ZKEID4gdG90c3VcIDsKK+axuiA+IGtldHN1XCA7CivokaYgPiB5b3NoaVwgOwor6JGXID4gY2hha3VcIDsKK+axgSA+IHRzdXl1XCA7CivpsIwgPiBkb2pvdVwgOwor5ZCJID4ga2ljaGlcIDsKK+WPrSA+IGhhdHN1XCA7Civlj6MgPiBrdWNoaVwgOwor5Y+UID4gc2h1a3VcIDsKK+auuiA+IHNhdHN1XCA7CivmrpYgPiBzaG9rdVwgOwor5Y20ID4ga3lha3VcIDsKK+WNmCA+IGhpdG9lXCA7CivljZIgPiBzb3RzdVwgOwor5Yy5ID4gaGl0c3VcIDsKK+asoSA+IHRzdWdpXCA7Civli78gPiBtb2NoaVwgOwor6auuID4gaGF0c3VcIDsKK+armyA+IGt1c2hpXCA7CivliqMgPiByZXRzdVwgOwor6IqdID4gc2hpYmFcIDsKK+WKmyA+IHJ5b2t1XCA7CivoibYgPiB0c3V5YVwgOwor5qmLID4gaGFzaGlcIDsKK+WIuSA+IHNldHN1XCA7CivliLcgPiBzYXRzdVwgOwor5qirID4ga2FzaGlcIDsKK+WIpSA+IGJldHN1XCA7CivliJ0gPiBoYXRzdVwgOwor5YiXID4gcmV0c3VcIDsKK+aokiA+IG1pdHN1XCA7CivoiIwgPiBzaGl0YVwgOwor5YiHID4gc2V0c3VcIDsKK+WIgyA+IHlhaWJhXCA7CivlhowgPiBzYXRzdVwgOwor5YaKID4gc2F0c3VcIDsKK+iFsCA+IGtvc2hpXCA7CivlhasgPiB5YXRzdVwgOwor5YWOID4gdXNhZ2lcIDsKK+WFgCA+IGtvdHN1XCA7CivohLEgPiBkYXRzdVwgOwor5qSNID4gc2hva3VcIDsKK+iEiCA+IG15YWt1XCA7CivppIUgPiBtb2NoaVwgOwor6aO+ID4gc2hva3VcIDsKK+mjryA+IG1lc2hpXCA7Civpo58gPiBzaG9rdVwgOwor5qKoID4gbmFzaGlcIDsKK+aioiA+IGtvenVlXCA7CivmopMgPiBhenVzYVwgOwor5YKRID4ga2V0c3VcIDsKK+iChSA+IHNodWt1XCA7CivogbcgPiBzaG9rdVwgOwor6aGNID4gaGl0YWlcIDsKK+WAnyA+IHNoYWt1XCA7CivpoIEgPiBwZWlqaVwgOwor5p+EID4gdHN1a2FcIDsKK+e/gSA+IG9raW5hXCA7Civpnq0gPiBtdWNoaVwgOwor6Z6EID4ga2FiYW5cIDsKK+adviA+IG1hdHN1XCA7CivpnbQgPiBrdXRzdVwgOwor572wID4gYmF0c3VcIDsKK+e9qiA+IHRzdW1pXCA7CivmnZ8gPiB0c3VrYVwgOwor5L2bID4gYnV0c3VcIDsKK+adkyA+IHNoYWt1XCA7CivkvY0gPiBrdXJhaVwgOwor57y6ID4ga2V0c3VcIDsKK+S8uCA+IG5vc2hpXCA7CivpnLIgPiB0c3V5dVwgOwor6ZywID4gYXJhcmVcIDsKK+acqyA+IG1hdHN1XCA7CivpnJwgPiBzaGltb1wgOwor5pyIID4gdHN1a2lcIDsKK+absiA+IGt5b2t1XCA7Civpm5wgPiB6YXRzdVwgOwor5LuZID4gc2VudG9cIDsKK+mbkSA+IHphdHN1XCA7Civpm4cgPiB5YXRvaVwgOwor5Lm+ID4gaG9zaGlcIDsKK+S5niA+IGtvdHN1XCA7CivkuLsgPiBudXNoaVwgOwor57iuID4gc2h1a3VcIDsKK+aYnyA+IGhvc2hpXCA7CivnuJ4gPiBzaGltYVwgOwor5LiLID4gc2hpdGFcIDsKK+e2sSA+IHRzdW5hXCA7CivntbYgPiB6ZXRzdVwgOwor57WQID4ga2V0c3VcIDsKK+e1giA+IG93YXJpXCA7Civmk40gPiBtaXNhb1wgOwor5pKuID4gc2F0c3VcIDsKK+mQtSA+IHRldHN1XCA7CivpkKEgPiB0ZXRzdVwgOwor56+JID4gY2hpa3VcIDsKK+evgCA+IGJ1c2hpXCA7CivnrrggPiBoYXNoaVwgOwor5o6lID4gc2V0c3VcIDsKK+aOoCA+IHJ5YWt1XCA7CivmjpggPiBrdXRzdVwgOwor566SID4gaG91a2lcIDsKK+aNqSA+IHJldHN1XCA7CivnrZQgPiBrb3RhZVwgOwor5ou2ID4gc2F0c3VcIDsKK+aLrSA+IHNoaWtpXCA7Civmi6wgPiBrYXRzdVwgOwor5ouZID4gc2V0c3VcIDsKK+aLlCA+IGJhdHN1XCA7Civnq4sgPiByaXRzdVwgOwor56uKID4gc2V0c3VcIDsKK+aLgiA+IGZ1dHN1XCA7CivmipwgPiBiYXRzdVwgOwor5oqJID4ga2V0c3VcIDsKK+eqgSA+IHRvdHN1XCA7CivnqbQgPiBrZXRzdVwgOwor6YmiID4gaGFjaGlcIDsKK+aJlSA+IGZ1dHN1XCA7CivpiYQgPiB0ZXRzdVwgOwor5oiqID4gc2V0c3VcIDsKK+aIpiA+IGlrdXNhXCA7Civph4sgPiBzaGFrdVwgOwor6YeIID4gc2hha3VcIDsKK+elnSA+IHNodWt1XCA7CivphYwgPiBzaGFrdVwgOwor5oWEID4gcml0c3VcIDsKK+aDmiA+IGtvdHN1XCA7CivpgZQgPiB0YWNoaVwgOwor6YGTID4gbWljaGlcIDsKK+mAuSA+IHRhdHN1XCA7CivpgJAgPiBjaGlrdVwgOwor6YCGID4gZ3lha3VcIDsKK+W/vSA+IGtvdHN1XCA7Civpvp4gPiBiZXRzdVwgOwor6b2nID4ga2V0c3VcIDsKK+m9lSA+IGtvdHN1XCA7CivpvYMgPiBrYXRzdVwgOwor6by/ID4gZ290c3VcIDsKK+m8jiA+IGthbmFlXCA7Civpu7sgPiBmdXRzdVwgOwor6bugID4ga2F0c3VcIDsKK+m6uSA+IGtvdWppXCA7Civpt6sgPiBzaHVrdVwgOwor6bepID4gaGV0c3VcIDsKK+m2uyA+IGtvdHN1XCA7CivptqEgPiBrYXRzdVwgOwor6baNID4gaXN1a2FcIDsKK+m2iSA+IHV6dXJhXCA7CivptZMgPiBob3RzdVwgOwor6bSwID4ga2F0c3VcIDsKK+m0qyA+IHNoaWdpXCA7CivptIMgPiBrZXRzdVwgOwor6bSCID4ga2V0c3VcIDsKK+myviA+IGh5YWt1XCA7CivpsqwgPiBrb2NoaVwgOwor6bGXID4gdXJva29cIDsKK+mxkCA+IHNodWt1XCA7CivpsYkgPiBiZXRzdVwgOwor6bGBID4gY2hpa3VcIDsKK+mwuyA+IHVuYWdpXCA7CivpsJIgPiBhd2FiaVwgOwor6bCPID4gaHlva3VcIDsKK+mwjSA+IGluYWRhXCA7CivpsIkgPiBoaWdhaVwgOwor6bCIID4ga2FyZWlcIDsKK+mvsiA+IGRvam91XCA7Civpr5IgPiBrb2NoaVwgOwor6a+PID4gYXNhcmlcIDsKK+murSA+IHNoYWtlXCA7CivprqggPiBzdXNoaVwgOwor6a6aID4ga2l0c3VcIDsKK+mukyA+IHN1c2hpXCA7CivprpEgPiBhd2FiaVwgOwor6a6FID4gaGl0c3VcIDsKK+muhCA+IGZ1dHN1XCA7CivprakgPiBoYWNoaVwgOwor6a2DID4gYmF0c3VcIDsKK+msuyA+IHNodWt1XCA7CivprKAgPiBrYXRzdVwgOwor6ayOID4gcmF0c3VcIDsKK+mruiA+IGdhdHN1XCA7Civpq7QgPiBmdXRzdVwgOwor6amWID4gdGV0c3VcIDsKK+mpjCA+IHNodWt1XCA7CivpqYsgPiBoYXRzdVwgOwor6aiEID4gcnlva3VcIDsKK+mnnCA+IGhpdHN1XCA7Civpp4MgPiBrZXRzdVwgOwor6aa5ID4gaml0c3VcIDsKK+mmnSA+IGhpdHN1XCA7CivpppsgPiBoYXRzdVwgOwor6aWGID4gaGl0c3VcIDsKK+mkriA+IHRldHN1XCA7CivppJ8gPiB0ZXRzdVwgOwor6aSdID4gc2hva3VcIDsKK+mkkSA+IGhvdHN1XCA7Civpo7YgPiBoaXRzdVwgOwor6aOtID4gY2hva3VcIDsKK+misyA+IGthdHN1XCA7CivporAgPiBoYXRzdVwgOwor6aKvID4gc2F0c3VcIDsKK+mhoyA+IHNodWt1XCA7CivpoKEgPiBraXRzdVwgOwor6aCKID4ga3lva3VcIDsKK+mfpCA+IGJhdHN1XCA7Civpn6EgPiBzYWthblwgOwor6Z+gID4gaGl0c3VcIDsKK+mfjSA+IGZ1dHN1XCA7Civpn4ggPiBiZXRzdVwgOwor6Z+DID4gZGF0c3VcIDsKK+meuCA+IGhpdHN1XCA7CivpnqggPiBrYXRzdVwgOwor6Z26ID4gbWF0c3VcIDsKK+mduSA+IGtldHN1XCA7CivpnaggPiBla3Vib1wgOwor6ZqJID4gZ2V0c3VcIDsKK+mZnyA+IGNob2t1XCA7CivpmKIgPiBnb3RzdVwgOwor6ZelID4gdGF0c3VcIDsKK+mXlSA+IGtldHN1XCA7Civpl5EgPiBnZXRzdVwgOwor6ZeLID4ga2V0c3VcIDsKK+mXiiA+IGthdHN1XCA7CivplqYgPiBzaHVrdVwgOwor6ZalID4gYmF0c3VcIDsKK+mSgyA+IHNob2t1XCA7CivpkaAgPiBzaGFrdVwgOwor6ZC9ID4gdGF0c3VcIDsKK+mQryA+IHNoYWt1XCA7CivpkI0gPiB0ZXRzdVwgOwor6Y+6ID4gaGF0c3VcIDsKK+mPiSA+IHNoeXV1XCA7Civpj4UgPiBzaHl1dVwgOwor6Y6nID4geW9yb2lcIDsKK+mOiyA+IGthdHN1XCA7CivpjaUgPiBrZXRzdVwgOwor6Y2YID4gc2F0c3VcIDsKK+mNlCA+IHRzdWJhXCA7CivpjKggPiBpa2FyaVwgOwor6YyYID4gdHN1bXVcIDsKK+mLqCA+IHRldHN1XCA7Civpi50gPiByZXRzdVwgOwor6YuNID4gaG90c3VcIDsKK+mKvSA+IGthdHN1XCA7CivpiqsgPiBzaG9rdVwgOwor6YqVID4gdGV0c3VcIDsKK+mJvSA+IHNodWt1XCA7CivpiZggPiBmdXRzdVwgOwor6Yi6ID4gZ3lva3VcIDsKK+mIuCA+IGhhdHN1XCA7CivpiK8gPiB0b3RzdVwgOwor6YikID4gaml0c3VcIDsKK+mIhSA+IGdldHN1XCA7Civph7AgPiBqaXRzdVwgOwor6YefID4gaGF0c3VcIDsKK+mGsSA+IGhhdHN1XCA7CivphpcgPiBoYXRzdVwgOwor6YaUID4gc2h5dXVcIDsKK+mGiiA+IHRldHN1XCA7CivphoEgPiByeW9rdVwgOwor6YWrID4gc2V0c3VcIDsKK+mFpiA+IGhhdHN1XCA7CivphJAgPiBjaGlrdVwgOwor6YKyID4gaGl0c3VcIDsKK+mAvCA+IGhpdHN1XCA7CivpgK8gPiByeW9rdVwgOwor6YCCID4ga2F0c3VcIDsKK+i/viA+IHJldHN1XCA7Civov60gPiB0ZXRzdVwgOwor6L6+ID4gdGF0c3VcIDsKK+i+tiA+IGNoYWt1XCA7CivovrUgPiBjaGFrdVwgOwor6L6wID4gdGF0c3VcIDsKK+i+pSA+IHNldHN1XCA7CivovqMgPiByYXRzdVwgOwor6L6cID4gdHN1bWlcIDsKK+i9lSA+IGthdHN1XCA7CivovYQgPiBrYXRzdVwgOwor6Ly/ID4ga29zaGlcIDsKK+i8tSA+IGthdHN1XCA7CivovJ8gPiB0ZXRzdVwgOwor6LyCID4ga3lva3VcIDsKK+i7viA+IHNob2t1XCA7Civou7cgPiBoYXRzdVwgOwor6LuPID4gZ2V0c3VcIDsKK+i7hCA+IHNob2t1XCA7CivourUgPiBuZXJhdVwgOwor6LqpID4ga3lha3VcIDsKK+i6giA+IHRhdHN1XCA7CivoubYgPiBrZXRzdVwgOwor6LmpID4gaGV0c3VcIDsKK+i5nCA+IHNodWt1XCA7CivouZkgPiBzaHVrdVwgOwor6LmVID4gaGl0c3VcIDsKK+i4pyA+IHNodWt1XCA7CivouIsgPiBreWFrdVwgOwor6Le8ID4ga3lva3VcIDsKK+i3myA+IGJpa2tvXCA7Civot4wgPiB0ZXRzdVwgOwor6LeLID4gYmF0c3VcIDsKK+i3gCA+IGdldHN1XCA7CivotrkgPiBrZXRzdVwgOwor6La3ID4ga290c3VcIDsKK+i2niA+IHNoYWt1XCA7CivotpAgPiBrZXRzdVwgOwor6LWpID4ga3lva3VcIDsKK+i0liA+IHNob2t1XCA7Civos6EgPiBzaG9rdVwgOwor6LKcID4ga3lha3VcIDsKK+ixgSA+IGthdHN1XCA7Civorp4gPiBnZXRzdVwgOwor6K2OID4ga2l0c3VcIDsKK+isliA+IHNob2t1XCA7CivorJQgPiBneWFrdVwgOwor6KyQID4gaGl0c3VcIDsKK+irlCA+IHNodWt1XCA7CivoqrMgPiBrdXRzdVwgOwor6KqqID4gc2V0c3VcIDsKK+iqliA+IGhvdHN1XCA7CivoqacgPiBzYXRzdVwgOwor6KmYID4ga3V0c3VcIDsKK+iopSA+IHRvdHN1XCA7CivoqJYgPiBraXRzdVwgOwor6KiQID4ga2V0c3VcIDsKK+insSA+IGhpdHN1XCA7Civop5YgPiBrZXRzdVwgOwor6KaVID4gYmV0c3VcIDsKK+ilrSA+IGtldHN1XCA7CivopaogPiBiZXRzdVwgOwor6KWhID4gc2hva3VcIDsKK+ilkiA+IGhldHN1XCA7CivopY8gPiBoYXRzdVwgOwor6KWNID4gemF0c3VcIDsKK+ikuyA+IHNldHN1XCA7CivopJAgPiBrYXRzdVwgOwor6KSEID4gdHN1bWFcIDsKK+ijsCA+IHRhdHN1XCA7CivoorogPiBrZXRzdVwgOwor6KKcID4gYmF0c3VcIDsKK+iimiA+IGhhdHN1XCA7CivoobUgPiBqaXRzdVwgOwor6KGLID4ga3lva3VcIDsKK+ihiiA+IGJldHN1XCA7CivooLwgPiBreWFrdVwgOwor6KCeID4gc2V0c3VcIDsKK+igmyA+IGJldHN1XCA7CivooJggPiBzZXRzdVwgOwor6KCLID4gc2hva3VcIDsKK+ifmSA+IHNob2t1XCA7CivonbIgPiByYXRzdVwgOwor6J2OID4ga2F0c3VcIDsKK+icnCA+IG1pdHN1XCA7CivonIcgPiB0ZXRzdVwgOwor6JulID4gc2V0c3VcIDsKK+iboyA+IGtpdHN1XCA7Civom54gPiBrYXRzdVwgOwor6JuaID4gcmV0c3VcIDsKK+iZkCA+IGd5YWt1XCA7CivomJYgPiBnZXRzdVwgOwor6JecID4gYWthemFcIDsKK+iXmiA+IHNob2t1XCA7CivolqkgPiBzYXRzdVwgOwor6JalID4gc2hva3VcIDsKK+iWmyA+IHNldHN1XCA7CivolpggPiB0YXRzdVwgOwor6JaKID4gYXphbWlcIDsKK+iVnyA+IGhpdHN1XCA7CivolZ0gPiBzZXRzdVwgOwor6JWAID4ga3lva3VcIDsKK+iUpiA+IHRzdXRhXCA7CivolKQgPiBiaXRzdVwgOwor6JSOID4gc2V0c3VcIDsKK+iTvyA+IHNodWt1XCA7Civok70gPiBoaXRzdVwgOwor6JOHID4ga290c3VcIDsKK+iRpyA+IGhvdHN1XCA7CivokZwgPiBrYXRzdVwgOwor6JGWID4gdG90c3VcIDsKK+iRjiA+IHJpdHN1XCA7Civoj70gPiBzaHVrdVwgOwor6I+dID4gaGF0c3VcIDsKK+iPiSA+IHJ5b2t1XCA7Civojq0gPiBzZXRzdVwgOwor6I6CID4gaGV0c3VcIDsKK+iNuCA+IGhvdHN1XCA7CivojZcgPiBzaG9rdVwgOwor6IyoID4gaWJhcmFcIDsKK+iMoiA+IHJldHN1XCA7CivojJwgPiBha2FuZVwgOwor6IyNID4ga3lva3VcIDsKK+iMiSA+IG1hdHN1XCA7CivojIcgPiBoYXRzdVwgOwor6IyBID4gc2F0c3VcIDsKK+iMgCA+IGh1dHN1XCA7Civoi74gPiBoaXRzdVwgOwor6Iu2ID4gZGV0c3VcIDsKK+iKtCA+IGJ1dHN1XCA7Civoio0gPiBzaGFrdVwgOwor6Im0ID4gaG90c3VcIDsKK+iIsyA+IGNoaWt1XCA7CivoiJ0gPiBrYXRzdVwgOwor6IiEID4gc2hha3VcIDsKK+iIgyA+IHNoYWt1XCA7Civoh7ggPiBqaXRzdVwgOwor6IeyID4gZ2V0c3VcIDsKK+iHhSA+IHNob2t1XCA7CivohbcgPiBoeW9rdVwgOwor6IWvID4gdG90c3VcIDsKK+iEqyA+IGRhdHN1XCA7CivohJYgPiBob3RzdVwgOwor6ISJID4gbXlha3VcIDsKK+iDiCA+IGhhdHN1XCA7CivogrggPiBraXRzdVwgOwor6IKtID4gZG90c3VcIDsKK+iCiyA+IGFiYXJhXCA7CivogZIgPiBrYXRzdVwgOwor6IGAID4gc2hva3VcIDsKK+iAiyA+IHRldHN1XCA7CivogIogPiB0ZXRzdVwgOwor576vID4ga2F0c3VcIDsKK+e+jSA+IHRhdHN1XCA7CivnvbggPiBiYXRzdVwgOwor57y9ID4gaGFjaGlcIDsKK+e8vCA+IGtldHN1XCA7CivnuoggPiBrZXRzdVwgOwor57mzID4gc2hha3VcIDsKK+e5mCA+IGtpdHN1XCA7CivnuKwgPiBzaHVrdVwgOwor57ekID4gc2V0c3VcIDsKK+e2vSA+IHNoYWt1XCA7CivntqAgPiByeW9rdVwgOwor57aNID4gaHV0c3VcIDsKK+e1sCA+IHRldHN1XCA7CivntZwgPiBrZXRzdVwgOwor57WXID4ga290c3VcIDsKK+e1lSA+IHpldHN1XCA7CivntY8gPiBzZXRzdVwgOwor57S8ID4gaHV0c3VcIDsKK+e0siA+IHNldHN1XCA7CivntLEgPiBodXRzdVwgOwor57SuID4gc2F0c3VcIDsKK+e0hyA+IGtvdHN1XCA7Civns7UgPiBnZXRzdVwgOwor57OPID4gc2V0c3VcIDsKK+ezgCA+IGtvdWppXCA7CivnspsgPiBzaHVrdVwgOwor57KSID4gdHN1YnVcIDsKK+exmSA+IHJ5b2t1XCA7Civnr74gPiBiZXRzdVwgOwor56+zID4gaGl0c3VcIDsKK+evqSA+IGZ1cnVpXCA7Civnr6UgPiByaXRzdVwgOwor5667ID4gcml0c3VcIDsKK+eumiA+IHNhdHN1XCA7CivnrZEgPiBjaGlrdVwgOwor562PID4gaWthZGFcIDsKK+etgSA+IGt5b2t1XCA7CivnrL0gPiBzb3VrZVwgOwor56ywID4gaHV0c3VcIDsKK+eslCA+IGhpdHN1XCA7CivnrI8gPiBrb3RzdVwgOwor56utID4ga2V0c3VcIDsKK+eqoyA+IHNvdHN1XCA7Civnqp8gPiBrdXRzdVwgOwor56qDID4gc2V0c3VcIDsKK+epoSA+IHNob2t1XCA7CivnqLcgPiBzaG9rdVwgOwor56itID4ga2F0c3VcIDsKK+eoqyA+IGh5b2t1XCA7CivnqKEgPiBzb3RzdVwgOwor56iZID4gY2hva3VcIDsKK+enuCA+IGthdHN1XCA7Civnp6sgPiBqb3RzdVwgOwor56ejID4gbWF0c3VcIDsKK+enoSA+IGhhdHN1XCA7Civnpp0gPiBzaG9rdVwgOwor56WTID4gZnV0c3VcIDsKK+ejhiA+IGthdHN1XCA7Civnor8gPiBzb3RzdVwgOwor56KjID4ga2V0c3VcIDsKK+einyA+IGthdHN1XCA7Civnoo8gPiBzaGFrdVwgOwor56GIID4ga2F0c3VcIDsKK+efuyA+IGtvdHN1XCA7Civnn5ogPiBzaG9rdVwgOwor55+XID4gY2hpa3VcIDsKK+eeriA+IHRldHN1XCA7Civnno4gPiBrYXRzdVwgOwor552wID4gYmF0c3VcIDsKK+ecnCA+IGJhdHN1XCA7Civnm4sgPiBoYXRzdVwgOwor55qtID4gc2hha3VcIDsKK+ealSA+IGh5b2t1XCA7CivnmowgPiBiYXRzdVwgOwor55m2ID4gaGF0c3VcIDsKK+eZpCA+IHNldHN1XCA7CivnmZ8gPiBoZXRzdVwgOwor55inID4gZ3lha3VcIDsKK+eYnCA+IHNob2t1XCA7CivnmIwgPiByYXRzdVwgOwor55iEID4gc2hha3VcIDsKK+eYgyA+IHNob2t1XCA7Civnl4YgPiBkYXRzdVwgOwor55aZID4gZ2l0c3VcIDsKK+eVtyA+IHRldHN1XCA7CivnlacgPiByeWFrdVwgOwor55WfID4gc2hva3VcIDsKK+eUtiA+IGZ1dHN1XCA7Civnk54gPiB0ZXRzdVwgOwor55GuID4gcml0c3VcIDsKK+ePvyA+IHNodWt1XCA7Civnj4wgPiBoaXRzdVwgOwor546mID4ga2V0c3VcIDsKK+eOpSA+IGdldHN1XCA7CivnjpAgPiBoYXRzdVwgOwor546DID4ga3lha3VcIDsKK+eNpiA+IGthdHN1XCA7CivnjZ0gPiBraXRzdVwgOwor542XID4ga2V0c3VcIDsKK+eMsiA+IGthdHN1XCA7CivnjJ0gPiBzb3RzdVwgOwor54uYID4ga2V0c3VcIDsKK+eKriA+IGhhdHN1XCA7CivniJ0gPiBzaGFrdVwgOwor54iNID4gc2hha3VcIDsKK+eIhyA+IHpldHN1XCA7Civnh7UgPiB0YXRzdVwgOwor54aaID4gaGl0c3VcIDsKK+eFniA+IHNhdHN1XCA7CivnhK8gPiBzaGFrdVwgOwor54SrID4gemV0c3VcIDsKK+eElCA+IGhvbm9vXCA7CivnhI8gPiBreW9rdVwgOwor54OVID4ga2V0c3VcIDsKK+eAkiA+IHNob2t1XCA7Civmv4cgPiBzaG9rdVwgOwor5r6IID4gdGV0c3VcIDsKK+a9miA+IHNodWt1XCA7CivmvZEgPiBoYXRzdVwgOwor5r2PID4ga2V0c3VcIDsKK+a7rSA+IGhpdHN1XCA7Civmu4AgPiBjaGlrdVwgOwor5rqtID4gc2hva3VcIDsKK+a6pyA+IHJpdHN1XCA7CivmuoIgPiByYXRzdVwgOwor5rmiID4gaHlva3VcIDsKK+a5nCA+IHNob2t1XCA7CivmuLQgPiBrYXRzdVwgOwor5rirID4gc2V0c3VcIDsKK+a4pCA+IGJvdHN1XCA7CivmuIsgPiBzaGlidVwgOwor5reIID4ga290c3VcIDsKK+a2hSA+IG5ldHN1XCA7CivmtawgPiBrYWlyaVwgOwor5rWhID4gaG90c3VcIDsKK+a1mSA+IHNldHN1XCA7CivmtK8gPiBrZXRzdVwgOwor5rSrID4ga3lva3VcIDsKK+a0jCA+IHJldHN1XCA7Civms6wgPiBrZXRzdVwgOwor5rOQID4gcnlva3VcIDsKK+azjCA+IGhpdHN1XCA7CivmsrggPiBmdXRzdVwgOwor5rKrID4gbWF0c3VcIDsKK+aylSA+IGJ1dHN1XCA7CivmspIgPiBib3RzdVwgOwor5rGUID4ga2l0c3VcIDsKK+awnyA+IGh1dHN1XCA7CivmsJIgPiBrZXRzdVwgOwor5q6bID4ga3lva3VcIDsKK+augSA+IGJvdHN1XCA7Civmrb8gPiBib3RzdVwgOwor5q2+ID4gYm90c3VcIDsKK+atvSA+IHNldHN1XCA7CivmrbkgPiBnYXRzdVwgOwor5q2gID4gc2V0c3VcIDsKK+atmCA+IGt1dHN1XCA7CivmrYcgPiBrZXRzdVwgOwor5qy7ID4ga3V0c3VcIDsKK+asryA+IGtpdHN1XCA7CivmrKAgPiBrZXRzdVwgOwor5qyfID4gdHN1a2lcIDsKK+arsSA+IGdldHN1XCA7Civmq4EgPiBtaXRzdVwgOwor5qqrID4gc2F0c3VcIDsKK+aqiyA+IGt5b2t1XCA7CivmqZsgPiBrZXRzdVwgOwor5qi0ID4gc2hva3VcIDsKK+anrSA+IHNodWt1XCA7Civmpr4gPiBrb3RzdVwgOwor5qaNID4gc2V0c3VcIDsKK+amgCA+IGtvbWFpXCA7Civmpb4gPiBoYXpvdVwgOwor5qWsID4ga2V0c3VcIDsKK+akoyA+IHNoaWRlXCA7CivmpIogPiBzb3RzdVwgOwor5qSEID4gc2V0c3VcIDsKK+ajgSA+IHNldHN1XCA7CivmorIgPiBzZXRzdVwgOwor5qGyID4gaG90c3VcIDsKK+ahsCA+IGthdHN1XCA7CivmoZsgPiBrYXNlaVwgOwor5qGUID4ga2l0c3VcIDsKK+ahgCA+IGtldHN1XCA7CivmoLsgPiBjaG9rdVwgOwor5qCwID4gaGF0c3VcIDsKK+agqCA+IHNldHN1XCA7CivmoIMgPiB0b2NoaVwgOwor5p+3ID4gc2h1a3VcIDsKK+afriA+IHRvdHN1XCA7CivmnbAgPiBrZXRzdVwgOwor5p2kID4gdG9jaGlcIDsKK+adjCA+IGdvdHN1XCA7CivmnYEgPiBlYnVyaVwgOwor5py4ID4gcnlva3VcIDsKK+acsyA+IGhhdHN1XCA7CivmnK8gPiBqdXRzdVwgOwor5pyuID4ganV0c3VcIDsKK+achSA+IGtldHN1XCA7Civmm7cgPiBrYXRzdVwgOwor5pq8ID4gaGV0c3VcIDsKK+aasSA+IGppdHN1XCA7CivmmaIgPiBzZXRzdVwgOwor5pi1ID4gaml0c3VcIDsKK+aYsyA+IHRldHN1XCA7CivmmKkgPiBiYXRzdVwgOwor5piiID4gaG90c3VcIDsKK+aYkiA+IGtvdHN1XCA7Civml60gPiBhc2FoaVwgOwor5parID4gc2hha3VcIDsKK+aWoyA+IHNodWt1XCA7CivmlaogPiB0YXRzdVwgOwor5pWgID4gdGF0c3VcIDsKK+aVlSA+IGNob2t1XCA7CivmlJ0gPiBzZXRzdVwgOwor5pO9ID4gcnlha3VcIDsKK+aTtyA+IGtldHN1XCA7Civmk6YgPiBzYXRzdVwgOwor5pK7ID4gdGFjaGlcIDsKK+aSpSA+IGJhY2hpXCA7CivmkqQgPiB0ZXRzdVwgOwor5pKHID4gaGV0c3VcIDsKK+aShSA+IGtldHN1XCA7CivmkYsgPiBzYXRzdVwgOwor5pGCID4gc2V0c3VcIDsKK+aQsCA+IGtvdHN1XCA7CivmkKkgPiBrZXRzdVwgOwor5pCQID4gY2hpa3VcIDsKK+aPsyA+IHNldHN1XCA7Civmj7IgPiBzZXRzdVwgOwor5o+sID4gdG90c3VcIDsKK+aPoCA+IHNhdHN1XCA7Civmj5EgPiBnZXRzdVwgOwor5o6fID4gb2tpdGVcIDsKK+aOhyA+IHRhdHN1XCA7Civmjb0gPiBzb3RzdVwgOwor5o26ID4gbmF0c3VcIDsKK+aNuCA+IHRvdHN1XCA7CivmjZ0gPiB0YXRzdVwgOwor5o2PID4gZGV0c3VcIDsKK+aNiyA+IHJhdHN1XCA7CivmjLYgPiBreW9rdVwgOwor5oypID4gdGF0c3VcIDsKK+aMiCA+IGtldHN1XCA7Civmi64gPiBraXRzdVwgOwor5ouJID4gcmF0c3VcIDsKK+aKuSA+IG1hdHN1XCA7CivmipAgPiBkb3RzdVwgOwor5oqIID4gZ2V0c3VcIDsKK+aJpCA+IGdvdHN1XCA7CivmiY4gPiBzYXRzdVwgOwor5oigID4gc2hva3VcIDsKK+aIniA+IGthdHN1XCA7CivmiJwgPiB0ZXRzdVwgOwor5oibID4ga2F0c3VcIDsKK+aIhCA+IGt5YWt1XCA7Civmh6QgPiBjaHl1dVwgOwor5oeOID4gc2hva3VcIDsKK+aGoCA+IGtldHN1XCA7Civmhp8gPiBzaG9rdVwgOwor5oaLID4gaGV0c3VcIDsKK+aEjiA+IGh5b2t1XCA7CivmhIogPiBoeW9rdVwgOwor5oSCID4gYm90c3VcIDsKK+aDmSA+IHRldHN1XCA7CivmgoogPiB0ZXRzdVwgOwor5oGkID4ganV0c3VcIDsKK+aAtSA+IGp1dHN1XCA7CivmgK0gPiBoaXRzdVwgOwor5oCrID4gZnV0c3VcIDsKK+aAmyA+IGRhdHN1XCA7Civlv5QgPiBraXRzdVwgOwor5b6PID4gY2hva3VcIDsKK+W9vyA+IGZ1dHN1XCA7CivlvbQgPiBzaGFrdVwgOwor5b2DID4gaGl0c3VcIDsKK+W9giA+IGhvdHN1XCA7CivlvLwgPiBoaXRzdVwgOwor5by7ID4gaGl0c3VcIDsKK+W8piA+IHRzdXJ1XCA7CivlvKEgPiBrdXRzdVwgOwor5buQID4gdW1heWFcIDsKK+W6giA+IHNob2t1XCA7Civlua8gPiBzZXRzdVwgOwor5bmtID4gYmV0c3VcIDsKK+W4tCA+IHNhdHN1XCA7CivluKUgPiBzb3RzdVwgOwor5biaID4gaG91a2lcIDsKK+W4lSA+IGJhdHN1XCA7Civlt78gPiBodXRzdVwgOwor5beAID4gc2F0c3VcIDsKK+W2sSA+IGthdHN1XCA7Civltq0gPiBnYXRzdVwgOwor5baNID4gc2hpaHVcIDsKK+W1vSA+IHRldHN1XCA7CivltbIgPiBnZXRzdVwgOwor5bWlID4ga2V0c3VcIDsKK+W1kSA+IGtldHN1XCA7CivltYIgPiByaXRzdVwgOwor5bSxID4gc2hva3VcIDsKK+W0qyA+IGt1dHN1XCA7CivltJsgPiBrdXRzdVwgOwor5bOgID4gdG91Z2VcIDsKK+WzmiA+IGJpdHN1XCA7Civls4wgPiB0ZXRzdVwgOwor5bKqID4gaHV0c3VcIDsKK+WypCA+IGtldHN1XCA7Civlso8gPiBndXdhblwgOwor5bKKID4gc2V0c3VcIDsKK+WyiSA+IGJ1dHN1XCA7CivlsbwgPiBnb3RzdVwgOwor5bG5ID4ga2l0c3VcIDsKK+WxtSA+IGdhdHN1XCA7CivlsbQgPiByeW9rdVwgOwor5bGrID4ga3lha3VcIDsKK+WxqSA+IGt5YWt1XCA7CivlsLMgPiBrb3RzdVwgOwor5bCXID4gc2h1a3VcIDsKK+WwkCA+IHNldHN1XCA7Civlr6MgPiBrb3RzdVwgOwor5a+UID4gc2hva3VcIDsKK+WuuyA+IG1pdHN1XCA7CivlrpMgPiBiaXRzdVwgOwor5a6KID4gdG90c3VcIDsKK+WtvSA+IGdldHN1XCA7CivlrbwgPiBnZXRzdVwgOwor5a2wID4gaXp1cmVcIDsKK+WtmyA+IGJvdHN1XCA7CivlrZIgPiBrZXRzdVwgOwor5a2RID4ga2V0c3VcIDsKK+WtjiA+IHNob2t1XCA7CivlrIcgPiBrdXdhaVwgOwor5ayCID4gc2hva3VcIDsKK+WrsyA+IGhldHN1XCA7Civlq6EgPiBjaGFrdVwgOwor5aqfID4gc2V0c3VcIDsKK+WpvCA+IHNoYWt1XCA7CivlqYwgPiBzaHVrdVwgOwor5aiOID4ga2V0c3VcIDsKK+WntCA+IHJldHN1XCA7Civlp6EgPiBrYXRzdVwgOwor5aeeID4ga2l0c3VcIDsKK+WmuiA+IGJhdHN1XCA7CivlprIgPiBkYXRzdVwgOwor5aawID4gY2hha3VcIDsKK+WmrSA+IGhhdHN1XCA7CivlpoEgPiBzaGFrdVwgOwor5aWvID4ga2F0c3VcIDsKK+WlkSA+IHNldHN1XCA7CivlpLcgPiBlYmlzdVwgOwor5aSsID4ga2V0c3VcIDsKK+WkqCA+IHNob2t1XCA7CivlpJkgPiBzaHVrdVwgOwor5aO3ID4gdHN1Ym9cIDsKK+WioiA+IGhhdHN1XCA7CivloowgPiBzaGFrdVwgOwor5aKGID4gdGV0c3VcIDsKK+WhmyA+IHJpdHN1XCA7CivloKggPiBnZXRzdVwgOwor5Z+0ID4gc2hva3VcIDsKK+WfsSA+IHNoeXV1XCA7Civln5MgPiByYWNoaVwgOwor5Z6kID4gdGV0c3VcIDsKK+WeoSA+IGhhdHN1XCA7CivlnpQgPiBzaHlvdVwgOwor5Z6PID4gcm90c3VcIDsKK+WegyA+IHJhdHN1XCA7CivlnbogPiBoYXRzdVwgOwor5Z25ID4ga2V0c3VcIDsKK+WdsiA+IGh1dHN1XCA7CivlnaogPiB0c3Vib1wgOwor5Zy/ID4ga2F0c3VcIDsKK+WcvSA+IGJvdHN1XCA7CivlnLQgPiBzaGFrdVwgOwor5ZyqID4gZ2l0c3VcIDsKK+WcoyA+IGt1dHN1XCA7Civlm64gPiBvdG9yaVwgOwor5ZurID4ga290c3VcIDsKK+WbkyA+IGtldHN1XCA7Civlm5EgPiBzaG9rdVwgOwor5ZuQID4gc2F0c3VcIDsKK+WbiyA+IHNhdHN1XCA7Civlmr0gPiBzZXRzdVwgOwor5Zq8ID4gc2hha3VcIDsKK+WaniA+IHRldHN1XCA7CivlmbYgPiBrYXRzdVwgOwor5ZmyID4ga3V3YWlcIDsKK+WZsSA+IGt5YWt1XCA7CivlmaAgPiB0YXRzdVwgOwor5ZmYID4ga2V0c3VcIDsKK+WZiCA+IHNodWt1XCA7CivlmYQgPiBraXRzdVwgOwor5ZixID4gc2hva3VcIDsKK+WYoCA+IGthdHN1XCA7CivlmI4gPiBrYXRzdVwgOwor5Ze2ID4gaGl0c3VcIDsKK+WXpyA+IGdhcm9uXCA7Civll6IgPiByYXRzdVwgOwor5ZeWID4gc2h1aHVcIDsKK+WXlSA+IHNob2t1XCA7Civll5AgPiBrYXRzdVwgOwor5ZarID4ga2l0c3VcIDsKK+WWnSA+IGthdHN1XCA7CivllowgPiBzaHVrdVwgOwor5ZaGID4gdGV0c3VcIDsKK+WVoCA+IHRldHN1XCA7CivllZIgPiBrb3RzdVwgOwor5ZS/ID4ga290c3VcIDsKK+WUsCA+IHNldHN1XCA7Civlk74gPiB5YXRzdVwgOwor5ZO3ID4gcmV0c3VcIDsKK+WTsyA+IHRhdHN1XCA7Civlk7EgPiBob3RzdVwgOwor5ZOrID4gc2hva3VcIDsKK+WTmCA+IHNhc291XCA7Civlk4sgPiB0ZXRzdVwgOwor5ZKxID4gc2F0c3VcIDsKK+WSrSA+IGtpdHN1XCA7CivlkqcgPiByZXRzdVwgOwor5ZKIID4gaHV0c3VcIDsKK+WShyA+IGhldHN1XCA7Civlkb4gPiB0YXRzdVwgOwor5ZGQID4gdG90c3VcIDsKK+WQtyA+IGtldHN1XCA7CivlkLYgPiB0b3RzdVwgOwor5ZChID4gaGl0c3VcIDsKK+WQiyA+IGluY2hpXCA7CivlkIMgPiBraXRzdVwgOwor5Y+VID4gdGV0c3VcIDsKK+WPkCA+IGhhdHN1XCA7CivljqkgPiB1bWF5YVwgOwor5Y6lID4ga2V0c3VcIDsKK+WNvCA+IGdvdHN1XCA7CivljbsgPiBreWFrdVwgOwor5Y25ID4ganV0c3VcIDsKK+WNqSA+IHNldHN1XCA7CivljaggPiBzZXRzdVwgOwor5Y2NID4gbWFuamlcIDsKK+WNhiA+IHNvdHN1XCA7CivljLEgPiBoaXRzdVwgOwor5YyrID4ga290c3VcIDsKK+WMpCA+IGt5YWt1XCA7CivljKIgPiBrb3RzdVwgOwor5YyDID4ga2F0c3VcIDsKK+WMgSA+IG1vbm1lXCA7Civli7ogPiBzaGFrdVwgOwor5Yu2ID4ga2V0c3VcIDsKK+WLqiA+IGt5YWt1XCA7Civli5YgPiBreWFrdVwgOwor5YuDID4gYm90c3VcIDsKK+WKvSA+IHJldHN1XCA7CivlirwgPiBrYXRzdVwgOwor5YqaID4gY2hha3VcIDsKK+WKhCA+IHNhdHN1XCA7CivlioIgPiBrZXRzdVwgOwor5YqAID4ga2F0c3VcIDsKK+WJnyA+IHRldHN1XCA7CivliY4gPiBzYXRzdVwgOwor5YmMID4gcmF0c3VcIDsKK+WIriA+IGthdHN1XCA7CivliKsgPiBiZXRzdVwgOwor5YicID4gaHV0c3VcIDsKK+WIliA+IGdldHN1XCA7CivliJQgPiBrZXRzdVwgOwor5YeTID4gcml0c3VcIDsKK+WGvSA+IHJldHN1XCA7CivlhrkgPiBodXRzdVwgOwor5YazID4ga2V0c3VcIDsKK+WEsiA+IG1vdWtlXCA7Civlg6ogPiBraXRzdVwgOwor5YOmID4gc2h5dXVcIDsKK+WDgSA+IHNldHN1XCA7CivlgqAgPiBoYXRzdVwgOwor5YKIID4gcml0c3VcIDsKK+WChCA+IGthdHN1XCA7CivlgbAgPiBzZXRzdVwgOwor5YGfID4ga3V3YXVcIDsKK+WBiCA+IGtldHN1XCA7CivlgJQgPiBrdXRzdVwgOwor5YCQID4gc2h1a3VcIDsKK+WAjyA+IHNodWt1XCA7CivlgIwgPiBrdXdhblwgOwor5L+2ID4gc2h1a3VcIDsKK+S+vCA+IGhvdHN1XCA7CivkvrsgPiB0YXRzdVwgOwor5L63ID4ga3lva3VcIDsKK+S+mSA+IGNob2t1XCA7CivkvpMgPiByb3RzdVwgOwor5L6QID4ga3lva3VcIDsKK+S9uCA+IGthdHN1XCA7CivkvbYgPiBraXRzdVwgOwor5L2qID4ga3V3YWlcIDsKK+S9miA+IHRldHN1XCA7CivkvZYgPiBoaXRzdVwgOwor5Ly1ID4ga3lva3VcIDsKK+S8syA+IHNldHN1XCA7CivkvJwgPiBzb3RzdVwgOwor5LyQID4gYmF0c3VcIDsKK+S7tCA+IGdhdHN1XCA7Civku6EgPiBraXRzdVwgOwor5LuIID4gaGF0c3VcIDsKK+S6nyA+IGt5b2t1XCA7Civkuo0gPiBjaG9rdVwgOwor5LqFID4ga2V0c3VcIDsKK+S5tCA+IHNldHN1XCA7CivkuYQgPiBzaGltZVwgOwor5LmAID4gZnV0c3VcIDsKK+S4vyA+IGhldHN1XCA7CivkuLIgPiBrdXNoaVwgOwor44CGID4gc2hpbWVcIDsKK+efsyA+IGtva3VcIDsKK+i/qyA+IGhha3VcIDsKK+i/hCA+IG1hZGVcIDsKK+W/gyA+IHNoaW5cIDsKK+i+vCA+IGtvbXVcIDsKK+W+tCA+IGNob3VcIDsKK+W+syA+IHRva3VcIDsKK+i+sSA+IGpva3VcIDsKK+eerSA+IHJ5b3VcIDsKK+eerCA+IHNodW5cIDsKK+W+qSA+IGZ1a3VcIDsKK+i+myA+IHNoaW5cIDsKK+W+lyA+IHRva3VcIDsKK+W9vCA+IGthcmVcIDsKK+W9uSA+IHlha3VcIDsKK+W9sSA+IGthZ2VcIDsKK+W9qyA+IGNob3VcIDsKK+edpiA+IGJva3VcIDsKK+edoyA+IHRva3VcIDsKK+W8viA+IHRhbWFcIDsKK+ecuiA+IGNob3VcIDsKK+W8tyA+IGt5b3VcIDsKK+W8tSA+IGNob3VcIDsKK+i8ryA+IHNodXVcIDsKK+ecniA+IHNoaW5cIDsKK+W8lCA+IGNob3VcIDsKK+eciSA+IG1heXVcIDsKK+i8gyA+IGtha3VcIDsKK+ebtCA+IGhpdGFcIDsKK+i7kiA+IG5va2lcIDsKK+ebiiA+IHlha3VcIDsKK+W7giA+IHNob3VcIDsKK+eavyA+IHNhcmFcIDsKK+W6tSA+IGlvcmlcIDsKK+eariA+IGthd2FcIDsKK+W6rSA+IG5pd2FcIDsKK+W6lyA+IG1pc2VcIDsKK+W6lSA+IHNva29cIDsKK+i6kSA+IHRla2lcIDsKK+i6jSA+IHlha3VcIDsKK+i6iiA+IGNodXVcIDsKK+W6iiA+IHl1a2FcIDsKK+eahCA+IG1hdG9cIDsKK+W6gSA+IGNob3VcIDsKK+W5uSA+IG1pa2lcIDsKK+i5tCA+IHNodXVcIDsKK+W5syA+IGhpcmFcIDsKK+i5oCA+IHNla2lcIDsKK+i5nyA+IHNla2lcIDsKK+eZliA+IGt1c2VcIDsKK+W5hSA+IGhhYmFcIDsKK+eZgiA+IHJ5b3VcIDsKK+W4uCA+IHRvd2FcIDsKK+W4rSA+IHNla2lcIDsKK+W4jCA+IG1hcmVcIDsKK+W4gyA+IG51bm9cIDsKK+W3uyA+IG1ha2lcIDsKK+i3syA+IGNob3VcIDsKK+W3nSA+IGthd2FcIDsKK+eXhyA+IHNob3VcIDsKK+i2syA+IGFzaGlcIDsKK+i2iiA+IGV0c3VcIDsKK+i2hSA+IGNob3VcIDsKK+i1qyA+IGtha3VcIDsKK+eVqyA+IGtha3VcIDsKK+i1pCA+IHNla2lcIDsKK+eVmSA+IHJ5dXVcIDsKK+eUuyA+IGtha3VcIDsKK+eUsyA+IHNhcnVcIDsKK+eUnyA+IG5hbWFcIDsKK+eUmiA+IHNoaW5cIDsKK+W0liA+IGdha2VcIDsKK+W0jiA+IHNha2lcIDsKK+WzsCA+IG1pbmVcIDsKK+izkSA+IHNoaW5cIDsKK+iziiA+IHpva3VcIDsKK+izgyA+IGNoaW5cIDsKK+iyrCA+IHNla2lcIDsKK+WxsSA+IHlhbWFcIDsKK+WxrCA+IHpva3VcIDsKK+WxniA+IHpva3VcIDsKK+WxkSA+IGt1enVcIDsKK+ixhiA+IG1hbWVcIDsKK+eQtCA+IGtvdG9cIDsKK+WwsSA+IHNodXVcIDsKK+WwkSA+IHNob3VcIDsKK+WwjyA+IHNob3VcIDsKK+WwhiA+IHNob3VcIDsKK+eQgyA+IHRhbWFcIDsKK+WvviA+IHRzdWlcIDsKK+WvuiA+IHRlcmFcIDsKK+WvtSA+IGNob3VcIDsKK+WvqSA+IHNoaW5cIDsKK+WvpSA+IHJ5b3VcIDsKK+WvoiA+IHNoaW5cIDsKK+ePjSA+IGNoaW5cIDsKK+WvjCA+IHRvbWlcIDsKK+WvgiA+IHNhYmlcIDsKK+WuvyA+IHlhZG9cIDsKK+WuriA+IG1peWFcIDsKK+WupCA+IG11cm9cIDsKK+WulyA+IHNodXVcIDsKK+eOliA+IGt5dXVcIDsKK+eOiSA+IGRhbWFcIDsKK+WuiSA+IHlhc3VcIDsKK+WuiCA+IG1vcmlcIDsKK+WuhSA+IHRha3VcIDsKK+iugCA+IHRva3VcIDsKK+WtuCA+IGdha3VcIDsKK+eNsiA+IGtha3VcIDsKK+itryA+IHlha3VcIDsKK+WtqyA+IG1hZ29cIDsKK+eNqCA+IGRva3VcIDsKK+WtpiA+IGdha3VcIDsKK+itiSA+IHNob3VcIDsKK+eNhCA+IGdva3VcIDsKK+eMvyA+IHNhcnVcIDsKK+eMqyA+IG5la29cIDsKK+isoSA+IHV0YWlcIDsKK+isjiA+IG5hem9cIDsKK+WsjCA+IGt5b3VcIDsKK+isgSA+IGV0c3VcIDsKK+eLuSA+IGt5b3VcIDsKK+eLrSA+IGt5b3VcIDsKK+eLgiA+IGt5b3VcIDsKK+WrgSA+IHlvbWVcIDsKK+iqvyA+IGNob3VcIDsKK+iqsCA+IGRhcmVcIDsKK+iqrSA+IHRva3VcIDsKK+iqgiA+IGNob3VcIDsKK+WpvyA+IG11a29cIDsKK+eJuSA+IHRva3VcIDsKK+ipsyA+IHNob3VcIDsKK+eJqSA+IG1vbm9cIDsKK+eJpyA+IGJva3VcIDsKK+eJmyA+IHVzaGlcIDsKK+iplSA+IGh5b3VcIDsKK+eJkiA+IGNob3VcIDsKK+WphiA+IGJhYmFcIDsKK+iouiA+IHNoaW5cIDsKK+iosyA+IHdha2VcIDsKK+ionyA+IHNob3VcIDsKK+WooCA+IHNoaW5cIDsKK+iolyA+IHRha3VcIDsKK+eIhiA+IGJha3VcIDsKK+WnqyA+IGhpbWVcIDsKK+eHkiA+IHNob3VcIDsKK+imuiA+IGtha3VcIDsKK+immiA+IGtha3VcIDsKK+WmmSA+IG15b3VcIDsKK+eGiiA+IGt1bWFcIDsKK+imhiA+IGZ1a3VcIDsKK+ilsiA+IHNodXVcIDsKK+eFpyA+IHNob3VcIDsKK+eFpCA+IHN1c3VcIDsKK+ilgSA+IGt5b3VcIDsKK+eEvCA+IHlha2lcIDsKK+WkqyA+IG90dG9cIDsKK+eEpiA+IHNob3VcIDsKK+WkoiA+IHl1bWVcIDsKK+WknCA+IHlvcnVcIDsKK+WkliA+IGhva2FcIDsKK+ikhyA+IGZ1a3VcIDsKK+ijviA+IHN1c29cIDsKK+WjsSA+IGljaGlcIDsKK+WjkyA+IGF0c3VcIDsKK+WjgSA+IGthYmVcIDsKK+eCuiA+IHRhbWVcIDsKK+eCrSA+IHN1bWlcIDsKK+WiqCA+IHN1bWlcIDsKK+iiliA+IHNvZGVcIDsKK+WikyA+IGhha2FcIDsKK+ihtyA+IGNodXVcIDsKK+ihqCA+IGh5b3VcIDsKK+WhqSA+IHNoaW9cIDsKK+ihnSA+IHNob3VcIDsKK+WhniA+IHNva3VcIDsKK+ihkyA+IHN1YmVcIDsKK+ihjCA+IGd5b3VcIDsKK+ihhiA+IHNodXVcIDsKK+igoiA+IHNodW5cIDsKK+eAnSA+IHJla2lcIDsKK+WggCA+IGhvcmlcIDsKK+a/ryA+IHRha3VcIDsKK+a/gSA+IGRha3VcIDsKK+a/gCA+IGdla2lcIDsKK+a+pCA+IHRha3VcIDsKK+WeoyA+IGtha2lcIDsKK+WeiyA+IGthdGFcIDsKK+a+hCA+IGNob3VcIDsKK+a9riA+IHNoaW9cIDsKK+idoCA+IGZ1a3VcIDsKK+idiSA+IHNlbWlcIDsKK+WdgiA+IHNha2FcIDsKK+a8vyA+IHNob3VcIDsKK+m8uyA+IGhhbmFcIDsKK+a8siA+IGNob3VcIDsKK+WcpyA+IGF0c3VcIDsKK+a8oCA+IGJha3VcIDsKK+WckiA+IHNvbm9cIDsKK+WciyA+IGtva3VcIDsKK+icgyA+IHNoaW5cIDsKK+a8giA+IGh5b3VcIDsKK+a8gSA+IHJ5b3VcIDsKK+WbvSA+IGt1bmlcIDsKK+m7tCA+IGthYmlcIDsKK+m7mSA+IG1va3VcIDsKK+m7mCA+IG1va3VcIDsKK+m7kiA+IGt1cm9cIDsKK+m7jSA+IGtpYmlcIDsKK+ibhyA+IGhlYmlcIDsKK+WbgSA+IHNob3VcIDsKK+a6uiA+IGRla2lcIDsKK+m6piA+IG11Z2lcIDsKK+m6pSA+IGJha3VcIDsKK+iapCA+IG5vbWlcIDsKK+a6oiA+IGl0c3VcIDsKK+a6nSA+IG1pem9cIDsKK+a6nCA+IHJ5dXVcIDsKK+iZjiA+IHRvcmFcIDsKK+a4rCA+IHNva3VcIDsKK+WYlyA+IHNob3VcIDsKK+a4iSA+IHNob3VcIDsKK+m3uSA+IHRha2FcIDsKK+a3sSA+IHNoaW5cIDsKK+iXpSA+IHlha3VcIDsKK+iXpCA+IGZ1amlcIDsKK+WXhSA+IGt5dXVcIDsKK+iXgSA+IHdhcmFcIDsKK+a2vCA+IHJ5b3VcIDsKK+a2nCA+IHRva3VcIDsKK+WWiyA+IGNob3VcIDsKK+WWiSA+IG5vZG9cIDsKK+a2iCA+IHNob3VcIDsKK+a1uCA+IHNoaW5cIDsKK+a1tCA+IHlva3VcIDsKK+a1nCA+IGhhbWFcIDsKK+a1miA+IHNodW5cIDsKK+iVjiA+IGt5b3VcIDsKK+WVhiA+IHNob3VcIDsKK+a1gSA+IHJ5dXVcIDsKK+a0siA+IHNodXVcIDsKK+WUsSA+IHNob3VcIDsKK+WUryA+IHRhZGFcIDsKK+iUrSA+IGthZ2VcIDsKK+a0pSA+IHNoaW5cIDsKK+a0niA+IGhvcmFcIDsKK+a0myA+IHJha3VcIDsKK+WUliA+IG9zaGlcIDsKK+iTriA+IGhhc3VcIDsKK+WTrSA+IGtva3VcIDsKK+mzqSA+IGhhdG9cIDsKK+azqCA+IGNodXVcIDsKK+mzpSA+IHRvcmlcIDsKK+azpSA+IGRvcm9cIDsKK+azoyA+IGt5dXVcIDsKK+azoiA+IG5hbWlcIDsKK+iTiyA+IGZ1dGFcIDsKK+aziiA+IGhha3VcIDsKK+azgSA+IGt5b3VcIDsKK+WSvSA+IG5vZG9cIDsKK+ayvCA+IG51bWFcIDsKK+iSuyA+IGpha3VcIDsKK+aysyA+IGthd2FcIDsKK+iSsiA+IGdhbWFcIDsKK+WSsyA+IHNla2lcIDsKK+WSsiA+IHNob3VcIDsKK+ayoiA+IHNhd2FcIDsKK+WSjiA+IGt5dXVcIDsKK+ayiCA+IGNoaW5cIDsKK+axsiA+IGt5dXVcIDsKK+WRqCA+IHNodXVcIDsKK+mxiCA+IHRhcmFcIDsKK+WRiiA+IGtva3VcIDsKK+axgiA+IGt5dXVcIDsKK+iQvSA+IG9jaGlcIDsKK+WQuCA+IGt5dXVcIDsKK+awtCA+IG1penVcIDsKK+awkSA+IHRhbWlcIDsKK+WQiiA+IGNob3VcIDsKK+WQhCA+IGtha3VcIDsKK+WPsyA+IG1pZ2lcIDsKK+iPryA+IGhhbmFcIDsKK+avrCA+IGt5dXVcIDsKK+WPrCA+IHNob3VcIDsKK+WPqyA+IGt5b3VcIDsKK+WPqiA+IHRhZGFcIDsKK+WPpCA+IGZ1cnVcIDsKK+WPliA+IHRvcmlcIDsKK+avkiA+IGRva3VcIDsKK+WPjiA+IHNodXVcIDsKK+avjSA+IGhhaGFcIDsKK+WPjCA+IGZ1dGFcIDsKK+iPiiA+IGtpa3VcIDsKK+WPiyA+IHRvbW9cIDsKK+WPiiA+IGt5dXVcIDsKK+WPiCA+IG1hdGFcIDsKK+auvyA+IGRvbm9cIDsKK+auuyA+IGthcmFcIDsKK+iOoiA+IHNheWFcIDsKK+WOnyA+IGhhcmFcIDsKK+WOhCA+IHlha3VcIDsKK+attCA+IHJla2lcIDsKK+WNsyA+IHNva3VcIDsKK+WNmiA+IGJha3VcIDsKK+WNlCA+IGt5b3VcIDsKK+WNkyA+IHRha3VcIDsKK+iNiSA+IGt1c2FcIDsKK+WNhyA+IG1hc3VcIDsKK+mssSA+IHV0c3VcIDsKK+assiA+IHlva3VcIDsKK+asnSA+IHV0c3VcIDsKK+msmiA+IGhpZ2VcIDsKK+WMmSA+IHNhamlcIDsKK+WMlyA+IGhva3VcIDsKK+iMjiA+IGt1a2lcIDsKK+iMhSA+IGtheWFcIDsKK+WMgiA+IG5pb3VcIDsKK+mrtyA+IG1hZ2VcIDsKK+mrrSA+IGhpZ2VcIDsKK+mrqiA+IGthbWlcIDsKK+iLpSA+IGpha3VcIDsKK+WLnSA+IHNob3VcIDsKK+mrmCA+IHRha2FcIDsKK+iLlCA+IGtva2VcIDsKK+iKsSA+IGhhbmFcIDsKK+mqqCA+IGhvbmVcIDsKK+WKqSA+IHN1a2VcIDsKK+WKhyA+IGdla2lcIDsKK+WKgyA+IGtha3VcIDsKK+WJvSA+IGh5b3VcIDsKK+WJsiA+IHdhcmlcIDsKK+iJryA+IHJ5b3VcIDsKK+WJpSA+IGhha3VcIDsKK+apnyA+IGhhdGFcIDsKK+mpmiA+IGt5b3VcIDsKK+WJiiA+IHNha3VcIDsKK+WJhyA+IHNva3VcIDsKK+WIuyA+IGtva3VcIDsKK+iIuSA+IGZ1bmVcIDsKK+WIuiA+IHRvZ2VcIDsKK+iItiA+IGhha3VcIDsKK+aoqiA+IHlva29cIDsKK+iInyA+IGZ1bmVcIDsKK+aomSA+IGh5b3VcIDsKK+iIjiA+IHNla2lcIDsKK+iIiiA+IGt5dXVcIDsKK+WIiCA+IGthcmlcIDsKK+aohSA+IG1vbWlcIDsKK+aogiA+IGdha3VcIDsKK+iHrSA+IHNodXVcIDsKK+iHoyA+IHNoaW5cIDsKK+mnkiA+IGtvbWFcIDsKK+mnkCA+IGNodXVcIDsKK+iHjSA+IGhlc29cIDsKK+anjCA+IHRzdWlcIDsKK+WHjCA+IHJ5b3VcIDsKK+anhyA+IG1ha2lcIDsKK+mmtCA+IHNodW5cIDsKK+WGrCA+IGZ1eXVcIDsKK+iGnSA+IGhpemFcIDsKK+iGnCA+IG1ha3VcIDsKK+ammyA+IHNoaW5cIDsKK+mmmSA+IGt5b3VcIDsKK+mmliA+IGt1YmlcIDsKK+WGhiA+IG1hcnVcIDsKK+WGhSA+IHVjaGlcIDsKK+alvSA+IHJha3VcIDsKK+iFuSA+IGhhcmFcIDsKK+altSA+IGdva3VcIDsKK+WFsSA+IGRvbW9cIDsKK+alrSA+IHdhemFcIDsKK+WFrSA+IHJva3VcIDsKK+WFqSA+IHJ5b3VcIDsKK+WFpSA+IG55dXVcIDsKK+WFgyA+IG1vdG9cIDsKK+iEoyA+IHNoaW5cIDsKK+WEnyA+IHNob3VcIDsKK+iEmiA+IGFzaGlcIDsKK+WEmCA+IG1hbWFcIDsKK+akjiA+IHRzdWlcIDsKK+iEiiA+IHNla2lcIDsKK+iEhyA+IHdha2lcIDsKK+iEhSA+IGt5b3VcIDsKK+iEgiA+IHlhbmlcIDsKK+iDvSA+IHlva3VcIDsKK+iDuCA+IG11bmVcIDsKK+ajriA+IG1vcmlcIDsKK+ajmiA+IHRhbmFcIDsKK+WDmiA+IHJ5b3VcIDsKK+WDlSA+IGJva3VcIDsKK+WDkSA+IGt5b3VcIDsKK+WCtyA+IHNob3VcIDsKK+iCqSA+IGthdGFcIDsKK+iCnSA+IGtpbW9cIDsKK+iCmCA+IGhpamlcIDsKK+WCmCA+IGthc2FcIDsKK+iCliA+IHNob3VcIDsKK+iCjCA+IGhhZGFcIDsKK+WCjSA+IHdha2lcIDsKK+iCiSA+IG5pa3VcIDsKK+aigyA+IHRla29cIDsKK+iBvSA+IGNob3VcIDsKK+WBvSA+IG5pc2VcIDsKK+iBtCA+IGNob3VcIDsKK+iBsyA+IHNob3VcIDsKK+WBtCA+IGhhdGFcIDsKK+iBmiA+IHNodXVcIDsKK+ahkCA+IGtpcmlcIDsKK+iBiiA+IHJ5b3VcIDsKK+ahgyA+IG1vbW9cIDsKK+ahgSA+IGtldGFcIDsKK+agvCA+IGtha3VcIDsKK+mguCA+IGt1YmlcIDsKK+iAsyA+IG1pbWlcIDsKK+mgrCA+IGhvaG9cIDsKK+mgmCA+IHJ5b3VcIDsKK+aglyA+IGt1cmlcIDsKK+iAhSA+IG1vbm9cIDsKK+mggyA+IGdvcm9cIDsKK+afvyA+IGtha2lcIDsKK+aftSA+IHNha3VcIDsKK+S/riA+IHNodXVcIDsKK+afmiA+IHl1enVcIDsKK+S/lyA+IHpva3VcIDsKK+aflCA+IG55dXVcIDsKK+e/kiA+IHNodXVcIDsKK+e/jCA+IHlva3VcIDsKK+S/gyA+IHNva3VcIDsKK+S+tSA+IHNoaW5cIDsKK+S+oSA+IGF0YWlcIDsKK+e+niA+IHNodXVcIDsKK+S+myA+IHRvbW9cIDsKK+memCA+IHNheWFcIDsKK+mdqSA+IGthd2FcIDsKK+S9nCA+IHNha3VcIDsKK+adliA+IHRzdWVcIDsKK+adkSA+IG11cmFcIDsKK+adjyA+IGFuenVcIDsKK+adiSA+IHN1Z2lcIDsKK+S8vSA+IHRvZ2lcIDsKK+actCA+IGJva3VcIDsKK+S8tCA+IHRvbW9cIDsKK+S8ryA+IGhha3VcIDsKK+acrSA+IGZ1ZGFcIDsKK+acrCA+IG1vdG9cIDsKK+mcpyA+IGtpcmlcIDsKK+S8kSA+IGt5dXVcIDsKK+S8jyA+IGZ1a3VcIDsKK+acjSA+IGZ1a3VcIDsKK+mchyA+IHNoaW5cIDsKK+mbsiA+IGt1bW9cIDsKK+S7siA+IG5ha2FcIDsKK+S7sCA+IGd5b3VcIDsKK+S7riA+IGthcmlcIDsKK+mbqiA+IHl1a2lcIDsKK+abnSA+IGJha3VcIDsKK+S7liA+IGhva2FcIDsKK+mbjCA+IG1lc3VcIDsKK+mbhiA+IHNodXVcIDsKK+S7hCA+IHNva3VcIDsKK+S6uiA+IGhpdG9cIDsKK+S6qyA+IGt5b3VcIDsKK+S6piA+IG1hdGFcIDsKK+aaoiA+IGNob3VcIDsKK+manCA+IHNob3VcIDsKK+mamSA+IHN1a2lcIDsKK+malCA+IGtha3VcIDsKK+e6jCA+IHpva3VcIDsKK+S6iyA+IGtvdG9cIDsKK+mahiA+IHJ5dXVcIDsKK+aahyA+IGhpbWFcIDsKK+mahSA+IHN1bWlcIDsKK+S6hiA+IHJ5b3VcIDsKK+mZuCA+IHJva3VcIDsKK+aZtiA+IHNob3VcIDsKK+mZsCA+IGthZ2VcIDsKK+aZnSA+IGNodXVcIDsKK+S5iyA+IGtvcmVcIDsKK+S5hSA+IGt5dXVcIDsKK+aZgiA+IHRva2lcIDsKK+aYvCA+IGhpcnVcIDsKK+S4uCA+IG1hcnVcIDsKK+aYrSA+IHNob3VcIDsKK+S4rSA+IG5ha2FcIDsKK+aYqCA+IHNha3VcIDsKK+e4piA+IHRhdGVcIDsKK+aYpSA+IGhhcnVcIDsKK+S4oSA+IHJ5b3VcIDsKK+e4myA+IGJha3VcIDsKK+e4iyA+IHRzdWlcIDsKK+S4iCA+IGRha2VcIDsKK+aYhyA+IHNob3VcIDsKK+e4hCA+IG5hd2FcIDsKK+S4gCA+IGljaGlcIDsKK+aXqCA+IG11bmVcIDsKK+aXlyA+IGhhdGFcIDsKK+aXjyA+IHpva3VcIDsKK+mXhyA+IHlhbWlcIDsKK+aXhSA+IHRhYmlcIDsKK+e2vyA+IHdhdGFcIDsKK+mWviA+IHlva3VcIDsKK+e2viA+IHJ5b3VcIDsKK+mWsiA+IGV0c3VcIDsKK+aWsCA+IHNoaW5cIDsKK+mWoyA+IGtha3VcIDsKK+aWpSA+IHNla2lcIDsKK+mWoiA+IHNla2lcIDsKK+e2miA+IHpva3VcIDsKK+aWmSA+IHJ5b3VcIDsKK+mWkSA+IGhpbWFcIDsKK+aWkSA+IG11cmFcIDsKK+aWjiA+IHRva2lcIDsKK+e1uSA+IGtpbnVcIDsKK+aVtSA+IHRla2lcIDsKK+e1piA+IGt5dXVcIDsKK+e1oSA+IHJha3VcIDsKK+aVmSA+IGt5b3VcIDsKK+aVkSA+IGt5dXVcIDsKK+e1hCA+IGt1bWlcIDsKK+e0uSA+IHNob3VcIDsKK+aUtiA+IHNodXVcIDsKK+e0syA+IHNoaW5cIDsKK+aUqyA+IGtha3VcIDsKK+e0oiA+IHNha3VcIDsKK+e0miA+IGt5dXVcIDsKK+e0mSA+IGthbWlcIDsKK+e0kCA+IGhpbW9cIDsKK+e0hSA+IGJlbmlcIDsKK+e0hCA+IHlha3VcIDsKK+aTsSA+IGtha3VcIDsKK+ezpyA+IHJ5b3VcIDsKK+aSsiA+IGJva3VcIDsKK+eypyA+IHNob3VcIDsKK+eypSA+IGtheXVcIDsKK+eyiSA+IGtvbmFcIDsKK+aSgyA+IGdla2lcIDsKK+aRuiA+IHNob3VcIDsKK+exsyA+IGtvbWVcIDsKK+exoCA+IGthZ29cIDsKK+exjSA+IHNla2lcIDsKK+mQmCA+IGthbmVcIDsKK+mQkCA+IHJ5b3VcIDsKK+aPuiA+IHl1cmlcIDsKK+evrSA+IGthZ29cIDsKK+evpCA+IHRva3VcIDsKK+aPjyA+IGJ5b3VcIDsKK+aOtCA+IGtha3VcIDsKK+eusSA+IGhha29cIDsKK+euoSA+IGt1ZGFcIDsKK+mNtSA+IGthZ2lcIDsKK+mNriA+IGNodXVcIDsKK+etliA+IHNha3VcIDsKK+mNiyA+IG5hYmVcIDsKK+etiyA+IHN1amlcIDsKK+etiSA+IG5hZG9cIDsKK+etiCA+IGhhenVcIDsKK+ethiA+IGZ1ZGVcIDsKK+aMviA+IGt5b3VcIDsKK+esuSA+IHNhc2FcIDsKK+mMsiA+IHJva3VcIDsKK+mMryA+IHNha3VcIDsKK+aMryA+IHNoaW5cIDsKK+esoCA+IGthc2FcIDsKK+eskSA+IHNob3VcIDsKK+mMkCA+IGtpcmlcIDsKK+aMhyA+IHl1YmlcIDsKK+eruSA+IHRha2VcIDsKK+ertiA+IGt5b3VcIDsKK+erryA+IGhhbmFcIDsKK+eroCA+IHNob3VcIDsKK+aLmyA+IHNob3VcIDsKK+aLjSA+IGhha3VcIDsKK+aKvSA+IGNodXVcIDsKK+eqriA+IGt5dXVcIDsKK+eqkyA+IG1hZG9cIDsKK+mKkSA+IHp1a3VcIDsKK+aKgCA+IHdhemFcIDsKK+aJvyA+IHNob3VcIDsKK+epuiA+IHNvcmFcIDsKK+eptiA+IGt5dXVcIDsKK+epjSA+IHNla2lcIDsKK+aJhyA+IG91Z2lcIDsKK+aIvyA+IGZ1c2FcIDsKK+mItCA+IHN1enVcIDsKK+eosSA+IHNob3VcIDsKK+eoriA+IHRhbmVcIDsKK+aInyA+IGdla2lcIDsKK+aImiA+IHNla2lcIDsKK+aIkSA+IHdhcmVcIDsKK+eojSA+IHlheWFcIDsKK+eoiyA+IGhvZG9cIDsKK+eogCA+IG1hcmVcIDsKK+ensCA+IHNob3VcIDsKK+mHoyA+IGNob3VcIDsKK+mHnSA+IGhhcmlcIDsKK+mHnCA+IGthbWFcIDsKK+mHmCA+IGt1Z2lcIDsKK+enkiA+IGJ5b3VcIDsKK+engCA+IHNodXVcIDsKK+emvyA+IGhhZ2VcIDsKK+aGqSA+IGlrb2lcIDsKK+mGpCA+IHNob3VcIDsKK+mGnCA+IHNodXVcIDsKK+aGlCA+IHNob3VcIDsKK+aGkSA+IGh5b3VcIDsKK+emjyA+IGZ1a3VcIDsKK+emhCA+IHJva3VcIDsKK+aFviA+IHlva3VcIDsKK+mFtyA+IGtva3VcIDsKK+mFrCA+IHNodXVcIDsKK+elniA+IGthbWlcIDsKK+mFkiA+IHNha2VcIDsKK+aFiyA+IHphbWFcIDsKK+aElSA+IGdha3VcIDsKK+mDtyA+IGt5b3VcIDsKK+mDrSA+IGtha3VcIDsKK+aDnCA+IHNla2lcIDsKK+aDkSA+IHdha3VcIDsKK+aCqiA+IHdhcnVcIDsKK+eipyA+IGhla2lcIDsKK+eijCA+IHJva3VcIDsKK+aChCA+IHNob3VcIDsKK+aBrSA+IGt5b3VcIDsKK+mBqSA+IHRla2lcIDsKK+aBpSA+IGhhamlcIDsKK+ehnSA+IHNob3VcIDsKK+aBkCA+IGt5b3VcIDsKK+mAuCA+IGl0c3VcIDsKK+mAsiA+IHNoaW5cIDsKK+mAsSA+IHNodXVcIDsKK+aAryA+IGt5b3VcIDsKK+aApSA+IGt5dXVcIDsKK+mAnyA+IHNva3VcIDsKK+mAmiA+IHRzdXVcIDsKK+aAjiA+IHNoaW5cIDsKK+eggiA+IHN1bmFcIDsKK+i/vSA+IHRzdWlcIDsKK+m+pSA+IHlha3VcIDsKK+m+oyA+IGtha3VcIDsKK+m+oCA+IHlha3VcIDsKK+m+nSA+IHNodXVcIDsKK+m+lCA+IGt5b3VcIDsKK+m+jyA+IGt5b3VcIDsKK+m+jSA+IHJ5dXVcIDsKK+m9uiA+IHNodXVcIDsKK+m9sSA+IHNla3VcIDsKK+m9sCA+IHNha3VcIDsKK+m9qiA+IHNva3VcIDsKK+m9qCA+IGt5dXVcIDsKK+m9oyA+IGtvbWFcIDsKK+m9oCA+IGNob3VcIDsKK+m9miA+IHNha3VcIDsKK+m9lCA+IHNoaW5cIDsKK+m9kyA+IHNoaW5cIDsKK+m9hSA+IGt5dXVcIDsKK+m8vCA+IGd5b3VcIDsKK+m8qyA+IHNla2lcIDsKK+m8piA+IGNob3VcIDsKK+m8miA+IGNob3VcIDsKK+m8jyA+IGJla2lcIDsKK+m8giA+IGNob3VcIDsKK+m7tyA+IHRva3VcIDsKK+m7sCA+IHNoaW5cIDsKK+m7kSA+IGtva3VcIDsKK+m6vyA+IG1hcm9cIDsKK+m6tCA+IGtpa3VcIDsKK+m6ryA+IGtpa3VcIDsKK+m6qCA+IHNob3VcIDsKK+m6niA+IHNob3VcIDsKK+m6mCA+IGt5b3VcIDsKK+m6jiA+IHNoaW5cIDsKK+m5tiA+IGt5b3VcIDsKK+m5oiA+IGdla2lcIDsKK+m5oSA+IHNla2lcIDsKK+m4tCA+IGtha3VcIDsKK+m4mSA+IHlha3VcIDsKK+m4liA+IGtha3VcIDsKK+m4kSA+IGdha3VcIDsKK+m4kCA+IHRla2lcIDsKK+m4iiA+IGhla2lcIDsKK+m3vSA+IGtha3VcIDsKK+m3uCA+IGl0c3VcIDsKK+m3ryA+IHJ5b3VcIDsKK+m3riA+IGt5b3VcIDsKK+m3piA+IHNob3VcIDsKK+m3nyA+IHNha3VcIDsKK+m3miA+IHJ5dXVcIDsKK+m3iiA+IGdla2lcIDsKK+m3gSA+IGdla2lcIDsKK+m2uiA+IHNla2lcIDsKK+m2uSA+IHJ5dXVcIDsKK+m2uCA+IGpha3VcIDsKK+m2riA+IGtva3VcIDsKK+m2qiA+IGtla2lcIDsKK+m2qSA+IGJva3VcIDsKK+m2miA+IGdha3VcIDsKK+m2liA+IHNodXVcIDsKK+m2kyA+IGJ5b3VcIDsKK+m2kiA+IHNla2lcIDsKK+m2gyA+IGdla2lcIDsKK+m1siA+IGpha3VcIDsKK+m1sCA+IGNob3VcIDsKK+m1qSA+IGZ1a3VcIDsKK+m1oiA+IHNoaW5cIDsKK+m1oCA+IGtva3VcIDsKK+m1nyA+IGt5b3VcIDsKK+m1mSA+IG1venVcIDsKK+m1lCA+IHNodW5cIDsKK+m1hyA+IHRva2lcIDsKK+m1hSA+IHJha3VcIDsKK+m1gyA+IGNodXVcIDsKK+m1giA+IGt5dXVcIDsKK+m0qiA+IGl0c3VcIDsKK+m0qCA+IGthbW9cIDsKK+m0lyA+IHJ5dXVcIDsKK+m0hyA+IHRva2lcIDsKK+m0hiA+IGNoaW5cIDsKK+mzpiA+IGl0c3VcIDsKK+myjCA+IGhha3VcIDsKK+mxtyA+IGdha3VcIDsKK+mxtiA+IGZ1a2FcIDsKK+mxtSA+IHNoaW5cIDsKK+mxsiA+IHJ5b3VcIDsKK+mxqCA+IHNob3VcIDsKK+mxpyA+IGhhbW9cIDsKK+mxnCA+IGt5b3VcIDsKK+mxmiA+IGtpc3VcIDsKK+mxmCA+IHNoaW5cIDsKK+mxkiA+IG1hc3VcIDsKK+mxjyA+IHNoaW5cIDsKK+mxjiA+IGt5b3VcIDsKK+mxiiA+IGl0c3VcIDsKK+mxhiA+IHNob3VcIDsKK+mxhSA+IHNob3VcIDsKK+mxgyA+IHNodXVcIDsKK+mxgiA+IHNob3VcIDsKK+mwviA+IGh5b3VcIDsKK+mwvSA+IHNodXVcIDsKK+mwtyA+IGNob3VcIDsKK+mwrSA+IGhpcmVcIDsKK+mwqCA+IGNob3VcIDsKK+mwpCA+IGJ1cmlcIDsKK+mwoSA+IHJ5dXVcIDsKK+mwmSA+IGhheWFcIDsKK+mwkCA+IHdhbmlcIDsKK+mwgiA+IHNva3VcIDsKK+mvvSA+IHNla2lcIDsKK+mvqiA+IHJ5b3VcIDsKK+mvpyA+IHNob3VcIDsKK+mvpSA+IHJpa3VcIDsKK+mvlyA+IHNob3VcIDsKK+mvliA+IHNhYmFcIDsKK+mvlCA+IGJvcmFcIDsKK+mvjiA+IHVndWlcIDsKK+mviiA+IGhhemVcIDsKK+muvyA+IGNob3VcIDsKK+muvCA+IHNoaW5cIDsKK+muuSA+IHRha29cIDsKK+mutCA+IGdvcmlcIDsKK+musiA+IG1hdGVcIDsKK+musSA+IGJvcmFcIDsKK+muqyA+IHNhbWVcIDsKK+muoCA+IGhheWFcIDsKK+munSA+IHNob3VcIDsKK+mukiA+IGZ1bmFcIDsKK+muiiA+IGhha3VcIDsKK+muiSA+IGNob3VcIDsKK+mtuSA+IHRvZG9cIDsKK+mtqyA+IHNoaW5cIDsKK+mtoSA+IHRla2lcIDsKK+mtlyA+IHNodXVcIDsKK+mtjiA+IHJ5b3VcIDsKK+mtiCA+IHNob3VcIDsKK+mthCA+IGhha3VcIDsKK+msuiA+IHNob3VcIDsKK+mssiA+IHJla2lcIDsKK+mssCA+IHV0c3VcIDsKK+msryA+IGNob3VcIDsKK+msriA+IGt5dXVcIDsKK+msqSA+IGdla2lcIDsKK+msmyA+IHJ5b3VcIDsKK+mskiA+IHNoaW5cIDsKK+mshiA+IHNob3VcIDsKK+mruSA+IGt5dXVcIDsKK+mrqyA+IGNob3VcIDsKK+mrpCA+IGt5dXVcIDsKK+mrnyA+IGh5b3VcIDsKK+mrnCA+IGt5b3VcIDsKK+mrkSA+IHRva3VcIDsKK+mrjiA+IHJ5b3VcIDsKK+mrhiA+IGhha3VcIDsKK+mqvCA+IGtha3VcIDsKK+mqsiA+IGhha3VcIDsKK+mqriA+IHlva3VcIDsKK+mqrSA+IGhhZ2lcIDsKK+mqjiA+IHNoaW5cIDsKK+mqiSA+IGh5dXVcIDsKK+mpqyA+IGh5dXVcIDsKK+mpnyA+IHNodXVcIDsKK+mpnSA+IHRha3VcIDsKK+mplSA+IGt5b3VcIDsKK+mpkSA+IHJ5dXVcIDsKK+mpjSA+IGd5b3VcIDsKK+mpgyA+IGh5b3VcIDsKK+mpgCA+IGJha3VcIDsKK+motiA+IHNodXVcIDsKK+mosyA+IHRva3VcIDsKK+moriA+IHJ5dXVcIDsKK+moniA+IGtha3VcIDsKK+mnvyA+IHNodW5cIDsKK+mnuCA+IHNoaW5cIDsKK+mntSA+IHJ5dXVcIDsKK+mnsiA+IHNodXVcIDsKK+mnsSA+IHJha3VcIDsKK+mnriA+IGhha3VcIDsKK+mnqiA+IHNoaW5cIDsKK+mngSA+IGJha3VcIDsKK+mmvSA+IGNodXVcIDsKK+mmsiA+IHRha3VcIDsKK+mmsCA+IHRla2lcIDsKK+mmriA+IGh5b3VcIDsKK+mmpSA+IGZ1a3VcIDsKK+mmmCA+IGtha3VcIDsKK+mlnyA+IHNob3VcIDsKK+mllyA+IGt5b3VcIDsKK+mliCA+IHNodXVcIDsKK+mkviA+IHJ5dXVcIDsKK+mkuiA+IGhha3VcIDsKK+mkpiA+IGNob3VcIDsKK+mklyA+IHNva3VcIDsKK+mklSA+IHNodW5cIDsKK+mkiSA+IHNob3VcIDsKK+mjpSA+IHRha3VcIDsKK+mjiCA+IGh5b3VcIDsKK+mjhyA+IGh5b3VcIDsKK+mjhiA+IGh5b3VcIDsKK+mjhSA+IHJ5dXVcIDsKK+mjhCA+IGh5b3VcIDsKK+mjgyA+IGh5b3VcIDsKK+mjgiA+IHJ5dXVcIDsKK+mityA+IGh5b3VcIDsKK+miriA+IGh5b3VcIDsKK+mhsyA+IHNob3VcIDsKK+mhpiA+IHNob3VcIDsKK+mhliA+IHNoaW5cIDsKK+mhkiA+IGd5b3VcIDsKK+mgsCA+IGt5b3VcIDsKK+mgoyA+IHNoaW5cIDsKK+mgniA+IGF0c3VcIDsKK+mgmSA+IHNha3VcIDsKK+mglCA+IHRla2lcIDsKK+mgjCA+IHNob3VcIDsKK+mftyA+IHJha3VcIDsKK+mftiA+IHNob3VcIDsKK+mfriA+IG5pcmFcIDsKK+mfrSA+IGt5dXVcIDsKK+mfmCA+IHNob3VcIDsKK+mflCA+IGNob3VcIDsKK+mfhyA+IHRva3VcIDsKK+mfgSA+IGt5b3VcIDsKK+meuSA+IGtha3VcIDsKK+metCA+IGZ1a3VcIDsKK+meqyA+IGtpa3VcIDsKK+mepiA+IHNodXVcIDsKK+meoiA+IHNob3VcIDsKK+meoCA+IG1hcmlcIDsKK+menyA+IGtha3VcIDsKK+mejyA+IGt5b3VcIDsKK+mehiA+IHRvbW9cIDsKK+mdriA+IHRla2lcIDsKK+mdlSA+IHNoaW5cIDsKK+mdjyA+IGtha3VcIDsKK+mdjiA+IGtha3VcIDsKK+mdhCA+IG1veWFcIDsKK+mdgyA+IGtha3VcIDsKK+mdgiA+IHJla2lcIDsKK+mcuSA+IGhla2lcIDsKK+mcuCA+IGhha3VcIDsKK+mcsyA+IHJ5dXVcIDsKK+mcsSA+IGl0c3VcIDsKK+mcpCA+IHJ5dXVcIDsKK+mcoiA+IGJha3VcIDsKK+mcoSA+IGJha3VcIDsKK+mcjSA+IGtha3VcIDsKK+mchSA+IHNob3VcIDsKK+mchCA+IHNob3VcIDsKK+mcgyA+IGNoaW5cIDsKK+mcgiA+IGJva3VcIDsKK+mbuSA+IGh5b3VcIDsKK+mbmCA+IHdha3VcIDsKK+mblSA+IGNob3VcIDsKK+mbkiA+IHJha3VcIDsKK+mbiSA+IGtpamlcIDsKK+mauyA+IHNla2lcIDsKK+mauiA+IGtva3VcIDsKK+manyA+IGdla2lcIDsKK+mZvyA+IGt5b3VcIDsKK+mZsyA+IGNoaW5cIDsKK+mZniA+IHNob3VcIDsKK+mZlyA+IHNob3VcIDsKK+mZjCA+IGhha3VcIDsKK+mYniA+IHJva3VcIDsKK+mXoiA+IGhla2lcIDsKK+mXnyA+IGt5dXVcIDsKK+mXnSA+IGh5b3VcIDsKK+mXliA+IGNoaW5cIDsKK+mXgyA+IGdla2lcIDsKK+mWtiA+IHNob3VcIDsKK+mWtCA+IGtla2lcIDsKK+mWsSA+IGV0c3VcIDsKK+mWoCA+IHRhbWFcIDsKK+mWliA+IHl1cnVcIDsKK+mWhCA+IGtva3VcIDsKK+mVuSA+IGt5dXVcIDsKK+mVuCA+IGNob3VcIDsKK+mVoCA+IHJ5dXVcIDsKK+mUuiA+IHNob3VcIDsKK+mSgSA+IGtha3VcIDsKK+mRvyA+IG5vbWlcIDsKK+mRsCA+IHlha3VcIDsKK+mRriA+IGhha3VcIDsKK+mRoyA+IGh5b3VcIDsKK+mRoSA+IHNha3VcIDsKK+mRnyA+IHRva3VcIDsKK+mRnCA+IHNob3VcIDsKK+mRkyA+IHlhcmlcIDsKK+mRiiA+IGtha3VcIDsKK+mRhCA+IGNodXVcIDsKK+mRgyA+IHR5b3VcIDsKK+mQuCA+IHRha3VcIDsKK+mQtCA+IGhla2lcIDsKK+mQsiA+IHRha3VcIDsKK+mQlCA+IHNoaW5cIDsKK+mQjiA+IHNob3VcIDsKK+mQiCA+IGt5b3VcIDsKK+mQgiA+IHJ5dXVcIDsKK+mPvSA+IHNodXVcIDsKK+mPuSA+IGt5b3VcIDsKK+mPtyA+IGhva3VcIDsKK+mPpiA+IHNob3VcIDsKK+mPpSA+IHNodXVcIDsKK+mPoiA+IGh5b3VcIDsKK+mPmyA+IHNob3VcIDsKK+mPmCA+IHNob3VcIDsKK+mPkSA+IHRla2lcIDsKK+mPkCA+IHJ5dXVcIDsKK+mPjCA+IGJha3VcIDsKK+mPiiA+IGd5b3VcIDsKK+mPgyA+IHpva3VcIDsKK+mOtCA+IHNva3VcIDsKK+mOsCA+IGl0c3VcIDsKK+mOriA+IGNoaW5cIDsKK+mOrSA+IGNoaW5cIDsKK+mOqCA+IHNodW5cIDsKK+mOpiA+IHJ5dXVcIDsKK+mOmyA+IGhha3VcIDsKK+mOmiA+IHRzdWlcIDsKK+mOmCA+IHJla2lcIDsKK+mOkCA+IHNva3VcIDsKK+mOjyA+IHJ5dXVcIDsKK+mOjSA+IHNha3VcIDsKK+mOjCA+IGthbWFcIDsKK+mOgCA+IHNodXVcIDsKK+mNviA+IHNob3VcIDsKK+mNvCA+IGhhcmlcIDsKK+mNtiA+IHNob3VcIDsKK+mNrCA+IGt1d2FcIDsKK+mNliA+IGNoaW5cIDsKK+mMtyA+IGF0c3VcIDsKK+mMtiA+IGh5b3VcIDsKK+mMtCA+IHJva3VcIDsKK+mMqyA+IHN1enVcIDsKK+mMqSA+IHNob3VcIDsKK+mMniA+IHNodW5cIDsKK+mMhiA+IHNhYmlcIDsKK+mMhCA+IHJva3VcIDsKK+mMgiA+IHJ5b3VcIDsKK+mLvyA+IHNob3VcIDsKK+mLuSA+IGNob3VcIDsKK+mLsyA+IGNodXVcIDsKK+mLsiA+IGJ5b3VcIDsKK+mLpCA+IHN1a2lcIDsKK+mLoCA+IHNoaW5cIDsKK+mLnCA+IHNha3VcIDsKK+mLiCA+IHlva3VcIDsKK+mKvyA+IHNob3VcIDsKK+mKuSA+IHNodXVcIDsKK+mKuCA+IHNob3VcIDsKK+mKtyA+IHNob3VcIDsKK+mKtiA+IGt5dXVcIDsKK+mKmyA+IG1vcmlcIDsKK+mKjiA+IGt5b3VcIDsKK+mKiSA+IGl0c3VcIDsKK+mJviA+IGhva29cIDsKK+mJuyA+IHJha3VcIDsKK+mJriA+IHNoaW5cIDsKK+mJpiA+IGthbmVcIDsKK+mJniA+IGV0c3VcIDsKK+mJnSA+IHJ5dXVcIDsKK+mJmiA+IHJ5dXVcIDsKK+mJkSA+IGhha3VcIDsKK+mJkCA+IHNla2lcIDsKK+mJiiA+IHNob3VcIDsKK+mIviA+IGNodXVcIDsKK+mIvCA+IHNha3VcIDsKK+mIrCA+IHRha3VcIDsKK+mIlSA+IGNodXVcIDsKK+mIlCA+IHNob3VcIDsKK+mIjiA+IGthZ2lcIDsKK+mIjCA+IGV0c3VcIDsKK+mIiiA+IHNoaW5cIDsKK+mHvSA+IGhla2lcIDsKK+mHuyA+IGt5dXVcIDsKK+mHpSA+IHNob3VcIDsKK+mHniA+IHNodXVcIDsKK+mHmyA+IGtva3VcIDsKK+mHmiA+IGt5dXVcIDsKK+mHmSA+IGhha3VcIDsKK+mHlyA+IHNob3VcIDsKK+mHlCA+IGl0c3VcIDsKK+mHkyA+IGh5dXVcIDsKK+mHjyA+IHJ5b3VcIDsKK+mHgiA+IHNob3VcIDsKK+mGuyA+IHNodXVcIDsKK+mGriA+IHNob3VcIDsKK+mGrSA+IGhva3VcIDsKK+mGrCA+IHNob3VcIDsKK+mGlSA+IHNodW5cIDsKK+mGiyA+IHNha3VcIDsKK+mGhyA+IHNodW5cIDsKK+mFsSA+IHNob3VcIDsKK+mFqiA+IHJha3VcIDsKK+mFpyA+IHNodXVcIDsKK+mFmSA+IHNoaW5cIDsKK+mFjiA+IGNodXVcIDsKK+mFiyA+IHNodXVcIDsKK+mFiSA+IHRvcmlcIDsKK+mEuSA+IHNodXVcIDsKK+mEtCA+IGd5b3VcIDsKK+mEqSA+IHNoaW5cIDsKK+mEpSA+IGt5b3VcIDsKK+mEoyA+IHNob3VcIDsKK+mEmiA+IGJha3VcIDsKK+mEmSA+IGhpbmFcIDsKK+mElSA+IGt5b3VcIDsKK+mEiSA+IGt5b3VcIDsKK+mEgiA+IGdha3VcIDsKK+mEgCA+IGpha3VcIDsKK+mDtCA+IGNoaW5cIDsKK+mDsCA+IHNodXVcIDsKK+mDpCA+IGdla2lcIDsKK+mDnSA+IGtha3VcIDsKK+mDhyA+IHNodW5cIDsKK+mDhCA+IGtla2lcIDsKK+mCtSA+IHNob3VcIDsKK+mCsSA+IGt5dXVcIDsKK+mCpiA+IGt1bmlcIDsKK+mCpSA+IHNoaW5cIDsKK+mCmyA+IGt5b3VcIDsKK+mCiyA+IHJ5b3VcIDsKK+mCiCA+IGJha3VcIDsKK+mBvCA+IHJ5b3VcIDsKK+mBuSA+IGl0c3VcIDsKK+mBrCA+IHNva3VcIDsKK+mBpyA+IHNob3VcIDsKK+mBmyA+IHJ5dXVcIDsKK+mBkiA+IHNodXVcIDsKK+mBjyA+IGF0c3VcIDsKK+mBjCA+IGdha3VcIDsKK+mAtyA+IGtla2lcIDsKK+mAtCA+IHRha3VcIDsKK+mAqiA+IHNha3VcIDsKK+mAqSA+IGthbXVcIDsKK+mApyA+IHNha29cIDsKK+mAoSA+IHNodW5cIDsKK+mAmyA+IGt5b3VcIDsKK+mAliA+IHRla2lcIDsKK+mAkSA+IGt5dXVcIDsKK+mAjiA+IHNodXVcIDsKK+mAjSA+IHNob3VcIDsKK+i/uSA+IHNla2lcIDsKK+i/riA+IHNha3VcIDsKK+i/qiA+IHRla2lcIDsKK+i/oiA+IGNob3VcIDsKK+i/oCA+IHNob3VcIDsKK+i/jSA+IGNodW5cIDsKK+i+uCA+IHNob3VcIDsKK+i+nyA+IGhla2lcIDsKK+i9oyA+IHJla2lcIDsKK+i9oiA+IHJla2lcIDsKK+i9jiA+IGt5b3VcIDsKK+i9jCA+IHNvcmlcIDsKK+i9hiA+IHJva3VcIDsKK+i9gyA+IHNoaW5cIDsKK+i9giA+IGtva3VcIDsKK+i8uyA+IGZ1a3VcIDsKK+i8uSA+IGZ1a3VcIDsKK+i8tCA+IGNodW5cIDsKK+i8rCA+IHJ5b3VcIDsKK+i8pyA+IGJ5b3VcIDsKK+i8myA+IHJ5b3VcIDsKK+i8mSA+IGNob3VcIDsKK+i8mCA+IHJ5b3VcIDsKK+i8liA+IHNodXVcIDsKK+i8kiA+IGNob3VcIDsKK+i8jCA+IHJ5b3VcIDsKK+i8iCA+IGNodXVcIDsKK+i7vyA+IGJ5b3VcIDsKK+i7vCA+IGl0c3VcIDsKK+i7uCA+IGppa3VcIDsKK+i7rSA+IGt5b3VcIDsKK+i7qyA+IHNoaW5cIDsKK+i7iyA+IGF0c3VcIDsKK+i6syA+IGt5dXVcIDsKK+i6rCA+IGt5dXVcIDsKK+i6niA+IHNob3VcIDsKK+i6kiA+IHJla2lcIDsKK+i6kCA+IHJ5b3VcIDsKK+i6hCA+IGhla2lcIDsKK+i6gyA+IGhla2lcIDsKK+i5vCA+IGJva3VcIDsKK+i5uyA+IGt5b3VcIDsKK+i5uiA+IGt5b3VcIDsKK+i5sSA+IHNob3VcIDsKK+i5sCA+IHNodXVcIDsKK+i5pCA+IHNob3VcIDsKK+i5oiA+IHRla2lcIDsKK+i5kCA+IHNla2lcIDsKK+i5jCA+IHNob3VcIDsKK+i5gCA+IGNob3VcIDsKK+i4uCA+IGNoaW5cIDsKK+i4syA+IHNodW5cIDsKK+i4sSA+IHRha3VcIDsKK+i4qiA+IHNob3VcIDsKK+i4oiA+IHRla2lcIDsKK+i4liA+IHNla2lcIDsKK+i4iSA+IHJ5b3VcIDsKK+i4hiA+IHNodW5cIDsKK+i4hCA+IGhha3VcIDsKK+i3qyA+IGt5b3VcIDsKK+i3liA+IHNla2lcIDsKK+i3lSA+IGNob3VcIDsKK+i3hSA+IHRha3VcIDsKK+i2uyA+IGNoaW5cIDsKK+i2tSA+IGhha3VcIDsKK+i2rCA+IGt5b3VcIDsKK+i2qyA+IGt5b3VcIDsKK+i2oCA+IHRha3VcIDsKK+i2mSA+IGNob3VcIDsKK+i2giA+IGNoaW5cIDsKK+i2gSA+IGNoaW5cIDsKK+i1syA+IGt5dXVcIDsKK+i1pSA+IGtla2lcIDsKK+i0kCA+IHNoaW5cIDsKK+i0iyA+IG5pc2VcIDsKK+izviA+IHNha3VcIDsKK+izsCA+IHNodW5cIDsKK+izrSA+IGtha2VcIDsKK+izrCA+IGNob3VcIDsKK+izniA+IHNob3VcIDsKK+iznSA+IGNoaW5cIDsKK+izmSA+IHNodXVcIDsKK+izlSA+IGt5dXVcIDsKK+iyuiA+IGt5b3VcIDsKK+iymCA+IGJha3VcIDsKK+iykyA+IGJ5b3VcIDsKK+iyiiA+IGhha3VcIDsKK+iyiSA+IGtha3VcIDsKK+iyhSA+IGt5dXVcIDsKK+iygiA+IGNob3VcIDsKK+ixuSA+IGh5b3VcIDsKK+ixmiA+IGJ1dGFcIDsKK+iurCA+IHRha3VcIDsKK+iunyA+IHRva3VcIDsKK+iuliA+IHNoaW5cIDsKK+iukCA+IHNodXVcIDsKK+iujiA+IHNodXVcIDsKK+iujSA+IGdha3VcIDsKK+iuiyA+IHNob3VcIDsKK+iuhSA+IHNoaW5cIDsKK+iugSA+IHRha3VcIDsKK+ituCA+IGNodXVcIDsKK+itmyA+IHNoaW5cIDsKK+itmSA+IHNob3VcIDsKK+itliA+IHNoaW5cIDsKK+ithSA+IHNodXVcIDsKK+istyA+IGd5b3VcIDsKK+isqyA+IHRha3VcIDsKK+isniA+IGtha3VcIDsKK+isiyA+IGtha3VcIDsKK+irvyA+IHNodXVcIDsKK+irviA+IGRha3VcIDsKK+irtiA+IHNoaW5cIDsKK+irpCA+IGdha3VcIDsKK+irnCA+IGNob3VcIDsKK+irlyA+IHNoaW5cIDsKK+irkiA+IHJ5b3VcIDsKK+irkSA+IHRha3VcIDsKK+iriiA+IGtpa3VcIDsKK+irgyA+IGNoaW5cIDsKK+iqryA+IHNob3VcIDsKK+iqpiA+IHNob3VcIDsKK+iqmiA+IHNob3VcIDsKK+iqkSA+IGt5b3VcIDsKK+iqhiA+IGt5b3VcIDsKK+iqhSA+IGNodXVcIDsKK+ipviA+IGt5b3VcIDsKK+ipuyA+IGdha3VcIDsKK+iptiA+IHNodXVcIDsKK+iptSA+IHNoaW5cIDsKK+iplyA+IGt5b3VcIDsKK+iouyA+IGNodXVcIDsKK+iotyA+IHNoaW5cIDsKK+ioqyA+IHNoaW5cIDsKK+iopiA+IHNoaW5cIDsKK+iooCA+IHNoaW5cIDsKK+iohSA+IGt5dXVcIDsKK+iohCA+IGt5dXVcIDsKK+intCA+IHNob3VcIDsKK+insyA+IGtva3VcIDsKK+inqyA+IHNva3VcIDsKK+inqSA+IGt5dXVcIDsKK+imvyA+IHRla2lcIDsKK+imoSA+IGdla2lcIDsKK+imnCA+IGNob3VcIDsKK+immyA+IGJpa2lcIDsKK+imkyA+IGJla2lcIDsKK+imkCA+IGtha3VcIDsKK+imiCA+IGtha3VcIDsKK+iltSA+IHNob3VcIDsKK+ilryA+IHNoaW5cIDsKK+ilriA+IGhha3VcIDsKK+ilqyA+IHNla2lcIDsKK+ilniA+IGhpZGFcIDsKK+illyA+IHRha3VcIDsKK+ilhiA+IGhva3VcIDsKK+ilgiA+IHNoaW5cIDsKK+ilgCA+IHNla2lcIDsKK+ikviA+IGh5b3VcIDsKK+ikuiA+IGNob3VcIDsKK+iktiA+IGNob3VcIDsKK+iksSA+IGthaWVcIDsKK+ikpSA+IGpva3VcIDsKK+ikjiA+IHNodXVcIDsKK+ikgSA+IHNla2lcIDsKK+ijvCA+IHNla2lcIDsKK+ijsiA+IHJ5b3VcIDsKK+ijsSA+IGh5b3VcIDsKK+ijryA+IGNodXVcIDsKK+ijmyA+IHlvdXVcIDsKK+ijmCA+IGt5dXVcIDsKK+ijkyA+IGtva3VcIDsKK+ijkSA+IHNoaW5cIDsKK+ijhCA+IHl1a2lcIDsKK+iisSA+IGZ1a3VcIDsKK+iisCA+IGhvcm9cIDsKK+iilyA+IHNoaW5cIDsKK+ihsSA+IGt5b3VcIDsKK+ihoCA+IHNodW5cIDsKK+ihiSA+IGtha3VcIDsKK+ihhCA+IGppa3VcIDsKK+ihgiA+IGppa3VcIDsKK+igsCA+IHNob3VcIDsKK+igriA+IGV0c3VcIDsKK+igqCA+IHNob3VcIDsKK+igmiA+IGtha3VcIDsKK+igliA+IGtha3VcIDsKK+iggSA+IGt5b3VcIDsKK+ifuSA+IGthbmlcIDsKK+ifryA+IGd5b3VcIDsKK+ifrSA+IHNob3VcIDsKK+ifnyA+IHJ5b3VcIDsKK+ifnCA+IGt5b3VcIDsKK+ifjiA+IGRhbmlcIDsKK+ifiSA+IHJ5dXVcIDsKK+ifiCA+IGtha3VcIDsKK+ifhyA+IGhpa2lcIDsKK+ifhiA+IGhpa2lcIDsKK+ievyA+IHNob3VcIDsKK+ievSA+IHNodXVcIDsKK+ietSA+IGh5b3VcIDsKK+ieqyA+IHNla2lcIDsKK+iekyA+IHNoaW5cIDsKK+ieiyA+IHNodXVcIDsKK+idtiA+IGNob3VcIDsKK+idpCA+IHNodXVcIDsKK+idjSA+IHNva3VcIDsKK+icvSA+IHJ5b3VcIDsKK+icriA+IHlva3VcIDsKK+icqSA+IGNob3VcIDsKK+icqCA+IHNob3VcIDsKK+icpSA+IHNla2lcIDsKK+icoyA+IGt5b3VcIDsKK+icmSA+IHNob3VcIDsKK+ickCA+IGt5b3VcIDsKK+ichCA+IHNoaW5cIDsKK+ibuiA+IGt5b3VcIDsKK+ibuCA+IHRha29cIDsKK+ibrSA+IGhpcnVcIDsKK+ibrCA+IGt5b3VcIDsKK+ibqSA+IGt5b3VcIDsKK+ibkiA+IGtha3VcIDsKK+ibgSA+IGNob3VcIDsKK+iauCA+IHJla2lcIDsKK+iasSA+IHNha3VcIDsKK+iaryA+IGt5dXVcIDsKK+iaiyA+IGJ1eW9cIDsKK+iZuSA+IG5pamlcIDsKK+iZryA+IGt5dXVcIDsKK+iZrCA+IGt5dXVcIDsKK+iZqSA+IGtla2lcIDsKK+iZmSA+IGh1a3VcIDsKK+iZiCA+IGt5b3VcIDsKK+iYvSA+IHJ5dXVcIDsKK+iYlyA+IGhha3VcIDsKK+iYkiA+IGhhZ2lcIDsKK+iYhiA+IGFzaGlcIDsKK+iYgCA+IHRha3VcIDsKK+iXvyA+IGtha3VcIDsKK+iXtiA+IHJla2lcIDsKK+iXrSA+IGt5dXVcIDsKK+iXqiA+IHlhYnVcIDsKK+iXqCA+IGh5b3VcIDsKK+iXoCA+IGt5b3VcIDsKK+iXkCA+IGJha3VcIDsKK+iXjiA+IHNoaW5cIDsKK+iXiyA+IGNob3VcIDsKK+iWvSA+IHNoaW5cIDsKK+iWvCA+IGNoaW5cIDsKK+iWuCA+IGh5b3VcIDsKK+iWnCA+IGhla2lcIDsKK+iWkyA+IHNoaW5cIDsKK+iWkSA+IGt5b3VcIDsKK+iWjyA+IHlva3VcIDsKK+iWjCA+IGt5b3VcIDsKK+iVuiA+IHNodXVcIDsKK+iVrSA+IHNob3VcIDsKK+iVqiA+IGthYnVcIDsKK+iVoyA+IHNodW5cIDsKK+iVmiA+IGdha3VcIDsKK+iVlyA+IGZ1a2lcIDsKK+iVkCA+IGt1d2FcIDsKK+iViSA+IHNob3VcIDsKK+iViCA+IHNoaW5cIDsKK+iUryA+IGNoaW5cIDsKK+iUoyA+IHNob3VcIDsKK+iUnyA+IHpva3VcIDsKK+iUmiA+IHV0c3VcIDsKK+iUmCA+IHNoaW5cIDsKK+iUlSA+IGhldGFcIDsKK+iUlCA+IGZ1a3VcIDsKK+iUkCA+IHRla2lcIDsKK+iUjyA+IHNob3VcIDsKK+iUjCA+IHNva3VcIDsKK+iUhyA+IGtpa2VcIDsKK+iUhiA+IHJ5b3VcIDsKK+iUgyA+IGt5b3VcIDsKK+iTvCA+IHRhZGVcIDsKK+iTuyA+IHNodXVcIDsKK+iTtCA+IHNodW5cIDsKK+iTsiA+IGt5dXVcIDsKK+iTpyA+IHNob3VcIDsKK+iTmiA+IGNob3VcIDsKK+iTkSA+IG1pbm9cIDsKK+iTkCA+IGpva3VcIDsKK+iTgSA+IHNoaW5cIDsKK+iStCA+IHNha3VcIDsKK+iSqiA+IGhha3VcIDsKK+iSpiA+IHdha3VcIDsKK+iSliA+IHNoaW5cIDsKK+iSkCA+IHNodXVcIDsKK+iSiyA+IHNob3VcIDsKK+iRuiA+IHNodXVcIDsKK+iRtCA+IHNoaW5cIDsKK+iRsSA+IG5lZ2lcIDsKK+iRryA+IHlha3VcIDsKK+iRpCA+IGNodXVcIDsKK+iRoCA+IHNoaW5cIDsKK+iRmyA+IGt1enVcIDsKK+iRmiA+IGNoaW5cIDsKK+iRmSA+IHNob3VcIDsKK+iRjSA+IGh1a3VcIDsKK+iQvCA+IGdha3VcIDsKK+iQqiA+IGt1d2FcIDsKK+iQqSA+IGhhZ2lcIDsKK+iQoiA+IHlhamlcIDsKK+iQmyA+IGt5dXVcIDsKK+iQhyA+IGNob3VcIDsKK+iQhSA+IHNodW5cIDsKK+iPsSA+IHJ5b3VcIDsKK+iPqCA+IHNob3VcIDsKK+iPliA+IHNob3VcIDsKK+iPlCA+IGhva3VcIDsKK+iPkCA+IGhva3VcIDsKK+iOnCA+IHRla2lcIDsKK+iOmCA+IHNoaW5cIDsKK+iOjSA+IGt5dXVcIDsKK+iOgCA+IHNoaW5cIDsKK+iNjSA+IGt5b3VcIDsKK+iMvSA+IGNodXVcIDsKK+iMuiA+IHNodXVcIDsKK+iMryA+IGZ1a3VcIDsKK+iMriA+IHNob3VcIDsKK+iMrSA+IGtla2lcIDsKK+iMnyA+IGl0c3VcIDsKK+iMniA+IHNoaW5cIDsKK+iMliA+IGtha3VcIDsKK+iLnCA+IGJva3VcIDsKK+iLmSA+IHJ5dXVcIDsKK+iLlSA+IGNob3VcIDsKK+iLhiA+IHN1c2FcIDsKK+iKuSA+IHNlcmlcIDsKK+iKsiA+IGt1d2FcIDsKK+iKryA+IHNoaW5cIDsKK+iKqCA+IGt5dXVcIDsKK+iKkiA+IG5vZ2lcIDsKK+iKjiA+IGt5dXVcIDsKK+iKgCA+IHNob3VcIDsKK+iJvSA+IGt5dXVcIDsKK+iJuyA+IHJva3VcIDsKK+iJqyA+IHRvbW9cIDsKK+iJpyA+IHdha3VcIDsKK+iJoiA+IHNob3VcIDsKK+iJnSA+IHNvcmlcIDsKK+iJjyA+IHNodXVcIDsKK+iItSA+IGthamlcIDsKK+iItCA+IHRha3VcIDsKK+iInCA+IHNodW5cIDsKK+iIjyA+IGt5dXVcIDsKK+iIgiA+IHNob3VcIDsKK+iHuyA+IHNoaW5cIDsKK+iHuSA+IHNodXVcIDsKK+iHtSA+IGtha3VcIDsKK+iHsCA+IHNodXVcIDsKK+iHqyA+IGt5b3VcIDsKK+iHmyA+IGtva3VcIDsKK+iHlSA+IGh5b3VcIDsKK+iGsiA+IHNob3VcIDsKK+iGriA+IGt5b3VcIDsKK+iGpCA+IHRhcmFcIDsKK+iGmCA+IGh5b3VcIDsKK+iGlSA+IGtha3VcIDsKK+iGkyA+IGNob3VcIDsKK+iGiyA+IHJ5b3VcIDsKK+iGiiA+IGhha3VcIDsKK+iGiCA+IGtha3VcIDsKK+iGhCA+IHNodXVcIDsKK+iGgyA+IG90c3VcIDsKK+iFvyA+IG1vbW9cIDsKK+iFvSA+IG90c3VcIDsKK+iFrSA+IGdha3VcIDsKK+iFmCA+IGtha3VcIDsKK+iFiiA+IHNla2lcIDsKK+iEvCA+IHJ5b3VcIDsKK+iEuSA+IGNob3VcIDsKK+iEqSA+IHNodXVcIDsKK+iEpCA+IHNoaW5cIDsKK+iEmyA+IHN1bmVcIDsKK+iEiyA+IGt5b3VcIDsKK+iDuiA+IGF0c3VcIDsKK+iDsyA+IGtha3VcIDsKK+iDpCA+IHRhbmVcIDsKK+iDlyA+IHNoaW5cIDsKK+iDhCA+IGNodXVcIDsKK+iCsSA+IGhpamlcIDsKK+iCqyA+IHNodW5cIDsKK+iCoSA+IG1vbW9cIDsKK+iCiCA+IGNob3VcIDsKK+iChyA+IGNob3VcIDsKK+iCgSA+IGNob3VcIDsKK+iBvyA+IGl0c3VcIDsKK+iBvCA+IGNob3VcIDsKK+iBhCA+IHNoaW5cIDsKK+iAtCA+IGNob3VcIDsKK+iApCA+IHNla2lcIDsKK+e/uSA+IGd5b3VcIDsKK+e/siA+IGh5b3VcIDsKK+e/ryA+IGtva3VcIDsKK+e/riA+IGtha3VcIDsKK+e/nyA+IGtla2lcIDsKK+e/lSA+IGt5dXVcIDsKK+e/lCA+IHNob3VcIDsKK+e/jyA+IHJ5dXVcIDsKK+e/iiA+IHlva3VcIDsKK+e/gCA+IGNodXVcIDsKK+e+lyA+IGt5b3VcIDsKK+e+jCA+IGt5b3VcIDsKK+e+gyA+IGJla2lcIDsKK+e+gCA+IHJ5dXVcIDsKK+e9vyA+IHNob3VcIDsKK+e9tiA+IHJ5dXVcIDsKK+e9rSA+IHlva3VcIDsKK+e9pyA+IHNoaW5cIDsKK+e9oCA+IHdhbmFcIDsKK+e9hSA+IGhpYmlcIDsKK+e6lSA+IHNob3VcIDsKK+e6hiA+IGJva3VcIDsKK+e5riA+IGt5b3VcIDsKK+e5rSA+IG1heXVcIDsKK+e5piA+IGt5b3VcIDsKK+e5oSA+IHNodXVcIDsKK+e5miA+IHJ5b3VcIDsKK+e5kiA+IHNob3VcIDsKK+e5jSA+IHNodXVcIDsKK+e5iCA+IGt5b3VcIDsKK+e5hiA+IGt5dXVcIDsKK+e4viA+IHNla2lcIDsKK+e4uSA+IGh5b3VcIDsKK+e4tiA+IGNodXVcIDsKK+e4oCA+IGtva3VcIDsKK+e4nyA+IGpva3VcIDsKK+e4nSA+IHNoaW5cIDsKK+e4kCA+IHNodXVcIDsKK+e4iSA+IHNoaW5cIDsKK+e3siA+IGJ5b3VcIDsKK+e3nSA+IHNodXVcIDsKK+e3mSA+IGtha3VcIDsKK+e3lyA+IHNob3VcIDsKK+e3jiA+IHlva3VcIDsKK+e3hiA+IHNla2lcIDsKK+e3hSA+IHNodXVcIDsKK+e3gyA+IHNob3VcIDsKK+e2uSA+IHJ5dXVcIDsKK+e2tiA+IGt1d2FcIDsKK+e2pyA+IHNodW5cIDsKK+e2oiA+IGNodXVcIDsKK+e2nSA+IGNoaW5cIDsKK+e2myA+IGthc2VcIDsKK+e2jCA+IGtla2lcIDsKK+e2hSA+IHNoaW5cIDsKK+e2gyA+IHNob3VcIDsKK+e1vyA+IGt5dXVcIDsKK+e1iCA+IGJha3VcIDsKK+e0viA+IHNoaW5cIDsKK+e0rCA+IGNodXVcIDsKK+e0liA+IGNoaW5cIDsKK+e0gyA+IHNodW5cIDsKK+e0giA+IGNodXVcIDsKK+ezviA+IGt5dXVcIDsKK+ezuiA+IGt5dXVcIDsKK+eztiA+IGNob3VcIDsKK+eztCA+IHRla2lcIDsKK+ezoCA+IG51a2FcIDsKK+ezlyA+IGt5dXVcIDsKK+ezlCA+IHNodXVcIDsKK+ezkyA+IGtva3VcIDsKK+eziiA+IG5vcmlcIDsKK+eyuyA+IGNob3VcIDsKK+eytyA+IGtpa3VcIDsKK+eytiA+IHJva3VcIDsKK+eytSA+IGV0c3VcIDsKK+eysSA+IHJ5b3VcIDsKK+eyriA+IHJ5b3VcIDsKK+eypCA+IGV0c3VcIDsKK+eylSA+IGhha3VcIDsKK+eygiA+IGt1bWVcIDsKK+exviA+IG1vbWlcIDsKK+exsCA+IHdha3VcIDsKK+expSA+IHlha3VcIDsKK+expCA+IGt1amlcIDsKK+exnCA+IHRha3VcIDsKK+exlSA+IHJ5dXVcIDsKK+exkiA+IHNodXVcIDsKK+exjyA+IGhhdGFcIDsKK+exjCA+IGNodXVcIDsKK+exiiA+IHRla2lcIDsKK+exhiA+IHdha3VcIDsKK+exgCA+IGNodXVcIDsKK+ewtiA+IHJva3VcIDsKK+ewsSA+IGhhdGFcIDsKK+ewqyA+IHNob3VcIDsKK+ewqiA+IHNoaW5cIDsKK+ewqCA+IHNodW5cIDsKK+ewpSA+IGt5b3VcIDsKK+ewmSA+IGhha3VcIDsKK+ewmCA+IHNob3VcIDsKK+ewlyA+IHlhbmFcIDsKK+ewjyA+IHJva3VcIDsKK+ewjiA+IHNha3VcIDsKK+ewjCA+IHNva3VcIDsKK+ewiSA+IHNodXVcIDsKK+ewgCA+IHNha3VcIDsKK+evuCA+IHNoaW5cIDsKK+evtCA+IHRla2lcIDsKK+evoCA+IHNob3VcIDsKK+evmyA+IGpha3VcIDsKK+evlyA+IHdha3VcIDsKK+eviyA+IGt5b3VcIDsKK+euuiA+IHNodW5cIDsKK+eutCA+IHNoaW5cIDsKK+eusCA+IHNodW5cIDsKK+eurCA+IGpva3VcIDsKK+eumSA+IGZ1a3VcIDsKK+eulCA+IGhha3VcIDsKK+eujSA+IHRhZ2FcIDsKK+euhiA+IGhlcmFcIDsKK+etvyA+IHNob3VcIDsKK+etuiA+IGt5b3VcIDsKK+ettCA+IGt5b3VcIDsKK+etsSA+IHNob3VcIDsKK+etsCA+IHNha3VcIDsKK+etkCA+IGt5b3VcIDsKK+ethyA+IGt5b3VcIDsKK+esvyA+IHJha3VcIDsKK+esriA+IHNha3VcIDsKK+espyA+IHNha3VcIDsKK+esiiA+IHphcnVcIDsKK+esiCA+IGt5dXVcIDsKK+eruyA+IHJva3VcIDsKK+eruiA+IHRva3VcIDsKK+ertCA+IHNodW5cIDsKK+erqCA+IGNob3VcIDsKK+erpiA+IHNob3VcIDsKK+eroyA+IHNodW5cIDsKK+ernCA+IHJ5dXVcIDsKK+erhiA+IGt5dXVcIDsKK+erhSA+IGt5b3VcIDsKK+eqvyA+IHJ5dXVcIDsKK+eqtSA+IGNob3VcIDsKK+eqryA+IGthbWFcIDsKK+eqlSA+IGNob3VcIDsKK+eqhCA+IHNha3VcIDsKK+eqgCA+IGNodW5cIDsKK+epuSA+IGt5dXVcIDsKK+epuCA+IHNla2lcIDsKK+eptSA+IGF0c3VcIDsKK+epqyA+IGtha3VcIDsKK+epqiA+IHNob3VcIDsKK+epmSA+IGhva3VcIDsKK+eplSA+IHNob3VcIDsKK+epkCA+IHNodXVcIDsKK+ephiA+IGJva3VcIDsKK+epgCA+IGtva3VcIDsKK+eouSA+IHNoaW5cIDsKK+eouCA+IGtpa3VcIDsKK+eooCA+IGNodXVcIDsKK+eonCA+IHJ5b3VcIDsKK+eolSA+IHNodW5cIDsKK+eokSA+IHJpa3VcIDsKK+enpiA+IHNoaW5cIDsKK+ennSA+IHJla2lcIDsKK+enjSA+IGNodXVcIDsKK+engyA+IHRva3VcIDsKK+emtCA+IHlha3VcIDsKK+emmyA+IHNoaW5cIDsKK+elvyA+IHJva3VcIDsKK+elviA+IHJ5b3VcIDsKK+elsiA+IHNoaW5cIDsKK+elqCA+IGh5b3VcIDsKK+elpyA+IGNob3VcIDsKK+elpSA+IHNob3VcIDsKK+eljyA+IHNla2lcIDsKK+ekvyA+IHlha3VcIDsKK+ektCA+IGhha3VcIDsKK+ekrSA+IGtha3VcIDsKK+ekkCA+IGtha3VcIDsKK+ekgSA+IHNob3VcIDsKK+ejvyA+IHJla2lcIDsKK+ejtiA+IHNla2lcIDsKK+ejpyA+IHNla2lcIDsKK+ejpiA+IGh5b3VcIDsKK+ejnyA+IHJpa3VcIDsKK+ejlCA+IHRha3VcIDsKK+eiuyA+IGtha3VcIDsKK+eitSA+IHNla2lcIDsKK+eiqiA+IGNoaW5cIDsKK+eiqSA+IHNla2lcIDsKK+eioSA+IHRva3VcIDsKK+ehviA+IHRzdWlcIDsKK+ehuiA+IHRha3VcIDsKK+ehtCA+IGtha2lcIDsKK+ehriA+IGtha3VcIDsKK+ehqyA+IHJ5dXVcIDsKK+ehniA+IGtha3VcIDsKK+ehjCA+IHJha3VcIDsKK+egtyA+IHNoaW5cIDsKK+egpyA+IGNoaW5cIDsKK+egoSA+IGdpa3VcIDsKK+egnSA+IGt5b3VcIDsKK+egiSA+IGtla2lcIDsKK+efsSA+IHdha3VcIDsKK+efryA+IGt5b3VcIDsKK+efqiA+IGNodXVcIDsKK+efpyA+IHNoaW5cIDsKK+efpCA+IHNoaW5cIDsKK+efoCA+IHNha3VcIDsKK+efnyA+IHNha3VcIDsKK+efniA+IGl0c3VcIDsKK+efmyA+IGhva29cIDsKK+efjSA+IGtha3VcIDsKK+eeviA+IHNob3VcIDsKK+eepyA+IHNob3VcIDsKK+eenyA+IGh5b3VcIDsKK+eemiA+IHNodW5cIDsKK+eelSA+IHNob3VcIDsKK+eelCA+IHNha3VcIDsKK+eeiyA+IHNoaW5cIDsKK+eehCA+IGJ5b3VcIDsKK+edlyA+IHNla2lcIDsKK+edliA+IGNob3VcIDsKK+ecviA+IHNodXVcIDsKK+ecvSA+IGJha3VcIDsKK+ecuSA+IGNoaW5cIDsKK+ectiA+IGt5b3VcIDsKK+eclSA+IHNoaW5cIDsKK+eckiA+IHNoaW5cIDsKK+echyA+IGJ5b3VcIDsKK+ebviA+IHRhdGVcIDsKK+ebuSA+IHNodW5cIDsKK+ebhSA+IGNodXVcIDsKK+eauSA+IGhpYmlcIDsKK+eauCA+IGhpYmlcIDsKK+eatCA+IHNodW5cIDsKK+eaqiA+IHJla2lcIDsKK+eapiA+IGt5b3VcIDsKK+eaoiA+IGt5b3VcIDsKK+eanyA+IHNha3VcIDsKK+eamyA+IGt5b3VcIDsKK+eamSA+IHNla2lcIDsKK+eajSA+IHNva3VcIDsKK+eagCA+IGh5dXVcIDsKK+eZqCA+IGtha3VcIDsKK+eZpyA+IHJla2lcIDsKK+eZpSA+IGNob3VcIDsKK+eZiyA+IGtha3VcIDsKK+eZhSA+IHJ5dXVcIDsKK+eZhCA+IHNob3VcIDsKK+eZgyA+IHJ5dXVcIDsKK+eZgSA+IGZ1a3VcIDsKK+eYvCA+IGJha3VcIDsKK+eYuSA+IGNob3VcIDsKK+eYtCA+IHNob3VcIDsKK+eYsyA+IGNodXVcIDsKK+eYsiA+IHNob3VcIDsKK+eYriA+IHNoaW5cIDsKK+eYrSA+IGh5b3VcIDsKK+eYpCA+IGtvYnVcIDsKK+eYoCA+IHNla2lcIDsKK+eYhyA+IHNob3VcIDsKK+eXriA+IGNob3VcIDsKK+eXnyA+IHNob3VcIDsKK+eXnCA+IHRva3VcIDsKK+eWuSA+IHNoaW5cIDsKK+eWoiA+IGNoaW5cIDsKK+eWmiA+IGt5dXVcIDsKK+eWlCA+IGNob3VcIDsKK+eWkiA+IGRha3VcIDsKK+eWhyA+IGNodXVcIDsKK+eWhiA+IGt5b3VcIDsKK+eWhSA+IGt5b3VcIDsKK+eVvCA+IGNob3VcIDsKK+eVuyA+IHNob3VcIDsKK+eVuiA+IGt5b3VcIDsKK+eVtSA+IGtha3VcIDsKK+eVtCA+IGNodXVcIDsKK+eVsSA+IHJ5dXVcIDsKK+eVryA+IHNodW5cIDsKK+eVqSA+IGtlc2FcIDsKK+eVmyA+IHNoaW5cIDsKK+eVkCA+IGZ1a3VcIDsKK+eVhCA+IHJ5dXVcIDsKK+eVgyA+IHNodW5cIDsKK+eUvCA+IGNob3VcIDsKK+eUqiA+IHJva3VcIDsKK+eUpyA+IHNoaW5cIDsKK+eUoSA+IHNoaW5cIDsKK+eUniA+IHNob3VcIDsKK+eUlSA+IG1pa2FcIDsKK+eUkyA+IGhla2lcIDsKK+eUgyA+IHNodXVcIDsKK+eTuiA+IGNob3VcIDsKK+eTpCA+IHNob3VcIDsKK+eToiA+IGh5b3VcIDsKK+eTnyA+IGhha3VcIDsKK+eSuSA+IHNodXVcIDsKK+eSpyA+IGhla2lcIDsKK+eSoiA+IHJ5dXVcIDsKK+eSoSA+IHNoaW5cIDsKK+eSniA+IGhha3VcIDsKK+eSmSA+IHJ5b3VcIDsKK+eSiyA+IHNob3VcIDsKK+eShiA+IGt5dXVcIDsKK+eRsiA+IHNob3VcIDsKK+eRqCA+IHNoaW5cIDsKK+eRpyA+IHNoaW5cIDsKK+eRoCA+IHJ5dXVcIDsKK+eRlSA+IGtpenVcIDsKK+eRkiA+IGNob3VcIDsKK+eRgyA+IGNodW5cIDsKK+eQsSA+IGNob3VcIDsKK+eQrSA+IGtva3VcIDsKK+eQqSA+IHNob3VcIDsKK+eQoiA+IHRha3VcIDsKK+eQmyA+IGNoaW5cIDsKK+eQiSA+IHJ5dXVcIDsKK+eQhyA+IHNodXVcIDsKK+ePpiA+IGt5b3VcIDsKK+ePoyA+IHNodW5cIDsKK+ePniA+IHJha3VcIDsKK+ePmSA+IGt5b3VcIDsKK+ePkiA+IHNoaW5cIDsKK+ePjyA+IGtha3VcIDsKK+ePjiA+IGNoaW5cIDsKK+ePiyA+IHJ5dXVcIDsKK+ePhSA+IHNoaW5cIDsKK+ePgCA+IGhha3VcIDsKK+eOvyA+IHNob3VcIDsKK+eOkyA+IHRla2lcIDsKK+eOhSA+IG15b3VcIDsKK+eNtiA+IG55b3VcIDsKK+eNtSA+IHJ5b3VcIDsKK+eNoCA+IHJ5b3VcIDsKK+eNnyA+IGd5b3VcIDsKK+eNkCA+IHNob3VcIDsKK+eNjyA+IGJha3VcIDsKK+eNjiA+IHNob3VcIDsKK+eNjSA+IGt5b3VcIDsKK+eMnyA+IHJ5b3VcIDsKK+eMliA+IHNob3VcIDsKK+eMiyA+IGh5b3VcIDsKK+eLpSA+IHNodW5cIDsKK+eLoiA+IGtha3VcIDsKK+eLmyA+IGhha3VcIDsKK+eLhyA+IGJva3VcIDsKK+eLhiA+IGNoaW5cIDsKK+eLhCA+IHRla2lcIDsKK+eKsSA+IGtla2lcIDsKK+eKqCA+IHNodXVcIDsKK+eKoiA+IHRva3VcIDsKK+eKliA+IHJha3VcIDsKK+eJvyA+IGtva3VcIDsKK+eJniA+IGt5dXVcIDsKK+eJmSA+IGtpYmFcIDsKK+eJmCA+IHRva3VcIDsKK+eJlCA+IGhha3VcIDsKK+eJhiA+IHNob3VcIDsKK+eIvyA+IHNob3VcIDsKK+eItCA+IGtha3VcIDsKK+eIryA+IHNob3VcIDsKK+eImiA+IHlha3VcIDsKK+eIgCA+IGtha3VcIDsKK+eHuCA+IGppeXVcIDsKK+eHriA+IHNob3VcIDsKK+eHmiA+IGl0c3VcIDsKK+eHliA+IHNoaW5cIDsKK+eHjiA+IHJ5b3VcIDsKK+eHiyA+IHNob3VcIDsKK+eGmyA+IGh5b3VcIDsKK+eGhyA+IGtva3VcIDsKK+eGhCA+IHNva3VcIDsKK+eFgSA+IHNoaW5cIDsKK+eEuyA+IHNob3VcIDsKK+eEjCA+IHNodW5cIDsKK+eEhyA+IHNob3VcIDsKK+eEhiA+IGV0c3VcIDsKK+eEhSA+IGtva3VcIDsKK+eEgyA+IGtha3VcIDsKK+eDmSA+IHJha3VcIDsKK+eCuCA+IHNha3VcIDsKK+eCpCA+IHNob3VcIDsKK+eBuCA+IGt5dXVcIDsKK+eBrCA+IGh5b3VcIDsKK+eBpSA+IHNodW5cIDsKK+eBhCA+IHNob3VcIDsKK+eAuSA+IHNla3VcIDsKK+eAtyA+IHlva3VcIDsKK+eApyA+IHRha2lcIDsKK+eAnyA+IHNob3VcIDsKK+eAkyA+IGNob3VcIDsKK+eAkSA+IGJha3VcIDsKK+eAjyA+IHJ5dXVcIDsKK+eAiyA+IHNoaW5cIDsKK+eAhiA+IHRva3VcIDsKK+a/vCA+IHJva3VcIDsKK+a/uSA+IGJva3VcIDsKK+a/riA+IGhva3VcIDsKK+a/rCA+IHNodW5cIDsKK+a/qSA+IGtha3VcIDsKK+a/iCA+IHNodXVcIDsKK+a/hSA+IHNoaW5cIDsKK+a+vCA+IGhla2lcIDsKK+a+tSA+IHNoaW5cIDsKK+a+oCA+IHNob3VcIDsKK+a+mSA+IHNla2lcIDsKK+a+kyA+IGh1a3VcIDsKK+a+kSA+IHJ5dXVcIDsKK+a+hiA+IGd5b3VcIDsKK+a+giA+IGNob3VcIDsKK+a9nyA+IGthdGFcIDsKK+a9nSA+IGt5dXVcIDsKK+a9lyA+IHNodXVcIDsKK+a8uyA+IHJ5b3VcIDsKK+a8syA+IHNob3VcIDsKK+a8mCA+IHNoaW5cIDsKK+a8jSA+IGtha3VcIDsKK+a8iSA+IHJva3VcIDsKK+a7siA+IHNoaW5cIDsKK+a7riA+IGh5dXVcIDsKK+a7qyA+IHNodXVcIDsKK+a7nSA+IHRha2lcIDsKK+a7kyA+IGthc3VcIDsKK+a7jCA+IGRla2lcIDsKK+a6vSA+IGpva3VcIDsKK+a6sSA+IHNoaW5cIDsKK+a6jSA+IHNoaW5cIDsKK+a5qyA+IHNob3VcIDsKK+a5qCA+IGtla2lcIDsKK+a5mCA+IHNob3VcIDsKK+a5kiA+IHNodXVcIDsKK+a4uiA+IGJ5b3VcIDsKK+a4niA+IHNodXVcIDsKK+a4lyA+IHNoaW5cIDsKK+a4jCA+IHJva3VcIDsKK+a3vCA+IGJ5b3VcIDsKK+a3tCA+IG90c3VcIDsKK+a3syA+IHNodW5cIDsKK+a3qSA+IHJ5b3VcIDsKK+a3pSA+IHJva3VcIDsKK+a3oiA+IHlva3VcIDsKK+a3niA+IHNob3VcIDsKK+a3lSA+IHJpa3VcIDsKK+a3jCA+IHNob3VcIDsKK+a3hSA+IHNla2lcIDsKK+a2vyA+IHRva3VcIDsKK+a2iSA+IHNob3VcIDsKK+a1uSA+IHNob3VcIDsKK+a1niA+IHNha3VcIDsKK+a1lyA+IGt5dXVcIDsKK+a0tiA+IGt5b3VcIDsKK+a0tSA+IHNodW5cIDsKK+a0piA+IGJha3VcIDsKK+a0nyA+IGhhbmFcIDsKK+a0kyA+IHNha3VcIDsKK+a0kSA+IGh1a3VcIDsKK+aztSA+IHJ5dXVcIDsKK+azpyA+IGV0c3VcIDsKK+azhiA+IGl0c3VcIDsKK+azhSA+IHNodXVcIDsKK+aysCA+IHRha3VcIDsKK+aykCA+IGJva3VcIDsKK+ayiSA+IGNoaW5cIDsKK+aygyA+IHlva3VcIDsKK+aygSA+IHNoaW5cIDsKK+axuSA+IGt5b3VcIDsKK+axqSA+IGl0c3VcIDsKK+axqCA+IGJla2lcIDsKK+axmyA+IHNoaW5cIDsKK+axkCA+IHNla2lcIDsKK+axiyA+IHNha3VcIDsKK+awuyA+IHJva3VcIDsKK+awtiA+IHNob3VcIDsKK+awjiA+IGNob3VcIDsKK+awhSA+IHNob3VcIDsKK+avsSA+IGtpa3VcIDsKK+avoyA+IGJva3VcIDsKK+avhCA+IGtla2lcIDsKK+avgyA+IGtha3VcIDsKK+auviA+IHNodW5cIDsKK+auvCA+IGtha3VcIDsKK+ausCA+IHRva3VcIDsKK+aurSA+IGt5b3VcIDsKK+aupCA+IHNob3VcIDsKK+auoCA+IHNodXVcIDsKK+aunyA+IG90c3VcIDsKK+aukSA+IGt5b3VcIDsKK+aujSA+IGh5b3VcIDsKK+attSA+IHNha3VcIDsKK+atsCA+IHNodXVcIDsKK+atmSA+IGt5dXVcIDsKK+atkiA+IHRla2lcIDsKK+atiiA+IGt5b3VcIDsKK+astiA+IHNha3VcIDsKK+asqyA+IGtla2lcIDsKK+ashyA+IHNob3VcIDsKK+asgiA+IGhha3VcIDsKK+arrCA+IHNoaW5cIDsKK+arqiA+IHJla2lcIDsKK+arnyA+IHJla2lcIDsKK+arnSA+IHRva3VcIDsKK+aqtCA+IGtha3VcIDsKK+aqqiA+IHJla2lcIDsKK+aqnSA+IHNodXVcIDsKK+aqlyA+IGhha3VcIDsKK+aqjSA+IHlva3VcIDsKK+aqhCA+IGdla2lcIDsKK+apvyA+IGt5b3VcIDsKK+apuCA+IHNob3VcIDsKK+apsyA+IG51ZGVcIDsKK+apsiA+IHp1c2FcIDsKK+apoSA+IHNob3VcIDsKK+apkCA+IHRha3VcIDsKK+apiiA+IHJ5b3VcIDsKK+aoviA+IGV0c3VcIDsKK+aovSA+IHRhcnVcIDsKK+aouiA+IGthYmFcIDsKK+aouCA+IGJva3VcIDsKK+aosCA+IHRhcmFcIDsKK+aooiA+IGJva3VcIDsKK+aonyA+IHNob3VcIDsKK+aomyA+IGt5dXVcIDsKK+aomiA+IHJva3VcIDsKK+aolSA+IHNva3VcIDsKK+aokSA+IHJ5b3VcIDsKK+aogCA+IHRla2lcIDsKK+ansyA+IHNob3VcIDsKK+ansiA+IGtva3VcIDsKK+anriA+IHNoaW5cIDsKK+anqCA+IGtha3VcIDsKK+anoiA+IHNodXVcIDsKK+anlyA+IGt5b3VcIDsKK+anliA+IHRha3VcIDsKK+anjSA+IHlhcmlcIDsKK+aniiA+IHNha3VcIDsKK+anhSA+IGtha3VcIDsKK+amuiA+IHNob3VcIDsKK+amtyA+IGtha3VcIDsKK+amtCA+IHJ5dXVcIDsKK+amsiA+IG90c3VcIDsKK+amqyA+IHNodW5cIDsKK+ampyA+IGtheWFcIDsKK+amliA+IGtva3VcIDsKK+amkiA+IGRva3VcIDsKK+amhSA+IG90c3VcIDsKK+amgSA+IG11cm9cIDsKK+aluCA+IHNodXVcIDsKK+alqyA+IHNodXVcIDsKK+aloiA+IHNodXVcIDsKK+aliSA+IGpha3VcIDsKK+alhSA+IGh5a3VcIDsKK+akqCA+IHRhZnVcIDsKK+akpSA+IG5hZ2lcIDsKK+akmSA+IHN1Z2lcIDsKK+akkyA+IHRha3VcIDsKK+akkiA+IHNob3VcIDsKK+akiyA+IHJ5b3VcIDsKK+akiCA+IGtpa3VcIDsKK+akhiA+IGNodXVcIDsKK+akgSA+IGtha3VcIDsKK+ajvSA+IGNoaW5cIDsKK+ajqyA+IHlva3VcIDsKK+ajnyA+IG11bmVcIDsKK+ajmCA+IHRvZ2VcIDsKK+ajjyA+IHRva3VcIDsKK+airiA+IGtpa3VcIDsKK+aipSA+IHNob3VcIDsKK+aioyA+IHNoaW5cIDsKK+ainCA+IGt5b3VcIDsKK+aijyA+IGtva3VcIDsKK+aigiA+IGt5dXVcIDsKK+aigSA+IGhhcmlcIDsKK+ahuiA+IHJ5dXVcIDsKK+ahtyA+IGtha3VcIDsKK+ahnSA+IG1hc3VcIDsKK+ahmCA+IHRzdWlcIDsKK+ahlSA+IGt5dXVcIDsKK+ahkSA+IGt1d2FcIDsKK+ahjCA+IHRha3VcIDsKK+ahhiA+IGt5b3VcIDsKK+agvyA+IGZ1a3VcIDsKK+aguCA+IGtha3VcIDsKK+agsSA+IGt5b3VcIDsKK+agqiA+IGthYnVcIDsKK+agoiA+IGhha3VcIDsKK+aghSA+IHNha3VcIDsKK+aggiA+IHRvZ2FcIDsKK+afviA+IGt5dXVcIDsKK+afqSA+IGt5dXVcIDsKK+afniA+IHNha3VcIDsKK+afnSA+IHRha3VcIDsKK+aflyA+IHNob3VcIDsKK+afjyA+IGhha3VcIDsKK+aetyA+IGthc2VcIDsKK+aetSA+IGt5b3VcIDsKK+aeqSA+IHNob3VcIDsKK+aeoSA+IG1hc3VcIDsKK+aeoCA+IHdha3VcIDsKK+aekCA+IHNla2lcIDsKK+aegSA+IGt5b3VcIDsKK+aduyA+IGNodXVcIDsKK+adtiA+IGNodW5cIDsKK+adqiA+IGJ5b3VcIDsKK+adpiA+IHN1Z2lcIDsKK+adoyA+IHNvbWFcIDsKK+adoiA+IG1va3VcIDsKK+admSA+IHlva3VcIDsKK+adlCA+IHRha3VcIDsKK+acvSA+IGt5dXVcIDsKK+aclSA+IGNoaW5cIDsKK+aclCA+IHNha3VcIDsKK+ackyA+IGNob3VcIDsKK+ackiA+IG5pa3VcIDsKK+ackCA+IGt5b3VcIDsKK+abuyA+IHNob3VcIDsKK+absCA+IGV0c3VcIDsKK+abnyA+IHNoaW5cIDsKK+abjyA+IGt5b3VcIDsKK+abjCA+IHNob3VcIDsKK+abiSA+IGd5b3VcIDsKK+abhiA+IHJla2lcIDsKK+aauCA+IHJ5b3VcIDsKK+aasiA+IHNob3VcIDsKK+aamSA+IHNodW5cIDsKK+aajSA+IGV0c3VcIDsKK+aZvyA+IHNob3VcIDsKK+aZviA+IHJ5b3VcIDsKK+aZsyA+IHNla2lcIDsKK+aZsCA+IHNla2lcIDsKK+aZqyA+IHRha3VcIDsKK+aZqCA+IHNoaW5cIDsKK+aZmSA+IHNodW5cIDsKK+aZkSA+IGt5b3VcIDsKK+aZjCA+IHNob3VcIDsKK+aZiyA+IHNoaW5cIDsKK+aZiSA+IHNoaW5cIDsKK+aZgSA+IGNob3VcIDsKK+aZgCA+IGNob3VcIDsKK+aYtiA+IGNob3VcIDsKK+aYriA+IHNob3VcIDsKK+aYoyA+IHNoaW5cIDsKK+aYjCA+IHNob3VcIDsKK+aYgyA+IHNva3VcIDsKK+aXviA+IHNodW5cIDsKK+aXpyA+IGt5dXVcIDsKK+aXkiA+IHJ5dXVcIDsKK+aXkCA+IGNob3VcIDsKK+aXiCA+IHJ5dXVcIDsKK+aWsiA+IHRha3VcIDsKK+aWriA+IHNha3VcIDsKK+aWoSA+IGF0c3VcIDsKK+aWoCA+IGtha3VcIDsKK+aWnyA+IHNoaW5cIDsKK+aWmyA+IGtva3VcIDsKK+aWmCA+IHNob3VcIDsKK+aWiCA+IGdha3VcIDsKK+aVvyA+IGt5b3VcIDsKK+aVvSA+IGt5b3VcIDsKK+aVqyA+IHNla3VcIDsKK+aVniA+IHNob3VcIDsKK+aVkiA+IGNoaW5cIDsKK+aVkCA+IHNoaW5cIDsKK+aVjiA+IGt5b3VcIDsKK+aViyA+IGtha3VcIDsKK+aVhyA+IHNha3VcIDsKK+aUtSA+IGJva3VcIDsKK+aUtCA+IGhva3VcIDsKK+aUqiA+IGtha3VcIDsKK+aUiiA+IGZ1a2lcIDsKK+aUiSA+IGtha3VcIDsKK+aTvyA+IHRla2lcIDsKK+aTtCA+IGtha3VcIDsKK+aTsiA+IHRla2lcIDsKK+aToiA+IHRla2lcIDsKK+aTmCA+IGhha3VcIDsKK+aTlyA+IGhla2lcIDsKK+aTkSA+IHNob3VcIDsKK+aTjCA+IHNha3VcIDsKK+aTiiA+IGdla2lcIDsKK+aTiSA+IHNha3VcIDsKK+aThyA+IHRha3VcIDsKK+aSuSA+IGtha3VcIDsKK+aSrCA+IGt5b3VcIDsKK+aSqSA+IHJ5b3VcIDsKK+aSqCA+IHNob3VcIDsKK+aSnyA+IGt5b3VcIDsKK+aSkSA+IGNob3VcIDsKK+aSkCA+IGNob3VcIDsKK+aRvSA+IGh5b3VcIDsKK+aRrSA+IHNla2lcIDsKK+aRnSA+IHJva3VcIDsKK+aRmCA+IHRla2lcIDsKK+aRkSA+IGtha3VcIDsKK+aRjyA+IHNob3VcIDsKK+aRjiA+IGt5dXVcIDsKK+aQvyA+IGtha3VcIDsKK+aQviA+IHNha3VcIDsKK+aQtiA+IHNob3VcIDsKK+aQpiA+IGpha3VcIDsKK+aQoiA+IHNoaW5cIDsKK+aQoCA+IHNha3VcIDsKK+aQjyA+IGhha3VcIDsKK+aQiiA+IHNodXVcIDsKK+aQiSA+IGtha3VcIDsKK+aPqiA+IHNodXVcIDsKK+aPlSA+IGNoaW5cIDsKK+aOtSA+IGhhYmFcIDsKK+aOrCA+IGtpa3VcIDsKK+aOpiA+IHRla2lcIDsKK+aOpCA+IGh5b3VcIDsKK+aOmiA+IHJ5b3VcIDsKK+aOlSA+IHJ5b3VcIDsKK+aNtyA+IHNob3VcIDsKK+aNlCA+IGtha3VcIDsKK+aNkiA+IHNob3VcIDsKK+aNiSA+IHNva3VcIDsKK+aNhCA+IGt5dXVcIDsKK+aNgSA+IGtha3VcIDsKK+aMnyA+IGt5b3VcIDsKK+aMliA+IGF0c3VcIDsKK+aMkSA+IGNob3VcIDsKK+aMjCA+IGtha3VcIDsKK+aMiyA+IHNoaW5cIDsKK+aLsiA+IGt5b3VcIDsKK+aLsSA+IGt5b3VcIDsKK+aLqyA+IHNodXVcIDsKK+aLoSA+IGtha3VcIDsKK+aLkyA+IHRha3VcIDsKK+aLhiA+IHRha3VcIDsKK+aKuyA+IHNoaW5cIDsKK+aKniA+IHRha3VcIDsKK+aKjSA+IHNob3VcIDsKK+aKhCA+IHNob3VcIDsKK+aKgiA+IGt5b3VcIDsKK+aJqCA+IHNhdGVcIDsKK+aJmiA+IGNob3VcIDsKK+aJmCA+IHRha3VcIDsKK+aJkSA+IGhva3VcIDsKK+aJkCA+IHJva3VcIDsKK+aJhCA+IHNob3VcIDsKK+aIsyA+IHRha3VcIDsKK+aIriA+IHJpa3VcIDsKK+aIqyA+IHlva3VcIDsKK+aIoiA+IHNodXVcIDsKK+aInSA+IHpva3VcIDsKK+aIlSA+IHNob3VcIDsKK+aIiSA+IGV0c3VcIDsKK+aIiCA+IGhva29cIDsKK+aHviA+IHNob3VcIDsKK+aHsiA+IGNob3VcIDsKK+aHnyA+IHRzdWlcIDsKK+aHjyA+IHNodW5cIDsKK+aGrSA+IHJ5b3VcIDsKK+aGjSA+IGt5b3VcIDsKK+aGgCA+IHJ5b3VcIDsKK+aFvyA+IGh5b3VcIDsKK+aFvCA+IHNla2lcIDsKK+aFtCA+IHNob3VcIDsKK+aFryA+IHNob3VcIDsKK+aFqyA+IHNob3VcIDsKK+aFniA+IHNob3VcIDsKK+aFnSA+IHRva3VcIDsKK+aFkyA+IGh5b3VcIDsKK+aFjiA+IHNoaW5cIDsKK+aEvSA+IGhha3VcIDsKK+aEvCA+IHNoaW5cIDsKK+aEtiA+IGt5b3VcIDsKK+aEtSA+IGRla2lcIDsKK+aEqCA+IGtha3VcIDsKK+aEnCA+IGt5b3VcIDsKK+aEmSA+IGtha3VcIDsKK+aEliA+IHNoaW5cIDsKK+aEgSA+IHNodXVcIDsKK+aEgCA+IHNob3VcIDsKK+aDuyA+IHNva3VcIDsKK+aDtyA+IHNodW5cIDsKK+aDtSA+IGNob3VcIDsKK+aDqiA+IHRva3VcIDsKK+aDnSA+IHNob3VcIDsKK+aDliA+IHRla2lcIDsKK+aDlSA+IHRla2lcIDsKK+aDiiA+IHJ5b3VcIDsKK+aDhiA+IGNodXVcIDsKK+aDhCA+IGRla2lcIDsKK+aCtSA+IGNob3VcIDsKK+aCsyA+IHRva3VcIDsKK+aCpiA+IGV0c3VcIDsKK+aCpSA+IHlva3VcIDsKK+aCoiA+IHJ5b3VcIDsKK+aCmiA+IHNob3VcIDsKK+aChSA+IGV0c3VcIDsKK+aBtyA+IGt5dXVcIDsKK+aBsSA+IGV0c3VcIDsKK+aBqiA+IGtha3VcIDsKK+aBpyA+IGppa3VcIDsKK+aBnyA+IGt5b3VcIDsKK+aBlCA+IGt5b3VcIDsKK+aBjCA+IGNob3VcIDsKK+aBiiA+IGt5b3VcIDsKK+aBhyA+IGt5b3VcIDsKK+aAsyA+IGt5b3VcIDsKK+aAlyA+IGNob3VcIDsKK+aAjSA+IHNha3VcIDsKK+aAiiA+IGNob3VcIDsKK+W/uCA+IGppa3VcIDsKK+W/tyA+IGt5b3VcIDsKK+W/sSA+IHNoaW5cIDsKK+W/qiA+IHNob3VcIDsKK+W/oSA+IGNodXVcIDsKK+W/oCA+IGNodXVcIDsKK+W/kiA+IHRva3VcIDsKK+W/kSA+IHRva3VcIDsKK+W/hyA+IHJva3VcIDsKK+W+vCA+IGt5b3VcIDsKK+W+uCA+IHNob3VcIDsKK+W+tyA+IHRva3VcIDsKK+W+tSA+IGNob3VcIDsKK+W+sSA+IGh5b3VcIDsKK+W+oiA+IHNob3VcIDsKK+W+nCA+IHNob3VcIDsKK+W+hyA+IHNodW5cIDsKK+W9uCA+IHNob3VcIDsKK+W9tiA+IGtpaHVcIDsKK+W9syA+IHRla2lcIDsKK+W9sCA+IHNob3VcIDsKK+W9qiA+IGh5b3VcIDsKK+W9nyA+IGtha3VcIDsKK+W9lCA+IHJva3VcIDsKK+W9iiA+IGt5b3VcIDsKK+W9hSA+IG5hZ2lcIDsKK+W8uiA+IGt5b3VcIDsKK+W8tiA+IGd5YXVcIDsKK+W8qyA+IHNoaW5cIDsKK+W8nCA+IGt5b3VcIDsKK+W8lyA+IGRvcnVcIDsKK+W8kyA+IHl1bWlcIDsKK+W8jCA+IGl0c3VcIDsKK+W8iyA+IHlva3VcIDsKK+W7viA+IGt5b3VcIDsKK+W7uCA+IHRla2lcIDsKK+W7syA+IGNob3VcIDsKK+W7sCA+IGNob3VcIDsKK+W7qyA+IHJ5b3VcIDsKK+W7pyA+IHNoYXVcIDsKK+W7piA+IGhla2lcIDsKK+W7oCA+IHNob3VcIDsKK+W7nyA+IGJ5b3VcIDsKK+W7mSA+IHlva3VcIDsKK+W7mCA+IHJva3VcIDsKK+W7liA+IHJ5b3VcIDsKK+W7iyA+IHNodXVcIDsKK+W6vyA+IGJ5b3VcIDsKK+W6tCA+IHNla2lcIDsKK+W6sSA+IGNob3VcIDsKK+W6pSA+IGt5dXVcIDsKK+W6oCA+IHNob3VcIDsKK+W5rCA+IGNodXVcIDsKK+W5piA+IGJla2lcIDsKK+W5niA+IGhva3VcIDsKK+W5myA+IHNob3VcIDsKK+W5mSA+IGJha3VcIDsKK+W5mCA+IHNha3VcIDsKK+W5lyA+IGtha3VcIDsKK+W5liA+IGh5b3VcIDsKK+W5kyA+IHNoaW5cIDsKK+W5jiA+IGJla2lcIDsKK+W5giA+IGJla2lcIDsKK+W4pCA+IGdleW9cIDsKK+W4oiA+IGthaHVcIDsKK+W4myA+IGhha3VcIDsKK+W3qSA+IGt5b3VcIDsKK+W3pCA+IHJlaHVcIDsKK+W3kCA+IGNob3VcIDsKK+W2vSA+IGdha3VcIDsKK+W2ryA+IHNoaXVcIDsKK+W2qyA+IGd5b3VcIDsKK+W2qiA+IGd5b3VcIDsKK+W2qCA+IGtha3VcIDsKK+W2oiA+IGd5b3VcIDsKK+W2oCA+IGt5b3VcIDsKK+W2nCA+IHNoaW5cIDsKK+W2myA+IHJ5b3VcIDsKK+W2miA+IHJ5b3VcIDsKK+W2kiA+IHNob3VcIDsKK+W2kCA+IHJ5dXVcIDsKK+W2iCA+IHNoYXVcIDsKK+W2giA+IHNob3VcIDsKK+W1viA+IHNoaW5cIDsKK+W1uSA+IGt5b3VcIDsKK+W1tyA+IHNob3VcIDsKK+W1iiA+IHNob3VcIDsKK+W1gCA+IGNoaXVcIDsKK+W0vyA+IGdha3VcIDsKK+W0tyA+IHNoaXVcIDsKK+W0qCA+IHNlaHVcIDsKK+W0pyA+IHNodXVcIDsKK+W0miA+IHJ5b3VcIDsKK+W0iCA+IHNodXVcIDsKK+WzvSA+IGt5b3VcIDsKK+WzuyA+IHNodW5cIDsKK+WztyA+IHNoaW5cIDsKK+WzrSA+IHNob3VcIDsKK+WzqiA+IHlva3VcIDsKK+WzoyA+IGd5b3VcIDsKK+WzoSA+IGt5b3VcIDsKK+WziyA+IHNodW5cIDsKK+WziSA+IGdha3VcIDsKK+WziCA+IHJha3VcIDsKK+WzhiA+IGthaHVcIDsKK+WzhSA+IGt1cmFcIDsKK+WzgCA+IHNodXVcIDsKK+WyvCA+IHl1cmlcIDsKK+WytiA+IGhha3VcIDsKK+WysyA+IHRha2VcIDsKK+WyqyA+IHNodXVcIDsKK+WypiA+IHJ5dXVcIDsKK+WynSA+IHNha3VcIDsKK+WykSA+IHNoaW5cIDsKK+WyjCA+IGt5dXVcIDsKK+WxviA+IHNoaW5cIDsKK+WxtiA+IG5hdGFcIDsKK+WxsCA+IGdla2lcIDsKK+WxqiA+IHJ5b3VcIDsKK+WxkCA+IGdla2lcIDsKK+WxjCA+IGNob3VcIDsKK+WwvyA+IG55b3VcIDsKK+WwsCA+IHNob3VcIDsKK+WwrSA+IGd5b3VcIDsKK+WwpiA+IHJ5b3VcIDsKK+WwpSA+IHJ5b3VcIDsKK+WwniA+IHJ5b3VcIDsKK+WwmSA+IHNob3VcIDsKK+WwhyA+IHNob3VcIDsKK+WwhSA+IGtva3VcIDsKK+WvtCA+IHNoaW5cIDsKK+WvryA+IHNodW5cIDsKK+WvriA+IHJ5b3VcIDsKK+WvniA+IGJha3VcIDsKK+WvliA+IHNoaW5cIDsKK+WvkSA+IHNoaW5cIDsKK+WviSA+IGtha3VcIDsKK+WvhSA+IHRvcmFcIDsKK+WuuCA+IHNoaW5cIDsKK+WutyA+IHNoaW5cIDsKK+WuqyA+IGt5dXVcIDsKK+WuqCA+IHRld2FcIDsKK+WumSA+IGNodXVcIDsKK+WukiA+IGNodW5cIDsKK+WujSA+IG5pa3VcIDsKK+WuhiA+IGt5b3VcIDsKK+WtniA+IHNoaW5cIDsKK+WthyA+IHNhd2FcIDsKK+WsvCA+IHJpd2FcIDsKK+WsuCA+IHNoaW5cIDsKK+WstiA+IGtha2FcIDsKK+WspyA+IHNoaW5cIDsKK+WspiA+IGNoaXVcIDsKK+WspSA+IGNob3VcIDsKK+WsmSA+IHNob3VcIDsKK+WshSA+IGt1d2FcIDsKK+WrvyA+IGtha3VcIDsKK+WrniA+IHNob3VcIDsKK+WrnCA+IHNoYXVcIDsKK+WrliA+IGh5b3VcIDsKK+WrgCA+IHNoaW5cIDsKK+WqtyA+IGpva3VcIDsKK+WqsyA+IHNla2lcIDsKK+WqsCA+IHNoaXVcIDsKK+WqnSA+IHNodXVcIDsKK+WqmyA+IGhpbWVcIDsKK+WqiyA+IHNodW5cIDsKK+WqgyA+IGp5dXVcIDsKK+WpsyA+IGtha3VcIDsKK+WppCA+IHNodXVcIDsKK+WplSA+IHNob3VcIDsKK+WpiiA+IGh5b3VcIDsKK+WpiCA+IHJ5b3VcIDsKK+WphSA+IGtpa3VcIDsKK+WovCA+IHNob3VcIDsKK+WotyA+IHRzdWlcIDsKK+WoliA+IHNha3VcIDsKK+WolSA+IHNha3VcIDsKK+WogCA+IHNodXVcIDsKK+WnuiA+IHNoaW5cIDsKK+WnoCA+IHNob3VcIDsKK+WnnCA+IGt5b3VcIDsKK+WmvSA+IHNoaW5cIDsKK+WmsSA+IHNob3VcIDsKK+WmryA+IGNodXVcIDsKK+WmlSA+IGNodXVcIDsKK+WmkCA+IHNob3VcIDsKK+WlrSA+IHNla2lcIDsKK+WlrCA+IHNob3VcIDsKK+WlqCA+IHNob3VcIDsKK+WlniA+IHNodW5cIDsKK+WlnSA+IGNob3VcIDsKK+WkjCA+IHJ5b3VcIDsKK+WkiyA+IHNodW5cIDsKK+WjvyA+IHNodW5cIDsKK+WjuSA+IGljaGlcIDsKK+WjsyA+IGtha3VcIDsKK+WjoiA+IHJla2lcIDsKK+WjlyA+IG1hbWFcIDsKK+WjkSA+IGdha3VcIDsKK+WjhiA+IGtha3VcIDsKK+WivCA+IGtla2lcIDsKK+WiuyA+IHNob3VcIDsKK+WiuSA+IG1hbWFcIDsKK+WiqyA+IHNodW5cIDsKK+WioyA+IGhha3VcIDsKK+WinCA+IHRzdWlcIDsKK+WikiA+IHNob3VcIDsKK+WikSA+IHRla2lcIDsKK+WijyA+IHNob3VcIDsKK+WiiyA+IHNoaW5cIDsKK+WihyA+IHNob3VcIDsKK+WihCA+IHNva3VcIDsKK+WigiA+IGh5b3VcIDsKK+WhviA+IGp1a3VcIDsKK+WhuyA+IGJha3VcIDsKK+WhtiA+IGtva3VcIDsKK+WhqCA+IGt5b3VcIDsKK+WhpSA+IGtha3VcIDsKK+WhmSA+IGtha3VcIDsKK+WhliA+IHNob3VcIDsKK+WhkyA+IGJla2lcIDsKK+WhjSA+IHNob3VcIDsKK+WhiSA+IHNla2lcIDsKK+WguyA+IHNoaW5cIDsKK+WguSA+IHNob3VcIDsKK+WgryA+IGd5b3VcIDsKK+WgriA+IGdha3VcIDsKK+WgmCA+IHNob3VcIDsKK+WfuyA+IHNodW5cIDsKK+WfqyA+IHNob3VcIDsKK+WfliA+IGdvbWlcIDsKK+WfkCA+IHNoaW5cIDsKK+WfiCA+IHNodW5cIDsKK+WfhiA+IGtha3VcIDsKK+WfgSA+IHNoaW5cIDsKK+WesyA+IGdha2VcIDsKK+WerCA+IGt5b3VcIDsKK+WemCA+IGh1a3VcIDsKK+WdvCA+IHRha3VcIDsKK+WdtiA+IGJva3VcIDsKK+WdtSA+IGt5b3VcIDsKK+WdtCA+IHJpa3VcIDsKK+WdpyA+IHNla2lcIDsKK+WcviA+IGd5dXVcIDsKK+WcuCA+IHlhbWFcIDsKK+WcsyA+IHNoaXVcIDsKK+WcpSA+IHJva3VcIDsKK+WcpCA+IGhha3VcIDsKK+WcoCA+IGF0c3VcIDsKK+WcgCA+IGtva3VcIDsKK+WbuyA+IGtva3VcIDsKK+WbtiA+IGtva3VcIDsKK+WbryA+IGtva3VcIDsKK+WboiA+IHNodXVcIDsKK+WbnyA+IHNoaW5cIDsKK+WbmiA+IHNodXVcIDsKK+WasyA+IGtva3VcIDsKK+WaqyA+IHNoaW5cIDsKK+WaqSA+IGhha3VcIDsKK+WapiA+IHJla2lcIDsKK+WaoCA+IHJ5dXVcIDsKK+WanSA+IGtha3VcIDsKK+WalyA+IGhha3VcIDsKK+WakCA+IHNob3VcIDsKK+WajSA+IHNoaW5cIDsKK+WaiyA+IGNodXVcIDsKK+WahyA+IGtha3VcIDsKK+WahCA+IGtha3VcIDsKK+WagSA+IHRla2lcIDsKK+WZrSA+IGt5b3VcIDsKK+WZqSA+IGtha3VcIDsKK+WZpiA+IGV0c3VcIDsKK+WZlyA+IGJva3VcIDsKK+WZjyA+IGt5dXVcIDsKK+WZjiA+IGl0c3VcIDsKK+WZiiA+IGl0c3VcIDsKK+WYvyA+IGJva3VcIDsKK+WYvCA+IGt5dXVcIDsKK+WYuiA+IGt5b3VcIDsKK+WYuCA+IHNhem9cIDsKK+WYryA+IHNob3VcIDsKK+WYqCA+IHNob3VcIDsKK+WYniA+IHJva3VcIDsKK+WYmiA+IHRva3VcIDsKK+WYliA+IHNha3VcIDsKK+WYkyA+IGtha3VcIDsKK+WYgiA+IGt5b3VcIDsKK+WYgSA+IHNhaHVcIDsKK+WYgCA+IHNha3VcIDsKK+WXvSA+IHVnYWlcIDsKK+WXvCA+IGJha3VcIDsKK+WXnSA+IGtha3VcIDsKK+WXlyA+IGF0c3VcIDsKK+WXlCA+IHNoaW5cIDsKK+WXkSA+IGthaHVcIDsKK+WXjSA+IHNha3VcIDsKK+WXiyA+IGt5b3VcIDsKK+WXhiA+IHNob3VcIDsKK+WXgCA+IGtha3VcIDsKK+WWsiA+IHlha3VcIDsKK+WWrCA+IGt5b3VcIDsKK+WWqCA+IHJ5b3VcIDsKK+WWoiA+IHRlaHVcIDsKK+WWniA+IHNva3VcIDsKK+WWgSA+IGd5b3VcIDsKK+WWgCA+IGtha3VcIDsKK+WVviA+IHNodXVcIDsKK+WVryA+IGtha3VcIDsKK+WVpiA+IHJhaHVcIDsKK+WVoiA+IHJ5b3VcIDsKK+WViyA+IGt5b3VcIDsKK+WVhyA+IHRla2lcIDsKK+WVhSA+IHRha3VcIDsKK+WVhCA+IHRha3VcIDsKK+WVgyA+IHNodXVcIDsKK+WUvSA+IHNla2lcIDsKK+WUvCA+IHNhaHVcIDsKK+WUtCA+IGt5b3VcIDsKK+WUriA+IHNodXVcIDsKK+WUpyA+IHNva3VcIDsKK+WUoSA+IHJ5b3VcIDsKK+WUmiA+IHNoaW5cIDsKK+WUmSA+IHRla2lcIDsKK+WUkiA+IHNodXVcIDsKK+WUiiA+IGt5b3VcIDsKK+WUgyA+IGtva3VcIDsKK+WTqCA+IHNob3VcIDsKK+WTjSA+IGt5b3VcIDsKK+WTgiA+IHNoaW5cIDsKK+WSuSA+IGF0c3VcIDsKK+WStiA+IGt1dWlcIDsKK+WSryA+IGtha3VcIDsKK+WSoiA+IGdha3VcIDsKK+WSoCA+IHNodXVcIDsKK+WSnyA+IGtha3VcIDsKK+WSiyA+IHNha3VcIDsKK+WRuyA+IHNoaW5cIDsKK+WRuiA+IGt5b3VcIDsKK+WRuSA+IGl0c3VcIDsKK+WRqyA+IHRlaHVcIDsKK+WRjyA+IHNob3VcIDsKK+WRjiA+IHNla2lcIDsKK+WRjCA+IGt5b3VcIDsKK+WRhCA+IGtva3VcIDsKK+WQvyA+IGtva3VcIDsKK+WQtSA+IGJ5b3VcIDsKK+WQsiA+IHNoaW5cIDsKK+WQoyA+IHNoaW5cIDsKK+WQoiA+IHNoaW5cIDsKK+WQnCA+IGNodXVcIDsKK+WPvCA+IGNob3VcIDsKK+WPuyA+IHJva3VcIDsKK+WPtiA+IGt5b3VcIDsKK+WPoCA+IGNob3VcIDsKK+WPkiA+IGpha3VcIDsKK+WPiSA+IG1hdGFcIDsKK+WOsCA+IHNob3VcIDsKK+WOryA+IHJla2lcIDsKK+WOpCA+IHJla2lcIDsKK+WOnSA+IHNha3VcIDsKK+WOkiA+IGthaHVcIDsKK+WOiyA+IGF0c3VcIDsKK+WOhyA+IHRha3VcIDsKK+WNviA+IGdha3VcIDsKK+WNvSA+IHNva3VcIDsKK+WNsiA+IHNob3VcIDsKK+WNrSA+IGt5b3VcIDsKK+WNoSA+IHNhaHVcIDsKK+WNnCA+IGJva3VcIDsKK+WNmSA+IHNob3VcIDsKK+WNjCA+IHNodXVcIDsKK+WNgiA+IHNoaW5cIDsKK+WMvyA+IHRva3VcIDsKK+WMtSA+IHRva3VcIDsKK+WMqSA+IGt5b3VcIDsKK+WMpyA+IGt5b3VcIDsKK+WMoyA+IGhha29cIDsKK+WMoSA+IGt5b3VcIDsKK+WMniA+IHNob3VcIDsKK+WMmyA+IGt5dXVcIDsKK+WMkyA+IGt5b3VcIDsKK+WMkSA+IGt5dXVcIDsKK+WMkCA+IGhva3VcIDsKK+WMiiA+IGtpa3VcIDsKK+WMiSA+IGh5b3VcIDsKK+WMiCA+IGt5b3VcIDsKK+WLvCA+IGt5dXVcIDsKK+WLsCA+IGt5b3VcIDsKK+WLpSA+IGt5b3VcIDsKK+WLoyA+IHNla2lcIDsKK+WLoCA+IHJpa3VcIDsKK+WLkiA+IHJva3VcIDsKK+WLgCA+IGtva3VcIDsKK+WKuyA+IGt5b3VcIDsKK+WKsCA+IGJha3VcIDsKK+WKriA+IGl0c3VcIDsKK+WKrSA+IHNob3VcIDsKK+WKpiA+IGt5b3VcIDsKK+WKnCA+IGF0c3VcIDsKK+WKkCA+IGtha3VcIDsKK+WKiyA+IHN5b3VcIDsKK+WKiSA+IHJ5dXVcIDsKK+WKiCA+IGhla2lcIDsKK+WKhSA+IHRha3VcIDsKK+WKgSA+IHN5b3VcIDsKK+WJuSA+IHJpa3VcIDsKK+WJryA+IGZ1a3VcIDsKK+WJqyA+IHRha3VcIDsKK+WJqCA+IGtha3VcIDsKK+WJoiA+IHRva3VcIDsKK+WJnSA+IGhha3VcIDsKK+WJlCA+IHRla2lcIDsKK+WJkiA+IHNha3VcIDsKK+WJiyA+IGtva3VcIDsKK+WIvCA+IGt5b3VcIDsKK+WIpiA+IGt5b3VcIDsKK+WInyA+IGNob3VcIDsKK+WImCA+IHJ5dXVcIDsKK+WHuCA+IGRla29cIDsKK+WHtiA+IGt5b3VcIDsKK+WHtCA+IGh5b3VcIDsKK+WHqiA+IG5hZ2lcIDsKK+WHpyA+IHRha29cIDsKK+WHmSA+IHRha3VcIDsKK+WHiyA+IGNob3VcIDsKK+WHiSA+IHJ5b3VcIDsKK+WHhyA+IHNob3VcIDsKK+WGviA+IGt5b3VcIDsKK+WGvCA+IHNob3VcIDsKK+WGtSA+IGt5b3VcIDsKK+WGsiA+IGNodXVcIDsKK+WGsCA+IGh5b3VcIDsKK+WGqyA+IGh5b3VcIDsKK+WGqiA+IGJla2lcIDsKK+WGoiA+IGNob3VcIDsKK+WGliA+IGJla2lcIDsKK+WGkSA+IGNodXVcIDsKK+WFuCA+IG5vcmlcIDsKK+WFoiA+IGt5b3VcIDsKK+WFnyA+IHNoaW5cIDsKK+WFkyA+IHNoaW5cIDsKK+WFjyA+IGNob3VcIDsKK+WFiyA+IGtva3VcIDsKK+WFhyA+IGt5b3VcIDsKK+WFhiA+IGNob3VcIDsKK+WFgiA+IHNoaW5cIDsKK+WEtSA+IHNodXVcIDsKK+WEtCA+IHNob3VcIDsKK+WEriA+IHJla2lcIDsKK+WErSA+IHNoaW5cIDsKK+WErCA+IHNoaW5cIDsKK+WEpiA+IGh5b3VcIDsKK+WEoCA+IHJ5b3VcIDsKK+WElCA+IGNodXVcIDsKK+WEgSA+IHNodW5cIDsKK+WDvSA+IHNodXVcIDsKK+WDuyA+IGhla2lcIDsKK+WDuiA+IHNob3VcIDsKK+WDtSA+IGt5b3VcIDsKK+WDsCA+IGhva3VcIDsKK+WDpSA+IGd5b3VcIDsKK+WDmCA+IHNob3VcIDsKK+WDhyA+IHJpa3VcIDsKK+WCvSA+IHNob3VcIDsKK+WCuSA+IGt5b3VcIDsKK+WCtiA+IHNva3VcIDsKK+WCsSA+IHNob3VcIDsKK+WClSA+IGtha3VcIDsKK+WBtyA+IGNodXVcIDsKK+WBsSA+IHNodW5cIDsKK+WBriA+IHNodXVcIDsKK+WBhiA+IHNodW5cIDsKK+WBhSA+IHNob3VcIDsKK+WBgSA+IHNob3VcIDsKK+WAsCA+IHJ5b3VcIDsKK+WAryA+IHNob3VcIDsKK+WArCA+IHRha3VcIDsKK+WAoiA+IHNob3VcIDsKK+WAoSA+IHNob3VcIDsKK+WAnCA+IHRla2lcIDsKK+WAmCA+IHNob3VcIDsKK+WAhiA+IHJ5b3VcIDsKK+WAgyA+IGt5dXVcIDsKK+WAgCA+IGNob3VcIDsKK+S/tSA+IGh5b3VcIDsKK+S/oyA+IG1hdGFcIDsKK+S/oiA+IHNodXVcIDsKK+S/oCA+IGt5b3VcIDsKK+S/jSA+IHJ5b3VcIDsKK+S/iyA+IGNodXVcIDsKK+S/iCA+IGtva3VcIDsKK+S/hyA+IGt5YXVcIDsKK+S/hSA+IGt5dXVcIDsKK+S+uiA+IHNoaW5cIDsKK+S+tiA+IHRvbW9cIDsKK+S+tCA+IGNodXVcIDsKK+S+siA+IHNoaW5cIDsKK+S+oCA+IGt5YW5cIDsKK+S+nCA+IGNodXVcIDsKK+S+miA+IHNodW5cIDsKK+S+giA+IHRha3VcIDsKK+S+gSA+IHNoaW5cIDsKK+S9viA+IGl0c3VcIDsKK+S9uyA+IGNob3VcIDsKK+S9sCA+IGhha3VcIDsKK+S9rCA+IHJ5b3VcIDsKK+S9qyA+IGtha3VcIDsKK+S9lyA+IHdhYmlcIDsKK+S9lCA+IGNoaW5cIDsKK+S9iyA+IHNob3VcIDsKK+S8tyA+IGNodXVcIDsKK+S8qSA+IHNoaW5cIDsKK+S8lCA+IHNoaW5cIDsKK+S8iyA+IGt5dXVcIDsKK+S8iCA+IHNoaW5cIDsKK+S8hCA+IGNob3VcIDsKK+S8gCA+IHNob3VcIDsKK+S7vCA+IGt5b3VcIDsKK+S7oiA+IGhha3VcIDsKK+S7lyA+IHRzdWVcIDsKK+S7iSA+IHNob3VcIDsKK+S7giA+IHJva3VcIDsKK+S6vCA+IHNodXVcIDsKK+S6syA+IGhha3VcIDsKK+S6ryA+IGt5b3VcIDsKK+S6riA+IHJ5b3VcIDsKK+S6qCA+IGt5b3VcIDsKK+S6gCA+IGthbWVcIDsKK+S5oyA+IGt5dXVcIDsKK+S5nyA+IG5hcmlcIDsKK+S5hyA+IHRha3VcIDsKK+S5hiA+IGt5dXVcIDsKK+S4tSA+IHNha3VcIDsKK+S4riA+IGtla2lcIDsKK+S4qSA+IGt5dXVcIDsKK+S4pCA+IHJ5b3VcIDsKK+S4oiA+IGNodXVcIDsKK+S4oCA+IGt5dXVcIDsKK+S4nyA+IGNodXVcIDsKK+S4niA+IHNob3VcIDsKK+S4kiA+IGNodXVcIDsKK+S4kSA+IHVzaGlcIDsKK+S4hCA+IHNob3VcIDsKK+OAhyA+IG1hcnVcIDsKK+i/tyA+IG1laVwgOwor5b+1ID4gbmVuXCA7Civnn60gPiB0YW5cIDsKK+W/qyA+IGthaVwgOwor6L+lID4ga2VpXCA7Civnn6UgPiBjaGlcIDsKK+efnCA+IGtpblwgOwor5b+ZID4gYm91XCA7Civlv5ggPiBib3VcIDsKK+i/lCA+IGhlblwgOwor6L+RID4ga2luXCA7Civov44gPiBnZWlcIDsKK+W/jSA+IG5pblwgOwor6L+FID4gamluXCA7Civovr8gPiB0ZW5cIDsKK+eeuyA+IHNlblwgOwor6L66ID4gaGVuXCA7CivovrIgPiBub3VcIDsKK+i+ryA+IGJlblwgOwor5b6qID4ganVuXCA7CivnnqAgPiBkb3VcIDsKK+W+niA+IGp1dVwgOwor5b6TID4ganV1XCA7CivlvoogPiBrYWlcIDsKK+W+hSA+IHRhaVwgOwor5b6EID4ga2VpXCA7CivlvakgPiBzYWlcIDsKK+edqCA+IGdlaVwgOwor552hID4gc3VpXCA7CivovZ8gPiBnb3VcIDsKK+W9kyA+IHRvdVwgOwor6L2JID4gdGVuXCA7CivlvYggPiBkYW5cIDsKK+ecqSA+IGdlblwgOwor55ygID4gbWluXCA7CivlvJ8gPiB0ZWlcIDsKK+W8myA+IHNoaVwgOwor5byYID4ga291XCA7CivovJUgPiBrZWlcIDsKK+ecjCA+IGtlblwgOwor55yLID4ga2FuXCA7CivovIkgPiBzYWlcIDsKK+W8hCA+IHJvdVwgOwor55yBID4gc2VpXCA7CivlvIEgPiBiZW5cIDsKK+i7vSA+IGtlaVwgOwor5bu7ID4ga2FpXCA7Civlu7ogPiBrZW5cIDsKK+ebuCA+IHNvdVwgOwor55ulID4ga2FuXCA7Civnm6MgPiBrYW5cIDsKK+i7oiA+IHRlblwgOwor5bujID4ga291XCA7Civlu6IgPiBoYWlcIDsKK+eboSA+IGppblwgOwor55ucID4gdG91XCA7Civnm5sgPiBzZWlcIDsKK+eblyA+IHRvdVwgOwor6LuNID4gZ3VuXCA7Civlu4ogPiByb3VcIDsKK+W7iSA+IHJlblwgOwor55uGID4gYm9uXCA7Civnm4MgPiBoYWlcIDsKK+W7gyA+IGhhaVwgOwor5bq4ID4geW91XCA7CivlurcgPiBrb3VcIDsKK+easCA+IGhvdVwgOwor5bqaID4ga291XCA7CivlupYgPiBob3VcIDsKK+i6kyA+IGNoaVwgOwor6LqHID4gY2hvXCA7CivnmocgPiBrb3VcIDsKK+W6hCA+IHNvdVwgOwor5bqDID4ga291XCA7Civlub4gPiBpa3VcIDsKK+W5vSA+IHl1dVwgOwor5bm8ID4geW91XCA7CivnmbsgPiB0b3VcIDsKK+W5siA+IGthblwgOwor55mMID4gZ2FuXCA7CivnmYcgPiBrYW5cIDsKK+W4vSA+IGJvdVwgOwor5bi2ID4gdGFpXCA7CivluK8gPiB0YWlcIDsKK+W4qyA+IHNoaVwgOwor6LifID4gY2hpXCA7CivouI8gPiB0b3VcIDsKK+i4iiA+IHlvdVwgOwor5biCID4gc2hpXCA7Civlt74gPiBraW5cIDsKK+eXtCA+IGNoaVwgOwor55epID4gc291XCA7Civlt6cgPiBrb3VcIDsKK+W3pSA+IGtvdVwgOwor6LehID4gYXRvXCA7Civot58gPiBrb25cIDsKK+W3oSA+IGp1blwgOwor6LedID4ga3lvXCA7Civnl5UgPiBrb25cIDsKK+eXkiA+IHlvdVwgOwor5bauID4ga2VuXCA7CivnloogPiBqb3VcIDsKK+eVtiA+IHRvdVwgOwor6LWwID4gc291XCA7CivnlaogPiBiYW5cIDsKK+i1pyA+IHRhblwgOwor55WmID4gYXplXCA7CivnlZQgPiBoYW5cIDsKK+eVjCA+IGthaVwgOwor5bWMID4ga2FuXCA7CivnlLIgPiBrb3VcIDsKK+W0qSA+IGhvdVwgOwor55SoID4geW91XCA7CivnlKMgPiBzYW5cIDsKK+eUmCA+IGthblwgOwor5bSXID4ga291XCA7CivotIUgPiB6ZWlcIDsKK+izvSA+IHNhaVwgOwor6LO8ID4ga291XCA7Civos7ogPiB0YW5cIDsKK+eTtiA+IGJpblwgOwor6LOjID4gYmFpXCA7Civos6IgPiBrZW5cIDsKK+eTnCA+IHVyaVwgOwor6LOHID4gc2hpXCA7CivosrwgPiB0ZW5cIDsKK+iyuCA+IHRhaVwgOwor6LK3ID4gYmFpXCA7CivosrAgPiBzZWlcIDsKK+iyryA+IGNob1wgOwor5bKpID4gaXdhXCA7CivosqcgPiBiaW5cIDsKK+iyoSA+IHphaVwgOwor5bKhID4ga291XCA7Civosp4gPiB0ZWlcIDsKK+iynSA+IGthaVwgOwor6LGqID4gZ291XCA7CivlsaQgPiBzb3VcIDsKK+ixoSA+IHpvdVwgOwor5bGVID4gdGVuXCA7CivosZAgPiBob3VcIDsKK+WxjyA+IGhlaVwgOwor6LGKID4gaG91XCA7CivlsYYgPiBrYWlcIDsKK+WxhSA+IGt5b1wgOwor5bC9ID4gamluXCA7CivnkLIgPiBoYWlcIDsKK+WwpCA+IHl1dVwgOwor5bCgID4gc2VuXCA7CivlsJogPiBuYW9cIDsKK+WwliA+IHNlblwgOwor5bCOID4gZG91XCA7CivlsI0gPiB0YWlcIDsKK+WwiyA+IGppblwgOwor5bCJID4gam91XCA7CivlsIggPiBzZW5cIDsKK+WwhCA+IHNoYVwgOwor5bCBID4gZnV1XCA7Civnj74gPiBnZW5cIDsKK+WvuCA+IHN1blwgOwor5a+rID4gc2hhXCA7Civnj6ogPiBrZWlcIDsKK+WvkiA+IGthblwgOwor5a65ID4geW91XCA7CivlrrUgPiB5b2lcIDsKK+WusyA+IGdhaVwgOwor5a6wID4gc2FpXCA7CivnjqkgPiBnYW5cIDsKK+WuoyA+IHNlblwgOwor5a6bID4gYXRlXCA7CivlrpogPiB0ZWlcIDsKK+WumCA+IGthblwgOwor5a6MID4ga2FuXCA7CivoroogPiBoZW5cIDsKK+iugyA+IHNhblwgOwor546EID4gZ2VuXCA7CivnjbsgPiBrZW5cIDsKK+eNuCA+IGp1dVwgOwor6K2yID4gam91XCA7CivorasgPiBzZW5cIDsKK+itpiA+IGtlaVwgOwor5a2YID4gc29uXCA7CivlrZQgPiBrb3VcIDsKK+isuSA+IGtpblwgOwor54y2ID4geXV1XCA7CivlrKogPiBoaW5cIDsKK+WsoiA+IGpvdVwgOwor6KydID4gc2hhXCA7CivnjJwgPiBzYWlcIDsKK+ismyA+IGtvdVwgOwor6KyZID4ga2VuXCA7Civni70gPiBoYWlcIDsKK+iruCA+IHNob1wgOwor6KumID4gdGVpXCA7Civni6EgPiBrb3VcIDsKK+eLmSA+IHNob1wgOwor54uXID4ga291XCA7Civoq5YgPiByb25cIDsKK+iriyA+IHNlaVwgOwor5auMID4gaXlhXCA7Civoq4cgPiBkYW5cIDsKK+eLgyA+IGp1dVwgOwor54q2ID4gam91XCA7Civniq8gPiBoYW5cIDsKK+eKrCA+IGludVwgOwor6KqYID4geXV1XCA7CivoqpMgPiBzZWlcIDsKK+WqkiA+IGJhaVwgOwor6KqNID4gbmluXCA7CivoqowgPiBzaGlcIDsKK+iqhCA+IHJ1aVwgOwor6KmyID4gZ2FpXCA7CivnibIgPiBzZWlcIDsKK+ipriA+IHNlblwgOwor6KmpID4gc2hpXCA7CivoqaYgPiBzaGlcIDsKK+eJoiA+IHJvdVwgOwor54mhID4gb3N1XCA7CivoqZ4gPiBzaGlcIDsKK+WpmiA+IGtvblwgOwor54mMID4gcGFpXCA7CivniYggPiBoYW5cIDsKK+eJhyA+IGhlblwgOwor54mAID4gc291XCA7CivniL0gPiBzb3VcIDsKK+iosSA+IGt5b1wgOwor54itID4gc291XCA7CivoqKogPiBob3VcIDsKK+eImyA+IHJhblwgOwor5aiRID4gc2hhXCA7CivoqIogPiBqaW5cIDsKK+ioiCA+IGtlaVwgOwor6KiAID4gZ2VuXCA7Civnh7sgPiBrdW5cIDsKK+inoyA+IGthaVwgOwor5aeTID4gc2VpXCA7Civlp4sgPiBzaGlcIDsKK+WniSA+IGFuZVwgOwor54eIID4gdG91XCA7Civnh4MgPiBuZW5cIDsKK+ingCA+IGthblwgOwor6Ka9ID4gcmFuXCA7CivoprMgPiBrYW5cIDsKK+imqiA+IG95YVwgOwor6KanID4gcmFuXCA7CivoppcgPiBzaGlcIDsKK+imliA+IHNoaVwgOwor5aaWID4geW91XCA7CivlpoogPiBuaW5cIDsKK+WmhCA+IGJvdVwgOwor54W9ID4gc2VuXCA7Civlpb0gPiBrb3VcIDsKK+eFriA+IHNoYVwgOwor5aWuID4gZnVuXCA7CivnhakgPiBoYW5cIDsKK+ilpCA+IHJhblwgOwor5aWlID4gb2t1XCA7CivlpaIgPiBzaGFcIDsKK+ilnyA+IGVyaVwgOwor5aWXID4gdG91XCA7CivlpY8gPiBzb3VcIDsKK+eFjiA+IHNlblwgOwor5aWJID4gaG91XCA7CivlpL4gPiBrb3VcIDsKK+ikuCA+IHJvdVwgOwor54S2ID4gemVuXCA7CivopKogPiB0YWlcIDsKK+WkqSA+IHRlblwgOwor5aSnID4gdGFpXCA7CivnhJogPiBmdW5cIDsKK+WklSA+IHl1dVwgOwor6KSSID4gaG91XCA7CivlpIkgPiBoZW5cIDsKK+ijvSA+IHNlaVwgOwor5aO7ID4gc2VpXCA7Civlo7IgPiBiYWlcIDsKK+WjsCA+IGtvZVwgOwor5aOvID4gc291XCA7Civlo6sgPiBzaGlcIDsKK+ijnSA+IHNvdVwgOwor5aOeID4ga2FpXCA7Civoo5UgPiB5dXVcIDsKK+ijjyA+IHVyYVwgOwor5aOKID4ga2FpXCA7Civlo4cgPiBkYW5cIDsKK+ijhSA+IHNvdVwgOwor6KOBID4gc2FpXCA7CivngrkgPiB0ZW5cIDsKK+iioiA+IGhhblwgOwor5aKXID4gem91XCA7CivngoogPiBzdWlcIDsKK+iigiA+IGJlaVwgOwor54G9ID4gc2FpXCA7CivngbAgPiBoYWlcIDsKK+ihoSA+IGtvdVwgOwor5aGUID4gdG91XCA7CivngYwgPiBrYW5cIDsKK+ihgCA+IGNoaVwgOwor5aGAID4gaGVpXCA7CivooLYgPiBzYW5cIDsKK+WgsSA+IGhvdVwgOwor5aCqID4ga2FuXCA7CivngJUgPiBoaW5cIDsKK+WghiA+IHRhaVwgOwor5aCFID4ga2VuXCA7CivloIIgPiBkb3VcIDsKK+ifuyA+IGFyaVwgOwor5r+6ID4gc2VuXCA7Civmv7EgPiBoaW5cIDsKK+a/nyA+IHNhaVwgOwor5r+YID4gbmVpXCA7Civln4sgPiBtYWlcIDsKK+a/gyA+IG5vdVwgOwor5r65ID4gdGFuXCA7CivonqIgPiBrZWlcIDsKK+WeoiA+IGFrYVwgOwor6b6VID4gZ2FuXCA7Civono0gPiB5dXVcIDsKK+WegiA+IHN1aVwgOwor6J2/ID4gaGFlXCA7CivmvbAgPiBrYWlcIDsKK+WdpiA+IHRhblwgOwor6b2hID4gcmVpXCA7CivmvZwgPiBzZW5cIDsKK+idmSA+IGhlblwgOwor6b2OID4gc2VpXCA7CivpvYogPiBzZWlcIDsKK+idiyA+IHJvdVwgOwor5Z2KID4gYm91XCA7CivlnYcgPiBraW5cIDsKK+icuyA+IHNlaVwgOwor5ry4ID4gemVuXCA7CivlnLAgPiBjaGlcIDsKK+a8rCA+IHNoaVwgOwor5ZyoID4gemFpXCA7CivmvKIgPiBrYW5cIDsKK+icmCA+IGNoaVwgOwor5ZyYID4gZGFuXCA7CivmvJUgPiBzb3VcIDsKK+a8jyA+IHJvdVwgOwor5ZyPID4ga2VuXCA7Civmu78gPiBtYW5cIDsKK+WbsCA+IGtvblwgOwor5ruvID4gdGFpXCA7Civpu6ggPiB0b3VcIDsKK+WboyA+IGRhblwgOwor6bueID4gdGVuXCA7Civlm54gPiBrYWlcIDsKK+ibmyA+IHNodVwgOwor5ZubID4geW9uXCA7Civom4kgPiByZWlcIDsKK+ibhiA+IHNob1wgOwor6bq7ID4gYXNhXCA7CivmurYgPiB5b3VcIDsKK+WatCA+IGdlblwgOwor5rqqID4ga2VpXCA7CivpupcgPiByZWlcIDsKK+a6liA+IGp1blwgOwor5rqAID4gbWFuXCA7Civmub4gPiB3YW5cIDsKK+m5uCA+IGtlblwgOwor5ZmqID4gc291XCA7CivmuacgPiB5dXVcIDsKK+iZnyA+IGdvdVwgOwor6JmcID4gcnlvXCA7CivomZogPiBreW9cIDsKK+WZmyA+IGdvdVwgOwor6JmVID4gc2hvXCA7CivlmYwgPiBzb3VcIDsKK+WYsiA+IHRvdVwgOwor6JitID4gcmFuXCA7CivmuKYgPiB1enVcIDsKK+a4oCA+IGt5b1wgOwor5ribID4gZ2VuXCA7CivlmJggPiB1c29cIDsKK+a4iCA+IHNhaVwgOwor5ZiGID4gdGFuXCA7CivmuIUgPiBzZWlcIDsKK+iYgiA+IHp1aVwgOwor5re7ID4gdGVuXCA7Civmt7ogPiBzZW5cIDsKK+a3tyA+IGtvblwgOwor6JepID4gaGFuXCA7Civll6MgPiBzaGlcIDsKK+a3oSA+IHRhblwgOwor6JedID4gZ2VpXCA7Civll5wgPiBzaGlcIDsKK+a3iyA+IHJpblwgOwor6JeJID4gc2hhXCA7Civpt4QgPiBrZWlcIDsKK+a2siA+IGVraVwgOwor6JavID4gc2hvXCA7CivllrAgPiBrdXVcIDsKK+a2ryA+IGdhaVwgOwor6JauID4gc291XCA7Civllq4gPiB0YW5cIDsKK+iWpiA+IHNlblwgOwor5ZanID4ga2VuXCA7CivllpogPiBrYW5cIDsKK+WWmCA+IHplblwgOwor5raMID4geXV1XCA7CivlloQgPiB6ZW5cIDsKK+WVvCA+IHRlaVwgOwor5rW3ID4gdW1pXCA7CivmtaogPiByb3VcIDsKK+iVqSA+IHRvdVwgOwor5ZWjID4ga2FuXCA7CivllY8gPiBtb25cIDsKK+a1hSA+IHNlblwgOwor5rWEID4gam91XCA7CivolL0gPiBoZWlcIDsKK+WUuCA+IHRlblwgOwor6JS1ID4gc291XCA7CivmtJcgPiBzZW5cIDsKK+a0kiA+IHNlaVwgOwor5ZSQID4gdG91XCA7CivmtIsgPiB5b3VcIDsKK+mztCA+IG1laVwgOwor5rOhID4gYXdhXCA7Civms5UgPiBob3VcIDsKK+WTgSA+IGhpblwgOwor6JK8ID4gc291XCA7CivokrggPiBqb3VcIDsKK+WSrCA+IGtvdVwgOwor6JKfID4ga29uXCA7CivokpkgPiBtb3VcIDsKK+ayliA+IG9raVwgOwor6JKUID4gc2hpXCA7CivmsowgPiB0b25cIDsKK+WRvSA+IG1laVwgOwor5ZGzID4gYWppXCA7CivokawgPiBzb3VcIDsKK+iRoyA+IHRvdVwgOwor5rGgID4gaWtlXCA7CivlkZ8gPiBnZW5cIDsKK+axlyA+IGFzZVwgOwor5ZGRID4gZG9uXCA7CivlkYYgPiBib3VcIDsKK+WRgiA+IHJ5b1wgOwor6bC6ID4gYWppXCA7CivlkLsgPiBmdW5cIDsKK+WQuSA+IHN1aVwgOwor6JCsID4gbWFuXCA7CivlkKsgPiBnYW5cIDsKK+WQnSA+IHJpblwgOwor5ZCbID4ga3VuXCA7CivlkJEgPiBrb3VcIDsKK+awjyA+IHVqaVwgOwor6JCMID4gaG91XCA7CivlkIwgPiBkb3VcIDsKK+awiCA+IHNlblwgOwor5ZCIID4gZ291XCA7CivokIQgPiB0b3VcIDsKK+WPuCA+IHNoaVwgOwor5Y+yID4gc2hpXCA7Civlj7AgPiBkYWlcIDsKK+iPqyA+IGtpblwgOwor5q+rID4ga291XCA7Civoj6kgPiBoYWlcIDsKK+WPqSA+IGtvdVwgOwor5Y+lID4ga291XCA7Civmr44gPiBtYWlcIDsKK+WPjSA+IGhhblwgOwor5Y+DID4gc2FuXCA7Civlj4IgPiBzYW5cIDsKK+WOuyA+IGt5b1wgOwor5q61ID4gZGFuXCA7CivljrMgPiBnZW5cIDsKK+muriA+IHNlblwgOwor5Y6tID4gaXlhXCA7CivljpogPiBrb3VcIDsKK+aumCA+IHphblwgOwor5Y6YID4gcmluXCA7CivmrosgPiB6YW5cIDsKK+auiiA+IHNodVwgOwor5q6GID4gdGFpXCA7Civljb8gPiBrZWlcIDsKK+atuyA+IHNoaVwgOwor5Y23ID4ga2FuXCA7CivmrbMgPiBzYWlcIDsKK+atpCA+IHNoaVwgOwor5q2jID4gc2VpXCA7CivmraIgPiBzaGlcIDsKK+atoSA+IGthblwgOwor5Y2gID4gc2VuXCA7CivmrZQgPiBreW9cIDsKK+iNkiA+IGtvdVwgOwor5q2OID4gdGFuXCA7CivmrYwgPiB1dGFcIDsKK+WNiiA+IGhhblwgOwor5Y2IID4gdW1hXCA7CivljYMgPiBjaGlcIDsKK+WNgSA+IHRvb1wgOwor6ay8ID4gb25pXCA7CivojLYgPiBjaGFcIDsKK+iMqyA+IGJvdVwgOwor6ayiID4gaGluXCA7CivljJogPiBob3VcIDsKK+asiiA+IGtlblwgOwor5YyGID4gc291XCA7CivmrIUgPiBreW9cIDsKK+WMhSA+IGhvdVwgOwor5Yu+ID4ga291XCA7Civli7ggPiBrYW5cIDsKK+WLpyA+IGthblwgOwor5YukID4gZ29uXCA7Civli54gPiByb3VcIDsKK+iLlyA+IG5hZVwgOwor5YuYID4ga2FuXCA7Civpq5QgPiB0ZWlcIDsKK+WLlSA+IGRvdVwgOwor5YuJID4gYmVuXCA7Civli4cgPiB5dXVcIDsKK+mrhCA+IHp1aVwgOwor6aq4ID4ga2FpXCA7CivoirggPiBnZWlcIDsKK+WKuSA+IGtvdVwgOwor6IqzID4gaG91XCA7CivlirQgPiByb3VcIDsKK+WKsSA+IHJlaVwgOwor5YqrID4gZ291XCA7CivmqqIgPiBrZW5cIDsKK+WKnyA+IGtvdVwgOwor5YqNID4ga2VuXCA7CivmqoAgPiB0YW5cIDsKK+iJuCA+IHNvdVwgOwor5Ym1ID4gc291XCA7CivoibIgPiBpcm9cIDsKK+mpoiA+IHJ5b1wgOwor5YmbID4gZ291XCA7CivpqZcgPiBrZW5cIDsKK+WJliA+IGJvdVwgOwor5YmNID4gbWFlXCA7CivliYMgPiB0ZWlcIDsKK+motyA+IHNvdVwgOwor5Yi2ID4gc2VpXCA7CivliLAgPiB0b3VcIDsKK+iIrCA+IGhhblwgOwor6IiqID4ga291XCA7CivmqKkgPiBrZW5cIDsKK+WIpCA+IGJhblwgOwor5qijID4geW91XCA7CivpqJkgPiBoZW5cIDsKK+mokyA+IGtlblwgOwor6aiSID4gc291XCA7CivmqJMgPiByb3VcIDsKK+WIkSA+IGtlaVwgOwor5YiKID4ga2FuXCA7CivoiIggPiBrb3VcIDsKK+WIhiA+IGJ1blwgOwor5YiAID4gdG91XCA7Civmp70gPiBzb3VcIDsKK+iHvCA+IHVzdVwgOwor5Ye9ID4ga2FuXCA7Civoh7ogPiB0YWlcIDsKK+iHtCA+IGNoaVwgOwor6IezID4gc2hpXCA7Civoh6ogPiBzaGlcIDsKK+iHqCA+IHJpblwgOwor5YemID4gc2hvXCA7Civlh6EgPiBib25cIDsKK+iHnyA+IHpvdVwgOwor6aebID4gc2hpXCA7Civmp5ggPiB5b3VcIDsKK+WHjSA+IHRvdVwgOwor5qeLID4ga291XCA7Civpp4UgPiBla2lcIDsKK+WHhCA+IHNlaVwgOwor6Ia/ID4gdW1pXCA7Civohr0gPiB0YW5cIDsKK+amuyA+IHRvdVwgOwor5Ya3ID4gcmVpXCA7CivpprMgPiBjaGlcIDsKK+iGsyA+IHplblwgOwor6aatID4gZ3lvXCA7CivppqwgPiB1bWFcIDsKK+WGmSA+IHNoYVwgOwor5YaXID4gam91XCA7CivlhpIgPiBib3VcIDsKK+WGjSA+IHNhaVwgOwor5qaCID4gZ2FpXCA7CivmpbwgPiByb3VcIDsKK+WFvCA+IGtlblwgOwor6IWuID4gc2FpXCA7CivlhawgPiBrb3VcIDsKK+WFqCA+IHplblwgOwor6IWmID4gbm91XCA7CivlhZogPiB0b3VcIDsKK+iFlSA+IHVkZVwgOwor6aWSID4gam91XCA7CivmpZMgPiBmdXVcIDsKK+WFjSA+IG1lblwgOwor6IWLID4gZWtpXCA7CivppYUgPiBtYW5cIDsKK+WFiCA+IHNlblwgOwor5YWFID4ganV1XCA7CivlhYQgPiBhbmlcIDsKK+iEsyA+IG5vdVwgOwor5YSqID4geXV1XCA7CivmpJwgPiBrZW5cIDsKK+mkkCA+IHNhblwgOwor6aSKID4geW91XCA7CivlhIQgPiBva3VcIDsKK+akgCA+IHdhblwgOwor6aO9ID4gaG91XCA7Civpo7wgPiBzaGlcIDsKK+ajuiA+IGthblwgOwor6aO0ID4gYW1lXCA7Civog7QgPiBkb3VcIDsKK+ajsiA+IHNlaVwgOwor5YOnID4gc291XCA7Civog54gPiBob3VcIDsKK+mjnCA+IGhvblwgOwor5qOSID4gYm91XCA7Civog44gPiB0YWlcIDsKK+WDjyA+IHpvdVwgOwor6IOMID4gc2VpXCA7Civlg40gPiBkb3VcIDsKK+iDhiA+IHRhblwgOwor5YOFID4ga2luXCA7Civlgr4gPiBrZWlcIDsKK+iCsiA+IGlrdVwgOwor5YKzID4gZGVuXCA7CivmorAgPiBrYWlcIDsKK+iCryA+IGtvdVwgOwor5qKvID4gdGVpXCA7CivlgqwgPiBzYWlcIDsKK+miqCA+IGZ1dVwgOwor6IKlID4ga29lXCA7Civmop0gPiBqb3VcIDsKK+iChiA+IHNoaVwgOwor5qKFID4gdW1lXCA7CivmobYgPiBva2VcIDsKK+WBtiA+IGd1dVwgOwor5YG1ID4gdGVpXCA7CivogbIgPiBzZWlcIDsKK+mhryA+IGtlblwgOwor6aGrID4gc2VuXCA7CivmoacgPiBrYWlcIDsKK+WBpSA+IGtlblwgOwor6aGeID4gcnVpXCA7CivmoZ8gPiBzYW5cIDsKK+iBniA+IGJ1blwgOwor6aGbID4gdGVuXCA7CivlgZwgPiB0ZWlcIDsKK+mhmCA+IGdhblwgOwor6IGWID4gc2VpXCA7CivpoZUgPiBrZW5cIDsKK+mhlCA+IGthb1wgOwor6aGPID4gZ2FuXCA7CivpoY4gPiBhZ29cIDsKK+mhjCA+IGRhaVwgOwor5qGCID4ga2VpXCA7CivogL0gPiB0YW5cIDsKK+mgvCA+IHJhaVwgOwor6aC7ID4gaGluXCA7CivogLsgPiBjaGlcIDsKK+WAuSA+IGtlblwgOwor6aCtID4gdG91XCA7CivlgKYgPiBrZW5cIDsKK+agoSA+IGtvdVwgOwor6aCaID4ga2VpXCA7CivogJUgPiBrb3VcIDsKK+mgkyA+IHRvblwgOwor5qCTID4gc2VuXCA7CivlgJIgPiB0b3VcIDsKK+iAkCA+IHRhaVwgOwor5YCJID4gc291XCA7CivpoIYgPiBqdW5cIDsKK+mghSA+IGtvdVwgOwor6ICDID4ga291XCA7CivogIEgPiByb3VcIDsKK+e/uyA+IGhvblwgOwor5L+6ID4gb3JlXCA7Civmn7QgPiBzYWlcIDsKK+afkyA+IHNlblwgOwor5p+QID4gYm91XCA7CivnvrkgPiBrb3VcIDsKK+e+riA+IGtvdVwgOwor5L6vID4ga291XCA7Civkvq0gPiBqaW5cIDsKK+e+qCA+IHNlblwgOwor576kID4gZ3VuXCA7Civmnp0gPiBlZGFcIDsKK+aemiA+IG1haVwgOwor5L6LID4gcmVpXCA7CivkvoYgPiByYWlcIDsKK+advyA+IGl0YVwgOwor5L2/ID4gc2hpXCA7CivmnbUgPiBzaG9cIDsKK+S9tSA+IGhlaVwgOwor572uID4gY2hpXCA7CivmnaUgPiByYWlcIDsKK+mdoiA+IG1lblwgOwor5p2hID4gam91XCA7CivpnZwgPiBzZWlcIDsKK+mdmSA+IHNlaVwgOwor6Z2WID4gc2VpXCA7CivkvZUgPiBuYW5cIDsKK+S9kyA+IHRlaVwgOwor572QID4ga2FuXCA7CivmnZAgPiB6YWlcIDsKK+e9jiA+IHRhblwgOwor5L2PID4ganV1XCA7CivkvY4gPiB0ZWlcIDsKK+mdiCA+IHJlaVwgOwor5L2HID4gY2hvXCA7CivkvYMgPiB0ZW5cIDsKK+S8uiA+IHNoaVwgOwor5pyxID4gYWthXCA7CivmnKcgPiByb3VcIDsKK+acpiA+IGJvdVwgOwor5pydID4gYXNhXCA7CivkvJ0gPiB0ZW5cIDsKK+acmyA+IGJvdVwgOwor5LyaID4ga2FpXCA7CivmnJcgPiByb3VcIDsKK+mciiA+IHJlaVwgOwor5pyLID4gaG91XCA7CivmnIkgPiB5dXVcIDsKK+acgyA+IGthaVwgOwor5pyAID4gc2FpXCA7Civmm78gPiB0YWlcIDsKK+abviA+IHNvdVwgOwor6Zu7ID4gZGVuXCA7Civmm7wgPiBiYW5cIDsKK+S7uyA+IG5pblwgOwor6Zu2ID4gcmVpXCA7Civmm7ggPiBzaG9cIDsKK+S7tiA+IGtlblwgOwor5pu0ID4ga291XCA7Civpm6ggPiBhbWVcIDsKK+mboyA+IG5hblwgOwor5LukID4gcmVpXCA7Civmm5wgPiB5b3VcIDsKK+mbliA+IHN1aVwgOwor5LuVID4gc2hpXCA7Civku5QgPiBzaGlcIDsKK+S7iyA+IGthaVwgOwor5LuKID4ga29uXCA7Civpm4QgPiBvc3VcIDsKK+S7gSA+IG5pblwgOwor5pq0ID4gYm91XCA7Civkuq0gPiB0ZWlcIDsKK+maqiA+IGtlblwgOwor5pqrID4gemFuXCA7CivpmqggPiB6dWlcIDsKK+S6pCA+IGtvdVwgOwor5LqhID4gYm91XCA7CivpmpsgPiBzYWlcIDsKK+S6mSA+IGtvdVwgOwor5LqYID4gc2VuXCA7CivmmpYgPiBkYW5cIDsKK+S6lSA+IHNlaVwgOwor57qSID4gdGVuXCA7CivmmpEgPiBzaG9cIDsKK+majyA+IHp1aVwgOwor57qPID4gdGVuXCA7Civpmo4gPiBrYWlcIDsKK+maiiA+IHRhaVwgOwor6ZqIID4gd2FpXCA7CivkuokgPiBzb3VcIDsKK+e6giA+IHNhblwgOwor5LqCID4gcmFuXCA7Civpmb0gPiB5b3VcIDsKK+e5vCA+IGtlaVwgOwor6Zm6ID4ga2VuXCA7CivmmbogPiBjaGlcIDsKK+mZtiA+IHRvdVwgOwor5pm0ID4gc2VpXCA7CivnubAgPiBzb3VcIDsKK+S5sSA+IHJhblwgOwor5pmvID4ga2VpXCA7CivnuaogPiBrYWlcIDsKK+e5qSA+IGpvdVwgOwor5pmpID4gYmFuXCA7CivpmaUgPiBrYW5cIDsKK+mZoyA+IGppblwgOwor57meID4gam91XCA7CivkuZggPiBqb3VcIDsKK+e5lSA+IHplblwgOwor5LmXID4gam91XCA7CivnuZQgPiBvcmlcIDsKK+mZkCA+IGdlblwgOwor6ZmNID4ga291XCA7CivkuY8gPiBib3VcIDsKK+e5gSA+IGhhblwgOwor57i9ID4gc291XCA7CivpmLIgPiBib3VcIDsKK+e4sSA+IGp1dVwgOwor57irID4gaG91XCA7CivpmKogPiBoYW5cIDsKK+S4piA+IGhlaVwgOwor5LiYID4gb2thXCA7CivkuJQgPiBzaGFcIDsKK+aYkyA+IGVraVwgOwor5piOID4gbWVpXCA7CivkuIogPiBqb3VcIDsKK+aYhiA+IGtvblwgOwor5piCID4ga291XCA7Civnt7QgPiByZW5cIDsKK+e3rCA+IG1lblwgOwor5pesID4ganVuXCA7Civnt6kgPiBrYW5cIDsKK+aXqSA+IHNvdVwgOwor57eoID4gaGVuXCA7Civml6YgPiB0YW5cIDsKK+e3oCA+IHRlaVwgOwor6ZecID4ga2FuXCA7Civnt5ogPiBzZW5cIDsKK+mXmCA+IHRvdVwgOwor57ePID4gc291XCA7Civml4sgPiBzZW5cIDsKK+e3iiA+IGtpblwgOwor5pa5ID4gaG91XCA7CivmlrcgPiBkYW5cIDsKK+e2siA+IGFtaVwgOwor5pavID4gc2hpXCA7Civmlq0gPiBkYW5cIDsKK+aWrCA+IHphblwgOwor6ZakID4ga291XCA7CivmlpwgPiBzaGFcIDsKK+e2mSA+IGtlaVwgOwor57aTID4ga2VpXCA7CivplosgPiBrYWlcIDsKK+mWiSA+IGhlaVwgOwor5paJID4gc2VpXCA7CivmlocgPiBidW5cIDsKK+mWgyA+IHNlblwgOwor5paDID4gaGVpXCA7CivploAgPiBtb25cIDsKK+mVtyA+IG9zYVwgOwor5pW4ID4gc3V1XCA7CivmlbQgPiBzZWlcIDsKK+e1siA+IHNoaVwgOwor57WxID4gdG91XCA7CivmlbAgPiBzdXVcIDsKK+aVrCA+IGtlaVwgOwor57WoID4ganV1XCA7CivmlaMgPiBzYW5cIDsKK+aVoiA+IGthblwgOwor57WeID4ga291XCA7CivmlZcgPiBoYWlcIDsKK+aVjyA+IGJpblwgOwor5pWIID4ga291XCA7CivmlYUgPiB5dWVcIDsKK+aUviA+IGhvdVwgOwor57S6ID4ga29uXCA7CivmlLkgPiBrYWlcIDsKK+e0sCA+IHNlaVwgOwor57SvID4gcnVpXCA7CivmlK8gPiBzaGlcIDsKK+e0myA+IGZ1blwgOwor57SUID4ganVuXCA7CivntI0gPiB0b3VcIDsKK+e0iyA+IG1vblwgOwor57O4ID4gaXRvXCA7Civmk6cgPiBreW9cIDsKK+aToSA+IHRhaVwgOwor57OeID4gZnVuXCA7Civns5YgPiB0b3VcIDsKK+aTlCA+IHRhblwgOwor57K+ID4gc2VpXCA7Civnsp8gPiBhd2FcIDsKK+eylyA+IGFyYVwgOwor6ZG1ID4ga2FuXCA7CivnsZYgPiBzZW5cIDsKK+mRkiA+IGthblwgOwor57GQID4gdG91XCA7CivmkLogPiBrZWlcIDsKK+ewoSA+IGthblwgOwor5pCcID4gc291XCA7CivmkJYgPiB5b3VcIDsKK+aQjSA+IHNvblwgOwor5o+hID4gYWt1XCA7Civmj5sgPiBrYW5cIDsKK+aPmiA+IHlvdVwgOwor5o+QID4gdGVpXCA7Civmj4kgPiBqdXVcIDsKK+evhCA+IGhhblwgOwor5o+DID4gc2VuXCA7CivmjrsgPiBzb3VcIDsKK+aOsiA+IGtlaVwgOwor566qID4gdGFuXCA7CivmjqggPiBzdWlcIDsKK+aOpyA+IGtvdVwgOwor5o6jID4gc2VpXCA7CivmjqIgPiB0YW5cIDsKK+aOoSA+IHNhaVwgOwor566XID4gc2FuXCA7CivmjpIgPiBoYWlcIDsKK+euiyA+IHNlblwgOwor5o6DID4gc291XCA7CivmjbsgPiBuZW5cIDsKK+aNsiA+IGtlblwgOwor5o2uID4ga3lvXCA7CivmjaggPiBzaGFcIDsKK+etpyA+IGtlblwgOwor6Y2bID4gdGFuXCA7CivmjZwgPiBzb3VcIDsKK+aMvyA+IHNvdVwgOwor5oy9ID4gYmFuXCA7CivnrKwgPiBkYWlcIDsKK+espSA+IHNoaVwgOwor6YyiID4gc2VuXCA7CivnrJsgPiBmdWVcIDsKK+aMmSA+IGt5b1wgOwor56yEID4ga2VpXCA7Civnq78gPiBzYW9cIDsKK+aLviA+IGp1dVwgOwor5ou1ID4gc29uXCA7Civmi6AgPiBreW9cIDsKK+ernyA+IGtlaVwgOwor56udID4gaGVpXCA7Civmi50gPiBoYWlcIDsKK+aLnCA+IGhhaVwgOwor5ouYID4ga291XCA7Civmi4UgPiB0YW5cIDsKK+ergyA+IHNvdVwgOwor5oq1ID4gdGVpXCA7CivmirEgPiBob3VcIDsKK+mKrSA+IHNlblwgOwor6YqcID4ga2FuXCA7CivmipsgPiBob3VcIDsKK+mKmCA+IG1laVwgOwor5oqYID4gb3JpXCA7CivmipcgPiBrb3VcIDsKK+aKlSA+IHRvdVwgOwor5oqTID4gc291XCA7CivpioUgPiBkb3VcIDsKK+epvyA+IHNlblwgOwor5omxID4gc291XCA7Civmia4gPiBmdW5cIDsKK+eplyA+IHN1aVwgOwor5omNID4gc2FpXCA7CivnqYkgPiBjaGlcIDsKK+eovyA+IGtvdVwgOwor56i9ID4ga2VpXCA7CivnqLsgPiB0b3VcIDsKK+aIuyA+IHJlaVwgOwor5oi0ID4gdGFpXCA7CivnqLIgPiBpbmVcIDsKK+aIsCA+IHNlblwgOwor56iaID4gY2hpXCA7CivmiJYgPiBhcnVcIDsKK+aIkiA+IGthaVwgOwor5oiQID4gc2VpXCA7CivpiI0gPiBkb25cIDsKK+eojiA+IHplaVwgOwor5oiMID4gaW51XCA7CivmiIAgPiByZW5cIDsKK+aHuCA+IGtlblwgOwor5oe3ID4ga2FpXCA7Civph5EgPiBraW5cIDsKK+mHjSA+IG9tb1wgOwor56eLID4gYWtpXCA7Civmh4kgPiB5b3VcIDsKK+mHhyA+IHNhaVwgOwor5oeDID4ga2luXCA7Civnpr0gPiBraW5cIDsKK+aGuiA+IHRhblwgOwor5oa2ID4gb2t1XCA7CivnprAgPiBkZWlcIDsKK+emriA+IHJlaVwgOwor5oasID4ga2VpXCA7CivmhqcgPiBkb3VcIDsKK+aGpCA+IGZ1blwgOwor6YaSID4gc2VpXCA7CivmhpAgPiByZW5cIDsKK+aGjiA+IHpvdVwgOwor6YaJID4gc3VpXCA7CivnpoUgPiB6ZW5cIDsKK+aGgiA+IHl1dVwgOwor56aBID4ga2luXCA7CivphbggPiBzYW5cIDsKK+eltyA+IHRvdVwgOwor5oWuID4gcnlvXCA7CivmhaggPiBnYWlcIDsKK+aFpSA+IHpvdVwgOwor5oWjID4ga2FuXCA7CivmhaIgPiBtYW5cIDsKK+aFmCA+IHNhblwgOwor6YWUID4gc3VpXCA7CivphY0gPiBoYWlcIDsKK+aFjCA+IGtvdVwgOwor5oWKID4ga2VuXCA7CivnpLwgPiByZWlcIDsKK+ekuiA+IHNoaVwgOwor5oSfID4ga2FuXCA7CivnpJkgPiBnYWlcIDsKK+mDtSA+IHl1dVwgOwor5oOzID4gc291XCA7Civmg7EgPiBub3VcIDsKK+aDqCA+IHNhblwgOwor5oOgID4ga2VpXCA7Civno5AgPiBpd2FcIDsKK+mDjiA+IHJvdVwgOwor6YOKID4ga291XCA7Civmg4UgPiBqb3VcIDsKK+aCvCA+IHRvdVwgOwor5oK2ID4gbW9uXCA7CivmgrQgPiBzdWlcIDsKK+aCoyA+IGthblwgOwor5oKgID4geXV1XCA7CivnopcgPiB3YW5cIDsKK+aCliA+IGhhaVwgOwor5oKUID4ga2FpXCA7CivpgoogPiBoZW5cIDsKK+mChCA+IGthblwgOwor6YKCID4ga2FpXCA7CivpgbggPiBzZW5cIDsKK+mBsiA+IGNoaVwgOwor5oGwID4ga291XCA7Civpga4gPiBzaGFcIDsKK+mBrSA+IHNvdVwgOwor5oGvID4gaWtpXCA7CivnoawgPiBrb3VcIDsKK+aBqCA+IGtvblwgOwor6YGlID4geW91XCA7CivpgaMgPiBrZW5cIDsKK+mBoCA+IHRvb1wgOwor6YGcID4gc29uXCA7CivpgZkgPiB5b3VcIDsKK+mBkSA+IGtvdVwgOwor6YGNID4gaGVuXCA7CivmgY0gPiBrb3VcIDsKK+mBiiA+IHl1dVwgOwor5oGLID4ga29pXCA7CivpgYcgPiBndXVcIDsKK+mBhSA+IGNoaVwgOwor6YGCID4gc3VpXCA7CivpgYEgPiB0b25cIDsKK+aAqiA+IGthaVwgOwor5oCnID4gc2VpXCA7CivnoKUgPiBzaGlcIDsKK+mAoyA+IHJlblwgOwor6YCiID4gaG91XCA7CivpgKAgPiB6b3VcIDsKK+aAoCA+IHRhaVwgOwor6YCeID4gdGVpXCA7CivpgJ0gPiBzZWlcIDsKK+aAnSA+IHNoaVwgOwor6YCZID4gZ2VuXCA7CivnoJUgPiBzYWlcIDsKK+eglCA+IGtlblwgOwor6YCPID4gdG91XCA7CivpgIUgPiBrb3VcIDsKK+mAgyA+IHRvdVwgOwor6YCBID4gc291XCA7CivpgIAgPiB0YWlcIDsKK+W/vyA+IGZ1blwgOwor6b6kID4ga2FpXCA7CivpvqEgPiBzdWlcIDsKK+m+mCA+IHRvdVwgOwor6b6XID4gcmVpXCA7CivpvpYgPiB0b3VcIDsKK+m+kiA+IHJ5dVwgOwor6b6QID4gaG91XCA7Civpvb0gPiBraW5cIDsKK+m9tyA+IGFrdVwgOwor6b22ID4gYWdvXCA7CivpvbUgPiBnb3VcIDsKK+m9syA+IGd1blwgOwor6b2vID4gZ2VpXCA7Civpva0gPiBzaG9cIDsKK+m9rCA+IGd5b1wgOwor6b2pID4gZ291XCA7CivpvZ4gPiBnZW5cIDsKK+m9nSA+IGNoaVwgOwor6b2YID4ga2FpXCA7CivpvZcgPiBraW5cIDsKK+m9kiA+IHNoaVwgOwor6b2PID4gc2VpXCA7CivpvYsgPiBzYWlcIDsKK+m9hCA+IHNoYVwgOwor6b2BID4ga291XCA7CivpvLogPiBydWlcIDsKK+m8tyA+IGtlaVwgOwor6byyID4ga29uXCA7CivpvLEgPiBzZWlcIDsKK+m8qiA+IHNlaVwgOwor6byiID4gZnVuXCA7CivpvKEgPiBzaG9cIDsKK+m8nyA+IHRvdVwgOwor6bybID4ga291XCA7CivpvJkgPiBoZWlcIDsKK+m8lyA+IHRvdVwgOwor6byWID4gZnVuXCA7CivpvJUgPiB0b3VcIDsKK+m8kiA+IHNoaVwgOwor6byRID4gdGVpXCA7CivpvJAgPiBkYWlcIDsKK+m8hyA+IGdvdVwgOwor6byFID4gY2hpXCA7CivpvIMgPiB3YWlcIDsKK+m7vyA+IGdlblwgOwor6bu9ID4gYm91XCA7Civpu7kgPiBjaGlcIDsKK+m7tiA+IGF6YVwgOwor6bu1ID4gdGFuXCA7Civpu7IgPiBzYW5cIDsKK+m7sSA+IHRhaVwgOwor6buuID4gdGFuXCA7Civpu6wgPiBrYW5cIDsKK+m7pyA+IHJlaVwgOwor6budID4geXV1XCA7Civpu5UgPiB0YW5cIDsKK+m7lCA+IGtlblwgOwor6buPID4gbmVuXCA7Civpu44gPiByZWlcIDsKK+m7jCA+IGtvdVwgOwor6buLID4ga291XCA7Civpu4ggPiB0b3VcIDsKK+m7hiA+IGtvdVwgOwor6buDID4ga291XCA7CivpurogPiBtZW5cIDsKK+m6tSA+IGJlblwgOwor6bqzID4gcmFpXCA7CivpurAgPiBib3VcIDsKK+m6riA+IGt5b1wgOwor6bqtID4gaG91XCA7CivpuqogPiBtZW5cIDsKK+m6nyA+IHJpblwgOwor6bqdID4gc2hhXCA7CivpupsgPiBiZWlcIDsKK+m6liA+IGtlaVwgOwor6bqVID4ga2luXCA7CivpupEgPiBnZWlcIDsKK+m6jyA+IGtpblwgOwor6bqIID4gc2h1XCA7CivpuocgPiBraW5cIDsKK+m6hSA+IGhvdVwgOwor6bqDID4gaG91XCA7CivpuoAgPiB5dXVcIDsKK+m5vCA+IGtlblwgOwor6bm7ID4ga2FuXCA7CivpubkgPiBrYW5cIDsKK+m4sCA+IHJlaVwgOwor6bieID4gcmFuXCA7CivpuJsgPiBrYW5cIDsKK+m4jiA+IHlvdVwgOwor6biHID4gc2VuXCA7CivpuIIgPiBrZWlcIDsKK+m3tCA+IGthblwgOwor6bezID4ga2FuXCA7Civpt60gPiBiYW5cIDsKK+m3pSA+IHNoaVwgOwor6begID4gZ3lvXCA7Civpt54gPiBzb3VcIDsKK+m3mSA+IHNoaVwgOwor6beVID4geW91XCA7Civpt5QgPiBnb3VcIDsKK+m3kyA+IHNoYVwgOwor6bePID4gdGVuXCA7Civpt4kgPiB0ZWlcIDsKK+m3hyA+IGtvdVwgOwor6beGID4gdGVuXCA7Civpt4IgPiB5b3VcIDsKK+m2vyA+IHNoaVwgOwor6ba8ID4ga2VuXCA7CivptrUgPiBzdXVcIDsKK+m2sSA+IGtlblwgOwor6basID4gc291XCA7CivptqQgPiBrb25cIDsKK+m2lyA+IHRlaVwgOwor6baKID4ga291XCA7CivptocgPiB0b3VcIDsKK+m2hiA+IHJhaVwgOwor6baEID4gc2VpXCA7Civptb4gPiBrb25cIDsKK+m1vCA+IGtvdVwgOwor6bW7ID4gc3VpXCA7CivptawgPiBob3VcIDsKK+m1qyA+IHRvdVwgOwor6bWnID4gaGVpXCA7CivptaMgPiByYWlcIDsKK+m1kSA+IGtlblwgOwor6bWKID4ga291XCA7CivptYggPiB0ZW5cIDsKK+m1hCA+IHNoaVwgOwor6bWBID4ga291XCA7CivptL8gPiBrb3VcIDsKK+m0viA+IGJvdVwgOwor6bS7ID4ga291XCA7CivptLogPiB0ZWlcIDsKK+m0tCA+IGtvdVwgOwor6bSyID4gc2hpXCA7CivptKYgPiB5b3VcIDsKK+m0nyA+IHNoaVwgOwor6bSeID4geW91XCA7CivptJwgPiBzaGlcIDsKK+m0mCA+IGhlblwgOwor6bSSID4gcmVpXCA7CivptIsgPiBob3VcIDsKK+m0iCA+IGdhblwgOwor6bO5ID4ga2VuXCA7Civps7cgPiBzaGlcIDsKK+mzsyA+IGhvdVwgOwor6bOyID4gc2hpXCA7Civps7AgPiBuaW9cIDsKK+mzryA+IGhvdVwgOwor6bOuID4ga2VpXCA7Civps6sgPiBnYW5cIDsKK+myuSA+IHNvdVwgOwor6bKZID4ga2FpXCA7CivpsokgPiB5dXVcIDsKK+mxuyA+IHNlblwgOwor6bGuID4gc2hvXCA7CivpsaQgPiBrYW5cIDsKK+mxoyA+IHRhblwgOwor6bGgID4ga2FpXCA7CivpsZ8gPiBrb3VcIDsKK+mxniA+IGthblwgOwor6bGdID4gZnVuXCA7CivpsZsgPiBlc29cIDsKK+mxliA+IGtlaVwgOwor6bGUID4gc2VuXCA7CivpsZMgPiBzZW5cIDsKK+mxhyA+IGtvdVwgOwor6bGEID4gc2VuXCA7CivpsLYgPiBzZWlcIDsKK+mwtSA+IGJpblwgOwor6bCyID4gZ291XCA7CivpsLEgPiByZW5cIDsKK+mwqiA+IGtvdVwgOwor6bCpID4geW91XCA7CivpsKcgPiB0b3VcIDsKK+mwpiA+IHNoaVwgOwor6bClID4ga2FuXCA7CivpsKMgPiBzaGlcIDsKK+mwnCA+IGtlblwgOwor6bCVID4gZWJpXCA7CivpsJQgPiBrYW5cIDsKK+mwkyA+IGVyYVwgOwor6bCRID4geW91XCA7CivpsIMgPiB3YWlcIDsKK+mwgSA+IHNlblwgOwor6bCAID4ga2FuXCA7Civpr78gPiBoZW5cIDsKK+mvuiA+IHNob1wgOwor6a+5ID4gc2VpXCA7Civpr7ggPiBrb3VcIDsKK+mvtyA+IHRlaVwgOwor6a+1ID4gYWppXCA7Civpr68gPiBzZWlcIDsKK+mvqyA+IHNvdVwgOwor6a+kID4ga29uXCA7Civpr6IgPiBnZWlcIDsKK+mvnyA+IHRvdVwgOwor6a+bID4gdGFpXCA7Civpr5ggPiBkYWlcIDsKK+mviSA+IGtvaVwgOwor6a+IID4geXV1XCA7Civpr4cgPiBrYW5cIDsKK+mvgSA+IGtvdVwgOwor6a+AID4ga29uXCA7Civprr4gPiBkYWlcIDsKK+muuCA+IGJlblwgOwor6a63ID4gdGVpXCA7CivprrAgPiBrYWlcIDsKK+muqSA+IGhvdVwgOwor6a6mID4gdG91XCA7CivprpQgPiBreW9cIDsKK+mukCA+IHRhaVwgOwor6a6PID4gc2VpXCA7Civpro4gPiBheXVcIDsKK+muiyA+IHl1dVwgOwor6a6GID4gc2VpXCA7Civprb8gPiByZWlcIDsKK+mttyA+IHl1dVwgOwor6a21ID4gZnVuXCA7CivprbQgPiBob3VcIDsKK+mtsyA+IHNoaVwgOwor6a2tID4gZ2VuXCA7CivprawgPiBoYW5cIDsKK+mtqiA+IGthaVwgOwor6a2oID4gdG9uXCA7CivpraUgPiBnb3VcIDsKK+mtoyA+IHNob1wgOwor6a2eID4gZXJpXCA7CivprZwgPiBqaW5cIDsKK+mtmyA+IHRvdVwgOwor6a2WID4ga3lvXCA7CivprZEgPiBjaGlcIDsKK+mtjSA+IGJvdVwgOwor6a2LID4gdGFpXCA7CivprLcgPiBzb3VcIDsKK+mstSA+IHNlblwgOwor6ayzID4ga2VuXCA7CivprK0gPiB0b3VcIDsKK+msrCA+IHRvdVwgOwor6ayrID4ga2FuXCA7CivprKogPiB0b3VcIDsKK+msqCA+IGtvdVwgOwor6aynID4gdG91XCA7CivprKYgPiB0b3VcIDsKK+mspSA+IHRvdVwgOwor6ayfID4ga2FuXCA7CivprJwgPiBrYW5cIDsKK+msmSA+IHNvdVwgOwor6ayWID4gc2FuXCA7CivprIsgPiBzZW5cIDsKK+msiSA+IHNvdVwgOwor6ayIID4ga2VuXCA7CivprIUgPiBob3VcIDsKK+mshCA+IHRlaVwgOwor6ayDID4gc291XCA7CivprIIgPiBiaW5cIDsKK+msgCA+IHRlaVwgOwor6au7ID4ga2VpXCA7Civpq7MgPiBib3VcIDsKK+mrsSA+IGhvdVwgOwor6auvID4gemVuXCA7Civpq6kgPiBiaW5cIDsKK+mrpyA+IHRhblwgOwor6aumID4gYm91XCA7Civpq6UgPiB6ZW5cIDsKK+mroyA+IGhvdVwgOwor6auiID4gdGVpXCA7Civpq6AgPiBrb25cIDsKK+mrniA+IHNvdVwgOwor6aubID4ga291XCA7Civpq5kgPiBrb3VcIDsKK+mrliA+IGthblwgOwor6auVID4gaGluXCA7Civpq5MgPiB6dWlcIDsKK+mrkiA+IHNvdVwgOwor6auQID4ga291XCA7Civpq48gPiByb3VcIDsKK+mriCA+IGhvdVwgOwor6auBID4ga2FpXCA7Civpqr8gPiBoZW5cIDsKK+mqviA+IGtvdVwgOwor6aq5ID4ga291XCA7CivpqrYgPiB0ZWlcIDsKK+mqtSA+IHRhaVwgOwor6aq0ID4gc2hpXCA7CivpqrAgPiB0b3VcIDsKK+mqryA+IGtvdVwgOwor6aqUID4gc291XCA7CivpqakgPiBrYW5cIDsKK+mppCA+IGpvdVwgOwor6ambID4gZWtpXCA7CivpqZQgPiB0ZW5cIDsKK+mpkiA+IHRhblwgOwor6amOID4gcmluXCA7CivpqYcgPiBjaGlcIDsKK+mphCA+IHNvdVwgOwor6amCID4gc2FuXCA7CivpqYEgPiBnb3VcIDsKK+mouiA+IGNoaVwgOwor6ai4ID4gc2VuXCA7CivpqLUgPiBnZW5cIDsKK+mosCA+IHRvdVwgOwor6airID4ga2VuXCA7CivpqKggPiB0YW5cIDsKK+mooyA+IHNvdVwgOwor6aigID4gdGVpXCA7CivpqJcgPiBoZW5cIDsKK+mokCA+IGtlblwgOwor6aiMID4gc291XCA7CivpqIsgPiByYWlcIDsKK+moiCA+IGhlblwgOwor6aiFID4gc3VpXCA7CivpqIMgPiBnYWlcIDsKK+mogiA+IHNlaVwgOwor6aiBID4gdGVpXCA7Civpp74gPiB0YWlcIDsKK+mnvSA+IGtlblwgOwor6ae7ID4ga2FuXCA7Civpp7kgPiBib3VcIDsKK+mntCA+IGthaVwgOwor6aetID4ga2FpXCA7Civpp6sgPiBrZWlcIDsKK+mnpyA+IHRvdVwgOwor6aeiID4gaGVuXCA7Civpp58gPiBzaGlcIDsKK+mnmiA+IHlvdVwgOwor6aeYID4gdGFpXCA7Civpp5QgPiBzb3VcIDsKK+mniSA+IGtlaVwgOwor6aa8ID4gYnVuXCA7CivpprogPiBzb3VcIDsKK+mmtSA+IHNodVwgOwor6aaoID4ga2VpXCA7CivppqYgPiBrZW5cIDsKK+mmkyA+IHNhblwgOwor6aWeID4gc2FuXCA7CivppZsgPiBib3VcIDsKK+mlmSA+IGZ1blwgOwor6aWYID4gc2VuXCA7CivppZUgPiB0b3VcIDsKK+mllCA+IHlvdVwgOwor6aWOID4gc2hpXCA7CivppY0gPiB6ZW5cIDsKK+mljCA+IHNlblwgOwor6aWKID4gc2FuXCA7CivppYkgPiBraW5cIDsKK+mlgSA+IHlvdVwgOwor6aWAID4gdG91XCA7CivppLsgPiBrb3VcIDsKK+mkuSA+IHRvdVwgOwor6aS1ID4gZGFpXCA7CivppLQgPiBmdW5cIDsKK+mksyA+IHRvdVwgOwor6aSxID4ga291XCA7CivppKcgPiBkYWlcIDsKK+mkpCA+IHRhblwgOwor6aSiID4gaG91XCA7CivppKAgPiBoZWlcIDsKK+mkmyA+IGtvblwgOwor6aSaID4ga291XCA7CivppJYgPiB0b3VcIDsKK+mkkiA+IGRhaVwgOwor6aSMID4gZXNhXCA7CivppIggPiBzaGlcIDsKK+mkgyA+IGtvdVwgOwor6aSCID4gdGVuXCA7CivppIEgPiBqaW5cIDsKK+mjsyA+IHNodVwgOwor6aOwID4gaGFuXCA7Civpo6ogPiBqaW5cIDsKK+mjqSA+IHRvblwgOwor6aOnID4gc29uXCA7Civpo6YgPiBrZW5cIDsKK+mjoyA+IHRlaVwgOwor6aOhID4gc2FuXCA7Civpo4wgPiBmdXVcIDsKK+mivyA+IGhhblwgOwor6aK7ID4geW91XCA7CivporogPiB5b3VcIDsKK+miuCA+IHNoaVwgOwor6aK0ID4gc2VuXCA7CivporEgPiB0YWlcIDsKK+mirSA+IHNlblwgOwor6aG0ID4ga2FuXCA7CivpobAgPiBoaW5cIDsKK+mhqiA+IGthaVwgOwor6aGlID4ga291XCA7CivpoaIgPiBiYW5cIDsKK+mhmiA+IHRlblwgOwor6aGZID4gc291XCA7CivpoZMgPiBzZW5cIDsKK+mhkSA+IGthblwgOwor6aGLID4gc2FpXCA7CivpoYcgPiBzdWlcIDsKK+mhhCA+IGthblwgOwor6aC+ID4gc2hpXCA7CivpoL0gPiB0YWlcIDsKK+mguSA+IHRhaVwgOwor6aC3ID4ga2FuXCA7CivpoLMgPiB0ZWlcIDsKK+mgsiA+IHRlaVwgOwor6aCvID4ga2FpXCA7CivpoK4gPiBrYWlcIDsKK+mgpiA+IGthaVwgOwor6aCgID4gZ2FpXCA7CivpoJwgPiBrYW5cIDsKK+mgliA+IGhhblwgOwor6aCSID4gaGFuXCA7CivpoI8gPiBrb3VcIDsKK+mgiCA+IHNodVwgOwor6aCHID4ga2FuXCA7Civpn7ggPiBob3VcIDsKK+mftCA+IHNvdVwgOwor6Z+yID4gc2VpXCA7Civpn7EgPiBzZW5cIDsKK+mfryA+IHNlblwgOwor6Z+dID4ga291XCA7Civpn5wgPiB0b3VcIDsKK+mfmyA+IGhhaVwgOwor6Z+TID4ga2FuXCA7Civpn5AgPiBrb3VcIDsKK+mfjiA+IGJhaVwgOwor6Z+MID4gamluXCA7Civpn4ogPiByYW5cIDsKK+mfiSA+IHNlblwgOwor6Z+GID4gc2VuXCA7Civpn4UgPiBrZW5cIDsKK+mfhCA+IGFrdVwgOwor6Z66ID4gdG91XCA7CivpnrYgPiBoYW5cIDsKK+mesyA+IHRvdVwgOwor6Z6yID4ga291XCA7CivpnrEgPiB0b3VcIDsKK+meriA+IHRlaVwgOwor6Z6sID4ga2VuXCA7CivpnqMgPiBqdXVcIDsKK+meniA+IGhlaVwgOwor6Z6cID4gdG91XCA7CivpnpogPiBrb3VcIDsKK+memSA+IGtlblwgOwor6Z6XID4gdG91XCA7CivpnpYgPiBzYWlcIDsKK+melSA+IGdvdVwgOwor6Z6JID4gdG91XCA7CivpnoAgPiB0b3VcIDsKK+mdvSA+IGJhblwgOwor6Z28ID4gdGFuXCA7CivpnbggPiBzb3VcIDsKK+mdsyA+IGtpblwgOwor6Z2xID4gamluXCA7Civpna0gPiBqaW5cIDsKK+mdqyA+IHNhaVwgOwor6Z2qID4gdGVpXCA7CivpnacgPiBrYWlcIDsKK+mdpiA+IHRlblwgOwor6Z2kID4gaG91XCA7CivpnaMgPiBtZW5cIDsKK+mdoCA+IGtvdVwgOwor6Z2bID4gdGVuXCA7CivpnZogPiBzZWlcIDsKK+mdlyA+IHRlaVwgOwor6Z2RID4gc2VpXCA7CivpnYogPiBmdXVcIDsKK+mdhiA+IHRhaVwgOwor6Z2BID4gcmFpXCA7CivpnL4gPiBiYWlcIDsKK+mcvSA+IHNlaVwgOwor6ZydID4gcmVpXCA7CivpnJsgPiByZWlcIDsKK+mcmiA+IGJvdVwgOwor6ZyWID4gcmluXCA7CivpnJMgPiBnZWlcIDsKK+mckSA+IHRlblwgOwor6ZyOID4gc291XCA7CivpnIkgPiBiYWlcIDsKK+mciCA+IGhhaVwgOwor6ZyGID4gdGVpXCA7Civpm7EgPiBob3VcIDsKK+mbsCA+IGZ1blwgOwor6ZuvID4gYnVuXCA7Civpm58gPiBrZWlcIDsKK+mbniA+IGtlaVwgOwor6ZudID4geW91XCA7Civpm5ogPiBrYW5cIDsKK+mbmSA+IHNvdVwgOwor6ZuOID4gc2hvXCA7Civpm40gPiB5b3VcIDsKK+mbiyA+IHNlblwgOwor6ZuKID4ga291XCA7Civpm4ggPiBrYW5cIDsKK+mauSA+IHN1aVwgOwor6Zq4ID4gcmVpXCA7CivpmrcgPiByZWlcIDsKK+matiA+IHRhaVwgOwor6Zq0ID4gcm91XCA7Civpmq8gPiB0b3VcIDsKK+mariA+IHNlaVwgOwor6ZqnID4gc3VpXCA7CivpmqYgPiBoZWlcIDsKK+mapSA+IHRvdVwgOwor6ZqkID4gdGFpXCA7Civpmp0gPiB0b3VcIDsKK+mamiA+IHRvdVwgOwor6ZqXID4ga2FpXCA7CivpmpEgPiBrYWlcIDsKK+majSA+IGtvdVwgOwor6ZqEID4gdGVpXCA7CivpmoMgPiBzaHVcIDsKK+mZviA+IGpvdVwgOwor6Zm8ID4gc2hvXCA7CivpmbcgPiBrYW5cIDsKK+mZsiA+IHN1aVwgOwor6ZmuID4gdGFpXCA7CivpmawgPiBzdXVcIDsKK+mZqiA+IGJhaVwgOwor6ZmmID4gdG91XCA7CivpmaEgPiB0b3VcIDsKK+mZnSA+IHNlblwgOwor6ZmcID4ga291XCA7CivpmZsgPiBoZWlcIDsKK+mZmCA+IGtlaVwgOwor6ZmWID4ga2FpXCA7CivpmZQgPiBnYWlcIDsKK+mZiyA+IHJvdVwgOwor6Zi6ID4ga3lvXCA7CivpmLggPiBha3VcIDsKK+mYtyA+IHRlaVwgOwor6ZizID4geW91XCA7CivpmLEgPiBzZWlcIDsKK+mYryA+IHNoaVwgOwor6ZiuID4gZ2VuXCA7CivpmKwgPiBrb3VcIDsKK+mYqCA+IGFrdVwgOwor6ZimID4geW91XCA7CivpmKQgPiBjaGlcIDsKK+mYoSA+IHNlblwgOwor6ZemID4gZ29uXCA7Civpl6QgPiBrYW5cIDsKK+mXoSA+IHNlblwgOwor6ZegID4ga2FpXCA7Civpl5kgPiBrZWlcIDsKK+mXlyA+IGthblwgOwor6ZeUID4ga291XCA7Civpl5MgPiBrYWlcIDsKK+mXkiA+IHRvdVwgOwor6ZeQID4gdGVuXCA7Civpl4wgPiByYW5cIDsKK+mXhiA+IGhhblwgOwor6Za/ID4gYnVuXCA7Civplr0gPiBrb25cIDsKK+mWuiA+IGJlblwgOwor6ZasID4gcm91XCA7CivplqsgPiBrb25cIDsKK+mWqSA+IGJlblwgOwor6ZaoID4ga2VpXCA7CivplqcgPiBrb3VcIDsKK+mWoSA+IGdhaVwgOwor6ZaeID4gaGVuXCA7Civplp0gPiByZWlcIDsKK+mWmSA+IHRvdVwgOwor6ZaYID4ga291XCA7CivplpQgPiBiaW5cIDsKK+mWjyA+IGp1blwgOwor6ZaOID4ga291XCA7Civplo0gPiBob3VcIDsKK+mWjCA+IGtvdVwgOwor6ZaIID4ga2FuXCA7CivplocgPiBoZWlcIDsKK+mWgiA+IHNhblwgOwor6ZW0ID4gcm91XCA7Civpla4gPiBrYW5cIDsKK+mUvSA+IGtvdVwgOwor6ZOmID4gc2VuXCA7Civpk5MgPiBib3VcIDsKK+mThyA+IGhvdVwgOwor6ZKEID4gcmFuXCA7Civpkb4gPiByYW5cIDsKK+mRvSA+IHNhblwgOwor6ZG3ID4gam91XCA7CivpkbIgPiBqb3VcIDsKK+mRsSA+IHNhblwgOwor6ZGvID4gc2VuXCA7Civpka0gPiByYW5cIDsKK+mRqyA+IGtpblwgOwor6ZGoID4gcm91XCA7CivpkZ4gPiByb3VcIDsKK+mRmyA+IGtvdVwgOwor6ZGaID4gc2FuXCA7CivpkZkgPiBrZWlcIDsKK+mRkSA+IGthblwgOwor6ZGMID4gaGluXCA7CivpkYggPiBnZWlcIDsKK+mRhSA+IGtvdVwgOwor6ZGBID4gYmFuXCA7CivpkLsgPiBreW9cIDsKK+mQuiA+IHRvdVwgOwor6ZC2ID4ga2FuXCA7CivpkLMgPiByYWlcIDsKK+mQsSA+IHNlblwgOwor6ZCuID4gcmVuXCA7CivpkKsgPiBzZW5cIDsKK+mQnyA+IHRlaVwgOwor6ZCZID4gdG91XCA7CivpkJcgPiBrYW5cIDsKK+mQlSA+IHNhblwgOwor6ZCTID4gdGFpXCA7CivpkI8gPiBzb25cIDsKK+mQiSA+IHNlblwgOwor6ZCHID4gaGFuXCA7CivpkIQgPiBrb3VcIDsKK+mQgyA+IGRvdVwgOwor6ZCBID4gc2hpXCA7Civpj7sgPiByaW5cIDsKK+mPuCA+IHRlaVwgOwor6Y+oID4gc2FuXCA7Civpj6cgPiByb3VcIDsKK+mPpCA+IHJvdVwgOwor6Y+fID4gc2FuXCA7Civpj54gPiB5b3VcIDsKK+mPnSA+IG1hblwgOwor6Y+cID4gdG91XCA7Civpj5kgPiBzYWlcIDsKK+mPlyA+IGtvdVwgOwor6Y+TID4gc291XCA7Civpj4sgPiBiYW5cIDsKK+mPiCA+IHJlblwgOwor6Y+HID4gc2VuXCA7Civpj4YgPiBrYW5cIDsKK+mPhCA+IHRhblwgOwor6Y6sID4ga291XCA7CivpjqsgPiBiYW5cIDsKK+mOqSA+IHNhaVwgOwor6Y6kID4ga291XCA7CivpjqEgPiBzaGlcIDsKK+mOniA+IGhlaVwgOwor6Y6XID4gc291XCA7CivpjpUgPiB0b3VcIDsKK+mOlCA+IHlvdVwgOwor6Y6SID4gZG91XCA7CivpjoogPiBoYXVcIDsKK+mNvyA+IHNoaVwgOwor6Y29ID4gaGVuXCA7CivpjbQgPiB0YW5cIDsKK+mNsyA+IGthblwgOwor6Y2xID4geW91XCA7CivpjbAgPiBrYW5cIDsKK+mNryA+IHNvdVwgOwor6Y2tID4ga291XCA7CivpjaogPiBib3VcIDsKK+mNqSA+IHRlblwgOwor6Y2nID4ga291XCA7CivpjaQgPiBzb3VcIDsKK+mNoCA+IGtvdVwgOwor6Y2eID4ga291XCA7CivpjZogPiB5b3VcIDsKK+mNlyA+IHRlaVwgOwor6Y2VID4ga3VuXCA7CivpjZIgPiBqdXVcIDsKK+mNkSA+IGh1dVwgOwor6Y2QID4gc291XCA7CivpjYogPiByZW5cIDsKK+mNiSA+IHRlaVwgOwor6Y2HID4ga2FpXCA7CivpjYQgPiBrZWlcIDsKK+mMtSA+IG5pZVwgOwor6YyzID4gbW91XCA7CivpjKwgPiByZW5cIDsKK+mMqiA+IHRlblwgOwor6YynID4ga2FuXCA7CivpjKUgPiBpa3VcIDsKK+mMoyA+IHRlaVwgOwor6YygID4gam91XCA7CivpjJ8gPiB0YW5cIDsKK+mMnSA+IHNvdVwgOwor6YycID4gam91XCA7CivpjJogPiBzb3VcIDsKK+mMmSA+IHNoaVwgOwor6YyVID4ga29uXCA7CivpjJQgPiB0b3VcIDsKK+mMkSA+IHJhaVwgOwor6YyIID4ga2VuXCA7CivpjIAgPiByaW5cIDsKK+mLuyA+IGtlblwgOwor6YuuID4gc2VpXCA7Civpi6wgPiBoYW5cIDsKK+mLpyA+IGtlblwgOwor6YulID4gdG91XCA7Civpi6EgPiBrYW5cIDsKK+mLnyA+IHNlblwgOwor6YuZID4gZ3lvXCA7Civpi5cgPiBrZW5cIDsKK+mLlSA+IHNoaVwgOwor6YuTID4gdGVuXCA7Civpi5AgPiBrb3VcIDsKK+mLjiA+IGthblwgOwor6YuMID4gdGVpXCA7Civpi4sgPiBzZW5cIDsKK+mLhyA+IGhhaVwgOwor6YuFID4gc2hpXCA7Civpi4MgPiByb3VcIDsKK+mLgiA+IGJhaVwgOwor6YuBID4gcnlvXCA7Civpi4AgPiB0b3VcIDsKK+mKuyA+IHRlaVwgOwor6Yq6ID4gc291XCA7CivpirIgPiBrYW5cIDsKK+mKpyA+IGtvdVwgOwor6YqkID4gYmVpXCA7CivpiqAgPiByb3VcIDsKK+mKmiA+IHlvdVwgOwor6YqZID4ga2FpXCA7CivpipcgPiBrb3VcIDsKK+mKliA+IHNodVwgOwor6YqTID4gc2VuXCA7CivpipIgPiBrZWlcIDsKK+mKiCA+IHRlaVwgOwor6Ym/ID4ga291XCA7CivpibwgPiBoZWlcIDsKK+mJuSA+IHNoaVwgOwor6Ym4ID4ga291XCA7CivpibcgPiBrb3VcIDsKK+mJtiA+IGtlaVwgOwor6Ym1ID4gdG91XCA7CivpibEgPiBrb3VcIDsKK+mJsCA+IHNoaVwgOwor6YmpID4gam91XCA7CivpiaggPiBkZWlcIDsKK+mJpyA+IGJvdVwgOwor6YmkID4ga291XCA7CivpiaEgPiBoYW5cIDsKK+mJnCA+IGZ1dVwgOwor6YmZID4gdGFpXCA7CivpiZcgPiBrYW5cIDsKK+mJjyA+IHNob1wgOwor6YmOID4gc291XCA7CivpiYkgPiBrZW5cIDsKK+mJiCA+IHNoYVwgOwor6YmHID4gc2hpXCA7CivpiYYgPiB0ZW5cIDsKK+mJhSA+IGt5b1wgOwor6YmDID4gc2hpXCA7CivpiYIgPiBzaGlcIDsKK+mJgCA+IGtvdVwgOwor6Yi/ID4gdGVuXCA7CivpiLYgPiBzaGlcIDsKK+mItSA+IGhlaVwgOwor6YiwID4gc2hpXCA7CivpiK4gPiBkZWlcIDsKK+mIoyA+IGthaVwgOwor6YieID4ga2luXCA7CivpiJwgPiBrb3VcIDsKK+mIliA+IGh1blwgOwor6YiTID4gamluXCA7CivpiJIgPiBzb3VcIDsKK+mIkSA+IGhhblwgOwor6YiQID4ga2VuXCA7CivpiIkgPiBkb3VcIDsKK+mIhCA+IHRvdVwgOwor6YiBID4gaG91XCA7Civph78gPiBraW5cIDsKK+mHvCA+IGtlblwgOwor6Ye2ID4gc2hpXCA7Civph7EgPiB0ZWlcIDsKK+mHryA+IGJvdVwgOwor6YeuID4gc2VuXCA7Civph60gPiBrb3VcIDsKK+mHrCA+IGthblwgOwor6YepID4gaGFuXCA7Civph6cgPiBzZW5cIDsKK+mHpiA+IGtvdVwgOwor6YekID4gc2FuXCA7Civph5YgPiB0b3VcIDsKK+mHiSA+IHl1dVwgOwor6YeGID4gaGFuXCA7Civph4UgPiBnZW5cIDsKK+mHgyA+IHNoaVwgOwor6YeBID4ga2luXCA7Civph4AgPiBqb3VcIDsKK+mGvSA+IHJlaVwgOwor6Ya6ID4ga3VuXCA7CivphrggPiBqb3VcIDsKK+mGtiA+IGdlblwgOwor6Ya1ID4ga3lvXCA7CivphrQgPiByZWlcIDsKK+mGsyA+IGVraVwgOwor6YayID4gam91XCA7CivphrAgPiB0YW5cIDsKK+mGryA+IGtlaVwgOwor6YamID4gc2FuXCA7CivphqIgPiBrYWlcIDsKK+mGmCA+IGtvdVwgOwor6YaTID4gdGFuXCA7CivphpEgPiBzaG9cIDsKK+mGjiA+IGRhaVwgOwor6YaNID4gdGVpXCA7CivphoYgPiBzYW5cIDsKK+mGhSA+IGhhaVwgOwor6YaCID4gcmluXCA7CivphbsgPiBzdWlcIDsKK+mFuSA+IHJhaVwgOwor6YW2ID4gYmFpXCA7CivphbUgPiBrb3VcIDsKK+mFsiA+IHRlaVwgOwor6YWtID4geXV1XCA7CivphakgPiBtZWlcIDsKK+mFoyA+IGthblwgOwor6YWaID4gaHVuXCA7CivphZggPiB0b3VcIDsKK+mFliA+IHRhblwgOwor6YWKID4gdGVpXCA7CivphYcgPiBzYW5cIDsKK+mFhiA+IGZ1dVwgOwor6YWDID4gcmVpXCA7CivphL0gPiB0ZW5cIDsKK+mEvCA+IHNhYlwgOwor6YS6ID4ga291XCA7CivphLcgPiBob3VcIDsKK+mEtiA+IGthaVwgOwor6YSyID4gdGFuXCA7CivphLAgPiByaW5cIDsKK+mEryA+IHNlblwgOwor6YSuID4gYm91XCA7CivphK0gPiB0ZWlcIDsKK+mEpyA+IHRvdVwgOwor6YSeID4gZ2luXCA7CivphJggPiB5b3VcIDsKK+mElyA+IGtvdVwgOwor6YSSID4gc3V1XCA7CivphI0gPiBtZWlcIDsKK+mEhCA+IGtlblwgOwor6YOvID4gdGFuXCA7Civpg6UgPiBoYWlcIDsKK+mDoSA+IGd1blwgOwor6YOfID4ga291XCA7Civpg54gPiByb3VcIDsKK+mDnCA+IGtvdVwgOwor6YOYID4gcnlvXCA7Civpg5cgPiBjaGlcIDsKK+mDlSA+IHNlaVwgOwor6YOSID4gcm91XCA7Civpg4wgPiBrZWlcIDsKK+mDiCA+IGtvdVwgOwor6YODID4ga291XCA7Civpg4EgPiBpa3VcIDsKK+mCviA+IGNodVwgOwor6YK9ID4ga2VpXCA7CivpgrYgPiBoYWlcIDsKK+mCtCA+IGhlaVwgOwor6YKwID4gdGFpXCA7Civpgq8gPiBrYW5cIDsKK+mCqCA+IHNvblwgOwor6YKiID4ga2VpXCA7CivpgqEgPiBob3VcIDsKK+mCoCA+IGhpblwgOwor6YKZID4gYm91XCA7CivpgpcgPiBrYW5cIDsKK+mClSA+IHlvdVwgOwor6YKRID4geXV1XCA7Civpgo4gPiB5dXVcIDsKK+mCjCA+IHJlaVwgOwor6YKJID4gaGVuXCA7CivpgoUgPiBrZW5cIDsKK+mCgyA+IHN1aVwgOwor6YKBID4gYmFpXCA7CivpgoAgPiB5b3VcIDsKK+mBvSA+IGt5b1wgOwor6YG3ID4gc2VuXCA7CivpgbYgPiBqb3VcIDsKK+mBtSA+IGp1blwgOwor6YG0ID4gcmluXCA7CivpgbAgPiB0ZWlcIDsKK+mBryA+IHRvblwgOwor6YGoID4gZ291XCA7CivpgaYgPiBrYW5cIDsKK+mBoiA+IHRvdVwgOwor6YGfID4gY2hpXCA7CivpgZ4gPiB0ZWlcIDsKK+mBnSA+IHRvdVwgOwor6YGYID4ga291XCA7CivpgYkgPiB0ZWlcIDsKK+mBhCA+IHNlblwgOwor6YGDID4gZ2VuXCA7CivpgL8gPiB0b3VcIDsKK+mAsyA+IGlrdVwgOwor6YCwID4geXV1XCA7CivpgK4gPiB0YWlcIDsKK+mArSA+IGthblwgOwor6YCsID4gaG91XCA7CivpgKggPiByYWlcIDsKK+mApSA+IGthaVwgOwor6YCXID4gdG91XCA7CivpgJUgPiBrZWlcIDsKK+mAkyA+IHRlaVwgOwor6YCMID4geXV1XCA7CivpgIggPiBrZWlcIDsKK+mAhCA+IGhvdVwgOwor6L+6ID4gZGFpXCA7Civov7ggPiBob3VcIDsKK+i/tiA+IHl1dVwgOwor6L+1ID4gdG91XCA7Civov7QgPiBrYWlcIDsKK+i/ryA+IHRvdVwgOwor6L+oID4gdGFpXCA7Civov6MgPiBzZWlcIDsKK+i/kiA+IGtvdVwgOwor6L+KID4gc291XCA7Civov4EgPiBzZW5cIDsKK+i/gCA+IGthblwgOwor6L65ID4gaGVuXCA7Civovq4gPiBoZW5cIDsKK+i+qCA+IGJlblwgOwor6L6nID4gYmVuXCA7CivovqYgPiBoYW5cIDsKK+i+oSA+IGhlblwgOwor6L6gID4gc2FpXCA7CivovaUgPiByaW5cIDsKK+i9niA+IGthblwgOwor6L2YID4ga2FuXCA7CivovZcgPiBrYW5cIDsKK+i9lCA+IHJpblwgOwor6L2TID4gaGFuXCA7CivovZIgPiBodW5cIDsKK+i9kSA+IHJhdVwgOwor6L2PID4gc2FuXCA7CivovYcgPiBrb3VcIDsKK+i9gSA+IHRvdVwgOwor6Ly+ID4gdGVuXCA7CivovLogPiBzaGlcIDsKK+i8tyA+IGtvdVwgOwor6Ly2ID4geXV1XCA7CivovLMgPiBzb3VcIDsKK+i8riA+IGp1dVwgOwor6LytID4gemVuXCA7CivovKggPiBrYW5cIDsKK+i8piA+IHJlblwgOwor6LylID4ga29uXCA7CivovKMgPiBob3VcIDsKK+i8oSA+IGthblwgOwor6LyeID4gYm91XCA7CivovJwgPiBzaGlcIDsKK+i8lyA+IGdlaVwgOwor6LyTID4gYmFuXCA7CivovJAgPiBrYW5cIDsKK+i8jyA+IHl1dVwgOwor6LyKID4gY2hpXCA7CivovIcgPiBzZW5cIDsKK+i7uiA+IHlvdVwgOwor6Lu5ID4gc2hpXCA7Civou7AgPiBoYWlcIDsKK+i7qCA+IHJlaVwgOwor6LujID4gZ291XCA7Civou6AgPiBqaW5cIDsKK+i7nyA+IG5hblwgOwor6LucID4gZG91XCA7Civou5sgPiBha3VcIDsKK+i7lCA+IGppblwgOwor6LuRID4gdGVpXCA7Civou5AgPiBzZW5cIDsKK+i7hyA+IHRvdVwgOwor6LuGID4gdGVpXCA7Civou4EgPiByb3VcIDsKK+i6uiA+IHRvdVwgOwor6LqwID4gdGVpXCA7Civouq0gPiB0YW5cIDsKK+i6qiA+IHJpblwgOwor6LqnID4gc2hpXCA7CivouqIgPiB0b3VcIDsKK+i6oSA+IGpvdVwgOwor6LqdID4gcmFuXCA7CivoupogPiBzZW5cIDsKK+i6mSA+IHJpblwgOwor6LqVID4gY2h1XCA7CivoupQgPiB0ZW5cIDsKK+i6iyA+IHNlaVwgOwor6LqJID4gdG9uXCA7CivouoEgPiBzb3VcIDsKK+i5uSA+IHRvdVwgOwor6LmvID4gaGFuXCA7Civoua0gPiBzb3VcIDsKK+i5rCA+IHRvdVwgOwor6LmjID4gbWFuXCA7CivouaEgPiB5b3VcIDsKK+i5nSA+IHNoaVwgOwor6LmbID4gdGFpXCA7CivouZQgPiBzYW5cIDsKK+i5jyA+IHRlaVwgOwor6LmOID4gdGVuXCA7CivouY0gPiB0ZW5cIDsKK+i5iyA+IHRvdVwgOwor6LmKID4ga2VpXCA7CivouYggPiB0b3VcIDsKK+i5hyA+IGtlblwgOwor6LmCID4ganV1XCA7CivouYEgPiBoZW5cIDsKK+i4uSA+IHNlblwgOwor6Li2ID4gdGVpXCA7CivouLQgPiB5b3VcIDsKK+i4oyA+IGhvdVwgOwor6LihID4ga2VuXCA7CivouJ4gPiBreW9cIDsKK+i4lCA+IHRvdVwgOwor6LiQID4gc2VuXCA7CivouIggPiBzaG9cIDsKK+i4hSA+IHRlaVwgOwor6LiBID4ga2VpXCA7Civot7UgPiBzZW5cIDsKK+i3tCA+IHNhaVwgOwor6LeyID4ga291XCA7Civot7EgPiBjaGlcIDsKK+i3sCA+IGhvdVwgOwor6LenID4gc2VuXCA7Civot6QgPiBrb3VcIDsKK+i3miA+IHNhblwgOwor6LeZID4gc2hvXCA7Civot5EgPiBob3VcIDsKK+i3iiA+IGJhaVwgOwor6LeIID4gZGVuXCA7Civot4YgPiB0YWlcIDsKK+i2viA+IHNoaVwgOwor6La8ID4gZ2VuXCA7CivotrIgPiBzYW5cIDsKK+i2ryA+IGthblwgOwor6LaoID4gc3V1XCA7CivotqYgPiBzaGlcIDsKK+i2nyA+IHRvdVwgOwor6LaVID4ga2FuXCA7CivotpEgPiBzaGlcIDsKK+i2jSA+IGNoaVwgOwor6LaIID4gdGFuXCA7CivotoQgPiBzaG9cIDsKK+i1vyA+IGNoaVwgOwor6LWxID4gc291XCA7Civota0gPiBzaGFcIDsKK+i1rCA+IHRlaVwgOwor6LWmID4gc2hhXCA7CivotJwgPiB6b3VcIDsKK+i0myA+IGtvdVwgOwor6LSXID4ga2VuXCA7CivotJMgPiB6b3VcIDsKK+i0kiA+IGtlblwgOwor6LSNID4gc2VuXCA7CivotIogPiBzYW5cIDsKK+i0iSA+IHRhblwgOwor6LSIID4gem91XCA7CivotIQgPiBzaGlcIDsKK+i0gyA+IHdhblwgOwor6LSBID4gaGFpXCA7Civos78gPiByb3VcIDsKK+izuCA+IHlvdVwgOwor6LO3ID4gc2VpXCA7Civos7UgPiBodXVcIDsKK+iztCA+IHJhaVwgOwor6LOyID4gaG91XCA7Civos68gPiBrZWlcIDsKK+izqCA+IHNvdVwgOwor6LOkID4gc2VuXCA7Civos6AgPiBiYWlcIDsKK+iznCA+IHNoaVwgOwor6LObID4gc2FuXCA7Civos5ogPiByYWlcIDsKK+izliA+IHNoYVwgOwor6LOUID4gaGluXCA7Civos5MgPiBoaW5cIDsKK+izkiA+IHNoYVwgOwor6LOOID4gc2VuXCA7Civos40gPiBzb3VcIDsKK+iziyA+IGtvdVwgOwor6LOGID4gaGVuXCA7Civos4UgPiBrYWlcIDsKK+izhCA+IHdhaVwgOwor6LK/ID4gYm91XCA7CivosrkgPiBzZWlcIDsKK+iytiA+IGhlblwgOwor6LKyID4gc2hpXCA7CivosqsgPiBrYW5cIDsKK+iyqiA+IGRvblwgOwor6LKpID4gaGFuXCA7CivosqIgPiBrb3VcIDsKK+iymyA+IGthblwgOwor6LKZID4gY2h1XCA7CivospIgPiB0YW5cIDsKK+iyjiA+IGdlaVwgOwor6LKMID4gYm91XCA7CivososgPiBrYW5cIDsKK+iyhyA+IGtvblwgOwor6LKGID4ga2FuXCA7CivosbsgPiBrYW5cIDsKK+ixuiA+IHNhaVwgOwor6LG4ID4gY2hpXCA7CivosbYgPiBodW5cIDsKK+ixtSA+IHNvdVwgOwor6LGzID4gaGluXCA7CivosawgPiBjaG9cIDsKK+ixqSA+IGhpblwgOwor6LGmID4ga3lvXCA7CivosaQgPiBrb25cIDsKK+ixoyA+IGtlblwgOwor6LGiID4ga2VuXCA7CivosZwgPiBrZW5cIDsKK+ixmyA+IGVraVwgOwor6LGYID4gdG9uXCA7CivosZUgPiBzaGlcIDsKK+ixjyA+IGthblwgOwor6LGLID4gdG91XCA7CivosYkgPiBzaGlcIDsKK+ixhyA+IGtvdVwgOwor6LGFID4gcm91XCA7CivosL8gPiBrZWlcIDsKK+iwviA+IGtvdVwgOwor6LC9ID4ga2FuXCA7CivosLkgPiBrb3VcIDsKK+iwuCA+IHNlblwgOwor6K6cID4gdG91XCA7CivorpogPiBzYW5cIDsKK+iumSA+IGthblwgOwor6K6VID4gcmFuXCA7CivorpMgPiBqb3VcIDsKK+iukiA+IHNhblwgOwor6K2+ID4gc2VuXCA7CivorbwgPiBrYW5cIDsKK+ituSA+IGtvdVwgOwor6K22ID4gdG91XCA7CivorbQgPiBrZW5cIDsKK+itsSA+IHplblwgOwor6K2jID4gc2VuXCA7CivorZ8gPiBzb3VcIDsKK+itniA+IGtlblwgOwor6K2aID4gdGFuXCA7CivorZQgPiBzZW5cIDsKK+itkyA+IGtlaVwgOwor6K2NID4geW91XCA7CivorYggPiB0YWlcIDsKK+ithCA+IHNvdVwgOwor6K2CID4gc2VuXCA7CivorL4gPiBiYW5cIDsKK+issCA+IHJlblwgOwor6KytID4gc2VpXCA7CivorKYgPiBrZWlcIDsKK+isoCA+IHlvdVwgOwor6KyfID4gdG91XCA7CivorJwgPiBnZW5cIDsKK+ismiA+IHNoaVwgOwor6KyXID4gYm91XCA7CivorJEgPiBrZWlcIDsKK+isiiA+IGtvdVwgOwor6KyHID4ga2VuXCA7CivorIYgPiBzZW5cIDsKK+ishSA+IHNvdVwgOwor6KyEID4gdG91XCA7Civoq7wgPiBrZW5cIDsKK+irtyA+IGZ1dVwgOwor6Ku1ID4gbmFuXCA7Civoq7QgPiBrYW5cIDsKK+irsCA+IHNoaVwgOwor6KuuID4gc2hpXCA7Civoq6wgPiBrZWlcIDsKK+irqyA+IGthblwgOwor6KunID4ga2FpXCA7Civoq6IgPiBrb25cIDsKK+iroSA+IHNoaVwgOwor6KugID4ga2VuXCA7Civoq58gPiBzaGlcIDsKK+irniA+IGhlblwgOwor6KudID4gc2hvXCA7Civoq5ogPiBqb3VcIDsKK+irlSA+IGtvdVwgOwor6KuTID4gc2VuXCA7Civoq48gPiBzaHVcIDsKK+irjSA+IHNvdVwgOwor6KuMID4ga2FuXCA7Civoq4kgPiB6dWlcIDsKK+iriCA+IHN1aVwgOwor6KuEID4ganVuXCA7Civoq4IgPiB0ZW5cIDsKK+iqviA+IGdpblwgOwor6Kq7ID4gdG91XCA7CivoqrcgPiBib3VcIDsKK+iqtiA+IHN1aVwgOwor6KqpID4ga2VpXCA7CivoqqggPiBrYWlcIDsKK+iqpSA+IGtvdVwgOwor6KqhID4ga2FpXCA7Civoqp8gPiBrb3VcIDsKK+iqmSA+IGtvdVwgOwor6KqXID4gdGVuXCA7CivoqpUgPiB0YW5cIDsKK+iqjyA+IHJvdVwgOwor6KqDID4gc2hpXCA7Civoqb8gPiBrYWlcIDsKK+ipvCA+IGthaVwgOwor6Km6ID4gYmlpXCA7CivoqbkgPiBzZW5cIDsKK+iptyA+IHRvdVwgOwor6KmsID4ga291XCA7CivoqaUgPiBrb3VcIDsKK+ipoyA+IGtlaVwgOwor6KmiID4ganVuXCA7CivoqZ0gPiBjaG9cIDsKK+ipnCA+IHRvdVwgOwor6KmTID4ga3lvXCA7CivoqZIgPiB0YWlcIDsKK+ipjiA+IGt5b1wgOwor6KmJID4gZG91XCA7CivoqYcgPiB5b3VcIDsKK+iphiA+IHRlaVwgOwor6KmFID4gcmVpXCA7CivoqYMgPiBrZW5cIDsKK+ipgCA+IHRhblwgOwor6Ki+ID4gc2hpXCA7CivoqL0gPiBrb3VcIDsKK+iotSA+IGNoaVwgOwor6KisID4gc291XCA7CivoqKQgPiBrb25cIDsKK+iooiA+IGtpblwgOwor6KieID4geW91XCA7CivoqJUgPiBzYW5cIDsKK+iolCA+IGdpblwgOwor6KiTID4ga3VuXCA7CivoqJIgPiBqaW5cIDsKK+iokSA+IHNoaVwgOwor6KiOID4gdG91XCA7CivoqIwgPiBrb3VcIDsKK+iohyA+IGtvdVwgOwor6KiCID4gdGVpXCA7Civop78gPiBrZWlcIDsKK+invSA+IGtlaVwgOwor6Ke5ID4ga2VpXCA7Civop7YgPiBzaGlcIDsKK+inpyA+IGthaVwgOwor6KelID4ga291XCA7Civop50gPiB0ZWlcIDsKK+innCA+IHNoaVwgOwor6KeYID4gc291XCA7Civop5cgPiBzaGlcIDsKK+inlCA+IGtpblwgOwor6Ka4ID4ga2FuXCA7CivoprcgPiBzaHVcIDsKK+imtSA+IGthblwgOwor6Ka0ID4gdG91XCA7CivoprIgPiBraW5cIDsKK+imryA+IGtvdVwgOwor6KalID4gdGVuXCA7CivopqAgPiBraW5cIDsKK+imnyA+IHNoaVwgOwor6KaYID4gdGVuXCA7CivoppQgPiBla2lcIDsKK+imjSA+IGhlblwgOwor6KaMID4ga2FuXCA7CivopoMgPiB0YW5cIDsKK+ilviA+IGFrYVwgOwor6KW9ID4gcmFuXCA7CivopbwgPiBnZWlcIDsKK+iluyA+IGhhblwgOwor6KW6ID4ga2VuXCA7CivopbQgPiByYW5cIDsKK+ilsyA+IHNlblwgOwor6KWwID4gcmFpXCA7CivopaIgPiB0YW5cIDsKK+iloCA+IHRvdVwgOwor6KWcID4gc2VuXCA7CivopZsgPiBqb3VcIDsKK+ilmiA+IHN1aVwgOwor6KWVID4gcmFuXCA7CivopYwgPiB0YW5cIDsKK+iliSA+IGthblwgOwor6KWEID4gam91XCA7CivopYMgPiBob3VcIDsKK+ikuSA+IGdlaVwgOwor6KSwID4ga2VuXCA7CivopKsgPiBjaGlcIDsKK+ikpyA+IGtlaVwgOwor6KSmID4gZGFpXCA7CivopKAgPiBrb3VcIDsKK+iknSA+IHRhblwgOwor6KScID4gZW5hXCA7CivopJogPiBjaG9cIDsKK+ikmSA+IGhhaVwgOwor6KSWID4gdGFuXCA7CivopI8gPiB5dXVcIDsKK+ikjSA+IHRhblwgOwor6KSKID4gaGVuXCA7CivopIYgPiBzaGlcIDsKK+ikgiA+IGthaVwgOwor6KO1ID4gaGFpXCA7Civoo7QgPiBoYWlcIDsKK+ijqiA+IHRhdVwgOwor6KOnID4gc2VuXCA7Civoo54gPiBzZWlcIDsKK+ijmSA+IGt1blwgOwor6KOSID4gaG91XCA7Civoo44gPiB0ZWlcIDsKK+ijjSA+IGtvblwgOwor6KOMID4ga291XCA7Civoo4sgPiBzaHVcIDsKK+ijiiA+IGpvdVwgOwor6KOIID4ga29uXCA7Civoor8gPiBrZWlcIDsKK+iiviA+IGNodVwgOwor6KK1ID4gamluXCA7CivoorMgPiBzaGlcIDsKK+iiqiA+IGt5b1wgOwor6KKoID4ga2VuXCA7CivooqQgPiBib3VcIDsKK+iiniA+IGtvblwgOwor6KKbID4gdGVpXCA7CivoopIgPiB0YW5cIDsKK+iijSA+IGhvdVwgOwor6KKAID4ga2luXCA7Civoob8gPiBlcmlcIDsKK+ihvSA+IGppblwgOwor6KG7ID4gemVuXCA7CivoobIgPiBkb3VcIDsKK+ihriA+IGtvblwgOwor6KGrID4gc2FuXCA7CivooakgPiBzYWlcIDsKK+ihpiA+IGthblwgOwor6KGfID4gZG91XCA7CivooZwgPiBkb3VcIDsKK+ihmSA+IGd5b1wgOwor6KGYID4ga2FuXCA7CivooZYgPiBrb3VcIDsKK+ihlSA+IHRvdVwgOwor6KGSID4ga2VuXCA7CivooZEgPiByZWlcIDsKK+ihjiA+IGthblwgOwor6KGFID4ga2luXCA7CivooYMgPiBoYWlcIDsKK+ihgSA+IGtvdVwgOwor6KC7ID4gYmFuXCA7CivooLogPiBzYW5cIDsKK+igtSA+IGtlaVwgOwor6KCyID4ga2VuXCA7CivooK0gPiBob3VcIDsKK+igoyA+IHJlaVwgOwor6KChID4gcmVpXCA7CivooJ8gPiByb3VcIDsKK+ignCA+IGhhblwgOwor6KCZID4gaGVuXCA7CivooJQgPiBrb3VcIDsKK+igkyA+IGJvdVwgOwor6KCSID4ga2VuXCA7CivooJAgPiBzZWlcIDsKK+igjyA+IGthaVwgOwor6KCKID4gcmVuXCA7CivooIkgPiBrZW5cIDsKK+ighiA+IHRhaVwgOwor6KCFID4geW91XCA7Civon78gPiBrZWlcIDsKK+ifviA+IHNlblwgOwor6J+6ID4gc2VuXCA7Civon7ggPiByZWlcIDsKK+iftyA+IHRvdVwgOwor6J+2ID4gdGVpXCA7Civon7MgPiBqaW5cIDsKK+ifsSA+IGJvdVwgOwor6J+sID4gc2VuXCA7Civon6ogPiBrZWlcIDsKK+ifpCA+IHNlblwgOwor6J+gID4gaGFuXCA7Civon5ogPiBob3VcIDsKK+ifliA+IHNoaVwgOwor6J+VID4gc3VpXCA7Civon5IgPiBib3VcIDsKK+ifkCA+IHRvdVwgOwor6J+KID4gYm91XCA7Civon4EgPiBidW5cIDsKK+ieuyA+IHJvdVwgOwor6J6zID4gdG91XCA7Civonq8gPiBnb3VcIDsKK+ieriA+IHRlaVwgOwor6J6tID4gY2hpXCA7CivonqwgPiBzb3VcIDsKK+iepyA+IGViaVwgOwor6J6jID4gdG91XCA7Civonp8gPiBtZWlcIDsKK+ielyA+IHRvdVwgOwor6J6VID4gaGVpXCA7CivonowgPiBoYW5cIDsKK+ieiCA+IGdlblwgOwor6J6HID4ga2VpXCA7CivonoYgPiBzaGlcIDsKK+iehSA+IHNoaVwgOwor6J6EID4gc2hpXCA7CivonoMgPiBob3VcIDsKK+iegiA+IHJvdVwgOwor6J27ID4gbmFuXCA7CivonbEgPiBtb3VcIDsKK+idqiA+IHRvdVwgOwor6J2mID4gZWJpXCA7CivonaUgPiBib3VcIDsKK+idoyA+IHl1dVwgOwor6J2hID4gemVuXCA7CivonZcgPiBrb3VcIDsKK+idhSA+IHNhblwgOwor6J2DID4gdGVpXCA7CivonYAgPiB0b3VcIDsKK+icuiA+IGdlaVwgOwor6Jy5ID4gemVpXCA7CivonLcgPiBrZW5cIDsKK+ictCA+IGVraVwgOwor6JyvID4gaG91XCA7CivonKEgPiBzaG9cIDsKK+icnyA+IGlrdVwgOwor6JyWID4ga2FpXCA7CivonJUgPiB6ZWlcIDsKK+iclCA+IHRlblwgOwor6JyTID4gdGVuXCA7CivonJEgPiB0YW5cIDsKK+icjyA+IHl1dVwgOwor6JyNID4gc2hvXCA7CivonIsgPiByb3VcIDsKK+ibvSA+IGJhaVwgOwor6Ju8ID4gc2hhXCA7Civom7sgPiB6ZWlcIDsKK+ibryA+IGViaVwgOwor6JuuID4gYmFuXCA7Civom6cgPiBib3VcIDsKK+iboCA+IHJlaVwgOwor6JufID4ga291XCA7Civom5cgPiBodXVcIDsKK+iblSA+IGthaVwgOwor6JuUID4ga2FpXCA7Civom5EgPiBib3VcIDsKK+ibjiA+IHJlaVwgOwor6JuLID4gdGFuXCA7Civom4UgPiB6ZW5cIDsKK+ibgyA+IGhlaVwgOwor6JuAID4gc2h1XCA7Civomr8gPiBrZW5cIDsKK+iatyA+IGt5b1wgOwor6Jq2ID4ga2FuXCA7CivomrQgPiB5dXVcIDsKK+iasyA+IGNoaVwgOwor6JqwID4geXV1XCA7CivomqsgPiBob3VcIDsKK+iaqiA+IHRvdVwgOwor6JqpID4gc2hpXCA7CivomqcgPiBrYWlcIDsKK+iapiA+IHplblwgOwor6JqjID4ga291XCA7CivomqEgPiBodW5cIDsKK+iamCA+IGthaVwgOwor6JqWID4gZ2VuXCA7CivomowgPiBob3VcIDsKK+iaiCA+IGtlblwgOwor6Jm7ID4gYWJ1XCA7CivombcgPiBrYW5cIDsKK+iZtSA+IHNoYVwgOwor6JmkID4gZ2FuXCA7CivomaMgPiBob3VcIDsKK+iZoiA+IGhvdVwgOwor6JmhID4ga3lvXCA7CivomaAgPiBrb3VcIDsKK+iZmyA+IGt5b1wgOwor6JmXID4ga3lvXCA7CivomZQgPiBrZW5cIDsKK+iZkyA+IGtvdVwgOwor6JmSID4gc2hpXCA7CivomYYgPiBydWlcIDsKK+iZgCA+IHNlaVwgOwor6Ji4ID4gc2FuXCA7CivomK8gPiB0b3VcIDsKK+iYqSA+IGhhblwgOwor6JiiID4gcm91XCA7CivomJ4gPiByZW5cIDsKK+iYmyA+IGlrdVwgOwor6JiaID4gc2VuXCA7CivomJggPiBqb3VcIDsKK+iYkCA+IGtlblwgOwor6JiPID4ga2VpXCA7CivomI0gPiBrdW5cIDsKK+iYiyA+IGhpblwgOwor6JiFID4ga291XCA7Civol74gPiByYWlcIDsKK+iXvCA+IGtlblwgOwor6Je6ID4gcmluXCA7Civol7cgPiBzaG9cIDsKK+iXsyA+IGtvdVwgOwor6JefID4gcnVpXCA7Civol5ggPiByeW9cIDsKK+iXlSA+IGd1dVwgOwor6JePID4gem91XCA7Civol4ogPiBoZW5cIDsKK+iXhyA+IHNob1wgOwor6JeCID4gc291XCA7Civolr4gPiBzaGlcIDsKK+iWuSA+IHRhaVwgOwor6Ja2ID4gYmFpXCA7CivolrQgPiBub3VcIDsKK+iWsCA+IGt1blwgOwor6JatID4gaGFpXCA7CivolqsgPiBrdW5cIDsKK+iWqCA+IGtvdVwgOwor6JanID4ga291XCA7CivolqQgPiBrYWlcIDsKK+iWoiA+IGthaVwgOwor6JagID4gaGFuXCA7Civolp8gPiByZW5cIDsKK+iWnSA+IHNlblwgOwor6JaZID4gdGVpXCA7CivolpAgPiByb3VcIDsKK+iWiyA+IHNoaVwgOwor6JaJID4gd2FpXCA7CivologgPiBrYWlcIDsKK+iWhSA+IGtvdVwgOwor6JaBID4gaWt1XCA7Civolb8gPiBrZW5cIDsKK+iVvSA+IGRvdVwgOwor6JW7ID4ga291XCA7CivolbkgPiB5b3VcIDsKK+iVryA+IHJvdVwgOwor6JWrID4gdG91XCA7CivolaQgPiB6dWlcIDsKK+iVoiA+IGthaVwgOwor6JWhID4gaHVuXCA7CivolZ4gPiBzYWlcIDsKK+iVmSA+IGtlaVwgOwor6JWYID4gam91XCA7CivolZYgPiBreW9cIDsKK+iVlSA+IHl1dVwgOwor6JWSID4gYmFpXCA7CivolZEgPiBrYW5cIDsKK+iVjyA+IGNob1wgOwor6JWLID4genVpXCA7CivolYogPiB6dWlcIDsKK+iVhiA+IHRlblwgOwor6JWDID4gYmFuXCA7CivolYEgPiBqaW5cIDsKK+iUsyA+IHNlblwgOwor6JSyID4ga291XCA7CivolKogPiBzZW5cIDsKK+iUpyA+IHNlaVwgOwor6JSlID4gc291XCA7CivolKEgPiBzYWlcIDsKK+iUniA+IHJvdVwgOwor6JScID4gZ291XCA7CivolJcgPiBzaG9cIDsKK+iUkyA+IGJhblwgOwor6JSCID4gcnVpXCA7CivolIAgPiBob3VcIDsKK+iTuiA+IGdlaVwgOwor6JO3ID4gdGFpXCA7Civok7EgPiBoZWlcIDsKK+iTsCA+IHNoaVwgOwor6JOvID4gc291XCA7Civok6ogPiB0b3VcIDsKK+iTnCA+IGhhaVwgOwor6JOTID4gaGFpXCA7Civok40gPiBzaGlcIDsKK+iTiSA+IHlvdVwgOwor6JOIID4ga291XCA7Civok4IgPiBtZWlcIDsKK+iTgCA+IHNvblwgOwor6JK/ID4ga291XCA7Civokr4gPiBiZWlcIDsKK+iSuSA+IGtlblwgOwor6JKvID4ga2FpXCA7Civokq0gPiBzdXVcIDsKK+iSqCA+IHNlblwgOwor6JKhID4gaG91XCA7CivokpMgPiBqdW5cIDsKK+iSkiA+IHNoaVwgOwor6JKEID4ga2FuXCA7CivokoIgPiB0ZWlcIDsKK+iRvSA+IHlvdVwgOwor6JG8ID4gc291XCA7CivokbkgPiBzaGlcIDsKK+iRuCA+IHNhaVwgOwor6JG3ID4gZ3VuXCA7CivokbYgPiB0ZWlcIDsKK+iRtSA+IGFvaVwgOwor6JGwID4gc3VpXCA7Civoka4gPiB0YW5cIDsKK+iRqiA+IGtlaVwgOwor6JGlID4gc2VuXCA7CivokaIgPiBnYWlcIDsKK+iRmCA+IHNoaVwgOwor6JGSID4ga291XCA7CivokZEgPiBob3VcIDsKK+iRjyA+IHNlblwgOwor6JGIID4gc2hpXCA7CivokYcgPiBqdXVcIDsKK+iRhSA+IHNob1wgOwor6JC5ID4gaGVuXCA7CivokLEgPiBrZW5cIDsKK+iQryA+IGh1dVwgOwor6JCgID4gaG91XCA7CivokJUgPiBzZWlcIDsKK+iQkSA+IGthblwgOwor6JCPID4gdGFuXCA7CivokI0gPiBoZWlcIDsKK+iQiyA+IHNlaVwgOwor6JCKID4gcmFpXCA7CivokIMgPiBzdWlcIDsKK+iPvCA+IHRhblwgOwor6I+7ID4gcmluXCA7Civoj7kgPiBzaG9cIDsKK+iPtyA+IHNvdVwgOwor6I+2ID4gaG91XCA7Civoj6ogPiB0b3VcIDsKK+iPmCA+IHN1dVwgOwor6I+RID4gc2hpXCA7Civoj44gPiBrb25cIDsKK+iPjCA+IGtpblwgOwor6I+FID4ga2FuXCA7Civoj4EgPiBzZWlcIDsKK+iOvyA+IHNoaVwgOwor6I6+ID4gbW91XCA7Civojr0gPiBib3VcIDsKK+iOsSA+IHJhaVwgOwor6I6sID4gYnVuXCA7CivojqcgPiBrYW5cIDsKK+iOpiA+IHNvdVwgOwor6I6gID4geXV1XCA7Civojp8gPiBrYW5cIDsKK+iOniA+IGthblwgOwor6I6bID4gdGVpXCA7CivojpkgPiBraW5cIDsKK+iOliA+IGtlaVwgOwor6I6VID4ga291XCA7CivojpQgPiBtb3VcIDsKK+iOkyA+IG1haVwgOwor6I6SID4ga3lvXCA7CivojoogPiBzb3VcIDsKK+iOiSA+IGNoaVwgOwor6I6HID4gY2hvXCA7CivojoQgPiBrb3VcIDsKK+iNvyA+IHNlaVwgOwor6I27ID4gb2dpXCA7CivojbUgPiBqaW5cIDsKK+iNsyA+IHRvdVwgOwor6I2YID4gc291XCA7CivojZYgPiBob3VcIDsKK+iNlSA+IGtpblwgOwor6I2TID4gaGVpXCA7CivojZEgPiB0ZWlcIDsKK+iNkCA+IHNlblwgOwor6I2OID4gY2hpXCA7CivojYogPiBrZWlcIDsKK+iNhyA+IGtvdVwgOwor6I2GID4ga2VpXCA7CivojYUgPiB0b3VcIDsKK+iNhCA+IGthaVwgOwor6I2DID4gc2VuXCA7CivojYAgPiBqdW5cIDsKK+iMvCA+IHRvdVwgOwor6Iy3ID4gaGFpXCA7CivojLQgPiBrYWlcIDsKK+iMsyA+IGtvdVwgOwor6IyxID4gc2h1XCA7CivojKwgPiBzaGlcIDsKK+iMnSA+IHNhaVwgOwor6IybID4ga29uXCA7CivojJcgPiBtZWlcIDsKK+iMiyA+IHNoaVwgOwor6IyKID4gc2hpXCA7CivojIggPiBzaGlcIDsKK+iMhiA+IGJvdVwgOwor6IyDID4gaGFuXCA7Civoi7kgPiBoZWlcIDsKK+iLtyA+IGthblwgOwor6IuzID4gdG91XCA7Civoi68gPiBob25cIDsKK+iLrSA+IHlvdVwgOwor6IurID4gc2VuXCA7Civoi6ogPiBoZWlcIDsKK+iLqCA+IGRlaVwgOwor6IunID4gY2hvXCA7Civoi6MgPiBreW9cIDsKK+iLoCA+IGJpblwgOwor6IufID4ga291XCA7Civoi54gPiBob3VcIDsKK+iLmiA+IHlvdVwgOwor6IuTID4gcmVpXCA7Civoi5IgPiB6ZW5cIDsKK+iLkCA+IHRlaVwgOwor6IuFID4gZ2FpXCA7Civoir8gPiBqb3VcIDsKK+iKvCA+IGJvdVwgOwor6Iq7ID4gc3V1XCA7CivoircgPiBzaGlcIDsKK+iKriA+IHplaVwgOwor6IqsID4gZnVuXCA7CivoiqsgPiBnZW5cIDsKK+iKqSA+IGtpblwgOwor6IqnID4gY2hvXCA7CivoiqUgPiBrYWlcIDsKK+iKpCA+IGtvdVwgOwor6IqjID4gaHV1XCA7CivoiqEgPiBrZW5cIDsKK+iKoCA+IGJ1blwgOwor6IqfID4gc2FuXCA7CivoipogPiB0b25cIDsKK+iKliA+IGNoaVwgOwor6IqLID4gaW1vXCA7CivoioogPiBzZW5cIDsKK+iKiSA+IGthaVwgOwor6IqHID4gYmVuXCA7CivoioQgPiBrYW5cIDsKK+iKgyA+IGhvdVwgOwor6IqBID4ga291XCA7Civoib8gPiBqb3VcIDsKK+iJviA+IGdhaVwgOwor6ImxID4ga2FuXCA7Civoia4gPiBrb25cIDsKK+iJrSA+IHNvdVwgOwor6ImoID4gbW91XCA7CivoiaYgPiBrYW5cIDsKK+iJoCA+IHRvdVwgOwor6ImfID4gZG91XCA7CivoiZwgPiB0YWlcIDsKK+iJmiA+IHNvdVwgOwor6ImZID4gc291XCA7CivoiZggPiBzb3VcIDsKK+iJkSA+IGhlblwgOwor6ImOID4ga291XCA7CivoiYsgPiBtb3VcIDsKK+iJhyA+IHRlaVwgOwor6ImGID4gcm91XCA7CivoiYQgPiBzb3VcIDsKK+iIuiA+IGtvdVwgOwor6Ii3ID4ga2VuXCA7CivoiLIgPiByZWlcIDsKK+iIqyA+IGhvdVwgOwor6IipID4gc2VuXCA7CivoiKggPiBoYW5cIDsKK+iIoiA+IHNhblwgOwor6IihID4ga291XCA7CivoiJsgPiBzZW5cIDsKK+iImiA+IHRlblwgOwor6IiZID4ga3V1XCA7CivoiJggPiBrYW5cIDsKK+iIlCA+IHRlblwgOwor6IiTID4gc2hpXCA7CivoiJAgPiBzaGlcIDsKK+iIjSA+IHNoYVwgOwor6IiJID4ga3lvXCA7CivoiIAgPiB5b3VcIDsKK+iHvyA+IHNvdVwgOwor6Ie9ID4ga2FuXCA7Civoh7YgPiBzZW5cIDsKK+iHsSA+IGJlblwgOwor6IenID4gem91XCA7Civoh6QgPiBrYW5cIDsKK+iHoSA+IGRlaVwgOwor6IegID4gcmVuXCA7Civoh5ogPiByeW9cIDsKK+iHmCA+IHJvdVwgOwor6IeXID4ga29uXCA7Civoh5MgPiB6b3VcIDsKK+iHkSA+IGRhdVwgOwor6IePID4gaGluXCA7Civoh44gPiBzdWlcIDsKK+iHiyA+IGRlblwgOwor6IeKID4gc291XCA7Civoh4kgPiByZW5cIDsKK+iHiCA+IHJvdVwgOwor6IeGID4gb2t1XCA7Civoh4MgPiB5b3VcIDsKK+iHgCA+IGRlblwgOwor6Ia+ID4ga2FpXCA7CivohrsgPiB0YW5cIDsKK+iGuiA+IHlvdVwgOwor6Ia4ID4genVpXCA7CivohrUgPiBzdWlcIDsKK+iGsCA+IGhhblwgOwor6IaoID4gYm91XCA7CivohqIgPiByb3VcIDsKK+iGniA+IHNlblwgOwor6IabID4gdG91XCA7CivohpYgPiBob3VcIDsKK+iGkCA+IHJ5b1wgOwor6IaPID4ga291XCA7Civoho4gPiBrYWlcIDsKK+iGhSA+IHRvdVwgOwor6IaCID4gcnlvXCA7CivohoEgPiBrZW5cIDsKK+iGgCA+IGhvdVwgOwor6IW6ID4gc2VuXCA7CivohbEgPiBrZW5cIDsKK+iFqyA+IHNodVwgOwor6IWpID4gZGFuXCA7CivohaggPiBzZW5cIDsKK+iFpyA+IHNodVwgOwor6IWlID4gc2VpXCA7CivohaAgPiBzb3VcIDsKK+iFlCA+IGtvdVwgOwor6IWSID4ga3lvXCA7CivohY4gPiBqaW5cIDsKK+iFjCA+IHlvdVwgOwor6IWHID4gZGFpXCA7CivohYYgPiB0ZW5cIDsKK+iFhSA+IHRhblwgOwor6IWBID4gaGVuXCA7CivohLogPiB6ZWlcIDsKK+iEsCA+IHRvdVwgOwor6ISsID4gaG91XCA7CivohKcgPiBzYWlcIDsKK+iEoCA+IHNlblwgOwor6ISYID4ga2FuXCA7CivohJcgPiBidW5cIDsKK+iEhiA+IHplaVwgOwor6ISDID4gemVpXCA7Civog74gPiBzaGlcIDsKK+iDvCA+IGhlblwgOwor6IO2ID4ga291XCA7Civog7IgPiBrYWlcIDsKK+iDsSA+IGtvdVwgOwor6IOuID4gaG91XCA7Civog6UgPiBzaG9cIDsKK+iDoCA+IGt5b1wgOwor6IOdID4gY2hpXCA7Civog5sgPiBrb3VcIDsKK+iDmiA+IGhhaVwgOwor6IOYID4ga2VuXCA7Civog5YgPiBoYW5cIDsKK+iDlCA+IHNoaVwgOwor6IOSID4gZGVpXCA7Civog48gPiBzaGlcIDsKK+iCuiA+IGhhaVwgOwor6IKsID4geXV1XCA7CivogqogPiBib3VcIDsKK+iCpyA+IGhhaVwgOwor6IKmID4gZnVuXCA7CivogqIgPiBzaGlcIDsKK+iCnCA+IHl1dVwgOwor6IKbID4ga291XCA7CivogpMgPiBrb3VcIDsKK+iCjiA+IGtvdVwgOwor6IG5ID4gZGVpXCA7CivogbYgPiBqb3VcIDsKK+iBtSA+IGdhaVwgOwor6IGxID4gZ291XCA7CivogbAgPiBzb3VcIDsKK+iBryA+IHJlblwgOwor6IGuID4gcmVuXCA7CivogasgPiByZW5cIDsKK+iBqCA+IHJlblwgOwor6IGmID4gc291XCA7CivogaQgPiB0ZWlcIDsKK+iBoSA+IHNvdVwgOwor6IGgID4gaGVpXCA7CivogZ8gPiBzZWlcIDsKK+iBmCA+IGhlaVwgOwor6IGGID4gcmVpXCA7CivogL8gPiBrb3VcIDsKK+iAviA+IGtvdVwgOwor6IC8ID4gdGFuXCA7CivogLkgPiBraW5cIDsKK+iAtyA+IHRvdVwgOwor6IC1ID4gdGVpXCA7CivogLAgPiB5dXVcIDsKK+iAriA+IHJvdVwgOwor6ICsID4gcm91XCA7CivogKggPiBkb3VcIDsKK+iApiA+IGdvdVwgOwor6ICgID4ga291XCA7CivogJ8gPiBreW9cIDsKK+iAnSA+IHNob1wgOwor6ICcID4gc2hpXCA7CivogJcgPiBtb3VcIDsKK+iAliA+IHNvdVwgOwor6ICUID4gc2hpXCA7CivogJMgPiB0ZWlcIDsKK+iAkiA+IHJhaVwgOwor6ICRID4gdGFuXCA7CivogI4gPiB6ZW5cIDsKK+iAiSA+IGtvdVwgOwor6ICIID4ga291XCA7CivogIcgPiBrb3VcIDsKK+iAhCA+IG1vdVwgOwor6ICAID4geW91XCA7Civnv78gPiB0b3VcIDsKK+e/viA+IGtlblwgOwor57+9ID4ga2FpXCA7Civnv7ogPiBnb3VcIDsKK+e/sCA+IGthblwgOwor57+rID4gZ2FuXCA7Civnv6kgPiBoZW5cIDsKK+e/qCA+IHNoaVwgOwor57+mID4gc2VuXCA7Civnv6UgPiBzaG9cIDsKK+e/oyA+IHNvdVwgOwor57+gID4gc3VpXCA7Civnv5sgPiB5dXVcIDsKK+e/jiA+IHJlaVwgOwor57+IID4ga291XCA7Civnv4YgPiBzdWlcIDsKK+e/hSA+IHNoaVwgOwor57+DID4ga291XCA7Civnvr8gPiBnZWlcIDsKK+e+vCA+IHNhblwgOwor5764ID4gcnVpXCA7CivnvrYgPiBzZW5cIDsKK+e+tCA+IHNlblwgOwor576qID4geW91XCA7CivnvqYgPiBrYW5cIDsKK+e+oyA+IGd1blwgOwor576iID4gam91XCA7CivnvqEgPiBzZW5cIDsKK+e+nSA+IHRlaVwgOwor576cID4gY2hvXCA7CivnvpogPiByZWlcIDsKK+e+mCA+IHNvdVwgOwor576UID4ga291XCA7CivnvpEgPiB5dXVcIDsKK+e+kCA+IHl1dVwgOwor576PID4geW91XCA7CivnvoIgPiBrZW5cIDsKK+e9viA+IHNvdVwgOwor5729ID4ga2VpXCA7CivnvbIgPiBzaG9cIDsKK+e9sSA+IGd1blwgOwor572rID4ga2VpXCA7CivnvakgPiB0b3VcIDsKK+e9pSA+IGtlblwgOwor572kID4gdGVpXCA7CivnvaMgPiBrYWlcIDsKK+e9oSA+IGtvdVwgOwor572dID4gc2hhXCA7CivnvZwgPiBzaHVcIDsKK+e9lSA+IGthblwgOwor572UID4gbW91XCA7CivnvZMgPiBtb3VcIDsKK+e9kiA+IG1vdVwgOwor572RID4gYm91XCA7CivnvY0gPiByYWlcIDsKK+e9hyA+IHNvblwgOwor572EID4ga2VpXCA7CivnvL8gPiB0b3VcIDsKK+e8viA+IGhlaVwgOwor57y4ID4ga291XCA7CivnvLcgPiBzaGFcIDsKK+e8tiA+IGthblwgOwor57yQID4gc2VuXCA7Civnu7kgPiB0b3VcIDsKK+e6uyA+IGNob1wgOwor57quID4ga291XCA7Civnup4gPiByZW5cIDsKK+e6nSA+IHJ1aVwgOwor57qcID4gcmFuXCA7CivnupsgPiB0b3VcIDsKK+e6miA+IHNoaVwgOwor57qYID4gc2FiXCA7CivnupYgPiBzZW5cIDsKK+e6lCA+IHNhblwgOwor57qQID4ga291XCA7Civnuo4gPiBzZW5cIDsKK+e6jSA+IHJ1aVwgOwor57qKID4ga291XCA7CivnuokgPiBzYW5cIDsKK+e6hyA+IHJhaVwgOwor57qBID4ga3VuXCA7Civnub8gPiByYW5cIDsKK+e5viA+IHRlblwgOwor57m9ID4gaGluXCA7CivnubkgPiBla2lcIDsKK+e5uCA+IHN1aVwgOwor57mvID4ga2VuXCA7CivnuasgPiBrZWlcIDsKK+e5pCA+IHNhblwgOwor57miID4ga2FpXCA7CivnuZ8gPiBzZW5cIDsKK+e5nSA+IGthblwgOwor57mZID4gaGFuXCA7CivnuZYgPiBzYW5cIDsKK+e5kCA+IGtlaVwgOwor57mOID4gYmluXCA7CivnuYsgPiBrZWlcIDsKK+e5iiA+IHNlblwgOwor57mHID4geW91XCA7CivnuYUgPiBzb3VcIDsKK+e5gyA+IGhvdVwgOwor57i/ID4gc2FuXCA7CivnuLogPiByZW5cIDsKK+e4tSA+IGJhblwgOwor57i0ID4ga2VuXCA7CivnuLMgPiB0ZW5cIDsKK+e4siA+IHJ1aVwgOwor57ioID4ga291XCA7CivnuKcgPiB0b3VcIDsKK+e4oyA+IGtlblwgOwor57iiID4gdG91XCA7CivnuKEgPiBzYWlcIDsKK+e4lyA+IHNhaVwgOwor57iSID4gc2hpXCA7CivnuJEgPiBrZW5cIDsKK+e4hiA+IGtvdVwgOwor57iCID4gc291XCA7Civnt7sgPiBjaGlcIDsKK+e3uiA+IGthaVwgOwor57e5ID4gdGVpXCA7Civnt7YgPiBoZW5cIDsKK+e3tSA+IHNvdVwgOwor57exID4ga291XCA7Civnt6sgPiBzb3VcIDsKK+e3qiA+IGtvdVwgOwor57emID4gc2hpXCA7Civnt6UgPiBob3VcIDsKK+e3oiA+IGJvdVwgOwor57ehID4gYmluXCA7Civnt54gPiB0YW5cIDsKK+e3nCA+IGJlblwgOwor57eYID4ga2FuXCA7Civnt5YgPiBzaG9cIDsKK+e3jSA+IGJpblwgOwor57eMID4genVpXCA7Civnt4cgPiBzaGlcIDsKK+e3hCA+IGtvblwgOwor57eCID4gdGFuXCA7CivntrsgPiB0YW5cIDsKK+e2uCA+IHJpblwgOwor57a3ID4gc2FpXCA7CivntrUgPiBzYWlcIDsKK+e2syA+IGhvdVwgOwor57awID4gd2FuXCA7Civntq8gPiB0b3VcIDsKK+e2riA+IGtlaVwgOwor57arID4gc2VuXCA7CivntqogPiBzZW5cIDsKK+e2oyA+IGtlblwgOwor57afID4gcmVpXCA7CivntpwgPiBzb3VcIDsKK+e2lyA+IGdlaVwgOwor57aRID4ga29uXCA7Civnto8gPiBzdWlcIDsKK+e2iyA+IGtvdVwgOwor57aJID4gdG91XCA7CivntoggPiB0ZWlcIDsKK+e2hiA+IGtvdVwgOwor57aCID4gdG91XCA7CivntoEgPiBob3VcIDsKK+e1vSA+IHJ5b1wgOwor57W7ID4gYnVuXCA7CivntbogPiBjaGlcIDsKK+e1uCA+IGtlblwgOwor57WzID4ga291XCA7CivntacgPiB0b3VcIDsKK+e1oiA+IGtlblwgOwor57WbID4gam91XCA7CivntZogPiBrb3VcIDsKK+e1mSA+IGthblwgOwor57WWID4ga291XCA7CivntZMgPiBrYWlcIDsKK+e1kSA+IHNodVwgOwor57WOID4ga291XCA7CivntY0gPiBqaW5cIDsKK+e1iyA+IGtvdVwgOwor57WFID4ga2VpXCA7CivntYMgPiBnZW5cIDsKK+e1gSA+IHNoaVwgOwor57S/ID4gdGFpXCA7CivntLUgPiBjaG9cIDsKK+e0rSA+IGtvdVwgOwor57SqID4gc2VpXCA7CivntKMgPiBzYWlcIDsKK+e0oSA+IGJvdVwgOwor57SeID4gdGFuXCA7CivntJ0gPiBqaW5cIDsKK+e0mCA+IGtvdVwgOwor57STID4gc2hvXCA7CivntJIgPiBrZWlcIDsKK+e0kSA+IGh1dVwgOwor57SPID4gdG91XCA7CivntIogPiBiaW5cIDsKK+e0iSA+IGppblwgOwor57SIID4ga2FuXCA7Civns7sgPiBrZWlcIDsKK+ezsiA+IHJlaVwgOwor57OwID4gZGFuXCA7Civns6sgPiBrYWlcIDsKK+ezqSA+IGthaVwgOwor57OmID4gc2hpXCA7Civns6QgPiBzYW5cIDsKK+eznyA+IHNvdVwgOwor57OdID4gc2FuXCA7Civns5ogPiBzb3VcIDsKK+ezmSA+IHNvdVwgOwor57OVID4ga291XCA7Civns40gPiBzaGlcIDsKK+eziSA+IHNvdVwgOwor57OIID4gc2hvXCA7Civns4cgPiBrb3VcIDsKK+ezhSA+IGp1dVwgOwor57OEID4gaGVuXCA7Civns4IgPiBzYW5cIDsKK+eyvSA+IHNvdVwgOwor57K8ID4gcmluXCA7CivnsrogPiBoYWlcIDsKK+eyuSA+IHN1aVwgOwor57KzID4ga291XCA7CivnsrIgPiBzYW5cIDsKK+eysCA+IGZ1dVwgOwor57KmID4gcmluXCA7CivnsqIgPiBzaGlcIDsKK+eyoSA+IHRvdVwgOwor57KgID4ga291XCA7Civnsp4gPiBzZWlcIDsKK+eymCA+IG5lblwgOwor57KUID4ga3lvXCA7CivnsosgPiBpa2lcIDsKK+eyhyA+IGtvdVwgOwor57G9ID4gc2hpXCA7CivnsbwgPiBzZW5cIDsKK+exrSA+IHNoaVwgOwor57GpID4gaGVuXCA7CivnsacgPiBreW9cIDsKK+exoyA+IHJhblwgOwor57GfID4gcmFpXCA7CivnsZ4gPiBneW9cIDsKK+exmyA+IHNlblwgOwor57GYID4gdG91XCA7CivnsZMgPiBoYW5cIDsKK+exkSA+IHNlblwgOwor57GDID4gcmFuXCA7CivnsL0gPiBzZW5cIDsKK+ewuiA+IHNhaVwgOwor57C5ID4gdG91XCA7CivnsLQgPiBreW9cIDsKK+ewsyA+IGthblwgOwor57CnID4ga291XCA7CivnsKYgPiB0b3VcIDsKK+ewnyA+IHRlblwgOwor57CeID4gdGFuXCA7CivnsJsgPiBzaGlcIDsKK+ewkyA+IHNlblwgOwor57CSID4gc2FuXCA7CivnsI0gPiByb3VcIDsKK+ewhyA+IHNvdVwgOwor57CGID4ga291XCA7CivnsIEgPiBzaGlcIDsKK+evvCA+IHRvdVwgOwor56+6ID4gaGFpXCA7Civnr7kgPiBzYW5cIDsKK+evtyA+IGhvdVwgOwor56+1ID4gc291XCA7Civnr7IgPiBzdWlcIDsKK+evqiA+IGNoaVwgOwor56+oID4gY2hvXCA7Civnr6YgPiBoZWlcIDsKK+evoSA+IHNhblwgOwor56+dID4ga291XCA7Civnr5kgPiBrb3VcIDsKK+evliA+IHRvdVwgOwor56+PID4ga2FuXCA7Civnr4wgPiBrb3VcIDsKK+eviiA+IGtvdVwgOwor56+IID4gaG91XCA7Civnr4cgPiBoZW5cIDsKK+evhiA+IHRlblwgOwor56+FID4gc3VpXCA7Civnr4IgPiBzZWlcIDsKK+euvSA+IHRvdVwgOwor5668ID4gb2t1XCA7CivnrrUgPiBzZWlcIDsKK+eusiA+IHNlblwgOwor566vID4gaGVuXCA7Civnrq0gPiBzZW5cIDsKK+euoCA+IHN1aVwgOwor566fID4ga2luXCA7Civnrp4gPiBrZW5cIDsKK+eunSA+IGthblwgOwor566cID4ga291XCA7CivnrpggPiBraW5cIDsKK+euliA+IHJpblwgOwor566RID4gc291XCA7CivnrpAgPiBzZWlcIDsKK+eujyA+IHNvdVwgOwor566JID4ga2FpXCA7CivnroQgPiBoYWlcIDsKK+ettyA+IGthaVwgOwor562zID4gdGVpXCA7CivnrbIgPiBzb3VcIDsKK+etryA+IGNob1wgOwor562uID4gc2VpXCA7Civnra0gPiBzYW5cIDsKK+etrCA+IHNlaVwgOwor562qID4ga291XCA7CivnrakgPiB0b3VcIDsKK+etpiA+IGthblwgOwor562lID4ga3lvXCA7CivnraQgPiByb3VcIDsKK+etnSA+IHNvdVwgOwor562VID4ga291XCA7CivnrYwgPiBzZW5cIDsKK+ethSA+IHNlblwgOwor562AID4ga2VpXCA7CivnrLYgPiBzaGlcIDsKK+estSA+IGhhblwgOwor56yxID4ga291XCA7CivnrK0gPiByZWlcIDsKK+esqyA+IHNoaVwgOwor56yqID4gdGFuXCA7CivnrKkgPiBoYWlcIDsKK+esqCA+IGhvblwgOwor56yjID4gaG91XCA7CivnrJ4gPiBjaGlcIDsKK+esmSA+IHNvdVwgOwor56yYID4gc2VuXCA7CivnrIsgPiBqdW5cIDsKK+eshyA+IHNhblwgOwor56u+ID4gc2hpXCA7Civnq7wgPiBob3VcIDsKK+eruCA+IGtlaVwgOwor56uxID4gc2VuXCA7Civnq6sgPiBzZWlcIDsKK+eroiA+IHNoaVwgOwor56ubID4gcmVpXCA7Civnq5ogPiBjaG9cIDsKK+ermSA+IHRhblwgOwor56uRID4ga291XCA7Civnq44gPiBmdXVcIDsKK+erjCA+IHNob1wgOwor56uJID4gcm91XCA7Civnq4cgPiB0b3VcIDsKK+erhCA+IHphblwgOwor56q8ID4gc291XCA7CivnqrsgPiBzb3VcIDsKK+eqsCA+IHlvdVwgOwor56qeID4gdGFuXCA7CivnqpggPiBraW5cIDsKK+eqlyA+IHNvdVwgOwor56qWID4ga291XCA7CivnqpQgPiB5b3VcIDsKK+eqkSA+IHlvdVwgOwor56qQID4ga2VpXCA7CivnqoggPiB5b3VcIDsKK+eqhiA+IGJpblwgOwor56qFID4geW91XCA7CivnqoIgPiByb3VcIDsKK+epviA+IHlvdVwgOwor56m9ID4gc2VpXCA7CivnqbAgPiBqb3VcIDsKK+eprSA+IHJ5b1wgOwor56mnID4gc2VpXCA7CivnqaMgPiBqb3VcIDsKK+epoCA+IGpvdVwgOwor56mfID4gc3VpXCA7CivnqZ0gPiBzYWlcIDsKK+epnCA+IHRvdVwgOwor56mIID4gYm9uXCA7CivnqYcgPiBzYW5cIDsKK+ephSA+IGtvdVwgOwor56mEID4gc2VpXCA7CivnqYMgPiB5b3VcIDsKK+eoviA+IGtvdVwgOwor56i6ID4gY2hpXCA7CivnqLUgPiBzaGlcIDsKK+eotCA+IHJlblwgOwor56iwID4gc2hvXCA7CivnqK8gPiBzb3VcIDsKK+eopyA+IGtlaVwgOwor56ifID4gcmluXCA7CivnqJsgPiBrb25cIDsKK+eolyA+IGhpZVwgOwor56iUID4gamluXCA7CivnqIogPiB0ZWlcIDsKK+eoiSA+IGtvdVwgOwor56iIID4ga2FuXCA7CivnqIcgPiBrb25cIDsKK+eohSA+IHplaVwgOwor56iCID4gcm91XCA7Civnp7wgPiBzaHVcIDsKK+ensSA+IHRvdVwgOwor56etID4gc2hpXCA7Civnp6wgPiBreW9cIDsKK+enqiA+IGNoaVwgOwor56elID4gZGVuXCA7Civnp6IgPiByZWlcIDsKK+enniA+IHl1dVwgOwor56eaID4gaGFuXCA7Civnp5YgPiBzaGlcIDsKK+enlCA+IGtvdVwgOwor56ePID4ga291XCA7Civnp4ogPiBuZW5cIDsKK+eniSA+IGhlaVwgOwor56eIID4gc2VuXCA7Civnp4cgPiBnZWlcIDsKK+enhCA+IHNoaVwgOwor56eCID4gamluXCA7CivnprsgPiBjaGlcIDsKK+emuiA+IGd1dVwgOwor56a4ID4ganV1XCA7CivnprMgPiBqb3VcIDsKK+emsSA+IHRvdVwgOwor56avID4gam91XCA7CivnpqsgPiB0YW5cIDsKK+emqiA+IHplblwgOwor56apID4gc2hpXCA7CivnpqYgPiBneW9cIDsKK+emmCA+IHRlaVwgOwor56aWID4gYmFpXCA7CivnppQgPiBzaGlcIDsKK+emkyA+IHlvdVwgOwor56aOID4gdGVpXCA7CivnpowgPiBzaGlcIDsKK+emgCA+IHJpblwgOwor56W8ID4ga2FuXCA7CivnpbkgPiB0b3VcIDsKK+elqyA+IGtvdVwgOwor56WpID4gc2h1XCA7CivnpaIgPiBkZWlcIDsKK+eloCA+IHNoaVwgOwor56WfID4gc3VpXCA7CivnpZsgPiBreW9cIDsKK+elmCA+IHNhblwgOwor56WXID4gc2hpXCA7CivnpZAgPiB5dXVcIDsKK+eliyA+IHRhaVwgOwor56WKID4gaG91XCA7CivnpYkgPiBzaGlcIDsKK+elhiA+IGtlblwgOwor56WFID4geW91XCA7CivnpYQgPiBrYWlcIDsKK+elgCA+IHNoaVwgOwor56S9ID4gam91XCA7CivnpLsgPiBzaGlcIDsKK+ektSA+IHNvdVwgOwor56SxID4gcm91XCA7CivnpKwgPiBiYW5cIDsKK+ekqiA+IHJlaVwgOwor56SnID4gcmFpXCA7CivnpKYgPiBrb3VcIDsKK+ekpSA+IGtpblwgOwor56SfID4gaG91XCA7CivnpJ4gPiBib3VcIDsKK+ekmiA+IGthaVwgOwor56SRID4gdG91XCA7CivnpIwgPiByYWlcIDsKK+ekhyA+IGlrdVwgOwor56SGID4ga2VuXCA7CivnpIAgPiBrYW5cIDsKK+ejvSA+IGtvdVwgOwor56O7ID4gaGFuXCA7Civno7ogPiBrb3VcIDsKK+ejtyA+IHJpblwgOwor56O0ID4gdG91XCA7Civno7MgPiBzb3VcIDsKK+ejsiA+IGt5b1wgOwor56OsID4ga2VpXCA7Civno6ogPiBzYWlcIDsKK+ejoSA+IGthblwgOwor56ObID4gc2FuXCA7Civno5ogPiBzZW5cIDsKK+ejliA+IHJvdVwgOwor56OVID4ga2FpXCA7Civno5MgPiB0YWlcIDsKK+ejkSA+IGdhaVwgOwor56OOID4ga2VpXCA7Civno4wgPiB0ZW5cIDsKK+ejiiA+IHJhaVwgOwor56OJID4gc291XCA7Civno4cgPiBoZWlcIDsKK+ejhSA+IGhvdVwgOwor56K+ID4gdGVuXCA7Civnor0gPiBrb3VcIDsKK+eisyA+IHRhblwgOwor56KyID4gdGVpXCA7CivnorEgPiBrZW5cIDsKK+eisCA+IGhvdVwgOwor56KvID4gZG91XCA7Civnoq0gPiB0b3VcIDsKK+eiqCA+IHdhaVwgOwor56KeID4gZ2FuXCA7Civnop0gPiB6ZW5cIDsKK+eimiA+IGhhaVwgOwor56KYID4gdGVuXCA7CivnopMgPiB0YWlcIDsKK+eijiA+IHNhaVwgOwor56KNID4gZ2FpXCA7CivnooogPiBzZW5cIDsKK+eihyA+IHRlaVwgOwor56G8ID4gaG91XCA7Civnoa8gPiBrZW5cIDsKK+ehqCA+IHNoYVwgOwor56GkID4ga291XCA7CivnoaMgPiBrb3VcIDsKK+ehoSA+IGtvdVwgOwor56GgID4gcm91XCA7CivnoZwgPiBrb3VcIDsKK+ehmSA+IGdhaVwgOwor56GSID4gc2VpXCA7CivnoY8gPiBrZW5cIDsKK+ehjiA+IGtlaVwgOwor56GHID4gZG91XCA7CivnoYUgPiBrZWlcIDsKK+ehhCA+IGtvdVwgOwor56GDID4gc2h1XCA7CivnoL8gPiBrb3VcIDsKK+eguiA+IHJlaVwgOwor56CyID4gaG91XCA7CivnoLAgPiBob3VcIDsKK+egrSA+IGhlblwgOwor56CgID4gc2hvXCA7CivnoI4gPiBrYWlcIDsKK+egjSA+IGthblwgOwor56CMID4gc2VpXCA7CivnoIUgPiByZWlcIDsKK+efvCA+IGtvdVwgOwor55+4ID4ga2FuXCA7Civnn7QgPiB0ZWlcIDsKK+efsCA+IHNvdVwgOwor55+uID4gd2FpXCA7Civnn6YgPiBrb3VcIDsKK+efmSA+IGthblwgOwor55+VID4gYmFuXCA7Civnn5IgPiBib3VcIDsKK+efiSA+IGhpblwgOwor55+IID4gYmVuXCA7Civnn4cgPiBtb3VcIDsKK+efgyA+IGdlaVwgOwor5561ID4gcmluXCA7CivnnrEgPiB5b3VcIDsKK+eesCA+IGthblwgOwor556vID4ga2FuXCA7CivnnqogPiBkb3VcIDsKK+eeoiA+IGJvdVwgOwor556eID4gYmFuXCA7CivnnpEgPiBtZWlcIDsKK+eejSA+IHNvdVwgOwor556MID4ga291XCA7CivnnoAgPiBib3VcIDsKK+edviA+IGtvdVwgOwor5529ID4ga2VpXCA7CivnnbogPiBrb3VcIDsKK+edtCA+IGtvblwgOwor552zID4ga2VpXCA7CivnnbIgPiBzZWlcIDsKK+edrCA+IHNhaVwgOwor552qID4gZWtpXCA7CivnnacgPiBrb25cIDsKK+edpSA+IGhlaVwgOwor552kID4gaGVpXCA7CivnnaAgPiBrZW5cIDsKK+ednyA+IHN1aVwgOwor552eID4gcmFpXCA7CivnnZwgPiBzZWlcIDsKK+edmyA+IHNlaVwgOwor552aID4gZ2FpXCA7CivnnZIgPiBzZW5cIDsKK+edjyA+IGtvblwgOwor552NID4ga2VuXCA7CivnnYcgPiB0ZWlcIDsKK+edhiA+IGthblwgOwor552FID4ga2FuXCA7CivnnLggPiBib3VcIDsKK+ectyA+IGtlblwgOwor55y1ID4gc2hpXCA7CivnnLQgPiBrZW5cIDsKK+ecryA+IGJlaVwgOwor55yuID4gdG91XCA7CivnnKggPiBzb3VcIDsKK+ecpiA+IHNlaVwgOwor55ylID4gc2VpXCA7CivnnKQgPiB0ZWlcIDsKK+ecoiA+IHdhblwgOwor55ybID4gbWFpXCA7CivnnJogPiBzZWlcIDsKK+ecmSA+IGNoaVwgOwor55yUID4gdG91XCA7CivnnI4gPiBzaGlcIDsKK+eciiA+IGJvdVwgOwor55yIID4gdGFuXCA7CivnnIYgPiBob3VcIDsKK+echCA+IGJlblwgOwor55yAID4gYmVpXCA7Civnm7wgPiBoYW5cIDsKK+ebuyA+IGtlaVwgOwor55u2ID4gZ2luXCA7Civnm7AgPiBrYW5cIDsKK+ebqiA+IHRvdVwgOwor55uoID4gc2h1XCA7Civnm6QgPiBiYW5cIDsKK+eboCA+IHJlaVwgOwor55ufID4gbWVpXCA7Civnm54gPiBzYW5cIDsKK+ebliA+IGdhaVwgOwor55uUID4ga2FpXCA7Civnm5IgPiBrb3VcIDsKK+ebjSA+IGtvdVwgOwor55uMID4gd2FuXCA7Civnmr0gPiB0ZW5cIDsKK+eaqCA+IHNlaVwgOwor55qlID4ga291XCA7CivnmqMgPiB5b3VcIDsKK+eaoCA+IHNhaVwgOwor55qdID4ga291XCA7CivnmpwgPiBrb3VcIDsKK+eamiA+IGdhaVwgOwor55qWID4ga2FuXCA7CivnmpMgPiBrb3VcIDsKK+eakCA+IGtvdVwgOwor55qOID4ga291XCA7CivnmosgPiBrb3VcIDsKK+eahSA+IGhhZVwgOwor55qDID4gYm91XCA7CivnmoEgPiBzb3VcIDsKK+eZtCA+IHJlblwgOwor55myID4gdGVuXCA7CivnmbEgPiB0YW5cIDsKK+eZsCA+IHlvdVwgOwor55msID4gc2VuXCA7CivnmakgPiByYWlcIDsKK+eZoiA+IHlvdVwgOwor55mhID4gY2hpXCA7CivnmZwgPiBkZW5cIDsKK+eZmSA+IHNob1wgOwor55mYID4gcmVpXCA7CivnmZUgPiB5b3VcIDsKK+eZiSA+IHRhblwgOwor55mIID4gaGFpXCA7CivnmYYgPiByb3VcIDsKK+eZgCA+IGtvdVwgOwor55i7ID4gcm91XCA7CivnmLogPiByb3VcIDsKK+eYtSA+IHNhaVwgOwor55iwID4gcnVpXCA7CivnmKkgPiB0b3VcIDsKK+eYpiA+IHNvdVwgOwor55ijID4ga2FpXCA7CivnmKIgPiBoYW5cIDsKK+eYoSA+IHNvdVwgOwor55idID4ga2FuXCA7CivnmJsgPiBzZWlcIDsKK+eYmSA+IHNvdVwgOwor55iTID4gdGFuXCA7CivnmJIgPiBnb25cIDsKK+eYjSA+IHlvdVwgOwor55iLID4gZnV1XCA7CivnmIogPiBrb3VcIDsKK+eYiCA+IGtlaVwgOwor55iBID4gc3VpXCA7Civnl7MgPiByaW5cIDsKK+eXsCA+IHRhblwgOwor55evID4ga2FuXCA7Civnl6wgPiBla2lcIDsKK+eXoyA+IGF6YVwgOwor55egID4gc2FuXCA7Civnl5kgPiBrZWlcIDsKK+eXmCA+IHRvdVwgOwor55eXID4gYmFpXCA7Civnl44gPiBrYWlcIDsKK+eXjCA+IHRvdVwgOwor55eKID4gc2VuXCA7Civnl4MgPiBrZW5cIDsKK+eXgSA+IHNlblwgOwor55a9ID4gc2hvXCA7CivnlrwgPiB0b3VcIDsKK+eWuiA+IGhvdVwgOwor55a4ID4gdGFuXCA7CivnlrUgPiBzaGlcIDsKK+eWsyA+IGthblwgOwor55axID4gaG91XCA7CivnlqsgPiBla2lcIDsKK+eWpSA+IGthaVwgOwor55ajID4gaWJvXCA7Civnlp0gPiBzYW5cIDsKK+eWkyA+IHphaVwgOwor55aQID4gY2hpXCA7CivnlokgPiBqb3VcIDsKK+eWgiA+IGpvdVwgOwor55aBID4gcnl1XCA7Civnlb4gPiBzdWlcIDsKK+eVvSA+IHRvblwgOwor55WkID4gc2hpXCA7CivnlaEgPiBrYWlcIDsKK+eVniA+IGJvdVwgOwor55WaID4gaG9uXCA7CivnlZcgPiB0b3VcIDsKK+eVjiA+IGtlblwgOwor55WNID4ga2FpXCA7CivnlYsgPiB0ZW5cIDsKK+eViiA+IGtvdVwgOwor55WIID4gaGFuXCA7CivnlL8gPiBtb3VcIDsKK+eUviA+IHNoaVwgOwor55S9ID4ga2VuXCA7CivnlLkgPiBoZWlcIDsKK+eUuCA+IHRlblwgOwor55S0ID4gc291XCA7CivnlK8gPiBuZWlcIDsKK+eUrCA+IHlvdVwgOwor55SkID4genVpXCA7CivnlKIgPiBzYW5cIDsKK+eUoCA+IHNlaVwgOwor55ScID4gdGVuXCA7CivnlJsgPiB0ZW5cIDsKK+eUlyA+IGdlblwgOwor55SRID4gc291XCA7CivnlI4gPiBzZW5cIDsKK+eUjSA+IGJvdVwgOwor55SGID4gc2hpXCA7CivnlIQgPiBrZW5cIDsKK+eUgSA+IGhlaVwgOwor55O/ID4gaG91XCA7Civnk7sgPiBjaGlcIDsKK+eTtyA+IHNoaVwgOwor55O0ID4gcmlpXCA7Civnk7IgPiB0b25cIDsKK+eTqyA+IGhvblwgOwor55OqID4gaGFuXCA7Civnk6ggPiBrb3VcIDsKK+eToyA+IGJlblwgOwor55ObID4ga2FuXCA7Civnk5ogPiBzYW5cIDsKK+eTmCA+IGthblwgOwor55OTID4gcmFuXCA7Civnk48gPiByb3VcIDsKK+eTjCA+IGthaVwgOwor55OKID4ga2VpXCA7Civnk4kgPiBzYW5cIDsKK+eTiCA+IHJlaVwgOwor55K/ID4gc2VuXCA7CivnkrsgPiBzdWlcIDsKK+eSsiA+IHN1aVwgOwor55KvID4ga2FpXCA7Civnkq4gPiB0YW5cIDsKK+eSqyA+IHRvdVwgOwor55KqID4gc291XCA7CivnkqkgPiBreW9cIDsKK+eSqCA+IHNhblwgOwor55KgID4gaGFuXCA7CivnkpwgPiBrb3VcIDsKK+eSmiA+IGtlaVwgOwor55KYID4gcmluXCA7CivnkpIgPiB0b3VcIDsKK+eSjyA+IHRlaVwgOwor55KJID4gcmluXCA7CivnkocgPiBzZW5cIDsKK+eShSA+IHNvdVwgOwor55KBID4gc291XCA7CivnkoAgPiBzYWlcIDsKK+eRviA+IGtpblwgOwor55G2ID4geW91XCA7CivnkbEgPiB0ZW5cIDsKK+eRsCA+IGthaVwgOwor55GvID4gcm91XCA7Civnka0gPiB0b3VcIDsKK+eRqyA+IHRvdVwgOwor55GkID4geW91XCA7CivnkaIgPiB5b3VcIDsKK+eRniA+IHp1aVwgOwor55GdID4ga291XCA7CivnkZkgPiBkb3VcIDsKK+eRkSA+IHRlblwgOwor55GNID4ga2FuXCA7CivnkYcgPiB0YWlcIDsKK+eRhiA+IHNlaVwgOwor55GFID4gdGVpXCA7CivnkYQgPiBzZW5cIDsKK+eRgSA+IGJvdVwgOwor55C/ID4ga29uXCA7CivnkLogPiBob3VcIDsKK+eQuSA+IGtpblwgOwor55CzID4gcmluXCA7CivnkK8gPiBrYW5cIDsKK+eQriA+IHNvdVwgOwor55CrID4gaG91XCA7CivnkKggPiBrb25cIDsKK+eQpCA+IHNvdVwgOwor55CaID4ga3lvXCA7CivnkIUgPiByb3VcIDsKK+eQhCA+IGtlblwgOwor55CBID4gemVuXCA7CivnkIAgPiBrYW5cIDsKK+ePvSA+IHRlaVwgOwor54+7ID4gYmFpXCA7Civnj7ogPiBrdW5cIDsKK+ePuSA+IHNlaVwgOwor54+1ID4gdGVpXCA7Civnj64gPiBoYWlcIDsKK+ePrSA+IGhhblwgOwor54+pID4ga291XCA7Civnj6cgPiB5b3VcIDsKK+ePoiA+IGdpblwgOwor54+hID4ga2luXCA7Civnj6AgPiBzaHVcIDsKK+ePliA+IGtvdVwgOwor54+TID4ga291XCA7Civnj4ogPiBzYW5cIDsKK+ePiSA+IGJpblwgOwor5469ID4ga291XCA7CivnjrwgPiBzZWlcIDsKK+eOuSA+IGtlblwgOwor5463ID4gdGVuXCA7CivnjrUgPiBnYW5cIDsKK+eOsyA+IHRhaVwgOwor546yID4gcmVpXCA7Civnjq0gPiBoaW5cIDsKK+eOqyA+IGJhaVwgOwor546qID4ga2FuXCA7CivnjqIgPiBoaW5cIDsKK+eOoCA+IGthaVwgOwor546fID4gYmluXCA7CivnjpwgPiBrb3VcIDsKK+eOlSA+IGthblwgOwor546OID4gdGVpXCA7CivnjoEgPiBrZW5cIDsKK+eNtyA+IGtvdVwgOwor542xID4gaGluXCA7CivnjbAgPiBkb3VcIDsKK+eNryA+IGt1blwgOwor542uID4gc2VuXCA7CivnjawgPiBrYWlcIDsKK+eNqyA+IGtlblwgOwor542qID4ga2FpXCA7CivnjakgPiB3YWlcIDsKK+eNpyA+IGtlblwgOwor542eID4gdG91XCA7CivnjZggPiBoZWlcIDsKK+eNliA+IGZ1blwgOwor542SID4gZ291XCA7CivnjYogPiBzb3VcIDsKK+eNhSA+IHNoaVwgOwor542DID4gZ2FpXCA7CivnjL0gPiBiZWlcIDsKK+eMuyA+IHNvblwgOwor54y6ID4geW91XCA7CivnjLcgPiB5dXVcIDsKK+eMtSA+IGhlblwgOwor54y0ID4ga291XCA7CivnjLEgPiBkb3VcIDsKK+eMryA+IHRhblwgOwor54yuID4ga2VuXCA7CivnjKkgPiBzZWlcIDsKK+eMpSA+IHdhaVwgOwor54yeID4gc2hhXCA7CivnjJsgPiBtb3VcIDsKK+eMmSA+IHNvdVwgOwor54yYID4gc2VpXCA7CivnjI0gPiByYWlcIDsKK+eMiiA+IGdlaVwgOwor54yFID4gaGFpXCA7CivnjIQgPiBrZWlcIDsKK+eMgiA+IGthblwgOwor54u+ID4gc2VpXCA7Civni7sgPiBzYW5cIDsKK+eLuiA+IGdlblwgOwor54u3ID4ga2VuXCA7Civni7QgPiBoZWlcIDsKK+eLqSA+IHNodVwgOwor54ugID4gZ2FuXCA7Civni58gPiBrYW5cIDsKK+eLnSA+IHNlblwgOwor54uWID4geXV1XCA7Civni44gPiBrb3VcIDsKK+eLjCA+IHNlaVwgOwor54uAID4gam91XCA7Civnir4gPiBnaW5cIDsKK+eKuSA+IHl1dVwgOwor54q0ID4ga2FuXCA7CivnirIgPiBzYWlcIDsKK+eKmyA+IGJvdVwgOwor54qSID4ga291XCA7Civnio4gPiBob3VcIDsKK+eKjSA+IGtlblwgOwor54qJID4ganVuXCA7CivniocgPiBob25cIDsKK+eKgCA+IHNhaVwgOwor54m9ID4ga2VuXCA7CivnibwgPiBrb3VcIDsKK+eJuyA+IGJvdVwgOwor54m4ID4gc2hpXCA7CivnibcgPiBzZW5cIDsKK+eJtCA+IHRlaVwgOwor54muID4gc2VuXCA7CivniawgPiBoYWlcIDsKK+eJqCA+IGtvdVwgOwor54mjID4gamluXCA7CivniZ8gPiBib3VcIDsKK+eJnSA+IGhpblwgOwor54maID4gdG91XCA7CivniZYgPiB5dXVcIDsKK+eJlSA+IHNvdVwgOwor54mTID4gYm91XCA7CivniZAgPiBzb3VcIDsKK+eJjyA+IGNodVwgOwor54mOID4gc291XCA7CivniYsgPiBzZW5cIDsKK+eJhSA+IHlvdVwgOwor54mCID4gc291XCA7CivniLwgPiBzaG9cIDsKK+eIuyA+IGtvdVwgOwor54ioID4gc2FuXCA7CivniKQgPiByYW5cIDsKK+eInyA+IGthblwgOwor54iXID4geW91XCA7CivniIkgPiByb3VcIDsKK+eIiCA+IHJ5b1wgOwor54e/ID4geW91XCA7Civnh74gPiB0b3VcIDsKK+eHvCA+IGppblwgOwor54e5ID4gc2VuXCA7Civnh6cgPiBzdWlcIDsKK+eHpiA+IHNhblwgOwor54elID4gc291XCA7Civnh6AgPiBva2lcIDsKK+eHnCA+IG1vblwgOwor54eZID4gdG91XCA7Civnh5cgPiByYW5cIDsKK+eHlCA+IGhhblwgOwor54eTID4gZnVuXCA7Civnh5AgPiByaW5cIDsKK+eHjCA+IGZ1blwgOwor54eJID4gdG9uXCA7Civnh4EgPiB5b3VcIDsKK+eHgCA+IHNlblwgOwor54a/ID4ga291XCA7Civnhr4gPiBzaGlcIDsKK+eGsyA+IG1hblwgOwor54ayID4ga2VpXCA7Civnhq8gPiB6ZW5cIDsKK+eGrCA+IGdvdVwgOwor54aiID4gaG91XCA7CivnhqAgPiB5dXVcIDsKK+eGlSA+IGtvdVwgOwor54aUID4geW91XCA7CivnhpIgPiBrZWlcIDsKK+eGjyA+IGt1blwgOwor54aMID4gc2VuXCA7CivnhoAgPiB5b3VcIDsKK+eFuSA+IGtvdVwgOwor54WsID4geW91XCA7CivnhaggPiB3YWlcIDsKK+eFpSA+IGthblwgOwor54WiID4ga2VpXCA7CivnhaAgPiB5b3VcIDsKK+eFnCA+IGlrdVwgOwor54WaID4ga2VpXCA7CivnhZcgPiBkYW5cIDsKK+eFliA+IGRhblwgOwor54WRID4gc2hhXCA7CivnhYwgPiBrb3VcIDsKK+eFiyA+IHNlaVwgOwor54WKID4ga2VuXCA7CivnhYkgPiByZW5cIDsKK+eFhSA+IHRhblwgOwor54StID4ga2VpXCA7CivnhKAgPiBzYWlcIDsKK+eEniA+IHRvblwgOwor54ScID4ga29uXCA7CivnhJkgPiBob3VcIDsKK+eElSA+IGthblwgOwor54SLID4gc291XCA7CivnhIQgPiBrdW5cIDsKK+eDvSA+IGhvdVwgOwor54O6ID4ga291XCA7Civng7kgPiBob3VcIDsKK+eDsSA+IGtlaVwgOwor54OkID4ga291XCA7Civng50gPiBqb3VcIDsKK+eDnCA+IHRlblwgOwor54OYID4ga291XCA7Civng5YgPiBzYWlcIDsKK+eDlCA+IHRvdVwgOwor54ORID4geW91XCA7Civng4sgPiBrb3VcIDsKK+eDiiA+IHlvdVwgOwor54OJID4ga2FuXCA7CivngrcgPiBzaHVcIDsKK+eCtCA+IHlvdVwgOwor54KzID4gaGVpXCA7CivngrEgPiB0YWlcIDsKK+eCsCA+IGhvdVwgOwor54KvID4ga2VpXCA7Civngq4gPiBob3VcIDsKK+eCqyA+IGtlblwgOwor54KbID4geW91XCA7CivngpkgPiBzaGFcIDsKK+eCmCA+IGtpblwgOwor54KXID4ga291XCA7CivngpYgPiB0b25cIDsKK+eClSA+IGtvdVwgOwor54KUID4ga2VpXCA7CivngpIgPiBzb3VcIDsKK+eChiA+IGJ1blwgOwor54KFID4ga2VpXCA7Civngb4gPiBzYWlcIDsKK+eBtiA+IHNvdVwgOwor54G1ID4gcmVpXCA7Civnga4gPiBrb3VcIDsKK+eBpCA+IHJhblwgOwor54GjID4gd2FuXCA7CivngZ0gPiBrb3VcIDsKK+eBmCA+IGRhblwgOwor54GRID4gc2FpXCA7CivngYsgPiBob3VcIDsKK+eBiiA+IHNlblwgOwor54GJID4geW91XCA7CivngYMgPiBodXVcIDsKK+eAviA+IHJhblwgOwor54C8ID4gam91XCA7CivngLIgPiByZW5cIDsKK+eAqCA+IHJhaVwgOwor54CmID4gY2hvXCA7CivngKMgPiBrYWlcIDsKK+eAniA+IGpvdVwgOwor54CaID4ga2FuXCA7CivngJcgPiBrZW5cIDsKK+eAjSA+IHRlblwgOwor54CJID4gc2hhXCA7CivngIEgPiB5b3VcIDsKK+eAgCA+IHl1dVwgOwor5r++ID4gcnlvXCA7Civmv70gPiBzYW5cIDsKK+a/tSA+IGhpblwgOwor5r+zID4gc2VuXCA7Civmv6sgPiByYW5cIDsKK+a/qCA+IHNoaVwgOwor5r+kID4gdG91XCA7Civmv6AgPiBnb3VcIDsKK+a/lCA+IGRlaVwgOwor5r+KID4ga2FpXCA7Civmv4YgPiBmdW5cIDsKK+a/giA+IHJlblwgOwor5r62ID4gc2VuXCA7CivmvrMgPiBpa3VcIDsKK+a+sSA+IHRlblwgOwor5r6wID4gcmVuXCA7Civmvq8gPiBzYW5cIDsKK+a+riA+IGthaVwgOwor5r6qID4gcmVpXCA7CivmvqggPiBzZWlcIDsKK+a+pyA+IHJlaVwgOwor5r6lID4ga2FpXCA7CivmvqMgPiBrYW5cIDsKK+a+oSA+IHNvdVwgOwor5r6fID4gcmluXCA7CivmvpogPiBpa3VcIDsKK+a+lyA+IGthblwgOwor5r6WID4ga2FuXCA7CivmvpQgPiBrb3VcIDsKK+a+kiA+IGtvdVwgOwor5r6OID4gaG91XCA7Civmvo0gPiBzaHVcIDsKK+a+jCA+IHNoaVwgOwor5r6LID4ga291XCA7CivmvocgPiByb3VcIDsKK+a+gyA+IGdlaVwgOwor5r6BID4ganV1XCA7CivmvoAgPiBqdXVcIDsKK+a9viA+IHJpblwgOwor5r28ID4gZG91XCA7CivmvbogPiBzYW5cIDsKK+a9uCA+IHNhblwgOwor5r20ID4gY2hvXCA7Civmva8gPiBqaW5cIDsKK+a9rSA+IHRhblwgOwor5r2sID4gdGFuXCA7CivmvaggPiBzb3VcIDsKK+a9piA+IHJvdVwgOwor5r2kID4ganVuXCA7CivmvaIgPiBrb3VcIDsKK+a9oSA+IHRvblwgOwor5r2bID4gc2VuXCA7CivmvZggPiBoYW5cIDsKK+a9kyA+IGtlaVwgOwor5r2SID4gdG91XCA7CivmvYUgPiBrYW5cIDsKK+a9gCA+IHNvdVwgOwor5ry+ID4geW91XCA7CivmvLwgPiBzYWlcIDsKK+a8tiA+IGthblwgOwor5ryxID4gc291XCA7CivmvLAgPiBob3VcIDsKK+a8ryA+IHRvdVwgOwor5rytID4gYm91XCA7CivmvKsgPiBtYW5cIDsKK+a8qSA+IHNlblwgOwor5rybID4gdG91XCA7CivmvJYgPiBrb3VcIDsKK+a8kSA+IGdhaVwgOwor5ryMID4ga2luXCA7CivmvIggPiBzZWlcIDsKK+a8hCA+IGdhaVwgOwor5ru+ID4ga29uXCA7Civmu70gPiB5b3VcIDsKK+a7uyA+IHNhblwgOwor5ruhID4gbWFuXCA7Civmu54gPiB0YWlcIDsKK+a7miA+IGtvblwgOwor5ruVID4gdG91XCA7Civmu5QgPiB0b3VcIDsKK+a7jiA+IGtlaVwgOwor5ruNID4gY2hpXCA7Civmu4kgPiBrb3VcIDsKK+a7iCA+IGtvdVwgOwor5ruHID4gdGVuXCA7Civmu4QgPiBzb3VcIDsKK+a7giA+IGJvdVwgOwor5ruBID4gY2hvXCA7Civmur8gPiBoYW5cIDsKK+a6uyA+IHRvdVwgOwor5rq3ID4ga29uXCA7CivmurIgPiBzb3VcIDsKK+a6riA+IHNoaVwgOwor5rqfID4gbWVpXCA7CivmupkgPiB0YWlcIDsKK+a6mCA+IGtvdVwgOwor5rqTID4gcmVuXCA7Civmuo8gPiB0b3VcIDsKK+a6iSA+IGdhaVwgOwor5rm9ID4gc2hpXCA7CivmubsgPiBqdW5cIDsKK+a5tiA+IHNlblwgOwor5rmzID4gZGFuXCA7CivmubIgPiBrYW5cIDsKK+a5oyA+IGJpblwgOwor5rmfID4ga291XCA7CivmuZ4gPiB0b3VcIDsKK+a5nSA+IGthaVwgOwor5rmbID4gdGFuXCA7CivmuZcgPiBob3VcIDsKK+a5lCA+IHNlblwgOwor5rmTID4gaG9uXCA7CivmuZEgPiBzaG9cIDsKK+a5jyA+IGthaVwgOwor5rmOID4gYmVuXCA7CivmuY0gPiB0YW5cIDsKK+a5iiA+IHNvdVwgOwor5rmJID4gdGVuXCA7CivmuYggPiBiYWlcIDsKK+a5hSA+IHJlblwgOwor5rmDID4gaGFpXCA7CivmuL4gPiBrb25cIDsKK+a4uyA+IHNlaVwgOwor5ri5ID4ga291XCA7CivmuLggPiB5dXVcIDsKK+a4siA+IHNlblwgOwor5rinID4gdGVpXCA7CivmuKUgPiBha3VcIDsKK+a4oiA+IGh1dVwgOwor5rifID4gdGVpXCA7CivmuJkgPiBrYW5cIDsKK+a4kyA+IGtlaVwgOwor5riAID4gaG9uXCA7Civmt7ggPiBzZWlcIDsKK+a3tiA+IHJhaVwgOwor5rewID4gZGVuXCA7Civmt68gPiBpa3VcIDsKK+a3riA+IHdhaVwgOwor5resID4gc2FpXCA7Civmt6ogPiByaW5cIDsKK+a3qCA+IGpvdVwgOwor5remID4ga2FuXCA7Civmt58gPiB0ZW5cIDsKK+a3myA+IHNlaVwgOwor5reaID4gcnVpXCA7Civmt5kgPiBzb3VcIDsKK+a3mCA+IHRvdVwgOwor5reWID4gZG91XCA7Civmt5IgPiBzZWlcIDsKK+a3jyA+IGtvdVwgOwor5reOID4gaG91XCA7Civmt4ogPiBrYW5cIDsKK+a3hiA+IGtvdVwgOwor5reEID4gc2hpXCA7Civmt4AgPiB0ZW5cIDsKK+a2vSA+IGtvblwgOwor5ra3ID4gdG91XCA7CivmtrUgPiBrYW5cIDsKK+a2rCA+IGtlaVwgOwor5raqID4gaHV1XCA7CivmtqMgPiBrYW5cIDsKK+a2myA+IHRvdVwgOwor5raaID4gc2VpXCA7CivmtpggPiBzaGlcIDsKK+a2lyA+IHNlaVwgOwor5raWID4gcmVpXCA7CivmtpUgPiB0ZWlcIDsKK+a2lCA+IHNhblwgOwor5raTID4ga2VuXCA7CivmtpIgPiB0b25cIDsKK+a2kSA+IHNvdVwgOwor5raHID4gdGVpXCA7CivmtbwgPiBiYWlcIDsKK+a1sCA+IHJlblwgOwor5rWpID4ga291XCA7CivmtacgPiB0ZWlcIDsKK+a1piA+IHVyYVwgOwor5rWlID4geXV1XCA7CivmtaQgPiBrb3VcIDsKK+a1oyA+IGthblwgOwor5rWfID4geXV1XCA7CivmtL0gPiBrb3VcIDsKK+a0uCA+IGtvdVwgOwor5rSuID4gdG91XCA7CivmtKogPiBrb3VcIDsKK+a0qCA+IGtvdVwgOwor5rSaID4ga291XCA7CivmtJkgPiBzaHVcIDsKK+a0iiA+IHNlblwgOwor5rSEID4ga2FpXCA7Civms7QgPiBrYW5cIDsKK+azsiA+IHNlaVwgOwor5rOwID4gdGFpXCA7Civms68gPiBiaW5cIDsKK+azriA+IGhhblwgOwor5rOrID4ga2VuXCA7Civms6ogPiBydWlcIDsKK+azqSA+IHNvdVwgOwor5rOgID4gcmVpXCA7Civms5wgPiB0ZWlcIDsKK+azmyA+IGhhblwgOwor5rOaID4gc2VpXCA7Civms5kgPiBob3VcIDsKK+azlyA+IHNoaVwgOwor5rOWID4gYm91XCA7Civms5QgPiBrYW5cIDsKK+azkSA+IHl1dVwgOwor5rONID4gaG9uXCA7Civms4IgPiBrZWlcIDsKK+ayviA+IHRlblwgOwor5rK6ID4gdGVuXCA7CivmsrUgPiBkZWlcIDsKK+aytCA+IHJlaVwgOwor5rKuID4gc2hvXCA7Civmsp8gPiBrb3VcIDsKK+aynCA+IGhhblwgOwor5rKbID4gaGFpXCA7CivmspogPiBzaGlcIDsKK+aylyA+IHRlblwgOwor5rKUID4gYmVuXCA7CivmspMgPiB0b3VcIDsKK+ayhiA+IGtvdVwgOwor5rKFID4gZ2VuXCA7Civmsb4gPiBmdW5cIDsKK+axuCA+IGhvdVwgOwor5rG2ID4gYnVuXCA7CivmsbQgPiBoZW5cIDsKK+axsyA+IGhlblwgOwor5rGvID4ga291XCA7Civmsa0gPiB6ZWlcIDsKK+axqyA+IGtlaVwgOwor5rGnID4ga2VuXCA7CivmsZ4gPiBrb3VcIDsKK+axnCA+IHNoaVwgOwor5rGVID4gc2FuXCA7CivmsZIgPiBib3VcIDsKK+axjyA+IHRhaVwgOwor5rGOID4gaGFuXCA7CivmsY0gPiBrYW5cIDsKK+awviA+IGhhblwgOwor5rC9ID4gdG9uXCA7CivmsLogPiBzdWlcIDsKK+awuSA+IGthblwgOwor5rCuID4gdGFuXCA7CivmsKcgPiB5b3VcIDsKK+awpiA+IGdhaVwgOwor5rCbID4gZnVuXCA7CivmsJkgPiBzZW5cIDsKK+awkyA+IGJvdVwgOwor5rCQID4gdGVpXCA7CivmsIkgPiBzb3VcIDsKK+awhCA+IGp1dVwgOwor5q+/ID4gc2FuXCA7Civmr7cgPiBib3VcIDsKK+avsyA+IHplaVwgOwor5q+vID4gdGFuXCA7Civmr6cgPiBqdXVcIDsKK+avoSA+IHNlblwgOwor5q+aID4gc2FuXCA7Civmr5MgPiBpa3VcIDsKK+avjyA+IG1haVwgOwor5q+MID4ga2FuXCA7Civmrr0gPiBrb3VcIDsKK+auuCA+IGtlaVwgOwor5q6zID4gc2h1XCA7CivmrrIgPiBzZW5cIDsKK+ausSA+IHNlblwgOwor5q6vID4gaGluXCA7Civmrq4gPiByZW5cIDsKK+auqyA+IHRhblwgOwor5q6pID4gc2FuXCA7CivmrqggPiBrYWlcIDsKK+auoyA+IGtpblwgOwor5q6iID4gdGVpXCA7CivmrpcgPiB5b3VcIDsKK+aulSA+IGZ1dVwgOwor5q6JID4ganVuXCA7CivmroUgPiBzb3VcIDsKK+auhCA+IHRlblwgOwor5q6DID4geW91XCA7CivmroAgPiB5b3VcIDsKK+atsiA+IHNlaVwgOwor5q2uID4ganV1XCA7CivmrasgPiBreW9cIDsKK+atnSA+IGVraVwgOwor5q2bID4ga2FuXCA7CivmrZMgPiBrYW5cIDsKK+atiSA+IGtlblwgOwor5q2GID4ga2luXCA7CivmrYMgPiBzb3VcIDsKK+asvyA+IHRhblwgOwor5qy+ID4ga2FuXCA7CivmrL0gPiBraW5cIDsKK+astSA+IGthblwgOwor5qysID4ga2FpXCA7CivmrKMgPiBnb25cIDsKK+asniA+IHJlaVwgOwor5qyXID4gcmFuXCA7CivmrJYgPiByYW5cIDsKK+askiA+IHJhblwgOwor5qyRID4gc2FuXCA7CivmrJAgPiByZWlcIDsKK+asiSA+IHNvdVwgOwor5qyGID4gc291XCA7CivmrIQgPiByYW5cIDsKK+asgyA+IHNhblwgOwor5qu8ID4gc2VuXCA7Civmq7ogPiByZWlcIDsKK+arsCA+IGthaVwgOwor5qunID4gc2hvXCA7Civmq6UgPiBjaHVcIDsKK+arpCA+IHNlblwgOwor5qucID4ga291XCA7Civmq5ogPiByeW9cIDsKK+arliA+IHJ5b1wgOwor5quVID4gc2FuXCA7Civmq5QgPiByZWlcIDsKK+arkSA+IHJhaVwgOwor5quQID4gcnVpXCA7Civmq4wgPiB5dXVcIDsKK+ariSA+IGNodVwgOwor5quIID4gdG91XCA7Civmq4YgPiBrYWlcIDsKK+argiA+IGthaVwgOwor5qq+ID4ga2VpXCA7CivmqrsgPiBvcmlcIDsKK+aquCA+IG5laVwgOwor5qqzID4gYmluXCA7CivmqrAgPiBoZW5cIDsKK+aqryA+IHRhaVwgOwor5qquID4gdG91XCA7CivmqqwgPiBib3VcIDsKK+aqqSA+IHJpblwgOwor5qqgID4ga2VpXCA7Civmqp4gPiBrYWlcIDsKK+aqkSA+IHJhaVwgOwor5qqJID4gdGVpXCA7CivmqocgPiBzdWlcIDsKK+aqhiA+IHNhblwgOwor5qqBID4gcmluXCA7Civmqb4gPiBzaHVcIDsKK+apqiA+IHplblwgOwor5qmnID4gc291XCA7CivmqaYgPiB0b3VcIDsKK+appCA+IHp1aVwgOwor5qmWID4gdG91XCA7CivmqZUgPiB0b3VcIDsKK+apkSA+IHJvdVwgOwor5qmOID4gaGFuXCA7CivmqYkgPiByaW5cIDsKK+apiCA+IGthaVwgOwor5qmHID4gemVpXCA7CivmqYQgPiBrYW5cIDsKK+aovyA+IHNlblwgOwor5qi3ID4gc291XCA7CivmqLYgPiBzYWlcIDsKK+aoqCA+IHNlaVwgOwor5qikID4gam91XCA7CivmqKAgPiBib25cIDsKK+aoniA+IHN1dVwgOwor5qiXID4gY2hvXCA7CivmqJQgPiBzb3VcIDsKK+aojyA+IHJ1aVwgOwor5qiMID4ga2FuXCA7CivmqIsgPiB0b2lcIDsKK+aoiiA+IGhhblwgOwor5qiDID4gcm91XCA7CivmqIEgPiB0b3VcIDsKK+anvyA+IGtpblwgOwor5qe+ID4gYmFuXCA7Civmp7kgPiBrb3VcIDsKK+antSA+IGthblwgOwor5qexID4geXV1XCA7Civmp68gPiBzYWlcIDsKK+anqyA+IHRhblwgOwor5qeqID4gZ2FpXCA7Civmp6cgPiBzYW5cIDsKK+anniA+IHJvdVwgOwor5qedID4gdG91XCA7Civmp5kgPiB0ZW5cIDsKK+ankyA+IGtvdVwgOwor5qeRID4gYmFpXCA7Civmp5AgPiBrYWlcIDsKK+aniCA+IGRvdVwgOwor5qeDID4gaGFuXCA7Civmp4EgPiBrb3VcIDsKK+amvCA+IGtvdVwgOwor5qa4ID4gdGFpXCA7CivmprEgPiBzdWlcIDsKK+amryA+IHNoaVwgOwor5qatID4gc2hhXCA7CivmpqYgPiBrYW5cIDsKK+ampSA+IGtvdVwgOwor5qagID4gYmVpXCA7CivmppwgPiBib3VcIDsKK+amlSA+IHlvdVwgOwor5qaUID4gcm91XCA7CivmpbsgPiBrb3VcIDsKK+aluiA+IGp1dVwgOwor5qW3ID4ga2FpXCA7CivmpbQgPiB0ZWlcIDsKK+alsyA+IGJhaVwgOwor5qWxID4gc291XCA7Civmpa8gPiBqdW5cIDsKK+alriA+IGNob1wgOwor5qWqID4geW91XCA7CivmpakgPiBoZW5cIDsKK+alqCA+IHRlaVwgOwor5qWmID4ga2VuXCA7CivmpaUgPiBrZW5cIDsKK+alpCA+IHNvdVwgOwor5qWeID4gcm91XCA7CivmpZ0gPiByZW5cIDsKK+almSA+IGJvdVwgOwor5qWXID4ga2VuXCA7CivmpY4gPiBrb25cIDsKK+akvSA+IHRlblwgOwor5qS2ID4gc2h1XCA7CivmpLMgPiB3YWlcIDsKK+aksSA+IGZ1dVwgOwor5qSmID4ga2VuXCA7CivmpKIgPiBrYWlcIDsKK+aklyA+IHRlaVwgOwor5qSWID4gaG91XCA7CivmpJEgPiBoZWlcIDsKK+akkCA+IGt5b1wgOwor5qSMID4ga291XCA7CivmpIkgPiBqb3VcIDsKK+ajvCA+IGh1blwgOwor5qO5ID4gc2FvXCA7Civmo7YgPiByYWlcIDsKK+ajtSA+IGthblwgOwor5qOxID4gcm91XCA7Civmo7AgPiBzb2lcIDsKK+ajryA+IGppblwgOwor5qOtID4gZWtpXCA7Civmo6wgPiBrZW5cIDsKK+ajqCA+IGtlaVwgOwor5qOnID4gc2FuXCA7Civmo6UgPiBoYW5cIDsKK+ajoyA+IHRlaVwgOwor5qOhID4ga291XCA7Civmo6AgPiB0b3VcIDsKK+ajmSA+IHJlaVwgOwor5qOWID4gdG91XCA7Civmo5UgPiBzaHVcIDsKK+ajlCA+IGtvblwgOwor5qOTID4gaG91XCA7Civmo5EgPiBoYWlcIDsKK+ajjSA+IGtvblwgOwor5qOMID4gc2FpXCA7Civmo4kgPiBtZW5cIDsKK+ajiCA+IHNlblwgOwor5qOGID4gcmluXCA7Civmo4UgPiBoZWlcIDsKK+aivCA+IHRvdVwgOwor5qK5ID4gYmluXCA7CivmorUgPiBmdXVcIDsKK+aisSA+IGtvblwgOwor5qKqID4gdG91XCA7CivmoqEgPiBrYW5cIDsKK+aioCA+IHJ5b1wgOwor5qKaID4gYmFuXCA7CivmopggPiBrZW5cIDsKK+ailyA+IGtvdVwgOwor5qKWID4gaGFpXCA7CivmopQgPiBzaGlcIDsKK+aijSA+IHNvdVwgOwor5qKIID4gaG91XCA7CivmooYgPiBob3VcIDsKK+aihCA+IHlvdVwgOwor5qG/ID4ga2FuXCA7Civmob4gPiBrdW5cIDsKK+ahuyA+IGhvdVwgOwor5qG5ID4gcm91XCA7CivmobUgPiB6dWlcIDsKK+ahsSA+IGtlaVwgOwor5qGvID4gdGVpXCA7Civmoa4gPiBoYWlcIDsKK+ahoyA+IHRvdVwgOwor5qGTID4ga2FuXCA7CivmoZIgPiBzb3VcIDsKK+ahiiA+IGtlblwgOwor5qGFID4gZ2FpXCA7CivmoYQgPiBrb3VcIDsKK+agvSA+IHNhaVwgOwor5qC0ID4gc2VuXCA7CivmoLMgPiByb3VcIDsKK+agsiA+IGdvdVwgOwor5qCvID4gaWt1XCA7CivmoKwgPiBzZWlcIDsKK+agqyA+IHNvblwgOwor5qCfID4gaGVpXCA7CivmoJ0gPiB0ZW5cIDsKK+agmSA+IGtvdVwgOwor5qCWID4gc2VpXCA7CivmoJQgPiBrZWlcIDsKK+agiCA+IHNhblwgOwor5p+5ID4gc2hpXCA7Civmn7YgPiBzaGlcIDsKK+afrCA+IGthblwgOwor5p+mID4gdGFuXCA7Civmn6IgPiB0ZWlcIDsKK+afnCA+IGt5b1wgOwor5p+ZID4ga291XCA7Civmn5ggPiBzaGFcIDsKK+afkSA+IGthblwgOwor5p+JID4gaGFuXCA7Civmn4ggPiBoYW5cIDsKK+afhiA+IHJvdVwgOwor5p+DID4gcmVpXCA7Civmnr4gPiBzaGlcIDsKK+aevSA+IHNvdVwgOwor5p68ID4geW91XCA7CivmnrkgPiBob3VcIDsKK+aetCA+IGthaVwgOwor5p6yID4gc2hpXCA7CivmnrAgPiBoZWlcIDsKK+aeoiA+IHN1dVwgOwor5p6bID4gc291XCA7CivmnpggPiB6ZWlcIDsKK+aeliA+IHlvdVwgOwor5p6TID4gc2h1XCA7Civmno8gPiBkYW5cIDsKK+aejCA+IGZ1blwgOwor5p6LID4gaG91XCA7CivmnoUgPiBrZWlcIDsKK+aehCA+IGtvdVwgOwor5p28ID4gY2hvXCA7CivmnbQgPiBrZW5cIDsKK+adsyA+IHlvdVwgOwor5p2yID4ga291XCA7Civmna4gPiBoYWlcIDsKK+adrSA+IGt1aVwgOwor5p2sID4gZ2VuXCA7CivmnacgPiBtYW5cIDsKK+adoCA+IGtvdVwgOwor5p2dID4gY2hpXCA7CivmnZUgPiB0ZWlcIDsKK+adhiA+IGthblwgOwor5py/ID4gc2hpXCA7CivmnL4gPiB0b3VcIDsKK+actyA+IHRvdVwgOwor5pypID4gdG91XCA7CivmnKIgPiBib3VcIDsKK+acnCA+IHRvblwgOwor5pyZID4gbWVpXCA7CivmnJggPiBzZW5cIDsKK+acliA+IHJvdVwgOwor5pyOID4gcmVpXCA7CivmnIwgPiBoYW5cIDsKK+abuiA+IHNvdVwgOwor5pu5ID4gc291XCA7Civmm64gPiBnYW5cIDsKK+abrCA+IHNhaVwgOwor5purID4gcmFuXCA7Civmm6kgPiBkb3VcIDsKK+abqCA+IHJvdVwgOwor5puhID4gam91XCA7Civmm6AgPiBrb3VcIDsKK+abmyA+IGt1blwgOwor5puaID4gYm91XCA7Civmm5QgPiBrZWlcIDsKK+abjiA+IGVraVwgOwor5puIID4gdG91XCA7Civmm4UgPiB5b3VcIDsKK+abhCA+IHlvdVwgOwor5puDID4gdGFpXCA7Civmm4IgPiBrb3VcIDsKK+aaviA+IHRvblwgOwor5pq7ID4ga2VpXCA7CivmmrkgPiBzZW5cIDsKK+aatSA+IGthblwgOwor5pqtID4ga291XCA7CivmmqQgPiBrb3VcIDsKK+aaoCA+IGtvdVwgOwor5pqfID4ga2FpXCA7Civmmp0gPiBtZWlcIDsKK+aamiA+IHlvdVwgOwor5pqYID4geW91XCA7CivmmpIgPiBzZWlcIDsKK+aajCA+IGtlaVwgOwor5pqLID4gYmluXCA7CivmmoQgPiBrZW5cIDsKK+aZuSA+IGVraVwgOwor5pm4ID4gdGVpXCA7CivmmbUgPiBrZWlcIDsKK+aZrCA+IHNhaVwgOwor5pmqID4gdGVuXCA7CivmmacgPiBrb3VcIDsKK+aZpiA+IGthaVwgOwor5pmgID4gc2VpXCA7CivmmZ8gPiBzZWlcIDsKK+aZnCA+IGtvblwgOwor5pmbID4ga2VuXCA7CivmmZogPiBiYW5cIDsKK+aZmCA+IGthblwgOwor5pmXID4ga2FuXCA7CivmmY4gPiBrb3VcIDsKK+aZhiA+IGthaVwgOwor5pmFID4ga2VuXCA7CivmmYQgPiBrb3VcIDsKK+aZgyA+IGtvdVwgOwor5pi/ID4ga291XCA7CivmmLsgPiBrb3VcIDsKK+aYsSA+IGlrdVwgOwor5piwID4gc2hpXCA7CivmmKwgPiBrb25cIDsKK+aYqiA+IGhlblwgOwor5pinID4gbWFpXCA7CivmmKYgPiBrb3VcIDsKK+aYpCA+IHJlaVwgOwor5pihID4ga2VuXCA7CivmmJ4gPiBoZWlcIDsKK+aYnSA+IHNhblwgOwor5picID4geW91XCA7CivmmJUgPiBraW5cIDsKK+aYkSA+IGtpblwgOwor5piPID4ga29uXCA7CivmmI0gPiBrZW5cIDsKK+aYiiA+IGtvdVwgOwor5piJID4gaG91XCA7CivmmIQgPiBoYW5cIDsKK+aXuyA+IGJpblwgOwor5pe1ID4gdGFuXCA7Civml7IgPiB0YWlcIDsKK+aXsSA+IGthblwgOwor5pewID4ga2FuXCA7Civml5sgPiBoYW5cIDsKK+aXmSA+IGhhblwgOwor5peYID4gc2hpXCA7Civml5QgPiBrZW5cIDsKK+aXjCA+IHNlaVwgOwor5peGID4gaGFpXCA7Civml4QgPiBib3VcIDsKK+aXgyA+IHNlblwgOwor5pa/ID4geW91XCA7Civmlr0gPiBzaGlcIDsKK+aWtCA+IHJpblwgOwor5pazID4ga2luXCA7CivmlqcgPiBvbm9cIDsKK+aWpiA+IGdpblwgOwor5pakID4ga2luXCA7CivmlpUgPiByYW5cIDsKK+aWkiA+IGhhblwgOwor5paMID4gaGluXCA7CivmloogPiBzZWlcIDsKK+aWhiA+IGtvdVwgOwor5paFID4ga291XCA7CivmloIgPiByZW5cIDsKK+aWgSA+IGVraVwgOwor5pW7ID4ga2VpXCA7CivmlbIgPiBrb3VcIDsKK+aVryA+IGJpblwgOwor5pWtID4geW91XCA7CivmlakgPiBrb3VcIDsKK+aVpiA+IHRvblwgOwor5pWfID4gdGVuXCA7CivmlZ0gPiBoZWlcIDsKK+aVliA+IGdvdVwgOwor5pWUID4gZ3lvXCA7CivmlYMgPiBiaW5cIDsKK+aUvSA+IGhhblwgOwor5pS8ID4ga2FuXCA7CivmlLsgPiBrb3VcIDsKK+aUuCA+IHl1dVwgOwor5pS3ID4ga291XCA7CivmlK4gPiBkb3VcIDsKK+aUrCA+IHJhblwgOwor5pSpID4gdG91XCA7CivmlKYgPiByZWlcIDsKK+aUpCA+IHRhblwgOwor5pSjID4gcmVuXCA7CivmlKIgPiBzYW5cIDsKK+aUnyA+IGt1blwgOwor5pScID4ga2VpXCA7CivmlJsgPiBzYW5cIDsKK+aUmSA+IHNlblwgOwor5pSYID4gam91XCA7CivmlJQgPiByYW5cIDsKK+aUkyA+IGtlblwgOwor5pSPID4gcm91XCA7CivmlIggPiBrdW5cIDsKK+aUhSA+IHNhblwgOwor5pSEID4gY2hvXCA7CivmlIEgPiB5b3VcIDsKK+aUgCA+IGhhblwgOwor5pO+ID4gam91XCA7Civmk7sgPiBzb3VcIDsKK+aTuiA+IGhhaVwgOwor5pO2ID4gc2VuXCA7Civmk7AgPiBkb3VcIDsKK+aTryA+IGhpblwgOwor5pOtID4ga3lvXCA7Civmk6ogPiB5b3VcIDsKK+aTpSA+IHJhblwgOwor5pOkID4ga291XCA7Civmk6MgPiB0b3VcIDsKK+aToCA+IHNlaVwgOwor5pOaID4ga3lvXCA7Civmk5UgPiBrZWlcIDsKK+aTkiA+IGtpblwgOwor5pOQID4ga2FuXCA7Civmk44gPiBrZWlcIDsKK+aTiyA+IHRvdVwgOwor5pOEID4gcnlvXCA7Civmk4IgPiByYWlcIDsKK+aTgSA+IHlvdVwgOwor5pK/ID4gcmVuXCA7Civmkr0gPiBrb3VcIDsKK+aSvCA+IGthblwgOwor5pKzID4ga2luXCA7CivmkrAgPiBzYW5cIDsKK+aSpiA+IHNoYVwgOwor5pKjID4gdGFuXCA7CivmkqEgPiBzb3VcIDsKK+aSniA+IHNodVwgOwor5pKbID4gcmluXCA7CivmkpogPiBuZW5cIDsKK+aSmSA+IHNvblwgOwor5pKYID4gdG91XCA7CivmkpUgPiBzZWlcIDsKK+aSkyA+IGRvdVwgOwor5pKSID4gc2FuXCA7Civmko8gPiBzYW5cIDsKK+aSiCA+IHJvdVwgOwor5pG7ID4gc2FuXCA7CivmkbYgPiB0YW5cIDsKK+aRtCA+IGNob1wgOwor5pGzID4ga291XCA7Civmka8gPiBzaGlcIDsKK+aRpyA+IHNhaVwgOwor5pGhID4ga2FpXCA7CivmkaAgPiBzb3VcIDsKK+aRnyA+IHJvdVwgOwor5pGcID4ga2FuXCA7CivmkZsgPiBjaGlcIDsKK+aRmiA+IHRvdVwgOwor5pGTID4gaG91XCA7CivmkZIgPiBoZWlcIDsKK+aRhyA+IHlvdVwgOwor5pC0ID4ga2VuXCA7CivmkK8gPiB0b3VcIDsKK+aQrSA+IHRvdVwgOwor5pCsID4gaGFuXCA7CivmkKogPiB0b3VcIDsKK+aQqCA+IHRvdVwgOwor5pClID4gdGFpXCA7CivmkKQgPiBha3VcIDsKK+aQniA+IGtvdVwgOwor5pCYID4gc2hpXCA7CivmkJcgPiB0b3VcIDsKK+aQlCA+IHNvdVwgOwor5pCSID4gaG91XCA7CivmkIYgPiBrb3VcIDsKK+aPuSA+IGhhaVwgOwor5o+3ID4gc291XCA7Civmj7UgPiBrZW5cIDsKK+aPrSA+IGtlaVwgOwor5o+pID4ga2FpXCA7Civmj6UgPiB0ZWlcIDsKK+aPoyA+IHNoaVwgOwor5o+WID4geXV1XCA7Civmj5QgPiBzb3VcIDsKK+aPkyA+IHNoaVwgOwor5o+SID4gc291XCA7Civmj44gPiBzZW5cIDsKK+aPiCA+IGtvdVwgOwor5o+FID4ga2VuXCA7Civmj4EgPiB0ZWlcIDsKK+aPgCA+IGthblwgOwor5o69ID4gaG91XCA7Civmjq8gPiBrb3VcIDsKK+aOriA+IGtlblwgOwor5o6tID4gdGVuXCA7CivmjqsgPiBzb3VcIDsKK+aOmSA+IHNvdVwgOwor5o6WID4gZWtpXCA7CivmjpQgPiBrYW5cIDsKK+aOkCA+IGtvdVwgOwor5o6PID4gdG91XCA7CivmjoogPiBob3VcIDsKK+aOiSA+IHRvdVwgOwor5o6EID4gcm9uXCA7CivmjoIgPiB0ZW5cIDsKK+aOgCA+IGtpblwgOwor5o2/ID4gc2VpXCA7CivmjbYgPiBzdWlcIDsKK+aNtSA+IHRlblwgOwor5o20ID4gZnVuXCA7CivmjbEgPiBnYWlcIDsKK+aNrSA+IGhhaVwgOwor5o2rID4gbW9uXCA7CivmjacgPiBob3VcIDsKK+aNpiA+IGtpblwgOwor5o2lID4gd2FuXCA7CivmjaIgPiBrYW5cIDsKK+aNmyA+IHJ5b1wgOwor5o2YID4gc29uXCA7CivmjY4gPiBzb3VcIDsKK+aNjSA+IGthblwgOwor5o2KID4gaG91XCA7CivmjYYgPiBrb25cIDsKK+aNgyA+IGt1blwgOwor5oy6ID4gdGVpXCA7CivmjLkgPiB5dXVcIDsKK+aMtSA+IHJvdVwgOwor5oytID4ga291XCA7CivmjI0gPiBrb3VcIDsKK+aMiiA+IHJvdVwgOwor5oyEID4ga291XCA7CivmjIIgPiBrZWlcIDsKK+aLvCA+IGhvdVwgOwor5ou3ID4gZ291XCA7Civmi7QgPiBzZW5cIDsKK+aLryA+IGpvdVwgOwor5ouqID4gc2VuXCA7Civmi5ogPiBoZW5cIDsKK+aLkiA+IGt5b1wgOwor5ouRID4ga2FuXCA7Civmi5AgPiBrYWlcIDsKK+aLjiA+IHJlaVwgOwor5ouMID4gaGFuXCA7Civmi4sgPiBob3VcIDsKK+aLiCA+IGRlblwgOwor5ouEID4gY2h1XCA7Civmir8gPiBiaW5cIDsKK+aKviA+IGt5b1wgOwor5oq6ID4gYmFpXCA7CivmiqwgPiB0YWlcIDsKK+aKqCA+IGhvdVwgOwor5oqmID4gaGVpXCA7CivmipYgPiB0b3VcIDsKK+aKlCA+IGhvdVwgOwor5oqPID4gZ2FuXCA7CivmioMgPiBiZW5cIDsKK+aJvSA+IHRvblwgOwor5om8ID4gYWt1XCA7CivmibogPiB0ZWlcIDsKK+aJsyA+IGhhblwgOwor5omtID4ganV1XCA7CivmiaMgPiBrb3VcIDsKK+aJniA+IGthblwgOwor5ombID4ga291XCA7CivmiZQgPiBqb3VcIDsKK+aJkiA+IGhhaVwgOwor5omMID4gc2h1XCA7CivmiYMgPiBrZWlcIDsKK+aJgiA+IHRlblwgOwor5omBID4gaGVuXCA7CivmiL4gPiByZWlcIDsKK+aIvCA+IGJvdVwgOwor5oi5ID4gYWt1XCA7CivmiKkgPiBzZW5cIDsKK+aIpyA+IHNvdVwgOwor5oihID4ga2FuXCA7CivmiJQgPiBzYW5cIDsKK+aIjiA+IGp1dVwgOwor5oiHID4gdG91XCA7CivmiIMgPiB0b3VcIDsKK+aIgSA+IGRhblwgOwor5oe9ID4ga2FuXCA7Civmh7ogPiB6YW5cIDsKK+aHtiA+IHJhblwgOwor5oe0ID4gemFuXCA7Civmh60gPiBrb3VcIDsKK+aHrCA+IGtvdVwgOwor5oepID4geW91XCA7Civmh6MgPiBtb25cIDsKK+aHoiA+IHJhblwgOwor5oeeID4gYm91XCA7Civmh50gPiBnYWlcIDsKK+aHnCA+IGJvdVwgOwor5oeUID4gcmluXCA7Civmh40gPiByaW5cIDsKK+aHjCA+IGVraVwgOwor5oeLID4gYm91XCA7Civmh4ggPiBrYWlcIDsKK+aHhyA+IGtvblwgOwor5oeGID4gc291XCA7Civmh4IgPiB0b3VcIDsKK+aHgSA+IGtlblwgOwor5oeAID4gd2FpXCA7Civmhr4gPiBrYW5cIDsKK+aGvCA+IGtlaVwgOwor5oa5ID4gZG91XCA7CivmhrggPiBzZW5cIDsKK+aGsiA+IGtlblwgOwor5oarID4gYmluXCA7CivmhqogPiBrYW5cIDsKK+aGqCA+IGthblwgOwor5oalID4gcm91XCA7Civmhp0gPiB0YWlcIDsKK+aGmiA+IHRhblwgOwor5oaXID4gZ2luXCA7CivmhpMgPiBrZWlcIDsKK+aGkiA+IGthaVwgOwor5oaKID4gaGFpXCA7CivmhocgPiBrZWlcIDsKK+aGhCA+IGNoaVwgOwor5oaDID4gdG91XCA7CivmhoEgPiBzb3VcIDsKK+aFuyA+IGtlblwgOwor5oW4ID4gdGVpXCA7CivmhbcgPiBrb3VcIDsKK+aFtiA+IGtlaVwgOwor5oW1ID4geW91XCA7CivmhbMgPiBrYW5cIDsKK+aFsiA+IGJhblwgOwor5oWxID4gdGFuXCA7Civmha0gPiBnaW5cIDsKK+aFrCA+IGtpblwgOwor5oWnID4ga2VpXCA7CivmhaAgPiBnb3VcIDsKK+aFnyA+IGRvdVwgOwor5oWaID4gemFuXCA7CivmhZkgPiB6YW5cIDsKK+aFiSA+IGtpblwgOwor5oWGID4gdG91XCA7CivmhYUgPiBzb3VcIDsKK+aFgiA+IHlvdVwgOwor5oWBID4ga29uXCA7CivmhL8gPiBnZW5cIDsKK+aEuSA+IHlvdVwgOwor5oS3ID4ga2FpXCA7CivmhLQgPiBzb3VcIDsKK+aEsCA+IGthdVwgOwor5oSiID4gc2FpXCA7CivmhKEgPiBzb3VcIDsKK+aEniA+IHplblwgOwor5oSXID4gYm91XCA7CivmhJMgPiB0b3VcIDsKK+aEkiA+IGtlaVwgOwor5oSRID4geW91XCA7CivmhJAgPiBiZW5cIDsKK+aEjSA+IGJpblwgOwor5oSMID4ga2FuXCA7CivmhIYgPiBrZW5cIDsKK+aEgyA+IGtlblwgOwor5oO9ID4ga29uXCA7Civmg7wgPiBoZW5cIDsKK+aDuiA+IHNlaVwgOwor5oO4ID4ga2VpXCA7Civmg7YgPiBrb3VcIDsKK+aDtCA+IHp1aVwgOwor5oOlID4geW91XCA7Civmg6MgPiBzb3VcIDsKK+aDniA+IGtpblwgOwor5oObID4ga29uXCA7Civmg5ggPiBib3VcIDsKK+aDlCA+IHRhblwgOwor5oOTID4ga2VuXCA7Civmg48gPiByYW5cIDsKK+aDiyA+IHdhblwgOwor5oOJID4gc2VuXCA7Civmg4cgPiB0b25cIDsKK+aDgiA+IGthblwgOwor5oK+ID4ga291XCA7Civmgr0gPiBzZWlcIDsKK+aCuyA+IGtlaVwgOwor5oK3ID4gcmVpXCA7CivmgrAgPiBzb3VcIDsKK+aCqSA+IG5vdVwgOwor5oKkID4gc291XCA7Civmgp0gPiBrYWlcIDsKK+aCmyA+IHNlblwgOwor5oKXID4gYmFuXCA7CivmgpMgPiBrZW5cIDsKK+aCkiA+IHl1dVwgOwor5oKOID4ga291XCA7Civmgo0gPiBrYW5cIDsKK+aCjCA+IHRlaVwgOwor5oKLID4gcmluXCA7CivmgoggPiBrYWlcIDsKK+aCgyA+IGtvblwgOwor5oG/ID4geW91XCA7Civmgb4gPiBib3VcIDsKK+aBtSA+IGtlaVwgOwor5oGsID4gdGVuXCA7CivmgasgPiBkb3VcIDsKK+aBoyA+IHNoaVwgOwor5oGiID4ga2FpXCA7CivmgaEgPiByaW5cIDsKK+aBoCA+IGthaVwgOwor5oGdID4ga2FpXCA7CivmgZkgPiB5b3VcIDsKK+aBliA+IHNoaVwgOwor5oGSID4ga291XCA7CivmgYkgPiBzaGlcIDsKK+aBiCA+IGJvdVwgOwor5oGGID4ga291XCA7CivmgYIgPiBqdW5cIDsKK+aBgCA+IHNoaVwgOwor5oCxID4gc291XCA7CivmgKYgPiBob3VcIDsKK+aAnyA+IHRlaVwgOwor5oCcID4gcmVpXCA7CivmgJogPiBzaG9cIDsKK+aAlCA+IHNlaVwgOwor5oCTID4gZG91XCA7CivmgJAgPiBrb3VcIDsKK+aAjyA+IHlvdVwgOwor5oCHID4ga3lvXCA7Civlv7wgPiBrb3VcIDsKK+W/uyA+IGtpblwgOwor5b+6ID4ga2VuXCA7Civlv7YgPiBrb25cIDsKK+W/syA+IHRvblwgOwor5b+yID4gdGFpXCA7Civlv7AgPiBzdWlcIDsKK+W/riA+IHNoaVwgOwor5b+tID4gaGVuXCA7Civlv6kgPiBzb3VcIDsKK+W/qCA+IGdhblwgOwor5b+eID4gYmluXCA7Civlv50gPiB0ZW5cIDsKK+W/liA+IHNvblwgOwor5b+TID4ga2FuXCA7Civlv5AgPiBrdW5cIDsKK+W/iyA+IGthaVwgOwor5b+JID4gdG91XCA7Civlv4ggPiBqaW5cIDsKK+W+sCA+IHNlaVwgOwor5b6vID4ga2VpXCA7Civlvq0gPiB5b3VcIDsKK+W+rCA+IGhvdVwgOwor5b6oID4ga291XCA7CivlvqcgPiBoZW5cIDsKK+W+oCA+IHJhaVwgOwor5b6dID4gY2hpXCA7CivlvpkgPiBzaGlcIDsKK+W+mCA+IGhhaVwgOwor5b6WID4gc291XCA7CivlvpEgPiBrZWlcIDsKK+W+iSA+IHlvdVwgOwor5b6IID4ga29uXCA7CivlvoYgPiBzZWlcIDsKK+W+gSA+IHNlaVwgOwor5b2+ID4gcmVpXCA7Civlvb0gPiBjaGlcIDsKK+W9tyA+IGhvdVwgOwor5b2yID4gY2hpXCA7Civlva8gPiBoZXVcIDsKK+W9rSA+IGhvdVwgOwor5b2sID4gaGluXCA7CivlvacgPiBpa3VcIDsKK+W9piA+IGdlblwgOwor5b2lID4gZ2VuXCA7CivlvaQgPiB0b3VcIDsKK+W9oyA+IGJ1blwgOwor5b2hID4gc2FuXCA7CivlvZggPiB0ZWlcIDsKK+W9lyA+IHN1aVwgOwor5b2WID4gdGFuXCA7CivlvZEgPiBrZWlcIDsKK+W9kCA+IGtlaVwgOwor5b2OID4gd2FuXCA7CivlvYsgPiBrYXVcIDsKK+W9hyA+IHlvdVwgOwor5b2EID4ga291XCA7CivlvYEgPiBzZWlcIDsKK+W9gCA+IGtvdVwgOwor5by/ID4ga2VuXCA7CivlvL0gPiB5b3VcIDsKK+W8uSA+IGRhblwgOwor5by4ID4gaG91XCA7CivlvLQgPiB0b25cIDsKK+W8sCA+IHNvdVwgOwor5byvID4gd2FuXCA7CivlvK4gPiBrZW5cIDsKK+W8qCA+IHNldVwgOwor5bykID4gdGVpXCA7CivlvKIgPiB0b3VcIDsKK+W8miA+IHRhaVwgOwor5bySID4gc2hpXCA7CivlvJEgPiBzaGlcIDsKK+W8jiA+IHNhblwgOwor5byKID4gaGVpXCA7CivlvIkgPiBqb3VcIDsKK+W8iCA+IGVraVwgOwor5byGID4ga3lvXCA7CivlvIUgPiBodW5cIDsKK+W7vyA+IGp1dVwgOwor5bu9ID4ga2FpXCA7Civlu7wgPiBkYWlcIDsKK+W7tyA+IHRlaVwgOwor5bu1ID4ganVuXCA7Civlu7IgPiByZWlcIDsKK+W7sSA+IHlvdVwgOwor5buvID4gc2VuXCA7Civlu6wgPiByeW9cIDsKK+W7qiA+IHJpblwgOwor5bupID4gcmluXCA7Civlu6ggPiBrYWlcIDsKK+W7pSA+IGthaVwgOwor5bueID4ga2luXCA7Civlu50gPiBzaGlcIDsKK+W7myA+IHRlblwgOwor5buXID4gdGFpXCA7Civlu5QgPiByb3VcIDsKK+W7kiA+IGdvdVwgOwor5buRID4ga2luXCA7Civlu44gPiBrZWlcIDsKK+W7jCA+IGNoaVwgOwor5buHID4gcml1XCA7Civlu4YgPiBrYWlcIDsKK+W7hSA+IGFodVwgOwor5buBID4gc2hpXCA7Civlu4AgPiBzb3VcIDsKK+W6vSA+IGRvdVwgOwor5bq7ID4gc2hvXCA7CivlurYgPiBzaG9cIDsKK+W6siA+IHJhaVwgOwor5bqwID4gaGVpXCA7CivluqwgPiBib3VcIDsKK+W6qCA+IGtvdVwgOwor5bqkID4gY2hpXCA7CivluqMgPiB0ZXVcIDsKK+W6myA+IHNoaVwgOwor5bqOID4ga2FpXCA7Civluo0gPiBoYWlcIDsKK+W6iSA+IHRvblwgOwor5bqIID4ga2luXCA7Civlub8gPiBnZW5cIDsKK+W5uiA+IHlvdVwgOwor5bm3ID4gaGVpXCA7CivlubYgPiBoZWlcIDsKK+W5tSA+IGtlblwgOwor5bmxID4gcmFuXCA7CivlubAgPiBrZW5cIDsKK+W5riA+IGNodVwgOwor5bmrID4gaG91XCA7CivluaogPiBib3VcIDsKK+W5qSA+IGh1blwgOwor5bmoID4gc2VuXCA7CivluacgPiBzZXVcIDsKK+W5pCA+IGhlaVwgOwor5bmjID4gaGVpXCA7CivluaIgPiB0b3VcIDsKK+W5oSA+IGhhblwgOwor5bmdID4gc2VuXCA7CivluZwgPiBrZWlcIDsKK+W5miA+IGhvdVwgOwor5bmUID4gYmFuXCA7CivluZAgPiB0b3VcIDsKK+W5jSA+IHRvdVwgOwor5bmMID4ga291XCA7CivluYsgPiBoYW5cIDsKK+W5iiA+IGtvdVwgOwor5bmIID4gaGVpXCA7CivluYcgPiBob3VcIDsKK+W5hCA+IGFrdVwgOwor5bmAID4gdGVpXCA7CivluLUgPiB3YW5cIDsKK+W4siA+IGhlaVwgOwor5biuID4gaG91XCA7CivluKwgPiBrdW5cIDsKK+W4qSA+IHNldVwgOwor5bioID4gc2VpXCA7CivluKYgPiB0YWlcIDsKK+W4oyA+IGtlblwgOwor5bihID4gaGVpXCA7CivluKAgPiBnZWlcIDsKK+W4nyA+IGVraVwgOwor5biYID4gcmVuXCA7CivluJYgPiBqb3VcIDsKK+W4kiA+IHRhaVwgOwor5biOID4gdGFuXCA7CivluIsgPiBzaGlcIDsKK+W4hyA+IGRlblwgOwor5biEID4gdGVpXCA7CivluIAgPiBzb3VcIDsKK+W3uiA+IHNvblwgOwor5be5ID4ga2luXCA7Civlt7UgPiBzaGlcIDsKK+W3oCA+IGtlaVwgOwor5befID4ga291XCA7Civlt5wgPiBrYWlcIDsKK+W3myA+IHNlblwgOwor5beYID4gZ2VuXCA7Civlt5YgPiBnYW5cIDsKK+W3lCA+IHRlblwgOwor5beTID4gdGVuXCA7Civlt5IgPiByYW5cIDsKK+W3kSA+IHNhblwgOwor5bePID4ga2VuXCA7Civlt44gPiBkb3VcIDsKK+W3jCA+IGdhblwgOwor5beJID4gc2FuXCA7Civlt4YgPiBrb3VcIDsKK+W3gyA+IHJvdVwgOwor5beCID4gc3VpXCA7CivltrwgPiBzaG9cIDsKK+W2uiA+IHJlaVwgOwor5ba5ID4gdG91XCA7CivltrggPiBrb3VcIDsKK+W2tSA+IHNhaVwgOwor5bayID4ga2VpXCA7CivltrAgPiBrYWlcIDsKK+W2qSA+IGRhdVwgOwor5banID4gZWtpXCA7CivltqEgPiBrZWlcIDsKK+W2nyA+IHNvblwgOwor5badID4gdG91XCA7CivltpkgPiByaW5cIDsKK+W2lSA+IHNldVwgOwor5baUID4ga2luXCA7CivltowgPiB0b3VcIDsKK+W2iyA+IHRvdVwgOwor5baKID4gc3VpXCA7CivltokgPiBzdWlcIDsKK+W2hiA+IHNhdVwgOwor5baEID4gc2FuXCA7CivltoMgPiBzYW5cIDsKK+W1vyA+IHRlaVwgOwor5bW8ID4gc2FuXCA7CivltbogPiByZXVcIDsKK+W1tiA+IHRhb1wgOwor5bWxID4geW91XCA7CivltbAgPiBrZW5cIDsKK+W1rSA+IGhvdVwgOwor5bWsID4ga2FpXCA7CivltaogPiBrb3VcIDsKK+W1qSA+IHN1dVwgOwor5bWnID4gcml1XCA7CivltaQgPiBrZWlcIDsKK+W1oyA+IHRhdVwgOwor5bWiID4gc291XCA7CivltaAgPiBnZWlcIDsKK+W1lyA+IHNlaVwgOwor5bWVID4gc291XCA7CivltZMgPiBnYW5cIDsKK+W1kiA+IGdhblwgOwor5bWOID4gZ3V1XCA7CivltYkgPiB0ZWlcIDsKK+W1iCA+IGthblwgOwor5bWHID4ga2VpXCA7CivltYYgPiBrZWlcIDsKK+W1hSA+IGthblwgOwor5bWDID4gZ2VuXCA7CivltYEgPiBrYW5cIDsKK+W0vSA+IHNhaVwgOwor5bS8ID4gc2hpXCA7CivltLkgPiB0ZWlcIDsKK+W0uCA+IHRvblwgOwor5bS2ID4gaG91XCA7CivltLUgPiBzZXVcIDsKK+W0tCA+IHdhaVwgOwor5bSyID4ga291XCA7CivltKUgPiBoZWlcIDsKK+W0pCA+IGtvdVwgOwor5bSiID4gc291XCA7CivltKEgPiBrYW5cIDsKK+W0oCA+IHRvdVwgOwor5bSfID4gZ2luXCA7CivltJ0gPiBzYXVcIDsKK+W0mSA+IHJvblwgOwor5bSYID4gcm9uXCA7CivltJUgPiBnYWlcIDsKK+W0lCA+IHNhaVwgOwor5bSRID4ga29uXCA7CivltJAgPiBrb25cIDsKK+W0jyA+IGJpblwgOwor5bSNID4gcmFpXCA7CivltIcgPiBzdXVcIDsKK+W0hiA+IGtvdVwgOwor5bSEID4ga2VuXCA7CivltIEgPiBrYW5cIDsKK+WzuiA+IGtvdVwgOwor5bO4ID4gc2VpXCA7Civls7UgPiBrb3VcIDsKK+WztCA+IGtlblwgOwor5bOxID4gZG91XCA7Civls68gPiBob3VcIDsKK+WzriA+IGtpblwgOwor5bOfID4geW91XCA7Civls50gPiB0b3VcIDsKK+WznCA+IGtlaVwgOwor5bOYID4ga2FuXCA7Civls5UgPiBzaGlcIDsKK+WzkiA+IHRvdVwgOwor5bOQID4ga2FpXCA7Civls44gPiBnb25cIDsKK+WzhyA+IGtvdVwgOwor5bK+ID4gc2VuXCA7CivlsrogPiByZWlcIDsKK+WytyA+IGJpblwgOwor5bKyID4ga291XCA7CivlsrEgPiB0YWlcIDsKK+WysCA+IHlvdVwgOwor5bKtID4gcmVpXCA7CivlsqcgPiB0ZXVcIDsKK+WyoyA+IGtvdVwgOwor5bKgID4ga3lvXCA7Civlsp8gPiB5b3VcIDsKK+WylSA+IGthaVwgOwor5bKSID4ga2VuXCA7CivlsosgPiBnb3VcIDsKK+WyhyA+IGdvdVwgOwor5bKFID4gaGFuXCA7Civlsb0gPiBrYW5cIDsKK+WxuyA+IGppblwgOwor5bGzID4gc2VuXCA7Civlsa8gPiB0b25cIDsKK+WxpyA+IHRlaVwgOwor5bGjID4gc2hpXCA7CivlsZ8gPiB0ZWlcIDsKK+WxnCA+IHRlaVwgOwor5bGbID4gaGVpXCA7CivlsZogPiByb3VcIDsKK+WxliA+IHNlaVwgOwor5bGUID4gZGVpXCA7CivlsY4gPiBzaGlcIDsKK+WxhyA+IHRlblwgOwor5bC8ID4gYW1hXCA7CivlsLcgPiBrYW5cIDsKK+WwtiA+IGthblwgOwor5bC1ID4gdGFpXCA7CivlsLIgPiBrYW5cIDsKK+WwrCA+IGthaVwgOwor5bCoID4gYm91XCA7CivlsJ8gPiBzZW5cIDsKK+WwjCA+IHNodVwgOwor5bCCID4gc2VuXCA7Civlr70gPiByaW5cIDsKK+WvuSA+IHRhaVwgOwor5a+2ID4gaG91XCA7Civlr7MgPiBob3VcIDsKK+WvsSA+IGdlaVwgOwor5a+wID4ga2FuXCA7Civlr6wgPiBrYW5cIDsKK+WvqCA+IHNhaVwgOwor5a+cID4gbmVpXCA7Civlr5sgPiBrYW5cIDsKK+WvmiA+IGhvdVwgOwor5a+YID4gc2hpXCA7Civlr5cgPiBuZWlcIDsKK+WvlSA+IG5laVwgOwor5a+TID4gZ3V1XCA7Civlr48gPiBrYW5cIDsKK+WvjiA+IGhlaVwgOwor5a+NID4gbmVpXCA7Civlr4sgPiBrZW5cIDsKK+WviiA+IHRlaVwgOwor5a+HID4ga291XCA7Civlr4EgPiBzYW5cIDsKK+WvgCA+IHNhaVwgOwor5a68ID4ga291XCA7CivlrrogPiBrb3VcIDsKK+WusiA+IGhvdVwgOwor5a6vID4ga291XCA7Civlrq0gPiBrdW5cIDsKK+WurCA+IHNlaVwgOwor5a6pID4gc2hpXCA7CivlrqYgPiBrYW5cIDsKK+WupSA+IHl1dVwgOwor5a6WID4ga291XCA7CivlrpUgPiB0b3VcIDsKK+WulCA+IHNodVwgOwor5a6RID4gc2VpXCA7Civlro8gPiBrb3VcIDsKK+WuiyA+IHNvdVwgOwor5a6BID4gY2hvXCA7CivlroAgPiBiZW5cIDsKK+WtvyA+IHNhblwgOwor5a27ID4gZGFpXCA7CivlrbMgPiBzaGlcIDsKK+WtsSA+IHNlblwgOwor5a2vID4ga2FuXCA7Civlra4gPiBzb3VcIDsKK+WtqSA+IGthaVwgOwor5a2oID4gc2VuXCA7CivlrZ8gPiBtb3VcIDsKK+WtnSA+IGtvdVwgOwor5a2cID4gc2hpXCA7CivlrZYgPiBzaGlcIDsKK+WtlSA+IHlvdVwgOwor5a2NID4gZ2VuXCA7CivlrYwgPiByZW5cIDsKK+WtiCA+IHN1aVwgOwor5a2FID4gc2VuXCA7CivlrYMgPiBqb3VcIDsKK+WtgSA+IHJlaVwgOwor5a2AID4gc291XCA7CivlrL4gPiByYW5cIDsKK+WssiA+IGpvdVwgOwor5ayvID4gdGFpXCA7CivlrK0gPiBkYWlcIDsKK+WsrCA+IHNodVwgOwor5ayoID4gc2hpXCA7CivlrKMgPiB0YXVcIDsKK+WsoCA+IHNhblwgOwor5ayeID4gdG91XCA7CivlrJ0gPiBqb3VcIDsKK+WsmyA+IGtlblwgOwor5ayaID4gcmVuXCA7CivlrJcgPiBzZW5cIDsKK+WsliA+IGhlaVwgOwor5ayTID4ga2V1XCA7CivlrJAgPiBzZW5cIDsKK+WsjyA+IGhhblwgOwor5ayOID4gaGFuXCA7CivlrIsgPiBzZW5cIDsKK+WsiCA+IGRldVwgOwor5ayDID4gc2h1XCA7CivlrIEgPiB0b3VcIDsKK+WrvSA+IHJldVwgOwor5au7ID4ga2FuXCA7Civlq7ogPiBrYW5cIDsKK+WruSA+IGJhdVwgOwor5au4ID4gc2VuXCA7Civlq7YgPiBzZXVcIDsKK+WrrCA+IHNoYVwgOwor5auqID4gcmF1XCA7Civlq6kgPiBkb25cIDsKK+WrqCA+IGthblwgOwor5aumID4ga291XCA7Civlq6UgPiBzZW5cIDsKK+WrnSA+IGthdVwgOwor5auaID4gYmFuXCA7Civlq5kgPiBzZWJcIDsKK+WrmCA+IHJ1aVwgOwor5auQID4gam91XCA7Civlq48gPiByb3VcIDsKK+WrjSA+IHRhdVwgOwor5auLID4gam91XCA7Civlq4ggPiBzZXVcIDsKK+WrhyA+IGJlaVwgOwor5auGID4geW91XCA7Civlq4QgPiBnZW5cIDsKK+WqviA+IGtvdVwgOwor5aq7ID4gaGFuXCA7CivlqrkgPiByaXVcIDsKK+WquCA+IHNoaVwgOwor5aq2ID4gam91XCA7CivlqrUgPiB5b3VcIDsKK+WqsiA+IGhlaVwgOwor5aquID4gdG91XCA7Civlqq0gPiBzaHVcIDsKK+WqpyA+IGthaVwgOwor5aqlID4gaGVuXCA7CivlqqQgPiBzaGlcIDsKK+WqoiA+IGJvdVwgOwor5aqeID4gc2hpXCA7CivlqpwgPiB0ZWlcIDsKK+WqlyA+IGtlblwgOwor5aqUID4gYmVuXCA7CivlqpMgPiBrb3VcIDsKK+WqjyA+IHRhblwgOwor5aqMID4gYm91XCA7CivlqoogPiBzZW5cIDsKK+WpviA+IHRvdVwgOwor5am7ID4gZGFuXCA7CivlqbggPiB0b3VcIDsKK+WptyA+IHRlaVwgOwor5amwID4gdGVuXCA7CivlqaogPiByYW5cIDsKK+WpqSA+IGdlblwgOwor5amnID4gc2VpXCA7CivlqaUgPiBkb3VcIDsKK+WpoCA+IHdhblwgOwor5ameID4ga2VpXCA7CivlqZ0gPiB0ZW5cIDsKK+WpnCA+IGthblwgOwor5ambID4ga2VpXCA7CivlqZggPiBrZW5cIDsKK+WplyA+IGdlaVwgOwor5amWID4gdGVuXCA7CivlqZIgPiB0YW5cIDsKK+WpkSA+IHp1aVwgOwor5amHID4gc2FpXCA7CivlqYQgPiBob3VcIDsKK+WpgyA+IHNvdVwgOwor5amCID4gYmVuXCA7CivlqYEgPiByb3VcIDsKK+WoviA+IGdhaVwgOwor5ai5ID4ga2VuXCA7CivlqLYgPiBzaHVcIDsKK+WotSA+IHNodVwgOwor5aiuID4gZGVuXCA7CivlqKkgPiBiZW5cIDsKK+WoqCA+IGJhblwgOwor5ainID4gdGFpXCA7CivlqKQgPiBzb3VcIDsKK+WooyA+IHRlaVwgOwor5aifID4ga2VuXCA7CivlqJ4gPiBkYWlcIDsKK+WomiA+IG5hblwgOwor5aiZID4gZ291XCA7CivlqJcgPiB0ZWlcIDsKK+WojyA+IGJvdVwgOwor5aiNID4gc2VpXCA7CivlqIogPiBrZW5cIDsKK+WoiSA+IGhlaVwgOwor5ae+ID4gc2VuXCA7Civlp7wgPiBzaGlcIDsKK+WnuCA+IGtlblwgOwor5ae3ID4geXV1XCA7Civlp7UgPiBoYWlcIDsKK+WnsyA+IGJlaVwgOwor5aevID4ga291XCA7Civlp64gPiBrb3VcIDsKK+WnrSA+IGtlblwgOwor5aeqID4gbWVpXCA7Civlp6kgPiBkZW5cIDsKK+WnpyA+IGthblwgOwor5aemID4ga2FuXCA7Civlp6QgPiBrb3VcIDsKK+WnoyA+IGtvdVwgOwor5aeiID4ga2VuXCA7Civlp58gPiBrYWlcIDsKK+WnmyA+IHRvdVwgOwor5aeaID4geW91XCA7Civlp5kgPiBuaW5cIDsKK+WnmCA+IGhpblwgOwor5aeXID4gc2FuXCA7Civlp5YgPiBreW9cIDsKK+WnkiA+IHNoaVwgOwor5aeQID4gYW5lXCA7Civlp48gPiBiYW5cIDsKK+WnjSA+IHNhblwgOwor5aeMID4gemVuXCA7Civlp4ogPiBzaGlcIDsKK+WniCA+IHJlaVwgOwor5aeFID4gaGFuXCA7Civlp4QgPiBiaW5cIDsKK+WngyA+IHNlaVwgOwor5aa2ID4ga2VuXCA7CivlprUgPiB0b3VcIDsKK+WmsyA+IGRhaVwgOwor5aaoID4gYm91XCA7CivlpqcgPiBnZW5cIDsKK+WmpiA+IGhvdVwgOwor5aaiID4gaHVuXCA7CivlpqEgPiBraW5cIDsKK+WmoCA+IGRvdVwgOwor5aaeID4ganV1XCA7Civlpp0gPiBzb3VcIDsKK+WmmyA+IHNoaVwgOwor5aaaID4gaHV1XCA7CivlppcgPiBzZW5cIDsKK+WmjyA+IGJ1blwgOwor5aaOID4ga2FpXCA7Civlpo0gPiBrZW5cIDsKK+WmjCA+IHNlaVwgOwor5aaFID4ga291XCA7Civlpb8gPiBnYW5cIDsKK+WlviA+IHNlblwgOwor5aW7ID4gZGFuXCA7CivlpbkgPiBjaGlcIDsKK+WluCA+IGthblwgOwor5aW3ID4gc2VuXCA7CivlpbYgPiBkYWlcIDsKK+WltSA+IHRlaVwgOwor5aWyID4gc2hhXCA7CivlpbEgPiByZW5cIDsKK+WlqSA+IHJlblwgOwor5aWjID4gd2FuXCA7CivlpaEgPiBnYXVcIDsKK+WloCA+IHRlblwgOwor5aWfID4ga291XCA7CivlpZsgPiBrb3VcIDsKK+WlmiA+IGtlaVwgOwor5aWZID4gaG9uXCA7CivlpZggPiBqb3VcIDsKK+WllSA+IGVraVwgOwor5aWUID4gaG9uXCA7CivlpZIgPiBrYWlcIDsKK+WlkCA+IGthblwgOwor5aWOID4ga2VpXCA7CivlpYwgPiB0ZW5cIDsKK+WlhiA+IGtlblwgOwor5aWFID4gaG91XCA7CivlpYMgPiB0ZWlcIDsKK+WlgCA+IGJvdVwgOwor5aSzID4gdGFpXCA7CivlpLIgPiB0b3VcIDsKK+WksCA+IGtvdVwgOwor5aSvID4ga291XCA7CivlpK0gPiB5b3VcIDsKK+WkoyA+IGJvdVwgOwor5aSgID4ga291XCA7CivlpJ0gPiBzZWlcIDsKK+WkmCA+IGJvdVwgOwor5aSSID4gZG91XCA7CivlpJAgPiBrZWlcIDsKK+WkiiA+IHN1aVwgOwor5aSGID4gaG91XCA7CivlpIUgPiBrb3VcIDsKK+WkgiA+IGNoaVwgOwor5aO+ID4gYm91XCA7Civlo7wgPiBrb25cIDsKK+WjuCA+IGtvblwgOwor5aO0ID4gc2h1XCA7Civlo64gPiBzb3VcIDsKK+WjqCA+IHJhaVwgOwor5aOnID4gZ2FuXCA7Civlo6UgPiB0ZW5cIDsKK+WjpCA+IGpvdVwgOwor5aOjID4gcmluXCA7Civlo6AgPiByb3VcIDsKK+WjnyA+IG9rYVwgOwor5aOcID4gdGFuXCA7Civlo5kgPiBrb3VcIDsKK+WjmCA+IHJ1aVwgOwor5aOWID4gemVuXCA7Civlo5UgPiBnb3VcIDsKK+WjlCA+IHRhdVwgOwor5aOQID4gc2hpXCA7Civlo48gPiBrYW5cIDsKK+WjjiA+IGtlblwgOwor5aONID4gemFuXCA7Civlo4wgPiBqb3VcIDsKK+WjiSA+IGt5b1wgOwor5aOFID4geW91XCA7Civlo4IgPiB0ZW5cIDsKK+WivyA+IGVraVwgOwor5aK+ID4ga29uXCA7Civlor0gPiBrYXVcIDsKK+WiuCA+IHNob1wgOwor5aKzID4gZnVuXCA7CivlorEgPiB0b3VcIDsKK+WirSA+IHNlaVwgOwor5aKsID4gY2hpXCA7CivloqkgPiB0b25cIDsKK+WipiA+IGhhblwgOwor5aKlID4gdG91XCA7CivloqEgPiBzZW5cIDsKK+WioCA+IHNlblwgOwor5aKfID4ga3lvXCA7Civlop4gPiB6b3VcIDsKK+WinSA+IGtvdVwgOwor5aKWID4gdG91XCA7CivlopQgPiBzYWlcIDsKK+WikCA+IGtpblwgOwor5aKKID4gdGVuXCA7CivlookgPiB5b3VcIDsKK+WiiCA+IGthblwgOwor5aKFID4gc2hvXCA7CivlooEgPiBiYW5cIDsKK+WigCA+IGNoaVwgOwor5aG/ID4gcm91XCA7Civlob0gPiBzYXVcIDsKK+WhvCA+IHNlblwgOwor5aG6ID4gYmFpXCA7CivlobkgPiB6YW5cIDsKK+WhtCA+IGhvdVwgOwor5aGyID4gam91XCA7CivlobAgPiBhbWFcIDsKK+WhqyA+IHRlblwgOwor5aGkID4ga2VuXCA7CivloaMgPiB0ZWlcIDsKK+WhoSA+IHRlblwgOwor5aGfID4gc291XCA7CivloZ0gPiBoYXVcIDsKK+WhnCA+IGhvdVwgOwor5aGYID4gdG91XCA7CivloZIgPiBzaGlcIDsKK+WhjyA+IGthaVwgOwor5aGOID4geW91XCA7CivloYwgPiB0b3VcIDsKK+WhgSA+IHJ1aVwgOwor5aC/ID4ga2FuXCA7CivloL0gPiBrb3VcIDsKK+WgvCA+IGtvdVwgOwor5aC6ID4ga2FpXCA7CivloK0gPiBrYXVcIDsKK+WgqSA+IGtvdVwgOwor5aCnID4gemVuXCA7CivloKYgPiBrYWlcIDsKK+WgpSA+IGJvdVwgOwor5aChID4gaG91XCA7CivloKAgPiBrb3VcIDsKK+WgnyA+IHRlblwgOwor5aCeID4gdGV1XCA7CivloJwgPiByZW5cIDsKK+WgiyA+IGhvdVwgOwor5aCJID4gaWt1XCA7CivloIggPiBrb3VcIDsKK+WghyA+IGtpblwgOwor5aCEID4gZ2VuXCA7CivloIMgPiBrb25cIDsKK+WfvyA+IGRlaVwgOwor5Z++ID4gc2h1XCA7Civln70gPiBzb3VcIDsKK+WfuSA+IGJhaVwgOwor5Z+4ID4gZWtpXCA7Civln7YgPiBnZWlcIDsKK+WfsyA+IGthblwgOwor5Z+yID4gaG91XCA7Civln7AgPiBzYWlcIDsKK+WfriA+IHRhblwgOwor5Z+tID4gdGFpXCA7Civln6wgPiB0b3VcIDsKK+WfqSA+IHNhdVwgOwor5Z+mID4gd2FuXCA7Civln6UgPiBzZWlcIDsKK+WfoyA+IHNhaVwgOwor5Z+iID4ga2VuXCA7Civln58gPiBpa2lcIDsKK+WfniA+IHRlaVwgOwor5Z+dID4gdGVuXCA7Civln5wgPiBzaG9cIDsKK+WflSA+IHRlaVwgOwor5Z+PID4gc2VuXCA7Civln4wgPiByb3VcIDsKK+WfhyA+IHlvdVwgOwor5Z+EID4gaG91XCA7Civln4IgPiBrYXVcIDsKK+WfgCA+IHN1aVwgOwor5Z6/ID4gc2hvXCA7Civlnr4gPiBrYW5cIDsKK+WevSA+IGdpblwgOwor5Z68ID4gZWtpXCA7CivlnrsgPiBoYWlcIDsKK+WeuSA+IGhvdVwgOwor5Z64ID4ga2FuXCA7CivlnrYgPiBzZWlcIDsKK+WesCA+IHRhb1wgOwor5Z6pID4gc2VpXCA7CivlnqggPiBzaHVcIDsKK+WepyA+IGtlaVwgOwor5Z6lID4ga2V1XCA7CivlnqAgPiBnaW5cIDsKK+WenyA+IHlvdVwgOwor5Z6aID4gZ2V1XCA7CivlnpkgPiBrdXVcIDsKK+WelyA+IHRldVwgOwor5Z6VID4ga291XCA7CivlnpMgPiBnYWlcIDsKK+WekCA+IHNoaVwgOwor5Z6MID4gdG91XCA7CivlnokgPiBob3VcIDsKK+WeiCA+IHRhaVwgOwor5Z6BID4gY2hpXCA7Civlnb4gPiBjaG9cIDsKK+WdvSA+IHJlaVwgOwor5Z27ID4gY2hpXCA7CivlnbAgPiBrZWlcIDsKK+WdriA+IGRhaVwgOwor5Z2tID4gZGVpXCA7CivlnasgPiB0ZW5cIDsKK+WdqSA+IGthblwgOwor5Z2lID4gc2hvXCA7CivlnaQgPiBrb25cIDsKK+WdoiA+IGhhblwgOwor5Z2aID4ga2VuXCA7CivlnZkgPiBrZWlcIDsKK+WdlyA+IGthaVwgOwor5Z2RID4ga291XCA7CivlnY8gPiBoYWlcIDsKK+WdjiA+IGthblwgOwor5Z2NID4gdGFuXCA7CivlnYwgPiBob25cIDsKK+WdiyA+IGh1blwgOwor5Z2JID4gdG9uXCA7CivlnYYgPiBiYWlcIDsKK+WdhSA+IGtpblwgOwor5Z2BID4gc2hpXCA7CivlnYAgPiBzaGlcIDsKK+WcrSA+IGtlaVwgOwor5ZymID4gaXJpXCA7CivlnKIgPiB0ZWlcIDsKK+WcniA+IHJhblwgOwor5ZydID4gcmFuXCA7CivlnJwgPiBrYW5cIDsKK+WcmyA+IGVraVwgOwor5ZyaID4ga2FpXCA7CivlnIwgPiBzZW5cIDsKK+WciiA+IHNlaVwgOwor5ZyJID4gZ3lvXCA7CivlnIggPiBrZW5cIDsKK+WchyA+IHJpblwgOwor5ZyFID4ga2FuXCA7CivlnIQgPiBneW9cIDsKK+WcgiA+IGtvblwgOwor5ZyBID4gZ2luXCA7Civlm78gPiB5dXVcIDsKK+WbuSA+IHJlaVwgOwor5Zu3ID4ga2luXCA7Civlm7EgPiBzb3VcIDsKK+WbrSA+IGdhblwgOwor5ZusID4ga2FpXCA7Civlm6ogPiBzb3VcIDsKK+WbqCA+IGhlblwgOwor5ZunID4ga2VpXCA7Civlm6UgPiBrb3VcIDsKK+WbpCA+IHRvblwgOwor5ZuhID4ganV1XCA7Civlm50gPiBrZW5cIDsKK+WbnCA+IGppblwgOwor5ZuYID4ga2FpXCA7Civlm5QgPiBkb3VcIDsKK+WbjyA+IGthblwgOwor5ZuKID4gbm91XCA7Civlm4ggPiBnZWlcIDsKK+WbhiA+IHRhaVwgOwor5ZuFID4gdGVuXCA7Civlm4MgPiBzb3VcIDsKK+WbgiA+IGdvdVwgOwor5ZuAID4gdGVuXCA7Civlmr4gPiBrYW5cIDsKK+WauyA+IGdvdVwgOwor5Zq3ID4gamF1XCA7CivlmrUgPiBzYW5cIDsKK+WariA+IGtvdVwgOwor5ZqsID4gaGluXCA7CivlmqogPiB0YW5cIDsKK+WaqCA+IHJvdVwgOwor5ZqiID4gbm91XCA7CivlmpogPiBnaW5cIDsKK+WamSA+IGdvdVwgOwor5ZqUID4gdGVpXCA7Civlmo4gPiBrYXVcIDsKK+WajCA+IHNlaVwgOwor5ZqIID4geW91XCA7CivlmoYgPiBrb3VcIDsKK+WagyA+IHRvdVwgOwor5ZqCID4gcmFuXCA7CivlmoAgPiBkZWlcIDsKK+WZvyA+IHN1aVwgOwor5Zm5ID4gdG91XCA7CivlmbggPiB0b25cIDsKK+WZtyA+IGtpblwgOwor5Zm1ID4gZG91XCA7CivlmbQgPiBmdW5cIDsKK+WZsCA+IHlvdVwgOwor5ZmsID4gemVpXCA7CivlmaUgPiBkb3VcIDsKK+WZpCA+IGtpblwgOwor5ZmjID4gY2h1XCA7CivlmaIgPiBpa3VcIDsKK+WZoSA+IHNlblwgOwor5ZmfID4geW91XCA7CivlmZ4gPiBnZW5cIDsKK+WZmSA+IGtpblwgOwor5ZmUID4gdG91XCA7CivlmZMgPiBreW9cIDsKK+WZjSA+IHNldVwgOwor5ZmLID4gdG9uXCA7CivlmYkgPiB0YW5cIDsKK+WZhyA+IHRvdVwgOwor5ZmGID4gc291XCA7CivlmYMgPiBoYW5cIDsKK+WZgCA+IHNvblwgOwor5Zi+ID4gdGFuXCA7CivlmL0gPiB0YW5cIDsKK+WYuSA+IHJldVwgOwor5Zi3ID4ga291XCA7CivlmLYgPiBzZWlcIDsKK+WYtSA+IGtldVwgOwor5ZiuID4gdG91XCA7CivlmK0gPiBob3VcIDsKK+WYrCA+IHNhaVwgOwor5ZirID4gZGFtXCA7CivlmKogPiBiYWlcIDsKK+WYlSA+IGtlblwgOwor5ZiSID4ga2VpXCA7CivlmJAgPiBoYXVcIDsKK+WYjSA+IHJvdVwgOwor5ZiMID4gaGV1XCA7CivlmIogPiBnYWlcIDsKK+WYiCA+IHNhdVwgOwor5ZiFID4ga2FpXCA7CivlmIQgPiBrZXVcIDsKK+WXvyA+IHRhblwgOwor5Ze+ID4gc291XCA7Civll7sgPiBzaGFcIDsKK+WXuiA+IHN1aVwgOwor5Ze5ID4gcmVuXCA7Civll7ggPiBnb3VcIDsKK+WXtyA+IGdvdVwgOwor5ZeoID4ga2FpXCA7Civll6UgPiBrb3VcIDsKK+WXpCA+IHNoaVwgOwor5ZehID4gcm91XCA7Civll54gPiBzaGlcIDsKK+WXmyA+IGtlblwgOwor5ZeZID4gaG91XCA7Civll5ggPiBrZWlcIDsKK+WXkyA+IHNvdVwgOwor5ZeSID4gdG91XCA7Civll4wgPiBla2lcIDsKK+WXiiA+IGtvdVwgOwor5ZeIID4geW91XCA7Civll4MgPiBrb3VcIDsKK+WXgSA+IHRlaVwgOwor5Za/ID4gc291XCA7Civllq0gPiBnZW5cIDsKK+WWpiA+IGpvdVwgOwor5ZakID4ga291XCA7CivllpsgPiBrYW5cIDsKK+WWmSA+IGthaVwgOwor5ZaXID4gZ2luXCA7CivllpUgPiBiZW5cIDsKK+WWlCA+IGFrdVwgOwor5ZaSID4gc2FuXCA7Civllo8gPiBzaGFcIDsKK+WWjSA+IHNhaVwgOwor5ZaKID4ga2FuXCA7CivlloggPiBrYWlcIDsKK+WWgyA+IG5hblwgOwor5ZW/ID4gdGFuXCA7Civllb0gPiBnYW5cIDsKK+WVuyA+IHNoaVwgOwor5ZW0ID4gdGFuXCA7Civlla4gPiBnb3VcIDsKK+WVpSA+IHNoYVwgOwor5ZWhID4gaGFpXCA7CivllZ8gPiBrZWlcIDsKK+WVmyA+IHNhaVwgOwor5ZWZID4gc2hpXCA7CivllZcgPiB0YW5cIDsKK+WVliA+IHRhblwgOwor5ZWVID4gdG91XCA7CivllZQgPiBrZWlcIDsKK+WVkyA+IGtlaVwgOwor5ZWRID4gc291XCA7CivllZAgPiBzYWlcIDsKK+WVjSA+IHRvblwgOwor5ZWMID4ga291XCA7CivllYkgPiByYW5cIDsKK+WViCA+IGtvdVwgOwor5ZWBID4gdG91XCA7CivllYAgPiBnYWlcIDsKK+WUuyA+IHJhaVwgOwor5ZS2ID4gc2hhXCA7CivllLMgPiByZWlcIDsKK+WUqyA+IGdpblwgOwor5ZSqID4gaG91XCA7CivllKQgPiBrYW5cIDsKK+WUnSA+IGtvdVwgOwor5ZSYID4ga2VpXCA7CivllJcgPiB0b3VcIDsKK+WUlSA+IHNvdVwgOwor5ZSRID4gemVpXCA7CivllI0gPiBrYW5cIDsKK+WUjCA+IHNlblwgOwor5ZSJID4ga2FpXCA7CivllIUgPiBrYW5cIDsKK+WUhCA+IHV0YVwgOwor5ZSBID4gZ2VuXCA7Civlk70gPiBrb3VcIDsKK+WTvCA+IGtvdVwgOwor5ZO7ID4ga2FuXCA7Civlk7ggPiBzYWlcIDsKK+WTsCA+IHJvdVwgOwor5ZOvID4ga2VuXCA7Civlk64gPiBrb3VcIDsKK+WTpCA+IGJvdVwgOwor5ZOiID4gcm91XCA7Civlk6AgPiBrb3VcIDsKK+WTjyA+IGtvblwgOwor5ZOOID4gZ2FpXCA7Civlk4ogPiBpa3VcIDsKK+WTiCA+IGdvdVwgOwor5ZOGID4gc2hpXCA7Civlk4UgPiBrb3VcIDsKK+WThCA+IGtvdVwgOwor5ZODID4gdG91XCA7Civlkr4gPiByb3VcIDsKK+WSuiA+IGtlblwgOwor5ZK4ID4ga2FuXCA7CivlkrcgPiB0YXVcIDsKK+WStSA+IGt1dVwgOwor5ZK0ID4ga2FpXCA7Civlkq4gPiB0b3VcIDsKK+WSqyA+IHNoaVwgOwor5ZKoID4gc2hpXCA7CivlkqMgPiBrb3VcIDsKK+WSlCA+IHJvdVwgOwor5ZKSID4gc2h1XCA7Civlko0gPiBrYWlcIDsKK+WShiA+IGhvdVwgOwor5ZKFID4gdG91XCA7CivlkoIgPiBzb3VcIDsKK+WSgSA+IGthblwgOwor5ZG3ID4ga291XCA7CivlkbIgPiBzaGlcIDsKK+WRsCA+IHNoaVwgOwor5ZGvID4gaGVpXCA7CivlkakgPiBzaGlcIDsKK+WRpyA+IHRlaVwgOwor5ZGlID4gemVuXCA7CivlkaQgPiByZWlcIDsKK+WRoyA+IGJvdVwgOwor5ZGhID4gYnVuXCA7CivlkaAgPiBob25cIDsKK+WRniA+IHNoaVwgOwor5ZGIID4gdGVpXCA7CivlkYcgPiBrZWlcIDsKK+WRhSA+IGJhaVwgOwor5ZGDID4gYWt1XCA7CivlkYEgPiBraW5cIDsKK+WQvCA+IGtvdVwgOwor5ZC6ID4gdG91XCA7CivlkLEgPiBzaGlcIDsKK+WQsCA+IGtvdVwgOwor5ZCvID4ga2VpXCA7CivlkK4gPiBzZW5cIDsKK+WQrSA+IGtvdVwgOwor5ZCsID4ga2luXCA7CivlkKogPiBndXVcIDsKK+WQqSA+IGZ1blwgOwor5ZCoID4gdG9uXCA7CivlkKUgPiBob3VcIDsKK+WQpCA+IGthaVwgOwor5ZCgID4gaGFpXCA7CivlkJ8gPiBnaW5cIDsKK+WQniA+IGRvblwgOwor5ZCZID4ga3V1XCA7CivlkJggPiBnb3VcIDsKK+WQlSA+IHJ5b1wgOwor5ZCGID4geW91XCA7CivlkIUgPiB0ZW5cIDsKK+WQgiA+IGJvdVwgOwor5Y+3ID4gZ291XCA7Civlj64gPiB0ZWlcIDsKK+WPqCA+IHRvdVwgOwor5Y+mID4gcmVpXCA7Civlj58gPiBzb3VcIDsKK+WPnSA+IGtvdVwgOwor5Y+bID4gaGFuXCA7Civlj5ggPiBoZW5cIDsKK+WPkyA+IHNoaVwgOwor5Y+PID4ga2FpXCA7Civlj4cgPiB0YWlcIDsKK+WPhSA+IHNhblwgOwor5Y+EID4gc2FuXCA7Civlj4EgPiBzYW5cIDsKK+WPgCA+IHNlblwgOwor5Y69ID4gcnVpXCA7CivljrogPiBreW9cIDsKK+WOuSA+IGppdVwgOwor5Y64ID4gcmluXCA7CivljrcgPiBrb3VcIDsKK+WOtiA+IHNoaVwgOwor5Y61ID4gZ2VuXCA7CivljrIgPiByZWlcIDsKK+WOriA+IHNoaVwgOwor5Y6rID4gZ291XCA7CivljqogPiBraW5cIDsKK+WOpyA+IHRlblwgOwor5Y6hID4gZ2VuXCA7CivljpwgPiBzaGlcIDsKK+WOmSA+IHNoYVwgOwor5Y6XID4gdGVpXCA7CivljpYgPiBib3VcIDsKK+WOkyA+IGdhaVwgOwor5Y6OID4gc2hpXCA7CivljokgPiByZWlcIDsKK+WOiCA+IGthblwgOwor5Y6DID4gc2VuXCA7CivljoIgPiBrYW5cIDsKK+WNuiA+IGtpblwgOwor5Y2vID4gYm91XCA7Civlja4gPiBzaGlcIDsKK+WNrCA+IGdhdVwgOwor5Y2lID4gc2VpXCA7CivljaQgPiBzZWlcIDsKK+WNoyA+IHl1dVwgOwor5Y2eID4gaGVuXCA7CivljZ0gPiBrYW5cIDsKK+WNlSA+IHRhblwgOwor5Y2QID4gYmFuXCA7CivljYsgPiBzZWlcIDsKK+WNhSA+IHNvdVwgOwor5Y2EID4ganV1XCA7CivljL4gPiBoZW5cIDsKK+WMuCA+IGtlaVwgOwor5Yy3ID4ga3lvXCA7CivljLQgPiBzYW5cIDsKK+WMsyA+IHJlblwgOwor5YyyID4gcmVuXCA7CivljLAgPiB0YW5cIDsKK+WMryA+IHdhaVwgOwor5YyoID4gem91XCA7CivljKUgPiBoZW5cIDsKK+WMnyA+IGtvdVwgOwor5YydID4gc291XCA7CivljJggPiBkb3VcIDsKK+WMkiA+IHRvdVwgOwor5YyPID4gaG91XCA7CivljIwgPiBrb3VcIDsKK+WMiyA+IHRvdVwgOwor5YyEID4ga2FpXCA7Civli70gPiBidW5cIDsKK+WLuSA+IGhvdVwgOwor5Yu3ID4gam91XCA7Civli7UgPiByZWlcIDsKK+WLtCA+IHJ5b1wgOwor5YuzID4ga3VuXCA7Civli7IgPiBrdW5cIDsKK+WLsSA+IGJhaVwgOwor5YuvID4gdGFuXCA7Civli6wgPiBrZW5cIDsKK+WLqyA+IGhhblwgOwor5YuoID4geW91XCA7Civli6YgPiBzb3VcIDsKK+WLoSA+IGhldVwgOwor5YubID4ga3VuXCA7Civli5cgPiBib3VcIDsKK+WLlCA+IGJlblwgOwor5YuTID4ga2FpXCA7Civli5EgPiByYWlcIDsKK+WLkCA+IGJhdVwgOwor5YuPID4gaG91XCA7Civli40gPiBrZWlcIDsKK+WLjCA+IGtlblwgOwor5YuIID4geW91XCA7Civli4YgPiByb3VcIDsKK+WLhCA+IGJpblwgOwor5YuCID4ga291XCA7Civli4EgPiBrZWlcIDsKK+WKvyA+IHNlaVwgOwor5Yq+ID4gZ2FpXCA7CivlirogPiBib3VcIDsKK+WKtyA+IHlvdVwgOwor5Yq2ID4ga291XCA7CivlirUgPiBrZW5cIDsKK+WKsyA+IHJvdVwgOwor5YqyID4ga2VpXCA7Civliq8gPiBzaG9cIDsKK+WKpyA+IHNoaVwgOwor5YqlID4ga291XCA7CivliqQgPiBraW5cIDsKK+WKniA+IGhlblwgOwor5YqdID4ga2FuXCA7CivlipcgPiBzYW5cIDsKK+WKliA+IHNhblwgOwor5YqUID4ga2VuXCA7CivlipIgPiBrZW5cIDsKK+WKkSA+IHphaVwgOwor5YqOID4ga2VuXCA7CivliowgPiBrZWlcIDsKK+WKiiA+IGthaVwgOwor5YqGID4gcmVuXCA7Civlib8gPiBzb3VcIDsKK+WJvCA+IHNhblwgOwor5Ym7ID4gaHV1XCA7CivlibggPiB0YW5cIDsKK+WJtyA+IHNhblwgOwor5Ym0ID4gZ2FpXCA7CivlibMgPiB0b3VcIDsKK+WJsSA+IGtlblwgOwor5YmwID4gam91XCA7Civlia0gPiBva3VcIDsKK+WJrCA+IHRhblwgOwor5YmqID4gc2VuXCA7CivliakgPiBqb3VcIDsKK+WJpCA+IHphaVwgOwor5YmgID4ga2VpXCA7CivliZwgPiB3YW5cIDsKK+WJmiA+IHNoaVwgOwor5YmZID4gc291XCA7CivliZcgPiBzYW5cIDsKK+WJjyA+IHNvdVwgOwor5YmFID4gcm91XCA7CivliYQgPiBrZWlcIDsKK+WIuCA+IGtlblwgOwor5YiyID4ga2VpXCA7CivliLEgPiBzb3VcIDsKK+WIrCA+IHNhblwgOwor5YiqID4gc2FuXCA7CivliKggPiBob3VcIDsKK+WIpyA+IGdvdVwgOwor5YiiID4gcmVpXCA7CivliKEgPiBiaW5cIDsKK+WIoCA+IHNhblwgOwor5YieID4gc2hvXCA7CivliJMgPiBndW5cIDsKK+WIkCA+IHRhblwgOwor5YiOID4gZnVuXCA7CivliIwgPiBzb25cIDsKK+WIiyA+IHNlblwgOwor5YiFID4gc291XCA7CivliIQgPiBqaW5cIDsKK+WIgiA+IHRhdVwgOwor5YiBID4gdGV1XCA7Civlh74gPiBrYW5cIDsKK+WHtyA+IGthaVwgOwor5Ye1ID4ga2FuXCA7Civlh7MgPiB0b3VcIDsKK+WHsiA+IGthblwgOwor5YexID4gZ2FpXCA7Civlh7AgPiBrb3VcIDsKK+WHriA+IGZ1dVwgOwor5YetID4gaGVpXCA7Civlh6ggPiBmdXVcIDsKK+WHpSA+IGt5b1wgOwor5YekID4gaG91XCA7Civlh6MgPiBoYW5cIDsKK+WHoiA+IGJvblwgOwor5YecID4gcmluXCA7Civlh5sgPiByaW5cIDsKK+WHmCA+IHNoaVwgOwor5YeXID4gc2FpXCA7Civlh5YgPiBqdW5cIDsKK+WHlSA+IGJlaVwgOwor5YeUID4gc2F1XCA7Civlh5EgPiBzb3VcIDsKK+WHjyA+IGdlblwgOwor5YeKID4gc2VpXCA7Civlh4ggPiBzb3VcIDsKK+WHhiA+IGp1blwgOwor5YeCID4gYmFpXCA7Civlhr8gPiBzZW5cIDsKK+WGuiA+IGJpblwgOwor5Ya4ID4gaGFuXCA7Civlhq0gPiB0YWlcIDsKK+WGqSA+IHNoYVwgOwor5YamID4ga291XCA7CivlhqUgPiBtZWlcIDsKK+WGoyA+IHNodVwgOwor5YahID4gYm91XCA7CivlhpUgPiBiZW5cIDsKK+WGkyA+IGtvdVwgOwor5YaQID4gYm91XCA7Civlho8gPiBrZWlcIDsKK+WGiyA+IGtlaVwgOwor5YaJID4gbmVuXCA7CivlhoQgPiB6ZW5cIDsKK+WGgyA+IGJvdVwgOwor5YaCID4ga2VpXCA7Civlha4gPiBrZWlcIDsKK+WFpyA+IGRhaVwgOwor5YWmID4gYm91XCA7CivlhaQgPiBrb3VcIDsKK+WFmCA+IHNoaVwgOwor5YWVID4gc2hpXCA7CivlhYogPiB0YWlcIDsKK+WEvyA+IGppblwgOwor5YS9ID4gcmFpXCA7CivlhLwgPiBnZW5cIDsKK+WEuyA+IHRvdVwgOwor5YS5ID4gc2FuXCA7CivlhLcgPiByZWlcIDsKK+WEsyA+IHNhblwgOwor5YSxID4gcm91XCA7CivlhK8gPiB0b3VcIDsKK+WEqSA+IHNoaVwgOwor5YSnID4gc2FuXCA7CivlhKUgPiBpa3VcIDsKK+WEpCA+IGhvdVwgOwor5YSjID4ga291XCA7CivlhKIgPiByeW9cIDsKK+WEoSA+IHJhaVwgOwor5YSdID4ga2VpXCA7CivlhJwgPiBkYXVcIDsKK+WEmiA+IGJvdVwgOwor5YSZID4ga2VuXCA7CivlhJYgPiByYW5cIDsKK+WElSA+IHNlaVwgOwor5YSTID4gdGFpXCA7CivlhJEgPiBnYW5cIDsKK+WEkCA+IGhpblwgOwor5YSOID4gc2FpXCA7CivlhIwgPiBrZXVcIDsKK+WEiyA+IHRhblwgOwor5YSKID4gc2hvXCA7CivlhIkgPiBrZW5cIDsKK+WEiCA+IGthaVwgOwor5YSHID4ga2VuXCA7CivlhIYgPiBrZWlcIDsKK+WEhSA+IHRvdVwgOwor5YSDID4gc2VuXCA7CivlhIIgPiBkb3VcIDsKK+WDvyA+IHNoaVwgOwor5YO8ID4gaG91XCA7Civlg7ggPiBraW5cIDsKK+WDtiA+IGJpblwgOwor5YOvID4gcmluXCA7Civlg64gPiBkb3VcIDsKK+WDrSA+IHNlblwgOwor5YOsID4gc2V1XCA7Civlg6kgPiBrYW5cIDsKK+WDqCA+IGh1blwgOwor5YOkID4gdGFuXCA7Civlg6MgPiBzZW5cIDsKK+WDoiA+IHNlblwgOwor5YOgID4gZmFuXCA7Civlg50gPiBzYW5cIDsKK+WDnCA+IHRvdVwgOwor5YOZID4ga291XCA7Civlg5cgPiByYXVcIDsKK+WDlCA+IHNvblwgOwor5YOTID4gdGFpXCA7Civlg5AgPiBzZW5cIDsKK+WDjiA+IHNlblwgOwor5YOMID4geW91XCA7Civlg4sgPiB0YW5cIDsKK+WDiiA+IHNlblwgOwor5YOJID4gc2VuXCA7Civlg4ggPiBiYW5cIDsKK+WDhiA+IHJlblwgOwor5YOEID4gaGV1XCA7Civlg4IgPiByb3VcIDsKK+WDgCA+IHRlaVwgOwor5YK6ID4gdGVpXCA7CivlgrggPiBzYXVcIDsKK+WCtSA+IHNhaVwgOwor5YKyID4gZ291XCA7CivlgrAgPiBob3VcIDsKK+WCryA+IHNvdVwgOwor5YKuID4gc291XCA7Civlgq0gPiB5b3VcIDsKK+WCqiA+IHNhblwgOwor5YKkID4gc2FpXCA7CivlgqEgPiBoZWlcIDsKK+WCnSA+IHRhblwgOwor5YKbID4geW91XCA7CivlgpogPiBrb3VcIDsKK+WCliA+IHNhdVwgOwor5YKUID4ga2VuXCA7CivlgpMgPiBzZW5cIDsKK+WCkiA+IGtlaVwgOwor5YKQID4ga291XCA7Civlgo8gPiB0b3VcIDsKK+WCjiA+IHRlblwgOwor5YKLID4ga2F1XCA7CivlgocgPiBqb3VcIDsKK+WChiA+IGdlblwgOwor5YKCID4gY2hpXCA7CivlgoEgPiBzb3VcIDsKK+WCgCA+IGthaVwgOwor5YG7ID4gcm91XCA7CivlgbogPiBzYW5cIDsKK+WBuCA+IHRvdVwgOwor5YGzID4gdGFuXCA7CivlgbIgPiBzaGlcIDsKK+WBrSA+IGJlblwgOwor5YGsID4gc291XCA7CivlgasgPiBjaGlcIDsKK+WBqSA+IGh1dVwgOwor5YGoID4gc2hpXCA7CivlgaYgPiBzaG9cIDsKK+WBoiA+IHNldVwgOwor5YGhID4gdGFuXCA7CivlgZ4gPiB5b3VcIDsKK+WBnSA+IGhhaVwgOwor5YGbID4gc291XCA7CivlgZkgPiB0ZWlcIDsKK+WBmCA+IGthblwgOwor5YGXID4gc2VpXCA7CivlgZYgPiBzaGFcIDsKK+WBlSA+IGthaVwgOwor5YGTID4gYWt1XCA7CivlgZIgPiB0b3VcIDsKK+WBkSA+IGh1dVwgOwor5YGQID4gZ2FuXCA7CivlgY8gPiBoZW5cIDsKK+WBjiA+IHdhaVwgOwor5YGNID4gdGVpXCA7CivlgYsgPiBoZWlcIDsKK+WBhCA+IGRhblwgOwor5YGCID4gc2VuXCA7CivlgLwgPiBjaGlcIDsKK+WAtyA+IGRhaVwgOwor5YC0ID4gaG9uXCA7CivlgLMgPiBzaGlcIDsKK+WAsiA+IHRvdVwgOwor5YCxID4ga29uXCA7CivlgKsgPiByaW5cIDsKK+WAqiA+IGdlaVwgOwor5YCoID4ga3lvXCA7CivlgKcgPiBzb3VcIDsKK+WApSA+IGtvdVwgOwor5YCjID4gaG91XCA7CivlgJ4gPiBrZWlcIDsKK+WAnSA+IGthblwgOwor5YCXID4gaG91XCA7CivlgJYgPiBrb3VcIDsKK+WAlSA+IHN1aVwgOwor5YCTID4gdGFuXCA7CivlgJEgPiBtb25cIDsKK+WAjiA+IHRlblwgOwor5YCNID4gYmFpXCA7CivlgIogPiBzb3VcIDsKK+WAiCA+IHJhaVwgOwor5YCFID4gc2FpXCA7CivlgIQgPiBrb3VcIDsKK+WAgiA+IGhlaVwgOwor5YCBID4gY2hpXCA7Civkv78gPiBjaGlcIDsKK+S/vSA+IGtpblwgOwor5L+8ID4gaWt1XCA7Civkv7ggPiBob3VcIDsKK+S/tCA+IHNlblwgOwor5L+zID4gaGFpXCA7Civkv7IgPiBrb3VcIDsKK+S/qyA+IHJhaVwgOwor5L+fID4gc2hpXCA7Civkv5wgPiBoZWlcIDsKK+S/myA+IGJlblwgOwor5L+WID4gaGFpXCA7Civkv5QgPiBrZW5cIDsKK+S/kyA+IGdhdVwgOwor5L+SID4ga29uXCA7Civkv5EgPiB5b3VcIDsKK+S/jyA+IHNldVwgOwor5L+KID4ganVuXCA7Civkv4YgPiBzaG9cIDsKK+S/gCA+IHRhaVwgOwor5L6+ID4ga291XCA7Civkvr0gPiBkYW5cIDsKK+S+uSA+IHRlaVwgOwor5L6rID4gbmVpXCA7CivkvqMgPiByeW9cIDsKK+S+nyA+IHNlblwgOwor5L6XID4gdG91XCA7CivkvpYgPiByb25cIDsKK+S+lCA+IGJvdVwgOwor5L6RID4geXV1XCA7Civkvo8gPiBzaHVcIDsKK+S+iiA+IGtvdVwgOwor5L6IID4gc2hpXCA7CivkvoUgPiBrYWlcIDsKK+S+gyA+IGthblwgOwor5L6AID4ga2VpXCA7Civkvb0gPiBzaGlcIDsKK+S9vCA+IGtvdVwgOwor5L26ID4gc2VuXCA7CivkvbcgPiBrb3VcIDsKK+S9sSA+IGhvdVwgOwor5L2vID4geW91XCA7Civkva4gPiBrb3VcIDsKK+S9qSA+IGhhaVwgOwor5L2jID4geW91XCA7CivkvaIgPiBreW9cIDsKK+S9oSA+IGtlblwgOwor5L2fID4gdG91XCA7CivkvZ4gPiBuZWlcIDsKK+S9nSA+IGtvdVwgOwor5L2YID4gc2hhXCA7CivkvZEgPiB5dXVcIDsKK+S9jCA+IHNoaVwgOwor5L2JID4ga3lvXCA7CivkvYYgPiB0YW5cIDsKK+S9giA+IHlhaVwgOwor5L2AID4gc2hpXCA7CivkvLsgPiBob3VcIDsKK+S8uSA+IHNob1wgOwor5Ly2ID4gcmVpXCA7CivkvK0gPiBrZW5cIDsKK+S8oyA+IGtlblwgOwor5LyYID4geXV1XCA7CivkvJcgPiBnaW5cIDsKK+S8kyA+IGhhaVwgOwor5LySID4ga2luXCA7CivkvIkgPiBrb3VcIDsKK+S8hyA+IGVraVwgOwor5LyFID4gdG9uXCA7CivkvIIgPiBoYWlcIDsKK+S7vyA+IGhvdVwgOwor5Lu+ID4gdGVpXCA7Civku70gPiBoaW5cIDsKK+S7tyA+IGthaVwgOwor5LuxID4ga2VuXCA7Civku68gPiBzb3VcIDsKK+S7rSA+IGppblwgOwor5LugID4ga2FuXCA7Civku58gPiBzZW5cIDsKK+S7niA+IGppblwgOwor5LucID4ga291XCA7Civku5ogPiBrZW5cIDsKK+S7kCA+IHNhblwgOwor5LuOID4ganV1XCA7Civku40gPiBqb3VcIDsKK+S7gyA+IHRlaVwgOwor5LuAID4ganV1XCA7Civkur4gPiBib3VcIDsKK+S6tyA+IHJlblwgOwor5Lq2ID4gdGFuXCA7CivkurAgPiBrZWlcIDsKK+S6oiA+IGtvdVwgOwor5LqgID4gdG91XCA7Civkup0gPiBzZWlcIDsKK+S6lyA+IHNhaVwgOwor5LqWID4gc2hpXCA7CivkuoMgPiByaW5cIDsKK+S6gSA+IGtlblwgOwor5Lm/ID4gY2hpXCA7CivkubkgPiBrYW5cIDsKK+S5qiA+IGRvdVwgOwor5LmpID4ga2VpXCA7CivkuaggPiBzaGlcIDsKK+S5oiA+IGdhaVwgOwor5LmWID4ga2FpXCA7CivkuZMgPiBoYXVcIDsKK+S5kiA+IGhlaVwgOwor5LmRID4gZ2luXCA7CivkuYIgPiBnYWlcIDsKK+S4viA+IGt5b1wgOwor5Li9ID4gcmVpXCA7CivkuLYgPiBjaHVcIDsKK+S4syA+IHNhblwgOwor5LixID4ga2FuXCA7CivkuLAgPiBob3VcIDsKK+S4ryA+IGthaVwgOwor5LioID4ga29uXCA7CivkuKMgPiB5dXVcIDsKK+S4mSA+IGhlaVwgOwor5LiXID4gc2VpXCA7CivkuJMgPiBzZW5cIDsKK+S4kCA+IGthaVwgOwor5LiPID4gYmVuXCA7CivkuIIgPiBrb3VcIDsKK+i/piA+IGthXCA7Civnn6IgPiB5YVwgOwor5b+cID4gb3VcIDsKK+W/jCA+IGtpXCA7Civovq0gPiBqaVwgOwor5b6uID4gYmlcIDsKK+W+oSA+IGdvXCA7Civovp4gPiBqaVwgOwor5b6SID4gdG9cIDsKK+W+kCA+IGpvXCA7CivlvoMgPiBvdVwgOwor5b6AID4gb3VcIDsKK+ecvCA+IG1lXCA7CivovKogPiB3YVwgOwor5bylID4gbWlcIDsKK+ecnyA+IG1hXCA7CivovJ0gPiBraVwgOwor5byVID4gaW5cIDsKK+W8kCA+IG5pXCA7Civlu7YgPiBlblwgOwor55uuID4gbWVcIDsKK+i6qyA+IG1pXCA7CivluqsgPiBrb1wgOwor5bqnID4gemFcIDsKK+W6piA+IGRvXCA7CivlupwgPiBmdVwgOwor5bqHID4gaGlcIDsKK+i4sCA+IHl1XCA7CivluLAgPiBraVwgOwor55e6ID4gaGlcIDsKK+i3ryA+IHJvXCA7Civlt64gPiBzYVwgOwor6LeqID4ga2lcIDsKK+W3qCA+IGtvXCA7Civlt6MgPiBzdVwgOwor5beeID4gc3VcIDsKK+eXmyA+IHRzXCA7CivnlrIgPiBoaVwgOwor55aRID4gZ2lcIDsKK+eWjiA+IHNvXCA7CivnlosgPiBzb1wgOwor6LW3ID4ga2lcIDsKK+i1tCA+IGZ1XCA7CivnlLAgPiB0YVwgOwor55SlID4gb2lcIDsKK+i0lCA+IGhpXCA7CivosrsgPiBoaVwgOwor6LK0ID4ga2lcIDsKK+eSsCA+IHdhXCA7CivosqggPiBrYVwgOwor6LKgID4gZnVcIDsKK+ixqyA+IHlvXCA7CivlsaUgPiByaVwgOwor5bGTID4ga2lcIDsKK+WxiyA+IHlhXCA7CivosLcgPiB5YVwgOwor55CGID4gcmlcIDsKK+WvnSA+IG5lXCA7Civlr5AgPiBiaVwgOwor54+IID4ga2FcIDsKK+WvhCA+IGtpXCA7CivlrrYgPiBrZVwgOwor5a6fID4gbWlcIDsKK+WunCA+IGdpXCA7CivnjosgPiBvdVwgOwor6K29ID4geW9cIDsKK+ittyA+IGdvXCA7CivorbAgPiBnaVwgOwor6K2sID4gaGlcIDsKK+WtoyA+IGtpXCA7CivlrZcgPiBqaVwgOwor5a2QID4gbmVcIDsKK+WsiSA+IGtpXCA7CivlqrwgPiBvdVwgOwor6KqyID4ga2FcIDsKK+iqpCA+IGdvXCA7CivniqAgPiBnaVwgOwor6KqeID4gZ29cIDsKK+WqmiA+IGJpXCA7CivoqokgPiB5b1wgOwor6KqHID4ga29cIDsKK+WppiA+IGZ1XCA7CivlqaIgPiBoaVwgOwor5amJID4gZW5cIDsKK+iotCA+IHNvXCA7CivoqJ0gPiBnYVwgOwor6KiYID4ga2lcIDsKK+eIkCA+IHJvXCA7Civnh58gPiBlaVwgOwor5aasID4gdG9cIDsKK+WmkyA+IGtpXCA7CivoposgPiBtaVwgOwor5aaCID4gam9cIDsKK+WlsyA+IGpvXCA7CivopaYgPiBqdVwgOwor5aWnID4gb3VcIDsKK+WliCA+IG5hXCA7CivlpYcgPiBraVwgOwor5aSuID4gb3VcIDsKK+WkqiA+IHRhXCA7CivnhKEgPiBtdVwgOwor6KSeID4gb25cIDsKK+WkmiA+IHRhXCA7CivopJMgPiBob1wgOwor6KOzID4gbW9cIDsKK+ijoSA+IHJpXCA7Civng58gPiBlblwgOwor6KOcID4gaG9cIDsKK+WiriA+IGRhXCA7CivooqsgPiBoaVwgOwor6KGwID4gc2FcIDsKK+eBryA+IGhpXCA7CivngasgPiBoaVwgOwor6KGeID4gZWlcIDsKK+ihmyA+IGVpXCA7CivloZcgPiB0b1wgOwor5aC1ID4gdG9cIDsKK+WgtCA+IGJhXCA7CivngKwgPiBzZVwgOwor5aCVID4gZGFcIDsKK+ifsiA+IGtpXCA7Civmv6EgPiBqdVwgOwor6J66ID4gcmFcIDsKK+WdkCA+IHphXCA7CivlnJYgPiB0b1wgOwor5ryUID4gZW5cIDsKK+WckyA+IGVuXCA7CivlnIMgPiBob1wgOwor5Zu6ID4ga29cIDsKK+WbsyA+IHp1XCA7Civlm6AgPiBpblwgOwor6buEID4ga2lcIDsKK+a6ryA+IHNvXCA7CivomoogPiBrYVwgOwor6bm9ID4gZW5cIDsKK+a5ryA+IHl1XCA7CivmuKkgPiBvblwgOwor5ZipID4ga2FcIDsKK+a4oSA+IHRvXCA7CivpuJogPiBvdVwgOwor5ZiUID4gb3VcIDsKK+iYhyA+IHNvXCA7Civpt7ogPiByb1wgOwor5re5ID4gZW5cIDsKK+a3qyA+IGluXCA7Civll58gPiBhYVwgOwor6JeNID4gYWlcIDsKK+a2uCA+IGtvXCA7CivllqogPiBtb1wgOwor5ZacID4ga2lcIDsKK+a1riA+IGZ1XCA7CivptaEgPiBidVwgOwor5rS+ID4gaGFcIDsKK+a0qSA+IGVpXCA7Civms7MgPiBlaVwgOwor5ZOpID4gcmlcIDsKK+WToSA+IGluXCA7Civms4QgPiBlaVwgOwor5ZOAID4gYWlcIDsKK+ayvyA+IGVuXCA7CivmsrsgPiBqaVwgOwor5rKZID4gc2FcIDsKK+WSjCA+IHdhXCA7Civmsb0gPiBraVwgOwor5ZG8ID4ga29cIDsKK+axsCA+IHRhXCA7CivlkaogPiBqdVwgOwor6JGhID4gaG9cIDsKK+axnSA+IGpvXCA7CivokYkgPiBoYVwgOwor5ZGJID4gZ29cIDsKK+WQviA+IGdvXCA7CivmsLggPiBlaVwgOwor5rC3ID4gaGlcIDsKK+WQpiA+IGhpXCA7CivmsKMgPiBraVwgOwor5rCXID4ga2lcIDsKK+WQkCA+IHRvXCA7CivlkI8gPiByaVwgOwor5ZCNID4gbmFcIDsKK+WPryA+IGthXCA7Civoj5wgPiBuYVwgOwor5q+bID4ga2VcIDsKK+WPmSA+IGpvXCA7Civmr5ggPiBoaVwgOwor5Y+XID4ganVcIDsKK+avlCA+IGhpXCA7Civoj5MgPiBrYVwgOwor5q+GID4gb3VcIDsKK+iOqyA+IGJvXCA7CivmrbggPiBraVwgOwor6I23ID4gbmlcIDsKK+mtryA+IHJvXCA7CivljbEgPiBraVwgOwor5q2vID4gaGFcIDsKK+atqSA+IGhvXCA7CivmraYgPiBidVwgOwor5q2fID4geW9cIDsKK+mtmCA+IGVuXCA7CivprZQgPiBtYVwgOwor5Y2RID4gaGlcIDsKK+atkCA+IG91XCA7CivprYUgPiBtaVwgOwor6Iy5ID4gam9cIDsKK+asuiA+IGdpXCA7CivmrLcgPiBraVwgOwor5YyWID4ga2FcIDsKK+WMjSA+IGhvXCA7CivojIQgPiBrYVwgOwor6IyCID4gbW9cIDsKK+iLsSA+IGVpXCA7Civoi6YgPiBrdVwgOwor6IubID4ga2FcIDsKK+WLmSA+IG11XCA7Civoi5EgPiBlblwgOwor6Iq9ID4gbWVcIDsKK+WKqiA+IGRvXCA7CivliqAgPiBrYVwgOwor5qqQID4gZW5cIDsKK+aqjiA+IGdvXCA7CivpqYUgPiBrdVwgOwor5qi5ID4ganVcIDsKK+WIqSA+IHJpXCA7CivmqKEgPiBtb1wgOwor6IieID4gYnVcIDsKK+iIhyA+IHlvXCA7Civlh7ogPiBkZVwgOwor6IelID4gZ2FcIDsKK+mniCA+IGt1XCA7Civpp4YgPiBrdVwgOwor6aeEID4gdGFcIDsKK+WGtiA+IHlhXCA7CivohpogPiBmdVwgOwor5qaOID4ga2FcIDsKK+WFtyA+IGd1XCA7CivlhbYgPiBraVwgOwor6aWRID4ga2lcIDsKK+iFkSA+IGZ1XCA7CivlhZIgPiBqaVwgOwor6IWQID4gZnVcIDsKK+WFkCA+IGppXCA7CivppJggPiB5b1wgOwor6aSTID4gZ2FcIDsKK+WEgCA+IGdpXCA7Civlg7kgPiBrYVwgOwor6aOyID4gaW5cIDsKK+mjriA+IGluXCA7Civpo6IgPiBraVwgOwor6IOhID4ga29cIDsKK+WDniA+IGdpXCA7Civpo5sgPiBoaVwgOwor5qOEID4ga2lcIDsKK+WCmSA+IGJpXCA7CivpoacgPiBrb1wgOwor5YGaID4gc2FcIDsKK+mhhiA+IGthXCA7CivmoYggPiBhblwgOwor5YGHID4ga2FcIDsKK+aguSA+IG5lXCA7CivlgLYgPiBrdVwgOwor5YCkID4gbmVcIDsKK+WAmiA+IGtpXCA7CivpoJcgPiBoYVwgOwor6aCQID4geW9cIDsKK+WAiyA+IGtvXCA7CivmoIQgPiBlaVwgOwor6Z+7ID4gaW5cIDsKK+afuyA+IHNhXCA7Civpn7MgPiBuZVwgOwor57+zID4gZWlcIDsKK+S/ryA+IGZ1XCA7Civkv50gPiBob1wgOwor5769ID4gd2FcIDsKK+aetiA+IGthXCA7Civmnq8gPiBrb1wgOwor5L6uID4gYnVcIDsKK+e+qSA+IGdpXCA7CivmnpwgPiBrYVwgOwor5L6YID4gdGFcIDsKK+e+jiA+IGJpXCA7CivnvoUgPiByYVwgOwor5725ID4gcmlcIDsKK+e9tSA+IGJhXCA7CivpnaEgPiBoaVwgOwor6Z2eID4gaGlcIDsKK+S9mSA+IHlvXCA7CivpnZIgPiBhb1wgOwor5L2QID4gc2FcIDsKK+S8vCA+IG5pXCA7CivmnKogPiBtaVwgOwor5pyoID4ga2lcIDsKK+acnyA+IGtpXCA7CivkvI4gPiBnaVwgOwor5LyNID4gZ29cIDsKK+S8gSA+IGtpXCA7Civmm7MgPiBlaVwgOwor6ZuiID4gcmlcIDsKK+S7oyA+IHlvXCA7Civku5ggPiBmdVwgOwor6ZqxID4gaW5cIDsKK+aariA+IGJvXCA7CivpmqAgPiBpblwgOwor5LqbID4gc2FcIDsKK+aalyA+IGFuXCA7CivkupQgPiBnb1wgOwor5LqSID4gZ29cIDsKK+S6kSA+IHVuXCA7CivkuowgPiBuaVwgOwor5LqIID4geW9cIDsKK+e5uyA+IGp1XCA7Civmma4gPiBmdVwgOwor6ZmkID4gam9cIDsKK+mZoiA+IGluXCA7CivkuZ0gPiBrdVwgOwor6ZmEID4gZnVcIDsKK+S5gyA+IG5vXCA7CivpmYAgPiBkYVwgOwor5Li5ID4gbmlcIDsKK+aYryA+IHplXCA7CivmmKAgPiBlaVwgOwor5LiWID4geW9cIDsKK+S4jiA+IHlvXCA7CivkuI0gPiBmdVwgOwor5LiJID4gbWlcIDsKK+aXuiA+IG91XCA7Civml6UgPiBoaVwgOwor5peiID4ga2lcIDsKK+e2uiA+IGtpXCA7CivmlpcgPiB0b1wgOwor6ZaTID4gbWFcIDsKK+aWkCA+IGhpXCA7CivmlbcgPiBmdVwgOwor57SgID4gc29cIDsKK+e0gCA+IGtpXCA7Civmk6wgPiBnaVwgOwor5pKrID4gYnVcIDsKK+aRqSA+IG1hXCA7CivnsZQgPiBzdVwgOwor57C/ID4gYm9cIDsKK+ewtyA+IGVuXCA7CivmjqogPiBzb1wgOwor5o6pID4gZW5cIDsKK+aOmyA+IGthXCA7CivmjoggPiBqdVwgOwor566HID4ga2FcIDsKK+aNlyA+IGhvXCA7CivmjZUgPiBob1wgOwor5oyoID4gYWlcIDsKK+espiA+IGZ1XCA7CivmjIEgPiBqaVwgOwor6YutID4gZWlcIDsKK+mLqiA+IGhvXCA7CivmirwgPiBvdVwgOwor56q6ID4ga2lcIDsKK+eqtiA+IGt1XCA7CivmiqsgPiBoaVwgOwor5oqSID4gam9cIDsKK+aJuSA+IGhpXCA7CivmibYgPiBmdVwgOwor5omTID4gZGFcIDsKK+epjyA+IG9uXCA7CivmiYsgPiB0ZVwgOwor56mCID4gaG9cIDsKK+eovCA+IGthXCA7CivmiLggPiB0b1wgOwor5oiyID4gZ2lcIDsKK+aIryA+IGdpXCA7Civmh7wgPiBrdVwgOwor56eYID4gaGlcIDsKK+enkSA+IGthXCA7Civph44gPiBub1wgOwor6YeMID4gcmlcIDsKK+elliA+IHNvXCA7CivnpZUgPiBoaVwgOwor5oWVID4gYm9cIDsKK+eliCA+IGtpXCA7CivmhYcgPiBpblwgOwor5oSbID4gYWlcIDsKK+aEmiA+IGd1XCA7CivmhIkgPiB5dVwgOwor5oSIID4geXVcIDsKK+aDuSA+IGphXCA7Civpg6ggPiBidVwgOwor56OoID4gbWFcIDsKK+aCuCA+IGtpXCA7CivmgrIgPiBoaVwgOwor6YKjID4gZGFcIDsKK+aCnyA+IGdvXCA7Civpgb8gPiBoaVwgOwor5oGpID4gb25cIDsKK+mBjiA+IGthXCA7CivpgYsgPiB1blwgOwor56C0ID4gaGFcIDsKK+aAqCA+IGVuXCA7CivmgJYgPiBmdVwgOwor6YCUID4gdG9cIDsKK+aAkiA+IGRvXCA7CivpvqIgPiBrYVwgOwor6b6cID4ga2lcIDsKK+m+kSA+IGVuXCA7Civpva4gPiBnaVwgOwor6b2fID4gc29cIDsKK+m9liA+IGdhXCA7CivpvYcgPiBzYVwgOwor6b2GID4gb3VcIDsKK+m8vSA+IGd1XCA7CivpvLkgPiBlblwgOwor6by0ID4gZW5cIDsKK+m8ryA+IGdvXCA7CivpvJQgPiBrb1wgOwor6byJID4gdGFcIDsKK+m7vCA+IGhvXCA7Civpu7ggPiByb1wgOwor6buvID4gYW5cIDsKK+m7rSA+IGVuXCA7Civpu6QgPiBlblwgOwor6buhID4gZW5cIDsKK+m7nyA+IGVpXCA7Civpur4gPiBraVwgOwor6bq8ID4gbWFcIDsKK+m6uCA+IGZ1XCA7CivpuqwgPiBmdVwgOwor6bqkID4gc29cIDsKK+m6kiA+IGtpXCA7CivpuowgPiBndVwgOwor6bqLID4gYmlcIDsKK+m6hCA+IHNvXCA7CivpuoIgPiBraVwgOwor6bqBID4gc29cIDsKK+m5uiA+IHNhXCA7CivpubUgPiByb1wgOwor6bmfID4gb3VcIDsKK+m5gCA+IGJ1XCA7CivpuJ0gPiByaVwgOwor6bicID4ga3VcIDsKK+m4lSA+IHJvXCA7CivpuJIgPiB5b1wgOwor6bewID4gZW5cIDsKK+m3lyA+IG91XCA7Civpt5YgPiBlaVwgOwor6beDID4gYW5cIDsKK+m2siA+IG91XCA7Civptq8gPiBvdVwgOwor6baYID4ga29cIDsKK+m2lSA+IGFuXCA7CivptbogPiB5YVwgOwor6bW3ID4gZW5cIDsKK+m1ryA+IGhpXCA7CivptaogPiBhblwgOwor6bWeID4gZ2FcIDsKK+m1nSA+IGdhXCA7CivptZAgPiBidVwgOwor6bS9ID4gam9cIDsKK+m0vCA+IHJvXCA7CivptLMgPiBhblwgOwor6bSvID4gamlcIDsKK+m0oyA+IGtvXCA7CivptJ0gPiBrdVwgOwor6bSbID4gZW5cIDsKK+m0lSA+IHRhXCA7CivptJEgPiBkb1wgOwor6bO2ID4gZW5cIDsKK+mzrCA+IGZ1XCA7Civps6cgPiBmdVwgOwor6bOBID4gb25cIDsKK+myjyA+IGhpXCA7CivpsoogPiBzYVwgOwor6bGrID4gYWlcIDsKK+mwoiA+IGJhXCA7CivpsJsgPiBvblwgOwor6bCWID4gdGFcIDsKK+mwiyA+IGVuXCA7Civpr6EgPiBoaVwgOwor6a+dID4ga29cIDsKK+mviyA+IHNhXCA7Civpr4YgPiBob1wgOwor6a67ID4gc2FcIDsKK+murCA+IGhvXCA7Civprp8gPiBhblwgOwor6a6eID4gamlcIDsKK+mujSA+IGhpXCA7CivprocgPiBiaVwgOwor6a6AID4gdGFcIDsKK+mtsiA+IHJvXCA7Civpra4gPiBoaVwgOwor6a2mID4gc2FcIDsKK+mtlSA+IGtpXCA7CivprY8gPiBnaVwgOwor6a2MID4ga2lcIDsKK+msvSA+IGJpXCA7CivprLkgPiBraVwgOwor6ay2ID4ga2lcIDsKK+mstCA+IGZ1XCA7CivprJAgPiBraVwgOwor6ayNID4ga29cIDsKK+msjCA+IHRhXCA7CivprIEgPiByaVwgOwor6au/ID4gc2FcIDsKK+mrvSA+IHNhXCA7Civpq7UgPiBqaVwgOwor6auyID4gaGlcIDsKK+mrrCA+IGhpXCA7Civpq5cgPiByb1wgOwor6auDID4gZ3VcIDsKK+mrgCA+IGhpXCA7CivpqrsgPiBrYVwgOwor6amqID4gcmlcIDsKK+mppSA+IGtpXCA7CivpqYogPiBrYVwgOwor6ai+ID4gcmFcIDsKK+mopyA+IGthXCA7CivpqKQgPiBraVwgOwor6aiiID4ga2FcIDsKK+moliA+IGJ1XCA7CivpqJEgPiBoaVwgOwor6aiPID4ga2lcIDsKK+mojiA+IGtpXCA7Civpp7AgPiBpblwgOwor6aesID4gamlcIDsKK+mnoSA+IGJhXCA7Civpp54gPiBkYVwgOwor6aedID4gdGFcIDsKK+mnmSA+IGZ1XCA7Civpp5UgPiBnYVwgOwor6aeTID4gaGlcIDsKK+mnkSA+IGRvXCA7Civppr8gPiByb1wgOwor6aaxID4gdGFcIDsKK+mmnyA+IHRvXCA7CivpppcgPiBraVwgOwor6aWgID4gcmFcIDsKK+mlnCA+IGVuXCA7CivppYsgPiBraVwgOwor6aWHID4geW9cIDsKK+mlgiA+IHVuXCA7CivppL0gPiBraVwgOwor6aS8ID4ga2lcIDsKK+mksiA+IGVpXCA7CivppKwgPiBrb1wgOwor6aSrID4gdW5cIDsKK+mkoSA+IGFuXCA7CivppJwgPiBrYVwgOwor6aSUID4gaG9cIDsKK+mkhyA+IHRvXCA7Civpo6sgPiB5b1wgOwor6aK2ID4ga3VcIDsKK+miqyA+IGZ1XCA7CivpopUgPiBlaVwgOwor6aGxID4gcm9cIDsKK+mhrCA+IGp1XCA7CivpoZcgPiBnaVwgOwor6aC1ID4gaW5cIDsKK+mgtCA+IGVpXCA7CivpoKsgPiBmdVwgOwor6aCOID4ga2lcIDsKK+mgjSA+IGdpXCA7Civpn7ogPiBlaVwgOwor6Z+1ID4gaW5cIDsKK+mfniA+IG9uXCA7Civpn5cgPiB1blwgOwor6Z6/ID4ga2lcIDsKK+meviA+IGthXCA7CivpnrwgPiBraVwgOwor6Z61ID4gYWlcIDsKK+mejSA+IGFuXCA7CivpnosgPiBhaVwgOwor6Z6FID4gb3VcIDsKK+megSA+IGhpXCA7Civpnb8gPiBvdVwgOwor6Z27ID4gc29cIDsKK+mdtyA+IGluXCA7CivpnbYgPiBoYVwgOwor6Z2JID4gYWlcIDsKK+mcqiA+IGluXCA7CivpnKMgPiBpblwgOwor6ZyPID4gaGlcIDsKK+mcgCA+IGp1XCA7Civpm7ogPiBtdVwgOwor6ZuFID4gZ2FcIDsKK+masyA+IGtpXCA7CivpmqkgPiBvdVwgOwor6ZqYID4gYWlcIDsKK+malSA+IGluXCA7CivpmpAgPiBpblwgOwor6ZqLID4gdGFcIDsKK+magiA+IGluXCA7CivpmoEgPiBlblwgOwor6Zm7ID4gaW5cIDsKK+mZtCA+IGhpXCA7CivpmZIgPiBraVwgOwor6ZmPID4gdGFcIDsKK+mZgiA+IGhhXCA7CivpmYEgPiB0YVwgOwor6Zi9ID4gZW5cIDsKK+mYvCA+IHNvXCA7CivpmLsgPiBzb1wgOwor6ZilID4gaW5cIDsKK+mYnCA+IGZ1XCA7CivpmIcgPiB0b1wgOwor6ZeeID4ga25cIDsKK+mXmiA+IGtpXCA7Civpl40gPiB0b1wgOwor6ZeJID4gaW5cIDsKK+mWuyA+IGVuXCA7CivplrkgPiBlblwgOwor6ZatID4gcm9cIDsKK+mWnyA+IGhpXCA7Civplb4gPiBiaVwgOwor6ZG8ID4gcmFcIDsKK+mRqiA+IHJvXCA7CivpkJYgPiBraVwgOwor6Y+WID4gb3VcIDsKK+mPjSA+IHJhXCA7Civpj4EgPiBzYVwgOwor6Y62ID4ga2FcIDsKK+mOtSA+IGthXCA7CivpjqMgPiBlaVwgOwor6Y6IID4gc2FcIDsKK+mOgiA+IGJpXCA7CivpjoEgPiB5YVwgOwor6Y26ID4gdGFcIDsKK+mNnCA+IGthXCA7CivpjY0gPiB0b1wgOwor6Y2IID4gZWlcIDsKK+mMuyA+IGJ1XCA7CivpjK4gPiBrb1wgOwor6YykID4ga2lcIDsKK+mMoSA+IGtpXCA7CivpjI0gPiBoaVwgOwor6Yu6ID4gZW5cIDsKK+mLsCA+IHJpXCA7Civpi6MgPiB5YVwgOwor6YuYID4ga2FcIDsKK+mLhiA+IGluXCA7CivpirwgPiBzYVwgOwor6YqzID4gZWlcIDsKK+mKqCA+IGFuXCA7Civpip8gPiBzYVwgOwor6YmgID4gZWlcIDsKK+mJjSA+IGhpXCA7CivpiLkgPiBoaVwgOwor6Yi3ID4ga29cIDsKK+mIqSA+IHJvXCA7CivpiKYgPiB0YVwgOwor6YilID4ga2FcIDsKK+mInSA+IGluXCA7CivpiJggPiBnaVwgOwor6YiHID4gaHVcIDsKK+mIhiA+IGVuXCA7CivpiIAgPiBoYVwgOwor6Ye5ID4gam9cIDsKK+mHtyA+IHRvXCA7Civph7UgPiBzYVwgOwor6YehID4gZnVcIDsKK+mHkCA+IHJpXCA7Civphr8gPiBiaVwgOwor6Ya8ID4gZW5cIDsKK+mGqCA+IHJpXCA7CivphqEgPiBzYVwgOwor6YaeID4gdW5cIDsKK+mGliA+IHVuXCA7CivphpAgPiBrb1wgOwor6YaDID4gZW5cIDsKK+mFuiA+IGhvXCA7CivphbQgPiB0b1wgOwor6YWzID4gaW5cIDsKK+mFpSA+IHNvXCA7CivphaQgPiBrb1wgOwor6YWiID4gc3VcIDsKK+mFoSA+IHRhXCA7CivphZcgPiBrdVwgOwor6YWTID4gZW5cIDsKK+mFiCA+IHJpXCA7CivphLEgPiBoYVwgOwor6YSiID4gZW5cIDsKK+mEoCA+IGtvXCA7CivphJwgPiBodVwgOwor6YSWID4gdW5cIDsKK+mEiCA+IGtpXCA7CivphIYgPiB1blwgOwor6YSFID4gZ3VcIDsKK+mDvyA+IGJpXCA7Civpg74gPiBlblwgOwor6YO2ID4gYnVcIDsKK+mDqyA+IGhpXCA7Civpg6IgPiBlaVwgOwor6YObID4gZnVcIDsKK+mDmSA+IGh1XCA7CivpgrMgPiBoaVwgOwor6YKQID4gcmlcIDsKK+mCjyA+IHJhXCA7CivpgocgPiBqaVwgOwor6YGhID4gc29cIDsKK+mBkCA+IGthXCA7CivpgL4gPiB5dVwgOwor6YC6ID4gZW5cIDsKK+mAtSA+IGtpXCA7CivpgJggPiBnaVwgOwor6YCLID4gaG9cIDsKK+i/sSA+IHRhXCA7Civov6wgPiBvdVwgOwor6L+pID4gamlcIDsKK+i/lSA+IGdvXCA7Civov5MgPiBnYVwgOwor6L+QID4gdW5cIDsKK+i/iyA+IG91XCA7CivovqQgPiBqaVwgOwor6L6dID4gamlcIDsKK+i9pCA+IHJvXCA7CivovaEgPiBoaVwgOwor6L2dID4geW9cIDsKK+i9nCA+IGppXCA7CivovYUgPiBlblwgOwor6L2AID4gb25cIDsKK+i8uCA+IHl1XCA7CivovKAgPiBrYVwgOwor6LyUID4gZnVcIDsKK+i8hSA+IHJvXCA7CivovIAgPiBqaVwgOwor6Lu7ID4ga2FcIDsKK+i7sSA+IGtvXCA7Civou64gPiBvdVwgOwor6LuMID4ga2lcIDsKK+i7gyA+IHRhXCA7Civou4AgPiBrdVwgOwor6LqyID4gdGFcIDsKK+i6sSA+IHRhXCA7Civouq8gPiBrdVwgOwor6LqbID4gZWlcIDsKK+i6lyA+IGVpXCA7CivouZ4gPiBraVwgOwor6LmJID4gc2FcIDsKK+i4vSA+IGt1XCA7CivouLcgPiB0YVwgOwor6LimID4ga2lcIDsKK+i4oCA+IGVuXCA7CivouJEgPiBraVwgOwor6Le/ID4gdG9cIDsKK+i3vSA+IGtpXCA7Civot7ogPiB0YVwgOwor6LesID4ga2lcIDsKK+i3qCA+IGtvXCA7Civot6UgPiB0YVwgOwor6LeXID4gZnVcIDsKK+i3lCA+IGt1XCA7Civot48gPiBrYVwgOwor6LeOID4gdGFcIDsKK+i3hyA+IGVpXCA7Civot4IgPiBraVwgOwor6La6ID4gZnVcIDsKK+i1riA+IGthXCA7CivotZ8gPiBpblwgOwor6LWRID4gaGlcIDsKK+i0jyA+IGVpXCA7CivotIcgPiBpblwgOwor6LO7ID4gZnVcIDsKK+izpiA+IGZ1XCA7Civos48gPiBlaVwgOwor6LOIID4ga29cIDsKK+izgiA+IHJvXCA7Civos4EgPiBoaVwgOwor6LOAID4gZ2FcIDsKK+iysyA+IG5pXCA7Civosq4gPiBuaVwgOwor6LKUID4gaGlcIDsKK+iykCA+IHl1XCA7Civoso0gPiByaVwgOwor6LG+ID4gaGlcIDsKK+ixvCA+IGhpXCA7Civosa0gPiBrYVwgOwor6LGoID4ga2lcIDsKK+ixnSA+IGhhXCA7CivosZkgPiBnaVwgOwor6LGXID4ga2FcIDsKK+ixlCA+IGVuXCA7CivosZMgPiBlblwgOwor6LGOID4ganVcIDsKK+ixjCA+IGVuXCA7CivosYggPiBraVwgOwor6LC6ID4ga2FcIDsKK+iulCA+IGluXCA7Civoro8gPiBlaVwgOwor6K6MID4gZW5cIDsKK+iuhiA+IGVpXCA7CivoroQgPiBydVwgOwor6K2tID4ga2lcIDsKK+itnCA+IGZ1XCA7CivorZIgPiBoYVwgOwor6K2PID4ga2lcIDsKK+itjCA+IGthXCA7CivorYYgPiBraVwgOwor6K2DID4ga3VcIDsKK+itgSA+IGthXCA7CivorLwgPiBrb1wgOwor6KyzID4gb3VcIDsKK+isqCA+IGJvXCA7CivorIwgPiBrYVwgOwor6KuzID4gYW5cIDsKK+irsSA+IGtpXCA7Civoq60gPiB5dVwgOwor6KubID4geXVcIDsKK+irhiA+IGtpXCA7CivoqrkgPiBoaVwgOwor6KqnID4gaG9cIDsKK+iqoyA+IGZ1XCA7CivoqpIgPiBraVwgOwor6KqQID4gZ2FcIDsKK+iqiyA+IGtpXCA7CivoqoAgPiBqaVwgOwor6KmtID4ga2lcIDsKK+ipqyA+IHRhXCA7CivoqaEgPiBrdVwgOwor6KmgID4gZWlcIDsKK+ipmyA+IHNvXCA7CivoqZYgPiBoaVwgOwor6KmRID4gdGFcIDsKK+ipkCA+IHNhXCA7CivoqY0gPiBlaVwgOwor6KmIID4gcmlcIDsKK+ipgSA+IGtvXCA7CivoqLYgPiBrYVwgOwor6KivID4gc2FcIDsKK+iojyA+IGt1XCA7CivoqIMgPiBmdVwgOwor6KetID4ga2lcIDsKK+inmiA+IGtvXCA7Civop5UgPiBzb1wgOwor6Ka8ID4gcmFcIDsKK+imtiA+IHJhXCA7CivoprAgPiBzb1wgOwor6KasID4ga2lcIDsKK+imqSA+IHRvXCA7CivopqYgPiB5dVwgOwor6KaZID4gcmFcIDsKK+imjyA+IGtpXCA7CivopoogPiBraVwgOwor6KaJID4ga2lcIDsKK+imhyA+IGhhXCA7CivopaMgPiBoaVwgOwor6KS1ID4gcmlcIDsKK+iksiA+IGtvXCA7CivopKggPiBzYVwgOwor6KSVID4geXVcIDsKK+ijuSA+IGthXCA7Civoo7cgPiBlblwgOwor6KOoID4gaGlcIDsKK+ijnyA+IHNhXCA7Civoo5QgPiBlaVwgOwor6KOAID4gaW5cIDsKK+iivSA+IGpvXCA7Civooq4gPiBuZVwgOwor6KKZID4gaGFcIDsKK+iiiCA+IGthXCA7CivoooEgPiBlblwgOwor6KG5ID4ga2lcIDsKK+ihoiA+IGt1XCA7CivooZogPiBrb1wgOwor6KGNID4gZW5cIDsKK+ihiCA+IGppXCA7CivooLkgPiB0b1wgOwor6KCxID4ga29cIDsKK+igpyA+IHRvXCA7CivooJUgPiBkYVwgOwor6KCRID4gZWlcIDsKK+iggyA+IHJhXCA7Civon6sgPiBpblwgOwor6J+jID4ga2lcIDsKK+ifoiA+IGtpXCA7Civonr4gPiBpblwgOwor6J6eID4gYmFcIDsKK+iemCA+IGdpXCA7CivonbggPiBrYVwgOwor6J20ID4ga29cIDsKK+idryA+IGVuXCA7CivonZ0gPiBlblwgOwor6J2YID4gZW5cIDsKK+idkyA+IHl1XCA7CivonYwgPiBrYVwgOwor6Jy/ID4gZW5cIDsKK+icviA+IGthXCA7CivonLEgPiBoaVwgOwor6JyeID4ga2lcIDsKK+icmiA+IGhpXCA7CivonJIgPiBlblwgOwor6JyOID4gZW5cIDsKK+iciiA+IHJpXCA7CivonIkgPiBmdVwgOwor6JyIID4gZ29cIDsKK+ichSA+IGh1XCA7Civom74gPiBnYVwgOwor6JuEID4ga29cIDsKK+iauSA+IGh1XCA7CivomrUgPiBrYVwgOwor6JqtID4gamlcIDsKK+iaqCA+IGh1XCA7CivompwgPiBrYVwgOwor6JqaID4ga2lcIDsKK+iakyA+IGluXCA7CivompEgPiBraVwgOwor6JqNID4gaGlcIDsKK+iZuiA+IGtpXCA7CivomacgPiBraVwgOwor6JmdID4ga29cIDsKK+iZmCA+IHNhXCA7CivomZYgPiBrb1wgOwor6JmNID4ga29cIDsKK+iZgiA+IHJvXCA7CivomYEgPiBraVwgOwor6Ji/ID4gcmFcIDsKK+iYvCA+IGJpXCA7CivomLogPiByaVwgOwor6Ji2ID4gZ2lcIDsKK+iYpyA+IGt1XCA7CivomKEgPiBvdVwgOwor6JiZID4gZWlcIDsKK+iYkyA+IHNvXCA7CivomJEgPiBtYVwgOwor6JiOID4ga2lcIDsKK+iYiiA+IHVuXCA7CivomIQgPiBraVwgOwor6Je7ID4gbW9cIDsKK+iXuSA+IGFpXCA7Civol7QgPiB1blwgOwor6JemID4gYmFcIDsKK+iWvyA+IGdpXCA7CivolrcgPiBqdVwgOwor6JaXID4gZW5cIDsKK+iWhiA+IGFpXCA7CivoloAgPiB1blwgOwor6JW3ID4geW9cIDsKK+iVsCA+IHVuXCA7CivolaAgPiBqb1wgOwor6JWcID4gaGlcIDsKK+iVkyA+IHVuXCA7CivolLQgPiBtYVwgOwor6JSsID4gc29cIDsKK+iUqyA+IGVuXCA7CivolKIgPiBoYVwgOwor6JOZID4gemFcIDsKK+iTliA+IGhpXCA7Civok48gPiByYVwgOwor6JOMID4gc2FcIDsKK+iTiiA+IG91XCA7Civokr0gPiBvblwgOwor6JKxID4gaG9cIDsKK+iSqSA+IHNvXCA7Civokp4gPiByaVwgOwor6JKVID4gdW5cIDsKK+iRrSA+IGthXCA7CivokasgPiBrb1wgOwor6JGpID4gaGFcIDsKK+iRiiA+IGFuXCA7CivokYYgPiBob1wgOwor6JC4ID4geXVcIDsKK+iQtSA+IHdhXCA7CivokJMgPiBnaVwgOwor6JCGID4gaGlcIDsKK+iQgSA+IGtpXCA7Civoj7ggPiBlblwgOwor6I+0ID4gYW5cIDsKK+iPsiA+IGhpXCA7Civoj7AgPiBrb1wgOwor6I+gID4gaGFcIDsKK+iPnyA+IHRvXCA7Civoj48gPiBrYVwgOwor6I+HID4ga29cIDsKK+iPgCA+IGVuXCA7CivojrUgPiB0b1wgOwor6I6qID4gZ2FcIDsKK+iOqSA+IGh1XCA7Civojp0gPiBzYVwgOwor6I6aID4gZW5cIDsKK+iOjiA+IHNhXCA7CivojoYgPiBodVwgOwor6I6FID4gcmlcIDsKK+iNvCA+IHRvXCA7CivojbAgPiB0b1wgOwor6I2UID4gcmlcIDsKK+iNgiA+IGthXCA7CivojLUgPiBpblwgOwor6IyyID4gamlcIDsKK+iMsCA+IHl1XCA7CivojKMgPiBnb1wgOwor6IyYID4gcmlcIDsKK+iLvSA+IGtvXCA7Civoi7sgPiBmdVwgOwor6Iu0ID4gc29cIDsKK+iLpCA+IGhpXCA7Civoir4gPiBoaVwgOwor6Iq6ID4gb3VcIDsKK+iKsCA+IGtpXCA7Civoiq0gPiBiYVwgOwor6IqqID4ga2lcIDsKK+iKpiA+IHJvXCA7CivoipkgPiBmdVwgOwor6IqYID4gaGlcIDsKK+iKlCA+IGtpXCA7CivoipEgPiBraVwgOwor6IqIID4gYmFcIDsKK+iJtyA+IGVuXCA7CivoiaogPiByb1wgOwor6ImkID4gZ2lcIDsKK+iJoyA+IHJvXCA7CivoiZYgPiBzYVwgOwor6ImFID4geW9cIDsKK+iJgyA+IHJpXCA7CivoiLggPiBrYVwgOwor6IiuID4gcm9cIDsKK+iIlyA+IGhvXCA7CivoiJYgPiBob1wgOwor6IiSID4gam9cIDsKK+iIgSA+IHlvXCA7Civoh74gPiB5dVwgOwor6IeeID4ga3VcIDsKK+iHnSA+IHJhXCA7Civoh5kgPiBlblwgOwor6IeCID4gaGlcIDsKK+iGtCA+IGtvXCA7CivohqkgPiBqaVwgOwor6IaGID4gc29cIDsKK+iFtCA+IHl1XCA7CivohaEgPiByYVwgOwor6IWXID4gaGlcIDsKK+iFkyA+IGhpXCA7CivohL4gPiBoaVwgOwor6IS1ID4ga29cIDsKK+iEryA+IGhvXCA7CivohJ4gPiBzYVwgOwor6IScID4ganVcIDsKK+iDuSA+IGppXCA7Civog68gPiBrb1wgOwor6IOtID4gaW5cIDsKK+iDmSA+IHNvXCA7Civog5UgPiBodVwgOwor6IONID4ga29cIDsKK+iDiiA+IGt1XCA7CivogrkgPiBoaVwgOwor6IKeID4gc2FcIDsKK+iCmiA+IHRvXCA7Civoga0gPiBraVwgOwor6IC6ID4gdW5cIDsKK+iAtiA+IHlhXCA7CivogKEgPiBqb1wgOwor6ICeID4ga2FcIDsKK+iAmSA+IGhhXCA7CivogJggPiB1blwgOwor6ICPID4gamlcIDsKK+iAjSA+IHNhXCA7CivogIwgPiBqaVwgOwor6ICGID4ga2lcIDsKK+e/rCA+IGtpXCA7Civnv6EgPiBoaVwgOwor576yID4gZ2lcIDsKK+e+rSA+IHl1XCA7CivnvpYgPiBrb1wgOwor576LID4gYmFcIDsKK+e+iCA+IGtpXCA7CivnvocgPiBraVwgOwor576GID4gaGlcIDsKK+e9tyA+IGhpXCA7CivnvaggPiBhblwgOwor572mID4gaHVcIDsKK+e9nyA+IGtvXCA7CivnvZsgPiByb1wgOwor572YID4gZnVcIDsKK+e9jyA+IHJvXCA7CivnvYwgPiBvdVwgOwor572DID4gb3VcIDsKK+e8uyA+IGZ1XCA7CivnupMgPiBlaVwgOwor57qRID4gcm9cIDsKK+e5pyA+IHVuXCA7CivnuaUgPiBraVwgOwor57mEID4gZWlcIDsKK+e4uyA+IGJpXCA7CivnuLcgPiBydVwgOwor57ivID4gZW5cIDsKK+e4rSA+IHJpXCA7CivnuJwgPiBpblwgOwor57iVID4gdW5cIDsKK+e4iiA+IGVpXCA7CivnuIggPiBlaVwgOwor57iAID4ga2FcIDsKK+e3oyA+IGVuXCA7Civnt4sgPiBoaVwgOwor57asID4ganVcIDsKK+e2piA+IGtpXCA7Civntp4gPiB0YVwgOwor57aWID4gZW5cIDsKK+e1riA+IGpvXCA7CivntaogPiBpblwgOwor57WlID4gaGlcIDsKK+e1nSA+IGt1XCA7CivntYcgPiBrdVwgOwor57S9ID4gdGFcIDsKK+e0piA+IGhhXCA7CivntJwgPiB1blwgOwor57SXID4gc2FcIDsKK+e0lSA+IGhpXCA7Civns68gPiBkYVwgOwor57OiID4gYm9cIDsKK+eznCA+IGJpXCA7Civnsr8gPiBrYVwgOwor57KrID4gamlcIDsKK+eykCA+IHJvXCA7Civnso8gPiB0YVwgOwor57KGID4gc2FcIDsKK+eygyA+IGhpXCA7CivnsbkgPiBqb1wgOwor57GyID4geXVcIDsKK+exriA+IHJhXCA7CivnsawgPiByaVwgOwor57GdID4gZWlcIDsKK+exmiA+IHJvXCA7CivnsLggPiBoYVwgOwor57CsID4gcm9cIDsKK+ewoyA+IGtpXCA7CivnsKAgPiBodVwgOwor57CUID4gc2FcIDsKK+ewkSA+IHNhXCA7CivnsIsgPiBraVwgOwor57CEID4ga29cIDsKK+ewgiA+IGtlXCA7Civnr7YgPiBlblwgOwor56+aID4gaGlcIDsKK+evlCA+IHVuXCA7CivnrrYgPiBrb1wgOwor566lID4gaGFcIDsKK+eumyA+IGtvXCA7CivnrpUgPiBraVwgOwor566OID4ga29cIDsKK+etoCA+IGluXCA7CivnrY4gPiBqb1wgOwor56y0ID4ga2FcIDsKK+essyA+IGthXCA7CivnrK8gPiBkb1wgOwor56yfID4ga29cIDsKK+eshiA+IGhhXCA7Civnq6wgPiBrdVwgOwor56uqID4ganVcIDsKK+erqSA+IGdpXCA7Civnq5IgPiBraVwgOwor56q5ID4gZ29cIDsKK+eqsyA+IHdhXCA7CivnqqwgPiB5dVwgOwor56qqID4gd2FcIDsKK+eqqSA+IGthXCA7CivnqqAgPiBrYVwgOwor56qKID4gd2FcIDsKK+epqSA+IG9uXCA7CivnqaUgPiB5b1wgOwor56miID4gYWlcIDsKK+epliA+IGtpXCA7CivnqY4gPiBlaVwgOwor56mMID4gc29cIDsKK+eosyA+IG9uXCA7CivnqJ4gPiBrYVwgOwor56iYID4ga2lcIDsKK+eojCA+IHRvXCA7CivnqIMgPiBodVwgOwor56enID4gb3VcIDsKK+enoCA+IGhpXCA7Civnp58gPiBzb1wgOwor56eVID4gaGlcIDsKK+emviA+IGthXCA7CivnpqggPiBraVwgOwor56anID4ga2lcIDsKK+emoSA+IGJhXCA7CivnppwgPiBlaVwgOwor56aRID4gZ3VcIDsKK+emjSA+IGthXCA7CivnposgPiBpblwgOwor56W7ID4ga29cIDsKK+eluiA+IGtpXCA7CivnpZwgPiBrb1wgOwor56WaID4gc29cIDsKK+elmSA+IG1pXCA7CivnpZQgPiBodVwgOwor56WHID4ga2lcIDsKK+elgSA+IGtpXCA7CivnpKAgPiBqaVwgOwor56ScID4geW9cIDsKK+ekkiA+IGdpXCA7Civno68gPiBraVwgOwor56OkID4gaW5cIDsKK+ejoCA+IHJvXCA7Civno5IgPiBpblwgOwor56OLID4gc2FcIDsKK+ejgSA+IGppXCA7CivnorwgPiBiYVwgOwor56KsID4ga2FcIDsKK+eipCA+IGVpXCA7CivnopUgPiBraVwgOwor56KUID4gYnVcIDsKK+eihiA+IGhhXCA7CivnooEgPiBnb1wgOwor56GqID4gZ2lcIDsKK+egtSA+IG91XCA7CivnoK4gPiBkb1wgOwor56CjID4gdGFcIDsKK+egoiA+IHJhXCA7CivnoJIgPiBoaVwgOwor56CRID4gZ2FcIDsKK+eghiA+IGh1XCA7Civnn6wgPiBzYVwgOwor55+pID4ga3VcIDsKK+efkSA+IHJvXCA7Civnnr8gPiBrdVwgOwor5569ID4ga29cIDsKK+eeuSA+IGFpXCA7CivnnrYgPiBraVwgOwor556WID4gZWlcIDsKK+eehiA+IGtpXCA7Civnnb8gPiBlaVwgOwor5525ID4gdG9cIDsKK+edsSA+IGthXCA7CivnnaIgPiBraVwgOwor552OID4ga2lcIDsKK+ediiA+IGVuXCA7CivnnYIgPiBiaVwgOwor55ytID4ga2lcIDsKK+eclyA+IGt1XCA7Civnm7EgPiBrdVwgOwor55usID4ga29cIDsKK+ebpyA+IHJvXCA7Civnm6YgPiBvdVwgOwor55uZID4gZnVcIDsKK+ebjiA+IG91XCA7Civnm4kgPiBrYVwgOwor55uIID4gZWlcIDsKK+ebgSA+IGVpXCA7CivnmrcgPiBrb1wgOwor55qnID4gYWlcIDsKK+eapCA+IGhhXCA7CivnmoggPiBraVwgOwor55mvID4ga3VcIDsKK+eZriA+IGluXCA7Civnma0gPiBlaVwgOwor55mSID4geXVcIDsKK+eZiiA+IGluXCA7CivnmLggPiBrYVwgOwor55ilID4gc2FcIDsKK+eYnyA+IG9uXCA7CivnmJ4gPiBlaVwgOwor55iWID4gaW5cIDsKK+eYlSA+IGthXCA7CivnmI8gPiB0b1wgOwor55iJID4geXVcIDsKK+eYgCA+IHlvXCA7Civnl7wgPiBrb1wgOwor55e5ID4gaGlcIDsKK+eXsiA+IG1hXCA7Civnl7EgPiBoaVwgOwor55enID4gc2FcIDsKK+eXpCA+IHNhXCA7Civnl6IgPiByaVwgOwor55ehID4gaG9cIDsKK+eXniA+IGhpXCA7Civnl5QgPiBqaVwgOwor55eEID4gc2FcIDsKK+eXgiA+IGthXCA7Civnl4AgPiBrdVwgOwor55a/ID4gaGlcIDsKK+eWpCA+IGhhXCA7CivnlpwgPiBrYVwgOwor55aVID4gaGlcIDsKK+eWjyA+IHNvXCA7Civnlb8gPiBraVwgOwor55W4ID4ga2lcIDsKK+eVsiA+IHlvXCA7Civnla0gPiB5b1wgOwor55WsID4geW9cIDsKK+eVnSA+IHNlXCA7CivnlZIgPiBob1wgOwor55WJID4gZnVcIDsKK+eVhyA+IGluXCA7CivnlYYgPiBob1wgOwor55WAID4gaGlcIDsKK+eUqyA+IGhvXCA7CivnlJYgPiBvdVwgOwor55SSID4gYnVcIDsKK+eUjCA+IG91XCA7Civnk68gPiBvdVwgOwor55OuID4gb3VcIDsKK+eToCA+IGtvXCA7Civnk5QgPiBlaVwgOwor55OQID4gcm9cIDsKK+eSvSA+IGppXCA7CivnkrUgPiB5b1wgOwor55KmID4gYWlcIDsKK+eSoyA+IGtpXCA7Civnkp8gPiBlaVwgOwor55KRID4gYnVcIDsKK+eSkCA+IHJvXCA7CivnkoMgPiByaVwgOwor55GzID4gc2FcIDsKK+eRqiA+IGJhXCA7CivnkakgPiBlaVwgOwor55GjID4gc2FcIDsKK+eRnCA+IHl1XCA7CivnkZsgPiBlaVwgOwor55GaID4ga29cIDsKK+eRlyA+IGVuXCA7CivnkLYgPiBoYVwgOwor55C1ID4gYmlcIDsKK+eQsCA+IGVuXCA7CivnkKwgPiBlblwgOwor55CqID4ga2lcIDsKK+eQpiA+IGtpXCA7CivnkKUgPiBrb1wgOwor55CRID4gc2FcIDsKK+eQiiA+IHlhXCA7Civnj7ggPiBnb1wgOwor54+3ID4gYnVcIDsKK+ePtCA+IGdhXCA7Civnj7EgPiBlaVwgOwor54+lID4gamlcIDsKK+ePnSA+IGt1XCA7Civnj4IgPiBrYVwgOwor5467ID4gaGFcIDsKK+eOniA+IGh1XCA7CivnjpggPiBraVwgOwor546GID4gamlcIDsKK+eOgCA+IHJhXCA7CivnjbwgPiBiaVwgOwor5425ID4gcm9cIDsKK+eMqCA+IGVuXCA7CivnjKcgPiBrYVwgOwor54ykID4ga2lcIDsKK+eMoiA+IGtvXCA7CivnjJMgPiBrYVwgOwor54ySID4gZW5cIDsKK+eMhyA+IG91XCA7Civni7MgPiB5b1wgOwor54uVID4gb3VcIDsKK+eLkiA+IGhpXCA7Civni4kgPiBoaVwgOwor54uBID4gaW5cIDsKK+eKpyA+IGdpXCA7CivnipMgPiBzdVwgOwor54qCID4gcmlcIDsKK+eKgSA+IHJpXCA7Civnib4gPiBnb1wgOwor54mxID4ga2FcIDsKK+eJryA+IGtvXCA7CivniasgPiBrYVwgOwor54mgID4gdGFcIDsKK+eJgSA+IGthXCA7CivniL4gPiBqaVwgOwor54i5ID4gdGFcIDsKK+eIuCA+IGhhXCA7CivniLAgPiBlblwgOwor54isID4gaGFcIDsKK+eIkyA+IGVuXCA7Civnh6wgPiBraVwgOwor54eEID4gZW5cIDsKK+eGuiA+IGtpXCA7CivnhrkgPiBraVwgOwor54awID4gb3VcIDsKK+eGmSA+IGtpXCA7CivnhoggPiBraVwgOwor54aFID4gdW5cIDsKK+eFpiA+IGt1XCA7CivnhZUgPiBraVwgOwor54WQID4gZWlcIDsKK+eFhyA+IGtpXCA7CivnhYYgPiBrYVwgOwor54S4ID4ga29cIDsKK+eEsSA+IGVuXCA7CivnhLAgPiBlblwgOwor54SJID4gZW5cIDsKK+eDkyA+IGVpXCA7CivngqwgPiBrb1wgOwor54KJID4gcm9cIDsKK+eCgSA+IGtpXCA7CivngakgPiBlblwgOwor54GnID4gZW5cIDsKK+eBniA+IGhhXCA7CivngZUgPiByaVwgOwor54GUID4gZW5cIDsKK+eBjiA+IGVuXCA7CivngYggPiBrdVwgOwor54C0ID4gZWlcIDsKK+eAsCA+IGJpXCA7CivngK8gPiBlaVwgOwor54CgID4gZWlcIDsKK+eAmyA+IGVpXCA7CivngJggPiByb1wgOwor54CHID4gb3VcIDsKK+eAhSA+IGVpXCA7Civmv54gPiBoaVwgOwor5r+aID4gZWlcIDsKK+a+piA+IHlvXCA7CivmvpAgPiB1blwgOwor5r29ID4gaG9cIDsKK+a9niA+IHJvXCA7CivmvZkgPiBraVwgOwor5r2BID4gZWlcIDsKK+a8piA+IGdpXCA7CivmvJogPiBvdVwgOwor5ryTID4gcmlcIDsKK+a8iiA+IHJ1XCA7Civmu7kgPiBrb1wgOwor5ru4ID4ga29cIDsKK+a7tyA+IHJvXCA7Civmu6wgPiBrb1wgOwor5ruPID4gaHVcIDsKK+a7iyA+IGppXCA7Civmu4ogPiBraVwgOwor5ruDID4gb3VcIDsKK+a6syA+IHVuXCA7CivmuqsgPiBvblwgOwor5rqmID4gbWlcIDsKK+a6pSA+IGhvXCA7CivmuqAgPiBzYVwgOwor5rqIID4ga2lcIDsKK+a5riA+IGluXCA7CivmuYQgPiBiaVwgOwor5ri8ID4gYmlcIDsKK+a4tiA+IGVpXCA7CivmuK4gPiBrYVwgOwor5rijID4gc2FcIDsKK+a4nSA+IHl1XCA7CivmuJUgPiBlblwgOwor5riKID4gZW5cIDsKK+a4hCA+IGhpXCA7Civmt6QgPiB5b1wgOwor5regID4gaGlcIDsKK+a3nSA+IGhpXCA7Civmt4cgPiBraVwgOwor5ra5ID4gd2FcIDsKK+a2tCA+IGVuXCA7CivmtoIgPiB0b1wgOwor5rWvID4gZ29cIDsKK+a0vCA+IGFpXCA7CivmtLkgPiBlblwgOwor5rSzID4gam9cIDsKK+a0sSA+IGppXCA7CivmtI8gPiBqaVwgOwor5rSOID4ga2lcIDsKK+a0hyA+IGluXCA7Civms7EgPiBvdVwgOwor5rOdID4gc29cIDsKK+azkyA+IG91XCA7Civms5IgPiBrb1wgOwor5rK9ID4ga29cIDsKK+aysiA+IHRhXCA7CivmsrEgPiB0YVwgOwor5rKYID4gaGlcIDsKK+ayjSA+IGdvXCA7CivmsocgPiBlblwgOwor5rKCID4ga2lcIDsKK+axuyA+IGtvXCA7CivmsaogPiBvdVwgOwor5rGKID4gc2FcIDsKK+awvyA+IGtpXCA7CivmsLMgPiB1blwgOwor5rCyID4gdW5cIDsKK+awqCA+IGFuXCA7CivmsKQgPiBpblwgOwor5rCUID4ga2lcIDsKK+awjSA+IGt1XCA7CivmsIIgPiByaVwgOwor5q+5ID4geXVcIDsKK+avpiA+IGppXCA7Civmr5YgPiBoaVwgOwor5q+LID4gYnVcIDsKK+avhSA+IGtpXCA7Civmr4EgPiBraVwgOwor5q+AID4ga2lcIDsKK+auuSA+IGVpXCA7CivmrrcgPiBpblwgOwor5q60ID4gb3VcIDsKK+aurCA+IHRvXCA7CivmrqogPiBlaVwgOwor5q6eID4gaW5cIDsKK+augiA+IHNvXCA7CivmracgPiBraVwgOwor5q2lID4gaG9cIDsKK+atliA+IGtpXCA7CivmrLggPiBhaVwgOwor5qyoID4ga3VcIDsKK+aspyA+IG91XCA7CivmrKQgPiB5b1wgOwor5qybID4gaGFcIDsKK+asjyA+IHJhXCA7Civmq70gPiBpblwgOwor5quyID4geW9cIDsKK+arqCA+IHJvXCA7Civmq54gPiBlblwgOwor5quTID4gcm9cIDsKK+argyA+IGtpXCA7Civmqr8gPiBlblwgOwor5qq9ID4gamlcIDsKK+aqvCA+IGluXCA7CivmqrEgPiBraVwgOwor5qqlID4gZ2lcIDsKK+aqnyA+IGthXCA7CivmqpsgPiB0YVwgOwor5qqDID4gaW5cIDsKK+apsSA+IHp1XCA7CivmqasgPiBvdVwgOwor5qmiID4gZGFcIDsKK+apkiA+IHVuXCA7CivmqYYgPiBidVwgOwor5qmFID4gYm9cIDsKK+aouyA+IGtpXCA7CivmqLIgPiBqaVwgOwor5qidID4gc2FcIDsKK+anuyA+IGtpXCA7Civmp6UgPiBlaVwgOwor5qeOID4gc2FcIDsKK+amvyA+IGtpXCA7Civmpq4gPiBlaVwgOwor5qaoID4gc2FcIDsKK+amoSA+IHNvXCA7CivmppggPiBrdVwgOwor5qaRID4gZnVcIDsKK+amhiA+IHl1XCA7CivmpbkgPiBlaVwgOwor5qWwID4geXVcIDsKK+aloyA+IGJpXCA7CivmpaEgPiB5dVwgOwor5qWcID4ga29cIDsKK+almyA+IGtvXCA7CivmpZogPiBzb1wgOwor5qWVID4gZGFcIDsKK+algiA+IHNhXCA7CivmpLsgPiBlblwgOwor5qS1ID4ga2FcIDsKK+aksCA+IHlhXCA7Civmo6ogPiBlblwgOwor5qOdID4ga29cIDsKK+ajnCA+IHlvXCA7Civmo5AgPiBoaVwgOwor5qOLID4ga2lcIDsKK+ajiiA+IGtpXCA7CivmorYgPiBiaVwgOwor5qKzID4gc29cIDsKK+airSA+IHNhXCA7CivmoqkgPiByaVwgOwor5qKnID4gZ29cIDsKK+aipiA+IG11XCA7CivmopsgPiBkYVwgOwor5qKOID4gb3VcIDsKK+ahtCA+IGZ1XCA7CivmoasgPiBzYVwgOwor5qGXID4gdGFcIDsKK+ahjSA+IGtvXCA7CivmoK0gPiBqaVwgOwor5qCpID4ga3VcIDsKK+agpyA+IGVpXCA7Civmn7IgPiBoaVwgOwor5p+wID4gbmFcIDsKK+afryA+IGthXCA7Civmn6cgPiBrb1wgOwor5p+lID4gc2FcIDsKK+afpCA+IHNhXCA7Civmn6EgPiBlaVwgOwor5p+OID4gZnVcIDsKK+afhSA+IGppXCA7Civmn4EgPiB0YVwgOwor5p+AID4gaGlcIDsKK+aeuyA+IGVpXCA7CivmnrggPiBrdVwgOwor5p6zID4ga2lcIDsKK+aepiA+IHJvXCA7CivmnpkgPiBnYVwgOwor5p6RID4ga29cIDsKK+aejiA+IGh1XCA7CivmnokgPiBvdVwgOwor5p6HID4gaGlcIDsKK+adtyA+IGhhXCA7CivmnZ4gPiBrb1wgOwor5p2cID4gZG9cIDsKK+adiCA+IHNhXCA7CivmnLYgPiBkYVwgOwor5py1ID4gZGFcIDsKK+acoCA+IGVpXCA7CivmnJ4gPiBraVwgOwor5pyPID4gaGlcIDsKK+achyA+IGhpXCA7Civmm70gPiB6b1wgOwor5pu1ID4gZWlcIDsKK+absSA+IG91XCA7Civmm6YgPiBnaVwgOwor5puWID4gYWlcIDsKK+abgSA+IGtpXCA7Civmm4AgPiBlaVwgOwor5pq/ID4ga2lcIDsKK+aaqCA+IGtpXCA7CivmmpwgPiBmdVwgOwor5pqbID4gc2FcIDsKK+aajiA+IGVpXCA7CivmmokgPiBraVwgOwor5pqIID4gdW5cIDsKK+aagyA+IGhpXCA7CivmmoAgPiBvdVwgOwor5pm8ID4gZW5cIDsKK+aZuyA+IGFuXCA7CivmmbcgPiBraVwgOwor5pmkID4gZ29cIDsKK+aZoSA+IGhvXCA7CivmmZ4gPiBraVwgOwor5pmPID4gYW5cIDsKK+aYuSA+IGFpXCA7CivmmLcgPiBvblwgOwor5pirID4ga3VcIDsKK+aYliA+IGVuXCA7CivmmIggPiBrb1wgOwor5piAID4gaW5cIDsKK+aXvyA+IGdvXCA7Civml7kgPiBqaVwgOwor5pe0ID4ga3VcIDsKK+aXoyA+IGtpXCA7Civml6EgPiBraVwgOwor5pegID4gYnVcIDsKK+aXnyA+IHlvXCA7Civml44gPiBqaVwgOwor5peJID4gZnVcIDsKK+aXgiA+IGtpXCA7Civmlp0gPiBrYVwgOwor5pW6ID4ga3VcIDsKK+aVpyA+IGtpXCA7CivmlZggPiBqb1wgOwor5pWNID4gam9cIDsKK+aViSA+IGJpXCA7CivmlLEgPiBraVwgOwor5pSwID4ga2lcIDsKK+aUniA+IHJhXCA7CivmlJYgPiBlaVwgOwor5pO1ID4gbWFcIDsKK+aTqSA+IGp1XCA7Civmkr4gPiB0YVwgOwor5pKtID4gaGFcIDsKK+aSnSA+IGtpXCA7CivmkbggPiBtb1wgOwor5pGjID4gc2FcIDsKK+aQvSA+IHRhXCA7CivmkLUgPiBvblwgOwor5pCZID4gbnVcIDsKK+aQkyA+IHNhXCA7Civmj7ggPiBzYVwgOwor5o+2ID4geWFcIDsKK+aPtCA+IGVuXCA7Civmj64gPiBraVwgOwor5o+cID4gZW5cIDsKK+aPhiA+IGtpXCA7Civmj4QgPiB5dVwgOwor5o6+ID4gZW5cIDsKK+aOniA+IGVuXCA7Civmjo4gPiBraVwgOwor5o28ID4gZGFcIDsKK+aNrCA+IGh1XCA7CivmjZMgPiBzZVwgOwor5o2QID4gZW5cIDsKK+aNgiA+IGdvXCA7CivmjLwgPiBkYVwgOwor5oyrID4gemFcIDsKK+aMqiA+IGRhXCA7CivmjKcgPiBrdVwgOwor5oyTID4gdGFcIDsKK+aMkCA+IGRhXCA7CivmjIkgPiBhblwgOwor5ou/ID4gZGFcIDsKK+aLvSA+IGVpXCA7Civmi5cgPiBvdVwgOwor5ouWID4gdGFcIDsKK+aLlSA+IHRhXCA7Civmi48gPiBkYVwgOwor5ouKID4gZnVcIDsKK+aLhyA+IGJvXCA7CivmircgPiBoaVwgOwor5oqzID4gamlcIDsKK+aKjiA+IHVuXCA7CivmioogPiB3YVwgOwor5om+ID4ga2FcIDsKK+aJryA+IHRhXCA7CivmiaAgPiBzYVwgOwor5omIID4ga29cIDsKK+aIvSA+IGtvXCA7CivmiLcgPiBrb1wgOwor5oi2ID4ga29cIDsKK+aIsSA+IGdpXCA7CivmiKMgPiBraVwgOwor5oiTID4ga2FcIDsKK+aIjSA+IGp1XCA7CivmiIogPiBib1wgOwor5oevID4gZnVcIDsKK+aHpyA+IGRhXCA7Civmh6YgPiBkYVwgOwor5oehID4gYmFcIDsKK+aHlSA+IGVuXCA7Civmh4ogPiBvdVwgOwor5oauID4gYnVcIDsKK+aGnCA+IHRhXCA7CivmhpkgPiBraVwgOwor5oaYID4ga2lcIDsKK+aFjSA+IHVuXCA7CivmhYggPiBqaVwgOwor5oS+ID4ga2lcIDsKK+aErCA+IHNvXCA7CivmhKsgPiBzb1wgOwor5oSqID4gdW5cIDsKK+aEpyA+IGtpXCA7CivmhKAgPiB1blwgOwor5oSUID4gaW5cIDsKK+aDsiA+IHVuXCA7Civmg7AgPiBkYVwgOwor5oOnID4ga3VcIDsKK+aDoiA+IHNhXCA7Civmg44gPiBraVwgOwor5oOIID4ga2FcIDsKK+aCsSA+IGhpXCA7CivmgqggPiBqaVwgOwor5oKnID4gcmlcIDsKK+aCniA+IGdvXCA7CivmgpUgPiBraVwgOwor5oKRID4gaG9cIDsKK+aChiA+IHlvXCA7CivmgoIgPiBoaVwgOwor5oKBID4gZW5cIDsKK+aBlyA+IGtvXCA7CivmgZUgPiBqb1wgOwor5oGRID4ga2lcIDsKK+aBgyA+IGppXCA7CivmgYEgPiBpblwgOwor5oCpID4gamlcIDsKK+aApCA+IGh1XCA7CivmgJkgPiBrb1wgOwor5oCYID4ga29cIDsKK+aAlSA+IGhhXCA7Civlv68gPiBraVwgOwor5b+sID4geW9cIDsKK+W/pCA+IGdvXCA7Civlv6IgPiBnb1wgOwor5b69ID4ga2lcIDsKK+W+jSA+IGFpXCA7CivlvoIgPiBzb1wgOwor5b26ID4gb3VcIDsKK+W9tSA+IHRhXCA7CivlvYwgPiBiaVwgOwor5bytID4gYmlcIDsKK+W8qSA+IGRvXCA7CivlvKcgPiBrb1wgOwor5byjID4gaHVcIDsKK+W8nSA+IGhhXCA7CivlvJYgPiB0ZVwgOwor5byNID4gbmlcIDsKK+W8hyA+IGVuXCA7CivlvIMgPiBraVwgOwor5bu0ID4gaW5cIDsKK+W7riA+IGVpXCA7Civlu6EgPiBidVwgOwor5bucID4gdG9cIDsKK+W7miA+IHp1XCA7Civlu5UgPiBpblwgOwor5buIID4ga2FcIDsKK+W6viA+IHl1XCA7CivlurMgPiBoaVwgOwor5bqvID4gaG9cIDsKK+W6riA+IGl1XCA7CivluqogPiBraVwgOwor5bqMID4gZ2FcIDsKK+W6iyA+IGtpXCA7CivluoAgPiBoaVwgOwor5bmgID4ga29cIDsKK+W5kSA+IGtpXCA7CivluY8gPiBrYVwgOwor5bmBID4gc3VcIDsKK+W4viA+IHRvXCA7CivluJQgPiBoaVwgOwor5biRID4gZG9cIDsKK+W4jSA+IGtvXCA7CivluIogPiBoYVwgOwor5biGID4gaG9cIDsKK+W3syA+IG1pXCA7Civlt5kgPiBraVwgOwor5beNID4gZ2lcIDsKK+W3iyA+IGtpXCA7Civlt4cgPiBraVwgOwor5ba3ID4gZ2lcIDsKK+W2tCA+IGF1XCA7CivltqwgPiBnaVwgOwor5baeID4gdGFcIDsKK+W2kyA+IGhhXCA7CivltocgPiBrdVwgOwor5baBID4gcnVcIDsKK+W2gCA+IHRvXCA7CivltbMgPiBzYVwgOwor5bWvID4gc2FcIDsKK+W1oSA+IG91XCA7CivltZ8gPiBraVwgOwor5bWeID4gdG9cIDsKK+W1nCA+IGtpXCA7CivltZYgPiBzYVwgOwor5bWLID4gYmlcIDsKK+W0syA+IHl1XCA7CivltKYgPiBlblwgOwor5bSLID4ga2FcIDsKK+WzuSA+IHRvXCA7Civls7IgPiByaVwgOwor5bOsID4gaG9cIDsKK+WzqyA+IHlhXCA7Civls6kgPiBnYVwgOwor5bOoID4gZ2FcIDsKK+WzniA+IGtpXCA7Civls5sgPiByaVwgOwor5bOZID4gamlcIDsKK+WzlyA+IGdpXCA7Civls5YgPiBhblwgOwor5bOUID4gYm9cIDsKK+WzjyA+IGppXCA7Civls4ogPiBodVwgOwor5bK7ID4gamlcIDsKK+WytSA+IGtvXCA7CivlsrQgPiBrdVwgOwor5bKvID4gaGlcIDsKK+WyriA+IHRhXCA7CivlsqggPiBzb1wgOwor5bKlID4gaGFcIDsKK+WylCA+IHNhXCA7CivlspMgPiBraVwgOwor5bKQID4ga2lcIDsKK+WyiCA+IGthXCA7CivlsoYgPiBldVwgOwor5bG6ID4ga2lcIDsKK+WxriA+IHNhXCA7Civlsa0gPiBraVwgOwor5bGoID4ga3VcIDsKK+WxoiA+IHJ1XCA7CivlsaAgPiB0b1wgOwor5bGEID4gaGlcIDsKK+WxgyA+IGtpXCA7CivlsYEgPiBoZVwgOwor5bC5ID4gaW5cIDsKK+WwryA+IGtpXCA7CivlsK4gPiB0YVwgOwor5bCrID4gb3VcIDsKK+WwqiA+IG91XCA7CivlsKkgPiBvdVwgOwor5bCjID4gb3VcIDsKK+WwoiA+IG91XCA7CivlsJQgPiBqaVwgOwor5bCTID4gamlcIDsKK+WwkiA+IGppXCA7CivlsIMgPiBodVwgOwor5bCAID4gaGFcIDsKK+WvsiA+IGdpXCA7Civlr6QgPiBnb1wgOwor5a+gID4ga3VcIDsKK+WvmSA+IHl1XCA7Civlr4MgPiBlblwgOwor5a6xID4gc2FcIDsKK+WukCA+IGdpXCA7Civlro4gPiBldVwgOwor5a6EID4ga2lcIDsKK+WugyA+IHRhXCA7Civlrb4gPiBlaVwgOwor5a26ID4ganVcIDsKK+WttyA+IHJpXCA7CivlrbUgPiBmdVwgOwor5a2lID4gZG9cIDsKK+WtmiA+IGZ1XCA7CivlrYsgPiByaVwgOwor5ay/ID4gZW5cIDsKK+WsvSA+IGVuXCA7CivlrLcgPiBiYVwgOwor5ay0ID4gZWlcIDsKK+WssCA+IGVpXCA7CivlrK4gPiBlblwgOwor5aykID4gYmFcIDsKK+WsoSA+IGFpXCA7CivlrJQgPiBodVwgOwor5ayNID4gYmlcIDsKK+WsgCA+IGtpXCA7Civlq7cgPiB0YVwgOwor5au1ID4gYnVcIDsKK+WrtCA+IGtvXCA7Civlq64gPiBrb1wgOwor5autID4ga29cIDsKK+WrqyA+IGJvXCA7Civlq6MgPiBlblwgOwor5auiID4ga2lcIDsKK+WroCA+IHJpXCA7Civlq5sgPiBlaVwgOwor5auXID4gb3VcIDsKK+WrlSA+IGVpXCA7Civlq4ogPiBzb1wgOwor5aq/ID4ga2lcIDsKK+WqvSA+IGJvXCA7CivlqrogPiBiaVwgOwor5aq0ID4gZW5cIDsKK+WqsSA+IGV1XCA7CivlqqwgPiBob1wgOwor5aqqID4gb3VcIDsKK+WqqSA+IGtvXCA7CivlqqAgPiB0YVwgOwor5aqWID4gZWlcIDsKK+WqlSA+IGVuXCA7CivlqpAgPiBraVwgOwor5aqOID4gc29cIDsKK+WqhCA+IGJpXCA7Civlqb0gPiBrYVwgOwor5am6ID4gYnVcIDsKK+WprCA+IGluXCA7CivlqaMgPiBpblwgOwor5amfID4ga29cIDsKK+WpkyA+IGhpXCA7CivlqZAgPiB3YVwgOwor5amNID4ga2lcIDsKK+WouCA+IGtpXCA7CivlqLAgPiBqaVwgOwor5aivID4gZ29cIDsKK+WorSA+IGtpXCA7CivlqKwgPiBidVwgOwor5aiqID4gZ29cIDsKK+WopSA+IGdhXCA7CivlqJwgPiBkYVwgOwor5aibID4gZ29cIDsKK+WokyA+IGJpXCA7CivlqJIgPiBib1wgOwor5aiMID4gcmlcIDsKK+WohCA+IHJ1XCA7Civlp70gPiBraVwgOwor5ae7ID4gaW5cIDsKK+WnuSA+IHRhXCA7Civlp7YgPiBvdVwgOwor5aeyID4gYW5cIDsKK+WnsSA+IGthXCA7Civlp6wgPiBraVwgOwor5aelID4gYm9cIDsKK+WnnSA+IHN1XCA7Civlp44gPiBhdVwgOwor5aeHID4gaHVcIDsKK+WnhiA+IGJvXCA7Civlp4EgPiBrdVwgOwor5aeAID4ga2FcIDsKK+WmvCA+IGhpXCA7CivlprQgPiBlblwgOwor5aauID4gamlcIDsKK+WmpSA+IGRhXCA7CivlpqQgPiB5b1wgOwor5aajID4gaGlcIDsKK+WmnyA+IGFuXCA7CivlppggPiB1blwgOwor5aaSID4gdG9cIDsKK+WmiyA+IGZ1XCA7CivlpoMgPiBoaVwgOwor5aW8ID4gdGFcIDsKK+WlsCA+IGhpXCA7CivlpasgPiBpblwgOwor5aWcID4gaGlcIDsKK+WlkyA+IHRhXCA7CivlpYQgPiBlblwgOwor5aS/ID4gaGFcIDsKK+WkuCA+IGtvXCA7CivlpLYgPiBoaVwgOwor5aS1ID4gZW5cIDsKK+WkpSA+IGthXCA7CivlpKQgPiBpblwgOwor5aShID4ga2lcIDsKK+WkmyA+IHRhXCA7CivlpJcgPiBlblwgOwor5aSUID4ga2lcIDsKK+WkkyA+IGthXCA7CivlpI4gPiBzYVwgOwor5aSDID4ga29cIDsKK+WjvSA+IGp1XCA7Civlo7ogPiBrb1wgOwor5aOpID4gaGFcIDsKK+WjoSA+IGVpXCA7Civlo5sgPiBlblwgOwor5aOaID4gcm9cIDsKK+WjkiA+IGFpXCA7Civlo4ggPiBvblwgOwor5aOEID4geWFcIDsKK+WiuiA+IG91XCA7CivlorIgPiBib1wgOwor5aKvID4gZGFcIDsKK+WijSA+IGtpXCA7CivlobggPiBvdVwgOwor5aGnID4gYWlcIDsKK+WhlSA+IG91XCA7CivloZEgPiBzb1wgOwor5aGQID4gc29cIDsKK+WhiyA+IGVpXCA7CivloYggPiBraVwgOwor5aC4ID4gaHVcIDsKK+WgtyA+IGFuXCA7CivloLYgPiBrdVwgOwor5aCzID4gYmlcIDsKK+WgsCA+IGVuXCA7CivloKwgPiB5dVwgOwor5aCjID4gZ3VcIDsKK+WgnSA+IGthXCA7CivloJkgPiBpblwgOwor5aCNID4gdG9cIDsKK+WgjCA+IGtvXCA7CivloIEgPiBrYVwgOwor5Z+8ID4ga2lcIDsKK+WftSA+IHRhXCA7Civln68gPiBlblwgOwor5Z+nID4ga3VcIDsKK+WfpCA+IGhpXCA7Civln6AgPiBmdVwgOwor5Z+UID4gaG9cIDsKK+WeuiA+IGh1XCA7CivlnqogPiBoYVwgOwor5Z6eID4gdGFcIDsKK+WenSA+IGtpXCA7CivlnpwgPiBkYVwgOwor5Z6bID4gZGFcIDsKK+WegCA+IGtvXCA7Civlnb8gPiBmdVwgOwor5Z23ID4ga2FcIDsKK+WdsyA+IGF1XCA7CivlnbEgPiBhdVwgOwor5Z2vID4gaGlcIDsKK+WdrCA+IGthXCA7CivlnaEgPiBoYVwgOwor5Z2SID4gaGlcIDsKK+WcuyA+IGtpXCA7CivlnK4gPiBoaVwgOwor5ZyrID4gYXVcIDsKK+WclyA+IHRvXCA7CivlnJQgPiBvdVwgOwor5ZyRID4gaG9cIDsKK+WcjiA+IGVuXCA7Civlm6YgPiBlblwgOwor5ZuZID4gaW5cIDsKK+WbjiA+IHNvXCA7Civlm4wgPiBzb1wgOwor5ZuJID4gcmFcIDsKK+WatiA+IG91XCA7CivlmrIgPiB0YVwgOwor5ZqxID4ga2lcIDsKK+WarSA+IGhpXCA7CivlmqcgPiByb1wgOwor5ZqlID4gZW5cIDsKK+WanyA+IHJpXCA7CivlmpwgPiBiaVwgOwor5ZqYID4gaXVcIDsKK+WalSA+IHJvXCA7CivlmoogPiBoaVwgOwor5ZqFID4ganVcIDsKK+WZviA+IGluXCA7CivlmbMgPiBndVwgOwor5ZmvID4gYWlcIDsKK+WZriA+IGVuXCA7CivlmasgPiBhYVwgOwor5ZmVID4ga2lcIDsKK+WZkCA+IGtpXCA7CivlmYUgPiBraVwgOwor5Zi7ID4ga2lcIDsKK+WYsyA+IGtpXCA7CivlmLAgPiBraVwgOwor5ZifID4gdG9cIDsKK+WYnCA+IGJhXCA7CivlmJsgPiBtYVwgOwor5ZiZID4gaGFcIDsKK+WYkSA+IGtvXCA7CivlmI8gPiBrYVwgOwor5ZiJID4ga2FcIDsKK+WXqSA+IHNhXCA7Civll6YgPiBzYVwgOwor5ZePID4gc2FcIDsKK+WXjiA+IGJhXCA7Civll4kgPiBzb1wgOwor5ZeEID4gc2FcIDsKK+WXgiA+IGV1XCA7CivllrsgPiB5dVwgOwor5Za2ID4gZWlcIDsKK+WWsyA+IHNhXCA7CivllrEgPiByaVwgOwor5ZapID4geXVcIDsKK+WWpSA+IHRvXCA7CivllqMgPiBrdVwgOwor5ZafID4ga2lcIDsKK+WWkyA+IGV1XCA7CivllpEgPiBpblwgOwor5ZaOID4ga2FcIDsKK+WWgiA+IGtpXCA7CivllaQgPiBoaVwgOwor5ZWdID4ga2FcIDsKK+WVmiA+IGhpXCA7CivllZggPiBlblwgOwor5ZWOID4gZ29cIDsKK+WUuSA+IHlvXCA7CivllLcgPiB5b1wgOwor5ZS1ID4gYW5cIDsKK+WUsiA+IGppXCA7CivllK0gPiBraVwgOwor5ZSsID4ga2FcIDsKK+WUlCA+IGdvXCA7CivllI8gPiBraVwgOwor5ZSOID4gcmlcIDsKK+WUiyA+IHRvXCA7CivllIggPiBvdVwgOwor5ZSGID4gc2FcIDsKK+WUgCA+IGl1XCA7Civlk78gPiBrYVwgOwor5ZO6ID4gaG9cIDsKK+WTtiA+IGJhXCA7Civlk6wgPiBrYVwgOwor5ZOqID4gZGFcIDsKK+WTpyA+IGthXCA7Civlk6YgPiBnYVwgOwor5ZOlID4ga2FcIDsKK+WTiSA+IHlhXCA7Civlk4cgPiBhaVwgOwor5ZK8ID4ga2FcIDsKK+WSuyA+IGt1XCA7CivlkqogPiBiaVwgOwor5ZKpID4gYmlcIDsKK+WSpSA+IGtpXCA7CivlkqQgPiB0YVwgOwor5ZKhID4gamlcIDsKK+WSnCA+IHRhXCA7CivlkpYgPiBrYVwgOwor5ZKVID4ga29cIDsKK+WSkSA+IGRhXCA7CivlkpAgPiBob1wgOwor5ZKPID4gZWlcIDsKK+WSiiA+IHdhXCA7CivlkokgPiBhdVwgOwor5ZKDID4gdGFcIDsKK+WSgCA+IHNvXCA7Civlkb8gPiBrYVwgOwor5ZG4ID4gaGlcIDsKK+WRtiA+IGRvXCA7CivlkbUgPiBrYVwgOwor5ZG0ID4ga3VcIDsKK+WRsSA+IGtvXCA7Civlka4gPiBraVwgOwor5ZGtID4gZWlcIDsKK+WRrCA+IGtpXCA7CivlkaYgPiBpdVwgOwor5ZGiID4gamlcIDsKK+WRjSA+IHVuXCA7CivlkYsgPiBodVwgOwor5ZGAID4gZ2FcIDsKK+WQvSA+IGluXCA7CivlkLQgPiBnb1wgOwor5ZCzID4gZ29cIDsKK+WQpyA+IGhhXCA7CivlkJQgPiBzZVwgOwor5ZCTID4ga2FcIDsKK+WQkiA+IHRhXCA7CivlkIEgPiBrdVwgOwor5Y+5ID4gaXVcIDsKK+WPtSA+IGhhXCA7Civlj6cgPiBrYVwgOwor5Y+hID4gZWlcIDsKK+WPmiA+IGthXCA7Civlj4YgPiBhaVwgOwor5Y60ID4gZW5cIDsKK+WOrCA+IGtpXCA7CivljqYgPiBrYVwgOwor5Y6eID4gaGlcIDsKK+WOjyA+IHNhXCA7CivljoogPiBrYVwgOwor5Y2mID4ga2FcIDsKK+WNiSA+IGtpXCA7CivljYAgPiBrdVwgOwor5Yy9ID4gZW5cIDsKK+WMvCA+IGFuXCA7CivljLogPiBrdVwgOwor5YytID4ga2lcIDsKK+WMrCA+IHl1XCA7CivljKogPiBoaVwgOwor5YyVID4gaGlcIDsKK+WMjiA+IG91XCA7CivljIAgPiBpblwgOwor5Yu7ID4gaW5cIDsKK+WLqSA+IGVpXCA7Civli58gPiBib1wgOwor5YucID4gb3VcIDsKK+WLmiA+IGVpXCA7CivlirggPiBhaVwgOwor5YqsID4ga3VcIDsKK+WKmSA+IHJpXCA7CivlipggPiBiYVwgOwor5YqTID4gZ2lcIDsKK+WJuiA+IHJpXCA7Civlia4gPiBrYVwgOwor5YmmID4gZW5cIDsKK+WJoSA+IGVuXCA7CivliZ4gPiBraVwgOwor5YmYID4ga2lcIDsKK+WJlSA+IGhpXCA7CivliYkgPiBzYVwgOwor5YmGID4gcmFcIDsKK+WJgSA+IHRhXCA7CivliLUgPiBqaVwgOwor5Yi0ID4gdGFcIDsKK+WIsyA+IGtvXCA7CivliJUgPiByaVwgOwor5YiSID4ga2FcIDsKK+WIjyA+IGtpXCA7CivliIkgPiBraVwgOwor5Ye5ID4gb3VcIDsKK+WHoCA+IGtpXCA7Civlh54gPiBraVwgOwor5YeSID4gZ2lcIDsKK+WHkCA+IGluXCA7Civlh4UgPiBrb1wgOwor5Ya0ID4gZ29cIDsKK+WGsSA+IGdvXCA7CivlhqggPiBmdVwgOwor5YakID4gZW5cIDsKK+WGniA+IGJpXCA7Civlhp0gPiBnaVwgOwor5YaYID4gaW5cIDsKK+WGlCA+IGt1XCA7Civlho4gPiBrYVwgOwor5YaAID4ga2lcIDsKK+WFviA+IGtpXCA7CivlhbkgPiBqaVwgOwor5YWqID4geXVcIDsKK+WFlyA+IGVuXCA7CivlhZQgPiB0b1wgOwor5YWRID4gZGFcIDsKK+WFjCA+IGRhXCA7CivlhYEgPiBpblwgOwor5YS6ID4gbmFcIDsKK+WEuCA+IHJhXCA7CivlhJ4gPiBqaVwgOwor5YSbID4gYnVcIDsKK+WElyA+IGdpXCA7CivlhJIgPiBqdVwgOwor5YSNID4gc2FcIDsKK+WDviA+IGFpXCA7Civlg7EgPiBrb1wgOwor5YOfID4ga2lcIDsKK+WDmyA+IGtpXCA7Civlg5YgPiBraVwgOwor5YODID4gYmlcIDsKK+WCvyA+IGVuXCA7CivlgrsgPiBzYVwgOwor5YK0ID4ga3VcIDsKK+WCoiA+IGthXCA7Civlgp8gPiBhdVwgOwor5YKeID4gc2FcIDsKK+WCnCA+IGV1XCA7CivlgowgPiBiYVwgOwor5YKKID4gaW5cIDsKK+WChSA+IGZ1XCA7CivlgoMgPiBzb1wgOwor5YG5ID4gYmlcIDsKK+WBpyA+IHRhXCA7CivlgaQgPiB5dVwgOwor5YGjID4gZW5cIDsKK+WBoCA+IGV1XCA7CivlgYwgPiBqYVwgOwor5YGDID4gZW5cIDsKK+WBgCA+IGVpXCA7CivlgLsgPiB5YVwgOwor5YC1ID4gYnVcIDsKK+WAriA+IHJhXCA7CivlgKAgPiBraVwgOwor5YCbID4ga2lcIDsKK+WAhyA+IGVuXCA7Civkv74gPiBoaVwgOwor5L+7ID4gYmlcIDsKK+S/tyA+IGhpXCA7Civkv7EgPiBrdVwgOwor5L+wID4ga2FcIDsKK+S/niA+IHl1XCA7Civkv5ogPiByaVwgOwor5L+ZID4ga2lcIDsKK+S/mCA+IGZ1XCA7Civkv5AgPiByaVwgOwor5L+MID4gZnVcIDsKK+S/iSA+IGdvXCA7Civkv4EgPiBndVwgOwor5L6zID4gc2FcIDsKK+S+oiA+IGJ1XCA7Civkvp4gPiBqb1wgOwor5L6VID4gamlcIDsKK+S+kiA+IGFuXCA7Civkvo4gPiBiaVwgOwor5L6MID4gaW5cIDsKK+S+iSA+IGthXCA7CivkvbkgPiBraVwgOwor5L20ID4gamlcIDsKK+S9syA+IGthXCA7CivkvaAgPiBqaVwgOwor5L2SID4gYXVcIDsKK+S9iCA+IGhvXCA7CivkvYEgPiBhaVwgOwor5Ly+ID4gaGlcIDsKK+S8siA+IGppXCA7CivkvLEgPiBqaVwgOwor5LywID4ga29cIDsKK+S8riA+IGRvXCA7CivkvJkgPiBrYVwgOwor5LyWID4gZG9cIDsKK+S8lSA+IGh1XCA7CivkvIwgPiBhaVwgOwor5LyDID4geW9cIDsKK+S7tSA+IGtvXCA7Civku7MgPiBoaVwgOwor5LuoID4gc2FcIDsKK+S7myA+IHRhXCA7Civku4YgPiBmdVwgOwor5LuFID4gaHVcIDsKK+S6uSA+IGJpXCA7CivkurggPiB0YVwgOwor5LqxID4geWFcIDsKK+S6kyA+IGtpXCA7CivkuoogPiBqaVwgOwor5Lm1ID4gZW5cIDsKK+S5nCA+IGJhXCA7CivkuZogPiBpblwgOwor5LmVID4ga29cIDsKK+S5jiA+IGthXCA7CivkuYggPiBldVwgOwor5LiqID4ga2FcIDsKK+S4lSA+IGhpXCA7CivkuIwgPiBraVwgOwor5LiFID4ga2FcIDsKK+W4tyA+IGlcIDsKK+eVsCA+IGlcIDsKK+eVjyA+IGlcIDsKK+WwviA+IG9cIDsKK+WuhyA+IHVcIDsKK+isgiA+IGlcIDsKK+eIsiA+IGlcIDsKK+WogSA+IGlcIDsKK+WnlCA+IGlcIDsKK+WcjSA+IGlcIDsKK+WbsiA+IGlcIDsKK+WXmiA+IG9cIDsKK+axnyA+IGVcIDsKK+axmiA+IG9cIDsKK+iQjiA+IGlcIDsKK+WMuyA+IGlcIDsKK+akhSA+IGlcIDsKK+iDgyA+IGlcIDsKK+WBiSA+IGlcIDsKK+mgpCA+IGlcIDsKK+S+nSA+IGVcIDsKK+S8iiA+IGlcIDsKK+S7pSA+IGlcIDsKK+S6niA+IGFcIDsKK+mYvyA+IGFcIDsKK+e3kiA+IG9cIDsKK+aWvCA+IG9cIDsKK+e2rSA+IGlcIDsKK+e1tSA+IGVcIDsKK+enuyA+IGlcIDsKK+mGqyA+IGlcIDsKK+aFsCA+IGlcIDsKK+aEjyA+IGlcIDsKK+aDoSA+IG9cIDsKK+mBuiA+IGlcIDsKK+mBlSA+IGlcIDsKK+m3viA+IGlcIDsKK+m3pyA+IGlcIDsKK+m1tiA+IGFcIDsKK+m1nCA+IHVcIDsKK+mwniA+IG9cIDsKK+mwhCA+IGlcIDsKK+mupyA+IGlcIDsKK+mqrCA+IHVcIDsKK+mqqyA+IGlcIDsKK+mqqiA+IGlcIDsKK+mlkCA+IGlcIDsKK+mhiiA+IGlcIDsKK+mgpSA+IGlcIDsKK+mgiSA+IGlcIDsKK+mfmSA+IGlcIDsKK+mfkSA+IGlcIDsKK+mfiyA+IGlcIDsKK+mcqCA+IGlcIDsKK+mbqSA+IHVcIDsKK+maliA+IG9cIDsKK+mXiCA+IGlcIDsKK+mWvCA+IGFcIDsKK+mTlCA+IGFcIDsKK+mQvyA+IGlcIDsKK+mQmiA+IGFcIDsKK+mMjyA+IGFcIDsKK+mKpSA+IGlcIDsKK+mJryA+IGlcIDsKK+mIsyA+IGFcIDsKK+mHqiA+IHVcIDsKK+mFjyA+IGlcIDsKK+mElCA+IG9cIDsKK+mCmCA+IHVcIDsKK+mAtiA+IGlcIDsKK+i/uyA+IGlcIDsKK+i/pCA+IGlcIDsKK+i/hiA+IGlcIDsKK+i/giA+IHVcIDsKK+iyvSA+IGlcIDsKK+iypCA+IGlcIDsKK+ikmCA+IGlcIDsKK+iimCA+IGlcIDsKK+iesSA+IGlcIDsKK+ieoCA+IGlcIDsKK+iekCA+IG9cIDsKK+ieiSA+IG9cIDsKK+icvCA+IGlcIDsKK+icsiA+IGlcIDsKK+ibnCA+IGlcIDsKK+iZtiA+IHVcIDsKK+iUvyA+IGlcIDsKK+iRsyA+IGlcIDsKK+iNvSA+IGlcIDsKK+iNjyA+IGVcIDsKK+iMoSA+IHVcIDsKK+iLoiA+IGlcIDsKK+iLoSA+IGlcIDsKK+iKmyA+IGlcIDsKK+iDsCA+IGlcIDsKK+iChCA+IGlcIDsKK+e3ryA+IGlcIDsKK+e3rSA+IGlcIDsKK+e0hiA+IHVcIDsKK+ewgyA+IGlcIDsKK+ervSA+IHVcIDsKK+emuSA+IHVcIDsKK+emlSA+IGlcIDsKK+ejiCA+IGlcIDsKK+efoyA+IGlcIDsKK+ebgiA+IHVcIDsKK+eYgiA+IGFcIDsKK+eXvyA+IGlcIDsKK+eXviA+IGFcIDsKK+eXjyA+IGlcIDsKK+eXjSA+IGlcIDsKK+eWtCA+IGFcIDsKK+eRpiA+IG9cIDsKK+eRiyA+IGlcIDsKK+eRgCA+IHVcIDsKK+ePhiA+IGlcIDsKK+eOlyA+IHVcIDsKK+eMrCA+IGlcIDsKK+eMlyA+IGlcIDsKK+eKhCA+IGlcIDsKK+eGqCA+IGlcIDsKK+eFkiA+IGlcIDsKK+a/sCA+IGlcIDsKK+a8qiA+IGlcIDsKK+a5iyA+IGlcIDsKK+a4rSA+IGlcIDsKK+a0vyA+IG9cIDsKK+a0pyA+IGlcIDsKK+axoSA+IG9cIDsKK+axmSA+IG9cIDsKK+awrCA+IGFcIDsKK+aviSA+IGlcIDsKK+atjSA+IG9cIDsKK+asuSA+IGlcIDsKK+alsiA+IGlcIDsKK+akuCA+IGlcIDsKK+akjyA+IGFcIDsKK+ahmSA+IHVcIDsKK+afgiA+IGlcIDsKK+aesSA+IGlcIDsKK+adhyA+IG9cIDsKK+adhSA+IHVcIDsKK+aakCA+IGlcIDsKK+aXliA+IGlcIDsKK+aVoSA+IGlcIDsKK+aUuiA+IGlcIDsKK+aJnCA+IHVcIDsKK+aJhiA+IGlcIDsKK+aJhSA+IGlcIDsKK+aHvyA+IGlcIDsKK+aEhyA+IGlcIDsKK+aDnyA+IGlcIDsKK+aCmCA+IGlcIDsKK+aBmiA+IGlcIDsKK+aAoSA+IGlcIDsKK+W+qyA+IGlcIDsKK+W9niA+IGlcIDsKK+W9nSA+IGlcIDsKK+W9nCA+IGlcIDsKK+W9myA+IGlcIDsKK+W9miA+IGlcIDsKK+W9mSA+IGlcIDsKK+W8rCA+IGlcIDsKK+W8mSA+IG9cIDsKK+W8giA+IGlcIDsKK+W5gyA+IGlcIDsKK+W3uCA+IGlcIDsKK+W3siA+IGlcIDsKK+W1qCA+IG9cIDsKK+W0uiA+IGlcIDsKK+W0oyA+IGlcIDsKK+WxmSA+IGFcIDsKK+WvqiA+IGlcIDsKK+WtsiA+IGFcIDsKK+WqpiA+IGlcIDsKK+WqmSA+IGlcIDsKK+WprSA+IGFcIDsKK+WpgCA+IGFcIDsKK+WovyA+IGFcIDsKK+WogyA+IGFcIDsKK+WnqCA+IGlcIDsKK+WmuCA+IGFcIDsKK+WjnSA+IGlcIDsKK+WhoiA+IG9cIDsKK+WgiiA+IGFcIDsKK+WfoSA+IG9cIDsKK+WdqCA+IGlcIDsKK+WcryA+IGlcIDsKK+WcrCA+IG9cIDsKK+WcqSA+IHVcIDsKK+WblyA+IGlcIDsKK+WZgSA+IG9cIDsKK+WWtCA+IGlcIDsKK+WWoSA+IGlcIDsKK+WVniA+IGFcIDsKK+WViiA+IGFcIDsKK+WSvyA+IGlcIDsKK+WSpiA+IGlcIDsKK+WQmiA+IGlcIDsKK+WPniA+IGlcIDsKK+WMnCA+IGlcIDsKK+WEsCA+IGlcIDsKK+WBryA+IGlcIDsKK+WBiiA+IHVcIDsKK+S+hyA+IGlcIDsKK+S8vyA+IGlcIDsKK+S6nCA+IGFcIDsKK+S6jyA+IHVcIDsKK+S6jiA+IHVcIDsKK+S6hCA+IGlcIDsKK+S5gSA+IGlcIDsKK+S4qyA+IGFcIDsKK+OAgiA8PiAnLic7CisjIEVuZCBSQVcgZGF0YSBmb3IgY29udmVydGluZyBDSksgY2hhcmFjdGVycworCisKKzo6IGthdGFrYW5hLWxhdGluICgpOworOjogaGlyYWdhbmEtbGF0aW4gKCk7Cis6OiBmdWxsd2lkdGgtaGFsZndpZHRoICgpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9IZWJyZXdfTGF0aW4udHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9IZWJyZXdfTGF0aW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNTBhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hlYnJld19MYXRpbi50eHQKQEAgLTAsMCArMSwxMDAgQEAKK++7vyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfSGVicmV3X0xhdGluLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDcvMjYgMTk6NTY6NTUgJAorIyAkUmV2aXNpb246IDEuNCAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUcmFuc2xpdGVyYXRpb24gdGFibGUgZm9yIEhlYnJldworIyBCYXNlZCBvbiB0aGUgVU5HRUdOIHRhYmxlIGF0OgorIyAgIGh0dHA6Ly93d3cuZWtpLmVlL3dncnMvcm9tMV9oZS5wZGYKKyMKKyMgRXhjZXB0aW9uczoKKyMgLSBBY2NlbnRzIGFyZSBhZGRlZCB0byBkaXNhbWJpZ3VhdGUgbGV0dGVycworIyAtIENvbWJpbmF0aW9ucyBvZiBkYWdlc2gsIHNoaW4vc2luIGRvdCB0aGF0IHByb2R1Y2UgZGlmZmVyZW50CisjICAgbGV0dGVycyBhcmUgbm90IHlldCBlbmNvZGVkLgorIworIyBUbyB0ZXN0LCBvcGVuOgorIyAgIGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jZ2ktYmluL2ljdS90cgorIyBDbGljayBFZGl0LCBwYXN0ZSBpbiB0aGlzIGZpbGUsIFNhdmUgQXMgaGVicmV3LWxhdGluL1hYWAorIyAod2hlcmUgWFhYIGlzIGEgdXNlcm5hbWUpCisjIE5vdyBnbyBiYWNrIHRvIHRoZSBtYWluIHdpbmRvdywgYW5kIHRyeSBpdCBvdXQuCisjIFVzZSBoZWJyZXctbGF0aW4vWFhYIGZvciBPdXRwdXQgMSwgYW5kIChJbnZlcnNlKSBmb3IgT3V0cHV0IDIKKyMgUGFzdGUgaW4gaGVicmV3IHRleHQgaW4gSW5wdXQsIGFuZCBoaXQgVHJhbnNsaXRlcmF0ZS4KKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSIKKyMgICBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1L3VzZXJndWlkZS9UcmFuc2xpdGVyYXRpb24uaHRtbAorCis6OiBbWzpIZWJyZXc6XSBbXHUwNUIwLVx1MDVCOVx1MDVCQi1cdTA1QkNcdTA1QzEtXHUwNUMyXHUyMTM1LVx1MjEzOMyEXHUwNUJGXV0gOworOjogbmZrZCAobmZjKSA7CiskbGV0dGVyQWZ0ZXIgPSBbOk06XSogWzpMOl0gOworCisjIG1vdmUgbG9uZ2VyIGl0ZW1zIGhlcmUgdG8gYXZvaWQgbWFza2luZworCivXlyA8PiBozLEgOwor16YgPD4gesyxIH0gJGxldHRlckFmdGVyOwor16UgPD4gesyxIDsKK9epIDw+IHPMpyA7CivXqiA8PiB0zKcgOworCivXkCA8PiDKvCA7CivXkSA8PiBiIDsKK9eSIDw+IGcgOwor15MgPD4gZCA7CivXlCA8PiBoIDsKK9eVIDw+IHcgOwor15YgPD4geiA7CivXmCA8PiB0IDsKK9eZIDw+IHkgOwor15sgPD4gayB9ICRsZXR0ZXJBZnRlcjsKK9eaIDw+IGsgOwor15wgPD4gbCA7CivXniA8PiBtIH0gJGxldHRlckFmdGVyOwor150gPD4gbSA7IAor16AgPD4gbiAgfSAkbGV0dGVyQWZ0ZXI7CivXnyA8PiBuIDsKK9ehIDw+IHMgOwor16IgPD4gyrsgOwor16QgPD4gcCB9ICRsZXR0ZXJBZnRlcjsKK9ejIDw+IHAgOwor16cgPD4gcSA7CivXqCA8PiByIDsKKworINewID4gfCAg15XXlTsgIyBIRUJSRVcgTElHQVRVUkUgWUlERElTSCBET1VCTEUgVkFWCisg17EgPiB8INeV15k7ICMgSEVCUkVXIExJR0FUVVJFIFlJRERJU0ggVkFWIFlPRAorINeyID4gfCDXmdeZIDsgIyBIRUJSRVcgTElHQVRVUkUgWUlERElTSCBET1VCTEUgWU9ECisKKwor1rwgPD4gzIcgOyAjIGRhZ2VzaCBqdXN0IGdvZXMgdG8gb3ZlcmRvdCBmb3Igbm93CivXgSA8PiDMjCA7ICMgc2hpbiBkb3QgLT4gc2gKK9eCIDw+IMyCIDsgIyBzaW4gZG90IC0+IHMKKworIyBwb2ludHMKK9ayIDw+IGHMgCA7CivWuCA8PiBhzIEgOwor1rEgPD4gZcyAIDsKK9a1IDw+IGXMgSA7CivWsCA8PiBlzIIgOwor1rQgPD4gaSA7CivWuSA8PiBvzIAgOwor1rsgPD4gdSA7CisKK9a3IDw+IGEgOwor1rYgPD4gZSA7CivWsyA8PiBvIDsKKworXHUwNUJGIDw+ICAgzIQgOworCisjIGZhbGxiYWNrcwor16cgPCBjIDsKK9ekIDwgZiB9ICRsZXR0ZXJBZnRlcjsKK9ejIDwgZiA7CivXliA8IGogOwor15UgPCB2IDsKK9eb16EgPCB4IDsKKworOjogKGxvd2VyKTsKKzo6IG5mYyAobmZkKSA7Cis6OiAoW1s6TGF0aW46XSBbXHUwMkJCLVx1MDJCQ1x1MDMwMC1cdTAzMDJcdTAzMDdcdTAzMENcdTAzMjdcdTAzMzFcdTAzNDAtXHUwMzQxICAgIMyEIF1dKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hpcmFnYW5hX0thdGFrYW5hLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSGlyYWdhbmFfS2F0YWthbmEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1MzdhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hpcmFnYW5hX0thdGFrYW5hLnR4dApAQCAtMCwwICsxLDIxMSBAQAor77u/Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9IaXJhZ2FuYV9LYXRha2FuYS50eHQsdiAkCisjICREYXRlOiAyMDAyLzAzLzAyIDAwOjI3OjI3ICQKKyMgJFJldmlzaW9uOiAxLjUgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgbm90ZTogYSBnbG9iYWwgZmlsdGVyIGlzIG1vcmUgZWZmaWNpZW50LCBidXQgTVVTVCBpbmNsdWRlIGFsbCBzb3VyY2UgY2hhcnMKKzo6IFtcdTAwMDAtXHUwMDdFIFx1MzAwMVx1MzAwMiBcdTMwOTktXHUzMDlDIFx1MzBBMS1cdTMwRkMgXHVGRjYxLVx1RkY5RuODvFs6SGlyYWdhbmE6XSBbOkthdGFrYW5hOl0gWzpub25zcGFjaW5nIG1hcms6XV0gOworOjogTkZLQyAoKTsKKworIyBIaXJhZ2FuYS1LYXRha2FuYQorCisjIFRoaXMgaXMgbGFyZ2VseSBhIG9uZS10by1vbmUgbWFwcGluZywgYnV0IGl0IGhhcyBhCisjIGZldyBraW5rczoKKworIyAxLiBUaGUgS2F0YWthbmEgdmEvdmkvdmUvdm8gKDMwRjctMzBGQSkgaGF2ZSBubworIyBIaXJhZ2FuYSBlcXVpdmFsZW50cy4gIFdlIHVzZSBIaXJhZ2FuYSB3YS93aS93ZS93bworIyAoMzA4Ri0zMDkyKSB3aXRoIGEgdm9pY2luZyBtYXJrICgzMDk5KSwgd2hpY2ggaXMKKyMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQuICBIb3dldmVyLCB0aGlzIGlzIGEgbm9uLQorIyByb3VuZHRyaXBwaW5nIHRyYW5zZm9ybWF0aW9uLgorCisjIDIuIFRoZSBLYXRha2FuYSBzbWFsbCBrYS9rZSAoMzBGNSwzMEY2KSBoYXZlIG5vCisjIEhpcmFnYW5hIGVxdWlhdmxlbnRzLiAgV2UgY29udmVydCB0aGVtIHRvIG5vcm1hbAorIyBIaXJhZ2FuYSBrYS9rZSAoMzA0QiwzMDUxKS4gIFRoaXMgaXMgYSBvbmUtd2F5CisjIGluZm9ybWF0aW9uLWxvc2luZyB0cmFuc2Zvcm1hdGlvbiBhbmQgcHJlY2x1ZGVzCisjIHJvdW5kLXRyaXBwaW5nIG9mIDMwRjUgYW5kIDMwRjYuCisKKyMgMy4gVGhlIGNvbWJpbmluZyBtYXJrcyAzMDk5LTMwOUMgYXJlIGluIHRoZSBIaXJhZ2FuYQorIyBibG9jaywgYnV0IHRoZXkgYXBwbHkgdG8gS2F0YWthbmEgYXMgd2VsbCwgc28gd2UKKyMgbGVhdmUgdGhlbSB1bnRvdWNoZWQuCisKKyMgNC4gVGhlIEthdGFrYW5hIHByb2xvbmdlZCBzb3VuZCBtYXJrIDMwRkMgZG91YmxlcyB0aGUKKyMgcHJlY2VkaW5nIHZvd2VsLiAgVGhpcyBpcyBhIG9uZS13YXkgaW5mb3JtYXRpb24tCisjIGxvc2luZyB0cmFuc2Zvcm1hdGlvbiBmcm9tIEthdGFrYW5hIHRvIEhpcmFnYW5hLgorCisjIDUuIFRoZSBLYXRha2FuYSBtaWRkbGUgZG90IHNlcGFyYXRlcyB3b3JkcyBpbiBmb3JlaWduCisjIGV4cHJlc3Npb25zOyB3ZSBsZWF2ZSB0aGlzIHVubW9kaWZpZWQuCisKKyMgVGhlIGFib3ZlIHBvaW50cyBwcmVjbHVkZSBzdWNjZXNzZnVsIHJvdW5kLXRyaXAKKyMgdHJhbnNmb3JtYXRpb25zIG9mIGFyYml0cmFyeSBpbnB1dCB0ZXh0LiAgSG93ZXZlciwKKyMgdGhleSBwcm92aWRlIG5hdHVyYWxpc3RpYyByZXN1bHRzIHRoYXQgc2hvdWxkIGNvbmZvcm0KKyMgdG8gdXNlciBleHBlY3RhdGlvbnMuCisKKworIyBDb21iaW5pbmcgZXF1aXZhbGVudHMgdmEvdmkvdmUvdm8KK+OCj+OCmSA8PiDjg7c7CivjgpDjgpkgPD4g44O4Owor44KR44KZIDw+IOODuTsKK+OCkuOCmSA8PiDjg7o7CisKKyMgT25lLXRvLW9uZSBtYXBwaW5ncywgbWFpbiBibG9jaworIyAzMDQxOjMwOTQgPD4gMzBBMTozMEY0CisjIDMwOUQsRSA8PiAzMEZELEUKK+OBgSA8PiDjgqE7CivjgYIgPD4g44KiOwor44GDIDw+IOOCozsKK+OBhCA8PiDjgqQ7CivjgYUgPD4g44KlOwor44GGIDw+IOOCpjsKK+OBhyA8PiDjgqc7CivjgYggPD4g44KoOwor44GJIDw+IOOCqTsKK+OBiiA8PiDjgqo7CivjgYsgPD4g44KrOwor44GMIDw+IOOCrDsKK+OBjSA8PiDjgq07CivjgY4gPD4g44KuOwor44GPIDw+IOOCrzsKK+OBkCA8PiDjgrA7CivjgZEgPD4g44KxOwor44GSIDw+IOOCsjsKK+OBkyA8PiDjgrM7CivjgZQgPD4g44K0Owor44GVIDw+IOOCtTsKK+OBliA8PiDjgrY7CivjgZcgPD4g44K3Owor44GYIDw+IOOCuDsKK+OBmSA8PiDjgrk7CivjgZogPD4g44K6Owor44GbIDw+IOOCuzsKK+OBnCA8PiDjgrw7CivjgZ0gPD4g44K9Owor44GeIDw+IOOCvjsKK+OBnyA8PiDjgr87CivjgaAgPD4g44OAOwor44GhIDw+IOODgTsKK+OBoiA8PiDjg4I7CivjgaMgPD4g44ODOwor44GkIDw+IOODhDsKK+OBpSA8PiDjg4U7CivjgaYgPD4g44OGOwor44GnIDw+IOODhzsKK+OBqCA8PiDjg4g7CivjgakgPD4g44OJOwor44GqIDw+IOODijsKK+OBqyA8PiDjg4s7CivjgawgPD4g44OMOwor44GtIDw+IOODjTsKK+OBriA8PiDjg447Civjga8gPD4g44OPOwor44GwIDw+IOODkDsKK+OBsSA8PiDjg5E7CivjgbIgPD4g44OSOwor44GzIDw+IOODkzsKK+OBtCA8PiDjg5Q7CivjgbUgPD4g44OVOwor44G2IDw+IOODljsKK+OBtyA8PiDjg5c7CivjgbggPD4g44OYOwor44G5IDw+IOODmTsKK+OBuiA8PiDjg5o7CivjgbsgPD4g44ObOwor44G8IDw+IOODnDsKK+OBvSA8PiDjg507Civjgb4gPD4g44OeOwor44G/IDw+IOODnzsKK+OCgCA8PiDjg6A7CivjgoEgPD4g44OhOwor44KCIDw+IOODojsKK+OCgyA8PiDjg6M7CivjgoQgPD4g44OkOwor44KFIDw+IOODpTsKK+OChiA8PiDjg6Y7CivjgocgPD4g44OnOwor44KIIDw+IOODqDsKK+OCiSA8PiDjg6k7CivjgoogPD4g44OqOwor44KLIDw+IOODqzsKK+OCjCA8PiDjg6w7Civjgo0gPD4g44OtOwor44KOIDw+IOODrjsKK+OCjyA8PiDjg687CivjgpAgPD4g44OwOwor44KRIDw+IOODsTsKK+OCkiA8PiDjg7I7CivjgpMgPD4g44OzOwor44KUIDw+IOODtDsKK+OCnSA8PiDjg707Civjgp4gPD4g44O+OworCisjIE9uZS13YXkgS2F0YWthbmEtSGlyYWdhbmEgeGZvcm0gb2Ygc21hbGwgSyBrYS9rZSB0bworIyBub3JtYWwgSCBrYS9rZS4KK+OBiyA8IOODtTsKK+OBkSA8IOODtjsKKworIyBLYXRha2FuYSBmb2xsb3dlZCBieSBhIHByb2xvbmdlZCBzb3VuZCBtYXJrIDMwRkMgaGFzCisjIGl0cyBmaW5hbCB2b3dlbCBkb3VibGVkLiAgVGhpcyBpcyBhIEthdGFrYW5hLUhpcmFnYW5hCisjIG9uZS13YXkgaW5mb3JtYXRpb24tbG9zaW5nIHRyYW5zZm9ybWF0aW9uLiAgV2UKKyMgaW5jbHVkZSB0aGUgc21hbGwgS2F0YWthbmEgKGUuZy4sIHNtYWxsIEEgMzA0MSkgYW5kCisjIGRvIG5vdCBkaXN0aW5ndWlzaCB0aGVtIGZyb20gdGhlaXIgbGFyZ2UKKyMgY291bnRlcnBhcnRzLiAgSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGRvdWJsZSBhCisjIHNtYWxsIGNvdW50ZXJwYXJ0IHZvd2VsIGFzIGEgc21hbGwgSGlyYWdhbmEgdm93ZWwsIHNvCisjIHdlIGRvbid0IGRvIHNvLiAgSW4gbmF0dXJhbCB0ZXh0IHRoaXMgc2hvdWxkIG5ldmVyCisjIG9jY3VyIGFueXdheS4gIElmIGEgMzBGQyBpcyBzZWVuIHdpdGhvdXQgYSBwcmVjZWRpbmcKKyMgdm93ZWwgc291bmQgKGUuZy4sIGFmdGVyIG4gMzBGMykgd2UgZG8gbm90IGNoYW5nZSBpdC4KKworIyMjICRsb25nID0g44O8OworCisjIFRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllcyBhcmUgSGlyYWdhbmEsIG5vdCBLYXRha2FuYQorIyBhcyBtaWdodCBiZSBleHBlY3RlZCwgc2luY2UgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoZQorIyAzMEZDLCB0aGUgcHJlY2VkaW5nIGNoYXJhY3RlciB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuCisjIHRyYW5zZm9ybWVkIHRvIEhpcmFnYW5hLgorCisjIHtUaGUgZm9sbG93aW5nIG1lY2hhbmljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUKKyMgVW5pY29kZSAzLjAgZGF0YTp9CisKKyR4YSA9IFsgXAor44GBIOOBgiDjgYsg44GMIOOBlSDjgZYgXAor44GfIOOBoCDjgaog44GvIOOBsCDjgbEgXAor44G+IOOCgyDjgoQg44KJIOOCjiDjgo8gXAorXTsKKworJHhpID0gWyBcCivjgYMg44GEIOOBjSDjgY4g44GXIOOBmCBcCivjgaEg44GiIOOBqyDjgbIg44GzIOOBtCBcCivjgb8g44KKIOOCkCBcCitdOworCiskeHUgPSBbIFwKK+OBhSDjgYYg44GPIOOBkCDjgZkg44GaIFwKK+OBoyDjgaQg44GlIOOBrCDjgbUg44G2IFwKK+OBtyDjgoAg44KFIOOChiDjgosg44KUIFwKK107CisKKyR4ZSA9IFsgXAor44GHIOOBiCDjgZEg44GSIOOBmyDjgZwgXAor44GmIOOBpyDjga0g44G4IOOBuSDjgbogXAor44KBIOOCjCDjgpEgXAorXTsKKworJHhvID0gWyBcCivjgYkg44GKIOOBkyDjgZQg44GdIOOBniBcCivjgagg44GpIOOBriDjgbsg44G8IOOBvSBcCivjgoIg44KHIOOCiCDjgo0g44KSIFwKK107CisKK+OBgiA8ICR4YSB744O8fTsKK+OBhCA8ICR4aSB744O8fTsKK+OBhiA8ICR4dSB744O8fTsKK+OBiCA8ICR4ZSB744O8fTsKK+OBiiA8ICR4byB744O8fTsKKworOjogKE5GS0MpIDsKKworIyBub3RlOiBhIGdsb2JhbCBmaWx0ZXIgaXMgbW9yZSBlZmZpY2llbnQsIGJ1dCBNVVNUIGluY2x1ZGUgYWxsIHNvdXJjZSBjaGFycyEhCis6OiAoW1x1MDAwMC1cdTAwN0UgXHUzMDAxXHUzMDAyIFx1MzA5OS1cdTMwOUMgXHUzMEExLVx1MzBGQyBcdUZGNjEtXHVGRjlG44O8WzpIaXJhZ2FuYTpdIFs6S2F0YWthbmE6XSBbOm5vbnNwYWNpbmcgbWFyazpdXSk7CisKKyMgZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hpcmFnYW5hX0xhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSGlyYWdhbmFfTGF0aW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyODM4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0hpcmFnYW5hX0xhdGluLnR4dApAQCAtMCwwICsxLDE4IEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0hpcmFnYW5hX0xhdGluLnR4dCx2ICQKKyMgJERhdGU6IDIwMDEvMTEvMzAgMjI6MjE6MTUgJAorIyAkUmV2aXNpb246IDEuNiAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOjogW1x1MzA0MS1cdTMwOTRcdTMwOTlcdTMwOUQtXHUzMDlFXHUzMEFDXHUzMEFFXHUzMEIwXHUzMEIyXHUzMEI0XHUzMEI2XHUzMEI4XHUzMEJBXHUzMEJDXHUzMEJFXHUzMEMwXHUzMEMyXHUzMEM1XHUzMEM3XHUzMEM5XHUzMEQwXHUzMEQzXHUzMEQ2XHUzMEQ5XHUzMERDXHUzMEY0XHUzMEY3LVx1MzBGQVx1MzBGRV0gOworOjogTkZEIDsKKworOjogSGlyYWdhbmEtS2F0YWthbmE7Cis6OiBLYXRha2FuYS1MYXRpbjsKKworOjogTkZDIDsKKzo6IChMb3dlcikgOworOjogKFsnLC5BLVphLXp+XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMTBGXHUwMTEyLVx1MDEyNVx1MDEyOC1cdTAxMzBcdTAxMzQtXHUwMTM3XHUwMTM5LVx1MDEzRVx1MDE0My1cdTAxNDhcdTAxNEMtXHUwMTUxXHUwMTU0LVx1MDE2NVx1MDE2OC1cdTAxN0VcdTAxQTAtXHUwMUExXHUwMUFGLVx1MDFCMFx1MDFDRC1cdTAxRENcdTAxREUtXHUwMUUzXHUwMUU2LVx1MDFFRFx1MDFGMFx1MDFGNC1cdTAxRjVcdTAxRjgtXHUwMjFCXHUwMjFFLVx1MDIxRlx1MDIyNi1cdTAyMzNcdTAzMDRcdTA0RTItXHUwNEUzXHUwNEVFLVx1MDRFRlx1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUxRkIxXHUxRkI5XHUxRkQxXHUxRkQ5XHUxRkUxXHUxRkU5XHUyMTJBLVx1MjEyQl0pIDsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19CZW5nYWxpLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19CZW5nYWxpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDUyOTBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0JlbmdhbGkudHh0CkBAIC0wLDAgKzEsMTUwIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfQmVuZ2FsaS50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIzICQKKyMgJFJldmlzaW9uOiAxLjEwICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEludGVySW5kaWMtQmVuZ2FsaQorIzo6IE5GRCAoTkZDKSA7CitcdUUwMDE+XHUwOTgxOyAgICAgICAgICAjIFNJR04gQ0FORFJBQklORFUKK1x1RTAwMj5cdTA5ODI7ICAgICAgICAgICMgU0lHTiBBTlVTVkFSQQorXHVFMDAzPlx1MDk4MzsgICAgICAgICAgIyBTSUdOIFZJU0FSR0EKK1x1RTAwNT5cdTA5ODU7ICAgICAgICAgICMgTEVUVEVSIEEKK1x1RTAwNj5cdTA5ODY7ICAgICAgICAgICMgTEVUVEVSIEFBCitcdUUwMDc+XHUwOTg3OyAgICAgICAgICAjIExFVFRFUiBJCitcdUUwMDg+XHUwOTg4OyAgICAgICAgICAjIExFVFRFUiBJSQorXHVFMDA5Plx1MDk4OTsgICAgICAgICAgIyBMRVRURVIgVQorXHVFMDBBPlx1MDk4QTsgICAgICAgICAgIyBMRVRURVIgVVUKK1x1RTAwQj5cdTA5OEI7ICAgICAgICAgICMgTEVUVEVSIFZPQ0FMSUMgUgorXHVFMDBDPlx1MDk4QzsgICAgICAgICAgIyBMRVRURVIgVk9DQUxJQyBMCitcdUUwMEQ+XHUwOThGOyAgICAgICAgICAjIEZBTExCQUNLCitcdUUwMEU+XHUwOThGOyAgICAgICAgICAjIEZBTExCQUNLCitcdUUwMEY+XHUwOThGOyAgICAgICAgICAjIExFVFRFUiBFCitcdUUwMTA+XHUwOTkwOyAgICAgICAgICAjIExFVFRFUiBBSQorXHVFMDExPlx1MDk5MzsgICAgICAgICAgIyBGQUxMQkFDSworXHVFMDEyPlx1MDk5MzsgICAgICAgICAgIyBGQUxMQkFDSworXHVFMDEzPlx1MDk5MzsgICAgICAgICAgIyBMRVRURVIgTworXHVFMDE0Plx1MDk5NDsgICAgICAgICAgIyBMRVRURVIgQVUKK1x1RTAxNT5cdTA5OTU7ICAgICAgICAgICMgTEVUVEVSIEtBCitcdUUwMTY+XHUwOTk2OyAgICAgICAgICAjIExFVFRFUiBLSEEKK1x1RTAxNz5cdTA5OTc7ICAgICAgICAgICMgTEVUVEVSIEdBCitcdUUwMTg+XHUwOTk4OyAgICAgICAgICAjIExFVFRFUiBHSEEKK1x1RTAxOT5cdTA5OTk7ICAgICAgICAgICMgTEVUVEVSIE5HQQorXHVFMDFBPlx1MDk5QTsgICAgICAgICAgIyBMRVRURVIgQ0EKK1x1RTAxQj5cdTA5OUI7ICAgICAgICAgICMgTEVUVEVSIENIQQorXHVFMDFDPlx1MDk5QzsgICAgICAgICAgIyBMRVRURVIgSkEKK1x1RTAxRD5cdTA5OUQ7ICAgICAgICAgICMgTEVUVEVSIEpIQQorXHVFMDFFPlx1MDk5RTsgICAgICAgICAgIyBMRVRURVIgTllBCitcdUUwMUY+XHUwOTlGOyAgICAgICAgICAjIExFVFRFUiBUVEEKK1x1RTAyMD5cdTA5QTA7ICAgICAgICAgICMgTEVUVEVSIFRUSEEKK1x1RTAyMT5cdTA5QTE7ICAgICAgICAgICMgTEVUVEVSIEREQQorXHVFMDIyPlx1MDlBMjsgICAgICAgICAgIyBMRVRURVIgRERIQQorXHVFMDIzPlx1MDlBMzsgICAgICAgICAgIyBMRVRURVIgTk5BCitcdUUwMjQ+XHUwOUE0OyAgICAgICAgICAjIExFVFRFUiBUQQorXHVFMDI1Plx1MDlBNTsgICAgICAgICAgIyBMRVRURVIgVEhBCitcdUUwMjY+XHUwOUE2OyAgICAgICAgICAjIExFVFRFUiBEQQorXHVFMDI3Plx1MDlBNzsgICAgICAgICAgIyBMRVRURVIgREhBCitcdUUwMjg+XHUwOUE4OyAgICAgICAgICAjIExFVFRFUiBOQQorXHVFMDI5Plx1MDlBOFx1MDlCQzsgICAgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MDlhOT5cdTA5YTggPSBMRVRURVIgTk5OQT5MRVRURVIgTkEKK1x1RTAyQT5cdTA5QUE7ICAgICAgICAgICMgTEVUVEVSIFBBCitcdUUwMkI+XHUwOUFCOyAgICAgICAgICAjIExFVFRFUiBQSEEKK1x1RTAyQz5cdTA5QUM7ICAgICAgICAgICMgTEVUVEVSIEJBCitcdUUwMkQ+XHUwOUFEOyAgICAgICAgICAjIExFVFRFUiBCSEEKK1x1RTAyRT5cdTA5QUU7ICAgICAgICAgICMgTEVUVEVSIE1BCitcdUUwMkY+XHUwOUFGOyAgICAgICAgICAjIExFVFRFUiBZQQorXHVFMDMwPlx1MDlCMDsgICAgICAgICAgIyBMRVRURVIgUkEKK1x1RTAzMT5cdTA5QjBcdTA5QkM7ICAgICMgRkFMTEJBQ0sgdG8gUkEKK1x1RTAzMj5cdTA5QjI7ICAgICAgICAgICMgTEVUVEVSIExBCitcdUUwMzM+XHUwOUIyOyAgICAgICAgICAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwOWIzPlx1MDliMiA9IExFVFRFUiBMTEE+TEVUVEVSIExBCitcdUUwMzQ+XHUwOUIyOyAgICAgICAgICAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwOWI0Plx1MDliMiA9IExFVFRFUiBMTExBPkxFVFRFUiBMQQorXHVFMDM1Plx1MDlBQzsgICAgICAgICAgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MDliNT5cdTA5YWMgPSBMRVRURVIgVkE+TEVUVEVSIEJBCitcdUUwMzY+XHUwOUI2OyAgICAgICAgICAjIExFVFRFUiBTSEEKK1x1RTAzNz5cdTA5Qjc7ICAgICAgICAgICMgTEVUVEVSIFNTQQorXHVFMDM4Plx1MDlCODsgICAgICAgICAgIyBMRVRURVIgU0EKK1x1RTAzOT5cdTA5Qjk7ICAgICAgICAgICMgTEVUVEVSIEhBCitcdUUwM0M+XHUwOUJDOyAgICAgICAgICAjIFNJR04gTlVLVEEKK1x1RTAzRD47ICAgICAgICAgICAgICAgICMgRkFMTEJBQ0sgQkxPVyBBV0FZIEFWQUdSQUhBCitcdUUwM0U+XHUwOUJFOyAgICAgICAgICAjIFZPV0VMIFNJR04gQUEKK1x1RTAzRj5cdTA5QkY7ICAgICAgICAgICMgVk9XRUwgU0lHTiBJCitcdUUwNDA+XHUwOUMwOyAgICAgICAgICAjIFZPV0VMIFNJR04gSUkKK1x1RTA0MT5cdTA5QzE7ICAgICAgICAgICMgVk9XRUwgU0lHTiBVCitcdUUwNDI+XHUwOUMyOyAgICAgICAgICAjIFZPV0VMIFNJR04gVVUKK1x1RTA0Mz5cdTA5QzM7ICAgICAgICAgICMgVk9XRUwgU0lHTiBWT0NBTElDIFIKK1x1RTA0ND5cdTA5QzQ7ICAgICAgICAgICMgVk9XRUwgU0lHTiBWT0NBTElDIFJSCitcdUUwNDU+XHUwOUM3OyAgICAgICAgICAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwOWM1Plx1MDljNyA9IFZPV0VMIFNJR04gQ0FORFJBIEU+Vk9XRUwgU0lHTiBFCitcdUUwNDY+XHUwOUM3OyAgICAgICAgICAjIEZBTExCQUNLCitcdUUwNDc+XHUwOUM3OyAgICAgICAgICAjIFZPV0VMIFNJR04gRQorXHVFMDQ4Plx1MDlDODsgICAgICAgICAgIyBWT1dFTCBTSUdOIEFJCitcdUUwNDk+XHUwOUM3XHUwOUJFOyAgICAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwOWM5Plx1MDljYiA9IFZPV0VMIFNJR04gQ0FORFJBIE8+Vk9XRUwgU0lHTiBPCitcdUUwNEE+XHUwOUM3XHUwOUJFOyAgICAjIEZBTExCQUNLCitcdUUwNEI+XHUwOUM3XHUwOUJFOyAgICAjIFZPV0VMIFNJR04gTworXHVFMDRDPlx1MDlDN1x1MDlENzsgICAgIyBWT1dFTCBTSUdOIEFVCitcdUUwNEQ+XHUwOUNEOyAgICAgICAgICAjIFNJR04gVklSQU1BCitcdUUwNTA+XHUwOTkzXHUwOTgyOyAgICAjICBJbnRlckluZGljLUJlbmdhbGk6IE9NCitcdWUwNTE+OworXHVlMDUyPjsKK1x1ZTA1Mz47CitcdWUwNTQ+OworXHVFMDU1PjsgICAgICAgICAgICAgICAgIyBMRU5HVEggTUFSSworXHVFMDU2Plx1MDlDODsgICAgICAgICAgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MDlkNj5cdTA5YzggPSBBSSBMRU5HVEggTUFSSz5WT1dFTCBTSUdOIEFJCitcdUUwNTc+XHUwOUQ3OyAgICAgICAgICAjIEFVIExFTkdUSCBNQVJLCitcdUUwNTg+XHUwOTk1XHUwOUJDOyAgICAjIEZBTExCQUNLCitcdUUwNTk+XHUwOTk2XHUwOUJDOyAgICAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwOWQ5Plx1MDk5NiA9IExFVFRFUiBLSEhBPkxFVFRFUiBLSEEKK1x1RTA1QT5cdTA5OTdcdTA5QkM7ICAgICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTA5ZGE+XHUwOTk3ID0gTEVUVEVSIEdISEE+TEVUVEVSIEdBCitcdUUwNUI+XHUwOTlDXHUwOUJDOyAgICAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwOWRiPlx1MDk5YyA9IExFVFRFUiBaQT5MRVRURVIgSkEKK1x1RTA1Qz5cdTA5QTFcdTA5QkM7ICAgICMgRkFMTEJBQ0sKK1x1RTA1RD5cdTA5QTJcdTA5QkM7ICAgICMgTEVUVEVSIFJIQQorXHVFMDVFPlx1MDlBQlx1MDlCQzsgICAgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MDlkZT5cdTA5YWIgPSBMRVRURVIgRkE+TEVUVEVSIFBIQQorXHVFMDVGPlx1MDlBRlx1MDlCQzsgICAgIyBMRVRURVIgWVlBCitcdUUwNjA+XHUwOUUwOyAgICAgICAgICAjIExFVFRFUiBWT0NBTElDIFJSCitcdUUwNjE+XHUwOUUxOyAgICAgICAgICAjIExFVFRFUiBWT0NBTElDIExMCitcdUUwNjI+XHUwOUUyOyAgICAgICAgICAjIFZPV0VMIFNJR04gVk9DQUxJQyBMCitcdUUwNjM+XHUwOUUzOyAgICAgICAgICAjIFZPV0VMIFNJR04gVk9DQUxJQyBMTAorXHVFMDY0Plx1MDk2NDsgICAgICAgICAgIyBEQU5EQQorXHVFMDY1Plx1MDk2NTsgICAgICAgICAgIyBET1VCTEUgREFOREEKK1x1RTA2Nj5cdTA5RTY7ICAgICAgICAgICMgRElHSVQgWkVSTworXHVFMDY3Plx1MDlFNzsgICAgICAgICAgIyBESUdJVCBPTkUKK1x1RTA2OD5cdTA5RTg7ICAgICAgICAgICMgRElHSVQgVFdPCitcdUUwNjk+XHUwOUU5OyAgICAgICAgICAjIERJR0lUIFRIUkVFCitcdUUwNkE+XHUwOUVBOyAgICAgICAgICAjIERJR0lUIEZPVVIKK1x1RTA2Qj5cdTA5RUI7ICAgICAgICAgICMgRElHSVQgRklWRQorXHVFMDZDPlx1MDlFQzsgICAgICAgICAgIyBESUdJVCBTSVgKK1x1RTA2RD5cdTA5RUQ7ICAgICAgICAgICMgRElHSVQgU0VWRU4KK1x1RTA2RT5cdTA5RUU7ICAgICAgICAgICMgRElHSVQgRUlHSFQKK1x1RTA2Rj5cdTA5RUY7ICAgICAgICAgICMgRElHSVQgTklORQorXHVlMDcwPjsgICAgICAgICAgICAgICAgIyBBQkJSRVZJQVRJT04gU0lHTgorXHVlMDcxPlx1MDlGMDsgICAgICAgICAgIyBMRVRURVIgUkEgV0lUSCBNSURETEUgRElBR09OQUwKK1x1ZTA3Mj5cdTA5RjE7ICAgICAgICAgICMgTEVUVEVSIFJBIFdJVEggTE9XRVIgRElBR09OQUwKK1x1ZTA3Mz5cdTA5RjI7ICAgICAgICAgICMgUlVQRUUgTUFSSworXHVlMDc0Plx1MDlGMzsgICAgICAgICAgIyBSVVBFRSBTSUdOCitcdWUwNzU+XHUwOUY0OyAgICAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUKK1x1ZTA3Nj5cdTA5RjU7ICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRXTworXHVlMDc3Plx1MDlGNjsgICAgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgVEhSRUUKK1x1ZTA3OD5cdTA5Rjc7ICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIEZPVVIKK1x1ZTA3OT5cdTA5Rjg7ICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIE9ORSBMRVNTIFRIQU4gVEhFIERFTk9NSU5BVE9SCitcdWUwN0E+XHUwOUY5OyAgICAgICAgICAjIENVUlJFTkNZIERFTk9NSU5BVE9SIFNJWFRFRU4KK1x1ZTA3Qj5cdTA5RkE7ICAgICAgICAgICMgSVNTSEFSCitcdUUwN0M+OyAgICAgICAgICAgICAgICAjIFRJUFBJCitcdUUwN0Q+OyAgICAgICAgICAgICAgICAjIEFEREFLCitcdUUwN0U+OyAgICAgICAgICAgICAgICAjIElSSQorXHVFMDdGPjsgICAgICAgICAgICAgICAgIyBVUkEKK1x1RTA4MD47ICAgICAgICAgICAgICAgICMgRUsgT05LQVIKKworMCA+IFx1MDlFNjsgICAgICAgIyBGQUxMQkFDSyBGT1IgVEFNSUwKKzEgPiBcdTA5RTc7CisKKworCisKKworCisKKworCisKKworIyAgICA6OiBORkMgKE5GRCkgOworIyBlb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19EZXZhbmFnYXJpLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19EZXZhbmFnYXJpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNzViNTliCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0RldmFuYWdhcmkudHh0CkBAIC0wLDAgKzEsMTYxIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfRGV2YW5hZ2FyaS50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIzICQKKyMgJFJldmlzaW9uOiAxLjkgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSW50ZXJJbmRpYy1EZXZhbmFnYXJpCisjOjogTkZEIChORkMpIDsgCisjUnVsZXMgZm9yIERlY29tcG9zZWQgY2hhcmFjdGVycworIFx1ZTAyOFx1ZTAzYyA+IFx1MDkyOTsgICNcdWUwMjkKKyBcdWUwMzBcdWUwM2MgPiBcdTA5MzE7ICAjXHVlMDMxCisgXHVlMDMzXHVlMDNjID4gXHUwOTM0OyAgI1x1ZTAzNAorIFx1ZTAxNVx1ZTAzYyA+IFx1MDk1ODsgICNcdWUwNTggTEVUVEVSIFFBICAgKEZvciBVcmR1KQorIFx1ZTAxNlx1ZTAzYyA+IFx1MDk1OTsgICNcdWUwNTkgTEVUVEVSIEtISEEgKEZvciBVcmR1KQorIFx1ZTAxN1x1ZTAzYyA+IFx1MDk1YTsgICNcdWUwNWEgTEVUVEVSIEdISEEgKEZvciBVcmR1KQorIFx1ZTAxY1x1ZTAzYyA+IFx1MDk1YjsgICNcdWUwNWIgTEVUVEVSIFpBICAgKEZvciBVcmR1KQorIFx1ZTAyMVx1ZTAzYyA+IFx1MDk1YzsgICNcdWUwNWMgTEVUVEVSIEREREhBIChwcm9ub3VuY2VkIFJSQSkKKyBcdWUwMjJcdWUwM2MgPiBcdTA5NWQ7ICAjXHVlMDVkIExFVFRFUiBSSEEgICAocHJvbm91bmNlZCBSUkhBKQorIFx1ZTAyYlx1ZTAzYyA+IFx1MDk1ZTsgICNcdWUwNWUgTEVUVEVSIEZBCisgXHVlMDJmXHVlMDNjID4gXHUwOTVmOyAgI1x1ZTA1ZiBMRVRURVIgWVlBCisgCisgI0RlY29tcG9zZWQgY29tcGF0aWJpbGl0eSB0cmFuc2xpdGVyYXRpb25zCisgXHVlMDEyXHVlMDU3Plx1MDkxNDsgICAjIEZBTExCQUNLIEZPUiBUQU1JTCBBVQorIDAgPiBcdTA5NjY7ICAgICAgICMgRkFMTEJBQ0sgRk9SIFRBTUlMCisgMSA+IFx1MDk2NzsKKworIFx1ZTA1NT47ICMgRkFMTEJBQ0sgQkxPVyBBV0FZIEtBTk5BREEgQU5EIFRFTFVHVSBMRU5HVEggTUFSSworIFx1ZTA1Nj47ICMgRkFMTEJBQ0sgQkxPVyBBV0FZIEtBTk5BREEgQU5EIFRFTFVHVSBBSSBMRU5HVEggTUFSSworIFx1ZTA1Nz47ICMgRkFMTEJBQ0sgQkxPVyBBV0FZIFRBTUlMIEFVIExFTkdUSCBNQVJLCisKKyBcdWUwMDEgPiAgXHUwOTAxOyAgIyBTSUdOIENBTkRSQUJJTkRVCisgXHVlMDAyID4gIFx1MDkwMjsgICMgU0lHTiBBTlVTVkFSQQorIFx1ZTAwMyA+ICBcdTA5MDM7ICAjIFNJR04gVklTQVJHQQorIFx1ZTAwNSA+ICBcdTA5MDU7ICAjIExFVFRFUiBBCisgXHVlMDA2ID4gIFx1MDkwNjsgICMgTEVUVEVSIEFBCisgXHVlMDA3ID4gIFx1MDkwNzsgICMgTEVUVEVSIEkKKyBcdWUwMDggPiAgXHUwOTA4OyAgIyBMRVRURVIgSUkKKyBcdWUwMDkgPiAgXHUwOTA5OyAgIyBMRVRURVIgVQorIFx1ZTAwYSA+ICBcdTA5MGE7ICAjIExFVFRFUiBVVQorIFx1ZTAwYiA+ICBcdTA5MGI7ICAjIExFVFRFUiBWT0NBTElDIFIKKyBcdWUwMGMgPiAgXHUwOTBjOyAgIyBMRVRURVIgVk9DQUxJQyBMCisgXHVlMDBkID4gIFx1MDkwZDsgICMgTEVUVEVSIENBTkRSQSBFIChGb3IgcmVwcmVzZW50aW5nIEVuZ2xpc2ggc291bmRzKQorIFx1ZTAwZSA+ICBcdTA5MGU7ICAjIExFVFRFUiBTSE9SVCBFKEZvciBTb3V0aGVybiBTY3JpcHRzKQorIFx1ZTAwZiA+ICBcdTA5MGY7ICAjIExFVFRFUiBFCisgXHVlMDEwID4gIFx1MDkxMDsgICMgTEVUVEVSIEFJCisgXHVlMDExID4gIFx1MDkxMTsgICMgTEVUVEVSIENBTkRSQSBPIChGb3IgcmVwcmVzZW50aW5nIEVuZ2xpc2ggc291bmRzKQorIFx1ZTAxMiA+ICBcdTA5MTI7ICAjIExFVFRFUiBTSE9SVCBPIChGb3IgU291dGhlcm4gU2NyaXB0cykKKyBcdWUwMTMgPiAgXHUwOTEzOyAgIyBMRVRURVIgTworIFx1ZTAxNCA+ICBcdTA5MTQ7ICAjIExFVFRFUiBBVQorIFx1ZTAxNSA+ICBcdTA5MTU7ICAjIExFVFRFUiBLQQorIFx1ZTAxNiA+ICBcdTA5MTY7ICAjIExFVFRFUiBLSEEKKyBcdWUwMTcgPiAgXHUwOTE3OyAgIyBMRVRURVIgR0EKKyBcdWUwMTggPiAgXHUwOTE4OyAgIyBMRVRURVIgR0hBCisgXHVlMDE5ID4gIFx1MDkxOTsgICMgTEVUVEVSIE5HQQorIFx1ZTAxYSA+ICBcdTA5MWE7ICAjIExFVFRFUiBDQQorIFx1ZTAxYiA+ICBcdTA5MWI7ICAjIExFVFRFUiBDSEEKKyBcdWUwMWMgPiAgXHUwOTFjOyAgIyBMRVRURVIgSkEKKyBcdWUwMWQgPiAgXHUwOTFkOyAgIyBMRVRURVIgSkhBCisgXHVlMDFlID4gIFx1MDkxZTsgICMgTEVUVEVSIE5ZQQorIFx1ZTAxZiA+ICBcdTA5MWY7ICAjIExFVFRFUiBUVEEKKyBcdWUwMjAgPiAgXHUwOTIwOyAgIyBMRVRURVIgVFRIQQorIFx1ZTAyMSA+ICBcdTA5MjE7ICAjIExFVFRFUiBEREEKKyBcdWUwMjIgPiAgXHUwOTIyOyAgIyBMRVRURVIgRERIQQorIFx1ZTAyMyA+ICBcdTA5MjM7ICAjIExFVFRFUiBOTkEKKyBcdWUwMjQgPiAgXHUwOTI0OyAgIyBMRVRURVIgVEEKKyBcdWUwMjUgPiAgXHUwOTI1OyAgIyBMRVRURVIgVEhBCisgXHVlMDI2ID4gIFx1MDkyNjsgICMgTEVUVEVSIERBCisgXHVlMDI3ID4gIFx1MDkyNzsgICMgTEVUVEVSIERIQQorIFx1ZTAyOCA+ICBcdTA5Mjg7ICAjIExFVFRFUiBOQQorIFx1ZTAyOSA+ICBcdTA5Mjk7ICAjIExFVFRFUiBOTk5BCisgXHVlMDJhID4gIFx1MDkyYTsgICMgTEVUVEVSIFBBCisgXHVlMDJiID4gIFx1MDkyYjsgICMgTEVUVEVSIFBIQQorIFx1ZTAyYyA+ICBcdTA5MmM7ICAjIExFVFRFUiBCQQorIFx1ZTAyZCA+ICBcdTA5MmQ7ICAjIExFVFRFUiBCSEEKKyBcdWUwMmUgPiAgXHUwOTJlOyAgIyBMRVRURVIgTUEKKyBcdWUwMmYgPiAgXHUwOTJmOyAgIyBMRVRURVIgWUEKKyBcdWUwMzAgPiAgXHUwOTMwOyAgIyBMRVRURVIgUkEKKyBcdWUwMzEgPiAgXHUwOTMxOyAgIyBMRVRURVIgUlJBIChFeWVsYXNoIFJBIGZvciBTb3V0aGVybiBzY3JpcHRzKQorICNcdWUwMzEgPiAgXHUwOTMwOyAgCisgXHVlMDMyID4gIFx1MDkzMjsgICMgTEVUVEVSIExBCisgXHVlMDMzID4gIFx1MDkzMzsgICMgTEVUVEVSIExMQQorIFx1ZTAzNCA+ICBcdTA5MzQ7ICAjIExFVFRFUiBMTExBIChMTExBIGZvciBTb3V0aGVybiBzY3JpcHRzKQorICNcdWUwMzQgPiAgXHUwOTMzOyAgCisgXHVlMDM1ID4gIFx1MDkzNTsgICMgTEVUVEVSIFZBCisgXHVlMDM2ID4gIFx1MDkzNjsgICMgTEVUVEVSIFNIQQorIFx1ZTAzNyA+ICBcdTA5Mzc7ICAjIExFVFRFUiBTU0EKKyBcdWUwMzggPiAgXHUwOTM4OyAgIyBMRVRURVIgU0EKKyBcdWUwMzkgPiAgXHUwOTM5OyAgIyBMRVRURVIgSEEKKyBcdWUwM2MgPiAgXHUwOTNjOyAgIyBTSUdOIE5VS1RBCisgXHVlMDNkID4gIFx1MDkzZDsgICMgU0lHTiBBVkFHUkFIQQorIFx1ZTAzZSA+ICBcdTA5M2U7ICAjIFZPV0VMIFNJR04gQUEKKyBcdWUwM2YgPiAgXHUwOTNmOyAgIyBWT1dFTCBTSUdOIEkKKyBcdWUwNDAgPiAgXHUwOTQwOyAgIyBWT1dFTCBTSUdOIElJCisgXHVlMDQxID4gIFx1MDk0MTsgICMgVk9XRUwgU0lHTiBVCisgXHVlMDQyID4gIFx1MDk0MjsgICMgVk9XRUwgU0lHTiBVVQorIFx1ZTA0MyA+ICBcdTA5NDM7ICAjIFZPV0VMIFNJR04gVk9DQUxJQyBSCisgXHVlMDQ0ID4gIFx1MDk0NDsgICMgVk9XRUwgU0lHTiBWT0NBTElDIFJSCisgXHVlMDQ1ID4gIFx1MDk0NTsgICMgVk9XRUwgU0lHTiBDQU5EUkEgRQorIFx1ZTA0NiA+ICBcdTA5NDY7ICAjIFZPV0VMIFNJR04gU0hPUlQgRQorIFx1ZTA0NyA+ICBcdTA5NDc7ICAjIFZPV0VMIFNJR04gRQorIFx1ZTA0OCA+ICBcdTA5NDg7ICAjIFZPV0VMIFNJR04gQUkKKyBcdWUwNDkgPiAgXHUwOTQ5OyAgIyBWT1dFTCBTSUdOIENBTkRSQSBPCisgXHVlMDRhID4gIFx1MDk0YTsgICMgVk9XRUwgU0lHTiBTSE9SVCBPCisgXHVlMDRiID4gIFx1MDk0YjsgICMgVk9XRUwgU0lHTiBPCisgXHVlMDRjID4gIFx1MDk0YzsgICMgVk9XRUwgU0lHTiBBVQorIFx1ZTA0ZCA+ICBcdTA5NGQ7ICAjIFNJR04gVklSQU1BCisgXHVlMDUwID4gIFx1MDk1MDsgICMgT00KKyBcdWUwNTEgPiAgXHUwOTUxOyAgIyBTVFJFU1MgU0lHTiBVREFUVEEKKyBcdWUwNTIgPiAgXHUwOTUyOyAgIyBTVFJFU1MgU0lHTiBBTlVEQVRUQQorIFx1ZTA1MyA+ICBcdTA5NTM7ICAjIEdSQVZFIEFDQ0VOVAorIFx1ZTA1NCA+ICBcdTA5NTQ7ICAjIEFDVVRFIEFDQ0VOVAorIFx1ZTA1OCA+ICBcdTA5NTg7ICAjIExFVFRFUiBRQSAgIChGb3IgVXJkdSkKKyBcdWUwNTkgPiAgXHUwOTU5OyAgIyBMRVRURVIgS0hIQSAoRm9yIFVyZHUpCisgXHVlMDVhID4gIFx1MDk1YTsgICMgTEVUVEVSIEdISEEgKEZvciBVcmR1KQorIFx1ZTA1YiA+ICBcdTA5NWI7ICAjIExFVFRFUiBaQSAgIChGb3IgVXJkdSkKKyBcdWUwNWMgPiAgXHUwOTVjOyAgIyBMRVRURVIgRERESEEgKHByb25vdW5jZWQgUlJBKQorIFx1ZTA1ZCA+ICBcdTA5NWQ7ICAjIExFVFRFUiBSSEEgICAocHJvbm91bmNlZCBSUkhBKQorIFx1ZTA1ZSA+ICBcdTA5NWU7ICAjIExFVFRFUiBGQQorIFx1ZTA1ZiA+ICBcdTA5NWY7ICAjIExFVFRFUiBZWUEKKyBcdWUwNjAgPiAgXHUwOTYwOyAgIyBMRVRURVIgVk9DQUxJQyBSUgorIFx1ZTA2MSA+ICBcdTA5NjE7ICAjIExFVFRFUiBWT0NBTElDIExMCisgXHVlMDYyID4gIFx1MDk2MjsgICMgVk9XRUwgU0lHTiBWT0NBTElDIEwKKyBcdWUwNjMgPiAgXHUwOTYzOyAgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgTEwKKyBcdWUwNjQgPiAgXHUwOTY0OyAgIyBEQU5EQQorIFx1ZTA2NSA+ICBcdTA5NjU7ICAjIERPVUJMRSBEQU5EQQorIFx1ZTA2NiA+ICBcdTA5NjY7ICAjIERJR0lUIFpFUk8KKyBcdWUwNjcgPiAgXHUwOTY3OyAgIyBESUdJVCBPTkUKKyBcdWUwNjggPiAgXHUwOTY4OyAgIyBESUdJVCBUV08KKyBcdWUwNjkgPiAgXHUwOTY5OyAgIyBESUdJVCBUSFJFRQorIFx1ZTA2YSA+ICBcdTA5NmE7ICAjIERJR0lUIEZPVVIKKyBcdWUwNmIgPiAgXHUwOTZiOyAgIyBESUdJVCBGSVZFCisgXHVlMDZjID4gIFx1MDk2YzsgICMgRElHSVQgU0lYCisgXHVlMDZkID4gIFx1MDk2ZDsgICMgRElHSVQgU0VWRU4KKyBcdWUwNmUgPiAgXHUwOTZlOyAgIyBESUdJVCBFSUdIVAorIFx1ZTA2ZiA+ICBcdTA5NmY7ICAjIERJR0lUIE5JTkUKKworIFx1ZTA3MD5cdTA5NzA7ICAgICAjIEFCQlJFVklBVElPTiBTSUdOCisgXHVlMDcxPlx1MDkzMDsgICAgICMgTEVUVEVSIFJBIFdJVEggTUlERExFIERJQUdPTkFMCisgXHVlMDcyPlx1MDkzMDsgICAgICMgTEVUVEVSIFJBIFdJVEggTE9XRVIgRElBR09OQUwKKyBcdWUwNzM+OyAgICAgICAgICAgIyBSVVBFRSBNQVJLCisgXHVlMDc0PjsgICAgICAgICAgICMgUlVQRUUgU0lHTgorIFx1ZTA3NT47ICAgICAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUKKyBcdWUwNzY+OyAgICAgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgVFdPCisgXHVlMDc3PjsgICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRIUkVFCisgXHVlMDc4PjsgICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIEZPVVIKKyBcdWUwNzk+OyAgICAgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgT05FIExFU1MgVEhBTiBUSEUgREVOT01JTkFUT1IKKyBcdWUwN0E+OyAgICAgICAgICAgIyBDVVJSRU5DWSBERU5PTUlOQVRPUiBTSVhURUVOCisgXHVlMDdCPjsgICAgICAgICAgICMgSVNTSEFSCisgXHVFMDdDPjsgICAgICAgICAgICMgVElQUEkKKyBcdUUwN0Q+OyAgICAgICAgICAgIyBBRERBSworIFx1RTA3RT47ICAgICAgICAgICAjIElSSQorIFx1RTA3Rj47ICAgICAgICAgICAjIFVSQQorIFx1RTA4MD47ICAgICAgICAgICAjIEVLIE9OS0FSCisKKyAKKyMgICAgICAgICBcdTA5NzAgICMgVU5NQVBQRUQgRGV2YW5hZ2FyaS1JbnRlckluZGljOiBBQkJSRVZJQVRJT04gU0lHTgorIyAgICA6OiBORkM7CisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0d1amFyYXRpLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19HdWphcmF0aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQyYWM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19HdWphcmF0aS50eHQKQEAgLTAsMCArMSwxNDAgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19HdWphcmF0aS50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIzICQKKyMgJFJldmlzaW9uOiAxLjEwICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEludGVySW5kaWMtR3VqYXJhdGkKKyM6OiBORkQgKE5GQykgOworXHVlMDAxPlx1MGE4MTsgIyBTSUdOIENBTkRSQUJJTkRVCitcdWUwMDI+XHUwYTgyOyAjIFNJR04gQU5VU1ZBUkEKK1x1ZTAwMz5cdTBhODM7ICMgU0lHTiBWSVNBUkdBCitcdWUwMDU+XHUwYTg1OyAjIExFVFRFUiBBCitcdWUwMDY+XHUwYTg2OyAjIExFVFRFUiBBQQorXHVlMDA3Plx1MGE4NzsgIyBMRVRURVIgSQorXHVlMDA4Plx1MGE4ODsgIyBMRVRURVIgSUkKK1x1ZTAwOT5cdTBhODk7ICMgTEVUVEVSIFUKK1x1ZTAwYT5cdTBhOGE7ICMgTEVUVEVSIFVVCitcdWUwMGI+XHUwYThiOyAjIExFVFRFUiBWT0NBTElDIFIKK1x1ZTAwYz5cdTBhYjJcdTBhYzM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhOGM+XHUwYWIyXHUwYWMzID0gTEVUVEVSIFZPQ0FMSUMgTD5MRVRURVIgTEEuVk9XRUwgU0lHTiBWT0NBTElDIFIKK1x1ZTAwZD5cdTBhOGQ7ICMgR1VKQVJBVEkgVk9XRUwgQ0FORFJBIEUKK1x1ZTAwZT5cdTBhOGY7ICMgRkFMTEJBQ0sKK1x1ZTAwZj5cdTBhOGY7ICMgIEludGVySW5kaWMtR3VqYXJhdGk6IExFVFRFUiBFRSAoXHUwYThmID0gTEVUVEVSIEUpCitcdWUwMTA+XHUwYTkwOyAjIExFVFRFUiBBSQorXHVlMDExPlx1MGE5MTsgIyBGQUxMQkFDSworXHVlMDEyPlx1MGE5MzsgIyBGQUxMQkFDSworXHVlMDEzPlx1MGE5MzsgIyBVTk1BUFBFRCBJbnRlckluZGljLUd1amFyYXRpOiBMRVRURVIgT08gKFx1MGE5MyA9IExFVFRFUiBPKQorXHVlMDE0Plx1MGE5NDsgIyBMRVRURVIgQVUKK1x1ZTAxNT5cdTBhOTU7ICMgTEVUVEVSIEtBCitcdWUwMTY+XHUwYTk2OyAjIExFVFRFUiBLSEEKK1x1ZTAxNz5cdTBhOTc7ICMgTEVUVEVSIEdBCitcdWUwMTg+XHUwYTk4OyAjIExFVFRFUiBHSEEKK1x1ZTAxOT5cdTBhOTk7ICMgTEVUVEVSIE5HQQorXHVlMDFhPlx1MGE5YTsgIyBMRVRURVIgQ0EKK1x1ZTAxYj5cdTBhOWI7ICMgTEVUVEVSIENIQQorXHVlMDFjPlx1MGE5YzsgIyBMRVRURVIgSkEKK1x1ZTAxZD5cdTBhOWQ7ICMgTEVUVEVSIEpIQQorXHVlMDFlPlx1MGE5ZTsgIyBMRVRURVIgTllBCitcdWUwMWY+XHUwYTlmOyAjIExFVFRFUiBUVEEKK1x1ZTAyMD5cdTBhYTA7ICMgTEVUVEVSIFRUSEEKK1x1ZTAyMT5cdTBhYTE7ICMgTEVUVEVSIEREQQorXHVlMDIyPlx1MGFhMjsgIyBMRVRURVIgRERIQQorXHVlMDIzPlx1MGFhMzsgIyBMRVRURVIgTk5BCitcdWUwMjQ+XHUwYWE0OyAjIExFVFRFUiBUQQorXHVlMDI1Plx1MGFhNTsgIyBMRVRURVIgVEhBCitcdWUwMjY+XHUwYWE2OyAjIExFVFRFUiBEQQorXHVlMDI3Plx1MGFhNzsgIyBMRVRURVIgREhBCitcdWUwMjg+XHUwYWE4OyAjIExFVFRFUiBOQQorXHVlMDI5Plx1MGFhOFx1MGFiYzsgIyBGQUxMQkFDSyB0byBOQStOVUtUQQorXHVlMDJhPlx1MGFhYTsgIyBMRVRURVIgUEEKK1x1ZTAyYj5cdTBhYWI7ICMgTEVUVEVSIFBIQQorXHVlMDJjPlx1MGFhYzsgIyBMRVRURVIgQkEKK1x1ZTAyZD5cdTBhYWQ7ICMgTEVUVEVSIEJIQQorXHVlMDJlPlx1MGFhZTsgIyBMRVRURVIgTUEKK1x1ZTAyZj5cdTBhYWY7ICMgTEVUVEVSIFlBCitcdWUwMzA+XHUwYWIwOyAjIExFVFRFUiBSQQorXHVlMDMxPlx1MGFiMFx1MGFiYzsgIyBGQUxMQkFDSworXHVlMDMyPlx1MGFiMjsgIyBMRVRURVIgTEEKK1x1ZTAzMz5cdTBhYjM7ICMgTEVUVEVSIExMQQorXHVlMDM0Plx1MGFiM1x1MGFiYzsgIyAgTEVUVEVSIExMTEE+TEVUVEVSIExMQStOVUtUQQorXHVlMDM1Plx1MGFiNTsgIyBMRVRURVIgVkEKK1x1ZTAzNj5cdTBhYjY7ICMgTEVUVEVSIFNIQQorXHVlMDM3Plx1MGFiNzsgIyBMRVRURVIgU1NBCitcdWUwMzg+XHUwYWI4OyAjIExFVFRFUiBTQQorXHVlMDM5Plx1MGFiOTsgIyBMRVRURVIgSEEKK1x1ZTAzYz5cdTBhYmM7ICMgU0lHTiBOVUtUQQorXHVlMDNkPlx1MGFiZDsgIyBTSUdOIEFWQUdSQUhBCitcdWUwM2U+XHUwYWJlOyAjIFZPV0VMIFNJR04gQUEKK1x1ZTAzZj5cdTBhYmY7ICMgVk9XRUwgU0lHTiBJCitcdWUwNDA+XHUwYWMwOyAjIFZPV0VMIFNJR04gSUkKK1x1ZTA0MT5cdTBhYzE7ICMgVk9XRUwgU0lHTiBVCitcdWUwNDI+XHUwYWMyOyAjIFZPV0VMIFNJR04gVVUKK1x1ZTA0Mz5cdTBhYzM7ICMgVk9XRUwgU0lHTiBWT0NBTElDIFIKK1x1ZTA0ND5cdTBhYzQ7ICMgVk9XRUwgU0lHTiBWT0NBTElDIFJSCitcdWUwNDU+XHUwYWM1OyAjIFZPV0VMIFNJR04gQ0FORFJBIEUKK1x1ZTA0Nj5cdTBhYzc7ICMgRkFMTEJBQ0sKK1x1ZTA0Nz5cdTBhYzc7ICMgIEludGVySW5kaWMtR3VqYXJhdGk6IFZPV0VMIFNJR04gRUUgKFx1MGFjNyA9IFZPV0VMIFNJR04gRSkKK1x1ZTA0OD5cdTBhYzg7ICMgVk9XRUwgU0lHTiBBSQorXHVlMDQ5Plx1MGFjOTsgIyBWT1dFTCBTSUdOIENBTkRSQSBPCitcdWUwNGE+XHUwYWNiOyAjIEZBTExCQUNLCitcdWUwNGI+XHUwYWNiOyAjIFVOTUFQUEVEIEludGVySW5kaWMtR3VqYXJhdGk6IFZPV0VMIFNJR04gT08gKFx1MGFjYiA9IFZPV0VMIFNJR04gTykKK1x1ZTA0Yz5cdTBhY2M7ICMgVk9XRUwgU0lHTiBBVQorXHVlMDRkPlx1MGFjZDsgIyBTSUdOIFZJUkFNQQorXHVlMDUwPlx1MGFkMDsgIyBPTQorXHVlMDUxPjsKK1x1ZTA1Mj47CitcdWUwNTM+OworXHVlMDU0PjsKK1x1ZTA1NT47ICMgVU5NQVBQRUQgSW50ZXJJbmRpYy1HdWphcmF0aTogTEVOR1RIIE1BUksKK1x1ZTA1Nj5cdTBhYzg7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhZDY+XHUwYWM4ID0gQUkgTEVOR1RIIE1BUks+Vk9XRUwgU0lHTiBBSQorXHVlMDU3Plx1MGFjYzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGFkNz5cdTBhY2MgPSBBVSBMRU5HVEggTUFSSz5WT1dFTCBTSUdOIEFVCitcdWUwNTg+XHUwYTk1XHUwYWJjOyAjIEZBTExCQUNLCitcdWUwNTk+XHUwYTk2XHUwYWJjOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYWQ5Plx1MGE5Nlx1MGFiYyA9IExFVFRFUiBLSEhBPkxFVFRFUiBLSEEuU0lHTiBOVUtUQQorXHVlMDVhPlx1MGE5N1x1MGFiYzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGFkYT5cdTBhOTdcdTBhYmMgPSBMRVRURVIgR0hIQT5MRVRURVIgR0EuU0lHTiBOVUtUQQorXHVlMDViPlx1MGE5Y1x1MGFiYzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGFkYj5cdTBhOWNcdTBhYmMgPSBMRVRURVIgWkE+TEVUVEVSIEpBLlNJR04gTlVLVEEKK1x1ZTA1Yz5cdTBhYTFcdTBhYmM7ICMgRkFMTEJBQ0sKK1x1ZTA1ZD5cdTBhYTJcdTBhYmM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhZGQ+XHUwYWEyXHUwYWJjID0gTEVUVEVSIFJIQT5MRVRURVIgRERIQS5TSUdOIE5VS1RBCitcdWUwNWU+XHUwYWFiXHUwYWJjOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYWRlPlx1MGFhYlx1MGFiYyA9IExFVFRFUiBGQT5MRVRURVIgUEhBLlNJR04gTlVLVEEKK1x1ZTA1Zj5cdTBhYWZcdTBhYmM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhZGY+XHUwYWFmXHUwYWJjID0gTEVUVEVSIFlZQT5MRVRURVIgWUEuU0lHTiBOVUtUQQorXHVlMDYwPlx1MGFlMDsgIyBMRVRURVIgVk9DQUxJQyBSUgorXHVlMDYxPlx1MGFiMlx1MGFjMzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGFlMT5cdTBhYjJcdTBhYzMgPSBMRVRURVIgVk9DQUxJQyBMTD5MRVRURVIgTEEuVk9XRUwgU0lHTiBWT0NBTElDIFIKK1x1ZTA2Mj5cdTBhYmZcdTBhYmM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhZTI+XHUwYWJmXHUwYWJjID0gVk9XRUwgU0lHTiBWT0NBTElDIEw+Vk9XRUwgU0lHTiBJLlNJR04gTlVLVEEKK1x1ZTA2Mz5cdTBhYzBcdTBhYmM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhZTM+XHUwYWMwXHUwYWJjID0gVk9XRUwgU0lHTiBWT0NBTElDIExMPlZPV0VMIFNJR04gSUkuU0lHTiBOVUtUQQorXHVFMDY0Plx1MDk2NDsgICAgICAgICAgIyBEQU5EQQorXHVFMDY1Plx1MDk2NTsgICAgICAgICAgIyBET1VCTEUgREFOREEKK1x1ZTA2Nj5cdTBhZTY7ICMgRElHSVQgWkVSTworXHVlMDY3Plx1MGFlNzsgIyBESUdJVCBPTkUKK1x1ZTA2OD5cdTBhZTg7ICMgRElHSVQgVFdPCitcdWUwNjk+XHUwYWU5OyAjIERJR0lUIFRIUkVFCitcdWUwNmE+XHUwYWVhOyAjIERJR0lUIEZPVVIKK1x1ZTA2Yj5cdTBhZWI7ICMgRElHSVQgRklWRQorXHVlMDZjPlx1MGFlYzsgIyBESUdJVCBTSVgKK1x1ZTA2ZD5cdTBhZWQ7ICMgRElHSVQgU0VWRU4KK1x1ZTA2ZT5cdTBhZWU7ICMgRElHSVQgRUlHSFQKK1x1ZTA2Zj5cdTBhZWY7ICMgRElHSVQgTklORQorXHVlMDcwPjsgICAgICAgIyBBQkJSRVZJQVRJT04gU0lHTgorXHVlMDcxPlx1MGFiMDsgICAgICMgTEVUVEVSIFJBIFdJVEggTUlERExFIERJQUdPTkFMCitcdWUwNzI+XHUwYWIwOyAgICAgIyBMRVRURVIgUkEgV0lUSCBMT1dFUiBESUFHT05BTAorXHVlMDczPjsgICAgICAgICAgICMgUlVQRUUgTUFSSworXHVlMDc0PjsgICAgICAgICAgICMgUlVQRUUgU0lHTgorXHVlMDc1PjsgICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIE9ORQorXHVlMDc2PjsgICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRXTworXHVlMDc3PjsgICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRIUkVFCitcdWUwNzg+OyAgICAgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgRk9VUgorXHVlMDc5PjsgICAgICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIE9ORSBMRVNTIFRIQU4gVEhFIERFTk9NSU5BVE9SCitcdWUwN0E+OyAgICAgICAgICAgIyBDVVJSRU5DWSBERU5PTUlOQVRPUiBTSVhURUVOCitcdWUwN0I+OyAgICAgICAgICAgIyBJU1NIQVIKK1x1RTA3Qz47ICAgICAgICAgICAjIFRJUFBJCitcdUUwN0Q+OyAgICAgICAgICAgIyBBRERBSworXHVFMDdFPjsgICAgICAgICAgICMgSVJJCitcdUUwN0Y+OyAgICAgICAgICAgIyBVUkEKK1x1RTA4MD47ICAgICAgICAgICAjIEVLIE9OS0FSCiswID4gXHUwYWU2OyAgICAgICAjIEZBTExCQUNLIEZPUiBUQU1JTAorMSA+IFx1MGFlNzsKKworI1x1ZTA4MD47ICMgVU5NQVBQRUQgSW50ZXJJbmRpYy1HdWphcmF0aTogSVNTSEFSCisjICAgIDo6IE5GQyAoTkZEKSA7CisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0d1cm11a2hpLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19HdXJtdWtoaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjQzZmViMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19HdXJtdWtoaS50eHQKQEAgLTAsMCArMSwxNTAgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19HdXJtdWtoaS50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIzICQKKyMgJFJldmlzaW9uOiAxLjEwICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEludGVySW5kaWMtR3VybXVraGkKKyM6OiBORkQgKE5GQykgOworJHZvd2VsID0gW1x1MEEwNS1cdTBBMTQgXHUwQTNlLVx1MEE0RF07CiskY29uc29uYW50ID0gW1x1MEExNS1cdTBBMzldOworCitcdWUwMDE+OyAgICAgICAjIEZBTExCQUNLIEJMT1cgQVdBWSBTSUdOIENIQU5EUkFCSU5EVQorI3J1bGVzIGZvciBCSU5ESQorCisjIEFudXN2YXJhIGlzIGVxdWl2YWxlbnQgdG8gQklOREkgd2hlbiBwcmVjZWVkZWQgYnkgYSB2b3dlbAorJHZvd2Vse1x1ZTAwMj5cdTBhMDI7ICMgU0lHTiBBTlVTVkFSQSAoXHUwYTAyID0gU0lHTiBCSU5ESSkKKyMgZWxzZSBpcyBlcXVpdmFsZW50IHRvIFRJUFBJCiskY29uc29uYW50e1x1ZTAwMj5cdTBhNzA7ICMgU0lHTiBUSVBQSQorXHVlMDAyPlx1MGEwMjsKKworXHVlMDAzPjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgU0lHTiBWSVNBUkdBCitcdWUwMDU+XHUwYTA1OyAjIExFVFRFUiBBCitcdWUwMDY+XHUwYTA2OyAjIExFVFRFUiBBQQorXHVlMDA3Plx1MGEwNzsgIyBMRVRURVIgSQorXHVlMDA4Plx1MGEwODsgIyBMRVRURVIgSUkKK1x1ZTAwOT5cdTBhMDk7ICMgTEVUVEVSIFUKK1x1ZTAwYT5cdTBhMGE7ICMgTEVUVEVSIFVVCitcdWUwMGI+XHUwYTMwXHUwYTNmOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYTBiPlx1MGEzMFx1MGEzZiA9IExFVFRFUiBWT0NBTElDIFI+TEVUVEVSIFJBLlZPV0VMIFNJR04gSQorXHVlMDBjPlx1MGEzMzsgIyBGQUxMQkFDSworXHVlMDBkPlx1MGEwZjsgIyBGQUxMQkFDSworXHVlMDBlPlx1MGEwZjsgIyBGQUxMQkFDSworXHVlMDBmPlx1MGEwZjsgIyBMRVRURVIgRUUKK1x1ZTAxMD5cdTBhMTA7ICMgTEVUVEVSIEFJCitcdWUwMTE+XHUwYTEzOyAjIEZBTExCQUNLCitcdWUwMTI+XHUwYTEzOyAjIEZBTExCQUNLCitcdWUwMTM+XHUwYTEzOyAjIExFVFRFUiBPTworXHVlMDE0Plx1MGExNDsgIyBMRVRURVIgQVUKK1x1ZTAxNT5cdTBhMTU7ICMgTEVUVEVSIEtBCitcdWUwMTY+XHUwYTE2OyAjIExFVFRFUiBLSEEKK1x1ZTAxNz5cdTBhMTc7ICMgTEVUVEVSIEdBCitcdWUwMTg+XHUwYTE4OyAjIExFVFRFUiBHSEEKK1x1ZTAxOT5cdTBhMTk7ICMgTEVUVEVSIE5HQQorXHVlMDFhPlx1MGExYTsgIyBMRVRURVIgQ0EKK1x1ZTAxYj5cdTBhMWI7ICMgTEVUVEVSIENIQQorXHVlMDFjPlx1MGExYzsgIyBMRVRURVIgSkEKK1x1ZTAxZD5cdTBhMWQ7ICMgTEVUVEVSIEpIQQorXHVlMDFlPlx1MGExZTsgIyBMRVRURVIgTllBCitcdWUwMWY+XHUwYTFmOyAjIExFVFRFUiBUVEEKK1x1ZTAyMD5cdTBhMjA7ICMgTEVUVEVSIFRUSEEKK1x1ZTAyMT5cdTBhMjE7ICMgTEVUVEVSIEREQQorXHVlMDIyPlx1MGEyMjsgIyBMRVRURVIgRERIQQorXHVlMDIzPlx1MGEyMzsgIyBMRVRURVIgTk5BCitcdWUwMjQ+XHUwYTI0OyAjIExFVFRFUiBUQQorXHVlMDI1Plx1MGEyNTsgIyBMRVRURVIgVEhBCitcdWUwMjY+XHUwYTI2OyAjIExFVFRFUiBEQQorXHVlMDI3Plx1MGEyNzsgIyBMRVRURVIgREhBCitcdWUwMjg+XHUwYTI4OyAjIExFVFRFUiBOQQorXHVlMDI5Plx1MGEyOFx1MGEzYzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGEyOT5cdTBhMjggPSBMRVRURVIgTk5OQT5MRVRURVIgTkEKK1x1ZTAyYT5cdTBhMmE7ICMgTEVUVEVSIFBBCitcdWUwMmI+XHUwYTJiOyAjIExFVFRFUiBQSEEKK1x1ZTAyYz5cdTBhMmM7ICMgTEVUVEVSIEJBCitcdWUwMmQ+XHUwYTJkOyAjIExFVFRFUiBCSEEKK1x1ZTAyZT5cdTBhMmU7ICMgTEVUVEVSIE1BCitcdWUwMmY+XHUwYTJmOyAjIExFVFRFUiBZQQorXHVlMDMwPlx1MGEzMDsgIyBMRVRURVIgUkEKK1x1ZTAzMT5cdTBhMzBcdTBhM2M7ICMgRkFMTEJBQ0sgTEVUVEVSIFJBK05VS1RBCitcdWUwMzI+XHUwYTMyOyAjIExFVFRFUiBMQQorXHVlMDMzPlx1MGEzMzsgIyBMRVRURVIgTExBCitcdWUwMzQ+XHUwYTMzOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYTM0Plx1MGEzMyA9IExFVFRFUiBMTExBPkxFVFRFUiBMTEEKK1x1ZTAzNT5cdTBhMzU7ICMgTEVUVEVSIFZBCitcdWUwMzY+XHUwYTM2OyAjIExFVFRFUiBTSEEKK1x1ZTAzNz5cdTBhMzY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhMzc+XHUwYTM2ID0gTEVUVEVSIFNTQT5MRVRURVIgU0hBCitcdWUwMzg+XHUwYTM4OyAjIExFVFRFUiBTQQorXHVlMDM5Plx1MGEzOTsgIyBMRVRURVIgSEEKK1x1ZTAzYz5cdTBhM2M7ICMgU0lHTiBOVUtUQQorXHVlMDNkPjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgU0lHTiBBVkFHUkFIQQorXHVlMDNlPlx1MGEzZTsgIyBWT1dFTCBTSUdOIEFBCitcdWUwM2Y+XHUwYTNmOyAjIFZPV0VMIFNJR04gSQorXHVlMDQwPlx1MGE0MDsgIyBWT1dFTCBTSUdOIElJCitcdWUwNDE+XHUwYTQxOyAjIFZPV0VMIFNJR04gVQorXHVlMDQyPlx1MGE0MjsgIyBWT1dFTCBTSUdOIFVVCitcdWUwNDM+OyAjIEZBTExCQUNLIEJMT1cgQVdBWSBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorXHVlMDQ0PjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgVk9XRUwgU0lHTiBWT0NBTElDIFJSCitcdWUwNDU+XHUwYTQ4OyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYTQ1Plx1MGE0OCA9IFZPV0VMIFNJR04gQ0FORFJBIEU+Vk9XRUwgU0lHTiBBSQorXHVlMDQ2Plx1MGE0NzsgIyBGQUxMQUJDSworXHVlMDQ3Plx1MGE0NzsgIyBWT1dFTCBTSUdOIEVFCitcdWUwNDg+XHUwYTQ4OyAjIFZPV0VMIFNJR04gQUkKK1x1ZTA0OT5cdTBhNGM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhNDk+XHUwYTRjID0gVk9XRUwgU0lHTiBDQU5EUkEgTz5WT1dFTCBTSUdOIEFVCitcdWUwNGE+XHUwYTRiOyAjIEZBTExCQUNLCitcdWUwNGI+XHUwYTRiOyAjIFZPV0VMIFNJR04gT08KK1x1ZTA0Yz5cdTBhNGM7ICMgVk9XRUwgU0lHTiBBVQorXHVlMDRkPlx1MGE0ZDsgIyBTSUdOIFZJUkFNQQorXHVlMDUwPlx1MGEwZlx1MGEwMjsgIyAgRkFMTEJBQ0sgdG8gT08rQklOREkgOiBPTQorXHVlMDUxPjsKK1x1ZTA1Mj47CitcdWUwNTM+OworXHVlMDU0PjsKK1x1ZTA1NT47ICMgRkFMTEJBQ0sgQkxPVyBBV0FZIExFTkdUSCBNQVJLCitcdWUwNTY+XHUwYTQ4OyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYTU2Plx1MGE0OCA9IEFJIExFTkdUSCBNQVJLPlZPV0VMIFNJR04gQUkKK1x1ZTA1Nz5cdTBhNGM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhNTc+XHUwYTRjID0gQVUgTEVOR1RIIE1BUks+Vk9XRUwgU0lHTiBBVQorXHVlMDU4Plx1MGExNVx1MGEzYzsgIyBGQUxMQkFDSyBSQSsgTlVLVEEKK1x1ZTA1OT5cdTBhNTk7ICMgTEVUVEVSIEtISEEKK1x1ZTA1YT5cdTBhNWE7ICMgTEVUVEVSIEdISEEKK1x1ZTA1Yj5cdTBhNWI7ICMgTEVUVEVSIFpBCitcdWUwNWM+XHUwYTVjOyAjIExFVFRFUiBSUkEKK1x1ZTA1ZD5cdTBhMjJcdTBhM2M7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBhNWQ+XHUwYTIyXHUwYTNjID0gTEVUVEVSIFJIQT5MRVRURVIgRERIQS5TSUdOIE5VS1RBCitcdWUwNWU+XHUwYTVlOyAjIExFVFRFUiBGQQorXHVlMDVmPlx1MGEyZlx1MGEzYzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGE1Zj5cdTBhMmYgPSBMRVRURVIgWVlBPkxFVFRFUiBZQQorXHVlMDYwPlx1MGEzMFx1MGEzZjsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGE2MD5cdTBhMzBcdTBhM2YgPSBMRVRURVIgVk9DQUxJQyBSUj5MRVRURVIgUkEuVk9XRUwgU0lHTiBJCitcdWUwNjE+XHUwYTMzXHUwYTNjOyAjIAorXHVlMDYyPlx1MGEzZlx1MGEzYzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGE2Mj5cdTBhM2ZcdTBhM2MgPSBWT1dFTCBTSUdOIFZPQ0FMSUMgTD5WT1dFTCBTSUdOIEkuU0lHTiBOVUtUQQorXHVlMDYzPlx1MGE0MFx1MGEzYzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGE2Mz5cdTBhNDBcdTBhM2MgPSBWT1dFTCBTSUdOIFZPQ0FMSUMgTEw+Vk9XRUwgU0lHTiBJSS5TSUdOIE5VS1RBCitcdUUwNjQ+XHUwOTY0OyAgICAgICAgICAjIERBTkRBCitcdUUwNjU+XHUwOTY1OyAgICAgICAgICAjIERPVUJMRSBEQU5EQQorXHVlMDY2Plx1MGE2NjsgIyBESUdJVCBaRVJPCitcdWUwNjc+XHUwYTY3OyAjIERJR0lUIE9ORQorXHVlMDY4Plx1MGE2ODsgIyBESUdJVCBUV08KK1x1ZTA2OT5cdTBhNjk7ICMgRElHSVQgVEhSRUUKK1x1ZTA2YT5cdTBhNmE7ICMgRElHSVQgRk9VUgorXHVlMDZiPlx1MGE2YjsgIyBESUdJVCBGSVZFCitcdWUwNmM+XHUwYTZjOyAjIERJR0lUIFNJWAorXHVlMDZkPlx1MGE2ZDsgIyBESUdJVCBTRVZFTgorXHVlMDZlPlx1MGE2ZTsgIyBESUdJVCBFSUdIVAorXHVlMDZmPlx1MGE2ZjsgIyBESUdJVCBOSU5FCitcdWUwNzA+OyAgICAgICAjIEFCQlJFVklBVElPTiBTSUdOCitcdWUwNzE+XHUwYTMwOyAgICAgIyBMRVRURVIgUkEgV0lUSCBNSURETEUgRElBR09OQUwKK1x1ZTA3Mj5cdTBhMzA7ICAgICAjIExFVFRFUiBSQSBXSVRIIExPV0VSIERJQUdPTkFMCitcdWUwNzM+OyAgICAgICAgICAgIyBSVVBFRSBNQVJLCitcdWUwNzQ+OyAgICAgICAgICAgIyBSVVBFRSBTSUdOCitcdWUwNzU+OyAgICAgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgT05FCitcdWUwNzY+OyAgICAgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgVFdPCitcdWUwNzc+OyAgICAgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgVEhSRUUKK1x1ZTA3OD47ICAgICAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBGT1VSCitcdWUwNzk+OyAgICAgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgT05FIExFU1MgVEhBTiBUSEUgREVOT01JTkFUT1IKK1x1ZTA3QT47ICAgICAgICAgICAjIENVUlJFTkNZIERFTk9NSU5BVE9SIFNJWFRFRU4KK1x1ZTA3Qj47ICAgICAgICAgICAjIElTU0hBUgorXHVFMDdDPlx1MGE3MDsgICAgICMgVElQUEkKK1x1RTA3RD5cdTBhNzE7ICAgICAjIEFEREFLCitcdUUwN0U+XHUwYTcyOyAgICAgIyBJUkkKK1x1RTA3Rj5cdTBhNzM7ICAgICAjIFVSQQorXHVFMDgwPlx1MGE3NDsgICAgICMgRUsgT05LQVIKKworCiswID4gXHUwYTY2OyAgICAgICAjIEZBTExCQUNLIEZPUiBUQU1JTAorMSA+IFx1MGE2NzsKKyMgICAgOjogTkZDIChORkQpIDsKKyMgZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfS2FubmFkYS50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfS2FubmFkYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTFjMTJhNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19LYW5uYWRhLnR4dApAQCAtMCwwICsxLDE0NCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0thbm5hZGEudHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wOS8xOSAxODoxMToyMyAkCisjICRSZXZpc2lvbjogMS4xMCAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJbnRlckluZGljLUthbm5hZGEKKyM6OiBORkQgKE5GQykgOworXHVlMDMyXHVlMDNjPlx1MGNkZTsgIyBMRVRURVIgRkEKK1x1ZTAwMT5cdTBjODI7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjODE+XHUwYzgyID0gU0lHTiBDQU5EUkFCSU5EVT5TSUdOIEFOVVNWQVJBCitcdWUwMDI+XHUwYzgyOyAjIFNJR04gQU5VU1ZBUkEKK1x1ZTAwMz5cdTBjODM7ICMgU0lHTiBWSVNBUkdBCitcdWUwMDU+XHUwYzg1OyAjIExFVFRFUiBBCitcdWUwMDY+XHUwYzg2OyAjIExFVFRFUiBBQQorXHVlMDA3Plx1MGM4NzsgIyBMRVRURVIgSQorXHVlMDA4Plx1MGM4ODsgIyBMRVRURVIgSUkKK1x1ZTAwOT5cdTBjODk7ICMgTEVUVEVSIFUKK1x1ZTAwYT5cdTBjOGE7ICMgTEVUVEVSIFVVCitcdWUwMGI+XHUwYzhiOyAjIExFVFRFUiBWT0NBTElDIFIKK1x1ZTAwYz5cdTBjOGM7ICMgTEVUVEVSIFZPQ0FMSUMgTAorXHVlMDBkPlx1MGM4ZTsgIyBMRVRURVIgRQorXHVlMDBlPlx1MGM4ZTsgIyBGQUxMQkFDSworXHVlMDBmPlx1MGM4ZjsgIyBMRVRURVIgRUUKK1x1ZTAxMD5cdTBjOTA7ICMgTEVUVEVSIEFJCitcdWUwMTE+XHUwYzkyOyAjIEZBTExCQUNLCitcdWUwMTI+XHUwYzkyOyAjIExFVFRFUiBPCitcdWUwMTM+XHUwYzkzOyAjIExFVFRFUiBPTworXHVlMDE0Plx1MGM5NDsgIyBMRVRURVIgQVUKK1x1ZTAxNT5cdTBjOTU7ICMgTEVUVEVSIEtBCitcdWUwMTY+XHUwYzk2OyAjIExFVFRFUiBLSEEKK1x1ZTAxNz5cdTBjOTc7ICMgTEVUVEVSIEdBCitcdWUwMTg+XHUwYzk4OyAjIExFVFRFUiBHSEEKK1x1ZTAxOT5cdTBjOTk7ICMgTEVUVEVSIE5HQQorXHVlMDFhPlx1MGM5YTsgIyBMRVRURVIgQ0EKK1x1ZTAxYj5cdTBjOWI7ICMgTEVUVEVSIENIQQorXHVlMDFjPlx1MGM5YzsgIyBMRVRURVIgSkEKK1x1ZTAxZD5cdTBjOWQ7ICMgTEVUVEVSIEpIQQorXHVlMDFlPlx1MGM5ZTsgIyBMRVRURVIgTllBCitcdWUwMWY+XHUwYzlmOyAjIExFVFRFUiBUVEEKK1x1ZTAyMD5cdTBjYTA7ICMgTEVUVEVSIFRUSEEKK1x1ZTAyMT5cdTBjYTE7ICMgTEVUVEVSIEREQQorXHVlMDIyPlx1MGNhMjsgIyBMRVRURVIgRERIQQorXHVlMDIzPlx1MGNhMzsgIyBMRVRURVIgTk5BCitcdWUwMjQ+XHUwY2E0OyAjIExFVFRFUiBUQQorXHVlMDI1Plx1MGNhNTsgIyBMRVRURVIgVEhBCitcdWUwMjY+XHUwY2E2OyAjIExFVFRFUiBEQQorXHVlMDI3Plx1MGNhNzsgIyBMRVRURVIgREhBCitcdWUwMjg+XHUwY2E4OyAjIExFVFRFUiBOQQorXHVlMDI5Plx1MGNhODsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGNhOT5cdTBjYTggPSBMRVRURVIgTk5OQT5MRVRURVIgTkEKK1x1ZTAyYT5cdTBjYWE7ICMgTEVUVEVSIFBBCitcdWUwMmI+XHUwY2FiOyAjIExFVFRFUiBQSEEKK1x1ZTAyYz5cdTBjYWM7ICMgTEVUVEVSIEJBCitcdWUwMmQ+XHUwY2FkOyAjIExFVFRFUiBCSEEKK1x1ZTAyZT5cdTBjYWU7ICMgTEVUVEVSIE1BCitcdWUwMmY+XHUwY2FmOyAjIExFVFRFUiBZQQorXHVlMDMwXHVlMDNjPlx1MGNiMTsKK1x1ZTAzMD5cdTBjYjA7ICMgTEVUVEVSIFJBCitcdWUwMzE+XHUwY2IxOyAjIExFVFRFUiBSUkEKK1x1ZTAzMj5cdTBjYjI7ICMgTEVUVEVSIExBCitcdWUwMzM+XHUwY2IzOyAjIExFVFRFUiBMTEEKK1x1ZTAzND5cdTBjZGU7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjYjQ+XHUwY2IzID0gTEVUVEVSIExMTEE+TEVUVEVSIExMQQorXHVlMDM1Plx1MGNiNTsgIyBMRVRURVIgVkEKK1x1ZTAzNj5cdTBjYjY7ICMgTEVUVEVSIFNIQQorXHVlMDM3Plx1MGNiNzsgIyBMRVRURVIgU1NBCitcdWUwMzg+XHUwY2I4OyAjIExFVFRFUiBTQQorXHVlMDM5Plx1MGNiOTsgIyBMRVRURVIgSEEKKworXHVlMDNjPjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgTlVLVEEKK1x1ZTAzZD47ICMgRkFMTEJBQ0sgQkxPVyBBV0FZIEFWQUdSQUhBCisKK1x1ZTAzZT5cdTBjYmU7ICMgVk9XRUwgU0lHTiBBQQorXHVlMDNmPlx1MGNiZjsgIyBWT1dFTCBTSUdOIEkKK1x1ZTA0MD5cdTBjYzA7ICMgVk9XRUwgU0lHTiBJSQorXHVlMDQxPlx1MGNjMTsgIyBWT1dFTCBTSUdOIFUKK1x1ZTA0Mj5cdTBjYzI7ICMgVk9XRUwgU0lHTiBVVQorXHVlMDQzPlx1MGNjMzsgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorXHVlMDQ0Plx1MGNjNDsgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUlIKK1x1ZTA0NT5cdTBjYzY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjYzU+XHUwY2M2ID0gVk9XRUwgU0lHTiBDQU5EUkEgRT5WT1dFTCBTSUdOIEUKK1x1ZTA0Nj5cdTBjYzY7ICMgVk9XRUwgU0lHTiBFCitcdWUwNDc+XHUwY2M3OyAjIFZPV0VMIFNJR04gRUUKK1x1ZTA0OD5cdTBjYzg7ICMgVk9XRUwgU0lHTiBBSQorXHVlMDQ5Plx1MGNjYTsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGNjOT5cdTBjY2EgPSBWT1dFTCBTSUdOIENBTkRSQSBPPlZPV0VMIFNJR04gTworXHVlMDRhPlx1MGNjYTsgIyBWT1dFTCBTSUdOIE8KK1x1ZTA0Yj5cdTBjY2I7ICMgVk9XRUwgU0lHTiBPTworXHVlMDRjPlx1MGNjYzsgIyBWT1dFTCBTSUdOIEFVCitcdWUwNGQ+XHUwY2NkOyAjIFNJR04gVklSQU1BCitcdWUwNTA+XHUwYzkzXHUwYzgyOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwY2QwPlx1MGM5M1x1MGM4MiA9IE9NPkxFVFRFUiBPTy5TSUdOIEFOVVNWQVJBCitcdWUwNTE+OworXHVlMDUyPjsKK1x1ZTA1Mz47CitcdWUwNTQ+OworXHVlMDU1Plx1MGNkNTsgIyBMRU5HVEggTUFSSworXHVlMDU2Plx1MGNkNjsgIyBBSSBMRU5HVEggTUFSSworXHVlMDU3Plx1MGNjYzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGNkNz5cdTBjY2MgPSBBVSBMRU5HVEggTUFSSz5WT1dFTCBTSUdOIEFVCitcdWUwNTg+XHUwYzk1OyAjIEZBTExCQUNLCitcdWUwNTk+XHUwYzk2OyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwY2Q5Plx1MGM5NiA9IExFVFRFUiBLSEhBPkxFVFRFUiBLSEEKK1x1ZTA1YT5cdTBjOTc7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjZGE+XHUwYzk3ID0gTEVUVEVSIEdISEE+TEVUVEVSIEdBCitcdWUwNWI+XHUwYzljOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwY2RiPlx1MGM5YyA9IExFVFRFUiBaQT5MRVRURVIgSkEKK1x1ZTA1Yz5cdTBjYTI7ICMgRkFMTEJBQ0sKK1x1ZTA1ZD5cdTBjYTI7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjZGQ+XHUwY2EyID0gTEVUVEVSIFJIQT5MRVRURVIgRERIQQorXHVlMDVlPlx1MGNkZTsgIyBMRVRURVIgRkEKK1x1ZTA1Zj5cdTBjYWY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjZGY+XHUwY2FmID0gTEVUVEVSIFlZQT5MRVRURVIgWUEKK1x1ZTA2MD5cdTBjZTA7ICMgTEVUVEVSIFZPQ0FMSUMgUlIKK1x1ZTA2MT5cdTBjZTE7ICMgTEVUVEVSIFZPQ0FMSUMgTEwKK1x1ZTA2Mj5cdTBjYmY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjZTI+XHUwY2JmID0gVk9XRUwgU0lHTiBWT0NBTElDIEw+Vk9XRUwgU0lHTiBJCitcdWUwNjM+XHUwY2MwOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwY2UzPlx1MGNjMCA9IFZPV0VMIFNJR04gVk9DQUxJQyBMTD5WT1dFTCBTSUdOIElJCitcdWUwNjQ+Jy4nICAgOyAjIEZBTExCQUNLIEZPUiBEQU5EQQorXHVlMDY1PicuJyAgIDsgIyBGQUxMQkFDSyBGT1IgRE9VQkxFIERBTkRBICAgICAgCitcdWUwNjY+XHUwY2U2OyAjIERJR0lUIFpFUk8KK1x1ZTA2Nz5cdTBjZTc7ICMgRElHSVQgT05FCitcdWUwNjg+XHUwY2U4OyAjIERJR0lUIFRXTworXHVlMDY5Plx1MGNlOTsgIyBESUdJVCBUSFJFRQorXHVlMDZhPlx1MGNlYTsgIyBESUdJVCBGT1VSCitcdWUwNmI+XHUwY2ViOyAjIERJR0lUIEZJVkUKK1x1ZTA2Yz5cdTBjZWM7ICMgRElHSVQgU0lYCitcdWUwNmQ+XHUwY2VkOyAjIERJR0lUIFNFVkVOCitcdWUwNmU+XHUwY2VlOyAjIERJR0lUIEVJR0hUCitcdWUwNmY+XHUwY2VmOyAjIERJR0lUIE5JTkUKK1x1ZTA3MD47ICAgICAgICMgQUJCUkVWSUFUSU9OIFNJR04KK1x1ZTA3MT5cdTBjYjA7ICMgTEVUVEVSIFJBIFdJVEggTUlERExFIERJQUdPTkFMCitcdWUwNzI+XHUwY2IwOyAjIExFVFRFUiBSQSBXSVRIIExPV0VSIERJQUdPTkFMCitcdWUwNzM+OyAgICAgICAjIFJVUEVFIE1BUksKK1x1ZTA3ND47ICAgICAgICMgUlVQRUUgU0lHTgorXHVlMDc1PjsgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgT05FCitcdWUwNzY+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBUV08KK1x1ZTA3Nz47ICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRIUkVFCitcdWUwNzg+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBGT1VSCitcdWUwNzk+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUgTEVTUyBUSEFOIFRIRSBERU5PTUlOQVRPUgorXHVlMDdBPjsgICAgICAgIyBDVVJSRU5DWSBERU5PTUlOQVRPUiBTSVhURUVOCitcdWUwN0I+OyAgICAgICAjIElTU0hBUgorXHVFMDdDPjsgICAgICAgIyBUSVBQSQorXHVFMDdEPjsgICAgICAgIyBBRERBSworXHVFMDdFPjsgICAgICAgIyBJUkkKK1x1RTA3Rj47ICAgICAgICMgVVJBCitcdUUwODA+OyAgICAgICAjIEVLIE9OS0FSCisKKzAgPiBcdTBjZTY7ICAgICAgICMgRkFMTEJBQ0sgRk9SIFRBTUlMCisxID4gXHUwY2U3OworCisjICAgIDo6IE5GQyAoTkZEKSA7CisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0xhdGluLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19MYXRpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmJhM2FjMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19MYXRpbi50eHQKQEAgLTAsMCArMSw1MjYgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19MYXRpbi50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIxICQKKyMgJFJldmlzaW9uOiAxLjggJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSW50ZXJJbmRpYy1MYXRpbgorICAgI1x1MGUwMCByZXNlcnZlZAorICAgICNjb25zb25hbnRzCisgICAgJGNoYW5kcmFiaW5kdT1cdWUwMDE7CisgICAgJGFudXN2YXJhPVx1ZTAwMjsKKyAgICAkdmlzYXJnYT1cdWUwMDM7CisgICAgI1x1MGUwMDQgcmVzZXJ2ZWQKKyAgICAjIHc8dm93ZWw+IHJlcHJlc2VudHMgdGhlIHN0YW5kLWFsb25lIGZvcm0KKyAgICAkd2E9XHVlMDA1OworICAgICR3YWE9XHVlMDA2OworICAgICR3aT1cdWUwMDc7CisgICAgJHdpaT1cdWUwMDg7CisgICAgJHd1PVx1ZTAwOTsKKyAgICAkd3V1PVx1ZTAwYTsKKyAgICAkd3I9XHVlMDBiOworICAgICR3bD1cdWUwMGM7CisgICAgJHdjZT1cdWUwMGQ7ICMgTEVUVEVSIENBTkRSQSBFCisgICAgJHdzZT1cdWUwMGU7ICMgTEVUVEVSIFNIT1JUIEUKKyAgICAkd2U9XHVlMDBmOyAgIyBcdTA5MGYgTEVUVEVSIEUKKyAgICAkd2FpPVx1ZTAxMDsKKyAgICAkd2NvPVx1ZTAxMTsgIyBMRVRURVIgQ0FORFJBIE8KKyAgICAkd3NvPVx1ZTAxMjsgIyBMRVRURVIgU0hPUlQgTworICAgICR3bz1cdWUwMTM7ICAjIFx1MDkxMyBMRVRURVIgTworICAgICR3YXU9XHVlMDE0OworICAgICRrYT1cdWUwMTU7CisgICAgJGtoYT1cdWUwMTY7CisgICAgJGdhPVx1ZTAxNzsKKyAgICAkZ2hhPVx1ZTAxODsKKyAgICAkbmdhPVx1ZTAxOTsKKyAgICAkY2E9XHVlMDFhOworICAgICRjaGE9XHVlMDFiOworICAgICRqYT1cdWUwMWM7CisgICAgJGpoYT1cdWUwMWQ7CisgICAgJG55YT1cdWUwMWU7CisgICAgJHR0YT1cdWUwMWY7CisgICAgJHR0aGE9XHVlMDIwOworICAgICRkZGE9XHVlMDIxOworICAgICRkZGhhPVx1ZTAyMjsKKyAgICAkbm5hPVx1ZTAyMzsKKyAgICAkdGE9XHVlMDI0OworICAgICR0aGE9XHVlMDI1OworICAgICRkYT1cdWUwMjY7CisgICAgJGRoYT1cdWUwMjc7CisgICAgJG5hPVx1ZTAyODsKKyAgICAkZW5hPVx1ZTAyOTsgI2NvbXBhdGliaWxpdHkKKyAgICAkcGE9XHVlMDJhOworICAgICRwaGE9XHVlMDJiOworICAgICRiYT1cdWUwMmM7CisgICAgJGJoYT1cdWUwMmQ7CisgICAgJG1hPVx1ZTAyZTsKKyAgICAkeWE9XHVlMDJmOworICAgICRyYT1cdWUwMzA7CisgICAgJHJyYT1cdWUwMzE7CisgICAgJGxhPVx1ZTAzMjsKKyAgICAkbGxhPVx1ZTAzMzsgCisgICAgJGVsYT1cdWUwMzQ7ICNjb21wYXRpYmlsaXR5CisgICAgJHZhPVx1ZTAzNTsKKyAgICAkc2hhPVx1ZTAzNjsKKyAgICAkc3NhPVx1ZTAzNzsKKyAgICAkc2E9XHVlMDM4OworICAgICRoYT1cdWUwMzk7CisjXHUwOTNhIFJlc2VydmVkCisjXHUwOTNiIFJlc2VydmVkCisgICAgJG51a3RhPVx1ZTAzYzsKKyAgICAkYXZhZ3JhaGE9XHVlMDNkOyAjIFNJR04gQVZBR1JBSEEKKyAgICAjIDx2b3dlbD4gcmVwcmVzZW50cyB0aGUgZGVwZW5kZW50IGZvcm0KKyAgICAkYWE9XHVlMDNlOworICAgICRpPVx1ZTAzZjsKKyAgICAkaWk9XHVlMDQwOworICAgICR1PVx1ZTA0MTsKKyAgICAkdXU9XHVlMDQyOworICAgICRyaD1cdWUwNDM7CisgICAgJGxoPVx1ZTA0NDsKKyAgICAkY2U9XHVlMDQ1OyAjVk9XRUwgU0lHTiBDQU5EUkEgRSAKKyAgICAkc2U9XHVlMDQ2OyAjVk9XRUwgU0lHTiBTSE9SVCBFCisgICAgJGU9XHVlMDQ3OworICAgICRhaT1cdWUwNDg7CisgICAgJGNvPVx1ZTA0OTsgIyBWT1dFTCBTSUdOIENBTkRSQSBPCisgICAgJHNvPVx1ZTA0YTsgIyBWT1dFTCBTSUdOIFNIT1JUIE8KKyAgICAkbz1cdWUwNGI7ICAjIFx1MDk0YgorICAgICRhdT1cdWUwNGM7ICAgIAorICAgICR2aXJhbWE9XHVlMDRkOworIyBcdTA5NGUgUmVzZXJ2ZWQKKyMgXHUwOTRmIFJlc2VydmVkCisgICAgJG9tPVx1ZTA1MDsgIyBPTQorICAgIFx1ZTA1MT47ICAgICAgICAjIFVOTUFQUEVEIFNUUkVTUyBTSUdOIFVEQVRUQQorICAgIFx1ZTA1Mj47ICAgICAgICAjIFVOTUFQUEVEIFNUUkVTUyBTSUdOIEFOVURBVFRBCisgICAgXHVlMDUzPjsgICAgICAgICMgVU5NQVBQRUQgR1JBVkUgQUNDRU5UCisgICAgXHVlMDU0PjsgICAgICAgICMgVU5NQVBQRUQgQUNVVEUgQUNDRU5UCisgICAgJGxtID0gXHVlMDU1OyMgIFRlbHVndSBMZW5ndGggTWFyayAgICAKKyAgICAkYWlsbT1cdWUwNTY7IyAgQUkgTGVuZ3RoIE1hcmsgCisgICAgJGF1bG09XHVlMDU3OyMgIEFVIExlbmd0aCBNYXJrIAorICAgICAjdXJkdSBjb21wYXRpYml0eSBmb3JtcworICAgICR1a2E9XHVlMDU4OworICAgICR1a2hhPVx1ZTA1OTsKKyAgICAkdWdoYT1cdWUwNWE7CisgICAgJHVqaGE9XHVlMDViOworICAgICR1ZGRoYT1cdWUwNWM7CisgICAgJHVkaGE9XHVlMDVkOworICAgICR1ZmE9XHVlMDVlOworICAgICR1eWE9XHVlMDVmOworICAgICR3cnI9XHVlMDYwOworICAgICR3bGw9XHVlMDYxOworICAgICRycmg9XHVlMDYyOworICAgICRsbGg9XHVlMDYzOworICAgICRkYW5kYT1cdWUwNjQ7CisgICAgJGRvdWJsZURhbmRhPVx1ZTA2NTsKKyAgICAkemVybz1cdWUwNjY7ICAgICAjIERJR0lUIFpFUk8KKyAgICAkb25lPVx1ZTA2NzsgICAgICAjIERJR0lUIE9ORQorICAgICR0d289XHVlMDY4OyAgICAgICMgRElHSVQgVFdPCisgICAgJHRocmVlPVx1ZTA2OTsgICAgIyBESUdJVCBUSFJFRQorICAgICRmb3VyPVx1ZTA2YTsgICAgICMgRElHSVQgRk9VUgorICAgICRmaXZlPVx1ZTA2YjsgICAgICMgRElHSVQgRklWRQorICAgICRzaXg9XHVlMDZjOyAgICAgICMgRElHSVQgU0lYCisgICAgJHNldmVuPVx1ZTA2ZDsgICAgIyBESUdJVCBTRVZFTgorICAgICRlaWdodD1cdWUwNmU7ICAgICMgRElHSVQgRUlHSFQKKyAgICAkbmluZT1cdWUwNmY7ICAgICAjIERJR0lUIE5JTkUKKworIyBcdTA5NzA+OyAjIFVOTUFQUEVEIEFCQlJFVklBVElPTiBTSUdOCisgICAgJGRlcFZvd2VsQWJvdmU9W1x1ZTAzZS1cdWUwNDBcdWUwNDUtXHVlMDRjXTsKKyAgICAkZGVwVm93ZWxCZWxvdz1bXHVlMDQxLVx1ZTA0NF07CisgICAgIyAkeCB3YXMgb3JpZ2luYWxseSBjYWxsZWQgJyYnOyAkeiB3YXMgJyUnCisgICAgJHg9WyRhYSRhaSRhdSRpaSRpJHV1JHUkcnJoJHJoJGxoJGxsaCRlJG8kc2UkY2Ukc28kY29dOworICAgICR6PVtiY2RmZ2hqa2xtbnBxcnN0dnd4eXpdOworICAgICR2b3dlbHM9W2FlaW91clx1MDMwNFx1MDMyNVx1MDMwNl07CisgICAgJGZvcmNlSW5kZXBlbmRlbnRNYXRyYSA9IFteW1s6TDpdW1x1MDMwMC1cdTAzNGNdXV07CisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgY29udmVydCBmcm9tIE5hdGl2ZSBsZXR0ZXJzIHRvIExhdGluIGxldHRlcnMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICN0cmFuc2xpdGVyYXRpb25zIGZvciBhbnVzdmFyYQorICAgICRhbnVzdmFyYX0gWyRrYSRraGEkZ2EkZ2hhJG5nYV0gICAgICAgICAgICAgPiBuXHUwMzA3OworICAgICRhbnVzdmFyYX0gWyRjYSRjaGEkamEkamhhJG55YV0gICAgICAgICAgICAgPiBuXHUwMzA0OworICAgICRhbnVzdmFyYX0gWyR0dGEkdHRoYSRkZGEkZGRoYSRubmFdICAgICAgICAgPiBuXHUwMzIzOworICAgICRhbnVzdmFyYX0gWyR0YSR0aGEkZGEkZGhhJG5hXSAgICAgICAgICAgICAgPiBuICAgICAgOworICAgICRhbnVzdmFyYX0gWyRwYSRwaGEkYmEkYmhhJG1hXSAgICAgICAgICAgICAgPiBtICAgICAgOworICAgICRhbnVzdmFyYX0gWyR5YSRyYSRsbGEkbGEkdmEkc3NhJHNoYSRzYSRoYV0gPiBuICAgICAgOworICAgICRhbnVzdmFyYT4gbVx1MDMwNzsKKworICAgICMgVXJkdSBjb21wYXRpYmlsaXR5CisgICAgJHlhJG51a3RhfSR4ICAgICAgICA+IHlcdTAzMDcgIDsKKyAgICAkeWEkbnVrdGEkdmlyYW1hICAgID4geVx1MDMwNyAgOworICAgICR5YSRudWt0YSAgICAgICAgICAgPiB5XHUwMzA3YSA7ICAgIAorCisgICAgJGxhJG51a3RhIH0keCAgICAgICA+IGxcdTAzMzEgIDsKKyAgICAkbGEkbnVrdGEkdmlyYW1hICAgID4gbFx1MDMzMSAgOworICAgICRsYSRudWt0YSAgICAgICAgICAgPiBsXHUwMzMxYSA7CisKKyAgICAkbmEkbnVrdGEgfSR4ICAgICAgID4gblx1MDMzMSAgOworICAgICRuYSRudWt0YSR2aXJhbWEgICAgPiBuXHUwMzMxICA7CisgICAgJG5hJG51a3RhICAgICAgICAgICA+IG5cdTAzMzFhIDsKKworICAgICRlbmEgfSR4ICAgICAgICAgICAgPiBuXHUwMzMxICA7CisgICAgJGVuYSR2aXJhbWEgICAgICAgICA+IG5cdTAzMzEgIDsKKyAgICAkZW5hICAgICAgICAgICAgICAgID4gblx1MDMzMWEgOworICAgICR1a2EJCT4gcWEgICAgICAgOworICAgICRrYSRudWt0YSB9JHggICAgICAgPiBxICAgICAgICA7CisgICAgJGthJG51a3RhJHZpcmFtYSAgICA+IHEgICAgICAgIDsKKyAgICAka2EkbnVrdGEgICAgICAgICAgID4gcWEgICAgICAgOworICAgICRraGEkbnVrdGEgfSR4ICAgICAgPiBrXHUwMzMxaFx1MDMzMSA7CisgICAgJGtoYSRudWt0YSR2aXJhbWEgICA+IGtcdTAzMzFoXHUwMzMxIDsKKyAgICAka2hhJG51a3RhICAgICAgICAgID4ga1x1MDMzMWhcdTAzMzFhIDsKKyAgICAkdWtoYSR2aXJhbWEgICAgICAgID4ga1x1MDMzMWhcdTAzMzE7CisgICAgJHVraGEgICAgICAgICAgICAgICA+IGtcdTAzMzFoXHUwMzMxYTsKKyAgICAkdWdoYQkJPiBnXHUwMzA3YSA7CisgICAgJGdhJG51a3RhIH0keCAgICAgICA+IGdcdTAzMDcgIDsKKyAgICAkZ2EkbnVrdGEkdmlyYW1hICAgID4gZ1x1MDMwNyAgOworICAgICRnYSRudWt0YSAgICAgICAgICAgPiBnXHUwMzA3YSA7CisgICAgCisgICAgJHVqaGEgICAgICAgICAgICAgICAgPiB6YSAgICAgICA7CQorICAgICRqYSRudWt0YSB9JHggICAgICAgPiB6ICAgICAgICA7CisgICAgJGphJG51a3RhJHZpcmFtYSAgICA+IHogICAgICAgIDsKKyAgICAkamEkbnVrdGEgICAgICAgICAgID4gemEgICAgICAgOworICAgICRkZGhhJG51a3RhfSR4ICAgICAgPiByXHUwMzIzaCA7CisgICAgJGRkaGEkbnVrdGEkdmlyYW1hICA+IHJcdTAzMjNoIDsKKyAgICAkZGRoYSRudWt0YSAgICAgICAgID4gclx1MDMyM2hhOworCisgICAgJHVkZGhhfSR4ICAgICAgICAgICA+IHJcdTAzMjMgIDsKKyAgICAkdWRkaGEkdmlyYW1hICAgICAgID4gclx1MDMyMyA7CisgICAgJHVkZGhhICAgICAgICAgICAgICA+IHJcdTAzMjNhOworICAgIAorICAgICR1ZGhhICAgICAgICAgICAgICAgPiByXHUwMzIzYSA7CisgICAgJGRkYSRudWt0YX0keCAgICAgICA+IHJcdTAzMjMgIDsKKyAgICAkZGRhJG51a3RhJHZpcmFtYSAgID4gclx1MDMyMyAgOworICAgICRkZGEkbnVrdGEgICAgICAgICAgPiByXHUwMzIzYSA7CisgICAgJHBoYSRudWt0YSB9JHggICAgICA+IGYgIDsKKyAgICAkcGhhJG51a3RhJHZpcmFtYSAgID4gZiAgOworICAgICRwaGEkbnVrdGEgICAgICAgICAgPiBmYSA7CisgICAgJHVmYSB9JHggICAgICAgICAgICA+IGYgIDsKKyAgICAkdWZhJHZpcmFtYSAgICAgICAgID4gZiAgOworICAgICR1ZmEgICAgICAgICAgICAgICAgPiBmYSA7CisKKyAgICAkcmEkbnVrdGF9JHggICAgICAgID4gclx1MDMzMTsKKyAgICAkcmEkbnVrdGEkdmlyYW1hICAgID4gclx1MDMzMTsKKyAgICAkcmEkbnVrdGEgICAgICAgICAgID4gclx1MDMzMWE7CisgICAgJGxsYSRudWt0YX0keCAgICAgICA+IGxcdTAzMzE7CisgICAgJGxsYSRudWt0YSR2aXJhbWEgICA+IGxcdTAzMzE7IAorICAgICRsbGEkbnVrdGEgICAgICAgICAgPiBsXHUwMzMxYTsKKworICAgICRlbGF9JHggICAgICAgICAgICAgPiBsXHUwMzMxOworICAgICRlbGEkdmlyYW1hICAgICAgICAgPiBsXHUwMzMxOyAKKyAgICAkZWxhICAgICAgICAgICAgICAgID4gbFx1MDMzMWE7CisKKyAgICAkdXlhfSR4ICAgICAgICAgICAgID4geVx1MDMwNzsKKyAgICAkdXlhJHZpcmFtYSAgICAgICAgID4geVx1MDMwNzsKKyAgICAkdXlhICAgICAgICAgICAgICAgID4geVx1MDMwN2E7CisKKworICAgICMgbm9ybWFsIGNvbnNvbmFudHMKKyAgICAka2EkdmlyYW1hfSRoYT5rJyc7CisgICAgJGthfSR4Pms7CisgICAgJGthJHZpcmFtYT5rOworICAgICRrYT5rYTsKKyAgICAka2hhfSR4PmtoOworICAgICRraGEkdmlyYW1hPmtoOworICAgICRraGE+a2hhOworICAgICRnYSR2aXJhbWF9JGhhPmcnJzsKKyAgICAkZ2F9JHg+ZzsKKyAgICAkZ2EkdmlyYW1hPmc7CisgICAgJGdhPmdhOworCisgICAgJGdoYX0keD5naDsKKyAgICAkZ2hhJHZpcmFtYT5naDsKKyAgICAkZ2hhPmdoYTsKKworICAgICRuZ2F9JHg+blx1MDMwNzsKKyAgICAkbmdhJHZpcmFtYT5uXHUwMzA3OworICAgICRuZ2E+blx1MDMwN2EgIDsKKyAgICAkY2EkdmlyYW1hfSRoYT5jJyc7CisgICAgJGNhfSR4PmM7CisgICAgJGNhJHZpcmFtYT5jOworICAgICRjYT5jYTsKKworICAgICRjaGF9JHg+Y2g7CisgICAgJGNoYSR2aXJhbWE+Y2g7CisgICAgJGNoYT5jaGE7CisgICAgJGphJHZpcmFtYX0kaGE+aicnOworICAgICRqYX0keD5qOworICAgICRqYSR2aXJhbWE+ajsKKyAgICAkamE+amE7CisKKyAgICAkamhhfSR4PmpoOworICAgICRqaGEkdmlyYW1hPmpoOworICAgICRqaGE+amhhOworCisgICAgJG55YSB9JHg+blx1MDMwMyA7CisgICAgJG55YSR2aXJhbWE+blx1MDMwMzsKKyAgICAkbnlhID4gblx1MDMwM2EgIDsKKworCisgICAgJHR0YSR2aXJhbWF9JGhhPnRcdTAzMjMnJzsKKyAgICAkdHRhfSR4PnRcdTAzMjM7CisgICAgJHR0YSR2aXJhbWE+dFx1MDMyMzsKKyAgICAkdHRhPnRcdTAzMjNhOworCisgICAgJHR0aGF9JHg+dFx1MDMyM2g7CisgICAgJHR0aGEkdmlyYW1hPnRcdTAzMjNoOworICAgICR0dGhhPnRcdTAzMjNoYTsKKyAgICAkZGRhfSR4JGhhPmRcdTAzMjMnJzsKKyAgICAkZGRhfSR4PmRcdTAzMjM7CisgICAgJGRkYSR2aXJhbWE+ZFx1MDMyMzsKKyAgICAkZGRhPmRcdTAzMjNhOworCisgICAgJGRkaGF9JHg+ZFx1MDMyM2g7CisgICAgJGRkaGEkdmlyYW1hPmRcdTAzMjNoOworICAgICRkZGhhPmRcdTAzMjNoYTsKKworICAgICRubmF9JHg+blx1MDMyMyAgOworICAgICRubmEkdmlyYW1hPm5cdTAzMjM7CisgICAgJG5uYT5uXHUwMzIzYSAgIDsKKworCisgICAgJHRhJHZpcmFtYX0kaGE+dCcnOworICAgICR0YSR2aXJhbWF9JHR0aGE+dCcnOworICAgICR0YSR2aXJhbWF9JHR0YT50Jyc7CisgICAgJHRhJHZpcmFtYX0kdGhhPnQnJzsKKyAgICAkdGF9JHg+dDsKKyAgICAkdGEkdmlyYW1hPnQ7CisgICAgJHRhPnRhOworICAgICR0aGF9JHg+dGg7CisgICAgJHRoYSR2aXJhbWE+dGg7CisgICAgJHRoYT50aGE7CisKKyAgICAkZGEkdmlyYW1hfSRoYT5kJyc7CisgICAgJGRhJHZpcmFtYX0kZGRoYT5kJyc7CisgICAgJGRhJHZpcmFtYX0kZGRhPmQnJzsKKyAgICAkZGEkdmlyYW1hfSRkaGE+ZCcnOworICAgICRkYX0keD5kOworICAgICRkYSR2aXJhbWE+ZDsKKyAgICAkZGE+ZGE7CisgICAgJGRoYX0keD5kaDsKKyAgICAkZGhhJHZpcmFtYT5kaDsKKyAgICAkZGhhPmRoYTsKKyAgICAkbmEkdmlyYW1hfSRnYT5uJyc7CisgICAgJG5hJHZpcmFtYX0keWE+bicnOworICAgICRuYX0keD5uOworICAgICRuYSR2aXJhbWE+bjsKKyAgICAkbmE+bmE7CisKKworICAgICRwYSR2aXJhbWF9JGhhPnAnJzsKKyAgICAkcGF9JHg+cDsKKyAgICAkcGEkdmlyYW1hPnA7CisgICAgJHBhPnBhOworICAgICRwaGF9JHg+cGg7CisgICAgJHBoYSR2aXJhbWE+cGg7CisgICAgJHBoYT5waGE7CisgICAgJGJhJHZpcmFtYX0kaGE+YicnOworICAgICRiYX0keD5iOworICAgICRiYSR2aXJhbWE+YjsKKyAgICAkYmE+YmE7CisKKyAgICAkYmhhfSR4PmJoOworICAgICRiaGEkdmlyYW1hPmJoOworICAgICRiaGE+YmhhOworCisgICAgJG1hJHZpcmFtYX0kbWE+bScnOworICAgICRtYX0keD5tOworICAgICRtYSR2aXJhbWE+bTsKKyAgICAkbWE+bWE7CisKKyAgICAkeWF9JHg+eTsKKyAgICAkeWEkdmlyYW1hPnk7CisgICAgJHlhPnlhOworICAgICRyYSR2aXJhbWF9JGhhPnInJzsKKyAgICAkcmF9JHg+cjsKKyAgICAkcmEkdmlyYW1hPnI7CisgICAgJHJhPnJhOworICAgICRycmEkdmlyYW1hfSRoYT5yXHUwMzMxJyc7CisgICAgJHJyYX0keD5yXHUwMzMxOworICAgICRycmEkdmlyYW1hPnJcdTAzMzE7CisgICAgJHJyYT5yXHUwMzMxYTsKKyAgICAkbGEkdmlyYW1hfSRoYT5sJyc7CisgICAgJGxhfSR4Pmw7CisgICAgJGxhJHZpcmFtYT5sOworICAgICRsYT5sYTsKKyAgICAkbGxhJHZpcmFtYX0kaGE+bFx1MDMyMycnOworICAgICRsbGF9JHg+bFx1MDMyMzsKKyAgICAkbGxhJHZpcmFtYT5sXHUwMzIzOworICAgICRsbGE+bFx1MDMyM2E7CisgICAgJHZhfSR4PnY7CisgICAgJHZhJHZpcmFtYT52OworICAgICR2YT52YTsKKyAgICAkc2EkdmlyYW1hfSRoYT5zJyc7CisgICAgJHNhJHZpcmFtYX0kc2hhPnMnJzsKKyAgICAkc2EkdmlyYW1hfSRzc2E+cycnOworICAgICRzYSR2aXJhbWF9JHNhPnMnJzsKKyAgICAkc2F9JHg+czsKKyAgICAkc2EkdmlyYW1hPnM7CisKKyAgICAjZm9yIGd1cm11a2hpCisgICAgJHNhJG51a3RhfSR4PnNcdTAzMDE7CisgICAgJHNhJG51a3RhJHZpcmFtYT5zXHUwMzAxOworICAgICRzYSRudWt0YT5zXHUwMzAxYTsKKyAgICAkc2E+c2E7CisKKyAgICAkc2hhfSR4PnNcdTAzMDE7CisgICAgJHNoYSR2aXJhbWE+c1x1MDMwMTsKKyAgICAkc2hhPnNcdTAzMDFhOworCisgICAgJHNzYX0keD5zXHUwMzIzOworICAgICRzc2EkdmlyYW1hPnNcdTAzMjM7CisgICAgJHNzYT5zXHUwMzIzYTsKKyAgICAkaGF9JHg+aDsKKyAgICAkaGEkdmlyYW1hPmg7CisgICAgJGhhPmhhOworCisgICAgIyBkZXBlbmRlbnQgdm93ZWxzIChzaG91bGQgbmV2ZXIgb2NjdXIgZXhjZXB0IGZvbGxvd2luZyBjb25zb25hbnRzKQorICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JGFhICA+IFx1MDMxNGFcdTAzMDQgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JGFpICA+IFx1MDMxNGFpICAgICAgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JGF1ICA+IFx1MDMxNGF1ICAgICAgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JGlpICA+IFx1MDMxNGlcdTAzMDQgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JGkgICA+IFx1MDMxNGkgICAgICAgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JHV1ICA+IFx1MDMxNHVcdTAzMDQgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JHUgICA+IFx1MDMxNHUgICAgICAgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JHJyaCA+IFx1MDMxNHJcdTAzMjVcdTAzMDQgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JHJoICA+IFx1MDMxNHJcdTAzMjUgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JGxsaCA+IFx1MDMxNGxcdTAzMjVcdTAzMDQgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JGxoICA+IFx1MDMxNGxcdTAzMjUgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JGUgICA+IFx1MDMxNGVcdTAzMDQgICAgICAgOworICAgICRmb3JjZUluZGVwZW5kZW50TWF0cmF7JG8gICA+IFx1MDMxNG9cdTAzMDQgICAgICAgOworICAgICNleHRyYSB2b3dlbHMKKyAgICAkZm9yY2VJbmRlcGVuZGVudE1hdHJheyRjZSAgPiBcdTAzMTRlXHUwMzA2ICAgICAgIDsKKyAgICAkZm9yY2VJbmRlcGVuZGVudE1hdHJheyRjbyAgPiBcdTAzMTRvXHUwMzA2ICAgICAgIDsKKyAgICAkZm9yY2VJbmRlcGVuZGVudE1hdHJheyRzZSAgPiBcdTAzMTRlICAgICAgICAgICAgIDsKKyAgICAkZm9yY2VJbmRlcGVuZGVudE1hdHJheyRzbyAgPiBcdTAzMTRvICAgICAgICAgICAgIDsKKyAgICAkZm9yY2VJbmRlcGVuZGVudE1hdHJheyRudWt0YSAgPjsgIyBOdWt0YSBjYW5ub3QgYXBwZWFyIGluZGVwZW5kZW50bHkgb3IgYXMgZmlyc3QgY2hhcmFjdGVyCisgICAgJGZvcmNlSW5kZXBlbmRlbnRNYXRyYXskdmlyYW1hID47ICMgVmlyYW1hIGNhbm5vdCBhcHBlYXIgaW5kZXBlbmRlbnRseSBvciBhcyBmaXJzdCBjaGFyYWN0ZXIKKyAgICAkYWEgID4gYVx1MDMwNCAgICAgICA7CisgICAgJGFpICA+IGFpICAgICAgICAgICAgOworICAgICRhdSAgPiBhdSAgICAgICAgICAgIDsKKyAgICAkaWkgID4gaVx1MDMwNCAgICAgICA7CisgICAgJGkgICA+IGkgICAgICAgICAgICAgOworICAgICR1dSAgPiB1XHUwMzA0ICAgICAgIDsKKyAgICAkdSAgID4gdSAgICAgICAgICAgICA7CisgICAgJHJyaCA+IHJcdTAzMjVcdTAzMDQgOworICAgICRyaCAgPiByXHUwMzI1ICAgICAgIDsKKyAgICAkbGxoID4gbFx1MDMyNVx1MDMwNCA7CisgICAgJGxoICA+IGxcdTAzMjUgICAgICAgOworICAgICRlICAgPiBlXHUwMzA0ICAgICAgIDsKKyAgICAkbyAgID4gb1x1MDMwNCAgICAgICA7CisgICAgI2V4dHJhIHZvd2VscworICAgICRjZSAgPiBlXHUwMzA2ICAgICAgIDsKKyAgICAkY28gID4gb1x1MDMwNiAgICAgICA7CisgICAgJHNlICA+IGUgICAgICAgICAgICAgOworICAgICRzbyAgPiBvICAgICAgICAgICAgIDsKKyAgICAjZGVwZW5kZW50IHZvd2VscyB3aGVuIGZvbGxvd2luZyBpbmRlcGVuZGVudCB2b3dlbHMuIEdlbmVyYWxseSBJbGxlZ2FsIG9ubHkgZm9yIHJvdW5kdHJpcHBpbmcKKyAgICAkd2FhfSAkeCA+IGFcdTAzMDRcdTAzMTQgICAgICAgIDsKKyAgICAkd2FpfSAkeCA+IGFpXHUwMzE0ICAgICAgICAgICAgIDsKKyAgICAkd2F1fSAkeCA+IGF1XHUwMzE0ICAgICAgICAgICAgIDsKKyAgICAkd2lpfSAkeCA+IGlcdTAzMDRcdTAzMTQgICAgICAgIDsKKyAgICAkd2kgfSAkeCA+IGlcdTAzMTQgICAgICAgICAgICAgIDsKKyAgICAkd3V1fSAkeCA+IHVcdTAzMDRcdTAzMTQgICAgICAgIDsKKyAgICAkd3UgfSAkeCA+IHVcdTAzMTQgICAgICAgICAgICAgIDsKKyAgICAkd3JyfSAkeCA+IHJcdTAzMjVcdTAzMDRcdTAzMTQgIDsKKyAgICAkd3IgfSAkeCA+IHJcdTAzMjVcdTAzMTQgICAgICAgIDsKKyAgICAkd2xsfSAkeCA+IGxcdTAzMjVcdTAzMDRcdTAzMTQgIDsKKyAgICAkd2wgfSAkeCA+IGxcdTAzMjVcdTAzMTQgICAgICAgIDsKKyAgICAkd2UgfSAkeCA+IGVcdTAzMDRcdTAzMTQgICAgICAgIDsKKyAgICAkd28gfSAkeCA+IG9cdTAzMDRcdTAzMTQgICAgICAgIDsKKyAgICAkd2EgfSAkeCA+IGFcdTAzMTQgICAgICAgICAgICAgIDsKKyAgICAjZXh0cmEgdm93ZWxzCisgICAgJHdjZX0gJHggPiBlXHUwMzA2XHUwMzE0ICAgICAgICA7CisgICAgJHdjb30gJHggPiBvXHUwMzA2XHUwMzE0ICAgICAgICA7CisgICAgJHdzZX0gJHggPiBlXHUwMzE0ICAgICAgICAgICAgICA7CisgICAgJHdzb30gJHggPiBvXHUwMzE0ICAgICAgICAgICAgICA7CisgICAgJG9tfSAkeCA+ICcnb21cdTAzMTQgICAgICAgICAgICA7CisgICAgICAgICAgIAorICAgICMgaW5kZXBlbmRlbnQgdm93ZWxzIHdoZW4gcHJlY2VlZGVkIGJ5IHZvd2VscworICAgICR2b3dlbHN7JHdhYSAgICA+ICcnYVx1MDMwNCAgICAgICAgIDsKKyAgICAkdm93ZWxzeyR3YWkgICAgPiAnJ2FpICAgICAgICAgICAgICA7CisgICAgJHZvd2Vsc3skd2F1ICAgID4gJydhdSAgICAgICAgICAgICAgOworICAgICR2b3dlbHN7JHdpaSAgICAgPiAnJ2lcdTAzMDQgICAgICAgIDsKKyAgICAkdm93ZWxzeyR3aSAgICAgPiAnJ2kgICAgICAgICAgICAgICA7CisgICAgJHZvd2Vsc3skd3V1ICAgID4gJyd1XHUwMzA0ICAgICAgICAgOworICAgICR2b3dlbHN7JHd1ICAgICA+ICcndSAgICAgICAgICAgICAgIDsKKyAgICAkdm93ZWxzeyR3cnIgICAgPiAnJ3JcdTAzMjVcdTAzMDQgICA7CisgICAgJHZvd2Vsc3skd3IgICAgID4gJydyXHUwMzI1ICAgICAgICAgOworICAgICR2b3dlbHN7JHdsbCAgICA+ICcnbFx1MDMyNVx1MDMwNCAgIDsKKyAgICAkdm93ZWxzeyR3bCAgICAgPiAnJ2xcdTAzMjUgICAgICAgICA7CisgICAgJHZvd2Vsc3skd2UgICAgID4gJydlXHUwMzA0ICAgICAgICAgOworICAgICR2b3dlbHN7JHdvICAgICA+ICcnb1x1MDMwNCAgICAgICAgIDsKKyAgICAkdm93ZWxzeyR3YSAgICAgPiAnJ2EgICAgICAgICAgICAgICA7CisgICAgI2V4dHJhIHZvd2VscworICAgICR2b3dlbHN7JHdjZSAgICA+ICcnZVx1MDMwNiAgICAgICAgIDsKKyAgICAkdm93ZWxzeyR3Y28gICAgPiAnJ29cdTAzMDYgICAgICAgICA7CisgICAgJHZvd2Vsc3skd3NlICAgID4gJydlICAgICAgICAgICAgICAgOworICAgICR2b3dlbHN7JHdzbyAgICA+ICcnbyAgICAgICAgICAgICAgIDsKKworICAgICMgaW5kZXBlbmRlbnQgdm93ZWxzIChvdGhlcndpc2UpCisgICAgJHdhYSA+IGFcdTAzMDQgICAgICAgICAgOworICAgICR3YWkgPiBhaSAgICAgICAgICAgICAgIDsKKyAgICAkd2F1ID4gYXUgICAgICAgICAgICAgICA7CisgICAgJHdpaSA+IGlcdTAzMDQgICAgICAgICAgOworICAgICR3aSAgPiBpICAgICAgICAgICAgICAgIDsKKyAgICAkd3V1ID4gdVx1MDMwNCAgICAgICAgICA7CisgICAgJHd1ICA+IHUgICAgICAgICAgICAgICAgOworICAgICR3cnIgPiByXHUwMzI1XHUwMzA0ICAgIDsKKyAgICAkd3IgID4gclx1MDMyNSAgICAgICAgICA7CisgICAgJHdsbCA+IGxcdTAzMjVcdTAzMDQgICAgOworICAgICR3bCAgPiBsXHUwMzI1ICAgICAgICAgIDsKKyAgICAkd2UgID4gZVx1MDMwNCAgICAgICAgICA7CisgICAgJHdvICA+IG9cdTAzMDQgICAgICAgICAgOworICAgICR3YSAgPiBhICAgICAgICAgICAgICAgIDsKKyAgICAjZXh0cmEgdm93ZWxzCisgICAgJHdjZSA+IGVcdTAzMDYgICAgICAgICAgOworICAgICR3Y28gPiBvXHUwMzA2ICAgICAgICAgIDsKKyAgICAkd3NlID4gZSAgICAgICAgICAgICAgICA7CisgICAgJHdzbyA+IG8gICAgICAgICAgICAgICAgOworICAgICRvbSA+ICcnb20gICAgICAgICAgICAgIDsKKworICAgICNzdHJlc3MgbWFya3MKKyAgICAkYXZhZ3JhaGEgPiBcdTAzMTU7CisgICAgJGNoYW5kcmFiaW5kdSRhbnVzdmFyYT5cdTAzMDM7CisgICAgJGNoYW5kcmFiaW5kdSA+IG1cdTAzMTA7CisgICAgJHZpc2FyZ2E+aFx1MDMyMzsKKyAgICAjbnVtYmVycworICAgICR6ZXJvICA+IDA7IAorICAgICRvbmUgICA+IDE7ICAKKyAgICAkdHdvICAgPiAyOyAgCisgICAgJHRocmVlID4gMzsKKyAgICAkZm91ciAgPiA0OyAKKyAgICAkZml2ZSAgPiA1OyAKKyAgICAkc2l4ICAgPiA2OyAgCisgICAgJHNldmVuID4gNzsKKyAgICAkZWlnaHQgPiA4OworICAgICRuaW5lICA+IDk7CisgICAgJGxtICAgPjsgCisgICAgJGFpbG0gPjsKKyAgICAkYXVsbSA+OworCisgICAgJGRhbmRhPicuJzsKKyAgICAkZG91YmxlRGFuZGE+Jy4nOworICAgCisgICAgXHVlMDcwPjsgICAgICAgIyBBQkJSRVZJQVRJT04gU0lHTgorICAgICMgTEVUVEVSIFJBIFdJVEggTUlERExFIERJQUdPTkFMCisJXHVlMDcxfSR4PnJhOyAKKwlcdWUwNzEkdmlyYW1hPnI7CisJXHVlMDcxPnJhOyAKKwkjIExFVFRFUiBSQSBXSVRIIExPV0VSIERJQUdPTkFMCisJXHVlMDcyfSR4PnJhOyAKKwlcdWUwNzIkdmlyYW1hPnI7CisJXHVlMDcyPnJhOyAKKwkKKwlcdWUwNzM+OyAgICAgICAjIFJVUEVFIE1BUksKKwlcdWUwNzQ+OyAgICAgICAjIFJVUEVFIFNJR04KKwlcdWUwNzU+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUKKwlcdWUwNzY+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBUV08KKwlcdWUwNzc+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBUSFJFRQorCVx1ZTA3OD47ICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIEZPVVIKKwlcdWUwNzk+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUgTEVTUyBUSEFOIFRIRSBERU5PTUlOQVRPUgorCVx1ZTA3QT47ICAgICAgICMgQ1VSUkVOQ1kgREVOT01JTkFUT1IgU0lYVEVFTgorCVx1ZTA3Qj47ICAgICAgICMgSVNTSEFSCisJXHVFMDdDPjsgICAgICAgIyBUSVBQSQorCVx1RTA3RD47ICAgICAgICMgQUREQUsKKwlcdUUwN0U+OyAgICAgICAjIElSSQorCVx1RTA3Rj47ICAgICAgICMgVVJBCisJXHVFMDgwPjsgICAgICAgIyBFSyBPTktBUgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19NYWxheWFsYW0udHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX01hbGF5YWxhbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2IzMjM4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19NYWxheWFsYW0udHh0CkBAIC0wLDAgKzEsMTQ0IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfTWFsYXlhbGFtLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDkvMTkgMTg6MTE6MjMgJAorIyAkUmV2aXNpb246IDEuOSAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJbnRlckluZGljLU1hbGF5YWxhbQorIzo6IE5GRCAoTkZDKSA7CitcdWUwMDE+XHUwZDAyOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwZDAxPlx1MGQwMiA9IFNJR04gQ0FORFJBQklORFU+U0lHTiBBTlVTVkFSQQorXHVlMDAyPlx1MGQwMjsgIyBTSUdOIEFOVVNWQVJBCitcdWUwMDM+XHUwZDAzOyAjIFNJR04gVklTQVJHQQorXHVlMDA1Plx1MGQwNTsgIyBMRVRURVIgQQorXHVlMDA2Plx1MGQwNjsgIyBMRVRURVIgQUEKK1x1ZTAwNz5cdTBkMDc7ICMgTEVUVEVSIEkKK1x1ZTAwOD5cdTBkMDg7ICMgTEVUVEVSIElJCitcdWUwMDk+XHUwZDA5OyAjIExFVFRFUiBVCitcdWUwMGE+XHUwZDBhOyAjIExFVFRFUiBVVQorXHVlMDBiPlx1MGQwYjsgIyBMRVRURVIgVk9DQUxJQyBSCitcdWUwMGM+XHUwZDBjOyAjIExFVFRFUiBWT0NBTElDIEwKK1x1ZTAwZD5cdTBkMGU7ICMgRkFMTExCQUNLIExFVFRFUiBFCitcdWUwMGU+XHUwZDBlOyAjIExFVFRFUiBFCitcdWUwMGY+XHUwZDBmOyAjIExFVFRFUiBFRQorXHVlMDEwPlx1MGQxMDsgIyBMRVRURVIgQUkKK1x1ZTAxMT5cdTBkMTI7ICMgRkFMTEJBQ0sgVE8gTworXHVlMDEyPlx1MGQxMjsgIyBMRVRURVIgTworXHVlMDEzPlx1MGQxMzsgIyBMRVRURVIgT08KK1x1ZTAxND5cdTBkMTQ7ICMgTEVUVEVSIEFVCitcdWUwMTU+XHUwZDE1OyAjIExFVFRFUiBLQQorXHVlMDE2Plx1MGQxNjsgIyBMRVRURVIgS0hBCitcdWUwMTc+XHUwZDE3OyAjIExFVFRFUiBHQQorXHVlMDE4Plx1MGQxODsgIyBMRVRURVIgR0hBCitcdWUwMTk+XHUwZDE5OyAjIExFVFRFUiBOR0EKK1x1ZTAxYT5cdTBkMWE7ICMgTEVUVEVSIENBCitcdWUwMWI+XHUwZDFiOyAjIExFVFRFUiBDSEEKK1x1ZTAxYz5cdTBkMWM7ICMgTEVUVEVSIEpBCitcdWUwMWQ+XHUwZDFkOyAjIExFVFRFUiBKSEEKK1x1ZTAxZT5cdTBkMWU7ICMgTEVUVEVSIE5ZQQorXHVlMDFmPlx1MGQxZjsgIyBMRVRURVIgVFRBCitcdWUwMjA+XHUwZDIwOyAjIExFVFRFUiBUVEhBCitcdWUwMjE+XHUwZDIxOyAjIExFVFRFUiBEREEKK1x1ZTAyMj5cdTBkMjI7ICMgTEVUVEVSIERESEEKK1x1ZTAyMz5cdTBkMjM7ICMgTEVUVEVSIE5OQQorXHVlMDI0Plx1MGQyNDsgIyBMRVRURVIgVEEKK1x1ZTAyNT5cdTBkMjU7ICMgTEVUVEVSIFRIQQorXHVlMDI2Plx1MGQyNjsgIyBMRVRURVIgREEKK1x1ZTAyNz5cdTBkMjc7ICMgTEVUVEVSIERIQQorXHVlMDI4Plx1MGQyODsgIyBMRVRURVIgTkEKK1x1ZTAyOT5cdTBkMjg7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBkMjk+XHUwZDI4ID0gTEVUVEVSIE5OTkE+TEVUVEVSIE5BCitcdWUwMmE+XHUwZDJhOyAjIExFVFRFUiBQQQorXHVlMDJiPlx1MGQyYjsgIyBMRVRURVIgUEhBCitcdWUwMmM+XHUwZDJjOyAjIExFVFRFUiBCQQorXHVlMDJkPlx1MGQyZDsgIyBMRVRURVIgQkhBCitcdWUwMmU+XHUwZDJlOyAjIExFVFRFUiBNQQorXHVlMDJmPlx1MGQyZjsgIyBMRVRURVIgWUEKK1x1ZTAzMFx1ZTAzYz5cdTBkMzE7CitcdWUwMzA+XHUwZDMwOyAjIExFVFRFUiBSQQorXHVlMDMxPlx1MGQzMTsgIyBMRVRURVIgUlJBCitcdWUwMzI+XHUwZDMyOyAjIExFVFRFUiBMQQorXHVlMDMzXHVlMDNjPlx1MGQzNDsKK1x1ZTAzMz5cdTBkMzM7ICMgTEVUVEVSIExMQQorXHVlMDM0Plx1MGQzNDsgIyBMRVRURVIgTExMQQorXHVlMDM1Plx1MGQzNTsgIyBMRVRURVIgVkEKK1x1ZTAzNj5cdTBkMzY7ICMgTEVUVEVSIFNIQQorXHVlMDM3Plx1MGQzNzsgIyBMRVRURVIgU1NBCitcdWUwMzg+XHUwZDM4OyAjIExFVFRFUiBTQQorXHVlMDM5Plx1MGQzOTsgIyBMRVRURVIgSEEKKworXHVlMDNjPjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgTlVLVEEKK1x1ZTAzZD47ICMgRkFMTEJBQ0sgQkxPVyBBV0FZIEFWQUdSQUhBCisKK1x1ZTAzZT5cdTBkM2U7ICMgVk9XRUwgU0lHTiBBQQorXHVlMDNmPlx1MGQzZjsgIyBWT1dFTCBTSUdOIEkKK1x1ZTA0MD5cdTBkNDA7ICMgVk9XRUwgU0lHTiBJSQorXHVlMDQxPlx1MGQ0MTsgIyBWT1dFTCBTSUdOIFUKK1x1ZTA0Mj5cdTBkNDI7ICMgVk9XRUwgU0lHTiBVVQorXHVlMDQzPlx1MGQ0MzsgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorXHVlMDQ0PjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgVk9XRUwgU0lHTiBWT0NBTElDIFJSCitcdWUwNDU+XHUwZDNlOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwZDQ1Plx1MGQzZSA9IFZPV0VMIFNJR04gQ0FORFJBIEU+Vk9XRUwgU0lHTiBBQQorXHVlMDQ2Plx1MGQ0NjsgIyBWT1dFTCBTSUdOIEUKK1x1ZTA0Nz5cdTBkNDc7ICMgVk9XRUwgU0lHTiBFRQorXHVlMDQ4Plx1MGQ0ODsgIyBWT1dFTCBTSUdOIEFJCitcdWUwNDk+XHUwZDRiOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwZDQ5Plx1MGQ0YiA9IFZPV0VMIFNJR04gQ0FORFJBIE8+Vk9XRUwgU0lHTiBPTworXHVlMDRhPlx1MGQ0YTsgIyBWT1dFTCBTSUdOIE8KK1x1ZTA0Yj5cdTBkNGI7ICMgVk9XRUwgU0lHTiBPTworXHVlMDRjPlx1MGQ0YzsgIyBWT1dFTCBTSUdOIEFVCitcdWUwNGQ+XHUwZDRkOyAjIFNJR04gVklSQU1BCitcdWUwNTA+XHUwZDEzXHUwZDAyOyAjIFVOTUFQUEVEIEludGVySW5kaWMtTWFsYXlhbGFtOiBPTQorXHVlMDUxPjsKK1x1ZTA1Mj47CitcdWUwNTM+OworXHVlMDU0PjsKK1x1ZTA1NT47ICMgRkFMTEJBQ0sgQkxPVyBBV0FZIExFTkdUSCBNQVJLCitcdWUwNTY+XHUwZDQ4OyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwZDU2Plx1MGQ0OCA9IEFJIExFTkdUSCBNQVJLPlZPV0VMIFNJR04gQUkKK1x1ZTA1Nz5cdTBkNTc7ICMgQVUgTEVOR1RIIE1BUksKK1x1ZTA1OD5cdTBkMTU7ICMgRkFMTEJBQ0sKK1x1ZTA1OT5cdTBkMTY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBkNTk+XHUwZDE2ID0gTEVUVEVSIEtISEE+TEVUVEVSIEtIQQorXHVlMDVhPlx1MGQxNzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGQ1YT5cdTBkMTcgPSBMRVRURVIgR0hIQT5MRVRURVIgR0EKK1x1ZTA1Yj5cdTBkMWM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBkNWI+XHUwZDFjID0gTEVUVEVSIFpBPkxFVFRFUiBKQQorXHVlMDVkPlx1MGQyMjsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGQ1ZD5cdTBkMjIgPSBMRVRURVIgUkhBPkxFVFRFUiBEREhBCitcdWUwNWM+XHUwZDIxOyAjIEZBTExCQUNLCitcdWUwNWU+XHUwZDJiOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwZDVlPlx1MGQyYiA9IExFVFRFUiBGQT5MRVRURVIgUEhBCitcdWUwNWY+XHUwZDJmOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwZDVmPlx1MGQyZiA9IExFVFRFUiBZWUE+TEVUVEVSIFlBCitcdWUwNjA+XHUwZDYwOyAjIExFVFRFUiBWT0NBTElDIFJSCitcdWUwNjE+XHUwZDYxOyAjIExFVFRFUiBWT0NBTElDIExMCitcdWUwNjI+OyAjIEZBTExCQUNLIEJMT1cgQVdBWSBWT1dFTCBTSUdOIFZPQ0FMSUMgTAorXHVlMDYzPjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgVk9XRUwgU0lHTiBWT0NBTElDIExMCitcdWUwNjQ+Jy4nICAgOyAjIEZBTExCQUNLIEZPUiBEQU5EQQorXHVlMDY1PicuJyAgIDsgIyBGQUxMQkFDSyBGT1IgRE9VQkxFIERBTkRBICAgICAgCitcdWUwNjY+XHUwZDY2OyAjIERJR0lUIFpFUk8KK1x1ZTA2Nz5cdTBkNjc7ICMgRElHSVQgT05FCitcdWUwNjg+XHUwZDY4OyAjIERJR0lUIFRXTworXHVlMDY5Plx1MGQ2OTsgIyBESUdJVCBUSFJFRQorXHVlMDZhPlx1MGQ2YTsgIyBESUdJVCBGT1VSCitcdWUwNmI+XHUwZDZiOyAjIERJR0lUIEZJVkUKK1x1ZTA2Yz5cdTBkNmM7ICMgRElHSVQgU0lYCitcdWUwNmQ+XHUwZDZkOyAjIERJR0lUIFNFVkVOCitcdWUwNmU+XHUwZDZlOyAjIERJR0lUIEVJR0hUCitcdWUwNmY+XHUwZDZmOyAjIERJR0lUIE5JTkUKK1x1ZTA3MD47ICAgICAgICMgQUJCUkVWSUFUSU9OIFNJR04KK1x1ZTA3MT5cdTBkMzA7ICMgTEVUVEVSIFJBIFdJVEggTUlERExFIERJQUdPTkFMCitcdWUwNzI+XHUwZDMwOyAjIExFVFRFUiBSQSBXSVRIIExPV0VSIERJQUdPTkFMCitcdWUwNzM+OyAgICAgICAjIFJVUEVFIE1BUksKK1x1ZTA3ND47ICAgICAgICMgUlVQRUUgU0lHTgorXHVlMDc1PjsgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgT05FCitcdWUwNzY+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBUV08KK1x1ZTA3Nz47ICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRIUkVFCitcdWUwNzg+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBGT1VSCitcdWUwNzk+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUgTEVTUyBUSEFOIFRIRSBERU5PTUlOQVRPUgorXHVlMDdBPjsgICAgICAgIyBDVVJSRU5DWSBERU5PTUlOQVRPUiBTSVhURUVOCitcdWUwN0I+OyAgICAgICAjIElTU0hBUgorXHVFMDdDPjsgICAgICAgIyBUSVBQSQorXHVFMDdEPjsgICAgICAgIyBBRERBSworXHVFMDdFPjsgICAgICAgIyBJUkkKK1x1RTA3Rj47ICAgICAgICMgVVJBCitcdUUwODA+OyAgICAgICAjIEVLIE9OS0FSCisKKzAgPiBcdTBkNjY7ICAgICAgICMgRkFMTEJBQ0sgRk9SIFRBTUlMCisxID4gXHUwZDY3OworCisjICAgIDo6IE5GQyAoTkZEKSA7CisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX09yaXlhLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19Pcml5YS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTdhNmM1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19Pcml5YS50eHQKQEAgLTAsMCArMSwxNDAgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19Pcml5YS50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIzICQKKyMgJFJldmlzaW9uOiAxLjkgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSW50ZXJJbmRpYy1Pcml5YQorIzo6IE5GRCAoTkZDKSA7CitcdWUwMDE+XHUwYjAxOyAjIFNJR04gQ0FORFJBQklORFUKK1x1ZTAwMj5cdTBiMDI7ICMgU0lHTiBBTlVTVkFSQQorXHVlMDAzPlx1MGIwMzsgIyBTSUdOIFZJU0FSR0EKK1x1ZTAwNT5cdTBiMDU7ICMgTEVUVEVSIEEKK1x1ZTAwNj5cdTBiMDY7ICMgTEVUVEVSIEFBCitcdWUwMDc+XHUwYjA3OyAjIExFVFRFUiBJCitcdWUwMDg+XHUwYjA4OyAjIExFVFRFUiBJSQorXHVlMDA5Plx1MGIwOTsgIyBMRVRURVIgVQorXHVlMDBhPlx1MGIwYTsgIyBMRVRURVIgVVUKK1x1ZTAwYj5cdTBiMGI7ICMgTEVUVEVSIFZPQ0FMSUMgUgorXHVlMDBjPlx1MGIwYzsgIyBMRVRURVIgVk9DQUxJQyBMCitcdWUwMGQ+XHUwYjBmOyAjIEZBTExCQUNLCitcdWUwMGU+XHUwYjBmOyAjIEZBTExCQUNLCitcdWUwMGY+XHUwYjBmOyAjIExFVFRFUiBFCitcdWUwMTA+XHUwYjEwOyAjIExFVFRFUiBBSQorXHVlMDExPlx1MGIxMzsgIyBGQUxMQkFDSworXHVlMDEyPlx1MGIxMzsgIyBGQUxMQkFDSworXHVlMDEzPlx1MGIxMzsgIyBGQUxMQkFDSyAgTEVUVEVSIE9PIChcdTBiMTMgPSBMRVRURVIgTykKK1x1ZTAxND5cdTBiMTQ7ICMgTEVUVEVSIEFVCitcdWUwMTU+XHUwYjE1OyAjIExFVFRFUiBLQQorXHVlMDE2Plx1MGIxNjsgIyBMRVRURVIgS0hBCitcdWUwMTc+XHUwYjE3OyAjIExFVFRFUiBHQQorXHVlMDE4Plx1MGIxODsgIyBMRVRURVIgR0hBCitcdWUwMTk+XHUwYjE5OyAjIExFVFRFUiBOR0EKK1x1ZTAxYT5cdTBiMWE7ICMgTEVUVEVSIENBCitcdWUwMWI+XHUwYjFiOyAjIExFVFRFUiBDSEEKK1x1ZTAxYz5cdTBiMWM7ICMgTEVUVEVSIEpBCitcdWUwMWQ+XHUwYjFkOyAjIExFVFRFUiBKSEEKK1x1ZTAxZT5cdTBiMWU7ICMgTEVUVEVSIE5ZQQorXHVlMDFmPlx1MGIxZjsgIyBMRVRURVIgVFRBCitcdWUwMjA+XHUwYjIwOyAjIExFVFRFUiBUVEhBCitcdWUwMjE+XHUwYjIxOyAjIExFVFRFUiBEREEKK1x1ZTAyMj5cdTBiMjI7ICMgTEVUVEVSIERESEEKK1x1ZTAyMz5cdTBiMjM7ICMgTEVUVEVSIE5OQQorXHVlMDI0Plx1MGIyNDsgIyBMRVRURVIgVEEKK1x1ZTAyNT5cdTBiMjU7ICMgTEVUVEVSIFRIQQorXHVlMDI2Plx1MGIyNjsgIyBMRVRURVIgREEKK1x1ZTAyNz5cdTBiMjc7ICMgTEVUVEVSIERIQQorXHVlMDI4Plx1MGIyODsgIyBMRVRURVIgTkEKK1x1ZTAyOT5cdTBiMjhcdTBiM2M7ICMgRkFMTEJBQ0sgXHUwYjI5Plx1MGIyOCA9IExFVFRFUiBOTk5BPkxFVFRFUiBOQQorXHVlMDJhPlx1MGIyYTsgIyBMRVRURVIgUEEKK1x1ZTAyYj5cdTBiMmI7ICMgTEVUVEVSIFBIQQorXHVlMDJjPlx1MGIyYzsgIyBMRVRURVIgQkEKK1x1ZTAyZD5cdTBiMmQ7ICMgTEVUVEVSIEJIQQorXHVlMDJlPlx1MGIyZTsgIyBMRVRURVIgTUEKK1x1ZTAyZj5cdTBiMmY7ICMgTEVUVEVSIFlBCitcdWUwMzA+XHUwYjMwOyAjIExFVFRFUiBSQQorXHVlMDMxPlx1MGI1YzsgIyBMRVRURVIgUlJBCitcdWUwMzI+XHUwYjMyOyAjIExFVFRFUiBMQQorXHVlMDMzPlx1MGIzMzsgIyBMRVRURVIgTExBCitcdWUwMzQ+XHUwYjMzXHUwYjNjOyAjIEZBTExCQUNLICBMRVRURVIgTExMQT5MRVRURVIgTExBCitcdWUwMzU+XHUwYjJjOyAjIEZBTExCQUNLIExFVFRFUiBWQT5MRVRURVIgQkEKK1x1ZTAzNj5cdTBiMzY7ICMgTEVUVEVSIFNIQQorXHVlMDM3Plx1MGIzNzsgIyBMRVRURVIgU1NBCitcdWUwMzg+XHUwYjM4OyAjIExFVFRFUiBTQQorXHVlMDM5Plx1MGIzOTsgIyBMRVRURVIgSEEKK1x1ZTAzYz5cdTBiM2M7ICMgU0lHTiBOVUtUQQorXHVlMDNkPlx1MGIzZDsgIyBTSUdOIEFWQUdSQUhBCitcdWUwM2U+XHUwYjNlOyAjIFZPV0VMIFNJR04gQUEKK1x1ZTAzZj5cdTBiM2Y7ICMgVk9XRUwgU0lHTiBJCitcdWUwNDA+XHUwYjQwOyAjIFZPV0VMIFNJR04gSUkKK1x1ZTA0MT5cdTBiNDE7ICMgVk9XRUwgU0lHTiBVCitcdWUwNDI+XHUwYjQyOyAjIFZPV0VMIFNJR04gVVUKK1x1ZTA0Mz5cdTBiNDM7ICMgVk9XRUwgU0lHTiBWT0NBTElDIFIKK1x1ZTA0ND5cdTBiNDNcdTBiM2M7ICMgRkFMTEJBQ0sgXHUwYjQ0Plx1MGI0M1x1MGIzYyA9IFZPV0VMIFNJR04gVk9DQUxJQyBSUj5WT1dFTCBTSUdOIFZPQ0FMSUMgUi5TSUdOIE5VS1RBCitcdWUwNDU+XHUwYjQ3OyAjIEZBTExCQUNLCitcdWUwNDY+XHUwYjQ3OyAjIEZBTExCQUNLCitcdWUwNDc+XHUwYjQ3OyAjIFZPV0VMIFNJR04gRQorXHVlMDQ4Plx1MGI0ODsgIyBWT1dFTCBTSUdOIEFJCitcdWUwNDk+XHUwYjRiOyAjIEZBTExCQUNLCitcdWUwNGE+XHUwYjRiOyAjIEZBTExCQUNLCitcdWUwNGI+XHUwYjRiOyAjIFZPV0VMIFNJR04gRQorXHVlMDRjPlx1MGI0YzsgIyBWT1dFTCBTSUdOIEFVCitcdWUwNGQ+XHUwYjRkOyAjIFNJR04gVklSQU1BCitcdWUwNTA+XHUwYjEzXHUwYjAxOyAjIEZBTExCQUNLIFx1MGI1MD5cdTBiMTNcdTBiMDEgPSBPTT5MRVRURVIgTy5TSUdOIENBTkRSQUJJTkRVCitcdWUwNTE+OworXHVlMDUyPjsKK1x1ZTA1Mz47CitcdWUwNTQ+OworXHVlMDU1PjsgIyBVTk1BUFBFRCBJbnRlckluZGljLU9yaXlhOiBMRU5HVEggTUFSSworXHVlMDU2Plx1MGI1NjsgIyBBSSBMRU5HVEggTUFSSworXHVlMDU3Plx1MGI1NzsgIyBBVSBMRU5HVEggTUFSSworXHVlMDU5Plx1MGIxNlx1MGIzYzsgIyBGQUxMQkFDSyBcdTBiNTk+XHUwYjE2XHUwYjNjID0gTEVUVEVSIEtISEE+TEVUVEVSIEtIQS5TSUdOIE5VS1RBCitcdWUwNTg+XHUwYjE1XHUwYjNjOyAjIEZBTExCQUNLCitcdWUwNWE+XHUwYjE3XHUwYjNjOyAjIEZBTExCQUNLIFx1MGI1YT5cdTBiMTdcdTBiM2MgPSBMRVRURVIgR0hIQT5MRVRURVIgR0EuU0lHTiBOVUtUQQorXHVlMDViPlx1MGIxY1x1MGIzYzsgIyBGQUxMQkFDSyBcdTBiNWI+XHUwYjFjXHUwYjNjID0gTEVUVEVSIFpBPkxFVFRFUiBKQS5TSUdOIE5VS1RBCitcdWUwNWM+XHUwYjIxXHUwYjNjOyAjIEZBTExCQUNLCitcdWUwNWQ+XHUwYjVkOyAjIExFVFRFUiBSSEEKK1x1ZTA1ZT5cdTBiMmJcdTBiM2M7ICMgRkFMTEJBQ0sgXHUwYjVlPlx1MGIyYlx1MGIzYyA9IExFVFRFUiBGQT5MRVRURVIgUEhBLlNJR04gTlVLVEEKK1x1ZTA1Zj5cdTBiNWY7ICMgTEVUVEVSIFlZQQorXHVlMDYwPlx1MGI2MDsgIyBMRVRURVIgVk9DQUxJQyBSUgorXHVlMDYxPlx1MGI2MTsgIyBMRVRURVIgVk9DQUxJQyBMTAorXHVlMDYyPlx1MGI1Nlx1MGIzYzsgIyBGQUxMQkFDSyBcdTBiNjI+XHUwYjU2XHUwYjNjID0gVk9XRUwgU0lHTiBWT0NBTElDIEw+QUkgTEVOR1RIIE1BUksuU0lHTiBOVUtUQQorXHVlMDYzPlx1MGI1N1x1MGIzYzsgIyBGQUxMQkFDSyBcdTBiNjM+XHUwYjU3XHUwYjNjID0gVk9XRUwgU0lHTiBWT0NBTElDIExMPkFVIExFTkdUSCBNQVJLLlNJR04gTlVLVEEKK1x1RTA2ND5cdTA5NjQ7ICMgREFOREEKK1x1RTA2NT5cdTA5NjU7ICMgRE9VQkxFIERBTkRBCitcdWUwNjY+XHUwYjY2OyAjIERJR0lUIFpFUk8KK1x1ZTA2Nz5cdTBiNjc7ICMgRElHSVQgT05FCitcdWUwNjg+XHUwYjY4OyAjIERJR0lUIFRXTworXHVlMDY5Plx1MGI2OTsgIyBESUdJVCBUSFJFRQorXHVlMDZhPlx1MGI2YTsgIyBESUdJVCBGT1VSCitcdWUwNmI+XHUwYjZiOyAjIERJR0lUIEZJVkUKK1x1ZTA2Yz5cdTBiNmM7ICMgRElHSVQgU0lYCitcdWUwNmQ+XHUwYjZkOyAjIERJR0lUIFNFVkVOCitcdWUwNmU+XHUwYjZlOyAjIERJR0lUIEVJR0hUCitcdWUwNmY+XHUwYjZmOyAjIERJR0lUIE5JTkUKK1x1ZTA3MD47ICAgICAgICMgQUJCUkVWSUFUSU9OIFNJR04KK1x1ZTA3MT5cdTBiMzA7ICMgTEVUVEVSIFJBIFdJVEggTUlERExFIERJQUdPTkFMCitcdWUwNzI+XHUwYjMwOyAjIExFVFRFUiBSQSBXSVRIIExPV0VSIERJQUdPTkFMCitcdWUwNzM+OyAgICAgICAjIFJVUEVFIE1BUksKK1x1ZTA3ND47ICAgICAgICMgUlVQRUUgU0lHTgorXHVlMDc1PjsgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgT05FCitcdWUwNzY+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBUV08KK1x1ZTA3Nz47ICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRIUkVFCitcdWUwNzg+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBGT1VSCitcdWUwNzk+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUgTEVTUyBUSEFOIFRIRSBERU5PTUlOQVRPUgorXHVlMDdBPjsgICAgICAgIyBDVVJSRU5DWSBERU5PTUlOQVRPUiBTSVhURUVOCitcdWUwN0I+XHUwQjcwOyAjIElTU0hBUgorXHVFMDdDPjsgICAgICAgIyBUSVBQSQorXHVFMDdEPjsgICAgICAgIyBBRERBSworXHVFMDdFPjsgICAgICAgIyBJUkkKK1x1RTA3Rj47ICAgICAgICMgVVJBCitcdUUwODA+OyAgICAgICAjIEVLIE9OS0FSCisKKzAgPiBcdTBiNjY7ICAgICMgRkFMTEJBQ0sgRk9SIFRBTUlMCisxID4gXHUwYjY3OworCisjICAgIDo6IE5GQyAoTkZEKSA7CisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX1RhbWlsLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19UYW1pbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGI2ZmZiZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19UYW1pbC50eHQKQEAgLTAsMCArMSwxNTQgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19UYW1pbC50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIzICQKKyMgJFJldmlzaW9uOiAxLjEwICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEludGVySW5kaWMtVGFtaWwKKyM6OiBORkQgKE5GQykgOworXHVlMDAxPlx1MGI4MjsgIyBGQUxMQkFDSyBTSUdOIENBTkRSQUJJTkRVCitcdWUwMDI+XHUwYjgyOyAjIFNJR04gQU5VU1ZBUkEKK1x1ZTAwMz5cdTBiODM7ICMgU0lHTiBWSVNBUkdBCitcdWUwMDU+XHUwYjg1OyAjIExFVFRFUiBBCitcdWUwMDY+XHUwYjg2OyAjIExFVFRFUiBBQQorXHVlMDA3Plx1MGI4NzsgIyBMRVRURVIgSQorXHVlMDA4Plx1MGI4ODsgIyBMRVRURVIgSUkKK1x1ZTAwOT5cdTBiODk7ICMgTEVUVEVSIFUKK1x1ZTAwYT5cdTBiOGE7ICMgTEVUVEVSIFVVCitcdWUwMGI+XHUwYmIwXHUwYmJmOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYjhiPlx1MGJiMFx1MGJiZiA9IExFVFRFUiBWT0NBTElDIFI+TEVUVEVSIFJBLlZPV0VMIFNJR04gSQorXHVlMDBjPlx1MGI4NzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGI4Yz5cdTBiODcgPSBMRVRURVIgVk9DQUxJQyBMPkxFVFRFUiBJCitcdWUwMGQ+XHUwYjhmOyAjIEZBTExCQUNLCitcdWUwMGU+XHUwYjhlOyAjIExFVFRFUiBFCitcdWUwMGY+XHUwYjhmOyAjIExFVFRFUiBFRQorXHVlMDEwPlx1MGI5MDsgIyBMRVRURVIgQUkKK1x1ZTAxMT5cdTBiOTI7ICMgRkFMTEJBQ0sKK1x1ZTAxMj5cdTBiOTI7ICMgTEVUVEVSIE8KK1x1ZTAxMz5cdTBiOTM7ICMgTEVUVEVSIE9PCitcdWUwMTQ+XHUwYjk0OyAjIExFVFRFUiBBVQorXHVlMDE1Plx1MGI5NTsgIyBMRVRURVIgS0EKK1x1ZTAxNj5cdTBiOTU7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiOTY+XHUwYjk1ID0gTEVUVEVSIEtIQT5MRVRURVIgS0EKK1x1ZTAxNz5cdTBiOTU7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiOTc+XHUwYjk1ID0gTEVUVEVSIEdBPkxFVFRFUiBLQQorXHVlMDE4Plx1MGI5NTsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGI5OD5cdTBiOTUgPSBMRVRURVIgR0hBPkxFVFRFUiBLQQorXHVlMDE5Plx1MGI5OTsgIyBMRVRURVIgTkdBCitcdWUwMWE+XHUwYjlhOyAjIExFVFRFUiBDQQorXHVlMDFiPlx1MGI5YTsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGI5Yj5cdTBiOWEgPSBMRVRURVIgQ0hBPkxFVFRFUiBDQQorXHVlMDFjPlx1MGI5YzsgIyBMRVRURVIgSkEKK1x1ZTAxZD5cdTBiOWE7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiOWQ+XHUwYjlhID0gTEVUVEVSIEpIQT5MRVRURVIgQ0EKK1x1ZTAxZT5cdTBiOWU7ICMgTEVUVEVSIE5ZQQorXHVlMDFmPlx1MGI5ZjsgIyBMRVRURVIgVFRBCitcdWUwMjA+XHUwYjlmOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYmEwPlx1MGI5ZiA9IExFVFRFUiBUVEhBPkxFVFRFUiBUVEEKK1x1ZTAyMT5cdTBiOWY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiYTE+XHUwYjlmID0gTEVUVEVSIEREQT5MRVRURVIgVFRBCitcdWUwMjI+XHUwYjlmOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYmEyPlx1MGI5ZiA9IExFVFRFUiBEREhBPkxFVFRFUiBUVEEKK1x1ZTAyMz5cdTBiYTM7ICMgTEVUVEVSIE5OQQorXHVlMDI0Plx1MGJhNDsgIyBMRVRURVIgVEEKK1x1ZTAyNT5cdTBiYTQ7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiYTU+XHUwYmE0ID0gTEVUVEVSIFRIQT5MRVRURVIgVEEKK1x1ZTAyNj5cdTBiYTQ7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiYTY+XHUwYmE0ID0gTEVUVEVSIERBPkxFVFRFUiBUQQorXHVlMDI3Plx1MGJhNDsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGJhNz5cdTBiYTQgPSBMRVRURVIgREhBPkxFVFRFUiBUQQorXHVlMDI4XHVlMDNjPlx1MGJhOTsKK1x1ZTAyOD5cdTBiYTg7ICMgTEVUVEVSIE5BCitcdWUwMjk+XHUwYmE5OyAjIExFVFRFUiBOTk5BCitcdWUwMmE+XHUwYmFhOyAjIExFVFRFUiBQQQorXHVlMDJiPlx1MGJhYTsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGJhYj5cdTBiYWEgPSBMRVRURVIgUEhBPkxFVFRFUiBQQQorXHVlMDJjPlx1MGJhYTsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGJhYz5cdTBiYWEgPSBMRVRURVIgQkE+TEVUVEVSIFBBCitcdWUwMmQ+XHUwYmFhOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYmFkPlx1MGJhYSA9IExFVFRFUiBCSEE+TEVUVEVSIFBBCitcdWUwMmU+XHUwYmFlOyAjIExFVFRFUiBNQQorXHVlMDJmPlx1MGJhZjsgIyBMRVRURVIgWUEKK1x1ZTAzMFx1ZTAzYz5cdTBiYjE7CitcdWUwMzA+XHUwYmIwOyAjIExFVFRFUiBSQQorXHVlMDMxPlx1MGJiMTsgIyBMRVRURVIgUlJBCitcdWUwMzI+XHUwYmIyOyAjIExFVFRFUiBMQQorXHVlMDMzXHVlMDNjPlx1MGJiNDsKK1x1ZTAzMz5cdTBiYjM7ICMgTEVUVEVSIExMQQorXHVlMDM0Plx1MGJiNDsgIyBMRVRURVIgTExMQQorXHVlMDM1Plx1MGJiNTsgIyBMRVRURVIgVkEKK1x1ZTAzNj5cdTBiYjc7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiYjY+XHUwYmI3ID0gTEVUVEVSIFNIQT5MRVRURVIgU1NBCitcdWUwMzc+XHUwYmI3OyAjIExFVFRFUiBTU0EKK1x1ZTAzOD5cdTBiYjg7ICMgTEVUVEVSIFNBCitcdWUwMzk+XHUwYmI5OyAjIExFVFRFUiBIQQorCitcdWUwM2M+OyAjIEZBTExCQUNLIEJMT1cgQVdBWSBOVUtUQQorXHVlMDNkPjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgQVZBR1JBSEEKKworXHVlMDNlPlx1MGJiZTsgIyBWT1dFTCBTSUdOIEFBCitcdWUwM2Y+XHUwYmJmOyAjIFZPV0VMIFNJR04gSQorXHVlMDQwPlx1MGJjMDsgIyBWT1dFTCBTSUdOIElJCitcdWUwNDE+XHUwYmMxOyAjIFZPV0VMIFNJR04gVQorXHVlMDQyPlx1MGJjMjsgIyBWT1dFTCBTSUdOIFVVCitcdWUwNDM+XHUwYmNkXHUwYmIwXHUwYmJmOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYmMzPlx1MGJjZFx1MGJiMFx1MGJiZiA9IFZPV0VMIFNJR04gVk9DQUxJQyBSPlNJR04gVklSQU1BLkxFVFRFUiBSQS5WT1dFTCBTSUdOIEkKK1x1ZTA0ND5cdTBiY2RcdTBiYjBcdTBiYmY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiYzQ+XHUwYmNkXHUwYmIwXHUwYmJmID0gVk9XRUwgU0lHTiBWT0NBTElDIFJSPlNJR04gVklSQU1BLkxFVFRFUiBSQS5WT1dFTCBTSUdOIEkKK1x1ZTA0NT5cdTBiYmU7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiYzU+XHUwYmJlID0gVk9XRUwgU0lHTiBDQU5EUkEgRT5WT1dFTCBTSUdOIEFBCitcdWUwNDY+XHUwYmM2OyAjIFZPV0VMIFNJR04gRQorXHVlMDQ3Plx1MGJjNzsgIyBWT1dFTCBTSUdOIEVFCitcdWUwNDg+XHUwYmM4OyAjIFZPV0VMIFNJR04gQUkKK1x1ZTA0OT5cdTBiYmU7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiYzk+XHUwYmJlID0gVk9XRUwgU0lHTiBDQU5EUkEgTz5WT1dFTCBTSUdOIEFBCitcdWUwNGE+XHUwYmNhOyAjIFZPV0VMIFNJR04gTworXHVlMDRiPlx1MGJjYjsgIyBWT1dFTCBTSUdOIE9PCitcdWUwNGM+XHUwYmNjOyAjIFZPV0VMIFNJR04gQVUKK1x1ZTA0ZD5cdTBiY2Q7ICMgU0lHTiBWSVJBTUEKK1x1ZTA1MD5cdTBiOTNcdTBiYWVcdTBiY2Q7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiZDA+XHUwYjkzXHUwYmFlXHUwYmNkID0gT00+TEVUVEVSIE9PLkxFVFRFUiBNQS5TSUdOIFZJUkFNQQorXHVlMDUxPjsKK1x1ZTA1Mj47CitcdWUwNTM+OworXHVlMDU0PjsKK1x1ZTA1NT47ICMgVU5NQVBQRUQgSW50ZXJJbmRpYy1UYW1pbDogTEVOR1RIIE1BUksKK1x1ZTA1Nj5cdTBiYzg7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiZDY+XHUwYmM4ID0gQUkgTEVOR1RIIE1BUks+Vk9XRUwgU0lHTiBBSQorXHVlMDU3Plx1MGJkNzsgIyBBVSBMRU5HVEggTUFSSworXHVlMDU4Plx1MGI5NTsgIyBGQUxMQkFDSworXHVlMDU5Plx1MGI5NTsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGJkOT5cdTBiOTUgPSBMRVRURVIgS0hIQT5MRVRURVIgS0EKK1x1ZTA1YT5cdTBiOTU7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiZGE+XHUwYjk1ID0gTEVUVEVSIEdISEE+TEVUVEVSIEtBCitcdWUwNWI+XHUwYjljOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYmRiPlx1MGI5YyA9IExFVFRFUiBaQT5MRVRURVIgSkEKK1x1ZTA1Yz5cdTBiYTQ7ICMgRkFMTEJBQ0sKK1x1ZTA1ZD5cdTBiOWY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiZGQ+XHUwYjlmID0gTEVUVEVSIFJIQT5MRVRURVIgVFRBCitcdWUwNWU+XHUwYmFhOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYmRlPlx1MGJhYSA9IExFVFRFUiBGQT5MRVRURVIgUEEKK1x1ZTA1Zj5cdTBiYWY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiZGY+XHUwYmFmID0gTEVUVEVSIFlZQT5MRVRURVIgWUEKK1x1ZTA2MD5cdTBiYjBcdTBiYmY7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBiZTA+XHUwYmIwXHUwYmJmID0gTEVUVEVSIFZPQ0FMSUMgUlI+TEVUVEVSIFJBLlZPV0VMIFNJR04gSQorXHVlMDYxPlx1MGI4ODsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGJlMT5cdTBiODggPSBMRVRURVIgVk9DQUxJQyBMTD5MRVRURVIgSUkKK1x1ZTA2Mj5cdTBiYmY7IyBGQUxMQkFDSyBWT1dFTCBTSUdOIFZPQ0FMSUMgTAorXHVlMDYzPlx1MGJjMDsjIEZBTExCQUNLIFZPV0VMIFNJR04gVk9DQUxJQyBMTAorXHVlMDY0PicuJyAgIDsgIyBGQUxMQkFDSyBGT1IgREFOREEKK1x1ZTA2NT4nLicgICA7ICMgRkFMTEJBQ0sgRk9SIERPVUJMRSBEQU5EQSAgICAgIAorCitcdWUwNjY+XHUwMDMwOyAjIEZBTExCQUNLIERJR0lUIFpFUk8KKworXHVlMDY3XHVlMDY2XHVlMDY2XHVlMDY2Plx1MGJGMjsKK1x1ZTA2N1x1ZTA2Nlx1ZTA2Nj5cdTBiZjE7CitcdWUwNjdcdWUwNjY+XHUwYkYwOworCitcdWUwNjc+XHUwYmU3OyAjIERJR0lUIE9ORQorXHVlMDY4Plx1MGJlODsgIyBESUdJVCBUV08KK1x1ZTA2OT5cdTBiZTk7ICMgRElHSVQgVEhSRUUKK1x1ZTA2YT5cdTBiZWE7ICMgRElHSVQgRk9VUgorXHVlMDZiPlx1MGJlYjsgIyBESUdJVCBGSVZFCitcdWUwNmM+XHUwYmVjOyAjIERJR0lUIFNJWAorXHVlMDZkPlx1MGJlZDsgIyBESUdJVCBTRVZFTgorXHVlMDZlPlx1MGJlZTsgIyBESUdJVCBFSUdIVAorXHVlMDZmPlx1MGJlZjsgIyBESUdJVCBOSU5FCisKK1x1ZTA3MD47ICAgICAgICMgQUJCUkVWSUFUSU9OIFNJR04KK1x1ZTA3MT5cdTBiYzA7ICMgTEVUVEVSIFJBIFdJVEggTUlERExFIERJQUdPTkFMCitcdWUwNzI+XHUwYmMwOyAjIExFVFRFUiBSQSBXSVRIIExPV0VSIERJQUdPTkFMCitcdWUwNzM+OyAgICAgICAjIFJVUEVFIE1BUksKK1x1ZTA3ND47ICAgICAgICMgUlVQRUUgU0lHTgorXHVlMDc1PjsgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgT05FCitcdWUwNzY+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBUV08KK1x1ZTA3Nz47ICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIFRIUkVFCitcdWUwNzg+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBGT1VSCitcdWUwNzk+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBPTkUgTEVTUyBUSEFOIFRIRSBERU5PTUlOQVRPUgorXHVlMDdBPjsgICAgICAgIyBDVVJSRU5DWSBERU5PTUlOQVRPUiBTSVhURUVOCitcdWUwN0I+OyAgICAgICAjIElTU0hBUgorXHVFMDdDPjsgICAgICAgIyBUSVBQSQorXHVFMDdEPjsgICAgICAgIyBBRERBSworXHVFMDdFPjsgICAgICAgIyBJUkkKK1x1RTA3Rj47ICAgICAgICMgVVJBCitcdUUwODA+OyAgICAgICAjIEVLIE9OS0FSCisKKworMTAwMCAgPlx1MEJGMjsgIyBOVU1CRVIgT05FIFRIT1VTQU5ECisxMDAgICA+XHUwQkYxOyAjIE5VTUJFUiBPTkUgSFVORFJFRAorMTAgICAgPlx1MEJGMDsgIyBOVU1CRVIgVEVOCisKKyMgICAgOjogTkZDIChORkQpIDsKKyMgZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfVGVsdWd1LnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19UZWx1Z3UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkM2UyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfVGVsdWd1LnR4dApAQCAtMCwwICsxLDE0NCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX1RlbHVndS50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIzICQKKyMgJFJldmlzaW9uOiAxLjkgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSW50ZXJJbmRpYy1UZWx1Z3UKKyM6OiBORkQgKE5GQykgOworXHVlMDAxPlx1MGMwMTsgIyBTSUdOIENBTkRSQUJJTkRVCitcdWUwMDI+XHUwYzAyOyAjIFNJR04gQU5VU1ZBUkEKK1x1ZTAwMz5cdTBjMDM7ICMgU0lHTiBWSVNBUkdBCitcdWUwMDU+XHUwYzA1OyAjIExFVFRFUiBBCitcdWUwMDY+XHUwYzA2OyAjIExFVFRFUiBBQQorXHVlMDA3Plx1MGMwNzsgIyBMRVRURVIgSQorXHVlMDA4Plx1MGMwODsgIyBMRVRURVIgSUkKK1x1ZTAwOT5cdTBjMDk7ICMgTEVUVEVSIFUKK1x1ZTAwYT5cdTBjMGE7ICMgTEVUVEVSIFVVCitcdWUwMGI+XHUwYzBiOyAjIExFVFRFUiBWT0NBTElDIFIKK1x1ZTAwYz5cdTBjMGM7ICMgTEVUVEVSIFZPQ0FMSUMgTAorXHVlMDBkPlx1MGMwRTsgIyBGQUxMQkFDSyBNQVBQSU5HCitcdWUwMGU+XHUwYzBFOyAjIExFVFRFUiBFCitcdWUwMGY+XHUwYzBmOyAjIExFVFRFUiBFRQorXHVlMDEwPlx1MGMxMDsgIyBMRVRURVIgQUkKK1x1ZTAxMT5cdTBjMTI7ICMgRkFMQkFDSyBNQVBQSU5HCitcdWUwMTI+XHUwYzEyOyAjIExFVFRFUiBPCitcdWUwMTM+XHUwYzEzOyAjIExFVFRFUiBPTworXHVlMDE0Plx1MGMxNDsgIyBMRVRURVIgQVUKK1x1ZTAxNT5cdTBjMTU7ICMgTEVUVEVSIEtBCitcdWUwMTY+XHUwYzE2OyAjIExFVFRFUiBLSEEKK1x1ZTAxNz5cdTBjMTc7ICMgTEVUVEVSIEdBCitcdWUwMTg+XHUwYzE4OyAjIExFVFRFUiBHSEEKK1x1ZTAxOT5cdTBjMTk7ICMgTEVUVEVSIE5HQQorXHVlMDFhPlx1MGMxYTsgIyBMRVRURVIgQ0EKK1x1ZTAxYj5cdTBjMWI7ICMgTEVUVEVSIENIQQorXHVlMDFjPlx1MGMxYzsgIyBMRVRURVIgSkEKK1x1ZTAxZD5cdTBjMWQ7ICMgTEVUVEVSIEpIQQorXHVlMDFlPlx1MGMxZTsgIyBMRVRURVIgTllBCitcdWUwMWY+XHUwYzFmOyAjIExFVFRFUiBUVEEKK1x1ZTAyMD5cdTBjMjA7ICMgTEVUVEVSIFRUSEEKK1x1ZTAyMT5cdTBjMjE7ICMgTEVUVEVSIEREQQorXHVlMDIyPlx1MGMyMjsgIyBMRVRURVIgRERIQQorXHVlMDIzPlx1MGMyMzsgIyBMRVRURVIgTk5BCitcdWUwMjQ+XHUwYzI0OyAjIExFVFRFUiBUQQorXHVlMDI1Plx1MGMyNTsgIyBMRVRURVIgVEhBCitcdWUwMjY+XHUwYzI2OyAjIExFVFRFUiBEQQorXHVlMDI3Plx1MGMyNzsgIyBMRVRURVIgREhBCitcdWUwMjg+XHUwYzI4OyAjIExFVFRFUiBOQQorXHVlMDI5Plx1MGMyODsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGMyOT5cdTBjMjggPSBMRVRURVIgTk5OQT5MRVRURVIgTkEKK1x1ZTAyYT5cdTBjMmE7ICMgTEVUVEVSIFBBCitcdWUwMmI+XHUwYzJiOyAjIExFVFRFUiBQSEEKK1x1ZTAyYz5cdTBjMmM7ICMgTEVUVEVSIEJBCitcdWUwMmQ+XHUwYzJkOyAjIExFVFRFUiBCSEEKK1x1ZTAyZT5cdTBjMmU7ICMgTEVUVEVSIE1BCitcdWUwMmY+XHUwYzJmOyAjIExFVFRFUiBZQQorXHVlMDMwXHVlMDNjPlx1MGMzMTsKK1x1ZTAzMD5cdTBjMzA7ICMgTEVUVEVSIFJBCitcdWUwMzE+XHUwYzMxOyAjIExFVFRFUiBSUkEKK1x1ZTAzMj5cdTBjMzI7ICMgTEVUVEVSIExBCitcdWUwMzM+XHUwYzMzOyAjIExFVFRFUiBMTEEKK1x1ZTAzND5cdTBjMzM7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjMzQ+XHUwYzMzID0gTEVUVEVSIExMTEE+TEVUVEVSIExMQQorXHVlMDM1Plx1MGMzNTsgIyBMRVRURVIgVkEKK1x1ZTAzNj5cdTBjMzY7ICMgTEVUVEVSIFNIQQorXHVlMDM3Plx1MGMzNzsgIyBMRVRURVIgU1NBCitcdWUwMzg+XHUwYzM4OyAjIExFVFRFUiBTQQorXHVlMDM5Plx1MGMzOTsgIyBMRVRURVIgSEEKKworXHVlMDNjPjsgIyBGQUxMQkFDSyBCTE9XIEFXQVkgTlVLVEEKK1x1ZTAzZD47ICMgRkFMTEJBQ0sgQkxPVyBBV0FZIEFWQUdSQUhBCisKK1x1ZTAzZT5cdTBjM2U7ICMgVk9XRUwgU0lHTiBBQQorXHVlMDNmPlx1MGMzZjsgIyBWT1dFTCBTSUdOIEkKK1x1ZTA0MD5cdTBjNDA7ICMgVk9XRUwgU0lHTiBJSQorXHVlMDQxPlx1MGM0MTsgIyBWT1dFTCBTSUdOIFUKK1x1ZTA0Mj5cdTBjNDI7ICMgVk9XRUwgU0lHTiBVVQorXHVlMDQzPlx1MGM0MzsgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorXHVlMDQ0Plx1MGM0NDsgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUlIKK1x1ZTA0NT5cdTBjNDY7ICMgVk9XRUwgU0lHTiBDQU5EUkEgRT5WT1dFTCBTSUdOIEUKK1x1ZTA0Nj5cdTBjNDY7ICMgVk9XRUwgU0lHTiBFCitcdWUwNDc+XHUwYzQ3OyAjIFZPV0VMIFNJR04gRUUKK1x1ZTA0OD5cdTBjNDg7ICMgVk9XRUwgU0lHTiBBSQorXHVlMDQ5Plx1MGM0YTsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGM0OT5cdTBjNGEgPSBWT1dFTCBTSUdOIENBTkRSQSBPPlZPV0VMIFNJR04gTworXHVlMDRhPlx1MGM0YTsgIyBWT1dFTCBTSUdOIE8KK1x1ZTA0Yj5cdTBjNGI7ICMgVk9XRUwgU0lHTiBPTworXHVlMDRjPlx1MGM0YzsgIyBWT1dFTCBTSUdOIEFVCitcdWUwNGQ+XHUwYzRkOyAjIFNJR04gVklSQU1BCitcdWUwNTA+XHUwYzEzXHUwYzAyOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYzUwPlx1MGMxM1x1MGMwMiA9IE9NPkxFVFRFUiBPTy5TSUdOIEFOVVNWQVJBCitcdWUwNTE+OworXHVlMDUyPjsKK1x1ZTA1Mz47CitcdWUwNTQ+OworXHVlMDU1Plx1MGM1NTsgIyBMRU5HVEggTUFSSworXHVlMDU2Plx1MGM1NjsgIyBBSSBMRU5HVEggTUFSSworXHVlMDU3Plx1MGM0YzsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGM1Nz5cdTBjNGMgPSBBVSBMRU5HVEggTUFSSz5WT1dFTCBTSUdOIEFVCitcdWUwNTg+XHUwYzE1OyAjIFJFTUFQCitcdWUwNTk+XHUwYzE2OyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYzU5Plx1MGMxNiA9IExFVFRFUiBLSEhBPkxFVFRFUiBLSEEKK1x1ZTA1YT5cdTBjMTc7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjNWE+XHUwYzE3ID0gTEVUVEVSIEdISEE+TEVUVEVSIEdBCitcdWUwNWI+XHUwYzFjOyAjIFJFTUFQIChpbmRpY0V4Y2VwdGlvbnMudHh0KTogXHUwYzViPlx1MGMxYyA9IExFVFRFUiBaQT5MRVRURVIgSkEKK1x1ZTA1Yz5cdTBjMjI7ICMgUkVNQVAKK1x1ZTA1ZD5cdTBjMjI7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjNWQ+XHUwYzIyID0gTEVUVEVSIFJIQT5MRVRURVIgRERIQQorXHVlMDVlPlx1MGMyYjsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGM1ZT5cdTBjMmIgPSBMRVRURVIgRkE+TEVUVEVSIFBIQQorXHVlMDVmPlx1MGMyZjsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGM1Zj5cdTBjMmYgPSBMRVRURVIgWVlBPkxFVFRFUiBZQQorXHVlMDYwPlx1MGM2MDsgIyBMRVRURVIgVk9DQUxJQyBSUgorXHVlMDYxPlx1MGM2MTsgIyBMRVRURVIgVk9DQUxJQyBMTAorXHVlMDYyPlx1MGMzZjsgIyBSRU1BUCAoaW5kaWNFeGNlcHRpb25zLnR4dCk6IFx1MGM2Mj5cdTBjM2YgPSBWT1dFTCBTSUdOIFZPQ0FMSUMgTD5WT1dFTCBTSUdOIEkKK1x1ZTA2Mz5cdTBjNDA7ICMgUkVNQVAgKGluZGljRXhjZXB0aW9ucy50eHQpOiBcdTBjNjM+XHUwYzQwID0gVk9XRUwgU0lHTiBWT0NBTElDIExMPlZPV0VMIFNJR04gSUkKK1x1ZTA2ND4nLicgICA7ICMgRkFMTEJBQ0sgRk9SIERBTkRBCitcdWUwNjU+Jy4nICAgOyAjIEZBTExCQUNLIEZPUiBET1VCTEUgREFOREEgICAgICAKK1x1ZTA2Nj5cdTBjNjY7ICMgRElHSVQgWkVSTworXHVlMDY3Plx1MGM2NzsgIyBESUdJVCBPTkUKK1x1ZTA2OD5cdTBjNjg7ICMgRElHSVQgVFdPCitcdWUwNjk+XHUwYzY5OyAjIERJR0lUIFRIUkVFCitcdWUwNmE+XHUwYzZhOyAjIERJR0lUIEZPVVIKK1x1ZTA2Yj5cdTBjNmI7ICMgRElHSVQgRklWRQorXHVlMDZjPlx1MGM2YzsgIyBESUdJVCBTSVgKK1x1ZTA2ZD5cdTBjNmQ7ICMgRElHSVQgU0VWRU4KK1x1ZTA2ZT5cdTBjNmU7ICMgRElHSVQgRUlHSFQKK1x1ZTA2Zj5cdTBjNmY7ICMgRElHSVQgTklORQorCitcdWUwNzA+OyAgICAgICAjIEFCQlJFVklBVElPTiBTSUdOCitcdWUwNzE+XHUwYzMwOyAjIExFVFRFUiBSQSBXSVRIIE1JRERMRSBESUFHT05BTAorXHVlMDcyPlx1MGMzMDsgIyBMRVRURVIgUkEgV0lUSCBMT1dFUiBESUFHT05BTAorXHVlMDczPjsgICAgICAgIyBSVVBFRSBNQVJLCitcdWUwNzQ+OyAgICAgICAjIFJVUEVFIFNJR04KK1x1ZTA3NT47ICAgICAgICMgQ1VSUkVOQ1kgTlVNRVJBVE9SIE9ORQorXHVlMDc2PjsgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgVFdPCitcdWUwNzc+OyAgICAgICAjIENVUlJFTkNZIE5VTUVSQVRPUiBUSFJFRQorXHVlMDc4PjsgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgRk9VUgorXHVlMDc5PjsgICAgICAgIyBDVVJSRU5DWSBOVU1FUkFUT1IgT05FIExFU1MgVEhBTiBUSEUgREVOT01JTkFUT1IKK1x1ZTA3QT47ICAgICAgICMgQ1VSUkVOQ1kgREVOT01JTkFUT1IgU0lYVEVFTgorXHVlMDdCPjsgICAgICAgIyBJU1NIQVIKK1x1RTA3Qz47ICAgICAgICMgVElQUEkKK1x1RTA3RD47ICAgICAgICMgQUREQUsKK1x1RTA3RT47ICAgICAgICMgSVJJCitcdUUwN0Y+OyAgICAgICAjIFVSQQorXHVFMDgwPjsgICAgICAgIyBFSyBPTktBUgorCiswID4gXHUwYzY2OyAgICAgICAjIEZBTExCQUNLIEZPUiBUQU1JTAorMSA+IFx1MGM2NzsKKworIyAgICA6OiBORkMgKE5GRCkgOworIyBlb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfS2FubmFkYV9JbnRlckluZGljLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfS2FubmFkYV9JbnRlckluZGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZGFkZmFkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9LYW5uYWRhX0ludGVySW5kaWMudHh0CkBAIC0wLDAgKzEsOTQgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfS2FubmFkYV9JbnRlckluZGljLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDkvMTkgMTg6MTE6MjMgJAorIyAkUmV2aXNpb246IDEuNiAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBLYW5uYWRhLUludGVySW5kaWMKK1x1MENDNlx1MENENT5cdUUwNDc7ICAgICAgICAjIFZPV0VMIFNJR04gRUUKK1x1MENDNlx1MENDRFx1MENENj5cdUUwNDhcdWUwNGQ7ICAgICAgICAjIFZPV0VMIFNJR04gQUkKK1x1MENDNlx1MENENj5cdUUwNDg7ICAgICAgICAjIFZPV0VMIFNJR04gQUkKK1x1MENDNlx1MENDMlx1MENENT5cdUUwNEI7ICAjIFZPV0VMIFNJR04gT08KK1x1MENDNlx1MENDMj5cdUUwNEE7ICAgICAgICAjIFZPV0VMIFNJR04gTworXHUwQ0JGXHUwQ0Q1Plx1RTA0MDsgICAgICAgICMgVk9XRUwgU0lHTiBJSQorCitcdTBDODI+XHVFMDAyOyAgICAgICAgICAgICAgIyBTSUdOIEFOVVNWQVJBCitcdTBDODM+XHVFMDAzOyAgICAgICAgICAgICAgIyBTSUdOIFZJU0FSR0EKK1x1MEM4NT5cdUUwMDU7ICAgICAgICAgICAgICAjIExFVFRFUiBBCitcdTBDODY+XHVFMDA2OyAgICAgICAgICAgICAgIyBMRVRURVIgQUEKK1x1MEM4Nz5cdUUwMDc7ICAgICAgICAgICAgICAjIExFVFRFUiBJCitcdTBDODg+XHVFMDA4OyAgICAgICAgICAgICAgIyBMRVRURVIgSUkKK1x1MEM4OT5cdUUwMDk7ICAgICAgICAgICAgICAjIExFVFRFUiBVCitcdTBDOEE+XHVFMDBBOyAgICAgICAgICAgICAgIyBMRVRURVIgVVUKK1x1MEM4Qj5cdUUwMEI7ICAgICAgICAgICAgICAjIExFVFRFUiBWT0NBTElDIFIKK1x1MEM4Qz5cdUUwMEM7ICAgICAgICAgICAgICAjIExFVFRFUiBWT0NBTElDIEwKK1x1MEM4RT5cdUUwMEU7ICAgICAgICAgICAgICAjIExFVFRFUiBFCitcdTBDOEY+XHVFMDBGOyAgICAgICAgICAgICAgIyBMRVRURVIgRUUKK1x1MEM5MD5cdUUwMTA7ICAgICAgICAgICAgICAjIExFVFRFUiBBSQorXHUwQzkyPlx1RTAxMjsgICAgICAgICAgICAgICMgTEVUVEVSIE8KK1x1MEM5Mz5cdUUwMTM7ICAgICAgICAgICAgICAjIExFVFRFUiBPTworXHUwQzk0Plx1RTAxNDsgICAgICAgICAgICAgICMgTEVUVEVSIEFVCitcdTBDOTU+XHVFMDE1OyAgICAgICAgICAgICAgIyBMRVRURVIgS0EKK1x1MEM5Nj5cdUUwMTY7ICAgICAgICAgICAgICAjIExFVFRFUiBLSEEKK1x1MEM5Nz5cdUUwMTc7ICAgICAgICAgICAgICAjIExFVFRFUiBHQQorXHUwQzk4Plx1RTAxODsgICAgICAgICAgICAgICMgTEVUVEVSIEdIQQorXHUwQzk5Plx1RTAxOTsgICAgICAgICAgICAgICMgTEVUVEVSIE5HQQorXHUwQzlBPlx1RTAxQTsgICAgICAgICAgICAgICMgTEVUVEVSIENBCitcdTBDOUI+XHVFMDFCOyAgICAgICAgICAgICAgIyBMRVRURVIgQ0hBCitcdTBDOUM+XHVFMDFDOyAgICAgICAgICAgICAgIyBMRVRURVIgSkEKK1x1MEM5RD5cdUUwMUQ7ICAgICAgICAgICAgICAjIExFVFRFUiBKSEEKK1x1MEM5RT5cdUUwMUU7ICAgICAgICAgICAgICAjIExFVFRFUiBOWUEKK1x1MEM5Rj5cdUUwMUY7ICAgICAgICAgICAgICAjIExFVFRFUiBUVEEKK1x1MENBMD5cdUUwMjA7ICAgICAgICAgICAgICAjIExFVFRFUiBUVEhBCitcdTBDQTE+XHVFMDIxOyAgICAgICAgICAgICAgIyBMRVRURVIgRERBCitcdTBDQTI+XHVFMDIyOyAgICAgICAgICAgICAgIyBMRVRURVIgRERIQQorXHUwQ0EzPlx1RTAyMzsgICAgICAgICAgICAgICMgTEVUVEVSIE5OQQorXHUwQ0E0Plx1RTAyNDsgICAgICAgICAgICAgICMgTEVUVEVSIFRBCitcdTBDQTU+XHVFMDI1OyAgICAgICAgICAgICAgIyBMRVRURVIgVEhBCitcdTBDQTY+XHVFMDI2OyAgICAgICAgICAgICAgIyBMRVRURVIgREEKK1x1MENBNz5cdUUwMjc7ICAgICAgICAgICAgICAjIExFVFRFUiBESEEKK1x1MENBOD5cdUUwMjg7ICAgICAgICAgICAgICAjIExFVFRFUiBOQQorXHUwQ0FBPlx1RTAyQTsgICAgICAgICAgICAgICMgTEVUVEVSIFBBCitcdTBDQUI+XHVFMDJCOyAgICAgICAgICAgICAgIyBMRVRURVIgUEhBCitcdTBDQUM+XHVFMDJDOyAgICAgICAgICAgICAgIyBMRVRURVIgQkEKK1x1MENBRD5cdUUwMkQ7ICAgICAgICAgICAgICAjIExFVFRFUiBCSEEKK1x1MENBRT5cdUUwMkU7ICAgICAgICAgICAgICAjIExFVFRFUiBNQQorXHUwQ0FGPlx1RTAyRjsgICAgICAgICAgICAgICMgTEVUVEVSIFlBCitcdTBDQjA+XHVFMDMwOyAgICAgICAgICAgICAgIyBMRVRURVIgUkEKK1x1MENCMT5cdUUwMzE7ICAgICAgICAgICAgICAjIExFVFRFUiBSUkEKK1x1MENCMj5cdUUwMzI7ICAgICAgICAgICAgICAjIExFVFRFUiBMQQorXHUwQ0IzPlx1RTAzMzsgICAgICAgICAgICAgICMgTEVUVEVSIExMQQorXHUwQ0I1Plx1RTAzNTsgICAgICAgICAgICAgICMgTEVUVEVSIFZBCitcdTBDQjY+XHVFMDM2OyAgICAgICAgICAgICAgIyBMRVRURVIgU0hBCitcdTBDQjc+XHVFMDM3OyAgICAgICAgICAgICAgIyBMRVRURVIgU1NBCitcdTBDQjg+XHVFMDM4OyAgICAgICAgICAgICAgIyBMRVRURVIgU0EKK1x1MENCOT5cdUUwMzk7ICAgICAgICAgICAgICAjIExFVFRFUiBIQQorXHUwQ0JFPlx1RTAzRTsgICAgICAgICAgICAgICMgVk9XRUwgU0lHTiBBQQorXHUwQ0JGPlx1RTAzRjsgICAgICAgICAgICAgICMgVk9XRUwgU0lHTiBJCitcdTBDQzE+XHVFMDQxOyAgICAgICAgICAgICAgIyBWT1dFTCBTSUdOIFUKK1x1MENDMj5cdUUwNDI7ICAgICAgICAgICAgICAjIFZPV0VMIFNJR04gVVUKK1x1MENDMz5cdUUwNDM7ICAgICAgICAgICAgICAjIFZPV0VMIFNJR04gVk9DQUxJQyBSCitcdTBDQzQ+XHVFMDQ0OyAgICAgICAgICAgICAgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUlIKK1x1MENDNj5cdUUwNDY7ICAgICAgICAgICAgICAjIFZPV0VMIFNJR04gRQorXHUwQ0NDPlx1RTA0QzsgICAgICAgICAgICAgICMgVk9XRUwgU0lHTiBBVQorXHUwQ0NEPlx1RTA0RDsgICAgICAgICAgICAgICMgU0lHTiBWSVJBTUEKK1x1MENENT5cdUUwNTU7ICAgICAgICAgICAgICAjIExFTkdUSCBNQVJLCitcdTBDRDY+XHVFMDU2OyAgICAgICAgICAgICAgIyBBSSBMRU5HVEggTUFSSworXHUwQ0RFPlx1RTAzNDsgICAgICAgICAgICAgICMgTEVUVEVSIExMTEEgIAorXHUwQ0UwPlx1RTA2MDsgICAgICAgICAgICAgICMgTEVUVEVSIFZPQ0FMSUMgUlIKK1x1MENFMT5cdUUwNjE7ICAgICAgICAgICAgICAjIExFVFRFUiBWT0NBTElDIExMCitcdTBDRTY+XHVFMDY2OyAgICAgICAgICAgICAgIyBESUdJVCBaRVJPCitcdTBDRTc+XHVFMDY3OyAgICAgICAgICAgICAgIyBESUdJVCBPTkUKK1x1MENFOD5cdUUwNjg7ICAgICAgICAgICAgICAjIERJR0lUIFRXTworXHUwQ0U5Plx1RTA2OTsgICAgICAgICAgICAgICMgRElHSVQgVEhSRUUKK1x1MENFQT5cdUUwNkE7ICAgICAgICAgICAgICAjIERJR0lUIEZPVVIKK1x1MENFQj5cdUUwNkI7ICAgICAgICAgICAgICAjIERJR0lUIEZJVkUKK1x1MENFQz5cdUUwNkM7ICAgICAgICAgICAgICAjIERJR0lUIFNJWAorXHUwQ0VEPlx1RTA2RDsgICAgICAgICAgICAgICMgRElHSVQgU0VWRU4KK1x1MENFRT5cdUUwNkU7ICAgICAgICAgICAgICAjIERJR0lUIEVJR0hUCitcdTBDRUY+XHVFMDZGOyAgICAgICAgICAgICAgIyBESUdJVCBOSU5FCisKKyMgZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0xhdGluX0ludGVySW5kaWMudHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9MYXRpbl9JbnRlckluZGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjU5YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9MYXRpbl9JbnRlckluZGljLnR4dApAQCAtMCwwICsxLDM4NSBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9MYXRpbl9JbnRlckluZGljLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDMvMDIgMDA6Mjc6MjYgJAorIyAkUmV2aXNpb246IDEuNyAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBMYXRpbi1JbnRlckluZGljCisgICAgIzo6IE5GRDsKKyAgICAjXHUwZTAwIHJlc2VydmVkCisgICAgI2NvbnNvbmFudHMKKyAgICAkY2hhbmRyYWJpbmR1PVx1ZTAwMTsKKyAgICAkYW51c3ZhcmE9XHVlMDAyOworICAgICR2aXNhcmdhPVx1ZTAwMzsKKyAgICAjXHUwZTAwNCByZXNlcnZlZAorICAgICMgdzx2b3dlbD4gcmVwcmVzZW50cyB0aGUgc3RhbmQtYWxvbmUgZm9ybQorICAgICR3YT1cdWUwMDU7CisgICAgJHdhYT1cdWUwMDY7CisgICAgJHdpPVx1ZTAwNzsKKyAgICAkd2lpPVx1ZTAwODsKKyAgICAkd3U9XHVlMDA5OworICAgICR3dXU9XHVlMDBhOworICAgICR3cj1cdWUwMGI7CisgICAgJHdsPVx1ZTAwYzsKKyAgICAkd2NlPVx1ZTAwZDsgIyBMRVRURVIgQ0FORFJBIEUKKyAgICAkd3NlPVx1ZTAwZTsgIyBMRVRURVIgU0hPUlQgRQorICAgICR3ZT1cdWUwMGY7ICAjIFx1MDkwZiBMRVRURVIgRQorICAgICR3YWk9XHVlMDEwOworICAgICR3Y289XHVlMDExOyAjIExFVFRFUiBDQU5EUkEgTworICAgICR3c289XHVlMDEyOyAjIExFVFRFUiBTSE9SVCBPCisgICAgJHdvPVx1ZTAxMzsgICMgXHUwOTEzIExFVFRFUiBPCisgICAgJHdhdT1cdWUwMTQ7CisgICAgJGthPVx1ZTAxNTsKKyAgICAka2hhPVx1ZTAxNjsKKyAgICAkZ2E9XHVlMDE3OworICAgICRnaGE9XHVlMDE4OworICAgICRuZ2E9XHVlMDE5OworICAgICRjYT1cdWUwMWE7CisgICAgJGNoYT1cdWUwMWI7CisgICAgJGphPVx1ZTAxYzsKKyAgICAkamhhPVx1ZTAxZDsKKyAgICAkbnlhPVx1ZTAxZTsKKyAgICAkdHRhPVx1ZTAxZjsKKyAgICAkdHRoYT1cdWUwMjA7CisgICAgJGRkYT1cdWUwMjE7CisgICAgJGRkaGE9XHVlMDIyOworICAgICRubmE9XHVlMDIzOworICAgICR0YT1cdWUwMjQ7CisgICAgJHRoYT1cdWUwMjU7CisgICAgJGRhPVx1ZTAyNjsKKyAgICAkZGhhPVx1ZTAyNzsKKyAgICAkbmE9XHVlMDI4OworICAgICRlbmE9XHVlMDI5OyAjY29tcGF0aWJpbGl0eQorICAgICRwYT1cdWUwMmE7CisgICAgJHBoYT1cdWUwMmI7CisgICAgJGJhPVx1ZTAyYzsKKyAgICAkYmhhPVx1ZTAyZDsKKyAgICAkbWE9XHVlMDJlOworICAgICR5YT1cdWUwMmY7CisgICAgJHJhPVx1ZTAzMDsKKyAgICAkcnJhPVx1ZTAzMTsKKyAgICAkbGE9XHVlMDMyOworICAgICRsbGE9XHVlMDMzOyAKKyAgICAkZWxhPVx1ZTAzNDsgI2NvbXBhdGliaWxpdHkKKyAgICAkdmE9XHVlMDM1OworICAgICRzaGE9XHVlMDM2OworICAgICRzc2E9XHVlMDM3OworICAgICRzYT1cdWUwMzg7CisgICAgJGhhPVx1ZTAzOTsKKyNcdTA5M2EgUmVzZXJ2ZWQKKyNcdTA5M2IgUmVzZXJ2ZWQKKyAgICAkbnVrdGE9XHVlMDNjOworICAgICRhdmFncmFoYT1cdWUwM2Q7ICMgU0lHTiBBVkFHUkFIQQorICAgICMgPHZvd2VsPiByZXByZXNlbnRzIHRoZSBkZXBlbmRlbnQgZm9ybQorICAgICRhYT1cdWUwM2U7CisgICAgJGk9XHVlMDNmOworICAgICRpaT1cdWUwNDA7CisgICAgJHU9XHVlMDQxOworICAgICR1dT1cdWUwNDI7CisgICAgJHJoPVx1ZTA0MzsKKyAgICAkbGg9XHVlMDQ0OworICAgICRjZT1cdWUwNDU7ICNWT1dFTCBTSUdOIENBTkRSQSBFIAorICAgICRzZT1cdWUwNDY7ICNWT1dFTCBTSUdOIFNIT1JUIEUKKyAgICAkZT1cdWUwNDc7CisgICAgJGFpPVx1ZTA0ODsKKyAgICAkY289XHVlMDQ5OyAjIFZPV0VMIFNJR04gQ0FORFJBIE8KKyAgICAkc289XHVlMDRhOyAjIFZPV0VMIFNJR04gU0hPUlQgTworICAgICRvPVx1ZTA0YjsgICMgXHUwOTRiCisgICAgJGF1PVx1ZTA0YzsgICAgCisgICAgJHZpcmFtYT1cdWUwNGQ7CisjIFx1MDk0ZSBSZXNlcnZlZAorIyBcdTA5NGYgUmVzZXJ2ZWQKKyAgICRvbSA9IFx1ZTA1MDsgIyBPTQorIyBcdTA5NTE+OyAgICAgICAgIyBVTk1BUFBFRCBTVFJFU1MgU0lHTiBVREFUVEEKKyMgXHUwOTUyPjsgICAgICAgICMgVU5NQVBQRUQgU1RSRVNTIFNJR04gQU5VREFUVEEKKyMgXHUwOTUzPjsgICAgICAgICMgVU5NQVBQRUQgR1JBVkUgQUNDRU5UCisjIFx1MDk1ND47ICAgICAgICAjIFVOTUFQUEVEIEFDVVRFIEFDQ0VOVAorICAgICRsbSA9IFx1ZTA1NTsjICBUZWx1Z3UgTGVuZ3RoIE1hcmsgICAgCisgICAgJGFpbG09XHVlMDU2OyMgIEFJIExlbmd0aCBNYXJrIAorICAgICRhdWxtPVx1ZTA1NzsjICBBVSBMZW5ndGggTWFyayAKKyAgICAgI3VyZHUgY29tcGF0aWJpdHkgZm9ybXMKKyAgICAkdWthPVx1ZTA1ODsKKyAgICAkdWtoYT1cdWUwNTk7CisgICAgJHVnaGE9XHVlMDVhOworICAgICR1amhhPVx1ZTA1YjsKKyAgICAkdWRkaGE9XHVlMDVjOworICAgICR1ZGhhPVx1ZTA1ZDsKKyAgICAkdWZhPVx1ZTA1ZTsKKyAgICAkdXlhPVx1ZTA1ZjsKKyAgICAkd3JyPVx1ZTA2MDsKKyAgICAkd2xsPVx1ZTA2MTsKKyAgICAkcnJoPVx1ZTA2MjsKKyAgICAkbGxoPVx1ZTA2MzsKKyAgICAkZGFuZGE9XHVlMDY0OworICAgICRkb3VibGVEYW5kYT1cdWUwNjU7CisgICAgJHplcm89XHVlMDY2OyAgICAgIyBESUdJVCBaRVJPCisgICAgJG9uZT1cdWUwNjc7ICAgICAgIyBESUdJVCBPTkUKKyAgICAkdHdvPVx1ZTA2ODsgICAgICAjIERJR0lUIFRXTworICAgICR0aHJlZT1cdWUwNjk7ICAgICMgRElHSVQgVEhSRUUKKyAgICAkZm91cj1cdWUwNmE7ICAgICAjIERJR0lUIEZPVVIKKyAgICAkZml2ZT1cdWUwNmI7ICAgICAjIERJR0lUIEZJVkUKKyAgICAkc2l4PVx1ZTA2YzsgICAgICAjIERJR0lUIFNJWAorICAgICRzZXZlbj1cdWUwNmQ7ICAgICMgRElHSVQgU0VWRU4KKyAgICAkZWlnaHQ9XHVlMDZlOyAgICAjIERJR0lUIEVJR0hUCisgICAgJG5pbmU9XHVlMDZmOyAgICAgIyBESUdJVCBOSU5FCisgICAgIyBGb3IgYWxsIG90aGVyIHNjcmlwdHMKKyAgICAkZWNwMD1cdWUwNzA7CisgICAgJGVjcDE9XHVlMDcxOworICAgICRlY3AyPVx1ZTA3MjsKKyAgICAkZWNwMz1cdWUwNzM7CisgICAgJGVjcDQ9XHVlMDc0OworICAgICRlY3A1PVx1ZTA3NTsKKyAgICAkZWNwNj1cdWUwNzY7CisgICAgJGVjcDc9XHVlMDc3OworICAgICRlY3A4PVx1ZTA3ODsKKyAgICAkZWNwOT1cdWUwNzk7CisgICAgJGVjcEE9XHVlMDdhOworICAgICRlY3BCPVx1ZTA3YjsKKyAgICAkZWNwQz1cdWUwN2M7CisgICAgJGVjcEQ9XHVlMDdkOworICAgICRlY3BFPVx1ZTA3ZTsKKyAgICAkZWNwRj1cdWUwN2Y7CisjIFx1MDk3MD47ICMgVU5NQVBQRUQgQUJCUkVWSUFUSU9OIFNJR04KKyAgICAkZGVwVm93ZWxBYm92ZT1bXHVlMDNlLVx1ZTA0MFx1ZTA0NS1cdWUwNGNdOworICAgICRkZXBWb3dlbEJlbG93PVtcdWUwNDEtXHVlMDQ0XTsKKyAgICAkZW5kVGhpbmc9WyRkYW5kYSRkb3VibGVEYW5kYV07CisgICAgIyAkeCB3YXMgb3JpZ2luYWxseSBjYWxsZWQgJyYnOyAkeiB3YXMgJyUnCisgICAgJHg9WyR2aXJhbWEkYWEkYWkkYXUkaWkkaSR1dSR1JHJyaCRyaCRsaCRlJG8kc2UkY2Ukc28kY29dOworICAgICR6PVtiY2RmZ2hqa2xtbnBxcnN0dnd4eXpdOworICAgICRjb25zb25hbnRzPVtbJGthLSRoYV0keltcdTA5MTUtXHUwOTM5XVtcdTA5OTUtXHUwOWI5XVtcdTBhMTUtXHUwYTM5XVtcdTBhOTUtXHUwYWI5XVtcdTBiMTUtXHUwYjM5XVtcdTBiOTUtXHUwYmI5XVtcdTBjMTUtXHUwYzM5XVtcdTBjOTUtXHUwY2I5XVtcdTBkMTUtXHUwZDM5XV07CisgICAgXHUwMzE1ID4gJGF2YWdyYWhhOworICAgIFx1MDMwMz4kY2hhbmRyYWJpbmR1JGFudXN2YXJhOworICAgIG1cdTAzMTA+JGNoYW5kcmFiaW5kdTsKKyAgICBoXHUwMzIzPiR2aXNhcmdhOworICAgIHg+JGthJHZpcmFtYSRzYTsKKyMgY29udmVydCB0byBpbmRlcGVuZGVudCBmb3JtcyBhdCBzdGFydCBvZiB3b3JkIG9yIHN5bGxhYmxlOgorIyBkZXBlbmRlbnQgZm9ybXMgZm9yIHJvdW5kdHJpcAorICAgIFx1MDMxNGFcdTAzMDQ+JGFhOworICAgIFx1MDMxNGFpPiRhaTsKKyAgICBcdTAzMTRhdT4kYXU7CisgICAgXHUwMzE0aWk+JGlpOworICAgIFx1MDMxNGlcdTAzMDQ+JGlpOworICAgIFx1MDMxNGk+JGk7CisgICAgXHUwMzE0dVx1MDMwND4kdXU7CisgICAgXHUwMzE0dT4kdTsKKyAgICBcdTAzMTRyXHUwMzI1XHUwMzA0PiRycmg7CisgICAgXHUwMzE0clx1MDMyNT4kcmg7CisgICAgXHUwMzE0bFx1MDMyNVx1MDMwND4kbGxoOworICAgIFx1MDMxNGxoPiRsaDsKKyAgICBcdTAzMTRsXHUwMzI1PiRsaDsKKyAgICBcdTAzMTRlXHUwMzA0PiRlOworICAgIFx1MDMxNG9cdTAzMDQ+JG87CisgICAgXHUwMzE0YT47CisgICAgXHUwMzE0ZVx1MDMwNj4kY2U7CisgICAgXHUwMzE0b1x1MDMwNj4kY287CisgICAgXHUwMzE0ZT4kc2U7CisgICAgXHUwMzE0bz4kc287CisKKyMgcHJlY2VlZGVkIGJ5IGNvbnNvbmFudHMKKyAgICAkY29uc29uYW50c3sgYVx1MDMwND4kYWE7CisgICAgJGNvbnNvbmFudHN7IGFpPiRhaTsKKyAgICAkY29uc29uYW50c3sgYXU+JGF1OworICAgICRjb25zb25hbnRzeyBpaT4kaWk7CisgICAgJGNvbnNvbmFudHN7IGlcdTAzMDQ+JGlpOworICAgICRjb25zb25hbnRzeyBpPiRpOworICAgICRjb25zb25hbnRzeyB1XHUwMzA0PiR1dTsKKyAgICAkY29uc29uYW50c3sgdT4kdTsKKyAgICAkY29uc29uYW50c3sgclx1MDMyNVx1MDMwND4kcnJoOworICAgICRjb25zb25hbnRzeyByXHUwMzI1YT4kcmg7CisgICAgJGNvbnNvbmFudHN7IHJcdTAzMjU+JHJoOworICAgICRjb25zb25hbnRzeyBsXHUwMzI1XHUwMzA0PiRsbGg7CisgICAgJGNvbnNvbmFudHN7IGxoPiRsaDsKKyAgICAkY29uc29uYW50c3sgbFx1MDMyNT4kbGg7CisgICAgJGNvbnNvbmFudHN7IGVcdTAzMDQ+JGU7CisgICAgJGNvbnNvbmFudHN7IG9cdTAzMDQ+JG87CisgICAgJGNvbnNvbmFudHN7IGVcdTAzMDY+JGNlOworICAgICRjb25zb25hbnRzeyBvXHUwMzA2PiRjbzsKKyAgICAkY29uc29uYW50c3sgZT4kc2U7CisgICAgJGNvbnNvbmFudHN7IG8+JHNvOworCisjIGUuZy4ga2VhaSAtPiB7a2F9e2V9e3dhaX07IGsnYWkgLT4ge2thfXt3YWl9OyAoYWkpIC0+ICh7d2FpfSkKKyAgICBhXHUwMzA0PiR3YWE7CisgICAgYWk+JHdhaTsKKyAgICBhdT4kd2F1OworICAgIGlcdTAzMDQ+JHdpaTsKKyAgICBpPiR3aTsKKyAgICB1XHUwMzA0PiR3dXU7CisgICAgdT4kd3U7CisgICAgclx1MDMyNVx1MDMwND4kd3JyOworICAgIHJcdTAzMjU+JHdyOworICAgIGxcdTAzMjVcdTAzMDQ+JHdsbDsKKyAgICBsaD4kd2w7CisgICAgbFx1MDMyNT4kd2w7CisgICAgZVx1MDMwND4kd2U7CisgICAgb1x1MDMwND4kd287CisgICAgYT4kd2E7CisgICAgZVx1MDMwNj4kd2NlOworICAgIG9cdTAzMDY+JHdjbzsKKyAgICBlPiR3c2U7CisgICAgJydvbT4kb207CisgICAgbz4kd3NvOworICAgIAorICAgICMgcnVsZXMgZm9yIGFudXN2YXJhCisgICAgbn1yXHUwMzI1ICAgICAgICAgICA+ICRuYXwkdmlyYW1hOworICAgIG59bFx1MDMyNSAgICAgICAgICAgPiAkbmF8JHZpcmFtYTsKKyAgICBufW5hICAgICAgICAgICAgICAgID4gJG5hfCR2aXJhbWE7CisgICAgblx1MDMwN31ba2ddICAgICAgICA+ICRhbnVzdmFyYTsKKyAgICBuXHUwMzA3fW5cdTAzMDcgICAgID4gJGFudXN2YXJhOworICAgIG5cdTAzMDR9W2NqXSAgICAgICAgPiAkYW51c3ZhcmE7CisgICAgblx1MDMwNH1uXHUwMzAzICAgICA+ICRhbnVzdmFyYTsKKyAgICBuXHUwMzIzfVt0ZG5dXHUwMzIzID4gJGFudXN2YXJhOworICAgIG59W3Rkbl0gICAgICAgICAgICAgPiAkYW51c3ZhcmE7CisgICAgbX1bcGJtXSAgICAgICAgICAgICA+ICRhbnVzdmFyYTsKKyAgICBufVt5bHZzaHJdICAgICAgICAgID4gJGFudXN2YXJhOworICAgIG1cdTAzMDcgICAgICAgICAgICAgPiAkYW51c3ZhcmE7CisgICAgCisgICAgI3VyZHUgY29tcGF0aWJpbGl0eQorICAgIHE+JHVrYXwkdmlyYW1hOworICAgIGtcdTAzMzFoXHUwMzMxPiR1a2hhIHwkdmlyYW1hOworICAgIGdcdTAzMDc+ICR1Z2hhIHwgJHZpcmFtYTsKKyAgICB6ID4gJHVqaGEgfCR2aXJhbWE7CisgICAgZiA+ICR1ZmF8JHZpcmFtYTsKKyAgICAKKyAgICAjIGRldgorICAgIHlcdTAzMDc+JHV5YXwkdmlyYW1hOworICAgIGxcdTAzMzE+JGVsYXwkdmlyYW1hOworICAgIG5cdTAzMzE+JGVuYXwkdmlyYW1hOworICAgIG5cdTAzMDc+JG5nYXwkdmlyYW1hOworICAgIG5cdTAzMDM+JG55YXwkdmlyYW1hOworICAgIG5cdTAzMjM+JG5uYXwkdmlyYW1hOworICAgIHRcdTAzMjNoPiR0dGhhfCR2aXJhbWE7CisgICAgdFx1MDMyMz4kdHRhfCR2aXJhbWE7CisgICAgclx1MDMyM2g+JHVkaGF8JHZpcmFtYTsKKyAgICByXHUwMzIzPiR1ZGRoYXwkdmlyYW1hOworICAgIGRcdTAzMjNoPiRkZGhhfCR2aXJhbWE7CisgICAgZFx1MDMyMz4kZGRhfCR2aXJhbWE7CisgICAga2g+JGtoYXwkdmlyYW1hOworICAgIGs+JGthfCR2aXJhbWE7CisgICAgZ2g+JGdoYXwkdmlyYW1hOworICAgIGc+JGdhfCR2aXJhbWE7CisgICAgY2g+JGNoYXwkdmlyYW1hOworICAgIGM+JGNhfCR2aXJhbWE7CisgICAgamg+JGpoYXwkdmlyYW1hOworICAgIGo+JGphfCR2aXJhbWE7CisgICAgbnk+JG55YXwkdmlyYW1hOworICAgIHR0aD4kdHRoYXwkdmlyYW1hOworICAgIGRkaD4kZGRoYXwkdmlyYW1hOworICAgIHRoPiR0aGF8JHZpcmFtYTsKKyAgICB0PiR0YXwkdmlyYW1hOworICAgIGRoPiRkaGF8JHZpcmFtYTsKKyAgICBkPiRkYXwkdmlyYW1hOworICAgIG4+JG5hfCR2aXJhbWE7CisgICAgcGg+JHBoYXwkdmlyYW1hOworICAgIHA+JHBhfCR2aXJhbWE7CisgICAgYmg+JGJoYXwkdmlyYW1hOworICAgIGI+JGJhfCR2aXJhbWE7CisgICAgbT4kbWF8JHZpcmFtYTsKKyAgICB5PiR5YXwkdmlyYW1hOworICAgIHJcdTAzMzE+JHJyYXwkdmlyYW1hOworICAgIHI+JHJhfCR2aXJhbWE7CisgICAgbFx1MDMyMz4kbGxhfCR2aXJhbWE7CisgICAgbD4kbGF8JHZpcmFtYTsKKyAgICB2PiR2YXwkdmlyYW1hOworICAgIHc+JHZhfCR2aXJhbWE7CisgICAgc2g+JHNoYXwkdmlyYW1hOworICAgIHNzPiRzc2F8JHZpcmFtYTsKKyAgICBzXHUwMzIzPiRzc2F8JHZpcmFtYTsKKyAgICBzXHUwMzAxPiRzaGF8JHZpcmFtYTsKKyAgICBzPiRzYXwkdmlyYW1hOworICAgIGg+JGhhfCR2aXJhbWE7CisgICAgJy4nPiRkYW5kYTsKKyAgICAkZGFuZGEnLic+JGRvdWJsZURhbmRhOworICAgICRkZXBWb3dlbEFib3Zleyd+Jz4kYW51c3ZhcmE7CisgICAgJGRlcFZvd2VsQmVsb3d7J34nPiRjaGFuZHJhYmluZHU7CisjIGNvbnZlcnQgdG8gZGVwZW5kZW50IGZvcm1zIGFmdGVyIGNvbnNvbmFudCB3aXRoIG5vIHZvd2VsOgorIyBlLmcuIGthaSAtPiB7a2F9e3ZpcmFtYX1haSAtPiB7a2F9e2FpfQorICAgICMkdmlyYW1hIGFhPiRhYTsKKyAgICAkdmlyYW1hIGFcdTAzMDQ+JGFhOworICAgICR2aXJhbWEgYWk+JGFpOworICAgICR2aXJhbWEgYXU+JGF1OworICAgICR2aXJhbWEgaWk+JGlpOworICAgICR2aXJhbWEgaVx1MDMwND4kaWk7CisgICAgJHZpcmFtYSBpPiRpOworICAgICMkdmlyYW1hIHV1PiR1dTsKKyAgICAkdmlyYW1hIHVcdTAzMDQ+JHV1OworICAgICR2aXJhbWEgdT4kdTsKKyAgICAjJHZpcmFtYSBycmg+JHJyaDsKKyAgICAkdmlyYW1hIHJcdTAzMjVcdTAzMDQ+JHJyaDsKKyAgICAjJHZpcmFtYSByaD4kcmg7CisgICAgJHZpcmFtYSByXHUwMzI1YT4kcmg7CisgICAgJHZpcmFtYSByXHUwMzI1PiRyaDsKKyAgICAkdmlyYW1hIGxcdTAzMjVcdTAzMDQ+JGxsaDsKKyAgICAkdmlyYW1hIGxoPiRsaDsKKyAgICAkdmlyYW1hIGxcdTAzMjU+JGxoOworICAgICR2aXJhbWEgZVx1MDMwND4kZTsKKyAgICAkdmlyYW1hIG9cdTAzMDQ+JG87CisgICAgJHZpcmFtYSBhPjsKKyAgICAkdmlyYW1hIGVcdTAzMDY+JGNlOworICAgICR2aXJhbWEgb1x1MDMwNj4kY287CisgICAgJHZpcmFtYSBlPiRzZTsKKyAgICAkdmlyYW1hIG8+JHNvOworCisKKyMgb3RoZXJ3aXNlIGNvbnZlcnQgaW5kZXBlbmRlbnQgZm9ybXMgd2hlbiBzZXBhcmF0ZWQgYnkgJzogaydhaSAtPiB7a2F9e3ZpcmFtYX17d2FpfQorICAgICMkdmlyYW1hJydhYT4kd2FhOworICAgICR2aXJhbWEnJ2FcdTAzMDQ+JHdhYTsKKyAgICAkdmlyYW1hJydhaT4kd2FpOworICAgICR2aXJhbWEnJ2F1PiR3YXU7CisgICAgIyR2aXJhbWEnJ2lpPiR3aWk7CisgICAgJHZpcmFtYScnaVx1MDMwND4kd2lpOworICAgICR2aXJhbWEnJ2k+JHdpOworICAgICMkdmlyYW1hJyd1dT4kd3V1OworICAgICR2aXJhbWEnJ3VcdTAzMDQ+JHd1dTsKKyAgICAkdmlyYW1hJyd1PiR3dTsKKyAgICAjJHZpcmFtYScncnJoPiR3cnI7CisgICAgJHZpcmFtYScnclx1MDMyNVx1MDMwND4kd3JyOworICAgICMkdmlyYW1hJydyaD4kd3I7CisgICAgJHZpcmFtYScnclx1MDMyNT4kd3I7CisgICAgJHZpcmFtYScnbFx1MDMyNVx1MDMwND4kd2xsOworICAgICMkdmlyYW1hJydsaD4kd2w7CisgICAgJHZpcmFtYScnbFx1MDMyNT4kd2w7CisgICAgJHZpcmFtYScnZVx1MDMwND4kd2U7CisgICAgJHZpcmFtYScnb1x1MDMwND4kd287CisgICAgJHZpcmFtYScnYT4kd2E7CisgICAgJHZpcmFtYScnZVx1MDMwNj4kd2NlOworICAgICR2aXJhbWEnJ29cdTAzMDY+JHdjbzsKKyAgICAkdmlyYW1hJydlPiR3c2U7CisgICAgJHZpcmFtYScnbz4kd3NvOworIyBubyB2aXJhbWEKKyAgICAnJ2FcdTAzMDQ+JHdhYTsKKyAgICAnJ2FpPiR3YWk7CisgICAgJydhdT4kd2F1OworICAgICcnaVx1MDMwND4kd2lpOworICAgICcnaT4kd2k7CisgICAgJyd1XHUwMzA0PiR3dXU7CisgICAgJyd1PiR3dTsKKyAgICAnJ3JcdTAzMjVcdTAzMDQ+JHdycjsKKyAgICAnJ3JcdTAzMjU+JHdyOworICAgICcnbFx1MDMyNVx1MDMwND4kd2xsOworICAgICcnbFx1MDMyNT4kd2w7CisgICAgJydlXHUwMzA0PiR3ZTsKKyAgICAnJ29cdTAzMDQ+JHdvOworICAgICcnYT4kd2E7CisgICAgJydlXHUwMzA2PiR3Y2U7CisgICAgJydvXHUwMzA2PiR3Y287CisgICAgJydlPiR3c2U7CisgICAgJydvPiR3c287CisKKyAgICAkdmlyYW1hIH0gWyR6XSA+ICR2aXJhbWE7CisgICAgJHZpcmFtYSB9ICcgJyA+ICR2aXJhbWEgOworICAgICR2aXJhbWF9JGVuZFRoaW5nPjsKKyAgICAwPiR6ZXJvOworICAgIDE+JG9uZTsKKyAgICAyPiR0d287CisgICAgMz4kdGhyZWU7CisgICAgND4kZm91cjsKKyAgICA1PiRmaXZlOworICAgIDY+JHNpeDsKKyAgICA3PiRzZXZlbjsKKyAgICA4PiRlaWdodDsKKyAgICA5PiRuaW5lOworICAgICcnPjsKKyAgICAjOjogTkZDIChORkQpIDsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfTGF0aW5fSmFtby50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0xhdGluX0phbW8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjMWYxOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0xhdGluX0phbW8udHh0CkBAIC0wLDAgKzEsNTI2IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX0xhdGluX0phbW8udHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wMy8wMiAwMDoyNzoyNyAkCisjICRSZXZpc2lvbjogMS41ICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjLSBOLkIuIERPIE5PVCBwdXQgYW55IGZpbHRlcnMsIE5GRCwgZXRjLiBoZXJlIC0tIHRob3NlIGFyZSBhbGlhc2VkIGluCisjLSB0aGUgSU5ERVggZmlsZS4gIFRoaXMgdHJhbnNsaXRlcmF0b3IgaXMsIGJ5IGl0c2VsZiwgbm90CisjLSBpbnN0YW50aWF0ZWQuICBJdCBpcyB1c2VkIGFzIGEgcGFydCBvZiBMYXRpbi1KYW1vLCBMYXRpbi1IYW5ndWwsIG9yCisjLSBpbnZlcnNlcyB0aGVyZW9mLgorCisjIFRyYW5zbGl0ZXJhdGlvbiBmcm9tIExhdGluIGNoYXJhY3RlcnMgdG8gS29yZWFuIHNjcmlwdCBpcyBkb25lIGluCisjIHR3byBzdGVwczogTGF0aW4gdG8gSmFtbywgdGhlbiBKYW1vIHRvIEhhbmd1bC4gIFRoZSBKYW1vLUhhbmd1bAorIyB0cmFuc2xpdGVyYXRpb24gaXMgZG9uZSBhbGdvcml0aG1pY2FsbHkgZm9sbG93aW5nIFVuaWNvZGUgMy4wCisjIHNlY3Rpb24gMy4xMS4gIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBMYXRpbiB0byBKYW1vCisjIHRyYW5zbGl0ZXJhdGlvbiB1c2luZyBydWxlcy4KKworIyBKYW1vIG9jY3VweSB0aGUgYmxvY2sgMTEwMC0xMUZGLiAgV2l0aGluIHRoaXMgYmxvY2sgdGhlcmUgYXJlIHRocmVlCisjIGdyb3VwcyBvZiBjaGFyYWN0ZXJzOiBpbml0aWFsIGNvbnNvbmFudHMgb3IgY2hvc2VvbmcgKEkpLCBtZWRpYWwKKyMgdm93ZWxzIG9yIGp1bmdzZW9uZyAoTSksIGFuZCB0cmFpbGluZyBjb25zb25hbnRzIG9yIGpvbmdzZW9uZyAoRikuCisjIFN0YW5kYXJkIEtvcmVhbiBzeWxsYWJsZXMgYXJlIG9mIHRoZSBmb3JtIEkrTStGKi4KKworIyBTZWN0aW9uIDMuMTEgZGVzY3JpYmVzIHRoZSB1c2Ugb2YgJ2ZpbGxlcicgamFtbyB0byBjb252ZXJ0CisjIG5vbnN0YW5kYXJkIHN5bGxhYmxlcyB0byBzdGFuZGFyZCBmb3JtOiB0aGUgY2hvc2VvbmcgZmlsbGVyIDExNUYgYW5kCisjIHRoZSBqdW5zZW9uZyBmaWxsZXIgMTE2MC4gIEluIHRoaXMgdHJhbnNsaXRlcmF0b3IsIHdlIHdpbGwgbm90IHVzZQorIyAxMTVGIG9yIDExNjAuCisKKyMgV2Ugd2lsbCwgaG93ZXZlciwgaW5zZXJ0IHR3byAnbnVsbCcgamFtbyB0byBtYWtlIGZvcmVpZ24gd29yZHMKKyMgY29uZm9ybSB0byBLb3JlYW4gc3lsbGFibGUgc3RydWN0dXJlLiAgVGhlc2UgYXJlIHRoZSBudWxsIGluaXRpYWwKKyMgY29uc29uYW50IDExMEIgKElFVU5HKSBhbmQgdGhlIG51bGwgdm93ZWwgMTE3MyAoRVUpLiAgSW4gTGF0aW4gdGV4dCwKKyMgd2Ugd2lsbCB1c2UgdGhlIHNlcGFyYXRvciBpbiBvcmRlciB0byBkaXNhbWJpZ3VhdGUgc3RyaW5ncywKKyMgZS5nLiAia2FuLWdnYW4iIChpbml0aWFsIEdHKSB2cy4gImthbmdnYW4iIChmaW5hbCBORyArIGluaXRpYWwgRykuCisKKyMgV2Ugd2lsbCBub3QgdXNlIGFsbCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgamFtbyBibG9jay4gIFdlIHdpbGwKKyMgb25seSB1c2UgdGhlIDE5IGluaXRpYWxzLCAyMSBtZWRpYWxzLCBhbmQgMjcgZmluYWxzIHBvc3Nlc3NpbmcgYQorIyBqYW1vIHNob3J0IG5hbWUgYXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQuNCBvZiB0aGUgVW5pY29kZSBib29rLgorCisjIFJ1bGVzIG9mIHRodW1iLiAgVGhlc2UgZ3VpZGVsaW5lcyBwcm92aWRlIHRoZSBiYXNpYyBmcmFtZXdvcmsKKyMgZm9yIHRoZSBydWxlcy4gIFRoZXkgYXJlIHBocmFzZWQgaW4gdGVybXMgb2YgTGF0aW4tSmFtbyB0cmFuc2xpdGVyYXRpb24uCisjIFRoZSBKYW1vLUxhdGluIHJ1bGVzIGRlcml2ZSBmcm9tIHRoZXNlLCBzaW5jZSB0aGUgSmFtby1MYXRpbiBydWxlcyBhcmUKKyMganVzdCBjb250ZXh0LWZyZWUgdHJhbnNsaXRlcmF0aW9uIG9mIGphbW8gdG8gY29ycmVzcG9uZGluZyBzaG9ydCBuYW1lcywKKyMgd2l0aCB0aGUgYWRkaXRpb24gb2Ygc2VwYXJhdG9ycyB0byBtYWludGFpbiByb3VuZC10cmlwIGludGVncml0eQorIyBpbiB0aGUgY29udGV4dCBvZiB0aGUgTGF0aW4tSmFtbyBydWxlcy4KKworIyBBIHNlcXVlbmNlIG9mIHZvd2VsczoKKyMgLSBUYWtlIHRoZSBsb25nZXN0IHNlcXVlbmNlIHlvdSBjYW4uIElmIHRoZXJlIGFyZSB0b28gbWFueSwgb3IgeW91IGRvbid0CisjICAgaGF2ZSBhIHN0YXJ0aW5nIGNvbnNvbmFudCwgaW50cm9kdWNlIGEgMTEwQiBuZWNlc3NhcnkuCisKKyMgQSBzZXF1ZW5jZSBvZiBjb25zb25hbnRzLgorIyAtIEZpcnN0IGpvaW4gdGhlIGRvdWJsZSBjb25zb25hbnRzOiBHICsgRyAtPiBHRworIyAtIEluIHRoZSByZW1haW5pbmcgbGlzdCwKKyMgLS0gSWYgdGhlcmUgaXMgbm8gcHJlY2VkaW5nIHZvd2VsLCB0YWtlIHRoZSBmaXJzdCBjb25zb25hbnQsIGFuZCBpbnNlcnQgRVUKKyMgICAgYWZ0ZXIgaXQuIENvbnRpbnVlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbnNvbmFudHMuCisjIC0tIElmIHRoZXJlIGlzIG9uZSBjb25zb25hbnQsIGF0dGFjaCB0byB0aGUgZm9sbG93aW5nIHZvd2VsCisjIC0tIElmIHRoZXJlIGFyZSB0d28gY29uc29uYW50cyBhbmQgYSBmb2xsb3dpbmcgdm93ZWwsIGF0dGFjaCBvbmUgdG8gdGhlCisjICAgIHByZWNlZWRpbmcgdm93ZWwsIGFuZCBvbmUgdG8gdGhlIGZvbGxvd2luZyB2b3dlbC4KKyMgLS0gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gY29uc29uYW50cywgam9pbiB0aGUgZmlyc3QgdHdvIHRvZ2V0aGVyIGlmIHlvdQorIyAgICBjYW46IEwgKyBHID0+IExHCisjIC0tIElmIHlvdSBzdGlsbCBlbmQgdXAgd2l0aCBtb3JlIHRoYW4gMiBjb25zb25hbnRzLCBpbnNlcnQgRVUgYWZ0ZXIgdGhlCisjICAgIGZpcnN0IG9uZSwgYW5kIGNvbnRpbnVlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbnNvbmFudHMuCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZhcmlhYmxlcworCisjIFNvbWUgbGF0aW4gY29uc29uYW50cyBvciBjb25zb25hbnQgcGFpcnMgb25seSBvY2N1ciBhcyBpbml0aWFscywgYW5kCisjIHNvbWUgb25seSBhcyBmaW5hbHMsIGJ1dCBzb21lIG9jY3VyIGFzIGJvdGguICBUaGlzIG1ha2VzIHNvbWUgamFtbworIyBjb25zb25hbnRzIGFtYmlndW91cyB3aGVuIHRyYW5zbGl0ZXJhdGVkIGludG8gbGF0aW4uCisjICAgSW5pdGlhbCBvbmx5OiBJRVVORyBCQiBERCBKSiBSCisjICAgRmluYWwgb25seTogQlMgR1MgTCBMQiBMRyBMSCBMTSBMUCBMUyBMVCBORyBOSCBOSgorIyAgIEluaXRpYWwgYW5kIEZpbmFsOiBCIEMgRCBHIEdHIEggSiBLIE0gTiBQIFMgU1MgVAorCisgICRHaSA9IFx1MTEwMDsKKyAgJEdHaSA9IFx1MTEwMTsKKyAgJE5pID0gXHUxMTAyOworICAkRGkgPSBcdTExMDM7CisgICRERCA9IFx1MTEwNDsKKyAgJFIgPSBcdTExMDU7CisgICRNaSA9IFx1MTEwNjsKKyAgJEJpID0gXHUxMTA3OworICAkQkIgPSBcdTExMDg7CisgICRTaSA9IFx1MTEwOTsKKyAgJFNTaSA9IFx1MTEwQTsKKyAgJElFVU5HID0gXHUxMTBCOyAjIG51bGwgaW5pdGlhbCwgaW5zZXJ0ZWQgZHVyaW5nIExhdGluLUphbW8KKyAgJEppID0gXHUxMTBDOworICAkSkogPSBcdTExMEQ7CisgICRDaSA9IFx1MTEwRTsKKyAgJEtpID0gXHUxMTBGOworICAkVGkgPSBcdTExMTA7CisgICRQaSA9IFx1MTExMTsKKyAgJEhpID0gXHUxMTEyOworCisgICRBID0gXHUxMTYxOworICAkQUUgPSBcdTExNjI7CisgICRZQSA9IFx1MTE2MzsKKyAgJFlBRSA9IFx1MTE2NDsKKyAgJEVPID0gXHUxMTY1OworICAkRSA9IFx1MTE2NjsKKyAgJFlFTyA9IFx1MTE2NzsKKyAgJFlFID0gXHUxMTY4OworICAkTyA9IFx1MTE2OTsKKyAgJFdBID0gXHUxMTZBOworICAkV0FFID0gXHUxMTZCOworICAkT0UgPSBcdTExNkM7CisgICRZTyA9IFx1MTE2RDsKKyAgJFUgPSBcdTExNkU7CisgICRXRU8gPSBcdTExNkY7CisgICRXRSA9IFx1MTE3MDsKKyAgJFdJID0gXHUxMTcxOworICAkWVUgPSBcdTExNzI7CisgICRFVSA9IFx1MTE3MzsgIyBudWxsIG1lZGlhbCwgaW5zZXJ0ZWQgZHVyaW5nIExhdGluLUphbW8KKyAgJFlJID0gXHUxMTc0OworICAkSSA9IFx1MTE3NTsKKworICAkR2YgPSBcdTExQTg7CisgICRHR2YgPSBcdTExQTk7CisgICRHUyA9IFx1MTFBQTsKKyAgJE5mID0gXHUxMUFCOworICAkTkogPSBcdTExQUM7CisgICROSCA9IFx1MTFBRDsKKyAgJERmID0gXHUxMUFFOworICAkTCA9IFx1MTFBRjsKKyAgJExHID0gXHUxMUIwOworICAkTE0gPSBcdTExQjE7CisgICRMQiA9IFx1MTFCMjsKKyAgJExTID0gXHUxMUIzOworICAkTFQgPSBcdTExQjQ7CisgICRMUCA9IFx1MTFCNTsKKyAgJExIID0gXHUxMUI2OworICAkTWYgPSBcdTExQjc7CisgICRCZiA9IFx1MTFCODsKKyAgJEJTID0gXHUxMUI5OworICAkU2YgPSBcdTExQkE7CisgICRTU2YgPSBcdTExQkI7CisgICRORyA9IFx1MTFCQzsKKyAgJEpmID0gXHUxMUJEOworICAkQ2YgPSBcdTExQkU7CisgICRLZiA9IFx1MTFCRjsKKyAgJFRmID0gXHUxMUMwOworICAkUGYgPSBcdTExQzE7CisgICRIZiA9IFx1MTFDMjsKKyAgCisgICRqYW1vSW5pdGlhbCA9IFtcdTExMDAtXHUxMTEyXTsKKworICAkamFtb01lZGlhbCA9IFtcdTExNjEtXHUxMTc1XTsKKworICAkbGF0aW5Jbml0aWFsID0gW2JjZGdoamttbnByc3RdOworCisgICMgQW55IGNoYXJhY3RlciBpbiB0aGUgbGF0aW4gdHJhbnNsaXRlcmF0aW9uIG9mIGEgbWVkaWFsCisgICRsYXRpbk1lZGlhbCA9IFthZWlvdXd5XTsKKworICAjIFRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGF0aW4gdHJhbnNsaXRlcmF0aW9uIG9mIGEgbWVkaWFsCisgICRsYXRpbk1lZGlhbEVuZCA9IFthZWlvdV07CisKKyAgIyBEaXNhbWJpZ3VhdGlvbiBzZXBhcmF0b3IKKyAgJHNlcCA9IFwnOworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBKYW1vLUxhdGluCisKKyMgSmFtbyB0byBsYXRpbiBpcyByZWxhdGl2ZWx5IHNpbXBsZSwgc2luY2UgaXQgaXMgdGhlIGxhdGluIHRoYXQgaXMKKyMgYW1iaWd1b3VzLiAgTW9zdCBydWxlcyBhcmUgc3RyYWlnaHRmb3J3YXJkLCBhbmQgd2UgZW5jb2RlIHRoZW0gYmVsb3cKKyMgYXMgc2ltcGxlIGFkZC1vbiBiYWNrIHJ1bGUsIGUuZy46CisKKyMgICAkamFtb01lZGlhbCB7YnN9ID4gJEJTOworCisjIGJlY29tZXMKKworIyAgICRqYW1vTWVkaWFsIHtic30gPD4gJEJTOworCisjIEZ1cnRoZXJtb3JlLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBvcmRlcmluZyBmb3IgSmFtby1MYXRpbiBiZWNhdXNlCisjIHdlIGFyZSBnb2luZyBmcm9tIHNpbmdsZSBjaGFyYWN0ZXJzLCBzbyB3ZSBjYW4gdmVyeSBlYXNpbHkgcGlnZ3liYWNrCisjIG9uIHRoZSBMYXRpbi1KYW1vLgorCisjIFRoZSBtYWluIGlzc3VlIHdpdGggSmFtby1MYXRpbiBpcyB3aGVuIHRvIGluc2VydCBzZXBhcmF0b3JzLgorIyBTZXBhcmF0b3JzIGFyZSBpbnNlcnRlZCB0byBvYnRhaW4gY29ycmVjdCByb3VuZCB0cmlwIGJlaGF2aW9yLiAgRm9yCisjIGV4YW1wbGUsIHRoZSBzZXF1ZW5jZSBLaSBBIEdmIEdpIEUsIGlmIHRyYW5zbGl0ZXJhdGVkIHRvICJrYWdnZSIsCisjIHdvdWxkIHRoZW4gcm91bmQgdHJpcCB0byBLaSBBIEdHaSBFLiAgVG8gcHJldmVudCB0aGlzLCB3ZSBpbnNlcnQgYQorIyBzZXBhcmF0b3I6ICJrYWctZ2UiLiAgSU1QT1JUQU5UOiBUaGUgbmVlZCBmb3Igc2VwYXJhdG9ycyBkZXBlbmRzCisjIHZlcnkgc3BlY2lmaWNhbGx5IG9uIHRoZSBiZWhhdmlvciBvZiB0aGUgTGF0aW4tSmFtbyBydWxlcy4gIEEgY2hhbmdlCisjIGluIHRoZSBMYXRpbi1KYW1vIGJlaGF2aW9yIGNhbiBjb21wbGV0ZWx5IGNoYW5nZSB0aGUgd2F5IHRoZQorIyBzZXBhcmF0b3IgaW5zZXJ0aW9uIG11c3QgYmUgZG9uZS4KKworIyBGaXJzdCB0cnkgdG8gcHJlc2VydmUgYWN0dWFsIHNlcGFyYXRvcnMgaW4gdGhlIGphbW8gdGV4dCBieSBkb3VibGluZworIyB0aGVtLiAgVGhpcyBmaXhlcyBwcm9ibGVtcyBsaWtlOgorIyAoRGkpKEEpKEppKShVKShORyktKElFVU5HKShZRU8pKE5mKShHaSkoWUVPKShMKSA9PiBkYWp1bmcteWVvbmd5ZW9sCisjID0+IChEaSkoQSkoSmkpKFUpKE5HKShJRVVORykoWUVPKShOZikoR2kpKFlFTykoTCkuICBUaGlzIGlzIG9wdGlvbmFsCisjIC0tIGlmIHdlIGRvbid0IGNhcmUgYWJvdXQgbG9zaW5nIHNlcGFyYXRvcnMgaW4gdGhlIGphbW8sIHdlIGNhbiBkZWxldGUKKyMgdGhpcyBydWxlLgorCisgICRzZXAgJHNlcCA8PiAkc2VwOworCisjIFRyaXBsZSBjb25zb25hbnRzLiAgRm9yIHRocmVlIGNvbnNvbmFudHMgImF4eHgiIHdlIGluc2VydCBhCisjIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kICJ4IiBpZiBYWGYsIFhmLCBhbmQgWGkgYWxsCisjIGV4aXN0LCBhbmQgd2UgaGF2ZSBBIFhmIFhYaS4gIFRoaXMgcHJldmVudHMgdGhlIHJldmVyc2UKKyMgdHJhbnNsaXRlcmF0aW9uIHRvIEEgWFhmIFhpLgorCisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgZyB7fSAkR0dpOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIHMge30gJFNTaTsKKworIyBGb3Igdm93ZWxzIHRoZSBydWxlIGlzIHNpbWlsYXIuICBJZiB0aGVyZSBpcyBhIHZvd2VsICJhZSIgc3VjaCB0aGF0CisjICJhIiBieSBpdHNlbGYgYW5kICJlIiBieSBpdHNlbGYgYXJlIHZvd2VscywgdGhlbiB3ZSB3YW50IHRvIG1hcCBBIEUKKyMgdG8gImEtZSIgc28gYXMgbm90IHRvIHJvdW5kIHRyaXAgdG8gQUUuICBIb3dldmVyLCBpbiB0aGUgdGV4dCBLaSBFTworIyBJRVVORyBFIHdlIGRvbid0IG5lZWQgdG8gbWFwIHRvICJrZW8tZSIuICAia2VvZSIgc3VmZmljZXMuICBGb3IKKyMgdm93ZWxzIG9mIHRoZSBmb3JtICJhZWkiLCBib3RoICJhZSIgKyAiaSIgYW5kICJhIiArICJlaSIgbXVzdCBiZQorIyB0ZXN0ZWQuICBOT1RFOiBUaGVzZSBydWxlcyB1c2VkIHRvIGhhdmUgYSBsZWZ0IGNvbnRleHQgb2YKKyMgJGxhdGluSW5pdGlhbCBpbnN0ZWFkIG9mIFteJGxhdGluTWVkaWFsXS4gIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBpcworIyBzZXF1ZW5jZXMgd2hlcmUgYW4gaW5pdGlhbCBJRVVORyBpcyB0cmFuc2xpdGVyYXRlZCBhd2F5OgorIyAgIChJRVVORykoQSkoSUVVTkcpKEVPKSA9PiBhZW8gPT4gKElFVU5HKShBRSkoSUVVTkcpKE8pCisKKyAgJHNlcCA8IFteJGxhdGluTWVkaWFsXSBbeSB3XSBlIHt9IFskTyAkT0VdOworICAkc2VwIDwgW14kbGF0aW5NZWRpYWxdIGUge30gWyRPICRPRSAkVV07CisgICRzZXAgPCBbXiRsYXRpbk1lZGlhbF0gW28gYV0ge30gWyRFICRFTyAkRVVdOworICAkc2VwIDwgW14kbGF0aW5NZWRpYWxdIFt3IHldIGEge30gWyRFICRFTyAkRVVdOworCisjIFNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgd2l0aCBhbiBpbnRlcnZlbmluZyAkSUVVTkcuCisKKyAgJHNlcCA8IFteJGxhdGluTWVkaWFsXSBbeSB3XSBlIHt9ICRJRVVORyBbJE8gJE9FXTsKKyAgJHNlcCA8IFteJGxhdGluTWVkaWFsXSBlIHt9ICRJRVVORyBbJE8gJE9FICRVXTsKKyAgJHNlcCA8IFteJGxhdGluTWVkaWFsXSBbbyBhXSB7fSAkSUVVTkcgWyRFICRFTyAkRVVdOworICAkc2VwIDwgW14kbGF0aW5NZWRpYWxdIFt3IHldIGEge30gJElFVU5HIFskRSAkRU8gJEVVXTsKKworIyBTaW5nbGUgZmluYWxzIGZvbGxvd2VkIGJ5IElFVU5HLiAgVGhlIGphbW8gc2VxdWVuY2UgQSBYZiBJRVVORyBFLAorIyB3aGVyZSBYaSBhbHNvIGV4aXN0cywgbXVzdCBiZSB0cmFuc2xpdGVyYXRlZCBhcyAiYXgtZSIgdG8gcHJldmVudAorIyB0aGUgcm91bmQgdHJpcCBjb252ZXJzaW9uIHRvIEEgWGkgRS4KKworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGIge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGMge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGQge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGcge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGgge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGoge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGsge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIG0ge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIG4ge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIHAge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIHMge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIHQge30gJElFVU5HICRqYW1vTWVkaWFsOworCisjIERvdWJsZSBmaW5hbHMgZm9sbG93ZWQgYnkgSUVVTkcuICBTaW1pbGFyIHRvIHRoZSBzaW5nbGUgZmluYWxzCisjIGZvbGxvd2VkIGJ5IElFVU5HLiAgQW55IGxhdGluIGNvbnNvbmFudCBwYWlyIFggWSwgYmV0d2VlbiBtZWRpYWxzLAorIyB0aGF0IHdlIHdvdWxkIHNwbGl0IGJ5IExhdGluLUphbW8sIHdlIG11c3QgaGFuZGxlIHdoZW4gaXQgb2NjdXJzIGFzCisjIHBhcnQgb2YgQSBYWWYgSUVVTkcgRSwgdG8gcHJldmVudCByb3VuZCB0cmlwIGNvbnZlcnNpb24gdG8gQSBYZiBZaQorIyBFLgorCisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgYiBzIHt9ICRJRVVORyAkamFtb01lZGlhbDsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBnIGcge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGcgcyB7fSAkSUVVTkcgJGphbW9NZWRpYWw7CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgbCBiIHt9ICRJRVVORyAkamFtb01lZGlhbDsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBsIGcge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGwgaCB7fSAkSUVVTkcgJGphbW9NZWRpYWw7CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgbCBtIHt9ICRJRVVORyAkamFtb01lZGlhbDsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBsIHAge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIGwgcyB7fSAkSUVVTkcgJGphbW9NZWRpYWw7CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgbCB0IHt9ICRJRVVORyAkamFtb01lZGlhbDsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBuIGcge30gJElFVU5HICRqYW1vTWVkaWFsOworICAkc2VwIDwgJGxhdGluTWVkaWFsRW5kIG4gaCB7fSAkSUVVTkcgJGphbW9NZWRpYWw7CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgbiBqIHt9ICRJRVVORyAkamFtb01lZGlhbDsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBzIHMge30gJElFVU5HICRqYW1vTWVkaWFsOworCisjIFNwbGl0IGRvdWJsZXMuICBUZXh0IG9mIHRoZSBmb3JtIEEgWGkgWGYgRSwgd2hlcmUgWFhpIGFsc28gb2NjdXJzLAorIyB3ZSB0cmFuc2xpdGVyYXRlIGFzICJheC14ZSIgdG8gcHJldmVudCByb3VuZCB0cmlwIHRyYW5zbGl0ZXJhdGlvbiBhcworIyBBIFhYaSBFLgorCisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgYiB7fSAkQmkgJGphbW9NZWRpYWw7CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgZCB7fSAkRGkgJGphbW9NZWRpYWw7CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgaiB7fSAkSmkgJGphbW9NZWRpYWw7CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgZyB7fSAkR2kgJGphbW9NZWRpYWw7CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgcyB7fSAkU2kgJGphbW9NZWRpYWw7CisKKyMgWFlZLiAgVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgWFlZIHJ1bGUgaW4gTGF0aW4tSmFtby4gIEJ5IGRlZmF1bHQKKyMgTGF0aW4tSmFtbyBtYXBzICJ4eXkiIHRvIFhmIFlZaSwgdG8ga2VlcCBZWSB0b2dldGhlci4gIEFzIGEgcmVzdWx0LAorIyAieHl5IiBmb3JtcyB0aGF0IGNvcnJlc3BvbmQgdG8gWFlmIFlpIG11c3QgYmUgdHJhbnNsaXRlcmF0ZWQgYXMKKyMgInh5LXkiLgorCisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgYiBzIHt9IFskU2kgJFNTaV07CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgZyBzIHt9IFskU2kgJFNTaV07CisgICRzZXAgPCAkbGF0aW5NZWRpYWxFbmQgbCBiIHt9IFskQmkgJEJCXTsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBsIGcge30gWyRHaSAkR0dpXTsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBsIHMge30gWyRTaSAkU1NpXTsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBuIGcge30gWyRHaSAkR0dpXTsKKyAgJHNlcCA8ICRsYXRpbk1lZGlhbEVuZCBuIGoge30gWyRKaSAkSkpdOworCisjIERlbGV0aW9uIG9mIElFVU5HIGlzIGhhbmRsZWQgYmVsb3cuCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExhdGluLUphbW8KKworIyBbQmFzaWMsIGNvbnRleHQtZnJlZSBKYW1vLUxhdGluIHJ1bGVzIGFyZSBlbWJlZGRlZCBoZXJlIHRvby4gIFNlZQorIyBhYm92ZS5dCisKKyMgU3BsaXQgZGlncmFwaHM6IFRleHQgb2YgdGhlIGZvcm0gJ2F4eWUnLCB3aGVyZSAneHknIGlzIGEgZmluYWwKKyMgZGlncmFwaCwgJ3gnIGlzIGEgZmluYWwgKGJ5IGl0c2VsZiksICd5JyBpcyBhbiBpbml0aWFsLCBhbmQgJ2EnIGFuZAorIyAnZScgYXJlIG1lZGlhbHMsIHdlIHdhbnQgdG8gdHJhbnNsaXRlcmF0ZSB0aGlzIGFzIEEgWGYgWWkgRSByYXRoZXIKKyMgdGhhbiBBIFhZZiBJRVVORyBFLiAgV2UgZG8gTk9UIGluY2x1ZGUgdGV4dCBvZiB0aGUgZm9ybSAiYXh4ZSIsCisjIHNpbmNlIHRoYXQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBiZWxvdy4gIFRoZXNlIHJ1bGVzIGFyZSBnZW5lcmF0ZWQKKyMgcHJvZ3JhbW1hdGljYWxseSBmcm9tIHRoZSBqYW1vIGRhdGEuCisKKyAgJGphbW9NZWRpYWwge2Igc30gJGxhdGluTWVkaWFsID4gJEJmICRTaTsKKyAgJGphbW9NZWRpYWwge2cgc30gJGxhdGluTWVkaWFsID4gJEdmICRTaTsKKyAgJGphbW9NZWRpYWwge2wgYn0gJGxhdGluTWVkaWFsID4gJEwgJEJpOworICAkamFtb01lZGlhbCB7bCBnfSAkbGF0aW5NZWRpYWwgPiAkTCAkR2k7CisgICRqYW1vTWVkaWFsIHtsIGh9ICRsYXRpbk1lZGlhbCA+ICRMICRIaTsKKyAgJGphbW9NZWRpYWwge2wgbX0gJGxhdGluTWVkaWFsID4gJEwgJE1pOworICAkamFtb01lZGlhbCB7bCBwfSAkbGF0aW5NZWRpYWwgPiAkTCAkUGk7CisgICRqYW1vTWVkaWFsIHtsIHN9ICRsYXRpbk1lZGlhbCA+ICRMICRTaTsKKyAgJGphbW9NZWRpYWwge2wgdH0gJGxhdGluTWVkaWFsID4gJEwgJFRpOworICAkamFtb01lZGlhbCB7biBnfSAkbGF0aW5NZWRpYWwgPiAkTmYgJEdpOworICAkamFtb01lZGlhbCB7biBofSAkbGF0aW5NZWRpYWwgPiAkTmYgJEhpOworICAkamFtb01lZGlhbCB7biBqfSAkbGF0aW5NZWRpYWwgPiAkTmYgJEppOworCisjIFNpbmdsZSBjb25zb25hbnRzIGFyZSBpbml0aWFsczogVGV4dCBvZiB0aGUgZm9ybSAnYXhlJywgd2hlcmUgJ3gnCisjIGNhbiBiZSBhbiBpbml0aWFsIG9yIGEgZmluYWwsIGFuZCAnYScgYW5kICdlJyBhcmUgbWVkaWFscywgd2Ugd2FudAorIyB0byB0cmFuc2xpdGVyYXRlIGFzIEEgWGkgRSByYXRoZXIgdGhhbiBBIFhmIElFVU5HIEUuCisKKyAgJGphbW9NZWRpYWwge2J9ICRsYXRpbk1lZGlhbCA+ICRCaTsKKyAgJGphbW9NZWRpYWwge2N9ICRsYXRpbk1lZGlhbCA+ICRDaTsKKyAgJGphbW9NZWRpYWwge2R9ICRsYXRpbk1lZGlhbCA+ICREaTsKKyAgJGphbW9NZWRpYWwge2d9ICRsYXRpbk1lZGlhbCA+ICRHaTsKKyAgJGphbW9NZWRpYWwge2h9ICRsYXRpbk1lZGlhbCA+ICRIaTsKKyAgJGphbW9NZWRpYWwge2p9ICRsYXRpbk1lZGlhbCA+ICRKaTsKKyAgJGphbW9NZWRpYWwge2t9ICRsYXRpbk1lZGlhbCA+ICRLaTsKKyAgJGphbW9NZWRpYWwge219ICRsYXRpbk1lZGlhbCA+ICRNaTsKKyAgJGphbW9NZWRpYWwge259ICRsYXRpbk1lZGlhbCA+ICROaTsKKyAgJGphbW9NZWRpYWwge3B9ICRsYXRpbk1lZGlhbCA+ICRQaTsKKyAgJGphbW9NZWRpYWwge3N9ICRsYXRpbk1lZGlhbCA+ICRTaTsKKyAgJGphbW9NZWRpYWwge3R9ICRsYXRpbk1lZGlhbCA+ICRUaTsKKworIyBEb3VibGVkIGluaXRpYWxzLiAgVGhlIHNlcXVlbmNlICJheHhlIiwgd2hlcmUgWFggZXhpc3RzIGFzIGFuIGluaXRpYWwKKyMgKFhYaSksIGFuZCBhbHNvIFhpIGFuZCBYZiBleGlzdCAodHJ1ZSBvZiBhbGwgZGlncmFwaHMgWFgpLCB3ZSB3YW50CisjIHRvIHRyYW5zbGl0ZXJhdGUgYXMgQSBYWGkgRSwgcmF0aGVyIHRoYW4gc3BsaXQgdG8gQSBYZiBYaSBFLgorCisgICRqYW1vTWVkaWFsIHtiIGJ9ICRsYXRpbk1lZGlhbCA+ICRCQjsKKyAgJGphbW9NZWRpYWwge2QgZH0gJGxhdGluTWVkaWFsID4gJEREOworICAkamFtb01lZGlhbCB7aiBqfSAkbGF0aW5NZWRpYWwgPiAkSko7CisgICRqYW1vTWVkaWFsIHtnIGd9ICRsYXRpbk1lZGlhbCA+ICRHR2k7CisgICRqYW1vTWVkaWFsIHtzIHN9ICRsYXRpbk1lZGlhbCA+ICRTU2k7CisKKyMgWFlZLiAgQmVjYXVzZSBkb3VibGVkIGNvbnNvbmFudHMgYmluZCBtb3JlIHN0cm9uZ2x5IHRoYW4gWFkKKyMgY29uc29uYW50cywgd2UgbXVzdCBoYW5kbGUgdGhlIHNlcXVlbmNlICJheHl5IiBzcGVjaWFsbHkuICBIZXJlIFhZZgorIyBhbmQgWVlpIG11c3QgZXhpc3QuICBJbiB0aGVzZSBjYXNlcywgd2UgbWFwIHRvIFhmIFlZaSByYXRoZXIgdGhhbgorIyBYWWYuCisKKyAgJGphbW9NZWRpYWwge2J9IHMgcyA+ICRCZjsKKyAgJGphbW9NZWRpYWwge2d9IHMgcyA+ICRHZjsKKyAgJGphbW9NZWRpYWwge2x9IGIgYiA+ICRMOworICAkamFtb01lZGlhbCB7bH0gZyBnID4gJEw7CisgICRqYW1vTWVkaWFsIHtsfSBzIHMgPiAkTDsKKyAgJGphbW9NZWRpYWwge259IGcgZyA+ICROZjsKKyAgJGphbW9NZWRpYWwge259IGogaiA+ICROZjsKKworIyBGaW5hbHM6IEF0dGFjaCBjb25zb25hbnQgd2l0aCBwcmVjZWRpbmcgbWVkaWFsIHRvIHByZWNlZGluZyBtZWRpYWwuCisjIERvIHRoaXMgQkVGT1JFIG1hcHBpbmcgY29uc29uYW50cyB0byBpbml0aWFscy4gIExvbmdlciBrZXlzIG11c3QKKyMgcHJlY2VkZSBzaG9ydGVyIGtleXMgdGhhdCB0aGV5IHN0YXJ0IHdpdGgsIGUuZy4sIHRoZSBydWxlIGZvciAnYnMnCisjIG11c3QgcHJlY2VkZSAnYicuCisKKyMgW0JBU0lDIEphbW8tTGF0aW4gRklOQUxTIGhhbmRsZWQgaGVyZS4gIE9yZGVyIGlycmVsZXZhbnQgd2l0aGluIHRoaXMKKyMgYmxvY2sgZm9yIEphbW8tTGF0aW4uXQorCisgICRqYW1vTWVkaWFsIHtic30gPD4gJEJTOworICAkamFtb01lZGlhbCB7Yn0gPD4gJEJmOworICAkamFtb01lZGlhbCB7Y30gPD4gJENmOworICAkamFtb01lZGlhbCB7ZH0gPD4gJERmOworICAkamFtb01lZGlhbCB7Z2d9IDw+ICRHR2Y7CisgICRqYW1vTWVkaWFsIHtnc30gPD4gJEdTOworICAkamFtb01lZGlhbCB7Z30gPD4gJEdmOworICAkamFtb01lZGlhbCB7aH0gPD4gJEhmOworICAkamFtb01lZGlhbCB7an0gPD4gJEpmOworICAkamFtb01lZGlhbCB7a30gPD4gJEtmOworICAkamFtb01lZGlhbCB7bGJ9IDw+ICRMQjsgICRqYW1vTWVkaWFsIHtsZ30gPD4gJExHOworICAkamFtb01lZGlhbCB7bGh9IDw+ICRMSDsKKyAgJGphbW9NZWRpYWwge2xtfSA8PiAkTE07CisgICRqYW1vTWVkaWFsIHtscH0gPD4gJExQOworICAkamFtb01lZGlhbCB7bHN9IDw+ICRMUzsKKyAgJGphbW9NZWRpYWwge2x0fSA8PiAkTFQ7CisgICRqYW1vTWVkaWFsIHtsfSA8PiAkTDsKKyAgJGphbW9NZWRpYWwge219IDw+ICRNZjsKKyAgJGphbW9NZWRpYWwge25nfSA8PiAkTkc7CisgICRqYW1vTWVkaWFsIHtuaH0gPD4gJE5IOworICAkamFtb01lZGlhbCB7bmp9IDw+ICROSjsKKyAgJGphbW9NZWRpYWwge259IDw+ICROZjsKKyAgJGphbW9NZWRpYWwge3B9IDw+ICRQZjsKKyAgJGphbW9NZWRpYWwge3NzfSA8PiAkU1NmOworICAkamFtb01lZGlhbCB7c30gPD4gJFNmOworICAkamFtb01lZGlhbCB7dH0gPD4gJFRmOworCisjIEluaXRpYWxzOiBBdHRhY2ggc2luZ2xlIGNvbnNvbmFudCB0byBmb2xsb3dpbmcgbWVkaWFsLiAgRG8gdGhpcworIyBBRlRFUiBtYXBwaW5nIGZpbmFscy4gIExvbmdlciBrZXlzIG11c3QgcHJlY2VkZSBzaG9ydGVyIGtleXMgdGhhdAorIyB0aGV5IHN0YXJ0IHdpdGgsIGUuZy4sIHRoZSBydWxlIGZvciAnZ2cnIG11c3QgcHJlY2VkZSAnZycuCisKKyMgW0JBU0lDIEphbW8tTGF0aW4gSU5JVElBTFMgaGFuZGxlZCBoZXJlLiAgT3JkZXIgaXJyZWxldmFudCB3aXRoaW4KKyMgdGhpcyBibG9jayBmb3IgSmFtby1MYXRpbi5dCisKKyAge2dnfSAkbGF0aW5NZWRpYWwgPD4gJEdHaTsKKyAge2d9ICRsYXRpbk1lZGlhbCA8PiAkR2k7CisgIHtufSAkbGF0aW5NZWRpYWwgPD4gJE5pOworICB7ZGR9ICRsYXRpbk1lZGlhbCA8PiAkREQ7CisgIHtkfSAkbGF0aW5NZWRpYWwgPD4gJERpOworICB7cn0gJGxhdGluTWVkaWFsIDw+ICRSOworICB7bX0gJGxhdGluTWVkaWFsIDw+ICRNaTsKKyAge2JifSAkbGF0aW5NZWRpYWwgPD4gJEJCOworICB7Yn0gJGxhdGluTWVkaWFsIDw+ICRCaTsKKyAge3NzfSAkbGF0aW5NZWRpYWwgPD4gJFNTaTsKKyAge3N9ICRsYXRpbk1lZGlhbCA8PiAkU2k7CisgIHtqan0gJGxhdGluTWVkaWFsIDw+ICRKSjsKKyAge2p9ICRsYXRpbk1lZGlhbCA8PiAkSmk7CisgIHtjfSAkbGF0aW5NZWRpYWwgPD4gJENpOworICB7a30gJGxhdGluTWVkaWFsIDw+ICRLaTsKKyAge3R9ICRsYXRpbk1lZGlhbCA8PiAkVGk7CisgIHtwfSAkbGF0aW5NZWRpYWwgPD4gJFBpOworICB7aH0gJGxhdGluTWVkaWFsIDw+ICRIaTsKKworIyAncicgaW4gZmluYWwgcG9zaXRpb24uICBCZWNhdXNlIG9mIHRoZSBlcXVpdmFsZW5jeSBvZiB0aGUgJ2wnIGFuZAorIyAncicgamFtbyAodGhlIGdseXBocyBhcmUgdGhlIHNhbWUpLCB3ZSB0cnkgdG8gcHJvdmlkZSB0aGUgc2FtZQorIyBlcXVpdmFsZW5jeSBpbiBMYXRpbi1KYW1vLiAgVGhlICdsJyB0byAncicgY29udmVyc2lvbiBpcyBoYW5kbGVkCisjIGJlbG93LiAgSWYgd2Ugc2VlIGFuICdyJyBpbiBhbiBhcHBhcmVudCBmaW5hbCBwb3NpdGlvbiwgdHJlYXQgaXQKKyMgbGlrZSAnbCcuICBGb3IgZXhhbXBsZSwgImthcmthIiA9PiBLaSBBIFIgRVUgS2kgQSB3aXRob3V0IHRoaXMgcnVsZS4KKyMgSW5zdGVhZCwgd2Ugd2FudCBLaSBBIEwgS2kgQS4KKworICAkamFtb01lZGlhbCB7cn0gJGxhdGluSW5pdGlhbCA+IHwgbDsKKworIyBJbml0aWFsICsgRmluYWw6IElmIHdlIG1hdGNoIHRoZSBuZXh0IHJ1bGUsIHdlIGhhdmUgaW5pdGlhbCB0aGVuCisjIGZpbmFsIGNvbnNvbmFudCB3aXRoIG5vIGludGVydmVuaW5nIG1lZGlhbC4gIFdlIGluc2VydCB0aGUgbnVsbAorIyB2b3dlbCBCRUZPUkUgaXQgdG8gY3JlYXRlIGEgd2VsbC1mb3JtZWQgc3lsbGFibGUuICAoSW4gdGhlIG5leHQgcnVsZQorIyB3ZSBpbnNlcnQgYSBudWxsIHZvd2VsIEFGVEVSIGFuIGFub21hbG91cyBpbml0aWFsLikKKworICAkamFtb0luaXRpYWwge30gW2JjZGdoamtsbW5wc3RdID4gJEVVOworCisjIEluaXRpYWwgKyBYOiBUaGlzIGJsb2NrIG1hdGNoZXMgYW4gaW5pdGlhbCBjb25zb25hbnQgbm90IGZvbGxvd2VkIGJ5CisjIGEgbWVkaWFsLiAgV2UgaW5zZXJ0IHRoZSBudWxsIHZvd2VsIGFmdGVyIGl0LiAgV2UgaGFuZGxlIGRvdWJsZQorIyBpbml0aWFscyBleHBsaWNpdGx5IGhlcmU7IGZvciBzaW5nbGUgaW5pdGlhbCBjb25zb25hbnRzIHdlIGluc2VydCBFVQorIyAoYXMgTGF0aW4pIGFmdGVyIHRoZW0gYW5kIGxldCBzdGFuZGFyZCBydWxlcyBkbyB0aGUgcmVzdC4KKworIyBCUkVBS1MgUk9VTkQgVFJJUCBJTlRFR1JJVFkKKworICBnZyA+ICRHR2kgJEVVOworICBkZCA+ICRERCAkRVU7CisgIGJiID4gJEJCICRFVTsKKyAgc3MgPiAkU1NpICRFVTsKKyAgamogPiAkSkogJEVVOworCisgIChbYmNkZ2hqa21ucHJzdF0pID4gfCAkMSBldTsKKworIyBYICsgRmluYWw6IEZpbmFsbHkgd2UgaGF2ZSB0byBkZWFsIHdpdGggYSBjb25zb25hbnQgdGhhdCBjYW4gb25seSBiZQorIyBpbnRlcnByZXRlZCBhcyBhIGZpbmFsIChub3QgYW4gaW5pdGlhbCkgYW5kIHdoaWNoIGlzIHByZWNlZGVkCisjIG5laXRoZXIgYnkgYW4gaW5pdGlhbCBub3IgYSBtZWRpYWwuICBJdCBpcyB0aGUgc3RhcnQgb2YgdGhlCisjIHN5bGxhYmxlLCBidXQgY2Fubm90IGJlLiAgTW9zdCBvZiB0aGVzZSB3aWxsIGFscmVhZHkgYmUgaGFuZGxlZCBieQorIyB0aGUgYWJvdmUgcnVsZXMuICAnYnMnIHNwbGl0cyBpbnRvIEJpIEVVIFNmLiAgU2ltaWxhciBmb3IgJ2dzJyAnbmcnCisjICduaCcgJ25qJy4gIFRoZSBvbmx5IHByb2JsZW0gaXMgJ2wnIGFuZCBkaWdyYXBocyBzdGFydGluZyB3aXRoICdsJy4KKyMgRm9yIHRoaXMgaXNvbGF0ZWQgY2FzZSwgd2UgY291bGQgYWRkIGEgbnVsbCBpbml0aWFsIGFuZCBtZWRpYWwsCisjIHdoaWNoIHdvdWxkIGdpdmUgImxhIiA9PiBJRVVORyBFVSBMIElFVU5HIEEsIGZvciBleGFtcGxlLiAgQSBtb3JlCisjIGVjb25vbWljYWwgc29sdXRpb24gaXMgdG8gdHJhbnNsaXRlcmF0ZSBpc29sYXRlZCAibCIgKHRoYXQgaXMsCisjIGluaXRpYWwgImwiKSB0byAiciIuICAoT3RoZXIgc2ltaWxhciBjb252ZXJzaW9ucyBvZiBjb25zb25hbnRzIHRoYXQKKyMgb2NjdXIgbmVpdGhlciBhcyBpbml0aWFscyBub3IgYXMgZmluYWxzIGFyZSBoYW5kbGVkIGJlbG93LikKKworICBsID4gfCByOworCisjIE1lZGlhbHMuICBJZiBhIG1lZGlhbCBpcyBwcmVjZWRlZCBieSBhbiBpbml0aWFsLCB0aGVuIHdlIHByb2NlZWQKKyMgbm9ybWFsbHkuICBBcyB1c3VhbCwgbG9uZ2VyIGtleXMgbXVzdCBwcmVjZWRlIHNob3J0ZXIgb25lcy4KKworIyBbQkFTSUMgSmFtby1MYXRpbiBNRURJQUxTIGhhbmRsZWQgaGVyZS4gIE9yZGVyIGlycmVsZXZhbnQgd2l0aGluCisjIHRoaXMgYmxvY2sgZm9yIEphbW8tTGF0aW4uXQorCisgICRqYW1vSW5pdGlhbCB7YWV9IDw+ICRBRTsKKyAgJGphbW9Jbml0aWFsIHthfSA8PiAkQTsKKyAgJGphbW9Jbml0aWFsIHtlb30gPD4gJEVPOworICAkamFtb0luaXRpYWwge2V1fSA8PiAkRVU7CisgICRqYW1vSW5pdGlhbCB7ZX0gPD4gJEU7CisgICRqYW1vSW5pdGlhbCB7aX0gPD4gJEk7CisgICRqYW1vSW5pdGlhbCB7b2V9IDw+ICRPRTsKKyAgJGphbW9Jbml0aWFsIHtvfSA8PiAkTzsKKyAgJGphbW9Jbml0aWFsIHt1fSA8PiAkVTsKKyAgJGphbW9Jbml0aWFsIHt3YWV9IDw+ICRXQUU7CisgICRqYW1vSW5pdGlhbCB7d2F9IDw+ICRXQTsKKyAgJGphbW9Jbml0aWFsIHt3ZW99IDw+ICRXRU87CisgICRqYW1vSW5pdGlhbCB7d2V9IDw+ICRXRTsKKyAgJGphbW9Jbml0aWFsIHt3aX0gPD4gJFdJOworICAkamFtb0luaXRpYWwge3lhZX0gPD4gJFlBRTsKKyAgJGphbW9Jbml0aWFsIHt5YX0gPD4gJFlBOworICAkamFtb0luaXRpYWwge3llb30gPD4gJFlFTzsKKyAgJGphbW9Jbml0aWFsIHt5ZX0gPD4gJFlFOworICAkamFtb0luaXRpYWwge3lpfSA8PiAkWUk7CisgICRqYW1vSW5pdGlhbCB7eW99IDw+ICRZTzsKKyAgJGphbW9Jbml0aWFsIHt5dX0gPD4gJFlVOworCisjIFdlIG1heSBzZWUgYW4gYW5vbWFsb3VzIGlzb2xhdGVkICd3JyBvciAneScuICBJbiB0aGF0IGNhc2UsIHdlCisjIGludGVycHJldCBpdCBhcyAnd2knIGFuZCAneXUnLCByZXNwZWN0aXZlbHkuCisKKyMgQlJFQUtTIFJPVU5EIFRSSVAgSU5URUdSSVRZCisKKyAgJGphbW9Jbml0aWFsIHt3fSA+IHwgd2k7CisgICRqYW1vSW5pdGlhbCB7eX0gPiB8IHl1OworCisjIE90aGVyd2lzZSwgaW5zZXJ0IGEgbnVsbCBjb25zb25hbnQgSUVVTkcgYmVmb3JlIHRoZSBtZWRpYWwgKHdoaWNoIGlzCisjIHN0aWxsIGFuIHVudHJhbnNsaXRlcmF0ZWQgbGF0aW4gdm93ZWwpLgorCisgICgkbGF0aW5NZWRpYWwpID4gJElFVU5HIHwgJDE7CisKKyMgQ29udmVydCBub24tamFtbyBsYXRpbiBjb25zb25hbnRzIHRvIGVxdWl2YWxlbnRzLiAgVGhlc2Ugb2NjdXIgYXMKKyMgbmVpdGhlciBpbml0aWFscyBub3IgZmluYWxzIGluIGphbW8uICAnbCcgb2NjdXJzIGFzIGEgZmluYWwsIGJ1dCBub3QKKyMgYW4gaW5pdGlhbDsgaXQgaXMgaGFuZGxlZCBhYm92ZS4gIFRoZSBmb2xsb3dpbmcgbGV0dGVycyAobGVmdCBoYW5kCisjIHNpZGUpIHdpbGwgbmV2ZXIgYmUgb3V0cHV0IGJ5IEphbW8tTGF0aW4uCisKKyAgZiA+IHwgcDsKKyAgcSA+IHwgazsKKyAgdiA+IHwgYjsKKyAgeCA+IHwga3M7CisgIHogPiB8IHM7CisKKyMgRGVsZXRlIHNlcGFyYXRvcnMgKExhdGluLUphbW8pLgorCisgICRzZXAgPiA7CisKKyMgRGVsZXRlIG51bGwgY29uc29uYW50cyAoSmFtby1MYXRpbikuICBEbyBOT1QgZGVsZXRlIG51bGwgRVUgdm93ZWxzLAorIyBzaW5jZSB0aGVzZSBtYXkgYWxzbyBvY2N1ciBpbiB0ZXh0LgorCisgIDwgJElFVU5HOworCisjLSBOLkIuIERPIE5PVCBwdXQgYW55IGZpbHRlcnMsIE5GRCwgZXRjLiBoZXJlIC0tIHRob3NlIGFyZSBhbGlhc2VkIGluCisjLSB0aGUgSU5ERVggZmlsZS4gIFRoaXMgdHJhbnNsaXRlcmF0b3IgaXMsIGJ5IGl0c2VsZiwgbm90CisjLSBpbnN0YW50aWF0ZWQuICBJdCBpcyB1c2VkIGFzIGEgcGFydCBvZiBMYXRpbi1KYW1vLCBMYXRpbi1IYW5ndWwsIG9yCisjLSBpbnZlcnNlcyB0aGVyZW9mLgorCisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9MYXRpbl9LYXRha2FuYS50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX0xhdGluX0thdGFrYW5hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMWM1OTYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9MYXRpbl9LYXRha2FuYS50eHQKQEAgLTAsMCArMSw0OTkgQEAKK++7vyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfTGF0aW5fS2F0YWthbmEudHh0LHYgJAorIyAkRGF0ZTogMjAwMS8xMi8wMyAwMjoxMDoyNiAkCisjICRSZXZpc2lvbjogMS4xOSAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBub3RlOiBhIGdsb2JhbCBmaWx0ZXIgaXMgbW9yZSBlZmZpY2llbnQsIGJ1dCBNVVNUIGluY2x1ZGUgYWxsIHNvdXJjZSBjaGFycworIzo6IFtcdTAwMDAtXHUwMDdFIFx1MzAwMVx1MzAwMiBcdTMwOTktXHUzMDlDIFx1MzBBMS1cdTMwRkMgXHVGRjYxLVx1RkY5RiBbOkxhdGluOl1bOkthdGFrYW5hOl0gWzpub25zcGFjaW5nIG1hcms6XV0gOworIyBNSU5JTUFMIEZJTFRFUiBHRU5FUkFURUQgRk9SOiBMYXRpbi1LYXRha2FuYQorIyMjIFdBUk5JTkcgLS0gbXVzdCBhZGQgd2lkdGggZmlsdGVyLCBib3RoIGhlcmUgYW5kIGJlbG93ISEhICMjIworOjogW1tcdTExMDAtXHUxMTEyXHUxMTFBXHUxMTIxXHUxMTYwLVx1MTE3NVx1MTFBQVx1MTFBQy1cdTExQURcdTExQjAtXHUxMUI1XHUyMTkwLVx1MjE5M1x1MjUwMlx1MjVBMFx1MjVDQlx1MzAwMC1cdTMwMDJcdTMwMEMtXHUzMDBEXHUzMDk5LVx1MzA5QVx1MzBBMS1cdTMwRURcdTMwRUZcdTMwRjItXHUzMEY0XHUzMEY3XHUzMEZBLVx1MzBGQ1x1RkYwMS1cdUZGNUVcdUZGRTAtXHVGRkU2XVsnLC5BLVphLXp+XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMTBGXHUwMTEyLVx1MDEyNVx1MDEyOC1cdTAxMzBcdTAxMzQtXHUwMTM3XHUwMTM5LVx1MDEzRVx1MDE0My1cdTAxNDhcdTAxNEMtXHUwMTUxXHUwMTU0LVx1MDE2NVx1MDE2OC1cdTAxN0VcdTAxQTAtXHUwMUExXHUwMUFGLVx1MDFCMFx1MDFDRC1cdTAxRENcdTAxREUtXHUwMUUzXHUwMUU2LVx1MDFFRFx1MDFGMFx1MDFGNC1cdTAxRjVcdTAxRjgtXHUwMjFCXHUwMjFFLVx1MDIxRlx1MDIyNi1cdTAyMzNcdTAzMDRcdTA0RTItXHUwNEUzXHUwNEVFLVx1MDRFRlx1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUxRkIxXHUxRkI5XHUxRkQxXHUxRkQ5XHUxRkUxXHUxRkU5XHUyMTJBLVx1MjEyQl1dIDsKKworOjogWzpMYXRpbjpdIGZ1bGx3aWR0aC1oYWxmd2lkdGggKCk7Cis6OiBORkQgKE5GQyk7Cis6OiBMb3dlciAoKTsgICAgIyB3aGVuZXZlciB0cmFuc2xpdGVyYXRpbmcgZnJvbSBjYXNlZCB0byB1bmNhc2VkIHNjcmlwdCwgaW5jbHVkZSB0aGlzCisjIDo6IE5GRCAoKSA7ICAgIyB0aGlzIHdvdWxkIGNhdGNoIHRoZSBvZGQgY2FzZXMgd2hlcmUgYSBsb3dlcmNhc2UgaXMgbm90IGluIE5GRCwgYnV0IG5vbmUgYXJlIGltcG9ydGFudCBmb3IgSmFwYW5lc2UKKworIyBVc2VzIG1vZGlmaWVkIEhlcGJ1cm4uIFNtYWxsIGNoYW5nZXMgdG8gbWFrZSAgdW5hbWJpZ3VvdXMuCisKKyMgfCBLdW5yZWktc2hpa2k6IEhlcGJ1cm4vTUhlcGJ1cm4KKyMgfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgfCBzaTogc2hpCisjIHwgc2kgfnlhOiBzaGEKKyMgfCBzaSB+eXU6IHNodQorIyB8IHNpIH55bzogc2hvCisjIHwgemk6IGppCisjIHwgemkgfnlhOiBqYQorIyB8IHppIH55dToganUKKyMgfCB6aSB+eW86IGpvCisjIHwgdGk6IGNoaQorIyB8IHRpIH55YTogY2hhCisjIHwgdGkgfnl1OiBjaHUKKyMgfCB0aSB+eXU6IGNobworIyB8IHR1OiB0c3UKKyMgfCBkaTogamkvZGppCisjIHwgZHU6IHp1L2R6dQorIyB8IGh1OiBmdQorCisjIHwgRm9yIGZvcmVpZ24gd29yZHM6CisjIHwgLS0tLS0tLS0tLS0tLS0tLS0KKyMgfCBzZSB+aSBzaQorIyB8IHNpIH5lIHNoZQorIyB8IAorIyB8IHplIH5pIHppCisjIHwgemkgfmUgamUKKyMgfCAKKyMgfCB0ZSB+aSB0aQorIyB8IHRpIH5lIGNoZQorIyB8IHRlIH51IHR1CisjIHwgCisjIHwgZGUgfmkgZGkKKyMgfCBkZSB+dSBkdQorIyB8IGRlIH5pIGRpCisjIHwgCisjIHwgaGUgfnU6IGh1CisjIHwgaHUgfmEgZmEKKyMgfCBodSB+aSBmaQorIyB8IGh1IH5lIGhlCisjIHwgaHUgfm8gaG8KKworIyBNb3N0IHNtYWxsIGZvcm1zIGFyZSBnZW5lcmF0ZWQsIGJ1dCBpZiBuZWNlc3NhcnkKKyMgZXhwbGljaXQgc21hbGwgZm9ybXMgYXJlIGdpdmVuIHdpdGggfmEsIH55YSwgZXRjLgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZhcmlhYmxlcworCiskdm93ZWwgPSBbYWVpb3VdIDsKKyRjb25zb25hbnQgPSBbYmNkZmdoamtsbW5wcXJzdHZ3eHl6XSA7CiskbWFjcm9uID0gXHUwMzA0IDsKKworIyBWYXJpYWJsZXMgdXNlZCBmb3IgZG91YmxlZC1jb25zb25hbnRzIHdpdGggdHN1CisKKyRrYW5hID0gW1x1MzA0MS1cdTMwOTRdIDsKKworJHZvaWNlID0gW1x1MzA5OVx1MzA5Ql07Ciskc2VtaXZvaWNlID0gW1x1MzA5QVx1MzA5Q107CisKKyRrX3N0YXJ0ID0gW+OCq+OCreOCr+OCseOCs+OBi+OBjeOBj+OBkeOBk10gOworCiskc19zdGFydCA9IFvjgrXjgrfjgrnjgrvjgr3jgZXjgZfjgZnjgZvjgZ1dIDsKKworJGpfc3RhcnQgPSBb44K344GXXSAkdm9pY2UgOworCiskdF9zdGFydCA9IFvjgr/jg4Hjg4Tjg4bjg4jjgZ/jgaHjgaTjgabjgahdIDsKKworJG5fc3RhcnQgPSBb44OK44OL44OM44ON44OO44Oz44Gq44Gr44Gs44Gt44GuXSA7CisKKyRoX3N0YXJ0ID0gW+ODj+ODkuODmOODm+OBr+OBsuOBuOOBu10gOworJGZfc3RhcnQgPSBb44OV44G1XSA7CisKKyRtX3N0YXJ0ID0gW+ODnuODn+ODoOODoeODouOBvuOBv+OCgOOCgeOCgl0gOworCiskeV9zdGFydCA9IFvjg6Tjg6bjg6jjgoTjgobjgohdIDsKKworJHJfc3RhcnQgPSBb44Op44Oq44Or44Os44Ot44KJ44KK44KL44KM44KNXSA7CisKKyR3X3N0YXJ0ID0gW+ODr+ODsOODseODsuOCj+OCkOOCkeOCkl0gOworCiskdl9zdGFydCA9IFvjg6/jg7Djg7Hjg7Jd44KZIDsKKworIyBpZiDjg7MgaXMgZm9sbG93ZWQgYnkgJG5fcXVvdGVyLCB0aGVuIGl0IG5lZWRzIGFuCisjIGFwb3N0cm9waGUgYWZ0ZXIgaXRzIHJvbWFqaSBmb3JtIHRvIGRpc2FtYmlndWF0ZSBpdC4KKyMgZS5nLiwg44OzIOOCoiAhID0gIOODiiwgc28gcmVwcmVzZW50IGFzICJuJ2EiLCBub3QgIm5hIi4KKworJG5fcXVvdGVyICA9ICBb44KiIOOCpCDjgqYg44KoIOOCqiDjg4og44OLIOODjCDjg40g44OOIOODpCDjg6Yg44OoIOODs10gOworCiskc21hbGxfeSA9IFvjg6PjgqPjg6Xjgqfjg6ddIDsKKworJGl0ZXJhdGlvbiA9IFx1MzA5RCA7CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMga2F0YWthbmEgcnVsZXMKKworIyBQdW5jdHVhdGlvbgorCisnLicgPD4g44CCOworJywnIDw+IOOAgTsKKyMgJyAnIH0gW2Etel0gPiA7ICMgZGVsZXRlIHNwYWNlcyBiZWZvcmUgbGF0aW4KKyMgJyAnIDwgW14nICdcdTMwQTAtXHUzMGZmXSB7fSBbJ1x1MzBBMC1cdTMwZmZdIDsgI2luc2VydCBzcGFjZXMgYmVmb3JlIGhpcmFnYW5hCisKKyMgSXRlcmF0aW9uIE1hcmsKKyMgQ29weSBwcmV2aW91cyBsZXR0ZXIgJiBtYXJrcworCisjIFRPRE8KKyMgfCAkMSAkMSA8ICgka2FuYSBbWzpNOl0kdm9pY2Ukc2VtaXZvaWNlXT8pICRpdGVyYXRpb24KKworIyBTcGVjaWFscyBmb3Iga2F0YWthbmEgLS0gbm90IHNoYXJlZCB3aXRoIGhpcmFnYW5hCisKK3ZhIDw+IOODr+OCmSA7Cit2aSA8PiDjg7DjgpkgOwordmUgPD4g44Ox44KZIDsKK3ZvIDw+IOODsuOCmSA7CisnfmthJyA8PiDjg7UgOworJ35rZScgPD4g44O2IDsKKworIyB+fn4gYmVnaW4gc2hhcmVkIHJ1bGVzIH5+fgorCisjc3BlY2lhbAorCit5YSA8ICd+J+ODozsKK3lpIDwgJ34n44KjIDsKK3l1IDwgJ34n44OlOworeWUgPCAnfifjgqc7Cit5byA8ICd+J+ODpzsKKworI25vcm1hbAorCithIDw+IOOCoiA7CisKK2IgfCAnficgPCDjg5Ig44KZfSAkc21hbGxfeSA7CitieSB9ICR2b3dlbCA+IOODkuOCmSB8ICd+eScgOworCitiYSA8PiDjg4/jgpkgOworYmkgPD4g44OS44KZIDsKK2J1IDw+IOODleOCmSA7CitiZSA8PiDjg5jjgpkgOworYm8gPD4g44Ob44KZIDsKKworYyB9IGkgPiB8IHMgOworYyB9IGUgPiB8IHMgOworCitkYSA8PiDjgr/jgpkgOworZGkgPD4g44OG44KZ44KjIDsKK2R1IDw+IOODhuOCmeOCpSA7CitkZSA8PiDjg4bjgpkgOworZG8gPD4g44OI44KZIDsKK2R6dSA8PiDjg4TjgpkgOworZGphIDwg44OB44KZ44OjIDsKK2RqaSd+aScgPCDjg4HjgpnjgqMgOyAjIGxpdQorZGp1IDwg44OB44KZ44OlIDsKK2RqZSA8IOODgeOCmeOCpyA7Citkam8gPCDjg4Hjgpnjg6cgOworZGppIDw+IOODgeOCmSA7CitkaiAgfSAkdm93ZWwgPiDjg4HjgpkgfCAnfnknIDsKKworIyBUT0RPOiBRVUVTVElPTjogdXNlIMS1xLTFvMW7IGluc3RlYWQgb2YgZGosIGR6CisKK2NoYSA8IOODgeODoyA7CitjaGknfmknIDwg44OB44KjIDsgIyBsaXUKK2NodSA8IOODgeODpSA7CitjaGUgPCDjg4HjgqcgOworY2hvIDwg44OB44OnIDsKK2NoaSA8PiDjg4EgOworY2ggfSAkdm93ZWwgPiDjg4EgfCAnfnknIDsKKworZSA8PiDjgqggOworCitnIHwgJ34nIDwg44Kt44KZfSAkc21hbGxfeSA7CitneSAgfSAkdm93ZWwgPiDjgq3jgpkgfCAnfnknIDsKKworZ2EgPD4g44Kr44KZIDsKK2dpIDw+IOOCreOCmSA7CitndSA8PiDjgq/jgpkgOworZ2UgPD4g44Kx44KZIDsKK2dvIDw+IOOCs+OCmSA7CisKK2kgPD4g44KkIDsKKworIyBqICB9ICR2b3dlbCA+IOOCt+OCmSB8ICd+eScgOworCitqYSA8PiDjgrfjgpnjg6MgOworamknfmknIDwg44K344KZ44KjIDsgIyBsaXUKK2p1IDw+IOOCt+OCmeODpSA7CitqZSA8PiDjgrfjgpnjgqcgOworam8gPD4g44K344KZ44OnIDsKK2ppIDw+IOOCt+OCmSA7CisKK2sgfCAnficgPCDjgq19ICRzbWFsbF95IDsKK2t5ICB9ICR2b3dlbCA+IOOCrSB8ICd+eScgOworCitrYSA8PiDjgqsgOwora2kgPD4g44KtIDsKK2t1IDw+IOOCryA7CitrZSA8PiDjgrEgOwora28gPD4g44KzIDsKKworbSB8ICd+JyA8IOODn30gJHNtYWxsX3kgOworbXkgIH0gJHZvd2VsID4g44OfIHwgJ355JyA7CisKK21hIDw+IOODniA7CittaSA8PiDjg58gOworbXUgPD4g44OgIDsKK21lIDw+IOODoSA7CittbyA8PiDjg6IgOworCittIH0gW3BiZnZdID4g44OzIDsKKworbiB8ICd+JyA8IOODiyB9ICRzbWFsbF95IDsKK255ICB9ICR2b3dlbCA+IOODiyB8ICd+eScgOworCituYSA8PiDjg4ogOworbmkgPD4g44OLIDsKK251IDw+IOODjCA7CituZSA8PiDjg40gOworbm8gPD4g44OOIDsKKworbyA8PiDjgqogOworCitwIHwgJ34nIDwg44OS44KaIH0gJHNtYWxsX3kgOworcHkgIH0gJHZvd2VsID4g44OS44KaIHwgJ355JyA7CisKK3BhIDw+IOODj+OCmiA7CitwaSA8PiDjg5LjgpogOworcHUgPD4g44OV44KaIDsKK3BlIDw+IOODmOOCmiA7CitwbyA8PiDjg5vjgpogOworCitoIHwgJ34nIDwg44OSIH0gJHNtYWxsX3kgOworaHkgIH0gJHZvd2VsID4g44OSIHwgJ355JyA7CisKK2hhIDw+IOODjyA7CitoaSA8PiDjg5IgOworaHUgPD4g44OY44KlIDsKK2hlIDw+IOODmCA7CitobyA8PiDjg5sgOworCisjIGYgfCAnficgPCDjg5UgfSAkc21hbGxfeSA7CisjIGYgfSAkdm93ZWwgPiDjg5UgfCAnficgOworCitmYSA8PiDjg5XjgqEgOworZmkgPD4g44OV44KjIDsKK2ZlIDw+IOODleOCpyA7CitmbyA8PiDjg5XjgqkgOworZnUgPD4g44OVIDsKKworciB8ICd+JyA8IOODqiB9ICRzbWFsbF95IDsKK3J5ICB9ICR2b3dlbCA+IOODqiB8ICd+eScgOworCityYSA8PiDjg6kgOworcmkgPD4g44OqIDsKK3J1IDw+IOODqyA7CityZSA8PiDjg6wgOworcm8gPD4g44OtIDsKKworemEgPD4g44K144KZIDsKK3ppIDw+IOOCu+OCmeOCoyA7Cit6dSA8PiDjgrnjgpkgOworemUgPD4g44K744KZIDsKK3pvIDw+IOOCveOCmSA7CisKK3NhIDw+IOOCtSA7CitzaSA8PiDjgrvjgqMgOworc3UgPD4g44K5IDsKK3NlIDw+IOOCuyA7CitzbyA8PiDjgr0gOworCitzaGEgPCDjgrfjg6MgOworc2hpJ35pJyA8IOOCt+OCoyA7ICMgbGl1CitzaHUgPCDjgrfjg6UgOworc2hlIDwg44K344KnIDsKK3NobyA8IOOCt+ODpyA7CitzaGkgPD4g44K3IDsKK3NoIH0gJHZvd2VsID4g44K3IHwgJ355JyA7CisKK3RhIDw+IOOCvyA7Cit0aSA8PiDjg4bjgqMgOwordHUgPD4g44OG44KlIDsKK3RlIDw+IOODhiA7Cit0byA8PiDjg4ggOworCit0c3UgPD4g44OEIDsKKworIyB2ICB9ICR2b3dlbCA+IOOCpuOCmSB8ICd+JyA7CisKKyMndn5hJyA8IOOCpuOCmeOCoSA7ICMgbGl1CisjJ3Z+aScgPCDjgqbjgpnjgqMgOyAjIGxpdQorIyd2fmUnIDwg44Km44KZ44KnIDsgIyBsaXUKKyMndn5vJyA8IOOCpuOCmeOCqSA7ICMgbGl1Cit2dSA8PiDjgqbjgpkgOworCit1IDw+IOOCpiA7CisKKyMgdyAgfSAkdm93ZWwgPiDjgqYgfCAnficgOworCit3YSA8PiDjg68gOword2kgPD4g44OwIDsKK3d1ID4g44KmIDsKK3dlIDw+IOODsSA7Cit3byA8PiDjg7IgOworCit5YSA8PiDjg6QgOworeWkgPiDjgqQgOworeXUgPD4g44OmIDsKK3llID4g44KoIDsKK3lvIDw+IOODqCA7CisKKyMgZG91YmxlIGNvbnNvbmFudHMKKworI3NwZWNpYWxzCitzIH0gc2ggPiDjg4MgOwordCB9IGNoID4g44ODIDsKKworI3ZvaWNlZAorCitqIH0gaiA8PiDjg4MgfSAkal9zdGFydCA7CitiIH0gYiA8PiDjg4MgfSBbJGhfc3RhcnQkZl9zdGFydF0gJHZvaWNlOworZCB9IGQgPD4g44ODIH0gJHRfc3RhcnQgJHZvaWNlOworZyB9IGcgPD4g44ODIH0gJGtfc3RhcnQgJHZvaWNlOworcCB9IHAgPD4g44ODIH0gWyRoX3N0YXJ0JGZfc3RhcnRdICRzZW1pdm9pY2U7CisjIHYgfSB2IDw+IOODgyB9IFvjg6/jg7Djgqbjg7Hjg7LjgYZdICAkdm9pY2UgOworeiB9IHogPD4g44ODIH0gJHNfc3RhcnQgJHZvaWNlOwordiB9IHYgPD4g44ODIH0gJHZfc3RhcnQ7CisKKyMgbm9ybWFsCisKK2sgfSBrIDw+IOODgyB9ICRrX3N0YXJ0IDsKK20gfSBtIDw+IOODgyB9ICRtX3N0YXJ0IDsKK24gfSBuIDw+IOODgyB9ICRuX3N0YXJ0IDsKK2ggfSBoIDw+IOODgyB9ICRoX3N0YXJ0IDsKK2YgfSBmIDw+IOODgyB9ICRmX3N0YXJ0IDsKK3IgfSByIDw+IOODgyB9ICRyX3N0YXJ0IDsKK3QgfSB0IDw+IOODgyB9ICR0X3N0YXJ0IDsKK3MgfSBzIDw+IOODgyB9ICRzX3N0YXJ0IDsKKwordyB9IHcgIDw+IOODgyB9ICR3X3N0YXJ0OworeSB9IHkgPD4g44ODIH0gJHlfc3RhcnQ7CisKKyMgY29tcGxldGVuZXNzIAoreCB9IHggPiDjg4MgOworYyB9IGsgPiDjg4MgOworYyB9IGMgPiDjg4MgOworYyB9IHEgPiDjg4MgOworbCB9IGwgPiDjg4MgOworcSB9IHEgPiDjg4MgOworIyB5IH0geSA+IOODgyA7CisjIHcgfSB3ID4g44ODIDsKKworIyBwcm9sb25nZWQgdm93ZWwgbWFyay4gdGhpcyBpbmRpY2F0ZXMgYSBkb3VibGluZyBvZgorIyB0aGUgcHJlY2VkaW5nIHZvd2VsIHNvdW5kCisKKyNhIDwgYSB7IOODvCA7ICMgbGl1CisjZSA8IGUgeyDjg7wgOyAjIGxpdQorI2kgPCBpIHsg44O8IDsgIyBsaXUKKyNvIDwgbyB7IOODvCA7ICMgbGl1CisjdSA8IHUgeyDjg7wgOyAjIGxpdQorCiskbWFjcm9uIDw+IOODvCA7CisKKyMgc21hbGwgZm9ybXMKKworJ35hJyA8PiDjgqEgOworJ35pJyA8PiDjgqMgOworJ351JyA8PiDjgqUgOworJ35lJyA8PiDjgqcgOworJ35vJyA8PiDjgqkgOworJ350c3UnIDw+IOODgyA7CisnfndhJyA8PiDjg64gOworJ355YScgPD4g44OjIDsKKyd+eWknID4g44KjIDsKKyd+eXUnIDw+IOODpSA7CisnfnllJyA+IOOCpyA7CisnfnlvJyA8PiDjg6cgOworCisjIGl0ZXJhdGlvbiBtYXJrcworIyBUT0RPOiBtYWtlIG1vcmUgYWNjdXJhdGUKKworaiAkMSA8IHNoICh5KiAkdm93ZWwpIHvjg70kdm9pY2UgOworZGogJDEgPCBjaCAoeSogJHZvd2VsKSB744O9JHZvaWNlIDsKK2R6ICQxIDwgdHMgKHkqICR2b3dlbCkge+ODvSR2b2ljZSA7CisKK2cgJDEgPCBrICh5KiAkdm93ZWwpIHvjg70kdm9pY2UgOworeiAkMSA8IHMgKHkqICR2b3dlbCkge+ODvSR2b2ljZSA7CitkICQxIDwgdCAoeSogJHZvd2VsKSB744O9JHZvaWNlIDsKK2ggJDEgPCBiICh5KiAkdm93ZWwpIHvjg70kdm9pY2UgOwordiAkMSA8IHcgKHkqICR2b3dlbCkge+ODvSR2b2ljZSA7CisKK3NoICQxIDwgc2ggKHkqICR2b3dlbCkge+ODvSR2b2ljZSA7CitqICQxIDwgaiAoeSogJHZvd2VsKSB744O9JHZvaWNlIDsKK2NoICQxIDwgY2ggKHkqICR2b3dlbCkge+ODvSR2b2ljZSA7CitkaiAkMSA8IGRqKHkqICR2b3dlbCkge+ODvSR2b2ljZSA7Cit0cyAkMSA8IHRzICh5KiAkdm93ZWwpIHvjg70kdm9pY2UgOworZHogJDEgPCBkeiAoeSogJHZvd2VsKSB744O9JHZvaWNlIDsKKworJDEgPCAoJGNvbnNvbmFudCB5KiAkdm93ZWwpIHvjg70kdm9pY2U/IDsKKyQxIDwgKC4pIHvjg70gJHZvaWNlPyA7ICMgb3RoZXJ3aXNlIHJlcGVhdCBsYXN0IGNoYXJhY3RlcgorIDwg44O9ICR2b2ljZT8gOyAjIGRlbGV0ZSBpZiBubyBjaGFyYWN0ZXJzIGZvdW5kCisKKyMgaC0gcnVsZTogbGVuZ3RoZW5zIHZvd2VsIGlmIG5vdCBmb2xsb3dlZCBieSBhIHZvd2VsCisKK1thZWlvdV0gfSBoID4g44O8IDsKKworIyBvbmUtd2F5IGxhdGluLSA+IGthbmEgcnVsZXMuIHRoZXNlIGRvIG5vdCBvY2N1ciBpbgorIyB3ZWxsLWZvcm1lZCByb21hamkgcmVwcmVzZW50aW5nIGFjdHVhbCBqYXBhbmVzZSB0ZXh0LgorIyB0aGVpciBwdXJwb3NlIGlzIHRvIG1ha2UgYWxsIHJvbWFqaSBtYXAgdG8ga2FuYSBvZgorIyBzb21lIHNvcnQuCisKKyMgdGhlIGZvbGxvd2luZyBhcmUgbm90IHJlYWxseSBuZWNlc3NhcnksIGJ1dCBwcm9kdWNlCisjIHNsaWdodGx5IG1vcmUgbmF0dXJhbCByZXN1bHRzLgorCitjeSA+IOOCu+OCoyA7CitkeSA+IOODhuOCmeOCoyA7CitoeSA+IOODkiA7CitzeSA+IOOCu+OCoyA7Cit0eSA+IOODhuOCoyA7Cit6eSA+IOOCu+OCmeOCoyA7CisKK2ggPiDjg5ggOworCisjIGlzb2xhdGVkIGNvbnNvbmFudHMgbGlzdGVkIGhlcmUgc28gYXMgbm90IHRvIG1hc2sKKyMgbG9uZ2VyIHJ1bGVzIGFib3ZlLgorCitjaCA+IOODgTsKK3NoID4g44K3IDsKK2R6ID4g44OE44KZIDsKK2RqID4g44OB44KZOworCitiID4g44OV44KZIDsKK2QgPiDjg4bjgpkgOworZyA+IOOCr+OCmSA7CitrID4g44KvIDsKK20gPiDjg6AgOworbicnIDwg44OzIH0gJG5fcXVvdGVyIDsKK24gPD4g44OzIDsKK3AgPiDjg5XjgpogOworciA+IOODqyA7CitzID4g44K5IDsKK3QgPiDjg4YgOworeSA+IOOCpCA7Cit6ID4g44K544KZIDsKK3YgPiDjgqbjgpkgOworCitmID4g44OVOworaiAgPiDjgrfjgpk7Cit3ID4g44KmOworCivDnyA+IHwgc3MgOworw6YgPiB8IGUgOworw7AgPiB8IGQgOworw7ggPiB8IHUgOworw74gPiB8IHRoIDsKKworIyBzaW1wbGUgc3Vic3RpdHV0aW9ucyB1c2luZyBiYWNrdXAKKworYyA+IHwgayA7CitsID4gfCByIDsKK3EgPiB8IGsgOworeCA+IHwga3MgOworCisjIH5+fiBFTkQgc2hhcmVkIHJ1bGVzIH5+fgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmFsIGNsZWFudXAKKworJ34nID4gOyAjIGRlbGV0ZSBzdHJheSB0aWxkZXMgYmV0d2VlbiBsZXR0ZXJzCitbOkthdGFrYW5hOl0geyAnJyB9IFs6TGF0aW46XSA+IDsgIyBkZWxldGUgc3RyYXkgcXVvdGVzIGJldHdlZW4gbGV0dGVycworIyBbXHUwMkJFWzpOb25zcGFjaW5nIE1hcms6XS1bXHUzMDk5LVx1MzA5Q11dID4gOyAjIGRlbGV0ZSBhbnkgbm9uLXNwYWNpbmcgbWFya3MgdGhhdCB3ZSBkaWRuJ3QgdXNlCisKKzo6IE5GQyAoTkZEKSA7IAorOjogKFs6S2F0YWthbmE6XSBoYWxmd2lkdGgtZnVsbHdpZHRoKTsKKworIyBub3RlOiBhIGdsb2JhbCBmaWx0ZXIgaXMgbW9yZSBlZmZpY2llbnQsIGJ1dCBNVVNUIGluY2x1ZGUgYWxsIHNvdXJjZSBjaGFycyEhCisjOjogKFtcdTAwMDAtXHUwMDdFIFx1MzAwMVx1MzAwMiBcdTMwOTktXHUzMDlDIFx1MzBBMS1cdTMwRkMgXHVGRjYxLVx1RkY5RiBbOkxhdGluOl1bOkthdGFrYW5hOl0gWzpub25zcGFjaW5nIG1hcms6XV0pOworIyBNSU5JTUFMIEZJTFRFUiBHRU5FUkFURUQgRk9SOiBMYXRpbi1LYXRha2FuYSBCQUNLV0FSRAorOjogKCBbW1wgLX5cdTAwQTItXHUwMEEzXHUwMEE1LVx1MDBBNlx1MDBBQ1x1MDMwNFx1MjBBOVx1RkY2MS1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXHVGRkU4LVx1RkZFRV1bflx1MzAwMS1cdTMwMDJcdTMwNENcdTMwNEVcdTMwNTBcdTMwNTJcdTMwNTRcdTMwNTZcdTMwNThcdTMwNUFcdTMwNUNcdTMwNUVcdTMwNjBcdTMwNjJcdTMwNjVcdTMwNjdcdTMwNjlcdTMwNzAtXHUzMDcxXHUzMDczLVx1MzA3NFx1MzA3Ni1cdTMwNzdcdTMwNzktXHUzMDdBXHUzMDdDLVx1MzA3RFx1MzA5NFx1MzA5OS1cdTMwOUJcdTMwOUVcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRV1dICkgOworCisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9NYWxheWFsYW1fSW50ZXJJbmRpYy50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX01hbGF5YWxhbV9JbnRlckluZGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzllZmUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9NYWxheWFsYW1fSW50ZXJJbmRpYy50eHQKQEAgLTAsMCArMSw4OSBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9NYWxheWFsYW1fSW50ZXJJbmRpYy50eHQsdiAkCisjICREYXRlOiAyMDAyLzAzLzAyIDAwOjI3OjI2ICQKKyMgJFJldmlzaW9uOiAxLjUgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgTWFsYXlhbGFtLUludGVySW5kaWMKKyM6OiBORkQgKE5GQykgOworCitcdTBEMDI+XHVFMDAyOyAgICAgICMgU0lHTiBBTlVTVkFSQQorXHUwRDAzPlx1RTAwMzsgICAgICAjIFNJR04gVklTQVJHQQorXHUwRDA1Plx1RTAwNTsgICAgICAjIExFVFRFUiBBCitcdTBEMDY+XHVFMDA2OyAgICAgICMgTEVUVEVSIEFBCitcdTBEMDc+XHVFMDA3OyAgICAgICMgTEVUVEVSIEkKK1x1MEQwOD5cdUUwMDg7ICAgICAgIyBMRVRURVIgSUkKK1x1MEQwOT5cdUUwMDk7ICAgICAgIyBMRVRURVIgVQorXHUwRDBBPlx1RTAwQTsgICAgICAjIExFVFRFUiBVVQorXHUwRDBCPlx1RTAwQjsgICAgICAjIExFVFRFUiBWT0NBTElDIFIKK1x1MEQwQz5cdUUwMEM7ICAgICAgIyBMRVRURVIgVk9DQUxJQyBMCitcdTBEMEU+XHVFMDBFOyAgICAgICMgTEVUVEVSIEUKK1x1MEQwRj5cdUUwMEY7ICAgICAgIyBMRVRURVIgRUUKK1x1MEQxMD5cdUUwMTA7ICAgICAgIyBMRVRURVIgQUkKK1x1MEQxMj5cdUUwMTI7ICAgICAgIyBMRVRURVIgTworXHUwRDEzPlx1RTAxMzsgICAgICAjIExFVFRFUiBPTworXHUwRDE0Plx1RTAxNDsgICAgICAjIExFVFRFUiBBVQorXHUwRDE1Plx1RTAxNTsgICAgICAjIExFVFRFUiBLQQorXHUwRDE2Plx1RTAxNjsgICAgICAjIExFVFRFUiBLSEEKK1x1MEQxNz5cdUUwMTc7ICAgICAgIyBMRVRURVIgR0EKK1x1MEQxOD5cdUUwMTg7ICAgICAgIyBMRVRURVIgR0hBCitcdTBEMTk+XHVFMDE5OyAgICAgICMgTEVUVEVSIE5HQQorXHUwRDFBPlx1RTAxQTsgICAgICAjIExFVFRFUiBDQQorXHUwRDFCPlx1RTAxQjsgICAgICAjIExFVFRFUiBDSEEKK1x1MEQxQz5cdUUwMUM7ICAgICAgIyBMRVRURVIgSkEKK1x1MEQxRD5cdUUwMUQ7ICAgICAgIyBMRVRURVIgSkhBCitcdTBEMUU+XHVFMDFFOyAgICAgICMgTEVUVEVSIE5ZQQorXHUwRDFGPlx1RTAxRjsgICAgICAjIExFVFRFUiBUVEEKK1x1MEQyMD5cdUUwMjA7ICAgICAgIyBMRVRURVIgVFRIQQorXHUwRDIxPlx1RTAyMTsgICAgICAjIExFVFRFUiBEREEKK1x1MEQyMj5cdUUwMjI7ICAgICAgIyBMRVRURVIgRERIQQorXHUwRDIzPlx1RTAyMzsgICAgICAjIExFVFRFUiBOTkEKK1x1MEQyND5cdUUwMjQ7ICAgICAgIyBMRVRURVIgVEEKK1x1MEQyNT5cdUUwMjU7ICAgICAgIyBMRVRURVIgVEhBCitcdTBEMjY+XHVFMDI2OyAgICAgICMgTEVUVEVSIERBCitcdTBEMjc+XHVFMDI3OyAgICAgICMgTEVUVEVSIERIQQorXHUwRDI4Plx1RTAyODsgICAgICAjIExFVFRFUiBOQQorXHUwRDJBPlx1RTAyQTsgICAgICAjIExFVFRFUiBQQQorXHUwRDJCPlx1RTAyQjsgICAgICAjIExFVFRFUiBQSEEKK1x1MEQyQz5cdUUwMkM7ICAgICAgIyBMRVRURVIgQkEKK1x1MEQyRD5cdUUwMkQ7ICAgICAgIyBMRVRURVIgQkhBCitcdTBEMkU+XHVFMDJFOyAgICAgICMgTEVUVEVSIE1BCitcdTBEMkY+XHVFMDJGOyAgICAgICMgTEVUVEVSIFlBCitcdTBEMzA+XHVFMDMwOyAgICAgICMgTEVUVEVSIFJBCitcdTBEMzE+XHVFMDMxOyAgICAgICMgTEVUVEVSIFJSQQorXHUwRDMyPlx1RTAzMjsgICAgICAjIExFVFRFUiBMQQorXHUwRDMzPlx1RTAzMzsgICAgICAjIExFVFRFUiBMTEEKK1x1MEQzND5cdUUwMzQ7ICAgICAgIyBMRVRURVIgTExMQQorXHUwRDM1Plx1RTAzNTsgICAgICAjIExFVFRFUiBWQQorXHUwRDM2Plx1RTAzNjsgICAgICAjIExFVFRFUiBTSEEKK1x1MEQzNz5cdUUwMzc7ICAgICAgIyBMRVRURVIgU1NBCitcdTBEMzg+XHVFMDM4OyAgICAgICMgTEVUVEVSIFNBCitcdTBEMzk+XHVFMDM5OyAgICAgICMgTEVUVEVSIEhBCitcdTBEM0U+XHVFMDNFOyAgICAgICMgVk9XRUwgU0lHTiBBQQorXHUwRDNGPlx1RTAzRjsgICAgICAjIFZPV0VMIFNJR04gSQorXHUwRDQwPlx1RTA0MDsgICAgICAjIFZPV0VMIFNJR04gSUkKK1x1MEQ0MT5cdUUwNDE7ICAgICAgIyBWT1dFTCBTSUdOIFUKK1x1MEQ0Mj5cdUUwNDI7ICAgICAgIyBWT1dFTCBTSUdOIFVVCitcdTBENDM+XHVFMDQzOyAgICAgICMgVk9XRUwgU0lHTiBWT0NBTElDIFIKK1x1MEQ0Nj5cdUUwNDY7ICAgICAgIyBWT1dFTCBTSUdOIEUKK1x1MEQ0Nz5cdUUwNDc7ICAgICAgIyBWT1dFTCBTSUdOIEVFCitcdTBENDg+XHVFMDQ4OyAgICAgICMgVk9XRUwgU0lHTiBBSQorXHUwRDREPlx1RTA0RDsgICAgICAjIFNJR04gVklSQU1BCitcdTBENTc+XHVFMDU3OyAgICAgICMgQVUgTEVOR1RIIE1BUksKK1x1MEQ2MD5cdUUwNjA7ICAgICAgIyBMRVRURVIgVk9DQUxJQyBSUgorXHUwRDYxPlx1RTA2MTsgICAgICAjIExFVFRFUiBWT0NBTElDIExMCitcdTBENjY+XHVFMDY2OyAgICAgICMgRElHSVQgWkVSTworXHUwRDY3Plx1RTA2NzsgICAgICAjIERJR0lUIE9ORQorXHUwRDY4Plx1RTA2ODsgICAgICAjIERJR0lUIFRXTworXHUwRDY5Plx1RTA2OTsgICAgICAjIERJR0lUIFRIUkVFCitcdTBENkE+XHVFMDZBOyAgICAgICMgRElHSVQgRk9VUgorXHUwRDZCPlx1RTA2QjsgICAgICAjIERJR0lUIEZJVkUKK1x1MEQ2Qz5cdUUwNkM7ICAgICAgIyBESUdJVCBTSVgKK1x1MEQ2RD5cdUUwNkQ7ICAgICAgIyBESUdJVCBTRVZFTgorXHUwRDZFPlx1RTA2RTsgICAgICAjIERJR0lUIEVJR0hUCitcdTBENkY+XHVFMDZGOyAgICAgICMgRElHSVQgTklORQorIyAgICA6OiBORkMgKE5GRCkgOworIyBlb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfT3JpeWFfSW50ZXJJbmRpYy50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX09yaXlhX0ludGVySW5kaWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyNmQwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX09yaXlhX0ludGVySW5kaWMudHh0CkBAIC0wLDAgKzEsOTcgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfT3JpeWFfSW50ZXJJbmRpYy50eHQsdiAkCisjICREYXRlOiAyMDAyLzA5LzE5IDE4OjExOjIzICQKKyMgJFJldmlzaW9uOiAxLjYgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgT3JpeWEtSW50ZXJJbmRpYworIzo6IE5GRCAoTkZDKSA7CisjXHUwQjIxXHUwQjNDPlx1RTA1QzsjIExFVFRFUiBSUkEKKyNcdTBCMjJcdTBCM0M+XHVFMDVEOyMgTEVUVEVSIFJIQQorXHUwQjQ3XHUwQjU2Plx1RTA0ODsjIFZPV0VMIFNJR04gQUkKK1x1MEI0N1x1MEIzRT5cdUUwNEI7IyBWT1dFTCBTSUdOIE8KK1x1MEI0N1x1MEI1Nz5cdUUwNEM7IyBWT1dFTCBTSUdOIEFVCisKK1x1MEIwMT5cdUUwMDE7ICAgICAgIyBTSUdOIENBTkRSQUJJTkRVCitcdTBCMDI+XHVFMDAyOyAgICAgICMgU0lHTiBBTlVTVkFSQQorXHUwQjAzPlx1RTAwMzsgICAgICAjIFNJR04gVklTQVJHQQorXHUwQjA1Plx1RTAwNTsgICAgICAjIExFVFRFUiBBCitcdTBCMDY+XHVFMDA2OyAgICAgICMgTEVUVEVSIEFBCitcdTBCMDc+XHVFMDA3OyAgICAgICMgTEVUVEVSIEkKK1x1MEIwOD5cdUUwMDg7ICAgICAgIyBMRVRURVIgSUkKK1x1MEIwOT5cdUUwMDk7ICAgICAgIyBMRVRURVIgVQorXHUwQjBBPlx1RTAwQTsgICAgICAjIExFVFRFUiBVVQorXHUwQjBCPlx1RTAwQjsgICAgICAjIExFVFRFUiBWT0NBTElDIFIKK1x1MEIwQz5cdUUwMEM7ICAgICAgIyBMRVRURVIgVk9DQUxJQyBMCitcdTBCMEY+XHVFMDBGOyAgICAgICMgTEVUVEVSIEUKK1x1MEIxMD5cdUUwMTA7ICAgICAgIyBMRVRURVIgQUkKK1x1MEIxMz5cdUUwMTM7ICAgICAgIyBMRVRURVIgTworXHUwQjE0Plx1RTAxNDsgICAgICAjIExFVFRFUiBBVQorXHUwQjE1Plx1RTAxNTsgICAgICAjIExFVFRFUiBLQQorXHUwQjE2Plx1RTAxNjsgICAgICAjIExFVFRFUiBLSEEKK1x1MEIxNz5cdUUwMTc7ICAgICAgIyBMRVRURVIgR0EKK1x1MEIxOD5cdUUwMTg7ICAgICAgIyBMRVRURVIgR0hBCitcdTBCMTk+XHVFMDE5OyAgICAgICMgTEVUVEVSIE5HQQorXHUwQjFBPlx1RTAxQTsgICAgICAjIExFVFRFUiBDQQorXHUwQjFCPlx1RTAxQjsgICAgICAjIExFVFRFUiBDSEEKK1x1MEIxQz5cdUUwMUM7ICAgICAgIyBMRVRURVIgSkEKK1x1MEIxRD5cdUUwMUQ7ICAgICAgIyBMRVRURVIgSkhBCitcdTBCMUU+XHVFMDFFOyAgICAgICMgTEVUVEVSIE5ZQQorXHUwQjFGPlx1RTAxRjsgICAgICAjIExFVFRFUiBUVEEKK1x1MEIyMD5cdUUwMjA7ICAgICAgIyBMRVRURVIgVFRIQQorXHUwQjIxPlx1RTAyMTsgICAgICAjIExFVFRFUiBEREEKK1x1MEIyMj5cdUUwMjI7ICAgICAgIyBMRVRURVIgRERIQQorXHUwQjIzPlx1RTAyMzsgICAgICAjIExFVFRFUiBOTkEKK1x1MEIyND5cdUUwMjQ7ICAgICAgIyBMRVRURVIgVEEKK1x1MEIyNT5cdUUwMjU7ICAgICAgIyBMRVRURVIgVEhBCitcdTBCMjY+XHVFMDI2OyAgICAgICMgTEVUVEVSIERBCitcdTBCMjc+XHVFMDI3OyAgICAgICMgTEVUVEVSIERIQQorXHUwQjI4Plx1RTAyODsgICAgICAjIExFVFRFUiBOQQorXHUwQjJBPlx1RTAyQTsgICAgICAjIExFVFRFUiBQQQorXHUwQjJCPlx1RTAyQjsgICAgICAjIExFVFRFUiBQSEEKK1x1MEIyQz5cdUUwMkM7ICAgICAgIyBMRVRURVIgQkEKK1x1MEIyRD5cdUUwMkQ7ICAgICAgIyBMRVRURVIgQkhBCitcdTBCMkU+XHVFMDJFOyAgICAgICMgTEVUVEVSIE1BCitcdTBCMkY+XHVFMDJGOyAgICAgICMgTEVUVEVSIFlBCitcdTBCMzA+XHVFMDMwOyAgICAgICMgTEVUVEVSIFJBCitcdTBCMzI+XHVFMDMyOyAgICAgICMgTEVUVEVSIExBCitcdTBCMzM+XHVFMDMzOyAgICAgICMgTEVUVEVSIExMQQorXHUwQjM2Plx1RTAzNjsgICAgICAjIExFVFRFUiBTSEEKK1x1MEIzNz5cdUUwMzc7ICAgICAgIyBMRVRURVIgU1NBCitcdTBCMzg+XHVFMDM4OyAgICAgICMgTEVUVEVSIFNBCitcdTBCMzk+XHVFMDM5OyAgICAgICMgTEVUVEVSIEhBCitcdTBCM0M+XHVFMDNDOyAgICAgICMgU0lHTiBOVUtUQQorXHUwQjNEPlx1RTAzRDsgICAgICAjIFNJR04gQVZBR1JBSEEKK1x1MEIzRT5cdUUwM0U7ICAgICAgIyBWT1dFTCBTSUdOIEFBCitcdTBCM0Y+XHVFMDNGOyAgICAgICMgVk9XRUwgU0lHTiBJCitcdTBCNDA+XHVFMDQwOyAgICAgICMgVk9XRUwgU0lHTiBJSQorXHUwQjQxPlx1RTA0MTsgICAgICAjIFZPV0VMIFNJR04gVQorXHUwQjQyPlx1RTA0MjsgICAgICAjIFZPV0VMIFNJR04gVVUKK1x1MEI0Mz5cdUUwNDM7ICAgICAgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorXHUwQjQ3Plx1RTA0NzsgICAgICAjIFZPV0VMIFNJR04gRQorIworXHUwQjREPlx1RTA0RDsgICAgICAjIFNJR04gVklSQU1BCitcdTBCNTY+XHVFMDU2OyAgICAgICMgQUkgTEVOR1RIIE1BUksKK1x1MEI1Nz5cdUUwNTc7ICAgICAgIyBBVSBMRU5HVEggTUFSSworXHUwOTY0Plx1ZTA2NDsgICAgICAjIERBTkRBCitcdTA5NjU+XHVlMDY1OyAgICAgICMgRE9VQkxFIERBTkRBCisjCitcdTBCNUY+XHVFMDVGOyAgICAgICMgTEVUVEVSIFlZQQorXHUwQjYwPlx1RTA2MDsgICAgICAjIExFVFRFUiBWT0NBTElDIFJSCitcdTBCNjE+XHVFMDYxOyAgICAgICMgTEVUVEVSIFZPQ0FMSUMgTEwKK1x1MEI2Nj5cdUUwNjY7ICAgICAgIyBESUdJVCBaRVJPCitcdTBCNjc+XHVFMDY3OyAgICAgICMgRElHSVQgT05FCitcdTBCNjg+XHVFMDY4OyAgICAgICMgRElHSVQgVFdPCitcdTBCNjk+XHVFMDY5OyAgICAgICMgRElHSVQgVEhSRUUKK1x1MEI2QT5cdUUwNkE7ICAgICAgIyBESUdJVCBGT1VSCitcdTBCNkI+XHVFMDZCOyAgICAgICMgRElHSVQgRklWRQorXHUwQjZDPlx1RTA2QzsgICAgICAjIERJR0lUIFNJWAorXHUwQjZEPlx1RTA2RDsgICAgICAjIERJR0lUIFNFVkVOCitcdTBCNkU+XHVFMDZFOyAgICAgICMgRElHSVQgRUlHSFQKK1x1MEI2Rj5cdUUwNkY7ICAgICAgIyBESUdJVCBOSU5FCitcdTBCNzA+XHVlMDdCOyAgICAgICMgSVNTSEFSCisjICAgIDo6IE5GQyAoTkZEKSA7CisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UYW1pbF9JbnRlckluZGljLnR4dCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfVGFtaWxfSW50ZXJJbmRpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGFiOWY0MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfVGFtaWxfSW50ZXJJbmRpYy50eHQKQEAgLTAsMCArMSw4MCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9UYW1pbF9JbnRlckluZGljLnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDcvMjUgMjE6MjA6MjYgJAorIyAkUmV2aXNpb246IDEuOCAkCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUYW1pbC1JbnRlckluZGljCisjOjogTkZEIChORkMpIDsKKworXHUwQkM2XHUwQkJFPlx1RTA0QTsjIFZPV0VMIFNJR04gTworXHUwQkM3XHUwQkJFPlx1RTA0QjsjIFZPV0VMIFNJR04gT08KK1x1MEJDNlx1MEJENz5cdUUwNEM7IyBWT1dFTCBTSUdOIEFVCitcdTBCOTJcdTBCRDc+XHVFMDE0OyMgTEVUVEVSIEFVCisKK1x1MEI4Mj5cdUUwMDI7ICAgICAgIyBTSUdOIEFOVVNWQVJBCitcdTBCODM+XHVFMDAzOyAgICAgICMgU0lHTiBWSVNBUkdBCitcdTBCODU+XHVFMDA1OyAgICAgICMgTEVUVEVSIEEKK1x1MEI4Nj5cdUUwMDY7ICAgICAgIyBMRVRURVIgQUEKK1x1MEI4Nz5cdUUwMDc7ICAgICAgIyBMRVRURVIgSQorXHUwQjg4Plx1RTAwODsgICAgICAjIExFVFRFUiBJSQorXHUwQjg5Plx1RTAwOTsgICAgICAjIExFVFRFUiBVCitcdTBCOEE+XHVFMDBBOyAgICAgICMgTEVUVEVSIFVVCitcdTBCOEU+XHVFMDBFOyAgICAgICMgTEVUVEVSIEUKK1x1MEI4Rj5cdUUwMEY7ICAgICAgIyBMRVRURVIgRUUKK1x1MEI5MD5cdUUwMTA7ICAgICAgIyBMRVRURVIgQUkKK1x1MEI5Mj5cdUUwMTI7ICAgICAgIyBMRVRURVIgTworXHUwQjkzPlx1RTAxMzsgICAgICAjIExFVFRFUiBPTworXHUwQjk0Plx1RTAxNDsJICAgICMgTEVUVEVSIEFVCitcdTBCOTU+XHVFMDE1OyAgICAgICMgTEVUVEVSIEtBCitcdTBCOTk+XHVFMDE5OyAgICAgICMgTEVUVEVSIE5HQQorXHUwQjlBPlx1RTAxQTsgICAgICAjIExFVFRFUiBDQQorXHUwQjlDPlx1RTAxQzsgICAgICAjIExFVFRFUiBKQQorXHUwQjlFPlx1RTAxRTsgICAgICAjIExFVFRFUiBOWUEKK1x1MEI5Rj5cdUUwMUY7ICAgICAgIyBMRVRURVIgVFRBCitcdTBCQTM+XHVFMDIzOyAgICAgICMgTEVUVEVSIE5OQQorXHUwQkE0Plx1RTAyNDsgICAgICAjIExFVFRFUiBUQQorXHUwQkE4Plx1RTAyODsgICAgICAjIExFVFRFUiBOQQorXHUwQkE5Plx1RTAyOTsgICAgICAjIExFVFRFUiBOTk5BCitcdTBCQUE+XHVFMDJBOyAgICAgICMgTEVUVEVSIFBBCitcdTBCQUU+XHVFMDJFOyAgICAgICMgTEVUVEVSIE1BCitcdTBCQUY+XHVFMDJGOyAgICAgICMgTEVUVEVSIFlBCitcdTBCQjA+XHVFMDMwOyAgICAgICMgTEVUVEVSIFJBCitcdTBCQjE+XHVFMDMxOyAgICAgICMgTEVUVEVSIFJSQQorXHUwQkIyPlx1RTAzMjsgICAgICAjIExFVFRFUiBMQQorXHUwQkIzPlx1RTAzMzsgICAgICAjIExFVFRFUiBMTEEKK1x1MEJCND5cdUUwMzQ7ICAgICAgIyBMRVRURVIgTExMQQorXHUwQkI1Plx1RTAzNTsgICAgICAjIExFVFRFUiBWQQorXHUwQkI3Plx1RTAzNzsgICAgICAjIExFVFRFUiBTU0EKK1x1MEJCOD5cdUUwMzg7ICAgICAgIyBMRVRURVIgU0EKK1x1MEJCOT5cdUUwMzk7ICAgICAgIyBMRVRURVIgSEEKK1x1MEJCRT5cdUUwM0U7ICAgICAgIyBWT1dFTCBTSUdOIEFBCitcdTBCQkY+XHVFMDNGOyAgICAgICMgVk9XRUwgU0lHTiBJCitcdTBCQzA+XHVFMDQwOyAgICAgICMgVk9XRUwgU0lHTiBJSQorXHUwQkMxPlx1RTA0MTsgICAgICAjIFZPV0VMIFNJR04gVQorXHUwQkMyPlx1RTA0MjsgICAgICAjIFZPV0VMIFNJR04gVVUKK1x1MEJDNj5cdUUwNDY7ICAgICAgIyBWT1dFTCBTSUdOIEUKK1x1MEJDNz5cdUUwNDc7ICAgICAgIyBWT1dFTCBTSUdOIEVFCitcdTBCQzg+XHVFMDQ4OyAgICAgICMgVk9XRUwgU0lHTiBBSQorCitcdTBCQ0Q+XHVFMDREOyAgICAgICMgU0lHTiBWSVJBTUEKK1x1MEJENz5cdUUwNTc7ICAgICAgIyBBVSBMRU5HVEggTUFSSworXHUwQkU3Plx1RTA2NzsgICAgICAjIERJR0lUIE9ORQorXHUwQkU4Plx1RTA2ODsgICAgICAjIERJR0lUIFRXTworXHUwQkU5Plx1RTA2OTsgICAgICAjIERJR0lUIFRIUkVFCitcdTBCRUE+XHVFMDZBOyAgICAgICMgRElHSVQgRk9VUgorXHUwQkVCPlx1RTA2QjsgICAgICAjIERJR0lUIEZJVkUKK1x1MEJFQz5cdUUwNkM7ICAgICAgIyBESUdJVCBTSVgKK1x1MEJFRD5cdUUwNkQ7ICAgICAgIyBESUdJVCBTRVZFTgorXHUwQkVFPlx1RTA2RTsgICAgICAjIERJR0lUIEVJR0hUCitcdTBCRUY+XHVFMDZGOyAgICAgICMgRElHSVQgTklORQorXHUwQkYwPlx1RTA2N1x1RTA2NjsgICAgICAgICAgCSMgVU5NQVBQRUQgVGFtaWwtSW50ZXJJbmRpYzogTlVNQkVSIFRFTgorXHUwQkYxPlx1RTA2N1x1RTA2Nlx1RTA2NjsgICAgIAkjIFVOTUFQUEVEIFRhbWlsLUludGVySW5kaWM6IE5VTUJFUiBPTkUgSFVORFJFRAorXHUwQkYyPlx1RTA2N1x1RTA2Nlx1RTA2Nlx1RTA2NjsjIFVOTUFQUEVEIFRhbWlsLUludGVySW5kaWM6IE5VTUJFUiBPTkUgVEhPVVNBTkQKKzA+XHVlMDY2OworCisjICAgIDo6IE5GQyAoTkZEKSA7CisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UZWx1Z3VfSW50ZXJJbmRpYy50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX1RlbHVndV9JbnRlckluZGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjA3ZWRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UZWx1Z3VfSW50ZXJJbmRpYy50eHQKQEAgLTAsMCArMSw5NCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9BdHRpYy9UcmFuc2xpdGVyYXRvcl9UZWx1Z3VfSW50ZXJJbmRpYy50eHQsdiAkCisjICREYXRlOiAyMDAyLzA4LzE0IDAwOjQwOjU4ICQKKyMgJFJldmlzaW9uOiAxLjcgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGVsdWd1LUludGVySW5kaWMKKyM6OiBORkQgKE5GQykgOworXHUwYzQ2XHUwYzRkXHUwYzU2Plx1ZTA0OFx1ZTA0ZDsKK1x1MEM0Nlx1MEM1Nj5cdUUwNDg7IyBWT1dFTCBTSUdOIEFJCitcdTBDMDE+XHVFMDAxOyAgICAgICMgU0lHTiBDQU5EUkFCSU5EVQorXHUwQzAyPlx1RTAwMjsgICAgICAjIFNJR04gQU5VU1ZBUkEKK1x1MEMwMz5cdUUwMDM7ICAgICAgIyBTSUdOIFZJU0FSR0EKK1x1MEMwNT5cdUUwMDU7ICAgICAgIyBMRVRURVIgQQorXHUwQzA2Plx1RTAwNjsgICAgICAjIExFVFRFUiBBQQorXHUwQzA3Plx1RTAwNzsgICAgICAjIExFVFRFUiBJCitcdTBDMDg+XHVFMDA4OyAgICAgICMgTEVUVEVSIElJCitcdTBDMDk+XHVFMDA5OyAgICAgICMgTEVUVEVSIFUKK1x1MEMwQT5cdUUwMEE7ICAgICAgIyBMRVRURVIgVVUKK1x1MEMwQj5cdUUwMEI7ICAgICAgIyBMRVRURVIgVk9DQUxJQyBSCitcdTBDMEM+XHVFMDBDOyAgICAgICMgTEVUVEVSIFZPQ0FMSUMgTAorXHUwQzBFPlx1RTAwRTsgICAgICAjIExFVFRFUiBFCitcdTBDMEY+XHVFMDBGOyAgICAgICMgTEVUVEVSIEVFCitcdTBDMTA+XHVFMDEwOyAgICAgICMgTEVUVEVSIEFJCitcdTBDMTI+XHVFMDEyOyAgICAgICMgTEVUVEVSIE8KK1x1MEMxMz5cdUUwMTM7ICAgICAgIyBMRVRURVIgT08KK1x1MEMxND5cdUUwMTQ7ICAgICAgIyBMRVRURVIgQVUKK1x1MEMxNT5cdUUwMTU7ICAgICAgIyBMRVRURVIgS0EKK1x1MEMxNj5cdUUwMTY7ICAgICAgIyBMRVRURVIgS0hBCitcdTBDMTc+XHVFMDE3OyAgICAgICMgTEVUVEVSIEdBCitcdTBDMTg+XHVFMDE4OyAgICAgICMgTEVUVEVSIEdIQQorXHUwQzE5Plx1RTAxOTsgICAgICAjIExFVFRFUiBOR0EKK1x1MEMxQT5cdUUwMUE7ICAgICAgIyBMRVRURVIgQ0EKK1x1MEMxQj5cdUUwMUI7ICAgICAgIyBMRVRURVIgQ0hBCitcdTBDMUM+XHVFMDFDOyAgICAgICMgTEVUVEVSIEpBCitcdTBDMUQ+XHVFMDFEOyAgICAgICMgTEVUVEVSIEpIQQorXHUwQzFFPlx1RTAxRTsgICAgICAjIExFVFRFUiBOWUEKK1x1MEMxRj5cdUUwMUY7ICAgICAgIyBMRVRURVIgVFRBCitcdTBDMjA+XHVFMDIwOyAgICAgICMgTEVUVEVSIFRUSEEKK1x1MEMyMT5cdUUwMjE7ICAgICAgIyBMRVRURVIgRERBCitcdTBDMjI+XHVFMDIyOyAgICAgICMgTEVUVEVSIERESEEKK1x1MEMyMz5cdUUwMjM7ICAgICAgIyBMRVRURVIgTk5BCitcdTBDMjQ+XHVFMDI0OyAgICAgICMgTEVUVEVSIFRBCitcdTBDMjU+XHVFMDI1OyAgICAgICMgTEVUVEVSIFRIQQorXHUwQzI2Plx1RTAyNjsgICAgICAjIExFVFRFUiBEQQorXHUwQzI3Plx1RTAyNzsgICAgICAjIExFVFRFUiBESEEKK1x1MEMyOD5cdUUwMjg7ICAgICAgIyBMRVRURVIgTkEKK1x1MEMyQT5cdUUwMkE7ICAgICAgIyBMRVRURVIgUEEKK1x1MEMyQj5cdUUwMkI7ICAgICAgIyBMRVRURVIgUEhBCitcdTBDMkM+XHVFMDJDOyAgICAgICMgTEVUVEVSIEJBCitcdTBDMkQ+XHVFMDJEOyAgICAgICMgTEVUVEVSIEJIQQorXHUwQzJFPlx1RTAyRTsgICAgICAjIExFVFRFUiBNQQorXHUwQzJGPlx1RTAyRjsgICAgICAjIExFVFRFUiBZQQorXHUwQzMwPlx1RTAzMDsgICAgICAjIExFVFRFUiBSQQorXHUwQzMxPlx1RTAzMTsgICAgICAjIExFVFRFUiBSUkEKK1x1MEMzMj5cdUUwMzI7ICAgICAgIyBMRVRURVIgTEEKK1x1MEMzMz5cdUUwMzM7ICAgICAgIyBMRVRURVIgTExBCitcdTBDMzU+XHVFMDM1OyAgICAgICMgTEVUVEVSIFZBCitcdTBDMzY+XHVFMDM2OyAgICAgICMgTEVUVEVSIFNIQQorXHUwQzM3Plx1RTAzNzsgICAgICAjIExFVFRFUiBTU0EKK1x1MEMzOD5cdUUwMzg7ICAgICAgIyBMRVRURVIgU0EKK1x1MEMzOT5cdUUwMzk7ICAgICAgIyBMRVRURVIgSEEKK1x1MEMzRT5cdUUwM0U7ICAgICAgIyBWT1dFTCBTSUdOIEFBCitcdTBDM0Y+XHVFMDNGOyAgICAgICMgVk9XRUwgU0lHTiBJCitcdTBDNDA+XHVFMDQwOyAgICAgICMgVk9XRUwgU0lHTiBJSQorXHUwQzQxPlx1RTA0MTsgICAgICAjIFZPV0VMIFNJR04gVQorXHUwQzQyPlx1RTA0MjsgICAgICAjIFZPV0VMIFNJR04gVVUKK1x1MEM0Mz5cdUUwNDM7ICAgICAgIyBWT1dFTCBTSUdOIFZPQ0FMSUMgUgorXHUwQzQ0Plx1RTA0NDsgICAgICAjIFZPV0VMIFNJR04gVk9DQUxJQyBSUgorXHUwQzQ2Plx1RTA0NjsgICAgICAjIFZPV0VMIFNJR04gRQorXHUwQzQ3Plx1RTA0NzsgICAgICAjIFZPV0VMIFNJR04gRUUKK1x1MEM0QT5cdUUwNEE7ICAgICAgIyBWT1dFTCBTSUdOIE8KK1x1MEM0Qj5cdUUwNEI7ICAgICAgIyBWT1dFTCBTSUdOIE9PCitcdTBDNEM+XHVFMDRDOyAgICAgICMgVk9XRUwgU0lHTiBBVQorXHUwQzREPlx1RTA0RDsgICAgICAjIFNJR04gVklSQU1BCitcdTBDNTU+XHVFMDU1OyAgICAgICMgTEVOR1RIIE1BUksKK1x1MEM1Nj5cdUUwNTY7ICAgICAgIyBBSSBMRU5HVEggTUFSSworXHUwQzYwPlx1RTA2MDsgICAgICAjIExFVFRFUiBWT0NBTElDIFJSCitcdTBDNjE+XHVFMDYxOyAgICAgICMgTEVUVEVSIFZPQ0FMSUMgTEwKK1x1MEM2Nj5cdUUwNjY7ICAgICAgIyBESUdJVCBaRVJPCitcdTBDNjc+XHVFMDY3OyAgICAgICMgRElHSVQgT05FCitcdTBDNjg+XHVFMDY4OyAgICAgICMgRElHSVQgVFdPCitcdTBDNjk+XHVFMDY5OyAgICAgICMgRElHSVQgVEhSRUUKK1x1MEM2QT5cdUUwNkE7ICAgICAgIyBESUdJVCBGT1VSCitcdTBDNkI+XHVFMDZCOyAgICAgICMgRElHSVQgRklWRQorXHUwQzZDPlx1RTA2QzsgICAgICAjIERJR0lUIFNJWAorXHUwQzZEPlx1RTA2RDsgICAgICAjIERJR0lUIFNFVkVOCitcdTBDNkU+XHVFMDZFOyAgICAgICMgRElHSVQgRUlHSFQKK1x1MEM2Rj5cdUUwNkY7ICAgICAgIyBESUdJVCBOSU5FCisjICAgIDo6IE5GQyAoTkZEKSA7CisjIGVvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UaGFpTG9naWNhbF9MYXRpbi50eHQgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX1RoYWlMb2dpY2FsX0xhdGluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWY4ZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UaGFpTG9naWNhbF9MYXRpbi50eHQKQEAgLTAsMCArMSwxOTEgQEAKK++7vyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvQXR0aWMvVHJhbnNsaXRlcmF0b3JfVGhhaUxvZ2ljYWxfTGF0aW4udHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wNy8yNiAxOTo1Njo1NSAkCisjICRSZXZpc2lvbjogMS41ICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoYWktTGF0aW4KKyMgVGhpcyBzZXQgb2YgcnVsZXMgZm9sbG93cyBJU08gMTE5NDAKKyMJc2VlIGh0dHA6Ly9ob21lcGFnZS5tYWMuY29tL3NpcmJpbmtzL3BkZi9UaGFpLnIyLnBkZgorIyBleGNlcHQgdGhhdCB0aGF0IGRvZXMgbm90IG1lbnRpb24gYW4gaW1wbGljaXQgdm93ZWwsIHNvIHdlIHVzZSBvzKMKKyMKKyMgVGhlIHRyYW5zY3JpcHRpb24gaXMgZmFpcmx5IHVnbHksIHNvIHdlIG91Z2h0IHRvIGFsc28gZG8gdGhlIFVOR0VHTiB2ZXJzaW9uCisjCXNlZTogaHR0cDovL3d3dy5la2kuZWUvd2dycy9yb20xX3RoLnBkZgorIyBhbmQgcHJvYmFibHkgbWFrZSB0aGF0IHRoZSBtYWluIHZhcmlhbnQuCisKKyMgTm90ZTogdGhpcyBpcyBhbiBpbnRlcm5hbCBmaWxlLiBUaGUgTkZEL05GQyBpcyBoYW5kbGVkIGV4dGVybmFsbHksIGluIHRoZSBpbmRleAorIyBUaGUgaW5zZXJ0aW9uIG9mIHNwYWNlcyBiZXR3ZWVuIHdvcmRzLCB0aGUgcmV2ZXJzYWwgb2YgdGhlIHZvd2VscworIyBhbmQgdGhlIGNvbnZlcnNpb24gb2Ygc3BhY2UgdG8gc2VtaWNvbG9uIGFyZSBkb25lICpvdXRzaWRlKiBvZiB0aGVzZSBydWxlcy4KKyMgU28gYXMgZmFyIGFzIHRoZXNlIHJ1bGVzIGFyZSBjb25jZXJuZWQsIHRoZSB2b3dlbHMgYXJlIGluIGxvZ2ljYWwgb3JkZXIhCisKKyMgaW5zZXJ0IGltcGxpY2l0IHZvd2VsIChhbmQgcmVtb3ZlIGl0IGdvaW5nIHRoZSBvdGhlciB3YXkpCisjIENPTU1FTlRFRCBvdXQ6IHRoZSBpbXBsaWNpdCB2b3dlbCBwb3NpdGlvbnMgY2Fubm90IGJlIHByZWRpY3RlZCBhbGdvcml0aG1pY2FsbHkKKyMkY29uc29uYW50ID0gW+C4gS3guK5dOworIyR2b3dlbCA9IFvguLAt4Li64LmALeC5hOC5h107CisKKyN7ICggJGNvbnNvbmFudCApIH0gW14kdm93ZWwg7oCAXSA+IHwgJDEg7oCAIDsKKyPugIAgPiBvzKMgOworIyA8IG/MoyA7CisKKyRub3RBYm92ZSA9IFteXHB7Y2NjPTB9XHB7Y2NjPWFib3ZlfV0gOworJG5vdEJlbG93ID0gW15ccHtjY2M9MH1ccHtjY2M9YmVsb3d9XSA7CisKKyMgQ29uc29uYW50cworIyBXYXJuaW5nOiB0aGUgJ2gncyBuZWVkIHRvIGJlIGhhbmRsZWQgY2FyZWZ1bGx5IQorIyBXaGF0IHdlIHJlYWxseSB3YW50IHRvIHNheSBpcyB0aGUgZm9sbG93aW5nLCBidXQgd2UgY2FuJ3QKKyMgJG5vdEhBY2NlbnQgPSAhKCRub3RBYm92ZSogICDMhCB8ICRub3RCZWxvdyogICDMoykgOworCisjIFNpbmNlIHRoZSBvbmx5IGFjY2VudHMgd2UgY2FyZSBhYm91dCB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGFyZSBmcmVlLXN0YW5kaW5nIGFjY2VudHMgYmVsb3csIHdlIHVzZSBpbnN0ZWFkOgorJGZyZWVTdGFuZGluZ0JlbG93ID0gW1x1MDMyNSAgXTsKKyRoQWNjZW50ID0gIFsgICDMhCAgICAgzKNdCiskbm90SEFjY2VudDAgPSBbXiRmcmVlU3RhbmRpbmdCZWxvdyRoQWNjZW50XTsKKyRub3RIQWNjZW50MSA9ICRmcmVlU3RhbmRpbmdCZWxvdyBbXiRoQWNjZW50XTsKKwor4LirID4gaMyEIDsgIyBUSEFJIENIQVJBQ1RFUiBITyBISVAKKyDguKsgfCAkMSA8IGggKCRub3RBYm92ZSopICAgIMyEOyAjIGJhY2t3YXJkIGNhc2UsIGFjY291bnQgZm9yIHJlb3JkZXJpbmcKK+C4riA8PiBozKMgOyAjIFRIQUkgQ0hBUkFDVEVSIEhPIE5PS0hVSworCivguIIgPD4ga8yEaCA7ICMgVEhBSSBDSEFSQUNURVIgS0hPIEtIQUkKK+C4gyA8PiBrzKPMhGggOyAjIFRIQUkgQ0hBUkFDVEVSIEtITyBLSFVBVAor4LiFIDw+IGvKuWggOyAjIFRIQUkgQ0hBUkFDVEVSIEtITyBLSE9OICAKK+C4hiA8PiBrzKNoIDsgIyBUSEFJIENIQVJBQ1RFUiBLSE8gUkFLSEFORwor4LiEIDwga2ggfSAkbm90SEFjY2VudDEgOyAjIFRIQUkgQ0hBUkFDVEVSIEtITyBLSFdBSSAgCivguIQgPD4ga2ggfSAkbm90SEFjY2VudDAgOyAjIFRIQUkgQ0hBUkFDVEVSIEtITyBLSFdBSSAgCivguIEgPD4gayA7ICMgVEhBSSBDSEFSQUNURVIgS08gS0FJCisKK+C4oCA8PiBwzKNoIDsgIyBUSEFJIENIQVJBQ1RFUiBQSE8gU0FNUEhBTwor4LicIDw+IHDMhGggOyAjIFRIQUkgQ0hBUkFDVEVSIFBITyBQSFVORwor4LieIDwgcGggfSAkbm90SEFjY2VudDEgOyAjIFRIQUkgQ0hBUkFDVEVSIFBITyBQSEFOCivguJ4gPD4gcGggfSAkbm90SEFjY2VudDAgOyAjIFRIQUkgQ0hBUkFDVEVSIFBITyBQSEFOCivguJsgPD4gcCA7ICMgVEhBSSBDSEFSQUNURVIgUE8gUExBCisKK+C4iSA8PiBjzIRoIDsgIyBUSEFJIENIQVJBQ1RFUiBDSE8gQ0hJTkcKK+C4jCA8PiBjzKNoIDsgIyBUSEFJIENIQVJBQ1RFUiBDSE8gQ0hPRQor4LiKIDwgY2ggfSAkbm90SEFjY2VudDEgOyAjIFRIQUkgQ0hBUkFDVEVSIENITyBDSEFORwor4LiKIDw+IGNoIH0gJG5vdEhBY2NlbnQwIDsgIyBUSEFJIENIQVJBQ1RFUiBDSE8gQ0hBTkcKK+C4iCA8PiBjIDsgIyBUSEFJIENIQVJBQ1RFUiBDSE8gQ0hBTgorCivguJAgPD4gdMyjzIRoIDsgIyBUSEFJIENIQVJBQ1RFUiBUSE8gVEhBTgor4LiRIDw+IHTMsWggOyAjIFRIQUkgQ0hBUkFDVEVSIFRITyBOQU5HTU9OVEhPCivguJIgPD4gdMq5aCA7ICMgVEhBSSBDSEFSQUNURVIgVEhPIFBIVVRIQU8KK+C4liA8PiB0zIRoIDsgIyBUSEFJIENIQVJBQ1RFUiBUSE8gVEhVTkcKK+C4mCA8PiB0zKNoIDsgIyBUSEFJIENIQVJBQ1RFUiBUSE8gVEhPTkcKK+C4lyA8IHRoIH0gJG5vdEhBY2NlbnQxIDsgIyBUSEFJIENIQVJBQ1RFUiBUSE8gVEhBSEFOCivguJcgPD4gdGggfSAkbm90SEFjY2VudDAgOyAjIFRIQUkgQ0hBUkFDVEVSIFRITyBUSEFIQU4KKyNOb3RlOiBUTyBQQVRBSyBkZXZpYXRlcyBmcm9tIElTTyBzaW5jZSB0LWRvdHVuZGVyICsgaCB3b3VsZCBiZSBhbWJpZ291cy4gU28gaXQgdXNlcyB2ZXJ0aWNhbCB0aWNrLgor4LiPIDw+IHTMqSA7ICMgVEhBSSBDSEFSQUNURVIgVE8gUEFUQUsKK+C4lSA8PiB0IDsgIyBUSEFJIENIQVJBQ1RFUiBUTyBUQU8KKworIyBzaW5jZSB0aGVyZSBpcyBubyBzaW5nbGV0b24gZyAoZ2VuZXJhdGVkKSwgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdC4KK+C4hyA8PiBuZyA7ICMgVEhBSSBDSEFSQUNURVIgTkdPIE5HVQor4LiTIDw+IG7MoyA7ICMgVEhBSSBDSEFSQUNURVIgTk8gTkVOCivguJkgPD4gbiA7ICMgVEhBSSBDSEFSQUNURVIgTk8gTlUKKwor4LiNIDw+IHnMoyAgOyAjIFRIQUkgQ0hBUkFDVEVSIFlPIFlJTkcKK+C4jiA8PiBkzKMgOyAjIFRIQUkgQ0hBUkFDVEVSIERPIENIQURBCivguJQgPD4gZCA7ICMgVEhBSSBDSEFSQUNURVIgRE8gREVLCisKK+C4miA8PiBiIDsgIyBUSEFJIENIQVJBQ1RFUiBCTyBCQUlNQUkKK+C4nSA8PiBmzIQgOyAjIFRIQUkgQ0hBUkFDVEVSIEZPIEZBCisg4LidIHwgJDEgPCBmICgkbm90QWJvdmUqKSAgICDMhDsgIyBiYWNrd2FyZCBjYXNlLCBhY2NvdW50IGZvciByZW9yZGVyaW5nCisKK+C4oSA8PiBtIDsgIyBUSEFJIENIQVJBQ1RFUiBNTyBNQQor4LiiIDw+IHkgOyAjIFRIQUkgQ0hBUkFDVEVSIFlPIFlBSwor4LijIDw+IHIgOyAjIFRIQUkgQ0hBUkFDVEVSIFJPIFJVQQor4LikIDw+IHYgOyAjIFRIQUkgQ0hBUkFDVEVSIFJVCivguKYgPD4gxYIgOyAjIFRIQUkgQ0hBUkFDVEVSIExVCivguKcgPD4gdyA7ICMgVEhBSSBDSEFSQUNURVIgV08gV0FFTgorCivguKggPD4gc8yjzIQgOyAjIFRIQUkgQ0hBUkFDVEVSIFNPIFNBTEEqKioKKyDguKggfCAkMSA8IHMgICAgzKMgKCRub3RBYm92ZSopICAgIMyEOyAjIGJhY2t3YXJkIGNhc2UsIGFjY291bnQgZm9yIHJlb3JkZXJpbmcKK+C4qSA8PiBzzITKuSA7ICMgVEhBSSBDSEFSQUNURVIgU08gUlVTSQor4LiqID4gc8yEIDsgIyBUSEFJIENIQVJBQ1RFUiBTTyBTVUEqKioKKyDguKogfCAkMSA8IHMgKCRub3RBYm92ZSopICAgIMyEOyAjIGJhY2t3YXJkIGNhc2UsIGFjY291bnQgZm9yIHJlb3JkZXJpbmcKKwor4LisIDw+IGzMoyA7ICMgVEhBSSBDSEFSQUNURVIgTE8gQ0hVTEEKK+C4pSA8PiBsIDsgIyBUSEFJIENIQVJBQ1RFUiBMTyBMSU5HCivguJ8gPD4gZiA7ICMgVEhBSSBDSEFSQUNURVIgRk8gRkFOCisKK+C4rSA8PiB4IDsgIyBUSEFJIENIQVJBQ1RFUiBPIEFORwor4LiLIDw+IHMgOyAjIFRIQUkgQ0hBUkFDVEVSIFNPIFNPCisKKyMgdm93ZWxzCisKKyDguLEgPD4gYcyjIDsgIyBUSEFJIENIQVJBQ1RFUiBNQUkgSEFOLUFLQVQKKwor4LiyID4gYcyEIDsgIyBUSEFJIENIQVJBQ1RFUiBTQVJBIEFBCisg4LiyIHwgJDEgPCBhICgkbm90QWJvdmUqKSAgICDMhDsgIyBiYWNrd2FyZCBjYXNlLCBhY2NvdW50IGZvciByZW9yZGVyaW5nCisKKyMgV2UgZGV2aWF0ZSBmcm9tIElTTyBmb3IgU0FSQSBBTSBmb3IgZGlzYW1iaWd1YXRpb24KK+C4syA+IGEgIMyJOyAjIFRIQUkgQ0hBUkFDVEVSIFNBUkEgQU0KKyDguLMgfCAkMSA8IGEgKCRub3RBYm92ZSopICDMiSA7ICMgYmFja3dhcmQgY2FzZSwgYWNjb3VudCBmb3IgcmVvcmRlcmluZworCivguLAgPD4gYSA7ICMgVEhBSSBDSEFSQUNURVIgU0FSQSBBCisg4Li1IDw+IGnMhCA7ICMgVEhBSSBDSEFSQUNURVIgU0FSQSBJSQorICDguLUgfCAkMSA8IGkgKCRub3RBYm92ZSopICAgIMyEICA7ICMgYmFja3dhcmQgY2FzZSwgYWNjb3VudCBmb3IgcmVvcmRlcmluZworCisg4Li3IDw+IHXMo8yEIDsgIyBUSEFJIENIQVJBQ1RFUiBTQVJBIFVFRQorICDguLcgfCAkMSA8IHUgICDMoyAoJG5vdEFib3ZlKikgICAgzIQgIDsgIyBiYWNrd2FyZCBjYXNlLCBhY2NvdW50IGZvciByZW9yZGVyaW5nCisKKyDguLYgPD4gdcyjIDsgIyBUSEFJIENIQVJBQ1RFUiBTQVJBIFVFCisg4Li5IDw+IHXMhCA7ICMgVEhBSSBDSEFSQUNURVIgU0FSQSBVVQorIOC4uSB8ICQxIDwgdSAgKCRub3RBYm92ZSopICAgIMyEICA7ICMgYmFja3dhcmQgY2FzZSwgYWNjb3VudCBmb3IgcmVvcmRlcmluZworCisg4Li4IDw+IHUgOyAjIFRIQUkgQ0hBUkFDVEVSIFNBUkEgVQorCivguK8gPD4g4oChIDsgIyBUSEFJIENIQVJBQ1RFUiBQQUlZQU5OT0kKKworIyDguL8gPD4gWFhYIDsgIyBUSEFJIENVUlJFTkNZIFNZTUJPTCBCQUhUCisKK+C5gCA8PiBlIDsgIyBUSEFJIENIQVJBQ1RFUiBTQVJBIEUKK+C5gSA8PiDDpiA7ICMgVEhBSSBDSEFSQUNURVIgU0FSQSBBRQor4LmCIDw+IG8gOyAjIFRIQUkgQ0hBUkFDVEVSIFNBUkEgTwor4LmDIDw+IMSxIDsgIyBUSEFJIENIQVJBQ1RFUiBTQVJBIEFJIE1BSU1VQU4KK+C5hCA8PiBpzKMgOyAjIFRIQUkgQ0hBUkFDVEVSIFNBUkEgQUkgTUFJTUFMQUkKK+C5hSA8PiDJqCA7ICMgVEhBSSBDSEFSQUNURVIgTEFLS0hBTkdZQU8KKyDguYcgPD4gzIYgOyAjIFRIQUkgQ0hBUkFDVEVSIE1BSVRBSUtIVQorIOC5iCA8PiDMgCA7ICMgVEhBSSBDSEFSQUNURVIgTUFJIEVLCisg4LmJIDw+IMyCIDsgIyBUSEFJIENIQVJBQ1RFUiBNQUkgVEhPCisg4LmKIDw+IMyBIDsgIyBUSEFJIENIQVJBQ1RFUiBNQUkgVFJJCisg4LmLIDw+IMyMIDsgIyBUSEFJIENIQVJBQ1RFUiBNQUkgQ0hBVFRBV0EKKyDguYwgPD4gzJIgOyAjIFRIQUkgQ0hBUkFDVEVSIFRIQU5USEFLSEFUCisg4LmOIDw+ICd+JyA7ICMgVEhBSSBDSEFSQUNURVIgWUFNQUtLQU4KKworIyBXZSBkZXZpYXRlIGZyb20gSVNPIGZvciBkaXNhbWJpZ3VhdGlvbgorIOC5jSA8PiAgzIogOyAjIFRIQUkgQ0hBUkFDVEVSIE5JS0hBSElUCisKK+C5jyA8PiDCpyA7ICMgVEhBSSBDSEFSQUNURVIgRk9OR01BTgorCivguZAgPD4gMCA7ICMgVEhBSSBESUdJVCBaRVJPCivguZEgPD4gMSA7ICMgVEhBSSBESUdJVCBPTkUKK+C5kiA8PiAyIDsgIyBUSEFJIERJR0lUIFRXTwor4LmTIDw+IDMgOyAjIFRIQUkgRElHSVQgVEhSRUUKK+C5lCA8PiA0IDsgIyBUSEFJIERJR0lUIEZPVVIKK+C5lSA8PiA1IDsgIyBUSEFJIERJR0lUIEZJVkUKK+C5liA8PiA2IDsgIyBUSEFJIERJR0lUIFNJWAor4LmXIDw+IDcgOyAjIFRIQUkgRElHSVQgU0VWRU4KK+C5mCA8PiA4IDsgIyBUSEFJIERJR0lUIEVJR0hUCivguZkgPD4gOSA7ICMgVEhBSSBESUdJVCBOSU5FCisKK+C5miA8PiAnfHwnIDsgIyBUSEFJIENIQVJBQ1RFUiBBTkdLSEFOS0hVCisKK+C5myA8PiDCuyA7ICMgVEhBSSBDSEFSQUNURVIgS0hPTVVUCivguYYgPD4gwqsgOyAjIFRIQUkgQ0hBUkFDVEVSIE1BSVlBTU9LCisKKyMgbW92ZWQgZG93biB0byBtYWtlIHNob3J0ZXIgZmlyc3QKKyNOb3RlOiBQSElOVEhVIGRldmlhdGVzIGZyb20gSVNPIHNpbmNlIHVuZGVycmluZyBjYXVzZXMgY2Fub25pY2FsIHByb2JsZW1zLiBTbyBpdCB1c2VzIHNwYWNpbmcgdGljayBiZWxvdy4KKyDguLogPD4gy4wgOyAjIFRIQUkgQ0hBUkFDVEVSIFBISU5USFUKKyDguLQgPD4gaSA7ICMgVEhBSSBDSEFSQUNURVIgU0FSQSBJCisKKyMgZmFsbGJhY2tzCisKK3wgayA8IGcgOworfCBrIDwgaCA7Cit8IGMgPCBqIDsKK3wgayA8IHEgOworfCBzIDwgeiA7CisKKzo6IChsb3dlcik7CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX1RoYWlfVGhhaUxvZ2ljYWwudHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UaGFpX1RoYWlMb2dpY2FsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGI0NGYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UaGFpX1RoYWlMb2dpY2FsLnR4dApAQCAtMCwwICsxLDMwIEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX1RoYWlfVGhhaUxvZ2ljYWwudHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wNy8yNiAxOTo1Njo1NSAkCisjICRSZXZpc2lvbjogMS4zICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoaXMgcmV2ZXJzZXMgdGhlIFRoYWkgTG9naWNhbE9yZGVyRXhjZXB0aW9uIHZvd2VscywgYW5kIGRvZXMgKHBhcnQgb2YpIHNwYWNlcworIyBUaGUgcnVsZXMgdGhhdCBjb252ZXJ0IHNwYWNlIGludG8gc2VtaWNvbG9uIGFyZSBpbiBhbm90aGVyIGZpbGU7CisjIHNpbmNlIHRoZXkgaGF2ZSB0byBjb21lIEJFRk9SRSB0aGUgYnJlYWsgaXRlcmF0b3IKKworJHRoYWkgPSBbWzp0aGFpOl0gXHUwRTAxLVx1MEUzQVx1MEU0MC1cdTBFNUJdIDsKKworIyBGaXJzdCBjb252ZXJ0IHRoZSBzZW1pY29sb24gYmFjaworCisnICcgIDwgJHRoYWkgeyAnOyAnICB9ICR0aGFpOworCisjIFJlbW92ZSBhbnkgb3RoZXIgc3BhY2VzIGJldHdlZW4gdGhhaSBsZXR0ZXJzCisKKzwgJHRoYWkgeyAnICcgfSAkdGhhaTsKKworIyBOb3cgdm93ZWxzCiskdGhhaV9yZXZlcnNpbmcgPSBbWzpMb2dpY2FsX09yZGVyX0V4Y2VwdGlvbjpdICYgJHRoYWldOworJHRoYWlfbm9uX3JldmVyc2luZyA9IFskdGhhaSAtICR0aGFpX3JldmVyc2luZyBdOworCisoICR0aGFpX3JldmVyc2luZyApICggJHRoYWlfbm9uX3JldmVyc2luZyApID4gJDIgJDE7CisjIG90aGVyIGRpcmVjdGlvbgorJDIgJDEgPCAoICR0aGFpX25vbl9yZXZlcnNpbmcgKSAoICR0aGFpX3JldmVyc2luZyApIDsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL1RyYW5zbGl0ZXJhdG9yX1RoYWlfVGhhaVNlbWkudHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UaGFpX1RoYWlTZW1pLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODg2MmFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9UaGFpX1RoYWlTZW1pLnR4dApAQCAtMCwwICsxLDE1IEBACivvu78jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX1RoYWlfVGhhaVNlbWkudHh0LHYgJAorIyAkRGF0ZTogMjAwMi8wNy8yNiAxOTo1Njo1NSAkCisjICRSZXZpc2lvbjogMS4zICQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBydWxlcyB0aGF0IGNvbnZlcnQgc3BhY2UgaW50byBzZW1pY29sb24gYXJlIGluIHRoaXMgZmlsZTsKKyMgc2luY2UgdGhleSBoYXZlIHRvIGNvbWUgQkVGT1JFIHRoZSBicmVhayBpdGVyYXRvci4KKworJHRoYWkgPSBbWzp0aGFpOl0gXHUwRTAxLVx1MEUzQVx1MEU0MC1cdTBFNUJdIDsKKworJHRoYWkgeyAnICcgfSAkdGhhaSA+ICc7ICcgOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfaW5kZXgudHh0IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9UcmFuc2xpdGVyYXRvcl9pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTAyM2U1NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvVHJhbnNsaXRlcmF0b3JfaW5kZXgudHh0CkBAIC0wLDAgKzEsMjQ4IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL0F0dGljL1RyYW5zbGl0ZXJhdG9yX2luZGV4LnR4dCx2ICQKKyMgJERhdGU6IDIwMDIvMDkvMTkgMTg6MTE6MjMgJAorIyAkUmV2aXNpb246IDEuNDAgJAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFRSQU5TTElURVJBVE9SIElOREVYIEZJTEUuICBUaGlzIGZpbGUgbGlzdHMgdGhlIG5vbi1hbGdvcml0aG1pYworIyBzeXN0ZW0gdHJhbnNsaXRlcmF0b3JzLiAgSXQgYWxsb3dzIGFyYml0cmFyeSBtYXBwaW5ncyBiZXR3ZWVuCisjIHRyYW5zbGl0ZXJhdG9yIElEcyBhbmQgZmlsZSBuYW1lcywgYW5kIGFsc28gYWxsb3dzIHRoZSBzeXN0ZW0gdG8KKyMgZGVmaW5lIGFsaWFzZXMgZm9yIHRyYW5zbGl0ZXJhdG9ycywgc28gdGhhdCAiTGF0aW4tSGFuZ3VsIiwgZm9yCisjIGV4YW1wbGUsIGNhbiBiZSBpbXBsZW1lbnRlZCB0cmFuc3BhcmVudGx5IGFzIHRoZSBjb21wb3VuZAorIyAiTGF0aW4tSmFtbztKYW1vLUhhbmd1bCIuICBJbnRlcm5hbCBJRHMgbWF5IGFsc28gYmUgZGVmaW5lZDsgdGhlc2UKKyMgYXJlIGludmlzaWJsZSB0byB0aGUgdXNlciwgYnV0IGNhbiBiZSBjb21wb3NlZCB0b2dldGhlciBieSB0aGUKKyMgc3lzdGVtIHRvIGNyZWF0ZSB2aXNpYmxlIHRyYW5zbGl0ZXJhdG9ycy4KKyMKKyMgQmxhbmsgbGluZXMgYW5kIGxpbmVzIGJlZ2lubmluZyB3aXRoICcjJyBhcmUgaWdub3JlZC4KKyMKKyMgTGluZXMgaW4gdGhpcyBmaWxlIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXMgKHRleHQgbm90CisjIGVuY2xvc2VkIGJ5IDw+IGlzIGxpdGVyYWwpOgorIworIyAgIDxpZD46ZmlsZTo8cmVzb3VyY2U+OjxlbmNvZGluZz46PGRpcmVjdGlvbj4KKyMgICA8aWQ+OmludGVybmFsOjxyZXNvdXJjZT46PGVuY29kaW5nPjo8ZGlyZWN0aW9uPgorIyAgIDxpZD46YWxpYXM6PGdldEluc3RhbmNlQXJnPgorIworIyA8aWQ+IGlzIHRoZSBJRCBvZiB0aGUgc3lzdGVtIHRyYW5zbGl0ZXJhdG9yIGJlaW5nIGRlZmluZWQuICBUaGVzZQorIyBhcmUgcHVibGljIElEcyBlbnVtZXJhdGVkIGJ5IFRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZUlEcygpLAorIyB1bmxlc3MgdGhlIHNlY29uZCBmaWVsZCBpcyAiaW50ZXJuYWwiLgorIworIyA8cmVzb3VyY2U+IGlzIGEgUmVzb3VyY2VSZWFkZXIgcmVzb3VyY2UgbmFtZS4gIEN1cnJlbnRseSB0aGVzZSByZWZlcgorIyB0byBmaWxlIG5hbWVzIHVuZGVyIGNvbS9pYm0vdGV4dC9yZXNvdXJjZXMuICBUaGlzIHN0cmluZyBpcyBwYXNzZWQKKyMgZGlyZWN0bHkgdG8gUmVzb3VyY2VSZWFkZXIsIHRvZ2V0aGVyIHdpdGggPGVuY29kaW5nPi4KKyMKKyMgPGVuY29kaW5nPiBpcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIHRvIHVzZSB3aGVuIHJlYWRpbmcgPHJlc291cmNlPjsKKyMgcGFzc2VkIGRpcmVjdGx5IHRvIFJlc291cmNlUmVhZGVyLiAgRS5nLiwgIlVURjgiLgorIworIyA8ZGlyZWN0aW9uPiBpcyBlaXRoZXIgIkZPUldBUkQiIG9yICJSRVZFUlNFIi4KKyMKKyMgPGdldEluc3RhbmNlQXJnPiBpcyBhIHN0cmluZyB0byBiZSBwYXNzZWQgZGlyZWN0bHkgdG8KKyMgVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoKS4gIFRoZSByZXR1cm5lZCBUcmFuc2xpdGVyYXRvciBvYmplY3QKKyMgdGhlbiBoYXMgaXRzIElEIGNoYW5nZWQgdG8gPGlkPiBhbmQgaXMgcmV0dXJuZWQuCisKKworIyBCaWRpcmVjdGlvbmFsIHJ1bGUgZmlsZXMKKworRnVsbHdpZHRoLUhhbGZ3aWR0aDpmaWxlOlRyYW5zbGl0ZXJhdG9yX0Z1bGx3aWR0aF9IYWxmd2lkdGgudHh0OlVURjg6Rk9SV0FSRAorSGFsZndpZHRoLUZ1bGx3aWR0aDpmaWxlOlRyYW5zbGl0ZXJhdG9yX0Z1bGx3aWR0aF9IYWxmd2lkdGgudHh0OlVURjg6UkVWRVJTRQorCitMYXRpbi1DeXJpbGxpYzpmaWxlOlRyYW5zbGl0ZXJhdG9yX0N5cmlsbGljX0xhdGluLnR4dDpVVEY4OlJFVkVSU0UKK0N5cmlsbGljLUxhdGluOmZpbGU6VHJhbnNsaXRlcmF0b3JfQ3lyaWxsaWNfTGF0aW4udHh0OlVURjg6Rk9SV0FSRAorCitMYXRpbi1IZWJyZXc6ZmlsZTpUcmFuc2xpdGVyYXRvcl9IZWJyZXdfTGF0aW4udHh0OlVURjg6UkVWRVJTRQorSGVicmV3LUxhdGluOmZpbGU6VHJhbnNsaXRlcmF0b3JfSGVicmV3X0xhdGluLnR4dDpVVEY4OkZPUldBUkQKKworTGF0aW4tQXJhYmljOmZpbGU6VHJhbnNsaXRlcmF0b3JfQXJhYmljX0xhdGluLnR4dDpVVEY4OlJFVkVSU0UKK0FyYWJpYy1MYXRpbjpmaWxlOlRyYW5zbGl0ZXJhdG9yX0FyYWJpY19MYXRpbi50eHQ6VVRGODpGT1JXQVJECisKK0hhbi1MYXRpbjpmaWxlOlRyYW5zbGl0ZXJhdG9yX0hhbl9MYXRpbi50eHQ6VVRGODpGT1JXQVJECisjTGF0aW4tSGFuOmZpbGU6VHJhbnNsaXRlcmF0b3JfSGFuX0xhdGluLnR4dDpVVEY4OlJFVkVSU0UgIyBubyByb3VuZCB0cmlwIQorTGF0aW4tSGFuOmFsaWFzOm51bGwKKworIyBDb21tZW50IHRoZXNlIG91dDsgdGhleSBhcmUgb25seSBmb3IgdGVzdGluZworIyBMYXRpbi1IYW4vZGVmaW5pdGlvbjpmaWxlOlRyYW5zbGl0ZXJhdG9yX0hhbl9MYXRpbl9EZWZpbml0aW9uLnR4dDpVVEY4OlJFVkVSU0UKKyMgSGFuLUxhdGluL2RlZmluaXRpb246ZmlsZTpUcmFuc2xpdGVyYXRvcl9IYW5fTGF0aW5fRGVmaW5pdGlvbi50eHQ6VVRGODpGT1JXQVJECisKKyNMYXRpbi1IYW4vRURJQ1Q6ZmlsZTpUcmFuc2xpdGVyYXRvcl9IYW5fTGF0aW5fRURJQ1QudHh0OlVURjg6UkVWRVJTRQorI0hhbi1MYXRpbi9FRElDVDpmaWxlOlRyYW5zbGl0ZXJhdG9yX0hhbl9MYXRpbl9FRElDVC50eHQ6VVRGODpGT1JXQVJECisKK0xhdGluLUdyZWVrOmZpbGU6VHJhbnNsaXRlcmF0b3JfR3JlZWtfTGF0aW4udHh0OlVURjg6UkVWRVJTRQorR3JlZWstTGF0aW46ZmlsZTpUcmFuc2xpdGVyYXRvcl9HcmVla19MYXRpbi50eHQ6VVRGODpGT1JXQVJECisKK0xhdGluLUdyZWVrL1VOR0VHTjpmaWxlOlRyYW5zbGl0ZXJhdG9yX0dyZWVrX0xhdGluX1VOR0VHTi50eHQ6VVRGODpSRVZFUlNFCitHcmVlay1MYXRpbi9VTkdFR046ZmlsZTpUcmFuc2xpdGVyYXRvcl9HcmVla19MYXRpbl9VTkdFR04udHh0OlVURjg6Rk9SV0FSRAorCitMYXRpbi1LYXRha2FuYTpmaWxlOlRyYW5zbGl0ZXJhdG9yX0xhdGluX0thdGFrYW5hLnR4dDpVVEY4OkZPUldBUkQKK0thdGFrYW5hLUxhdGluOmZpbGU6VHJhbnNsaXRlcmF0b3JfTGF0aW5fS2F0YWthbmEudHh0OlVURjg6UkVWRVJTRQorCitMYXRpbi1IaXJhZ2FuYTpmaWxlOlRyYW5zbGl0ZXJhdG9yX0hpcmFnYW5hX0xhdGluLnR4dDpVVEY4OlJFVkVSU0UKK0hpcmFnYW5hLUxhdGluOmZpbGU6VHJhbnNsaXRlcmF0b3JfSGlyYWdhbmFfTGF0aW4udHh0OlVURjg6Rk9SV0FSRAorCisjVGhhaSBTdHVmZjogd2lsbCBjaGFuZ2UgaWYgd2UgZ2V0IFxiIGludG8gVHJhbnNsaXRlcmF0b3IKKworVGhhaS1UaGFpU2VtaTppbnRlcm5hbDpUcmFuc2xpdGVyYXRvcl9UaGFpX1RoYWlTZW1pLnR4dDpVVEY4OkZPUldBUkQKKworVGhhaS1UaGFpTG9naWNhbDppbnRlcm5hbDpUcmFuc2xpdGVyYXRvcl9UaGFpX1RoYWlMb2dpY2FsLnR4dDpVVEY4OkZPUldBUkQKK1RoYWlMb2dpY2FsLVRoYWk6aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfVGhhaV9UaGFpTG9naWNhbC50eHQ6VVRGODpSRVZFUlNFCisKK1RoYWlMb2dpY2FsLUxhdGluOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX1RoYWlMb2dpY2FsX0xhdGluLnR4dDpVVEY4OkZPUldBUkQKK0xhdGluLVRoYWlMb2dpY2FsOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX1RoYWlMb2dpY2FsX0xhdGluLnR4dDpVVEY4OlJFVkVSU0UKKworIyBNdXN0IHVzZSB0aGUgb3JkZXIgYmVsb3chCisjIFdlIG5lZWQgdHdvIHNlcGFyYXRlIHBhc3NlcyBiZWNhdXNlIG9mIHRoZSBUaGFpIHZvd2VsIHJldmVyc2FsCisjIFRoYWktTG9naWNhbCBhbHNvIGNvbnZlcnRzIHNwYWNlcyB0byBzZW1pY29sb25zLiBUaGF0IGhhcyB0byBiZSBkb25lIGJlZm9yZSB3ZSBpbnNlcnQgbGF0aW4gc3BhY2VzCisKK1RoYWktTGF0aW46YWxpYXM6W1s6dGhhaTpdIFx1MEUwMS1cdTBFM0FcdTBFNDAtXHUwRTVCXTtORkQ7VGhhaS1UaGFpU2VtaTtBbnktQnJlYWtJbnRlcm5hbDtUaGFpLVRoYWlMb2dpY2FsO1RoYWlMb2dpY2FsLUxhdGluO05GQworTGF0aW4tVGhhaTphbGlhczpbWzpMYXRpbjpdWzpNbjpdWzpNZTpdIFwgXDswLTl8flx1MDBBN1x1MDBBQlx1MDBCQlx1MDJCOVx1MDM3NFx1MjAyMVx1MDJDQ107TkZEO0xhdGluLVRoYWlMb2dpY2FsO1RoYWlMb2dpY2FsLVRoYWk7TkZDCisKKyMgZW5kIG9mIFRoYWkgU3R1ZmYKKworSGlyYWdhbmEtS2F0YWthbmE6ZmlsZTpUcmFuc2xpdGVyYXRvcl9IaXJhZ2FuYV9LYXRha2FuYS50eHQ6VVRGODpGT1JXQVJECitLYXRha2FuYS1IaXJhZ2FuYTpmaWxlOlRyYW5zbGl0ZXJhdG9yX0hpcmFnYW5hX0thdGFrYW5hLnR4dDpVVEY4OlJFVkVSU0UKKworQW55LUFjY2VudHM6ZmlsZTpUcmFuc2xpdGVyYXRvcl9BbnlfQWNjZW50cy50eHQ6VVRGODpGT1JXQVJECitBY2NlbnRzLUFueTpmaWxlOlRyYW5zbGl0ZXJhdG9yX0FueV9BY2NlbnRzLnR4dDpVVEY4OlJFVkVSU0UKKworQW55LVB1Ymxpc2hpbmc6ZmlsZTpUcmFuc2xpdGVyYXRvcl9BbnlfUHVibGlzaGluZy50eHQ6VVRGODpGT1JXQVJECitQdWJsaXNoaW5nLUFueTpmaWxlOlRyYW5zbGl0ZXJhdG9yX0FueV9QdWJsaXNoaW5nLnR4dDpVVEY4OlJFVkVSU0UKKworIyBLb3JlYW4KKyMgTi5CLiBEb24ndCBlbmQgTGF0aW4tSmFtbyB3aXRoIE5GQzsgdGhhdCBwcm9kdWNlcyBIYW5ndWwuICBGb3IKKyMgSGFuZ3VsIG91dHB1dCB1c2UgTGF0aW4tSGFuZ3VsLgorCitMb3dlckxhdGluLUphbW86aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfTGF0aW5fSmFtby50eHQ6VVRGODpGT1JXQVJECitKYW1vLUxvd2VyTGF0aW46aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfTGF0aW5fSmFtby50eHQ6VVRGODpSRVZFUlNFCitMYXRpbi1KYW1vOmFsaWFzOlsnQS1aYS16XHUwMEMwLVx1MDBDNVx1MDBDNy1cdTAwQ0ZcdTAwRDEtXHUwMEQ2XHUwMEQ5LVx1MDBERFx1MDBFMC1cdTAwRTVcdTAwRTctXHUwMEVGXHUwMEYxLVx1MDBGNlx1MDBGOS1cdTAwRkRcdTAwRkYtXHUwMTBGXHUwMTEyLVx1MDEyNVx1MDEyOC1cdTAxMzBcdTAxMzQtXHUwMTM3XHUwMTM5LVx1MDEzRVx1MDE0My1cdTAxNDhcdTAxNEMtXHUwMTUxXHUwMTU0LVx1MDE2NVx1MDE2OC1cdTAxN0VcdTAxQTAtXHUwMUExXHUwMUFGLVx1MDFCMFx1MDFDRC1cdTAxRENcdTAxREUtXHUwMUUxXHUwMUU2LVx1MDFFRFx1MDFGMFx1MDFGNC1cdTAxRjVcdTAxRjgtXHUwMUZCXHUwMjAwLVx1MDIxQlx1MDIxRS1cdTAyMUZcdTAyMjYtXHUwMjMzXHUxRTAwLVx1MUU5OVx1MUVBMC1cdTFFRjlcdTIxMkEtXHUyMTJCXTtORkQ7TG93ZXI7TG93ZXJMYXRpbi1KYW1vCitKYW1vLUxhdGluOmFsaWFzOlsnXHUxMTAwLVx1MTExMlx1MTE2MS1cdTExNzVcdTExQTgtXHUxMUMyXHVBQzAwLVx1RDdBM107TkZEO0phbW8tTG93ZXJMYXRpbjtORkMKK0xhdGluLUhhbmd1bDphbGlhczpbJ0EtWmEtelx1MDBDMC1cdTAwQzVcdTAwQzctXHUwMENGXHUwMEQxLVx1MDBENlx1MDBEOS1cdTAwRERcdTAwRTAtXHUwMEU1XHUwMEU3LVx1MDBFRlx1MDBGMS1cdTAwRjZcdTAwRjktXHUwMEZEXHUwMEZGLVx1MDEwRlx1MDExMi1cdTAxMjVcdTAxMjgtXHUwMTMwXHUwMTM0LVx1MDEzN1x1MDEzOS1cdTAxM0VcdTAxNDMtXHUwMTQ4XHUwMTRDLVx1MDE1MVx1MDE1NC1cdTAxNjVcdTAxNjgtXHUwMTdFXHUwMUEwLVx1MDFBMVx1MDFBRi1cdTAxQjBcdTAxQ0QtXHUwMURDXHUwMURFLVx1MDFFMVx1MDFFNi1cdTAxRURcdTAxRjBcdTAxRjQtXHUwMUY1XHUwMUY4LVx1MDFGQlx1MDIwMC1cdTAyMUJcdTAyMUUtXHUwMjFGXHUwMjI2LVx1MDIzM1x1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUyMTJBLVx1MjEyQl07TkZEO0xvd2VyO0xvd2VyTGF0aW4tSmFtbztORkMKK0hhbmd1bC1MYXRpbjphbGlhczpbJ1x1MTEwMC1cdTExMTJcdTExNjEtXHUxMTc1XHUxMUE4LVx1MTFDMlx1MzEzMS1cdTMxM0ZcdTMxNDEtXHUzMTQzXHUzMTQ1LVx1MzE2M1x1MzIwMC1cdTMyMUNcdTMyNjAtXHUzMjdCXHVBQzAwLVx1RDdBM1x1RkYwN1x1RkZBMS1cdUZGQUZcdUZGQjEtXHVGRkIzXHVGRkI1LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdO05GS0Q7SmFtby1Mb3dlckxhdGluO05GQworCisjIEludGVyLUluZGljIGNvbXBvc2VkIHJ1bGVzCitMYXRpbi1JbnRlckluZGljOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX0xhdGluX0ludGVySW5kaWMudHh0OlVURjg6Rk9SV0FSRAorRGV2YW5hZ2FyaS1JbnRlckluZGljOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX0RldmFuYWdhcmlfSW50ZXJJbmRpYy50eHQ6VVRGODpGT1JXQVJECitCZW5nYWxpLUludGVySW5kaWM6aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfQmVuZ2FsaV9JbnRlckluZGljLnR4dDpVVEY4OkZPUldBUkQKK0d1cm11a2hpLUludGVySW5kaWM6aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfR3VybXVraGlfSW50ZXJJbmRpYy50eHQ6VVRGODpGT1JXQVJECitHdWphcmF0aS1JbnRlckluZGljOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX0d1amFyYXRpX0ludGVySW5kaWMudHh0OlVURjg6Rk9SV0FSRAorT3JpeWEtSW50ZXJJbmRpYzppbnRlcm5hbDpUcmFuc2xpdGVyYXRvcl9Pcml5YV9JbnRlckluZGljLnR4dDpVVEY4OkZPUldBUkQKK1RhbWlsLUludGVySW5kaWM6aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfVGFtaWxfSW50ZXJJbmRpYy50eHQ6VVRGODpGT1JXQVJECitUZWx1Z3UtSW50ZXJJbmRpYzppbnRlcm5hbDpUcmFuc2xpdGVyYXRvcl9UZWx1Z3VfSW50ZXJJbmRpYy50eHQ6VVRGODpGT1JXQVJECitLYW5uYWRhLUludGVySW5kaWM6aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfS2FubmFkYV9JbnRlckluZGljLnR4dDpVVEY4OkZPUldBUkQKK01hbGF5YWxhbS1JbnRlckluZGljOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX01hbGF5YWxhbV9JbnRlckluZGljLnR4dDpVVEY4OkZPUldBUkQKKworSW50ZXJJbmRpYy1MYXRpbjppbnRlcm5hbDpUcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0xhdGluLnR4dDpVVEY4OkZPUldBUkQKK0ludGVySW5kaWMtRGV2YW5hZ2FyaTppbnRlcm5hbDpUcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0RldmFuYWdhcmkudHh0OlVURjg6Rk9SV0FSRAorSW50ZXJJbmRpYy1CZW5nYWxpOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfQmVuZ2FsaS50eHQ6VVRGODpGT1JXQVJECitJbnRlckluZGljLUd1cm11a2hpOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfR3VybXVraGkudHh0OlVURjg6Rk9SV0FSRAorSW50ZXJJbmRpYy1HdWphcmF0aTppbnRlcm5hbDpUcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX0d1amFyYXRpLnR4dDpVVEY4OkZPUldBUkQKK0ludGVySW5kaWMtT3JpeWE6aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19Pcml5YS50eHQ6VVRGODpGT1JXQVJECitJbnRlckluZGljLVRhbWlsOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfVGFtaWwudHh0OlVURjg6Rk9SV0FSRAorSW50ZXJJbmRpYy1UZWx1Z3U6aW50ZXJuYWw6VHJhbnNsaXRlcmF0b3JfSW50ZXJJbmRpY19UZWx1Z3UudHh0OlVURjg6Rk9SV0FSRAorSW50ZXJJbmRpYy1LYW5uYWRhOmludGVybmFsOlRyYW5zbGl0ZXJhdG9yX0ludGVySW5kaWNfS2FubmFkYS50eHQ6VVRGODpGT1JXQVJECitJbnRlckluZGljLU1hbGF5YWxhbTppbnRlcm5hbDpUcmFuc2xpdGVyYXRvcl9JbnRlckluZGljX01hbGF5YWxhbS50eHQ6VVRGODpGT1JXQVJECisKKyNMYXRpbi1JbmRpYyB0cmFuc2xpdGVyYXRvcnMKK0xhdGluLURldmFuYWdhcmk6YWxpYXM6WycuMC05QS1aYS16flx1MDBDMC1cdTAwQzVcdTAwQzctXHUwMENGXHUwMEQxLVx1MDBENlx1MDBEOS1cdTAwRERcdTAwRTAtXHUwMEU1XHUwMEU3LVx1MDBFRlx1MDBGMS1cdTAwRjZcdTAwRjktXHUwMEZEXHUwMEZGLVx1MDEwRlx1MDExMi1cdTAxMjVcdTAxMjgtXHUwMTMwXHUwMTM0LVx1MDEzN1x1MDEzOS1cdTAxM0VcdTAxNDMtXHUwMTQ4XHUwMTRDLVx1MDE1MVx1MDE1NC1cdTAxNjVcdTAxNjgtXHUwMTdFXHUwMUEwLVx1MDFBMVx1MDFBRi1cdTAxQjBcdTAxQ0QtXHUwMURDXHUwMURFLVx1MDFFM1x1MDFFNi1cdTAxRURcdTAxRjBcdTAxRjQtXHUwMUY1XHUwMUY4LVx1MDIxQlx1MDIxRS1cdTAyMUZcdTAyMjYtXHUwMjMzXHUwMzAxXHUwMzAzLVx1MDMwNFx1MDMwNi1cdTAzMDdcdTAzMTBcdTAzMTQtXHUwMzE1XHUwMzIzXHUwMzI1XHUwMzMxXHUwMzQxXHUwMzQ0XHUwMzg1LVx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwMzkwXHUwM0FDLVx1MDNCMFx1MDNDQy1cdTAzQ0VcdTAzRDNcdTA0MDNcdTA0MENcdTA0MEVcdTA0MTlcdTA0MzlcdTA0NTNcdTA0NUNcdTA0NUVcdTA0QzEtXHUwNEMyXHUwNEQwLVx1MDREMVx1MDRENi1cdTA0RDdcdTA0RTItXHUwNEUzXHUwNEVFLVx1MDRFRlx1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUxRjAxXHUxRjAzLVx1MUYwNVx1MUYwN1x1MUYwOVx1MUYwQi1cdTFGMERcdTFGMEZcdTFGMTFcdTFGMTMtXHUxRjE1XHUxRjE5XHUxRjFCLVx1MUYxRFx1MUYyMVx1MUYyMy1cdTFGMjVcdTFGMjdcdTFGMjlcdTFGMkItXHUxRjJEXHUxRjJGXHUxRjMxXHUxRjMzLVx1MUYzNVx1MUYzN1x1MUYzOVx1MUYzQi1cdTFGM0RcdTFGM0ZcdTFGNDFcdTFGNDMtXHUxRjQ1XHUxRjQ5XHUxRjRCLVx1MUY0RFx1MUY1MVx1MUY1My1cdTFGNTVcdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUZcdTFGNjFcdTFGNjMtXHUxRjY1XHUxRjY3XHUxRjY5XHUxRjZCLVx1MUY2RFx1MUY2Rlx1MUY3MVx1MUY3M1x1MUY3NVx1MUY3N1x1MUY3OVx1MUY3Qlx1MUY3RFx1MUY4MVx1MUY4My1cdTFGODVcdTFGODdcdTFGODlcdTFGOEItXHUxRjhEXHUxRjhGXHUxRjkxXHUxRjkzLVx1MUY5NVx1MUY5N1x1MUY5OVx1MUY5Qi1cdTFGOURcdTFGOUZcdTFGQTFcdTFGQTMtXHUxRkE1XHUxRkE3XHUxRkE5XHUxRkFCLVx1MUZBRFx1MUZBRi1cdTFGQjFcdTFGQjRcdTFGQjgtXHUxRkI5XHUxRkJCXHUxRkM0XHUxRkM5XHUxRkNCXHUxRkNFXHUxRkQwLVx1MUZEMVx1MUZEM1x1MUZEOC1cdTFGRDlcdTFGREJcdTFGREVcdTFGRTAtXHUxRkUxXHUxRkUzXHUxRkU1XHUxRkU4LVx1MUZFOVx1MUZFQi1cdTFGRUNcdTFGRUVcdTFGRjRcdTFGRjlcdTFGRkJcdTIxMkEtXHUyMTJCXHVFMDREXHVFMDY0XTtORkQ7TG93ZXI7TGF0aW4tSW50ZXJJbmRpYztJbnRlckluZGljLURldmFuYWdhcmk7TkZDCitMYXRpbi1CZW5nYWxpOmFsaWFzOlsnLjAtOUEtWmEten5cdTAwQzAtXHUwMEM1XHUwMEM3LVx1MDBDRlx1MDBEMS1cdTAwRDZcdTAwRDktXHUwMEREXHUwMEUwLVx1MDBFNVx1MDBFNy1cdTAwRUZcdTAwRjEtXHUwMEY2XHUwMEY5LVx1MDBGRFx1MDBGRi1cdTAxMEZcdTAxMTItXHUwMTI1XHUwMTI4LVx1MDEzMFx1MDEzNC1cdTAxMzdcdTAxMzktXHUwMTNFXHUwMTQzLVx1MDE0OFx1MDE0Qy1cdTAxNTFcdTAxNTQtXHUwMTY1XHUwMTY4LVx1MDE3RVx1MDFBMC1cdTAxQTFcdTAxQUYtXHUwMUIwXHUwMUNELVx1MDFEQ1x1MDFERS1cdTAxRTNcdTAxRTYtXHUwMUVEXHUwMUYwXHUwMUY0LVx1MDFGNVx1MDFGOC1cdTAyMUJcdTAyMUUtXHUwMjFGXHUwMjI2LVx1MDIzM1x1MDMwMVx1MDMwMy1cdTAzMDRcdTAzMDYtXHUwMzA3XHUwMzEwXHUwMzE0LVx1MDMxNVx1MDMyM1x1MDMyNVx1MDMzMVx1MDM0MVx1MDM0NFx1MDM4NS1cdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDM5MFx1MDNBQy1cdTAzQjBcdTAzQ0MtXHUwM0NFXHUwM0QzXHUwNDAzXHUwNDBDXHUwNDBFXHUwNDE5XHUwNDM5XHUwNDUzXHUwNDVDXHUwNDVFXHUwNEMxLVx1MDRDMlx1MDREMC1cdTA0RDFcdTA0RDYtXHUwNEQ3XHUwNEUyLVx1MDRFM1x1MDRFRS1cdTA0RUZcdTFFMDAtXHUxRTk5XHUxRUEwLVx1MUVGOVx1MUYwMVx1MUYwMy1cdTFGMDVcdTFGMDdcdTFGMDlcdTFGMEItXHUxRjBEXHUxRjBGXHUxRjExXHUxRjEzLVx1MUYxNVx1MUYxOVx1MUYxQi1cdTFGMURcdTFGMjFcdTFGMjMtXHUxRjI1XHUxRjI3XHUxRjI5XHUxRjJCLVx1MUYyRFx1MUYyRlx1MUYzMVx1MUYzMy1cdTFGMzVcdTFGMzdcdTFGMzlcdTFGM0ItXHUxRjNEXHUxRjNGXHUxRjQxXHUxRjQzLVx1MUY0NVx1MUY0OVx1MUY0Qi1cdTFGNERcdTFGNTFcdTFGNTMtXHUxRjU1XHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGXHUxRjYxXHUxRjYzLVx1MUY2NVx1MUY2N1x1MUY2OVx1MUY2Qi1cdTFGNkRcdTFGNkZcdTFGNzFcdTFGNzNcdTFGNzVcdTFGNzdcdTFGNzlcdTFGN0JcdTFGN0RcdTFGODFcdTFGODMtXHUxRjg1XHUxRjg3XHUxRjg5XHUxRjhCLVx1MUY4RFx1MUY4Rlx1MUY5MVx1MUY5My1cdTFGOTVcdTFGOTdcdTFGOTlcdTFGOUItXHUxRjlEXHUxRjlGXHUxRkExXHUxRkEzLVx1MUZBNVx1MUZBN1x1MUZBOVx1MUZBQi1cdTFGQURcdTFGQUYtXHUxRkIxXHUxRkI0XHUxRkI4LVx1MUZCOVx1MUZCQlx1MUZDNFx1MUZDOVx1MUZDQlx1MUZDRVx1MUZEMC1cdTFGRDFcdTFGRDNcdTFGRDgtXHUxRkQ5XHUxRkRCXHUxRkRFXHUxRkUwLVx1MUZFMVx1MUZFM1x1MUZFNVx1MUZFOC1cdTFGRTlcdTFGRUItXHUxRkVDXHUxRkVFXHUxRkY0XHUxRkY5XHUxRkZCXHUyMTJBLVx1MjEyQlx1RTA0RFx1RTA2NF07TkZEO0xvd2VyO0xhdGluLUludGVySW5kaWM7SW50ZXJJbmRpYy1CZW5nYWxpO05GQworTGF0aW4tR3VybXVraGk6YWxpYXM6WycuMC05QS1aYS16flx1MDBDMC1cdTAwQzVcdTAwQzctXHUwMENGXHUwMEQxLVx1MDBENlx1MDBEOS1cdTAwRERcdTAwRTAtXHUwMEU1XHUwMEU3LVx1MDBFRlx1MDBGMS1cdTAwRjZcdTAwRjktXHUwMEZEXHUwMEZGLVx1MDEwRlx1MDExMi1cdTAxMjVcdTAxMjgtXHUwMTMwXHUwMTM0LVx1MDEzN1x1MDEzOS1cdTAxM0VcdTAxNDMtXHUwMTQ4XHUwMTRDLVx1MDE1MVx1MDE1NC1cdTAxNjVcdTAxNjgtXHUwMTdFXHUwMUEwLVx1MDFBMVx1MDFBRi1cdTAxQjBcdTAxQ0QtXHUwMURDXHUwMURFLVx1MDFFM1x1MDFFNi1cdTAxRURcdTAxRjBcdTAxRjQtXHUwMUY1XHUwMUY4LVx1MDIxQlx1MDIxRS1cdTAyMUZcdTAyMjYtXHUwMjMzXHUwMzAxXHUwMzAzLVx1MDMwNFx1MDMwNi1cdTAzMDdcdTAzMTBcdTAzMTQtXHUwMzE1XHUwMzIzXHUwMzI1XHUwMzMxXHUwMzQxXHUwMzQ0XHUwMzg1LVx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwMzkwXHUwM0FDLVx1MDNCMFx1MDNDQy1cdTAzQ0VcdTAzRDNcdTA0MDNcdTA0MENcdTA0MEVcdTA0MTlcdTA0MzlcdTA0NTNcdTA0NUNcdTA0NUVcdTA0QzEtXHUwNEMyXHUwNEQwLVx1MDREMVx1MDRENi1cdTA0RDdcdTA0RTItXHUwNEUzXHUwNEVFLVx1MDRFRlx1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUxRjAxXHUxRjAzLVx1MUYwNVx1MUYwN1x1MUYwOVx1MUYwQi1cdTFGMERcdTFGMEZcdTFGMTFcdTFGMTMtXHUxRjE1XHUxRjE5XHUxRjFCLVx1MUYxRFx1MUYyMVx1MUYyMy1cdTFGMjVcdTFGMjdcdTFGMjlcdTFGMkItXHUxRjJEXHUxRjJGXHUxRjMxXHUxRjMzLVx1MUYzNVx1MUYzN1x1MUYzOVx1MUYzQi1cdTFGM0RcdTFGM0ZcdTFGNDFcdTFGNDMtXHUxRjQ1XHUxRjQ5XHUxRjRCLVx1MUY0RFx1MUY1MVx1MUY1My1cdTFGNTVcdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUZcdTFGNjFcdTFGNjMtXHUxRjY1XHUxRjY3XHUxRjY5XHUxRjZCLVx1MUY2RFx1MUY2Rlx1MUY3MVx1MUY3M1x1MUY3NVx1MUY3N1x1MUY3OVx1MUY3Qlx1MUY3RFx1MUY4MVx1MUY4My1cdTFGODVcdTFGODdcdTFGODlcdTFGOEItXHUxRjhEXHUxRjhGXHUxRjkxXHUxRjkzLVx1MUY5NVx1MUY5N1x1MUY5OVx1MUY5Qi1cdTFGOURcdTFGOUZcdTFGQTFcdTFGQTMtXHUxRkE1XHUxRkE3XHUxRkE5XHUxRkFCLVx1MUZBRFx1MUZBRi1cdTFGQjFcdTFGQjRcdTFGQjgtXHUxRkI5XHUxRkJCXHUxRkM0XHUxRkM5XHUxRkNCXHUxRkNFXHUxRkQwLVx1MUZEMVx1MUZEM1x1MUZEOC1cdTFGRDlcdTFGREJcdTFGREVcdTFGRTAtXHUxRkUxXHUxRkUzXHUxRkU1XHUxRkU4LVx1MUZFOVx1MUZFQi1cdTFGRUNcdTFGRUVcdTFGRjRcdTFGRjlcdTFGRkJcdTIxMkEtXHUyMTJCXHVFMDREXHVFMDY0XTtORkQ7TG93ZXI7TGF0aW4tSW50ZXJJbmRpYztJbnRlckluZGljLUd1cm11a2hpO05GQworTGF0aW4tR3VqYXJhdGk6YWxpYXM6WycuMC05QS1aYS16flx1MDBDMC1cdTAwQzVcdTAwQzctXHUwMENGXHUwMEQxLVx1MDBENlx1MDBEOS1cdTAwRERcdTAwRTAtXHUwMEU1XHUwMEU3LVx1MDBFRlx1MDBGMS1cdTAwRjZcdTAwRjktXHUwMEZEXHUwMEZGLVx1MDEwRlx1MDExMi1cdTAxMjVcdTAxMjgtXHUwMTMwXHUwMTM0LVx1MDEzN1x1MDEzOS1cdTAxM0VcdTAxNDMtXHUwMTQ4XHUwMTRDLVx1MDE1MVx1MDE1NC1cdTAxNjVcdTAxNjgtXHUwMTdFXHUwMUEwLVx1MDFBMVx1MDFBRi1cdTAxQjBcdTAxQ0QtXHUwMURDXHUwMURFLVx1MDFFM1x1MDFFNi1cdTAxRURcdTAxRjBcdTAxRjQtXHUwMUY1XHUwMUY4LVx1MDIxQlx1MDIxRS1cdTAyMUZcdTAyMjYtXHUwMjMzXHUwMzAxXHUwMzAzLVx1MDMwNFx1MDMwNi1cdTAzMDdcdTAzMTBcdTAzMTQtXHUwMzE1XHUwMzIzXHUwMzI1XHUwMzMxXHUwMzQxXHUwMzQ0XHUwMzg1LVx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwMzkwXHUwM0FDLVx1MDNCMFx1MDNDQy1cdTAzQ0VcdTAzRDNcdTA0MDNcdTA0MENcdTA0MEVcdTA0MTlcdTA0MzlcdTA0NTNcdTA0NUNcdTA0NUVcdTA0QzEtXHUwNEMyXHUwNEQwLVx1MDREMVx1MDRENi1cdTA0RDdcdTA0RTItXHUwNEUzXHUwNEVFLVx1MDRFRlx1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUxRjAxXHUxRjAzLVx1MUYwNVx1MUYwN1x1MUYwOVx1MUYwQi1cdTFGMERcdTFGMEZcdTFGMTFcdTFGMTMtXHUxRjE1XHUxRjE5XHUxRjFCLVx1MUYxRFx1MUYyMVx1MUYyMy1cdTFGMjVcdTFGMjdcdTFGMjlcdTFGMkItXHUxRjJEXHUxRjJGXHUxRjMxXHUxRjMzLVx1MUYzNVx1MUYzN1x1MUYzOVx1MUYzQi1cdTFGM0RcdTFGM0ZcdTFGNDFcdTFGNDMtXHUxRjQ1XHUxRjQ5XHUxRjRCLVx1MUY0RFx1MUY1MVx1MUY1My1cdTFGNTVcdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUZcdTFGNjFcdTFGNjMtXHUxRjY1XHUxRjY3XHUxRjY5XHUxRjZCLVx1MUY2RFx1MUY2Rlx1MUY3MVx1MUY3M1x1MUY3NVx1MUY3N1x1MUY3OVx1MUY3Qlx1MUY3RFx1MUY4MVx1MUY4My1cdTFGODVcdTFGODdcdTFGODlcdTFGOEItXHUxRjhEXHUxRjhGXHUxRjkxXHUxRjkzLVx1MUY5NVx1MUY5N1x1MUY5OVx1MUY5Qi1cdTFGOURcdTFGOUZcdTFGQTFcdTFGQTMtXHUxRkE1XHUxRkE3XHUxRkE5XHUxRkFCLVx1MUZBRFx1MUZBRi1cdTFGQjFcdTFGQjRcdTFGQjgtXHUxRkI5XHUxRkJCXHUxRkM0XHUxRkM5XHUxRkNCXHUxRkNFXHUxRkQwLVx1MUZEMVx1MUZEM1x1MUZEOC1cdTFGRDlcdTFGREJcdTFGREVcdTFGRTAtXHUxRkUxXHUxRkUzXHUxRkU1XHUxRkU4LVx1MUZFOVx1MUZFQi1cdTFGRUNcdTFGRUVcdTFGRjRcdTFGRjlcdTFGRkJcdTIxMkEtXHUyMTJCXHVFMDREXHVFMDY0XTtORkQ7TG93ZXI7TGF0aW4tSW50ZXJJbmRpYztJbnRlckluZGljLUd1amFyYXRpO05GQworTGF0aW4tT3JpeWE6YWxpYXM6WycuMC05QS1aYS16flx1MDBDMC1cdTAwQzVcdTAwQzctXHUwMENGXHUwMEQxLVx1MDBENlx1MDBEOS1cdTAwRERcdTAwRTAtXHUwMEU1XHUwMEU3LVx1MDBFRlx1MDBGMS1cdTAwRjZcdTAwRjktXHUwMEZEXHUwMEZGLVx1MDEwRlx1MDExMi1cdTAxMjVcdTAxMjgtXHUwMTMwXHUwMTM0LVx1MDEzN1x1MDEzOS1cdTAxM0VcdTAxNDMtXHUwMTQ4XHUwMTRDLVx1MDE1MVx1MDE1NC1cdTAxNjVcdTAxNjgtXHUwMTdFXHUwMUEwLVx1MDFBMVx1MDFBRi1cdTAxQjBcdTAxQ0QtXHUwMURDXHUwMURFLVx1MDFFM1x1MDFFNi1cdTAxRURcdTAxRjBcdTAxRjQtXHUwMUY1XHUwMUY4LVx1MDIxQlx1MDIxRS1cdTAyMUZcdTAyMjYtXHUwMjMzXHUwMzAxXHUwMzAzLVx1MDMwNFx1MDMwNi1cdTAzMDdcdTAzMTBcdTAzMTQtXHUwMzE1XHUwMzIzXHUwMzI1XHUwMzMxXHUwMzQxXHUwMzQ0XHUwMzg1LVx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwMzkwXHUwM0FDLVx1MDNCMFx1MDNDQy1cdTAzQ0VcdTAzRDNcdTA0MDNcdTA0MENcdTA0MEVcdTA0MTlcdTA0MzlcdTA0NTNcdTA0NUNcdTA0NUVcdTA0QzEtXHUwNEMyXHUwNEQwLVx1MDREMVx1MDRENi1cdTA0RDdcdTA0RTItXHUwNEUzXHUwNEVFLVx1MDRFRlx1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUxRjAxXHUxRjAzLVx1MUYwNVx1MUYwN1x1MUYwOVx1MUYwQi1cdTFGMERcdTFGMEZcdTFGMTFcdTFGMTMtXHUxRjE1XHUxRjE5XHUxRjFCLVx1MUYxRFx1MUYyMVx1MUYyMy1cdTFGMjVcdTFGMjdcdTFGMjlcdTFGMkItXHUxRjJEXHUxRjJGXHUxRjMxXHUxRjMzLVx1MUYzNVx1MUYzN1x1MUYzOVx1MUYzQi1cdTFGM0RcdTFGM0ZcdTFGNDFcdTFGNDMtXHUxRjQ1XHUxRjQ5XHUxRjRCLVx1MUY0RFx1MUY1MVx1MUY1My1cdTFGNTVcdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUZcdTFGNjFcdTFGNjMtXHUxRjY1XHUxRjY3XHUxRjY5XHUxRjZCLVx1MUY2RFx1MUY2Rlx1MUY3MVx1MUY3M1x1MUY3NVx1MUY3N1x1MUY3OVx1MUY3Qlx1MUY3RFx1MUY4MVx1MUY4My1cdTFGODVcdTFGODdcdTFGODlcdTFGOEItXHUxRjhEXHUxRjhGXHUxRjkxXHUxRjkzLVx1MUY5NVx1MUY5N1x1MUY5OVx1MUY5Qi1cdTFGOURcdTFGOUZcdTFGQTFcdTFGQTMtXHUxRkE1XHUxRkE3XHUxRkE5XHUxRkFCLVx1MUZBRFx1MUZBRi1cdTFGQjFcdTFGQjRcdTFGQjgtXHUxRkI5XHUxRkJCXHUxRkM0XHUxRkM5XHUxRkNCXHUxRkNFXHUxRkQwLVx1MUZEMVx1MUZEM1x1MUZEOC1cdTFGRDlcdTFGREJcdTFGREVcdTFGRTAtXHUxRkUxXHUxRkUzXHUxRkU1XHUxRkU4LVx1MUZFOVx1MUZFQi1cdTFGRUNcdTFGRUVcdTFGRjRcdTFGRjlcdTFGRkJcdTIxMkEtXHUyMTJCXHVFMDREXHVFMDY0XTtORkQ7TG93ZXI7TGF0aW4tSW50ZXJJbmRpYztJbnRlckluZGljLU9yaXlhO05GQworTGF0aW4tVGFtaWw6YWxpYXM6WycuMC05QS1aYS16flx1MDBDMC1cdTAwQzVcdTAwQzctXHUwMENGXHUwMEQxLVx1MDBENlx1MDBEOS1cdTAwRERcdTAwRTAtXHUwMEU1XHUwMEU3LVx1MDBFRlx1MDBGMS1cdTAwRjZcdTAwRjktXHUwMEZEXHUwMEZGLVx1MDEwRlx1MDExMi1cdTAxMjVcdTAxMjgtXHUwMTMwXHUwMTM0LVx1MDEzN1x1MDEzOS1cdTAxM0VcdTAxNDMtXHUwMTQ4XHUwMTRDLVx1MDE1MVx1MDE1NC1cdTAxNjVcdTAxNjgtXHUwMTdFXHUwMUEwLVx1MDFBMVx1MDFBRi1cdTAxQjBcdTAxQ0QtXHUwMURDXHUwMURFLVx1MDFFM1x1MDFFNi1cdTAxRURcdTAxRjBcdTAxRjQtXHUwMUY1XHUwMUY4LVx1MDIxQlx1MDIxRS1cdTAyMUZcdTAyMjYtXHUwMjMzXHUwMzAxXHUwMzAzLVx1MDMwNFx1MDMwNi1cdTAzMDdcdTAzMTBcdTAzMTQtXHUwMzE1XHUwMzIzXHUwMzI1XHUwMzMxXHUwMzQxXHUwMzQ0XHUwMzg1LVx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwMzkwXHUwM0FDLVx1MDNCMFx1MDNDQy1cdTAzQ0VcdTAzRDNcdTA0MDNcdTA0MENcdTA0MEVcdTA0MTlcdTA0MzlcdTA0NTNcdTA0NUNcdTA0NUVcdTA0QzEtXHUwNEMyXHUwNEQwLVx1MDREMVx1MDRENi1cdTA0RDdcdTA0RTItXHUwNEUzXHUwNEVFLVx1MDRFRlx1MUUwMC1cdTFFOTlcdTFFQTAtXHUxRUY5XHUxRjAxXHUxRjAzLVx1MUYwNVx1MUYwN1x1MUYwOVx1MUYwQi1cdTFGMERcdTFGMEZcdTFGMTFcdTFGMTMtXHUxRjE1XHUxRjE5XHUxRjFCLVx1MUYxRFx1MUYyMVx1MUYyMy1cdTFGMjVcdTFGMjdcdTFGMjlcdTFGMkItXHUxRjJEXHUxRjJGXHUxRjMxXHUxRjMzLVx1MUYzNVx1MUYzN1x1MUYzOVx1MUYzQi1cdTFGM0RcdTFGM0ZcdTFGNDFcdTFGNDMtXHUxRjQ1XHUxRjQ5XHUxRjRCLVx1MUY0RFx1MUY1MVx1MUY1My1cdTFGNTVcdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUZcdTFGNjFcdTFGNjMtXHUxRjY1XHUxRjY3XHUxRjY5XHUxRjZCLVx1MUY2RFx1MUY2Rlx1MUY3MVx1MUY3M1x1MUY3NVx1MUY3N1x1MUY3OVx1MUY3Qlx1MUY3RFx1MUY4MVx1MUY4My1cdTFGODVcdTFGODdcdTFGODlcdTFGOEItXHUxRjhEXHUxRjhGXHUxRjkxXHUxRjkzLVx1MUY5NVx1MUY5N1x1MUY5OVx1MUY5Qi1cdTFGOURcdTFGOUZcdTFGQTFcdTFGQTMtXHUxRkE1XHUxRkE3XHUxRkE5XHUxRkFCLVx1MUZBRFx1MUZBRi1cdTFGQjFcdTFGQjRcdTFGQjgtXHUxRkI5XHUxRkJCXHUxRkM0XHUxRkM5XHUxRkNCXHUxRkNFXHUxRkQwLVx1MUZEMVx1MUZEM1x1MUZEOC1cdTFGRDlcdTFGREJcdTFGREVcdTFGRTAtXHUxRkUxXHUxRkUzXHUxRkU1XHUxRkU4LVx1MUZFOVx1MUZFQi1cdTFGRUNcdTFGRUVcdTFGRjRcdTFGRjlcdTFGRkJcdTIxMkEtXHUyMTJCXHVFMDREXHVFMDY0XTtORkQ7TG93ZXI7TGF0aW4tSW50ZXJJbmRpYztJbnRlckluZGljLVRhbWlsO05GQworTGF0aW4tVGVsdWd1OmFsaWFzOlsnLjAtOUEtWmEten5cdTAwQzAtXHUwMEM1XHUwMEM3LVx1MDBDRlx1MDBEMS1cdTAwRDZcdTAwRDktXHUwMEREXHUwMEUwLVx1MDBFNVx1MDBFNy1cdTAwRUZcdTAwRjEtXHUwMEY2XHUwMEY5LVx1MDBGRFx1MDBGRi1cdTAxMEZcdTAxMTItXHUwMTI1XHUwMTI4LVx1MDEzMFx1MDEzNC1cdTAxMzdcdTAxMzktXHUwMTNFXHUwMTQzLVx1MDE0OFx1MDE0Qy1cdTAxNTFcdTAxNTQtXHUwMTY1XHUwMTY4LVx1MDE3RVx1MDFBMC1cdTAxQTFcdTAxQUYtXHUwMUIwXHUwMUNELVx1MDFEQ1x1MDFERS1cdTAxRTNcdTAxRTYtXHUwMUVEXHUwMUYwXHUwMUY0LVx1MDFGNVx1MDFGOC1cdTAyMUJcdTAyMUUtXHUwMjFGXHUwMjI2LVx1MDIzM1x1MDMwMVx1MDMwMy1cdTAzMDRcdTAzMDYtXHUwMzA3XHUwMzEwXHUwMzE0LVx1MDMxNVx1MDMyM1x1MDMyNVx1MDMzMVx1MDM0MVx1MDM0NFx1MDM4NS1cdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDM5MFx1MDNBQy1cdTAzQjBcdTAzQ0MtXHUwM0NFXHUwM0QzXHUwNDAzXHUwNDBDXHUwNDBFXHUwNDE5XHUwNDM5XHUwNDUzXHUwNDVDXHUwNDVFXHUwNEMxLVx1MDRDMlx1MDREMC1cdTA0RDFcdTA0RDYtXHUwNEQ3XHUwNEUyLVx1MDRFM1x1MDRFRS1cdTA0RUZcdTFFMDAtXHUxRTk5XHUxRUEwLVx1MUVGOVx1MUYwMVx1MUYwMy1cdTFGMDVcdTFGMDdcdTFGMDlcdTFGMEItXHUxRjBEXHUxRjBGXHUxRjExXHUxRjEzLVx1MUYxNVx1MUYxOVx1MUYxQi1cdTFGMURcdTFGMjFcdTFGMjMtXHUxRjI1XHUxRjI3XHUxRjI5XHUxRjJCLVx1MUYyRFx1MUYyRlx1MUYzMVx1MUYzMy1cdTFGMzVcdTFGMzdcdTFGMzlcdTFGM0ItXHUxRjNEXHUxRjNGXHUxRjQxXHUxRjQzLVx1MUY0NVx1MUY0OVx1MUY0Qi1cdTFGNERcdTFGNTFcdTFGNTMtXHUxRjU1XHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGXHUxRjYxXHUxRjYzLVx1MUY2NVx1MUY2N1x1MUY2OVx1MUY2Qi1cdTFGNkRcdTFGNkZcdTFGNzFcdTFGNzNcdTFGNzVcdTFGNzdcdTFGNzlcdTFGN0JcdTFGN0RcdTFGODFcdTFGODMtXHUxRjg1XHUxRjg3XHUxRjg5XHUxRjhCLVx1MUY4RFx1MUY4Rlx1MUY5MVx1MUY5My1cdTFGOTVcdTFGOTdcdTFGOTlcdTFGOUItXHUxRjlEXHUxRjlGXHUxRkExXHUxRkEzLVx1MUZBNVx1MUZBN1x1MUZBOVx1MUZBQi1cdTFGQURcdTFGQUYtXHUxRkIxXHUxRkI0XHUxRkI4LVx1MUZCOVx1MUZCQlx1MUZDNFx1MUZDOVx1MUZDQlx1MUZDRVx1MUZEMC1cdTFGRDFcdTFGRDNcdTFGRDgtXHUxRkQ5XHUxRkRCXHUxRkRFXHUxRkUwLVx1MUZFMVx1MUZFM1x1MUZFNVx1MUZFOC1cdTFGRTlcdTFGRUItXHUxRkVDXHUxRkVFXHUxRkY0XHUxRkY5XHUxRkZCXHUyMTJBLVx1MjEyQlx1RTA0RFx1RTA2NF07TkZEO0xvd2VyO0xhdGluLUludGVySW5kaWM7SW50ZXJJbmRpYy1UZWx1Z3U7TkZDCitMYXRpbi1LYW5uYWRhOmFsaWFzOlsnLjAtOUEtWmEten5cdTAwQzAtXHUwMEM1XHUwMEM3LVx1MDBDRlx1MDBEMS1cdTAwRDZcdTAwRDktXHUwMEREXHUwMEUwLVx1MDBFNVx1MDBFNy1cdTAwRUZcdTAwRjEtXHUwMEY2XHUwMEY5LVx1MDBGRFx1MDBGRi1cdTAxMEZcdTAxMTItXHUwMTI1XHUwMTI4LVx1MDEzMFx1MDEzNC1cdTAxMzdcdTAxMzktXHUwMTNFXHUwMTQzLVx1MDE0OFx1MDE0Qy1cdTAxNTFcdTAxNTQtXHUwMTY1XHUwMTY4LVx1MDE3RVx1MDFBMC1cdTAxQTFcdTAxQUYtXHUwMUIwXHUwMUNELVx1MDFEQ1x1MDFERS1cdTAxRTNcdTAxRTYtXHUwMUVEXHUwMUYwXHUwMUY0LVx1MDFGNVx1MDFGOC1cdTAyMUJcdTAyMUUtXHUwMjFGXHUwMjI2LVx1MDIzM1x1MDMwMVx1MDMwMy1cdTAzMDRcdTAzMDYtXHUwMzA3XHUwMzEwXHUwMzE0LVx1MDMxNVx1MDMyM1x1MDMyNVx1MDMzMVx1MDM0MVx1MDM0NFx1MDM4NS1cdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDM5MFx1MDNBQy1cdTAzQjBcdTAzQ0MtXHUwM0NFXHUwM0QzXHUwNDAzXHUwNDBDXHUwNDBFXHUwNDE5XHUwNDM5XHUwNDUzXHUwNDVDXHUwNDVFXHUwNEMxLVx1MDRDMlx1MDREMC1cdTA0RDFcdTA0RDYtXHUwNEQ3XHUwNEUyLVx1MDRFM1x1MDRFRS1cdTA0RUZcdTFFMDAtXHUxRTk5XHUxRUEwLVx1MUVGOVx1MUYwMVx1MUYwMy1cdTFGMDVcdTFGMDdcdTFGMDlcdTFGMEItXHUxRjBEXHUxRjBGXHUxRjExXHUxRjEzLVx1MUYxNVx1MUYxOVx1MUYxQi1cdTFGMURcdTFGMjFcdTFGMjMtXHUxRjI1XHUxRjI3XHUxRjI5XHUxRjJCLVx1MUYyRFx1MUYyRlx1MUYzMVx1MUYzMy1cdTFGMzVcdTFGMzdcdTFGMzlcdTFGM0ItXHUxRjNEXHUxRjNGXHUxRjQxXHUxRjQzLVx1MUY0NVx1MUY0OVx1MUY0Qi1cdTFGNERcdTFGNTFcdTFGNTMtXHUxRjU1XHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGXHUxRjYxXHUxRjYzLVx1MUY2NVx1MUY2N1x1MUY2OVx1MUY2Qi1cdTFGNkRcdTFGNkZcdTFGNzFcdTFGNzNcdTFGNzVcdTFGNzdcdTFGNzlcdTFGN0JcdTFGN0RcdTFGODFcdTFGODMtXHUxRjg1XHUxRjg3XHUxRjg5XHUxRjhCLVx1MUY4RFx1MUY4Rlx1MUY5MVx1MUY5My1cdTFGOTVcdTFGOTdcdTFGOTlcdTFGOUItXHUxRjlEXHUxRjlGXHUxRkExXHUxRkEzLVx1MUZBNVx1MUZBN1x1MUZBOVx1MUZBQi1cdTFGQURcdTFGQUYtXHUxRkIxXHUxRkI0XHUxRkI4LVx1MUZCOVx1MUZCQlx1MUZDNFx1MUZDOVx1MUZDQlx1MUZDRVx1MUZEMC1cdTFGRDFcdTFGRDNcdTFGRDgtXHUxRkQ5XHUxRkRCXHUxRkRFXHUxRkUwLVx1MUZFMVx1MUZFM1x1MUZFNVx1MUZFOC1cdTFGRTlcdTFGRUItXHUxRkVDXHUxRkVFXHUxRkY0XHUxRkY5XHUxRkZCXHUyMTJBLVx1MjEyQlx1RTA0RFx1RTA2NF07TkZEO0xvd2VyO0xhdGluLUludGVySW5kaWM7SW50ZXJJbmRpYy1LYW5uYWRhO05GQworTGF0aW4tTWFsYXlhbGFtOmFsaWFzOlsnLjAtOUEtWmEten5cdTAwQzAtXHUwMEM1XHUwMEM3LVx1MDBDRlx1MDBEMS1cdTAwRDZcdTAwRDktXHUwMEREXHUwMEUwLVx1MDBFNVx1MDBFNy1cdTAwRUZcdTAwRjEtXHUwMEY2XHUwMEY5LVx1MDBGRFx1MDBGRi1cdTAxMEZcdTAxMTItXHUwMTI1XHUwMTI4LVx1MDEzMFx1MDEzNC1cdTAxMzdcdTAxMzktXHUwMTNFXHUwMTQzLVx1MDE0OFx1MDE0Qy1cdTAxNTFcdTAxNTQtXHUwMTY1XHUwMTY4LVx1MDE3RVx1MDFBMC1cdTAxQTFcdTAxQUYtXHUwMUIwXHUwMUNELVx1MDFEQ1x1MDFERS1cdTAxRTNcdTAxRTYtXHUwMUVEXHUwMUYwXHUwMUY0LVx1MDFGNVx1MDFGOC1cdTAyMUJcdTAyMUUtXHUwMjFGXHUwMjI2LVx1MDIzM1x1MDMwMVx1MDMwMy1cdTAzMDRcdTAzMDYtXHUwMzA3XHUwMzEwXHUwMzE0LVx1MDMxNVx1MDMyM1x1MDMyNVx1MDMzMVx1MDM0MVx1MDM0NFx1MDM4NS1cdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDM5MFx1MDNBQy1cdTAzQjBcdTAzQ0MtXHUwM0NFXHUwM0QzXHUwNDAzXHUwNDBDXHUwNDBFXHUwNDE5XHUwNDM5XHUwNDUzXHUwNDVDXHUwNDVFXHUwNEMxLVx1MDRDMlx1MDREMC1cdTA0RDFcdTA0RDYtXHUwNEQ3XHUwNEUyLVx1MDRFM1x1MDRFRS1cdTA0RUZcdTFFMDAtXHUxRTk5XHUxRUEwLVx1MUVGOVx1MUYwMVx1MUYwMy1cdTFGMDVcdTFGMDdcdTFGMDlcdTFGMEItXHUxRjBEXHUxRjBGXHUxRjExXHUxRjEzLVx1MUYxNVx1MUYxOVx1MUYxQi1cdTFGMURcdTFGMjFcdTFGMjMtXHUxRjI1XHUxRjI3XHUxRjI5XHUxRjJCLVx1MUYyRFx1MUYyRlx1MUYzMVx1MUYzMy1cdTFGMzVcdTFGMzdcdTFGMzlcdTFGM0ItXHUxRjNEXHUxRjNGXHUxRjQxXHUxRjQzLVx1MUY0NVx1MUY0OVx1MUY0Qi1cdTFGNERcdTFGNTFcdTFGNTMtXHUxRjU1XHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGXHUxRjYxXHUxRjYzLVx1MUY2NVx1MUY2N1x1MUY2OVx1MUY2Qi1cdTFGNkRcdTFGNkZcdTFGNzFcdTFGNzNcdTFGNzVcdTFGNzdcdTFGNzlcdTFGN0JcdTFGN0RcdTFGODFcdTFGODMtXHUxRjg1XHUxRjg3XHUxRjg5XHUxRjhCLVx1MUY4RFx1MUY4Rlx1MUY5MVx1MUY5My1cdTFGOTVcdTFGOTdcdTFGOTlcdTFGOUItXHUxRjlEXHUxRjlGXHUxRkExXHUxRkEzLVx1MUZBNVx1MUZBN1x1MUZBOVx1MUZBQi1cdTFGQURcdTFGQUYtXHUxRkIxXHUxRkI0XHUxRkI4LVx1MUZCOVx1MUZCQlx1MUZDNFx1MUZDOVx1MUZDQlx1MUZDRVx1MUZEMC1cdTFGRDFcdTFGRDNcdTFGRDgtXHUxRkQ5XHUxRkRCXHUxRkRFXHUxRkUwLVx1MUZFMVx1MUZFM1x1MUZFNVx1MUZFOC1cdTFGRTlcdTFGRUItXHUxRkVDXHUxRkVFXHUxRkY0XHUxRkY5XHUxRkZCXHUyMTJBLVx1MjEyQlx1RTA0RFx1RTA2NF07TkZEO0xvd2VyO0xhdGluLUludGVySW5kaWM7SW50ZXJJbmRpYy1NYWxheWFsYW07TkZDCisgICAKKyNJbmRpYy1MYXRpbiB0cmFuc2xpdGVyYXRvcnMKK0RldmFuYWdhcmktTGF0aW46YWxpYXM6W1x1MDkwMS1cdTA5MDNcdTA5MDUtXHUwOTM5XHUwOTNDLVx1MDk0RFx1MDk1MC1cdTA5NTRcdTA5NTgtXHUwOTZGXTtORkQ7RGV2YW5hZ2FyaS1JbnRlckluZGljO0ludGVySW5kaWMtTGF0aW47TkZDCitCZW5nYWxpLUxhdGluOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEYtXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDXHUwOUJFLVx1MDlDNFx1MDlDNy1cdTA5QzhcdTA5Q0ItXHUwOUNEXHUwOUQ3XHUwOURDLVx1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUZBXTtORkQ7QmVuZ2FsaS1JbnRlckluZGljO0ludGVySW5kaWMtTGF0aW47TkZDCitHdXJtdWtoaS1MYXRpbjphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEEwMlx1MEEwNS1cdTBBMEFcdTBBMEYtXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzItXHUwQTMzXHUwQTM1LVx1MEEzNlx1MEEzOC1cdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3LVx1MEE0OFx1MEE0Qi1cdTBBNERcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NF07TkZEO0d1cm11a2hpLUludGVySW5kaWM7SW50ZXJJbmRpYy1MYXRpbjtORkMKK0d1amFyYXRpLUxhdGluOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOEJcdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjItXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCQy1cdTBBQzVcdTBBQzctXHUwQUM5XHUwQUNCLVx1MEFDRFx1MEFEMFx1MEFFMFx1MEFFNi1cdTBBRUZdO05GRDtHdWphcmF0aS1JbnRlckluZGljO0ludGVySW5kaWMtTGF0aW47TkZDCitPcml5YS1MYXRpbjphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGLVx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyLVx1MEIzM1x1MEIzNi1cdTBCMzlcdTBCM0MtXHUwQjQzXHUwQjQ3LVx1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTYtXHUwQjU3XHUwQjVDLVx1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNjYtXHUwQjcwXTtORkQ7T3JpeWEtSW50ZXJJbmRpYztJbnRlckluZGljLUxhdGluO05GQworVGFtaWwtTGF0aW46YWxpYXM6WzBcdTBCODItXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5LVx1MEI5QVx1MEI5Q1x1MEI5RS1cdTBCOUZcdTBCQTMtXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjVcdTBCQjctXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQ3XHUwQkU3LVx1MEJGMl07TkZEO1RhbWlsLUludGVySW5kaWM7SW50ZXJJbmRpYy1MYXRpbjtORkMKK1RlbHVndS1MYXRpbjphbGlhczpbXHUwQzAxLVx1MEMwM1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNFLVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1LVx1MEM1Nlx1MEM2MC1cdTBDNjFcdTBDNjYtXHUwQzZGXTtORkQ7VGVsdWd1LUludGVySW5kaWM7SW50ZXJJbmRpYy1MYXRpbjtORkMKK0thbm5hZGEtTGF0aW46YWxpYXM6W1x1MEM4Mi1cdTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCRS1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENS1cdTBDRDZcdTBDREVcdTBDRTAtXHUwQ0UxXHUwQ0U2LVx1MENFRl07TkZEO0thbm5hZGEtSW50ZXJJbmRpYztJbnRlckluZGljLUxhdGluO05GQworTWFsYXlhbGFtLUxhdGluOmFsaWFzOltcdTBEMDItXHUwRDAzXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDI4XHUwRDJBLVx1MEQzOVx1MEQzRS1cdTBENDNcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RFx1MEQ1N1x1MEQ2MC1cdTBENjFcdTBENjYtXHUwRDZGXTtORkQ7TWFsYXlhbGFtLUludGVySW5kaWM7SW50ZXJJbmRpYy1MYXRpbjtORkMKKworRGV2YW5hZ2FyaS1CZW5nYWxpOmFsaWFzOltcdTA5MDEtXHUwOTAzXHUwOTA1LVx1MDkzOVx1MDkzQy1cdTA5NERcdTA5NTAtXHUwOTU0XHUwOTU4LVx1MDk2Rl07TkZEO0RldmFuYWdhcmktSW50ZXJJbmRpYztJbnRlckluZGljLUJlbmdhbGk7TkZDCitEZXZhbmFnYXJpLUd1cm11a2hpOmFsaWFzOltcdTA5MDEtXHUwOTAzXHUwOTA1LVx1MDkzOVx1MDkzQy1cdTA5NERcdTA5NTAtXHUwOTU0XHUwOTU4LVx1MDk2Rl07TkZEO0RldmFuYWdhcmktSW50ZXJJbmRpYztJbnRlckluZGljLUd1cm11a2hpO05GQworRGV2YW5hZ2FyaS1HdWphcmF0aTphbGlhczpbXHUwOTAxLVx1MDkwM1x1MDkwNS1cdTA5MzlcdTA5M0MtXHUwOTREXHUwOTUwLVx1MDk1NFx1MDk1OC1cdTA5NkZdO05GRDtEZXZhbmFnYXJpLUludGVySW5kaWM7SW50ZXJJbmRpYy1HdWphcmF0aTtORkMKK0RldmFuYWdhcmktT3JpeWE6YWxpYXM6W1x1MDkwMS1cdTA5MDNcdTA5MDUtXHUwOTM5XHUwOTNDLVx1MDk0RFx1MDk1MC1cdTA5NTRcdTA5NTgtXHUwOTZGXTtORkQ7RGV2YW5hZ2FyaS1JbnRlckluZGljO0ludGVySW5kaWMtT3JpeWE7TkZDCitEZXZhbmFnYXJpLVRhbWlsOmFsaWFzOltcdTA5MDEtXHUwOTAzXHUwOTA1LVx1MDkzOVx1MDkzQy1cdTA5NERcdTA5NTAtXHUwOTU0XHUwOTU4LVx1MDk2Rl07TkZEO0RldmFuYWdhcmktSW50ZXJJbmRpYztJbnRlckluZGljLVRhbWlsO05GQworRGV2YW5hZ2FyaS1UZWx1Z3U6YWxpYXM6W1x1MDkwMS1cdTA5MDNcdTA5MDUtXHUwOTM5XHUwOTNDLVx1MDk0RFx1MDk1MC1cdTA5NTRcdTA5NTgtXHUwOTZGXTtORkQ7RGV2YW5hZ2FyaS1JbnRlckluZGljO0ludGVySW5kaWMtVGVsdWd1O05GQworRGV2YW5hZ2FyaS1LYW5uYWRhOmFsaWFzOltcdTA5MDEtXHUwOTAzXHUwOTA1LVx1MDkzOVx1MDkzQy1cdTA5NERcdTA5NTAtXHUwOTU0XHUwOTU4LVx1MDk2Rl07TkZEO0RldmFuYWdhcmktSW50ZXJJbmRpYztJbnRlckluZGljLUthbm5hZGE7TkZDCitEZXZhbmFnYXJpLU1hbGF5YWxhbTphbGlhczpbXHUwOTAxLVx1MDkwM1x1MDkwNS1cdTA5MzlcdTA5M0MtXHUwOTREXHUwOTUwLVx1MDk1NFx1MDk1OC1cdTA5NkZdO05GRDtEZXZhbmFnYXJpLUludGVySW5kaWM7SW50ZXJJbmRpYy1NYWxheWFsYW07TkZDCisKK0JlbmdhbGktRGV2YW5hZ2FyaTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGLVx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCQ1x1MDlCRS1cdTA5QzRcdTA5QzctXHUwOUM4XHUwOUNCLVx1MDlDRFx1MDlEN1x1MDlEQy1cdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGQV07TkZEO0JlbmdhbGktSW50ZXJJbmRpYztJbnRlckluZGljLURldmFuYWdhcmk7TkZDCitCZW5nYWxpLUd1cm11a2hpOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEYtXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDXHUwOUJFLVx1MDlDNFx1MDlDNy1cdTA5QzhcdTA5Q0ItXHUwOUNEXHUwOUQ3XHUwOURDLVx1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUZBXTtORkQ7QmVuZ2FsaS1JbnRlckluZGljO0ludGVySW5kaWMtR3VybXVraGk7TkZDCitCZW5nYWxpLUd1amFyYXRpOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEYtXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDXHUwOUJFLVx1MDlDNFx1MDlDNy1cdTA5QzhcdTA5Q0ItXHUwOUNEXHUwOUQ3XHUwOURDLVx1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUZBXTtORkQ7QmVuZ2FsaS1JbnRlckluZGljO0ludGVySW5kaWMtR3VqYXJhdGk7TkZDCitCZW5nYWxpLU9yaXlhOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEYtXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDXHUwOUJFLVx1MDlDNFx1MDlDNy1cdTA5QzhcdTA5Q0ItXHUwOUNEXHUwOUQ3XHUwOURDLVx1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUZBXTtORkQ7QmVuZ2FsaS1JbnRlckluZGljO0ludGVySW5kaWMtT3JpeWE7TkZDCitCZW5nYWxpLVRhbWlsOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEYtXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDXHUwOUJFLVx1MDlDNFx1MDlDNy1cdTA5QzhcdTA5Q0ItXHUwOUNEXHUwOUQ3XHUwOURDLVx1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUZBXTtORkQ7QmVuZ2FsaS1JbnRlckluZGljO0ludGVySW5kaWMtVGFtaWw7TkZDCitCZW5nYWxpLVRlbHVndTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGLVx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCQ1x1MDlCRS1cdTA5QzRcdTA5QzctXHUwOUM4XHUwOUNCLVx1MDlDRFx1MDlEN1x1MDlEQy1cdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGQV07TkZEO0JlbmdhbGktSW50ZXJJbmRpYztJbnRlckluZGljLVRlbHVndTtORkMKK0JlbmdhbGktS2FubmFkYTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGLVx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCQ1x1MDlCRS1cdTA5QzRcdTA5QzctXHUwOUM4XHUwOUNCLVx1MDlDRFx1MDlEN1x1MDlEQy1cdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGQV07TkZEO0JlbmdhbGktSW50ZXJJbmRpYztJbnRlckluZGljLUthbm5hZGE7TkZDCitCZW5nYWxpLU1hbGF5YWxhbTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGLVx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCQ1x1MDlCRS1cdTA5QzRcdTA5QzctXHUwOUM4XHUwOUNCLVx1MDlDRFx1MDlEN1x1MDlEQy1cdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGQV07TkZEO0JlbmdhbGktSW50ZXJJbmRpYztJbnRlckluZGljLU1hbGF5YWxhbTtORkMKKworR3VybXVraGktRGV2YW5hZ2FyaTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEEwMlx1MEEwNS1cdTBBMEFcdTBBMEYtXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzItXHUwQTMzXHUwQTM1LVx1MEEzNlx1MEEzOC1cdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3LVx1MEE0OFx1MEE0Qi1cdTBBNERcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NF07TkZEO0d1cm11a2hpLUludGVySW5kaWM7SW50ZXJJbmRpYy1EZXZhbmFnYXJpO05GQworR3VybXVraGktQmVuZ2FsaTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEEwMlx1MEEwNS1cdTBBMEFcdTBBMEYtXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzItXHUwQTMzXHUwQTM1LVx1MEEzNlx1MEEzOC1cdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3LVx1MEE0OFx1MEE0Qi1cdTBBNERcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NF07TkZEO0d1cm11a2hpLUludGVySW5kaWM7SW50ZXJJbmRpYy1CZW5nYWxpO05GQworR3VybXVraGktR3VqYXJhdGk6YWxpYXM6W1x1MDk2NC1cdTA5NjVcdTBBMDJcdTBBMDUtXHUwQTBBXHUwQTBGLVx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyLVx1MEEzM1x1MEEzNS1cdTBBMzZcdTBBMzgtXHUwQTM5XHUwQTNDXHUwQTNFLVx1MEE0Mlx1MEE0Ny1cdTBBNDhcdTBBNEItXHUwQTREXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1cdTBBNzRdO05GRDtHdXJtdWtoaS1JbnRlckluZGljO0ludGVySW5kaWMtR3VqYXJhdGk7TkZDCitHdXJtdWtoaS1Pcml5YTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEEwMlx1MEEwNS1cdTBBMEFcdTBBMEYtXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzItXHUwQTMzXHUwQTM1LVx1MEEzNlx1MEEzOC1cdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3LVx1MEE0OFx1MEE0Qi1cdTBBNERcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NF07TkZEO0d1cm11a2hpLUludGVySW5kaWM7SW50ZXJJbmRpYy1Pcml5YTtORkMKK0d1cm11a2hpLVRhbWlsOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwQTAyXHUwQTA1LVx1MEEwQVx1MEEwRi1cdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMi1cdTBBMzNcdTBBMzUtXHUwQTM2XHUwQTM4LVx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJcdTBBNDctXHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc0XTtORkQ7R3VybXVraGktSW50ZXJJbmRpYztJbnRlckluZGljLVRhbWlsO05GQworR3VybXVraGktVGVsdWd1OmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwQTAyXHUwQTA1LVx1MEEwQVx1MEEwRi1cdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMi1cdTBBMzNcdTBBMzUtXHUwQTM2XHUwQTM4LVx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJcdTBBNDctXHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc0XTtORkQ7R3VybXVraGktSW50ZXJJbmRpYztJbnRlckluZGljLVRlbHVndTtORkMKK0d1cm11a2hpLUthbm5hZGE6YWxpYXM6W1x1MDk2NC1cdTA5NjVcdTBBMDJcdTBBMDUtXHUwQTBBXHUwQTBGLVx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyLVx1MEEzM1x1MEEzNS1cdTBBMzZcdTBBMzgtXHUwQTM5XHUwQTNDXHUwQTNFLVx1MEE0Mlx1MEE0Ny1cdTBBNDhcdTBBNEItXHUwQTREXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1cdTBBNzRdO05GRDtHdXJtdWtoaS1JbnRlckluZGljO0ludGVySW5kaWMtS2FubmFkYTtORkMKK0d1cm11a2hpLU1hbGF5YWxhbTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEEwMlx1MEEwNS1cdTBBMEFcdTBBMEYtXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzItXHUwQTMzXHUwQTM1LVx1MEEzNlx1MEEzOC1cdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3LVx1MEE0OFx1MEE0Qi1cdTBBNERcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NF07TkZEO0d1cm11a2hpLUludGVySW5kaWM7SW50ZXJJbmRpYy1NYWxheWFsYW07TkZDCisKK0d1amFyYXRpLURldmFuYWdhcmk6YWxpYXM6W1x1MDk2NC1cdTA5NjVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4Qlx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMi1cdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwXHUwQUU2LVx1MEFFRl07TkZEO0d1amFyYXRpLUludGVySW5kaWM7SW50ZXJJbmRpYy1EZXZhbmFnYXJpO05GQworR3VqYXJhdGktQmVuZ2FsaTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEE4MS1cdTBBODNcdTBBODUtXHUwQThCXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyLVx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTBcdTBBRTYtXHUwQUVGXTtORkQ7R3VqYXJhdGktSW50ZXJJbmRpYztJbnRlckluZGljLUJlbmdhbGk7TkZDCitHdWphcmF0aS1HdXJtdWtoaTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEE4MS1cdTBBODNcdTBBODUtXHUwQThCXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyLVx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTBcdTBBRTYtXHUwQUVGXTtORkQ7R3VqYXJhdGktSW50ZXJJbmRpYztJbnRlckluZGljLUd1cm11a2hpO05GQworR3VqYXJhdGktT3JpeWE6YWxpYXM6W1x1MDk2NC1cdTA5NjVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4Qlx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMi1cdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwXHUwQUU2LVx1MEFFRl07TkZEO0d1amFyYXRpLUludGVySW5kaWM7SW50ZXJJbmRpYy1Pcml5YTtORkMKK0d1amFyYXRpLVRhbWlsOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOEJcdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjItXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCQy1cdTBBQzVcdTBBQzctXHUwQUM5XHUwQUNCLVx1MEFDRFx1MEFEMFx1MEFFMFx1MEFFNi1cdTBBRUZdO05GRDtHdWphcmF0aS1JbnRlckluZGljO0ludGVySW5kaWMtVGFtaWw7TkZDCitHdWphcmF0aS1UZWx1Z3U6YWxpYXM6W1x1MDk2NC1cdTA5NjVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4Qlx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMi1cdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwXHUwQUU2LVx1MEFFRl07TkZEO0d1amFyYXRpLUludGVySW5kaWM7SW50ZXJJbmRpYy1UZWx1Z3U7TkZDCitHdWphcmF0aS1LYW5uYWRhOmFsaWFzOltcdTA5NjQtXHUwOTY1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOEJcdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjItXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCQy1cdTBBQzVcdTBBQzctXHUwQUM5XHUwQUNCLVx1MEFDRFx1MEFEMFx1MEFFMFx1MEFFNi1cdTBBRUZdO05GRDtHdWphcmF0aS1JbnRlckluZGljO0ludGVySW5kaWMtS2FubmFkYTtORkMKK0d1amFyYXRpLU1hbGF5YWxhbTphbGlhczpbXHUwOTY0LVx1MDk2NVx1MEE4MS1cdTBBODNcdTBBODUtXHUwQThCXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyLVx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTBcdTBBRTYtXHUwQUVGXTtORkQ7R3VqYXJhdGktSW50ZXJJbmRpYztJbnRlckluZGljLU1hbGF5YWxhbTtORkMKKworT3JpeWEtRGV2YW5hZ2FyaTphbGlhczpbXHUwQjAxLVx1MEIwM1x1MEIwNS1cdTBCMENcdTBCMEYtXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzItXHUwQjMzXHUwQjM2LVx1MEIzOVx1MEIzQy1cdTBCNDNcdTBCNDctXHUwQjQ4XHUwQjRCLVx1MEI0RFx1MEI1Ni1cdTBCNTdcdTBCNUMtXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI2Ni1cdTBCNzBdO05GRDtPcml5YS1JbnRlckluZGljO0ludGVySW5kaWMtRGV2YW5hZ2FyaTtORkMKK09yaXlhLUJlbmdhbGk6YWxpYXM6W1x1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGLVx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyLVx1MEIzM1x1MEIzNi1cdTBCMzlcdTBCM0MtXHUwQjQzXHUwQjQ3LVx1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTYtXHUwQjU3XHUwQjVDLVx1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNjYtXHUwQjcwXTtORkQ7T3JpeWEtSW50ZXJJbmRpYztJbnRlckluZGljLUJlbmdhbGk7TkZDCitPcml5YS1HdXJtdWtoaTphbGlhczpbXHUwQjAxLVx1MEIwM1x1MEIwNS1cdTBCMENcdTBCMEYtXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzItXHUwQjMzXHUwQjM2LVx1MEIzOVx1MEIzQy1cdTBCNDNcdTBCNDctXHUwQjQ4XHUwQjRCLVx1MEI0RFx1MEI1Ni1cdTBCNTdcdTBCNUMtXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI2Ni1cdTBCNzBdO05GRDtPcml5YS1JbnRlckluZGljO0ludGVySW5kaWMtR3VybXVraGk7TkZDCitPcml5YS1HdWphcmF0aTphbGlhczpbXHUwQjAxLVx1MEIwM1x1MEIwNS1cdTBCMENcdTBCMEYtXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzItXHUwQjMzXHUwQjM2LVx1MEIzOVx1MEIzQy1cdTBCNDNcdTBCNDctXHUwQjQ4XHUwQjRCLVx1MEI0RFx1MEI1Ni1cdTBCNTdcdTBCNUMtXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI2Ni1cdTBCNzBdO05GRDtPcml5YS1JbnRlckluZGljO0ludGVySW5kaWMtR3VqYXJhdGk7TkZDCitPcml5YS1UYW1pbDphbGlhczpbXHUwQjAxLVx1MEIwM1x1MEIwNS1cdTBCMENcdTBCMEYtXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzItXHUwQjMzXHUwQjM2LVx1MEIzOVx1MEIzQy1cdTBCNDNcdTBCNDctXHUwQjQ4XHUwQjRCLVx1MEI0RFx1MEI1Ni1cdTBCNTdcdTBCNUMtXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI2Ni1cdTBCNzBdO05GRDtPcml5YS1JbnRlckluZGljO0ludGVySW5kaWMtVGFtaWw7TkZDCitPcml5YS1UZWx1Z3U6YWxpYXM6W1x1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGLVx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyLVx1MEIzM1x1MEIzNi1cdTBCMzlcdTBCM0MtXHUwQjQzXHUwQjQ3LVx1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTYtXHUwQjU3XHUwQjVDLVx1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNjYtXHUwQjcwXTtORkQ7T3JpeWEtSW50ZXJJbmRpYztJbnRlckluZGljLVRlbHVndTtORkMKK09yaXlhLUthbm5hZGE6YWxpYXM6W1x1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGLVx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyLVx1MEIzM1x1MEIzNi1cdTBCMzlcdTBCM0MtXHUwQjQzXHUwQjQ3LVx1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTYtXHUwQjU3XHUwQjVDLVx1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNjYtXHUwQjcwXTtORkQ7T3JpeWEtSW50ZXJJbmRpYztJbnRlckluZGljLUthbm5hZGE7TkZDCitPcml5YS1NYWxheWFsYW06YWxpYXM6W1x1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGLVx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyLVx1MEIzM1x1MEIzNi1cdTBCMzlcdTBCM0MtXHUwQjQzXHUwQjQ3LVx1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTYtXHUwQjU3XHUwQjVDLVx1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNjYtXHUwQjcwXTtORkQ7T3JpeWEtSW50ZXJJbmRpYztJbnRlckluZGljLU1hbGF5YWxhbTtORkMKKworVGFtaWwtRGV2YW5hZ2FyaTphbGlhczpbMFx1MEI4Mi1cdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTktXHUwQjlBXHUwQjlDXHUwQjlFLVx1MEI5Rlx1MEJBMy1cdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCNVx1MEJCNy1cdTBCQjlcdTBCQkUtXHUwQkMyXHUwQkM2LVx1MEJDOFx1MEJDQS1cdTBCQ0RcdTBCRDdcdTBCRTctXHUwQkYyXTtORkQ7VGFtaWwtSW50ZXJJbmRpYztJbnRlckluZGljLURldmFuYWdhcmk7TkZDCitUYW1pbC1CZW5nYWxpOmFsaWFzOlswXHUwQjgyLVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OS1cdTBCOUFcdTBCOUNcdTBCOUUtXHUwQjlGXHUwQkEzLVx1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI1XHUwQkI3LVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEN1x1MEJFNy1cdTBCRjJdO05GRDtUYW1pbC1JbnRlckluZGljO0ludGVySW5kaWMtQmVuZ2FsaTtORkMKK1RhbWlsLUd1cm11a2hpOmFsaWFzOlswXHUwQjgyLVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OS1cdTBCOUFcdTBCOUNcdTBCOUUtXHUwQjlGXHUwQkEzLVx1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI1XHUwQkI3LVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEN1x1MEJFNy1cdTBCRjJdO05GRDtUYW1pbC1JbnRlckluZGljO0ludGVySW5kaWMtR3VybXVraGk7TkZDCitUYW1pbC1HdWphcmF0aTphbGlhczpbMFx1MEI4Mi1cdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTktXHUwQjlBXHUwQjlDXHUwQjlFLVx1MEI5Rlx1MEJBMy1cdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCNVx1MEJCNy1cdTBCQjlcdTBCQkUtXHUwQkMyXHUwQkM2LVx1MEJDOFx1MEJDQS1cdTBCQ0RcdTBCRDdcdTBCRTctXHUwQkYyXTtORkQ7VGFtaWwtSW50ZXJJbmRpYztJbnRlckluZGljLUd1amFyYXRpO05GQworVGFtaWwtT3JpeWE6YWxpYXM6WzBcdTBCODItXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5LVx1MEI5QVx1MEI5Q1x1MEI5RS1cdTBCOUZcdTBCQTMtXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjVcdTBCQjctXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQ3XHUwQkU3LVx1MEJGMl07TkZEO1RhbWlsLUludGVySW5kaWM7SW50ZXJJbmRpYy1Pcml5YTtORkMKK1RhbWlsLVRlbHVndTphbGlhczpbMFx1MEI4Mi1cdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTktXHUwQjlBXHUwQjlDXHUwQjlFLVx1MEI5Rlx1MEJBMy1cdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCNVx1MEJCNy1cdTBCQjlcdTBCQkUtXHUwQkMyXHUwQkM2LVx1MEJDOFx1MEJDQS1cdTBCQ0RcdTBCRDdcdTBCRTctXHUwQkYyXTtORkQ7VGFtaWwtSW50ZXJJbmRpYztJbnRlckluZGljLVRlbHVndTtORkMKK1RhbWlsLUthbm5hZGE6YWxpYXM6WzBcdTBCODItXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5LVx1MEI5QVx1MEI5Q1x1MEI5RS1cdTBCOUZcdTBCQTMtXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjVcdTBCQjctXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQ3XHUwQkU3LVx1MEJGMl07TkZEO1RhbWlsLUludGVySW5kaWM7SW50ZXJJbmRpYy1LYW5uYWRhO05GQworVGFtaWwtTWFsYXlhbGFtOmFsaWFzOlswXHUwQjgyLVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OS1cdTBCOUFcdTBCOUNcdTBCOUUtXHUwQjlGXHUwQkEzLVx1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI1XHUwQkI3LVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEN1x1MEJFNy1cdTBCRjJdO05GRDtUYW1pbC1JbnRlckluZGljO0ludGVySW5kaWMtTWFsYXlhbGFtO05GQworCitUZWx1Z3UtRGV2YW5hZ2FyaTphbGlhczpbXHUwQzAxLVx1MEMwM1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNFLVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1LVx1MEM1Nlx1MEM2MC1cdTBDNjFcdTBDNjYtXHUwQzZGXTtORkQ7VGVsdWd1LUludGVySW5kaWM7SW50ZXJJbmRpYy1EZXZhbmFnYXJpO05GQworVGVsdWd1LUJlbmdhbGk6YWxpYXM6W1x1MEMwMS1cdTBDMDNcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRS1cdTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NS1cdTBDNTZcdTBDNjAtXHUwQzYxXHUwQzY2LVx1MEM2Rl07TkZEO1RlbHVndS1JbnRlckluZGljO0ludGVySW5kaWMtQmVuZ2FsaTtORkMKK1RlbHVndS1HdXJtdWtoaTphbGlhczpbXHUwQzAxLVx1MEMwM1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNFLVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1LVx1MEM1Nlx1MEM2MC1cdTBDNjFcdTBDNjYtXHUwQzZGXTtORkQ7VGVsdWd1LUludGVySW5kaWM7SW50ZXJJbmRpYy1HdXJtdWtoaTtORkMKK1RlbHVndS1HdWphcmF0aTphbGlhczpbXHUwQzAxLVx1MEMwM1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNFLVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1LVx1MEM1Nlx1MEM2MC1cdTBDNjFcdTBDNjYtXHUwQzZGXTtORkQ7VGVsdWd1LUludGVySW5kaWM7SW50ZXJJbmRpYy1HdWphcmF0aTtORkMKK1RlbHVndS1Pcml5YTphbGlhczpbXHUwQzAxLVx1MEMwM1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNFLVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1LVx1MEM1Nlx1MEM2MC1cdTBDNjFcdTBDNjYtXHUwQzZGXTtORkQ7VGVsdWd1LUludGVySW5kaWM7SW50ZXJJbmRpYy1Pcml5YTtORkMKK1RlbHVndS1UYW1pbDphbGlhczpbXHUwQzAxLVx1MEMwM1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNFLVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1LVx1MEM1Nlx1MEM2MC1cdTBDNjFcdTBDNjYtXHUwQzZGXTtORkQ7VGVsdWd1LUludGVySW5kaWM7SW50ZXJJbmRpYy1UYW1pbDtORkMKK1RlbHVndS1LYW5uYWRhOmFsaWFzOltcdTBDMDEtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0UtXHUwQzQ0XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTUtXHUwQzU2XHUwQzYwLVx1MEM2MVx1MEM2Ni1cdTBDNkZdO05GRDtUZWx1Z3UtSW50ZXJJbmRpYztJbnRlckluZGljLUthbm5hZGE7TkZDCitUZWx1Z3UtTWFsYXlhbGFtOmFsaWFzOltcdTBDMDEtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0UtXHUwQzQ0XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTUtXHUwQzU2XHUwQzYwLVx1MEM2MVx1MEM2Ni1cdTBDNkZdO05GRDtUZWx1Z3UtSW50ZXJJbmRpYztJbnRlckluZGljLU1hbGF5YWxhbTtORkMKKworS2FubmFkYS1EZXZhbmFnYXJpOmFsaWFzOltcdTBDODItXHUwQzgzXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkUtXHUwQ0M0XHUwQ0M2LVx1MENDOFx1MENDQS1cdTBDQ0RcdTBDRDUtXHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFMVx1MENFNi1cdTBDRUZdO05GRDtLYW5uYWRhLUludGVySW5kaWM7SW50ZXJJbmRpYy1EZXZhbmFnYXJpO05GQworS2FubmFkYS1CZW5nYWxpOmFsaWFzOltcdTBDODItXHUwQzgzXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkUtXHUwQ0M0XHUwQ0M2LVx1MENDOFx1MENDQS1cdTBDQ0RcdTBDRDUtXHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFMVx1MENFNi1cdTBDRUZdO05GRDtLYW5uYWRhLUludGVySW5kaWM7SW50ZXJJbmRpYy1CZW5nYWxpO05GQworS2FubmFkYS1HdXJtdWtoaTphbGlhczpbXHUwQzgyLVx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JFLVx1MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1LVx1MENENlx1MENERVx1MENFMC1cdTBDRTFcdTBDRTYtXHUwQ0VGXTtORkQ7S2FubmFkYS1JbnRlckluZGljO0ludGVySW5kaWMtR3VybXVraGk7TkZDCitLYW5uYWRhLUd1amFyYXRpOmFsaWFzOltcdTBDODItXHUwQzgzXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkUtXHUwQ0M0XHUwQ0M2LVx1MENDOFx1MENDQS1cdTBDQ0RcdTBDRDUtXHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFMVx1MENFNi1cdTBDRUZdO05GRDtLYW5uYWRhLUludGVySW5kaWM7SW50ZXJJbmRpYy1HdWphcmF0aTtORkMKK0thbm5hZGEtT3JpeWE6YWxpYXM6W1x1MEM4Mi1cdTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCRS1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENS1cdTBDRDZcdTBDREVcdTBDRTAtXHUwQ0UxXHUwQ0U2LVx1MENFRl07TkZEO0thbm5hZGEtSW50ZXJJbmRpYztJbnRlckluZGljLU9yaXlhO05GQworS2FubmFkYS1UYW1pbDphbGlhczpbXHUwQzgyLVx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JFLVx1MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1LVx1MENENlx1MENERVx1MENFMC1cdTBDRTFcdTBDRTYtXHUwQ0VGXTtORkQ7S2FubmFkYS1JbnRlckluZGljO0ludGVySW5kaWMtVGFtaWw7TkZDCitLYW5uYWRhLVRlbHVndTphbGlhczpbXHUwQzgyLVx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JFLVx1MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1LVx1MENENlx1MENERVx1MENFMC1cdTBDRTFcdTBDRTYtXHUwQ0VGXTtORkQ7S2FubmFkYS1JbnRlckluZGljO0ludGVySW5kaWMtVGVsdWd1O05GQworS2FubmFkYS1NYWxheWFsYW06YWxpYXM6W1x1MEM4Mi1cdTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCRS1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENS1cdTBDRDZcdTBDREVcdTBDRTAtXHUwQ0UxXHUwQ0U2LVx1MENFRl07TkZEO0thbm5hZGEtSW50ZXJJbmRpYztJbnRlckluZGljLU1hbGF5YWxhbTtORkMKKworTWFsYXlhbGFtLURldmFuYWdhcmk6YWxpYXM6W1x1MEQwMi1cdTBEMDNcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEMjhcdTBEMkEtXHUwRDM5XHUwRDNFLVx1MEQ0M1x1MEQ0Ni1cdTBENDhcdTBENEEtXHUwRDREXHUwRDU3XHUwRDYwLVx1MEQ2MVx1MEQ2Ni1cdTBENkZdO05GRDtNYWxheWFsYW0tSW50ZXJJbmRpYztJbnRlckluZGljLURldmFuYWdhcmk7TkZDCitNYWxheWFsYW0tQmVuZ2FsaTphbGlhczpbXHUwRDAyLVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQyOFx1MEQyQS1cdTBEMzlcdTBEM0UtXHUwRDQzXHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBENERcdTBENTdcdTBENjAtXHUwRDYxXHUwRDY2LVx1MEQ2Rl07TkZEO01hbGF5YWxhbS1JbnRlckluZGljO0ludGVySW5kaWMtQmVuZ2FsaTtORkMKK01hbGF5YWxhbS1HdXJtdWtoaTphbGlhczpbXHUwRDAyLVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQyOFx1MEQyQS1cdTBEMzlcdTBEM0UtXHUwRDQzXHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBENERcdTBENTdcdTBENjAtXHUwRDYxXHUwRDY2LVx1MEQ2Rl07TkZEO01hbGF5YWxhbS1JbnRlckluZGljO0ludGVySW5kaWMtR3VybXVraGk7TkZDCitNYWxheWFsYW0tR3VqYXJhdGk6YWxpYXM6W1x1MEQwMi1cdTBEMDNcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEMjhcdTBEMkEtXHUwRDM5XHUwRDNFLVx1MEQ0M1x1MEQ0Ni1cdTBENDhcdTBENEEtXHUwRDREXHUwRDU3XHUwRDYwLVx1MEQ2MVx1MEQ2Ni1cdTBENkZdO05GRDtNYWxheWFsYW0tSW50ZXJJbmRpYztJbnRlckluZGljLUd1amFyYXRpO05GQworTWFsYXlhbGFtLU9yaXlhOmFsaWFzOltcdTBEMDItXHUwRDAzXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDI4XHUwRDJBLVx1MEQzOVx1MEQzRS1cdTBENDNcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RFx1MEQ1N1x1MEQ2MC1cdTBENjFcdTBENjYtXHUwRDZGXTtORkQ7TWFsYXlhbGFtLUludGVySW5kaWM7SW50ZXJJbmRpYy1Pcml5YTtORkMKK01hbGF5YWxhbS1UYW1pbDphbGlhczpbXHUwRDAyLVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQyOFx1MEQyQS1cdTBEMzlcdTBEM0UtXHUwRDQzXHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBENERcdTBENTdcdTBENjAtXHUwRDYxXHUwRDY2LVx1MEQ2Rl07TkZEO01hbGF5YWxhbS1JbnRlckluZGljO0ludGVySW5kaWMtVGFtaWw7TkZDCitNYWxheWFsYW0tVGVsdWd1OmFsaWFzOltcdTBEMDItXHUwRDAzXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDI4XHUwRDJBLVx1MEQzOVx1MEQzRS1cdTBENDNcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RFx1MEQ1N1x1MEQ2MC1cdTBENjFcdTBENjYtXHUwRDZGXTtORkQ7TWFsYXlhbGFtLUludGVySW5kaWM7SW50ZXJJbmRpYy1UZWx1Z3U7TkZDCitNYWxheWFsYW0tS2FubmFkYTphbGlhczpbXHUwRDAyLVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQyOFx1MEQyQS1cdTBEMzlcdTBEM0UtXHUwRDQzXHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBENERcdTBENTdcdTBENjAtXHUwRDYxXHUwRDY2LVx1MEQ2Rl07TkZEO01hbGF5YWxhbS1JbnRlckluZGljO0ludGVySW5kaWMtS2FubmFkYTtORkMKKworIyBlb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvaW52dWNhLmljdSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvaW52dWNhLmljdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTM3YzJlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9pbnZ1Y2EuaWN1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvcGFja2FnZS5odG1sIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODA5NjdkZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3BhY2thZ2UuaHRtbCx2ICQKKyAgJFJldmlzaW9uOiAxLjEgJAorICAkRGF0ZTogMjAwMC8wMy8xNSAyMTozNTo1MiAkCistLT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIj4KK1Jlc291cmNlIGRhdGEgdXNlZCBieSBjbGFzc2VzIGluIGNvbS5pYm0udGV4dC4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3BuYW1lcy5pY3UgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3BuYW1lcy5pY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyZTFiOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvcG5hbWVzLmljdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3RoYWlfZGljdCBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdGhhaV9kaWN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmOGY3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3RoYWlfZGljdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3VjYWRhdGEuaWN1IGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS91Y2FkYXRhLmljdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzAyYjFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2ltcGwvZGF0YS91Y2FkYXRhLmljdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3VuYW1lcy5pY3UgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3VuYW1lcy5pY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5ZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdW5hbWVzLmljdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3Vub3JtLmljdSBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdW5vcm0uaWN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZWVhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3Vub3JtLmljdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3Vwcm9wcy5pY3UgYi9zcmMvY29tL2libS9pY3UvaW1wbC9kYXRhL3Vwcm9wcy5pY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmMGEyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdXByb3BzLmljdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvbGFuZy9VQ2hhcmFjdGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvbGFuZy9VQ2hhcmFjdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2NlYTBjOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9sYW5nL1VDaGFyYWN0ZXIuamF2YQpAQCAtMCwwICsxLDQxOTEgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvbGFuZy9VQ2hhcmFjdGVyLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMi8wMyAwMDo0Nzo1MCAkIAorKiAkUmV2aXNpb246IDEuNTQgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5sYW5nOworCitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlJhbmdlVmFsdWVJdGVyYXRvcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlZhbHVlSXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5WZXJzaW9uSW5mbzsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkJyZWFrSXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5VVEYxNjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLk5vcm1hbGl6ZXJJbXBsOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVUNoYXJhY3RlclV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyTmFtZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJOYW1lQ2hvaWNlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVVByb3BlcnR5QWxpYXNlczsKKworLyoqCisgKiA8cD4KKyAqIFRoZSBVQ2hhcmFjdGVyIGNsYXNzIHByb3ZpZGVzIGV4dGVuc2lvbnMgdG8gdGhlIAorICogPGEgaHJlZj1odHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS4zL2RvY3MvYXBpL2phdmEvbGFuZy9DaGFyYWN0ZXIuaHRtbD4KKyAqIGphdmEubGFuZy5DaGFyYWN0ZXI8L2E+IGNsYXNzLiBUaGVzZSBleHRlbnNpb25zIHByb3ZpZGUgc3VwcG9ydCBmb3IgCisgKiBVbmljb2RlIDMuMSBwcm9wZXJ0aWVzIGFuZCB0b2dldGhlciB3aXRoIHRoZSA8YSBocmVmPVVURjE2Lmh0bWw+VVRGMTY8L2E+IAorICogY2xhc3MsIHByb3ZpZGUgc3VwcG9ydCBmb3Igc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzICh0aG9zZSB3aXRoIGNvZGUgCisgKiBwb2ludHMgYWJvdmUgVStGRkZGKS4KKyAqIDwvcD4KKyAqIDxwPgorICogQ29kZSBwb2ludHMgYXJlIHJlcHJlc2VudGVkIGluIHRoZXNlIEFQSSB1c2luZyBpbnRzLiBXaGlsZSBpdCB3b3VsZCBiZSAKKyAqIG1vcmUgY29udmVuaWVudCBpbiBKYXZhIHRvIGhhdmUgYSBzZXBhcmF0ZSBwcmltaXRpdmUgZGF0YXR5cGUgZm9yIHRoZW0sIAorICogaW50cyBzdWZmaWNlIGluIHRoZSBtZWFudGltZS4KKyAqIDwvcD4KKyAqIDxwPgorICogVG8gdXNlIHRoaXMgY2xhc3MgcGxlYXNlIGFkZCB0aGUgamFyIGZpbGUgbmFtZSBpY3U0ai5qYXIgdG8gdGhlIAorICogY2xhc3MgcGF0aCwgc2luY2UgaXQgY29udGFpbnMgZGF0YSBmaWxlcyB3aGljaCBzdXBwbHkgdGhlIGluZm9ybWF0aW9uIHVzZWQgCisgKiBieSB0aGlzIGZpbGUuPGJyPgorICogRS5nLiBJbiBXaW5kb3dzIDxicj4KKyAqIDxjb2RlPnNldCBDTEFTU1BBVEg9JUNMQVNTUEFUSCU7JEpBUl9GSUxFX1BBVEgvdWNoYXJhY3Rlci5qYXI8L2NvZGU+Ljxicj4KKyAqIE90aGVyd2lzZSwgYW5vdGhlciBtZXRob2Qgd291bGQgYmUgdG8gY29weSB0aGUgZmlsZXMgdXByb3BzLmRhdCBhbmQgCisgKiB1bmFtZXMuaWN1IGZyb20gdGhlIGljdTRqIHNvdXJjZSBzdWJkaXJlY3RvcnkgCisgKiA8aT4kSUNVNEpfU1JDL3NyYy9jb20uaWJtLmljdS5pbXBsLmRhdGE8L2k+IHRvIHlvdXIgY2xhc3MgZGlyZWN0b3J5IAorICogPGk+JElDVTRKX0NMQVNTL2NvbS5pYm0uaWN1LmltcGwuZGF0YTwvaT4uCisgKiA8L3A+CisgKiA8cD4KKyAqIEFzaWRlIGZyb20gdGhlIGFkZGl0aW9ucyBmb3IgVVRGLTE2IHN1cHBvcnQsIGFuZCB0aGUgdXBkYXRlZCBVbmljb2RlIDMuMQorICogcHJvcGVydGllcywgdGhlIG1haW4gZGlmZmVyZW5jZXMgYmV0d2VlbiBVQ2hhcmFjdGVyIGFuZCBDaGFyYWN0ZXIgYXJlOgorICogPHVsPgorICogPGxpPiBVQ2hhcmFjdGVyIGlzIG5vdCBkZXNpZ25lZCB0byBiZSBhIGNoYXIgd3JhcHBlciBhbmQgZG9lcyBub3QgaGF2ZSAKKyAqICAgICAgQVBJcyB0byB3aGljaCBpbnZvbHZlcyBtYW5hZ2VtZW50IG9mIHRoYXQgc2luZ2xlIGNoYXIuPGJyPgorICogICAgICBUaGVzZSBpbmNsdWRlOiAKKyAqICAgICAgPHVsPgorICogICAgICAgIDxsaT4gY2hhciBjaGFyVmFsdWUoKSwgCisgKiAgICAgICAgPGxpPiBpbnQgY29tcGFyZVRvKGphdmEubGFuZy5DaGFyYWN0ZXIsIGphdmEubGFuZy5DaGFyYWN0ZXIpLCBldGMuCisgKiAgICAgIDwvdWw+CisgKiA8bGk+IFVDaGFyYWN0ZXIgZG9lcyBub3QgaW5jbHVkZSBDaGFyYWN0ZXIgQVBJcyB0aGF0IGFyZSBkZXByZWNhdGVkLCBub3QgCisgKiAgICAgIGRvZXMgaXQgaW5jbHVkZSB0aGUgSmF2YS1zcGVjaWZpYyBjaGFyYWN0ZXIgaW5mb3JtYXRpb24sIHN1Y2ggYXMgCisgKiAgICAgIGJvb2xlYW4gaXNKYXZhSWRlbnRpZmllclBhcnQoY2hhciBjaCkuCisgKiA8bGk+IENoYXJhY3RlciBtYXBzIGNoYXJhY3RlcnMgJ0EnIC0gJ1onIGFuZCAnYScgLSAneicgdG8gdGhlIG51bWVyaWMgCisgKiAgICAgIHZhbHVlcyAnMTAnIC0gJzM1Jy4gVUNoYXJhY3RlciBhbHNvIGRvZXMgdGhpcyBpbiBkaWdpdCBhbmQKKyAqICAgICAgZ2V0TnVtZXJpY1ZhbHVlLCB0byBhZGhlcmUgdG8gdGhlIGphdmEgc2VtYW50aWNzIG9mIHRoZXNlCisgKiAgICAgIG1ldGhvZHMuICBOZXcgbWV0aG9kcyB1bmljb2RlRGlnaXQsIGFuZAorICogICAgICBnZXRVbmljb2RlTnVtZXJpY1ZhbHVlIGRvIG5vdCB0cmVhdCB0aGUgYWJvdmUgY29kZSBwb2ludHMgCisgKiAgICAgIGFzIGhhdmluZyBudW1lcmljIHZhbHVlcy4gIFRoaXMgaXMgYSBzZW1hbnRpYyBjaGFuZ2UgZnJvbSBJQ1U0SiAxLjMuMS4KKyAqIDwvdWw+CisgKiA8cD4KKyAqIEZ1cnRoZXIgZGV0YWlsIGRpZmZlcmVuY2VzIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIHByb2dyYW0gCisgKiAgICAgICAgPGEgaHJlZiA9IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2N2cy9pY3U0ai9+Y2hlY2tvdXR+L2ljdTRqL3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9sYW5nL1VDaGFyYWN0ZXJDb21wYXJlLmphdmE+CisgKiAgICAgICAgY29tLmlibS5pY3UuZGV2LnRlc3QubGFuZy5VQ2hhcmFjdGVyQ29tcGFyZTwvYT4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBjbGFzcyBpcyBub3Qgc3ViY2xhc3NhYmxlCisgKiA8L3A+CisgKiBAYXV0aG9yIFN5biBXZWUgUXVlaworICogQHN0YWJsZSBJQ1UgMi4xCisgKiBAc2VlIGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlckNhdGVnb3J5CisgKiBAc2VlIGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlckRpcmVjdGlvbgorICovCisKKy8qCisgKiBub3RlczogCisgKiAxKSBmb3JEaWdpdCBpcyBub3QgcHJvdmlkZWQgc2luY2UgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAKKyAqIGljdTRjIHZlcnNpb24gYW5kIHRoZSBqZGsgdmVyc2lvbgorICovCisgCitwdWJsaWMgZmluYWwgY2xhc3MgVUNoYXJhY3RlcgoreyAKKyAgICAvLyBwdWJsaWMgaW5uZXIgY2xhc3NlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAKKyAgICAvKioKKyAgICAgKiBBIGZhbWlseSBvZiBjaGFyYWN0ZXIgc3Vic2V0cyByZXByZXNlbnRpbmcgdGhlIGNoYXJhY3RlciBibG9ja3MgaW4gdGhlIAorICAgICAqIFVuaWNvZGUgc3BlY2lmaWNhdGlvbiwgZ2VuZXJhdGVkIGZyb20gVW5pY29kZSBEYXRhIGZpbGUgQmxvY2tzLnR4dC4gCisgICAgICogQ2hhcmFjdGVyIGJsb2NrcyBnZW5lcmFsbHkgZGVmaW5lIGNoYXJhY3RlcnMgdXNlZCBmb3IgYSBzcGVjaWZpYyBzY3JpcHQgCisgICAgICogb3IgcHVycG9zZS4gQSBjaGFyYWN0ZXIgaXMgY29udGFpbmVkIGJ5IGF0IG1vc3Qgb25lIFVuaWNvZGUgYmxvY2suIAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBVbmljb2RlQmxvY2sgZXh0ZW5kcyBDaGFyYWN0ZXIuU3Vic2V0IAorICAgIHsKKyAgICAgICAgLy8gYmxvY2tzIG9iamVjdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBCQVNJQ19MQVRJTiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkJBU0lDX0xBVElOIiwgMSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBMQVRJTl8xX1NVUFBMRU1FTlQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiTEFUSU5fMV9TVVBQTEVNRU5UIiwgMik7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBMQVRJTl9FWFRFTkRFRF9BCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkxBVElOX0VYVEVOREVEX0EiLCAzKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIExBVElOX0VYVEVOREVEX0IgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkxBVElOX0VYVEVOREVEX0IiLCA0KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIElQQV9FWFRFTlNJT05TIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJJUEFfRVhURU5TSU9OUyIsIDUpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgU1BBQ0lOR19NT0RJRklFUl9MRVRURVJTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJTUEFDSU5HX01PRElGSUVSX0xFVFRFUlMiLCA2KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIENPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTIiwgNyk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVbmljb2RlIDMuMiByZW5hbWVzIHRoaXMgYmxvY2sgdG8gIkdyZWVrIGFuZCBDb3B0aWMiLgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgR1JFRUsgPSBuZXcgVW5pY29kZUJsb2NrKCJHUkVFSyIsIDgpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQ1lSSUxMSUMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQ1lSSUxMSUMiLCA5KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEFSTUVOSUFOIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkFSTUVOSUFOIiwgMTApOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgSEVCUkVXIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkhFQlJFVyIsIDExKTsgIAorICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQVJBQklDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQVJBQklDIiwgMTIpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgU1lSSUFDIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIlNZUklBQyIsIDEzKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIFRIQUFOQSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJUSEFBTkEiLCAxNCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBERVZBTkFHQVJJIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiREVWQU5BR0FSSSIsIDE1KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEJFTkdBTEkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQkVOR0FMSSIsIDE2KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEdVUk1VS0hJIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkdVUk1VS0hJIiwgMTcpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgR1VKQVJBVEkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiR1VKQVJBVEkiLCAxOCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBPUklZQSA9IG5ldyBVbmljb2RlQmxvY2soIk9SSVlBIiwgMTkpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgVEFNSUwgPSBuZXcgVW5pY29kZUJsb2NrKCJUQU1JTCIsIDIwKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIFRFTFVHVSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJURUxVR1UiLCAyMSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBLQU5OQURBIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIktBTk5BREEiLCAyMik7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBNQUxBWUFMQU0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiTUFMQVlBTEFNIiwgMjMpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgU0lOSEFMQSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJTSU5IQUxBIiwgMjQpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgVEhBSSA9IG5ldyBVbmljb2RlQmxvY2soIlRIQUkiLCAyNSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBMQU8gPSBuZXcgVW5pY29kZUJsb2NrKCJMQU8iLCAyNik7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBUSUJFVEFOIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIlRJQkVUQU4iLCAyNyk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBNWUFOTUFSIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIk1ZQU5NQVIiLCAyOCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBHRU9SR0lBTiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJHRU9SR0lBTiIsIDI5KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEhBTkdVTF9KQU1PIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiSEFOR1VMX0pBTU8iLCAzMCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBFVEhJT1BJQyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkVUSElPUElDIiwgMzEpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQ0hFUk9LRUUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJDSEVST0tFRSIsIDMyKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIFVOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1MgCisgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIlVOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1MiLCAzMyk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBPR0hBTSA9IG5ldyBVbmljb2RlQmxvY2soIk9HSEFNIiwgMzQpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgUlVOSUMgPSBuZXcgVW5pY29kZUJsb2NrKCJSVU5JQyIsIDM1KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEtITUVSID0gbmV3IFVuaWNvZGVCbG9jaygiS0hNRVIiLCAzNik7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBNT05HT0xJQU4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiTU9OR09MSUFOIiwgMzcpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgTEFUSU5fRVhURU5ERURfQURESVRJT05BTCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkxBVElOX0VYVEVOREVEX0FERElUSU9OQUwiLCAzOCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBHUkVFS19FWFRFTkRFRCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiR1JFRUtfRVhURU5ERUQiLCAzOSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBHRU5FUkFMX1BVTkNUVUFUSU9OIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkdFTkVSQUxfUFVOQ1RVQVRJT04iLCA0MCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBTVVBFUlNDUklQVFNfQU5EX1NVQlNDUklQVFMgCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIlNVUEVSU0NSSVBUU19BTkRfU1VCU0NSSVBUUyIsIDQxKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIENVUlJFTkNZX1NZTUJPTFMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkNVUlJFTkNZX1NZTUJPTFMiLCA0Mik7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVbmljb2RlIDMuMiByZW5hbWVzIHRoaXMgYmxvY2sgdG8gIkNvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBmb3IgCisgICAgICAgICAqIFN5bWJvbHMiLgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQ09NQklOSU5HX01BUktTX0ZPUl9TWU1CT0xTIAorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJDT01CSU5JTkdfTUFSS1NfRk9SX1NZTUJPTFMiLCA0Myk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBMRVRURVJMSUtFX1NZTUJPTFMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiTEVUVEVSTElLRV9TWU1CT0xTIiwgNDQpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgTlVNQkVSX0ZPUk1TIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiTlVNQkVSX0ZPUk1TIiwgNDUpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQVJST1dTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkFSUk9XUyIsIDQ2KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIE1BVEhFTUFUSUNBTF9PUEVSQVRPUlMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJNQVRIRU1BVElDQUxfT1BFUkFUT1JTIiwgNDcpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgTUlTQ0VMTEFORU9VU19URUNITklDQUwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJNSVNDRUxMQU5FT1VTX1RFQ0hOSUNBTCIsIDQ4KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIENPTlRST0xfUElDVFVSRVMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkNPTlRST0xfUElDVFVSRVMiLCA0OSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBPUFRJQ0FMX0NIQVJBQ1RFUl9SRUNPR05JVElPTiAKKyAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiT1BUSUNBTF9DSEFSQUNURVJfUkVDT0dOSVRJT04iLCA1MCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBFTkNMT1NFRF9BTFBIQU5VTUVSSUNTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiRU5DTE9TRURfQUxQSEFOVU1FUklDUyIsIDUxKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEJPWF9EUkFXSU5HIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQk9YX0RSQVdJTkciLCA1Mik7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBCTE9DS19FTEVNRU5UUyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQkxPQ0tfRUxFTUVOVFMiLCA1Myk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBHRU9NRVRSSUNfU0hBUEVTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJHRU9NRVRSSUNfU0hBUEVTIiwgNTQpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgTUlTQ0VMTEFORU9VU19TWU1CT0xTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIk1JU0NFTExBTkVPVVNfU1lNQk9MUyIsIDU1KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIERJTkdCQVRTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkRJTkdCQVRTIiwgNTYpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQlJBSUxMRV9QQVRURVJOUyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQlJBSUxMRV9QQVRURVJOUyIsIDU3KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIENKS19SQURJQ0FMU19TVVBQTEVNRU5UIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQ0pLX1JBRElDQUxTX1NVUFBMRU1FTlQiLCA1OCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBLQU5HWElfUkFESUNBTFMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIktBTkdYSV9SQURJQ0FMUyIsIDU5KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIElERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlMgCisgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJJREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTIiwgNjApOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OIAorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJDSktfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT04iLCA2MSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBISVJBR0FOQSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJISVJBR0FOQSIsIDYyKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEtBVEFLQU5BIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIktBVEFLQU5BIiwgNjMpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQk9QT01PRk8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQk9QT01PRk8iLCA2NCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBIQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1PIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTyIsIDY1KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEtBTkJVTiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJLQU5CVU4iLCA2Nik7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBCT1BPTU9GT19FWFRFTkRFRCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJCT1BPTU9GT19FWFRFTkRFRCIsIDY3KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEVOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFMgCisgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIUyIsIDY4KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIENKS19DT01QQVRJQklMSVRZIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkNKS19DT01QQVRJQklMSVRZIiwgNjkpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQSAKKyAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkNKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0EiLCA3MCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBDSktfVU5JRklFRF9JREVPR1JBUEhTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQ0pLX1VOSUZJRURfSURFT0dSQVBIUyIsIDcxKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIFlJX1NZTExBQkxFUyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIllJX1NZTExBQkxFUyIsIDcyKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIFlJX1JBRElDQUxTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiWUlfUkFESUNBTFMiLCA3Myk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBIQU5HVUxfU1lMTEFCTEVTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJIQU5HVUxfU1lMTEFCTEVTIiwgNzQpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgSElHSF9TVVJST0dBVEVTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJISUdIX1NVUlJPR0FURVMiLCA3NSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBISUdIX1BSSVZBVEVfVVNFX1NVUlJPR0FURVMgCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkhJR0hfUFJJVkFURV9VU0VfU1VSUk9HQVRFUyIsIDc2KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIExPV19TVVJST0dBVEVTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJMT1dfU1VSUk9HQVRFUyIsIDc3KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNhbWUgYXMgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJJVkFURV9VU0UuCisgICAgICAgICAqIFVudGlsIFVuaWNvZGUgMy4xLjE7IHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrIG5hbWUgd2FzICJQcml2YXRlIFVzZSI7CisgICAgICAgICAqIGFuZCBtdWx0aXBsZSBjb2RlIHBvaW50IHJhbmdlcyBoYWQgdGhpcyBibG9jay4KKyAgICAgICAgICogVW5pY29kZSAzLjIgcmVuYW1lcyB0aGUgYmxvY2sgZm9yIHRoZSBCTVAgUFVBIHRvICJQcml2YXRlIFVzZSBBcmVhIiAKKyAgICAgICAgICogYW5kIGFkZHMgc2VwYXJhdGUgYmxvY2tzIGZvciB0aGUgc3VwcGxlbWVudGFyeSBQVUFzLgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgUFJJVkFURV9VU0VfQVJFQSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJQUklWQVRFX1VTRV9BUkVBIiwgIDc4KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNhbWUgYXMgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJJVkFURV9VU0VfQVJFQS4KKyAgICAgICAgICogVW50aWwgVW5pY29kZSAzLjEuMTsgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2sgbmFtZSB3YXMgIlByaXZhdGUgVXNlIjsKKyAgICAgICAgICogYW5kIG11bHRpcGxlIGNvZGUgcG9pbnQgcmFuZ2VzIGhhZCB0aGlzIGJsb2NrLgorICAgICAgICAgKiBVbmljb2RlIDMuMiByZW5hbWVzIHRoZSBibG9jayBmb3IgdGhlIEJNUCBQVUEgdG8gIlByaXZhdGUgVXNlIEFyZWEiIAorICAgICAgICAgKiBhbmQgYWRkcyBzZXBhcmF0ZSBibG9ja3MgZm9yIHRoZSBzdXBwbGVtZW50YXJ5IFBVQXMuCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBQUklWQVRFX1VTRSA9IFBSSVZBVEVfVVNFX0FSRUE7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBDSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTIAorICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkNKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFMiLCA3OSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBBTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUyAKKyAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQUxQSEFCRVRJQ19QUkVTRU5UQVRJT05fRk9STVMiLCA4MCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0EgCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkFSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQSIsIDgxKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIENPTUJJTklOR19IQUxGX01BUktTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQ09NQklOSU5HX0hBTEZfTUFSS1MiLCA4Mik7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBDSktfQ09NUEFUSUJJTElUWV9GT1JNUyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkNKS19DT01QQVRJQklMSVRZX0ZPUk1TIiwgODMpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgU01BTExfRk9STV9WQVJJQU5UUyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJTTUFMTF9GT1JNX1ZBUklBTlRTIiwgODQpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQVJBQklDX1BSRVNFTlRBVElPTl9GT1JNU19CIAorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0IiLCA4NSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBTUEVDSUFMUyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJTUEVDSUFMUyIsIDg2KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEhBTEZXSURUSF9BTkRfRlVMTFdJRFRIX0ZPUk1TIAorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJIQUxGV0lEVEhfQU5EX0ZVTExXSURUSF9GT1JNUyIsIDg3KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIE9MRF9JVEFMSUMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJPTERfSVRBTElDIiwgODgpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgR09USElDIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkdPVEhJQyIsIDg5KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIERFU0VSRVQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiREVTRVJFVCIsIDkwKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEJZWkFOVElORV9NVVNJQ0FMX1NZTUJPTFMgCisgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkJZWkFOVElORV9NVVNJQ0FMX1NZTUJPTFMiLCA5MSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBNVVNJQ0FMX1NZTUJPTFMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIk1VU0lDQUxfU1lNQk9MUyIsIDkyKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIE1BVEhFTUFUSUNBTF9BTFBIQU5VTUVSSUNfU1lNQk9MUyAKKyAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIk1BVEhFTUFUSUNBTF9BTFBIQU5VTUVSSUNfU1lNQk9MUyIsIDkzKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIENKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0IgIAorICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQiIsIDk0KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIAorICAgICAgICAgICAgQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIU19TVVBQTEVNRU5UIAorICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJDSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQiLCA5NSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBUQUdTID0gbmV3IFVuaWNvZGVCbG9jaygiVEFHUyIsIDk2KTsKKyAgICAKKyAgICAgICAgLy8gTmV3IGJsb2NrcyBpbiBVbmljb2RlIDMuMgorICAgIAorICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgQ1lSSUxMSUNfU1VQUExFTUVOVEFSWSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkNZUklMTElDX1NVUFBMRU1FTlRBUlkiLCA5Nyk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBUQUdBTE9HIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIlRBR0FMT0ciLCA5OCk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBIQU5VTk9PIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIkhBTlVOT08iLCA5OSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBCVUhJRCA9IG5ldyBVbmljb2RlQmxvY2soIkJVSElEIiwgMTAwKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIFRBR0JBTldBIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIlRBR0JBTldBIiwgMTAxKTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIE1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQSAKKyAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIk1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQSIsIDEwMik7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBTVVBQTEVNRU5UQUxfQVJST1dTX0EgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZUJsb2NrKCJTVVBQTEVNRU5UQUxfQVJST1dTX0EiLCAxMDMpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgU1VQUExFTUVOVEFMX0FSUk9XU19CIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiU1VQUExFTUVOVEFMX0FSUk9XU19CIiwgMTA0KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIE1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQiAKKyAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIk1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQiIsIDEwNSk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBTVVBQTEVNRU5UQUxfTUFUSEVNQVRJQ0FMX09QRVJBVE9SUyAKKyAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIlNVUFBMRU1FTlRBTF9NQVRIRU1BVElDQUxfT1BFUkFUT1JTIiwgMTA2KTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVW5pY29kZUJsb2NrIEtBVEFLQU5BX1BIT05FVElDX0VYVEVOU0lPTlMgCisgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiS0FUQUtBTkFfUEhPTkVUSUNfRVhURU5TSU9OUyIsIDEwNyk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVuaWNvZGVCbG9jayBWQVJJQVRJT05fU0VMRUNUT1JTIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBVbmljb2RlQmxvY2soIlZBUklBVElPTl9TRUxFQ1RPUlMiLCAxMDgpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgU1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0EgCisgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiU1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0EiLCAxMDkpOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgU1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0IgCisgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiU1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0IiLCAxMTApOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVbmljb2RlQmxvY2sgSU5WQUxJRF9DT0RFIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFVuaWNvZGVCbG9jaygiSU5WQUxJRF9DT0RFIiwgLTEpOworICAgICAgICAgICAKKyAgICAgICAgLy8gYmxvY2sgaWQgY29ycmVzcG9uZGluZyB0byBpY3U0YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVkFMSURfQ09ERV9JRCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBU0lDX0xBVElOX0lEID0gMTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExBVElOXzFfU1VQUExFTUVOVF9JRCA9IDI7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRJTl9FWFRFTkRFRF9BX0lEID0gMzsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExBVElOX0VYVEVOREVEX0JfSUQgPSA0OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVBBX0VYVEVOU0lPTlNfSUQgPSA1OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1BBQ0lOR19NT0RJRklFUl9MRVRURVJTX0lEID0gNjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLU19JRCA9IDc7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVbmljb2RlIDMuMiByZW5hbWVzIHRoaXMgYmxvY2sgdG8gIkdyZWVrIGFuZCBDb3B0aWMiLgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JFRUtfSUQgPSA4OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1lSSUxMSUNfSUQgPSA5OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVJNRU5JQU5fSUQgPSAxMDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhFQlJFV19JRCA9IDExOyAgCisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBUkFCSUNfSUQgPSAxMjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNZUklBQ19JRCA9IDEzOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEhBQU5BX0lEID0gMTQ7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVZBTkFHQVJJX0lEID0gMTU7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCRU5HQUxJX0lEID0gMTY7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVVJNVUtISV9JRCA9IDE3OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VKQVJBVElfSUQgPSAxODsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9SSVlBX0lEID0gMTk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUQU1JTF9JRCA9IDIwOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVMVUdVX0lEID0gMjE7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLQU5OQURBX0lEID0gMjI7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQUxBWUFMQU1fSUQgPSAyMzsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJTkhBTEFfSUQgPSAyNDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRIQUlfSUQgPSAyNTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExBT19JRCA9IDI2OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElCRVRBTl9JRCA9IDI3OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVlBTk1BUl9JRCA9IDI4OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VPUkdJQU5fSUQgPSAyOTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhBTkdVTF9KQU1PX0lEID0gMzA7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVEhJT1BJQ19JRCA9IDMxOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0hFUk9LRUVfSUQgPSAzMjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1NfSUQgPSAzMzsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9HSEFNX0lEID0gMzQ7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSVU5JQ19JRCA9IDM1OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0hNRVJfSUQgPSAzNjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PTkdPTElBTl9JRCA9IDM3OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFUSU5fRVhURU5ERURfQURESVRJT05BTF9JRCA9IDM4OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JFRUtfRVhURU5ERURfSUQgPSAzOTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSQUxfUFVOQ1RVQVRJT05fSUQgPSA0MDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUEVSU0NSSVBUU19BTkRfU1VCU0NSSVBUU19JRCA9IDQxOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1VSUkVOQ1lfU1lNQk9MU19JRCA9IDQyOworICAgICAgICAvKioKKyAgICAgICAgICogVW5pY29kZSAzLjIgcmVuYW1lcyB0aGlzIGJsb2NrIHRvICJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgZm9yIAorICAgICAgICAgKiBTeW1ib2xzIi4KKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTUJJTklOR19NQVJLU19GT1JfU1lNQk9MU19JRCA9IDQzOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVUVEVSTElLRV9TWU1CT0xTX0lEID0gNDQ7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfRk9STVNfSUQgPSA0NTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFSUk9XU19JRCA9IDQ2OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUSEVNQVRJQ0FMX09QRVJBVE9SU19JRCA9IDQ3OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlTQ0VMTEFORU9VU19URUNITklDQUxfSUQgPSA0ODsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfUElDVFVSRVNfSUQgPSA0OTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QVElDQUxfQ0hBUkFDVEVSX1JFQ09HTklUSU9OX0lEID0gNTA7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkNMT1NFRF9BTFBIQU5VTUVSSUNTX0lEID0gNTE7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCT1hfRFJBV0lOR19JRCA9IDUyOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkxPQ0tfRUxFTUVOVFNfSUQgPSA1MzsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFT01FVFJJQ19TSEFQRVNfSUQgPSA1NDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JU0NFTExBTkVPVVNfU1lNQk9MU19JRCA9IDU1OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElOR0JBVFNfSUQgPSA1NjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJSQUlMTEVfUEFUVEVSTlNfSUQgPSA1NzsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENKS19SQURJQ0FMU19TVVBQTEVNRU5UX0lEID0gNTg7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLQU5HWElfUkFESUNBTFNfSUQgPSA1OTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlNfSUQgPSA2MDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTl9JRCA9IDYxOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSElSQUdBTkFfSUQgPSA2MjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtBVEFLQU5BX0lEID0gNjM7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCT1BPTU9GT19JRCA9IDY0OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNT19JRCA9IDY1OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0FOQlVOX0lEID0gNjY7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCT1BPTU9GT19FWFRFTkRFRF9JRCA9IDY3OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIU19JRCA9IDY4OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0NPTVBBVElCSUxJVFlfSUQgPSA2OTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0FfSUQgPSA3MDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENKS19VTklGSUVEX0lERU9HUkFQSFNfSUQgPSA3MTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlJX1NZTExBQkxFU19JRCA9IDcyOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWUlfUkFESUNBTFNfSUQgPSA3MzsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhBTkdVTF9TWUxMQUJMRVNfSUQgPSA3NDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhJR0hfU1VSUk9HQVRFU19JRCA9IDc1OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSElHSF9QUklWQVRFX1VTRV9TVVJST0dBVEVTX0lEID0gNzY7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT1dfU1VSUk9HQVRFU19JRCA9IDc3OworICAgICAgICAvKioKKyAgICAgICAgICogU2FtZSBhcyBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUklWQVRFX1VTRS4KKyAgICAgICAgICogVW50aWwgVW5pY29kZSAzLjEuMTsgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2sgbmFtZSB3YXMgIlByaXZhdGUgVXNlIjsKKyAgICAgICAgICogYW5kIG11bHRpcGxlIGNvZGUgcG9pbnQgcmFuZ2VzIGhhZCB0aGlzIGJsb2NrLgorICAgICAgICAgKiBVbmljb2RlIDMuMiByZW5hbWVzIHRoZSBibG9jayBmb3IgdGhlIEJNUCBQVUEgdG8gIlByaXZhdGUgVXNlIEFyZWEiIAorICAgICAgICAgKiBhbmQgYWRkcyBzZXBhcmF0ZSBibG9ja3MgZm9yIHRoZSBzdXBwbGVtZW50YXJ5IFBVQXMuCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUklWQVRFX1VTRV9BUkVBX0lEID0gNzg7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTYW1lIGFzIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSSVZBVEVfVVNFX0FSRUEuCisgICAgICAgICAqIFVudGlsIFVuaWNvZGUgMy4xLjE7IHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrIG5hbWUgd2FzICJQcml2YXRlIFVzZSI7CisgICAgICAgICAqIGFuZCBtdWx0aXBsZSBjb2RlIHBvaW50IHJhbmdlcyBoYWQgdGhpcyBibG9jay4KKyAgICAgICAgICogVW5pY29kZSAzLjIgcmVuYW1lcyB0aGUgYmxvY2sgZm9yIHRoZSBCTVAgUFVBIHRvICJQcml2YXRlIFVzZSBBcmVhIiAKKyAgICAgICAgICogYW5kIGFkZHMgc2VwYXJhdGUgYmxvY2tzIGZvciB0aGUgc3VwcGxlbWVudGFyeSBQVUFzLgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJJVkFURV9VU0VfSUQgPSBQUklWQVRFX1VTRV9BUkVBX0lEOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIU19JRCA9IDc5OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEFCRVRJQ19QUkVTRU5UQVRJT05fRk9STVNfSUQgPSA4MDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQV9JRCA9IDgxOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09NQklOSU5HX0hBTEZfTUFSS1NfSUQgPSA4MjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENKS19DT01QQVRJQklMSVRZX0ZPUk1TX0lEID0gODM7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTTUFMTF9GT1JNX1ZBUklBTlRTX0lEID0gODQ7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0JfSUQgPSA4NTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNQRUNJQUxTX0lEID0gODY7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIQUxGV0lEVEhfQU5EX0ZVTExXSURUSF9GT1JNU19JRCA9IDg3OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0xEX0lUQUxJQ19JRCA9IDg4OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR09USElDX0lEID0gODk7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNFUkVUX0lEID0gOTA7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCWVpBTlRJTkVfTVVTSUNBTF9TWU1CT0xTX0lEID0gOTE7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNVVNJQ0FMX1NZTUJPTFNfSUQgPSA5MjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVEhFTUFUSUNBTF9BTFBIQU5VTUVSSUNfU1lNQk9MU19JRCA9IDkzOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQl9JRCA9IDk0OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgCisgICAgICAgICAgICBDSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlRfSUQgPSA5NTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRBR1NfSUQgPSA5NjsKKyAgICAKKyAgICAgICAgLy8gTmV3IGJsb2NrcyBpbiBVbmljb2RlIDMuMgorICAgIAorICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1lSSUxMSUNfU1VQUExFTUVOVEFSWV9JRCA9IDk3OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFHQUxPR19JRCA9IDk4OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEFOVU5PT19JRCA9IDk5OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlVISURfSUQgPSAxMDA7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUQUdCQU5XQV9JRCA9IDEwMTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQV9JRCA9IDEwMjsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBMRU1FTlRBTF9BUlJPV1NfQV9JRCA9IDEwMzsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBMRU1FTlRBTF9BUlJPV1NfQl9JRCA9IDEwNDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQl9JRCA9IDEwNTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBMRU1FTlRBTF9NQVRIRU1BVElDQUxfT1BFUkFUT1JTX0lEID0gMTA2OworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0FUQUtBTkFfUEhPTkVUSUNfRVhURU5TSU9OU19JRCA9IDEwNzsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBUklBVElPTl9TRUxFQ1RPUlNfSUQgPSAxMDg7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQV9JRCA9IDEwOTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBMRU1FTlRBUllfUFJJVkFURV9VU0VfQVJFQV9CX0lEID0gMTEwOworICAgICAgICAKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPVU5UID0gMTExOworICAgICAgICAKKyAgICAgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKiAKKyAgICAgICAgICogR2V0cyB0aGUgb25seSBpbnN0YW5jZSBvZiB0aGUgVW5pY29kZUJsb2NrIHdpdGggdGhlIGFyZ3VtZW50IElELgorICAgICAgICAgKiBJZiBubyBzdWNoIElEIGV4aXN0cywgYSBJTlZBTElEX0NPREUgVW5pY29kZUJsb2NrIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICAgICAqIEBwYXJhbSBpZCBVbmljb2RlQmxvY2sgSUQKKyAgICAgICAgICogQHJldHVybiB0aGUgb25seSBpbnN0YW5jZSBvZiB0aGUgVW5pY29kZUJsb2NrIHdpdGggdGhlIGFyZ3VtZW50IElECisgICAgICAgICAqICAgICAgICAgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYSBJTlZBTElEX0NPREUgVW5pY29kZUJsb2NrIHdpbGwgYmUgCisgICAgICAgICAqICAgICAgICAgcmV0dXJuZWQuCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIFVuaWNvZGVCbG9jayBnZXRJbnN0YW5jZShpbnQgaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpZCA+IDAgJiYgaWQgPCBCTE9DS1NfLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBCTE9DS1NfW2lkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0NPREU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBVbmljb2RlIGFsbG9jYXRpb24gYmxvY2sgdGhhdCBjb250YWlucyB0aGUgY29kZSBwb2ludCwKKyAgICAgICAgICogb3IgbnVsbCBpZiB0aGUgY29kZSBwb2ludCBpcyBub3QgYSBtZW1iZXIgb2YgYSBkZWZpbmVkIGJsb2NrLgorICAgICAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBiZSB0ZXN0ZWQKKyAgICAgICAgICogQHJldHVybiB0aGUgVW5pY29kZSBhbGxvY2F0aW9uIGJsb2NrIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgcG9pbnQKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZUJsb2NrIG9mKGludCBjaCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNoID4gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfQ09ERTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIFVuaWNvZGVCbG9jay5nZXRJbnN0YW5jZSgoUFJPUEVSVFlfLmdldEFkZGl0aW9uYWwoY2gsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQkxPQ0tfTUFTS18pID4+IEJMT0NLX1NISUZUXyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIElEIG9mIHRoaXMgVW5pY29kZSBibG9jaworICAgICAgICAgKiBAcmV0dXJuIGludGVnZXIgdHlwZSBJRCBvZiB0aGlzIFVuaWNvZGUgYmxvY2sKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SUQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pZF87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFycmF5IG9mIFVuaWNvZGVCbG9ja3MsIGZvciBlYXN5IGFjY2VzcyBpbiBnZXRJbnN0YW5jZShpbnQpCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBVbmljb2RlQmxvY2sgQkxPQ0tTX1tdID0geworICAgICAgICAgICAgICAgIG51bGwsIEJBU0lDX0xBVElOLCAKKyAgICAgICAgICAgICAgICBMQVRJTl8xX1NVUFBMRU1FTlQsIExBVElOX0VYVEVOREVEX0EsIAorICAgICAgICAgICAgICAgIExBVElOX0VYVEVOREVEX0IsIElQQV9FWFRFTlNJT05TLCAKKyAgICAgICAgICAgICAgICBTUEFDSU5HX01PRElGSUVSX0xFVFRFUlMsIENPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUywKKyAgICAgICAgICAgICAgICBHUkVFSywgQ1lSSUxMSUMsCisgICAgICAgICAgICAgICAgQVJNRU5JQU4sIEhFQlJFVywKKyAgICAgICAgICAgICAgICBBUkFCSUMsIFNZUklBQywgCisgICAgICAgICAgICAgICAgVEhBQU5BLCBERVZBTkFHQVJJLCAKKyAgICAgICAgICAgICAgICBCRU5HQUxJLCBHVVJNVUtISSwgCisgICAgICAgICAgICAgICAgR1VKQVJBVEksIE9SSVlBLCAKKyAgICAgICAgICAgICAgICBUQU1JTCwgVEVMVUdVLCAKKyAgICAgICAgICAgICAgICBLQU5OQURBLCBNQUxBWUFMQU0sIAorICAgICAgICAgICAgICAgIFNJTkhBTEEsIFRIQUksIAorICAgICAgICAgICAgICAgIExBTywgVElCRVRBTiwgCisgICAgICAgICAgICAgICAgTVlBTk1BUiwgR0VPUkdJQU4sIAorICAgICAgICAgICAgICAgIEhBTkdVTF9KQU1PLCBFVEhJT1BJQywgCisgICAgICAgICAgICAgICAgQ0hFUk9LRUUsIFVOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1MsCisgICAgICAgICAgICAgICAgT0dIQU0sIFJVTklDLCAKKyAgICAgICAgICAgICAgICBLSE1FUiwgTU9OR09MSUFOLCAKKyAgICAgICAgICAgICAgICBMQVRJTl9FWFRFTkRFRF9BRERJVElPTkFMLCBHUkVFS19FWFRFTkRFRCwgCisgICAgICAgICAgICAgICAgR0VORVJBTF9QVU5DVFVBVElPTiwgU1VQRVJTQ1JJUFRTX0FORF9TVUJTQ1JJUFRTLAorICAgICAgICAgICAgICAgIENVUlJFTkNZX1NZTUJPTFMsIENPTUJJTklOR19NQVJLU19GT1JfU1lNQk9MUywgCisgICAgICAgICAgICAgICAgTEVUVEVSTElLRV9TWU1CT0xTLCBOVU1CRVJfRk9STVMsIAorICAgICAgICAgICAgICAgIEFSUk9XUywgTUFUSEVNQVRJQ0FMX09QRVJBVE9SUywgCisgICAgICAgICAgICAgICAgTUlTQ0VMTEFORU9VU19URUNITklDQUwsIENPTlRST0xfUElDVFVSRVMsCisgICAgICAgICAgICAgICAgT1BUSUNBTF9DSEFSQUNURVJfUkVDT0dOSVRJT04sIEVOQ0xPU0VEX0FMUEhBTlVNRVJJQ1MsCisgICAgICAgICAgICAgICAgQk9YX0RSQVdJTkcsIEJMT0NLX0VMRU1FTlRTLAorICAgICAgICAgICAgICAgIEdFT01FVFJJQ19TSEFQRVMsIE1JU0NFTExBTkVPVVNfU1lNQk9MUywKKyAgICAgICAgICAgICAgICBESU5HQkFUUywgQlJBSUxMRV9QQVRURVJOUywKKyAgICAgICAgICAgICAgICBDSktfUkFESUNBTFNfU1VQUExFTUVOVCwgS0FOR1hJX1JBRElDQUxTLAorICAgICAgICAgICAgICAgIElERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlMsIENKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTiwKKyAgICAgICAgICAgICAgICBISVJBR0FOQSwgS0FUQUtBTkEsIAorICAgICAgICAgICAgICAgIEJPUE9NT0ZPLCBIQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1PLAorICAgICAgICAgICAgICAgIEtBTkJVTiwgQk9QT01PRk9fRVhURU5ERUQsIAorICAgICAgICAgICAgICAgIEVOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFMsIENKS19DT01QQVRJQklMSVRZLAorICAgICAgICAgICAgICAgIENKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0EsIENKS19VTklGSUVEX0lERU9HUkFQSFMsCisgICAgICAgICAgICAgICAgWUlfU1lMTEFCTEVTLCBZSV9SQURJQ0FMUywgCisgICAgICAgICAgICAgICAgSEFOR1VMX1NZTExBQkxFUywgSElHSF9TVVJST0dBVEVTLAorICAgICAgICAgICAgICAgIEhJR0hfUFJJVkFURV9VU0VfU1VSUk9HQVRFUywgTE9XX1NVUlJPR0FURVMsCisgICAgICAgICAgICAgICAgUFJJVkFURV9VU0VfQVJFQSwgQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIUywKKyAgICAgICAgICAgICAgICBBTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUywgQVJBQklDX1BSRVNFTlRBVElPTl9GT1JNU19BLAorICAgICAgICAgICAgICAgIENPTUJJTklOR19IQUxGX01BUktTLCBDSktfQ09NUEFUSUJJTElUWV9GT1JNUywKKyAgICAgICAgICAgICAgICBTTUFMTF9GT1JNX1ZBUklBTlRTLCBBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0IsCisgICAgICAgICAgICAgICAgU1BFQ0lBTFMsIEhBTEZXSURUSF9BTkRfRlVMTFdJRFRIX0ZPUk1TLAorICAgICAgICAgICAgICAgIE9MRF9JVEFMSUMsIEdPVEhJQywgCisgICAgICAgICAgICAgICAgREVTRVJFVCwgQllaQU5USU5FX01VU0lDQUxfU1lNQk9MUywKKyAgICAgICAgICAgICAgICBNVVNJQ0FMX1NZTUJPTFMsIE1BVEhFTUFUSUNBTF9BTFBIQU5VTUVSSUNfU1lNQk9MUywKKyAgICAgICAgICAgICAgICBDSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9CLCAKKyAgICAgICAgICAgICAgICBDSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQsIAorICAgICAgICAgICAgICAgIFRBR1MsIENZUklMTElDX1NVUFBMRU1FTlRBUlksCisgICAgICAgICAgICAgICAgVEFHQUxPRywgSEFOVU5PTywgCisgICAgICAgICAgICAgICAgQlVISUQsIFRBR0JBTldBLCAKKyAgICAgICAgICAgICAgICBNSVNDRUxMQU5FT1VTX01BVEhFTUFUSUNBTF9TWU1CT0xTX0EsIFNVUFBMRU1FTlRBTF9BUlJPV1NfQSwKKyAgICAgICAgICAgICAgICBTVVBQTEVNRU5UQUxfQVJST1dTX0IsIE1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQiwKKyAgICAgICAgICAgICAgICBTVVBQTEVNRU5UQUxfTUFUSEVNQVRJQ0FMX09QRVJBVE9SUywgCisgICAgICAgICAgICAgICAgS0FUQUtBTkFfUEhPTkVUSUNfRVhURU5TSU9OUywKKyAgICAgICAgICAgICAgICBWQVJJQVRJT05fU0VMRUNUT1JTLCBTVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQSwKKyAgICAgICAgICAgICAgICBTVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQgorICAgICAgICB9OyAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIElkZW50aWZpY2F0aW9uIGNvZGUgZm9yIHRoaXMgVW5pY29kZUJsb2NrCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtX2lkXzsKKyAgICAgICAgCisgICAgICAgIC8vIHByaXZhdGUgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVuaWNvZGVCbG9jayBjb25zdHJ1Y3RvcgorICAgICAgICAgKiBAcGFyYW0gbmFtZSBuYW1lIG9mIHRoaXMgVW5pY29kZUJsb2NrCisgICAgICAgICAqIEBwYXJhbSBpZCB1bmlxdWUgaWQgb2YgdGhpcyBVbmljb2RlQmxvY2sKKyAgICAgICAgICogQGV4Y2VwdGlvbiBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiBuYW1lIGlzIDxjb2RlPm51bGw8L2NvZGU+CisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIFVuaWNvZGVCbG9jayhTdHJpbmcgbmFtZSwgaW50IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAgICAgIG1faWRfID0gaWQ7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIC8qKgorICAgICAqIEVhc3QgQXNpYW4gV2lkdGggY29uc3RhbnRzLgorICAgICAqIEBzZWUgVVByb3BlcnR5I0VBU1RfQVNJQU5fV0lEVEgKKyAgICAgKiBAc2VlIFVDaGFyYWN0ZXIjZ2V0SW50UHJvcGVydHlWYWx1ZQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgRWFzdEFzaWFuV2lkdGggCisgICAgeworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVVRSQUwgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFNQklHVU9VUyA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEFMRldJRFRIID0gMjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGVUxMV0lEVEggPSAzOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BUlJPVyA9IDQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0lERSA9IDU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09VTlQgPSA2OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEZWNvbXBvc2l0aW9uIFR5cGUgY29uc3RhbnRzLgorICAgICAqIEBzZWUgVVByb3BlcnR5I0RFQ09NUE9TSVRJT05fVFlQRQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgRGVjb21wb3NpdGlvblR5cGUgCisgICAgeworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PTkUgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTk9OSUNBTCA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09NUEFUID0gMjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDSVJDTEUgPSAzOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTkFMID0gNDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT05UID0gNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGUkFDVElPTiA9IDY7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTCA9IDc7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVNPTEFURUQgPSA4OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1FRElBTCA9IDk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFSUk9XID0gMTA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9CUkVBSyA9IDExOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNNQUxMID0gMTI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1FVQVJFID0gMTM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VCID0gMTQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQRVIgPSAxNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWRVJUSUNBTCA9IDE2OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdJREUgPSAxNzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1VOVCA9IDE4OworICAgIH07CisgICAgCisgICAgLyoqCisgICAgICogSm9pbmluZyBUeXBlIGNvbnN0YW50cy4KKyAgICAgKiBAc2VlIFVQcm9wZXJ0eSNKT0lOSU5HX1RZUEUKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEpvaW5pbmdUeXBlIAorICAgIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05fSk9JTklORyA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSk9JTl9DQVVTSU5HID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEVUFMX0pPSU5JTkcgPSAyOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFRlRfSk9JTklORyA9IDM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUklHSFRfSk9JTklORyA9IDQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNQQVJFTlQgPSA1OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPVU5UID0gNjsKKyAgICB9OworICAgIAorICAgIC8qKgorICAgICAqIEpvaW5pbmcgR3JvdXAgY29uc3RhbnRzLgorICAgICAqIEBzZWUgVVByb3BlcnR5I0pPSU5JTkdfR1JPVVAKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEpvaW5pbmdHcm91cCAKKyAgICB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9fSk9JTklOR19HUk9VUCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUlOID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTEFQSCA9IDI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxFRiA9IDM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkVIID0gNDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCRVRIID0gNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQUwgPSA2OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBTEFUSF9SSVNIID0gNzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFID0gODsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUggPSA5OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTkFMX1NFTUtBVEggPSAxMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHQUYgPSAxMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHQU1BTCA9IDEyOworICAgICAgICAvKiogCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIQUggPSAxMzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIQU1aQV9PTl9IRUhfR09BTCA9IDE0OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhFID0gMTU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEVIID0gMTY7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEVIX0dPQUwgPSAxNzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIRVRIID0gMTg7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0FGID0gMTk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0FQSCA9IDIwOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtOT1RURURfSEVIID0gMjE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFNID0gMjI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFNQURIID0gMjM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVFTSA9IDI0OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTSA9IDI1OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PT04gPSAyNjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU4gPSAyNzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRSA9IDI4OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFBRiA9IDI5OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFBUEggPSAzMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUggPSAzMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVZFUlNFRF9QRSA9IDMyOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNBRCA9IDMzOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNBREhFID0gMzQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VFTiA9IDM1OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFTUtBVEggPSAzNjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSElOID0gMzc7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1dBU0hfS0FGID0gMzg7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1lSSUFDX1dBVyA9IDM5OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRBSCA9IDQwOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRBVyA9IDQxOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFSF9NQVJCVVRBID0gNDI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVUSCA9IDQzOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBVyA9IDQ0OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlFSCA9IDQ1OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlFSF9CQVJSRUUgPSA0NjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZRUhfV0lUSF9UQUlMID0gNDc7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWVVESCA9IDQ4OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlVREhfSEUgPSA0OTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBaQUlOID0gNTA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09VTlQgPSA1MTsKKyAgICB9OworICAgIAorICAgIC8qKgorICAgICAqIExpbmUgQnJlYWsgY29uc3RhbnRzLgorICAgICAqIEBzZWUgVVByb3BlcnR5I0xJTkVfQlJFQUsKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIExpbmVCcmVhayAKKyAgICB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5LTk9XTiA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU1CSUdVT1VTID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTFBIQUJFVElDID0gMjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCUkVBS19CT1RIID0gMzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCUkVBS19BRlRFUiA9IDQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlJFQUtfQkVGT1JFID0gNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQU5EQVRPUllfQlJFQUsgPSA2OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRJTkdFTlRfQlJFQUsgPSA3OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMT1NFX1BVTkNUVUFUSU9OID0gODsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01CSU5JTkdfTUFSSyA9IDk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FSUklBR0VfUkVUVVJOID0gMTA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVhDTEFNQVRJT04gPSAxMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTFVFID0gMTI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSFlQSEVOID0gMTM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSURFT0dSQVBISUMgPSAxNDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNFUEVSQUJMRSA9IDE1OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORklYX05VTUVSSUMgPSAxNjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSU5FX0ZFRUQgPSAxNzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05TVEFSVEVSID0gMTg7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNRVJJQyA9IDE5OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRU5fUFVOQ1RVQVRJT04gPSAyMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1NURklYX05VTUVSSUMgPSAyMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUkVGSVhfTlVNRVJJQyA9IDIyOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVT1RBVElPTiA9IDIzOworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTVBMRVhfQ09OVEVYVCA9IDI0OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUlJPR0FURSA9IDI1OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNQQUNFID0gMjY7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlJFQUtfU1lNQk9MUyA9IDI3OworICAgICAgICAvKioKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFpXU1BBQ0UgPSAyODsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1VOVCA9IDI5OworICAgIH07CisgICAgCisgICAgLyoqCisgICAgICogTnVtZXJpYyBUeXBlIGNvbnN0YW50cy4KKyAgICAgKiBAc2VlIFVQcm9wZXJ0eSNOVU1FUklDX1RZUEUKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIE51bWVyaWNUeXBlIAorICAgIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05FID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNJTUFMID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESUdJVCA9IDI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNRVJJQyA9IDM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09VTlQgPSA0OworICAgIH07IAorICAgICAgICAgICAKKyAgICAvLyBwdWJsaWMgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAorICAgIC8qKiAKKyAgICAgKiBUaGUgbG93ZXN0IFVuaWNvZGUgY29kZSBwb2ludCB2YWx1ZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5fVkFMVUUgPSBVVEYxNi5DT0RFUE9JTlRfTUlOX1ZBTFVFOworCisgICAgLyoqCisgICAgICogVGhlIGhpZ2hlc3QgVW5pY29kZSBjb2RlIHBvaW50IHZhbHVlIChzY2FsYXIgdmFsdWUpIGFjY29yZGluZyB0byB0aGUgCisgICAgICogVW5pY29kZSBTdGFuZGFyZC4gCisgICAgICogVGhpcyBpcyBhIDIxLWJpdCB2YWx1ZSAoMjEgYml0cywgcm91bmRlZCB1cCkuPGJyPgorICAgICAqIFVwLXRvLWRhdGUgVW5pY29kZSBpbXBsZW1lbnRhdGlvbiBvZiBqYXZhLmxhbmcuQ2hhcmFjdGVyLk1JTl9WQUxVRQorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9WQUxVRSA9IFVURjE2LkNPREVQT0lOVF9NQVhfVkFMVUU7IAorICAgICAgCisgICAgLyoqCisgICAgICogVGhlIG1pbmltdW0gdmFsdWUgZm9yIFN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQTEVNRU5UQVJZX01JTl9WQUxVRSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuU1VQUExFTUVOVEFSWV9NSU5fVkFMVUU7CisgICAgICAKKyAgICAvKioKKyAgICAgKiBVbmljb2RlIHZhbHVlIHVzZWQgd2hlbiB0cmFuc2xhdGluZyBpbnRvIFVuaWNvZGUgZW5jb2RpbmcgZm9ybSBhbmQgdGhlcmUgCisgICAgICogaXMgbm8gZXhpc3RpbmcgY2hhcmFjdGVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFUExBQ0VNRU5UX0NIQVIgPSAnXHVGRkZEJzsKKyAgICAJCisgICAgLyoqCisgICAgICogU3BlY2lhbCB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGJ5IGdldFVuaWNvZGVOdW1lcmljVmFsdWUoaW50KSB3aGVuIG5vIAorICAgICAqIG51bWVyaWMgdmFsdWUgaXMgZGVmaW5lZCBmb3IgYSBjb2RlIHBvaW50LgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICogQHNlZSAjZ2V0VW5pY29kZU51bWVyaWNWYWx1ZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIE5PX05VTUVSSUNfVkFMVUUgPSAtMTIzNDU2Nzg5OworICAgIAorICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAorICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGRlY2ltYWwgZGlnaXQgY29kZSBwb2ludC4KKyAgICAgKiA8YnI+VGhpcyBtZXRob2Qgb2JzZXJ2ZXMgdGhlIHNlbWFudGljcyBvZgorICAgICAqIDxjb2RlPmphdmEubGFuZy5DaGFyYWN0ZXIuZGlnaXQoKTwvY29kZT4uICBOb3RlIHRoYXQgdGhpcworICAgICAqIHdpbGwgcmV0dXJuIHBvc2l0aXZlIHZhbHVlcyBmb3IgY29kZSBwb2ludHMgZm9yIHdoaWNoIGlzRGlnaXQKKyAgICAgKiByZXR1cm5zIGZhbHNlLCBqdXN0IGxpa2UgamF2YS5sYW5nLkNoYXJhY3Rlci4KKyAgICAgKiA8YnI+PGVtPlNlbWFudGljIENoYW5nZTo8L2VtPiBJbiByZWxlYXNlIDEuMy4xIGFuZAorICAgICAqIHByaW9yLCB0aGlzIGRpZCBub3QgdHJlYXQgdGhlIEV1cm9wZWFuIGxldHRlcnMgYXMgaGF2aW5nIGEKKyAgICAgKiBkaWdpdCB2YWx1ZSwgYW5kIGFsc28gdHJlYXRlZCBudW1lcmljIGxldHRlcnMgYW5kIG90aGVyIG51bWJlcnMgYXMgCisgICAgICogZGlnaXRzLiAgCisgICAgICogVGhpcyBoYXMgYmVlbiBjaGFuZ2VkIHRvIGNvbmZvcm0gdG8gdGhlIGphdmEgc2VtYW50aWNzLgorICAgICAqIDxicj5BIGNvZGUgcG9pbnQgaXMgYSB2YWxpZCBkaWdpdCBpZiBhbmQgb25seSBpZjoKKyAgICAgKiA8dWw+CisgICAgICogICA8bGk+Y2ggaXMgYSBkZWNpbWFsIGRpZ2l0IG9yIG9uZSBvZiB0aGUgZXVyb3BlYW4gbGV0dGVycywgYW5kCisgICAgICogICA8bGk+dGhlIHZhbHVlIG9mIGNoIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkIHJhZGl4LgorICAgICAqIDwvdWw+CisgICAgICogQHBhcmFtIGNoIHRoZSBjb2RlIHBvaW50IHRvIHF1ZXJ5CisgICAgICogQHBhcmFtIHJhZGl4IHRoZSByYWRpeAorICAgICAqIEByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIGNvZGUgcG9pbnQgaW4gdGhlCisgICAgICogc3BlY2lmaWVkIHJhZGl4LCBvciAtMSBpZiB0aGUgY29kZSBwb2ludCBpcyBub3QgYSBkZWNpbWFsIGRpZ2l0CisgICAgICogb3IgaWYgaXRzIHZhbHVlIGlzIHRvbyBsYXJnZSBmb3IgdGhlIHJhZGl4CisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZGlnaXQoaW50IGNoLCBpbnQgcmFkaXgpCisgICAgeworICAgICAgICAvLyB3aGVuIGNoIGlzIG91dCBvZiBib3VuZHMgZ2V0UHJvcGVydHkgPT0gMAorICAgICAgICBpbnQgcHJvcHMgICAgICAgPSBQUk9QRVJUWV8uZ2V0UHJvcGVydHkoY2gpOworICAgICAgICBpbnQgbnVtZXJpY1R5cGUgPSBnZXROdW1lcmljVHlwZShwcm9wcyk7CisgICAgICAgIAorICAgICAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgICAgIGlmIChudW1lcmljVHlwZSA9PSBOdW1lcmljVHlwZS5ERUNJTUFMKSB7CisgICAgICAgIAkvLyBpZiBwcm9wcyA9PSAwLCBpdCB3aWxsIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCByZXR1cm4gLTEKKyAgICAgICAgCWlmIChpc05vdEV4Y2VwdGlvbkluZGljYXRvcihwcm9wcykpIHsKKyAgICAgICAgICAgIAkvLyBub3QgY29udGFpbmVkIGluIGV4Y2VwdGlvbiBkYXRhCisgICAgICAgICAgICAJcmVzdWx0ID0gVUNoYXJhY3RlclByb3BlcnR5LmdldFNpZ25lZFZhbHVlKHByb3BzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgCWludCBpbmRleCA9IFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRFeGNlcHRpb25JbmRleChwcm9wcyk7CisgICAgICAgICAgICAJaWYgKFBST1BFUlRZXy5oYXNFeGNlcHRpb25WYWx1ZShpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfTlVNRVJJQ19WQUxVRV8pKSB7CisgICAgICAgICAgICAgICAgCXJldHVybiBQUk9QRVJUWV8uZ2V0RXhjZXB0aW9uKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19OVU1FUklDX1ZBTFVFXyk7IAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCA8IDAgJiYgcmFkaXggPiAxMCkgeworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0RXVyb3BlYW5EaWdpdChjaCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQgPCAwIHx8IHJlc3VsdCA+PSByYWRpeCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGRlY2ltYWwgZGlnaXQgY29kZSBwb2ludC4KKyAgICAgKiA8YnI+VGhpcyBpcyBhIGNvbnZlbmllbmNlIG92ZXJsb2FkIG9mIDxjb2RlPmRpZ2l0KGludCwgaW50KTwvY29kZT4gCisgICAgICogdGhhdCBwcm92aWRlcyBhIGRlY2ltYWwgcmFkaXguCisgICAgICogPGJyPjxlbT5TZW1hbnRpYyBDaGFuZ2U6PC9lbT4gSW4gcmVsZWFzZSAxLjMuMSBhbmQgcHJpb3IsIHRoaXMKKyAgICAgKiB0cmVhdGVkIG51bWVyaWMgbGV0dGVycyBhbmQgb3RoZXIgbnVtYmVycyBhcyBkaWdpdHMuICBUaGlzIGhhcworICAgICAqIGJlZW4gY2hhbmdlZCB0byBjb25mb3JtIHRvIHRoZSBqYXZhIHNlbWFudGljcy4KKyAgICAgKiBAcGFyYW0gY2ggdGhlIGNvZGUgcG9pbnQgdG8gcXVlcnkKKyAgICAgKiBAcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBjb2RlIHBvaW50LAorICAgICAqIG9yIC0xIGlmIHRoZSBjb2RlIHBvaW50IGlzIG5vdCBhIGRlY2ltYWwgZGlnaXQgb3IgaWYgaXRzCisgICAgICogdmFsdWUgaXMgdG9vIGxhcmdlIGZvciBhIGRlY2ltYWwgcmFkaXggCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZGlnaXQoaW50IGNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpZ2l0KGNoLCBERUNJTUFMX1JBRElYXyk7CisgICAgfQorCisgICAgLyoqIAorICAgICAqIFJldHVybnMgdGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIGNvZGUgcG9pbnQgYXMgYSBub25uZWdhdGl2ZSAKKyAgICAgKiBpbnRlZ2VyLgorICAgICAqIDxicj5JZiB0aGUgY29kZSBwb2ludCBkb2VzIG5vdCBoYXZlIGEgbnVtZXJpYyB2YWx1ZSwgdGhlbiAtMSBpcyByZXR1cm5lZC4gCisgICAgICogPGJyPgorICAgICAqIElmIHRoZSBjb2RlIHBvaW50IGhhcyBhIG51bWVyaWMgdmFsdWUgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgYSAKKyAgICAgKiBub25uZWdhdGl2ZSBpbnRlZ2VyIChmb3IgZXhhbXBsZSwgYSBmcmFjdGlvbmFsIHZhbHVlKSwgdGhlbiAtMiBpcyAKKyAgICAgKiByZXR1cm5lZC4KKyAgICAgKiBAcGFyYW0gY2ggdGhlIGNvZGUgcG9pbnQgdG8gcXVlcnkKKyAgICAgKiBAcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIG9mIHRoZSBjb2RlIHBvaW50LCBvciAtMSBpZiBpdCBoYXMgbm8gbnVtZXJpYyAKKyAgICAgKiB2YWx1ZSwgb3IgLTIgaWYgaXQgaGFzIGEgbnVtZXJpYyB2YWx1ZSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhIAorICAgICAqIG5vbm5lZ2F0aXZlIGludGVnZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXROdW1lcmljVmFsdWUoaW50IGNoKQorICAgIHsKKyAgICAgICAgaW50IHByb3BzID0gUFJPUEVSVFlfLmdldFByb3BlcnR5KGNoKTsKKyAgICAgICAgaW50IG51bWVyaWNUeXBlID0gZ2V0TnVtZXJpY1R5cGUocHJvcHMpOworICAgICAgICAKKyAgICAgICAgaW50IHJlc3VsdCA9IC0xOworICAgICAgICBpZiAobnVtZXJpY1R5cGUgPT0gTnVtZXJpY1R5cGUuREVDSU1BTCkgeworICAgICAgICAgICAgcmVzdWx0ID0gLTI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG51bWVyaWNUeXBlICE9IE51bWVyaWNUeXBlLk5PTkUpIHsKKyAgICAgICAgICAgIC8vIGlmIHByb3BzID09IDAsIGl0IHdpbGwganVzdCBmYWxsIHRocm91Z2ggYW5kIHJldHVybiAtMQorICAgICAgICAgICAgaWYgKGlzTm90RXhjZXB0aW9uSW5kaWNhdG9yKHByb3BzKSkgeworICAgICAgICAgICAgICAgIC8vIG5vdCBjb250YWluZWQgaW4gZXhjZXB0aW9uIGRhdGEKKyAgICAgICAgICAgICAgICByZXR1cm4gVUNoYXJhY3RlclByb3BlcnR5LmdldFNpZ25lZFZhbHVlKHByb3BzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGluZGV4ID0gVUNoYXJhY3RlclByb3BlcnR5LmdldEV4Y2VwdGlvbkluZGV4KHByb3BzKTsKKyAgICAgICAgICAgIGlmICghUFJPUEVSVFlfLmhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX0RFTk9NSU5BVE9SX1ZBTFVFXykgJiYgCisgICAgICAgICAgICAgICAgUFJPUEVSVFlfLmhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19OVU1FUklDX1ZBTFVFXykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUFJPUEVSVFlfLmdldEV4Y2VwdGlvbihpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19OVU1FUklDX1ZBTFVFXyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBpbnQgZXVyb3BlYW5udW1lcmljID0gZ2V0RXVyb3BlYW5EaWdpdChjaCk7CisgICAgICAgICAgICBpZiAoZXVyb3BlYW5udW1lcmljID49IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXVyb3BlYW5udW1lcmljOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD5HZXQgdGhlIG51bWVyaWMgdmFsdWUgZm9yIGEgVW5pY29kZSBjb2RlIHBvaW50IGFzIGRlZmluZWQgaW4gdGhlIAorICAgICAqIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlLjwvcD4KKyAgICAgKiA8cD5BICJkb3VibGUiIHJldHVybiB0eXBlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNvbWUgbnVtZXJpYyB2YWx1ZXMgYXJlIAorICAgICAqIGZyYWN0aW9ucywgbmVnYXRpdmUsIG9yIHRvbyBsYXJnZSBmb3IgaW50LjwvcD4KKyAgICAgKiA8cD5Gb3IgY2hhcmFjdGVycyB3aXRob3V0IGFueSBudW1lcmljIHZhbHVlcyBpbiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgCisgICAgICogRGF0YWJhc2UsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gTk9fTlVNRVJJQ19WQUxVRS48L3A+CisgICAgICogPHA+PGVtPkFQSSBDaGFuZ2U6PC9lbT4gSW4gcmVsZWFzZSAyLjIgYW5kIHByaW9yLCB0aGlzIEFQSSBoYXMgYQorICAgICAqIHJldHVybiB0eXBlIGludCBhbmQgcmV0dXJucyAtMSB3aGVuIHRoZSBhcmd1bWVudCBjaCBkb2VzIG5vdCBoYXZlIGEgCisgICAgICogY29ycmVzcG9uZGluZyBudW1lcmljIHZhbHVlLiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgdG8gc3luY2ggd2l0aCBJQ1U0QworICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gY2ggQ29kZSBwb2ludCB0byBnZXQgdGhlIG51bWVyaWMgdmFsdWUgZm9yLgorICAgICAqIEByZXR1cm4gbnVtZXJpYyB2YWx1ZSBvZiBjaCwgb3IgTk9fTlVNRVJJQ19WQUxVRSBpZiBub25lIGlzIGRlZmluZWQuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGRvdWJsZSBnZXRVbmljb2RlTnVtZXJpY1ZhbHVlKGludCBjaCkKKyAgICB7CisgICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYyB2ZXJzaW9uIGRvdWJsZSB1X2dldE51bWVyaWNWYWx1ZShVQ2hhcjMyIGMpCisgICAgICAgIGludCBwcm9wcyA9IFBST1BFUlRZXy5nZXRQcm9wZXJ0eShjaCk7CisgICAgICAgIGludCBudW1lcmljVHlwZSA9IGdldE51bWVyaWNUeXBlKHByb3BzKTsKKyAgICAgICAgaWYgKG51bWVyaWNUeXBlID4gTnVtZXJpY1R5cGUuTk9ORSAmJiBudW1lcmljVHlwZSA8IE51bWVyaWNUeXBlLkNPVU5UKSB7CisgICAgICAgICAgICBpZiAoaXNOb3RFeGNlcHRpb25JbmRpY2F0b3IocHJvcHMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRTaWduZWRWYWx1ZShwcm9wcyk7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gVUNoYXJhY3RlclByb3BlcnR5LmdldEV4Y2VwdGlvbkluZGV4KHByb3BzKTsKKyAgICAgICAgICAgICAgICBib29sZWFuIG5leCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJvb2xlYW4gZGV4ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZG91YmxlIG51bWVyYXRvciA9IDA7CisgICAgICAgICAgICAgICAgaWYgKFBST1BFUlRZXy5oYXNFeGNlcHRpb25WYWx1ZShpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19OVU1FUklDX1ZBTFVFXykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG51bSA9IFBST1BFUlRZXy5nZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX05VTUVSSUNfVkFMVUVfKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHNwZWNpYWwgdmFsdWVzIGZvciBodWdlIG51bWJlcnMgdGhhdCBhcmUgCisgICAgICAgICAgICAgICAgICAgIC8vIHBvd2VycyBvZiB0ZW4uIGdlbnByb3BzL3N0b3JlLmMgZG9jdW1lbnRzOgorICAgICAgICAgICAgICAgICAgICAvLyBpZiBudW1lcmljVmFsdWUgPSAweDdmZmZmZjAwICsgeCB0aGVuIAorICAgICAgICAgICAgICAgICAgICAvLyBudW1lcmljVmFsdWUgPSAxMCBeIHgKKyAgICAgICAgICAgICAgICAgICAgaWYgKG51bSA+PSBOVU1FUkFUT1JfUE9XRVJfTElNSVRfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBudW0gJj0gMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwXnggd2l0aG91dCBtYXRoLmgKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciA9IE1hdGgucG93KDEwLCBudW0pOworICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciA9IG51bTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBuZXggPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkb3VibGUgZGVub21pbmF0b3IgPSAwOworICAgICAgICAgICAgICAgIGlmIChQUk9QRVJUWV8uaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfREVOT01JTkFUT1JfVkFMVUVfKSkgeworICAgICAgICAgICAgICAgICAgICBkZW5vbWluYXRvciA9IFBST1BFUlRZXy5nZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfREVOT01JTkFUT1JfVkFMVUVfKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gZmFzdGVyIHBhdGggbm90IGluIGMKKyAgICAgICAgICAgICAgICAgICAgaWYgKG51bWVyYXRvciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGV4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobmV4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWVyYXRvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRleCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMSAvIGRlbm9taW5hdG9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTk9fTlVNRVJJQ19WQUxVRTsKKyAgICB9CisgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSB2YWx1ZSBpbmRpY2F0aW5nIGEgY29kZSBwb2ludCdzIFVuaWNvZGUgY2F0ZWdvcnkuCisgICAgICogVXAtdG8tZGF0ZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIG9mIGphdmEubGFuZy5DaGFyYWN0ZXIuZ2V0VHlwZSgpIAorICAgICAqIGV4Y2VwdCBmb3IgdGhlIGFib3ZlIG1lbnRpb25lZCBjb2RlIHBvaW50cyB0aGF0IGhhZCB0aGVpciBjYXRlZ29yeSAKKyAgICAgKiBjaGFuZ2VkLjxicj4KKyAgICAgKiBSZXR1cm4gcmVzdWx0cyBhcmUgY29uc3RhbnRzIGZyb20gdGhlIGludGVyZmFjZSAKKyAgICAgKiA8YSBocmVmPVVDaGFyYWN0ZXJDYXRlZ29yeS5odG1sPlVDaGFyYWN0ZXJDYXRlZ29yeTwvYT4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB3aG9zZSB0eXBlIGlzIHRvIGJlIGRldGVybWluZWQKKyAgICAgKiBAcmV0dXJuIGNhdGVnb3J5IHdoaWNoIGlzIGEgdmFsdWUgb2YgVUNoYXJhY3RlckNhdGVnb3J5CisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0VHlwZShpbnQgY2gpCisgICAgeworICAgICAgICAvLyB3aGVuIGNoIGlzIG91dCBvZiBib3VuZHMgZ2V0UHJvcGVydHkgPT0gMAorICAgICAgICAvLyByZXR1cm4gVUNoYXJhY3RlclByb3BlcnR5LlRZUEVfTUFTSyAmIFBST1BFUlRZXy5nZXRQcm9wZXJ0eShjaCk7CisgICAgICAgIHJldHVybiBQUk9QRVJUWV8uZ2V0UHJvcGVydHkoY2gpICYgVUNoYXJhY3RlclByb3BlcnR5LlRZUEVfTUFTSzsKKyAgICB9CisgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiBhIGNvZGUgcG9pbnQgaGFzIGEgZGVmaW5lZCBtZWFuaW5nIGluIHRoZSB1cC10by1kYXRlIAorICAgICAqIFVuaWNvZGUgc3RhbmRhcmQuCisgICAgICogRS5nLiBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIHRob3VnaCBhbGxvY2F0ZWQgc3BhY2UgYXJlIG5vdCBkZWZpbmVkIGluIAorICAgICAqIFVuaWNvZGUgeWV0Ljxicj4KKyAgICAgKiBVcC10by1kYXRlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gb2YgamF2YS5sYW5nLkNoYXJhY3Rlci5pc0RlZmluZWQoKQorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHRvIGJlIGRldGVybWluZWQgaWYgaXQgaXMgZGVmaW5lZCBpbiB0aGUgbW9zdCAKKyAgICAgKiAgICAgICAgY3VycmVudCB2ZXJzaW9uIG9mIFVuaWNvZGUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBjb2RlIHBvaW50IGlzIGRlZmluZWQgaW4gdW5pY29kZQorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlZmluZWQoaW50IGNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldFR5cGUoY2gpICE9IDA7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiBhIGNvZGUgcG9pbnQgaXMgYSBKYXZhIGRpZ2l0LgorICAgICAqIDxicj5UaGlzIG1ldGhvZCBvYnNlcnZlcyB0aGUgc2VtYW50aWNzIG9mCisgICAgICogPGNvZGU+amF2YS5sYW5nLkNoYXJhY3Rlci5pc0RpZ2l0KCk8L2NvZGU+LiBJdCByZXR1cm5zIHRydWUgZm9yIGRlY2ltYWwgCisgICAgICogZGlnaXRzIG9ubHkuCisgICAgICogPGJyPjxlbT5TZW1hbnRpYyBDaGFuZ2U6PC9lbT4gSW4gcmVsZWFzZSAxLjMuMSBhbmQgcHJpb3IsIHRoaXMgdHJlYXRlZCAKKyAgICAgKiBudW1lcmljIGxldHRlcnMgYW5kIG90aGVyIG51bWJlcnMgYXMgZGlnaXRzLiAKKyAgICAgKiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgdG8gY29uZm9ybSB0byB0aGUgamF2YSBzZW1hbnRpY3MuCisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQgdG8gcXVlcnkKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBjb2RlIHBvaW50IGlzIGEgZGlnaXQgCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGlnaXQoaW50IGNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldFR5cGUoY2gpID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5ERUNJTUFMX0RJR0lUX05VTUJFUjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBzcGVjaWZpZWQgY29kZSBwb2ludCBpcyBhbiBJU08gY29udHJvbCBjaGFyYWN0ZXIuCisgICAgICogQSBjb2RlIHBvaW50IGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gSVNPIGNvbnRyb2wgY2hhcmFjdGVyIGlmIGl0IGlzIGluIAorICAgICAqIHRoZSByYW5nZSAmIzkydTAwMDAgdGhyb3VnaCAmIzkydTAwMUYgb3IgaW4gdGhlIHJhbmdlICYjOTJ1MDA3RiB0aHJvdWdoIAorICAgICAqICYjOTJ1MDA5Ri48YnI+CisgICAgICogVXAtdG8tZGF0ZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIG9mIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNJU09Db250cm9sKCkKKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYW4gSVNPIGNvbnRyb2wgY2hhcmFjdGVyCisgICAgICogQHJldHVybiB0cnVlIGlmIGNvZGUgcG9pbnQgaXMgYSBJU08gY29udHJvbCBjaGFyYWN0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNJU09Db250cm9sKGludCBjaCkKKyAgICB7CisgICAgICAgIHJldHVybiBjaCA+PSAwICYmIGNoIDw9IEFQUExJQ0FUSU9OX1BST0dSQU1fQ09NTUFORF8gJiYgCisgICAgICAgICAgICAoKGNoIDw9IFVOSVRfU0VQQVJBVE9SXykgfHwgKGNoID49IERFTEVURV8pKTsKKyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBzcGVjaWZpZWQgY29kZSBwb2ludCBpcyBhIGxldHRlci4KKyAgICAgKiBVcC10by1kYXRlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gb2YgamF2YS5sYW5nLkNoYXJhY3Rlci5pc0xldHRlcigpCisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgbGV0dGVyCisgICAgICogQHJldHVybiB0cnVlIGlmIGNvZGUgcG9pbnQgaXMgYSBsZXR0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMZXR0ZXIoaW50IGNoKQorICAgIHsKKyAgICAgICAgaW50IGNhdCA9IGdldFR5cGUoY2gpOworICAgICAgICAvLyBpZiBwcm9wcyA9PSAwLCBpdCB3aWxsIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCByZXR1cm4gZmFsc2UKKyAgICAgICAgcmV0dXJuIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVVBQRVJDQVNFX0xFVFRFUiB8fCAKKyAgICAgICAgICAgIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTE9XRVJDQVNFX0xFVFRFUiB8fCAKKyAgICAgICAgICAgIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVElUTEVDQVNFX0xFVFRFUiB8fCAKKyAgICAgICAgICAgIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTU9ESUZJRVJfTEVUVEVSIHx8CisgICAgICAgICAgICBjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk9USEVSX0xFVFRFUjsKKyAgICB9CisgICAgICAgICAgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYSBsZXR0ZXIgb3IgZGlnaXQuCisgICAgICogTm90ZSB0aGlzIG1ldGhvZCwgdW5saWtlIGphdmEubGFuZy5DaGFyYWN0ZXIgZG9lcyBub3QgcmVnYXJkIHRoZSBhc2NpaSAKKyAgICAgKiBjaGFyYWN0ZXJzICdBJyAtICdaJyBhbmQgJ2EnIC0gJ3onIGFzIGRpZ2l0cy4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBsZXR0ZXIgb3IgYSBkaWdpdAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBjb2RlIHBvaW50IGlzIGEgbGV0dGVyIG9yIGEgZGlnaXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMZXR0ZXJPckRpZ2l0KGludCBjaCkKKyAgICB7CisgICAgICAgIGludCBjYXQgPSBnZXRUeXBlKGNoKTsKKyAgICAgICAgcmV0dXJuIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVVBQRVJDQVNFX0xFVFRFUiAKKyAgICAgICAgICAgICAgIHx8IGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTE9XRVJDQVNFX0xFVFRFUiAKKyAgICAgICAgICAgICAgIHx8IGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVElUTEVDQVNFX0xFVFRFUiAKKyAgICAgICAgICAgICAgIHx8IGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTU9ESUZJRVJfTEVUVEVSIAorICAgICAgICAgICAgICAgfHwgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5PVEhFUl9MRVRURVIgCisgICAgICAgICAgICAgICB8fCBjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkRFQ0lNQUxfRElHSVRfTlVNQkVSOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYSBsb3dlcmNhc2UgY2hhcmFjdGVyLgorICAgICAqIFVuaWNvZGVEYXRhIG9ubHkgY29udGFpbnMgY2FzZSBtYXBwaW5ncyBmb3IgY29kZSBwb2ludHMgd2hlcmUgdGhleSBhcmUgCisgICAgICogb25lLXRvLW9uZSBtYXBwaW5nczsgaXQgYWxzbyBvbWl0cyBpbmZvcm1hdGlvbiBhYm91dCBjb250ZXh0LXNlbnNpdGl2ZSAKKyAgICAgKiBjYXNlIG1hcHBpbmdzLjxicj4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVW5pY29kZSBjYXNlIG1hcHBpbmcgCisgICAgICogcGxlYXNlIHJlZmVyIHRvIHRoZSAKKyAgICAgKiA8YSBocmVmPWh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMjEvPlRlY2huaWNhbCByZXBvcnQgCisgICAgICogIzIxPC9hPi48YnI+CisgICAgICogVXAtdG8tZGF0ZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIG9mIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNMb3dlckNhc2UoKQorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHRvIGRldGVybWluZSBpZiBpdCBpcyBpbiBsb3dlcmNhc2UKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgY29kZSBwb2ludCBpcyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMb3dlckNhc2UoaW50IGNoKQorICAgIHsKKyAgICAgICAgLy8gaWYgcHJvcHMgPT0gMCwgaXQgd2lsbCBqdXN0IGZhbGwgdGhyb3VnaCBhbmQgcmV0dXJuIGZhbHNlCisgICAgICAgIHJldHVybiBnZXRUeXBlKGNoKSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTE9XRVJDQVNFX0xFVFRFUjsKKyAgICB9CisgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIuCisgICAgICogQSBjb2RlIHBvaW50IGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaWYgYW5kIG9ubHkKKyAgICAgKiBpZiBpdCBzYXRpc2ZpZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6CisgICAgICogPHVsPgorICAgICAqIDxsaT4gSXQgaXMgYSBVbmljb2RlIHNwYWNlIHNlcGFyYXRvciAoY2F0ZWdvcnkgIlpzIiksIGJ1dCBpcyBub3QKKyAgICAgKiAgICAgIGEgbm8tYnJlYWsgc3BhY2UgKCYjOTJ1MDBBMCBvciAmIzkydTIwMkYgb3IgJiM5MnVGRUZGKS4KKyAgICAgKiA8bGk+IEl0IGlzIGEgVW5pY29kZSBsaW5lIHNlcGFyYXRvciAoY2F0ZWdvcnkgIlpsIikuCisgICAgICogPGxpPiBJdCBpcyBhIFVuaWNvZGUgcGFyYWdyYXBoIHNlcGFyYXRvciAoY2F0ZWdvcnkgIlpwIikuCisgICAgICogPGxpPiBJdCBpcyAmIzkydTAwMDksIEhPUklaT05UQUwgVEFCVUxBVElPTi4gCisgICAgICogPGxpPiBJdCBpcyAmIzkydTAwMEEsIExJTkUgRkVFRC4gCisgICAgICogPGxpPiBJdCBpcyAmIzkydTAwMEIsIFZFUlRJQ0FMIFRBQlVMQVRJT04uIAorICAgICAqIDxsaT4gSXQgaXMgJiM5MnUwMDBDLCBGT1JNIEZFRUQuIAorICAgICAqIDxsaT4gSXQgaXMgJiM5MnUwMDBELCBDQVJSSUFHRSBSRVRVUk4uIAorICAgICAqIDxsaT4gSXQgaXMgJiM5MnUwMDFDLCBGSUxFIFNFUEFSQVRPUi4gCisgICAgICogPGxpPiBJdCBpcyAmIzkydTAwMUQsIEdST1VQIFNFUEFSQVRPUi4gCisgICAgICogPGxpPiBJdCBpcyAmIzkydTAwMUUsIFJFQ09SRCBTRVBBUkFUT1IuIAorICAgICAqIDxsaT4gSXQgaXMgJiM5MnUwMDFGLCBVTklUIFNFUEFSQVRPUi4gCisgICAgICogPC91bD4KKyAgICAgKgorICAgICAqIFVwLXRvLWRhdGUgVW5pY29kZSBpbXBsZW1lbnRhdGlvbiBvZiBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZSgpLgorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHRvIGRldGVybWluZSBpZiBpdCBpcyBhIHdoaXRlIHNwYWNlCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgY29kZSBwb2ludCBpcyBhIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1doaXRlc3BhY2UoaW50IGNoKQorICAgIHsKKyAgICAgICAgaW50IGNhdCA9IGdldFR5cGUoY2gpOworICAgICAgICAvLyBleGNsdWRlIG5vLWJyZWFrIHNwYWNlcworICAgICAgICAvLyBpZiBwcm9wcyA9PSAwLCBpdCB3aWxsIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCByZXR1cm4gZmFsc2UKKyAgICAgICAgcmV0dXJuIChjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlNQQUNFX1NFUEFSQVRPUiB8fCAKKyAgICAgICAgICAgICAgICBjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkxJTkVfU0VQQVJBVE9SIHx8CisgICAgICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5QQVJBR1JBUEhfU0VQQVJBVE9SKSAmJiAKKyAgICAgICAgICAgICAgICAoY2ggIT0gTk9fQlJFQUtfU1BBQ0VfKSAmJiAKKyAgICAgICAgICAgICAgICAoY2ggIT0gTkFSUk9XX05PX0JSRUFLX1NQQUNFXykgJiYgCisgICAgICAgICAgICAgICAgKGNoICE9IFpFUk9fV0lEVEhfTk9fQlJFQUtfU1BBQ0VfKSB8fAorICAgICAgICAgICAgICAgIC8vIFRBQiBWVCBMRiBGRiBDUiBGUyBHUyBSUyBVUyBOTCBhcmUgYWxsIGNvbnRyb2wgY2hhcmFjdGVycworICAgICAgICAgICAgICAgIC8vIHRoYXQgYXJlIHdoaXRlIHNwYWNlcy4KKyAgICAgICAgICAgICAgICAoY2ggPj0gMHg5ICYmIGNoIDw9IDB4ZCkgfHwgKGNoID49IDB4MWMgJiYgY2ggPD0gMHgxZik7CisgICAgfQorICAgICAgIAorICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IGlzIGEgVW5pY29kZSBzcGVjaWZpZWQgc3BhY2UgCisgICAgICogY2hhcmFjdGVyLCBpLmUuIGlmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIGNhdGVnb3J5IFpzLCBabCBhbmQgWnAuCisgICAgICogVXAtdG8tZGF0ZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIG9mIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNTcGFjZUNoYXIoKS4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBzcGFjZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYSBzcGFjZSBjaGFyYWN0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTcGFjZUNoYXIoaW50IGNoKQorICAgIHsKKyAgICAgICAgaW50IGNhdCA9IGdldFR5cGUoY2gpOworICAgICAgICAvLyBpZiBwcm9wcyA9PSAwLCBpdCB3aWxsIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCByZXR1cm4gZmFsc2UKKyAgICAgICAgcmV0dXJuIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuU1BBQ0VfU0VQQVJBVE9SIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MSU5FX1NFUEFSQVRPUiB8fAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5QQVJBR1JBUEhfU0VQQVJBVE9SOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IGlzIGEgdGl0bGVjYXNlIGNoYXJhY3Rlci4KKyAgICAgKiBVbmljb2RlRGF0YSBvbmx5IGNvbnRhaW5zIGNhc2UgbWFwcGluZ3MgZm9yIGNvZGUgcG9pbnRzIHdoZXJlIHRoZXkgYXJlIAorICAgICAqIG9uZS10by1vbmUgbWFwcGluZ3M7IGl0IGFsc28gb21pdHMgaW5mb3JtYXRpb24gYWJvdXQgY29udGV4dC1zZW5zaXRpdmUgCisgICAgICogY2FzZSBtYXBwaW5ncy48YnI+CisgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVW5pY29kZSBjYXNlIG1hcHBpbmcgcGxlYXNlIHJlZmVyIHRvIHRoZSAKKyAgICAgKiA8YSBocmVmPWh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMjEvPgorICAgICAqIFRlY2huaWNhbCByZXBvcnQgIzIxPC9hPi48YnI+CisgICAgICogVXAtdG8tZGF0ZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIG9mIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNUaXRsZUNhc2UoKS4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgaW4gdGl0bGUgY2FzZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYSB0aXRsZWNhc2UgY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVGl0bGVDYXNlKGludCBjaCkKKyAgICB7CisgICAgICAgIGludCBjYXQgPSBnZXRUeXBlKGNoKTsKKyAgICAgICAgLy8gaWYgcHJvcHMgPT0gMCwgaXQgd2lsbCBqdXN0IGZhbGwgdGhyb3VnaCBhbmQgcmV0dXJuIGZhbHNlCisgICAgICAgIHJldHVybiBjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlRJVExFQ0FTRV9MRVRURVI7CisgICAgfQorICAgICAgIAorICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IG1heSBiZSBhbnkgcGFydCBvZiBhIFVuaWNvZGUgCisgICAgICogaWRlbnRpZmllciBvdGhlciB0aGFuIHRoZSBzdGFydGluZyBjaGFyYWN0ZXIuCisgICAgICogQSBjb2RlIHBvaW50IG1heSBiZSBwYXJ0IG9mIGEgVW5pY29kZSBpZGVudGlmaWVyIGlmIGFuZCBvbmx5IGlmIGl0IGlzIAorICAgICAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAKKyAgICAgKiA8dWw+CisgICAgICogPGxpPiBMdSBVcHBlcmNhc2UgbGV0dGVyCisgICAgICogPGxpPiBMbCBMb3dlcmNhc2UgbGV0dGVyCisgICAgICogPGxpPiBMdCBUaXRsZWNhc2UgbGV0dGVyCisgICAgICogPGxpPiBMbSBNb2RpZmllciBsZXR0ZXIKKyAgICAgKiA8bGk+IExvIE90aGVyIGxldHRlcgorICAgICAqIDxsaT4gTmwgTGV0dGVyIG51bWJlcgorICAgICAqIDxsaT4gUGMgQ29ubmVjdGluZyBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIgCisgICAgICogPGxpPiBOZCBkZWNpbWFsIG51bWJlcgorICAgICAqIDxsaT4gTWMgU3BhY2luZyBjb21iaW5pbmcgbWFyayAKKyAgICAgKiA8bGk+IE1uIE5vbi1zcGFjaW5nIG1hcmsgCisgICAgICogPGxpPiBDZiBmb3JtYXR0aW5nIGNvZGUKKyAgICAgKiA8L3VsPgorICAgICAqIFVwLXRvLWRhdGUgVW5pY29kZSBpbXBsZW1lbnRhdGlvbiBvZiAKKyAgICAgKiBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzVW5pY29kZUlkZW50aWZpZXJQYXJ0KCkuPGJyPgorICAgICAqIFNlZSA8YSBocmVmPWh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyOC8+VVRSICM4PC9hPi4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBkZXRlcm1pbmUgaWYgaXMgY2FuIGJlIHBhcnQgb2YgYSBVbmljb2RlIAorICAgICAqICAgICAgICBpZGVudGlmaWVyCisgICAgICogQHJldHVybiB0cnVlIGlmIGNvZGUgcG9pbnQgaXMgYW55IGNoYXJhY3RlciBiZWxvbmdpbmcgYSB1bmljb2RlIAorICAgICAqICAgICAgICAgaWRlbnRpZmllciBzdWZmaXggYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VuaWNvZGVJZGVudGlmaWVyUGFydChpbnQgY2gpCisgICAgeworICAgICAgICBpbnQgY2F0ID0gZ2V0VHlwZShjaCk7CisgICAgICAgIC8vIGlmIHByb3BzID09IDAsIGl0IHdpbGwganVzdCBmYWxsIHRocm91Z2ggYW5kIHJldHVybiBmYWxzZQorICAgICAgICByZXR1cm4gY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VUFBFUkNBU0VfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MT1dFUkNBU0VfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5USVRMRUNBU0VfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5NT0RJRklFUl9MRVRURVIgfHwKKyAgICAgICAgICAgIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuT1RIRVJfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MRVRURVJfTlVNQkVSIHx8CisgICAgICAgICAgICBjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkNPTk5FQ1RPUl9QVU5DVFVBVElPTiB8fAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5ERUNJTUFMX0RJR0lUX05VTUJFUiB8fAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5DT01CSU5JTkdfU1BBQ0lOR19NQVJLIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5OT05fU1BBQ0lOR19NQVJLIHx8IAorICAgICAgICAgICAgLy8gY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5GT1JNQVQ7CisgICAgICAgICAgICBpc0lkZW50aWZpZXJJZ25vcmFibGUoY2gpOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgcGVybWlzc2libGUgYXMgdGhlIGZpcnN0IAorICAgICAqIGNoYXJhY3RlciBpbiBhIFVuaWNvZGUgaWRlbnRpZmllci4KKyAgICAgKiBBIGNvZGUgcG9pbnQgbWF5IHN0YXJ0IGEgVW5pY29kZSBpZGVudGlmaWVyIGlmIGl0IGlzIG9mIHR5cGUgZWl0aGVyIAorICAgICAqIDx1bD4gCisgICAgICogPGxpPiBMdSBVcHBlcmNhc2UgbGV0dGVyCisgICAgICogPGxpPiBMbCBMb3dlcmNhc2UgbGV0dGVyCisgICAgICogPGxpPiBMdCBUaXRsZWNhc2UgbGV0dGVyCisgICAgICogPGxpPiBMbSBNb2RpZmllciBsZXR0ZXIKKyAgICAgKiA8bGk+IExvIE90aGVyIGxldHRlcgorICAgICAqIDxsaT4gTmwgTGV0dGVyIG51bWJlcgorICAgICAqIDwvdWw+CisgICAgICogVXAtdG8tZGF0ZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIG9mIAorICAgICAqIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmllclN0YXJ0KCkuPGJyPgorICAgICAqIFNlZSA8YSBocmVmPWh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyOC8+VVRSICM4PC9hPi4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIHN0YXJ0IGEgVW5pY29kZSBpZGVudGlmaWVyCisgICAgICogQHJldHVybiB0cnVlIGlmIGNvZGUgcG9pbnQgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBiZWxvbmdpbmcgYSB1bmljb2RlIAorICAgICAqICAgICAgICAgICAgICBpZGVudGlmaWVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVW5pY29kZUlkZW50aWZpZXJTdGFydChpbnQgY2gpCisgICAgeworICAgICAgICBpbnQgY2F0ID0gZ2V0VHlwZShjaCk7CisgICAgICAgIC8vIGlmIHByb3BzID09IDAsIGl0IHdpbGwganVzdCBmYWxsIHRocm91Z2ggYW5kIHJldHVybiBmYWxzZQorICAgICAgICByZXR1cm4gY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VUFBFUkNBU0VfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MT1dFUkNBU0VfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5USVRMRUNBU0VfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5NT0RJRklFUl9MRVRURVIgfHwKKyAgICAgICAgICAgIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuT1RIRVJfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MRVRURVJfTlVNQkVSOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IHNob3VsZCBiZSByZWdhcmRlZCBhcyBhbiAKKyAgICAgKiBpZ25vcmFibGUgY2hhcmFjdGVyIGluIGEgVW5pY29kZSBpZGVudGlmaWVyLgorICAgICAqIEEgY2hhcmFjdGVyIGlzIGlnbm9yYWJsZSBpbiB0aGUgVW5pY29kZSBzdGFuZGFyZCBpZiBpdCBpcyBvZiB0aGUgdHlwZSAKKyAgICAgKiBDZiwgRm9ybWF0dGluZyBjb2RlLjxicj4KKyAgICAgKiBVcC10by1kYXRlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gb2YgCisgICAgICogamF2YS5sYW5nLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJJZ25vcmFibGUoKS48YnI+CisgICAgICogU2VlIDxhIGhyZWY9aHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3JlcG9ydHMvdHI4Lz5VVFIgIzg8L2E+LgorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHRvIGJlIGRldGVybWluZWQgaWYgaXQgY2FuIGJlIGlnbm9yZWQgaW4gYSBVbmljb2RlIAorICAgICAqICAgICAgICBpZGVudGlmaWVyLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29kZSBwb2ludCBpcyBpZ25vcmFibGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNJZGVudGlmaWVySWdub3JhYmxlKGludCBjaCkKKyAgICB7CisgICAgICAgIC8vIHNlZSBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzSWRlbnRpZmllcklnbm9yYWJsZSgpIG9uIHJhbmdlIG9mIAorICAgICAgICAvLyBpZ25vcmFibGUgY2hhcmFjdGVycy4KKyAgICAgICAgcmV0dXJuIGNoIDw9IDggfHwgKGNoID49IDB4ZSAmJiBjaCA8PSAweDFiKSAKKyAgICAgICAgICAgICAgIHx8IChjaCA+PSAweDdmICYmIGNoIDw9IDB4OWYpIAorICAgICAgICAgICAgICAgfHwgKGNoID49IDB4MjAwYSAmJiBjaCA8PSAweDIwMGYpIAorICAgICAgICAgICAgICAgfHwgKGNoID49IDB4MjA2YSAmJiBjaCA8PSAweDIwNmYpIHx8IGNoID09IDB4ZmVmZjsKKyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYW4gdXBwZXJjYXNlIGNoYXJhY3Rlci4KKyAgICAgKiBVbmljb2RlRGF0YSBvbmx5IGNvbnRhaW5zIGNhc2UgbWFwcGluZ3MgZm9yIGNvZGUgcG9pbnQgd2hlcmUgdGhleSBhcmUgCisgICAgICogb25lLXRvLW9uZSBtYXBwaW5nczsgaXQgYWxzbyBvbWl0cyBpbmZvcm1hdGlvbiBhYm91dCBjb250ZXh0LXNlbnNpdGl2ZSAKKyAgICAgKiBjYXNlIG1hcHBpbmdzLjxicj4gCisgICAgICogRm9yIGxhbmd1YWdlIHNwZWNpZmljIGNhc2UgY29udmVyc2lvbiBiZWhhdmlvciwgdXNlIAorICAgICAqIHRvVXBwZXJDYXNlKGxvY2FsZSwgc3RyKS4gPGJyPgorICAgICAqIEZvciBleGFtcGxlLCB0aGUgY2FzZSBjb252ZXJzaW9uIGZvciBkb3QtbGVzcyBpIGFuZCBkb3R0ZWQgSSBpbiBUdXJraXNoLAorICAgICAqIG9yIGZvciBmaW5hbCBzaWdtYSBpbiBHcmVlay4KKyAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBVbmljb2RlIGNhc2UgbWFwcGluZyBwbGVhc2UgcmVmZXIgdG8gdGhlIAorICAgICAqIDxhIGhyZWY9aHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3JlcG9ydHMvdHIyMS8+CisgICAgICogVGVjaG5pY2FsIHJlcG9ydCAjMjE8L2E+Ljxicj4KKyAgICAgKiBVcC10by1kYXRlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gb2YgamF2YS5sYW5nLkNoYXJhY3Rlci5pc1VwcGVyQ2FzZSgpLgorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHRvIGRldGVybWluZSBpZiBpdCBpcyBpbiB1cHBlcmNhc2UKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvZGUgcG9pbnQgaXMgYW4gdXBwZXJjYXNlIGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VwcGVyQ2FzZShpbnQgY2gpCisgICAgeworICAgICAgICBpbnQgY2F0ID0gZ2V0VHlwZShjaCk7CisgICAgICAgIC8vIGlmIHByb3BzID09IDAsIGl0IHdpbGwganVzdCBmYWxsIHRocm91Z2ggYW5kIHJldHVybiBmYWxzZQorICAgICAgICByZXR1cm4gY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VUFBFUkNBU0VfTEVUVEVSOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoqCisgICAgICogVGhlIGdpdmVuIGNvZGUgcG9pbnQgaXMgbWFwcGVkIHRvIGl0cyBsb3dlcmNhc2UgZXF1aXZhbGVudDsgaWYgdGhlIGNvZGUgCisgICAgICogcG9pbnQgaGFzIG5vIGxvd2VyY2FzZSBlcXVpdmFsZW50LCB0aGUgY29kZSBwb2ludCBpdHNlbGYgaXMgcmV0dXJuZWQuCisgICAgICogVW5pY29kZURhdGEgb25seSBjb250YWlucyBjYXNlIG1hcHBpbmdzIGZvciBjb2RlIHBvaW50IHdoZXJlIHRoZXkgYXJlIAorICAgICAqIG9uZS10by1vbmUgbWFwcGluZ3M7IGl0IGFsc28gb21pdHMgaW5mb3JtYXRpb24gYWJvdXQgY29udGV4dC1zZW5zaXRpdmUgCisgICAgICogY2FzZSBtYXBwaW5ncy48YnI+IAorICAgICAqIEZvciBsYW5ndWFnZSBzcGVjaWZpYyBjYXNlIGNvbnZlcnNpb24gYmVoYXZpb3IsIHVzZSAKKyAgICAgKiB0b0xvd2VyQ2FzZShsb2NhbGUsIHN0cikuIDxicj4KKyAgICAgKiBGb3IgZXhhbXBsZSwgdGhlIGNhc2UgY29udmVyc2lvbiBmb3IgZG90LWxlc3MgaSBhbmQgZG90dGVkIEkgaW4gVHVya2lzaCwKKyAgICAgKiBvciBmb3IgZmluYWwgc2lnbWEgaW4gR3JlZWsuCisgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVW5pY29kZSBjYXNlIG1hcHBpbmcgcGxlYXNlIHJlZmVyIHRvIHRoZSAKKyAgICAgKiA8YSBocmVmPWh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMjEvPgorICAgICAqIFRlY2huaWNhbCByZXBvcnQgIzIxPC9hPi48YnI+CisgICAgICogVXAtdG8tZGF0ZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIG9mIGphdmEubGFuZy5DaGFyYWN0ZXIudG9Mb3dlckNhc2UoKQorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHdob3NlIGxvd2VyY2FzZSBlcXVpdmFsZW50IGlzIHRvIGJlIHJldHJpZXZlZAorICAgICAqIEByZXR1cm4gdGhlIGxvd2VyY2FzZSBlcXVpdmFsZW50IGNvZGUgcG9pbnQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCB0b0xvd2VyQ2FzZShpbnQgY2gpCisgICAgeworICAgICAgICAvLyB3aGVuIGNoIGlzIG91dCBvZiBib3VuZHMgZ2V0UHJvcGVydHkgPT0gMCAgIAorICAgICAgICBpbnQgcHJvcHMgPSBQUk9QRVJUWV8uZ2V0UHJvcGVydHkoY2gpOworICAgICAgICAvLyBpZiBwcm9wcyA9PSAwLCBpdCB3aWxsIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCByZXR1cm4gaXRzZWxmCisgICAgICAgIGlmKGlzTm90RXhjZXB0aW9uSW5kaWNhdG9yKHByb3BzKSkgeworICAgICAgICAgICAgaW50IGNhdCA9IFVDaGFyYWN0ZXJQcm9wZXJ0eS5UWVBFX01BU0sgJiBwcm9wczsKKyAgICAgICAgICAgIGlmIChjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlVQUEVSQ0FTRV9MRVRURVIgfHwgCisgICAgICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5USVRMRUNBU0VfTEVUVEVSKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoICsgVUNoYXJhY3RlclByb3BlcnR5LmdldFNpZ25lZFZhbHVlKHByb3BzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSAKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGluZGV4ID0gVUNoYXJhY3RlclByb3BlcnR5LmdldEV4Y2VwdGlvbkluZGV4KHByb3BzKTsKKyAgICAgICAgICAgIGlmIChQUk9QRVJUWV8uaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19MT1dFUkNBU0VfKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBQUk9QRVJUWV8uZ2V0RXhjZXB0aW9uKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19MT1dFUkNBU0VfKTsgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGFyZ3VtZW50IGNvZGUgcG9pbnQgYW5kIHJldHVybnMgYSBTdHJpbmcgb2JqZWN0IHJlcHJlc2VudGluZyAKKyAgICAgKiB0aGUgY29kZSBwb2ludCdzIHZhbHVlIGluIFVURjE2IGZvcm1hdC4KKyAgICAgKiBUaGUgcmVzdWx0IGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpcyAxIGZvciBub24tc3VwcGxlbWVudGFyeSBjb2RlIAorICAgICAqIHBvaW50cywgMiBvdGhlcndpc2UuPGJyPgorICAgICAqIGNvbS5pYm0uaWJtLmljdS5VVEYxNiBjYW4gYmUgdXNlZCB0byBwYXJzZSBTdHJpbmdzIGdlbmVyYXRlZCBieSB0aGlzIAorICAgICAqIGZ1bmN0aW9uLjxicj4KKyAgICAgKiBVcC10by1kYXRlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gb2YgamF2YS5sYW5nLkNoYXJhY3Rlci50b1N0cmluZygpCisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQKKyAgICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29kZSBwb2ludCwgbnVsbCBpZiBjb2RlIHBvaW50IGlzIG5vdAorICAgICAqICAgICAgICAgZGVmaW5lZCBpbiB1bmljb2RlCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoaW50IGNoKQorICAgIHsKKyAgICAgICAgaWYgKGNoIDwgTUlOX1ZBTFVFIHx8IGNoID4gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNoIDwgU1VQUExFTUVOVEFSWV9NSU5fVkFMVUUpIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcudmFsdWVPZigoY2hhciljaCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoVVRGMTYuZ2V0TGVhZFN1cnJvZ2F0ZShjaCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKFVURjE2LmdldFRyYWlsU3Vycm9nYXRlKGNoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgY29kZSBwb2ludCBhcmd1bWVudCB0byB0aXRsZWNhc2UuCisgICAgICogVW5pY29kZURhdGEgb25seSBjb250YWlucyBjYXNlIG1hcHBpbmdzIGZvciBjb2RlIHBvaW50cyB3aGVyZSB0aGV5IGFyZSAKKyAgICAgKiBvbmUtdG8tb25lIG1hcHBpbmdzOyBpdCBhbHNvIG9taXRzIGluZm9ybWF0aW9uIGFib3V0IGNvbnRleHQtc2Vuc2l0aXZlIAorICAgICAqIGNhc2UgbWFwcGluZ3MuPGJyPiAKKyAgICAgKiBUaGVyZSBhcmUgb25seSBmb3VyIFVuaWNvZGUgY2hhcmFjdGVycyB0aGF0IGFyZSB0cnVseSB0aXRsZWNhc2UgZm9ybXMKKyAgICAgKiB0aGF0IGFyZSBkaXN0aW5jdCBmcm9tIHVwcGVyY2FzZSBmb3Jtcy4KKyAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBVbmljb2RlIGNhc2UgbWFwcGluZyBwbGVhc2UgcmVmZXIKKyAgICAgKiB0byB0aGUgPGEgaHJlZj1odHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjIxLz4KKyAgICAgKiBUZWNobmljYWwgcmVwb3J0ICMyMTwvYT4uPGJyPgorICAgICAqIElmIG5vIHRpdGxlY2FzZSBpcyBhdmFpbGFibGUsIHRoZSB1cHBlcmNhc2UgaXMgcmV0dXJuZWQuIElmIG5vIHVwcGVyY2FzZSAKKyAgICAgKiBpcyBhdmFpbGFibGUsIHRoZSBjb2RlIHBvaW50IGl0c2VsZiBpcyByZXR1cm5lZC48YnI+CisgICAgICogVXAtdG8tZGF0ZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIG9mIGphdmEubGFuZy5DaGFyYWN0ZXIudG9UaXRsZUNhc2UoKQorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50ICB3aG9zZSB0aXRsZSBjYXNlIGlzIHRvIGJlIHJldHJpZXZlZAorICAgICAqIEByZXR1cm4gdGl0bGVjYXNlIGNvZGUgcG9pbnQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCB0b1RpdGxlQ2FzZShpbnQgY2gpCisgICAgeworICAgICAgICAvLyB3aGVuIGNoIGlzIG91dCBvZiBib3VuZHMgZ2V0UHJvcGVydHkgPT0gMAorICAgICAgICBpbnQgcHJvcHMgPSBQUk9QRVJUWV8uZ2V0UHJvcGVydHkoY2gpOworICAgICAgICAvLyBpZiBwcm9wcyA9PSAwLCBpdCB3aWxsIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCByZXR1cm4gaXRzZWxmCisgICAgICAgIGlmIChpc05vdEV4Y2VwdGlvbkluZGljYXRvcihwcm9wcykpIHsKKyAgICAgICAgICAgIGlmICgoVUNoYXJhY3RlclByb3BlcnR5LlRZUEVfTUFTSyAmIHByb3BzKSA9PSAKKyAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTE9XRVJDQVNFX0xFVFRFUikgeworICAgICAgICAgICAgICAgIC8vIGhlcmUsIHRpdGxlY2FzZSBpcyBzYW1lIGFzIHVwcGVyY2FzZQorICAgICAgICAgICAgICAgIHJldHVybiBjaCAtIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRTaWduZWRWYWx1ZShwcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IGluZGV4ID0gVUNoYXJhY3RlclByb3BlcnR5LmdldEV4Y2VwdGlvbkluZGV4KHByb3BzKTsKKyAgICAgICAgICAgIGlmIChQUk9QRVJUWV8uaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1RJVExFQ0FTRV8pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFBST1BFUlRZXy5nZXRFeGNlcHRpb24oaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfVElUTEVDQVNFXyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBoZXJlLCB0aXRsZWNhc2UgaXMgc2FtZSBhcyB1cHBlcmNhc2UKKyAgICAgICAgICAgICAgICBpZiAoUFJPUEVSVFlfLmhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfVVBQRVJDQVNFXykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBST1BFUlRZXy5nZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1VQUEVSQ0FTRV8pOyAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoOyAvLyBubyBtYXBwaW5nIC0gcmV0dXJuIGMgaXRzZWxmCisgICAgfQorICAgICAgIAorICAgIC8qKgorICAgICAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXIgYXJndW1lbnQgdG8gdXBwZXJjYXNlLgorICAgICAqIFVuaWNvZGVEYXRhIG9ubHkgY29udGFpbnMgY2FzZSBtYXBwaW5ncyBmb3IgY2hhcmFjdGVycyB3aGVyZSB0aGV5IGFyZSAKKyAgICAgKiBvbmUtdG8tb25lIG1hcHBpbmdzOyBpdCBhbHNvIG9taXRzIGluZm9ybWF0aW9uIGFib3V0IGNvbnRleHQtc2Vuc2l0aXZlIAorICAgICAqIGNhc2UgbWFwcGluZ3MuPGJyPiAKKyAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBVbmljb2RlIGNhc2UgbWFwcGluZyBwbGVhc2UgcmVmZXIKKyAgICAgKiB0byB0aGUgPGEgaHJlZj1odHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjIxLz4KKyAgICAgKiBUZWNobmljYWwgcmVwb3J0ICMyMTwvYT4uPGJyPgorICAgICAqIElmIG5vIHVwcGVyY2FzZSBpcyBhdmFpbGFibGUsIHRoZSBjaGFyYWN0ZXIgaXRzZWxmIGlzIHJldHVybmVkLjxicj4KKyAgICAgKiBVcC10by1kYXRlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gb2YgamF2YS5sYW5nLkNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpCisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQgd2hvc2UgdXBwZXJjYXNlIGlzIHRvIGJlIHJldHJpZXZlZAorICAgICAqIEByZXR1cm4gdXBwZXJjYXNlIGNvZGUgcG9pbnQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCB0b1VwcGVyQ2FzZShpbnQgY2gpCisgICAgeworICAgICAgICAvLyB3aGVuIGNoIGlzIG91dCBvZiBib3VuZHMgZ2V0UHJvcGVydHkgPT0gMAorICAgICAgICBpbnQgcHJvcHMgPSBQUk9QRVJUWV8uZ2V0UHJvcGVydHkoY2gpOworICAgICAgICAvLyBpZiBwcm9wcyA9PSAwLCBpdCB3aWxsIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCByZXR1cm4gaXRzZWxmCisgICAgICAgIGlmIChpc05vdEV4Y2VwdGlvbkluZGljYXRvcihwcm9wcykpIHsKKyAgICAgICAgICAgIGlmICgoVUNoYXJhY3RlclByb3BlcnR5LlRZUEVfTUFTSyAmIHByb3BzKSA9PSAKKyAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyQ2F0ZWdvcnkuTE9XRVJDQVNFX0xFVFRFUikgeworICAgICAgICAgICAgICAgIC8vIGhlcmUsIHRpdGxlY2FzZSBpcyBzYW1lIGFzIHVwcGVyY2FzZSAqLworICAgICAgICAgICAgICAgIHJldHVybiBjaCAtIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRTaWduZWRWYWx1ZShwcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGluZGV4ID0gVUNoYXJhY3RlclByb3BlcnR5LmdldEV4Y2VwdGlvbkluZGV4KHByb3BzKTsKKyAgICAgICAgICAgIGlmIChQUk9QRVJUWV8uaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1VQUEVSQ0FTRV8pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFBST1BFUlRZXy5nZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX1VQUEVSQ0FTRV8pOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2g7IC8vIG5vIG1hcHBpbmcgLSByZXR1cm4gYyBpdHNlbGYKKyAgICB9CisgICAgICAgCisgICAgLy8gZXh0cmEgbWV0aG9kcyBub3QgaW4gamF2YS5sYW5nLkNoYXJhY3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIAorICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgdGhlIGNvZGUgcG9pbnQgaXMgYSBzdXBwbGVtZW50YXJ5IGNoYXJhY3Rlci4KKyAgICAgKiBBIGNvZGUgcG9pbnQgaXMgYSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlciBpZiBhbmQgb25seSBpZiBpdCBpcyBncmVhdGVyIAorICAgICAqIHRoYW4gPGEgaHJlZj0jU1VQUExFTUVOVEFSWV9NSU5fVkFMVUU+U1VQUExFTUVOVEFSWV9NSU5fVkFMVUU8L2E+CisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQgdG8gYmUgZGV0ZXJtaW5lZCBpZiBpdCBpcyBpbiB0aGUgc3VwcGxlbWVudGFyeSAKKyAgICAgKiAgICAgICAgcGxhbmUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgY29kZSBwb2ludCBpcyBhIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3VwcGxlbWVudGFyeShpbnQgY2gpCisgICAgeworICAgICAgICByZXR1cm4gY2ggPj0gVUNoYXJhY3Rlci5TVVBQTEVNRU5UQVJZX01JTl9WQUxVRSAmJiAKKyAgICAgICAgICAgIGNoIDw9IFVDaGFyYWN0ZXIuTUFYX1ZBTFVFOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgdGhlIGNvZGUgcG9pbnQgaXMgaW4gdGhlIEJNUCBwbGFuZS4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBiZSBkZXRlcm1pbmVkIGlmIGl0IGlzIG5vdCBhIHN1cHBsZW1lbnRhcnkgCisgICAgICogICAgICAgIGNoYXJhY3RlcgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBjb2RlIHBvaW50IGlzIG5vdCBhIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQk1QKGludCBjaCkgCisgICAgeworICAgICAgICByZXR1cm4gKGNoID49IDAgJiYgY2ggPD0gTEFTVF9DSEFSX01BU0tfKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IGlzIGEgcHJpbnRhYmxlIGNoYXJhY3RlciAKKyAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIFVuaWNvZGUgc3RhbmRhcmQuCisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQgdG8gYmUgZGV0ZXJtaW5lZCBpZiBpdCBpcyBwcmludGFibGUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvZGUgcG9pbnQgaXMgYSBwcmludGFibGUgY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUHJpbnRhYmxlKGludCBjaCkKKyAgICB7CisgICAgICAgIGludCBjYXQgPSBnZXRUeXBlKGNoKTsKKyAgICAgICAgLy8gaWYgcHJvcHMgPT0gMCwgaXQgd2lsbCBqdXN0IGZhbGwgdGhyb3VnaCBhbmQgcmV0dXJuIGZhbHNlCisgICAgICAgIHJldHVybiAoY2F0ICE9IFVDaGFyYWN0ZXJDYXRlZ29yeS5VTkFTU0lHTkVEICYmIAorICAgICAgICAgICAgY2F0ICE9IFVDaGFyYWN0ZXJDYXRlZ29yeS5DT05UUk9MICYmIAorICAgICAgICAgICAgY2F0ICE9IFVDaGFyYWN0ZXJDYXRlZ29yeS5GT1JNQVQgJiYKKyAgICAgICAgICAgIGNhdCAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuUFJJVkFURV9VU0UgJiYKKyAgICAgICAgICAgIGNhdCAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuU1VSUk9HQVRFICYmCisgICAgICAgICAgICBjYXQgIT0gVUNoYXJhY3RlckNhdGVnb3J5LkdFTkVSQUxfT1RIRVJfVFlQRVMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgb2YgYmFzZSBmb3JtLgorICAgICAqIEEgY29kZSBwb2ludCBvZiBiYXNlIGZvcm0gZG9lcyBub3QgZ3JhcGhpY2FsbHkgY29tYmluZSB3aXRoIHByZWNlZGluZyAKKyAgICAgKiBjaGFyYWN0ZXJzLCBhbmQgaXMgbmVpdGhlciBhIGNvbnRyb2wgbm9yIGEgZm9ybWF0IGNoYXJhY3Rlci4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBiZSBkZXRlcm1pbmVkIGlmIGl0IGlzIG9mIGJhc2UgZm9ybQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29kZSBwb2ludCBpcyBvZiBiYXNlIGZvcm0KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNCYXNlRm9ybShpbnQgY2gpCisgICAgeworICAgICAgICBpbnQgY2F0ID0gZ2V0VHlwZShjaCk7CisgICAgICAgIC8vIGlmIHByb3BzID09IDAsIGl0IHdpbGwganVzdCBmYWxsIHRocm91Z2ggYW5kIHJldHVybiBmYWxzZQorICAgICAgICByZXR1cm4gY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5ERUNJTUFMX0RJR0lUX05VTUJFUiB8fCAKKyAgICAgICAgICAgIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuT1RIRVJfTlVNQkVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MRVRURVJfTlVNQkVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5VUFBFUkNBU0VfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5MT1dFUkNBU0VfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5USVRMRUNBU0VfTEVUVEVSIHx8CisgICAgICAgICAgICBjYXQgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk1PRElGSUVSX0xFVFRFUiB8fCAKKyAgICAgICAgICAgIGNhdCA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuT1RIRVJfTEVUVEVSIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5OT05fU1BBQ0lOR19NQVJLIHx8IAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5FTkNMT1NJTkdfTUFSSyB8fAorICAgICAgICAgICAgY2F0ID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5DT01CSU5JTkdfU1BBQ0lOR19NQVJLOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIEJpZGlyZWN0aW9uIHByb3BlcnR5IG9mIGEgY29kZSBwb2ludC4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMHgwMDQxIChsZXR0ZXIgQSkgaGFzIHRoZSBMRUZUX1RPX1JJR0hUIGRpcmVjdGlvbmFsIAorICAgICAqIHByb3BlcnR5Ljxicj4KKyAgICAgKiBSZXN1bHQgcmV0dXJuZWQgYmVsb25ncyB0byB0aGUgaW50ZXJmYWNlIAorICAgICAqIDxhIGhyZWY9VUNoYXJhY3RlckRpcmVjdGlvbi5odG1sPlVDaGFyYWN0ZXJEaXJlY3Rpb248L2E+CisgICAgICogQHBhcmFtIGNoIHRoZSBjb2RlIHBvaW50IHRvIGJlIGRldGVybWluZWQgaXRzIGRpcmVjdGlvbgorICAgICAqIEByZXR1cm4gZGlyZWN0aW9uIGNvbnN0YW50IGZyb20gVUNoYXJhY3RlckRpcmVjdGlvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXREaXJlY3Rpb24oaW50IGNoKQorICAgIHsKKyAgICAgICAgLy8gd2hlbiBjaCBpcyBvdXQgb2YgYm91bmRzIGdldFByb3BlcnR5ID09IDAKKyAgICAgICAgcmV0dXJuIChQUk9QRVJUWV8uZ2V0UHJvcGVydHkoY2gpID4+IEJJRElfU0hJRlRfKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBCSURJX01BU0tfQUZURVJfU0hJRlRfOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgY29kZSBwb2ludCBoYXMgdGhlICJtaXJyb3JlZCIgcHJvcGVydHkuCisgICAgICogVGhpcyBwcm9wZXJ0eSBpcyBzZXQgZm9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgY29tbW9ubHkgdXNlZCBpbgorICAgICAqIFJpZ2h0LVRvLUxlZnQgY29udGV4dHMgYW5kIG5lZWQgdG8gYmUgZGlzcGxheWVkIHdpdGggYSAibWlycm9yZWQiCisgICAgICogZ2x5cGguCisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQgd2hvc2UgbWlycm9yIGlzIHRvIGJlIGRldGVybWluZWQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvZGUgcG9pbnQgaGFzIHRoZSAibWlycm9yZWQiIHByb3BlcnR5CisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTWlycm9yZWQoaW50IGNoKQorICAgIHsKKyAgICAgICAgLy8gd2hlbiBjaCBpcyBvdXQgb2YgYm91bmRzIGdldFByb3BlcnR5ID09IDAKKyAgICAgICAgcmV0dXJuIChQUk9QRVJUWV8uZ2V0UHJvcGVydHkoY2gpICYgVUNoYXJhY3RlclByb3BlcnR5Lk1JUlJPUl9NQVNLKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1hcHMgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IHRvIGEgIm1pcnJvci1pbWFnZSIgY29kZSBwb2ludC4KKyAgICAgKiBGb3IgY29kZSBwb2ludHMgd2l0aCB0aGUgIm1pcnJvcmVkIiBwcm9wZXJ0eSwgaW1wbGVtZW50YXRpb25zIHNvbWV0aW1lcyAKKyAgICAgKiBuZWVkIGEgInBvb3IgbWFuJ3MiIG1hcHBpbmcgdG8gYW5vdGhlciBjb2RlIHBvaW50IHN1Y2ggdGhhdCB0aGUgZGVmYXVsdCAKKyAgICAgKiBnbHlwaCBtYXkgc2VydmUgYXMgdGhlIG1pcnJvci1pbWFnZSBvZiB0aGUgZGVmYXVsdCBnbHlwaCBvZiB0aGUgCisgICAgICogc3BlY2lmaWVkIGNvZGUgcG9pbnQuPGJyPiAKKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGV4dCBjb252ZXJzaW9uIHRvIGFuZCBmcm9tIGNvZGVwYWdlcyB3aXRoIHZpc3VhbCAKKyAgICAgKiBvcmRlciwgYW5kIGZvciBkaXNwbGF5cyB3aXRob3V0IGdseXBoIHNlbGVjdGlvbiBjYXBhYmlsaXRpZXMuCisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQgd2hvc2UgbWlycm9yIGlzIHRvIGJlIHJldHJpZXZlZAorICAgICAqIEByZXR1cm4gYW5vdGhlciBjb2RlIHBvaW50IHRoYXQgbWF5IHNlcnZlIGFzIGEgbWlycm9yLWltYWdlIHN1YnN0aXR1dGUsIAorICAgICAqICAgICAgICAgb3IgY2ggaXRzZWxmIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbWFwcGluZyBvciBjaCBkb2VzIG5vdCBoYXZlIHRoZSAKKyAgICAgKiAgICAgICAgICJtaXJyb3JlZCIgcHJvcGVydHkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRNaXJyb3IoaW50IGNoKQorICAgIHsKKyAgICAgICAgLy8gd2hlbiBjaCBpcyBvdXQgb2YgYm91bmRzIGdldFByb3BlcnR5ID09IDAKKyAgICAgICAgaW50IHByb3BzID0gUFJPUEVSVFlfLmdldFByb3BlcnR5KGNoKTsKKyAgICAgICAgLy8gbWlycm9yZWQgLSB0aGUgdmFsdWUgaXMgYSBtaXJyb3Igb2Zmc2V0CisgICAgICAgIC8vIGlmIHByb3BzID09IDAsIGl0IHdpbGwganVzdCBmYWxsIHRocm91Z2ggYW5kIHJldHVybiBmYWxzZQorICAgICAgICBpZiAoKHByb3BzICYgVUNoYXJhY3RlclByb3BlcnR5Lk1JUlJPUl9NQVNLKSAhPSAwKSB7CisgICAgICAgICAgICBpZihpc05vdEV4Y2VwdGlvbkluZGljYXRvcihwcm9wcykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2ggKyBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0U2lnbmVkVmFsdWUocHJvcHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0RXhjZXB0aW9uSW5kZXgocHJvcHMpOworICAgICAgICAgICAgICAgIGlmIChQUk9QRVJUWV8uaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19NSVJST1JfTUFQUElOR18pKSAKKyAgICAgICAgICAgICAgICByZXR1cm4gUFJPUEVSVFlfLmdldEV4Y2VwdGlvbihpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19NSVJST1JfTUFQUElOR18pOyAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjaDsKKyAgICB9CisgICAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjb21iaW5pbmcgY2xhc3Mgb2YgdGhlIGFyZ3VtZW50IGNvZGVwb2ludAorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHdob3NlIGNvbWJpbmluZyBpcyB0byBiZSByZXRyaWV2ZWQKKyAgICAgKiBAcmV0dXJuIHRoZSBjb21iaW5pbmcgY2xhc3Mgb2YgdGhlIGNvZGVwb2ludAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldENvbWJpbmluZ0NsYXNzKGludCBjaCkKKyAgICB7CisgICAgCWlmIChjaCA8IE1JTl9WQUxVRSB8fCBjaCA+IE1BWF9WQUxVRSkgeworICAgIAkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29kZXBvaW50IG91dCBvZiBib3VuZHMiKTsKKyAgICAJfQorICAgIAlyZXR1cm4gTm9ybWFsaXplckltcGwuZ2V0Q29tYmluaW5nQ2xhc3MoY2gpOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIEEgY29kZSBwb2ludCBpcyBpbGxlZ2FsIGlmIGFuZCBvbmx5IGlmCisgICAgICogPHVsPgorICAgICAqIDxsaT4gT3V0IG9mIGJvdW5kcywgbGVzcyB0aGFuIDAgb3IgZ3JlYXRlciB0aGFuIFVDaGFyYWN0ZXIuTUFYX1ZBTFVFCisgICAgICogPGxpPiBBIHN1cnJvZ2F0ZSB2YWx1ZSwgMHhEODAwIHRvIDB4REZGRgorICAgICAqIDxsaT4gTm90LWEtY2hhcmFjdGVyLCBoYXZpbmcgdGhlIGZvcm0gMHggeHhGRkZGIG9yIDB4IHh4RkZGRQorICAgICAqIDwvdWw+CisgICAgICogTm90ZTogbGVnYWwgZG9lcyBub3QgbWVhbiB0aGF0IGl0IGlzIGFzc2lnbmVkIGluIHRoaXMgdmVyc2lvbiBvZiBVbmljb2RlLgorICAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50IHRvIGRldGVybWluZSBpZiBpdCBpcyBhIGxlZ2FsIGNvZGUgcG9pbnQgYnkgaXRzZWxmCisgICAgICogQHJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIGxlZ2FsLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMZWdhbChpbnQgY2gpIAorICAgIHsKKyAgICAgICAgaWYgKGNoIDwgTUlOX1ZBTFVFKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoIDwgVVRGMTYuU1VSUk9HQVRFX01JTl9WQUxVRSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoIDw9IFVURjE2LlNVUlJPR0FURV9NQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoVUNoYXJhY3RlclV0aWxpdHkuaXNOb25DaGFyYWN0ZXIoY2gpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChjaCA8PSBNQVhfVkFMVUUpOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIEEgc3RyaW5nIGlzIGxlZ2FsIGlmZiBhbGwgaXRzIGNvZGUgcG9pbnRzIGFyZSBsZWdhbC4KKyAgICAgKiBBIGNvZGUgcG9pbnQgaXMgaWxsZWdhbCBpZiBhbmQgb25seSBpZgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+IE91dCBvZiBib3VuZHMsIGxlc3MgdGhhbiAwIG9yIGdyZWF0ZXIgdGhhbiBVQ2hhcmFjdGVyLk1BWF9WQUxVRQorICAgICAqIDxsaT4gQSBzdXJyb2dhdGUgdmFsdWUsIDB4RDgwMCB0byAweERGRkYKKyAgICAgKiA8bGk+IE5vdC1hLWNoYXJhY3RlciwgaGF2aW5nIHRoZSBmb3JtIDB4IHh4RkZGRiBvciAweCB4eEZGRkUKKyAgICAgKiA8L3VsPgorICAgICAqIE5vdGU6IGxlZ2FsIGRvZXMgbm90IG1lYW4gdGhhdCBpdCBpcyBhc3NpZ25lZCBpbiB0aGlzIHZlcnNpb24gb2YgVW5pY29kZS4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBsZWdhbCBjb2RlIHBvaW50IGJ5IGl0c2VsZgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiBsZWdhbC4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTGVnYWwoU3RyaW5nIHN0cikgCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgaW50IGNvZGVwb2ludDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb2RlcG9pbnQgPSBVVEYxNi5jaGFyQXQoc3RyLCBpKTsKKyAgICAgICAgICAgIGlmICghaXNMZWdhbChjb2RlcG9pbnQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzU3VwcGxlbWVudGFyeShjb2RlcG9pbnQpKSB7CisgICAgICAgICAgICAgICAgaSArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB2ZXJzaW9uIG9mIFVuaWNvZGUgZGF0YSB1c2VkLiAKKyAgICAgKiBAcmV0dXJuIHRoZSB1bmljb2RlIHZlcnNpb24gbnVtYmVyIHVzZWQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFZlcnNpb25JbmZvIGdldFVuaWNvZGVWZXJzaW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBQUk9QRVJUWV8ubV91bmljb2RlVmVyc2lvbl87CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogUmV0cmlldmUgdGhlIG1vc3QgY3VycmVudCBVbmljb2RlIG5hbWUgb2YgdGhlIGFyZ3VtZW50IGNvZGUgcG9pbnQsIG9yIAorICAgICAqIG51bGwgaWYgdGhlIGNoYXJhY3RlciBpcyB1bmFzc2lnbmVkIG9yIG91dHNpZGUgdGhlIHJhbmdlIAorICAgICAqIFVDaGFyYWN0ZXIuTUlOX1ZBTFVFIGFuZCBVQ2hhcmFjdGVyLk1BWF9WQUxVRSBvciBkb2VzIG5vdCBoYXZlIGEgbmFtZS4KKyAgICAgKiA8YnI+CisgICAgICogTm90ZSBjYWxsaW5nIGFueSBtZXRob2RzIHJlbGF0ZWQgdG8gY29kZSBwb2ludCBuYW1lcywgZS5nLiBnZXQqTmFtZSooKSAKKyAgICAgKiBpbmN1cnMgYSBvbmUtdGltZSBpbml0aWFsaXNhdGlvbiBjb3N0IHRvIGNvbnN0cnVjdCB0aGUgbmFtZSB0YWJsZXMuCisgICAgICogQHBhcmFtIGNoIHRoZSBjb2RlIHBvaW50IGZvciB3aGljaCB0byBnZXQgdGhlIG5hbWUKKyAgICAgKiBAcmV0dXJuIG1vc3QgY3VycmVudCBVbmljb2RlIG5hbWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXROYW1lKGludCBjaCkKKyAgICB7CisgICAgICAgIHJldHVybiBOQU1FXy5nZXROYW1lKGNoLCBVQ2hhcmFjdGVyTmFtZUNob2ljZS5VTklDT0RFX0NIQVJfTkFNRSk7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogUmV0cmlldmUgdGhlIGVhcmxpZXIgdmVyc2lvbiAxLjAgVW5pY29kZSBuYW1lIG9mIHRoZSBhcmd1bWVudCBjb2RlIAorICAgICAqIHBvaW50LCBvciBudWxsIGlmIHRoZSBjaGFyYWN0ZXIgaXMgdW5hc3NpZ25lZCBvciBvdXRzaWRlIHRoZSByYW5nZSAKKyAgICAgKiBVQ2hhcmFjdGVyLk1JTl9WQUxVRSBhbmQgVUNoYXJhY3Rlci5NQVhfVkFMVUUgb3IgZG9lcyBub3QgaGF2ZSBhIG5hbWUuCisgICAgICogPGJyPgorICAgICAqIE5vdGUgY2FsbGluZyBhbnkgbWV0aG9kcyByZWxhdGVkIHRvIGNvZGUgcG9pbnQgbmFtZXMsIGUuZy4gZ2V0Kk5hbWUqKCkgCisgICAgICogaW5jdXJzIGEgb25lLXRpbWUgaW5pdGlhbGlzYXRpb24gY29zdCB0byBjb25zdHJ1Y3QgdGhlIG5hbWUgdGFibGVzLgorICAgICAqIEBwYXJhbSBjaCB0aGUgY29kZSBwb2ludCBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lCisgICAgICogQHJldHVybiB2ZXJzaW9uIDEuMCBVbmljb2RlIG5hbWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXROYW1lMV8wKGludCBjaCkKKyAgICB7CisgICAgICAgIHJldHVybiBOQU1FXy5nZXROYW1lKGNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlck5hbWVDaG9pY2UuVU5JQ09ERV8xMF9DSEFSX05BTUUpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD5SZXRyaWV2ZXMgYSBuYW1lIGZvciBhIHZhbGlkIGNvZGVwb2ludC4gVW5saWtlLCBnZXROYW1lKGludCkgYW5kCisgICAgICogZ2V0TmFtZTFfMChpbnQpLCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBhIG5hbWUgZXZlbiBmb3IgY29kZXBvaW50cyB0aGF0CisgICAgICogYXJlIG5vdCBhc3NpZ25lZCBhIG5hbWUgaW4gVW5pY29kZURhdGEudHh0LgorICAgICAqIDwvcD4KKyAgICAgKiBUaGUgbmFtZXMgYXJlIHJldHVybmVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIuCisgICAgICogPHVsPgorICAgICAqIDxsaT4gTW9zdCBjdXJyZW50IFVuaWNvZGUgbmFtZSBpZiB0aGVyZSBpcyBhbnkKKyAgICAgKiA8bGk+IFVuaWNvZGUgMS4wIG5hbWUgaWYgdGhlcmUgaXMgYW55CisgICAgICogPGxpPiBFeHRlbmRlZCBuYW1lIGluIHRoZSBmb3JtIG9mIAorICAgICAqICAgICAgIjxjb2RlcG9pbnRfdHlwZS1jb2RlcG9pbnRfaGV4X2RpZ2l0cz4iLiBFLmcuIDxub25jaGFyYWN0ZXItZmZmZT4KKyAgICAgKiA8L3VsPgorICAgICAqIE5vdGUgY2FsbGluZyBhbnkgbWV0aG9kcyByZWxhdGVkIHRvIGNvZGUgcG9pbnQgbmFtZXMsIGUuZy4gZ2V0Kk5hbWUqKCkgCisgICAgICogaW5jdXJzIGEgb25lLXRpbWUgaW5pdGlhbGlzYXRpb24gY29zdCB0byBjb25zdHJ1Y3QgdGhlIG5hbWUgdGFibGVzLgorICAgICAqIEBwYXJhbSBjaCB0aGUgY29kZSBwb2ludCBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lCisgICAgICogQHJldHVybiBhIG5hbWUgZm9yIHRoZSBhcmd1bWVudCBjb2RlcG9pbnQKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuZGVkTmFtZShpbnQgY2gpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIE5BTUVfLmdldE5hbWUoY2gsIFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLkVYVEVOREVEX0NIQVJfTkFNRSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldCB0aGUgSVNPIDEwNjQ2IGNvbW1lbnQgZm9yIGEgY2hhcmFjdGVyLgorICAgICAqIFRoZSBJU08gMTA2NDYgY29tbWVudCBpcyBhbiBpbmZvcm1hdGl2ZSBmaWVsZCBpbiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIKKyAgICAgKiBEYXRhYmFzZSAoVW5pY29kZURhdGEudHh0IGZpZWxkIDExKSBhbmQgaXMgZnJvbSB0aGUgSVNPIDEwNjQ2IG5hbWVzIGxpc3QuCisgICAgICogQHBhcmFtIGNoIFRoZSBjb2RlIHBvaW50IGZvciB3aGljaCB0byBnZXQgdGhlIElTTyBjb21tZW50LgorICAgICAqICAgICAgICAgICBJdCBtdXN0IGJlIDxjb2RlPjA8PWM8PTB4MTBmZmZmPC9jb2RlPi4KKyAgICAgKiBAcmV0dXJuIFRoZSBJU08gY29tbWVudCwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBjb21tZW50IGZvciB0aGlzIAorICAgICAqICAgICAgICAgY2hhcmFjdGVyLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SVNPQ29tbWVudChpbnQgY2gpCisgICAgeworICAgICAgICBpZiAoY2ggPCBVQ2hhcmFjdGVyLk1JTl9WQUxVRSB8fCBjaCA+IFVDaGFyYWN0ZXIuTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IE5BTUVfLmdldEdyb3VwTmFtZShjaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlck5hbWVDaG9pY2UuSVNPX0NPTU1FTlRfKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAKKyAgICAvKioKKyAgICAgKiA8cD5GaW5kIGEgVW5pY29kZSBjb2RlIHBvaW50IGJ5IGl0cyBtb3N0IGN1cnJlbnQgVW5pY29kZSBuYW1lIGFuZCAKKyAgICAgKiByZXR1cm4gaXRzIGNvZGUgcG9pbnQgdmFsdWUuIEFsbCBVbmljb2RlIG5hbWVzIGFyZSBpbiB1cHBlcmNhc2UuPC9wPgorICAgICAqIE5vdGUgY2FsbGluZyBhbnkgbWV0aG9kcyByZWxhdGVkIHRvIGNvZGUgcG9pbnQgbmFtZXMsIGUuZy4gZ2V0Kk5hbWUqKCkgCisgICAgICogaW5jdXJzIGEgb25lLXRpbWUgaW5pdGlhbGlzYXRpb24gY29zdCB0byBjb25zdHJ1Y3QgdGhlIG5hbWUgdGFibGVzLgorICAgICAqIEBwYXJhbSBuYW1lIG1vc3QgY3VycmVudCBVbmljb2RlIGNoYXJhY3RlciBuYW1lIHdob3NlIGNvZGUgcG9pbnQgaXMgdG8gCisgICAgICogICAgICAgIGJlIHJldHVybmVkCisgICAgICogQHJldHVybiBjb2RlIHBvaW50IG9yIC0xIGlmIG5hbWUgaXMgbm90IGZvdW5kCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0Q2hhckZyb21OYW1lKFN0cmluZyBuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5BTUVfLmdldENoYXJGcm9tTmFtZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyTmFtZUNob2ljZS5VTklDT0RFX0NIQVJfTkFNRSwgbmFtZSk7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogPHA+RmluZCBhIFVuaWNvZGUgY2hhcmFjdGVyIGJ5IGl0cyB2ZXJzaW9uIDEuMCBVbmljb2RlIG5hbWUgYW5kIHJldHVybiAKKyAgICAgKiBpdHMgY29kZSBwb2ludCB2YWx1ZS4gQWxsIFVuaWNvZGUgbmFtZXMgYXJlIGluIHVwcGVyY2FzZS48L3A+CisgICAgICogTm90ZSBjYWxsaW5nIGFueSBtZXRob2RzIHJlbGF0ZWQgdG8gY29kZSBwb2ludCBuYW1lcywgZS5nLiBnZXQqTmFtZSooKSAKKyAgICAgKiBpbmN1cnMgYSBvbmUtdGltZSBpbml0aWFsaXNhdGlvbiBjb3N0IHRvIGNvbnN0cnVjdCB0aGUgbmFtZSB0YWJsZXMuCisgICAgICogQHBhcmFtIG5hbWUgVW5pY29kZSAxLjAgY29kZSBwb2ludCBuYW1lIHdob3NlIGNvZGUgcG9pbnQgaXMgdG8gCisgICAgICogICAgICAgICAgICAgcmV0dXJuZWQKKyAgICAgKiBAcmV0dXJuIGNvZGUgcG9pbnQgb3IgLTEgaWYgbmFtZSBpcyBub3QgZm91bmQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRDaGFyRnJvbU5hbWUxXzAoU3RyaW5nIG5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gTkFNRV8uZ2V0Q2hhckZyb21OYW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLlVOSUNPREVfMTBfQ0hBUl9OQU1FLCBuYW1lKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogPHA+RmluZCBhIFVuaWNvZGUgY2hhcmFjdGVyIGJ5IGVpdGhlciBpdHMgbmFtZSBhbmQgcmV0dXJuIGl0cyBjb2RlIAorICAgICAqIHBvaW50IHZhbHVlLiBBbGwgVW5pY29kZSBuYW1lcyBhcmUgaW4gdXBwZXJjYXNlLiAKKyAgICAgKiBFeHRlbmRlZCBuYW1lcyBhcmUgYWxsIGxvd2VyY2FzZSBleGNlcHQgZm9yIG51bWJlcnMgYW5kIGFyZSBjb250YWluZWQKKyAgICAgKiB3aXRoaW4gYW5nbGUgYnJhY2tldHMuPC9wPgorICAgICAqIFRoZSBuYW1lcyBhcmUgc2VhcmNoZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+IE1vc3QgY3VycmVudCBVbmljb2RlIG5hbWUgaWYgdGhlcmUgaXMgYW55CisgICAgICogPGxpPiBVbmljb2RlIDEuMCBuYW1lIGlmIHRoZXJlIGlzIGFueQorICAgICAqIDxsaT4gRXh0ZW5kZWQgbmFtZSBpbiB0aGUgZm9ybSBvZiAKKyAgICAgKiAgICAgICI8Y29kZXBvaW50X3R5cGUtY29kZXBvaW50X2hleF9kaWdpdHM+Ii4gRS5nLiA8bm9uY2hhcmFjdGVyLUZGRkU+CisgICAgICogPC91bD4KKyAgICAgKiBOb3RlIGNhbGxpbmcgYW55IG1ldGhvZHMgcmVsYXRlZCB0byBjb2RlIHBvaW50IG5hbWVzLCBlLmcuIGdldCpOYW1lKigpIAorICAgICAqIGluY3VycyBhIG9uZS10aW1lIGluaXRpYWxpc2F0aW9uIGNvc3QgdG8gY29uc3RydWN0IHRoZSBuYW1lIHRhYmxlcy4KKyAgICAgKiBAcGFyYW0gbmFtZSBjb2RlcG9pbnQgbmFtZQorICAgICAqIEByZXR1cm4gY29kZSBwb2ludCBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWUgb3IgLTEgaWYgdGhlIG5hbWUgaXMgbm90CisgICAgICogICAgICAgICBmb3VuZC4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldENoYXJGcm9tRXh0ZW5kZWROYW1lKFN0cmluZyBuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5BTUVfLmdldENoYXJGcm9tTmFtZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyTmFtZUNob2ljZS5FWFRFTkRFRF9DSEFSX05BTUUsIG5hbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgVW5pY29kZSBuYW1lIGZvciBhIGdpdmVuIHByb3BlcnR5LCBhcyBnaXZlbiBpbiB0aGUKKyAgICAgKiBVbmljb2RlIGRhdGFiYXNlIGZpbGUgUHJvcGVydHlBbGlhc2VzLnR4dC4gIE1vc3QgcHJvcGVydGllcworICAgICAqIGhhdmUgbW9yZSB0aGFuIG9uZSBuYW1lLiAgVGhlIG5hbWVDaG9pY2UgZGV0ZXJtaW5lcyB3aGljaCBvbmUKKyAgICAgKiBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBVUHJvcGVydHkgc2VsZWN0b3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZUNob2ljZSBVUHJvcGVydHkuTmFtZUNob2ljZSBzZWxlY3RvciBmb3Igd2hpY2ggbmFtZQorICAgICAqIHRvIGdldC4gIEFsbCBwcm9wZXJ0aWVzIGhhdmUgYSBsb25nIG5hbWUuICBNb3N0IGhhdmUgYSBzaG9ydAorICAgICAqIG5hbWUsIGJ1dCBzb21lIGRvIG5vdC4gIFVuaWNvZGUgYWxsb3dzIGZvciBhZGRpdGlvbmFsIG5hbWVzOyBpZgorICAgICAqIHByZXNlbnQgdGhlc2Ugd2lsbCBiZSByZXR1cm5lZCBieSBVUHJvcGVydHkuTmFtZUNob2ljZS5MT05HICsgaSwKKyAgICAgKiB3aGVyZSBpPTEsIDIsLi4uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGEgbmFtZSwgb3IgbnVsbCBpZiBVbmljb2RlIGV4cGxpY2l0bHkgZGVmaW5lcyBubyBuYW1lCisgICAgICogKCJuL2EiKSBmb3IgYSBnaXZlbiBwcm9wZXJ0eS9uYW1lQ2hvaWNlLiAgSWYgYSBnaXZlbiBuYW1lQ2hvaWNlCisgICAgICogdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlbiBhbGwgbGFyZ2VyIHZhbHVlcyBvZiBuYW1lQ2hvaWNlIHdpbGwKKyAgICAgKiB0aHJvdyBhbiBleGNlcHRpb24uICBJZiBudWxsIGlzIHJldHVybmVkIGZvciBhIGdpdmVuCisgICAgICogbmFtZUNob2ljZSwgdGhlbiBvdGhlciBuYW1lQ2hvaWNlIHZhbHVlcyBtYXkgcmV0dXJuIG5vbi1udWxsCisgICAgICogcmVzdWx0cy4KKyAgICAgKgorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biBpZiBwcm9wZXJ0eSBvcgorICAgICAqIG5hbWVDaG9pY2UgYXJlIGludmFsaWQuCisgICAgICoKKyAgICAgKiBAc2VlIFVQcm9wZXJ0eQorICAgICAqIEBzZWUgVVByb3BlcnR5Lk5hbWVDaG9pY2UKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShpbnQgcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYW1lQ2hvaWNlKSB7CisgICAgICAgIHJldHVybiBQTkFNRVNfLmdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSwgbmFtZUNob2ljZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBVUHJvcGVydHkgc2VsZWN0b3IgZm9yIGEgZ2l2ZW4gcHJvcGVydHkgbmFtZSwgYXMKKyAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIFVuaWNvZGUgZGF0YWJhc2UgZmlsZSBQcm9wZXJ0eUFsaWFzZXMudHh0LgorICAgICAqIFNob3J0LCBsb25nLCBhbmQgYW55IG90aGVyIHZhcmlhbnRzIGFyZSByZWNvZ25pemVkLgorICAgICAqCisgICAgICogQHBhcmFtIHByb3BlcnR5QWxpYXMgdGhlIHByb3BlcnR5IG5hbWUgdG8gYmUgbWF0Y2hlZC4gIFRoZSBuYW1lCisgICAgICogaXMgY29tcGFyZWQgdXNpbmcgImxvb3NlIG1hdGNoaW5nIiBhcyBkZXNjcmliZWQgaW4KKyAgICAgKiBQcm9wZXJ0eUFsaWFzZXMudHh0LgorICAgICAqCisgICAgICogQHJldHVybiBhIFVQcm9wZXJ0eSBlbnVtLgorICAgICAqCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhyb3duIGlmIHByb3BlcnR5QWxpYXMKKyAgICAgKiBpcyBub3QgcmVjb2duaXplZC4KKyAgICAgKgorICAgICAqIEBzZWUgVVByb3BlcnR5CisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQcm9wZXJ0eUVudW0oU3RyaW5nIHByb3BlcnR5QWxpYXMpIHsKKyAgICAgICAgcmV0dXJuIFBOQU1FU18uZ2V0UHJvcGVydHlFbnVtKHByb3BlcnR5QWxpYXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgVW5pY29kZSBuYW1lIGZvciBhIGdpdmVuIHByb3BlcnR5IHZhbHVlLCBhcyBnaXZlbiBpbgorICAgICAqIHRoZSBVbmljb2RlIGRhdGFiYXNlIGZpbGUgUHJvcGVydHlWYWx1ZUFsaWFzZXMudHh0LiAgTW9zdAorICAgICAqIHZhbHVlcyBoYXZlIG1vcmUgdGhhbiBvbmUgbmFtZS4gIFRoZSBuYW1lQ2hvaWNlIGRldGVybWluZXMKKyAgICAgKiB3aGljaCBvbmUgaXMgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHkgVVByb3BlcnR5IHNlbGVjdG9yIGluIHRoZSByYW5nZQorICAgICAqIFVQcm9wZXJ0eS5JTlRfU1RBUlQgPD0geCA8IFVQcm9wZXJ0eS5JTlRfTElNSVQgb3IKKyAgICAgKiBVUHJvcGVydHkuQklOQVJZX1NUQVJUIDw9IHggPCBVUHJvcGVydHkuQklOQVJZX0xJTUlULgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlIHNlbGVjdG9yIGZvciBhIHZhbHVlIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuICBJbgorICAgICAqIGdlbmVyYWwsIHZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDAgdXAgdG8gc29tZSBtYXhpbXVtLiAgVGhlcmUKKyAgICAgKiBhcmUgYSBmZXcgZXhjZXB0aW9uczogKDEuKSBVUHJvcGVydHkuQkxPQ0sgdmFsdWVzIGJlZ2luIGF0IHRoZQorICAgICAqIG5vbi16ZXJvIHZhbHVlIEJBU0lDX0xBVElOLmdldElEKCkuICAoMi4pCisgICAgICogVVByb3BlcnR5LkNBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MgdmFsdWVzIGFyZSBub3QgY29udGlndW91cworICAgICAqIGFuZCByYW5nZSBmcm9tIDAuLjI0MC4gICgzLikgIFVQcm9wZXJ0eS5HRU5FUkFMX0NBVEVHT1JZIHZhbHVlcworICAgICAqIGFyZSBtYXNrIHZhbHVlcyBwcm9kdWNlZCBieSBsZWZ0LXNoaWZ0aW5nIDEgYnkKKyAgICAgKiBVQ2hhcmFjdGVyLmdldFR5cGUoKS4gIFRoaXMgYWxsb3dzIGdyb3VwZWQgY2F0ZWdvcmllcyBzdWNoIGFzCisgICAgICogWzpMOl0gdG8gYmUgcmVwcmVzZW50ZWQuICBNYXNrIHZhbHVlcyBhcmUgbm9uLWNvbnRpZ3VvdXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZUNob2ljZSBVUHJvcGVydHkuTmFtZUNob2ljZSBzZWxlY3RvciBmb3Igd2hpY2ggbmFtZQorICAgICAqIHRvIGdldC4gIEFsbCB2YWx1ZXMgaGF2ZSBhIGxvbmcgbmFtZS4gIE1vc3QgaGF2ZSBhIHNob3J0IG5hbWUsCisgICAgICogYnV0IHNvbWUgZG8gbm90LiAgVW5pY29kZSBhbGxvd3MgZm9yIGFkZGl0aW9uYWwgbmFtZXM7IGlmCisgICAgICogcHJlc2VudCB0aGVzZSB3aWxsIGJlIHJldHVybmVkIGJ5IFVQcm9wZXJ0eS5OYW1lQ2hvaWNlLkxPTkcgKyBpLAorICAgICAqIHdoZXJlIGk9MSwgMiwuLi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gYSBuYW1lLCBvciBudWxsIGlmIFVuaWNvZGUgZXhwbGljaXRseSBkZWZpbmVzIG5vIG5hbWUKKyAgICAgKiAoIm4vYSIpIGZvciBhIGdpdmVuIHByb3BlcnR5L3ZhbHVlL25hbWVDaG9pY2UuICBJZiBhIGdpdmVuCisgICAgICogbmFtZUNob2ljZSB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVuIGFsbCBsYXJnZXIgdmFsdWVzIG9mCisgICAgICogbmFtZUNob2ljZSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4gIElmIG51bGwgaXMgcmV0dXJuZWQgZm9yIGEKKyAgICAgKiBnaXZlbiBuYW1lQ2hvaWNlLCB0aGVuIG90aGVyIG5hbWVDaG9pY2UgdmFsdWVzIG1heSByZXR1cm4KKyAgICAgKiBub24tbnVsbCByZXN1bHRzLgorICAgICAqCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhyb3duIGlmIHByb3BlcnR5LCB2YWx1ZSwKKyAgICAgKiBvciBuYW1lQ2hvaWNlIGFyZSBpbnZhbGlkLgorICAgICAqCisgICAgICogQHNlZSBVUHJvcGVydHkKKyAgICAgKiBAc2VlIFVQcm9wZXJ0eS5OYW1lQ2hvaWNlCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlTmFtZShpbnQgcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYW1lQ2hvaWNlKSB7CisgICAgICAgIHJldHVybiBQTkFNRVNfLmdldFByb3BlcnR5VmFsdWVOYW1lKHByb3BlcnR5LCB2YWx1ZSwgbmFtZUNob2ljZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpbnRlZ2VyIGZvciBhIGdpdmVuIHZhbHVlIG5hbWUsIGFzCisgICAgICogc3BlY2lmaWVkIGluIHRoZSBVbmljb2RlIGRhdGFiYXNlIGZpbGUgUHJvcGVydHlWYWx1ZUFsaWFzZXMudHh0LgorICAgICAqIFNob3J0LCBsb25nLCBhbmQgYW55IG90aGVyIHZhcmlhbnRzIGFyZSByZWNvZ25pemVkLgorICAgICAqCisgICAgICogQHBhcmFtIHByb3AgdGhlIFVQcm9wZXJ0eSBzZWxlY3RvciBmb3IgdGhlIHByb3BlcnR5IHRvIHdoaWNoCisgICAgICogdGhlIGdpdmVuIHZhbHVlIGFsaWFzIGJlbG9uZ3MuICBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlCisgICAgICogVVByb3BlcnR5LklOVF9TVEFSVCA8PSB4IDwgVVByb3BlcnR5LklOVF9MSU1JVCBvcgorICAgICAqIFVQcm9wZXJ0eS5CSU5BUllfU1RBUlQgPD0geCA8IFVQcm9wZXJ0eS5CSU5BUllfTElNSVQ7IG9ubHkKKyAgICAgKiB0aGVzZSBwcm9wZXJ0aWVzIGRlZmluZSB2YWx1ZSBuYW1lcyBhbmQgZW51bXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWVBbGlhcyB0aGUgdmFsdWUgbmFtZSB0byBiZSBtYXRjaGVkLiAgVGhlIG5hbWUgaXMKKyAgICAgKiBjb21wYXJlZCB1c2luZyAibG9vc2UgbWF0Y2hpbmciIGFzIGRlc2NyaWJlZCBpbgorICAgICAqIFByb3BlcnR5VmFsdWVBbGlhc2VzLnR4dC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gYSB2YWx1ZSBpbnRlZ2VyLiAgTm90ZTogVVByb3BlcnR5LkdFTkVSQUxfQ0FURUdPUlkKKyAgICAgKiB2YWx1ZXMgYXJlIG1hc2sgdmFsdWVzIHByb2R1Y2VkIGJ5IGxlZnQtc2hpZnRpbmcgMSBieQorICAgICAqIFVDaGFyYWN0ZXIuZ2V0VHlwZSgpLiAgVGhpcyBhbGxvd3MgZ3JvdXBlZCBjYXRlZ29yaWVzIHN1Y2ggYXMKKyAgICAgKiBbOkw6XSB0byBiZSByZXByZXNlbnRlZC4KKyAgICAgKgorICAgICAqIEBzZWUgVVByb3BlcnR5CisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQcm9wZXJ0eVZhbHVlRW51bShpbnQgcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlQWxpYXMpIHsKKyAgICAgICAgcmV0dXJuIFBOQU1FU18uZ2V0UHJvcGVydHlWYWx1ZUVudW0ocHJvcGVydHksIHZhbHVlQWxpYXMpOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR3byBVVEYxNiBjaGFyYWN0ZXJzLgorICAgICAqIEBwYXJhbSBsZWFkIHRoZSBsZWFkIGNoYXIKKyAgICAgKiBAcGFyYW0gdHJhaWwgdGhlIHRyYWlsIGNoYXIKKyAgICAgKiBAcmV0dXJuIGNvZGUgcG9pbnQgaWYgc3Vycm9nYXRlIGNoYXJhY3RlcnMgYXJlIHZhbGlkLgorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biB3aGVuIGFyZ3VtZW50IGNoYXJhY3RlcnMgZG8KKyAgICAgKiAgICAgICAgICAgIG5vdCBmb3JtIGEgdmFsaWQgY29kZXBvaW50CisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0Q29kZVBvaW50KGNoYXIgbGVhZCwgY2hhciB0cmFpbCkgCisgICAgeworICAgICAgICBpZiAobGVhZCA+PSBVVEYxNi5MRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgJiYgCisJICAgICAgICBsZWFkIDw9IFVURjE2LkxFQURfU1VSUk9HQVRFX01BWF9WQUxVRSAmJgorICAgICAgICAgICAgdHJhaWwgPj0gVVRGMTYuVFJBSUxfU1VSUk9HQVRFX01JTl9WQUxVRSAmJiAKKwkgICAgICAgIHRyYWlsIDw9IFVURjE2LlRSQUlMX1NVUlJPR0FURV9NQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeShsZWFkLCB0cmFpbCk7CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBzdXJyb2dhdGUgY2hhcmFjdGVycyIpOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNvZGUgcG9pbnQgY29ycmVzcG9uZGluZyB0byB0aGUgVVRGMTYgY2hhcmFjdGVyLgorICAgICAqIEBwYXJhbSBjaGFyMTYgdGhlIFVURjE2IGNoYXJhY3RlcgorICAgICAqIEByZXR1cm4gY29kZSBwb2ludCBpZiBhcmd1bWVudCBpcyBhIHZhbGlkIGNoYXJhY3Rlci4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBjaGFyMTYgaXMgbm90IGEgdmFsaWQKKyAgICAgKiAgICAgICAgICAgIGNvZGVwb2ludAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldENvZGVQb2ludChjaGFyIGNoYXIxNikgCisgICAgeworICAgICAgICBpZiAoVUNoYXJhY3Rlci5pc0xlZ2FsKGNoYXIxNikpIHsKKyAgICAgICAgICAgIHJldHVybiBjaGFyMTY7CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBjb2RlcG9pbnQiKTsKKyAgICB9CisgICAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHVwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcuIAorICAgICAqIENhc2luZyBpcyBkZXBlbmRlbnQgb24gdGhlIGRlZmF1bHQgbG9jYWxlIGFuZCBjb250ZXh0LXNlbnNpdGl2ZS4KKyAgICAgKiBAcGFyYW0gc3RyIHNvdXJjZSBzdHJpbmcgdG8gYmUgcGVyZm9ybWVkIG9uCisgICAgICogQHJldHVybiB1cHBlcmNhc2UgdmVyc2lvbiBvZiB0aGUgYXJndW1lbnQgc3RyaW5nCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9VcHBlckNhc2UoU3RyaW5nIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiB0b1VwcGVyQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpLCBzdHIpOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIEdldHMgbG93ZXJjYXNlIHZlcnNpb24gb2YgdGhlIGFyZ3VtZW50IHN0cmluZy4gCisgICAgICogQ2FzaW5nIGlzIGRlcGVuZGVudCBvbiB0aGUgZGVmYXVsdCBsb2NhbGUgYW5kIGNvbnRleHQtc2Vuc2l0aXZlCisgICAgICogQHBhcmFtIHN0ciBzb3VyY2Ugc3RyaW5nIHRvIGJlIHBlcmZvcm1lZCBvbgorICAgICAqIEByZXR1cm4gbG93ZXJjYXNlIHZlcnNpb24gb2YgdGhlIGFyZ3VtZW50IHN0cmluZworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvTG93ZXJDYXNlKFN0cmluZyBzdHIpCisgICAgeworICAgICAgICByZXR1cm4gdG9Mb3dlckNhc2UoTG9jYWxlLmdldERlZmF1bHQoKSwgc3RyKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogPHA+R2V0cyB0aGUgdGl0bGVjYXNlIHZlcnNpb24gb2YgdGhlIGFyZ3VtZW50IHN0cmluZy48L3A+CisgICAgICogPHA+UG9zaXRpb24gZm9yIHRpdGxlY2FzaW5nIGlzIGRldGVybWluZWQgYnkgdGhlIGFyZ3VtZW50IGJyZWFrIAorICAgICAqIGl0ZXJhdG9yLCBoZW5jZSB0aGUgdXNlciBjYW4gY3VzdG9taXplZCBoaXMgYnJlYWsgaXRlcmF0b3IgZm9yIAorICAgICAqIGEgc3BlY2lhbGl6ZWQgdGl0bGVjYXNpbmcuIEluIHRoaXMgY2FzZSBvbmx5IHRoZSBmb3J3YXJkIGl0ZXJhdGlvbiAKKyAgICAgKiBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZC4KKyAgICAgKiBJZiB0aGUgYnJlYWsgaXRlcmF0b3IgcGFzc2VkIGluIGlzIG51bGwsIHRoZSBkZWZhdWx0IFVuaWNvZGUgYWxnb3JpdGhtCisgICAgICogd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGl0bGVjYXNlIHBvc2l0aW9ucy4KKyAgICAgKiA8L3A+CisgICAgICogPHA+T25seSBwb3NpdGlvbnMgcmV0dXJuZWQgYnkgdGhlIGJyZWFrIGl0ZXJhdG9yIHdpbGwgYmUgdGl0bGUgY2FzZWQsCisgICAgICogY2hhcmFjdGVyIGluIGJldHdlZW4gdGhlIHBvc2l0aW9ucyB3aWxsIGFsbCBiZSBpbiBsb3dlciBjYXNlLjwvcD4KKyAgICAgKiA8cD5DYXNpbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBkZWZhdWx0IGxvY2FsZSBhbmQgY29udGV4dC1zZW5zaXRpdmU8L3A+CisgICAgICogQHBhcmFtIHN0ciBzb3VyY2Ugc3RyaW5nIHRvIGJlIHBlcmZvcm1lZCBvbgorICAgICAqIEBwYXJhbSBicmVha2l0ZXIgYnJlYWsgaXRlcmF0b3IgdG8gZGV0ZXJtaW5lIHRoZSBwb3NpdGlvbnMgaW4gd2hpY2gKKyAgICAgKiAgICAgICAgdGhlIGNoYXJhY3RlciBzaG91bGQgYmUgdGl0bGUgY2FzZWQuCisgICAgICogQHJldHVybiBsb3dlcmNhc2UgdmVyc2lvbiBvZiB0aGUgYXJndW1lbnQgc3RyaW5nCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1RpdGxlQ2FzZShTdHJpbmcgc3RyLCBCcmVha0l0ZXJhdG9yIGJyZWFraXRlcikKKyAgICB7CisgICAgICAgIHJldHVybiB0b1RpdGxlQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpLCBzdHIsIGJyZWFraXRlcik7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogR2V0cyB1cHBlcmNhc2UgdmVyc2lvbiBvZiB0aGUgYXJndW1lbnQgc3RyaW5nLiAKKyAgICAgKiBDYXNpbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBhcmd1bWVudCBsb2NhbGUgYW5kIGNvbnRleHQtc2Vuc2l0aXZlLgorICAgICAqIEBwYXJhbSBsb2NhbGUgd2hpY2ggc3RyaW5nIGlzIHRvIGJlIGNvbnZlcnRlZCBpbgorICAgICAqIEBwYXJhbSBzdHIgc291cmNlIHN0cmluZyB0byBiZSBwZXJmb3JtZWQgb24KKyAgICAgKiBAcmV0dXJuIHVwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1VwcGVyQ2FzZShMb2NhbGUgbG9jYWxlLCBTdHJpbmcgc3RyKQorICAgIHsKKyAgICAJaWYgKGxvY2FsZSA9PSBudWxsKSB7CisgICAgCQlsb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgIAl9CisgICAgICAgIHJldHVybiBQUk9QRVJUWV8udG9VcHBlckNhc2UobG9jYWxlLCBzdHIsIDAsIHN0ci5sZW5ndGgoKSk7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogR2V0cyBsb3dlcmNhc2UgdmVyc2lvbiBvZiB0aGUgYXJndW1lbnQgc3RyaW5nLiAKKyAgICAgKiBDYXNpbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBhcmd1bWVudCBsb2NhbGUgYW5kIGNvbnRleHQtc2Vuc2l0aXZlCisgICAgICogQHBhcmFtIGxvY2FsZSB3aGljaCBzdHJpbmcgaXMgdG8gYmUgY29udmVydGVkIGluCisgICAgICogQHBhcmFtIHN0ciBzb3VyY2Ugc3RyaW5nIHRvIGJlIHBlcmZvcm1lZCBvbgorICAgICAqIEByZXR1cm4gbG93ZXJjYXNlIHZlcnNpb24gb2YgdGhlIGFyZ3VtZW50IHN0cmluZworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvTG93ZXJDYXNlKExvY2FsZSBsb2NhbGUsIFN0cmluZyBzdHIpCisgICAgeworICAgIAlpbnQgbGVuZ3RoID0gc3RyLmxlbmd0aCgpOworICAgIAlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihsZW5ndGgpOworICAgIAlpZiAobG9jYWxlID09IG51bGwpIHsKKyAgICAJCWxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgCX0KKyAgICAgICAgUFJPUEVSVFlfLnRvTG93ZXJDYXNlKGxvY2FsZSwgc3RyLCAwLCBsZW5ndGgsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogPHA+R2V0cyB0aGUgdGl0bGVjYXNlIHZlcnNpb24gb2YgdGhlIGFyZ3VtZW50IHN0cmluZy48L3A+CisgICAgICogPHA+UG9zaXRpb24gZm9yIHRpdGxlY2FzaW5nIGlzIGRldGVybWluZWQgYnkgdGhlIGFyZ3VtZW50IGJyZWFrIAorICAgICAqIGl0ZXJhdG9yLCBoZW5jZSB0aGUgdXNlciBjYW4gY3VzdG9taXplZCBoaXMgYnJlYWsgaXRlcmF0b3IgZm9yIAorICAgICAqIGEgc3BlY2lhbGl6ZWQgdGl0bGVjYXNpbmcuIEluIHRoaXMgY2FzZSBvbmx5IHRoZSBmb3J3YXJkIGl0ZXJhdGlvbiAKKyAgICAgKiBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZC4KKyAgICAgKiBJZiB0aGUgYnJlYWsgaXRlcmF0b3IgcGFzc2VkIGluIGlzIG51bGwsIHRoZSBkZWZhdWx0IFVuaWNvZGUgYWxnb3JpdGhtCisgICAgICogd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGl0bGVjYXNlIHBvc2l0aW9ucy4KKyAgICAgKiA8L3A+CisgICAgICogPHA+T25seSBwb3NpdGlvbnMgcmV0dXJuZWQgYnkgdGhlIGJyZWFrIGl0ZXJhdG9yIHdpbGwgYmUgdGl0bGUgY2FzZWQsCisgICAgICogY2hhcmFjdGVyIGluIGJldHdlZW4gdGhlIHBvc2l0aW9ucyB3aWxsIGFsbCBiZSBpbiBsb3dlciBjYXNlLjwvcD4KKyAgICAgKiA8cD5DYXNpbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBhcmd1bWVudCBsb2NhbGUgYW5kIGNvbnRleHQtc2Vuc2l0aXZlPC9wPgorICAgICAqIEBwYXJhbSBsb2NhbGUgd2hpY2ggc3RyaW5nIGlzIHRvIGJlIGNvbnZlcnRlZCBpbgorICAgICAqIEBwYXJhbSBzdHIgc291cmNlIHN0cmluZyB0byBiZSBwZXJmb3JtZWQgb24KKyAgICAgKiBAcGFyYW0gYnJlYWtpdGVyIGJyZWFrIGl0ZXJhdG9yIHRvIGRldGVybWluZSB0aGUgcG9zaXRpb25zIGluIHdoaWNoCisgICAgICogICAgICAgIHRoZSBjaGFyYWN0ZXIgc2hvdWxkIGJlIHRpdGxlIGNhc2VkLgorICAgICAqIEByZXR1cm4gbG93ZXJjYXNlIHZlcnNpb24gb2YgdGhlIGFyZ3VtZW50IHN0cmluZworICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9UaXRsZUNhc2UoTG9jYWxlIGxvY2FsZSwgU3RyaW5nIHN0ciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJlYWtJdGVyYXRvciBicmVha2l0ZXIpCisgICAgeworICAgICAgICBpZiAoYnJlYWtpdGVyID09IG51bGwpIHsKKyAgICAgICAgCWlmIChsb2NhbGUgPT0gbnVsbCkgeworICAgICAgICAJCWxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgIAl9CisgICAgICAgICAgICBicmVha2l0ZXIgPSBCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQUk9QRVJUWV8udG9UaXRsZUNhc2UobG9jYWxlLCBzdHIsIGJyZWFraXRlcik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgbWFwcGVkIHRvIGl0cyBjYXNlIGZvbGRpbmcgZXF1aXZhbGVudCBhY2NvcmRpbmcgCisgICAgICogdG8gVW5pY29kZURhdGEudHh0IGFuZCBDYXNlRm9sZGluZy50eHQ7IGlmIHRoZSBjaGFyYWN0ZXIgaGFzIG5vIGNhc2UgCisgICAgICogZm9sZGluZyBlcXVpdmFsZW50LCB0aGUgY2hhcmFjdGVyIGl0c2VsZiBpcyByZXR1cm5lZC4KKyAgICAgKiBPbmx5ICJzaW1wbGUiLCBzaW5nbGUtY29kZSBwb2ludCBjYXNlIGZvbGRpbmcgbWFwcGluZ3MgYXJlIHVzZWQuCisgICAgICogRm9yICJmdWxsIiwgbXVsdGlwbGUtY29kZSBwb2ludCBtYXBwaW5ncyB1c2UgdGhlIEFQSSAKKyAgICAgKiBmb2xkQ2FzZShTdHJpbmcgc3RyLCBib29sZWFuIGRlZmF1bHRtYXBwaW5nKS4KKyAgICAgKiBAcGFyYW0gY2ggICAgICAgICAgICAgdGhlIGNoYXJhY3RlciB0byBiZSBjb252ZXJ0ZWQKKyAgICAgKiBAcGFyYW0gZGVmYXVsdG1hcHBpbmcgSW5kaWNhdGVzIGlmIGFsbCBtYXBwaW5ncyBkZWZpbmVkIGluIAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBDYXNlRm9sZGluZy50eHQgaXMgdG8gYmUgdXNlZCwgb3RoZXJ3aXNlIHRoZSAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3MgZm9yIGRvdHRlZCBJICBhbmQgZG90bGVzcyBpIG1hcmtlZCB3aXRoIAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAnSScgaW4gQ2FzZUZvbGRpbmcudHh0IHdpbGwgYmUgc2tpcHBlZC4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICAgdGhlIGNhc2UgZm9sZGluZyBlcXVpdmFsZW50IG9mIHRoZSBjaGFyYWN0ZXIsIGlmIAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBhbnk7IG90aGVyd2lzZSB0aGUgY2hhcmFjdGVyIGl0c2VsZi4KKyAgICAgKiBAc2VlICAgICAgICAgICAgICAgICAgI2ZvbGRDYXNlKFN0cmluZywgYm9vbGVhbikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBmb2xkQ2FzZShpbnQgY2gsIGJvb2xlYW4gZGVmYXVsdG1hcHBpbmcpCisgICAgeworICAgICAgICAvLyBTb21lIHNwZWNpYWwgY2FzZXMgYXJlIGhhcmRjb2RlZCBiZWNhdXNlIHRoZWlyIGNvbmRpdGlvbnMgY2Fubm90IGJlCisgICAgICAgIC8vIHBhcnNlZCBhbmQgcHJvY2Vzc2VkIGZyb20gQ2FzZUZvbGRpbmcudHh0LgorICAgICAgICAvLyBVbmljb2RlIDMuMiBDYXNlRm9sZGluZy50eHQgc3BlY2lmaWVzIGZvciBpdHMgc3RhdHVzIGZpZWxkOgorICAgICAgICAvLyAjIEM6IGNvbW1vbiBjYXNlIGZvbGRpbmcsIGNvbW1vbiBtYXBwaW5ncyBzaGFyZWQgYnkgYm90aCBzaW1wbGUgYW5kIAorICAgICAgICAvLyBmdWxsIG1hcHBpbmdzLgorICAgICAgICAvLyAjIEY6IGZ1bGwgY2FzZSBmb2xkaW5nLCBtYXBwaW5ncyB0aGF0IGNhdXNlIHN0cmluZ3MgdG8gZ3JvdyBpbiAKKyAgICAgICAgLy8gbGVuZ3RoLiBNdWx0aXBsZSBjaGFyYWN0ZXJzIGFyZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLgorICAgICAgICAvLyAjIFM6IHNpbXBsZSBjYXNlIGZvbGRpbmcsIG1hcHBpbmdzIHRvIHNpbmdsZSBjaGFyYWN0ZXJzIHdoZXJlIAorICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSBGLgorICAgICAgICAvLyAjIFQ6IHNwZWNpYWwgY2FzZSBmb3IgdXBwZXJjYXNlIEkgYW5kIGRvdHRlZCB1cHBlcmNhc2UgSQorICAgICAgICAvLyAjICAgIC0gRm9yIG5vbi1UdXJraWMgbGFuZ3VhZ2VzLCB0aGlzIG1hcHBpbmcgaXMgbm9ybWFsbHkgbm90IHVzZWQuCisgICAgICAgIC8vICMgICAgLSBGb3IgVHVya2ljIGxhbmd1YWdlcyAodHIsIGF6KSwgdGhpcyBtYXBwaW5nIGNhbiBiZSB1c2VkIAorICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWFwcGluZyBmb3IgdGhlc2UgY2hhcmFjdGVycy4KKyAgICAgICAgLy8gIyBVc2FnZToKKyAgICAgICAgLy8gIyAgQS4gVG8gZG8gYSBzaW1wbGUgY2FzZSBmb2xkaW5nLCB1c2UgdGhlIG1hcHBpbmdzIHdpdGggc3RhdHVzIAorICAgICAgICAvLyBDICsgUy4KKyAgICAgICAgLy8gIyAgQi4gVG8gZG8gYSBmdWxsIGNhc2UgZm9sZGluZywgdXNlIHRoZSBtYXBwaW5ncyB3aXRoIHN0YXR1cyBDICsgRi4KKyAgICAgICAgLy8gIyAgICBUaGUgbWFwcGluZ3Mgd2l0aCBzdGF0dXMgVCBjYW4gYmUgdXNlZCBvciBvbWl0dGVkIGRlcGVuZGluZyBvbiAKKyAgICAgICAgLy8gdGhlIGRlc2lyZWQgY2FzZS1mb2xkaW5nIGJlaGF2aW9yLiAKKyAgICAgICAgLy8gKFRoZSBkZWZhdWx0IG9wdGlvbiBpcyB0byBleGNsdWRlIHRoZW0uKQorICAgICAgICAvLyBVbmljb2RlIDMuMiBoYXMgJ1QnIG1hcHBpbmdzIGFzIGZvbGxvd3M6CisgICAgICAgIC8vIDAwNDk7IFQ7IDAxMzE7ICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgICAgICAvLyAwMTMwOyBUOyAwMDY5OyAjIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBET1QgQUJPVkUKKyAgICAgICAgLy8gd2hpbGUgdGhlIGRlZmF1bHQgbWFwcGluZ3MgZm9yIHRoZXNlIGNvZGUgcG9pbnRzIGFyZToKKyAgICAgICAgLy8gMDA0OTsgQzsgMDA2OTsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgICAgIC8vIDAxMzA7IEY7IDAwNjkgMDMwNzsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCisgICAgICAgIC8vIFUrMDEzMCBpcyBvdGhlcndpc2UgbG93ZXJjYXNlZCB0byBVKzAwNjkgKFVuaWNvZGVEYXRhLnR4dCkuCisgICAgICAgIC8vIEluIGNhc2UgdGhpcyBjb2RlIGlzIHVzZWQgd2l0aCBDYXNlRm9sZGluZy50eHQgZnJvbSBhbiBvbGRlciB2ZXJzaW9uIAorICAgICAgICAvLyBvZiBVbmljb2RlIHdoZXJlIENhc2VGb2xkaW5nLnR4dCBjb250YWlucyBtYXBwaW5ncyB3aXRoIGEgc3RhdHVzIG9mIAorICAgICAgICAvLyAnSScgdGhhdCBoYXZlIHRoZSBvcHBvc2l0ZSBwb2xhcml0eSAoJ0knIG1hcHBpbmdzIGFyZSBpbmNsdWRlZCBieSAKKyAgICAgICAgLy8gZGVmYXVsdCBidXQgZXhjbHVkZWQgZm9yIFR1cmtpYyksIHdlIG11c3QgYWxzbyBoYXJkY29kZSB0aGUgVW5pY29kZSAKKyAgICAgICAgLy8gMy4yIG1hcHBpbmdzIGZvciB0aGUgY29kZSBwb2ludHMgd2l0aCAnSScgbWFwcGluZ3MuIAorICAgICAgICAvLyBVbmljb2RlIDMuMS4xIGhhcyAnSScgbWFwcGluZ3MgZm9yIFUrMDEzMCBhbmQgVSswMTMxLgorICAgICAgICAvLyBVbmljb2RlIDMuMiBoYXMgYSAnVCcgbWFwcGluZyBmb3IgVSswMTMwLCBhbmQgbG93ZXJjYXNlcyBVKzAxMzEgdG8gCisgICAgICAgIC8vIGl0c2VsZiAoc2VlIFVuaWNvZGVEYXRhLnR4dCkuCisgICAgICAgIC8vIHdoZW4gY2ggaXMgb3V0IG9mIGJvdW5kcyBnZXRQcm9wZXJ0eSA9PSAwCisgICAgICAgIGludCBwcm9wcyA9IFBST1BFUlRZXy5nZXRQcm9wZXJ0eShjaCk7CisgICAgICAgIGlmIChpc05vdEV4Y2VwdGlvbkluZGljYXRvcihwcm9wcykpIHsKKyAgICAgICAgICAgIGludCB0eXBlID0gVUNoYXJhY3RlclByb3BlcnR5LlRZUEVfTUFTSyAmIHByb3BzOworICAgICAgICAgICAgaWYgKHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlVQUEVSQ0FTRV9MRVRURVIgfHwKKyAgICAgICAgICAgICAgICB0eXBlID09IFVDaGFyYWN0ZXJDYXRlZ29yeS5USVRMRUNBU0VfTEVUVEVSKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoICsgVUNoYXJhY3RlclByb3BlcnR5LmdldFNpZ25lZFZhbHVlKHByb3BzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0RXhjZXB0aW9uSW5kZXgocHJvcHMpOworICAgICAgICAgICAgaWYgKFBST1BFUlRZXy5oYXNFeGNlcHRpb25WYWx1ZShpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfQ0FTRV9GT0xESU5HXykpIHsKKyAgICAgICAgICAgICAgICBpbnQgZXhjZXB0aW9uID0gUFJPUEVSVFlfLmdldEV4Y2VwdGlvbihpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfQ0FTRV9GT0xESU5HXyk7CisgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbiAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBmb2xkZWRjYXNlY2ggPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUWV8uZ2V0Rm9sZENhc2UoZXhjZXB0aW9uICYgTEFTVF9DSEFSX01BU0tfKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlZGNhc2VjaCAhPSAwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb2xkZWRjYXNlY2g7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb2xkaW5nIG1hcHBpbmdzLCBoYXJkY29kZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRtYXBwaW5nKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBtYXBwaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IDB4NDkgfHwgY2ggPT0gMHgxMzApIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDA0OTsgQzsgMDA2OTsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gc2ltcGxlIGRlZmF1bHQgbWFwcGluZyBmb3IgVSswMTMwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgVW5pY29kZURhdGEudHh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXJQcm9wZXJ0eS5MQVRJTl9TTUFMTF9MRVRURVJfSV87CisgICAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR1cmtpYyBtYXBwaW5ncyAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAweDQ5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDA0OTsgVDsgMDEzMTsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDB4MTMxOworICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09IDB4MTMwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDEzMDsgVDsgMDA2OTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDB4Njk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGNoIGl0c2VsZiBiZWNhdXNlIGl0IGlzIGV4Y2x1ZGVkIGZyb20gY2FzZSBmb2xkaW5nCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaDsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFBST1BFUlRZXy5oYXNFeGNlcHRpb25WYWx1ZShpbmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX0xPV0VSQ0FTRV8pKSB7ICAKKyAgICAgICAgICAgICAgICAvLyBub3QgZWxzZSEgLSBhbGxvdyB0byBmYWxsIHRocm91Z2ggZnJvbSBhYm92ZQorICAgICAgICAgICAgICAgIHJldHVybiBQUk9QRVJUWV8uZ2V0RXhjZXB0aW9uKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19MT1dFUkNBU0VfKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIHJldHVybiBjaDsgLy8gbm8gbWFwcGluZyAtIHJldHVybiB0aGUgY2hhcmFjdGVyIGl0c2VsZgorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZSBnaXZlbiBzdHJpbmcgaXMgbWFwcGVkIHRvIGl0cyBjYXNlIGZvbGRpbmcgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8KKyAgICAgKiBVbmljb2RlRGF0YS50eHQgYW5kIENhc2VGb2xkaW5nLnR4dDsgaWYgYW55IGNoYXJhY3RlciBoYXMgbm8gY2FzZSAKKyAgICAgKiBmb2xkaW5nIGVxdWl2YWxlbnQsIHRoZSBjaGFyYWN0ZXIgaXRzZWxmIGlzIHJldHVybmVkLgorICAgICAqICJGdWxsIiwgbXVsdGlwbGUtY29kZSBwb2ludCBjYXNlIGZvbGRpbmcgbWFwcGluZ3MgYXJlIHJldHVybmVkIGhlcmUuCisgICAgICogRm9yICJzaW1wbGUiIHNpbmdsZS1jb2RlIHBvaW50IG1hcHBpbmdzIHVzZSB0aGUgQVBJIAorICAgICAqIGZvbGRDYXNlKGludCBjaCwgYm9vbGVhbiBkZWZhdWx0bWFwcGluZykuCisgICAgICogQHBhcmFtIHN0ciAgICAgICAgICAgIHRoZSBTdHJpbmcgdG8gYmUgY29udmVydGVkCisgICAgICogQHBhcmFtIGRlZmF1bHRtYXBwaW5nIEluZGljYXRlcyBpZiBhbGwgbWFwcGluZ3MgZGVmaW5lZCBpbiAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgQ2FzZUZvbGRpbmcudHh0IGlzIHRvIGJlIHVzZWQsIG90aGVyd2lzZSB0aGUgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzIGZvciBkb3R0ZWQgSSBhbmQgZG90bGVzcyBpIG1hcmtlZCB3aXRoIAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAnSScgaW4gQ2FzZUZvbGRpbmcudHh0IHdpbGwgYmUgc2tpcHBlZC4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICAgdGhlIGNhc2UgZm9sZGluZyBlcXVpdmFsZW50IG9mIHRoZSBjaGFyYWN0ZXIsIGlmIAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBhbnk7IG90aGVyd2lzZSB0aGUgY2hhcmFjdGVyIGl0c2VsZi4KKyAgICAgKiBAc2VlICAgICAgICAgICAgICAgICAgI2ZvbGRDYXNlKGludCwgYm9vbGVhbikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb2xkQ2FzZShTdHJpbmcgc3RyLCBib29sZWFuIGRlZmF1bHRtYXBwaW5nKQorICAgIHsKKyAgICAgICAgaW50ICAgICAgICAgIHNpemUgICA9IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc2l6ZSk7CisgICAgICAgIGludCAgICAgICAgICBvZmZzZXQgID0gMDsKKyAgICAgICAgaW50ICAgICAgICAgIGNoOworCisgICAgICAgIC8vIGNhc2UgbWFwcGluZyBsb29wCisgICAgICAgIHdoaWxlIChvZmZzZXQgPCBzaXplKSB7CisgICAgICAgICAgICBjaCA9IFVURjE2LmNoYXJBdChzdHIsIG9mZnNldCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGNoKTsKKyAgICAgICAgICAgIGludCBwcm9wcyA9IFBST1BFUlRZXy5nZXRQcm9wZXJ0eShjaCk7CisgICAgICAgICAgICBpZiAoaXNOb3RFeGNlcHRpb25JbmRpY2F0b3IocHJvcHMpKSB7CisgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBVQ2hhcmFjdGVyUHJvcGVydHkuVFlQRV9NQVNLICYgcHJvcHM7CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVUNoYXJhY3RlckNhdGVnb3J5LlVQUEVSQ0FTRV9MRVRURVIgfHwKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9PSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVElUTEVDQVNFX0xFVFRFUikgeworICAgICAgICAgICAgICAgICAgICBjaCArPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0U2lnbmVkVmFsdWUocHJvcHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gIAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gVUNoYXJhY3RlclByb3BlcnR5LmdldEV4Y2VwdGlvbkluZGV4KHByb3BzKTsKKyAgICAgICAgICAgICAgICBpZiAoUFJPUEVSVFlfLmhhc0V4Y2VwdGlvblZhbHVlKGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENfQ0FTRV9GT0xESU5HXykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbiA9IFBST1BFUlRZXy5nZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX0NBU0VfRk9MRElOR18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb24gIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVFlfLmdldEZvbGRDYXNlKGV4Y2VwdGlvbiAmIExBU1RfQ0hBUl9NQVNLXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24gPj4gU0hJRlRfMjRfLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb2xkaW5nIG1hcHBpbmdzLCBoYXJkY29kZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCAhPSAweDQ5ICYmIGNoICE9IDB4MTMwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGNoIGl0c2VsZiBiZWNhdXNlIHRoZXJlIGlzIG5vIHNwZWNpYWwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFwcGluZyBmb3IgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5hcHBlbmQocmVzdWx0LCBjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdG1hcHBpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IG1hcHBpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IDB4NDkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDA0OTsgQzsgMDA2OTsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuTEFUSU5fU01BTExfTEVUVEVSX0lfKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gMHgxMzApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDEzMDsgRjsgMDA2OSAwMzA3OyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIEFCT1ZFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuTEFUSU5fU01BTExfTEVUVEVSX0lfKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoY2hhcikweDMwNyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHVya2ljIG1hcHBpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IDB4NDkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDA0OTsgVDsgMDEzMTsgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGNoYXIpMHgxMzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gMHgxMzApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDEzMDsgVDsgMDA2OTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERPVCBBQk9WRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkxBVElOX1NNQUxMX0xFVFRFUl9JXyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBmYWxsIHRocm91Z2ggdG8gdGhlIG91dHB1dCBvZiBjCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQUk9QRVJUWV8uaGFzRXhjZXB0aW9uVmFsdWUoaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuRVhDX0xPV0VSQ0FTRV8pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFBST1BFUlRZXy5nZXRFeGNlcHRpb24oaW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LkVYQ19MT1dFUkNBU0VfKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaGFuZGxlIDE6MSBjb2RlIHBvaW50IG1hcHBpbmdzIGZyb20gVW5pY29kZURhdGEudHh0CisgICAgICAgICAgICBVVEYxNi5hcHBlbmQocmVzdWx0LCBjaCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIG51bWVyaWMgdmFsdWUgb2YgSGFuIGNvZGUgcG9pbnRzLgorICAgICAqIDxicj4gVGhpcyByZXR1cm5zIHRoZSB2YWx1ZSBvZiBIYW4gJ251bWVyaWMnIGNvZGUgcG9pbnRzLAorICAgICAqIGluY2x1ZGluZyB0aG9zZSBmb3IgemVybywgdGVuLCBodW5kcmVkLCB0aG91c2FuZCwgdGVuIHRob3VzYW5kLAorICAgICAqIGFuZCBodW5kcmVkIG1pbGxpb24uICBVbmljb2RlIGRvZXMgbm90IGNvbnNpZGVyIHRoZXNlIHRvIGJlCisgICAgICogbnVtZXJpYy4gVGhpcyBpbmNsdWRlcyBib3RoIHRoZSBzdGFuZGFyZCBhbmQgJ2NoZWNrd3JpdGluZycKKyAgICAgKiBjaGFyYWN0ZXJzLCB0aGUgJ2JpZyBjaXJjbGUnIHplcm8gY2hhcmFjdGVyLCBhbmQgdGhlIHN0YW5kYXJkCisgICAgICogemVybyBjaGFyYWN0ZXIuCisgICAgICogQHBhcmFtIGNoIGNvZGUgcG9pbnQgdG8gcXVlcnkKKyAgICAgKiBAcmV0dXJuIHZhbHVlIGlmIGl0IGlzIGEgSGFuICdudW1lcmljIGNoYXJhY3RlciwnIG90aGVyd2lzZSByZXR1cm4gLTEuICAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRIYW5OdW1lcmljVmFsdWUoaW50IGNoKQorICAgIHsKKyAgICAgICAgc3dpdGNoKGNoKQorICAgICAgICB7CisgICAgICAgIGNhc2UgSURFT0dSQVBISUNfTlVNQkVSX1pFUk9fIDoKKyAgICAgICAgY2FzZSBDSktfSURFT0dSQVBIX0NPTVBMRVhfWkVST18gOgorICAgICAgICAgICAgcmV0dXJuIDA7IC8vIEhhbiBaZXJvCisgICAgICAgIGNhc2UgQ0pLX0lERU9HUkFQSF9GSVJTVF8gOgorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfQ09NUExFWF9PTkVfIDoKKyAgICAgICAgICAgIHJldHVybiAxOyAvLyBIYW4gT25lCisgICAgICAgIGNhc2UgQ0pLX0lERU9HUkFQSF9TRUNPTkRfIDoKKyAgICAgICAgY2FzZSBDSktfSURFT0dSQVBIX0NPTVBMRVhfVFdPXyA6CisgICAgICAgICAgICByZXR1cm4gMjsgLy8gSGFuIFR3bworICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfVEhJUkRfIDoKKyAgICAgICAgY2FzZSBDSktfSURFT0dSQVBIX0NPTVBMRVhfVEhSRUVfIDoKKyAgICAgICAgICAgIHJldHVybiAzOyAvLyBIYW4gVGhyZWUKKyAgICAgICAgY2FzZSBDSktfSURFT0dSQVBIX0ZPVVJUSF8gOgorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfQ09NUExFWF9GT1VSXyA6CisgICAgICAgICAgICByZXR1cm4gNDsgLy8gSGFuIEZvdXIKKyAgICAgICAgY2FzZSBDSktfSURFT0dSQVBIX0ZJRlRIXyA6CisgICAgICAgIGNhc2UgQ0pLX0lERU9HUkFQSF9DT01QTEVYX0ZJVkVfIDoKKyAgICAgICAgICAgIHJldHVybiA1OyAvLyBIYW4gRml2ZQorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfU0lYVEhfIDoKKyAgICAgICAgY2FzZSBDSktfSURFT0dSQVBIX0NPTVBMRVhfU0lYXyA6CisgICAgICAgICAgICByZXR1cm4gNjsgLy8gSGFuIFNpeAorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfU0VWRU5USF8gOgorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfQ09NUExFWF9TRVZFTl8gOgorICAgICAgICAgICAgcmV0dXJuIDc7IC8vIEhhbiBTZXZlbgorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfRUlHSFRIXyA6IAorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfQ09NUExFWF9FSUdIVF8gOgorICAgICAgICAgICAgcmV0dXJuIDg7IC8vIEhhbiBFaWdodAorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfTklORVRIXyA6CisgICAgICAgIGNhc2UgQ0pLX0lERU9HUkFQSF9DT01QTEVYX05JTkVfIDoKKyAgICAgICAgICAgIHJldHVybiA5OyAvLyBIYW4gTmluZQorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfVEVOXyA6CisgICAgICAgIGNhc2UgQ0pLX0lERU9HUkFQSF9DT01QTEVYX1RFTl8gOgorICAgICAgICAgICAgcmV0dXJuIDEwOworICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfSFVORFJFRF8gOgorICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfQ09NUExFWF9IVU5EUkVEXyA6CisgICAgICAgICAgICByZXR1cm4gMTAwOworICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfVEhPVVNBTkRfIDoKKyAgICAgICAgY2FzZSBDSktfSURFT0dSQVBIX0NPTVBMRVhfVEhPVVNBTkRfIDoKKyAgICAgICAgICAgIHJldHVybiAxMDAwOworICAgICAgICBjYXNlIENKS19JREVPR1JBUEhfVEVOX1RIT1VTQU5EXyA6CisgICAgICAgICAgICByZXR1cm4gMTAwMDA7CisgICAgICAgIGNhc2UgQ0pLX0lERU9HUkFQSF9IVU5EUkVEX01JTExJT05fIDoKKyAgICAgICAgICAgIHJldHVybiAxMDAwMDAwMDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOyAvLyBubyB2YWx1ZQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD5HZXRzIGFuIGl0ZXJhdG9yIGZvciBjaGFyYWN0ZXIgdHlwZXMsIGl0ZXJhdGluZyBvdmVyIGNvZGVwb2ludHMuPC9wPgorICAgICAqIEV4YW1wbGUgb2YgdXNlOjxicj4KKyAgICAgKiA8cHJlPgorICAgICAqIFJhbmdlVmFsdWVJdGVyYXRvciBpdGVyYXRvciA9IFVDaGFyYWN0ZXIuZ2V0VHlwZUl0ZXJhdG9yKCk7CisgICAgICogUmFuZ2VWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQgZWxlbWVudCA9IG5ldyBSYW5nZVZhbHVlSXRlcmF0b3IuRWxlbWVudCgpOworICAgICAqIHdoaWxlIChpdGVyYXRvci5uZXh0KGVsZW1lbnQpKSB7CisgICAgICogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29kZXBvaW50IFxcdSIgKyAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoZWxlbWVudC5zdGFydCkgKyAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gY29kZXBvaW50IFxcdSIgKworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhlbGVtZW50LmxpbWl0IC0gMSkgKyAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzIHRoZSBjaGFyYWN0ZXIgdHlwZSAiICsgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlKTsKKyAgICAgKiB9CisgICAgICogPC9wcmU+CisgICAgICogQHJldHVybiBhbiBpdGVyYXRvciAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUmFuZ2VWYWx1ZUl0ZXJhdG9yIGdldFR5cGVJdGVyYXRvcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFVDaGFyYWN0ZXJUeXBlSXRlcmF0b3IoUFJPUEVSVFlfKTsKKyAgICB9CisKKwkvKioKKyAgICAgKiA8cD5HZXRzIGFuIGl0ZXJhdG9yIGZvciBjaGFyYWN0ZXIgbmFtZXMsIGl0ZXJhdGluZyBvdmVyIGNvZGVwb2ludHMuPC9wPgorICAgICAqIDxwPlRoaXMgQVBJIG9ubHkgZ2V0cyB0aGUgaXRlcmF0b3IgZm9yIHRoZSBtb2Rlcm4sIG1vc3QgdXAtdG8tZGF0ZSAKKyAgICAgKiBVbmljb2RlIG5hbWVzLiBGb3Igb2xkZXIgMS4wIFVuaWNvZGUgbmFtZXMgdXNlIGdldDFfME5hbWVJdGVyYXRvcigpIG9yCisgICAgICogZm9yIGV4dGVuZGVkIG5hbWVzIHVzZSBnZXRFeHRlbmRlZE5hbWVJdGVyYXRvcigpLjwvcD4KKyAgICAgKiBFeGFtcGxlIG9mIHVzZTo8YnI+CisgICAgICogPHByZT4KKyAgICAgKiBWYWx1ZUl0ZXJhdG9yIGl0ZXJhdG9yID0gVUNoYXJhY3Rlci5nZXROYW1lSXRlcmF0b3IoKTsKKyAgICAgKiBWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQgZWxlbWVudCA9IG5ldyBWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQoKTsKKyAgICAgKiB3aGlsZSAoaXRlcmF0b3IubmV4dChlbGVtZW50KSkgeworICAgICAqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvZGVwb2ludCBcXHUiICsgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVsZW1lbnQuY29kZXBvaW50KSArCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAiIGhhcyB0aGUgbmFtZSAiICsgKFN0cmluZyllbGVtZW50LnZhbHVlKTsKKyAgICAgKiB9CisgICAgICogPC9wcmU+CisgICAgICogPHA+VGhlIG1heGltYWwgcmFuZ2Ugd2hpY2ggdGhlIG5hbWUgaXRlcmF0b3IgaXRlcmF0ZXMgaXMgZnJvbSAKKyAgICAgKiBVQ2hhcmFjdGVyLk1JTl9WQUxVRSB0byBVQ2hhcmFjdGVyLk1BWF9WQUxVRS48L3A+CisgICAgICogQHJldHVybiBhbiBpdGVyYXRvciAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVmFsdWVJdGVyYXRvciBnZXROYW1lSXRlcmF0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBVQ2hhcmFjdGVyTmFtZUl0ZXJhdG9yKE5BTUVfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyTmFtZUNob2ljZS5VTklDT0RFX0NIQVJfTkFNRSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPkdldHMgYW4gaXRlcmF0b3IgZm9yIGNoYXJhY3RlciBuYW1lcywgaXRlcmF0aW5nIG92ZXIgY29kZXBvaW50cy48L3A+CisgICAgICogPHA+VGhpcyBBUEkgb25seSBnZXRzIHRoZSBpdGVyYXRvciBmb3IgdGhlIG9sZGVyIDEuMCBVbmljb2RlIG5hbWVzLiAKKyAgICAgKiBGb3IgbW9kZXJuLCBtb3N0IHVwLXRvLWRhdGUgVW5pY29kZSBuYW1lcyB1c2UgZ2V0TmFtZUl0ZXJhdG9yKCkgb3IKKyAgICAgKiBmb3IgZXh0ZW5kZWQgbmFtZXMgdXNlIGdldEV4dGVuZGVkTmFtZUl0ZXJhdG9yKCkuPC9wPgorICAgICAqIEV4YW1wbGUgb2YgdXNlOjxicj4KKyAgICAgKiA8cHJlPgorICAgICAqIFZhbHVlSXRlcmF0b3IgaXRlcmF0b3IgPSBVQ2hhcmFjdGVyLmdldDFfME5hbWVJdGVyYXRvcigpOworICAgICAqIFZhbHVlSXRlcmF0b3IuRWxlbWVudCBlbGVtZW50ID0gbmV3IFZhbHVlSXRlcmF0b3IuRWxlbWVudCgpOworICAgICAqIHdoaWxlIChpdGVyYXRvci5uZXh0KGVsZW1lbnQpKSB7CisgICAgICogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29kZXBvaW50IFxcdSIgKyAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoZWxlbWVudC5jb2RlcG9pbnQpICsKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzIHRoZSBuYW1lICIgKyAoU3RyaW5nKWVsZW1lbnQudmFsdWUpOworICAgICAqIH0KKyAgICAgKiA8L3ByZT4KKyAgICAgKiA8cD5UaGUgbWF4aW1hbCByYW5nZSB3aGljaCB0aGUgbmFtZSBpdGVyYXRvciBpdGVyYXRlcyBpcyBmcm9tIAorICAgICAqIEByZXR1cm4gYW4gaXRlcmF0b3IgCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFZhbHVlSXRlcmF0b3IgZ2V0TmFtZTFfMEl0ZXJhdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVUNoYXJhY3Rlck5hbWVJdGVyYXRvcihOQU1FXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLlVOSUNPREVfMTBfQ0hBUl9OQU1FKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogPHA+R2V0cyBhbiBpdGVyYXRvciBmb3IgY2hhcmFjdGVyIG5hbWVzLCBpdGVyYXRpbmcgb3ZlciBjb2RlcG9pbnRzLjwvcD4KKyAgICAgKiA8cD5UaGlzIEFQSSBvbmx5IGdldHMgdGhlIGl0ZXJhdG9yIGZvciB0aGUgZXh0ZW5kZWQgbmFtZXMuIAorICAgICAqIEZvciBtb2Rlcm4sIG1vc3QgdXAtdG8tZGF0ZSBVbmljb2RlIG5hbWVzIHVzZSBnZXROYW1lSXRlcmF0b3IoKSBvcgorICAgICAqIGZvciBvbGRlciAxLjAgVW5pY29kZSBuYW1lcyB1c2UgZ2V0MV8wTmFtZUl0ZXJhdG9yKCkuPC9wPgorICAgICAqIEV4YW1wbGUgb2YgdXNlOjxicj4KKyAgICAgKiA8cHJlPgorICAgICAqIFZhbHVlSXRlcmF0b3IgaXRlcmF0b3IgPSBVQ2hhcmFjdGVyLmdldEV4dGVuZGVkTmFtZUl0ZXJhdG9yKCk7CisgICAgICogVmFsdWVJdGVyYXRvci5FbGVtZW50IGVsZW1lbnQgPSBuZXcgVmFsdWVJdGVyYXRvci5FbGVtZW50KCk7CisgICAgICogd2hpbGUgKGl0ZXJhdG9yLm5leHQoZWxlbWVudCkpIHsKKyAgICAgKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb2RlcG9pbnQgXFx1IiArIAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhlbGVtZW50LmNvZGVwb2ludCkgKworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIiBoYXMgdGhlIG5hbWUgIiArIChTdHJpbmcpZWxlbWVudC52YWx1ZSk7CisgICAgICogfQorICAgICAqIDwvcHJlPgorICAgICAqIDxwPlRoZSBtYXhpbWFsIHJhbmdlIHdoaWNoIHRoZSBuYW1lIGl0ZXJhdG9yIGl0ZXJhdGVzIGlzIGZyb20gCisgICAgICogQHJldHVybiBhbiBpdGVyYXRvciAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVmFsdWVJdGVyYXRvciBnZXRFeHRlbmRlZE5hbWVJdGVyYXRvcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFVDaGFyYWN0ZXJOYW1lSXRlcmF0b3IoTkFNRV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyTmFtZUNob2ljZS5FWFRFTkRFRF9DSEFSX05BTUUpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD5HZXQgdGhlICJhZ2UiIG9mIHRoZSBjb2RlIHBvaW50LjwvcD4KKyAgICAgKiA8cD5UaGUgImFnZSIgaXMgdGhlIFVuaWNvZGUgdmVyc2lvbiB3aGVuIHRoZSBjb2RlIHBvaW50IHdhcyBmaXJzdAorICAgICAqIGRlc2lnbmF0ZWQgKGFzIGEgbm9uLWNoYXJhY3RlciBvciBmb3IgUHJpdmF0ZSBVc2UpIG9yIGFzc2lnbmVkIGEgCisgICAgICogY2hhcmFjdGVyLgorICAgICAqIDxwPlRoaXMgY2FuIGJlIHVzZWZ1bCB0byBhdm9pZCBlbWl0dGluZyBjb2RlIHBvaW50cyB0byByZWNlaXZpbmcgCisgICAgICogcHJvY2Vzc2VzIHRoYXQgZG8gbm90IGFjY2VwdCBuZXdlciBjaGFyYWN0ZXJzLjwvcD4KKyAgICAgKiA8cD5UaGUgZGF0YSBpcyBmcm9tIHRoZSBVQ0QgZmlsZSBEZXJpdmVkQWdlLnR4dC48L3A+CisgICAgICogQHBhcmFtIGNoIFRoZSBjb2RlIHBvaW50LgorICAgICAqIEByZXR1cm4gdGhlIFVuaWNvZGUgdmVyc2lvbiBudW1iZXIKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVmVyc2lvbkluZm8gZ2V0QWdlKGludCBjaCkgCisgICAgeworICAgIAlpZiAoY2ggPCBNSU5fVkFMVUUgfHwgY2ggPiBNQVhfVkFMVUUpIHsKKyAgICAJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNvZGVwb2ludCBvdXQgb2YgYm91bmRzIik7CisgICAgCX0KKyAgICAJcmV0dXJuIFBST1BFUlRZXy5nZXRBZ2UoY2gpOworICAgIH0KKyAgICAKKyAgICAvKioKKwkgKiA8cD5DaGVjayBhIGJpbmFyeSBVbmljb2RlIHByb3BlcnR5IGZvciBhIGNvZGUgcG9pbnQuPC9wPiAKKwkgKiA8cD5Vbmljb2RlLCBlc3BlY2lhbGx5IGluIHZlcnNpb24gMy4yLCBkZWZpbmVzIG1hbnkgbW9yZSBwcm9wZXJ0aWVzIAorCSAqIHRoYW4gdGhlIG9yaWdpbmFsIHNldCBpbiBVbmljb2RlRGF0YS50eHQuPC9wPgorCSAqIDxwPlRoaXMgQVBJIGlzIGludGVuZGVkIHRvIHJlZmxlY3QgVW5pY29kZSBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gCisJICogdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIChVQ0QpIGFuZCBVbmljb2RlIFRlY2huaWNhbCBSZXBvcnRzIAorCSAqIChVVFIpLjwvcD4KKwkgKiA8cD5Gb3IgZGV0YWlscyBhYm91dCB0aGUgcHJvcGVydGllcyBzZWUgCisJICogPGEgaHJlZj1odHRwOi8vd3d3LnVuaWNvZGUub3JnLz5odHRwOi8vd3d3LnVuaWNvZGUub3JnLzwvYT4uPC9wPgorCSAqIDxwPkZvciBuYW1lcyBvZiBVbmljb2RlIHByb3BlcnRpZXMgc2VlIHRoZSBVQ0QgZmlsZSAKKwkgKiBQcm9wZXJ0eUFsaWFzZXMudHh0LjwvcD4KKwkgKiA8cD5UaGlzIEFQSSBkb2VzIG5vdCBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvZGVwb2ludC48L3A+CisJICogPHA+SW1wb3J0YW50OiBJZiBJQ1UgaXMgYnVpbHQgd2l0aCBVQ0QgZmlsZXMgZnJvbSBVbmljb2RlIHZlcnNpb25zIAorCSAqIGJlbG93IDMuMiwgdGhlbiBwcm9wZXJ0aWVzIG1hcmtlZCB3aXRoICJuZXciIGFyZSBub3Qgb3IgCisJICogbm90IGZ1bGx5IGF2YWlsYWJsZS48L3A+CisJICogQHBhcmFtIGNvZGVwb2ludCBDb2RlIHBvaW50IHRvIHRlc3QuCisJICogQHBhcmFtIHByb3BlcnR5IHNlbGVjdG9yIGNvbnN0YW50IGZyb20gY29tLmlibS5pY3UubGFuZy5VUHJvcGVydHksIAorCSAqICAgICAgICBpZGVudGlmaWVzIHdoaWNoIGJpbmFyeSBwcm9wZXJ0eSB0byBjaGVjay4KKwkgKiBAcmV0dXJuIHRydWUgb3IgZmFsc2UgYWNjb3JkaW5nIHRvIHRoZSBiaW5hcnkgVW5pY29kZSBwcm9wZXJ0eSB2YWx1ZSAKKwkgKiAgICAgICAgIGZvciBjaC4gQWxzbyBmYWxzZSBpZiBwcm9wZXJ0eSBpcyBvdXQgb2YgYm91bmRzIG9yIGlmIHRoZSAKKwkgKiAgICAgICAgIFVuaWNvZGUgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIGRhdGEgZm9yIHRoZSBwcm9wZXJ0eSBhdCBhbGwsIG9yIAorCSAqICAgICAgICAgbm90IGZvciB0aGlzIGNvZGUgcG9pbnQuCisJICogQHNlZSBjb20uaWJtLmljdS5sYW5nLlVQcm9wZXJ0eQorCSAqIEBkcmFmdCBJQ1UgMi4xCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGhhc0JpbmFyeVByb3BlcnR5KGludCBjaCwgaW50IHByb3BlcnR5KSAKKwl7CisJCWlmIChjaCA8IE1JTl9WQUxVRSB8fCBjaCA+IE1BWF9WQUxVRSkgeworICAgIAkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29kZXBvaW50IG91dCBvZiBib3VuZHMiKTsKKyAgICAJfQorICAgIAlyZXR1cm4gUFJPUEVSVFlfLmhhc0JpbmFyeVByb3BlcnR5KGNoLCBwcm9wZXJ0eSk7CisJfQorCQorCS8qKgorCSAqIDxwPkNoZWNrIGlmIGEgY29kZSBwb2ludCBoYXMgdGhlIEFscGhhYmV0aWMgVW5pY29kZSBwcm9wZXJ0eS48L3A+IAorCSAqIDxwPlNhbWUgYXMgVUNoYXJhY3Rlci5oYXNCaW5hcnlQcm9wZXJ0eShjaCwgVVByb3BlcnR5LkFMUEhBQkVUSUMpLjwvcD4KKwkgKiA8cD5EaWZmZXJlbnQgZnJvbSBVQ2hhcmFjdGVyLmlzTGV0dGVyKGNoKSE8L3A+IAorCSAqIEBkcmFmdCBJQ1UgMi4xCisJICogQHBhcmFtIGNoIGNvZGVwb2ludCB0byBiZSB0ZXN0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNVQWxwaGFiZXRpYyhpbnQgY2gpCisJeworCQlyZXR1cm4gaGFzQmluYXJ5UHJvcGVydHkoY2gsIFVQcm9wZXJ0eS5BTFBIQUJFVElDKTsKKwl9CisKKwkvKioKKwkgKiA8cD5DaGVjayBpZiBhIGNvZGUgcG9pbnQgaGFzIHRoZSBMb3dlcmNhc2UgVW5pY29kZSBwcm9wZXJ0eS48L3A+CisJICogPHA+U2FtZSBhcyBVQ2hhcmFjdGVyLmhhc0JpbmFyeVByb3BlcnR5KGNoLCBVUHJvcGVydHkuTE9XRVJDQVNFKS48L3A+CisJICogPHA+VGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBVQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKGNoKSE8L3A+CisJICogQHBhcmFtIGNoIGNvZGVwb2ludCB0byBiZSB0ZXN0ZWQKKwkgKiBAZHJhZnQgSUNVIDIuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VMb3dlcmNhc2UoaW50IGNoKSAKKwl7CisJCXJldHVybiBoYXNCaW5hcnlQcm9wZXJ0eShjaCwgVVByb3BlcnR5LkxPV0VSQ0FTRSk7CisJfQorCisJLyoqCisJICogPHA+Q2hlY2sgaWYgYSBjb2RlIHBvaW50IGhhcyB0aGUgVXBwZXJjYXNlIFVuaWNvZGUgcHJvcGVydHkuPC9wPgorCSAqIDxwPlNhbWUgYXMgVUNoYXJhY3Rlci5oYXNCaW5hcnlQcm9wZXJ0eShjaCwgVVByb3BlcnR5LlVQUEVSQ0FTRSkuPC9wPgorCSAqIDxwPlRoaXMgaXMgZGlmZmVyZW50IGZyb20gVUNoYXJhY3Rlci5pc1VwcGVyQ2FzZShjaCkhPC9wPgorCSAqIEBwYXJhbSBjaCBjb2RlcG9pbnQgdG8gYmUgdGVzdGVkCisJICogQGRyYWZ0IElDVSAyLjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNVVXBwZXJjYXNlKGludCBjaCkgCisJeworCQlyZXR1cm4gaGFzQmluYXJ5UHJvcGVydHkoY2gsIFVQcm9wZXJ0eS5VUFBFUkNBU0UpOworCX0KKworCS8qKgorCSAqIDxwPkNoZWNrIGlmIGEgY29kZSBwb2ludCBoYXMgdGhlIFdoaXRlX1NwYWNlIFVuaWNvZGUgcHJvcGVydHkuPC9wPgorCSAqIDxwPlNhbWUgYXMgVUNoYXJhY3Rlci5oYXNCaW5hcnlQcm9wZXJ0eShjaCwgVVByb3BlcnR5LldISVRFX1NQQUNFKS48L3A+CisJICogPHA+VGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBib3RoIFVDaGFyYWN0ZXIuaXNTcGFjZShjaCkgYW5kIAorCSAqIFVDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGNoKSE8L3A+CisJICogQHBhcmFtIGNoIGNvZGVwb2ludCB0byBiZSB0ZXN0ZWQKKwkgKiBAZHJhZnQgSUNVIDIuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VXaGl0ZVNwYWNlKGludCBjaCkgCisJeworCQlyZXR1cm4gaGFzQmluYXJ5UHJvcGVydHkoY2gsIFVQcm9wZXJ0eS5XSElURV9TUEFDRSk7CisJfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPkdldHMgdGhlIHByb3BlcnR5IHZhbHVlIGZvciBhbiBVbmljb2RlIHByb3BlcnR5IHR5cGUgb2YgYSBjb2RlIHBvaW50LiAKKyAgICAgKiBBbHNvIHJldHVybnMgYmluYXJ5IHByb3BlcnR5IHZhbHVlcy48L3A+CisgICAgICogPHA+VW5pY29kZSwgZXNwZWNpYWxseSBpbiB2ZXJzaW9uIDMuMiwgZGVmaW5lcyBtYW55IG1vcmUgcHJvcGVydGllcyB0aGFuIAorICAgICAqIHRoZSBvcmlnaW5hbCBzZXQgaW4gVW5pY29kZURhdGEudHh0LjwvcD4KKyAgICAgKiA8cD5UaGUgcHJvcGVydGllcyBBUElzIGFyZSBpbnRlbmRlZCB0byByZWZsZWN0IFVuaWNvZGUgcHJvcGVydGllcyBhcyAKKyAgICAgKiBkZWZpbmVkIGluIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSAoVUNEKSBhbmQgVW5pY29kZSBUZWNobmljYWwgCisgICAgICogUmVwb3J0cyAoVVRSKS4gRm9yIGRldGFpbHMgYWJvdXQgdGhlIHByb3BlcnRpZXMgc2VlIAorICAgICAqIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvLjwvcD4KKyAgICAgKiA8cD5Gb3IgbmFtZXMgb2YgVW5pY29kZSBwcm9wZXJ0aWVzIHNlZSB0aGUgVUNEIGZpbGUgUHJvcGVydHlBbGlhc2VzLnR4dC4KKyAgICAgKiA8L3A+CisgICAgICogPHByZT4KKyAgICAgKiBTYW1wbGUgdXNhZ2U6CisgICAgICogaW50IGVhID0gVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eVZhbHVlKGMsIFVQcm9wZXJ0eS5FQVNUX0FTSUFOX1dJRFRIKTsKKyAgICAgKiBpbnQgaWRlbyA9IFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlWYWx1ZShjLCBVUHJvcGVydHkuSURFT0dSQVBISUMpOworICAgICAqIGJvb2xlYW4gYiA9IChpZGVvID09IDEpID8gdHJ1ZSA6IGZhbHNlOyAKKyAgICAgKiA8L3ByZT4KKyAgICAgKiBAcGFyYW0gY2ggY29kZSBwb2ludCB0byB0ZXN0LgorICAgICAqIEBwYXJhbSB3aGljaCBVUHJvcGVydHkgc2VsZWN0b3IgY29uc3RhbnQsIGlkZW50aWZpZXMgd2hpY2ggYmluYXJ5IAorICAgICAqICAgICAgICBwcm9wZXJ0eSB0byBjaGVjay4gTXVzdCBiZSBVUHJvcGVydHkuQklOQVJZX1NUQVJUICZsdDs9IHdoaWNoCisgICAgICogICAgICAgICZsdDsgVVByb3BlcnR5LkJJTkFSWV9MSU1JVCBvciBVUHJvcGVydHkuSU5UX1NUQVJUICZsdDs9IHdoaWNoCisgICAgICogICAgICAgICZsdDsgVVByb3BlcnR5LklOVF9MSU1JVC4KKyAgICAgKiBAcmV0dXJuIG51bWVyaWMgdmFsdWUgdGhhdCBpcyBkaXJlY3RseSB0aGUgcHJvcGVydHkgdmFsdWUgb3IsCisgICAgICogICAgICAgICBmb3IgZW51bWVyYXRlZCBwcm9wZXJ0aWVzLCBjb3JyZXNwb25kcyB0byB0aGUgbnVtZXJpYyB2YWx1ZSBvZiAKKyAgICAgKiAgICAgICAgIHRoZSBlbnVtZXJhdGVkIGNvbnN0YW50IG9mIHRoZSByZXNwZWN0aXZlIHByb3BlcnR5IHZhbHVlIAorICAgICAqICAgICAgICAgZW51bWVyYXRpb24gdHlwZSAoY2FzdCB0byBlbnVtIHR5cGUgaWYgbmVjZXNzYXJ5KS4KKyAgICAgKiAgICAgICAgIFJldHVybnMgMCBvciAxIChmb3IgZmFsc2UgLyB0cnVlKSBmb3IgYmluYXJ5IFVuaWNvZGUgcHJvcGVydGllcy4KKyAgICAgKiAgICAgICAgIFJldHVybnMgMCBpZiB3aGljaCBpcyBvdXQgb2YgYm91bmRzIG9yIGlmIHRoZSBVbmljb2RlIHZlcnNpb24KKyAgICAgKiAgICAgICAgIGRvZXMgbm90IGhhdmUgZGF0YSBmb3IgdGhlIHByb3BlcnR5IGF0IGFsbCwgb3Igbm90IGZvciB0aGlzIGNvZGUgCisgICAgICogICAgICAgICBwb2ludC4KKyAgICAgKiBAc2VlIFVQcm9wZXJ0eQorICAgICAqIEBzZWUgI2hhc0JpbmFyeVByb3BlcnR5CisgICAgICogQHNlZSAjZ2V0SW50UHJvcGVydHlNaW5WYWx1ZQorICAgICAqIEBzZWUgI2dldEludFByb3BlcnR5TWF4VmFsdWUKKyAgICAgKiBAc2VlICNnZXRVbmljb2RlVmVyc2lvbgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0SW50UHJvcGVydHlWYWx1ZShpbnQgY2gsIGludCB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPCBVUHJvcGVydHkuQklOQVJZX1NUQVJUKSB7CisgICAgICAgICAgICByZXR1cm4gMDsgLy8gdW5kZWZpbmVkCisgICAgICAgIH0gCisgICAgICAgIGVsc2UgaWYgKHR5cGUgPCBVUHJvcGVydHkuQklOQVJZX0xJTUlUKSB7CisgICAgICAgICAgICByZXR1cm4gaGFzQmluYXJ5UHJvcGVydHkoY2gsIHR5cGUpID8gMSA6IDA7CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgaWYgKHR5cGUgPCBVUHJvcGVydHkuSU5UX1NUQVJUKSB7CisgICAgICAgICAgICByZXR1cm4gMDsgLy8gdW5kZWZpbmVkCisgICAgICAgIH0gCisgICAgICAgIGVsc2UgaWYgKHR5cGUgPCBVUHJvcGVydHkuSU5UX0xJTUlUKSB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBVUHJvcGVydHkuQklESV9DTEFTUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RGlyZWN0aW9uKGNoKTsKKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5LkJMT0NLOgorICAgICAgICAgICAgICAgIHJldHVybiBVbmljb2RlQmxvY2sub2YoY2gpLmdldElEKCk7CisgICAgICAgICAgICBjYXNlIFVQcm9wZXJ0eS5DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTOgorICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb21iaW5pbmdDbGFzcyhjaCk7CisgICAgICAgICAgICBjYXNlIFVQcm9wZXJ0eS5ERUNPTVBPU0lUSU9OX1RZUEU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFBST1BFUlRZXy5nZXRBZGRpdGlvbmFsKGNoLCAyKSAKKyAgICAgICAgICAgICAgICAgICAgICAgJiBERUNPTVBPU0lUSU9OX1RZUEVfTUFTS187CisgICAgICAgICAgICBjYXNlIFVQcm9wZXJ0eS5FQVNUX0FTSUFOX1dJRFRIOgorICAgICAgICAgICAgICAgIHJldHVybiAoUFJPUEVSVFlfLmdldEFkZGl0aW9uYWwoY2gsIDApCisgICAgICAgICAgICAgICAgICAgICAgICYgRUFTVF9BU0lBTl9NQVNLXykgPj4gRUFTVF9BU0lBTl9TSElGVF87CisgICAgICAgICAgICBjYXNlIFVQcm9wZXJ0eS5HRU5FUkFMX0NBVEVHT1JZOgorICAgICAgICAgICAgICAgIHJldHVybiBnZXRUeXBlKGNoKTsKKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5LkpPSU5JTkdfR1JPVVA6CisgICAgICAgICAgICAgICAgcmV0dXJuIChQUk9QRVJUWV8uZ2V0QWRkaXRpb25hbChjaCwgMikgCisgICAgICAgICAgICAgICAgICAgICAgICYgSk9JTklOR19HUk9VUF9NQVNLXykgPj4gSk9JTklOR19HUk9VUF9TSElGVF87CisgICAgICAgICAgICBjYXNlIFVQcm9wZXJ0eS5KT0lOSU5HX1RZUEU6CisgICAgICAgICAgICAgICAgLy8gQXJhYmljU2hhcGluZy50eHQ6CisgICAgICAgICAgICAgICAgLy8gTm90ZTogQ2hhcmFjdGVycyBvZiBqb2luaW5nIHR5cGUgVCBhbmQgbW9zdCBjaGFyYWN0ZXJzIG9mIAorICAgICAgICAgICAgICAgIC8vIGpvaW5pbmcgdHlwZSBVIGFyZSBub3QgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhpcyBmaWxlLgorICAgICAgICAgICAgICAgIC8vIENoYXJhY3RlcnMgb2Ygam9pbmluZyB0eXBlIFQgY2FuIFtiZV0gZGVyaXZlZCBieSB0aGUgZm9sbG93aW5nIGZvcm11bGE6CisgICAgICAgICAgICAgICAgLy8gICBUID0gTW4gKyBDZiAtIFpXTkogLSBaV0oKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAoUFJPUEVSVFlfLmdldEFkZGl0aW9uYWwoY2gsIDIpIAorICAgICAgICAgICAgICAgICAgICAgICAgICYgSk9JTklOR19UWVBFX01BU0tfKSA+PiBKT0lOSU5HX1RZUEVfU0hJRlRfOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gMCAmJiBjaCAhPSBaRVJPX1dJRFRIX05PTl9KT0lORVJfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjaCAhPSBaRVJPX1dJRFRIX0pPSU5FUl8pIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHQgPSBnZXRUeXBlKGNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT0gVUNoYXJhY3RlckNhdGVnb3J5Lk5PTl9TUEFDSU5HX01BUksKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IHQgPT0gVUNoYXJhY3RlckNhdGVnb3J5LkZPUk1BVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSm9pbmluZ1R5cGUuVFJBTlNQQVJFTlQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5LkxJTkVfQlJFQUs6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBMaW5lQnJlYWsudHh0OgorICAgICAgICAgICAgICAgICAqICAtIEFzc2lnbmVkIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGxpc3RlZCBleHBsaWNpdGx5IGFyZSBnaXZlbiB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgKiAgICAiQUwiLgorICAgICAgICAgICAgICAgICAqICAtIFVuYXNzaWduZWQgY2hhcmFjdGVycyBhcmUgZ2l2ZW4gdGhlIHZhbHVlICJYWCIuCisgICAgICAgICAgICAgICAgICogLi4uCisgICAgICAgICAgICAgICAgICogRTAwMC4uRjhGRjtYWCAjIDxQcml2YXRlIFVzZSwgRmlyc3Q+Li48UHJpdmF0ZSBVc2UsIExhc3Q+CisgICAgICAgICAgICAgICAgICogRjAwMDAuLkZGRkZEO1hYICMgPFBsYW5lIDE1IFByaXZhdGUgVXNlLCBGaXJzdD4uLjxQbGFuZSAxNSBQcml2YXRlIFVzZSwgTGFzdD4KKyAgICAgICAgICAgICAgICAgKiAxMDAwMDAuLjEwRkZGRDtYWCAjIDxQbGFuZSAxNiBQcml2YXRlIFVzZSwgRmlyc3Q+Li48UGxhbmUgMTYgUHJpdmF0ZSBVc2UsIExhc3Q+CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gKFBST1BFUlRZXy5nZXRBZGRpdGlvbmFsKGNoLCAwKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBMSU5FX0JSRUFLX01BU0tfKSA+PiBMSU5FX0JSRUFLX1NISUZUXzsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHQgPSBnZXRUeXBlKGNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQgIT0gVUNoYXJhY3RlckNhdGVnb3J5LlVOQVNTSUdORUQgCisgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ICE9IFVDaGFyYWN0ZXJDYXRlZ29yeS5QUklWQVRFX1VTRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTGluZUJyZWFrLkFMUEhBQkVUSUM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5Lk5VTUVSSUNfVFlQRToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TnVtZXJpY1R5cGUoUFJPUEVSVFlfLmdldFByb3BlcnR5KGNoKSk7CisgICAgICAgICAgICBjYXNlIFVQcm9wZXJ0eS5TQ1JJUFQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFVTY3JpcHQuZ2V0U2NyaXB0KGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAKKyAgICAgICAgcmV0dXJuIDA7IC8vIHVuZGVmaW5lZAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIG1pbmltdW0gdmFsdWUgZm9yIGFuIGludGVnZXIvYmluYXJ5IFVuaWNvZGUgcHJvcGVydHkgdHlwZS4KKyAgICAgKiBDYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNYXhWYWx1ZShpbnQpCisgICAgICogdG8gYWxsb2NhdGUgYXJyYXlzIG9mIGNvbS5pYm0uaWN1LnRleHQuVW5pY29kZVNldCBvciBzaW1pbGFyLgorICAgICAqIEBwYXJhbSB3aGljaCBVUHJvcGVydHkgc2VsZWN0b3IgY29uc3RhbnQsIGlkZW50aWZpZXMgd2hpY2ggYmluYXJ5IAorICAgICAqICAgICAgICBwcm9wZXJ0eSB0byBjaGVjay4gTXVzdCBiZSBVUHJvcGVydHkuQklOQVJZX1NUQVJUICZsdDs9IHdoaWNoCisgICAgICogICAgICAgICZsdDsgVVByb3BlcnR5LkJJTkFSWV9MSU1JVCBvciBVUHJvcGVydHkuSU5UX1NUQVJUICZsdDs9IHdoaWNoCisgICAgICogICAgICAgICZsdDsgVVByb3BlcnR5LklOVF9MSU1JVC4KKyAgICAgKiBAcmV0dXJuIE1pbmltdW0gdmFsdWUgcmV0dXJuZWQgYnkgVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eVZhbHVlKGludCkgCisgICAgICogICAgICAgICBmb3IgYSBVbmljb2RlIHByb3BlcnR5LiAwIGlmIHRoZSBwcm9wZXJ0eSAKKyAgICAgKiAgICAgICAgIHNlbGVjdG9yIGlzIG91dCBvZiByYW5nZS4KKyAgICAgKiBAc2VlIFVQcm9wZXJ0eQorICAgICAqIEBzZWUgI2hhc0JpbmFyeVByb3BlcnR5CisgICAgICogQHNlZSAjZ2V0VW5pY29kZVZlcnNpb24KKyAgICAgKiBAc2VlICNnZXRJbnRQcm9wZXJ0eU1heFZhbHVlCisgICAgICogQHNlZSAjZ2V0SW50UHJvcGVydHlWYWx1ZQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0SW50UHJvcGVydHlNaW5WYWx1ZShpbnQgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBVUHJvcGVydHkuQkxPQ0s6CisgICAgICAgICAgICAgICAgcmV0dXJuIFVuaWNvZGVCbG9jay5JTlZBTElEX0NPREUuZ2V0SUQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsgLy8gdW5kZWZpbmVkOyBhbmQ6IGFsbCBvdGhlciBwcm9wZXJ0aWVzIGhhdmUgYSBtaW5pbXVtIHZhbHVlIAorICAgICAgICAgICAgICAgICAgLy8gb2YgMAorICAgIH0KKworICAgIAorICAgIC8qKgorICAgICAqIEdldCB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYW4gaW50ZWdlci9iaW5hcnkgVW5pY29kZSBwcm9wZXJ0eS4KKyAgICAgKiBDYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlNaW5WYWx1ZShpbnQpCisgICAgICogdG8gYWxsb2NhdGUgYXJyYXlzIG9mIGNvbS5pYm0uaWN1LnRleHQuVW5pY29kZVNldCBvciBzaW1pbGFyLgorICAgICAqIEV4YW1wbGVzIGZvciBtaW4vbWF4IHZhbHVlcyAoZm9yIFVuaWNvZGUgMy4yKToKKyAgICAgKiA8dWw+CisgICAgICogPGxpPiBVUHJvcGVydHkuQklESV9DTEFTUzogICAgMC8xOCAoVUNoYXJhY3RlckRpcmVjdGlvbi5MRUZUX1RPX1JJR0hUL1VDaGFyYWN0ZXJEaXJlY3Rpb24uQk9VTkRBUllfTkVVVFJBTCkKKyAgICAgKiA8bGk+IFVQcm9wZXJ0eS5TQ1JJUFQ6ICAgICAgICAwLzQ1IChVU2NyaXB0LkNPTU1PTi9VU2NyaXB0LlRBR0JBTldBKQorICAgICAqIDxsaT4gVVByb3BlcnR5LklERU9HUkFQSElDOiAgIDAvMSAgKGZhbHNlL3RydWUpCisgICAgICogPC91bD4KKyAgICAgKiBGb3IgdW5kZWZpbmVkIFVQcm9wZXJ0eSBjb25zdGFudCB2YWx1ZXMsIG1pbi9tYXggdmFsdWVzIHdpbGwgYmUgMC8tMS4KKyAgICAgKiBAcGFyYW0gd2hpY2ggVVByb3BlcnR5IHNlbGVjdG9yIGNvbnN0YW50LCBpZGVudGlmaWVzIHdoaWNoIGJpbmFyeSAKKyAgICAgKiAgICAgICAgcHJvcGVydHkgdG8gY2hlY2suIE11c3QgYmUgVVByb3BlcnR5LkJJTkFSWV9TVEFSVCAmbHQ7PSB3aGljaAorICAgICAqICAgICAgICAmbHQ7IFVQcm9wZXJ0eS5CSU5BUllfTElNSVQgb3IgVVByb3BlcnR5LklOVF9TVEFSVCAmbHQ7PSB3aGljaAorICAgICAqICAgICAgICAmbHQ7IFVQcm9wZXJ0eS5JTlRfTElNSVQuCisgICAgICogQHJldHVybiBNYXhpbXVtIHZhbHVlIHJldHVybmVkIGJ5IHVfZ2V0SW50UHJvcGVydHlWYWx1ZSBmb3IgYSBVbmljb2RlIHByb3BlcnR5LgorICAgICAqICAgICAgICAgPD0gMCBpZiB0aGUgcHJvcGVydHkgc2VsZWN0b3IgaXMgb3V0IG9mIHJhbmdlLgorICAgICAqIEBzZWUgVVByb3BlcnR5CisgICAgICogQHNlZSAjaGFzQmluYXJ5UHJvcGVydHkKKyAgICAgKiBAc2VlICNnZXRVbmljb2RlVmVyc2lvbgorICAgICAqIEBzZWUgI2dldEludFByb3BlcnR5TWF4VmFsdWUKKyAgICAgKiBAc2VlICNnZXRJbnRQcm9wZXJ0eVZhbHVlCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRJbnRQcm9wZXJ0eU1heFZhbHVlKGludCB0eXBlKQorICAgIHsgCisgICAgICAgIGlmICh0eXBlIDwgVVByb3BlcnR5LkJJTkFSWV9TVEFSVCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyB1bmRlZmluZWQKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSBpZiAodHlwZSA8IFVQcm9wZXJ0eS5CSU5BUllfTElNSVQpIHsKKyAgICAgICAgICAgIHJldHVybiAxOyAvLyBtYXhpbXVtIFRSVUUgZm9yIGFsbCBiaW5hcnkgcHJvcGVydGllcworICAgICAgICB9IAorICAgICAgICBlbHNlIGlmICh0eXBlIDwgVVByb3BlcnR5LklOVF9TVEFSVCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyB1bmRlZmluZWQKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSBpZiAodHlwZSA8IFVQcm9wZXJ0eS5JTlRfTElNSVQpIHsKKyAgICAgICAgICAgIGludCBtYXggPSAwOworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIFVQcm9wZXJ0eS5CSURJX0NMQVNTOgorICAgICAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyRGlyZWN0aW9uLkNIQVJfRElSRUNUSU9OX0NPVU5UIC0gMTsKKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5LkJMT0NLOgorICAgICAgICAgICAgICAgIG1heCA9IChQUk9QRVJUWV8uZ2V0TWF4QmxvY2tTY3JpcHRWYWx1ZXMoKQorICAgICAgICAgICAgICAgICAgICAgICYgQkxPQ0tfTUFTS18pID4+IEJMT0NLX1NISUZUXzsKKyAgICAgICAgICAgICAgICBpZiAobWF4ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gVW5pY29kZUJsb2NrLkNPVU5UIC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG1heDsKKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5LkNBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1M6CisgICAgICAgICAgICAgICAgcmV0dXJuIDB4ZmY7IC8vIFRPRE8gZG8gd2UgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXR0aW5nIHRoZSBhY3R1YWwgbWF4aW11bT8KKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5LkRFQ09NUE9TSVRJT05fVFlQRToKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVjb21wb3NpdGlvblR5cGUuQ09VTlQgLSAxOworICAgICAgICAgICAgY2FzZSBVUHJvcGVydHkuRUFTVF9BU0lBTl9XSURUSDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRWFzdEFzaWFuV2lkdGguQ09VTlQgLSAxOworICAgICAgICAgICAgY2FzZSBVUHJvcGVydHkuR0VORVJBTF9DQVRFR09SWToKKyAgICAgICAgICAgICAgICByZXR1cm4gVUNoYXJhY3RlckNhdGVnb3J5LkNIQVJfQ0FURUdPUllfQ09VTlQgLSAxOworICAgICAgICAgICAgY2FzZSBVUHJvcGVydHkuSk9JTklOR19HUk9VUDoKKyAgICAgICAgICAgICAgICByZXR1cm4gSm9pbmluZ0dyb3VwLkNPVU5UIC0gMTsKKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5LkpPSU5JTkdfVFlQRToKKyAgICAgICAgICAgICAgICByZXR1cm4gSm9pbmluZ1R5cGUuQ09VTlQgLSAxOworICAgICAgICAgICAgY2FzZSBVUHJvcGVydHkuTElORV9CUkVBSzoKKyAgICAgICAgICAgICAgICByZXR1cm4gTGluZUJyZWFrLkNPVU5UIC0gMTsKKyAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5Lk5VTUVSSUNfVFlQRToKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1R5cGUuQ09VTlQgLSAxOworICAgICAgICAgICAgY2FzZSBVUHJvcGVydHkuU0NSSVBUOgorICAgICAgICAgICAgICAgIG1heCA9IFBST1BFUlRZXy5nZXRNYXhCbG9ja1NjcmlwdFZhbHVlcygpICYgU0NSSVBUX01BU0tfOworICAgICAgICAgICAgICAgIGlmIChtYXggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtYXggPSBVU2NyaXB0LkNPREVfTElNSVQgLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4OworICAgICAgICAgICAgfQorICAgICAgICB9IAorICAgICAgICByZXR1cm4gLTE7IC8vIHVuZGVmaW5lZAorICAgIH0KKworICAgIC8vIHByb3RlY3RlZCBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIERhdGFiYXNlIHN0b3JpbmcgdGhlIHNldHMgb2YgY2hhcmFjdGVyIG5hbWUKKyAgICAqLworICAgIHN0YXRpYyBmaW5hbCBVQ2hhcmFjdGVyTmFtZSBOQU1FXzsKKworICAgIC8qKgorICAgICAqIFNpbmdsZXRvbiBvYmplY3QgZW5jYXBzdWxhdGluZyB0aGUgaW1wb3J0ZWQgcG5hbWVzLmljdSBwcm9wZXJ0eSBhbGlhc2VzCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFVQcm9wZXJ0eUFsaWFzZXMgUE5BTUVTXzsKKyAgICAgIAorICAgIC8vIGJsb2NrIHRvIGluaXRpYWxpc2UgbmFtZSBkYXRhYmFzZSBhbmQgdW5pY29kZSAxLjAgZGF0YSAKKyAgICBzdGF0aWMKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBOQU1FXyA9IFVDaGFyYWN0ZXJOYW1lLmdldEluc3RhbmNlKCk7CisgICAgICAgICAgICBQTkFNRVNfID0gbmV3IFVQcm9wZXJ0eUFsaWFzZXMoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIERhdGFiYXNlIHN0b3JpbmcgdGhlIHNldHMgb2YgY2hhcmFjdGVyIHByb3BlcnR5CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVUNoYXJhY3RlclByb3BlcnR5IFBST1BFUlRZXzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkvLyBibG9jayB0byBpbml0aWFsaXNlIGNoYXJhY3RlciBwcm9wZXJ0eSBkYXRhYmFzZQorICAgIHN0YXRpYworICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIFBST1BFUlRZXyA9IFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRJbnN0YW5jZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIAorICAgIC8qKgorICAgICAqIFRvIGdldCB0aGUgbGFzdCBjaGFyYWN0ZXIgb3V0IGZyb20gYSBkYXRhIHR5cGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFTVF9DSEFSX01BU0tfID0gMHhGRkZGOworICAgICAgCisgICAgLyoqCisgICAgICogVG8gZ2V0IHRoZSBsYXN0IGJ5dGUgb3V0IGZyb20gYSBkYXRhIHR5cGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFTVF9CWVRFX01BU0tfID0gMHhGRjsKKyAgICAgIAorICAgIC8qKgorICAgICAqIFNoaWZ0IDE2IGJpdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0hJRlRfMTZfID0gMTY7CisgICAgICAKKyAgICAvKioKKyAgICAgKiBTaGlmdCAyNCBiaXRzCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNISUZUXzI0XyA9IDI0OyAgCisgICAgCisgICAgLyoqCisgICAgICogRGVjaW1hbCByYWRpeAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUNJTUFMX1JBRElYXyA9IDEwOworICAgICAgCisgICAgLyoqCisgICAgICogTm8gYnJlYWsgc3BhY2UgY29kZSBwb2ludAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOT19CUkVBS19TUEFDRV8gPSAweEEwOworICAgICAgCisgICAgLyoqCisgICAgICogTmFycm93IG5vIGJyZWFrIHNwYWNlIGNvZGUgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTkFSUk9XX05PX0JSRUFLX1NQQUNFXyA9IDB4MjAyRjsKKyAgICAgIAorICAgIC8qKgorICAgICAqIFplcm8gd2lkdGggbm8gYnJlYWsgc3BhY2UgY29kZSBwb2ludAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaRVJPX1dJRFRIX05PX0JSRUFLX1NQQUNFXyA9IDB4RkVGRjsKKyAgICAgIAorICAgIC8qKgorICAgICAqIElkZW9ncmFwaGljIG51bWJlciB6ZXJvIGNvZGUgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSURFT0dSQVBISUNfTlVNQkVSX1pFUk9fID0gMHgzMDA3OworICAgICAgICAgICAgCisgICAgLyoqCisgICAgICogQ0pLIElkZW9ncmFwaCwgRmlyc3QgY29kZSBwb2ludAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX0ZJUlNUXyA9IDB4NGUwMDsKKyAgICAgIAorICAgIC8qKgorICAgICAqIENKSyBJZGVvZ3JhcGgsIFNlY29uZCBjb2RlIHBvaW50CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19JREVPR1JBUEhfU0VDT05EXyA9IDB4NGU4YzsKKyAgICAgICAgICAgIAorICAgIC8qKgorICAgICAqIENKSyBJZGVvZ3JhcGgsIFRoaXJkIGNvZGUgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9USElSRF8gPSAweDRlMDk7CisgICAgICAKKyAgICAvKioKKyAgICAgKiBDSksgSWRlb2dyYXBoLCBGb3VydGggY29kZSBwb2ludAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX0ZPVVJUSF8gPSAweDU2ZDg7CisgICAgICAKKyAgICAvKioKKyAgICAgKiBDSksgSWRlb2dyYXBoLCBGSUZUSCBjb2RlIHBvaW50CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19JREVPR1JBUEhfRklGVEhfID0gMHg0ZTk0OworICAgICAgCisgICAgLyoqCisgICAgICogQ0pLIElkZW9ncmFwaCwgU2l4dGggY29kZSBwb2ludAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX1NJWFRIXyA9IDB4NTE2ZDsKKyAgICAgICAgICAgIAorICAgIC8qKgorICAgICAqIENKSyBJZGVvZ3JhcGgsIFNldmVudGggY29kZSBwb2ludAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX1NFVkVOVEhfID0gMHg0ZTAzOworICAgICAgCisgICAgLyoqCisgICAgICogQ0pLIElkZW9ncmFwaCwgRWlnaHRoIGNvZGUgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9FSUdIVEhfID0gMHg1MTZiOworICAgICAgCisgICAgLyoqCisgICAgICogQ0pLIElkZW9ncmFwaCwgTmluZXRoIGNvZGUgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9OSU5FVEhfID0gMHg0ZTVkOworICAgICAgCisgICAgLyoqCisgICAgICogQXBwbGljYXRpb24gUHJvZ3JhbSBjb21tYW5kIGNvZGUgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVBQTElDQVRJT05fUFJPR1JBTV9DT01NQU5EXyA9IDB4MDA5RjsKKyAgICAgIAorICAgIC8qKgorICAgICAqIFVuaXQgc2VwYXJhdG9yIGNvZGUgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5JVF9TRVBBUkFUT1JfID0gMHgwMDFGOworICAgICAgCisgICAgLyoqCisgICAgICogRGVsZXRlIGNvZGUgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVMRVRFXyA9IDB4MDA3RjsKKyAgICAvKioKKyAgICAgKiBJU08gY29udHJvbCBjaGFyYWN0ZXIgZmlyc3QgcmFuZ2UgdXBwZXIgbGltaXQgMHgwIC0gMHgxRgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJU09fQ09OVFJPTF9GSVJTVF9SQU5HRV9NQVhfID0gMHgxRjsKKyAgICAvKioKKyAgICAgKiBTaGlmdCB0byBnZXQgbnVtZXJpYyB0eXBlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUVSSUNfVFlQRV9TSElGVF8gPSAxMjsKKyAgICAvKioKKyAgICAgKiBNYXNrIHRvIGdldCBudW1lcmljIHR5cGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNRVJJQ19UWVBFX01BU0tfID0gMHg3OworICAgIC8qKgorICAgICAqIFNoaWZ0IHRvIGdldCBiaWRpIGJpdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklESV9TSElGVF8gPSA2OworICAgICAgCisgICAgLyoqCisgICAgICogTWFzayB0byBiZSBhcHBsaWVkIGFmdGVyIHNoaWZ0aW5nIHRvIGdldCBiaWRpIGJpdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklESV9NQVNLX0FGVEVSX1NISUZUXyA9IDB4MUY7CisgICAgLyoqCisgICAgICogSGFuIGRpZ2l0IGNoYXJhY3RlcnMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9DT01QTEVYX1pFUk9fICAgICA9IDB4OTZmNjsgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19JREVPR1JBUEhfQ09NUExFWF9PTkVfICAgICAgPSAweDU4Zjk7ICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX0NPTVBMRVhfVFdPXyAgICAgID0gMHg4Y2IzOyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9DT01QTEVYX1RIUkVFXyAgICA9IDB4NTNjMzsgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19JREVPR1JBUEhfQ09NUExFWF9GT1VSXyAgICAgPSAweDgwODY7ICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX0NPTVBMRVhfRklWRV8gICAgID0gMHg0ZjBkOyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9DT01QTEVYX1NJWF8gICAgICA9IDB4OTY3ODsgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19JREVPR1JBUEhfQ09NUExFWF9TRVZFTl8gICAgPSAweDY3ZDI7ICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX0NPTVBMRVhfRUlHSFRfICAgID0gMHg2MzRjOyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9DT01QTEVYX05JTkVfICAgICA9IDB4NzM5NjsgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19JREVPR1JBUEhfVEVOXyAgICAgICAgICAgICAgPSAweDUzNDE7ICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX0NPTVBMRVhfVEVOXyAgICAgID0gMHg2MmZlOyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9IVU5EUkVEXyAgICAgICAgICA9IDB4NzY3ZTsgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19JREVPR1JBUEhfQ09NUExFWF9IVU5EUkVEXyAgPSAweDRmNzA7ICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX1RIT1VTQU5EXyAgICAgICAgID0gMHg1MzQzOyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0lERU9HUkFQSF9DT01QTEVYX1RIT1VTQU5EXyA9IDB4NGVkZjsgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19JREVPR1JBUEhfVEVOX1RIT1VTQU5EXyAgICAgPSAweDgyNGM7ICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfSURFT0dSQVBIX0hVTkRSRURfTUlMTElPTl8gID0gMHg1MTA0OworICAgIC8qKgorICAgICAqIDxwPk51bWVyYXRvciBwb3dlciBsaW1pdC4KKyAgICAgKiBUaGVyZSBhcmUgc3BlY2lhbCB2YWx1ZXMgZm9yIGh1Z2UgbnVtYmVycyB0aGF0IGFyZSBwb3dlcnMgb2YgdGVuLjwvcD4KKyAgICAgKiA8cD5jIHZlcnNpb24gZ2VucHJvcHMvc3RvcmUuYyBkb2N1bWVudHM6CisgICAgICogaWYgbnVtZXJpY1ZhbHVlID0gMHg3ZmZmZmYwMCArIHggdGhlbiBudW1lcmljVmFsdWUgPSAxMCBeIHg8L3A+CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUVSQVRPUl9QT1dFUl9MSU1JVF8gPSAweDdmZmZmZjAwOworICAgIC8qKgorICAgICAqIEludGVnZXIgcHJvcGVydGllcyBtYXNrIGFuZCBzaGlmdCB2YWx1ZXMgZm9yIGpvaW5pbmcgdHlwZS4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFVQUk9QU19KVF9NQVNLLiAKKyAgICAgKi8gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEpPSU5JTkdfVFlQRV9NQVNLXyA9IDB4MDAwMDM4MDA7CisgICAgLyoqCisgICAgICogSW50ZWdlciBwcm9wZXJ0aWVzIG1hc2sgYW5kIHNoaWZ0IHZhbHVlcyBmb3Igam9pbmluZyB0eXBlLgorICAgICAqIEVxdWl2YWxlbnQgdG8gaWN1NGMgVVBST1BTX0pUX1NISUZULiAKKyAgICAgKi8gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEpPSU5JTkdfVFlQRV9TSElGVF8gPSAxMTsKKyAgICAvKioKKyAgICAgKiBJbnRlZ2VyIHByb3BlcnRpZXMgbWFzayBhbmQgc2hpZnQgdmFsdWVzIGZvciBqb2luaW5nIGdyb3VwLgorICAgICAqIEVxdWl2YWxlbnQgdG8gaWN1NGMgVVBST1BTX0pHX01BU0suIAorICAgICAqLyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSk9JTklOR19HUk9VUF9NQVNLXyA9IDB4MDAwMDA3ZTA7CisgICAgLyoqCisgICAgICogSW50ZWdlciBwcm9wZXJ0aWVzIG1hc2sgYW5kIHNoaWZ0IHZhbHVlcyBmb3Igam9pbmluZyBncm91cC4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFVQUk9QU19KR19TSElGVC4gCisgICAgICovICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKT0lOSU5HX0dST1VQX1NISUZUXyA9IDU7CisgICAgLyoqCisgICAgICogSW50ZWdlciBwcm9wZXJ0aWVzIG1hc2sgZm9yIGRlY29tcG9zaXRpb24gdHlwZS4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFVQUk9QU19EVF9NQVNLLiAKKyAgICAgKi8gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFQ09NUE9TSVRJT05fVFlQRV9NQVNLXyA9IDB4MDAwMDAwMWY7CisgICAgLyoqCisgICAgICogSW50ZWdlciBwcm9wZXJ0aWVzIG1hc2sgYW5kIHNoaWZ0IHZhbHVlcyBmb3IgRWFzdCBBc2lhbiBjZWxsIHdpZHRoLgorICAgICAqIEVxdWl2YWxlbnQgdG8gaWN1NGMgVVBST1BTX0VBX01BU0sgCisgICAgICovICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFQVNUX0FTSUFOX01BU0tfID0gMHgwMDAzODAwMDsKKyAgICAvKioKKyAgICAgKiBJbnRlZ2VyIHByb3BlcnRpZXMgbWFzayBhbmQgc2hpZnQgdmFsdWVzIGZvciBFYXN0IEFzaWFuIGNlbGwgd2lkdGguCisgICAgICogRXF1aXZhbGVudCB0byBpY3U0YyBVUFJPUFNfRUFfU0hJRlQgCisgICAgICovICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFQVNUX0FTSUFOX1NISUZUXyA9IDE1OworICAgIC8qKgorICAgICAqIFplcm8gV2lkdGggTm9uIEpvaW5lci4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFpXTkouCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpFUk9fV0lEVEhfTk9OX0pPSU5FUl8gPSAweDIwMGM7CisgICAgLyoqCisgICAgICogWmVybyBXaWR0aCBKb2luZXIKKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFpXSi4gCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpFUk9fV0lEVEhfSk9JTkVSXyA9IDB4MjAwZDsKKyAgICAvKioKKyAgICAgKiBJbnRlZ2VyIHByb3BlcnRpZXMgbWFzayBhbmQgc2hpZnQgdmFsdWVzIGZvciBsaW5lIGJyZWFrcy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFVQUk9QU19MQl9NQVNLIAorICAgICAqLyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElORV9CUkVBS19NQVNLXyA9IDB4MDA3QzAwMDA7CisgICAgLyoqCisgICAgICogSW50ZWdlciBwcm9wZXJ0aWVzIG1hc2sgYW5kIHNoaWZ0IHZhbHVlcyBmb3IgbGluZSBicmVha3MuCisgICAgICogRXF1aXZhbGVudCB0byBpY3U0YyBVUFJPUFNfTEJfU0hJRlQgCisgICAgICovICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5FX0JSRUFLX1NISUZUXyA9IDE4OworICAgIC8qKgorICAgICAqIEludGVnZXIgcHJvcGVydGllcyBtYXNrIGFuZCBzaGlmdCB2YWx1ZXMgZm9yIGJsb2Nrcy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFVQUk9QU19CTE9DS19NQVNLIAorICAgICAqLyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQkxPQ0tfTUFTS18gPSAweDAwMDA3ZjgwOworICAgIC8qKgorICAgICAqIEludGVnZXIgcHJvcGVydGllcyBtYXNrIGFuZCBzaGlmdCB2YWx1ZXMgZm9yIGJsb2Nrcy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFVQUk9QU19CTE9DS19TSElGVCAKKyAgICAgKi8gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJMT0NLX1NISUZUXyA9IDc7CisgICAgLyoqCisgICAgICogSW50ZWdlciBwcm9wZXJ0aWVzIG1hc2sgYW5kIHNoaWZ0IHZhbHVlcyBmb3Igc2NyaXB0cy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGljdTRjIFVQUk9QU19TSElGVF9NQVNLCisgICAgICovICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ1JJUFRfTUFTS18gPSAweDAwMDAwMDdmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgICogUHJpdmF0ZSBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGluc3RhbnRpYXRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIFVDaGFyYWN0ZXIoKQorICAgIHsKKyAgICB9CisgICAgICAKKyAgICAvLyBwcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldEV1cm9wZWFuRGlnaXQoaW50IGNoKSB7CisgICAgICAgIGlmIChjaCA8PSAweDdhKSB7CisgICAgICAgICAgICBpZiAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoICsgMTAgLSAweDQxOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAweDYxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoICsgMTAgLSAweDYxOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNoID49IDB4ZmYyMSkgeworICAgICAgICAgICAgaWYgKGNoIDw9IDB4ZmYzYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjaCArIDEwIC0gMHhmZjIxOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAweGZmNDEgJiYgY2ggPD0gMHhmZjVhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoICsgMTAgLSAweGZmNDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBudW1lcmljIHR5cGUgb2YgdGhlIHByb3BlcnR5IGFyZ3VtZW50CisgICAgICogQHBhcmFtIHByb3BzIDMyIGJpdCBwcm9wZXJ0eQorICAgICAqIEByZXR1cm4gdGhlIG51bWVyaWMgdHlwZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBnZXROdW1lcmljVHlwZShpbnQgcHJvcHMpCisgICAgeworICAgICAgICByZXR1cm4gKHByb3BzID4+IE5VTUVSSUNfVFlQRV9TSElGVF8pICYgTlVNRVJJQ19UWVBFX01BU0tfOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IHZhbHVlIGhhcyBhIGV4Y2VwdGlvbiBpbmRpY2F0b3IKKyAgICAgKiBAcGFyYW0gcHJvcHMgMzIgYml0IHByb3BlcnR5IHZhbHVlCisgICAgICogQHJldHVybiB0cnVlIGlmIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSBleGNlcHRpb24gaW5kaWNhdG9yLCBmYWxzZQorICAgICAqICAgICAgICAgIG90aGVyd2lzZQorICAgICAqLyAgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc05vdEV4Y2VwdGlvbkluZGljYXRvcihpbnQgcHJvcHMpCisgICAgeworICAgICAgICAgcmV0dXJuIChwcm9wcyAmIFVDaGFyYWN0ZXJQcm9wZXJ0eS5FWENFUFRJT05fTUFTSykgPT0gMDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9sYW5nL1VDaGFyYWN0ZXJDYXRlZ29yeS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVUNoYXJhY3RlckNhdGVnb3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzk1MTZhYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9sYW5nL1VDaGFyYWN0ZXJDYXRlZ29yeS5qYXZhCkBAIC0wLDAgKzEsMjg0IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogCisqICAgICAgL3Vzci9jdnMvaWN1NGovaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVUNoYXJhY3RlckNhdGVnb3J5LmphdmEgJCAKKyogJERhdGU6IDIwMDIvMTIvMDMgMDA6NDc6NTMgJCAKKyogJFJldmlzaW9uOiAxLjEwICQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UubGFuZzsKKworLyoqCisgKiBFbnVtZXJhdGVkIFVuaWNvZGUgY2F0ZWdvcnkgdHlwZXMgZnJvbSB0aGUgVW5pY29kZURhdGEudHh0IGZpbGUuCisgKiBVc2VkIGFzIHJldHVybiByZXN1bHRzIGZyb20gPGEgaHJlZj1VQ2hhcmFjdGVyLmh0bWw+VUNoYXJhY3RlcjwvYT4KKyAqIEVxdWl2YWxlbnQgdG8gaWN1J3MgVUNoYXJDYXRlZ29yeS4KKyAqIFJlZmVyIHRvIDxhIGhyZWY9aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9Vbmljb2RlRGF0YS5odG1sPgorICogVW5pY29kZSBDb25zb3J0aXVtPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBVbmljb2RlRGF0YS50eHQuCisgKiA8cD4KKyAqIFRoaXMgY2xhc3MgaXMgbm90IHN1YmNsYXNzYWJsZQorICogPC9wPgorICogQGF1dGhvciBTeW4gV2VlIFF1ZWsKKyAqIEBzdGFibGUgSUNVIDIuMQorICovCisKK3B1YmxpYyBmaW5hbCBjbGFzcyBVQ2hhcmFjdGVyQ2F0ZWdvcnkKK3sKKyAgICAvLyBwdWJsaWMgdmFyaWFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgICAgLyoqCisgICAgICogVW5hc3NpZ25lZCBjaGFyYWN0ZXIgdHlwZQorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOQVNTSUdORUQgICAgICAgICAgICAgID0gMDsgCisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgQ24KKyAgICAgKiBOb3QgQXNzaWduZWQgKG5vIGNoYXJhY3RlcnMgaW4gW1VuaWNvZGVEYXRhLnR4dF0gaGF2ZSB0aGlzIHByb3BlcnR5KSAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSQUxfT1RIRVJfVFlQRVMgICAgID0gMDsKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBMdQorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVQUEVSQ0FTRV9MRVRURVIgICAgICAgID0gMTsKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBMbAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPV0VSQ0FTRV9MRVRURVIgICAgICAgID0gMjsKKwkvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBMdAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElUTEVDQVNFX0xFVFRFUiAgICAgICAgPSAzOworICAgCS8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIExtCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9ESUZJRVJfTEVUVEVSICAgICAgICAgPSA0OworICAgCS8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIExvCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1RIRVJfTEVUVEVSICAgICAgICAgICAgPSA1OworICAgCS8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIE1uCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05fU1BBQ0lOR19NQVJLICAgICAgICA9IDY7CisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgTWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkNMT1NJTkdfTUFSSyAgICAgICAgICA9IDc7CisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgTWMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01CSU5JTkdfU1BBQ0lOR19NQVJLICA9IDg7CisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgTmQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEgICAgICAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNJTUFMX0RJR0lUX05VTUJFUiAgICA9IDk7CisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgTmwKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVRURVJfTlVNQkVSICAgICAgICAgICA9IDEwOworICAgIAkKKyAgICAvLyBzdGFydCBvZiAxMS0tLS0tLS0tLS0tLQorICAgIAkKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBObworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9USEVSX05VTUJFUiAgICAgICAgICAgID0gMTE7CisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgWnMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTUEFDRV9TRVBBUkFUT1IgICAgICAgICA9IDEyOworICAgIC8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIFpsCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElORV9TRVBBUkFUT1IgICAgICAgICAgPSAxMzsKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBacAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUkFHUkFQSF9TRVBBUkFUT1IgICAgID0gMTQ7CisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgQ2MKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MICAgICAgICAgICAgICAgICA9IDE1OworICAgCS8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIENmCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STUFUICAgICAgICAgICAgICAgICAgPSAxNjsKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBDbworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSSVZBVEVfVVNFICAgICAgICAgICAgID0gMTc7CisgICAJLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgQ3MKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVJST0dBVEUgICAgICAgICAgICAgICA9IDE4OworICAgCS8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIFBkCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFTSF9QVU5DVFVBVElPTiAgICAgICAgPSAxOTsKKyAgIAkvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBQcworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVJUX1BVTkNUVUFUSU9OICAgICAgID0gMjA7CisgICAgCQorICAgCS8vIHN0YXJ0IG9mIDIxIC0tLS0tLS0tLS0tLQorICAgIAorICAgCS8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIFBlCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5EX1BVTkNUVUFUSU9OICAgICAgICAgPSAyMTsKKyAgIAkvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBQYworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RPUl9QVU5DVFVBVElPTiAgID0gMjI7CisgICAJLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgUG8KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPVEhFUl9QVU5DVFVBVElPTiAgICAgICA9IDIzOworICAgCS8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIFNtCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUSF9TWU1CT0wgICAgICAgICAgICAgPSAyNDsKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBTYworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENVUlJFTkNZX1NZTUJPTCAgICAgICAgID0gMjU7CisgICAJLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgU2sKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT0RJRklFUl9TWU1CT0wgICAgICAgICA9IDI2OworICAgCS8qKgorICAgICAqIENoYXJhY3RlciB0eXBlIFNvCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1RIRVJfU1lNQk9MICAgICAgICAgICAgPSAyNzsKKyAgIAkvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBQaQorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxfUFVOQ1RVQVRJT04gICAgID0gMjg7CisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHR5cGUgUGYKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSU5BTF9QVU5DVFVBVElPTiAgICAgICA9IDI5OworICAgIAkKKyAgICAvLyBzdGFydCBvZiAzMSAtLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdHlwZSBjb3VudAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENIQVJfQ0FURUdPUllfQ09VTlQgICAgID0gMzA7CisgICAgCQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50IGNhdGVnb3J5CisgICAgICogQHBhcmFtIGNhdGVnb3J5IHRvIHJldHJpZXZlIG5hbWUKKyAgICAgKiBAcmV0dXJuIGNhdGVnb3J5IG5hbWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyhpbnQgY2F0ZWdvcnkpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7CisgICAgCSAgICBjYXNlIFVQUEVSQ0FTRV9MRVRURVIgOgorICAgIAkgICAgICByZXR1cm4gIkxldHRlciwgVXBwZXJjYXNlIjsKKyAgICAJICAgIGNhc2UgTE9XRVJDQVNFX0xFVFRFUiA6CisgICAgCSAgICAgIHJldHVybiAiTGV0dGVyLCBMb3dlcmNhc2UiOworICAgIAkgICAgY2FzZSBUSVRMRUNBU0VfTEVUVEVSIDoKKyAgICAJICAgICAgcmV0dXJuICJMZXR0ZXIsIFRpdGxlY2FzZSI7CisgICAgCSAgICBjYXNlIE1PRElGSUVSX0xFVFRFUiA6CisgICAgCSAgICAgIHJldHVybiAiTGV0dGVyLCBNb2RpZmllciI7CisgICAgCSAgICBjYXNlIE9USEVSX0xFVFRFUiA6CisgICAgCSAgICAgIHJldHVybiAiTGV0dGVyLCBPdGhlciI7CisgICAgCSAgICBjYXNlIE5PTl9TUEFDSU5HX01BUksgOgorICAgIAkgICAgICByZXR1cm4gIk1hcmssIE5vbi1TcGFjaW5nIjsKKyAgICAJICAgIGNhc2UgRU5DTE9TSU5HX01BUksgOiAKKyAgICAJICAgICAgcmV0dXJuICJNYXJrLCBFbmNsb3NpbmciOworICAgIAkgICAgY2FzZSBDT01CSU5JTkdfU1BBQ0lOR19NQVJLIDoKKyAgICAJICAgICAgcmV0dXJuICJNYXJrLCBTcGFjaW5nIENvbWJpbmluZyI7CisgICAgCSAgICBjYXNlIERFQ0lNQUxfRElHSVRfTlVNQkVSIDoKKyAgICAJICAgICAgcmV0dXJuICJOdW1iZXIsIERlY2ltYWwgRGlnaXQiOworICAgIAkgICAgY2FzZSBMRVRURVJfTlVNQkVSIDoKKyAgICAJICAgICAgcmV0dXJuICJOdW1iZXIsIExldHRlciI7CisgICAgCSAgICBjYXNlIE9USEVSX05VTUJFUiA6CisgICAgCSAgICAgIHJldHVybiAiTnVtYmVyLCBPdGhlciI7CisgICAgCSAgICBjYXNlIFNQQUNFX1NFUEFSQVRPUiA6CisgICAgCSAgICAgIHJldHVybiAiU2VwYXJhdG9yLCBTcGFjZSI7CisgICAgCSAgICBjYXNlIExJTkVfU0VQQVJBVE9SIDoKKyAgICAJICAgICAgcmV0dXJuICJTZXBhcmF0b3IsIExpbmUiOworICAgIAkgICAgY2FzZSBQQVJBR1JBUEhfU0VQQVJBVE9SIDoKKyAgICAJICAgICAgcmV0dXJuICJTZXBhcmF0b3IsIFBhcmFncmFwaCI7CisgICAgCSAgICBjYXNlIENPTlRST0wgOgorICAgIAkgICAgICByZXR1cm4gIk90aGVyLCBDb250cm9sIjsKKyAgICAJICAgIGNhc2UgRk9STUFUIDoKKyAgICAJICAgICAgcmV0dXJuICJPdGhlciwgRm9ybWF0IjsKKyAgICAJICAgIGNhc2UgUFJJVkFURV9VU0UgOgorICAgIAkgICAgICByZXR1cm4gIk90aGVyLCBQcml2YXRlIFVzZSI7CisgICAgCSAgICBjYXNlIFNVUlJPR0FURSA6CisgICAgCSAgICAgIHJldHVybiAiT3RoZXIsIFN1cnJvZ2F0ZSI7CisgICAgCSAgICBjYXNlIERBU0hfUFVOQ1RVQVRJT04gOgorICAgIAkgICAgICByZXR1cm4gIlB1bmN0dWF0aW9uLCBEYXNoIjsKKyAgICAJICAgIGNhc2UgU1RBUlRfUFVOQ1RVQVRJT04gOgorICAgIAkgICAgICByZXR1cm4gIlB1bmN0dWF0aW9uLCBPcGVuIjsKKyAgICAJICAgIGNhc2UgRU5EX1BVTkNUVUFUSU9OIDoKKyAgICAJICAgICAgcmV0dXJuICJQdW5jdHVhdGlvbiwgQ2xvc2UiOworICAgIAkgICAgY2FzZSBDT05ORUNUT1JfUFVOQ1RVQVRJT04gOgorICAgIAkgICAgICByZXR1cm4gIlB1bmN0dWF0aW9uLCBDb25uZWN0b3IiOworICAgIAkgICAgY2FzZSBPVEhFUl9QVU5DVFVBVElPTiA6CisgICAgCSAgICAgIHJldHVybiAiUHVuY3R1YXRpb24sIE90aGVyIjsKKyAgICAJICAgIGNhc2UgTUFUSF9TWU1CT0wgOgorICAgIAkgICAgICByZXR1cm4gIlN5bWJvbCwgTWF0aCI7CisgICAgCSAgICBjYXNlIENVUlJFTkNZX1NZTUJPTCA6CisgICAgCSAgICAgIHJldHVybiAiU3ltYm9sLCBDdXJyZW5jeSI7CisgICAgCSAgICBjYXNlIE1PRElGSUVSX1NZTUJPTCA6CisgICAgCSAgICAgIHJldHVybiAiU3ltYm9sLCBNb2RpZmllciI7CisgICAgCSAgICBjYXNlIE9USEVSX1NZTUJPTCA6CisgICAgCSAgICAgIHJldHVybiAiU3ltYm9sLCBPdGhlciI7CisgICAgCSAgICBjYXNlIElOSVRJQUxfUFVOQ1RVQVRJT04gOgorICAgIAkgICAgICByZXR1cm4gIlB1bmN0dWF0aW9uLCBJbml0aWFsIHF1b3RlIjsKKyAgICAJICAgIGNhc2UgRklOQUxfUFVOQ1RVQVRJT04gOgorICAgIAkgICAgICByZXR1cm4gIlB1bmN0dWF0aW9uLCBGaW5hbCBxdW90ZSI7CisgICAgIAl9CisgICAgCXJldHVybiAiVW5hc3NpZ25lZCI7CisgICAgfQorICAgIAkKKyAgICAvLyBwcml2YXRlIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIAorICAgIC8qKgorICAgICAqIFByaXZhdGUgY29uc3RydWN0b3IgdG8gcHJldmVudCBpbml0aWFsaXNhdGlvbgorICAgICAqLworICAgIHByaXZhdGUgVUNoYXJhY3RlckNhdGVnb3J5KCkKKyAgICB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVUNoYXJhY3RlckRpcmVjdGlvbi5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVUNoYXJhY3RlckRpcmVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyNGMzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvbGFuZy9VQ2hhcmFjdGVyRGlyZWN0aW9uLmphdmEKQEAgLTAsMCArMSwxOTUgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAKKyogICAgIC91c3IvY3ZzL2ljdTRqL2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VDaGFyYWN0ZXJEaXJlY3Rpb24uamF2YSAkIAorKiAkRGF0ZTogMjAwMi8xMi8wMyAwMDo0Nzo1MCAkIAorKiAkUmV2aXNpb246IDEuNiAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1Lmxhbmc7CisKKy8qKgorICogRW51bWVyYXRlZCBVbmljb2RlIGNoYXJhY3RlciBsaW5ndWlzdGljIGRpcmVjdGlvbiBjb25zdGFudHMuCisgKiBVc2VkIGFzIHJldHVybiByZXN1bHRzIGZyb20gPGEgaHJlZj1VQ2hhcmFjdGVyLmh0bWw+VUNoYXJhY3RlcjwvYT4KKyAqIDxwPgorICogVGhpcyBjbGFzcyBpcyBub3Qgc3ViY2xhc3NhYmxlCisgKiA8L3A+CisgKiBAYXV0aG9yIFN5biBXZWUgUXVlaworICogQHN0YWJsZSBJQ1UgMi4xCisgKi8KKworcHVibGljIGZpbmFsIGNsYXNzIFVDaGFyYWN0ZXJEaXJlY3Rpb24KK3sKKyAgICAvLyBwcml2YXRlIGNvbnN0cnVjdG9yID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAKKyAgICAvKioKKyAgICAgKiBQcml2YXRlIGNvbnN0cnVjdG9yIHRvIHByZXZlbnQgaW5pdGlhbGlzYXRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIFVDaGFyYWN0ZXJEaXJlY3Rpb24oKQorICAgIHsKKyAgICB9CisgICAgICAKKyAgICAvLyBwdWJsaWMgdmFyaWFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAKKyAgICAvKioKKyAgICAgKiBEaXJlY3Rpb25hbCB0eXBlIEwKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRUZUX1RPX1JJR0hUICAgICAgICAgICAgICA9IDA7CisgICAgLyoqCisgICAgICogRGlyZWN0aW9uYWwgdHlwZSBSCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUklHSFRfVE9fTEVGVCAgICAgICAgICAgICAgPSAxOworICAgIC8qKgorICAgICAqIERpcmVjdGlvbmFsIHR5cGUgRU4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVVJPUEVBTl9OVU1CRVIgICAgICAgICAgICA9IDI7CisgICAJLyoqCisgICAgICogRGlyZWN0aW9uYWwgdHlwZSBFUworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1IgID0gMzsKKyAgICAvKioKKyAgICAgKiBEaXJlY3Rpb25hbCB0eXBlIEVUCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IgPSA0OworICAgIC8qKgorICAgICAqIERpcmVjdGlvbmFsIHR5cGUgQU4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBUkFCSUNfTlVNQkVSICAgICAgICAgICAgICA9IDU7CisgICAJLyoqCisgICAgICogRGlyZWN0aW9uYWwgdHlwZSBDUworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1PTl9OVU1CRVJfU0VQQVJBVE9SICAgID0gNjsKKyAgICAvKioKKyAgICAgKiBEaXJlY3Rpb25hbCB0eXBlIEIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCTE9DS19TRVBBUkFUT1IgICAgICAgICAgICA9IDc7CisgICAgLyoqCisgICAgICogRGlyZWN0aW9uYWwgdHlwZSBTCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovICAgICAgCisgICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VHTUVOVF9TRVBBUkFUT1IgICAgICAgICAgPSA4OworICAgCS8qKgorICAgICAqIERpcmVjdGlvbmFsIHR5cGUgV1MKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXSElURV9TUEFDRV9ORVVUUkFMICAgICAgICA9IDk7CisgICAgCQorICAgIC8vIHN0YXJ0IG9mIDExIC0tLS0tLS0tLS0tLS0tLQorICAgIAkKKyAgICAvKioKKyAgICAgKiBEaXJlY3Rpb25hbCB0eXBlIE9OCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1RIRVJfTkVVVFJBTCAgICAgICAgICAgICAgPSAxMDsKKyAgIAkvKioKKyAgICAgKiBEaXJlY3Rpb25hbCB0eXBlIExSRQorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFRlRfVE9fUklHSFRfRU1CRURESU5HICAgID0gMTE7CisgICAgLyoqCisgICAgICogRGlyZWN0aW9uYWwgdHlwZSBMUk8KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRUZUX1RPX1JJR0hUX09WRVJSSURFICAgICA9IDEyOyAgCisgICAgLyoqCisgICAgICogRGlyZWN0aW9uYWwgdHlwZSBBTAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJJR0hUX1RPX0xFRlRfQVJBQklDICAgICAgID0gMTM7CisgICAgLyoqCisgICAgICogRGlyZWN0aW9uYWwgdHlwZSBSTEUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSSUdIVF9UT19MRUZUX0VNQkVERElORyAgICA9IDE0OworICAgCS8qKgorICAgICAqIERpcmVjdGlvbmFsIHR5cGUgUkxPCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUklHSFRfVE9fTEVGVF9PVkVSUklERSAgICAgPSAxNTsKKyAgIAkvKioKKyAgICAgKiBEaXJlY3Rpb25hbCB0eXBlIFBERgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUF9ESVJFQ1RJT05BTF9GT1JNQVQgICAgID0gMTY7CisgICAgLyoqCisgICAgICogRGlyZWN0aW9uYWwgdHlwZSBOU00KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVJfTk9OX1NQQUNJTkdfTUFSSyAgICAgICA9IDE3OworICAgIC8qKgorICAgICAqIERpcmVjdGlvbmFsIHR5cGUgQk4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCT1VOREFSWV9ORVVUUkFMICAgICAgICAgICA9IDE4OworICAgIC8qKgorICAgICAqIE51bWJlciBvZiBkaXJlY3Rpb25hbCB0eXBlCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0hBUl9ESVJFQ1RJT05fQ09VTlQgICAgICAgPSAxOTsKKwkKKwkvKioKKwkgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBhcmd1bWVudCBkaXJlY3Rpb24KKwkgKiBAcGFyYW0gZGlyIGRpcmVjdGlvbiB0eXBlIHRvIHJldHJpZXZlIG5hbWUKKwkgKiBAcmV0dXJuIGRpcmVjdGlvbmFsIG5hbWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyhpbnQgZGlyKQorCXsKKyAgICAJc3dpdGNoKGRpcikKKyAgICAJeworICAgIAkgICAgY2FzZSBMRUZUX1RPX1JJR0hUIDoKKyAgICAJICAgICAgcmV0dXJuICJMZWZ0LXRvLVJpZ2h0IjsKKyAgICAJICAgIGNhc2UgUklHSFRfVE9fTEVGVCA6CisgICAgCSAgICAgIHJldHVybiAiUmlnaHQtdG8tTGVmdCI7CisgICAgCSAgICBjYXNlIEVVUk9QRUFOX05VTUJFUiA6CisgICAgCSAgICAgIHJldHVybiAiRXVyb3BlYW4gTnVtYmVyIjsKKyAgICAJICAgIGNhc2UgRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUiA6CisgICAgCSAgICAgIHJldHVybiAiRXVyb3BlYW4gTnVtYmVyIFNlcGFyYXRvciI7CisgICAgCSAgICBjYXNlIEVVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SIDoKKyAgICAJICAgICAgcmV0dXJuICJFdXJvcGVhbiBOdW1iZXIgVGVybWluYXRvciI7CisgICAgCSAgICBjYXNlIEFSQUJJQ19OVU1CRVIgOgorICAgIAkgICAgICByZXR1cm4gIkFyYWJpYyBOdW1iZXIiOworICAgIAkgICAgY2FzZSBDT01NT05fTlVNQkVSX1NFUEFSQVRPUiA6CisgICAgCSAgICAgIHJldHVybiAiQ29tbW9uIE51bWJlciBTZXBhcmF0b3IiOworICAgIAkgICAgY2FzZSBCTE9DS19TRVBBUkFUT1IgOgorICAgIAkgICAgICByZXR1cm4gIlBhcmFncmFwaCBTZXBhcmF0b3IiOworICAgIAkgICAgY2FzZSBTRUdNRU5UX1NFUEFSQVRPUiA6CisgICAgCSAgICAgIHJldHVybiAiU2VnbWVudCBTZXBhcmF0b3IiOworICAgIAkgICAgY2FzZSBXSElURV9TUEFDRV9ORVVUUkFMIDoKKyAgICAJICAgICAgcmV0dXJuICJXaGl0ZXNwYWNlIjsKKyAgICAJICAgIGNhc2UgT1RIRVJfTkVVVFJBTCA6CisgICAgCSAgICAgIHJldHVybiAiT3RoZXIgTmV1dHJhbHMiOworICAgIAkgICAgY2FzZSBMRUZUX1RPX1JJR0hUX0VNQkVERElORyA6CisgICAgCSAgICAgIHJldHVybiAiTGVmdC10by1SaWdodCBFbWJlZGRpbmciOworICAgIAkgICAgY2FzZSBMRUZUX1RPX1JJR0hUX09WRVJSSURFIDoKKyAgICAJICAgICAgcmV0dXJuICJMZWZ0LXRvLVJpZ2h0IE92ZXJyaWRlIjsKKyAgICAJICAgIGNhc2UgUklHSFRfVE9fTEVGVF9BUkFCSUMgOgorICAgIAkgICAgICByZXR1cm4gIlJpZ2h0LXRvLUxlZnQgQXJhYmljIjsKKyAgICAJICAgIGNhc2UgUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgOgorICAgIAkgICAgICByZXR1cm4gIlJpZ2h0LXRvLUxlZnQgRW1iZWRkaW5nIjsKKyAgICAJICAgIGNhc2UgUklHSFRfVE9fTEVGVF9PVkVSUklERSA6CisgICAgCSAgICAgIHJldHVybiAiUmlnaHQtdG8tTGVmdCBPdmVycmlkZSI7CisgICAgCSAgICBjYXNlIFBPUF9ESVJFQ1RJT05BTF9GT1JNQVQgOgorICAgIAkgICAgICByZXR1cm4gIlBvcCBEaXJlY3Rpb25hbCBGb3JtYXQiOworICAgIAkgICAgY2FzZSBESVJfTk9OX1NQQUNJTkdfTUFSSyA6CisgICAgCSAgICAgIHJldHVybiAiTm9uLVNwYWNpbmcgTWFyayI7CisgICAgCSAgICBjYXNlIEJPVU5EQVJZX05FVVRSQUwgOgorICAgIAkgICAgICByZXR1cm4gIkJvdW5kYXJ5IE5ldXRyYWwiOworICAgIAl9CisgICAgCXJldHVybiAiVW5hc3NpZ25lZCI7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVUNoYXJhY3Rlck5hbWVJdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVUNoYXJhY3Rlck5hbWVJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDZiMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvbGFuZy9VQ2hhcmFjdGVyTmFtZUl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwzMzYgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L2xhbmcvVUNoYXJhY3Rlck5hbWVJdGVyYXRvci5qYXZhLHYgJAorKiAkRGF0ZTogMjAwMi8wOS8xOSAyMToxODoxNCAkCisqICRSZXZpc2lvbjogMS40ICQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5sYW5nOworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5WYWx1ZUl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVUNoYXJhY3Rlck5hbWU7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyTmFtZUNob2ljZTsKKworLyoqCisgKiA8cD5DbGFzcyBlbmFibGluZyBpdGVyYXRpb24gb2YgdGhlIGNvZGVwb2ludHMgYW5kIHRoZWlyIG5hbWVzLjwvcD4KKyAqIDxwPlJlc3VsdCBvZiBlYWNoIGl0ZXJhdGlvbiBjb250YWlucyBhIHZhbGlkIGNvZGVwb2ludCB0aGF0IGhhcyB2YWxpZCAKKyAqIG5hbWUuPC9wPgorICogPHA+U2VlIFVDaGFyYWN0ZXIuZ2V0TmFtZUl0ZXJhdG9yKCkgZm9yIGFuIGV4YW1wbGUgb2YgdXNlLjwvcD4KKyAqIEBhdXRob3Igc3lud2VlCisgKiBAc2luY2UgcmVsZWFzZSAyLjEsIE1hcmNoIDUgMjAwMgorICovCitjbGFzcyBVQ2hhcmFjdGVyTmFtZUl0ZXJhdG9yIGltcGxlbWVudHMgVmFsdWVJdGVyYXRvcgoreworCS8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKioKKyAgICAqIDxwPkdldHMgdGhlIG5leHQgcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiBhbmQgcmV0dXJucyAKKyAgICAqIHRydWUgaWYgd2UgYXJlIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBpdGVyYXRpb24sIGZhbHNlIG90aGVyd2lzZS48L3A+CisgICAgKiA8cD5JZiB0aGUgcmV0dXJuIGJvb2xlYW4gaXMgYSBmYWxzZSwgdGhlIGNvbnRlbnRzIG9mIGVsZW1lbnRzIHdpbGwgbm90CisgICAgKiBiZSB1cGRhdGVkLjwvcD4KKyAgICAqIEBwYXJhbSBlbGVtZW50IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgY29kZXBvaW50IGFuZCBuYW1lCisgICAgKiBAcmV0dXJuIHRydWUgaWYgd2UgYXJlIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBpdGVyYXRpb24sIGZhbHNlIG90aGVyd2lzZS4KKyAgICAqIEBzZWUgRWxlbWVudAorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHVibGljIGJvb2xlYW4gbmV4dChWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQgZWxlbWVudCkKKyAgICB7CisgICAgCWlmIChtX2N1cnJlbnRfID49IG1fbGltaXRfKSB7CisgICAgCQlyZXR1cm4gZmFsc2U7CisgICAgCX0KKyAgICAJCisgICAgCWlmIChtX2Nob2ljZV8gIT0gVUNoYXJhY3Rlck5hbWVDaG9pY2UuVU5JQ09ERV8xMF9DSEFSX05BTUUpIHsKKyAgICAJCWludCBsZW5ndGggPSBtX25hbWVfLmdldEFsZ29yaXRobUxlbmd0aCgpOworICAgIAkJaWYgKG1fYWxnb3JpdGhtSW5kZXhfIDwgbGVuZ3RoKSB7CisgICAgCQkJd2hpbGUgKG1fYWxnb3JpdGhtSW5kZXhfIDwgbGVuZ3RoKSB7CisgICAgCQkJCS8vIGZpbmQgdGhlIGFsZ29yaXRobSByYW5nZSB0aGF0IGNvdWxkIGNvbnRhaW4gbV9jdXJyZW50XyAKKyAgICAJCQkJaWYgKG1fYWxnb3JpdGhtSW5kZXhfIDwgMCB8fAorICAgIAkJCQkgICAgbV9uYW1lXy5nZXRBbGdvcml0aG1FbmQobV9hbGdvcml0aG1JbmRleF8pIDwgCisgICAgCQkJCSAgICBtX2N1cnJlbnRfKSB7CisgICAgCQkJCSAJbV9hbGdvcml0aG1JbmRleF8gKys7ICAgCisgICAgCQkJCX0KKyAgICAJCQkJZWxzZSB7CisgICAgCQkJCQlicmVhazsKKyAgICAJCQkJfQorICAgIAkJCX0KKyAgICAJCQkKKyAgICAJCQlpZiAobV9hbGdvcml0aG1JbmRleF8gPCBsZW5ndGgpIHsKKyAgICAJCQkJLy8gaW50ZXJsZWF2ZSB0aGUgZGF0YS1kcml2ZW4gb25lcyB3aXRoIHRoZSBhbGdvcml0aG1pYyBvbmVzCisgICAJCQkJCS8vIGl0ZXJhdGUgb3ZlciBhbGwgYWxnb3JpdGhtaWMgcmFuZ2VzOyBhc3N1bWUgdGhhdCB0aGV5IGFyZSAKKyAgIAkJCQkJLy8gaW4gYXNjZW5kaW5nIG9yZGVyCisgICAJCQkJCWludCBzdGFydCA9IG1fbmFtZV8uZ2V0QWxnb3JpdGhtU3RhcnQobV9hbGdvcml0aG1JbmRleF8pOworICAgCQkJCQlpZiAobV9jdXJyZW50XyA8IHN0YXJ0KSB7CisgICAJCQkJCQkvLyB0aGlzIHNob3VsZCBnZXQgcmlkIG9mIHRob3NlIGNvZGVwb2ludHMgdGhhdCBhcmUgbm90CisgICAJCQkJCQkvLyBpbiB0aGUgYWxnb3JpdGhtaWMgcmFuZ2UKKyAgIAkJCQkJCWludCBlbmQgPSBzdGFydDsKKyAgICAgICAgCQkgICAgCWlmIChtX2xpbWl0XyA8PSBzdGFydCkgeworICAgICAgICAgCQkgCSAgICAgIAllbmQgPSBtX2xpbWl0XzsKKyAgICAgICAgICAJCSAgCQl9CisgICAgICAgICAgICAJCQlpZiAoIWl0ZXJhdGVHcm91cChlbGVtZW50LCBlbmQpKSB7CisgICAgICAgICAgICAJCQkJbV9jdXJyZW50XyArKzsKKyAgICAgICAgICAgICAgCSAJCSAJcmV0dXJuIHRydWU7CisgICAgICAgICAgICAJCQl9CQorICAgICAgICAJCQl9CisgICAgICAgIAkKKyAgICAgICAgCQkJaWYgKG1fY3VycmVudF8gPj0gbV9saW1pdF8pIHsKKyAgICAgICAgCQkJCS8vIGFmdGVyIGl0ZXJhdGVHcm91cCBmYWlscywgY3VycmVudCBjb2RlcG9pbnQgbWF5IGJlCisgICAgICAgIAkJCQkvLyBncmVhdGVyIHRoYW4gbGltaXQKKyAgICAgICAgCQkJCXJldHVybiBmYWxzZTsKKyAgICAgICAgCQkJfQorICAgICAgICAJCQkKKyAgICAgICAgCQkJZWxlbWVudC5pbnRlZ2VyID0gbV9jdXJyZW50XzsKKyAgICAgICAgCQkJZWxlbWVudC52YWx1ZSAgID0gbV9uYW1lXy5nZXRBbGdvcml0aG1OYW1lKG1fYWxnb3JpdGhtSW5kZXhfLCAKKyAgICAgICAgCQkgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Xyk7CisgICAgICAgIAkJCS8vIHJlc2V0IHRoZSBncm91cCBpbmRleCBpZiB3ZSBhcmUgaW4gdGhlIGFsZ29yaXRobWljIG5hbWVzICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCQkJbV9ncm91cEluZGV4XyA9IC0xOyAKKyAgICAgICAgCQkJbV9jdXJyZW50XyArKzsKKyAgICAgICAgCQkJcmV0dXJuIHRydWU7CisgICAgCQkJfQorICAgIAkJfQorICAgIAl9CisgICAgCS8vIGVudW1lcmF0ZSB0aGUgY2hhcmFjdGVyIG5hbWVzIGFmdGVyIHRoZSBsYXN0IGFsZ29yaXRobWljIHJhbmdlIAorICAgIAlpZiAoIWl0ZXJhdGVHcm91cChlbGVtZW50LCBtX2xpbWl0XykpIHsKKyAgICAJCW1fY3VycmVudF8gKys7CisgICAgCQlyZXR1cm4gdHJ1ZTsKKyAgICAJfQorICAgIAllbHNlIGlmIChtX2Nob2ljZV8gPT0gVUNoYXJhY3Rlck5hbWVDaG9pY2UuRVhURU5ERURfQ0hBUl9OQU1FKSB7CisgICAgCQlpZiAoIWl0ZXJhdGVFeHRlbmRlZChlbGVtZW50LCBtX2xpbWl0XykpIHsKKyAgICAJCQltX2N1cnJlbnRfICsrOworICAgIAkJCXJldHVybiB0cnVlOworICAgIAkJfQorICAgIAl9CisgICAgCQorCQlyZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogPHA+UmVzZXRzIHRoZSBpdGVyYXRvciB0byBzdGFydCBpdGVyYXRpbmcgZnJvbSB0aGUgaW50ZWdlciBpbmRleCAKKyAgICAqIFVDaGFyYWN0ZXIuTUlOX1ZBTFVFIG9yIFggaWYgYSBzZXRSYW5nZShYLCBZKSBoYXMgYmVlbiBjYWxsZWQgcHJldmlvdXNseS4KKyAgICAqIDwvcD4KKyAgICAqIEBkcmFmdCAyLjEKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgCW1fY3VycmVudF8gICAgICAgID0gbV9zdGFydF87CisgICAgCW1fZ3JvdXBJbmRleF8gICAgID0gLTE7CisgICAgCW1fYWxnb3JpdGhtSW5kZXhfID0gLTE7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPlJlc3RyaWN0cyB0aGUgcmFuZ2Ugb2YgaW50ZWdlcnMgdG8gaXRlcmF0ZSBhbmQgcmVzZXRzIHRoZSBpdGVyYXRpb24gCisgICAgICogdG8gYmVnaW4gYXQgdGhlIGluZGV4IGFyZ3VtZW50IHN0YXJ0LjwvcD4KKyAgICAgKiA8cD5JZiBzZXRSYW5nZShzdGFydCwgZW5kKSBpcyBub3QgcGVyZm9ybWVkIGJlZm9yZSBuZXh0KGVsZW1lbnQpIGlzIAorICAgICAqIGNhbGxlZCwgdGhlIGl0ZXJhdGlvbiB3aWxsIHN0YXJ0IGZyb20gdGhlIGludGVnZXIgaW5kZXggCisgICAgICogVUNoYXJhY3Rlci5NSU5fVkFMVUUgYW5kIGVuZCBhdCBVQ2hhcmFjdGVyLk1BWF9WQUxVRS48L3A+CisgICAgICogPHA+CisgICAgICogSWYgdGhpcyByYW5nZSBpcyBzZXQgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgVUNoYXJhY3Rlci5NSU5fVkFMVUUgYW5kIAorICAgICAqIFVDaGFyYWN0ZXIuTUFYX1ZBTFVFLCBuZXh0KGVsZW1lbnQpIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4KKyAgICAgKiA8L3A+CisgICAgICogQHBhcmFtIHN0YXJ0IGZpcnN0IGludGVnZXIgaW4gcmFuZ2UgdG8gaXRlcmF0ZQorICAgICAqIEBwYXJhbSBsaW1pdCAxIGludGVnZXIgYWZ0ZXIgdGhlIGxhc3QgaW50ZWdlciBpbiByYW5nZSAKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHNldCBhbiAKKyAgICAgKiAgICAgICAgICAgIGlsbGVnYWwgcmFuZ2UuIEUuZyBsaW1pdCA8PSBzdGFydAorICAgICAqIEBkcmFmdCAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBsaW1pdCkKKyAgICB7CisgICAgCWlmIChzdGFydCA+PSBsaW1pdCkgeworICAgIAkgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAJICAgICAgICAic3RhcnQgb3IgbGltaXQgaGFzIHRvIGJlIHZhbGlkIFVuaWNvZGUgY29kZXBvaW50cyBhbmQgc3RhcnQgPCBsaW1pdCIpOworICAgIAl9CisgICAgCWlmIChzdGFydCA8IFVDaGFyYWN0ZXIuTUlOX1ZBTFVFKSB7CisgICAgCQltX3N0YXJ0XyA9IFVDaGFyYWN0ZXIuTUlOX1ZBTFVFOworICAgIAl9IAorICAgIAllbHNlIHsKKyAgICAJCW1fc3RhcnRfID0gc3RhcnQ7CisgICAgCX0KKyAgICAJCisgICAgCWlmIChsaW1pdCA+IFVDaGFyYWN0ZXIuTUFYX1ZBTFVFICsgMSkgeworICAgIAkJbV9saW1pdF8gPSBVQ2hhcmFjdGVyLk1BWF9WQUxVRSArIDE7CisgICAgCX0KKyAgICAJZWxzZSB7CisgICAgCQltX2xpbWl0XyA9IGxpbWl0OworICAgIAl9CisgICAgCW1fY3VycmVudF8gPSBtX3N0YXJ0XzsKKyAgICB9CisgICAgCisJLy8gcHJvdGVjdGVkIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICogQ29uc3RydWN0b3IKKyAgICAqIEBwYXJhbSBuYW1lIG5hbWUgZGF0YQorICAgICogQHBhcmFtIGNob2ljZSBuYW1lIGNob2ljZSBmcm9tIHRoZSBjbGFzcyAKKyAgICAqICAgICAgICAgICAgICAgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyTmFtZUNob2ljZQorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIFVDaGFyYWN0ZXJOYW1lSXRlcmF0b3IoVUNoYXJhY3Rlck5hbWUgbmFtZSwgaW50IGNob2ljZSkKKyAgICB7CisgICAgCW1fbmFtZV8gICAgPSBuYW1lOworICAgIAkvLyBubyBleHBsaWNpdCBjaG9pY2UgaW4gVUNoYXJhY3RlciBzbyBubyBjaGVja3Mgb24gY2hvaWNlCisgICAgIAltX2Nob2ljZV8gID0gY2hvaWNlOworICAgIAltX3N0YXJ0XyAgID0gVUNoYXJhY3Rlci5NSU5fVkFMVUU7CisgICAgCW1fbGltaXRfICAgPSBVQ2hhcmFjdGVyLk1BWF9WQUxVRSArIDE7CisgICAgCW1fY3VycmVudF8gPSBtX3N0YXJ0XzsKKyAgICB9CisgICAgCisgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAkKKyAgCS8qKgorICAJICogTmFtZSBkYXRhCisgIAkgKi8KKyAgCXByaXZhdGUgVUNoYXJhY3Rlck5hbWUgbV9uYW1lXzsKKyAgCS8qKgorICAJICogTmFtZSBjaG9pY2UKKyAgCSAqLworICAJcHJpdmF0ZSBpbnQgbV9jaG9pY2VfOworICAJIC8qKgorICAgICAqIFN0YXJ0IGl0ZXJhdGlvbiByYW5nZQorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fc3RhcnRfOworICAgIC8qKgorICAgICAqIEVuZCArIDEgaXRlcmF0aW9uIHJhbmdlCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9saW1pdF87CisgICAgLyoqCisgICAgICogQ3VycmVudCBjb2RlcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX2N1cnJlbnRfOworICAgIC8qKgorICAgICAqIEdyb3VwIGluZGV4CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9ncm91cEluZGV4XyA9IC0xOworICAgIC8qKgorICAgICAqIEFsZ29yaXRobSBpbmRleAorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fYWxnb3JpdGhtSW5kZXhfID0gLTE7CisgICAgLyoqCisgICAgKiBHcm91cCB1c2UKKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNoYXIgR1JPVVBfT0ZGU0VUU19bXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgY2hhcltVQ2hhcmFjdGVyTmFtZS5MSU5FU19QRVJfR1JPVVBfICsgMV07CisgICAgcHJpdmF0ZSBzdGF0aWMgY2hhciBHUk9VUF9MRU5HVEhTX1tdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBjaGFyW1VDaGFyYWN0ZXJOYW1lLkxJTkVTX1BFUl9HUk9VUF8gKyAxXTsKKyAgICAKKyAgICAvLyBwcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHcm91cCBuYW1lIGl0ZXJhdGlvbiwgaXRlcmF0ZSBhbGwgdGhlIG5hbWVzIGluIHRoZSBjdXJyZW50IDMyLWdyb3VwIGFuZCAKKyAgICAgKiByZXR1cm5zIHRoZSBmaXJzdCBjb2RlcG9pbnQgdGhhdCBoYXMgYSB2YWxpZCBuYW1lLgorIAkgKiBAcGFyYW0gcmVzdWx0IHN0b3JlcyB0aGUgcmVzdWx0IGNvZGVwb2ludCBhbmQgbmFtZQorIAkgKiBAcGFyYW0gbGltaXQgbGFzdCBjb2RlcG9pbnQgKyAxIGluIHJhbmdlIHRvIHNlYXJjaAorIAkgKiBAcmV0dXJuIGZhbHNlIGlmIGEgY29kZXBvaW50IHdpdGggYSBuYW1lIGlzIGZvdW5kIGluIGdyb3VwIGFuZCB3ZSBjYW4KKyAJICogICAgICAgICBiYWlsIGZyb20gZnVydGhlciBpdGVyYXRpb24sIHRydWUgdG8gY29udGludWUgb24gd2l0aCB0aGUgCisgCSAqICAgICAgICAgaXRlcmF0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGl0ZXJhdGVTaW5nbGVHcm91cChWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQgcmVzdWx0LCBpbnQgbGltaXQpIAorICAgIHsKKyAgICAJc3luY2hyb25pemVkKEdST1VQX09GRlNFVFNfKSB7CisgICAgCXN5bmNocm9uaXplZChHUk9VUF9MRU5HVEhTXykgeworIAkJCWludCBpbmRleCA9IG1fbmFtZV8uZ2V0R3JvdXBMZW5ndGhzKG1fZ3JvdXBJbmRleF8sIEdST1VQX09GRlNFVFNfLCAKKyAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdST1VQX0xFTkdUSFNfKTsKKyAgICAgICAgCXdoaWxlIChtX2N1cnJlbnRfIDwgbGltaXQpIHsKKyAgICAgICAgCQlpbnQgICAgb2Zmc2V0ID0gbV9uYW1lXy5nZXRHcm91cE9mZnNldChtX2N1cnJlbnRfKTsKKyAgICAgICAgCQlTdHJpbmcgbmFtZSAgID0gbV9uYW1lXy5nZXRHcm91cE5hbWUoCisgICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArIEdST1VQX09GRlNFVFNfW29mZnNldF0sIAorICAgICAgICAJIAkgICAgICAgICAgICAgICAgICAgICAgICAgIEdST1VQX0xFTkdUSFNfW29mZnNldF0sIG1fY2hvaWNlXyk7CisgICAgICAgIAkJaWYgKChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA9PSAwKSAmJiAKKyAgICAgICAgICAJIAkJbV9jaG9pY2VfID09IFVDaGFyYWN0ZXJOYW1lQ2hvaWNlLkVYVEVOREVEX0NIQVJfTkFNRSkgeworICAgICAgICAgICAJCQluYW1lID0gbV9uYW1lXy5nZXRFeHRlbmRlZE5hbWUobV9jdXJyZW50Xyk7CisgICAgICAgIAkJfQorICAgICAgICAJCWlmIChuYW1lICE9IG51bGwgJiYgbmFtZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgCQkJcmVzdWx0LmludGVnZXIgPSBtX2N1cnJlbnRfOworICAgICAgICAJCQlyZXN1bHQudmFsdWUgICA9IG5hbWU7CisgICAgICAgICAgCSAgCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgCSsrIG1fY3VycmVudF87CisgICAgICAgIAl9CisgICAgCX0KKyAgICAJfQorICAgIAlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisgICAgICogR3JvdXAgbmFtZSBpdGVyYXRpb24sIGl0ZXJhdGUgYWxsIHRoZSBuYW1lcyBpbiB0aGUgY3VycmVudCAzMi1ncm91cCBhbmQgCisgICAgICogcmV0dXJucyB0aGUgZmlyc3QgY29kZXBvaW50IHRoYXQgaGFzIGEgdmFsaWQgbmFtZS4KKyAJICogQHBhcmFtIHJlc3VsdCBzdG9yZXMgdGhlIHJlc3VsdCBjb2RlcG9pbnQgYW5kIG5hbWUKKyAJICogQHBhcmFtIGxpbWl0IGxhc3QgY29kZXBvaW50ICsgMSBpbiByYW5nZSB0byBzZWFyY2gKKyAJICogQHJldHVybiBmYWxzZSBpZiBhIGNvZGVwb2ludCB3aXRoIGEgbmFtZSBpcyBmb3VuZCBpbiBncm91cCBhbmQgd2UgY2FuCisgCSAqICAgICAgICAgYmFpbCBmcm9tIGZ1cnRoZXIgaXRlcmF0aW9uLCB0cnVlIHRvIGNvbnRpbnVlIG9uIHdpdGggdGhlIAorIAkgKiAgICAgICAgIGl0ZXJhdGlvbgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpdGVyYXRlR3JvdXAoVmFsdWVJdGVyYXRvci5FbGVtZW50IHJlc3VsdCwgaW50IGxpbWl0KQorICAgIHsKKyAgICAJaWYgKG1fZ3JvdXBJbmRleF8gPCAwKSB7CisgICAgCQltX2dyb3VwSW5kZXhfID0gbV9uYW1lXy5nZXRHcm91cChtX2N1cnJlbnRfKTsKKyAgICAJfQorICAgIAkKKyAgICAJd2hpbGUgKG1fZ3JvdXBJbmRleF8gPCBtX25hbWVfLm1fZ3JvdXBjb3VudF8gJiYKKyAgICAJICAgICAgIG1fY3VycmVudF8gPCBsaW1pdCkgeyAKKyAgICAJCS8vIGl0ZXJhdGUgdGlsbCB0aGUgbGFzdCBncm91cCBvciB0aGUgbGFzdCBjb2RlcG9pbnQKKyAgICAJCWludCBzdGFydE1TQiA9IG1fbmFtZV8uZ2V0Q29kZXBvaW50TVNCKG1fY3VycmVudF8pOworICAgIAkJaW50IGdNU0IgICAgID0gbV9uYW1lXy5nZXRHcm91cE1TQihtX2dyb3VwSW5kZXhfKTsgLy8gY2FuIGJlIC0xCisgICAgCQlpZiAoc3RhcnRNU0IgPT0gZ01TQikgeworICAgIAkJCWlmIChzdGFydE1TQiA9PSBtX25hbWVfLmdldENvZGVwb2ludE1TQihsaW1pdCAtIDEpKSB7CisgICAgCQkJCS8vIGlmIHN0YXJ0IGFuZCBsaW1pdCAtIDEgYXJlIGluIHRoZSBzYW1lIGdyb3VwLCB0aGVuIGVudW1lcmF0ZSAKKyAgICAJCQkJLy8gb25seSBpbiB0aGF0IG9uZQorICAgIAkJCQlyZXR1cm4gaXRlcmF0ZVNpbmdsZUdyb3VwKHJlc3VsdCwgbGltaXQpOworICAgIAkJCX0KKyAgICAJCQkvLyBlbnVtZXJhdGUgY2hhcmFjdGVycyBpbiB0aGUgcGFydGlhbCBzdGFydCBncm91cAorICAgICAgICAgICAJCS8vIGlmIChtX25hbWVfLmdldEdyb3VwT2Zmc2V0KG1fY3VycmVudF8pICE9IDApIHsKKyAgICAgICAgICAgICAgIAlpZiAoIWl0ZXJhdGVTaW5nbGVHcm91cChyZXN1bHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgIG1fbmFtZV8uZ2V0R3JvdXBMaW1pdChnTVNCKSkpIHsKKyAgICAgICAgICAgICAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIAkrKyBtX2dyb3VwSW5kZXhfOyAvLyBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGdyb3VwCisgICAgCQl9CQorICAgICAgIAkJZWxzZSBpZiAoc3RhcnRNU0IgPiBnTVNCKSB7CisgICAgICAgICAgIAkJCS8vIG1ha2Ugc3VyZSB0aGF0IHdlIHN0YXJ0IGVudW1lcmF0aW5nIHdpdGggdGhlIGZpcnN0IGdyb3VwIAorICAgICAgICAgICAJCQkvLyBhZnRlciBzdGFydCAKKyAgICAgICAgICAgCQkJbV9ncm91cEluZGV4XyArKzsKKyAgICAgICAJCX0KKyAgICAgICAJCWVsc2UgeyAKKyAgICAgICAJCQlpbnQgZ01JTiA9IG1fbmFtZV8uZ2V0R3JvdXBNaW4oZ01TQik7CisgICAgICAgCQkJaWYgKGdNSU4gPiBsaW1pdCkgeworICAgICAgICAgICAgICAgCQlnTUlOID0gbGltaXQ7CisgICAgICAgICAgICAJfQorICAgICAgIAkJCWlmIChtX2Nob2ljZV8gPT0gVUNoYXJhY3Rlck5hbWVDaG9pY2UuRVhURU5ERURfQ0hBUl9OQU1FKSB7CisJCQkJCWlmICghaXRlcmF0ZUV4dGVuZGVkKHJlc3VsdCwgZ01JTikpIHsKKwkJIAkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKwkgIAkJCX0KKwkgIAkJCW1fY3VycmVudF8gPSBnTUlOOworICAgICAgICAJfQorICAgIAl9CisgICAgICAgIAorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisgCSAqIEl0ZXJhdGUgZXh0ZW5kZWQgbmFtZXMuCisgCSAqIEBwYXJhbSByZXN1bHQgc3RvcmVzIHRoZSByZXN1bHQgY29kZXBvaW50IGFuZCBuYW1lCisgCSAqIEBwYXJhbSBsaW1pdCBsYXN0IGNvZGVwb2ludCArIDEgaW4gcmFuZ2UgdG8gc2VhcmNoCisgCSAqIEByZXR1cm4gZmFsc2UgaWYgYSBjb2RlcG9pbnQgd2l0aCBhIG5hbWUgaXMgZm91bmQgYW5kIHdlIGNhbgorIAkgKiAgICAgICAgIGJhaWwgZnJvbSBmdXJ0aGVyIGl0ZXJhdGlvbiwgdHJ1ZSB0byBjb250aW51ZSBvbiB3aXRoIHRoZSAKKyAJICogICAgICAgICBpdGVyYXRpb24gKHRoaXMgd2lsbCBhbHdheXMgYmUgZmFsc2UgZm9yIHZhbGlkIGNvZGVwb2ludHMpCisgCSAqLyAKKwlwcml2YXRlIGJvb2xlYW4gaXRlcmF0ZUV4dGVuZGVkKFZhbHVlSXRlcmF0b3IuRWxlbWVudCByZXN1bHQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQpCisJeworICAgICAgICB3aGlsZSAobV9jdXJyZW50XyA8IGxpbWl0KSB7CisgICAgICAgIAlTdHJpbmcgbmFtZSA9IG1fbmFtZV8uZ2V0RXh0ZW5kZWRPcjEwTmFtZShtX2N1cnJlbnRfKTsKKyAgICAgICAgCWlmIChuYW1lICE9IG51bGwgJiYgbmFtZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuaW50ZWdlciA9IG1fY3VycmVudF87CisgICAgICAgIAkJcmVzdWx0LnZhbHVlICAgPSBuYW1lOworICAgIAkJCXJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrIG1fY3VycmVudF87CisgICAgICAgIH0KKyAgICAJcmV0dXJuIHRydWU7CisgIAl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVUNoYXJhY3RlclR5cGVJdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVUNoYXJhY3RlclR5cGVJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhZThlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvbGFuZy9VQ2hhcmFjdGVyVHlwZUl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvbGFuZy9VQ2hhcmFjdGVyVHlwZUl0ZXJhdG9yLmphdmEsdiAkCisqICREYXRlOiAyMDAyLzExLzE1IDIwOjM5OjI2ICQKKyogJFJldmlzaW9uOiAxLjcgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1Lmxhbmc7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlRyaWVJdGVyYXRvcjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKKworLyoqCisgKiBDbGFzcyBlbmFibGluZyBpdGVyYXRpb24gb2YgdGhlIGNvZGVwb2ludHMgYWNjb3JkaW5nIHRvIHRoZWlyIHR5cGVzLgorICogUmVzdWx0IG9mIGVhY2ggaXRlcmF0aW9uIGNvbnRhaW5zIHRoZSBpbnRlcnZhbCBvZiBjb2RlcG9pbnRzIHRoYXQgaGF2ZQorICogdGhlIHNhbWUgdHlwZS4KKyAqIEV4YW1wbGUgb2YgdXNlOjxicj4KKyAqIDxwcmU+CisgKiBSYW5nZVZhbHVlSXRlcmF0b3IgaXRlcmF0b3IgPSBVQ2hhcmFjdGVyLmdldFR5cGVJdGVyYXRvcigpOworICogUmFuZ2VWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQgZWxlbWVudCA9IG5ldyBSYW5nZVZhbHVlSXRlcmF0b3IuRWxlbWVudCgpOworICogd2hpbGUgKGl0ZXJhdG9yLm5leHQoZWxlbWVudCkpIHsKKyAqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvZGVwb2ludCBcXHUiICsgCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoZWxlbWVudC5zdGFydCkgKyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIiB0byBjb2RlcG9pbnQgXFx1IiArCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoZWxlbWVudC5saW1pdCAtIDEpICsgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICIgaGFzIHRoZSBjaGFyYWN0ZXIgdHlwZSAiICsgCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmFsdWUpOworICogfQorICogPC9wcmU+CisgKiBAYXV0aG9yIHN5bndlZQorICogQHNlZSBjb20uaWJtLmljdS51dGlsLlRyaWVJdGVyYXRvcgorICogQHNpbmNlIHJlbGVhc2UgMi4xLCBKYW4gMjQgMjAwMgorICovCitjbGFzcyBVQ2hhcmFjdGVyVHlwZUl0ZXJhdG9yIGV4dGVuZHMgVHJpZUl0ZXJhdG9yCit7CisgICAgLy8gcHJvdGVjdGVkIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICogVHJpZUVudW1lcmF0aW9uIGNvbnN0cnVjdG9yCisgICAgKiBAcGFyYW0gcHJvcGVydHkgdGhlIHVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgdG8gYmUgdXNlZAorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIFVDaGFyYWN0ZXJUeXBlSXRlcmF0b3IoVUNoYXJhY3RlclByb3BlcnR5IHByb3BlcnR5KQorICAgIHsKKyAgICAgICBzdXBlcihwcm9wZXJ0eS5tX3RyaWVfKTsKKyAgICB9CisgICAgCisgICAgLy8gcHJvdGVjdGVkIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICogQ2FsbGVkIGJ5IG5leHRFbGVtZW50KCkgdG8gZXh0cmFjdHMgYSAzMiBiaXQgdmFsdWUgZnJvbSBhIHRyaWUgdmFsdWUKKyAgICAqIHVzZWQgZm9yIGNvbXBhcmlzb24uCisgICAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBvdmVyd3JpdHRlbiBpZiBzcGVjaWFsIG1hbmlwdWxhdGlvbiBpcyB0byBiZSBkb25lCisgICAgKiB0byByZXRyaWV2ZSBhIHJlbGV2YW50IGNvbXBhcmlzb24uCisgICAgKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiBpcyB0byByZXR1cm4gdGhlIHZhbHVlIGFzIGl0IGlzLgorICAgICogQHBhcmFtIHZhbHVlIGEgdmFsdWUgZnJvbSB0aGUgdHJpZQorICAgICogQHJldHVybiBleHRyYWN0ZWQgdmFsdWUKKyAgICAqLworICAgIHByb3RlY3RlZCBpbnQgZXh0cmFjdChpbnQgdmFsdWUpCisgICAgeworICAgIAkvLyB0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIFRyaWVJdGVyYXRvcigpIGdldHMgY2FsbGVkIGZpcnN0IGFuZCBpdAorICAgIAkvLyBpbiB0dXJuIGNhbGxzIGV4dHJhY3QgdG8gaW5zdGFudGlhdGUgdGhpcyBkZWZhdWx0IHZhbHVlCisgICAgCS8vIHNvIHNvbWV0aW1lcyBtX3Byb3BlcnR5XyBkb2VzIG5vdCBnZXQgYXNzaWduZWQgcHJvcGVybHkKKyAgICAJaWYgKG1fcHJvcGVydHlfID09IG51bGwpIHsKKyAgICAJCW1fcHJvcGVydHlfID0gVUNoYXJhY3RlclByb3BlcnR5LmdldEluc3RhbmNlKCkubV9wcm9wZXJ0eV87CisgICAgCX0KKyAgICAJcmV0dXJuIG1fcHJvcGVydHlfW3ZhbHVlXSAmIFVDaGFyYWN0ZXJQcm9wZXJ0eS5UWVBFX01BU0s7CisgICAgfQorICAgIAorICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIENoYXJhY3RlciBwcm9wZXJ0eQorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fcHJvcGVydHlfW107Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVVByb3BlcnR5LmphdmEgYi9zcmMvY29tL2libS9pY3UvbGFuZy9VUHJvcGVydHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQzYTlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVVByb3BlcnR5LmphdmEKQEAgLTAsMCArMSw1MDYgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgaW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAKKyogICAgICAvdXNyL2N2cy9pY3U0ai9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9VQ2hhcmFjdGVyQ2F0ZWdvcnkuamF2YSAkIAorKiAkRGF0ZTogMjAwMi8xMi8wNCAwMDoxMjo1NCAkIAorKiAkUmV2aXNpb246IDEuNyAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1Lmxhbmc7CisKKy8qKgorICogPHA+U2VsZWN0aW9uIGNvbnN0YW50cyBmb3IgVW5pY29kZSBwcm9wZXJ0aWVzLiA8L3A+CisgKiA8cD5UaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgaW4gZnVuY3Rpb25zIGxpa2UgCisgKiBVQ2hhcmFjdGVyLmhhc0JpbmFyeVByb3BlcnR5KGludCkgdG8gc2VsZWN0IG9uZSBvZiB0aGUgVW5pY29kZSBwcm9wZXJ0aWVzLiAKKyAqIDwvcD4KKyAqIDxwPlRoZSBwcm9wZXJ0aWVzIEFQSXMgYXJlIGludGVuZGVkIHRvIHJlZmxlY3QgVW5pY29kZSBwcm9wZXJ0aWVzIGFzIAorICogZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgKFVDRCkgYW5kIFVuaWNvZGUgVGVjaG5pY2FsIAorICogUmVwb3J0cyAoVVRSKS48L3A+CisgKiA8cD5Gb3IgZGV0YWlscyBhYm91dCB0aGUgcHJvcGVydGllcyBzZWUgPGEgaHJlZj1odHRwOi8vd3d3LnVuaWNvZGUub3JnPgorICogaHR0cDovL3d3dy51bmljb2RlLm9yZzwvYT4uPC9wPiAKKyAqIDxwPkZvciBuYW1lcyBvZiBVbmljb2RlIHByb3BlcnRpZXMgc2VlIHRoZSBVQ0QgZmlsZSBQcm9wZXJ0eUFsaWFzZXMudHh0LgorICogPC9wPiAKKyAqIDxwPkltcG9ydGFudDogSWYgSUNVIGlzIGJ1aWx0IHdpdGggVUNEIGZpbGVzIGZyb20gVW5pY29kZSB2ZXJzaW9ucyBiZWxvdyAKKyAqIDMuMiwgdGhlbiBwcm9wZXJ0aWVzIG1hcmtlZCB3aXRoICJuZXciIGFyZSBub3Qgb3Igbm90IGZ1bGx5IAorICogYXZhaWxhYmxlLiBDaGVjayBVQ2hhcmFjdGVyLmdldFVuaWNvZGVWZXJzaW9uKCkgdG8gYmUgc3VyZS48L3A+CisgKiBAYXV0aG9yIFN5biBXZWUgUXVlaworICogQGRyYWZ0IElDVSAyLjEKKyAqIEBzZWUgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVVByb3BlcnR5Cit7CisgIAkvLyBwdWJsaWMgZGF0YSBtZW1iZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgIAkvKiogCisgIAkgKiA8cD5CaW5hcnkgcHJvcGVydHkgQWxwaGFiZXRpYy4gPC9wPgorICAJICogPHA+UHJvcGVydHkgZm9yIFVDaGFyYWN0ZXIuaXNVQWxwaGFiZXRpYygpLCBkaWZmZXJlbnQgZnJvbSB0aGUgcHJvcGVydHkgCisgIAkgKiBpbiBVQ2hhcmFjdGVyLmlzYWxwaGEoKS48L3A+CisgIAkgKiA8cD5MdSArIExsICsgTHQgKyBMbSArIExvICsgTmwgKyBPdGhlcl9BbHBoYWJldGljLjwvcD4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAJICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFMUEhBQkVUSUMgPSAwOyAKKyAgICAvKiogCisgICAgICogRmlyc3QgY29uc3RhbnQgZm9yIGJpbmFyeSBVbmljb2RlIHByb3BlcnRpZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJJTkFSWV9TVEFSVCA9IEFMUEhBQkVUSUM7CisgICAgLyoqIAorICAgICAqIEJpbmFyeSBwcm9wZXJ0eSBBU0NJSV9IZXhfRGlnaXQgKDAtOSBBLUYgYS1mKS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBU0NJSV9IRVhfRElHSVQgPSAxOyAKKyAgICAvKiogCisgICAgICogPHA+QmluYXJ5IHByb3BlcnR5IEJpZGlfQ29udHJvbC48L3A+CisgICAgICogPHA+Rm9ybWF0IGNvbnRyb2xzIHdoaWNoIGhhdmUgc3BlY2lmaWMgZnVuY3Rpb25zIGluIHRoZSBCaWRpIEFsZ29yaXRobS4KKyAgICAgKiA8L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJJRElfQ09OVFJPTCA9IDI7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgQmlkaV9NaXJyb3JlZC48L3A+IAorICAgICAqIDxwPkNoYXJhY3RlcnMgdGhhdCBtYXkgY2hhbmdlIGRpc3BsYXkgaW4gUlRMIHRleHQuPC9wPiAKKyAgICAgKiA8cD5Qcm9wZXJ0eSBmb3IgVUNoYXJhY3Rlci5pc01pcnJvcmVkKCkuPC9wPiAKKyAgICAgKiA8cD5TZWUgQmlkaSBBbGdvcml0aG07IFVUUiA5LjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklESV9NSVJST1JFRCA9IDM7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgRGFzaC48L3A+IAorICAgICAqIDxwPlZhcmlhdGlvbnMgb2YgZGFzaGVzLjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFTSCA9IDQ7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgRGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludCAobmV3KS4KKyAgICAgKiA8L3A+IAorICAgICAqIDxwPlByb3BlcnR5IHRoYXQgaW5kaWNhdGVzIGNvZGVwb2ludCBpcyBpZ25vcmFibGUgaW4gbW9zdCBwcm9jZXNzaW5nLgorICAgICAqIDwvcD4KKyAgICAgKiA8cD5Db2RlcG9pbnRzICgyMDYwLi4yMDZGLCBGRkYwLi5GRkZCLCBFMDAwMC4uRTBGRkYpICsgCisgICAgICogT3RoZXJfRGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludCArIChDZiArIENjICsgQ3MgLSBXaGl0ZV9TcGFjZSk8L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfSUdOT1JBQkxFX0NPREVfUE9JTlQgPSA1OyAKKyAgICAvKiogCisgICAgICogPHA+QmluYXJ5IHByb3BlcnR5IERlcHJlY2F0ZWQgKG5ldykuPC9wPiAKKyAgICAgKiA8cD5UaGUgdXNhZ2Ugb2YgZGVwcmVjYXRlZCBjaGFyYWN0ZXJzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQUkVDQVRFRCA9IDY7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgRGlhY3JpdGljLjwvcD4gCisgICAgICogPHA+Q2hhcmFjdGVycyB0aGF0IGxpbmd1aXN0aWNhbGx5IG1vZGlmeSB0aGUgbWVhbmluZyBvZiBhbm90aGVyIAorICAgICAqIGNoYXJhY3RlciB0byB3aGljaCB0aGV5IGFwcGx5LjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElBQ1JJVElDID0gNzsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBFeHRlbmRlci48L3A+IAorICAgICAqIDxwPkV4dGVuZCB0aGUgdmFsdWUgb3Igc2hhcGUgb2YgYSBwcmVjZWRpbmcgYWxwaGFiZXRpYyBjaGFyYWN0ZXIsIGUuZy4KKyAgICAgKiBsZW5ndGggYW5kIGl0ZXJhdGlvbiBtYXJrcy48L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVYVEVOREVSID0gODsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbi48L3A+IAorICAgICAqIDxwPkNvbXBvc2l0aW9uRXhjbHVzaW9ucy50eHQgKyBTaW5nbGV0b24gRGVjb21wb3NpdGlvbnMgKyAKKyAgICAgKiBOb24tU3RhcnRlciBEZWNvbXBvc2l0aW9ucy48L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZVTExfQ09NUE9TSVRJT05fRVhDTFVTSU9OID0gOTsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBHcmFwaGVtZV9CYXNlIChuZXcpLjwvcD4KKyAgICAgKiA8cD5Gb3IgcHJvZ3JhbW1hdGljIGRldGVybWluYXRpb24gb2YgZ3JhcGhlbWUgY2x1c3RlciBib3VuZGFyaWVzLiAKKyAgICAgKiBbMC4uMTBGRkZGXS1DYy1DZi1Dcy1Dby1Dbi1abC1acC1HcmFwaGVtZV9MaW5rLUdyYXBoZW1lX0V4dGVuZC1DR0o8L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSQVBIRU1FX0JBU0UgPSAxMDsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBHcmFwaGVtZV9FeHRlbmQgKG5ldykuPC9wPiAKKyAgICAgKiA8cD5Gb3IgcHJvZ3JhbW1hdGljIGRldGVybWluYXRpb24gb2YgZ3JhcGhlbWUgY2x1c3RlciBib3VuZGFyaWVzLjwvcD4gCisgICAgICogPHA+TWUrTW4rTWMrT3RoZXJfR3JhcGhlbWVfRXh0ZW5kLUdyYXBoZW1lX0xpbmstQ0dKPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkFQSEVNRV9FWFRFTkQgPSAxMTsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBHcmFwaGVtZV9MaW5rIChuZXcpLjwvcD4gCisgICAgICogPHA+Rm9yIHByb2dyYW1tYXRpYyBkZXRlcm1pbmF0aW9uIG9mIGdyYXBoZW1lIGNsdXN0ZXIgYm91bmRhcmllcy48L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSQVBIRU1FX0xJTksgPSAxMjsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBIZXhfRGlnaXQuPC9wPiAKKyAgICAgKiA8cD5DaGFyYWN0ZXJzIGNvbW1vbmx5IHVzZWQgZm9yIGhleGFkZWNpbWFsIG51bWJlcnMuPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIRVhfRElHSVQgPSAxMzsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBIeXBoZW4uPC9wPiAKKyAgICAgKiA8cD5EYXNoZXMgdXNlZCB0byBtYXJrIGNvbm5lY3Rpb25zIGJldHdlZW4gcGllY2VzIG9mIHdvcmRzLCBwbHVzIHRoZSAKKyAgICAgKiBLYXRha2FuYSBtaWRkbGUgZG90LjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSFlQSEVOID0gMTQ7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgSURfQ29udGludWUuPC9wPgorICAgICAqIDxwPkNoYXJhY3RlcnMgdGhhdCBjYW4gY29udGludWUgYW4gaWRlbnRpZmllci48L3A+IAorICAgICAqIDxwPklEX1N0YXJ0K01uK01jK05kK1BjPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRF9DT05USU5VRSA9IDE1OyAKKyAgICAvKiogCisgICAgICogPHA+QmluYXJ5IHByb3BlcnR5IElEX1N0YXJ0LjwvcD4gCisgICAgICogPHA+Q2hhcmFjdGVycyB0aGF0IGNhbiBzdGFydCBhbiBpZGVudGlmaWVyLjwvcD4gCisgICAgICogPHA+THUrTGwrTHQrTG0rTG8rTmw8L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElEX1NUQVJUID0gMTY7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgSWRlb2dyYXBoaWMuPC9wPiAKKyAgICAgKiA8cD5DSktWIGlkZW9ncmFwaHMuPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJREVPR1JBUEhJQyA9IDE3OyAKKyAgICAvKiogCisgICAgICogPHA+QmluYXJ5IHByb3BlcnR5IElEU19CaW5hcnlfT3BlcmF0b3IgKG5ldykuPC9wPiAKKyAgICAgKiA8cD5Gb3IgcHJvZ3JhbW1hdGljIGRldGVybWluYXRpb24gb2YgSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gU2VxdWVuY2VzLgorICAgICAqIDwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSURTX0JJTkFSWV9PUEVSQVRPUiA9IDE4OyAKKyAgICAvKiogCisgICAgICogPHA+QmluYXJ5IHByb3BlcnR5IElEU19UcmluYXJ5X09wZXJhdG9yIChuZXcpLjwvcD4gCisgICAgICogPHA/Rm9yIHByb2dyYW1tYXRpYyBkZXRlcm1pbmF0aW9uIG9mIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIAorICAgICAqIFNlcXVlbmNlcy48L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElEU19UUklOQVJZX09QRVJBVE9SID0gMTk7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgSm9pbl9Db250cm9sLjwvcD4gCisgICAgICogPHA+Rm9ybWF0IGNvbnRyb2xzIGZvciBjdXJzaXZlIGpvaW5pbmcgYW5kIGxpZ2F0aW9uLjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSk9JTl9DT05UUk9MID0gMjA7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgTG9naWNhbF9PcmRlcl9FeGNlcHRpb24gKG5ldykuPC9wPiAKKyAgICAgKiA8cD5DaGFyYWN0ZXJzIHRoYXQgZG8gbm90IHVzZSBsb2dpY2FsIG9yZGVyIGFuZCByZXF1aXJlIHNwZWNpYWwgCisgICAgICogaGFuZGxpbmcgaW4gbW9zdCBwcm9jZXNzaW5nLjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSUNBTF9PUkRFUl9FWENFUFRJT04gPSAyMTsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBMb3dlcmNhc2UuPC9wPiAKKyAgICAgKiA8cD5TYW1lIGFzIFVDaGFyYWN0ZXIuaXNVTG93ZXJjYXNlKCksIGRpZmZlcmVudCBmcm9tIAorICAgICAqIFVDaGFyYWN0ZXIuaXNsb3dlcigpLjwvcD4gCisgICAgICogPHA+TGwrT3RoZXJfTG93ZXJjYXNlPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT1dFUkNBU0UgPSAyMjsgCisgICAgLyoqIDxwPkJpbmFyeSBwcm9wZXJ0eSBNYXRoLjwvcD4gCisgICAgICogPHA+U20rT3RoZXJfTWF0aDwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUSCA9IDIzOyAKKyAgICAvKiogCisgICAgICogPHA+QmluYXJ5IHByb3BlcnR5IE5vbmNoYXJhY3Rlcl9Db2RlX1BvaW50LjwvcD4gCisgICAgICogPHA+Q29kZSBwb2ludHMgdGhhdCBhcmUgZXhwbGljaXRseSBkZWZpbmVkIGFzIGlsbGVnYWwgZm9yIHRoZSBlbmNvZGluZyAKKyAgICAgKiBvZiBjaGFyYWN0ZXJzLjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9OQ0hBUkFDVEVSX0NPREVfUE9JTlQgPSAyNDsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBRdW90YXRpb25fTWFyay48L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVT1RBVElPTl9NQVJLID0gMjU7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgUmFkaWNhbCAobmV3KS48L3A+IAorICAgICAqIDxwPkZvciBwcm9ncmFtbWF0aWMgZGV0ZXJtaW5hdGlvbiBvZiBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiAKKyAgICAgKiBTZXF1ZW5jZXMuPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSQURJQ0FMID0gMjY7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgU29mdF9Eb3R0ZWQgKG5ldykuPC9wPiAKKyAgICAgKiA8cD5DaGFyYWN0ZXJzIHdpdGggYSAic29mdCBkb3QiLCBsaWtlIGkgb3Igai48L3A+CisgICAgICogPHA+QW4gYWNjZW50IHBsYWNlZCBvbiB0aGVzZSBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgZG90IHRvIGRpc2FwcGVhci48L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPRlRfRE9UVEVEID0gMjc7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgVGVybWluYWxfUHVuY3R1YXRpb24uPC9wPiAKKyAgICAgKiA8cD5QdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIHRoYXQgZ2VuZXJhbGx5IG1hcmsgdGhlIGVuZCBvZiB0ZXh0dWFsIAorICAgICAqIHVuaXRzLjwvcD4gCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVSTUlOQUxfUFVOQ1RVQVRJT04gPSAyODsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBVbmlmaWVkX0lkZW9ncmFwaCAobmV3KS48L3A+IAorICAgICAqIDxwPkZvciBwcm9ncmFtbWF0aWMgZGV0ZXJtaW5hdGlvbiBvZiBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiAKKyAgICAgKiBTZXF1ZW5jZXMuPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklGSUVEX0lERU9HUkFQSCA9IDI5OyAKKyAgICAvKiogCisgICAgICogPHA+QmluYXJ5IHByb3BlcnR5IFVwcGVyY2FzZS48L3A+IAorICAgICAqIDxwPlNhbWUgYXMgVUNoYXJhY3Rlci5pc1VVcHBlcmNhc2UoKSwgZGlmZmVyZW50IGZyb20gCisgICAgICogVUNoYXJhY3Rlci5pc1VwcGVyQ2FzZSgpLjwvcD4gCisgICAgICogPHA+THUrT3RoZXJfVXBwZXJjYXNlPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUFBFUkNBU0UgPSAzMDsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBXaGl0ZV9TcGFjZS48L3A+IAorICAgICAqIDxwPlNhbWUgYXMgVUNoYXJhY3Rlci5pc1VXaGl0ZVNwYWNlKCksIGRpZmZlcmVudCBmcm9tIAorICAgICAqIFVDaGFyYWN0ZXIuaXNTcGFjZSgpIGFuZCBVQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZSgpLjwvcD4gCisgICAgICogU3BhY2UgY2hhcmFjdGVycytUQUIrQ1IrTEYtWldTUC1aV05CU1A8L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdISVRFX1NQQUNFID0gMzE7IAorICAgIC8qKiAKKyAgICAgKiA8cD5CaW5hcnkgcHJvcGVydHkgWElEX0NvbnRpbnVlLjwvcD4gCisgICAgICogPHA+SURfQ29udGludWUgbW9kaWZpZWQgdG8gYWxsb3cgY2xvc3VyZSB1bmRlciBub3JtYWxpemF0aW9uIGZvcm1zIAorICAgICAqIE5GS0MgYW5kIE5GS0QuPC9wPiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYSURfQ09OVElOVUUgPSAzMjsgCisgICAgLyoqIAorICAgICAqIDxwPkJpbmFyeSBwcm9wZXJ0eSBYSURfU3RhcnQuPC9wPiAKKyAgICAgKiA8cD5JRF9TdGFydCBtb2RpZmllZCB0byBhbGxvdyBjbG9zdXJlIHVuZGVyIG5vcm1hbGl6YXRpb24gZm9ybXMgTkZLQyAKKyAgICAgKiBhbmQgTkZLRC48L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhJRF9TVEFSVCA9IDMzOyAKKyAgICAvKiogCisgICAgICogPHA+T25lIG1vcmUgdGhhbiB0aGUgbGFzdCBjb25zdGFudCBmb3IgYmluYXJ5IFVuaWNvZGUgcHJvcGVydGllcy48L3A+IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJJTkFSWV9MSU1JVCA9IDM0OworICAgIC8qKiAKKyAgICAgKiBFbnVtZXJhdGVkIHByb3BlcnR5IEJpZGlfQ2xhc3MuCisgICAgICogU2FtZSBhcyBVQ2hhcmFjdGVyLmdldERpcmVjdGlvbihpbnQpLCByZXR1cm5zIFVDaGFyYWN0ZXJEaXJlY3Rpb24gdmFsdWVzLiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCSURJX0NMQVNTID0gMHgxMDAwOworICAgIC8qKiAKKyAgICAgKiBGaXJzdCBjb25zdGFudCBmb3IgZW51bWVyYXRlZC9pbnRlZ2VyIFVuaWNvZGUgcHJvcGVydGllcy4gCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRfU1RBUlQgPSBCSURJX0NMQVNTOworICAgIC8qKiAKKyAgICAgKiBFbnVtZXJhdGVkIHByb3BlcnR5IEJsb2NrLgorICAgICAqIFNhbWUgYXMgVUNoYXJhY3Rlci5Vbmljb2RlQmxvY2sub2YoaW50KSwgcmV0dXJucyBVQ2hhcmFjdGVyLlVuaWNvZGVCbG9jayAKKyAgICAgKiB2YWx1ZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJMT0NLID0gMHgxMDAxOworICAgIC8qKiAKKyAgICAgKiBFbnVtZXJhdGVkIHByb3BlcnR5IENhbm9uaWNhbF9Db21iaW5pbmdfQ2xhc3MuCisgICAgICogU2FtZSBhcyBVQ2hhcmFjdGVyLmdldENvbWJpbmluZ0NsYXNzKGludCksIHJldHVybnMgOC1iaXQgbnVtZXJpYyB2YWx1ZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MgPSAweDEwMDI7CisgICAgLyoqIAorICAgICAqIEVudW1lcmF0ZWQgcHJvcGVydHkgRGVjb21wb3NpdGlvbl9UeXBlLgorICAgICAqIFJldHVybnMgVUNoYXJhY3Rlci5EZWNvbXBvc2l0aW9uVHlwZSB2YWx1ZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVDT01QT1NJVElPTl9UWVBFID0gMHgxMDAzOworICAgIC8qKiAKKyAgICAgKiBFbnVtZXJhdGVkIHByb3BlcnR5IEVhc3RfQXNpYW5fV2lkdGguCisgICAgICogU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjExLworICAgICAqIFJldHVybnMgVUNoYXJhY3Rlci5FYXN0QXNpYW5XaWR0aCB2YWx1ZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVBU1RfQVNJQU5fV0lEVEggPSAweDEwMDQ7CisgICAgLyoqIAorICAgICAqIEVudW1lcmF0ZWQgcHJvcGVydHkgR2VuZXJhbF9DYXRlZ29yeS4KKyAgICAgKiBTYW1lIGFzIFVDaGFyYWN0ZXIuZ2V0VHlwZShpbnQpLCByZXR1cm5zIFVDaGFyYWN0ZXJDYXRlZ29yeSB2YWx1ZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSQUxfQ0FURUdPUlkgPSAweDEwMDU7CisgICAgLyoqIAorICAgICAqIEVudW1lcmF0ZWQgcHJvcGVydHkgSm9pbmluZ19Hcm91cC4KKyAgICAgKiBSZXR1cm5zIFVDaGFyYWN0ZXIuSm9pbmluZ0dyb3VwIHZhbHVlcy4gCisgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSk9JTklOR19HUk9VUCA9IDB4MTAwNjsKKyAgICAvKiogCisgICAgICogRW51bWVyYXRlZCBwcm9wZXJ0eSBKb2luaW5nX1R5cGUuCisgICAgICogUmV0dXJucyBVQ2hhcmFjdGVyLkpvaW5pbmdUeXBlIHZhbHVlcy4gCisgICAgICogQGRyYWZ0IElDVSAyLjQgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSk9JTklOR19UWVBFID0gMHgxMDA3OworICAgIC8qKiAKKyAgICAgKiBFbnVtZXJhdGVkIHByb3BlcnR5IExpbmVfQnJlYWsuCisgICAgICogUmV0dXJucyBVQ2hhcmFjdGVyLkxpbmVCcmVhayB2YWx1ZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJTkVfQlJFQUsgPSAweDEwMDg7CisgICAgLyoqIAorICAgICAqIEVudW1lcmF0ZWQgcHJvcGVydHkgTnVtZXJpY19UeXBlLgorICAgICAqIFJldHVybnMgVUNoYXJhY3Rlci5OdW1lcmljVHlwZSB2YWx1ZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTUVSSUNfVFlQRSA9IDB4MTAwOTsKKyAgICAvKiogCisgICAgICogRW51bWVyYXRlZCBwcm9wZXJ0eSBTY3JpcHQuCisgICAgICogU2FtZSBhcyBVU2NyaXB0LmdldFNjcmlwdChpbnQpLCByZXR1cm5zIFVTY3JpcHQgdmFsdWVzLiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ1JJUFQgPSAweDEwMEE7CisgICAgLyoqIAorICAgICAqIE9uZSBtb3JlIHRoYW4gdGhlIGxhc3QgY29uc3RhbnQgZm9yIGVudW1lcmF0ZWQvaW50ZWdlciBVbmljb2RlIAorICAgICAqIHByb3BlcnRpZXMuIAorICAgICAqIEBkcmFmdCBJQ1UgMi40IAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVF9MSU1JVCA9IDB4MTAwQjsKKworICAgIC8qKgorICAgICAqIEZpcnN0IGNvbnN0YW50IGZvciBkb3VibGUgVW5pY29kZSBwcm9wZXJ0aWVzLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9VQkxFX1NUQVJUID0gMHgyMDAwOworICAgIC8qKgorICAgICAqIERvdWJsZSBwcm9wZXJ0eSBOdW1lcmljX1ZhbHVlLgorICAgICAqIENvcnJlc3BvbmRzIHRvIFVDaGFyYWN0ZXIuZ2V0VW5pY29kZU51bWVyaWNWYWx1ZShpbnQpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNRVJJQ19WQUxVRSA9IERPVUJMRV9TVEFSVDsKKyAgICAvKioKKyAgICAgKiBPbmUgbW9yZSB0aGFuIHRoZSBsYXN0IGNvbnN0YW50IGZvciBkb3VibGUgVW5pY29kZSBwcm9wZXJ0aWVzLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9VQkxFX0xJTUlUID0gMHgyMDAxOworCisgICAgLyoqCisgICAgICogRmlyc3QgY29uc3RhbnQgZm9yIHN0cmluZyBVbmljb2RlIHByb3BlcnRpZXMuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFJJTkdfU1RBUlQgPSAweDMwMDA7CisgICAgLyoqCisgICAgICogU3RyaW5nIHByb3BlcnR5IEFnZS4KKyAgICAgKiBDb3JyZXNwb25kcyB0byBVQ2hhcmFjdGVyLmdldEFnZShpbnQpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUdFID0gU1RSSU5HX1NUQVJUOworICAgIC8qKgorICAgICAqIFN0cmluZyBwcm9wZXJ0eSBCaWRpX01pcnJvcmluZ19HbHlwaC4KKyAgICAgKiBDb3JyZXNwb25kcyB0byBVQ2hhcmFjdGVyLmdldE1pcnJvcihpbnQpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklESV9NSVJST1JJTkdfR0xZUEggPSAweDMwMDE7CisgICAgLyoqCisgICAgICogU3RyaW5nIHByb3BlcnR5IENhc2VfRm9sZGluZy4KKyAgICAgKiBDb3JyZXNwb25kcyB0byBVQ2hhcmFjdGVyLmZvbGRDYXNlKFN0cmluZywgYm9vbGVhbikuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVNFX0ZPTERJTkcgPSAweDMwMDI7CisgICAgLyoqCisgICAgICogU3RyaW5nIHByb3BlcnR5IElTT19Db21tZW50LgorICAgICAqIENvcnJlc3BvbmRzIHRvIFVDaGFyYWN0ZXIuZ2V0SVNPQ29tbWVudChpbnQpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVNPX0NPTU1FTlQgPSAweDMwMDM7CisgICAgLyoqCisgICAgICogU3RyaW5nIHByb3BlcnR5IExvd2VyY2FzZV9NYXBwaW5nLgorICAgICAqIENvcnJlc3BvbmRzIHRvIFVDaGFyYWN0ZXIudG9Mb3dlckNhc2UoU3RyaW5nKS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPV0VSQ0FTRV9NQVBQSU5HID0gMHgzMDA0OworICAgIC8qKgorICAgICAqIFN0cmluZyBwcm9wZXJ0eSBOYW1lLgorICAgICAqIENvcnJlc3BvbmRzIHRvIFVDaGFyYWN0ZXIuZ2V0TmFtZShpbnQpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFNRSA9IDB4MzAwNTsKKyAgICAvKioKKyAgICAgKiBTdHJpbmcgcHJvcGVydHkgU2ltcGxlX0Nhc2VfRm9sZGluZy4KKyAgICAgKiBDb3JyZXNwb25kcyB0byBVQ2hhcmFjdGVyLmZvbGRDYXNlKGludCwgYm9vbGVhbikuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSU1QTEVfQ0FTRV9GT0xESU5HID0gMHgzMDA2OworICAgIC8qKgorICAgICAqIFN0cmluZyBwcm9wZXJ0eSBTaW1wbGVfTG93ZXJjYXNlX01hcHBpbmcuCisgICAgICogQ29ycmVzcG9uZHMgdG8gVUNoYXJhY3Rlci50b0xvd2VyQ2FzZShpbnQpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lNUExFX0xPV0VSQ0FTRV9NQVBQSU5HID0gMHgzMDA3OworICAgIC8qKgorICAgICAqIFN0cmluZyBwcm9wZXJ0eSBTaW1wbGVfVGl0bGVjYXNlX01hcHBpbmcuCisgICAgICogQ29ycmVzcG9uZHMgdG8gVUNoYXJhY3Rlci50b1RpdGxlQ2FzZShpbnQpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lNUExFX1RJVExFQ0FTRV9NQVBQSU5HID0gMHgzMDA4OworICAgIC8qKgorICAgICAqIFN0cmluZyBwcm9wZXJ0eSBTaW1wbGVfVXBwZXJjYXNlX01hcHBpbmcuCisgICAgICogQ29ycmVzcG9uZHMgdG8gVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShpbnQpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lNUExFX1VQUEVSQ0FTRV9NQVBQSU5HID0gMHgzMDA5OworICAgIC8qKgorICAgICAqIFN0cmluZyBwcm9wZXJ0eSBUaXRsZWNhc2VfTWFwcGluZy4KKyAgICAgKiBDb3JyZXNwb25kcyB0byBVQ2hhcmFjdGVyLnRvVGl0bGVDYXNlKFN0cmluZykuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSVRMRUNBU0VfTUFQUElORyA9IDB4MzAwQTsKKyAgICAvKioKKyAgICAgKiBTdHJpbmcgcHJvcGVydHkgVW5pY29kZV8xX05hbWUuCisgICAgICogQ29ycmVzcG9uZHMgdG8gVUNoYXJhY3Rlci5nZXROYW1lMV8wKGludCkuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklDT0RFXzFfTkFNRSA9IDB4MzAwQjsKKyAgICAvKioKKyAgICAgKiBTdHJpbmcgcHJvcGVydHkgVXBwZXJjYXNlX01hcHBpbmcuCisgICAgICogQ29ycmVzcG9uZHMgdG8gVUNoYXJhY3Rlci50b1VwcGVyQ2FzZShTdHJpbmcpLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVBQRVJDQVNFX01BUFBJTkcgPSAweDMwMEM7CisgICAgLyoqCisgICAgICogT25lIG1vcmUgdGhhbiB0aGUgbGFzdCBjb25zdGFudCBmb3Igc3RyaW5nIFVuaWNvZGUgcHJvcGVydGllcy4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUUklOR19MSU1JVCA9IDB4MzAwRDsKKworICAgIC8qKgorICAgICAqIFNlbGVjdG9yIGNvbnN0YW50cyBmb3IgVUNoYXJhY3Rlci5nZXRQcm9wZXJ0eU5hbWUoKSBhbmQKKyAgICAgKiBVQ2hhcmFjdGVyLmdldFByb3BlcnR5VmFsdWVOYW1lKCkuICBUaGVzZSBzZWxlY3RvcnMgYXJlIHVzZWQgdG8KKyAgICAgKiBjaG9vc2Ugd2hpY2ggbmFtZSBpcyByZXR1cm5lZCBmb3IgYSBnaXZlbiBwcm9wZXJ0eSBvciB2YWx1ZS4KKyAgICAgKiBBbGwgcHJvcGVydGllcyBhbmQgdmFsdWVzIGhhdmUgYSBsb25nIG5hbWUuICBNb3N0IGhhdmUgYSBzaG9ydAorICAgICAqIG5hbWUsIGJ1dCBzb21lIGRvIG5vdC4gIFVuaWNvZGUgYWxsb3dzIGZvciBhZGRpdGlvbmFsIG5hbWVzLAorICAgICAqIGJleW9uZCB0aGUgbG9uZyBhbmQgc2hvcnQgbmFtZSwgd2hpY2ggd291bGQgYmUgaW5kaWNhdGVkIGJ5CisgICAgICogTE9ORyArIGksIHdoZXJlIGk9MSwgMiwuLi4KKyAgICAgKgorICAgICAqIEBzZWUgVUNoYXJhY3RlciNnZXRQcm9wZXJ0eU5hbWUKKyAgICAgKiBAc2VlIFVDaGFyYWN0ZXIjZ2V0UHJvcGVydHlWYWx1ZU5hbWUKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBpbnRlcmZhY2UgTmFtZUNob2ljZSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZWxlY3RvciBmb3IgdGhlIGFiYnJldmlhdGVkIG5hbWUgb2YgYSBwcm9wZXJ0eSBvciB2YWx1ZS4KKyAgICAgICAgICogTW9zdCBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgaGF2ZSBhIHNob3J0IG5hbWU7IHRob3NlIHRoYXQgZG8KKyAgICAgICAgICogbm90IHJldHVybiBudWxsLgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgc3RhdGljIGZpbmFsIGludCBTSE9SVCA9IDA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNlbGVjdG9yIGZvciB0aGUgbG9uZyBuYW1lIG9mIGEgcHJvcGVydHkgb3IgdmFsdWUuICBBbGwKKyAgICAgICAgICogcHJvcGVydGllcyBhbmQgdmFsdWVzIGhhdmUgYSBsb25nIG5hbWUuCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBzdGF0aWMgZmluYWwgaW50IExPTkcgPSAxOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHByZWRlZmluZWQgcHJvcGVydHkgbmFtZSBjaG9pY2VzLiAgSW5kaXZpZHVhbAorICAgICAgICAgKiBwcm9wZXJ0aWVzIG9yIHZhbHVlcyBtYXkgaGF2ZSBtb3JlIHRoYW4gQ09VTlQgYWxpYXNlcy4KKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgQ09VTlQgPSAyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9sYW5nL1VTY3JpcHQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS9sYW5nL1VTY3JpcHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOTQ3Nzg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L2xhbmcvVVNjcmlwdC5qYXZhCkBAIC0wLDAgKzEsMzg4IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UubGFuZzsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlRGF0YTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkxvY2FsZVV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyUHJvcGVydHk7CisKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworCisvKioKKyAqIEEgY2xhc3MgdG8gcmVmbGVjdCBVVFIgIzI0OiBTY3JpcHQgTmFtZXMKKyAqIChiYXNlZCBvbiBJU08gMTU5MjQ6MjAwMCwgIkNvZGUgZm9yIHRoZSByZXByZXNlbnRhdGlvbiBvZiBuYW1lcyBvZgorICogc2NyaXB0cyIpLiAgVVRSICMyNCBkZXNjcmliZXMgdGhlIGJhc2lzIGZvciBhIG5ldyBVbmljb2RlIGRhdGEgZmlsZSwKKyAqIFNjcmlwdHMudHh0LgorICogQHN0YWJsZSBJQ1UgMi40CisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBVU2NyaXB0IHsKKyAgICAvKioKKyAgICAgKiBQdXRzIGEgY29weXJpZ2h0IGluIHRoZSAuY2xhc3MgZmlsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHROb3RpY2UKKyAgICAgICAgPSAiQ29weXJpZ2h0IFx1MDBhOTIwMDEgSUJNIENvcnAuICBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisgICAgCisgICAgLyoqCisgICAgICogSW52YWxpZCBjb2RlCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVkFMSURfQ09ERSA9IC0xOworICAgIC8qKgorICAgICAqIENvbW1vbgorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1PTiAgICAgICA9ICAwOyAgLyogWnl5eSAqLworICAgIC8qKgorICAgICAqIEluaGVyaXRlZAorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSEVSSVRFRCAgICA9ICAxOyAgLyogUWFhaSAqLworICAgIC8qKgorICAgICAqIEFyYWJpYworICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFSQUJJQyAgICAgICA9ICAyOyAgLyogQXJhYiAqLworICAgIC8qKgorICAgICAqIEFybWVuaWFuCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVJNRU5JQU4gICAgID0gIDM7ICAvKiBBcm1uICovCisgICAgLyoqCisgICAgICogQmVuZ2FsaQorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJFTkdBTEkgICAgICA9ICA0OyAgLyogQmVuZyAqLworICAgIC8qKgorICAgICAqIEJvcG9tb2ZvCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQk9QT01PRk8gICAgID0gIDU7ICAvKiBCb3BvICovCisgICAgLyoqCisgICAgICogQ2hlcm9rZWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDSEVST0tFRSAgICAgPSAgNjsgIC8qIENoZXIgKi8KKyAgICAvKioKKyAgICAgKiBDb3B0aWMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1BUSUMgICAgICAgPSAgNzsgIC8qIFFhYWMgKi8KKyAgICAvKioKKyAgICAgKiBDeXJpbGxpYworICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENZUklMTElDICAgICA9ICA4OyAgLyogQ3lybCAoQ3lycykgKi8KKyAgICAvKioKKyAgICAgKiBEZXNlcmV0CisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTRVJFVCAgICAgID0gIDk7ICAvKiBEc3J0ICovCisgICAgLyoqCisgICAgICogRGV2YW5hZ2FyaQorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVkFOQUdBUkkgICA9IDEwOyAgLyogRGV2YSAqLworICAgIC8qKgorICAgICAqIEV0aGlvcGljCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVRISU9QSUMgICAgID0gMTE7ICAvKiBFdGhpICovCisgICAgLyoqCisgICAgICogR2VvcmdpYW4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU9SR0lBTiAgICAgPSAxMjsgIC8qIEdlb3IgKEdlb247IEdlb2EpICovCisgICAgLyoqCisgICAgICogR290aGljCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR09USElDICAgICAgID0gMTM7ICAvKiBHb3RoICovCisgICAgLyoqCisgICAgICogR3JlZWsKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVFSyAgICAgICAgPSAxNDsgIC8qIEdyZWsgKi8KKyAgICAvKioKKyAgICAgKiBHdWphcmF0aQorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVSkFSQVRJICAgICA9IDE1OyAgLyogR3VqciAqLworICAgIC8qKgorICAgICAqIEd1cm11a2hpCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VSTVVLSEkgICAgID0gMTY7ICAvKiBHdXJ1ICovCisgICAgLyoqCisgICAgICogSGFuCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEFOICAgICAgICAgID0gMTc7ICAvKiBIYW5pICovCisgICAgLyoqCisgICAgICogSGFuZ3VsCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEFOR1VMICAgICAgID0gMTg7ICAvKiBIYW5nICovCisgICAgLyoqCisgICAgICogSGVicmV3CisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEVCUkVXICAgICAgID0gMTk7ICAvKiBIZWJyICovCisgICAgLyoqCisgICAgICogSGlyYWdhbmEKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBISVJBR0FOQSAgICAgPSAyMDsgIC8qIEhpcmEgKi8KKyAgICAvKioKKyAgICAgKiBLYW5uYWRhCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0FOTkFEQSAgICAgID0gMjE7ICAvKiBLbmRhICovCisgICAgLyoqCisgICAgICogS2F0YWthbmEKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLQVRBS0FOQSAgICAgPSAyMjsgIC8qIEthbmEgKi8KKyAgICAvKioKKyAgICAgKiBLaG1lcgorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtITUVSICAgICAgICA9IDIzOyAgLyogS2htciAqLworICAgIC8qKgorICAgICAqIExhbworICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExBTyAgICAgICAgICA9IDI0OyAgLyogTGFvbyAqLworICAgIC8qKgorICAgICAqIExhdGluCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFUSU4gICAgICAgID0gMjU7ICAvKiBMYXRuIChMYXRmOyBMYXRnKSAqLworICAgIC8qKgorICAgICAqIE1hbGF5YWxhbQorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BTEFZQUxBTSAgICA9IDI2OyAgLyogTWx5bSAqLworICAgIC8qKgorICAgICAqIE1hbmdvbGlhbgorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PTkdPTElBTiAgICA9IDI3OyAgLyogTW9uZyAqLworICAgIC8qKgorICAgICAqIE15YW1tYXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNWUFOTUFSICAgICAgPSAyODsgIC8qIE15bXIgKi8KKyAgICAvKioKKyAgICAgKiBPZ2hhbQorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9HSEFNICAgICAgICA9IDI5OyAgLyogT2dhbSAqLworICAgIC8qKgorICAgICAqIE9sZCBJdGFsbGljCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0xEX0lUQUxJQyAgID0gMzA7ICAvKiBJdGFsICovCisgICAgLyoqCisgICAgICogT3JpeWEKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUklZQSAgICAgICAgPSAzMTsgIC8qIE9yeWEgKi8KKyAgICAvKioKKyAgICAgKiBSdW5pYworICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJVTklDICAgICAgICA9IDMyOyAgLyogUnVuciAqLworICAgIC8qKgorICAgICAqIFNpbmhhbGEKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSU5IQUxBICAgICAgPSAzMzsgIC8qIFNpbmggKi8KKyAgICAvKioKKyAgICAgKiBTeXJpYWMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTWVJJQUMgICAgICAgPSAzNDsgIC8qIFN5cmMgKFN5cmo7IFN5cm47IFN5cmUpICovCisgICAgLyoqCisgICAgICogVGFtaWwKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUQU1JTCAgICAgICAgPSAzNTsgIC8qIFRhbWwgKi8KKyAgICAvKioKKyAgICAgKiBUZWx1Z3UKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURUxVR1UgICAgICAgPSAzNjsgIC8qIFRlbHUgKi8KKyAgICAvKioKKyAgICAgKiBUaGFuYQorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRIQUFOQSAgICAgICA9IDM3OyAgLyogVGhhYSAqLworICAgIC8qKgorICAgICAqIFRoYWkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSEFJICAgICAgICAgPSAzODsgIC8qIFRoYWkgKi8KKyAgICAvKioKKyAgICAgKiBUaWJldGFuCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElCRVRBTiAgICAgID0gMzk7ICAvKiBUaWJ0ICovCisgICAgLyoqCisgICAgICogVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bWJvbHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQ0FTICAgICAgICAgPSA0MDsgIC8qIENhbnMgKi8KKyAgICAvKioKKyAgICAgKiBZaSBzeWxsYWJsZXMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZSSAgICAgICAgICAgPSA0MTsgIC8qIFlpaWkgKi8KKyAgICAvKioKKyAgICAgKiBUYWdhbG9nCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFHQUxPRyAgICAgID0gNDI7ICAvKiBUZ2xnICovCisgICAgLyoqCisgICAgICogSGFudW5vb28KKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIQU5VTk9PICAgICAgPSA0MzsgIC8qIEhhbm8gKi8KKyAgICAvKioKKyAgICAgKiBCdWhpZAorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJVSElEICAgICAgICA9IDQ0OyAgLyogQnVoZCAqLworICAgIC8qKgorICAgICAqIFRhZ2JhbndhCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFHQkFOV0EgICAgID0gNDU7ICAvKiBUYWdiICovCisgICAgLyoqCisgICAgICogTGltaXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0RFX0xJTUlUICAgPSA0NjsgCisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUklQVF9NQVNLICAgPSAweDAwMDAwMDdmOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFVDaGFyYWN0ZXJQcm9wZXJ0eSBwcm9wPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0SW5zdGFuY2UoKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29kZSBmcm9tIGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gTG9jYWxlIHRoZSBsb2NhbGUuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gZmluZENvZGVGcm9tTG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKKworICAgICAgICBSZXNvdXJjZUJ1bmRsZSByYiA9IElDVUxvY2FsZURhdGEuZ2V0TG9jYWxlRWxlbWVudHMobG9jYWxlKTsKKworICAgICAgICAvLyBpZiByYiBpcyBub3QgYSBzdHJpY3QgZmFsbGJhY2sgb2YgdGhlIHJlcXVlc3RlZCBsb2NhbGUsIHJldHVybiBudWxsCisgICAgICAgIGlmIChyYj09bnVsbCB8fCAhTG9jYWxlVXRpbGl0eS5pc0ZhbGxiYWNrT2YocmIuZ2V0TG9jYWxlKCksIGxvY2FsZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nW10gc2NyaXB0cyA9IHJiLmdldFN0cmluZ0FycmF5KCJMb2NhbGVTY3JpcHQiKTsKKyAgICAgICAgaW50W10gcmVzdWx0ID0gbmV3IGludFtzY3JpcHRzLmxlbmd0aF07CisgICAgICAgIGludCB3ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgIGludCBjb2RlID0gVUNoYXJhY3Rlci5nZXRQcm9wZXJ0eVZhbHVlRW51bShVUHJvcGVydHkuU0NSSVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzW2ldKTsKKyAgICAgICAgICAgICAgcmVzdWx0W3crK10gPSBjb2RlOworICAgICAgICAgICAgCisgICAgICAgIH0KKworICAgICAgICBpZiAodyA8IHJlc3VsdC5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJiYWQgbG9jYWxlIGRhdGEsIGxpc3RlZCAiICsgc2NyaXB0cy5sZW5ndGggKyAiIHNjcmlwdHMgYnV0IGZvdW5kIG9ubHkgIiArIHcpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc2NyaXB0IGNvZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbG9jYWxlIG9yIElTTyAxNTkyNCBhYmJyZXZpYXRpb24gb3IgbmFtZS4gCisgICAgICogUmV0dXJucyBNQUxBWUFNIGdpdmVuICJNYWxheWFtIiBPUiAiTWx5bSIuCisgICAgICogUmV0dXJucyBMQVRJTiBnaXZlbiAiZW4iIE9SICJlbl9VUyIgCisgICAgICogQHBhcmFtIGxvY2FsZSBMb2NhbGUKKyAgICAgKiBAcmV0dXJuIFRoZSBzY3JpcHQgY29kZXMgYXJyYXkuIG51bGwgaWYgdGhlIHRoZSBjb2RlIGNhbm5vdCBiZSBmb3VuZC4gCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSBnZXRDb2RlKExvY2FsZSBsb2NhbGUpeworICAgICAgICByZXR1cm4gZmluZENvZGVGcm9tTG9jYWxlKGxvY2FsZSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgYSBzY3JpcHQgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBsb2NhbGUgb3IgSVNPIDE1OTI0IGFiYnJldmlhdGlvbiBvciBuYW1lLiAKKyAgICAgKiBSZXR1cm5zIE1BTEFZQU0gZ2l2ZW4gIk1hbGF5YW0iIE9SICJNbHltIi4KKyAgICAgKiBSZXR1cm5zIExBVElOIGdpdmVuICJlbiIgT1IgImVuX1VTIiAKKyAgICAgKgorICAgICAqIDxwPk5vdGU6IFRvIHNlYXJjaCBieSBzaG9ydCBvciBsb25nIHNjcmlwdCBhbGlhcyBvbmx5LCB1c2UKKyAgICAgKiBVQ2hhcmFjYXRlci5nZXRQcm9wZXJ0eVZhbHVlRW51bShVUHJvcGVydHkuU0NSSVBULCBhbGlhcykKKyAgICAgKiBpbnN0ZWFkLiAgVGhpcyBkb2VzIGEgZmFzdCBsb29rdXAgd2l0aCBubyBhY2Nlc3Mgb2YgdGhlIGxvY2FsZQorICAgICAqIGRhdGEuCisgICAgICogQHBhcmFtIG5hbWVPckFiYnJPckxvY2FsZSBuYW1lIG9mIHRoZSBzY3JpcHQgb3IgSVNPIDE1OTI0IGNvZGUgb3IgbG9jYWxlCisgICAgICogQHJldHVybiBUaGUgc2NyaXB0IGNvZGVzIGFycmF5LiBudWxsIGlmIHRoZSB0aGUgY29kZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSBnZXRDb2RlKFN0cmluZyBuYW1lT3JBYmJyT3JMb2NhbGUpeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5nZXRQcm9wZXJ0eVZhbHVlRW51bShVUHJvcGVydHkuU0NSSVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZU9yQWJick9yTG9jYWxlKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmaW5kQ29kZUZyb21Mb2NhbGUoTG9jYWxlVXRpbGl0eS5nZXRMb2NhbGVGcm9tTmFtZShuYW1lT3JBYmJyT3JMb2NhbGUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiAKKyAgICAgKiBHZXRzIHRoZSBzY3JpcHQgY29kZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvZGVwb2ludC4KKyAgICAgKiBSZXR1cm5zIFVTY3JpcHQuTUFMQVlBTSBnaXZlbiAweDBEMDIgCisgICAgICogQHBhcmFtIGNvZGVwb2ludCBVQ2hhcjMyIGNvZGVwb2ludAorICAgICAqIEByZXR1cm4gVGhlIHNjcmlwdCBjb2RlIAorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGdldFNjcmlwdChpbnQgY29kZXBvaW50KXsKKyAgICAgICAgaWYgKGNvZGVwb2ludCA+PSBVQ2hhcmFjdGVyLk1JTl9WQUxVRSAmIGNvZGVwb2ludCA8PSBVQ2hhcmFjdGVyLk1BWF9WQUxVRSkgeworICAgICAgICAgICAgcmV0dXJuIChpbnQpKHByb3AuZ2V0QWRkaXRpb25hbChjb2RlcG9pbnQsMCkgJiBTQ1JJUFRfTUFTSyk7CisgICAgICAgIH1lbHNleworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihJbnRlZ2VyLnRvU3RyaW5nKGNvZGVwb2ludCkpOworICAgICAgICB9IAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc2NyaXB0IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBzY3JpcHQgY29kZS4gCisgICAgICogUmV0dXJucyAgIk1hbGF5YW0iIGdpdmVuIE1BTEFZQU0KKyAgICAgKiBAcGFyYW0gc2NyaXB0Q29kZSBpbnQgc2NyaXB0IGNvZGUKKyAgICAgKiBAcmV0dXJuIHNjcmlwdCBuYW1lIGFzIGEgc3RyaW5nIGluIGZ1bGwgYXMgZ2l2ZW4gaW4gVFIjMjQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXROYW1lKGludCBzY3JpcHRDb2RlKXsKKyAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXIuZ2V0UHJvcGVydHlWYWx1ZU5hbWUoVVByb3BlcnR5LlNDUklQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVByb3BlcnR5Lk5hbWVDaG9pY2UuTE9ORyk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgYSBzY3JpcHQgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHNjcmlwdCBjb2RlLiAKKyAgICAgKiBSZXR1cm5zICAiTWx5bSIgZ2l2ZW4gTUFMQVlBTQorICAgICAqIEBwYXJhbSBzY3JpcHRDb2RlIGludCBzY3JpcHQgY29kZSAKKyAgICAgKiBAcmV0dXJuIHNjcmlwdCBhYmJyZXZpYXRlZCBuYW1lIGFzIGEgc3RyaW5nICBhcyBnaXZlbiBpbiBUUiMyNAorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldFNob3J0TmFtZShpbnQgc2NyaXB0Q29kZSl7CisgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyLmdldFByb3BlcnR5VmFsdWVOYW1lKFVQcm9wZXJ0eS5TQ1JJUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdENvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQcm9wZXJ0eS5OYW1lQ2hvaWNlLlNIT1JUKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogIFByaXZhdGUgQ29uc3RydWN0b3IuIE5ldmVyIGRlZmF1bHQgY29uc3RydWN0CisgICAgICovCisgICAgcHJpdmF0ZSBVU2NyaXB0KCl7fQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvbGFuZy9VU2NyaXB0UnVuLmphdmEgYi9zcmMvY29tL2libS9pY3UvbGFuZy9VU2NyaXB0UnVuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhOTQzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9sYW5nL1VTY3JpcHRSdW4uamF2YQpAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UubGFuZzsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVUNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvcjsKKworLyoqCisgKiA8Y29kZT5VU2NyaXB0UnVuPC9jb2RlPiBpcyB1c2VkIHRvIGZpbmQgcnVucyBvZiBjaGFyYWN0ZXJzIGluCisgKiB0aGUgc2FtZSBzY3JpcHQsIGFzIGRlZmluZWQgaW4gdGhlIDxjb2RlPlVTY3JpcHQ8L2NvZGU+IGNsYXNzLgorICogSXQgaW1wbGVtZW50cyBhIHNpbXBsZSBpdGVyYXRvciBvdmVyIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMuCisgKiBUaGUgaXRlcmF0b3Igd2lsbCBhc3NpZ24gPGNvZGU+Q09NTU9OPC9jb2RlPiBhbmQgPGNvZGU+SU5IRVJJVEVEPC9jb2RlPgorICogY2hhcmFjdGVycyB0byB0aGUgc2FtZSBzY3JpcHQgYXMgdGhlIHByZWNlZWRpbmcgY2hhcmFjdGVycy4gSWYgdGhlCisgKiBDT01NT04gYW5kIElOSEVSSVRFRCBjaGFyYWN0ZXJzIGFyZSBmaXJzdCwgdGhleSB3aWxsIGJlIGFzc2lnbmVkIHRvCisgKiB0aGUgc2FtZSBzY3JpcHQgYXMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzLgorICoKKyAqIFRoZSBpdGVyYXRvciB3aWxsIHRyeSB0byBtYXRjaCBwYWlyZWQgcHVuY3R1YXRpb24uIElmIGl0IHNlZXMgYW4KKyAqIG9wZW5pbmcgcHVuY3R1YXRpb24gY2hhcmFjdGVyLCBpdCB3aWxsIHJlbWVtYmVyIHRoZSBzY3JpcHQgdGhhdAorICogd2FzIGFzc2lnbmVkIHRvIHRoYXQgY2hhcmFjdGVyLCBhbmQgYXNzaWduIHRoZSBzYW1lIHNjcmlwdCB0byB0aGUKKyAqIG1hdGNoaW5nIGNsb3NpbmcgcHVuY3R1YXRpb24uCisgKgorICogTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGNvbWJpbmUgcmVsYXRlZCBzY3JpcHRzIGludG8gYSBzaW5nbGUgcnVuLiBJbgorICogcGFydGljdWxhciwgSGlyYWdhbmEsIEthdGFrYW5hLCBhbmQgSGFuIGNoYXJhY3RlcnMgd2lsbCBhcHBlYXIgaW4gc2VwZXJhdGUKKyAqIHJ1bnMuCisKKyAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gaXRlcmF0ZSBvdmVyIHNjcmlwdCBydW5zOgorICogPHByZT4KKyAqIHZvaWQgcHJpbnRTY3JpcHRSdW5zKGNoYXJbXSB0ZXh0KQorICogeworICogICAgIFVTY3JpcHRSdW4gc2NyaXB0UnVuID0gbmV3IFVTY3JpcHRSdW4odGV4dCk7CisgKgorICogICAgIHdoaWxlIChzY3JpcHRSdW4ubmV4dCgpKSB7CisgKiAgICAgICAgIGludCBzdGFydCAgPSBzY3JpcHRSdW4uZ2V0U2NyaXB0U3RhcnQoKTsKKyAqICAgICAgICAgaW50IGxpbWl0ICA9IHNjcmlwdFJ1bi5nZXRTY3JpcHRMaW1pdCgpOworICogICAgICAgICBpbnQgc2NyaXB0ID0gc2NyaXB0UnVuLmdldFNjcmlwdENvZGUoKTsKKyAqCisgKiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2NyaXB0IFwiIiArIFVTY3JpcHQuZ2V0TmFtZShzY3JpcHQpICsgIlwiIGZyb20gIiArCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArICIgdG8gIiArIGxpbWl0ICsgIi4iKTsKKyAqICAgICB9CisgKiAgfQorICogPC9wcmU+CisgKgorICogQGludGVybmFsCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBVU2NyaXB0UnVuCit7CisgICAgLyoqCisgICAgICogUHV0cyBhIGNvcHlyaWdodCBpbiB0aGUgLmNsYXNzIGZpbGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0Tm90aWNlCisgICAgICAgID0gIkNvcHlyaWdodCBcdTAwYTkxOTk5LTIwMDIgSUJNIENvcnAuICBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYW4gZW1wdHkgPGNvZGU+VVNjcmlwdFJ1bjwvY29kZT4gb2JqZWN0LiBUaGUgPGNvZGU+bmV4dCgpPC9jb2RlPgorICAgICAqIG1ldGhvZCB3aWxsIHJldHVybiA8Y29kZT5mYWxzZTwvY29kZT4gdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLgorICAgICAqCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgcHVibGljIFVTY3JpcHRSdW4oKQorICAgIHsKKyAgICAgICAgY2hhcltdIG51bGxDaGFycyA9IG51bGw7CisgICAgICAgIAorICAgICAgICByZXNldChudWxsQ2hhcnMsIDAsIDApOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSA8Y29kZT5VU2NyaXB0UnVuPC9jb2RlPiBvYmplY3Qgd2hpY2ggaXRlcmF0ZXMgb3ZlciB0aGUKKyAgICAgKiBjaGFyYWN0ZXJzIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGV4dCB0aGUgc3RyaW5nIG9mIGNoYXJhY3RlcnMgb3ZlciB3aGljaCB0byBpdGVyYXRlLgorICAgICAqCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgcHVibGljIFVTY3JpcHRSdW4oU3RyaW5nIHRleHQpCisgICAgeworICAgICAgICByZXNldCAodGV4dCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIDxjb2RlPlVTY3JpcHRSdW48L2NvZGU+IG9iamVjdCB3aGljaCBpdGVyYXRlcyBvdmVyIGEgc3VicmFuZ2UKKyAgICAgKiBvZiB0aGUgY2hhcmFjZXRycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIHRleHQgdGhlIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG92ZXIgd2hpY2ggdG8gaXRlcmF0ZS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb3ZlciB3aGljaCB0byBpdGVyYXRlCisgICAgICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUKKyAgICAgKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIHB1YmxpYyBVU2NyaXB0UnVuKFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQsIGludCBjb3VudCkKKyAgICB7CisgICAgICAgIHJlc2V0KHRleHQsIHN0YXJ0LCBjb3VudCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgPGNvZGU+VVNjcmlwdFJ1bjwvY29kZT4gb2JqZWN0IHdoaWNoIGl0ZXJhdGVzIG92ZXIgdGhlIGdpdmVuCisgICAgICogY2hhcmFjZXRycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjaGFycyB0aGUgYXJyYXkgb2YgY2hhcmFjdGVycyBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUuCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgVVNjcmlwdFJ1bihjaGFyW10gY2hhcnMpCisgICAgeworICAgICAgICByZXNldChjaGFycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgPGNvZGU+VVNjcmlwdFJ1bjwvY29kZT4gb2JqZWN0IHdoaWNoIGl0ZXJhdGVzIG92ZXIgYSBzdWJyYW5nZQorICAgICAqIG9mIHRoZSBnaXZlbiBjaGFyYWNldHJzLgorICAgICAqCisgICAgICogQHBhcmFtIGNoYXJzIHRoZSBhcnJheSBvZiBjaGFyYWN0ZXJzIG92ZXIgd2hpY2ggdG8gaXRlcmF0ZS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb3ZlciB3aGljaCB0byBpdGVyYXRlCisgICAgICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUKKyAgICAgKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIHB1YmxpYyBVU2NyaXB0UnVuKGNoYXJbXSBjaGFycywgaW50IHN0YXJ0LCBpbnQgY291bnQpCisgICAgeworICAgICAgICByZXNldChjaGFycywgc3RhcnQsIGNvdW50KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFJlc2V0IHRoZSBpdGVyYXRvciB0byB0aGUgc3RhcnQgb2YgdGhlIHRleHQuCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCByZXNldCgpCisgICAgeworICAgICAgICBzY3JpcHRTdGFydCA9IHRleHRTdGFydDsKKyAgICAgICAgc2NyaXB0TGltaXQgPSB0ZXh0U3RhcnQ7CisgICAgICAgIHNjcmlwdENvZGUgID0gVVNjcmlwdC5JTlZBTElEX0NPREU7CisgICAgICAgIHBhcmVuU1AgICAgID0gLTE7CisgICAgICAgIAorICAgICAgICB0ZXh0LnNldFRvU3RhcnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgaXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIHRoZSBnaXZlbiByYW5nZSBvZiB0aGUgdGV4dC4gVGhyb3dzCisgICAgICogSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSByYW5nZSBpcyBvdXRzaWRlIG9mIHRoZSBib3VuZHMgb2YgdGhlCisgICAgICogY2hhcmFjdGVyIGFycmF5LgorICAgICAqCisgICAgICogQHBhcmFtIHN0YXJ0IHRoZSBpbmRleCBvZiB0aGUgbmV3IGZpcnN0IGNoYXJhY3RlciBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUKKyAgICAgKiBAcGFyYW0gY291bnQgdGhlIG5ldyBudW1iZXIgb2YgY2hhcmFjdGVycyBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKyAgICAgKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlc2V0KGludCBzdGFydCwgaW50IGNvdW50KQorICAgIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGludCBsZW4gPSAwOworICAgICAgICAKKyAgICAgICAgaWYgKHRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgbGVuID0gdGV4dC5nZXRMZW5ndGgoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCB8fCBjb3VudCA8IDAgfHwgc3RhcnQgPiBsZW4gLSBjb3VudCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZXh0U3RhcnQgPSBzdGFydDsKKyAgICAgICAgdGV4dExpbWl0ID0gc3RhcnQgKyBjb3VudDsKKworICAgICAgICByZXNldCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc2V0IHRoZSBpdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgPGNvZGU+Y291bnQ8L2NvZGU+IGNoYXJhY3RlcnMKKyAgICAgKiBpbiA8Y29kZT5jaGFyczwvY29kZT4gc3RhcnRpbmcgYXQgPGNvZGU+c3RhcnQ8L2NvZGU+LiBUaGlzIGFsbG93cworICAgICAqIGNsaWVudHMgdG8gcmV1c2UgYW4gaXRlcmF0b3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2hhcnMgdGhlIG5ldyBhcnJheSBvZiBjaGFyYWN0ZXJzIG92ZXIgd2hpY2ggdG8gaXRlcmF0ZS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb3ZlciB3aGljaCB0byBpdGVyYXRlLgorICAgICAqIEBwYXJhbSBjb3VudCB0aGUgbnViZXIgb2YgY2hhcmFjdGVycyBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUuCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCByZXNldChjaGFyW10gY2hhcnMsIGludCBzdGFydCwgaW50IGNvdW50KQorICAgIHsKKyAgICAgICAgaWYgKGNoYXJzID09IG51bGwpIHsKKyAgICAgICAgICAgIGNoYXJzID0gZW1wdHlDaGFyQXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRleHQgPSBVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2UoY2hhcnMsIHN0YXJ0LCBzdGFydCArIGNvdW50KTsKKworICAgICAgICByZXNldChzdGFydCwgY291bnQpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgaXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIHRoZSBjaGFyYWN0ZXJzCisgICAgICogaW4gPGNvZGU+Y2hhcnM8L2NvZGU+LiBUaGlzIGFsbG93cyBjbGllbnRzIHRvIHJldXNlIGFuIGl0ZXJhdG9yLgorICAgICAqCisgICAgICogQHBhcmFtIGNoYXJzIHRoZSBuZXcgYXJyYXkgb2YgY2hhcmFjdGVycyBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUuCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCByZXNldChjaGFyW10gY2hhcnMpCisgICAgeworICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICAgICAgCisgICAgICAgIGlmIChjaGFycyAhPSBudWxsKSB7CisgICAgICAgICAgICBsZW5ndGggPSBjaGFycy5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc2V0KGNoYXJzLCAwLCBsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgaXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIDxjb2RlPmNvdW50PC9jb2RlPiBjaGFyYWN0ZXJzCisgICAgICogaW4gPGNvZGU+dGV4dDwvY29kZT4gc3RhcnRpbmcgYXQgPGNvZGU+c3RhcnQ8L2NvZGU+LiBUaGlzIGFsbG93cworICAgICAqIGNsaWVudHMgdG8gcmV1c2UgYW4gaXRlcmF0b3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGV4dCB0aGUgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIG92ZXIgd2hpY2ggdG8gaXRlcmF0ZS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb3ZlciB3aGljaCB0byBpdGVyYXRlLgorICAgICAqIEBwYXJhbSBjb3VudCB0aGUgbnViZXIgb2YgY2hhcmFjdGVycyBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUuCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCByZXNldChTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBpbnQgY291bnQpCisgICAgeworICAgICAgICBjaGFyW10gY2hhcnMgPSBudWxsOworICAgICAgICAKKyAgICAgICAgaWYgKHRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgY2hhcnMgPSB0ZXh0LnRvQ2hhckFycmF5KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc2V0KGNoYXJzLCBzdGFydCwgY291bnQpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgaXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIHRoZSBjaGFyYWN0ZXJzCisgICAgICogaW4gPGNvZGU+dGV4dDwvY29kZT4uIFRoaXMgYWxsb3dzIGNsaWVudHMgdG8gcmV1c2UgYW4gaXRlcmF0b3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGV4dCB0aGUgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIG92ZXIgd2hpY2ggdG8gaXRlcmF0ZS4KKyAgICAgKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlc2V0KFN0cmluZyB0ZXh0KQorICAgIHsKKyAgICAgICAgaW50IGxlbmd0aCAgID0gMDsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc2V0KHRleHQsIDAsIGxlbmd0aCk7CisgICAgfQorICAgICAgICAKKworCisgICAgLyoqCisgICAgICogR2V0IHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgorICAgICAqCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBnZXRTY3JpcHRTdGFydCgpCisgICAgeworICAgICAgICByZXR1cm4gc2NyaXB0U3RhcnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldFNjcmlwdExpbWl0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBzY3JpcHRMaW1pdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHNjcmlwdCBjb2RlIGZvciB0aGUgc2NyaXB0IG9mIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBzY3JpcHQgY29kZSBmb3IgdGhlIHNjcmlwdCBvZiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgorICAgICAqIEBzZWUgY29tLmlibS5pY3UubGFuZy5VU2NyaXB0CisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldFNjcmlwdENvZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNjcmlwdENvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZCB0aGUgbmV4dCBzY3JpcHQgcnVuLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB0aGVyZQorICAgICAqIGlzbid0IGFub3RoZXIgcnVuLCByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZXJlIGlzLgorICAgICAqCisgICAgICogQHJldHVybiA8Y29kZT5mYWxzZTwvY29kZT4gaWYgdGhlcmUgaXNuJ3QgYW5vdGhlciBydW4sIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZXJlIGlzLgorICAgICAqCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gbmV4dCgpCisJeworCQlpbnQgc3RhcnRTUCAgPSBwYXJlblNQOyAgLy8gdXNlZCB0byBmaW5kIHRoZSBmaXJzdCBuZXcgb3BlbiBjaGFyYWN0ZXIKKworCQkvLyBpZiB3ZSd2ZSBmYWxsZW4gb2ZmIHRoZSBlbmQgb2YgdGhlIHRleHQsIHdlJ3JlIGRvbmUKKwkJaWYgKHNjcmlwdExpbWl0ID49IHRleHRMaW1pdCkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisgICAgCisJCXNjcmlwdENvZGUgID0gVVNjcmlwdC5DT01NT047CisgICAgICAgIHNjcmlwdFN0YXJ0ID0gc2NyaXB0TGltaXQ7CisgICAgICAgIAorICAgICAgICBpbnQgY2g7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoKGNoID0gdGV4dC5uZXh0Q29kZVBvaW50KCkpICE9IFVGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworCQkJaW50IHNjID0gVVNjcmlwdC5nZXRTY3JpcHQoY2gpOworCQkJaW50IHBhaXJJbmRleCA9IGdldFBhaXJJbmRleChjaCk7CisKKwkJCS8vIFBhaXJlZCBjaGFyYWN0ZXIgaGFuZGxpbmc6CisJCQkvLworCQkJLy8gaWYgaXQncyBhbiBvcGVuIGNoYXJhY3RlciwgcHVzaCBpdCBvbnRvIHRoZSBzdGFjay4KKwkJCS8vIGlmIGl0J3MgYSBjbG9zZSBjaGFyYWN0ZXIsIGZpbmQgdGhlIG1hdGNoaW5nIG9wZW4gb24gdGhlCisJCQkvLyBzdGFjaywgYW5kIHVzZSB0aGF0IHNjcmlwdCBjb2RlLiBBbnkgbm9uLW1hdGNoaW5nIG9wZW4KKwkJCS8vIGNoYXJhY3RlcnMgYWJvdmUgaXQgb24gdGhlIHN0YWNrIHdpbGwgYmUgcG9wZWQuCisJCQlpZiAocGFpckluZGV4ID49IDApIHsKKwkJCQlpZiAoKHBhaXJJbmRleCAmIDEpID09IDApIHsKKwkJCQkgICAgCisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIElmIHRoZSBwYXJlbiBzdGFjayBpcyBmdWxsLCBlbXB0eSBpdC4gVGhpcworICAgICAgICAgICAgICAgICAgICAgKiBtZWFucyB0aGF0IGRlZXBseSBuZXN0ZWQgcGFpcmVkIHB1bmN0dWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAqIGNoYXJhY3RlcnMgd2lsbCBiZSBpZ25vcmVkLCBidXQgdGhhdCdzIGFuIHVudXN1YWwKKyAgICAgICAgICAgICAgICAgICAgICogY2FzZSwgYW5kIGl0J3MgYmV0dGVyIHRvIGlnbm9yZSB0aGVtIHRoYW4gdG8KKyAgICAgICAgICAgICAgICAgICAgICogd3JpdGUgb2ZmIHRoZSBlbmQgb2YgdGhlIHN0YWNrLi4uCisgICAgICAgICAgICAgICAgICAgICAqLworCQkJCSAgICBpZiAoKytwYXJlblNQID49IFBBUkVOX1NUQUNLX0RFUFRIKSB7CisJCQkJICAgICAgICBwYXJlblNQID0gMDsKKwkJCQkgICAgfQorCQkJCSAgICAKKwkJCQkgICAgcGFyZW5TdGFja1twYXJlblNQXSA9IG5ldyBQYXJlblN0YWNrRW50cnkocGFpckluZGV4LCBzY3JpcHRDb2RlKTsKKwkJCQl9IGVsc2UgaWYgKHBhcmVuU1AgPj0gMCkgeworCQkJCQlpbnQgcGkgPSBwYWlySW5kZXggJiB+MTsKKworCQkJCQl3aGlsZSAocGFyZW5TUCA+PSAwICYmIHBhcmVuU3RhY2tbcGFyZW5TUF0ucGFpckluZGV4ICE9IHBpKSB7CisJCQkJCQlwYXJlblNQIC09IDE7CisJCQkJCX0KKworCQkJCQlpZiAocGFyZW5TUCA8IHN0YXJ0U1ApIHsKKwkJCQkJCXN0YXJ0U1AgPSBwYXJlblNQOworCQkJCQl9CisKKwkJCQkJaWYgKHBhcmVuU1AgPj0gMCkgeworCQkJCQkJc2MgPSBwYXJlblN0YWNrW3BhcmVuU1BdLnNjcmlwdENvZGU7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChzYW1lU2NyaXB0KHNjcmlwdENvZGUsIHNjKSkgeworCQkJCWlmIChzY3JpcHRDb2RlIDw9IFVTY3JpcHQuSU5IRVJJVEVEICYmIHNjID4gVVNjcmlwdC5JTkhFUklURUQpIHsKKwkJCQkJc2NyaXB0Q29kZSA9IHNjOworCisJCQkJCS8vIG5vdyB0aGF0IHdlIGhhdmUgYSBmaW5hbCBzY3JpcHQgY29kZSwgZml4IGFueSBvcGVuCisJCQkJCS8vIGNoYXJhY3RlcnMgd2UgcHVzaGVkIGJlZm9yZSB3ZSBrbmV3IHRoZSBzY3JpcHQgY29kZS4KKwkJCQkJd2hpbGUgKHN0YXJ0U1AgPCBwYXJlblNQKSB7CisJCQkJCQlwYXJlblN0YWNrWysrc3RhcnRTUF0uc2NyaXB0Q29kZSA9IHNjcmlwdENvZGU7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvLyBpZiB0aGlzIGNoYXJhY3RlciBpcyBhIGNsb3NlIHBhaXJlZCBjaGFyYWN0ZXIsCisJCQkJLy8gcG9wIGl0IGZyb20gdGhlIHN0YWNrCisJCQkJaWYgKHBhaXJJbmRleCA+PSAwICYmIChwYWlySW5kZXggJiAxKSAhPSAwICYmIHBhcmVuU1AgPj0gMCkgeworCQkJCQlwYXJlblNQIC09IDE7CisJCQkJCXN0YXJ0U1AgLT0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJICAgIC8vIFdlJ3ZlIGp1c3Qgc2VlbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisJCQkgICAgLy8gdGhlIG5leHQgcnVuLiBCYWNrIG92ZXIgaXQgc28gd2UnbGwgc2VlCisJCQkgICAgLy8gaXQgYWdhaW4gdGhlIG5leHQgdGltZS4KKwkJCSAgICB0ZXh0LnByZXZpb3VzQ29kZVBvaW50KCk7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCX0KKworICAgICAgICBzY3JpcHRMaW1pdCA9IHRleHRTdGFydCArIHRleHQuZ2V0SW5kZXgoKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZSB0d28gc2NyaXB0IGNvZGVzIHRvIHNlZSBpZiB0aGV5IGFyZSBpbiB0aGUgc2FtZSBzY3JpcHQuIElmIG9uZSBzY3JpcHQgaXMKKyAgICAgKiBhIHN0cm9uZyBzY3JpcHQsIGFuZCB0aGUgb3RoZXIgaXMgSU5IRVJJVEVEIG9yIENPTU1PTiwgaXQgd2lsbCBjb21wYXJlIGVxdWFsLgorICAgICAqCisgICAgICogQHBhcmFtIHNjcmlwdE9uZSBvbmUgb2YgdGhlIHNjcmlwdCBjb2Rlcy4KKyAgICAgKiBAcGFyYW0gc2NyaXB0VHdvIHRoZSBvdGhlciBzY3JpcHQgY29kZS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB0d28gc2NyaXB0cyBhcmUgdGhlIHNhbWUuCisgICAgICogQHNlZSBjb20uaWJtLmljdS5sYW5nLlVTY3JpcHQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHNhbWVTY3JpcHQoaW50IHNjcmlwdE9uZSwgaW50IHNjcmlwdFR3bykKKwl7CisJCXJldHVybiBzY3JpcHRPbmUgPD0gVVNjcmlwdC5JTkhFUklURUQgfHwgc2NyaXB0VHdvIDw9IFVTY3JpcHQuSU5IRVJJVEVEIHx8IHNjcmlwdE9uZSA9PSBzY3JpcHRUd287CisJfQorCisgICAgLyoKKyAgICAgKiBBbiBpbnRlcm5hbCBjbGFzcyB3aGljaCBob2xkcyBlbnRyaWVzIG9uIHRoZSBwYXJlbiBzdGFjay4KKyAgICAgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBQYXJlblN0YWNrRW50cnkKKwl7CisJCWludCBwYWlySW5kZXg7CisJCWludCBzY3JpcHRDb2RlOworCQkKKwkJcHVibGljIFBhcmVuU3RhY2tFbnRyeShpbnQgdGhlUGFpckluZGV4LCBpbnQgdGhlU2NyaXB0Q29kZSkKKwkJeworCQkgICAgcGFpckluZGV4ICA9IHRoZVBhaXJJbmRleDsKKwkJICAgIHNjcmlwdENvZGUgPSB0aGVTY3JpcHRDb2RlOworCQl9CisgICAgfTsKKyAgICAKKyAgICBwcml2YXRlIGNoYXJbXSBlbXB0eUNoYXJBcnJheSA9IHt9OworCisgICAgcHJpdmF0ZSBVQ2hhcmFjdGVySXRlcmF0b3IgdGV4dDsKKworICAgIHByaXZhdGUgaW50ICB0ZXh0U3RhcnQ7CisgICAgcHJpdmF0ZSBpbnQgIHRleHRMaW1pdDsKKyAgICAKKyAgICBwcml2YXRlIGludCAgc2NyaXB0U3RhcnQ7CisgICAgcHJpdmF0ZSBpbnQgIHNjcmlwdExpbWl0OworICAgIHByaXZhdGUgaW50ICBzY3JpcHRDb2RlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IFBBUkVOX1NUQUNLX0RFUFRIID0gMTI4OworICAgIHByaXZhdGUgc3RhdGljIFBhcmVuU3RhY2tFbnRyeSBwYXJlblN0YWNrW10gPSBuZXcgUGFyZW5TdGFja0VudHJ5W1BBUkVOX1NUQUNLX0RFUFRIXTsKKyAgICBwcml2YXRlIGludCAgcGFyZW5TUDsKKworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIGhpZ2hlc3QgYml0IHRoYXQncyBzZXQgaW4gYSB3b3JkLiBVc2VzIGEgYmluYXJ5IHNlYXJjaCB0aHJvdWdoCisgICAgICogdGhlIGJpdHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbiB0aGUgd29yZCBpbiB3aGljaCB0byBmaW5kIHRoZSBoaWdoZXN0IGJpdCB0aGF0J3Mgc2V0LgorICAgICAqIEByZXR1cm4gdGhlIGJpdCBudW1iZXIgKGNvdW50aW5nIGZyb20gdGhlIGxvdyBvcmRlciBiaXQpIG9mIHRoZSBoaWdoZXN0IGJpdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIGhpZ2hCaXQoaW50IG4pCisgICAgeworICAgICAgICBpZiAobiA8PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTMyOworICAgICAgICB9CisKKyAgICAgICAgYnl0ZSBiaXQgPSAwOworCisgICAgICAgIGlmIChuID49IDEgPDwgMTYpIHsKKyAgICAgICAgICAgIG4gPj49IDE2OworICAgICAgICAgICAgYml0ICs9IDE2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG4gPj0gMSA8PCA4KSB7CisgICAgICAgICAgICBuID4+PSA4OworICAgICAgICAgICAgYml0ICs9IDg7CisgICAgICAgIH0KKworICAgICAgICBpZiAobiA+PSAxIDw8IDQpIHsKKyAgICAgICAgICAgIG4gPj49IDQ7CisgICAgICAgICAgICBiaXQgKz0gNDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuID49IDEgPDwgMikgeworICAgICAgICAgICAgbiA+Pj0gMjsKKyAgICAgICAgICAgIGJpdCArPSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG4gPj0gMSA8PCAxKSB7CisgICAgICAgICAgICBuID4+PSAxOworICAgICAgICAgICAgYml0ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYml0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlYXJjaCB0aGUgcGFpcmVkQ2hhcnMgYXJyYXkgZm9yIHRoZSBnaXZlbiBjaGFyYWN0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2ggdGhlIGNoYXJhY3RlciBmb3Igd2hpY2ggdG8gc2VhcmNoLgorICAgICAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIHRhYmxlLCBvciAtMSBpZiBpdCdzIG5vdCB0aGVyZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UGFpckluZGV4KGludCBjaCkKKwl7CisJCWludCBwcm9iZSA9IHBhaXJlZENoYXJQb3dlcjsKKwkJaW50IGluZGV4ID0gMDsKKworCQlpZiAoY2ggPj0gcGFpcmVkQ2hhcnNbcGFpcmVkQ2hhckV4dHJhXSkgeworCQkJaW5kZXggPSBwYWlyZWRDaGFyRXh0cmE7CisJCX0KKworCQl3aGlsZSAocHJvYmUgPiAoMSA8PCAwKSkgeworCQkJcHJvYmUgPj49IDE7CisKKwkJCWlmIChjaCA+PSBwYWlyZWRDaGFyc1tpbmRleCArIHByb2JlXSkgeworCQkJCWluZGV4ICs9IHByb2JlOworCQkJfQorCQl9CisKKwkJaWYgKHBhaXJlZENoYXJzW2luZGV4XSAhPSBjaCkgeworCQkJaW5kZXggPSAtMTsKKwkJfQorCisJCXJldHVybiBpbmRleDsKKwl9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgcGFpcmVkQ2hhcnNbXSA9IHsKKwkJMHgwMDI4LCAweDAwMjksIC8vIGFzY2lpIHBhaXJlZCBwdW5jdHVhdGlvbgorCQkweDAwM2MsIDB4MDAzZSwKKwkJMHgwMDViLCAweDAwNWQsCisJCTB4MDA3YiwgMHgwMDdkLAorCQkweDAwYWIsIDB4MDBiYiwgLy8gZ3VpbGxlbWV0cworCQkweDIwMTgsIDB4MjAxOSwgLy8gZ2VuZXJhbCBwdW5jdHVhdGlvbgorCQkweDIwMWMsIDB4MjAxZCwKKwkJMHgyMDM5LCAweDIwM2EsCisJCTB4MzAwOCwgMHgzMDA5LCAvLyBjaGluZXNlIHBhaXJlZCBwdW5jdHVhdGlvbgorCQkweDMwMGEsIDB4MzAwYiwKKwkJMHgzMDBjLCAweDMwMGQsCisJCTB4MzAwZSwgMHgzMDBmLAorCQkweDMwMTAsIDB4MzAxMSwKKwkJMHgzMDE0LCAweDMwMTUsCisJCTB4MzAxNiwgMHgzMDE3LAorCQkweDMwMTgsIDB4MzAxOSwKKwkJMHgzMDFhLCAweDMwMWIKKwl9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHBhaXJlZENoYXJQb3dlciA9IDEgPDwgaGlnaEJpdChwYWlyZWRDaGFycy5sZW5ndGgpOworICAgIHByaXZhdGUgc3RhdGljIGludCBwYWlyZWRDaGFyRXh0cmEgPSBwYWlyZWRDaGFycy5sZW5ndGggLSBwYWlyZWRDaGFyUG93ZXI7Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9tYW5pZmVzdC5zdHViIGIvc3JjL2NvbS9pYm0vaWN1L21hbmlmZXN0LnN0dWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwYTMwNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9tYW5pZmVzdC5zdHViCkBAIC0wLDAgKzEsMTAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorU3BlY2lmaWNhdGlvbi1UaXRsZTogSUNVIGZvciBKYXZhCitTcGVjaWZpY2F0aW9uLVZlcnNpb246IDIuMgorU3BlY2lmaWNhdGlvbi1WZW5kb3I6IElDVQorSW1wbGVtZW50YXRpb24tVGl0bGU6IElDVSBmb3IgSmF2YQorSW1wbGVtZW50YXRpb24tVmVyc2lvbjogMi4yCitJbXBsZW1lbnRhdGlvbi1WZW5kb3I6IElCTSBDb3Jwb3JhdGlvbgorSW1wbGVtZW50YXRpb24tVmVuZG9yLUlkOiBjb20uaWJtCisKK05hbWU6IGNvbS9pYm0vaWN1CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvbWF0aC9CaWdEZWNpbWFsLmphdmEgYi9zcmMvY29tL2libS9pY3UvbWF0aC9CaWdEZWNpbWFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2Y5YmIyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9tYXRoL0JpZ0RlY2ltYWwuamF2YQpAQCAtMCwwICsxLDQzOTggQEAKKy8qIEdlbmVyYXRlZCBmcm9tICdCaWdEZWNpbWFsLm5yeCcgOCBTZXAgMjAwMCAxMToxMDo1MCBbdjIuMDBdICovCisvKiBPcHRpb25zOiBCaW5hcnkgQ29tbWVudHMgQ3Jvc3NyZWYgRm9ybWF0IEphdmEgTG9nbyBTdHJpY3RhcmdzIFN0cmljdGNhc2UgVHJhY2UyIFZlcmJvc2UzICovCitwYWNrYWdlIGNvbS5pYm0uaWN1Lm1hdGg7CitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEJpZ0RlY2ltYWwgLS0gRGVjaW1hbCBhcml0aG1ldGljIGZvciBKYXZhICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAxOTk2LCAyMDAwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhlIEJpZ0RlY2ltYWwgY2xhc3MgcHJvdmlkZXMgaW1tdXRhYmxlIGFyYml0cmFyeS1wcmVjaXNpb24gICAgICAgICovCisvKiBmbG9hdGluZyBwb2ludCAoaW5jbHVkaW5nIGludGVnZXIpIGRlY2ltYWwgbnVtYmVycy4gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQXMgdGhlIG51bWJlcnMgYXJlIGRlY2ltYWwsIHRoZXJlIGlzIGFuIGV4YWN0IGNvcnJlc3BvbmRlbmNlICAgICAgICovCisvKiBiZXR3ZWVuIGFuIGluc3RhbmNlIG9mIGEgQmlnRGVjaW1hbCBvYmplY3QgYW5kIGl0cyBTdHJpbmcgICAgICAgICAgKi8KKy8qIHJlcHJlc2VudGF0aW9uOyB0aGUgQmlnRGVjaW1hbCBjbGFzcyBwcm92aWRlcyBkaXJlY3QgY29udmVyc2lvbnMgICAqLworLyogdG8gYW5kIGZyb20gU3RyaW5nIGFuZCBjaGFyYWN0ZXIgYXJyYXkgb2JqZWN0cywgYW5kIHdlbGwgYXMgICAgICAgICovCisvKiBjb252ZXJzaW9ucyB0byBhbmQgZnJvbSB0aGUgSmF2YSBwcmltaXRpdmUgdHlwZXMgKHdoaWNoIG1heSBub3QgICAgKi8KKy8qIGJlIGV4YWN0KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBOb3RlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogMS4gQSBCaWdEZWNpbWFsIG9iamVjdCBpcyBuZXZlciBjaGFuZ2VkIGluIHZhbHVlIG9uY2UgY29uc3RydWN0ZWQ7ICovCisvKiAgICB0aGlzIGF2b2lkcyB0aGUgbmVlZCBmb3IgbG9ja2luZy4gIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IHRoZSAgKi8KKy8qICAgIG1hbnRpc3NhIGFycmF5IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBtYW55IEJpZ0RlY2ltYWwgb2JqZWN0cywgICAqLworLyogICAgc28gdGhhdCBvbmNlIGV4cG9zZWQgaXQgbXVzdCBub3QgYmUgYWx0ZXJlZC4gICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDIuIFRoaXMgY2xhc3MgbG9va3MgYXQgTWF0aENvbnRleHQgY2xhc3MgZmllbGRzIGRpcmVjdGx5IChmb3IgICAgICAqLworLyogICAgcGVyZm9ybWFuY2UpLiAgSXQgbXVzdCBub3QgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGVtLiAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDMuIEV4cG9uZW50IGNoZWNraW5nIGlzIGRlbGF5ZWQgdW50aWwgZmluaXNoKCksIGFzIHdlIGtub3cgICAgICAgICAqLworLyogICAgaW50ZXJtZWRpYXRlIGNhbGN1bGF0aW9ucyBjYW5ub3QgY2F1c2UgMzEtYml0IG92ZXJmbG93LiAgICAgICAgICovCisvKiAgICBbVGhpcyBhc3NlcnRpb24gZGVwZW5kcyBvbiBNQVhfRElHSVRTIGluIE1hdGhDb250ZXh0Ll0gICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogNC4gQ29tbWVudHMgZm9yIHRoZSBwdWJsaWMgQVBJIG5vdyBmb2xsb3cgdGhlIGphdmFkb2MgY29udmVudGlvbnMuICovCisvKiAgICBUaGUgTmV0UmV4eCAtY29tbWVudHMgb3B0aW9uIGlzIHVzZWQgdG8gcGFzcyB0aGVzZSBjb21tZW50cyAgICAgKi8KKy8qICAgIHRocm91Z2ggdG8gdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUgKHdpdGggLWZvcm1hdCwgaWYgZGVzaXJlZCkuICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA1LiBTeXN0ZW0uYXJyYXljb3B5IGlzIGZhc3RlciB0aGFuIGV4cGxpY2l0IGxvb3AgYXMgZm9sbG93cyAgICAgICAgKi8KKy8qICAgICAgTWVhbiBsZW5ndGggNDogIGVxdWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBNZWFuIGxlbmd0aCA4OiAgeDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE1lYW4gbGVuZ3RoIDE2OiB4MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTWVhbiBsZW5ndGggMjQ6IHg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJvbSBwcmlvciBleHBlcmllbmNlLCB3ZSBleHBlY3QgbWVhbiBsZW5ndGggYSBsaXR0bGUgYmVsb3cgOCwgICovCisvKiAgICBidXQgYXJyYXljb3B5IGlzIHN0aWxsIHRoZSBvbmUgdG8gdXNlLCBpbiBnZW5lcmFsLCB1bnRpbCBsYXRlciAgKi8KKy8qICAgIG1lYXN1cmVtZW50cyBzdWdnZXN0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA2LiAnRE1TUkNOJyByZWZlcnJlZCB0byBiZWxvdyBpcyB0aGUgb3JpZ2luYWwgKDE5ODEpIElCTSBTLzM3MCAgICAgKi8KKy8qICAgIGFzc2VtYmxlciBjb2RlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhbGdvcml0aG1zIGJlbG93OyBpdCBpcyAgICAqLworLyogICAgbm93IGNhbGxlZCBJWFhSQ04gYW5kIGlzIGF2YWlsYWJsZSB3aXRoIHRoZSBPUy8zOTAgYW5kIFZNL0VTQSAgICovCisvKiAgICBvcGVyYXRpbmcgc3lzdGVtcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ2hhbmdlIEhpc3Rvcnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk3LjA5LjAyIEluaXRpYWwgdmVyc2lvbiAoZGVyaXZlZCBmcm9tIG5ldHJleHgubGFuZyBjbGFzc2VzKSAgICAgKi8KKy8qIDE5OTcuMDkuMTIgQWRkIGxvc3REaWdpdHMgY2hlY2tpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5Ny4xMC4wNiBDaGFuZ2UgbWFudGlzc2EgdG8gYSBieXRlIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk3LjExLjIyIFJld29yayBwb3dlciBbZGlkIG5vdCBwcmVwYXJlIGFyZ3VtZW50cywgZXRjLl0gICAgICAgICAgKi8KKy8qIDE5OTcuMTIuMTMgbXVsdGlwbHkgZGlkIG5vdCBwcmVwYXJlIGFyZ3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5Ny4xMi4xNCBhZGQgZGlkIG5vdCBwcmVwYXJlIGFuZCBhbGlnbiBhcmd1bWVudHMgY29ycmVjdGx5ICAgICAgICovCisvKiAxOTk4LjA1LjAyIDAuMDcgcGFja2FnaW5nIGNoYW5nZXMgc3VnZ2VzdGVkIGJ5IFN1biBhbmQgT3JhY2xlICAgICAgKi8KKy8qIDE5OTguMDUuMjEgYWRqdXN0IHJlbWFpbmRlciBvcGVyYXRvciBmaW5hbGl6YXRpb24gICAgICAgICAgICAgICAgICAqLworLyogMTk5OC4wNi4wNCByZXdvcmsgdG8gcGFzcyBNYXRoQ29udGV4dCB0byBmaW5pc2goKSBhbmQgcm91bmQoKSAgICAgICovCisvKiAxOTk4LjA2LjA2IGNoYW5nZSBmb3JtYXQgdG8gdXNlIHJvdW5kKCk7IHN1cHBvcnQgcm91bmRpbmcgbW9kZXMgICAgKi8KKy8qIDE5OTguMDYuMjUgcmVuYW1lIHRvIEJpZ0RlY2ltYWwgYW5kIGJlZ2luIG1lcmdlICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICB6ZXJvIGNhbiBub3cgaGF2ZSB0cmFpbGluZyB6ZXJvcyAoaS5lLiwgZXhwXD0wKSAgICAgICAgICovCisvKiAxOTk4LjA2LjI4IG5ldyBtZXRob2RzOiBtb3ZlUG9pbnRYeHh4LCBzY2FsZSwgdG9CaWdJbnRlZ2VyICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2NhbGVkVmFsdWUsIHZhbHVlb2YgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5OC4wNy4wMSBpbXByb3ZlIGJ5dGVhZGRzdWIgdG8gYWxsb3cgYXJyYXkgcmV1c2UsIGV0Yy4gICAgICAgICAgICovCisvKiAxOTk4LjA3LjAxIG1ha2UgbnVsbCB0ZXN0aW5nIGV4cGxpY2l0IHRvIGF2b2lkIEpJVCBidWcgW1dpbjMyXSAgICAgKi8KKy8qIDE5OTguMDcuMDcgc2NhbGVkIGRpdmlzaW9uICBbZGl2aWRlKEJpZ0RlY2ltYWwsIGludCwgaW50KV0gICAgICAgICAqLworLyogMTk5OC4wNy4wOCBzZXRTY2FsZSwgZmFzdGVyIGVxdWFscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk4LjA3LjExIGFsbG93IDFFNiAobm8gc2lnbikgPHNpZ2g+OyBuZXcgZG91YmxlL2Zsb2F0IGNvbnZlcnNpb24gKi8KKy8qIDE5OTguMTAuMTIgY2hhbmdlIHBhY2thZ2UgdG8gY29tLmlibS5pY3UubWF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTguMTIuMTQgcG93ZXIgb3BlcmF0b3Igbm8gbG9uZ2VyIHJvdW5kcyBSSFMgW3RvIG1hdGNoIEFOU0ldICAgICAqLworLyogICAgICAgICAgICBhZGQgdG9CaWdEZWNpbWFsKCkgYW5kIEJpZ0RlY2ltYWwoamF2YS5tYXRoLkJpZ0RlY2ltYWwpICovCisvKiAxOTk4LjEyLjI5IGltcHJvdmUgYnl0ZWFkZHN1YiBieSB1c2luZyB0YWJsZSBsb29rdXAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTkuMDIuMDQgbG9zdGRpZ2l0cz0wIGJlaGF2aW91ciByb3VuZHMgaW5zdGVhZCBvZiBkaWdpdHMrMSBndWFyZCAqLworLyogMTk5OS4wMi4wNSBjbGVhbmVyIGNvZGUgZm9yIEJpZ0RlY2ltYWwoY2hhcltdKSAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk5LjAyLjA2IGFkZCBqYXZhZG9jIGNvbW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTkuMDIuMTEgZm9ybWF0KCkgY2hhbmdlZCBmcm9tIDcgdG8gMiBtZXRob2QgZm9ybSAgICAgICAgICAgICAgICAqLworLyogMTk5OS4wMy4wNSBudWxsIHBvaW50ZXIgY2hlY2tpbmcgaXMgbm8gbG9uZ2VyIGV4cGxpY2l0ICAgICAgICAgICAgICovCisvKiAxOTk5LjAzLjA1IHNpbXBsaWZ5OyBjaGFuZ2VzIGZyb20gZGlzY3Vzc2lvbiB3aXRoIEouIEJsb2NoOiAgICAgICAgKi8KKy8qICAgICAgICAgICAgbnVsbCBubyBsb25nZXIgcGVybWl0dGVkIGZvciBNYXRoQ29udGV4dDsgZHJvcCBib29sZWFuLCAqLworLyogICAgICAgICAgICBieXRlLCBjaGFyLCBmbG9hdCwgc2hvcnQgY29uc3RydWN0b3IsIGRlcHJlY2F0ZSBkb3VibGUgICovCisvKiAgICAgICAgICAgIGNvbnN0cnVjdG9yLCBubyBibGFua3MgaW4gc3RyaW5nIGNvbnN0cnVjdG9yLCBhZGQgICAgICAgKi8KKy8qICAgICAgICAgICAgb2Zmc2V0IGFuZCBsZW5ndGggdmVyc2lvbiBvZiBjaGFyW10gY29uc3RydWN0b3I7ICAgICAgICAqLworLyogICAgICAgICAgICBhZGQgdmFsdWVPZihkb3VibGUpOyBkcm9wIGJvb2xlYW5WYWx1ZSwgY2hhclZhbHVlOyAgICAgICovCisvKiAgICAgICAgICAgIGFkZCAuLi5FeGFjdCB2ZXJzaW9ucyBvZiByZW1haW5pbmcgY29udmVydG9ycyAgICAgICAgICAgKi8KKy8qIDE5OTkuMDMuMTMgYWRkIHRvQmlnSW50ZWdlckV4YWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5OS4wMy4xMyAxLjAwIHJlbGVhc2UgdG8gSUJNIENlbnRyZSBmb3IgSmF2YSBUZWNobm9sb2d5ICAgICAgICAgICovCisvKiAxOTk5LjA1LjI3IDEuMDEgY29ycmVjdCAwLTAuMiBidWcgdW5kZXIgc2NhbGVkIGFyaXRobWV0aWMgICAgICAgICAgKi8KKy8qIDE5OTkuMDYuMjkgMS4wMiBjb25zdHJ1Y3RvcnMgc2hvdWxkIG5vdCBhbGxvdyBleHBvbmVudCA+IDkgZGlnaXRzICAqLworLyogMTk5OS4wNy4wMyAxLjAzIGxvc3QgZGlnaXRzIHNob3VsZCBub3QgYmUgY2hlY2tlZCBpZiBkaWdpdHM9MCAgICAgICovCisvKiAxOTk5LjA3LjA2ICAgICAgbG9zdCBkaWdpdHMgRXhjZXB0aW9uIG1lc3NhZ2UgY2hhbmdlZCAgICAgICAgICAgICAgKi8KKy8qIDE5OTkuMDcuMTAgMS4wNCBtb3JlIHdvcmsgb24gMC0wLjIgKHNjYWxlZCBhcml0aG1ldGljKSAgICAgICAgICAgICAqLworLyogMTk5OS4wNy4xNyAgICAgIGltcHJvdmUgbWVzc2FnZXMgZnJvbSBwb3cgbWV0aG9kICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk5LjA4LjA4ICAgICAgcGVyZm9ybWFuY2UgdHdlYWtzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTkuMDguMTUgICAgICBmYXN0cGF0aCBpbiBtdWx0aXBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5OS4xMS4wNSAxLjA1IGZpeCBwcm9ibGVtIGluIGludFZhbHVlRXhhY3QgW2UuZy4sIDU1NTU1NTU1NTVdICAgICovCisvKiAxOTk5LjEyLjIyIDEuMDYgcmVtb3ZlIG11bHRpcGx5IGZhc3RwYXRoLCBhbmQgaW1wcm92ZSBwZXJmb3JtYW5jZSAgKi8KKy8qIDIwMDAuMDEuMDEgICAgICBjb3B5cmlnaHQgdXBkYXRlIFtZMksgaGFzIGFycml2ZWRdICAgICAgICAgICAgICAgICAqLworLyogMjAwMC4wNi4xOCAxLjA4IG5vIGxvbmdlciBkZXByZWNhdGUgQmlnRGVjaW1hbChkb3VibGUpICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisKKworCisvKioKKyAqIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBjbGFzcyBpbXBsZW1lbnRzIGltbXV0YWJsZQorICogYXJiaXRyYXJ5LXByZWNpc2lvbiBkZWNpbWFsIG51bWJlcnMuICBUaGUgbWV0aG9kcyBvZiB0aGUKKyAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGNsYXNzIHByb3ZpZGUgb3BlcmF0aW9ucyBmb3IgZml4ZWQgYW5kCisgKiBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljLCBjb21wYXJpc29uLCBmb3JtYXQgY29udmVyc2lvbnMsIGFuZAorICogaGFzaGluZy4KKyAqIDxwPgorICogQXMgdGhlIG51bWJlcnMgYXJlIGRlY2ltYWwsIHRoZXJlIGlzIGFuIGV4YWN0IGNvcnJlc3BvbmRlbmNlIGJldHdlZW4KKyAqIGFuIGluc3RhbmNlIG9mIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0IGFuZCBpdHMKKyAqIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50YXRpb247IHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBjbGFzcworICogcHJvdmlkZXMgZGlyZWN0IGNvbnZlcnNpb25zIHRvIGFuZCBmcm9tIDxjb2RlPlN0cmluZzwvY29kZT4gYW5kCisgKiBjaGFyYWN0ZXIgYXJyYXkgKDxjb2RlPmNoYXJbXTwvY29kZT4pIG9iamVjdHMsIGFzIHdlbGwgYXMgY29udmVyc2lvbnMKKyAqIHRvIGFuZCBmcm9tIHRoZSBKYXZhIHByaW1pdGl2ZSB0eXBlcyAod2hpY2ggbWF5IG5vdCBiZSBleGFjdCkgYW5kCisgKiA8Y29kZT5CaWdJbnRlZ2VyPC9jb2RlPi4KKyAqIDxwPgorICogSW4gdGhlIGRlc2NyaXB0aW9ucyBvZiBjb25zdHJ1Y3RvcnMgYW5kIG1ldGhvZHMgaW4gdGhpcyBkb2N1bWVudGF0aW9uLAorICogdGhlIHZhbHVlIG9mIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gbnVtYmVyIG9iamVjdCBpcyBzaG93biBhcyB0aGUKKyAqIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgPGNvZGU+dG9TdHJpbmcoKTwvY29kZT4gbWV0aG9kIG9uIHRoZSBvYmplY3QuCisgKiBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBkZWNpbWFsIG51bWJlciBpcyBuZWl0aGVyIGRlZmluZWQKKyAqIG5vciBleHBvc2VkLCBhbmQgaXMgbm90IHBlcm1pdHRlZCB0byBhZmZlY3QgdGhlIHJlc3VsdCBvZiBhbnkKKyAqIG9wZXJhdGlvbi4KKyAqIDxwPgorICogVGhlIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgcHJvdmlkZWQgYnkgdGhpcyBjbGFzcyBpcyBkZWZpbmVkIGJ5CisgKiB0aGUgQU5TSSBYMy4yNzQtMTk5NiBzdGFuZGFyZCwgYW5kIGlzIGFsc28gZG9jdW1lbnRlZCBhdAorICogPGNvZGU+aHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWw8L2NvZGU+CisgKiA8YnI+PGk+W1RoaXMgVVJMIHdpbGwgY2hhbmdlLl08L2k+CisgKgorICogPGgzPk9wZXJhdG9yIG1ldGhvZHM8L2gzPgorICogPHA+CisgKiBPcGVyYXRpb25zIG9uIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG51bWJlcnMgYXJlIGNvbnRyb2xsZWQgYnkgYQorICoge0BsaW5rIE1hdGhDb250ZXh0fSBvYmplY3QsIHdoaWNoIHByb3ZpZGVzIHRoZSBjb250ZXh0IChwcmVjaXNpb24gYW5kCisgKiBvdGhlciBpbmZvcm1hdGlvbikgZm9yIHRoZSBvcGVyYXRpb24uIE1ldGhvZHMgdGhhdCBjYW4gdGFrZSBhCisgKiA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gcGFyYW1ldGVyIGltcGxlbWVudCB0aGUgc3RhbmRhcmQgYXJpdGhtZXRpYworICogb3BlcmF0b3JzIGZvciA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBvYmplY3RzIGFuZCBhcmUga25vd24gYXMKKyAqIDxpPm9wZXJhdG9yIG1ldGhvZHM8L2k+LiAgVGhlIGRlZmF1bHQgc2V0dGluZ3MgcHJvdmlkZWQgYnkgdGhlCisgKiBjb25zdGFudCB7QGxpbmsgTWF0aENvbnRleHQjREVGQVVMVH0gKDxjb2RlPmRpZ2l0cz05LAorICogZm9ybT1TQ0lFTlRJRklDLCBsb3N0RGlnaXRzPWZhbHNlLCByb3VuZGluZ01vZGU9Uk9VTkRfSEFMRl9VUDwvY29kZT4pCisgKiBwZXJmb3JtIGdlbmVyYWwtcHVycG9zZSBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIHRvIG5pbmUgZGlnaXRzIG9mCisgKiBwcmVjaXNpb24uICBUaGUgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IHBhcmFtZXRlciBtdXN0IG5vdCBiZQorICogPGNvZGU+bnVsbDwvY29kZT4uCisgKiA8cD4KKyAqIEVhY2ggb3BlcmF0b3IgbWV0aG9kIGFsc28gaGFzIGEgdmVyc2lvbiBwcm92aWRlZCB3aGljaCBkb2VzCisgKiBub3QgdGFrZSBhIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBwYXJhbWV0ZXIuICBGb3IgdGhpcyB2ZXJzaW9uIG9mCisgKiBlYWNoIG1ldGhvZCwgdGhlIGNvbnRleHQgc2V0dGluZ3MgdXNlZCBhcmUgPGNvZGU+ZGlnaXRzPTAsCisgKiBmb3JtPVBMQUlOLCBsb3N0RGlnaXRzPWZhbHNlLCByb3VuZGluZ01vZGU9Uk9VTkRfSEFMRl9VUDwvY29kZT47CisgKiB0aGVzZSBzZXR0aW5ncyBwZXJmb3JtIGZpeGVkIHBvaW50IGFyaXRobWV0aWMgd2l0aCB1bmxpbWl0ZWQKKyAqIHByZWNpc2lvbiwgYXMgZGVmaW5lZCBmb3IgdGhlIG9yaWdpbmFsIEJpZ0RlY2ltYWwgY2xhc3MgaW4gSmF2YSAxLjEKKyAqIGFuZCBKYXZhIDEuMi4KKyAqIDxwPgorICogRm9yIG1vbmFkaWMgb3BlcmF0b3JzLCBvbmx5IHRoZSBvcHRpb25hbCA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4KKyAqIHBhcmFtZXRlciBpcyBwcmVzZW50OyB0aGUgb3BlcmF0aW9uIGFjdHMgdXBvbiB0aGUgY3VycmVudCBvYmplY3QuCisgKiA8cD4KKyAqIEZvciBkeWFkaWMgb3BlcmF0b3JzLCBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHBhcmFtZXRlciBpcyBhbHdheXMKKyAqIHByZXNlbnQ7IGl0IG11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LgorICogVGhlIG9wZXJhdGlvbiBhY3RzIHdpdGggdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIHRoZSBsZWZ0LWhhbmQgb3BlcmFuZAorICogYW5kIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBwYXJhbWV0ZXIgYmVpbmcgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZC4KKyAqIDxwPgorICogRm9yIGV4YW1wbGUsIGFkZGluZyB0d28gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0cyByZWZlcnJlZCB0bworICogYnkgdGhlIG5hbWVzIDxjb2RlPmF3YXJkPC9jb2RlPiBhbmQgPGNvZGU+ZXh0cmE8L2NvZGU+IGNvdWxkIGJlCisgKiB3cml0dGVuIGFzIGFueSBvZjoKKyAqIDxwPjxjb2RlPgorICogICAgIGF3YXJkLmFkZChleHRyYSkKKyAqIDxicj5hd2FyZC5hZGQoZXh0cmEsIE1hdGhDb250ZXh0LkRFRkFVTFQpCisgKiA8YnI+YXdhcmQuYWRkKGV4dHJhLCBhY29udGV4dCkKKyAqIDwvY29kZT4KKyAqIDxwPgorICogKHdoZXJlIDxjb2RlPmFjb250ZXh0PC9jb2RlPiBpcyBhIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBvYmplY3QpLAorICogd2hpY2ggd291bGQgcmV0dXJuIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0IHdob3NlIHZhbHVlIGlzCisgKiB0aGUgcmVzdWx0IG9mIGFkZGluZyA8Y29kZT5hd2FyZDwvY29kZT4gYW5kIDxjb2RlPmV4dHJhPC9jb2RlPiB1bmRlcgorICogdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQgc2V0dGluZ3MuCisgKiA8cD4KKyAqIFdoZW4gYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBvcGVyYXRvciBtZXRob2QgaXMgdXNlZCwgYSBzZXQgb2YKKyAqIHJ1bGVzIGRlZmluZSB3aGF0IHRoZSByZXN1bHQgd2lsbCBiZSAoYW5kLCBieSBpbXBsaWNhdGlvbiwgaG93IHRoZQorICogcmVzdWx0IHdvdWxkIGJlIHJlcHJlc2VudGVkIGFzIGEgY2hhcmFjdGVyIHN0cmluZykuCisgKiBUaGVzZSBydWxlcyBhcmUgZGVmaW5lZCBpbiB0aGUgQmlnRGVjaW1hbCBhcml0aG1ldGljIGRvY3VtZW50YXRpb24KKyAqIChzZWUgdGhlIFVSTCBhYm92ZSksIGJ1dCBpbiBzdW1tYXJ5OgorICogPHVsPgorICogPGxpPlJlc3VsdHMgYXJlIG5vcm1hbGx5IGNhbGN1bGF0ZWQgd2l0aCB1cCB0byBzb21lIG1heGltdW0gbnVtYmVyIG9mCisgKiBzaWduaWZpY2FudCBkaWdpdHMuCisgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBwYXJhbWV0ZXIgZm9yIGFuIG9wZXJhdGlvbgorICogd2VyZSA8Y29kZT5NYXRoQ29udGV4dC5ERUZBVUxUPC9jb2RlPiB0aGVuIHRoZSByZXN1bHQgd291bGQgYmUKKyAqIHJvdW5kZWQgdG8gOSBkaWdpdHM7IHRoZSBkaXZpc2lvbiBvZiAyIGJ5IDMgd291bGQgdGhlbiByZXN1bHQgaW4KKyAqIDAuNjY2NjY2NjY3LgorICogPGJyPgorICogWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgb2YgOSBzaWduaWZpY2FudCBkaWdpdHMgYnkgcHJvdmlkaW5nIHRoZQorICogbWV0aG9kIHdpdGggYSBzdWl0YWJsZSA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gb2JqZWN0LiBUaGlzIGxldHMgeW91CisgKiBjYWxjdWxhdGUgdXNpbmcgYXMgbWFueSBkaWdpdHMgYXMgeW91IG5lZWQgLS0gdGhvdXNhbmRzLCBpZiBuZWNlc3NhcnkuCisgKiBGaXhlZCBwb2ludCAoc2NhbGVkKSBhcml0aG1ldGljIGlzIGluZGljYXRlZCBieSB1c2luZyBhCisgKiA8Y29kZT5kaWdpdHM8L2NvZGU+IHNldHRpbmcgb2YgMCAob3Igb21pdHRpbmcgdGhlCisgKiA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gcGFyYW1ldGVyKS4KKyAqIDxicj4KKyAqIFNpbWlsYXJseSwgeW91IGNhbiBjaGFuZ2UgdGhlIGFsZ29yaXRobSB1c2VkIGZvciByb3VuZGluZyBmcm9tIHRoZQorICogZGVmYXVsdCAiY2xhc3NpYyIgYWxnb3JpdGhtLgorICogPGxpPgorICogSW4gc3RhbmRhcmQgYXJpdGhtZXRpYyAodGhhdCBpcywgd2hlbiB0aGUgPGNvZGU+Zm9ybTwvY29kZT4gc2V0dGluZworICogaXMgbm90IDxjb2RlPlBMQUlOPC9jb2RlPiksIGEgemVybyByZXN1bHQgaXMgYWx3YXlzIGV4cHJlc3NlZCBhcyB0aGUKKyAqIHNpbmdsZSBkaWdpdCA8Y29kZT4nMCc8L2NvZGU+ICh0aGF0IGlzLCB3aXRoIG5vIHNpZ24sIGRlY2ltYWwgcG9pbnQsCisgKiBvciBleHBvbmVudCBwYXJ0KS4KKyAqIDxsaT4KKyAqIEV4Y2VwdCBmb3IgdGhlIGRpdmlzaW9uIGFuZCBwb3dlciBvcGVyYXRvcnMgaW4gc3RhbmRhcmQgYXJpdGhtZXRpYywKKyAqIHRyYWlsaW5nIHplcm9zIGFyZSBwcmVzZXJ2ZWQgKHRoaXMgaXMgaW4gY29udHJhc3QgdG8gYmluYXJ5IGZsb2F0aW5nCisgKiBwb2ludCBvcGVyYXRpb25zIGFuZCBtb3N0IGVsZWN0cm9uaWMgY2FsY3VsYXRvcnMsIHdoaWNoIGxvc2UgdGhlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHJlc3VsdHMpLgorICogPGJyPgorICogU28sIGZvciBleGFtcGxlOgorICogPHA+PGNvZGU+CisgKiAgICAgbmV3IEJpZ0RlY2ltYWwoIjIuNDAiKS5hZGQoICAgICBuZXcgQmlnRGVjaW1hbCgiMiIpKSAgICAgID0mZ3Q7ICI0LjQwIgorICogPGJyPm5ldyBCaWdEZWNpbWFsKCIyLjQwIikuc3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoIjIiKSkgICAgICA9Jmd0OyAiMC40MCIKKyAqIDxicj5uZXcgQmlnRGVjaW1hbCgiMi40MCIpLm11bHRpcGx5KG5ldyBCaWdEZWNpbWFsKCIyIikpICAgICAgPSZndDsgIjQuODAiCisgKiA8YnI+bmV3IEJpZ0RlY2ltYWwoIjIuNDAiKS5kaXZpZGUoICBuZXcgQmlnRGVjaW1hbCgiMiIpLCBkZWYpID0mZ3Q7ICIxLjIiCisgKiA8L2NvZGU+CisgKiA8cD53aGVyZSB0aGUgdmFsdWUgb24gdGhlIHJpZ2h0IG9mIHRoZSA8Y29kZT49Jmd0OzwvY29kZT4gd291bGQgYmUgdGhlCisgKiByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiwgZXhwcmVzc2VkIGFzIGEgPGNvZGU+U3RyaW5nPC9jb2RlPiwgYW5kCisgKiA8Y29kZT5kZWY8L2NvZGU+IChpbiB0aGlzIGFuZCBmb2xsb3dpbmcgZXhhbXBsZXMpIHJlZmVycyB0bworICogPGNvZGU+TWF0aENvbnRleHQuREVGQVVMVDwvY29kZT4pLgorICogVGhpcyBwcmVzZXJ2YXRpb24gb2YgdHJhaWxpbmcgemVyb3MgaXMgZGVzaXJhYmxlIGZvciBtb3N0CisgKiBjYWxjdWxhdGlvbnMgKGluY2x1ZGluZyBmaW5hbmNpYWwgY2FsY3VsYXRpb25zKS4KKyAqIElmIG5lY2Vzc2FyeSwgdHJhaWxpbmcgemVyb3MgbWF5IGJlIGVhc2lseSByZW1vdmVkIHVzaW5nIGRpdmlzaW9uIGJ5IDEuCisgKiA8bGk+CisgKiBJbiBzdGFuZGFyZCBhcml0aG1ldGljLCBleHBvbmVudGlhbCBmb3JtIGlzIHVzZWQgZm9yIGEgcmVzdWx0CisgKiBkZXBlbmRpbmcgb24gaXRzIHZhbHVlIGFuZCB0aGUgY3VycmVudCBzZXR0aW5nIG9mIDxjb2RlPmRpZ2l0czwvY29kZT4KKyAqICh0aGUgZGVmYXVsdCBpcyA5IGRpZ2l0cykuCisgKiBJZiB0aGUgbnVtYmVyIG9mIHBsYWNlcyBuZWVkZWQgYmVmb3JlIHRoZSBkZWNpbWFsIHBvaW50IGV4Y2VlZHMgdGhlCisgKiA8Y29kZT5kaWdpdHM8L2NvZGU+IHNldHRpbmcsIG9yIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIGlzCisgKiBsZXNzIHRoYW4gPGNvZGU+MC4wMDAwMDE8L2NvZGU+LCB0aGVuIHRoZSBudW1iZXIgd2lsbCBiZSBleHByZXNzZWQgaW4KKyAqIGV4cG9uZW50aWFsIG5vdGF0aW9uOyB0aHVzCisgKiA8cD48Y29kZT4KKyAqICAgbmV3IEJpZ0RlY2ltYWwoIjFlKzYiKS5tdWx0aXBseShuZXcgQmlnRGVjaW1hbCgiMWUrNiIpLCBkZWYpCisgKiA8L2NvZGU+CisgKiA8cD5yZXN1bHRzIGluIDxjb2RlPjFFKzEyPC9jb2RlPiBpbnN0ZWFkIG9mCisgKiA8Y29kZT4xMDAwMDAwMDAwMDAwPC9jb2RlPiwgYW5kCisgKiA8cD48Y29kZT4KKyAqICAgbmV3IEJpZ0RlY2ltYWwoIjEiKS5kaXZpZGUobmV3IEJpZ0RlY2ltYWwoIjNFKzEwIiksIGRlZikKKyAqIDwvY29kZT4KKyAqIDxwPnJlc3VsdHMgaW4gPGNvZGU+My4zMzMzMzMzM0UtMTE8L2NvZGU+IGluc3RlYWQgb2YKKyAqIDxjb2RlPjAuMDAwMDAwMDAwMDMzMzMzMzMzMzwvY29kZT4uCisgKiA8cD4KKyAqIFRoZSBmb3JtIG9mIHRoZSBleHBvbmVudGlhbCBub3RhdGlvbiAoc2NpZW50aWZpYyBvciBlbmdpbmVlcmluZykgaXMKKyAqIGRldGVybWluZWQgYnkgdGhlIDxjb2RlPmZvcm08L2NvZGU+IHNldHRpbmcuCisgKiA8ZXVsPgorICogPHA+CisgKiBUaGUgbmFtZXMgb2YgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIGZvbGxvdyB0aGUgY29udmVudGlvbnMgZXN0YWJsaXNoZWQKKyAqIGJ5IDxjb2RlPmphdmEubGFuZy5OdW1iZXI8L2NvZGU+LCA8Y29kZT5qYXZhLm1hdGguQmlnSW50ZWdlcjwvY29kZT4sCisgKiBhbmQgPGNvZGU+amF2YS5tYXRoLkJpZ0RlY2ltYWw8L2NvZGU+IGluIEphdmEgMS4xIGFuZCBKYXZhIDEuMi4KKyAqCisgKiBAc2VlICAgICBNYXRoQ29udGV4dAorICogQGF1dGhvciAgTWlrZSBDb3dsaXNoYXcKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisKK3B1YmxpYyBjbGFzcyBCaWdEZWNpbWFsIGV4dGVuZHMgamF2YS5sYW5nLk51bWJlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlLGphdmEubGFuZy5Db21wYXJhYmxleworIHByaXZhdGUgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgJDA9IkJpZ0RlY2ltYWwubnJ4IjsKKyAKKyAKKyAKKyAvKiAtLS0tLSBDb25zdGFudHMgLS0tLS0gKi8KKyAvKiBwcm9wZXJ0aWVzIGNvbnN0YW50IHB1YmxpYyAqLyAvLyB1c2VmdWwgdG8gb3RoZXJzCisgLyoqCisgICogVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGNvbnN0YW50ICIwIi4KKyAgKgorICAqIEBzZWUgI09ORQorICAqIEBzZWUgI1RFTgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIHB1YmxpYyBzdGF0aWMgZmluYWwgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIFpFUk89bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgobG9uZykwKTsgLy8gdXNlIGxvbmcgYXMgd2Ugd2FudCB0aGUgaW50IGNvbnN0cnVjdG9yCisgLy8gLi4gdG8gYmUgYWJsZSB0byB1c2UgdGhpcywgZm9yIHNwZWVkCisgCisgLyoqCisgICogVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGNvbnN0YW50ICIxIi4KKyAgKgorICAqIEBzZWUgI1RFTgorICAqIEBzZWUgI1pFUk8KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyBwdWJsaWMgc3RhdGljIGZpbmFsIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBPTkU9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgobG9uZykxKTsgLy8gdXNlIGxvbmcgYXMgd2Ugd2FudCB0aGUgaW50IGNvbnN0cnVjdG9yCisgLy8gLi4gdG8gYmUgYWJsZSB0byB1c2UgdGhpcywgZm9yIHNwZWVkCisgCisgLyoqCisgICogVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGNvbnN0YW50ICIxMCIuCisgICoKKyAgKiBAc2VlICNPTkUKKyAgKiBAc2VlICNaRVJPCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgVEVOPW5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwoMTApOworIAorIC8vIHRoZSByb3VuZGluZyBtb2RlcyAoY29waWVkIGhlcmUgZm9yIHVwd2FyZHMgY29tcGF0aWJpbGl0eSkKKyAvKioKKyAgKiBSb3VuZGluZyBtb2RlIHRvIHJvdW5kIHRvIGEgbW9yZSBwb3NpdGl2ZSBudW1iZXIuCisgICogQHNlZSBNYXRoQ29udGV4dCNST1VORF9DRUlMSU5HCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRfQ0VJTElORz1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0NFSUxJTkc7CisgCisgLyoqCisgICogUm91bmRpbmcgbW9kZSB0byByb3VuZCB0b3dhcmRzIHplcm8uCisgICogQHNlZSBNYXRoQ29udGV4dCNST1VORF9ET1dOCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRfRE9XTj1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0RPV047CisgCisgLyoqCisgICogUm91bmRpbmcgbW9kZSB0byByb3VuZCB0byBhIG1vcmUgbmVnYXRpdmUgbnVtYmVyLgorICAqIEBzZWUgTWF0aENvbnRleHQjUk9VTkRfRkxPT1IKKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST1VORF9GTE9PUj1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0ZMT09SOworIAorIC8qKgorICAqIFJvdW5kaW5nIG1vZGUgdG8gcm91bmQgdG8gbmVhcmVzdCBuZWlnaGJvciwgd2hlcmUgYW4gZXF1aWRpc3RhbnQKKyAgKiB2YWx1ZSBpcyByb3VuZGVkIGRvd24uCisgICogQHNlZSBNYXRoQ29udGV4dCNST1VORF9IQUxGX0RPV04KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST1VORF9IQUxGX0RPV049Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9IQUxGX0RPV047CisgCisgLyoqCisgICogUm91bmRpbmcgbW9kZSB0byByb3VuZCB0byBuZWFyZXN0IG5laWdoYm9yLCB3aGVyZSBhbiBlcXVpZGlzdGFudAorICAqIHZhbHVlIGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgZXZlbiBuZWlnaGJvci4KKyAgKiBAc2VlIE1hdGhDb250ZXh0I1JPVU5EX0hBTEZfRVZFTgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPVU5EX0hBTEZfRVZFTj1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfRVZFTjsKKyAKKyAvKioKKyAgKiBSb3VuZGluZyBtb2RlIHRvIHJvdW5kIHRvIG5lYXJlc3QgbmVpZ2hib3IsIHdoZXJlIGFuIGVxdWlkaXN0YW50CisgICogdmFsdWUgaXMgcm91bmRlZCB1cC4KKyAgKiBAc2VlIE1hdGhDb250ZXh0I1JPVU5EX0hBTEZfVVAKKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST1VORF9IQUxGX1VQPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUk9VTkRfSEFMRl9VUDsKKyAKKyAvKioKKyAgKiBSb3VuZGluZyBtb2RlIHRvIGFzc2VydCB0aGF0IG5vIHJvdW5kaW5nIGlzIG5lY2Vzc2FyeS4KKyAgKiBAc2VlIE1hdGhDb250ZXh0I1JPVU5EX1VOTkVDRVNTQVJZCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRfVU5ORUNFU1NBUlk9Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWTsKKyAKKyAvKioKKyAgKiBSb3VuZGluZyBtb2RlIHRvIHJvdW5kIGF3YXkgZnJvbSB6ZXJvLgorICAqIEBzZWUgTWF0aENvbnRleHQjUk9VTkRfVVAKKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST1VORF9VUD1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlJPVU5EX1VQOworIAorIC8qIHByb3BlcnRpZXMgY29uc3RhbnQgcHJpdmF0ZSAqLyAvLyBsb2NhbHMKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIGlzcG9zPTE7IC8vIGluZDogaW5kaWNhdGVzIHBvc2l0aXZlIChtdXN0IGJlIDEpCisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBpc3plcm89MDsgLy8gaW5kOiBpbmRpY2F0ZXMgemVybyAgICAgKG11c3QgYmUgMCkKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIGlzbmVnPS0xOyAvLyBpbmQ6IGluZGljYXRlcyBuZWdhdGl2ZSAobXVzdCBiZSAtMSkKKyAvLyBbbGF0ZXIgY291bGQgYWRkIE5hTiwgKy8tIGluZmluaXR5LCBoZXJlXQorIAorIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNaW5FeHA9LTk5OTk5OTk5OTsgLy8gbWluaW11bSBleHBvbmVudCBhbGxvd2VkCisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1heEV4cD05OTk5OTk5OTk7IC8vIG1heGltdW0gZXhwb25lbnQgYWxsb3dlZAorIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNaW5Bcmc9LTk5OTk5OTk5OTsgLy8gbWluaW11bSBhcmd1bWVudCBpbnRlZ2VyCisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1heEFyZz05OTk5OTk5OTk7IC8vIG1heGltdW0gYXJndW1lbnQgaW50ZWdlcgorIAorIHByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgcGxhaW5NQz1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCgwLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4pOyAvLyBjb250ZXh0IGZvciBwbGFpbiB1bmxpbWl0ZWQgbWF0aAorIAorIC8qIHByb3BlcnRpZXMgY29uc3RhbnQgcHJpdmF0ZSB1bnVzZWQgKi8gLy8gcHJlc2VudCBidXQgbm90IHJlZmVyZW5jZWQKKyAKKyAvLyBTZXJpYWxpemF0aW9uIHZlcnNpb24KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQ9ODI0NTM1NTgwNDk3NDE5ODgzMkw7CisgCisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBjb3B5cmlnaHQ9IiBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiAxOTk2LCAyMDAwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIjsKKyAKKyAvKiBwcm9wZXJ0aWVzIHN0YXRpYyBwcml2YXRlICovCisgLy8gUHJlY2FsY3VsYXRlZCBjb25zdGFudCBhcnJheXMgKHVzZWQgYnkgYnl0ZWFkZHN1YikKKyBwcml2YXRlIHN0YXRpYyBieXRlIGJ5dGVjYXJbXT1uZXcgYnl0ZVsoOTArOTkpKzFdOyAvLyBjYXJyeS9ib3Jyb3cgYXJyYXkKKyBwcml2YXRlIHN0YXRpYyBieXRlIGJ5dGVkaWdbXT1kaWdpbml0KCk7IC8vIG5leHQgZGlnaXQgYXJyYXkKKyAKKyAvKiAtLS0tLSBJbnN0YW5jZSBwcm9wZXJ0aWVzIFthbGwgcHJpdmF0ZSBhbmQgaW1tdXRhYmxlXSAtLS0tLSAqLworIC8qIHByb3BlcnRpZXMgcHJpdmF0ZSAqLworIAorIC8qKgorICAqIFRoZSBpbmRpY2F0b3IuIFRoaXMgbWF5IHRha2UgdGhlIHZhbHVlczoKKyAgKiA8dWw+CisgICogPGxpPmlzcG9zICAtLSB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlCisgICogPGxpPmlzemVybyAtLSB0aGUgbnVtYmVyIGlzIHplcm8KKyAgKiA8bGk+aXNuZWcgIC0tIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUKKyAgKiA8L3VsPgorICAqCisgICogQHNlcmlhbAorICAqLworIHByaXZhdGUgYnl0ZSBpbmQ7IC8vIGFzc3VtZWQgdW5kZWZpbmVkCisgLy8gTm90ZTogc29tZSBjb2RlIGJlbG93IGFzc3VtZXMgSU5EID0gU2lnbiBbLTEsIDAsIDFdLCBhdCBwcmVzZW50LgorIC8vIFdlIG9ubHkgbmVlZCB0d28gYml0cyBmb3IgdGhpcywgYnV0IHVzZSBhIGJ5dGUgW2Fsc28gcGVybWl0cworIC8vIHNtb290aCBmdXR1cmUgZXh0ZW5zaW9uXS4KKyAKKyAvKioKKyAgKiBUaGUgZm9ybWF0dGluZyBzdHlsZS4gVGhpcyBtYXkgdGFrZSB0aGUgdmFsdWVzOgorICAqIDx1bD4KKyAgKiA8bGk+TWF0aENvbnRleHQuUExBSU4gICAgICAgIC0tIG5vIGV4cG9uZW50IG5lZWRlZAorICAqIDxsaT5NYXRoQ29udGV4dC5TQ0lFTlRJRklDICAgLS0gc2NpZW50aWZpYyBub3RhdGlvbiByZXF1aXJlZAorICAqIDxsaT5NYXRoQ29udGV4dC5FTkdJTkVFUklORyAgLS0gZW5naW5lZXJpbmcgbm90YXRpb24gcmVxdWlyZWQKKyAgKiA8L3VsPgorICAqIDxwPgorICAqIFRoaXMgcHJvcGVydHkgaXMgYW4gb3B0aW1pemF0aW9uOyBpdCBhbGxvd3MgdXMgdG8gZGVmZXIgbnVtYmVyCisgICogbGF5b3V0IHVudGlsIGl0IGlzIGFjdHVhbGx5IG5lZWRlZCBhcyBhIHN0cmluZywgaGVuY2UgYXZvaWRpbmcKKyAgKiB1bm5lY2Vzc2FyeSBmb3JtYXR0aW5nLgorICAqCisgICogQHNlcmlhbAorICAqLworIHByaXZhdGUgYnl0ZSBmb3JtPShieXRlKWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU47IC8vIGFzc3VtZWQgUExBSU4KKyAvLyBXZSBvbmx5IG5lZWQgdHdvIGJpdHMgZm9yIHRoaXMsIGF0IHByZXNlbnQsIGJ1dCB1c2UgYSBieXRlCisgLy8gW2FnYWluLCB0byBhbGxvdyBmb3Igc21vb3RoIGZ1dHVyZSBleHRlbnNpb25dCisgCisgLyoqCisgICogVGhlIHZhbHVlIG9mIHRoZSBtYW50aXNzYS4KKyAgKiA8cD4KKyAgKiBPbmNlIGNvbnN0cnVjdGVkLCB0aGlzIG1heSBiZWNvbWUgc2hhcmVkIGJldHdlZW4gc2V2ZXJhbCBCaWdEZWNpbWFsCisgICogb2JqZWN0cywgc28gbXVzdCBub3QgYmUgYWx0ZXJlZC4KKyAgKiA8cD4KKyAgKiBGb3IgZWZmaWNpZW5jeSAoc3BlZWQpLCB0aGlzIGlzIGEgYnl0ZSBhcnJheSwgd2l0aCBlYWNoIGJ5dGUKKyAgKiB0YWtpbmcgYSB2YWx1ZSBvZiAwIC0+IDkuCisgICogPHA+CisgICogSWYgdGhlIGZpcnN0IGJ5dGUgaXMgMCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIGlzIHplcm8gKGFuZAorICAqIG1hbnQubGVuZ3RoPTEsIGV4Y2VwdCB3aGVuIGNvbnN0cnVjdGVkIGZyb20gYSBwbGFpbiBudW1iZXIsIGZvcgorICAqIGV4YW1wbGUsIDAuMDAwKS4KKyAgKgorICAqIEBzZXJpYWwKKyAgKi8KKyBwcml2YXRlIGJ5dGUgbWFudFtdOyAvLyBhc3N1bWVkIG51bGwKKyAKKyAvKioKKyAgKiBUaGUgZXhwb25lbnQuCisgICogPHA+CisgICogRm9yIGZpeGVkIHBvaW50IGFyaXRobWV0aWMsIHNjYWxlIGlzIDxjb2RlPi1leHA8L2NvZGU+LCBhbmQgY2FuCisgICogYXBwbHkgdG8gemVyby4KKyAgKgorICAqIE5vdGUgdGhhdCB0aGlzIHByb3BlcnR5IGNhbiBoYXZlIGEgdmFsdWUgbGVzcyB0aGFuIE1pbkV4cCB3aGVuCisgICogdGhlIG1hbnRpc3NhIGhhcyBtb3JlIHRoYW4gb25lIGRpZ2l0LgorICAqCisgICogQHNlcmlhbAorICAqLworIHByaXZhdGUgaW50IGV4cDsKKyAvLyBhc3N1bWVkIDAKKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogQ29uc3RydWN0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKioKKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0IGZyb20gYQorICAqIDxjb2RlPmphdmEubWF0aC5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gYXMgdGhvdWdoIHRoZSBwYXJhbWV0ZXIgaGFkCisgICogYmVlbiByZXByZXNlbnRlZCBhcyBhIDxjb2RlPlN0cmluZzwvY29kZT4gKHVzaW5nIGl0cworICAqIDxjb2RlPnRvU3RyaW5nPC9jb2RlPiBtZXRob2QpIGFuZCB0aGUKKyAgKiB7QGxpbmsgI0JpZ0RlY2ltYWwoamF2YS5sYW5nLlN0cmluZyl9IGNvbnN0cnVjdG9yIGhhZCB0aGVuIGJlZW4KKyAgKiB1c2VkLgorICAqIFRoZSBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCisgICogPHA+CisgICogPGk+KE5vdGU6IHRoaXMgY29uc3RydWN0b3IgaXMgcHJvdmlkZWQgb25seSBpbiB0aGUKKyAgKiA8Y29kZT5jb20uaWJtLmljdS5tYXRoPC9jb2RlPiB2ZXJzaW9uIG9mIHRoZSBCaWdEZWNpbWFsIGNsYXNzLgorICAqIEl0IHdvdWxkIG5vdCBiZSBwcmVzZW50IGluIGEgPGNvZGU+amF2YS5tYXRoPC9jb2RlPiB2ZXJzaW9uLik8L2k+CisgICoKKyAgKiBAcGFyYW0gYmQgVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRvIGJlIHRyYW5zbGF0ZWQuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIEJpZ0RlY2ltYWwoamF2YS5tYXRoLkJpZ0RlY2ltYWwgYmQpeworICB0aGlzKGJkLnRvU3RyaW5nKCkpOworICByZXR1cm47fQorCisgLyoqCisgICogQ29uc3RydWN0cyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdCBmcm9tIGEKKyAgKiA8Y29kZT5CaWdJbnRlZ2VyPC9jb2RlPiwgd2l0aCBzY2FsZSAwLgorICAqIDxwPgorICAqIENvbnN0cnVjdHMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aGljaCBpcyB0aGUgZXhhY3QgZGVjaW1hbAorICAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8Y29kZT5CaWdJbnRlZ2VyPC9jb2RlPiwgd2l0aCBhIHNjYWxlIG9mCisgICogemVyby4KKyAgKiBUaGUgdmFsdWUgb2YgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGlzIGlkZW50aWNhbCB0byB0aGUgdmFsdWUKKyAgKiBvZiB0aGUgPGNvZGU+QmlnSW50ZWdlcjwvY29kZT4uCisgICogVGhlIHBhcmFtZXRlciBtdXN0IG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2lsbCBjb250YWluIG9ubHkgZGVjaW1hbCBkaWdpdHMsCisgICogcHJlZml4ZWQgd2l0aCBhIGxlYWRpbmcgbWludXMgc2lnbiAoaHlwaGVuKSBpZiB0aGUKKyAgKiA8Y29kZT5CaWdJbnRlZ2VyPC9jb2RlPiBpcyBuZWdhdGl2ZS4gIEEgbGVhZGluZyB6ZXJvIHdpbGwgYmUKKyAgKiBwcmVzZW50IG9ubHkgaWYgdGhlIDxjb2RlPkJpZ0ludGVnZXI8L2NvZGU+IGlzIHplcm8uCisgICoKKyAgKiBAcGFyYW0gYmkgVGhlIDxjb2RlPkJpZ0ludGVnZXI8L2NvZGU+IHRvIGJlIGNvbnZlcnRlZC4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgQmlnRGVjaW1hbChqYXZhLm1hdGguQmlnSW50ZWdlciBiaSl7CisgIHRoaXMoYmkudG9TdHJpbmcoMTApKTsKKyAgcmV0dXJuO30KKyAvLyBleHAgcmVtYWlucyAwCisgCisgLyoqCisgICogQ29uc3RydWN0cyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdCBmcm9tIGEKKyAgKiA8Y29kZT5CaWdJbnRlZ2VyPC9jb2RlPiBhbmQgYSBzY2FsZS4KKyAgKiA8cD4KKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hpY2ggaXMgdGhlIGV4YWN0IGRlY2ltYWwKKyAgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGNvZGU+QmlnSW50ZWdlcjwvY29kZT4sIHNjYWxlZCBieSB0aGUKKyAgKiBzZWNvbmQgcGFyYW1ldGVyLCB3aGljaCBtYXkgbm90IGJlIG5lZ2F0aXZlLgorICAqIFRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gaXMgdGhlCisgICogPGNvZGU+QmlnSW50ZWdlcjwvY29kZT4gZGl2aWRlZCBieSB0ZW4gdG8gdGhlIHBvd2VyIG9mIHRoZSBzY2FsZS4KKyAgKiBUaGUgPGNvZGU+QmlnSW50ZWdlcjwvY29kZT4gcGFyYW1ldGVyIG11c3Qgbm90IGJlCisgICogPGNvZGU+bnVsbDwvY29kZT4uCisgICogPHA+CisgICogVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdpbGwgY29udGFpbiBvbmx5IGRlY2ltYWwgZGlnaXRzLCAod2l0aAorICAqIGFuIGVtYmVkZGVkIGRlY2ltYWwgcG9pbnQgZm9sbG93ZWQgYnkgPGNvZGU+c2NhbGU8L2NvZGU+IGRlY2ltYWwKKyAgKiBkaWdpdHMgaWYgdGhlIHNjYWxlIGlzIHBvc2l0aXZlKSwgcHJlZml4ZWQgd2l0aCBhIGxlYWRpbmcgbWludXMKKyAgKiBzaWduIChoeXBoZW4pIGlmIHRoZSA8Y29kZT5CaWdJbnRlZ2VyPC9jb2RlPiBpcyBuZWdhdGl2ZS4gIEEKKyAgKiBsZWFkaW5nIHplcm8gd2lsbCBiZSBwcmVzZW50IG9ubHkgaWYgdGhlIDxjb2RlPkJpZ0ludGVnZXI8L2NvZGU+IGlzCisgICogemVyby4KKyAgKgorICAqIEBwYXJhbSAgYmkgICAgVGhlIDxjb2RlPkJpZ0ludGVnZXI8L2NvZGU+IHRvIGJlIGNvbnZlcnRlZC4KKyAgKiBAcGFyYW0gIHNjYWxlIFRoZSA8Y29kZT5pbnQ8L2NvZGU+IHNwZWNpZnlpbmcgdGhlIHNjYWxlLgorICAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlmIHRoZSBzY2FsZSBpcyBuZWdhdGl2ZS4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgQmlnRGVjaW1hbChqYXZhLm1hdGguQmlnSW50ZWdlciBiaSxpbnQgc2NhbGUpeworICB0aGlzKGJpLnRvU3RyaW5nKDEwKSk7CisgIGlmIChzY2FsZTwwKSAKKyAgIHRocm93IG5ldyBqYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJOZWdhdGl2ZSBzY2FsZToiKyIgIitzY2FsZSk7CisgIGV4cD0oaW50KS1zY2FsZTsgLy8gZXhwb25lbnQgaXMgLXNjYWxlCisgIHJldHVybjt9CisKKyAvKioKKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0IGZyb20gYW4gYXJyYXkgb2YgY2hhcmFjdGVycy4KKyAgKiA8cD4KKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gYXMgdGhvdWdoIGEKKyAgKiA8Y29kZT5TdHJpbmc8L2NvZGU+IGhhZCBiZWVuIGNvbnN0cnVjdGVkIGZyb20gdGhlIGNoYXJhY3RlciBhcnJheQorICAqIGFuZCB0aGUge0BsaW5rICNCaWdEZWNpbWFsKGphdmEubGFuZy5TdHJpbmcpfSBjb25zdHJ1Y3RvciBoYWQgdGhlbgorICAqIGJlZW4gdXNlZC4gVGhlIHBhcmFtZXRlciBtdXN0IG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBVc2luZyB0aGlzIGNvbnN0cnVjdG9yIGlzIGZhc3RlciB0aGFuIHVzaW5nIHRoZQorICAqIDxjb2RlPkJpZ0RlY2ltYWwoU3RyaW5nKTwvY29kZT4gY29uc3RydWN0b3IgaWYgdGhlIHN0cmluZyBpcworICAqIGFscmVhZHkgYXZhaWxhYmxlIGluIGNoYXJhY3RlciBhcnJheSBmb3JtLgorICAqCisgICogQHBhcmFtIGluY2hhcnMgVGhlIDxjb2RlPmNoYXJbXTwvY29kZT4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtYmVyCisgICogICAgICAgICAgICAgICAgdG8gYmUgY29udmVydGVkLgorICAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQKKyAgKiAgICAgICAgICAgICAgICBudW1iZXIuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIEJpZ0RlY2ltYWwoY2hhciBpbmNoYXJzW10peworICB0aGlzKGluY2hhcnMsMCxpbmNoYXJzLmxlbmd0aCk7CisgIHJldHVybjt9CisKKyAvKioKKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0IGZyb20gYW4gYXJyYXkgb2YgY2hhcmFjdGVycy4KKyAgKiA8cD4KKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gYXMgdGhvdWdoIGEKKyAgKiA8Y29kZT5TdHJpbmc8L2NvZGU+IGhhZCBiZWVuIGNvbnN0cnVjdGVkIGZyb20gdGhlIGNoYXJhY3RlciBhcnJheQorICAqIChvciBhIHN1YmFycmF5IG9mIHRoYXQgYXJyYXkpIGFuZCB0aGUKKyAgKiB7QGxpbmsgI0JpZ0RlY2ltYWwoamF2YS5sYW5nLlN0cmluZyl9IGNvbnN0cnVjdG9yIGhhZCB0aGVuIGJlZW4KKyAgKiB1c2VkLiBUaGUgZmlyc3QgcGFyYW1ldGVyIG11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LCBhbmQgdGhlCisgICogc3ViYXJyYXkgbXVzdCBiZSB3aG9sbHkgY29udGFpbmVkIHdpdGhpbiBpdC4KKyAgKiA8cD4KKyAgKiBVc2luZyB0aGlzIGNvbnN0cnVjdG9yIGlzIGZhc3RlciB0aGFuIHVzaW5nIHRoZQorICAqIDxjb2RlPkJpZ0RlY2ltYWwoU3RyaW5nKTwvY29kZT4gY29uc3RydWN0b3IgaWYgdGhlIHN0cmluZyBpcworICAqIGFscmVhZHkgYXZhaWxhYmxlIHdpdGhpbiBhIGNoYXJhY3RlciBhcnJheS4KKyAgKgorICAqIEBwYXJhbSBpbmNoYXJzIFRoZSA8Y29kZT5jaGFyW108L2NvZGU+IGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWJlcgorICAqICAgICAgICAgICAgICAgIHRvIGJlIGNvbnZlcnRlZC4KKyAgKiBAcGFyYW0gb2Zmc2V0ICBUaGUgPGNvZGU+aW50PC9jb2RlPiBvZmZzZXQgaW50byB0aGUgYXJyYXkgb2YgdGhlCisgICogICAgICAgICAgICAgICAgc3RhcnQgb2YgdGhlIG51bWJlciB0byBiZSBjb252ZXJ0ZWQuCisgICogQHBhcmFtIGxlbmd0aCAgVGhlIDxjb2RlPmludDwvY29kZT4gbGVuZ3RoIG9mIHRoZSBudW1iZXIuCisgICogQHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWYgdGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZAorICAqICAgICAgICAgICAgICAgIG51bWJlciBmb3IgYW55IHJlYXNvbi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgQmlnRGVjaW1hbChjaGFyIGluY2hhcnNbXSxpbnQgb2Zmc2V0LGludCBsZW5ndGgpe3N1cGVyKCk7CisgIGJvb2xlYW4gZXhvdGljOworICBib29sZWFuIGhhZGV4cDsKKyAgaW50IGQ7CisgIGludCBkb3RvZmY7CisgIGludCBsYXN0OworICBpbnQgaT0wOworICBjaGFyIHNpPTA7CisgIGJvb2xlYW4gZW5lZz1mYWxzZTsKKyAgaW50IGs9MDsKKyAgaW50IGVsZW49MDsKKyAgaW50IGo9MDsKKyAgY2hhciBzaj0wOworICBpbnQgZHZhbHVlPTA7CisgIGludCBtYWc9MDsKKyAgLy8gVGhpcyBpcyB0aGUgcHJpbWFyeSBjb25zdHJ1Y3RvcjsgYWxsIGluY29taW5nIHN0cmluZ3MgZW5kIHVwCisgIC8vIGhlcmU7IGl0IHVzZXMgZXhwbGljaXQgKGlubGluZSkgcGFyc2luZyBmb3Igc3BlZWQgYW5kIHRvIGF2b2lkCisgIC8vIGdlbmVyYXRpbmcgaW50ZXJtZWRpYXRlICh0ZW1wb3JhcnkpIG9iamVjdHMgb2YgYW55IGtpbmQuCisgIC8vIDE5OTguMDYuMjU6IGV4cG9uZW50IGZvcm0gYnVpbHQgb25seSBpZiBFL2UgaW4gc3RyaW5nCisgIC8vIDE5OTguMDYuMjU6IHRyYWlsaW5nIHplcm9zIG5vdCByZW1vdmVkIGZvciB6ZXJvCisgIC8vIDE5OTkuMDMuMDY6IG5vIGVtYmVkZGVkIGJsYW5rczsgYWxsb3cgb2Zmc2V0IGFuZCBsZW5ndGgKKyAgaWYgKGxlbmd0aDw9MCkgCisgICBiYWQoaW5jaGFycyk7IC8vIGJhZCBjb252ZXJzaW9uIChlbXB0eSBzdHJpbmcpCisgIC8vIFtiYWQgb2Zmc2V0IHdpbGwgcmFpc2UgYXJyYXkgYm91bmRzIGV4Y2VwdGlvbl0KKyAgCisgIC8qIEhhbmRsZSBhbmQgc3RlcCBwYXN0IHNpZ24gKi8KKyAgaW5kPWlzcG9zOyAvLyBhc3N1bWUgcG9zaXRpdmUKKyAgaWYgKGluY2hhcnNbMF09PSgnLScpKSAKKyAgIHsKKyAgICBsZW5ndGgtLTsKKyAgICBpZiAobGVuZ3RoPT0wKSAKKyAgICAgYmFkKGluY2hhcnMpOyAvLyBub3RoaW5nIGFmdGVyIHNpZ24KKyAgICBpbmQ9aXNuZWc7CisgICAgb2Zmc2V0Kys7CisgICB9CisgIGVsc2UgCisgICBpZiAoaW5jaGFyc1swXT09KCcrJykpIAorICAgIHsKKyAgICAgbGVuZ3RoLS07CisgICAgIGlmIChsZW5ndGg9PTApIAorICAgICAgYmFkKGluY2hhcnMpOyAvLyBub3RoaW5nIGFmdGVyIHNpZ24KKyAgICAgb2Zmc2V0Kys7CisgICAgfQorICAKKyAgLyogV2UncmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBudW1iZXIgKi8KKyAgZXhvdGljPWZhbHNlOyAvLyBoYXZlIGV4dHJhIGRpZ2l0cworICBoYWRleHA9ZmFsc2U7IC8vIGhhZCBleHBsaWNpdCBleHBvbmVudAorICBkPTA7IC8vIGNvdW50IG9mIGRpZ2l0cyBmb3VuZAorICBkb3RvZmY9LTE7IC8vIG9mZnNldCB3aGVyZSBkb3Qgd2FzIGZvdW5kCisgIGxhc3Q9LTE7IC8vIGxhc3QgY2hhcmFjdGVyIG9mIG1hbnRpc3NhCisgIHtpbnQgJDE9bGVuZ3RoO2k9b2Zmc2V0O2k6Zm9yKDskMT4wOyQxLS0saSsrKXsKKyAgIHNpPWluY2hhcnNbaV07CisgICBpZiAoc2k+PScwJykgIC8vIHRlc3QgZm9yIEFyYWJpYyBkaWdpdAorICAgIGlmIChzaTw9JzknKSAKKyAgICAgeworICAgICAgbGFzdD1pOworICAgICAgZCsrOyAvLyBzdGlsbCBpbiBtYW50aXNzYQorICAgICAgY29udGludWUgaTsKKyAgICAgfQorICAgaWYgKHNpPT0nLicpIAorICAgIHsgLy8gcmVjb3JkIGFuZCBpZ25vcmUKKyAgICAgaWYgKGRvdG9mZj49MCkgCisgICAgICBiYWQoaW5jaGFycyk7IC8vIHR3byBkb3RzCisgICAgIGRvdG9mZj1pLW9mZnNldDsgLy8gb2Zmc2V0IGludG8gbWFudGlzc2EKKyAgICAgY29udGludWUgaTsKKyAgICB9CisgICBpZiAoc2khPSdlJykgCisgICAgaWYgKHNpIT0nRScpIAorICAgICB7IC8vIGV4cGVjdCBhbiBleHRyYSBkaWdpdAorICAgICAgaWYgKCghKGphdmEubGFuZy5DaGFyYWN0ZXIuaXNEaWdpdChzaSkpKSkgCisgICAgICAgYmFkKGluY2hhcnMpOyAvLyBub3QgYSBudW1iZXIKKyAgICAgIC8vIGRlZmVyIHRoZSBiYXNlIDEwIGNoZWNrIHVudGlsIGxhdGVyIHRvIGF2b2lkIGV4dHJhIG1ldGhvZCBjYWxsCisgICAgICBleG90aWM9dHJ1ZTsgLy8gd2lsbCBuZWVkIGNvbnZlcnNpb24gbGF0ZXIKKyAgICAgIGxhc3Q9aTsKKyAgICAgIGQrKzsgLy8gc3RpbGwgaW4gbWFudGlzc2EKKyAgICAgIGNvbnRpbnVlIGk7CisgICAgIH0KKyAgIC8qIEZvdW5kICdlJyBvciAnRScgLS0gbm93IHByb2Nlc3MgZXhwbGljaXQgZXhwb25lbnQgKi8KKyAgIC8vIDE5OTguMDcuMTE6IHNpZ24gbm8gbG9uZ2VyIHJlcXVpcmVkCisgICBpZiAoKGktb2Zmc2V0KT4obGVuZ3RoLTIpKSAKKyAgICBiYWQoaW5jaGFycyk7IC8vIG5vIHJvb20gZm9yIGV2ZW4gb25lIGRpZ2l0CisgICBlbmVnPWZhbHNlOworICAgaWYgKChpbmNoYXJzW2krMV0pPT0oJy0nKSkgCisgICAgeworICAgICBlbmVnPXRydWU7CisgICAgIGs9aSsyOworICAgIH0KKyAgIGVsc2UgCisgICAgaWYgKChpbmNoYXJzW2krMV0pPT0oJysnKSkgCisgICAgIGs9aSsyOworICAgIGVsc2UgCisgICAgIGs9aSsxOworICAgLy8gayBpcyBvZmZzZXQgb2YgZmlyc3QgZXhwZWN0ZWQgZGlnaXQKKyAgIGVsZW49bGVuZ3RoLSgoay1vZmZzZXQpKTsgLy8gcG9zc2libGUgbnVtYmVyIG9mIGRpZ2l0cworICAgaWYgKChlbGVuPT0wKXwoZWxlbj45KSkgCisgICAgYmFkKGluY2hhcnMpOyAvLyAwIG9yIG1vcmUgdGhhbiA5IGRpZ2l0cworICAge2ludCAkMj1lbGVuO2o9aztqOmZvcig7JDI+MDskMi0tLGorKyl7CisgICAgc2o9aW5jaGFyc1tqXTsKKyAgICBpZiAoc2o8JzAnKSAKKyAgICAgYmFkKGluY2hhcnMpOyAvLyBhbHdheXMgYmFkCisgICAgaWYgKHNqPic5JykgCisgICAgIHsgLy8gbWF5YmUgYW4gZXhvdGljIGRpZ2l0CisgICAgICBpZiAoKCEoamF2YS5sYW5nLkNoYXJhY3Rlci5pc0RpZ2l0KHNqKSkpKSAKKyAgICAgICBiYWQoaW5jaGFycyk7IC8vIG5vdCBhIG51bWJlcgorICAgICAgZHZhbHVlPWphdmEubGFuZy5DaGFyYWN0ZXIuZGlnaXQoc2osMTApOyAvLyBjaGVjayBiYXNlCisgICAgICBpZiAoZHZhbHVlPDApIAorICAgICAgIGJhZChpbmNoYXJzKTsgLy8gbm90IGJhc2UgMTAKKyAgICAgfQorICAgIGVsc2UgCisgICAgIGR2YWx1ZT0oKGludCkoc2opKS0oKGludCkoJzAnKSk7CisgICAgZXhwPShleHAqMTApK2R2YWx1ZTsKKyAgICB9CisgICB9LypqKi8KKyAgIGlmIChlbmVnKSAKKyAgICBleHA9KGludCktZXhwOyAvLyB3YXMgbmVnYXRpdmUKKyAgIGhhZGV4cD10cnVlOyAvLyByZW1lbWJlciB3ZSBoYWQgb25lCisgICBicmVhayBpOyAvLyB3ZSBhcmUgZG9uZQorICAgfQorICB9LyppKi8KKyAgCisgIC8qIEhlcmUgd2hlbiBhbGwgaW5zcGVjdGVkICovCisgIGlmIChkPT0wKSAKKyAgIGJhZChpbmNoYXJzKTsgLy8gbm8gbWFudGlzc2EgZGlnaXRzCisgIGlmIChkb3RvZmY+PTApIAorICAgZXhwPShleHArZG90b2ZmKS1kOyAvLyBhZGp1c3QgZXhwb25lbnQgaWYgaGFkIGRvdAorICAKKyAgLyogc3RyaXAgbGVhZGluZyB6ZXJvcy9kb3QgKGxlYXZlIGZpbmFsIGlmIGFsbCAwJ3MpICovCisgIHtpbnQgJDM9bGFzdC0xO2k9b2Zmc2V0O2k6Zm9yKDtpPD0kMztpKyspeworICAgc2k9aW5jaGFyc1tpXTsKKyAgIGlmIChzaT09JzAnKSAKKyAgICB7CisgICAgIG9mZnNldCsrOworICAgICBkb3RvZmYtLTsKKyAgICAgZC0tOworICAgIH0KKyAgIGVsc2UgCisgICAgaWYgKHNpPT0nLicpIAorICAgICB7CisgICAgICBvZmZzZXQrKzsgLy8gc3RlcCBwYXN0IGRvdAorICAgICAgZG90b2ZmLS07CisgICAgIH0KKyAgICBlbHNlIAorICAgICBpZiAoc2k8PSc5JykgCisgICAgICBicmVhayBpOy8qIG5vbi0wICovCisgICAgIGVsc2UgCisgICAgICB7LyogZXhvdGljICovCisgICAgICAgaWYgKChqYXZhLmxhbmcuQ2hhcmFjdGVyLmRpZ2l0KHNpLDEwKSkhPTApIAorICAgICAgICBicmVhayBpOyAvLyBub24tMCBvciBiYWQKKyAgICAgICAvLyBpcyAwIC4uIHN0cmlwIGxpa2UgJzAnCisgICAgICAgb2Zmc2V0Kys7CisgICAgICAgZG90b2ZmLS07CisgICAgICAgZC0tOworICAgICAgfQorICAgfQorICB9LyppKi8KKyAgCisgIC8qIENyZWF0ZSB0aGUgbWFudGlzc2EgYXJyYXkgKi8KKyAgbWFudD1uZXcgYnl0ZVtkXTsgLy8gd2Uga25vdyB0aGUgbGVuZ3RoCisgIGo9b2Zmc2V0OyAvLyBpbnB1dCBvZmZzZXQKKyAgaWYgKGV4b3RpYykgCisgICB7ZXhvdGljYTpkb3sgLy8gc2xvdzogY2hlY2sgZm9yIGV4b3RpY2EKKyAgICB7aW50ICQ0PWQ7aT0wO2k6Zm9yKDskND4wOyQ0LS0saSsrKXsKKyAgICAgaWYgKGk9PWRvdG9mZikgCisgICAgICBqKys7IC8vIGF0IGRvdAorICAgICBzaj1pbmNoYXJzW2pdOworICAgICBpZiAoc2o8PSc5JykgCisgICAgICBtYW50W2ldPShieXRlKSgoKGludCkoc2opKS0oKGludCkoJzAnKSkpOy8qIGVhc3kgKi8KKyAgICAgZWxzZSAKKyAgICAgIHsKKyAgICAgICBkdmFsdWU9amF2YS5sYW5nLkNoYXJhY3Rlci5kaWdpdChzaiwxMCk7CisgICAgICAgaWYgKGR2YWx1ZTwwKSAKKyAgICAgICAgYmFkKGluY2hhcnMpOyAvLyBub3QgYSBudW1iZXIgYWZ0ZXIgYWxsCisgICAgICAgbWFudFtpXT0oYnl0ZSlkdmFsdWU7CisgICAgICB9CisgICAgIGorKzsKKyAgICAgfQorICAgIH0vKmkqLworICAgfXdoaWxlKGZhbHNlKTt9LypleG90aWNhKi8KKyAgZWxzZSAKKyAgIHtzaW1wbGU6ZG97CisgICAge2ludCAkNT1kO2k9MDtpOmZvcig7JDU+MDskNS0tLGkrKyl7CisgICAgIGlmIChpPT1kb3RvZmYpIAorICAgICAgaisrOworICAgICBtYW50W2ldPShieXRlKSgoKGludCkoaW5jaGFyc1tqXSkpLSgoaW50KSgnMCcpKSk7CisgICAgIGorKzsKKyAgICAgfQorICAgIH0vKmkqLworICAgfXdoaWxlKGZhbHNlKTt9LypzaW1wbGUqLworICAKKyAgLyogTG9va3MgZ29vZC4gIFNldCB0aGUgc2lnbiBpbmRpY2F0b3IgYW5kIGZvcm0sIGFzIG5lZWRlZC4gKi8KKyAgLy8gVHJhaWxpbmcgemVyb3MgYXJlIHByZXNlcnZlZAorICAvLyBUaGUgcnVsZSBoZXJlIGZvciBmb3JtIGlzOgorICAvLyAgIElmIG5vIEUtbm90YXRpb24sIHRoZW4gcmVxdWVzdCBwbGFpbiBub3RhdGlvbgorICAvLyAgIE90aGVyd2lzZSBhY3QgYXMgdGhvdWdoIGFkZCgwLERFRkFVTFQpIGFuZCByZXF1ZXN0IHNjaWVudGlmaWMgbm90YXRpb24KKyAgLy8gW2Zvcm0gaXMgYWxyZWFkeSBQTEFJTl0KKyAgaWYgKG1hbnRbMF09PTApIAorICAgeworICAgIGluZD1pc3plcm87IC8vIGZvcmNlIHRvIHNob3cgemVybworICAgIC8vIG5lZ2F0aXZlIGV4cG9uZW50IGlzIHNpZ25pZmljYW50IChlLmcuLCAtMyBmb3IgMC4wMDApIGlmIHBsYWluCisgICAgaWYgKGV4cD4wKSAKKyAgICAgZXhwPTA7IC8vIHBvc2l0aXZlIGV4cG9uZW50IGNhbiBiZSBpZ25vcmVkCisgICAgaWYgKGhhZGV4cCkgCisgICAgIHsgLy8gemVybyBiZWNvbWVzIHNpbmdsZSBkaWdpdCBmcm9tIGFkZAorICAgICAgbWFudD1aRVJPLm1hbnQ7CisgICAgICBleHA9MDsKKyAgICAgfQorICAgfQorICBlbHNlIAorICAgeyAvLyBub24temVybworICAgIC8vIFtpbmQgd2FzIHNldCBlYXJsaWVyXQorICAgIC8vIG5vdyBkZXRlcm1pbmUgZm9ybQorICAgIGlmIChoYWRleHApIAorICAgICB7CisgICAgICBmb3JtPShieXRlKWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuU0NJRU5USUZJQzsKKyAgICAgIC8vIDE5OTkuMDYuMjkgY2hlY2sgZm9yIG92ZXJmbG93CisgICAgICBtYWc9KGV4cCttYW50Lmxlbmd0aCktMTsgLy8gdHJ1ZSBleHBvbmVudCBpbiBzY2llbnRpZmljIG5vdGF0aW9uCisgICAgICBpZiAoKG1hZzxNaW5FeHApfChtYWc+TWF4RXhwKSkgCisgICAgICAgYmFkKGluY2hhcnMpOworICAgICB9CisgICB9CisgIC8vIHNheSAnQkQoY1tdKTogbWFudFswXSBtYW50bGVuIGV4cCBpbmQgZm9ybTonIG1hbnRbMF0gbWFudC5sZW5ndGggZXhwIGluZCBmb3JtCisgIHJldHVybjsKKyAgfQorCisgLyoqCisgICogQ29uc3RydWN0cyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdCBkaXJlY3RseSBmcm9tIGEKKyAgKiA8Y29kZT5kb3VibGU8L2NvZGU+LgorICAqIDxwPgorICAqIENvbnN0cnVjdHMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aGljaCBpcyB0aGUgZXhhY3QgZGVjaW1hbAorICAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA2NC1iaXQgc2lnbmVkIGJpbmFyeSBmbG9hdGluZyBwb2ludAorICAqIHBhcmFtZXRlci4KKyAgKiA8cD4KKyAgKiBOb3RlIHRoYXQgdGhpcyBjb25zdHJ1Y3RvciBpdCBhbiBleGFjdCBjb252ZXJzaW9uOyBpdCBkb2VzIG5vdCBnaXZlCisgICogdGhlIHNhbWUgcmVzdWx0IGFzIGNvbnZlcnRpbmcgPGNvZGU+bnVtPC9jb2RlPiB0byBhCisgICogPGNvZGU+U3RyaW5nPC9jb2RlPiB1c2luZyB0aGUgPGNvZGU+RG91YmxlLnRvU3RyaW5nKCk8L2NvZGU+IG1ldGhvZAorICAqIGFuZCB0aGVuIHVzaW5nIHRoZSB7QGxpbmsgI0JpZ0RlY2ltYWwoamF2YS5sYW5nLlN0cmluZyl9CisgICogY29uc3RydWN0b3IuCisgICogVG8gZ2V0IHRoYXQgcmVzdWx0LCB1c2UgdGhlIHN0YXRpYyB7QGxpbmsgI3ZhbHVlT2YoZG91YmxlKX0KKyAgKiBtZXRob2QgdG8gY29uc3RydWN0IGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZnJvbSBhCisgICogPGNvZGU+ZG91YmxlPC9jb2RlPi4KKyAgKgorICAqIEBwYXJhbSBudW0gVGhlIDxjb2RlPmRvdWJsZTwvY29kZT4gdG8gYmUgY29udmVydGVkLgorICAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlmIHRoZSBwYXJhbWV0ZXIgaXMgaW5maW5pdGUgb3IKKyAgKiAgICAgICAgICAgIG5vdCBhIG51bWJlci4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgQmlnRGVjaW1hbChkb3VibGUgbnVtKXsKKyAgLy8gMTk5OS4wMy4wNjogdXNlIGV4YWN0bHkgdGhlIG9sZCBhbGdvcml0aG0KKyAgLy8gMjAwMC4wMS4wMTogbm90ZSB0aGF0IHRoaXMgY29uc3RydWN0b3IgZG9lcyBnaXZlIGFuIGV4YWN0IHJlc3VsdCwKKyAgLy8gICAgICAgICAgICAgc28gcGVyaGFwcyBpdCBzaG91bGQgbm90IGJlIGRlcHJlY2F0ZWQKKyAgLy8gMjAwMC4wNi4xODogbm8gbG9uZ2VyIGRlcHJlY2F0ZWQKKyAgdGhpcygobmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKG51bSkpLnRvU3RyaW5nKCkpOworICByZXR1cm47fQorCisgLyoqCisgICogQ29uc3RydWN0cyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdCBkaXJlY3RseSBmcm9tIGEKKyAgKiA8Y29kZT5pbnQ8L2NvZGU+LgorICAqIDxwPgorICAqIENvbnN0cnVjdHMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aGljaCBpcyB0aGUgZXhhY3QgZGVjaW1hbAorICAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSAzMi1iaXQgc2lnbmVkIGJpbmFyeSBpbnRlZ2VyIHBhcmFtZXRlci4KKyAgKiBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2lsbCBjb250YWluIG9ubHkgZGVjaW1hbCBkaWdpdHMsCisgICogcHJlZml4ZWQgd2l0aCBhIGxlYWRpbmcgbWludXMgc2lnbiAoaHlwaGVuKSBpZiB0aGUgcGFyYW1ldGVyIGlzCisgICogbmVnYXRpdmUuCisgICogQSBsZWFkaW5nIHplcm8gd2lsbCBiZSBwcmVzZW50IG9ubHkgaWYgdGhlIHBhcmFtZXRlciBpcyB6ZXJvLgorICAqCisgICogQHBhcmFtIG51bSBUaGUgPGNvZGU+aW50PC9jb2RlPiB0byBiZSBjb252ZXJ0ZWQuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIEJpZ0RlY2ltYWwoaW50IG51bSl7c3VwZXIoKTsKKyAgaW50IG11bjsKKyAgaW50IGk9MDsKKyAgLy8gV2UgZmFzdHBhdGggY29tbW9uZXJzCisgIGlmIChudW08PTkpIAorICAgaWYgKG51bT49KC05KSkgCisgICAge3NpbmdsZWRpZ2l0OmRveworICAgICAvLyB2ZXJ5IGNvbW1vbiBzaW5nbGUgZGlnaXQgY2FzZQorICAgICB7LypzZWxlY3QqLworICAgICBpZiAobnVtPT0wKQorICAgICAgeworICAgICAgIG1hbnQ9WkVSTy5tYW50OworICAgICAgIGluZD1pc3plcm87CisgICAgICB9CisgICAgIGVsc2UgaWYgKG51bT09MSkKKyAgICAgIHsKKyAgICAgICBtYW50PU9ORS5tYW50OworICAgICAgIGluZD1pc3BvczsKKyAgICAgIH0KKyAgICAgZWxzZSBpZiAobnVtPT0oLTEpKQorICAgICAgeworICAgICAgIG1hbnQ9T05FLm1hbnQ7CisgICAgICAgaW5kPWlzbmVnOworICAgICAgfQorICAgICBlbHNleworICAgICAgeworICAgICAgIG1hbnQ9bmV3IGJ5dGVbMV07CisgICAgICAgaWYgKG51bT4wKSAKKyAgICAgICAgeworICAgICAgICAgbWFudFswXT0oYnl0ZSludW07CisgICAgICAgICBpbmQ9aXNwb3M7CisgICAgICAgIH0KKyAgICAgICBlbHNlIAorICAgICAgICB7IC8vIG51bTwtMQorICAgICAgICAgbWFudFswXT0oYnl0ZSkoKGludCktbnVtKTsKKyAgICAgICAgIGluZD1pc25lZzsKKyAgICAgICAgfQorICAgICAgfQorICAgICB9CisgICAgIH0KKyAgICAgcmV0dXJuOworICAgIH13aGlsZShmYWxzZSk7fS8qc2luZ2xlZGlnaXQqLworICAKKyAgLyogV2Ugd29yayBvbiBuZWdhdGl2ZSBudW1iZXJzIHNvIHdlIGhhbmRsZSB0aGUgbW9zdCBuZWdhdGl2ZSBudW1iZXIgKi8KKyAgaWYgKG51bT4wKSAKKyAgIHsKKyAgICBpbmQ9aXNwb3M7CisgICAgbnVtPShpbnQpLW51bTsKKyAgIH0KKyAgZWxzZSAKKyAgIGluZD1pc25lZzsvKiBuZWdhdGl2ZSAqLyAvLyBbMCBjYXNlIGFscmVhZHkgaGFuZGxlZF0KKyAgLy8gW2l0IGlzIHF1aWNrZXIsIGhlcmUsIHRvIHByZS1jYWxjdWxhdGUgdGhlIGxlbmd0aCB3aXRoCisgIC8vIG9uZSBsb29wLCB0aGVuIGFsbG9jYXRlIGV4YWN0bHkgdGhlIHJpZ2h0IGxlbmd0aCBvZiBieXRlIGFycmF5LAorICAvLyB0aGVuIHJlLWZpbGwgaXQgd2l0aCBhbm90aGVyIGxvb3BdCisgIG11bj1udW07IC8vIHdvcmtpbmcgY29weQorICB7aT05O2k6Zm9yKDs7aS0tKXsKKyAgIG11bj1tdW4vMTA7CisgICBpZiAobXVuPT0wKSAKKyAgICBicmVhayBpOworICAgfQorICB9LyppKi8KKyAgLy8gaSBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxlZnRtb3N0IGRpZ2l0IHBsYWNlZAorICBtYW50PW5ldyBieXRlWzEwLWldOworICB7aT0oMTAtaSktMTtpOmZvcig7O2ktLSl7CisgICBtYW50W2ldPShieXRlKS0oKChieXRlKShudW0lMTApKSk7CisgICBudW09bnVtLzEwOworICAgaWYgKG51bT09MCkgCisgICAgYnJlYWsgaTsKKyAgIH0KKyAgfS8qaSovCisgIHJldHVybjsKKyAgfQorCisgLyoqCisgICogQ29uc3RydWN0cyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdCBkaXJlY3RseSBmcm9tIGEKKyAgKiA8Y29kZT5sb25nPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hpY2ggaXMgdGhlIGV4YWN0IGRlY2ltYWwKKyAgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgNjQtYml0IHNpZ25lZCBiaW5hcnkgaW50ZWdlciBwYXJhbWV0ZXIuCisgICogVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdpbGwgY29udGFpbiBvbmx5IGRlY2ltYWwgZGlnaXRzLAorICAqIHByZWZpeGVkIHdpdGggYSBsZWFkaW5nIG1pbnVzIHNpZ24gKGh5cGhlbikgaWYgdGhlIHBhcmFtZXRlciBpcworICAqIG5lZ2F0aXZlLgorICAqIEEgbGVhZGluZyB6ZXJvIHdpbGwgYmUgcHJlc2VudCBvbmx5IGlmIHRoZSBwYXJhbWV0ZXIgaXMgemVyby4KKyAgKgorICAqIEBwYXJhbSBudW0gVGhlIDxjb2RlPmxvbmc8L2NvZGU+IHRvIGJlIGNvbnZlcnRlZC4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgQmlnRGVjaW1hbChsb25nIG51bSl7c3VwZXIoKTsKKyAgbG9uZyBtdW47CisgIGludCBpPTA7CisgIC8vIE5vdCByZWFsbHkgd29ydGggZmFzdHBhdGhpbmcgY29tbW9uZXJzIGluIHRoaXMgY29uc3RydWN0b3IgW2Fsc28sCisgIC8vIHdlIHVzZSB0aGlzIHRvIGNvbnN0cnVjdCB0aGUgc3RhdGljIGNvbnN0YW50c10uCisgIC8vIFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbjogdGhpcyhTdHJpbmcudmFsdWVPZihudW0pLnRvQ2hhckFycmF5KCkpCisgIC8qIFdlIHdvcmsgb24gbmVnYXRpdmUgbnVtIHNvIHdlIGhhbmRsZSB0aGUgbW9zdCBuZWdhdGl2ZSBudW1iZXIgKi8KKyAgaWYgKG51bT4wKSAKKyAgIHsKKyAgICBpbmQ9aXNwb3M7CisgICAgbnVtPShsb25nKS1udW07CisgICB9CisgIGVsc2UgCisgICBpZiAobnVtPT0wKSAKKyAgICBpbmQ9aXN6ZXJvOworICAgZWxzZSAKKyAgICBpbmQ9aXNuZWc7LyogbmVnYXRpdmUgKi8KKyAgbXVuPW51bTsKKyAge2k9MTg7aTpmb3IoOztpLS0peworICAgbXVuPW11bi8xMDsKKyAgIGlmIChtdW49PTApIAorICAgIGJyZWFrIGk7CisgICB9CisgIH0vKmkqLworICAvLyBpIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVmdG1vc3QgZGlnaXQgcGxhY2VkCisgIG1hbnQ9bmV3IGJ5dGVbMTktaV07CisgIHtpPSgxOS1pKS0xO2k6Zm9yKDs7aS0tKXsKKyAgIG1hbnRbaV09KGJ5dGUpLSgoKGJ5dGUpKG51bSUxMCkpKTsKKyAgIG51bT1udW0vMTA7CisgICBpZiAobnVtPT0wKSAKKyAgICBicmVhayBpOworICAgfQorICB9LyppKi8KKyAgcmV0dXJuOworICB9CisKKyAvKioKKyAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0IGZyb20gYSA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAqIDxwPgorICAqIENvbnN0cnVjdHMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmcm9tIHRoZSBwYXJhbWV0ZXIsIHdoaWNoIG11c3QKKyAgKiBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4gYW5kIG11c3QgcmVwcmVzZW50IGEgdmFsaWQgPGk+bnVtYmVyPC9pPiwKKyAgKiBhcyBkZXNjcmliZWQgZm9ybWFsbHkgaW4gdGhlIGRvY3VtZW50YXRpb24gcmVmZXJyZWQgdG8KKyAgKiB7QGxpbmsgQmlnRGVjaW1hbCBhYm92ZX0uCisgICogPHA+CisgICogSW4gc3VtbWFyeSwgbnVtYmVycyBpbiA8Y29kZT5TdHJpbmc8L2NvZGU+IGZvcm0gbXVzdCBoYXZlIGF0IGxlYXN0CisgICogb25lIGRpZ2l0LCBtYXkgaGF2ZSBhIGxlYWRpbmcgc2lnbiwgbWF5IGhhdmUgYSBkZWNpbWFsIHBvaW50LCBhbmQKKyAgKiBleHBvbmVudGlhbCBub3RhdGlvbiBtYXkgYmUgdXNlZC4gIFRoZXkgZm9sbG93IGNvbnZlbnRpb25hbCBzeW50YXgsCisgICogYW5kIG1heSBub3QgY29udGFpbiBibGFua3MuCisgICogPHA+CisgICogU29tZSB2YWxpZCBzdHJpbmdzIGZyb20gd2hpY2ggYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBtaWdodAorICAqIGJlIGNvbnN0cnVjdGVkIGFyZToKKyAgKiA8cHJlPgorICAqICAgICAgICIwIiAgICAgICAgIC0tIFplcm8KKyAgKiAgICAgICIxMiIgICAgICAgICAtLSBBIHdob2xlIG51bWJlcgorICAqICAgICAiLTc2IiAgICAgICAgIC0tIEEgc2lnbmVkIHdob2xlIG51bWJlcgorICAqICAgICAgIjEyLjcwIiAgICAgIC0tIFNvbWUgZGVjaW1hbCBwbGFjZXMKKyAgKiAgICAgIiswLjAwMyIgICAgICAtLSBQbHVzIHNpZ24gaXMgYWxsb3dlZAorICAqICAgICAgIjE3LiIgICAgICAgIC0tIFRoZSBzYW1lIGFzIDE3CisgICogICAgICAgICIuNSIgICAgICAgLS0gVGhlIHNhbWUgYXMgMC41CisgICogICAgICAiNEUrOSIgICAgICAgLS0gRXhwb25lbnRpYWwgbm90YXRpb24KKyAgKiAgICAgICAiMC43M2UtNyIgICAtLSBFeHBvbmVudGlhbCBub3RhdGlvbgorICAqIDwvcHJlPgorICAqIDxwPgorICAqIChFeHBvbmVudGlhbCBub3RhdGlvbiBtZWFucyB0aGF0IHRoZSBudW1iZXIgaW5jbHVkZXMgYW4gb3B0aW9uYWwKKyAgKiBzaWduIGFuZCBhIHBvd2VyIG9mIHRlbiBmb2xsb3dpbmcgYW4gJzwvY29kZT5FPC9jb2RlPicgdGhhdAorICAqIGluZGljYXRlcyBob3cgdGhlIGRlY2ltYWwgcG9pbnQgd2lsbCBiZSBzaGlmdGVkLiAgVGh1cyB0aGUKKyAgKiA8Y29kZT4iNEUrOSI8L2NvZGU+IGFib3ZlIGlzIGp1c3QgYSBzaG9ydCB3YXkgb2Ygd3JpdGluZworICAqIDxjb2RlPjQwMDAwMDAwMDA8L2NvZGU+LCBhbmQgdGhlIDxjb2RlPiIwLjczZS03IjwvY29kZT4gaXMgc2hvcnQKKyAgKiBmb3IgPGNvZGU+MC4wMDAwMDAwNzM8L2NvZGU+LikKKyAgKiA8cD4KKyAgKiBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gY29uc3RydWN0ZWQgZnJvbSB0aGUgU3RyaW5nIGlzIGluIGEKKyAgKiBzdGFuZGFyZCBmb3JtLCB3aXRoIG5vIGJsYW5rcywgYXMgdGhvdWdoIHRoZQorICAqIHtAbGluayAjYWRkKEJpZ0RlY2ltYWwpfSBtZXRob2QgaGFkIGJlZW4gdXNlZCB0byBhZGQgemVybyB0byB0aGUKKyAgKiBudW1iZXIgd2l0aCB1bmxpbWl0ZWQgcHJlY2lzaW9uLgorICAqIElmIHRoZSBzdHJpbmcgdXNlcyBleHBvbmVudGlhbCBub3RhdGlvbiAodGhhdCBpcywgaW5jbHVkZXMgYW4KKyAgKiA8Y29kZT5lPC9jb2RlPiBvciBhbiA8Y29kZT5FPC9jb2RlPiksIHRoZW4gdGhlCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gbnVtYmVyIHdpbGwgYmUgZXhwcmVzc2VkIGluIHNjaWVudGlmaWMKKyAgKiBub3RhdGlvbiAod2hlcmUgdGhlIHBvd2VyIG9mIHRlbiBpcyBhZGp1c3RlZCBzbyB0aGVyZSBpcyBhIHNpbmdsZQorICAqIG5vbi16ZXJvIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50KTsgaW4gdGhpcyBjYXNlIGlmCisgICogdGhlIG51bWJlciBpcyB6ZXJvIHRoZW4gaXQgd2lsbCBiZSBleHByZXNzZWQgYXMgdGhlIHNpbmdsZSBkaWdpdCAwLAorICAqIGFuZCBpZiBub24temVybyBpdCB3aWxsIGhhdmUgYW4gZXhwb25lbnQgdW5sZXNzIHRoYXQgZXhwb25lbnQgd291bGQKKyAgKiBiZSAwLiAgVGhlIGV4cG9uZW50IG11c3QgZml0IGluIG5pbmUgZGlnaXRzIGJvdGggYmVmb3JlIGFuZCBhZnRlciBpdAorICAqIGlzIGV4cHJlc3NlZCBpbiBzY2llbnRpZmljIG5vdGF0aW9uLgorICAqIDxwPgorICAqIEFueSBkaWdpdHMgaW4gdGhlIHBhcmFtZXRlciBtdXN0IGJlIGRlY2ltYWw7IHRoYXQgaXMsCisgICogPGNvZGU+Q2hhcmFjdGVyLmRpZ2l0KGMsIDEwKTwvY29kZT4gKHdoZXJlIDwvY29kZT5jPC9jb2RlPiBpcyB0aGUKKyAgKiBjaGFyYWN0ZXIgaW4gcXVlc3Rpb24pIHdvdWxkIG5vdCByZXR1cm4gLTEuCisgICoKKyAgKiBAcGFyYW0gc3RyaW5nIFRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IHRvIGJlIGNvbnZlcnRlZC4KKyAgKiBAdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkCisgICogbnVtYmVyLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBCaWdEZWNpbWFsKGphdmEubGFuZy5TdHJpbmcgc3RyaW5nKXsKKyAgdGhpcyhzdHJpbmcudG9DaGFyQXJyYXkoKSwwLHN0cmluZy5sZW5ndGgoKSk7CisgIHJldHVybjt9CisKKyAvKiA8c2dtbD4gTWFrZSBhIGRlZmF1bHQgQmlnRGVjaW1hbCBvYmplY3QgZm9yIGxvY2FsIHVzZS4gPC9zZ21sPiAqLworIAorIHByaXZhdGUgQmlnRGVjaW1hbCgpe3N1cGVyKCk7CisgIHJldHVybjsKKyAgfQorCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qIE9wZXJhdG9yIG1ldGhvZHMgW21ldGhvZHMgd2hpY2ggdGFrZSBhIGNvbnRleHQgcGFyYW1ldGVyXSAgICAgICAgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisgLyoqCisgICogUmV0dXJucyBhIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZQorICAqIHZhbHVlIG9mIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4uCisgICogPHA+CisgICogVGhlIHNhbWUgYXMge0BsaW5rICNhYnMoTWF0aENvbnRleHQpfSwgd2hlcmUgdGhlIGNvbnRleHQgaXMKKyAgKiA8Y29kZT5uZXcgTWF0aENvbnRleHQoMCwgTWF0aENvbnRleHQuUExBSU4pPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBkZWNpbWFsIHBhcnQgKHRoZSBzY2FsZSkgb2YgdGhlIHJlc3VsdCB3aWxsCisgICogYmUgPGNvZGU+dGhpcy5zY2FsZSgpPC9jb2RlPgorICAqCisgICogQHJldHVybiBBIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZQorICAqICAgICAgICAgdmFsdWUgb2YgdGhpcyA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGFicygpeworICByZXR1cm4gdGhpcy5hYnMocGxhaW5NQyk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUKKyAgKiBvZiB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LgorICAqIDxwPgorICAqIElmIHRoZSBjdXJyZW50IG9iamVjdCBpcyB6ZXJvIG9yIHBvc2l0aXZlLCB0aGVuIHRoZSBzYW1lIHJlc3VsdCBhcworICAqIGludm9raW5nIHRoZSB7QGxpbmsgI3BsdXMoTWF0aENvbnRleHQpfSBtZXRob2Qgd2l0aCB0aGUgc2FtZQorICAqIHBhcmFtZXRlciBpcyByZXR1cm5lZC4KKyAgKiBPdGhlcndpc2UsIHRoZSBzYW1lIHJlc3VsdCBhcyBpbnZva2luZyB0aGUKKyAgKiB7QGxpbmsgI25lZ2F0ZShNYXRoQ29udGV4dCl9IG1ldGhvZCB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlciBpcworICAqIHJldHVybmVkLgorICAqCisgICogQHBhcmFtICBzZXQgVGhlIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBhcml0aG1ldGljIHNldHRpbmdzLgorICAqIEByZXR1cm4gICAgIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlCisgICogICAgICAgICAgICAgdmFsdWUgb2YgdGhpcyA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGFicyhjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IHNldCl7CisgIGlmICh0aGlzLmluZD09aXNuZWcpIAorICAgcmV0dXJuIHRoaXMubmVnYXRlKHNldCk7CisgIHJldHVybiB0aGlzLnBsdXMoc2V0KTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzCisgICogPGNvZGU+dGhpcytyaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljLgorICAqIDxwPgorICAqIFRoZSBzYW1lIGFzIHtAbGluayAjYWRkKEJpZ0RlY2ltYWwsIE1hdGhDb250ZXh0KX0sCisgICogd2hlcmUgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGlzIDxjb2RlPnJoczwvY29kZT4sCisgICogYW5kIHRoZSBjb250ZXh0IGlzIDxjb2RlPm5ldyBNYXRoQ29udGV4dCgwLCBNYXRoQ29udGV4dC5QTEFJTik8L2NvZGU+LgorICAqIDxwPgorICAqIFRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcGFydCAodGhlIHNjYWxlKSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUKKyAgKiB0aGUgbWF4aW11bSBvZiB0aGUgc2NhbGVzIG9mIHRoZSB0d28gb3BlcmFuZHMuCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgYWRkaXRpb24uCisgICogQHJldHVybiAgICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgICAgIDxjb2RlPnRoaXMrcmhzPC9jb2RlPiwgdXNpbmcgZml4ZWQgcG9pbnQgYXJpdGhtZXRpYy4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGFkZChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzKXsKKyAgcmV0dXJuIHRoaXMuYWRkKHJocyxwbGFpbk1DKTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzIDxjb2RlPnRoaXMrcmhzPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBJbXBsZW1lbnRzIHRoZSBhZGRpdGlvbiAoPGI+PGNvZGU+KzwvY29kZT48L2I+KSBvcGVyYXRvcgorICAqIChhcyBkZWZpbmVkIGluIHRoZSBkZWNpbWFsIGRvY3VtZW50YXRpb24sIHNlZSB7QGxpbmsgQmlnRGVjaW1hbAorICAqIGNsYXNzIGhlYWRlcn0pLAorICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBvYmplY3QuCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgYWRkaXRpb24uCisgICogQHBhcmFtICBzZXQgVGhlIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBhcml0aG1ldGljIHNldHRpbmdzLgorICAqIEByZXR1cm4gICAgIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiAgICAgICAgICAgICA8Y29kZT50aGlzK3JoczwvY29kZT4uCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBhZGQoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJocyxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0IHNldCl7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBsaHM7CisgIGludCByZXFkaWc7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByZXM7CisgIGJ5dGUgdXNlbFtdOworICBpbnQgdXNlbGxlbjsKKyAgYnl0ZSB1c2VyW107CisgIGludCB1c2VybGVuOworICBpbnQgbmV3bGVuPTA7CisgIGludCB0bGVuPTA7CisgIGludCBtdWx0PTA7CisgIGJ5dGUgdFtdPW51bGw7CisgIGludCBpYT0wOworICBpbnQgaWI9MDsKKyAgaW50IGVhPTA7CisgIGludCBlYj0wOworICBieXRlIGNhPTA7CisgIGJ5dGUgY2I9MDsKKyAgLyogZGV0ZXJtaW5lIHJlcXVlc3RlZCBkaWdpdHMgYW5kIGZvcm0gKi8KKyAgaWYgKHNldC5sb3N0RGlnaXRzKSAKKyAgIGNoZWNrZGlnaXRzKHJocyxzZXQuZGlnaXRzKTsKKyAgbGhzPXRoaXM7IC8vIG5hbWUgZm9yIGNsYXJpdHkgYW5kIHByb3h5CisgIAorICAvKiBRdWljayBleGl0IGZvciBhZGQgZmxvYXRpbmcgMCAqLworICAvLyBwbHVzKCkgd2lsbCBvcHRpbWl6ZSB0byByZXR1cm4gc2FtZSBvYmplY3QgaWYgcG9zc2libGUKKyAgaWYgKGxocy5pbmQ9PTApIAorICAgaWYgKHNldC5mb3JtIT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOKSAKKyAgICByZXR1cm4gcmhzLnBsdXMoc2V0KTsKKyAgaWYgKHJocy5pbmQ9PTApIAorICAgaWYgKHNldC5mb3JtIT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOKSAKKyAgICByZXR1cm4gbGhzLnBsdXMoc2V0KTsKKyAgCisgIC8qIFByZXBhcmUgbnVtYmVycyAocm91bmQsIHVubGVzcyB1bmxpbWl0ZWQgcHJlY2lzaW9uKSAqLworICByZXFkaWc9c2V0LmRpZ2l0czsgLy8gbG9jYWwgY29weSAoaGVhdmlseSB1c2VkKQorICBpZiAocmVxZGlnPjApIAorICAgeworICAgIGlmIChsaHMubWFudC5sZW5ndGg+cmVxZGlnKSAKKyAgICAgbGhzPWNsb25lKGxocykucm91bmQoc2V0KTsKKyAgICBpZiAocmhzLm1hbnQubGVuZ3RoPnJlcWRpZykgCisgICAgIHJocz1jbG9uZShyaHMpLnJvdW5kKHNldCk7CisgICAvLyBbd2UgY291bGQgcmV1c2UgdGhlIG5ldyBMSFMgZm9yIHJlc3VsdCBpbiB0aGlzIGNhc2VdCisgICB9CisgIAorICByZXM9bmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgpOyAvLyBidWlsZCByZXN1bHQgaGVyZQorICAKKyAgLyogTm93IHNlZSBob3cgbXVjaCB3ZSBoYXZlIHRvIHBhZCBvciB0cnVuY2F0ZSBsaHMgb3IgcmhzIGluIG9yZGVyCisgICAgIHRvIGFsaWduIHRoZSBudW1iZXJzLiAgSWYgb25lIG51bWJlciBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZQorICAgICBvdGhlciwgdGhlbiB0aGUgc21hbGxlciBjYW5ub3QgYWZmZWN0IHRoZSBhbnN3ZXIgW2J1dCB3ZSBtYXkKKyAgICAgc3RpbGwgbmVlZCB0byBwYWQgd2l0aCB1cCB0byBESUdJVFMgdHJhaWxpbmcgemVyb3NdLiAqLworICAvLyBOb3RlIHNpZ24gbWF5IGJlIDAgaWYgZGlnaXRzIChyZXFkaWcpIGlzIDAKKyAgLy8gdXNlbCBhbmQgdXNlciB3aWxsIGJlIHRoZSBieXRlIGFycmF5cyBwYXNzZWQgdG8gdGhlIGFkZGVyOyB3ZSdsbAorICAvLyB1c2UgdGhlbSBvbiBhbGwgcGF0aHMgZXhjZXB0IHF1aWNrIGV4aXRzCisgIHVzZWw9bGhzLm1hbnQ7CisgIHVzZWxsZW49bGhzLm1hbnQubGVuZ3RoOworICB1c2VyPXJocy5tYW50OworICB1c2VybGVuPXJocy5tYW50Lmxlbmd0aDsKKyAge3BhZGRlcjpkb3svKnNlbGVjdCovCisgIGlmIChsaHMuZXhwPT1yaHMuZXhwKQorICAgey8qIG5vIHBhZGRpbmcgbmVlZGVkICovCisgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24sIGFuZCBmYXN0ZXN0LCBwYXRoCisgICAgcmVzLmV4cD1saHMuZXhwOworICAgfQorICBlbHNlIGlmIChsaHMuZXhwPnJocy5leHApCisgICB7IC8vIG5lZWQgdG8gcGFkIGxocyBhbmQvb3IgdHJ1bmNhdGUgcmhzCisgICAgbmV3bGVuPSh1c2VsbGVuK2xocy5leHApLXJocy5leHA7CisgICAgLyogSWYsIGFmdGVyIHBhZCwgbGhzIHdvdWxkIGJlIGxvbmdlciB0aGFuIHJocyBieSBkaWdpdHMrMSBvcgorICAgICAgIG1vcmUgKGFuZCBkaWdpdHM+MCkgdGhlbiByaHMgY2Fubm90IGFmZmVjdCBhbnN3ZXIsIHNvIHdlIG9ubHkKKyAgICAgICBuZWVkIHRvIHBhZCB1cCB0byBhIGxlbmd0aCBvZiBESUdJVFMrMS4gKi8KKyAgICBpZiAobmV3bGVuPj0oKHVzZXJsZW4rcmVxZGlnKSsxKSkgCisgICAgIGlmIChyZXFkaWc+MCkgCisgICAgICB7CisgICAgICAgLy8gTEhTIGlzIHN1ZmZpY2llbnQKKyAgICAgICByZXMubWFudD11c2VsOworICAgICAgIHJlcy5leHA9bGhzLmV4cDsKKyAgICAgICByZXMuaW5kPWxocy5pbmQ7CisgICAgICAgaWYgKHVzZWxsZW48cmVxZGlnKSAKKyAgICAgICAgeyAvLyBuZWVkIDAgcGFkZGluZworICAgICAgICAgcmVzLm1hbnQ9ZXh0ZW5kKGxocy5tYW50LHJlcWRpZyk7CisgICAgICAgICByZXMuZXhwPXJlcy5leHAtKChyZXFkaWctdXNlbGxlbikpOworICAgICAgICB9CisgICAgICAgcmV0dXJuIHJlcy5maW5pc2goc2V0LGZhbHNlKTsKKyAgICAgIH0KKyAgICAvLyBSSFMgbWF5IGFmZmVjdCByZXN1bHQKKyAgICByZXMuZXhwPXJocy5leHA7IC8vIGV4cGVjdGVkIGZpbmFsIGV4cG9uZW50CisgICAgaWYgKG5ld2xlbj4ocmVxZGlnKzEpKSAKKyAgICAgaWYgKHJlcWRpZz4wKSAKKyAgICAgIHsKKyAgICAgICAvLyBMSFMgd2lsbCBiZSBtYXg7IFJIUyB0cnVuY2F0ZWQKKyAgICAgICB0bGVuPShuZXdsZW4tcmVxZGlnKS0xOyAvLyB0cnVuY2F0aW9uIGxlbmd0aAorICAgICAgIHVzZXJsZW49dXNlcmxlbi10bGVuOworICAgICAgIHJlcy5leHA9cmVzLmV4cCt0bGVuOworICAgICAgIG5ld2xlbj1yZXFkaWcrMTsKKyAgICAgIH0KKyAgICBpZiAobmV3bGVuPnVzZWxsZW4pIAorICAgICB1c2VsbGVuPW5ld2xlbjsgLy8gbmVlZCB0byBwYWQgTEhTCisgICB9CisgIGVsc2V7IC8vIG5lZWQgdG8gcGFkIHJocyBhbmQvb3IgdHJ1bmNhdGUgbGhzCisgICBuZXdsZW49KHVzZXJsZW4rcmhzLmV4cCktbGhzLmV4cDsKKyAgIGlmIChuZXdsZW4+PSgodXNlbGxlbityZXFkaWcpKzEpKSAKKyAgICBpZiAocmVxZGlnPjApIAorICAgICB7CisgICAgICAvLyBSSFMgaXMgc3VmZmljaWVudAorICAgICAgcmVzLm1hbnQ9dXNlcjsKKyAgICAgIHJlcy5leHA9cmhzLmV4cDsKKyAgICAgIHJlcy5pbmQ9cmhzLmluZDsKKyAgICAgIGlmICh1c2VybGVuPHJlcWRpZykgCisgICAgICAgeyAvLyBuZWVkIDAgcGFkZGluZworICAgICAgICByZXMubWFudD1leHRlbmQocmhzLm1hbnQscmVxZGlnKTsKKyAgICAgICAgcmVzLmV4cD1yZXMuZXhwLSgocmVxZGlnLXVzZXJsZW4pKTsKKyAgICAgICB9CisgICAgICByZXR1cm4gcmVzLmZpbmlzaChzZXQsZmFsc2UpOworICAgICB9CisgICAvLyBMSFMgbWF5IGFmZmVjdCByZXN1bHQKKyAgIHJlcy5leHA9bGhzLmV4cDsgLy8gZXhwZWN0ZWQgZmluYWwgZXhwb25lbnQKKyAgIGlmIChuZXdsZW4+KHJlcWRpZysxKSkgCisgICAgaWYgKHJlcWRpZz4wKSAKKyAgICAgeworICAgICAgLy8gUkhTIHdpbGwgYmUgbWF4OyBMSFMgdHJ1bmNhdGVkCisgICAgICB0bGVuPShuZXdsZW4tcmVxZGlnKS0xOyAvLyB0cnVuY2F0aW9uIGxlbmd0aAorICAgICAgdXNlbGxlbj11c2VsbGVuLXRsZW47CisgICAgICByZXMuZXhwPXJlcy5leHArdGxlbjsKKyAgICAgIG5ld2xlbj1yZXFkaWcrMTsKKyAgICAgfQorICAgaWYgKG5ld2xlbj51c2VybGVuKSAKKyAgICB1c2VybGVuPW5ld2xlbjsgLy8gbmVlZCB0byBwYWQgUkhTCisgIH0KKyAgfXdoaWxlKGZhbHNlKTt9LypwYWRkZXIqLworICAKKyAgLyogT0ssIHdlIGhhdmUgYWxpZ25lZCBtYW50aXNzYXMuICBOb3cgYWRkIG9yIHN1YnRyYWN0LiAqLworICAvLyAxOTk4LjA2LjI3IFNpZ24gbWF5IG5vdyBiZSAwIFtlLmcuLCAwLjAwMF0gLi4gdHJlYXQgYXMgcG9zaXRpdmUKKyAgLy8gMTk5OS4wNS4yNyBBbGxvdyBmb3IgMDAgb24gbGhzIFtpcyBub3QgbGFyZ2VyIHRoYW4gMiBvbiByaHNdCisgIC8vIDE5OTkuMDcuMTAgQWxsb3cgZm9yIDAwIG9uIHJocyBbaXMgbm90IGxhcmdlciB0aGFuIDIgb24gcmhzXQorICBpZiAobGhzLmluZD09aXN6ZXJvKSAKKyAgIHJlcy5pbmQ9aXNwb3M7CisgIGVsc2UgCisgICByZXMuaW5kPWxocy5pbmQ7IC8vIGxpa2VseSBzaWduLCBhbGwgcGF0aHMKKyAgaWYgKCgobGhzLmluZD09aXNuZWcpPzE6MCk9PSgocmhzLmluZD09aXNuZWcpPzE6MCkpICAvLyBzYW1lIHNpZ24sIDAgbm9uLW5lZ2F0aXZlCisgICBtdWx0PTE7CisgIGVsc2UgCisgICB7c2lnbmRpZmY6ZG97IC8vIGRpZmZlcmVudCBzaWducywgc28gc3VidHJhY3Rpb24gaXMgbmVlZGVkCisgICAgbXVsdD0tMTsgLy8gd2lsbCBjYXVzZSBzdWJ0cmFjdAorICAgIC8qIEJlZm9yZSB3ZSBjYW4gc3VidHJhY3Qgd2UgbXVzdCBkZXRlcm1pbmUgd2hpY2ggaXMgdGhlIGxhcmdlciwKKyAgICAgICBhcyBvdXIgYWRkL3N1YnRyYWN0IHJvdXRpbmUgb25seSBoYW5kbGVzIG5vbi1uZWdhdGl2ZSByZXN1bHRzCisgICAgICAgc28gd2UgbWF5IG5lZWQgdG8gc3dhcCB0aGUgb3BlcmFuZHMuICovCisgICAge3N3YXB0ZXN0OmRvey8qc2VsZWN0Ki8KKyAgICBpZiAocmhzLmluZD09aXN6ZXJvKQorICAgICA7IC8vIG9yaWdpbmFsIEEgYmlnZ2VyCisgICAgZWxzZSBpZiAoKHVzZWxsZW48dXNlcmxlbil8KGxocy5pbmQ9PWlzemVybykpCisgICAgIHsgLy8gb3JpZ2luYWwgQiBiaWdnZXIKKyAgICAgIHQ9dXNlbDsKKyAgICAgIHVzZWw9dXNlcjsKKyAgICAgIHVzZXI9dDsgLy8gc3dhcAorICAgICAgdGxlbj11c2VsbGVuOworICAgICAgdXNlbGxlbj11c2VybGVuOworICAgICAgdXNlcmxlbj10bGVuOyAvLyAuLgorICAgICAgcmVzLmluZD0oYnl0ZSktcmVzLmluZDsgLy8gYW5kIHNldCBzaWduCisgICAgIH0KKyAgICBlbHNlIGlmICh1c2VsbGVuPnVzZXJsZW4pCisgICAgIDsgLy8gb3JpZ2luYWwgQSBiaWdnZXIKKyAgICBlbHNleworICAgICB7LyogbG9naWNhbCBsZW5ndGhzIHRoZSBzYW1lICovIC8vIG5lZWQgY29tcGFyZQorICAgICAgLyogbWF5IHN0aWxsIG5lZWQgdG8gc3dhcDogY29tcGFyZSB0aGUgc3RyaW5ncyAqLworICAgICAgaWE9MDsKKyAgICAgIGliPTA7CisgICAgICBlYT11c2VsLmxlbmd0aC0xOworICAgICAgZWI9dXNlci5sZW5ndGgtMTsKKyAgICAgIHtjb21wYXJlOmZvcig7Oyl7CisgICAgICAgaWYgKGlhPD1lYSkgCisgICAgICAgIGNhPXVzZWxbaWFdOworICAgICAgIGVsc2UgCisgICAgICAgIHsKKyAgICAgICAgIGlmIChpYj5lYikgCisgICAgICAgICAgey8qIGlkZW50aWNhbCAqLworICAgICAgICAgICBpZiAoc2V0LmZvcm0hPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4pIAorICAgICAgICAgICAgcmV0dXJuIFpFUk87CisgICAgICAgICAgIC8vIFtpZiBQTEFJTiB3ZSBtdXN0IGRvIHRoZSBzdWJ0cmFjdCwgaW4gY2FzZSBvZiAwLjAwMCByZXN1bHRzXQorICAgICAgICAgICBicmVhayBjb21wYXJlOworICAgICAgICAgIH0KKyAgICAgICAgIGNhPShieXRlKTA7CisgICAgICAgIH0KKyAgICAgICBpZiAoaWI8PWViKSAKKyAgICAgICAgY2I9dXNlcltpYl07CisgICAgICAgZWxzZSAKKyAgICAgICAgY2I9KGJ5dGUpMDsKKyAgICAgICBpZiAoY2EhPWNiKSAKKyAgICAgICAgeworICAgICAgICAgaWYgKGNhPGNiKSAKKyAgICAgICAgICB7Lyogc3dhcCBuZWVkZWQgKi8KKyAgICAgICAgICAgdD11c2VsOworICAgICAgICAgICB1c2VsPXVzZXI7CisgICAgICAgICAgIHVzZXI9dDsgLy8gc3dhcAorICAgICAgICAgICB0bGVuPXVzZWxsZW47CisgICAgICAgICAgIHVzZWxsZW49dXNlcmxlbjsKKyAgICAgICAgICAgdXNlcmxlbj10bGVuOyAvLyAuLgorICAgICAgICAgICByZXMuaW5kPShieXRlKS1yZXMuaW5kOworICAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrIGNvbXBhcmU7CisgICAgICAgIH0KKyAgICAgICAvKiBtYW50aXNzYXMgdGhlIHNhbWUsIHNvIGZhciAqLworICAgICAgIGlhKys7CisgICAgICAgaWIrKzsKKyAgICAgICB9CisgICAgICB9Lypjb21wYXJlKi8KKyAgICAgfSAvLyBsZW5ndGhzIHRoZSBzYW1lCisgICAgfQorICAgIH13aGlsZShmYWxzZSk7fS8qc3dhcHRlc3QqLworICAgfXdoaWxlKGZhbHNlKTt9LypzaWduZGlmZiovCisgIAorICAvKiBoZXJlLCBBIGlzID4gQiBpZiBzdWJ0cmFjdGluZyAqLworICAvLyBhZGQgW0ErQioxXSBvciBzdWJ0cmFjdCBbQSsoQiotMSldCisgIHJlcy5tYW50PWJ5dGVhZGRzdWIodXNlbCx1c2VsbGVuLHVzZXIsdXNlcmxlbixtdWx0LGZhbHNlKTsKKyAgLy8gW3JldXNlIHBvc3NpYmxlIG9ubHkgYWZ0ZXIgY2hvcDsgYWNjb3VudGluZyBtYWtlcyBub3Qgd29ydGh3aGlsZV0KKyAgCisgIC8vIEZpbmlzaCgpIHJvdW5kcyBiZWZvcmUgc3RyaXBwaW5nIGxlYWRpbmcgMCdzLCB0aGVuIHNldHMgZm9ybSwgZXRjLgorICByZXR1cm4gcmVzLmZpbmlzaChzZXQsZmFsc2UpOworICB9CisKKyAvKioKKyAgKiBDb21wYXJlcyB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRvIGFub3RoZXIsIHVzaW5nIHVubGltaXRlZAorICAqIHByZWNpc2lvbi4KKyAgKiA8cD4KKyAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgI2NvbXBhcmVUbyhCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCl9LAorICAqIHdoZXJlIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBpcyA8Y29kZT5yaHM8L2NvZGU+LAorICAqIGFuZCB0aGUgY29udGV4dCBpcyA8Y29kZT5uZXcgTWF0aENvbnRleHQoMCwgTWF0aENvbnRleHQuUExBSU4pPC9jb2RlPi4KKyAgKgorICAqIEBwYXJhbSAgcmhzIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgIHRoZSBjb21wYXJpc29uLgorICAqIEByZXR1cm4gICAgIEFuIDxjb2RlPmludDwvY29kZT4gd2hvc2UgdmFsdWUgaXMgLTEsIDAsIG9yIDEgYXMKKyAgKiAgICAgICAgICAgICA8Y29kZT50aGlzPC9jb2RlPiBpcyBudW1lcmljYWxseSBsZXNzIHRoYW4sIGVxdWFsIHRvLAorICAqICAgICAgICAgICAgIG9yIGdyZWF0ZXIgdGhhbiA8Y29kZT5yaHM8L2NvZGU+LgorICAqIEBzZWUgICAgI2NvbXBhcmVUbyhPYmplY3QpCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGludCBjb21wYXJlVG8oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJocyl7CisgIHJldHVybiB0aGlzLmNvbXBhcmVUbyhyaHMscGxhaW5NQyk7CisgIH0KKworIC8qKgorICAqIENvbXBhcmVzIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gdG8gYW5vdGhlci4KKyAgKiA8cD4KKyAgKiBJbXBsZW1lbnRzIG51bWVyaWMgY29tcGFyaXNvbiwKKyAgKiAoYXMgZGVmaW5lZCBpbiB0aGUgZGVjaW1hbCBkb2N1bWVudGF0aW9uLCBzZWUge0BsaW5rIEJpZ0RlY2ltYWwKKyAgKiBjbGFzcyBoZWFkZXJ9KSwKKyAgKiBhbmQgcmV0dXJucyBhIHJlc3VsdCBvZiB0eXBlIDxjb2RlPmludDwvY29kZT4uCisgICogPHA+CisgICogVGhlIHJlc3VsdCB3aWxsIGJlOgorICAqIDx0YWJsZSBjZWxscGFkZGluZz0yPjx0cj4KKyAgKiA8dGQgYWxpZ249cmlnaHQ+PGI+LTE8L2I+PC90ZD4KKyAgKiA8dGQ+aWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIGxlc3MgdGhhbiB0aGUgZmlyc3QgcGFyYW1ldGVyPC90ZD4KKyAgKiA8L3RyPjx0cj4KKyAgKiA8dGQgYWxpZ249cmlnaHQ+PGI+MDwvYj48L3RkPgorICAqIDx0ZD5pZiB0aGUgY3VycmVudCBvYmplY3QgaXMgZXF1YWwgdG8gdGhlIGZpcnN0IHBhcmFtZXRlcjwvdGQ+CisgICogPC90cj48dHI+CisgICogPHRkIGFsaWduPXJpZ2h0PjxiPjE8L2I+PC90ZD4KKyAgKiA8dGQ+aWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgZmlyc3QgcGFyYW1ldGVyLjwvdGQ+CisgICogPC90cj48L3RhYmxlPgorICAqIDxwPgorICAqIEEge0BsaW5rICNjb21wYXJlVG8oT2JqZWN0KX0gbWV0aG9kIGlzIGFsc28gcHJvdmlkZWQuCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgY29tcGFyaXNvbi4KKyAgKiBAcGFyYW0gIHNldCBUaGUgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IGFyaXRobWV0aWMgc2V0dGluZ3MuCisgICogQHJldHVybiAgICAgQW4gPGNvZGU+aW50PC9jb2RlPiB3aG9zZSB2YWx1ZSBpcyAtMSwgMCwgb3IgMSBhcworICAqICAgICAgICAgICAgIDxjb2RlPnRoaXM8L2NvZGU+IGlzIG51bWVyaWNhbGx5IGxlc3MgdGhhbiwgZXF1YWwgdG8sCisgICogICAgICAgICAgICAgb3IgZ3JlYXRlciB0aGFuIDxjb2RlPnJoczwvY29kZT4uCisgICogQHNlZSAgICAjY29tcGFyZVRvKE9iamVjdCkKKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgaW50IGNvbXBhcmVUbyhjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgc2V0KXsKKyAgaW50IHRoaXNsZW5ndGg9MDsKKyAgaW50IGk9MDsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIG5ld3JoczsKKyAgLy8gcmhzPW51bGwgd2lsbCByYWlzZSBOdWxsUG9pbnRlckV4Y2VwdGlvbiwgYXMgcGVyIENvbXBhcmFibGUgaW50ZXJmYWNlCisgIGlmIChzZXQubG9zdERpZ2l0cykgCisgICBjaGVja2RpZ2l0cyhyaHMsc2V0LmRpZ2l0cyk7CisgIC8vIFthZGQgd2lsbCByZWNoZWNrIGluIHNsb3dwYXRoIGNhc2VzIC4uIGJ1dCB3b3VsZCByZXBvcnQgLXJoc10KKyAgaWYgKCh0aGlzLmluZD09cmhzLmluZCkmKHRoaXMuZXhwPT1yaHMuZXhwKSkgCisgICB7CisgICAgLyogc2lnbiAmIGV4cG9uZW50IHRoZSBzYW1lIFt2ZXJ5IGNvbW1vbl0gKi8KKyAgICB0aGlzbGVuZ3RoPXRoaXMubWFudC5sZW5ndGg7CisgICAgaWYgKHRoaXNsZW5ndGg8cmhzLm1hbnQubGVuZ3RoKSAKKyAgICAgcmV0dXJuIChieXRlKS10aGlzLmluZDsKKyAgICBpZiAodGhpc2xlbmd0aD5yaHMubWFudC5sZW5ndGgpIAorICAgICByZXR1cm4gdGhpcy5pbmQ7CisgICAgLyogbGVuZ3RocyBhcmUgdGhlIHNhbWU7IHdlIGNhbiBkbyBhIHN0cmFpZ2h0IG1hbnRpc3NhIGNvbXBhcmUKKyAgICAgICB1bmxlc3MgbWF5YmUgcm91bmRpbmcgW3JvdW5kaW5nIGlzIHZlcnkgdW51c3VhbF0gKi8KKyAgICBpZiAoKHRoaXNsZW5ndGg8PXNldC5kaWdpdHMpfChzZXQuZGlnaXRzPT0wKSkgCisgICAgIHsKKyAgICAgIHtpbnQgJDY9dGhpc2xlbmd0aDtpPTA7aTpmb3IoOyQ2PjA7JDYtLSxpKyspeworICAgICAgIGlmICh0aGlzLm1hbnRbaV08cmhzLm1hbnRbaV0pIAorICAgICAgICByZXR1cm4gKGJ5dGUpLXRoaXMuaW5kOworICAgICAgIGlmICh0aGlzLm1hbnRbaV0+cmhzLm1hbnRbaV0pIAorICAgICAgICByZXR1cm4gdGhpcy5pbmQ7CisgICAgICAgfQorICAgICAgfS8qaSovCisgICAgICByZXR1cm4gMDsgLy8gaWRlbnRpY2FsCisgICAgIH0KKyAgIC8qIGRyb3AgdGhyb3VnaCBmb3IgZnVsbCBjb21wYXJpc29uICovCisgICB9CisgIGVsc2UgCisgICB7CisgICAgLyogTW9yZSBmYXN0cGF0aHMgcG9zc2libGUgKi8KKyAgICBpZiAodGhpcy5pbmQ8cmhzLmluZCkgCisgICAgIHJldHVybiAtMTsKKyAgICBpZiAodGhpcy5pbmQ+cmhzLmluZCkgCisgICAgIHJldHVybiAxOworICAgfQorICAvKiBjYXJyeSBvdXQgYSBzdWJ0cmFjdCB0byBtYWtlIHRoZSBjb21wYXJpc29uICovCisgIG5ld3Jocz1jbG9uZShyaHMpOyAvLyBzYWZlIGNvcHkKKyAgbmV3cmhzLmluZD0oYnl0ZSktbmV3cmhzLmluZDsgLy8gcHJlcGFyZSB0byBzdWJ0cmFjdAorICByZXR1cm4gdGhpcy5hZGQobmV3cmhzLHNldCkuaW5kOyAvLyBhZGQsIGFuZCByZXR1cm4gc2lnbiBvZiByZXN1bHQKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzCisgICogPGNvZGU+dGhpcy9yaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljLgorICAqIDxwPgorICAqIFRoZSBzYW1lIGFzIHtAbGluayAjZGl2aWRlKEJpZ0RlY2ltYWwsIGludCl9LAorICAqIHdoZXJlIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBpcyA8Y29kZT5yaHM8L2NvZGU+LAorICAqIGFuZCB0aGUgcm91bmRpbmcgbW9kZSBpcyB7QGxpbmsgTWF0aENvbnRleHQjUk9VTkRfSEFMRl9VUH0uCisgICoKKyAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBkZWNpbWFsIHBhcnQgKHRoZSBzY2FsZSkgb2YgdGhlIHJlc3VsdCB3aWxsIGJlCisgICogdGhlIHNhbWUgYXMgdGhlIHNjYWxlIG9mIHRoZSBjdXJyZW50IG9iamVjdCwgaWYgdGhlIGxhdHRlciB3ZXJlCisgICogZm9ybWF0dGVkIHdpdGhvdXQgZXhwb25lbnRpYWwgbm90YXRpb24uCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgZGl2aXNpb24uCisgICogQHJldHVybiAgICAgQSBwbGFpbiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgICAgIDxjb2RlPnRoaXMvcmhzPC9jb2RlPiwgdXNpbmcgZml4ZWQgcG9pbnQgYXJpdGhtZXRpYy4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+cmhzPC9jb2RlPiBpcyB6ZXJvLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZGl2aWRlKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByaHMpeworICByZXR1cm4gdGhpcy5kb2RpdmlkZSgnRCcscmhzLHBsYWluTUMsLTEpOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgcGxhaW4gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiA8Y29kZT50aGlzL3JoczwvY29kZT4sIHVzaW5nIGZpeGVkIHBvaW50IGFyaXRobWV0aWMgYW5kIGEKKyAgKiByb3VuZGluZyBtb2RlLgorICAqIDxwPgorICAqIFRoZSBzYW1lIGFzIHtAbGluayAjZGl2aWRlKEJpZ0RlY2ltYWwsIGludCwgaW50KX0sCisgICogd2hlcmUgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGlzIDxjb2RlPnJoczwvY29kZT4sCisgICogYW5kIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIDxjb2RlPnRoaXMuc2NhbGUoKTwvY29kZT4sIGFuZAorICAqIHRoZSB0aGlyZCBpcyA8Y29kZT5yb3VuZDwvY29kZT4uCisgICogPHA+CisgICogVGhlIGxlbmd0aCBvZiB0aGUgZGVjaW1hbCBwYXJ0ICh0aGUgc2NhbGUpIG9mIHRoZSByZXN1bHQgd2lsbAorICAqIHRoZXJlZm9yZSBiZSB0aGUgc2FtZSBhcyB0aGUgc2NhbGUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0LCBpZiB0aGUKKyAgKiBsYXR0ZXIgd2VyZSBmb3JtYXR0ZWQgd2l0aG91dCBleHBvbmVudGlhbCBub3RhdGlvbi4KKyAgKiA8cD4KKyAgKiBAcGFyYW0gIHJocyAgIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgICAgdGhlIGRpdmlzaW9uLgorICAqIEBwYXJhbSAgcm91bmQgVGhlIDxjb2RlPmludDwvY29kZT4gcm91bmRpbmcgbW9kZSB0byBiZSB1c2VkIGZvcgorICAqICAgICAgICAgICAgICAgdGhlIGRpdmlzaW9uIChzZWUgdGhlIHtAbGluayBNYXRoQ29udGV4dH0gY2xhc3MpLgorICAqIEByZXR1cm4gICAgICAgQSBwbGFpbiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgICAgICAgPGNvZGU+dGhpcy9yaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljCisgICogICAgICAgICAgICAgICBhbmQgdGhlIHNwZWNpZmllZCByb3VuZGluZyBtb2RlLgorICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIDxjb2RlPnJvdW5kPC9jb2RlPiBpcyBub3QgYQorICAqICAgICAgICAgICAgICAgdmFsaWQgcm91bmRpbmcgbW9kZS4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+cmhzPC9jb2RlPiBpcyB6ZXJvLgorICAqIEB0aHJvd3MgQXJpdGhtZXRpY0V4Y2VwdGlvbiBpZiA8Y29kZT5yb3VuZDwvY29kZT4gaXMge0BsaW5rCisgICogICAgICAgICAgICAgICBNYXRoQ29udGV4dCNST1VORF9VTk5FQ0VTU0FSWX0gYW5kCisgICogICAgICAgICAgICAgICA8Y29kZT50aGlzLnNjYWxlKCk8L2NvZGU+IGlzIGluc3VmZmljaWVudCB0bworICAqICAgICAgICAgICAgICAgcmVwcmVzZW50IHRoZSByZXN1bHQgZXhhY3RseS4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGRpdmlkZShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzLGludCByb3VuZCl7CisgIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgc2V0OworICBzZXQ9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOLGZhbHNlLHJvdW5kKTsgLy8gW2NoZWNrcyByb3VuZCwgdG9vXQorICByZXR1cm4gdGhpcy5kb2RpdmlkZSgnRCcscmhzLHNldCwtMSk7IC8vIHRha2Ugc2NhbGUgZnJvbSBMSFMKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzCisgICogPGNvZGU+dGhpcy9yaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljIGFuZCBhCisgICogZ2l2ZW4gc2NhbGUgYW5kIHJvdW5kaW5nIG1vZGUuCisgICogPHA+CisgICogVGhlIHNhbWUgYXMge0BsaW5rICNkaXZpZGUoQmlnRGVjaW1hbCwgTWF0aENvbnRleHQpfSwKKyAgKiB3aGVyZSB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gaXMgPGNvZGU+cmhzPC9jb2RlPiwKKyAgKiA8Y29kZT5uZXcgTWF0aENvbnRleHQoMCwgTWF0aENvbnRleHQuUExBSU4sIGZhbHNlLCByb3VuZCk8L2NvZGU+LAorICAqIGV4Y2VwdCB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcGFydCAodGhlIHNjYWxlKSB0byBiZSB1c2VkCisgICogZm9yIHRoZSByZXN1bHQgaXMgZXhwbGljaXQgcmF0aGVyIHRoYW4gYmVpbmcgdGFrZW4gZnJvbQorICAqIDxjb2RlPnRoaXM8L2NvZGU+LgorICAqIDxwPgorICAqIFRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcGFydCAodGhlIHNjYWxlKSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUKKyAgKiB0aGUgc2FtZSBhcyB0aGUgc2NhbGUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0LCBpZiB0aGUgbGF0dGVyIHdlcmUKKyAgKiBmb3JtYXR0ZWQgd2l0aG91dCBleHBvbmVudGlhbCBub3RhdGlvbi4KKyAgKiA8cD4KKyAgKiBAcGFyYW0gIHJocyAgIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgICAgdGhlIGRpdmlzaW9uLgorICAqIEBwYXJhbSAgc2NhbGUgVGhlIDxjb2RlPmludDwvY29kZT4gc2NhbGUgdG8gYmUgdXNlZCBmb3IgdGhlIHJlc3VsdC4KKyAgKiBAcGFyYW0gIHJvdW5kIFRoZSA8Y29kZT5pbnQ8L2NvZGU+IHJvdW5kaW5nIG1vZGUgdG8gYmUgdXNlZCBmb3IKKyAgKiAgICAgICAgICAgICAgIHRoZSBkaXZpc2lvbiAoc2VlIHRoZSB7QGxpbmsgTWF0aENvbnRleHR9IGNsYXNzKS4KKyAgKiBAcmV0dXJuICAgICAgIEEgcGxhaW4gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiAgICAgICAgICAgICAgIDxjb2RlPnRoaXMvcmhzPC9jb2RlPiwgdXNpbmcgZml4ZWQgcG9pbnQgYXJpdGhtZXRpYworICAqICAgICAgICAgICAgICAgYW5kIHRoZSBzcGVjaWZpZWQgcm91bmRpbmcgbW9kZS4KKyAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiA8Y29kZT5yb3VuZDwvY29kZT4gaXMgbm90IGEKKyAgKiAgICAgICAgICAgICAgIHZhbGlkIHJvdW5kaW5nIG1vZGUuCisgICogQHRocm93cyBBcml0aG1ldGljRXhjZXB0aW9uIGlmIDxjb2RlPnJoczwvY29kZT4gaXMgemVyby4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+c2NhbGU8L2NvZGU+IGlzIG5lZ2F0aXZlLgorICAqIEB0aHJvd3MgQXJpdGhtZXRpY0V4Y2VwdGlvbiBpZiA8Y29kZT5yb3VuZDwvY29kZT4gaXMge0BsaW5rCisgICogICAgICAgICAgICAgICBNYXRoQ29udGV4dCNST1VORF9VTk5FQ0VTU0FSWX0gYW5kIDxjb2RlPnNjYWxlPC9jb2RlPgorICAqICAgICAgICAgICAgICAgaXMgaW5zdWZmaWNpZW50IHRvIHJlcHJlc2VudCB0aGUgcmVzdWx0IGV4YWN0bHkuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBkaXZpZGUoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJocyxpbnQgc2NhbGUsaW50IHJvdW5kKXsKKyAgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQ7CisgIGlmIChzY2FsZTwwKSAKKyAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiTmVnYXRpdmUgc2NhbGU6IisiICIrc2NhbGUpOworICBzZXQ9bmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoMCxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOLGZhbHNlLHJvdW5kKTsgLy8gW2NoZWNrcyByb3VuZF0KKyAgcmV0dXJuIHRoaXMuZG9kaXZpZGUoJ0QnLHJocyxzZXQsc2NhbGUpOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMgPGNvZGU+dGhpcy9yaHM8L2NvZGU+LgorICAqIDxwPgorICAqIEltcGxlbWVudHMgdGhlIGRpdmlzaW9uICg8Yj48Y29kZT4vPC9jb2RlPjwvYj4pIG9wZXJhdG9yCisgICogKGFzIGRlZmluZWQgaW4gdGhlIGRlY2ltYWwgZG9jdW1lbnRhdGlvbiwgc2VlIHtAbGluayBCaWdEZWNpbWFsCisgICogY2xhc3MgaGVhZGVyfSksCisgICogYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdC4KKyAgKgorICAqIEBwYXJhbSAgcmhzIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgIHRoZSBkaXZpc2lvbi4KKyAgKiBAcGFyYW0gIHNldCBUaGUgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IGFyaXRobWV0aWMgc2V0dGluZ3MuCisgICogQHJldHVybiAgICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgICAgIDxjb2RlPnRoaXMvcmhzPC9jb2RlPi4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+cmhzPC9jb2RlPiBpcyB6ZXJvLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZGl2aWRlKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByaHMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQpeworICByZXR1cm4gdGhpcy5kb2RpdmlkZSgnRCcscmhzLHNldCwtMSk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgYSBwbGFpbiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcyB0aGUgaW50ZWdlcgorICAqIHBhcnQgb2YgPGNvZGU+dGhpcy9yaHM8L2NvZGU+LgorICAqIDxwPgorICAqIFRoZSBzYW1lIGFzIHtAbGluayAjZGl2aWRlSW50ZWdlcihCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCl9LAorICAqIHdoZXJlIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBpcyA8Y29kZT5yaHM8L2NvZGU+LAorICAqIGFuZCB0aGUgY29udGV4dCBpcyA8Y29kZT5uZXcgTWF0aENvbnRleHQoMCwgTWF0aENvbnRleHQuUExBSU4pPC9jb2RlPi4KKyAgKgorICAqIEBwYXJhbSAgcmhzIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgIHRoZSBpbnRlZ2VyIGRpdmlzaW9uLgorICAqIEByZXR1cm4gICAgIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMgdGhlIGludGVnZXIKKyAgKiAgICAgICAgICAgICBwYXJ0IG9mIDxjb2RlPnRoaXMvcmhzPC9jb2RlPi4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+cmhzPC9jb2RlPiBpcyB6ZXJvLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgZGl2aWRlSW50ZWdlcihjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzKXsKKyAgLy8gc2NhbGUgMCB0byBkcm9wIC4wMDAgd2hlbiBwbGFpbgorICByZXR1cm4gdGhpcy5kb2RpdmlkZSgnSScscmhzLHBsYWluTUMsMCk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcyB0aGUgaW50ZWdlcgorICAqIHBhcnQgb2YgPGNvZGU+dGhpcy9yaHM8L2NvZGU+LgorICAqIDxwPgorICAqIEltcGxlbWVudHMgdGhlIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IKKyAgKiAoYXMgZGVmaW5lZCBpbiB0aGUgZGVjaW1hbCBkb2N1bWVudGF0aW9uLCBzZWUge0BsaW5rIEJpZ0RlY2ltYWwKKyAgKiBjbGFzcyBoZWFkZXJ9KSwKKyAgKiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0LgorICAqCisgICogQHBhcmFtICByaHMgVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGZvciB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mCisgICogICAgICAgICAgICAgdGhlIGludGVnZXIgZGl2aXNpb24uCisgICogQHBhcmFtICBzZXQgVGhlIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBhcml0aG1ldGljIHNldHRpbmdzLgorICAqIEByZXR1cm4gICAgIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMgdGhlIGludGVnZXIKKyAgKiAgICAgICAgICAgICBwYXJ0IG9mIDxjb2RlPnRoaXMvcmhzPC9jb2RlPi4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+cmhzPC9jb2RlPiBpcyB6ZXJvLgorICAqIEB0aHJvd3MgQXJpdGhtZXRpY0V4Y2VwdGlvbiBpZiB0aGUgcmVzdWx0IHdpbGwgbm90IGZpdCBpbiB0aGUKKyAgKiAgICAgICAgICAgICBudW1iZXIgb2YgZGlnaXRzIHNwZWNpZmllZCBmb3IgdGhlIGNvbnRleHQuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBkaXZpZGVJbnRlZ2VyKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByaHMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQpeworICAvLyBzY2FsZSAwIHRvIGRyb3AgLjAwMCB3aGVuIHBsYWluCisgIHJldHVybiB0aGlzLmRvZGl2aWRlKCdJJyxyaHMsc2V0LDApOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgcGxhaW4gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiB0aGUgbWF4aW11bSBvZiA8Y29kZT50aGlzPC9jb2RlPiBhbmQgPGNvZGU+cmhzPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgI21heChCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCl9LAorICAqIHdoZXJlIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBpcyA8Y29kZT5yaHM8L2NvZGU+LAorICAqIGFuZCB0aGUgY29udGV4dCBpcyA8Y29kZT5uZXcgTWF0aENvbnRleHQoMCwgTWF0aENvbnRleHQuUExBSU4pPC9jb2RlPi4KKyAgKgorICAqIEBwYXJhbSAgcmhzIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgIHRoZSBjb21wYXJpc29uLgorICAqIEByZXR1cm4gICAgIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiAgICAgICAgICAgICB0aGUgbWF4aW11bSBvZiA8Y29kZT50aGlzPC9jb2RlPiBhbmQgPGNvZGU+cmhzPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIG1heChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzKXsKKyAgcmV0dXJuIHRoaXMubWF4KHJocyxwbGFpbk1DKTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzCisgICogdGhlIG1heGltdW0gb2YgPGNvZGU+dGhpczwvY29kZT4gYW5kIDxjb2RlPnJoczwvY29kZT4uCisgICogPHA+CisgICogUmV0dXJucyB0aGUgbGFyZ2VyIG9mIHRoZSBjdXJyZW50IG9iamVjdCBhbmQgdGhlIGZpcnN0IHBhcmFtZXRlci4KKyAgKiA8cD4KKyAgKiBJZiBjYWxsaW5nIHRoZSB7QGxpbmsgI2NvbXBhcmVUbyhCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCl9IG1ldGhvZAorICAqIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyB3b3VsZCByZXR1cm4gPGNvZGU+MTwvY29kZT4gb3IKKyAgKiA8Y29kZT4wPC9jb2RlPiwgdGhlbiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlCisgICoge0BsaW5rICNwbHVzKE1hdGhDb250ZXh0KX0gbWV0aG9kIG9uIHRoZSBjdXJyZW50IG9iamVjdCAodXNpbmcgdGhlCisgICogc2FtZSA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gcGFyYW1ldGVyKSBpcyByZXR1cm5lZC4KKyAgKiBPdGhlcndpc2UsIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUge0BsaW5rICNwbHVzKE1hdGhDb250ZXh0KX0KKyAgKiBtZXRob2Qgb24gdGhlIGZpcnN0IHBhcmFtZXRlciBvYmplY3QgKHVzaW5nIHRoZSBzYW1lCisgICogPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IHBhcmFtZXRlcikgaXMgcmV0dXJuZWQuCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgY29tcGFyaXNvbi4KKyAgKiBAcGFyYW0gIHNldCBUaGUgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IGFyaXRobWV0aWMgc2V0dGluZ3MuCisgICogQHJldHVybiAgICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgICAgIHRoZSBtYXhpbXVtIG9mIDxjb2RlPnRoaXM8L2NvZGU+IGFuZCA8Y29kZT5yaHM8L2NvZGU+LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbWF4KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByaHMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQpeworICBpZiAoKHRoaXMuY29tcGFyZVRvKHJocyxzZXQpKT49MCkgCisgICByZXR1cm4gdGhpcy5wbHVzKHNldCk7CisgIGVsc2UgCisgICByZXR1cm4gcmhzLnBsdXMoc2V0KTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzCisgICogdGhlIG1pbmltdW0gb2YgPGNvZGU+dGhpczwvY29kZT4gYW5kIDxjb2RlPnJoczwvY29kZT4uCisgICogPHA+CisgICogVGhlIHNhbWUgYXMge0BsaW5rICNtaW4oQmlnRGVjaW1hbCwgTWF0aENvbnRleHQpfSwKKyAgKiB3aGVyZSB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gaXMgPGNvZGU+cmhzPC9jb2RlPiwKKyAgKiBhbmQgdGhlIGNvbnRleHQgaXMgPGNvZGU+bmV3IE1hdGhDb250ZXh0KDAsIE1hdGhDb250ZXh0LlBMQUlOKTwvY29kZT4uCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgY29tcGFyaXNvbi4KKyAgKiBAcmV0dXJuICAgICBBIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzCisgICogICAgICAgICAgICAgdGhlIG1pbmltdW0gb2YgPGNvZGU+dGhpczwvY29kZT4gYW5kIDxjb2RlPnJoczwvY29kZT4uCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBtaW4oY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJocyl7CisgIHJldHVybiB0aGlzLm1pbihyaHMscGxhaW5NQyk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqIHRoZSBtaW5pbXVtIG9mIDxjb2RlPnRoaXM8L2NvZGU+IGFuZCA8Y29kZT5yaHM8L2NvZGU+LgorICAqIDxwPgorICAqIFJldHVybnMgdGhlIHNtYWxsZXIgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGFuZCB0aGUgZmlyc3QgcGFyYW1ldGVyLgorICAqIDxwPgorICAqIElmIGNhbGxpbmcgdGhlIHtAbGluayAjY29tcGFyZVRvKEJpZ0RlY2ltYWwsIE1hdGhDb250ZXh0KX0gbWV0aG9kCisgICogd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIHdvdWxkIHJldHVybiA8Y29kZT4tMTwvY29kZT4gb3IKKyAgKiA8Y29kZT4wPC9jb2RlPiwgdGhlbiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlCisgICoge0BsaW5rICNwbHVzKE1hdGhDb250ZXh0KX0gbWV0aG9kIG9uIHRoZSBjdXJyZW50IG9iamVjdCAodXNpbmcgdGhlCisgICogc2FtZSA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gcGFyYW1ldGVyKSBpcyByZXR1cm5lZC4KKyAgKiBPdGhlcndpc2UsIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUge0BsaW5rICNwbHVzKE1hdGhDb250ZXh0KX0KKyAgKiBtZXRob2Qgb24gdGhlIGZpcnN0IHBhcmFtZXRlciBvYmplY3QgKHVzaW5nIHRoZSBzYW1lCisgICogPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IHBhcmFtZXRlcikgaXMgcmV0dXJuZWQuCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgY29tcGFyaXNvbi4KKyAgKiBAcGFyYW0gIHNldCBUaGUgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IGFyaXRobWV0aWMgc2V0dGluZ3MuCisgICogQHJldHVybiAgICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgICAgIHRoZSBtaW5pbXVtIG9mIDxjb2RlPnRoaXM8L2NvZGU+IGFuZCA8Y29kZT5yaHM8L2NvZGU+LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbWluKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByaHMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQpeworICBpZiAoKHRoaXMuY29tcGFyZVRvKHJocyxzZXQpKTw9MCkgCisgICByZXR1cm4gdGhpcy5wbHVzKHNldCk7CisgIGVsc2UgCisgICByZXR1cm4gcmhzLnBsdXMoc2V0KTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzCisgICogPGNvZGU+dGhpcypyaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljLgorICAqIDxwPgorICAqIFRoZSBzYW1lIGFzIHtAbGluayAjYWRkKEJpZ0RlY2ltYWwsIE1hdGhDb250ZXh0KX0sCisgICogd2hlcmUgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGlzIDxjb2RlPnJoczwvY29kZT4sCisgICogYW5kIHRoZSBjb250ZXh0IGlzIDxjb2RlPm5ldyBNYXRoQ29udGV4dCgwLCBNYXRoQ29udGV4dC5QTEFJTik8L2NvZGU+LgorICAqIDxwPgorICAqIFRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcGFydCAodGhlIHNjYWxlKSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUKKyAgKiB0aGUgc3VtIG9mIHRoZSBzY2FsZXMgb2YgdGhlIG9wZXJhbmRzLCBpZiB0aGV5IHdlcmUgZm9ybWF0dGVkCisgICogd2l0aG91dCBleHBvbmVudGlhbCBub3RhdGlvbi4KKyAgKgorICAqIEBwYXJhbSAgcmhzIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgIHRoZSBtdWx0aXBsaWNhdGlvbi4KKyAgKiBAcmV0dXJuICAgICBBIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzCisgICogICAgICAgICAgICAgPGNvZGU+dGhpcypyaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbXVsdGlwbHkoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJocyl7CisgIHJldHVybiB0aGlzLm11bHRpcGx5KHJocyxwbGFpbk1DKTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzIDxjb2RlPnRoaXMqcmhzPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBJbXBsZW1lbnRzIHRoZSBtdWx0aXBsaWNhdGlvbiAoPGI+PGNvZGU+KjwvY29kZT48L2I+KSBvcGVyYXRvcgorICAqIChhcyBkZWZpbmVkIGluIHRoZSBkZWNpbWFsIGRvY3VtZW50YXRpb24sIHNlZSB7QGxpbmsgQmlnRGVjaW1hbAorICAqIGNsYXNzIGhlYWRlcn0pLAorICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBvYmplY3QuCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgbXVsdGlwbGljYXRpb24uCisgICogQHBhcmFtICBzZXQgVGhlIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBhcml0aG1ldGljIHNldHRpbmdzLgorICAqIEByZXR1cm4gICAgIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiAgICAgICAgICAgICA8Y29kZT50aGlzKnJoczwvY29kZT4uCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBtdWx0aXBseShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgc2V0KXsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGxoczsKKyAgaW50IHBhZGRpbmc7CisgIGludCByZXFkaWc7CisgIGJ5dGUgbXVsdGVyW109bnVsbDsKKyAgYnl0ZSBtdWx0YW5kW109bnVsbDsKKyAgaW50IG11bHRhbmRsZW47CisgIGludCBhY2NsZW49MDsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJlczsKKyAgYnl0ZSBhY2NbXTsKKyAgaW50IG49MDsKKyAgYnl0ZSBtdWx0PTA7CisgIGlmIChzZXQubG9zdERpZ2l0cykgCisgICBjaGVja2RpZ2l0cyhyaHMsc2V0LmRpZ2l0cyk7CisgIGxocz10aGlzOyAvLyBuYW1lIGZvciBjbGFyaXR5IGFuZCBwcm94eQorICAKKyAgLyogUHJlcGFyZSBudW1iZXJzICh0cnVuY2F0ZSwgdW5sZXNzIHVubGltaXRlZCBwcmVjaXNpb24pICovCisgIHBhZGRpbmc9MDsgLy8gdHJhaWxpbmcgMCdzIHRvIGFkZAorICByZXFkaWc9c2V0LmRpZ2l0czsgLy8gbG9jYWwgY29weQorICBpZiAocmVxZGlnPjApIAorICAgeworICAgIGlmIChsaHMubWFudC5sZW5ndGg+cmVxZGlnKSAKKyAgICAgbGhzPWNsb25lKGxocykucm91bmQoc2V0KTsKKyAgICBpZiAocmhzLm1hbnQubGVuZ3RoPnJlcWRpZykgCisgICAgIHJocz1jbG9uZShyaHMpLnJvdW5kKHNldCk7CisgICAvLyBbd2UgY291bGQgcmV1c2UgdGhlIG5ldyBMSFMgZm9yIHJlc3VsdCBpbiB0aGlzIGNhc2VdCisgICB9CisgIGVsc2UgCisgICB7LyogdW5saW1pdGVkICovCisgICAgLy8gZml4ZWQgcG9pbnQgYXJpdGhtZXRpYyB3aWxsIHdhbnQgZXZlcnkgdHJhaWxpbmcgMDsgd2UgYWRkIHRoZXNlCisgICAgLy8gYWZ0ZXIgdGhlIGNhbGN1bGF0aW9uIHJhdGhlciB0aGFuIGJlZm9yZSwgZm9yIHNwZWVkLgorICAgIGlmIChsaHMuZXhwPjApIAorICAgICBwYWRkaW5nPXBhZGRpbmcrbGhzLmV4cDsKKyAgICBpZiAocmhzLmV4cD4wKSAKKyAgICAgcGFkZGluZz1wYWRkaW5nK3Jocy5leHA7CisgICB9CisgIAorICAvLyBGb3IgYmVzdCBzcGVlZCwgYXMgaW4gRE1TUkNOLCB3ZSB1c2UgdGhlIHNob3J0ZXIgbnVtYmVyIGFzIHRoZQorICAvLyBtdWx0aXBsaWVyIGFuZCB0aGUgbG9uZ2VyIGFzIHRoZSBtdWx0aXBsaWNhbmQuCisgIC8vIDE5OTkuMTIuMjI6IFdlIHVzZWQgdG8gc3BlY2lhbCBjYXNlIHdoZW4gdGhlIHJlc3VsdCB3b3VsZCBmaXQgaW4KKyAgLy8gICAgICAgICAgICAgYSBsb25nLCBidXQgd2l0aCBKYXZhIDEuMyB0aGlzIGdhdmUgbm8gYWR2YW50YWdlLgorICBpZiAobGhzLm1hbnQubGVuZ3RoPHJocy5tYW50Lmxlbmd0aCkgCisgICB7CisgICAgbXVsdGVyPWxocy5tYW50OworICAgIG11bHRhbmQ9cmhzLm1hbnQ7CisgICB9CisgIGVsc2UgCisgICB7CisgICAgbXVsdGVyPXJocy5tYW50OworICAgIG11bHRhbmQ9bGhzLm1hbnQ7CisgICB9CisgIAorICAvKiBDYWxjdWxhdGUgaG93IGxvbmcgcmVzdWx0IGJ5dGUgYXJyYXkgd2lsbCBiZSAqLworICBtdWx0YW5kbGVuPShtdWx0ZXIubGVuZ3RoK211bHRhbmQubGVuZ3RoKS0xOyAvLyBlZmZlY3RpdmUgbGVuZ3RoCisgIC8vIG9wdGltaXplIGZvciA3NSUgb2YgdGhlIGNhc2VzIHdoZXJlIGEgY2FycnkgaXMgZXhwZWN0ZWQuLi4KKyAgaWYgKChtdWx0ZXJbMF0qbXVsdGFuZFswXSk+OSkgCisgICBhY2NsZW49bXVsdGFuZGxlbisxOworICBlbHNlIAorICAgYWNjbGVuPW11bHRhbmRsZW47CisgIAorICAvKiBOb3cgdGhlIG1haW4gbG9uZyBtdWx0aXBsaWNhdGlvbiBsb29wICovCisgIHJlcz1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCk7IC8vIHdoZXJlIHdlJ2xsIGJ1aWxkIHJlc3VsdAorICBhY2M9bmV3IGJ5dGVbYWNjbGVuXTsgLy8gYWNjdW11bGF0b3IsIGFsbCB6ZXJvcworICAvLyAxOTk4LjA3LjAxOiBjYWxjdWxhdGUgZnJvbSBsZWZ0IHRvIHJpZ2h0IHNvIHRoYXQgYWNjdW11bGF0b3IgZ29lcworICAvLyB0byBsaWtlbHkgZmluYWwgbGVuZ3RoIG9uIGZpcnN0IGFkZGl0aW9uOyB0aGlzIGF2b2lkcyBhIG9uZS1kaWdpdAorICAvLyBleHRlbnNpb24gKGFuZCBvYmplY3QgYWxsb2NhdGlvbikgZWFjaCB0aW1lIGFyb3VuZCB0aGUgbG9vcC4KKyAgLy8gSW5pdGlhbCBudW1iZXIgdGhlcmVmb3JlIGhhcyB2aXJ0dWFsIHplcm9zIGFkZGVkIHRvIHJpZ2h0LgorICB7aW50ICQ3PW11bHRlci5sZW5ndGg7bj0wO246Zm9yKDskNz4wOyQ3LS0sbisrKXsKKyAgIG11bHQ9bXVsdGVyW25dOworICAgaWYgKG11bHQhPTApIAorICAgIHsgLy8gW29wdGltaXphdGlvbl0KKyAgICAgLy8gYWNjdW11bGF0ZSBbYWNjdW11bGF0b3IgaXMgcmV1c2FibGUgYXJyYXldCisgICAgIGFjYz1ieXRlYWRkc3ViKGFjYyxhY2MubGVuZ3RoLG11bHRhbmQsbXVsdGFuZGxlbixtdWx0LHRydWUpOworICAgIH0KKyAgIC8vIGRpdmlkZSBtdWx0aXBsaWNhbmQgYnkgMTAgZm9yIG5leHQgZGlnaXQgdG8gcmlnaHQKKyAgIG11bHRhbmRsZW4tLTsgLy8gJ3ZpcnR1YWwgbGVuZ3RoJworICAgfQorICB9LypuKi8KKyAgCisgIHJlcy5pbmQ9KGJ5dGUpKGxocy5pbmQqcmhzLmluZCk7IC8vIGZpbmFsIHNpZ24KKyAgcmVzLmV4cD0obGhzLmV4cCtyaHMuZXhwKS1wYWRkaW5nOyAvLyBmaW5hbCBleHBvbmVudAorICAvLyBbb3ZlcmZsb3cgaXMgY2hlY2tlZCBieSBmaW5pc2hdCisgIAorICAvKiBhZGQgdHJhaWxpbmcgemVyb3MgdG8gdGhlIHJlc3VsdCwgaWYgbmVjZXNzYXJ5ICovCisgIGlmIChwYWRkaW5nPT0wKSAKKyAgIHJlcy5tYW50PWFjYzsKKyAgZWxzZSAKKyAgIHJlcy5tYW50PWV4dGVuZChhY2MsYWNjLmxlbmd0aCtwYWRkaW5nKTsgLy8gYWRkIHRyYWlsaW5nIDBzCisgIHJldHVybiByZXMuZmluaXNoKHNldCxmYWxzZSk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgYSBwbGFpbiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqIDxjb2RlPi10aGlzPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgI25lZ2F0ZShNYXRoQ29udGV4dCl9LCB3aGVyZSB0aGUgY29udGV4dCBpcworICAqIDxjb2RlPm5ldyBNYXRoQ29udGV4dCgwLCBNYXRoQ29udGV4dC5QTEFJTik8L2NvZGU+LgorICAqIDxwPgorICAqIFRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcGFydCAodGhlIHNjYWxlKSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUKKyAgKiBiZSA8Y29kZT50aGlzLnNjYWxlKCk8L2NvZGU+CisgICoKKyAgKgorICAqIEByZXR1cm4gQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgPGNvZGU+LXRoaXM8L2NvZGU+LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbmVnYXRlKCl7CisgIHJldHVybiB0aGlzLm5lZ2F0ZShwbGFpbk1DKTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzIDxjb2RlPi10aGlzPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBJbXBsZW1lbnRzIHRoZSBuZWdhdGlvbiAoUHJlZml4IDxiPjxjb2RlPi08L2NvZGU+PC9iPikgb3BlcmF0b3IKKyAgKiAoYXMgZGVmaW5lZCBpbiB0aGUgZGVjaW1hbCBkb2N1bWVudGF0aW9uLCBzZWUge0BsaW5rIEJpZ0RlY2ltYWwKKyAgKiBjbGFzcyBoZWFkZXJ9KSwKKyAgKiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0LgorICAqCisgICogQHBhcmFtICBzZXQgVGhlIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBhcml0aG1ldGljIHNldHRpbmdzLgorICAqIEByZXR1cm4gQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgPGNvZGU+LXRoaXM8L2NvZGU+LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbmVnYXRlKGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgc2V0KXsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJlczsKKyAgLy8gT3JpZ2luYWxseSBjYWxsZWQgbWludXMoKSwgY2hhbmdlZCB0byBtYXRjaGVkIEphdmEgcHJlY2VkZW50cworICAvLyBUaGlzIHNpbXBseSBjbG9uZXMsIGZsaXBzIHRoZSBzaWduLCBhbmQgcG9zc2libHkgcm91bmRzCisgIGlmIChzZXQubG9zdERpZ2l0cykgCisgICBjaGVja2RpZ2l0cygoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKW51bGwsc2V0LmRpZ2l0cyk7CisgIHJlcz1jbG9uZSh0aGlzKTsgLy8gc2FmZSBjb3B5CisgIHJlcy5pbmQ9KGJ5dGUpLXJlcy5pbmQ7CisgIHJldHVybiByZXMuZmluaXNoKHNldCxmYWxzZSk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgYSBwbGFpbiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqIDxjb2RlPit0aGlzPC9jb2RlPi4KKyAgKiBOb3RlIHRoYXQgPGNvZGU+dGhpczwvY29kZT4gaXMgbm90IG5lY2Vzc2FyaWx5IGEKKyAgKiBwbGFpbiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiwgYnV0IHRoZSByZXN1bHQgd2lsbCBhbHdheXMgYmUuCisgICogPHA+CisgICogVGhlIHNhbWUgYXMge0BsaW5rICNwbHVzKE1hdGhDb250ZXh0KX0sIHdoZXJlIHRoZSBjb250ZXh0IGlzCisgICogPGNvZGU+bmV3IE1hdGhDb250ZXh0KDAsIE1hdGhDb250ZXh0LlBMQUlOKTwvY29kZT4uCisgICogPHA+CisgICogVGhlIGxlbmd0aCBvZiB0aGUgZGVjaW1hbCBwYXJ0ICh0aGUgc2NhbGUpIG9mIHRoZSByZXN1bHQgd2lsbCBiZQorICAqIGJlIDxjb2RlPnRoaXMuc2NhbGUoKTwvY29kZT4KKyAgKgorICAqIEByZXR1cm4gQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgPGNvZGU+K3RoaXM8L2NvZGU+LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcGx1cygpeworICByZXR1cm4gdGhpcy5wbHVzKHBsYWluTUMpOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiA8Y29kZT4rdGhpczwvY29kZT4uCisgICogPHA+CisgICogSW1wbGVtZW50cyB0aGUgcGx1cyAoUHJlZml4IDxiPjxjb2RlPis8L2NvZGU+PC9iPikgb3BlcmF0b3IKKyAgKiAoYXMgZGVmaW5lZCBpbiB0aGUgZGVjaW1hbCBkb2N1bWVudGF0aW9uLCBzZWUge0BsaW5rIEJpZ0RlY2ltYWwKKyAgKiBjbGFzcyBoZWFkZXJ9KSwKKyAgKiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0LgorICAqIDxwPgorICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3Igcm91bmRpbmcgb3Igb3RoZXJ3aXNlIGFwcGx5aW5nIGEgY29udGV4dAorICAqIHRvIGEgZGVjaW1hbCB2YWx1ZS4KKyAgKgorICAqIEBwYXJhbSAgc2V0IFRoZSA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gYXJpdGhtZXRpYyBzZXR0aW5ncy4KKyAgKiBAcmV0dXJuIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiAgICAgICAgIDxjb2RlPit0aGlzPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHBsdXMoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQpeworICAvLyBUaGlzIGNsb25lcyBhbmQgZm9yY2VzIHRoZSByZXN1bHQgdG8gdGhlIG5ldyBzZXR0aW5ncworICAvLyBNYXkgcmV0dXJuIHNhbWUgb2JqZWN0CisgIGlmIChzZXQubG9zdERpZ2l0cykgCisgICBjaGVja2RpZ2l0cygoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKW51bGwsc2V0LmRpZ2l0cyk7CisgIC8vIE9wdGltaXphdGlvbjogcmV0dXJucyBzYW1lIG9iamVjdCBmb3Igc29tZSBjb21tb24gY2FzZXMKKyAgaWYgKHNldC5mb3JtPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOKSAKKyAgIGlmICh0aGlzLmZvcm09PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4pIAorICAgIHsKKyAgICAgaWYgKHRoaXMubWFudC5sZW5ndGg8PXNldC5kaWdpdHMpIAorICAgICAgcmV0dXJuIHRoaXM7CisgICAgIGlmIChzZXQuZGlnaXRzPT0wKSAKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgcmV0dXJuIGNsb25lKHRoaXMpLmZpbmlzaChzZXQsZmFsc2UpOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgcGxhaW4gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiA8Y29kZT50aGlzKipyaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljLgorICAqIDxwPgorICAqIFRoZSBzYW1lIGFzIHtAbGluayAjcG93KEJpZ0RlY2ltYWwsIE1hdGhDb250ZXh0KX0sCisgICogd2hlcmUgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGlzIDxjb2RlPnJoczwvY29kZT4sCisgICogYW5kIHRoZSBjb250ZXh0IGlzIDxjb2RlPm5ldyBNYXRoQ29udGV4dCgwLCBNYXRoQ29udGV4dC5QTEFJTik8L2NvZGU+LgorICAqIDxwPgorICAqIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIHBvd2VyIHRvIHdoaWNoIHRoZSA8Y29kZT50aGlzPC9jb2RlPiB3aWxsIGJlCisgICogcmFpc2VkOyBpdCBtdXN0IGJlIGluIHRoZSByYW5nZSAwIHRocm91Z2ggOTk5OTk5OTk5LCBhbmQgbXVzdAorICAqIGhhdmUgYSBkZWNpbWFsIHBhcnQgb2YgemVyby4gIE5vdGUgdGhhdCB0aGVzZSByZXN0cmljdGlvbnMgbWF5IGJlCisgICogcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLCBzbyB0aGV5IHNob3VsZCBub3QgYmUgdXNlZCBhcyBhIHRlc3QgZm9yIGEKKyAgKiB3aG9sZSBudW1iZXIuCisgICogPHA+CisgICogSW4gYWRkaXRpb24sIHRoZSBwb3dlciBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYXMgbm8KKyAgKiA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gaXMgdXNlZCBhbmQgc28gdGhlIHJlc3VsdCB3b3VsZCB0aGVuCisgICogYWx3YXlzIGJlIDAuCisgICoKKyAgKiBAcGFyYW0gIHJocyBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgb3BlcmF0aW9uICh0aGUgcG93ZXIpLgorICAqIEByZXR1cm4gICAgIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiAgICAgICAgICAgICA8Y29kZT50aGlzKipyaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljLgorICAqIEB0aHJvd3MgQXJpdGhtZXRpY0V4Y2VwdGlvbiBpZiA8Y29kZT5yaHM8L2NvZGU+IGlzIG91dCBvZiByYW5nZSBvcgorICAqICAgICAgICAgICAgIGlzIG5vdCBhIHdob2xlIG51bWJlci4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHBvdyhjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzKXsKKyAgcmV0dXJuIHRoaXMucG93KHJocyxwbGFpbk1DKTsKKyAgfQorIC8vIFRoZSBuYW1lIGZvciB0aGlzIG1ldGhvZCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgcHJlY2VkZW50IHNldCBieSB0aGUKKyAvLyBCaWdJbnRlZ2VyIGFuZCBNYXRoIGNsYXNzZXMuCisgCisgLyoqCisgICogUmV0dXJucyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzIDxjb2RlPnRoaXMqKnJoczwvY29kZT4uCisgICogPHA+CisgICogSW1wbGVtZW50cyB0aGUgcG93ZXIgKDxiPjxjb2RlPioqPC9jb2RlPjwvYj4pIG9wZXJhdG9yCisgICogKGFzIGRlZmluZWQgaW4gdGhlIGRlY2ltYWwgZG9jdW1lbnRhdGlvbiwgc2VlIHtAbGluayBCaWdEZWNpbWFsCisgICogY2xhc3MgaGVhZGVyfSksCisgICogYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdC4KKyAgKiA8cD4KKyAgKiBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBwb3dlciB0byB3aGljaCB0aGUgPGNvZGU+dGhpczwvY29kZT4KKyAgKiB3aWxsIGJlIHJhaXNlZDsgaXQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgLTk5OTk5OTk5OSB0aHJvdWdoCisgICogOTk5OTk5OTk5LCBhbmQgbXVzdCBoYXZlIGEgZGVjaW1hbCBwYXJ0IG9mIHplcm8uICBOb3RlIHRoYXQgdGhlc2UKKyAgKiByZXN0cmljdGlvbnMgbWF5IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSwgc28gdGhleSBzaG91bGQgbm90IGJlCisgICogdXNlZCBhcyBhIHRlc3QgZm9yIGEgd2hvbGUgbnVtYmVyLgorICAqIDxwPgorICAqIElmIHRoZSA8Y29kZT5kaWdpdHM8L2NvZGU+IHNldHRpbmcgb2YgdGhlIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPgorICAqIHBhcmFtZXRlciBpcyAwLCB0aGUgcG93ZXIgbXVzdCBiZSB6ZXJvIG9yIHBvc2l0aXZlLgorICAqCisgICogQHBhcmFtICByaHMgVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGZvciB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mCisgICogICAgICAgICAgICAgdGhlIG9wZXJhdGlvbiAodGhlIHBvd2VyKS4KKyAgKiBAcGFyYW0gIHNldCBUaGUgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IGFyaXRobWV0aWMgc2V0dGluZ3MuCisgICogQHJldHVybiAgICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgICAgIDxjb2RlPnRoaXMqKnJoczwvY29kZT4uCisgICogQHRocm93cyBBcml0aG1ldGljRXhjZXB0aW9uIGlmIDxjb2RlPnJoczwvY29kZT4gaXMgb3V0IG9mIHJhbmdlIG9yCisgICogICAgICAgICAgICAgaXMgbm90IGEgd2hvbGUgbnVtYmVyLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcG93KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByaHMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQpeworICBpbnQgbjsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGxoczsKKyAgaW50IHJlcWRpZzsKKyAgaW50IHdvcmtkaWdpdHM9MDsKKyAgaW50IEw9MDsKKyAgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCB3b3Jrc2V0OworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmVzOworICBib29sZWFuIHNlZW5iaXQ7CisgIGludCBpPTA7CisgIGlmIChzZXQubG9zdERpZ2l0cykgCisgICBjaGVja2RpZ2l0cyhyaHMsc2V0LmRpZ2l0cyk7CisgIG49cmhzLmludGNoZWNrKE1pbkFyZyxNYXhBcmcpOyAvLyBjaGVjayBSSFMgYnkgdGhlIHJ1bGVzCisgIGxocz10aGlzOyAvLyBjbGFyaWZpZWQgbmFtZQorICAKKyAgcmVxZGlnPXNldC5kaWdpdHM7IC8vIGxvY2FsIGNvcHkgKGhlYXZpbHkgdXNlZCkKKyAgaWYgKHJlcWRpZz09MCkgCisgICB7CisgICAgaWYgKHJocy5pbmQ9PWlzbmVnKSAKKyAgICAgdGhyb3cgbmV3IGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uKCJOZWdhdGl2ZSBwb3dlcjoiKyIgIityaHMudG9TdHJpbmcoKSk7CisgICAgd29ya2RpZ2l0cz0wOworICAgfQorICBlbHNlIAorICAgey8qIG5vbi0wIGRpZ2l0cyAqLworICAgIGlmICgocmhzLm1hbnQubGVuZ3RoK3Jocy5leHApPnJlcWRpZykgCisgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3Jocy50b1N0cmluZygpKTsKKyAgICAKKyAgICAvKiBSb3VuZCB0aGUgbGhzIHRvIERJR0lUUyBpZiBuZWVkIGJlICovCisgICAgaWYgKGxocy5tYW50Lmxlbmd0aD5yZXFkaWcpIAorICAgICBsaHM9Y2xvbmUobGhzKS5yb3VuZChzZXQpOworICAgIAorICAgIC8qIEwgZm9yIHByZWNpc2lvbiBjYWxjdWxhdGlvbiBbc2VlIEFOU0kgWDMuMjc0LTE5OTZdICovCisgICAgTD1yaHMubWFudC5sZW5ndGgrcmhzLmV4cDsgLy8gbGVuZ3RoIHdpdGhvdXQgZGVjaW1hbCB6ZXJvcy9leHAKKyAgICB3b3JrZGlnaXRzPShyZXFkaWcrTCkrMTsgLy8gY2FsY3VsYXRlIHRoZSB3b3JraW5nIERJR0lUUworICAgfQorICAKKyAgLyogQ3JlYXRlIGEgY29weSBvZiBzZXQgZm9yIHdvcmtpbmcgc2V0dGluZ3MgKi8KKyAgLy8gTm90ZTogbm8gbmVlZCB0byBjaGVjayBmb3IgbG9zdERpZ2l0cyBhZ2Fpbi4KKyAgLy8gMTk5OS4wNy4xNyBOb3RlOiB0aGlzIGNvbnN0cnVjdGlvbiBtdXN0IGZvbGxvdyBSSFMgY2hlY2sKKyAgd29ya3NldD1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCh3b3JrZGlnaXRzLHNldC5mb3JtLGZhbHNlLHNldC5yb3VuZGluZ01vZGUpOworICAKKyAgcmVzPU9ORTsgLy8gYWNjdW11bGF0b3IKKyAgaWYgKG49PTApIAorICAgcmV0dXJuIHJlczsgLy8geCoqMCA9PSAxCisgIGlmIChuPDApIAorICAgbj0oaW50KS1uOyAvLyBbcmhzLmluZCByZWNvcmRzIHRoZSBzaWduXQorICBzZWVuYml0PWZhbHNlOyAvLyBzZXQgb25jZSB3ZSd2ZSBzZWVuIGEgMS1iaXQKKyAge2k9MTtpOmZvcig7O2krKyl7IC8vIGZvciBlYWNoIGJpdCBbdG9wIGJpdCBpZ25vcmVkXQorICAgbj1uK247IC8vIHNoaWZ0IGxlZnQgMSBiaXQKKyAgIGlmIChuPDApIAorICAgIHsgLy8gdG9wIGJpdCBpcyBzZXQKKyAgICAgc2VlbmJpdD10cnVlOyAvLyBPSywgd2UncmUgb2ZmCisgICAgIHJlcz1yZXMubXVsdGlwbHkobGhzLHdvcmtzZXQpOyAvLyBhY2M9YWNjKngKKyAgICB9CisgICBpZiAoaT09MzEpIAorICAgIGJyZWFrIGk7IC8vIHRoYXQgd2FzIHRoZSBsYXN0IGJpdAorICAgaWYgKCghc2VlbmJpdCkpIAorICAgIGNvbnRpbnVlIGk7IC8vIHdlIGRvbid0IGhhdmUgdG8gc3F1YXJlIDEKKyAgIHJlcz1yZXMubXVsdGlwbHkocmVzLHdvcmtzZXQpOyAvLyBhY2M9YWNjKmFjYyBbc3F1YXJlXQorICAgfQorICB9LyppKi8gLy8gMzIgYml0cworICBpZiAocmhzLmluZDwwKSAgLy8gd2FzIGEgKiotbiBbaGVuY2UgZGlnaXRzPjBdCisgICByZXM9T05FLmRpdmlkZShyZXMsd29ya3NldCk7IC8vIC4uIHNvIGFjYz0xL2FjYworICByZXR1cm4gcmVzLmZpbmlzaChzZXQsdHJ1ZSk7IC8vIHJvdW5kIGFuZCBzdHJpcCBbb3JpZ2luYWwgZGlnaXRzXQorICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgcGxhaW4gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiB0aGUgcmVtYWluZGVyIG9mIDxjb2RlPnRoaXMvcmhzPC9jb2RlPiwgdXNpbmcgZml4ZWQgcG9pbnQgYXJpdGhtZXRpYy4KKyAgKiA8cD4KKyAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgI3JlbWFpbmRlcihCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCl9LAorICAqIHdoZXJlIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBpcyA8Y29kZT5yaHM8L2NvZGU+LAorICAqIGFuZCB0aGUgY29udGV4dCBpcyA8Y29kZT5uZXcgTWF0aENvbnRleHQoMCwgTWF0aENvbnRleHQuUExBSU4pPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBUaGlzIGlzIG5vdCB0aGUgbW9kdWxvIG9wZXJhdG9yIC0tIHRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLgorICAqCisgICogQHBhcmFtICByaHMgVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGZvciB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mCisgICogICAgICAgICAgICAgdGhlIHJlbWFpbmRlciBvcGVyYXRpb24uCisgICogQHJldHVybiAgICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcyB0aGUgcmVtYWluZGVyCisgICogICAgICAgICAgICAgb2YgPGNvZGU+dGhpcy9yaHM8L2NvZGU+LCB1c2luZyBmaXhlZCBwb2ludCBhcml0aG1ldGljLgorICAqIEB0aHJvd3MgQXJpdGhtZXRpY0V4Y2VwdGlvbiBpZiA8Y29kZT5yaHM8L2NvZGU+IGlzIHplcm8uCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByZW1haW5kZXIoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJocyl7CisgIHJldHVybiB0aGlzLmRvZGl2aWRlKCdSJyxyaHMscGxhaW5NQywtMSk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcyB0aGUgcmVtYWluZGVyIG9mCisgICogPGNvZGU+dGhpcy9yaHM8L2NvZGU+LgorICAqIDxwPgorICAqIEltcGxlbWVudHMgdGhlIHJlbWFpbmRlciBvcGVyYXRvcgorICAqIChhcyBkZWZpbmVkIGluIHRoZSBkZWNpbWFsIGRvY3VtZW50YXRpb24sIHNlZSB7QGxpbmsgQmlnRGVjaW1hbAorICAqIGNsYXNzIGhlYWRlcn0pLAorICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBvYmplY3QuCisgICogPHA+CisgICogVGhpcyBpcyBub3QgdGhlIG1vZHVsbyBvcGVyYXRvciAtLSB0aGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4KKyAgKgorICAqIEBwYXJhbSAgcmhzIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgIHRoZSByZW1haW5kZXIgb3BlcmF0aW9uLgorICAqIEBwYXJhbSAgc2V0IFRoZSA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gYXJpdGhtZXRpYyBzZXR0aW5ncy4KKyAgKiBAcmV0dXJuICAgICBBIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHZhbHVlIGlzIHRoZSByZW1haW5kZXIKKyAgKiAgICAgICAgICAgICBvZiA8Y29kZT50aGlzK3JoczwvY29kZT4uCisgICogQHRocm93cyBBcml0aG1ldGljRXhjZXB0aW9uIGlmIDxjb2RlPnJoczwvY29kZT4gaXMgemVyby4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgcmVzdWx0IHdpbGwKKyAgKiAgICAgICAgICAgICBub3QgZml0IGluIHRoZSBudW1iZXIgb2YgZGlnaXRzIHNwZWNpZmllZCBmb3IgdGhlCisgICogICAgICAgICAgICAgY29udGV4dC4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJlbWFpbmRlcihjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgc2V0KXsKKyAgcmV0dXJuIHRoaXMuZG9kaXZpZGUoJ1InLHJocyxzZXQsLTEpOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgcGxhaW4gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiA8Y29kZT50aGlzLXJoczwvY29kZT4sIHVzaW5nIGZpeGVkIHBvaW50IGFyaXRobWV0aWMuCisgICogPHA+CisgICogVGhlIHNhbWUgYXMge0BsaW5rICNzdWJ0cmFjdChCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCl9LAorICAqIHdoZXJlIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBpcyA8Y29kZT5yaHM8L2NvZGU+LAorICAqIGFuZCB0aGUgY29udGV4dCBpcyA8Y29kZT5uZXcgTWF0aENvbnRleHQoMCwgTWF0aENvbnRleHQuUExBSU4pPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBkZWNpbWFsIHBhcnQgKHRoZSBzY2FsZSkgb2YgdGhlIHJlc3VsdCB3aWxsIGJlCisgICogdGhlIG1heGltdW0gb2YgdGhlIHNjYWxlcyBvZiB0aGUgdHdvIG9wZXJhbmRzLgorICAqCisgICogQHBhcmFtICByaHMgVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGZvciB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mCisgICogICAgICAgICAgICAgdGhlIHN1YnRyYWN0aW9uLgorICAqIEByZXR1cm4gICAgIEEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMKKyAgKiAgICAgICAgICAgICA8Y29kZT50aGlzLXJoczwvY29kZT4sIHVzaW5nIGZpeGVkIHBvaW50IGFyaXRobWV0aWMuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBzdWJ0cmFjdChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzKXsKKyAgcmV0dXJuIHRoaXMuc3VidHJhY3QocmhzLHBsYWluTUMpOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgdmFsdWUgaXMgPGNvZGU+dGhpcy1yaHM8L2NvZGU+LgorICAqIDxwPgorICAqIEltcGxlbWVudHMgdGhlIHN1YnRyYWN0aW9uICg8Yj48Y29kZT4tPC9jb2RlPjwvYj4pIG9wZXJhdG9yCisgICogKGFzIGRlZmluZWQgaW4gdGhlIGRlY2ltYWwgZG9jdW1lbnRhdGlvbiwgc2VlIHtAbGluayBCaWdEZWNpbWFsCisgICogY2xhc3MgaGVhZGVyfSksCisgICogYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdC4KKyAgKgorICAqIEBwYXJhbSAgcmhzIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgorICAqICAgICAgICAgICAgIHRoZSBzdWJ0cmFjdGlvbi4KKyAgKiBAcGFyYW0gIHNldCBUaGUgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IGFyaXRobWV0aWMgc2V0dGluZ3MuCisgICogQHJldHVybiAgICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqICAgICAgICAgICAgIDxjb2RlPnRoaXMtcmhzPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHN1YnRyYWN0KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByaHMsY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQpeworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbmV3cmhzOworICBpZiAoc2V0Lmxvc3REaWdpdHMpIAorICAgY2hlY2tkaWdpdHMocmhzLHNldC5kaWdpdHMpOworICAvLyBbYWRkIHdpbGwgcmVjaGVjayAuLiBidXQgd291bGQgcmVwb3J0IC1yaHNdCisgIC8qIGNhcnJ5IG91dCB0aGUgc3VidHJhY3Rpb24gKi8KKyAgLy8gd2UgY291bGQgZmFzdHBhdGggLTAsIGJ1dCBpdCBpcyB0b28gcmFyZS4KKyAgbmV3cmhzPWNsb25lKHJocyk7IC8vIHNhZmUgY29weQorICBuZXdyaHMuaW5kPShieXRlKS1uZXdyaHMuaW5kOyAvLyBwcmVwYXJlIHRvIHN1YnRyYWN0CisgIHJldHVybiB0aGlzLmFkZChuZXdyaHMsc2V0KTsgLy8gYXJpdGhtZXRpYworICB9CisKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogT3RoZXIgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKioKKyAgKiBDb252ZXJ0cyB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRvIGEgPGNvZGU+Ynl0ZTwvY29kZT4uCisgICogSWYgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGhhcyBhIG5vbi16ZXJvIGRlY2ltYWwgcGFydCBvciBpcworICAqIG91dCBvZiB0aGUgcG9zc2libGUgcmFuZ2UgZm9yIGEgPGNvZGU+Ynl0ZTwvY29kZT4gKDgtYml0IHNpZ25lZAorICAqIGludGVnZXIpIHJlc3VsdCB0aGVuIGFuIDxjb2RlPkFyaXRobWV0aWNFeGNlcHRpb248L2NvZGU+IGlzIHRocm93bi4KKyAgKgorICAqIEByZXR1cm4gQSA8Y29kZT5ieXRlPC9jb2RlPiBlcXVhbCBpbiB2YWx1ZSB0byA8Y29kZT50aGlzPC9jb2RlPi4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+dGhpczwvY29kZT4gaGFzIGEgbm9uLXplcm8KKyAgKiAgICAgICAgICAgICAgICAgZGVjaW1hbCBwYXJ0LCBvciB3aWxsIG5vdCBmaXQgaW4gYSA8Y29kZT5ieXRlPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgYnl0ZSBieXRlVmFsdWVFeGFjdCgpeworICBpbnQgbnVtOworICBudW09dGhpcy5pbnRWYWx1ZUV4YWN0KCk7IC8vIHdpbGwgY2hlY2sgZGVjaW1hbCBwYXJ0IHRvbworICBpZiAoKG51bT4xMjcpfChudW08KC0xMjgpKSkgCisgICB0aHJvdyBuZXcgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24oIkNvbnZlcnNpb24gb3ZlcmZsb3c6IisiICIrdGhpcy50b1N0cmluZygpKTsKKyAgcmV0dXJuIChieXRlKW51bTsKKyAgfQorCisgLyoqCisgICogQ29tcGFyZXMgdGhpcyA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLgorICAqIDxwPgorICAqIElmIHRoZSBwYXJhbWV0ZXIgaXMgPGNvZGU+bnVsbDwvY29kZT4sIG9yIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUKKyAgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB0eXBlLCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgorICAqIE90aGVyd2lzZSwgdGhlIHBhcmFtZXRlciBpcyBjYXN0IHRvIHR5cGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4KKyAgKiBhbmQgdGhlIHJlc3VsdCBvZiB0aGUge0BsaW5rICNjb21wYXJlVG8oQmlnRGVjaW1hbCl9IG1ldGhvZCwKKyAgKiB1c2luZyB0aGUgY2FzdCBwYXJhbWV0ZXIsIGlzIHJldHVybmVkLgorICAqIDxwPgorICAqIFRoZSB7QGxpbmsgI2NvbXBhcmVUbyhCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCl9IG1ldGhvZCBzaG91bGQgYmUKKyAgKiB1c2VkIHdoZW4gYSA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gaXMgbmVlZGVkIGZvciB0aGUgY29tcGFyaXNvbi4KKyAgKgorICAqIEBwYXJhbSAgcmhzIFRoZSA8Y29kZT5PYmplY3Q8L2NvZGU+IGZvciB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mCisgICogICAgICAgICAgICAgdGhlIGNvbXBhcmlzb24uCisgICogQHJldHVybiAgICAgQW4gPGNvZGU+aW50PC9jb2RlPiB3aG9zZSB2YWx1ZSBpcyAtMSwgMCwgb3IgMSBhcworICAqICAgICAgICAgICAgIDxjb2RlPnRoaXM8L2NvZGU+IGlzIG51bWVyaWNhbGx5IGxlc3MgdGhhbiwgZXF1YWwgdG8sCisgICogICAgICAgICAgICAgb3IgZ3JlYXRlciB0aGFuIDxjb2RlPnJoczwvY29kZT4uCisgICogQHRocm93cyBDbGFzc0Nhc3RFeGNlcHRpb24gaWYgPGNvZGU+cmhzPC9jb2RlPiBjYW5ub3QgYmUgY2FzdCB0bworICAqICAgICAgICAgICAgICAgICBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdC4KKyAgKiBAc2VlICAgICNjb21wYXJlVG8oQmlnRGVjaW1hbCkKKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgaW50IGNvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0IHJoc29iail7CisgIC8vIHRoZSBjYXN0IGluIHRoZSBuZXh0IGxpbmUgd2lsbCByYWlzZSBDbGFzc0Nhc3RFeGNlcHRpb24gaWYgbmVjZXNzYXJ5CisgIHJldHVybiBjb21wYXJlVG8oKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbClyaHNvYmoscGxhaW5NQyk7CisgIH0KKworIC8qKgorICAqIENvbnZlcnRzIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gdG8gYSA8Y29kZT5kb3VibGU8L2NvZGU+LgorICAqIElmIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBpcyBvdXQgb2YgdGhlIHBvc3NpYmxlIHJhbmdlIGZvciBhCisgICogPGNvZGU+ZG91YmxlPC9jb2RlPiAoNjQtYml0IHNpZ25lZCBmbG9hdGluZyBwb2ludCkgcmVzdWx0IHRoZW4gYW4KKyAgKiA8Y29kZT5Bcml0aG1ldGljRXhjZXB0aW9uPC9jb2RlPiBpcyB0aHJvd24uCisgICogPHA+CisgICogVGhlIGRvdWJsZSBwcm9kdWNlZCBpcyBpZGVudGljYWwgdG8gcmVzdWx0IG9mIGV4cHJlc3NpbmcgdGhlCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gYXMgYSA8Y29kZT5TdHJpbmc8L2NvZGU+IGFuZCB0aGVuCisgICogY29udmVydGluZyBpdCB1c2luZyB0aGUgPGNvZGU+RG91YmxlKFN0cmluZyk8L2NvZGU+IGNvbnN0cnVjdG9yOworICAqIHRoaXMgY2FuIHJlc3VsdCBpbiB2YWx1ZXMgb2YgPGNvZGU+RG91YmxlLk5FR0FUSVZFX0lORklOSVRZPC9jb2RlPgorICAqIG9yIDxjb2RlPkRvdWJsZS5QT1NJVElWRV9JTkZJTklUWTwvY29kZT4uCisgICoKKyAgKiBAcmV0dXJuIEEgPGNvZGU+ZG91YmxlPC9jb2RlPiBjb3JyZXNwb25kaW5nIHRvIDxjb2RlPnRoaXM8L2NvZGU+LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBkb3VibGUgZG91YmxlVmFsdWUoKXsKKyAgLy8gV2UgZ28gdmlhIGEgU3RyaW5nIFthcyBkb2VzIEJpZ0RlY2ltYWwgaW4gSkRLIDEuMl0KKyAgLy8gTmV4dCBsaW5lIGNvdWxkIHBvc3NpYmx5IHJhaXNlIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorICByZXR1cm4gamF2YS5sYW5nLkRvdWJsZS52YWx1ZU9mKHRoaXMudG9TdHJpbmcoKSkuZG91YmxlVmFsdWUoKTsKKyAgfQorCisgLyoqCisgICogQ29tcGFyZXMgdGhpcyA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aXRoIDxjb2RlPnJoczwvY29kZT4gZm9yCisgICogZXF1YWxpdHkuCisgICogPHA+CisgICogSWYgdGhlIHBhcmFtZXRlciBpcyA8Y29kZT5udWxsPC9jb2RlPiwgb3IgaXMgbm90IGFuIGluc3RhbmNlIG9mIHRoZQorICAqIEJpZ0RlY2ltYWwgdHlwZSwgb3IgaXMgbm90IGV4YWN0bHkgZXF1YWwgdG8gdGhlIGN1cnJlbnQKKyAgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBvYmplY3QsIHRoZW4gPGk+ZmFsc2U8L2k+IGlzIHJldHVybmVkLgorICAqIE90aGVyd2lzZSwgPGk+dHJ1ZTwvaT4gaXMgcmV0dXJuZWQuCisgICogPHA+CisgICogIkV4YWN0bHkgZXF1YWwiLCBoZXJlLCBtZWFucyB0aGF0IHRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICogcmVwcmVzZW50YXRpb25zIG9mIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBudW1iZXJzIGFyZQorICAqIGlkZW50aWNhbCAodGhleSBoYXZlIHRoZSBzYW1lIGNoYXJhY3RlcnMgaW4gdGhlIHNhbWUgc2VxdWVuY2UpLgorICAqIDxwPgorICAqIFRoZSB7QGxpbmsgI2NvbXBhcmVUbyhCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCl9IG1ldGhvZCBzaG91bGQgYmUKKyAgKiB1c2VkIGZvciBtb3JlIGdlbmVyYWwgY29tcGFyaXNvbnMuCisgICogQHBhcmFtICByaHMgVGhlIDxjb2RlPk9iamVjdDwvY29kZT4gZm9yIHRoZSByaWdodCBoYW5kIHNpZGUgb2YKKyAgKiAgICAgICAgICAgICB0aGUgY29tcGFyaXNvbi4KKyAgKiBAcmV0dXJuICAgICBBIDxjb2RlPmJvb2xlYW48L2NvZGU+IHdob3NlIHZhbHVlIDxpPnRydWU8L2k+IGlmIGFuZAorICAqICAgICAgICAgICAgIG9ubHkgaWYgdGhlIG9wZXJhbmRzIGhhdmUgaWRlbnRpY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisgICogQHRocm93cyBDbGFzc0Nhc3RFeGNlcHRpb24gaWYgPGNvZGU+cmhzPC9jb2RlPiBjYW5ub3QgYmUgY2FzdCB0bworICAqICAgICAgICAgICAgICAgICBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdC4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKiBAc2VlICAgICNjb21wYXJlVG8oT2JqZWN0KQorICAqIEBzZWUgICAgI2NvbXBhcmVUbyhCaWdEZWNpbWFsKQorICAqIEBzZWUgICAgI2NvbXBhcmVUbyhCaWdEZWNpbWFsLCBNYXRoQ29udGV4dCkKKyAgKi8KKyAKKyBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCBvYmopeworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzOworICBpbnQgaT0wOworICBjaGFyIGxjYVtdPW51bGw7CisgIGNoYXIgcmNhW109bnVsbDsKKyAgLy8gV2UgYXJlIGVxdWFsIGlmZiB0b1N0cmluZyBvZiBib3RoIGFyZSBleGFjdGx5IHRoZSBzYW1lCisgIGlmIChvYmo9PW51bGwpIAorICAgcmV0dXJuIGZhbHNlOyAvLyBub3QgZXF1YWwKKyAgaWYgKCghKCgob2JqIGluc3RhbmNlb2YgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKSkpKSkgCisgICByZXR1cm4gZmFsc2U7IC8vIG5vdCBhIGRlY2ltYWwKKyAgcmhzPShjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwpb2JqOyAvLyBjYXN0OyB3ZSBrbm93IGl0IHdpbGwgd29yaworICBpZiAodGhpcy5pbmQhPXJocy5pbmQpIAorICAgcmV0dXJuIGZhbHNlOyAvLyBkaWZmZXJlbnQgc2lnbnMgbmV2ZXIgbWF0Y2gKKyAgaWYgKCgodGhpcy5tYW50Lmxlbmd0aD09cmhzLm1hbnQubGVuZ3RoKSYodGhpcy5leHA9PXJocy5leHApKSYodGhpcy5mb3JtPT1yaHMuZm9ybSkpIAorICAgCisgICB7IC8vIG1hbnRpc3NhcyBzYXkgYWxsCisgICAgLy8gaGVyZSB3aXRoIGVxdWFsLWxlbmd0aCBieXRlIGFycmF5cyB0byBjb21wYXJlCisgICAge2ludCAkOD10aGlzLm1hbnQubGVuZ3RoO2k9MDtpOmZvcig7JDg+MDskOC0tLGkrKyl7CisgICAgIGlmICh0aGlzLm1hbnRbaV0hPXJocy5tYW50W2ldKSAKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorICAgIH0vKmkqLworICAgfQorICBlbHNlIAorICAgeyAvLyBuZWVkIHByb3BlciBsYXlvdXQKKyAgICBsY2E9dGhpcy5sYXlvdXQoKTsgLy8gbGF5b3V0IHRvIGNoYXJhY3RlciBhcnJheQorICAgIHJjYT1yaHMubGF5b3V0KCk7CisgICAgaWYgKGxjYS5sZW5ndGghPXJjYS5sZW5ndGgpIAorICAgICByZXR1cm4gZmFsc2U7IC8vIG1pc21hdGNoCisgICAgLy8gaGVyZSB3aXRoIGVxdWFsLWxlbmd0aCBjaGFyYWN0ZXIgYXJyYXlzIHRvIGNvbXBhcmUKKyAgICB7aW50ICQ5PWxjYS5sZW5ndGg7aT0wO2k6Zm9yKDskOT4wOyQ5LS0saSsrKXsKKyAgICAgaWYgKGxjYVtpXSE9cmNhW2ldKSAKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorICAgIH0vKmkqLworICAgfQorICByZXR1cm4gdHJ1ZTsgLy8gYXJyYXlzIGhhdmUgaWRlbnRpY2FsIGNvbnRlbnQKKyAgfQorCisgLyoqCisgICogQ29udmVydHMgdGhpcyA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB0byBhIDxjb2RlPmZsb2F0PC9jb2RlPi4KKyAgKiBJZiB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gaXMgb3V0IG9mIHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgYQorICAqIDxjb2RlPmZsb2F0PC9jb2RlPiAoMzItYml0IHNpZ25lZCBmbG9hdGluZyBwb2ludCkgcmVzdWx0IHRoZW4gYW4KKyAgKiA8Y29kZT5Bcml0aG1ldGljRXhjZXB0aW9uPC9jb2RlPiBpcyB0aHJvd24uCisgICogPHA+CisgICogVGhlIGZsb2F0IHByb2R1Y2VkIGlzIGlkZW50aWNhbCB0byByZXN1bHQgb2YgZXhwcmVzc2luZyB0aGUKKyAgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBhcyBhIDxjb2RlPlN0cmluZzwvY29kZT4gYW5kIHRoZW4KKyAgKiBjb252ZXJ0aW5nIGl0IHVzaW5nIHRoZSA8Y29kZT5GbG9hdChTdHJpbmcpPC9jb2RlPiBjb25zdHJ1Y3RvcjsKKyAgKiB0aGlzIGNhbiByZXN1bHQgaW4gdmFsdWVzIG9mIDxjb2RlPkZsb2F0Lk5FR0FUSVZFX0lORklOSVRZPC9jb2RlPgorICAqIG9yIDxjb2RlPkZsb2F0LlBPU0lUSVZFX0lORklOSVRZPC9jb2RlPi4KKyAgKgorICAqIEByZXR1cm4gQSA8Y29kZT5mbG9hdDwvY29kZT4gY29ycmVzcG9uZGluZyB0byA8Y29kZT50aGlzPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgZmxvYXQgZmxvYXRWYWx1ZSgpeworICByZXR1cm4gamF2YS5sYW5nLkZsb2F0LnZhbHVlT2YodGhpcy50b1N0cmluZygpKS5mbG9hdFZhbHVlKCk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgdGhlIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50YXRpb24gb2YgdGhpcworICAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LCBtb2RpZmllZCBieSBsYXlvdXQgcGFyYW1ldGVycy4KKyAgKiA8cD4KKyAgKiA8aT5UaGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBhIHByaW1pdGl2ZSBmb3IgdXNlIGJ5IG1vcmUKKyAgKiBzb3BoaXN0aWNhdGVkIGNsYXNzZXMsIHN1Y2ggYXMgPGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4sIHRoYXQKKyAgKiBjYW4gYXBwbHkgbG9jYWxlLXNlbnNpdGl2ZSBlZGl0aW5nIG9mIHRoZSByZXN1bHQuICBUaGUgbGV2ZWwgb2YKKyAgKiBmb3JtYXR0aW5nIHRoYXQgaXQgcHJvdmlkZXMgaXMgYSBuZWNlc3NhcnkgcGFydCBvZiB0aGUgQmlnRGVjaW1hbAorICAqIGNsYXNzIGFzIGl0IGlzIHNlbnNpdGl2ZSB0byBhbmQgbXVzdCBmb2xsb3cgdGhlIGNhbGN1bGF0aW9uIGFuZAorICAqIHJvdW5kaW5nIHJ1bGVzIGZvciBCaWdEZWNpbWFsIGFyaXRobWV0aWMuCisgICogSG93ZXZlciwgaWYgdGhlIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGVsc2V3aGVyZSwgaXQgbWF5IGJlIHJlbW92ZWQKKyAgKiBmcm9tIHRoaXMgY2xhc3MuIDwvaT4KKyAgKiA8cD4KKyAgKiBUaGUgcGFyYW1ldGVycywgZm9yIGJvdGggZm9ybXMgb2YgdGhlIDxjb2RlPmZvcm1hdDwvY29kZT4gbWV0aG9kCisgICogYXJlIGFsbCBvZiB0eXBlIDxjb2RlPmludDwvY29kZT4uCisgICogQSB2YWx1ZSBvZiAtMSBmb3IgYW55IHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCBhY3Rpb24KKyAgKiBvciB2YWx1ZSBmb3IgdGhhdCBwYXJhbWV0ZXIgc2hvdWxkIGJlIHVzZWQuCisgICogPHA+CisgICogVGhlIHBhcmFtZXRlcnMsIDxjb2RlPmJlZm9yZTwvY29kZT4gYW5kIDxjb2RlPmFmdGVyPC9jb2RlPiwKKyAgKiBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSB1c2VkIGZvciB0aGUgaW50ZWdlciBwYXJ0CisgICogYW5kIGRlY2ltYWwgcGFydCBvZiB0aGUgcmVzdWx0IHJlc3BlY3RpdmVseS4gIEV4cG9uZW50aWFsIG5vdGF0aW9uCisgICogaXMgbm90IHVzZWQuIElmIGVpdGhlciBwYXJhbWV0ZXIgaXMgLTEgKHdoaWNoIGluZGljYXRlcyB0aGUgZGVmYXVsdAorICAqIGFjdGlvbiksIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB1c2VkIHdpbGwgYmUgZXhhY3RseSBhcyBtYW55IGFzCisgICogYXJlIG5lZWRlZCBmb3IgdGhhdCBwYXJ0LgorICAqIDxwPgorICAqIDxjb2RlPmJlZm9yZTwvY29kZT4gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcjsgaWYgaXQgaXMgbGFyZ2VyIHRoYW4KKyAgKiBpcyBuZWVkZWQgdG8gY29udGFpbiB0aGUgaW50ZWdlciBwYXJ0LCB0aGF0IHBhcnQgaXMgcGFkZGVkIG9uIHRoZQorICAqIGxlZnQgd2l0aCBibGFua3MgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguIElmIDxjb2RlPmJlZm9yZTwvY29kZT4gaXMKKyAgKiBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGludGVnZXIgcGFydCBvZiB0aGUgbnVtYmVyCisgICogKGluY2x1ZGluZyB0aGUgc2lnbiwgZm9yIG5lZ2F0aXZlIG51bWJlcnMpIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgICogPHA+CisgICogPGNvZGU+YWZ0ZXI8L2NvZGU+IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyOyBpZiBpdCBpcyBub3QgdGhlCisgICogc2FtZSBzaXplIGFzIHRoZSBkZWNpbWFsIHBhcnQgb2YgdGhlIG51bWJlciwgdGhlIG51bWJlciB3aWxsIGJlCisgICogcm91bmRlZCAob3IgZXh0ZW5kZWQgd2l0aCB6ZXJvcykgdG8gZml0LiAgU3BlY2lmeWluZyAwIGZvcgorICAqIDxjb2RlPmFmdGVyPC9jb2RlPiB3aWxsIGNhdXNlIHRoZSBudW1iZXIgdG8gYmUgcm91bmRlZCB0byBhbgorICAqIGludGVnZXIgKHRoYXQgaXMsIGl0IHdpbGwgaGF2ZSBubyBkZWNpbWFsIHBhcnQgb3IgZGVjaW1hbCBwb2ludCkuCisgICogVGhlIHJvdW5kaW5nIG1ldGhvZCB3aWxsIGJlIHRoZSBkZWZhdWx0LAorICAqIDxjb2RlPk1hdGhDb250ZXh0LlJPVU5EX0hBTEZfVVA8L2NvZGU+LgorICAqIDxwPgorICAqIE90aGVyIHJvdW5kaW5nIG1ldGhvZHMsIGFuZCB0aGUgdXNlIG9mIGV4cG9uZW50aWFsIG5vdGF0aW9uLCBjYW4KKyAgKiBiZSBzZWxlY3RlZCBieSB1c2luZyB7QGxpbmsgI2Zvcm1hdChpbnQsaW50LGludCxpbnQsaW50LGludCl9LgorICAqIFVzaW5nIHRoZSB0d28tcGFyYW1ldGVyIGZvcm0gb2YgdGhlIG1ldGhvZCBoYXMgZXhhY3RseSB0aGUgc2FtZQorICAqIGVmZmVjdCBhcyB1c2luZyB0aGUgc2l4LXBhcmFtZXRlciBmb3JtIHdpdGggdGhlIGZpbmFsIGZvdXIKKyAgKiBwYXJhbWV0ZXJzIGFsbCBiZWluZyAtMS4KKyAgKgorICAqIEBwYXJhbSAgYmVmb3JlIFRoZSA8Y29kZT5pbnQ8L2NvZGU+IHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBwbGFjZXMKKyAgKiAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQuICBVc2UgLTEgZm9yICdhcyBtYW55IGFzCisgICogICAgICAgICAgICAgICAgYXJlIG5lZWRlZCcuCisgICogQHBhcmFtICBhZnRlciAgVGhlIDxjb2RlPmludDwvY29kZT4gc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIHBsYWNlcworICAqICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiAgVXNlIC0xIGZvciAnYXMgbWFueSBhcyBhcmUKKyAgKiAgICAgICAgICAgICAgICBuZWVkZWQnLgorICAqIEByZXR1cm4gICAgICAgIEEgPGNvZGU+U3RyaW5nPC9jb2RlPiByZXByZXNlbnRpbmcgdGhpcworICAqICAgICAgICAgICAgICAgIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LCBsYWlkIG91dCBhY2NvcmRpbmcgdG8gdGhlCisgICogICAgICAgICAgICAgICAgc3BlY2lmaWVkIHBhcmFtZXRlcnMKKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgdGhlIG51bWJlciBjYW5ub3QgYmUgbGFpZCBvdXQgYXMKKyAgKiAgICAgICAgICAgICAgICByZXF1ZXN0ZWQuCisgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgYSBwYXJhbWV0ZXIgaXMgb3V0IG9mIHJhbmdlLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqIEBzZWUgICAgI3RvU3RyaW5nCisgICogQHNlZSAgICAjdG9DaGFyQXJyYXkKKyAgKi8KKyAKKyBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBmb3JtYXQoaW50IGJlZm9yZSxpbnQgYWZ0ZXIpeworICByZXR1cm4gZm9ybWF0KGJlZm9yZSxhZnRlciwtMSwtMSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUMsUk9VTkRfSEFMRl9VUCk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgdGhlIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50YXRpb24gb2YgdGhpcworICAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LCBtb2RpZmllZCBieSBsYXlvdXQgcGFyYW1ldGVycyBhbmQgYWxsb3dpbmcKKyAgKiBleHBvbmVudGlhbCBub3RhdGlvbi4KKyAgKiA8cD4KKyAgKiA8aT5UaGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBhIHByaW1pdGl2ZSBmb3IgdXNlIGJ5IG1vcmUKKyAgKiBzb3BoaXN0aWNhdGVkIGNsYXNzZXMsIHN1Y2ggYXMgPGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4sIHRoYXQKKyAgKiBjYW4gYXBwbHkgbG9jYWxlLXNlbnNpdGl2ZSBlZGl0aW5nIG9mIHRoZSByZXN1bHQuICBUaGUgbGV2ZWwgb2YKKyAgKiBmb3JtYXR0aW5nIHRoYXQgaXQgcHJvdmlkZXMgaXMgYSBuZWNlc3NhcnkgcGFydCBvZiB0aGUgQmlnRGVjaW1hbAorICAqIGNsYXNzIGFzIGl0IGlzIHNlbnNpdGl2ZSB0byBhbmQgbXVzdCBmb2xsb3cgdGhlIGNhbGN1bGF0aW9uIGFuZAorICAqIHJvdW5kaW5nIHJ1bGVzIGZvciBCaWdEZWNpbWFsIGFyaXRobWV0aWMuCisgICogSG93ZXZlciwgaWYgdGhlIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGVsc2V3aGVyZSwgaXQgbWF5IGJlIHJlbW92ZWQKKyAgKiBmcm9tIHRoaXMgY2xhc3MuIDwvaT4KKyAgKiA8cD4KKyAgKiBUaGUgcGFyYW1ldGVycyBhcmUgYWxsIG9mIHR5cGUgPGNvZGU+aW50PC9jb2RlPi4KKyAgKiBBIHZhbHVlIG9mIC0xIGZvciBhbnkgcGFyYW1ldGVyIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0IGFjdGlvbgorICAqIG9yIHZhbHVlIGZvciB0aGF0IHBhcmFtZXRlciBzaG91bGQgYmUgdXNlZC4KKyAgKiA8cD4KKyAgKiBUaGUgZmlyc3QgdHdvIHBhcmFtZXRlcnMgKDxjb2RlPmJlZm9yZTwvY29kZT4gYW5kCisgICogPGNvZGU+YWZ0ZXI8L2NvZGU+KSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSB1c2VkIGZvcgorICAqIHRoZSBpbnRlZ2VyIHBhcnQgYW5kIGRlY2ltYWwgcGFydCBvZiB0aGUgcmVzdWx0IHJlc3BlY3RpdmVseSwgYXMKKyAgKiBkZWZpbmVkIGZvciB7QGxpbmsgI2Zvcm1hdChpbnQsaW50KX0uCisgICogSWYgZWl0aGVyIG9mIHRoZXNlIGlzIC0xICh3aGljaCBpbmRpY2F0ZXMgdGhlIGRlZmF1bHQgYWN0aW9uKSwgdGhlCisgICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXNlZCB3aWxsIGJlIGV4YWN0bHkgYXMgbWFueSBhcyBhcmUgbmVlZGVkIGZvcgorICAqIHRoYXQgcGFydC4KKyAgKiA8cD4KKyAgKiBUaGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgY29udHJvbCB0aGUgdXNlIG9mIGV4cG9uZW50aWFsIG5vdGF0aW9uCisgICogYW5kIHJvdW5kaW5nLiAgVGhyZWUgKDxjb2RlPmV4cGxhY2VzPC9jb2RlPiwgPGNvZGU+ZXhkaWdpdHM8L2NvZGU+LAorICAqIGFuZCA8Y29kZT5leGZvcm08L2NvZGU+KSBjb250cm9sIHRoZSBleHBvbmVudCBwYXJ0IG9mIHRoZSByZXN1bHQuCisgICogQXMgYmVmb3JlLCB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGFueSBvZiB0aGVzZSBwYXJhbWV0ZXJzIG1heSBiZQorICAqIHNlbGVjdGVkIGJ5IHVzaW5nIHRoZSB2YWx1ZSAtMS4KKyAgKiA8cD4KKyAgKiA8Y29kZT5leHBsYWNlczwvY29kZT4gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcjsgaXQgc2V0cyB0aGUgbnVtYmVyCisgICogb2YgcGxhY2VzIChkaWdpdHMgYWZ0ZXIgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50KSB0byBiZSB1c2VkIGZvcgorICAqIGFueSBleHBvbmVudCBwYXJ0LCB0aGUgZGVmYXVsdCAod2hlbiA8Y29kZT5leHBsYWNlczwvY29kZT4gaXMgLTEpCisgICogYmVpbmcgdG8gdXNlIGFzIG1hbnkgYXMgYXJlIG5lZWRlZC4KKyAgKiBJZiA8Y29kZT5leHBsYWNlczwvY29kZT4gaXMgbm90IC0xLCBzcGFjZSBpcyBhbHdheXMgcmVzZXJ2ZWQgZm9yCisgICogYW4gZXhwb25lbnQ7IGlmIG9uZSBpcyBub3QgbmVlZGVkIChmb3IgZXhhbXBsZSwgaWYgdGhlIGV4cG9uZW50CisgICogd2lsbCBiZSAwKSB0aGVuIDxjb2RlPmV4cGxhY2VzPC9jb2RlPisyIGJsYW5rcyBhcmUgYXBwZW5kZWQgdG8gdGhlCisgICogcmVzdWx0LgorICAqIDwhLS0gKFRoaXMgcHJlc2VydmVzIHZlcnRpY2FsIGFsaWdubWVudCBvZiBzaW1pbGFybHkgZm9ybWF0dGVkCisgICogICAgICAgbnVtYmVycyBpbiBhIG1vbm9zcGFjZSBmb250LikgLS0+CisgICogSWYgPGNvZGU+ZXhwbGFjZXM8L2NvZGU+IGlzIG5vdCAtMSBhbmQgaXMgbm90IGxhcmdlIGVub3VnaCB0bworICAqIGNvbnRhaW4gdGhlIGV4cG9uZW50LCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgorICAqIDxwPgorICAqIDxjb2RlPmV4ZGlnaXRzPC9jb2RlPiBzZXRzIHRoZSB0cmlnZ2VyIHBvaW50IGZvciB1c2Ugb2YgZXhwb25lbnRpYWwKKyAgKiBub3RhdGlvbi4gSWYsIGJlZm9yZSBhbnkgcm91bmRpbmcsIHRoZSBudW1iZXIgb2YgcGxhY2VzIG5lZWRlZAorICAqIGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCBleGNlZWRzIDxjb2RlPmV4ZGlnaXRzPC9jb2RlPiwgb3IgaWYgdGhlCisgICogYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHJlc3VsdCBpcyBsZXNzIHRoYW4gPGNvZGU+MC4wMDAwMDE8L2NvZGU+LAorICAqIHRoZW4gZXhwb25lbnRpYWwgZm9ybSB3aWxsIGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQKKyAgKiA8Y29kZT5leGRpZ2l0czwvY29kZT4gd2FzIHNwZWNpZmllZC4KKyAgKiBXaGVuIDxjb2RlPmV4ZGlnaXRzPC9jb2RlPiBpcyAtMSwgZXhwb25lbnRpYWwgbm90YXRpb24gd2lsbCBuZXZlcgorICAqIGJlIHVzZWQuIElmIDAgaXMgc3BlY2lmaWVkIGZvciA8Y29kZT5leGRpZ2l0czwvY29kZT4sIGV4cG9uZW50aWFsCisgICogbm90YXRpb24gaXMgYWx3YXlzIHVzZWQgdW5sZXNzIHRoZSBleHBvbmVudCB3b3VsZCBiZSAwLgorICAqIDxwPgorICAqIDxjb2RlPmV4Zm9ybTwvY29kZT4gc2V0cyB0aGUgZm9ybSBmb3IgZXhwb25lbnRpYWwgbm90YXRpb24gKGlmCisgICogbmVlZGVkKS4KKyAgKiBJdCAgbWF5IGJlIGVpdGhlciB7QGxpbmsgTWF0aENvbnRleHQjU0NJRU5USUZJQ30gb3IKKyAgKiB7QGxpbmsgTWF0aENvbnRleHQjRU5HSU5FRVJJTkd9LgorICAqIElmIHRoZSBsYXR0ZXIsIGVuZ2luZWVyaW5nLCBmb3JtIGlzIHJlcXVlc3RlZCwgdXAgdG8gdGhyZWUgZGlnaXRzCisgICogKHBsdXMgc2lnbiwgaWYgbmVnYXRpdmUpIG1heSBiZSBuZWVkZWQgZm9yIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlCisgICogcmVzdWx0ICg8Y29kZT5iZWZvcmU8L2NvZGU+KS4gIE90aGVyd2lzZSwgb25seSBvbmUgZGlnaXQgKHBsdXMKKyAgKiBzaWduLCBpZiBuZWdhdGl2ZSkgaXMgbmVlZGVkLgorICAqIDxwPgorICAqIEZpbmFsbHksIHRoZSBzaXh0aCBhcmd1bWVudCwgPGNvZGU+ZXhyb3VuZDwvY29kZT4sIHNlbGVjdHMgdGhlCisgICogcm91bmRpbmcgYWxnb3JpdGhtIHRvIGJlIHVzZWQsIGFuZCBtdXN0IGJlIG9uZSBvZiB0aGUgdmFsdWVzCisgICogaW5kaWNhdGVkIGJ5IGEgcHVibGljIGNvbnN0YW50IGluIHRoZSB7QGxpbmsgTWF0aENvbnRleHR9IGNsYXNzCisgICogd2hvc2UgbmFtZSBzdGFydHMgd2l0aCA8Y29kZT5ST1VORF88L2NvZGU+LgorICAqIFRoZSBkZWZhdWx0ICg8Y29kZT5ST1VORF9IQUxGX1VQPC9jb2RlPikgbWF5IGFsc28gYmUgc2VsZWN0ZWQgYnkKKyAgKiB1c2luZyB0aGUgdmFsdWUgLTEsIGFzIGJlZm9yZS4KKyAgKiA8cD4KKyAgKiBUaGUgc3BlY2lhbCB2YWx1ZSA8Y29kZT5NYXRoQ29udGV4dC5ST1VORF9VTk5FQ0VTU0FSWTwvY29kZT4gbWF5IGJlCisgICogdXNlZCB0byBkZXRlY3Qgd2hldGhlciBub24temVybyBkaWdpdHMgYXJlIGRpc2NhcmRlZCAtLSBpZgorICAqIDxjb2RlPmV4cm91bmQ8L2NvZGU+IGhhcyB0aGlzIHZhbHVlIHRoYW4gaWYgbm9uLXplcm8gZGlnaXRzIHdvdWxkCisgICogYmUgZGlzY2FyZGVkIChyb3VuZGVkKSBkdXJpbmcgZm9ybWF0dGluZyB0aGVuIGFuCisgICogPGNvZGU+QXJpdGhtZXRpY0V4Y2VwdGlvbjwvY29kZT4gaXMgdGhyb3duLgorICAqCisgICogQHBhcmFtICBiZWZvcmUgICBUaGUgPGNvZGU+aW50PC9jb2RlPiBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgcGxhY2VzCisgICogICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQuCisgICogICAgICAgICAgICAgICAgICBVc2UgLTEgZm9yICdhcyBtYW55IGFzIGFyZSBuZWVkZWQnLgorICAqIEBwYXJhbSAgYWZ0ZXIgICAgVGhlIDxjb2RlPmludDwvY29kZT4gc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIHBsYWNlcworICAqICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICogICAgICAgICAgICAgICAgICBVc2UgLTEgZm9yICdhcyBtYW55IGFzIGFyZSBuZWVkZWQnLgorICAqIEBwYXJhbSAgZXhwbGFjZXMgVGhlIDxjb2RlPmludDwvY29kZT4gc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIHBsYWNlcworICAqICAgICAgICAgICAgICAgICAgdG8gYmUgdXNlZCBmb3IgYW55IGV4cG9uZW50LgorICAqICAgICAgICAgICAgICAgICAgVXNlIC0xIGZvciAnYXMgbWFueSBhcyBhcmUgbmVlZGVkJy4KKyAgKiBAcGFyYW0gIGV4ZGlnaXRzIFRoZSA8Y29kZT5pbnQ8L2NvZGU+IHNwZWNpZnlpbmcgdGhlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgIChkaWdpdHMgYmVmb3JlIHRoZSBkZWNpbWFsIHBvaW50KSB3aGljaCBpZgorICAqICAgICAgICAgICAgICAgICAgZXhjZWVkZWQgY2F1c2VzIGV4cG9uZW50aWFsIG5vdGF0aW9uIHRvIGJlIHVzZWQuCisgICogICAgICAgICAgICAgICAgICBVc2UgMCB0byBmb3JjZSBleHBvbmVudGlhbCBub3RhdGlvbi4KKyAgKiAgICAgICAgICAgICAgICAgIFVzZSAtMSB0byBmb3JjZSBwbGFpbiBub3RhdGlvbiAobm8gZXhwb25lbnRpYWwKKyAgKiAgICAgICAgICAgICAgICAgIG5vdGF0aW9uKS4KKyAgKiBAcGFyYW0gIGV4Zm9ybSAgIFRoZSA8Y29kZT5pbnQ8L2NvZGU+IHNwZWNpZnlpbmcgdGhlIGZvcm0gb2YKKyAgKiAgICAgICAgICAgICAgICAgIGV4cG9uZW50aWFsIG5vdGF0aW9uIHRvIGJlIHVzZWQKKyAgKiAgICAgICAgICAgICAgICAgICh7QGxpbmsgTWF0aENvbnRleHQjU0NJRU5USUZJQ30gb3IKKyAgKiAgICAgICAgICAgICAgICAgIHtAbGluayBNYXRoQ29udGV4dCNFTkdJTkVFUklOR30pLgorICAqIEBwYXJhbSAgZXhyb3VuZCAgVGhlIDxjb2RlPmludDwvY29kZT4gc3BlY2lmeWluZyB0aGUgcm91bmRpbmcgbW9kZQorICAqICAgICAgICAgICAgICAgICAgdG8gdXNlLgorICAqICAgICAgICAgICAgICAgICAgVXNlIC0xIGZvciB0aGUgZGVmYXVsdCwge0BsaW5rIE1hdGhDb250ZXh0I1JPVU5EX0hBTEZfVVB9LgorICAqIEByZXR1cm4gICAgICAgICAgQSA8Y29kZT5TdHJpbmc8L2NvZGU+IHJlcHJlc2VudGluZyB0aGlzCisgICogICAgICAgICAgICAgICAgICA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiwgbGFpZCBvdXQgYWNjb3JkaW5nIHRvIHRoZQorICAqICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHBhcmFtZXRlcnMKKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgdGhlIG51bWJlciBjYW5ub3QgYmUgbGFpZCBvdXQgYXMKKyAgKiAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZC4KKyAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBhIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UuCisgICogQHNlZSAgICAjdG9TdHJpbmcKKyAgKiBAc2VlICAgICN0b0NoYXJBcnJheQorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGZvcm1hdChpbnQgYmVmb3JlLGludCBhZnRlcixpbnQgZXhwbGFjZXMsaW50IGV4ZGlnaXRzLGludCBleGZvcm1pbnQsaW50IGV4cm91bmQpeworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbnVtOworICBpbnQgbWFnPTA7CisgIGludCB0aGlzYWZ0ZXI9MDsKKyAgaW50IGxlYWQ9MDsKKyAgYnl0ZSBuZXdtYW50W109bnVsbDsKKyAgaW50IGNob3A9MDsKKyAgaW50IG5lZWQ9MDsKKyAgaW50IG9sZGV4cD0wOworICBjaGFyIGFbXTsKKyAgaW50IHA9MDsKKyAgY2hhciBuZXdhW109bnVsbDsKKyAgaW50IGk9MDsKKyAgaW50IHBsYWNlcz0wOworICAKKyAgCisgIC8qIENoZWNrIGFyZ3VtZW50cyAqLworICBpZiAoKGJlZm9yZTwoLTEpKXwoYmVmb3JlPT0wKSkgCisgICBiYWRhcmcoImZvcm1hdCIsMSxqYXZhLmxhbmcuU3RyaW5nLnZhbHVlT2YoYmVmb3JlKSk7CisgIGlmIChhZnRlcjwoLTEpKSAKKyAgIGJhZGFyZygiZm9ybWF0IiwyLGphdmEubGFuZy5TdHJpbmcudmFsdWVPZihhZnRlcikpOworICBpZiAoKGV4cGxhY2VzPCgtMSkpfChleHBsYWNlcz09MCkpIAorICAgYmFkYXJnKCJmb3JtYXQiLDMsamF2YS5sYW5nLlN0cmluZy52YWx1ZU9mKGV4cGxhY2VzKSk7CisgIGlmIChleGRpZ2l0czwoLTEpKSAKKyAgIGJhZGFyZygiZm9ybWF0Iiw0LGphdmEubGFuZy5TdHJpbmcudmFsdWVPZihleHBsYWNlcykpOworICB7LypzZWxlY3QqLworICBpZiAoZXhmb3JtaW50PT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUMpCisgICA7CisgIGVsc2UgaWYgKGV4Zm9ybWludD09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5FTkdJTkVFUklORykKKyAgIDsKKyAgZWxzZSBpZiAoZXhmb3JtaW50PT0oLTEpKQorICAgZXhmb3JtaW50PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuU0NJRU5USUZJQzsKKyAgIC8vIG5vdGUgUExBSU4gaXNuJ3QgYWxsb3dlZAorICBlbHNleworICAgYmFkYXJnKCJmb3JtYXQiLDUsamF2YS5sYW5nLlN0cmluZy52YWx1ZU9mKGV4Zm9ybWludCkpOworICB9CisgIH0KKyAgLy8gY2hlY2tpbmcgdGhlIHJvdW5kaW5nIG1vZGUgaXMgZG9uZSBieSB0cnlpbmcgdG8gY29uc3RydWN0IGEKKyAgLy8gTWF0aENvbnRleHQgb2JqZWN0IHdpdGggdGhhdCBtb2RlOyBpdCB3aWxsIGZhaWwgaWYgYmFkCisgIGlmIChleHJvdW5kIT1ST1VORF9IQUxGX1VQKSAKKyAgIHt0cnl7IC8vIGlmIG5vbi1kZWZhdWx0Li4uCisgICAgaWYgKGV4cm91bmQ9PSgtMSkpIAorICAgICBleHJvdW5kPVJPVU5EX0hBTEZfVVA7CisgICAgZWxzZSAKKyAgICAgbmV3IGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQoOSxjb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUMsZmFsc2UsZXhyb3VuZCk7CisgICB9CisgICBjYXRjaCAoamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAkMTApeworICAgIGJhZGFyZygiZm9ybWF0Iiw2LGphdmEubGFuZy5TdHJpbmcudmFsdWVPZihleHJvdW5kKSk7CisgICB9fQorICAKKyAgbnVtPWNsb25lKHRoaXMpOyAvLyBtYWtlIHByaXZhdGUgY29weQorICAKKyAgLyogSGVyZToKKyAgICAgbnVtICAgICAgIGlzIEJpZ0RlY2ltYWwgdG8gZm9ybWF0CisgICAgIGJlZm9yZSAgICBpcyBwbGFjZXMgYmVmb3JlIHBvaW50IFs+MF0KKyAgICAgYWZ0ZXIgICAgIGlzIHBsYWNlcyBhZnRlciBwb2ludCAgWz49MF0KKyAgICAgZXhwbGFjZXMgIGlzIGV4cG9uZW50IHBsYWNlcyAgICAgWz4wXQorICAgICBleGRpZ2l0cyAgaXMgZXhwb25lbnQgZGlnaXRzICAgICBbPj0wXQorICAgICBleGZvcm1pbnQgaXMgZXhwb25lbnQgZm9ybSAgICAgICBbb25lIG9mIHR3b10KKyAgICAgZXhyb3VuZCAgIGlzIHJvdW5kaW5nIG1vZGUgICAgICAgW29uZSBvZiBlaWdodF0KKyAgICAgJ2JlZm9yZScgdGhyb3VnaCAnZXhkaWdpdHMnIGFyZSAtMSBpZiBub3Qgc3BlY2lmaWVkCisgICovCisgIAorICAvKiBkZXRlcm1pbmUgZm9ybSAqLworICB7c2V0Zm9ybTpkb3svKnNlbGVjdCovCisgIGlmIChleGRpZ2l0cz09KC0xKSkKKyAgIG51bS5mb3JtPShieXRlKWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU47CisgIGVsc2UgaWYgKG51bS5pbmQ9PWlzemVybykKKyAgIG51bS5mb3JtPShieXRlKWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU47CisgIGVsc2V7CisgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0cmlnZ2VycworICAgbWFnPW51bS5leHArbnVtLm1hbnQubGVuZ3RoOworICAgaWYgKG1hZz5leGRpZ2l0cykgCisgICAgbnVtLmZvcm09KGJ5dGUpZXhmb3JtaW50OworICAgZWxzZSAKKyAgICBpZiAobWFnPCgtNSkpIAorICAgICBudW0uZm9ybT0oYnl0ZSlleGZvcm1pbnQ7CisgICAgZWxzZSAKKyAgICAgbnVtLmZvcm09KGJ5dGUpY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTjsKKyAgfQorICB9d2hpbGUoZmFsc2UpO30vKnNldGZvcm0qLworICAKKyAgLyogSWYgJ2FmdGVyJyB3YXMgc3BlY2lmaWVkIHRoZW4gd2UgbWF5IG5lZWQgdG8gYWRqdXN0IHRoZQorICAgICBtYW50aXNzYS4gIFRoaXMgaXMgYSBsaXR0bGUgdHJpY2t5LCBhcyB3ZSBtdXN0IGNvbmZvcm0gdG8gdGhlCisgICAgIHJ1bGVzIG9mIGV4cG9uZW50aWFsIGxheW91dCBpZiBuZWNlc3NhcnkgKGUuZy4sIHdlIGNhbm5vdCBlbmQgdXAKKyAgICAgd2l0aCAxMC4wIGlmIHNjaWVudGlmaWMpLiAqLworICBpZiAoYWZ0ZXI+PTApIAorICAge3NldGFmdGVyOmZvcig7Oyl7CisgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFmdGVyLWxlbmd0aAorICAgIHsvKnNlbGVjdCovCisgICAgaWYgKG51bS5mb3JtPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOKQorICAgICB0aGlzYWZ0ZXI9KGludCktbnVtLmV4cDsgLy8gaGFzIGRlY2ltYWwgcGFydAorICAgIGVsc2UgaWYgKG51bS5mb3JtPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUMpCisgICAgIHRoaXNhZnRlcj1udW0ubWFudC5sZW5ndGgtMTsKKyAgICBlbHNleyAvLyBlbmdpbmVlcmluZworICAgICBsZWFkPSgoKG51bS5leHArbnVtLm1hbnQubGVuZ3RoKS0xKSklMzsgLy8gZXhwb25lbnQgdG8gdXNlCisgICAgIGlmIChsZWFkPDApIAorICAgICAgbGVhZD0zK2xlYWQ7IC8vIG5lZ2F0aXZlIGV4cG9uZW50IGNhc2UKKyAgICAgbGVhZCsrOyAvLyBudW1iZXIgb2YgbGVhZGluZyBkaWdpdHMKKyAgICAgaWYgKGxlYWQ+PW51bS5tYW50Lmxlbmd0aCkgCisgICAgICB0aGlzYWZ0ZXI9MDsKKyAgICAgZWxzZSAKKyAgICAgIHRoaXNhZnRlcj1udW0ubWFudC5sZW5ndGgtbGVhZDsKKyAgICB9CisgICAgfQorICAgIGlmICh0aGlzYWZ0ZXI9PWFmdGVyKSAKKyAgICAgYnJlYWsgc2V0YWZ0ZXI7IC8vIHdlJ3JlIGluIGx1Y2sKKyAgICBpZiAodGhpc2FmdGVyPGFmdGVyKSAKKyAgICAgeyAvLyBuZWVkIGFkZGVkIHRyYWlsaW5nIHplcm9zCisgICAgICAvLyBbdGhpc2FmdGVyIGNhbiBiZSBuZWdhdGl2ZV0KKyAgICAgIG5ld21hbnQ9ZXh0ZW5kKG51bS5tYW50LChudW0ubWFudC5sZW5ndGgrYWZ0ZXIpLXRoaXNhZnRlcik7CisgICAgICBudW0ubWFudD1uZXdtYW50OworICAgICAgbnVtLmV4cD1udW0uZXhwLSgoYWZ0ZXItdGhpc2FmdGVyKSk7IC8vIGFkanVzdCBleHBvbmVudAorICAgICAgaWYgKG51bS5leHA8TWluRXhwKSAKKyAgICAgICB0aHJvdyBuZXcgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24oIkV4cG9uZW50IE92ZXJmbG93OiIrIiAiK251bS5leHApOworICAgICAgYnJlYWsgc2V0YWZ0ZXI7CisgICAgIH0KKyAgICAvLyBXZSBoYXZlIHRvbyBtYW55IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludDsgdGhpcyBjb3VsZAorICAgIC8vIGNhdXNlIGEgY2FycnksIHdoaWNoIGNvdWxkIGNoYW5nZSB0aGUgbWFudGlzc2EuLi4KKyAgICAvLyBXYXRjaCBvdXQgZm9yIGltcGxpZWQgbGVhZGluZyB6ZXJvcyBpbiBQTEFJTiBjYXNlCisgICAgY2hvcD10aGlzYWZ0ZXItYWZ0ZXI7IC8vIGRpZ2l0cyB0byBsb3AgW2lzID4wXQorICAgIGlmIChjaG9wPm51bS5tYW50Lmxlbmd0aCkgCisgICAgIHsgLy8gYWxsIGRpZ2l0cyBnbywgbm8gY2hhbmNlIG9mIGNhcnJ5CisgICAgICAvLyBjYXJyeSBvbiB3aXRoIHplcm8KKyAgICAgIG51bS5tYW50PVpFUk8ubWFudDsKKyAgICAgIG51bS5pbmQ9aXN6ZXJvOworICAgICAgbnVtLmV4cD0wOworICAgICAgY29udGludWUgc2V0YWZ0ZXI7IC8vIHJlY2hlY2s6IHdlIG1heSBuZWVkIHRyYWlsaW5nIHplcm9zCisgICAgIH0KKyAgICAvLyB3ZSBoYXZlIGEgZGlnaXQgdG8gaW5zcGVjdCBmcm9tIGV4aXN0aW5nIG1hbnRpc3NhCisgICAgLy8gcm91bmQgdGhlIG51bWJlciBhcyByZXF1aXJlZAorICAgIG5lZWQ9bnVtLm1hbnQubGVuZ3RoLWNob3A7IC8vIGRpZ2l0cyB0byBlbmQgdXAgd2l0aCBbbWF5IGJlIDBdCisgICAgb2xkZXhwPW51bS5leHA7IC8vIHNhdmUgb2xkIGV4cG9uZW50CisgICAgbnVtLnJvdW5kKG5lZWQsZXhyb3VuZCk7CisgICAgLy8gaWYgdGhlIGV4cG9uZW50IGdyZXcgYnkgbW9yZSB0aGFuIHRoZSBkaWdpdHMgd2UgY2hvcHBlZCwgdGhlbgorICAgIC8vIHdlIG11c3QgaGF2ZSBoYWQgYSBjYXJyeSwgc28gd2lsbCBuZWVkIHRvIHJlY2hlY2sgdGhlIGxheW91dAorICAgIGlmICgobnVtLmV4cC1vbGRleHApPT1jaG9wKSAKKyAgICAgYnJlYWsgc2V0YWZ0ZXI7IC8vIG51bWJlciBkaWQgbm90IGhhdmUgY2FycnkKKyAgICAvLyBtYW50aXNzYSBnb3QgZXh0ZW5kZWQgLi4gc28gZ28gYXJvdW5kIGFuZCBjaGVjayBhZ2FpbgorICAgIH0KKyAgIH0vKnNldGFmdGVyKi8KKyAgCisgIGE9bnVtLmxheW91dCgpOyAvLyBsYXkgb3V0LCB3aXRoIGV4cG9uZW50IGlmIHJlcXVpcmVkLCBldGMuCisgIAorICAvKiBIZXJlIHdlIGhhdmUgbGFpZC1vdXQgbnVtYmVyIGluICdhJyAqLworICAvLyBub3cgYXBwbHkgJ2JlZm9yZScgYW5kICdleHBsYWNlcycgYXMgbmVlZGVkCisgIGlmIChiZWZvcmU+MCkgCisgICB7CisgICAgLy8gbG9vayBmb3IgJy4nIG9yICdFJworICAgIHtpbnQgJDExPWEubGVuZ3RoO3A9MDtwOmZvcig7JDExPjA7JDExLS0scCsrKXsKKyAgICAgaWYgKGFbcF09PScuJykgCisgICAgICBicmVhayBwOworICAgICBpZiAoYVtwXT09J0UnKSAKKyAgICAgIGJyZWFrIHA7CisgICAgIH0KKyAgICB9LypwKi8KKyAgICAvLyBwIGlzIG5vdyBvZmZzZXQgb2YgJy4nLCAnRScsIG9yIGNoYXJhY3RlciBhZnRlciBlbmQgb2YgYXJyYXkKKyAgICAvLyB0aGF0IGlzLCB0aGUgY3VycmVudCBsZW5ndGggb2YgYmVmb3JlIHBhcnQKKyAgICBpZiAocD5iZWZvcmUpIAorICAgICBiYWRhcmcoImZvcm1hdCIsMSxqYXZhLmxhbmcuU3RyaW5nLnZhbHVlT2YoYmVmb3JlKSk7IC8vIHdvbid0IGZpdAorICAgIGlmIChwPGJlZm9yZSkgCisgICAgIHsgLy8gbmVlZCBsZWFkaW5nIGJsYW5rcworICAgICAgbmV3YT1uZXcgY2hhclsoYS5sZW5ndGgrYmVmb3JlKS1wXTsKKyAgICAgIHtpbnQgJDEyPWJlZm9yZS1wO2k9MDtpOmZvcig7JDEyPjA7JDEyLS0saSsrKXsKKyAgICAgICBuZXdhW2ldPScgJzsKKyAgICAgICB9CisgICAgICB9LyppKi8KKyAgICAgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KChqYXZhLmxhbmcuT2JqZWN0KWEsMCwoamF2YS5sYW5nLk9iamVjdCluZXdhLGksYS5sZW5ndGgpOworICAgICAgYT1uZXdhOworICAgICB9CisgICAvLyBbaWYgcD1iZWZvcmUgdGhlbiBpdCdzIGp1c3QgdGhlIHJpZ2h0IGxlbmd0aF0KKyAgIH0KKyAgCisgIGlmIChleHBsYWNlcz4wKSAKKyAgIHsKKyAgICAvLyBsb29rIGZvciAnRScgW2Nhbm5vdCBiZSBhdCBvZmZzZXQgMF0KKyAgICB7aW50ICQxMz1hLmxlbmd0aC0xO3A9YS5sZW5ndGgtMTtwOmZvcig7JDEzPjA7JDEzLS0scC0tKXsKKyAgICAgaWYgKGFbcF09PSdFJykgCisgICAgICBicmVhayBwOworICAgICB9CisgICAgfS8qcCovCisgICAgLy8gcCBpcyBub3cgb2Zmc2V0IG9mICdFJywgb3IgMAorICAgIGlmIChwPT0wKSAKKyAgICAgeyAvLyBubyBFIHBhcnQ7IGFkZCB0cmFpbGluZyBibGFua3MKKyAgICAgIG5ld2E9bmV3IGNoYXJbKGEubGVuZ3RoK2V4cGxhY2VzKSsyXTsKKyAgICAgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KChqYXZhLmxhbmcuT2JqZWN0KWEsMCwoamF2YS5sYW5nLk9iamVjdCluZXdhLDAsYS5sZW5ndGgpOworICAgICAge2ludCAkMTQ9ZXhwbGFjZXMrMjtpPWEubGVuZ3RoO2k6Zm9yKDskMTQ+MDskMTQtLSxpKyspeworICAgICAgIG5ld2FbaV09JyAnOworICAgICAgIH0KKyAgICAgIH0vKmkqLworICAgICAgYT1uZXdhOworICAgICB9CisgICAgZWxzZSAKKyAgICAgey8qIGZvdW5kIEUgKi8gLy8gbWF5IG5lZWQgdG8gaW5zZXJ0IHplcm9zCisgICAgICBwbGFjZXM9KGEubGVuZ3RoLXApLTI7IC8vIG51bWJlciBzbyBmYXIKKyAgICAgIGlmIChwbGFjZXM+ZXhwbGFjZXMpIAorICAgICAgIGJhZGFyZygiZm9ybWF0IiwzLGphdmEubGFuZy5TdHJpbmcudmFsdWVPZihleHBsYWNlcykpOworICAgICAgaWYgKHBsYWNlczxleHBsYWNlcykgCisgICAgICAgeyAvLyBuZWVkIHRvIGluc2VydCB6ZXJvcworICAgICAgICBuZXdhPW5ldyBjaGFyWyhhLmxlbmd0aCtleHBsYWNlcyktcGxhY2VzXTsKKyAgICAgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkoKGphdmEubGFuZy5PYmplY3QpYSwwLChqYXZhLmxhbmcuT2JqZWN0KW5ld2EsMCxwKzIpOyAvLyB0aHJvdWdoIEUgYW5kIHNpZ24KKyAgICAgICAge2ludCAkMTU9ZXhwbGFjZXMtcGxhY2VzO2k9cCsyO2k6Zm9yKDskMTU+MDskMTUtLSxpKyspeworICAgICAgICAgbmV3YVtpXT0nMCc7CisgICAgICAgICB9CisgICAgICAgIH0vKmkqLworICAgICAgICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSgoamF2YS5sYW5nLk9iamVjdClhLHArMiwoamF2YS5sYW5nLk9iamVjdCluZXdhLGkscGxhY2VzKTsgLy8gcmVtYWluZGVyIG9mIGV4cG9uZW50CisgICAgICAgIGE9bmV3YTsKKyAgICAgICB9CisgICAgIC8vIFtpZiBwbGFjZXM9ZXhwbGFjZXMgdGhlbiBpdCdzIGp1c3QgdGhlIHJpZ2h0IGxlbmd0aF0KKyAgICAgfQorICAgfQorICByZXR1cm4gbmV3IGphdmEubGFuZy5TdHJpbmcoYSk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgdGhlIGhhc2hjb2RlIGZvciB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LgorICAqIFRoaXMgaGFzaGNvZGUgaXMgc3VpdGFibGUgZm9yIHVzZSBieSB0aGUKKyAgKiA8Y29kZT5qYXZhLnV0aWwuSGFzaHRhYmxlPC9jb2RlPiBjbGFzcy4KKyAgKiA8cD4KKyAgKiBOb3RlIHRoYXQgdHdvIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9iamVjdHMgYXJlIG9ubHkgZ3VhcmFudGVlZAorICAqIHRvIHByb2R1Y2UgdGhlIHNhbWUgaGFzaGNvZGUgaWYgdGhleSBhcmUgZXhhY3RseSBlcXVhbCAodGhhdCBpcywKKyAgKiB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPiByZXByZXNlbnRhdGlvbnMgb2YgdGhlCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gbnVtYmVycyBhcmUgaWRlbnRpY2FsIC0tIHRoZXkgaGF2ZSB0aGUgc2FtZQorICAqIGNoYXJhY3RlcnMgaW4gdGhlIHNhbWUgc2VxdWVuY2UpLgorICAqCisgICogQHJldHVybiBBbiA8Y29kZT5pbnQ8L2NvZGU+IHRoYXQgaXMgdGhlIGhhc2hjb2RlIGZvciA8Y29kZT50aGlzPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgaW50IGhhc2hDb2RlKCl7CisgIC8vIE1heWJlIGNhbGN1bGF0ZSBvdXJzZWx2ZXMsIGxhdGVyLiAgSWYgc28sIG5vdGUgdGhhdCB0aGVyZSBjYW4gYmUKKyAgLy8gbW9yZSB0aGFuIG9uZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBnaXZlbiB0b1N0cmluZygpIHJlc3VsdC4KKyAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKS5oYXNoQ29kZSgpOworICB9CisKKyAvKioKKyAgKiBDb252ZXJ0cyB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRvIGFuIDxjb2RlPmludDwvY29kZT4uCisgICogSWYgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGhhcyBhIG5vbi16ZXJvIGRlY2ltYWwgcGFydCBpdCBpcworICAqIGRpc2NhcmRlZC4gSWYgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGlzIG91dCBvZiB0aGUgcG9zc2libGUKKyAgKiByYW5nZSBmb3IgYW4gPGNvZGU+aW50PC9jb2RlPiAoMzItYml0IHNpZ25lZCBpbnRlZ2VyKSByZXN1bHQgdGhlbgorICAqIG9ubHkgdGhlIGxvdy1vcmRlciAzMiBiaXRzIGFyZSB1c2VkLiAoVGhhdCBpcywgdGhlIG51bWJlciBtYXkgYmUKKyAgKiA8aT5kZWNhcGl0YXRlZDwvaT4uKSAgVG8gYXZvaWQgdW5leHBlY3RlZCBlcnJvcnMgd2hlbiB0aGVzZQorICAqIGNvbmRpdGlvbnMgb2NjdXIsIHVzZSB0aGUge0BsaW5rICNpbnRWYWx1ZUV4YWN0fSBtZXRob2QuCisgICoKKyAgKiBAcmV0dXJuIEFuIDxjb2RlPmludDwvY29kZT4gY29udmVydGVkIGZyb20gPGNvZGU+dGhpczwvY29kZT4sCisgICogICAgICAgICB0cnVuY2F0ZWQgYW5kIGRlY2FwaXRhdGVkIGlmIG5lY2Vzc2FyeS4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgaW50IGludFZhbHVlKCl7CisgIHJldHVybiB0b0JpZ0ludGVnZXIoKS5pbnRWYWx1ZSgpOworICB9CisKKyAvKioKKyAgKiBDb252ZXJ0cyB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRvIGFuIDxjb2RlPmludDwvY29kZT4uCisgICogSWYgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGhhcyBhIG5vbi16ZXJvIGRlY2ltYWwgcGFydCBvciBpcworICAqIG91dCBvZiB0aGUgcG9zc2libGUgcmFuZ2UgZm9yIGFuIDxjb2RlPmludDwvY29kZT4gKDMyLWJpdCBzaWduZWQKKyAgKiBpbnRlZ2VyKSByZXN1bHQgdGhlbiBhbiA8Y29kZT5Bcml0aG1ldGljRXhjZXB0aW9uPC9jb2RlPiBpcyB0aHJvd24uCisgICoKKyAgKiBAcmV0dXJuIEFuIDxjb2RlPmludDwvY29kZT4gZXF1YWwgaW4gdmFsdWUgdG8gPGNvZGU+dGhpczwvY29kZT4uCisgICogQHRocm93cyBBcml0aG1ldGljRXhjZXB0aW9uIGlmIDxjb2RlPnRoaXM8L2NvZGU+IGhhcyBhIG5vbi16ZXJvCisgICogICAgICAgICAgICAgICAgIGRlY2ltYWwgcGFydCwgb3Igd2lsbCBub3QgZml0IGluIGFuCisgICogICAgICAgICAgICAgICAgIDxjb2RlPmludDwvY29kZT4uCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGludCBpbnRWYWx1ZUV4YWN0KCl7CisgIGludCBsb2RpZ2l0OworICBpbnQgdXNlZXhwPTA7CisgIGludCByZXN1bHQ7CisgIGludCBpPTA7CisgIGludCB0b3BkaWc9MDsKKyAgLy8gVGhpcyBkb2VzIG5vdCB1c2UgbG9uZ1ZhbHVlRXhhY3QoKSBhcyB0aGUgbGF0dGVyIGNhbiBiZSBtdWNoCisgIC8vIHNsb3dlci4KKyAgLy8gaW50Y2hlY2sgKGZyb20gcG93KSByZWxpZXMgb24gdGhpcyB0byBjaGVjayBkZWNpbWFsIHBhcnQKKyAgaWYgKGluZD09aXN6ZXJvKSAKKyAgIHJldHVybiAwOyAvLyBlYXN5LCBhbmQgcXVpdGUgY29tbW9uCisgIC8qIHRlc3QgYW5kIGRyb3AgYW55IHRyYWlsaW5nIGRlY2ltYWwgcGFydCAqLworICBsb2RpZ2l0PW1hbnQubGVuZ3RoLTE7CisgIGlmIChleHA8MCkgCisgICB7CisgICAgbG9kaWdpdD1sb2RpZ2l0K2V4cDsgLy8gcmVkdWNlcyBieSAtKC1leHApCisgICAgLyogYWxsIGRlY2ltYWwgcGxhY2VzIG11c3QgYmUgMCAqLworICAgIGlmICgoIShhbGx6ZXJvKG1hbnQsbG9kaWdpdCsxKSkpKSAKKyAgICAgdGhyb3cgbmV3IGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uKCJEZWNpbWFsIHBhcnQgbm9uLXplcm86IisiICIrdGhpcy50b1N0cmluZygpKTsKKyAgICBpZiAobG9kaWdpdDwwKSAKKyAgICAgcmV0dXJuIDA7IC8vIC0xPHRoaXM8MQorICAgIHVzZWV4cD0wOworICAgfQorICBlbHNlIAorICAgey8qID49MCAqLworICAgIGlmICgoZXhwK2xvZGlnaXQpPjkpICAvLyBlYXJseSBleGl0CisgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiQ29udmVyc2lvbiBvdmVyZmxvdzoiKyIgIit0aGlzLnRvU3RyaW5nKCkpOworICAgIHVzZWV4cD1leHA7CisgICB9CisgIC8qIGNvbnZlcnQgdGhlIG1hbnRpc3NhIHRvIGJpbmFyeSwgaW5saW5lIGZvciBzcGVlZCAqLworICByZXN1bHQ9MDsKKyAge2ludCAkMTY9bG9kaWdpdCt1c2VleHA7aT0wO2k6Zm9yKDtpPD0kMTY7aSsrKXsKKyAgIHJlc3VsdD1yZXN1bHQqMTA7CisgICBpZiAoaTw9bG9kaWdpdCkgCisgICAgcmVzdWx0PXJlc3VsdCttYW50W2ldOworICAgfQorICB9LyppKi8KKyAgCisgIC8qIE5vdywgaWYgdGhlIHJpc2t5IGxlbmd0aCwgY2hlY2sgZm9yIG92ZXJmbG93ICovCisgIGlmICgobG9kaWdpdCt1c2VleHApPT05KSAKKyAgIHsKKyAgICAvLyBub3RlIHdlIGNhbm5vdCBqdXN0IHRlc3QgZm9yIC12ZSByZXN1bHQsIGFzIG92ZXJmbG93IGNhbiBtb3ZlIGEKKyAgICAvLyB6ZXJvIGludG8gdGhlIHRvcCBiaXQgW2NvbnNpZGVyIDU1NTU1NTU1NTVdCisgICAgdG9wZGlnPXJlc3VsdC8xMDAwMDAwMDAwOyAvLyBnZXQgdG9wIGRpZ2l0LCBwcmVzZXJ2aW5nIHNpZ24KKyAgICBpZiAodG9wZGlnIT1tYW50WzBdKSAKKyAgICAgeyAvLyBkaWdpdCBtdXN0IG1hdGNoIGFuZCBiZSBwb3NpdGl2ZQorICAgICAgLy8gZXhjZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgLi4uCisgICAgICBpZiAocmVzdWx0PT1qYXZhLmxhbmcuSW50ZWdlci5NSU5fVkFMVUUpICAvLyBsb29rcyBsaWtlIHRoZSBzcGVjaWFsCisgICAgICAgaWYgKGluZD09aXNuZWcpICAvLyByZWFsbHkgd2FzIG5lZ2F0aXZlCisgICAgICAgIGlmIChtYW50WzBdPT0yKSAKKyAgICAgICAgIHJldHVybiByZXN1bHQ7IC8vIHJlYWxseSBoYWQgdG9wIGRpZ2l0IDIKKyAgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiQ29udmVyc2lvbiBvdmVyZmxvdzoiKyIgIit0aGlzLnRvU3RyaW5nKCkpOworICAgICB9CisgICB9CisgIAorICAvKiBMb29rcyBnb29kICovCisgIGlmIChpbmQ9PWlzcG9zKSAKKyAgIHJldHVybiByZXN1bHQ7CisgIHJldHVybiAoaW50KS1yZXN1bHQ7CisgIH0KKworIC8qKgorICAqIENvbnZlcnRzIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gdG8gYSA8Y29kZT5sb25nPC9jb2RlPi4KKyAgKiBJZiB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gaGFzIGEgbm9uLXplcm8gZGVjaW1hbCBwYXJ0IGl0IGlzCisgICogZGlzY2FyZGVkLiBJZiB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gaXMgb3V0IG9mIHRoZSBwb3NzaWJsZQorICAqIHJhbmdlIGZvciBhIDxjb2RlPmxvbmc8L2NvZGU+ICg2NC1iaXQgc2lnbmVkIGludGVnZXIpIHJlc3VsdCB0aGVuCisgICogb25seSB0aGUgbG93LW9yZGVyIDY0IGJpdHMgYXJlIHVzZWQuIChUaGF0IGlzLCB0aGUgbnVtYmVyIG1heSBiZQorICAqIDxpPmRlY2FwaXRhdGVkPC9pPi4pICBUbyBhdm9pZCB1bmV4cGVjdGVkIGVycm9ycyB3aGVuIHRoZXNlCisgICogY29uZGl0aW9ucyBvY2N1ciwgdXNlIHRoZSB7QGxpbmsgI2xvbmdWYWx1ZUV4YWN0fSBtZXRob2QuCisgICoKKyAgKiBAcmV0dXJuIEEgPGNvZGU+bG9uZzwvY29kZT4gY29udmVydGVkIGZyb20gPGNvZGU+dGhpczwvY29kZT4sCisgICogICAgICAgICB0cnVuY2F0ZWQgYW5kIGRlY2FwaXRhdGVkIGlmIG5lY2Vzc2FyeS4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgbG9uZyBsb25nVmFsdWUoKXsKKyAgcmV0dXJuIHRvQmlnSW50ZWdlcigpLmxvbmdWYWx1ZSgpOworICB9CisKKyAvKioKKyAgKiBDb252ZXJ0cyB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRvIGEgPGNvZGU+bG9uZzwvY29kZT4uCisgICogSWYgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGhhcyBhIG5vbi16ZXJvIGRlY2ltYWwgcGFydCBvciBpcworICAqIG91dCBvZiB0aGUgcG9zc2libGUgcmFuZ2UgZm9yIGEgPGNvZGU+bG9uZzwvY29kZT4gKDY0LWJpdCBzaWduZWQKKyAgKiBpbnRlZ2VyKSByZXN1bHQgdGhlbiBhbiA8Y29kZT5Bcml0aG1ldGljRXhjZXB0aW9uPC9jb2RlPiBpcyB0aHJvd24uCisgICoKKyAgKiBAcmV0dXJuIEEgPGNvZGU+bG9uZzwvY29kZT4gZXF1YWwgaW4gdmFsdWUgdG8gPGNvZGU+dGhpczwvY29kZT4uCisgICogQHRocm93cyBBcml0aG1ldGljRXhjZXB0aW9uIGlmIDxjb2RlPnRoaXM8L2NvZGU+IGhhcyBhIG5vbi16ZXJvCisgICogICAgICAgICAgICAgICAgIGRlY2ltYWwgcGFydCwgb3Igd2lsbCBub3QgZml0IGluIGEKKyAgKiAgICAgICAgICAgICAgICAgPGNvZGU+bG9uZzwvY29kZT4uCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGxvbmcgbG9uZ1ZhbHVlRXhhY3QoKXsKKyAgaW50IGxvZGlnaXQ7CisgIGludCBjc3RhcnQ9MDsKKyAgaW50IHVzZWV4cD0wOworICBsb25nIHJlc3VsdDsKKyAgaW50IGk9MDsKKyAgbG9uZyB0b3BkaWc9MDsKKyAgLy8gSWRlbnRpY2FsIHRvIGludFZhbHVlRXhhY3QgZXhjZXB0IGZvciByZXN1bHQ9bG9uZywgYW5kIGV4cD49MjAgdGVzdAorICBpZiAoaW5kPT0wKSAKKyAgIHJldHVybiAwOyAvLyBlYXN5LCBhbmQgcXVpdGUgY29tbW9uCisgIGxvZGlnaXQ9bWFudC5sZW5ndGgtMTsgLy8gbGFzdCBpbmNsdWRlZCBkaWdpdAorICBpZiAoZXhwPDApIAorICAgeworICAgIGxvZGlnaXQ9bG9kaWdpdCtleHA7IC8vIC0oLWV4cCkKKyAgICAvKiBhbGwgZGVjaW1hbCBwbGFjZXMgbXVzdCBiZSAwICovCisgICAgaWYgKGxvZGlnaXQ8MCkgCisgICAgIGNzdGFydD0wOworICAgIGVsc2UgCisgICAgIGNzdGFydD1sb2RpZ2l0KzE7CisgICAgaWYgKCghKGFsbHplcm8obWFudCxjc3RhcnQpKSkpIAorICAgICB0aHJvdyBuZXcgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24oIkRlY2ltYWwgcGFydCBub24temVybzoiKyIgIit0aGlzLnRvU3RyaW5nKCkpOworICAgIGlmIChsb2RpZ2l0PDApIAorICAgICByZXR1cm4gMDsgLy8gLTE8dGhpczwxCisgICAgdXNlZXhwPTA7CisgICB9CisgIGVsc2UgCisgICB7LyogPj0wICovCisgICAgaWYgKChleHArbWFudC5sZW5ndGgpPjE4KSAgLy8gZWFybHkgZXhpdAorICAgICB0aHJvdyBuZXcgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24oIkNvbnZlcnNpb24gb3ZlcmZsb3c6IisiICIrdGhpcy50b1N0cmluZygpKTsKKyAgICB1c2VleHA9ZXhwOworICAgfQorICAKKyAgLyogY29udmVydCB0aGUgbWFudGlzc2EgdG8gYmluYXJ5LCBpbmxpbmUgZm9yIHNwZWVkICovCisgIC8vIG5vdGUgdGhhdCB3ZSBjb3VsZCBzYWZlbHkgdXNlIHRoZSAndGVzdCBmb3Igd3JhcCB0byBuZWdhdGl2ZScKKyAgLy8gYWxnb3JpdGhtIGhlcmUsIGJ1dCBpbnN0ZWFkIHdlIHBhcmFsbGVsIHRoZSBpbnRWYWx1ZUV4YWN0CisgIC8vIGFsZ29yaXRobSBmb3IgZWFzZSBvZiBjaGVja2luZyBhbmQgbWFpbnRlbmFuY2UuCisgIHJlc3VsdD0obG9uZykwOworICB7aW50ICQxNz1sb2RpZ2l0K3VzZWV4cDtpPTA7aTpmb3IoO2k8PSQxNztpKyspeworICAgcmVzdWx0PXJlc3VsdCoxMDsKKyAgIGlmIChpPD1sb2RpZ2l0KSAKKyAgICByZXN1bHQ9cmVzdWx0K21hbnRbaV07CisgICB9CisgIH0vKmkqLworICAKKyAgLyogTm93LCBpZiB0aGUgcmlza3kgbGVuZ3RoLCBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KKyAgaWYgKChsb2RpZ2l0K3VzZWV4cCk9PTE4KSAKKyAgIHsKKyAgICB0b3BkaWc9cmVzdWx0LzEwMDAwMDAwMDAwMDAwMDAwMDBMOyAvLyBnZXQgdG9wIGRpZ2l0LCBwcmVzZXJ2aW5nIHNpZ24KKyAgICBpZiAodG9wZGlnIT1tYW50WzBdKSAKKyAgICAgeyAvLyBkaWdpdCBtdXN0IG1hdGNoIGFuZCBiZSBwb3NpdGl2ZQorICAgICAgLy8gZXhjZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgLi4uCisgICAgICBpZiAocmVzdWx0PT1qYXZhLmxhbmcuTG9uZy5NSU5fVkFMVUUpICAvLyBsb29rcyBsaWtlIHRoZSBzcGVjaWFsCisgICAgICAgaWYgKGluZD09aXNuZWcpICAvLyByZWFsbHkgd2FzIG5lZ2F0aXZlCisgICAgICAgIGlmIChtYW50WzBdPT05KSAKKyAgICAgICAgIHJldHVybiByZXN1bHQ7IC8vIHJlYWxseSBoYWQgdG9wIGRpZ2l0IDkKKyAgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiQ29udmVyc2lvbiBvdmVyZmxvdzoiKyIgIit0aGlzLnRvU3RyaW5nKCkpOworICAgICB9CisgICB9CisgIAorICAvKiBMb29rcyBnb29kICovCisgIGlmIChpbmQ9PWlzcG9zKSAKKyAgIHJldHVybiByZXN1bHQ7CisgIHJldHVybiAobG9uZyktcmVzdWx0OworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgcGxhaW4gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgZGVjaW1hbCBwb2ludCBoYXMKKyAgKiBiZWVuIG1vdmVkIHRvIHRoZSBsZWZ0IGJ5IGEgc3BlY2lmaWVkIG51bWJlciBvZiBwb3NpdGlvbnMuCisgICogVGhlIHBhcmFtZXRlciwgPGNvZGU+bjwvY29kZT4sIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9ucyB0bworICAqIG1vdmUgdGhlIGRlY2ltYWwgcG9pbnQuCisgICogVGhhdCBpcywgaWYgPGNvZGU+bjwvY29kZT4gaXMgMCBvciBwb3NpdGl2ZSwgdGhlIG51bWJlciByZXR1cm5lZCBpcworICAqIGdpdmVuIGJ5OgorICAqIDxwPjxjb2RlPgorICAqIHRoaXMubXVsdGlwbHkoVEVOLnBvdyhuZXcgQmlnRGVjaW1hbCgtbikpKQorICAqIDwvY29kZT4KKyAgKiA8cD4KKyAgKiA8Y29kZT5uPC9jb2RlPiBtYXkgYmUgbmVnYXRpdmUsIGluIHdoaWNoIGNhc2UgdGhlIG1ldGhvZCByZXR1cm5zCisgICogdGhlIHNhbWUgcmVzdWx0IGFzIDxjb2RlPm1vdmVQb2ludFJpZ2h0KC1uKTwvY29kZT4uCisgICoKKyAgKiBAcGFyYW0gIG4gVGhlIDxjb2RlPmludDwvY29kZT4gc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIHBsYWNlcyB0bworICAqICAgICAgICAgICBtb3ZlIHRoZSBkZWNpbWFsIHBvaW50IGxlZnR3YXJkcy4KKyAgKiBAcmV0dXJuICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBkZXJpdmVkIGZyb20KKyAgKiAgICAgICAgICAgPGNvZGU+dGhpczwvY29kZT4sIHdpdGggdGhlIGRlY2ltYWwgcG9pbnQgbW92ZWQKKyAgKiAgICAgICAgICAgPGNvZGU+bjwvY29kZT4gcGxhY2VzIHRvIHRoZSBsZWZ0LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbW92ZVBvaW50TGVmdChpbnQgbil7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByZXM7CisgIC8vIHZlcnkgbGl0dGxlIHBvaW50IGluIG9wdGltaXppbmcgZm9yIHNoaWZ0IG9mIDAKKyAgcmVzPWNsb25lKHRoaXMpOworICByZXMuZXhwPXJlcy5leHAtbjsKKyAgcmV0dXJuIHJlcy5maW5pc2gocGxhaW5NQyxmYWxzZSk7IC8vIGZpbmlzaCBzZXRzIGZvcm0gYW5kIGNoZWNrcyBleHBvbmVudAorICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIGEgcGxhaW4gPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hvc2UgZGVjaW1hbCBwb2ludCBoYXMKKyAgKiBiZWVuIG1vdmVkIHRvIHRoZSByaWdodCBieSBhIHNwZWNpZmllZCBudW1iZXIgb2YgcG9zaXRpb25zLgorICAqIFRoZSBwYXJhbWV0ZXIsIDxjb2RlPm48L2NvZGU+LCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwb3NpdGlvbnMgdG8KKyAgKiBtb3ZlIHRoZSBkZWNpbWFsIHBvaW50LgorICAqIFRoYXQgaXMsIGlmIDxjb2RlPm48L2NvZGU+IGlzIDAgb3IgcG9zaXRpdmUsIHRoZSBudW1iZXIgcmV0dXJuZWQgaXMKKyAgKiBnaXZlbiBieToKKyAgKiA8cD48Y29kZT4KKyAgKiB0aGlzLm11bHRpcGx5KFRFTi5wb3cobmV3IEJpZ0RlY2ltYWwobikpKQorICAqIDwvY29kZT4KKyAgKiA8cD4KKyAgKiA8Y29kZT5uPC9jb2RlPiBtYXkgYmUgbmVnYXRpdmUsIGluIHdoaWNoIGNhc2UgdGhlIG1ldGhvZCByZXR1cm5zCisgICogdGhlIHNhbWUgcmVzdWx0IGFzIDxjb2RlPm1vdmVQb2ludExlZnQoLW4pPC9jb2RlPi4KKyAgKgorICAqIEBwYXJhbSAgbiBUaGUgPGNvZGU+aW50PC9jb2RlPiBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgcGxhY2VzIHRvCisgICogICAgICAgICAgIG1vdmUgdGhlIGRlY2ltYWwgcG9pbnQgcmlnaHR3YXJkcy4KKyAgKiBAcmV0dXJuICAgQSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBkZXJpdmVkIGZyb20KKyAgKiAgICAgICAgICAgPGNvZGU+dGhpczwvY29kZT4sIHdpdGggdGhlIGRlY2ltYWwgcG9pbnQgbW92ZWQKKyAgKiAgICAgICAgICAgPGNvZGU+bjwvY29kZT4gcGxhY2VzIHRvIHRoZSByaWdodC4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIG1vdmVQb2ludFJpZ2h0KGludCBuKXsKKyAgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJlczsKKyAgcmVzPWNsb25lKHRoaXMpOworICByZXMuZXhwPXJlcy5leHArbjsKKyAgcmV0dXJuIHJlcy5maW5pc2gocGxhaW5NQyxmYWxzZSk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgdGhlIHNjYWxlIG9mIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4uCisgICogUmV0dXJucyBhIG5vbi1uZWdhdGl2ZSA8Y29kZT5pbnQ8L2NvZGU+IHdoaWNoIGlzIHRoZSBzY2FsZSBvZiB0aGUKKyAgKiBudW1iZXIuIFRoZSBzY2FsZSBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZGVjaW1hbCBwYXJ0IG9mCisgICogdGhlIG51bWJlciBpZiB0aGUgbnVtYmVyIHdlcmUgZm9ybWF0dGVkIHdpdGhvdXQgZXhwb25lbnRpYWwKKyAgKiBub3RhdGlvbi4KKyAgKgorICAqIEByZXR1cm4gQW4gPGNvZGU+aW50PC9jb2RlPiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2NhbGUgb2YgdGhpcworICAqICAgICAgICAgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4uCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGludCBzY2FsZSgpeworICBpZiAoZXhwPj0wKSAKKyAgIHJldHVybiAwOyAvLyBzY2FsZSBjYW4gbmV2ZXIgYmUgbmVnYXRpdmUKKyAgcmV0dXJuIChpbnQpLWV4cDsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyBhIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdpdGggYSBnaXZlbiBzY2FsZS4KKyAgKiA8cD4KKyAgKiBJZiB0aGUgZ2l2ZW4gc2NhbGUgKHdoaWNoIG11c3QgYmUgemVybyBvciBwb3NpdGl2ZSkgaXMgdGhlIHNhbWUgYXMKKyAgKiBvciBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgZGVjaW1hbCBwYXJ0ICh0aGUgc2NhbGUpIG9mIHRoaXMKKyAgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB0aGVuIHRyYWlsaW5nIHplcm9zIHdpbGwgYmUgYWRkZWQgdG8gdGhlCisgICogZGVjaW1hbCBwYXJ0IGFzIG5lY2Vzc2FyeS4KKyAgKiA8cD4KKyAgKiBJZiB0aGUgZ2l2ZW4gc2NhbGUgaXMgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcGFydCAodGhlCisgICogc2NhbGUpIG9mIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gdGhlbiB0cmFpbGluZyBkaWdpdHMKKyAgKiB3aWxsIGJlIHJlbW92ZWQsIGFuZCBpbiB0aGlzIGNhc2UgYW4KKyAgKiA8Y29kZT5Bcml0aG1ldGljRXhjZXB0aW9uPC9jb2RlPiBpcyB0aHJvd24gaWYgYW55IGRpc2NhcmRlZCBkaWdpdHMKKyAgKiBhcmUgbm9uLXplcm8uCisgICogPHA+CisgICogVGhlIHNhbWUgYXMge0BsaW5rICNzZXRTY2FsZShpbnQsIGludCl9LCB3aGVyZSB0aGUgZmlyc3QgcGFyYW1ldGVyCisgICogaXMgdGhlIHNjYWxlLCBhbmQgdGhlIHNlY29uZCBpcworICAqIDxjb2RlPk1hdGhDb250ZXh0LlJPVU5EX1VOTkVDRVNTQVJZPC9jb2RlPi4KKyAgKgorICAqIEBwYXJhbSAgc2NhbGUgVGhlIDxjb2RlPmludDwvY29kZT4gc3BlY2lmeWluZyB0aGUgc2NhbGUgb2YgdGhlCisgICogICAgICAgICAgICAgICByZXN1bHRpbmcgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4uCisgICogQHJldHVybiAgICAgICBBIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdpdGggdGhlIGdpdmVuIHNjYWxlLgorICAqIEB0aHJvd3MgQXJpdGhtZXRpY0V4Y2VwdGlvbiBpZiA8Y29kZT5zY2FsZTwvY29kZT4gaXMgbmVnYXRpdmUuCisgICogQHRocm93cyBBcml0aG1ldGljRXhjZXB0aW9uIGlmIHJlZHVjaW5nIHNjYWxlIHdvdWxkIGRpc2NhcmQKKyAgKiAgICAgICAgICAgICAgIG5vbi16ZXJvIGRpZ2l0cy4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHNldFNjYWxlKGludCBzY2FsZSl7CisgIHJldHVybiBzZXRTY2FsZShzY2FsZSxST1VORF9VTk5FQ0VTU0FSWSk7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgYSBwbGFpbiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aXRoIGEgZ2l2ZW4gc2NhbGUuCisgICogPHA+CisgICogSWYgdGhlIGdpdmVuIHNjYWxlICh3aGljaCBtdXN0IGJlIHplcm8gb3IgcG9zaXRpdmUpIGlzIHRoZSBzYW1lIGFzCisgICogb3IgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcGFydCAodGhlIHNjYWxlKSBvZiB0aGlzCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gdGhlbiB0cmFpbGluZyB6ZXJvcyB3aWxsIGJlIGFkZGVkIHRvIHRoZQorICAqIGRlY2ltYWwgcGFydCBhcyBuZWNlc3NhcnkuCisgICogPHA+CisgICogSWYgdGhlIGdpdmVuIHNjYWxlIGlzIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBkZWNpbWFsIHBhcnQgKHRoZQorICAqIHNjYWxlKSBvZiB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRoZW4gdHJhaWxpbmcgZGlnaXRzCisgICogd2lsbCBiZSByZW1vdmVkLCBhbmQgdGhlIHJvdW5kaW5nIG1vZGUgZ2l2ZW4gYnkgdGhlIHNlY29uZAorICAqIHBhcmFtZXRlciBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgcmVtYWluaW5nIGRpZ2l0cyBhcmUKKyAgKiBhZmZlY3RlZCBieSBhIGNhcnJ5LgorICAqIEluIHRoaXMgY2FzZSwgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpcyB0aHJvd24gaWYKKyAgKiA8Y29kZT5yb3VuZDwvY29kZT4gaXMgbm90IGEgdmFsaWQgcm91bmRpbmcgbW9kZS4KKyAgKiA8cD4KKyAgKiBJZiA8Y29kZT5yb3VuZDwvY29kZT4gaXMgPGNvZGU+TWF0aENvbnRleHQuUk9VTkRfVU5ORUNFU1NBUlk8L2NvZGU+LAorICAqIGFuIDxjb2RlPkFyaXRobWV0aWNFeGNlcHRpb248L2NvZGU+IGlzIHRocm93biBpZiBhbnkgZGlzY2FyZGVkCisgICogZGlnaXRzIGFyZSBub24temVyby4KKyAgKgorICAqIEBwYXJhbSAgc2NhbGUgVGhlIDxjb2RlPmludDwvY29kZT4gc3BlY2lmeWluZyB0aGUgc2NhbGUgb2YgdGhlCisgICogICAgICAgICAgICAgICByZXN1bHRpbmcgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4uCisgICogQHBhcmFtICByb3VuZCBUaGUgPGNvZGU+aW50PC9jb2RlPiByb3VuZGluZyBtb2RlIHRvIGJlIHVzZWQgZm9yCisgICogICAgICAgICAgICAgICB0aGUgZGl2aXNpb24gKHNlZSB0aGUge0BsaW5rIE1hdGhDb250ZXh0fSBjbGFzcykuCisgICogQHJldHVybiAgICAgICBBIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdpdGggdGhlIGdpdmVuIHNjYWxlLgorICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIDxjb2RlPnJvdW5kPC9jb2RlPiBpcyBub3QgYQorICAqICAgICAgICAgICAgICAgdmFsaWQgcm91bmRpbmcgbW9kZS4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+c2NhbGU8L2NvZGU+IGlzIG5lZ2F0aXZlLgorICAqIEB0aHJvd3MgQXJpdGhtZXRpY0V4Y2VwdGlvbiBpZiA8Y29kZT5yb3VuZDwvY29kZT4gaXMKKyAgKiAgICAgICAgICAgICAgIDxjb2RlPk1hdGhDb250ZXh0LlJPVU5EX1VOTkVDRVNTQVJZPC9jb2RlPiwgYW5kCisgICogICAgICAgICAgICAgICByZWR1Y2luZyBzY2FsZSB3b3VsZCBkaXNjYXJkIG5vbi16ZXJvIGRpZ2l0cy4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHNldFNjYWxlKGludCBzY2FsZSxpbnQgcm91bmQpeworICBpbnQgb3Vyc2NhbGU7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByZXM7CisgIGludCBwYWRkaW5nPTA7CisgIGludCBuZXdsZW49MDsKKyAgLy8gYXQgcHJlc2VudCB0aGlzIG5hdWdodGlseSBvbmx5IGNoZWNrcyB0aGUgcm91bmQgdmFsdWUgaWYgaXQgaXMKKyAgLy8gbmVlZGVkICh1c2VkKSwgZm9yIHNwZWVkCisgIG91cnNjYWxlPXRoaXMuc2NhbGUoKTsKKyAgaWYgKG91cnNjYWxlPT1zY2FsZSkgIC8vIGFscmVhZHkgY29ycmVjdCBzY2FsZQorICAgaWYgKHRoaXMuZm9ybT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTikgIC8vIC4uIGFuZCBmb3JtCisgICAgcmV0dXJuIHRoaXM7CisgIHJlcz1jbG9uZSh0aGlzKTsgLy8gbmVlZCBjb3B5CisgIGlmIChvdXJzY2FsZTw9c2NhbGUpIAorICAgeyAvLyBzaW1wbHkgemVyby1wYWRkaW5nL2NoYW5naW5nIGZvcm0KKyAgICAvLyBpZiBvdXJzY2FsZSBpcyAwIHdlIG1heSBoYXZlIGxvdHMgb2YgMHMgdG8gYWRkCisgICAgaWYgKG91cnNjYWxlPT0wKSAKKyAgICAgcGFkZGluZz1yZXMuZXhwK3NjYWxlOworICAgIGVsc2UgCisgICAgIHBhZGRpbmc9c2NhbGUtb3Vyc2NhbGU7CisgICAgcmVzLm1hbnQ9ZXh0ZW5kKHJlcy5tYW50LHJlcy5tYW50Lmxlbmd0aCtwYWRkaW5nKTsKKyAgICByZXMuZXhwPShpbnQpLXNjYWxlOyAvLyBhcyByZXF1ZXN0ZWQKKyAgIH0KKyAgZWxzZSAKKyAgIHsvKiBvdXJzY2FsZT5zY2FsZTogc2hvcnRlbmluZywgcHJvYmFibHkgKi8KKyAgICBpZiAoc2NhbGU8MCkgCisgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiTmVnYXRpdmUgc2NhbGU6IisiICIrc2NhbGUpOworICAgIC8vIFtyb3VuZCgpIHdpbGwgcmFpc2UgZXhjZXB0aW9uIGlmIGludmFsaWQgcm91bmRdCisgICAgbmV3bGVuPXJlcy5tYW50Lmxlbmd0aC0oKG91cnNjYWxlLXNjYWxlKSk7IC8vIFs8PTAgaXMgT0tdCisgICAgcmVzPXJlcy5yb3VuZChuZXdsZW4scm91bmQpOyAvLyByb3VuZCB0byByZXF1aXJlZCBsZW5ndGgKKyAgICAvLyBUaGlzIGNvdWxkIGhhdmUgc2hpZnRlZCBsZWZ0IGlmIHJvdW5kIChzYXkpIDAuOS0+MVsuMF0KKyAgICAvLyBSZXBhaXIgaWYgc28gYnkgYWRkaW5nIGEgemVybyBhbmQgcmVkdWNpbmcgZXhwb25lbnQKKyAgICBpZiAocmVzLmV4cCE9KChpbnQpLXNjYWxlKSkgCisgICAgIHsKKyAgICAgIHJlcy5tYW50PWV4dGVuZChyZXMubWFudCxyZXMubWFudC5sZW5ndGgrMSk7CisgICAgICByZXMuZXhwPXJlcy5leHAtMTsKKyAgICAgfQorICAgfQorICByZXMuZm9ybT0oYnl0ZSljb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOOyAvLyBieSBkZWZpbml0aW9uCisgIHJldHVybiByZXM7CisgIH0KKworIC8qKgorICAqIENvbnZlcnRzIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gdG8gYSA8Y29kZT5zaG9ydDwvY29kZT4uCisgICogSWYgdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGhhcyBhIG5vbi16ZXJvIGRlY2ltYWwgcGFydCBvciBpcworICAqIG91dCBvZiB0aGUgcG9zc2libGUgcmFuZ2UgZm9yIGEgPGNvZGU+c2hvcnQ8L2NvZGU+ICgxNi1iaXQgc2lnbmVkCisgICogaW50ZWdlcikgcmVzdWx0IHRoZW4gYW4gPGNvZGU+QXJpdGhtZXRpY0V4Y2VwdGlvbjwvY29kZT4gaXMgdGhyb3duLgorICAqCisgICogQHJldHVybiBBIDxjb2RlPnNob3J0PC9jb2RlPiBlcXVhbCBpbiB2YWx1ZSB0byA8Y29kZT50aGlzPC9jb2RlPi4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+dGhpczwvY29kZT4gaGFzIGEgbm9uLXplcm8KKyAgKiAgICAgICAgICAgICAgICAgZGVjaW1hbCBwYXJ0LCBvciB3aWxsIG5vdCBmaXQgaW4gYQorICAqICAgICAgICAgICAgICAgICA8Y29kZT5zaG9ydDwvY29kZT4uCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIHNob3J0IHNob3J0VmFsdWVFeGFjdCgpeworICBpbnQgbnVtOworICBudW09dGhpcy5pbnRWYWx1ZUV4YWN0KCk7IC8vIHdpbGwgY2hlY2sgZGVjaW1hbCBwYXJ0IHRvbworICBpZiAoKG51bT4zMjc2Nyl8KG51bTwoLTMyNzY4KSkpIAorICAgdGhyb3cgbmV3IGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK3RoaXMudG9TdHJpbmcoKSk7CisgIHJldHVybiAoc2hvcnQpbnVtOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4sIGFzIGFuCisgICogPGNvZGU+aW50PC9jb2RlPi4KKyAgKiBUaGlzIHJldHVybnMgdGhlIDxpPnNpZ251bTwvaT4gZnVuY3Rpb24gdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZQorICAqIHNpZ24gb2YgdGhpcyA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiBUaGF0IGlzLCAtMSBpZiB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gaXMgbmVnYXRpdmUsIDAgaWYgaXQgaXMKKyAgKiBudW1lcmljYWxseSBlcXVhbCB0byB6ZXJvLCBvciAxIGlmIGl0IGlzIHBvc2l0aXZlLgorICAqCisgICogQHJldHVybiBBbiA8Y29kZT5pbnQ8L2NvZGU+IHdoaWNoIGlzIC0xIGlmIHRoZQorICAqICAgICAgICAgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gaXMgbmVnYXRpdmUsIDAgaWYgaXQgaXMKKyAgKiAgICAgICAgIG51bWVyaWNhbGx5IGVxdWFsIHRvIHplcm8sIG9yIDEgaWYgaXQgaXMgcG9zaXRpdmUuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGludCBzaWdudW0oKXsKKyAgcmV0dXJuIChpbnQpdGhpcy5pbmQ7IC8vIFtub3RlIHRoaXMgYXNzdW1lcyB2YWx1ZXMgZm9yIGluZC5dCisgIH0KKworIC8qKgorICAqIENvbnZlcnRzIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gdG8gYQorICAqIDxjb2RlPmphdmEubWF0aC5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBUaGlzIGlzIGFuIGV4YWN0IGNvbnZlcnNpb247IHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgaWYgdGhlCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2VyZSBmb3JtYXR0ZWQgYXMgYSBwbGFpbiBudW1iZXIgd2l0aG91dAorICAqIGFueSByb3VuZGluZyBvciBleHBvbmVudCBhbmQgdGhlbiB0aGUKKyAgKiA8Y29kZT5qYXZhLm1hdGguQmlnRGVjaW1hbChqYXZhLmxhbmcuU3RyaW5nKTwvY29kZT4gY29uc3RydWN0b3IKKyAgKiB3ZXJlIHVzZWQgdG8gY29uc3RydWN0IHRoZSByZXN1bHQuCisgICogPHA+CisgICogPGk+KE5vdGU6IHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIG9ubHkgaW4gdGhlCisgICogPGNvZGU+Y29tLmlibS5pY3UubWF0aDwvY29kZT4gdmVyc2lvbiBvZiB0aGUgQmlnRGVjaW1hbCBjbGFzcy4KKyAgKiBJdCB3b3VsZCBub3QgYmUgcHJlc2VudCBpbiBhIDxjb2RlPmphdmEubWF0aDwvY29kZT4gdmVyc2lvbi4pPC9pPgorICAqCisgICogQHJldHVybiBUaGUgPGNvZGU+amF2YS5tYXRoLkJpZ0RlY2ltYWw8L2NvZGU+IGVxdWFsIGluIHZhbHVlCisgICogICAgICAgICB0byB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBqYXZhLm1hdGguQmlnRGVjaW1hbCB0b0JpZ0RlY2ltYWwoKXsKKyAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbCh0aGlzLnVuc2NhbGVkVmFsdWUoKSx0aGlzLnNjYWxlKCkpOworICB9CisKKyAvKioKKyAgKiBDb252ZXJ0cyB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRvIGEKKyAgKiA8Y29kZT5qYXZhLm1hdGguQmlnSW50ZWdlcjwvY29kZT4uCisgICogPHA+CisgICogQW55IGRlY2ltYWwgcGFydCBpcyB0cnVuY2F0ZWQgKGRpc2NhcmRlZCkuCisgICogSWYgYW4gZXhjZXB0aW9uIGlzIGRlc2lyZWQgc2hvdWxkIHRoZSBkZWNpbWFsIHBhcnQgYmUgbm9uLXplcm8sCisgICogdXNlIHtAbGluayAjdG9CaWdJbnRlZ2VyRXhhY3QoKX0uCisgICoKKyAgKiBAcmV0dXJuIFRoZSA8Y29kZT5qYXZhLm1hdGguQmlnSW50ZWdlcjwvY29kZT4gZXF1YWwgaW4gdmFsdWUKKyAgKiAgICAgICAgIHRvIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhpcyA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgamF2YS5tYXRoLkJpZ0ludGVnZXIgdG9CaWdJbnRlZ2VyKCl7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByZXM9bnVsbDsKKyAgaW50IG5ld2xlbj0wOworICBieXRlIG5ld21hbnRbXT1udWxsOworICB7LypzZWxlY3QqLworICBpZiAoKGV4cD49MCkmKGZvcm09PWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4pKQorICAgcmVzPXRoaXM7IC8vIGNhbiBsYXlvdXQgc2ltcGx5CisgIGVsc2UgaWYgKGV4cD49MCkKKyAgIHsKKyAgICByZXM9Y2xvbmUodGhpcyk7IC8vIHNhZmUgY29weQorICAgIHJlcy5mb3JtPShieXRlKWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU47IC8vIC4uIGFuZCByZXF1ZXN0IFBMQUlOCisgICB9CisgIGVsc2V7CisgICB7IC8vIGV4cDwwOyBzY2FsZSB0byBiZSB0cnVuY2F0ZWQKKyAgICAvLyB3ZSBjb3VsZCB1c2UgZGl2aWRlSW50ZWdlciwgYnV0IHdlIG1heSBhcyB3ZWxsIGJlIHF1aWNrZXIKKyAgICBpZiAoKChpbnQpLXRoaXMuZXhwKT49dGhpcy5tYW50Lmxlbmd0aCkgCisgICAgIHJlcz1aRVJPOyAvLyBhbGwgYmxvd3MgYXdheQorICAgIGVsc2UgCisgICAgIHsKKyAgICAgIHJlcz1jbG9uZSh0aGlzKTsgLy8gc2FmZSBjb3B5CisgICAgICBuZXdsZW49cmVzLm1hbnQubGVuZ3RoK3Jlcy5leHA7CisgICAgICBuZXdtYW50PW5ldyBieXRlW25ld2xlbl07IC8vIFtzaG9ydGVyXQorICAgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkoKGphdmEubGFuZy5PYmplY3QpcmVzLm1hbnQsMCwoamF2YS5sYW5nLk9iamVjdCluZXdtYW50LDAsbmV3bGVuKTsKKyAgICAgIHJlcy5tYW50PW5ld21hbnQ7CisgICAgICByZXMuZm9ybT0oYnl0ZSljb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOOworICAgICAgcmVzLmV4cD0wOworICAgICB9CisgICB9CisgIH0KKyAgfQorICByZXR1cm4gbmV3IEJpZ0ludGVnZXIobmV3IGphdmEubGFuZy5TdHJpbmcocmVzLmxheW91dCgpKSk7CisgIH0KKworIC8qKgorICAqIENvbnZlcnRzIHRoaXMgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gdG8gYQorICAqIDxjb2RlPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBBbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZSBkZWNpbWFsIHBhcnQgKGlmIGFueSkgaXMgbm9uLXplcm8uCisgICoKKyAgKiBAcmV0dXJuIFRoZSA8Y29kZT5qYXZhLm1hdGguQmlnSW50ZWdlcjwvY29kZT4gZXF1YWwgaW4gdmFsdWUKKyAgKiAgICAgICAgIHRvIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhpcyA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiBAdGhyb3dzIEFyaXRobWV0aWNFeGNlcHRpb24gaWYgPGNvZGU+dGhpczwvY29kZT4gaGFzIGEgbm9uLXplcm8KKyAgKiAgICAgICAgIGRlY2ltYWwgcGFydC4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgamF2YS5tYXRoLkJpZ0ludGVnZXIgdG9CaWdJbnRlZ2VyRXhhY3QoKXsKKyAgLyogdGVzdCBhbnkgdHJhaWxpbmcgZGVjaW1hbCBwYXJ0ICovCisgIGlmIChleHA8MCkgCisgICB7IC8vIHBvc3NpYmxlIGRlY2ltYWwgcGFydAorICAgIC8qIGFsbCBkZWNpbWFsIHBsYWNlcyBtdXN0IGJlIDA7IG5vdGUgZXhwPDAgKi8KKyAgICBpZiAoKCEoYWxsemVybyhtYW50LG1hbnQubGVuZ3RoK2V4cCkpKSkgCisgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiRGVjaW1hbCBwYXJ0IG5vbi16ZXJvOiIrIiAiK3RoaXMudG9TdHJpbmcoKSk7CisgICB9CisgIHJldHVybiB0b0JpZ0ludGVnZXIoKTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gYXMgYSBjaGFyYWN0ZXIgYXJyYXkuCisgICogVGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCBpcyB0aGUgc2FtZSBhcyB1c2luZyB0aGUKKyAgKiBzZXF1ZW5jZSA8Y29kZT50b1N0cmluZygpLnRvQ2hhckFycmF5KCk8L2NvZGU+LCBidXQgYXZvaWRzIGNyZWF0aW5nCisgICogdGhlIGludGVybWVkaWF0ZSA8Y29kZT5TdHJpbmc8L2NvZGU+IGFuZCA8Y29kZT5jaGFyW108L2NvZGU+CisgICogb2JqZWN0cy4KKyAgKgorICAqIEByZXR1cm4gVGhlIDxjb2RlPmNoYXJbXTwvY29kZT4gYXJyYXkgY29ycmVzcG9uZGluZyB0byB0aGlzCisgICogICAgICAgICA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgY2hhcltdIHRvQ2hhckFycmF5KCl7CisgIHJldHVybiBsYXlvdXQoKTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gYXMgYSA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAqIFRoaXMgcmV0dXJucyBhIDxjb2RlPlN0cmluZzwvY29kZT4gdGhhdCBleGFjdGx5IHJlcHJlc2VudHMgdGhpcworICAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LCBhcyBkZWZpbmVkIGluIHRoZSBkZWNpbWFsIGRvY3VtZW50YXRpb24KKyAgKiAoc2VlIHtAbGluayBCaWdEZWNpbWFsIGNsYXNzIGhlYWRlcn0pLgorICAqIDxwPgorICAqIEJ5IGRlZmluaXRpb24sIHVzaW5nIHRoZSB7QGxpbmsgI0JpZ0RlY2ltYWwoU3RyaW5nKX0gY29uc3RydWN0b3IKKyAgKiBvbiB0aGUgcmVzdWx0IDxjb2RlPlN0cmluZzwvY29kZT4gd2lsbCBjcmVhdGUgYQorICAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHRoYXQgaXMgZXhhY3RseSBlcXVhbCB0byB0aGUgb3JpZ2luYWwKKyAgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKgorICAqIEByZXR1cm4gVGhlIDxjb2RlPlN0cmluZzwvY29kZT4gZXhhY3RseSBjb3JyZXNwb25kaW5nIHRvIHRoaXMKKyAgKiAgICAgICAgIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LgorICAqIEBzZWUgICAgI2Zvcm1hdChpbnQsIGludCkKKyAgKiBAc2VlICAgICNmb3JtYXQoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkKKyAgKiBAc2VlICAgICN0b0NoYXJBcnJheSgpCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9TdHJpbmcoKXsKKyAgcmV0dXJuIG5ldyBqYXZhLmxhbmcuU3RyaW5nKGxheW91dCgpKTsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyB0aGUgbnVtYmVyIGFzIGEgPGNvZGU+QmlnSW50ZWdlcjwvY29kZT4gYWZ0ZXIgcmVtb3ZpbmcgdGhlCisgICogc2NhbGUuCisgICogVGhhdCBpcywgdGhlIG51bWJlciBpcyBleHByZXNzZWQgYXMgYSBwbGFpbiBudW1iZXIsIGFueSBkZWNpbWFsCisgICogcG9pbnQgaXMgdGhlbiByZW1vdmVkIChyZXRhaW5pbmcgdGhlIGRpZ2l0cyBvZiBhbnkgZGVjaW1hbCBwYXJ0KSwKKyAgKiBhbmQgdGhlIHJlc3VsdCBpcyB0aGVuIGNvbnZlcnRlZCB0byBhIDxjb2RlPkJpZ0ludGVnZXI8L2NvZGU+LgorICAqCisgICogQHJldHVybiBUaGUgPGNvZGU+amF2YS5tYXRoLkJpZ0ludGVnZXI8L2NvZGU+IGVxdWFsIGluIHZhbHVlIHRvCisgICogICAgICAgICB0aGlzIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG11bHRpcGxpZWQgYnkgdGVuIHRvIHRoZQorICAqICAgICAgICAgcG93ZXIgb2YgPGNvZGU+dGhpcy5zY2FsZSgpPC9jb2RlPi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgamF2YS5tYXRoLkJpZ0ludGVnZXIgdW5zY2FsZWRWYWx1ZSgpeworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmVzPW51bGw7CisgIGlmIChleHA+PTApIAorICAgcmVzPXRoaXM7CisgIGVsc2UgCisgICB7CisgICAgcmVzPWNsb25lKHRoaXMpOyAvLyBzYWZlIGNvcHkKKyAgICByZXMuZXhwPTA7IC8vIGRyb3Agc2NhbGUKKyAgIH0KKyAgcmV0dXJuIHJlcy50b0JpZ0ludGVnZXIoKTsKKyAgfQorCisgLyoqCisgICogVHJhbnNsYXRlcyBhIDxjb2RlPmRvdWJsZTwvY29kZT4gdG8gYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAgKiA8cD4KKyAgKiBSZXR1cm5zIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2hpY2ggaXMgdGhlIGRlY2ltYWwKKyAgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgNjQtYml0IHNpZ25lZCBiaW5hcnkgZmxvYXRpbmcgcG9pbnQKKyAgKiBwYXJhbWV0ZXIuIElmIHRoZSBwYXJhbWV0ZXIgaXMgaW5maW5pdGUsIG9yIGlzIG5vdCBhIG51bWJlciAoTmFOKSwKKyAgKiBhIDxjb2RlPk51bWJlckZvcm1hdEV4Y2VwdGlvbjwvY29kZT4gaXMgdGhyb3duLgorICAqIDxwPgorICAqIFRoZSBudW1iZXIgaXMgY29uc3RydWN0ZWQgYXMgdGhvdWdoIDxjb2RlPm51bTwvY29kZT4gaGFkIGJlZW4KKyAgKiBjb252ZXJ0ZWQgdG8gYSA8Y29kZT5TdHJpbmc8L2NvZGU+IHVzaW5nIHRoZQorICAqIDxjb2RlPkRvdWJsZS50b1N0cmluZygpPC9jb2RlPiBtZXRob2QgYW5kIHRoZQorICAqIHtAbGluayAjQmlnRGVjaW1hbChqYXZhLmxhbmcuU3RyaW5nKX0gY29uc3RydWN0b3IgaGFkIHRoZW4gYmVlbiB1c2VkLgorICAqIFRoaXMgaXMgdHlwaWNhbGx5IG5vdCBhbiBleGFjdCBjb252ZXJzaW9uLgorICAqCisgICogQHBhcmFtICBkdWIgVGhlIDxjb2RlPmRvdWJsZTwvY29kZT4gdG8gYmUgdHJhbnNsYXRlZC4KKyAgKiBAcmV0dXJuICAgICBUaGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gZXF1YWwgaW4gdmFsdWUgdG8KKyAgKiAgICAgICAgICAgICA8Y29kZT5kdWI8L2NvZGU+LgorICAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlmIHRoZSBwYXJhbWV0ZXIgaXMgaW5maW5pdGUgb3IKKyAgKiAgICAgICAgICAgICBub3QgYSBudW1iZXIuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIHN0YXRpYyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgdmFsdWVPZihkb3VibGUgZHViKXsKKyAgLy8gUmVtaW5kZXI6IGEgemVybyBkb3VibGUgcmV0dXJucyAnMC4wJywgc28gd2UgY2Fubm90IGZhc3RwYXRoIHRvCisgIC8vIHVzZSB0aGUgY29uc3RhbnQgWkVSTy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGVub3VnaCB0byBqdXN0aWZ5CisgIC8vIGEgZmFjdG9yeSBhcHByb2FjaCwgYSBjYWNoZSwgb3IgYSBmZXcgcHJpdmF0ZSBjb25zdGFudHMsIGxhdGVyLgorICByZXR1cm4gbmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCgobmV3IGphdmEubGFuZy5Eb3VibGUoZHViKSkudG9TdHJpbmcoKSk7CisgIH0KKworIC8qKgorICAqIFRyYW5zbGF0ZXMgYSA8Y29kZT5sb25nPC9jb2RlPiB0byBhIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+LgorICAqIFRoYXQgaXMsIHJldHVybnMgYSBwbGFpbiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aG9zZSB2YWx1ZSBpcworICAqIGVxdWFsIHRvIHRoZSBnaXZlbiA8Y29kZT5sb25nPC9jb2RlPi4KKyAgKgorICAqIEBwYXJhbSAgbGludCBUaGUgPGNvZGU+bG9uZzwvY29kZT4gdG8gYmUgdHJhbnNsYXRlZC4KKyAgKiBAcmV0dXJuICAgICAgVGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGVxdWFsIGluIHZhbHVlIHRvCisgICogICAgICAgICAgICAgIDxjb2RlPmxpbnQ8L2NvZGU+LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBzdGF0aWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHZhbHVlT2YobG9uZyBsaW50KXsKKyAgcmV0dXJuIHZhbHVlT2YobGludCwwKTsKKyAgfQorCisgLyoqCisgICogVHJhbnNsYXRlcyBhIDxjb2RlPmxvbmc8L2NvZGU+IHRvIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gd2l0aCBhCisgICogZ2l2ZW4gc2NhbGUuCisgICogVGhhdCBpcywgcmV0dXJucyBhIHBsYWluIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdob3NlIHVuc2NhbGVkCisgICogdmFsdWUgaXMgZXF1YWwgdG8gdGhlIGdpdmVuIDxjb2RlPmxvbmc8L2NvZGU+LCBhZGp1c3RlZCBieSB0aGUKKyAgKiBzZWNvbmQgcGFyYW1ldGVyLCA8Y29kZT5zY2FsZTwvY29kZT4uCisgICogPHA+CisgICogVGhlIHJlc3VsdCBpcyBnaXZlbiBieToKKyAgKiA8cD48Y29kZT4KKyAgKiAobmV3IEJpZ0RlY2ltYWwobGludCkpLmRpdmlkZShURU4ucG93KG5ldyBCaWdEZWNpbWFsKHNjYWxlKSkpCisgICogPC9jb2RlPgorICAqIDxwPgorICAqIEEgPGNvZGU+TnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9jb2RlPiBpcyB0aHJvd24gaWYgPGNvZGU+c2NhbGU8L2NvZGU+CisgICogaXMgbmVnYXRpdmUuCisgICoKKyAgKiBAcGFyYW0gIGxpbnQgIFRoZSA8Y29kZT5sb25nPC9jb2RlPiB0byBiZSB0cmFuc2xhdGVkLgorICAqIEBwYXJhbSAgc2NhbGUgVGhlIDxjb2RlPmludDwvY29kZT4gc2NhbGUgdG8gYmUgYXBwbGllZC4KKyAgKiBAcmV0dXJuICAgICAgIFRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBlcXVhbCBpbiB2YWx1ZSB0bworICAqICAgICAgICAgICAgICAgPGNvZGU+bGludDwvY29kZT4uCisgICogQHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWYgdGhlIHNjYWxlIGlzIG5lZ2F0aXZlLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBzdGF0aWMgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHZhbHVlT2YobG9uZyBsaW50LGludCBzY2FsZSl7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByZXM9bnVsbDsKKyAgey8qc2VsZWN0Ki8KKyAgaWYgKGxpbnQ9PTApCisgICByZXM9WkVSTzsKKyAgZWxzZSBpZiAobGludD09MSkKKyAgIHJlcz1PTkU7CisgIGVsc2UgaWYgKGxpbnQ9PTEwKQorICAgcmVzPVRFTjsKKyAgZWxzZXsKKyAgIHJlcz1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKGxpbnQpOworICB9CisgIH0KKyAgaWYgKHNjYWxlPT0wKSAKKyAgIHJldHVybiByZXM7CisgIGlmIChzY2FsZTwwKSAKKyAgIHRocm93IG5ldyBqYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJOZWdhdGl2ZSBzY2FsZToiKyIgIitzY2FsZSk7CisgIHJlcz1jbG9uZShyZXMpOyAvLyBzYWZlIGNvcHkgW2RvIG5vdCBtdXRhdGVdCisgIHJlcy5leHA9KGludCktc2NhbGU7IC8vIGV4cG9uZW50IGlzIC1zY2FsZQorICByZXR1cm4gcmVzOworICB9CisKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKyAvKiA8c2dtbD4gUmV0dXJuIGNoYXIgYXJyYXkgdmFsdWUgb2YgYSBCaWdEZWNpbWFsIChjb252ZXJzaW9uIGZyb20KKyAgICAgICBCaWdEZWNpbWFsIHRvIGxhaWQtb3V0IGNhbm9uaWNhbCBjaGFyIGFycmF5KS4KKyAgICA8cD5UaGUgbWFudGlzc2Egd2lsbCBlaXRoZXIgYWxyZWFkeSBoYXZlIGJlZW4gcm91bmRlZCAoZm9sbG93aW5nIGFuCisgICAgICAgb3BlcmF0aW9uKSBvciB3aWxsIGJlIG9mIGxlbmd0aCBhcHByb3ByaWF0ZSAoaW4gdGhlIGNhc2Ugb2YKKyAgICAgICBjb25zdHJ1Y3Rpb24gZnJvbSBhbiBpbnQsIGZvciBleGFtcGxlKS4KKyAgICA8cD5XZSBtdXN0IG5vdCBhbHRlciB0aGUgbWFudGlzc2EsIGhlcmUuCisgICAgPHA+J2Zvcm0nIGRlc2NyaWJlcyB3aGV0aGVyIHdlIGFyZSB0byB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24gKGFuZAorICAgICAgIGlmIHNvLCB3aGljaCksIG9yIGlmIHdlIGFyZSB0byBsYXkgb3V0IGFzIGEgcGxhaW4vcHVyZSBudW1lcmljLgorICAgIDwvc2dtbD4gKi8KKyAKKyBwcml2YXRlIGNoYXJbXSBsYXlvdXQoKXsKKyAgY2hhciBjbWFudFtdOworICBpbnQgaT0wOworICBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIHNiPW51bGw7CisgIGludCBldXNlPTA7CisgIGludCBzaWc9MDsKKyAgY2hhciBjc2lnbj0wOworICBjaGFyIHJlY1tdPW51bGw7CisgIGludCBuZWVkc2lnbjsKKyAgaW50IG1hZzsKKyAgaW50IGxlbj0wOworICBjbWFudD1uZXcgY2hhclttYW50Lmxlbmd0aF07IC8vIGNvcHkgYnl0ZVtdIHRvIGEgY2hhcltdCisgIHtpbnQgJDE4PW1hbnQubGVuZ3RoO2k9MDtpOmZvcig7JDE4PjA7JDE4LS0saSsrKXsKKyAgIGNtYW50W2ldPShjaGFyKShtYW50W2ldKygoaW50KSgnMCcpKSk7CisgICB9CisgIH0vKmkqLworICAKKyAgaWYgKGZvcm0hPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4pIAorICAgey8qIGV4cG9uZW50aWFsIG5vdGF0aW9uIG5lZWRlZCAqLworICAgIHNiPW5ldyBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKGNtYW50Lmxlbmd0aCsxNSk7IC8vIC14Lnh4eEUrOTk5OTk5OTk5CisgICAgaWYgKGluZD09aXNuZWcpIAorICAgICBzYi5hcHBlbmQoJy0nKTsKKyAgICBldXNlPShleHArY21hbnQubGVuZ3RoKS0xOyAvLyBleHBvbmVudCB0byB1c2UKKyAgICAvKiBzZXR1cCBzaWc9c2lnbmlmaWNhbnQgZGlnaXRzIGFuZCBjb3B5IHRvIHJlc3VsdCAqLworICAgIGlmIChmb3JtPT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlNDSUVOVElGSUMpIAorICAgICB7IC8vIFtkZWZhdWx0XQorICAgICAgc2IuYXBwZW5kKGNtYW50WzBdKTsgLy8gc2lnbmlmaWNhbnQgY2hhcmFjdGVyCisgICAgICBpZiAoY21hbnQubGVuZ3RoPjEpICAvLyBoYXZlIGRlY2ltYWwgcGFydAorICAgICAgIHNiLmFwcGVuZCgnLicpLmFwcGVuZChjbWFudCwxLGNtYW50Lmxlbmd0aC0xKTsKKyAgICAgfQorICAgIGVsc2UgCisgICAgIHtlbmdpbmVlcmluZzpkb3sKKyAgICAgIHNpZz1ldXNlJTM7IC8vIGNvbW1vbgorICAgICAgaWYgKHNpZzwwKSAKKyAgICAgICBzaWc9MytzaWc7IC8vIG5lZ2F0aXZlIGV4cG9uZW50CisgICAgICBldXNlPWV1c2Utc2lnOworICAgICAgc2lnKys7CisgICAgICBpZiAoc2lnPj1jbWFudC5sZW5ndGgpIAorICAgICAgIHsgLy8gemVybyBwYWRkaW5nIG1heSBiZSBuZWVkZWQKKyAgICAgICAgc2IuYXBwZW5kKGNtYW50LDAsY21hbnQubGVuZ3RoKTsKKyAgICAgICAge2ludCAkMTk9c2lnLWNtYW50Lmxlbmd0aDtmb3IoOyQxOT4wOyQxOS0tKXsKKyAgICAgICAgIHNiLmFwcGVuZCgnMCcpOworICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgfQorICAgICAgZWxzZSAKKyAgICAgICB7IC8vIGRlY2ltYWwgcG9pbnQgbmVlZGVkCisgICAgICAgIHNiLmFwcGVuZChjbWFudCwwLHNpZykuYXBwZW5kKCcuJykuYXBwZW5kKGNtYW50LHNpZyxjbWFudC5sZW5ndGgtc2lnKTsKKyAgICAgICB9CisgICAgIH13aGlsZShmYWxzZSk7fS8qZW5naW5lZXJpbmcqLworICAgIGlmIChldXNlIT0wKSAKKyAgICAgeworICAgICAgaWYgKGV1c2U8MCkgCisgICAgICAgeworICAgICAgICBjc2lnbj0nLSc7CisgICAgICAgIGV1c2U9KGludCktZXVzZTsKKyAgICAgICB9CisgICAgICBlbHNlIAorICAgICAgIGNzaWduPScrJzsKKyAgICAgIHNiLmFwcGVuZCgnRScpLmFwcGVuZChjc2lnbikuYXBwZW5kKGV1c2UpOworICAgICB9CisgICAgcmVjPW5ldyBjaGFyW3NiLmxlbmd0aCgpXTsKKyAgICBVdGlsaXR5LmdldENoYXJzKHNiLCAwLHNiLmxlbmd0aCgpLHJlYywwKTsKKyAgICByZXR1cm4gcmVjOworICAgfQorICAKKyAgLyogSGVyZSBmb3Igbm9uLWV4cG9uZW50aWFsIChwbGFpbikgbm90YXRpb24gKi8KKyAgaWYgKGV4cD09MCkgCisgICB7LyogZWFzeSAqLworICAgIGlmIChpbmQ+PTApIAorICAgICByZXR1cm4gY21hbnQ7IC8vIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyCisgICAgcmVjPW5ldyBjaGFyW2NtYW50Lmxlbmd0aCsxXTsKKyAgICByZWNbMF09Jy0nOworICAgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KChqYXZhLmxhbmcuT2JqZWN0KWNtYW50LDAsKGphdmEubGFuZy5PYmplY3QpcmVjLDEsY21hbnQubGVuZ3RoKTsKKyAgICByZXR1cm4gcmVjOworICAgfQorICAKKyAgLyogTmVlZCBhICcuJyBhbmQvb3Igc29tZSB6ZXJvcyAqLworICBuZWVkc2lnbj0oaW50KSgoaW5kPT1pc25lZyk/MTowKTsgLy8gc3BhY2UgZm9yIHNpZ24/ICAwIG9yIDEKKyAgCisgIC8qIE1BRyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvaW50IGluIHRoZSBtYW50aXNzYSAoaW5kZXggb2YgdGhlCisgICAgIGNoYXJhY3RlciBpdCBmb2xsb3dzKSAqLworICBtYWc9ZXhwK2NtYW50Lmxlbmd0aDsKKyAgCisgIGlmIChtYWc8MSkgCisgICB7LyogMC4wMHh4eHggZm9ybSAqLworICAgIGxlbj0obmVlZHNpZ24rMiktZXhwOyAvLyBuZWVkc2lnbisyKygtbWFnKStjbWFudC5sZW5ndGgKKyAgICByZWM9bmV3IGNoYXJbbGVuXTsKKyAgICBpZiAobmVlZHNpZ24hPTApIAorICAgICByZWNbMF09Jy0nOworICAgIHJlY1tuZWVkc2lnbl09JzAnOworICAgIHJlY1tuZWVkc2lnbisxXT0nLic7CisgICAge2ludCAkMjA9KGludCktbWFnO2k9bmVlZHNpZ24rMjtpOmZvcig7JDIwPjA7JDIwLS0saSsrKXsgLy8gbWF5YmUgbm9uZQorICAgICByZWNbaV09JzAnOworICAgICB9CisgICAgfS8qaSovCisgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkoKGphdmEubGFuZy5PYmplY3QpY21hbnQsMCwoamF2YS5sYW5nLk9iamVjdClyZWMsKG5lZWRzaWduKzIpLW1hZyxjbWFudC5sZW5ndGgpOworICAgIHJldHVybiByZWM7CisgICB9CisgIAorICBpZiAobWFnPmNtYW50Lmxlbmd0aCkgCisgICB7LyogeHh4eDAwMDAgZm9ybSAqLworICAgIGxlbj1uZWVkc2lnbittYWc7CisgICAgcmVjPW5ldyBjaGFyW2xlbl07CisgICAgaWYgKG5lZWRzaWduIT0wKSAKKyAgICAgcmVjWzBdPSctJzsKKyAgICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSgoamF2YS5sYW5nLk9iamVjdCljbWFudCwwLChqYXZhLmxhbmcuT2JqZWN0KXJlYyxuZWVkc2lnbixjbWFudC5sZW5ndGgpOworICAgIHtpbnQgJDIxPW1hZy1jbWFudC5sZW5ndGg7aT1uZWVkc2lnbitjbWFudC5sZW5ndGg7aTpmb3IoOyQyMT4wOyQyMS0tLGkrKyl7IC8vIG5ldmVyIDAKKyAgICAgcmVjW2ldPScwJzsKKyAgICAgfQorICAgIH0vKmkqLworICAgIHJldHVybiByZWM7CisgICB9CisgIAorICAvKiBkZWNpbWFsIHBvaW50IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIG1hbnRpc3NhICovCisgIGxlbj0obmVlZHNpZ24rMSkrY21hbnQubGVuZ3RoOworICByZWM9bmV3IGNoYXJbbGVuXTsKKyAgaWYgKG5lZWRzaWduIT0wKSAKKyAgIHJlY1swXT0nLSc7CisgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KChqYXZhLmxhbmcuT2JqZWN0KWNtYW50LDAsKGphdmEubGFuZy5PYmplY3QpcmVjLG5lZWRzaWduLG1hZyk7CisgIHJlY1tuZWVkc2lnbittYWddPScuJzsKKyAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkoKGphdmEubGFuZy5PYmplY3QpY21hbnQsbWFnLChqYXZhLmxhbmcuT2JqZWN0KXJlYywobmVlZHNpZ24rbWFnKSsxLGNtYW50Lmxlbmd0aC1tYWcpOworICByZXR1cm4gcmVjOworICB9CisKKyAvKiA8c2dtbD4gQ2hlY2tzIGEgQmlnRGVjaW1hbCBhcmd1bWVudCB0byBlbnN1cmUgaXQncyBhIHRydWUgaW50ZWdlcgorICAgICAgIGluIGEgZ2l2ZW4gcmFuZ2UuCisgICAgPHA+SWYgT0ssIHJldHVybnMgaXQgYXMgYW4gaW50LiA8L3NnbWw+ICovCisgLy8gW2N1cnJlbnRseSBvbmx5IHVzZWQgYnkgcG93XQorIAorIHByaXZhdGUgaW50IGludGNoZWNrKGludCBtaW4saW50IG1heCl7CisgIGludCBpOworICBpPXRoaXMuaW50VmFsdWVFeGFjdCgpOyAvLyBbY2hlY2tzIGZvciBub24tMCBkZWNpbWFsIHBhcnRdCisgIC8vIFVzZSBzYW1lIG1lc3NhZ2UgYXMgdGhvdWdoIGludFZhbHVlRXhhY3QgZmFpbGVkIGR1ZSB0byBzaXplCisgIGlmICgoaTxtaW4pfChpPm1heCkpIAorICAgdGhyb3cgbmV3IGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uKCJDb252ZXJzaW9uIG92ZXJmbG93OiIrIiAiK2kpOworICByZXR1cm4gaTsKKyAgfQorCisgLyogPHNnbWw+IENhcnJ5IG91dCBkaXZpc2lvbiBvcGVyYXRpb25zLiA8L3NnbWw+ICovCisgLyoKKyAgICBBcmcxIGlzIG9wZXJhdGlvbiBjb2RlOiBEPWRpdmlkZSwgST1pbnRlZ2VyIGRpdmlkZSwgUj1yZW1haW5kZXIKKyAgICBBcmcyIGlzIHRoZSByaHMuCisgICAgQXJnMyBpcyB0aGUgY29udGV4dC4KKyAgICBBcmc0IGlzIGV4cGxpY2l0IHNjYWxlIGlmZiBjb2RlPSdEJyBvciAnSScgKC0xIGlmIG5vbmUpLgorIAorICAgIFVuZGVybHlpbmcgYWxnb3JpdGhtIChjb21wbGljYXRpb25zIGZvciBSZW1haW5kZXIgZnVuY3Rpb24gYW5kCisgICAgc2NhbGVkIGRpdmlzaW9uIGFyZSBvbWl0dGVkIGZvciBjbGFyaXR5KToKKyAKKyAgICAgIFRlc3QgZm9yIHgvMCBhbmQgdGhlbiAwL3gKKyAgICAgIEV4cCA9RXhwMSAtIEV4cDIKKyAgICAgIEV4cCA9RXhwICtsZW4odmFyMSkgLWxlbih2YXIyKQorICAgICAgU2lnbj1TaWduMSAqIFNpZ24yCisgICAgICBQYWQgYWNjdW11bGF0b3IgKFZhcjEpIHRvIGRvdWJsZS1sZW5ndGggd2l0aCAwJ3MgKHBhZDEpCisgICAgICBQYWQgVmFyMiB0byBzYW1lIGxlbmd0aCBhcyBWYXIxCisgICAgICBCMkI9MXN0IHR3byBkaWdpdHMgb2YgdmFyMiwgKzEgdG8gYWxsb3cgZm9yIHJvdW5kdXAKKyAgICAgIGhhdmU9MAorICAgICAgRG8gdW50aWwgKGhhdmU9ZGlnaXRzKzEgT1IgcmVzaWR1ZT0wKQorICAgICAgICBpZiBleHA8MCB0aGVuIGlmIGludGVnZXIgZGl2aWRlL3Jlc2lkdWUgdGhlbiBsZWF2ZQorICAgICAgICB0aGlzX2RpZ2l0PTAKKyAgICAgICAgRG8gZm9yZXZlcgorICAgICAgICAgICBjb21wYXJlIG51bWJlcnMKKyAgICAgICAgICAgaWYgPDAgdGhlbiBsZWF2ZSBpbm5lcl9sb29wCisgICAgICAgICAgIGlmID0wIHRoZW4gKC0gcXVpY2sgZXhpdCB3aXRob3V0IHN1YnRyYWN0IC0pIGRvCisgICAgICAgICAgICAgIHRoaXNfZGlnaXQ9dGhpc19kaWdpdCsxOyBvdXRwdXQgdGhpc19kaWdpdAorICAgICAgICAgICAgICBsZWF2ZSBvdXRlcl9sb29wOyBlbmQKKyAgICAgICAgICAgQ29tcGFyZSBsZW5ndGhzIG9mIG51bWJlcnMgKG1hbnRpc3NhZSk6CisgICAgICAgICAgIElmIHNhbWUgdGhlbiBDQT1maXJzdF9kaWdpdF9vZl9WYXIxCisgICAgICAgICAgICAgICAgICAgZWxzZSBDQT1maXJzdF90d29fZGlnaXRzX29mX1ZhcjEKKyAgICAgICAgICAgbXVsdD1jYSoxMC9iMmIgICAtLSBHb29kIGFuZCBzYWZlIGd1ZXNzIGF0IGRpdmlzb3IKKyAgICAgICAgICAgaWYgbXVsdD0wIHRoZW4gbXVsdD0xCisgICAgICAgICAgIHRoaXNfZGlnaXQ9dGhpc19kaWdpdCttdWx0CisgICAgICAgICAgIHN1YnRyYWN0CisgICAgICAgICAgIGVuZCBpbm5lcl9sb29wCisgICAgICAgICBpZiBoYXZlXD0wIHwgdGhpc19kaWdpdFw9MCB0aGVuIGRvCisgICAgICAgICAgIG91dHB1dCB0aGlzX2RpZ2l0CisgICAgICAgICAgIGhhdmU9aGF2ZSsxOyBlbmQKKyAgICAgICAgIHZhcjI9dmFyMi8xMAorICAgICAgICAgZXhwPWV4cC0xCisgICAgICAgICBlbmQgb3V0ZXJfbG9vcAorICAgICAgZXhwPWV4cCsxICAgLS0gc2V0IHRoZSBwcm9wZXIgZXhwb25lbnQKKyAgICAgIGlmIGhhdmU9MCB0aGVuIGdlbmVyYXRlIGFuc3dlcj0wCisgICAgICBSZXR1cm4gdG8gRklOSVNIRUQKKyAgICAgIFJlc3VsdCBkZWZpbmVkIGJ5IE1BVEhWMQorIAorICAgIEZvciBleHRlbmRlZCBjb21tZW50YXJ5LCBzZWUgRE1TUkNOLgorICAqLworIAorIHByaXZhdGUgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGRvZGl2aWRlKGNoYXIgY29kZSxjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzLGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgc2V0LGludCBzY2FsZSl7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBsaHM7CisgIGludCByZXFkaWc7CisgIGludCBuZXdleHA7CisgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByZXM7CisgIGludCBuZXdsZW47CisgIGJ5dGUgdmFyMVtdOworICBpbnQgdmFyMWxlbjsKKyAgYnl0ZSB2YXIyW107CisgIGludCB2YXIybGVuOworICBpbnQgYjJiOworICBpbnQgaGF2ZTsKKyAgaW50IHRoaXNkaWdpdD0wOworICBpbnQgaT0wOworICBieXRlIHYyPTA7CisgIGludCBiYT0wOworICBpbnQgbXVsdD0wOworICBpbnQgc3RhcnQ9MDsKKyAgaW50IHBhZGRpbmc9MDsKKyAgaW50IGQ9MDsKKyAgYnl0ZSBuZXd2YXIxW109bnVsbDsKKyAgYnl0ZSBsYXN0aGF2ZT0wOworICBpbnQgYWN0ZGlnPTA7CisgIGJ5dGUgbmV3bWFudFtdPW51bGw7CisgIAorICBpZiAoc2V0Lmxvc3REaWdpdHMpIAorICAgY2hlY2tkaWdpdHMocmhzLHNldC5kaWdpdHMpOworICBsaHM9dGhpczsgLy8gbmFtZSBmb3IgY2xhcml0eQorICAKKyAgLy8gW25vdGUgd2UgbXVzdCBoYXZlIGNoZWNrZWQgbG9zdERpZ2l0cyBiZWZvcmUgdGhlIGZvbGxvd2luZyBjaGVja3NdCisgIGlmIChyaHMuaW5kPT0wKSAKKyAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiRGl2aWRlIGJ5IDAiKTsgLy8gaW5jbHVkZXMgMC8wCisgIGlmIChsaHMuaW5kPT0wKSAKKyAgIHsgLy8gMC94ID0+IDAgW3Bvc3NpYmx5IHdpdGggLjBzXQorICAgIGlmIChzZXQuZm9ybSE9Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5QTEFJTikgCisgICAgIHJldHVybiBaRVJPOworICAgIGlmIChzY2FsZT09KC0xKSkgCisgICAgIHJldHVybiBsaHM7CisgICAgcmV0dXJuIGxocy5zZXRTY2FsZShzY2FsZSk7CisgICB9CisgIAorICAvKiBQcmVwYXJlIG51bWJlcnMgYWNjb3JkaW5nIHRvIEJpZ0RlY2ltYWwgcnVsZXMgKi8KKyAgcmVxZGlnPXNldC5kaWdpdHM7IC8vIGxvY2FsIGNvcHkgKGhlYXZpbHkgdXNlZCkKKyAgaWYgKHJlcWRpZz4wKSAKKyAgIHsKKyAgICBpZiAobGhzLm1hbnQubGVuZ3RoPnJlcWRpZykgCisgICAgIGxocz1jbG9uZShsaHMpLnJvdW5kKHNldCk7CisgICAgaWYgKHJocy5tYW50Lmxlbmd0aD5yZXFkaWcpIAorICAgICByaHM9Y2xvbmUocmhzKS5yb3VuZChzZXQpOworICAgfQorICBlbHNlIAorICAgey8qIHNjYWxlZCBkaXZpZGUgKi8KKyAgICBpZiAoc2NhbGU9PSgtMSkpIAorICAgICBzY2FsZT1saHMuc2NhbGUoKTsKKyAgICAvLyBzZXQgcmVxZGlnIHRvIGJlIGF0IGxlYXN0IGxhcmdlIGVub3VnaCBmb3IgdGhlIGNvbXB1dGF0aW9uCisgICAgcmVxZGlnPWxocy5tYW50Lmxlbmd0aDsgLy8gYmFzZSBsZW5ndGgKKyAgICAvLyBuZXh0IGxpbmUgaGFuZGxlcyBib3RoIHBvc2l0aXZlIGxocy5leHAgYW5kIGFsc28gc2NhbGUgbWlzbWF0Y2gKKyAgICBpZiAoc2NhbGUhPSgoaW50KS1saHMuZXhwKSkgCisgICAgIHJlcWRpZz0ocmVxZGlnK3NjYWxlKStsaHMuZXhwOworICAgIHJlcWRpZz0ocmVxZGlnLSgocmhzLm1hbnQubGVuZ3RoLTEpKSktcmhzLmV4cDsgLy8gcmVkdWNlIGJ5IFJIUyBlZmZlY3QKKyAgICBpZiAocmVxZGlnPGxocy5tYW50Lmxlbmd0aCkgCisgICAgIHJlcWRpZz1saHMubWFudC5sZW5ndGg7IC8vIGNsYW1wCisgICAgaWYgKHJlcWRpZzxyaHMubWFudC5sZW5ndGgpIAorICAgICByZXFkaWc9cmhzLm1hbnQubGVuZ3RoOyAvLyAuLgorICAgfQorICAKKyAgLyogcHJlY2FsY3VsYXRlIGV4cG9uZW50ICovCisgIG5ld2V4cD0oKGxocy5leHAtcmhzLmV4cCkrbGhzLm1hbnQubGVuZ3RoKS1yaHMubWFudC5sZW5ndGg7CisgIC8qIElmIG5ldyBleHBvbmVudCAtdmUsIHRoZW4gc29tZSBxdWljayBleGl0cyBhcmUgcG9zc2libGUgKi8KKyAgaWYgKG5ld2V4cDwwKSAKKyAgIGlmIChjb2RlIT0nRCcpIAorICAgIHsKKyAgICAgaWYgKGNvZGU9PSdJJykgCisgICAgICByZXR1cm4gWkVSTzsgLy8gZWFzeSAtIG5vIGludGVnZXIgcGFydAorICAgICAvKiBNdXN0IGJlICdSJzsgcmVtYWluZGVyIGlzIFtmaW5pc2hlZCBjbG9uZSBvZl0gaW5wdXQgdmFsdWUgKi8KKyAgICAgcmV0dXJuIGNsb25lKGxocykuZmluaXNoKHNldCxmYWxzZSk7CisgICAgfQorICAKKyAgLyogV2UgbmVlZCBzbG93IGRpdmlzaW9uICovCisgIHJlcz1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCk7IC8vIHdoZXJlIHdlJ2xsIGJ1aWxkIHJlc3VsdAorICByZXMuaW5kPShieXRlKShsaHMuaW5kKnJocy5pbmQpOyAvLyBmaW5hbCBzaWduIChmb3IgRC9JKQorICByZXMuZXhwPW5ld2V4cDsgLy8gaW5pdGlhbCBleHBvbmVudCAoZm9yIEQvSSkKKyAgcmVzLm1hbnQ9bmV3IGJ5dGVbcmVxZGlnKzFdOyAvLyB3aGVyZSBidWlsZCB0aGUgcmVzdWx0CisgIAorICAvKiBOb3cgW3ZpcnR1YWxseSBwYWQgdGhlIG1hbnRpc3NhZSB3aXRoIHRyYWlsaW5nIHplcm9zICovCisgIC8vIEFsc28gY29weSB0aGUgTEhTLCB3aGljaCB3aWxsIGJlIG91ciB3b3JraW5nIGFycmF5CisgIG5ld2xlbj0ocmVxZGlnK3JlcWRpZykrMTsKKyAgdmFyMT1leHRlbmQobGhzLm1hbnQsbmV3bGVuKTsgLy8gYWx3YXlzIG1ha2VzIGxvbmdlciwgc28gbmV3IHNhZmUgYXJyYXkKKyAgdmFyMWxlbj1uZXdsZW47IC8vIFtyZW1haW5pbmcgZGlnaXRzIGFyZSAwXQorICAKKyAgdmFyMj1yaHMubWFudDsKKyAgdmFyMmxlbj1uZXdsZW47CisgIAorICAvKiBDYWxjdWxhdGUgZmlyc3QgdHdvIGRpZ2l0cyBvZiByaHMgKHZhcjIpLCArMSBmb3IgbGF0ZXIgZXN0aW1hdGlvbnMgKi8KKyAgYjJiPSh2YXIyWzBdKjEwKSsxOworICBpZiAodmFyMi5sZW5ndGg+MSkgCisgICBiMmI9YjJiK3ZhcjJbMV07CisgIAorICAvKiBzdGFydCB0aGUgbG9uZy1kaXZpc2lvbiBsb29wcyAqLworICBoYXZlPTA7CisgIHtvdXRlcjpmb3IoOzspeworICAgdGhpc2RpZ2l0PTA7CisgICAvKiBmaW5kIHRoZSBuZXh0IGRpZ2l0ICovCisgICB7aW5uZXI6Zm9yKDs7KXsKKyAgICBpZiAodmFyMWxlbjx2YXIybGVuKSAKKyAgICAgYnJlYWsgaW5uZXI7IC8vIFYxIHRvbyBsb3cKKyAgICBpZiAodmFyMWxlbj09dmFyMmxlbikgCisgICAgIHsgLy8gY29tcGFyZSBuZWVkZWQKKyAgICAgIHtjb21wYXJlOmRveyAvLyBjb21wYXJpc29uCisgICAgICAge2ludCAkMjI9dmFyMWxlbjtpPTA7aTpmb3IoOyQyMj4wOyQyMi0tLGkrKyl7CisgICAgICAgIC8vIHZhcjFsZW4gaXMgYWx3YXlzIDw9IHZhcjEubGVuZ3RoCisgICAgICAgIGlmIChpPHZhcjIubGVuZ3RoKSAKKyAgICAgICAgIHYyPXZhcjJbaV07CisgICAgICAgIGVsc2UgCisgICAgICAgICB2Mj0oYnl0ZSkwOworICAgICAgICBpZiAodmFyMVtpXTx2MikgCisgICAgICAgICBicmVhayBpbm5lcjsgLy8gVjEgdG9vIGxvdworICAgICAgICBpZiAodmFyMVtpXT52MikgCisgICAgICAgICBicmVhayBjb21wYXJlOyAvLyBPSyB0byBzdWJ0cmFjdAorICAgICAgICB9CisgICAgICAgfS8qaSovCisgICAgICAgLyogcmVhY2ggaGVyZSBpZiBsaHMgYW5kIHJocyBhcmUgaWRlbnRpY2FsOyBzdWJ0cmFjdGlvbiB3aWxsCisgICAgICAgICAgaW5jcmVhc2UgZGlnaXQgYnkgb25lLCBhbmQgdGhlIHJlc2lkdWUgd2lsbCBiZSAwIHNvIHdlCisgICAgICAgICAgYXJlIGRvbmU7IGxlYXZlIHRoZSBsb29wIHdpdGggcmVzaWR1ZSBzZXQgdG8gMCAoaW4gY2FzZQorICAgICAgICAgIGNvZGUgaXMgJ1InIG9yIFJPVU5EX1VOTkVDRVNTQVJZIG9yIGEgUk9VTkRfSEFMRl94eHh4IGlzCisgICAgICAgICAgYmVpbmcgY2hlY2tlZCkgKi8KKyAgICAgICB0aGlzZGlnaXQrKzsKKyAgICAgICByZXMubWFudFtoYXZlXT0oYnl0ZSl0aGlzZGlnaXQ7CisgICAgICAgaGF2ZSsrOworICAgICAgIHZhcjFbMF09KGJ5dGUpMDsgLy8gcmVzaWR1ZSB0byAwIFt0aGlzIGlzIGFsbCB3ZSdsbCB0ZXN0XQorICAgICAgIC8vIHZhcjFsZW49MSAgICAgIC0tIFtvcHRpbWl6ZWQgb3V0XQorICAgICAgIGJyZWFrIG91dGVyOworICAgICAgfXdoaWxlKGZhbHNlKTt9Lypjb21wYXJlKi8KKyAgICAgIC8qIHByZXBhcmUgZm9yIHN1YnRyYWN0aW9uLiAgRXN0aW1hdGUgQkEgKGxlbmd0aHMgdGhlIHNhbWUpICovCisgICAgICBiYT0oaW50KXZhcjFbMF07IC8vIHVzZSBvbmx5IGZpcnN0IGRpZ2l0CisgICAgIH0gLy8gbGVuZ3RocyB0aGUgc2FtZQorICAgIGVsc2UgCisgICAgIHsvKiBsaHMgbG9uZ2VyIHRoYW4gcmhzICovCisgICAgICAvKiB1c2UgZmlyc3QgdHdvIGRpZ2l0cyBmb3IgZXN0aW1hdGUgKi8KKyAgICAgIGJhPXZhcjFbMF0qMTA7CisgICAgICBpZiAodmFyMWxlbj4xKSAKKyAgICAgICBiYT1iYSt2YXIxWzFdOworICAgICB9CisgICAgLyogc3VidHJhY3Rpb24gbmVlZGVkOyBWMT49VjIgKi8KKyAgICBtdWx0PShiYSoxMCkvYjJiOworICAgIGlmIChtdWx0PT0wKSAKKyAgICAgbXVsdD0xOworICAgIHRoaXNkaWdpdD10aGlzZGlnaXQrbXVsdDsKKyAgICAvLyBzdWJ0cmFjdDsgdmFyMSByZXVzYWJsZQorICAgIHZhcjE9Ynl0ZWFkZHN1Yih2YXIxLHZhcjFsZW4sdmFyMix2YXIybGVuLChpbnQpLW11bHQsdHJ1ZSk7CisgICAgaWYgKHZhcjFbMF0hPTApIAorICAgICBjb250aW51ZSBpbm5lcjsgLy8gbWF5YmUgYW5vdGhlciBzdWJ0cmFjdCBuZWVkZWQKKyAgICAvKiBWMSBub3cgcHJvYmFibHkgaGFzIGxlYWRpbmcgemVyb3MsIHJlbW92ZSBsZWFkaW5nIDAncyBhbmQgdHJ5CisgICAgICAgYWdhaW4uIChJdCBjb3VsZCBiZSBsb25nZXIgdGhhbiBWMikgKi8KKyAgICB7aW50ICQyMz12YXIxbGVuLTI7c3RhcnQ9MDtzdGFydDpmb3IoO3N0YXJ0PD0kMjM7c3RhcnQrKyl7CisgICAgIGlmICh2YXIxW3N0YXJ0XSE9MCkgCisgICAgICBicmVhayBzdGFydDsKKyAgICAgdmFyMWxlbi0tOworICAgICB9CisgICAgfS8qc3RhcnQqLworICAgIGlmIChzdGFydD09MCkgCisgICAgIGNvbnRpbnVlIGlubmVyOworICAgIC8vIHNoaWZ0IGxlZnQKKyAgICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSgoamF2YS5sYW5nLk9iamVjdCl2YXIxLHN0YXJ0LChqYXZhLmxhbmcuT2JqZWN0KXZhcjEsMCx2YXIxbGVuKTsKKyAgICB9CisgICB9Lyppbm5lciovCisgICAKKyAgIC8qIFdlIGhhdmUgdGhlIG5leHQgZGlnaXQgKi8KKyAgIGlmICgoaGF2ZSE9MCl8KHRoaXNkaWdpdCE9MCkpIAorICAgIHsgLy8gcHV0IHRoZSBkaWdpdCB3ZSBnb3QKKyAgICAgcmVzLm1hbnRbaGF2ZV09KGJ5dGUpdGhpc2RpZ2l0OworICAgICBoYXZlKys7CisgICAgIGlmIChoYXZlPT0ocmVxZGlnKzEpKSAKKyAgICAgIGJyZWFrIG91dGVyOyAvLyB3ZSBoYXZlIGFsbCB3ZSBuZWVkCisgICAgIGlmICh2YXIxWzBdPT0wKSAKKyAgICAgIGJyZWFrIG91dGVyOyAvLyByZXNpZHVlIG5vdyAwCisgICAgfQorICAgLyogY2FuIGxlYXZlIG5vdyBpZiBhIHNjYWxlZCBkaXZpZGUgYW5kIGV4cG9uZW50IGlzIHNtYWxsIGVub3VnaCAqLworICAgaWYgKHNjYWxlPj0wKSAKKyAgICBpZiAoKChpbnQpLXJlcy5leHApPnNjYWxlKSAKKyAgICAgYnJlYWsgb3V0ZXI7CisgICAvKiBjYW4gbGVhdmUgbm93IGlmIG5vdCBEaXZpZGUgYW5kIG5vIGludGVnZXIgcGFydCBsZWZ0ICAqLworICAgaWYgKGNvZGUhPSdEJykgCisgICAgaWYgKHJlcy5leHA8PTApIAorICAgICBicmVhayBvdXRlcjsKKyAgIHJlcy5leHA9cmVzLmV4cC0xOyAvLyByZWR1Y2UgdGhlIGV4cG9uZW50CisgICAvKiB0byBnZXQgaGVyZSwgVjEgaXMgbGVzcyB0aGFuIFYyLCBzbyBkaXZpZGUgVjIgYnkgMTAgYW5kIGdvIGZvcgorICAgICAgdGhlIG5leHQgZGlnaXQgKi8KKyAgIHZhcjJsZW4tLTsKKyAgIH0KKyAgfS8qb3V0ZXIqLworICAKKyAgLyogaGVyZSB3aGVuIHdlIGhhdmUgZmluaXNoZWQgZGl2aWRpbmcsIGZvciBzb21lIHJlYXNvbiAqLworICAvLyBoYXZlIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIHdlIGNvbGxlY3RlZCBpbiByZXMubWFudAorICBpZiAoaGF2ZT09MCkgCisgICBoYXZlPTE7IC8vIHJlcy5tYW50WzBdIGlzIDA7IHdlIGFsd2F5cyB3YW50IGEgZGlnaXQKKyAgCisgIGlmICgoY29kZT09J0knKXwoY29kZT09J1InKSkgCisgICB7LyogY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cgbmVlZGVkICovCisgICAgaWYgKChoYXZlK3Jlcy5leHApPnJlcWRpZykgCisgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiSW50ZWdlciBvdmVyZmxvdyIpOworICAgIAorICAgIGlmIChjb2RlPT0nUicpIAorICAgICB7cmVtYWluZGVyOmRveworICAgICAgLyogV2Ugd2VyZSBkb2luZyBSZW1haW5kZXIgLS0gcmV0dXJuIHRoZSByZXNpZHVlICovCisgICAgICBpZiAocmVzLm1hbnRbMF09PTApICAvLyBubyBpbnRlZ2VyIHBhcnQgd2FzIGZvdW5kCisgICAgICAgcmV0dXJuIGNsb25lKGxocykuZmluaXNoKHNldCxmYWxzZSk7IC8vIC4uIHNvIHJldHVybiBsaHMsIGNhbm9uaWNhbAorICAgICAgaWYgKHZhcjFbMF09PTApIAorICAgICAgIHJldHVybiBaRVJPOyAvLyBzaW1wbGUgMCByZXNpZHVlCisgICAgICByZXMuaW5kPWxocy5pbmQ7IC8vIHNpZ24gaXMgYWx3YXlzIGFzIExIUworICAgICAgLyogQ2FsY3VsYXRlIHRoZSBleHBvbmVudCBieSBzdWJ0cmFjdGluZyB0aGUgbnVtYmVyIG9mIHBhZGRpbmcgemVyb3MKKyAgICAgICAgIHdlIGFkZGVkIGFuZCBhZGRpbmcgdGhlIG9yaWdpbmFsIGV4cG9uZW50ICovCisgICAgICBwYWRkaW5nPSgocmVxZGlnK3JlcWRpZykrMSktbGhzLm1hbnQubGVuZ3RoOworICAgICAgcmVzLmV4cD0ocmVzLmV4cC1wYWRkaW5nKStsaHMuZXhwOworICAgICAgCisgICAgICAvKiBzdHJpcCBpbnNpZ25pZmljYW50IHBhZGRpbmcgemVyb3MgZnJvbSByZXNpZHVlLCBhbmQgY3JlYXRlL2NvcHkKKyAgICAgICAgIHRoZSByZXN1bHRpbmcgbWFudGlzc2EgaWYgbmVlZCBiZSAqLworICAgICAgZD12YXIxbGVuOworICAgICAge2k9ZC0xO2k6Zm9yKDtpPj0xO2ktLSl7aWYoISgocmVzLmV4cDxsaHMuZXhwKSYocmVzLmV4cDxyaHMuZXhwKSkpYnJlYWs7CisgICAgICAgaWYgKHZhcjFbaV0hPTApIAorICAgICAgICBicmVhayBpOworICAgICAgIGQtLTsKKyAgICAgICByZXMuZXhwPXJlcy5leHArMTsKKyAgICAgICB9CisgICAgICB9LyppKi8KKyAgICAgIGlmIChkPHZhcjEubGVuZ3RoKSAKKyAgICAgICB7LyogbmVlZCB0byByZWR1Y2UgKi8KKyAgICAgICAgbmV3dmFyMT1uZXcgYnl0ZVtkXTsKKyAgICAgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkoKGphdmEubGFuZy5PYmplY3QpdmFyMSwwLChqYXZhLmxhbmcuT2JqZWN0KW5ld3ZhcjEsMCxkKTsgLy8gc2hvcnRlbgorICAgICAgICB2YXIxPW5ld3ZhcjE7CisgICAgICAgfQorICAgICAgcmVzLm1hbnQ9dmFyMTsKKyAgICAgIHJldHVybiByZXMuZmluaXNoKHNldCxmYWxzZSk7CisgICAgIH13aGlsZShmYWxzZSk7fS8qcmVtYWluZGVyKi8KKyAgIH0KKyAgIAorICBlbHNlIAorICAgey8qICdEJyAtLSBubyBvdmVyZmxvdyBjaGVjayBuZWVkZWQgKi8KKyAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXNpZHVlIHRoZW4gYnVtcCB0aGUgZmluYWwgZGlnaXQgKGlmZiAwIG9yIDUpCisgICAgLy8gc28gdGhhdCB0aGUgcmVzaWR1ZSBpcyB2aXNpYmxlIGZvciBST1VORF9VUCwgUk9VTkRfSEFMRl94eHggYW5kCisgICAgLy8gUk9VTkRfVU5ORUNFU1NBUlkgY2hlY2tzIChldGMuKSBsYXRlci4KKyAgICAvLyBbaWYgd2UgZmluaXNoZWQgZWFybHksIHRoZSByZXNpZHVlIHdpbGwgYmUgMF0KKyAgICBpZiAodmFyMVswXSE9MCkgCisgICAgIHsgLy8gcmVzaWR1ZSBub3QgMAorICAgICAgbGFzdGhhdmU9cmVzLm1hbnRbaGF2ZS0xXTsKKyAgICAgIGlmICgoKGxhc3RoYXZlJTUpKT09MCkgCisgICAgICAgcmVzLm1hbnRbaGF2ZS0xXT0oYnl0ZSkobGFzdGhhdmUrMSk7CisgICAgIH0KKyAgIH0KKyAgCisgIC8qIEhlcmUgZm9yIERpdmlkZSBvciBJbnRlZ2VyIERpdmlkZSAqLworICAvLyBoYW5kbGUgc2NhbGVkIHJlc3VsdHMgZmlyc3QgWydJJyBhbHdheXMgc2NhbGUgMCwgb3B0aW9uYWwgZm9yICdEJ10KKyAgaWYgKHNjYWxlPj0wKSAKKyAgIHtzY2FsZWQ6ZG97CisgICAgLy8gc2F5ICdzY2FsZSBoYXZlIHJlcy5leHAgbGVuJyBzY2FsZSBoYXZlIHJlcy5leHAgcmVzLm1hbnQubGVuZ3RoCisgICAgaWYgKGhhdmUhPXJlcy5tYW50Lmxlbmd0aCkgCisgICAgIC8vIGFscmVhZHkgcGFkZGVkIHdpdGggMCdzLCBzbyBqdXN0IGFkanVzdCBleHBvbmVudAorICAgICByZXMuZXhwPXJlcy5leHAtKChyZXMubWFudC5sZW5ndGgtaGF2ZSkpOworICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIHdlIHJlYWxseSB3YW50IFttYXkgYmUgMF0KKyAgICBhY3RkaWc9cmVzLm1hbnQubGVuZ3RoLSgoKChpbnQpLXJlcy5leHApLXNjYWxlKSk7CisgICAgcmVzLnJvdW5kKGFjdGRpZyxzZXQucm91bmRpbmdNb2RlKTsgLy8gcm91bmQgdG8gZGVzaXJlZCBsZW5ndGgKKyAgICAvLyBUaGlzIGNvdWxkIGhhdmUgc2hpZnRlZCBsZWZ0IGlmIHJvdW5kIChzYXkpIDAuOS0+MVsuMF0KKyAgICAvLyBSZXBhaXIgaWYgc28gYnkgYWRkaW5nIGEgemVybyBhbmQgcmVkdWNpbmcgZXhwb25lbnQKKyAgICBpZiAocmVzLmV4cCE9KChpbnQpLXNjYWxlKSkgCisgICAgIHsKKyAgICAgIHJlcy5tYW50PWV4dGVuZChyZXMubWFudCxyZXMubWFudC5sZW5ndGgrMSk7CisgICAgICByZXMuZXhwPXJlcy5leHAtMTsKKyAgICAgfQorICAgIHJldHVybiByZXMuZmluaXNoKHNldCx0cnVlKTsgLy8gW3N0cmlwIGlmIG5vdCBQTEFJTl0KKyAgIH13aGlsZShmYWxzZSk7fS8qc2NhbGVkKi8KKyAgCisgIC8vIHJlYWNoIGhlcmUgb25seSBpZiBhIG5vbi1zY2FsZWQKKyAgaWYgKGhhdmU9PXJlcy5tYW50Lmxlbmd0aCkgCisgICB7IC8vIGdvdCBkaWdpdHMrMSBkaWdpdHMKKyAgICByZXMucm91bmQoc2V0KTsKKyAgICBoYXZlPXJlcWRpZzsKKyAgIH0KKyAgZWxzZSAKKyAgIHsvKiBoYXZlPD1yZXFkaWcgKi8KKyAgICBpZiAocmVzLm1hbnRbMF09PTApIAorICAgICByZXR1cm4gWkVSTzsgLy8gZmFzdHBhdGgKKyAgICAvLyBtYWtlIHRoZSBtYW50aXNzYSB0cnVseSBqdXN0ICdoYXZlJyBsb25nCisgICAgLy8gW3dlIGNvdWxkIGxldCBmaW5pc2ggZG8gdGhpcywgZHVyaW5nIHN0cmlwLCBpZiB3ZSBhZGp1c3RlZAorICAgIC8vIHRoZSBleHBvbmVudDsgaG93ZXZlciwgdHJ1bmNhdGlvbiBhdm9pZHMgdGhlIHN0cmlwIGxvb3BdCisgICAgbmV3bWFudD1uZXcgYnl0ZVtoYXZlXTsgLy8gc2hvcnRlbgorICAgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KChqYXZhLmxhbmcuT2JqZWN0KXJlcy5tYW50LDAsKGphdmEubGFuZy5PYmplY3QpbmV3bWFudCwwLGhhdmUpOworICAgIHJlcy5tYW50PW5ld21hbnQ7CisgICB9CisgIHJldHVybiByZXMuZmluaXNoKHNldCx0cnVlKTsKKyAgfQorCisgCisgLyogPHNnbWw+IFJlcG9ydCBhIGNvbnZlcnNpb24gZXhjZXB0aW9uLiA8L3NnbWw+ICovCisgCisgcHJpdmF0ZSB2b2lkIGJhZChjaGFyIHNbXSl7CisgIHRocm93IG5ldyBqYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJOb3QgYSBudW1iZXI6IisiICIramF2YS5sYW5nLlN0cmluZy52YWx1ZU9mKHMpKTsKKyAgfQorCisgLyogPHNnbWw+IFJlcG9ydCBhIGJhZCBhcmd1bWVudCB0byBhIG1ldGhvZC4gPC9zZ21sPgorICAgIEFyZzEgaXMgbWV0aG9kIG5hbWUKKyAgICBBcmcyIGlzIGFyZ3VtZW50IHBvc2l0aW9uCisgICAgQXJnMyBpcyB3aGF0IHdhcyBmb3VuZCAqLworIAorIHByaXZhdGUgdm9pZCBiYWRhcmcoamF2YS5sYW5nLlN0cmluZyBuYW1lLGludCBwb3MsamF2YS5sYW5nLlN0cmluZyB2YWx1ZSl7CisgIHRocm93IG5ldyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCYWQgYXJndW1lbnQiKyIgIitwb3MrIiAiKyJ0byIrIiAiK25hbWUrIjoiKyIgIit2YWx1ZSk7CisgIH0KKworIC8qIDxzZ21sPiBFeHRlbmQgYnl0ZSBhcnJheSB0byBnaXZlbiBsZW5ndGgsIHBhZGRpbmcgd2l0aCAwcy4gIElmIG5vCisgICAgZXh0ZW5zaW9uIGlzIHJlcXVpcmVkIHRoZW4gcmV0dXJuIHRoZSBzYW1lIGFycmF5LiA8L3NnbWw+CisgCisgICAgQXJnMSBpcyB0aGUgc291cmNlIGJ5dGUgYXJyYXkKKyAgICBBcmcyIGlzIHRoZSBuZXcgbGVuZ3RoIChsb25nZXIpCisgICAgKi8KKyAKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gZXh0ZW5kKGJ5dGUgaW5hcnJbXSxpbnQgbmV3bGVuKXsKKyAgYnl0ZSBuZXdhcnJbXTsKKyAgaWYgKGluYXJyLmxlbmd0aD09bmV3bGVuKSAKKyAgIHJldHVybiBpbmFycjsKKyAgbmV3YXJyPW5ldyBieXRlW25ld2xlbl07CisgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KChqYXZhLmxhbmcuT2JqZWN0KWluYXJyLDAsKGphdmEubGFuZy5PYmplY3QpbmV3YXJyLDAsaW5hcnIubGVuZ3RoKTsKKyAgLy8gMCBwYWRkaW5nIGlzIGNhcnJpZWQgb3V0IGJ5IHRoZSBKVk0gb24gYWxsb2NhdGlvbiBpbml0aWFsaXphdGlvbgorICByZXR1cm4gbmV3YXJyOworICB9CisKKyAvKiA8c2dtbD4gQWRkIG9yIHN1YnRyYWN0IHR3byA+PTAgaW50ZWdlcnMgaW4gYnl0ZSBhcnJheXMKKyAgICA8cD5UaGlzIHJvdXRpbmUgcGVyZm9ybXMgdGhlIGNhbGN1bGF0aW9uOgorICAgIDxwcmU+CisgICAgQz1BKyhCKk0pCisgICAgPC9wcmU+CisgICAgV2hlcmUgTSBpcyBpbiB0aGUgcmFuZ2UgLTkgdGhyb3VnaCArOQorICAgIDxwPgorICAgIElmIE08MCB0aGVuIEE+PUIgbXVzdCBiZSB0cnVlLCBzbyB0aGUgcmVzdWx0IGlzIGFsd2F5cworICAgIG5vbi1uZWdhdGl2ZS4KKyAKKyAgICBMZWFkaW5nIHplcm9zIGFyZSBub3QgcmVtb3ZlZCBhZnRlciBhIHN1YnRyYWN0aW9uLiAgVGhlIHJlc3VsdCBpcworICAgIGVpdGhlciB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIGxvbmdlciBvZiBBIGFuZCBCLCBvciAxIGxvbmdlciB0aGFuCisgICAgdGhhdCAoaWYgYSBjYXJyeSBvY2N1cnJlZCkuCisgCisgICAgQSBpcyBub3QgYWx0ZXJlZCB1bmxlc3MgQXJnNiBpcyAxLgorICAgIEIgaXMgbmV2ZXIgYWx0ZXJlZC4KKyAKKyAgICBBcmcxIGlzIEEKKyAgICBBcmcyIGlzIEEgbGVuZ3RoIHRvIHVzZSAoaWYgbG9uZ2VyIHRoYW4gQSwgcGFkIHdpdGggMCdzKQorICAgIEFyZzMgaXMgQgorICAgIEFyZzQgaXMgQiBsZW5ndGggdG8gdXNlIChpZiBsb25nZXIgdGhhbiBCLCBwYWQgd2l0aCAwJ3MpCisgICAgQXJnNSBpcyBNLCB0aGUgbXVsdGlwbGllcgorICAgIEFyZzYgaXMgMSBpZiBBIGNhbiBiZSB1c2VkIHRvIGJ1aWxkIHRoZSByZXN1bHQgKGlmIGl0IGZpdHMpCisgCisgICAgVGhpcyByb3V0aW5lIGlzIHNldmVyZWx5IHBlcmZvcm1hbmNlLWNyaXRpY2FsOyAqYW55KiBjaGFuZ2UgaGVyZQorICAgIG11c3QgYmUgbWVhc3VyZWQgKHRpbWVkKSB0byBhc3N1cmUgbm8gcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uCisgICAgKi8KKyAvLyAxOTk2LjAyLjIwIC0tIGVuaGFuY2VkIHZlcnNpb24gb2YgRE1TUkNOIGFsZ29yaXRobSAoMTk4MSkKKyAvLyAxOTk3LjEwLjA1IC0tIGNoYW5nZWQgdG8gYnl0ZSBhcnJheXMgKGZyb20gY2hhciBhcnJheXMpCisgLy8gMTk5OC4wNy4wMSAtLSBjaGFuZ2VkIHRvIGFsbG93IGRlc3RydWN0aXZlIHJldXNlIG9mIExIUworIC8vIDE5OTguMDcuMDEgLS0gY2hhbmdlZCB0byBhbGxvdyB2aXJ0dWFsIGxlbmd0aHMgZm9yIHRoZSBhcnJheXMKKyAvLyAxOTk4LjEyLjI5IC0tIHVzZSBsb29rYXNpZGUgZm9yIGRpZ2l0L2NhcnJ5IGNhbGN1bGF0aW9uCisgLy8gMTk5OS4wOC4wNyAtLSBhdm9pZCBtdWx0aXBseSB3aGVuIG11bHQ9MSwgYW5kIG1ha2UgZGIgYW4gaW50CisgLy8gMTk5OS4xMi4yMiAtLSBzcGVjaWFsIGNhc2UgbT0tMSwgYWxzbyBkcm9wIDAgc3BlY2lhbCBjYXNlCisgCisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIGJ5dGVhZGRzdWIoYnl0ZSBhW10saW50IGF2bGVuLGJ5dGUgYltdLGludCBidmxlbixpbnQgbSxib29sZWFuIHJldXNlKXsKKyAgaW50IGFsZW5ndGg7CisgIGludCBibGVuZ3RoOworICBpbnQgYXA7CisgIGludCBicDsKKyAgaW50IG1heGFycjsKKyAgYnl0ZSByZWJbXTsKKyAgYm9vbGVhbiBxdWlja207CisgIGludCBkaWdpdDsKKyAgaW50IG9wPTA7CisgIGludCBkcDkwPTA7CisgIGJ5dGUgbmV3YXJyW107CisgIGludCBpPTA7CisgIAorICAKKyAgCisgIAorICAvLyBXZSdsbCB1c3VhbGx5IGJlIHJpZ2h0IGlmIHdlIGFzc3VtZSBubyBjYXJyeQorICBhbGVuZ3RoPWEubGVuZ3RoOyAvLyBwaHlzaWNhbCBsZW5ndGhzCisgIGJsZW5ndGg9Yi5sZW5ndGg7IC8vIC4uCisgIGFwPWF2bGVuLTE7IC8vIC0+IGZpbmFsIChyaWdodG1vc3QpIGRpZ2l0CisgIGJwPWJ2bGVuLTE7IC8vIC4uCisgIG1heGFycj1icDsKKyAgaWYgKG1heGFycjxhcCkgCisgICBtYXhhcnI9YXA7CisgIHJlYj0oYnl0ZVtdKW51bGw7IC8vIHJlc3VsdCBieXRlIGFycmF5CisgIGlmIChyZXVzZSkgCisgICBpZiAoKG1heGFycisxKT09YWxlbmd0aCkgCisgICAgcmViPWE7IC8vIE9LIHRvIHJldXNlIEEKKyAgaWYgKHJlYj09bnVsbCkgCisgICByZWI9bmV3IGJ5dGVbbWF4YXJyKzFdOyAvLyBuZWVkIG5ldyBhcnJheQorICAKKyAgcXVpY2ttPWZhbHNlOyAvLyAxIGlmIG5vIG11bHRpcGx5IG5lZWRlZAorICBpZiAobT09MSkgCisgICBxdWlja209dHJ1ZTsgLy8gbW9zdCBjb21tb24KKyAgZWxzZSAKKyAgIGlmIChtPT0oLTEpKSAKKyAgICBxdWlja209dHJ1ZTsgLy8gYWxzbyBjb21tb24KKyAgCisgIGRpZ2l0PTA7IC8vIGRpZ2l0LCB3aXRoIGNhcnJ5IG9yIGJvcnJvdworICB7b3A9bWF4YXJyO29wOmZvcig7b3A+PTA7b3AtLSl7CisgICBpZiAoYXA+PTApIAorICAgIHsKKyAgICAgaWYgKGFwPGFsZW5ndGgpIAorICAgICAgZGlnaXQ9ZGlnaXQrYVthcF07IC8vIHdpdGhpbiBBCisgICAgIGFwLS07CisgICAgfQorICAgaWYgKGJwPj0wKSAKKyAgICB7CisgICAgIGlmIChicDxibGVuZ3RoKSAKKyAgICAgIHsgLy8gd2l0aGluIEIKKyAgICAgICBpZiAocXVpY2ttKSAKKyAgICAgICAgeworICAgICAgICAgaWYgKG0+MCkgCisgICAgICAgICAgZGlnaXQ9ZGlnaXQrYlticF07IC8vIG1vc3QgY29tbW9uCisgICAgICAgICBlbHNlIAorICAgICAgICAgIGRpZ2l0PWRpZ2l0LWJbYnBdOyAvLyBhbHNvIGNvbW1vbgorICAgICAgICB9CisgICAgICAgZWxzZSAKKyAgICAgICAgZGlnaXQ9ZGlnaXQrKGJbYnBdKm0pOworICAgICAgfQorICAgICBicC0tOworICAgIH0KKyAgIC8qIHJlc3VsdCBzbyBmYXIgKGRpZ2l0KSBjb3VsZCBiZSAtOTAgdGhyb3VnaCA5OSAqLworICAgaWYgKGRpZ2l0PDEwKSAKKyAgICBpZiAoZGlnaXQ+PTApIAorICAgICB7cXVpY2s6ZG97IC8vIDAtOQorICAgICAgcmViW29wXT0oYnl0ZSlkaWdpdDsKKyAgICAgIGRpZ2l0PTA7IC8vIG5vIGNhcnJ5CisgICAgICBjb250aW51ZSBvcDsKKyAgICAgfXdoaWxlKGZhbHNlKTt9LypxdWljayovCisgICBkcDkwPWRpZ2l0KzkwOworICAgcmViW29wXT1ieXRlZGlnW2RwOTBdOyAvLyB0aGlzIGRpZ2l0CisgICBkaWdpdD1ieXRlY2FyW2RwOTBdOyAvLyBjYXJyeSBvciBib3Jyb3cKKyAgIH0KKyAgfS8qb3AqLworICAKKyAgaWYgKGRpZ2l0PT0wKSAKKyAgIHJldHVybiByZWI7IC8vIG5vIGNhcnJ5CisgIC8vIGZvbGxvd2luZyBsaW5lIHdpbGwgYmVjb21lIGFuIEFzc2VydCwgbGF0ZXIKKyAgLy8gaWYgZGlnaXQ8MCB0aGVuIHNpZ25hbCBBcml0aG1ldGljRXhjZXB0aW9uKCJpbnRlcm5hbC5lcnJvciBbImRpZ2l0Il0iKQorICAKKyAgLyogV2UgaGF2ZSBjYXJyeSAtLSBuZWVkIHRvIG1ha2Ugc3BhY2UgZm9yIHRoZSBleHRyYSBkaWdpdCAqLworICBuZXdhcnI9KGJ5dGVbXSludWxsOworICBpZiAocmV1c2UpIAorICAgaWYgKChtYXhhcnIrMik9PWEubGVuZ3RoKSAKKyAgICBuZXdhcnI9YTsgLy8gT0sgdG8gcmV1c2UgQQorICBpZiAobmV3YXJyPT1udWxsKSAKKyAgIG5ld2Fycj1uZXcgYnl0ZVttYXhhcnIrMl07CisgIG5ld2FyclswXT0oYnl0ZSlkaWdpdDsgLy8gdGhlIGNhcnJpZWQgZGlnaXQgLi4KKyAgLy8gLi4gYW5kIGFsbCB0aGUgcmVzdCBbdXNlIGxvY2FsIGxvb3AgZm9yIHNob3J0IG51bWJlcnNdCisgIGlmIChtYXhhcnI8MTApIAorICAge2ludCAkMjQ9bWF4YXJyKzE7aT0wO2k6Zm9yKDskMjQ+MDskMjQtLSxpKyspeworICAgIG5ld2FycltpKzFdPXJlYltpXTsKKyAgICB9CisgICB9LyppKi8KKyAgZWxzZSAKKyAgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KChqYXZhLmxhbmcuT2JqZWN0KXJlYiwwLChqYXZhLmxhbmcuT2JqZWN0KW5ld2FyciwxLG1heGFycisxKTsKKyAgcmV0dXJuIG5ld2FycjsKKyAgfQorCisgLyogPHNnbWw+IEluaXRpYWxpemVyIGZvciBkaWdpdCBhcnJheSBwcm9wZXJ0aWVzIChsb29rYXNpZGUpLiA8L3NnbWw+CisgICAgUmV0dXJucyB0aGUgZGlnaXQgYXJyYXksIGFuZCBpbml0aWFsaXplcyB0aGUgY2FycnkgYXJyYXkuICovCisgCisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIGRpZ2luaXQoKXsKKyAgYnl0ZSB3b3JrW107CisgIGludCBvcD0wOworICBpbnQgZGlnaXQ9MDsKKyAgd29yaz1uZXcgYnl0ZVsoOTArOTkpKzFdOworICB7b3A9MDtvcDpmb3IoO29wPD0oOTArOTkpO29wKyspeworICAgZGlnaXQ9b3AtOTA7CisgICBpZiAoZGlnaXQ+PTApIAorICAgIHsKKyAgICAgd29ya1tvcF09KGJ5dGUpKGRpZ2l0JTEwKTsKKyAgICAgYnl0ZWNhcltvcF09KGJ5dGUpKGRpZ2l0LzEwKTsgLy8gY2FsY3VsYXRlIGNhcnJ5CisgICAgIGNvbnRpbnVlIG9wOworICAgIH0KKyAgIC8vIGJvcnJvd2luZy4uLgorICAgZGlnaXQ9ZGlnaXQrMTAwOyAvLyB5ZXMsIHRoaXMgaXMgcmlnaHQgW2NvbnNpZGVyIC01MF0KKyAgIHdvcmtbb3BdPShieXRlKShkaWdpdCUxMCk7CisgICBieXRlY2FyW29wXT0oYnl0ZSkoKGRpZ2l0LzEwKS0xMCk7IC8vIGNhbGN1bGF0ZSBib3Jyb3cgW05COiAtIGFmdGVyICVdCisgICB9CisgIH0vKm9wKi8KKyAgcmV0dXJuIHdvcms7CisgIH0KKworIC8qIDxzZ21sPiBDcmVhdGUgYSBjb3B5IG9mIEJpZ0RlY2ltYWwgb2JqZWN0IGZvciBsb2NhbCB1c2UuCisgICAgPHA+VGhpcyBkb2VzIE5PVCBtYWtlIGEgY29weSBvZiB0aGUgbWFudGlzc2EgYXJyYXkuCisgICAgPC9zZ21sPgorICAgIEFyZzEgaXMgdGhlIEJpZ0RlY2ltYWwgdG8gY2xvbmUgKG5vbi1udWxsKQorICAgICovCisgCisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIGNsb25lKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBkZWMpeworICBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgY29weTsKKyAgY29weT1uZXcgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsKCk7CisgIGNvcHkuaW5kPWRlYy5pbmQ7CisgIGNvcHkuZXhwPWRlYy5leHA7CisgIGNvcHkuZm9ybT1kZWMuZm9ybTsKKyAgY29weS5tYW50PWRlYy5tYW50OworICByZXR1cm4gY29weTsKKyAgfQorCisgLyogPHNnbWw+IENoZWNrIG9uZSBvciB0d28gbnVtYmVycyBmb3IgbG9zdCBkaWdpdHMuIDwvc2dtbD4KKyAgICBBcmcxIGlzIFJIUyAob3IgbnVsbCwgaWYgbm9uZSkKKyAgICBBcmcyIGlzIGN1cnJlbnQgRElHSVRTIHNldHRpbmcKKyAgICByZXR1cm5zIHF1aWV0bHkgb3IgdGhyb3dzIGFuIGV4Y2VwdGlvbiAqLworIAorIHByaXZhdGUgdm9pZCBjaGVja2RpZ2l0cyhjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcmhzLGludCBkaWcpeworICBpZiAoZGlnPT0wKSAKKyAgIHJldHVybjsgLy8gZG9uJ3QgY2hlY2sgaWYgZGlnaXRzPTAKKyAgLy8gZmlyc3QgY2hlY2sgbGhzLi4uCisgIGlmICh0aGlzLm1hbnQubGVuZ3RoPmRpZykgCisgICBpZiAoKCEoYWxsemVybyh0aGlzLm1hbnQsZGlnKSkpKSAKKyAgICB0aHJvdyBuZXcgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24oIlRvbyBtYW55IGRpZ2l0czoiKyIgIit0aGlzLnRvU3RyaW5nKCkpOworICBpZiAocmhzPT1udWxsKSAKKyAgIHJldHVybjsgLy8gbW9uYWRpYworICBpZiAocmhzLm1hbnQubGVuZ3RoPmRpZykgCisgICBpZiAoKCEoYWxsemVybyhyaHMubWFudCxkaWcpKSkpIAorICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiVG9vIG1hbnkgZGlnaXRzOiIrIiAiK3Jocy50b1N0cmluZygpKTsKKyAgcmV0dXJuOworICB9CisKKyAvKiA8c2dtbD4gUm91bmQgdG8gc3BlY2lmaWVkIGRpZ2l0cywgaWYgbmVjZXNzYXJ5LiA8L3NnbWw+CisgICAgQXJnMSBpcyByZXF1ZXN0ZWQgTWF0aENvbnRleHQgW3dpdGggbGVuZ3RoIGFuZCByb3VuZGluZyBtb2RlXQorICAgIHJldHVybnMgdGhpcywgZm9yIGNvbnZlbmllbmNlICovCisgCisgcHJpdmF0ZSBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgcm91bmQoY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQpeworICByZXR1cm4gcm91bmQoc2V0LmRpZ2l0cyxzZXQucm91bmRpbmdNb2RlKTsKKyAgfQorCisgLyogPHNnbWw+IFJvdW5kIHRvIHNwZWNpZmllZCBkaWdpdHMsIGlmIG5lY2Vzc2FyeS4KKyAgICBBcmcxIGlzIHJlcXVlc3RlZCBsZW5ndGggKGRpZ2l0cyB0byByb3VuZCB0bykKKyAgICAgICAgICAgIFttYXkgYmUgPD0wIHdoZW4gY2FsbGVkIGZyb20gZm9ybWF0LCBkb2RpdmlkZSwgZXRjLl0KKyAgICBBcmcyIGlzIHJvdW5kaW5nIG1vZGUKKyAgICByZXR1cm5zIHRoaXMsIGZvciBjb252ZW5pZW5jZQorIAorICAgIGluZCBhbmQgZXhwIGFyZSBhZGp1c3RlZCwgYnV0IG5vdCBjbGVhcmVkIGZvciBhIG1hbnRpc3NhIG9mIHplcm8KKyAKKyAgICBUaGUgbGVuZ3RoIG9mIHRoZSBtYW50aXNzYSByZXR1cm5lZCB3aWxsIGJlIEFyZzEsIGV4Y2VwdCB3aGVuIEFyZzEKKyAgICBpcyAwLCBpbiB3aGljaCBjYXNlIHRoZSByZXR1cm5lZCBtYW50aXNzYSBsZW5ndGggd2lsbCBiZSAxLgorICAgIDwvc2dtbD4KKyAgICAqLworIAorIHByaXZhdGUgY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIHJvdW5kKGludCBsZW4saW50IG1vZGUpeworICBpbnQgYWRqdXN0OworICBpbnQgc2lnbjsKKyAgYnl0ZSBvbGRtYW50W107CisgIGJvb2xlYW4gcmV1c2U9ZmFsc2U7CisgIGJ5dGUgZmlyc3Q9MDsKKyAgaW50IGluY3JlbWVudDsKKyAgYnl0ZSBuZXdtYW50W109bnVsbDsKKyAgYWRqdXN0PW1hbnQubGVuZ3RoLWxlbjsKKyAgaWYgKGFkanVzdDw9MCkgCisgICByZXR1cm4gdGhpczsgLy8gbm93dCB0byBkbworICAKKyAgZXhwPWV4cCthZGp1c3Q7IC8vIGV4cG9uZW50IG9mIHJlc3VsdAorICBzaWduPShpbnQpaW5kOyAvLyBzYXZlIFthc3N1bWVzIC0xLCAwLCAxXQorICBvbGRtYW50PW1hbnQ7IC8vIHNhdmUKKyAgaWYgKGxlbj4wKSAKKyAgIHsKKyAgICAvLyByZW1vdmUgdGhlIHVud2FudGVkIGRpZ2l0cworICAgIG1hbnQ9bmV3IGJ5dGVbbGVuXTsKKyAgICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSgoamF2YS5sYW5nLk9iamVjdClvbGRtYW50LDAsKGphdmEubGFuZy5PYmplY3QpbWFudCwwLGxlbik7CisgICAgcmV1c2U9dHJ1ZTsgLy8gY2FuIHJldXNlIG1hbnRpc3NhCisgICAgZmlyc3Q9b2xkbWFudFtsZW5dOyAvLyBmaXJzdCBvZiBkaXNjYXJkZWQgZGlnaXRzCisgICB9CisgIGVsc2UgCisgICB7LyogbGVuPD0wICovCisgICAgbWFudD1aRVJPLm1hbnQ7CisgICAgaW5kPWlzemVybzsKKyAgICByZXVzZT1mYWxzZTsgLy8gY2Fubm90IHJldXNlIG1hbnRpc3NhCisgICAgaWYgKGxlbj09MCkgCisgICAgIGZpcnN0PW9sZG1hbnRbMF07CisgICAgZWxzZSAKKyAgICAgZmlyc3Q9KGJ5dGUpMDsgLy8gW3ZpcnR1YWwgZGlnaXRdCisgICB9CisgIAorICAvLyBkZWNpZGUgcm91bmRpbmcgYWRqdXN0bWVudCBkZXBlbmRpbmcgb24gbW9kZSwgc2lnbiwgYW5kIGRpc2NhcmRlZCBkaWdpdHMKKyAgaW5jcmVtZW50PTA7IC8vIGJ1bXBlcgorICB7bW9kZXM6ZG97LypzZWxlY3QqLworICBpZiAobW9kZT09Uk9VTkRfSEFMRl9VUCkKKyAgIHsgLy8gZGVmYXVsdCBmaXJzdCBbbW9zdCBjb21tb25dCisgICAgaWYgKGZpcnN0Pj01KSAKKyAgICAgaW5jcmVtZW50PXNpZ247CisgICB9CisgIGVsc2UgaWYgKG1vZGU9PVJPVU5EX1VOTkVDRVNTQVJZKQorICAgeyAvLyBkZWZhdWx0IGZvciBzZXRTY2FsZSgpCisgICAgLy8gZGlzY2FyZGluZyBhbnkgbm9uLXplcm8gZGlnaXRzIGlzIGFuIGVycm9yCisgICAgaWYgKCghKGFsbHplcm8ob2xkbWFudCxsZW4pKSkpIAorICAgICB0aHJvdyBuZXcgamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24oIlJvdW5kaW5nIG5lY2Vzc2FyeSIpOworICAgfQorICBlbHNlIGlmIChtb2RlPT1ST1VORF9IQUxGX0RPV04pCisgICB7IC8vIDAuNTAwMCBnb2VzIGRvd24KKyAgICBpZiAoZmlyc3Q+NSkgCisgICAgIGluY3JlbWVudD1zaWduOworICAgIGVsc2UgCisgICAgIGlmIChmaXJzdD09NSkgCisgICAgICBpZiAoKCEoYWxsemVybyhvbGRtYW50LGxlbisxKSkpKSAKKyAgICAgICBpbmNyZW1lbnQ9c2lnbjsKKyAgIH0KKyAgZWxzZSBpZiAobW9kZT09Uk9VTkRfSEFMRl9FVkVOKQorICAgeyAvLyAwLjUwMDAgZ29lcyBkb3duIGlmIGxlZnQgZGlnaXQgZXZlbgorICAgIGlmIChmaXJzdD41KSAKKyAgICAgaW5jcmVtZW50PXNpZ247CisgICAgZWxzZSAKKyAgICAgaWYgKGZpcnN0PT01KSAKKyAgICAgIHsKKyAgICAgICBpZiAoKCEoYWxsemVybyhvbGRtYW50LGxlbisxKSkpKSAKKyAgICAgICAgaW5jcmVtZW50PXNpZ247CisgICAgICAgZWxzZSAvKiAwLjUwMDAgKi8KKyAgICAgICAgaWYgKCgoKG1hbnRbbWFudC5sZW5ndGgtMV0pJTIpKT09MSkgCisgICAgICAgICBpbmNyZW1lbnQ9c2lnbjsKKyAgICAgIH0KKyAgIH0KKyAgZWxzZSBpZiAobW9kZT09Uk9VTkRfRE9XTikKKyAgIDsgLy8gbmV2ZXIgaW5jcmVtZW50CisgIGVsc2UgaWYgKG1vZGU9PVJPVU5EX1VQKQorICAgeyAvLyBpbmNyZW1lbnQgaWYgZGlzY2FyZGVkIG5vbi16ZXJvCisgICAgaWYgKCghKGFsbHplcm8ob2xkbWFudCxsZW4pKSkpIAorICAgICBpbmNyZW1lbnQ9c2lnbjsKKyAgIH0KKyAgZWxzZSBpZiAobW9kZT09Uk9VTkRfQ0VJTElORykKKyAgIHsgLy8gbW9yZSBwb3NpdGl2ZQorICAgIGlmIChzaWduPjApIAorICAgICBpZiAoKCEoYWxsemVybyhvbGRtYW50LGxlbikpKSkgCisgICAgICBpbmNyZW1lbnQ9c2lnbjsKKyAgIH0KKyAgZWxzZSBpZiAobW9kZT09Uk9VTkRfRkxPT1IpCisgICB7IC8vIG1vcmUgbmVnYXRpdmUKKyAgICBpZiAoc2lnbjwwKSAKKyAgICAgaWYgKCghKGFsbHplcm8ob2xkbWFudCxsZW4pKSkpIAorICAgICAgaW5jcmVtZW50PXNpZ247CisgICB9CisgIGVsc2V7CisgICB0aHJvdyBuZXcgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIHJvdW5kIHZhbHVlOiIrIiAiK21vZGUpOworICB9CisgIH13aGlsZShmYWxzZSk7fS8qbW9kZXMqLworICAKKyAgaWYgKGluY3JlbWVudCE9MCkgCisgICB7YnVtcDpkb3sKKyAgICBpZiAoaW5kPT1pc3plcm8pIAorICAgICB7CisgICAgICAvLyB3ZSBtdXN0IG5vdCBzdWJ0cmFjdCBmcm9tIDAsIGJ1dCByZXN1bHQgaXMgdHJpdmlhbCBhbnl3YXkKKyAgICAgIG1hbnQ9T05FLm1hbnQ7CisgICAgICBpbmQ9KGJ5dGUpaW5jcmVtZW50OworICAgICB9CisgICAgZWxzZSAKKyAgICAgeworICAgICAgLy8gbWFudGlzc2EgaXMgbm9uLTA7IHdlIGNhbiBzYWZlbHkgYWRkIG9yIHN1YnRyYWN0IDEKKyAgICAgIGlmIChpbmQ9PWlzbmVnKSAKKyAgICAgICBpbmNyZW1lbnQ9KGludCktaW5jcmVtZW50OworICAgICAgbmV3bWFudD1ieXRlYWRkc3ViKG1hbnQsbWFudC5sZW5ndGgsT05FLm1hbnQsMSxpbmNyZW1lbnQscmV1c2UpOworICAgICAgaWYgKG5ld21hbnQubGVuZ3RoPm1hbnQubGVuZ3RoKSAKKyAgICAgICB7IC8vIGhhZCBhIGNhcnJ5CisgICAgICAgIC8vIGRyb3AgcmlnaHRtb3N0IGRpZ2l0IGFuZCByYWlzZSBleHBvbmVudAorICAgICAgICBleHArKzsKKyAgICAgICAgLy8gbWFudCBpcyBhbHJlYWR5IHRoZSBjb3JyZWN0IGxlbmd0aAorICAgICAgICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSgoamF2YS5sYW5nLk9iamVjdCluZXdtYW50LDAsKGphdmEubGFuZy5PYmplY3QpbWFudCwwLG1hbnQubGVuZ3RoKTsKKyAgICAgICB9CisgICAgICBlbHNlIAorICAgICAgIG1hbnQ9bmV3bWFudDsKKyAgICAgfQorICAgfXdoaWxlKGZhbHNlKTt9LypidW1wKi8KKyAgLy8gcm91bmRpbmcgY2FuIGluY3JlYXNlIGV4cG9uZW50IHNpZ25pZmljYW50bHkKKyAgaWYgKGV4cD5NYXhFeHApIAorICAgdGhyb3cgbmV3IGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uKCJFeHBvbmVudCBPdmVyZmxvdzoiKyIgIitleHApOworICByZXR1cm4gdGhpczsKKyAgfQorCisgLyogPHNnbWw+IFRlc3QgaWYgcmlnaHRtb3N0IGRpZ2l0cyBhcmUgYWxsIDAuCisgICAgQXJnMSBpcyBhIG1hbnRpc3NhIGFycmF5IHRvIHRlc3QKKyAgICBBcmcyIGlzIHRoZSBvZmZzZXQgb2YgZmlyc3QgZGlnaXQgdG8gY2hlY2sKKyAgICAgICAgICAgIFttYXkgYmUgbmVnYXRpdmU7IGlmIHNvLCBkaWdpdHMgdG8gbGVmdCBhcmUgMCdzXQorICAgIHJldHVybnMgMSBpZiBhbGwgdGhlIGRpZ2l0cyBzdGFydGluZyBhdCBBcmcyIGFyZSAwCisgCisgICAgQXJnMiBtYXkgYmUgYmV5b25kIGFycmF5IGJvdW5kcywgaW4gd2hpY2ggY2FzZSAxIGlzIHJldHVybmVkCisgICAgPC9zZ21sPiAqLworIAorIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gYWxsemVybyhieXRlIGFycmF5W10saW50IHN0YXJ0KXsKKyAgaW50IGk9MDsKKyAgaWYgKHN0YXJ0PDApIAorICAgc3RhcnQ9MDsKKyAge2ludCAkMjU9YXJyYXkubGVuZ3RoLTE7aT1zdGFydDtpOmZvcig7aTw9JDI1O2krKyl7CisgICBpZiAoYXJyYXlbaV0hPTApIAorICAgIHJldHVybiBmYWxzZTsKKyAgIH0KKyAgfS8qaSovCisgIHJldHVybiB0cnVlOworICB9CisKKyAvKiA8c2dtbD4gQ2Fycnkgb3V0IGZpbmFsIGNoZWNrcyBhbmQgY2Fub25pY2FsaXphdGlvbgorICAgIDxwPgorICAgIFRoaXMgZmluaXNoZXMgb2ZmIHRoZSBjdXJyZW50IG51bWJlciBieToKKyAgICAgIDEuIFJvdW5kaW5nIGlmIG5lY2Vzc2FyeSAoTkI6IGxlbmd0aCBpbmNsdWRlcyBsZWFkaW5nIHplcm9zKQorICAgICAgMi4gU3RyaXBwaW5nIHRyYWlsaW5nIHplcm9zIChpZiByZXF1ZXN0ZWQgYW5kIFxQTEFJTikKKyAgICAgIDMuIFN0cmlwcGluZyBsZWFkaW5nIHplcm9zIChhbHdheXMpCisgICAgICA0LiBTZWxlY3RpbmcgZXhwb25lbnRpYWwgbm90YXRpb24gKGlmIHJlcXVpcmVkKQorICAgICAgNS4gQ29udmVydGluZyBhIHplcm8gcmVzdWx0IHRvIGp1c3QgJzAnIChpZiBcUExBSU4pCisgICAgSW4gcHJhY3RpY2UsIHRoZXNlIG9wZXJhdGlvbnMgb3ZlcmxhcCBhbmQgc2hhcmUgY29kZS4KKyAgICBJdCBhbHdheXMgc2V0cyBmb3JtLgorICAgIDwvc2dtbD4KKyAgICBBcmcxIGlzIHJlcXVlc3RlZCBNYXRoQ29udGV4dCAobGVuZ3RoIHRvIHJvdW5kIHRvLCB0cmlnZ2VyLCBhbmQgRk9STSkKKyAgICBBcmcyIGlzIDEgaWYgdHJhaWxpbmcgaW5zaWduaWZpY2FudCB6ZXJvcyBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlcgorICAgICAgICAgcm91bmQgKGZvciBkaXZpc2lvbiwgZXRjLiksIHByb3ZpZGVkIHRoYXQgc2V0LmZvcm0gaXNuJ3QgUExBSU4uCisgICByZXR1cm5zIHRoaXMsIGZvciBjb252ZW5pZW5jZQorICAgKi8KKyAKKyBwcml2YXRlIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBmaW5pc2goY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dCBzZXQsYm9vbGVhbiBzdHJpcCl7CisgIGludCBkPTA7CisgIGludCBpPTA7CisgIGJ5dGUgbmV3bWFudFtdPW51bGw7CisgIGludCBtYWc9MDsKKyAgaW50IHNpZz0wOworICAvKiBSb3VuZCBpZiBtYW50aXNzYSB0b28gbG9uZyBhbmQgZGlnaXRzIHJlcXVlc3RlZCAqLworICBpZiAoc2V0LmRpZ2l0cyE9MCkgCisgICBpZiAodGhpcy5tYW50Lmxlbmd0aD5zZXQuZGlnaXRzKSAKKyAgICB0aGlzLnJvdW5kKHNldCk7CisgIAorICAvKiBJZiBzdHJpcCByZXF1ZXN0ZWQgKGFuZCBzdGFuZGFyZCBmb3JtYXR0aW5nKSwgcmVtb3ZlCisgICAgIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MuICovCisgIGlmIChzdHJpcCkgCisgICBpZiAoc2V0LmZvcm0hPWNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQuUExBSU4pIAorICAgIHsKKyAgICAgZD10aGlzLm1hbnQubGVuZ3RoOworICAgICAvKiBzZWUgaWYgd2UgbmVlZCB0byBkcm9wIGFueSB0cmFpbGluZyB6ZXJvcyAqLworICAgICB7aT1kLTE7aTpmb3IoO2k+PTE7aS0tKXsKKyAgICAgIGlmICh0aGlzLm1hbnRbaV0hPTApIAorICAgICAgIGJyZWFrIGk7CisgICAgICBkLS07CisgICAgICBleHArKzsKKyAgICAgIH0KKyAgICAgfS8qaSovCisgICAgIGlmIChkPHRoaXMubWFudC5sZW5ndGgpIAorICAgICAgey8qIG5lZWQgdG8gcmVkdWNlICovCisgICAgICAgbmV3bWFudD1uZXcgYnl0ZVtkXTsKKyAgICAgICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSgoamF2YS5sYW5nLk9iamVjdCl0aGlzLm1hbnQsMCwoamF2YS5sYW5nLk9iamVjdCluZXdtYW50LDAsZCk7CisgICAgICAgdGhpcy5tYW50PW5ld21hbnQ7CisgICAgICB9CisgICAgfQorICAKKyAgZm9ybT0oYnl0ZSljb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOOyAvLyBwcmVzZXQKKyAgCisgIC8qIE5vdyBjaGVjayBmb3IgbGVhZGluZy0gYW5kIGFsbC0gemVyb3MgaW4gbWFudGlzc2EgKi8KKyAge2ludCAkMjY9dGhpcy5tYW50Lmxlbmd0aDtpPTA7aTpmb3IoOyQyNj4wOyQyNi0tLGkrKyl7CisgICBpZiAodGhpcy5tYW50W2ldIT0wKSAKKyAgICB7CisgICAgIC8vIG5vbi0wIHJlc3VsdDsgaW5kIHdpbGwgYmUgY29ycmVjdAorICAgICAvLyByZW1vdmUgbGVhZGluZyB6ZXJvcyBbZS5nLiwgYWZ0ZXIgc3VidHJhY3RdCisgICAgIGlmIChpPjApIAorICAgICAge2RlbGVhZDpkb3sKKyAgICAgICBuZXdtYW50PW5ldyBieXRlW3RoaXMubWFudC5sZW5ndGgtaV07CisgICAgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkoKGphdmEubGFuZy5PYmplY3QpdGhpcy5tYW50LGksKGphdmEubGFuZy5PYmplY3QpbmV3bWFudCwwLHRoaXMubWFudC5sZW5ndGgtaSk7CisgICAgICAgdGhpcy5tYW50PW5ld21hbnQ7CisgICAgICB9d2hpbGUoZmFsc2UpO30vKmRlbGVhZCovCisgICAgIC8vIG5vdyBkZXRlcm1pbmUgZm9ybSBpZiBub3QgUExBSU4KKyAgICAgbWFnPWV4cCttYW50Lmxlbmd0aDsKKyAgICAgaWYgKG1hZz4wKSAKKyAgICAgIHsgLy8gbW9zdCBjb21tb24gcGF0aAorICAgICAgIGlmIChtYWc+c2V0LmRpZ2l0cykgCisgICAgICAgIGlmIChzZXQuZGlnaXRzIT0wKSAKKyAgICAgICAgIGZvcm09KGJ5dGUpc2V0LmZvcm07CisgICAgICAgaWYgKChtYWctMSk8PU1heEV4cCkgCisgICAgICAgIHJldHVybiB0aGlzOyAvLyBubyBvdmVyZmxvdzsgcXVpY2sgcmV0dXJuCisgICAgICB9CisgICAgIGVsc2UgCisgICAgICBpZiAobWFnPCgtNSkpIAorICAgICAgIGZvcm09KGJ5dGUpc2V0LmZvcm07CisgICAgIC8qIGNoZWNrIGZvciBvdmVyZmxvdyAqLworICAgICBtYWctLTsKKyAgICAgaWYgKChtYWc8TWluRXhwKXwobWFnPk1heEV4cCkpIAorICAgICAge292ZXJmbG93OmRveworICAgICAgIC8vIHBvc3NpYmxlIHJlcHJpZXZlIGlmIGZvcm0gaXMgZW5naW5lZXJpbmcKKyAgICAgICBpZiAoZm9ybT09Y29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dC5FTkdJTkVFUklORykgCisgICAgICAgIHsKKyAgICAgICAgIHNpZz1tYWclMzsgLy8gbGVmdG92ZXIKKyAgICAgICAgIGlmIChzaWc8MCkgCisgICAgICAgICAgc2lnPTMrc2lnOyAvLyBuZWdhdGl2ZSBleHBvbmVudAorICAgICAgICAgbWFnPW1hZy1zaWc7IC8vIGV4cG9uZW50IHRvIHVzZQorICAgICAgICAgLy8gMTk5OS4wNi4yOTogc2Vjb25kIHRlc3QgaGVyZSBtdXN0IGJlIE1heEV4cAorICAgICAgICAgaWYgKG1hZz49TWluRXhwKSAKKyAgICAgICAgICBpZiAobWFnPD1NYXhFeHApIAorICAgICAgICAgICBicmVhayBvdmVyZmxvdzsKKyAgICAgICAgfQorICAgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbigiRXhwb25lbnQgT3ZlcmZsb3c6IisiICIrbWFnKTsKKyAgICAgIH13aGlsZShmYWxzZSk7fS8qb3ZlcmZsb3cqLworICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICB9CisgIH0vKmkqLworICAKKyAgLy8gRHJvcCB0aHJvdWdoIHRvIGhlcmUgb25seSBpZiBtYW50aXNzYSBpcyBhbGwgemVyb3MKKyAgaW5kPWlzemVybzsKKyAgey8qc2VsZWN0Ki8KKyAgaWYgKHNldC5mb3JtIT1jb20uaWJtLmljdS5tYXRoLk1hdGhDb250ZXh0LlBMQUlOKQorICAgZXhwPTA7IC8vIHN0YW5kYXJkIHJlc3VsdDsgZ28gdG8gJzAnCisgIGVsc2UgaWYgKGV4cD4wKQorICAgZXhwPTA7IC8vICt2ZSBleHBvbmVudCBhbHNvIGdvZXMgdG8gJzAnCisgIGVsc2V7CisgICAvLyBhIHBsYWluIG51bWJlciB3aXRoIC12ZSBleHBvbmVudDsgcHJlc2VydmUgYW5kIGNoZWNrIGV4cG9uZW50CisgICBpZiAoZXhwPE1pbkV4cCkgCisgICAgdGhyb3cgbmV3IGphdmEubGFuZy5Bcml0aG1ldGljRXhjZXB0aW9uKCJFeHBvbmVudCBPdmVyZmxvdzoiKyIgIitleHApOworICB9CisgIH0KKyAgbWFudD1aRVJPLm1hbnQ7IC8vIGNhbm9uaWNhbCBtYW50aXNzYQorICByZXR1cm4gdGhpczsKKyAgfQorIH0KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS9tYXRoL01hdGhDb250ZXh0LmphdmEgYi9zcmMvY29tL2libS9pY3UvbWF0aC9NYXRoQ29udGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5MTg0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvbWF0aC9NYXRoQ29udGV4dC5qYXZhCkBAIC0wLDAgKzEsNjAzIEBACisvKiBHZW5lcmF0ZWQgZnJvbSAnTWF0aENvbnRleHQubnJ4JyA4IFNlcCAyMDAwIDExOjA3OjQ4IFt2Mi4wMF0gKi8KKy8qIE9wdGlvbnM6IEJpbmFyeSBDb21tZW50cyBDcm9zc3JlZiBGb3JtYXQgSmF2YSBMb2dvIFN0cmljdGFyZ3MgU3RyaWN0Y2FzZSBUcmFjZTIgVmVyYm9zZTMgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UubWF0aDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNYXRoQ29udGV4dCAtLSBNYXRoIGNvbnRleHQgc2V0dGluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMTk5NywgMjAwMC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgVGhlIE1hdGhDb250ZXh0IG9iamVjdCBlbmNhcHN1bGF0ZXMgdGhlIHNldHRpbmdzIHVzZWQgYnkgdGhlICAgICAqLworLyogICBCaWdEZWNpbWFsIGNsYXNzOyBpdCBjb3VsZCBhbHNvIGJlIHVzZWQgYnkgb3RoZXIgYXJpdGhtZXRpY3MuICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE5vdGVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxLiBUaGUgcHJvcGVydGllcyBhcmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgb24gY29uc3RydWN0aW9uLCBzbyAgICAgKi8KKy8qICAgIHRoZSBCaWdEZWNpbWFsIGNsYXNzIG1heSBhc3N1bWUgdGhhdCB0aGV5IGFyZSBjb3JyZWN0LiAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBBdXRob3I6ICAgIE1pa2UgQ293bGlzaGF3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTcuMDkuMDMgSW5pdGlhbCB2ZXJzaW9uIChlZGl0ZWQgZnJvbSBuZXRyZXh4LmxhbmcuUmV4eFNldCkgICAgICAqLworLyogMTk5Ny4wOS4xMiBBZGQgbG9zdERpZ2l0cyBwcm9wZXJ0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk4LjA1LjAyIE1ha2UgdGhlIGNsYXNzIGltbXV0YWJsZSBhbmQgZmluYWw7IGRyb3Agc2V0IG1ldGhvZHMgICAgKi8KKy8qIDE5OTguMDYuMDUgQWRkIFJvdW5kIChyb3VuZGluZyBtb2RlcykgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgICAqLworLyogMTk5OC4wNi4yNSBSZW5hbWUgZnJvbSBEZWNpbWFsQ29udGV4dDsgYWxsb3cgZGlnaXRzPTAgICAgICAgICAgICAgICovCisvKiAxOTk4LjEwLjEyIGNoYW5nZSB0byBjb20uaWJtLmljdS5tYXRoIHBhY2thZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAxOTk5LjAyLjA2IGFkZCBqYXZhZG9jIGNvbW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDE5OTkuMDMuMDUgc2ltcGxpZnk7IGNoYW5nZXMgZnJvbSBkaXNjdXNzaW9uIHdpdGggSi4gQmxvY2ggICAgICAgICAqLworLyogMTk5OS4wMy4xMyAxLjAwIHJlbGVhc2UgdG8gSUJNIENlbnRyZSBmb3IgSmF2YSBUZWNobm9sb2d5ICAgICAgICAgICovCisvKiAxOTk5LjA3LjEwIDEuMDQgZmxhZyBzZXJpYWxpemF0aW9uIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDIwMDAuMDEuMDEgMS4wNiBjb3B5cmlnaHQgdXBkYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworCisKKy8qKgorICogVGhlIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBpbW11dGFibGUgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZQorICogc2V0dGluZ3MgdW5kZXJzdG9vZCBieSB0aGUgb3BlcmF0b3IgbWV0aG9kcyBvZiB0aGUge0BsaW5rIEJpZ0RlY2ltYWx9CisgKiBjbGFzcyAoYW5kIHBvdGVudGlhbGx5IG90aGVyIGNsYXNzZXMpLiAgT3BlcmF0b3IgbWV0aG9kcyBhcmUgdGhvc2UKKyAqIHRoYXQgZWZmZWN0IGFuIG9wZXJhdGlvbiBvbiBhIG51bWJlciBvciBhIHBhaXIgb2YgbnVtYmVycy4KKyAqIDxwPgorICogVGhlIHNldHRpbmdzLCB3aGljaCBhcmUgbm90IGJhc2UtZGVwZW5kZW50LCBjb21wcmlzZToKKyAqIDxvbD4KKyAqIDxsaT48Y29kZT5kaWdpdHM8L2NvZGU+OgorICogdGhlIG51bWJlciBvZiBkaWdpdHMgKHByZWNpc2lvbikgdG8gYmUgdXNlZCBmb3IgYW4gb3BlcmF0aW9uCisgKiA8bGk+PGNvZGU+Zm9ybTwvY29kZT46CisgKiB0aGUgZm9ybSBvZiBhbnkgZXhwb25lbnQgdGhhdCByZXN1bHRzIGZyb20gdGhlIG9wZXJhdGlvbgorICogPGxpPjxjb2RlPmxvc3REaWdpdHM8L2NvZGU+OgorICogd2hldGhlciBjaGVja2luZyBmb3IgbG9zdCBkaWdpdHMgaXMgZW5hYmxlZAorICogPGxpPjxjb2RlPnJvdW5kaW5nTW9kZTwvY29kZT46CisgKiB0aGUgYWxnb3JpdGhtIHRvIGJlIHVzZWQgZm9yIHJvdW5kaW5nLgorICogPC9vbD4KKyAqIDxwPgorICogV2hlbiBwcm92aWRlZCwgYSA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gb2JqZWN0IHN1cHBsaWVzIHRoZQorICogc2V0dGluZ3MgZm9yIGFuIG9wZXJhdGlvbiBkaXJlY3RseS4KKyAqIDxwPgorICogV2hlbiA8Y29kZT5NYXRoQ29udGV4dC5ERUZBVUxUPC9jb2RlPiBpcyBwcm92aWRlZCBmb3IgYQorICogPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IHBhcmFtZXRlciB0aGVuIHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSB1c2VkCisgKiAoPGNvZGU+OSwgU0NJRU5USUZJQywgZmFsc2UsIFJPVU5EX0hBTEZfVVA8L2NvZGU+KS4KKyAqIDxwPgorICogSW4gdGhlIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IGNsYXNzLCBhbGwgbWV0aG9kcyB3aGljaCBhY2NlcHQgYQorICogPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IG9iamVjdCBkZWZhdWx0cykgYWxzbyBoYXZlIGEgdmVyc2lvbiBvZiB0aGUKKyAqIG1ldGhvZCB3aGljaCBkb2VzIG5vdCBhY2NlcHQgYSBNYXRoQ29udGV4dCBwYXJhbWV0ZXIuICBUaGVzZSB2ZXJzaW9ucworICogY2Fycnkgb3V0IHVubGltaXRlZCBwcmVjaXNpb24gZml4ZWQgcG9pbnQgYXJpdGhtZXRpYyAoYXMgdGhvdWdoIHRoZQorICogc2V0dGluZ3Mgd2VyZSAoPGNvZGU+MCwgUExBSU4sIGZhbHNlLCBST1VORF9IQUxGX1VQPC9jb2RlPikuCisgKiA8cD4KKyAqIFRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgYXJlIHNoYXJlZCB3aXRoIGRlZmF1bHQgYWNjZXNzIChzbyB0aGV5IGFyZQorICogZGlyZWN0bHkgYWNjZXNzaWJsZSB0byB0aGUgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gY2xhc3MpLCBidXQgbXVzdAorICogbmV2ZXIgYmUgY2hhbmdlZC4KKyAqIDxwPgorICogVGhlIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYW5kIHZhbHVlcyBhcyB0aGUKKyAqIGNvbnN0YW50cyBvZiB0aGUgc2FtZSBuYW1lIGluIDxjb2RlPmphdmEubWF0aC5CaWdEZWNpbWFsPC9jb2RlPiwgdG8KKyAqIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mCisgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4KKyAqCisgKiBAc2VlICAgICBCaWdEZWNpbWFsCisgKiBAYXV0aG9yICBNaWtlIENvd2xpc2hhdworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KKworcHVibGljIGZpbmFsIGNsYXNzIE1hdGhDb250ZXh0IGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CisgcHJpdmF0ZSBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyAkMD0iTWF0aENvbnRleHQubnJ4IjsKKyAKKyAvKiAtLS0tLSBQcm9wZXJ0aWVzIC0tLS0tICovCisgLyogcHJvcGVydGllcyBwdWJsaWMgY29uc3RhbnQgKi8KKyAvKioKKyAgKiBQbGFpbiAoZml4ZWQgcG9pbnQpIG5vdGF0aW9uLCB3aXRob3V0IGFueSBleHBvbmVudC4KKyAgKiBVc2VkIGFzIGEgc2V0dGluZyB0byBjb250cm9sIHRoZSBmb3JtIG9mIHRoZSByZXN1bHQgb2YgYQorICAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9wZXJhdGlvbi4KKyAgKiBBIHplcm8gcmVzdWx0IGluIHBsYWluIGZvcm0gbWF5IGhhdmUgYSBkZWNpbWFsIHBhcnQgb2Ygb25lIG9yCisgICogbW9yZSB6ZXJvcy4KKyAgKgorICAqIEBzZWUgI0VOR0lORUVSSU5HCisgICogQHNlZSAjU0NJRU5USUZJQworICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMQUlOPTA7IC8vIFtubyBleHBvbmVudF0KKyAKKyAvKioKKyAgKiBTdGFuZGFyZCBmbG9hdGluZyBwb2ludCBub3RhdGlvbiAod2l0aCBzY2llbnRpZmljIGV4cG9uZW50aWFsCisgICogZm9ybWF0LCB3aGVyZSB0aGVyZSBpcyBvbmUgZGlnaXQgYmVmb3JlIGFueSBkZWNpbWFsIHBvaW50KS4KKyAgKiBVc2VkIGFzIGEgc2V0dGluZyB0byBjb250cm9sIHRoZSBmb3JtIG9mIHRoZSByZXN1bHQgb2YgYQorICAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9wZXJhdGlvbi4KKyAgKiBBIHplcm8gcmVzdWx0IGluIHBsYWluIGZvcm0gbWF5IGhhdmUgYSBkZWNpbWFsIHBhcnQgb2Ygb25lIG9yCisgICogbW9yZSB6ZXJvcy4KKyAgKgorICAqIEBzZWUgI0VOR0lORUVSSU5HCisgICogQHNlZSAjUExBSU4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ0lFTlRJRklDPTE7IC8vIDEgZGlnaXQgYmVmb3JlIC4KKyAKKyAvKioKKyAgKiBTdGFuZGFyZCBmbG9hdGluZyBwb2ludCBub3RhdGlvbiAod2l0aCBlbmdpbmVlcmluZyBleHBvbmVudGlhbAorICAqIGZvcm1hdCwgd2hlcmUgdGhlIHBvd2VyIG9mIHRlbiBpcyBhIG11bHRpcGxlIG9mIDMpLgorICAqIFVzZWQgYXMgYSBzZXR0aW5nIHRvIGNvbnRyb2wgdGhlIGZvcm0gb2YgdGhlIHJlc3VsdCBvZiBhCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb3BlcmF0aW9uLgorICAqIEEgemVybyByZXN1bHQgaW4gcGxhaW4gZm9ybSBtYXkgaGF2ZSBhIGRlY2ltYWwgcGFydCBvZiBvbmUgb3IKKyAgKiBtb3JlIHplcm9zLgorICAqCisgICogQHNlZSAjUExBSU4KKyAgKiBAc2VlICNTQ0lFTlRJRklDCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5HSU5FRVJJTkc9MjsgLy8gMS0zIGRpZ2l0cyBiZWZvcmUgLgorIAorIC8vIFRoZSByb3VuZGluZyBtb2RlcyBtYXRjaCB0aGUgb3JpZ2luYWwgQmlnRGVjaW1hbCBjbGFzcyB2YWx1ZXMKKyAvKioKKyAgKiBSb3VuZGluZyBtb2RlIHRvIHJvdW5kIHRvIGEgbW9yZSBwb3NpdGl2ZSBudW1iZXIuCisgICogVXNlZCBhcyBhIHNldHRpbmcgdG8gY29udHJvbCB0aGUgcm91bmRpbmcgbW9kZSB1c2VkIGR1cmluZyBhCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb3BlcmF0aW9uLgorICAqIDxwPgorICAqIElmIGFueSBvZiB0aGUgZGlzY2FyZGVkIGRpZ2l0cyBhcmUgbm9uLXplcm8gdGhlbiB0aGUgcmVzdWx0CisgICogc2hvdWxkIGJlIHJvdW5kZWQgdG93YXJkcyB0aGUgbmV4dCBtb3JlIHBvc2l0aXZlIGRpZ2l0LgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPVU5EX0NFSUxJTkc9MjsKKyAKKyAvKioKKyAgKiBSb3VuZGluZyBtb2RlIHRvIHJvdW5kIHRvd2FyZHMgemVyby4KKyAgKiBVc2VkIGFzIGEgc2V0dGluZyB0byBjb250cm9sIHRoZSByb3VuZGluZyBtb2RlIHVzZWQgZHVyaW5nIGEKKyAgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBvcGVyYXRpb24uCisgICogPHA+CisgICogQWxsIGRpc2NhcmRlZCBkaWdpdHMgYXJlIGlnbm9yZWQgKHRydW5jYXRlZCkuICBUaGUgcmVzdWx0IGlzCisgICogbmVpdGhlciBpbmNyZW1lbnRlZCBub3IgZGVjcmVtZW50ZWQuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRfRE9XTj0xOworIAorIC8qKgorICAqIFJvdW5kaW5nIG1vZGUgdG8gcm91bmQgdG8gYSBtb3JlIG5lZ2F0aXZlIG51bWJlci4KKyAgKiBVc2VkIGFzIGEgc2V0dGluZyB0byBjb250cm9sIHRoZSByb3VuZGluZyBtb2RlIHVzZWQgZHVyaW5nIGEKKyAgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiBvcGVyYXRpb24uCisgICogPHA+CisgICogSWYgYW55IG9mIHRoZSBkaXNjYXJkZWQgZGlnaXRzIGFyZSBub24temVybyB0aGVuIHRoZSByZXN1bHQKKyAgKiBzaG91bGQgYmUgcm91bmRlZCB0b3dhcmRzIHRoZSBuZXh0IG1vcmUgbmVnYXRpdmUgZGlnaXQuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRfRkxPT1I9MzsKKyAKKyAvKioKKyAgKiBSb3VuZGluZyBtb2RlIHRvIHJvdW5kIHRvIG5lYXJlc3QgbmVpZ2hib3IsIHdoZXJlIGFuIGVxdWlkaXN0YW50CisgICogdmFsdWUgaXMgcm91bmRlZCBkb3duLgorICAqIFVzZWQgYXMgYSBzZXR0aW5nIHRvIGNvbnRyb2wgdGhlIHJvdW5kaW5nIG1vZGUgdXNlZCBkdXJpbmcgYQorICAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9wZXJhdGlvbi4KKyAgKiA8cD4KKyAgKiBJZiB0aGUgZGlzY2FyZGVkIGRpZ2l0cyByZXByZXNlbnQgZ3JlYXRlciB0aGFuIGhhbGYgKDAuNSB0aW1lcykKKyAgKiB0aGUgdmFsdWUgb2YgYSBvbmUgaW4gdGhlIG5leHQgcG9zaXRpb24gdGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZQorICAqIHJvdW5kZWQgdXAgKGF3YXkgZnJvbSB6ZXJvKS4gIE90aGVyd2lzZSB0aGUgZGlzY2FyZGVkIGRpZ2l0cyBhcmUKKyAgKiBpZ25vcmVkLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPVU5EX0hBTEZfRE9XTj01OworIAorIC8qKgorICAqIFJvdW5kaW5nIG1vZGUgdG8gcm91bmQgdG8gbmVhcmVzdCBuZWlnaGJvciwgd2hlcmUgYW4gZXF1aWRpc3RhbnQKKyAgKiB2YWx1ZSBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGV2ZW4gbmVpZ2hib3IuCisgICogVXNlZCBhcyBhIHNldHRpbmcgdG8gY29udHJvbCB0aGUgcm91bmRpbmcgbW9kZSB1c2VkIGR1cmluZyBhCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb3BlcmF0aW9uLgorICAqIDxwPgorICAqIElmIHRoZSBkaXNjYXJkZWQgZGlnaXRzIHJlcHJlc2VudCBncmVhdGVyIHRoYW4gaGFsZiAoMC41IHRpbWVzKQorICAqIHRoZSB2YWx1ZSBvZiBhIG9uZSBpbiB0aGUgbmV4dCBwb3NpdGlvbiB0aGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlCisgICogcm91bmRlZCB1cCAoYXdheSBmcm9tIHplcm8pLiAgSWYgdGhleSByZXByZXNlbnQgbGVzcyB0aGFuIGhhbGYsCisgICogdGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSByb3VuZGVkIGRvd24uCisgICogPHA+CisgICogT3RoZXJ3aXNlICh0aGV5IHJlcHJlc2VudCBleGFjdGx5IGhhbGYpIHRoZSByZXN1bHQgaXMgcm91bmRlZAorICAqIGRvd24gaWYgaXRzIHJpZ2h0bW9zdCBkaWdpdCBpcyBldmVuLCBvciByb3VuZGVkIHVwIGlmIGl0cworICAqIHJpZ2h0bW9zdCBkaWdpdCBpcyBvZGQgKHRvIG1ha2UgYW4gZXZlbiBkaWdpdCkuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRfSEFMRl9FVkVOPTY7CisgCisgLyoqCisgICogUm91bmRpbmcgbW9kZSB0byByb3VuZCB0byBuZWFyZXN0IG5laWdoYm9yLCB3aGVyZSBhbiBlcXVpZGlzdGFudAorICAqIHZhbHVlIGlzIHJvdW5kZWQgdXAuCisgICogVXNlZCBhcyBhIHNldHRpbmcgdG8gY29udHJvbCB0aGUgcm91bmRpbmcgbW9kZSB1c2VkIGR1cmluZyBhCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb3BlcmF0aW9uLgorICAqIDxwPgorICAqIElmIHRoZSBkaXNjYXJkZWQgZGlnaXRzIHJlcHJlc2VudCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGFsZgorICAqICgwLjUgdGltZXMpIHRoZSB2YWx1ZSBvZiBhIG9uZSBpbiB0aGUgbmV4dCBwb3NpdGlvbiB0aGVuIHRoZSByZXN1bHQKKyAgKiBzaG91bGQgYmUgcm91bmRlZCB1cCAoYXdheSBmcm9tIHplcm8pLiAgT3RoZXJ3aXNlIHRoZSBkaXNjYXJkZWQKKyAgKiBkaWdpdHMgYXJlIGlnbm9yZWQuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRfSEFMRl9VUD00OworIAorIC8qKgorICAqIFJvdW5kaW5nIG1vZGUgdG8gYXNzZXJ0IHRoYXQgbm8gcm91bmRpbmcgaXMgbmVjZXNzYXJ5LgorICAqIFVzZWQgYXMgYSBzZXR0aW5nIHRvIGNvbnRyb2wgdGhlIHJvdW5kaW5nIG1vZGUgdXNlZCBkdXJpbmcgYQorICAqIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IG9wZXJhdGlvbi4KKyAgKiA8cD4KKyAgKiBSb3VuZGluZyAocG90ZW50aWFsIGxvc3Mgb2YgaW5mb3JtYXRpb24pIGlzIG5vdCBwZXJtaXR0ZWQuCisgICogSWYgYW55IG9mIHRoZSBkaXNjYXJkZWQgZGlnaXRzIGFyZSBub24temVybyB0aGVuIGFuCisgICogPGNvZGU+QXJpdGhtZXRpY0V4Y2VwdGlvbjwvY29kZT4gc2hvdWxkIGJlIHRocm93bi4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST1VORF9VTk5FQ0VTU0FSWT03OworIAorIC8qKgorICAqIFJvdW5kaW5nIG1vZGUgdG8gcm91bmQgYXdheSBmcm9tIHplcm8uCisgICogVXNlZCBhcyBhIHNldHRpbmcgdG8gY29udHJvbCB0aGUgcm91bmRpbmcgbW9kZSB1c2VkIGR1cmluZyBhCisgICogPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb3BlcmF0aW9uLgorICAqIDxwPgorICAqIElmIGFueSBvZiB0aGUgZGlzY2FyZGVkIGRpZ2l0cyBhcmUgbm9uLXplcm8gdGhlbiB0aGUgcmVzdWx0IHdpbGwKKyAgKiBiZSByb3VuZGVkIHVwIChhd2F5IGZyb20gemVybykuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRfVVA9MDsKKyAKKyAKKyAvKiBwcm9wZXJ0aWVzIHNoYXJlZCAqLworIC8qKgorICAqIFRoZSBudW1iZXIgb2YgZGlnaXRzIChwcmVjaXNpb24pIHRvIGJlIHVzZWQgZm9yIGFuIG9wZXJhdGlvbi4KKyAgKiBBIHZhbHVlIG9mIDAgaW5kaWNhdGVzIHRoYXQgdW5saW1pdGVkIHByZWNpc2lvbiAoYXMgbWFueSBkaWdpdHMKKyAgKiBhcyBhcmUgcmVxdWlyZWQpIHdpbGwgYmUgdXNlZC4KKyAgKiA8cD4KKyAgKiBUaGUge0BsaW5rIEJpZ0RlY2ltYWx9IG9wZXJhdG9yIG1ldGhvZHMgdXNlIHRoaXMgdmFsdWUgdG8KKyAgKiBkZXRlcm1pbmUgdGhlIHByZWNpc2lvbiBvZiByZXN1bHRzLgorICAqIE5vdGUgdGhhdCBsZWFkaW5nIHplcm9zIChpbiB0aGUgaW50ZWdlciBwYXJ0IG9mIGEgbnVtYmVyKSBhcmUKKyAgKiBuZXZlciBzaWduaWZpY2FudC4KKyAgKiA8cD4KKyAgKiA8Y29kZT5kaWdpdHM8L2NvZGU+IHdpbGwgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZS4KKyAgKgorICAqIEBzZXJpYWwKKyAgKi8KKyBpbnQgZGlnaXRzOworIAorIC8qKgorICAqIFRoZSBmb3JtIG9mIHJlc3VsdHMgZnJvbSBhbiBvcGVyYXRpb24uCisgICogPHA+CisgICogVGhlIHtAbGluayBCaWdEZWNpbWFsfSBvcGVyYXRvciBtZXRob2RzIHVzZSB0aGlzIHZhbHVlIHRvCisgICogZGV0ZXJtaW5lIHRoZSBmb3JtIG9mIHJlc3VsdHMsIGluIHBhcnRpY3VsYXIgd2hldGhlciBhbmQgaG93CisgICogZXhwb25lbnRpYWwgbm90YXRpb24gc2hvdWxkIGJlIHVzZWQuCisgICoKKyAgKiBAc2VlICNFTkdJTkVFUklORworICAqIEBzZWUgI1BMQUlOCisgICogQHNlZSAjU0NJRU5USUZJQworICAqIEBzZXJpYWwKKyAgKi8KKyBpbnQgZm9ybTsgLy8gdmFsdWVzIGZvciB0aGlzIG11c3QgZml0IGluIGEgYnl0ZQorIAorIC8qKgorICAqIENvbnRyb2xzIHdoZXRoZXIgbG9zdCBkaWdpdHMgY2hlY2tpbmcgaXMgZW5hYmxlZCBmb3IgYW4KKyAgKiBvcGVyYXRpb24uCisgICogU2V0IHRvIDxjb2RlPnRydWU8L2NvZGU+IHRvIGVuYWJsZSBjaGVja2luZywgb3IKKyAgKiB0byA8Y29kZT5mYWxzZTwvY29kZT4gdG8gZGlzYWJsZSBjaGVja2luZy4KKyAgKiA8cD4KKyAgKiBXaGVuIGVuYWJsZWQsIHRoZSB7QGxpbmsgQmlnRGVjaW1hbH0gb3BlcmF0b3IgbWV0aG9kcyBjaGVjaworICAqIHRoZSBwcmVjaXNpb24gb2YgdGhlaXIgb3BlcmFuZCBvciBvcGVyYW5kcywgYW5kIHRocm93IGFuCisgICogPGNvZGU+QXJpdGhtZXRpY0V4Y2VwdGlvbjwvY29kZT4gaWYgYW4gb3BlcmFuZCBpcyBtb3JlIHByZWNpc2UKKyAgKiB0aGFuIHRoZSBkaWdpdHMgc2V0dGluZyAodGhhdCBpcywgZGlnaXRzIHdvdWxkIGJlIGxvc3QpLgorICAqIFdoZW4gZGlzYWJsZWQsIG9wZXJhbmRzIGFyZSByb3VuZGVkIHRvIHRoZSBzcGVjaWZpZWQgZGlnaXRzLgorICAqCisgICogQHNlcmlhbAorICAqLworIGJvb2xlYW4gbG9zdERpZ2l0czsKKyAKKyAvKioKKyAgKiBUaGUgcm91bmRpbmcgYWxnb3JpdGhtIHRvIGJlIHVzZWQgZm9yIGFuIG9wZXJhdGlvbi4KKyAgKiA8cD4KKyAgKiBUaGUge0BsaW5rIEJpZ0RlY2ltYWx9IG9wZXJhdG9yIG1ldGhvZHMgdXNlIHRoaXMgdmFsdWUgdG8KKyAgKiBkZXRlcm1pbmUgdGhlIGFsZ29yaXRobSB0byBiZSB1c2VkIHdoZW4gbm9uLXplcm8gZGlnaXRzIGhhdmUgdG8KKyAgKiBiZSBkaXNjYXJkZWQgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBwcmVjaXNpb24gb2YgYSByZXN1bHQuCisgICogVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSBwdWJsaWMgY29uc3RhbnRzIHdob3NlIG5hbWUgc3RhcnRzCisgICogd2l0aCA8Y29kZT5ST1VORF88L2NvZGU+LgorICAqCisgICogQHNlZSAjUk9VTkRfQ0VJTElORworICAqIEBzZWUgI1JPVU5EX0RPV04KKyAgKiBAc2VlICNST1VORF9GTE9PUgorICAqIEBzZWUgI1JPVU5EX0hBTEZfRE9XTgorICAqIEBzZWUgI1JPVU5EX0hBTEZfRVZFTgorICAqIEBzZWUgI1JPVU5EX0hBTEZfVVAKKyAgKiBAc2VlICNST1VORF9VTk5FQ0VTU0FSWQorICAqIEBzZWUgI1JPVU5EX1VQCisgICogQHNlcmlhbAorICAqLworIGludCByb3VuZGluZ01vZGU7CisgCisgLyogcHJvcGVydGllcyBwcml2YXRlIGNvbnN0YW50ICovCisgLy8gZGVmYXVsdCBzZXR0aW5ncworIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0ZPUk09U0NJRU5USUZJQzsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9ESUdJVFM9OTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfTE9TVERJR0lUUz1mYWxzZTsKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9ST1VORElOR01PREU9Uk9VTkRfSEFMRl9VUDsKKyAKKyAvKiBwcm9wZXJ0aWVzIHByaXZhdGUgY29uc3RhbnQgKi8KKyAKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0RJR0lUUz0wOyAvLyBzbWFsbGVzdCB2YWx1ZSBmb3IgRElHSVRTLgorIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfRElHSVRTPTk5OTk5OTk5OTsgLy8gbGFyZ2VzdCB2YWx1ZSBmb3IgRElHSVRTLiAgSWYgaW5jcmVhc2VkLAorIC8vIHRoZSBCaWdEZWNpbWFsIGNsYXNzIG1heSBuZWVkIHVwZGF0ZS4KKyAvLyBsaXN0IG9mIHZhbGlkIHJvdW5kaW5nIG1vZGUgdmFsdWVzLCBtb3N0IGNvbW1vbiB0d28gZmlyc3QKKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUk9VTkRTW109bmV3IGludFtde1JPVU5EX0hBTEZfVVAsUk9VTkRfVU5ORUNFU1NBUlksUk9VTkRfQ0VJTElORyxST1VORF9ET1dOLFJPVU5EX0ZMT09SLFJPVU5EX0hBTEZfRE9XTixST1VORF9IQUxGX0VWRU4sUk9VTkRfVVB9OworIAorIAorIHByaXZhdGUgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUk9VTkRXT1JEU1tdPW5ldyBqYXZhLmxhbmcuU3RyaW5nW117IlJPVU5EX0hBTEZfVVAiLCJST1VORF9VTk5FQ0VTU0FSWSIsIlJPVU5EX0NFSUxJTkciLCJST1VORF9ET1dOIiwiUk9VTkRfRkxPT1IiLCJST1VORF9IQUxGX0RPV04iLCJST1VORF9IQUxGX0VWRU4iLCJST1VORF9VUCJ9OyAvLyBtYXRjaGluZyBuYW1lcyBvZiB0aGUgUk9VTkRTIHZhbHVlcworIAorIAorIAorIAorIC8qIHByb3BlcnRpZXMgcHJpdmF0ZSBjb25zdGFudCB1bnVzZWQgKi8KKyAKKyAvLyBTZXJpYWxpemF0aW9uIHZlcnNpb24KKyBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQ9NzE2MzM3Njk5ODg5MjUxNTM3Nkw7CisgCisgLyogcHJvcGVydGllcyBwdWJsaWMgY29uc3RhbnQgKi8KKyAvKioKKyAgKiBBIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBvYmplY3QgaW5pdGlhbGl6ZWQgdG8gdGhlIGRlZmF1bHQKKyAgKiBzZXR0aW5ncyBmb3IgZ2VuZXJhbC1wdXJwb3NlIGFyaXRobWV0aWMuICBUaGF0IGlzLAorICAqIDxjb2RlPmRpZ2l0cz05IGZvcm09U0NJRU5USUZJQyBsb3N0RGlnaXRzPWZhbHNlCisgICogcm91bmRpbmdNb2RlPVJPVU5EX0hBTEZfVVA8L2NvZGU+LgorICAqCisgICogQHNlZSAjU0NJRU5USUZJQworICAqIEBzZWUgI1JPVU5EX0hBTEZfVVAKKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyBwdWJsaWMgc3RhdGljIGZpbmFsIGNvbS5pYm0uaWN1Lm1hdGguTWF0aENvbnRleHQgREVGQVVMVD1uZXcgY29tLmlibS5pY3UubWF0aC5NYXRoQ29udGV4dChERUZBVUxUX0RJR0lUUyxERUZBVUxUX0ZPUk0sREVGQVVMVF9MT1NURElHSVRTLERFRkFVTFRfUk9VTkRJTkdNT0RFKTsKKworIAorIAorIAorIC8qIC0tLS0tIENvbnN0cnVjdG9ycyAtLS0tLSAqLworIAorIC8qKgorICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IHdpdGggYSBzcGVjaWZpZWQKKyAgKiBwcmVjaXNpb24uCisgICogVGhlIG90aGVyIHNldHRpbmdzIGFyZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzCisgICogKHNlZSB7QGxpbmsgI0RFRkFVTFR9KS4KKyAgKgorICAqIEFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaXMgdGhyb3duIGlmIHRoZQorICAqIDxjb2RlPnNldGRpZ2l0czwvY29kZT4gcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZQorICAqICgmbHQ7MCBvciAmZ3Q7OTk5OTk5OTk5KS4KKyAgKgorICAqIEBwYXJhbSBzZXRkaWdpdHMgICAgIFRoZSA8Y29kZT5pbnQ8L2NvZGU+IGRpZ2l0cyBzZXR0aW5nCisgICogICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+LgorICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UuCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIE1hdGhDb250ZXh0KGludCBzZXRkaWdpdHMpeworICB0aGlzKHNldGRpZ2l0cyxERUZBVUxUX0ZPUk0sREVGQVVMVF9MT1NURElHSVRTLERFRkFVTFRfUk9VTkRJTkdNT0RFKTsKKyAgcmV0dXJuO30KKworIAorIC8qKgorICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IHdpdGggYSBzcGVjaWZpZWQKKyAgKiBwcmVjaXNpb24gYW5kIGZvcm0uCisgICogVGhlIG90aGVyIHNldHRpbmdzIGFyZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzCisgICogKHNlZSB7QGxpbmsgI0RFRkFVTFR9KS4KKyAgKgorICAqIEFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaXMgdGhyb3duIGlmIHRoZQorICAqIDxjb2RlPnNldGRpZ2l0czwvY29kZT4gcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZQorICAqICgmbHQ7MCBvciAmZ3Q7OTk5OTk5OTk5KSwgb3IgaWYgdGhlIHZhbHVlIGdpdmVuIGZvciB0aGUKKyAgKiA8Y29kZT5zZXRmb3JtPC9jb2RlPiBwYXJhbWV0ZXIgaXMgbm90IG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUKKyAgKiBjb25zdGFudHMuCisgICoKKyAgKiBAcGFyYW0gc2V0ZGlnaXRzICAgICBUaGUgPGNvZGU+aW50PC9jb2RlPiBkaWdpdHMgc2V0dGluZworICAqICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPi4KKyAgKiBAcGFyYW0gc2V0Zm9ybSAgICAgICBUaGUgPGNvZGU+aW50PC9jb2RlPiBmb3JtIHNldHRpbmcKKyAgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4uCisgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcGFyYW1ldGVyIG91dCBvZiByYW5nZS4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgTWF0aENvbnRleHQoaW50IHNldGRpZ2l0cyxpbnQgc2V0Zm9ybSl7CisgIHRoaXMoc2V0ZGlnaXRzLHNldGZvcm0sREVGQVVMVF9MT1NURElHSVRTLERFRkFVTFRfUk9VTkRJTkdNT0RFKTsKKyAgcmV0dXJuO30KKworIC8qKgorICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IHdpdGggYSBzcGVjaWZpZWQKKyAgKiBwcmVjaXNpb24sIGZvcm0sIGFuZCBsb3N0RGlnaXRzIHNldHRpbmcuCisgICogVGhlIHJvdW5kaW5nTW9kZSBzZXR0aW5nIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZQorICAqIChzZWUge0BsaW5rICNERUZBVUxUfSkuCisgICoKKyAgKiBBbiA8Y29kZT5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L2NvZGU+IGlzIHRocm93biBpZiB0aGUKKyAgKiA8Y29kZT5zZXRkaWdpdHM8L2NvZGU+IHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAgKiAoJmx0OzAgb3IgJmd0Ozk5OTk5OTk5OSksIG9yIGlmIHRoZSB2YWx1ZSBnaXZlbiBmb3IgdGhlCisgICogPGNvZGU+c2V0Zm9ybTwvY29kZT4gcGFyYW1ldGVyIGlzIG5vdCBvbmUgb2YgdGhlIGFwcHJvcHJpYXRlCisgICogY29uc3RhbnRzLgorICAqCisgICogQHBhcmFtIHNldGRpZ2l0cyAgICAgVGhlIDxjb2RlPmludDwvY29kZT4gZGlnaXRzIHNldHRpbmcKKyAgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4uCisgICogQHBhcmFtIHNldGZvcm0gICAgICAgVGhlIDxjb2RlPmludDwvY29kZT4gZm9ybSBzZXR0aW5nCisgICogICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+LgorICAqIEBwYXJhbSBzZXRsb3N0ZGlnaXRzIFRoZSA8Y29kZT5ib29sZWFuPC9jb2RlPiBsb3N0RGlnaXRzCisgICogICAgICAgICAgICAgICAgICAgICAgc2V0dGluZyBmb3IgdGhpcyA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4uCisgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gcGFyYW1ldGVyIG91dCBvZiByYW5nZS4KKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgTWF0aENvbnRleHQoaW50IHNldGRpZ2l0cyxpbnQgc2V0Zm9ybSxib29sZWFuIHNldGxvc3RkaWdpdHMpeworICB0aGlzKHNldGRpZ2l0cyxzZXRmb3JtLHNldGxvc3RkaWdpdHMsREVGQVVMVF9ST1VORElOR01PREUpOworICByZXR1cm47fQorCisgLyoqCisgICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5NYXRoQ29udGV4dDwvY29kZT4gd2l0aCBhIHNwZWNpZmllZAorICAqIHByZWNpc2lvbiwgZm9ybSwgbG9zdERpZ2l0cywgYW5kIHJvdW5kaW5nTW9kZSBzZXR0aW5nLgorICAqCisgICogQW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpcyB0aHJvd24gaWYgdGhlCisgICogPGNvZGU+c2V0ZGlnaXRzPC9jb2RlPiBwYXJhbWV0ZXIgaXMgb3V0IG9mIHJhbmdlCisgICogKCZsdDswIG9yICZndDs5OTk5OTk5OTkpLCBvciBpZiB0aGUgdmFsdWUgZ2l2ZW4gZm9yIHRoZQorICAqIDxjb2RlPnNldGZvcm08L2NvZGU+IG9yIDxjb2RlPnNldHJvdW5kaW5nbW9kZTwvY29kZT4gcGFyYW1ldGVycyBpcworICAqIG5vdCBvbmUgb2YgdGhlIGFwcHJvcHJpYXRlIGNvbnN0YW50cy4KKyAgKgorICAqIEBwYXJhbSBzZXRkaWdpdHMgICAgICAgVGhlIDxjb2RlPmludDwvY29kZT4gZGlnaXRzIHNldHRpbmcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPi4KKyAgKiBAcGFyYW0gc2V0Zm9ybSAgICAgICAgIFRoZSA8Y29kZT5pbnQ8L2NvZGU+IGZvcm0gc2V0dGluZworICAqICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+LgorICAqIEBwYXJhbSBzZXRsb3N0ZGlnaXRzICAgVGhlIDxjb2RlPmJvb2xlYW48L2NvZGU+IGxvc3REaWdpdHMKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcgZm9yIHRoaXMgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+LgorICAqIEBwYXJhbSBzZXRyb3VuZGluZ21vZGUgVGhlIDxjb2RlPmludDwvY29kZT4gcm91bmRpbmdNb2RlIHNldHRpbmcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPi4KKyAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBNYXRoQ29udGV4dChpbnQgc2V0ZGlnaXRzLGludCBzZXRmb3JtLGJvb2xlYW4gc2V0bG9zdGRpZ2l0cyxpbnQgc2V0cm91bmRpbmdtb2RlKXtzdXBlcigpOworICAKKyAgCisgIC8vIHNldCB2YWx1ZXMsIGFmdGVyIGNoZWNraW5nCisgIGlmIChzZXRkaWdpdHMhPURFRkFVTFRfRElHSVRTKSAKKyAgIHsKKyAgICBpZiAoc2V0ZGlnaXRzPE1JTl9ESUdJVFMpIAorICAgICB0aHJvdyBuZXcgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRGlnaXRzIHRvbyBzbWFsbDoiKyIgIitzZXRkaWdpdHMpOworICAgIGlmIChzZXRkaWdpdHM+TUFYX0RJR0lUUykgCisgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJEaWdpdHMgdG9vIGxhcmdlOiIrIiAiK3NldGRpZ2l0cyk7CisgICB9CisgIHsvKnNlbGVjdCovCisgIGlmIChzZXRmb3JtPT1TQ0lFTlRJRklDKQorICAgOyAvLyBbbW9zdCBjb21tb25dCisgIGVsc2UgaWYgKHNldGZvcm09PUVOR0lORUVSSU5HKQorICAgOworICBlbHNlIGlmIChzZXRmb3JtPT1QTEFJTikKKyAgIDsKKyAgZWxzZXsKKyAgIHRocm93IG5ldyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCYWQgZm9ybSB2YWx1ZToiKyIgIitzZXRmb3JtKTsKKyAgfQorICB9CisgIGlmICgoIShpc1ZhbGlkUm91bmQoc2V0cm91bmRpbmdtb2RlKSkpKSAKKyAgIHRocm93IG5ldyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCYWQgcm91bmRpbmdNb2RlIHZhbHVlOiIrIiAiK3NldHJvdW5kaW5nbW9kZSk7CisgIGRpZ2l0cz1zZXRkaWdpdHM7CisgIGZvcm09c2V0Zm9ybTsKKyAgbG9zdERpZ2l0cz1zZXRsb3N0ZGlnaXRzOyAvLyBbbm8gYmFkIHZhbHVlIHBvc3NpYmxlXQorICByb3VuZGluZ01vZGU9c2V0cm91bmRpbmdtb2RlOworICByZXR1cm47fQorCisgLyoqCisgICogUmV0dXJucyB0aGUgZGlnaXRzIHNldHRpbmcuCisgICogVGhpcyB2YWx1ZSBpcyBhbHdheXMgbm9uLW5lZ2F0aXZlLgorICAqCisgICogQHJldHVybiBhbiA8Y29kZT5pbnQ8L2NvZGU+IHdoaWNoIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRzCisgICogICAgICAgICBzZXR0aW5nCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGludCBnZXREaWdpdHMoKXsKKyAgcmV0dXJuIGRpZ2l0czsKKyAgfQorCisgLyoqCisgICogUmV0dXJucyB0aGUgZm9ybSBzZXR0aW5nLgorICAqIFRoaXMgd2lsbCBiZSBvbmUgb2YKKyAgKiB7QGxpbmsgI0VOR0lORUVSSU5HfSwKKyAgKiB7QGxpbmsgI1BMQUlOfSwgb3IKKyAgKiB7QGxpbmsgI1NDSUVOVElGSUN9LgorICAqCisgICogQHJldHVybiBhbiA8Y29kZT5pbnQ8L2NvZGU+IHdoaWNoIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBzZXR0aW5nCisgICogQHN0YWJsZSBJQ1UgMi4wCisgICovCisgCisgcHVibGljIGludCBnZXRGb3JtKCl7CisgIHJldHVybiBmb3JtOworICB9CisKKyAvKioKKyAgKiBSZXR1cm5zIHRoZSBsb3N0RGlnaXRzIHNldHRpbmcuCisgICogVGhpcyB3aWxsIGJlIGVpdGhlciA8Y29kZT50cnVlPC9jb2RlPiAoZW5hYmxlZCkgb3IKKyAgKiA8Y29kZT5mYWxzZTwvY29kZT4gKGRpc2FibGVkKS4KKyAgKgorICAqIEByZXR1cm4gYSA8Y29kZT5ib29sZWFuPC9jb2RlPiB3aGljaCBpcyB0aGUgdmFsdWUgb2YgdGhlIGxvc3REaWdpdHMKKyAgKiAgICAgICAgICAgc2V0dGluZworICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBib29sZWFuIGdldExvc3REaWdpdHMoKXsKKyAgcmV0dXJuIGxvc3REaWdpdHM7CisgIH0KKworIC8qKgorICAqIFJldHVybnMgdGhlIHJvdW5kaW5nTW9kZSBzZXR0aW5nLgorICAqIFRoaXMgd2lsbCBiZSBvbmUgb2YKKyAgKiB7QGxpbmsgICNST1VORF9DRUlMSU5HfSwKKyAgKiB7QGxpbmsgICNST1VORF9ET1dOfSwKKyAgKiB7QGxpbmsgICNST1VORF9GTE9PUn0sCisgICoge0BsaW5rICAjUk9VTkRfSEFMRl9ET1dOfSwKKyAgKiB7QGxpbmsgICNST1VORF9IQUxGX0VWRU59LAorICAqIHtAbGluayAgI1JPVU5EX0hBTEZfVVB9LAorICAqIHtAbGluayAgI1JPVU5EX1VOTkVDRVNTQVJZfSwgb3IKKyAgKiB7QGxpbmsgICNST1VORF9VUH0uCisgICoKKyAgKiBAcmV0dXJuIGFuIDxjb2RlPmludDwvY29kZT4gd2hpY2ggaXMgdGhlIHZhbHVlIG9mIHRoZSByb3VuZGluZ01vZGUKKyAgKiAgICAgICAgIHNldHRpbmcKKyAgKiBAc3RhYmxlIElDVSAyLjAKKyAgKi8KKyAKKyBwdWJsaWMgaW50IGdldFJvdW5kaW5nTW9kZSgpeworICByZXR1cm4gcm91bmRpbmdNb2RlOworICB9CisKKyAvKiogUmV0dXJucyB0aGUgPGNvZGU+TWF0aENvbnRleHQ8L2NvZGU+IGFzIGEgcmVhZGFibGUgc3RyaW5nLgorICAqIFRoZSA8Y29kZT5TdHJpbmc8L2NvZGU+IHJldHVybmVkIHJlcHJlc2VudHMgdGhlIHNldHRpbmdzIG9mIHRoZQorICAqIDxjb2RlPk1hdGhDb250ZXh0PC9jb2RlPiBvYmplY3QgYXMgZm91ciBibGFuay1kZWxpbWl0ZWQgd29yZHMKKyAgKiBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgYmxhbmsgYW5kIHdpdGggbm8gbGVhZGluZyBvciB0cmFpbGluZyBibGFua3MsCisgICogYXMgZm9sbG93czoKKyAgKiA8b2w+CisgICogPGxpPgorICAqIDxjb2RlPmRpZ2l0cz08L2NvZGU+LCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieQorICAqIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRzIHNldHRpbmcgYXMgYSBudW1lcmljIHdvcmQuCisgICogPGxpPgorICAqIDxjb2RlPmZvcm09PC9jb2RlPiwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkKKyAgKiB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gc2V0dGluZyBhcyBhbiB1cHBlcmNhc2Ugd29yZAorICAqIChvbmUgb2YgPGNvZGU+U0NJRU5USUZJQzwvY29kZT4sIDxjb2RlPlBMQUlOPC9jb2RlPiwgb3IKKyAgKiA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4pLgorICAqIDxsaT4KKyAgKiA8Y29kZT5sb3N0RGlnaXRzPTwvY29kZT4sIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5CisgICogdGhlIHZhbHVlIG9mIHRoZSBsb3N0RGlnaXRzIHNldHRpbmcKKyAgKiAoPGNvZGU+MTwvY29kZT4gaWYgZW5hYmxlZCwgPGNvZGU+MDwvY29kZT4gaWYgZGlzYWJsZWQpLgorICAqIDxsaT4KKyAgKiA8Y29kZT5yb3VuZGluZ01vZGU9PC9jb2RlPiwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkKKyAgKiB0aGUgdmFsdWUgb2YgdGhlIHJvdW5kaW5nTW9kZSBzZXR0aW5nIGFzIGEgd29yZC4KKyAgKiBUaGlzIHdvcmQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBwdWJsaWMKKyAgKiBjb25zdGFudC4KKyAgKiA8L29sPgorICAqIDxwPgorICAqIEZvciBleGFtcGxlOgorICAqIDxicj48Y29kZT4KKyAgKiBkaWdpdHM9OSBmb3JtPVNDSUVOVElGSUMgbG9zdERpZ2l0cz0wIHJvdW5kaW5nTW9kZT1ST1VORF9IQUxGX1VQCisgICogPC9jb2RlPgorICAqIDxwPgorICAqIEFkZGl0aW9uYWwgd29yZHMgbWF5IGJlIGFwcGVuZGVkIHRvIHRoZSByZXN1bHQgb2YKKyAgKiA8Y29kZT50b1N0cmluZzwvY29kZT4gaW4gdGhlIGZ1dHVyZSBpZiBtb3JlIHByb3BlcnRpZXMgYXJlIGFkZGVkCisgICogdG8gdGhlIGNsYXNzLgorICAqCisgICogQHJldHVybiBhIDxjb2RlPlN0cmluZzwvY29kZT4gcmVwcmVzZW50aW5nIHRoZSBjb250ZXh0IHNldHRpbmdzLgorICAqIEBzdGFibGUgSUNVIDIuMAorICAqLworIAorIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHRvU3RyaW5nKCl7CisgIGphdmEubGFuZy5TdHJpbmcgZm9ybXN0cj1udWxsOworICBpbnQgcj0wOworICBqYXZhLmxhbmcuU3RyaW5nIHJvdW5kd29yZD1udWxsOworICB7LypzZWxlY3QqLworICBpZiAoZm9ybT09U0NJRU5USUZJQykKKyAgIGZvcm1zdHI9IlNDSUVOVElGSUMiOworICBlbHNlIGlmIChmb3JtPT1FTkdJTkVFUklORykKKyAgIGZvcm1zdHI9IkVOR0lORUVSSU5HIjsKKyAgZWxzZXsKKyAgIGZvcm1zdHI9IlBMQUlOIjsvKiBmb3JtPVBMQUlOICovCisgIH0KKyAgfQorICB7aW50ICQxPVJPVU5EUy5sZW5ndGg7cj0wO3I6Zm9yKDskMT4wOyQxLS0scisrKXsKKyAgIGlmIChyb3VuZGluZ01vZGU9PVJPVU5EU1tyXSkgCisgICAgeworICAgICByb3VuZHdvcmQ9Uk9VTkRXT1JEU1tyXTsKKyAgICAgYnJlYWsgcjsKKyAgICB9CisgICB9CisgIH0vKnIqLworICByZXR1cm4gImRpZ2l0cz0iK2RpZ2l0cysiICIrImZvcm09Iitmb3Jtc3RyKyIgIisibG9zdERpZ2l0cz0iKyhsb3N0RGlnaXRzPyIxIjoiMCIpKyIgIisicm91bmRpbmdNb2RlPSIrcm91bmR3b3JkOworICB9CisKKyAKKyAvKiA8c2dtbD4gVGVzdCB3aGV0aGVyIHJvdW5kIGlzIHZhbGlkLiA8L3NnbWw+ICovCisgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIHNoYXJlZCBmb3IgdXNlIGJ5IEJpZ0RlY2ltYWwgZm9yIHNldFNjYWxlLgorIAorIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZFJvdW5kKGludCB0ZXN0cm91bmQpeworICBpbnQgcj0wOworICB7aW50ICQyPVJPVU5EUy5sZW5ndGg7cj0wO3I6Zm9yKDskMj4wOyQyLS0scisrKXsKKyAgIGlmICh0ZXN0cm91bmQ9PVJPVU5EU1tyXSkgCisgICAgcmV0dXJuIHRydWU7CisgICB9CisgIH0vKnIqLworICByZXR1cm4gZmFsc2U7CisgIH0KKyB9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvbWF0aC9wYWNrYWdlLmh0bWwgYi9zcmMvY29tL2libS9pY3UvbWF0aC9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWRiNjYzOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS9tYXRoL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Cis8aHRtbD4KKworPGhlYWQ+PCEtLSAgQ29weXJpZ2h0IChDKSAyMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L21hdGgvcGFja2FnZS5odG1sLHYgJAorICAkUmV2aXNpb246IDEuMSAkCisgICREYXRlOiAyMDAwLzA0LzA1IDE4OjA1OjExICQKKy0tPgorCis8dGl0bGU+QzpcY3ZzXGljdTRqXHNyY1xjb21caWJtXGRlbW9ccGFja2FnZS5odG1sPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgYmdjb2xvcj0id2hpdGUiPgorCis8cD5JQk0gQmlnRGVjaW1hbCBzdXBwb3J0LjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0FueVRyYW5zbGl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9BbnlUcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NzQzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9BbnlUcmFuc2xpdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMzM4IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChjKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisqIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvQW55VHJhbnNsaXRlcmF0b3IuamF2YSx2ICQgCisqICRSZXZpc2lvbjogMS4xICQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqIDA2LzA2LzIwMDIgIGFsaXUgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VU2NyaXB0OworaW1wb3J0IGphdmEubGFuZy5NYXRoOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIEEgdHJhbnNsaXRlcmF0b3IgdGhhdCB0cmFuc2xhdGVzIG11bHRpcGxlIGlucHV0IHNjcmlwdHMgdG8gYSBzaW5nbGUKKyAqIG91dHB1dCBzY3JpcHQuICBJdCBpcyBuYW1lZCBBbnktVCBvciBBbnktVC9WLCB3aGVyZSBUIGlzIHRoZSB0YXJnZXQKKyAqIGFuZCBWIGlzIHRoZSBvcHRpb25hbCB2YXJpYW50LiAgVGhlIHRhcmdldCBUIGlzIGEgc2NyaXB0LgorICogCisgKiA8cD5BbiBBbnlUcmFuc2xpdGVyYXRvciBwYXJ0aXRpb25zIHRleHQgaW50byBydW5zIG9mIHRoZSBzYW1lCisgKiBzY3JpcHQsIHRvZ2V0aGVyIHdpdGggYWRqYWNlbnQgQ09NTU9OIG9yIElOSEVSSVRFRCBjaGFyYWN0ZXJzLgorICogQWZ0ZXIgZGV0ZXJtaW5pbmcgdGhlIHNjcmlwdCBvZiBlYWNoIHJ1biwgaXQgdHJhbnNsaXRlcmF0ZXMgZnJvbQorICogdGhhdCBzY3JpcHQgdG8gdGhlIGdpdmVuIHRhcmdldC92YXJpYW50LiAgSXQgZG9lcyBzbyBieQorICogaW5zdGFudGlhdGluZyBhIHRyYW5zbGl0ZXJhdG9yIGZyb20gdGhlIHNvdXJjZSBzY3JpcHQgdG8gdGhlCisgKiB0YXJnZXQvdmFyaWFudC4gIElmIGEgcnVuIGNvbnNpc3RzIG9ubHkgb2YgdGhlIHRhcmdldCBzY3JpcHQsCisgKiBDT01NT04sIG9yIElOSEVSSVRFRCBjaGFyYWN0ZXJzLCB0aGVuIHRoZSBydW4gaXMgbm90IGNoYW5nZWQuCisgKgorICogPHA+QXQgc3RhcnR1cCwgYWxsIHBvc3NpYmxlIEFueVRyYW5zbGl0ZXJhdG9ycyBhcmUgcmVnaXN0ZXJlZCB3aXRoCisgKiB0aGUgc3lzdGVtLCBhcyBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyB0aGUgcmVnaXN0ZXJlZCBzY3JpcHQKKyAqIHRyYW5zbGl0ZXJhdG9ycy4KKyAqIAorICogQHNpbmNlIElDVSAyLjIKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqLworY2xhc3MgQW55VHJhbnNsaXRlcmF0b3IgZXh0ZW5kcyBUcmFuc2xpdGVyYXRvciB7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIENvbnN0YW50cworICAgIAorICAgIHN0YXRpYyBmaW5hbCBjaGFyIFRBUkdFVF9TRVAgPSAnLSc7CisgICAgc3RhdGljIGZpbmFsIGNoYXIgVkFSSUFOVF9TRVAgPSAnLyc7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBBTlkgPSAiQW55IjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIE5VTExfSUQgPSAiTnVsbCI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBMQVRJTl9QSVZPVCA9ICItTGF0aW47TGF0aW4tIjsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDYWNoZSBtYXBwaW5nIFVTY3JpcHRDb2RlIHZhbHVlcyB0byBUcmFuc2xpdGVyYXRvciouCisgICAgICovCisgICAgcHJpdmF0ZSBNYXAgY2FjaGU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGFyZ2V0IG9yIHRhcmdldC92YXJpYW50IHN0cmluZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyB0YXJnZXQ7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGFyZ2V0IHNjcmlwdCBjb2RlLiAgTmV2ZXIgVVNDUklQVF9JTlZBTElEX0NPREUuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgdGFyZ2V0U2NyaXB0OworCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyB7QGxpbmsgVHJhbnNsaXRlcmF0b3IjaGFuZGxlVHJhbnNsaXRlcmF0ZX0uCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9zLCBib29sZWFuIGlzSW5jcmVtZW50YWwpIHsKKyAgICAgICAgaW50IGFsbFN0YXJ0ID0gcG9zLnN0YXJ0OworICAgICAgICBpbnQgYWxsTGltaXQgPSBwb3MubGltaXQ7CisKKyAgICAgICAgU2NyaXB0UnVuSXRlcmF0b3IgaXQgPQorICAgICAgICAgICAgbmV3IFNjcmlwdFJ1bkl0ZXJhdG9yKHRleHQsIHBvcy5jb250ZXh0U3RhcnQsIHBvcy5jb250ZXh0TGltaXQpOworCisgICAgICAgIHdoaWxlIChpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBydW5zIGluIHRoZSBhbnRlIGNvbnRleHQKKyAgICAgICAgICAgIGlmIChpdC5saW1pdCA8PSBhbGxTdGFydCkgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIFRyeSB0byBpbnN0YW50aWF0ZSB0cmFuc2xpdGVyYXRvciBmcm9tIGl0LnNjcmlwdENvZGUgdG8KKyAgICAgICAgICAgIC8vIG91ciB0YXJnZXQgb3IgdGFyZ2V0L3ZhcmlhbnQKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBnZXRUcmFuc2xpdGVyYXRvcihpdC5zY3JpcHRDb2RlKTsKKworICAgICAgICAgICAgaWYgKHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm8gdHJhbnNsaXRlcmF0b3IuICBEbyBub3RoaW5nLCBidXQga2VlcAorICAgICAgICAgICAgICAgIC8vIHBvcy5zdGFydCB1cCB0byBkYXRlLgorICAgICAgICAgICAgICAgIHBvcy5zdGFydCA9IGl0LmxpbWl0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB0aGUgcnVuIGVuZCBpcyBiZWZvcmUgdGhlIHRyYW5zbGl0ZXJhdGlvbiBsaW1pdCwgZG8KKyAgICAgICAgICAgIC8vIGEgbm9uLWluY3JlbWVudGFsIHRyYW5zbGl0ZXJhdGlvbi4gIE90aGVyd2lzZSBkbyBhbgorICAgICAgICAgICAgLy8gaW5jcmVtZW50YWwgb25lLgorICAgICAgICAgICAgYm9vbGVhbiBpbmNyZW1lbnRhbCA9IGlzSW5jcmVtZW50YWwgJiYgKGl0LmxpbWl0ID49IGFsbExpbWl0KTsKKworICAgICAgICAgICAgcG9zLnN0YXJ0ID0gTWF0aC5tYXgoYWxsU3RhcnQsIGl0LnN0YXJ0KTsKKyAgICAgICAgICAgIHBvcy5saW1pdCA9IE1hdGgubWluKGFsbExpbWl0LCBpdC5saW1pdCk7CisgICAgICAgICAgICBpbnQgbGltaXQgPSBwb3MubGltaXQ7CisgICAgICAgICAgICB0LmZpbHRlcmVkVHJhbnNsaXRlcmF0ZSh0ZXh0LCBwb3MsIGluY3JlbWVudGFsKTsKKyAgICAgICAgICAgIGludCBkZWx0YSA9IHBvcy5saW1pdCAtIGxpbWl0OworICAgICAgICAgICAgYWxsTGltaXQgKz0gZGVsdGE7CisgICAgICAgICAgICBpdC5hZGp1c3RMaW1pdChkZWx0YSk7CisKKyAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgaWYgd2UgZW50ZXIgdGhlIHBvc3QgY29udGV4dAorICAgICAgICAgICAgaWYgKGl0LmxpbWl0ID49IGFsbExpbWl0KSBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlc3RvcmUgbGltaXQuICBwb3Muc3RhcnQgaXMgZmluZSB3aGVyZSB0aGUgbGFzdCB0cmFuc2xpdGVyYXRvcgorICAgICAgICAvLyBsZWZ0IGl0LCBvciBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IHJ1bi4KKyAgICAgICAgcG9zLmxpbWl0ID0gYWxsTGltaXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJpdmF0ZSBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBpZCB0aGUgSUQgb2YgdGhlIGZvcm0gUy1UIG9yIFMtVC9WLCB3aGVyZSBUIGlzIHRoZVRhcmdldAorICAgICAqIGFuZCBWIGlzIHRoZVZhcmlhbnQuICBNdXN0IG5vdCBiZSBlbXB0eS4KKyAgICAgKiBAcGFyYW0gdGhlVGFyZ2V0IHRoZSB0YXJnZXQgbmFtZS4gIE11c3Qgbm90IGJlIGVtcHR5LCBhbmQgbXVzdAorICAgICAqIG5hbWUgYSBzY3JpcHQgY29ycmVzcG9uZGluZyB0byB0aGVUYXJnZXRTY3JpcHQuCisgICAgICogQHBhcmFtIHRoZVZhcmlhbnQgdGhlIHZhcmlhbnQgbmFtZSwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZgorICAgICAqIHRoZXJlIGlzIG5vIHZhcmlhbnQKKyAgICAgKiBAcGFyYW0gdGhlVGFyZ2V0U2NyaXB0IHRoZSBzY3JpcHQgY29kZSBjb3JyZXNwb25kaW5nIHRvCisgICAgICogdGhlVGFyZ2V0LgorICAgICAqIEBwYXJhbSBlYyBlcnJvciBjb2RlLCBmYWlscyBpZiB0aGUgaW50ZXJuYWwgaGFzaHRhYmxlIGNhbm5vdCBiZQorICAgICAqIGFsbG9jYXRlZAorICAgICAqLworICAgIHByaXZhdGUgQW55VHJhbnNsaXRlcmF0b3IoU3RyaW5nIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRoZVRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0aGVWYXJpYW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRoZVRhcmdldFNjcmlwdCkgeworICAgICAgICBzdXBlcihpZCwgbnVsbCk7CisgICAgICAgIHRhcmdldFNjcmlwdCA9IHRoZVRhcmdldFNjcmlwdDsKKyAgICAgICAgY2FjaGUgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICAKKyAgICAgICAgdGFyZ2V0ID0gdGhlVGFyZ2V0OworICAgICAgICBpZiAodGhlVmFyaWFudC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIHRhcmdldCA9IHRoZVRhcmdldCArIFZBUklBTlRfU0VQICsgdGhlVmFyaWFudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSB0cmFuc2xpdGVyYXRvciBmcm9tIHRoZSBnaXZlbiBzb3VyY2UgdG8gb3VyIHRhcmdldCBvcgorICAgICAqIHRhcmdldC92YXJpYW50LiAgUmV0dXJucyBOVUxMIGlmIHRoZSBzb3VyY2UgaXMgdGhlIHNhbWUgYXMgb3VyCisgICAgICogdGFyZ2V0IHNjcmlwdCwgb3IgaWYgdGhlIHNvdXJjZSBpcyBVU0NSSVBUX0lOVkFMSURfQ09ERS4KKyAgICAgKiBDYWNoZXMgdGhlIHJlc3VsdCBhbmQgcmV0dXJucyB0aGUgc2FtZSB0cmFuc2xpdGVyYXRvciB0aGUgbmV4dAorICAgICAqIHRpbWUuICBUaGUgY2FsbGVyIGRvZXMgTk9UIG93biB0aGUgcmVzdWx0IGFuZCBtdXN0IG5vdCBkZWxldGUKKyAgICAgKiBpdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFRyYW5zbGl0ZXJhdG9yIGdldFRyYW5zbGl0ZXJhdG9yKGludCBzb3VyY2UpIHsKKyAgICAgICAgaWYgKHNvdXJjZSA9PSB0YXJnZXRTY3JpcHQgfHwgc291cmNlID09IFVTY3JpcHQuSU5WQUxJRF9DT0RFKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEludGVnZXIga2V5ID0gbmV3IEludGVnZXIoc291cmNlKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IChUcmFuc2xpdGVyYXRvcikgY2FjaGUuZ2V0KGtleSk7CisgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyBzb3VyY2VOYW1lID0gVVNjcmlwdC5nZXROYW1lKHNvdXJjZSk7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBzb3VyY2VOYW1lICsgVEFSR0VUX1NFUCArIHRhcmdldDsKKyAgICAgICAgCisgICAgICAgICAgICB0ID0gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoaWQsIEZPUldBUkQpOworICAgICAgICAgICAgaWYgKHQgPT0gbnVsbCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHBpdm90IGFyb3VuZCBMYXRpbiwgb3VyIG1vc3QgY29tbW9uIHNjcmlwdAorICAgICAgICAgICAgICAgIGlkID0gc291cmNlTmFtZSArIExBVElOX1BJVk9UICsgdGFyZ2V0OworICAgICAgICAgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRJbnN0YW5jZShpZCwgRk9SV0FSRCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjYWNoZS5wdXQoa2V5LCB0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyBzdGFuZGFyZCB0cmFuc2xpdGVyYXRvcnMgd2l0aCB0aGUgc3lzdGVtLiAgQ2FsbGVkIGJ5CisgICAgICogVHJhbnNsaXRlcmF0b3IgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAgU2NhbiBhbGwgY3VycmVudCB0YXJnZXRzCisgICAgICogYW5kIHJlZ2lzdGVyIHRob3NlIHRoYXQgYXJlIHNjcmlwdHMgVCBhcyBBbnktVC9WLgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyKCkgeworCisgICAgICAgIEhhc2hTZXQgc2VlbiA9IG5ldyBIYXNoU2V0KCk7CisKKyAgICAgICAgZm9yIChFbnVtZXJhdGlvbiBzPVRyYW5zbGl0ZXJhdG9yLmdldEF2YWlsYWJsZVNvdXJjZXMoKTsgcy5oYXNNb3JlRWxlbWVudHMoKTsgKSB7CisgICAgICAgICAgICBTdHJpbmcgc291cmNlID0gKFN0cmluZykgcy5uZXh0RWxlbWVudCgpOworCisgICAgICAgICAgICAvLyBJZ25vcmUgdGhlICJBbnkiIHNvdXJjZQorICAgICAgICAgICAgaWYgKHNvdXJjZS5lcXVhbHNJZ25vcmVDYXNlKEFOWSkpIGNvbnRpbnVlOworCisgICAgICAgICAgICBmb3IgKEVudW1lcmF0aW9uIHQ9VHJhbnNsaXRlcmF0b3IuZ2V0QXZhaWxhYmxlVGFyZ2V0cyhzb3VyY2UpOworICAgICAgICAgICAgICAgICB0Lmhhc01vcmVFbGVtZW50cygpOyApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gKFN0cmluZykgdC5uZXh0RWxlbWVudCgpOworCisgICAgICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIGVhY2ggdGFyZ2V0IG9uY2UKKyAgICAgICAgICAgICAgICBpZiAoc2Vlbi5jb250YWlucyh0YXJnZXQpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzZWVuLmFkZCh0YXJnZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzY3JpcHQgY29kZSBmb3IgdGhlIHRhcmdldC4gIElmIG5vdCBhIHNjcmlwdCwgaWdub3JlLgorICAgICAgICAgICAgICAgIGludCB0YXJnZXRTY3JpcHQgPSBzY3JpcHROYW1lVG9Db2RlKHRhcmdldCk7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFNjcmlwdCA9PSBVU2NyaXB0LklOVkFMSURfQ09ERSkgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBmb3IgKEVudW1lcmF0aW9uIHY9VHJhbnNsaXRlcmF0b3IuZ2V0QXZhaWxhYmxlVmFyaWFudHMoc291cmNlLCB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICAgdi5oYXNNb3JlRWxlbWVudHMoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYW50ID0gKFN0cmluZykgdi5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaWQ7CisgICAgICAgICAgICAgICAgICAgIGlkID0gVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5TVFZ0b0lEKEFOWSwgdGFyZ2V0LCB2YXJpYW50KTsKKyAgICAgICAgICAgICAgICAgICAgQW55VHJhbnNsaXRlcmF0b3IgdHJhbnMgPSBuZXcgQW55VHJhbnNsaXRlcmF0b3IoaWQsIHRhcmdldCwgdmFyaWFudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2NyaXB0KTsKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXJJbnN0YW5jZSh0cmFucyk7CisgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyU3BlY2lhbEludmVyc2UodGFyZ2V0LCBOVUxMX0lELCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBzY3JpcHQgY29kZSBmb3IgYSBnaXZlbiBuYW1lLCBvcgorICAgICAqIFVTY3JpcHQuSU5WQUxJRF9DT0RFIGlmIG5vdCBmb3VuZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgc2NyaXB0TmFtZVRvQ29kZShTdHJpbmcgbmFtZSkgeworICAgICAgICBpbnRbXSBjb2RlcyA9IFVTY3JpcHQuZ2V0Q29kZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIGNvZGVzICE9IG51bGwgPyBjb2Rlc1swXSA6IFVTY3JpcHQuSU5WQUxJRF9DT0RFOworICAgIH0KKyAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFNjcmlwdFJ1bkl0ZXJhdG9yCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc2VyaWVzIG9mIHJhbmdlcyBjb3JyZXNwb25kaW5nIHRvIHNjcmlwdHMuIFRoZXkgd2lsbCBiZQorICAgICAqIG9mIHRoZSBmb3JtOgorICAgICAqCisgICAgICogY2NjY1NTY1NTY2NjY1RUY1RjY2NjICAgLSBjID0gY29tbW9uLCBTID0gZmlyc3Qgc2NyaXB0LCBUID0gc2Vjb25kCisgICAgICogfCAgICAgICAgICAgIHwgICAgICAgICAgLSBmaXJzdCBydW4gKHN0YXJ0LCBsaW1pdCkKKyAgICAgKiAgICAgICAgICB8ICAgICAgICAgICB8ICAtIHNlY29uZCBydW4gKHN0YXJ0LCBsaW1pdCkKKyAgICAgKgorICAgICAqIFRoYXQgaXMsIHRoZSBydW5zIHdpbGwgb3ZlcmxhcC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBzbyB0aGF0IGEKKyAgICAgKiB0cmFuc2xpdGVyYXRvciBjYW4gY29uc2lkZXIgY29tbW9uIGNoYXJhY3RlcnMgYm90aCBiZWZvcmUgYW5kIGFmdGVyCisgICAgICogdGhlIHNjcmlwdHMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2NyaXB0UnVuSXRlcmF0b3IgeworCisgICAgICAgIHByaXZhdGUgUmVwbGFjZWFibGUgdGV4dDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgdGV4dFN0YXJ0OworICAgICAgICBwcml2YXRlIGludCB0ZXh0TGltaXQ7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb2RlIG9mIHRoZSBjdXJyZW50IHJ1biwgdmFsaWQgYWZ0ZXIgbmV4dCgpIHJldHVybnMuICBNYXkKKyAgICAgICAgICogYmUgVVNjcmlwdC5JTlZBTElEX0NPREUgaWYgYW5kIG9ubHkgaWYgdGhlIGVudGlyZSB0ZXh0IGlzCisgICAgICAgICAqIENPTU1PTi9JTkhFUklURUQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IHNjcmlwdENvZGU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzdGFydCBvZiB0aGUgcnVuLCBpbmNsdXNpdmUsIHZhbGlkIGFmdGVyIG5leHQoKSByZXR1cm5zLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBzdGFydDsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGVuZCBvZiB0aGUgcnVuLCBleGNsdXNpdmUsIHZhbGlkIGFmdGVyIG5leHQoKSByZXR1cm5zLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBsaW1pdDsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ29uc3RydWN0cyBhIHJ1biBpdGVyYXRvciBvdmVyIHRoZSBnaXZlbiB0ZXh0IGZyb20gc3RhcnQKKyAgICAgICAgICogKGluY2x1c2l2ZSkgdG8gbGltaXQgKGV4Y2x1c2l2ZSkuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU2NyaXB0UnVuSXRlcmF0b3IoUmVwbGFjZWFibGUgdGV4dCwgaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKKyAgICAgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgICAgICAgICB0aGlzLnRleHRTdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgdGhpcy50ZXh0TGltaXQgPSBsaW1pdDsKKyAgICAgICAgICAgIHRoaXMubGltaXQgPSBzdGFydDsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgVFJVRSBpZiB0aGVyZSBhcmUgYW55IG1vcmUgcnVucy4gIFRSVUUgaXMgYWx3YXlzCisgICAgICAgICAqIHJldHVybmVkIGF0IGxlYXN0IG9uY2UuICBVcG9uIHJldHVybiwgdGhlIGNhbGxlciBzaG91bGQKKyAgICAgICAgICogZXhhbWluZSBzY3JpcHRDb2RlLCBzdGFydCwgYW5kIGxpbWl0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gbmV4dCgpIHsKKyAgICAgICAgICAgIGludCBjaDsKKyAgICAgICAgICAgIGludCBzOworCisgICAgICAgICAgICBzY3JpcHRDb2RlID0gVVNjcmlwdC5JTlZBTElEX0NPREU7IC8vIGRvbid0IGtub3cgc2NyaXB0IHlldAorICAgICAgICAgICAgc3RhcnQgPSBsaW1pdDsKKworICAgICAgICAgICAgLy8gQXJlIHdlIGRvbmU/CisgICAgICAgICAgICBpZiAoc3RhcnQgPT0gdGV4dExpbWl0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNb3ZlIHN0YXJ0IGJhY2sgdG8gaW5jbHVkZSBhZGphY2VudCBDT01NT04gb3IgSU5IRVJJVEVECisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzCisgICAgICAgICAgICB3aGlsZSAoc3RhcnQgPiB0ZXh0U3RhcnQpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHRleHQuY2hhcjMyQXQoc3RhcnQgLSAxKTsgLy8gbG9vayBiYWNrCisgICAgICAgICAgICAgICAgcyA9IFVTY3JpcHQuZ2V0U2NyaXB0KGNoKTsKKyAgICAgICAgICAgICAgICBpZiAocyA9PSBVU2NyaXB0LkNPTU1PTiB8fCBzID09IFVTY3JpcHQuSU5IRVJJVEVEKSB7CisgICAgICAgICAgICAgICAgICAgIC0tc3RhcnQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNb3ZlIGxpbWl0IGFoZWFkIHRvIGluY2x1ZGUgQ09NTU9OLCBJTkhFUklURUQsIGFuZCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAvLyBvZiB0aGUgY3VycmVudCBzY3JpcHQuCisgICAgICAgICAgICB3aGlsZSAobGltaXQgPCB0ZXh0TGltaXQpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHRleHQuY2hhcjMyQXQobGltaXQpOyAvLyBsb29rIGFoZWFkCisgICAgICAgICAgICAgICAgcyA9IFVTY3JpcHQuZ2V0U2NyaXB0KGNoKTsKKyAgICAgICAgICAgICAgICBpZiAocyAhPSBVU2NyaXB0LkNPTU1PTiAmJiBzICE9IFVTY3JpcHQuSU5IRVJJVEVEKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHRDb2RlID09IFVTY3JpcHQuSU5WQUxJRF9DT0RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlID0gczsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzICE9IHNjcmlwdENvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbGltaXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJldHVybiBUUlVFIGV2ZW4gaWYgdGhlIGVudGlyZSB0ZXh0IGlzIENPTU1PTiAvIElOSEVSSVRFRCwgaW4KKyAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugc2NyaXB0Q29kZSB3aWxsIGJlIFVTY3JpcHQuSU5WQUxJRF9DT0RFLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRqdXN0cyBpbnRlcm5hbCBpbmRpY2VzIGZvciBhIGNoYW5nZSBpbiB0aGUgbGltaXQgaW5kZXggb2YgdGhlCisgICAgICAgICAqIGdpdmVuIGRlbHRhLiAgQSBwb3NpdGl2ZSBkZWx0YSBtZWFucyB0aGUgbGltaXQgaGFzIGluY3JlYXNlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIGFkanVzdExpbWl0KGludCBkZWx0YSkgeworICAgICAgICAgICAgbGltaXQgKz0gZGVsdGE7CisgICAgICAgICAgICB0ZXh0TGltaXQgKz0gZGVsdGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9BcmFiaWNTaGFwaW5nLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9BcmFiaWNTaGFwaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTBlMmFjYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0FyYWJpY1NoYXBpbmcuamF2YQpAQCAtMCwwICsxLDEyMTcgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CisKKy8qKgorICogU2hhcGUgQXJhYmljIHRleHQgb24gYSBjaGFyYWN0ZXIgYmFzaXMuCisgKgorICogPHA+QXJhYmljU2hhcGluZyBwZXJmb3JtcyBiYXNpYyBvcGVyYXRpb25zIGZvciAic2hhcGluZyIgQXJhYmljIHRleHQuIEl0IGlzIG1vc3QKKyAqIHVzZWZ1bCBmb3IgdXNlIHdpdGggbGVnYWN5IGRhdGEgZm9ybWF0cyBhbmQgbGVnYWN5IGRpc3BsYXkgdGVjaG5vbG9neQorICogKHNpbXBsZSB0ZXJtaW5hbHMpLiBBbGwgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIFVuaWNvZGUgY2hhcmFjdGVycy48L3A+CisgKgorICogPHA+VGV4dC1iYXNlZCBzaGFwaW5nIG1lYW5zIHRoYXQgc29tZSBjaGFyYWN0ZXIgY29kZSBwb2ludHMgaW4gdGhlIHRleHQgYXJlCisgKiByZXBsYWNlZCBieSBvdGhlcnMgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBJdCB0cmFuc2Zvcm1zIG9uZSBraW5kIG9mIHRleHQKKyAqIGludG8gYW5vdGhlci4gSW4gY29tcGFyaXNvbiwgbW9kZXJuIGRpc3BsYXlzIGZvciBBcmFiaWMgdGV4dCBzZWxlY3QKKyAqIGFwcHJvcHJpYXRlLCBjb250ZXh0LWRlcGVuZGVudCBmb250IGdseXBocyBmb3IgZWFjaCB0ZXh0IGVsZW1lbnQsIHdoaWNoIG1lYW5zCisgKiB0aGF0IHRoZXkgdHJhbnNmb3JtIHRleHQgaW50byBhIGdseXBoIHZlY3Rvci48L3A+CisgKgorICogPHA+VGV4dCB0cmFuc2Zvcm1hdGlvbnMgYXJlIG5lY2Vzc2FyeSB3aGVuIG1vZGVybiBkaXNwbGF5IHRlY2hub2xvZ3kgaXMgbm90CisgKiBhdmFpbGFibGUgb3Igd2hlbiB0ZXh0IG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIG9yIGZyb20gbGVnYWN5IGZvcm1hdHMgdGhhdAorICogdXNlICJzaGFwZWQiIGNoYXJhY3RlcnMuIFNpbmNlIHRoZSBBcmFiaWMgc2NyaXB0IGlzIGN1cnNpdmUsIGNvbm5lY3RpbmcKKyAqIGFkamFjZW50IGxldHRlcnMgdG8gZWFjaCBvdGhlciwgY29tcHV0ZXJzIHNlbGVjdCBpbWFnZXMgZm9yIGVhY2ggbGV0dGVyIGJhc2VkCisgKiBvbiB0aGUgc3Vycm91bmRpbmcgbGV0dGVycy4gVGhpcyB1c3VhbGx5IHJlc3VsdHMgaW4gZm91ciBpbWFnZXMgcGVyIEFyYWJpYworICogbGV0dGVyOiBpbml0aWFsLCBtaWRkbGUsIGZpbmFsLCBhbmQgaXNvbGF0ZWQgZm9ybXMuIEluIFVuaWNvZGUsIG9uIHRoZSBvdGhlcgorICogaGFuZCwgbGV0dGVycyBhcmUgbm9ybWFsbHkgc3RvcmVkIGFic3RyYWN0LCBhbmQgYSBkaXNwbGF5IHN5c3RlbSBpcyBleHBlY3RlZAorICogdG8gc2VsZWN0IHRoZSBuZWNlc3NhcnkgZ2x5cGhzLiAoVGhpcyBtYWtlcyBzZWFyY2hpbmcgYW5kIG90aGVyIHRleHQKKyAqIHByb2Nlc3NpbmcgZWFzaWVyIGJlY2F1c2UgdGhlIHNhbWUgbGV0dGVyIGhhcyBvbmx5IG9uZSBjb2RlLikgSXQgaXMgcG9zc2libGUKKyAqIHRvIG1pbWljIHRoaXMgd2l0aCB0ZXh0IHRyYW5zZm9ybWF0aW9ucyBiZWNhdXNlIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIGluCisgKiBVbmljb2RlIHRoYXQgYXJlIHJlbmRlcmVkIGFzIGxldHRlcnMgd2l0aCBhIHNwZWNpZmljIHNoYXBlCisgKiAob3IgY3Vyc2l2ZSBjb25uZWN0aXZpdHkpLiBUaGV5IHdlcmUgaW5jbHVkZWQgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aAorICogbGVnYWN5IHN5c3RlbXMgYW5kIGNvZGVwYWdlcywgYW5kIGZvciB1bnNvcGhpc3RpY2F0ZWQgZGlzcGxheSBzeXN0ZW1zLjwvcD4KKyAqCisgKiA8cD5BIHNlY29uZCBraW5kIG9mIHRleHQgdHJhbnNmb3JtYXRpb25zIGlzIHN1cHBvcnRlZCBmb3IgQXJhYmljIGRpZ2l0czoKKyAqIEZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IGNvZGVwYWdlcyB0aGF0IG9ubHkgaW5jbHVkZSBFdXJvcGVhbiBkaWdpdHMsCisgKiBpdCBpcyBwb3NzaWJsZSB0byByZXBsYWNlIG9uZSBzZXQgb2YgZGlnaXRzIGJ5IGFub3RoZXIsIGNoYW5naW5nIHRoZQorICogY2hhcmFjdGVyIGNvZGUgcG9pbnRzLiBUaGVzZSBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgZm9yIGVpdGhlcgorICogQXJhYmljLUluZGljIERpZ2l0cyAoVSswNjYwLi4uVSswNjY5KSBvciBFYXN0ZXJuIChFeHRlbmRlZCkgQXJhYmljLUluZGljCisgKiBkaWdpdHMgKFUrMDZmMC4uLlUrMDZmOSkuPC9wPgorICoKKyAqIDxwPlNvbWUgcmVwbGFjZW1lbnRzIG1heSByZXN1bHQgaW4gbW9yZSBvciBmZXdlciBjaGFyYWN0ZXJzIChjb2RlIHBvaW50cykuCisgKiBCeSBkZWZhdWx0LCB0aGlzIG1lYW5zIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBtYXkgcmVjZWl2ZSB0ZXh0IHdpdGggYQorICogbGVuZ3RoIGRpZmZlcmVudCBmcm9tIHRoZSBzb3VyY2UgbGVuZ3RoLiBTb21lIGxlZ2FjeSBzeXN0ZW1zIHJlbHkgb24gdGhlCisgKiBsZW5ndGggb2YgdGhlIHRleHQgdG8gYmUgY29uc3RhbnQuIFRoZXkgZXhwZWN0IGV4dHJhIHNwYWNlcyB0byBiZSBhZGRlZAorICogb3IgY29uc3VtZWQgZWl0aGVyIG5leHQgdG8gdGhlIGFmZmVjdGVkIGNoYXJhY3RlciBvciBhdCB0aGUgZW5kIG9mIHRoZQorICogdGV4dC48L3A+CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEFyYWJpY1NoYXBpbmcgeworICAgIHByaXZhdGUgZmluYWwgaW50IG9wdGlvbnM7CisgICAgcHJpdmF0ZSBib29sZWFuIGlzTG9naWNhbDsgLy8gY29udmVuaWVuY2UKKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSByYW5nZSBvZiB0ZXh0IGluIHRoZSBzb3VyY2UgYXJyYXksIHB1dHRpbmcgdGhlIHJlc3VsdCAKKyAgICAgKiBpbnRvIGEgcmFuZ2Ugb2YgdGV4dCBpbiB0aGUgZGVzdGluYXRpb24gYXJyYXksIGFuZCByZXR1cm4gdGhlIG51bWJlcgorICAgICAqIG9mIGNoYXJhY3RlcnMgd3JpdHRlbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzb3VyY2UgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5wdXQgdGV4dAorICAgICAqIEBwYXJhbSBzb3VyY2VTdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlIG9mIHRleHQgdG8gY29udmVydAorICAgICAqIEBwYXJhbSBzb3VyY2VMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmFuZ2Ugb2YgdGV4dCB0byBjb252ZXJ0CisgICAgICogQHBhcmFtIGRlc3QgVGhlIGRlc3RpbmF0aW9uIGFycmF5IHRoYXQgd2lsbCByZWNlaXZlIHRoZSByZXN1bHQuCisgICAgICogICBJdCBtYXkgYmUgPGNvZGU+TlVMTDwvY29kZT4gb25seSBpZiAgPGNvZGU+ZGVzdFNpemU8L2NvZGU+IGlzIDAuICAKKyAgICAgKiBAcGFyYW0gZGVzdFN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciB0byB1c2UuCisgICAgICogQHBhcmFtIGRlc3RTaXplIFRoZSBzaXplIChjYXBhY2l0eSkgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAgICAgKiAgIElmIDxjb2RlPmRlc3RTaXplPC9jb2RlPiBpcyAwLCB0aGVuIG5vIG91dHB1dCBpcyBwcm9kdWNlZCwKKyAgICAgKiAgIGJ1dCB0aGUgbmVjZXNzYXJ5IGJ1ZmZlciBzaXplIGlzIHJldHVybmVkICgicHJlZmxpZ2h0aW5nIikuICBUaGlzCisgICAgICogICBkb2VzIG5vdCB2YWxpZGF0ZSB0aGUgdGV4dCBhZ2FpbnN0IHRoZSBvcHRpb25zLCBmb3IgZXhhbXBsZSwgCisgICAgICogICBpZiBsZXR0ZXJzIGFyZSBiZWluZyB1bnNoYXBlZCwgYW5kIHNwYWNlcyBhcmUgYmVpbmcgY29uc3VtZWQKKyAgICAgKiAgIGZvbGxvd2luZyBsYW1hbGVmLCB0aGlzIHdpbGwgbm90IGRldGVjdCBhIGxhbWFsZWYgd2l0aG91dCBhIAorICAgICAqICAgY29ycmVzcG9uZGluZyBzcGFjZS4gIEFuIGVycm9yIHdpbGwgYmUgdGhyb3duIHdoZW4gdGhlIGFjdHVhbAorICAgICAqICAgY29udmVyc2lvbiBpcyBhdHRlbXB0ZWQuCisgICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGNoYXJzIHdyaXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAgICAgKiAgIElmIGFuIGVycm9yIG9jY3VycywgdGhlbiBubyBvdXRwdXQgd2FzIHdyaXR0ZW4sIG9yIGl0IG1heSBiZQorICAgICAqICAgaW5jb21wbGV0ZS4KKyAgICAgKiBAdGhyb3dzIEFyYWJpY1NoYXBpbmdFeGNlcHRpb24gaWYgdGhlIHRleHQgY2Fubm90IGJlIGNvbnZlcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBzaGFwZShjaGFyW10gc291cmNlLCBpbnQgc291cmNlU3RhcnQsIGludCBzb3VyY2VMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCwgaW50IGRlc3RTdGFydCwgaW50IGRlc3RTaXplKSB0aHJvd3MgQXJhYmljU2hhcGluZ0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic291cmNlIGNhbiBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGlmIChzb3VyY2VTdGFydCA8IDAgfHwgc291cmNlTGVuZ3RoIDwgMCB8fCBzb3VyY2VTdGFydCArIHNvdXJjZUxlbmd0aCA+IHNvdXJjZS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImJhZCBzb3VyY2Ugc3RhcnQgKCIgKyBzb3VyY2VTdGFydCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIG9yIGxlbmd0aCAoIiArIHNvdXJjZUxlbmd0aCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIGZvciBidWZmZXIgb2YgbGVuZ3RoICIgKyBzb3VyY2UubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVzdCA9PSBudWxsICYmIGRlc3RTaXplICE9IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm51bGwgZGVzdCByZXF1aXJlcyBkZXN0U2l6ZSA9PSAwIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChkZXN0U2l6ZSAhPSAwKSAmJgorICAgICAgICAgICAgKGRlc3RTdGFydCA8IDAgfHwgZGVzdFNpemUgPCAwIHx8IGRlc3RTdGFydCArIGRlc3RTaXplID4gZGVzdC5sZW5ndGgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJiYWQgZGVzdCBzdGFydCAoIiArIGRlc3RTdGFydCArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBvciBzaXplICgiICsgZGVzdFNpemUgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikgZm9yIGJ1ZmZlciBvZiBsZW5ndGggIiArIGRlc3QubGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpbnRlcm5hbFNoYXBlKHNvdXJjZSwgc291cmNlU3RhcnQsIHNvdXJjZUxlbmd0aCwgZGVzdCwgZGVzdFN0YXJ0LCBkZXN0U2l6ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBhIHJhbmdlIG9mIHRleHQgaW4gcGxhY2UuICBUaGlzIG1heSBvbmx5IGJlIHVzZWQgaWYgdGhlIExlbmd0aCBvcHRpb24KKyAgICAgKiBkb2VzIG5vdCBncm93IG9yIHNocmluayB0aGUgdGV4dC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzb3VyY2UgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5wdXQgdGV4dAorICAgICAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlIG9mIHRleHQgdG8gY29udmVydAorICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmFuZ2Ugb2YgdGV4dCB0byBjb252ZXJ0CisgICAgICogQHRocm93cyBBcmFiaWNTaGFwaW5nRXhjZXB0aW9uIGlmIHRoZSB0ZXh0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNoYXBlKGNoYXJbXSBzb3VyY2UsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIEFyYWJpY1NoYXBpbmdFeGNlcHRpb24geworICAgICAgICBpZiAoKG9wdGlvbnMgJiBMRU5HVEhfTUFTSykgPT0gTEVOR1RIX0dST1dfU0hSSU5LKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQXJhYmljU2hhcGluZ0V4Y2VwdGlvbigiQ2Fubm90IHNoYXBlIGluIHBsYWNlIHdpdGggbGVuZ3RoIG9wdGlvbiBncm93L3Nocmluay4iKTsKKyAgICAgICAgfQorICAgICAgICBzaGFwZShzb3VyY2UsIHN0YXJ0LCBsZW5ndGgsIHNvdXJjZSwgc3RhcnQsIGxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBhIHN0cmluZywgcmV0dXJuaW5nIHRoZSBuZXcgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIHNvdXJjZSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuCisgICAgICogQHJldHVybiBUaGUgY29udmVydGVkIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIEFyYWJpY1NoYXBpbmdFeGNlcHRpb24gaWYgdGhlIHN0cmluZyBjYW5ub3QgYmUgY29udmVydGVkIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHNoYXBlKFN0cmluZyB0ZXh0KSB0aHJvd3MgQXJhYmljU2hhcGluZ0V4Y2VwdGlvbiB7CisgICAgICAgIGNoYXJbXSBzcmMgPSB0ZXh0LnRvQ2hhckFycmF5KCk7CisgICAgICAgIGNoYXJbXSBkZXN0ID0gc3JjOworICAgICAgICBpZiAoKChvcHRpb25zICYgTEVOR1RIX01BU0spID09IExFTkdUSF9HUk9XX1NIUklOSykgJiYKKyAgICAgICAgICAgICgob3B0aW9ucyAmIExFVFRFUlNfTUFTSykgPT0gTEVUVEVSU19VTlNIQVBFKSkgeworCisgICAgICAgICAgICBkZXN0ID0gbmV3IGNoYXJbc3JjLmxlbmd0aCAqIDJdOyAvLyBtYXgKKyAgICAgICAgfQorICAgICAgICBpbnQgbGVuID0gc2hhcGUoc3JjLCAwLCBzcmMubGVuZ3RoLCBkZXN0LCAwLCBkZXN0Lmxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoZGVzdCwgMCwgbGVuKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgQXJhYmljU2hhcGluZyB1c2luZyB0aGUgb3B0aW9ucyBmbGFncy4KKyAgICAgKiBUaGUgZmxhZ3MgYXJlIGFzIGZvbGxvd3M6PGJyPgorICAgICAqICdMRU5HVEgnIGZsYWdzIGNvbnRyb2wgd2hldGhlciB0aGUgdGV4dCBjYW4gY2hhbmdlIHNpemUsIGFuZCBpZiBub3QsCisgICAgICogaG93IHRvIG1haW50YWluIHRoZSBzaXplIG9mIHRoZSB0ZXh0IHdoZW4gTGFtQWxlZiBsaWdhdHVyZXMgYXJlIAorICAgICAqIGZvcm1lZCBvciBicm9rZW4uPGJyPgorICAgICAqICdURVhUX0RJUkVDVElPTicgZmxhZ3MgY29udHJvbCB3aGV0aGVyIHRoZSB0ZXh0IGlzIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiBpbiB2aXN1YWwgb3JkZXIgb3IgaW4gbG9naWNhbCBvcmRlci48YnI+CisgICAgICogJ0xFVFRFUlNfU0hBUEUnIGZsYWdzIGNvbnRyb2wgd2hldGhlciBjb252ZXJzaW9uIGlzIHRvIG9yIGZyb20KKyAgICAgKiBwcmVzZW50YXRpb24gZm9ybXMuPGJyPgorICAgICAqICdESUdJVFMnIGZsYWdzIGNvbnRyb2wgd2hldGhlciBkaWdpdHMgYXJlIHNoYXBlZCwgYW5kIHdoZXRoZXIgZnJvbQorICAgICAqIEV1cm9wZWFuIHRvIEFyYWJpYy1JbmRpYyBvciB2aWNlLXZlcnNhLjxicj4KKyAgICAgKiAnRElHSVRfVFlQRScgZmxhZ3MgY29udHJvbCB3aGV0aGVyIHN0YW5kYXJkIG9yIGV4dGVuZGVkIEFyYWJpYy1JbmRpYworICAgICAqIGRpZ2l0cyBhcmUgdXNlZCB3aGVuIHBlcmZvcm1pbmcgZGlnaXQgY29udmVyc2lvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQXJhYmljU2hhcGluZyhpbnQgb3B0aW9ucykgeworICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICBpZiAoKG9wdGlvbnMgJiBESUdJVFNfTUFTSykgPiAweDgwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJiYWQgRElHSVRTIG9wdGlvbnMiKTsKKyAgICAgICAgfQorICAgICAgICBpc0xvZ2ljYWwgPSAob3B0aW9ucyAmIFRFWFRfRElSRUNUSU9OX01BU0spID09IFRFWFRfRElSRUNUSU9OX0xPR0lDQUw7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWVtb3J5IG9wdGlvbjogYWxsb3cgdGhlIHJlc3VsdCB0byBoYXZlIGEgZGlmZmVyZW50IGxlbmd0aCB0aGFuIHRoZSBzb3VyY2UuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIX0dST1dfU0hSSU5LID0gMDsKKworICAgIC8qKgorICAgICAqIE1lbW9yeSBvcHRpb246IHRoZSByZXN1bHQgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc291cmNlLgorICAgICAqIElmIG1vcmUgcm9vbSBpcyBuZWNlc3NhcnksIHRoZW4gdHJ5IHRvIGNvbnN1bWUgc3BhY2VzIG5leHQgdG8gbW9kaWZpZWQgY2hhcmFjdGVycy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRU5HVEhfRklYRURfU1BBQ0VTX05FQVIgPSAxOworCisgICAgLyoqCisgICAgICogTWVtb3J5IG9wdGlvbjogdGhlIHJlc3VsdCBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzb3VyY2UuCisgICAgICogSWYgbW9yZSByb29tIGlzIG5lY2Vzc2FyeSwgdGhlbiB0cnkgdG8gY29uc3VtZSBzcGFjZXMgYXQgdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0VORCA9IDI7CisKKyAgICAvKioKKyAgICAgKiBNZW1vcnkgb3B0aW9uOiB0aGUgcmVzdWx0IG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNvdXJjZS4KKyAgICAgKiBJZiBtb3JlIHJvb20gaXMgbmVjZXNzYXJ5LCB0aGVuIHRyeSB0byBjb25zdW1lIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFTkdUSF9GSVhFRF9TUEFDRVNfQVRfQkVHSU5OSU5HID0gMzsKKworICAgIC8qKiAKKyAgICAgKiBCaXQgbWFzayBmb3IgbWVtb3J5IG9wdGlvbnMuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFTkdUSF9NQVNLID0gMzsKKworCisgICAgLyoqIAorICAgICAqIERpcmVjdGlvbiBpbmRpY2F0b3I6IHRoZSBzb3VyY2UgaXMgaW4gbG9naWNhbCAoa2V5Ym9hcmQpIG9yZGVyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURVhUX0RJUkVDVElPTl9MT0dJQ0FMID0gMDsKKworICAgIC8qKiAKKyAgICAgKiBEaXJlY3Rpb24gaW5kaWNhdG9yOiB0aGUgc291cmNlIGlzIGluIHZpc3VhbCAoZGlzcGxheSkgb3JkZXIsIHRoYXQgaXMsCisgICAgICogdGhlIGxlZnRtb3N0IGRpc3BsYXllZCBjaGFyYWN0ZXIgaXMgc3RvcmVkIGZpcnN0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFRfRElSRUNUSU9OX1ZJU1VBTF9MVFIgPSA0OworCisgICAgLyoqIAorICAgICAqIEJpdCBtYXNrIGZvciBkaXJlY3Rpb24gaW5kaWNhdG9ycy4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVYVF9ESVJFQ1RJT05fTUFTSyA9IDQ7CisKKworICAgIC8qKgorICAgICAqIExldHRlciBzaGFwaW5nIG9wdGlvbjogZG8gbm90IHBlcmZvcm0gbGV0dGVyIHNoYXBpbmcuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFVFRFUlNfTk9PUCA9IDA7CisKKyAgICAvKiogCisgICAgICogTGV0dGVyIHNoYXBpbmcgb3B0aW9uOiByZXBsYWNlIG5vcm1hdGl2ZSBsZXR0ZXIgY2hhcmFjdGVycyBpbiB0aGUgVSswNjAwIChBcmFiaWMpIGJsb2NrLAorICAgICAqIGJ5IHNoYXBlZCBvbmVzIGluIHRoZSBVK0ZFNzAgKFByZXNlbnRhdGlvbiBGb3JtcyBCKSBibG9jay4gUGVyZm9ybXMgTGFtLUFsZWYgbGlnYXR1cmUKKyAgICAgKiBzdWJzdGl0dXRpb24uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVUVEVSU19TSEFQRSA9IDg7CisKKyAgICAvKiogCisgICAgICogTGV0dGVyIHNoYXBpbmcgb3B0aW9uOiByZXBsYWNlIHNoYXBlZCBsZXR0ZXIgY2hhcmFjdGVycyBpbiB0aGUgVStGRTcwIChQcmVzZW50YXRpb24gRm9ybXMgQikgYmxvY2sKKyAgICAgKiBieSBub3JtYXRpdmUgb25lcyBpbiB0aGUgVSswNjAwIChBcmFiaWMpIGJsb2NrLiAgQ29udmVydHMgTGFtLUFsZWYgbGlnYXR1cmVzIHRvIHBhaXJzIG9mIExhbSBhbmQKKyAgICAgKiBBbGVmIGNoYXJhY3RlcnMsIGNvbnN1bWluZyBzcGFjZXMgaWYgcmVxdWlyZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVUVEVSU19VTlNIQVBFID0gMHgxMDsKKworICAgIC8qKgorICAgICAqIExldHRlciBzaGFwaW5nIG9wdGlvbjogcmVwbGFjZSBub3JtYXRpdmUgbGV0dGVyIGNoYXJhY3RlcnMgaW4gdGhlIFUrMDYwMCAoQXJhYmljKSBibG9jaywKKyAgICAgKiBleGNlcHQgZm9yIHRoZSBUQVNIS0VFTCBjaGFyYWN0ZXJzIGF0IFUrMDY0Qi4uLlUrMDY1MiwgYnkgc2hhcGVkIG9uZXMgaW4gdGhlIFUrRmU3MAorICAgICAqIChQcmVzZW50YXRpb24gRm9ybXMgQikgYmxvY2suICBUaGUgVEFTSEtFRUwgY2hhcmFjdGVycyB3aWxsIGFsd2F5cyBiZSBjb252ZXJ0ZWQgdG8KKyAgICAgKiB0aGUgaXNvbGF0ZWQgZm9ybXMgcmF0aGVyIHRoYW4gdG8gdGhlaXIgY29ycmVjdCBzaGFwZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVRURVJTX1NIQVBFX1RBU0hLRUVMX0lTT0xBVEVEID0gMHgxODsKKworICAgIC8qKiAKKyAgICAgKiBCaXQgbWFzayBmb3IgbGV0dGVyIHNoYXBpbmcgb3B0aW9ucy4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVUVEVSU19NQVNLID0gMHgxODsKKworCisgICAgLyoqIAorICAgICAqIERpZ2l0IHNoYXBpbmcgb3B0aW9uOiBkbyBub3QgcGVyZm9ybSBkaWdpdCBzaGFwaW5nLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESUdJVFNfTk9PUCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBEaWdpdCBzaGFwaW5nIG9wdGlvbjogUmVwbGFjZSBFdXJvcGVhbiBkaWdpdHMgKFUrMDAzMC4uLlUrMDAzOSkgYnkgQXJhYmljLUluZGljIGRpZ2l0cy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESUdJVFNfRU4yQU4gPSAweDIwOworCisgICAgLyoqCisgICAgICogRGlnaXQgc2hhcGluZyBvcHRpb246IFJlcGxhY2UgQXJhYmljLUluZGljIGRpZ2l0cyBieSBFdXJvcGVhbiBkaWdpdHMgKFUrMDAzMC4uLlUrMDAzOSkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRTX0FOMkVOID0gMHg0MDsKKworICAgIC8qKgorICAgICAqIERpZ2l0IHNoYXBpbmcgb3B0aW9uOgorICAgICAqIFJlcGxhY2UgRXVyb3BlYW4gZGlnaXRzIChVKzAwMzAuLi5VKzAwMzkpIGJ5IEFyYWJpYy1JbmRpYyBkaWdpdHMKKyAgICAgKiBpZiB0aGUgbW9zdCByZWNlbnQgc3Ryb25nbHkgZGlyZWN0aW9uYWwgY2hhcmFjdGVyCisgICAgICogaXMgYW4gQXJhYmljIGxldHRlciAoaXRzIEJpZGkgZGlyZWN0aW9uIHZhbHVlIGlzIFJJR0hUX1RPX0xFRlRfQVJBQklDKS4gCisgICAgICogVGhlIGluaXRpYWwgc3RhdGUgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IGlzIGFzc3VtZWQgdG8gYmUgbm90IGFuIEFyYWJpYywKKyAgICAgKiBsZXR0ZXIsIHNvIEV1cm9wZWFuIGRpZ2l0cyBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQgd2lsbCBub3QgY2hhbmdlLgorICAgICAqIENvbXBhcmUgdG8gRElHSVRTX0FMRU4yQU5fSU5JVF9BTC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESUdJVFNfRU4yQU5fSU5JVF9MUiA9IDB4NjA7CisKKyAgICAvKioKKyAgICAgKiBEaWdpdCBzaGFwaW5nIG9wdGlvbjoKKyAgICAgKiBSZXBsYWNlIEV1cm9wZWFuIGRpZ2l0cyAoVSswMDMwLi4uVSswMDM5KSBieSBBcmFiaWMtSW5kaWMgZGlnaXRzCisgICAgICogaWYgdGhlIG1vc3QgcmVjZW50IHN0cm9uZ2x5IGRpcmVjdGlvbmFsIGNoYXJhY3RlcgorICAgICAqIGlzIGFuIEFyYWJpYyBsZXR0ZXIgKGl0cyBCaWRpIGRpcmVjdGlvbiB2YWx1ZSBpcyBSSUdIVF9UT19MRUZUX0FSQUJJQykuIAorICAgICAqIFRoZSBpbml0aWFsIHN0YXRlIGF0IHRoZSBzdGFydCBvZiB0aGUgdGV4dCBpcyBhc3N1bWVkIHRvIGJlIGFuIEFyYWJpYywKKyAgICAgKiBsZXR0ZXIsIHNvIEV1cm9wZWFuIGRpZ2l0cyBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQgd2lsbCBjaGFuZ2UuCisgICAgICogQ29tcGFyZSB0byBESUdJVFNfQUxFTjJBTl9JTlRfTFIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRTX0VOMkFOX0lOSVRfQUwgPSAweDgwOworCisgICAgLyoqIE5vdCBhIHZhbGlkIG9wdGlvbiB2YWx1ZS4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRTX1JFU0VSVkVEID0gMHhhMDsKKworICAgIC8qKiAKKyAgICAgKiBCaXQgbWFzayBmb3IgZGlnaXQgc2hhcGluZyBvcHRpb25zLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESUdJVFNfTUFTSyA9IDB4ZTA7CisKKyAgICAvKiogCisgICAgICogRGlnaXQgdHlwZSBvcHRpb246IFVzZSBBcmFiaWMtSW5kaWMgZGlnaXRzIChVKzA2NjAuLi5VKzA2NjkpLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESUdJVF9UWVBFX0FOID0gMDsKKworICAgIC8qKiAKKyAgICAgKiBEaWdpdCB0eXBlIG9wdGlvbjogVXNlIEVhc3Rlcm4gKEV4dGVuZGVkKSBBcmFiaWMtSW5kaWMgZGlnaXRzIChVKzA2ZjAuLi5VKzA2ZjkpLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESUdJVF9UWVBFX0FOX0VYVEVOREVEID0gMHgxMDA7CisKKyAgICAvKiogCisgICAgICogQml0IG1hc2sgZm9yIGRpZ2l0IHR5cGUgb3B0aW9ucy4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElHSVRfVFlQRV9NQVNLID0gMHgwMTAwOyAvLyAweDNmMDA/CisKKyAgICAvKioKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IHJocykgeworICAgICAgICByZXR1cm4gcmhzICE9IG51bGwgJiYgCisgICAgICAgICAgICByaHMuZ2V0Q2xhc3MoKSA9PSBBcmFiaWNTaGFwaW5nLmNsYXNzICYmIAorICAgICAgICAgICAgb3B0aW9ucyA9PSAoKEFyYWJpY1NoYXBpbmcpcmhzKS5vcHRpb25zOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgIHJldHVybiBvcHRpb25zOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworICAgICAgICBidWYuYXBwZW5kKCdbJyk7CisgICAgICAgIHN3aXRjaCAob3B0aW9ucyAmIExFTkdUSF9NQVNLKSB7CisgICAgICAgIGNhc2UgTEVOR1RIX0dST1dfU0hSSU5LOiBidWYuYXBwZW5kKCJncm93L3NocmluayIpOyBicmVhazsKKyAgICAgICAgY2FzZSBMRU5HVEhfRklYRURfU1BBQ0VTX05FQVI6IGJ1Zi5hcHBlbmQoInNwYWNlcyBuZWFyIik7IGJyZWFrOworICAgICAgICBjYXNlIExFTkdUSF9GSVhFRF9TUEFDRVNfQVRfRU5EOiBidWYuYXBwZW5kKCJzcGFjZXMgYXQgZW5kIik7IGJyZWFrOworICAgICAgICBjYXNlIExFTkdUSF9GSVhFRF9TUEFDRVNfQVRfQkVHSU5OSU5HOiBidWYuYXBwZW5kKCJzcGFjZXMgYXQgYmVnaW5uaW5nIik7IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3B0aW9ucyAmIFRFWFRfRElSRUNUSU9OX01BU0spIHsKKyAgICAgICAgY2FzZSBURVhUX0RJUkVDVElPTl9MT0dJQ0FMOiBidWYuYXBwZW5kKCIsIGxvZ2ljYWwiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgVEVYVF9ESVJFQ1RJT05fVklTVUFMX0xUUjogYnVmLmFwcGVuZCgiLCB2aXN1YWwiKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcHRpb25zICYgTEVUVEVSU19NQVNLKSB7CisgICAgICAgIGNhc2UgTEVUVEVSU19OT09QOiBidWYuYXBwZW5kKCIsIG5vIGxldHRlciBzaGFwaW5nIik7IGJyZWFrOworICAgICAgICBjYXNlIExFVFRFUlNfU0hBUEU6IGJ1Zi5hcHBlbmQoIiwgc2hhcGUgbGV0dGVycyIpOyBicmVhazsKKyAgICAgICAgY2FzZSBMRVRURVJTX1NIQVBFX1RBU0hLRUVMX0lTT0xBVEVEOiBidWYuYXBwZW5kKCIsIHNoYXBlIGxldHRlcnMgdGFzaGtlZWwgaXNvbGF0ZWQiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgTEVUVEVSU19VTlNIQVBFOiBidWYuYXBwZW5kKCIsIHVuc2hhcGUgbGV0dGVycyIpOyBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wdGlvbnMgJiBESUdJVFNfTUFTSykgeworICAgICAgICBjYXNlIERJR0lUU19OT09QOiBidWYuYXBwZW5kKCIsIG5vIGRpZ2l0IHNoYXBpbmciKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRElHSVRTX0VOMkFOOiBidWYuYXBwZW5kKCIsIHNoYXBlIGRpZ2l0cyB0byBBTiIpOyBicmVhazsKKyAgICAgICAgY2FzZSBESUdJVFNfQU4yRU46IGJ1Zi5hcHBlbmQoIiwgc2hhcGUgZGlnaXRzIHRvIEVOIik7IGJyZWFrOworICAgICAgICBjYXNlIERJR0lUU19FTjJBTl9JTklUX0xSOiBidWYuYXBwZW5kKCIsIHNoYXBlIGRpZ2l0cyB0byBBTiBjb250ZXh0dWFsbHk6IGRlZmF1bHQgRU4iKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRElHSVRTX0VOMkFOX0lOSVRfQUw6IGJ1Zi5hcHBlbmQoIiwgc2hhcGUgZGlnaXRzIHRvIEFOIGNvbnRleHR1YWxseTogZGVmYXVsdCBBTCIpOyBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wdGlvbnMgJiBESUdJVF9UWVBFX01BU0spIHsKKyAgICAgICAgY2FzZSBESUdJVF9UWVBFX0FOOiBidWYuYXBwZW5kKCIsIHN0YW5kYXJkIEFyYWJpYy1JbmRpYyBkaWdpdHMiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRElHSVRfVFlQRV9BTl9FWFRFTkRFRDogYnVmLmFwcGVuZCgiLCBleHRlbmRlZCBBcmFiaWMtSW5kaWMgZGlnaXRzIik7IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJ1Zi5hcHBlbmQoIl0iKTsKKworICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBwb3J0ZWQgYXBpCisgICAgLy8KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJUlJFTEVWQU5UID0gNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFNVFlQRSA9IDE2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTEVGVFlQRSA9IDMyOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTktSID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElOS0wgPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5LX01BU0sgPSAzOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGlycmVsZXZhbnRQb3NbXSA9IHsgCisgICAgICAgIDB4MCwgMHgyLCAweDQsIDB4NiwgMHg4LCAweEEsIDB4QywgMHhFIAorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIGNvbnZlcnRMYW1BbGVmW10gPSAgeworICAgICAgICAnXHUwNjIyJywgLy8gRkVGNSAKKyAgICAgICAgJ1x1MDYyMicsIC8vIEZFRjYKKyAgICAgICAgJ1x1MDYyMycsIC8vIEZFRjcKKyAgICAgICAgJ1x1MDYyMycsIC8vIEZFRjgKKyAgICAgICAgJ1x1MDYyNScsIC8vIEZFRjkKKyAgICAgICAgJ1x1MDYyNScsIC8vIEZFRkEKKyAgICAgICAgJ1x1MDYyNycsIC8vIEZFRkIKKyAgICAgICAgJ1x1MDYyNycgIC8vIEZFRkMgCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgY29udmVydE5vcm1hbGl6ZWRMYW1BbGVmW10gPSB7CisgICAgICAgICdcdTA2MjInLCAvLyAwNjVDCisgICAgICAgICdcdTA2MjMnLCAvLyAwNjVECisgICAgICAgICdcdTA2MjUnLCAvLyAwNjVFCisgICAgICAgICdcdTA2MjcnLCAvLyAwNjVGCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIGFyYUxpbmsgPSB7CisgICAgICAgIDEgICAgICAgICAgICsgMzIgKyAyNTYgKiAweDExLCAgLyoweDA2MjIqLworICAgICAgICAxICAgICAgICAgICArIDMyICsgMjU2ICogMHgxMywgIC8qMHgwNjIzKi8KKyAgICAgICAgMSAgICAgICAgICAgICAgICArIDI1NiAqIDB4MTUsICAvKjB4MDYyNCovCisgICAgICAgIDEgICAgICAgICAgICsgMzIgKyAyNTYgKiAweDE3LCAgLyoweDA2MjUqLworICAgICAgICAxICsgMiAgICAgICAgICAgICsgMjU2ICogMHgxOSwgIC8qMHgwNjI2Ki8KKyAgICAgICAgMSAgICAgICAgICAgKyAzMiArIDI1NiAqIDB4MUQsICAvKjB4MDYyNyovCisgICAgICAgIDEgKyAyICAgICAgICAgICAgKyAyNTYgKiAweDFGLCAgLyoweDA2MjgqLworICAgICAgICAxICAgICAgICAgICAgICAgICsgMjU2ICogMHgyMywgIC8qMHgwNjI5Ki8KKyAgICAgICAgMSArIDIgICAgICAgICAgICArIDI1NiAqIDB4MjUsICAvKjB4MDYyQSovCisgICAgICAgIDEgKyAyICAgICAgICAgICAgKyAyNTYgKiAweDI5LCAgLyoweDA2MkIqLworICAgICAgICAxICsgMiAgICAgICAgICAgICsgMjU2ICogMHgyRCwgIC8qMHgwNjJDKi8KKyAgICAgICAgMSArIDIgICAgICAgICAgICArIDI1NiAqIDB4MzEsICAvKjB4MDYyRCovCisgICAgICAgIDEgKyAyICAgICAgICAgICAgKyAyNTYgKiAweDM1LCAgLyoweDA2MkUqLworICAgICAgICAxICAgICAgICAgICAgICAgICsgMjU2ICogMHgzOSwgIC8qMHgwNjJGKi8KKyAgICAgICAgMSAgICAgICAgICAgICAgICArIDI1NiAqIDB4M0IsICAvKjB4MDYzMCovCisgICAgICAgIDEgICAgICAgICAgICAgICAgKyAyNTYgKiAweDNELCAgLyoweDA2MzEqLworICAgICAgICAxICAgICAgICAgICAgICAgICsgMjU2ICogMHgzRiwgIC8qMHgwNjMyKi8KKyAgICAgICAgMSArIDIgICAgICAgICAgICArIDI1NiAqIDB4NDEsICAvKjB4MDYzMyovCisgICAgICAgIDEgKyAyICAgICAgICAgICAgKyAyNTYgKiAweDQ1LCAgLyoweDA2MzQqLworICAgICAgICAxICsgMiAgICAgICAgICAgICsgMjU2ICogMHg0OSwgIC8qMHgwNjM1Ki8KKyAgICAgICAgMSArIDIgICAgICAgICAgICArIDI1NiAqIDB4NEQsICAvKjB4MDYzNiovCisgICAgICAgIDEgKyAyICAgICAgICAgICAgKyAyNTYgKiAweDUxLCAgLyoweDA2MzcqLworICAgICAgICAxICsgMiAgICAgICAgICAgICsgMjU2ICogMHg1NSwgIC8qMHgwNjM4Ki8KKyAgICAgICAgMSArIDIgICAgICAgICAgICArIDI1NiAqIDB4NTksICAvKjB4MDYzOSovCisgICAgICAgIDEgKyAyICAgICAgICAgICAgKyAyNTYgKiAweDVELCAgLyoweDA2M0EqLworICAgICAgICAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgIC8qMHgwNjNCLTB4MDYzRiovCisgICAgICAgIDEgKyAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDA2NDAqLworICAgICAgICAxICsgMiAgICAgICAgICAgICsgMjU2ICogMHg2MSwgIC8qMHgwNjQxKi8KKyAgICAgICAgMSArIDIgICAgICAgICAgICArIDI1NiAqIDB4NjUsICAvKjB4MDY0MiovCisgICAgICAgIDEgKyAyICAgICAgICAgICAgKyAyNTYgKiAweDY5LCAgLyoweDA2NDMqLworICAgICAgICAxICsgMiAgICAgICArIDE2ICsgMjU2ICogMHg2RCwgIC8qMHgwNjQ0Ki8KKyAgICAgICAgMSArIDIgICAgICAgICAgICArIDI1NiAqIDB4NzEsICAvKjB4MDY0NSovCisgICAgICAgIDEgKyAyICAgICAgICAgICAgKyAyNTYgKiAweDc1LCAgLyoweDA2NDYqLworICAgICAgICAxICsgMiAgICAgICAgICAgICsgMjU2ICogMHg3OSwgIC8qMHgwNjQ3Ki8KKyAgICAgICAgMSAgICAgICAgICAgICAgICArIDI1NiAqIDB4N0QsICAvKjB4MDY0OCovCisgICAgICAgIDEgICAgICAgICAgICAgICAgKyAyNTYgKiAweDdGLCAgLyoweDA2NDkqLworICAgICAgICAxICsgMiAgICAgICAgICAgICsgMjU2ICogMHg4MSwgIC8qMHgwNjRBKi8KKyAgICAgICAgNCwgNCwgNCwgNCwgICAgICAgICAgICAgICAgICAgICAvKjB4MDY0Qi0weDA2NEUqLworICAgICAgICA0LCA0LCA0LCA0LCAgICAgICAgICAgICAgICAgICAgIC8qMHgwNjRGLTB4MDY1MiovCisgICAgICAgIDQsIDQsIDQsIDAsIDAsICAgICAgICAgICAgICAgICAgLyoweDA2NTMtMHgwNjU3Ki8KKyAgICAgICAgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAvKjB4MDY1OC0weDA2NUIqLworICAgICAgICAxICAgICAgICAgICAgICAgICsgMjU2ICogMHg4NSwgIC8qMHgwNjVDKi8KKyAgICAgICAgMSAgICAgICAgICAgICAgICArIDI1NiAqIDB4ODcsICAvKjB4MDY1RCovCisgICAgICAgIDEgICAgICAgICAgICAgICAgKyAyNTYgKiAweDg5LCAgLyoweDA2NUUqLworICAgICAgICAxICAgICAgICAgICAgICAgICsgMjU2ICogMHg4QiwgIC8qMHgwNjVGKi8KKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAvKjB4MDY2MC0weDA2NjQqLworICAgICAgICAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgIC8qMHgwNjY1LTB4MDY2OSovCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgLyoweDA2NkEtMHgwNjZGKi8KKyAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDY3MCovCisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDA2NzEqLworICAgICAgICAxICAgICAgICAgICArIDMyLCAgICAgICAgICAgICAgIC8qMHgwNjcyKi8KKyAgICAgICAgMSAgICAgICAgICAgKyAzMiwgICAgICAgICAgICAgICAvKjB4MDY3MyovCisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDA2NzQqLworICAgICAgICAxICAgICAgICAgICArIDMyLCAgICAgICAgICAgICAgIC8qMHgwNjc1Ki8KKyAgICAgICAgMSwgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDY3Ni0weDA2NzcqLworICAgICAgICAxKzIsIDErMiwgMSsyLCAxKzIsIDErMiwgMSsyLCAgIC8qMHgwNjc4LTB4MDY3RCovCisgICAgICAgIDErMiwgMSsyLCAxKzIsIDErMiwgMSsyLCAxKzIsICAgLyoweDA2N0UtMHgwNjgzKi8KKyAgICAgICAgMSsyLCAxKzIsIDErMiwgMSsyLCAgICAgICAgICAgICAvKjB4MDY4NC0weDA2ODcqLworICAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAgIC8qMHgwNjg4LTB4MDY5MSovCisgICAgICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAgLyoweDA2OTItMHgwNjk5Ki8KKyAgICAgICAgMSsyLCAxKzIsIDErMiwgMSsyLCAxKzIsIDErMiwgICAvKjB4MDY5QS0weDA2QTMqLworICAgICAgICAxKzIsIDErMiwgMSsyLCAxKzIsICAgICAgICAgICAgIC8qMHgwNjlBLTB4MDZBMyovCisgICAgICAgIDErMiwgMSsyLCAxKzIsIDErMiwgMSsyLCAxKzIsICAgLyoweDA2QTQtMHgwNkFEKi8KKyAgICAgICAgMSsyLCAxKzIsIDErMiwgMSsyLCAgICAgICAgICAgICAvKjB4MDZBNC0weDA2QUQqLworICAgICAgICAxKzIsIDErMiwgMSsyLCAxKzIsIDErMiwgMSsyLCAgIC8qMHgwNkFFLTB4MDZCNyovCisgICAgICAgIDErMiwgMSsyLCAxKzIsIDErMiwgICAgICAgICAgICAgLyoweDA2QUUtMHgwNkI3Ki8KKyAgICAgICAgMSsyLCAxKzIsIDErMiwgMSsyLCAxKzIsIDErMiwgICAvKjB4MDZCOC0weDA2QkYqLworICAgICAgICAxKzIsIDErMiwgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwNkI4LTB4MDZCRiovCisgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDA2QzAqLworICAgICAgICAxKzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwNkMxKi8KKyAgICAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgICAvKjB4MDZDMi0weDA2Q0IqLworICAgICAgICAxKzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwNkNDKi8KKyAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDZDRCovCisgICAgICAgIDErMiwgMSsyLCAxKzIsIDErMiwgICAgICAgICAgICAgLyoweDA2Q0UtMHgwNkQxKi8KKyAgICAgICAgMSwgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDZEMi0weDA2RDMqLworICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBwcmVzTGluayA9IHsKKyAgICAgICAgMSArIDIsICAgICAgICAgICAgICAgICAgICAgICAgLyoweEZFNzAqLworICAgICAgICAxICsgMiwgICAgICAgICAgICAgICAgICAgICAgICAvKjB4RkU3MSovCisgICAgICAgIDEgKyAyLCAwLCAxKyAyLCAwLCAxKyAyLCAgICAgIC8qMHhGRTcyLTB4RkU3NiovCisgICAgICAgIDEgKyAyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qMHhGRTc3Ki8KKyAgICAgICAgMSsgMiwgMSArIDIsIDErMiwgMSArIDIsICAgICAgLyoweEZFNzgtMHhGRTgxKi8KKyAgICAgICAgMSsgMiwgMSArIDIsIDErMiwgMSArIDIsICAgICAgLyoweEZFODItMHhGRTg1Ki8KKyAgICAgICAgMCwgMCArIDMyLCAxICsgMzIsIDAgKyAzMiwgICAgLyoweEZFODYtMHhGRTg5Ki8KKyAgICAgICAgMSArIDMyLCAwLCAxLCAgMCArIDMyLCAgICAgICAgLyoweEZFOEEtMHhGRThEKi8KKyAgICAgICAgMSArIDMyLCAwLCAyLCAgMSArIDIsICAgICAgICAgLyoweEZFOEUtMHhGRTkxKi8KKyAgICAgICAgMSwgMCArIDMyLCAxICsgMzIsIDAsICAgICAgICAgLyoweEZFOTItMHhGRTk1Ki8KKyAgICAgICAgMiwgMSArIDIsIDEsIDAsICAgICAgICAgICAgICAgLyoweEZFOTYtMHhGRTk5Ki8KKyAgICAgICAgMSwgMCwgMiwgMSArIDIsICAgICAgICAgICAgICAgLyoweEZFOUEtMHhGRTlEKi8KKyAgICAgICAgMSwgMCwgMiwgMSArIDIsICAgICAgICAgICAgICAgLyoweEZFOUUtMHhGRUExKi8KKyAgICAgICAgMSwgMCwgMiwgMSArIDIsICAgICAgICAgICAgICAgLyoweEZFQTItMHhGRUE1Ki8KKyAgICAgICAgMSwgMCwgMiwgMSArIDIsICAgICAgICAgICAgICAgLyoweEZFQTYtMHhGRUE5Ki8KKyAgICAgICAgMSwgMCwgMiwgMSArIDIsICAgICAgICAgICAgICAgLyoweEZFQUEtMHhGRUFEKi8KKyAgICAgICAgMSwgMCwgMSwgMCwgICAgICAgICAgICAgICAgICAgLyoweEZFQUUtMHhGRUIxKi8KKyAgICAgICAgMSwgMCwgMSwgMCwgICAgICAgICAgICAgICAgICAgLyoweEZFQjItMHhGRUI1Ki8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFQjYtMHhGRUI5Ki8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFQkEtMHhGRUJEKi8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFQkUtMHhGRUMxKi8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFQzItMHhGRUM1Ki8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFQzYtMHhGRUM5Ki8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFQ0EtMHhGRUNEKi8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFQ0UtMHhGRUQxKi8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFRDItMHhGRUQ1Ki8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFRDYtMHhGRUQ5Ki8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFREEtMHhGRUREKi8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFREUtMHhGRUUxKi8KKyAgICAgICAgMSwgMCArIDE2LCAyICsgMTYsIDEgKyAyICsxNiwgLyoweEZFRTItMHhGRUU1Ki8KKyAgICAgICAgMSArIDE2LCAwLCAyLCAxKzIsICAgICAgICAgICAgLyoweEZFRTYtMHhGRUU5Ki8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFRUEtMHhGRUVEKi8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFRUUtMHhGRUYxKi8KKyAgICAgICAgMSwgMCwgMSwgMCwgICAgICAgICAgICAgICAgICAgLyoweEZFRjItMHhGRUY1Ki8KKyAgICAgICAgMSwgMCwgMiwgMSsyLCAgICAgICAgICAgICAgICAgLyoweEZFRjYtMHhGRUY5Ki8KKyAgICAgICAgMSwgMCwgMSwgMCwgICAgICAgICAgICAgICAgICAgLyoweEZFRkEtMHhGRUZEKi8KKyAgICAgICAgMSwgMCwgMSwgMCwKKyAgICAgICAgMQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSBjb252ZXJ0RkV0bzA2ID0geworICAgICAgICAvKioqKioqKioqKiowKioqKioqMSoqKioqKjIqKioqKiozKioqKioqNCoqKioqKjUqKioqKio2KioqKioqNyoqKioqKjgqKioqKio5KioqKioqQSoqKioqKkIqKioqKipDKioqKioqRCoqKioqKkUqKioqKipGKioqLworICAgICAgICAvKkZFNyovICAgMHg2NEIsIDB4NjRCLCAweDY0QywgMHg2NEMsIDB4NjRELCAweDY0RCwgMHg2NEUsIDB4NjRFLCAweDY0RiwgMHg2NEYsIDB4NjUwLCAweDY1MCwgMHg2NTEsIDB4NjUxLCAweDY1MiwgMHg2NTIsCisgICAgICAgIC8qRkU4Ki8gICAweDYyMSwgMHg2MjIsIDB4NjIyLCAweDYyMywgMHg2MjMsIDB4NjI0LCAweDYyNCwgMHg2MjUsIDB4NjI1LCAweDYyNiwgMHg2MjYsIDB4NjI2LCAweDYyNiwgMHg2MjcsIDB4NjI3LCAweDYyOCwKKyAgICAgICAgLypGRTkqLyAgIDB4NjI4LCAweDYyOCwgMHg2MjgsIDB4NjI5LCAweDYyOSwgMHg2MkEsIDB4NjJBLCAweDYyQSwgMHg2MkEsIDB4NjJCLCAweDYyQiwgMHg2MkIsIDB4NjJCLCAweDYyQywgMHg2MkMsIDB4NjJDLAorICAgICAgICAvKkZFQSovICAgMHg2MkMsIDB4NjJELCAweDYyRCwgMHg2MkQsIDB4NjJELCAweDYyRSwgMHg2MkUsIDB4NjJFLCAweDYyRSwgMHg2MkYsIDB4NjJGLCAweDYzMCwgMHg2MzAsIDB4NjMxLCAweDYzMSwgMHg2MzIsCisgICAgICAgIC8qRkVCKi8gICAweDYzMiwgMHg2MzMsIDB4NjMzLCAweDYzMywgMHg2MzMsIDB4NjM0LCAweDYzNCwgMHg2MzQsIDB4NjM0LCAweDYzNSwgMHg2MzUsIDB4NjM1LCAweDYzNSwgMHg2MzYsIDB4NjM2LCAweDYzNiwKKyAgICAgICAgLypGRUMqLyAgIDB4NjM2LCAweDYzNywgMHg2MzcsIDB4NjM3LCAweDYzNywgMHg2MzgsIDB4NjM4LCAweDYzOCwgMHg2MzgsIDB4NjM5LCAweDYzOSwgMHg2MzksIDB4NjM5LCAweDYzQSwgMHg2M0EsIDB4NjNBLAorICAgICAgICAvKkZFRCovICAgMHg2M0EsIDB4NjQxLCAweDY0MSwgMHg2NDEsIDB4NjQxLCAweDY0MiwgMHg2NDIsIDB4NjQyLCAweDY0MiwgMHg2NDMsIDB4NjQzLCAweDY0MywgMHg2NDMsIDB4NjQ0LCAweDY0NCwgMHg2NDQsCisgICAgICAgIC8qRkVFKi8gICAweDY0NCwgMHg2NDUsIDB4NjQ1LCAweDY0NSwgMHg2NDUsIDB4NjQ2LCAweDY0NiwgMHg2NDYsIDB4NjQ2LCAweDY0NywgMHg2NDcsIDB4NjQ3LCAweDY0NywgMHg2NDgsIDB4NjQ4LCAweDY0OSwKKyAgICAgICAgLypGRUYqLyAgIDB4NjQ5LCAweDY0QSwgMHg2NEEsIDB4NjRBLCAweDY0QSwgMHg2NUMsIDB4NjVDLCAweDY1RCwgMHg2NUQsIDB4NjVFLCAweDY1RSwgMHg2NUYsIDB4NjVGCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBzaGFwZVRhYmxlW11bXVtdID0geworICAgICAgICB7IHswLDAsMCwwfSwgezAsMCwwLDB9LCB7MCwxLDAsM30sIHswLDEsMCwxfSB9LAorICAgICAgICB7IHswLDAsMiwyfSwgezAsMCwxLDJ9LCB7MCwxLDEsMn0sIHswLDEsMSwzfSB9LAorICAgICAgICB7IHswLDAsMCwwfSwgezAsMCwwLDB9LCB7MCwxLDAsM30sIHswLDEsMCwzfSB9LAorICAgICAgICB7IHswLDAsMSwyfSwgezAsMCwxLDJ9LCB7MCwxLDEsMn0sIHswLDEsMSwzfSB9CisgICAgfTsKKworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiBzaGFwZXMgRXVyb3BlYW4gZGlnaXRzIHRvIEFyYWJpYy1JbmRpYyBkaWdpdHMKKyAgICAgKiBpbi1wbGFjZSwgd3JpdGluZyBvdmVyIHRoZSBpbnB1dCBjaGFyYWN0ZXJzLiAgRGF0YSBpcyBpbiB2aXN1YWwKKyAgICAgKiBvcmRlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2hhcGVUb0FyYWJpY0RpZ2l0c1dpdGhDb250ZXh0KGNoYXJbXSBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlnaXRCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBsYXN0U3Ryb25nV2FzQUwpIHsKKworICAgICAgICBkaWdpdEJhc2UgLT0gJzAnOyAvLyBtb3ZlIGNvbW1vbiBhZGp1c3RtZW50IG91dCBvZiBsb29wCisKKyAgICAgICAgZm9yKGludCBpID0gc3RhcnQgKyBsZW5ndGg7IC0taSA+PSBzdGFydDspIHsKKyAgICAgICAgICAgIGNoYXIgY2ggPSBkZXN0W2ldOworICAgICAgICAgICAgc3dpdGNoIChVQ2hhcmFjdGVyLmdldERpcmVjdGlvbihjaCkpIHsKKyAgICAgICAgICAgIGNhc2UgVUNoYXJhY3RlckRpcmVjdGlvbi5MRUZUX1RPX1JJR0hUOgorICAgICAgICAgICAgY2FzZSBVQ2hhcmFjdGVyRGlyZWN0aW9uLlJJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICAgICAgbGFzdFN0cm9uZ1dhc0FMID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVDaGFyYWN0ZXJEaXJlY3Rpb24uUklHSFRfVE9fTEVGVF9BUkFCSUM6CisgICAgICAgICAgICAgICAgbGFzdFN0cm9uZ1dhc0FMID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVUNoYXJhY3RlckRpcmVjdGlvbi5FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgICAgICAgICAgaWYgKGxhc3RTdHJvbmdXYXNBTCAmJiBjaCA8PSAnXHUwMDM5JykgeworICAgICAgICAgICAgICAgICAgICBkZXN0W2ldID0gKGNoYXIpKGNoICsgZGlnaXRCYXNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOYW1lICAgIDogaW52ZXJ0QnVmZmVyCisgICAgICogRnVuY3Rpb246IFRoaXMgZnVuY3Rpb24gaW52ZXJ0cyB0aGUgYnVmZmVyLCBpdCdzIHVzZWQKKyAgICAgKiAgICAgICAgICAgaW4gY2FzZSB0aGUgdXNlciBzcGVjaWZpZXMgdGhlIGJ1ZmZlciB0byBiZQorICAgICAqICAgICAgICAgICBURVhUX0RJUkVDVElPTl9MT0dJQ0FMCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbnZlcnRCdWZmZXIoY2hhcltdIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkgeworCisgICAgICAgIGZvcihpbnQgaSA9IHN0YXJ0LCBqID0gc3RhcnQgKyBsZW5ndGggLSAxOyBpIDwgajsgaSsrLCAtLWopIHsKKyAgICAgICAgICAgIGNoYXIgdGVtcCA9IGJ1ZmZlcltpXTsKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGJ1ZmZlcltqXTsKKyAgICAgICAgICAgIGJ1ZmZlcltqXSA9IHRlbXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIE5hbWUgICAgOiBjaGFuZ2VMYW1BbGVmCisgICAgICogRnVuY3Rpb246IENvbnZlcnRzIHRoZSBBbGVmIGNoYXJhY3RlcnMgaW50byBhbiBlcXVpdmFsZW50CisgICAgICogICAgICAgICAgIExhbUFsZWYgbG9jYXRpb24gaW4gdGhlIDB4MDZ4eCBSYW5nZSwgdGhpcyBpcyBhbgorICAgICAqICAgICAgICAgICBpbnRlcm1lZGlhdGUgc3RhZ2UgaW4gdGhlIG9wZXJhdGlvbiBvZiB0aGUgcHJvZ3JhbQorICAgICAqICAgICAgICAgICBsYXRlciBpdCdsbCBiZSBjb252ZXJ0ZWQgaW50byB0aGUgMHhGRXh4IExhbUFsZWZzIAorICAgICAqICAgICAgICAgICBpbiB0aGUgc2hhcGluZyBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyIGNoYW5nZUxhbUFsZWYoY2hhciBjaCkgeworICAgICAgICBzd2l0Y2goY2gpIHsKKyAgICAgICAgY2FzZSAnXHUwNjIyJzogcmV0dXJuICdcdTA2NUMnOworICAgICAgICBjYXNlICdcdTA2MjMnOiByZXR1cm4gJ1x1MDY1RCc7CisgICAgICAgIGNhc2UgJ1x1MDYyNSc6IHJldHVybiAnXHUwNjVFJzsKKyAgICAgICAgY2FzZSAnXHUwNjI3JzogcmV0dXJuICdcdTA2NUYnOworICAgICAgICBkZWZhdWx0OiAgcmV0dXJuICdcdTAwMDAnOyAvLyBub3QgYSBsYW1hbGVmCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIE5hbWUgICAgOiBzcGVjaWFsQ2hhcgorICAgICAqIEZ1bmN0aW9uOiBTcGVjaWFsIEFyYWJpYyBjaGFyYWN0ZXJzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBpbiB0aGUgc2hhcGVVbmljb2RlCisgICAgICogICAgICAgICAgIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMSBvciAyIGZvciB0aGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgc3BlY2lhbENoYXIoY2hhciBjaCkgeworICAgICAgICBpZiAoKGNoID4gJ1x1MDYyMScgJiYgY2ggPCAnXHUwNjI2JykgfHwgCisgICAgICAgICAgICAoY2ggPT0gJ1x1MDYyNycpIHx8CisgICAgICAgICAgICAoY2ggPiAnXHUwNjJFJyAmJiBjaCA8ICdcdTA2MzMnKSB8fAorICAgICAgICAgICAgKGNoID4gJ1x1MDY0NycgJiYgY2ggPCAnXHUwNjRBJykgfHwKKyAgICAgICAgICAgIChjaCA9PSAnXHUwNjI5JykpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgaWYgKGNoID49ICdcdTA2NEInICYmIGNoPD0gJ1x1MDY1MicpIHsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9IGVsc2UgaWYgKGNoID49IDB4MDY1MyAmJiBjaCA8PSAweDA2NTUgfHwgCisgICAgICAgICAgICAgICAgICAgY2ggPT0gMHgwNjcwIHx8CisgICAgICAgICAgICAgICAgICAgY2ggPj0gMHhGRTcwICYmIGNoIDw9IDB4RkU3RikgeworICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIE5hbWUgICAgOiBnZXRMaW5rCisgICAgICogRnVuY3Rpb246IFJlc29sdmVzIHRoZSBsaW5rIGJldHdlZW4gdGhlIGNoYXJhY3RlcnMgYXMgCisgICAgICogICAgICAgICAgIEFyYWJpYyBjaGFyYWN0ZXJzIGhhdmUgZm91ciBmb3JtcyA6CisgICAgICogICAgICAgICAgIElzb2xhdGVkLCBJbml0aWFsLCBNaWRkbGUgYW5kIEZpbmFsIEZvcm0KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGluayhjaGFyIGNoKSB7CisgICAgICAgIGlmIChjaCA+PSAnXHUwNjIyJyAmJiBjaCA8PSAnXHUwNkQzJykgeworICAgICAgICAgICAgcmV0dXJuIGFyYUxpbmtbY2ggLSAnXHUwNjIyJ107CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1x1MjAwRCcpIHsKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICB9IGVsc2UgaWYgKGNoID49ICdcdTIwNkQnICYmIGNoIDw9ICdcdTIwNkYnKSB7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnXHVGRTcwJyAmJiBjaCA8PSAnXHVGRUZDJykgeworICAgICAgICAgICAgcmV0dXJuIHByZXNMaW5rW2NoIC0gJ1x1RkU3MCddOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIE5hbWUgICAgOiBjb3VudFNwYWNlcworICAgICAqIEZ1bmN0aW9uOiBDb3VudHMgdGhlIG51bWJlciBvZiBzcGFjZXMKKyAgICAgKiAgICAgICAgICAgYXQgZWFjaCBlbmQgb2YgdGhlIGxvZ2ljYWwgYnVmZmVyCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50U3BhY2VzTGVmdChjaGFyW10gZGVzdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0LCBlID0gc3RhcnQgKyBjb3VudDsgaSA8IGU7ICsraSkgeworICAgICAgICAgICAgaWYgKGRlc3RbaV0gIT0gJ1x1MDAyMCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaSAtIHN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRTcGFjZXNSaWdodChjaGFyW10gZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50KSB7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0ICsgY291bnQ7IC0taSA+PSBzdGFydDspIHsKKyAgICAgICAgICAgIGlmIChkZXN0W2ldICE9ICdcdTAwMjAnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ICsgY291bnQgLSAxIC0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY291bnQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOYW1lICAgIDogaXNUYXNoa2VlbENoYXIKKyAgICAgKiBGdW5jdGlvbjogUmV0dXJucyAxIGZvciBUYXNoa2VlbCBjaGFyYWN0ZXJzIGVsc2UgcmV0dXJuIDAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVGFzaGtlZWxDaGFyKGNoYXIgY2gpIHsKKyAgICAgICAgcmV0dXJuIGNoID49J1x1MDY0QicgJiYgY2ggPD0gJ1x1MDY1Mic7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOYW1lICAgIDogaXNBbGVmQ2hhcgorICAgICAqIEZ1bmN0aW9uOiBSZXR1cm5zIDEgZm9yIEFsZWYgY2hhcmFjdGVycyBlbHNlIHJldHVybiAwCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0FsZWZDaGFyKGNoYXIgY2gpIHsKKyAgICAgICAgcmV0dXJuIGNoID09ICdcdTA2MjInIHx8IGNoID09ICdcdTA2MjMnIHx8IGNoID09ICdcdTA2MjUnIHx8IGNoID09ICdcdTA2MjcnOworICAgIH0KKworICAgIC8qCisgICAgICogTmFtZSAgICA6IGlzTGFtQWxlZkNoYXIKKyAgICAgKiBGdW5jdGlvbjogUmV0dXJucyAxIGZvciBMYW1BbGVmIGNoYXJhY3RlcnMgZWxzZSByZXR1cm4gMAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMYW1BbGVmQ2hhcihjaGFyIGNoKSB7CisgICAgICAgIHJldHVybiBjaCA+PSAnXHVGRUY1JyAmJiBjaCA8PSAnXHVGRUZDJzsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzTm9ybWFsaXplZExhbUFsZWZDaGFyKGNoYXIgY2gpIHsKKyAgICAgICAgcmV0dXJuIGNoID49ICdcdTA2NUMnICYmIGNoIDw9ICdcdTA2NUYnOworICAgIH0KKworICAgIC8qCisgICAgICogTmFtZSAgICA6IGNhbGN1bGF0ZVNpemUKKyAgICAgKiBGdW5jdGlvbjogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBkZXN0U2l6ZSB0byBiZSB1c2VkIGluIHByZWZsaWdodGluZworICAgICAqICAgICAgICAgICB3aGVuIHRoZSBkZXN0U2l6ZSBpcyBlcXVhbCB0byAwCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgY2FsY3VsYXRlU2l6ZShjaGFyW10gc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZUxlbmd0aCkgeworCQorICAgICAgICBpbnQgZGVzdFNpemUgPSBzb3VyY2VMZW5ndGg7CisKKyAgICAgICAgc3dpdGNoIChvcHRpb25zICYgTEVUVEVSU19NQVNLKSB7CisgICAgICAgIGNhc2UgTEVUVEVSU19TSEFQRToKKyAgICAgICAgY2FzZSBMRVRURVJTX1NIQVBFX1RBU0hLRUVMX0lTT0xBVEVEOgorICAgICAgICAgICAgaWYgKGlzTG9naWNhbCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBzb3VyY2VTdGFydCwgZSA9IHNvdXJjZVN0YXJ0ICsgc291cmNlTGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlW2ldID09ICdcdTA2NDQnICYmIGlzQWxlZkNoYXIoc291cmNlW2krMV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAtLWRlc3RTaXplOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsgLy8gdmlzdWFsCisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gc291cmNlU3RhcnQgKyAxLCBlID0gc291cmNlU3RhcnQgKyBzb3VyY2VMZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSA9PSAnXHUwNjQ0JyAmJiBpc0FsZWZDaGFyKHNvdXJjZVtpLTFdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLS1kZXN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTEVUVEVSU19VTlNIQVBFOgorICAgICAgICAgICAgZm9yKGludCBpID0gc291cmNlU3RhcnQsIGUgPSBzb3VyY2VTdGFydCArIHNvdXJjZUxlbmd0aDsgaSA8IGU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpc0xhbUFsZWZDaGFyKHNvdXJjZVtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFNpemUrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVzdFNpemU7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOYW1lICAgIDogcmVtb3ZlTGFtQWxlZlNwYWNlcworICAgICAqIEZ1bmN0aW9uOiBUaGUgc2hhcGVVbmljb2RlIGZ1bmN0aW9uIGNvbnZlcnRzIExhbSArIEFsZWYgaW50byBMYW1BbGVmICsgc3BhY2UsCisgICAgICogICAgICAgICAgIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgc3BhY2VzIGJlaGluZCB0aGUgTGFtQWxlZnMgYWNjb3JkaW5nIHRvCisgICAgICogICAgICAgICAgIHRoZSBvcHRpb25zIHRoZSB1c2VyIHNwZWNpZmllcywgdGhlIHNwYWNlcyBhcmUgcmVtb3ZlZCB0byB0aGUgZW5kCisgICAgICogICAgICAgICAgIG9mIHRoZSBidWZmZXIsIG9yIHNocmluayB0aGUgYnVmZmVyIGFuZCByZW1vdmUgc3BhY2VzIGZvciBnb29kCisgICAgICogICAgICAgICAgIG9yIGxlYXZlIHRoZSBidWZmZXIgYXMgaXQgaXMgTGFtQWxlZiArIHNwYWNlLgorICAgICAqLworICAgIHByaXZhdGUgaW50IHJlbW92ZUxhbUFsZWZTcGFjZXMoY2hhcltdIGRlc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkgeworCQorICAgICAgICBpbnQgbGVuT3B0aW9ucyA9IG9wdGlvbnMgJiBMRU5HVEhfTUFTSzsKKyAgICAgICAgaWYgKCFpc0xvZ2ljYWwpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobGVuT3B0aW9ucykgeworICAgICAgICAgICAgY2FzZSBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0JFR0lOTklORzogbGVuT3B0aW9ucyA9IExFTkdUSF9GSVhFRF9TUEFDRVNfQVRfRU5EOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9FTkQ6IGxlbk9wdGlvbnMgPSBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0JFR0lOTklORzsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZW5PcHRpb25zID09IExFTkdUSF9GSVhFRF9TUEFDRVNfTkVBUikgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0LCBlID0gaSArIGxlbmd0aDsgaSA8IGU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChkZXN0W2ldID09ICdcdWZmZmYnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbaV0gPSAnXHUwMDIwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgZSA9IHN0YXJ0ICsgbGVuZ3RoOworICAgICAgICAgICAgaW50IHcgPSBlOworICAgICAgICAgICAgaW50IHIgPSBlOworICAgICAgICAgICAgd2hpbGUgKC0tciA+PSBzdGFydCkgeworICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBkZXN0W3JdOworICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnXHVmZmZmJykgeworICAgICAgICAgICAgICAgICAgICAtLXc7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ICE9IHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbd10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxlbk9wdGlvbnMgPT0gTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9FTkQpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAodyA+IHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbLS13XSA9ICdcdTAwMjAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHcgPiBzdGFydCkgeworICAgICAgICAgICAgICAgICAgICAvLyBzaGlmdCwgYXNzdW1lIHNtYWxsIGJ1ZmZlciBzaXplIHNvIGRvbid0IHVzZSBhcnJheWNvcHkKKyAgICAgICAgICAgICAgICAgICAgciA9IHc7CisgICAgICAgICAgICAgICAgICAgIHcgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHIgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3crK10gPSBkZXN0W3IrK107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3ID0gZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxlbk9wdGlvbnMgPT0gTEVOR1RIX0dST1dfU0hSSU5LKSB7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHcgLSBzdGFydDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBzcGFjZXMgYXQgYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh3IDwgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt3KytdID0gJ1x1MDAyMCc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE5hbWUgICAgOiBleHBhbmRMYW1BbGVmCisgICAgICogRnVuY3Rpb246IExhbUFsZWYgbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBhcyB0aGUgTGFtQWxlZiBpcworICAgICAqICAgICAgICAgICBvbmUgY2hhcmFjdGVyIHdoaWxlIGV4cGFuZGluZyBpdCB3aWxsIGdpdmUgdHdvCisgICAgICogICAgICAgICAgIGNoYXJhY3RlcnMgTGFtICsgQWxlZiwgc28gd2UgbmVlZCB0byBleHBhbmQgdGhlIExhbUFsZWYKKyAgICAgKiAgICAgICAgICAgaW4gbmVhciBvciBmYXIgc3BhY2VzIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICBzcGVjaWZpZXMgb3IgaW5jcmVhc2UgdGhlIGJ1ZmZlciBzaXplLgorICAgICAqICAgICAgICAgICBEZXN0IGhhcyBlbm91Z2ggcm9vbSBmb3IgdGhlIGV4cGFuc2lvbiBpZiB3ZSBhcmUgZ3Jvd2luZy4KKyAgICAgKiAgICAgICAgICAgbGFtYWxlZiBhcmUgbm9ybWFsaXplZCB0byB0aGUgJ3NwZWNpYWwgY2hhcmFjdGVycycKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBleHBhbmRMYW1BbGVmKGNoYXJbXSBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYWNvdW50KSB0aHJvd3MgQXJhYmljU2hhcGluZ0V4Y2VwdGlvbiB7CisKKyAgICAgICAgaW50IGxlbk9wdGlvbnMgPSBvcHRpb25zICYgTEVOR1RIX01BU0s7CisgICAgICAgIGlmICghaXNMb2dpY2FsKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlbk9wdGlvbnMpIHsKKyAgICAgICAgICAgIGNhc2UgTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9CRUdJTk5JTkc6IGxlbk9wdGlvbnMgPSBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0VORDsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExFTkdUSF9GSVhFRF9TUEFDRVNfQVRfRU5EOiBsZW5PcHRpb25zID0gTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9CRUdJTk5JTkc7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGxlbk9wdGlvbnMpIHsKKyAgICAgICAgY2FzZSBMRU5HVEhfR1JPV19TSFJJTks6IAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBzdGFydCArIGxlbmd0aCwgdyA9IHIgKyBsYWNvdW50OyAtLXIgPj0gc3RhcnQ7KSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBkZXN0W3JdOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkTGFtQWxlZkNoYXIoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Wy0td10gPSAnXHUwNjQ0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbLS13XSA9IGNvbnZlcnROb3JtYWxpemVkTGFtQWxlZltjaCAtICdcdTA2NUMnXTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbLS13XSA9IGNoOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuZ3RoICs9IGxhY291bnQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExFTkdUSF9GSVhFRF9TUEFDRVNfTkVBUjogCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGlzTm9ybWFsaXplZExhbUFsZWZDaGFyKGRlc3Rbc3RhcnRdKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJhYmljU2hhcGluZ0V4Y2VwdGlvbigibm8gc3BhY2UgZm9yIGxhbWFsZWYiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0ICsgbGVuZ3RoOyAtLWkgPiBzdGFydDspIHsgLy8gZG9uJ3QgY2hlY2sgc3RhcnQsIGFscmVhZHkgY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICBjaGFyIGNoID0gZGVzdFtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9ybWFsaXplZExhbUFsZWZDaGFyKGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3RbaS0xXSA9PSAnXHUwMDIwJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbaV0gPSAnXHUwNjQ0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Wy0taV0gPSBjb252ZXJ0Tm9ybWFsaXplZExhbUFsZWZbY2ggLSAnXHUwNjVDJ107CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmFiaWNTaGFwaW5nRXhjZXB0aW9uKCJubyBzcGFjZSBmb3IgbGFtYWxlZiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRU5HVEhfRklYRURfU1BBQ0VTX0FUX0VORDogCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxhY291bnQgPiBjb3VudFNwYWNlc0xlZnQoZGVzdCwgc3RhcnQsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyYWJpY1NoYXBpbmdFeGNlcHRpb24oIm5vIHNwYWNlIGZvciBsYW1hbGVmIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBzdGFydCArIGxhY291bnQsIHcgPSBzdGFydCwgZSA9IHN0YXJ0ICsgbGVuZ3RoOyByIDwgZTsgKytyKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBkZXN0W3JdOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkTGFtQWxlZkNoYXIoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3crK10gPSBjb252ZXJ0Tm9ybWFsaXplZExhbUFsZWZbY2ggLSAnXHUwNjVDJ107CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3crK10gPSAnXHUwNjQ0JzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbdysrXSA9IGNoOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTEVOR1RIX0ZJWEVEX1NQQUNFU19BVF9CRUdJTk5JTkc6IAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChsYWNvdW50ID4gY291bnRTcGFjZXNSaWdodChkZXN0LCBzdGFydCwgbGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJhYmljU2hhcGluZ0V4Y2VwdGlvbigibm8gc3BhY2UgZm9yIGxhbWFsZWYiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IHN0YXJ0ICsgbGVuZ3RoIC0gbGFjb3VudCwgdyA9IHN0YXJ0ICsgbGVuZ3RoOyAtLXIgPj0gc3RhcnQ7KSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBkZXN0W3JdOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkTGFtQWxlZkNoYXIoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Wy0td10gPSAnXHUwNjQ0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbLS13XSA9IGNvbnZlcnROb3JtYWxpemVkTGFtQWxlZltjaCAtICdcdTA2NUMnXTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbLS13XSA9IGNoOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKworICAgIC8qIENvbnZlcnQgdGhlIGlucHV0IGJ1ZmZlciBmcm9tIEZFeHggUmFuZ2UgaW50byAwNnh4IFJhbmdlCisgICAgICogdG8gcHV0IGFsbCBjaGFyYWN0ZXJzIGludG8gdGhlIDA2eHggcmFuZ2UKKyAgICAgKiBldmVuIHRoZSBsYW1hbGVmIGlzIGNvbnZlcnRlZCB0byB0aGUgc3BlY2lhbCByZWdpb24gaW4KKyAgICAgKiB0aGUgMDZ4eCByYW5nZS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGxhbWFsZWYgY2hhcnMgZm91bmQuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbm9ybWFsaXplKGNoYXJbXSBkZXN0LCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHsKKyAgICAgICAgaW50IGxhY291bnQgPSAwOworICAgICAgICBmb3IgKGludCBpID0gc3RhcnQsIGUgPSBpICsgbGVuZ3RoOyBpIDwgZTsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGNoID0gZGVzdFtpXTsKKyAgICAgICAgICAgIGlmIChjaCA+PSAnXHVGRTcwJyAmJiBjaCA8PSAnXHVGRUZDJykgeworICAgICAgICAgICAgICAgIGlmIChpc0xhbUFsZWZDaGFyKGNoKSkgeworICAgICAgICAgICAgICAgICAgICArK2xhY291bnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc3RbaV0gPSAoY2hhciljb252ZXJ0RkV0bzA2W2NoIC0gJ1x1RkU3MCddOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBsYWNvdW50OworICAgIH0KKworICAgIC8qCisgICAgICogTmFtZSAgICA6IHNoYXBlVW5pY29kZQorICAgICAqIEZ1bmN0aW9uOiBDb252ZXJ0cyBhbiBBcmFiaWMgVW5pY29kZSBidWZmZXIgaW4gMDZ4eCBSYW5nZSBpbnRvIGEgc2hhcGVkCisgICAgICogICAgICAgICAgIGFyYWJpYyBVbmljb2RlIGJ1ZmZlciBpbiBGRXh4IFJhbmdlCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgc2hhcGVVbmljb2RlKGNoYXJbXSBkZXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXNoa2VlbEZsYWcpIHsKKworCisgICAgICAgIG5vcm1hbGl6ZShkZXN0LCBzdGFydCwgbGVuZ3RoKTsKKworICAgICAgICAvLyByZXNvbHZlIHRoZSBsaW5rIGJldHdlZW4gdGhlIGNoYXJhY3RlcnMuCisgICAgICAgIC8vIEFyYWJpYyBjaGFyYWN0ZXJzIGhhdmUgZm91ciBmb3JtczogSXNvbGF0ZWQsIEluaXRpYWwsIE1lZGlhbCBhbmQgRmluYWwuCisgICAgICAgIC8vIFRhc2hrZWVsIGNoYXJhY3RlcnMgaGF2ZSB0d28sIGlzb2xhdGVkIG9yIG1lZGlhbCwgYW5kIHNvbWV0aW1lcyBvbmx5IGlzb2xhdGVkLgorICAgICAgICAvLyB0YXNoa2VlbEZsYWcgPT0gMDogc2hhcGUgbm9ybWFsbHksIDE6IHNoYXBlIGlzb2xhdGVkLCAyOiBkb24ndCBzaGFwZQorCisgICAgICAgIGJvb2xlYW4gbGFtYWxlZl9mb3VuZCA9IGZhbHNlOworICAgICAgICBpbnQgaSA9IHN0YXJ0ICsgbGVuZ3RoIC0gMTsKKyAgICAgICAgaW50IGN1cnJMaW5rID0gZ2V0TGluayhkZXN0W2ldKTsKKyAgICAgICAgaW50IG5leHRMaW5rID0gMDsKKyAgICAgICAgaW50IHByZXZMaW5rID0gMDsKKyAgICAgICAgaW50IGxhc3RMaW5rID0gMDsKKyAgICAgICAgaW50IHByZXZQb3MgPSBpOworICAgICAgICBpbnQgbGFzdFBvcyA9IGk7CisgICAgICAgIGludCBueCA9IC0yOworICAgICAgICBpbnQgbncgPSAwOworCisgICAgICAgIHdoaWxlIChpID49IDApIHsKKyAgICAgICAgICAgIC8vIElmIGhpZ2ggYnl0ZSBvZiBjdXJyTGluayA+IDAgdGhlbiB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIHNoYXBlCisgICAgICAgICAgICBpZiAoKGN1cnJMaW5rICYgJ1x1RkYwMCcpID4gMCB8fCBpc1Rhc2hrZWVsQ2hhcihkZXN0W2ldKSkgeworICAgICAgICAgICAgICAgIG53ID0gaSAtIDE7CisgICAgICAgICAgICAgICAgbnggPSAtMjsKKyAgICAgICAgICAgICAgICB3aGlsZSAobnggPCAwKSB7IC8vIHdlIG5lZWQgdG8ga25vdyBhYm91dCBuZXh0IGNoYXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKG53ID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGluayA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBueCA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmsgPSBnZXRMaW5rKGRlc3RbbnddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobmV4dExpbmsgJiBJUlJFTEVWQU5UKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnggPSBudzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1udzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgoKGN1cnJMaW5rICYgQUxFRlRZUEUpID4gMCkgJiYgKChsYXN0TGluayAmIExBTVRZUEUpID4gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbGFtYWxlZl9mb3VuZCA9IHRydWU7IAorICAgICAgICAgICAgICAgICAgICBjaGFyIHdMYW1hbGVmID0gY2hhbmdlTGFtQWxlZihkZXN0W2ldKTsgLy8gZ2V0IGZyb20gMHgwNjVDLTB4MDY1ZgorICAgICAgICAgICAgICAgICAgICBpZiAod0xhbWFsZWYgIT0gJ1x1MDAwMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgYWxlZiBieSBtYXJrZXIsIGl0IHdpbGwgYmUgcmVtb3ZlZCBsYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9ICdcdWZmZmYnOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtsYXN0UG9zXSA9IHdMYW1hbGVmOworICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGxhc3RQb3M7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBsYXN0TGluayA9IHByZXZMaW5rOworICAgICAgICAgICAgICAgICAgICBjdXJyTGluayA9IGdldExpbmsod0xhbWFsZWYpOyAvLyByZXF1aXJlcyAnXHUwMDAwJywgdW5mb3J0dW5hdGVseQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcHJvcGVyIHNoYXBlIGFjY29yZGluZyB0byBsaW5rIGFiaWxpdHkgb2YgbmVpZ2hib3JzCisgICAgICAgICAgICAgICAgLy8gYW5kIG9mIGNoYXJhY3RlcjsgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdGhlIHNoYXBlcworICAgICAgICAgICAgICAgIC8vIChpc29sYXRlZCwgaW5pdGlhbCwgbWlkZGxlLCBmaW5hbCkgaW4gdGhlIGNvbXBhdGliaWxpdHkgYXJlYQorCisgICAgICAgICAgICAgICAgaW50IGZsYWcgPSBzcGVjaWFsQ2hhcihkZXN0W2ldKTsKKworICAgICAgICAgICAgICAgIGludCBzaGFwZSA9IHNoYXBlVGFibGVbbmV4dExpbmsgJiBMSU5LX01BU0tdCisgICAgICAgICAgICAgICAgICAgIFtsYXN0TGluayAmIExJTktfTUFTS10KKyAgICAgICAgICAgICAgICAgICAgW2N1cnJMaW5rICYgTElOS19NQVNLXTsKKworICAgICAgICAgICAgICAgIGlmIChmbGFnID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgc2hhcGUgJj0gMHgxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZyA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0YXNoa2VlbEZsYWcgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKChsYXN0TGluayAmIExJTktMKSAhPSAwKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICgobmV4dExpbmsgJiBMSU5LUikgIT0gMCkgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2ldICE9ICdcdTA2NEMnICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSAhPSAnXHUwNjREJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgISgobmV4dExpbmsgJiBBTEVGVFlQRSkgPT0gQUxFRlRZUEUgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgIChsYXN0TGluayAmIExBTVRZUEUpID09IExBTVRZUEUpKSB7CisJCQorICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSAxOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZsYWcgPT0gMikgeworICAgICAgICAgICAgICAgICAgICBpZiAodGFzaGtlZWxGbGFnIDwgMikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9IChjaGFyKSgnXHVGRTcwJyArIGlycmVsZXZhbnRQb3NbZGVzdFtpXSAtICdcdTA2NEInXSArIHNoYXBlKTsKKyAgICAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIGxlYXZlIHRhc2hrZWVsIGFsb25lICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZXN0W2ldID0gKGNoYXIpKCdcdUZFNzAnICsgKGN1cnJMaW5rID4+IDgpICsgc2hhcGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gbW92ZSBvbmUgbm90Y2ggZm9yd2FyZAorICAgICAgICAgICAgaWYgKChjdXJyTGluayAmIElSUkVMRVZBTlQpID09IDApIHsKKyAgICAgICAgICAgICAgICBwcmV2TGluayA9IGxhc3RMaW5rOworICAgICAgICAgICAgICAgIGxhc3RMaW5rID0gY3Vyckxpbms7CisgICAgICAgICAgICAgICAgcHJldlBvcyA9IGxhc3RQb3M7CisgICAgICAgICAgICAgICAgbGFzdFBvcyA9IGk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC0taTsKKyAgICAgICAgICAgIGlmIChpID09IG54KSB7CisgICAgICAgICAgICAgICAgY3VyckxpbmsgPSBuZXh0TGluazsKKyAgICAgICAgICAgICAgICBueCA9IC0yOworICAgICAgICAgICAgfSBlbHNlIGlmIChpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgY3VyckxpbmsgPSBnZXRMaW5rKGRlc3RbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBsYW0vYWxlZiBwYWlyIGluIHRoZSBidWZmZXIgCisgICAgICAgIC8vIGNhbGwgcmVtb3ZlTGFtQWxlZlNwYWNlcyB0byByZW1vdmUgdGhlIHNwYWNlcyB0aGF0IHdlcmUgYWRkZWQKKworICAgICAgICBpZiAobGFtYWxlZl9mb3VuZCkgeworICAgICAgICAgICAgZGVzdFNpemUgPSByZW1vdmVMYW1BbGVmU3BhY2VzKGRlc3QsIHN0YXJ0LCBsZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdFNpemUgPSBsZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBkZXN0U2l6ZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE5hbWUgICAgOiBkZVNoYXBlVW5pY29kZQorICAgICAqIEZ1bmN0aW9uOiBDb252ZXJ0cyBhbiBBcmFiaWMgVW5pY29kZSBidWZmZXIgaW4gRkV4eCBSYW5nZSBpbnRvIHVuc2hhcGVkCisgICAgICogICAgICAgICAgIGFyYWJpYyBVbmljb2RlIGJ1ZmZlciBpbiAwNnh4IFJhbmdlCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZGVTaGFwZVVuaWNvZGUoY2hhcltdIGRlc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U2l6ZSkgdGhyb3dzIEFyYWJpY1NoYXBpbmdFeGNlcHRpb24geworCisgICAgICAgIGludCBsYW1hbGVmX2NvdW50ID0gbm9ybWFsaXplKGRlc3QsIHN0YXJ0LCBsZW5ndGgpOworCisgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIGxhbWFsZWYgaW4gdGhlIGJ1ZmZlciBjYWxsIGV4cGFuZExhbUFsZWYKKyAgICAgICAgaWYgKGxhbWFsZWZfY291bnQgIT0gMCkgeworICAgICAgICAgICAgLy8gbmVlZCB0byBhZGp1c3QgZGVzdCB0byBmaXQgZXhwYW5kZWQgYnVmZmVyLi4uICEhIQorICAgICAgICAgICAgZGVzdFNpemUgPSBleHBhbmRMYW1BbGVmKGRlc3QsIHN0YXJ0LCBsZW5ndGgsIGxhbWFsZWZfY291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdFNpemUgPSBsZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVzdFNpemU7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgaW50ZXJuYWxTaGFwZShjaGFyW10gc291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFNpemUpIHRocm93cyBBcmFiaWNTaGFwaW5nRXhjZXB0aW9uIHsKKworICAgICAgICBpZiAoc291cmNlTGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlc3RTaXplID09IDApIHsKKyAgICAgICAgICAgIGlmICgoKG9wdGlvbnMgJiBMRVRURVJTX01BU0spICE9IExFVFRFUlNfTk9PUCkgJiYKKyAgICAgICAgICAgICAgICAoKG9wdGlvbnMgJiBMRU5HVEhfTUFTSykgPT0gTEVOR1RIX0dST1dfU0hSSU5LKSkgeworCQorICAgICAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVTaXplKHNvdXJjZSwgc291cmNlU3RhcnQsIHNvdXJjZUxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VMZW5ndGg7IC8vIGJ5IGRlZmluaXRpb24KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGFsd2F5cyB1c2UgdGVtcCBidWZmZXIKKyAgICAgICAgY2hhcltdIHRlbXAgPSBuZXcgY2hhcltzb3VyY2VMZW5ndGggKiAyXTsgLy8gYWxsIGxhbWFsZWZzIHJlcXVpcmluZyBleHBhbnNpb24KKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShzb3VyY2UsIHNvdXJjZVN0YXJ0LCB0ZW1wLCAwLCBzb3VyY2VMZW5ndGgpOworCisgICAgICAgIGlmIChpc0xvZ2ljYWwpIHsKKyAgICAgICAgICAgIGludmVydEJ1ZmZlcih0ZW1wLCAwLCBzb3VyY2VMZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgaW50IG91dHB1dFNpemUgPSBzb3VyY2VMZW5ndGg7CisKKyAgICAgICAgc3dpdGNoIChvcHRpb25zICYgTEVUVEVSU19NQVNLKSB7CisgICAgICAgIGNhc2UgTEVUVEVSU19TSEFQRV9UQVNIS0VFTF9JU09MQVRFRDoKKyAgICAgICAgICAgIG91dHB1dFNpemUgPSBzaGFwZVVuaWNvZGUodGVtcCwgMCwgc291cmNlTGVuZ3RoLCBkZXN0U2l6ZSwgMSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExFVFRFUlNfU0hBUEU6CisgICAgICAgICAgICBvdXRwdXRTaXplID0gc2hhcGVVbmljb2RlKHRlbXAsIDAsIHNvdXJjZUxlbmd0aCwgZGVzdFNpemUsIDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRVRURVJTX1VOU0hBUEU6CisgICAgICAgICAgICBvdXRwdXRTaXplID0gZGVTaGFwZVVuaWNvZGUodGVtcCwgMCwgc291cmNlTGVuZ3RoLCBkZXN0U2l6ZSk7CisgICAgICAgICAgICBicmVhazsgCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChvdXRwdXRTaXplID4gZGVzdFNpemUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBBcmFiaWNTaGFwaW5nRXhjZXB0aW9uKCJub3QgZW5vdWdoIHJvb20gZm9yIHJlc3VsdCBkYXRhIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9wdGlvbnMgJiBESUdJVFNfTUFTSykgIT0gRElHSVRTX05PT1ApIHsKKyAgICAgICAgICAgIGNoYXIgZGlnaXRCYXNlID0gJ1x1MDAzMCc7IC8vIEV1cm9wZWFuIGRpZ2l0cworICAgICAgICAgICAgc3dpdGNoIChvcHRpb25zICYgRElHSVRfVFlQRV9NQVNLKSB7CisgICAgICAgICAgICBjYXNlIERJR0lUX1RZUEVfQU46CisgICAgICAgICAgICAgICAgZGlnaXRCYXNlID0gJ1x1MDY2MCc7ICAvLyBBcmFiaWMtSW5kaWMgZGlnaXRzCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRElHSVRfVFlQRV9BTl9FWFRFTkRFRDoKKyAgICAgICAgICAgICAgICBkaWdpdEJhc2UgPSAnXHUwNmYwJzsgIC8vIEVhc3Rlcm4gQXJhYmljLUluZGljIGRpZ2l0cyAoUGVyc2lhbiBhbmQgVXJkdSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChvcHRpb25zICYgRElHSVRTX01BU0spIHsKKyAgICAgICAgICAgIGNhc2UgRElHSVRTX0VOMkFOOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0RGVsdGEgPSBkaWdpdEJhc2UgLSAnXHUwMDMwJzsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRwdXRTaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY2ggPSB0ZW1wW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9ICdcdTAwMzknICYmIGNoID49ICdcdTAwMzAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFtpXSArPSBkaWdpdERlbHRhOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIERJR0lUU19BTjJFTjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlnaXRUb3AgPSAoY2hhcikoZGlnaXRCYXNlICsgOSk7CisgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdERlbHRhID0gJ1x1MDAzMCcgLSBkaWdpdEJhc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0cHV0U2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNoID0gdGVtcFtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA8PSBkaWdpdFRvcCAmJiBjaCA+PSBkaWdpdEJhc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wW2ldICs9IGRpZ2l0RGVsdGE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRElHSVRTX0VOMkFOX0lOSVRfTFI6CisgICAgICAgICAgICAgICAgc2hhcGVUb0FyYWJpY0RpZ2l0c1dpdGhDb250ZXh0KHRlbXAsIDAsIG91dHB1dFNpemUsIGRpZ2l0QmFzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIERJR0lUU19FTjJBTl9JTklUX0FMOgorICAgICAgICAgICAgICAgIHNoYXBlVG9BcmFiaWNEaWdpdHNXaXRoQ29udGV4dCh0ZW1wLCAwLCBvdXRwdXRTaXplLCBkaWdpdEJhc2UsIHRydWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzTG9naWNhbCkgeworICAgICAgICAgICAgaW52ZXJ0QnVmZmVyKHRlbXAsIDAsIG91dHB1dFNpemUpOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0ZW1wLCAwLCBkZXN0LCBkZXN0U3RhcnQsIG91dHB1dFNpemUpOworICAgICAgCisgICAgICAgIHJldHVybiBvdXRwdXRTaXplOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0FyYWJpY1NoYXBpbmdFeGNlcHRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0FyYWJpY1NoYXBpbmdFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNTNkM2RjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQXJhYmljU2hhcGluZ0V4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTggQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKKy8qKgorICogVGhyb3duIGJ5IEFyYWJpY1NoYXBpbmcgd2hlbiB0aGVyZSBpcyBhIHNoYXBpbmcgZXJyb3IuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEFyYWJpY1NoYXBpbmdFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworICAgIEFyYWJpY1NoYXBpbmdFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgc3VwZXIobWVzc2FnZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvQnJlYWtEaWN0aW9uYXJ5LmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9CcmVha0RpY3Rpb25hcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MGU0YTZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQnJlYWtEaWN0aW9uYXJ5LmphdmEKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L0JyZWFrRGljdGlvbmFyeS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MTQ6MzIgJAorICogJFJldmlzaW9uOiAxLjggJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworCitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5Db21wYWN0Qnl0ZUFycmF5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNsYXNzIHRoYXQgcmVwcmVzZW50cyB0aGUgbGlzdCBvZiBrbm93biB3b3JkcyB1c2VkIGJ5CisgKiBEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yLiAgVGhlIGNvbmNlcHR1YWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZAorICogaGVyZSBpcyBhIHRyaWU6IHRoZXJlIGlzIGEgbm9kZSBoYW5naW5nIG9mZiB0aGUgcm9vdCBub2RlIGZvciBldmVyeQorICogbGV0dGVyIHRoYXQgY2FuIHN0YXJ0IGEgd29yZC4gIEVhY2ggb2YgdGhlc2Ugbm9kZXMgaGFzIGEgbm9kZSBoYW5naW5nCisgKiBvZmYgb2YgaXQgZm9yIGV2ZXJ5IGxldHRlciB0aGF0IGNhbiBiZSB0aGUgc2Vjb25kIGxldHRlciBvZiBhIHdvcmQKKyAqIGlmIHRoaXMgbm9kZSBpcyB0aGUgZmlyc3QgbGV0dGVyLCBhbmQgc28gb24uICBUaGUgdHJpZSBpcyByZXByZXNlbnRlZAorICogYXMgYSB0d28tZGltZW5zaW9uYWwgYXJyYXkgdGhhdCBjYW4gYmUgdHJlYXRlZCBhcyBhIHRhYmxlIG9mIHN0YXRlCisgKiB0cmFuc2l0aW9ucy4gIEluZGV4ZXMgYXJlIHVzZWQgdG8gY29tcHJlc3MgdGhpcyBhcnJheSwgdGFraW5nCisgKiBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGlzIGFycmF5IHdpbGwgYWx3YXlzIGJlIHZlcnkgc3BhcnNlLgorICogQGludGVybmFsCisgKi8KK3B1YmxpYyBjbGFzcyBCcmVha0RpY3Rpb25hcnkgeworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gdGVzdGluZyBhbmQgZGVidWdnaW5nCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvKiogQGludGVybmFsICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKKyAgICAgICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gYXJnc1swXTsKKworICAgICAgICBCcmVha0RpY3Rpb25hcnkgZGljdGlvbmFyeSA9IG5ldyBCcmVha0RpY3Rpb25hcnkobmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlbmFtZSkpOworCisgICAgICAgIFByaW50V3JpdGVyIG91dCA9IG51bGw7CisKKyAgICAgICAgaWYoYXJncy5sZW5ndGggPj0gMikgeworICAgICAgICAgICAgb3V0ID0gbmV3IFByaW50V3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0oYXJnc1sxXSksICJVbmljb2RlTGl0dGxlIikpOworICAgICAgICB9CisKKyAgICAgICAgZGljdGlvbmFyeS5wcmludFdvcmRMaXN0KCIiLCAwLCBvdXQpOworCisgICAgICAgIGlmIChvdXQgIT0gbnVsbCkgeworICAgICAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGludGVybmFsICovCisgICAgcHVibGljIHZvaWQgcHJpbnRXb3JkTGlzdChTdHJpbmcgcGFydGlhbFdvcmQsIGludCBzdGF0ZSwgUHJpbnRXcml0ZXIgb3V0KQorICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHN0YXRlID09IDB4RkZGRikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBhcnRpYWxXb3JkKTsKKyAgICAgICAgICAgIGlmIChvdXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKHBhcnRpYWxXb3JkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29sczsgaSsrKSB7CisgICAgICAgICAgICAgICAgaW50IG5ld1N0YXRlID0gKGF0KHN0YXRlLCBpKSkgJiAweEZGRkY7CisKKyAgICAgICAgICAgICAgICBpZiAobmV3U3RhdGUgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIG5ld0NoYXIgPSByZXZlcnNlQ29sdW1uTWFwW2ldOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmV3UGFydGlhbFdvcmQgPSBwYXJ0aWFsV29yZDsKKworICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2hhciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJ0aWFsV29yZCArPSBuZXdDaGFyOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRXb3JkTGlzdChuZXdQYXJ0aWFsV29yZCwgbmV3U3RhdGUsIG91dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBtYXAgdXNlZCB0byBnbyBmcm9tIGNvbHVtbiBudW1iZXJzIHRvIGNoYXJhY3RlcnMuICBVc2VkIG9ubHkKKyAgICAgKiBmb3IgZGVidWdnaW5nIHJpZ2h0IG5vdy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNoYXJbXSByZXZlcnNlQ29sdW1uTWFwID0gbnVsbDsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gZGF0YSBtZW1iZXJzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIE1hcHMgZnJvbSBjaGFyYWN0ZXJzIHRvIGNvbHVtbiBudW1iZXJzLiAgVGhlIG1haW4gdXNlIG9mIHRoaXMgaXMgdG8KKyAgICAgKiBhdm9pZCBtYWtpbmcgcm9vbSBpbiB0aGUgYXJyYXkgZm9yIGVtcHR5IGNvbHVtbnMuCisgICAgICovCisgICAgcHJpdmF0ZSBDb21wYWN0Qnl0ZUFycmF5IGNvbHVtbk1hcCA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIGFjdHVhbCBjb2x1bW5zIGluIHRoZSB0YWJsZQorICAgICAqLworICAgIHByaXZhdGUgaW50IG51bUNvbHM7CisKKyAgICAvKioKKyAgICAgKiBDb2x1bW5zIGFyZSBvcmdhbml6ZWQgaW50byBncm91cHMgb2YgMzIuICBUaGlzIHNheXMgaG93IG1hbnkKKyAgICAgKiBjb2x1bW4gZ3JvdXBzLiAgKFdlIGNvdWxkIGNhbGN1bGF0ZSB0aGlzLCBidXQgd2Ugc3RvcmUgdGhlCisgICAgICogdmFsdWUgdG8gYXZvaWQgaGF2aW5nIHRvIHJlcGVhdGVkbHkgY2FsY3VsYXRlIGl0LikKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBudW1Db2xHcm91cHM7CisKKyAgICAvKioKKyAgICAgKiBUaGUgYWN0dWFsIGNvbXByZXNzZWQgc3RhdGUgdGFibGUuICBFYWNoIGNvbmNlcHR1YWwgcm93IHJlcHJlc2VudHMKKyAgICAgKiBhIHN0YXRlLCBhbmQgdGhlIGNlbGxzIGluIGl0IGNvbnRhaW4gdGhlIHJvdyBudW1iZXJzIG9mIHRoZSBzdGF0ZXMKKyAgICAgKiB0byB0cmFuc2l0aW9uIHRvIGZvciBlYWNoIHBvc3NpYmxlIGxldHRlci4gIDAgaXMgdXNlZCB0byBpbmRpY2F0ZQorICAgICAqIGFuIGlsbGVnYWwgY29tYmluYXRpb24gb2YgbGV0dGVycyAoaS5lLiwgdGhlIGVycm9yIHN0YXRlKS4gIFRoZQorICAgICAqIHRhYmxlIGlzIGNvbXByZXNzZWQgYnkgZWxpbWluYXRpbmcgYWxsIHRoZSB1bnBvcHVsYXRlZCAoaS5lLiwgemVybykKKyAgICAgKiBjZWxscy4gIE11bHRpcGxlIGNvbmNlcHR1YWwgcm93cyBjYW4gdGhlbiBiZSBkb3VibGVkIHVwIGluIGEgc2luZ2xlCisgICAgICogcGh5c2ljYWwgcm93IGJ5IHNsaWRpbmcgdGhlbSB1cCBhbmQgcG9zc2libHkgc2hpZnRpbmcgdGhlbSB0byBvbmUKKyAgICAgKiBzaWRlIG9yIHRoZSBvdGhlciBzbyB0aGUgcG9wdWxhdGVkIGNlbGxzIGRvbid0IGNvbGxpZGUuICBJbmRleGVzCisgICAgICogYXJlIHVzZWQgdG8gaWRlbnRpZnkgdW5wb3B1bGF0ZWQgY2VsbHMgYW5kIHRvIGxvY2F0ZSBwb3B1bGF0ZWQgY2VsbHMuCisgICAgICovCisgICAgcHJpdmF0ZSBzaG9ydFtdIHRhYmxlID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoaXMgaW5kZXggbWFwcyBsb2dpY2FsIHJvdyBudW1iZXJzIHRvIHBoeXNpY2FsIHJvdyBudW1iZXJzCisgICAgICovCisgICAgcHJpdmF0ZSBzaG9ydFtdIHJvd0luZGV4ID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIEEgYml0bWFwIGlzIHVzZWQgdG8gdGVsbCB3aGljaCBjZWxscyBpbiB0aGUgY29tY2VwdHVhbCB0YWJsZSBhcmUKKyAgICAgKiBwb3B1bGF0ZWQuICBUaGlzIGFycmF5IGNvbnRhaW5zIGFsbCB0aGUgdW5pcXVlIGJpdCBjb21iaW5hdGlvbnMKKyAgICAgKiBpbiB0aGF0IGJpdG1hcC4gIElmIHRoZSB0YWJsZSBpcyBtb3JlIHRoYW4gMzIgY29sdW1ucyB3aWRlLAorICAgICAqIHN1Y2Nlc3NpdmUgZW50cmllcyBpbiB0aGlzIGFycmF5IGFyZSB1c2VkIGZvciBhIHNpbmdsZSByb3cuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnRbXSByb3dJbmRleEZsYWdzID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoaXMgaW5kZXggbWFwcyBmcm9tIGEgbG9naWNhbCByb3cgbnVtYmVyIGludG8gdGhlIGJpdG1hcCB0YWJsZSBhYm92ZS4KKyAgICAgKiAoVGhpcyBrZWVwcyB1cyBmcm9tIHN0b3JpbmcgZHVwbGljYXRlIGJpdG1hcCBjb21iaW5hdGlvbnMuKSAgU2luY2UgdGhlcmUKKyAgICAgKiBhcmUgYSBsb3Qgb2Ygcm93cyB3aXRoIG9ubHkgb25lIHBvcHVsYXRlZCBjZWxsLCBpbnN0ZWFkIG9mIHdhc3Rpbmcgc3BhY2UKKyAgICAgKiBpbiB0aGUgYml0bWFwIHRhYmxlLCB3ZSBqdXN0IHN0b3JlIGEgbmVnYXRpdmUgbnVtYmVyIGluIHRoaXMgaW5kZXggZm9yCisgICAgICogcm93cyB3aXRoIG9uZSBwb3B1bGF0ZWQgY2VsbC4gIFRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGF0IG51bWJlciBpcworICAgICAqIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBwb3B1bGF0ZWQgY2VsbC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHNob3J0W10gcm93SW5kZXhGbGFnc0luZGV4ID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIEZvciBlYWNoIGxvZ2ljYWwgcm93LCB0aGlzIGluZGV4IGNvbnRhaW5zIGEgY29uc3RhbnQgdGhhdCBpcyBhZGRlZCB0bworICAgICAqIHRoZSBsb2dpY2FsIGNvbHVtbiBudW1iZXIgdG8gZ2V0IHRoZSBwaHlzaWNhbCBjb2x1bW4gbnVtYmVyCisgICAgICovCisgICAgcHJpdmF0ZSBieXRlW10gcm93SW5kZXhTaGlmdHMgPSBudWxsOworCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBkZXNlcmlhbGl6YXRpb24KKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIHB1YmxpYyBCcmVha0RpY3Rpb25hcnkoSW5wdXRTdHJlYW0gZGljdGlvbmFyeVN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgcmVhZERpY3Rpb25hcnlGaWxlKG5ldyBEYXRhSW5wdXRTdHJlYW0oZGljdGlvbmFyeVN0cmVhbSkpOworICAgIH0KKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBwdWJsaWMgdm9pZCByZWFkRGljdGlvbmFyeUZpbGUoRGF0YUlucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpbnQgbDsKKworICAgICAgICAvLyByZWFkIGluIHRoZSB2ZXJzaW9uIG51bWJlciAocmlnaHQgbm93IHdlIGp1c3QgaWdub3JlIGl0KQorICAgICAgICBpbi5yZWFkSW50KCk7CisKKyAgICAgICAgLy8gcmVhZCBpbiB0aGUgY29sdW1uIG1hcCAodGhpcyBpcyBzZXJpYWxpemVkIGluIGl0cyBpbnRlcm5hbCBmb3JtOgorICAgICAgICAvLyBhbiBpbmRleCBhcnJheSBmb2xsb3dlZCBieSBhIGRhdGEgYXJyYXkpCisgICAgICAgIGwgPSBpbi5yZWFkSW50KCk7CisgICAgICAgIGNoYXJbXSB0ZW1wID0gbmV3IGNoYXJbbF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcC5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHRlbXBbaV0gPSAoY2hhcilpbi5yZWFkU2hvcnQoKTsKKyAgICAgICAgbCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgYnl0ZVtdIHRlbXAyID0gbmV3IGJ5dGVbbF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcDIubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0ZW1wMltpXSA9IGluLnJlYWRCeXRlKCk7CisgICAgICAgIGNvbHVtbk1hcCA9IG5ldyBDb21wYWN0Qnl0ZUFycmF5KHRlbXAsIHRlbXAyKTsKKworICAgICAgICAvLyByZWFkIGluIG51bUNvbHMgYW5kIG51bUNvbEdyb3VwcworICAgICAgICBudW1Db2xzID0gaW4ucmVhZEludCgpOworICAgICAgICBudW1Db2xHcm91cHMgPSBpbi5yZWFkSW50KCk7CisKKyAgICAgICAgLy8gcmVhZCBpbiB0aGUgcm93LW51bWJlciBpbmRleAorICAgICAgICBsID0gaW4ucmVhZEludCgpOworICAgICAgICByb3dJbmRleCA9IG5ldyBzaG9ydFtsXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dJbmRleC5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHJvd0luZGV4W2ldID0gaW4ucmVhZFNob3J0KCk7CisKKyAgICAgICAgLy8gbG9hZCBpbiB0aGUgcG9wdWxhdGVkLWNlbGxzIGJpdG1hcDogaW5kZXggZmlyc3QsIHRoZW4gYml0bWFwIGxpc3QKKyAgICAgICAgbCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgcm93SW5kZXhGbGFnc0luZGV4ID0gbmV3IHNob3J0W2xdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd0luZGV4RmxhZ3NJbmRleC5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHJvd0luZGV4RmxhZ3NJbmRleFtpXSA9IGluLnJlYWRTaG9ydCgpOworICAgICAgICBsID0gaW4ucmVhZEludCgpOworICAgICAgICByb3dJbmRleEZsYWdzID0gbmV3IGludFtsXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dJbmRleEZsYWdzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgcm93SW5kZXhGbGFnc1tpXSA9IGluLnJlYWRJbnQoKTsKKworICAgICAgICAvLyBsb2FkIGluIHRoZSByb3ctc2hpZnQgaW5kZXgKKyAgICAgICAgbCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgcm93SW5kZXhTaGlmdHMgPSBuZXcgYnl0ZVtsXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dJbmRleFNoaWZ0cy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHJvd0luZGV4U2hpZnRzW2ldID0gaW4ucmVhZEJ5dGUoKTsKKworICAgICAgICAvLyBmaW5hbGx5LCBsb2FkIGluIHRoZSBhY3R1YWwgc3RhdGUgdGFibGUKKyAgICAgICAgbCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgdGFibGUgPSBuZXcgc2hvcnRbbF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFibGUubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0YWJsZVtpXSA9IGluLnJlYWRTaG9ydCgpOworCisgICAgICAgIC8vIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgb25seSBuZWNlc3NhcnkgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcworICAgICAgICByZXZlcnNlQ29sdW1uTWFwID0gbmV3IGNoYXJbbnVtQ29sc107CisgICAgICAgIGZvciAoY2hhciBjID0gMDsgYyA8IDB4ZmZmZjsgYysrKSB7CisgICAgICAgICAgICBpbnQgY29sID0gY29sdW1uTWFwLmVsZW1lbnRBdChjKTsKKyAgICAgICAgICAgIGlmIChjb2wgIT0gMCkgeworICAgICAgICAgICAgICAgcmV2ZXJzZUNvbHVtbk1hcFtjb2xdID0gYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGNsb3NlIHRoZSBzdHJlYW0KKyAgICAgICAgaW4uY2xvc2UoKTsKKyAgICB9CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIGFjY2VzcyB0byB0aGUgd29yZHMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogVXNlcyB0aGUgY29sdW1uIG1hcCB0byBtYXAgdGhlIGNoYXJhY3RlciB0byBhIGNvbHVtbiBudW1iZXIsIHRoZW4KKyAgICAgKiBwYXNzZXMgdGhlIHJvdyBhbmQgY29sdW1uIG51bWJlciB0byB0aGUgb3RoZXIgdmVyc2lvbiBvZiBhdCgpCisgICAgICogQHBhcmFtIHJvdyBUaGUgY3VycmVudCBzdGF0ZQorICAgICAqIEBwYXJhbSBjaCBUaGUgY2hhcmFjdGVyIHdob3NlIGNvbHVtbiB3ZSdyZSBpbnRlcmVzdGVkIGluCisgICAgICogQHJldHVybiBUaGUgbmV3IHN0YXRlIHRvIHRyYW5zaXRpb24gdG8KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc2hvcnQgYXQoaW50IHJvdywgY2hhciBjaCkgeworICAgICAgICBpbnQgY29sID0gY29sdW1uTWFwLmVsZW1lbnRBdChjaCk7CisgICAgICAgIHJldHVybiBhdChyb3csIGNvbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdmFsdWUgaW4gdGhlIGNlbGwgd2l0aCB0aGUgc3BlY2lmaWVkIChsb2dpY2FsKSByb3cgYW5kCisgICAgICogY29sdW1uIG51bWJlcnMuICBJbiBEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yLCB0aGUgcm93IG51bWJlciBpcworICAgICAqIGEgc3RhdGUgbnVtYmVyLCB0aGUgY29sdW1uIG51bWJlciBpcyBhbiBpbnB1dCwgYW5kIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgKiBpcyB0aGUgcm93IG51bWJlciBvZiB0aGUgbmV3IHN0YXRlIHRvIHRyYW5zaXRpb24gdG8uICAoMCBpcyB0aGUKKyAgICAgKiAiZXJyb3IiIHN0YXRlLCBhbmQgLTEgaXMgdGhlICJlbmQgb2Ygd29yZCIgc3RhdGUgaW4gYSBkaWN0aW9uYXJ5KQorICAgICAqIEBwYXJhbSByb3cgVGhlIHJvdyBudW1iZXIgb2YgdGhlIGN1cnJlbnQgc3RhdGUKKyAgICAgKiBAcGFyYW0gY29sIFRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBpbnB1dCBjaGFyYWN0ZXIgKDAgbWVhbnMgIm5vdCBhCisgICAgICogZGljdGlvbmFyeSBjaGFyYWN0ZXIiKQorICAgICAqIEByZXR1cm4gVGhlIHJvdyBudW1iZXIgb2YgdGhlIG5ldyBzdGF0ZSB0byB0cmFuc2l0aW9uIHRvCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHNob3J0IGF0KGludCByb3csIGludCBjb2wpIHsKKyAgICAgICAgaWYgKGNlbGxJc1BvcHVsYXRlZChyb3csIGNvbCkpIHsKKyAgICAgICAgICAgIC8vIHdlIG1hcCBmcm9tIGxvZ2ljYWwgdG8gcGh5c2ljYWwgcm93IG51bWJlciBieSBsb29raW5nIHVwIHRoZQorICAgICAgICAgICAgLy8gbWFwcGluZyBpbiByb3dJbmRleDsgd2UgbWFwIGZyb20gbG9naWNhbCBjb2x1bW4gbnVtYmVyIHRvCisgICAgICAgICAgICAvLyBwaHlzaWNhbCBjb2x1bW4gbnVtYmVyIGJ5IGxvb2tpbmcgdXAgYSBzaGlmdCB2YWx1ZSBmb3IgdGhpcworICAgICAgICAgICAgLy8gbG9naWNhbCByb3cgYW5kIG9mZnNldHRpbmcgdGhlIGxvZ2ljYWwgY29sdW1uIG51bWJlciBieQorICAgICAgICAgICAgLy8gdGhlIHNoaWZ0IGFtb3VudC4gIFRoZW4gd2UgY2FuIHVzZSBpbnRlcm5hbEF0KCkgdG8gYWN0dWFsbHkKKyAgICAgICAgICAgIC8vIGdldCB0aGUgdmFsdWUgb3V0IG9mIHRoZSB0YWJsZS4KKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbEF0KHJvd0luZGV4W3Jvd10sIGNvbCArIHJvd0luZGV4U2hpZnRzW3Jvd10pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHaXZlbiAobG9naWNhbCkgcm93IGFuZCBjb2x1bW4gbnVtYmVycywgcmV0dXJucyB0cnVlIGlmIHRoZQorICAgICAqIGNlbGwgaW4gdGhhdCBwb3NpdGlvbiBpcyBwb3B1bGF0ZWQKKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gY2VsbElzUG9wdWxhdGVkKGludCByb3csIGludCBjb2wpIHsKKyAgICAgICAgLy8gbG9vayB1cCB0aGUgZW50cnkgaW4gdGhlIGJpdG1hcCBpbmRleCBmb3IgdGhlIHNwZWNpZmllZCByb3cuCisgICAgICAgIC8vIElmIGl0J3MgYSBuZWdhdGl2ZSBudW1iZXIsIGl0J3MgdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIG9ubHkKKyAgICAgICAgLy8gcG9wdWxhdGVkIGNlbGwgaW4gdGhlIHJvdworICAgICAgICBpZiAocm93SW5kZXhGbGFnc0luZGV4W3Jvd10gPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gY29sID09IC1yb3dJbmRleEZsYWdzSW5kZXhbcm93XTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIGl0J3MgYSBwb3NpdGl2ZSBudW1iZXIsIGl0J3MgdGhlIG9mZnNldCBvZiBhbiBlbnRyeSBpbiB0aGUgYml0bWFwCisgICAgICAgIC8vIGxpc3QuICBJZiB0aGUgdGFibGUgaXMgbW9yZSB0aGFuIDMyIGNvbHVtbnMgd2lkZSwgdGhlIGJpdG1hcCBpcyBzdG9yZWQKKyAgICAgICAgLy8gc3VjY2Vzc2l2ZSBlbnRyaWVzIGluIHRoZSBiaXRtYXAgbGlzdCwgc28gd2UgaGF2ZSB0byBkaXZpZGUgdGhlIGNvbHVtbgorICAgICAgICAvLyBudW1iZXIgYnkgMzIgYW5kIG9mZnNldCB0aGUgbnVtYmVyIHdlIGdvdCBvdXQgb2YgdGhlIGluZGV4IGJ5IHRoZSByZXN1bHQuCisgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcGllY2Ugb2YgdGhlIGJpdG1hcCwgdGVzdCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gYml0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgZmxhZ3MgPSByb3dJbmRleEZsYWdzW3Jvd0luZGV4RmxhZ3NJbmRleFtyb3ddICsgKGNvbCA+PiA1KV07CisgICAgICAgICAgICByZXR1cm4gKGZsYWdzICYgKDEgPDwgKGNvbCAmIDB4MWYpKSkgIT0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGF0KCkgd2hlbiB3ZSBrbm93IHRoZSBzcGVjaWZpZWQgY2VsbCBpcyBwb3B1bGF0ZWQuCisgICAgICogQHBhcmFtIHJvdyBUaGUgUEhZU0lDQUwgcm93IG51bWJlciBvZiB0aGUgY2VsbAorICAgICAqIEBwYXJhbSBjb2wgVGhlIFBIWVNJQ0FMIGNvbHVtbiBudW1iZXIgb2YgdGhlIGNlbGwKKyAgICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIGNlbGwKKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIHNob3J0IGludGVybmFsQXQoaW50IHJvdywgaW50IGNvbCkgeworICAgICAgICAvLyB0aGUgdGFibGUgaXMgYSBvbmUtZGltZW5zaW9uYWwgYXJyYXksIHNvIHRoaXMganVzdCBkb2VzIHRoZSBtYXRoIG5lY2Vzc2FyeQorICAgICAgICAvLyB0byB0cmVhdCBpdCBhcyBhIHR3by1kaW1lbnNpb25hbCBhcnJheSAod2UgZG9uJ3QganVzdCB1c2UgYSB0d28tZGltZW5zaW9uYWwKKyAgICAgICAgLy8gYXJyYXkgYmVjYXVzZSB0d28tZGltZW5zaW9uYWwgYXJyYXlzIGFyZSBpbmVmZmljaWVudCBpbiBKYXZhKQorICAgICAgICByZXR1cm4gdGFibGVbcm93ICogbnVtQ29scyArIGNvbF07CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODU3ODY3NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0JyZWFrSXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDcxOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvQnJlYWtJdGVyYXRvci5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjE6MjggJAorICogJFJldmlzaW9uOiAxLjEzICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZVNlcnZpY2UuTG9jYWxlS2V5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZS5JQ1VSZXNvdXJjZUJ1bmRsZUZhY3Rvcnk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZS5GYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZS5LZXk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5Mb2NhbGVVdGlsaXR5OworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubGFuZy5yZWYuU29mdFJlZmVyZW5jZTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKKy8qKgorICogQSBjbGFzcyB0aGF0IGxvY2F0ZXMgYm91bmRhcmllcyBpbiB0ZXh0LiAgVGhpcyBjbGFzcyBkZWZpbmVzIGEgcHJvdG9jb2wgZm9yCisgKiBvYmplY3RzIHRoYXQgYnJlYWsgdXAgYSBwaWVjZSBvZiBuYXR1cmFsLWxhbmd1YWdlIHRleHQgYWNjb3JkaW5nIHRvIGEgc2V0CisgKiBvZiBjcml0ZXJpYS4gIEluc3RhbmNlcyBvciBzdWJjbGFzc2VzIG9mIEJyZWFrSXRlcmF0b3IgY2FuIGJlIHByb3ZpZGVkLCBmb3IKKyAqIGV4YW1wbGUsIHRvIGJyZWFrIGEgcGllY2Ugb2YgdGV4dCBpbnRvIHdvcmRzLCBzZW50ZW5jZXMsIG9yIGxvZ2ljYWwgY2hhcmFjdGVycworICogYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBvZiBzb21lIGxhbmd1YWdlIG9yIGdyb3VwIG9mIGxhbmd1YWdlcy4KKyAqCisgKiBXZSBwcm92aWRlIGZvdXIgYnVpbHQtaW4gdHlwZXMgb2YgQnJlYWtJdGVyYXRvcjoKKyAqIDx1bD48bGk+Z2V0U2VudGVuY2VJbnN0YW5jZSgpIHJldHVybnMgYSBCcmVha0l0ZXJhdG9yIHRoYXQgbG9jYXRlcyBib3VuZGFyaWVzCisgKiBiZXR3ZWVuIHNlbnRlbmNlcy4gIFRoaXMgaXMgdXNlZnVsIGZvciB0cmlwbGUtY2xpY2sgc2VsZWN0aW9uLCBmb3IgZXhhbXBsZS4KKyAqIDxsaT5nZXRXb3JkSW5zdGFuY2UoKSByZXR1cm5zIGEgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgYm91bmRhcmllcyBiZXR3ZWVuCisgKiB3b3Jkcy4gIFRoaXMgaXMgdXNlZnVsIGZvciBkb3VibGUtY2xpY2sgc2VsZWN0aW9uIG9yICJmaW5kIHdob2xlIHdvcmRzIiBzZWFyY2hlcy4KKyAqIFRoaXMgdHlwZSBvZiBCcmVha0l0ZXJhdG9yIG1ha2VzIHN1cmUgdGhlcmUgaXMgYSBib3VuZGFyeSBwb3NpdGlvbiBhdCB0aGUKKyAqIGJlZ2lubmluZyBhbmQgZW5kIG9mIGVhY2ggbGVnYWwgd29yZC4gIChOdW1iZXJzIGNvdW50IGFzIHdvcmRzLCB0b28uKSAgV2hpdGVzcGFjZQorICogYW5kIHB1bmN0dWF0aW9uIGFyZSBrZXB0IHNlcGFyYXRlIGZyb20gcmVhbCB3b3Jkcy4KKyAqIDxsaT5nZXRMaW5lSW5zdGFuY2UoKSByZXR1cm5zIGEgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgcG9zaXRpb25zIHdoZXJlIGl0IGlzCisgKiBsZWdhbCBmb3IgYSB0ZXh0IGVkaXRvciB0byB3cmFwIGxpbmVzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHdvcmQgYnJlYWtpbmcsIGJ1dAorICogbm90IHRoZSBzYW1lOiBwdW5jdHVhdGlvbiBhbmQgd2hpdGVzcGFjZSBhcmUgZ2VuZXJhbGx5IGtlcHQgd2l0aCB3b3JkcyAoeW91IGRvbid0CisgKiB3YW50IGEgbGluZSB0byBzdGFydCB3aXRoIHdoaXRlc3BhY2UsIGZvciBleGFtcGxlKSwgYW5kIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzCisgKiBjYW4gZm9yY2UgYSBwb3NpdGlvbiB0byBiZSBjb25zaWRlcmVkIGEgbGluZS1icmVhayBwb3NpdGlvbiBvciBwcmV2ZW50IGEgcG9zaXRpb24KKyAqIGZyb20gYmVpbmcgYSBsaW5lLWJyZWFrIHBvc2l0aW9uLgorICogPGxpPmdldENoYXJhY3Rlckluc3RhbmNlKCkgcmV0dXJucyBhIEJyZWFrSXRlcmF0b3IgdGhhdCBsb2NhdGVzIGJvdW5kYXJpZXMgYmV0d2VlbgorICogbG9naWNhbCBjaGFyYWN0ZXJzLiAgQmVjYXVzZSBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBVbmljb2RlIGVuY29kaW5nLCBhIGxvZ2ljYWwKKyAqIGNoYXJhY3RlciBtYXkgYmUgc3RvcmVkIGludGVybmFsbHkgYXMgbW9yZSB0aGFuIG9uZSBVbmljb2RlIGNvZGUgcG9pbnQuICAoQSB3aXRoIGFuCisgKiB1bWxhdXQgbWF5IGJlIHN0b3JlZCBhcyBhbiBhIGZvbGxvd2VkIGJ5IGEgc2VwYXJhdGUgY29tYmluaW5nIHVtbGF1dCBjaGFyYWN0ZXIsCisgKiBmb3IgZXhhbXBsZSwgYnV0IHRoZSB1c2VyIHN0aWxsIHRoaW5rcyBvZiBpdCBhcyBvbmUgY2hhcmFjdGVyLikgIFRoaXMgaXRlcmF0b3IgYWxsb3dzCisgKiB2YXJpb3VzIHByb2Nlc3NlcyAoZXNwZWNpYWxseSB0ZXh0IGVkaXRvcnMpIHRvIHRyZWF0IGFzIGNoYXJhY3RlcnMgdGhlIHVuaXRzIG9mIHRleHQKKyAqIHRoYXQgYSB1c2VyIHdvdWxkIHRoaW5rIG9mIGFzIGNoYXJhY3RlcnMsIHJhdGhlciB0aGFuIHRoZSB1bml0cyBvZiB0ZXh0IHRoYXQgdGhlCisgKiBjb21wdXRlciBzZWVzIGFzICJjaGFyYWN0ZXJzIi48L3VsPgorICoKKyAqIEJyZWFrSXRlcmF0b3IncyBpbnRlcmZhY2UgZm9sbG93cyBhbiAiaXRlcmF0b3IiIG1vZGVsIChoZW5jZSB0aGUgbmFtZSksIG1lYW5pbmcgaXQKKyAqIGhhcyBhIGNvbmNlcHQgb2YgYSAiY3VycmVudCBwb3NpdGlvbiIgYW5kIG1ldGhvZHMgbGlrZSBmaXJzdCgpLCBsYXN0KCksIG5leHQoKSwKKyAqIGFuZCBwcmV2aW91cygpIHRoYXQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLiAgQWxsIEJyZWFrSXRlcmF0b3JzIHVwaG9sZCB0aGUKKyAqIGZvbGxvd2luZyBpbnZhcmlhbnRzOgorICogPHVsPjxsaT5UaGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHRleHQgYXJlIGFsd2F5cyB0cmVhdGVkIGFzIGJvdW5kYXJ5IHBvc2l0aW9ucy4KKyAqIDxsaT5UaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgaXRlcmF0b3IgaXMgYWx3YXlzIGEgYm91bmRhcnkgcG9zaXRpb24gKHJhbmRvbS0KKyAqIGFjY2VzcyBtZXRob2RzIG1vdmUgdGhlIGl0ZXJhdG9yIHRvIHRoZSBuZWFyZXN0IGJvdW5kYXJ5IHBvc2l0aW9uIGJlZm9yZSBvcgorICogYWZ0ZXIgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiwgbm90IF90b18gdGhlIHNwZWNpZmllZCBwb3NpdGlvbikuCisgKiA8bGk+RE9ORSBpcyB1c2VkIGFzIGEgZmxhZyB0byBpbmRpY2F0ZSB3aGVuIGl0ZXJhdGlvbiBoYXMgc3RvcHBlZC4gIERPTkUgaXMgb25seQorICogcmV0dXJuZWQgd2hlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyB0aGUgZW5kIG9mIHRoZSB0ZXh0IGFuZCB0aGUgdXNlciBjYWxscyBuZXh0KCksCisgKiBvciB3aGVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQgYW5kIHRoZSB1c2VyIGNhbGxzCisgKiBwcmV2aW91cygpLgorICogPGxpPkJyZWFrIHBvc2l0aW9ucyBhcmUgbnVtYmVyZWQgYnkgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY2hhcmFjdGVycyB0aGF0IGZvbGxvdworICogdGhlbS4gIFRodXMsIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCB0aGUgcG9zaXRpb24gYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAqIGlzIDAsIHRoZSBwb3NpdGlvbiBhZnRlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIDEsIGFuZCB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlCisgKiBsYXN0IGNoYXJhY3RlciBpcyAxIHBsdXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICogPGxpPlRoZSBjbGllbnQgY2FuIGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYW4gaXRlcmF0b3IsIG9yIHRoZSB0ZXh0IGl0IGFuYWx5emVzLAorICogYXQgd2lsbCwgYnV0IGNhbm5vdCBjaGFuZ2UgdGhlIGJlaGF2aW9yLiAgSWYgdGhlIHVzZXIgd2FudHMgZGlmZmVyZW50IGJlaGF2aW9yLCBoZQorICogbXVzdCBpbnN0YW50aWF0ZSBhIG5ldyBpdGVyYXRvci48L3VsPgorICoKKyAqIEJyZWFrSXRlcmF0b3IgYWNjZXNzZXMgdGhlIHRleHQgaXQgYW5hbHl6ZXMgdGhyb3VnaCBhIENoYXJhY3Rlckl0ZXJhdG9yLCB3aGljaCBtYWtlcworICogaXQgcG9zc2libGUgdG8gdXNlIEJyZWFrSXRlcmF0b3IgdG8gYW5hbHl6ZSB0ZXh0IGluIGFueSB0ZXh0LXN0b3JhZ2UgdmVoaWNsZSB0aGF0CisgKiBwcm92aWRlcyBhIENoYXJhY3Rlckl0ZXJhdG9yIGludGVyZmFjZS4KKyAqCisgKiA8Yj5OT1RFOjwvYj4gIFNvbWUgdHlwZXMgb2YgQnJlYWtJdGVyYXRvciBjYW4gdGFrZSBhIGxvbmcgdGltZSB0byBjcmVhdGUsIGFuZAorICogaW5zdGFuY2VzIG9mIEJyZWFrSXRlcmF0b3IgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGVkIGJ5IHRoZSBzeXN0ZW0uICBGb3IKKyAqIG9wdGltYWwgcGVyZm9ybWFuY2UsIGtlZXAgaW5zdGFuY2VzIG9mIEJyZWFrSXRlcmF0b3IgYXJvdW5kIGFzIGxvbmcgYXMgbWFrZXMKKyAqIHNlbnNlLiAgRm9yIGV4YW1wbGUsIHdoZW4gd29yZC13cmFwcGluZyBhIGRvY3VtZW50LCBkb24ndCBjcmVhdGUgYW5kIGRlc3Ryb3kgYQorICogbmV3IEJyZWFrSXRlcmF0b3IgZm9yIGVhY2ggbGluZS4gIENyZWF0ZSBvbmUgYnJlYWsgaXRlcmF0b3IgZm9yIHRoZSB3aG9sZSBkb2N1bWVudAorICogKG9yIHdoYXRldmVyIHN0cmV0Y2ggb2YgdGV4dCB5b3UncmUgd3JhcHBpbmcpIGFuZCB1c2UgaXQgdG8gZG8gdGhlIHdob2xlIGpvYiBvZgorICogd3JhcHBpbmcgdGhlIHRleHQuCisgKgorICAqIDxQPgorICogPHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjo8UD4KKyAqIENyZWF0aW5nIGFuZCB1c2luZyB0ZXh0IGJvdW5kYXJpZXMKKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAqICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKKyAqICAgICAgICAgIFN0cmluZyBzdHJpbmdUb0V4YW1pbmUgPSBhcmdzWzBdOworICogICAgICAgICAgLy9wcmludCBlYWNoIHdvcmQgaW4gb3JkZXIKKyAqICAgICAgICAgIEJyZWFrSXRlcmF0b3IgYm91bmRhcnkgPSBCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZSgpOworICogICAgICAgICAgYm91bmRhcnkuc2V0VGV4dChzdHJpbmdUb0V4YW1pbmUpOworICogICAgICAgICAgcHJpbnRFYWNoRm9yd2FyZChib3VuZGFyeSwgc3RyaW5nVG9FeGFtaW5lKTsKKyAqICAgICAgICAgIC8vcHJpbnQgZWFjaCBzZW50ZW5jZSBpbiByZXZlcnNlIG9yZGVyCisgKiAgICAgICAgICBib3VuZGFyeSA9IEJyZWFrSXRlcmF0b3IuZ2V0U2VudGVuY2VJbnN0YW5jZShMb2NhbGUuVVMpOworICogICAgICAgICAgYm91bmRhcnkuc2V0VGV4dChzdHJpbmdUb0V4YW1pbmUpOworICogICAgICAgICAgcHJpbnRFYWNoQmFja3dhcmQoYm91bmRhcnksIHN0cmluZ1RvRXhhbWluZSk7CisgKiAgICAgICAgICBwcmludEZpcnN0KGJvdW5kYXJ5LCBzdHJpbmdUb0V4YW1pbmUpOworICogICAgICAgICAgcHJpbnRMYXN0KGJvdW5kYXJ5LCBzdHJpbmdUb0V4YW1pbmUpOworICogICAgICB9CisgKiB9CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiBQcmludCBlYWNoIGVsZW1lbnQgaW4gb3JkZXIKKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludEVhY2hGb3J3YXJkKEJyZWFrSXRlcmF0b3IgYm91bmRhcnksIFN0cmluZyBzb3VyY2UpIHsKKyAqICAgICBpbnQgc3RhcnQgPSBib3VuZGFyeS5maXJzdCgpOworICogICAgIGZvciAoaW50IGVuZCA9IGJvdW5kYXJ5Lm5leHQoKTsKKyAqICAgICAgICAgIGVuZCAhPSBCcmVha0l0ZXJhdG9yLkRPTkU7CisgKiAgICAgICAgICBzdGFydCA9IGVuZCwgZW5kID0gYm91bmRhcnkubmV4dCgpKSB7CisgKiAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc291cmNlLnN1YnN0cmluZyhzdGFydCxlbmQpKTsKKyAqICAgICB9CisgKiB9CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiBQcmludCBlYWNoIGVsZW1lbnQgaW4gcmV2ZXJzZSBvcmRlcgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogcHVibGljIHN0YXRpYyB2b2lkIHByaW50RWFjaEJhY2t3YXJkKEJyZWFrSXRlcmF0b3IgYm91bmRhcnksIFN0cmluZyBzb3VyY2UpIHsKKyAqICAgICBpbnQgZW5kID0gYm91bmRhcnkubGFzdCgpOworICogICAgIGZvciAoaW50IHN0YXJ0ID0gYm91bmRhcnkucHJldmlvdXMoKTsKKyAqICAgICAgICAgIHN0YXJ0ICE9IEJyZWFrSXRlcmF0b3IuRE9ORTsKKyAqICAgICAgICAgIGVuZCA9IHN0YXJ0LCBzdGFydCA9IGJvdW5kYXJ5LnByZXZpb3VzKCkpIHsKKyAqICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNvdXJjZS5zdWJzdHJpbmcoc3RhcnQsZW5kKSk7CisgKiAgICAgfQorICogfQorICogPC9wcmU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKgorICogUHJpbnQgZmlyc3QgZWxlbWVudAorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogcHVibGljIHN0YXRpYyB2b2lkIHByaW50Rmlyc3QoQnJlYWtJdGVyYXRvciBib3VuZGFyeSwgU3RyaW5nIHNvdXJjZSkgeworICogICAgIGludCBzdGFydCA9IGJvdW5kYXJ5LmZpcnN0KCk7CisgKiAgICAgaW50IGVuZCA9IGJvdW5kYXJ5Lm5leHQoKTsKKyAqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc291cmNlLnN1YnN0cmluZyhzdGFydCxlbmQpKTsKKyAqIH0KKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIFByaW50IGxhc3QgZWxlbWVudAorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogcHVibGljIHN0YXRpYyB2b2lkIHByaW50TGFzdChCcmVha0l0ZXJhdG9yIGJvdW5kYXJ5LCBTdHJpbmcgc291cmNlKSB7CisgKiAgICAgaW50IGVuZCA9IGJvdW5kYXJ5Lmxhc3QoKTsKKyAqICAgICBpbnQgc3RhcnQgPSBib3VuZGFyeS5wcmV2aW91cygpOworICogICAgIFN5c3RlbS5vdXQucHJpbnRsbihzb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LGVuZCkpOworICogfQorICogPC9wcmU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKgorICogUHJpbnQgdGhlIGVsZW1lbnQgYXQgYSBzcGVjaWZpZWQgcG9zaXRpb24KKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludEF0KEJyZWFrSXRlcmF0b3IgYm91bmRhcnksIGludCBwb3MsIFN0cmluZyBzb3VyY2UpIHsKKyAqICAgICBpbnQgZW5kID0gYm91bmRhcnkuZm9sbG93aW5nKHBvcyk7CisgKiAgICAgaW50IHN0YXJ0ID0gYm91bmRhcnkucHJldmlvdXMoKTsKKyAqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc291cmNlLnN1YnN0cmluZyhzdGFydCxlbmQpKTsKKyAqIH0KKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIEZpbmQgdGhlIG5leHQgd29yZAorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogcHVibGljIHN0YXRpYyBpbnQgbmV4dFdvcmRTdGFydEFmdGVyKGludCBwb3MsIFN0cmluZyB0ZXh0KSB7CisgKiAgICAgQnJlYWtJdGVyYXRvciB3YiA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKCk7CisgKiAgICAgd2Iuc2V0VGV4dCh0ZXh0KTsKKyAqICAgICBpbnQgbGFzdCA9IHdiLmZvbGxvd2luZyhwb3MpOworICogICAgIGludCBjdXJyZW50ID0gd2IubmV4dCgpOworICogICAgIHdoaWxlIChjdXJyZW50ICE9IEJyZWFrSXRlcmF0b3IuRE9ORSkgeworICogICAgICAgICBmb3IgKGludCBwID0gbGFzdDsgcCA8IGN1cnJlbnQ7IHArKykgeworICogICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc0xldHRlcih0ZXh0LmNoYXJBdChwKSkKKyAqICAgICAgICAgICAgICAgICByZXR1cm4gbGFzdDsKKyAqICAgICAgICAgfQorICogICAgICAgICBsYXN0ID0gY3VycmVudDsKKyAqICAgICAgICAgY3VycmVudCA9IHdiLm5leHQoKTsKKyAqICAgICB9CisgKiAgICAgcmV0dXJuIEJyZWFrSXRlcmF0b3IuRE9ORTsKKyAqIH0KKyAqIDwvcHJlPgorICogKFRoZSBpdGVyYXRvciByZXR1cm5lZCBieSBCcmVha0l0ZXJhdG9yLmdldFdvcmRJbnN0YW5jZSgpIGlzIHVuaXF1ZSBpbiB0aGF0CisgKiB0aGUgYnJlYWsgcG9zaXRpb25zIGl0IHJldHVybnMgZG9uJ3QgcmVwcmVzZW50IGJvdGggdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlCisgKiB0aGluZyBiZWluZyBpdGVyYXRlZCBvdmVyLiAgVGhhdCBpcywgYSBzZW50ZW5jZS1icmVhayBpdGVyYXRvciByZXR1cm5zIGJyZWFrcworICogdGhhdCBlYWNoIHJlcHJlc2VudCB0aGUgZW5kIG9mIG9uZSBzZW50ZW5jZSBhbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dC4KKyAqIFdpdGggdGhlIHdvcmQtYnJlYWsgaXRlcmF0b3IsIHRoZSBjaGFyYWN0ZXJzIGJldHdlZW4gdHdvIGJvdW5kYXJpZXMgbWlnaHQgYmUgYQorICogd29yZCwgb3IgdGhleSBtaWdodCBiZSB0aGUgcHVuY3R1YXRpb24gb3Igd2hpdGVzcGFjZSBiZXR3ZWVuIHR3byB3b3Jkcy4gIFRoZQorICogYWJvdmUgY29kZSB1c2VzIGEgc2ltcGxlIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgd2hpY2ggYm91bmRhcnkgaXMgdGhlIGJlZ2lubmluZworICogb2YgYSB3b3JkOiBJZiB0aGUgY2hhcmFjdGVycyBiZXR3ZWVuIHRoaXMgYm91bmRhcnkgYW5kIHRoZSBuZXh0IGJvdW5kYXJ5CisgKiBpbmNsdWRlIGF0IGxlYXN0IG9uZSBsZXR0ZXIgKHRoaXMgY2FuIGJlIGFuIGFscGhhYmV0aWNhbCBsZXR0ZXIsIGEgQ0pLIGlkZW9ncmFwaCwKKyAqIGEgSGFuZ3VsIHN5bGxhYmxlLCBhIEthbmEgY2hhcmFjdGVyLCBldGMuKSwgdGhlbiB0aGUgdGV4dCBiZXR3ZWVuIHRoaXMgYm91bmRhcnkKKyAqIGFuZCB0aGUgbmV4dCBpcyBhIHdvcmQ7IG90aGVyd2lzZSwgaXQncyB0aGUgbWF0ZXJpYWwgYmV0d2VlbiB3b3Jkcy4pCisgKiA8L2Jsb2NrcXVvdGU+CisgKgorICogQHNlZSBDaGFyYWN0ZXJJdGVyYXRvcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKgorICovCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCcmVha0l0ZXJhdG9yIGltcGxlbWVudHMgQ2xvbmVhYmxlCit7CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4gIFRoZXJlIGlzIG5vIHN0YXRlIHRoYXQgaXMgY2FycmllZCBieSB0aGlzIGFic3RyYWN0CisgICAgICogYmFzZSBjbGFzcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQnJlYWtJdGVyYXRvcigpCisgICAgeworICAgIH0KKworICAgIC8qKgorICAgICAqIENsb25lIG1ldGhvZC4gIENyZWF0ZXMgYW5vdGhlciBCcmVha0l0ZXJhdG9yIHdpdGggdGhlIHNhbWUgYmVoYXZpb3IgYW5kCisgICAgICogY3VycmVudCBzdGF0ZSBhcyB0aGlzIG9uZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBjbG9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERPTkUgaXMgcmV0dXJuZWQgYnkgcHJldmlvdXMoKSBhbmQgbmV4dCgpIGFmdGVyIGFsbCB2YWxpZAorICAgICAqIGJvdW5kYXJpZXMgaGF2ZSBiZWVuIHJldHVybmVkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPTkUgPSAtMTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZmlyc3QgYm91bmRhcnkgcG9zaXRpb24uICBUaGlzIGlzIGFsd2F5cyB0aGUgYmVnaW5uaW5nCisgICAgICogaW5kZXggb2YgdGhlIHRleHQgdGhpcyBpdGVyYXRvciBpdGVyYXRlcyBvdmVyLiAgRm9yIGV4YW1wbGUsIGlmCisgICAgICogdGhlIGl0ZXJhdG9yIGl0ZXJhdGVzIG92ZXIgYSB3aG9sZSBzdHJpbmcsIHRoaXMgZnVuY3Rpb24gd2lsbAorICAgICAqIGFsd2F5cyByZXR1cm4gMC4gIFRoaXMgZnVuY3Rpb24gYWxzbyB1cGRhdGVzIHRoZSBpdGVyYXRpb24gcG9zaXRpb24KKyAgICAgKiB0byBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gVGhlIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZXRjaCBvZiB0ZXh0CisgICAgICogYmVpbmcgYnJva2VuLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZmlyc3QoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbGFzdCBib3VuZGFyeSBwb3NpdGlvbi4gIFRoaXMgaXMgYWx3YXlzIHRoZSAicGFzdC10aGUtZW5kIgorICAgICAqIGluZGV4IG9mIHRoZSB0ZXh0IHRoaXMgaXRlcmF0b3IgaXRlcmF0ZXMgb3Zlci4gIEZvciBleGFtcGxlLCBpZiB0aGUKKyAgICAgKiBpdGVyYXRvciBpdGVyYXRlcyBvdmVyIGEgd2hvbGUgc3RyaW5nIChjYWxsIGl0ICJ0ZXh0IiksIHRoaXMgZnVuY3Rpb24KKyAgICAgKiB3aWxsIGFsd2F5cyByZXR1cm4gdGV4dC5sZW5ndGgoKS4gIFRoaXMgZnVuY3Rpb24gYWxzbyB1cGRhdGVkIHRoZQorICAgICAqIGl0ZXJhdGlvbiBwb3NpdGlvbiB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gVGhlIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIGVuZCBvZiB0aGUgc3RyZXRjaCBvZiB0ZXh0CisgICAgICogYmVpbmcgYnJva2VuLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgbGFzdCgpOworCisgICAgLyoqCisgICAgICogQWR2YW5jZXMgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc3RlcHMgZm9yd2FyZCBpbiB0aGUgdGV4dCAoYSBuZWdhdGl2ZQorICAgICAqIG51bWJlciwgdGhlcmVmb3JlLCBhZHZhbmNlcyBiYWNrd2FyZHMpLiAgSWYgdGhpcyBjYXVzZXMgdGhlIGl0ZXJhdG9yCisgICAgICogdG8gYWR2YW5jZSBvZmYgZWl0aGVyIGVuZCBvZiB0aGUgdGV4dCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIERPTkU7CisgICAgICogb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBhcHByb3ByaWF0ZQorICAgICAqIGJvdW5kYXJ5LiAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBuZXh0KCkgb3IKKyAgICAgKiBwcmV2aW91cygpIG4gdGltZXMuCisgICAgICogQHBhcmFtIG4gVGhlIG51bWJlciBvZiBib3VuZGFyaWVzIHRvIGFkdmFuY2Ugb3ZlciAoaWYgcG9zaXRpdmUsIG1vdmVzCisgICAgICogZm9yd2FyZDsgaWYgbmVnYXRpdmUsIG1vdmVzIGJhY2t3YXJkcykuCisgICAgICogQHJldHVybiBUaGUgcG9zaXRpb24gb2YgdGhlIGJvdW5kYXJ5IG4gYm91bmRhcmllcyBmcm9tIHRoZSBjdXJyZW50CisgICAgICogaXRlcmF0aW9uIHBvc2l0aW9uLCBvciBET05FIGlmIG1vdmluZyBuIGJvdW5kYXJpZXMgY2F1c2VzIHRoZSBpdGVyYXRvcgorICAgICAqIHRvIGFkdmFuY2Ugb2ZmIGVpdGhlciBlbmQgb2YgdGhlIHRleHQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBuZXh0KGludCBuKTsKKworICAgIC8qKgorICAgICAqIEFkdmFuY2VzIHRoZSBpdGVyYXRvciBmb3J3YXJkIG9uZSBib3VuZGFyeS4gIFRoZSBjdXJyZW50IGl0ZXJhdGlvbgorICAgICAqIHBvc2l0aW9uIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIG5leHQgYm91bmRhcnkgcG9zaXRpb24gYWZ0ZXIgdGhlCisgICAgICogY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoaXMgaXMgYWxzbyB0aGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZC4gIElmCisgICAgICogdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgZXF1YWwgdG8gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGxhc3QoKSwgb3IgdG8KKyAgICAgKiBET05FLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgRE9ORSBhbmQgc2V0cyB0aGUgY3VycmVudCBwb3NpdGlvbiB0bworICAgICAqIERPTkUuCisgICAgICogQHJldHVybiBUaGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJvdW5kYXJ5IHBvc2l0aW9uIGZvbGxvd2luZyB0aGUKKyAgICAgKiBpdGVyYXRpb24gcG9zaXRpb24uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBuZXh0KCk7CisKKyAgICAvKioKKyAgICAgKiBBZHZhbmNlcyB0aGUgaXRlcmF0b3IgYmFja3dhcmQgb25lIGJvdW5kYXJ5LiAgVGhlIGN1cnJlbnQgaXRlcmF0aW9uCisgICAgICogcG9zaXRpb24gaXMgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbGFzdCBib3VuZGFyeSBwb3NpdGlvbiBiZWZvcmUKKyAgICAgKiB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoaXMgaXMgYWxzbyB0aGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZC4gIElmCisgICAgICogdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgZXF1YWwgdG8gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGZpcnN0KCksIG9yIHRvCisgICAgICogRE9ORSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIERPTkUgYW5kIHNldHMgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8KKyAgICAgKiBET05FLgorICAgICAqIEByZXR1cm4gVGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGJvdW5kYXJ5IHBvc2l0aW9uIHByZWNlZGluZyB0aGUKKyAgICAgKiBpdGVyYXRpb24gcG9zaXRpb24uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBwcmV2aW91cygpOworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgaXRlcmF0b3IncyBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiB0byBiZSB0aGUgZmlyc3QKKyAgICAgKiBib3VuZGFyeSBwb3NpdGlvbiBmb2xsb3dpbmcgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4gIChXaGV0aGVyIHRoZQorICAgICAqIHNwZWNpZmllZCBwb3NpdGlvbiBpcyBpdHNlbGYgYSBib3VuZGFyeSBwb3NpdGlvbiBvciBub3QgZG9lc24ndAorICAgICAqIG1hdHRlci0tIHRoaXMgZnVuY3Rpb24gYWx3YXlzIG1vdmVzIHRoZSBpdGVyYXRpb24gcG9zaXRpb24gdG8gdGhlCisgICAgICogZmlyc3QgYm91bmRhcnkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4pICBJZiB0aGUgc3BlY2lmaWVkCisgICAgICogcG9zaXRpb24gaXMgdGhlIHBhc3QtdGhlLWVuZCBwb3NpdGlvbiwgcmV0dXJucyBET05FLgorICAgICAqIEBwYXJhbSBvZmZzZXQgVGhlIGNoYXJhY3RlciBwb3NpdGlvbiB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4KKyAgICAgKiBAcmV0dXJuIFRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYm91bmRhcnkgcG9zaXRpb24gZm9sbG93aW5nCisgICAgICogIm9mZnNldCIgKHdoZXRoZXIgb3Igbm90ICJvZmZzZXQiIGl0c2VsZiBpcyBhIGJvdW5kYXJ5IHBvc2l0aW9uKSwKKyAgICAgKiBvciBET05FIGlmICJvZmZzZXQiIGlzIHRoZSBwYXN0LXRoZS1lbmQgb2Zmc2V0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZm9sbG93aW5nKGludCBvZmZzZXQpOworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgaXRlcmF0b3IncyBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiB0byBiZSB0aGUgbGFzdAorICAgICAqIGJvdW5kYXJ5IHBvc2l0aW9uIHByZWNlZGluZyB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiAgKFdoZXRoZXIgdGhlCisgICAgICogc3BlY2lmaWVkIHBvc2l0aW9uIGlzIGl0c2VsZiBhIGJvdW5kYXJ5IHBvc2l0aW9uIG9yIG5vdCBkb2Vzbid0CisgICAgICogbWF0dGVyLS0gdGhpcyBmdW5jdGlvbiBhbHdheXMgbW92ZXMgdGhlIGl0ZXJhdGlvbiBwb3NpdGlvbiB0byB0aGUKKyAgICAgKiBsYXN0IGJvdW5kYXJ5IGJlZm9yZSB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLikgIElmIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBwb3NpdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24sIHJldHVybnMgRE9ORS4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uCisgICAgICogQHJldHVybiBUaGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgYm91bmRhcnkgcG9zaXRpb24gcHJlY2VkaW5nCisgICAgICogIm9mZnNldCIgKHdoZXRoZXIgb2Ygbm90ICJvZmZzZXQiIGl0c2VsZiBpcyBhIGJvdW5kYXJ5IHBvc2l0aW9uKSwKKyAgICAgKiBvciBET05FIGlmICJvZmZzZXQiIGlzIHRoZSBzdGFydGluZyBvZmZzZXQgb2YgdGhlIGl0ZXJhdG9yLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgcHJlY2VkaW5nKGludCBvZmZzZXQpIHsKKyAgICAgICAgLy8gTk9URTogIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaGVyZSBzb2xlbHkgYmVjYXVzZSB3ZSBjYW4ndCBhZGQgbmV3CisgICAgICAgIC8vIGFic3RyYWN0IG1ldGhvZHMgdG8gYW4gZXhpc3RpbmcgY2xhc3MuICBUaGVyZSBpcyBhbG1vc3QgQUxXQVlTIGEKKyAgICAgICAgLy8gYmV0dGVyLCBmYXN0ZXIgd2F5IHRvIGRvIHRoaXMuCisgICAgICAgIGludCBwb3MgPSBmb2xsb3dpbmcob2Zmc2V0KTsKKyAgICAgICAgd2hpbGUgKHBvcyA+PSBvZmZzZXQgJiYgcG9zICE9IERPTkUpCisgICAgICAgICAgICBwb3MgPSBwcmV2aW91cygpOworICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBzcGVjZmllZCBwb3NpdGlvbiBpcyBhIGJvdW5kYXJ5IHBvc2l0aW9uLiAgSWYgdGhlCisgICAgICogZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gaXMgc2V0IHRvIHRoZQorICAgICAqIHNwZWNpZmllZCBwb3NpdGlvbjsgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIHRoZSBjdXJyZW50CisgICAgICogaXRlcmF0aW9uIHBvc2l0aW9uIGlzIHNldCBhcyB0aG91Z2ggZm9sbG93aW5nKCkgaGFkIGJlZW4gY2FsbGVkLgorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJuIFRydWUgaWYgIm9mZnNldCIgaXMgYSBib3VuZGFyeSBwb3NpdGlvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0JvdW5kYXJ5KGludCBvZmZzZXQpIHsKKyAgICAgICAgLy8gQWdhaW4sIHRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHByb3ZpZGVkIHNvbGVseSBiZWNhdXNlCisgICAgICAgIC8vIHdlIGNvdWxkbid0IGFkZCBhIG5ldyBhYnN0cmFjdCBtZXRob2QgdG8gYW4gZXhpc3RpbmcgY2xhc3MuICBUaGUgcmVhbAorICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbnMgd2lsbCB1c3VhbGx5IG5lZWQgdG8gZG8gYSBsaXR0bGUgbW9yZSB3b3JrLgorICAgICAgICBpZiAob2Zmc2V0ID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmb2xsb3dpbmcob2Zmc2V0IC0gMSkgPT0gb2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLgorICAgICAqIEByZXR1cm4gVGhlIGl0ZXJhdG9yJ3MgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGN1cnJlbnQoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDaGFyYWN0ZXJJdGVyYXRvciBvdmVyIHRoZSB0ZXh0IGJlaW5nIGFuYWx5emVkLgorICAgICAqIEZvciBhdCBsZWFzdCBzb21lIHN1YmNsYXNzZXMgb2YgQnJlYWtJdGVyYXRvciwgdGhpcyBpcyBhIHJlZmVyZW5jZQorICAgICAqIHRvIHRoZSA8Yj5hY3R1YWwgaXRlcmF0b3IgYmVpbmcgdXNlZDwvYj4gYnkgdGhlIEJyZWFrSXRlcmF0b3IsCisgICAgICogYW5kIHRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcworICAgICAqIDx0dD5jb25zdDwvdHQ+LiAgTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB0aGUgY3VycmVudCBwb3NpdGlvbgorICAgICAqIG9mIHRoaXMgaXRlcmF0b3Igd2hlbiBpdCBpcyByZXR1cm5lZC4gIElmIHlvdSBuZWVkIHRvIG1vdmUgdGhhdAorICAgICAqIHBvc2l0aW9uIHRvIGV4YW1pbmUgdGhlIHRleHQsIGNsb25lIHRoaXMgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgZmlyc3QuCisgICAgICogQHJldHVybiBBIENoYXJhY3Rlckl0ZXJhdG9yIG92ZXIgdGhlIHRleHQgYmVpbmcgYW5hbHl6ZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IENoYXJhY3Rlckl0ZXJhdG9yIGdldFRleHQoKTsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGl0ZXJhdG9yIHRvIGFuYWx5emUgYSBuZXcgcGllY2Ugb2YgdGV4dC4gIFRoZSBuZXcKKyAgICAgKiBwaWVjZSBvZiB0ZXh0IGlzIHBhc3NlZCBpbiBhcyBhIFN0cmluZywgYW5kIHRoZSBjdXJyZW50CisgICAgICogaXRlcmF0aW9uIHBvc2l0aW9uIGlzIHJlc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4KKyAgICAgKiAoVGhlIG9sZCB0ZXh0IGlzIGRyb3BwZWQuKQorICAgICAqIEBwYXJhbSBuZXdUZXh0IEEgU3RyaW5nIGNvbnRhaW5pbmcgdGhlIHRleHQgdG8gYW5hbHl6ZSB3aXRoCisgICAgICogdGhpcyBCcmVha0l0ZXJhdG9yLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRleHQoU3RyaW5nIG5ld1RleHQpCisgICAgeworICAgICAgICBzZXRUZXh0KG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihuZXdUZXh0KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgaXRlcmF0b3IgdG8gYW5hbHl6ZSBhIG5ldyBwaWVjZSBvZiB0ZXh0LiAgVGhlCisgICAgICogQnJlYWtJdGVyYXRvciBpcyBwYXNzZWQgYSBDaGFyYWN0ZXJJdGVyYXRvciB0aHJvdWdoIHdoaWNoCisgICAgICogaXQgd2lsbCBhY2Nlc3MgdGhlIHRleHQgaXRzZWxmLiAgVGhlIGN1cnJlbnQgaXRlcmF0aW9uCisgICAgICogcG9zaXRpb24gaXMgcmVzZXQgdG8gdGhlIENoYXJhY3Rlckl0ZXJhdG9yJ3Mgc3RhcnQgaW5kZXguCisgICAgICogKFRoZSBvbGQgaXRlcmF0b3IgaXMgZHJvcHBlZC4pCisgICAgICogQHBhcmFtIG5ld1RleHQgQSBDaGFyYWN0ZXJJdGVyYXRvciByZWZlcnJpbmcgdG8gdGhlIHRleHQKKyAgICAgKiB0byBhbmFseXplIHdpdGggdGhpcyBCcmVha0l0ZXJhdG9yICh0aGUgaXRlcmF0b3IncyBjdXJyZW50CisgICAgICogcG9zaXRpb24gaXMgaWdub3JlZCwgYnV0IGl0cyBvdGhlciBzdGF0ZSBpcyBzaWduaWZpY2FudCkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VGV4dChDaGFyYWN0ZXJJdGVyYXRvciBuZXdUZXh0KTsKKworICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSU5EX0NIQVJBQ1RFUiA9IDA7CisgICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtJTkRfV09SRCA9IDE7CisgICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtJTkRfTElORSA9IDI7CisgICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtJTkRfU0VOVEVOQ0UgPSAzOworICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSU5EX1RJVExFID0gNDsKKyAgICAvKgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSEFSQUNURVJfSU5ERVggPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXT1JEX0lOREVYID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElORV9JTkRFWCA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFTlRFTkNFX0lOREVYID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVElUTEVfSU5ERVggPSA0OworICAgICovCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNvZnRSZWZlcmVuY2VbXSBpdGVyQ2FjaGUgPSBuZXcgU29mdFJlZmVyZW5jZVs1XTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgd29yZCBib3VuZGFyaWVzLgorICAgICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSB0ZXh0IGJlaW5nIGFuYWx5emVkIGlzIGluIHRoZSBkZWZhdWx0CisgICAgICogbG9jYWxlJ3MgbGFuZ3VhZ2UuCisgICAgICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiBCcmVha0l0ZXJhdG9yIHRoYXQgbG9jYXRlcyB3b3JkIGJvdW5kYXJpZXMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCcmVha0l0ZXJhdG9yIGdldFdvcmRJbnN0YW5jZSgpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0V29yZEluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgd29yZCBib3VuZGFyaWVzLgorICAgICAqIEBwYXJhbSB3aGVyZSBBIGxvY2FsZSBzcGVjaWZ5aW5nIHRoZSBsYW5ndWFnZSBvZiB0aGUgdGV4dCB0byBiZQorICAgICAqIGFuYWx5emVkLgorICAgICAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2YgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgd29yZCBib3VuZGFyaWVzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQnJlYWtJdGVyYXRvciBnZXRXb3JkSW5zdGFuY2UoTG9jYWxlIHdoZXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEJyZWFrSW5zdGFuY2Uod2hlcmUsIEtJTkRfV09SRCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBCcmVha0l0ZXJhdG9yIHRoYXQgbG9jYXRlcyBsZWdhbCBsaW5lLQorICAgICAqIHdyYXBwaW5nIHBvc2l0aW9ucy4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dCBiZWluZyBicm9rZW4KKyAgICAgKiBpcyBpbiB0aGUgZGVmYXVsdCBsb2NhbGUncyBsYW5ndWFnZS4KKyAgICAgKiBAcmV0dXJuIEEgbmV3IGluc3RhbmNlIG9mIEJyZWFrSXRlcmF0b3IgdGhhdCBsb2NhdGVzIGxlZ2FsCisgICAgICogbGluZS13cmFwcGluZyBwb3NpdGlvbnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCcmVha0l0ZXJhdG9yIGdldExpbmVJbnN0YW5jZSgpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0TGluZUluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgbGVnYWwgbGluZS0KKyAgICAgKiB3cmFwcGluZyBwb3NpdGlvbnMuCisgICAgICogQHBhcmFtIHdoZXJlIEEgTG9jYWxlIHNwZWNpZnlpbmcgdGhlIGxhbmd1YWdlIG9mIHRoZSB0ZXh0IGJlaW5nIGJyb2tlbi4KKyAgICAgKiBAcmV0dXJuIEEgbmV3IGluc3RhbmNlIG9mIEJyZWFrSXRlcmF0b3IgdGhhdCBsb2NhdGVzIGxlZ2FsCisgICAgICogbGluZS13cmFwcGluZyBwb3NpdGlvbnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCcmVha0l0ZXJhdG9yIGdldExpbmVJbnN0YW5jZShMb2NhbGUgd2hlcmUpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0QnJlYWtJbnN0YW5jZSh3aGVyZSwgS0lORF9MSU5FKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIEJyZWFrSXRlcmF0b3IgdGhhdCBsb2NhdGVzIGxvZ2ljYWwtY2hhcmFjdGVyCisgICAgICogYm91bmRhcmllcy4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSB0ZXh0IGJlaW5nIGFuYWx5emVkIGlzCisgICAgICogaW4gdGhlIGRlZmF1bHQgbG9jYWxlJ3MgbGFuZ3VhZ2UuCisgICAgICogQHJldHVybiBBIG5ldyBpbnN0YW5jZSBvZiBCcmVha0l0ZXJhdG9yIHRoYXQgbG9jYXRlcyBsb2dpY2FsLWNoYXJhY3RlcgorICAgICAqIGJvdW5kYXJpZXMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCcmVha0l0ZXJhdG9yIGdldENoYXJhY3Rlckluc3RhbmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRDaGFyYWN0ZXJJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIEJyZWFrSXRlcmF0b3IgdGhhdCBsb2NhdGVzIGxvZ2ljYWwtY2hhcmFjdGVyCisgICAgICogYm91bmRhcmllcy4KKyAgICAgKiBAcGFyYW0gd2hlcmUgQSBMb2NhbGUgc3BlY2lmeWluZyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIHRleHQgYmVpbmcgYW5hbHl6ZWQuCisgICAgICogQHJldHVybiBBIG5ldyBpbnN0YW5jZSBvZiBCcmVha0l0ZXJhdG9yIHRoYXQgbG9jYXRlcyBsb2dpY2FsLWNoYXJhY3RlcgorICAgICAqIGJvdW5kYXJpZXMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCcmVha0l0ZXJhdG9yIGdldENoYXJhY3Rlckluc3RhbmNlKExvY2FsZSB3aGVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRCcmVha0luc3RhbmNlKHdoZXJlLCBLSU5EX0NIQVJBQ1RFUik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBCcmVha0l0ZXJhdG9yIHRoYXQgbG9jYXRlcyBzZW50ZW5jZSBib3VuZGFyaWVzLgorICAgICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dCBiZWluZyBhbmFseXplZCBpcyBpbiB0aGUgZGVmYXVsdCBsb2NhbGUncworICAgICAqIGxhbmd1YWdlLgorICAgICAqIEByZXR1cm4gQSBuZXcgaW5zdGFuY2Ugb2YgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgc2VudGVuY2UgYm91bmRhcmllcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJyZWFrSXRlcmF0b3IgZ2V0U2VudGVuY2VJbnN0YW5jZSgpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0U2VudGVuY2VJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIEJyZWFrSXRlcmF0b3IgdGhhdCBsb2NhdGVzIHNlbnRlbmNlIGJvdW5kYXJpZXMuCisgICAgICogQHBhcmFtIHdoZXJlIEEgTG9jYWxlIHNwZWNpZnlpbmcgdGhlIGxhbmd1YWdlIG9mIHRoZSB0ZXh0IGJlaW5nIGFuYWx5emVkLgorICAgICAqIEByZXR1cm4gQSBuZXcgaW5zdGFuY2Ugb2YgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgc2VudGVuY2UgYm91bmRhcmllcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJyZWFrSXRlcmF0b3IgZ2V0U2VudGVuY2VJbnN0YW5jZShMb2NhbGUgd2hlcmUpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0QnJlYWtJbnN0YW5jZSh3aGVyZSwgS0lORF9TRU5URU5DRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBCcmVha0l0ZXJhdG9yIHRoYXQgbG9jYXRlcyBzZW50ZW5jZSBib3VuZGFyaWVzLgorICAgICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dCBiZWluZyBhbmFseXplZCBpcyBpbiB0aGUgZGVmYXVsdCBsb2NhbGUncworICAgICAqIGxhbmd1YWdlLgorICAgICAqIEByZXR1cm4gQSBuZXcgaW5zdGFuY2Ugb2YgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgc2VudGVuY2UgYm91bmRhcmllcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJyZWFrSXRlcmF0b3IgZ2V0VGl0bGVJbnN0YW5jZSgpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0VGl0bGVJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIEJyZWFrSXRlcmF0b3IgdGhhdCBsb2NhdGVzIHNlbnRlbmNlIGJvdW5kYXJpZXMuCisgICAgICogQHBhcmFtIHdoZXJlIEEgTG9jYWxlIHNwZWNpZnlpbmcgdGhlIGxhbmd1YWdlIG9mIHRoZSB0ZXh0IGJlaW5nIGFuYWx5emVkLgorICAgICAqIEByZXR1cm4gQSBuZXcgaW5zdGFuY2Ugb2YgQnJlYWtJdGVyYXRvciB0aGF0IGxvY2F0ZXMgc2VudGVuY2UgYm91bmRhcmllcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJyZWFrSXRlcmF0b3IgZ2V0VGl0bGVJbnN0YW5jZShMb2NhbGUgd2hlcmUpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0QnJlYWtJbnN0YW5jZSh3aGVyZSwgS0lORF9USVRMRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYSBuZXcgYnJlYWsgaXRlcmF0b3Igb2YgdGhlIGluZGljYXRlZCBraW5kLCB0byB1c2UgaW4gdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBDbG9uZXMgb2YgdGhlIGl0ZXJhdG9yIHdpbGwgYmUgcmV0dXJuZWQKKyAgICAgKiBpZiBhIHJlcXVlc3QgZm9yIGEgYnJlYWsgaXRlcmF0b3Igb2YgdGhlIGdpdmVuIGtpbmQgbWF0Y2hlcyBvciBmYWxscyBiYWNrIHRvCisgICAgICogdGhpcyBsb2NhbGUuCisgICAgICogQHBhcmFtIGl0ZXIgdGhlIEJyZWFrSXRlcmF0b3IgaW5zdGFuY2UgdG8gYWRvcHQuCisgICAgICogQHBhcmFtIGxvY2FsZSB0aGUgTG9jYWxlIGZvciB3aGljaCB0aGlzIGluc3RhbmNlIGlzIHRvIGJlIHJlZ2lzdGVyZWQKKyAgICAgKiBAcGFyYW0ga2luZCB0aGUgdHlwZSBvZiBpdGVyYXRvciBmb3Igd2hpY2ggdGhpcyBpbnN0YW5jZSBpcyB0byBiZSByZWdpc3RlcmVkCisgICAgICogQHJldHVybiBhIHJlZ2lzdHJ5IGtleSB0aGF0IGNhbiBiZSB1c2VkIHRvIHVucmVnaXN0ZXIgdGhpcyBpbnN0YW5jZQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVnaXN0ZXJJbnN0YW5jZShCcmVha0l0ZXJhdG9yIGl0ZXIsIExvY2FsZSBsb2NhbGUsIGludCBraW5kKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0U2VydmljZSgpLnJlZ2lzdGVyT2JqZWN0KGl0ZXIsIGxvY2FsZSwga2luZCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidW5rbm93biBraW5kOiAiICsga2luZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbnJlZ2lzdGVyIGEgcHJldmlvdXNseS1yZWdpc3RlcmVkIEJyZWFrSXRlcmF0b3IgdXNpbmcgdGhlIGtleSByZXR1cm5lZCBmcm9tIHRoZQorICAgICAqIHJlZ2lzdGVyIGNhbGwuICBLZXkgYmVjb21lcyBpbnZhbGlkIGFmdGVyIHRoaXMgY2FsbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFnYWluLgorICAgICAqIEBwYXJhbSBrZXkgdGhlIHJlZ2lzdHJ5IGtleSByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gcmVnaXN0ZXJJbnN0YW5jZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgaXRlcmF0b3IgZm9yIHRoZSBrZXkgd2FzIHN1Y2Nlc3NmdWxseSB1bnJlZ2lzdGVyZWQKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB1bnJlZ2lzdGVyKE9iamVjdCBrZXkpIHsKKyAgICAgICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UudW5yZWdpc3RlckZhY3RvcnkoKEZhY3Rvcnkpa2V5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgSUNVTG9jYWxlU2VydmljZSBzZXJ2aWNlOworICAgIHByaXZhdGUgc3RhdGljIElDVUxvY2FsZVNlcnZpY2UgZ2V0U2VydmljZSgpIHsKKyAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgSUNVTG9jYWxlU2VydmljZSBuZXdTZXJ2aWNlID0gbmV3IElDVUxvY2FsZVNlcnZpY2UoIkJyZWFrSXRlcmF0b3IiKTsKKworICAgICAgICAgICAgY2xhc3MgUkJCcmVha0l0ZXJhdG9yRmFjdG9yeSBleHRlbmRzIElDVVJlc291cmNlQnVuZGxlRmFjdG9yeSB7CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBoYW5kbGVDcmVhdGUoTG9jYWxlIGxvYywgaW50IGtpbmQsIElDVVNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQnJlYWtJbnN0YW5jZShsb2MsIGtpbmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld1NlcnZpY2UucmVnaXN0ZXJGYWN0b3J5KG5ldyBSQkJyZWFrSXRlcmF0b3JGYWN0b3J5KCkpOworCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKEJyZWFrSXRlcmF0b3IuY2xhc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgPSBuZXdTZXJ2aWNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBLSU5EX05BTUVTID0geworICAgICAgICAiQ2hhcmFjdGVyIiwgIldvcmQiLCAiTGluZSIsICJTZW50ZW5jZSIsICJUaXRsZSIKKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgQnJlYWtJdGVyYXRvciBjcmVhdGVCcmVha0luc3RhbmNlKExvY2FsZSBsb2NhbGUsIGludCBraW5kKSB7CisgICAgICAgIFN0cmluZyBwcmVmaXggPSBLSU5EX05BTUVTW2tpbmRdOworICAgICAgICByZXR1cm4gY3JlYXRlQnJlYWtJbnN0YW5jZShsb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICJCcmVha1J1bGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgIkJyZWFrRGljdGlvbmFyeSIpOworICAgIH0KKworICAgIC8vIGVuZCBvZiByZWdpc3RyYXRpb24KKworICAgIHByaXZhdGUgc3RhdGljIEJyZWFrSXRlcmF0b3IgZ2V0QnJlYWtJbnN0YW5jZShMb2NhbGUgd2hlcmUsIGludCBraW5kKSB7CisKKyAgICAgICAgaWYgKGl0ZXJDYWNoZVtraW5kXSAhPSBudWxsKSB7CisgICAgICAgICAgICBCcmVha0l0ZXJhdG9yQ2FjaGUgY2FjaGUgPSAoQnJlYWtJdGVyYXRvckNhY2hlKSBpdGVyQ2FjaGVba2luZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoY2FjaGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChjYWNoZS5nZXRMb2NhbGUoKS5lcXVhbHMod2hlcmUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZS5jcmVhdGVCcmVha0luc3RhbmNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQnJlYWtJdGVyYXRvciByZXN1bHQgPSBjcmVhdGVCcmVha0luc3RhbmNlKHdoZXJlLCBraW5kKTsKKyAgICAgICAgQnJlYWtJdGVyYXRvckNhY2hlIGNhY2hlID0gbmV3IEJyZWFrSXRlcmF0b3JDYWNoZSh3aGVyZSwgcmVzdWx0KTsKKyAgICAgICAgaXRlckNhY2hlW2tpbmRdID0gbmV3IFNvZnRSZWZlcmVuY2UoY2FjaGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIEJyZWFrSXRlcmF0b3IgY3JlYXRlQnJlYWtJbnN0YW5jZShMb2NhbGUgd2hlcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBraW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcnVsZXNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGljdGlvbmFyeU5hbWUpIHsKKworLy8JCVN5c3RlbS5vdXQucHJpbnRsbigicnVsZXNOYW1lOiAiK3J1bGVzTmFtZSk7CisvLwkJU3lzdGVtLm91dC5wcmludGxuKCJkaWN0aW9uYXJ5TmFtZTogIitkaWN0aW9uYXJ5TmFtZSk7CisgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IElDVUxvY2FsZURhdGEuZ2V0UmVzb3VyY2VCdW5kbGUoIkJyZWFrSXRlcmF0b3JSdWxlcyIsIHdoZXJlKTsKKyAgICAgICAgU3RyaW5nW10gY2xhc3NOYW1lcyA9IGJ1bmRsZS5nZXRTdHJpbmdBcnJheSgiQnJlYWtJdGVyYXRvckNsYXNzZXMiKTsKKworICAgICAgICBTdHJpbmcgcnVsZXMgPSBidW5kbGUuZ2V0U3RyaW5nKHJ1bGVzTmFtZSk7CisKKyAgICAgICAgaWYgKGNsYXNzTmFtZXNba2luZF0uZXF1YWxzKCJSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIikpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcihydWxlcyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2xhc3NOYW1lc1traW5kXS5lcXVhbHMoIkRpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IiKSkgeworICAgICAgICAgICAgdHJ5IHsKKwkJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZGljdGlvbmFyeU5hbWUpOworICAgICAgICAgICAgICAgIE9iamVjdCB0ID0gYnVuZGxlLmdldE9iamVjdChkaWN0aW9uYXJ5TmFtZSk7CisJCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKHQpOworICAgICAgICAgICAgICAgIFVSTCB1cmwgPSAoVVJMKXQ7CisgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gZGljdGlvbmFyeSA9IHVybC5vcGVuU3RyZWFtKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yKHJ1bGVzLCBkaWN0aW9uYXJ5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IocnVsZXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYnJlYWsgaXRlcmF0b3IgY2xhc3MgXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2tpbmRdICsgIlwiIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgbG9jYWxlcyBmb3Igd2hpY2ggQnJlYWtJdGVyYXRvcnMgY2FuIGJlIHVzZWQuCisgICAgICogQHJldHVybiBBbiBhcnJheSBvZiBMb2NhbGVzLiAgQWxsIG9mIHRoZSBsb2NhbGVzIGluIHRoZSBhcnJheSBjYW4KKyAgICAgKiBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBCcmVha0l0ZXJhdG9yLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIExvY2FsZVtdIGdldEF2YWlsYWJsZUxvY2FsZXMoKQorICAgIHsKKyAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIElDVUxvY2FsZURhdGEuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgQnJlYWtJdGVyYXRvckNhY2hlIHsKKworICAgICAgICBwcml2YXRlIEJyZWFrSXRlcmF0b3IgaXRlcjsKKyAgICAgICAgcHJpdmF0ZSBMb2NhbGUgd2hlcmU7CisKKyAgICAgICAgQnJlYWtJdGVyYXRvckNhY2hlKExvY2FsZSB3aGVyZSwgQnJlYWtJdGVyYXRvciBpdGVyKSB7CisgICAgICAgICAgICB0aGlzLndoZXJlID0gd2hlcmU7CisgICAgICAgICAgICB0aGlzLml0ZXIgPSAoQnJlYWtJdGVyYXRvcikgaXRlci5jbG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgTG9jYWxlIGdldExvY2FsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB3aGVyZTsKKyAgICAgICAgfQorCisgICAgICAgIEJyZWFrSXRlcmF0b3IgY3JlYXRlQnJlYWtJbnN0YW5jZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAoQnJlYWtJdGVyYXRvcikgaXRlci5jbG9uZSgpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvQnJlYWtUcmFuc2xpdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQnJlYWtUcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMTFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9CcmVha1RyYW5zbGl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L0JyZWFrVHJhbnNsaXRlcmF0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMS8yMiAwMDoyOTowMCAkIAorICogJFJldmlzaW9uOiAxLjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisvL2ltcG9ydCBjb20uaWJtLmljdS5kZXYuZGVtby5pbXBsLio7CisvL2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworLy9pbXBvcnQgamF2YS51dGlsLio7CisvL2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworLy9pbXBvcnQgamF2YS5pby4qOworCisvKioKKyAqIEluc2VydHMgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGF0IHdvcmQgYnJlYWtzLiBUbyByZXN0cmljdCBpdCB0byBwYXJ0aWN1bGFyIGNoYXJhY3RlcnMsIHVzZSBhIGZpbHRlci4KKyAqIFRPRE86IHRoaXMgaXMgYW4gaW50ZXJuYWwgY2xhc3MsIGFuZCBvbmx5IHRlbXBvcmFyeS4gUmVtb3ZlIGl0IG9uY2Ugd2UgaGF2ZSBcYiBub3RhdGlvbiBpbiBUcmFuc2xpdGVyYXRvci4KKyAqLworZmluYWwgY2xhc3MgQnJlYWtUcmFuc2xpdGVyYXRvciBleHRlbmRzIFRyYW5zbGl0ZXJhdG9yIHsKKyAgICBwcml2YXRlIEJyZWFrSXRlcmF0b3IgYmk7CisgICAgcHJpdmF0ZSBTdHJpbmcgaW5zZXJ0aW9uOworICAgIHByaXZhdGUgaW50W10gYm91bmRhcmllcyA9IG5ldyBpbnRbNTBdOworICAgIHByaXZhdGUgaW50IGJvdW5kYXJ5Q291bnQgPSAwOworICAgIAorICAgIHB1YmxpYyBCcmVha1RyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCwgVW5pY29kZUZpbHRlciBmaWx0ZXIsIEJyZWFrSXRlcmF0b3IgYmksIFN0cmluZyBpbnNlcnRpb24pIHsKKyAgICAgICAgc3VwZXIoSUQsIGZpbHRlcik7CisgICAgICAgIGlmIChiaSA9PSBudWxsKSBiaSA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKG5ldyBMb2NhbGUoInRoIiwgIlRIIikpOworICAgICAgICB0aGlzLmJpID0gYmk7CisgICAgICAgIHRoaXMuaW5zZXJ0aW9uID0gaW5zZXJ0aW9uOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQnJlYWtUcmFuc2xpdGVyYXRvcihTdHJpbmcgSUQsIFVuaWNvZGVGaWx0ZXIgZmlsdGVyKSB7CisgICAgICAgIHRoaXMoSUQsIGZpbHRlciwgbnVsbCwgIiAiKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIFN0cmluZyBnZXRJbnNlcnRpb24oKSB7CisgICAgICAgIHJldHVybiBpbnNlcnRpb247CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldEluc2VydGlvbihTdHJpbmcgaW5zZXJ0aW9uKSB7CisgICAgICAgIHRoaXMuaW5zZXJ0aW9uID0gaW5zZXJ0aW9uOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQnJlYWtJdGVyYXRvciBnZXRCcmVha0l0ZXJhdG9yKCkgeworICAgICAgICByZXR1cm4gYmk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldEJyZWFrSXRlcmF0b3IoQnJlYWtJdGVyYXRvciBiaSkgeworICAgICAgICB0aGlzLmJpID0gYmk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVUVEVSX09SX01BUktfTUFTSyA9IAorICAgICAgICAgICgxPDxDaGFyYWN0ZXIuVVBQRVJDQVNFX0xFVFRFUikKKyAgICAgICAgfCAoMTw8Q2hhcmFjdGVyLkxPV0VSQ0FTRV9MRVRURVIpCisgICAgICAgIHwgKDE8PENoYXJhY3Rlci5USVRMRUNBU0VfTEVUVEVSKQorICAgICAgICB8ICgxPDxDaGFyYWN0ZXIuTU9ESUZJRVJfTEVUVEVSKQorICAgICAgICB8ICgxPDxDaGFyYWN0ZXIuT1RIRVJfTEVUVEVSKQorICAgICAgICB8ICgxPDxDaGFyYWN0ZXIuQ09NQklOSU5HX1NQQUNJTkdfTUFSSykKKyAgICAgICAgfCAoMTw8Q2hhcmFjdGVyLk5PTl9TUEFDSU5HX01BUkspCisgICAgICAgIHwgKDE8PENoYXJhY3Rlci5FTkNMT1NJTkdfTUFSSykKKyAgICAgICAgOworICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVRyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUgdGV4dCwgUG9zaXRpb24gcG9zLCBib29sZWFuIGluY3JlbWVudGFsKSB7CisgICAgICAgIGJvdW5kYXJ5Q291bnQgPSAwOworICAgICAgICBpbnQgYm91bmRhcnkgPSAwOworICAgICAgICBiaS5zZXRUZXh0KG5ldyBSZXBsYWNlYWJsZUNoYXJhY3Rlckl0ZXJhdG9yKHRleHQsIHBvcy5zdGFydCwgcG9zLmxpbWl0LCBwb3Muc3RhcnQpKTsKKyAgICAgICAgLy8gVE9ETzogZml4IGNsdW1zeSB3b3JrYXJvdW5kIHVzZWQgYmVsb3cuCisgICAgICAgIC8qCisgICAgICAgIGNoYXJbXSB0ZW1wQnVmZmVyID0gbmV3IGNoYXJbdGV4dC5sZW5ndGgoKV07CisgICAgICAgIHRleHQuZ2V0Q2hhcnMoMCwgdGV4dC5sZW5ndGgoKSwgdGVtcEJ1ZmZlciwgMCk7CisgICAgICAgIGJpLnNldFRleHQobmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKG5ldyBTdHJpbmcodGVtcEJ1ZmZlciksIHBvcy5zdGFydCwgcG9zLmxpbWl0LCBwb3Muc3RhcnQpKTsKKyAgICAgICAgKi8KKyAgICAgICAgLy8gZW5kIGRlYnVnZ2luZworICAgICAgICAKKyAgICAgICAgLy8gVG8gbWFrZSB0aGluZ3MgbXVjaCBlYXNpZXIsIHdlIHdpbGwgc3RhY2sgdGhlIGJvdW5kYXJpZXMsIGFuZCB0aGVuIGluc2VydCBhdCB0aGUgZW5kLgorICAgICAgICAvLyBnZW5lcmFsbHksIHdlIHdvbid0IG5lZWQgdG9vIG1hbnksIHNpbmNlIHdlIHdpbGwgYmUgZmlsdGVyZWQuCisgICAgICAgIAorICAgICAgICBmb3IoYm91bmRhcnkgPSBiaS5maXJzdCgpOyBib3VuZGFyeSAhPSBiaS5ET05FICYmIGJvdW5kYXJ5IDwgcG9zLmxpbWl0OyBib3VuZGFyeSA9IGJpLm5leHQoKSkgeworICAgICAgICAgICAgaWYgKGJvdW5kYXJ5ID09IDApIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gSEFDSzogQ2hlY2sgdG8gc2VlIHRoYXQgcHJlY2VlZGluZyBpdGVtIHdhcyBhIGxldHRlcgorCisgICAgICAgICAgICBpbnQgY3AgPSBVVEYxNi5jaGFyQXQodGV4dCwgYm91bmRhcnktMSk7CisgICAgICAgICAgICBpbnQgdHlwZSA9IFVDaGFyYWN0ZXIuZ2V0VHlwZShjcCk7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihJbnRlZ2VyLnRvU3RyaW5nKGNwLDE2KSArICIgKGJlZm9yZSk6ICIgKyB0eXBlKTsKKyAgICAgICAgICAgIGlmICgoKDE8PHR5cGUpICYgTEVUVEVSX09SX01BUktfTUFTSykgPT0gMCkgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNwID0gVVRGMTYuY2hhckF0KHRleHQsIGJvdW5kYXJ5KTsKKyAgICAgICAgICAgIHR5cGUgPSBVQ2hhcmFjdGVyLmdldFR5cGUoY3ApOworICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oSW50ZWdlci50b1N0cmluZyhjcCwxNikgKyAiIChhZnRlcik6ICIgKyB0eXBlKTsKKyAgICAgICAgICAgIGlmICgoKDE8PHR5cGUpICYgTEVUVEVSX09SX01BUktfTUFTSykgPT0gMCkgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChib3VuZGFyeUNvdW50ID49IGJvdW5kYXJpZXMubGVuZ3RoKSB7ICAgICAgIC8vIHJlYWxsb2MgaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgaW50W10gdGVtcCA9IG5ldyBpbnRbYm91bmRhcmllcy5sZW5ndGggKiAyXTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJvdW5kYXJpZXMsIDAsIHRlbXAsIDAsIGJvdW5kYXJpZXMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBib3VuZGFyaWVzID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm91bmRhcmllc1tib3VuZGFyeUNvdW50KytdID0gYm91bmRhcnk7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihib3VuZGFyeSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBkZWx0YSA9IDA7CisgICAgICAgIGludCBsYXN0Qm91bmRhcnkgPSAwOworICAgICAgICAKKyAgICAgICAgaWYgKGJvdW5kYXJ5Q291bnQgIT0gMCkgeyAvLyBpZiB3ZSBmb3VuZCBzb21ldGhpbmcsIGFkanVzdAorICAgICAgICAgICAgZGVsdGEgPSBib3VuZGFyeUNvdW50ICogaW5zZXJ0aW9uLmxlbmd0aCgpOworICAgICAgICAgICAgbGFzdEJvdW5kYXJ5ID0gYm91bmRhcmllc1tib3VuZGFyeUNvdW50LTFdOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyB3ZSBkbyB0aGlzIGZyb20gdGhlIGVuZCBiYWNrd2FyZHMsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHVwZGF0aW5nLgorICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAoYm91bmRhcnlDb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBib3VuZGFyeSA9IGJvdW5kYXJpZXNbLS1ib3VuZGFyeUNvdW50XTsKKyAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoYm91bmRhcnksIGJvdW5kYXJ5LCBpbnNlcnRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3cgZml4IHVwIHRoZSByZXR1cm4gdmFsdWVzCisgICAgICAgIHBvcy5jb250ZXh0TGltaXQgKz0gZGVsdGE7CisgICAgICAgIHBvcy5saW1pdCArPSBkZWx0YTsKKyAgICAgICAgcG9zLnN0YXJ0ID0gaW5jcmVtZW50YWwgPyBsYXN0Qm91bmRhcnkgKyBkZWx0YSA6IHBvcy5saW1pdDsKKyAgICB9CisgICAgCisgICAgCisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHN0YW5kYXJkIHZhcmlhbnRzIHdpdGggdGhlIHN5c3RlbS4gIENhbGxlZCBieQorICAgICAqIFRyYW5zbGl0ZXJhdG9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlcigpIHsKKyAgICAgICAgLy8gZmFsc2UgbWVhbnMgdGhhdCBpdCBpcyBpbnZpc2libGUKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdHJhbnMgPSBuZXcgQnJlYWtUcmFuc2xpdGVyYXRvcigiQW55LUJyZWFrSW50ZXJuYWwiLCBudWxsKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXJJbnN0YW5jZSh0cmFucywgZmFsc2UpOworICAgICAgICAvKgorICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlckZhY3RvcnkoIkFueS1CcmVhayIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnJlYWtUcmFuc2xpdGVyYXRvcigiQW55LUJyZWFrIiwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAqLworICAgIH0KKyAgICAKKyAgICAvLyBIYWNrLCBqdXN0IHRvIGdldCBhIHJlYWwgY2hhcmFjdGVyIGl0ZXJhdG9yLgorICAgIAorICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBSZXBsYWNlYWJsZUNoYXJhY3Rlckl0ZXJhdG9yIGltcGxlbWVudHMgQ2hhcmFjdGVySXRlcmF0b3IKKyAgICB7CisgICAgICAgIHByaXZhdGUgUmVwbGFjZWFibGUgdGV4dDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgYmVnaW47CisgICAgICAgIHByaXZhdGUgaW50IGVuZDsKKyAgICAgICAgLy8gaW52YXJpYW50OiBiZWdpbiA8PSBwb3MgPD0gZW5kCisgICAgICAgIHByaXZhdGUgaW50IHBvczsKKworICAgICAgICAvKioKKyAgICAgICAgKiBDb25zdHJ1Y3RzIGFuIGl0ZXJhdG9yIHdpdGggYW4gaW5pdGlhbCBpbmRleCBvZiAwLgorICAgICAgICAqLworICAgICAgICBwdWJsaWMgUmVwbGFjZWFibGVDaGFyYWN0ZXJJdGVyYXRvcihSZXBsYWNlYWJsZSB0ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzKHRleHQsIDApOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQ29uc3RydWN0cyBhbiBpdGVyYXRvciB3aXRoIHRoZSBzcGVjaWZpZWQgaW5pdGlhbCBpbmRleC4KKyAgICAgICAgKgorICAgICAgICAqIEBwYXJhbSAgdGV4dCAgIFRoZSBTdHJpbmcgdG8gYmUgaXRlcmF0ZWQgb3ZlcgorICAgICAgICAqIEBwYXJhbSAgcG9zICAgIEluaXRpYWwgaXRlcmF0b3IgcG9zaXRpb24KKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFJlcGxhY2VhYmxlQ2hhcmFjdGVySXRlcmF0b3IoUmVwbGFjZWFibGUgdGV4dCwgaW50IHBvcykKKyAgICAgICAgeworICAgICAgICB0aGlzKHRleHQsIDAsIHRleHQubGVuZ3RoKCksIHBvcyk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBDb25zdHJ1Y3RzIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGdpdmVuIHJhbmdlIG9mIHRoZSBnaXZlbiBzdHJpbmcsIHdpdGggdGhlCisgICAgICAgICogaW5kZXggc2V0IGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gIHRleHQgICBUaGUgU3RyaW5nIHRvIGJlIGl0ZXJhdGVkIG92ZXIKKyAgICAgICAgKiBAcGFyYW0gIGJlZ2luICBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAgICAgICogQHBhcmFtICBlbmQgICAgSW5kZXggb2YgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGxhc3QgY2hhcmFjdGVyCisgICAgICAgICogQHBhcmFtICBwb3MgICAgSW5pdGlhbCBpdGVyYXRvciBwb3NpdGlvbgorICAgICAgICAqLworICAgICAgICBwdWJsaWMgUmVwbGFjZWFibGVDaGFyYWN0ZXJJdGVyYXRvcihSZXBsYWNlYWJsZSB0ZXh0LCBpbnQgYmVnaW4sIGludCBlbmQsIGludCBwb3MpIHsKKyAgICAgICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisKKyAgICAgICAgICAgIGlmIChiZWdpbiA8IDAgfHwgYmVnaW4gPiBlbmQgfHwgZW5kID4gdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc3Vic3RyaW5nIHJhbmdlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwb3MgPCBiZWdpbiB8fCBwb3MgPiBlbmQpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHBvc2l0aW9uIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuYmVnaW4gPSBiZWdpbjsKKyAgICAgICAgICAgIHRoaXMuZW5kID0gZW5kOworICAgICAgICAgICAgdGhpcy5wb3MgPSBwb3M7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBSZXNldCB0aGlzIGl0ZXJhdG9yIHRvIHBvaW50IHRvIGEgbmV3IHN0cmluZy4gIFRoaXMgcGFja2FnZS12aXNpYmxlCisgICAgICAgICogbWV0aG9kIGlzIHVzZWQgYnkgb3RoZXIgamF2YS50ZXh0IGNsYXNzZXMgdGhhdCB3YW50IHRvIGF2b2lkIGFsbG9jYXRpbmcKKyAgICAgICAgKiBuZXcgUmVwbGFjZWFibGVDaGFyYWN0ZXJJdGVyYXRvciBvYmplY3RzIGV2ZXJ5IHRpbWUgdGhlaXIgc2V0VGV4dCBtZXRob2QKKyAgICAgICAgKiBpcyBjYWxsZWQuCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gIHRleHQgICBUaGUgU3RyaW5nIHRvIGJlIGl0ZXJhdGVkIG92ZXIKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2V0VGV4dChSZXBsYWNlYWJsZSB0ZXh0KSB7CisgICAgICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnRleHQgPSB0ZXh0OworICAgICAgICAgICAgdGhpcy5iZWdpbiA9IDA7CisgICAgICAgICAgICB0aGlzLmVuZCA9IHRleHQubGVuZ3RoKCk7CisgICAgICAgICAgICB0aGlzLnBvcyA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBJbXBsZW1lbnRzIENoYXJhY3Rlckl0ZXJhdG9yLmZpcnN0KCkgZm9yIFN0cmluZy4KKyAgICAgICAgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yI2ZpcnN0CisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBjaGFyIGZpcnN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcG9zID0gYmVnaW47CisgICAgICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5sYXN0KCkgZm9yIFN0cmluZy4KKyAgICAgICAgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yI2xhc3QKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGNoYXIgbGFzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlbmQgIT0gYmVnaW4pIHsKKyAgICAgICAgICAgICAgICBwb3MgPSBlbmQgLSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5zZXRJbmRleCgpIGZvciBTdHJpbmcuCisgICAgICAgICogQHNlZSBDaGFyYWN0ZXJJdGVyYXRvciNzZXRJbmRleAorICAgICAgICAqLworICAgICAgICBwdWJsaWMgY2hhciBzZXRJbmRleChpbnQgcCkKKyAgICAgICAgeworICAgICAgICBpZiAocCA8IGJlZ2luIHx8IHAgPiBlbmQpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGluZGV4Iik7CisgICAgICAgIH0KKyAgICAgICAgICAgIHBvcyA9IHA7CisgICAgICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5jdXJyZW50KCkgZm9yIFN0cmluZy4KKyAgICAgICAgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yI2N1cnJlbnQKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGNoYXIgY3VycmVudCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwb3MgPj0gYmVnaW4gJiYgcG9zIDwgZW5kKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQuY2hhckF0KHBvcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRE9ORTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEltcGxlbWVudHMgQ2hhcmFjdGVySXRlcmF0b3IubmV4dCgpIGZvciBTdHJpbmcuCisgICAgICAgICogQHNlZSBDaGFyYWN0ZXJJdGVyYXRvciNuZXh0CisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBjaGFyIG5leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocG9zIDwgZW5kIC0gMSkgeworICAgICAgICAgICAgICAgIHBvcysrOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0LmNoYXJBdChwb3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcG9zID0gZW5kOworICAgICAgICAgICAgICAgIHJldHVybiBET05FOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5wcmV2aW91cygpIGZvciBTdHJpbmcuCisgICAgICAgICogQHNlZSBDaGFyYWN0ZXJJdGVyYXRvciNwcmV2aW91cworICAgICAgICAqLworICAgICAgICBwdWJsaWMgY2hhciBwcmV2aW91cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwb3MgPiBiZWdpbikgeworICAgICAgICAgICAgICAgIHBvcy0tOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0LmNoYXJBdChwb3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIERPTkU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBJbXBsZW1lbnRzIENoYXJhY3Rlckl0ZXJhdG9yLmdldEJlZ2luSW5kZXgoKSBmb3IgU3RyaW5nLgorICAgICAgICAqIEBzZWUgQ2hhcmFjdGVySXRlcmF0b3IjZ2V0QmVnaW5JbmRleAorICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldEJlZ2luSW5kZXgoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmVnaW47CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBJbXBsZW1lbnRzIENoYXJhY3Rlckl0ZXJhdG9yLmdldEVuZEluZGV4KCkgZm9yIFN0cmluZy4KKyAgICAgICAgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yI2dldEVuZEluZGV4CisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0RW5kSW5kZXgoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZW5kOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbmRleCgpIGZvciBTdHJpbmcuCisgICAgICAgICogQHNlZSBDaGFyYWN0ZXJJdGVyYXRvciNnZXRJbmRleAorICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldEluZGV4KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBvczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIENvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0d28gUmVwbGFjZWFibGVDaGFyYWN0ZXJJdGVyYXRvciBvYmplY3RzLgorICAgICAgICAqIEBwYXJhbSBvYmogdGhlIFJlcGxhY2VhYmxlQ2hhcmFjdGVySXRlcmF0b3Igb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGguCisgICAgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBvYmogaXMgdGhlIHNhbWUgYXMgdGhpcworICAgICAgICAqIFJlcGxhY2VhYmxlQ2hhcmFjdGVySXRlcmF0b3Igb2JqZWN0OyBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcyA9PSBvYmopIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIFJlcGxhY2VhYmxlQ2hhcmFjdGVySXRlcmF0b3IpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZXBsYWNlYWJsZUNoYXJhY3Rlckl0ZXJhdG9yIHRoYXQgPSAoUmVwbGFjZWFibGVDaGFyYWN0ZXJJdGVyYXRvcikgb2JqOworCisgICAgICAgICAgICBpZiAoaGFzaENvZGUoKSAhPSB0aGF0Lmhhc2hDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRleHQuZXF1YWxzKHRoYXQudGV4dCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9zICE9IHRoYXQucG9zIHx8IGJlZ2luICE9IHRoYXQuYmVnaW4gfHwgZW5kICE9IHRoYXQuZW5kKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBDb21wdXRlcyBhIGhhc2hjb2RlIGZvciB0aGlzIGl0ZXJhdG9yLgorICAgICAgICAqIEByZXR1cm4gQSBoYXNoIGNvZGUKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0Lmhhc2hDb2RlKCkgXiBwb3MgXiBiZWdpbiBeIGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgaXRlcmF0b3IuCisgICAgICAgICogQHJldHVybiBBIGNvcHkgb2YgdGhpcworICAgICAgICAqLworICAgICAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBSZXBsYWNlYWJsZUNoYXJhY3Rlckl0ZXJhdG9yIG90aGVyCisgICAgICAgICAgICAgICAgPSAoUmVwbGFjZWFibGVDaGFyYWN0ZXJJdGVyYXRvcikgc3VwZXIuY2xvbmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKyAgICAgICAgCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ2Fub25pY2FsSXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0Nhbm9uaWNhbEl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGQ3ZGVkMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0Nhbm9uaWNhbEl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSw1MzUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L0Nhbm9uaWNhbEl0ZXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDkvMTcgMTk6MTE6NTIgJCAKKyAqICRSZXZpc2lvbjogMS4xMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLk5vcm1hbGl6ZXJJbXBsOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVVNlcmlhbGl6ZWRTZXQ7CisvKioKKyAqIFRoaXMgY2xhc3MgYWxsb3dzIG9uZSB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBzdHJpbmdzIHRoYXQgYXJlIGNhbm9uaWNhbGx5IGVxdWl2YWxlbnQgdG8gYSBnaXZlbgorICogc3RyaW5nLiBGb3IgZXhhbXBsZSwgaGVyZSBhcmUgc29tZSBzYW1wbGUgcmVzdWx0czoKKyAqIFJlc3VsdHMgZm9yOiB7QSBXSVRIIFJJTkcgQUJPVkV9e2R9e0RPVCBBQk9WRX17Q0VESUxMQX0KKyAqIDxwcmU+CisgMToge0F9e1JJTkcgQUJPVkV9e2R9e0RPVCBBQk9WRX17Q0VESUxMQX0KKyAyOiB7QX17UklORyBBQk9WRX17ZH17Q0VESUxMQX17RE9UIEFCT1ZFfQorIDM6IHtBfXtSSU5HIEFCT1ZFfXtkIFdJVEggRE9UIEFCT1ZFfXtDRURJTExBfQorIDQ6IHtBfXtSSU5HIEFCT1ZFfXtkIFdJVEggQ0VESUxMQX17RE9UIEFCT1ZFfQorIDU6IHtBIFdJVEggUklORyBBQk9WRX17ZH17RE9UIEFCT1ZFfXtDRURJTExBfQorIDY6IHtBIFdJVEggUklORyBBQk9WRX17ZH17Q0VESUxMQX17RE9UIEFCT1ZFfQorIDc6IHtBIFdJVEggUklORyBBQk9WRX17ZCBXSVRIIERPVCBBQk9WRX17Q0VESUxMQX0KKyA4OiB7QSBXSVRIIFJJTkcgQUJPVkV9e2QgV0lUSCBDRURJTExBfXtET1QgQUJPVkV9CisgOToge0FOR1NUUk9NIFNJR059e2R9e0RPVCBBQk9WRX17Q0VESUxMQX0KKzEwOiB7QU5HU1RST00gU0lHTn17ZH17Q0VESUxMQX17RE9UIEFCT1ZFfQorMTE6IHtBTkdTVFJPTSBTSUdOfXtkIFdJVEggRE9UIEFCT1ZFfXtDRURJTExBfQorMTI6IHtBTkdTVFJPTSBTSUdOfXtkIFdJVEggQ0VESUxMQX17RE9UIEFCT1ZFfQorICo8L3ByZT4KKyAqPGJyPk5vdGU6IHRoZSBjb2RlIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aCBzbWFsbCBzdHJpbmdzLCBhbmQgaXMgbm90IHN1aXRhYmxlIGZvciBsYXJnZXIgb25lcywKKyAqIHNpbmNlIGl0IGhhcyBub3QgYmVlbiBvcHRpbWl6ZWQgZm9yIHRoYXQgc2l0dWF0aW9uLgorICogQGF1dGhvciBNLiBEYXZpcworICogQGRyYWZ0IElDVSAyLjQKKyAqLworCitwdWJsaWMgZmluYWwgY2xhc3MgQ2Fub25pY2FsSXRlcmF0b3IgeworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIENhbm9uaWNhbEl0ZXJhdG9yIG9iamVjdAorICAgICAqIEBwYXJhbSBzb3VyY2Ugc3RyaW5nIHRvIGdldCByZXN1bHRzIGZvcgorCSAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIENhbm9uaWNhbEl0ZXJhdG9yKFN0cmluZyBzb3VyY2UpIHsKKyAgICAgICAgc2V0U291cmNlKHNvdXJjZSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIE5GRCBmb3JtIG9mIHRoZSBjdXJyZW50IHNvdXJjZSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIuCisgICAgICogQHJldHVybiBnZXRzIHRoZSBzb3VyY2U6IE5PVEU6IGl0IGlzIHRoZSBORkQgZm9ybSBvZiB0aGUgc291cmNlIG9yaWdpbmFsbHkgcGFzc2VkIGluCisJICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZSgpIHsKKyAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgaXRlcmF0b3Igc28gdGhhdCBvbmUgY2FuIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZy4KKwkgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgeworICAgICAgICBkb25lID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3VycmVudC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgY3VycmVudFtpXSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0IHRoZSBuZXh0IGNhbm9uaWNhbGx5IGVxdWl2YWxlbnQgc3RyaW5nLgorCSAqIDxicj48Yj5XYXJuaW5nOiBUaGUgc3RyaW5ncyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgaW4gYW55IHBhcnRpY3VsYXIgb3JkZXIuPC9iPgorICAgICAqIEByZXR1cm4gdGhlIG5leHQgc3RyaW5nIHRoYXQgaXMgY2Fub25pY2FsbHkgZXF1aXZhbGVudC4gVGhlIHZhbHVlIG51bGwgaXMgcmV0dXJuZWQgd2hlbgorICAgICAqIHRoZSBpdGVyYXRpb24gaXMgZG9uZS4KKwkgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgbmV4dCgpIHsKKyAgICAgICAgaWYgKGRvbmUpIHJldHVybiBudWxsOworICAgICAgICAKKyAgICAgICAgLy8gY29uc3RydWN0IHJldHVybiB2YWx1ZQorICAgICAgICAKKyAgICAgICAgYnVmZmVyLnNldExlbmd0aCgwKTsgLy8gZGVsZXRlIG9sZCBjb250ZW50cworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpZWNlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChwaWVjZXNbaV1bY3VycmVudFtpXV0pOworICAgICAgICB9CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBidWZmZXIudG9TdHJpbmcoKTsKKyAgICAgICAgCisgICAgICAgIC8vIGZpbmQgbmV4dCB2YWx1ZSBmb3IgbmV4dCB0aW1lCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gY3VycmVudC5sZW5ndGggLSAxOyA7IC0taSkgeworICAgICAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50W2ldKys7CisgICAgICAgICAgICBpZiAoY3VycmVudFtpXSA8IHBpZWNlc1tpXS5sZW5ndGgpIGJyZWFrOyAvLyBnb3Qgc2VxdWVuY2UKKyAgICAgICAgICAgIGN1cnJlbnRbaV0gPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldCBhIG5ldyBzb3VyY2UgZm9yIHRoaXMgaXRlcmF0b3IuIEFsbG93cyBvYmplY3QgcmV1c2UuCisgICAgICogQHBhcmFtIHNldCB0aGUgc291cmNlIHN0cmluZyB0byBpdGVyYXRlIGFnYWluc3QuIFRoaXMgYWxsb3dzIHRoZSBzYW1lIGl0ZXJhdG9yIHRvIGJlIHVzZWQKKyAgICAgKiB3aGlsZSBjaGFuZ2luZyB0aGUgc291cmNlIHN0cmluZywgc2F2aW5nIG9iamVjdCBjcmVhdGlvbi4KKwkgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNvdXJjZShTdHJpbmcgbmV3U291cmNlKSB7CisgICAgICAgIHNvdXJjZSA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKG5ld1NvdXJjZSwgTm9ybWFsaXplci5ORkQpOworICAgICAgICBkb25lID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBjYXRjaCBkZWdlbmVyYXRlIGNhc2UKKyAgICAJaWYgKG5ld1NvdXJjZS5sZW5ndGgoKSA9PSAwKSB7CisgICAgCQlwaWVjZXMgPSBuZXcgU3RyaW5nWzFdW107CisgICAgCQljdXJyZW50ID0gbmV3IGludFsxXTsKKyAgICAJCXBpZWNlc1swXSA9IG5ldyBTdHJpbmdbXXsiIn07CisgICAgCQlyZXR1cm47CisgICAgCX0KKyAgICAgICAgCisgICAgICAgIC8vIGZpbmQgdGhlIHNlZ21lbnRzCisgICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgaW50IGNwOworICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICAKKwkgICAgLy8gaSBzaG91bGQgYmUgdGhlIGVuZCBvZiB0aGUgZmlyc3QgY29kZSBwb2ludAorCSAgICAKKwkgICAgaW50IGkgPSBVVEYxNi5maW5kT2Zmc2V0RnJvbUNvZGVQb2ludChzb3VyY2UsIDEpOworICAgICAgICAKKyAgICAgICAgZm9yICg7IGkgPCBzb3VyY2UubGVuZ3RoKCk7IGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGkpKSB7CisgICAgICAgICAgICBjcCA9IFVURjE2LmNoYXJBdChzb3VyY2UsIGkpOworICAgICAgICAgICAgaWYgKE5vcm1hbGl6ZXJJbXBsLmlzQ2Fub25TYWZlU3RhcnQoY3ApKSB7CisgICAgICAgICAgICAgICAgbGlzdC5hZGQoc291cmNlLnN1YnN0cmluZyhzdGFydCwgaSkpOyAvLyBhZGQgdXAgdG8gaQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsaXN0LmFkZChzb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7IC8vIGFkZCBsYXN0IG9uZQorICAgICAgICAKKyAgICAgICAgLy8gYWxsb2NhdGUgdGhlIGFycmF5cywgYW5kIGZpbmQgdGhlIHN0cmluZ3MgdGhhdCBhcmUgQ0UgdG8gZWFjaCBzZWdtZW50CisgICAgICAgIHBpZWNlcyA9IG5ldyBTdHJpbmdbbGlzdC5zaXplKCldW107CisgICAgICAgIGN1cnJlbnQgPSBuZXcgaW50W2xpc3Quc2l6ZSgpXTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpZWNlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKFBST0dSRVNTKSBTeXN0ZW0ub3V0LnByaW50bG4oIlNFR01FTlQiKTsKKyAgICAgICAgICAgIHBpZWNlc1tpXSA9IGdldEVxdWl2YWxlbnRzKChTdHJpbmcpIGxpc3QuZ2V0KGkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgcGVybXV0YXRpb24uIAorCSAqIDxicj48Yj5XYXJuaW5nOiBUaGUgc3RyaW5ncyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgaW4gYW55IHBhcnRpY3VsYXIgb3JkZXIuPC9iPgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHN0cmluZyB0byBmaW5kIHBlcm11dGF0aW9ucyBmb3IKKyAgICAgKiBAcGFyYW0gdGhlIHNldCB0byBhZGQgdGhlIHJlc3VsdHMgdG8KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcGVybXV0ZShTdHJpbmcgc291cmNlLCBib29sZWFuIHNraXBaZXJvcywgU2V0IG91dHB1dCkgeworICAgIAkvLyBUT0RPOiBvcHRpbWl6ZQorICAgICAgICAvL2lmIChQUk9HUkVTUykgU3lzdGVtLm91dC5wcmludGxuKCJQZXJtdXRlOiAiICsgc291cmNlKTsKKyAgICAgICAgCisgICAgICAgIC8vIG9wdGltaXphdGlvbjoKKyAgICAgICAgLy8gaWYgemVybyBvciBvbmUgY2hhcmFjdGVyLCBqdXN0IHJldHVybiBhIHNldCB3aXRoIGl0CisgICAgICAgIC8vIHdlIGNoZWNrIGZvciBsZW5ndGggPCAyIHRvIGtlZXAgZnJvbSBjb3VudGluZyBjb2RlIHBvaW50cyBhbGwgdGhlIHRpbWUKKyAgICAgICAgaWYgKHNvdXJjZS5sZW5ndGgoKSA8PSAyICYmIFVURjE2LmNvdW50Q29kZVBvaW50KHNvdXJjZSkgPD0gMSkgeworICAgICAgICAgICAgb3V0cHV0LmFkZChzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBvdGhlcndpc2UgaXRlcmF0ZSB0aHJvdWdoIHRoZSBzdHJpbmcsIGFuZCByZWN1cnNpdmVseSBwZXJtdXRlIGFsbCB0aGUgb3RoZXIgY2hhcmFjdGVycworICAgICAgICBTZXQgc3VicGVybXV0ZSA9IG5ldyBIYXNoU2V0KCk7CisgICAgICAgIGludCBjcDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoKCk7IGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGNwKSkgeworICAgICAgICAgICAgY3AgPSBVVEYxNi5jaGFyQXQoc291cmNlLCBpKTsKKyAgICAgICAgICAgIAorICAgICAgICAJLy8gb3B0aW1pemF0aW9uOgorICAgICAgICAJLy8gaWYgdGhlIGNoYXJhY3RlciBpcyBjYW5vbmljYWwgY29tYmluaW5nIGNsYXNzIHplcm8sCisgICAgICAgIAkvLyBkb24ndCBwZXJtdXRlIGl0CisgICAgICAgIAlpZiAoc2tpcFplcm9zICYmIGkgIT0gMCAmJiBVQ2hhcmFjdGVyLmdldENvbWJpbmluZ0NsYXNzKGNwKSA9PSAwKSB7CisgICAgICAgIAkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIlNraXBwaW5nICIgKyBVdGlsaXR5LmhleChVVEYxNi52YWx1ZU9mKHNvdXJjZSwgaSkpKTsKKwkgICAgICAgIAljb250aW51ZTsKKyAgICAgICAgCX0gICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gc2VlIHdoYXQgdGhlIHBlcm11dGF0aW9ucyBvZiB0aGUgY2hhcmFjdGVycyBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgb25lIGFyZQorICAgICAgICAgICAgc3VicGVybXV0ZS5jbGVhcigpOworICAgICAgICAgICAgcGVybXV0ZShzb3VyY2Uuc3Vic3RyaW5nKDAsaSkgCisgICAgICAgICAgICAJKyBzb3VyY2Uuc3Vic3RyaW5nKGkgKyBVVEYxNi5nZXRDaGFyQ291bnQoY3ApKSwgc2tpcFplcm9zLCBzdWJwZXJtdXRlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gcHJlZml4IHRoaXMgY2hhcmFjdGVyIHRvIGFsbCBvZiB0aGVtCisgICAgICAgICAgICBTdHJpbmcgY2hTdHIgPSBVVEYxNi52YWx1ZU9mKHNvdXJjZSwgaSk7CisgICAgICAgICAgICBJdGVyYXRvciBpdCA9IHN1YnBlcm11dGUuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGllY2UgPSBjaFN0ciArIChTdHJpbmcpIGl0Lm5leHQoKTsKKyAgICAgICAgICAgICAgICAvL2lmIChQUk9HUkVTUykgU3lzdGVtLm91dC5wcmludGxuKCIgIFBpZWNlOiAiICsgcGllY2UpOworICAgICAgICAgICAgICAgIG91dHB1dC5hZGQocGllY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gRk9SIFRFU1RJTkcKKyAgICAKKyAgICAvKioKKyAgICAgKkByZXR1cm4gdGhlIHNldCBvZiAic2FmZSBzdGFydHMiLCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGNsYXNzIHplcm8gQU5EIGFyZSBuZXZlciBub24taW5pdGlhbCBpbiBhIGRlY29tcG9zaXRpb24uCisgICAgICpAaW50ZXJuYWwKKyAgICAgKgorICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZVNldCBnZXRTYWZlU3RhcnQoKSB7CisgICAgICAgIHJldHVybiAoVW5pY29kZVNldCkgU0FGRV9TVEFSVC5jbG9uZSgpOworICAgIH0KKyAgICAqLworICAgIC8qKgorICAgICAqQHJldHVybiB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgd2hvc2UgZGVjb21wb3NpdGlvbnMgc3RhcnQgd2l0aCB0aGUgZ2l2ZW4gY2hhcmFjdGVyCisgICAgICpAaW50ZXJuYWwKKyAgICAgKgorICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZVNldCBnZXRTdGFydHMoaW50IGNwKSB7CisgICAgICAgIFVuaWNvZGVTZXQgcmVzdWx0ID0gQVRfU1RBUlQuZ2V0KGNwKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBFTVBUWTsKKyAgICAgICAgcmV0dXJuIChVbmljb2RlU2V0KSByZXN1bHQuY2xvbmUoKTsKKyAgICB9CisgICAgKi8KKyAgICAKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0gUFJJVkFURVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgCisgICAgLy8gZGVidWcKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIFBST0dSRVNTID0gZmFsc2U7IC8vIGRlYnVnIHByb2dyZXNzCisgICAgcHJpdmF0ZSBzdGF0aWMgVHJhbnNsaXRlcmF0b3IgTkFNRSA9IFBST0dSRVNTID8gVHJhbnNsaXRlcmF0b3IuZ2V0SW5zdGFuY2UoIm5hbWUiKSA6IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBTS0lQX1pFUk9TID0gdHJ1ZTsKKyAKKyAgICAvLyBmaWVsZHMKKyAgICBwcml2YXRlIFN0cmluZyBzb3VyY2U7CisgICAgcHJpdmF0ZSBib29sZWFuIGRvbmU7CisgICAgcHJpdmF0ZSBTdHJpbmdbXVtdIHBpZWNlczsKKyAgICBwcml2YXRlIGludFtdIGN1cnJlbnQ7CisgICAgLy8gTm90ZTogQyB3aWxsIG5lZWQgdHdvIG1vcmUgZmllbGRzLCBzaW5jZSBhcnJheXMgdGhlcmUgZG9uJ3QgaGF2ZSBsZW5ndGhzCisgICAgLy8gaW50IHBpZWNlc19sZW5ndGg7CisgICAgLy8gaW50W10gcGllY2VzX2xlbmd0aHM7CisgICAgCisgICAgLy8gdHJhbnNpZW50IGZpZWxkcworICAgIHByaXZhdGUgdHJhbnNpZW50IFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgCisgICAgCisgICAgLy8gd2UgaGF2ZSBhIHNlZ21lbnQsIGluIE5GRC4gRmluZCBhbGwgdGhlIHN0cmluZ3MgdGhhdCBhcmUgY2Fub25pY2FsbHkgZXF1aXZhbGVudCB0byBpdC4KKyAgICBwcml2YXRlIFN0cmluZ1tdIGdldEVxdWl2YWxlbnRzKFN0cmluZyBzZWdtZW50KSB7CisgICAgICAgIFNldCByZXN1bHQgPSBuZXcgSGFzaFNldCgpOworICAgICAgICBTZXQgYmFzaWMgPSBnZXRFcXVpdmFsZW50czIoc2VnbWVudCk7CisgICAgICAgIFNldCBwZXJtdXRhdGlvbnMgPSBuZXcgSGFzaFNldCgpOworICAgICAgICAKKyAgICAgICAgLy8gbm93IGdldCBhbGwgdGhlIHBlcm11dGF0aW9ucworICAgICAgICAvLyBhZGQgb25seSB0aGUgb25lcyB0aGF0IGFyZSBjYW5vbmljYWxseSBlcXVpdmFsZW50CisgICAgICAgIC8vIFRPRE86IG9wdGltaXplIGJ5IG5vdCBwZXJtdXRpbmcgYW55IGNsYXNzIHplcm8uCisgICAgICAgIEl0ZXJhdG9yIGl0ID0gYmFzaWMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgICAgICAgU3RyaW5nIGl0ZW0gPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisgICAgICAgIAlwZXJtdXRhdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgICAgIHBlcm11dGUoaXRlbSwgU0tJUF9aRVJPUywgcGVybXV0YXRpb25zKTsKKyAgICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHBlcm11dGF0aW9ucy5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGl0Mi5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcG9zc2libGUgPSAoU3RyaW5nKSBpdDIubmV4dCgpOworICAgICAgICAgICAgICAgIAorLyogICAgICAgICAgICAgICAKKwkJCQlTdHJpbmcgYXR0ZW1wdCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKHBvc3NpYmxlLCBOb3JtYWxpemVyLkRFQ09NUCwgMCk7CisJCQkJaWYgKGF0dGVtcHQuZXF1YWxzKHNlZ21lbnQpKSB7CisqLworICAgICAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLmNvbXBhcmUocG9zc2libGUsIHNlZ21lbnQsMCk9PTApIHsKKyAgICAgICAgICAgICAJICAgICAgICAgICAgICAgCQorICAgICAgICAgICAgCQlpZiAoUFJPR1JFU1MpIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkaW5nIFBlcm11dGF0aW9uOiAiICsgTkFNRS50cmFuc2xpdGVyYXRlKHBvc3NpYmxlKSk7CisgICAgICAgICAgICAgICAgCXJlc3VsdC5hZGQocG9zc2libGUpOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIAkJaWYgKFBST0dSRVNTKSBTeXN0ZW0ub3V0LnByaW50bG4oIi1Ta2lwcGluZyBQZXJtdXRhdGlvbjogIiArIE5BTUUudHJhbnNsaXRlcmF0ZShwb3NzaWJsZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gY29udmVydCBpbnRvIGEgU3RyaW5nW10gdG8gY2xlYW4gdXAgc3RvcmFnZQorICAgICAgICBTdHJpbmdbXSBmaW5hbFJlc3VsdCA9IG5ldyBTdHJpbmdbcmVzdWx0LnNpemUoKV07CisgICAgICAgIHJlc3VsdC50b0FycmF5KGZpbmFsUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGZpbmFsUmVzdWx0OworICAgIH0KKyAgICAKKyAgICAgCisgICAgcHJpdmF0ZSBTZXQgZ2V0RXF1aXZhbGVudHMyKFN0cmluZyBzZWdtZW50KSB7CisgICAgICAgIAorICAgICAgICBTZXQgcmVzdWx0ID0gbmV3IEhhc2hTZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChQUk9HUkVTUykgU3lzdGVtLm91dC5wcmludGxuKCJBZGRpbmc6ICIgKyBOQU1FLnRyYW5zbGl0ZXJhdGUoc2VnbWVudCkpOworICAgICAgICAKKyAgICAgICAgcmVzdWx0LmFkZChzZWdtZW50KTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHdvcmtpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIAorICAgICAgICAvLyBjeWNsZSB0aHJvdWdoIGFsbCB0aGUgY2hhcmFjdGVycworICAgICAgICBpbnQgY3A9MCxlbmQ9MDsKKwkgICAgaW50W10gcmFuZ2UgPSBuZXcgaW50WzJdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlZ21lbnQubGVuZ3RoKCk7IGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGNwKSkgeworICAgICAgICAgICAgCisJICAgICAgICAvLyBzZWUgaWYgYW55IGNoYXJhY3RlciBpcyBhdCB0aGUgc3RhcnQgb2Ygc29tZSBkZWNvbXBvc2l0aW9uCisJICAgICAgICBjcCA9IFVURjE2LmNoYXJBdChzZWdtZW50LCBpKTs7CisJICAgICAgICBVU2VyaWFsaXplZFNldCBzdGFydHMgPSBuZXcgVVNlcmlhbGl6ZWRTZXQoKTsKKyAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIU5vcm1hbGl6ZXJJbXBsLmdldENhbm9uU3RhcnRTZXQoY3AsIHN0YXJ0cykpIHsKKwkgICAgICAgICAgY29udGludWU7CisJICAgICAgICB9CisJICAgICAgICBpbnQgaj0wOworICAgICAgICAgICAgLy8gaWYgc28sIHNlZSB3aGljaCBkZWNvbXBvc2l0aW9ucyBtYXRjaCAKKwkgICAgICAgIGZvcihqID0gMCwgY3AgPSBlbmQrMTsgY3AgPD0gZW5kIHx8c3RhcnRzLmdldFNlcmlhbGl6ZWRSYW5nZShqKyssIHJhbmdlKTsgKytjcCkgeworICAgICAgICAgICAgICAgIGlmKGNwPmVuZCl7CisgICAgICAgICAgICAgICAgICAgIGNwPXJhbmdlWzBdOworICAgICAgICAgICAgICAgICAgICBlbmQ9cmFuZ2VbMV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorCSAgICAgICAgICAgIFNldCByZW1haW5kZXIgPSBleHRyYWN0KGNwLCBzZWdtZW50LCBpLHdvcmtpbmdCdWZmZXIpOworCSAgICAgICAgICAgIGlmIChyZW1haW5kZXIgPT0gbnVsbCkgY29udGludWU7CisJCisJICAgICAgICAgICAgLy8gdGhlcmUgd2VyZSBzb21lIG1hdGNoZXMsIHNvIGFkZCBhbGwgdGhlIHBvc3NpYmlsaXRpZXMgdG8gdGhlIHNldC4KKwkgICAgICAgICAgICBTdHJpbmcgcHJlZml4PSBzZWdtZW50LnN1YnN0cmluZygwLGkpOworCSAgICAgICAgICAgIHByZWZpeCArPSBVVEYxNi52YWx1ZU9mKGNwKTsKKwkgICAgICAgICAgICBpbnQgZWwgPSAtMTsKKwkgICAgICAgICAgICBJdGVyYXRvciBpdGVyID0gcmVtYWluZGVyLml0ZXJhdG9yKCk7CisJICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJICAgICAgICAgICAgICAgIFN0cmluZyBpdGVtID0gKFN0cmluZykgaXRlci5uZXh0KCk7CisJICAgICAgICAgICAgICAgIFN0cmluZyB0b0FkZCA9IG5ldyBTdHJpbmcocHJlZml4KTsKKwkgICAgICAgICAgICAgICAgdG9BZGQgKz0gaXRlbTsKKwkgICAgICAgICAgICAgICAgcmVzdWx0LmFkZCh0b0FkZCk7CQkKKwkgICAgICAgICAgICAgICAgLy9pZiAoUFJPR1JFU1MpIHByaW50ZigiQWRkaW5nOiAlc1xuIiwgVVRvUyhUcigqdG9BZGQpKSk7CisJICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisJICAgIH0KKwkgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgLyoKKyAgICAgICAgU2V0IHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7CisgICAgICAgIGlmIChQUk9HUkVTUykgU3lzdGVtLm91dC5wcmludGxuKCJBZGRpbmc6ICIgKyBOQU1FLnRyYW5zbGl0ZXJhdGUoc2VnbWVudCkpOworICAgICAgICByZXN1bHQuYWRkKHNlZ21lbnQpOworICAgICAgICBTdHJpbmdCdWZmZXIgd29ya2luZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgCisgICAgICAgIC8vIGN5Y2xlIHRocm91Z2ggYWxsIHRoZSBjaGFyYWN0ZXJzCisgICAgICAgIGludCBjcDsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VnbWVudC5sZW5ndGgoKTsgaSArPSBVVEYxNi5nZXRDaGFyQ291bnQoY3ApKSB7CisgICAgICAgICAgICAvLyBzZWUgaWYgYW55IGNoYXJhY3RlciBpcyBhdCB0aGUgc3RhcnQgb2Ygc29tZSBkZWNvbXBvc2l0aW9uCisgICAgICAgICAgICBjcCA9IFVURjE2LmNoYXJBdChzZWdtZW50LCBpKTsKKyAgICAgICAgICAgIE5vcm1hbGl6ZXJJbXBsLmdldENhbm9uU3RhcnRTZXQoYyxmaWxsU2V0KQorICAgICAgICAgICAgVW5pY29kZVNldCBzdGFydHMgPSBBVF9TVEFSVC5nZXQoY3ApOworICAgICAgICAgICAgaWYgKHN0YXJ0cyA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgICAgICAgIFVuaWNvZGVTZXRJdGVyYXRvciB1c2kgPSBuZXcgVW5pY29kZVNldEl0ZXJhdG9yKHN0YXJ0cyk7CisgICAgICAgICAgICAvLyBpZiBzbywgc2VlIHdoaWNoIGRlY29tcG9zaXRpb25zIG1hdGNoCisgICAgICAgICAgICB3aGlsZSAodXNpLm5leHQoKSkgeworICAgICAgICAgICAgICAgIGludCBjcDIgPSB1c2kuY29kZXBvaW50OworICAgICAgICAgICAgICAgIC8vIHdlIGtub3cgdGhhdCB0aGVyZSBhcmUgbm8gc3RyaW5ncyBpbiBpdAorICAgICAgICAgICAgICAgIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgQ2hhcmFjdGVySXRlcmF0b3IuSVNfU1RSSU5HCisgICAgICAgICAgICAgICAgU2V0IHJlbWFpbmRlciA9IGV4dHJhY3QoY3AyLCBzZWdtZW50LCBpLCB3b3JraW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyID09IG51bGwpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHRoZXJlIHdlcmUgc29tZSBtYXRjaGVzLCBzbyBhZGQgYWxsIHRoZSBwb3NzaWJpbGl0aWVzIHRvIHRoZSBzZXQuCisgICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHNlZ21lbnQuc3Vic3RyaW5nKDAsIGkpICsgVVRGMTYudmFsdWVPZihjcDIpOworICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gcmVtYWluZGVyLml0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaXRlbSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBST0dSRVNTKSBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGluZzogIiArIE5BTUUudHJhbnNsaXRlcmF0ZShwcmVmaXggKyBpdGVtKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQocHJlZml4ICsgaXRlbSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNlZSBpZiB0aGUgZGVjb21wb3NpdGlvbiBvZiBjcDIgaXMgYXQgc2VnbWVudCBzdGFydGluZyBhdCBzZWdtZW50UG9zIAorICAgICAqICh3aXRoIGNhbm9uaWNhbCByZWFycmFuZ21lbnQhKQorICAgICAqIElmIHNvLCB0YWtlIHRoZSByZW1haW5kZXIsIGFuZCByZXR1cm4gdGhlIGVxdWl2YWxlbnRzIAorICAgICAqLworICAgIHByaXZhdGUgU2V0IGV4dHJhY3QoaW50IGNvbXAsIFN0cmluZyBzZWdtZW50LCBpbnQgc2VnbWVudFBvcywgU3RyaW5nQnVmZmVyIGJ1ZmZlcikgeworICAgICAgICBpZiAoUFJPR1JFU1MpIFN5c3RlbS5vdXQucHJpbnRsbigiIGV4dHJhY3Q6ICIgKyBOQU1FLnRyYW5zbGl0ZXJhdGUoVVRGMTYudmFsdWVPZihjb21wKSkKKyAgICAgICAgICAgICsgIiwgIiArIE5BTUUudHJhbnNsaXRlcmF0ZShzZWdtZW50LnN1YnN0cmluZyhzZWdtZW50UG9zKSkpOworICAgICAgICAgICAgCisgICAgICAgIC8vU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKFVURjE2LnZhbHVlT2YoY29tcCksIE5vcm1hbGl6ZXIuREVDT01QLCAwKTsKKyAgICAgICAgU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGNvbXAsIE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNlZSBpZiBpdCBtYXRjaGVzIHRoZSBzdGFydCBvZiBzZWdtZW50IChhdCBzZWdtZW50UG9zKQorICAgICAgICBib29sZWFuIG9rID0gZmFsc2U7CisgICAgICAgIGludCBjcDsKKyAgICAgICAgaW50IGRlY29tcFBvcyA9IDA7CisgICAgICAgIGludCBkZWNvbXBDcCA9IFVURjE2LmNoYXJBdChkZWNvbXAsMCk7CisgICAgICAgIGRlY29tcFBvcyArPSBVVEYxNi5nZXRDaGFyQ291bnQoZGVjb21wQ3ApOyAvLyBhZGp1c3QgcG9zaXRpb24gdG8gc2tpcCBmaXJzdCBjaGFyCisgICAgICAgIC8vaW50IGRlY29tcENsYXNzID0gZ2V0Q2xhc3MoZGVjb21wQ3ApOworICAgICAgICBidWZmZXIuc2V0TGVuZ3RoKDApOyAvLyBpbml0aWFsaXplIHdvcmtpbmcgYnVmZmVyLCBzaGFyZWQgYW1vbmcgY2FsbGVlcworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IHNlZ21lbnRQb3M7IGkgPCBzZWdtZW50Lmxlbmd0aCgpOyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAgICAgICAgIGNwID0gVVRGMTYuY2hhckF0KHNlZ21lbnQsIGkpOworICAgICAgICAgICAgaWYgKGNwID09IGRlY29tcENwKSB7IC8vIGlmIGVxdWFsLCBlYXQgYW5vdGhlciBjcCBmcm9tIGRlY29tcAorICAgICAgICAgICAgICAgIGlmIChQUk9HUkVTUykgU3lzdGVtLm91dC5wcmludGxuKCIgIG1hdGNoZXM6ICIgKyBOQU1FLnRyYW5zbGl0ZXJhdGUoVVRGMTYudmFsdWVPZihjcCkpKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVjb21wUG9zID09IGRlY29tcC5sZW5ndGgoKSkgeyAvLyBkb25lLCBoYXZlIGFsbCBkZWNvbXAgY2hhcmFjdGVycyEKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzZWdtZW50LnN1YnN0cmluZyhpICsgVVRGMTYuZ2V0Q2hhckNvdW50KGNwKSkpOyAvLyBhZGQgcmVtYWluaW5nIHNlZ21lbnQgY2hhcnMKKyAgICAgICAgICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVjb21wQ3AgPSBVVEYxNi5jaGFyQXQoZGVjb21wLCBkZWNvbXBQb3MpOworICAgICAgICAgICAgICAgIGRlY29tcFBvcyArPSBVVEYxNi5nZXRDaGFyQ291bnQoZGVjb21wQ3ApOworICAgICAgICAgICAgICAgIC8vZGVjb21wQ2xhc3MgPSBnZXRDbGFzcyhkZWNvbXBDcCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChQUk9HUkVTUykgU3lzdGVtLm91dC5wcmludGxuKCIgIGJ1ZmZlcjogIiArIE5BTUUudHJhbnNsaXRlcmF0ZShVVEYxNi52YWx1ZU9mKGNwKSkpOworICAgICAgICAgICAgICAgIC8vIGJydXRlIGZvcmNlIGFwcHJvYWNoCisgICAgICAgICAgICAgICAgVVRGMTYuYXBwZW5kKGJ1ZmZlciwgY3ApOworICAgICAgICAgICAgICAgIC8qIFRPRE86IG9wdGltaXplCisgICAgICAgICAgICAgICAgLy8gc2luY2Ugd2Uga25vdyB0aGF0IHRoZSBjbGFzc2VzIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcsIGFmdGVyIHplcm8KKyAgICAgICAgICAgICAgICAvLyBlLmcuIDAgNSA3IDkgMCAzCisgICAgICAgICAgICAgICAgLy8gd2UgY2FuIGRvIGFuIG9wdGltaXphdGlvbgorICAgICAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBvbmx5IGEgZmV3IGNhc2VzIHRoYXQgd29yazogemVybywgbGVzcywgc2FtZSwgZ3JlYXRlcgorICAgICAgICAgICAgICAgIC8vIGlmIGJvdGggY2xhc3NlcyBhcmUgdGhlIHNhbWUsIHdlIGZhaWwKKyAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGVjb21wIGNsYXNzIDwgdGhlIHNlZ21lbnQgY2xhc3MsIHdlIGZhaWwKKyAgICAgICAgCisgICAgICAgICAgICAgICAgc2VnQ2xhc3MgPSBnZXRDbGFzcyhjcCk7CisgICAgICAgICAgICAgICAgaWYgKGRlY29tcENsYXNzIDw9IHNlZ0NsYXNzKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghb2spIHJldHVybiBudWxsOyAvLyB3ZSBmYWlsZWQsIGNoYXJhY3RlcnMgbGVmdCBvdmVyCisgICAgICAgIGlmIChQUk9HUkVTUykgU3lzdGVtLm91dC5wcmludGxuKCJNYXRjaGVzIik7CisgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKCkgPT0gMCkgcmV0dXJuIFNFVF9XSVRIX05VTExfU1RSSU5HOyAvLyBzdWNjZWVkLCBidXQgbm8gcmVtYWluZGVyCisgICAgICAgIFN0cmluZyByZW1haW5kZXIgPSBidWZmZXIudG9TdHJpbmcoKTsKKyAgICAgICAgCisgICAgICAgIC8vIGJydXRlIGZvcmNlIGFwcHJvYWNoCisgICAgICAgIC8vIHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSByZXN1bHQgaXMgY2Fub25pY2FsbHkgZXF1aXZhbGVudAorICAgICAgICAvKgorICAgICAgICBTdHJpbmcgdHJpYWwgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShVVEYxNi52YWx1ZU9mKGNvbXApICsgcmVtYWluZGVyLCBOb3JtYWxpemVyLkRFQ09NUCwgMCk7CisgICAgICAgIGlmICghc2VnbWVudC5yZWdpb25NYXRjaGVzKHNlZ21lbnRQb3MsIHRyaWFsLCAwLCBzZWdtZW50Lmxlbmd0aCgpIC0gc2VnbWVudFBvcykpIHJldHVybiBudWxsOworICAgICAgICAqLworICAgICAgICAKKyAgICAgICAgaWYgKDAhPU5vcm1hbGl6ZXIuY29tcGFyZShVVEYxNi52YWx1ZU9mKGNvbXApICsgcmVtYWluZGVyLCBzZWdtZW50LnN1YnN0cmluZyhzZWdtZW50UG9zKSwgMCkpIHJldHVybiBudWxsOworICAgICAgICAKKyAgICAgICAgLy8gZ2V0IHRoZSByZW1haW5pbmcgY29tYmluYXRpb25zCisgICAgICAgIHJldHVybiBnZXRFcXVpdmFsZW50czIocmVtYWluZGVyKTsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAvLyBUT0RPOiBmaXggb25jZSB3ZSBoYXZlIGEgY29kZXBvaW50IGludGVyZmFjZSB0byBnZXQgdGhlIGNhbm9uaWNhbCBjb21iaW5pbmcgY2xhc3MKKyAgICAvLyBUT0RPOiBOZWVkIHB1YmxpYyBhY2Nlc3MgdG8gY2Fub25pY2FsIGNvbWJpbmluZyBjbGFzcyBpbiBVQ2hhcmFjdGVyIQorICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRDbGFzcyhpbnQgY3ApIHsKKyAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZXIuZ2V0Q2xhc3MoKGNoYXIpY3ApOworICAgIH0KKyAgICAqLworICAgIAorICAgLy8gPT09PT09PT09PT09PT09PT0gQlVJTERFUiA9PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gVE9ETzogRmxhdHRlbiB0aGlzIGRhdGEgc28gaXQgZG9lc24ndCBoYXZlIHRvIGJlIHJlY29uc3RydWN0ZWQgZWFjaCB0aW1lIQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFVuaWNvZGVTZXQgRU1QVFkgPSBuZXcgVW5pY29kZVNldCgpOyAvLyBjb25zdGFudCwgZG9uJ3QgY2hhbmdlCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2V0IFNFVF9XSVRIX05VTExfU1RSSU5HID0gbmV3IEhhc2hTZXQoKTsgLy8gY29uc3RhbnQsIGRvbid0IGNoYW5nZQorICAgIHN0YXRpYyB7CisgICAgICAgIFNFVF9XSVRIX05VTExfU1RSSU5HLmFkZCgiIik7CisgICAgfQorICAgIAorICAvLyAgcHJpdmF0ZSBzdGF0aWMgVW5pY29kZVNldCBTQUZFX1NUQVJUID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgLy8gIHByaXZhdGUgc3RhdGljIENoYXJNYXAgQVRfU1RBUlQgPSBuZXcgQ2hhck1hcCgpOworICAgIAorICAgICAgICAvLyBUT0RPOiBXQVJOSU5HLCBOT1JNQUxJWkVSIGRvZXNuJ3QgaGF2ZSBzdXBwbGVtZW50YXJpZXMgeWV0ICEhOworICAgICAgICAvLyBDaGFuZ2UgRkZGRiB0byAxMEZGRkYgaW4gQywgYW5kIGluIEphdmEgd2hlbiBub3JtYWxpemVyIGlzIHVwZ3JhZGVkLgorICAvLyAgcHJpdmF0ZSBzdGF0aWMgaW50IExBU1RfVU5JQ09ERSA9IDB4MTBGRkZGOworICAgIC8qCisgICAgc3RhdGljIHsKKyAgICAgICAgYnVpbGREYXRhKCk7CisgICAgfQorICAgICovCisgICAgLyoKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGJ1aWxkRGF0YSgpIHsKKworICAgICAgICBpZiAoUFJPR1JFU1MpIFN5c3RlbS5vdXQucHJpbnRsbigiR2V0dGluZyBTYWZlIFN0YXJ0Iik7CisgICAgICAgIGZvciAoaW50IGNwID0gMDsgY3AgPD0gTEFTVF9VTklDT0RFOyArK2NwKSB7CisgICAgICAgICAgICBpZiAoUFJPR1JFU1MgJiAoY3AgJiAweDdGRikgPT0gMCkgU3lzdGVtLm91dC5wcmludCgnLicpOworICAgICAgICAgICAgaW50IGNjID0gVUNoYXJhY3Rlci5nZXRDb21iaW5pbmdDbGFzcyhjcCk7CisgICAgICAgICAgICBpZiAoY2MgPT0gMCkgU0FGRV9TVEFSVC5hZGQoY3ApOworICAgICAgICAgICAgLy8gd2lsbCBmaXggdG8gYmUgcmVhbGx5IHNhZmUgYmVsb3cKKyAgICAgICAgfQorICAgICAgICBpZiAoUFJPR1JFU1MpIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAKKyAgICAgICAgaWYgKFBST0dSRVNTKSBTeXN0ZW0ub3V0LnByaW50bG4oIkdldHRpbmcgQ29udGFpbm1lbnQiKTsKKyAgICAgICAgZm9yIChpbnQgY3AgPSAwOyBjcCA8PSBMQVNUX1VOSUNPREU7ICsrY3ApIHsKKyAgICAgICAgICAgIGlmIChQUk9HUkVTUyAmIChjcCAmIDB4N0ZGKSA9PSAwKSBTeXN0ZW0ub3V0LnByaW50KCcuJyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChOb3JtYWxpemVyLmlzTm9ybWFsaXplZChjcCwgTm9ybWFsaXplci5ORkQpKSBjb250aW51ZTsKKworICAgICAgICAgICAgLy9TdHJpbmcgaXN0ciA9IFVURjE2LnZhbHVlT2YoY3ApOworICAgICAgICAgICAgU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGNwLCBOb3JtYWxpemVyLk5GRCk7CisgICAgICAgICAgICAvL2lmIChkZWNvbXAuZXF1YWxzKGlzdHIpKSBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gYWRkIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBkZWNvbXBvc2l0aW9uIHRvIGNhbkJlSW4gCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBjb21wb25lbnQ7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY29tcC5sZW5ndGgoKTsgaSArPSBVVEYxNi5nZXRDaGFyQ291bnQoY29tcG9uZW50KSkgeworICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVURjE2LmNoYXJBdChkZWNvbXAsIGkpOworICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgQVRfU1RBUlQuYWRkKGNvbXBvbmVudCwgY3ApOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVUNoYXJhY3Rlci5nZXRDb21iaW5pbmdDbGFzcyhjb21wb25lbnQpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgU0FGRV9TVEFSVC5yZW1vdmUoY29tcG9uZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKFBST0dSRVNTKSBTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICB9CisgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMganVzdCBmb3IgYSBtYXAgZnJvbSBjaGFyYWN0ZXJzIHRvIGEgc2V0IG9mIGNoYXJhY3RlcnMKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDaGFyTWFwIHsKKyAgICAgICAgTWFwIHN0b3JhZ2UgPSBuZXcgSGFzaE1hcCgpOworICAgICAgICBNdXRhYmxlSW50IHByb2JlID0gbmV3IE11dGFibGVJbnQoKTsKKyAgICAgICAgYm9vbGVhbiBjb252ZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHB1YmxpYyB2b2lkIGFkZChpbnQgY3AsIGludCB3aGF0SXRJc0luKSB7CisgICAgICAgICAgICBVbmljb2RlU2V0IHJlc3VsdCA9IChVbmljb2RlU2V0KSBzdG9yYWdlLmdldChwcm9iZS5zZXQoY3ApKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgICAgICAgICAgc3RvcmFnZS5wdXQocHJvYmUsIHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQuYWRkKHdoYXRJdElzSW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgVW5pY29kZVNldCBnZXQoaW50IGNwKSB7CisgICAgICAgICAgICByZXR1cm4gKFVuaWNvZGVTZXQpIHN0b3JhZ2UuZ2V0KHByb2JlLnNldChjcCkpOworICAgICAgICB9CisgICAgfQorICAgICAgICAgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXV0YWJsZUludCB7CisgICAgICAgIHB1YmxpYyBpbnQgY29udGVudHM7CisgICAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7IHJldHVybiBjb250ZW50czsgfQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CisgICAgICAgICAgICByZXR1cm4gKChNdXRhYmxlSW50KW90aGVyKS5jb250ZW50cyA9PSBjb250ZW50czsKKyAgICAgICAgfQorICAgICAgICAvLyBhbGxvd3MgY2hhaW5pbmcKKyAgICAgICAgcHVibGljIE11dGFibGVJbnQgc2V0KGludCBjb250ZW50cykgeworICAgICAgICAgICAgdGhpcy5jb250ZW50cyA9IGNvbnRlbnRzOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICB9CisgICAgKi8KKworfQorICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NoaW5lc2VEYXRlRm9ybWF0LmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9DaGluZXNlRGF0ZUZvcm1hdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhYzk5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9DaGluZXNlRGF0ZUZvcm1hdC5qYXZhCkBAIC0wLDAgKzEsMTQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9DaGluZXNlRGF0ZUZvcm1hdC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjE6MjkgJAorICogJFJldmlzaW9uOiAxLjcgJAorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC4qOworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworaW1wb3J0IGphdmEudGV4dC5QYXJzZVBvc2l0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogQSBjb25jcmV0ZSB7QGxpbmsgRGF0ZUZvcm1hdH0gZm9yIHtAbGluayBjb20uaWJtLmljdS51dGlsLkNoaW5lc2VDYWxlbmRhcn0uCisgKiBUaGlzIGNsYXNzIGhhbmRsZXMgYSA8Y29kZT5DaGluZXNlQ2FsZW5kYXI8L2NvZGU+LXNwZWNpZmljIGZpZWxkLAorICogPGNvZGU+Q2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEg8L2NvZGU+LiAgSXQgYWxzbyByZWRlZmluZXMgdGhlCisgKiBoYW5kbGluZyBvZiB0d28gZmllbGRzLCA8Y29kZT5FUkE8L2NvZGU+IGFuZCA8Y29kZT5ZRUFSPC9jb2RlPi4gIFRoZQorICogZm9ybWVyIGlzIGRpc3BsYXllZCBudW1lcmljYWxseSwgaW5zdGVhZCBvZiBzeW1ib2xpY2FsbHksIHNpbmNlIGl0IGlzCisgKiB0aGUgbnVtZXJpYyBjeWNsZSBudW1iZXIgaW4gPGNvZGU+Q2hpbmVzZUNhbGVuZGFyPC9jb2RlPi4gIFRoZSBsYXR0ZXIgaXMKKyAqIG51bWVyaWMsIGFzIGJlZm9yZSwgYnV0IGhhcyBubyBzcGVjaWFsIDItZGlnaXQgWTJLIGJlaGF2aW9yLgorICoKKyAqIDxwPldpdGggcmVnYXJkIHRvIDxjb2RlPkNoaW5lc2VDYWxlbmRhci5JU19MRUFQX01PTlRIPC9jb2RlPiwgdGhpcworICogY2xhc3MgaGFuZGxlcyBwYXJzaW5nIHNwZWNpYWxseS4gIElmIG5vIHN0cmluZyBzeW1ib2wgaXMgZm91bmQgYXQgYWxsLAorICogdGhpcyBpcyB0YWtlbiBhcyBlcXVpdmFsZW50IHRvIGFuIDxjb2RlPklTX0xFQVBfTU9OVEg8L2NvZGU+IHZhbHVlIG9mCisgKiB6ZXJvLiAgVGhpcyBhbGxvd3MgZm9ybWF0cyB0byBkaXNwbGF5IGEgc3BlY2lhbCBzdHJpbmcgKGUuZy4sICIqIikgZm9yCisgKiBsZWFwIG1vbnRocywgYnV0IG5vIHN0cmluZyBmb3Igbm9ybWFsIG1vbnRocy4KKyAqCisgKiA8cD5TdW1tYXJ5IG9mIGZpZWxkIGNoYW5nZXMgdnMuIHtAbGluayBTaW1wbGVEYXRlRm9ybWF0fTo8cHJlPgorICogU3ltYm9sICAgTWVhbmluZyAgICAgICAgICAgICAgICAgUHJlc2VudGF0aW9uICAgICAgICBFeGFtcGxlCisgKiAtLS0tLS0gICAtLS0tLS0tICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0gICAgICAgIC0tLS0tLS0KKyAqIEcgICAgICAgIGN5Y2xlICAgICAgICAgICAgICAgICAgIChOdW1iZXIpICAgICAgICAgICAgNzgKKyAqIHkgICAgICAgIHllYXIgb2YgY3ljbGUgKDEuLjYwKSAgIChOdW1iZXIpICAgICAgICAgICAgMTcKKyAqIGwgICAgICAgIGlzIGxlYXAgbW9udGggICAgICAgICAgIChUZXh0KSAgICAgICAgICAgICAgNDYzNworICogPC9wcmU+CisgKgorICogQHNlZSBjb20uaWJtLmljdS51dGlsLkNoaW5lc2VDYWxlbmRhcgorICogQHNlZSBDaGluZXNlRGF0ZUZvcm1hdFN5bWJvbHMKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitwdWJsaWMgY2xhc3MgQ2hpbmVzZURhdGVGb3JtYXQgZXh0ZW5kcyBTaW1wbGVEYXRlRm9ybWF0IHsKKworICAgIC8vIFRPRE8gRmluaXNoIHRoZSBjb25zdHJ1Y3RvcnMKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIENoaW5lc2VEYXRlRm9ybWF0IGZyb20gYSBkYXRlIGZvcm1hdCBwYXR0ZXJuIGFuZCBsb2NhbGUKKyAgICAgKiBAcGFyYW0gcGF0dGVybiB0aGUgcGF0dGVybgorICAgICAqIEBwYXJhbSBsb2NhbGUgdGhlIGxvY2FsZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgcHVibGljIENoaW5lc2VEYXRlRm9ybWF0KFN0cmluZyBwYXR0ZXJuLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHN1cGVyKHBhdHRlcm4sIG5ldyBDaGluZXNlRGF0ZUZvcm1hdFN5bWJvbHMobG9jYWxlKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZyBzdWJGb3JtYXQoY2hhciBjaCwgaW50IGNvdW50LCBpbnQgYmVnaW5PZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MsIERhdGVGb3JtYXRTeW1ib2xzIGZvcm1hdERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIgY2FsKSAgeworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgIGNhc2UgJ0cnOiAvLyAnRycgLSBFUkEKKyAgICAgICAgICAgIHJldHVybiB6ZXJvUGFkZGluZ051bWJlcihjYWwuZ2V0KENhbGVuZGFyLkVSQSksIDEsIDkpOworICAgICAgICBjYXNlICdsJzogLy8gJ2wnIC0gSVNfTEVBUF9NT05USAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENoaW5lc2VEYXRlRm9ybWF0U3ltYm9scyBzeW1ib2xzID0KKyAgICAgICAgICAgICAgICAgICAgKENoaW5lc2VEYXRlRm9ybWF0U3ltYm9scykgZm9ybWF0RGF0YTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9scy5nZXRMZWFwTW9udGgoY2FsLmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGluZXNlQ2FsZW5kYXIuSVNfTEVBUF9NT05USCkpOworICAgICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnN1YkZvcm1hdChjaCwgY291bnQsIGJlZ2luT2Zmc2V0LCBwb3MsIGZvcm1hdERhdGEsIGNhbCk7CisgICAgICAgIH0KKyAgICB9ICAgIAorCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBzdWJQYXJzZShTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBjaGFyIGNoLCBpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIG9iZXlDb3VudCwgYm9vbGVhbltdIGFtYmlndW91c1llYXIsIENhbGVuZGFyIGNhbCkgeworICAgICAgICBpZiAoY2ggIT0gJ0cnICYmIGNoICE9ICdsJyAmJiBjaCAhPSAneScpIHsKKyAgICAgICAgICAgIHJldHVybiBzdXBlci5zdWJQYXJzZSh0ZXh0LCBzdGFydCwgY2gsIGNvdW50LCBvYmV5Q291bnQsIGFtYmlndW91c1llYXIsIGNhbCk7CisgICAgICAgIH0KKworICAgICAgICBQYXJzZVBvc2l0aW9uIHBvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKHN0YXJ0KTsKKworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHNwYWNlcyBoZXJlLCBza2lwIG92ZXIgdGhlbS4gIElmIHdlIGhpdCB0aGUgZW5kCisgICAgICAgIC8vIG9mIHRoZSBzdHJpbmcsIHRoZW4gZmFpbC4KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKHBvcy5nZXRJbmRleCgpID49IHRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLXN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhciBjID0gdGV4dC5jaGFyQXQocG9zLmdldEluZGV4KCkpOworICAgICAgICAgICAgaWYgKGMgIT0gJyAnICYmIGMgIT0gJ1x0JykgeyAvLyBUT0RPIFNob3VsZG4ndCB0aGlzIGJlIGlzV2hpdGVzcGFjZT8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcy5zZXRJbmRleChwb3MuZ2V0SW5kZXgoKSsxKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgY2FzZSAnRyc6IC8vICdHJyAtIEVSQQorICAgICAgICBjYXNlICd5JzogLy8gJ3knIC0gWUVBUiwgYnV0IHdpdGhvdXQgdGhlIDItZGlnaXQgWTJLIGFkanVzdG1lbnQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOdW1iZXIgbnVtYmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAob2JleUNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhcnQrY291bnQpID4gdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXJGb3JtYXQucGFyc2UodGV4dC5zdWJzdHJpbmcoMCwgc3RhcnQrY291bnQpLCBwb3MpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlckZvcm1hdC5wYXJzZSh0ZXh0LCBwb3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1zdGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gbnVtYmVyLmludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgY2FsLnNldChjaCA9PSAnRycgPyBDYWxlbmRhci5FUkEgOiBDYWxlbmRhci5ZRUFSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvcy5nZXRJbmRleCgpOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICdsJzogLy8gJ2wnIC0gSVNfTEVBUF9NT05USAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENoaW5lc2VEYXRlRm9ybWF0U3ltYm9scyBzeW1ib2xzID0KKyAgICAgICAgICAgICAgICAgICAgKENoaW5lc2VEYXRlRm9ybWF0U3ltYm9scykgZ2V0U3ltYm9scygpOworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBtYXRjaFN0cmluZyh0ZXh0LCBzdGFydCwgQ2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMuaXNMZWFwTW9udGgsIGNhbCk7CisgICAgICAgICAgICAgICAgLy8gVHJlYXQgdGhlIGFic2VuY2Ugb2YgYW55IG1hdGNoaW5nIHN0cmluZyBhcyBzZXR0aW5nCisgICAgICAgICAgICAgICAgLy8gSVNfTEVBUF9NT05USCB0byBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0PDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsLnNldChDaGluZXNlQ2FsZW5kYXIuSVNfTEVBUF9NT05USCwgMCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7IC8vIFRoaXMgY2FuIG5ldmVyIGhhcHBlbgorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ2hpbmVzZURhdGVGb3JtYXRTeW1ib2xzLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9DaGluZXNlRGF0ZUZvcm1hdFN5bWJvbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mM2Q3MDFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ2hpbmVzZURhdGVGb3JtYXRTeW1ib2xzLmphdmEKQEAgLTAsMCArMSw4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvQ2hpbmVzZURhdGVGb3JtYXRTeW1ib2xzLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMi8wNSAwMToyMTozMSAkCisgKiAkUmV2aXNpb246IDEuNCAkCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKKworLyoqCisgKiBBIHN1YmNsYXNzIG9mIHtAbGluayBEYXRlRm9ybWF0U3ltYm9sc30gZm9yIHtAbGluayBDaGluZXNlRGF0ZUZvcm1hdH0uCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGFkZGl0aW9uYWwgc3ltYm9scyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICogPGNvZGU+Q2hpbmVzZUNhbGVuZGFyLklTX0xFQVBfTU9OVEg8L2NvZGU+IGZpZWxkLgorICoKKyAqIEBzZWUgQ2hpbmVzZURhdGVGb3JtYXQKKyAqIEBzZWUgY29tLmlibS5pY3UudXRpbC5DaGluZXNlQ2FsZW5kYXIKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitwdWJsaWMgY2xhc3MgQ2hpbmVzZURhdGVGb3JtYXRTeW1ib2xzIGV4dGVuZHMgRGF0ZUZvcm1hdFN5bWJvbHMgeworICAgIAorICAgIC8qKgorICAgICAqIFBhY2thZ2UtcHJpdmF0ZSBhcnJheSB0aGF0IENoaW5lc2VEYXRlRm9ybWF0IG5lZWRzIHRvIGJlIGFibGUgdG8KKyAgICAgKiByZWFkLgorICAgICAqLworICAgIFN0cmluZyBpc0xlYXBNb250aFtdOyAvLyBEbyBOT1QgYWRkID1udWxsIGluaXRpYWxpemVyCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBDaGluZXNlRGF0ZUZvcm1hdFN5bWJvbHMgZm9yIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2hpbmVzZURhdGVGb3JtYXRTeW1ib2xzKCkgeworICAgICAgICB0aGlzKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIENoaW5lc2VEYXRlRm9ybWF0U3ltYm9scyBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gbG9jYWxlIHRoZSBsb2NhbGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2hpbmVzZURhdGVGb3JtYXRTeW1ib2xzKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgc3VwZXIoQ2hpbmVzZUNhbGVuZGFyLmNsYXNzLCBsb2NhbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIENoaW5lc2VEYXRlRm9ybWF0U3ltYm9scyBmb3IgdGhlIHByb3ZpZGVkIGNhbGVuZGFyIGFuZCBsb2NhbGUuCisgICAgICogQHBhcmFtIGNhbCB0aGUgQ2FsZW5kYXIKKyAgICAgKiBAcGFyYW0gbG9jYWxlIHRoZSBsb2NhbGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2hpbmVzZURhdGVGb3JtYXRTeW1ib2xzKENhbGVuZGFyIGNhbCwgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICBzdXBlcihjYWw9PW51bGw/bnVsbDpjYWwuZ2V0Q2xhc3MoKSwgbG9jYWxlKTsKKyAgICB9CisKKyAgICAvLyBOZXcgQVBJCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRMZWFwTW9udGgoaW50IGlzTGVhcE1vbnRoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmlzTGVhcE1vbnRoW2lzTGVhcE1vbnRoXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSBEYXRlRm9ybWF0U3ltYm9scy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBjb25zdHJ1Y3RDYWxlbmRhclNwZWNpZmljKFJlc291cmNlQnVuZGxlIGJ1bmRsZSkgeworICAgICAgICBzdXBlci5jb25zdHJ1Y3RDYWxlbmRhclNwZWNpZmljKGJ1bmRsZSk7CisgICAgICAgIGlmIChidW5kbGUgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpc0xlYXBNb250aCA9IGJ1bmRsZS5nZXRTdHJpbmdBcnJheSgiSXNMZWFwTW9udGgiKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Db2xsYXRpb25FbGVtZW50SXRlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjFmMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyNDk5IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBqYXZhLnRleHQuU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuTm9ybWFsaXplckltcGw7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyUHJvcGVydHk7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVRGVidWc7CisKKy8qKgorICogPHA+PGNvZGU+Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yPC9jb2RlPiBpcyBhbiBpdGVyYXRvciBjcmVhdGVkIGJ5CisgKiBhIFJ1bGVCYXNlZENvbGxhdG9yIHRvIHdhbGsgdGhyb3VnaCBhIHN0cmluZy4gVGhlIHJldHVybiByZXN1bHQgb2YKKyAqIGVhY2ggaXRlcmF0aW9uIGlzIGEgMzItYml0IGNvbGxhdGlvbiBlbGVtZW50IHRoYXQgZGVmaW5lcyB0aGUKKyAqIG9yZGVyaW5nIHByaW9yaXR5IG9mIHRoZSBuZXh0IGNoYXJhY3RlciBvciBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzCisgKiBpbiB0aGUgc291cmNlIHN0cmluZy48L3A+CisgKgorICogPHA+Rm9yIGlsbHVzdHJhdGlvbiwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBpbiBTcGFuaXNoOgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogImNhIiAtPiB0aGUgZmlyc3QgY29sbGF0aW9uIGVsZW1lbnQgaXMgY29sbGF0aW9uX2VsZW1lbnQoJ2MnKSBhbmQgc2Vjb25kIAorICogICAgICAgICBjb2xsYXRpb24gZWxlbWVudCBpcyBjb2xsYXRpb25fZWxlbWVudCgnYScpLgorICogCisgKiBTaW5jZSAiY2giIGluIFNwYW5pc2ggc29ydHMgYXMgb25lIGVudGl0eSwgdGhlIGJlbG93IGV4YW1wbGUgcmV0dXJucyBvbmUKKyAqIGNvbGxhdGlvbiBlbGVtZW50IGZvciB0aGUgdHdvIGNoYXJhY3RlcnMgJ2MnIGFuZCAnaCcKKyAqIAorICogImNoYSIgLT4gdGhlIGZpcnN0IGNvbGxhdGlvbiBlbGVtZW50IGlzIGNvbGxhdGlvbl9lbGVtZW50KCdjaCcpIGFuZCBzZWNvbmQgCisgKiAgICAgICAgICBjb2xsYXRpb24gZWxlbWVudCBpcyBjb2xsYXRpb25fZWxlbWVudCgnYScpLgorICogPC9wcmU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKiBBbmQgaW4gR2VybWFuLAorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogU2luY2UgdGhlIGNoYXJhY3RlciAnJiMyMzA7JyBpcyBhIGNvbXBvc2VkIGNoYXJhY3RlciBvZiAnYScgYW5kICdlJywgdGhlCisgKiBpdGVyYXRvciByZXR1cm5zIHR3byBjb2xsYXRpb24gZWxlbWVudHMgZm9yIHRoZSBzaW5nbGUgY2hhcmFjdGVyICcmIzIzMDsnCisgKiAKKyAqICImIzIzMDtiIiAtPiB0aGUgZmlyc3QgY29sbGF0aW9uIGVsZW1lbnQgaXMgY29sbGF0aW9uX2VsZW1lbnQoJ2EnKSwgdGhlIAorICogICAgICAgICAgICAgIHNlY29uZCBjb2xsYXRpb24gZWxlbWVudCBpcyBjb2xsYXRpb25fZWxlbWVudCgnZScpLCBhbmQgdGhlIAorICogICAgICAgICAgICAgIHRoaXJkIGNvbGxhdGlvbiBlbGVtZW50IGlzIGNvbGxhdGlvbl9lbGVtZW50KCdiJykuCisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqIDwvcD4KKyAqCisgKiA8cD5Gb3IgY29sbGF0aW9uIG9yZGVyaW5nIGNvbXBhcmlzb24sIHRoZSBjb2xsYXRpb24gZWxlbWVudCByZXN1bHRzCisgKiBjYW4gbm90IGJlIGNvbXBhcmVkIHNpbXBseSBieSB1c2luZyBiYXNpYyBhcml0aG1ldHJpYyBvcGVyYXRvcnMsCisgKiBlLmcuICZsdDssID09IG9yICZndDssIGZ1cnRoZXIgcHJvY2Vzc2luZyBoYXMgdG8gYmUgZG9uZS4gRGV0YWlscworICogY2FuIGJlIGZvdW5kIGluIHRoZSBJQ1UKKyAqIDxhIGhyZWY9aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdS91c2VyZ3VpZGUvQ29sbGF0ZV9TZXJ2aWNlQXJjaGl0ZWN0dXJlLmh0bWw+CisgKiB1c2VyIGd1aWRlPC9hPi4gQW4gZXhhbXBsZSBvZiB1c2luZyB0aGUgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yCisgKiBmb3IgY29sbGF0aW9uIG9yZGVyaW5nIGNvbXBhcmlzb24gaXMgdGhlIGNsYXNzIAorICogPGEgaHJlZj1TdHJpbmdTZWFyY2guaHRtbD4gY29tLmlibS5pY3UudGV4dC5TdHJpbmdTZWFyY2g8L2E+LjwvcD4KKyAqCisgKiA8cD5UbyBjb25zdHJ1Y3QgYSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Igb2JqZWN0LCB1c2VycyAKKyAqIGNhbGwgdGhlIG1ldGhvZCBnZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoKSBvbiBhCisgKiBSdWxlQmFzZWRDb2xsYXRvciB0aGF0IGRlZmluZXMgdGhlIGRlc2lyZWQgc29ydGluZyBvcmRlci48L3A+CisgKgorICogPHA+IEV4YW1wbGU6CisgKiA8YmxvY2txdW90ZT4KKyAqIDxwcmU+CisgKiAgU3RyaW5nIHRlc3RTdHJpbmcgPSAiVGhpcyBpcyBhIHRlc3QiOworICogIFJ1bGVCYXNlZENvbGxhdG9yIHJiYyA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcigiJmFtcDthJmx0O2IiKTsKKyAqICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXRlcmF0b3IgPSByYmMuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHRlc3RTdHJpbmcpOworICogIGludCBwcmltYXJ5T3JkZXIgPSBpdGVyYXRvci5JR05PUkFCTEU7CisgKiAgd2hpbGUgKHByaW1hcnlPcmRlciAhPSBpdGVyYXRvci5OVUxMT1JERVIpIHsKKyAqICAgICAgaW50IG9yZGVyID0gaXRlcmF0b3IubmV4dCgpOworICogICAgICBpZiAob3JkZXIgIT0gaXRlcmF0b3IuSUdOT1JBQkxFICYmCisgKiAgICAgICAgICBvcmRlciAhPSBpdGVyYXRvci5OVUxMT1JERVIpIHsKKyAqICAgICAgICAgIC8vIG9yZGVyIGlzIHZhbGlkLCBub3QgaWdub3JhYmxlIGFuZCB3ZSBoYXZlIG5vdCBwYXNzZWQgdGhlIGVuZAorICogICAgICAgICAgLy8gb2YgdGhlIGl0ZXJhdGlvbiwgd2UgZG8gc29tZXRoaW5nCisgKiAgICAgICAgICBwcmltYXJ5T3JkZXIgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IucHJpbWFyeU9yZGVyKG9yZGVyKTsKKyAqICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmV4dCBwcmltYXJ5IG9yZGVyIDB4IiArIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcocHJpbWFyeU9yZGVyKSk7CisgKiAgICAgIH0KKyAqICB9CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBjbGFzcyBpcyBub3Qgc3ViY2xhc3NhYmxlCisgKiA8L3A+CisgKiBAc2VlIENvbGxhdG9yCisgKiBAc2VlIFJ1bGVCYXNlZENvbGxhdG9yCisgKiBAc2VlIFN0cmluZ1NlYXJjaAorICogQGF1dGhvciBTeW4gV2VlIFF1ZWsKKyAqIEBkcmFmdCBJQ1UgMi4yIAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIAoreworICAgIC8vIHB1YmxpYyBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogPHA+VGhpcyBjb25zdGFudCBpcyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3IgaW4gdGhlIG1ldGhvZHMKKyAgICAgKiBuZXh0KCkgYW5kIHByZXZpb3VzKCkgd2hlbiB0aGUgZW5kIG9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgICogc291cmNlIHN0cmluZyBoYXMgYmVlbiByZWFjaGVkLCBhbmQgdGhlcmUgYXJlIG5vIG1vcmUgdmFsaWQKKyAgICAgKiBjb2xsYXRpb24gZWxlbWVudHMgdG8gcmV0dXJuLjwvcD4KKyAgICAgKgorICAgICAqIDxwPlNlZSBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBhbiBleGFtcGxlIG9mIHVzZS48L3A+CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKiBAc2VlICNuZXh0CisgICAgICogQHNlZSAjcHJldmlvdXMgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBOVUxMT1JERVIgPSAweGZmZmZmZmZmOworCisgICAgLyoqCisgICAgICogPHA+VGhpcyBjb25zdGFudCBpcyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3IgaW4gdGhlIG1ldGhvZHMKKyAgICAgKiBuZXh0KCkgYW5kIHByZXZpb3VzKCkgd2hlbiBhIGNvbGxhdGlvbiBlbGVtZW50IHJlc3VsdCBpcyB0byBiZQorICAgICAqIGlnbm9yZWQuPC9wPgorICAgICAqCisgICAgICogPHA+U2VlIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIGFuIGV4YW1wbGUgb2YgdXNlLjwvcD4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqIEBzZWUgI25leHQKKyAgICAgKiBAc2VlICNwcmV2aW91cyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElHTk9SQUJMRSA9IDA7CisKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgIC8vIHB1YmxpYyBnZXR0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogPHA+UmV0dXJucyB0aGUgY2hhcmFjdGVyIG9mZnNldCBpbiB0aGUgc291cmNlIHN0cmluZworICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5leHQgY29sbGF0aW9uIGVsZW1lbnQuIEkuZS4sIGdldE9mZnNldCgpCisgICAgICogcmV0dXJucyB0aGUgcG9zaXRpb24gaW4gdGhlIHNvdXJjZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgKiBjb2xsYXRpb24gZWxlbWVudCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlIG5leHQgY2FsbCB0bworICAgICAqIG5leHQoKS4gVGhpcyB2YWx1ZSBjb3VsZCBiZSBhbnkgb2Y6CisgICAgICogPHVsPgorICAgICAqIDxsaT4gVGhlIGluZGV4IG9mIHRoZSA8Yj5maXJzdDwvYj4gY2hhcmFjdGVyIGNvcnJlc3BvbmRpbmcgdG8KKyAgICAgKiB0aGUgbmV4dCBjb2xsYXRpb24gZWxlbWVudC4gKFRoaXMgbWVhbnMgdGhhdCBpZgorICAgICAqIDxjb2RlPnNldE9mZnNldChvZmZzZXQpPC9jb2RlPiBzZXRzIHRoZSBpbmRleCBpbiB0aGUgbWlkZGxlIG9mCisgICAgICogYSBjb250cmFjdGlvbiwgPGNvZGU+Z2V0T2Zmc2V0KCk8L2NvZGU+IHJldHVybnMgdGhlIGluZGV4IG9mCisgICAgICogdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgY29udHJhY3Rpb24sIHdoaWNoIG1heSBub3QgYmUgZXF1YWwKKyAgICAgKiB0byB0aGUgb3JpZ2luYWwgb2Zmc2V0IHRoYXQgd2FzIHNldC4gSGVuY2UgY2FsbGluZyBnZXRPZmZzZXQoKQorICAgICAqIGltbWVkaWF0ZWx5IGFmdGVyIHNldE9mZnNldChvZmZzZXQpIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IHRoZQorICAgICAqIG9yaWdpbmFsIG9mZnNldCBzZXQgd2lsbCBiZSByZXR1cm5lZC4pCisgICAgICogPGxpPiBJZiBub3JtYWxpemF0aW9uIGlzIG9uLCB0aGUgaW5kZXggb2YgdGhlIDxiPmltbWVkaWF0ZTwvYj4KKyAgICAgKiBzdWJzZXF1ZW50IGNoYXJhY3Rlciwgb3IgY29tcG9zaXRlIGNoYXJhY3RlciB3aXRoIHRoZSBmaXJzdAorICAgICAqIGNoYXJhY3RlciwgaGF2aW5nIGEgY29tYmluaW5nIGNsYXNzIG9mIDAuCisgICAgICogPGxpPiBUaGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2Ugc3RyaW5nLCBpZiBpdGVyYXRpb24gaGFzIHJlYWNoZWQKKyAgICAgKiB0aGUgZW5kLgorICAgICAqPC91bD4KKyAgICAgKiA8L3A+CisgICAgICogQHJldHVybiBUaGUgY2hhcmFjdGVyIG9mZnNldCBpbiB0aGUgc291cmNlIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSAKKyAgICAgKiAgICAgICAgIGNvbGxhdGlvbiBlbGVtZW50IHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUgbmV4dCBjYWxsIHRvIAorICAgICAqICAgICAgICAgbmV4dCgpLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlck9mZnNldF8gIT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChtX2lzRm9yd2FyZHNfKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fRkNETGltaXRfOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fRkNEU3RhcnRfOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3NvdXJjZV8uZ2V0SW5kZXgoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIDxwPiBSZXR1cm5zIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbnkgZXhwYW5zaW9uIHNlcXVlbmNlIHRoYXQgZW5kcyB3aXRoIAorICAgICAqIHRoZSBzcGVjaWZpZWQgY29sbGF0aW9uIGVsZW1lbnQuIElmIHRoZXJlIGlzIG5vIGV4cGFuc2lvbiB3aXRoIHRoaXMKKyAgICAgKiBjb2xsYXRpb24gZWxlbWVudCBhcyB0aGUgbGFzdCBlbGVtZW50LCByZXR1cm5zIDEuCisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBjZSBhIGNvbGxhdGlvbiBlbGVtZW50IHJldHVybmVkIGJ5IHByZXZpb3VzKCkgb3IgbmV4dCgpLgorICAgICAqIEByZXR1cm4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFueSBleHBhbnNpb24gc2VxdWVuY2UgZW5kaW5nCisgICAgICogICAgICAgICB3aXRoIHRoZSBzcGVjaWZpZWQgY29sbGF0aW9uIGVsZW1lbnQuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE1heEV4cGFuc2lvbihpbnQgY2UpCisgICAgeworICAgICAgICBpbnQgc3RhcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgaW50IGxpbWl0ID0gbV9jb2xsYXRvcl8ubV9leHBhbnNpb25FbmRDRV8ubGVuZ3RoOworICAgICAgICBsb25nIHVuc2lnbmVkY2UgPSBjZSAmIDB4RkZGRkZGRkZsOworICAgICAgICB3aGlsZSAoc3RhcnQgPCBsaW1pdCAtIDEpIHsKKyAgICAgICAgICAgIGludCBtaWQgPSBzdGFydCArICgobGltaXQgLSBzdGFydCkgPj4gMSk7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvbmcgbWlkY2UgPSBtX2NvbGxhdG9yXy5tX2V4cGFuc2lvbkVuZENFX1ttaWRdICYgMHhGRkZGRkZGRmw7CisgICAgICAgICAgICBpZiAodW5zaWduZWRjZSA8PSBtaWRjZSkgeyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGltaXQgPSBtaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RhcnQgPSBtaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgfSAgICAgICAgICAKKyAgICAgICAgaW50IHJlc3VsdCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAobV9jb2xsYXRvcl8ubV9leHBhbnNpb25FbmRDRV9bc3RhcnRdID09IGNlKSB7CisgICAgICAgICAgICByZXN1bHQgPSBtX2NvbGxhdG9yXy5tX2V4cGFuc2lvbkVuZENFTWF4U2l6ZV9bc3RhcnRdOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBlbHNlIGlmIChsaW1pdCA8IG1fY29sbGF0b3JfLm1fZXhwYW5zaW9uRW5kQ0VfLmxlbmd0aCAmJgorICAgICAgICAgICAgICAgICBtX2NvbGxhdG9yXy5tX2V4cGFuc2lvbkVuZENFX1tsaW1pdF0gPT0gY2UpIHsgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0ID0gbV9jb2xsYXRvcl8ubV9leHBhbnNpb25FbmRDRU1heFNpemVfW2xpbWl0XTsgCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGVsc2UgaWYgKChjZSAmIDB4RkZGRikgPT0gMHgwMEMwKSB7CisgICAgICAgICAgICByZXN1bHQgPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgICAgCisgICAgfQorCisgICAgLy8gcHVibGljIG90aGVyIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiA8cD4gUmVzZXRzIHRoZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLiBUaGUgbmV4dAorICAgICAqIGNhbGwgdG8gbmV4dCgpIG9yIHByZXZpb3VzKCkgd2lsbCByZXR1cm4gdGhlIGZpcnN0IGFuZCBsYXN0CisgICAgICogY29sbGF0aW9uIGVsZW1lbnQgaW4gdGhlIHN0cmluZywgcmVzcGVjdGl2ZWx5LjwvcD4KKyAgICAgKgorICAgICAqIDxwPklmIHRoZSBSdWxlQmFzZWRDb2xsYXRvciB1c2VkIGJ5IHRoaXMgaXRlcmF0b3IgaGFzIGhhZCBpdHMKKyAgICAgKiBhdHRyaWJ1dGVzIGNoYW5nZWQsIGNhbGxpbmcgcmVzZXQoKSB3aWxsIHJlaW5pdGlhbGl6ZSB0aGUKKyAgICAgKiBpdGVyYXRvciB0byB1c2UgdGhlIG5ldyBhdHRyaWJ1dGVzLjwvcD4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fc291cmNlXy5zZXRJbmRleChtX3NvdXJjZV8uZ2V0QmVnaW5JbmRleCgpKTsKKyAgICAgICAgdXBkYXRlSW50ZXJuYWxTdGF0ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPkdldCB0aGUgbmV4dCBjb2xsYXRpb24gZWxlbWVudCBpbiB0aGUgc291cmNlIHN0cmluZy48L3A+ICAKKyAgICAgKgorICAgICAqIDxwPlRoaXMgaXRlcmF0b3IgaXRlcmF0ZXMgb3ZlciBhIHNlcXVlbmNlIG9mIGNvbGxhdGlvbiBlbGVtZW50cworICAgICAqIHRoYXQgd2VyZSBidWlsdCBmcm9tIHRoZSBzdHJpbmcuIEJlY2F1c2UgdGhlcmUgaXNuJ3QKKyAgICAgKiBuZWNlc3NhcmlseSBhIG9uZS10by1vbmUgbWFwcGluZyBmcm9tIGNoYXJhY3RlcnMgdG8gY29sbGF0aW9uCisgICAgICogZWxlbWVudHMsIHRoaXMgZG9lc24ndCBtZWFuIHRoZSBzYW1lIHRoaW5nIGFzICJyZXR1cm4gdGhlCisgICAgICogY29sbGF0aW9uIGVsZW1lbnQgW29yIG9yZGVyaW5nIHByaW9yaXR5XSBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIKKyAgICAgKiBpbiB0aGUgc3RyaW5nIi48L3A+CisgICAgICoKKyAgICAgKiA8cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbGxhdGlvbiBlbGVtZW50IHRoYXQgdGhlCisgICAgICogaXRlcmF0b3IgaXMgY3VycmVudGx5IHBvaW50aW5nIHRvLCBhbmQgdGhlbiB1cGRhdGVzIHRoZQorICAgICAqIGludGVybmFsIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIG5leHQgZWxlbWVudC4gIFByZXZpb3VzKCkKKyAgICAgKiB1cGRhdGVzIHRoZSBwb2ludGVyIGZpcnN0LCBhbmQgdGhlbiByZXR1cm5zIHRoZSBlbGVtZW50LiBUaGlzCisgICAgICogbWVhbnMgdGhhdCB3aGVuIHlvdSBjaGFuZ2UgZGlyZWN0aW9uIHdoaWxlIGl0ZXJhdGluZyAoaS5lLiwKKyAgICAgKiBjYWxsIG5leHQoKSBhbmQgdGhlbiBjYWxsIHByZXZpb3VzKCksIG9yIGNhbGwgcHJldmlvdXMoKSBhbmQKKyAgICAgKiB0aGVuIGNhbGwgbmV4dCgpKSwgeW91J2xsIGdldCBiYWNrIHRoZSBzYW1lIGVsZW1lbnQgdHdpY2UuPC9wPgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgbmV4dCBjb2xsYXRpb24gZWxlbWVudCBvciBOVUxMT1JERVIgaWYgdGhlIGVuZCBvZiB0aGUgCisgICAgICogICAgICAgICBpdGVyYXRpb24gaGFzIGJlZW4gcmVhY2hlZC4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMiAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG5leHQoKQorICAgIHsKKyAgICAgICAgbV9pc0ZvcndhcmRzXyA9IHRydWU7CisgICAgICAgIGlmIChtX0NFQnVmZmVyU2l6ZV8gPiAwKSB7IAorICAgICAgICAgICAgaWYgKG1fQ0VCdWZmZXJPZmZzZXRfIDwgbV9DRUJ1ZmZlclNpemVfKSB7IAorICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBleHBhbnNpb25zIGxlZnQgaW4gdGhlIGJ1ZmZlciwgd2UgcmV0dXJuIGl0CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fQ0VCdWZmZXJfW21fQ0VCdWZmZXJPZmZzZXRfICsrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fQ0VCdWZmZXJTaXplXyA9IDA7CisgICAgICAgICAgICBtX0NFQnVmZmVyT2Zmc2V0XyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNoYXIgY2ggPSBuZXh0Q2hhcigpOyAgICAKKyAgICAgICAgLyogU3lzdGVtLm91dC5wcmludGxuKCJjaCAiICsgSW50ZWdlci50b0hleFN0cmluZyhjaCkgKyAiICIgKyAKKyAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhtX3NvdXJjZV8uY3VycmVudCgpKSk7Ki8KKyAgICAgICAgaWYgKGNoID09IENoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMT1JERVI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fY29sbGF0b3JfLm1faXNIaXJhZ2FuYTRfKSB7CisgICAgICAgICAgICBtX2lzQ29kZVBvaW50SGlyYWdhbmFfID0gKGNoID49IDB4MzA0MCAmJiBjaCA8PSAweDMwOWUpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoY2ggPiAweDMwOTQgJiYgY2ggPCAweDMwOWQpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaW50IHJlc3VsdCA9IE5VTExPUkRFUjsKKyAgICAgICAgaWYgKGNoIDw9IDB4RkYpIHsKKyAgICAgICAgICAgIC8vIEZvciBsYXRpbi0xIGNoYXJhY3RlcnMgd2UgbmV2ZXIgbmVlZCB0byBmYWxsIGJhY2sgdG8gdGhlIFVDQSAKKyAgICAgICAgICAgIC8vIHRhYmxlIGJlY2F1c2UgYWxsIG9mIHRoZSBVQ0EgZGF0YSBpcyByZXBsaWNhdGVkIGluIHRoZSAKKyAgICAgICAgICAgIC8vIGxhdGluT25lTWFwcGluZyBhcnJheQorICAgICAgICAgICAgcmVzdWx0ID0gbV9jb2xsYXRvcl8ubV90cmllXy5nZXRMYXRpbjFMaW5lYXJWYWx1ZShjaCk7CisgICAgICAgICAgICBpZiAoUnVsZUJhc2VkQ29sbGF0b3IuaXNTcGVjaWFsKHJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXh0U3BlY2lhbChtX2NvbGxhdG9yXywgcmVzdWx0LCBjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBtX2NvbGxhdG9yXy5tX3RyaWVfLmdldExlYWRWYWx1ZShjaCk7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihJbnRlZ2VyLnRvSGV4U3RyaW5nKHJlc3VsdCkpOworICAgICAgICAgICAgaWYgKFJ1bGVCYXNlZENvbGxhdG9yLmlzU3BlY2lhbChyZXN1bHQpKSB7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gc3Vycm9nYXRlIGxlYWRzIGFyZSBoYW5kbGVkIGFzIHNwZWNpYWwgY2VzCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV4dFNwZWNpYWwobV9jb2xsYXRvcl8sIHJlc3VsdCwgY2gpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBDRV9OT1RfRk9VTkRfKSB7ICAgCisgICAgICAgICAgICAgICAgLy8gY291bGRuJ3QgZmluZCBhIGdvb2QgQ0UgaW4gdGhlIHRhaWxvcmluZworICAgICAgICAgICAgICAgIC8vIGlmIHdlIGdvdCBoZXJlLCB0aGUgY29kZXBvaW50IE1VU1QgYmUgb3ZlciAweEZGIC0gc28gd2UgbG9vayAKKyAgICAgICAgICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgVUNBCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9jb2xsYXRvcl8uVUNBXy5tX3RyaWVfLmdldExlYWRWYWx1ZShjaCk7CisgICAgICAgICAgICAgICAgaWYgKFJ1bGVCYXNlZENvbGxhdG9yLmlzU3BlY2lhbChyZXN1bHQpKSB7IAorICAgICAgICAgICAgICAgICAgICAvLyBVQ0EgYWxzbyBnaXZlcyB1cyBhIHNwZWNpYWwgQ0UKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV4dFNwZWNpYWwobV9jb2xsYXRvcl8uVUNBXywgcmVzdWx0LCBjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7IAorICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPkdldCB0aGUgcHJldmlvdXMgY29sbGF0aW9uIGVsZW1lbnQgaW4gdGhlIHNvdXJjZSBzdHJpbmcuPC9wPgorICAgICAqCisgICAgICogPHA+VGhpcyBpdGVyYXRvciBpdGVyYXRlcyBvdmVyIGEgc2VxdWVuY2Ugb2YgY29sbGF0aW9uIGVsZW1lbnRzCisgICAgICogdGhhdCB3ZXJlIGJ1aWx0IGZyb20gdGhlIHN0cmluZy4gQmVjYXVzZSB0aGVyZSBpc24ndAorICAgICAqIG5lY2Vzc2FyaWx5IGEgb25lLXRvLW9uZSBtYXBwaW5nIGZyb20gY2hhcmFjdGVycyB0byBjb2xsYXRpb24KKyAgICAgKiBlbGVtZW50cywgdGhpcyBkb2Vzbid0IG1lYW4gdGhlIHNhbWUgdGhpbmcgYXMgInJldHVybiB0aGUKKyAgICAgKiBjb2xsYXRpb24gZWxlbWVudCBbb3Igb3JkZXJpbmcgcHJpb3JpdHldIG9mIHRoZSBwcmV2aW91cworICAgICAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIi48L3A+CisgICAgICoKKyAgICAgKiA8cD5UaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGl0ZXJhdG9yJ3MgaW50ZXJuYWwgcG9pbnRlciB0bworICAgICAqIHBvaW50IHRvIHRoZSBjb2xsYXRpb24gZWxlbWVudCBwcmVjZWRpbmcgdGhlIG9uZSBpdCdzIGN1cnJlbnRseQorICAgICAqIHBvaW50aW5nIHRvIGFuZCB0aGVuIHJldHVybnMgdGhhdCBlbGVtZW50LCB3aGlsZSBuZXh0KCkgcmV0dXJucworICAgICAqIHRoZSBjdXJyZW50IGVsZW1lbnQgYW5kIHRoZW4gdXBkYXRlcyB0aGUgcG9pbnRlci4gVGhpcyBtZWFucworICAgICAqIHRoYXQgd2hlbiB5b3UgY2hhbmdlIGRpcmVjdGlvbiB3aGlsZSBpdGVyYXRpbmcgKGkuZS4sIGNhbGwKKyAgICAgKiBuZXh0KCkgYW5kIHRoZW4gY2FsbCBwcmV2aW91cygpLCBvciBjYWxsIHByZXZpb3VzKCkgYW5kIHRoZW4KKyAgICAgKiBjYWxsIG5leHQoKSksIHlvdSdsbCBnZXQgYmFjayB0aGUgc2FtZSBlbGVtZW50IHR3aWNlLjwvcD4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIGNvbGxhdGlvbiBlbGVtZW50LCBvciBOVUxMT1JERVIgd2hlbiB0aGUgc3RhcnQgb2YgCisgICAgICogICAgICAgICAgICAgdGhlIGl0ZXJhdGlvbiBoYXMgYmVlbiByZWFjaGVkLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyBpbnQgcHJldmlvdXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc291cmNlXy5nZXRJbmRleCgpIDw9IDAgJiYgbV9pc0ZvcndhcmRzXykgeworICAgICAgICAgICAgLy8gaWYgaXRlcmF0b3IgaXMgbmV3IG9yIHJlc2V0LCB3ZSBjYW4gaW1tZWRpYXRlIHBlcmZvcm0gIGJhY2t3YXJkcworICAgICAgICAgICAgLy8gaXRlcmF0aW9uIGV2ZW4gd2hlbiB0aGUgb2Zmc2V0IGlzIG5vdCByaWdodC4KKyAgICAgICAgICAgIG1fc291cmNlXy5zZXRJbmRleChtX3NvdXJjZV8uZ2V0RW5kSW5kZXgoKSk7CisgICAgICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9pc0ZvcndhcmRzXyA9IGZhbHNlOworICAgICAgICBpbnQgcmVzdWx0ID0gTlVMTE9SREVSOworICAgICAgICBpZiAobV9DRUJ1ZmZlclNpemVfID4gMCkgeworICAgICAgICAgICAgaWYgKG1fQ0VCdWZmZXJPZmZzZXRfID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtX0NFQnVmZmVyX1stLSBtX0NFQnVmZmVyT2Zmc2V0X107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX0NFQnVmZmVyU2l6ZV8gPSAwOyAKKyAgICAgICAgICAgIG1fQ0VCdWZmZXJPZmZzZXRfID0gMDsKKyAgICAgICAgfQorICAgICAgICBjaGFyIGNoID0gcHJldmlvdXNDaGFyKCk7ICAgIAorICAgICAgICBpZiAoY2ggPT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTExPUkRFUjsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKG1fY29sbGF0b3JfLm1faXNIaXJhZ2FuYTRfKSB7CisgICAgICAgICAgICBtX2lzQ29kZVBvaW50SGlyYWdhbmFfID0gKGNoID49IDB4MzA0MCAmJiBjaCA8PSAweDMwOWYpOworICAgICAgICB9CisgICAgICAgIGlmIChtX2NvbGxhdG9yXy5pc0NvbnRyYWN0aW9uRW5kKGNoKSAmJiAhaXNCYWNrd2FyZHNTdGFydCgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBwcmV2aW91c1NwZWNpYWwobV9jb2xsYXRvcl8sIENFX0NPTlRSQUNUSU9OXywgY2gpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGNoIDw9IDB4RkYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2NvbGxhdG9yXy5tX3RyaWVfLmdldExhdGluMUxpbmVhclZhbHVlKGNoKTsKKyAgICAgICAgICAgICAgICBpZiAoUnVsZUJhc2VkQ29sbGF0b3IuaXNTcGVjaWFsKHJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJldmlvdXNTcGVjaWFsKG1fY29sbGF0b3JfLCByZXN1bHQsIGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJPZmZzZXRfIDwgMCAmJiBtX3NvdXJjZV8uZ2V0SW5kZXgoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5vdyByZWFycmFuZ2UgdW5jb25kaXRpb25hbGx5CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1RoYWlQcmVWb3dlbChtX3NvdXJjZV8ucHJldmlvdXMoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IENFX1RIQUlfOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9jb2xsYXRvcl8ubV90cmllXy5nZXRMZWFkVmFsdWUoY2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fc291cmNlXy5uZXh0KCk7ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fY29sbGF0b3JfLm1fdHJpZV8uZ2V0TGVhZFZhbHVlKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFJ1bGVCYXNlZENvbGxhdG9yLmlzU3BlY2lhbChyZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByZXZpb3VzU3BlY2lhbChtX2NvbGxhdG9yXywgcmVzdWx0LCBjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gQ0VfTk9UX0ZPVU5EXykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQmFja3dhcmRzU3RhcnQoKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fY29sbGF0b3JfLmlzQ29udHJhY3Rpb25FbmQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBDRV9DT05UUkFDVElPTl87CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gUnVsZUJhc2VkQ29sbGF0b3IuVUNBXy5tX3RyaWVfLmdldExlYWRWYWx1ZShjaCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChSdWxlQmFzZWRDb2xsYXRvci5pc1NwZWNpYWwocmVzdWx0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJldmlvdXNTcGVjaWFsKFJ1bGVCYXNlZENvbGxhdG9yLlVDQV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgY2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBwcmltYXJ5IG9yZGVyIG9mIHRoZSBzcGVjaWZpZWQgY29sbGF0aW9uIGVsZW1lbnQsIAorICAgICAqIGkuZS4gdGhlIGZpcnN0IDE2IGJpdHMuICBUaGlzIHZhbHVlIGlzIHVuc2lnbmVkLgorICAgICAqIEBwYXJhbSBjZSB0aGUgY29sbGF0aW9uIGVsZW1lbnQKKyAgICAgKiBAcmV0dXJuIHRoZSBlbGVtZW50J3MgMTYgYml0cyBwcmltYXJ5IG9yZGVyLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgcHJpbWFyeU9yZGVyKGludCBjZSkKKyAgICB7CisgICAgICAgIHJldHVybiAoY2UgJiBSdWxlQmFzZWRDb2xsYXRvci5DRV9QUklNQVJZX01BU0tfKSAKKyAgICAgICAgICAgID4+PiBSdWxlQmFzZWRDb2xsYXRvci5DRV9QUklNQVJZX1NISUZUXzsKKyAgICB9CisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBzZWNvbmRhcnkgb3JkZXIgb2YgdGhlIHNwZWNpZmllZCBjb2xsYXRpb24gZWxlbWVudCwKKyAgICAgKiBpLmUuIHRoZSAxNnRoIHRvIDIzdGggYml0cywgaW5jbHVzaXZlLiAgVGhpcyB2YWx1ZSBpcyB1bnNpZ25lZC4KKyAgICAgKiBAcGFyYW0gY2UgdGhlIGNvbGxhdGlvbiBlbGVtZW50CisgICAgICogQHJldHVybiB0aGUgZWxlbWVudCdzIDggYml0cyBzZWNvbmRhcnkgb3JkZXIKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IHNlY29uZGFyeU9yZGVyKGludCBjZSkKKyAgICB7CisgICAgICAgIHJldHVybiAoY2UgJiBSdWxlQmFzZWRDb2xsYXRvci5DRV9TRUNPTkRBUllfTUFTS18pIAorICAgICAgICAgICAgPj4gUnVsZUJhc2VkQ29sbGF0b3IuQ0VfU0VDT05EQVJZX1NISUZUXzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSB0ZXJ0aWFyeSBvcmRlciBvZiB0aGUgc3BlY2lmaWVkIGNvbGxhdGlvbiBlbGVtZW50LCBpLmUuIHRoZSBsYXN0CisgICAgICogOCBiaXRzLiAgVGhpcyB2YWx1ZSBpcyB1bnNpZ25lZC4KKyAgICAgKiBAcGFyYW0gY2UgdGhlIGNvbGxhdGlvbiBlbGVtZW50CisgICAgICogQHJldHVybiB0aGUgZWxlbWVudCdzIDggYml0cyB0ZXJ0aWFyeSBvcmRlcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgdGVydGlhcnlPcmRlcihpbnQgY2UpCisgICAgeworICAgICAgICByZXR1cm4gY2UgJiBSdWxlQmFzZWRDb2xsYXRvci5DRV9URVJUSUFSWV9NQVNLXzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD4gU2V0cyB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIGNvbGxhdGlvbiBlbGVtZW50CisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LiBUaGUKKyAgICAgKiB2YWx1ZSByZXR1cm5lZCBieSB0aGUgbmV4dCBjYWxsIHRvIG5leHQoKSB3aWxsIGJlIHRoZSBjb2xsYXRpb24KKyAgICAgKiBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LjwvcD4KKyAgICAgKgorICAgICAqIDxwPklmIG9mZnNldCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgY29udHJhY3RpbmcgY2hhcmFjdGVyCisgICAgICogc2VxdWVuY2UsIHRoZSBpdGVyYXRvciBpcyBhZGp1c3RlZCB0byB0aGUgc3RhcnQgb2YgdGhlCisgICAgICogY29udHJhY3Rpbmcgc2VxdWVuY2UuIFRoaXMgbWVhbnMgdGhhdCBnZXRPZmZzZXQoKSBpcyBub3QKKyAgICAgKiBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBzZXQgYnkgdGhpcyBtZXRob2QuPC9wPgorICAgICAqCisgICAgICogPHA+SWYgdGhlIGRlY29tcG9zaXRpb24gbW9kZSBpcyBvbiwgYW5kIG9mZnNldCBpcyBpbiB0aGUgbWlkZGxlCisgICAgICogb2YgYSBkZWNvbXBvc2libGUgcmFuZ2Ugb2Ygc291cmNlIHRleHQsIHRoZSBpdGVyYXRvciBtYXkgbm90CisgICAgICogcmV0dXJuIGEgY29ycmVjdCByZXN1bHQgZm9yIHRoZSBuZXh0IGZvcndhcmRzIG9yIGJhY2t3YXJkcworICAgICAqIGl0ZXJhdGlvbi4gIFRoZSB1c2VyIG11c3QgZW5zdXJlIHRoYXQgdGhlIG9mZnNldCBpcyBub3QgaW4gdGhlCisgICAgICogbWlkZGxlIG9mIGEgZGVjb21wb3NpYmxlIHJhbmdlLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIGNoYXJhY3RlciBvZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgc291cmNlIHN0cmluZyB0byAKKyAgICAgKiAgICAgICAgc2V0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYW4gb2Zmc2V0IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgCisgICAgICogICAgICAgIHNlcXVlbmNlIG9mIGNvbGxhdGlvbiBlbGVtZW50cy4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMiAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRPZmZzZXQoaW50IG9mZnNldCkKKyAgICB7ICAKKyAgICAgICAgbV9zb3VyY2VfLnNldEluZGV4KG9mZnNldCk7CisgICAgICAgIGNoYXIgY2ggPSBtX3NvdXJjZV8uY3VycmVudCgpOworICAgICAgICBpZiAobV9jb2xsYXRvcl8uaXNVbnNhZmUoY2gpKSB7CisgICAgICAgICAgICAvLyBpZiBpdCBpcyB1bnNhZmUgd2UgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBwYXJ0IG9mIGEgY29udHJhY3Rpb24KKyAgICAgICAgICAgIC8vIG9yIGEgc3Vycm9nYXRlIGNoYXJhY3RlcgorICAgICAgICAgICAgaWYgKFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoY2gpKSB7CisgICAgICAgICAgICAgICAgLy8gaWYgaXQgaXMgYSBzdXJyb2dhdGUgcGFpciB3ZSBtb3ZlIHVwIG9uZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBjaGFyIHByZXZjaCA9IG1fc291cmNlXy5wcmV2aW91cygpOworICAgICAgICAgICAgICAgIGlmICghVVRGMTYuaXNMZWFkU3Vycm9nYXRlKHByZXZjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VfLnNldEluZGV4KG9mZnNldCk7IC8vIGdvIGJhY2sgdG8gdGhlIHNhbWUgaW5kZXgKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBjb3VsZCBiZSBwYXJ0IG9mIGEgY29udHJhY3Rpb24KKyAgICAgICAgICAgICAgICAvLyBiYWNrdXAgdG8gYSBzYWZlIHBvaW50IGFuZCBpdGVyYXRlIHRpbGwgd2UgcGFzcyBvZmZzZXQKKyAgICAgICAgICAgICAgICB3aGlsZSAobV9zb3VyY2VfLmdldEluZGV4KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsYXRvcl8uaXNVbnNhZmUoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjaCA9IG1fc291cmNlXy5wcmV2aW91cygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKCk7CisgICAgICAgICAgICAgICAgaW50IHByZXZvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChtX3NvdXJjZV8uZ2V0SW5kZXgoKSA8PSBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldm9mZnNldCA9IG1fc291cmNlXy5nZXRJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgfSAgICAgICAKKyAgICAgICAgICAgICAgICBtX3NvdXJjZV8uc2V0SW5kZXgocHJldm9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlSW50ZXJuYWxTdGF0ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPlNldCBhIG5ldyBzb3VyY2Ugc3RyaW5nIGZvciBpdGVyYXRpb24sIGFuZCByZXNldCB0aGUgb2Zmc2V0CisgICAgICogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dC48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gc291cmNlIHRoZSBuZXcgc291cmNlIHN0cmluZyBmb3IgaXRlcmF0aW9uLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRleHQoU3RyaW5nIHNvdXJjZSkKKyAgICB7CisgICAgICAgIG1fc3JjVXRpbEl0ZXJfLnNldFRleHQoc291cmNlKTsgICAKKyAgICAgICAgbV9zb3VyY2VfID0gbV9zcmNVdGlsSXRlcl87CisgICAgICAgIHVwZGF0ZUludGVybmFsU3RhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD5TZXQgYSBuZXcgc291cmNlIHN0cmluZyBpdGVyYXRvciBmb3IgaXRlcmF0aW9uLCBhbmQgcmVzZXQgdGhlIAorICAgICAqIG9mZnNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0LgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRoZSBuZXcgc291cmNlIHN0cmluZyBpdGVyYXRvciBmb3IgaXRlcmF0aW9uLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGV4dChDaGFyYWN0ZXJJdGVyYXRvciBzb3VyY2UpCisgICAgeyAgIAorICAgICAgICBtX3NvdXJjZV8gPSBzb3VyY2U7ICAgICAKKyAgICAgICAgbV9zb3VyY2VfLnNldEluZGV4KG1fc291cmNlXy5nZXRCZWdpbkluZGV4KCkpOworICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKCk7CisgICAgfQorICAgIAorICAgIC8vIHB1YmxpYyBtaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUZXN0cyB0aGF0IGFyZ3VtZW50IG9iamVjdCBpcyBlcXVhbHMgdG8gdGhpcyBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuCisgICAgICogSXRlcmF0b3JzIGFyZSBlcXVhbCBpZiB0aGUgb2JqZWN0cyB1c2VzIHRoZSBzYW1lIFJ1bGVCYXNlZENvbGxhdG9yLAorICAgICAqIHRoZSBzYW1lIHNvdXJjZSB0ZXh0IGFuZCBoYXZlIHRoZSBzYW1lIGN1cnJlbnQgcG9zaXRpb24gaW4gaXRlcmF0aW9uLgorICAgICAqIEBwYXJhbSB0aGF0IG9iamVjdCB0byB0ZXN0IGlmIGl0IGlzIGVxdWFscyB0byB0aGlzIAorICAgICAqICAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCB0aGF0KSAKKyAgICB7CisgICAgICAgIGlmICh0aGF0ID09IHRoaXMpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGF0IGluc3RhbmNlb2YgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKSB7CisgICAgICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgdGhhdGNlaXRlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IpdGhhdDsKKyAgICAgICAgICAgIGlmIChtX2NvbGxhdG9yXy5lcXVhbHModGhhdGNlaXRlci5tX2NvbGxhdG9yXykgCisgICAgICAgICAgICAgICAgJiYgbV9zb3VyY2VfLmVxdWFscyh0aGF0Y2VpdGVyLm1fc291cmNlXykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgIC8qKgorICAgICAqIDxwPkNvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBjb25zdHJ1Y3Rvci4gVGhpcyB0YWtlcyBhIHNvdXJjZQorICAgICAqIHN0cmluZyBhbmQgYSBSdWxlQmFzZWRDb2xsYXRvci4gVGhlIGl0ZXJhdG9yIHdpbGwgd2FsayB0aHJvdWdoCisgICAgICogdGhlIHNvdXJjZSBzdHJpbmcgYmFzZWQgb24gdGhlIHJ1bGVzIGRlZmluZWQgYnkgdGhlCisgICAgICogY29sbGF0b3IuIElmIHRoZSBzb3VyY2Ugc3RyaW5nIGlzIGVtcHR5LCBOVUxMT1JERVIgd2lsbCBiZQorICAgICAqIHJldHVybmVkIG9uIHRoZSBmaXJzdCBjYWxsIHRvIG5leHQoKS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gc291cmNlIHRoZSBzb3VyY2Ugc3RyaW5nLgorICAgICAqIEBwYXJhbSBjb2xsYXRvciB0aGUgUnVsZUJhc2VkQ29sbGF0b3IKKyAgICAgKiBAZHJhZnQgSUNVIDIuMiAKKyAgICAgKi8KKyAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoU3RyaW5nIHNvdXJjZSwgUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IpIAorICAgIHsKKyAgICAgICAgbV9zcmNVdGlsSXRlcl8gPSBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3Ioc291cmNlKTsKKyAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgbV9zb3VyY2VfID0gbV9zcmNVdGlsSXRlcl87CisgICAgICAgIG1fY29sbGF0b3JfID0gY29sbGF0b3I7CisgICAgICAgIG1fQ0VCdWZmZXJfID0gbmV3IGludFtDRV9CVUZGRVJfSU5JVF9TSVpFX107CisgICAgICAgIG1fYnVmZmVyXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgbV91dGlsU3BlY2lhbEJhY2tVcF8gPSBuZXcgQmFja3VwKCk7CisgICAgICAgIHVwZGF0ZUludGVybmFsU3RhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD5Db2xsYXRpb25FbGVtZW50SXRlcmF0b3IgY29uc3RydWN0b3IuIFRoaXMgdGFrZXMgYSBzb3VyY2UKKyAgICAgKiBjaGFyYWN0ZXIgaXRlcmF0b3IgYW5kIGEgUnVsZUJhc2VkQ29sbGF0b3IuIFRoZSBpdGVyYXRvciB3aWxsCisgICAgICogd2FsayB0aHJvdWdoIHRoZSBzb3VyY2Ugc3RyaW5nIGJhc2VkIG9uIHRoZSBydWxlcyBkZWZpbmVkIGJ5CisgICAgICogdGhlIGNvbGxhdG9yLiBJZiB0aGUgc291cmNlIHN0cmluZyBpcyBlbXB0eSwgTlVMTE9SREVSIHdpbGwgYmUKKyAgICAgKiByZXR1cm5lZCBvbiB0aGUgZmlyc3QgY2FsbCB0byBuZXh0KCkuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgc291cmNlIHN0cmluZyBpdGVyYXRvci4KKyAgICAgKiBAcGFyYW0gY29sbGF0b3IgdGhlIFJ1bGVCYXNlZENvbGxhdG9yCisgICAgICogQGRyYWZ0IElDVSAyLjIgCisgICAgICovCisgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKENoYXJhY3Rlckl0ZXJhdG9yIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yKSAKKyAgICB7CisgICAgICAgIG1fc3JjVXRpbEl0ZXJfID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKCIiKTsKKyAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgbV9zb3VyY2VfID0gc291cmNlOworICAgICAgICBtX2NvbGxhdG9yXyA9IGNvbGxhdG9yOworICAgICAgICBtX0NFQnVmZmVyXyA9IG5ldyBpbnRbQ0VfQlVGRkVSX0lOSVRfU0laRV9dOworICAgICAgICBtX2J1ZmZlcl8gPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIG1fdXRpbFNwZWNpYWxCYWNrVXBfID0gbmV3IEJhY2t1cCgpOworICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKCk7CisgICAgfQorICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogdHJ1ZSBpZiBjdXJyZW50IGNvZGVwb2ludCB3YXMgSGlyYWdhbmEKKyAgICAgKi8KKyAgICBib29sZWFuIG1faXNDb2RlUG9pbnRIaXJhZ2FuYV87CisgICAgLyoqCisgICAgICogUG9zaXRpb24gaW4gdGhlIG9yaWdpbmFsIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoIGEgbm9uLUZDRCBzZXF1ZW5jZQorICAgICAqLworICAgIGludCBtX0ZDRFN0YXJ0XzsKKyAgICAvKiogCisgICAgICogVGhpcyBpcyB0aGUgQ0UgZnJvbSBDRXMgYnVmZmVyIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLiAKKyAgICAgKiBJbml0aWFsIHZhbHVlIGlzIDAuCisgICAgICogRm9yd2FyZHMgaXRlcmF0aW9uIHdpbGwgZW5kIHdpdGggbV9DRUJ1ZmZlck9mZnNldF8gPT0gbV9DRUJ1ZmZlclNpemVfLAorICAgICAqIGJhY2t3YXJkcyB3aWxsIGVuZCB3aXRoIG1fQ0VCdWZmZXJPZmZzZXRfID09IDAuCisgICAgICogVGhlIG5leHQvcHJldmlvdXMgYWZ0ZXIgd2UgcmVhY2ggdGhlIGVuZC9iZWdpbm5pbmcgb2YgdGhlIG1fQ0VCdWZmZXJfCisgICAgICogd2lsbCBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIHJlc2V0IHRvIDAuCisgICAgICovCisgICAgaW50IG1fQ0VCdWZmZXJPZmZzZXRfOworCisgICAgLyoqIAorICAgICAqIFRoaXMgaXMgdGhlIHBvc2l0aW9uIHRvIHdoaWNoIHdlIGhhdmUgc3RvcmVkIHByb2Nlc3NlZCBDRXMuCisgICAgICogSW5pdGlhbCB2YWx1ZSBpcyAwLgorICAgICAqIFRoZSBuZXh0L3ByZXZpb3VzIGFmdGVyIHdlIHJlYWNoIHRoZSBlbmQvYmVnaW5uaW5nIG9mIHRoZSBtX0NFQnVmZmVyXworICAgICAqIHdpbGwgY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSByZXNldCB0byAwLgorICAgICAqLworICAgIGludCBtX0NFQnVmZmVyU2l6ZV87IAorICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjb2xsYXRvciB1c2VkLgorICAgICAqIEludGVybmFsIHVzZSwgYWxsIGRhdGEgbWVtYmVycyB3aWxsIGJlIHJlc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlcworICAgICAqIEBwYXJhbSBjb2xsYXRvciB0byBzZXQKKyAgICAgKi8KKyAgICB2b2lkIHNldENvbGxhdG9yKFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yKSAKKyAgICB7CisgICAgICAgIG1fY29sbGF0b3JfID0gY29sbGF0b3I7CisgICAgICAgIHVwZGF0ZUludGVybmFsU3RhdGUoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogPHA+U2V0cyB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIGNvbGxhdGlvbiBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8KKyAgICAgKiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciAodGhlIHBhcmFtZXRlciBpcyBhIENIQVJBQ1RFUiBvZmZzZXQgaW4gdGhlCisgICAgICogb3JpZ2luYWwgc3RyaW5nLCBub3QgYW4gb2Zmc2V0IGludG8gaXRzIGNvcnJlc3BvbmRpbmcgc2VxdWVuY2Ugb2YKKyAgICAgKiBjb2xsYXRpb24gZWxlbWVudHMpLiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIG5leHQgY2FsbCB0byBuZXh0KCkKKyAgICAgKiB3aWxsIGJlIHRoZSBjb2xsYXRpb24gZWxlbWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24KKyAgICAgKiBpbiB0aGUgdGV4dC4gVW5saWtlIHRoZSBwdWJsaWMgbWV0aG9kIHNldE9mZnNldChpbnQpLCB0aGlzIG1ldGhvZCBkb2VzIAorICAgICAqIG5vdCB0cnkgdG8gcmVhZGp1c3QgdGhlIG9mZnNldCB0byB0aGUgc3RhcnQgb2YgYSBjb250cmFjdGluZyBzZXF1ZW5jZS4KKyAgICAgKiBnZXRPZmZzZXQoKSBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBhcyB3YXMgcGFzc2VkIHRvIGEgCisgICAgICogcHJlY2VkaW5nIGNhbGwgdG8gc2V0T2Zmc2V0KCkuPC9wPgorICAgICAqIEBwYXJhbSBvZmZzZXQgbmV3IGNoYXJhY3RlciBvZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgdGV4dCB0byBzZXQuIAorICAgICAqLworICAgIHZvaWQgc2V0RXhhY3RPZmZzZXQoaW50IG9mZnNldCkKKyAgICB7ICAKKyAgICAgICAgbV9zb3VyY2VfLnNldEluZGV4KG9mZnNldCk7CisgICAgICAgIHVwZGF0ZUludGVybmFsU3RhdGUoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGl0ZXJhdG9yIGlzIGluIHRoZSBidWZmZXIgem9uZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBpdGVyYXRvciBpcyBpbiBidWZmZXIgem9uZSwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgYm9vbGVhbiBpc0luQnVmZmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlck9mZnNldF8gPiAwOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmUgaWYgYSBjaGFyYWN0ZXIgaXMgYSBUaGFpIHZvd2VsLCB3aGljaCBzb3J0cyBhZnRlciBpdHMgYmFzZSAKKyAgICAgKiBjb25zb25hbnQuCisgICAgICogQHBhcmFtIGNoIGNoYXJhY3RlciB0byB0ZXN0CisgICAgICogQHJldHVybiB0cnVlIGlmIGNoIGlzIGEgVGhhaSBwcmV2b3dlbCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNUaGFpUHJlVm93ZWwoY2hhciBjaCkKKyAgICB7IAorICAgICAgICByZXR1cm4gKGNoID49IDB4ZTQwICYmIGNoIDw9IDB4ZTQ0KSB8fCAoY2ggPj0gMHhlYzAgJiYgY2ggPD0gMHhlYzQpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD5TZXRzIHRoZSBpdGVyYXRvciB0byBwb2ludCB0byB0aGUgY29sbGF0aW9uIGVsZW1lbnQgY29ycmVzcG9uZGluZyB0bworICAgICAqIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyICh0aGUgcGFyYW1ldGVyIGlzIGEgQ0hBUkFDVEVSIG9mZnNldCBpbiB0aGUKKyAgICAgKiBvcmlnaW5hbCBzdHJpbmcsIG5vdCBhbiBvZmZzZXQgaW50byBpdHMgY29ycmVzcG9uZGluZyBzZXF1ZW5jZSBvZgorICAgICAqIGNvbGxhdGlvbiBlbGVtZW50cykuIFRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgbmV4dCBjYWxsIHRvIG5leHQoKQorICAgICAqIHdpbGwgYmUgdGhlIGNvbGxhdGlvbiBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbgorICAgICAqIGluIHRoZSB0ZXh0LiBVbmxpa2UgdGhlIHB1YmxpYyBtZXRob2Qgc2V0T2Zmc2V0KGludCksIHRoaXMgbWV0aG9kIGRvZXMgCisgICAgICogbm90IHRyeSB0byByZWFkanVzdCB0aGUgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiBhIGNvbnRyYWN0aW5nIHNlcXVlbmNlLgorICAgICAqIGdldE9mZnNldCgpIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHdhcyBwYXNzZWQgdG8gYSAKKyAgICAgKiBwcmVjZWRpbmcgY2FsbCB0byBzZXRPZmZzZXQoKS48L3A+CisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIG5ldyBzb3VyY2Ugc3RyaW5nIGl0ZXJhdG9yIGZvciBpdGVyYXRpb24uCisgICAgICogQHBhcmFtIG9mZnNldCB0byB0aGUgc291cmNlCisgICAgICovCisgICAgdm9pZCBzZXRUZXh0KENoYXJhY3Rlckl0ZXJhdG9yIHNvdXJjZSwgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIG1fc291cmNlXyA9IHNvdXJjZTsgICAgIAorICAgICAgICBtX3NvdXJjZV8uc2V0SW5kZXgob2Zmc2V0KTsKKyAgICAgICAgdXBkYXRlSW50ZXJuYWxTdGF0ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGlubmVyIGNsYXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogQmFja3VwIGRhdGEgY2xhc3MKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBCYWNrdXAKKyAgICB7CisgICAgICAgIC8vIHByb3RlY3RlZCBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJhY2t1cCBub24gRkNEIHNlcXVlbmNlIGxpbWl0CisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgaW50IG1fRkNETGltaXRfOworICAgICAgICAvKioKKyAgICAgICAgICogQmFja3VwIG5vbiBGQ0Qgc2VxdWVuY2Ugc3RhcnQKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBpbnQgbV9GQ0RTdGFydF87CisgICAgICAgIC8qKgorICAgICAgICAgKiBCYWNrdXAgaWYgcHJldmlvdXMgQ29kZXBvaW50IGlzIEhpcmFnYW5hIHF1YXRlbmFyeQorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gbV9pc0NvZGVQb2ludEhpcmFnYW5hXzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJhY2t1cCBidWZmZXIgcG9zaXRpb24gCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgaW50IG1fYnVmZmVyT2Zmc2V0XzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJhY2t1cCBzb3VyY2UgaXRlcmF0b3Igb2Zmc2V0CisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgaW50IG1fb2Zmc2V0XzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJhY2t1cCBidWZmZXIgY29udGVudHMKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBTdHJpbmdCdWZmZXIgbV9idWZmZXJfOworICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBwcm90ZWN0ZWQgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVtcHR5IGNvbnN0cnVjdG9yCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgQmFja3VwKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXJfID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICB9CisgICAgfQorICAgIC8vIGVuZCBpbm5lciBjbGFzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBEaXJlY3Rpb24gb2YgdHJhdmVsCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1faXNGb3J3YXJkc187CisgICAgLyoqCisgICAgICogU291cmNlIHN0cmluZyBpdGVyYXRvcgorICAgICAqLworICAgIHByaXZhdGUgQ2hhcmFjdGVySXRlcmF0b3IgbV9zb3VyY2VfOworICAgIC8qKiAKKyAgICAgKiBUaGlzIGlzIHBvc2l0aW9uIHRvIHRoZSBtX2J1ZmZlcl8sIC0xIGlmIGl0ZXJhdG9yIGlzIG5vdCBpbiBtX2J1ZmZlcl8KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX2J1ZmZlck9mZnNldF87CisgICAgLyoqCisgICAgICogQnVmZmVyIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiBub3JtYWxpemVkIGNoYXJhY3RlcnMsIGRpc2NvbnRpZ3VvdXMKKyAgICAgKiBjaGFyYWN0ZXJzIGFuZCBUaGFpIGNoYXJhY3RlcnMKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtX2J1ZmZlcl87CisgICAgLyoqIAorICAgICAqIFBvc2l0aW9uIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcgdG8gY29udGludWUgZm9yd2FyZCBGQ0QgY2hlY2sgZnJvbS4gCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9GQ0RMaW1pdF87IAorICAgIC8qKgorICAgICAqIFRoZSBjb2xsYXRvciB0aGlzIGl0ZXJhdG9yIGlzIGJhc2VkIG9uCisgICAgICovIAorICAgIHByaXZhdGUgUnVsZUJhc2VkQ29sbGF0b3IgbV9jb2xsYXRvcl87CisgICAgLyoqCisgICAgICogdHJ1ZSBpZiBIaXJhZ2FuYSBxdWF0ZW5hcnkgaXMgb24KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbV9pc0hpcmFnYW5hNF87CisgICAgLyoqCisgICAgICogQ0UgYnVmZmVyCisgICAgICovIAorICAgIHByaXZhdGUgaW50IG1fQ0VCdWZmZXJfW107IAorICAgIC8qKiAKKyAgICAgKiBJbiByZWFsaXR5IHdlIHNob3VsZCBub3QgaGF2ZSB0byBkZWFsIHdpdGggZXhwYW5zaW9uIHNlcXVlbmNlcyBsb25nZXIgCisgICAgICogdGhlbiAxNi4gSG93ZXZlciB0aGlzIHZhbHVlIGNhbiBiZSBjaGFuZ2UgaWYgYSBiaWdnZXIgYnVmZmVyIGlzIG5lZWRlZC4KKyAgICAgKiBOb3RlLCBpZiB0aGUgc2l6ZSBpcyBjaGFuZ2UgdG8gdG9vIHNtYWxsIGEgbnVtYmVyLCBCSUcgdHJvdWJsZS4KKyAgICAgKiBSZWFzb25hYmxlIHNtYWxsIHZhbHVlIGlzIGFyb3VuZCAxMCwgaWYgdGhlcmUncyBubyBBcmFiaWMgb3Igb3RoZXIgCisgICAgICogZnVua3kgY29sbGF0aW9ucyB0aGF0IGhhdmUgbG9uZyBleHBhbnNpb24gc2VxdWVuY2UuIFRoaXMgaXMgdGhlIGxvbmdlc3QgCisgICAgICogZXhwYW5zaW9uIHNlcXVlbmNlIHRoaXMgY2FuIGhhbmRsZSB3aXRob3V0IGJvbWJpbmcgb3V0LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDRV9CVUZGRVJfSU5JVF9TSVpFXyA9IDUxMjsKKyAgICAvKioKKyAgICAgKiBCYWNrdXAgc3RvcmFnZSBmb3Igc3BlY2lhbCBwcm9jZXNzaW5nIGlubmVyIGNhc2VzCisgICAgICovCisgICAgcHJpdmF0ZSBCYWNrdXAgbV91dGlsU3BlY2lhbEJhY2tVcF87CisgICAgLyoqCisgICAgICogQmFja3VwIHN0b3JhZ2UgaW4gc3BlY2lhbCBwcm9jZXNzaW5nIGVudHJ5IHN0YXRlCisgICAgICovCisgICAgcHJpdmF0ZSBCYWNrdXAgbV91dGlsU3BlY2lhbEVudHJ5QmFja1VwXzsKKyAgICAvKioKKyAgICAgKiBCYWNrdXAgc3RvcmFnZSBpbiBzcGVjaWFsIHByb2Nlc3NpbmcgZGlzY29udGlndW91cyBzdGF0ZQorICAgICAqLworICAgIHByaXZhdGUgQmFja3VwIG1fdXRpbFNwZWNpYWxEaXNjb250aWd1b3VzQmFja1VwXzsKKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgbV9zcmNVdGlsSXRlcl87CisgICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbV91dGlsU3RyaW5nQnVmZmVyXzsKKyAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtX3V0aWxTa2lwcGVkQnVmZmVyXzsKKyAgICBwcml2YXRlIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBtX3V0aWxDb2xFSXRlcl87CisgICAgLyoqCisgICAgICogT25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIGZpcnN0IG5vbi16ZXJvIGNvbWJpbmluZyBjbGFzcyBjaGFyYWN0ZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRlVMTF9aRVJPX0NPTUJJTklOR19DTEFTU19GQVNUX0xJTUlUXyA9IDB4QzA7CisgICAgLyoqCisgICAgICogT25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciB3aXRoIGxlYWRpbmcgbm9uLXplcm8gY29tYmluaW5nIAorICAgICAqIGNsYXNzIAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMRUFEX1pFUk9fQ09NQklOSU5HX0NMQVNTX0ZBU1RfTElNSVRfID0gMHgzMDA7CisgICAgLyoqCisgICAgICogTWFzayBmb3IgdGhlIGxhc3QgYnl0ZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVNUX0JZVEVfTUFTS18gPSAweEZGOworICAgIC8qKgorICAgICAqIFNoaWZ0IHZhbHVlIGZvciB0aGUgc2Vjb25kIGxhc3QgYnl0ZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRUNPTkRfTEFTVF9CWVRFX1NISUZUXyA9IDg7CisKKyAgICAvLyBzcGVjaWFsIGNlIHZhbHVlcyBhbmQgdGFncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLypwcml2YXRlKi8gc3RhdGljIGZpbmFsIGludCBDRV9OT1RfRk9VTkRfID0gMHhGMDAwMDAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfRVhQQU5TSU9OXyA9IDB4RjEwMDAwMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0NPTlRSQUNUSU9OXyA9IDB4RjIwMDAwMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX1RIQUlfID0gMHhGMzAwMDAwMDsKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhlIGxhc3QgY2UgaGFzIGJlZW4gY29uc3VtZWQuIENvbXBhcmUgd2l0aCBOVUxMT1JERVIuIAorICAgICAqIE5VTExPUkRFUiBpcyByZXR1cm5lZCBpZiBlcnJvciBvY2N1cnMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX05PX01PUkVfQ0VTXyA9IDB4MDAwMTAxMDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX05PX01PUkVfQ0VTX1BSSU1BUllfID0gMHgwMDAxMDAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfTk9fTU9SRV9DRVNfU0VDT05EQVJZXyA9IDB4MDAwMDAxMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX05PX01PUkVfQ0VTX1RFUlRJQVJZXyA9IDB4MDAwMDAwMDE7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfTk9UX0ZPVU5EX1RBR18gPSAwOworICAgIC8qcHJpdmF0ZSovIHN0YXRpYyBmaW5hbCBpbnQgQ0VfRVhQQU5TSU9OX1RBR18gPSAxOyAgICAgICAKKyAgICAvKnByaXZhdGUqLyBzdGF0aWMgZmluYWwgaW50IENFX0NPTlRSQUNUSU9OX1RBR18gPSAyOyAgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX1RIQUlfVEFHXyA9IDM7CisgICAgLyoqIAorICAgICAqIENoYXJzZXQgcHJvY2Vzc2luZywgbm90IHlldCBpbXBsZW1lbnRlZCAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfQ0hBUlNFVF9UQUdfID0gNDsgICAgICAgICAKKyAgICAvKiogCisgICAgICogQUMwMC1EN0FGCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0hBTkdVTF9TWUxMQUJMRV9UQUdfID0gNjsKKyAgICAvKioKKyAgICAgKiBEODAwLURCRkYKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfTEVBRF9TVVJST0dBVEVfVEFHXyA9IDc7ICAKKyAgICAvKiogCisgICAgICogREMwMC1ERkZGCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX1RSQUlMX1NVUlJPR0FURV9UQUdfID0gODsgCisgICAgLyoqIAorICAgICAqIDB4MzQwMC0weDREQjUsIDB4NEUwMC0weDlGQTUsIDB4RjkwMC0weEZBMkQKKyAgICAgKi8gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0NKS19JTVBMSUNJVF9UQUdfID0gOTsgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0lNUExJQ0lUX1RBR18gPSAxMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfU1BFQ19QUk9DX1RBR18gPSAxMTsKKyAgICAvKiogCisgICAgICogVGhpcyBpcyBhIDMgYnl0ZSBwcmltYXJ5IHdpdGggc3RhcnRpbmcgc2Vjb25kYXJpZXMgYW5kIHRlcnRpYXJpZXMuCisgICAgICogSXQgZml0cyBpbiBhIHNpbmdsZSAzMiBiaXQgQ0UgYW5kIGlzIHVzZWQgaW5zdGVhZCBvZiBleHBhbnNpb24gdG8gc2F2ZQorICAgICAqIHNwYWNlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBwZXJmb3JtYW5jZSAoaG9wZWZ1bGx5KS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfTE9OR19QUklNQVJZX1RBR18gPSAxMjsgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0NFX1RBR1NfQ09VTlQgPSAxMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfQllURV9DT01NT05fID0gMHgwNTsKKyAgICAgICAgCisgICAgLy8gZW5kIHNwZWNpYWwgY2UgdmFsdWVzIGFuZCB0YWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFOR1VMX1NCQVNFXyA9IDB4QUMwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFOR1VMX0xCQVNFXyA9IDB4MTEwMDsgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBTkdVTF9WQkFTRV8gPSAweDExNjE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBTkdVTF9UQkFTRV8gPSAweDExQTc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBTkdVTF9WQ09VTlRfID0gMjE7IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIQU5HVUxfVENPVU5UXyA9IDI4OyAgICAKKyAgICAKKyAgICAvLyBDSksgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19CQVNFXyA9IDB4NEUwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0xJTUlUXyA9IDB4OUZGRisxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfQ09NUEFUX1VTRURfQkFTRV8gPSAweEZBMEU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENKS19DT01QQVRfVVNFRF9MSU1JVF8gPSAweEZBMkYgKyAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfQV9CQVNFXyA9IDB4MzQwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0FfTElNSVRfID0gMHg0REJGICsgMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0pLX0JfQkFTRV8gPSAweDIwMDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSktfQl9MSU1JVF8gPSAweDJBNkRGICsgMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9OX0NKS19PRkZTRVRfID0gMHgxMTAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmVzZXQgdGhlIGl0ZXJhdG9yIGludGVybmFsbHkKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlSW50ZXJuYWxTdGF0ZSgpCisgICAgeworICAgICAgICBtX2lzQ29kZVBvaW50SGlyYWdhbmFfID0gZmFsc2U7CisgICAgICAgIG1fYnVmZmVyXy5zZXRMZW5ndGgoMCk7CisgICAgICAgIG1fYnVmZmVyT2Zmc2V0XyA9IC0xOyAKKyAgICAgICAgbV9DRUJ1ZmZlck9mZnNldF8gPSAwOworICAgICAgICBtX0NFQnVmZmVyU2l6ZV8gPSAwOyAKKyAgICAgICAgbV9GQ0RMaW1pdF8gPSAtMTsKKyAgICAgICAgbV9GQ0RTdGFydF8gPSBtX3NvdXJjZV8uZ2V0RW5kSW5kZXgoKTsKKyAgICAgICAgbV9pc0hpcmFnYW5hNF8gPSBtX2NvbGxhdG9yXy5tX2lzSGlyYWdhbmE0XzsKKyAgICAgICAgbV9pc0ZvcndhcmRzXyA9IHRydWU7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBCYWNrdXAgdGhlIGN1cnJlbnQgaW50ZXJuYWwgc3RhdGUKKyAgICAgKiBAcGFyYW0gYmFja3VwIG9iamVjdCB0byBzdG9yZSB0aGUgZGF0YQorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBiYWNrdXBJbnRlcm5hbFN0YXRlKEJhY2t1cCBiYWNrdXApCisgICAgeworICAgICAgICBiYWNrdXAubV9vZmZzZXRfID0gbV9zb3VyY2VfLmdldEluZGV4KCk7CisgICAgICAgIGJhY2t1cC5tX0ZDRExpbWl0XyA9IG1fRkNETGltaXRfOworICAgICAgICBiYWNrdXAubV9GQ0RTdGFydF8gPSBtX0ZDRFN0YXJ0XzsKKyAgICAgICAgYmFja3VwLm1faXNDb2RlUG9pbnRIaXJhZ2FuYV8gPSBtX2lzQ29kZVBvaW50SGlyYWdhbmFfOworICAgICAgICBiYWNrdXAubV9idWZmZXJPZmZzZXRfID0gbV9idWZmZXJPZmZzZXRfOworICAgICAgICBiYWNrdXAubV9idWZmZXJfLnNldExlbmd0aCgwKTsKKyAgICAgICAgaWYgKG1fYnVmZmVyT2Zmc2V0XyA+PSAwKSB7CisgICAgICAgICAgICAvLyBqZGsgMS4zLjEgZG9lcyBub3QgaGF2ZSBhcHBlbmQoU3RyaW5nQnVmZmVyKSB5ZXQKKyAgICAgICAgICAgIGlmKElDVURlYnVnLmlzSkRLMTRPckhpZ2hlcil7CisgICAgICAgICAgICAgICAgYmFja3VwLm1fYnVmZmVyXy5hcHBlbmQobV9idWZmZXJfKTsKKyAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgIGJhY2t1cC5tX2J1ZmZlcl8uYXBwZW5kKG1fYnVmZmVyXy50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGl0ZXJhdG9yIGludGVybmFsbHkgd2l0aCBiYWNrZWQtdXAgc3RhdGUKKyAgICAgKiBAcGFyYW0gYmFja3VwIG9iamVjdCB0aGF0IHN0b3JlZCB0aGUgZGF0YQorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVJbnRlcm5hbFN0YXRlKEJhY2t1cCBiYWNrdXApCisgICAgeworICAgICAgICBtX3NvdXJjZV8uc2V0SW5kZXgoYmFja3VwLm1fb2Zmc2V0Xyk7CisgICAgICAgIG1faXNDb2RlUG9pbnRIaXJhZ2FuYV8gPSBiYWNrdXAubV9pc0NvZGVQb2ludEhpcmFnYW5hXzsKKyAgICAgICAgbV9idWZmZXJPZmZzZXRfID0gYmFja3VwLm1fYnVmZmVyT2Zmc2V0XzsKKyAgICAgICAgbV9GQ0RMaW1pdF8gPSBiYWNrdXAubV9GQ0RMaW1pdF87CisgICAgICAgIG1fRkNEU3RhcnRfID0gYmFja3VwLm1fRkNEU3RhcnRfOworICAgICAgICBtX2J1ZmZlcl8uc2V0TGVuZ3RoKDApOworICAgICAgICBpZiAobV9idWZmZXJPZmZzZXRfID49IDApIHsKKyAgICAgICAgICAgIC8vIGpkayAxLjMuMSBkb2VzIG5vdCBoYXZlIGFwcGVuZChTdHJpbmdCdWZmZXIpIHlldAorICAgICAgICAgICAgbV9idWZmZXJfLmFwcGVuZChiYWNrdXAubV9idWZmZXJfLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBBIGZhc3QgY29tYmluaW5nIGNsYXNzIHJldHJpZXZhbCBzeXN0ZW0uCisgICAgICogQHBhcmFtIGNoIFVURjE2IGNoYXJhY3RlcgorICAgICAqIEByZXR1cm4gY29tYmluaW5nIGNsYXNzIG9mIGNoCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0Q29tYmluaW5nQ2xhc3MoY2hhciBjaCkgCisgICAgeworICAgICAgICBpZiAoY2ggPj0gTEVBRF9aRVJPX0NPTUJJTklOR19DTEFTU19GQVNUX0xJTUlUXyAmJiAKKyAgICAgICAgICAgIG1fY29sbGF0b3JfLmlzVW5zYWZlKGNoKSkgeworICAgICAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZXJJbXBsLmdldENvbWJpbmluZ0NsYXNzKGNoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIDxwPkluY3JlbWVudGFsIG5vcm1hbGl6YXRpb24sIHRoaXMgaXMgYW4gZXNzZW50aWFsIG9wdGltaXphdGlvbi4KKyAgICAgKiBBc3N1bWluZyBGQ0QgY2hlY2tzIGhhcyBiZWVuIGRvbmUsIG5vcm1hbGl6ZSB0aGUgbm9uLUZDRCBjaGFyYWN0ZXJzIGludG8gCisgICAgICogdGhlIGJ1ZmZlci4KKyAgICAgKiBTb3VyY2Ugb2Zmc2V0cyBwb2ludHMgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzc2luZyBjaGFyYWN0ZXIuCisgICAgICogPC9wPgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBub3JtYWxpemUoKSAKKyAgICB7CisgICAgICAgIGludCBzaXplID0gbV9GQ0RMaW1pdF8gLSBtX0ZDRFN0YXJ0XzsKKyAgICAgICAgbV9idWZmZXJfLnNldExlbmd0aCgwKTsKKyAgICAgICAgbV9zb3VyY2VfLnNldEluZGV4KG1fRkNEU3RhcnRfKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICBtX2J1ZmZlcl8uYXBwZW5kKG1fc291cmNlXy5jdXJyZW50KCkpOworICAgICAgICAgICAgbV9zb3VyY2VfLm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZGVjb21wID0gTm9ybWFsaXplci5kZWNvbXBvc2UobV9idWZmZXJfLnRvU3RyaW5nKCksIGZhbHNlKTsKKyAgICAgICAgbV9idWZmZXJfLnNldExlbmd0aCgwKTsKKyAgICAgICAgbV9idWZmZXJfLmFwcGVuZChkZWNvbXApOworICAgICAgICBtX2J1ZmZlck9mZnNldF8gPSAwOworICAgIH0KKyAgICAgICAgCisgICAgLyoqIAorICAgICAqIDxwPkluY3JlbWVudGFsIEZDRCBjaGVjayBhbmQgbm9ybWFsaXphdGlvbi4gR2V0cyB0aGUgbmV4dCBiYXNlIGNoYXJhY3RlcgorICAgICAqIHBvc2l0aW9uIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSBpbi1iZXR3ZWVuIGNoYXJhY3RlcnMgbmVlZHMgbm9ybWFsaXphdGlvbi4KKyAgICAgKiA8L3A+IAorICAgICAqIDxwPldoZW4gZW50ZXJpbmcsIHRoZSBzdGF0ZSBpcyBrbm93biB0byBiZSB0aGlzOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+V2UgYXJlIHdvcmtpbmcgb24gc291cmNlIHN0cmluZywgbm90IHRoZSBidWZmZXIuCisgICAgICogPGxpPlRoZSBsZWFkaW5nIGNvbWJpbmluZyBjbGFzcyBmcm9tIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyAwIG9yIHRoZSAKKyAgICAgKiAgICAgdHJhaWxpbmcgY29tYmluaW5nIGNsYXNzIG9mIHRoZSBwcmV2aW91cyBjaGFyIHdhcyB6ZXJvLgorICAgICAqIDwvdWw+CisgICAgICogSW5jb21pbmcgc291cmNlIG9mZnNldHMgcG9pbnRzIHRvIHRoZSBjdXJyZW50IHByb2Nlc3NpbmcgY2hhcmFjdGVyLgorICAgICAqIFJldHVybiBzb3VyY2Ugb2Zmc2V0cyBwb2ludHMgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzc2luZyBjaGFyYWN0ZXIuCisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBjaCBjdXJyZW50IGNoYXJhY3RlcgorICAgICAqIEBwYXJhbSBvZmZzZXQgY3VycmVudCBjaGFyYWN0ZXIgb2Zmc2V0CisgICAgICogQHJldHVybiB0cnVlIGlmIEZDRENoZWNrIHBhc3NlcywgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIEZDRENoZWNrKGNoYXIgY2gsIGludCBvZmZzZXQpIAorICAgIHsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOworCisgICAgICAgIC8vIEdldCB0aGUgdHJhaWxpbmcgY29tYmluaW5nIGNsYXNzIG9mIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4gIAorICAgICAgICAvLyBJZiBpdCdzIHplcm8sIHdlIGFyZSBPSy4KKyAgICAgICAgbV9GQ0RTdGFydF8gPSBvZmZzZXQ7CisgICAgICAgIG1fc291cmNlXy5zZXRJbmRleChvZmZzZXQpOworICAgICAgICAvLyB0cmllIGFjY2VzcworICAgICAgICBjaGFyIGZjZCA9IE5vcm1hbGl6ZXJJbXBsLmdldEZDRDE2KGNoKTsKKyAgICAgICAgaWYgKGZjZCAhPSAwICYmIFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShjaCkpIHsKKyAgICAgICAgICAgIGNoID0gbV9zb3VyY2VfLm5leHQoKTsgLy8gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSBoYXMgMCBmY2QKKyAgICAgICAgICAgIGlmIChVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgICAgIGZjZCA9IE5vcm1hbGl6ZXJJbXBsLmdldEZDRDE2RnJvbVN1cnJvZ2F0ZVBhaXIoZmNkLCBjaCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZjZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQgcHJldlRyYWlsQ0MgPSBmY2QgJiBMQVNUX0JZVEVfTUFTS187CisKKyAgICAgICAgaWYgKHByZXZUcmFpbENDICE9IDApIHsKKyAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGNoYXIgaGFzIGEgbm9uLXplcm8gdHJhaWxpbmcgQ0MuIFNjYW4gZm9yd2FyZCB1bnRpbCAKKyAgICAgICAgICAgIC8vIHdlIGZpbmQgYSBjaGFyIHdpdGggYSBsZWFkaW5nIGNjIG9mIHplcm8uCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIGNoID0gbV9zb3VyY2VfLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gdHJpZSBhY2Nlc3MKKyAgICAgICAgICAgICAgICBmY2QgPSBOb3JtYWxpemVySW1wbC5nZXRGQ0QxNihjaCk7CisgICAgICAgICAgICAgICAgaWYgKGZjZCAhPSAwICYmIFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBtX3NvdXJjZV8ubmV4dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjZCA9IE5vcm1hbGl6ZXJJbXBsLmdldEZDRDE2RnJvbVN1cnJvZ2F0ZVBhaXIoZmNkLCBjaCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmY2QgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBsZWFkQ0MgPSBmY2QgPj4+IFNFQ09ORF9MQVNUX0JZVEVfU0hJRlRfOworICAgICAgICAgICAgICAgIGlmIChsZWFkQ0MgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgYmFzZSBjaGFyYWN0ZXIsIHdlIHN0b3AgdGhlIEZDRCBjaGVja3MKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxlYWRDQyA8IHByZXZUcmFpbENDKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHByZXZUcmFpbENDID0gZmNkICYgTEFTVF9CWVRFX01BU0tfOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fRkNETGltaXRfID0gbV9zb3VyY2VfLmdldEluZGV4KCk7CisgICAgICAgIG1fc291cmNlXy5zZXRJbmRleChtX0ZDRFN0YXJ0Xyk7CisgICAgICAgIG1fc291cmNlXy5uZXh0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICAvKiogCisgICAgICogPHA+TWV0aG9kIHRyaWVzIHRvIGZldGNoIHRoZSBuZXh0IGNoYXJhY3RlciB0aGF0IGlzIGluIGZjZCBmb3JtLjwvcD4KKyAgICAgKiA8cD5Ob3JtYWxpemF0aW9uIGlzIGRvbmUgaWYgcmVxdWlyZWQuPC9wPgorICAgICAqIDxwPk9mZnNldHMgYXJlIHJldHVybmVkIGF0IHRoZSBuZXh0IGNoYXJhY3Rlci48L3A+CisgICAgICogQHJldHVybiBuZXh0IGZjZCBjaGFyYWN0ZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIGNoYXIgbmV4dENoYXIoKQorICAgIHsKKyAgICAgICAgY2hhciByZXN1bHQ7CisgICAgICAgIAorICAgICAgICAvLyBsb29wIGhhbmRsZXMgdGhlIG5leHQgY2hhcmFjdGVyIHdoZXRoZXIgaXQgaXMgaW4gdGhlIGJ1ZmZlciBvciBub3QuCisgICAgICAgIGlmIChtX2J1ZmZlck9mZnNldF8gPCAwKSB7CisgICAgICAgICAgICAvLyB3ZSdyZSB3b3JraW5nIG9uIHRoZSBzb3VyY2UgYW5kIG5vdCBub3JtYWxpemluZy4gZmFzdCBwYXRoLgorICAgICAgICAgICAgLy8gbm90ZSBUaGFpIHByZS12b3dlbCByZW9yZGVyaW5nIHVzZXMgYnVmZmVyIHRvbworICAgICAgICAgICAgcmVzdWx0ID0gbV9zb3VyY2VfLmN1cnJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIHdlIGFyZSBpbiB0aGUgYnVmZmVyLCBidWZmZXIgb2Zmc2V0IHdpbGwgbmV2ZXIgYmUgMCBoZXJlCisgICAgICAgICAgICBpZiAobV9idWZmZXJPZmZzZXRfID49IG1fYnVmZmVyXy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIE51bGwgbWFya2VkIGVuZCBvZiBidWZmZXIsIHJldmVydCB0byB0aGUgc291cmNlIHN0cmluZyBhbmQKKyAgICAgICAgICAgICAgICAvLyBsb29wIGJhY2sgdG8gdG9wIHRvIHRyeSBhZ2FpbiB0byBnZXQgYSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgbV9zb3VyY2VfLnNldEluZGV4KG1fRkNETGltaXRfKTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlck9mZnNldF8gPSAtMTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlcl8uc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgIHJldHVybiBuZXh0Q2hhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyXy5jaGFyQXQobV9idWZmZXJPZmZzZXRfICsrKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3RhcnRvZmZzZXQgPSBtX3NvdXJjZV8uZ2V0SW5kZXgoKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IEZVTExfWkVST19DT01CSU5JTkdfQ0xBU1NfRkFTVF9MSU1JVF8gIAorICAgICAgICAgICAgLy8gRmFzdCBmY2Qgc2FmZSBwYXRoLiB0cmFpbCBjb21iaW5pbmcgY2xhc3MgPT0gMC4KKyAgICAgICAgICAgIHx8IG1fY29sbGF0b3JfLmdldERlY29tcG9zaXRpb24oKSA9PSBDb2xsYXRvci5OT19ERUNPTVBPU0lUSU9OIAorICAgICAgICAgICAgfHwgbV9idWZmZXJPZmZzZXRfID49IDAgfHwgbV9GQ0RMaW1pdF8gPiBzdGFydG9mZnNldCkgeworICAgICAgICAgICAgLy8gc2tpcCB0aGUgZmNkIGNoZWNrcyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9zb3VyY2VfLm5leHQoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCA8IExFQURfWkVST19DT01CSU5JTkdfQ0xBU1NfRkFTVF9MSU1JVF8pIHsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVlayBhdCB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gb3JkZXIgdG8gdGVsbCBpZiB3ZSBhcmUgCisgICAgICAgICAgICAvLyBGQ0QKKyAgICAgICAgICAgIGNoYXIgbmV4dCA9IG1fc291cmNlXy5uZXh0KCk7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBDaGFyYWN0ZXJJdGVyYXRvci5ET05FIAorICAgICAgICAgICAgICAgIHx8IG5leHQgPD0gTEVBRF9aRVJPX0NPTUJJTklOR19DTEFTU19GQVNUX0xJTUlUXykgeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IC8vIGVuZCBvZiBzb3VyY2Ugc3RyaW5nIGFuZCBpZiBuZXh0IGNoYXJhY3RlciAKKyAgICAgICAgICAgICAgICAvLyBzdGFydHMgd2l0aCBhIGJhc2UgY2hhcmFjdGVyIGlzIGFsd2F5cyBmY2QuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5lZWQgYSBtb3JlIGNvbXBsZXRlIEZDRCBjaGVjayBhbmQgcG9zc2libGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAgaWYgKCFGQ0RDaGVjayhyZXN1bHQsIHN0YXJ0b2Zmc2V0KSkgeworICAgICAgICAgICAgbm9ybWFsaXplKCk7CisgICAgICAgICAgICByZXN1bHQgPSBtX2J1ZmZlcl8uY2hhckF0KDApOworICAgICAgICAgICAgbV9idWZmZXJPZmZzZXRfID0gMTsgICAgICAgICAgCisgICAgICAgIH0gICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiA8cD5JbmNyZW1lbnRhbCBub3JtYWxpemF0aW9uLCB0aGlzIGlzIGFuIGVzc2VudGlhbCBvcHRpbWl6YXRpb24uCisgICAgICogQXNzdW1pbmcgRkNEIGNoZWNrcyBoYXMgYmVlbiBkb25lLCBub3JtYWxpemUgdGhlIG5vbi1GQ0QgY2hhcmFjdGVycyBpbnRvIAorICAgICAqIHRoZSBidWZmZXIuCisgICAgICogU291cmNlIG9mZnNldHMgcG9pbnRzIHRvIHRoZSBjdXJyZW50IHByb2Nlc3NpbmcgY2hhcmFjdGVyLjwvcD4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgbm9ybWFsaXplQmFja3dhcmRzKCkKKyAgICB7CisgICAgICAgIG5vcm1hbGl6ZSgpOworICAgICAgICBtX2J1ZmZlck9mZnNldF8gPSBtX2J1ZmZlcl8ubGVuZ3RoKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogPHA+SW5jcmVtZW50YWwgYmFja3dhcmRzIEZDRCBjaGVjayBhbmQgbm9ybWFsaXphdGlvbi4gR2V0cyB0aGUgcHJldmlvdXMgCisgICAgICogYmFzZSBjaGFyYWN0ZXIgcG9zaXRpb24gYW5kIGRldGVybWluZXMgaWYgdGhlIGluLWJldHdlZW4gY2hhcmFjdGVycyAKKyAgICAgKiBuZWVkcyBub3JtYWxpemF0aW9uLgorICAgICAqIDwvcD4gCisgICAgICogPHA+V2hlbiBlbnRlcmluZywgdGhlIHN0YXRlIGlzIGtub3duIHRvIGJlIHRoaXM6CisgICAgICogPHVsPgorICAgICAqIDxsaT5XZSBhcmUgd29ya2luZyBvbiBzb3VyY2Ugc3RyaW5nLCBub3QgdGhlIGJ1ZmZlci4KKyAgICAgKiA8bGk+VGhlIHRyYWlsaW5nIGNvbWJpbmluZyBjbGFzcyBmcm9tIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyAwIG9yIHRoZSAKKyAgICAgKiAgICAgbGVhZGluZyBjb21iaW5pbmcgY2xhc3Mgb2YgdGhlIG5leHQgY2hhciB3YXMgemVyby4KKyAgICAgKiA8L3VsPgorICAgICAqIElucHV0IHNvdXJjZSBvZmZzZXRzIHBvaW50cyB0byB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLgorICAgICAqIFJldHVybiBzb3VyY2Ugb2Zmc2V0cyBwb2ludHMgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzc2luZyBjaGFyYWN0ZXIuCisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBjaCBjdXJyZW50IGNoYXJhY3RlcgorICAgICAqIEBwYXJhbSBvZmZzZXQgY3VycmVudCBjaGFyYWN0ZXIgb2Zmc2V0CisgICAgICogQHJldHVybiB0cnVlIGlmIEZDRENoZWNrIHBhc3NlcywgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIEZDRENoZWNrQmFja3dhcmRzKGNoYXIgY2gsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7ICAgIAorICAgICAgICBjaGFyIGZjZCA9IDA7IAorICAgICAgICBtX0ZDRExpbWl0XyA9IG9mZnNldCArIDE7CisgICAgICAgIG1fc291cmNlXy5zZXRJbmRleChvZmZzZXQpOworICAgICAgICBpZiAoIVVURjE2LmlzU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgZmNkID0gTm9ybWFsaXplckltcGwuZ2V0RkNEMTYoY2gpOworICAgICAgICB9IAorICAgICAgICBlbHNlIGlmIChVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGNoKSAmJiBtX0ZDRExpbWl0XyA+IDApIHsgCisgICAgICAgICAgICAvLyBub3RlIHRyYWlsIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGdldHMgMCBmY2QKKyAgICAgICAgICAgIGNoYXIgdHJhaWxjaCA9IGNoOworICAgICAgICAgICAgY2ggPSBtX3NvdXJjZV8ucHJldmlvdXMoKTsgIAorICAgICAgICAgICAgaWYgKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShjaCkpIHsKKyAgICAgICAgICAgICAgICBmY2QgPSBOb3JtYWxpemVySW1wbC5nZXRGQ0QxNihjaCk7CisgICAgICAgICAgICAgICAgaWYgKGZjZCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZjZCA9IE5vcm1hbGl6ZXJJbXBsLmdldEZDRDE2RnJvbVN1cnJvZ2F0ZVBhaXIoZmNkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZmNkID0gMDsgLy8gdW5wYWlyZWQgc3Vycm9nYXRlIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgbGVhZENDID0gZmNkID4+PiBTRUNPTkRfTEFTVF9CWVRFX1NISUZUXzsKKyAgICAgICAgLy8gVGhlIGN1cnJlbnQgY2hhciBoYXMgYSBub24temVybyBsZWFkaW5nIGNvbWJpbmluZyBjbGFzcy4KKyAgICAgICAgLy8gU2NhbiBiYWNrd2FyZCB1bnRpbCB3ZSBmaW5kIGEgY2hhciB3aXRoIGEgdHJhaWxpbmcgY2Mgb2YgemVyby4KKyAgICAgICAgCisgICAgICAgIHdoaWxlIChsZWFkQ0MgIT0gMCkgeworICAgICAgICAgICAgb2Zmc2V0ID0gbV9zb3VyY2VfLmdldEluZGV4KCk7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IDApIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gbV9zb3VyY2VfLnByZXZpb3VzKCk7CisgICAgICAgICAgICBpZiAoIVVURjE2LmlzU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgICAgIGZjZCA9IE5vcm1hbGl6ZXJJbXBsLmdldEZDRDE2KGNoKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIGlmIChVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGNoKSAmJiBtX3NvdXJjZV8uZ2V0SW5kZXgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBjaGFyIHRyYWlsID0gY2g7CisgICAgICAgICAgICAgICAgY2ggPSBtX3NvdXJjZV8ucHJldmlvdXMoKTsKKyAgICAgICAgICAgICAgICBpZiAoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBmY2QgPSBOb3JtYWxpemVySW1wbC5nZXRGQ0QxNihjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmY2QgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBmY2QgPSBOb3JtYWxpemVySW1wbC5nZXRGQ0QxNkZyb21TdXJyb2dhdGVQYWlyKGZjZCwgdHJhaWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZjZCA9IDA7IC8vIHVucGFpcmVkIHN1cnJvZ2F0ZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHByZXZUcmFpbENDID0gZmNkICYgTEFTVF9CWVRFX01BU0tfOworICAgICAgICAgICAgaWYgKGxlYWRDQyA8IHByZXZUcmFpbENDKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZWFkQ0MgPSBmY2QgPj4+IFNFQ09ORF9MQVNUX0JZVEVfU0hJRlRfOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBzdG9yaW5nIGNoYXJhY3RlciB3aXRoIDAgbGVhZCBmY2Qgb3IgdGhlIDFzdCBhY2NlbnQgd2l0aCBhIGJhc2UgCisgICAgICAgIC8vIGNoYXJhY3RlciBiZWZvcmUgaXQgICAKKyAgICAgICAgaWYgKGZjZCA9PSAwKSB7CisgICAgICAgICAgICBtX0ZDRFN0YXJ0XyA9IG9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fRkNEU3RhcnRfID0gbV9zb3VyY2VfLmdldEluZGV4KCk7CisgICAgICAgIH0gCisgICAgICAgIG1fc291cmNlXy5zZXRJbmRleChtX0ZDRExpbWl0Xyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICAvKiogCisgICAgICogPHA+TWV0aG9kIHRyaWVzIHRvIGZldGNoIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgdGhhdCBpcyBpbiBmY2QgZm9ybS48L3A+CisgICAgICogPHA+Tm9ybWFsaXphdGlvbiBpcyBkb25lIGlmIHJlcXVpcmVkLjwvcD4KKyAgICAgKiA8cD5PZmZzZXRzIGFyZSByZXR1cm5lZCBhdCB0aGUgY3VycmVudCBjaGFyYWN0ZXIuPC9wPgorICAgICAqIEByZXR1cm4gcHJldmlvdXMgZmNkIGNoYXJhY3RlcgorICAgICAqLworICAgIHByaXZhdGUgY2hhciBwcmV2aW91c0NoYXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyT2Zmc2V0XyA+PSAwKSB7CisgICAgICAgICAgICBtX2J1ZmZlck9mZnNldF8gLS07CisgICAgICAgICAgICBpZiAobV9idWZmZXJPZmZzZXRfID49IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idWZmZXJfLmNoYXJBdChtX2J1ZmZlck9mZnNldF8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQXQgdGhlIHN0YXJ0IG9mIGJ1ZmZlciwgcm91dGUgYmFjayB0byBzdHJpbmcuCisgICAgICAgICAgICAgICAgbV9idWZmZXJfLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgICAgICBpZiAobV9GQ0RTdGFydF8gPT0gbV9zb3VyY2VfLmdldEJlZ2luSW5kZXgoKSkgeworICAgICAgICAgICAgICAgICAgICBtX0ZDRFN0YXJ0XyA9IC0xOworICAgICAgICAgICAgICAgICAgICBtX3NvdXJjZV8uc2V0SW5kZXgobV9zb3VyY2VfLmdldEJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJJdGVyYXRvci5ET05FOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9GQ0RMaW1pdF8gPSBtX0ZDRFN0YXJ0XzsKKyAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VfLnNldEluZGV4KG1fRkNEU3RhcnRfKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAKKyAgICAgICAgY2hhciByZXN1bHQgPSBtX3NvdXJjZV8ucHJldmlvdXMoKTsKKyAgICAgICAgaW50IHN0YXJ0b2Zmc2V0ID0gbV9zb3VyY2VfLmdldEluZGV4KCk7CisgICAgICAgIGlmIChyZXN1bHQgPCBMRUFEX1pFUk9fQ09NQklOSU5HX0NMQVNTX0ZBU1RfTElNSVRfIAorICAgICAgICAgICAgfHwgbV9jb2xsYXRvcl8uZ2V0RGVjb21wb3NpdGlvbigpID09IENvbGxhdG9yLk5PX0RFQ09NUE9TSVRJT04gCisgICAgICAgICAgICB8fCBtX0ZDRFN0YXJ0XyA8PSBzdGFydG9mZnNldCB8fCBtX3NvdXJjZV8uZ2V0SW5kZXgoKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGNoYXIgY2ggPSBtX3NvdXJjZV8ucHJldmlvdXMoKTsKKyAgICAgICAgaWYgKGNoIDwgRlVMTF9aRVJPX0NPTUJJTklOR19DTEFTU19GQVNUX0xJTUlUXykgeworICAgICAgICAgICAgLy8gaWYgcHJldmlvdXMgY2hhcmFjdGVyIGlzIEZDRCAKKyAgICAgICAgICAgIG1fc291cmNlXy5uZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIC8vIE5lZWQgYSBtb3JlIGNvbXBsZXRlIEZDRCBjaGVjayBhbmQgcG9zc2libGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAgaWYgKCFGQ0RDaGVja0JhY2t3YXJkcyhyZXN1bHQsIHN0YXJ0b2Zmc2V0KSkgeworICAgICAgICAgICAgbm9ybWFsaXplQmFja3dhcmRzKCk7CisgICAgICAgICAgICBtX2J1ZmZlck9mZnNldF8gLS07CisgICAgICAgICAgICByZXN1bHQgPSBtX2J1ZmZlcl8uY2hhckF0KG1fYnVmZmVyT2Zmc2V0Xyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgIAkvLyBmY2QgY2hlY2tzIGFsd2F5IHJlc2V0IG1fc291cmNlXyB0byB0aGUgbGltaXQgb2YgdGhlIEZDRAorICAgICAgICAJbV9zb3VyY2VfLnNldEluZGV4KHN0YXJ0b2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiBpdCBpcyBhdCB0aGUgc3RhcnQgb2Ygc291cmNlIGl0ZXJhdGlvbgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBpdGVyYXRvciBhdCB0aGUgc3RhcnQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc0JhY2t3YXJkc1N0YXJ0KCkgCisgICAgeworICAgICAgICByZXR1cm4gKG1fYnVmZmVyT2Zmc2V0XyA8IDAgJiYgbV9zb3VyY2VfLmdldEluZGV4KCkgPT0gMCkKKyAgICAgICAgICAgIHx8IChtX2J1ZmZlck9mZnNldF8gPT0gMCAmJiBtX0ZDRFN0YXJ0XyA8PSAwKTsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBpdGVyYXRvciBpcyBhdCB0aGUgZW5kIG9mIGl0cyBzb3VyY2Ugc3RyaW5nLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhdCB0aGUgZW5kLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNFbmQoKSAKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlck9mZnNldF8gPj0gMCkgeworICAgICAgICAgICAgaWYgKG1fYnVmZmVyT2Zmc2V0XyAhPSBtX2J1ZmZlcl8ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBhdCBlbmQgb2YgYnVmZmVyLiBjaGVjayBpZiBmY2QgaXMgYXQgdGhlIGVuZAorICAgICAgICAgICAgICAgIHJldHVybiBtX0ZDRExpbWl0XyA9PSBtX3NvdXJjZV8uZ2V0RW5kSW5kZXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9zb3VyY2VfLmdldEVuZEluZGV4KCkgPT0gbV9zb3VyY2VfLmdldEluZGV4KCk7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiA8cD5TcGVjaWFsIENFIG1hbmFnZW1lbnQgZm9yIHN1cnJvZ2F0ZXM8L3A+CisgICAgICogPHA+TGVhZCBzdXJyb2dhdGUgaXMgZW5jb3VudGVyZWQuIENFIHRvIGJlIHJldHJpZXZlZCBieSB1c2luZyB0aGUgCisgICAgICogZm9sbG93aW5nIGNvZGUgdW5pdC4gSWYgbmV4dCBjaGFyYWN0ZXIgaXMgYSB0cmFpbCBzdXJyb2dhdGUsIGJvdGggCisgICAgICogY2hhcmFjdGVycyB3aWxsIGJlIGNvbWJpbmVkIHRvIHJldHJpZXZlIHRoZSBDRSwgb3RoZXJ3aXNlIGNvbXBsZXRlbHkgCisgICAgICogaWdub3JhYmxlIChVQ0Egc3BlY2lmaWNhdGlvbikgaXMgcmV0dXJuZWQuPC9wPgorICAgICAqIEBwYXJhbSBjb2xsYXRvciBjb2xsYXRvciB0byB1c2UKKyAgICAgKiBAcGFyYW0gY2UgY3VycmVudCBDRQorICAgICAqIEBwYXJhbSB0cmFpbCBjaGFyYWN0ZXIKKyAgICAgKiBAcmV0dXJuIG5leHQgQ0UgZm9yIHRoZSBzdXJyb2dhdGUgY2hhcmFjdGVycworICAgICAqLworICAgIHByaXZhdGUgZmluYWwgaW50IG5leHRTdXJyb2dhdGUoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IsIGludCBjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHRyYWlsKQorICAgIHsKKyAgICAgICAgaWYgKCFVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKHRyYWlsKSkgeworICAgICAgICAgICAgdXBkYXRlSW50ZXJuYWxTdGF0ZShtX3V0aWxTcGVjaWFsQmFja1VwXyk7CisgICAgICAgICAgICByZXR1cm4gSUdOT1JBQkxFOworICAgICAgICB9IAorICAgICAgICAvLyBUT0RPOiBDRSBjb250YWluIHRoZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzIENFICsgdGhlIG1hc2suIAorICAgICAgICAvLyBJdCBzaG91bGQgYXQgbGVhc3QgYmUgdW5tYXNrZWQKKyAgICAgICAgaW50IHJlc3VsdCA9IGNvbGxhdG9yLm1fdHJpZV8uZ2V0VHJhaWxWYWx1ZShjZSwgdHJhaWwpOworICAgICAgICBpZiAocmVzdWx0ID09IENFX05PVF9GT1VORF8pIHsgCisgICAgICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKG1fdXRpbFNwZWNpYWxCYWNrVXBfKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgQ0UgZXhwYW5zaW9uIG9mZnNldAorICAgICAqIEBwYXJhbSBjb2xsYXRvciBjdXJyZW50IGNvbGxhdG9yCisgICAgICogQHBhcmFtIGNlIGNlIHRvIHRlc3QKKyAgICAgKiBAcmV0dXJuIGV4cGFuc2lvbiBvZmZzZXQKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBnZXRFeHBhbnNpb25PZmZzZXQoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IsIGludCBjZSkKKyAgICB7CisgICAgICAgIHJldHVybiAoKGNlICYgMHhGRkZGRjApID4+IDQpIC0gY29sbGF0b3IubV9leHBhbnNpb25PZmZzZXRfOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogU3dhcHMgdGhlIFRoYWkgYW5kIExhb3MgY2hhcmFjdGVycyBhbmQgcmV0dXJucyB0aGUgQ0VzLgorICAgICAqIEBwYXJhbSBjb2xsYXRvciBjb2xsYXRvciB0byB1c2UKKyAgICAgKiBAcGFyYW0gY2UgY3VycmVudCBjZQorICAgICAqIEBwYXJhbSBjaCBjdXJyZW50IGNoYXJhY3RlcgorICAgICAqIEByZXR1cm4gbmV4dCBDRSBmb3IgVGhhaSBjaGFyYWN0ZXJzCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbmV4dFRoYWkoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IsIGludCBjZSwgY2hhciBjaCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlck9mZnNldF8gIT0gLTEgLy8gYWxyZWFkeSBzd2FwcGVkCisgICAgICAgICAgICB8fCBpc0VuZCgpKSB7CisgICAgICAgICAgICAvLyBUcmVhdCBUaGFpIGFzIGEgbGVuZ3RoIG9uZSBleHBhbnNpb24KKyAgICAgICAgICAgIC8vIGZpbmQgdGhlIG9mZnNldCB0byBleHBhbnNpb24gdGFibGUKKyAgICAgICAgICAgIC8vIHdlIG5vdyByZWFycmFuZ2UgdW5jb25kaXRpb25hbGx5IHNvIGRvIG5vdCBjaGVjayBiYXNlIGNvbnNvbmFudAorICAgICAgICAgICAgcmV0dXJuIGNvbGxhdG9yLm1fZXhwYW5zaW9uX1tnZXRFeHBhbnNpb25PZmZzZXQoY29sbGF0b3IsIGNlKV07IAorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gc3dhcCB0aGUgcHJldm93ZWwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhciBpbnRvIHRoZSAKKyAgICAgICAgICAgIC8vIGJ1ZmZlciB3aXRoIHRoZWlyIG9yZGVyIHN3YXBwZWQKKyAgICAgICAgICAgIC8vIGJ1ZmZlciBpcyBhbHdheXMgY2xlYW4gd2hlbiB3ZSBhcmUgaW4gdGhlIHNvdXJjZSBzdHJpbmcKKyAgICAgICAgICAgIG1fYnVmZmVyXy5hcHBlbmQobmV4dENoYXIoKSk7CisgICAgICAgICAgICBtX2J1ZmZlcl8uYXBwZW5kKGNoKTsKKyAgICAgICAgICAgIG1fRkNETGltaXRfID0gbV9zb3VyY2VfLmdldEluZGV4KCk7CisgICAgICAgICAgICBtX0ZDRFN0YXJ0XyA9IG1fRkNETGltaXRfIC0gMjsgCisgICAgICAgICAgICBtX2J1ZmZlck9mZnNldF8gPSAwOworICAgICAgICAgICAgcmV0dXJuIElHTk9SQUJMRTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY29udHJhY3Rpb24gY2Ugb2Zmc2V0CisgICAgICogQHBhcmFtIGNvbGxhdG9yIGN1cnJlbnQgY29sbGF0b3IKKyAgICAgKiBAcGFyYW0gY2UgY3VycmVudCBjZQorICAgICAqIEByZXR1cm4gY29udHJhY3Rpb24gb2Zmc2V0CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0Q29udHJhY3Rpb25PZmZzZXQoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IsIGludCBjZSkKKyAgICB7CisgICAgICAgIHJldHVybiAoY2UgJiAweEZGRkZGRikgLSBjb2xsYXRvci5tX2NvbnRyYWN0aW9uT2Zmc2V0XzsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBDRSBpcyBhIHNwZWNpYWwgdGFnIENFCisgICAgICogQHBhcmFtIGNlIHRvIGNoZWNrCisgICAgICogQHJldHVybiB0cnVlIGlmIENFIGlzIGEgc3BlY2lhbCB0YWcgQ0UsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc1NwZWNpYWxQcmVmaXhUYWcoaW50IGNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJ1bGVCYXNlZENvbGxhdG9yLmlzU3BlY2lhbChjZSkgJiYgCisgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5nZXRUYWcoY2UpID09IENFX1NQRUNfUFJPQ19UQUdfOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogPHA+U3BlY2lhbCBwcm9jZXNzaW5nIGdldHRpbmcgYSBDRSB0aGF0IGlzIHByZWNlZGVkIGJ5IGEgY2VydGFpbiAKKyAgICAgKiBwcmVmaXguPC9wPgorICAgICAqIDxwPlVzZWQgZm9yIG9wdGltaXppbmcgSmFwYW5lc2UgbGVuZ3RoIGFuZCBpdGVyYXRpb24gbWFya3MuIFdoZW4gYSAKKyAgICAgKiBzcGVjaWFsIHByb2Nlc3NpbmcgdGFnIGlzIGVuY291bnRlcmVkLCBpdGVyYXRlIGJhY2t3YXJkcyB0byBzZWUgaWYgCisgICAgICogdGhlcmUncyBhIG1hdGNoLjwvcD4gCisgICAgICogPHA+Q29udHJhY3Rpb24gdGFibGVzIGFyZSB1c2VkLCBwcmVmaXggZGF0YSBpcyBzdG9yZWQgYmFja3dhcmRzIGluIHRoZSAKKyAgICAgKiB0YWJsZS48L3A+CisgICAgICogQHBhcmFtIGNvbGxhdG9yIGNvbGxhdG9yIHRvIHVzZQorICAgICAqIEBwYXJhbSBjZSBjdXJyZW50IGNlCisgICAgICogQHBhcmFtIGVudHJ5YmFja3VwIGVudHJ5IGJhY2t1cCBpdGVyYXRvciBzdGF0dXMKKyAgICAgKiBAcmV0dXJuIG5leHQgY29sbGF0aW9uIGVsZW1lbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBuZXh0U3BlY2lhbFByZWZpeChSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciwgaW50IGNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2t1cCBlbnRyeWJhY2t1cCkKKyAgICB7CisgICAgICAgIGJhY2t1cEludGVybmFsU3RhdGUobV91dGlsU3BlY2lhbEJhY2tVcF8pOworICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKGVudHJ5YmFja3VwKTsKKyAgICAgICAgcHJldmlvdXNDaGFyKCk7CisgICAgICAgIC8vIFdlIHdhbnQgdG8gbG9vayBhdCB0aGUgY2hhcmFjdGVyIHdoZXJlIHdlIGVudGVyZWQKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBUaGlzIGxvb3Agd2lsbCBydW4gb25jZSBwZXIgc291cmNlIHN0cmluZyBjaGFyYWN0ZXIsIGZvciBhcyAKKyAgICAgICAgICAgIC8vIGxvbmcgYXMgd2UgYXJlIG1hdGNoaW5nIGEgcG90ZW50aWFsIGNvbnRyYWN0aW9uIHNlcXVlbmNlICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaXJzdCB3ZSBwb3NpdGlvbiBvdXJzZWx2ZXMgYXQgdGhlIGJlZ2luaW5nIG9mIGNvbnRyYWN0aW9uIAorICAgICAgICAgICAgLy8gc2VxdWVuY2UgCisgICAgICAgICAgICBpbnQgZW50cnlvZmZzZXQgPSBnZXRDb250cmFjdGlvbk9mZnNldChjb2xsYXRvciwgY2UpOworICAgICAgICAgICAgaW50IG9mZnNldCA9IGVudHJ5b2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0JhY2t3YXJkc1N0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBjZSA9IGNvbGxhdG9yLm1fY29udHJhY3Rpb25DRV9bb2Zmc2V0XTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXIgcHJldmlvdXMgPSBwcmV2aW91c0NoYXIoKTsKKyAgICAgICAgICAgIHdoaWxlIChwcmV2aW91cyA+IGNvbGxhdG9yLm1fY29udHJhY3Rpb25JbmRleF9bb2Zmc2V0XSkgeyAKKyAgICAgICAgICAgICAgICAvLyBjb250cmFjdGlvbiBjaGFyYWN0ZXJzIGFyZSBvcmRlcmVkLCBza2lwIHNtYWxsZXIgY2hhcmFjdGVycworICAgICAgICAgICAgICAgIG9mZnNldCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBpZiAocHJldmlvdXMgPT0gY29sbGF0b3IubV9jb250cmFjdGlvbkluZGV4X1tvZmZzZXRdKSB7CisgICAgICAgICAgICAgICAgLy8gRm91bmQgdGhlIHNvdXJjZSBzdHJpbmcgY2hhciBpbiB0aGUgdGFibGUuCisgICAgICAgICAgICAgICAgLy8gUGljayB1cCB0aGUgY29ycmVzcG9uZGluZyBDRSBmcm9tIHRoZSB0YWJsZS4KKyAgICAgICAgICAgICAgICBjZSA9IGNvbGxhdG9yLm1fY29udHJhY3Rpb25DRV9bb2Zmc2V0XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGNvbXBsZXRlbHkgaWdub3JhYmxlIGNvZGUgcG9pbnQgaW4gdGhlIG1pZGRsZSAKKyAgICAgICAgICAgICAgICAgLy8gb2YgYSBwcmVmaXgsIHdlIG5lZWQgdG8gYWN0IGFzIGlmIGl0J3Mgbm90IHRoZXJlIAorICAgICAgICAgICAgICAgICAvLyBhc3N1bXB0aW9uOiAncmVhbCcgbm9uY2hhcmFjdGVycyAoKmZmZmUsICpmZmZmLCBmZGQwLWZkZWYgCisgICAgICAgICAgICAgICAgIC8vIGFyZSBzZXQgdG8gemVybykgCisgICAgICAgICAgICAgICAgIC8vIGxvbmUgc3Vycm9nYXRlcyBjYW5ub3QgYmUgc2V0IHRvIHplcm8gYXMgaXQgd291bGQgYnJlYWsgCisgICAgICAgICAgICAgICAgIC8vIG90aGVyIHByb2Nlc3NpbmcgCisgICAgICAgICAgICAgICAgIGludCBpc1plcm9DRSA9IGNvbGxhdG9yLm1fdHJpZV8uZ2V0TGVhZFZhbHVlKHByZXZpb3VzKTsgCisgICAgICAgICAgICAgICAgIC8vIGl0J3MgZWFzeSBmb3IgQk1QIGNvZGUgcG9pbnRzIAorICAgICAgICAgICAgICAgICBpZiAoaXNaZXJvQ0UgPT0gMCkgeyAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKKyAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgZWxzZSBpZiAoVVRGMTYuaXNTdXJyb2dhdGUocHJldmlvdXMpKSB7IAorICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMsIHdlIGhhdmUgdG8gY2hlY2sgdGhlIAorICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBvbmUgc2l0dWF0aW9ucyB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gaWdub3JlIAorICAgICAgICAgICAgICAgICAgICAgLy8gMS4gYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmc6IHNjaGFyIGlzIGEgbG9uZSBzdXJyb2dhdGUgCisgICAgICAgICAgICAgICAgICAgICAvLyAyLiBzY2hhciBpcyBhIGxvbmUgc3Vycm9nYXRlIAorICAgICAgICAgICAgICAgICAgICAgLy8gMy4gc2NoYXIgaXMgYSB0cmFpbCBzdXJyb2dhdGUgaW4gYSB2YWxpZCBzdXJyb2dhdGUgCisgICAgICAgICAgICAgICAgICAgICAvLyBzZXF1ZW5jZSB0aGF0IGlzIGV4cGxpY2l0bHkgc2V0IHRvIHplcm8uIAorICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0JhY2t3YXJkc1N0YXJ0KCkpIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBsZWFkID0gcHJldmlvdXNDaGFyKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVVEYxNi5pc0xlYWRTdXJyb2dhdGUobGVhZCkpIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzWmVyb0NFID0gY29sbGF0b3IubV90cmllXy5nZXRMZWFkVmFsdWUobGVhZCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUnVsZUJhc2VkQ29sbGF0b3IuZ2V0VGFnKGlzWmVyb0NFKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFJ1bGVCYXNlZENvbGxhdG9yLkNFX1NVUlJPR0FURV9UQUdfKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbmFsQ0UgPSBjb2xsYXRvci5tX3RyaWVfLmdldFRyYWlsVmFsdWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzWmVyb0NFLCBwcmV2aW91cyk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsQ0UgPT0gMCkgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgcmVhbCwgYXNzaWduZWQgY29tcGxldGVseSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmFibGUgY29kZSBwb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvbmUgc3Vycm9nYXRlLCBjb21wbGV0ZWx5IGlnbm9yYWJsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENoYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IAorICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENoYXIoKTsgLy8gc2hpZnQgYmFjayB0byBvcmlnaW5hbCBwb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb25lIHN1cnJvZ2F0ZSBhdCB0aGUgYmVnZ2luaW5nLCBjb21wbGV0ZWx5IGlnbm9yYWJsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgCisgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICB9IAorCisgICAgICAgICAgICAgICAgLy8gU291cmNlIHN0cmluZyBjaGFyIHdhcyBub3QgaW4gdGhlIHRhYmxlLCBwcmVmaXggbm90IGZvdW5kCisgICAgICAgICAgICAgICAgY2UgPSBjb2xsYXRvci5tX2NvbnRyYWN0aW9uQ0VfW2VudHJ5b2Zmc2V0XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBpZiAoIWlzU3BlY2lhbFByZWZpeFRhZyhjZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgc291cmNlIHN0cmluZyBjaGFyIHdhcyBpbiB0aGUgY29udHJhY3Rpb24gdGFibGUsIGFuZCAKKyAgICAgICAgICAgICAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBDRSBpcyBub3QgYSBwcmVmaXggQ0UuIFdlIGZvdW5kIHRoZSAKKyAgICAgICAgICAgICAgICAvLyBwcmVmaXgsIGJyZWFrIG91dCBvZiBsb29wLCB0aGlzIENFIHdpbGwgZW5kIHVwIGJlaW5nIAorICAgICAgICAgICAgICAgIC8vIHJldHVybmVkLiBUaGlzIGlzIHRoZSBub3JtYWwgd2F5IG91dCBvZiBwcmVmaXggaGFuZGxpbmcgCisgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgc291cmNlIGFjdHVhbGx5IGNvbnRhaW5lZCB0aGUgcHJlZml4LgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjZSAhPSBDRV9OT1RfRk9VTkRfKSB7IAorICAgICAgICAgICAgLy8gd2UgZm91bmQgc29tZXRoaW5nIGFuZCB3ZSBjYW4gbWVyaWxseSBjb250aW51ZQorICAgICAgICAgICAgdXBkYXRlSW50ZXJuYWxTdGF0ZShtX3V0aWxTcGVjaWFsQmFja1VwXyk7CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeyAvLyBwcmVmaXggc2VhcmNoIHdhcyBhIGZhaWx1cmUsIHdlIGhhdmUgdG8gYmFja3VwIGFsbCB0aGUgd2F5IHRvIAorICAgICAgICAgICAgLy8gdGhlIHN0YXJ0CisgICAgICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKGVudHJ5YmFja3VwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2U7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGNlIGlzIGEgY29udHJhY3Rpb24gdGFnCisgICAgICogQHBhcmFtIGNlIGNlIHRvIGNoZWNrCisgICAgICogQHJldHVybiB0cnVlIGlmIGNlIGlzIGEgY29udHJhY3Rpb24gdGFnLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNDb250cmFjdGlvblRhZyhpbnQgY2UpCisgICAgeworICAgICAgICByZXR1cm4gUnVsZUJhc2VkQ29sbGF0b3IuaXNTcGVjaWFsKGNlKSAmJiAKKyAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLmdldFRhZyhjZSkgPT0gQ0VfQ09OVFJBQ1RJT05fVEFHXzsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIE1ldGhvZCB0byBjb3B5IHNraXBwZWQgY2hhcmFjdGVycyBpbnRvIHRoZSBidWZmZXIgYW5kIHNldHMgdGhlIGZjZCAKKyAgICAgKiBwb3NpdGlvbi4gVG8gZW5zdXJlIHRoYXQgdGhlIHNraXBwZWQgY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZCBsYXRlciwgCisgICAgICogd2UgbmVlZCB0byBwbGFjZSBpdCBpbiB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciBhbmQgCisgICAgICogcmVhc3NpZ24gdGhlIHNvdXJjZSBpbmRleC4gc2ltcGxlIGNhc2UgaWYgaW5kZXggcmVzaWRlIGluIHN0cmluZywgCisgICAgICogc2ltcGx5IGNvcHkgdG8gYnVmZmVyIGFuZCBmY2Rwb3NpdGlvbiA9IHBvcywgcG9zID0gc3RhcnQgb2YgYnVmZmVyLiAKKyAgICAgKiBpZiBwb3MgaW4gbm9ybWFsaXphdGlvbiBidWZmZXIsIHdlJ2xsIGluc2VydCB0aGUgY29weSBpbmZyb250IG9mIHBvcyAKKyAgICAgKiBhbmQgcG9pbnQgcG9zIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLiB3aHkgYW0gaSBkb2luZyB0aGVzZSBjb3BpZXM/CisgICAgICogd2VsbCwgc28gdGhhdCB0aGUgd2hvbGUgY2h1bmsgb2YgY29kZXMgaW4gdGhlIGdldE5leHRDRSwgCisgICAgICogdWNvbF9wcnZfZ2V0U3BlY2lhbENFIGRvZXMgbm90IHJlcXVpcmUgYW55IGNoYW5nZXMsIHdoaWNoIHdpbGwgYmUgCisgICAgICogcmVhbGx5IHBhaW5mdWwuCisgICAgICogQHBhcmFtIHNraXBwZWQgY2hhcmFjdGVyIGJ1ZmZlcgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzZXREaXNjb250aWd1b3VzKFN0cmluZ0J1ZmZlciBza2lwcGVkKQorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyT2Zmc2V0XyA+PSAwKSB7CisgICAgICAgICAgICBtX2J1ZmZlcl8ucmVwbGFjZSgwLCBtX2J1ZmZlck9mZnNldF8sIHNraXBwZWQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX0ZDRExpbWl0XyA9IG1fc291cmNlXy5nZXRJbmRleCgpOworICAgICAgICAgICAgbV9idWZmZXJfLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgIG1fYnVmZmVyXy5hcHBlbmQoc2tpcHBlZC50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9idWZmZXJPZmZzZXRfID0gMDsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGZvciBmb3J3YXJkIGl0ZXJhdGlvbgorICAgICAqIEByZXR1cm4gY3VycmVudCBjaGFyYWN0ZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIGNoYXIgY3VycmVudENoYXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyT2Zmc2V0XyA8IDApIHsKKyAgICAgICAgICAgIGNoYXIgcmVzdWx0ID0gbV9zb3VyY2VfLnByZXZpb3VzKCk7CisgICAgICAgICAgICBtX3NvdXJjZV8ubmV4dCgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBtX2J1ZmZlck9mZnNldF8gaXMgbmV2ZXIgMCBpbiBub3JtYWwgY2lyY3Vtc3RhbmNlcyBleGNlcHQgYWZ0ZXIgYQorICAgICAgICAvLyBkaXNjb250aWd1b3VzIGNvbnRyYWN0aW9uIHNpbmNlIGl0IGlzIGFsd2F5cyByZXR1cm5lZCBhbmQgbW92ZWQKKyAgICAgICAgLy8gYnkgMSB3aGVuIHdlIGRvIG5leHRDaGFyKCkKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyXy5jaGFyQXQobV9idWZmZXJPZmZzZXRfIC0gMSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWV0aG9kIHRvIGdldCB0aGUgZGlzY29udGlndW91cyBjb2xsYXRpb24gZWxlbWVudCB3aXRoaW4gdGhlIHNvdXJjZS4KKyAgICAgKiBOb3RlIHRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHBvc2l0aW9uIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZXMuCisgICAgICogUGFzc2VkIGluIGNoYXJhY3RlciBvZmZzZXQgcG9pbnRzIHRvIHRoZSBzZWNvbmQgY29tYmluaW5nIGNoYXJhY3RlciAKKyAgICAgKiBhZnRlciB0aGUgc3RhcnQgY2hhcmFjdGVyLgorICAgICAqIEBwYXJhbSBjb2xsYXRvciBjdXJyZW50IGNvbGxhdG9yIHVzZWQKKyAgICAgKiBAcGFyYW0gZW50cnlvZmZzZXQgaW5kZXggdG8gdGhlIHN0YXJ0IGNoYXJhY3RlciBpbiB0aGUgY29udHJhY3Rpb24gdGFibGUKKyAgICAgKiBAcmV0dXJuIGRpc2NvbnRpZ3VvdXMgY29sbGF0aW9uIGVsZW1lbnQgb2Zmc2V0CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbmV4dERpc2NvbnRpZ3VvdXMoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IsIGludCBlbnRyeW9mZnNldCkKKyAgICB7CisgICAgICAgIGludCBvZmZzZXQgPSBlbnRyeW9mZnNldDsKKyAgICAgICAgYm9vbGVhbiBtdWx0aWNvbnRyYWN0aW9uID0gZmFsc2U7CisgICAgICAgIC8vIHNpbmNlIGl0IHdpbGwgYmUgc3R1ZmZlZCBpbnRvIHRoaXMgaXRlcmF0b3IgYW5kIHJhbiBvdmVyIGFnYWluCisgICAgICAgIGlmIChtX3V0aWxTa2lwcGVkQnVmZmVyXyA9PSBudWxsKSB7CisgICAgICAgICAgICBtX3V0aWxTa2lwcGVkQnVmZmVyXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsgCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3V0aWxTa2lwcGVkQnVmZmVyXy5zZXRMZW5ndGgoMCk7CisgICAgICAgIH0KKyAgICAgICAgY2hhciBjaCA9IGN1cnJlbnRDaGFyKCk7CisgICAgICAgIG1fdXRpbFNraXBwZWRCdWZmZXJfLmFwcGVuZChjdXJyZW50Q2hhcigpKTsgCisgICAgICAgIC8vIGFjY2VudCBhZnRlciB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAgICAgIGlmIChtX3V0aWxTcGVjaWFsRGlzY29udGlndW91c0JhY2tVcF8gPT0gbnVsbCkgeworICAgICAgICAgICAgbV91dGlsU3BlY2lhbERpc2NvbnRpZ3VvdXNCYWNrVXBfID0gbmV3IEJhY2t1cCgpOworICAgICAgICB9CisgICAgICAgIGJhY2t1cEludGVybmFsU3RhdGUobV91dGlsU3BlY2lhbERpc2NvbnRpZ3VvdXNCYWNrVXBfKTsKKyAgICAgICAgY2hhciBuZXh0Y2ggPSBjaDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGNoID0gbmV4dGNoOworICAgICAgICAgICAgbmV4dGNoID0gbmV4dENoYXIoKTsgCisgICAgICAgICAgICBpZiAobmV4dGNoID09IENoYXJhY3Rlckl0ZXJhdG9yLkRPTkUgCisgICAgICAgICAgICAgICAgfHwgZ2V0Q29tYmluaW5nQ2xhc3MobmV4dGNoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1vcmUgYWNjZW50cyB0byBtb3ZlIGFyb3VuZAorICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gc2hpZnQgcHJldmlvdXNDaGFyLCBzaW5jZSB3ZSBhcmUgcmVzZXR0aW5nCisgICAgICAgICAgICAgICAgLy8gdGhlIG9mZnNldCBsYXRlcgorICAgICAgICAgICAgICAgIGlmIChtdWx0aWNvbnRyYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Y2ggIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDaGFyKCk7IC8vIGJhY2t0cmFjaworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNldERpc2NvbnRpZ3VvdXMobV91dGlsU2tpcHBlZEJ1ZmZlcl8pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGF0b3IubV9jb250cmFjdGlvbkNFX1tvZmZzZXRdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIG9mZnNldCArKzsgLy8gc2tpcCB0aGUgY29tYmluaW5nIGNsYXNzIG9mZnNldAorICAgICAgICAgICAgd2hpbGUgKG5leHRjaCA+IGNvbGxhdG9yLm1fY29udHJhY3Rpb25JbmRleF9bb2Zmc2V0XSkgeworICAgICAgICAgICAgICAgIG9mZnNldCArKzsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGludCBjZSA9IENFX05PVF9GT1VORF87CisgICAgICAgICAgICBpZiAobmV4dGNoICE9IGNvbGxhdG9yLm1fY29udHJhY3Rpb25JbmRleF9bb2Zmc2V0XQorICAgICAgICAgICAgICAgICAgICB8fCBnZXRDb21iaW5pbmdDbGFzcyhuZXh0Y2gpID09IGdldENvbWJpbmluZ0NsYXNzKGNoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyB1bm1hdGNoZWQgb3IgYmxvY2tlZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBtX3V0aWxTa2lwcGVkQnVmZmVyXy5hcHBlbmQobmV4dGNoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNlID0gY29sbGF0b3IubV9jb250cmFjdGlvbkNFX1tvZmZzZXRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjZSA9PSBDRV9OT1RfRk9VTkRfKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAoaXNDb250cmFjdGlvblRhZyhjZSkpIHsKKyAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgbXVsdGktY29udHJhY3Rpb24KKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBnZXRDb250cmFjdGlvbk9mZnNldChjb2xsYXRvciwgY2UpOworICAgICAgICAgICAgICAgIGlmIChjb2xsYXRvci5tX2NvbnRyYWN0aW9uQ0VfW29mZnNldF0gIT0gQ0VfTk9UX0ZPVU5EXykgeworICAgICAgICAgICAgICAgICAgICBtdWx0aWNvbnRyYWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYmFja3VwSW50ZXJuYWxTdGF0ZShtX3V0aWxTcGVjaWFsRGlzY29udGlndW91c0JhY2tVcF8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXREaXNjb250aWd1b3VzKG1fdXRpbFNraXBwZWRCdWZmZXJfKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVwZGF0ZUludGVybmFsU3RhdGUobV91dGlsU3BlY2lhbERpc2NvbnRpZ3VvdXNCYWNrVXBfKTsKKyAgICAgICAgLy8gYmFja3VwIGlzIG9uZSBmb3J3YXJkIG9mIHRoZSBiYXNlIGNoYXJhY3Rlciwgd2UgbmVlZCB0byBtb3ZlIGJhY2sgCisgICAgICAgIC8vIG9uZSBtb3JlCisgICAgICAgIHByZXZpb3VzQ2hhcigpOworICAgICAgICByZXR1cm4gY29sbGF0b3IubV9jb250cmFjdGlvbkNFX1tlbnRyeW9mZnNldF07CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBuZXh0IGNvbnRyYWN0aW9uIGNlCisgICAgICogQHBhcmFtIGNvbGxhdG9yIGNvbGxhdG9yIHRvIHVzZQorICAgICAqIEBwYXJhbSBjZSBjdXJyZW50IGNlCisgICAgICogQHBhcmFtIGVudHJ5YmFja3VwIGVudHJ5IGJhY2t1cCBpdGVyYXRvciBzdGF0dXMKKyAgICAgKiBAcmV0dXJuIGNlIG9mIHRoZSBuZXh0IGNvbnRyYWN0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbmV4dENvbnRyYWN0aW9uKFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yLCBpbnQgY2UpCisgICAgeworICAgICAgICBiYWNrdXBJbnRlcm5hbFN0YXRlKG1fdXRpbFNwZWNpYWxCYWNrVXBfKTsKKyAgICAgICAgaW50IGVudHJ5Y2UgPSBDRV9OT1RfRk9VTkRfOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaW50IGVudHJ5b2Zmc2V0ID0gZ2V0Q29udHJhY3Rpb25PZmZzZXQoY29sbGF0b3IsIGNlKTsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSBlbnRyeW9mZnNldDsgICAKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNFbmQoKSkgeworICAgICAgICAgICAgICAgIGNlID0gY29sbGF0b3IubV9jb250cmFjdGlvbkNFX1tvZmZzZXRdOworICAgICAgICAgICAgICAgIGlmIChjZSA9PSBDRV9OT1RfRk9VTkRfKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGJhY2sgdXAgdGhlIHNvdXJjZSBvdmVyIGFsbCB0aGUgY2hhcnMgd2Ugc2Nhbm5lZCBnb2luZyAKKyAgICAgICAgICAgICAgICAgICAgLy8gaW50byB0aGlzIGNvbnRyYWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBjZSA9IGVudHJ5Y2U7ICAKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW50ZXJuYWxTdGF0ZShtX3V0aWxTcGVjaWFsQmFja1VwXyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIC8vIGdldCB0aGUgZGlzY29udGlndW9zIG1heGltdW0gY29tYmluaW5nIGNsYXNzCisgICAgICAgICAgICBieXRlIG1heENDID0gKGJ5dGUpKGNvbGxhdG9yLm1fY29udHJhY3Rpb25JbmRleF9bb2Zmc2V0XSAmIDB4RkYpOyAKKyAgICAgICAgICAgIC8vIGNoZWNrcyBpZiBhbGwgY2hhcmFjdGVycyBoYXZlIHRoZSBzYW1lIGNvbWJpbmluZyBjbGFzcworICAgICAgICAgICAgYnl0ZSBhbGxTYW1lID0gKGJ5dGUpKGNvbGxhdG9yLm1fY29udHJhY3Rpb25JbmRleF9bb2Zmc2V0XSA+PiA4KTsKKyAgICAgICAgICAgIGNoYXIgY2ggPSBuZXh0Q2hhcigpOworICAgICAgICAgICAgb2Zmc2V0ICsrOworICAgICAgICAgICAgd2hpbGUgKGNoID4gY29sbGF0b3IubV9jb250cmFjdGlvbkluZGV4X1tvZmZzZXRdKSB7IAorICAgICAgICAgICAgICAgIC8vIGNvbnRyYWN0aW9uIGNoYXJhY3RlcnMgYXJlIG9yZGVyZWQsIHNraXAgYWxsIHNtYWxsZXIKKyAgICAgICAgICAgICAgICBvZmZzZXQgKys7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgaWYgKGNoID09IGNvbGxhdG9yLm1fY29udHJhY3Rpb25JbmRleF9bb2Zmc2V0XSkgeworICAgICAgICAgICAgICAgIC8vIEZvdW5kIHRoZSBzb3VyY2Ugc3RyaW5nIGNoYXIgaW4gdGhlIGNvbnRyYWN0aW9uIHRhYmxlLgorICAgICAgICAgICAgICAgIC8vICBQaWNrIHVwIHRoZSBjb3JyZXNwb25kaW5nIENFIGZyb20gdGhlIHRhYmxlLgorICAgICAgICAgICAgICAgIGNlID0gY29sbGF0b3IubV9jb250cmFjdGlvbkNFX1tvZmZzZXRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBjb21wbGV0ZWx5IGlnbm9yYWJsZSBjb2RlIHBvaW50IGluIHRoZSBtaWRkbGUgCisgICAgICAgICAgICAgICAgLy8gb2YgY29udHJhY3Rpb24sIHdlIG5lZWQgdG8gYWN0IGFzIGlmIGl0J3Mgbm90IHRoZXJlIAorICAgICAgICAgICAgICAgIGludCBpc1plcm9DRSA9IGNvbGxhdG9yLm1fdHJpZV8uZ2V0TGVhZFZhbHVlKGNoKTsgCisgICAgICAgICAgICAgICAgLy8gaXQncyBlYXN5IGZvciBCTVAgY29kZSBwb2ludHMgCisgICAgICAgICAgICAgICAgaWYgKGlzWmVyb0NFID09IDApIHsgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IAorICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGNoKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VuZCgpKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwSW50ZXJuYWxTdGF0ZShtX3V0aWxTcGVjaWFsQmFja1VwXyk7IAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB0cmFpbCA9IG5leHRDaGFyKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVURjE2LmlzVHJhaWxTdXJyb2dhdGUodHJhaWwpKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvIHN0dWZmIHdpdGggdHJhaWwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJ1bGVCYXNlZENvbGxhdG9yLmdldFRhZyhpc1plcm9DRSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFJ1bGVCYXNlZENvbGxhdG9yLkNFX1NVUlJPR0FURV9UQUdfKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmluYWxDRSA9IGNvbGxhdG9yLm1fdHJpZV8uZ2V0VHJhaWxWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNaZXJvQ0UsIHRyYWlsKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbENFID09IDApIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnJva2VuIHN1cnJvZ2F0ZSBzZXF1ZW5jZSwgdGh1cyBjb21wbGV0ZWx5IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yYWJsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbFNwZWNpYWxCYWNrVXBfKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IAorICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUludGVybmFsU3RhdGUobV91dGlsU3BlY2lhbEJhY2tVcF8pOyAKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gIG1vcmUgY2hhcmFjdGVycywgc28gYnJva2VuIHN1cnJvZ2F0ZSBwYWlyLi4uICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY29udHJhY3Rpb24gd2lsbCB1bHRpbWF0ZWx5IGZhaWwsIGJ1dCBub3QgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIHVzIAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgICAgICAvLyBTb3VyY2Ugc3RyaW5nIGNoYXIgd2FzIG5vdCBpbiBjb250cmFjdGlvbiB0YWJsZS4KKyAgICAgICAgICAgICAgICAvLyBVbmxlc3MgaXQgaXMgYSBkaXNjb250aWd1b3VzIGNvbnRyYWN0aW9uLCB3ZSBhcmUgZG9uZQorICAgICAgICAgICAgICAgIGJ5dGUgc0NDOworICAgICAgICAgICAgICAgIGlmIChtYXhDQyA9PSAwIHx8IChzQ0MgPSAoYnl0ZSlnZXRDb21iaW5pbmdDbGFzcyhjaCkpID09IDAgCisgICAgICAgICAgICAgICAgICAgIHx8IHNDQyA+IG1heENDIHx8IChhbGxTYW1lICE9IDAgJiYgc0NDID09IG1heENDKSB8fCAKKyAgICAgICAgICAgICAgICAgICAgaXNFbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDb250cmFjdGlvbiBjYW4gbm90IGJlIGRpc2NvbnRpZ3VvdXMsIGJhY2sgdXAgYnkgb25lCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ2hhcigpOyAKKyAgICAgICAgICAgICAgICAgICAgY2UgPSBjb2xsYXRvci5tX2NvbnRyYWN0aW9uQ0VfW2VudHJ5b2Zmc2V0XTsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBDb250cmFjdGlvbiBpcyBwb3NzaWJseSBkaXNjb250aWd1b3VzLgorICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBuZXh0IGNoYXJhY3RlciBpZiBjaCBpcyBub3QgYSBiYXNlIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICBjaGFyIG5leHRjaCA9IG5leHRDaGFyKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Y2ggIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDaGFyKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGdldENvbWJpbmluZ0NsYXNzKG5leHRjaCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDaGFyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiYXNlIGNoYXJhY3RlciBub3QgcGFydCBvZiBkaXNjb250aWd1b3VzIGNvbnRyYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBjZSA9IGNvbGxhdG9yLm1fY29udHJhY3Rpb25DRV9bZW50cnlvZmZzZXRdOworICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlID0gbmV4dERpc2NvbnRpZ3VvdXMoY29sbGF0b3IsIGVudHJ5b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBpZiAoY2UgPT0gQ0VfTk9UX0ZPVU5EXykgeworICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBkaWQgbm90IG1hdGNoIHRoZSBjb250cmFjdGlvbiwgcmV2ZXJ0IGJhY2sgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKG1fdXRpbFNwZWNpYWxCYWNrVXBfKTsKKyAgICAgICAgICAgICAgICBjZSA9IGVudHJ5Y2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBzb3VyY2Ugd2FzIGEgY29udHJhY3Rpb24KKyAgICAgICAgICAgIGlmICghaXNDb250cmFjdGlvblRhZyhjZSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAvLyBjY29udGludWUgbG9vcGluZyB0byBjaGVjayBmb3IgdGhlIHJlbWFpbmluZyBjb250cmFjdGlvbi4KKyAgICAgICAgICAgIGlmIChjb2xsYXRvci5tX2NvbnRyYWN0aW9uQ0VfW2VudHJ5b2Zmc2V0XSAhPSBDRV9OT1RfRk9VTkRfKSB7CisgICAgICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGZ1cnRoZXIgY29udHJhY3Rpb25zIHRvIGJlIHBlcmZvcm1lZCwgc28gd2Ugc3RvcmUKKyAgICAgICAgICAgICAgICAvLyB0aGUgc28tZmFyIGNvbXBsZXRlZCBjZSwgc28gdGhhdCBpZiB3ZSBmYWlsIGluIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgLy8gcm91bmQgd2UganVzdCByZXR1cm4gdGhpcyBvbmUuCisgICAgICAgICAgICAgICAgZW50cnljZSA9IGNvbGxhdG9yLm1fY29udHJhY3Rpb25DRV9bZW50cnlvZmZzZXRdOworICAgICAgICAgICAgICAgIGJhY2t1cEludGVybmFsU3RhdGUobV91dGlsU3BlY2lhbEJhY2tVcF8pOworICAgICAgICAgICAgICAgIGlmIChtX3V0aWxTcGVjaWFsQmFja1VwXy5tX2J1ZmZlck9mZnNldF8gPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBtX3V0aWxTcGVjaWFsQmFja1VwXy5tX2J1ZmZlck9mZnNldF8gLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3V0aWxTcGVjaWFsQmFja1VwXy5tX29mZnNldF8gLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHJldHVybiBjZTsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIG5leHQgY2UgZm9yIGxvbmcgcHJpbWFyaWVzLCBzdHVmZnMgdGhlIHJlc3Qgb2YgdGhlIGNvbGxhdGlvbiAKKyAgICAgKiBlbGVtZW50cyBpbnRvIHRoZSBjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gY2UgY3VycmVudCBjZQorICAgICAqIEByZXR1cm4gbmV4dCBjZQorICAgICAqLworICAgIHByaXZhdGUgaW50IG5leHRMb25nUHJpbWFyeShpbnQgY2UpCisgICAgeworICAgICAgICBtX0NFQnVmZmVyX1sxXSA9ICgoY2UgJiAweEZGKSA8PCAyNCkgCisgICAgICAgICAgICB8IFJ1bGVCYXNlZENvbGxhdG9yLkNFX0NPTlRJTlVBVElPTl9NQVJLRVJfOworICAgICAgICBtX0NFQnVmZmVyT2Zmc2V0XyA9IDE7CisgICAgICAgIG1fQ0VCdWZmZXJTaXplXyA9IDI7CisgICAgICAgIG1fQ0VCdWZmZXJfWzBdID0gKChjZSAmIDB4RkZGRjAwKSA8PCA4KSB8IChDRV9CWVRFX0NPTU1PTl8gPDwgOCkgfCAKKyAgICAgICAgICAgIENFX0JZVEVfQ09NTU9OXzsKKyAgICAgICAgcmV0dXJuIG1fQ0VCdWZmZXJfWzBdOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGV4cGFuc2lvbgorICAgICAqIEBwYXJhbSBjZSBjdXJyZW50IGNlCisgICAgICogQHJldHVybiBudW1iZXIgb2YgZXhwYW5zaW9uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0RXhwYW5zaW9uQ291bnQoaW50IGNlKQorICAgIHsgICAKKyAgICAgICAgcmV0dXJuIGNlICYgMHhGOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbmV4dCBleHBhbnNpb24gY2UgYW5kIHN0dWZmcyB0aGUgcmVzdCBvZiB0aGUgY29sbGF0aW9uIGVsZW1lbnRzCisgICAgICogaW50byB0aGUgY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGNvbGxhdG9yIGN1cnJlbnQgY29sbGF0b3IKKyAgICAgKiBAcGFyYW0gY2UgY3VycmVudCBjZQorICAgICAqIEByZXR1cm4gbmV4dCBleHBhbnNpb24gY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBuZXh0RXhwYW5zaW9uKFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yLCBpbnQgY2UpCisgICAgeworICAgICAgICAvLyBOT1RFOiB3ZSBjYW4gZW5jb3VudGVyIGJvdGggY29udGludWF0aW9ucyBhbmQgZXhwYW5zaW9ucyBpbiBhbiAKKyAgICAgICAgLy8gZXhwYW5zaW9uIQorICAgICAgICAvLyBJIGhhdmUgdG8gZGVjaWRlIHdoZXJlIGNvbnRpbnVhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGRlYWx0IHdpdGggCisgICAgICAgIGludCBvZmZzZXQgPSBnZXRFeHBhbnNpb25PZmZzZXQoY29sbGF0b3IsIGNlKTsKKyAgICAgICAgbV9DRUJ1ZmZlclNpemVfID0gZ2V0RXhwYW5zaW9uQ291bnQoY2UpOyAKKyAgICAgICAgbV9DRUJ1ZmZlck9mZnNldF8gPSAxOworICAgICAgICBtX0NFQnVmZmVyX1swXSA9IGNvbGxhdG9yLm1fZXhwYW5zaW9uX1tvZmZzZXRdOworICAgICAgICBpZiAobV9DRUJ1ZmZlclNpemVfICE9IDApIHsgCisgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIDE2IGVsZW1lbnRzIGluIGV4cGFuc2lvbgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBtX0NFQnVmZmVyU2l6ZV87IGkgKyspIHsKKyAgICAgICAgICAgICAgICBtX0NFQnVmZmVyX1tpXSA9IGNvbGxhdG9yLm1fZXhwYW5zaW9uX1tvZmZzZXQgKyBpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgLy8gY2UgYXJlIHRlcm1pbmF0ZWQKKyAgICAgICAgICAgIG1fQ0VCdWZmZXJTaXplXyA9IDE7CisgICAgICAgICAgICB3aGlsZSAoY29sbGF0b3IubV9leHBhbnNpb25fW29mZnNldF0gIT0gMCkgeworICAgICAgICAgICAgICAgIG1fQ0VCdWZmZXJfW21fQ0VCdWZmZXJTaXplXyArK10gPSAKKyAgICAgICAgICAgICAgICAgICAgY29sbGF0b3IubV9leHBhbnNpb25fWysrIG9mZnNldF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fQ0VCdWZmZXJfWzBdOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBuZXh0IGltcGxpY2l0IGNlIGZvciBjb2RlcG9pbnRzCisgICAgICogQHBhcmFtIGNvZGVwb2ludCBjdXJyZW50IGNvZGVwb2ludAorICAgICAqIEByZXR1cm4gaW1wbGljaXQgY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBuZXh0SW1wbGljaXQoaW50IGNvZGVwb2ludCkgCisgICAgeworICAgICAgICBpZiAoIVVDaGFyYWN0ZXIuaXNMZWdhbChjb2RlcG9pbnQpKSB7CisgICAgICAgICAgICAvLyBzeW53ZWUgdG8gY2hlY2sgd2l0aCB2bGFkaW1pciBvbiB0aGUgcmFuZ2Ugb2YgaXNOb25DaGFyKCkKKyAgICAgICAgICAgIC8vIGlsbGVnYWwgY29kZSB2YWx1ZSwgdXNlIGNvbXBsZXRlbHkgaWdub3JlYWJsZSEKKyAgICAgICAgICAgIHJldHVybiBJR05PUkFCTEU7CisgICAgICAgIH0KKyAgICAgICAgaW50IHJlc3VsdCA9IGdldEltcGxpY2l0UHJpbWFyeShjb2RlcG9pbnQpOworICAgICAgICBtX0NFQnVmZmVyX1swXSA9IChyZXN1bHQgJiBSdWxlQmFzZWRDb2xsYXRvci5DRV9QUklNQVJZX01BU0tfKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IDB4MDAwMDA1MDU7CisgICAgICAgIG1fQ0VCdWZmZXJfWzFdID0gKChyZXN1bHQgJiAweDAwMDBGRkZGKSA8PCAxNikgfCAweDAwMDAwMEMwOworICAgICAgICBtX0NFQnVmZmVyT2Zmc2V0XyA9IDE7CisgICAgICAgIG1fQ0VCdWZmZXJTaXplXyA9IDI7CisgICAgICAgIHJldHVybiBtX0NFQnVmZmVyX1swXTsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG5leHQgY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc3Vycm9nYXRlIGNoYXJhY3RlcnMKKyAgICAgKiBAcGFyYW0gY2ggY3VycmVudCBjaGFyYWN0ZXIKKyAgICAgKiBAcmV0dXJuIGNlCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbmV4dFN1cnJvZ2F0ZShjaGFyIGNoKQorICAgIHsKKyAgICAgICAgY2hhciBuZXh0Y2ggPSBuZXh0Q2hhcigpOworICAgICAgICBpZiAobmV4dGNoICE9IENoYXJhY3Rlckl0ZXJhdG9yLkRPTkUgJiYgCisgICAgICAgICAgICBVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKG5leHRjaCkpIHsKKyAgICAgICAgICAgIGludCBjb2RlcG9pbnQgPSBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeShjaCwgbmV4dGNoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0SW1wbGljaXQoY29kZXBvaW50KTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKG5leHRjaCAhPSBDaGFyYWN0ZXJJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICBwcmV2aW91c0NoYXIoKTsgLy8gcmV2ZXJ0cyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwb3NpdGlvbgorICAgICAgICB9CisgICAgICAgIHJldHVybiBJR05PUkFCTEU7IC8vIGNvbXBsZXRlbHkgaWdub3JhYmxlCisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuZXh0IGNlIGZvciBhIGhhbmd1bCBjaGFyYWN0ZXIsIHRoaXMgaXMgYW4gaW1wbGljaXQgCisgICAgICogY2FsY3VsYXRpb24KKyAgICAgKiBAcGFyYW0gY29sbGF0b3IgY3VycmVudCBjb2xsYXRvcgorICAgICAqIEBwYXJhbSBjaCBjdXJyZW50IGNoYXJhY3RlcgorICAgICAqIEByZXR1cm4gaGFuZ3VsIGNlCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbmV4dEhhbmd1bChSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciwgY2hhciBjaCkKKyAgICB7CisgICAgICAgIGNoYXIgTCA9IChjaGFyKShjaCAtIEhBTkdVTF9TQkFTRV8pOworICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBkaXZpZGUgaW50byBwaWVjZXMKKyAgICAgICAgLy8gZG8gaXQgaW4gdGhpcyBvcmRlciBzaW5jZSBzb21lIGNvbXBpbGVycyBjYW4gZG8gJSBhbmQgLyBpbiBvbmUgCisgICAgICAgIC8vIG9wZXJhdGlvbgorICAgICAgICBjaGFyIFQgPSAoY2hhcikoTCAlIEhBTkdVTF9UQ09VTlRfKTsgCisgICAgICAgIEwgLz0gSEFOR1VMX1RDT1VOVF87CisgICAgICAgIGNoYXIgViA9IChjaGFyKShMICUgSEFOR1VMX1ZDT1VOVF8pOworICAgICAgICBMIC89IEhBTkdVTF9WQ09VTlRfOworICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBvZmZzZXQgdGhlbQorICAgICAgICBMICs9IEhBTkdVTF9MQkFTRV87CisgICAgICAgIFYgKz0gSEFOR1VMX1ZCQVNFXzsKKyAgICAgICAgVCArPSBIQU5HVUxfVEJBU0VfOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIC8vIHJldHVybiB0aGUgZmlyc3QgQ0UsIGJ1dCBmaXJzdCBwdXQgdGhlIHJlc3QgaW50byB0aGUgZXhwYW5zaW9uIAorICAgICAgICAvLyBidWZmZXIKKyAgICAgICAgbV9DRUJ1ZmZlclNpemVfID0gMDsKKyAgICAgICAgaWYgKCFjb2xsYXRvci5tX2lzSmFtb1NwZWNpYWxfKSB7IC8vIEZBU1QgUEFUSAorICAgICAgICAgICAgbV9DRUJ1ZmZlcl9bbV9DRUJ1ZmZlclNpemVfICsrXSA9IAorICAgICAgICAgICAgICAgIGNvbGxhdG9yLm1fdHJpZV8uZ2V0TGVhZFZhbHVlKEwpOworICAgICAgICAgICAgbV9DRUJ1ZmZlcl9bbV9DRUJ1ZmZlclNpemVfICsrXSA9IAorICAgICAgICAgICAgICAgIGNvbGxhdG9yLm1fdHJpZV8uZ2V0TGVhZFZhbHVlKFYpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoVCAhPSBIQU5HVUxfVEJBU0VfKSB7CisgICAgICAgICAgICAgICAgbV9DRUJ1ZmZlcl9bbV9DRUJ1ZmZlclNpemVfICsrXSA9IAorICAgICAgICAgICAgICAgICAgICBjb2xsYXRvci5tX3RyaWVfLmdldExlYWRWYWx1ZShUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fQ0VCdWZmZXJPZmZzZXRfID0gMTsKKyAgICAgICAgICAgIHJldHVybiBtX0NFQnVmZmVyX1swXTsKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgLy8gSmFtbyBpcyBTcGVjaWFsCisgICAgICAgICAgICAvLyBTaW5jZSBIYW5ndWxzIHBhc3MgdGhlIEZDRCBjaGVjaywgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIAorICAgICAgICAgICAgLy8gd29uJ3QgYmUgaW4gdGhlIG5vcm1hbGl6YXRpb24gYnVmZmVyIGlmIHNvbWV0aGluZyBsaWtlIHRoaXMgCisgICAgICAgICAgICAvLyBoYXBwZW5zCisgICAgICAgICAgICAvLyBNb3ZlIEphbW9zIGludG8gbm9ybWFsaXphdGlvbiBidWZmZXIKKyAgICAgICAgICAgIG1fYnVmZmVyXy5hcHBlbmQoKGNoYXIpTCk7CisgICAgICAgICAgICBtX2J1ZmZlcl8uYXBwZW5kKChjaGFyKVYpOworICAgICAgICAgICAgaWYgKFQgIT0gSEFOR1VMX1RCQVNFXykgeworICAgICAgICAgICAgICAgIG1fYnVmZmVyXy5hcHBlbmQoKGNoYXIpVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX0ZDRExpbWl0XyA9IG1fc291cmNlXy5nZXRJbmRleCgpOyAgCisgICAgICAgICAgICBtX0ZDRFN0YXJ0XyA9IG1fRkNETGltaXRfIC0gMTsKKyAgICAgICAgICAgIC8vIEluZGljYXRlIHdoZXJlIHRvIGNvbnRpbnVlIGluIG1haW4gaW5wdXQgc3RyaW5nIGFmdGVyIAorICAgICAgICAgICAgLy8gZXhoYXVzdGluZyB0aGUgYnVmZmVyCisgICAgICAgICAgICByZXR1cm4gSUdOT1JBQkxFOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiA8cD5TcGVjaWFsIENFIG1hbmFnZW1lbnQuIEV4cGFuc2lvbnMsIGNvbnRyYWN0aW9ucyBldGMuLi48L3A+CisgICAgICogQHBhcmFtIGNvbGxhdG9yIGNhbiBiZSBwbGFpbiBVQ0EgCisgICAgICogQHBhcmFtIGNlIGN1cnJlbnQgY2UKKyAgICAgKiBAcGFyYW0gY2ggY3VycmVudCBjaGFyYWN0ZXIKKyAgICAgKiBAcmV0dXJuIG5leHQgc3BlY2lhbCBjZQorICAgICAqLworICAgIHByaXZhdGUgaW50IG5leHRTcGVjaWFsKFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yLCBpbnQgY2UsIGNoYXIgY2gpIAorICAgIHsKKyAgICAgICAgaW50IGNvZGVwb2ludCA9IGNoOworICAgICAgICBCYWNrdXAgZW50cnliYWNrdXAgPSBtX3V0aWxTcGVjaWFsRW50cnlCYWNrVXBfOworICAgICAgICAvLyB0aGlzIGlzIHRvIGhhbmRsZSByZWN1cnNpdmUgbG9vcGluZworICAgICAgICBpZiAoZW50cnliYWNrdXAgIT0gbnVsbCkgeworICAgICAgICAgICAgbV91dGlsU3BlY2lhbEVudHJ5QmFja1VwXyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbnRyeWJhY2t1cCA9IG5ldyBCYWNrdXAoKTsKKyAgICAgICAgfQorICAgICAgICBiYWNrdXBJbnRlcm5hbFN0YXRlKGVudHJ5YmFja3VwKTsKKyAgICAgICAgdHJ5IHsgLy8gZm9yY2VzIGl0IHRvIGFzc2lnbiBtX3V0aWxTcGVjaWFsRW50cnlCYWNrdXBfCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgbG9vcCB3aWxsIHJlcGVhdCBvbmx5IGluIHRoZSBjYXNlIG9mIGNvbnRyYWN0aW9ucywgCisgICAgICAgICAgICAgICAgLy8gc3Vycm9nYXRlCisgICAgICAgICAgICAgICAgc3dpdGNoKFJ1bGVCYXNlZENvbGxhdG9yLmdldFRhZyhjZSkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENFX05PVF9GT1VORF9UQUdfOgorICAgICAgICAgICAgICAgICAgICAvLyBpbXBvc3NpYmxlIGNhc2UgZm9yIGljdTRqCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjZTsKKyAgICAgICAgICAgICAgICBjYXNlIFJ1bGVCYXNlZENvbGxhdG9yLkNFX1NVUlJPR0FURV9UQUdfOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElHTk9SQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiYWNrdXBJbnRlcm5hbFN0YXRlKG1fdXRpbFNwZWNpYWxCYWNrVXBfKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciB0cmFpbCA9IG5leHRDaGFyKCk7CisgICAgICAgICAgICAgICAgICAgIGNlID0gbmV4dFN1cnJvZ2F0ZShjb2xsYXRvciwgY2UsIHRyYWlsKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnQgdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAvLyBpZiBzdXJyb2dhdGUgd2FzIG5vdCB0YWlsb3JlZCB3ZSBnbyBvbmUgbW9yZSByb3VuZAorICAgICAgICAgICAgICAgICAgICBjb2RlcG9pbnQgPSAKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRSYXdTdXBwbGVtZW50YXJ5KGNoLCB0cmFpbCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0VfVEhBSV9UQUdfOgorICAgICAgICAgICAgICAgICAgICBjZSA9IG5leHRUaGFpKGNvbGxhdG9yLCBjZSwgY2gpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENFX1NQRUNfUFJPQ19UQUdfOgorICAgICAgICAgICAgICAgICAgICBjZSA9IG5leHRTcGVjaWFsUHJlZml4KGNvbGxhdG9yLCBjZSwgZW50cnliYWNrdXApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENFX0NPTlRSQUNUSU9OX1RBR186CisgICAgICAgICAgICAgICAgICAgIGNlID0gbmV4dENvbnRyYWN0aW9uKGNvbGxhdG9yLCBjZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0VfTE9OR19QUklNQVJZX1RBR186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0TG9uZ1ByaW1hcnkoY2UpOworICAgICAgICAgICAgICAgIGNhc2UgQ0VfRVhQQU5TSU9OX1RBR186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0RXhwYW5zaW9uKGNvbGxhdG9yLCBjZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlvdXMgaW1wbGljaXRzIG9wdGltaXphdGlvbgorICAgICAgICAgICAgICAgIGNhc2UgQ0VfQ0pLX0lNUExJQ0lUX1RBR186ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAweDM0MDAtMHg0REI1LCAweDRFMDAtMHg5RkE1LCAweEY5MDAtMHhGQTJECisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0SW1wbGljaXQoY29kZXBvaW50KTsKKyAgICAgICAgICAgICAgICBjYXNlIENFX0lNUExJQ0lUX1RBR186IC8vIGV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgZGVmaW5lZCAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRJbXBsaWNpdChjb2RlcG9pbnQpOworICAgICAgICAgICAgICAgIGNhc2UgQ0VfVFJBSUxfU1VSUk9HQVRFX1RBR186IAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSUdOT1JBQkxFOyAvLyBEQzAwLURGRkYgYnJva2VuIHN1cnJvZ2F0ZQorICAgICAgICAgICAgICAgIGNhc2UgQ0VfTEVBRF9TVVJST0dBVEVfVEFHXzogIC8vIEQ4MDAtREJGRgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dFN1cnJvZ2F0ZShjaCk7CisgICAgICAgICAgICAgICAgY2FzZSBDRV9IQU5HVUxfU1lMTEFCTEVfVEFHXzogLy8gQUMwMC1EN0FGCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0SGFuZ3VsKGNvbGxhdG9yLCBjaCk7CisgICAgICAgICAgICAgICAgY2FzZSBDRV9DSEFSU0VUX1RBR186CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgeWV0IGltcGxlbWVudGVkIHByb2JhYmx5IGFmdGVyIDEuOAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0VfTk9UX0ZPVU5EXzsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBjZSA9IElHTk9SQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgLy8gc3lud2VlIHRvZG8sIHRocm93IGV4Y2VwdGlvbiBvciBzb21ldGhpbmcgaGVyZS4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFSdWxlQmFzZWRDb2xsYXRvci5pc1NwZWNpYWwoY2UpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIG1fdXRpbFNwZWNpYWxFbnRyeUJhY2tVcF8gPSBlbnRyeWJhY2t1cDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2U7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBHZXR0aW5nIHRoZSBwcmV2aW91cyBUaGFpIGNlCisgICAgICogQHBhcmFtIGNvbGxhdG9yIGN1cnJlbnQgY29sbGF0b3IKKyAgICAgKiBAcGFyYW0gY2ggY3VycmVudCBjaGFyYWN0ZXIKKyAgICAgKiBAcmV0dXJuIHByZXZpb3VzIFRoYWkgY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBwcmV2aW91c1RoYWkoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IsIGludCBjZSwgY2hhciBjaCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlck9mZnNldF8gPj0gMCB8fCBtX3NvdXJjZV8uZ2V0SW5kZXgoKSA9PSAwKSB7CisgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGFscmVhZHkgc3dhcHBlZCBvciBhdCB0aGUgc3RhcnQgb2YgdGhlIHNvdXJjZQorICAgICAgICAgICAgLy8gVHJlYXQgVGhhaSBhcyBhIGxlbmd0aCBvbmUgZXhwYW5zaW9uCisgICAgICAgICAgICByZXR1cm4gY29sbGF0b3IubV9leHBhbnNpb25fW2dldEV4cGFuc2lvbk9mZnNldChjb2xsYXRvciwgY2UpXTsKKyAgICAgICAgfQorICAgICAgICBjaGFyIHByZXZjaCA9IHByZXZpb3VzQ2hhcigpOworICAgICAgICBpZiAoIWlzVGhhaVByZVZvd2VsKHByZXZjaCkpIHsKKyAgICAgICAgICAgIC8vIHdlIG5vdyByZWFycmFuZ2UgdW5jb25kaXRpb25hbGx5IGRvIG5vdCBjaGVjayBmb3IgYmFzZSBjb25zb25hbnQKKyAgICAgICAgICAgIGlmIChwcmV2Y2ggIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgICAgIG5leHRDaGFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUcmVhdCBUaGFpIGFzIGEgbGVuZ3RoIG9uZSBleHBhbnNpb24KKyAgICAgICAgICAgIHJldHVybiBjb2xsYXRvci5tX2V4cGFuc2lvbl9bZ2V0RXhwYW5zaW9uT2Zmc2V0KGNvbGxhdG9yLCBjZSldOyAgIAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBNb3ZlIHRoZSBwcmV2b3dlbCBhbmQgdGhlIGZvbGxvd2luZyBiYXNlIENvbnNvbmFudCBpbnRvIHRoZQorICAgICAgICAvLyBub3JtYWxpemF0aW9uIGJ1ZmZlciB3aXRoIHRoZWlyIG9yZGVyIHN3YXBwZWQKKyAgICAgICAgLy8gYnVmZmVyIGlzIGFsd2F5cyBjbGVhbiB3aGVuIHdlIGFyZSBpbiB0aGUgc291cmNlIHN0cmluZworICAgICAgICBtX2J1ZmZlcl8uYXBwZW5kKGNoKTsKKyAgICAgICAgbV9idWZmZXJfLmFwcGVuZChwcmV2Y2gpOworICAgICAgICBtX2J1ZmZlck9mZnNldF8gPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChtX3NvdXJjZV8uZ2V0SW5kZXgoKSA9PSAwKSB7CisgICAgICAgICAgICBtX0ZDRFN0YXJ0XyA9IDA7CisgICAgICAgICAgICBtX0ZDRExpbWl0XyA9IDI7CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9GQ0RTdGFydF8gPSBtX3NvdXJjZV8uZ2V0SW5kZXgoKTsKKyAgICAgICAgICAgIG1fRkNETGltaXRfID0gbV9GQ0RTdGFydF8gKyAyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gSUdOT1JBQkxFOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogU3BlY2lhbCBwcm9jZXNzaW5nIGlzIGdldHRpbmcgYSBDRSB0aGF0IGlzIHByZWNlZGVkIGJ5IGEgY2VydGFpbiBwcmVmaXguCisgICAgICogQ3VycmVudGx5IHRoaXMgaXMgb25seSBuZWVkZWQgZm9yIG9wdGltaXppbmcgSmFwYW5lc2UgbGVuZ3RoIGFuZCAKKyAgICAgKiBpdGVyYXRpb24gbWFya3MuIFdoZW4gd2UgZW5jb3V0ZXIgYSBzcGVjaWFsIHByb2Nlc3NpbmcgdGFnLCB3ZSBnbyAKKyAgICAgKiBiYWNrd2FyZHMgYW5kIHRyeSB0byBzZWUgaWYgd2UgaGF2ZSBhIG1hdGNoLiBDb250cmFjdGlvbiB0YWJsZXMgYXJlIHVzZWQgCisgICAgICogLSBzbyB0aGUgd2hvbGUgcHJvY2VzcyBpcyBub3QgdW5saWtlIGNvbnRyYWN0aW9uLiBwcmVmaXggZGF0YSBpcyBzdG9yZWQgCisgICAgICogYmFja3dhcmRzIGluIHRoZSB0YWJsZS4KKyAgICAgKiBAcGFyYW0gY29sbGF0b3IgY3VycmVudCBjb2xsYXRvcgorICAgICAqIEBwYXJhbSBjZSBjdXJyZW50IGNlCisgICAgICogQHJldHVybiBwcmV2aW91cyBjZQorICAgICAqLworICAgIHByaXZhdGUgaW50IHByZXZpb3VzU3BlY2lhbFByZWZpeChSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciwgaW50IGNlKQorICAgIHsKKyAgICAgICAgYmFja3VwSW50ZXJuYWxTdGF0ZShtX3V0aWxTcGVjaWFsQmFja1VwXyk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBwb3NpdGlvbiBvdXJzZWx2ZXMgYXQgdGhlIGJlZ2luaW5nIG9mIGNvbnRyYWN0aW9uIHNlcXVlbmNlIAorICAgICAgICAgICAgaW50IG9mZnNldCA9IGdldENvbnRyYWN0aW9uT2Zmc2V0KGNvbGxhdG9yLCBjZSk7CisgICAgICAgICAgICBpbnQgZW50cnlvZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICBpZiAoaXNCYWNrd2FyZHNTdGFydCgpKSB7CisgICAgICAgICAgICAgICAgY2UgPSBjb2xsYXRvci5tX2NvbnRyYWN0aW9uQ0VfW29mZnNldF07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyIHByZXZjaCA9IHByZXZpb3VzQ2hhcigpOworICAgICAgICAgICAgd2hpbGUgKHByZXZjaCA+IGNvbGxhdG9yLm1fY29udHJhY3Rpb25JbmRleF9bb2Zmc2V0XSkgeyAKKyAgICAgICAgICAgICAgICAvLyBzaW5jZSBjb250cmFjdGlvbiBjb2RlcG9pbnRzIGFyZSBvcmRlcmVkLCB3ZSBza2lwIGFsbCB0aGF0IAorICAgICAgICAgICAgICAgIC8vIGFyZSBzbWFsbGVyCisgICAgICAgICAgICAgICAgb2Zmc2V0ICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByZXZjaCA9PSBjb2xsYXRvci5tX2NvbnRyYWN0aW9uSW5kZXhfW29mZnNldF0pIHsKKyAgICAgICAgICAgICAgICBjZSA9IGNvbGxhdG9yLm1fY29udHJhY3Rpb25DRV9bb2Zmc2V0XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgY29tcGxldGVseSBpZ25vcmFibGUgY29kZSBwb2ludCBpbiB0aGUgbWlkZGxlIAorICAgICAgICAgICAgICAgIC8vIG9mIGEgcHJlZml4LCB3ZSBuZWVkIHRvIGFjdCBhcyBpZiBpdCdzIG5vdCB0aGVyZSBhc3N1bXB0aW9uOiAKKyAgICAgICAgICAgICAgICAvLyAncmVhbCcgbm9uY2hhcmFjdGVycyAoKmZmZmUsICpmZmZmLCBmZGQwLWZkZWYgYXJlIHNldCB0byAKKyAgICAgICAgICAgICAgICAvLyB6ZXJvKSAKKyAgICAgICAgICAgICAgICAvLyBsb25lIHN1cnJvZ2F0ZXMgY2Fubm90IGJlIHNldCB0byB6ZXJvIGFzIGl0IHdvdWxkIGJyZWFrIAorICAgICAgICAgICAgICAgIC8vIG90aGVyIHByb2Nlc3NpbmcgCisgICAgICAgICAgICAgICAgaW50IGlzWmVyb0NFID0gY29sbGF0b3IubV90cmllXy5nZXRMZWFkVmFsdWUocHJldmNoKTsgCisgICAgICAgICAgICAgICAgLy8gaXQncyBlYXN5IGZvciBCTVAgY29kZSBwb2ludHMgCisgICAgICAgICAgICAgICAgaWYgKGlzWmVyb0NFID09IDApIHsgCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFVURjE2LmlzVHJhaWxTdXJyb2dhdGUocHJldmNoKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCBVVEYxNi5pc0xlYWRTdXJyb2dhdGUocHJldmNoKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMsIHdlIGhhdmUgdG8gY2hlY2sgdGhlIG5leHQgb25lIAorICAgICAgICAgICAgICAgICAgICAvLyBzaXR1YXRpb25zIHdoZXJlIHdlIGFyZSBnb2luZyB0byBpZ25vcmUgCisgICAgICAgICAgICAgICAgICAgIC8vIDEuIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nOiBzY2hhciBpcyBhIGxvbmUgc3Vycm9nYXRlIAorICAgICAgICAgICAgICAgICAgICAvLyAyLiBzY2hhciBpcyBhIGxvbmUgc3Vycm9nYXRlIAorICAgICAgICAgICAgICAgICAgICAvLyAzLiBzY2hhciBpcyBhIHRyYWlsIHN1cnJvZ2F0ZSBpbiBhIHZhbGlkIHN1cnJvZ2F0ZSAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgc2VxdWVuY2UgdGhhdCBpcyBleHBsaWNpdGx5IHNldCB0byB6ZXJvLiAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0JhY2t3YXJkc1N0YXJ0KCkpIHsgCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGxlYWQgPSBwcmV2aW91c0NoYXIoKTsgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGxlYWQpKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzWmVyb0NFID0gY29sbGF0b3IubV90cmllXy5nZXRMZWFkVmFsdWUobGVhZCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSdWxlQmFzZWRDb2xsYXRvci5nZXRUYWcoaXNaZXJvQ0UpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBSdWxlQmFzZWRDb2xsYXRvci5DRV9TVVJST0dBVEVfVEFHXykgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbmFsQ0UgPSBjb2xsYXRvci5tX3RyaWVfLmdldFRyYWlsVmFsdWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzWmVyb0NFICYgMHhGRkZGRkYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Y2gpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsQ0UgPT0gMCkgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYSByZWFsLCBhc3NpZ25lZCBjb21wbGV0ZWx5IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JhYmxlIGNvZGUgcG9pbnQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q2hhcigpOyAvLyByZXZlcnQgdG8gb3JpZ2luYWwgb2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9uZSBzdXJyb2dhdGUsIGNvbXBsZXRlbHkgaWdub3JhYmxlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q2hhcigpOyAvLyByZXZlcnQgdG8gb3JpZ2luYWwgb2Zmc2V0CisgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb25lIHN1cnJvZ2F0ZSBhdCB0aGUgYmVnZ2luaW5nLCBjb21wbGV0ZWx5IGlnbm9yYWJsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgCisgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfSAKKworICAgICAgICAgICAgICAgIC8vIGNoYXIgd2FzIG5vdCBpbiB0aGUgdGFibGUuIHByZWZpeCBub3QgZm91bmQKKyAgICAgICAgICAgICAgICBjZSA9IGNvbGxhdG9yLm1fY29udHJhY3Rpb25DRV9bZW50cnlvZmZzZXRdOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGlmICghaXNTcGVjaWFsUHJlZml4VGFnKGNlKSkgeworICAgICAgICAgICAgICAgIC8vIGNoYXIgd2FzIGluIHRoZSBjb250cmFjdGlvbiB0YWJsZSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNlIAorICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBhIHByZWZpeCBjZS4gIFdlIGZvdW5kIHRoZSBwcmVmaXgsIGJyZWFrIG91dCBvZiBsb29wLCAKKyAgICAgICAgICAgICAgICAvLyB0aGlzIGNlIHdpbGwgZW5kIHVwIGJlaW5nIHJldHVybmVkLiAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKG1fdXRpbFNwZWNpYWxCYWNrVXBfKTsKKyAgICAgICAgcmV0dXJuIGNlOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0cmlldmVzIHRoZSBwcmV2aW91cyBjb250cmFjdGlvbiBjZS4gVG8gZW5zdXJlIHRoYXQgdGhlIGJhY2t3YXJkcyBhbmQgCisgICAgICogZm9yd2FyZHMgaXRlcmF0aW9uIG1hdGNoZXMsIHdlIHRha2UgdGhlIGN1cnJlbnQgcmVnaW9uIG9mIG1vc3QgcG9zc2libGUgCisgICAgICogbWF0Y2ggYW5kIHBhc3MgaXQgdGhyb3VnaCB0aGUgZm9yd2FyZCBpdGVyYXRpb24uIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCAKKyAgICAgKiB0aGUgb2JzdGluYXRlIHByb2JsZW0gb2Ygb3ZlcmxhcHBpbmcgY29udHJhY3Rpb25zIHdpbGwgbm90IG9jY3VyLgorICAgICAqIEBwYXJhbSBjb2xsYXRvciBjdXJyZW50IGNvbGxhdG9yCisgICAgICogQHBhcmFtIGNlIGN1cnJlbnQgY2UKKyAgICAgKiBAcGFyYW0gY2ggY3VycmVudCBjaGFyYWN0ZXIKKyAgICAgKiBAcmV0dXJuIHByZXZpb3VzIGNvbnRyYWN0aW9uIGNlCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcHJldmlvdXNDb250cmFjdGlvbihSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciwgaW50IGNlLCBjaGFyIGNoKQorICAgIHsKKyAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5zZXRMZW5ndGgoMCk7CisgICAgICAgIHdoaWxlIChjb2xsYXRvci5pc1Vuc2FmZShjaCkpIHsKKyAgICAgICAgICAgIG1fdXRpbFN0cmluZ0J1ZmZlcl8uaW5zZXJ0KDAsIGNoKTsKKyAgICAgICAgICAgIGNoID0gcHJldmlvdXNDaGFyKCk7CisgICAgICAgICAgICBpZiAoaXNCYWNrd2FyZHNTdGFydCgpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gYWRkcyB0aGUgaW5pdGlhbCBiYXNlIGNoYXJhY3RlciB0byB0aGUgc3RyaW5nCisgICAgICAgIG1fdXRpbFN0cmluZ0J1ZmZlcl8uaW5zZXJ0KDAsIGNoKTsgICAKKyAgICAgICAgCisgICAgICAgIC8vIGEgbmV3IGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yIGlzIHVzZWQgdG8gc2ltcGx5IHRoaW5ncywgc2luY2UgCisgICAgICAgIC8vIHVzaW5nIHRoZSBjdXJyZW50IGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yIHdpbGwgbWVhbiB0aGF0IHRoZSAKKyAgICAgICAgLy8gZm9yd2FyZCBhbmQgYmFja3dhcmRzIGl0ZXJhdGlvbiB3aWxsIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHNhbWUgCisgICAgICAgIC8vIGJ1ZmZlcnMuIGl0IGlzIGdvaW5nIHRvIGJlIHBhaW5mdWwuIAorICAgICAgICBpbnQgb3JpZ2luYWxkZWNvbXAgPSBjb2xsYXRvci5nZXREZWNvbXBvc2l0aW9uKCk7CisgICAgICAgIC8vIGZvciBmYXN0ZXIgYWNjZXNzLCBzaW5jZSBzdHJpbmcgd291bGQgaGF2ZSBiZWVuIG5vcm1hbGl6ZWQgYWJvdmUKKyAgICAgICAgY29sbGF0b3Iuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5OT19ERUNPTVBPU0lUSU9OKTsgCisgICAgICAgIGlmIChtX3V0aWxDb2xFSXRlcl8gPT0gbnVsbCkgeworICAgICAgICAgICAgbV91dGlsQ29sRUl0ZXJfID0gbmV3IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbFN0cmluZ0J1ZmZlcl8udG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhdG9yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fdXRpbENvbEVJdGVyXy5tX2NvbGxhdG9yXyA9IGNvbGxhdG9yOworICAgICAgICAgICAgbV91dGlsQ29sRUl0ZXJfLnNldFRleHQobV91dGlsU3RyaW5nQnVmZmVyXy50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICBjZSA9IG1fdXRpbENvbEVJdGVyXy5uZXh0KCk7CisgICAgICAgIG1fQ0VCdWZmZXJTaXplXyA9IDA7CisgICAgICAgIHdoaWxlIChjZSAhPSBOVUxMT1JERVIpIHsKKyAgICAgICAgICAgIGlmIChtX0NFQnVmZmVyU2l6ZV8gPT0gbV9DRUJ1ZmZlcl8ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2luZyBjZWJ1ZmZlciBzaXplCisgICAgICAgICAgICAgICAgICAgIGludCB0ZW1wYnVmZmVyW10gPSBuZXcgaW50W21fQ0VCdWZmZXJfLmxlbmd0aCArIDUwXTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtX0NFQnVmZmVyXywgMCwgdGVtcGJ1ZmZlciwgMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9DRUJ1ZmZlcl8ubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9DRUJ1ZmZlcl8gPSB0ZW1wYnVmZmVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTExPUkRFUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX0NFQnVmZmVyX1ttX0NFQnVmZmVyU2l6ZV8gKytdID0gY2U7CisgICAgICAgICAgICBjZSA9IG1fdXRpbENvbEVJdGVyXy5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgY29sbGF0b3Iuc2V0RGVjb21wb3NpdGlvbihvcmlnaW5hbGRlY29tcCk7ICAgICAgIAorICAgICAgICBtX0NFQnVmZmVyT2Zmc2V0XyA9IG1fQ0VCdWZmZXJTaXplXyAtIDE7CisgICAgICAgIHJldHVybiBtX0NFQnVmZmVyX1ttX0NFQnVmZmVyT2Zmc2V0X107CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBsb25nIHByaW1hcnkgY2VzCisgICAgICogQHBhcmFtIGNlIGxvbmcgcHJpbWFyeSBjZQorICAgICAqIEByZXR1cm4gcHJldmlvdXMgbG9uZyBwcmltYXJ5IGNlcworICAgICAqLworICAgIHByaXZhdGUgaW50IHByZXZpb3VzTG9uZ1ByaW1hcnkoaW50IGNlKQorICAgIHsKKyAgICAgICAgbV9DRUJ1ZmZlclNpemVfID0gMDsKKyAgICAgICAgbV9DRUJ1ZmZlcl9bbV9DRUJ1ZmZlclNpemVfICsrXSA9IAorICAgICAgICAgICAgKChjZSAmIDB4RkZGRjAwKSA8PCA4KSB8IChDRV9CWVRFX0NPTU1PTl8gPDwgOCkgfCBDRV9CWVRFX0NPTU1PTl87CisgICAgICAgIG1fQ0VCdWZmZXJfW21fQ0VCdWZmZXJTaXplXyArK10gPSAoKGNlICYgMHhGRikgPDwgMjQpIAorICAgICAgICAgICAgfCBSdWxlQmFzZWRDb2xsYXRvci5DRV9DT05USU5VQVRJT05fTUFSS0VSXzsKKyAgICAgICAgbV9DRUJ1ZmZlck9mZnNldF8gPSBtX0NFQnVmZmVyU2l6ZV8gLSAxOworICAgICAgICByZXR1cm4gbV9DRUJ1ZmZlcl9bbV9DRUJ1ZmZlck9mZnNldF9dOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgcHJldmlvdXMgZXhwYW5zaW9uIGNlcworICAgICAqIEBwYXJhbSBjb2xsYXRvciBjdXJyZW50IGNvbGxhdG9yCisgICAgICogQHBhcmFtIGNlIGN1cnJlbnQgY2UKKyAgICAgKiBAcmV0dXJuIHByZXZpb3VzIGV4cGFuc2lvbiBjZQorICAgICAqLworICAgIHByaXZhdGUgaW50IHByZXZpb3VzRXhwYW5zaW9uKFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yLCBpbnQgY2UpCisgICAgeworICAgICAgICAvLyBmaW5kIHRoZSBvZmZzZXQgdG8gZXhwYW5zaW9uIHRhYmxlCisgICAgICAgIGludCBvZmZzZXQgPSBnZXRFeHBhbnNpb25PZmZzZXQoY29sbGF0b3IsIGNlKTsKKyAgICAgICAgbV9DRUJ1ZmZlclNpemVfID0gZ2V0RXhwYW5zaW9uQ291bnQoY2UpOworICAgICAgICBpZiAobV9DRUJ1ZmZlclNpemVfICE9IDApIHsKKyAgICAgICAgICAgIC8vIGxlc3MgdGhhbiAxNiBlbGVtZW50cyBpbiBleHBhbnNpb24KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9DRUJ1ZmZlclNpemVfOyBpICsrKSB7CisgICAgICAgICAgICAgICAgbV9DRUJ1ZmZlcl9baV0gPSBjb2xsYXRvci5tX2V4cGFuc2lvbl9bb2Zmc2V0ICsgaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBudWxsIHRlcm1pbmF0ZWQgY2VzCisgICAgICAgICAgICB3aGlsZSAoY29sbGF0b3IubV9leHBhbnNpb25fW29mZnNldCArIG1fQ0VCdWZmZXJTaXplX10gIT0gMCkgeworICAgICAgICAgICAgICAgIG1fQ0VCdWZmZXJfW21fQ0VCdWZmZXJTaXplX10gPSAKKyAgICAgICAgICAgICAgICAgICAgY29sbGF0b3IubV9leHBhbnNpb25fW29mZnNldCArIG1fQ0VCdWZmZXJTaXplX107CisgICAgICAgICAgICAgICAgbV9DRUJ1ZmZlclNpemVfICsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fQ0VCdWZmZXJPZmZzZXRfID0gbV9DRUJ1ZmZlclNpemVfIC0gMTsKKyAgICAgICAgcmV0dXJuIG1fQ0VCdWZmZXJfW21fQ0VCdWZmZXJPZmZzZXRfXTsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgcHJldmlvdXMgaGFuZ3VsIGNlcworICAgICAqIEBwYXJhbSBjb2xsYXRvciBjdXJyZW50IGNvbGxhdG9yCisgICAgICogQHBhcmFtIGNoIGN1cnJlbnQgY2hhcmFjdGVyCisgICAgICogQHJldHVybiBwcmV2aW91cyBoYW5ndWwgY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBwcmV2aW91c0hhbmd1bChSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciwgY2hhciBjaCkKKyAgICB7CisgICAgICAgIGNoYXIgTCA9IChjaGFyKShjaCAtIEhBTkdVTF9TQkFTRV8pOworICAgICAgICAvLyB3ZSBkbyBpdCBpbiB0aGlzIG9yZGVyIHNpbmNlIHNvbWUgY29tcGlsZXJzIGNhbiBkbyAlIGFuZCAvIGluIG9uZQorICAgICAgICAvLyBvcGVyYXRpb24KKyAgICAgICAgY2hhciBUID0gKGNoYXIpKEwgJSBIQU5HVUxfVENPVU5UXyk7CisgICAgICAgIEwgLz0gSEFOR1VMX1RDT1VOVF87CisgICAgICAgIGNoYXIgViA9IChjaGFyKShMICUgSEFOR1VMX1ZDT1VOVF8pOworICAgICAgICBMIC89IEhBTkdVTF9WQ09VTlRfOworICAgICAgICAKKyAgICAgICAgLy8gb2Zmc2V0IHRoZW0KKyAgICAgICAgTCArPSBIQU5HVUxfTEJBU0VfOworICAgICAgICBWICs9IEhBTkdVTF9WQkFTRV87CisgICAgICAgIFQgKz0gSEFOR1VMX1RCQVNFXzsKKyAgICAgICAgCisgICAgICAgIG1fQ0VCdWZmZXJTaXplXyA9IDA7CisgICAgICAgIGlmICghY29sbGF0b3IubV9pc0phbW9TcGVjaWFsXykgeworICAgICAgICAgICAgbV9DRUJ1ZmZlcl9bbV9DRUJ1ZmZlclNpemVfICsrXSA9CisgICAgICAgICAgICAgICAgY29sbGF0b3IubV90cmllXy5nZXRMZWFkVmFsdWUoTCk7CisgICAgICAgICAgICBtX0NFQnVmZmVyX1ttX0NFQnVmZmVyU2l6ZV8gKytdID0KKyAgICAgICAgICAgICAgICBjb2xsYXRvci5tX3RyaWVfLmdldExlYWRWYWx1ZShWKTsKKyAgICAgICAgICAgIGlmIChUICE9IEhBTkdVTF9UQkFTRV8pIHsKKyAgICAgICAgICAgICAgICBtX0NFQnVmZmVyX1ttX0NFQnVmZmVyU2l6ZV8gKytdID0KKyAgICAgICAgICAgICAgICAgICAgY29sbGF0b3IubV90cmllXy5nZXRMZWFkVmFsdWUoVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX0NFQnVmZmVyT2Zmc2V0XyA9IG1fQ0VCdWZmZXJTaXplXyAtIDE7CisgICAgICAgICAgICByZXR1cm4gbV9DRUJ1ZmZlcl9bbV9DRUJ1ZmZlck9mZnNldF9dOworICAgICAgICB9IAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIEhhbmd1bHMgcGFzcyB0aGUgRkNEIGNoZWNrLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgd2Ugd29uJ3QgCisgICAgICAgICAgICAvLyBiZSBpbiB0aGUgbm9ybWFsaXphdGlvbiBidWZmZXIgaWYgc29tZXRoaW5nIGxpa2UgdGhpcyBoYXBwZW5zCisgICAgICAgICAgICAvLyBNb3ZlIEphbW9zIGludG8gbm9ybWFsaXphdGlvbiBidWZmZXIKKyAgICAgICAgICAgIG1fYnVmZmVyXy5hcHBlbmQoTCk7CisgICAgICAgICAgICBtX2J1ZmZlcl8uYXBwZW5kKFYpOworICAgICAgICAgICAgaWYgKFQgIT0gSEFOR1VMX1RCQVNFXykgeworICAgICAgICAgICAgICAgIG1fYnVmZmVyXy5hcHBlbmQoVCk7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX0ZDRFN0YXJ0XyA9IG1fc291cmNlXy5nZXRJbmRleCgpOworICAgICAgICAgICAgbV9GQ0RMaW1pdF8gPSBtX0ZDRFN0YXJ0XyArIDE7CisgICAgICAgICAgICByZXR1cm4gSUdOT1JBQkxFOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIGltcGxpY2l0IGNvZGVwb2ludCBjZXMKKyAgICAgKiBAcGFyYW0gY29kZXBvaW50IGN1cnJlbnQgY29kZXBvaW50CisgICAgICogQHJldHVybiBpbXBsaWNpdCBjb2RlcG9pbnQgY2VzCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcHJldmlvdXNJbXBsaWNpdChpbnQgY29kZXBvaW50KQorICAgIHsKKyAgICAgICAgaWYgKCFVQ2hhcmFjdGVyLmlzTGVnYWwoY29kZXBvaW50KSkgeworICAgICAgICAgICAgcmV0dXJuIElHTk9SQUJMRTsgLy8gaWxsZWdhbCBjb2RlIHZhbHVlLCBjb21wbGV0ZWx5IGlnbm9yZWFibGUhIAorICAgICAgICB9CisgICAgICAgIGludCByZXN1bHQgPSBnZXRJbXBsaWNpdFByaW1hcnkoY29kZXBvaW50KTsKKyAgICAgICAgbV9DRUJ1ZmZlclNpemVfID0gMjsKKyAgICAgICAgbV9DRUJ1ZmZlck9mZnNldF8gPSAxOworICAgICAgICBtX0NFQnVmZmVyX1swXSA9IChyZXN1bHQgJiBSdWxlQmFzZWRDb2xsYXRvci5DRV9QUklNQVJZX01BU0tfKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IDB4MDAwMDA1MDU7CisgICAgICAgIG1fQ0VCdWZmZXJfWzFdID0gKChyZXN1bHQgJiAweDAwMDBGRkZGKSA8PCAxNikgfCAweDAwMDAwMEMwOworICAgICAgICByZXR1cm4gbV9DRUJ1ZmZlcl9bMV07CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzdXJyb2dhdGUgY2UKKyAgICAgKiBAcGFyYW0gY2ggY3VycmVudCBjaGFyYWN0ZXIKKyAgICAgKiBAcmV0dXJuIHByZXZpb3VzIHN1cnJvZ2F0ZSBjZQorICAgICAqLworICAgIHByaXZhdGUgaW50IHByZXZpb3VzU3Vycm9nYXRlKGNoYXIgY2gpCisgICAgeworICAgICAgICBpZiAoaXNCYWNrd2FyZHNTdGFydCgpKSB7CisgICAgICAgICAgICAvLyB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcsIHdyb25nIHBsYWNlIHRvIGJlIGF0CisgICAgICAgICAgICByZXR1cm4gSUdOT1JBQkxFOworICAgICAgICB9CisgICAgICAgIGNoYXIgcHJldmNoID0gcHJldmlvdXNDaGFyKCk7IAorICAgICAgICAvLyBIYW5kbGVzIEhhbiBhbmQgU3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIGhlcmUuCisgICAgICAgIGlmIChVVEYxNi5pc0xlYWRTdXJyb2dhdGUocHJldmNoKSkgeworICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzSW1wbGljaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRSYXdTdXBwbGVtZW50YXJ5KHByZXZjaCwgY2gpKTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKHByZXZjaCAhPSBDaGFyYWN0ZXJJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICBuZXh0Q2hhcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJR05PUkFCTEU7IC8vIGNvbXBsZXRlbHkgaWdub3JhYmxlIAorICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiA8cD5TcGVjaWFsIENFIG1hbmFnZW1lbnQuIEV4cGFuc2lvbnMsIGNvbnRyYWN0aW9ucyBldGMuLi48L3A+CisgICAgICogQHBhcmFtIGNvbGxhdG9yIGNhbiBiZSBwbGFpbiBVQ0EgCisgICAgICogQHBhcmFtIGNlIGN1cnJlbnQgY2UKKyAgICAgKiBAcGFyYW0gY2ggY3VycmVudCBjaGFyYWN0ZXIKKyAgICAgKiBAcmV0dXJuIHByZXZpb3VzIHNwZWNpYWwgY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBwcmV2aW91c1NwZWNpYWwoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IsIGludCBjZSwgY2hhciBjaCkKKyAgICB7CisgICAgICAgIHdoaWxlKHRydWUpIHsKKyAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNlcyB0aGF0IGxvb3BzIGFyZSB0aGFpLCBzcGVjaWFsIHByZWZpeCBhbmQgCisgICAgICAgICAgICAvLyBjb250cmFjdGlvbnMgCisgICAgICAgICAgICBzd2l0Y2ggKFJ1bGVCYXNlZENvbGxhdG9yLmdldFRhZyhjZSkpIHsKKyAgICAgICAgICAgIGNhc2UgQ0VfTk9UX0ZPVU5EX1RBR186ICAvLyB0aGlzIHRhZyBhbHdheXMgcmV0dXJucworICAgICAgICAgICAgICAgIHJldHVybiBjZTsKKyAgICAgICAgICAgIGNhc2UgUnVsZUJhc2VkQ29sbGF0b3IuQ0VfU1VSUk9HQVRFX1RBR186IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc3NlbnRpYWx5IGEgZGlzZW5nYWdlZCBsZWFkIHN1cnJvZ2F0ZS4gYSBicm9rZW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlcXVlbmNlIHdhcyBlbmNvdW50ZXJlZCBhbmQgdGhpcyBpcyBhbiBlcnJvcgorICAgICAgICAgICAgICAgIHJldHVybiBJR05PUkFCTEU7CisgICAgICAgICAgICBjYXNlIENFX1RIQUlfVEFHXzoKKyAgICAgICAgICAgICAgICBjZSA9IHByZXZpb3VzVGhhaShjb2xsYXRvciwgY2UsIGNoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0VfU1BFQ19QUk9DX1RBR186CisgICAgICAgICAgICAgICAgY2UgPSBwcmV2aW91c1NwZWNpYWxQcmVmaXgoY29sbGF0b3IsIGNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0VfQ09OVFJBQ1RJT05fVEFHXzoKKyAgICAgICAgICAgICAgICAvLyBtYXkgbG9vcCBmb3IgZmlyc3QgY2hhcmFjdGVyIGUuZy4gIjB4MGY3MSIgZm9yIGVuZ2xpc2gKKyAgICAgICAgICAgICAgICBpZiAoaXNCYWNrd2FyZHNTdGFydCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IG9mIHN0cmluZyBvciB0aGlzIGlzIG5vdCB0aGUgZW5kIG9mIGFueSBjb250cmFjdGlvbgorICAgICAgICAgICAgICAgICAgICBjZSA9IGNvbGxhdG9yLm1fY29udHJhY3Rpb25DRV9bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRyYWN0aW9uT2Zmc2V0KGNvbGxhdG9yLCBjZSldOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ29udHJhY3Rpb24oY29sbGF0b3IsIGNlLCBjaCk7IC8vIGVsc2UKKyAgICAgICAgICAgIGNhc2UgQ0VfTE9OR19QUklNQVJZX1RBR186CisgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzTG9uZ1ByaW1hcnkoY2UpOworICAgICAgICAgICAgY2FzZSBDRV9FWFBBTlNJT05fVEFHXzogLy8gYWx3YXlzIHJldHVybnMKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNFeHBhbnNpb24oY29sbGF0b3IsIGNlKTsKKyAgICAgICAgICAgIGNhc2UgQ0VfSEFOR1VMX1NZTExBQkxFX1RBR186IC8vIEFDMDAtRDdBRgorICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0hhbmd1bChjb2xsYXRvciwgY2gpOworICAgICAgICAgICAgY2FzZSBDRV9MRUFEX1NVUlJPR0FURV9UQUdfOiAgLy8gRDgwMC1EQkZGCisgICAgICAgICAgICAgICAgcmV0dXJuIElHTk9SQUJMRTsgLy8gYnJva2VuIHN1cnJvZ2F0ZSBzZXF1ZW5jZQorICAgICAgICAgICAgY2FzZSBDRV9UUkFJTF9TVVJST0dBVEVfVEFHXzogLy8gREMwMC1ERkZGCisgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3Vycm9nYXRlKGNoKTsKKyAgICAgICAgICAgIGNhc2UgQ0VfQ0pLX0lNUExJQ0lUX1RBR186IAorICAgICAgICAgICAgICAgIC8vIDB4MzQwMC0weDREQjUsIDB4NEUwMC0weDlGQTUsIDB4RjkwMC0weEZBMkQKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNJbXBsaWNpdChjaCk7CisgICAgICAgICAgICBjYXNlIENFX0lNUExJQ0lUX1RBR186IC8vIGV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgZGVmaW5lZAorICAgICAgICAgICAgICAgIC8vIFVDQSBpcyBmaWxsZWQgd2l0aCB0aGVzZS4gVGFpbG9yaW5ncyBhcmUgTk9UX0ZPVU5EIAorICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0ltcGxpY2l0KGNoKTsKKyAgICAgICAgICAgIGNhc2UgQ0VfQ0hBUlNFVF9UQUdfOiAvLyB0aGlzIHRhZyBhbHdheXMgcmV0dXJucworICAgICAgICAgICAgICAgIHJldHVybiBDRV9OT1RfRk9VTkRfOworICAgICAgICAgICAgZGVmYXVsdDogLy8gdGhpcyB0YWcgYWx3YXlzIHJldHVybnMKKyAgICAgICAgICAgICAgICBjZSA9IElHTk9SQUJMRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghUnVsZUJhc2VkQ29sbGF0b3IuaXNTcGVjaWFsKGNlKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjZTsKKyAgICB9CisgICAgCisgICAgLyoqIAorICAgICAqIEdFVCBJTVBMSUNJVCBQUklNQVJZIFdFSUdIVFMKKyAgICAgKiBAcGFyYW0gY3AgY29kZXBvaW50CisgICAgICogQHBhcmFtIHZhbHVlIGlzIGxlZnQganVzdGlmaWVkIHByaW1hcnkga2V5CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGdldEltcGxpY2l0UHJpbWFyeShpbnQgY3ApIAorICAgIHsKKyAgICAgICAgY3AgPSBzd2FwQ0pLKGNwKTsKKyAgICAgICAgCisgICAgICAgIC8vaWYgKERFQlVHKSBTeXN0ZW0ub3V0LnByaW50bG4oIkNKSyBzd2FwcGVkOiAiICsgVXRpbGl0eS5oZXgoY3ApKTsKKyAgICAgICAgLy8gd2Ugbm93IGhhdmUgYSByYW5nZSBvZiBudW1iZXJzIGZyb20gMCB0byAyMUZGRkYuCisgICAgICAgIC8vIHdlIG11c3Qgc2tpcCBhbGwgMDAsIDAxLCAwMiBieXRlcywgc28gbW9zdCBieXRlcyBoYXZlIDI1MyB2YWx1ZXMKKyAgICAgICAgLy8gd2UgbXVzdCBsZWF2ZSBhIGdhcCBvZiAwMSBiZXR3ZWVuIGFsbCB2YWx1ZXMgb2YgdGhlIGxhc3QgYnl0ZSwgc28gCisgICAgICAgIC8vIHRoZSBsYXN0IGJ5dGUgaGFzIDEyNiB2YWx1ZXMgKDMgYnl0ZSBjYXNlKQorICAgICAgICAvLyB3ZSBzaGlmdCBzbyB0aGF0IEhBTiBhbGwgaGFzIHRoZSBzYW1lIGZpcnN0IHByaW1hcnksIGZvciAKKyAgICAgICAgLy8gY29tcHJlc3Npb24uCisgICAgICAgIC8vIGZvciB0aGUgNCBieXRlIGNhc2UsIHdlIG1ha2UgdGhlIGdhcCBhcyBsYXJnZSBhcyB3ZSBjYW4gZml0LgorICAgICAgICAvLyBUaHJlZSBieXRlIGZvcm1zIGFyZSBFQyB4eCB4eCwgRUQgeHggeHgsIEVFIHh4IHh4ICh3aXRoIGEgZ2FwIG9mIDEpCisgICAgICAgIC8vIEZvdXIgYnl0ZSBmb3JtcyAobW9zdCBzdXBwbGVtZW50YXJpZXMpIGFyZSBFRiB4eCB4eCB4eCAod2l0aCBhIGdhcCAKKyAgICAgICAgLy8gb2YgTEFTVDJfTVVMVElQTElFUiA9PSAxNCkKKyAgICAgICAgCisgICAgICAgIGludCBsYXN0MCA9IGNwIC0gUnVsZUJhc2VkQ29sbGF0b3IuSU1QTElDSVRfNEJZVEVfQk9VTkRBUllfOworICAgICAgICBpZiAobGFzdDAgPCAwKSB7CisgICAgICAgICAgICBpbnQgbGFzdDEgPSBjcCAvIFJ1bGVCYXNlZENvbGxhdG9yLkxBU1RfQ09VTlRfOworICAgICAgICAgICAgbGFzdDAgPSBjcCAlIFJ1bGVCYXNlZENvbGxhdG9yLkxBU1RfQ09VTlRfOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgbGFzdDIgPSBsYXN0MSAvIFJ1bGVCYXNlZENvbGxhdG9yLk9USEVSX0NPVU5UXzsKKyAgICAgICAgICAgIGxhc3QxICU9IFJ1bGVCYXNlZENvbGxhdG9yLk9USEVSX0NPVU5UXzsKKyAgICAgICAgICAgIHJldHVybiBSdWxlQmFzZWRDb2xsYXRvci5JTVBMSUNJVF9CQVNFXzNCWVRFXyArIChsYXN0MiA8PCAyNCkgCisgICAgICAgICAgICAgICAgICAgKyAobGFzdDEgPDwgMTYpIAorICAgICAgICAgICAgICAgICAgICsgKChsYXN0MCAqIFJ1bGVCYXNlZENvbGxhdG9yLkxBU1RfTVVMVElQTElFUl8pIDw8IDgpOworICAgICAgICB9IAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBsYXN0MSA9IGxhc3QwIC8gUnVsZUJhc2VkQ29sbGF0b3IuTEFTVF9DT1VOVDJfOworICAgICAgICAgICAgbGFzdDAgJT0gUnVsZUJhc2VkQ29sbGF0b3IuTEFTVF9DT1VOVDJfOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgbGFzdDIgPSBsYXN0MSAvIFJ1bGVCYXNlZENvbGxhdG9yLk9USEVSX0NPVU5UXzsKKyAgICAgICAgICAgIGxhc3QxICU9IFJ1bGVCYXNlZENvbGxhdG9yLk9USEVSX0NPVU5UXzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGxhc3QzID0gbGFzdDIgLyBSdWxlQmFzZWRDb2xsYXRvci5PVEhFUl9DT1VOVF87CisgICAgICAgICAgICBsYXN0MiAlPSBSdWxlQmFzZWRDb2xsYXRvci5PVEhFUl9DT1VOVF87CisgICAgICAgICAgICByZXR1cm4gUnVsZUJhc2VkQ29sbGF0b3IuSU1QTElDSVRfQkFTRV80QllURV8gKyAobGFzdDMgPDwgMjQpIAorICAgICAgICAgICAgICAgICAgICsgKGxhc3QyIDw8IDE2KSArIChsYXN0MSA8PCA4KSAKKyAgICAgICAgICAgICAgICAgICArIChsYXN0MCAqIFJ1bGVCYXNlZENvbGxhdG9yLkxBU1QyX01VTFRJUExJRVJfKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTd2FwcGluZyBDSksgY2hhcmFjdGVycyBmb3IgaW1wbGljaXQgY2VzCisgICAgICogQHBhcmFtIGNwIGNvZGVwb2ludCBDSksKKyAgICAgKiBAcmV0dXJuIHN3YXBwZWQgcmVzdWx0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IHN3YXBDSksoaW50IGNwKSAKKyAgICB7CisgICAgICAgIGlmIChjcCA+PSBDSktfQkFTRV8pIHsKKyAgICAgICAgICAgIGlmIChjcCA8IENKS19MSU1JVF8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3AgLSBDSktfQkFTRV87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3AgPCBDSktfQ09NUEFUX1VTRURfQkFTRV8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3AgKyBOT05fQ0pLX09GRlNFVF87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3AgPCBDSktfQ09NUEFUX1VTRURfTElNSVRfKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwIC0gQ0pLX0NPTVBBVF9VU0VEX0JBU0VfICsgKENKS19MSU1JVF8gLSBDSktfQkFTRV8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNwIDwgQ0pLX0JfQkFTRV8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3AgKyBOT05fQ0pLX09GRlNFVF87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3AgPCBDSktfQl9MSU1JVF8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3A7IC8vIG5vbi1CTVAtQ0pLCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY3AgKyBOT05fQ0pLX09GRlNFVF87IC8vIG5vbi1DSksKKyAgICAgICAgfQorICAgICAgICBpZiAoY3AgPCBDSktfQV9CQVNFXykgeworICAgICAgICAgICAgcmV0dXJuIGNwICsgTk9OX0NKS19PRkZTRVRfOworICAgICAgICB9CisgICAgICAgIGlmIChjcCA8IENKS19BX0xJTUlUXykgeworICAgICAgICAgICAgcmV0dXJuIGNwIC0gQ0pLX0FfQkFTRV8gKyAoQ0pLX0xJTUlUXyAtIENKS19CQVNFXykgCisgICAgICAgICAgICAgICAgICAgKyAoQ0pLX0NPTVBBVF9VU0VEX0xJTUlUXyAtIENKS19DT01QQVRfVVNFRF9CQVNFXyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNwICsgTk9OX0NKS19PRkZTRVRfOyAvLyBub24tQ0pLCisgICAgfSAgICAgICAKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdGlvbktleS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0aW9uS2V5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTAwMWNjOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdGlvbktleS5qYXZhCkBAIC0wLDAgKzEsMzU0IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0aW9uS2V5LmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMi8wMyAyMDo0NToxOSAkIAorKiAkUmV2aXNpb246IDEuMTEgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworLyoqCisgKiA8cD5BIDxjb2RlPkNvbGxhdGlvbktleTwvY29kZT4gcmVwcmVzZW50cyBhIDxjb2RlPlN0cmluZzwvY29kZT4KKyAqIHVuZGVyIHRoZSBydWxlcyBvZiBhIHNwZWNpZmljIDxjb2RlPkNvbGxhdG9yPC9jb2RlPgorICogb2JqZWN0LiBDb21wYXJpbmcgdHdvIDxjb2RlPkNvbGxhdGlvbktleTwvY29kZT5zIHJldHVybnMgdGhlCisgKiByZWxhdGl2ZSBvcmRlciBvZiB0aGUgPGNvZGU+U3RyaW5nPC9jb2RlPnMgdGhleSByZXByZXNlbnQuPC9wPgorICoKKyAqIDxwPlNpbmNlIHRoZSBydWxlIHNldCBvZiA8Y29kZT5Db2xsYXRvcjwvY29kZT5zIGNhbiBkaWZmZXIsIHRoZQorICogc29ydCBvcmRlcnMgb2YgdGhlIHNhbWUgc3RyaW5nIHVuZGVyIHR3byBkaWZmZXJlbnQKKyAqIDxjb2RlPkNvbGxhdG9yPC9jb2RlPnMgbWlnaHQgZGlmZmVyLiAgSGVuY2UgY29tcGFyaW5nCisgKiA8Y29kZT5Db2xsYXRpb25LZXk8L2NvZGU+cyBnZW5lcmF0ZWQgZnJvbSBkaWZmZXJlbnQKKyAqIDxjb2RlPkNvbGxhdG9yPC9jb2RlPnMgY2FuIGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMuPC9wPgorICoKKyAqIDxwPkJvdGggdGhlIG1ldGhvZAorICogPGNvZGU+Q29sbGF0aW9uS2V5LmNvbXBhcmVUbyhDb2xsYXRpb25LZXkpPC9jb2RlPiBhbmQgdGhlIG1ldGhvZAorICogPGNvZGU+Q29sbGF0b3IuY29tcGFyZShTdHJpbmcsIFN0cmluZyk8L2NvZGU+IGNvbXBhcmUgdHdvIHN0cmluZ3MKKyAqIGFuZCByZXR1cm5zIHRoZWlyIHJlbGF0aXZlIG9yZGVyLiAgVGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmljdGljcworICogb2YgdGhlc2UgdHdvIGFwcHJvYWNoZXMgY2FuIGRpZmZlci48L3A+CisgKgorICogPHA+RHVyaW5nIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSA8Y29kZT5Db2xsYXRpb25LZXk8L2NvZGU+LCB0aGUKKyAqIGVudGlyZSBzb3VyY2Ugc3RyaW5nIGlzIGV4YW1pbmVkIGFuZCBwcm9jZXNzZWQgaW50byBhIHNlcmllcyBvZgorICogYml0cyB0aGF0IGFyZSBzdG9yZWQgaW4gdGhlIDxjb2RlPkNvbGxhdGlvbktleTwvY29kZT4uIFdoZW4KKyAqIDxjb2RlPkNvbGxhdGlvbktleS5jb21wYXJlVG8oQ29sbGF0aW9uS2V5KTwvY29kZT4gZXhlY3V0ZXMsIGl0CisgKiBwZXJmb3JtcyBiaXR3aXNlIGNvbXBhcmlzb24gb24gdGhlIGJpdCBzZXF1ZW5jZXMuICBUaGlzIGNhbiBpbmN1cnMKKyAqIHN0YXJ0dXAgY29zdCB3aGVuIGNyZWF0aW5nIHRoZSA8Y29kZT5Db2xsYXRpb25LZXk8L2NvZGU+LCBidXQgb25jZQorICogdGhlIGtleSBpcyBjcmVhdGVkLCBiaW5hcnkgY29tcGFyaXNvbnMgYXJlIGZhc3QuICBUaGlzIGFwcHJvYWNoIGlzCisgKiByZWNvbW1lbmRlZCB3aGVuIHRoZSBzYW1lIHN0cmluZ3MgYXJlIHRvIGJlIGNvbXBhcmVkIG92ZXIgYW5kIG92ZXIKKyAqIGFnYWluLjwvcD4KKyAqCisgKiA8cD5PbiB0aGUgb3RoZXIgaGFuZCwgaW1wbGVtZW50YXRpb25zIG9mCisgKiA8Y29kZT5Db2xsYXRvci5jb21wYXJlKFN0cmluZywgU3RyaW5nKTwvY29kZT4gY2FuIGV4YW1pbmUgYW5kCisgKiBwcm9jZXNzIHRoZSBzdHJpbmdzIG9ubHkgdW50aWwgdGhlIGZpcnN0IGNoYXJhY3RlcnMgZGlmZmVyaW5nIGluCisgKiBvcmRlci4gIFRoaXMgYXBwcm9hY2ggaXMgcmVjb21tZW5kZWQgaWYgdGhlIHN0cmluZ3MgYXJlIHRvIGJlCisgKiBjb21wYXJlZCBvbmx5IG9uY2UuPC9wPgorICogCisgKiA8cD5Nb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21wb3NpdGlvbiBvZiB0aGUgYml0IHNlcXVlbmNlIGNhbgorICogYmUgZm91bmQgaW4gdGhlIAorICogPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdS91c2VyZ3VpZGUvQ29sbGF0ZV9TZXJ2aWNlQXJjaGl0ZWN0dXJlLmh0bWwiPgorICogdXNlciBndWlkZTwvYT4uPC9wPgorICoKKyAqIDxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgPGNvZGU+Q29sbGF0aW9uS2V5PC9jb2RlPnMgY2FuIGJlIHVzZWQKKyAqIHRvIHNvcnQgYSBsaXN0IG9mIDxjb2RlPlN0cmluZzwvY29kZT5zLjwvcD4KKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBDb2xsYXRpb25LZXlzIGZvciB0aGUgU3RyaW5ncyB0byBiZSBzb3J0ZWQuCisgKiBDb2xsYXRvciBteUNvbGxhdG9yID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKTsKKyAqIENvbGxhdGlvbktleVtdIGtleXMgPSBuZXcgQ29sbGF0aW9uS2V5WzNdOworICoga2V5c1swXSA9IG15Q29sbGF0b3IuZ2V0Q29sbGF0aW9uS2V5KCJUb20iKTsKKyAqIGtleXNbMV0gPSBteUNvbGxhdG9yLmdldENvbGxhdGlvbktleSgiRGljayIpOworICoga2V5c1syXSA9IG15Q29sbGF0b3IuZ2V0Q29sbGF0aW9uS2V5KCJIYXJyeSIpOworICogc29ydCgga2V5cyApOworICogPGJyPgorICogLy8uLi4KKyAqIDxicj4KKyAqIC8vIEluc2lkZSBib2R5IG9mIHNvcnQgcm91dGluZSwgY29tcGFyZSBrZXlzIHRoaXMgd2F5CisgKiBpZigga2V5c1tpXS5jb21wYXJlVG8oIGtleXNbal0gKSA+IDAgKQorICogICAgLy8gc3dhcCBrZXlzW2ldIGFuZCBrZXlzW2pdCisgKiA8YnI+CisgKiAvLy4uLgorICogPGJyPgorICogLy8gRmluYWxseSwgd2hlbiB3ZSd2ZSByZXR1cm5lZCBmcm9tIHNvcnQuCisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIGtleXNbMF0uZ2V0U291cmNlU3RyaW5nKCkgKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigga2V5c1sxXS5nZXRTb3VyY2VTdHJpbmcoKSApOworICogU3lzdGVtLm91dC5wcmludGxuKCBrZXlzWzJdLmdldFNvdXJjZVN0cmluZygpICk7CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBjbGFzcyBpcyBub3Qgc3ViY2xhc3NhYmxlCisgKiA8L3A+CisgKiBAc2VlIENvbGxhdG9yCisgKiBAc2VlIFJ1bGVCYXNlZENvbGxhdG9yCisgKiBAYXV0aG9yIFN5biBXZWUgUXVlaworICogQGRyYWZ0IElDVSAyLjIgCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBDb2xsYXRpb25LZXkgaW1wbGVtZW50cyBDb21wYXJhYmxlIAoreworICAgIC8vIHB1YmxpYyBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb2xsYXRpb25LZXkgY29uc3RydWN0b3IuCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpcyBnaXZlbiBwdWJsaWMgYWNjZXNzLCB1bmxpa2UgdGhlIEpESyB2ZXJzaW9uLCB0bworICAgICAqIGFsbG93IGFjY2VzcyB0byB1c2VycyBleHRlbmRpbmcgdGhlIENvbGxhdG9yIGNsYXNzLiBTZWUgCisgICAgICoge0BsaW5rIENvbGxhdG9yI2dldENvbGxhdGlvbktleShTdHJpbmcpfS4gCisgICAgICogQHBhcmFtIHNvdXJjZSBzdHJpbmcgdGhpcyBDb2xsYXRpb25LZXkgaXMgdG8gcmVwcmVzZW50CisgICAgICogQHBhcmFtIGtleSBhcnJheSBvZiBieXRlcyB0aGF0IHJlcHJlc2VudCB0aGUgY29sbGF0aW9uIG9yZGVyIG9mIGFyZ3VtZW50CisgICAgICogICAgICAgICAgICBzb3VyY2UKKyAgICAgKiBAc2VlIENvbGxhdG9yCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgQ29sbGF0aW9uS2V5KFN0cmluZyBzb3VyY2UsIGJ5dGUga2V5W10pCisgICAgeworICAgICAgICBtX3NvdXJjZV8gPSBzb3VyY2U7CisgICAgICAgIG1fa2V5XyA9IGtleTsKKyAgICAgICAgbV9oYXNoQ29kZV8gPSAwOworICAgIH0KKyAgICAKKyAgICAvLyBwdWJsaWMgZ2V0dGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBzb3VyY2Ugc3RyaW5nIHRoYXQgdGhpcyBDb2xsYXRpb25LZXkgcmVwcmVzZW50cy4KKyAgICAgKiBAcmV0dXJuIHNvdXJjZSBzdHJpbmcgdGhhdCB0aGlzIENvbGxhdGlvbktleSByZXByZXNlbnRzCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZVN0cmluZygpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlXzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD5EdXBsaWNhdGVzIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGlzIENvbGxhdGlvbktleSBhcyBhIHNlcXVlbmNlIAorICAgICAqIG9mIGJpZy1lbmRpYW4gYnl0ZXMgdGVybWluYXRlZCBieSBhIG51bGwuPC9wPiAKKyAgICAgKgorICAgICAqIDxwPklmIHR3byBDb2xsYXRpb25LZXlzIGNhbiBiZSBsZWdpdGltYXRlbHkgY29tcGFyZWQsIHRoZW4gb25lIGNhbgorICAgICAqIGNvbXBhcmUgdGhlIGJ5dGUgYXJyYXlzIG9mIGVhY2ggdG8gb2J0YWluIHRoZSBzYW1lIHJlc3VsdCwgZS5nLgorICAgICAqIDxwcmU+CisgICAgICogYnl0ZSBrZXkxW10gPSBjb2xsYXRpb25rZXkxLnRvQnl0ZUFycmF5KCk7CisgICAgICogYnl0ZSBrZXkyW10gPSBjb2xsYXRpb25rZXkyLnRvQnl0ZUFycmF5KCk7CisgICAgICogaW50IGtleSwgdGFyZ2V0a2V5OworICAgICAqIGludCBpID0gMDsKKyAgICAgKiBkbyB7CisgICAgICoJICAga2V5ID0ga2V5MVtpXSAmIDB4RkY7CisgICAgICogICAgIHRhcmdldGtleSA9IGtleTJbaV0gJiAweEZGOworICAgICAqICAgICBpZiAoa2V5ICZsdDsgdGFyZ2V0a2V5KSB7CisgICAgICogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0cmluZyAxIGlzIGxlc3MgdGhhbiBzdHJpbmcgMiIpOworICAgICAqICAgICAgICAgcmV0dXJuOworICAgICAqICAgICB9CisgICAgICogICAgIGlmICh0YXJnZXRrZXkgJmx0OyBrZXkpIHsKKyAgICAgKiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RyaW5nIDEgaXMgbW9yZSB0aGFuIHN0cmluZyAyIik7CisgICAgICogICAgIH0KKyAgICAgKiAgICAgaSArKzsKKyAgICAgKiB9IHdoaWxlIChrZXkgIT0gMCAmJiB0YXJnZXRLZXkgIT0gMCk7CisgICAgICoKKyAgICAgKiBTeXN0ZW0ub3V0LnByaW50bG4oIlN0cmluZ3MgYXJlIGVxdWFsLiIpOworICAgICAqIDwvcHJlPgorICAgICAqIDwvcD4gIAorICAgICAqIEByZXR1cm4gQ29sbGF0aW9uS2V5IHZhbHVlIGluIGEgc2VxdWVuY2Ugb2YgYmlnLWVuZGlhbiBieXRlIGJ5dGVzIAorICAgICAqICAgICAgICAgdGVybWluYXRlZCBieSBhIG51bGwuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYnl0ZVtdIHRvQnl0ZUFycmF5KCkgCisgICAgeworICAgIAlpbnQgbGVuZ3RoID0gMDsKKyAgICAJd2hpbGUgKHRydWUpIHsKKyAgICAJICAgIGlmIChtX2tleV9bbGVuZ3RoXSA9PSAwKSB7CisgICAgCQkgIGJyZWFrOworICAgIAkgICAgfQorICAgIAkgICAgbGVuZ3RoICsrOworICAgIAl9CisgICAgCWxlbmd0aCArKzsKKyAgICAJYnl0ZSByZXN1bHRbXSA9IG5ldyBieXRlW2xlbmd0aF07CisgICAgCVN5c3RlbS5hcnJheWNvcHkobV9rZXlfLCAwLCByZXN1bHQsIDAsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gcHVibGljIG90aGVyIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkKKyAJCisgICAgLyoqCisgICAgICogPHA+Q29tcGFyZSB0aGlzIENvbGxhdGlvbktleSB0byBhbm90aGVyIENvbGxhdGlvbktleS4gIFRoZQorICAgICAqIGNvbGxhdGlvbiBydWxlcyBvZiB0aGUgQ29sbGF0b3IgdGhhdCBjcmVhdGVkIHRoaXMga2V5IGFyZQorICAgICAqIGFwcGxpZWQuPC9wPgorICAgICAqCisgICAgICogPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBDb21wYXJpc29uIGJldHdlZW4gQ29sbGF0aW9uS2V5cworICAgICAqIGNyZWF0ZWQgYnkgZGlmZmVyZW50IENvbGxhdG9ycyBtaWdodCByZXR1cm4gaW5jb3JyZWN0CisgICAgICogcmVzdWx0cy4gIFNlZSBjbGFzcyBkb2N1bWVudGF0aW9uLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgdGFyZ2V0IENvbGxhdGlvbktleQorICAgICAqIEByZXR1cm4gYW4gaW50ZWdlciB2YWx1ZS4gIElmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gemVybyB0aGlzIENvbGxhdGlvbktleQorICAgICAqICAgICAgICAgaXMgbGVzcyB0aGFuIHRoYW4gdGFyZ2V0LCBpZiB0aGUgdmFsdWUgaXMgemVybyB0aGV5IGFyZSBlcXVhbCwgYW5kCisgICAgICogICAgICAgICBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHplcm8gdGhpcyBDb2xsYXRpb25LZXkgaXMgZ3JlYXRlciAKKyAgICAgKiAgICAgICAgIHRoYW4gdGFyZ2V0LgorICAgICAqIEBleGNlcHRpb24gTnVsbFBvaW50ZXJFeGNlcHRpb24gaXMgdGhyb3duIGlmIGFyZ3VtZW50IGlzIG51bGwuCisgICAgICogQHNlZSBDb2xsYXRvciNjb21wYXJlKFN0cmluZywgU3RyaW5nKQorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKENvbGxhdGlvbktleSB0YXJnZXQpCisgICAgeworICAgIAlpbnQgaSA9IDA7CisgICAgCXdoaWxlIChtX2tleV9baV0gIT0gMCAmJiB0YXJnZXQubV9rZXlfW2ldICE9IDApIHsKKyAgICAgICAgICAgIGJ5dGUga2V5ID0gbV9rZXlfW2ldOworICAgICAgICAgICAgYnl0ZSB0YXJnZXRrZXkgPSB0YXJnZXQubV9rZXlfW2ldOworICAgICAgICAgICAgaWYgKGtleSA9PSB0YXJnZXRrZXkpIHsKKyAgICAgICAgICAgICAgICBpICsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGtleSA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldGtleSA8IDAgfHwga2V5IDwgdGFyZ2V0a2V5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gdGFyZ2V0IGtleSBoYXMgdG8gYmUgcG9zaXRpdmUgYW5kIGxlc3MgdGhhbiBrZXkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGtleSBpcyBuZWdhdGl2ZQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXRrZXkgPj0gMCB8fCBrZXkgPiB0YXJnZXRrZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAJfQorICAgIAkvLyBsYXN0IGNvbXBhcmlzb24gaWYgd2UgZW5jb3VudGVyIGEgMAorICAgICAgICBpZiAobV9rZXlfW2ldID09IHRhcmdldC5tX2tleV9baV0pIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChtX2tleV9baV0gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8vIHRhcmdldCBpcyAwCisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPkNvbXBhcmUgdGhpcyBDb2xsYXRpb25LZXkgd2l0aCB0aGUgc3BlY2lmaWVkIE9iamVjdC4gIFRoZQorICAgICAqIGNvbGxhdGlvbiBydWxlcyBvZiB0aGUgQ29sbGF0b3IgdGhhdCBjcmVhdGVkIHRoaXMga2V5IGFyZQorICAgICAqIGFwcGxpZWQuPC9wPgorICAgICAqIAorICAgICAqIDxwPlNlZSBub3RlIGluIGNvbXBhcmVUbyhDb2xsYXRpb25LZXkpIGZvciB3YXJuaW5ncyBhYm91dCBwb3NzaWJsZQorICAgICAqIGluY29ycmVjdCByZXN1bHRzLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvYmogdGhlIE9iamVjdCB0byBiZSBjb21wYXJlZCB0by4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBuZWdhdGl2ZSBpbnRlZ2VyLCB6ZXJvLCBvciBhIHBvc2l0aXZlIGludGVnZXIgCisgICAgICogICAgICAgICByZXNwZWN0aXZlbHkgaWYgdGhpcyBDb2xsYXRpb25LZXkgaXMgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgCisgICAgICogICAgICAgICBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIE9iamVjdC4KKyAgICAgKiBAZXhjZXB0aW9uIENsYXNzQ2FzdEV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgYXJndW1lbnQgaXMgbm90IAorICAgICAqICAgICAgICAgICAgYSBDb2xsYXRpb25LZXkuICBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgYXJndW1lbnQgCisgICAgICogICAgICAgICAgICBpcyBudWxsLgorICAgICAqIEBzZWUgI2NvbXBhcmVUbyhDb2xsYXRpb25LZXkpCisgICAgICogQGRyYWZ0IElDVSAyLjIgCisgICAgICovCisgICAgcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IG9iaikgCisgICAgeworCSAgIHJldHVybiBjb21wYXJlVG8oKENvbGxhdGlvbktleSlvYmopOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPkNvbXBhcmUgdGhpcyBDb2xsYXRpb25LZXkgYW5kIHRoZSBzcGVjaWZpZWQgT2JqZWN0IGZvcgorICAgICAqIGVxdWFsaXR5LiAgVGhlIGNvbGxhdGlvbiBydWxlcyBvZiB0aGUgQ29sbGF0b3IgdGhhdCBjcmVhdGVkCisgICAgICogdGhpcyBrZXkgYXJlIGFwcGxpZWQuPC9wPgorICAgICAqCisgICAgICogPHA+U2VlIG5vdGUgaW4gY29tcGFyZVRvKENvbGxhdGlvbktleSkgZm9yIHdhcm5pbmdzIGFib3V0CisgICAgICogcG9zc2libGUgaW5jb3JyZWN0IHJlc3VsdHMuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGNvbXBhcmUgdG8uCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0d28ga2V5cyBjb21wYXJlIGFzIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHNlZSAjY29tcGFyZVRvKENvbGxhdGlvbktleSkKKyAgICAgKiBAZXhjZXB0aW9uIENsYXNzQ2FzdEV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgYXJndW1lbnQgaXMgbm90IAorICAgICAqICAgICAgICAgICAgYSBDb2xsYXRpb25LZXkuICBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgYXJndW1lbnQgCisgICAgICogICAgICAgICAgICBpcyBudWxsLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgdGFyZ2V0KSAKKyAgICB7CisgICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIENvbGxhdGlvbktleSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGVxdWFscygoQ29sbGF0aW9uS2V5KXRhcmdldCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPgorICAgICAqIENvbXBhcmUgdGhpcyBDb2xsYXRpb25LZXkgYW5kIHRoZSBhcmd1bWVudCB0YXJnZXQgQ29sbGF0aW9uS2V5IGZvciAKKyAgICAgKiBlcXVhbGl0eS4KKyAgICAgKiBUaGUgY29sbGF0aW9uIAorICAgICAqIHJ1bGVzIG9mIHRoZSBDb2xsYXRvciBvYmplY3Qgd2hpY2ggY3JlYXRlZCB0aGVzZSBvYmplY3RzIGFyZSBhcHBsaWVkLgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBTZWUgbm90ZSBpbiBjb21wYXJlVG8oQ29sbGF0aW9uS2V5KSBmb3Igd2FybmluZ3Mgb2YgaW5jb3JyZWN0IHJlc3VsdHMKKyAgICAgKiA8L3A+CisgICAgICogQHBhcmFtIHRhcmdldCB0aGUgQ29sbGF0aW9uS2V5IHRvIGNvbXBhcmUgdG8uCisgICAgICogQHJldHVybiB0cnVlIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEBleGNlcHRpb24gTnVsbFBvaW50ZXJFeGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdGhlIGFyZ3VtZW50IGlzIG51bGwuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoQ29sbGF0aW9uS2V5IHRhcmdldCkgCisgICAgeworICAgICAgICBpZiAodGhpcyA9PSB0YXJnZXQpIHsKKwkgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgQ29sbGF0aW9uS2V5IG90aGVyID0gKENvbGxhdGlvbktleSl0YXJnZXQ7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgaWYgKG1fa2V5X1tpXSAhPSBvdGhlci5tX2tleV9baV0pIHsKKwkJcmV0dXJuIGZhbHNlOworCSAgICB9CisJICAgIGlmIChtX2tleV9baV0gPT0gMCkgeworCQlicmVhazsKKwkgICAgfQorCSAgICBpICsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPlJldHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoaXMgQ29sbGF0aW9uS2V5LiBUaGUgaGFzaCB2YWx1ZSBpcyBjYWxjdWxhdGVkIAorICAgICAqIG9uIHRoZSBrZXkgaXRzZWxmLCBub3QgdGhlIFN0cmluZyBmcm9tIHdoaWNoIHRoZSBrZXkgd2FzIGNyZWF0ZWQuIFRodXMgCisgICAgICogaWYgeCBhbmQgeSBhcmUgQ29sbGF0aW9uS2V5cywgdGhlbiB4Lmhhc2hDb2RlKHgpID09IHkuaGFzaENvZGUoKSAKKyAgICAgKiBpZiB4LmVxdWFscyh5KSBpcyB0cnVlLiBUaGlzIGFsbG93cyBsYW5ndWFnZS1zZW5zaXRpdmUgY29tcGFyaXNvbiBpbiBhIAorICAgICAqIGhhc2ggdGFibGUuCisgICAgICogPC9wPgorICAgICAqIEByZXR1cm4gdGhlIGhhc2ggdmFsdWUuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgCisgICAgeworICAgIAlpZiAobV9oYXNoQ29kZV8gPT0gMCkgeworCSAgICBpbnQgc2l6ZSA9IG1fa2V5Xy5sZW5ndGggPj4gMTsKKwkgICAgU3RyaW5nQnVmZmVyIGtleSA9IG5ldyBTdHJpbmdCdWZmZXIoc2l6ZSk7CisJICAgIGludCBpID0gMDsKKwkgICAgd2hpbGUgKG1fa2V5X1tpXSAhPSAwICYmIG1fa2V5X1tpICsgMV0gIT0gMCkgeworCQlrZXkuYXBwZW5kKChjaGFyKSgobV9rZXlfW2ldIDw8IDgpIHwgbV9rZXlfW2kgKyAxXSkpOworCQlpICs9IDI7CisJICAgIH0KKwkgICAgaWYgKG1fa2V5X1tpXSAhPSAwKSB7CisJCWtleS5hcHBlbmQoKGNoYXIpKG1fa2V5X1tpXSA8PCA4KSk7CisJICAgIH0KKwkgICAgbV9oYXNoQ29kZV8gPSBrZXkudG9TdHJpbmcoKS5oYXNoQ29kZSgpOworICAgIAl9CisgICAgICAgIHJldHVybiBtX2hhc2hDb2RlXzsKKyAgICB9CisKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBTb3VyY2Ugc3RyaW5nIHRoaXMgQ29sbGF0aW9uS2V5IHJlcHJlc2VudHMKKyAgICAgKi8JCisgICAgcHJpdmF0ZSBTdHJpbmcgbV9zb3VyY2VfOworCisgICAgLyoqCisgICAgICogU2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCByZXByZXNlbnRzIHRoZSBzb3J0IGtleQorICAgICAqLworICAgIHByaXZhdGUgYnl0ZSBtX2tleV9bXTsKKworICAgIC8qKgorICAgICAqIEhhc2ggY29kZSBmb3IgdGhlIGtleQorICAgICAqLworICAgIHByaXZhdGUgaW50IG1faGFzaENvZGVfOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0aW9uUGFyc2VkUnVsZUJ1aWxkZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdGlvblBhcnNlZFJ1bGVCdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjNzEyMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdGlvblBhcnNlZFJ1bGVCdWlsZGVyLmphdmEKQEAgLTAsMCArMSwzNzMyIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0aW9uUGFyc2VkUnVsZUJ1aWxkZXIuamF2YSx2ICQgCisqICREYXRlOiAyMDAyLzExLzIyIDAxOjMyOjU3ICQgCisqICRSZXZpc2lvbjogMS4xMSAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworIAoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOworaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlRyaWVCdWlsZGVyOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSW50VHJpZUJ1aWxkZXI7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5UcmllSXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXJDYXRlZ29yeTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLk5vcm1hbGl6ZXJJbXBsOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuUmFuZ2VWYWx1ZUl0ZXJhdG9yOworCisvKioKKyogQ2xhc3MgZm9yIGJ1aWxkaW5nIGEgY29sbGF0b3IgZnJvbSBhIGxpc3Qgb2YgY29sbGF0aW9uIHJ1bGVzLgorKiBUaGlzIGNsYXNzIGlzIHVzZXMgQ29sbGF0aW9uUnVsZVBhcnNlcgorKiBAYXV0aG9yIFN5biBXZWUgUXVlaworKiBAc2luY2UgcmVsZWFzZSAyLjIsIEp1bmUgMTEgMjAwMgorKiBAZHJhZnQgMi4yCisqLworZmluYWwgY2xhc3MgQ29sbGF0aW9uUGFyc2VkUnVsZUJ1aWxkZXIKK3sgICAgIAorCS8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBydWxlcyBjb2xsYXRpb24gcnVsZXMKKyAgICAgKiBAZXhjZXB0aW9uIFBhcnNlRXhjZXB0aW9uIHRocm93biB3aGVuIGFyZ3VtZW50IHJ1bGVzIGhhdmUgYW4gaW52YWxpZCAKKyAgICAgKiAgICAgICAgICAgIHN5bnRheCAKKyAgICAgKi8KKyAgICBDb2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlcihTdHJpbmcgcnVsZXMpIHRocm93cyBQYXJzZUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgbV9wYXJzZXJfID0gbmV3IENvbGxhdGlvblJ1bGVQYXJzZXIocnVsZXMpOworICAgICAgICBtX3BhcnNlcl8uYXNzZW1ibGVUb2tlbkxpc3QoKTsKKyAgICAgICAgbV91dGlsQ29sRUl0ZXJfID0gUnVsZUJhc2VkQ29sbGF0b3IuVUNBXy5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBpbm5lciBjbGFzc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqIAorICAgICAqIEludmVyc2UgVUNBIHdyYXBwZXIKKyAgICAgKi8KKyAgICBzdGF0aWMgY2xhc3MgSW52ZXJzZVVDQSAKKyAgICB7CisgICAgICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIEludmVyc2VVQ0EoKSAKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBwYWNrYWdlIHByaXZhdGUgZGF0YSBtZW1iZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogQXJyYXkgbGlzdCBvZiBjaGFyYWN0ZXJzCisgICAgICAgICAqLworICAgICAgICBpbnQgbV90YWJsZV9bXTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFycmF5IGxpc3Qgb2YgY29udGludWF0aW9uIGNoYXJhY3RlcnMKKyAgICAgICAgICovCisgICAgICAgIGNoYXIgbV9jb250aW51YXRpb25zX1tdOworICAgICAgICAKKyAgICAgICAgLy8gcGFja2FnZSBwcml2YXRlIG1ldGhvZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqCisJICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIGludmVyc2UgY2VzIG9mIHRoZSBhcmd1bWVudCBjZXMKKwkgICAgICogQHBhcmFtIGNlIGNlIHRvIHRlc3QKKwkgICAgICogQHBhcmFtIGNvbnRjZSBjb250aW51YXRpb24gY2UgdG8gdGVzdAorCSAgICAgKiBAcGFyYW0gc3RyZW5ndGggY29sbGF0aW9uIHN0cmVuZ3RoCisJICAgICAqIEBwYXJhbSBwcmV2cmVzdWx0IGFuIGFycmF5IHRvIHN0b3JlIHRoZSByZXR1cm4gcmVzdWx0cyBwcmV2aW91cyAKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgaW52ZXJzZSBjZSBhbmQgcHJldmlvdXMgaW52ZXJzZSBjb250aW51YXRpb24gY2UKKyAgICAgICAgICogQHJldHVybiByZXN1bHQgb2YgdGhlIGludmVyc2UgY2UgCisJICAgICAqLworCSAgICBmaW5hbCBpbnQgZ2V0SW52ZXJzZVByZXZDRShpbnQgY2UsIGludCBjb250Y2UsIGludCBzdHJlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJldnJlc3VsdFtdKSAKKwkgICAgeworCQkgICAgaW50IHJlc3VsdCA9IGZpbmRJbnZlcnNlQ0UoY2UsIGNvbnRjZSk7CisJCQorCQkgICAgaWYgKHJlc3VsdCA8IDApIHsKKwkJICAgICAgICBwcmV2cmVzdWx0WzBdID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUjsKKwkJICAgICAgICByZXR1cm4gLTE7CisJCSAgICB9CisJCQorCQkgICAgY2UgJj0gU1RSRU5HVEhfTUFTS19bc3RyZW5ndGhdOworCQkgICAgY29udGNlICY9IFNUUkVOR1RIX01BU0tfW3N0cmVuZ3RoXTsKKwkJCisgICAgICAgICAgICBwcmV2cmVzdWx0WzBdID0gY2U7CisJCSAgICBwcmV2cmVzdWx0WzFdID0gY29udGNlOworCQkKKwkJICAgIHdoaWxlICgocHJldnJlc3VsdFswXSAgJiBTVFJFTkdUSF9NQVNLX1tzdHJlbmd0aF0pID09IGNlIAorCQkgICAgICAgICAgICYmIChwcmV2cmVzdWx0WzFdICAmIFNUUkVOR1RIX01BU0tfW3N0cmVuZ3RoXSk9PSBjb250Y2UKKwkJICAgICAgICAgICAmJiByZXN1bHQgPiAwKSB7IAorCQkgICAgICAgICAgICAgICAgLy8gdGhpcyBjb25kaXRpb24gc2hvdWxkIHByZXZlbnQgZmFsbGluZyBvZmYgdGhlIGVkZ2Ugb2YgdGhlIAorCQkgICAgICAgICAgICAgICAgLy8gd29ybGQgCisJCSAgICAgICAgLy8gaGVyZSwgd2UgZW5kIHVwIGluIGEgc2luZ3VsYXJpdHkgLSB6ZXJvCisJCSAgICAgICAgcHJldnJlc3VsdFswXSA9IG1fdGFibGVfWzMgKiAoLS0gcmVzdWx0KV07CisJCSAgICAgICAgcHJldnJlc3VsdFsxXSA9IG1fdGFibGVfWzMgKiByZXN1bHQgKyAxXTsKKwkJICAgfQorICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCQl9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogRmluZGluZyB0aGUgaW52ZXJzZSBDRSBvZiB0aGUgYXJndW1lbnQgQ0VzCisgICAgICAgICAqIEBwYXJhbSBjZSBDRSB0byBiZSB0ZXN0ZWQKKyAgICAgICAgICogQHBhcmFtIGNvbnRjZSBjb250aW51YXRpb24gQ0UKKyAgICAgICAgICogQHJldHVybiBpbnZlcnNlIENFCisgICAgICAgICAqLworICAgICAgICBpbnQgZmluZEludmVyc2VDRShpbnQgY2UsIGludCBjb250Y2UpIAorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYm90dG9tID0gMDsKKyAgICAgICAgICAgIGludCB0b3AgPSBtX3RhYmxlXy5sZW5ndGggLyAzOworICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgCisgICAgICAgICAgICB3aGlsZSAoYm90dG9tIDwgdG9wIC0gMSkgeworCQkgICAgICAgIHJlc3VsdCA9ICh0b3AgKyBib3R0b20pID4+IDE7CisJCSAgICAgICAgaW50IGZpcnN0ID0gbV90YWJsZV9bMyAqIHJlc3VsdF07CisJCSAgICAgICAgaW50IHNlY29uZCA9IG1fdGFibGVfWzMgKiByZXN1bHQgKyAxXTsKKyAgICAgICAgICAgICAgICBpbnQgY29tcGFyaXNvbiA9IFV0aWxpdHkuY29tcGFyZVVuc2lnbmVkKGZpcnN0LCBjZSk7CisJCQkgICAgaWYgKGNvbXBhcmlzb24gPiAwKSB7CisJCQkgICAgICAgIHRvcCA9IHJlc3VsdDsKKwkJCSAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmlzb24gPCAwKSB7CisJCQkgICAgICAgIGJvdHRvbSA9IHJlc3VsdDsKKwkJCSAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeworCQkJICAgICAgICBpZiAoc2Vjb25kID4gY29udGNlKSB7CisJCQkgICAgICAgICAgICB0b3AgPSByZXN1bHQ7CisJCQkgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZCA8IGNvbnRjZSkgeworCQkJICAgICAgICAgICAgYm90dG9tID0gcmVzdWx0OworCQkJICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkJCSAgICAgICAgICAgIGJyZWFrOworCQkJICAgICAgICB9CisJCQkgICAgfQorCQkgICAgfQorCQkKKwkJICAgIHJldHVybiByZXN1bHQ7CisJCX0KKyAgICAKKwkgICAgLyoqCisJICAgICAqIEdldHRpbmcgZ2FwIG9mZnNldHMgaW4gdGhlIGludmVyc2UgVUNBCisJICAgICAqIEBwYXJhbSBsaXN0aGVhZGVyIHBhcnNlZCB0b2tlbiBsaXN0cworCSAgICAgKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBlcnJvciBvY2N1cnMgd2hpbGUgZmluZGluZyB0aGUgCisJICAgICAqICAgICAgICAgICAgY29sbGF0aW9uIGdhcHMKKwkgICAgICovCisJICAgIHZvaWQgZ2V0SW52ZXJzZUdhcFBvc2l0aW9ucyhDb2xsYXRpb25SdWxlUGFyc2VyLlRva2VuTGlzdEhlYWRlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGhlYWRlcikKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gCisJICAgIHsKKwkgICAgICAgIC8vIHJlc2V0IGFsbCB0aGUgZ2FwcworCQkgICAgQ29sbGF0aW9uUnVsZVBhcnNlci5Ub2tlbiB0b2tlbiA9IGxpc3RoZWFkZXIubV9maXJzdF87CisJICAgICAgICBpbnQgdG9rZW5zdHJlbmd0aCA9IHRva2VuLm1fc3RyZW5ndGhfOworCQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpICsrKSB7CisJCQkgICAgbGlzdGhlYWRlci5tX2dhcHNIaV9bMyAqIGldID0gMDsKKwkJCSAgICBsaXN0aGVhZGVyLm1fZ2Fwc0hpX1szICogaSArIDFdID0gMDsKKwkJCSAgICBsaXN0aGVhZGVyLm1fZ2Fwc0hpX1szICogaSArIDJdID0gMDsKKwkJCSAgICBsaXN0aGVhZGVyLm1fZ2Fwc0xvX1szICogaV0gPSAwOworCQkJICAgIGxpc3RoZWFkZXIubV9nYXBzTG9fWzMgKiBpICsgMV0gPSAwOworCQkJICAgIGxpc3RoZWFkZXIubV9nYXBzTG9fWzMgKiBpICsgMl0gPSAwOworCQkJICAgIGxpc3RoZWFkZXIubV9udW1TdHJfW2ldID0gMDsKKwkJCSAgICBsaXN0aGVhZGVyLm1fZlN0clRva2VuX1tpXSA9IG51bGw7CisJCQkgICAgbGlzdGhlYWRlci5tX2xTdHJUb2tlbl9baV0gPSBudWxsOworCQkJICAgIGxpc3RoZWFkZXIubV9wb3NfW2ldID0gLTE7CisJCSAgICB9CisJCisJICAgICAgICBpZiAoKGxpc3RoZWFkZXIubV9iYXNlQ0VfID4+PiAyNCkgCisgICAgICAgICAgICAgICAgPj0gUnVsZUJhc2VkQ29sbGF0b3IuVUNBX0NPTlNUQU5UU18uUFJJTUFSWV9JTVBMSUNJVF9NSU5fCisJICAgICAgICAgICAgJiYgKGxpc3RoZWFkZXIubV9iYXNlQ0VfID4+PiAyNCkKKyAgICAgICAgICAgICAgICA8IFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLlBSSU1BUllfSU1QTElDSVRfTUFYXykgCisgICAgICAgICAgICB7IAorCSAgICAgICAgICAgIC8vIGltcGxpY2l0cyAtCisJCQkgICAgbGlzdGhlYWRlci5tX3Bvc19bMF0gPSAwOworCQkJICAgIGludCB0MSA9IGxpc3RoZWFkZXIubV9iYXNlQ0VfOworCQkJICAgIGludCB0MiA9IGxpc3RoZWFkZXIubV9iYXNlQ29udENFXzsKKwkJCSAgICBsaXN0aGVhZGVyLm1fZ2Fwc0xvX1swXSA9IG1lcmdlQ0UodDEsIHQyLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuUFJJTUFSWSk7CisJCQkgICAgbGlzdGhlYWRlci5tX2dhcHNMb19bMV0gPSBtZXJnZUNFKHQxLCB0MiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlNFQ09OREFSWSk7CisJCQkgICAgbGlzdGhlYWRlci5tX2dhcHNMb19bMl0gPSBtZXJnZUNFKHQxLCB0MiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlRFUlRJQVJZKTsKKwkJCSAgICBpZiAobGlzdGhlYWRlci5tX2Jhc2VDRV8gPCAweEVGMDAwMDAwKSB7CisJCQkgICAgICAgIC8vIGZpcnN0IGltcGxpY2l0cyBoYXZlIHRocmVlIGJ5dGUgcHJpbWFyaWVzLCB3aXRoIGEgZ2FwIG9mCisgICAgICAgICAgICAgICAgICAgIC8vIG9uZSBzbyB3ZSBlc2VudGlhbGx5IG5lZWQgdG8gYWRkIDIgdG8gdGhlIHRvcCBieXRlIGluIAorCSAgICAgICAgICAgICAgICAvLyBsaXN0aGVhZGVyLm1fYmFzZUNvbnRDRV8KKwkJCSAgICAgICAgdDIgKz0gMHgwMjAwMDAwMDsKKwkJCSAgICB9IAorCSAgICAgICAgICAgIGVsc2UgeworCQkJICAgICAgICAvLyBzZWNvbmQgaW1wbGljaXRzIGhhdmUgZm91ciBieXRlIHByaW1hcmllcywgd2l0aCBhIGdhcCBvZgorICAgICAgICAgICAgICAgICAgICAvLyBJTVBMSUNJVF9MQVNUMl9NVUxUSVBMSUVSXworCQkJICAgICAgICAvLyBOb3csIHRoaXMgZ3V5IGlzIG5vdCByZWFsbHkgYWNjZXNzaWJsZSBoZXJlLCBzbyB1bnRpbCB3ZSAKKwkgICAgICAgICAgICAgICAgLy8gZmluZCBhIGJldHRlciB3YXkgdG8gcGFzcyBpdCBhcm91bmQsIGFzc3VtZSB0aGF0IHRoZSBnYXAgaXMgMQorCQkJICAgICAgICB0MiArPSAweDAwMDIwMDAwOworCQkJICAgIH0KKwkJICAgICAgICBsaXN0aGVhZGVyLm1fZ2Fwc0hpX1swXSA9IG1lcmdlQ0UodDEsIHQyLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuUFJJTUFSWSk7CisJCSAgICAgICAgbGlzdGhlYWRlci5tX2dhcHNIaV9bMV0gPSBtZXJnZUNFKHQxLCB0MiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlNFQ09OREFSWSk7CisJCSAgICAgICAgbGlzdGhlYWRlci5tX2dhcHNIaV9bMl0gPSBtZXJnZUNFKHQxLCB0MiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlRFUlRJQVJZKTsKKwkJICAgIH0gCisJICAgICAgICBlbHNlIGlmIChsaXN0aGVhZGVyLm1faW5kaXJlY3RfID09IHRydWUgCisgICAgICAgICAgICAgICAgICAgICAmJiBsaXN0aGVhZGVyLm1fbmV4dENFXyAhPSAwKSB7CisJCSAgICAgICAgbGlzdGhlYWRlci5tX3Bvc19bMF0gPSAwOworCQkJICAgIGludCB0MSA9IGxpc3RoZWFkZXIubV9iYXNlQ0VfOworCQkJICAgIGludCB0MiA9IGxpc3RoZWFkZXIubV9iYXNlQ29udENFXzsKKwkJCSAgICBsaXN0aGVhZGVyLm1fZ2Fwc0xvX1swXSA9IG1lcmdlQ0UodDEsIHQyLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuUFJJTUFSWSk7CisJCQkgICAgbGlzdGhlYWRlci5tX2dhcHNMb19bMV0gPSBtZXJnZUNFKHQxLCB0MiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlNFQ09OREFSWSk7CisJCQkgICAgbGlzdGhlYWRlci5tX2dhcHNMb19bMl0gPSBtZXJnZUNFKHQxLCB0MiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlRFUlRJQVJZKTsKKwkJCSAgICB0MSA9IGxpc3RoZWFkZXIubV9uZXh0Q0VfOworCQkJICAgIHQyID0gbGlzdGhlYWRlci5tX25leHRDb250Q0VfOworCQkJICAgIGxpc3RoZWFkZXIubV9nYXBzSGlfWzBdID0gbWVyZ2VDRSh0MSwgdDIsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsYXRvci5QUklNQVJZKTsKKwkJCSAgICBsaXN0aGVhZGVyLm1fZ2Fwc0hpX1sxXSA9IG1lcmdlQ0UodDEsIHQyLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuU0VDT05EQVJZKTsKKwkJCSAgICBsaXN0aGVhZGVyLm1fZ2Fwc0hpX1syXSA9IG1lcmdlQ0UodDEsIHQyLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuVEVSVElBUlkpOworCQkJfSAKKwkgICAgICAgIGVsc2UgeworCQkJICAgIHdoaWxlICh0cnVlKSB7CisJCQkgICAgICAgIGlmICh0b2tlbnN0cmVuZ3RoIDwgQ0VfQkFTSUNfU1RSRU5HVEhfTElNSVRfKSB7CisJICAgICAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fcG9zX1t0b2tlbnN0cmVuZ3RoXSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ2V0SW52ZXJzZU5leHQobGlzdGhlYWRlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vuc3RyZW5ndGgpOworCQkJICAgICAgICAgICAgaWYgKGxpc3RoZWFkZXIubV9wb3NfW3Rva2Vuc3RyZW5ndGhdID49IDApIHsKKwkJCSAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fZlN0clRva2VuX1t0b2tlbnN0cmVuZ3RoXSA9IHRva2VuOworCQkJICAgICAgICAgICAgfSAKKwkgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKKwkgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgQ0UgbXVzdCBiZSBpbXBsaWNpdCwgc2luY2UgaXQncyBub3QgaW4gdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhYmxlIAorCQkJCSAgICAgICAgICAgIC8vIEVycm9yCisJCQkJICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW50ZXJuYWwgcHJvZ3JhbSBlcnJvciIpOworCQkJICAgICAgICAgICAgfQorCQkJICAgICAgICB9CisJCQkKKwkJCSAgICAgICAgd2hpbGUgKHRva2VuICE9IG51bGwgJiYgdG9rZW4ubV9zdHJlbmd0aF8gPj0gdG9rZW5zdHJlbmd0aCkgCisgICAgICAgICAgICAgICAgICAgIHsKKwkJCQkgICAgICAgIGlmICh0b2tlbnN0cmVuZ3RoIDwgQ0VfQkFTSUNfU1RSRU5HVEhfTElNSVRfKSB7CisJCQkJICAgICAgICAgICAgbGlzdGhlYWRlci5tX2xTdHJUb2tlbl9bdG9rZW5zdHJlbmd0aF0gPSB0b2tlbjsKKwkJCQkgICAgICAgIH0KKwkJCQkgICAgICAgIHRva2VuID0gdG9rZW4ubV9uZXh0XzsKKwkJCQkgICAgfQorCQkJICAgICAgICBpZiAodG9rZW5zdHJlbmd0aCA8IENFX0JBU0lDX1NUUkVOR1RIX0xJTUlUXyAtIDEpIHsKKwkJCSAgICAgICAgICAgIC8vIGNoZWNrIGlmIHByZXZpb3VzIGludGVydmFsIGlzIHRoZSBzYW1lIGFuZCBtZXJnZSB0aGUgCisJICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnZhbHMgaWYgaXQgaXMgc28KKwkJCSAgICAgICAgICAgIGlmIChsaXN0aGVhZGVyLm1fcG9zX1t0b2tlbnN0cmVuZ3RoXSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IGxpc3RoZWFkZXIubV9wb3NfW3Rva2Vuc3RyZW5ndGggKyAxXSkgeworCQkJICAgICAgICAgICAgICAgIGxpc3RoZWFkZXIubV9mU3RyVG9rZW5fW3Rva2Vuc3RyZW5ndGhdIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxpc3RoZWFkZXIubV9mU3RyVG9rZW5fW3Rva2Vuc3RyZW5ndGggCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxXTsKKwkJCSAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fZlN0clRva2VuX1t0b2tlbnN0cmVuZ3RoICsgMV0gPSBudWxsOworCQkJICAgICAgICAgICAgICAgIGxpc3RoZWFkZXIubV9sU3RyVG9rZW5fW3Rva2Vuc3RyZW5ndGggKyAxXSA9IG51bGw7CisJCQkgICAgICAgICAgICAgICAgbGlzdGhlYWRlci5tX3Bvc19bdG9rZW5zdHJlbmd0aCArIDFdID0gLTE7CisJCQkgICAgICAgICAgICB9CisJCQkgICAgICAgIH0KKwkJCSAgICAgICAgaWYgKHRva2VuICE9IG51bGwpIHsKKwkJCSAgICAgICAgICAgIHRva2Vuc3RyZW5ndGggPSB0b2tlbi5tX3N0cmVuZ3RoXzsKKwkJCSAgICAgICAgfSAKKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJCQkgICAgICAgICAgICBicmVhazsKKwkJCSAgICAgICAgfQorCQkJICAgIH0KKwkJICAgICAgICBmb3IgKGludCBzdCA9IDA7IHN0IDwgMzsgc3QgKyspIHsKKwkgICAgICAgICAgICAgICAgaW50IHBvcyA9IGxpc3RoZWFkZXIubV9wb3NfW3N0XTsKKwkJICAgICAgICAgICAgaWYgKHBvcyA+PSAwKSB7CisJCSAgICAgICAgICAgICAgICBpbnQgdDEgPSBtX3RhYmxlX1szICogcG9zXTsKKwkJICAgICAgICAgICAgICAgIGludCB0MiA9IG1fdGFibGVfWzMgKiBwb3MgKyAxXTsKKwkJICAgICAgICAgICAgICAgIGxpc3RoZWFkZXIubV9nYXBzSGlfWzMgKiBzdF0gPSBtZXJnZUNFKHQxLCB0MiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuUFJJTUFSWSk7CisJCSAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fZ2Fwc0hpX1szICogc3QgKyAxXSA9IG1lcmdlQ0UodDEsIHQyLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IuU0VDT05EQVJZKTsKKwkJICAgICAgICAgICAgICAgIGxpc3RoZWFkZXIubV9nYXBzSGlfWzMgKiBzdCArIDJdID0gKHQxICYgMHgzZikgPDwgMjQgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHQyICYgMHgzZikgPDwgMTY7CisJCSAgICAgICAgICAgICAgICBwb3MgLS07CisJCSAgICAgICAgICAgICAgICB0MSA9IG1fdGFibGVfWzMgKiBwb3NdOworCQkgICAgICAgICAgICAgICAgdDIgPSBtX3RhYmxlX1szICogcG9zICsgMV07CisJCSAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fZ2Fwc0xvX1szICogc3RdID0gbWVyZ2VDRSh0MSwgdDIsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlBSSU1BUlkpOworCQkgICAgICAgICAgICAgICAgbGlzdGhlYWRlci5tX2dhcHNMb19bMyAqIHN0ICsgMV0gPSBtZXJnZUNFKHQxLCB0MiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlNFQ09OREFSWSk7CisJCSAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fZ2Fwc0xvX1szICogc3QgKyAyXSA9ICh0MSAmIDB4M2YpIDw8IDI0IAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICh0MiAmIDB4M2YpIDw8IDE2OworCQkgICAgICAgICAgICB9CisJCSAgICAgICAgfQorCQkgICAgfQorICAgICAgICB9CisJICAgIAorCSAgICAvKioKKwkgICAgICogR2V0cyB0aGUgbmV4dCBDRSBpbiB0aGUgaW52ZXJzZSB0YWJsZQorCSAgICAgKiBAcGFyYW0gbGlzdGhlYWRlciB0b2tlbiBsaXN0IGhlYWRlcgorCSAgICAgKiBAcGFyYW0gc3RyZW5ndGggY29sbGF0aW9uIHN0cmVuZ3RoCisJICAgICAqIEByZXR1cm4gbmV4dCBjZQorCSAgICAgKi8KKwkgICAgcHJpdmF0ZSBmaW5hbCBpbnQgZ2V0SW52ZXJzZU5leHQoQ29sbGF0aW9uUnVsZVBhcnNlci5Ub2tlbkxpc3RIZWFkZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RoZWFkZXIsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZW5ndGgpIAorCSAgICB7CisJCSAgICBpbnQgY2UgPSBsaXN0aGVhZGVyLm1fYmFzZUNFXzsKKwkJICAgIGludCBzZWNvbmRjZSA9IGxpc3RoZWFkZXIubV9iYXNlQ29udENFXzsgCisJCSAgICBpbnQgcmVzdWx0ID0gZmluZEludmVyc2VDRShjZSwgc2Vjb25kY2UpOworCQkJCisJCSAgICBpZiAocmVzdWx0IDwgMCkgeworCQkgICAgICAgIHJldHVybiAtMTsKKwkJICAgIH0KKwkJCQorCQkgICAgY2UgJj0gU1RSRU5HVEhfTUFTS19bc3RyZW5ndGhdOworCQkgICAgc2Vjb25kY2UgJj0gU1RSRU5HVEhfTUFTS19bc3RyZW5ndGhdOworCQkKKwkJICAgIGludCBuZXh0Y2UgPSBjZTsKKwkJICAgIGludCBuZXh0Y29udGNlID0gc2Vjb25kY2U7CisJCQorCQkgICAgd2hpbGUoKG5leHRjZSAmIFNUUkVOR1RIX01BU0tfW3N0cmVuZ3RoXSkgPT0gY2UgCisJCSAgICAgICAgICAmJiAobmV4dGNvbnRjZSAgJiBTVFJFTkdUSF9NQVNLX1tzdHJlbmd0aF0pID09IHNlY29uZGNlKSB7CisJCSAgICAgICAgbmV4dGNlID0gbV90YWJsZV9bMyAqICgrKyByZXN1bHQpXTsKKwkJICAgICAgICBuZXh0Y29udGNlID0gbV90YWJsZV9bMyAqIHJlc3VsdCArIDFdOworCQkgICAgfQorCQkJCisJCSAgICBsaXN0aGVhZGVyLm1fbmV4dENFXyA9IG5leHRjZTsKKwkJICAgIGxpc3RoZWFkZXIubV9uZXh0Q29udENFXyA9IG5leHRjb250Y2U7CisJCQorCQkgICAgcmV0dXJuIHJlc3VsdDsKKwkJfQorCX0KKworICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogSW52ZXJzZSBVQ0EsIGluc3RhbnRpYXRlIG9ubHkgd2hlbiByZXF1aXJlZAorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBJbnZlcnNlVUNBIElOVkVSU0VfVUNBXzsgCisgICAgCisgICAgLyoqCisgICAgICogSW5pdGlhbGl6aW5nIHRoZSBpbnZlcnNlIFVDQQorICAgICAqLworICAgIHN0YXRpYyB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgaW52ZGF0ID0gIi9jb20vaWJtL2ljdS9pbXBsL2RhdGEvaW52dWNhLmljdSI7CisgICAgICAgICAgICBJbnB1dFN0cmVhbSBpID0gaW52ZGF0LmdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShpbnZkYXQpOworICAgICAgICAgICAgQnVmZmVyZWRJbnB1dFN0cmVhbSBiID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oaSwgMTEwMDAwKTsKKyAgICAgICAgICAgIElOVkVSU0VfVUNBXyA9IENvbGxhdG9yUmVhZGVyLnJlYWRJbnZlcnNlVUNBKGIpOworICAgICAgICAgICAgYi5jbG9zZSgpOworICAgICAgICAgICAgaS5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBwYWNrYWdlIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFBhcnNlIGFuZCBzZXRzIHRoZSBjb2xsYXRpb24gcnVsZXMgaW4gdGhlIGFyZ3VtZW50IGNvbGxhdG9yCisgICAgICogQHBhcmFtIGNvbGxhdG9yIHRvIHNldAorICAgICAqIEBleGNlcHRpb24gRXhjZXB0aW9uIHRocm93biB3aGVuIGludGVybmFsIHByb2dyYW0gZXJyb3Igb2NjdXJzCisgICAgICovCisgICAgdm9pZCBzZXRSdWxlcyhSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvcikgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgaWYgKG1fcGFyc2VyXy5tX3Jlc3VsdExlbmd0aF8gPiAwIHx8IG1fcGFyc2VyXy5tX3JlbW92ZVNldF8gIT0gbnVsbCkgeyAKKwkJICAgIC8vIHdlIGhhdmUgYSBzZXQgb2YgcnVsZXMsIGxldCdzIG1ha2Ugc29tZXRoaW5nIG9mIGl0IAorCQkgICAgYXNzZW1ibGVUYWlsb3JpbmdUYWJsZShjb2xsYXRvcik7CisJCX0gCisJCWVsc2UgeyAvLyBubyBydWxlcywgYnV0IG5vIGVycm9yIGVpdGhlciBtdXN0IGJlIG9ubHkgb3B0aW9ucworCQkgICAgICAgLy8gV2Ugd2lsbCBpbml0IHRoZSBjb2xsYXRvciBmcm9tIFVDQSAgIAorCQkgICAgY29sbGF0b3Iuc2V0V2l0aFVDQVRhYmxlcygpOworCQl9CisgICAgICAgIC8vIEFuZCBzZXQgb25seSB0aGUgb3B0aW9ucworICAgICAgICBtX3BhcnNlcl8uc2V0RGVmYXVsdE9wdGlvbnNJbkNvbGxhdG9yKGNvbGxhdG9yKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGNvcHlSYW5nZUZyb21VQ0EoQnVpbGRUYWJsZSB0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKKyAgICAgICAgaW50IHUgPSAwOworICAgICAgICBmb3IgKHUgPSBzdGFydDsgdSA8PSBlbmQ7IHUgKyspIHsKKyAgICAgICAgICAgIC8vIGlmICgoQ0UgPSB1Y21wZTMyX2dldCh0Lm1fbWFwcGluZywgdSkpID09IFVDT0xfTk9UX0ZPVU5ECisgICAgICAgICAgICBpbnQgQ0UgPSB0Lm1fbWFwcGluZ18uZ2V0VmFsdWUodSk7CisgICAgICAgICAgICBpZiAoQ0UgPT0gQ0VfTk9UX0ZPVU5EXyAKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHRlc3QgaXMgZm9yIGNvbnRyYWN0aW9ucyB0aGF0IGFyZSBtaXNzaW5nIHRoZSBzdGFydGluZyAKKyAgICAgICAgICAgICAgICAvLyBlbGVtZW50LiBMb29rcyBsaWtlIGxhdGluLTEgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIAorICAgICAgICAgICAgICAgIC8vIGFzc2VtYmxpbmcgdGhlIHRhYmxlLCBldmVuIGlmIGl0IHJlc3VsdHMgaW4gbW9yZSBmYWxzZSAKKyAgICAgICAgICAgICAgICAvLyBjbG9zdXJlIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgfHwgKGlzQ29udHJhY3Rpb25UYWJsZUVsZW1lbnQoQ0UpIAorICAgICAgICAgICAgICAgICAgICYmIGdldENFKHQubV9jb250cmFjdGlvbnNfLCBDRSwgMCkgPT0gQ0VfTk9UX0ZPVU5EXykpIHsKKyAgICAgICAgICAgICAgICAvL21fdXRpbEVsZW1lbnRfLm1fdWNoYXJzXyA9IHN0ci50b1N0cmluZygpOworICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fdWNoYXJzXyA9IFVDaGFyYWN0ZXIudG9TdHJpbmcodSk7CisgICAgICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9jUG9pbnRzXyA9IG1fdXRpbEVsZW1lbnRfLm1fdWNoYXJzXzsKKyAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX3ByZWZpeF8gPSAwOworICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fQ0VMZW5ndGhfID0gMDsKKyAgICAgICAgICAgICAgICBtX3V0aWxDb2xFSXRlcl8uc2V0VGV4dChtX3V0aWxFbGVtZW50Xy5tX3VjaGFyc18pOworICAgICAgICAgICAgICAgIHdoaWxlIChDRSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgIENFID0gbV91dGlsQ29sRUl0ZXJfLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENFICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fQ0VzX1ttX3V0aWxFbGVtZW50Xy5tX0NFTGVuZ3RoXyArK10gCisgICAgICAgICAgICAgICAgICAgICAgICA9IENFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZEFuRWxlbWVudCh0LCBtX3V0aWxFbGVtZW50Xyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiAyLiAgRWxpbWluYXRlIHRoZSBuZWdhdGl2ZSBsaXN0cyBieSBkb2luZyB0aGUgZm9sbG93aW5nIGZvciBlYWNoIAorICAgICAqIG5vbi1udWxsIG5lZ2F0aXZlIGxpc3Q6IAorICAgICAqIG8gICBpZiBwcmV2aW91c0NFKGJhc2VDRSwgc3Ryb25nZXN0TikgIT0gc29tZSBMaXN0SGVhZGVyIFgncyBiYXNlQ0UsIAorICAgICAqIGNyZWF0ZSBuZXcgTGlzdEhlYWRlciBYIAorICAgICAqIG8gICByZXZlcnNlIHRoZSBsaXN0LCBhZGQgdG8gdGhlIGVuZCBvZiBYJ3MgcG9zaXRpdmUgbGlzdC4gUmVzZXQgdGhlIAorICAgICAqIHN0cmVuZ3RoIG9mIHRoZSBmaXJzdCBpdGVtIHlvdSBhZGQsIGJhc2VkIG9uIHRoZSBzdHJvbmdlciBzdHJlbmd0aCAKKyAgICAgKiBsZXZlbHMgb2YgdGhlIHR3byBsaXN0cy4gCisgICAgICogCisgICAgICogMy4gIEZvciBlYWNoIExpc3RIZWFkZXIgd2l0aCBhIG5vbi1udWxsIHBvc2l0aXZlIGxpc3Q6IAorICAgICAqIG8gICBGaW5kIGFsbCBjaGFyYWN0ZXIgc3RyaW5ncyB3aXRoIENFcyBiZXR3ZWVuIHRoZSBiYXNlQ0UgYW5kIHRoZSAKKyAgICAgKiBuZXh0L3ByZXZpb3VzIENFLCBhdCB0aGUgc3RyZW5ndGggb2YgdGhlIGZpcnN0IHRva2VuLiBBZGQgdGhlc2UgdG8gdGhlIAorICAgICAqIHRhaWxvcmluZy4gCisgICAgICogICAgID8gVGhhdCBpcywgaWYgVUNBIGhhcyAuLi4gIHggPDw8IFggPDwgeCcgPDw8IFgnIDwgeSAuLi4sIGFuZCB0aGUgCisgICAgICogICAgICAgdGFpbG9yaW5nIGhhcyAmIHggPCB6Li4uIAorICAgICAqICAgICA/IFRoZW4gd2UgY2hhbmdlIHRoZSB0YWlsb3JpbmcgdG8gJiB4ICA8PDwgWCA8PCB4JyA8PDwgWCcgPCB6IC4uLiAKKyAgICAgKiAKKyAgICAgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgcGFydCBzaG91bGQgYmUgZG9uZSBldmVuIHdoaWxlIGNvbnN0cnVjdGluZyBsaXN0CisgICAgICogVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBpcyB1bmtub3duIHdoYXQgaXMgZ29pbmcgdG8gYmUgdGhlIHN0cm9uZ2VzdCAKKyAgICAgKiB3ZWlnaHQuCisgICAgICogU28gd2UgbWlnaHQgYXMgd2VsbCBkbyBpdCBoZXJlCisgICAgICogbyAgIEFsbG9jYXRlIENFcyBmb3IgZWFjaCB0b2tlbiBpbiB0aGUgbGlzdCwgYmFzZWQgb24gdGhlIHRvdGFsIG51bWJlciBOIAorICAgICAqIG9mIHRoZSBsYXJnZXN0IGxldmVsIGRpZmZlcmVuY2UsIGFuZCB0aGUgZ2FwIEcgYmV0d2VlbiBiYXNlQ0UgYW5kIG5leHRDRSAKKyAgICAgKiBhdCB0aGF0IGxldmVsLiBUaGUgcmVsYXRpb24gKiBiZXR3ZWVuIHRoZSBsYXN0IGl0ZW0gYW5kIG5leHRDRSBpcyB0aGUgCisgICAgICogc2FtZSBhcyB0aGUgc3Ryb25nZXN0IHN0cmVuZ3RoLiAKKyAgICAgKiBvICAgRXhhbXBsZTogYmFzZUNFIDwgYSA8PCBiIDw8PCBxIDw8IGMgPCBkIDwgZSAqIG5leHRDRShYLDEpIAorICAgICAqICAgICA/IFRoZXJlIGFyZSAzIHByaW1hcnkgaXRlbXM6IGEsIGQsIGUuIEZpdCB0aGVtIGludG8gdGhlIHByaW1hcnkgZ2FwLiAKKyAgICAgKiAgICAgVGhlbiBmaXQgYiBhbmQgYyBpbnRvIHRoZSBzZWNvbmRhcnkgZ2FwIGJldHdlZW4gYSBhbmQgZCwgdGhlbiBmaXQgcSAKKyAgICAgKiAgICAgaW50byB0aGUgdGVydGlhcnkgZ2FwIGJldHdlZW4gYiBhbmQgYy4gCisgICAgICogbyAgIEV4YW1wbGU6IGJhc2VDRSA8PCBiIDw8PCBxIDw8IGMgKiBuZXh0Q0UoWCwyKSAKKyAgICAgKiAgICAgPyBUaGVyZSBhcmUgMiBzZWNvbmRhcnkgaXRlbXM6IGIsIGMuIEZpdCB0aGVtIGludG8gdGhlIHNlY29uZGFyeSBnYXAuIAorICAgICAqICAgICAgIFRoZW4gZml0IHEgaW50byB0aGUgdGVydGlhcnkgZ2FwIGJldHdlZW4gYiBhbmQgYy4gCisgICAgICogbyAgIFdoZW4gaW5jcmVtZW50aW5nIHByaW1hcnkgdmFsdWVzLCB3ZSB3aWxsIG5vdCBjcm9zcyBoaWdoIGJ5dGUgCisgICAgICogICAgIGJvdW5kYXJpZXMgZXhjZXB0IHdoZXJlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUtYnl0ZSBwcmltYXJ5LiBUaGF0IGlzIAorICAgICAqICAgICB0byBlbnN1cmUgdGhhdCB0aGUgc2NyaXB0IHJlb3JkZXJpbmcgd2lsbCBjb250aW51ZSB0byB3b3JrLiAKKyAgICAgKiBAcGFyYW0gY29sbGF0b3IgdGhlIHJ1bGUgYmFzZWQgY29sbGF0b3IgdG8gdXBkYXRlCisgICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb24gdGhyb3duIHdoZW4gaW50ZXJuYWwgcHJvZ3JhbSBlcnJvciBvY2N1cnMKKyAgICAgKi8KKyAgICB2b2lkIGFzc2VtYmxlVGFpbG9yaW5nVGFibGUoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IpIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIAorCSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcGFyc2VyXy5tX3Jlc3VsdExlbmd0aF87IGkgKyspIHsKKwkJICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSBDRXMgIAorCQkgICAgLy8gV2Ugc3R1ZmYgdGhlIGluaXRpYWwgdmFsdWUgaW4gdGhlIGJ1ZmZlcnMsIGFuZCBpbmNyZWFzZSB0aGUgCisgICAgICAgICAgICAvLyBhcHByb3ByaWF0ZSBidWZmZXIgYWNjb3JkaW5nIHRvIHN0cmVuZ3RoCisJCSAgICBpbml0QnVmZmVycyhtX3BhcnNlcl8ubV9saXN0SGVhZGVyX1tpXSk7CisJICAgIH0KKwkJCisgICAgICAgIGlmIChtX3BhcnNlcl8ubV92YXJpYWJsZVRvcF8gIT0gbnVsbCkgeyAKKyAgICAgICAgICAgIC8vIHN0dWZmIHRoZSB2YXJpYWJsZSB0b3AgdmFsdWUKKwkJICAgIG1fcGFyc2VyXy5tX29wdGlvbnNfLm1fdmFyaWFibGVUb3BWYWx1ZV8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fcGFyc2VyXy5tX3ZhcmlhYmxlVG9wXy5tX0NFX1swXSA+Pj4gMTY7CisJCSAgICAvLyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdAorCQkgICAgaWYgKG1fcGFyc2VyXy5tX3ZhcmlhYmxlVG9wXy5tX2xpc3RIZWFkZXJfLm1fZmlyc3RfIAorICAgICAgICAgICAgICAgID09IG1fcGFyc2VyXy5tX3ZhcmlhYmxlVG9wXykgeyAvLyBmaXJzdCBpbiBsaXN0CisJCSAgICAgICAgbV9wYXJzZXJfLm1fdmFyaWFibGVUb3BfLm1fbGlzdEhlYWRlcl8ubV9maXJzdF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbV9wYXJzZXJfLm1fdmFyaWFibGVUb3BfLm1fbmV4dF87CisJCSAgICB9CisJCSAgICBpZiAobV9wYXJzZXJfLm1fdmFyaWFibGVUb3BfLm1fbGlzdEhlYWRlcl8ubV9sYXN0XyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IG1fcGFyc2VyXy5tX3ZhcmlhYmxlVG9wXykgeyAKKyAgICAgICAgICAgICAgICAvLyBmaXJzdCBpbiBsaXN0CisJCSAgICAgICAgbV9wYXJzZXJfLm1fdmFyaWFibGVUb3BfLm1fbGlzdEhlYWRlcl8ubV9sYXN0XyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fcGFyc2VyXy5tX3ZhcmlhYmxlVG9wXy5tX3ByZXZpb3VzXzsgICAgCisJCSAgICB9CisJCSAgICBpZiAobV9wYXJzZXJfLm1fdmFyaWFibGVUb3BfLm1fbmV4dF8gIT0gbnVsbCkgeworCQkgICAgICAgIG1fcGFyc2VyXy5tX3ZhcmlhYmxlVG9wXy5tX25leHRfLm1fcHJldmlvdXNfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbV9wYXJzZXJfLm1fdmFyaWFibGVUb3BfLm1fcHJldmlvdXNfOworCQkgICAgfQorCQkgICAgaWYgKG1fcGFyc2VyXy5tX3ZhcmlhYmxlVG9wXy5tX3ByZXZpb3VzXyAhPSBudWxsKSB7CisJCSAgICAgICAgbV9wYXJzZXJfLm1fdmFyaWFibGVUb3BfLm1fcHJldmlvdXNfLm1fbmV4dF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtX3BhcnNlcl8ubV92YXJpYWJsZVRvcF8ubV9uZXh0XzsKKwkJICAgIH0KKwkJfQorCQkKKwkJQnVpbGRUYWJsZSB0ID0gbmV3IEJ1aWxkVGFibGUobV9wYXJzZXJfKTsKKwkJCisgICAgICAgIC8vIEFmdGVyIHRoaXMsIHdlIGhhdmUgYXNzaWduZWQgQ0UgdmFsdWVzIHRvIGFsbCByZWd1bGFyIENFcyBub3cgd2UgCisJCS8vIHdpbGwgZ28gdGhyb3VnaCBsaXN0IG9uY2UgbW9yZSBhbmQgcmVzb2x2ZSBleHBhbnNpb25zLCBtYWtlIAorCQkvLyBVQ0FFbGVtZW50cyBzdHJ1Y3RzIGFuZCBhZGQgdGhlbSB0byB0YWJsZSAgICAgICAgICAgICAgIAorCQlmb3IgKGludCBpID0gMDsgaSA8IG1fcGFyc2VyXy5tX3Jlc3VsdExlbmd0aF87IGkgKyspIHsKKwkJICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSBDRXMgCisJCSAgICAvLyBXZSBzdHVmZiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiB0aGUgYnVmZmVycywgYW5kIGluY3JlYXNlIHRoZSAKKwkJICAgIC8vIGFwcHJvcHJpYXRlIGJ1ZmZlciBhY2NvcmRpbmcgdG8gc3RyZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgIGNyZWF0ZUVsZW1lbnRzKHQsIG1fcGFyc2VyXy5tX2xpc3RIZWFkZXJfW2ldKTsKKwkJfQorCQkKKyAgICAgICAgbV91dGlsRWxlbWVudF8uY2xlYXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHN0ciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgCisJCS8vIGFkZCBsYXRpbi0xIHN0dWZmCisgICAgICAvKiBhZGQgbGF0aW4tMSBzdHVmZiAqLworICAgICAgY29weVJhbmdlRnJvbVVDQSh0LCAwLCAweEZGKTsKKyAgICAKKyAgICAgIC8qIGFkZCBzdHVmZiBmb3IgY29weWluZyAqLworICAgICAgaWYobV9wYXJzZXJfLm1fY29weVNldF8gIT0gbnVsbCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGZvcihpID0gMDsgaSA8IG1fcGFyc2VyXy5tX2NvcHlTZXRfLmdldFJhbmdlQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgY29weVJhbmdlRnJvbVVDQSh0LCBtX3BhcnNlcl8ubV9jb3B5U2V0Xy5nZXRSYW5nZVN0YXJ0KGkpLCBtX3BhcnNlcl8ubV9jb3B5U2V0Xy5nZXRSYW5nZUVuZChpKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIGNvcHkgY29udHJhY3Rpb25zIGZyb20gdGhlIFVDQSAtIHRoaXMgaXMgZmVsdCBtb3N0bHkgZm9yIGN5cmlsbGljCisJCWNoYXIgY29udHNbXSA9IFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05UUkFDVElPTlNfOworICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKwkJd2hpbGUgKGNvbnRzW29mZnNldF0gIT0gMCkgeworCQkgICAgLy8gdGFpbG9yZWRDRSA9IHVjbXBlMzJfZ2V0KHQubV9tYXBwaW5nLCAqY29udHMpOworICAgICAgICAgICAgaW50IHRhaWxvcmVkQ0UgPSB0Lm1fbWFwcGluZ18uZ2V0VmFsdWUoY29udHNbb2Zmc2V0XSk7CisJCSAgICBpZiAodGFpbG9yZWRDRSAhPSBDRV9OT1RfRk9VTkRfKSB7ICAgICAgICAgCisJCSAgICAgICAgYm9vbGVhbiBuZWVkVG9BZGQgPSB0cnVlOworCQkgICAgICAgIGlmIChpc0NvbnRyYWN0aW9uVGFibGVFbGVtZW50KHRhaWxvcmVkQ0UpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1RhaWxvcmVkKHQubV9jb250cmFjdGlvbnNfLCB0YWlsb3JlZENFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHMsIG9mZnNldCArIDEpID09IHRydWUpIHsKKwkJICAgICAgICAgICAgICAgIG5lZWRUb0FkZCA9IGZhbHNlOworCQkgICAgICAgICAgICB9CisJCSAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKG1fcGFyc2VyXy5tX3JlbW92ZVNldF8gIT0gbnVsbCAmJiBtX3BhcnNlcl8ubV9yZW1vdmVTZXRfLmNvbnRhaW5zKGNvbnRzW29mZnNldF0pKSB7CisgICAgICAgICAgICAgICAgICAgIG5lZWRUb0FkZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChuZWVkVG9BZGQgPT0gdHJ1ZSkgeyAKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBhZGQgaWYgdGhpcyBjb250cmFjdGlvbiBpcyBub3QgdGFpbG9yZWQuCisJCSAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fcHJlZml4XyA9IDA7CisJCSAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fcHJlZml4Q2hhcnNfID0gbnVsbDsKKwkJICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9jUG9pbnRzXyA9IG1fdXRpbEVsZW1lbnRfLm1fdWNoYXJzXzsKKyAgICAgICAgICAgICAgICAgICAgc3RyLmRlbGV0ZSgwLCBzdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKGNvbnRzW29mZnNldF0pOworICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKGNvbnRzW29mZnNldCArIDFdKTsKKwkJICAgICAgICAgICAgaWYgKGNvbnRzW29mZnNldCArIDJdICE9IDApIHsKKyAgICAJCSAgICAgICAgICAgIHN0ci5hcHBlbmQoY29udHNbb2Zmc2V0ICsgMl0pOworICAgIAkJICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX3VjaGFyc18gPSBzdHIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9DRUxlbmd0aF8gPSAwOworICAgICAgICAgICAgICAgICAgICBtX3V0aWxDb2xFSXRlcl8uc2V0VGV4dChtX3V0aWxFbGVtZW50Xy5tX3VjaGFyc18pOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IENFID0gbV91dGlsQ29sRUl0ZXJfLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDRSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9DRXNfW21fdXRpbEVsZW1lbnRfLm1fQ0VMZW5ndGhfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytdID0gQ0U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhZGRBbkVsZW1lbnQodCwgbV91dGlsRWxlbWVudF8pOworICAgICAgICAgICAgICAgIH0KKwkJICAgIH0gZWxzZSBpZihtX3BhcnNlcl8ubV9yZW1vdmVTZXRfICE9IG51bGwgJiYgbV9wYXJzZXJfLm1fcmVtb3ZlU2V0Xy5jb250YWlucyhjb250c1tvZmZzZXRdKSkgeworICAgICAgICAgICAgICAgIGNvcHlSYW5nZUZyb21VQ0EodCwgY29udHNbb2Zmc2V0XSwgY29udHNbb2Zmc2V0XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKwkJICAgIG9mZnNldCArPSAzOworCQl9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgY29tcGxldGVseSBpZ25vcmFibGUgZWxlbWVudHMKKyAgICAgICAgcHJvY2Vzc1VDQUNvbXBsZXRlSWdub3JhYmxlcyh0KTsKKyAgICAgICAgCisgICAgICAgIC8vIGNhbm9uaWNhbCBjbG9zdXJlIAorICAgICAgICBjYW5vbmljYWxDbG9zdXJlKHQpOworICAKKwkJLy8gc3RpbGwgbmVlZCB0byBwcm9kdWNlIGNvbXBhdGliaWxpdHkgY2xvc3VyZQorCQlhc3NlbWJsZVRhYmxlKHQsIGNvbGxhdG9yKTsgIAorICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGlubmVyIGNsYXNzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENFR2VuZXJhdG9yIAorICAgIHsKKyAgICAgICAgLy8gcGFja2FnZSBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKwkgICAgV2VpZ2h0UmFuZ2UgbV9yYW5nZXNfW107CisJICAgIGludCBtX3Jhbmdlc0xlbmd0aF87CisJICAgIGludCBtX2J5dGVTaXplXzsgCisgICAgICAgIGludCBtX3N0YXJ0XzsgCisgICAgICAgIGludCBtX2xpbWl0XzsKKwkgICAgaW50IG1fbWF4Q291bnRfOworCSAgICBpbnQgbV9jb3VudF87CisJICAgIGludCBtX2N1cnJlbnRfOworCSAgICBpbnQgbV9mTG93XzsgLy8gZm9yYmlkZGVuIExvdyAKKwkgICAgaW50IG1fZkhpZ2hfOyAvLyBmb3JiaWRkZW4gSGlnaCAKKyAgICAgICAgCisgICAgICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIENFR2VuZXJhdG9yKCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmFuZ2VzXyA9IG5ldyBXZWlnaHRSYW5nZVs3XTsgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSA2OyBpID49IDA7IGkgLS0pIHsKKyAgICAgICAgICAgICAgICBtX3Jhbmdlc19baV0gPSBuZXcgV2VpZ2h0UmFuZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCX07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBXZWlnaHRSYW5nZSBpbXBsZW1lbnRzIENvbXBhcmFibGUKKyAgICB7CisgICAgICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb21wYXJlcyB0aGlzIG9iamVjdCB3aXRoIHRhcmdldAorICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IG9iamVjdCB0byBjb21wYXJlIHdpdGgKKyAgICAgICAgICogQHJldHVybiAwIGlmIGVxdWFscywgMSBpZiB0aGlzIGlzID4gdGFyZ2V0LCAtMSBvdGhlcndpc2UKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKE9iamVjdCB0YXJnZXQpIAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcyA9PSB0YXJnZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCB0c3RhcnQgPSAoKFdlaWdodFJhbmdlKXRhcmdldCkubV9zdGFydF87ICAgCisgICAgICAgICAgICBpZiAobV9zdGFydF8gPT0gdHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9zdGFydF8gPiB0c3RhcnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluaXRpYWxpemUgCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc3RhcnRfID0gMDsKKyAgICAgICAgICAgIG1fZW5kXyA9IDA7CisgICAgICAgICAgICBtX2xlbmd0aF8gPSAwOyAKKyAgICAgICAgICAgIG1fY291bnRfID0gMDsKKyAgICAgICAgICAgIG1fbGVuZ3RoMl8gPSAwOworICAgICAgICAgICAgbV9jb3VudDJfID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gcGFja2FnZSBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKwkgICAgaW50IG1fc3RhcnRfOworICAgICAgICBpbnQgbV9lbmRfOworCSAgICBpbnQgbV9sZW5ndGhfOyAKKyAgICAgICAgaW50IG1fY291bnRfOworCSAgICBpbnQgbV9sZW5ndGgyXzsKKwkgICAgaW50IG1fY291bnQyXzsKKyAgICAgICAgCisgICAgICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIFdlaWdodFJhbmdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvcHkgY29uc3RydWN0b3IuCisgICAgICAgICAqIENsb25lYWJsZSBpcyB0cm91Ymxlc29tZSwgbmVlZHMgdG8gY2hlY2sgZm9yIGV4Y2VwdGlvbgorICAgICAgICAgKiBAcGFyYW0gc291cmNlIHRvIGNsb25lCisgICAgICAgICAqLworICAgICAgICBXZWlnaHRSYW5nZShXZWlnaHRSYW5nZSBzb3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc3RhcnRfID0gc291cmNlLm1fc3RhcnRfOworICAgICAgICAgICAgbV9lbmRfID0gc291cmNlLm1fZW5kXzsKKyAgICAgICAgICAgIG1fbGVuZ3RoXyA9IHNvdXJjZS5tX2xlbmd0aF87IAorICAgICAgICAgICAgbV9jb3VudF8gPSBzb3VyY2UubV9jb3VudF87CisgICAgICAgICAgICBtX2xlbmd0aDJfID0gc291cmNlLm1fbGVuZ3RoMl87CisgICAgICAgICAgICBtX2NvdW50Ml8gPSBzb3VyY2UubV9jb3VudDJfOworICAgICAgICB9CisJfTsKKwkKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBNYXhKYW1vRXhwYW5zaW9uVGFibGUKKwl7CisJCS8vIHBhY2thZ2UgcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJICAgIFZlY3RvciBtX2VuZEV4cGFuc2lvbkNFXzsKKwkgICAgLy8gdmVjdG9yIG9mIGJvb2xlYW5zCisJICAgIFZlY3RvciBtX2lzVl87CisJICAgIGJ5dGUgbV9tYXhMU2l6ZV87CisJICAgIGJ5dGUgbV9tYXhWU2l6ZV87CisJICAgIGJ5dGUgbV9tYXhUU2l6ZV87CisJICAgIAorCSAgICAvLyBwYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgIAorCSAgICBNYXhKYW1vRXhwYW5zaW9uVGFibGUoKQorCSAgICB7CisJICAgIAltX2VuZEV4cGFuc2lvbkNFXyA9IG5ldyBWZWN0b3IoKTsKKwkgICAgCW1faXNWXyA9IG5ldyBWZWN0b3IoKTsKKwkgICAgCW1fZW5kRXhwYW5zaW9uQ0VfLmFkZChuZXcgSW50ZWdlcigwKSk7CisJICAgIAltX2lzVl8uYWRkKG5ldyBJbnRlZ2VyKDApKTsKKyAgICAgICAgICAgIG1fbWF4TFNpemVfID0gMTsKKyAgICAgICAgICAgIG1fbWF4VlNpemVfID0gMTsKKyAgICAgICAgICAgIG1fbWF4VFNpemVfID0gMTsKKwkgICAgfQorICAgICAgICAKKyAgICAgICAgTWF4SmFtb0V4cGFuc2lvblRhYmxlKE1heEphbW9FeHBhbnNpb25UYWJsZSB0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9lbmRFeHBhbnNpb25DRV8gPSAoVmVjdG9yKXRhYmxlLm1fZW5kRXhwYW5zaW9uQ0VfLmNsb25lKCk7CisgICAgICAgICAgICBtX2lzVl8gPSAoVmVjdG9yKXRhYmxlLm1faXNWXy5jbG9uZSgpOworICAgICAgICAgICAgbV9tYXhMU2l6ZV8gPSB0YWJsZS5tX21heExTaXplXzsKKyAgICAgICAgICAgIG1fbWF4VlNpemVfID0gdGFibGUubV9tYXhWU2l6ZV87CisgICAgICAgICAgICBtX21heFRTaXplXyA9IHRhYmxlLm1fbWF4VFNpemVfOworICAgICAgICB9CisJfTsKKwkKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBNYXhFeHBhbnNpb25UYWJsZSAKKwl7CisJCS8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJTWF4RXhwYW5zaW9uVGFibGUoKSAKKwkJeworCQkJbV9lbmRFeHBhbnNpb25DRV8gPSBuZXcgVmVjdG9yKCk7CisJCQltX2V4cGFuc2lvbkNFU2l6ZV8gPSBuZXcgVmVjdG9yKCk7CisJCQltX2VuZEV4cGFuc2lvbkNFXy5hZGQobmV3IEludGVnZXIoMCkpOworCQkJbV9leHBhbnNpb25DRVNpemVfLmFkZChuZXcgQnl0ZSgoYnl0ZSkwKSk7CisJCX0KKyAgICAgICAgCisgICAgICAgIE1heEV4cGFuc2lvblRhYmxlKE1heEV4cGFuc2lvblRhYmxlIHRhYmxlKSAKKyAgICAgICAgeworICAgICAgICAgICAgbV9lbmRFeHBhbnNpb25DRV8gPSAoVmVjdG9yKXRhYmxlLm1fZW5kRXhwYW5zaW9uQ0VfLmNsb25lKCk7CisgICAgICAgICAgICBtX2V4cGFuc2lvbkNFU2l6ZV8gPSAoVmVjdG9yKXRhYmxlLm1fZXhwYW5zaW9uQ0VTaXplXy5jbG9uZSgpOworICAgICAgICB9CisJCQorCQkvLyBwYWNrYWdlIHByaXZhdGUgZGF0YSBtZW1iZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJICAgIFZlY3RvciBtX2VuZEV4cGFuc2lvbkNFXzsKKwkgICAgVmVjdG9yIG1fZXhwYW5zaW9uQ0VTaXplXzsKKwl9OworCQorCXByaXZhdGUgc3RhdGljIGNsYXNzIEJhc2ljQ29udHJhY3Rpb25UYWJsZSAKKwl7CisJCS8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJQmFzaWNDb250cmFjdGlvblRhYmxlKCkKKwkJeworCQkJbV9DRXNfID0gbmV3IFZlY3RvcigpOworCSAgICAgICAgbV9jb2RlUG9pbnRzXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJfQorCQkKKwkJLy8gcGFja2FnZSBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCSAgICBTdHJpbmdCdWZmZXIgbV9jb2RlUG9pbnRzXzsKKwkgICAgVmVjdG9yIG1fQ0VzXzsKKyAgICB9OworICAgIAorCXByaXZhdGUgc3RhdGljIGNsYXNzIENvbnRyYWN0aW9uVGFibGUgCisJeworCQkvLyBwYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCS8qKgorCQkgKiBCdWlsZHMgYSBjb250cmFjdGlvbiB0YWJsZQorCQkgKiBAcGFyYW0gYnVpbGR0YWJsZQorCQkgKi8KKwkJQ29udHJhY3Rpb25UYWJsZShJbnRUcmllQnVpbGRlciBtYXBwaW5nKSAKKwkJeworCQkgICAgbV9tYXBwaW5nXyA9IG1hcHBpbmc7CisJCSAgICBtX2VsZW1lbnRzXyA9IG5ldyBWZWN0b3IoKTsKKwkJICAgIG1fQ0VzXyA9IG5ldyBWZWN0b3IoKTsKKwkJICAgIG1fY29kZVBvaW50c18gPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCSAgICBtX29mZnNldHNfID0gbmV3IFZlY3RvcigpOworCQkgICAgbV9jdXJyZW50VGFnXyA9IENFX05PVF9GT1VORF9UQUdfOworCQl9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogQ29waWVzIGEgY29udHJhY3Rpb24gdGFibGUuCisgICAgICAgICAqIE5vdCBhbGwgZGF0YSB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZWlyIG93biBvYmplY3QuCisgICAgICAgICAqIEBwYXJhbSB0YWJsZQorICAgICAgICAgKi8KKyAgICAgICAgQ29udHJhY3Rpb25UYWJsZShDb250cmFjdGlvblRhYmxlIHRhYmxlKSAKKyAgICAgICAgeworICAgICAgICAgICAgbV9tYXBwaW5nXyA9IHRhYmxlLm1fbWFwcGluZ187CisgICAgICAgICAgICBtX2VsZW1lbnRzXyA9IChWZWN0b3IpdGFibGUubV9lbGVtZW50c18uY2xvbmUoKTsKKyAgICAgICAgICAgIG1fY29kZVBvaW50c18gPSBuZXcgU3RyaW5nQnVmZmVyKHRhYmxlLm1fY29kZVBvaW50c18udG9TdHJpbmcoKSk7CisgICAgICAgICAgICBtX0NFc18gPSAoVmVjdG9yKXRhYmxlLm1fQ0VzXy5jbG9uZSgpOworICAgICAgICAgICAgbV9vZmZzZXRzXyA9IChWZWN0b3IpdGFibGUubV9vZmZzZXRzXy5jbG9uZSgpOworICAgICAgICAgICAgbV9jdXJyZW50VGFnXyA9IHRhYmxlLm1fY3VycmVudFRhZ187CisgICAgICAgIH0KKwkKKwkgICAgLy8gcGFja2FnZSBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgCisJCS8qKgorCQkgKiBWZWN0b3Igb2YgQmFzaWNDb250cmFjdGlvblRhYmxlCisJCSAqLworICAgICAgICBWZWN0b3IgbV9lbGVtZW50c187CisgICAgICAgIEludFRyaWVCdWlsZGVyIG1fbWFwcGluZ187CisgICAgICAgIFN0cmluZ0J1ZmZlciBtX2NvZGVQb2ludHNfOworCSAgICBWZWN0b3IgbV9DRXNfOworCSAgICBWZWN0b3IgbV9vZmZzZXRzXzsKKwkgICAgaW50IG1fY3VycmVudFRhZ187CisJfTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEJ1aWxkVGFibGUgaW1wbGVtZW50cyBUcmllQnVpbGRlci5EYXRhTWFuaXB1bGF0ZQorCXsKKwkJLy8gcGFja2FnZSBwcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorICAgICAgICAvKioKKwkJICogRm9yIGNvbnN0cnVjdGlvbiBvZiB0aGUgVHJpZSB0YWJsZXMuCisJCSAqIEhhcyB0byBiZSBsYWJlbGVkIHB1YmxpYworCQkgKiBAcGFyYW0gdGFibGUgYnVpbGQgdGFibGUKKwkJICogQHBhcmFtIGNwCisJCSAqIEBwYXJhbSBvZmZzZXQKKwkJICogQHJldHVybiBkYXRhIG9mZnNldCBvciAwIAorCQkgKiBAZHJhZnQgMi4yCisJCSAqLworCQlwdWJsaWMgaW50IGdldEZvbGRlZFZhbHVlKGludCBjcCwgaW50IG9mZnNldCkKKwkJeworCQkgICAgaW50IGxpbWl0ID0gY3AgKyAweDQwMDsKKwkJICAgIHdoaWxlIChjcCA8IGxpbWl0KSB7CisJCSAgICAJaW50IHZhbHVlID0gbV9tYXBwaW5nXy5nZXRWYWx1ZShjcCk7CisJCSAgICAJYm9vbGVhbiBpbkJsb2NrWmVybyA9IG1fbWFwcGluZ18uaXNJblplcm9CbG9jayhjcCk7CisJCQkgICAgaW50IHRhZyA9IGdldENFVGFnKHZhbHVlKTsKKwkJCSAgICBpZiAoaW5CbG9ja1plcm8gPT0gdHJ1ZSkgeworCQkJICAgICAgICBjcCArPSBUcmllQnVpbGRlci5EQVRBX0JMT0NLX0xFTkdUSF87CisJCQkgICAgfSAKKwkJCSAgICBlbHNlIGlmICghKGlzU3BlY2lhbCh2YWx1ZSkgJiYgKHRhZyA9PSBDRV9JTVBMSUNJVF9UQUdfIAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGFnID09IENFX05PVF9GT1VORF9UQUdfKSkpIHsKKwkJCSAgICAgICAgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IGFyZSBzdGFydGluZyBpbiBlaXRoZXIgVUNBIAorCQkJICAgICAgICAvLyAoSU1QTElDSVRfVEFHKSBvciBpbiB0aGUgdGFpbG9yaW5ncyAoTk9UX0ZPVU5EX1RBRykuIAorCQkJICAgICAgICAvLyBQcmVzZW5jZSBvZiB0aGVzZSB0YWdzIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm90aGluZyBpbiAKKwkJCSAgICAgICAgLy8gdGhpcyBwb3NpdGlvbiBhbmQgdGhhdCBpdCBzaG91bGQgYmUgc2tpcHBlZC4KKwkJCSAgICAgICAgcmV0dXJuIFJ1bGVCYXNlZENvbGxhdG9yLkNFX1NQRUNJQUxfRkxBR18gCisJCQkgICAgICAgICAgICAgICB8IChDRV9TVVJST0dBVEVfVEFHXyA8PCAyNCkgfCBvZmZzZXQ7CisJCQkgICAgfSAKKwkJCSAgICBlbHNlIHsKKwkJCSAgICAgICAgKysgY3A7CisJCQkgICAgfQorCQkgICAgfQorCQkJcmV0dXJuIDA7CisJCX0KKwkKKwkJLy8gcGFja2FnZSBwcml2YXRlIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkvKioKKwkJICogUmV0dXJucyBhIHRhYmxlCisJCSAqIEByZXR1cm4gYnVpbGQgdGFibGUKKwkJICovCisJCUJ1aWxkVGFibGUoQ29sbGF0aW9uUnVsZVBhcnNlciBwYXJzZXIpIAorCQl7CisJCQltX2NvbGxhdG9yXyA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcigpOworCQkJbV9jb2xsYXRvcl8uc2V0V2l0aFVDQURhdGEoKTsKKwkgICAgICAgIE1heEV4cGFuc2lvblRhYmxlIG1heGV0ID0gbmV3IE1heEV4cGFuc2lvblRhYmxlKCk7CisJICAgICAgICBNYXhKYW1vRXhwYW5zaW9uVGFibGUgbWF4amV0ID0gbmV3IE1heEphbW9FeHBhbnNpb25UYWJsZSgpOworCSAgICAgICAgbV9vcHRpb25zXyA9IHBhcnNlci5tX29wdGlvbnNfOworCSAgICAgICAgbV9leHBhbnNpb25zXyA9IG5ldyBWZWN0b3IoKTsKKwkgICAgICAgIC8vIERvIHlvdXIgb3duIG1hbGxvY3MgZm9yIHRoZSBzdHJ1Y3R1cmUsIGFycmF5IGFuZCBoYXZlIGxpbmVhciAKKwkgICAgICAgIC8vIExhdGluIDEKKwkgICAgICAgIG1fbWFwcGluZ18gPSBuZXcgSW50VHJpZUJ1aWxkZXIobnVsbCwgMHgxMDAwMDAsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQ0VfU1BFQ0lBTF9GTEFHXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoQ0VfTk9UX0ZPVU5EX1RBR18gPDwgMjQpLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOyAKKwkgICAgICAgIG1fcHJlZml4TG9va3VwXyA9IG5ldyBIYXNodGFibGUoKTsKKwkgICAgICAgIC8vIHVoYXNoX29wZW4ocHJlZml4TG9va3VwSGFzaCwgcHJlZml4TG9va3VwQ29tcCk7CisJICAgICAgICBtX2NvbnRyYWN0aW9uc18gPSBuZXcgQ29udHJhY3Rpb25UYWJsZShtX21hcHBpbmdfKTsKKwkgICAgICAgIC8vIGNvcHkgVUNBJ3MgbWF4ZXhwYW5zaW9uIGFuZCBtZXJnZSBhcyB3ZSBnbyBhbG9uZworCQkgICAgbV9tYXhFeHBhbnNpb25zXyA9IG1heGV0OworCQkgICAgLy8gYWRkaW5nIGFuIGV4dHJhIGluaXRpYWwgdmFsdWUgZm9yIGVhc2llciBtYW5pcHVsYXRpb24gCisJCSAgICBmb3IgKGludCBpID0gMDsgCisJCSAgICAgICAgIGkgPCBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfLm1fZXhwYW5zaW9uRW5kQ0VfLmxlbmd0aDsgaSArKykgeworCQkgICAgICAgICBtYXhldC5tX2VuZEV4cGFuc2lvbkNFXy5hZGQobmV3IEludGVnZXIoCisJCSAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfLm1fZXhwYW5zaW9uRW5kQ0VfW2ldKSk7CisJCSAgICAgICAgIG1heGV0Lm1fZXhwYW5zaW9uQ0VTaXplXy5hZGQobmV3IEJ5dGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLlVDQV8ubV9leHBhbnNpb25FbmRDRU1heFNpemVfW2ldKSk7CisJCSAgICB9CisJCSAgICBtX21heEphbW9FeHBhbnNpb25zXyA9IG1heGpldDsKKwkJCisJCSAgICBtX3Vuc2FmZUNQXyA9IG5ldyBieXRlW1VOU0FGRUNQX1RBQkxFX1NJWkVfXTsKKwkJICAgIG1fY29udHJFbmRDUF8gPSBuZXcgYnl0ZVtVTlNBRkVDUF9UQUJMRV9TSVpFX107CisJCSAgICBBcnJheXMuZmlsbChtX3Vuc2FmZUNQXywgKGJ5dGUpMCk7CisJCSAgICBBcnJheXMuZmlsbChtX2NvbnRyRW5kQ1BfLCAoYnl0ZSkwKTsKKwkJfQorCQorICAgICAgICAvKioKKyAgICAgICAgICogRHVwbGljYXRpbmcgYSBCdWlsZFRhYmxlLgorICAgICAgICAgKiBOb3QgYWxsIGRhdGEgd2lsbCBiZSBkdXBsaWNhdGVkIGludG8gdGhlaXIgb3duIG9iamVjdC4KKyAgICAgICAgICogQHBhcmFtIHRhYmxlIHRvIGNsb25lCisgICAgICAgICAqLworICAgICAgICBCdWlsZFRhYmxlKEJ1aWxkVGFibGUgdGFibGUpIAorICAgICAgICB7CisgICAgICAgICAgICBtX2NvbGxhdG9yXyA9IHRhYmxlLm1fY29sbGF0b3JfOworICAgICAgICAgICAgbV9tYXBwaW5nXyA9IG5ldyBJbnRUcmllQnVpbGRlcih0YWJsZS5tX21hcHBpbmdfKTsKKyAgICAgICAgICAgIG1fZXhwYW5zaW9uc18gPSAoVmVjdG9yKXRhYmxlLm1fZXhwYW5zaW9uc18uY2xvbmUoKTsKKyAgICAgICAgICAgIG1fY29udHJhY3Rpb25zXyA9IG5ldyBDb250cmFjdGlvblRhYmxlKHRhYmxlLm1fY29udHJhY3Rpb25zXyk7CisgICAgICAgICAgICBtX2NvbnRyYWN0aW9uc18ubV9tYXBwaW5nXyA9IG1fbWFwcGluZ187CisgICAgICAgICAgICBtX29wdGlvbnNfID0gdGFibGUubV9vcHRpb25zXzsKKyAgICAgICAgICAgIG1fbWF4RXhwYW5zaW9uc18gPSBuZXcgTWF4RXhwYW5zaW9uVGFibGUodGFibGUubV9tYXhFeHBhbnNpb25zXyk7CisgICAgICAgICAgICBtX21heEphbW9FeHBhbnNpb25zXyAKKyAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgTWF4SmFtb0V4cGFuc2lvblRhYmxlKHRhYmxlLm1fbWF4SmFtb0V4cGFuc2lvbnNfKTsKKyAgICAgICAgICAgIG1fdW5zYWZlQ1BfID0gbmV3IGJ5dGVbdGFibGUubV91bnNhZmVDUF8ubGVuZ3RoXTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGFibGUubV91bnNhZmVDUF8sIDAsIG1fdW5zYWZlQ1BfLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vuc2FmZUNQXy5sZW5ndGgpOworICAgICAgICAgICAgbV9jb250ckVuZENQXyA9IG5ldyBieXRlW3RhYmxlLm1fY29udHJFbmRDUF8ubGVuZ3RoXTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGFibGUubV9jb250ckVuZENQXywgMCwgbV9jb250ckVuZENQXywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb250ckVuZENQXy5sZW5ndGgpOworICAgICAgICB9CisgICAgICAgIAorCQkvLyBwYWNrYWdlIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCVJ1bGVCYXNlZENvbGxhdG9yIG1fY29sbGF0b3JfOworICAgICAgICBJbnRUcmllQnVpbGRlciBtX21hcHBpbmdfOyAKKyAgICAgICAgVmVjdG9yIG1fZXhwYW5zaW9uc187IAorICAgICAgICBDb250cmFjdGlvblRhYmxlIG1fY29udHJhY3Rpb25zXzsKKwkgICAgLy8gVUNBVGFibGVIZWFkZXIgaW1hZ2U7CisJICAgIENvbGxhdGlvblJ1bGVQYXJzZXIuT3B0aW9uU2V0IG1fb3B0aW9uc187CisJICAgIE1heEV4cGFuc2lvblRhYmxlIG1fbWF4RXhwYW5zaW9uc187CisJICAgIE1heEphbW9FeHBhbnNpb25UYWJsZSBtX21heEphbW9FeHBhbnNpb25zXzsKKwkgICAgYnl0ZSBtX3Vuc2FmZUNQX1tdOworCSAgICBieXRlIG1fY29udHJFbmRDUF9bXTsKKwkgICAgSGFzaHRhYmxlIG1fcHJlZml4TG9va3VwXzsKKwl9OyAKKwkKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBFbGVtZW50cworCXsKKwkJLy8gcGFja2FnZSBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQlTdHJpbmcgbV9wcmVmaXhDaGFyc187CisJICAgIGludCBtX3ByZWZpeF87CisJICAgIFN0cmluZyBtX3VjaGFyc187CisJICAgIC8qKgorCSAgICAgKiBXb3JraW5nIHN0cmluZworCSAgICAgKi8KKwkgICAgU3RyaW5nIG1fY1BvaW50c187ICAgIAorCSAgICAvKioKKwkgICAgICogT2Zmc2V0IHRvIHRoZSB3b3JraW5nIHN0cmluZworCSAgICAgKi8KKwkgICAgaW50IG1fY1BvaW50c09mZnNldF87CisJICAgIC8qKiAKKwkgICAgICogVGhlc2UgYXJlIGNvbGxhdGlvbiBlbGVtZW50cyAtIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgLSBpbiAKKwkgICAgICogY2FzZSBvZiBleHBhbnNpb24gCisJICAgICAqLyAgICAKKwkgICAgaW50IG1fQ0VzX1tdOyAgICAgIAorICAgICAgICBpbnQgbV9DRUxlbmd0aF87CisJICAgIC8qKiAKKwkgICAgICogVGhpcyBpcyB0aGUgdmFsdWUgZWxlbWVudCBtYXBzIGluIG9yaWdpbmFsIHRhYmxlICAgCisJICAgICAqLworCSAgICBpbnQgbV9tYXBDRV87ICAgICAgICAgCisJICAgIGludCBtX3NpemVQcmltX1tdOworCSAgICBpbnQgbV9zaXplU2VjX1tdOworCSAgICBpbnQgbV9zaXplVGVyX1tdOworCSAgICBib29sZWFuIG1fdmFyaWFibGVUb3BfOworCSAgICBib29sZWFuIG1fY2FzZUJpdF87CisJICAgIGJvb2xlYW4gbV9pc1RoYWlfOworCSAgICAKKwkJLy8gcGFja2FnZSBwcml2YXRlIGNvbnN0cnVjdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkvKioKKwkJICogUGFja2FnZSBwcml2YXRlIGNvbnN0cnVjdG9yCisJCSAqLworCQlFbGVtZW50cygpCisJCXsKKwkJCW1fc2l6ZVByaW1fID0gbmV3IGludFsxMjhdOwkKKwkJICAgIG1fc2l6ZVNlY18gPSBuZXcgaW50WzEyOF07CQorCQkgICAgbV9zaXplVGVyXyA9IG5ldyBpbnRbMTI4XTsJCisgICAgICAgICAgICBtX0NFc18gPSBuZXcgaW50WzI1Nl07CisgICAgICAgICAgICBtX0NFTGVuZ3RoXyA9IDA7CisJCX0KKworICAgICAgICAvKioKKwkJICogUGFja2FnZSBwcml2YXRlIGNvbnN0cnVjdG9yCisJCSAqLworCQlFbGVtZW50cyhFbGVtZW50cyBlbGVtZW50KQorCQl7CisgICAgICAgICAgICBtX3ByZWZpeENoYXJzXyA9IGVsZW1lbnQubV9wcmVmaXhDaGFyc187CisgICAgICAgICAgICBtX3ByZWZpeF8gPSBlbGVtZW50Lm1fcHJlZml4XzsKKyAgICAgICAgICAgIG1fdWNoYXJzXyA9IGVsZW1lbnQubV91Y2hhcnNfOworICAgICAgICAgICAgbV9jUG9pbnRzXyA9IGVsZW1lbnQubV9jUG9pbnRzXzsgICAgCisgICAgICAgICAgICBtX2NQb2ludHNPZmZzZXRfID0gZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfOyAgICAKKyAgICAgICAgICAgIG1fQ0VzXyA9IGVsZW1lbnQubV9DRXNfOworICAgICAgICAgICAgbV9DRUxlbmd0aF8gPSBlbGVtZW50Lm1fQ0VMZW5ndGhfOworICAgICAgICAgICAgbV9tYXBDRV8gPSBlbGVtZW50Lm1fbWFwQ0VfOworCQkgICAgbV9zaXplUHJpbV8gPSBlbGVtZW50Lm1fc2l6ZVByaW1fOworCQkgICAgbV9zaXplU2VjXyA9IGVsZW1lbnQubV9zaXplU2VjXzsKKwkJICAgIG1fc2l6ZVRlcl8gPSBlbGVtZW50Lm1fc2l6ZVRlcl87CisJCSAgICBtX3ZhcmlhYmxlVG9wXyA9IGVsZW1lbnQubV92YXJpYWJsZVRvcF87CisJCSAgICBtX2Nhc2VCaXRfID0gZWxlbWVudC5tX2Nhc2VCaXRfOworCQkgICAgbV9pc1RoYWlfID0gZWxlbWVudC5tX2lzVGhhaV87CisJCX0KKworICAgICAgICAvLyBwYWNrYWdlIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogSW5pdGlhbGl6aW5nIHRoZSBlbGVtZW50cworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3ByZWZpeENoYXJzXyA9IG51bGw7CisgICAgICAgICAgICBtX3ByZWZpeF8gPSAwOworICAgICAgICAgICAgbV91Y2hhcnNfID0gbnVsbDsKKyAgICAgICAgICAgIG1fY1BvaW50c18gPSBudWxsOyAgICAKKyAgICAgICAgICAgIG1fY1BvaW50c09mZnNldF8gPSAwOyAgCisgICAgICAgICAgICBtX0NFTGVuZ3RoXyA9IDA7CisgICAgICAgICAgICBtX21hcENFXyA9IDA7CisgICAgICAgICAgICBBcnJheXMuZmlsbChtX3NpemVQcmltXywgMCk7CisgICAgICAgICAgICBBcnJheXMuZmlsbChtX3NpemVTZWNfLCAwKTsKKyAgICAgICAgICAgIEFycmF5cy5maWxsKG1fc2l6ZVRlcl8sIDApOworICAgICAgICAgICAgbV92YXJpYWJsZVRvcF8gPSBmYWxzZTsKKyAgICAgICAgICAgIG1fY2FzZUJpdF8gPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNUaGFpXyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYXNoY29kZSBjYWxjdWxhdGlvbiBmb3IgdG9rZW4KKyAgICAgICAgICogQHJldHVybiB0aGUgaGFzaGNvZGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKQorICAgICAgICB7CisgICAgICAgIAlTdHJpbmcgc3RyID0gbV9jUG9pbnRzXy5zdWJzdHJpbmcobV9jUG9pbnRzT2Zmc2V0Xyk7CisJCSAgICByZXR1cm4gc3RyLmhhc2hDb2RlKCk7CisJICAgIH0KKwkJCisJCS8qKgorCSAgICAgKiBFcXVhbHMgY2FsY3VsYXRpb24KKwkgICAgICogQHBhcmFtIHRhcmdldCBvYmplY3QgdG8gY29tcGFyZQorCSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGFyZ2V0IGlzIHRoZSBzYW1lIGFzIHRoaXMgb2JqZWN0CisJICAgICAqLworCSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IHRhcmdldCkKKwkgICAgeworCSAgICAgICAgaWYgKHRhcmdldCA9PSB0aGlzKSB7CisJICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICB9CisJICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudHMpIHsKKwkgICAgICAgIAlFbGVtZW50cyB0ID0gKEVsZW1lbnRzKXRhcmdldDsKKwkgICAgICAgIAlpbnQgc2l6ZSA9IG1fY1BvaW50c18ubGVuZ3RoKCkgLSBtX2NQb2ludHNPZmZzZXRfOworCSAgICAgICAgCWlmIChzaXplID09IHQubV9jUG9pbnRzXy5sZW5ndGgoKSAtIHQubV9jUG9pbnRzT2Zmc2V0XykgeworCQkJCSAgICByZXR1cm4gdC5tX2NQb2ludHNfLnJlZ2lvbk1hdGNoZXModC5tX2NQb2ludHNPZmZzZXRfLCAKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY1BvaW50c18sIAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jUG9pbnRzT2Zmc2V0Xywgc2l6ZSk7CisJICAgICAgICAJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCQl9CisJfTsKKworICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogTWF4aW11bSBzdHJlbmd0aCB1c2VkIGluIENFIGJ1aWxkaW5nCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0JBU0lDX1NUUkVOR1RIX0xJTUlUXyA9IDM7CisgICAgLyoqCisgICAgICogTWF4aW11bSBjb2xsYXRpb24gc3RyZW5ndGgKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfU1RSRU5HVEhfTElNSVRfID0gMTY7CisgICAgLyoqCisgICAgICogU3RyZW5ndGggbWFzayBhcnJheSwgdXNlZCBpbiBpbnZlcnNlIFVDQQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVFJFTkdUSF9NQVNLX1tdID0gezB4RkZGRjAwMDAsIDB4RkZGRkZGMDAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkZ9OworICAgIC8qKgorICAgICAqIENFIHRhZyBmb3Igbm90IGZvdW5kCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX05PVF9GT1VORF8gPSAweEYwMDAwMDAwOworICAgIC8qKgorICAgICAqIENFIHRhZyBmb3Igbm90IGZvdW5kCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX05PVF9GT1VORF9UQUdfID0gMDsKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvZGUgcG9pbnQgcmVzdWx0cyBpbiBhbiBleHBhbnNpb24gCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0VYUEFOU0lPTl9UQUdfID0gMTsKKyAgICAvKiogCisgICAgICogU3RhcnQgb2YgYSBjb250cmFjdGlvbiAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfQ09OVFJBQ1RJT05fVEFHXyA9IDI7CisgICAgLyoqIAorICAgICAqIFRoYWkgY2hhcmFjdGVyIC0gZG8gdGhlIHJlb3JkZXJpbmcgCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX1RIQUlfVEFHXyA9IDM7ICAgICAgICAgICAgCisgICAgLyoqIAorICAgICAqIENoYXJzZXQgcHJvY2Vzc2luZywgbm90IHlldCBpbXBsZW1lbnRlZAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDRV9DSEFSU0VUX1RBR18gPSA0OyAgICAgICAgIAorICAgIC8qKiAKKyAgICAgKiBMZWFkIHN1cnJvZ2F0ZSB0aGF0IGlzIHRhaWxvcmVkIGFuZCBkb2Vzbid0IHN0YXJ0IGEgY29udHJhY3Rpb24gCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX1NVUlJPR0FURV9UQUdfID0gNTsKKyAgICAvKiogCisgICAgICogQUMwMC1EN0FGCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0hBTkdVTF9TWUxMQUJMRV9UQUdfID0gNjsKKyAgICAvKiogCisgICAgICogRDgwMC1EQkZGCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0xFQURfU1VSUk9HQVRFX1RBR18gPSA3OworICAgIC8qKiAKKyAgICAgKiBEQzAwLURGRkYKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfVFJBSUxfU1VSUk9HQVRFX1RBR18gPSA4OyAKKyAgICAvKiogCisgICAgICogMHgzNDAwLTB4NERCNSwgMHg0RTAwLTB4OUZBNSwgMHhGOTAwLTB4RkEyRAorICAgICAqLyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfQ0pLX0lNUExJQ0lUX1RBR18gPSA5OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDRV9JTVBMSUNJVF9UQUdfID0gMTA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX1NQRUNfUFJPQ19UQUdfID0gMTE7CisgICAgLyoqIAorICAgICAqIFRoaXMgaXMgYSB0aHJlZSBieXRlIHByaW1hcnkgd2l0aCBzdGFydGluZyBzZWNvbmRhcmllcyBhbmQgdGVydGlhcmllcy4KKyAgICAgKiBJdCBmaXRzIGluIGEgc2luZ2xlIDMyIGJpdCBDRSBhbmQgaXMgdXNlZCBpbnN0ZWFkIG9mIGV4cGFuc2lvbiB0byBzYXZlCisgICAgICogc3BhY2Ugd2l0aG91dCBhZmZlY3RpbmcgdGhlIHBlcmZvcm1hbmNlIChob3BlZnVsbHkpIAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDRV9MT05HX1BSSU1BUllfVEFHXyA9IDEyOyAgCisgICAgLyoqIAorICAgICAqIFVuc2FmZSBVQ2hhciBoYXNoIHRhYmxlIHRhYmxlIHNpemUuIFNpemUgaXMgMzIgYnl0ZXMgZm9yIDEgYml0IGZvciBlYWNoIAorICAgICAqIGxhdGluIDEgY2hhciArIHNvbWUgcG93ZXIgb2YgdHdvIGZvciBoYXNoaW5nIHRoZSByZXN0IG9mIHRoZSBjaGFycy4gCisgICAgICogU2l6ZSBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQUZFQ1BfVEFCTEVfU0laRV8gPSAxMDU2OworICAgIC8qKiAKKyAgICAgKiBNYXNrIHZhbHVlIGRvd24gdG8gInNvbWUgcG93ZXIgb2YgdHdvIiAtMS4gTnVtYmVyIG9mIGJpdHMsIG5vdCBudW0gb2YgCisgICAgICogYnl0ZXMuICAgICAgIAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNBRkVDUF9UQUJMRV9NQVNLXyA9IDB4MWZmZjsKKyAgICAvKioKKyAgICAgKiBDYXNlIHZhbHVlcworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVUFBFUl9DQVNFXyA9IDB4ODA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JWEVEX0NBU0VfID0gMHg0MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9XRVJfQ0FTRV8gPSAweDAwOworICAgIC8qKgorICAgICAqIEluaXRpYWwgdGFibGUgc2l6ZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTklUX1RBQkxFX1NJWkVfID0gMTAyODsKKyAgICAvKioKKyAgICAgKiBIZWFkZXIgc2l6ZSwgY29waWVkIGZyb20gSUNVNEMsIHRvIGJlIGNoYW5nZWQgd2hlbiB0aGF0IHZhbHVlIGNoYW5nZXMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVBREVSX1NJWkVfID0gMHhDNDsKKyAgICAvKioKKyAgICAgKiBDb250cmFjdGlvbiB0YWJsZSBuZXcgZWxlbWVudCBpbmRpY2F0b3IKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJBQ1RJT05fVEFCTEVfTkVXX0VMRU1FTlRfID0gMHhGRkZGRkY7CisgICAgLyoqCisgICAgICogUGFyc2VyIGZvciB0aGUgcnVsZXMKKyAgICAgKi8KKyAgICBwcml2YXRlIENvbGxhdGlvblJ1bGVQYXJzZXIgbV9wYXJzZXJfOworICAgIC8qKgorICAgICAqIFV0aWxpdHkgVUNBIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yCisgICAgICovCisgICAgcHJpdmF0ZSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgbV91dGlsQ29sRUl0ZXJfOworICAgIC8qKgorICAgICAqIFV0aWxpdHkgZGF0YSBtZW1iZXJzCisgICAgICovCisgICAgcHJpdmF0ZSBDRUdlbmVyYXRvciBtX3V0aWxHZW5zX1tdID0ge25ldyBDRUdlbmVyYXRvcigpLCBuZXcgQ0VHZW5lcmF0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENFR2VuZXJhdG9yKCl9OworICAgIHByaXZhdGUgaW50IG1fdXRpbENFQnVmZmVyX1tdID0gbmV3IGludFtDRV9CQVNJQ19TVFJFTkdUSF9MSU1JVF9dOworICAgIHByaXZhdGUgaW50IG1fdXRpbEludEJ1ZmZlcl9bXSA9IG5ldyBpbnRbQ0VfU1RSRU5HVEhfTElNSVRfXTsKKyAgICBwcml2YXRlIEVsZW1lbnRzIG1fdXRpbEVsZW1lbnRfID0gbmV3IEVsZW1lbnRzKCk7CisgICAgcHJpdmF0ZSBFbGVtZW50cyBtX3V0aWxFbGVtZW50Ml8gPSBuZXcgRWxlbWVudHMoKTsKKyAgICBwcml2YXRlIENvbGxhdGlvblJ1bGVQYXJzZXIuVG9rZW4gbV91dGlsVG9rZW5fIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgQ29sbGF0aW9uUnVsZVBhcnNlci5Ub2tlbigpOworICAgIHByaXZhdGUgaW50IG1fdXRpbENvdW50QnVmZmVyX1tdID0gbmV3IGludFs2XTsgICAgIAorICAgIHByaXZhdGUgbG9uZyBtX3V0aWxMb25nQnVmZmVyX1tdID0gbmV3IGxvbmdbNV07CisgICAgcHJpdmF0ZSBXZWlnaHRSYW5nZSBtX3V0aWxMb3dlcldlaWdodFJhbmdlX1tdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmV3IFdlaWdodFJhbmdlKCksIG5ldyBXZWlnaHRSYW5nZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2VpZ2h0UmFuZ2UoKSwgbmV3IFdlaWdodFJhbmdlKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXZWlnaHRSYW5nZSgpfTsgCisgICAgcHJpdmF0ZSBXZWlnaHRSYW5nZSBtX3V0aWxVcHBlcldlaWdodFJhbmdlX1tdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmV3IFdlaWdodFJhbmdlKCksIG5ldyBXZWlnaHRSYW5nZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2VpZ2h0UmFuZ2UoKSwgbmV3IFdlaWdodFJhbmdlKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXZWlnaHRSYW5nZSgpfTsgCisgICAgcHJpdmF0ZSBXZWlnaHRSYW5nZSBtX3V0aWxXZWlnaHRSYW5nZV8gPSBuZXcgV2VpZ2h0UmFuZ2UoKTsKKyAgICBwcml2YXRlIGNoYXIgbV91dGlsQ2hhckJ1ZmZlcl9bXSA9IG5ldyBjaGFyWzI1Nl07CisgICAgcHJpdmF0ZSBDYW5vbmljYWxJdGVyYXRvciBtX3V0aWxDYW5JdGVyXyA9IG5ldyBDYW5vbmljYWxJdGVyYXRvcigiIik7CisgICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbV91dGlsU3RyaW5nQnVmZmVyXyA9IG5ldyBTdHJpbmdCdWZmZXIoIiIpOworICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogQHBhcmFtIGxpc3RoZWFkZXIgcGFyc2VkIHJ1bGUgdG9rZW5zCisgICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb24gdGhyb3duIHdoZW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJzCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGluaXRCdWZmZXJzKENvbGxhdGlvblJ1bGVQYXJzZXIuVG9rZW5MaXN0SGVhZGVyIGxpc3RoZWFkZXIpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgQ29sbGF0aW9uUnVsZVBhcnNlci5Ub2tlbiB0b2tlbiA9IGxpc3RoZWFkZXIubV9sYXN0XzsKKyAgICAgICAgQXJyYXlzLmZpbGwobV91dGlsSW50QnVmZmVyXywgMCwgQ0VfU1RSRU5HVEhfTElNSVRfLCAwKTsKKwkJCisJCXRva2VuLm1fdG9JbnNlcnRfID0gMTsKKwkJbV91dGlsSW50QnVmZmVyX1t0b2tlbi5tX3N0cmVuZ3RoX10gPSAxOworCQl3aGlsZSAodG9rZW4ubV9wcmV2aW91c18gIT0gbnVsbCkgeworCQkgICAgaWYgKHRva2VuLm1fcHJldmlvdXNfLm1fc3RyZW5ndGhfIDwgdG9rZW4ubV9zdHJlbmd0aF8pIHsgCisgICAgICAgICAgICAgICAgLy8gZ29pbmcgdXAKKwkJICAgICAgICBtX3V0aWxJbnRCdWZmZXJfW3Rva2VuLm1fc3RyZW5ndGhfXSA9IDA7CisJCSAgICAgICAgbV91dGlsSW50QnVmZmVyX1t0b2tlbi5tX3ByZXZpb3VzXy5tX3N0cmVuZ3RoX10gKys7CisJCSAgICB9IAorICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4ubV9wcmV2aW91c18ubV9zdHJlbmd0aF8gPiB0b2tlbi5tX3N0cmVuZ3RoXykgeyAKKyAgICAgICAgICAgICAgICAvLyBnb2luZyBkb3duCisJCSAgICAgICAgbV91dGlsSW50QnVmZmVyX1t0b2tlbi5tX3ByZXZpb3VzXy5tX3N0cmVuZ3RoX10gPSAxOworCQkgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworCQkgICAgICAgIG1fdXRpbEludEJ1ZmZlcl9bdG9rZW4ubV9zdHJlbmd0aF9dICsrOworCQkgICAgfQorCQkgICAgdG9rZW4gPSB0b2tlbi5tX3ByZXZpb3VzXzsKKwkJICAgIHRva2VuLm1fdG9JbnNlcnRfID0gbV91dGlsSW50QnVmZmVyX1t0b2tlbi5tX3N0cmVuZ3RoX107CisJCX0gCisJCQorCQl0b2tlbi5tX3RvSW5zZXJ0XyA9IG1fdXRpbEludEJ1ZmZlcl9bdG9rZW4ubV9zdHJlbmd0aF9dOworCQlJTlZFUlNFX1VDQV8uZ2V0SW52ZXJzZUdhcFBvc2l0aW9ucyhsaXN0aGVhZGVyKTsKKwkJCisJCXRva2VuID0gbGlzdGhlYWRlci5tX2ZpcnN0XzsKKwkJaW50IGZzdHJlbmd0aCA9IENvbGxhdG9yLklERU5USUNBTDsKKwkJaW50IGluaXRzdHJlbmd0aCA9IENvbGxhdG9yLklERU5USUNBTDsKKwkJCisJCW1fdXRpbENFQnVmZmVyX1tDb2xsYXRvci5QUklNQVJZXSA9IG1lcmdlQ0UobGlzdGhlYWRlci5tX2Jhc2VDRV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fYmFzZUNvbnRDRV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yLlBSSU1BUlkpOworCQltX3V0aWxDRUJ1ZmZlcl9bQ29sbGF0b3IuU0VDT05EQVJZXSA9IG1lcmdlQ0UobGlzdGhlYWRlci5tX2Jhc2VDRV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RoZWFkZXIubV9iYXNlQ29udENFXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsYXRvci5TRUNPTkRBUlkpOworCQltX3V0aWxDRUJ1ZmZlcl9bQ29sbGF0b3IuVEVSVElBUlldID0gbWVyZ2VDRShsaXN0aGVhZGVyLm1fYmFzZUNFXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fYmFzZUNvbnRDRV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsYXRvci5URVJUSUFSWSk7CisJCXdoaWxlICh0b2tlbiAhPSBudWxsKSB7CisJCSAgICBmc3RyZW5ndGggPSB0b2tlbi5tX3N0cmVuZ3RoXzsKKwkJICAgIGlmIChmc3RyZW5ndGggPCBpbml0c3RyZW5ndGgpIHsKKwkJICAgICAgICBpbml0c3RyZW5ndGggPSBmc3RyZW5ndGg7CisJCSAgICAgICAgaWYgKGxpc3RoZWFkZXIubV9wb3NfW2ZzdHJlbmd0aF0gPT0gLTEpIHsKKwkJICAgICAgICAgICAgd2hpbGUgKGxpc3RoZWFkZXIubV9wb3NfW2ZzdHJlbmd0aF0gPT0gLTEgJiYgZnN0cmVuZ3RoID4gMCkgCisgICAgICAgICAgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgICAgIGZzdHJlbmd0aC0tOworCQkgICAgICAgICAgICB9CisJCSAgICAgICAgICAgIGlmIChsaXN0aGVhZGVyLm1fcG9zX1tmc3RyZW5ndGhdID09IC0xKSB7CisJCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnRlcm5hbCBwcm9ncmFtIGVycm9yIik7CisJCSAgICAgICAgICAgIH0KKwkJICAgICAgICB9CisJCSAgICAgICAgaWYgKGluaXRzdHJlbmd0aCA9PSBDb2xsYXRvci5URVJUSUFSWSkgeyAKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnRpbmcgd2l0aCB0ZXJ0aWFyeQorCQkJICAgICAgICBtX3V0aWxDRUJ1ZmZlcl9bQ29sbGF0b3IuUFJJTUFSWV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlzdGhlYWRlci5tX2dhcHNMb19bZnN0cmVuZ3RoICogM107CisJCQkgICAgICAgIG1fdXRpbENFQnVmZmVyX1tDb2xsYXRvci5TRUNPTkRBUlldIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlzdGhlYWRlci5tX2dhcHNMb19bZnN0cmVuZ3RoICogMyArIDFdOworCQkJICAgICAgICBtX3V0aWxDRUJ1ZmZlcl9bQ29sbGF0b3IuVEVSVElBUlldID0gZ2V0Q0VHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxHZW5zX1tDb2xsYXRvci5URVJUSUFSWV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGhlYWRlci5tX2dhcHNMb18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGhlYWRlci5tX2dhcHNIaV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sIGZzdHJlbmd0aCk7IAorCQkgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5pdHN0cmVuZ3RoID09IENvbGxhdG9yLlNFQ09OREFSWSkgeyAKKyAgICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kYXJpZXMKKwkJICAgICAgICAgICAgbV91dGlsQ0VCdWZmZXJfW0NvbGxhdG9yLlBSSU1BUlldIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxpc3RoZWFkZXIubV9nYXBzTG9fW2ZzdHJlbmd0aCAqIDNdOworCQkgICAgICAgICAgICBtX3V0aWxDRUJ1ZmZlcl9bQ29sbGF0b3IuU0VDT05EQVJZXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldENFR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxHZW5zX1tDb2xsYXRvci5TRUNPTkRBUlldLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGhlYWRlci5tX2dhcHNMb18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fZ2Fwc0hpXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCBmc3RyZW5ndGgpOworCQkgICAgICAgICAgICBtX3V0aWxDRUJ1ZmZlcl9bQ29sbGF0b3IuVEVSVElBUlldIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ2V0U2ltcGxlQ0VHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxHZW5zX1tDb2xsYXRvci5URVJUSUFSWV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sIENvbGxhdG9yLlRFUlRJQVJZKTsKKwkJICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJpbWFyaWVzIAorCQkgICAgICAgICAgICBtX3V0aWxDRUJ1ZmZlcl9bQ29sbGF0b3IuUFJJTUFSWV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBnZXRDRUdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsR2Vuc19bQ29sbGF0b3IuUFJJTUFSWV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aGVhZGVyLm1fZ2Fwc0xvXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RoZWFkZXIubV9nYXBzSGlfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sIGZzdHJlbmd0aCk7CisJCSAgICAgICAgICAgIG1fdXRpbENFQnVmZmVyX1tDb2xsYXRvci5TRUNPTkRBUlldIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ2V0U2ltcGxlQ0VHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEdlbnNfW0NvbGxhdG9yLlNFQ09OREFSWV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgQ29sbGF0b3IuU0VDT05EQVJZKTsKKwkJICAgICAgICAgICAgbV91dGlsQ0VCdWZmZXJfW0NvbGxhdG9yLlRFUlRJQVJZXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldFNpbXBsZUNFR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxHZW5zX1tDb2xsYXRvci5URVJUSUFSWV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgQ29sbGF0b3IuVEVSVElBUlkpOworCQkgICAgICAgIH0KKwkJICAgIH0gCisgICAgICAgICAgICBlbHNlIHsKKwkJICAgICAgICBpZiAodG9rZW4ubV9zdHJlbmd0aF8gPT0gQ29sbGF0b3IuVEVSVElBUlkpIHsKKwkJICAgICAgICAgICAgbV91dGlsQ0VCdWZmZXJfW0NvbGxhdG9yLlRFUlRJQVJZXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldE5leHRHZW5lcmF0ZWQobV91dGlsR2Vuc19bQ29sbGF0b3IuVEVSVElBUlldKTsKKwkJICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLm1fc3RyZW5ndGhfID09IENvbGxhdG9yLlNFQ09OREFSWSkgeworCQkgICAgICAgICAgICBtX3V0aWxDRUJ1ZmZlcl9bQ29sbGF0b3IuU0VDT05EQVJZXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldE5leHRHZW5lcmF0ZWQobV91dGlsR2Vuc19bQ29sbGF0b3IuU0VDT05EQVJZXSk7CisJCSAgICAgICAgICAgIG1fdXRpbENFQnVmZmVyX1tDb2xsYXRvci5URVJUSUFSWV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBnZXRTaW1wbGVDRUdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxHZW5zX1tDb2xsYXRvci5URVJUSUFSWV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCBDb2xsYXRvci5URVJUSUFSWSk7CisJCSAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbi5tX3N0cmVuZ3RoXyA9PSBDb2xsYXRvci5QUklNQVJZKSB7CisJCSAgICAgICAgICAgIG1fdXRpbENFQnVmZmVyX1tDb2xsYXRvci5QUklNQVJZXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ2V0TmV4dEdlbmVyYXRlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxHZW5zX1tDb2xsYXRvci5QUklNQVJZXSk7CisJCSAgICAgICAgICAgIG1fdXRpbENFQnVmZmVyX1tDb2xsYXRvci5TRUNPTkRBUlldIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBnZXRTaW1wbGVDRUdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEdlbnNfW0NvbGxhdG9yLlNFQ09OREFSWV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sIENvbGxhdG9yLlNFQ09OREFSWSk7CisJCSAgICAgICAgICAgIG1fdXRpbENFQnVmZmVyX1tDb2xsYXRvci5URVJUSUFSWV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldFNpbXBsZUNFR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsR2Vuc19bQ29sbGF0b3IuVEVSVElBUlldLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCBDb2xsYXRvci5URVJUSUFSWSk7CisJCSAgICAgICAgfQorCQkgICAgfQorCQkgICAgZG9DRShtX3V0aWxDRUJ1ZmZlcl8sIHRva2VuKTsKKwkJICAgIHRva2VuID0gdG9rZW4ubV9uZXh0XzsKKwkgICAgfQorCX0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgbmV4dCBnZW5lcmF0ZWQgY2UKKyAgICAgKiBAcGFyYW0gZyBjZSBnZW5lcmF0b3IKKyAgICAgKiBAcmV0dXJuIG5leHQgZ2VuZXJhdGVkIGNlIAorICAgICAqLworICAgIHByaXZhdGUgaW50IGdldE5leHRHZW5lcmF0ZWQoQ0VHZW5lcmF0b3IgZykgCisgICAgeworICAgICAgICBnLm1fY3VycmVudF8gPSBuZXh0V2VpZ2h0KGcpOworICAgICAgICByZXR1cm4gZy5tX2N1cnJlbnRfOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBnIENFR2VuZXJhdG9yCisgICAgICogQHBhcmFtIHRva2VuIHJ1bGUgdG9rZW4KKyAgICAgKiBAcGFyYW0gZnN0cmVuZ3RoIAorICAgICAqIEByZXR1cm4gY2UgZ2VuZXJhdG9yCisgICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb24gdGhyb3duIHdoZW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJzCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0U2ltcGxlQ0VHZW5lcmF0b3IoQ0VHZW5lcmF0b3IgZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0aW9uUnVsZVBhcnNlci5Ub2tlbiB0b2tlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVuZ3RoKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBpbnQgaGlnaCwgbG93LCBjb3VudCA9IDE7CisgICAgICAgIGludCBtYXhieXRlID0gKHN0cmVuZ3RoID09IENvbGxhdG9yLlRFUlRJQVJZKSA/IDB4M0YgOiAweEZGOworCisJICAgIGlmIChzdHJlbmd0aCA9PSBDb2xsYXRvci5TRUNPTkRBUlkpIHsKKwkJICAgIGxvdyA9IFJ1bGVCYXNlZENvbGxhdG9yLkNPTU1PTl9UT1BfMl8gPDwgMjQ7CisJCSAgICBoaWdoID0gMHhGRkZGRkZGRjsKKwkJICAgIGNvdW50ID0gMHhGRiAtIFJ1bGVCYXNlZENvbGxhdG9yLkNPTU1PTl9UT1BfMl87CisJICAgIH0gCisgICAgICAgIGVsc2UgeworCSAgICAgICAgbG93ID0gUnVsZUJhc2VkQ29sbGF0b3IuQllURV9DT01NT05fIDw8IDI0OyAvLzB4MDUwMDAwMDA7CisJICAgICAgICBoaWdoID0gMHg0MDAwMDAwMDsKKwkgICAgICAgIGNvdW50ID0gMHg0MCAtIFJ1bGVCYXNlZENvbGxhdG9yLkJZVEVfQ09NTU9OXzsKKwkgICAgfQorCQorCSAgICBpZiAodG9rZW4ubV9uZXh0XyAhPSBudWxsICYmIHRva2VuLm1fbmV4dF8ubV9zdHJlbmd0aF8gPT0gc3RyZW5ndGgpIHsKKwkgICAgICAgIGNvdW50ID0gdG9rZW4ubV9uZXh0Xy5tX3RvSW5zZXJ0XzsKKwkgICAgfSAKKwkKKwkgICAgZy5tX3Jhbmdlc0xlbmd0aF8gPSBhbGxvY2F0ZVdlaWdodHMobG93LCBoaWdoLCBjb3VudCwgbWF4Ynl0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcubV9yYW5nZXNfKTsKKwkgICAgZy5tX2N1cnJlbnRfID0gUnVsZUJhc2VkQ29sbGF0b3IuQllURV9DT01NT05fIDw8IDI0OworCQorCSAgICBpZiAoZy5tX3Jhbmdlc0xlbmd0aF8gPT0gMCkgeworCSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW50ZXJuYWwgcHJvZ3JhbSBlcnJvciIpOworCSAgICB9CisJICAgIHJldHVybiBnLm1fY3VycmVudF87CisJfQorCisgICAgLyoqCisgICAgICogQ29tYmluZXMgMiBjZSBpbnRvIG9uZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGFyZ3VtZW50IHN0cmVuZ3RoCisgICAgICogQHBhcmFtIGNlMSBmaXJzdCBjZQorICAgICAqIEBwYXJhbSBjZTIgc2Vjb25kIGNlCisgICAgICogQHBhcmFtIHN0cmVuZ3RoIHN0cmVuZ3RoIHRvIHVzZQorICAgICAqIEByZXR1cm4gY29tYmluZWQgY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgbWVyZ2VDRShpbnQgY2UxLCBpbnQgY2UyLCBpbnQgc3RyZW5ndGgpIAorICAgIHsKKyAgICAgICAgaW50IG1hc2sgPSBSdWxlQmFzZWRDb2xsYXRvci5DRV9URVJUSUFSWV9NQVNLXzsKKyAgICAgICAgaWYgKHN0cmVuZ3RoID09IENvbGxhdG9yLlNFQ09OREFSWSkgeworICAgICAgICAgICAgbWFzayA9IFJ1bGVCYXNlZENvbGxhdG9yLkNFX1NFQ09OREFSWV9NQVNLXzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJlbmd0aCA9PSBDb2xsYXRvci5QUklNQVJZKSB7CisgICAgICAgICAgICBtYXNrID0gUnVsZUJhc2VkQ29sbGF0b3IuQ0VfUFJJTUFSWV9NQVNLXzsKKyAgICAgICAgfQorICAgICAgICBjZTEgJj0gbWFzazsKKyAgICAgICAgY2UyICY9IG1hc2s7CisgICAgICAgIHN3aXRjaCAoc3RyZW5ndGgpIAorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIENvbGxhdG9yLlBSSU1BUlk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNlMSB8IGNlMiA+Pj4gMTY7CisgICAgICAgICAgICBjYXNlIENvbGxhdG9yLlNFQ09OREFSWToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2UxIDw8IDE2IHwgY2UyIDw8IDg7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBjZTEgPDwgMjQgfCBjZTIgPDwgMTY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQHBhcmFtIGcgQ0VHZW5lcmF0b3IKKyAgICAgKiBAcGFyYW0gbG93cyBsb3cgZ2FwIGFycmF5CisgICAgICogQHBhcmFtIGhpZ2hzIGhpZ2ggZ2FwIGFycmF5CisgICAgICogQHBhcmFtIHRva2VuIHJ1bGUgdG9rZW4KKyAgICAgKiBAcGFyYW0gZnN0cmVuZ3RoIAorICAgICAqIEBleGNlcHRpb24gRXhjZXB0aW9uIHRocm93biB3aGVuIGludGVybmFsIGVycm9yIG9jY3VycworICAgICAqLworICAgIHByaXZhdGUgaW50IGdldENFR2VuZXJhdG9yKENFR2VuZXJhdG9yIGcsIGludCBsb3dzW10sIGludCBoaWdoc1tdLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsYXRpb25SdWxlUGFyc2VyLlRva2VuIHRva2VuLCBpbnQgZnN0cmVuZ3RoKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworCSAgICBpbnQgc3RyZW5ndGggPSB0b2tlbi5tX3N0cmVuZ3RoXzsKKwkgICAgaW50IGxvdyA9IGxvd3NbZnN0cmVuZ3RoICogMyArIHN0cmVuZ3RoXTsKKwkgICAgaW50IGhpZ2ggPSBoaWdoc1tmc3RyZW5ndGggKiAzICsgc3RyZW5ndGhdOworCSAgICBpbnQgbWF4Ynl0ZSA9IChzdHJlbmd0aCA9PSBDb2xsYXRvci5URVJUSUFSWSkgPyAweDNGIDogMHhGRjsKKwkKKwkgICAgaW50IGNvdW50ID0gdG9rZW4ubV90b0luc2VydF87CisJCisJICAgIGlmIChVdGlsaXR5LmNvbXBhcmVVbnNpZ25lZChsb3csIGhpZ2gpID49IDAgCisgICAgICAgICAgICAmJiBzdHJlbmd0aCA+IENvbGxhdG9yLlBSSU1BUlkpIHsKKwkgICAgICAgIGludCBzID0gc3RyZW5ndGg7CisJICAgICAgICB3aGlsZSAodHJ1ZSkgeworCQkgICAgICAgIHMgLS07CisJCSAgICAgICAgaWYgKGxvd3NbZnN0cmVuZ3RoICogMyArIHNdICE9IGhpZ2hzW2ZzdHJlbmd0aCAqIDMgKyBzXSkgeworCQkgICAgICAgICAgICBpZiAoc3RyZW5ndGggPT0gQ29sbGF0b3IuU0VDT05EQVJZKSB7CisJCSAgICAgICAgICAgICAgICBsb3cgPSBSdWxlQmFzZWRDb2xsYXRvci5DT01NT05fVE9QXzJfIDw8IDI0OworCQkgICAgICAgICAgICAgICAgaGlnaCA9IDB4RkZGRkZGRkY7CisJCSAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCQkgICAgICAgICAgICAgICAgLy8gbG93ID0gMHgwMjAwMDAwMDsgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgLSB3aGF0IGlmIGxvdyBpcworCQkgICAgICAgICAgICAgICAgLy8gbm90IGdvb2QuLi4KKwkJICAgICAgICAgICAgICAgIGhpZ2ggPSAweDQwMDAwMDAwOworCQkgICAgICAgICAgICB9CisJCSAgICAgICAgICAgIGJyZWFrOworCQkgICAgICAgIH0KKwkJICAgICAgICBpZiAocyA8IDApIHsKKwkJICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW50ZXJuYWwgcHJvZ3JhbSBlcnJvciIpOworCQkgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfSAKKwkgICAgaWYgKGxvdyA9PSAwKSB7CisJICAgICAgICBsb3cgPSAweDAxMDAwMDAwOworCSAgICB9CisJICAgIGlmIChzdHJlbmd0aCA9PSBDb2xsYXRvci5TRUNPTkRBUlkpIHsgLy8gc2ltaWxhciBhcyBzaW1wbGUgCisJICAgICAgICBpZiAoVXRpbGl0eS5jb21wYXJlVW5zaWduZWQobG93LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkNPTU1PTl9CT1RUT01fMl8gPDwgMjQpID49IDAKKyAgICAgICAgICAgICAgICAmJiBVdGlsaXR5LmNvbXBhcmVVbnNpZ25lZChsb3csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQ09NTU9OX1RPUF8yXyA8PCAyNCkgPCAwKSB7CisJICAgICAgICAgICAgbG93ID0gUnVsZUJhc2VkQ29sbGF0b3IuQ09NTU9OX1RPUF8yXyA8PCAyNDsKKyAgICAgICAgICAgIH0KKwkgICAgICAgIGlmIChVdGlsaXR5LmNvbXBhcmVVbnNpZ25lZChoaWdoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5DT01NT05fQk9UVE9NXzJfIDw8IDI0KSA+IDAgCisgICAgICAgICAgICAgICAgJiYgVXRpbGl0eS5jb21wYXJlVW5zaWduZWQoaGlnaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQ09NTU9OX1RPUF8yXyA8PCAyNCkgPCAwKSB7CisJICAgICAgICAgICAgaGlnaCA9IFJ1bGVCYXNlZENvbGxhdG9yLkNPTU1PTl9UT1BfMl8gPDwgMjQ7CisJICAgICAgICB9IAorCSAgICAgICAgaWYgKFV0aWxpdHkuY29tcGFyZVVuc2lnbmVkKGxvdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQ09NTU9OX0JPVFRPTV8yXyA8PCAyNCkgPCAwKSB7CisJICAgICAgICAgICAgZy5tX3Jhbmdlc0xlbmd0aF8gPSBhbGxvY2F0ZVdlaWdodHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkNPTU1PTl9UT1BfMl8gPDwgMjQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoLCBjb3VudCwgbWF4Ynl0ZSwgZy5tX3Jhbmdlc18pOworCSAgICAgICAgICAgIGcubV9jdXJyZW50XyA9IFJ1bGVCYXNlZENvbGxhdG9yLkNPTU1PTl9CT1RUT01fMl87CisJICAgICAgICAgICAgcmV0dXJuIGcubV9jdXJyZW50XzsKKwkgICAgICAgIH0KKwkgICAgfSAKKwkKKwkgICAgZy5tX3Jhbmdlc0xlbmd0aF8gPSBhbGxvY2F0ZVdlaWdodHMobG93LCBoaWdoLCBjb3VudCwgbWF4Ynl0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcubV9yYW5nZXNfKTsKKwkgICAgaWYgKGcubV9yYW5nZXNMZW5ndGhfID09IDApIHsKKwkgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludGVybmFsIHByb2dyYW0gZXJyb3IiKTsKKwkgICAgfQorCSAgICBnLm1fY3VycmVudF8gPSBuZXh0V2VpZ2h0KGcpOworCSAgICByZXR1cm4gZy5tX2N1cnJlbnRfOworCX0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBjZXBhcnRzIGxpc3Qgb2YgY29sbGF0aW9uIGVsZW1lbnRzIHBhcnRzCisgICAgICogQHBhcmFtIHRva2VuIHJ1bGUgdG9rZW4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZG9DRShpbnQgY2VwYXJ0c1tdLCBDb2xsYXRpb25SdWxlUGFyc2VyLlRva2VuIHRva2VuKSAKKyAgICB7CisgICAgICAgIC8vIHRoaXMgb25lIG1ha2VzIHRoZSB0YWJsZSBhbmQgc3R1ZmYKKwkgICAgLy8gaW50IG5vb2ZieXRlc1tdID0gbmV3IGludFszXTsKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpICsrKSB7CisJICAgICAgICAvLyBub29mYnl0ZXNbaV0gPSBjb3VudEJ5dGVzKGNlcGFydHNbaV0pOworICAgICAgICAgICAgbV91dGlsSW50QnVmZmVyX1tpXSA9IGNvdW50Qnl0ZXMoY2VwYXJ0c1tpXSk7CisJICAgIH0KKwkKKwkgICAgLy8gSGVyZSB3ZSBoYXZlIHRvIHBhY2sgQ0VzIGZyb20gcGFydHMKKwkgICAgaW50IGNlaSA9IDA7CisJICAgIGludCB2YWx1ZSA9IDA7CisJCisJICAgIHdoaWxlICgoY2VpIDw8IDEpIDwgbV91dGlsSW50QnVmZmVyX1swXSB8fCBjZWkgPCBtX3V0aWxJbnRCdWZmZXJfWzFdIAorICAgICAgICAgICAgICAgfHwgY2VpIDwgbV91dGlsSW50QnVmZmVyX1syXSkgeworCSAgICAgICAgaWYgKGNlaSA+IDApIHsKKwkgICAgICAgICAgICB2YWx1ZSA9IFJ1bGVCYXNlZENvbGxhdG9yLkNFX0NPTlRJTlVBVElPTl9NQVJLRVJfOworCQkgICAgfSBlbHNlIHsKKwkJICAgICAgICB2YWx1ZSA9IDA7CisJCSAgICB9CisJCQorCQkgICAgaWYgKChjZWkgPDwgMSkgPCBtX3V0aWxJbnRCdWZmZXJfWzBdKSB7CisJCSAgICAgICAgdmFsdWUgfD0gKChjZXBhcnRzWzBdID4+ICgzMiAtICgoY2VpICsgMSkgPDwgNCkpKSAmIDB4RkZGRikgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAxNjsKKwkJICAgIH0KKwkJICAgIGlmIChjZWkgPCBtX3V0aWxJbnRCdWZmZXJfWzFdKSB7CisJCSAgICAgICAgdmFsdWUgfD0gKChjZXBhcnRzWzFdID4+ICgzMiAtICgoY2VpICsgMSkgPDwgMykpKSAmIDB4RkYpIDw8IDg7CisJCSAgICB9CisJCSAgICBpZiAoY2VpIDwgbV91dGlsSW50QnVmZmVyX1syXSkgeworCQkgICAgICAgIHZhbHVlIHw9ICgoY2VwYXJ0c1syXSA+PiAoMzIgLSAoKGNlaSsxKSA8PCAzKSkpICYgMHgzRik7CisJCSAgICB9CisJCSAgICB0b2tlbi5tX0NFX1tjZWldID0gdmFsdWU7CisJCSAgICBjZWkgKys7CisJCSAgfQorCQkgIGlmIChjZWkgPT0gMCkgeyAvLyB0b3RhbGx5IGlnbm9yYWJsZQorCQkgICAgICB0b2tlbi5tX0NFTGVuZ3RoXyA9IDE7CisJCSAgICAgIHRva2VuLm1fQ0VfWzBdID0gMDsKKwkJICB9IAorICAgICAgICAgIGVsc2UgeyAvLyB0aGVyZSBpcyBhdCBsZWFzdCBzb21ldGhpbmcKKwkJICAgICAgdG9rZW4ubV9DRUxlbmd0aF8gPSBjZWk7CisJCX0KKwl9CisKKyAgICAvKioKKyAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIG5vbi16ZXJvIGJ5dGVzIHVzZWQgaW4gdGhlIGNlCisgICAgICogQHBhcmFtIGNlIAorICAgICAqIEByZXR1cm4gbnVtYmVyIG9mIG5vbi16ZXJvIGJ5dGVzIHVzZWQgaW4gY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY291bnRCeXRlcyhpbnQgY2UpICAgCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkgICAgaW50IG1hc2sgPSAweEZGRkZGRkZGOyAgIAorCSAgICBpbnQgcmVzdWx0ID0gMDsgICAgICAgICAgICAgIAorCSAgICB3aGlsZSAobWFzayAhPSAwKSB7ICAgICAgICAgICAgCisJICAgICAgICBpZiAoKGNlICYgbWFzaykgIT0gMCkgeyAKKwkgICAgICAgICAgICByZXN1bHQgKys7ICAgICAgICAgICAgCisJICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgICAgICBtYXNrID4+Pj0gODsgICAgICAgICAgICAgICAgIAorCSAgICB9ICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKwl9CisJCisJLyoqCisJICogV2UgYXJlIHJlYWR5IHRvIGNyZWF0ZSBjb2xsYXRpb24gZWxlbWVudHMKKwkgKiBAcGFyYW0gdCBidWlsZCB0YWJsZSB0byBpbnNlcnQKKwkgKiBAcGFyYW0gbGggcnVsZSB0b2tlbiBsaXN0IGhlYWRlcgorCSAqIEBleGNlcHRpb24gRXhjZXB0aW9uIHRocm93biB3aGVuIGludGVybmFsIHByb2dyYW0gZXJyb3Igb2NjdXJzCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUVsZW1lbnRzKEJ1aWxkVGFibGUgdCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdGlvblJ1bGVQYXJzZXIuVG9rZW5MaXN0SGVhZGVyIGxoKSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKwkgICAgQ29sbGF0aW9uUnVsZVBhcnNlci5Ub2tlbiB0b2sgPSBsaC5tX2ZpcnN0XzsKKwkgICAgbV91dGlsRWxlbWVudF8uY2xlYXIoKTsKKwkgICAgd2hpbGUgKHRvayAhPSBudWxsKSB7CisJICAgIAkvLyBmaXJzdCwgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBleHBhbnNpb25zCisJICAgIAkvLyBpZiB0aGVyZSBhcmUgZXhwYW5zaW9ucywgd2UgbmVlZCB0byBkbyBhIGxpdHRsZSBiaXQgbW9yZSAKKwkgICAgCS8vIHByb2Nlc3Npbmcgc2luY2UgcGFydHMgb2YgZXhwYW5zaW9uIGNhbiBiZSB0YWlsb3JlZCwgd2hpbGUgCisJICAgIAkvLyBvdGhlcnMgYXJlIG5vdAorCSAgICAJaWYgKHRvay5tX2V4cGFuc2lvbl8gIT0gMCkgeworCSAgICAgICAgICAgIGludCBsZW4gPSB0b2subV9leHBhbnNpb25fID4+PiAyNDsKKwkgICAgICAgICAgICBpbnQgY3VycmVudFNlcXVlbmNlTGVuID0gbGVuOworCSAgICAgICAgICAgIGludCBleHBPZmZzZXQgPSB0b2subV9leHBhbnNpb25fICYgMHgwMEZGRkZGRjsKKwkgICAgICAgICAgICBtX3V0aWxUb2tlbl8ubV9zb3VyY2VfID0gY3VycmVudFNlcXVlbmNlTGVuIHwgZXhwT2Zmc2V0OworCSAgICAgICAgICAgIG1fdXRpbFRva2VuXy5tX3J1bGVzXyA9IG1fcGFyc2VyXy5tX3NvdXJjZV87CisJCisJICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDApIHsKKwkJCSAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuID0gbGVuOworCQkJICAgICAgICB3aGlsZSAoY3VycmVudFNlcXVlbmNlTGVuID4gMCkgeworCQkJICAgICAgICAgICAgbV91dGlsVG9rZW5fLm1fc291cmNlXyA9IChjdXJyZW50U2VxdWVuY2VMZW4gPDwgMjQpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwT2Zmc2V0OworCQkJICAgICAgICAgICAgQ29sbGF0aW9uUnVsZVBhcnNlci5Ub2tlbiBleHB0ID0gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDb2xsYXRpb25SdWxlUGFyc2VyLlRva2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZXJfLm1faGFzaFRhYmxlXy5nZXQobV91dGlsVG9rZW5fKTsKKwkJCSAgICAgICAgICAgIGlmIChleHB0ICE9IG51bGwgCisJCQkgICAgICAgICAgICAgICAgJiYgZXhwdC5tX3N0cmVuZ3RoXyAKKwkJCSAgICAgICAgICAgICAgICAgICAhPSBDb2xsYXRpb25SdWxlUGFyc2VyLlRPS0VOX1JFU0VUXykgeyAKKwkJCSAgICAgICAgICAgICAgICAvLyBleHBhbnNpb24gaXMgdGFpbG9yZWQKKwkJCSAgICAgICAgICAgICAgICBpbnQgbm9PZkNFc1RvQ29weSA9IGV4cHQubV9DRUxlbmd0aF87CisJCQkgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBub09mQ0VzVG9Db3B5OyBqICsrKSB7CisJCQkgICAgICAgICAgICAgICAgICAgIHRvay5tX2V4cENFX1t0b2subV9leHBDRUxlbmd0aF8gKyBqXSAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZXhwdC5tX0NFX1tqXTsKKwkJCSAgICAgICAgICAgICAgICAgfQorCQkJICAgICAgICAgICAgICAgICB0b2subV9leHBDRUxlbmd0aF8gKz0gbm9PZkNFc1RvQ29weTsKKwkJCSAgICAgICAgICAgICAgICAgLy8gbmV2ZXIgdHJ5IHRvIGFkZCBjb2RlcG9pbnRzIGFuZCBDRXMuCisJCQkgICAgICAgICAgICAgICAgIC8vIEZvciBzb21lIG9kZCByZWFzb24sIGl0IHdvbid0IHdvcmsuCisJCQkgICAgICAgICAgICAgICAgIGV4cE9mZnNldCArPSBjdXJyZW50U2VxdWVuY2VMZW47IC8vbm9PZkNFc1RvQ29weTsKKwkJCSAgICAgICAgICAgICAgICAgbGVuIC09IGN1cnJlbnRTZXF1ZW5jZUxlbjsgLy9ub09mQ0VzVG9Db3B5OworCQkJICAgICAgICAgICAgICAgICBicmVhazsKKwkJCSAgICAgICAgICAgICB9IAorCQkJICAgICAgICAgICAgIGVsc2UgeworCQkJICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VMZW4gLS07CisJCQkgICAgICAgICAgICAgfQorCQkJICAgICAgICB9CisJICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2VxdWVuY2VMZW4gPT0gMCkgeyAKKwkgICAgICAgICAgICAgICAgICAgIC8vIGNvdWxkbid0IGZpbmQgYW55IHRhaWxvcmVkIHN1YnNlcXVlbmNlLCB3aWxsIGhhdmUgdG8gCisJICAgICAgICAgICAgICAgICAgICAvLyBnZXQgb25lIGZyb20gVUNBLiBmaXJzdCwgZ2V0IHRoZSBVQ2hhcnMgZnJvbSB0aGUgCisJICAgICAgICAgICAgICAgICAgICAvLyBydWxlcyB0aGVuIHBpY2sgQ0VzIG91dCB1bnRpbCB0aGVyZSBpcyBubyBtb3JlIGFuZCAKKwkgICAgICAgICAgICAgICAgICAgIC8vIHN0dWZmIHRoZW0gaW50byBleHBhbnNpb24KKwkgICAgICAgICAgICAgICAgICAgIG1fdXRpbENvbEVJdGVyXy5zZXRUZXh0KG1fcGFyc2VyXy5tX3NvdXJjZV8uc3Vic3RyaW5nKAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cE9mZnNldCwgZXhwT2Zmc2V0ICsgMSkpOworCSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3JkZXIgPSBtX3V0aWxDb2xFSXRlcl8ubmV4dCgpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlciA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICB0b2subV9leHBDRV9bdG9rLm1fZXhwQ0VMZW5ndGhfICsrXSA9IG9yZGVyOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgZXhwT2Zmc2V0ICsrOworCSAgICAgICAgICAgICAgICAgICAgbGVuIC0tOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfSAKKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHRvay5tX2V4cENFTGVuZ3RoXyA9IDA7CisJICAgICAgICB9CisJCisJICAgICAgICAvLyBzZXQgdGhlIHVjYWVsZW1lbnQgd2l0aCBvYnRhaW5lZCB2YWx1ZXMKKyAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fQ0VMZW5ndGhfID0gdG9rLm1fQ0VMZW5ndGhfICsgdG9rLm1fZXhwQ0VMZW5ndGhfOworICAgICAgICAgICAgCisJICAgICAgICAvLyBjb3B5IENFcworCSAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0b2subV9DRV8sIDAsIG1fdXRpbEVsZW1lbnRfLm1fQ0VzXywgMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvay5tX0NFTGVuZ3RoXyk7CisJICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHRvay5tX2V4cENFXywgMCwgbV91dGlsRWxlbWVudF8ubV9DRXNfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rLm1fQ0VMZW5ndGhfLCB0b2subV9leHBDRUxlbmd0aF8pOworCQorCSAgICAgICAgLy8gY29weSBVQ2hhcnMgCisJICAgICAgICAvLyBXZSBrZXB0IHByZWZpeCBhbmQgc291cmNlIGtpbmQgb2YgdG9nZXRoZXIsIGFzIGl0IGlzIGEga2luZCBvZiBhIAorCSAgICAgICAgLy8gY29udHJhY3Rpb24uIAorCSAgICAgICAgLy8gSG93ZXZlciwgbm93IHdlIGhhdmUgdG8gc2xpY2UgdGhlIHByZWZpeCBvZmYgdGhlIG1haW4gdGhpbmcgLSAKKwkgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fcHJlZml4XyA9IDA7Ly8gZWwubV9wcmVmaXhDaGFyc187CisJICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX2NQb2ludHNPZmZzZXRfID0gMDsgLy9lbC5tX3VjaGFyc187CisJICAgICAgICBpZiAodG9rLm1fcHJlZml4XyAhPSAwKSB7IAorCSAgICAgICAgCS8vIHdlIHdpbGwganVzdCBjb3B5IHRoZSBwcmVmaXggaGVyZSwgYW5kIGFkanVzdCBhY2NvcmRpbmdseSBpbiAKKwkgICAgICAgIAkvLyB0aGUgYWRkUHJlZml4IGZ1bmN0aW9uIGluIHVjb2xfZWxtLiBUaGUgcmVhc29uIGlzIHRoYXQgd2UgCisJICAgICAgICAJLy8gbmVlZCB0byBhZGQgYm90aCBjb21wb3NlZCBBTkQgZGVjb21wb3NlZCBlbGVtZW50cyB0byB0aGUgCisJICAgICAgICAJLy8gdW5zYWZlIHRhYmxlLgorCQkgICAgICAgIGludCBzaXplID0gdG9rLm1fcHJlZml4XyA+PiAyNDsKKwkJICAgICAgICBpbnQgb2Zmc2V0ID0gdG9rLm1fcHJlZml4XyAmIDB4MDBGRkZGRkY7CisJCSAgICAgICAgbV91dGlsRWxlbWVudF8ubV9wcmVmaXhDaGFyc18gCisgICAgICAgICAgICAgICAgICAgICAgICA9IG1fcGFyc2VyXy5tX3NvdXJjZV8uc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSk7CisJCSAgICAgICAgc2l6ZSA9ICh0b2subV9zb3VyY2VfID4+IDI0KSAtICh0b2subV9wcmVmaXhfID4+IDI0KTsgCisJCSAgICAgICAgb2Zmc2V0ID0gKHRvay5tX3NvdXJjZV8gJiAweDAwRkZGRkZGKSArICh0b2subV9wcmVmaXhfID4+IDI0KTsKKwkJICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX3VjaGFyc18gCisgICAgICAgICAgICAgICAgICAgICA9IG1fcGFyc2VyXy5tX3NvdXJjZV8uc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSk7CisJCSAgICB9IAorCQkgICAgZWxzZSB7CisJICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9wcmVmaXhDaGFyc18gPSBudWxsOworCSAgICAgICAgICAgIGludCBvZmZzZXQgPSB0b2subV9zb3VyY2VfICYgMHgwMEZGRkZGRjsKKwkgICAgICAgICAgICBpbnQgc2l6ZSA9IHRvay5tX3NvdXJjZV8gPj4+IDI0OworCSAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fdWNoYXJzXyA9IG1fcGFyc2VyXy5tX3NvdXJjZV8uc3Vic3RyaW5nKG9mZnNldCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArIHNpemUpOworCSAgICAgICAgfQorCSAgICAgICAgbV91dGlsRWxlbWVudF8ubV9jUG9pbnRzXyA9IG1fdXRpbEVsZW1lbnRfLm1fdWNoYXJzXzsKKwkgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1faXNUaGFpXyA9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5pc1RoYWlQcmVWb3dlbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fY1BvaW50c18uY2hhckF0KDApKTsKKwkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91dGlsRWxlbWVudF8ubV9jUG9pbnRzXy5sZW5ndGgoKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBtX3V0aWxFbGVtZW50Xy5tX2NQb2ludHNPZmZzZXRfOyBpICsrKSB7CisJCSAgICAgICAgIGlmIChpc0phbW8obV91dGlsRWxlbWVudF8ubV9jUG9pbnRzXy5jaGFyQXQoaSkpKSB7CisJCSAgICAgICAgICAgICB0Lm1fY29sbGF0b3JfLm1faXNKYW1vU3BlY2lhbF8gPSB0cnVlOworCQkgICAgICAgICAgICAgYnJlYWs7CisJCSAgICAgICAgfQorCQkgICAgfQorCQorCSAgICAgICAgLy8gQ2FzZSBiaXRzIGhhbmRsaW5nIAorCSAgICAgICAgbV91dGlsRWxlbWVudF8ubV9DRXNfWzBdICY9IDB4RkZGRkZGM0Y7IAorICAgICAgICAgICAgLy8gQ2xlYW4gdGhlIGNhc2UgYml0cyBmaWVsZAorCSAgICAgICAgaWYgKG1fdXRpbEVsZW1lbnRfLm1fY1BvaW50c18ubGVuZ3RoKCkgCisgICAgICAgICAgICAgICAgLSBtX3V0aWxFbGVtZW50Xy5tX2NQb2ludHNPZmZzZXRfID4gMSkgeworCSAgICAgICAgICAgIC8vIERvIGl0IG1hbnVhbGx5CisJICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9DRXNfWzBdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHw9IGdldENhc2VCaXRzKG1fdXRpbEVsZW1lbnRfLm1fY1BvaW50c18pOworCSAgICAgICAgfSAKKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIC8vIENvcHkgaXQgZnJvbSB0aGUgVUNBCisJICAgICAgICAgICAgaW50IGNhc2VDRSA9IGdldEZpcnN0Q0UobV91dGlsRWxlbWVudF8ubV9jUG9pbnRzXy5jaGFyQXQoMCkpOworCSAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fQ0VzX1swXSB8PSAoY2FzZUNFICYgMHhDMCk7CisJICAgICAgICB9CisJCisJICAgICAgICAvLyBhbmQgdGhlbiwgYWRkIGl0CisJICAgICAgICBhZGRBbkVsZW1lbnQodCwgbV91dGlsRWxlbWVudF8pOworCSAgICAgICAgdG9rID0gdG9rLm1fbmV4dF87CisJICAgIH0gICAKKwl9CisJCisJLyoqCisJICogVGVzdGluZyBpZiB0aGUgc3RyaW5nIGFyZ3VtZW50IGhhcyBjYXNlCisJICogQHBhcmFtIHNyYyBzdHJpbmcKKwkgKiBAcmV0dXJuIHRoZSBjYXNlIGZvciB0aGlzIGNoYXIgYXJyYXkKKwkgKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBpbnRlcm5hbCBwcm9ncmFtIGVycm9yIG9jY3VycworCSAqLworCXByaXZhdGUgZmluYWwgaW50IGdldENhc2VCaXRzKFN0cmluZyBzcmMpIHRocm93cyBFeGNlcHRpb24KKwl7CisJCWludCB1Q291bnQgPSAwOyAKKwkJaW50IGxDb3VudCA9IDA7CisJCXNyYyA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKHNyYywgdHJ1ZSk7CisJCW1fdXRpbENvbEVJdGVyXy5zZXRUZXh0KHNyYyk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc3JjLmxlbmd0aCgpOyBpKyspIHsKKwkJCW1fdXRpbENvbEVJdGVyXy5zZXRUZXh0KHNyYy5zdWJzdHJpbmcoaSwgaSArIDEpKTsKKwkJICAgIGludCBvcmRlciA9IG1fdXRpbENvbEVJdGVyXy5uZXh0KCk7CisJCSAgICBpZiAoUnVsZUJhc2VkQ29sbGF0b3IuaXNDb250aW51YXRpb24ob3JkZXIpKSB7CisJCSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW50ZXJuYWwgcHJvZ3JhbSBlcnJvciIpOworCQkgICAgfQorCQkgICAgaWYgKChvcmRlciAmIFJ1bGVCYXNlZENvbGxhdG9yLkNFX0NBU0VfQklUX01BU0tfKQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFVQUEVSX0NBU0VfKSB7CisJCSAgICAgICAgdUNvdW50ICsrOworCQkgICAgfSAKKwkJICAgIGVsc2UgeworCQkgICAgCWNoYXIgY2ggPSBzcmMuY2hhckF0KGkpOworCQkgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKGNoKSkgeworCQkgICAgICAgICAgICBsQ291bnQgKys7CisJCSAgICAgICAgfSAKKwkJICAgICAgICBlbHNlIHsKKwkJICAgICAgICAgICAgaWYgKHRvU21hbGxLYW5hKGNoKSA9PSBjaCAmJiB0b0xhcmdlS2FuYShjaCkgIT0gY2gpIHsKKwkJICAgICAgICAgICAgICAgIGxDb3VudCArKzsKKwkJICAgICAgICAgICAgfQorCQkgICAgICAgIH0KKwkJICAgIH0KKwkJfQorCQkKKwkJaWYgKHVDb3VudCAhPSAwICYmIGxDb3VudCAhPSAwKSB7CisJCSAgICByZXR1cm4gTUlYRURfQ0FTRV87CisJCX0gCisJCWVsc2UgaWYgKHVDb3VudCAhPSAwKSB7CisJCSAgICByZXR1cm4gVVBQRVJfQ0FTRV87CisJCX0gCisJCWVsc2UgeworCQkgICAgcmV0dXJuIExPV0VSX0NBU0VfOworCQl9CisJfQorCQorCS8qKgorCSAqIENvbnZlcnRzIGEgY2hhciB0byB0aGUgdXBwZXJjYXNlIEthbmEKKwkgKiBAcGFyYW0gY2ggY2hhcmFjdGVyIHRvIGNvbnZlcnQKKwkgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgS2FuYSBjaGFyYWN0ZXIKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIHRvTGFyZ2VLYW5hKGNoYXIgY2gpIAorCXsKKwkgICAgaWYgKDB4MzA0MiA8IGNoICYmIGNoIDwgMHgzMGVmKSB7IC8vIEthbmEgcmFuZ2UgCisJICAgICAgICBzd2l0Y2ggKGNoIC0gMHgzMDAwKSB7CisJICAgICAgICAgICAgY2FzZSAweDQxOiAKKwkgICAgICAgICAgICBjYXNlIDB4NDM6IAorCSAgICAgICAgICAgIGNhc2UgMHg0NTogCisJICAgICAgICAgICAgY2FzZSAweDQ3OiAKKwkgICAgICAgICAgICBjYXNlIDB4NDk6IAorCSAgICAgICAgICAgIGNhc2UgMHg2MzogCisJICAgICAgICAgICAgY2FzZSAweDgzOiAKKwkgICAgICAgICAgICBjYXNlIDB4ODU6IAorCSAgICAgICAgICAgIGNhc2UgMHg4RToKKwkgICAgICAgICAgICBjYXNlIDB4QTE6IAorCSAgICAgICAgICAgIGNhc2UgMHhBMzogCisJICAgICAgICAgICAgY2FzZSAweEE1OiAKKwkgICAgICAgICAgICBjYXNlIDB4QTc6IAorCSAgICAgICAgICAgIGNhc2UgMHhBOTogCisJICAgICAgICAgICAgY2FzZSAweEMzOiAKKwkgICAgICAgICAgICBjYXNlIDB4RTM6IAorCSAgICAgICAgICAgIGNhc2UgMHhFNTogCisJICAgICAgICAgICAgY2FzZSAweEVFOgorCSAgICAgICAgICAgICAgICBjaCArKzsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIGNhc2UgMHhGNToKKwkgICAgICAgICAgICBjaCA9IDB4MzBBQjsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIGNhc2UgMHhGNjoKKwkgICAgICAgICAgICBjaCA9IDB4MzBCMTsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gY2g7CisJfQorCQorCS8qKgorCSAqIENvbnZlcnRzIGEgY2hhciB0byB0aGUgbG93ZXJjYXNlIEthbmEKKwkgKiBAcGFyYW0gY2ggY2hhcmFjdGVyIHRvIGNvbnZlcnQKKwkgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgS2FuYSBjaGFyYWN0ZXIKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIHRvU21hbGxLYW5hKGNoYXIgY2gpIAorCXsKKwkgICAgaWYgKDB4MzA0MiA8IGNoICYmIGNoIDwgMHgzMGVmKSB7IC8vIEthbmEgcmFuZ2UKKwkgICAgICAgIHN3aXRjaCAoY2ggLSAweDMwMDApIHsKKwkgICAgICAgICAgICBjYXNlIDB4NDI6IAorCSAgICAgICAgICAgIGNhc2UgMHg0NDogCisJICAgICAgICAgICAgY2FzZSAweDQ2OiAKKwkgICAgICAgICAgICBjYXNlIDB4NDg6IAorCSAgICAgICAgICAgIGNhc2UgMHg0QTogCisJICAgICAgICAgICAgY2FzZSAweDY0OiAKKwkgICAgICAgICAgICBjYXNlIDB4ODQ6IAorCSAgICAgICAgICAgIGNhc2UgMHg4NjogCisJICAgICAgICAgICAgY2FzZSAweDhGOgorCSAgICAgICAgICAgIGNhc2UgMHhBMjogCisJICAgICAgICAgICAgY2FzZSAweEE0OiAKKwkgICAgICAgICAgICBjYXNlIDB4QTY6IAorCSAgICAgICAgICAgIGNhc2UgMHhBODogCisJICAgICAgICAgICAgY2FzZSAweEFBOiAKKwkgICAgICAgICAgICBjYXNlIDB4QzQ6IAorCSAgICAgICAgICAgIGNhc2UgMHhFNDogCisJICAgICAgICAgICAgY2FzZSAweEU2OiAKKwkgICAgICAgICAgICBjYXNlIDB4RUY6CisJICAgICAgICAgICAgICAgIGNoIC0tOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIDB4QUI6CisJICAgICAgICAgICAgICAgIGNoID0gMHgzMEY1OworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIDB4QjE6CisJICAgICAgICAgICAgICAgIGNoID0gMHgzMEY2OworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gY2g7CisJfQorCisgICAgLyoqCisgICAgICogVGhpcyBzaG91bGQgYmUgY29ubmVjdGVkIHRvIHNwZWNpYWwgSmFtbyBoYW5kbGluZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBnZXRGaXJzdENFKGNoYXIgY2gpIAorICAgIHsKKyAgICAJbV91dGlsQ29sRUl0ZXJfLnNldFRleHQoVUNoYXJhY3Rlci50b1N0cmluZyhjaCkpOworCSAgICByZXR1cm4gbV91dGlsQ29sRUl0ZXJfLm5leHQoKTsKKwl9CisJCisJLyoqIAorCSAqIFRoaXMgYWRkcyBhIHJlYWQgZWxlbWVudCwgd2hpbGUgdGVzdGluZyBmb3IgZXhpc3RlbmNlIAorCSAqIEBwYXJhbSB0IGJ1aWxkIHRhYmxlCisJICogQHBhcmFtIGVsZW1lbnQgCisJICogQHJldHVybiBjZQorCSAqLworICAgIHByaXZhdGUgaW50IGFkZEFuRWxlbWVudChCdWlsZFRhYmxlIHQsIEVsZW1lbnRzIGVsZW1lbnQpIAorICAgIHsKKyAgCQlWZWN0b3IgZXhwYW5zaW9ucyA9IHQubV9leHBhbnNpb25zXzsKKyAgICAgICAgaWYgKGVsZW1lbnQubV9DRUxlbmd0aF8gPT0gMSkgeworCSAgICAJaWYgKGVsZW1lbnQubV9pc1RoYWlfID09IGZhbHNlKSB7CisJICAgICAgICAgICAgZWxlbWVudC5tX21hcENFXyA9IGVsZW1lbnQubV9DRXNfWzBdOworCSAgICAgICAgfSAKKwkgICAgICAgIGVsc2UgeyAvLyBhZGQgdGhhaSAtIHRvdGFsbHkgYmFkIGhlcmUKKyAgICAgICAgICAgICAgICAvLyBvbWl0dGVkIHRoZSBleHBhbnNpb24gb2Zmc2V0IGhlcmUgZm9yIHRoZSBidWlsZGVyCisgICAgICAgICAgICAgICAgLy8gKEhFQURFUl9TSVpFXyA+PiAyKQorCSAgICAgICAgICAgIGludCBleHBhbnNpb24gPSBSdWxlQmFzZWRDb2xsYXRvci5DRV9TUEVDSUFMX0ZMQUdfIAorCSAgICAgICAgICAgICAgICAgICAgICAgIHwgKENFX1RIQUlfVEFHXyA8PCBSdWxlQmFzZWRDb2xsYXRvci5DRV9UQUdfU0hJRlRfKSAKKwkgICAgICAgICAgICAgICAgICAgICAgICB8IChhZGRFeHBhbnNpb24oZXhwYW5zaW9ucywgZWxlbWVudC5tX0NFc19bMF0pCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgNCkgCisJICAgICAgICAgICAgICAgICAgICAgICAgfCAweDE7CisJICAgICAgICAgICAgZWxlbWVudC5tX21hcENFXyA9IGV4cGFuc2lvbjsKKwkgICAgICAgIH0KKwkgICAgfSAKKwkgICAgZWxzZSB7ICAgICAKKwkgICAgICAgIC8vIHVuZm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSB0byBsb29rIGZvciBhIGxvbmcgcHJpbWFyeSAKKwkgICAgICAgIC8vIGhlcmUgc2luY2UgaW4gY2Fub25pY2FsIGNsb3N1cmUgd2UgYXJlIGdvaW5nIHRvIGhpdCBzb21lIGxvbmcgCisJICAgICAgICAvLyBwcmltYXJpZXMgZnJvbSB0aGUgZmlyc3QgcGhhc2UsIGFuZCB0aGV5IHdpbGwgY29tZSBiYWNrIGFzIAorCSAgICAgICAgLy8gY29udGludWF0aW9ucy9leHBhbnNpb25zIGRlc3Ryb3lpbmcgdGhlIGVmZmVjdCBvZiB0aGUgcHJldmlvdXMgCisJICAgICAgICAvLyBvcGl0aW1pemF0aW9uLiBBIGxvbmcgcHJpbWFyeSBpcyBhIHRocmVlIGJ5dGUgcHJpbWFyeSB3aXRoIAorCSAgICAgICAgLy8gc3RhcnRpbmcgc2Vjb25kYXJpZXMgYW5kIHRlcnRpYXJpZXMuIEl0IGNhbiBhcHBlYXIgaW4gbG9uZyBydW5zIAorCSAgICAgICAgLy8gb2Ygb25seSBwcmltYXJ5IGRpZmZlcmVuY2VzIChsaWtlIGVhc3QgQXNpYW4gdGFpbG9yaW5ncykgYWxzbywgCisJICAgICAgICAvLyBpdCBzaG91bGQgbm90IGJlIGFuIGV4cGFuc2lvbiwgYXMgZXhwYW5zaW9ucyB3b3VsZCBicmVhayB3aXRoIAorCSAgICAgICAgLy8gdGhpcworCSAgICAgICAgaWYgKGVsZW1lbnQubV9DRUxlbmd0aF8gPT0gMiAvLyBhIHR3byBDRSBleHBhbnNpb24gCisJICAgICAgICAgICAgJiYgUnVsZUJhc2VkQ29sbGF0b3IuaXNDb250aW51YXRpb24oZWxlbWVudC5tX0NFc19bMV0pIAorCSAgICAgICAgICAgICYmIChlbGVtZW50Lm1fQ0VzX1sxXSAKKwkgICAgICAgICAgICAgJiAofigweEZGIDw8IDI0IHwgUnVsZUJhc2VkQ29sbGF0b3IuQ0VfQ09OVElOVUFUSU9OX01BUktFUl8pKSkgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IDAgLy8gdGhhdCBoYXMgb25seSBwcmltYXJpZXMgaW4gY29udGludWF0aW9uCisJICAgICAgICAgICAgJiYgKCgoZWxlbWVudC5tX0NFc19bMF0gPj4gOCkgJiAweEZGKSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFJ1bGVCYXNlZENvbGxhdG9yLkJZVEVfQ09NTU9OXykgCisJICAgICAgICAgICAgLy8gYSBjb21tb24gc2Vjb25kYXJ5CisJICAgICAgICAgICAgJiYgKChlbGVtZW50Lm1fQ0VzX1swXSAmIDB4RkYpIAorCSAgICAgICAgICAgICAgICA9PSBSdWxlQmFzZWRDb2xsYXRvci5CWVRFX0NPTU1PTl8pIC8vIGFuZCBhIGNvbW1vbiB0ZXJ0aWFyeQorCSAgICAgICAgICAgICkgeworCSAgICAgICAgICAgIGVsZW1lbnQubV9tYXBDRV8gPSBSdWxlQmFzZWRDb2xsYXRvci5DRV9TUEVDSUFMX0ZMQUdfIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGxvbmcgcHJpbWFyeSBzcGVjaWFsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKENFX0xPTkdfUFJJTUFSWV9UQUdfIDw8IDI0KSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgYW5kIHNlY29uZCBieXRlIG9mIHByaW1hcnkKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGVsZW1lbnQubV9DRXNfWzBdID4+IDgpICYgMHhGRkZGMDApIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlyZCBieXRlIG9mIHByaW1hcnkKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGVsZW1lbnQubV9DRXNfWzFdID4+IDI0KSAmIDB4RkYpOyAgIAorCSAgICAgICAgfSAKKwkgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIG9taXR0aW5nIGV4cGFuc2lvbiBvZmZzZXQgaW4gYnVpbGRlcgorICAgICAgICAgICAgICAgIC8vIChIRUFERVJfU0laRV8gPj4gMikKKwkgICAgICAgICAgICBpbnQgZXhwYW5zaW9uID0gUnVsZUJhc2VkQ29sbGF0b3IuQ0VfU1BFQ0lBTF9GTEFHXyAKKwkgICAgICAgICAgICAgICAgICAgICAgICB8IChDRV9FWFBBTlNJT05fVEFHXyAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFJ1bGVCYXNlZENvbGxhdG9yLkNFX1RBR19TSElGVF8pIAorCSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFkZEV4cGFuc2lvbihleHBhbnNpb25zLCBlbGVtZW50Lm1fQ0VzX1swXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgNCkgJiAweEZGRkZGMDsKKwkKKwkgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGVsZW1lbnQubV9DRUxlbmd0aF87IGkgKyspIHsKKwkgICAgICAgICAgICAgICAgIGFkZEV4cGFuc2lvbihleHBhbnNpb25zLCBlbGVtZW50Lm1fQ0VzX1tpXSk7CisJICAgICAgICAgICAgfQorCQkJICAgIGlmIChlbGVtZW50Lm1fQ0VMZW5ndGhfIDw9IDB4RikgeworCQkJICAgICAgICBleHBhbnNpb24gfD0gZWxlbWVudC5tX0NFTGVuZ3RoXzsKKwkJCSAgICB9IAorCQkJICAgIGVsc2UgeworCQkJICAgICAgICBhZGRFeHBhbnNpb24oZXhwYW5zaW9ucywgMCk7CisJCQkgICAgfQorCQkJICAgIGVsZW1lbnQubV9tYXBDRV8gPSBleHBhbnNpb247CisJCQkgICAgc2V0TWF4RXhwYW5zaW9uKGVsZW1lbnQubV9DRXNfW2VsZW1lbnQubV9DRUxlbmd0aF8gLSAxXSwKKwkJCSAgICAgICAgICAgICAgICAgICAgKGJ5dGUpZWxlbWVudC5tX0NFTGVuZ3RoXywgCisJCQkgICAgICAgICAgICAgICAgICAgIHQubV9tYXhFeHBhbnNpb25zXyk7CisJCQkgICAgaWYgKGlzSmFtbyhlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KDApKSl7CisJCQkgICAgICAgIHQubV9jb2xsYXRvcl8ubV9pc0phbW9TcGVjaWFsXyA9IHRydWU7CisJCQkgICAgICAgIHNldE1heEphbW9FeHBhbnNpb24oZWxlbWVudC5tX2NQb2ludHNfLmNoYXJBdCgwKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1fQ0VzX1tlbGVtZW50Lm1fQ0VMZW5ndGhfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDFdLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKWVsZW1lbnQubV9DRUxlbmd0aF8sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tX21heEphbW9FeHBhbnNpb25zXyk7CisJCQkgICAgfQorCQkgICAgfQorCSAgICB9CisJCisJICAgIC8vIGhlcmUgd2Ugd2FudCB0byBhZGQgdGhlIHByZWZpeCBzdHJ1Y3R1cmUuCisJICAgIC8vIEkgd2lsbCB0cnkgdG8gcHJvY2VzcyBpdCBhcyBhIHJldmVyc2UgY29udHJhY3Rpb24sIGlmIHBvc3NpYmxlLgorCSAgICAvLyBwcmVmaXggYnVmZmVyIGlzIGFscmVhZHkgcmV2ZXJzZWQuCisJCisJICAgIGlmIChlbGVtZW50Lm1fcHJlZml4Q2hhcnNfICE9IG51bGwgJiYKKyAgICAgICAgICAgIGVsZW1lbnQubV9wcmVmaXhDaGFyc18ubGVuZ3RoKCkgLSBlbGVtZW50Lm1fcHJlZml4XyA+IDApIHsKKwkJICAgIC8vIFdlIGtlZXAgdGhlIHNlZW4gcHJlZml4IHN0YXJ0ZXIgZWxlbWVudHMgaW4gYSBoYXNodGFibGUgd2UgbmVlZCAKKyAgICAgICAgICAgIC8vIGl0IHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgc2ltcGxlIGNvZGVwb2ludHMgYW5kIAorICAgICAgICAgICAgLy8gcHJlZml4IHN0YXJ0ZXJzLiBBbHNvLCB3ZSBuZWVkIHRvIHVzZSBpdCBmb3IgY2Fub25pY2FsIGNsb3N1cmUuCisJCSAgICBtX3V0aWxFbGVtZW50Ml8ubV9jYXNlQml0XyA9IGVsZW1lbnQubV9jYXNlQml0XzsKKyAgICAgICAgICAgIG1fdXRpbEVsZW1lbnQyXy5tX0NFTGVuZ3RoXyA9IGVsZW1lbnQubV9DRUxlbmd0aF87CisgICAgICAgICAgICBtX3V0aWxFbGVtZW50Ml8ubV9DRXNfID0gZWxlbWVudC5tX0NFc187CisgICAgICAgICAgICBtX3V0aWxFbGVtZW50Ml8ubV9pc1RoYWlfID0gZWxlbWVudC5tX2lzVGhhaV87CisgICAgICAgICAgICBtX3V0aWxFbGVtZW50Ml8ubV9tYXBDRV8gPSBlbGVtZW50Lm1fbWFwQ0VfOworICAgICAgICAgICAgbV91dGlsRWxlbWVudDJfLm1fcHJlZml4Q2hhcnNfID0gZWxlbWVudC5tX3ByZWZpeENoYXJzXzsKKyAgICAgICAgICAgIG1fdXRpbEVsZW1lbnQyXy5tX3NpemVQcmltXyA9IGVsZW1lbnQubV9zaXplUHJpbV87CisgICAgICAgICAgICBtX3V0aWxFbGVtZW50Ml8ubV9zaXplU2VjXyA9IGVsZW1lbnQubV9zaXplU2VjXzsKKyAgICAgICAgICAgIG1fdXRpbEVsZW1lbnQyXy5tX3NpemVUZXJfID0gZWxlbWVudC5tX3NpemVUZXJfOworICAgICAgICAgICAgbV91dGlsRWxlbWVudDJfLm1fdmFyaWFibGVUb3BfID0gZWxlbWVudC5tX3ZhcmlhYmxlVG9wXzsKKyAgICAgICAgICAgIG1fdXRpbEVsZW1lbnQyXy5tX3ByZWZpeF8gPSAwOworICAgICAgICAgICAgbV91dGlsRWxlbWVudDJfLm1fdWNoYXJzXyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTm9ybWFsaXplci5jb21wb3NlKGVsZW1lbnQubV9wcmVmaXhDaGFyc18sIGZhbHNlKTsKKyAgICAgICAgICAgIG1fdXRpbEVsZW1lbnQyXy5tX2NQb2ludHNfID0gbV91dGlsRWxlbWVudDJfLm1fdWNoYXJzXzsKKyAgICAgICAgICAgIG1fdXRpbEVsZW1lbnQyXy5tX2NQb2ludHNPZmZzZXRfID0gMDsKKyAgICAgICAgICAgIAorCQkgICAgaWYgKHQubV9wcmVmaXhMb29rdXBfICE9IG51bGwpIHsKKwkJICAgICAgICBFbGVtZW50cyB1Q0UgPSAoRWxlbWVudHMpdC5tX3ByZWZpeExvb2t1cF8uZ2V0KGVsZW1lbnQpOworCQkgICAgICAgIGlmICh1Q0UgIT0gbnVsbCkgeyAKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgYWxyZWFkeSBhIHNldCBvZiBjb2RlIHBvaW50cyBoZXJlCisJCSAgICAgICAgICAgIGVsZW1lbnQubV9tYXBDRV8gPSBhZGRQcmVmaXgodCwgdUNFLm1fbWFwQ0VfLCBlbGVtZW50KTsKKwkJICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBubyBjb2RlIHBvaW50cywgc28gdGhpcyBzcG90IGlzIGNsZWFuCisJCSAgICAgICAgICAgIGVsZW1lbnQubV9tYXBDRV8gPSBhZGRQcmVmaXgodCwgQ0VfTk9UX0ZPVU5EXywgZWxlbWVudCk7CisJCSAgICAgICAgICAgIHVDRSA9IG5ldyBFbGVtZW50cyhlbGVtZW50KTsKKwkJICAgICAgICAgICAgdUNFLm1fY1BvaW50c18gPSB1Q0UubV91Y2hhcnNfOworCQkgICAgICAgICAgICB0Lm1fcHJlZml4TG9va3VwXy5wdXQodUNFLCB1Q0UpOworCQkgICAgICAgIH0KKwkJICAgICAgICBpZiAobV91dGlsRWxlbWVudDJfLm1fcHJlZml4Q2hhcnNfLmxlbmd0aCgpIAorICAgICAgICAgICAgICAgICAgICAgICAgIT0gZWxlbWVudC5tX3ByZWZpeENoYXJzXy5sZW5ndGgoKSAtIGVsZW1lbnQubV9wcmVmaXhfCisgICAgICAgICAgICAgICAgICAgIHx8ICFtX3V0aWxFbGVtZW50Ml8ubV9wcmVmaXhDaGFyc18ucmVnaW9uTWF0Y2hlcygwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX3ByZWZpeENoYXJzXywgZWxlbWVudC5tX3ByZWZpeF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Ml8ubV9wcmVmaXhDaGFyc18ubGVuZ3RoKCkpKSB7CisJCSAgICAgICAgICAgIC8vIGRvIGl0IQorICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Ml8ubV9tYXBDRV8gPSBhZGRQcmVmaXgodCwgZWxlbWVudC5tX21hcENFXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Ml8pOworCQkgICAgICAgIH0KKwkJICAgIH0KKwkgICAgfQorCQorCSAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgY2Fub25pY2FsIGl0ZXJhdG9yIGhlcmUKKwkgICAgLy8gdGhlIHdheSB3ZSBkbyBpdCBpcyB0byBnZW5lcmF0ZSB0aGUgY2Fub25pY2FsbHkgZXF1aXZhbGVudCBzdHJpbmdzIAorCSAgICAvLyBmb3IgdGhlIGNvbnRyYWN0aW9uIGFuZCB0aGVuIGFkZCB0aGUgc2VxdWVuY2VzIHRoYXQgcGFzcyBGQ0QgY2hlY2sKKwkgICAgaWYgKGVsZW1lbnQubV9jUG9pbnRzXy5sZW5ndGgoKSAtIGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XyA+IDEgCisJICAgICAgICAmJiAhKGVsZW1lbnQubV9jUG9pbnRzXy5sZW5ndGgoKSAtIGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XyA9PSAyIAorICAgICAgICAgICAgJiYgVVRGMTYuaXNMZWFkU3Vycm9nYXRlKGVsZW1lbnQubV9jUG9pbnRzXy5jaGFyQXQoMCkpIAorICAgICAgICAgICAgJiYgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KDEpKSkpIHsgCisgICAgICAgICAgICAvLyB0aGlzIGlzIGEgY29udHJhY3Rpb24sIHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY29tcG9zZWQgZm9ybSAKKyAgICAgICAgICAgIC8vIHNob3VsZCBhbHNvIGJlIGluY2x1ZGVkCisJICAgICAgICBtX3V0aWxDYW5JdGVyXy5zZXRTb3VyY2UoZWxlbWVudC5tX2NQb2ludHNfKTsKKwkJICAgIFN0cmluZyBzb3VyY2UgPSBtX3V0aWxDYW5JdGVyXy5uZXh0KCk7CisJCSAgICB3aGlsZSAoc291cmNlICE9IG51bGwgJiYgc291cmNlLmxlbmd0aCgpID4gMCkgeworCQkgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soc291cmNlLCBOb3JtYWxpemVyLkZDRCkgCisgICAgICAgICAgICAgICAgICAgICE9IE5vcm1hbGl6ZXIuTk8pIHsKKwkJICAgICAgICAgICAgZWxlbWVudC5tX3VjaGFyc18gPSBzb3VyY2U7CisJCSAgICAgICAgICAgIGVsZW1lbnQubV9jUG9pbnRzXyA9IGVsZW1lbnQubV91Y2hhcnNfOworCQkgICAgICAgICAgICBmaW5hbGl6ZUFkZGl0aW9uKHQsIGVsZW1lbnQpOworCQkgICAgICAgIH0KKwkJICAgICAgICBzb3VyY2UgPSBtX3V0aWxDYW5JdGVyXy5uZXh0KCk7CisJCSAgICB9CisJCQorCQkgICAgcmV0dXJuIGVsZW1lbnQubV9tYXBDRV87CisJCX0gCisgICAgICAgIGVsc2UgeworCQkgICAgcmV0dXJuIGZpbmFsaXplQWRkaXRpb24odCwgZWxlbWVudCk7ICAKKwkJfQorCX0KKworICAgIC8qKgorICAgICAqIFBhZHMgdGhlIGFyZ3VtZW50IHZhbHVlIHRvIGEgY291bnQgb2YgNAorICAgICAqIEBwYXJhbSBzb21ldGhpbmcgdmFsdWUgdG8gcGFkCisgICAgICogQHJldHVybiBwYWRkZWQgc29tZXRoaW5nCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IHBhZGRlZHNpemUoaW50IHNvbWV0aGluZykgCisgICAgeworICAgIAlyZXR1cm4gc29tZXRoaW5nICsgKChzb21ldGhpbmcgJSA0KSAhPSAwID8gNCAtIChzb21ldGhpbmcgJSA0KSA6IDApOworICAgIH0gICAgCisgICAgCisgICAgLyoqCisgICAgICogQWRkcyBhbiBleHBhbnNpb24gY2UgdG8gdGhlIGV4cGFuc2lvbiB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gZXhwYW5zaW9ucyB2ZWN0b3IgdG8gYWRkIHRvCisgICAgICogQHBhcmFtIHZhbHVlIG9mIHRoZSBleHBhbnNpb24KKyAgICAgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBhZGRFeHBhbnNpb24oVmVjdG9yIGV4cGFuc2lvbnMsIGludCB2YWx1ZSkgCisgICAgeworCSAgICBleHBhbnNpb25zLmFkZChuZXcgSW50ZWdlcih2YWx1ZSkpOworCSAgICByZXR1cm4gZXhwYW5zaW9ucy5zaXplKCkgLSAxOworCX0KKwkKKwkvKioKKyAJICogTG9va3MgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbGwgZXhwYW5zaW9uIHNlcXVlbmNlcyBlbmRpbmcgd2l0aCB0aGUgCisgCSAqIHNhbWUgY29sbGF0aW9uIGVsZW1lbnQuIFRoZSBzaXplIHJlcXVpcmVkIGZvciBtYXhleHBhbnNpb24gYW5kIG1heHNpemUgCisgCSAqIGlzIHJldHVybmVkIGlmIHRoZSBhcnJheXMgYXJlIHRvbyBzbWFsbC4KKwkgKiBAcGFyYW0gZW5kZXhwYW5zaW9uIHRoZSBsYXN0IGV4cGFuc2lvbiBjb2xsYXRpb24gZWxlbWVudCB0byBiZSBhZGRlZAorCSAqIEBwYXJhbSBleHBhbnNpb25zaXplIHNpemUgb2YgdGhlIGV4cGFuc2lvbgorCSAqIEBwYXJhbSBtYXhleHBhbnNpb24gZGF0YSBzdHJ1Y3R1cmUgdG8gc3RvcmUgdGhlIG1heGltdW0gZXhwYW5zaW9uIGRhdGEuCisJICogQHJldHVybnMgc2l6ZSBvZiB0aGUgbWF4ZXhwYW5zaW9uIGFuZCBtYXhzaXplIHVzZWQuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgaW50IHNldE1heEV4cGFuc2lvbihpbnQgZW5kZXhwYW5zaW9uLCBieXRlIGV4cGFuc2lvbnNpemUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhFeHBhbnNpb25UYWJsZSBtYXhleHBhbnNpb24pCisJeworCSAgICBpbnQgc3RhcnQgPSAwOworCSAgICBpbnQgbGltaXQgPSBtYXhleHBhbnNpb24ubV9lbmRFeHBhbnNpb25DRV8uc2l6ZSgpOworICAgICAgICBsb25nIHVuc2lnbmVkID0gKGxvbmcpZW5kZXhwYW5zaW9uOworICAgICAgICB1bnNpZ25lZCAmPSAweEZGRkZGRkZGbDsKKwkKKwkgICAgLy8gdXNpbmcgYmluYXJ5IHNlYXJjaCB0byBkZXRlcm1pbmUgaWYgbGFzdCBleHBhbnNpb24gZWxlbWVudCBpcyAKKwkgICAgLy8gYWxyZWFkeSBpbiB0aGUgYXJyYXkgCisJICAgIGludCByZXN1bHQgPSAtMTsKKwkgICAgd2hpbGUgKHN0YXJ0IDwgbGltaXQgLSAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgICAgICBpbnQgbWlkID0gc3RhcnQgKyAoKGxpbWl0IC0gc3RhcnQpID4+IDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbG9uZyB1bnNpZ25lZGNlID0gKChJbnRlZ2VyKW1heGV4cGFuc2lvbi5tX2VuZEV4cGFuc2lvbkNFXy5nZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWQpKS5pbnRWYWx1ZSgpOyAKKyAgICAgICAgICAgIHVuc2lnbmVkY2UgJj0gMHhGRkZGRkZGRmw7CisJICAgICAgICBpZiAodW5zaWduZWQgPD0gdW5zaWduZWRjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICAgICAgICAgIGxpbWl0ID0gbWlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCSAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCSAgICAgIHN0YXJ0ID0gbWlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgIH0gCisJICAgICAgCisJICAgIGlmICgoKEludGVnZXIpbWF4ZXhwYW5zaW9uLm1fZW5kRXhwYW5zaW9uQ0VfLmdldChzdGFydCkpLmludFZhbHVlKCkgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gZW5kZXhwYW5zaW9uKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkgICAgICAgIHJlc3VsdCA9IHN0YXJ0OyAgCisJICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICBlbHNlIGlmICgoKEludGVnZXIpbWF4ZXhwYW5zaW9uLm1fZW5kRXhwYW5zaW9uQ0VfLmdldChsaW1pdCkpLmludFZhbHVlKCkgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gZW5kZXhwYW5zaW9uKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkgICAgICAgICAgICByZXN1bHQgPSBsaW1pdDsgICAgICAKKwkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgIGlmIChyZXN1bHQgPiAtMSkgeworCSAgICAgICAgLy8gZm91bmQgdGhlIGNlIGluIGV4cGFuc2lvbiwgd2UnbGwganVzdCBtb2RpZnkgdGhlIHNpemUgaWYgaXQgCisJICAgICAgICAvLyBpcyBzbWFsbGVyCisJICAgICAgICBPYmplY3QgY3VycmVudHNpemUgPSBtYXhleHBhbnNpb24ubV9leHBhbnNpb25DRVNpemVfLmdldChyZXN1bHQpOworCQkgICAgaWYgKCgoQnl0ZSljdXJyZW50c2l6ZSkuYnl0ZVZhbHVlKCkgPCBleHBhbnNpb25zaXplKSB7CisJCSAgICAgICAgbWF4ZXhwYW5zaW9uLm1fZXhwYW5zaW9uQ0VTaXplXy5zZXQocmVzdWx0LCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGUoZXhwYW5zaW9uc2l6ZSkpOworCQkgICAgfQorCSAgICB9CisJICAgIGVsc2UgeworCQkgICAgLy8gd2UnbGwgbmVlZCB0byBzcXVlZXplIHRoZSB2YWx1ZSBpbnRvIHRoZSBhcnJheS4gaW5pdGlhbCAKKwkJICAgIC8vIGltcGxlbWVudGF0aW9uLiBzaGlmdGluZyB0aGUgc3ViYXJyYXkgZG93biBieSAxCisJCSAgICBtYXhleHBhbnNpb24ubV9lbmRFeHBhbnNpb25DRV8uaW5zZXJ0RWxlbWVudEF0KAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVnZXIoZW5kZXhwYW5zaW9uKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgMSk7CisJCSAgICBtYXhleHBhbnNpb24ubV9leHBhbnNpb25DRVNpemVfLmluc2VydEVsZW1lbnRBdCgKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCeXRlKGV4cGFuc2lvbnNpemUpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyAxKTsKKwkgICAgfQorCSAgICByZXR1cm4gbWF4ZXhwYW5zaW9uLm1fZW5kRXhwYW5zaW9uQ0VfLnNpemUoKTsKKwl9CisJCisJLyoqCisgCSAqIFNldHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFsbCBqYW1vIGV4cGFuc2lvbiBzZXF1ZW5jZXMgZW5kaW5nIHdpdGggdGhlIAorIAkgKiBzYW1lIGNvbGxhdGlvbiBlbGVtZW50LiBUaGUgc2l6ZSByZXF1aXJlZCBmb3IgbWF4ZXhwYW5zaW9uIGFuZCBtYXhzaXplIAorIAkgKiBpcyByZXR1cm5lZCBpZiB0aGUgYXJyYXlzIGFyZSB0b28gc21hbGwuCisJICogQHBhcmFtIGNoIHRoZSBqYW1vIGNvZGVwb2ludAorCSAqIEBwYXJhbSBlbmRleHBhbnNpb24gdGhlIGxhc3QgZXhwYW5zaW9uIGNvbGxhdGlvbiBlbGVtZW50IHRvIGJlIGFkZGVkCisJICogQHBhcmFtIGV4cGFuc2lvbnNpemUgc2l6ZSBvZiB0aGUgZXhwYW5zaW9uCisJICogQHBhcmFtIG1heGV4cGFuc2lvbiBkYXRhIHN0cnVjdHVyZSB0byBzdG9yZSB0aGUgbWF4aW11bSBleHBhbnNpb24gZGF0YS4KKwkgKiBAcmV0dXJucyBzaXplIG9mIHRoZSBtYXhleHBhbnNpb24gYW5kIG1heHNpemUgdXNlZC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgc2V0TWF4SmFtb0V4cGFuc2lvbihjaGFyIGNoLCBpbnQgZW5kZXhwYW5zaW9uLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgZXhwYW5zaW9uc2l6ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhKYW1vRXhwYW5zaW9uVGFibGUgbWF4ZXhwYW5zaW9uKQorCXsKKwkgICAgYm9vbGVhbiBpc1YgPSB0cnVlOworCSAgICBpZiAoY2ggPj0gMHgxMTAwICYmIGNoIDw9IDB4MTExMikgeworCSAgICAgICAgLy8gZGV0ZXJtaW5lcyBMIGZvciBKYW1vLCBkb2Vzbid0IG5lZWQgdG8gc3RvcmUgdGhpcyBzaW5jZSBpdCBpcyAKKwkgICAgICAgIC8vIG5ldmVyIGF0IHRoZSBlbmQgb2YgYSBleHBhbnNpb24KKwkgICAgICAgIGlmIChtYXhleHBhbnNpb24ubV9tYXhMU2l6ZV8gPCBleHBhbnNpb25zaXplKSB7CisJICAgICAgICAgICAgbWF4ZXhwYW5zaW9uLm1fbWF4TFNpemVfID0gZXhwYW5zaW9uc2l6ZTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBtYXhleHBhbnNpb24ubV9lbmRFeHBhbnNpb25DRV8uc2l6ZSgpOworCSAgICB9CisJCisJICAgIGlmIChjaCA+PSAweDExNjEgJiYgY2ggPD0gMHgxMTc1KSB7CisJICAgICAgICAvLyBkZXRlcm1pbmVzIFYgZm9yIEphbW8KKwkgICAgICAgIGlmIChtYXhleHBhbnNpb24ubV9tYXhWU2l6ZV8gPCBleHBhbnNpb25zaXplKSB7CisJICAgICAgICAgICAgbWF4ZXhwYW5zaW9uLm1fbWF4VlNpemVfID0gZXhwYW5zaW9uc2l6ZTsKKwkgICAgICAgIH0KKwkgICAgfQorCQorCSAgICBpZiAoY2ggPj0gMHgxMUE4ICYmIGNoIDw9IDB4MTFDMikgeworCSAgICAgICAgaXNWID0gZmFsc2U7CisJICAgICAgICAvLyBkZXRlcm1pbmVzIFQgZm9yIEphbW8KKwkgICAgICAgIGlmIChtYXhleHBhbnNpb24ubV9tYXhUU2l6ZV8gPCBleHBhbnNpb25zaXplKSB7CisJICAgICAgICAgICAgbWF4ZXhwYW5zaW9uLm1fbWF4VFNpemVfID0gZXhwYW5zaW9uc2l6ZTsKKwkgICAgICAgIH0KKwkgICAgfQorCisgICAgICAgIGludCBwb3MgPSBtYXhleHBhbnNpb24ubV9lbmRFeHBhbnNpb25DRV8uc2l6ZSgpOwkKKwkJd2hpbGUgKHBvcyA+IDApIHsKKwkJICAgIHBvcyAtLTsKKwkJICAgIGlmICgoKEludGVnZXIpbWF4ZXhwYW5zaW9uLm1fZW5kRXhwYW5zaW9uQ0VfLmdldChwb3MpKS5pbnRWYWx1ZSgpIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gZW5kZXhwYW5zaW9uKSB7CisJCSAgICAgICAgcmV0dXJuIG1heGV4cGFuc2lvbi5tX2VuZEV4cGFuc2lvbkNFXy5zaXplKCk7CisJCSAgICB9CisJCX0KKwkJbWF4ZXhwYW5zaW9uLm1fZW5kRXhwYW5zaW9uQ0VfLmFkZChuZXcgSW50ZWdlcihlbmRleHBhbnNpb24pKTsKKwkJbWF4ZXhwYW5zaW9uLm1faXNWXy5hZGQobmV3IEJvb2xlYW4oaXNWKSk7CisJCSAgCisJCXJldHVybiBtYXhleHBhbnNpb24ubV9lbmRFeHBhbnNpb25DRV8uc2l6ZSgpOworCX0KKwkKKwkvKioKKwkgKiBBZGRzIGEgcHJlZml4IHRvIHRoZSB0YWJsZQorCSAqIEBwYXJhbSB0IGJ1aWxkIHRhYmxlIHRvIHVwZGF0ZQorCSAqIEBwYXJhbSBDRSBjb2xsYXRpb24gZWxlbWVudCB0byBhZGQKKwkgKiBAcGFyYW0gZWxlbWVudCBydWxlIGVsZW1lbnQgdG8gYWRkCisJICogQHJldHVybiBtb2RpZmllZCBjZQorCSAqLworCXByaXZhdGUgaW50IGFkZFByZWZpeChCdWlsZFRhYmxlIHQsIGludCBDRSwgRWxlbWVudHMgZWxlbWVudCkgCisJeworCSAgICAvLyBjdXJyZW50bHkgdGhlIGxvbmdlc3QgcHJlZml4IHdlJ3JlIHN1cHBvcnRpbmcgaW4gSmFwYW5lc2UgaXMgdHdvIAorCSAgICAvLyBjaGFyYWN0ZXJzIGxvbmcuIEFsdGhvdWdoIHRoaXMgdGFibGUgY291bGQgcXVpdGUgZWFzaWx5IG1pbWljIAorCSAgICAvLyBjb21wbGV0ZSBjb250cmFjdGlvbiBzdHVmZiB0aGVyZSBpcyBubyBnb29kIHJlYXNvbiB0byBtYWtlIGEgZ2VuZXJhbCAKKwkgICAgLy8gc29sdXRpb24sIGFzIGl0IHdvdWxkIHJlcXVpcmUgc29tZSBlcnJvciBwcm9uZSBtZXNzaW5nLgorCSAgICBDb250cmFjdGlvblRhYmxlIGNvbnRyYWN0aW9ucyA9IHQubV9jb250cmFjdGlvbnNfOworCSAgICBTdHJpbmcgb2xkQ1AgPSBlbGVtZW50Lm1fY1BvaW50c187CisJICAgIGludCBvbGRDUE9mZnNldCA9IGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XzsKKwkgICAgCisJICAgIGNvbnRyYWN0aW9ucy5tX2N1cnJlbnRUYWdfID0gQ0VfU1BFQ19QUk9DX1RBR187CisJICAgIC8vIGhlcmUsIHdlIHdpbGwgbm9ybWFsaXplICYgYWRkIHByZWZpeCB0byB0aGUgdGFibGUuCisJICAgIGludCBzaXplID0gZWxlbWVudC5tX3ByZWZpeENoYXJzXy5sZW5ndGgoKSAtIGVsZW1lbnQubV9wcmVmaXhfOworCSAgICBmb3IgKGludCBqID0gMTsgaiA8IHNpemU7IGogKyspIHsgICAKKwkgICAgICAgIC8vIEZpcnN0IGFkZCBORkQgcHJlZml4IGNoYXJzIHRvIHVuc2FmZSBDUCBoYXNoIHRhYmxlIAorCSAgICAgICAgLy8gVW5sZXNzIGl0IGlzIGEgdHJhaWwgc3Vycm9nYXRlLCB3aGljaCBpcyBoYW5kbGVkIGFsZ29yaXRtaWNhbGx5IAorCSAgICAgICAgLy8gYW5kIHNob3VsZG4ndCB0YWtlIHVwIHNwYWNlIGluIHRoZSB0YWJsZS4KKwkgICAgICAgIGNoYXIgY2ggPSBlbGVtZW50Lm1fcHJlZml4Q2hhcnNfLmNoYXJBdChqICsgZWxlbWVudC5tX3ByZWZpeF8pOworCSAgICAgICAgaWYgKCFVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGNoKSkgeworCSAgICAgICAgICAgIHVuc2FmZUNQU2V0KHQubV91bnNhZmVDUF8sIGNoKTsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICAKKwkgICAgLy8gU3RyaW5nQnVmZmVyIHJldmVyc2VkID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBtX3V0aWxTdHJpbmdCdWZmZXJfLmRlbGV0ZSgwLCBtX3V0aWxTdHJpbmdCdWZmZXJfLmxlbmd0aCgpKTsKKwkgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqICsrKSB7IAorCSAgICAJLy8gcHJlZml4ZXMgYXJlIGdvaW5nIHRvIGJlIGxvb2tlZCB1cCBiYWNrd2FyZHMKKwkgICAgICAgIC8vIHRoZXJlZm9yZSwgd2Ugd2lsbCBwcm9tcHRseSByZXZlcnNlIHRoZSBwcmVmaXggYnVmZmVyLi4uCisJICAgICAgICBpbnQgb2Zmc2V0ID0gZWxlbWVudC5tX3ByZWZpeENoYXJzXy5sZW5ndGgoKSAtIGogLSAxOworCSAgICAgICAgbV91dGlsU3RyaW5nQnVmZmVyXy5hcHBlbmQoZWxlbWVudC5tX3ByZWZpeENoYXJzXy5jaGFyQXQob2Zmc2V0KSk7CisJICAgIH0KKwkgICAgZWxlbWVudC5tX3ByZWZpeENoYXJzXyA9IG1fdXRpbFN0cmluZ0J1ZmZlcl8udG9TdHJpbmcoKTsKKwkgICAgZWxlbWVudC5tX3ByZWZpeF8gPSAwOworCQorCSAgICAvLyB0aGUgZmlyc3QgY29kZXBvaW50IGlzIGFsc28gdW5zYWZlLCBhcyBpdCBmb3JtcyBhICdjb250cmFjdGlvbicgd2l0aCAKKwkgICAgLy8gdGhlIHByZWZpeAorCSAgICBpZiAoIVVURjE2LmlzVHJhaWxTdXJyb2dhdGUoZWxlbWVudC5tX2NQb2ludHNfLmNoYXJBdCgwKSkpIHsKKwkgICAgICAgIHVuc2FmZUNQU2V0KHQubV91bnNhZmVDUF8sIGVsZW1lbnQubV9jUG9pbnRzXy5jaGFyQXQoMCkpOworCSAgICB9CisJCQorCSAgICBlbGVtZW50Lm1fY1BvaW50c18gPSBlbGVtZW50Lm1fcHJlZml4Q2hhcnNfOworCSAgICBlbGVtZW50Lm1fY1BvaW50c09mZnNldF8gPSBlbGVtZW50Lm1fcHJlZml4XzsKKwkKKwkgICAgLy8gQWRkIHRoZSBsYXN0IGNoYXIgb2YgdGhlIGNvbnRyYWN0aW9uIHRvIHRoZSBjb250cmFjdGlvbi1lbmQgaGFzaCAKKwkgICAgLy8gdGFibGUuIHVubGVzcyBpdCBpcyBhIHRyYWlsIHN1cnJvZ2F0ZSwgd2hpY2ggaXMgaGFuZGxlZCAKKwkgICAgLy8gYWxnb3JpdGhtaWNhbGx5IGFuZCBzaG91bGRuJ3QgYmUgaW4gdGhlIHRhYmxlCisJICAgIGlmICghVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZSgKKwkgICAgICAgICAgICBlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KGVsZW1lbnQubV9jUG9pbnRzXy5sZW5ndGgoKSAtIDEpKSkgeworCSAgICAgICAgQ29udHJFbmRDUFNldCh0Lm1fY29udHJFbmRDUF8sIGVsZW1lbnQubV9jUG9pbnRzXy5jaGFyQXQoCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1fY1BvaW50c18ubGVuZ3RoKCkgLSAxKSk7CisJICAgIH0KKwkgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBjaGVjayBpZiBjb250cmFjdGlvbnMgc3RhcnRzIHdpdGggYSBzdXJyb2dhdGUKKwkgICAgLy8gaW50IGNwID0gVVRGMTYuY2hhckF0KGVsZW1lbnQubV9jUG9pbnRzXywgZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfKTsKKwkKKwkgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBKYW1vcyBpbiB0aGUgY29udHJhY3Rpb24sIHdlIHNob3VsZCB0dXJuIG9uIHNwZWNpYWwgCisJICAgIC8vIHByb2Nlc3NpbmcgZm9yIEphbW9zCisJICAgIGlmIChpc0phbW8oZWxlbWVudC5tX3ByZWZpeENoYXJzXy5jaGFyQXQoZWxlbWVudC5tX3ByZWZpeF8pKSkgeworCSAgICAgICAgdC5tX2NvbGxhdG9yXy5tX2lzSmFtb1NwZWNpYWxfID0gdHJ1ZTsKKwkgICAgfQorCSAgICAvLyB0aGVuIHdlIG5lZWQgdG8gZGVhbCB3aXRoIGl0IAorCSAgICAvLyB3ZSBjb3VsZCBhcmVhZHkgaGF2ZSBzb21ldGhpbmcgaW4gdGFibGUgLSBvciB3ZSBtaWdodCBub3QgCisJICAgIGlmICghaXNQcmVmaXgoQ0UpKSB7IAorCSAgICAgICAgLy8gaWYgaXQgd2Fzbid0IGNvbnRyYWN0aW9uLCB3ZSB3b3VsZG4ndCBlbmQgdXAgaGVyZQorCSAgICAgICAgaW50IGZpcnN0Q29udHJhY3Rpb25PZmZzZXQgPSBhZGRDb250cmFjdGlvbihjb250cmFjdGlvbnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRSQUNUSU9OX1RBQkxFX05FV19FTEVNRU5UXywgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKTAsIENFKTsKKwkgICAgICAgIGludCBuZXdDRSA9IHByb2Nlc3NDb250cmFjdGlvbihjb250cmFjdGlvbnMsIGVsZW1lbnQsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFX05PVF9GT1VORF8pOworCSAgICAgICAgYWRkQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBmaXJzdENvbnRyYWN0aW9uT2Zmc2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubV9wcmVmaXhDaGFyc18uY2hhckF0KGVsZW1lbnQubV9wcmVmaXhfKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDRSk7CisJICAgICAgICBhZGRDb250cmFjdGlvbihjb250cmFjdGlvbnMsIGZpcnN0Q29udHJhY3Rpb25PZmZzZXQsIChjaGFyKTB4RkZGRiwgCisgICAgCSAgICAgICAgICAgICAgICAgICBDRSk7CisJICAgICAgICBDRSA9IGNvbnN0cnVjdFNwZWNpYWxDRShDRV9TUEVDX1BST0NfVEFHXywgZmlyc3RDb250cmFjdGlvbk9mZnNldCk7CisJICAgIH0gCisJICAgIGVsc2UgeyAKKwkgICAgICAgIC8vIHdlIGFyZSBhZGRpbmcgdG8gZXhpc3RpbmcgY29udHJhY3Rpb24gCisJICAgICAgICAvLyB0aGVyZSB3ZXJlIGFscmVhZHkgc29tZSBlbGVtZW50cyBpbiB0aGUgdGFibGUsIHNvIHdlIG5lZWQgdG8gYWRkIAorCSAgICAgICAgLy8gYSBuZXcgY29udHJhY3Rpb24gCisJICAgICAgICAvLyBUd28gdGhpbmdzIGNhbiBoYXBwZW4gaGVyZTogZWl0aGVyIHRoZSBjb2RlcG9pbnQgaXMgYWxyZWFkeSBpbiAKKwkgICAgICAgIC8vIHRoZSB0YWJsZSwgb3IgaXQgaXMgbm90CisJICAgICAgICBjaGFyIGNoID0gZWxlbWVudC5tX3ByZWZpeENoYXJzXy5jaGFyQXQoZWxlbWVudC5tX3ByZWZpeF8pOworCSAgICAgICAgaW50IHBvc2l0aW9uID0gZmluZENQKGNvbnRyYWN0aW9ucywgQ0UsIGNoKTsKKwkgICAgICAgIGlmIChwb3NpdGlvbiA+IDApIHsgICAgICAgCisJICAgICAgICAgICAgLy8gaWYgaXQgaXMgd2UganVzdCBjb250aW51ZSBkb3duIHRoZSBjaGFpbiAKKwkgICAgICAgICAgICBpbnQgZUNFID0gZ2V0Q0UoY29udHJhY3Rpb25zLCBDRSwgcG9zaXRpb24pOworCSAgICAgICAgICAgIGludCBuZXdDRSA9IHByb2Nlc3NDb250cmFjdGlvbihjb250cmFjdGlvbnMsIGVsZW1lbnQsIGVDRSk7CisJICAgICAgICAgICAgc2V0Q29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBDRSwgcG9zaXRpb24sIGNoLCBuZXdDRSk7CisJICAgICAgICB9IAorCSAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgLy8gaWYgaXQgaXNuJ3QsIHdlIHdpbGwgaGF2ZSB0byBjcmVhdGUgYSBuZXcgc2VxdWVuY2UgCisJICAgICAgICAgICAgcHJvY2Vzc0NvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZWxlbWVudCwgQ0VfTk9UX0ZPVU5EXyk7CisJICAgICAgICAgICAgaW5zZXJ0Q29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBDRSwgY2gsIGVsZW1lbnQubV9tYXBDRV8pOworCSAgICAgICAgfQorCSAgICB9CisJCisJICAgIGVsZW1lbnQubV9jUG9pbnRzXyA9IG9sZENQOworCSAgICBlbGVtZW50Lm1fY1BvaW50c09mZnNldF8gPSBvbGRDUE9mZnNldDsKKwkKKwkgICAgcmV0dXJuIENFOworCX0KKwkKKwkvKioKKwkgKiBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGNlIGlzIGEgY29udHJhY3Rpb24KKwkgKiBAcGFyYW0gQ0UgY29sbGF0aW9uIGVsZW1lbnQKKwkgKiBAcmV0dXJuIHRydWUgaWYgYXJndW1lbnQgY2UgaXMgYSBjb250cmFjdGlvbgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNDb250cmFjdGlvbihpbnQgQ0UpIAorCXsKKwkJcmV0dXJuIGlzU3BlY2lhbChDRSkgJiYgKGdldENFVGFnKENFKSA9PSBDRV9DT05UUkFDVElPTl9UQUdfKTsKKwl9CisJCisJLyoqCisJICogQ2hlY2tzIGlmIHRoZSBhcmd1bWVudCBjZSBoYXMgYSBwcmVmaXgKKwkgKiBAcGFyYW0gQ0UgY29sbGF0aW9uIGVsZW1lbnQKKwkgKiBAcmV0dXJuIHRydWUgaWYgYXJndW1lbnQgY2UgaGFzIGEgcHJlZml4CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1ByZWZpeChpbnQgQ0UpIAorCXsKKwkJcmV0dXJuIGlzU3BlY2lhbChDRSkgJiYgKGdldENFVGFnKENFKSA9PSBDRV9TUEVDX1BST0NfVEFHXyk7CisJfQorCQorCS8qKgorCSAqIENoZWNrcyBpZiB0aGUgYXJndW1lbnQgY2UgaXMgc3BlY2lhbAorCSAqIEBwYXJhbSBDRSBjb2xsYXRpb24gZWxlbWVudAorCSAqIEByZXR1cm4gdHJ1ZSBpZiBhcmd1bWVudCBjZSBpcyBzcGVjaWFsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1NwZWNpYWwoaW50IENFKSAKKwl7CisJCXJldHVybiAoQ0UgJiBSdWxlQmFzZWRDb2xsYXRvci5DRV9TUEVDSUFMX0ZMQUdfKSA9PSAweEYwMDAwMDAwOworCX0KKwkKKwkvKioKKwkgKiBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGNlIGhhcyBhIHByZWZpeAorCSAqIEBwYXJhbSBDRSBjb2xsYXRpb24gZWxlbWVudAorCSAqIEByZXR1cm4gdHJ1ZSBpZiBhcmd1bWVudCBjZSBoYXMgYSBwcmVmaXgKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZ2V0Q0VUYWcoaW50IENFKSAKKwl7CisJICAgIHJldHVybiAoQ0UgJiBSdWxlQmFzZWRDb2xsYXRvci5DRV9UQUdfTUFTS18pID4+PiAKKwkgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkNFX1RBR19TSElGVF87CisJfQorICAgIAorCS8qKgorCSAqIEdldHMgdGhlIGNlIGF0IHBvc2l0aW9uIGluIGNvbnRyYWN0aW9uIHRhYmxlCisJICogQHBhcmFtIHRhYmxlIGNvbnRyYWN0aW9uIHRhYmxlCisJICogQHBhcmFtIHBvc2l0aW9uIG9mZnNldCB0byB0aGUgY29udHJhY3Rpb24gdGFibGUKKwkgKiBAcmV0dXJuIGNlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGdldENFKENvbnRyYWN0aW9uVGFibGUgdGFibGUsIGludCBlbGVtZW50LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uKSAKKwl7CisJCWVsZW1lbnQgJj0gMHhGRkZGRkY7CisgICAgICAgIEJhc2ljQ29udHJhY3Rpb25UYWJsZSB0YmwgPSBnZXRCYXNpY0NvbnRyYWN0aW9uVGFibGUodGFibGUsIGVsZW1lbnQpOworICAgICAgICAKKyAgICAJaWYgKHRibCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gQ0VfTk9UX0ZPVU5EXzsKKyAgICAgICAgfQorCQlpZiAocG9zaXRpb24gPiB0YmwubV9DRXNfLnNpemUoKSB8fCBwb3NpdGlvbiA9PSAtMSkgeworCQkgICAgcmV0dXJuIENFX05PVF9GT1VORF87CisJCX0gCisJCWVsc2UgeworCQkgICAgcmV0dXJuICgoSW50ZWdlcil0YmwubV9DRXNfLmdldChwb3NpdGlvbikpLmludFZhbHVlKCk7CisJCX0KKwl9CisJCisJLyoqCisJICogU2V0cyB0aGUgdW5zYWZlIGNoYXJhY3RlcgorCSAqIEBwYXJhbSB0YWJsZSB1bnNhZmUgdGFibGUKKwkgKiBAcGFyYW0gYyBjaGFyYWN0ZXIgdG8gYmUgYWRkZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCB2b2lkIHVuc2FmZUNQU2V0KGJ5dGUgdGFibGVbXSwgY2hhciBjKSAKKwl7CisJICAgIGludCBoYXNoID0gYzsKKwkgICAgaWYgKGhhc2ggPj0gKFVOU0FGRUNQX1RBQkxFX1NJWkVfIDw8IDMpKSB7CisJICAgICAgICBpZiAoaGFzaCA+PSAweGQ4MDAgJiYgaGFzaCA8PSAweGY4ZmYpIHsKKwkgICAgICAgICAgICAvLyBQYXJ0IG9mIGEgc3Vycm9nYXRlLCBvciBpbiBwcml2YXRlIHVzZSBhcmVhLiAKKwkgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnbyBpbiB0aGUgdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgcmV0dXJuOworCSAgICAgICAgfQorCSAgICAgICAgaGFzaCA9IChoYXNoICYgVU5TQUZFQ1BfVEFCTEVfTUFTS18pICsgMjU2OworCSAgICB9CisJICAgIHRhYmxlW2hhc2ggPj4gM10gfD0gKDEgPDwgKGhhc2ggJiA3KSk7CisJfQorCQorCS8qKgorCSAqIFNldHMgdGhlIGNvbnRyYWN0aW9uIGVuZCBjaGFyYWN0ZXIKKwkgKiBAcGFyYW0gdGFibGUgY29udHJhY3Rpb24gZW5kIHRhYmxlCisJICogQHBhcmFtIGMgY2hhcmFjdGVyIHRvIGJlIGFkZGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgdm9pZCBDb250ckVuZENQU2V0KGJ5dGUgdGFibGVbXSwgY2hhciBjKSAKKwl7CisJICAgIGludCBoYXNoID0gYzsKKwkgICAgaWYgKGhhc2ggPj0gKFVOU0FGRUNQX1RBQkxFX1NJWkVfIDw8IDMpKSB7CisJICAgICAgICBoYXNoID0gKGhhc2ggJiBVTlNBRkVDUF9UQUJMRV9NQVNLXykgKyAyNTY7CisJICAgIH0KKwkgICAgdGFibGVbaGFzaCA+PiAzXSB8PSAoMSA8PCAoaGFzaCAmIDcpKTsKKwl9CisJCisJLyoqIAorCSAqIEFkZHMgbW9yZSBjb250cmFjdGlvbnMgaW4gdGFibGUuIElmIGVsZW1lbnQgaXMgbm9uIGV4aXN0YW50LCBpdCBjcmVhdGVzIAorCSAqIG9uLiBSZXR1cm5zIGVsZW1lbnQgaGFuZGxlIAorCSAqIEBwYXJhbSB0YWJsZSBjb250cmFjdGlvbiB0YWJsZQorCSAqIEBwYXJhbSBlbGVtZW50IG9mZnNldCB0byB0aGUgY29udHJhY3Rpb24gdGFibGUKKwkgKiBAcGFyYW0gY29kZVBvaW50IGNvZGVwb2ludCB0byBhZGQKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiBAcmV0dXJuIGNvbGxhdGlvbiBlbGVtZW50CisJICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGFkZENvbnRyYWN0aW9uKENvbnRyYWN0aW9uVGFibGUgdGFibGUsIGludCBlbGVtZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb2RlUG9pbnQsIGludCB2YWx1ZSkgCisgICAgeworCSAgICBCYXNpY0NvbnRyYWN0aW9uVGFibGUgdGJsID0gZ2V0QmFzaWNDb250cmFjdGlvblRhYmxlKHRhYmxlLCBlbGVtZW50KTsKKwkgICAgaWYgKHRibCA9PSBudWxsKSB7CisJICAgICAgICB0YmwgPSBhZGRBQ29udHJhY3Rpb25FbGVtZW50KHRhYmxlKTsKKwkgICAgICAgIGVsZW1lbnQgPSB0YWJsZS5tX2VsZW1lbnRzXy5zaXplKCkgLSAxOworCSAgICB9IAorCQorCSAgICB0YmwubV9DRXNfLmFkZChuZXcgSW50ZWdlcih2YWx1ZSkpOworCSAgICB0YmwubV9jb2RlUG9pbnRzXy5hcHBlbmQoY29kZVBvaW50KTsKKwkgICAgcmV0dXJuIGNvbnN0cnVjdFNwZWNpYWxDRSh0YWJsZS5tX2N1cnJlbnRUYWdfLCBlbGVtZW50KTsKKwl9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgY29udHJhY3Rpb24gZWxlbWVudCB0byB0aGUgdGFibGUKKyAgICAgKiBAcGFyYW0gdGFibGUgY29udHJhY3Rpb24gdGFibGUgdG8gdXBkYXRlCisgICAgICogQHJldHVybiBjb250cmFjdGlvbiAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBCYXNpY0NvbnRyYWN0aW9uVGFibGUgYWRkQUNvbnRyYWN0aW9uRWxlbWVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cmFjdGlvblRhYmxlIHRhYmxlKSAKKyAgICB7CisJICAgIEJhc2ljQ29udHJhY3Rpb25UYWJsZSByZXN1bHQgPSBuZXcgQmFzaWNDb250cmFjdGlvblRhYmxlKCk7CisJICAgIHRhYmxlLm1fZWxlbWVudHNfLmFkZChyZXN1bHQpOworCSAgICByZXR1cm4gcmVzdWx0OworCX0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBzcGVjaWFsIGNlCisgICAgICogQHBhcmFtIHRhZyBzcGVjaWFsIHRhZworICAgICAqIEBwYXJhbSBjZSAKKyAgICAgKiBAcmV0dXJuIGEgY29udHJhY3Rpb24gY2UKKyAgICAgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY29uc3RydWN0U3BlY2lhbENFKGludCB0YWcsIGludCBDRSkgCisJeworCQlyZXR1cm4gUnVsZUJhc2VkQ29sbGF0b3IuQ0VfU1BFQ0lBTF9GTEFHXyAKKwkJICAgICAgICB8ICh0YWcgPDwgUnVsZUJhc2VkQ29sbGF0b3IuQ0VfVEFHX1NISUZUXykgfCAoQ0UgJiAweEZGRkZGRik7CisJfQorCQorCS8qKgorCSAqIFNldHMgYW5kIGluc2VydHMgdGhlIGVsZW1lbnQgdGhhdCBoYXMgYSBjb250cmFjdGlvbgorCSAqIEBwYXJhbSBjb250cmFjdGlvbiB0YWJsZSAKKwkgKiBAcGFyYW0gZWxlbWVudCBjb250cmFjdGluZyBlbGVtZW50CisJICogQHBhcmFtIGV4aXN0aW5nQ0UKKwkgKiBAcmV0dXJuIGNvbnRyYWN0aW9uIGNlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgaW50IHByb2Nlc3NDb250cmFjdGlvbihDb250cmFjdGlvblRhYmxlIGNvbnRyYWN0aW9ucywgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50cyBlbGVtZW50LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleGlzdGluZ0NFKSAKKyAgICB7CisJICAgIGludCBmaXJzdENvbnRyYWN0aW9uT2Zmc2V0ID0gMDsKKwkgICAgLy8gZW5kIG9mIHJlY3Vyc2lvbiAKKwkgICAgaWYgKGVsZW1lbnQubV9jUG9pbnRzXy5sZW5ndGgoKSAtIGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XyA9PSAxKSB7CisJICAgICAgICBpZiAoaXNDb250cmFjdGlvblRhYmxlRWxlbWVudChleGlzdGluZ0NFKSAKKwkgICAgICAgICAgICAmJiBnZXRDRVRhZyhleGlzdGluZ0NFKSA9PSBjb250cmFjdGlvbnMubV9jdXJyZW50VGFnXykgeworCSAgICAgICAgICAgIGNoYW5nZUNvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZXhpc3RpbmdDRSwgKGNoYXIpMCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX21hcENFXyk7CisJICAgICAgICAgICAgY2hhbmdlQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBleGlzdGluZ0NFLCAoY2hhcikweEZGRkYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX21hcENFXyk7CisJICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nQ0U7CisJICAgICAgICB9IAorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAJLy8gY2FuJ3QgZG8ganVzdCB0aGF0LiBleGlzdGluZ0NlIG1pZ2h0IGJlIGEgY29udHJhY3Rpb24sIAorCSAgICAgICAgCS8vIG1lYW5pbmcgdGhhdCB3ZSBuZWVkIHRvIGRvIGFub3RoZXIgc3RlcAorCSAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lm1fbWFwQ0VfOyAKKwkgICAgICAgIH0KKwkgICAgfQorCQorCSAgICAvLyB0aGlzIHJlY3Vyc2lvbiBjdXJyZW50bHkgZmVlZHMgb24gdGhlIG9ubHkgZWxlbWVudCB3ZSBoYXZlLi4uIAorCSAgICAvLyBXZSB3aWxsIGhhdmUgdG8gY29weSBpdCBpbiBvcmRlciB0byBhY2NvbW9kYXRlIGZvciBib3RoIGJhY2t3YXJkIAorCSAgICAvLyBhbmQgZm9yd2FyZCBjeWNsZXMKKwkgICAgLy8gd2UgZW5jb3VudGVyZWQgZWl0aGVyIGFuIGVtcHR5IHNwYWNlIG9yIGEgbm9uLWNvbnRyYWN0aW9uIGVsZW1lbnQgCisJICAgIC8vIHRoaXMgbWVhbnMgd2UgYXJlIGNvbnN0cnVjdGluZyBhIG5ldyBjb250cmFjdGlvbiBzZXF1ZW5jZSAKKwkgICAgZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfICsrOworCSAgICBpZiAoIWlzQ29udHJhY3Rpb25UYWJsZUVsZW1lbnQoZXhpc3RpbmdDRSkpIHsgCisJICAgICAgICAvLyBpZiBpdCB3YXNuJ3QgY29udHJhY3Rpb24sIHdlIHdvdWxkbid0IGVuZCB1cCBoZXJlCisJICAgICAgICBmaXJzdENvbnRyYWN0aW9uT2Zmc2V0ID0gYWRkQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVFJBQ1RJT05fVEFCTEVfTkVXX0VMRU1FTlRfLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpMCwgZXhpc3RpbmdDRSk7CisJICAgICAgICBpbnQgbmV3Q0UgPSBwcm9jZXNzQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBlbGVtZW50LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRV9OT1RfRk9VTkRfKTsKKwkgICAgICAgIGFkZENvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZmlyc3RDb250cmFjdGlvbk9mZnNldCwgCisJICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XyksIAorCSAgICAgICAgICAgICAgICAgICAgICAgbmV3Q0UpOworCSAgICAgICAgYWRkQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBmaXJzdENvbnRyYWN0aW9uT2Zmc2V0LCAKKwkgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKTB4RkZGRiwgZXhpc3RpbmdDRSk7CisJICAgICAgICBleGlzdGluZ0NFID0gY29uc3RydWN0U3BlY2lhbENFKGNvbnRyYWN0aW9ucy5tX2N1cnJlbnRUYWdfLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cmFjdGlvbk9mZnNldCk7CisJICAgIH0gCisJICAgIGVsc2UgeyAKKwkgICAgICAgIC8vIHdlIGFyZSBhZGRpbmcgdG8gZXhpc3RpbmcgY29udHJhY3Rpb24KKwkgICAgICAgIC8vIHRoZXJlIHdlcmUgYWxyZWFkeSBzb21lIGVsZW1lbnRzIGluIHRoZSB0YWJsZSwgc28gd2UgbmVlZCB0byBhZGQgCisJICAgICAgICAvLyBhIG5ldyBjb250cmFjdGlvbiAKKwkgICAgICAgIC8vIFR3byB0aGluZ3MgY2FuIGhhcHBlbiBoZXJlOiBlaXRoZXIgdGhlIGNvZGVwb2ludCBpcyBhbHJlYWR5IGluIAorCSAgICAgICAgLy8gdGhlIHRhYmxlLCBvciBpdCBpcyBub3QKKwkgICAgICAgIGludCBwb3NpdGlvbiA9IGZpbmRDUChjb250cmFjdGlvbnMsIGV4aXN0aW5nQ0UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XykpOworCSAgICAgICAgaWYgKHBvc2l0aW9uID4gMCkgeyAgICAgICAKKwkgICAgICAgICAgICAvLyBpZiBpdCBpcyB3ZSBqdXN0IGNvbnRpbnVlIGRvd24gdGhlIGNoYWluIAorCSAgICAgICAgICAgIGludCBlQ0UgPSBnZXRDRShjb250cmFjdGlvbnMsIGV4aXN0aW5nQ0UsIHBvc2l0aW9uKTsKKwkgICAgICAgICAgICBpbnQgbmV3Q0UgPSBwcm9jZXNzQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBlbGVtZW50LCBlQ0UpOworCSAgICAgICAgICAgIHNldENvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZXhpc3RpbmdDRSwgcG9zaXRpb24sIAorCSAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX2NQb2ludHNfLmNoYXJBdChlbGVtZW50Lm1fY1BvaW50c09mZnNldF8pLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDRSk7CisJICAgICAgICB9IAorCSAgICAgICAgZWxzZSB7ICAKKwkgICAgICAgICAgICAvLyBpZiBpdCBpc24ndCwgd2Ugd2lsbCBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBzZXF1ZW5jZSAKKwkgICAgICAgICAgICBpbnQgbmV3Q0UgPSBwcm9jZXNzQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBlbGVtZW50LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VfTk9UX0ZPVU5EXyk7CisJICAgICAgICAgICAgaW5zZXJ0Q29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBleGlzdGluZ0NFLCAKKwkgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubV9jUG9pbnRzXy5jaGFyQXQoZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfKSwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q0UpOworCSAgICAgICAgfQorCSAgICB9CisJICAgIGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XyAtLTsKKwkgICAgcmV0dXJuIGV4aXN0aW5nQ0U7CisJfQorCQorCS8qKgorCSAqIENoZWNrcyBpZiBDRSBiZWxvbmdzIHRvIHRoZSBjb250cmFjdGlvbiB0YWJsZQorCSAqIEBwYXJhbSBDRSBjb2xsYXRpb24gZWxlbWVudCB0byB0ZXN0CisJICogQHJldHVybiB0cnVlIGlmIENFIGJlbG9uZ3MgdG8gdGhlIGNvbnRyYWN0aW9uIHRhYmxlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc0NvbnRyYWN0aW9uVGFibGVFbGVtZW50KGludCBDRSkgCisJeyAKKwkJcmV0dXJuIGlzU3BlY2lhbChDRSkgCisgICAgICAgICAgICAgICAmJiAoZ2V0Q0VUYWcoQ0UpID09IENFX0NPTlRSQUNUSU9OX1RBR18KKwkJICAgICAgICAgICB8fCBnZXRDRVRhZyhDRSkgPT0gQ0VfU1BFQ19QUk9DX1RBR18pOworCX0KKwkKKwkvKioKKwkgKiBHZXRzIHRoZSBjb2RlcG9pbnQgCisJICogQHBhcmFtIHRhYmxlIGNvbnRyYWN0aW9uIHRhYmxlCisJICogQHBhcmFtIGVsZW1lbnQgb2Zmc2V0IHRvIHRoZSBjb250cmFjdGlvbiBlbGVtZW50IGluIHRoZSB0YWJsZQorCSAqIEBwYXJhbSBjb2RlUG9pbnQgY29kZSBwb2ludCB0byBsb29rIGZvcgorCSAqIEByZXR1cm4gdGhlIG9mZnNldCB0byB0aGUgY29kZSBwb2ludAorCSAqLworCXByaXZhdGUgc3RhdGljIGludCBmaW5kQ1AoQ29udHJhY3Rpb25UYWJsZSB0YWJsZSwgaW50IGVsZW1lbnQsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb2RlUG9pbnQpIAorCXsKKwkJQmFzaWNDb250cmFjdGlvblRhYmxlIHRibCA9IGdldEJhc2ljQ29udHJhY3Rpb25UYWJsZSh0YWJsZSwgZWxlbWVudCk7CisJCWlmICh0YmwgPT0gbnVsbCkgeworCSAgICAgICAgcmV0dXJuIC0xOworCSAgICB9CisJCisJICAgIGludCBwb3NpdGlvbiA9IDA7CisJICAgIHdoaWxlIChjb2RlUG9pbnQgPiB0YmwubV9jb2RlUG9pbnRzXy5jaGFyQXQocG9zaXRpb24pKSB7CisJICAgICAgICAgcG9zaXRpb24gKys7CisJICAgICAgICAgaWYgKHBvc2l0aW9uID4gdGJsLm1fY29kZVBvaW50c18ubGVuZ3RoKCkpIHsKKwkgICAgICAgICAgICAgcmV0dXJuIC0xOworCSAgICAgICAgIH0KKwkgICAgfQorCSAgICBpZiAoY29kZVBvaW50ID09IHRibC5tX2NvZGVQb2ludHNfLmNoYXJBdChwb3NpdGlvbikpIHsKKwkgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKwkgICAgfSAKKwkgICAgZWxzZSB7CisJICAgICAgICByZXR1cm4gLTE7CisJICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjb250cmFjdGlvbiBlbGVtZW50IG91dCBvZiB0aGUgY29udHJhY3Rpb24gdGFibGUKKyAgICAgKiBAcGFyYW0gdGFibGUgY29udHJhY3Rpb24gdGFibGUKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IHRvIHRoZSBlbGVtZW50IGluIHRoZSBjb250cmFjdGlvbiB0YWJsZQorICAgICAqIEByZXR1cm4gYmFzaWMgY29udHJhY3Rpb24gZWxlbWVudCBhdCBvZmZzZXQgaW4gdGhlIGNvbnRyYWN0aW9uIHRhYmxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmFzaWNDb250cmFjdGlvblRhYmxlIGdldEJhc2ljQ29udHJhY3Rpb25UYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJhY3Rpb25UYWJsZSB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCkgCisgICAgeworICAgIAlvZmZzZXQgJj0gMHhGRkZGRkY7CisgICAgCWlmIChvZmZzZXQgPT0gMHhGRkZGRkYpIHsKKyAgICAJCXJldHVybiBudWxsOworICAgIAl9CisJICAgIHJldHVybiAoQmFzaWNDb250cmFjdGlvblRhYmxlKXRhYmxlLm1fZWxlbWVudHNfLmdldChvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDaGFuZ2VzIHRoZSBjb250cmFjdGlvbiBlbGVtZW50CisgICAgICogQHBhcmFtIHRhYmxlIGNvbnRyYWN0aW9uIHRhYmxlCisgICAgICogQHBhcmFtIGVsZW1lbnQgb2Zmc2V0IHRvIHRoZSBlbGVtZW50IGluIHRoZSBjb250cmFjdGlvbiB0YWJsZQorICAgICAqIEBwYXJhbSBjb2RlUG9pbnQgY29kZXBvaW50IAorICAgICAqIEBwYXJhbSBuZXdDRSBuZXcgY29sbGF0aW9uIGVsZW1lbnQKKyAgICAgKiBAcmV0dXJuIGJhc2ljIGNvbnRyYWN0aW9uIGVsZW1lbnQgYXQgb2Zmc2V0IGluIHRoZSBjb250cmFjdGlvbiB0YWJsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBjaGFuZ2VDb250cmFjdGlvbihDb250cmFjdGlvblRhYmxlIHRhYmxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVsZW1lbnQsIGNoYXIgY29kZVBvaW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5ld0NFKSAKKyAgICB7CisJICAgIEJhc2ljQ29udHJhY3Rpb25UYWJsZSB0YmwgPSBnZXRCYXNpY0NvbnRyYWN0aW9uVGFibGUodGFibGUsIGVsZW1lbnQpOwkKKwkgICAgaWYgKHRibCA9PSBudWxsKSB7CisJICAgICAgICByZXR1cm4gMDsKKwkgICAgfQorCSAgICBpbnQgcG9zaXRpb24gPSAwOworCSAgICB3aGlsZSAoY29kZVBvaW50ID4gdGJsLm1fY29kZVBvaW50c18uY2hhckF0KHBvc2l0aW9uKSkgeworCSAgICAgICAgcG9zaXRpb24gKys7CisJICAgICAgICBpZiAocG9zaXRpb24gPiB0YmwubV9jb2RlUG9pbnRzXy5sZW5ndGgoKSkgeworCSAgICAgICAgICAgIHJldHVybiBDRV9OT1RfRk9VTkRfOworCSAgICAgICAgfQorCSAgICB9CisJICAgIGlmIChjb2RlUG9pbnQgPT0gdGJsLm1fY29kZVBvaW50c18uY2hhckF0KHBvc2l0aW9uKSkgeworCSAgICAgICAgdGJsLm1fQ0VzXy5zZXQocG9zaXRpb24sIG5ldyBJbnRlZ2VyKG5ld0NFKSk7CisJICAgICAgICByZXR1cm4gZWxlbWVudCAmIDB4RkZGRkZGOworCSAgICB9IAorCSAgICBlbHNlIHsKKwkgICAgICAgIHJldHVybiBDRV9OT1RfRk9VTkRfOworCSAgICB9CisJfQorCQorCS8qKiAKKwkgKiBTZXRzIGEgcGFydCBvZiBjb250cmFjdGlvbiBzZXF1ZW5jZSBpbiB0YWJsZS4gSWYgZWxlbWVudCBpcyBub24gCisJICogZXhpc3RhbnQsIGl0IGNyZWF0ZXMgb24uIFJldHVybnMgZWxlbWVudCBoYW5kbGUuCisJICogQHBhcmFtIHRhYmxlIGNvbnRyYWN0aW9uIHRhYmxlCisJICogQHBhcmFtIGVsZW1lbnQgb2Zmc2V0IHRvIHRoZSBjb250cmFjdGlvbiB0YWJsZQorCSAqIEBwYXJhbSBvZmZzZXQKKwkgKiBAcGFyYW0gY29kZVBvaW50IGNvbnRyYWN0aW9uIGNoYXJhY3RlcgorCSAqIEBwYXJhbSB2YWx1ZSBjZSB2YWx1ZQorCSAqIEByZXR1cm4gbmV3IGNvbnRyYWN0aW9uIGNlCisJICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IHNldENvbnRyYWN0aW9uKENvbnRyYWN0aW9uVGFibGUgdGFibGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZWxlbWVudCwgaW50IG9mZnNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29kZVBvaW50LCBpbnQgdmFsdWUpIAorICAgIHsKKyAgICAJZWxlbWVudCAmPSAweEZGRkZGRjsKKwkgICAgQmFzaWNDb250cmFjdGlvblRhYmxlIHRibCA9IGdldEJhc2ljQ29udHJhY3Rpb25UYWJsZSh0YWJsZSwgZWxlbWVudCk7CQorCSAgICBpZiAodGJsID09IG51bGwpIHsKKwkgICAgICAgIHRibCA9IGFkZEFDb250cmFjdGlvbkVsZW1lbnQodGFibGUpOworCSAgICAgICAgZWxlbWVudCA9IHRhYmxlLm1fZWxlbWVudHNfLnNpemUoKSAtIDE7CisJICAgIH0KKwkKKwkgICAgdGJsLm1fQ0VzXy5zZXQob2Zmc2V0LCBuZXcgSW50ZWdlcih2YWx1ZSkpOworCSAgICB0YmwubV9jb2RlUG9pbnRzXy5zZXRDaGFyQXQob2Zmc2V0LCBjb2RlUG9pbnQpOworCSAgICByZXR1cm4gY29uc3RydWN0U3BlY2lhbENFKHRhYmxlLm1fY3VycmVudFRhZ18sIGVsZW1lbnQpOworCX0KKwkKKwkvKiogCisJICogSW5zZXJ0cyBhIHBhcnQgb2YgY29udHJhY3Rpb24gc2VxdWVuY2UgaW4gdGFibGUuIFNlcXVlbmNlcyBiZWhpbmQgdGhlIAorCSAqIG9mZnNldCBhcmUgbW92ZWQgYmFjay4gSWYgZWxlbWVudCBpcyBub24gZXhpc3RlbnQsIGl0IGNyZWF0ZXMgb24uIAorCSAqIEBwYXJhbSB0YWJsZSBjb250cmFjdGlvbgorCSAqIEBwYXJhbSBlbGVtZW50IG9mZnNldCB0byB0aGUgdGFibGUgY29udHJhY3Rpb24KKwkgKiBAcGFyYW0gY29kZVBvaW50IGNvZGUgcG9pbnQKKwkgKiBAcGFyYW0gdmFsdWUgY29sbGF0aW9uIGVsZW1lbnQgdmFsdWUKKwkgKiBAcmV0dXJuIGNvbnRyYWN0aW9uIGNvbGxhdGlvbiBlbGVtZW50CisJICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGluc2VydENvbnRyYWN0aW9uKENvbnRyYWN0aW9uVGFibGUgdGFibGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZWxlbWVudCwgY2hhciBjb2RlUG9pbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpIAorICAgIHsKKwkgICAgZWxlbWVudCAmPSAweEZGRkZGRjsKKwkgICAgQmFzaWNDb250cmFjdGlvblRhYmxlIHRibCA9IGdldEJhc2ljQ29udHJhY3Rpb25UYWJsZSh0YWJsZSwgZWxlbWVudCk7CisJICAgIGlmICh0YmwgPT0gbnVsbCkgeworCSAgICAgICAgdGJsID0gYWRkQUNvbnRyYWN0aW9uRWxlbWVudCh0YWJsZSk7CisJICAgICAgICBlbGVtZW50ID0gdGFibGUubV9lbGVtZW50c18uc2l6ZSgpIC0gMTsKKwkgICAgfQorCQorCSAgICBpbnQgb2Zmc2V0ID0gMDsKKwkgICAgd2hpbGUgKHRibC5tX2NvZGVQb2ludHNfLmNoYXJBdChvZmZzZXQpIDwgY29kZVBvaW50IAorCSAgICAgICAgICAgJiYgb2Zmc2V0IDwgdGJsLm1fY29kZVBvaW50c18ubGVuZ3RoKCkpIHsKKwkgICAgICAgIG9mZnNldCArKzsKKwkgICAgfQorCQorCSAgICB0YmwubV9DRXNfLmluc2VydEVsZW1lbnRBdChuZXcgSW50ZWdlcih2YWx1ZSksIG9mZnNldCk7CisJICAgIHRibC5tX2NvZGVQb2ludHNfLmluc2VydChvZmZzZXQsIGNvZGVQb2ludCk7CisJCisJICAgIHJldHVybiBjb25zdHJ1Y3RTcGVjaWFsQ0UodGFibGUubV9jdXJyZW50VGFnXywgZWxlbWVudCk7CisJfQorCQorCS8qKgorCSAqIEZpbmFsaXplIGFkZGl0aW9uCisJICogQHBhcmFtIHQgYnVpbGQgdGFibGUKKwkgKiBAcGFyYW0gZWxlbWVudCB0byBhZGQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgZmluYWxpemVBZGRpdGlvbihCdWlsZFRhYmxlIHQsIEVsZW1lbnRzIGVsZW1lbnQpIAorCXsKKwkJaW50IENFID0gQ0VfTk9UX0ZPVU5EXzsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgYWRkIGEgY29tcGxldGVseSBpZ25vcmFibGUgZWxlbWVudCB0byB0aGUgIAorICAgICAgICAvLyB1bnNhZmUgdGFibGUsIHNvIHRoYXQgYmFja3dhcmQgaXRlcmF0aW9uIHdpbGwgc2tpcCAKKyAgICAgICAgLy8gb3ZlciBpdCB3aGVuIHRyZWF0aW5nIGNvbnRyYWN0aW9ucy4gCisgICAgICAgIGlmIChlbGVtZW50Lm1fbWFwQ0VfID09IDApIHsgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnQubV9jUG9pbnRzXy5sZW5ndGgoKTsgaSArKykgeyAKKyAgICAgICAgICAgICAgICBjaGFyIGNoID0gZWxlbWVudC5tX2NQb2ludHNfLmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICBpZiAoIVVURjE2LmlzVHJhaWxTdXJyb2dhdGUoY2gpKSB7IAorICAgICAgICAgICAgICAgICAgICB1bnNhZmVDUFNldCh0Lm1fdW5zYWZlQ1BfLCBjaCk7IAorICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9IAorICAgICAgICB9IAorCisJCWlmIChlbGVtZW50Lm1fY1BvaW50c18ubGVuZ3RoKCkgLSBlbGVtZW50Lm1fY1BvaW50c09mZnNldF8gPiAxKSB7IAorCQkgICAgLy8gd2UncmUgYWRkaW5nIGEgY29udHJhY3Rpb24KKwkJICAgIGludCBjcCA9IFVURjE2LmNoYXJBdChlbGVtZW50Lm1fY1BvaW50c18sIGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0Xyk7CisJCSAgICBDRSA9IHQubV9tYXBwaW5nXy5nZXRWYWx1ZShjcCk7CisJCSAgICBDRSA9IGFkZENvbnRyYWN0aW9uKHQsIENFLCBlbGVtZW50KTsKKwkJfSAKKwkJZWxzZSB7IAorCQkgICAgLy8gZWFzeSBjYXNlCisJCSAgICBDRSA9IHQubV9tYXBwaW5nXy5nZXRWYWx1ZShlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfKSk7CisJCQorCQkgICAgaWYgKENFICE9IENFX05PVF9GT1VORF8pIHsKKwkJICAgICAgICBpZihpc0NvbnRyYWN0aW9uVGFibGVFbGVtZW50KENFKSkgeyAKKwkJICAgICAgICAgICAgLy8gYWRkaW5nIGEgbm9uIGNvbnRyYWN0aW9uIGVsZW1lbnQgKHRoYWksIGV4cGFuc2lvbiwgCisJCSAgICAgICAgICAgIC8vIHNpbmdsZSkgdG8gYWxyZWFkeSBleGlzdGluZyBjb250cmFjdGlvbiAKKwkJCSAgICAgICAgaWYgKCFpc1ByZWZpeChlbGVtZW50Lm1fbWFwQ0VfKSkgeyAKKwkJCSAgICAgICAgCS8vIHdlIGNhbm5vdCByZWVudGVyIHByZWZpeCBlbGVtZW50cyAtIGFzIHdlIGFyZSBnb2luZyAKKwkJCSAgICAgICAgCS8vIHRvIGNyZWF0ZSBhIGRlYWQgbG9vcAorCQkJICAgICAgICAgICAgLy8gT25seSBleHBhbnNpb25zIGFuZCByZWd1bGFyIENFcyBjYW4gZ28gaGVyZS4uLiAKKwkJCSAgICAgICAgICAgIC8vIENvbnRyYWN0aW9ucyB3aWxsIG5ldmVyIGhhcHBlbiBpbiB0aGlzIHBsYWNlCisJCQkgICAgICAgICAgICBzZXRDb250cmFjdGlvbih0Lm1fY29udHJhY3Rpb25zXywgQ0UsIDAsIChjaGFyKTAsIAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX21hcENFXyk7CisJCQkgICAgICAgICAgICAvLyBUaGlzIGxvb3AgaGFzIHRvIGNoYW5nZSB0aGUgQ0UgYXQgdGhlIGVuZCBvZiAKKwkJCSAgICAgICAgICAgIC8vIGNvbnRyYWN0aW9uIFJFRE8hCisJCQkgICAgICAgICAgICBjaGFuZ2VMYXN0Q0UodC5tX2NvbnRyYWN0aW9uc18sIENFLCBlbGVtZW50Lm1fbWFwQ0VfKTsKKwkJCSAgICAgICAgfQorCQkgICAgICAgIH0gCisJCSAgICAgICAgZWxzZSB7CisJCSAgICAgICAgICAgIHQubV9tYXBwaW5nXy5zZXRWYWx1ZShlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1fY1BvaW50c09mZnNldF8pLCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubV9tYXBDRV8pOworCQkgICAgICAgIH0KKwkJICAgIH0gCisJCSAgICBlbHNlIHsKKwkJICAgICAgICB0Lm1fbWFwcGluZ18uc2V0VmFsdWUoZWxlbWVudC5tX2NQb2ludHNfLmNoYXJBdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubV9tYXBDRV8pOworCQkgICAgfQorCQl9CisJCXJldHVybiBDRTsKKwl9CisJCisJLyoqIAorCSAqIE5vdGUgcmVnYXJkaW5nIHN1cnJvZ2F0ZSBoYW5kbGluZzogV2UgYXJlIGludGVyZXN0ZWQgb25seSBpbiB0aGUgc2luZ2xlCisJICogb3IgbGVhZGluZyBzdXJyb2dhdGVzIGluIGEgY29udHJhY3Rpb24uIElmIGEgc3Vycm9nYXRlIGlzIHNvbWV3aGVyZSBlbHNlCisJICogaW4gdGhlIGNvbnRyYWN0aW9uLCBpdCBpcyBnb2luZyB0byBiZSBoYW5kbGVkIGFzIGEgcGFpciBvZiBjb2RlIHVuaXRzLAorCSAqIGFzIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSBwZXJmb3JtYW5jZSBBTkQgaGFuZGxpbmcgc3Vycm9nYXRlcyBzcGVjaWFsbHkKKwkgKiB3b3VsZCBjb21wbGljYXRlIGNvZGUgd2F5IHRvbyBtdWNoLgorCSAqLworCXByaXZhdGUgc3RhdGljIGludCBhZGRDb250cmFjdGlvbihCdWlsZFRhYmxlIHQsIGludCBDRSwgRWxlbWVudHMgZWxlbWVudCkgCisgICAgeworCSAgICBDb250cmFjdGlvblRhYmxlIGNvbnRyYWN0aW9ucyA9IHQubV9jb250cmFjdGlvbnNfOworCSAgICBjb250cmFjdGlvbnMubV9jdXJyZW50VGFnXyA9IENFX0NPTlRSQUNUSU9OX1RBR187CisJCisJICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gY2hlY2sgaWYgY29udHJhY3Rpb25zIHN0YXJ0cyB3aXRoIGEgc3Vycm9nYXRlCisJICAgIGludCBjcCA9IFVURjE2LmNoYXJBdChlbGVtZW50Lm1fY1BvaW50c18sIDApOworCSAgICBpbnQgY3BzaXplID0gMTsKKwkgICAgaWYgKFVDaGFyYWN0ZXIuaXNTdXBwbGVtZW50YXJ5KGNwKSkgeworCSAgICAJY3BzaXplID0gMjsKKwkgICAgfQorCSAgICBpZiAoY3BzaXplIDwgZWxlbWVudC5tX2NQb2ludHNfLmxlbmd0aCgpKSB7IAorCSAgICAJLy8gVGhpcyBpcyBhIHJlYWwgY29udHJhY3Rpb24sIGlmIHRoZXJlIGFyZSBvdGhlciBjaGFyYWN0ZXJzIGFmdGVyIAorCSAgICAJLy8gdGhlIGZpcnN0CisJICAgIAlpbnQgc2l6ZSA9IGVsZW1lbnQubV9jUG9pbnRzXy5sZW5ndGgoKSAtIGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XzsKKwkgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgc2l6ZTsgaiArKykgeyAgIAorCSAgICAgICAgICAgIC8vIEZpcnN0IGFkZCBjb250cmFjdGlvbiBjaGFycyB0byB1bnNhZmUgQ1AgaGFzaCB0YWJsZSAKKwkgICAgICAgICAgICAvLyBVbmxlc3MgaXQgaXMgYSB0cmFpbCBzdXJyb2dhdGUsIHdoaWNoIGlzIGhhbmRsZWQgCisJICAgICAgICAgICAgLy8gYWxnb3JpdG1pY2FsbHkgYW5kIHNob3VsZG4ndCB0YWtlIHVwIHNwYWNlIGluIHRoZSB0YWJsZS4KKwkgICAgICAgICAgICBpZiAoIVVURjE2LmlzVHJhaWxTdXJyb2dhdGUoZWxlbWVudC5tX2NQb2ludHNfLmNoYXJBdCgKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XyArIGopKSkgeworCSAgICAgICAgICAgICAgICAgdW5zYWZlQ1BTZXQodC5tX3Vuc2FmZUNQXywgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1fY1BvaW50c09mZnNldF8gKyBqKSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgLy8gQWRkIHRoZSBsYXN0IGNoYXIgb2YgdGhlIGNvbnRyYWN0aW9uIHRvIHRoZSBjb250cmFjdGlvbi1lbmQgCisJICAgICAgICAvLyBoYXNoIHRhYmxlLiB1bmxlc3MgaXQgaXMgYSB0cmFpbCBzdXJyb2dhdGUsIHdoaWNoIGlzIGhhbmRsZWQgCisJICAgICAgICAvLyBhbGdvcml0aG1pY2FsbHkgYW5kIHNob3VsZG4ndCBiZSBpbiB0aGUgdGFibGUKKwkgICAgICAgIGlmICghVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShlbGVtZW50Lm1fY1BvaW50c18uY2hhckF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1fY1BvaW50c18ubGVuZ3RoKCkgLTEpKSkgeworCSAgICAgICAgICAgIENvbnRyRW5kQ1BTZXQodC5tX2NvbnRyRW5kQ1BfLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubV9jUG9pbnRzXy5jaGFyQXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX2NQb2ludHNfLmxlbmd0aCgpIC0xKSk7CisJICAgICAgICB9CisJCisJICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IEphbW9zIGluIHRoZSBjb250cmFjdGlvbiwgd2Ugc2hvdWxkIHR1cm4gb24gCisJICAgICAgICAvLyBzcGVjaWFsIHByb2Nlc3NpbmcgZm9yIEphbW9zCisJICAgICAgICBpZiAoaXNKYW1vKGVsZW1lbnQubV9jUG9pbnRzXy5jaGFyQXQoZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfKSkpIHsKKwkgICAgICAgICAgICB0Lm1fY29sbGF0b3JfLm1faXNKYW1vU3BlY2lhbF8gPSB0cnVlOworCSAgICAgICAgfQorCSAgICAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBpdCAKKwkgICAgICAgIC8vIHdlIGNvdWxkIGFyZWFkeSBoYXZlIHNvbWV0aGluZyBpbiB0YWJsZSAtIG9yIHdlIG1pZ2h0IG5vdCAKKwkgICAgICAgIGVsZW1lbnQubV9jUG9pbnRzT2Zmc2V0XyArPSBjcHNpemU7CisJICAgICAgICBpZiAoIWlzQ29udHJhY3Rpb24oQ0UpKSB7IAorCQkgICAgICAgIC8vIGlmIGl0IHdhc24ndCBjb250cmFjdGlvbiwgd2Ugd291bGRuJ3QgZW5kIHVwIGhlcmUKKwkJICAgICAgICBpbnQgZmlyc3RDb250cmFjdGlvbk9mZnNldCA9IGFkZENvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVFJBQ1RJT05fVEFCTEVfTkVXX0VMRU1FTlRfLCAoY2hhcikwLCBDRSk7CisJCSAgICAgICAgaW50IG5ld0NFID0gcHJvY2Vzc0NvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZWxlbWVudCwgCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFX05PVF9GT1VORF8pOworCQkgICAgICAgIGFkZENvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZmlyc3RDb250cmFjdGlvbk9mZnNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubV9jUG9pbnRzXy5jaGFyQXQoZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q0UpOworCQkgICAgICAgIGFkZENvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZmlyc3RDb250cmFjdGlvbk9mZnNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpMHhGRkZGLCBDRSk7CisJCSAgICAgICAgQ0UgPSBjb25zdHJ1Y3RTcGVjaWFsQ0UoQ0VfQ09OVFJBQ1RJT05fVEFHXywgCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cmFjdGlvbk9mZnNldCk7CisJCSAgICB9IAorCQkgICAgZWxzZSB7IAorCQkgICAgICAgIC8vIHdlIGFyZSBhZGRpbmcgdG8gZXhpc3RpbmcgY29udHJhY3Rpb24gCisJCSAgICAgICAgLy8gdGhlcmUgd2VyZSBhbHJlYWR5IHNvbWUgZWxlbWVudHMgaW4gdGhlIHRhYmxlLCBzbyB3ZSBuZWVkIHRvIAorCQkgICAgICAgIC8vIGFkZCBhIG5ldyBjb250cmFjdGlvbgorCQkgICAgICAgIC8vIFR3byB0aGluZ3MgY2FuIGhhcHBlbiBoZXJlOiBlaXRoZXIgdGhlIGNvZGVwb2ludCBpcyBhbHJlYWR5IAorCQkgICAgICAgIC8vIGluIHRoZSB0YWJsZSwgb3IgaXQgaXMgbm90IAorCQkgICAgICAgIGludCBwb3NpdGlvbiA9IGZpbmRDUChjb250cmFjdGlvbnMsIENFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX2NQb2ludHNfLmNoYXJBdChlbGVtZW50Lm1fY1BvaW50c09mZnNldF8pKTsKKwkJICAgICAgICBpZiAocG9zaXRpb24gPiAwKSB7ICAgICAgIAorCQkgICAgICAgICAgICAvLyBpZiBpdCBpcyB3ZSBqdXN0IGNvbnRpbnVlIGRvd24gdGhlIGNoYWluCisJCSAgICAgICAgICAgIGludCBlQ0UgPSBnZXRDRShjb250cmFjdGlvbnMsIENFLCBwb3NpdGlvbik7CisJCSAgICAgICAgICAgIGludCBuZXdDRSA9IHByb2Nlc3NDb250cmFjdGlvbihjb250cmFjdGlvbnMsIGVsZW1lbnQsIGVDRSk7CisJCSAgICAgICAgICAgIHNldENvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgQ0UsIHBvc2l0aW9uLCAKKwkJICAgICAgICAgICAgICAgICAgZWxlbWVudC5tX2NQb2ludHNfLmNoYXJBdChlbGVtZW50Lm1fY1BvaW50c09mZnNldF8pLCAKKwkJICAgICAgICAgICAgICAgICAgbmV3Q0UpOworCQkgICAgICAgIH0gCisJCSAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgCisJCSAgICAgICAgICAgIC8vIGlmIGl0IGlzbid0LCB3ZSB3aWxsIGhhdmUgdG8gY3JlYXRlIGEgbmV3IHNlcXVlbmNlIAorCQkgICAgICAgICAgICBpbnQgbmV3Q0UgPSBwcm9jZXNzQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBlbGVtZW50LCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFX05PVF9GT1VORF8pOworCQkgICAgICAgICAgICBpbnNlcnRDb250cmFjdGlvbihjb250cmFjdGlvbnMsIENFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubV9jUG9pbnRzXy5jaGFyQXQoZWxlbWVudC5tX2NQb2ludHNPZmZzZXRfKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NFKTsKKwkJICAgICAgICB9CisJCSAgICB9CisJCSAgICBlbGVtZW50Lm1fY1BvaW50c09mZnNldF8gLT0gY3BzaXplOworCSAgICAgICAgdC5tX21hcHBpbmdfLnNldFZhbHVlKGNwLCBDRSk7CisJICAgIH0gCisJICAgIGVsc2UgaWYgKCFpc0NvbnRyYWN0aW9uKENFKSkgeyAKKwkgICAgICAgIC8vIHRoaXMgaXMganVzdCBhIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIG5vIGNvbnRyYWN0aW9uIAorCSAgICAgICAgdC5tX21hcHBpbmdfLnNldFZhbHVlKGNwLCBlbGVtZW50Lm1fbWFwQ0VfKTsKKwkgICAgfSAKKwkgICAgZWxzZSB7IAorCSAgICAgICAgLy8gZmlsbCBvdXQgdGhlIGZpcnN0IHN0YWdlIG9mIHRoZSBjb250cmFjdGlvbiB3aXRoIHRoZSBzdXJyb2dhdGUgCisJICAgICAgICAvLyBDRSAKKwkgICAgICAgIGNoYW5nZUNvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgQ0UsIChjaGFyKTAsIGVsZW1lbnQubV9tYXBDRV8pOworCSAgICAgICAgY2hhbmdlQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBDRSwgKGNoYXIpMHhGRkZGLCBlbGVtZW50Lm1fbWFwQ0VfKTsKKwkgICAgfQorCSAgICByZXR1cm4gQ0U7CisJfQorCQorCS8qKiAKKwkgKiB0aGlzIGlzIGZvciBhZGRpbmcgbm9uIGNvbnRyYWN0aW9ucyAKKwkgKiBAcGFyYW0gdGFibGUgY29udHJhY3Rpb24gdGFibGUKKwkgKiBAcGFyYW0gZWxlbWVudCBvZmZzZXQgdG8gdGhlIGNvbnRyYWN0aW9uIHRhYmxlCisJICogQHBhcmFtIHZhbHVlIGNvbGxhdGlvbiBlbGVtZW50IHZhbHVlCisJICogQHJldHVybiBuZXcgY29sbGF0aW9uIGVsZW1lbnQgCisJICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGNoYW5nZUxhc3RDRShDb250cmFjdGlvblRhYmxlIHRhYmxlLCBpbnQgZWxlbWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpIAorICAgIHsKKwkgICAgQmFzaWNDb250cmFjdGlvblRhYmxlIHRibCA9IGdldEJhc2ljQ29udHJhY3Rpb25UYWJsZSh0YWJsZSwgZWxlbWVudCk7CisJICAgIGlmICh0YmwgPT0gbnVsbCkgeworCSAgICAgICAgcmV0dXJuIDA7CisJICAgIH0KKwkKKwkgICAgdGJsLm1fQ0VzXy5zZXQodGJsLm1fQ0VzXy5zaXplKCkgLSAxLCBuZXcgSW50ZWdlcih2YWx1ZSkpOworCSAgICByZXR1cm4gY29uc3RydWN0U3BlY2lhbENFKHRhYmxlLm1fY3VycmVudFRhZ18sIGVsZW1lbnQgJiAweEZGRkZGRik7CisJfQorICAgIAorICAgIC8qKgorICAgICAqIEdpdmVuIGEgc2V0IG9mIHJhbmdlcyBjYWxjdWxhdGVkIGJ5IGFsbG9jV2VpZ2h0cygpLCBpdGVyYXRlIHRocm91Z2ggdGhlIAorICAgICAqIHdlaWdodHMuIFNldHMgdGhlIG5leHQgd2VpZ2h0IGluIGNlZ2VuZXJhdG9yLm1fY3VycmVudF8uCisgICAgICogQHBhcmFtIGNlZ2VuZXJhdG9yIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJhbmdlcyB3ZWlnaHQgcmFuZ2UgYXJyYXkgYW5kCisgICAgICogICAgICAgIGl0cyByYW5nZUNvdW50CisgICAgICogQHJldHVybiB0aGUgbmV4dCB3ZWlnaHQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgbmV4dFdlaWdodChDRUdlbmVyYXRvciBjZWdlbmVyYXRvcikgCisgICAgeworICAgICAgICBpZiAoY2VnZW5lcmF0b3IubV9yYW5nZXNMZW5ndGhfID4gMCkgeworICAgICAgICAgICAgLy8gZ2V0IG1heEJ5dGUgZnJvbSB0aGUgLmNvdW50IGZpZWxkCisgICAgICAgICAgICBpbnQgbWF4Qnl0ZSA9IGNlZ2VuZXJhdG9yLm1fcmFuZ2VzX1swXS5tX2NvdW50XzsKKyAgICAgICAgICAgIC8vIGdldCB0aGUgbmV4dCB3ZWlnaHQgCisgICAgICAgICAgICBpbnQgd2VpZ2h0ID0gY2VnZW5lcmF0b3IubV9yYW5nZXNfWzBdLm1fc3RhcnRfOworICAgICAgICAgICAgaWYgKHdlaWdodCA9PSBjZWdlbmVyYXRvci5tX3Jhbmdlc19bMF0ubV9lbmRfKSB7CisgICAgICAgICAgICAgICAgLy8gdGhpcyByYW5nZSBpcyBmaW5pc2hlZCwgcmVtb3ZlIGl0IGFuZCBtb3ZlIHRoZSBmb2xsb3dpbmcgCisgICAgICAgICAgICAgICAgLy8gb25lcyB1cCAKKyAgICAgICAgICAgICAgICBjZWdlbmVyYXRvci5tX3Jhbmdlc0xlbmd0aF8gLS07CisgICAgICAgICAgICAgICAgaWYgKGNlZ2VuZXJhdG9yLm1fcmFuZ2VzTGVuZ3RoXyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShjZWdlbmVyYXRvci5tX3Jhbmdlc18sIDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlZ2VuZXJhdG9yLm1fcmFuZ2VzXywgMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VnZW5lcmF0b3IubV9yYW5nZXNMZW5ndGhfKTsKKyAgICAgICAgICAgICAgICAgICAgY2VnZW5lcmF0b3IubV9yYW5nZXNfWzBdLm1fY291bnRfID0gbWF4Qnl0ZTsgCisgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgbWF4Qnl0ZSBpbiByYW5nZXNbMF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRoZSB3ZWlnaHQgZm9yIHRoZSBuZXh0IHZhbHVlCisgICAgICAgICAgICAgICAgY2VnZW5lcmF0b3IubV9yYW5nZXNfWzBdLm1fc3RhcnRfIAorICAgICAgICAgICAgICAgICAgICAgID0gaW5jV2VpZ2h0KHdlaWdodCwgY2VnZW5lcmF0b3IubV9yYW5nZXNfWzBdLm1fbGVuZ3RoMl8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJ5dGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHdlaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEluY3JlbWVudCB0aGUgY29sbGF0aW9uIHdlaWdodAorICAgICAqIEBwYXJhbSB3ZWlnaHQgdG8gaW5jcmVtZW50CisgICAgICogQHBhcmFtIGxlbmd0aAorICAgICAqIEBwYXJhbSBtYXhCeXRlCisgICAgICogQHJldHVybiBuZXcgaW5jcmVtZW50ZWQgd2VpZ2h0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGluY1dlaWdodChpbnQgd2VpZ2h0LCBpbnQgbGVuZ3RoLCBpbnQgbWF4Qnl0ZSkgCisgICAgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaW50IGIgPSBnZXRXZWlnaHRCeXRlKHdlaWdodCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChiIDwgbWF4Qnl0ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzZXRXZWlnaHRCeXRlKHdlaWdodCwgbGVuZ3RoLCBiICsgMSk7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gcm9sbCBvdmVyLCBzZXQgdGhpcyBieXRlIHRvIEJZVEVfRklSU1RfVEFJTE9SRURfIGFuZCAKKyAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnQgdGhlIHByZXZpb3VzIG9uZQorICAgICAgICAgICAgICAgIHdlaWdodCA9IHNldFdlaWdodEJ5dGUod2VpZ2h0LCBsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQllURV9GSVJTVF9UQUlMT1JFRF8pOworICAgICAgICAgICAgICAgIC0tIGxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB3ZWlnaHQgYnl0ZQorICAgICAqIEBwYXJhbSB3ZWlnaHQKKyAgICAgKiBAcGFyYW0gaW5kZXgKKyAgICAgKiBAcmV0dXJuIGJ5dGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZ2V0V2VpZ2h0Qnl0ZShpbnQgd2VpZ2h0LCBpbnQgaW5kZXgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuICh3ZWlnaHQgPj4gKCg0IC0gaW5kZXgpIDw8IDMpKSAmIDB4ZmY7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgd2VpZ2h0IGJ5dGUgaW4gdGFibGUKKyAgICAgKiBAcGFyYW0gd2VpZ2h0IAorICAgICAqIEBwYXJhbSBpbmRleAorICAgICAqIEBwYXJhbSBiIGJ5dGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgc2V0V2VpZ2h0Qnl0ZShpbnQgd2VpZ2h0LCBpbnQgaW5kZXgsIGludCBiKSAKKyAgICB7CisgICAgICAgIGluZGV4IDw8PSAzOworICAgICAgICAvLyAweGZmZmZmZmZmIGV4Y2VwdCBhIDAwICJob2xlIiBmb3IgdGhlIGluZGV4LXRoIGJ5dGUKKyAgICAgICAgaW50IG1hc2sgPSAweGZmZmZmZmZmID4+PiBpbmRleDsKKyAgICAgICAgaW5kZXggPSAzMiAtIGluZGV4OworICAgICAgICBtYXNrIHw9IDB4ZmZmZmZmMDAgPDwgaW5kZXg7CisgICAgICAgIHJldHVybiAod2VpZ2h0ICYgbWFzaykgfCAoYiA8PCBpbmRleCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENhbGwgZ2V0V2VpZ2h0UmFuZ2VzIGFuZCB0aGVuIGRldGVybWluZSBoZXVyaXN0aWNhbGx5IHdoaWNoIHJhbmdlcyB0byAKKyAgICAgKiB1c2UgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIHdlaWdodHMgYmV0d2VlbiAoZXhjbHVkaW5nKSB0d28gbGltaXRzCisgICAgICogQHBhcmFtIGxvd2VybGltaXQKKyAgICAgKiBAcGFyYW0gdXBwZXJsaW1pdAorICAgICAqIEBwYXJhbSBuCisgICAgICogQHBhcmFtIG1heEJ5dGUKKyAgICAgKiBAcGFyYW0gcmFuZ2VzCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHByaXZhdGUgaW50IGFsbG9jYXRlV2VpZ2h0cyhpbnQgbG93ZXJMaW1pdCwgaW50IHVwcGVyTGltaXQsIGludCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4Qnl0ZSwgV2VpZ2h0UmFuZ2UgcmFuZ2VzW10pIAorICAgIHsKKyAgICAgICAgLy8gbnVtYmVyIG9mIHVzYWJsZSBieXRlIHZhbHVlcyAzLi5tYXhCeXRlCisgICAgICAgIGludCBjb3VudEJ5dGVzID0gbWF4Qnl0ZSAtIFJ1bGVCYXNlZENvbGxhdG9yLkJZVEVfRklSU1RfVEFJTE9SRURfICsgMTsKKyAgICAgICAgLy8gWzBdIHVudXNlZCwgWzVdIHRvIG1ha2UgaW5kZXggY2hlY2tzIHVubmVjZXNzYXJ5LCBtX3V0aWxDb3VudEJ1ZmZlcl8KKyAgICAgICAgLy8gY291bnRCeXRlcyB0byB0aGUgcG93ZXIgb2YgaW5kZXgsIG1fdXRpbExvbmdCdWZmZXJfIGZvciB1bnNpZ25lZG5lc3MKKyAgICAgICAgLy8gZ2NjIHJlcXVpcmVzIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIAorICAgICAgICBtX3V0aWxMb25nQnVmZmVyX1swXSA9IDE7CisgICAgICAgIG1fdXRpbExvbmdCdWZmZXJfWzFdID0gY291bnRCeXRlczsKKyAgICAgICAgbV91dGlsTG9uZ0J1ZmZlcl9bMl0gPSBtX3V0aWxMb25nQnVmZmVyX1sxXSAqIGNvdW50Qnl0ZXM7CisgICAgICAgIG1fdXRpbExvbmdCdWZmZXJfWzNdID0gbV91dGlsTG9uZ0J1ZmZlcl9bMl0gKiBjb3VudEJ5dGVzOworICAgICAgICBtX3V0aWxMb25nQnVmZmVyX1s0XSA9IG1fdXRpbExvbmdCdWZmZXJfWzNdICogY291bnRCeXRlczsKKyAgICAgICAgaW50IHJhbmdlQ291bnQgPSBnZXRXZWlnaHRSYW5nZXMobG93ZXJMaW1pdCwgdXBwZXJMaW1pdCwgbWF4Qnl0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Qnl0ZXMsIHJhbmdlcyk7CisgICAgICAgIGlmIChyYW5nZUNvdW50IDw9IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIC8vIHdoYXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdlaWdodHMgd2l0aCB0aGVzZSByYW5nZXM/CisgICAgICAgIGxvbmcgbWF4Q291bnQgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhbmdlQ291bnQ7ICsrIGkpIHsKKyAgICAgICAgICAgIG1heENvdW50ICs9IChsb25nKXJhbmdlc1tpXS5tX2NvdW50XyAKKyAgICAgICAgICAgICAgICAgICAgICAgICogbV91dGlsTG9uZ0J1ZmZlcl9bNCAtIHJhbmdlc1tpXS5tX2xlbmd0aF9dOworICAgICAgICB9CisgICAgICAgIGlmIChtYXhDb3VudCA8IG4pIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIC8vIHNldCB0aGUgbGVuZ3RoMiBhbmQgY291bnQyIGZpZWxkcworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhbmdlQ291bnQ7ICsrIGkpIHsKKyAgICAgICAgICAgIHJhbmdlc1tpXS5tX2xlbmd0aDJfID0gcmFuZ2VzW2ldLm1fbGVuZ3RoXzsKKyAgICAgICAgICAgIHJhbmdlc1tpXS5tX2NvdW50Ml8gPSByYW5nZXNbaV0ubV9jb3VudF87CisgICAgICAgIH0KKyAgICAgICAgLy8gdHJ5IHVudGlsIHdlIGZpbmQgc3VpdGFibHkgbGFyZ2UgcmFuZ2VzCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBnZXQgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBieXRlcyBpbiBhIHJhbmdlCisgICAgICAgICAgICBpbnQgbWluTGVuZ3RoID0gcmFuZ2VzWzBdLm1fbGVuZ3RoMl87CisgICAgICAgICAgICAvLyBzdW0gdXAgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IGZpdCBpbnRvIHJhbmdlcyBvZiBlYWNoIGJ5dGUgCisgICAgICAgICAgICAvLyBsZW5ndGgKKyAgICAgICAgICAgIEFycmF5cy5maWxsKG1fdXRpbENvdW50QnVmZmVyXywgMCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhbmdlQ291bnQ7ICsrIGkpIHsKKyAgICAgICAgICAgICAgICBtX3V0aWxDb3VudEJ1ZmZlcl9bcmFuZ2VzW2ldLm1fbGVuZ3RoMl9dICs9IHJhbmdlc1tpXS5tX2NvdW50Ml87CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBub3cgdHJ5IHRvIGFsbG9jYXRlIG4gZWxlbWVudHMgaW4gdGhlIGF2YWlsYWJsZSBzaG9ydCByYW5nZXMgCisgICAgICAgICAgICBpZiAobiA8PSBtX3V0aWxDb3VudEJ1ZmZlcl9bbWluTGVuZ3RoXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbV91dGlsQ291bnRCdWZmZXJfW21pbkxlbmd0aCArIDFdKSB7CisgICAgICAgICAgICAgICAgLy8gdHJpdmlhbCBjYXNlcywgdXNlIHRoZSBmaXJzdCBmZXcgcmFuZ2VzCisgICAgICAgICAgICAgICAgbWF4Q291bnQgPSAwOworICAgICAgICAgICAgICAgIHJhbmdlQ291bnQgPSAwOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4Q291bnQgKz0gcmFuZ2VzW3JhbmdlQ291bnRdLm1fY291bnQyXzsKKyAgICAgICAgICAgICAgICAgICAgKysgcmFuZ2VDb3VudDsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChuID4gbWF4Q291bnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgaWYgKG4gPD0gcmFuZ2VzWzBdLm1fY291bnQyXyAqIGNvdW50Qnl0ZXMpIHsKKyAgICAgICAgICAgICAgICAvLyBlYXN5IGNhc2UsIGp1c3QgbWFrZSB0aGlzIG9uZSByYW5nZSBsYXJnZSBlbm91Z2ggYnkgCisgICAgICAgICAgICAgICAgLy8gbGVuZ3RoZW5pbmcgaXQgb25jZSBtb3JlLCBwb3NzaWJseSBzcGxpdCBpdAorICAgICAgICAgICAgICAgIHJhbmdlQ291bnQgPSAxOworICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBob3cgdG8gc3BsaXQgdGhlIHJhbmdlIGJldHdlZW4gbWF4TGVuZ3RoLTEgCisgICAgICAgICAgICAgICAgLy8gKGNvdW50MSkgYW5kIG1heExlbmd0aCAoY291bnQyKSAKKyAgICAgICAgICAgICAgICBsb25nIHBvd2VyXzEgCisgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fdXRpbExvbmdCdWZmZXJfW21pbkxlbmd0aCAtIHJhbmdlc1swXS5tX2xlbmd0aF9dOworICAgICAgICAgICAgICAgIGxvbmcgcG93ZXIgPSBwb3dlcl8xICogY291bnRCeXRlczsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQyID0gKGludCkoKG4gKyBwb3dlciAtIDEpIC8gcG93ZXIpOworICAgICAgICAgICAgICAgIGludCBjb3VudDEgPSByYW5nZXNbMF0ubV9jb3VudF8gLSBjb3VudDI7CisgICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHJhbmdlCisgICAgICAgICAgICAgICAgaWYgKGNvdW50MSA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoZW4gdGhlIGVudGlyZSByYW5nZSB0byBtYXhMZW5ndGggCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aGVuUmFuZ2UocmFuZ2VzLCAwLCBtYXhCeXRlLCBjb3VudEJ5dGVzKTsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyByZWFsbHkgc3BsaXQgdGhlIHJhbmdlCisgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyByYW5nZSB3aXRoIHRoZSBlbmQgYW5kIGluaXRpYWwgYW5kIGN1cnJlbnQgCisgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBvZiB0aGUgb2xkIG9uZQorICAgICAgICAgICAgICAgICAgICByYW5nZUNvdW50ID0gMjsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzWzFdLm1fZW5kXyA9IHJhbmdlc1swXS5tX2VuZF87CisgICAgICAgICAgICAgICAgICAgIHJhbmdlc1sxXS5tX2xlbmd0aF8gPSByYW5nZXNbMF0ubV9sZW5ndGhfOworICAgICAgICAgICAgICAgICAgICByYW5nZXNbMV0ubV9sZW5ndGgyXyA9IG1pbkxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBlbmQgb2YgdGhlIGZpcnN0IHJhbmdlIGFjY29yZGluZyB0byBjb3VudDEKKyAgICAgICAgICAgICAgICAgICAgaW50IGkgPSByYW5nZXNbMF0ubV9sZW5ndGhfOworICAgICAgICAgICAgICAgICAgICBpbnQgYiA9IGdldFdlaWdodEJ5dGUocmFuZ2VzWzBdLm1fc3RhcnRfLCBpKSArIGNvdW50MSAtIDE7CisgICAgICAgICAgICAgICAgICAgIC8vIHJhbmdlc1swXS5jb3VudCBhbmQgY291bnQxIG1heSBiZSA+Y291bnRCeXRlcyBmcm9tIAorICAgICAgICAgICAgICAgICAgICAvLyBtZXJnaW5nIGFkamFjZW50IHJhbmdlczsgYiA+IG1heEJ5dGUgaXMgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgaWYgKGIgPD0gbWF4Qnl0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzWzBdLm1fZW5kXyA9IHNldFdlaWdodEJ5dGUocmFuZ2VzWzBdLm1fc3RhcnRfLCBpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIpOworICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlc1swXS5tX2VuZF8gPSBzZXRXZWlnaHRCeXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY1dlaWdodChyYW5nZXNbMF0ubV9zdGFydF8sIGkgLSAxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Qnl0ZSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGIgLSBjb3VudEJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGJ5dGVzIGluIHRoZSBlbmQgd2VpZ2h0IGF0IGxlbmd0aCArIDEuLmxlbmd0aDIgCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1heEJ5dGUKKyAgICAgICAgICAgICAgICAgICAgYiA9IChtYXhCeXRlIDw8IDI0KSB8IChtYXhCeXRlIDw8IDE2KSB8IChtYXhCeXRlIDw8IDgpCisgICAgICAgICAgICAgICAgICAgICAgICB8IG1heEJ5dGU7IC8vIHRoaXMgdXNlZCB0byBiZSAweGZmZmZmZmZmIAorICAgICAgICAgICAgICAgICAgICByYW5nZXNbMF0ubV9lbmRfID0gdHJ1bmNhdGVXZWlnaHQocmFuZ2VzWzBdLm1fZW5kXywgaSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChiID4+PiAoaSA8PCAzKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChiIDw8ICgoNCAtIG1pbkxlbmd0aCkgPDwgMykpOworICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWNvbmQgcmFuZ2UgdG8gaW1tZWRpYXRlbHkgZm9sbG93IAorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBmaXJzdCBvbmUKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzWzFdLm1fc3RhcnRfID0gaW5jV2VpZ2h0KHJhbmdlc1swXS5tX2VuZF8sIG1pbkxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCeXRlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBjb3VudCB2YWx1ZXMgKGluZm9ybWF0aW9uYWwpCisgICAgICAgICAgICAgICAgICAgIHJhbmdlc1swXS5tX2NvdW50XyA9IGNvdW50MTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzWzFdLm1fY291bnRfID0gY291bnQyOworICAgIAorICAgICAgICAgICAgICAgICAgICByYW5nZXNbMF0ubV9jb3VudDJfID0gKGludCkoY291bnQxICogcG93ZXJfMSk7CisgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgKmNvdW50Qnl0ZXMgd2hlbiBsZW5ndGhlbmVkIAorICAgICAgICAgICAgICAgICAgICByYW5nZXNbMV0ubV9jb3VudDJfID0gKGludCkoY291bnQyICogcG93ZXJfMSk7IAorICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGhlbiB0aGUgc2Vjb25kIHJhbmdlIHRvIG1heExlbmd0aAorICAgICAgICAgICAgICAgICAgICBsZW5ndGhlblJhbmdlKHJhbmdlcywgMSwgbWF4Qnl0ZSwgY291bnRCeXRlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gbm8gZ29vZCBtYXRjaCwgbGVuZ3RoZW4gYWxsIG1pbkxlbmd0aCByYW5nZXMgYW5kIGl0ZXJhdGUgCisgICAgICAgICAgICBmb3IgKGludCBpPTA7IHJhbmdlc1tpXS5tX2xlbmd0aDJfID09IG1pbkxlbmd0aDsgKysgaSkgeworICAgICAgICAgICAgICAgIGxlbmd0aGVuUmFuZ2UocmFuZ2VzLCBpLCBtYXhCeXRlLCBjb3VudEJ5dGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAocmFuZ2VDb3VudCA+IDEpIHsKKyAgICAgICAgICAgIC8vIHNvcnQgdGhlIHJhbmdlcyBieSB3ZWlnaHQgdmFsdWVzIAorICAgICAgICAgICAgQXJyYXlzLnNvcnQocmFuZ2VzLCAwLCByYW5nZUNvdW50KTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBzZXQgbWF4Qnl0ZSBpbiByYW5nZXNbMF0gZm9yIHVjb2xfbmV4dFdlaWdodCgpCisgICAgICAgIHJhbmdlc1swXS5tX2NvdW50XyA9IG1heEJ5dGU7CisgICAgCisgICAgICAgIHJldHVybiByYW5nZUNvdW50OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSByYW5nZSBsZW5ndGgKKyAgICAgKiBAcGFyYW0gcmFuZ2Ugd2VpZ2h0IHJhbmdlIGFycmF5CisgICAgICogQHBhcmFtIG9mZnNldCB0byB3ZWlnaHQgcmFuZ2UgYXJyYXkKKyAgICAgKiBAcGFyYW0gbWF4Qnl0ZQorICAgICAqIEBwYXJhbSBjb3VudEJ5dGVzCisgICAgICogQHJldHVybiBuZXcgbGVuZ3RoCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGxlbmd0aGVuUmFuZ2UoV2VpZ2h0UmFuZ2UgcmFuZ2VbXSwgaW50IG9mZnNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heEJ5dGUsIGludCBjb3VudEJ5dGVzKSAKKyAgICB7CisgICAgICAgIGludCBsZW5ndGggPSByYW5nZVtvZmZzZXRdLm1fbGVuZ3RoMl8gKyAxOworICAgICAgICByYW5nZVtvZmZzZXRdLm1fc3RhcnRfID0gc2V0V2VpZ2h0VHJhaWwocmFuZ2Vbb2Zmc2V0XS5tX3N0YXJ0XywgbGVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkJZVEVfRklSU1RfVEFJTE9SRURfKTsKKyAgICAgICAgcmFuZ2Vbb2Zmc2V0XS5tX2VuZF8gPSBzZXRXZWlnaHRUcmFpbChyYW5nZVtvZmZzZXRdLm1fZW5kXywgbGVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCeXRlKTsKKyAgICAgICAgcmFuZ2Vbb2Zmc2V0XS5tX2NvdW50Ml8gKj0gY291bnRCeXRlczsKKyAgICAgICAgcmFuZ2Vbb2Zmc2V0XS5tX2xlbmd0aDJfID0gbGVuZ3RoOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB3ZWlnaHQgCisgICAgICogQHBhcmFtIHdlaWdodAorICAgICAqIEBwYXJhbSBsZW5ndGgKKyAgICAgKiBAcGFyYW0gdHJhaWwKKyAgICAgKiBAcmV0dXJuIG5ldyB3ZWlnaHQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgc2V0V2VpZ2h0VHJhaWwoaW50IHdlaWdodCwgaW50IGxlbmd0aCwgaW50IHRyYWlsKSAKKyAgICB7CisgICAgICAgIGxlbmd0aCA9ICg0IC0gbGVuZ3RoKSA8PCAzOworICAgICAgICByZXR1cm4gKHdlaWdodCAmICgweGZmZmZmZjAwIDw8IGxlbmd0aCkpIHwgKHRyYWlsIDw8IGxlbmd0aCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIHRha2UgdHdvIENFIHdlaWdodHMgYW5kIGNhbGN1bGF0ZSB0aGUKKyAgICAgKiBwb3NzaWJsZSByYW5nZXMgb2Ygd2VpZ2h0cyBiZXR3ZWVuIHRoZSB0d28gbGltaXRzLCBleGNsdWRpbmcgdGhlbQorICAgICAqIGZvciB3ZWlnaHRzIHdpdGggdXAgdG8gNCBieXRlcyB0aGVyZSBhcmUgdXAgdG8gMio0LTE9NyByYW5nZXMKKyAgICAgKiBAcGFyYW0gbG93ZXJsaW1pdAorICAgICAqIEBwYXJhbSB1cHBlcmxpbWl0CisgICAgICogQHBhcmFtIG1heEJ5dGUKKyAgICAgKiBAcGFyYW0gY291bnRCeXRlcworICAgICAqIEBwYXJhbSByYW5nZXMKKyAgICAgKiBAcmV0dXJuIHdlaWdodCByYW5nZXMKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBnZXRXZWlnaHRSYW5nZXMoaW50IGxvd2VyTGltaXQsIGludCB1cHBlckxpbWl0LCBpbnQgbWF4Qnl0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudEJ5dGVzLCBXZWlnaHRSYW5nZSByYW5nZXNbXSkgCisgICAgeworICAgICAgICAvLyBhc3N1bWUgdGhhdCBib3RoIGxvd2VyTGltaXQgJiB1cHBlckxpbWl0IGFyZSBub3QgMCAKKyAgICAgICAgLy8gZ2V0IHRoZSBsZW5ndGhzIG9mIHRoZSBsaW1pdHMgCisgICAgICAgIGludCBsb3dlckxlbmd0aCA9IGxlbmd0aE9mV2VpZ2h0KGxvd2VyTGltaXQpOworICAgICAgICBpbnQgdXBwZXJMZW5ndGggPSBsZW5ndGhPZldlaWdodCh1cHBlckxpbWl0KTsKKyAgICAgICAgaWYgKFV0aWxpdHkuY29tcGFyZVVuc2lnbmVkKGxvd2VyTGltaXQsIHVwcGVyTGltaXQpID49IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIC8vIGNoZWNrIHRoYXQgbmVpdGhlciBpcyBhIHByZWZpeCBvZiB0aGUgb3RoZXIKKyAgICAgICAgaWYgKGxvd2VyTGVuZ3RoIDwgdXBwZXJMZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChsb3dlckxpbWl0ID09IHRydW5jYXRlV2VpZ2h0KHVwcGVyTGltaXQsIGxvd2VyTGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGlmIHRoZSB1cHBlciBsaW1pdCBpcyBhIHByZWZpeCBvZiB0aGUgbG93ZXIgbGltaXQgdGhlbiB0aGUgZWFybGllciAKKyAgICAgICAgLy8gdGVzdCBsb3dlckxpbWl0ID49IHVwcGVyTGltaXQgaGFzIGNhdWdodCBpdAorICAgICAgICAvLyByZXNldCBsb2NhbCB2YXJpYWJsZXMKKyAgICAgICAgLy8gV2l0aCB0aGUgbGltaXQgbGVuZ3RocyBvZiAxLi40LCB0aGVyZSBhcmUgdXAgdG8gNyByYW5nZXMgZm9yIAorICAgICAgICAvLyBhbGxvY2F0aW9uOgorICAgICAgICAvLyByYW5nZSAgICAgbWluaW11bSBsZW5ndGgKKyAgICAgICAgLy8gbG93ZXJbNF0gIDQKKyAgICAgICAgLy8gbG93ZXJbM10gIDMKKyAgICAgICAgLy8gbG93ZXJbMl0gIDIKKyAgICAgICAgLy8gbWlkZGxlICAgIDEKKyAgICAgICAgLy8gdXBwZXJbMl0gIDIKKyAgICAgICAgLy8gdXBwZXJbM10gIDMKKyAgICAgICAgLy8gdXBwZXJbNF0gIDQKKyAgICAgICAgLy8gV2UgYXJlIG5vdyBnb2luZyB0byBjYWxjdWxhdGUgdXAgdG8gNyByYW5nZXMuCisgICAgICAgIC8vIFNvbWUgb2YgdGhlbSB3aWxsIHR5cGljYWxseSBvdmVybGFwLCBzbyB3ZSB3aWxsIHRoZW4gaGF2ZSB0byBtZXJnZSAKKyAgICAgICAgLy8gYW5kIGVsaW1pbmF0ZSByYW5nZXMuCisgICAgICAgIGludCB3ZWlnaHQgPSBsb3dlckxpbWl0OworICAgICAgICBmb3IgKGludCBsZW5ndGggPSBsb3dlckxlbmd0aDsgbGVuZ3RoID49IDI7IC0tIGxlbmd0aCkgeworICAgICAgICAgICAgbV91dGlsTG93ZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5jbGVhcigpOworICAgICAgICAgICAgaW50IHRyYWlsID0gZ2V0V2VpZ2h0Qnl0ZSh3ZWlnaHQsIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAodHJhaWwgPCBtYXhCeXRlKSB7CisgICAgICAgICAgICAgICAgbV91dGlsTG93ZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5tX3N0YXJ0XyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGluY1dlaWdodFRyYWlsKHdlaWdodCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxMb3dlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fZW5kXyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNldFdlaWdodFRyYWlsKHdlaWdodCwgbGVuZ3RoLCBtYXhCeXRlKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxMb3dlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fbGVuZ3RoXyA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBtX3V0aWxMb3dlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fY291bnRfID0gbWF4Qnl0ZSAtIHRyYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2VpZ2h0ID0gdHJ1bmNhdGVXZWlnaHQod2VpZ2h0LCBsZW5ndGggLSAxKTsKKyAgICAgICAgfQorICAgICAgICBtX3V0aWxXZWlnaHRSYW5nZV8uY2xlYXIoKTsKKyAgICAgICAgbV91dGlsV2VpZ2h0UmFuZ2VfLm1fc3RhcnRfID0gaW5jV2VpZ2h0VHJhaWwod2VpZ2h0LCAxKTsKKyAgICAKKyAgICAgICAgd2VpZ2h0ID0gdXBwZXJMaW1pdDsKKyAgICAgICAgLy8gWzBdIGFuZCBbMV0gYXJlIG5vdCB1c2VkIC0gdGhpcyBzaW1wbGlmaWVzIGluZGV4aW5nLCAKKyAgICAgICAgLy8gbV91dGlsVXBwZXJXZWlnaHRSYW5nZV8KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGxlbmd0aCA9IHVwcGVyTGVuZ3RoOyBsZW5ndGggPj0gMjsgbGVuZ3RoIC0tKSB7CisgICAgICAgICAgICBpbnQgdHJhaWwgPSBnZXRXZWlnaHRCeXRlKHdlaWdodCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICh0cmFpbCA+IFJ1bGVCYXNlZENvbGxhdG9yLkJZVEVfRklSU1RfVEFJTE9SRURfKSB7CisgICAgICAgICAgICAgICAgbV91dGlsVXBwZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5tX3N0YXJ0XyAKKyAgICAgICAgICAgICAgICAgICAgICA9IHNldFdlaWdodFRyYWlsKHdlaWdodCwgbGVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkJZVEVfRklSU1RfVEFJTE9SRURfKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxVcHBlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fZW5kXyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGRlY1dlaWdodFRyYWlsKHdlaWdodCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxVcHBlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fbGVuZ3RoXyA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBtX3V0aWxVcHBlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fY291bnRfID0gdHJhaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFJ1bGVCYXNlZENvbGxhdG9yLkJZVEVfRklSU1RfVEFJTE9SRURfOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2VpZ2h0ID0gdHJ1bmNhdGVXZWlnaHQod2VpZ2h0LCBsZW5ndGggLSAxKTsKKyAgICAgICAgfQorICAgICAgICBtX3V0aWxXZWlnaHRSYW5nZV8ubV9lbmRfID0gZGVjV2VpZ2h0VHJhaWwod2VpZ2h0LCAxKTsKKyAgICAKKyAgICAgICAgLy8gc2V0IHRoZSBtaWRkbGUgcmFuZ2UKKyAgICAgICAgbV91dGlsV2VpZ2h0UmFuZ2VfLm1fbGVuZ3RoXyA9IDE7CisgICAgICAgIGlmIChtX3V0aWxXZWlnaHRSYW5nZV8ubV9lbmRfID49IG1fdXRpbFdlaWdodFJhbmdlXy5tX3N0YXJ0XykgeworICAgICAgICAgICAgbV91dGlsV2VpZ2h0UmFuZ2VfLm1fY291bnRfIAorICAgICAgICAgICAgICAgICAgID0gKChtX3V0aWxXZWlnaHRSYW5nZV8ubV9lbmRfIC0gbV91dGlsV2VpZ2h0UmFuZ2VfLm1fc3RhcnRfKSAKKyAgICAgICAgICAgICAgICAgICAgICA+PiAyNCkgKyAxOworICAgICAgICB9IAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSBvdmVybGFwcworICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBtaWRkbGUgcmFuZ2UKKyAgICAgICAgICAgIG1fdXRpbFdlaWdodFJhbmdlXy5tX2NvdW50XyA9IDA7CisgICAgICAgICAgICAvLyByZWR1Y2Ugb3IgcmVtb3ZlIHRoZSBsb3dlciByYW5nZXMgdGhhdCBnbyBiZXlvbmQgdXBwZXJMaW1pdAorICAgICAgICAgICAgZm9yIChpbnQgbGVuZ3RoID0gNDsgbGVuZ3RoID49IDI7IC0tIGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmIChtX3V0aWxMb3dlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fY291bnRfID4gMCAKKyAgICAgICAgICAgICAgICAgICAgJiYgbV91dGlsVXBwZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5tX2NvdW50XyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gbV91dGlsVXBwZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5tX3N0YXJ0XzsKKyAgICAgICAgICAgICAgICAgICAgaW50IGVuZCA9IG1fdXRpbExvd2VyV2VpZ2h0UmFuZ2VfW2xlbmd0aF0ubV9lbmRfOworICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID49IHN0YXJ0IHx8IGluY1dlaWdodChlbmQsIGxlbmd0aCwgbWF4Qnl0ZSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gc3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvd2VyIGFuZCB1cHBlciByYW5nZXMgY29sbGlkZSBvciBhcmUgZGlyZWN0bHkgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGphY2VudDogbWVyZ2UgdGhlc2UgdHdvIGFuZCByZW1vdmUgYWxsIHNob3J0ZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbV91dGlsTG93ZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5tX3N0YXJ0XzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IG1fdXRpbExvd2VyV2VpZ2h0UmFuZ2VfW2xlbmd0aF0ubV9lbmRfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbV91dGlsVXBwZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5tX2VuZF87CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnaW5nIGRpcmVjdGx5IGFkamFjZW50IHJhbmdlcyBuZWVkcyB0byBzdWJ0cmFjdCAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAwLzEgZ2FwcyBpbiBiZXR3ZWVuOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgbWF5IHJlc3VsdCBpbiBhIHJhbmdlIHdpdGggY291bnQ+Y291bnRCeXRlcworICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsTG93ZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5tX2NvdW50XyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldFdlaWdodEJ5dGUoZW5kLCBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBnZXRXZWlnaHRCeXRlKHN0YXJ0LCBsZW5ndGgpICsgMSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvdW50Qnl0ZXMgKiAoZ2V0V2VpZ2h0Qnl0ZShlbmQsIGxlbmd0aCAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZ2V0V2VpZ2h0Qnl0ZShzdGFydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggLSAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxVcHBlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fY291bnRfID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgtLSBsZW5ndGggPj0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbExvd2VyV2VpZ2h0UmFuZ2VfW2xlbmd0aF0ubV9jb3VudF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbV91dGlsVXBwZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXS5tX2NvdW50XyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBjb3B5IHRoZSByYW5nZXMsIHNob3J0ZXN0IGZpcnN0LCBpbnRvIHRoZSByZXN1bHQgYXJyYXkgCisgICAgICAgIGludCByYW5nZUNvdW50ID0gMDsKKyAgICAgICAgaWYgKG1fdXRpbFdlaWdodFJhbmdlXy5tX2NvdW50XyA+IDApIHsKKyAgICAgICAgICAgIHJhbmdlc1swXSA9IG5ldyBXZWlnaHRSYW5nZShtX3V0aWxXZWlnaHRSYW5nZV8pOworICAgICAgICAgICAgcmFuZ2VDb3VudCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgbGVuZ3RoID0gMjsgbGVuZ3RoIDw9IDQ7ICsrIGxlbmd0aCkgeworICAgICAgICAgICAgLy8gY29weSB1cHBlciBmaXJzdCBzbyB0aGF0IGxhdGVyIHRoZSBtaWRkbGUgcmFuZ2UgaXMgbW9yZSBsaWtlbHkgCisgICAgICAgICAgICAvLyB0aGUgZmlyc3Qgb25lIHRvIHVzZQorICAgICAgICAgICAgaWYgKG1fdXRpbFVwcGVyV2VpZ2h0UmFuZ2VfW2xlbmd0aF0ubV9jb3VudF8gPiAwKSB7CisgICAgICAgICAgICAgICAgcmFuZ2VzW3JhbmdlQ291bnRdIAorICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgV2VpZ2h0UmFuZ2UobV91dGlsVXBwZXJXZWlnaHRSYW5nZV9bbGVuZ3RoXSk7CisgICAgICAgICAgICAgICAgKysgcmFuZ2VDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3V0aWxMb3dlcldlaWdodFJhbmdlX1tsZW5ndGhdLm1fY291bnRfID4gMCkgeworICAgICAgICAgICAgICAgIHJhbmdlc1tyYW5nZUNvdW50XSAKKyAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IFdlaWdodFJhbmdlKG1fdXRpbExvd2VyV2VpZ2h0UmFuZ2VfW2xlbmd0aF0pOworICAgICAgICAgICAgICAgICsrIHJhbmdlQ291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhbmdlQ291bnQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRydW5jYXRlcyB0aGUgd2VpZ2h0IHdpdGggbGVuZ3RoCisgICAgICogQHBhcmFtIHdlaWdodAorICAgICAqIEBwYXJhbSBsZW5ndGgKKyAgICAgKiBAcmV0dXJuIHRydW5jYXRlZCB3ZWlnaHQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgdHJ1bmNhdGVXZWlnaHQoaW50IHdlaWdodCwgaW50IGxlbmd0aCkgCisgICAgeworICAgICAgICByZXR1cm4gd2VpZ2h0ICYgKDB4ZmZmZmZmZmYgPDwgKCg0IC0gbGVuZ3RoKSA8PCAzKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIExlbmd0aCBvZiB0aGUgd2VpZ2h0CisgICAgICogQHBhcmFtIHdlaWdodAorICAgICAqIEByZXR1cm4gbGVuZ3RoIG9mIHRoZSB3ZWlnaHQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgbGVuZ3RoT2ZXZWlnaHQoaW50IHdlaWdodCkgCisgICAgeworICAgICAgICBpZiAoKHdlaWdodCAmIDB4ZmZmZmZmKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSBpZiAoKHdlaWdodCAmIDB4ZmZmZikgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgaWYgKCh3ZWlnaHQgJiAweGZmKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgfSAKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEluY3JlbWVudCB0aGUgd2VpZ2h0IHRyYWlsCisgICAgICogQHBhcmFtIHdlaWdodCAKKyAgICAgKiBAcGFyYW0gbGVuZ3RoCisgICAgICogQHJldHVybiBuZXcgd2VpZ2h0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGluY1dlaWdodFRyYWlsKGludCB3ZWlnaHQsIGludCBsZW5ndGgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdlaWdodCArICgxIDw8ICgoNC1sZW5ndGgpIDw8IDMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNyZW1lbnQgdGhlIHdlaWdodCB0cmFpbAorICAgICAqIEBwYXJhbSB3ZWlnaHQgCisgICAgICogQHBhcmFtIGxlbmd0aAorICAgICAqIEByZXR1cm4gbmV3IHdlaWdodAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBkZWNXZWlnaHRUcmFpbChpbnQgd2VpZ2h0LCBpbnQgbGVuZ3RoKSAKKyAgICB7CisgICAgICAgIHJldHVybiB3ZWlnaHQgLSAoMSA8PCAoKDQgLSBsZW5ndGgpIDw8IDMpKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY29kZXBvaW50IAorICAgICAqIEBwYXJhbSB0YWJsZSBjb250cmFjdGlvbiB0YWJsZQorICAgICAqIEBwYXJhbSBjb2RlUG9pbnQgY29kZSBwb2ludCB0byBsb29rIGZvcgorICAgICAqIEByZXR1cm4gdGhlIG9mZnNldCB0byB0aGUgY29kZSBwb2ludAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBmaW5kQ1AoQmFzaWNDb250cmFjdGlvblRhYmxlIHRibCwgY2hhciBjb2RlUG9pbnQpIAorICAgIHsKKyAgICAgICAgaW50IHBvc2l0aW9uID0gMDsKKyAgICAgICAgd2hpbGUgKGNvZGVQb2ludCA+IHRibC5tX2NvZGVQb2ludHNfLmNoYXJBdChwb3NpdGlvbikpIHsKKyAgICAgICAgICAgICBwb3NpdGlvbiArKzsKKyAgICAgICAgICAgICBpZiAocG9zaXRpb24gPiB0YmwubV9jb2RlUG9pbnRzXy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb2RlUG9pbnQgPT0gdGJsLm1fY29kZVBvaW50c18uY2hhckF0KHBvc2l0aW9uKSkgeworICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgICAgICB9IAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmRzIGEgY29udHJhY3Rpb24gY2UKKyAgICAgKiBAcGFyYW0gdGFibGUKKyAgICAgKiBAcGFyYW0gZWxlbWVudAorICAgICAqIEBwYXJhbSBjaAorICAgICAqIEByZXR1cm4gY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZmluZENFKENvbnRyYWN0aW9uVGFibGUgdGFibGUsIGludCBlbGVtZW50LCBjaGFyIGNoKSAKKyAgICB7CisgICAgICAgIGlmICh0YWJsZSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gQ0VfTk9UX0ZPVU5EXzsKKyAgICAgICAgfQorICAgICAgICBCYXNpY0NvbnRyYWN0aW9uVGFibGUgdGJsID0gZ2V0QmFzaWNDb250cmFjdGlvblRhYmxlKHRhYmxlLCBlbGVtZW50KTsKKyAgICAgICAgaWYgKHRibCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gQ0VfTk9UX0ZPVU5EXzsKKyAgICAgICAgfQorICAgICAgICBpbnQgcG9zaXRpb24gPSBmaW5kQ1AodGJsLCBjaCk7CisgICAgICAgIGlmIChwb3NpdGlvbiA+IHRibC5tX0NFc18uc2l6ZSgpIHx8IHBvc2l0aW9uIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIENFX05PVF9GT1VORF87CisgICAgICAgIH0gCisgICAgICAgIHJldHVybiAoKEludGVnZXIpdGJsLm1fQ0VzXy5nZXQocG9zaXRpb24pKS5pbnRWYWx1ZSgpOworICAgIH0gICAgCisgICAgCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBzdHJpbmcgaXMgdGFpbG9yZWQgaW4gdGhlIGNvbnRyYWN0aW9uCisgICAgICogQHBhcmFtIHRhYmxlIGNvbnRyYWN0aW9uIHRhYmxlCisgICAgICogQHBhcmFtIGVsZW1lbnQgCisgICAgICogQHBhcmFtIGFycmF5IGNoYXJhY3RlciBhcnJheSB0byBjaGVjaworICAgICAqIEBwYXJhbSBvZmZzZXQgYXJyYXkgb2Zmc2V0CisgICAgICogQHJldHVybiB0cnVlIGlmIGl0IGlzIHRhaWxvcmVkCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1RhaWxvcmVkKENvbnRyYWN0aW9uVGFibGUgdGFibGUsIGludCBlbGVtZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBhcnJheVtdLCBpbnQgb2Zmc2V0KSAKKyAgICB7CisgICAgICAgIHdoaWxlIChhcnJheVtvZmZzZXRdICE9IDApIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBmaW5kQ0UodGFibGUsIGVsZW1lbnQsIGFycmF5W29mZnNldF0pOworICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gQ0VfTk9UX0ZPVU5EXykgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaXNDb250cmFjdGlvblRhYmxlRWxlbWVudChlbGVtZW50KSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ICsrOworICAgICAgICB9CisgICAgICAgIGlmIChnZXRDRSh0YWJsZSwgZWxlbWVudCwgMCkgIT0gQ0VfTk9UX0ZPVU5EXykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBc3NlbWJsZSBSdWxlQmFzZWRDb2xsYXRvcgorICAgICAqIEBwYXJhbSB0IGJ1aWxkIHRhYmxlCisgICAgICogQHBhcmFtIGNvbGxhdG9yIHRvIHVwZGF0ZQorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhc3NlbWJsZVRhYmxlKEJ1aWxkVGFibGUgdCwgUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IpIAorICAgIHsKKyAgICAgICAgSW50VHJpZUJ1aWxkZXIgbWFwcGluZyA9IHQubV9tYXBwaW5nXzsKKyAgICAgICAgVmVjdG9yIGV4cGFuc2lvbnMgPSB0Lm1fZXhwYW5zaW9uc187CisgICAgICAgIENvbnRyYWN0aW9uVGFibGUgY29udHJhY3Rpb25zID0gdC5tX2NvbnRyYWN0aW9uc187CisgICAgICAgIE1heEV4cGFuc2lvblRhYmxlIG1heGV4cGFuc2lvbiA9IHQubV9tYXhFeHBhbnNpb25zXzsKKyAgICAgICAgCisgICAgICAgIC8vIGNvbnRyYWN0aW9uIG9mZnNldCBoYXMgdG8gYmUgaW4gc2luY2Ugd2UgYXJlIGJ1aWxkaW5nIG9uIHRoZSAKKyAgICAgICAgLy8gVUNBIGNvbnRyYWN0aW9ucyAKKyAgICAgICAgLy8gaW50IGJlZm9yZUNvbnRyYWN0aW9ucyA9IChIRUFERVJfU0laRV8gCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICsgcGFkZGVkc2l6ZShleHBhbnNpb25zLnNpemUoKSA8PCAyKSkgPj4+IDE7CisgICAgICAgIGNvbGxhdG9yLm1fY29udHJhY3Rpb25PZmZzZXRfID0gMDsKKyAgICAgICAgaW50IGNvbnRyYWN0aW9uc1NpemUgPSBjb25zdHJ1Y3RUYWJsZShjb250cmFjdGlvbnMpOworICAgICAgICAKKyAgICAgICAgLy8gdGhlIGZvbGxvd2luZyBvcGVyYXRpb24gZGVwZW5kcyBvbiB0aGUgdHJpZSBkYXRhLiBUaGVyZWZvcmUsIHdlIGhhdmUgCisgICAgICAgIC8vIHRvIGRvIGl0IGJlZm9yZSB0aGUgdHJpZSBpcyBjb21wYWN0ZWQgCisgICAgICAgIC8vIHNldHMgamFtbyBleHBhbnNpb25zCisgICAgICAgIGdldE1heEV4cGFuc2lvbkphbW8obWFwcGluZywgbWF4ZXhwYW5zaW9uLCB0Lm1fbWF4SmFtb0V4cGFuc2lvbnNfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhdG9yLm1faXNKYW1vU3BlY2lhbF8pOworICAgICAgICAKKyAgICAgICAgLy8gVE9ETzogTEFUSU4xIGFycmF5IGlzIG5vdyBpbiB0aGUgdXRyaWUgLSBpdCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIAorICAgICAgICAvLyB0aGUgY2FsY3VsYXRpb24KKyAgICAgICAgc2V0QXR0cmlidXRlcyhjb2xsYXRvciwgdC5tX29wdGlvbnNfKTsKKyAgICAgICAgLy8gY29weSBleHBhbnNpb25zCisgICAgICAgIGludCBzaXplID0gZXhwYW5zaW9ucy5zaXplKCk7CisgICAgICAgIGNvbGxhdG9yLm1fZXhwYW5zaW9uXyA9IG5ldyBpbnRbc2l6ZV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICAgICAgY29sbGF0b3IubV9leHBhbnNpb25fW2ldID0gKChJbnRlZ2VyKWV4cGFuc2lvbnMuZ2V0KGkpKS5pbnRWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIC8vIGNvbnRyYWN0aW9ucyBibG9jayAKKyAgICAgICAgaWYgKGNvbnRyYWN0aW9uc1NpemUgIT0gMCkgeworICAgICAgICAgICAgLy8gY29weSBjb250cmFjdGlvbiBpbmRleCAKKyAgICAgICAgICAgIGNvbGxhdG9yLm1fY29udHJhY3Rpb25JbmRleF8gPSBuZXcgY2hhcltjb250cmFjdGlvbnNTaXplXTsKKyAgICAgICAgICAgIGNvbnRyYWN0aW9ucy5tX2NvZGVQb2ludHNfLmdldENoYXJzKDAsIGNvbnRyYWN0aW9uc1NpemUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGF0b3IubV9jb250cmFjdGlvbkluZGV4XywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgIC8vIGNvcHkgY29udHJhY3Rpb24gY29sbGF0aW9uIGVsZW1lbnRzCisgICAgICAgICAgICBjb2xsYXRvci5tX2NvbnRyYWN0aW9uQ0VfID0gbmV3IGludFtjb250cmFjdGlvbnNTaXplXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udHJhY3Rpb25zU2l6ZTsgaSArKykgeworICAgICAgICAgICAgICAgIGNvbGxhdG9yLm1fY29udHJhY3Rpb25DRV9baV0gPSAoKEludGVnZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhY3Rpb25zLm1fQ0VzXy5nZXQoaSkpLmludFZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gY29weSBtYXBwaW5nIHRhYmxlCisgICAgICAgIGNvbGxhdG9yLm1fdHJpZV8gPSBtYXBwaW5nLnNlcmlhbGl6ZSh0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5EYXRhTWFuaXB1bGF0ZS5nZXRJbnN0YW5jZSgpKTsKKyAgICAgICAgLy8gY29weSBtYXggZXhwYW5zaW9uIHRhYmxlCisgICAgICAgIC8vIG5vdCBjb3B5aW5nIHRoZSBmaXJzdCBlbGVtZW50IHdoaWNoIGlzIGEgZHVtbXkKKyAgICAgICAgLy8gdG8gYmUgaW4gc3luY2ggd2l0aCBpY3U0YydzIGJ1aWxkZXIsIHdlIGNvbnRpbnVlIHRvIHVzZSB0aGUgCisgICAgICAgIC8vIGV4cGFuc2lvbiBvZmZzZXQKKyAgICAgICAgLy8gb21pdHRpbmcgZXhwYW5zaW9uIG9mZnNldCBpbiBidWlsZGVyCisgICAgICAgIGNvbGxhdG9yLm1fZXhwYW5zaW9uT2Zmc2V0XyA9IDA7IAorICAgICAgICBzaXplID0gbWF4ZXhwYW5zaW9uLm1fZW5kRXhwYW5zaW9uQ0VfLnNpemUoKTsKKyAgICAgICAgY29sbGF0b3IubV9leHBhbnNpb25FbmRDRV8gPSBuZXcgaW50W3NpemUgLSAxXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICBjb2xsYXRvci5tX2V4cGFuc2lvbkVuZENFX1tpIC0gMV0gPSAoKEludGVnZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGV4cGFuc2lvbi5tX2VuZEV4cGFuc2lvbkNFXy5nZXQoaSkpLmludFZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgY29sbGF0b3IubV9leHBhbnNpb25FbmRDRU1heFNpemVfID0gbmV3IGJ5dGVbc2l6ZSAtIDFdOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgICAgIGNvbGxhdG9yLm1fZXhwYW5zaW9uRW5kQ0VNYXhTaXplX1tpIC0gMV0gCisgICAgICAgICAgICAgICAgID0gKChCeXRlKW1heGV4cGFuc2lvbi5tX2V4cGFuc2lvbkNFU2l6ZV8uZ2V0KGkpKS5ieXRlVmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBVbnNhZmUgY2hhcnMgdGFibGUuICBGaW5pc2ggaXQgb2ZmLCB0aGVuIGNvcHkgaXQuCisgICAgICAgIHVuc2FmZUNQQWRkQ0NOWih0KTsKKyAgICAgICAgLy8gT3IgaW4gdW5zYWZlYml0cyBmcm9tIFVDQSwgbWFraW5nIGEgY29tYmluZWQgdGFibGUuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVU5TQUZFQ1BfVEFCTEVfU0laRV87IGkgKyspIHsgICAgCisgICAgICAgICAgICAgdC5tX3Vuc2FmZUNQX1tpXSB8PSBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfLm1fdW5zYWZlX1tpXTsKKyAgICAgICAgfQorICAgICAgICBjb2xsYXRvci5tX3Vuc2FmZV8gPSB0Lm1fdW5zYWZlQ1BfOworICAgIAorICAgICAgICAvLyBGaW5pc2ggYnVpbGRpbmcgQ29udHJhY3Rpb24gRW5kaW5nIGNoYXJzIGhhc2ggdGFibGUgYW5kIHRoZW4gY29weSBpdCAKKyAgICAgICAgLy8gb3V0LgorICAgICAgICAvLyBPciBpbiB1bnNhZmViaXRzIGZyb20gVUNBLCBtYWtpbmcgYSBjb21iaW5lZCB0YWJsZQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFVOU0FGRUNQX1RBQkxFX1NJWkVfOyBpICsrKSB7ICAgIAorICAgICAgICAgICAgIHQubV9jb250ckVuZENQX1tpXSB8PSBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfLm1fY29udHJhY3Rpb25FbmRfW2ldOworICAgICAgICB9CisgICAgICAgIGNvbGxhdG9yLm1fY29udHJhY3Rpb25FbmRfID0gdC5tX2NvbnRyRW5kQ1BfOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoaXMgY29sbGF0b3IgdG8gdXNlIHRoZSBhbGwgb3B0aW9ucyBhbmQgdGFibGVzIGluIFVDQS4gCisgICAgICogQHBhcmFtIGNvbGxhdG9yIHdoaWNoIGF0dHJpYnV0ZSBpcyB0byBiZSBzZXQgCisgICAgICogQHBhcmFtIG9wdGlvbiB0byBzZXQgd2l0aAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgc2V0QXR0cmlidXRlcyhSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdGlvblJ1bGVQYXJzZXIuT3B0aW9uU2V0IG9wdGlvbikKKyAgICB7CisgICAgICAgIGNvbGxhdG9yLmxhdGluT25lRmFpbGVkXyA9IHRydWU7CisgICAgICAgIGNvbGxhdG9yLm1fY2FzZUZpcnN0XyA9IG9wdGlvbi5tX2Nhc2VGaXJzdF87CisgICAgICAgIGNvbGxhdG9yLnNldERlY29tcG9zaXRpb24ob3B0aW9uLm1fZGVjb21wb3NpdGlvbl8pOworICAgICAgICBjb2xsYXRvci5zZXRBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5tX2lzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkXyk7CisgICAgICAgIGNvbGxhdG9yLnNldENhc2VMZXZlbChvcHRpb24ubV9pc0Nhc2VMZXZlbF8pOworICAgICAgICBjb2xsYXRvci5zZXRGcmVuY2hDb2xsYXRpb24ob3B0aW9uLm1faXNGcmVuY2hDb2xsYXRpb25fKTsKKyAgICAgICAgY29sbGF0b3IubV9pc0hpcmFnYW5hNF8gPSBvcHRpb24ubV9pc0hpcmFnYW5hNF87CisgICAgICAgIGNvbGxhdG9yLnNldFN0cmVuZ3RoKG9wdGlvbi5tX3N0cmVuZ3RoXyk7CisgICAgICAgIGNvbGxhdG9yLm1fdmFyaWFibGVUb3BWYWx1ZV8gPSBvcHRpb24ubV92YXJpYWJsZVRvcFZhbHVlXzsgICAgCisgICAgICAgIGNvbGxhdG9yLmxhdGluT25lRmFpbGVkXyA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RpbmcgdGhlIGNvbnRyYWN0aW9uIHRhYmxlCisgICAgICogQHBhcmFtIHRhYmxlIGNvbnRyYWN0aW9uIHRhYmxlCisgICAgICogQHJldHVybiAKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBjb25zdHJ1Y3RUYWJsZShDb250cmFjdGlvblRhYmxlIHRhYmxlKSAKKyAgICB7CisgICAgICAgIC8vIFNlZSBob3cgbXVjaCBtZW1vcnkgd2UgbmVlZCAKKyAgICAgICAgaW50IHRzaXplID0gdGFibGUubV9lbGVtZW50c18uc2l6ZSgpOworICAgICAgICBpZiAodHNpemUgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdGFibGUubV9vZmZzZXRzXy5jbGVhcigpOworICAgICAgICBpbnQgcG9zaXRpb24gPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRzaXplOyBpICsrKSB7CisgICAgICAgICAgICB0YWJsZS5tX29mZnNldHNfLmFkZChuZXcgSW50ZWdlcihwb3NpdGlvbikpOworICAgICAgICAgICAgcG9zaXRpb24gKz0gKChCYXNpY0NvbnRyYWN0aW9uVGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5tX2VsZW1lbnRzXy5nZXQoaSkpLm1fQ0VzXy5zaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgdGFibGUubV9DRXNfLmNsZWFyKCk7CisgICAgICAgIHRhYmxlLm1fY29kZVBvaW50c18uZGVsZXRlKDAsIHRhYmxlLm1fY29kZVBvaW50c18ubGVuZ3RoKCkpOworICAgICAgICAvLyBOb3cgc3R1ZmYgdGhlIHRoaW5ncyBpbgorICAgICAgICBTdHJpbmdCdWZmZXIgY3BQb2ludGVyID0gdGFibGUubV9jb2RlUG9pbnRzXzsKKyAgICAgICAgVmVjdG9yIENFUG9pbnRlciA9IHRhYmxlLm1fQ0VzXzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0c2l6ZTsgaSArKykgeworICAgICAgICAgICAgQmFzaWNDb250cmFjdGlvblRhYmxlIGJjdCA9IChCYXNpY0NvbnRyYWN0aW9uVGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5tX2VsZW1lbnRzXy5nZXQoaSk7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IGJjdC5tX0NFc18uc2l6ZSgpOworICAgICAgICAgICAgY2hhciBjY01heCA9IDA7CisgICAgICAgICAgICBjaGFyIGNjTWluID0gMjU1OworICAgICAgICAgICAgaW50IG9mZnNldCA9IENFUG9pbnRlci5zaXplKCk7CisgICAgICAgICAgICBDRVBvaW50ZXIuYWRkKGJjdC5tX0NFc18uZ2V0KDApKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgc2l6ZTsgaiArKykgeworICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBiY3QubV9jb2RlUG9pbnRzXy5jaGFyQXQoaik7CisgICAgICAgICAgICAgICAgY2hhciBjYyA9IChjaGFyKShVQ2hhcmFjdGVyLmdldENvbWJpbmluZ0NsYXNzKGNoKSAmIDB4RkYpOworICAgICAgICAgICAgICAgIGlmIChjYyA+IGNjTWF4KSB7CisgICAgICAgICAgICAgICAgICAgIGNjTWF4ID0gY2M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA8IGNjTWluKSB7CisgICAgICAgICAgICAgICAgICAgIGNjTWluID0gY2M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNwUG9pbnRlci5hcHBlbmQoY2gpOworICAgICAgICAgICAgICAgIENFUG9pbnRlci5hZGQoYmN0Lm1fQ0VzXy5nZXQoaikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3BQb2ludGVyLmluc2VydChvZmZzZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcikoKChjY01pbiA9PSBjY01heCkgPyAxIDogMCA8PCA4KSB8IGNjTWF4KSk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGogKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNDb250cmFjdGlvblRhYmxlRWxlbWVudCgoKEludGVnZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUG9pbnRlci5nZXQob2Zmc2V0ICsgaikpLmludFZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBjZSA9ICgoSW50ZWdlcilDRVBvaW50ZXIuZ2V0KG9mZnNldCArIGopKS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBDRVBvaW50ZXIuc2V0KG9mZnNldCArIGosIAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVnZXIoY29uc3RydWN0U3BlY2lhbENFKGdldENFVGFnKGNlKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEludGVnZXIpdGFibGUubV9vZmZzZXRzXy5nZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRyYWN0aW9uT2Zmc2V0KGNlKSkpLmludFZhbHVlKCkpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDB4MTBGRkZGOyBpICsrKSB7CisgICAgICAgICAgICBpbnQgQ0UgPSB0YWJsZS5tX21hcHBpbmdfLmdldFZhbHVlKGkpOworICAgICAgICAgICAgaWYgKGlzQ29udHJhY3Rpb25UYWJsZUVsZW1lbnQoQ0UpKSB7CisgICAgICAgICAgICAgICAgQ0UgPSBjb25zdHJ1Y3RTcGVjaWFsQ0UoZ2V0Q0VUYWcoQ0UpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEludGVnZXIpdGFibGUubV9vZmZzZXRzXy5nZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJhY3Rpb25PZmZzZXQoQ0UpKSkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgdGFibGUubV9tYXBwaW5nXy5zZXRWYWx1ZShpLCBDRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgY29udHJhY3Rpb24gb2Zmc2V0CisgICAgICogQHBhcmFtIGNlIGNvbGxhdGlvbiBlbGVtZW50IAorICAgICAqIEByZXR1cm4gY29udHJhY3Rpb24gb2Zmc2V0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGdldENvbnRyYWN0aW9uT2Zmc2V0KGludCBjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjZSAmIDB4RkZGRkZGOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIEphbW8gZXhwYW5zaW9uCisgICAgICogQHBhcmFtIHRhYmxlIHRyaWUgdGFibGUKKyAgICAgKiBAcGFyYW0gbWF4ZXhwYW5zaW9uIG1heGltdW0gZXhwYW5zaW9uIHRhYmxlCisgICAgICogQHBhcmFtIG1heGphbW9leHBhbnNpb24gbWF4aW11bSBqYW1vIGV4cGFuc2lvbiB0YWJsZQorICAgICAqIEBwYXJhbSBqYW1vc3BlY2lhbCBpcyBqYW1vIHNwZWNpYWw/CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBnZXRNYXhFeHBhbnNpb25KYW1vKEludFRyaWVCdWlsZGVyIG1hcHBpbmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhFeHBhbnNpb25UYWJsZSBtYXhleHBhbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heEphbW9FeHBhbnNpb25UYWJsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4amFtb2V4cGFuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBqYW1vc3BlY2lhbCkKKyAgICB7CisgICAgICAgIGludCBWQkFTRSAgPSAweDExNjE7CisgICAgICAgIGludCBUQkFTRSAgPSAweDExQTg7CisgICAgICAgIGludCBWQ09VTlQgPSAyMTsKKyAgICAgICAgaW50IFRDT1VOVCA9IDI4OworICAgICAgICBpbnQgdiA9IFZCQVNFICsgVkNPVU5UIC0gMTsKKyAgICAgICAgaW50IHQgPSBUQkFTRSArIFRDT1VOVCAtIDE7CisgICAgICAgIAorICAgICAgICB3aGlsZSAodiA+PSBWQkFTRSkgeworICAgICAgICAgICAgaW50IGNlID0gbWFwcGluZy5nZXRWYWx1ZSh2KTsKKyAgICAgICAgICAgIGlmICgoY2UgJiBSdWxlQmFzZWRDb2xsYXRvci5DRV9TUEVDSUFMX0ZMQUdfKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gUnVsZUJhc2VkQ29sbGF0b3IuQ0VfU1BFQ0lBTF9GTEFHXykgeworICAgICAgICAgICAgICAgIHNldE1heEV4cGFuc2lvbihjZSwgKGJ5dGUpMiwgbWF4ZXhwYW5zaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHYgLS07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHdoaWxlICh0ID49IFRCQVNFKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgY2UgPSBtYXBwaW5nLmdldFZhbHVlKHQpOworICAgICAgICAgICAgaWYgKChjZSAmIFJ1bGVCYXNlZENvbGxhdG9yLkNFX1NQRUNJQUxfRkxBR18pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBSdWxlQmFzZWRDb2xsYXRvci5DRV9TUEVDSUFMX0ZMQUdfKSB7CisgICAgICAgICAgICAgICAgc2V0TWF4RXhwYW5zaW9uKGNlLCAoYnl0ZSkzLCBtYXhleHBhbnNpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdCAtLTsKKyAgICAgICAgfQorICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRvY3MsIDk5JSBvZiB0aGUgdGltZSwgdGhlIEphbW8gd2lsbCBub3QgYmUgc3BlY2lhbCAKKyAgICAgICAgaWYgKGphbW9zcGVjaWFsKSB7CisgICAgICAgICAgICAvLyBnZXRzIHRoZSBtYXggZXhwYW5zaW9uIGluIGFsbCB1bmljb2RlIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGludCBjb3VudCA9IG1heGphbW9leHBhbnNpb24ubV9lbmRFeHBhbnNpb25DRV8uc2l6ZSgpOworICAgICAgICAgICAgYnl0ZSBtYXhUU2l6ZSA9IChieXRlKShtYXhqYW1vZXhwYW5zaW9uLm1fbWF4TFNpemVfICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGphbW9leHBhbnNpb24ubV9tYXhWU2l6ZV8gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhqYW1vZXhwYW5zaW9uLm1fbWF4VFNpemVfKTsKKyAgICAgICAgICAgIGJ5dGUgbWF4VlNpemUgPSAoYnl0ZSkobWF4amFtb2V4cGFuc2lvbi5tX21heExTaXplXyArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhqYW1vZXhwYW5zaW9uLm1fbWF4VlNpemVfKTsKKyAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgY291bnQgLS07CisgICAgICAgICAgICAgICAgaWYgKCgoQm9vbGVhbiltYXhqYW1vZXhwYW5zaW9uLm1faXNWXy5nZXQoY291bnQpKS5ib29sZWFuVmFsdWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBzZXRNYXhFeHBhbnNpb24oKChJbnRlZ2VyKQorICAgICAgICAgICAgICAgICAgICAgbWF4amFtb2V4cGFuc2lvbi5tX2VuZEV4cGFuc2lvbkNFXy5nZXQoY291bnQpKS5pbnRWYWx1ZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhWU2l6ZSwgbWF4ZXhwYW5zaW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNldE1heEV4cGFuc2lvbigoKEludGVnZXIpCisgICAgICAgICAgICAgICAgICAgICBtYXhqYW1vZXhwYW5zaW9uLm1fZW5kRXhwYW5zaW9uQ0VfLmdldChjb3VudCkpLmludFZhbHVlKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFRTaXplLCBtYXhleHBhbnNpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKiogIAorICAgICAqIFRvIHRoZSBVbnNhZmVDUCBoYXNoIHRhYmxlLCBhZGQgYWxsIGNoYXJzIHdpdGggY29tYmluaW5nIGNsYXNzICE9IDAgICAgIAorICAgICAqIEBwYXJhbSB0IGJ1aWxkIHRhYmxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgdm9pZCB1bnNhZmVDUEFkZENDTlooQnVpbGRUYWJsZSB0KSAKKyAgICB7CisgICAgCisgICAgICAgIGZvciAoY2hhciBjID0gMDsgYyA8IDB4ZmZmZjsgYyArKykgeworICAgICAgICAgICAgY2hhciBmY2QgPSBOb3JtYWxpemVySW1wbC5nZXRGQ0QxNihjKTsKKyAgICAgICAgICAgIGlmIChmY2QgPj0gMHgxMDAgfHwgLy8gaWYgdGhlIGxlYWRpbmcgY29tYmluaW5nIGNsYXNzKGMpID4gMCB8fAorICAgICAgICAgICAgICAgIChVVEYxNi5pc0xlYWRTdXJyb2dhdGUoYykgJiYgZmNkICE9IDApKSB7CisgICAgICAgICAgICAgICAgLy8gYyBpcyBhIGxlYWRpbmcgc3Vycm9nYXRlIHdpdGggc29tZSBGQ0QgZGF0YQorICAgICAgICAgICAgICAgIHVuc2FmZUNQU2V0KHQubV91bnNhZmVDUF8sIGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmICh0Lm1fcHJlZml4TG9va3VwXyAhPSBudWxsKSB7CisgICAgICAgICAgICBFbnVtZXJhdGlvbiBlbnVtID0gdC5tX3ByZWZpeExvb2t1cF8uZWxlbWVudHMoKTsKKyAgICAgICAgICAgIHdoaWxlIChlbnVtLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudHMgZSA9IChFbGVtZW50cyllbnVtLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgLy8gY29kZXBvaW50cyBoZXJlIGFyZSBpbiB0aGUgTkZEIGZvcm0uIFdlIG5lZWQgdG8gYWRkIHRoZQorICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNvZGUgcG9pbnQgb2YgdGhlIE5GQyBmb3JtIHRvIHVuc2FmZSwgYmVjYXVzZSAKKyAgICAgICAgICAgICAgICAvLyBzdHJjb2xsIG5lZWRzIHRvIGJhY2t1cCBvdmVyIHRoZW0uCisgICAgICAgICAgICAgICAgU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKGUubV9jUG9pbnRzXywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdW5zYWZlQ1BTZXQodC5tX3Vuc2FmZUNQXywgZGVjb21wLmNoYXJBdCgwKSk7CisgICAgICAgICAgICB9IAorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENyZWF0ZSBjbG9zdXJlCisgICAgICogQHBhcmFtIHQgYnVpbGQgdGFibGUKKyAgICAgKiBAcGFyYW0gY29sbGF0b3IgUnVsZUJhc2VkQ29sbGF0b3IKKyAgICAgKiBAcGFyYW0gY29sRWwgY29sbGF0aW9uIGVsZW1lbnQgaXRlcmF0b3IKKyAgICAgKiBAcGFyYW0gc3RhcnQgCisgICAgICogQHBhcmFtIGxpbWl0CisgICAgICogQHBhcmFtIHR5cGUgY2hhcmFjdGVyIHR5cGUKKyAgICAgKiBAcmV0dXJuIAorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBlbnVtQ2F0ZWdvcnlSYW5nZUNsb3N1cmVDYXRlZ29yeShCdWlsZFRhYmxlIHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGNvbEVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGxpbWl0LCBpbnQgdHlwZSkgCisgICAgeworICAgICAgICBpZiAodHlwZSAhPSBVQ2hhcmFjdGVyQ2F0ZWdvcnkuVU5BU1NJR05FRCAKKyAgICAgICAgICAgICYmIHR5cGUgIT0gVUNoYXJhY3RlckNhdGVnb3J5LlBSSVZBVEVfVVNFKSB7IAorICAgICAgICAgICAgLy8gaWYgdGhlIHJhbmdlIGlzIGFzc2lnbmVkIC0gd2UgbWlnaHQgb21taXQgbW9yZSBjYXRlZ29yaWVzIGxhdGVyCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IHUzMiA9IHN0YXJ0OyB1MzIgPCBsaW1pdDsgdTMyICsrKSB7CisgICAgICAgICAgICAgICAgaW50IG5vT2ZEZWMgPSBOb3JtYWxpemVySW1wbC5nZXREZWNvbXBvc2l0aW9uKHUzMiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbENoYXJCdWZmZXJfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMjU2KTsKKyAgICAgICAgICAgICAgICBpZiAobm9PZkRlYyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgcG9zaXRpdmUsIHRoYXQgbWVhbnMgdGhlcmUgaXMgbm8gZGVjb21wb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29tcCA9IFVDaGFyYWN0ZXIudG9TdHJpbmcodTMyKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlY29tcCA9IG5ldyBTdHJpbmcobV91dGlsQ2hhckJ1ZmZlcl8sIDAsIG5vT2ZEZWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbGxhdG9yLmVxdWFscyhjb21wLCBkZWNvbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX2NQb2ludHNfID0gZGVjb21wOworICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9wcmVmaXhfID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRzIHByZWZpeCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoRWxlbWVudHMpdC5tX3ByZWZpeExvb2t1cF8uZ2V0KG1fdXRpbEVsZW1lbnRfKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXggPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fY1BvaW50c18gPSBjb21wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fcHJlZml4XyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9wcmVmaXhDaGFyc18gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbEVsLnNldFRleHQoZGVjb21wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2UgPSBjb2xFbC5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9DRUxlbmd0aF8gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjZSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fQ0VzX1sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX0NFTGVuZ3RoXyArK10gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2UgPSBjb2xFbC5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fY1BvaW50c18gPSBjb21wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fcHJlZml4XyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9wcmVmaXhDaGFyc18gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fQ0VMZW5ndGhfID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX0NFc19bMF0gPSBwcmVmaXgubV9tYXBDRV87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjaGFyYWN0ZXIgdXNlcyBhIHByZWZpeC4gV2UgaGF2ZSB0byBhZGQgaXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIHVuc2FmZSB0YWJsZSwgYXMgaXQgZGVjb21wb3NlZCBmb3JtIGlzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaW4uIEluIEphcGFuZXNlLCB0aGlzIGhhcHBlbnMgZm9yIFx1MzA5ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAmIFx1MzBmZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHVuc2FmZUNQU2V0IGlzIHN0YXRpYyBpbiB1Y29sX2VsbSwgd2UgYXJlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdvaW5nIHRvIHdyYXAgaXQgdXAgaW4gdGhlIHVuc2FmZUNQQWRkQ0NOWiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1faXNUaGFpXyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLmlzVGhhaVByZVZvd2VsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsRWxlbWVudF8ubV9jUG9pbnRzXy5jaGFyQXQoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkQW5FbGVtZW50KHQsIG1fdXRpbEVsZW1lbnRfKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgCSAqIERldGVybWluZSBpZiBhIGNoYXJhY3RlciBpcyBhIEphbW8KKyAJICogQHBhcmFtIGNoIGNoYXJhY3RlciB0byB0ZXN0CisgCSAqIEByZXR1cm4gdHJ1ZSBpZiBjaCBpcyBhIEphbW8sIGZhbHNlIG90aGVyd2lzZQorIAkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzSmFtbyhjaGFyIGNoKQorCXsgCisJCXJldHVybiAoY2ggPj0gMHgxMTAwICYmIGNoIDw9IDB4MTExMikgCisJCSAgICAgICB8fCAoY2ggPj0gMHgxMTc1ICYmIGNoIDw9IDB4MTE2MSkgCisJCSAgICAgICB8fCAoY2ggPj0gMHgxMUE4ICYmIGNoIDw9IDB4MTFDMik7CisJfQorICAgIAorICAgIC8qKgorICAgICAqIFByb2R1Y2VzIGNhbm9uaWNhbCBjbG9zdXJlCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGNhbm9uaWNhbENsb3N1cmUoQnVpbGRUYWJsZSB0KSAKKyAgICB7CisgICAgICAgIEJ1aWxkVGFibGUgdGVtcCA9IG5ldyBCdWlsZFRhYmxlKHQpOworICAgICAgICBhc3NlbWJsZVRhYmxlKHRlbXAsIHRlbXAubV9jb2xsYXRvcl8pOworICAgICAgICAvLyBwcm9kdWNlIGNhbm9uaWNhbCBjbG9zdXJlIAorICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgY29sZWl0ZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB0ZW1wLm1fY29sbGF0b3JfLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcigiIik7CisgICAgICAgIFJhbmdlVmFsdWVJdGVyYXRvciB0eXBlaXRlciA9IFVDaGFyYWN0ZXIuZ2V0VHlwZUl0ZXJhdG9yKCk7CisgICAgICAgIFJhbmdlVmFsdWVJdGVyYXRvci5FbGVtZW50IGVsZW1lbnQgPSBuZXcgUmFuZ2VWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQoKTsKKyAgICAgICAgd2hpbGUgKHR5cGVpdGVyLm5leHQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGVudW1DYXRlZ29yeVJhbmdlQ2xvc3VyZUNhdGVnb3J5KHQsIHRlbXAubV9jb2xsYXRvcl8sIGNvbGVpdGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0YXJ0LCBlbGVtZW50LmxpbWl0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc1VDQUNvbXBsZXRlSWdub3JhYmxlcyhCdWlsZFRhYmxlIHQpIAorICAgIHsKKyAgICAgICAgVHJpZUl0ZXJhdG9yIHRyaWVpdGVyYXRvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBUcmllSXRlcmF0b3IoUnVsZUJhc2VkQ29sbGF0b3IuVUNBXy5tX3RyaWVfKTsKKyAgICAgICAgUmFuZ2VWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQgZWxlbWVudCA9IG5ldyBSYW5nZVZhbHVlSXRlcmF0b3IuRWxlbWVudCgpOworICAgICAgICB3aGlsZSAodHJpZWl0ZXJhdG9yLm5leHQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGludCBzdGFydCA9IGVsZW1lbnQuc3RhcnQ7CisgICAgICAgICAgICBpbnQgbGltaXQgPSBlbGVtZW50LmxpbWl0OworICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUgPT0gMCkgeworICAgICAgICAgICAgICAgIHdoaWxlIChzdGFydCA8IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIGludCBDRSA9IHQubV9tYXBwaW5nXy5nZXRWYWx1ZShzdGFydCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDRSA9PSBDRV9OT1RfRk9VTkRfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX2lzVGhhaV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fcHJlZml4XyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX3VjaGFyc18gPSBVQ2hhcmFjdGVyLnRvU3RyaW5nKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fY1BvaW50c18gPSBtX3V0aWxFbGVtZW50Xy5tX3VjaGFyc187CisgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxFbGVtZW50Xy5tX2NQb2ludHNPZmZzZXRfID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fQ0VMZW5ndGhfID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEVsZW1lbnRfLm1fQ0VzX1swXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRBbkVsZW1lbnQodCwgbV91dGlsRWxlbWVudF8pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdGlvblJ1bGVQYXJzZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdGlvblJ1bGVQYXJzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmNhNjVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0aW9uUnVsZVBhcnNlci5qYXZhCkBAIC0wLDAgKzEsMTkyOCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdGlvblJ1bGVQYXJzZXIuamF2YSx2ICQgCisqICREYXRlOiAyMDAyLzExLzIxIDIzOjQ4OjM3ICQgCisqICRSZXZpc2lvbjogMS4xMCAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyUHJvcGVydHk7CisKKy8qKgorKiBDbGFzcyBmb3IgcGFyc2luZyBjb2xsYXRpb24gcnVsZXMsIHByb2R1Y2VzIGEgbGlzdCBvZiB0b2tlbnMgdGhhdCB3aWxsIGJlIAorKiB0dXJuZWQgaW50byBjb2xsYXRpb24gZWxlbWVudHMKKyogQGF1dGhvciBTeW4gV2VlIFF1ZWsKKyogQHNpbmNlIHJlbGVhc2UgMi4yLCBKdW5lIDcgMjAwMgorKiBAZHJhZnQgMi4yCisqLworZmluYWwgY2xhc3MgQ29sbGF0aW9uUnVsZVBhcnNlcgoreyAgICAgCisJLy8gcHVibGljIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvLyBwYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQorCS8qKgorICAgICAqIDxwPlJ1bGVCYXNlZENvbGxhdG9yIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgdGhlIHJ1bGVzLiAKKyAgICAgKiBQbGVhc2Ugc2VlIFJ1bGVCYXNlZENvbGxhdG9yIGNsYXNzIGRlc2NyaXB0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIAorICAgICAqIGNvbGxhdGlvbiBydWxlIHN5bnRheC48L3A+CisgICAgICogQHNlZSBqYXZhLnV0aWwuTG9jYWxlCisgICAgICogQHBhcmFtIHJ1bGVzIHRoZSBjb2xsYXRpb24gcnVsZXMgdG8gYnVpbGQgdGhlIGNvbGxhdGlvbiB0YWJsZSBmcm9tLgorICAgICAqIEBleGNlcHRpb24gUGFyc2VFeGNlcHRpb24gdGhyb3duIHdoZW4gYXJndW1lbnQgcnVsZXMgaGF2ZSBhbiBpbnZhbGlkIAorICAgICAqICAgICAgICAgICAgc3ludGF4LgorICAgICAqIEBkcmFmdCAyLjIKKyAgICAgKi8KKyAgICBDb2xsYXRpb25SdWxlUGFyc2VyKFN0cmluZyBydWxlcykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uCisgICAgeworICAgICAgICBleHRyYWN0U2V0c0Zyb21SdWxlcyhydWxlcyk7CisgICAgICAgIG1fc291cmNlXyA9IG5ldyBTdHJpbmdCdWZmZXIoTm9ybWFsaXplci5kZWNvbXBvc2UocnVsZXMsIGZhbHNlKS50cmltKCkpOworICAgICAgICBtX3J1bGVzXyA9IG1fc291cmNlXy50b1N0cmluZygpOworICAgICAgICBtX2N1cnJlbnRfID0gMDsKKyAgICAgICAgbV9leHRyYUN1cnJlbnRfID0gbV9zb3VyY2VfLmxlbmd0aCgpOworICAgICAgICBtX3ZhcmlhYmxlVG9wXyA9IG51bGw7CisgICAgICAgIG1fcGFyc2VkVG9rZW5fID0gbmV3IFBhcnNlZFRva2VuKCk7CisgICAgICAgIG1faGFzaFRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgbV9vcHRpb25zXyA9IG5ldyBPcHRpb25TZXQoUnVsZUJhc2VkQ29sbGF0b3IuVUNBXyk7CisgICAgICAgIG1fbGlzdEhlYWRlcl8gPSBuZXcgVG9rZW5MaXN0SGVhZGVyWzUxMl07CisgICAgICAgIG1fcmVzdWx0TGVuZ3RoXyA9IDA7CisgICAgICAgIC8vIGNhbGwgYXNzZW1ibGVUb2tlbkxpc3QoKSBtYW51YWxseSwgc28gdGhhdCB3ZSBjYW4gCisgICAgICAgIC8vIGluaXQgYSBwYXJzZXIgYW5kIG1hbnVhbGx5IHBhcnNlIHRva2VucworCQkvL2Fzc2VtYmxlVG9rZW5MaXN0KCk7CisgICAgfQorICAgIAorCS8vIHBhY2thZ2UgcHJpdmF0ZSBpbm5lciBjbGFzc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogQ29sbGF0aW9uIG9wdGlvbnMgc2V0CisgICAgICovCisgICAgc3RhdGljIGNsYXNzIE9wdGlvblNldCAKKyAgICB7CisJICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgCisJICAgIC8qKgorCSAgICAgKiBJbml0aWFsaXplcyB0aGUgb3B0aW9uIHNldCB3aXRoIHRoZSBhcmd1bWVudCBjb2xsYXRvcnMKKwkgICAgICogQHBhcmFtIGNvbGxhdG9yIG9wdGlvbiB0byB1c2UKKwkgICAgICovCisJICAgIE9wdGlvblNldChSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvcikgCisJICAgIHsKKwkJICAgIG1fdmFyaWFibGVUb3BWYWx1ZV8gPSBjb2xsYXRvci5tX3ZhcmlhYmxlVG9wVmFsdWVfOworCQkgICAgbV9pc0ZyZW5jaENvbGxhdGlvbl8gPSBjb2xsYXRvci5pc0ZyZW5jaENvbGxhdGlvbigpOworCQkgICAgbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8gCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY29sbGF0b3IuaXNBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQoKTsKKwkJICAgIG1fY2FzZUZpcnN0XyA9IGNvbGxhdG9yLm1fY2FzZUZpcnN0XzsKKwkJICAgIG1faXNDYXNlTGV2ZWxfID0gY29sbGF0b3IuaXNDYXNlTGV2ZWwoKTsKKwkJICAgIG1fZGVjb21wb3NpdGlvbl8gPSBjb2xsYXRvci5nZXREZWNvbXBvc2l0aW9uKCk7CisJCSAgICBtX3N0cmVuZ3RoXyA9IGNvbGxhdG9yLmdldFN0cmVuZ3RoKCk7CisJCSAgICBtX2lzSGlyYWdhbmE0XyA9IGNvbGxhdG9yLm1faXNIaXJhZ2FuYTRfOworCSAgICB9CisJICAgIAorCSAgICAvLyBwYWNrYWdlIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgIAorCSAgICBpbnQgbV92YXJpYWJsZVRvcFZhbHVlXzsKKwkgICAgYm9vbGVhbiBtX2lzRnJlbmNoQ29sbGF0aW9uXzsKKwkgICAgLyoqIAorCSAgICAgKiBBdHRyaWJ1dGUgZm9yIGhhbmRsaW5nIHZhcmlhYmxlIGVsZW1lbnRzCisJICAgICAqLworCSAgICBib29sZWFuIG1faXNBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWRfOyAKKwkgICAgLyoqIAorCSAgICAgKiB3aG8gZ29lcyBmaXJzdCwgbG93ZXIgY2FzZSBvciB1cHBlcmNhc2UgCisJICAgICAqLworCSAgICBpbnQgbV9jYXNlRmlyc3RfOyAgICAgICAgIAorCSAgICAvKiogCisJICAgICAqIGRvIHdlIGhhdmUgYW4gZXh0cmEgY2FzZSBsZXZlbCAKKwkgICAgICovCisJICAgIGJvb2xlYW4gbV9pc0Nhc2VMZXZlbF87ICAgICAgICAgCisJICAgIC8qKiAKKwkgICAgICogYXR0cmlidXRlIGZvciBub3JtYWxpemF0aW9uIAorCSAgICAgKi8KKwkgICAgaW50IG1fZGVjb21wb3NpdGlvbl87IAorCSAgICAvKiogCisJICAgICAqIGF0dHJpYnV0ZSBmb3Igc3RyZW5ndGgKKwkgICAgICovCisJICAgIGludCBtX3N0cmVuZ3RoXzsgICAgICAgICAgCisJICAgIC8qKiAKKwkgICAgICogYXR0cmlidXRlIGZvciBzcGVjaWFsIEhpcmFnYW5hIAorCSAgICAgKi8KKwkgICAgYm9vbGVhbiBtX2lzSGlyYWdhbmE0XzsgICAgICAgICAKKyAgICB9OworICAgIAorICAgIC8qKgorICAgICAqIExpc3Qgb2YgdG9rZW5zIHVzZWQgYnkgdGhlIGNvbGxhdGlvbiBydWxlcworICAgICAqLworICAgIHN0YXRpYyBjbGFzcyBUb2tlbkxpc3RIZWFkZXIKKyAgICB7CisgICAgICAgIFRva2VuIG1fZmlyc3RfOworICAgICAgICBUb2tlbiBtX2xhc3RfOworICAgICAgICBUb2tlbiBtX3Jlc2V0XzsKKyAgICAgICAgYm9vbGVhbiBtX2luZGlyZWN0XzsKKyAgICAgICAgaW50IG1fYmFzZUNFXzsKKyAgICAgICAgaW50IG1fYmFzZUNvbnRDRV87CisgICAgICAgIGludCBtX25leHRDRV87CisgICAgICAgIGludCBtX25leHRDb250Q0VfOworICAgICAgICBpbnQgbV9wcmV2aW91c0NFXzsKKyAgICAgICAgaW50IG1fcHJldmlvdXNDb250Q0VfOworICAgICAgICBpbnQgbV9wb3NfW10gPSBuZXcgaW50W0NvbGxhdG9yLklERU5USUNBTCArIDFdOworICAgICAgICBpbnQgbV9nYXBzTG9fW10gPSBuZXcgaW50WzMgKiAoQ29sbGF0b3IuVEVSVElBUlkgKyAxKV07CisgICAgICAgIGludCBtX2dhcHNIaV9bXSA9IG5ldyBpbnRbMyAqIChDb2xsYXRvci5URVJUSUFSWSArIDEpXTsKKyAgICAgICAgaW50IG1fbnVtU3RyX1tdID0gbmV3IGludFszICogKENvbGxhdG9yLlRFUlRJQVJZICsgMSldOworICAgICAgICBUb2tlbiBtX2ZTdHJUb2tlbl9bXSA9IG5ldyBUb2tlbltDb2xsYXRvci5URVJUSUFSWSArIDFdOworICAgICAgICBUb2tlbiBtX2xTdHJUb2tlbl9bXSA9IG5ldyBUb2tlbltDb2xsYXRvci5URVJUSUFSWSArIDFdOworICAgIH07CisgICAgCisgICAgLyoqCisgICAgICogVG9rZW4gd3JhcHBlciBmb3IgY29sbGF0aW9uIHJ1bGVzCisgICAgICovICAgCisgICAgc3RhdGljIGNsYXNzIFRva2VuIAorICAgIHsKKyAgICAgICAvLyBwYWNrYWdlIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIAorICAgICAgIGludCBtX0NFX1tdOworICAgICAgIGludCBtX0NFTGVuZ3RoXzsKKyAgICAgICBpbnQgbV9leHBDRV9bXTsKKyAgICAgICBpbnQgbV9leHBDRUxlbmd0aF87CisgICAgICAgaW50IG1fc291cmNlXzsKKyAgICAgICBpbnQgbV9leHBhbnNpb25fOworICAgICAgIGludCBtX3ByZWZpeF87CisgICAgICAgaW50IG1fc3RyZW5ndGhfOworICAgICAgIGludCBtX3RvSW5zZXJ0XzsKKyAgICAgICBpbnQgbV9wb2xhcml0eV87IC8vIDEgZm9yIDwsIDw8LCA8PDwsICwgOyBhbmQgMCBmb3IgPiwgPj4sID4+PgorICAgICAgIFRva2VuTGlzdEhlYWRlciBtX2xpc3RIZWFkZXJfOworICAgICAgIFRva2VuIG1fcHJldmlvdXNfOworICAgICAgIFRva2VuIG1fbmV4dF87CisgICAgICAgU3RyaW5nQnVmZmVyIG1fcnVsZXNfOworICAgICAgIAorICAgICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgCisgICAgICAgVG9rZW4oKSAKKyAgICAgICB7CisgICAgICAgICAgIG1fQ0VfID0gbmV3IGludFsxMjhdOworICAgICAgICAgICBtX2V4cENFXyA9IG5ldyBpbnRbMTI4XTsKKyAgICAgICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYWxzbyBoYW5kbGUgcmV2ZXJzZQorICAgICAgICAgICBtX3BvbGFyaXR5XyA9IFRPS0VOX1BPTEFSSVRZX1BPU0lUSVZFXzsgCisgICAgICAgICAgIG1fbmV4dF8gPSBudWxsOworICAgICAgICAgICBtX3ByZXZpb3VzXyA9IG51bGw7CisgICAgICAgICAgIG1fQ0VMZW5ndGhfID0gMDsKKyAgICAgICAgICAgbV9leHBDRUxlbmd0aF8gPSAwOworICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAvLyBwYWNrYWdlIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIAorICAgICAgIC8qKgorICAgICAgICAqIEhhc2hjb2RlIGNhbGN1bGF0aW9uIGZvciB0b2tlbgorICAgICAgICAqIEByZXR1cm4gdGhlIGhhc2hjb2RlCisgICAgICAgICovCisgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpCisgICAgICAgeworICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKwkgICAgICAgaW50IGxlbiA9IChtX3NvdXJjZV8gJiAweEZGMDAwMDAwKSA+Pj4gMjQ7CisJICAgICAgIGludCBpbmMgPSAoKGxlbiAtIDMyKSAvIDMyKSArIDE7CisJICAgICAgICAKKwkgICAgICAgaW50IHN0YXJ0ID0gbV9zb3VyY2VfICYgMHgwMEZGRkZGRjsKKwkgICAgICAgaW50IGxpbWl0ID0gc3RhcnQgKyBsZW47ICAgIAorCQorCSAgICAgICB3aGlsZSAoc3RhcnQgPCBsaW1pdCkgeworCSAgICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCAqIDM3KSArIG1fcnVsZXNfLmNoYXJBdChzdGFydCk7CisJICAgICAgICAgICBzdGFydCArPSBpbmM7CisJICAgICAgIH0KKwkgICAgICAgcmV0dXJuIHJlc3VsdDsKKwkgICB9CisJCisJICAgLyoqCisJICAgICogRXF1YWxzIGNhbGN1bGF0aW9uCisJICAgICogQHBhcmFtIHRhcmdldCBvYmplY3QgdG8gY29tcGFyZQorCSAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0YXJnZXQgaXMgdGhlIHNhbWUgYXMgdGhpcyBvYmplY3QKKwkgICAgKi8KKwkgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IHRhcmdldCkKKwkgICB7CisJICAgICAgIGlmICh0YXJnZXQgPT0gdGhpcykgeworCSAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgIH0KKwkgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFRva2VuKSB7CisJICAgICAgICAgICBUb2tlbiB0ID0gKFRva2VuKXRhcmdldDsKKwkJCSAgIGludCBzc3RhcnQgPSBtX3NvdXJjZV8gJiAweDAwRkZGRkZGOworCQkJICAgaW50IHRzdGFydCA9IHQubV9zb3VyY2VfICYgMHgwMEZGRkZGRjsKKwkJCSAgIGludCBzbGltaXQgPSAobV9zb3VyY2VfICYgMHhGRjAwMDAwMCkgPj4gMjQ7CisJCQkgICBpbnQgdGxpbWl0ID0gKG1fc291cmNlXyAmIDB4RkYwMDAwMDApID4+IDI0OworCQkJICAgCisJCQkgICBpbnQgZW5kID0gc3N0YXJ0ICsgc2xpbWl0IC0gMTsKKwkJCQorCQkJICAgaWYgKG1fc291cmNlXyA9PSAwIHx8IHQubV9zb3VyY2VfID09IDApIHsKKwkJCSAgICAgICByZXR1cm4gZmFsc2U7CisJCQkgICB9CisJCQkgICBpZiAoc2xpbWl0ICE9IHRsaW1pdCkgeworCQkJICAgICAgIHJldHVybiBmYWxzZTsKKwkJCSAgIH0KKwkJCSAgIGlmIChtX3NvdXJjZV8gPT0gdC5tX3NvdXJjZV8pIHsKKwkJCSAgICAgICByZXR1cm4gdHJ1ZTsKKwkJCSAgIH0KKyAgICAgICAgICAgICAgIAorCQkJICAgd2hpbGUgKHNzdGFydCA8IGVuZCAKKwkJCSAgICAgICAgICAmJiBtX3J1bGVzXy5jaGFyQXQoc3N0YXJ0KSA9PSB0Lm1fcnVsZXNfLmNoYXJBdCh0c3RhcnQpKSAKKwkgICAgICAgICAgIHsKKwkgICAgICAgICAgICAgICArKyBzc3RhcnQ7CisJICAgICAgICAgICAgICAgKysgdHN0YXJ0OworCSAgICAgICAgICAgfQorCQkJICAgaWYgKG1fcnVsZXNfLmNoYXJBdChzc3RhcnQpID09IHQubV9ydWxlc18uY2hhckF0KHRzdGFydCkpIHsKKwkJCSAgICAgICByZXR1cm4gdHJ1ZTsKKwkJCSAgIH0KKwkgICAgICAgfSAgICAKKwkgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisgICAgfTsKKyAgICAKKyAgICAvLyBwYWNrYWdlIHByaXZhdGUgZGF0YSBtZW1iZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIEluZGljYXRvciB0aGF0IHRoZSB0b2tlbiBpcyByZXNldHRlZCB5ZXQsIGllICYgaW4gdGhlIHJ1bGVzCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBUT0tFTl9SRVNFVF8gPSAweERFQURCRUVGOworICAgIAorICAgIC8qKgorICAgICAqIFNpemUgb2YgdGhlIG51bWJlciBvZiB0b2tlbnMKKyAgICAgKi8KKyAgICBpbnQgbV9yZXN1bHRMZW5ndGhfOworICAgIC8qKgorICAgICAqIExpc3Qgb2YgcGFyc2VkIHRva2VucworICAgICAqLworICAgIFRva2VuTGlzdEhlYWRlciBtX2xpc3RIZWFkZXJfW107CisgICAgLyoqCisgICAgICogVmFyaWFibGUgdG9wIHRva2VuCisgICAgICovCisgICAgVG9rZW4gbV92YXJpYWJsZVRvcF87CisgICAgLyoqCisgICAgICogQ29sbGF0aW9uIG9wdGlvbnMKKyAgICAgKi8KKyAgICBPcHRpb25TZXQgbV9vcHRpb25zXzsKKyAgICAvKioKKyAgICAgKiBOb3JtYWxpemVkIGNvbGxhdGlvbiBydWxlcyB3aXRoIHNvbWUgZXh0cmEgY2hhcmFjdGVycworICAgICAqLworICAgIFN0cmluZ0J1ZmZlciBtX3NvdXJjZV87CisgICAgLyoqCisgICAgICogSGFzaCB0YWJsZSB0byBrZWVwIGFsbCB0b2tlbnMKKyAgICAgKi8KKyAgICBIYXNodGFibGUgbV9oYXNoVGFibGVfOworICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgdm9pZCBzZXREZWZhdWx0T3B0aW9uc0luQ29sbGF0b3IoUnVsZUJhc2VkQ29sbGF0b3IgY29sbGF0b3IpCisgICAgeworICAgICAgICBjb2xsYXRvci5tX2RlZmF1bHRTdHJlbmd0aF8gPSBtX29wdGlvbnNfLm1fc3RyZW5ndGhfOworICAgICAgICBjb2xsYXRvci5tX2RlZmF1bHREZWNvbXBvc2l0aW9uXyA9IG1fb3B0aW9uc18ubV9kZWNvbXBvc2l0aW9uXzsKKyAgICAgICAgY29sbGF0b3IubV9kZWZhdWx0SXNGcmVuY2hDb2xsYXRpb25fID0gbV9vcHRpb25zXy5tX2lzRnJlbmNoQ29sbGF0aW9uXzsKKyAgICAgICAgY29sbGF0b3IubV9kZWZhdWx0SXNBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWRfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtX29wdGlvbnNfLm1faXNBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWRfOworICAgICAgICBjb2xsYXRvci5tX2RlZmF1bHRJc0Nhc2VMZXZlbF8gPSBtX29wdGlvbnNfLm1faXNDYXNlTGV2ZWxfOworICAgICAgICBjb2xsYXRvci5tX2RlZmF1bHRDYXNlRmlyc3RfID0gbV9vcHRpb25zXy5tX2Nhc2VGaXJzdF87CisgICAgICAgIGNvbGxhdG9yLm1fZGVmYXVsdElzSGlyYWdhbmE0XyA9IG1fb3B0aW9uc18ubV9pc0hpcmFnYW5hNF87CisgICAgICAgIGNvbGxhdG9yLm1fZGVmYXVsdFZhcmlhYmxlVG9wVmFsdWVfID0gbV9vcHRpb25zXy5tX3ZhcmlhYmxlVG9wVmFsdWVfOworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGlubmVyIGNsYXNzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKiAKKyAgICAgKiBUaGlzIGlzIGEgdG9rZW4gdGhhdCBoYXMgYmVlbiBwYXJzZWQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkLiBVc2VkIHRvIAorICAgICAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiB0aGUgcGFyc2VyCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUGFyc2VkVG9rZW4gCisgICAgeworICAgICAgICAvLyBwcml2YXRlIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbXB0eSBjb25zdHJ1Y3RvcgorICAgICAgICAgKi8KKyAgICAgICAgUGFyc2VkVG9rZW4oKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NoYXJzTGVuXyA9IDA7CisgICAgICAgICAgICBtX2NoYXJzT2Zmc2V0XyA9IDA7CisgICAgICAgICAgICBtX2V4dGVuc2lvbkxlbl8gPSAwOworICAgICAgICAgICAgbV9leHRlbnNpb25PZmZzZXRfID0gMDsKKyAgICAgICAgICAgIG1fcHJlZml4TGVuXyA9IDA7CisgICAgICAgICAgICBtX3ByZWZpeE9mZnNldF8gPSAwOworICAgICAgICAgICAgbV9mbGFnc18gPSAwOworICAgICAgICAgICAgbV9zdHJlbmd0aF8gPSBUT0tFTl9VTlNFVF87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHByaXZhdGUgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgaW50IG1fc3RyZW5ndGhfOworICAgICAgICBpbnQgbV9jaGFyc09mZnNldF87CisgICAgICAgIGludCBtX2NoYXJzTGVuXzsKKyAgICAgICAgaW50IG1fZXh0ZW5zaW9uT2Zmc2V0XzsKKyAgICAgICAgaW50IG1fZXh0ZW5zaW9uTGVuXzsKKyAgICAgICAgaW50IG1fcHJlZml4T2Zmc2V0XzsKKyAgICAgICAgaW50IG1fcHJlZml4TGVuXzsKKyAgICAgICAgY2hhciBtX2ZsYWdzXzsKKyAgICAgICAgY2hhciBtX2luZGlyZWN0SW5kZXhfOworICAgIH07CisgICAgCisgICAgLyoqCisgICAgICogQm91bmRhcnkgd3JhcHBlcnMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbmRpcmVjdEJvdW5kYXJpZXMgCisgICAgeworICAgICAgICAvLyBwYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICBJbmRpcmVjdEJvdW5kYXJpZXMoaW50IHN0YXJ0Y2VbXSwgaW50IGxpbWl0Y2VbXSkgCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNldCB2YWx1ZXMgZm9yIHRoZSB0b3AgLSBUT0RPOiBvbmNlIHdlIGhhdmUgdmFsdWVzIGZvciBhbGwgdGhlIAorICAgICAgICAgICAgLy8gaW5kaXJlY3RzLCB3ZSBhcmUgZ29pbmcgdG8gaW5pdGFsaXplIGhlcmUuIAorICAgICAgICAgICAgbV9zdGFydENFXyA9IHN0YXJ0Y2VbMF07CisgICAgICAgICAgICBtX3N0YXJ0Q29udENFXyA9IHN0YXJ0Y2VbMV07CisgICAgICAgICAgICBpZiAobGltaXRjZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbV9saW1pdENFXyA9IGxpbWl0Y2VbMF07CisgICAgICAgICAgICAgICAgbV9saW1pdENvbnRDRV8gPSBsaW1pdGNlWzFdOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICBtX2xpbWl0Q0VfID0gMDsKKyAgICAgICAgICAgICAgICBtX2xpbWl0Q29udENFXyA9IDA7IAorICAgICAgICAgICAgfSAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gcGFja2FnZSBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKwkgICAgaW50IG1fc3RhcnRDRV87CisJICAgIGludCBtX3N0YXJ0Q29udENFXzsKKwkgICAgaW50IG1fbGltaXRDRV87CisJICAgIGludCBtX2xpbWl0Q29udENFXzsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQ29sbGF0aW9uIG9wdGlvbiBydWxlIHRhZworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFRva2VuT3B0aW9uCisgICAgeworICAgIAkvLyBwYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCQorICAgIAlUb2tlbk9wdGlvbihTdHJpbmcgbmFtZSwgaW50IGF0dHJpYnV0ZSwgU3RyaW5nIHN1Ym9wdGlvbnNbXSwKKyAgICAJICAgICAgICAgICAgaW50IHN1Ym9wdGlvbmF0dHJpYnV0ZXZhbHVlW10pIAorICAgIAl7CisgICAgCQltX25hbWVfID0gbmFtZTsKKyAgICAJCW1fYXR0cmlidXRlXyA9IGF0dHJpYnV0ZTsKKyAgICAgICAgCW1fc3ViT3B0aW9uc18gPSBzdWJvcHRpb25zOworICAgICAgICAJbV9zdWJPcHRpb25BdHRyaWJ1dGVWYWx1ZXNfID0gc3Vib3B0aW9uYXR0cmlidXRldmFsdWU7CQkKKyAgICAJfQorICAgIAkKKyAgICAJLy8gcGFja2FnZSBwcml2YXRlIGRhdGEgbWVtYmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAkKKyAgICAJcHJpdmF0ZSBTdHJpbmcgbV9uYW1lXzsKKyAgICAJcHJpdmF0ZSBpbnQgbV9hdHRyaWJ1dGVfOworICAgICAgICBwcml2YXRlIFN0cmluZyBtX3N1Yk9wdGlvbnNfW107CisgICAgICAgIHByaXZhdGUgaW50IG1fc3ViT3B0aW9uQXR0cmlidXRlVmFsdWVzX1tdOworICAgIH07CisgICAgCisgICAgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEN1cnJlbnQgcGFyc2VkIHRva2VuCisgICAgICovCisgICAgcHJpdmF0ZSBQYXJzZWRUb2tlbiBtX3BhcnNlZFRva2VuXzsKKyAgICAvKioKKyAgICAgKiBDb2xsYXRpb24gcnVsZQorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIG1fcnVsZXNfOworICAgIHByaXZhdGUgaW50IG1fY3VycmVudF87CisgICAgLyoqCisgICAgICogRW5kIG9mIHRoZSBvcHRpb24gd2hpbGUgcmVhZGluZy4gCisgICAgICogTmVlZCBpdCBmb3IgVW5pY29kZVNldCByZWFkaW5nIHN1cHBvcnQuIAorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fb3B0aW9uRW5kXzsKKyAgICAvKioKKyAgICAgKiBDdXJyZW50IG9mZnNldCBpbiBtX3NvdXJjZQorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fc291cmNlTGltaXRfOworICAgIC8qKgorICAgICAqIE9mZnNldCB0byBtX3NvdXJjZV8gb2ZyIHRoZSBleHRyYSBleHBhbnNpb24gY2hhcmFjdGVycworICAgICAqLworICAgIHByaXZhdGUgaW50IG1fZXh0cmFDdXJyZW50XzsKKyAgICAKKyAgICAvKiogCisgICAgICogVW5pY29kZVNldCB0aGF0IGNvbnRhaW5zIGNvZGUgcG9pbnRzIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBVQ0EKKyAgICAgKi8KKyAgICBVbmljb2RlU2V0IG1fY29weVNldF87CisgICAgCisgICAgLyoqCisgICAgICogVW5pY29kZVNldCB0aGF0IGNvbnRhaW5zIGNvZGUgcG9pbnRzIGZvciB3aGljaCB3ZSB3YW50IHRvIHJlbW92ZQorICAgICAqIFVDQSBjb250cmFjdGlvbnMuIEl0IGltcGxpZXMgY29weWluZyBvZiB0aGVzZSBjb2RlIHBvaW50cyBmcm9tIAorICAgICAqIHRoZSBVQ0EuCisgICAgICovCisgICAgVW5pY29kZVNldCBtX3JlbW92ZVNldF87CisgICAgLyoqIAorICAgICAqIFRoaXMgaXMgc3BhY2UgZm9yIHRoZSBleHRyYSBzdHJpbmdzIHRoYXQgbmVlZCB0byBiZSB1bnF1b3RlZCBkdXJpbmcgdGhlIAorICAgICAqIHBhcnNpbmcgb2YgdGhlIHJ1bGVzIAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT0tFTl9FWFRSQV9SVUxFX1NQQUNFX1NJWkVfID0gMjA0ODsKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0b3IgdGhhdCB0aGUgdG9rZW4gaXMgbm90IHNldCB5ZXQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVE9LRU5fVU5TRVRfID0gMHhGRkZGRkZGRjsKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0b3IgdGhhdCB0aGUgcnVsZSBpcyBpbiB0aGUgPiBwb2xhcml0eSwgaWUgZXZlcnl0aGluZyBvbiB0aGUgCisgICAgICogcmlnaHQgb2YgdGhlIHJ1bGUgaXMgbGVzcyB0aGFuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRPS0VOX1BPTEFSSVRZX05FR0FUSVZFXyA9IDA7CisgICAgLyoqCisgICAgICogSW5kaWNhdG9yIHRoYXQgdGhlIHJ1bGUgaXMgaW4gdGhlIDwgcG9sYXJpdHksIGllIGV2ZXJ5dGhpbmcgb24gdGhlIAorICAgICAqIHJpZ2h0IG9mIHRoZSBydWxlIGlzIGdyZWF0ZXIgdGhhbgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT0tFTl9QT0xBUklUWV9QT1NJVElWRV8gPSAxOworICAgIC8qKgorICAgICAqIEZsYWcgbWFzayB0byBkZXRlcm1pbmUgaWYgdG9wIGlzIHNldAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT0tFTl9UT1BfTUFTS18gPSAweDA0OworICAgIC8qKgorICAgICAqIEZsYWcgbWFzayB0byBkZXRlcm1pbmUgaWYgdmFyaWFibGUgdG9wIGlzIHNldAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT0tFTl9WQVJJQUJMRV9UT1BfTUFTS18gPSAweDA4OworICAgIC8qKgorICAgICAqIEZsYWcgbWFzayB0byBkZXRlcm1pbmUgaWYgYSBiZWZvcmUgYXR0cmlidXRlIGlzIHNldAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT0tFTl9CRUZPUkVfID0gMHgwMzsKKyAgICAvKioKKyAgICAgKiBGb3IgdXNlIGluIHBhcnNpbmcgdG9rZW4gb3B0aW9ucworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT0tFTl9TVUNDRVNTX01BU0tfID0gMHgxMDsKKyAgICAKKyAgICAvKiogCisgICAgICogVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvciBmaW5kaW5nIENFIHZhbHVlcyBmb3IgaW5kaXJlY3QgcG9zaXRpb25pbmcuIAorICAgICAqIEluZGlyZWN0IHBvc2l0aW9uaW5nIGlzIGEgbWVjaGFuaXNtIGZvciBhbGxvd2luZyByZXNldHMgb24gc3ltYm9saWMgCisgICAgICogdmFsdWVzLiBJdCBvbmx5IHdvcmtzIGZvciByZXNldHMgYW5kIHlvdSBjYW5ub3QgdGFpbG9yIGluZGlyZWN0IG5hbWVzLgorICAgICAqIEFuIGluZGlyZWN0IG5hbWUgY2FuIGRlZmluZSBlaXRoZXIgYW4gYW5jaG9yIHBvaW50IG9yIGEgcmFuZ2UuIEFuIGFuY2hvciAKKyAgICAgKiBwb2ludCBiZWhhdmVzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGEgY29kZSBwb2ludCBpbiByZXNldCB3b3VsZCwgCisgICAgICogZXhjZXB0IHRoYXQgaXQgY2Fubm90IGJlIHRhaWxvcmVkLiBBIHJhbmdlICh3ZSBjdXJyZW50bHkgb25seSBrbm93IGZvciAKKyAgICAgKiB0aGUgW3RvcF0gcmFuZ2Ugd2lsbCBleHBsaWNpdGx5IHNldCB0aGUgdXBwZXIgYm91bmQgZm9yIGdlbmVyYXRlZCBDRXMsIAorICAgICAqIHRodXMgYWxsb3dpbmcgZm9yIGJldHRlciBjb250cm9sIG92ZXIgaG93IG1hbnkgQ0VzIGNhbiBiZSBzcXVlZXplZCAKKyAgICAgKiBiZXR3ZWVuIGluIHRoZSByYW5nZSB3aXRob3V0IHBlcmZvcm1hbmNlIHBlbmFsdHkuIEluIHRoYXQgcmVzcGVjdCwgd2UgdXNlIAorICAgICAqIFt0b3BdIGZvciB0YWlsb3Jpbmcgb2YgbG9jYWxlcyB0aGF0IHVzZSBDSksgY2hhcmFjdGVycy4gT3RoZXIgaW5kaXJlY3QgCisgICAgICogdmFsdWVzIGFyZSBjdXJyZW50bHkgYSBwdXJlIGNvbnZlbmllbmNlLCB0aGV5IGNhbiBiZSB1c2VkIHRvIGFzc3VyZSB0aGF0IAorICAgICAqIHRoZSBDRXMgd2lsbCBiZSBhbHdheXMgcG9zaXRpb25lZCBpbiB0aGUgc2FtZSBwbGFjZSByZWxhdGl2ZSB0byBhIHBvaW50IAorICAgICAqIHdpdGgga25vd24gcHJvcGVydGllcyAoZS5nLiBmaXJzdCBwcmltYXJ5IGlnbm9yYWJsZSkuIAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEluZGlyZWN0Qm91bmRhcmllcyBJTkRJUkVDVF9CT1VOREFSSUVTX1tdOworICAgCisgICAgLyoqCisgICAgICogSW52ZXJzZSBVQ0EgY29uc3RhbnRzCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOVkVSU0VfU0laRV9NQVNLXyA9IDB4RkZGMDAwMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOVkVSU0VfT0ZGU0VUX01BU0tfID0gMHgwMDBGRkZGRjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5WRVJTRV9TSElGVF9WQUxVRV8gPSAyMDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb2xsYXRpb24gb3B0aW9uIHRhZ3MKKyAgICAgKiBbbGFzdCB2YXJpYWJsZV0gbGFzdCB2YXJpYWJsZSB2YWx1ZSAKKyAgICAgKiBbbGFzdCBwcmltYXJ5IGlnbm9yYWJsZV0gbGFyZ2VzdCBDRSBmb3IgcHJpbWFyeSBpZ25vcmFibGUgCisgICAgICogW2xhc3Qgc2Vjb25kYXJ5IGlnbm9yYWJsZV0gbGFyZ2VzdCBDRSBmb3Igc2Vjb25kYXJ5IGlnbm9yYWJsZSAKKyAgICAgKiBbbGFzdCB0ZXJ0aWFyeSBpZ25vcmFibGVdIGxhcmdlc3QgQ0UgZm9yIHRlcnRpYXJ5IGlnbm9yYWJsZSAKKyAgICAgKiBbdG9wXSBndWFyYW50ZWVkIHRvIGJlIGFib3ZlIGFsbCBpbXBsaWNpdCBDRXMsIGZvciBub3cgYW5kIGluIHRoZSBmdXR1cmUgKGluIDEuOCkgCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVG9rZW5PcHRpb24gUlVMRVNfT1BUSU9OU19bXTsKKwkKKwlzdGF0aWMgCisJeworICAgICAgICBJTkRJUkVDVF9CT1VOREFSSUVTXyA9IG5ldyBJbmRpcmVjdEJvdW5kYXJpZXNbMTVdOworICAgICAgICAvLyBVQ09MX1JFU0VUX1RPUF9WQUxVRQorICAgICAgICBJTkRJUkVDVF9CT1VOREFSSUVTX1swXSA9IG5ldyBJbmRpcmVjdEJvdW5kYXJpZXMoCisgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfQ09OU1RBTlRTXy5MQVNUX05PTl9WQVJJQUJMRV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuVUNBX0NPTlNUQU5UU18uRklSU1RfSU1QTElDSVRfKTsKKyAgICAgICAgLy8gVUNPTF9GSVJTVF9QUklNQVJZX0lHTk9SQUJMRQorICAgICAgICBJTkRJUkVDVF9CT1VOREFSSUVTX1sxXSA9IG5ldyBJbmRpcmVjdEJvdW5kYXJpZXMoCisgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLkZJUlNUX1BSSU1BUllfSUdOT1JBQkxFXywgCisgICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAvLyBVQ09MX0xBU1RfUFJJTUFSWV9JR05PUkFCTEUKKyAgICAgICAgSU5ESVJFQ1RfQk9VTkRBUklFU19bMl0gPSBuZXcgSW5kaXJlY3RCb3VuZGFyaWVzKAorICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfQ09OU1RBTlRTXy5MQVNUX1BSSU1BUllfSUdOT1JBQkxFXywgCisgICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgIAorICAgICAgICAvLyBVQ09MX0ZJUlNUX1NFQ09OREFSWV9JR05PUkFCTEUKKyAgICAgICAgSU5ESVJFQ1RfQk9VTkRBUklFU19bM10gPSBuZXcgSW5kaXJlY3RCb3VuZGFyaWVzKAorICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLkZJUlNUX1NFQ09OREFSWV9JR05PUkFCTEVfLCAKKyAgICAgICAgICAgICAgICAgICBudWxsKTsKKyAgICAgICAgLy8gVUNPTF9MQVNUX1NFQ09OREFSWV9JR05PUkFCTEUKKyAgICAgICAgSU5ESVJFQ1RfQk9VTkRBUklFU19bNF0gPSBuZXcgSW5kaXJlY3RCb3VuZGFyaWVzKAorICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLkxBU1RfU0VDT05EQVJZX0lHTk9SQUJMRV8sIAorICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAvLyBVQ09MX0ZJUlNUX1RFUlRJQVJZX0lHTk9SQUJMRSAKKyAgICAgICAgSU5ESVJFQ1RfQk9VTkRBUklFU19bNV0gPSBuZXcgSW5kaXJlY3RCb3VuZGFyaWVzKAorICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLkZJUlNUX1RFUlRJQVJZX0lHTk9SQUJMRV8sIAorICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAvLyBVQ09MX0xBU1RfVEVSVElBUllfSUdOT1JBQkxFCisgICAgICAgIElORElSRUNUX0JPVU5EQVJJRVNfWzZdID0gbmV3IEluZGlyZWN0Qm91bmRhcmllcygKKyAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfQ09OU1RBTlRTXy5MQVNUX1RFUlRJQVJZX0lHTk9SQUJMRV8sIAorICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAvLyBVQ09MX0ZJUlNUX1ZBUklBQkxFOworICAgICAgICBJTkRJUkVDVF9CT1VOREFSSUVTX1s3XSA9IG5ldyBJbmRpcmVjdEJvdW5kYXJpZXMoCisgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuVUNBX0NPTlNUQU5UU18uRklSU1RfVkFSSUFCTEVfLCAKKyAgICAgICAgICAgICAgICAgICBudWxsKTsgIAorICAgICAgICAvLyBVQ09MX0xBU1RfVkFSSUFCTEUgCisgICAgICAgIElORElSRUNUX0JPVU5EQVJJRVNfWzhdID0gbmV3IEluZGlyZWN0Qm91bmRhcmllcygKKyAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfQ09OU1RBTlRTXy5MQVNUX1ZBUklBQkxFXywgCisgICAgICAgICAgICAgICAgICAgbnVsbCk7CisgICAgICAgIC8vIFVDT0xfRklSU1RfTk9OX1ZBUklBQkxFCisgICAgICAgIElORElSRUNUX0JPVU5EQVJJRVNfWzldID0gbmV3IEluZGlyZWN0Qm91bmRhcmllcygKKyAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfQ09OU1RBTlRTXy5GSVJTVF9OT05fVkFSSUFCTEVfLCAKKyAgICAgICAgICAgICAgICAgICBudWxsKTsKKyAgICAgICAgLy8gVUNPTF9MQVNUX05PTl9WQVJJQUJMRQorICAgICAgICBJTkRJUkVDVF9CT1VOREFSSUVTX1sxMF0gPSBuZXcgSW5kaXJlY3RCb3VuZGFyaWVzKAorICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLkxBU1RfTk9OX1ZBUklBQkxFXywgCisgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuVUNBX0NPTlNUQU5UU18uRklSU1RfSU1QTElDSVRfKTsKKyAgICAgICAgLy8gVUNPTF9GSVJTVF9JTVBMSUNJVCAKKyAgICAgICAgSU5ESVJFQ1RfQk9VTkRBUklFU19bMTFdID0gbmV3IEluZGlyZWN0Qm91bmRhcmllcygKKyAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfQ09OU1RBTlRTXy5GSVJTVF9JTVBMSUNJVF8sCisgICAgICAgICAgICAgICAgICAgbnVsbCk7IAorICAgICAgICAvLyBVQ09MX0xBU1RfSU1QTElDSVQgCisgICAgICAgIElORElSRUNUX0JPVU5EQVJJRVNfWzEyXSA9IG5ldyBJbmRpcmVjdEJvdW5kYXJpZXMoCisgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuVUNBX0NPTlNUQU5UU18uTEFTVF9JTVBMSUNJVF8sIAorICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLkZJUlNUX1RSQUlMSU5HXyk7IAorICAgICAgICAvLyBVQ09MX0ZJUlNUX1RSQUlMSU5HIAorICAgICAgICBJTkRJUkVDVF9CT1VOREFSSUVTX1sxM10gPSBuZXcgSW5kaXJlY3RCb3VuZGFyaWVzKAorICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLkZJUlNUX1RSQUlMSU5HXywgCisgICAgICAgICAgICAgICAgICAgbnVsbCk7IAorICAgICAgICAvLyBVQ09MX0xBU1RfVFJBSUxJTkcgCisgICAgICAgIElORElSRUNUX0JPVU5EQVJJRVNfWzE0XSA9IG5ldyBJbmRpcmVjdEJvdW5kYXJpZXMoCisgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuVUNBX0NPTlNUQU5UU18uTEFTVF9UUkFJTElOR18sIAorICAgICAgICAgICAgICAgICAgIG51bGwpOyAKKyAgICAgICAgSU5ESVJFQ1RfQk9VTkRBUklFU19bMTRdLm1fbGltaXRDRV8gCisgICAgICAgICAgICAgICAgID0gUnVsZUJhc2VkQ29sbGF0b3IuVUNBX0NPTlNUQU5UU18uUFJJTUFSWV9TUEVDSUFMX01JTl8gPDwgMjQ7IAorCisJCVJVTEVTX09QVElPTlNfID0gbmV3IFRva2VuT3B0aW9uWzE5XTsKKwkJU3RyaW5nIG9wdGlvbltdID0geyJub24taWdub3JhYmxlIiwgInNoaWZ0ZWQifTsKKwkJaW50IHZhbHVlW10gPSB7UnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuTk9OX0lHTk9SQUJMRV8sIAorCSAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5TSElGVEVEX307CisJICAgIFJVTEVTX09QVElPTlNfWzBdID0gbmV3IFRva2VuT3B0aW9uKCJhbHRlcm5hdGUiLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5BTFRFUk5BVEVfSEFORExJTkdfLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgdmFsdWUpOworICAgICAgICBvcHRpb24gPSBuZXcgU3RyaW5nWzFdOworICAgICAgICBvcHRpb25bMF0gPSAiMiI7CisgICAgICAgIHZhbHVlID0gbmV3IGludFsxXTsKKyAgICAgICAgdmFsdWVbMF0gPSBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5PTl87CisgICAgICAgIFJVTEVTX09QVElPTlNfWzFdID0gbmV3IFRva2VuT3B0aW9uKCJiYWNrd2FyZHMiLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5GUkVOQ0hfQ09MTEFUSU9OXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgdmFsdWUpOworCSAgICBTdHJpbmcgb2Zmb25vcHRpb25bXSA9IG5ldyBTdHJpbmdbMl07CisgICAgICAgIG9mZm9ub3B0aW9uWzBdID0gIm9mZiI7IAorICAgICAgICBvZmZvbm9wdGlvblsxXSA9ICJvbiI7CisgICAgICAgIGludCBvZmZvbnZhbHVlW10gPSBuZXcgaW50WzJdOworICAgICAgICBvZmZvbnZhbHVlWzBdID0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuT0ZGXzsgCisgICAgICAgIG9mZm9udmFsdWVbMV0gPSBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5PTl87CisgICAgICAgIFJVTEVTX09QVElPTlNfWzJdID0gbmV3IFRva2VuT3B0aW9uKCJjYXNlTGV2ZWwiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5DQVNFX0xFVkVMXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZm9ub3B0aW9uLCBvZmZvbnZhbHVlKTsKKwkgICAgb3B0aW9uID0gbmV3IFN0cmluZ1szXTsKKyAgICAgICAgb3B0aW9uWzBdID0gImxvd2VyIjsgCisgICAgICAgIG9wdGlvblsxXSA9ICJ1cHBlciI7CisgICAgICAgIG9wdGlvblsyXSA9ICJvZmYiOworICAgICAgICB2YWx1ZSA9IG5ldyBpbnRbM107CisgICAgICAgIHZhbHVlWzBdID0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuTE9XRVJfRklSU1RfOworICAgICAgICB2YWx1ZVsxXSA9IFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZVZhbHVlLlVQUEVSX0ZJUlNUXzsKKyAgICAgICAgdmFsdWVbMl0gPSBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5PRkZfOworICAgICAgICBSVUxFU19PUFRJT05TX1szXSA9IG5ldyBUb2tlbk9wdGlvbigiY2FzZUZpcnN0IiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGUuQ0FTRV9GSVJTVF8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCB2YWx1ZSk7CisgICAgICAgIFJVTEVTX09QVElPTlNfWzRdID0gbmV3IFRva2VuT3B0aW9uKCJub3JtYWxpemF0aW9uIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLk5PUk1BTElaQVRJT05fTU9ERV8sCisgICAgICAgIAkgICAgICAgICAgICAgICAgICAgb2Zmb25vcHRpb24sIG9mZm9udmFsdWUpOworCSAgICBSVUxFU19PUFRJT05TX1s1XSA9IG5ldyBUb2tlbk9wdGlvbigiaGlyYWdhbmFRIiwgCisJICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLkhJUkFHQU5BX1FVQVRFUk5BUllfTU9ERV8sCisJICAgIAkgICAgICAgICAgICAgb2Zmb25vcHRpb24sIG9mZm9udmFsdWUpOworICAgICAgICBvcHRpb24gPSBuZXcgU3RyaW5nWzVdOworICAgICAgICBvcHRpb25bMF0gPSAiMSI7IAorICAgICAgICBvcHRpb25bMV0gPSAiMiI7CisgICAgICAgIG9wdGlvblsyXSA9ICIzIjsKKyAgICAgICAgb3B0aW9uWzNdID0gIjQiOyAKKyAgICAgICAgb3B0aW9uWzRdID0gIkkiOworICAgICAgICB2YWx1ZSA9IG5ldyBpbnRbNV07CisgICAgICAgIHZhbHVlWzBdID0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuUFJJTUFSWV87CisgICAgICAgIHZhbHVlWzFdID0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuU0VDT05EQVJZXzsKKyAgICAgICAgdmFsdWVbMl0gPSBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5URVJUSUFSWV87CisgICAgICAgIHZhbHVlWzNdID0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuUVVBVEVSTkFSWV87CisgICAgICAgIHZhbHVlWzRdID0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuSURFTlRJQ0FMXzsKKwkgICAgUlVMRVNfT1BUSU9OU19bNl0gPSBuZXcgVG9rZW5PcHRpb24oInN0cmVuZ3RoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLlNUUkVOR1RIXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgdmFsdWUpOworICAgICAgICBSVUxFU19PUFRJT05TX1s3XSA9IG5ldyBUb2tlbk9wdGlvbigidmFyaWFibGUgdG9wIiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLkxJTUlUXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCk7CisJICAgIFJVTEVTX09QVElPTlNfWzhdID0gbmV3IFRva2VuT3B0aW9uKCJyZWFycmFuZ2UiLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGUuTElNSVRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsKTsKKyAgICAgICAgb3B0aW9uID0gbmV3IFN0cmluZ1szXTsKKyAgICAgICAgb3B0aW9uWzBdID0gIjEiOworICAgICAgICBvcHRpb25bMV0gPSAiMiI7CisgICAgICAgIG9wdGlvblsyXSA9ICIzIjsKKyAgICAgICAgdmFsdWUgPSBuZXcgaW50WzNdOworICAgICAgICB2YWx1ZVswXSA9IFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZVZhbHVlLlBSSU1BUllfOworICAgICAgICB2YWx1ZVsxXSA9IFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZVZhbHVlLlNFQ09OREFSWV87CisgICAgICAgIHZhbHVlWzJdID0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuVEVSVElBUllfOworCSAgICBSVUxFU19PUFRJT05TX1s5XSA9IG5ldyBUb2tlbk9wdGlvbigiYmVmb3JlIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLkxJTUlUXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCB2YWx1ZSk7CisJICAgIFJVTEVTX09QVElPTlNfWzEwXSA9IG5ldyBUb2tlbk9wdGlvbigidG9wIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLkxJTUlUXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCk7CisgICAgICAgIFN0cmluZyBmaXJzdGxhc3RvcHRpb25bXSA9IG5ldyBTdHJpbmdbN107CisgICAgICAgIGZpcnN0bGFzdG9wdGlvblswXSA9ICJwcmltYXJ5IjsKKyAgICAgICAgZmlyc3RsYXN0b3B0aW9uWzFdID0gInNlY29uZGFyeSI7CisgICAgICAgIGZpcnN0bGFzdG9wdGlvblsyXSA9ICJ0ZXJ0aWFyeSI7CisgICAgICAgIGZpcnN0bGFzdG9wdGlvblszXSA9ICJ2YXJpYWJsZSI7CisgICAgICAgIGZpcnN0bGFzdG9wdGlvbls0XSA9ICJyZWd1bGFyIjsKKyAgICAgICAgZmlyc3RsYXN0b3B0aW9uWzVdID0gImltcGxpY2l0IjsKKyAgICAgICAgZmlyc3RsYXN0b3B0aW9uWzZdID0gInRyYWlsaW5nIjsKKworICAgICAgICBpbnQgZmlyc3RsYXN0dmFsdWVbXSA9IG5ldyBpbnRbN107CisgICAgICAgIEFycmF5cy5maWxsKGZpcnN0bGFzdHZhbHVlLCBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5QUklNQVJZXyk7CisKKwkgICAgUlVMRVNfT1BUSU9OU19bMTFdID0gbmV3IFRva2VuT3B0aW9uKCJmaXJzdCIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5MSU1JVF8sIAorCSAgICAJICAgICAgICAgICAgICAgICAgICAgIGZpcnN0bGFzdG9wdGlvbiwgZmlyc3RsYXN0dmFsdWUpOworICAgICAgICBSVUxFU19PUFRJT05TX1sxMl0gPSBuZXcgVG9rZW5PcHRpb24oImxhc3QiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGUuTElNSVRfLCAKKwkgICAgCSAgICAgICAgICAgICAgICAgICAgICBmaXJzdGxhc3RvcHRpb24sIGZpcnN0bGFzdHZhbHVlKTsKKyAgICAgICAgUlVMRVNfT1BUSU9OU19bMTNdID0gbmV3IFRva2VuT3B0aW9uKCJvcHRpbWl6ZSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5MSU1JVF8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwpOworICAgICAgICBSVUxFU19PUFRJT05TX1sxNF0gPSBuZXcgVG9rZW5PcHRpb24oInN1cHByZXNzQ29udHJhY3Rpb25zIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLkxJTUlUXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICBSVUxFU19PUFRJT05TX1sxNV0gPSBuZXcgVG9rZW5PcHRpb24oInVuZGVmaW5lZCIsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5MSU1JVF8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwpOworCSAgICBSVUxFU19PUFRJT05TX1sxNl0gPSBuZXcgVG9rZW5PcHRpb24oInNjcmlwdE9yZGVyIiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLkxJTUlUXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCk7CisJICAgIFJVTEVTX09QVElPTlNfWzE3XSA9IG5ldyBUb2tlbk9wdGlvbigiY2hhcnNldG5hbWUiLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGUuTElNSVRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsKTsKKwkgICAgUlVMRVNfT1BUSU9OU19bMThdID0gbmV3IFRva2VuT3B0aW9uKCJjaGFyc2V0IiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLkxJTUlUXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCk7CisJfTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IGRhdGEgbWVtYmVycworICAgICAqLworICAgIHByaXZhdGUgVG9rZW4gbV91dGlsVG9rZW5fID0gbmV3IFRva2VuKCk7CisgICAgcHJpdmF0ZSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgbV9VQ0FDb2xFSXRlcl8gCisgICAgICAgICAgICAgICAgICAgICAgPSBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcigiIik7CisgICAgcHJpdmF0ZSBpbnQgbV91dGlsQ0VCdWZmZXJfW10gPSBuZXcgaW50WzJdOworICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBBc3NlbWJsZXMgdGhlIHRva2VuIGxpc3QKKyAgICAgKiBAcGFyYW0KKyAgICAgKiBAZXhjZXB0aW9uIFBhcnNlRXhjZXB0aW9uIHRocm93biB3aGVuIHJ1bGVzIHN5bnRheCBmYWlscworICAgICAqLworICAgIGludCBhc3NlbWJsZVRva2VuTGlzdCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbgorICAgIHsKKwkJVG9rZW4gbGFzdFRva2VuID0gbnVsbDsKKwkgICAgbV9wYXJzZWRUb2tlbl8ubV9zdHJlbmd0aF8gPSBUT0tFTl9VTlNFVF87IAorICAgICAgICBpbnQgc291cmNlbGltaXQgPSBtX3NvdXJjZV8ubGVuZ3RoKCk7CisgICAgICAgIGludCBleHBhbmROZXh0ID0gMDsKKwkJCisgICAgICAgIHdoaWxlIChtX2N1cnJlbnRfIDwgc291cmNlbGltaXQpIHsKKyAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1fcHJlZml4T2Zmc2V0XyA9IDA7CisJCSAgICBpZiAocGFyc2VOZXh0VG9rZW4obGFzdFRva2VuID09IG51bGwpIDwgMCkgeworICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisJCSAgICBjaGFyIHNwZWNzID0gbV9wYXJzZWRUb2tlbl8ubV9mbGFnc187CisJCSAgICBib29sZWFuIHZhcmlhYmxlVG9wID0gKChzcGVjcyAmIFRPS0VOX1ZBUklBQkxFX1RPUF9NQVNLXykgIT0gMCk7CisJCSAgICBib29sZWFuIHRvcCA9ICgoc3BlY3MgJiBUT0tFTl9UT1BfTUFTS18pICE9IDApOworCQkgICAgaW50IGxhc3RTdHJlbmd0aCA9IFRPS0VOX1VOU0VUXzsKKyAgICAgICAgICAgIGlmIChsYXN0VG9rZW4gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxhc3RTdHJlbmd0aCA9IGxhc3RUb2tlbi5tX3N0cmVuZ3RoXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fdXRpbFRva2VuXy5tX3NvdXJjZV8gPSBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXyA8PCAyNCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF87CisgICAgICAgICAgICBtX3V0aWxUb2tlbl8ubV9ydWxlc18gPSBtX3NvdXJjZV87CisgICAgICAgICAgICAvLyA0IExvb2t1cCBlYWNoIHNvdXJjZSBpbiB0aGUgQ2hhcnNUb1Rva2VuIG1hcCwgYW5kIGZpbmQgYSAKKyAgICAgICAgICAgIC8vIHNvdXJjZXRva2VuCisgICAgICAgICAgICBUb2tlbiBzb3VyY2VUb2tlbiA9IChUb2tlbiltX2hhc2hUYWJsZV8uZ2V0KG1fdXRpbFRva2VuXyk7CisgICAgICAgICAgICBpZiAobV9wYXJzZWRUb2tlbl8ubV9zdHJlbmd0aF8gIT0gVE9LRU5fUkVTRVRfKSB7CisJCSAgICAgICAgaWYgKGxhc3RUb2tlbiA9PSBudWxsKSB7IAorCQkgICAgICAgIAkvLyB0aGlzIG1lYW5zIHRoYXQgcnVsZXMgaGF2ZW4ndCBzdGFydGVkIHByb3Blcmx5CisJCSAgICAgICAgICAgIHRocm93UGFyc2VFeGNlcHRpb24obV9zb3VyY2VfLnRvU3RyaW5nKCksIDApOworCQkgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgNiBPdGhlcndpc2UgKHdoZW4gcmVsYXRpb24gIT0gcmVzZXQpCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVRva2VuID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgc291cmNlVG9rZW4gaXMgbnVsbCwgY3JlYXRlIG5ldyBvbmUKKwkJICAgICAgICAgICAgc291cmNlVG9rZW4gPSBuZXcgVG9rZW4oKTsKKyAgICAgCQkgICAgICAgIHNvdXJjZVRva2VuLm1fcnVsZXNfID0gbV9zb3VyY2VfOworCQkgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX3NvdXJjZV8gPSBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXyA8PCAyNCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfOworCQkgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX3ByZWZpeF8gPSBtX3BhcnNlZFRva2VuXy5tX3ByZWZpeExlbl8gPDwgMjQgCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtX3BhcnNlZFRva2VuXy5tX3ByZWZpeE9mZnNldF87CisJCSAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGFsc28gaGFuZGxlIHJldmVyc2UKKwkJICAgICAgICAgICAgc291cmNlVG9rZW4ubV9wb2xhcml0eV8gPSBUT0tFTl9QT0xBUklUWV9QT1NJVElWRV87IAorICAgIAkJICAgICAgICBzb3VyY2VUb2tlbi5tX25leHRfID0gbnVsbDsKKyAJCSAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fcHJldmlvdXNfID0gbnVsbDsKKwkJICAgICAgICAgICAgc291cmNlVG9rZW4ubV9DRUxlbmd0aF8gPSAwOworCQkgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX2V4cENFTGVuZ3RoXyA9IDA7CisJCSAgICAgICAgICAgIG1faGFzaFRhYmxlXy5wdXQoc291cmNlVG9rZW4sIHNvdXJjZVRva2VuKTsKKwkJICAgICAgICB9IAorCQkgICAgICAgIGVsc2UgeworCQkgICAgICAgICAgICAvLyB3ZSBjb3VsZCBoYXZlIGZpc2hlZCBvdXQgYSByZXNldCBoZXJlCisJCSAgICAgICAgICAgIGlmIChzb3VyY2VUb2tlbi5tX3N0cmVuZ3RoXyAhPSBUT0tFTl9SRVNFVF8gCisJCSAgICAgICAgICAgICAgICAmJiBsYXN0VG9rZW4gIT0gc291cmNlVG9rZW4pIHsKKwkJICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSByZW1vdmUgc291cmNlVG9rZW4gZnJvbSB3aGVyZSBpdCB3YXMuCisJCSAgICAgICAgICAgICAgICBpZiAoc291cmNlVG9rZW4ubV9uZXh0XyAhPSBudWxsKSB7CisJCSAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVRva2VuLm1fbmV4dF8ubV9zdHJlbmd0aF8gCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IHNvdXJjZVRva2VuLm1fc3RyZW5ndGhfKSB7CisJCSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fbmV4dF8ubV9zdHJlbmd0aF8gCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNvdXJjZVRva2VuLm1fc3RyZW5ndGhfOworCQkgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX25leHRfLm1fcHJldmlvdXNfIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc291cmNlVG9rZW4ubV9wcmV2aW91c187CisJCSAgICAgICAgICAgICAgICB9IAorCQkgICAgICAgICAgICAgICAgZWxzZSB7CisJCSAgICAgICAgICAgICAgICAgICAgc291cmNlVG9rZW4ubV9saXN0SGVhZGVyXy5tX2xhc3RfIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc291cmNlVG9rZW4ubV9wcmV2aW91c187CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBpZiAoc291cmNlVG9rZW4ubV9wcmV2aW91c18gIT0gbnVsbCkgeworCQkgICAgICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fcHJldmlvdXNfLm1fbmV4dF8gCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc291cmNlVG9rZW4ubV9uZXh0XzsKKwkJICAgICAgICAgICAgICAgIH0gCisJCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkJICAgICAgICAgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX2xpc3RIZWFkZXJfLm1fZmlyc3RfIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNvdXJjZVRva2VuLm1fbmV4dF87CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX25leHRfID0gbnVsbDsKKwkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fcHJldmlvdXNfID0gbnVsbDsKKwkJICAgICAgICAgICAgfQorCQkgICAgICAgIH0KKyAgICAgICAgCQlzb3VyY2VUb2tlbi5tX3N0cmVuZ3RoXyA9IG1fcGFyc2VkVG9rZW5fLm1fc3RyZW5ndGhfOworICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fbGlzdEhlYWRlcl8gPSBsYXN0VG9rZW4ubV9saXN0SGVhZGVyXzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAxLiAgRmluZCB0aGUgc3Ryb25nZXN0IHN0cmVuZ3RoIGluIGVhY2ggbGlzdCwgYW5kIHNldCAKKyAgICAgICAgICAgICAgICAvLyBzdHJvbmdlc3RQIGFuZCBzdHJvbmdlc3ROIGFjY29yZGluZ2x5IGluIHRoZSBoZWFkZXJzLiAKKyAgICAgICAgICAgICAgICBpZiAobGFzdFN0cmVuZ3RoID09IFRPS0VOX1JFU0VUXworICAgICAgICAgICAgICAgICAgICB8fCBzb3VyY2VUb2tlbi5tX2xpc3RIZWFkZXJfLm1fZmlyc3RfID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgTEFTVCBpcyBhIHJlc2V0IGluc2VydCBzb3VyY2VUb2tlbiBpbiB0aGUgbGlzdC4KKwkJCSAgICAgICAgaWYgKHNvdXJjZVRva2VuLm1fbGlzdEhlYWRlcl8ubV9maXJzdF8gPT0gbnVsbCkgeworCQkJICAgICAgICAgICAgc291cmNlVG9rZW4ubV9saXN0SGVhZGVyXy5tX2ZpcnN0XyA9IHNvdXJjZVRva2VuOworCQkJICAgICAgICAgICAgc291cmNlVG9rZW4ubV9saXN0SGVhZGVyXy5tX2xhc3RfID0gc291cmNlVG9rZW47CisJCQkgICAgICAgIH0gCisJCQkgICAgICAgIGVsc2UgeyAvLyB3ZSBuZWVkIHRvIGZpbmQgYSBwbGFjZSBmb3IgdXMKKwkJCSAgICAgICAgICAgICAgIC8vIGFuZCB3ZSdsbCBnZXQgaW4gZnJvbnQgb2YgdGhlIHNhbWUgc3RyZW5ndGgKKwkJCSAgICAgICAgICAgIGlmIChzb3VyY2VUb2tlbi5tX2xpc3RIZWFkZXJfLm1fZmlyc3RfLm1fc3RyZW5ndGhfIAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw9IHNvdXJjZVRva2VuLm1fc3RyZW5ndGhfKSB7CisJCQkgICAgICAgICAgICAgICAgc291cmNlVG9rZW4ubV9uZXh0XyAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc291cmNlVG9rZW4ubV9saXN0SGVhZGVyXy5tX2ZpcnN0XzsKKwkJCSAgICAgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX25leHRfLm1fcHJldmlvdXNfID0gc291cmNlVG9rZW47CisJCQkgICAgICAgICAgICAgICAgc291cmNlVG9rZW4ubV9saXN0SGVhZGVyXy5tX2ZpcnN0XyA9IHNvdXJjZVRva2VuOworCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fcHJldmlvdXNfID0gbnVsbDsKKwkJCSAgICAgICAgICAgIH0gCisJCQkgICAgICAgICAgICBlbHNlIHsKKwkJCSAgICAgICAgICAgICAgICBsYXN0VG9rZW4gPSBzb3VyY2VUb2tlbi5tX2xpc3RIZWFkZXJfLm1fZmlyc3RfOworCQkJICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0VG9rZW4ubV9uZXh0XyAhPSBudWxsIAorCQkJICAgICAgICAgICAgICAgICAgICAgICAmJiBsYXN0VG9rZW4ubV9uZXh0Xy5tX3N0cmVuZ3RoXyAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IHNvdXJjZVRva2VuLm1fc3RyZW5ndGhfKSB7CisJCQkgICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbiA9IGxhc3RUb2tlbi5tX25leHRfOworCQkJICAgICAgICAgICAgICAgIH0KKwkJCSAgICAgICAgICAgICAgICBpZiAobGFzdFRva2VuLm1fbmV4dF8gIT0gbnVsbCkgeworCQkJICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4ubV9uZXh0Xy5tX3ByZXZpb3VzXyA9IHNvdXJjZVRva2VuOworCQkJICAgICAgICAgICAgICAgIH0gCisJCQkgICAgICAgICAgICAgICAgZWxzZSB7CisJCQkgICAgICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fbGlzdEhlYWRlcl8ubV9sYXN0XyAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc291cmNlVG9rZW47CisJCQkgICAgICAgICAgICAgICAgfQorCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fcHJldmlvdXNfID0gbGFzdFRva2VuOworCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fbmV4dF8gPSBsYXN0VG9rZW4ubV9uZXh0XzsKKwkJCSAgICAgICAgICAgICAgICBsYXN0VG9rZW4ubV9uZXh0XyA9IHNvdXJjZVRva2VuOworCQkJICAgICAgICAgICAgfQorCQkJICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlICh3aGVuIExBU1QgaXMgbm90IGEgcmVzZXQpIAorICAgICAgICAgICAgICAgICAgICAvLyBpZiBwb2xhcml0eSAoTEFTVCkgPT0gcG9sYXJpdHkocmVsYXRpb24pLCBpbnNlcnQgCisgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZVRva2VuIGFmdGVyIExBU1QsIG90aGVyd2lzZSBpbnNlcnQgYmVmb3JlLiAKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBpbnNlcnRpbmcgYWZ0ZXIgb3IgYmVmb3JlLCBzZWFyY2ggdG8gdGhlIG5leHQgCisgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIHdpdGggdGhlIHNhbWUgc3RyZW5ndGggaW4gdGhhdCBkaXJlY3Rpb24uIAorICAgICAgICAgICAgICAgICAgICAvLyAoVGhpcyBpcyBjYWxsZWQgcG9zdHBvbmUgaW5zZXJ0aW9uKS4gICAgICAgIAorCQkJICAgICAgICBpZiAoc291cmNlVG9rZW4gIT0gbGFzdFRva2VuKSB7IAorCQkJICAgICAgICAgICAgaWYgKGxhc3RUb2tlbi5tX3BvbGFyaXR5XyA9PSBzb3VyY2VUb2tlbi5tX3BvbGFyaXR5XykgeworCQkJICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0VG9rZW4ubV9uZXh0XyAhPSBudWxsIAorCQkJICAgICAgICAgICAgICAgICAgICAgICAmJiBsYXN0VG9rZW4ubV9uZXh0Xy5tX3N0cmVuZ3RoXyAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gc291cmNlVG9rZW4ubV9zdHJlbmd0aF8pIHsKKwkJCSAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuID0gbGFzdFRva2VuLm1fbmV4dF87CisJCQkgICAgICAgICAgICAgICAgfQorCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fcHJldmlvdXNfID0gbGFzdFRva2VuOworCQkJICAgICAgICAgICAgICAgIGlmIChsYXN0VG9rZW4ubV9uZXh0XyAhPSBudWxsKSB7CisJCQkgICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5tX25leHRfLm1fcHJldmlvdXNfID0gc291cmNlVG9rZW47CisJCQkgICAgICAgICAgICAgICAgfSAKKwkJCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkJCSAgICAgICAgICAgICAgICAgICAgc291cmNlVG9rZW4ubV9saXN0SGVhZGVyXy5tX2xhc3RfID0gc291cmNlVG9rZW47CisJCQkgICAgICAgICAgICAgICAgfQorCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fbmV4dF8gPSBsYXN0VG9rZW4ubV9uZXh0XzsKKwkJCSAgICAgICAgICAgICAgICBsYXN0VG9rZW4ubV9uZXh0XyA9IHNvdXJjZVRva2VuOworCQkJICAgICAgICAgICAgfSAKKwkJCSAgICAgICAgICAgIGVsc2UgeworCQkJICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0VG9rZW4ubV9wcmV2aW91c18gIT0gbnVsbCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgJiYgbGFzdFRva2VuLm1fcHJldmlvdXNfLm1fc3RyZW5ndGhfIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiBzb3VyY2VUb2tlbi5tX3N0cmVuZ3RoXykgeworCQkJICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4gPSBsYXN0VG9rZW4ubV9wcmV2aW91c187CisJCQkgICAgICAgICAgICAgICAgfQorCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fbmV4dF8gPSBsYXN0VG9rZW47CisJCQkgICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbi5tX3ByZXZpb3VzXyAhPSBudWxsKSB7CisJCQkgICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5tX3ByZXZpb3VzXy5tX25leHRfID0gc291cmNlVG9rZW47CisJCQkgICAgICAgICAgICAgICAgfSAKKwkJCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkJCSAgICAgICAgICAgICAgICAgICAgc291cmNlVG9rZW4ubV9saXN0SGVhZGVyXy5tX2ZpcnN0XyAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzb3VyY2VUb2tlbjsKKwkJCSAgICAgICAgICAgICAgICB9CisJCQkgICAgICAgICAgICAgICAgc291cmNlVG9rZW4ubV9wcmV2aW91c18gPSBsYXN0VG9rZW4ubV9wcmV2aW91c187CisJCQkgICAgICAgICAgICAgICAgbGFzdFRva2VuLm1fcHJldmlvdXNfID0gc291cmNlVG9rZW47CisJCQkgICAgICAgICAgICB9CisJCQkgICAgICAgIH0gCisJCQkgICAgICAgIGVsc2UgeyAvLyByZXBlYXRlZCBvbmUgdGhpbmcgdHdpY2UgaW4gcnVsZXMsIHN0YXkgd2l0aCB0aGUgCisJCQkgICAgICAgIAkgICAvLyBzdHJvbmdlciBzdHJlbmd0aCAKKwkJCSAgICAgICAgICAgIGlmIChsYXN0U3RyZW5ndGggPCBzb3VyY2VUb2tlbi5tX3N0cmVuZ3RoXykgeworCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fc3RyZW5ndGhfID0gbGFzdFN0cmVuZ3RoOworCQkJICAgICAgICAgICAgfQorCQkJICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB0b2tlbiB3YXMgYSB2YXJpYWJsZSB0b3AsIHdlJ3JlIGdvbm5hIHB1dCBpdCBpbiAKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVUb3AgPT0gdHJ1ZSAmJiBtX3ZhcmlhYmxlVG9wXyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVG9wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fdmFyaWFibGVUb3BfID0gc291cmNlVG9rZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRyZWF0IHRoZSBleHBhbnNpb25zLgorICAgICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgZXhwYW5zaW9uczogZXhwbGljaXQgKHggLyB5KSBhbmQgCisgICAgICAgICAgICAgICAgLy8gcmVzZXQgYmFzZWQgcHJvcGFnYXRpbmcgZXhwYW5zaW9ucyAKKyAgICAgICAgICAgICAgICAvLyAoJmFiYyAqIGQgKiBlIDw9PiAmYWIgKiBkIC8gYyAqIGUgLyBjKSAKKyAgICAgICAgICAgICAgICAvLyBpZiBib3RoIG9mIHRoZW0gYXJlIGluIGVmZmVjdCBmb3IgYSB0b2tlbiwgdGhleSBhcmUgY29tYmluZWQuCisgICAgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX2V4cGFuc2lvbl8gPSBtX3BhcnNlZFRva2VuXy5tX2V4dGVuc2lvbkxlbl8gPDwgMjQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1fcGFyc2VkVG9rZW5fLm1fZXh0ZW5zaW9uT2Zmc2V0XzsKKyAgICAgICAgICAgICAgIGlmIChleHBhbmROZXh0ICE9IDApIHsKKwkJICAgICAgICAgICBpZiAoc291cmNlVG9rZW4ubV9zdHJlbmd0aF8gPT0gUnVsZUJhc2VkQ29sbGF0b3IuUFJJTUFSWSkgeyAKKwkJICAgICAgICAgICAgICAgLy8gcHJpbWFyeSBzdHJlbmd0aCBraWxscyBvZmYgdGhlIGltcGxpY2l0IGV4cGFuc2lvbiAKKwkJICAgICAgICAgICAgICAgZXhwYW5kTmV4dCA9IDA7CisJCSAgICAgICAgICAgfSAKKwkJICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VUb2tlbi5tX2V4cGFuc2lvbl8gPT0gMCkgeyAKKwkJICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZXhwYW5zaW9uLCBpbXBsaWNpdCBpcyBqdXN0IGFkZGVkIHRvIAorCQkgICAgICAgICAgICAgICAvLyB0aGUgdG9rZW4gCisJCSAgICAgICAgICAgICAgIHNvdXJjZVRva2VuLm1fZXhwYW5zaW9uXyA9IGV4cGFuZE5leHQ7CisJCSAgICAgICAgICAgfSAKKwkJICAgICAgICAgICBlbHNlIHsgCisJCSAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0IGV4cGFuc2lvbi4gCisJCSAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBhIGNvbWJpbmF0aW9uCisJCSAgICAgICAgICAgICAgIGludCBzdGFydCA9IGV4cGFuZE5leHQgJiAweEZGRkZGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUgPSBleHBhbmROZXh0ID4+PiAyNDsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPiAwKSB7CisJCSAgICAgICAgICAgICAgICAgIG1fc291cmNlXy5hcHBlbmQobV9zb3VyY2VfLnN1YnN0cmluZyhzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgc2l6ZSkpOworICAgICAgICAgICAgICAgICAgICAgICB9CisgICAJCSAgICAgICAgICAgICAgIHN0YXJ0ID0gbV9wYXJzZWRUb2tlbl8ubV9leHRlbnNpb25PZmZzZXRfOworCQkgICAgICAgICAgICAgICBtX3NvdXJjZV8uYXBwZW5kKG1fc291cmNlXy5zdWJzdHJpbmcoc3RhcnQsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArIG1fcGFyc2VkVG9rZW5fLm1fZXh0ZW5zaW9uTGVuXykpOworCQkgICAgICAgICAgICAgICBzb3VyY2VUb2tlbi5tX2V4cGFuc2lvbl8gPSAoc2l6ZSAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbV9wYXJzZWRUb2tlbl8ubV9leHRlbnNpb25MZW5fKSA8PCAyNCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbV9leHRyYUN1cnJlbnRfOworCQkgICAgICAgICAgICAgICBtX2V4dHJhQ3VycmVudF8gKz0gc2l6ZSArIG1fcGFyc2VkVG9rZW5fLm1fZXh0ZW5zaW9uTGVuXzsKKwkJICAgICAgICAgICB9CisJCSAgICAgICAgfQorICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGlmIChsYXN0VG9rZW4gIT0gbnVsbCAmJiBsYXN0U3RyZW5ndGggPT0gVE9LRU5fUkVTRVRfKSB7CisJICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyB0b2tlbiB3YXMgYWxzbyBhIHJlc2V0LCB0aGlzIG1lYW5zIHRoYXQgCisJICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgdHdvIGNvbnNlY3V0aXZlIHJlc2V0cyBhbmQgd2Ugd2FudCB0byByZW1vdmUgdGhlIAorCSAgICAgICAgICAgICAgICAvLyBwcmV2aW91cyBvbmUgaWYgZW1wdHkKKwkgICAgICAgICAgICAgICAgaWYgKG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfIC0gMV0ubV9maXJzdF8gPT0gbnVsbCkgeworCSAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHRMZW5ndGhfIC0tOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChzb3VyY2VUb2tlbiA9PSBudWxsKSB7IAorCSAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgcmVzZXQsIGJ1dCBpdCBtaWdodCBzdGlsbCBiZSBzb21ld2hlcmUgaW4gdGhlIAorCSAgICAgICAgICAgICAgICAvLyB0YWlsb3JpbmcsIGluIHNob3J0ZXIgZm9ybQorCSAgICAgICAgICAgICAgICBpbnQgc2VhcmNoQ2hhcnNMZW4gPSBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXzsKKwkgICAgICAgICAgICAgICAgd2hpbGUgKHNlYXJjaENoYXJzTGVuID4gMSAmJiBzb3VyY2VUb2tlbiA9PSBudWxsKSB7CisJICAgICAgICAgICAgICAgICAgICBzZWFyY2hDaGFyc0xlbiAtLTsKKwkgICAgICAgICAgICAgICAgICAgIC8vIGtleSA9IHNlYXJjaENoYXJzTGVuIDw8IDI0IHwgY2hhcnNPZmZzZXQ7CisJCQkgICAgICAgICAgICBtX3V0aWxUb2tlbl8ubV9zb3VyY2VfID0gc2VhcmNoQ2hhcnNMZW4gPDwgMjQgCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfOworCQkJICAgICAgICAgICAgbV91dGlsVG9rZW5fLm1fcnVsZXNfID0gbV9zb3VyY2VfOworCQkJICAgICAgICAgICAgc291cmNlVG9rZW4gPSAoVG9rZW4pbV9oYXNoVGFibGVfLmdldChtX3V0aWxUb2tlbl8pOworCQkJICAgICAgICB9CisJCQkgICAgICAgIGlmIChzb3VyY2VUb2tlbiAhPSBudWxsKSB7CisJCQkgICAgICAgICAgICBleHBhbmROZXh0ID0gKG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fIAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzZWFyY2hDaGFyc0xlbikgPDwgMjQgCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAobV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF8gCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzZWFyY2hDaGFyc0xlbik7CisJCQkgICAgICAgIH0KKwkJCSAgICB9CisJCSAgICAgICAgaWYgKChzcGVjcyAmIFRPS0VOX0JFRk9SRV8pICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRvcCA9PSBmYWxzZSkgeyAKKyAgICAJCSAgICAgICAgICAgIC8vIHdlJ3JlIGRvaW5nIGJlZm9yZSAmIHRoZXJlIGlzIG5vIGluZGlyZWN0aW9uCisgICAgCSAgICAgICAgICAgICAgICBpbnQgc3RyZW5ndGggPSAoc3BlY3MgJiBUT0tFTl9CRUZPUkVfKSAtIDE7CisgICAgCSAgICAgICAgICAgICAgICBpZiAoc291cmNlVG9rZW4gIT0gbnVsbCAKKyAgICAJICAgICAgICAgICAgICAgICAgICAmJiBzb3VyY2VUb2tlbi5tX3N0cmVuZ3RoXyAhPSBUT0tFTl9SRVNFVF8pIHsgCisgICAgCSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIGJlZm9yZSB0aGF0IGlzIGFscmVhZHkgb3JkZXJlZCBpbiB0aGUgVUNBIAorICAgIAkgICAgICAgICAgICAgICAgICAgIC8vIC0gc28gd2UgbmVlZCB0byBnZXQgdGhlIHByZXZpb3VzIHdpdGggZ29vZCBzdHJlbmd0aAorICAgIAkJCSAgICAgICAgICAgIHdoaWxlIChzb3VyY2VUb2tlbi5tX3N0cmVuZ3RoXyA+IHN0cmVuZ3RoIAorICAgIAkJCSAgICAgICAgICAgICAgICAgICAmJiBzb3VyY2VUb2tlbi5tX3ByZXZpb3VzXyAhPSBudWxsKSB7CisgICAgCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuID0gc291cmNlVG9rZW4ubV9wcmV2aW91c187CisgICAgCQkJICAgICAgICAgICAgfQorICAgIAkJCSAgICAgICAgICAgIC8vIGhlcmUsIGVpdGhlciB3ZSBoaXQgdGhlIHN0cmVuZ3RoIG9yIE5VTEwKKyAgICAJCQkgICAgICAgICAgICBpZiAoc291cmNlVG9rZW4ubV9zdHJlbmd0aF8gPT0gc3RyZW5ndGgpIHsKKyAgICAJCQkgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVRva2VuLm1fcHJldmlvdXNfICE9IG51bGwpIHsKKyAgICAJCQkgICAgICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuID0gc291cmNlVG9rZW4ubV9wcmV2aW91c187CisgICAgCQkJICAgICAgICAgICAgICAgIH0gCisgICAgCQkJICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBzdGFydCBvZiBsaXN0CisgICAgCQkJICAgICAgICAgICAgICAgICAgICBzb3VyY2VUb2tlbiAKKyAgICAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgPSBzb3VyY2VUb2tlbi5tX2xpc3RIZWFkZXJfLm1fcmVzZXRfOworICAgIAkJCSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAKKyAgICAJCQkgICAgICAgICAgICB9IAorICAgIAkJCSAgICAgICAgICAgIGVsc2UgeyAvLyB3ZSBoaXQgTlVMTCwgd2Ugc2hvdWxkIGJlIGRvaW5nIHRoZSBlbHNlIHBhcnQgCisgICAgCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNvdXJjZVRva2VuLm1fbGlzdEhlYWRlcl8ubV9yZXNldF87CisgICAgCQkJICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuID0gZ2V0VmlyZ2luQmVmb3JlKHNvdXJjZVRva2VuLCAKKyAgICAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZW5ndGgpOworICAgIAkJCSAgICAgICAgICAgIH0KKyAgICAJCQkgICAgICAgIH0gCisgICAgCQkJICAgICAgICBlbHNlIHsKKyAgICAJCQkgICAgICAgICAgICBzb3VyY2VUb2tlbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBnZXRWaXJnaW5CZWZvcmUoc291cmNlVG9rZW4sIHN0cmVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBib3RoIGJlZm9yZSBhbmQgaW5kaXJlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9IGZhbHNlOyAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXSA9IG5ldyBUb2tlbkxpc3RIZWFkZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX3ByZXZpb3VzQ0VfID0gMDsgCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9wcmV2aW91c0NvbnRDRV8gPSAwOyAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX2luZGlyZWN0XyA9IHRydWU7IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBkbyBzbGlnaHRseSBtb3JlIHdvcmsuIHdlIG5lZWQgdG8gZ2V0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhc2VDRSB1c2luZyB0aGUgaW52ZXJzZSBVQ0EgJiBnZXRQcmV2aW91cy4gVGhlIG5leHQgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBib3VuZCBpcyBub3Qgc2V0LCBhbmQgd2lsbCBiZSBkZWNpZGVkIGluIHVjb2xfYmxkCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZW5ndGggPSAoc3BlY3MgJiBUT0tFTl9CRUZPUkVfKSAtIDE7IAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2VDRSA9IElORElSRUNUX0JPVU5EQVJJRVNfWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2luZGlyZWN0SW5kZXhfXS5tX3N0YXJ0Q0VfOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2VDb250Q0UgPSBJTkRJUkVDVF9CT1VOREFSSUVTX1sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2luZGlyZWN0SW5kZXhfXS5tX3N0YXJ0Q29udENFXzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjZVtdID0gbmV3IGludFsyXTsgCisgICAgICAgICAgICAgICAgICAgICAgICBDb2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlci5JbnZlcnNlVUNBIGludnVjYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQ29sbGF0aW9uUGFyc2VkUnVsZUJ1aWxkZXIuSU5WRVJTRV9VQ0FfOworICAgICAgICAgICAgICAgICAgICAgICAgaW52dWNhLmdldEludmVyc2VQcmV2Q0UoYmFzZUNFLCBiYXNlQ29udENFLCBzdHJlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9iYXNlQ0VfID0gY2VbMF07CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9iYXNlQ29udENFXyA9IGNlWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1fbmV4dENFXyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9uZXh0Q29udENFXyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVRva2VuID0gbmV3IFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmROZXh0ID0gaW5pdEFSZXNldCgwLCBzb3VyY2VUb2tlbik7ICAgIAorICAgIAkJCSAgICB9CisJCQkgICAgfQorCSAgICAgICAgICAgIC8vIDUgSWYgdGhlIHJlbGF0aW9uIGlzIGEgcmVzZXQ6IAorCSAgICAgICAgICAgIC8vIElmIHNvdXJjZVRva2VuIGlzIG51bGwgCisJICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBsaXN0LCBjcmVhdGUgbmV3IHNvdXJjZVRva2VuLCBtYWtlIHRoZSBiYXNlQ0UgCisJICAgICAgICAgICAgLy8gZnJvbSBzb3VyY2UsIHB1dCB0aGUgc291cmNlVG9rZW4gaW4gTGlzdEhlYWRlciBvZiB0aGUgbmV3IAorCSAgICAgICAgICAgIC8vIGxpc3QKKwkgICAgICAgICAgICBpZiAoc291cmNlVG9rZW4gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dID09IG51bGwpIHsKKwkgICAgICAgICAgICAJICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXSA9IG5ldyBUb2tlbkxpc3RIZWFkZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAvLyAzIENvbnNpZGVyIGVhY2ggaXRlbTogcmVsYXRpb24sIHNvdXJjZSwgYW5kIGV4cGFuc2lvbjogCisJICAgICAgICAgICAgICAgIC8vIGUuZy4gLi4uPCB4IC8geSAuLi4gCisJICAgICAgICAgICAgICAgIC8vIEZpcnN0IGNvbnZlcnQgYWxsIGV4cGFuc2lvbnMgaW50byBub3JtYWwgZm9ybS4gCisJICAgICAgICAgICAgICAgIC8vIEV4YW1wbGVzOiAKKwkgICAgICAgICAgICAgICAgLy8gSWYgInh5IiBkb2Vzbid0IG9jY3VyIGVhcmxpZXIgaW4gdGhlIGxpc3Qgb3IgaW4gdGhlIFVDQSwgCisJICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgJnh5ICogYyAqIGQgKiAuLi4gaW50byAmeCAqIGMveSAqIGQgKiAuLi4gCisJICAgICAgICAgICAgICAgIC8vIE5vdGU6IHJlc2V0IHZhbHVlcyBjYW4gbmV2ZXIgaGF2ZSBleHBhbnNpb25zLCBhbHRob3VnaCAKKwkgICAgICAgICAgICAgICAgLy8gdGhleSBjYW4gY2F1c2UgdGhlIHZlcnkgbmV4dCBpdGVtIHRvIGhhdmUgb25lLiBUaGV5IG1heSAKKwkgICAgICAgICAgICAgICAgLy8gYmUgY29udHJhY3Rpb25zLCBpZiB0aGV5IGFyZSBmb3VuZCBlYXJsaWVyIGluIHRoZSBsaXN0LiAKKwkJCSAgICAgICAgaWYgKHRvcCA9PSBmYWxzZSkgeworCQkJICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGNvbGVpdGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgPSBSdWxlQmFzZWRDb2xsYXRvci5VQ0FfLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIAltX3NvdXJjZV8uc3Vic3RyaW5nKG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCW1fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJKyBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXykpOworCQkJCisJCQkgICAgICAgICAgICBpbnQgQ0UgPSBjb2xlaXRlci5uZXh0KCk7CisJCQkgICAgICAgICAgICAvLyBvZmZzZXQgdG8gdGhlIGNoYXJhY3RlciBpbiB0aGUgZnVsbCBydWxlIHN0cmluZworCQkJICAgICAgICAgICAgaW50IGV4cGFuZCA9IGNvbGVpdGVyLmdldE9mZnNldCgpIAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICsgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF87CisJCQkgICAgICAgICAgICBpbnQgU2Vjb25kQ0UgPSBjb2xlaXRlci5uZXh0KCk7CisJCQkgICAgICAgICAgICAKKwkJCSAgICAgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX2Jhc2VDRV8gCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBDRSAmIDB4RkZGRkZGM0Y7CisJCQkgICAgICAgICAgICBpZiAoUnVsZUJhc2VkQ29sbGF0b3IuaXNDb250aW51YXRpb24oU2Vjb25kQ0UpKSB7CisJCQkgICAgICAgICAgICAgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1fYmFzZUNvbnRDRV8gCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU2Vjb25kQ0U7CisJCQkgICAgICAgICAgICB9IAorCQkJICAgICAgICAgICAgZWxzZSB7CisJCQkgICAgICAgICAgICAgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1fYmFzZUNvbnRDRV8gPSAwOworCQkJICAgICAgICAgICAgfQorCQkJICAgICAgICAgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1fbmV4dENFXyA9IDA7CisJCQkgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9uZXh0Q29udENFXyA9IDA7CisJCQkgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9wcmV2aW91c0NFXyA9IDA7CisJCQkgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9wcmV2aW91c0NvbnRDRV8gPSAwOworCQkJICAgICAgICAgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1faW5kaXJlY3RfID0gZmFsc2U7CisJCQkgICAgICAgICAgICBzb3VyY2VUb2tlbiA9IG5ldyBUb2tlbigpOworCQkJICAgICAgICAgICAgZXhwYW5kTmV4dCA9IGluaXRBUmVzZXQoZXhwYW5kLCBzb3VyY2VUb2tlbik7CisJCQkgICAgICAgIH0gCisJCQkgICAgICAgIGVsc2UgeyAvLyB0b3AgPT0gVFJVRQorCQkJICAgICAgICAgICAgdG9wID0gZmFsc2U7CisJCQkgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9wcmV2aW91c0NFXyA9IDA7CisJCQkgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9wcmV2aW91c0NvbnRDRV8gPSAwOworCQkJICAgICAgICAgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1faW5kaXJlY3RfID0gdHJ1ZTsKKwkJCSAgICAgICAgICAgIEluZGlyZWN0Qm91bmRhcmllcyBpYiA9IElORElSRUNUX0JPVU5EQVJJRVNfWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1faW5kaXJlY3RJbmRleF9dOworCQkJICAgICAgICAgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1fYmFzZUNFXyAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaWIubV9zdGFydENFXzsKKwkJCSAgICAgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX2Jhc2VDb250Q0VfIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGliLm1fc3RhcnRDb250Q0VfOworCQkJICAgICAgICAgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1fbmV4dENFXyAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaWIubV9saW1pdENFXzsKKwkJCSAgICAgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX25leHRDb250Q0VfIAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGliLm1fbGltaXRDb250Q0VfOworCQkJICAgICAgICAgICAgc291cmNlVG9rZW4gPSBuZXcgVG9rZW4oKTsKKwkJCSAgICAgICAgICAgIGV4cGFuZE5leHQgPSBpbml0QVJlc2V0KDAsIHNvdXJjZVRva2VuKTsKKwkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgIH0gCisJCSAgICAgICAgZWxzZSB7IC8vIHJlc2V0IHRvIHNvbWV0aGluZyBhbHJlYWR5IGluIHJ1bGVzCisJCSAgICAgICAgICAgIHRvcCA9IGZhbHNlOworCQkgICAgICAgIH0KKwkJICAgIH0KKwkJICAgIC8vIDcgQWZ0ZXIgYWxsIHRoaXMsIHNldCBMQVNUIHRvIHBvaW50IHRvIHNvdXJjZVRva2VuLCBhbmQgZ290byAKKwkJICAgIC8vIHN0ZXAgMy4KKwkJICAgIGxhc3RUb2tlbiA9IHNvdXJjZVRva2VuOworCQl9CisJCSAgCisJCWlmIChtX3Jlc3VsdExlbmd0aF8gPiAwIAorICAgICAgICAgICAgJiYgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF8gLSAxXS5tX2ZpcnN0XyA9PSBudWxsKSB7CisJCSAgICBtX3Jlc3VsdExlbmd0aF8gLS07CisJCX0KKwkJcmV0dXJuIG1fcmVzdWx0TGVuZ3RoXzsKKwl9CisgICAgIAorICAgIC8qKgorICAgICAqIEZvcm1hdHMgYW5kIHRocm93cyBhIFBhcnNlRXhjZXB0aW9uCisgICAgICogQHBhcmFtIHJ1bGVzIGNvbGxhdGlvbiBydWxlIHRoYXQgZmFpbGVkCisgICAgICogQHBhcmFtIG9mZnNldCBmYWlsZWQgb2Zmc2V0IGluIHJ1bGVzCisgICAgICogQHRocm93cyBQYXJzZUV4Y2VwdGlvbiB3aXRoIGZhaWx1cmUgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCB2b2lkIHRocm93UGFyc2VFeGNlcHRpb24oU3RyaW5nIHJ1bGVzLCBpbnQgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBQYXJzZUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgLy8gZm9yIHByZS1jb250ZXh0CisgICAgICAgIFN0cmluZyBwcmVjb250ZXh0ID0gcnVsZXMuc3Vic3RyaW5nKDAsIG9mZnNldCk7CisgICAgICAgIFN0cmluZyBwb3N0Y29udGV4dCA9IHJ1bGVzLnN1YnN0cmluZyhvZmZzZXQsIHJ1bGVzLmxlbmd0aCgpKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGVycm9yID0gbmV3IFN0cmluZ0J1ZmZlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJzZSBlcnJvciBvY2N1cnJlZCBpbiBydWxlIGF0IG9mZnNldCAiKTsgCisgICAgICAgIGVycm9yLmFwcGVuZChvZmZzZXQpOyAKKyAgICAgICAgZXJyb3IuYXBwZW5kKCJcbiBhZnRlciB0aGUgcHJlZml4IFwiIik7CisgICAgICAgIGVycm9yLmFwcGVuZChwcmVjb250ZXh0KTsKKyAgICAgICAgZXJyb3IuYXBwZW5kKCJcIiBiZWZvcmUgdGhlIHN1ZmZpeCBcIiIpOworICAgICAgICBlcnJvci5hcHBlbmQocG9zdGNvbnRleHQpOworICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oZXJyb3IudG9TdHJpbmcoKSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGRvU2V0VG9wKCkgeworICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyA9IG1fZXh0cmFDdXJyZW50XzsKKyAgICAgICAgbV9zb3VyY2VfLmFwcGVuZCgoY2hhcikweEZGRkUpOworICAgICAgICBJbmRpcmVjdEJvdW5kYXJpZXMgaWIgPSAKKyAgICAgICAgICAgICAgICAgIElORElSRUNUX0JPVU5EQVJJRVNfW21fcGFyc2VkVG9rZW5fLm1faW5kaXJlY3RJbmRleF9dOworICAgICAgICBtX3NvdXJjZV8uYXBwZW5kKChjaGFyKShpYi5tX3N0YXJ0Q0VfID4+IDE2KSk7CisgICAgICAgIG1fc291cmNlXy5hcHBlbmQoKGNoYXIpKGliLm1fc3RhcnRDRV8gJiAweEZGRkYpKTsKKyAgICAgICAgbV9leHRyYUN1cnJlbnRfICs9IDM7CisgICAgICAgIGlmIChJTkRJUkVDVF9CT1VOREFSSUVTX1ttX3BhcnNlZFRva2VuXy5tX2luZGlyZWN0SW5kZXhfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5tX3N0YXJ0Q29udENFXyA9PSAwKSB7CisgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXyA9IDM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgbV9zb3VyY2VfLmFwcGVuZCgoY2hhcikoSU5ESVJFQ1RfQk9VTkRBUklFU19bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9pbmRpcmVjdEluZGV4XworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5tX3N0YXJ0Q29udENFXyA+PiAxNikpOyAKKyAgICAgICAgICAgIG1fc291cmNlXy5hcHBlbmQoKGNoYXIpKElORElSRUNUX0JPVU5EQVJJRVNfWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1faW5kaXJlY3RJbmRleF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0ubV9zdGFydENvbnRDRV8gJiAweEZGRkYpKTsgCisgICAgICAgICAgICBtX2V4dHJhQ3VycmVudF8gKz0gMjsKKyAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fID0gNTsKKyAgICAgICAgfSAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHRpbmcgdGhlIG5leHQgdG9rZW4KKyAgICAgKiBAcGFyYW0gc3RhcnRvZnJ1bGVzIGZsYWcgaW5kaWNhdGluZyBpZiB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHJ1bGVzCisgICAgICogQHJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBydWxlcworICAgICAqIEBleGNlcHRpb24gUGFyc2VFeGNlcHRpb24gdGhyb3duIHdoZW4gcnVsZSBwYXJzaW5nIGZhaWxzCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcGFyc2VOZXh0VG9rZW4oYm9vbGVhbiBzdGFydG9mcnVsZXMpIHRocm93cyBQYXJzZUV4Y2VwdGlvbgorICAgIHsgCisJICAgIC8vIHBhcnNpbmcgcGFydAorCSAgICBib29sZWFuIHZhcmlhYmxldG9wID0gZmFsc2U7CisJICAgIGJvb2xlYW4gdG9wID0gZmFsc2U7CisJICAgIGJvb2xlYW4gaW5jaGFycyA9IHRydWU7CisJICAgIGJvb2xlYW4gaW5xdW90ZSA9IGZhbHNlOworCSAgICBib29sZWFuIHdhc2lucXVvdGUgPSBmYWxzZTsKKwkgICAgYnl0ZSBiZWZvcmUgPSAwOworCSAgICBib29sZWFuIGlzZXNjYXBlZCA9IGZhbHNlOworCSAgICBpbnQgLypuZXdjaGFyc2xlbiA9IDAsKi8gbmV3ZXh0ZW5zaW9ubGVuID0gMDsKKwkgICAgaW50IC8qY2hhcnNvZmZzZXQgPSAwLCovIGV4dGVuc2lvbm9mZnNldCA9IDA7CisJICAgIGludCBuZXdzdHJlbmd0aCA9IFRPS0VOX1VOU0VUXzsgCisJCisgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fID0gMDsKKwkgICAgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF8gPSAwOworICAgICAgICBtX3BhcnNlZFRva2VuXy5tX3ByZWZpeE9mZnNldF8gPSAwOyAKKyAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9wcmVmaXhMZW5fID0gMDsKKwkgICAgbV9wYXJzZWRUb2tlbl8ubV9pbmRpcmVjdEluZGV4XyA9IDA7CisJCisJICAgIGludCBsaW1pdCA9IG1fcnVsZXNfLmxlbmd0aCgpOworCSAgICB3aGlsZSAobV9jdXJyZW50XyA8IGxpbWl0KSB7CisJICAgICAgICBjaGFyIGNoID0gbV9zb3VyY2VfLmNoYXJBdChtX2N1cnJlbnRfKTsKKwkgICAgICAgIGlmIChpbnF1b3RlKSB7CisJCSAgICAgICAgaWYgKGNoID09IDB4MDAyNykgeyAvLyAnXCcnCisJCSAgICAgICAgICAgIGlucXVvdGUgPSBmYWxzZTsKKwkJICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeworCQkgICAgICAgICAgICBpZiAoKG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fID09IDApIHx8IGluY2hhcnMpIHsKKwkJICAgICAgICAgICAgICAgICBpZiAobV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gPT0gMCkgeworCQkgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyA9IG1fZXh0cmFDdXJyZW50XzsKKwkJICAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gKys7CisJCSAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCQkgICAgICAgICAgICAgICAgaWYgKG5ld2V4dGVuc2lvbmxlbiA9PSAwKSB7CisJCSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ub2Zmc2V0ID0gbV9leHRyYUN1cnJlbnRfOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgbmV3ZXh0ZW5zaW9ubGVuICsrOworCQkgICAgICAgICAgICB9CisJCSAgICAgICAgfQorCSAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNlc2NhcGVkKSB7CisJICAgICAgICAgICAgaXNlc2NhcGVkID0gZmFsc2U7CisJICAgICAgICAgICAgaWYgKG5ld3N0cmVuZ3RoID09IFRPS0VOX1VOU0VUXykgeworCSAgICAgICAgICAgICAgICB0aHJvd1BhcnNlRXhjZXB0aW9uKG1fcnVsZXNfLCBtX2N1cnJlbnRfKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGNoICE9IDAgJiYgbV9jdXJyZW50XyAhPSBsaW1pdCkgeworCSAgICAgICAgICAgICAgICBpZiAoaW5jaGFycykgeworCSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fID09IDApIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyA9IG1fY3VycmVudF87CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXyArKzsKKwkgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAobmV3ZXh0ZW5zaW9ubGVuID09IDApIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25vZmZzZXQgPSBtX2N1cnJlbnRfOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgbmV3ZXh0ZW5zaW9ubGVuICsrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFVQ2hhcmFjdGVyUHJvcGVydHkuaXNSdWxlV2hpdGVTcGFjZShjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0cyB0aGUgc3RyZW5ndGggZm9yIHRoaXMgZW50cnkKKwkgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworCSAgICAgICAgICAgICAgICBjYXNlIDB4MDAzRCA6IC8vICc9JworCSAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3N0cmVuZ3RoICE9IFRPS0VOX1VOU0VUXykgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0VuZFBhcnNlTmV4dFRva2VuKG5ld3N0cmVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdleHRlbnNpb25sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxldG9wLCBiZWZvcmUpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2Ugc3RhcnQgd2l0aCBzdHJlbmd0aCwgd2UnbGwgcmVzZXQgdG8gdG9wCisJICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRvZnJ1bGVzID09IHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2luZGlyZWN0SW5kZXhfID0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSBkb1NldFRvcCgpOworCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0VuZFBhcnNlTmV4dFRva2VuKFRPS0VOX1JFU0VUXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25vZmZzZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2V4dGVuc2lvbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGV0b3AsIGJlZm9yZSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBuZXdzdHJlbmd0aCA9IENvbGxhdG9yLklERU5USUNBTDsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICBjYXNlIDB4MDAyQyA6IC8vICcsJworCSAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3N0cmVuZ3RoICE9IFRPS0VOX1VOU0VUXykgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0VuZFBhcnNlTmV4dFRva2VuKG5ld3N0cmVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbm9mZnNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZXh0ZW5zaW9ubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXRvcCwgYmVmb3JlKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIHN0YXJ0IHdpdGggc3RyZW5ndGgsIHdlJ2xsIHJlc2V0IHRvIHRvcAorCSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0b2ZydWxlcyA9PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9pbmRpcmVjdEluZGV4XyA9IDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gZG9TZXRUb3AoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9FbmRQYXJzZU5leHRUb2tlbihUT0tFTl9SRVNFVF8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ub2Zmc2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdleHRlbnNpb25sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxldG9wLCBiZWZvcmUpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgbmV3c3RyZW5ndGggPSBDb2xsYXRvci5URVJUSUFSWTsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICBjYXNlIDB4MDAzQiA6IC8vICc7JworCSAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3N0cmVuZ3RoICE9IFRPS0VOX1VOU0VUXykgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0VuZFBhcnNlTmV4dFRva2VuKG5ld3N0cmVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbm9mZnNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZXh0ZW5zaW9ubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXRvcCwgYmVmb3JlKTsgICAKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIHN0YXJ0IHdpdGggc3RyZW5ndGgsIHdlJ2xsIHJlc2V0IHRvIHRvcAorCSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0b2ZydWxlcyA9PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9pbmRpcmVjdEluZGV4XyA9IDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gZG9TZXRUb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9FbmRQYXJzZU5leHRUb2tlbihUT0tFTl9SRVNFVF8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ub2Zmc2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdleHRlbnNpb25sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxldG9wLCBiZWZvcmUpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgbmV3c3RyZW5ndGggPSBDb2xsYXRvci5TRUNPTkRBUlk7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgY2FzZSAweDAwM0MgOiAvLyAnPCcKKwkgICAgICAgICAgICAgICAgICAgIGlmIChuZXdzdHJlbmd0aCAhPSBUT0tFTl9VTlNFVF8pIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9FbmRQYXJzZU5leHRUb2tlbihuZXdzdHJlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25vZmZzZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2V4dGVuc2lvbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGV0b3AsIGJlZm9yZSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBzdGFydCB3aXRoIHN0cmVuZ3RoLCB3ZSdsbCByZXNldCB0byB0b3AKKwkJICAgICAgICAgICAgICAgIGlmIChzdGFydG9mcnVsZXMgPT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1faW5kaXJlY3RJbmRleF8gPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9IGRvU2V0VG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvRW5kUGFyc2VOZXh0VG9rZW4oVE9LRU5fUkVTRVRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbm9mZnNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZXh0ZW5zaW9ubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXRvcCwgYmVmb3JlKTsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGlzLCBkbyBhIHNjYW4gdG8gdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyAKKwkJICAgICAgICAgICAgICAgIC8vIGFub3RoZXIgc3RyZW5ndGgKKwkJICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZV8uY2hhckF0KG1fY3VycmVudF8gKyAxKSA9PSAweDAwM0MpIHsKKwkJICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRfICsrOworCQkgICAgICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZV8uY2hhckF0KG1fY3VycmVudF8gKyAxKSA9PSAweDAwM0MpIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50XyArKzsgLy8gdGhyZWUgaW4gYSByb3chCisJCSAgICAgICAgICAgICAgICAgICAgICAgIG5ld3N0cmVuZ3RoID0gQ29sbGF0b3IuVEVSVElBUlk7CisJCSAgICAgICAgICAgICAgICAgICAgfSAKKwkJICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gdHdvIGluIGEgcm93IAorCQkgICAgICAgICAgICAgICAgICAgICAgICBuZXdzdHJlbmd0aCA9IENvbGxhdG9yLlNFQ09OREFSWTsKKwkJICAgICAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICB9IAorCQkgICAgICAgICAgICAgICAgZWxzZSB7IC8vIGp1c3Qgb25lIAorCQkgICAgICAgICAgICAgICAgICAgIG5ld3N0cmVuZ3RoID0gQ29sbGF0b3IuUFJJTUFSWTsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCQkgICAgICAgICAgICBjYXNlIDB4MDAyNiA6IC8vICcmJworCQkgICAgICAgICAgICAgICAgaWYgKG5ld3N0cmVuZ3RoICE9IFRPS0VOX1VOU0VUXykgeworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0VuZFBhcnNlTmV4dFRva2VuKG5ld3N0cmVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbm9mZnNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZXh0ZW5zaW9ubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXRvcCwgYmVmb3JlKTsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIG5ld3N0cmVuZ3RoID0gVE9LRU5fUkVTRVRfOyAvLyBQYXR0ZXJuRW50cnk6OlJFU0VUID0gMAorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgICAgICAgICAgIGNhc2UgMHgwMDViIDogLy8gJ1snCisJCSAgICAgICAgICAgICAgICAvLyBvcHRpb25zIC0gcmVhZCBhbiBvcHRpb24sIGFuYWx5emUgaXQKKwkJICAgICAgICAgICAgICAgIG1fb3B0aW9uRW5kXyA9IG1fcnVsZXNfLmluZGV4T2YoMHgwMDVkLCBtX2N1cnJlbnRfKTsKKwkJICAgICAgICAgICAgICAgIGlmIChtX29wdGlvbkVuZF8gIT0gLTEpIHsgLy8gJ10nCisJCSAgICAgICAgICAgICAgICAgICAgYnl0ZSByZXN1bHQgPSByZWFkQW5kU2V0T3B0aW9uKCk7CisJCSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50XyA9IG1fb3B0aW9uRW5kXzsKKwkJICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3VsdCAmIFRPS0VOX1RPUF9NQVNLXykgIT0gMCkgeworCQkgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3c3RyZW5ndGggPT0gVE9LRU5fUkVTRVRfKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gZG9TZXRUb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgIT0gMCkgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgYmVmb3JlIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmRpcmVjdGlvbiBsaWtlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcmW2JlZm9yZSAyXVtmaXJzdCByZWd1bGFyXTxiJyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NvdXJjZV8uYXBwZW5kKChjaGFyKTB4MDAyZCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc291cmNlXy5hcHBlbmQoKGNoYXIpYmVmb3JlKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leHRyYUN1cnJlbnRfICs9IDI7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fICs9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50XyArKzsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0VuZFBhcnNlTmV4dFRva2VuKG5ld3N0cmVuZ3RoLCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25vZmZzZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2V4dGVuc2lvbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGV0b3AsIGJlZm9yZSk7CisJCSAgICAgICAgICAgICAgICAgICAgICAgIH0gCisJCSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dQYXJzZUV4Y2VwdGlvbihtX3J1bGVzXywgbV9jdXJyZW50Xyk7CisJCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgICAgICB9IAorCQkgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyZXN1bHQgJiBUT0tFTl9WQVJJQUJMRV9UT1BfTUFTS18pICE9IDApIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3N0cmVuZ3RoICE9IFRPS0VOX1JFU0VUXyAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5ld3N0cmVuZ3RoICE9IFRPS0VOX1VOU0VUXykgeworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGV0b3AgPSB0cnVlOworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtX2V4dHJhQ3VycmVudF87CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NvdXJjZV8uYXBwZW5kKChjaGFyKTB4RkZGRik7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2V4dHJhQ3VycmVudF8gKys7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRfICsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gPSAxOworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvRW5kUGFyc2VOZXh0VG9rZW4obmV3c3RyZW5ndGgsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ub2Zmc2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdleHRlbnNpb25sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxldG9wLCBiZWZvcmUpOworCQkgICAgICAgICAgICAgICAgICAgICAgICB9IAorCQkgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93UGFyc2VFeGNlcHRpb24obV9ydWxlc18sIG1fY3VycmVudF8pOworCQkgICAgICAgICAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICAgICAgfSAKKwkJICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgocmVzdWx0ICYgVE9LRU5fQkVGT1JFXykgIT0gMCl7CisJCSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdzdHJlbmd0aCA9PSBUT0tFTl9SRVNFVF8pIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSA9IChieXRlKShyZXN1bHQgJiBUT0tFTl9CRUZPUkVfKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgfSAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1BhcnNlRXhjZXB0aW9uKG1fcnVsZXNfLCBtX2N1cnJlbnRfKTsJCQorCQkgICAgICAgICAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICAgICAgfSAgCisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKwkJICAgICAgICAgICAgY2FzZSAweDAwMkYgOiAvLyAnLycKKwkJICAgICAgICAgICAgICAgIHdhc2lucXVvdGUgPSBmYWxzZTsgLy8gaWYgd2Ugd2VyZSBjb3B5aW5nIHNvdXJjZSAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycywgd2Ugd2FudCB0byBzdG9wIG5vdworCQkgICAgICAgICAgICAgICAgaW5jaGFycyA9IGZhbHNlOyAvLyB3ZSdyZSBub3cgcHJvY2Vzc2luZyBleHBhbnNpb24gCisJCSAgICAgICAgICAgICAgICBicmVhazsKKwkJICAgICAgICAgICAgY2FzZSAweDAwNUMgOiAvLyBiYWNrIHNsYXNoIGZvciBlc2NhcGVkIGNoYXJzCisJCSAgICAgICAgICAgICAgICBpc2VzY2FwZWQgPSB0cnVlOworCQkgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgICAgICAgICAgIC8vIGZvdW5kIGEgcXVvdGUsIHdlJ3JlIGdvbm5hIHN0YXJ0IGNvcHlpbmcKKwkJICAgICAgICAgICAgY2FzZSAweDAwMjcgOiAvLydcJycKKwkJICAgICAgICAgICAgICAgIGlmIChuZXdzdHJlbmd0aCA9PSBUT0tFTl9VTlNFVF8pIHsgCisJCSAgICAgICAgICAgICAgICAgICAgLy8gcXVvdGUgaXMgaWxsZWdhbCB1bnRpbCB3ZSBoYXZlIGEgc3RyZW5ndGgKKwkJICAgICAgICAgICAgICAgICAgICB0aHJvd1BhcnNlRXhjZXB0aW9uKG1fcnVsZXNfLCBtX2N1cnJlbnRfKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGlucXVvdGUgPSB0cnVlOworCQkgICAgICAgICAgICAgICAgaWYgKGluY2hhcnMpIHsgLy8gd2UncmUgZG9pbmcgY2hhcmFjdGVycyAKKwkJICAgICAgICAgICAgICAgICAgICBpZiAod2FzaW5xdW90ZSA9PSBmYWxzZSkgeworCQkgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyA9IG1fZXh0cmFDdXJyZW50XzsKKwkJICAgICAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fICE9IDApIHsKKwkJICAgICAgICAgICAgICAgICAgICAJbV9zb3VyY2VfLmFwcGVuZChtX3NvdXJjZV8uc3Vic3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50XyAtIG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudF8pKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgbV9leHRyYUN1cnJlbnRfICs9IG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fOworCQkgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXyArKzsKKwkJICAgICAgICAgICAgICAgIH0gCisJCSAgICAgICAgICAgICAgICBlbHNlIHsgLy8gd2UncmUgZG9pbmcgYW4gZXhwYW5zaW9uCisJCSAgICAgICAgICAgICAgICAgICAgaWYgKHdhc2lucXVvdGUgPT0gZmFsc2UpIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ub2Zmc2V0ID0gbV9leHRyYUN1cnJlbnRfOworCQkgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgICAgICBpZiAobmV3ZXh0ZW5zaW9ubGVuICE9IDApIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VfLmFwcGVuZChtX3NvdXJjZV8uc3Vic3RyaW5nKAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50XyAtIG5ld2V4dGVuc2lvbmxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudF8pKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgbV9leHRyYUN1cnJlbnRfICs9IG5ld2V4dGVuc2lvbmxlbjsKKwkJICAgICAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICAgICAgbmV3ZXh0ZW5zaW9ubGVuICsrOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgd2FzaW5xdW90ZSA9IHRydWU7CisJCSAgICAgICAgICAgICAgICBtX2N1cnJlbnRfICsrOworCQkgICAgICAgICAgICAgICAgY2ggPSBtX3NvdXJjZV8uY2hhckF0KG1fY3VycmVudF8pOyAKKwkJICAgICAgICAgICAgICAgIGlmIChjaCA9PSAweDAwMjcpIHsgLy8gY29weSB0aGUgZG91YmxlIHF1b3RlCisJCSAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VfLmFwcGVuZChjaCk7CisJCSAgICAgICAgICAgICAgICAgICAgbV9leHRyYUN1cnJlbnRfICsrOworCQkgICAgICAgICAgICAgICAgICAgIGlucXVvdGUgPSBmYWxzZTsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCQkgICAgICAgICAgICAvLyAnQCcgaXMgZnJlbmNoIG9ubHkgaWYgdGhlIHN0cmVuZ3RoIGlzIG5vdCBjdXJyZW50bHkgc2V0CisJCSAgICAgICAgICAgIC8vIGlmIGl0IGlzLCBpdCdzIGp1c3QgYSByZWd1bGFyIGNoYXJhY3RlciBpbiBjb2xsYXRpb24gIAorCQkgICAgICAgICAgICBjYXNlIDB4MDA0MCA6IC8vICdAJworCQkgICAgICAgICAgICAgICAgaWYgKG5ld3N0cmVuZ3RoID09IFRPS0VOX1VOU0VUXykgeworCQkgICAgICAgICAgICAgICAgICAgIG1fb3B0aW9uc18ubV9pc0ZyZW5jaENvbGxhdGlvbl8gPSB0cnVlOworCQkgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgY2FzZSAweDAwN0MgOiAvL3wKKwkJICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgd2UgaGF2ZSBhY3R1YWxseSBiZWVuIHJlYWRpbmcgcHJlZml4IHBhcnQgCisJCSAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHN0b3JlIHJlYWQgY2hhcmFjdGVycyB0byB0aGUgcHJlZml4IHBhcnQgCisJCSAgICAgICAgICAgICAgICAvLyBhbmQgY29udGludWUgcmVhZGluZyB0aGUgY2hhcmFjdGVycyAocHJvcGVyIHdheSAKKwkJICAgICAgICAgICAgICAgIC8vIHdvdWxkIGJlIHRvIHJlc3RhcnQgcmVhZGluZyB0aGUgY2hhcnMsIGJ1dCBpbiB0aGF0IAorCQkgICAgICAgICAgICAgICAgLy8gY2FzZSB3ZSB3b3VsZCBoYXZlIHRvIGNvbXBsaWNhdGUgdGhlIHRva2VuIGhhc2hlciwgCisJCSAgICAgICAgICAgICAgICAvLyB3aGljaCBJIGRvIG5vdCBpbnRlbmQgdG8gcGxheSB3aXRoLiBJbnN0ZWFkLCB3ZSB3aWxsIAorCQkgICAgICAgICAgICAgICAgLy8gZG8gcHJlZml4ZXMgd2hlbiBwcmVmaXhlcyBhcmUgZHVlIChiZWZvcmUgYWRkaW5nIHRoZSAKKwkJICAgICAgICAgICAgICAgIC8vIGVsZW1lbnRzKS4KKwkJICAgICAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1fcHJlZml4T2Zmc2V0XyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF87CisJCSAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX3ByZWZpeExlbl8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluY2hhcnMpIHsgLy8gd2UncmUgZG9pbmcgY2hhcmFjdGVycworCQkgICAgICAgICAgICAgICAgICAgIGlmICh3YXNpbnF1b3RlID09IGZhbHNlKSB7CisJCSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfID0gbV9leHRyYUN1cnJlbnRfOworCQkgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgICAgICBpZiAobV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gbV9zb3VyY2VfLnN1YnN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudF8gLSBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRfKTsKKwkJICAgICAgICAgICAgICAgICAgICAJbV9zb3VyY2VfLmFwcGVuZChwcmVmaXgpOworCQkgICAgICAgICAgICAgICAgICAgICAgICBtX2V4dHJhQ3VycmVudF8gKz0gbV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl87CisJCSAgICAgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fICsrOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgd2FzaW5xdW90ZSA9IHRydWU7CisJCSAgICAgICAgICAgICAgICBtX2N1cnJlbnRfICsrOworCQkgICAgICAgICAgICAgICAgY2ggPSBtX3NvdXJjZV8uY2hhckF0KG1fY3VycmVudF8pOyAKKwkJICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAyMTogLy8gJyEnIC8vIGlnbm9yaW5nIGphdmEgc2V0IHRoYWkgcmVvcmRlcmluZworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIGRlZmF1bHQgOgorCSAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3N0cmVuZ3RoID09IFRPS0VOX1VOU0VUXykgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93UGFyc2VFeGNlcHRpb24obV9ydWxlc18sIG1fY3VycmVudF8pOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BlY2lhbENoYXIoY2gpICYmIChpbnF1b3RlID09IGZhbHNlKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93UGFyc2VFeGNlcHRpb24obV9ydWxlc18sIG1fY3VycmVudF8pOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IDB4MDAwMCAmJiBtX2N1cnJlbnRfICsgMSA9PSBsaW1pdCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgaWYgKGluY2hhcnMpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gPT0gMCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyA9IG1fY3VycmVudF87CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fKys7CisJICAgICAgICAgICAgICAgICAgICB9IAorCSAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld2V4dGVuc2lvbmxlbiA9PSAwKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbm9mZnNldCA9IG1fY3VycmVudF87CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgIG5ld2V4dGVuc2lvbmxlbiArKzsKKwkgICAgICAgICAgICAgICAgICAgIH0JCisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0gICAKKyAgICAgICAgICAgIH0KKwkgICAgICAgIGlmICh3YXNpbnF1b3RlKSB7CisJICAgICAgICAgICAgaWYgKGNoICE9IDB4MjcpIHsKKwkgICAgICAgICAgICAgIAltX3NvdXJjZV8uYXBwZW5kKGNoKTsKKwkgICAgICAgICAgICAgICAgbV9leHRyYUN1cnJlbnRfICsrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0gICAKKwkgICAgICAgIG1fY3VycmVudF8gKys7CisJICAgIH0gIAorCSAgICByZXR1cm4gZG9FbmRQYXJzZU5leHRUb2tlbihuZXdzdHJlbmd0aCwgdG9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ub2Zmc2V0LCBuZXdleHRlbnNpb25sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXRvcCwgYmVmb3JlKTsKKwl9CisKKyAgICAvKioKKyAgICAgKiBFbmQgdGhlIG5leHQgcGFyc2UgdG9rZW4KKyAgICAgKiBAcGFyYW0gbmV3c3RyZW5ndGggbmV3IHN0cmVuZ3RoCisgICAgICogQHJldHVybiBvZmZzZXQgaW4gcnVsZXMsIC0xIGZvciBlbmQgb2YgcnVsZXMKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBkb0VuZFBhcnNlTmV4dFRva2VuKGludCBuZXdzdHJlbmd0aCwgLyppbnQgbmV3Y2hhcnNsZW4sKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdG9wLCAvKmludCBjaGFyc29mZnNldCwqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4dGVuc2lvbm9mZnNldCwgaW50IG5ld2V4dGVuc2lvbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHZhcmlhYmxldG9wLCBpbnQgYmVmb3JlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFBhcnNlRXhjZXB0aW9uCisgICAgeworICAgICAgICBpZiAobmV3c3RyZW5ndGggPT0gVE9LRU5fVU5TRVRfKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fID09IDAgJiYgdG9wID09IGZhbHNlKSB7CisJCSAgICB0aHJvd1BhcnNlRXhjZXB0aW9uKG1fcnVsZXNfLCBtX2N1cnJlbnRfKTsgCisJCX0KKwkJCisJCW1fcGFyc2VkVG9rZW5fLm1fc3RyZW5ndGhfID0gbmV3c3RyZW5ndGg7IAorCQkvL21fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfID0gY2hhcnNvZmZzZXQ7CisJCS8vbV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gPSBuZXdjaGFyc2xlbjsKKwkJbV9wYXJzZWRUb2tlbl8ubV9leHRlbnNpb25PZmZzZXRfID0gZXh0ZW5zaW9ub2Zmc2V0OworCSAgICBtX3BhcnNlZFRva2VuXy5tX2V4dGVuc2lvbkxlbl8gPSBuZXdleHRlbnNpb25sZW47CisJCW1fcGFyc2VkVG9rZW5fLm1fZmxhZ3NfID0gKGNoYXIpCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2YXJpYWJsZXRvcCA/IFRPS0VOX1ZBUklBQkxFX1RPUF9NQVNLXyA6IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAodG9wID8gVE9LRU5fVE9QX01BU0tfIDogMCkgfCBiZWZvcmUpOworCQlyZXR1cm4gbV9jdXJyZW50XzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVG9rZW4gYmVmb3JlIHRoaXMgZWxlbWVudAorICAgICAqIEBwYXJhbSBzb3VyY2V0b2tlbiAKKyAgICAgKiBAcGFyYW0gc3RyZW5ndGggY29sbGF0aW9uIHN0cmVuZ3RoCisgICAgICogQHJldHVybiB0aGUgdG9rZW4gYmVmb3JlIHNvdXJjZSB0b2tlbgorICAgICAqIEBleGNlcHRpb24gUGFyc2VFeGNlcHRpb24gdGhyb3duIHdoZW4gcnVsZXMgaGF2ZSB0aGUgd3Jvbmcgc3ludGF4CisgICAgICovCisgICAgcHJpdmF0ZSBUb2tlbiBnZXRWaXJnaW5CZWZvcmUoVG9rZW4gc291cmNldG9rZW4sIGludCBzdHJlbmd0aCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFBhcnNlRXhjZXB0aW9uCisgICAgeworCSAgICAvLyB0aGlzIGlzIGEgdmlyZ2luIGJlZm9yZSAtIHdlIG5lZWQgdG8gZmlzaCB0aGUgYW5jaG9yIGZyb20gdGhlIFVDQQorCSAgICBpZiAoc291cmNldG9rZW4gIT0gbnVsbCkgeworICAgICAgICAgICAgaW50IG9mZnNldCA9IHNvdXJjZXRva2VuLm1fc291cmNlXyAmIDB4RkZGRkZGOworICAgICAgICAgICAgbV9VQ0FDb2xFSXRlcl8uc2V0VGV4dChtX3NvdXJjZV8uc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgMSkpOworCSAgICB9IAorCSAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fVUNBQ29sRUl0ZXJfLnNldFRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc291cmNlXy5zdWJzdHJpbmcobV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyArIDEpKTsKKwkgICAgfQorCSAgICAgIAkKKwkgICAgaW50IGJhc2VjZSA9IG1fVUNBQ29sRUl0ZXJfLm5leHQoKSAmIDB4RkZGRkZGM0Y7CisJICAgIGludCBiYXNlY29udGNlID0gbV9VQ0FDb2xFSXRlcl8ubmV4dCgpOworCSAgICBpZiAoYmFzZWNvbnRjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICBiYXNlY29udGNlID0gMDsKKwkgICAgfQorCSAgICAvLyBmaXJzdCBjZSBhbmQgc2Vjb25kIGNlIG1fdXRpbENFQnVmZmVyXworCSAgICBpbnQgaW52cG9zID0gQ29sbGF0aW9uUGFyc2VkUnVsZUJ1aWxkZXIuSU5WRVJTRV9VQ0FfLmdldEludmVyc2VQcmV2Q0UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VjZSwgYmFzZWNvbnRjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVuZ3RoLCBtX3V0aWxDRUJ1ZmZlcl8pOworCSAgICBpbnQgY2ggPSBDb2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlci5JTlZFUlNFX1VDQV8ubV90YWJsZV9bMyAqIGludnBvcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMl07CisgICAgICAgIGlmICgoY2ggJiAgSU5WRVJTRV9TSVpFX01BU0tfKSAhPSAwKSB7CisJICAgICAgICBpbnQgb2Zmc2V0ID0gY2ggJiBJTlZFUlNFX09GRlNFVF9NQVNLXzsKKwkgICAgICAgIGNoID0gQ29sbGF0aW9uUGFyc2VkUnVsZUJ1aWxkZXIuSU5WRVJTRV9VQ0FfLm1fY29udGludWF0aW9uc19bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF07CisJICAgIH0gICAgICAKKwkgICAgbV9zb3VyY2VfLmFwcGVuZCgoY2hhciljaCk7CisJICAgIG1fZXh0cmFDdXJyZW50XyArKzsKKwkgICAgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF8gPSBtX2V4dHJhQ3VycmVudF8gLSAxOworCSAgICBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXyA9IDE7CisJCisJICAgIC8vIFdlIGdvdCBhbiBVQ0EgYmVmb3JlLiBIb3dldmVyLCB0aGlzIG1pZ2h0IGhhdmUgYmVlbiB0YWlsb3JlZC4KKwkgICAgLy8gZXhhbXBsZToKKwkgICAgLy8gJlx1MzBjYSA9IFx1MzA2YQorCSAgICAvLyAmW2JlZm9yZSAzXVx1MzA2YTw8PFx1MzA2YXxcdTMwOWQKKwkgIAorCSAgICBtX3V0aWxUb2tlbl8ubV9zb3VyY2VfID0gKG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNMZW5fIDw8IDI0KSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc09mZnNldF87CisJICAgIG1fdXRpbFRva2VuXy5tX3J1bGVzXyA9IG1fc291cmNlXzsKKwkgICAgc291cmNldG9rZW4gPSAoVG9rZW4pbV9oYXNoVGFibGVfLmdldChtX3V0aWxUb2tlbl8pOworCSAgCisJICAgIC8vIGlmIHdlIGZvdW5kIGEgdGFpbG9yZWQgdGhpbmcsIHdlIGhhdmUgdG8gdXNlIHRoZSBVQ0EgdmFsdWUgYW5kIAorCSAgICAvLyBjb25zdHJ1Y3QgYSBuZXcgcmVzZXQgdG9rZW4gd2l0aCBjb25zdHJ1Y3RlZCBuYW1lCisJICAgIGlmIChzb3VyY2V0b2tlbiAhPSBudWxsICYmIHNvdXJjZXRva2VuLm1fc3RyZW5ndGhfICE9IFRPS0VOX1JFU0VUXykgeworCSAgICAgICAgLy8gY2hhcmFjdGVyIHRvIHdoaWNoIHdlIHdhbnQgdG8gYW5jaG9yIGlzIGFscmVhZHkgdGFpbG9yZWQuIAorCSAgICAgICAgLy8gV2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBuZXcgdG9rZW4gd2hpY2ggd2lsbCBiZSB0aGUgYW5jaG9yIHBvaW50CisgICAgICAgICAgICBtX3NvdXJjZV8uc2V0Q2hhckF0KG1fZXh0cmFDdXJyZW50XyAtIDEsICdcdUZGRkUnKTsKKwkgICAgICAgIG1fc291cmNlXy5hcHBlbmQoY2gpOworCSAgICAgICAgbV9leHRyYUN1cnJlbnRfICsrOworCSAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gKys7CisgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10gPSBuZXcgVG9rZW5MaXN0SGVhZGVyKCk7CisJICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9iYXNlQ0VfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtX3V0aWxDRUJ1ZmZlcl9bMF0gJiAweEZGRkZGRjNGOworCSAgICAgICAgaWYgKFJ1bGVCYXNlZENvbGxhdG9yLmlzQ29udGludWF0aW9uKG1fdXRpbENFQnVmZmVyX1sxXSkpIHsKKwkgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9iYXNlQ29udENFXyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fdXRpbENFQnVmZmVyX1sxXTsKKwkgICAgICAgIH0gCisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9iYXNlQ29udENFXyA9IDA7CisJICAgICAgICB9CisJICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9uZXh0Q0VfID0gMDsKKwkgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX25leHRDb250Q0VfID0gMDsKKwkgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX3ByZXZpb3VzQ0VfID0gMDsKKwkgICAgICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX3ByZXZpb3VzQ29udENFXyA9IDA7CisJICAgICAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9pbmRpcmVjdF8gPSBmYWxzZTsKKwkgICAgICAgIHNvdXJjZXRva2VuID0gbmV3IFRva2VuKCk7CisJICAgICAgICBpbml0QVJlc2V0KC0xLCBzb3VyY2V0b2tlbik7ICAgCisJICAgIH0KKwkgICAgcmV0dXJuIHNvdXJjZXRva2VuOworCX0KKwkKKwkvKioKKwkgKiBQcm9jZXNzaW5nIERlc2NyaXB0aW9uLgorCSAqIDEuIEJ1aWxkIGEgbV9saXN0SGVhZGVyXy4gRWFjaCBsaXN0IGhhcyBhIGhlYWRlciwgd2hpY2ggY29udGFpbnMgdHdvIGxpc3RzIAorCSAqIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLCBhIHJlc2V0IHRva2VuLCBhIGJhc2VDRSwgbmV4dENFLCBhbmQgCisJICogcHJldmlvdXNDRS4gVGhlIGxpc3RzIGFuZCByZXNldCBtYXkgYmUgbnVsbC4gCisJICogMi4gQXMgeW91IHByb2Nlc3MsIHlvdSBrZWVwIGEgTEFTVCBwb2ludGVyIHRoYXQgcG9pbnRzIHRvIHRoZSBsYXN0IHRva2VuIAorCSAqIHlvdSBoYW5kbGVkLiAKKwkgKiBAcGFyYW0gZXhwYW5kIHN0cmluZyBvZmZzZXQsIC0xIGZvciBudWxsIHN0cmluZ3MKKwkgKiBAcGFyYW0gdGFyZ2V0VG9rZW4gdG9rZW4gdG8gdXBkYXRlCisJICogQHJldHVybiBleHBhbmRuZXh0IG9mZnNldAorCSAqIEB0aHJvd3MgUGFyc2VFeGNlcHRpb24gdGhyb3duIHdoZW4gcnVsZXMgc3ludGF4IGZhaWxlZAorCSAqLworCXByaXZhdGUgaW50IGluaXRBUmVzZXQoaW50IGV4cGFuZCwgVG9rZW4gdGFyZ2V0VG9rZW4pIHRocm93cyBQYXJzZUV4Y2VwdGlvbgorCXsKKwkgICAgLy8gZG8gdGhlIHJlc2V0IHRoaW5nCisJICAgIHRhcmdldFRva2VuLm1fcnVsZXNfID0gbV9zb3VyY2VfOworCSAgICB0YXJnZXRUb2tlbi5tX3NvdXJjZV8gPSBtX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXyA8PCAyNCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XzsKKwkgICAgdGFyZ2V0VG9rZW4ubV9leHBhbnNpb25fID0gbV9wYXJzZWRUb2tlbl8ubV9leHRlbnNpb25MZW5fIDw8IDI0IAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1fcGFyc2VkVG9rZW5fLm1fZXh0ZW5zaW9uT2Zmc2V0XzsKKwkgICAgaWYgKG1fcGFyc2VkVG9rZW5fLm1fcHJlZml4T2Zmc2V0XyAhPSAwKSB7CisJICAgICAgICB0aHJvd1BhcnNlRXhjZXB0aW9uKG1fcnVsZXNfLCBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyAtIDEpOworCSAgICB9IAorCSAgICAKKyAgICAgICAgdGFyZ2V0VG9rZW4ubV9wcmVmaXhfID0gMDsKKwkgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYWxzbyBoYW5kbGUgcmV2ZXJzZQorCSAgICB0YXJnZXRUb2tlbi5tX3BvbGFyaXR5XyA9IFRPS0VOX1BPTEFSSVRZX1BPU0lUSVZFXzsgCisJICAgIHRhcmdldFRva2VuLm1fc3RyZW5ndGhfID0gVE9LRU5fUkVTRVRfOworCSAgICB0YXJnZXRUb2tlbi5tX25leHRfID0gbnVsbDsKKwkgICAgdGFyZ2V0VG9rZW4ubV9wcmV2aW91c18gPSBudWxsOworCSAgICB0YXJnZXRUb2tlbi5tX0NFTGVuZ3RoXyA9IDA7CisJICAgIHRhcmdldFRva2VuLm1fZXhwQ0VMZW5ndGhfID0gMDsKKwkgICAgdGFyZ2V0VG9rZW4ubV9saXN0SGVhZGVyXyA9IG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXTsKKwkgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1fZmlyc3RfID0gbnVsbDsKKwkgICAgbV9saXN0SGVhZGVyX1ttX3Jlc3VsdExlbmd0aF9dLm1fbGFzdF8gPSBudWxsOworCSAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9maXJzdF8gPSBudWxsOworCSAgICBtX2xpc3RIZWFkZXJfW21fcmVzdWx0TGVuZ3RoX10ubV9sYXN0XyA9IG51bGw7CisJICAgIG1fbGlzdEhlYWRlcl9bbV9yZXN1bHRMZW5ndGhfXS5tX3Jlc2V0XyA9IHRhcmdldFRva2VuOworCQorCSAgICAvKiAzIENvbnNpZGVyIGVhY2ggaXRlbTogcmVsYXRpb24sIHNvdXJjZSwgYW5kIGV4cGFuc2lvbjogCisJICAgICAqIGUuZy4gLi4uPCB4IC8geSAuLi4gCisJICAgICAqIEZpcnN0IGNvbnZlcnQgYWxsIGV4cGFuc2lvbnMgaW50byBub3JtYWwgZm9ybS4gRXhhbXBsZXM6IAorCSAgICAgKiBJZiAieHkiIGRvZXNuJ3Qgb2NjdXIgZWFybGllciBpbiB0aGUgbGlzdCBvciBpbiB0aGUgVUNBLCBjb252ZXJ0IAorCSAgICAgKiAmeHkgKiBjICogZCAqIC4uLiBpbnRvICZ4ICogYy95ICogZCAqIC4uLiAKKwkgICAgICogTm90ZTogcmVzZXQgdmFsdWVzIGNhbiBuZXZlciBoYXZlIGV4cGFuc2lvbnMsIGFsdGhvdWdoIHRoZXkgY2FuIAorCSAgICAgKiBjYXVzZSB0aGUgdmVyeSBuZXh0IGl0ZW0gdG8gaGF2ZSBvbmUuIFRoZXkgbWF5IGJlIGNvbnRyYWN0aW9ucywgaWYgCisJICAgICAqIHRoZXkgYXJlIGZvdW5kIGVhcmxpZXIgaW4gdGhlIGxpc3QuIAorCSAgICAgKi8KKwkgICAgaW50IHJlc3VsdCA9IDA7CisJICAgIGlmIChleHBhbmQgPiAwKSB7CisJICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW4gZXhwYW5zaW9uCisJICAgICAgICBpZiAobV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gPiAxKSB7CisJICAgICAgICAgICAgdGFyZ2V0VG9rZW4ubV9zb3VyY2VfID0gKChleHBhbmQgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfICkgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAyNCkgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfOworCSAgICAgICAgICAgIHJlc3VsdCA9ICgobV9wYXJzZWRUb2tlbl8ubV9jaGFyc0xlbl8gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyAtIGV4cGFuZCkgPDwgMjQpIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwYW5kOworCSAgICAgICAgfQorCSAgICB9ICAgCisJCisJICAgIG1fcmVzdWx0TGVuZ3RoXyArKzsKKwkgICAgbV9oYXNoVGFibGVfLnB1dCh0YXJnZXRUb2tlbiwgdGFyZ2V0VG9rZW4pOworCSAgICByZXR1cm4gcmVzdWx0OworCX0KKwkKKwkvKioKKwkgKiBDaGVja3MgaWYgYW4gY2hhcmFjdGVyIGlzIHNwZWNpYWwKKwkgKiBAcGFyYW0gY2ggY2hhcmFjdGVyIHRvIHRlc3QKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNoYXJhY3RlciBpcyBzcGVjaWFsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1NwZWNpYWxDaGFyKGNoYXIgY2gpCisJeworICAgICAgICByZXR1cm4gKGNoIDw9IDB4MDAyRiAmJiBjaCA+PSAweDAwMjApIHx8IChjaCA8PSAweDAwM0YgJiYgY2ggPj0gMHgwMDNBKSAKKyAgICAgICAgICAgICAgIHx8IChjaCA8PSAweDAwNjAgJiYgY2ggPj0gMHgwMDVCKSAKKyAgICAgICAgICAgICAgIHx8IChjaCA8PSAweDAwN0UgJiYgY2ggPj0gMHgwMDdEKSB8fCBjaCA9PSAweDAwN0I7CisJfQorICAgIAorICAgIHByaXZhdGUKKyAgICBVbmljb2RlU2V0IHJlYWRBbmRTZXRVbmljb2RlU2V0KFN0cmluZyBzb3VyY2UsIGludCBzdGFydCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIAorICAgIHsKKyAgICAgIHdoaWxlKHNvdXJjZS5jaGFyQXQoc3RhcnQpICE9ICdbJykgeyAvKiBhZHZhbmNlIHdoaWxlIHdlIGZpbmQgdGhlIGZpcnN0ICdbJyAqLworICAgICAgICBzdGFydCsrOworICAgICAgfQorICAgICAgLy8gbm93IHdlIG5lZWQgdG8gZ2V0IGEgYmFsYW5jZWQgc2V0IG9mICdbXScuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYSBzZXQgY2FuIGhhdmUgCisgICAgICAvLyBtYW55LCBhbmQgKmVuZCBwb2ludCB0byB0aGUgZmlyc3QgY2xvc2luZyAnWycKKyAgICAgIGludCBub09wZW5CcmFjZXMgPSAxOworICAgICAgaW50IGN1cnJlbnQgPSAxOyAvLyBza2lwIHRoZSBvcGVuaW5nIGJyYWNlCisgICAgICB3aGlsZShzdGFydCtjdXJyZW50IDwgc291cmNlLmxlbmd0aCgpICYmIG5vT3BlbkJyYWNlcyAhPSAwKSB7CisgICAgICAgIGlmKHNvdXJjZS5jaGFyQXQoc3RhcnQrY3VycmVudCkgPT0gJ1snKSB7CisgICAgICAgICAgbm9PcGVuQnJhY2VzKys7CisgICAgICAgIH0gZWxzZSBpZihzb3VyY2UuY2hhckF0KHN0YXJ0K2N1cnJlbnQpID09ICddJykgeyAvLyBjbG9zaW5nIGJyYWNlCisgICAgICAgICAgbm9PcGVuQnJhY2VzLS07CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudCsrOworICAgICAgfQorICAgICAgaW50IG5leHRCcmFjZSA9IC0xOworICAgIAorICAgICAgaWYobm9PcGVuQnJhY2VzICE9IDAgfHwgKG5leHRCcmFjZSA9IHNvdXJjZS5pbmRleE9mKCJdIiwgc3RhcnQrY3VycmVudCkgLyonXScqLykgPT0gLTEpIHsKKyAgICAgICAgdGhyb3dQYXJzZUV4Y2VwdGlvbihtX3J1bGVzXywgc3RhcnQpOworICAgICAgfQorICAgICAgcmV0dXJuIG5ldyBVbmljb2RlU2V0KHNvdXJjZS5zdWJzdHJpbmcoc3RhcnQsIHN0YXJ0K2N1cnJlbnQpKTsgLy91c2V0X29wZW5QYXR0ZXJuKHN0YXJ0LCBjdXJyZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAgLyoqIGluIEMsIG9wdGlvbmFyZyBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIGZ1bmN0aW9uLgorICAgICAqICBXZSB1c2UgYSBwcml2YXRlIGludCB0byBzaW11bGF0ZSB0aGlzLgorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fb3B0aW9uYXJnXyA9IDA7CisKKwlwcml2YXRlIGludCByZWFkT3B0aW9uKFN0cmluZyBydWxlcywgaW50IHN0YXJ0LCBpbnQgb3B0aW9uZW5kKSAKKyAgICB7CisgICAgICAgIG1fb3B0aW9uYXJnXyA9IDA7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCBSVUxFU19PUFRJT05TXy5sZW5ndGgpIHsKKyAgICAgICAgICAgIFN0cmluZyBvcHRpb24gPSBSVUxFU19PUFRJT05TX1tpXS5tX25hbWVfOworICAgICAgICAgICAgaW50IG9wdGlvbmxlbmd0aCA9IG9wdGlvbi5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGgoKSA+IHN0YXJ0ICsgb3B0aW9ubGVuZ3RoCisgICAgICAgICAgICAgICAgJiYgb3B0aW9uLmVxdWFsc0lnbm9yZUNhc2UocnVsZXMuc3Vic3RyaW5nKHN0YXJ0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgb3B0aW9ubGVuZ3RoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9uZW5kIC0gc3RhcnQgPiBvcHRpb25sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9vcHRpb25hcmdfID0gc3RhcnQgKyBvcHRpb25sZW5ndGggKyAxOyAKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgb2YgdGhlIG9wdGlvbnMsIHNraXAgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG1fb3B0aW9uYXJnXyA8IG9wdGlvbmVuZCAmJiBVQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShydWxlcy5jaGFyQXQobV9vcHRpb25hcmdfKSkpIAorICAgICAgICAgICAgICAgICAgICB7ICAgLy8gZWF0IHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3B0aW9uYXJnXyArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gICAgIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSArKzsKKyAgICAgICAgfQorICAgICAgICBpZihpID09IFJVTEVTX09QVElPTlNfLmxlbmd0aCkgeworICAgICAgICAgICAgaSA9IC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpOworICAgIH0KKwkvKioKKwkgKiBSZWFkcyBhbmQgc2V0IGNvbGxhdGlvbiBvcHRpb25zCisJICogQHBhcmFtIG9wdGlvbmVuZCBvZmZzZXQgdG8gdGhlIGVuZCBvZiB0aGUgb3B0aW9uIGluIHJ1bGVzCisJICogQHJldHVybiBUT0tFTl9TVUNDRVNTIGlmIG9wdGlvbiBpcyBzZXQgY29ycmVjdCwgMCBvdGhlcndpc2UKKyAgICAgKiBAZXhjZXB0aW9uIFBhcnNlRXhjZXB0aW9uIHRocm93biB3aGVuIG9wdGlvbnMgaW4gcnVsZXMgYXJlIHdyb25nCisJICovCisJcHJpdmF0ZSBieXRlIHJlYWRBbmRTZXRPcHRpb24oKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24KKwl7CisJCWludCBzdGFydCA9IG1fY3VycmVudF8gKyAxOyAvLyBza2lwIG9wZW5pbmcgJ1snCisJICAgIGludCBpID0gcmVhZE9wdGlvbihtX3J1bGVzXywgc3RhcnQsIG1fb3B0aW9uRW5kXyk7CisgICAgICAgIAorICAgICAgICBpbnQgb3B0aW9uYXJnID0gbV9vcHRpb25hcmdfOworCQorCSAgICBpZiAoaSA8IDApIHsKKwkgICAgICAgIHRocm93UGFyc2VFeGNlcHRpb24obV9ydWxlc18sIHN0YXJ0KTsKKwkgICAgfQorCQorCSAgICBpZiAoaSA8IDcpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25hcmcgIT0gMCkgeworCSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgUlVMRVNfT1BUSU9OU19baV0ubV9zdWJPcHRpb25zXy5sZW5ndGg7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArKykgeworICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN1Ym5hbWUgPSBSVUxFU19PUFRJT05TX1tpXS5tX3N1Yk9wdGlvbnNfW2pdOworICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUgPSBvcHRpb25hcmcgKyBzdWJuYW1lLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAgaWYgKG1fcnVsZXNfLmxlbmd0aCgpID4gc2l6ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzdWJuYW1lLmVxdWFsc0lnbm9yZUNhc2UobV9ydWxlc18uc3Vic3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hcmcsIHNpemUpKSkgeworCSAgICAgICAgICAgICAgICAgICAgIHNldE9wdGlvbnMobV9vcHRpb25zXywgUlVMRVNfT1BUSU9OU19baV0ubV9hdHRyaWJ1dGVfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlVMRVNfT1BUSU9OU19baV0ubV9zdWJPcHRpb25BdHRyaWJ1dGVWYWx1ZXNfW2pdKTsKKwkgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVE9LRU5fU1VDQ0VTU19NQVNLXzsKKyAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aHJvd1BhcnNlRXhjZXB0aW9uKG1fcnVsZXNfLCBvcHRpb25hcmcpOworCSAgICB9IAorICAgICAgICBlbHNlIGlmIChpID09IDcpIHsgLy8gdmFyaWFibGUgdG9wCisJICAgICAgICByZXR1cm4gVE9LRU5fU1VDQ0VTU19NQVNLXyB8IFRPS0VOX1ZBUklBQkxFX1RPUF9NQVNLXzsKKwkgICAgfSAKKyAgICAgICAgZWxzZSBpZiAoaSA9PSA4KSB7IC8vIHJlYXJhbmdlCisJICAgICAgICByZXR1cm4gVE9LRU5fU1VDQ0VTU19NQVNLXzsKKwkgICAgfSAKKyAgICAgICAgZWxzZSBpZiAoaSA9PSA5KSB7IC8vIGJlZm9yZQorCSAgICAgICAgaWYgKG9wdGlvbmFyZyAhPSAwKSB7CisJICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBSVUxFU19PUFRJT05TX1tpXS5tX3N1Yk9wdGlvbnNfLmxlbmd0aDsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICsrKSB7CisgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3VibmFtZSA9IFJVTEVTX09QVElPTlNfW2ldLm1fc3ViT3B0aW9uc19bal07CisgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IG9wdGlvbmFyZyArIHN1Ym5hbWUubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICBpZiAobV9ydWxlc18ubGVuZ3RoKCkgPiBzaXplIAorICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN1Ym5hbWUuZXF1YWxzSWdub3JlQ2FzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ydWxlc18uc3Vic3RyaW5nKG9wdGlvbmFyZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYXJnICsgc3VibmFtZS5sZW5ndGgoKSkpKSB7CisJICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChieXRlKShUT0tFTl9TVUNDRVNTX01BU0tfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlVMRVNfT1BUSU9OU19baV0ubV9zdWJPcHRpb25BdHRyaWJ1dGVWYWx1ZXNfW2pdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMSk7CisgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhyb3dQYXJzZUV4Y2VwdGlvbihtX3J1bGVzXywgb3B0aW9uYXJnKTsKKwkgICAgfSAKKyAgICAgICAgZWxzZSBpZiAoaSA9PSAxMCkgeyAgLy8gdG9wLCB3ZSBhcmUgZ29pbmcgdG8gaGF2ZSBhbiBhcnJheSB3aXRoIAorICAgICAgICAgICAgLy8gc3RydWN0dXJlcyBvZiBsaW1pdCBDRXMgaW5kZXggdG8gdGhpcyBhcnJheSB3aWxsIGJlIAorICAgICAgICAgICAgLy8gc3JjLT5wYXJzZWRUb2tlbi5pbmRpcmVjdEluZGV4CisJICAgICAgICBtX3BhcnNlZFRva2VuXy5tX2luZGlyZWN0SW5kZXhfID0gMDsKKwkgICAgICAgIHJldHVybiBUT0tFTl9TVUNDRVNTX01BU0tfIHwgVE9LRU5fVE9QX01BU0tfOworCSAgICB9IAorICAgICAgICBlbHNlIGlmIChpIDwgMTMpIHsgLy8gZmlyc3QsIGxhc3QgCisJICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFJVTEVTX09QVElPTlNfW2ldLm1fc3ViT3B0aW9uc18ubGVuZ3RoOyBqICsrKSB7ICAgICAKKwkgICAgICAgICAgICBTdHJpbmcgc3VibmFtZSA9IFJVTEVTX09QVElPTlNfW2ldLm1fc3ViT3B0aW9uc19bal07CisgICAgICAgICAgICAgICAgaW50IHNpemUgPSBvcHRpb25hcmcgKyBzdWJuYW1lLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGlmIChtX3J1bGVzXy5sZW5ndGgoKSA+IHNpemUgCisgICAgICAgICAgICAgICAgICAgICYmIHN1Ym5hbWUuZXF1YWxzSWdub3JlQ2FzZShtX3J1bGVzXy5zdWJzdHJpbmcob3B0aW9uYXJnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKSkpIHsKKwkgICAgICAgICAgICAgICAgbV9wYXJzZWRUb2tlbl8ubV9pbmRpcmVjdEluZGV4XyA9IChjaGFyKShpIC0gMTAgKyAoaiA8PCAxKSk7ICAgICAgICAgCisJICAgICAgICAgICAgICAgIHJldHVybiBUT0tFTl9TVUNDRVNTX01BU0tfIHwgVE9LRU5fVE9QX01BU0tfOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0JICAgICAgICAKKyAgICAgICAgICAgIHRocm93UGFyc2VFeGNlcHRpb24obV9ydWxlc18sIG9wdGlvbmFyZyk7CisJICAgIH0gCisgICAgICAgIGVsc2UgaWYoaSA9PSAxMyB8fCBpID09IDE0KSB7IC8vIGNvcHkgYW5kIHJlbW92ZSBhcmUgaGFuZGxlZCBiZWZvcmUgbm9ybWFsaXphdGlvbgorICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBtb3ZlIGVuZCBoZXJlCisgICAgICAgICAgICBpbnQgbm9PcGVuQnJhY2VzID0gMTsKKyAgICAgICAgICAgIG1fY3VycmVudF8rKzsgLy8gc2tpcCBvcGVuaW5nIGJyYWNlCisgICAgICAgICAgICB3aGlsZShtX2N1cnJlbnRfIDwgbV9zb3VyY2VfLmxlbmd0aCgpICYmIG5vT3BlbkJyYWNlcyAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYobV9zb3VyY2VfLmNoYXJBdChtX2N1cnJlbnRfKSA9PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgIG5vT3BlbkJyYWNlcysrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZihtX3NvdXJjZV8uY2hhckF0KG1fY3VycmVudF8pID09ICddJykgeyAvLyBjbG9zaW5nIGJyYWNlCisgICAgICAgICAgICAgICAgICBub09wZW5CcmFjZXMtLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9jdXJyZW50XysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9vcHRpb25FbmRfID0gbV9jdXJyZW50Xy0xOworICAgICAgICAgICAgcmV0dXJuIFRPS0VOX1NVQ0NFU1NfTUFTS187IAorICAgICAgICB9CisgICAgICAgIGVsc2UgeworCSAgICAgICAgdGhyb3dQYXJzZUV4Y2VwdGlvbihtX3J1bGVzXywgb3B0aW9uYXJnKTsKKwkgICAgfQorICAgICAgICByZXR1cm4gVE9LRU5fU1VDQ0VTU19NQVNLXzsgLy8gd2Ugd2lsbCBuZXZlciByZWFjaCBoZXJlLgorCX0KKworICAgIC8qKgorICAgICAqIFNldCBjb2xsYXRpb24gb3B0aW9uCisgICAgICogQHBhcmFtIG9wdGlvbnNldCBvcHRpb24gc2V0IHRvIHNldAorICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgdHlwZSB0byBzZXQKKyAgICAgKiBAcGFyYW0gdmFsdWUgYXR0cmlidXRlIHZhbHVlCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldE9wdGlvbnMoT3B0aW9uU2V0IG9wdGlvbnNldCwgaW50IGF0dHJpYnV0ZSwgaW50IHZhbHVlKSAKKyAgICB7CisJICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7CisJICAgICAgICBjYXNlIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5ISVJBR0FOQV9RVUFURVJOQVJZX01PREVfIDoKKwkgICAgICAgICAgICBvcHRpb25zZXQubV9pc0hpcmFnYW5hNF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAodmFsdWUgPT0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuT05fKTsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIGNhc2UgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLkZSRU5DSF9DT0xMQVRJT05fIDoKKwkgICAgICAgICAgICBvcHRpb25zZXQubV9pc0ZyZW5jaENvbGxhdGlvbl8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKHZhbHVlID09IFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZVZhbHVlLk9OXyk7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICBjYXNlIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5BTFRFUk5BVEVfSEFORExJTkdfIDoKKwkgICAgICAgICAgICBvcHRpb25zZXQubV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKHZhbHVlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5TSElGVEVEXyk7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICBjYXNlIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZS5DQVNFX0ZJUlNUXyA6CisJICAgICAgICAgICAgb3B0aW9uc2V0Lm1fY2FzZUZpcnN0XyA9IHZhbHVlOworCSAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgY2FzZSBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGUuQ0FTRV9MRVZFTF8gOgorCSAgICAgICAgICAgIG9wdGlvbnNldC5tX2lzQ2FzZUxldmVsXyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAodmFsdWUgPT0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuT05fKTsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIGNhc2UgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLk5PUk1BTElaQVRJT05fTU9ERV8gOgorICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5PTl8pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTjsKKyAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgb3B0aW9uc2V0Lm1fZGVjb21wb3NpdGlvbl8gPSB2YWx1ZTsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIGNhc2UgUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlLlNUUkVOR1RIXyA6CisJICAgICAgICAgICAgb3B0aW9uc2V0Lm1fc3RyZW5ndGhfID0gdmFsdWU7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICBkZWZhdWx0IDoKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgfQorICAJfQorICAJCisgICAgVW5pY29kZVNldCBnZXRUYWlsb3JlZFNldCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbgorICAgIHsJCisgICAgICAgIGJvb2xlYW4gc3RhcnRPZlJ1bGVzID0gdHJ1ZTsKKyAgICAgICAgVW5pY29kZVNldCB0YWlsb3JlZCA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuOworICAgICAgICBDYW5vbmljYWxJdGVyYXRvciBpdCA9IG5ldyBDYW5vbmljYWxJdGVyYXRvcigiIik7CisgICAgICAgIAorICAgICAgICBtX3BhcnNlZFRva2VuXy5tX3N0cmVuZ3RoXyA9IFRPS0VOX1VOU0VUXzsgCisgICAgICAgIGludCBzb3VyY2VsaW1pdCA9IG1fc291cmNlXy5sZW5ndGgoKTsKKyAgICAgICAgaW50IGV4cGFuZE5leHQgPSAwOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKG1fY3VycmVudF8gPCBzb3VyY2VsaW1pdCkgeworICAgICAgICBtX3BhcnNlZFRva2VuXy5tX3ByZWZpeE9mZnNldF8gPSAwOworICAgICAgICBpZiAocGFyc2VOZXh0VG9rZW4oc3RhcnRPZlJ1bGVzKSA8IDApIHsKKyAgICAgICAgICAgIC8vIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzdGFydE9mUnVsZXMgPSBmYWxzZTsKKyAgICAgICAgLy8gVGhlIGlkZWEgaXMgdG8gdG9rZW5pemUgdGhlIHJ1bGUgc2V0LiBGb3IgZWFjaCBub24tcmVzZXQgdG9rZW4sCisgICAgICAgIC8vIHdlIGFkZCBhbGwgdGhlIGNhbm9uaWNhbHkgZXF1aXZhbGVudCBGQ0Qgc2VxdWVuY2VzIAorICAgICAgICAgICAgaWYobV9wYXJzZWRUb2tlbl8ubV9zdHJlbmd0aF8gIT0gVE9LRU5fUkVTRVRfKSB7CQkgICAgCQorICAgICAgICAgICAgICAgIGl0LnNldFNvdXJjZShtX3NvdXJjZV8uc3Vic3RyaW5nKAorICAgICAgICAgICAgICAgICAgCW1fcGFyc2VkVG9rZW5fLm1fY2hhcnNPZmZzZXRfLCAKKyAgICAgICAgICAgICAgICAgIAltX3BhcnNlZFRva2VuXy5tX2NoYXJzT2Zmc2V0XyttX3BhcnNlZFRva2VuXy5tX2NoYXJzTGVuXykpOworICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBpdC5uZXh0KCk7CisgICAgICAgICAgICAgICAgd2hpbGUocGF0dGVybiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAJaWYoTm9ybWFsaXplci5xdWlja0NoZWNrKHBhdHRlcm4sIE5vcm1hbGl6ZXIuRkNEKSAhPSBOb3JtYWxpemVyLk5PKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWlsb3JlZC5hZGQocGF0dGVybik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IGl0Lm5leHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhaWxvcmVkOworICAgIH0KKyAgICAKKyAgICBmaW5hbCBwcml2YXRlIHZvaWQgZXh0cmFjdFNldHNGcm9tUnVsZXMoU3RyaW5nIHJ1bGVzKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24geworICAgICAgaW50IG9wdGlvbk51bWJlciA9IC0xOworICAgICAgaW50IHNldFN0YXJ0ID0gMDsKKyAgICAgIGludCBpID0gMDsKKyAgICAgIHdoaWxlKGkgPCBydWxlcy5sZW5ndGgoKSkgeworICAgICAgICBpZihydWxlcy5jaGFyQXQoaSkgPT0gMHgwMDVCKSB7CisgICAgICAgICAgb3B0aW9uTnVtYmVyID0gcmVhZE9wdGlvbihydWxlcywgaSsxLCBydWxlcy5sZW5ndGgoKSk7CisgICAgICAgICAgc2V0U3RhcnQgPSBtX29wdGlvbmFyZ187CisgICAgICAgICAgaWYob3B0aW9uTnVtYmVyID09IDEzKSB7IC8qIGNvcHkgLSBwYXJ0cyBvZiBVQ0EgdG8gdGFpbG9yaW5nICovCisgICAgICAgICAgICBVbmljb2RlU2V0IG5ld1NldCA9IHJlYWRBbmRTZXRVbmljb2RlU2V0KHJ1bGVzLCBzZXRTdGFydCk7CisgICAgICAgICAgICAgIGlmKG1fY29weVNldF8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1fY29weVNldF8gPSBuZXdTZXQ7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9jb3B5U2V0Xy5hZGRBbGwobmV3U2V0KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZihvcHRpb25OdW1iZXIgPT0gMTQpIHsKKyAgICAgICAgICAgIFVuaWNvZGVTZXQgbmV3U2V0ID0gcmVhZEFuZFNldFVuaWNvZGVTZXQocnVsZXMsIHNldFN0YXJ0KTsKKyAgICAgICAgICAgICAgaWYobV9yZW1vdmVTZXRfID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtX3JlbW92ZVNldF8gPSBuZXdTZXQ7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9yZW1vdmVTZXRfLmFkZEFsbChuZXdTZXQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGkrKzsKKyAgICAgIH0gICAgICAgIAorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Db2xsYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2Y2FiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Db2xsYXRvci5qYXZhCkBAIC0wLDAgKzEsNTc2IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0b3IuamF2YSx2ICQgCisqICREYXRlOiAyMDAyLzEyLzAzIDIwOjQ1OjIwICQgCisqICRSZXZpc2lvbjogMS4xNyAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZVNlcnZpY2UuSUNVUmVzb3VyY2VCdW5kbGVGYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVVNlcnZpY2UuRmFjdG9yeTsKKworLyoqCisqIDxwPkNvbGxhdG9yIHBlcmZvcm1zIGxvY2FsZS1zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb24uIEEgY29uY3JldGUKKyogc3ViY2xhc3MsIFJ1bGVCYXNlZENvbGxhdG9yLCBhbGxvd3MgY3VzdG9taXphdGlvbiBvZiB0aGUgY29sbGF0aW9uCisqIG9yZGVyaW5nIGJ5IHRoZSB1c2Ugb2YgcnVsZSBzZXRzLjwvcD4KKyogCisqIDxwPkZvbGxvd2luZyB0aGUgPGEgaHJlZj1odHRwOi8vd3d3LnVuaWNvZGUub3JnPlVuaWNvZGUKKyogQ29uc29ydGl1bTwvYT4ncyBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIAorKiA8YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjEwLyI+IFVuaWNvZGUgQ29sbGF0aW9uCisqIEFsZ29yaXRobSAoVUNBKTwvYT4sIHRoZXJlIGFyZSA1IGRpZmZlcmVudCBsZXZlbHMgb2Ygc3RyZW5ndGggdXNlZAorKiBpbiBjb21wYXJpc29uczoKKyoKKyogPHVsPgorKiA8bGk+UFJJTUFSWSBzdHJlbmd0aDogVHlwaWNhbGx5LCB0aGlzIGlzIHVzZWQgdG8gZGVub3RlIGRpZmZlcmVuY2VzIGJldHdlZW4gCisqICAgICBiYXNlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCAiYSIgJmx0OyAiYiIpLiAKKyogICAgIEl0IGlzIHRoZSBzdHJvbmdlc3QgZGlmZmVyZW5jZS4gRm9yIGV4YW1wbGUsIGRpY3Rpb25hcmllcyBhcmUgZGl2aWRlZCAKKyogICAgIGludG8gZGlmZmVyZW50IHNlY3Rpb25zIGJ5IGJhc2UgY2hhcmFjdGVyLiAKKyogPGxpPlNFQ09OREFSWSBzdHJlbmd0aDogQWNjZW50cyBpbiB0aGUgY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZCBzZWNvbmRhcnkgCisqICAgICBkaWZmZXJlbmNlcyAoZm9yIGV4YW1wbGUsICJhcyIgJmx0OyAiJmFncmF2ZTtzIiAmbHQ7ICJhdCIpLiBPdGhlciAKKyogICAgIGRpZmZlcmVuY2VzIAorKiAgICAgYmV0d2VlbiBsZXR0ZXJzIGNhbiBhbHNvIGJlIGNvbnNpZGVyZWQgc2Vjb25kYXJ5IGRpZmZlcmVuY2VzLCBkZXBlbmRpbmcgCisqICAgICBvbiB0aGUgbGFuZ3VhZ2UuIEEgc2Vjb25kYXJ5IGRpZmZlcmVuY2UgaXMgaWdub3JlZCB3aGVuIHRoZXJlIGlzIGEgCisqICAgICBwcmltYXJ5IGRpZmZlcmVuY2UgYW55d2hlcmUgaW4gdGhlIHN0cmluZ3MuCisqIDxsaT5URVJUSUFSWSBzdHJlbmd0aDogVXBwZXIgYW5kIGxvd2VyIGNhc2UgZGlmZmVyZW5jZXMgaW4gY2hhcmFjdGVycyBhcmUgCisqICAgICBkaXN0aW5ndWlzaGVkIGF0IHRlcnRpYXJ5IHN0cmVuZ3RoIChmb3IgZXhhbXBsZSwgImFvIiAmbHQ7ICJBbyIgJmx0OyAKKyogICAgICJhJm9ncmF2ZTsiKS4gSW4gYWRkaXRpb24sIGEgdmFyaWFudCBvZiBhIGxldHRlciBkaWZmZXJzIGZyb20gdGhlIGJhc2UgCisqICAgICBmb3JtIG9uIHRoZSB0ZXJ0aWFyeSBzdHJlbmd0aCAoc3VjaCBhcyAiQSIgYW5kICImIzkzOTg7IikuIEFub3RoZXIgCisqICAgICBleGFtcGxlIGlzIHRoZSAKKyogICAgIGRpZmZlcmVuY2UgYmV0d2VlbiBsYXJnZSBhbmQgc21hbGwgS2FuYS4gQSB0ZXJ0aWFyeSBkaWZmZXJlbmNlIGlzIGlnbm9yZWQgCisqICAgICB3aGVuIHRoZXJlIGlzIGEgcHJpbWFyeSBvciBzZWNvbmRhcnkgZGlmZmVyZW5jZSBhbnl3aGVyZSBpbiB0aGUgc3RyaW5ncy4gCisqIDxsaT5RVUFURVJOQVJZIHN0cmVuZ3RoOiBXaGVuIHB1bmN0dWF0aW9uIGlzIGlnbm9yZWQgCisqICAgICA8YSBocmVmPWh0dHA6Ly93d3ctMTI0LmlibS5jb20vaWN1L3VzZXJndWlkZS9Db2xsYXRlX0NvbmNlcHRzLmh0bWwjSWdub3JpbmdfUHVuY3R1YXRpb24+CisqICAgICAoc2VlIElnbm9yaW5nIFB1bmN0dWF0aW9ucyBpbiB0aGUgdXNlciBndWlkZSk8L2E+IGF0IFBSSU1BUlkgdG8gVEVSVElBUlkgCisqICAgICBzdHJlbmd0aCwgYW4gYWRkaXRpb25hbCBzdHJlbmd0aCBsZXZlbCBjYW4gCisqICAgICBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHdvcmRzIHdpdGggYW5kIHdpdGhvdXQgcHVuY3R1YXRpb24gKGZvciBleGFtcGxlLCAKKyogICAgICJhYiIgJmx0OyAiYS1iIiAmbHQ7ICJhQiIpLiAKKyogICAgIFRoaXMgZGlmZmVyZW5jZSBpcyBpZ25vcmVkIHdoZW4gdGhlcmUgaXMgYSBQUklNQVJZLCBTRUNPTkRBUlkgb3IgVEVSVElBUlkgCisqICAgICBkaWZmZXJlbmNlLiBUaGUgUVVBVEVSTkFSWSBzdHJlbmd0aCBzaG91bGQgb25seSBiZSB1c2VkIGlmIGlnbm9yaW5nIAorKiAgICAgcHVuY3R1YXRpb24gaXMgcmVxdWlyZWQuIAorKiA8bGk+SURFTlRJQ0FMIHN0cmVuZ3RoOgorKiAgICAgV2hlbiBhbGwgb3RoZXIgc3RyZW5ndGhzIGFyZSBlcXVhbCwgdGhlIElERU5USUNBTCBzdHJlbmd0aCBpcyB1c2VkIGFzIGEgCisqICAgICB0aWVicmVha2VyLiBUaGUgVW5pY29kZSBjb2RlIHBvaW50IHZhbHVlcyBvZiB0aGUgTkZEIGZvcm0gb2YgZWFjaCBzdHJpbmcgCisqICAgICBhcmUgY29tcGFyZWQsIGp1c3QgaW4gY2FzZSB0aGVyZSBpcyBubyBkaWZmZXJlbmNlLiAKKyogICAgIEZvciBleGFtcGxlLCBIZWJyZXcgY2FudGVsbGF0aW9uIG1hcmtzIGFyZSBvbmx5IGRpc3Rpbmd1aXNoZWQgYXQgdGhpcyAKKyogICAgIHN0cmVuZ3RoLiBUaGlzIHN0cmVuZ3RoIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSwgYXMgb25seSBjb2RlIHBvaW50IAorKiAgICAgdmFsdWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gc3RyaW5ncyBpcyBhbiBleHRyZW1lbHkgcmFyZSBvY2N1cnJlbmNlLiAKKyogICAgIFVzaW5nIHRoaXMgc3RyZW5ndGggc3Vic3RhbnRpYWxseSBkZWNyZWFzZXMgdGhlIHBlcmZvcm1hbmNlIGZvciBib3RoIAorKiAgICAgY29tcGFyaXNvbiBhbmQgY29sbGF0aW9uIGtleSBnZW5lcmF0aW9uIEFQSXMuIFRoaXMgc3RyZW5ndGggYWxzbyAKKyogICAgIGluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUgY29sbGF0aW9uIGtleS4KKyogPC91bD4KKyoKKyogVW5saWtlIHRoZSBKREssIElDVTRKJ3MgQ29sbGF0b3IgZGVhbHMgb25seSB3aXRoIDIgZGVjb21wb3NpdGlvbiBtb2RlcywgCisqIHRoZSBjYW5vbmljYWwgZGVjb21wb3NpdGlvbiBtb2RlIGFuZCBvbmUgdGhhdCBkb2VzIG5vdCB1c2UgYW55IGRlY29tcG9zaXRpb24uCisqIFRoZSBjb21wYXRpYmlsaXR5IGRlY29tcG9zaXRpb24gbW9kZSwgamF2YS50ZXh0LkNvbGxhdG9yLkZVTExfREVDT01QT1NJVElPTgorKiBpcyBub3Qgc3VwcG9ydGVkIGhlcmUuIElmIHRoZSBjYW5vbmljYWwKKyogZGVjb21wb3NpdGlvbiBtb2RlIGlzIHNldCwgdGhlIENvbGxhdG9yIGhhbmRsZXMgdW4tbm9ybWFsaXplZCB0ZXh0IHByb3Blcmx5LCAKKyogcHJvZHVjaW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgaWYgdGhlIHRleHQgd2VyZSBub3JtYWxpemVkIGluIE5GRC4gSWYgCisqIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIGlzIHR1cm5lZCBvZmYsIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gCisqIGVuc3VyZSB0aGF0IGFsbCB0ZXh0IGlzIGFscmVhZHkgaW4gdGhlIGFwcHJvcHJpYXRlIGZvcm0gYmVmb3JlIHBlcmZvcm1pbmcKKyogYSBjb21wYXJpc29uIG9yIGJlZm9yZSBnZXR0aW5nIGEgQ29sbGF0aW9uS2V5LjwvcD4KKyoKKyogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbGxhdGlvbiBzZXJ2aWNlIHNlZSB0aGUgCisqIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvdXNlcmd1aWRlL0NvbGxhdGVfSW50cm8uaHRtbCI+dXNlcnMgCisqIGd1aWRlPC9hPi48L3A+CisqCisqIDxwPkV4YW1wbGVzIG9mIHVzZQorKiA8cHJlPgorKiAvLyBHZXQgdGhlIENvbGxhdG9yIGZvciBVUyBFbmdsaXNoIGFuZCBzZXQgaXRzIHN0cmVuZ3RoIHRvIFBSSU1BUlkKKyogQ29sbGF0b3IgdXNDb2xsYXRvciA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisqIHVzQ29sbGF0b3Iuc2V0U3RyZW5ndGgoQ29sbGF0b3IuUFJJTUFSWSk7CisqIGlmICh1c0NvbGxhdG9yLmNvbXBhcmUoImFiYyIsICJBQkMiKSA9PSAwKSB7CisqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0cmluZ3MgYXJlIGVxdWl2YWxlbnQiKTsKKyogfQorKiAKKyogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBjb21wYXJlIHR3byBzdHJpbmdzIHVzaW5nIHRoZQorKiBDb2xsYXRvciBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLgorKgorKiAvLyBDb21wYXJlIHR3byBzdHJpbmdzIGluIHRoZSBkZWZhdWx0IGxvY2FsZQorKiBDb2xsYXRvciBteUNvbGxhdG9yID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKTsKKyogbXlDb2xsYXRvci5zZXREZWNvbXBvc2l0aW9uKE5PX0RFQ09NUE9TSVRJT04pOworKiBpZiAobXlDb2xsYXRvci5jb21wYXJlKCImYWdyYXZlOyYjOTI7dTAzMjUiLCAiYSYjOTI7dTAzMjUmIzc2ODsiKSAhPSAwKSB7CisqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiZhZ3JhdmU7JiM5Mjt1MDMyNSBpcyBub3QgZXF1YWxzIHRvIGEmIzkyO3UwMzI1JiM3Njg7IHdpdGhvdXQgZGVjb21wb3NpdGlvbiIpOworKiAgICAgbXlDb2xsYXRvci5zZXREZWNvbXBvc2l0aW9uKENBTk9OSUNBTF9ERUNPTVBPU0lUSU9OKTsKKyogICAgIGlmIChteUNvbGxhdG9yLmNvbXBhcmUoIiZhZ3JhdmU7JiM5Mjt1MDMyNSIsICJhJiM5Mjt1MDMyNSYjNzY4OyIpICE9IDApIHsKKyogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yOiAmYWdyYXZlOyYjOTI7dTAzMjUgc2hvdWxkIGJlIGVxdWFscyB0byBhJiM5Mjt1MDMyNSYjNzY4OyB3aXRoIGRlY29tcG9zaXRpb24iKTsKKyogICAgIH0KKyogICAgIGVsc2UgeworKiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJmFncmF2ZTsmIzkyO3UwMzI1IGlzIGVxdWFscyB0byBhJiM5Mjt1MDMyNSYjNzY4OyB3aXRoIGRlY29tcG9zaXRpb24iKTsKKyogICAgIH0KKyogfQorKiBlbHNlIHsKKyogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3I6ICZhZ3JhdmU7JiM5Mjt1MDMyNSBzaG91bGQgYmUgbm90IGVxdWFscyB0byBhJiM5Mjt1MDMyNSYjNzY4OyB3aXRob3V0IGRlY29tcG9zaXRpb24iKTsKKyogfQorKiA8L3ByZT4KKyogPC9wPgorKiBAc2VlIFJ1bGVCYXNlZENvbGxhdG9yCisqIEBzZWUgQ29sbGF0aW9uS2V5CisqIEBhdXRob3IgU3luIFdlZSBRdWVrCisqIEBkcmFmdCBJQ1UgMi4yIAorKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb2xsYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IsIENsb25lYWJsZQoreyAgICAgCisgICAgLy8gcHVibGljIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogU3Ryb25nZXN0IGNvbGxhdG9yIHN0cmVuZ3RoIHZhbHVlLiBUeXBpY2FsbHkgdXNlZCB0byBkZW5vdGUgZGlmZmVyZW5jZXMgCisgICAgICogYmV0d2VlbiBiYXNlIGNoYXJhY3RlcnMuIFNlZSBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorICAgICAqIEBzZWUgI3NldFN0cmVuZ3RoCisgICAgICogQHNlZSAjZ2V0U3RyZW5ndGgKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFBSSU1BUlkgPSAwOworCisgICAgLyoqCisgICAgICogU2Vjb25kIGxldmVsIGNvbGxhdG9yIHN0cmVuZ3RoIHZhbHVlLiAKKyAgICAgKiBBY2NlbnRzIGluIHRoZSBjaGFyYWN0ZXJzIGFyZSBjb25zaWRlcmVkIHNlY29uZGFyeSBkaWZmZXJlbmNlcy4KKyAgICAgKiBPdGhlciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxldHRlcnMgY2FuIGFsc28gYmUgY29uc2lkZXJlZCBzZWNvbmRhcnkgCisgICAgICogZGlmZmVyZW5jZXMsIGRlcGVuZGluZyBvbiB0aGUgbGFuZ3VhZ2UuIAorICAgICAqIFNlZSBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorICAgICAqIEBzZWUgI3NldFN0cmVuZ3RoCisgICAgICogQHNlZSAjZ2V0U3RyZW5ndGgKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNFQ09OREFSWSA9IDE7CisKKyAgICAvKioKKyAgICAgKiBUaGlyZCBsZXZlbCBjb2xsYXRvciBzdHJlbmd0aCB2YWx1ZS4gCisgICAgICogVXBwZXIgYW5kIGxvd2VyIGNhc2UgZGlmZmVyZW5jZXMgaW4gY2hhcmFjdGVycyBhcmUgZGlzdGluZ3Vpc2hlZCBhdCB0aGlzCisgICAgICogc3RyZW5ndGggbGV2ZWwuIEluIGFkZGl0aW9uLCBhIHZhcmlhbnQgb2YgYSBsZXR0ZXIgZGlmZmVycyBmcm9tIHRoZSBiYXNlIAorICAgICAqIGZvcm0gb24gdGhlIHRlcnRpYXJ5IGxldmVsLgorICAgICAqIFNlZSBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorICAgICAqIEBzZWUgI3NldFN0cmVuZ3RoCisgICAgICogQHNlZSAjZ2V0U3RyZW5ndGgKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRFUlRJQVJZID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAvKioKKyAgICAgKiBGb3VydGggbGV2ZWwgY29sbGF0b3Igc3RyZW5ndGggdmFsdWUuIAorICAgICAqIFdoZW4gcHVuY3R1YXRpb24gaXMgaWdub3JlZCAKKyAgICAgKiA8YSBocmVmPSJodHRwOi8vd3d3LTEyNC5pYm0uY29tL2ljdS91c2VyZ3VpZGUvQ29sbGF0ZV9Db25jZXB0cy5odG1sI0lnbm9yaW5nX1B1bmN0dWF0aW9uIj4KKyAgICAgKiAoc2VlIElnbm9yaW5nIFB1bmN0dWF0aW9ucyBpbiB0aGUgdXNlciBndWlkZSk8L2E+IGF0IFBSSU1BUlkgdG8gVEVSVElBUlkgCisgICAgICogc3RyZW5ndGgsIGFuIGFkZGl0aW9uYWwgc3RyZW5ndGggbGV2ZWwgY2FuIAorICAgICAqIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggd29yZHMgd2l0aCBhbmQgd2l0aG91dCBwdW5jdHVhdGlvbi4KKyAgICAgKiBTZWUgY2xhc3MgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBleHBsYW5hdGlvbi4KKyAgICAgKiBAc2VlICNzZXRTdHJlbmd0aAorICAgICAqIEBzZWUgI2dldFN0cmVuZ3RoCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBRVUFURVJOQVJZID0gMzsKKworICAgIC8qKgorICAgICAqIDxwPgorICAgICAqIFNtYWxsZXN0IENvbGxhdG9yIHN0cmVuZ3RoIHZhbHVlLiBXaGVuIGFsbCBvdGhlciBzdHJlbmd0aHMgYXJlIGVxdWFsLCAKKyAgICAgKiB0aGUgSURFTlRJQ0FMIHN0cmVuZ3RoIGlzIHVzZWQgYXMgYSB0aWVicmVha2VyLiBUaGUgVW5pY29kZSBjb2RlIHBvaW50IAorICAgICAqIHZhbHVlcyBvZiB0aGUgTkZEIGZvcm0gb2YgZWFjaCBzdHJpbmcgYXJlIGNvbXBhcmVkLCBqdXN0IGluIGNhc2UgdGhlcmUgCisgICAgICogaXMgbm8gZGlmZmVyZW5jZS4gCisgICAgICogU2VlIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZXhwbGFuYXRpb24uCisgICAgICogPC9wPgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhpcyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSBKREsncworICAgICAqIDwvcD4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IElERU5USUNBTCA9IDE1OworCisgICAgLyoqCisgICAgICogPHA+RGVjb21wb3NpdGlvbiBtb2RlIHZhbHVlLiBXaXRoIE5PX0RFQ09NUE9TSVRJT04gc2V0LCBTdHJpbmdzCisgICAgICogd2lsbCBub3QgYmUgZGVjb21wb3NlZCBmb3IgY29sbGF0aW9uLiBUaGlzIGlzIHRoZSBkZWZhdWx0CisgICAgICogZGVjb21wb3NpdGlvbiBzZXR0aW5nIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRoZSBsb2NhbGUKKyAgICAgKiB1c2VkIHRvIGNyZWF0ZSB0aGUgQ29sbGF0b3IuPC9wPgorICAgICAqCisgICAgICogPHA+PHN0cm9uZz5Ob3RlPC9zdHJvbmc+IHRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIEpESydzLjwvcD4KKyAgICAgKiBAc2VlICNDQU5PTklDQUxfREVDT01QT1NJVElPTgorICAgICAqIEBzZWUgI2dldERlY29tcG9zaXRpb24KKyAgICAgKiBAc2VlICNzZXREZWNvbXBvc2l0aW9uCisgICAgICogQGRyYWZ0IElDVSAyLjIgCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTk9fREVDT01QT1NJVElPTiA9IDE2OworCisgICAgLyoqCisgICAgICogPHA+RGVjb21wb3NpdGlvbiBtb2RlIHZhbHVlLiBXaXRoIENBTk9OSUNBTF9ERUNPTVBPU0lUSU9OIHNldCwKKyAgICAgKiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGNhbm9uaWNhbCB2YXJpYW50cyBhY2NvcmRpbmcgdG8gdGhlIFVuaWNvZGUgc3RhbmRhcmQKKyAgICAgKiB3aWxsIGJlIGRlY29tcG9zZWQgZm9yIGNvbGxhdGlvbi48L3A+CisgICAgICoKKyAgICAgKiA8cD5DQU5PTklDQUxfREVDT01QT1NJVElPTiBjb3JyZXNwb25kcyB0byBOb3JtYWxpemF0aW9uIEZvcm0gRCBhcworICAgICAqIGRlc2NyaWJlZCBpbiA8YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjE1LyI+CisgICAgICogVW5pY29kZSBUZWNobmljYWwgUmVwb3J0ICMxNTwvYT4uCisgICAgICogPC9wPgorICAgICAqIEBzZWUgI05PX0RFQ09NUE9TSVRJT04KKyAgICAgKiBAc2VlICNnZXREZWNvbXBvc2l0aW9uCisgICAgICogQHNlZSAjc2V0RGVjb21wb3NpdGlvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IENBTk9OSUNBTF9ERUNPTVBPU0lUSU9OID0gMTc7CisgICAgCisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvLyBwdWJsaWMgc2V0dGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIDxwPlNldHMgdGhpcyBDb2xsYXRvcidzIHN0cmVuZ3RoIHByb3BlcnR5LiBUaGUgc3RyZW5ndGggcHJvcGVydHkgCisgICAgICogZGV0ZXJtaW5lcyB0aGUgbWluaW11bSBsZXZlbCBvZiBkaWZmZXJlbmNlIGNvbnNpZGVyZWQgc2lnbmlmaWNhbnQgCisgICAgICogZHVyaW5nIGNvbXBhcmlzb24uPC9wPgorICAgICAqIAorICAgICAqIDxwPlRoZSBkZWZhdWx0IHN0cmVuZ3RoIGZvciB0aGUgQ29sbGF0b3IgaXMgVEVSVElBUlksIHVubGVzcyBzcGVjaWZpZWQgCisgICAgICogb3RoZXJ3aXNlIGJ5IHRoZSBsb2NhbGUgdXNlZCB0byBjcmVhdGUgdGhlIENvbGxhdG9yLjwvcD4KKyAgICAgKgorICAgICAqIDxwPlNlZSB0aGUgQ29sbGF0b3IgY2xhc3MgZGVzY3JpcHRpb24gZm9yIGFuIGV4YW1wbGUgb2YgdXNlLjwvcD4KKyAgICAgKiBAcGFyYW0gbmV3IFN0cmVuZ3RoIHRoZSBuZXcgc3RyZW5ndGggdmFsdWUuCisgICAgICogQHNlZSAjZ2V0U3RyZW5ndGgKKyAgICAgKiBAc2VlICNQUklNQVJZCisgICAgICogQHNlZSAjU0VDT05EQVJZCisgICAgICogQHNlZSAjVEVSVElBUlkKKyAgICAgKiBAc2VlICNRVUFURVJOQVJZCisgICAgICogQHNlZSAjSURFTlRJQ0FMCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIG5ldyBzdHJlbmd0aCB2YWx1ZSBpcyBub3Qgb25lIAorICAgICAqICAgICAgICAgICAgICAgIG9mIFBSSU1BUlksIFNFQ09OREFSWSwgVEVSVElBUlksIFFVQVRFUk5BUlkgb3IgSURFTlRJQ0FMLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U3RyZW5ndGgoaW50IG5ld1N0cmVuZ3RoKSAKKyAgICB7CisgICAgICAgIGlmICgobmV3U3RyZW5ndGggIT0gUFJJTUFSWSkgJiYKKyAgICAgICAgICAgIChuZXdTdHJlbmd0aCAhPSBTRUNPTkRBUlkpICYmCisgICAgICAgICAgICAobmV3U3RyZW5ndGggIT0gVEVSVElBUlkpICYmCisgICAgICAgICAgICAobmV3U3RyZW5ndGggIT0gUVVBVEVSTkFSWSkgJiYKKyAgICAgICAgICAgIChuZXdTdHJlbmd0aCAhPSBJREVOVElDQUwpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbmNvcnJlY3QgY29tcGFyaXNvbiBsZXZlbC4iKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0cmVuZ3RoXyA9IG5ld1N0cmVuZ3RoOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD5TZXQgdGhlIGRlY29tcG9zaXRpb24gbW9kZSBvZiB0aGlzIENvbGxhdG9yLiAgU2V0dGluZyB0aGlzCisgICAgICogZGVjb21wb3NpdGlvbiBwcm9wZXJ0eSB3aXRoIENBTk9OSUNBTF9ERUNPTVBPU0lUSU9OIGFsbG93cyB0aGUKKyAgICAgKiBDb2xsYXRvciB0byBoYW5kbGUgdW4tbm9ybWFsaXplZCB0ZXh0IHByb3Blcmx5LCBwcm9kdWNpbmcgdGhlCisgICAgICogc2FtZSByZXN1bHRzIGFzIGlmIHRoZSB0ZXh0IHdlcmUgbm9ybWFsaXplZC4gSWYKKyAgICAgKiBOT19ERUNPTVBPU0lUSU9OIGlzIHNldCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0bworICAgICAqIGluc3VyZSB0aGF0IGFsbCB0ZXh0IGlzIGFscmVhZHkgaW4gdGhlIGFwcHJvcHJpYXRlIGZvcm0gYmVmb3JlCisgICAgICogYSBjb21wYXJpc29uIG9yIGJlZm9yZSBnZXR0aW5nIGEgQ29sbGF0aW9uS2V5LiBBZGp1c3RpbmcKKyAgICAgKiBkZWNvbXBvc2l0aW9uIG1vZGUgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBiZXR3ZWVuIGZhc3RlciBhbmQKKyAgICAgKiBtb3JlIGNvbXBsZXRlIGNvbGxhdGlvbiBiZWhhdmlvci48L3A+CisgICAgICogCisgICAgICogPHA+U2luY2UgYSBncmVhdCBtYW55IG9mIHRoZSB3b3JsZCdzIGxhbmd1YWdlcyBkbyBub3QgcmVxdWlyZQorICAgICAqIHRleHQgbm9ybWFsaXphdGlvbiwgbW9zdCBsb2NhbGVzIHNldCBOT19ERUNPTVBPU0lUSU9OIGFzIHRoZQorICAgICAqIGRlZmF1bHQgZGVjb21wb3NpdGlvbiBtb2RlLjwvcD4KKyAgICAgKiAKKyAgICAgKiBUaGUgZGVmYXVsdCBkZWNvbXBvc2l0b24gbW9kZSBmb3IgdGhlIENvbGxhdG9yIGlzCisgICAgICogTk9fREVDT01QT1NJVE9OLCB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZSBieSB0aGUgbG9jYWxlIHVzZWQKKyAgICAgKiB0byBjcmVhdGUgdGhlIENvbGxhdG9yLjwvcD4KKyAgICAgKiAKKyAgICAgKiA8cD5TZWUgZ2V0RGVjb21wb3NpdGlvbiBmb3IgYSBkZXNjcmlwdGlvbiBvZiBkZWNvbXBvc2l0aW9uCisgICAgICogbW9kZS48L3A+CisgICAgICogCisgICAgICogQHBhcmFtIGRlY29tcG9zaXRpb24gdGhlIG5ldyBkZWNvbXBvc2l0aW9uIG1vZGUKKyAgICAgKiBAc2VlICNnZXREZWNvbXBvc2l0aW9uCisgICAgICogQHNlZSAjTk9fREVDT01QT1NJVElPTgorICAgICAqIEBzZWUgI0NBTk9OSUNBTF9ERUNPTVBPU0lUSU9OCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIGdpdmVuIHZhbHVlIGlzIG5vdCBhIHZhbGlkIAorICAgICAqICAgICAgICAgICAgZGVjb21wb3NpdGlvbiBtb2RlLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldERlY29tcG9zaXRpb24oaW50IGRlY29tcG9zaXRpb24pIAorICAgIHsKKyAgICAgICAgaWYgKChkZWNvbXBvc2l0aW9uICE9IE5PX0RFQ09NUE9TSVRJT04pICYmCisgICAgICAgICAgICAoZGVjb21wb3NpdGlvbiAhPSBDQU5PTklDQUxfREVDT01QT1NJVElPTikpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIldyb25nIGRlY29tcG9zaXRpb24gbW9kZS4iKTsKKyAgICAgICAgfQorICAgICAgICBtX2RlY29tcG9zaXRpb25fID0gZGVjb21wb3NpdGlvbjsKKyAgICB9CisgICAgCisgICAgLy8gcHVibGljIGdldHRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBDb2xsYXRvciBmb3IgdGhlIGN1cnJlbnQgZGVmYXVsdCBsb2NhbGUuCisgICAgICogVGhlIGRlZmF1bHQgbG9jYWxlIGlzIGRldGVybWluZWQgYnkgamF2YS51dGlsLkxvY2FsZS5nZXREZWZhdWx0KCkuCisgICAgICogQHJldHVybiB0aGUgQ29sbGF0b3IgZm9yIHRoZSBkZWZhdWx0IGxvY2FsZSAoZm9yIGV4YW1wbGUsIGVuX1VTKSBpZiBpdAorICAgICAqICAgICAgICAgaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSBpZiB0aGVyZSBpcyBubyBDb2xsYXRvcgorICAgICAqICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGxvY2FsZSwgdGhlIGRlZmF1bHQgVUNBIGNvbGxhdG9yIAorICAgICAqICAgICAgICAgd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKiBAc2VlIGphdmEudXRpbC5Mb2NhbGUjZ2V0RGVmYXVsdCgpCisgICAgICogQHNlZSAjZ2V0SW5zdGFuY2UoTG9jYWxlKQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb2xsYXRvciBnZXRJbnN0YW5jZSgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8vIGJlZ2luIHJlZ2lzdHJ5IHN0dWZmCisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBDb2xsYXRvciBmb3IgdGhlIGRlc2lyZWQgbG9jYWxlLgorICAgICAqIEBwYXJhbSBsb2NhbGUgdGhlIGRlc2lyZWQgbG9jYWxlLgorICAgICAqIEByZXR1cm4gQ29sbGF0b3IgZm9yIHRoZSBkZXNpcmVkIGxvY2FsZSBpZiBpdCBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKiAgICAgICAgIE90aGVyd2lzZSBpZiB0aGVyZSBpcyBubyBDb2xsYXRvcgorICAgICAqICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGxvY2FsZSwgYSBkZWZhdWx0IFVDQSBjb2xsYXRvciB3aWxsIAorICAgICAqICAgICAgICAgYmUgcmV0dXJuZWQuCisgICAgICogQHNlZSBqYXZhLnV0aWwuTG9jYWxlCisgICAgICogQHNlZSBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGUKKyAgICAgKiBAc2VlICNnZXRJbnN0YW5jZSgpCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbGxhdG9yIGdldEluc3RhbmNlKExvY2FsZSBsb2NhbGUpCisgICAgeworICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKGxvY2FsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiAoQ29sbGF0b3IpKChDb2xsYXRvcilzZXJ2aWNlLmdldChsb2NhbGUpKS5jbG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBJQ1VMb2NhbGVTZXJ2aWNlIHNlcnZpY2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgSUNVTG9jYWxlU2VydmljZSBnZXRTZXJ2aWNlKCkgeworICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICBJQ1VMb2NhbGVTZXJ2aWNlIG5ld1NlcnZpY2UgPSBuZXcgSUNVTG9jYWxlU2VydmljZSgiQ29sbGF0b3IiKTsKKworICAgICAgICAgICAgY2xhc3MgQ29sbGF0b3JGYWN0b3J5IGV4dGVuZHMgSUNVUmVzb3VyY2VCdW5kbGVGYWN0b3J5IHsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgT2JqZWN0IGhhbmRsZUNyZWF0ZShMb2NhbGUgbG9jLCBpbnQga2luZCwgSUNVU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVsZUJhc2VkQ29sbGF0b3IobG9jKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXdTZXJ2aWNlLnJlZ2lzdGVyRmFjdG9yeShuZXcgQ29sbGF0b3JGYWN0b3J5KCkpOworCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbGxhdG9yLmNsYXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlID0gbmV3U2VydmljZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcnZpY2U7CisgICAgfQorCisgICAgLyogQHByb3RvdHlwZSAqLworICAgIC8qIHB1YmxpYyAqLyBzdGF0aWMgZmluYWwgT2JqZWN0IHJlZ2lzdGVyKENvbGxhdG9yIGNvbGxhdG9yLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiBnZXRTZXJ2aWNlKCkucmVnaXN0ZXJPYmplY3QoY29sbGF0b3IsIGxvY2FsZSk7CisgICAgfQorCisgICAgLyogQHByb3RvdHlwZSAqLworICAgIC8qIHB1YmxpYyAqLyBzdGF0aWMgZmluYWwgYm9vbGVhbiB1bnJlZ2lzdGVyKE9iamVjdCByZWdpc3RyeUtleSkgeworICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gc2VydmljZS51bnJlZ2lzdGVyRmFjdG9yeSgoRmFjdG9yeSlyZWdpc3RyeUtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHNldCBvZiBMb2NhbGVzIGZvciB3aGljaCBDb2xsYXRvcnMgYXJlIGluc3RhbGxlZC4gCisgICAgICogQHJldHVybiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbG9jYWxlcyB3aGljaCBjb2xsYXRvcnMgYXJlIGluc3RhbGxlZC4KKyAgICAgKiAgICAgICAgIFRoZSBzZXQgb2YgTG9jYWxlcyByZXR1cm5lZCB3aWxsIGJlIHRoZSBvbmVzIHJlZ2lzdGVyZWQgaW4gCisgICAgICogICAgICAgICBJQ1VMb2NhbGVTZXJ2aWNlLCBpZiBJQ1VMb2NhbGVTZXJ2aWNlIGlzIHVzZWQuIE90aGVyd2lzZSBpdCB3aWxsCisgICAgICogICAgICAgICBiZSB0aGUgc2V0IG9mIExvY2FsZXMgdGhhdCBhcmUgaW5zdGFsbGVkIHdpdGggSUNVNEouCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIExvY2FsZVtdIGdldEF2YWlsYWJsZUxvY2FsZXMoKSB7CisgICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBJQ1VMb2NhbGVEYXRhLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEBwcm90b3R5cGUgKi8KKyAgICAvKiBwdWJsaWMgKi8gc3RhdGljIGZpbmFsIE1hcCBnZXREaXNwbGF5TmFtZXMoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICByZXR1cm4gZ2V0U2VydmljZSgpLmdldERpc3BsYXlOYW1lcyhsb2NhbGUpOworICAgIH0KKworICAgIC8vIGVuZCByZWdpc3RyeSBzdHVmZgorCisgICAgLyoqCisgICAgICogPHA+UmV0dXJucyB0aGlzIENvbGxhdG9yJ3Mgc3RyZW5ndGggcHJvcGVydHkuIFRoZSBzdHJlbmd0aCBwcm9wZXJ0eSAKKyAgICAgKiBkZXRlcm1pbmVzIHRoZSBtaW5pbXVtIGxldmVsIG9mIGRpZmZlcmVuY2UgY29uc2lkZXJlZCBzaWduaWZpY2FudC4KKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogU2VlIHRoZSBDb2xsYXRvciBjbGFzcyBkZXNjcmlwdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqIDwvcD4KKyAgICAgKiBAcmV0dXJuIHRoaXMgQ29sbGF0b3IncyBjdXJyZW50IHN0cmVuZ3RoIHByb3BlcnR5LgorICAgICAqIEBzZWUgI3NldFN0cmVuZ3RoCisgICAgICogQHNlZSAjUFJJTUFSWQorICAgICAqIEBzZWUgI1NFQ09OREFSWQorICAgICAqIEBzZWUgI1RFUlRJQVJZCisgICAgICogQHNlZSAjUVVBVEVSTkFSWQorICAgICAqIEBzZWUgI0lERU5USUNBTAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBnZXRTdHJlbmd0aCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJlbmd0aF87CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPgorICAgICAqIEdldCB0aGUgZGVjb21wb3NpdGlvbiBtb2RlIG9mIHRoaXMgQ29sbGF0b3IuIERlY29tcG9zaXRpb24gbW9kZQorICAgICAqIGRldGVybWluZXMgaG93IFVuaWNvZGUgY29tcG9zZWQgY2hhcmFjdGVycyBhcmUgaGFuZGxlZC4gCisgICAgICogPC9wPgorICAgICAqIDxwPgorICAgICAqIFNlZSB0aGUgQ29sbGF0b3IgY2xhc3MgZGVzY3JpcHRpb24gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgKiA8L3A+CisgICAgICogQHJldHVybiB0aGUgZGVjb21wb3NpdGlvbiBtb2RlCisgICAgICogQHNlZSAjc2V0RGVjb21wb3NpdGlvbgorICAgICAqIEBzZWUgI05PX0RFQ09NUE9TSVRJT04KKyAgICAgKiBAc2VlICNDQU5PTklDQUxfREVDT01QT1NJVElPTgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBnZXREZWNvbXBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RlY29tcG9zaXRpb25fOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD4KKyAgICAgKiBDb21wYXJlcyB0aGUgc291cmNlIHRleHQgU3RyaW5nIHRvIHRoZSB0YXJnZXQgdGV4dCBTdHJpbmcgYWNjb3JkaW5nIHRvIAorICAgICAqIHRoaXMgQ29sbGF0b3IncyBydWxlcywgc3RyZW5ndGggYW5kIGRlY29tcG9zaXRpb24gbW9kZS4KKyAgICAgKiBSZXR1cm5zIGFuIGludGVnZXIgbGVzcyB0aGFuLCAKKyAgICAgKiBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gemVybyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc291cmNlIFN0cmluZyBpcyAKKyAgICAgKiBsZXNzIHRoYW4sIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgdGFyZ2V0IFN0cmluZy4gU2VlIHRoZSBDb2xsYXRvcgorICAgICAqIGNsYXNzIGRlc2NyaXB0aW9uIGZvciBhbiBleGFtcGxlIG9mIHVzZS4KKyAgICAgKiA8L3A+CisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgc291cmNlIFN0cmluZy4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQgU3RyaW5nLgorICAgICAqIEByZXR1cm4gUmV0dXJucyBhbiBpbnRlZ2VyIHZhbHVlLiBWYWx1ZSBpcyBsZXNzIHRoYW4gemVybyBpZiBzb3VyY2UgaXMgCisgICAgICogICAgICAgICBsZXNzIHRoYW4gdGFyZ2V0LCB2YWx1ZSBpcyB6ZXJvIGlmIHNvdXJjZSBhbmQgdGFyZ2V0IGFyZSBlcXVhbCwgCisgICAgICogICAgICAgICB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gemVybyBpZiBzb3VyY2UgaXMgZ3JlYXRlciB0aGFuIHRhcmdldC4KKyAgICAgKiBAc2VlIENvbGxhdGlvbktleQorICAgICAqIEBzZWUgI2dldENvbGxhdGlvbktleQorICAgICAqIEBleGNlcHRpb24gTnVsbFBvaW50ZXJFeGNlcHRpb24gdGhyb3duIGlmIGVpdGhlciBhcmd1bWVudHMgaXMgbnVsbC4KKyAgICAgKiAgICAgICAgICAgIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gaWYgZWl0aGVyIHNvdXJjZSBvciB0YXJnZXQgaXMKKyAgICAgKiAgICAgICAgICAgIG5vdCBvZiB0aGUgY2xhc3MgU3RyaW5nLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBjb21wYXJlKE9iamVjdCBzb3VyY2UsIE9iamVjdCB0YXJnZXQpCisgICAgeworICAgICAgICBpZiAoIShzb3VyY2UgaW5zdGFuY2VvZiBTdHJpbmcpIHx8ICEodGFyZ2V0IGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXJndW1lbnRzIGhhdmUgdG8gYmUgb2YgdHlwZSBTdHJpbmciKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29tcGFyZSgoU3RyaW5nKXNvdXJjZSwgKFN0cmluZyl0YXJnZXQpOworICAgIH0KKyAgICAKKyAgICAvLyBwdWJsaWMgb3RoZXIgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNvbXBhcmluZyB0aGUgZXF1YWxpdHkgb2YgdHdvIHRleHQgU3RyaW5ncyB1c2luZworICAgICAqIHRoaXMgQ29sbGF0b3IncyBydWxlcywgc3RyZW5ndGggYW5kIGRlY29tcG9zaXRpb24gbW9kZS4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRoZSBzb3VyY2Ugc3RyaW5nIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldCBzdHJpbmcgdG8gYmUgY29tcGFyZWQuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmdzIGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhlIGNvbGxhdGlvbgorICAgICAqICAgICAgICAgcnVsZXMsIG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAc2VlICNjb21wYXJlCisgICAgICogQGV4Y2VwdGlvbiBOdWxsUG9pbnRlckV4Y2VwdGlvbiB0aHJvd24gaWYgZWl0aGVyIGFyZ3VtZW50cyBpcyBudWxsLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIChjb21wYXJlKHNvdXJjZSwgdGFyZ2V0KSA9PSAwKTsKKyAgICB9CisKKwkgIC8qKgorCSAgICogR2V0IGFuIFVuaWNvZGVTZXQgdGhhdCBjb250YWlucyBhbGwgdGhlIGNoYXJhY3RlcnMgYW5kIHNlcXVlbmNlcyAKKwkgICAqIHRhaWxvcmVkIGluIHRoaXMgY29sbGF0b3IuCisJICAgKiBAcmV0dXJuIGEgcG9pbnRlciB0byBhIFVuaWNvZGVTZXQgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSAKKwkgICAqICAgICAgICAgY29kZSBwb2ludHMgYW5kIHNlcXVlbmNlcyB0aGF0IG1heSBzb3J0IGRpZmZlcmVudGx5IHRoYW4KKwkgICAqICAgICAgICAgaW4gdGhlIFVDQS4gCisJICAgKiBAZHJhZnQgSUNVIDIuNAorCSAgICovCisgIAlwdWJsaWMgVW5pY29kZVNldCBnZXRUYWlsb3JlZFNldCgpCisgIAl7CisgIAkJcmV0dXJuIG5ldyBVbmljb2RlU2V0KDAsIDB4MTBGRkZGKTsKKyAgCX0KKworICAgIC8qKgorICAgICAqIENvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0d28gQ29sbGF0b3JzLgorICAgICAqIEBwYXJhbSB0aGF0IHRoZSBDb2xsYXRvciB0byBiZSBjb21wYXJlZCB3aXRoIHRoaXMuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgQ29sbGF0b3IgaXMgdGhlIHNhbWUgYXMgdGhhdCBDb2xsYXRvcjsKKyAgICAgKiAgICAgICAgIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3QgdGhhdCk7CisgICAgCisgICAgLy8gcHVibGljIGFic3RyYWN0IG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBoYXNoIGNvZGUgZm9yIHRoaXMgQ29sbGF0b3IuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKiBAcmV0dXJuIDMyIGJpdCB1bmlxdWUgaGFzaCBjb2RlCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBoYXNoQ29kZSgpOworCisgICAgLyoqCisgICAgICogPHA+CisgICAgICogQ29tcGFyZXMgdGhlIHNvdXJjZSB0ZXh0IFN0cmluZyB0byB0aGUgdGFyZ2V0IHRleHQgU3RyaW5nIGFjY29yZGluZyB0byAKKyAgICAgKiB0aGlzIENvbGxhdG9yJ3MgcnVsZXMsIHN0cmVuZ3RoIGFuZCBkZWNvbXBvc2l0aW9uIG1vZGUuCisgICAgICogUmV0dXJucyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiwgCisgICAgICogZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHNvdXJjZSBTdHJpbmcgaXMgCisgICAgICogbGVzcyB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIHRhcmdldCBTdHJpbmcuIFNlZSB0aGUgQ29sbGF0b3IKKyAgICAgKiBjbGFzcyBkZXNjcmlwdGlvbiBmb3IgYW4gZXhhbXBsZSBvZiB1c2UuCisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHNvdXJjZSBTdHJpbmcuCisgICAgICogQHBhcmFtIHRhcmdldCB0aGUgdGFyZ2V0IFN0cmluZy4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYW4gaW50ZWdlciB2YWx1ZS4gVmFsdWUgaXMgbGVzcyB0aGFuIHplcm8gaWYgc291cmNlIGlzIAorICAgICAqICAgICAgICAgbGVzcyB0aGFuIHRhcmdldCwgdmFsdWUgaXMgemVybyBpZiBzb3VyY2UgYW5kIHRhcmdldCBhcmUgZXF1YWwsIAorICAgICAqICAgICAgICAgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHplcm8gaWYgc291cmNlIGlzIGdyZWF0ZXIgdGhhbiB0YXJnZXQuCisgICAgICogQHNlZSBDb2xsYXRpb25LZXkKKyAgICAgKiBAc2VlICNnZXRDb2xsYXRpb25LZXkKKyAgICAgKiBAZXhjZXB0aW9uIE51bGxQb2ludGVyRXhjZXB0aW9uIHRocm93biBpZiBlaXRoZXIgYXJndW1lbnRzIGlzIG51bGwuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNvbXBhcmUoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCk7CisKKyAgICAvKioKKyAgICAgKiA8cD4KKyAgICAgKiBUcmFuc2Zvcm1zIHRoZSBTdHJpbmcgaW50byBhIENvbGxhdGlvbktleSBzdWl0YWJsZSBmb3IgZWZmaWNpZW50CisgICAgICogcmVwZWF0ZWQgY29tcGFyaXNvbi4gIFRoZSByZXN1bHRpbmcga2V5IGRlcGVuZHMgb24gdGhlIGNvbGxhdG9yJ3MKKyAgICAgKiBydWxlcywgc3RyZW5ndGggYW5kIGRlY29tcG9zaXRpb24gbW9kZS4KKyAgICAgKiA8L3A+IAorICAgICAqIDxwPlNlZSB0aGUgQ29sbGF0aW9uS2V5IGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHN0cmluZyB0byBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgQ29sbGF0aW9uS2V5LgorICAgICAqIEByZXR1cm4gdGhlIENvbGxhdGlvbktleSBmb3IgdGhlIGdpdmVuIFN0cmluZyBiYXNlZCBvbiB0aGlzIENvbGxhdG9yJ3MgCisgICAgICogICAgICAgICBjb2xsYXRpb24gcnVsZXMuIElmIHRoZSBzb3VyY2UgU3RyaW5nIGlzIG51bGwsIGEgbnVsbCAKKyAgICAgKiAgICAgICAgIENvbGxhdGlvbktleSBpcyByZXR1cm5lZC4KKyAgICAgKiBAc2VlIENvbGxhdGlvbktleQorICAgICAqIEBzZWUgI2NvbXBhcmUoU3RyaW5nLCBTdHJpbmcpCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGF0aW9uS2V5IGdldENvbGxhdGlvbktleShTdHJpbmcgc291cmNlKTsKKyAgICAKKyAgICAvLyBwcm90ZWN0ZWQgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgICAvKioKKyAgICAgKiBFbXB0eSBkZWZhdWx0IGNvbnN0cnVjdG9yIHRvIG1ha2UgamF2YWRvY3MgaGFwcHkKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHByb3RlY3RlZCBDb2xsYXRvcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIENvbGxhdGlvbiBzdHJlbmd0aAorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fc3RyZW5ndGhfID0gVEVSVElBUlk7CisKKyAgICAvKioKKyAgICAgKiBEZWNvbXBvc2l0aW9uIG1vZGUKKyAgICAgKi8gCisgICAgcHJpdmF0ZSBpbnQgbV9kZWNvbXBvc2l0aW9uXyA9IENBTk9OSUNBTF9ERUNPTVBPU0lUSU9OOworfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9Db2xsYXRvclJlYWRlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0b3JSZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGU1ZDIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29sbGF0b3JSZWFkZXIuamF2YQpAQCAtMCwwICsxLDQ3OSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbGxhdG9yUmVhZGVyLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMS8yMCAxOToxNDowOSAkIAorKiAkUmV2aXNpb246IDEuMTAgJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUJpbmFyeTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkludFRyaWU7CisKKy8qKgorKiA8cD5JbnRlcm5hbCByZWFkZXIgY2xhc3MgZm9yIElDVSBkYXRhIGZpbGUgdWNhLmljdSBjb250YWluaW5nIAorKiBVbmljb2RlIENvbGxhdGlvbiBBbGdvcml0aG0gZGF0YS48L3A+IAorKiA8cD5UaGlzIGNsYXNzIHNpbXBseSByZWFkcyB1Y2EuaWN1LCBhdXRoZW50aWNhdGVzIHRoYXQgaXQgaXMgYSB2YWxpZAorKiBJQ1UgZGF0YSBmaWxlIGFuZCBzcGxpdCBpdHMgY29udGVudHMgdXAgaW50byBibG9ja3Mgb2YgZGF0YSBmb3IgdXNlIGluCisqIDxhIGhyZWY9Q29sbGF0b3IuaHRtbD5jb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yPC9hPi4KKyogPC9wPiAKKyogPHA+dWNhLmljdSB3aGljaCBpcyBpbiBiaWctZW5kaWFuIGZvcm1hdCBpcyBqYXJlZCB0b2dldGhlciB3aXRoIHRoaXMgCisqIHBhY2thZ2UuPC9wPgorKiBAYXV0aG9yIFN5biBXZWUgUXVlaworKiBAc2luY2UgcmVsZWFzZSAyLjIsIEFwcmlsIDE4IDIwMDIKKyogQGRyYWZ0IDIuMgorKi8KKworZmluYWwgY2xhc3MgQ29sbGF0b3JSZWFkZXIKK3sgICAgICAgICAgCisgICAgLy8gcHJvdGVjdGVkIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICogPHA+UHJvdGVjdGVkIGNvbnN0cnVjdG9yLjwvcD4KKyAgICAqIEBwYXJhbSBpbnB1dFN0cmVhbSBJQ1UgY2FsbGF0b3IgZmlsZSBpbnB1dCBzdHJlYW0KKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3cgaWYgZGF0YSBmaWxlIGZhaWxzIGF1dGhlbnRpY2F0aW9uIAorICAgICogQGRyYWZ0IDIuMQorICAgICovCisgICAgcHJvdGVjdGVkIENvbGxhdG9yUmVhZGVyKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIElDVUJpbmFyeS5yZWFkSGVhZGVyKGlucHV0U3RyZWFtLCBEQVRBX0ZPUk1BVF9JRF8sIFVDQV9BVVRIRU5USUNBVEVfKTsKKyAgICAgICAgbV9kYXRhSW5wdXRTdHJlYW1fID0gbmV3IERhdGFJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICogPHA+UHJvdGVjdGVkIGNvbnN0cnVjdG9yLjwvcD4KKyAgICAqIEBwYXJhbSBpbnB1dFN0cmVhbSBJQ1UgdXByb3BzLmljdSBmaWxlIGlucHV0IHN0cmVhbQorICAgICogQHBhcmFtIHJlYWRJQ1VIZWFkZXIgZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgSUNVIGhlYWRlciBoYXMgdG8gYmUgcmVhZAorICAgICogQGV4Y2VwdGlvbiBJT0V4Y2VwdGlvbiB0aHJvdyBpZiBkYXRhIGZpbGUgZmFpbHMgYXV0aGVudGljYXRpb24gCisgICAgKiBAZHJhZnQgMi4xCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgQ29sbGF0b3JSZWFkZXIoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIGJvb2xlYW4gcmVhZElDVUhlYWRlcikgCisgICAgCQkJCQkJCQkJCQkJCQl0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgCWlmIChyZWFkSUNVSGVhZGVyKSB7CisgICAgICAgIAlJQ1VCaW5hcnkucmVhZEhlYWRlcihpbnB1dFN0cmVhbSwgREFUQV9GT1JNQVRfSURfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDQV9BVVRIRU5USUNBVEVfKTsKKyAgICAJfQorICAgICAgICBtX2RhdGFJbnB1dFN0cmVhbV8gPSBuZXcgRGF0YUlucHV0U3RyZWFtKGlucHV0U3RyZWFtKTsKKyAgICB9CisgIAorICAgIC8vIHByb3RlY3RlZCBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAorICAgIC8qKgorICAgICogUmVhZCBhbmQgYnJlYWsgdXAgdGhlIGhlYWRlciBzdHJlYW0gb2YgZGF0YSBwYXNzZWQgaW4gYXMgYXJndW1lbnRzIGludG8gCisgICAgKiBtZWFuaW5nZnVsIENvbGxhdG9yIGRhdGEuCisgICAgKiBAcGFyYW0gcmJjIFJ1bGVCYXNlZENvbGxhdG9yIHRvIHBvcHVsYXRlIHdpdGggaGVhZGVyIGluZm9ybWF0aW9uCisgICAgKiBAZXhjZXB0aW9uIElPRXhjZXB0aW9uIHRocm93biB3aGVuIHRoZXJlJ3MgYSBkYXRhIGVycm9yLgorICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgcmVhZEhlYWRlcihSdWxlQmFzZWRDb2xsYXRvciByYmMpIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAJaW50IHNpemUgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgIAkvLyBhbGwgdGhlIG9mZnNldHMgYXJlIGluIGJ5dGVzCisgICAgICAJLy8gdG8gZ2V0IHRoZSBhZGRyZXNzIGFkZCB0byB0aGUgaGVhZGVyIGFkZHJlc3MgYW5kIGNhc3QgcHJvcGVybHkgCisgICAgICAJLy8gRGVmYXVsdCBvcHRpb25zIGludCBvcHRpb25zCisgICAgICAgIG1fZGF0YUlucHV0U3RyZWFtXy5za2lwKDQpOyAvLyBvcHRpb25zCisgICAgICAgIC8vIHN0cnVjdHVyZSB3aGljaCBob2xkcyB2YWx1ZXMgZm9yIGluZGlyZWN0IHBvc2l0aW9uaW5nIGFuZCBpbXBsaWNpdCAKKyAgICAgICAgLy8gcmFuZ2VzCisgICAgICAJaW50IFVDQUNvbnN0ID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgCisgICAgICAgIC8vIHRoaXMgb25lIGlzIG5lZWRlZCBvbmx5IGZvciBVQ0EsIHRvIGNvcHkgdGhlIGFwcHJvcHJpYXRlIAorICAgICAgICAvLyBjb250cmFjdGlvbnMKKyAgICAgICAgbV9kYXRhSW5wdXRTdHJlYW1fLnNraXAoNCk7CisgICAgICAJLy8gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICAgIAltX2RhdGFJbnB1dFN0cmVhbV8uc2tpcEJ5dGVzKDQpOworICAgICAgCS8vIGNvbnN0IHVpbnQ4X3QgKm1hcHBpbmdQb3NpdGlvbjsgCisgICAgICAJaW50IG1hcHBpbmcgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAKKyAgICAgIAkvLyB1aW50MzJfdCAqZXhwYW5zaW9uOyAKKyAgICAgIAlyYmMubV9leHBhbnNpb25PZmZzZXRfID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgCisgICAgICAJLy8gVUNoYXIgKmNvbnRyYWN0aW9uSW5kZXg7ICAgICAKKyAgICAgIAlyYmMubV9jb250cmFjdGlvbk9mZnNldF8gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAKKyAgICAgIAkvLyB1aW50MzJfdCAqY29udHJhY3Rpb25DRXM7CisgICAgICAJaW50IGNvbnRyYWN0aW9uQ0UgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgIAorICAgICAgCS8vIG5lZWRlZCBmb3IgdmFyaW91cyBjbG9zdXJlcyBpbnQgY29udHJhY3Rpb25TaXplIAorICAgICAgCWludCBjb250cmFjdGlvblNpemUgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgCisgICAgICAJLy8gYXJyYXkgb2YgbGFzdCBjb2xsYXRpb24gZWxlbWVudCBpbiBleHBhbnNpb24KKyAgICAgIAlpbnQgZXhwYW5zaW9uRW5kQ0UgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgCisgICAgICAJLy8gYXJyYXkgb2YgbWF4aW11bSBleHBhbnNpb24gc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHBhbnNpb24KKyAgICAgICAgLy8gY29sbGF0aW9uIGVsZW1lbnRzIHdpdGggbGFzdCBlbGVtZW50IGluIGV4cGFuc2lvbkVuZENFCisgICAgICAJaW50IGV4cGFuc2lvbkVuZENFTWF4U2l6ZSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAgICAKKyAgICAgIAkvLyBzaXplIG9mIGVuZEV4cGFuc2lvbkNFIGludCBleHBhbnNpb25FbmRDRVNpemUKKyAgICAgIAltX2RhdGFJbnB1dFN0cmVhbV8uc2tpcEJ5dGVzKDQpOyAKKyAgICAgIAkvLyBoYXNoIHRhYmxlIG9mIHVuc2FmZSBjb2RlIHBvaW50cyAKKyAgICAgIAlpbnQgdW5zYWZlID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgICAgICAgICAgICAKKyAgICAgIAkvLyBoYXNoIHRhYmxlIG9mIGZpbmFsIGNvZGUgcG9pbnRzIGluIGNvbnRyYWN0aW9ucy4KKyAgICAgIAlpbnQgY29udHJhY3Rpb25FbmQgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgCS8vIGludCBDRWNvdW50ID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgIAltX2RhdGFJbnB1dFN0cmVhbV8uc2tpcEJ5dGVzKDQpOworICAgICAgCS8vIGlzIGphbW9TcGVjaWFsCisgICAgICAJcmJjLm1faXNKYW1vU3BlY2lhbF8gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEJvb2xlYW4oKTsgCisgICAgICAgIC8vIHBhZGRpbmcKKyAgICAgIAltX2RhdGFJbnB1dFN0cmVhbV8uc2tpcEJ5dGVzKDMpOworICAgICAgCS8vIGJ5dGUgdmVyc2lvbltdID0gbmV3IGJ5dGVbNF07CisgICAgICAJbV9kYXRhSW5wdXRTdHJlYW1fLnNraXBCeXRlcyg0KTsKKyAgICAgIAkvLyBieXRlIGNoYXJzZXROYW1lW10gPSBuZXcgYnl0ZVszMl07IC8vIGZvciBjaGFyc2V0IENFcworICAgICAgCW1fZGF0YUlucHV0U3RyZWFtXy5za2lwQnl0ZXMoMzIpOworICAgICAgCW1fZGF0YUlucHV0U3RyZWFtXy5za2lwQnl0ZXMoNjQpOyAvLyBmb3IgZnV0dXJlIHVzZSAKKyAgICAgIAlpZiAocmJjLm1fY29udHJhY3Rpb25PZmZzZXRfID09IDApIHsgLy8gY29udHJhY3Rpb24gY2FuIGJlIG51bGwKKyAgICAgIAkJcmJjLm1fY29udHJhY3Rpb25PZmZzZXRfID0gbWFwcGluZzsKKyAgICAgIAkJY29udHJhY3Rpb25DRSA9IG1hcHBpbmc7CisgICAgICAJfQorICAgICAgCW1fZXhwYW5zaW9uU2l6ZV8gPSByYmMubV9jb250cmFjdGlvbk9mZnNldF8gLSByYmMubV9leHBhbnNpb25PZmZzZXRfOworICAgICAgCW1fY29udHJhY3Rpb25JbmRleFNpemVfID0gY29udHJhY3Rpb25DRSAtIHJiYy5tX2NvbnRyYWN0aW9uT2Zmc2V0XzsKKyAgICAgIAltX2NvbnRyYWN0aW9uQ0VTaXplXyA9IG1hcHBpbmcgLSBjb250cmFjdGlvbkNFOworICAgICAgCW1fdHJpZVNpemVfID0gZXhwYW5zaW9uRW5kQ0UgLSBtYXBwaW5nOworICAgICAgCW1fZXhwYW5zaW9uRW5kQ0VTaXplXyA9IGV4cGFuc2lvbkVuZENFTWF4U2l6ZSAtIGV4cGFuc2lvbkVuZENFOworICAgICAgCW1fZXhwYW5zaW9uRW5kQ0VNYXhTaXplU2l6ZV8gPSB1bnNhZmUgLSBleHBhbnNpb25FbmRDRU1heFNpemU7CisgICAgICAJbV91bnNhZmVTaXplXyA9IGNvbnRyYWN0aW9uRW5kIC0gdW5zYWZlOworICAgICAgICBtX1VDQVZhbHVlc1NpemVfID0gc2l6ZSAtIFVDQUNvbnN0OyAvLyBVQ0EgdmFsdWUsIHdpbGwgYmUgaGFuZGxlZCBsYXRlcgorICAgICAgICAvLyB0cmVhdCBpdCBhcyBub3JtYWwgY29sbGF0b3IgZmlyc3QKKyAgICAgICAgLy8gZm9yIG5vcm1hbCBjb2xsYXRvciB0aGVyZSBpcyBubyBVQ0EgY29udHJhY3Rpb24KKyAgICAgICAgbV9jb250cmFjdGlvbkVuZFNpemVfID0gc2l6ZSAtIGNvbnRyYWN0aW9uRW5kOyAgICAKKyAgICAgICAgCisgICAgICAJcmJjLm1fY29udHJhY3Rpb25PZmZzZXRfID4+PSAxOyAvLyBjYXN0aW5nIHRvIGludHMKKyAgICAgIAlyYmMubV9leHBhbnNpb25PZmZzZXRfID4+PSAyOyAvLyBjYXN0aW5nIHRvIGNoYXJzCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJlYWQgYW5kIGJyZWFrIHVwIHRoZSBjb2xsYXRpb24gb3B0aW9ucyBwYXNzZWQgaW4gdGhlIHN0cmVhbSBvZiBkYXRhCisgICAgICogYW5kIHVwZGF0ZSB0aGUgYXJndW1lbnQgQ29sbGF0b3Igd2l0aCB0aGUgcmVzdWx0cworICAgICAqIEBwYXJhbSByYmMgUnVsZUJhc2VkQ29sbGF0b3IgdG8gcG9wdWxhdGUKKyAgICAgKiBAZXhjZXB0aW9uIElPRXhjZXB0aW9uIHRocm93biB3aGVuIHRoZXJlJ3MgYSBkYXRhIGVycm9yLgorICAgICAqIEBkcmFmdCAyLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCByZWFkT3B0aW9ucyhSdWxlQmFzZWRDb2xsYXRvciByYmMpIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAJcmJjLm1fZGVmYXVsdFZhcmlhYmxlVG9wVmFsdWVfID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAJcmJjLm1fZGVmYXVsdElzRnJlbmNoQ29sbGF0aW9uXyA9IChtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpCisgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuT05fKTsKKyAgICAgICAgcmJjLm1fZGVmYXVsdElzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkXyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAobV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKSA9PSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZVZhbHVlLlNISUZURURfKTsKKyAgICAgICAgcmJjLm1fZGVmYXVsdENhc2VGaXJzdF8gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICByYmMubV9kZWZhdWx0SXNDYXNlTGV2ZWxfID0gKG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gUnVsZUJhc2VkQ29sbGF0b3IuQXR0cmlidXRlVmFsdWUuT05fKTsKKyAgICAgICAgaW50IHZhbHVlID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAJaWYgKHZhbHVlID09IFJ1bGVCYXNlZENvbGxhdG9yLkF0dHJpYnV0ZVZhbHVlLk9OXykgeworICAgIAkJdmFsdWUgPSBDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTjsKKyAgICAJfQorICAgIAllbHNlIHsKKyAgICAJCXZhbHVlID0gQ29sbGF0b3IuTk9fREVDT01QT1NJVElPTjsKKyAgICAJfQorICAgIAlyYmMubV9kZWZhdWx0RGVjb21wb3NpdGlvbl8gPSB2YWx1ZTsKKyAgICAJcmJjLm1fZGVmYXVsdFN0cmVuZ3RoXyA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgCXJiYy5tX2RlZmF1bHRJc0hpcmFnYW5hNF8gPSAobV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKSAKKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBSdWxlQmFzZWRDb2xsYXRvci5BdHRyaWJ1dGVWYWx1ZS5PTl8pOworICAgICAgICBtX2RhdGFJbnB1dFN0cmVhbV8uc2tpcCg2NCk7IC8vIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisgICAgfQorICAgIAorICAgIC8qKgorICAgICogUmVhZCBhbmQgYnJlYWsgdXAgdGhlIHN0cmVhbSBvZiBkYXRhIHBhc3NlZCBpbiBhcyBhcmd1bWVudHMgaW50byAKKyAgICAqIG1lYW5pbmdmdWwgQ29sbGF0b3IgZGF0YS4KKyAgICAqIEBwYXJhbSByYmMgUnVsZUJhc2VkQ29sbGF0b3IgdG8gcG9wdWxhdGUKKyAgICAqIEBwYXJhbSBVQ0FDb25zdCBvYmplY3QgdG8gZmlsbCB1cCB3aXRoIFVDQSBjb25zdGFudHMgaWYgd2UgYXJlIHJlYWRpbmcgCisgICAgKiAgICAgICAgICAgICAgICAgdGhlIFVDQSBjb2xsYXRvciwgaWYgbm90IHVzZSBhIG51bGwKKyAgICAqIEByZXR1cm4gVUNBQ29udHJhY3Rpb25zIGFycmF5IGZpbGxlZCB1cCB3aXRoIHRoZSBVQ0EgY29udHJhY3Rpb25zIGlmIHdlCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFyZSByZWFkaW5nIHRoZSBVQ0EgY29sbGF0b3IKKyAgICAqIEBleGNlcHRpb24gSU9FeGNlcHRpb24gdGhyb3duIHdoZW4gdGhlcmUncyBhIGRhdGEgZXJyb3IuCisgICAgKiBAZHJhZnQgMi4yCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgY2hhcltdIHJlYWQoUnVsZUJhc2VkQ29sbGF0b3IgcmJjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IuVUNBQ29uc3RhbnRzIFVDQUNvbnN0KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgorICAgIHsKKyAgICAJcmVhZEhlYWRlcihyYmMpOworICAgIAlyZWFkT3B0aW9ucyhyYmMpOworICAgIAltX2V4cGFuc2lvblNpemVfID4+PSAyOworICAgIAlyYmMubV9leHBhbnNpb25fID0gbmV3IGludFttX2V4cGFuc2lvblNpemVfXTsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBtX2V4cGFuc2lvblNpemVfOyBpICsrKSB7CisgICAgCQlyYmMubV9leHBhbnNpb25fW2ldID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAJfQorICAgICAgICBpZiAobV9jb250cmFjdGlvbkluZGV4U2l6ZV8gPiAwKSB7IAorICAgICAgICAJbV9jb250cmFjdGlvbkluZGV4U2l6ZV8gPj49IDE7CisgICAgICAgIAlyYmMubV9jb250cmFjdGlvbkluZGV4XyA9IG5ldyBjaGFyW21fY29udHJhY3Rpb25JbmRleFNpemVfXTsKKyAgICAgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgbV9jb250cmFjdGlvbkluZGV4U2l6ZV87IGkgKyspIHsKKyAgICAgICAgCQlyYmMubV9jb250cmFjdGlvbkluZGV4X1tpXSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkQ2hhcigpOworICAgICAgICAJfQorICAgICAgICAJbV9jb250cmFjdGlvbkNFU2l6ZV8gPj49IDI7CisgICAgICAgIAlyYmMubV9jb250cmFjdGlvbkNFXyA9IG5ldyBpbnRbbV9jb250cmFjdGlvbkNFU2l6ZV9dOworICAgICAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NvbnRyYWN0aW9uQ0VTaXplXzsgaSArKykgeworICAgICAgICAJCXJiYy5tX2NvbnRyYWN0aW9uQ0VfW2ldID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgCX0KKyAgICAgICAgfQorICAgIAlyYmMubV90cmllXyA9IG5ldyBJbnRUcmllKG1fZGF0YUlucHV0U3RyZWFtXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAJICBSdWxlQmFzZWRDb2xsYXRvci5EYXRhTWFuaXB1bGF0ZS5nZXRJbnN0YW5jZSgpKTsKKyAgICAJaWYgKCFyYmMubV90cmllXy5pc0xhdGluMUxpbmVhcigpKSB7CisgICAgCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkRhdGEgY29ycnVwdGVkLCAiIAorICAgIAkJICAgICAgICAgICAgICAgICAgICAgICsgIkNvbGxhdG9yIFRyaWVzIGV4cGVjdGVkIHRvIGhhdmUgbGluZWFyICIKKyAgICAJCSAgICAgICAgICAgICAgICAgICAgICArICJsYXRpbiBvbmUgZGF0YSBhcnJheXMiKTsKKyAgICAJfQorICAgIAltX2V4cGFuc2lvbkVuZENFU2l6ZV8gPj49IDI7CisgICAgCXJiYy5tX2V4cGFuc2lvbkVuZENFXyA9IG5ldyBpbnRbbV9leHBhbnNpb25FbmRDRVNpemVfXTsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBtX2V4cGFuc2lvbkVuZENFU2l6ZV87IGkgKyspIHsKKyAgICAJCXJiYy5tX2V4cGFuc2lvbkVuZENFX1tpXSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgCX0KKyAgICAJcmJjLm1fZXhwYW5zaW9uRW5kQ0VNYXhTaXplXyA9IG5ldyBieXRlW21fZXhwYW5zaW9uRW5kQ0VNYXhTaXplU2l6ZV9dOworICAgIAlmb3IgKGludCBpID0gMDsgaSA8IG1fZXhwYW5zaW9uRW5kQ0VNYXhTaXplU2l6ZV87IGkgKyspIHsKKyAgICAJCXJiYy5tX2V4cGFuc2lvbkVuZENFTWF4U2l6ZV9baV0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEJ5dGUoKTsKKyAgICAJfQorICAgIAlyYmMubV91bnNhZmVfID0gbmV3IGJ5dGVbbV91bnNhZmVTaXplX107CisgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgbV91bnNhZmVTaXplXzsgaSArKykgeworICAgIAkJcmJjLm1fdW5zYWZlX1tpXSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkQnl0ZSgpOworICAgIAl9CisgICAgICAgIGlmIChVQ0FDb25zdCAhPSBudWxsKSB7CisgICAgICAgICAgICAvLyB3ZSBhcmUgcmVhZGluZyB0aGUgVUNBCisgICAgICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5IHRoZSBVQ0Egb2Zmc2V0IGluIGFueSBjb2xsYXRvciBkYXRhIGlzIG5vdCAwIGFuZAorICAgICAgICAgICAgLy8gb25seSByZWZlcnMgdG8gdGhlIFVDQSBkYXRhCisgICAgICAgICAgICBtX2NvbnRyYWN0aW9uRW5kU2l6ZV8gLT0gbV9VQ0FWYWx1ZXNTaXplXzsgICAgICAgCisgICAgICAgIH0KKyAgICAJcmJjLm1fY29udHJhY3Rpb25FbmRfID0gbmV3IGJ5dGVbbV9jb250cmFjdGlvbkVuZFNpemVfXTsKKyAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NvbnRyYWN0aW9uRW5kU2l6ZV87IGkgKyspIHsKKyAgICAJCXJiYy5tX2NvbnRyYWN0aW9uRW5kX1tpXSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkQnl0ZSgpOworICAgIAl9CisgICAgICAgIGlmIChVQ0FDb25zdCAhPSBudWxsKSB7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9URVJUSUFSWV9JR05PUkFCTEVfWzBdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9URVJUSUFSWV9JR05PUkFCTEVfWzFdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5MQVNUX1RFUlRJQVJZX0lHTk9SQUJMRV9bMF0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LkxBU1RfVEVSVElBUllfSUdOT1JBQkxFX1sxXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuRklSU1RfUFJJTUFSWV9JR05PUkFCTEVfWzBdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9QUklNQVJZX0lHTk9SQUJMRV9bMV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LkZJUlNUX1NFQ09OREFSWV9JR05PUkFCTEVfWzBdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9TRUNPTkRBUllfSUdOT1JBQkxFX1sxXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuTEFTVF9TRUNPTkRBUllfSUdOT1JBQkxFX1swXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuTEFTVF9TRUNPTkRBUllfSUdOT1JBQkxFX1sxXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuTEFTVF9QUklNQVJZX0lHTk9SQUJMRV9bMF0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LkxBU1RfUFJJTUFSWV9JR05PUkFCTEVfWzFdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7CisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9WQVJJQUJMRV9bMF0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgICAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9WQVJJQUJMRV9bMV0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOworICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuTEFTVF9WQVJJQUJMRV9bMF0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LkxBU1RfVkFSSUFCTEVfWzFdID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LkZJUlNUX05PTl9WQVJJQUJMRV9bMF0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9OT05fVkFSSUFCTEVfWzFdID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgIAorICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuTEFTVF9OT05fVkFSSUFCTEVfWzBdID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgIAorICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuTEFTVF9OT05fVkFSSUFCTEVfWzFdID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgIAorICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuUkVTRVRfVE9QX1ZBTFVFX1swXSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LlJFU0VUX1RPUF9WQUxVRV9bMV0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9JTVBMSUNJVF9bMF0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5GSVJTVF9JTVBMSUNJVF9bMV0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5MQVNUX0lNUExJQ0lUX1swXSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LkxBU1RfSU1QTElDSVRfWzFdID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgIAorICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuRklSU1RfVFJBSUxJTkdfWzBdID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgIAorICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuRklSU1RfVFJBSUxJTkdfWzFdID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgIAorICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuTEFTVF9UUkFJTElOR19bMF0gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5MQVNUX1RSQUlMSU5HX1sxXSA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7IAorICAgICAgICAgICAgVUNBQ29uc3QuUFJJTUFSWV9UT1BfTUlOXyA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LlBSSU1BUllfSU1QTElDSVRfTUlOXyA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5QUklNQVJZX0lNUExJQ0lUX01BWF8gPSBtX2RhdGFJbnB1dFN0cmVhbV8ucmVhZEludCgpOyAgIAorICAgICAgICAgICAgbV9VQ0FWYWx1ZXNTaXplXyAtPSA0OworICAgICAgICAgICAgVUNBQ29uc3QuUFJJTUFSWV9UUkFJTElOR19NSU5fID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRJbnQoKTsgICAKKyAgICAgICAgICAgIG1fVUNBVmFsdWVzU2l6ZV8gLT0gNDsKKyAgICAgICAgICAgIFVDQUNvbnN0LlBSSU1BUllfVFJBSUxJTkdfTUFYXyA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5QUklNQVJZX1NQRUNJQUxfTUlOXyA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBVQ0FDb25zdC5QUklNQVJZX1NQRUNJQUxfTUFYXyA9IG1fZGF0YUlucHV0U3RyZWFtXy5yZWFkSW50KCk7ICAgCisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfIC09IDQ7CisgICAgICAgICAgICBtX1VDQVZhbHVlc1NpemVfID4+PSAxOworICAgICAgICAgICAgY2hhciByZXN1bHRbXSA9IG5ldyBjaGFyW21fVUNBVmFsdWVzU2l6ZV9dOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1VDQVZhbHVlc1NpemVfOyBpICsrKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gbV9kYXRhSW5wdXRTdHJlYW1fLnJlYWRDaGFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZWFkcyBpbiB0aGUgaW52ZXJzZSB1Y2EgZGF0YQorICAgICAqIEBwYXJhbSBpbnB1dCBpbnB1dCBzdHJlYW0gd2l0aCB0aGUgaW52ZXJzZSB1Y2EgZGF0YQorICAgICAqIEByZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGludmVyc2UgdWNhIGRhdGEKKyAgICAgKiBAZXhjZXB0aW9uIElPRXhjZXB0aW9uIHRocm93biB3aGVuIGVycm9yIG9jY3VycyB3aGlsZSByZWFkaW5nIHRoZSAKKyAgICAgKiAgICAgICAgICAgIGludmVyc2UgdWNhCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBDb2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlci5JbnZlcnNlVUNBIHJlYWRJbnZlcnNlVUNBKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgICBJQ1VCaW5hcnkucmVhZEhlYWRlcihpbnB1dFN0cmVhbSwgSU5WRVJTRV9VQ0FfREFUQV9GT1JNQVRfSURfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkVSU0VfVUNBX0FVVEhFTlRJQ0FURV8pOworICAgICAgICBDb2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlci5JbnZlcnNlVUNBIHJlc3VsdCA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlci5JbnZlcnNlVUNBKCk7CisgICAgICAgIERhdGFJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBEYXRhSW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOyAgICAgICAgCisgICAgICAgIGlucHV0LnJlYWRJbnQoKTsgLy8gYnl0ZXNpemUKKyAgICAgICAgaW50IHRhYmxlc2l6ZSA9IGlucHV0LnJlYWRJbnQoKTsgLy8gaW4gaW50IHNpemUKKyAgICAgICAgaW50IGNvbnRzaXplID0gaW5wdXQucmVhZEludCgpOyAgLy8gaW4gY2hhciBzaXplCisgICAgICAgIGlucHV0LnJlYWRJbnQoKTsgLy8gdGFibGUgaW4gYnl0ZXMKKyAgICAgICAgaW5wdXQucmVhZEludCgpOyAvLyBjb250cyBpbiBieXRlcworICAgICAgICBpbnQgc2l6ZSA9IHRhYmxlc2l6ZSAqIDM7IC8vIG9uZSBjb2x1bW4gZm9yIGVhY2ggc3RyZW5ndGgKKyAgICAgICAgcmVzdWx0Lm1fdGFibGVfID0gbmV3IGludFtzaXplXTsKKyAgICAgICAgcmVzdWx0Lm1fY29udGludWF0aW9uc18gPSBuZXcgY2hhcltjb250c2l6ZV07CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgICAgIHJlc3VsdC5tX3RhYmxlX1tpXSA9IGlucHV0LnJlYWRJbnQoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRzaXplOyBpICsrKSB7CisgICAgICAgICAgICByZXN1bHQubV9jb250aW51YXRpb25zX1tpXSA9IGlucHV0LnJlYWRDaGFyKCk7CisgICAgICAgIH0KKyAgICAgICAgaW5wdXQuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLy8gcHJpdmF0ZSBpbm5lciBjbGFzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8vIHByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBdXRoZW50aWNhdGUgdWNhIGRhdGEgZm9ybWF0IHZlcnNpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJQ1VCaW5hcnkuQXV0aGVudGljYXRlIFVDQV9BVVRIRU5USUNBVEVfIAorICAgICAgICAgICAgICAgID0gbmV3IElDVUJpbmFyeS5BdXRoZW50aWNhdGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0RhdGFWZXJzaW9uQWNjZXB0YWJsZShieXRlIHZlcnNpb25bXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVyc2lvblswXSA9PSBEQVRBX0ZPUk1BVF9WRVJTSU9OX1swXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmVyc2lvblsxXSA+PSBEQVRBX0ZPUk1BVF9WRVJTSU9OX1sxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG9vIGhhcnNoIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyYmIHZlcnNpb25bMV0gPT0gREFUQV9GT1JNQVRfVkVSU0lPTl9bMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8mJiB2ZXJzaW9uWzJdID09IERBVEFfRk9STUFUX1ZFUlNJT05fWzJdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyYmIHZlcnNpb25bM10gPT0gREFUQV9GT1JNQVRfVkVSU0lPTl9bM107CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBBdXRoZW50aWNhdGUgdWNhIGRhdGEgZm9ybWF0IHZlcnNpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJQ1VCaW5hcnkuQXV0aGVudGljYXRlIElOVkVSU0VfVUNBX0FVVEhFTlRJQ0FURV8gCisgICAgICAgICAgICAgICAgPSBuZXcgSUNVQmluYXJ5LkF1dGhlbnRpY2F0ZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzRGF0YVZlcnNpb25BY2NlcHRhYmxlKGJ5dGUgdmVyc2lvbltdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uWzBdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gSU5WRVJTRV9VQ0FfREFUQV9GT1JNQVRfVkVSU0lPTl9bMF0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZlcnNpb25bMV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PSBJTlZFUlNFX1VDQV9EQVRBX0ZPUk1BVF9WRVJTSU9OX1sxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAKKyAgICAvKioKKyAgICAqIERhdGEgaW5wdXQgc3RyZWFtIGZvciB1Y2EuaWN1IAorICAgICovCisgICAgcHJpdmF0ZSBEYXRhSW5wdXRTdHJlYW0gbV9kYXRhSW5wdXRTdHJlYW1fOworICAgCisgICAgLyoqCisgICAgKiBGaWxlIGZvcm1hdCB2ZXJzaW9uIGFuZCBpZCB0aGF0IHRoaXMgY2xhc3MgdW5kZXJzdGFuZHMuCisgICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGlmIGEgb2xkZXIgdmVyc2lvbiBpcyB1c2VkCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIERBVEFfRk9STUFUX1ZFUlNJT05fW10gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhieXRlKTB4MiwgKGJ5dGUpMHgxLCAoYnl0ZSkweDAsIChieXRlKTB4MH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBEQVRBX0ZPUk1BVF9JRF9bXSA9IHsoYnl0ZSkweDU1LCAoYnl0ZSkweDQzLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpMHg2ZiwgKGJ5dGUpMHg2Y307CisgICAgLyoqCisgICAgKiBJbnZlcnNlIFVDQSBmaWxlIGZvcm1hdCB2ZXJzaW9uIGFuZCBpZCB0aGF0IHRoaXMgY2xhc3MgdW5kZXJzdGFuZHMuCisgICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGlmIGEgb2xkZXIgdmVyc2lvbiBpcyB1c2VkCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIElOVkVSU0VfVUNBX0RBVEFfRk9STUFUX1ZFUlNJT05fW10gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhieXRlKTB4MiwgKGJ5dGUpMHgwLCAoYnl0ZSkweDAsIChieXRlKTB4MH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBJTlZFUlNFX1VDQV9EQVRBX0ZPUk1BVF9JRF9bXSA9IHsoYnl0ZSkweDQ5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKTB4NmUsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKTB4NzYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpMHg0M307CisgICAgLyoqCisgICAgKiBDb3JydXB0ZWQgZXJyb3Igc3RyaW5nCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUlVQVEVEX0RBVEFfRVJST1JfID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGEgY29ycnVwdGVkIGluIENvbGxhdGlvbiBkYXRhIGZpbGUiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBTaXplIG9mIGV4cGFuc2lvbiB0YWJsZSBpbiBieXRlcworICAgICAqLworICAgIHByaXZhdGUgaW50IG1fZXhwYW5zaW9uU2l6ZV87CisgICAgLyoqCisgICAgICogU2l6ZSBvZiBjb250cmFjdGlvbiBpbmRleCB0YWJsZSBpbiBieXRlcworICAgICAqLworICAgIHByaXZhdGUgaW50IG1fY29udHJhY3Rpb25JbmRleFNpemVfOworICAgIC8qKgorICAgICAqIFNpemUgb2YgY29udHJhY3Rpb24gdGFibGUgaW4gYnl0ZXMKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX2NvbnRyYWN0aW9uQ0VTaXplXzsKKyAgICAvKioKKyAgICAgKiBTaXplIG9mIHRoZSBUcmllIGluIGJ5dGVzCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV90cmllU2l6ZV87CisgICAgLyoqCisgICAgICogU2l6ZSBvZiB0aGUgdGFibGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBjb2xsYXRpb24gZWxlbWVudHMKKyAgICAgKiB0aGF0IGVuZCB3aXRoIGFuIGV4cGFuc2lvbiAKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX2V4cGFuc2lvbkVuZENFU2l6ZV87CisgICAgLyoqCisgICAgICogU2l6ZSBvZiB0aGUgdGFibGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF4aW11bSBzaXplIG9mIAorICAgICAqIGNvbGxhdGlvbiBlbGVtZW50cyB0aGF0IGVuZCB3aXRoIGEgcGFydGljdWxhciBleHBhbnNpb24gQ0UgY29ycmVzcG9uZGluZworICAgICAqIHRvIHRoZSBvbmVzIGluIGV4cGFuc2lvbkVuZENFCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9leHBhbnNpb25FbmRDRU1heFNpemVTaXplXzsKKyAgICAvKioKKyAgICAgKiBTaXplIG9mIHRoZSB0YWJsZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSAiVW5zYWZlIiAKKyAgICAgKiBjb2RlcG9pbnRzCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV91bnNhZmVTaXplXzsKKyAgICAvKioKKyAgICAgKiBTaXplIG9mIHRoZSB0YWJsZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGNvZGVwb2ludHMgdGhhdCBlbmRzCisgICAgICogd2l0aCBhIGNvbnRyYWN0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9jb250cmFjdGlvbkVuZFNpemVfOworICAgIC8qKgorICAgICAqIFNpemUgb2YgdGhlIHRhYmxlIHRoYXQgY29udGFpbnMgVUNBIGNvbnRyYWN0aW9uIGluZm9ybWF0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9VQ0FWYWx1ZXNTaXplXzsKKyAgICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9Db21wb3NlZENoYXJJdGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Db21wb3NlZENoYXJJdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGE4OGQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbXBvc2VkQ2hhckl0ZXIuamF2YQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29tcG9zZWRDaGFySXRlci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzAzIDIyOjAzOjU5ICQgCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLk5vcm1hbGl6ZXJJbXBsOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKKworLyoqCisgKiA8dHQ+Q29tcG9zZWRDaGFySXRlcjwvdHQ+IGlzIGFuIGl0ZXJhdG9yIGNsYXNzIHRoYXQgcmV0dXJucyBhbGwKKyAqIG9mIHRoZSBwcmVjb21wb3NlZCBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgc3RhbmRhcmQsIGFsb25nCisgKiB3aXRoIHRoZWlyIGRlY29tcG9zZWQgZm9ybXMuICBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB3aGVuIGJ1aWxkaW5nCisgKiBkYXRhIHRhYmxlcyAoPGk+ZS5nLjwvaT4gY29sbGF0aW9uIHRhYmxlcykgd2hpY2ggbmVlZCB0byB0cmVhdCBjb21wb3NlZAorICogYW5kIGRlY29tcG9zZWQgY2hhcmFjdGVycyBlcXVpdmFsZW50bHkuCisgKiA8cD4KKyAqIEZvciBleGFtcGxlLCBpbWFnaW5lIHRoYXQgeW91IGhhdmUgYnVpbHQgYSBjb2xsYXRpb24gdGFibGUgd2l0aCBvcmRlcmluZworICogcnVsZXMgZm9yIHRoZSB7QGxpbmsgTm9ybWFsaXplciNERUNPTVAgY2Fub25pY2FsbHkgZGVjb21wb3NlZH0gZm9ybXMgb2YgYWxsCisgKiBjaGFyYWN0ZXJzIHVzZWQgaW4gYSBwYXJ0aWN1bGFyIGxhbmd1YWdlLiAgV2hlbiB5b3UgcHJvY2VzcyBpbnB1dCB0ZXh0IHVzaW5nCisgKiB0aGlzIHRhYmxlLCB0aGUgdGV4dCBtdXN0IGZpcnN0IGJlIGRlY29tcG9zZWQgc28gdGhhdCBpdCBtYXRjaGVzIHRoZSBmb3JtCisgKiB1c2VkIGluIHRoZSB0YWJsZS4gIFRoaXMgY2FuIGltcG9zZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgdGhhdCBtYXkgYmUKKyAqIHVuYWNjZXB0YWJsZSBpbiBzb21lIHNpdHVhdGlvbnMuCisgKiA8cD4KKyAqIFlvdSBjYW4gYXZvaWQgdGhpcyBwcm9ibGVtIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGNvbGxhdGlvbiB0YWJsZSBjb250YWlucworICogcnVsZXMgZm9yIGJvdGggdGhlIGRlY29tcG9zZWQgPGk+YW5kPC9pPiBjb21wb3NlZCB2ZXJzaW9ucyBvZiBlYWNoIGNoYXJhY3Rlci4KKyAqIFRvIGRvIHNvLCB1c2UgYSA8dHQ+Q29tcG9zZWRDaGFySXRlcjwvdHQ+IHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlCisgKiBjb21wb3NlZCBjaGFyYWN0ZXJzIGluIFVuaWNvZGUuICBJZiB0aGUgZGVjb21wb3NpdGlvbiBmb3IgdGhhdCBjaGFyYWN0ZXIKKyAqIGNvbnNpc3RzIHNvbGVseSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGxpc3RlZCBpbiB5b3VyIHJ1bGVzZXQsIHlvdSBjYW4KKyAqIGFkZCBhIG5ldyBydWxlIGZvciB0aGUgY29tcG9zZWQgY2hhcmFjdGVyIHRoYXQgbWFrZXMgaXQgZXF1aXZhbGVudCB0bworICogaXRzIGRlY29tcG9zaXRpb24gc2VxdWVuY2UuCisgKiA8cD4KKyAqIE5vdGUgdGhhdCA8dHQ+Q29tcG9zZWRDaGFySXRlcjwvdHQ+IGl0ZXJhdGVzIG92ZXIgYSA8ZW0+c3RhdGljPC9lbT4gdGFibGUKKyAqIG9mIHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGluIFVuaWNvZGUuICBJZiB5b3Ugd2FudCB0byBpdGVyYXRlIG92ZXIgdGhlCisgKiBjb21wb3NlZCBjaGFyYWN0ZXJzIGluIGEgcGFydGljdWxhciBzdHJpbmcsIHVzZSB7QGxpbmsgTm9ybWFsaXplcn0gaW5zdGVhZC4KKyAqIDxwPgorICogV2hlbiBjb25zdHJ1Y3RpbmcgYSA8dHQ+Q29tcG9zZWRDaGFySXRlcjwvdHQ+IHRoZXJlIGlzIG9uZQorICogb3B0aW9uYWwgZmVhdHVyZSB0aGF0IHlvdSBjYW4gZW5hYmxlIG9yIGRpc2FibGU6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgTm9ybWFsaXplciNJR05PUkVfSEFOR1VMfSAtIERvIG5vdCBpdGVyYXRlIG92ZXIgdGhlIEhhbmd1bAorICogICAgICAgICAgY2hhcmFjdGVycyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBKYW1vIGRlY29tcG9zaXRpb25zLgorICogICAgICAgICAgVGhpcyBvcHRpb24gaXMgb2ZmIGJ5IGRlZmF1bHQgKDxpPmkuZS48L2k+IEhhbmd1bCBwcm9jZXNzaW5nIGlzIGVuYWJsZWQpCisgKiAgICAgICAgICBzaW5jZSB0aGUgVW5pY29kZSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBIYW5ndWwgdG8gSmFtbyAKKyAqICAgICAgICAgIGlzIGEgY2Fub25pY2FsIGRlY29tcG9zaXRpb24uCisgKiA8L3VsPgorICogPHA+CisgKiA8dHQ+Q29tcG9zZWRDaGFySXRlcjwvdHQ+IGlzIGN1cnJlbnRseSBiYXNlZCBvbiB2ZXJzaW9uIDIuMS44IG9mIHRoZQorICogPGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZyIgdGFyZ2V0PSJ1bmljb2RlIj5Vbmljb2RlIFN0YW5kYXJkPC9hPi4KKyAqIEl0IHdpbGwgYmUgdXBkYXRlZCBhcyBsYXRlciB2ZXJzaW9ucyBvZiBVbmljb2RlIGFyZSByZWxlYXNlZC4KKyAqIEBkZXByZWNhdGVkIElDVSAyLjIKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIENvbXBvc2VkQ2hhckl0ZXIgeworICAgIAorICAgIC8qKgorICAgICAqIENvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHRoZSBpdGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KKyAgICAgKiB7QGxpbmsgI25leHR9IHJldHVybnMgdGhpcyB2YWx1ZSB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIGNvbXBvc2VkIGNoYXJhY3RlcnMKKyAgICAgKiBvdmVyIHdoaWNoIHRvIGl0ZXJhdGUuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgIGNoYXIgRE9ORSA9IChjaGFyKSBOb3JtYWxpemVyLkRPTkU7CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbmV3IDx0dD5Db21wb3NlZENoYXJJdGVyPC90dD4uICBUaGUgaXRlcmF0b3Igd2lsbCByZXR1cm4KKyAgICAgKiBhbGwgVW5pY29kZSBjaGFyYWN0ZXJzIHdpdGggY2Fub25pY2FsIGRlY29tcG9zaXRpb25zLCBpbmNsdWRpbmcgS29yZWFuCisgICAgICogSGFuZ3VsIGNoYXJhY3RlcnMuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBDb21wb3NlZENoYXJJdGVyKCkgeworICAgICAgICBjb21wYXQgPSBmYWxzZTsKKyAgICAgICAgb3B0aW9ucyA9MDsKKyAgICB9CisgICAgCisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5vbi1kZWZhdWx0IDx0dD5Db21wb3NlZENoYXJJdGVyPC90dD4gd2l0aCBvcHRpb25hbCBiZWhhdmlvci4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gY29tcGF0ICAgIDx0dD5mYWxzZTwvdHQ+IGZvciBjYW5vbmljYWwgZGVjb21wb3NpdGlvbnMgb25seTsKKyAgICAgKiAgICAgICAgICAgICAgICAgIDx0dD50cnVlPC90dD4gZm9yIGJvdGggY2Fub25pY2FsIGFuZCBjb21wYXRpYmlsaXR5CisgICAgICogICAgICAgICAgICAgICAgICBkZWNvbXBvc2l0aW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvcHRpb25zICAgT3B0aW9uYWwgZGVjb21wb3NpdGlvbiBmZWF0dXJlcy4gIEN1cnJlbnRseSwgdGhlIG9ubHkKKyAgICAgKiAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBvcHRpb24gaXMge0BsaW5rIE5vcm1hbGl6ZXIjSUdOT1JFX0hBTkdVTH0sIHdoaWNoCisgICAgICogICAgICAgICAgICAgICAgICBjYXVzZXMgdGhpcyA8dHQ+Q29tcG9zZWRDaGFySXRlcjwvdHQ+IG5vdCB0byBpdGVyYXRlCisgICAgICogICAgICAgICAgICAgICAgICBvdmVyIHRoZSBIYW5ndWwgY2hhcmFjdGVycyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZworICAgICAqICAgICAgICAgICAgICAgICAgSmFtbyBkZWNvbXBvc2l0aW9ucy4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIENvbXBvc2VkQ2hhckl0ZXIoYm9vbGVhbiBjb21wYXQsIGludCBvcHRpb25zKSB7CisgICAgICAgIHRoaXMuY29tcGF0ID0gY29tcGF0OworICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlcmUgYW55IHByZWNvbXBvc2VkIFVuaWNvZGUgY2hhcmFjdGVycyBub3QgeWV0IHJldHVybmVkCisgICAgICogYnkge0BsaW5rICNuZXh0fS4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpIHsKKyAgICAgICAgaWYgKG5leHRDaGFyID09IE5vcm1hbGl6ZXIuRE9ORSkgIHsKKyAgICAgICAgICAgIGZpbmROZXh0Q2hhcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXh0Q2hhciAhPSBOb3JtYWxpemVyLkRPTkU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG5leHQgcHJlY29tcG9zZWQgVW5pY29kZSBjaGFyYWN0ZXIuCisgICAgICogUmVwZWF0ZWQgY2FsbHMgdG8gPHR0Pm5leHQ8L3R0PiByZXR1cm4gYWxsIG9mIHRoZSBwcmVjb21wb3NlZCBjaGFyYWN0ZXJzIGRlZmluZWQKKyAgICAgKiBieSBVbmljb2RlLCBpbiBhc2NlbmRpbmcgb3JkZXIuICBBZnRlciBhbGwgcHJlY29tcG9zZWQgY2hhcmFjdGVycyBoYXZlCisgICAgICogYmVlbiByZXR1cm5lZCwge0BsaW5rICNoYXNOZXh0fSB3aWxsIHJldHVybiA8dHQ+ZmFsc2U8L3R0PiBhbmQgZnVydGhlciBjYWxscworICAgICAqIHRvIDx0dD5uZXh0PC90dD4gd2lsbCByZXR1cm4ge0BsaW5rICNET05FfS4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGNoYXIgbmV4dCgpIHsKKyAgICAgICAgaWYgKG5leHRDaGFyID09IE5vcm1hbGl6ZXIuRE9ORSkgIHsKKyAgICAgICAgICAgIGZpbmROZXh0Q2hhcigpOworICAgICAgICB9CisgICAgICAgIGN1ckNoYXIgPSBuZXh0Q2hhcjsKKyAgICAgICAgbmV4dENoYXIgPSBOb3JtYWxpemVyLkRPTkU7CisgICAgICAgIHJldHVybiAoY2hhcikgY3VyQ2hhcjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVW5pY29kZSBkZWNvbXBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4KKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkZWNvbXBvc2l0aW9uIG9mIHRoZSBwcmVjb21wb3NlZCBjaGFyYWN0ZXIgbW9zdAorICAgICAqIHJlY2VudGx5IHJldHVybmVkIGJ5IHtAbGluayAjbmV4dH0uICBUaGUgcmVzdWx0aW5nIGRlY29tcG9zaXRpb24gaXMKKyAgICAgKiBhZmZlY3RlZCBieSB0aGUgc2V0dGluZ3Mgb2YgdGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBkZWNvbXBvc2l0aW9uKCkgeworICAgICAgICAvLyB0aGUgZGVjb21wb3NpdGlvbiBidWZmZXIgY29udGFpbnMgdGhlIGRlY29tcG9zaXRpb24gb2YgCisgICAgICAgIC8vIGN1cnJlbnQgY2hhciBzbyBqdXN0IHJldHVybiBpdAorICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhkZWNvbXBCdWYsMCwgYnVmTGVuKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGZpbmROZXh0Q2hhcigpIHsKKyAgICAgICAgaW50IGM9Y3VyQ2hhcisxOworICAgICAgICBmb3IoOzspeworICAgICAgICAgICBpZihjIDwgMHhGRkZGKXsKKwkgICAgICAgICAgIGJ1ZkxlbiA9IE5vcm1hbGl6ZXJJbXBsLmdldERlY29tcG9zaXRpb24oYyxjb21wYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29tcEJ1ZiwwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvbXBCdWYubGVuZ3RoKTsKKwkgICAgICAgICAgIGlmKGJ1Zkxlbj4wKXsKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGN1ckNoYXIgY2FuIGJlIGRlY29tcG9zZWQuLi4gc28gaXQgaXMgYSBjb21wb3NlZCBjaGFyCisJICAgICAgICAgICAgICAgIC8vIGNhY2hlIHRoZSByZXN1bHQgICAgIAorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgIH0KKwkgICAgICAgICAgIGMrKzsKKyAgICAgICAgICAgfWVsc2V7CisJICAgICAgICAgICBjPU5vcm1hbGl6ZXIuRE9ORTsKKwkgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmV4dENoYXI9YzsgIAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIGludCBvcHRpb25zOworICAgIHByaXZhdGUgYm9vbGVhbiBjb21wYXQ7CisgICAgcHJpdmF0ZSBjaGFyW10gZGVjb21wQnVmID0gbmV3IGNoYXJbMTAwXTsKKyAgICBwcml2YXRlIGludCBidWZMZW49MDsKKyAgICBwcml2YXRlIGludCBjdXJDaGFyID0gMDsKKyAgICBwcml2YXRlIGludCBuZXh0Q2hhciA9IE5vcm1hbGl6ZXIuRE9ORTsKKyAgICAKKworfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbXBvdW5kVHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0NvbXBvdW5kVHJhbnNsaXRlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTBiNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvQ29tcG91bmRUcmFuc2xpdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsNTI3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9Db21wb3VuZFRyYW5zbGl0ZXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDMgMTg6NTc6MzYgJCAKKyAqICRSZXZpc2lvbjogMS4zMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKKy8qKgorICogQSB0cmFuc2xpdGVyYXRvciB0aGF0IGlzIGNvbXBvc2VkIG9mIHR3byBvciBtb3JlIG90aGVyCisgKiB0cmFuc2xpdGVyYXRvciBvYmplY3RzIGxpbmtlZCB0b2dldGhlci4gIEZvciBleGFtcGxlLCBpZiBvbmUKKyAqIHRyYW5zbGl0ZXJhdG9yIHRyYW5zbGl0ZXJhdGVzIGZyb20gc2NyaXB0IEEgdG8gc2NyaXB0IEIsIGFuZAorICogYW5vdGhlciB0cmFuc2xpdGVyYXRlcyBmcm9tIHNjcmlwdCBCIHRvIHNjcmlwdCBDLCB0aGUgdHdvIG1heSBiZQorICogY29tYmluZWQgdG8gZm9ybSBhIG5ldyB0cmFuc2xpdGVyYXRvciBmcm9tIEEgdG8gQy4KKyAqCisgKiA8cD5Db21wb3NlZCB0cmFuc2xpdGVyYXRvcnMgbWF5IG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBGb3IKKyAqIGV4YW1wbGUsIGludmVyc2VzIG1heSBub3QgY29tYmluZSB0byBmb3JtIHRoZSBpZGVudGl0eQorICogdHJhbnNsaXRlcmF0b3IuICBTZWUgdGhlIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIHtAbGluaworICogVHJhbnNsaXRlcmF0b3J9IGZvciBkZXRhaWxzLgorICoKKyAqIDxwPkNvcHlyaWdodCAmY29weTsgSUJNIENvcnBvcmF0aW9uIDE5OTkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZWNvbWUgcHJpdmF0ZSBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAqLworcHVibGljIGNsYXNzIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IgZXh0ZW5kcyBUcmFuc2xpdGVyYXRvciB7CisKKyAgICBwcml2YXRlIFRyYW5zbGl0ZXJhdG9yW10gdHJhbnM7CisKKyAgICAvKioKKyAgICAgKiBGb3IgY29tcG91bmQgUkJUcyAodGhvc2Ugd2l0aCBhbiA6OmlkIGJsb2NrIGJlZm9yZSBhbmQvb3IgYWZ0ZXIKKyAgICAgKiB0aGUgbWFpbiBydWxlIGJsb2NrKSB3ZSByZWNvcmQgdGhlIGluZGV4IG9mIHRoZSBSQlQgaGVyZS4KKyAgICAgKiBPdGhlcndpc2UsIHRoaXMgc2hvdWxkIGhhdmUgYSB2YWx1ZSBvZiAtMS4gIFdlIG5lZWQgdGhpcworICAgICAqIGluZm9ybWF0aW9uIHRvIGltcGxlbWVudCB0b1J1bGVzKCkuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgY29tcG91bmRSQlRJbmRleDsgICAgCisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgIlx1MDBBOSBJQk0gQ29ycG9yYXRpb24gMTk5OS0yMDAxLiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGNvbXBvdW5kIHRyYW5zbGl0ZXJhdG9yIGdpdmVuIGFuIGFycmF5IG9mCisgICAgICogdHJhbnNsaXRlcmF0b3JzLiAgVGhlIGFycmF5IG9mIHRyYW5zbGl0ZXJhdG9ycyBtYXkgYmUgb2YgYW55CisgICAgICogbGVuZ3RoLCBpbmNsdWRpbmcgemVybyBvciBvbmUsIGhvd2V2ZXIsIHVzZWZ1bCBjb21wb3VuZAorICAgICAqIHRyYW5zbGl0ZXJhdG9ycyBoYXZlIGF0IGxlYXN0IHR3byBjb21wb25lbnRzLgorICAgICAqIEBwYXJhbSB0cmFuc2xpdGVyYXRvcnMgYXJyYXkgb2YgPGNvZGU+VHJhbnNsaXRlcmF0b3I8L2NvZGU+CisgICAgICogb2JqZWN0cworICAgICAqIEBwYXJhbSBmaWx0ZXIgdGhlIGZpbHRlci4gIEFueSBjaGFyYWN0ZXIgZm9yIHdoaWNoCisgICAgICogPHR0PmZpbHRlci5jb250YWlucygpPC90dD4gcmV0dXJucyA8dHQ+ZmFsc2U8L3R0PiB3aWxsIG5vdCBiZQorICAgICAqIGFsdGVyZWQgYnkgdGhpcyB0cmFuc2xpdGVyYXRvci4gIElmIDx0dD5maWx0ZXI8L3R0PiBpcworICAgICAqIDx0dD5udWxsPC90dD4gdGhlbiBubyBmaWx0ZXJpbmcgaXMgYXBwbGllZC4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmVjb21lIHByaXZhdGUgYWZ0ZXIgMjAwMy0xMi0wMS4gVXNlIHRoZSBUcmFuc2xpdGVyYXRvciBmYWN0b3J5IG1ldGhvZHMuCisgICAgICovCisgICAgcHVibGljIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IoVHJhbnNsaXRlcmF0b3JbXSB0cmFuc2xpdGVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZUZpbHRlciBmaWx0ZXIpIHsKKyAgICAgICAgc3VwZXIoam9pbklEcyh0cmFuc2xpdGVyYXRvcnMpLCBmaWx0ZXIpOworICAgICAgICB0cmFucyA9IG5ldyBUcmFuc2xpdGVyYXRvclt0cmFuc2xpdGVyYXRvcnMubGVuZ3RoXTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0cmFuc2xpdGVyYXRvcnMsIDAsIHRyYW5zLCAwLCB0cmFucy5sZW5ndGgpOworICAgICAgICBjb21wdXRlTWF4aW11bUNvbnRleHRMZW5ndGgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGNvbXBvdW5kIHRyYW5zbGl0ZXJhdG9yIGdpdmVuIGFuIGFycmF5IG9mCisgICAgICogdHJhbnNsaXRlcmF0b3JzLiAgVGhlIGFycmF5IG9mIHRyYW5zbGl0ZXJhdG9ycyBtYXkgYmUgb2YgYW55CisgICAgICogbGVuZ3RoLCBpbmNsdWRpbmcgemVybyBvciBvbmUsIGhvd2V2ZXIsIHVzZWZ1bCBjb21wb3VuZAorICAgICAqIHRyYW5zbGl0ZXJhdG9ycyBoYXZlIGF0IGxlYXN0IHR3byBjb21wb25lbnRzLgorICAgICAqIEBwYXJhbSB0cmFuc2xpdGVyYXRvcnMgYXJyYXkgb2YgPGNvZGU+VHJhbnNsaXRlcmF0b3I8L2NvZGU+CisgICAgICogb2JqZWN0cworICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZWNvbWUgcHJpdmF0ZSBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihUcmFuc2xpdGVyYXRvcltdIHRyYW5zbGl0ZXJhdG9ycykgeworICAgICAgICB0aGlzKHRyYW5zbGl0ZXJhdG9ycywgbnVsbCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcgY29tcG91bmQgdHJhbnNsaXRlcmF0b3IuCisgICAgICogQHBhcmFtIElEIGNvbXBvdW5kIElECisgICAgICogQHBhcmFtIGRpcmVjdGlvbiBlaXRoZXIgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCBvciBUcmFuc2xpdGVyYXRvci5SRVZFUlNFCisgICAgICogQHBhcmFtIGZpbHRlciBhIGdsb2JhbCBmaWx0ZXIgZm9yIHRoaXMgY29tcG91bmQgdHJhbnNsaXRlcmF0b3IKKyAgICAgKiBvciBudWxsCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCwgaW50IGRpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlRmlsdGVyIGZpbHRlcikgeworICAgICAgICBzdXBlcihJRCwgZmlsdGVyKTsKKyAgICAgICAgaW5pdChJRCwgZGlyZWN0aW9uLCAtMSwgbnVsbCwgdHJ1ZSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcgY29tcG91bmQgdHJhbnNsaXRlcmF0b3Igd2l0aCBubyBmaWx0ZXIuCisgICAgICogQHBhcmFtIElEIGNvbXBvdW5kIElECisgICAgICogQHBhcmFtIGRpcmVjdGlvbiBlaXRoZXIgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCBvciBUcmFuc2xpdGVyYXRvci5SRVZFUlNFCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCwgaW50IGRpcmVjdGlvbikgeworICAgICAgICB0aGlzKElELCBkaXJlY3Rpb24sIG51bGwpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGZvcndhcmQgY29tcG91bmQgdHJhbnNsaXRlcmF0b3Igd2l0aCBubyBmaWx0ZXIuCisgICAgICogQHBhcmFtIElEIGNvbXBvdW5kIElECisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCkgeworICAgICAgICB0aGlzKElELCBGT1JXQVJELCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3IgZm9yIGNvbXBvdW5kIFJCVHMuICBDb25zdHJ1Y3QgYQorICAgICAqIGNvbXBvdW5kIHRyYW5zbGl0ZXJhdG9yIHVzaW5nIHRoZSBnaXZlbiBpZEJsb2NrLCB3aXRoIHRoZQorICAgICAqIHNwbGl0VHJhbnMgaW5zZXJ0ZWQgYXQgdGhlIGlkU3BsaXRQb2ludC4KKyAgICAgKi8KKyAgICBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkU3BsaXRQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHNwbGl0VHJhbnMpIHsKKyAgICAgICAgc3VwZXIoSUQsIG51bGwpOworICAgICAgICBpbml0KGlkQmxvY2ssIEZPUldBUkQsIGlkU3BsaXRQb2ludCwgc3BsaXRUcmFucywgZmFsc2UpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBQYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3IgZm9yIFRyYW5zbGl0ZXJhdG9yIGZyb20gYSB2ZWN0b3Igb2YKKyAgICAgKiB0cmFuc2xpdGVyYXRvcnMuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmaXhpbmcgdXAgdGhlCisgICAgICogSUQuCisgICAgICovCisgICAgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihWZWN0b3IgbGlzdCkgeworICAgICAgICBzdXBlcigiIiwgbnVsbCk7CisgICAgICAgIHRyYW5zID0gbnVsbDsKKyAgICAgICAgY29tcG91bmRSQlRJbmRleCA9IC0xOworICAgICAgICBpbml0KGxpc3QsIEZPUldBUkQsIGZhbHNlKTsKKyAgICAgICAgLy8gYXNzdW1lIGNhbGxlciB3aWxsIGZpeHVwIElECisgICAgfQorCisgICAgLyoqCisgICAgICogRmluaXNoIGNvbnN0cnVjdGluZyBhIHRyYW5zbGl0ZXJhdG9yOiBvbmx5IHRvIGJlIGNhbGxlZCBieQorICAgICAqIGNvbnN0cnVjdG9ycy4gIEJlZm9yZSBjYWxsaW5nIGluaXQoKSwgc2V0IHRyYW5zIGFuZCBmaWx0ZXIgdG8gTlVMTC4KKyAgICAgKiBAcGFyYW0gaWQgdGhlIGlkIGNvbnRhaW5pbmcgJzsnLXNlcGFyYXRlZCBlbnRyaWVzCisgICAgICogQHBhcmFtIGRpcmVjdGlvbiBlaXRoZXIgRk9SV0FSRCBvciBSRVZFUlNFCisgICAgICogQHBhcmFtIGlkU3BsaXRQb2ludCB0aGUgaW5kZXggaW50byBpZCBhdCB3aGljaCB0aGUKKyAgICAgKiBzcGxpdFRyYW5zIHNob3VsZCBiZSBpbnNlcnRlZCwgaWYgdGhlcmUgaXMgb25lLCBvcgorICAgICAqIC0xIGlmIHRoZXJlIGlzIG5vbmUuCisgICAgICogQHBhcmFtIHNwbGl0VHJhbnMgYSB0cmFuc2xpdGVyYXRvciB0byBiZSBpbnNlcnRlZAorICAgICAqIGJlZm9yZSB0aGUgZW50cnkgYXQgb2Zmc2V0IGlkU3BsaXRQb2ludCBpbiB0aGUgaWQgc3RyaW5nLiAgTWF5IGJlCisgICAgICogTlVMTCB0byBpbnNlcnQgbm8gZW50cnkuCisgICAgICogQHBhcmFtIGZpeFJldmVyc2VJRCBpZiBUUlVFLCB0aGVuIHJlY29uc3RydWN0IHRoZSBJRCBvZiByZXZlcnNlCisgICAgICogZW50cmllcyBieSBjYWxsaW5nIGdldElEKCkgb2YgY29tcG9uZW50IGVudHJpZXMuICBTb21lIGNvbnN0cnVjdG9ycworICAgICAqIGRvIG5vdCByZXF1aXJlIHRoaXMgYmVjYXVzZSB0aGV5IGFwcGx5IGEgZmFjYWRlIElEIGFueXdheS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgaW5pdChTdHJpbmcgaWQsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgaWRTcGxpdFBvaW50LAorICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHNwbGl0VHJhbnMsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmaXhSZXZlcnNlSUQpIHsKKyAgICAgICAgLy8gYXNzZXJ0KHRyYW5zID09IDApOworCisgICAgICAgIFZlY3RvciBsaXN0ID0gbmV3IFZlY3RvcigpOworICAgICAgICBVbmljb2RlU2V0W10gY29tcG91bmRGaWx0ZXIgPSBuZXcgVW5pY29kZVNldFsxXTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlZ2VuSUQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGlmICghVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5wYXJzZUNvbXBvdW5kSUQoaWQsIGRpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgcmVnZW5JRCwgbGlzdCwgY29tcG91bmRGaWx0ZXIpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIElEICIgKyBpZCk7CisgICAgICAgIH0KKworICAgICAgICBjb21wb3VuZFJCVEluZGV4ID0gVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5pbnN0YW50aWF0ZUxpc3QobGlzdCwgc3BsaXRUcmFucywgaWRTcGxpdFBvaW50KTsKKworICAgICAgICBpbml0KGxpc3QsIGRpcmVjdGlvbiwgZml4UmV2ZXJzZUlEKTsKKworICAgICAgICBpZiAoY29tcG91bmRGaWx0ZXJbMF0gIT0gbnVsbCkgeworICAgICAgICAgICAgc2V0RmlsdGVyKGNvbXBvdW5kRmlsdGVyWzBdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmlzaCBjb25zdHJ1Y3RpbmcgYSB0cmFuc2xpdGVyYXRvcjogb25seSB0byBiZSBjYWxsZWQgYnkKKyAgICAgKiBjb25zdHJ1Y3RvcnMuICBCZWZvcmUgY2FsbGluZyBpbml0KCksIHNldCB0cmFucyBhbmQgZmlsdGVyIHRvIE5VTEwuCisgICAgICogQHBhcmFtIGxpc3QgYSB2ZWN0b3Igb2YgdHJhbnNsaXRlcmF0b3Igb2JqZWN0cyB0byBiZSBhZG9wdGVkLiAgSXQKKyAgICAgKiBzaG91bGQgTk9UIGJlIGVtcHR5LiAgVGhlIGxpc3Qgc2hvdWxkIGJlIGluIGRlY2xhcmVkIG9yZGVyLiAgVGhhdAorICAgICAqIGlzLCBpdCBzaG91bGQgYmUgaW4gdGhlIEZPUldBUkQgb3JkZXI7IGlmIGRpcmVjdGlvbiBpcyBSRVZFUlNFIHRoZW4KKyAgICAgKiB0aGUgbGlzdCBvcmRlciB3aWxsIGJlIHJldmVyc2VkLgorICAgICAqIEBwYXJhbSBkaXJlY3Rpb24gZWl0aGVyIEZPUldBUkQgb3IgUkVWRVJTRQorICAgICAqIEBwYXJhbSBmaXhSZXZlcnNlSUQgaWYgVFJVRSwgdGhlbiByZWNvbnN0cnVjdCB0aGUgSUQgb2YgcmV2ZXJzZQorICAgICAqIGVudHJpZXMgYnkgY2FsbGluZyBnZXRJRCgpIG9mIGNvbXBvbmVudCBlbnRyaWVzLiAgU29tZSBjb25zdHJ1Y3RvcnMKKyAgICAgKiBkbyBub3QgcmVxdWlyZSB0aGlzIGJlY2F1c2UgdGhleSBhcHBseSBhIGZhY2FkZSBJRCBhbnl3YXkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGluaXQoVmVjdG9yIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZpeFJldmVyc2VJRCkgeworICAgICAgICAvLyBhc3NlcnQodHJhbnMgPT0gMCk7CisKKyAgICAgICAgLy8gQWxsb2NhdGUgYXJyYXkKKyAgICAgICAgaW50IGNvdW50ID0gbGlzdC5zaXplKCk7CisgICAgICAgIHRyYW5zID0gbmV3IFRyYW5zbGl0ZXJhdG9yW2NvdW50XTsKKworICAgICAgICAvLyBNb3ZlIHRoZSB0cmFuc2xpdGVyYXRvcnMgZnJvbSB0aGUgdmVjdG9yIGludG8gYW4gYXJyYXkuCisgICAgICAgIC8vIFJldmVyc2UgdGhlIG9yZGVyIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGludCBqID0gKGRpcmVjdGlvbiA9PSBGT1JXQVJEKSA/IGkgOiBjb3VudCAtIDEgLSBpOworICAgICAgICAgICAgdHJhbnNbaV0gPSAoVHJhbnNsaXRlcmF0b3IpIGxpc3QuZWxlbWVudEF0KGopOworICAgICAgICB9CisKKyAgICAgICAgLy8gRml4IGNvbXBvdW5kUkJUSW5kZXggZm9yIFJFVkVSU0UgdHJhbnNsaXRlcmF0b3JzCisgICAgICAgIGlmIChjb21wb3VuZFJCVEluZGV4ID49IDAgJiYgZGlyZWN0aW9uID09IFJFVkVSU0UpIHsKKyAgICAgICAgICAgIGNvbXBvdW5kUkJUSW5kZXggPSBjb3VudCAtIDEgLSBjb21wb3VuZFJCVEluZGV4OworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlIGRpcmVjdGlvbiBpcyBVVFJBTlNfUkVWRVJTRSB0aGVuIHdlIG1heSBuZWVkIHRvIGZpeCB0aGUKKyAgICAgICAgLy8gSUQuCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gUkVWRVJTRSAmJiBmaXhSZXZlcnNlSUQpIHsKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBuZXdJRCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3SUQuYXBwZW5kKElEX0RFTElNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV3SUQuYXBwZW5kKHRyYW5zW2ldLmdldElEKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0SUQobmV3SUQudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICBjb21wdXRlTWF4aW11bUNvbnRleHRMZW5ndGgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIElEcyBvZiB0aGUgZ2l2ZW4gbGlzdCBvZiB0cmFuc2xpdGVyYXRvcnMsIGNvbmNhdGVuYXRlZAorICAgICAqIHdpdGggJzsnIGRlbGltaXRpbmcgdGhlbS4gIEVxdWl2YWxlbnQgdG8gdGhlIHBlcmxpc2ggZXhwcmVzc2lvbgorICAgICAqIGpvaW4oJzsnLCBtYXAoJF8uZ2V0SUQoKSwgdHJhbnNsaXRlcmF0b3JzKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgam9pbklEcyhUcmFuc2xpdGVyYXRvcltdIHRyYW5zbGl0ZXJhdG9ycykgeworICAgICAgICBTdHJpbmdCdWZmZXIgaWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTx0cmFuc2xpdGVyYXRvcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgICAgIGlkLmFwcGVuZCgnOycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWQuYXBwZW5kKHRyYW5zbGl0ZXJhdG9yc1tpXS5nZXRJRCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaWQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdHJhbnNsaXRlcmF0b3JzIGluIHRoaXMgY2hhaW4uCisgICAgICogQHJldHVybiBudW1iZXIgb2YgdHJhbnNsaXRlcmF0b3JzIGluIHRoaXMgY2hhaW4uCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0Q291bnQoKSB7CisgICAgICAgIHJldHVybiB0cmFucy5sZW5ndGg7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHJhbnNsaXRlcmF0b3IgYXQgdGhlIGdpdmVuIGluZGV4IGluIHRoaXMgY2hhaW4uCisgICAgICogQHBhcmFtIGluZGV4IGluZGV4IGludG8gY2hhaW4sIGZyb20gMCB0byA8Y29kZT5nZXRDb3VudCgpIC0gMTwvY29kZT4KKyAgICAgKiBAcmV0dXJuIHRyYW5zbGl0ZXJhdG9yIGF0IHRoZSBnaXZlbiBpbmRleAorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZWNvbWUgcHJpdmF0ZSBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0VHJhbnNsaXRlcmF0b3IoaW50IGluZGV4KSB7CisgICAgICAgIHJldHVybiB0cmFuc1tpbmRleF07CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwZW5kIGMgdG8gYnVmLCB1bmxlc3MgYnVmIGlzIGVtcHR5IG9yIGJ1ZiBhbHJlYWR5IGVuZHMgaW4gYy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIF9zbWFydEFwcGVuZChTdHJpbmdCdWZmZXIgYnVmLCBjaGFyIGMpIHsKKyAgICAgICAgaWYgKGJ1Zi5sZW5ndGgoKSAhPSAwICYmCisgICAgICAgICAgICBidWYuY2hhckF0KGJ1Zi5sZW5ndGgoKSAtIDEpICE9IGMpIHsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSBUcmFuc2xpdGVyYXRvcjoKKyAgICAgKiBDcmVhdGUgYSBydWxlIHN0cmluZyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gY3JlYXRlRnJvbVJ1bGVzKCkKKyAgICAgKiB0byByZWNyZWF0ZSB0aGlzIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqIEBwYXJhbSBlc2NhcGVVbnByaW50YWJsZSBpZiBUUlVFIHRoZW4gY29udmVydCB1bnByaW50YWJsZQorICAgICAqIGNoYXJhY3RlciB0byB0aGVpciBoZXggZXNjYXBlIHJlcHJlc2VudGF0aW9ucywgXFx1eHh4eCBvcgorICAgICAqIFxcVXh4eHh4eHh4LiAgVW5wcmludGFibGUgY2hhcmFjdGVycyBhcmUgdGhvc2Ugb3RoZXIgdGhhbgorICAgICAqIFUrMDAwQSwgVSswMDIwLi5VKzAwN0UuCisgICAgICogQHJldHVybiB0aGUgcnVsZSBzdHJpbmcKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmVjb21lIHByaXZhdGUgYWZ0ZXIgMjAwMi1zZXAtMzAuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1J1bGVzKGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUpIHsKKyAgICAgICAgLy8gV2UgZG8gTk9UIGNhbGwgdG9SdWxlcygpIG9uIG91ciBjb21wb25lbnQgdHJhbnNsaXRlcmF0b3JzLCBpbgorICAgICAgICAvLyBnZW5lcmFsLiAgSWYgd2UgaGF2ZSBzZXZlcmFsIHJ1bGUtYmFzZWQgdHJhbnNsaXRlcmF0b3JzLCB0aGlzCisgICAgICAgIC8vIHlpZWxkcyBhIGNvbmNhdGVuYXRpb24gb2YgdGhlIHJ1bGVzIC0tIG5vdCB3aGF0IHdlIHdhbnQuICBXZSBkbworICAgICAgICAvLyBoYW5kbGUgY29tcG91bmQgUkJUIHRyYW5zbGl0ZXJhdG9ycyBzcGVjaWFsbHkgLS0gdGhvc2UgZm9yIHdoaWNoCisgICAgICAgIC8vIGNvbXBvdW5kUkJUSW5kZXggPj0gMC4gIEZvciB0aGUgdHJhbnNsaXRlcmF0b3IgYXQgY29tcG91bmRSQlRJbmRleCwKKyAgICAgICAgLy8gd2UgZG8gY2FsbCB0b1J1bGVzKCkgcmVjdXJzaXZlbHkuCisgICAgICAgIFN0cmluZ0J1ZmZlciBydWxlc1NvdXJjZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgaWYgKGNvbXBvdW5kUkJUSW5kZXggPj0gMCAmJiBnZXRGaWx0ZXIoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgYSBjb21wb3VuZCBSQlQgYW5kIGlmIHdlIGhhdmUgYSBnbG9iYWwKKyAgICAgICAgICAgIC8vIGZpbHRlciwgdGhlbiBlbWl0IGl0IGF0IHRoZSB0b3AuCisgICAgICAgICAgICBydWxlc1NvdXJjZS5hcHBlbmQoIjo6IikuYXBwZW5kKGdldEZpbHRlcigpLnRvUGF0dGVybihlc2NhcGVVbnByaW50YWJsZSkpLmFwcGVuZChJRF9ERUxJTSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRyYW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgcnVsZTsKKyAgICAgICAgICAgIGlmIChpID09IGNvbXBvdW5kUkJUSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBydWxlID0gdHJhbnNbaV0udG9SdWxlcyhlc2NhcGVVbnByaW50YWJsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJ1bGUgPSB0cmFuc1tpXS5iYXNlVG9SdWxlcyhlc2NhcGVVbnByaW50YWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfc21hcnRBcHBlbmQocnVsZXNTb3VyY2UsICdcbicpOworICAgICAgICAgICAgcnVsZXNTb3VyY2UuYXBwZW5kKHJ1bGUpOworICAgICAgICAgICAgX3NtYXJ0QXBwZW5kKHJ1bGVzU291cmNlLCBJRF9ERUxJTSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJ1bGVzU291cmNlLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBzZXQgb2YgYWxsIGNoYXJhY3RlcnMgdGhhdCBtYXkgYmUgbW9kaWZpZWQgYnkgdGhpcworICAgICAqIFRyYW5zbGl0ZXJhdG9yLCBpZ25vcmluZyB0aGUgZWZmZWN0IG9mIG91ciBmaWx0ZXIuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHByb3RlY3RlZCBVbmljb2RlU2V0IGhhbmRsZUdldFNvdXJjZVNldCgpIHsKKyAgICAgICAgVW5pY29kZVNldCBzZXQgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8dHJhbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHNldC5hZGRBbGwodHJhbnNbaV0uZ2V0U291cmNlU2V0KCkpOworICAgICAgICAgICAgLy8gVGFrZSB0aGUgZXhhbXBsZSBvZiBIaXJhZ2FuYS1MYXRpbi4gIFRoaXMgaXMgcmVhbGx5CisgICAgICAgICAgICAvLyBIaXJhZ2FuYS1LYXRha2FuYTsgS2F0YWthbmEtTGF0aW4uICBUaGUgc291cmNlIHNldCBvZgorICAgICAgICAgICAgLy8gdGhlc2UgdHdvIGlzIHJvdWdobHkgWzpIaXJhZ2FuYTpdIGFuZCBbOkthdGFrYW5hOl0uCisgICAgICAgICAgICAvLyBCdXQgdGhlIHNvdXJjZSBzZXQgZm9yIHRoZSBlbnRpcmUgdHJhbnNsaXRlcmF0b3IgaXMKKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IFs6SGlyYWdhbmE6XSBPTkxZIC0tIHRoYXQgaXMsIHRoZSBmaXJzdAorICAgICAgICAgICAgLy8gbm9uLWVtcHR5IHNvdXJjZSBzZXQuCisKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBoZXVyaXN0aWMsIGFuZCBub3QgMTAwJSByZWxpYWJsZS4KKyAgICAgICAgICAgIGlmICghc2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc2V0IG9mIGFsbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IGJlIGdlbmVyYXRlZCBhcworICAgICAqIHJlcGxhY2VtZW50IHRleHQgYnkgdGhpcyB0cmFuc2xpdGVyYXRvci4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmVjb21lIHByaXZhdGUgYWZ0ZXIgMjAwMy0xMi0wMS4gVXNlIHRoZSBUcmFuc2xpdGVyYXRvciBmYWN0b3J5IG1ldGhvZHMuCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVTZXQgZ2V0VGFyZ2V0U2V0KCkgeworICAgICAgICBVbmljb2RlU2V0IHNldCA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTx0cmFucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGhldXJpc3RpYywgYW5kIG5vdCAxMDAlIHJlbGlhYmxlLgorICAgICAgICAgICAgc2V0LmFkZEFsbCh0cmFuc1tpXS5nZXRUYXJnZXRTZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBUcmFuc2xpdGVyYXRvciNoYW5kbGVUcmFuc2xpdGVyYXRlfS4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmVjb21lIHByaXZhdGUgYWZ0ZXIgMjAwMy0xMi0wMS4gVXNlIHRoZSBUcmFuc2xpdGVyYXRvciBmYWN0b3J5IG1ldGhvZHMuCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gaW5kZXgsIGJvb2xlYW4gaW5jcmVtZW50YWwpIHsKKyAgICAgICAgLyogQ2FsbCBlYWNoIHRyYW5zbGl0ZXJhdG9yIHdpdGggdGhlIHNhbWUgc3RhcnQgdmFsdWUgYW5kCisgICAgICAgICAqIGluaXRpYWwgY3Vyc29yIGluZGV4LCBidXQgd2l0aCB0aGUgbGltaXQgaW5kZXggYXMgbW9kaWZpZWQKKyAgICAgICAgICogYnkgcHJlY2VkaW5nIHRyYW5zbGl0ZXJhdG9ycy4gIFRoZSBjdXJzb3IgaW5kZXggbXVzdCBiZQorICAgICAgICAgKiByZXNldCBmb3IgZWFjaCB0cmFuc2xpdGVyYXRvciB0byBnaXZlIGVhY2ggYSBjaGFuY2UgdG8KKyAgICAgICAgICogdHJhbnNsaXRlcmF0ZSB0aGUgdGV4dC4gIFRoZSBpbml0aWFsIGN1cnNvciBpbmRleCBpcyBrbm93bgorICAgICAgICAgKiB0byBzdGlsbCBwb2ludCB0byB0aGUgc2FtZSBwbGFjZSBhZnRlciBlYWNoIHRyYW5zbGl0ZXJhdG9yCisgICAgICAgICAqIGlzIGNhbGxlZCBiZWNhdXNlIGVhY2ggdHJhbnNsaXRlcmF0b3Igd2lsbCBub3QgY2hhbmdlIHRoZQorICAgICAgICAgKiB0ZXh0IGJldHdlZW4gc3RhcnQgYW5kIHRoZSBpbml0aWFsIHZhbHVlIG9mIGN1cnNvci4KKyAgICAgICAgICoKKyAgICAgICAgICogSU1QT1JUQU5UOiBBZnRlciB0aGUgZmlyc3QgdHJhbnNsaXRlcmF0b3IsIGVhY2ggc3Vic2VxdWVudAorICAgICAgICAgKiB0cmFuc2xpdGVyYXRvciBvbmx5IGdldHMgdG8gdHJhbnNsaXRlcmF0ZSB0ZXh0IGNvbW1pdHRlZCBieQorICAgICAgICAgKiBwcmVjZWRpbmcgdHJhbnNsaXRlcmF0b3JzOyB0aGF0IGlzLCB0aGUgY3Vyc29yIChvdXRwdXQKKyAgICAgICAgICogdmFsdWUpIG9mIHRyYW5zbGl0ZXJhdG9yIGkgYmVjb21lcyB0aGUgbGltaXQgKGlucHV0IHZhbHVlKQorICAgICAgICAgKiBvZiB0cmFuc2xpdGVyYXRvciBpKzEuICBGaW5hbGx5LCB0aGUgb3ZlcmFsbCBsaW1pdCBpcyBmaXhlZAorICAgICAgICAgKiB1cCBiZWZvcmUgd2UgcmV0dXJuLgorICAgICAgICAgKgorICAgICAgICAgKiBBc3N1bXB0aW9ucyB3ZSBtYWtlIGhlcmU6CisgICAgICAgICAqICgxKSBjb250ZXh0U3RhcnQgPD0gc3RhcnQgPD0gbGltaXQgPD0gY29udGV4dExpbWl0IDw9IHRleHQubGVuZ3RoKCkKKyAgICAgICAgICogKDIpIHN0YXJ0IDw9IHN0YXJ0JyA8PSBsaW1pdCcgIDtjdXJzb3IgZG9lc24ndCBtb3ZlIGJhY2sKKyAgICAgICAgICogKDMpIHN0YXJ0IDw9IGxpbWl0JyAgICAgICAgICAgIDt0ZXh0IGJlZm9yZSBjdXJzb3IgdW5jaGFuZ2VkCisgICAgICAgICAqIC0gc3RhcnQnIGlzIHRoZSB2YWx1ZSBvZiBzdGFydCBhZnRlciBjYWxsaW5nIGhhbmRsZUtUCisgICAgICAgICAqIC0gbGltaXQnIGlzIHRoZSB2YWx1ZSBvZiBsaW1pdCBhZnRlciBjYWxsaW5nIGhhbmRsZUtUCisgICAgICAgICAqLworCisgICAgICAgIC8qKgorICAgICAgICAgKiBFeGFtcGxlOiAzIHRyYW5zbGl0ZXJhdG9ycy4gIFRoaXMgZXhhbXBsZSBpbGx1c3RyYXRlcyB0aGUKKyAgICAgICAgICogbWVjaGFuaWNzIHdlIG5lZWQgdG8gaW1wbGVtZW50LiAgQywgUywgYW5kIEwgYXJlIHRoZSBjb250ZXh0U3RhcnQsCisgICAgICAgICAqIHN0YXJ0LCBhbmQgbGltaXQuICBnbCBpcyB0aGUgZ2xvYmFsTGltaXQuICBjb250ZXh0TGltaXQgaXMKKyAgICAgICAgICogZXF1YWwgdG8gbGltaXQgdGhyb3VnaG91dC4KKyAgICAgICAgICoKKyAgICAgICAgICogMS4gaC11LCBjaGFuZ2VzIGhleCB0byBVbmljb2RlCisgICAgICAgICAqCisgICAgICAgICAqICAgIDQgIDcgIGEgIGQgIDAgICAgICA0ICA3ICBhCisgICAgICAgICAqICAgIGFiYy91MDA2MS91ICAgID0+ICBhYmNhL3UgICAgCisgICAgICAgICAqICAgIEMgIFMgICAgICAgTCAgICAgICBDICAgUyBMICAgZ2w9Zi0+YQorICAgICAgICAgKgorICAgICAgICAgKiAyLiB1cHVwLCBjaGFuZ2VzICJ4IiB0byAiWFgiCisgICAgICAgICAqCisgICAgICAgICAqICAgIDQgIDcgIGEgICAgICAgNCAgNyAgYQorICAgICAgICAgKiAgICBhYmNhL3UgICAgPT4gIGFiY0FBL3UgICAgCisgICAgICAgICAqICAgIEMgIFNMICAgICAgICAgQyAgICBTICAgCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICBMICAgIGdsPWEtPmIKKyAgICAgICAgICogMy4gdS1oLCBjaGFuZ2VzIFVuaWNvZGUgdG8gaGV4CisgICAgICAgICAqCisgICAgICAgICAqICAgIDQgIDcgIGEgICAgICAgIDQgIDcgIGEgIGQgIDAgIDMKKyAgICAgICAgICogICAgYWJjQUEvdSAgICA9PiAgYWJjL3UwMDQxL3UwMDQxL3UgICAgCisgICAgICAgICAqICAgIEMgIFMgTCAgICAgICAgIEMgICAgICAgICAgICAgIFMKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCAgIGdsPWItPjE1CisgICAgICAgICAqIDQuIHJldHVybgorICAgICAgICAgKgorICAgICAgICAgKiAgICA0ICA3ICBhICBkICAwICAzCisgICAgICAgICAqICAgIGFiYy91MDA0MS91MDA0MS91ICAgIAorICAgICAgICAgKiAgICBDIFMgTAorICAgICAgICAgKi8KKworICAgICAgICBpZiAodHJhbnMubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgaW5kZXguc3RhcnQgPSBpbmRleC5saW1pdDsKKyAgICAgICAgICAgIHJldHVybjsgLy8gU2hvcnQgY2lyY3VpdCBmb3IgZW1wdHkgY29tcG91bmQgdHJhbnNsaXRlcmF0b3JzCisgICAgICAgIH0KKworICAgICAgICAvLyBjb21wb3VuZExpbWl0IGlzIHRoZSBsaW1pdCB2YWx1ZSBmb3IgdGhlIGVudGlyZSBjb21wb3VuZAorICAgICAgICAvLyBvcGVyYXRpb24uICBXZSBvdmVyd3JpdGUgaW5kZXgubGltaXQgd2l0aCB0aGUgcHJldmlvdXMKKyAgICAgICAgLy8gaW5kZXguc3RhcnQuICBBZnRlciBlYWNoIHRyYW5zbGl0ZXJhdGlvbiwgd2UgdXBkYXRlCisgICAgICAgIC8vIGNvbXBvdW5kTGltaXQgZm9yIGluc2VydGlvbnMgb3IgZGVsZXRpb25zIHRoYXQgaGF2ZSBoYXBwZW5lZC4KKyAgICAgICAgaW50IGNvbXBvdW5kTGltaXQgPSBpbmRleC5saW1pdDsKKworICAgICAgICAvLyBjb21wb3VuZFN0YXJ0IGlzIHRoZSBzdGFydCBmb3IgdGhlIGVudGlyZSBjb21wb3VuZAorICAgICAgICAvLyBvcGVyYXRpb24uCisgICAgICAgIGludCBjb21wb3VuZFN0YXJ0ID0gaW5kZXguc3RhcnQ7CisKKyAgICAgICAgaW50IGRlbHRhID0gMDsgLy8gZGVsdGEgaW4gbGVuZ3RoCisKKyAgICAgICAgU3RyaW5nQnVmZmVyIGxvZyA9IG51bGw7CisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgbG9nID0gbmV3IFN0cmluZ0J1ZmZlcigiQ29tcG91bmRUcmFuc2xpdGVyYXRvcnsiICsgZ2V0SUQoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmNyZW1lbnRhbCA/ICJ9aTogSU49IiA6ICJ9OiBJTj0iKSk7CisgICAgICAgICAgICBVdGlsaXR5LmZvcm1hdElucHV0KGxvZywgdGV4dCwgaW5kZXgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFV0aWxpdHkuZXNjYXBlKGxvZy50b1N0cmluZygpKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBHaXZlIGVhY2ggdHJhbnNsaXRlcmF0b3IgYSBjcmFjayBhdCB0aGUgcnVuIG9mIGNoYXJhY3RlcnMuCisgICAgICAgIC8vIFNlZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBtZXRob2QgZm9yIG1vcmUgZGV0YWlsLgorICAgICAgICBmb3IgKGludCBpPTA7IGk8dHJhbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGluZGV4LnN0YXJ0ID0gY29tcG91bmRTdGFydDsgLy8gUmVzZXQgc3RhcnQKKyAgICAgICAgICAgIGludCBsaW1pdCA9IGluZGV4LmxpbWl0OworCisgICAgICAgICAgICBpZiAoaW5kZXguc3RhcnQgPT0gaW5kZXgubGltaXQpIHsKKyAgICAgICAgICAgICAgICAvLyBTaG9ydCBjaXJjdWl0IGZvciBlbXB0eSByYW5nZQorICAgICAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbXBvdW5kVHJhbnNsaXRlcmF0b3JbIiArIGkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4uIiArICh0cmFucy5sZW5ndGgtMSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluY3JlbWVudGFsID8gIl1pOiAiIDogIl06ICIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZm9ybWF0SW5wdXQodGV4dCwgaW5kZXgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKE5PVEhJTkcgVE8gRE8pIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBsb2cuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgIGxvZy5hcHBlbmQoIkNvbXBvdW5kVHJhbnNsaXRlcmF0b3JbIiArIGkgKyAiPSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNbaV0uZ2V0SUQoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5jcmVtZW50YWwgPyAiXWk6ICIgOiAiXTogIikpOworICAgICAgICAgICAgICAgIFV0aWxpdHkuZm9ybWF0SW5wdXQobG9nLCB0ZXh0LCBpbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRyYW5zW2ldLmZpbHRlcmVkVHJhbnNsaXRlcmF0ZSh0ZXh0LCBpbmRleCwgaW5jcmVtZW50YWwpOworCisgICAgICAgICAgICAvLyBJbiBhIHByb3Blcmx5IHdyaXR0ZW4gdHJhbnNsaXRlcmF0b3IsIHN0YXJ0ID09IGxpbWl0IGFmdGVyCisgICAgICAgICAgICAvLyBoYW5kbGVUcmFuc2xpdGVyYXRlKCkgcmV0dXJucyB3aGVuIGluY3JlbWVudGFsIGlzIGZhbHNlLgorICAgICAgICAgICAgLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgdGhlIHN1YmNsYXNzIGRvZXNuJ3QgZG8gdGhpcywgYW5kIHRocm93CisgICAgICAgICAgICAvLyBhbiBleGNlcHRpb24uICAoSnVzdCBwaW5uaW5nIHN0YXJ0IHRvIGxpbWl0IGlzIGEgYmFkIGlkZWEsCisgICAgICAgICAgICAvLyBiZWNhdXNlIHdoYXQncyBwcm9iYWJseSBoYXBwZW5pbmcgaXMgdGhhdCB0aGUgc3ViY2xhc3MKKyAgICAgICAgICAgIC8vIGlzbid0IHRyYW5zbGl0ZXJhdGluZyBhbGwgdGhlIHdheSB0byB0aGUgZW5kLCBhbmQgaXQgc2hvdWxkCisgICAgICAgICAgICAvLyBpbiBub24taW5jcmVtZW50YWwgbW9kZS4pCisgICAgICAgICAgICBpZiAoIWluY3JlbWVudGFsICYmIGluZGV4LnN0YXJ0ICE9IGluZGV4LmxpbWl0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVSUk9SOiBJbmNvbXBsZXRlIG5vbi1pbmNyZW1lbnRhbCB0cmFuc2xpdGVyYXRpb24gYnkgIiArIHRyYW5zW2ldLmdldElEKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKCIgPT4gIik7CisgICAgICAgICAgICAgICAgVXRpbGl0eS5mb3JtYXRJbnB1dChsb2csIHRleHQsIGluZGV4KTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVXRpbGl0eS5lc2NhcGUobG9nLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ3VtdWxhdGl2ZSBkZWx0YSBmb3IgaW5zZXJ0aW9ucy9kZWxldGlvbnMKKyAgICAgICAgICAgIGRlbHRhICs9IGluZGV4LmxpbWl0IC0gbGltaXQ7CisKKyAgICAgICAgICAgIGlmIChpbmNyZW1lbnRhbCkgeworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBpbmNyZW1lbnRhbCBjYXNlLCBvbmx5IGFsbG93IHN1YnNlcXVlbnQKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2xpdGVyYXRvcnMgdG8gbW9kaWZ5IHdoYXQgaGFzIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlbHkgcHJvY2Vzc2VkIGJ5IHByaW9yIHRyYW5zbGl0ZXJhdG9ycy4gIEluIHRoZQorICAgICAgICAgICAgICAgIC8vIG5vbi1pbmNybWVudGFsIGNhc2UsIGFsbG93IGVhY2ggdHJhbnNsaXRlcmF0b3IgdG8KKyAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHRoZSBlbnRpcmUgdGV4dC4KKyAgICAgICAgICAgICAgICBpbmRleC5saW1pdCA9IGluZGV4LnN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcG91bmRMaW1pdCArPSBkZWx0YTsKKworICAgICAgICAvLyBTdGFydCBpcyBnb29kIHdoZXJlIGl0IGlzIC0tIHdoZXJlIHRoZSBsYXN0IHRyYW5zbGl0ZXJhdG9yIGxlZnQKKyAgICAgICAgLy8gaXQuICBMaW1pdCBuZWVkcyB0byBiZSBwdXQgYmFjayB3aGVyZSBpdCB3YXMsIG1vZHVsbworICAgICAgICAvLyBhZGp1c3RtZW50cyBmb3IgZGVsZXRpb25zL2luc2VydGlvbnMuCisgICAgICAgIGluZGV4LmxpbWl0ID0gY29tcG91bmRMaW1pdDsKKworICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIGxvZy5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICBsb2cuYXBwZW5kKCJDb21wb3VuZFRyYW5zbGl0ZXJhdG9yeyIgKyBnZXRJRCgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKGluY3JlbWVudGFsID8gIn1pOiBPVVQ9IiA6ICJ9OiBPVVQ9IikpOworICAgICAgICAgICAgVXRpbGl0eS5mb3JtYXRJbnB1dChsb2csIHRleHQsIGluZGV4KTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihVdGlsaXR5LmVzY2FwZShsb2cudG9TdHJpbmcoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcHV0ZSBhbmQgc2V0IHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgY29udGV4dCByZXF1aXJlZCBieSB0aGlzIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqIFRoaXMgaXMgPGVtPnByZWNlZGluZzwvZW0+IGNvbnRleHQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGNvbXB1dGVNYXhpbXVtQ29udGV4dExlbmd0aCgpIHsKKyAgICAgICAgaW50IG1heCA9IDA7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTx0cmFucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaW50IGxlbiA9IHRyYW5zW2ldLmdldE1heGltdW1Db250ZXh0TGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAobGVuID4gbWF4KSB7CisgICAgICAgICAgICAgICAgbWF4ID0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNldE1heGltdW1Db250ZXh0TGVuZ3RoKG1heCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvRGF0ZUZvcm1hdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvRGF0ZUZvcm1hdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxYzJhODgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9EYXRlRm9ybWF0LmphdmEKQEAgLTAsMCArMSw5MTEgQEAKKy8qCisqICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlRGF0YTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5UaW1lWm9uZTsKKworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworaW1wb3J0IGphdmEudGV4dC5Gb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5QYXJzZVBvc2l0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogRGF0ZUZvcm1hdCBpcyBhbiBhYnN0cmFjdCBjbGFzcyBmb3IgZGF0ZS90aW1lIGZvcm1hdHRpbmcgc3ViY2xhc3NlcyB3aGljaAorICogZm9ybWF0cyBhbmQgcGFyc2VzIGRhdGVzIG9yIHRpbWUgaW4gYSBsYW5ndWFnZS1pbmRlcGVuZGVudCBtYW5uZXIuCisgKiBUaGUgZGF0ZS90aW1lIGZvcm1hdHRpbmcgc3ViY2xhc3MsIHN1Y2ggYXMgU2ltcGxlRGF0ZUZvcm1hdCwgYWxsb3dzIGZvcgorICogZm9ybWF0dGluZyAoaS5lLiwgZGF0ZSAtPiB0ZXh0KSwgcGFyc2luZyAodGV4dCAtPiBkYXRlKSwgYW5kCisgKiBub3JtYWxpemF0aW9uLiAgVGhlIGRhdGUgaXMgcmVwcmVzZW50ZWQgYXMgYSA8Y29kZT5EYXRlPC9jb2RlPiBvYmplY3Qgb3IKKyAqIGFzIHRoZSBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLCAwMDowMDowMCBHTVQuCisgKgorICogPHA+RGF0ZUZvcm1hdCBwcm92aWRlcyBtYW55IGNsYXNzIG1ldGhvZHMgZm9yIG9idGFpbmluZyBkZWZhdWx0IGRhdGUvdGltZQorICogZm9ybWF0dGVycyBiYXNlZCBvbiB0aGUgZGVmYXVsdCBvciBhIGdpdmVuIGxvYWNsZSBhbmQgYSBudW1iZXIgb2YgZm9ybWF0dGluZworICogc3R5bGVzLiBUaGUgZm9ybWF0dGluZyBzdHlsZXMgaW5jbHVkZSBGVUxMLCBMT05HLCBNRURJVU0sIGFuZCBTSE9SVC4gTW9yZQorICogZGV0YWlsIGFuZCBleGFtcGxlcyBvZiB1c2luZyB0aGVzZSBzdHlsZXMgYXJlIHByb3ZpZGVkIGluIHRoZSBtZXRob2QKKyAqIGRlc2NyaXB0aW9ucy4KKyAqCisgKiA8cD5EYXRlRm9ybWF0IGhlbHBzIHlvdSB0byBmb3JtYXQgYW5kIHBhcnNlIGRhdGVzIGZvciBhbnkgbG9jYWxlLgorICogWW91ciBjb2RlIGNhbiBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUgY29udmVudGlvbnMgZm9yCisgKiBtb250aHMsIGRheXMgb2YgdGhlIHdlZWssIG9yIGV2ZW4gdGhlIGNhbGVuZGFyIGZvcm1hdDogbHVuYXIgdnMuIHNvbGFyLgorICoKKyAqIDxwPlRvIGZvcm1hdCBhIGRhdGUgZm9yIHRoZSBjdXJyZW50IExvY2FsZSwgdXNlIG9uZSBvZiB0aGUKKyAqIHN0YXRpYyBmYWN0b3J5IG1ldGhvZHM6CisgKiA8cHJlPgorICogIG15U3RyaW5nID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKS5mb3JtYXQobXlEYXRlKTsKKyAqIDwvcHJlPgorICogPHA+SWYgeW91IGFyZSBmb3JtYXR0aW5nIG11bHRpcGxlIG51bWJlcnMsIGl0IGlzCisgKiBtb3JlIGVmZmljaWVudCB0byBnZXQgdGhlIGZvcm1hdCBhbmQgdXNlIGl0IG11bHRpcGxlIHRpbWVzIHNvIHRoYXQKKyAqIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIHRvIGZldGNoIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYWwKKyAqIGxhbmd1YWdlIGFuZCBjb3VudHJ5IGNvbnZlbnRpb25zIG11bHRpcGxlIHRpbWVzLgorICogPHByZT4KKyAqICBEYXRlRm9ybWF0IGRmID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsKKyAqICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKyAqICAgIG91dHB1dC5wcmludGxuKGRmLmZvcm1hdChteURhdGVbaV0pICsgIjsgIik7CisgKiAgfQorICogPC9wcmU+CisgKiA8cD5UbyBmb3JtYXQgYSBudW1iZXIgZm9yIGEgZGlmZmVyZW50IExvY2FsZSwgc3BlY2lmeSBpdCBpbiB0aGUKKyAqIGNhbGwgdG8gZ2V0RGF0ZUluc3RhbmNlKCkuCisgKiA8cHJlPgorICogIERhdGVGb3JtYXQgZGYgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LkxPTkcsIExvY2FsZS5GUkFOQ0UpOworICogPC9wcmU+CisgKiA8cD5Zb3UgY2FuIHVzZSBhIERhdGVGb3JtYXQgdG8gcGFyc2UgYWxzby4KKyAqIDxwcmU+CisgKiAgbXlEYXRlID0gZGYucGFyc2UobXlTdHJpbmcpOworICogPC9wcmU+CisgKiA8cD5Vc2UgZ2V0RGF0ZUluc3RhbmNlIHRvIGdldCB0aGUgbm9ybWFsIGRhdGUgZm9ybWF0IGZvciB0aGF0IGNvdW50cnkuCisgKiBUaGVyZSBhcmUgb3RoZXIgc3RhdGljIGZhY3RvcnkgbWV0aG9kcyBhdmFpbGFibGUuCisgKiBVc2UgZ2V0VGltZUluc3RhbmNlIHRvIGdldCB0aGUgdGltZSBmb3JtYXQgZm9yIHRoYXQgY291bnRyeS4KKyAqIFVzZSBnZXREYXRlVGltZUluc3RhbmNlIHRvIGdldCBhIGRhdGUgYW5kIHRpbWUgZm9ybWF0LiBZb3UgY2FuIHBhc3MgaW4gCisgKiBkaWZmZXJlbnQgb3B0aW9ucyB0byB0aGVzZSBmYWN0b3J5IG1ldGhvZHMgdG8gY29udHJvbCB0aGUgbGVuZ3RoIG9mIHRoZQorICogcmVzdWx0OyBmcm9tIFNIT1JUIHRvIE1FRElVTSB0byBMT05HIHRvIEZVTEwuIFRoZSBleGFjdCByZXN1bHQgZGVwZW5kcworICogb24gdGhlIGxvY2FsZSwgYnV0IGdlbmVyYWxseToKKyAqIDx1bD48bGk+U0hPUlQgaXMgY29tcGxldGVseSBudW1lcmljLCBzdWNoIGFzIDEyLjEzLjUyIG9yIDM6MzBwbQorICogPGxpPk1FRElVTSBpcyBsb25nZXIsIHN1Y2ggYXMgSmFuIDEyLCAxOTUyCisgKiA8bGk+TE9ORyBpcyBsb25nZXIsIHN1Y2ggYXMgSmFudWFyeSAxMiwgMTk1MiBvciAzOjMwOjMycG0KKyAqIDxsaT5GVUxMIGlzIHByZXR0eSBjb21wbGV0ZWx5IHNwZWNpZmllZCwgc3VjaCBhcworICogVHVlc2RheSwgQXByaWwgMTIsIDE5NTIgQUQgb3IgMzozMDo0MnBtIFBTVC4KKyAqIDwvdWw+CisgKgorICogPHA+WW91IGNhbiBhbHNvIHNldCB0aGUgdGltZSB6b25lIG9uIHRoZSBmb3JtYXQgaWYgeW91IHdpc2guCisgKiBJZiB5b3Ugd2FudCBldmVuIG1vcmUgY29udHJvbCBvdmVyIHRoZSBmb3JtYXQgb3IgcGFyc2luZywKKyAqIChvciB3YW50IHRvIGdpdmUgeW91ciB1c2VycyBtb3JlIGNvbnRyb2wpLAorICogeW91IGNhbiB0cnkgY2FzdGluZyB0aGUgRGF0ZUZvcm1hdCB5b3UgZ2V0IGZyb20gdGhlIGZhY3RvcnkgbWV0aG9kcworICogdG8gYSBTaW1wbGVEYXRlRm9ybWF0LiBUaGlzIHdpbGwgd29yayBmb3IgdGhlIG1ham9yaXR5CisgKiBvZiBjb3VudHJpZXM7IGp1c3QgcmVtZW1iZXIgdG8gcHV0IGl0IGluIGEgdHJ5IGJsb2NrIGluIGNhc2UgeW91CisgKiBlbmNvdW50ZXIgYW4gdW51c3VhbCBvbmUuCisgKgorICogPHA+WW91IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUgcGFyc2UgYW5kIGZvcm1hdCBtZXRob2RzIHdpdGgKKyAqIFBhcnNlUG9zaXRpb24gYW5kIEZpZWxkUG9zaXRpb24gdG8KKyAqIGFsbG93IHlvdSB0bworICogPHVsPjxsaT5wcm9ncmVzc2l2ZWx5IHBhcnNlIHRocm91Z2ggcGllY2VzIG9mIGEgc3RyaW5nLgorICogPGxpPmFsaWduIGFueSBwYXJ0aWN1bGFyIGZpZWxkLCBvciBmaW5kIG91dCB3aGVyZSBpdCBpcyBmb3Igc2VsZWN0aW9uCisgKiBvbiB0aGUgc2NyZWVuLgorICogPC91bD4KKyAqCisgKiA8aDQ+U3luY2hyb25pemF0aW9uPC9oND4KKyAqCisgKiBEYXRlIGZvcm1hdHMgYXJlIG5vdCBzeW5jaHJvbml6ZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBzZXBhcmF0ZSAKKyAqIGZvcm1hdCBpbnN0YW5jZXMgZm9yIGVhY2ggdGhyZWFkLiBJZiBtdWx0aXBsZSB0aHJlYWRzIGFjY2VzcyBhIGZvcm1hdCAKKyAqIGNvbmN1cnJlbnRseSwgaXQgbXVzdCBiZSBzeW5jaHJvbml6ZWQgZXh0ZXJuYWxseS4gCisgKgorICogQHNlZSAgICAgICAgICBGb3JtYXQKKyAqIEBzZWUgICAgICAgICAgTnVtYmVyRm9ybWF0CisgKiBAc2VlICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQKKyAqIEBzZWUgICAgICAgICAgY29tLmlibS5pY3UudXRpbC5DYWxlbmRhcgorICogQHNlZSAgICAgICAgICBjb20uaWJtLmljdS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyCisgKiBAc2VlICAgICAgICAgIGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmUKKyAqIEBhdXRob3IgICAgICAgTWFyayBEYXZpcywgQ2hlbi1MaWVoIEh1YW5nLCBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEYXRlRm9ybWF0IGV4dGVuZHMgRm9ybWF0IHsKKworICAgIC8qKgorICAgICAqIFRoZSBjYWxlbmRhciB0aGF0IDxjb2RlPkRhdGVGb3JtYXQ8L2NvZGU+IHVzZXMgdG8gcHJvZHVjZSB0aGUgdGltZSBmaWVsZAorICAgICAqIHZhbHVlcyBuZWVkZWQgdG8gaW1wbGVtZW50IGRhdGUgYW5kIHRpbWUgZm9ybWF0dGluZy4gIFN1YmNsYXNzZXMgc2hvdWxkCisgICAgICogaW5pdGlhbGl6ZSB0aGlzIHRvIGEgY2FsZW5kYXIgYXBwcm9wcmlhdGUgZm9yIHRoZSBsb2NhbGUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogdGhpcyA8Y29kZT5EYXRlRm9ybWF0PC9jb2RlPi4KKyAgICAgKiBAc2VyaWFsCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIENhbGVuZGFyIGNhbGVuZGFyOworCisgICAgLyoqCisgICAgICogVGhlIG51bWJlciBmb3JtYXR0ZXIgdGhhdCA8Y29kZT5EYXRlRm9ybWF0PC9jb2RlPiB1c2VzIHRvIGZvcm1hdCBudW1iZXJzCisgICAgICogaW4gZGF0ZXMgYW5kIHRpbWVzLiAgU3ViY2xhc3NlcyBzaG91bGQgaW5pdGlhbGl6ZSB0aGlzIHRvIGEgbnVtYmVyIGZvcm1hdAorICAgICAqIGFwcHJvcHJpYXRlIGZvciB0aGUgbG9jYWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPkRhdGVGb3JtYXQ8L2NvZGU+LgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgTnVtYmVyRm9ybWF0IG51bWJlckZvcm1hdDsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgRVJBIGZpZWxkIGFsaWdubWVudC4KKyAgICAgKiBVc2VkIGluIEZpZWxkUG9zaXRpb24gb2YgZGF0ZS90aW1lIGZvcm1hdHRpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRVJBX0ZJRUxEID0gMDsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgWUVBUiBmaWVsZCBhbGlnbm1lbnQuCisgICAgICogVXNlZCBpbiBGaWVsZFBvc2l0aW9uIG9mIGRhdGUvdGltZSBmb3JtYXR0aW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFlFQVJfRklFTEQgPSAxOworCisgICAgLyoqCisgICAgICogVXNlZnVsIGNvbnN0YW50IGZvciBNT05USCBmaWVsZCBhbGlnbm1lbnQuCisgICAgICogVXNlZCBpbiBGaWVsZFBvc2l0aW9uIG9mIGRhdGUvdGltZSBmb3JtYXR0aW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1PTlRIX0ZJRUxEID0gMjsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgREFURSBmaWVsZCBhbGlnbm1lbnQuCisgICAgICogVXNlZCBpbiBGaWVsZFBvc2l0aW9uIG9mIGRhdGUvdGltZSBmb3JtYXR0aW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERBVEVfRklFTEQgPSAzOworCisgICAgLyoqCisgICAgICogVXNlZnVsIGNvbnN0YW50IGZvciBvbmUtYmFzZWQgSE9VUl9PRl9EQVkgZmllbGQgYWxpZ25tZW50LgorICAgICAqIFVzZWQgaW4gRmllbGRQb3NpdGlvbiBvZiBkYXRlL3RpbWUgZm9ybWF0dGluZy4KKyAgICAgKiBIT1VSX09GX0RBWTFfRklFTEQgaXMgdXNlZCBmb3IgdGhlIG9uZS1iYXNlZCAyNC1ob3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAyMzo1OSArIDAxOjAwIHJlc3VsdHMgaW4gMjQ6NTkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSE9VUl9PRl9EQVkxX0ZJRUxEID0gNDsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgemVyby1iYXNlZCBIT1VSX09GX0RBWSBmaWVsZCBhbGlnbm1lbnQuCisgICAgICogVXNlZCBpbiBGaWVsZFBvc2l0aW9uIG9mIGRhdGUvdGltZSBmb3JtYXR0aW5nLgorICAgICAqIEhPVVJfT0ZfREFZMF9GSUVMRCBpcyB1c2VkIGZvciB0aGUgemVyby1iYXNlZCAyNC1ob3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAyMzo1OSArIDAxOjAwIHJlc3VsdHMgaW4gMDA6NTkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSE9VUl9PRl9EQVkwX0ZJRUxEID0gNTsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgTUlOVVRFIGZpZWxkIGFsaWdubWVudC4KKyAgICAgKiBVc2VkIGluIEZpZWxkUG9zaXRpb24gb2YgZGF0ZS90aW1lIGZvcm1hdHRpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTUlOVVRFX0ZJRUxEID0gNjsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgU0VDT05EIGZpZWxkIGFsaWdubWVudC4KKyAgICAgKiBVc2VkIGluIEZpZWxkUG9zaXRpb24gb2YgZGF0ZS90aW1lIGZvcm1hdHRpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU0VDT05EX0ZJRUxEID0gNzsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgTUlMTElTRUNPTkQgZmllbGQgYWxpZ25tZW50LgorICAgICAqIFVzZWQgaW4gRmllbGRQb3NpdGlvbiBvZiBkYXRlL3RpbWUgZm9ybWF0dGluZy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNSUxMSVNFQ09ORF9GSUVMRCA9IDg7CisKKyAgICAvKioKKyAgICAgKiBVc2VmdWwgY29uc3RhbnQgZm9yIERBWV9PRl9XRUVLIGZpZWxkIGFsaWdubWVudC4KKyAgICAgKiBVc2VkIGluIEZpZWxkUG9zaXRpb24gb2YgZGF0ZS90aW1lIGZvcm1hdHRpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgREFZX09GX1dFRUtfRklFTEQgPSA5OworCisgICAgLyoqCisgICAgICogVXNlZnVsIGNvbnN0YW50IGZvciBEQVlfT0ZfWUVBUiBmaWVsZCBhbGlnbm1lbnQuCisgICAgICogVXNlZCBpbiBGaWVsZFBvc2l0aW9uIG9mIGRhdGUvdGltZSBmb3JtYXR0aW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERBWV9PRl9ZRUFSX0ZJRUxEID0gMTA7CisKKyAgICAvKioKKyAgICAgKiBVc2VmdWwgY29uc3RhbnQgZm9yIERBWV9PRl9XRUVLX0lOX01PTlRIIGZpZWxkIGFsaWdubWVudC4KKyAgICAgKiBVc2VkIGluIEZpZWxkUG9zaXRpb24gb2YgZGF0ZS90aW1lIGZvcm1hdHRpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgREFZX09GX1dFRUtfSU5fTU9OVEhfRklFTEQgPSAxMTsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgV0VFS19PRl9ZRUFSIGZpZWxkIGFsaWdubWVudC4KKyAgICAgKiBVc2VkIGluIEZpZWxkUG9zaXRpb24gb2YgZGF0ZS90aW1lIGZvcm1hdHRpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV0VFS19PRl9ZRUFSX0ZJRUxEID0gMTI7CisKKyAgICAvKioKKyAgICAgKiBVc2VmdWwgY29uc3RhbnQgZm9yIFdFRUtfT0ZfTU9OVEggZmllbGQgYWxpZ25tZW50LgorICAgICAqIFVzZWQgaW4gRmllbGRQb3NpdGlvbiBvZiBkYXRlL3RpbWUgZm9ybWF0dGluZy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXRUVLX09GX01PTlRIX0ZJRUxEID0gMTM7CisKKyAgICAvKioKKyAgICAgKiBVc2VmdWwgY29uc3RhbnQgZm9yIEFNX1BNIGZpZWxkIGFsaWdubWVudC4KKyAgICAgKiBVc2VkIGluIEZpZWxkUG9zaXRpb24gb2YgZGF0ZS90aW1lIGZvcm1hdHRpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQU1fUE1fRklFTEQgPSAxNDsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3Igb25lLWJhc2VkIEhPVVIgZmllbGQgYWxpZ25tZW50LgorICAgICAqIFVzZWQgaW4gRmllbGRQb3NpdGlvbiBvZiBkYXRlL3RpbWUgZm9ybWF0dGluZy4KKyAgICAgKiBIT1VSMV9GSUVMRCBpcyB1c2VkIGZvciB0aGUgb25lLWJhc2VkIDEyLWhvdXIgY2xvY2suCisgICAgICogRm9yIGV4YW1wbGUsIDExOjMwIFBNICsgMSBob3VyIHJlc3VsdHMgaW4gMTI6MzAgQU0uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSE9VUjFfRklFTEQgPSAxNTsKKworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3IgemVyby1iYXNlZCBIT1VSIGZpZWxkIGFsaWdubWVudC4KKyAgICAgKiBVc2VkIGluIEZpZWxkUG9zaXRpb24gb2YgZGF0ZS90aW1lIGZvcm1hdHRpbmcuCisgICAgICogSE9VUjBfRklFTEQgaXMgdXNlZCBmb3IgdGhlIHplcm8tYmFzZWQgMTItaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMTE6MzAgUE0gKyAxIGhvdXIgcmVzdWx0cyBpbiAwMDozMCBBTS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBIT1VSMF9GSUVMRCA9IDE2OworCisgICAgLyoqCisgICAgICogVXNlZnVsIGNvbnN0YW50IGZvciBUSU1FWk9ORSBmaWVsZCBhbGlnbm1lbnQuCisgICAgICogVXNlZCBpbiBGaWVsZFBvc2l0aW9uIG9mIGRhdGUvdGltZSBmb3JtYXR0aW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRJTUVaT05FX0ZJRUxEID0gMTc7CisKKyAgICAvLyBQcm9jbGFpbSBzZXJpYWwgY29tcGF0aWJpbGl0eSB3aXRoIDEuMSBGQ1MKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA3MjE4MzIyMzA2NjQ5OTUzNzg4TDsKKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBGb3JtYXQuCisgICAgICogRm9ybWF0cyBhIHRpbWUgb2JqZWN0IGludG8gYSB0aW1lIHN0cmluZy4gRXhhbXBsZXMgb2YgdGltZSBvYmplY3RzCisgICAgICogYXJlIGEgdGltZSB2YWx1ZSBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzIGFuZCBhIERhdGUgb2JqZWN0LgorICAgICAqIEBwYXJhbSBvYmogbXVzdCBiZSBhIE51bWJlciBvciBhIERhdGUgb3IgYSBDYWxlbmRhci4KKyAgICAgKiBAcGFyYW0gdG9BcHBlbmRUbyB0aGUgc3RyaW5nIGJ1ZmZlciBmb3IgdGhlIHJldHVybmluZyB0aW1lIHN0cmluZy4KKyAgICAgKiBAcmV0dXJuIHRoZSBmb3JtYXR0ZWQgdGltZSBzdHJpbmcuCisgICAgICogQHBhcmFtIGZpZWxkUG9zaXRpb24ga2VlcHMgdHJhY2sgb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaWVsZAorICAgICAqIHdpdGhpbiB0aGUgcmV0dXJuZWQgc3RyaW5nLgorICAgICAqIE9uIGlucHV0OiBhbiBhbGlnbm1lbnQgZmllbGQsCisgICAgICogaWYgZGVzaXJlZC4gT24gb3V0cHV0OiB0aGUgb2Zmc2V0cyBvZiB0aGUgYWxpZ25tZW50IGZpZWxkLiBGb3IKKyAgICAgKiBleGFtcGxlLCBnaXZlbiBhIHRpbWUgdGV4dCAiMTk5Ni4wNy4xMCBBRCBhdCAxNTowODo1NiBQRFQiLAorICAgICAqIGlmIHRoZSBnaXZlbiBmaWVsZFBvc2l0aW9uIGlzIERhdGVGb3JtYXQuWUVBUl9GSUVMRCwgdGhlCisgICAgICogYmVnaW4gaW5kZXggYW5kIGVuZCBpbmRleCBvZiBmaWVsZFBvc2l0aW9uIHdpbGwgYmUgc2V0IHRvCisgICAgICogMCBhbmQgNCwgcmVzcGVjdGl2ZWx5LgorICAgICAqIE5vdGljZSB0aGF0IGlmIHRoZSBzYW1lIHRpbWUgZmllbGQgYXBwZWFycworICAgICAqIG1vcmUgdGhhbiBvbmNlIGluIGEgcGF0dGVybiwgdGhlIGZpZWxkUG9zaXRpb24gd2lsbCBiZSBzZXQgZm9yIHRoZSBmaXJzdAorICAgICAqIG9jY3VyZW5jZSBvZiB0aGF0IHRpbWUgZmllbGQuIEZvciBpbnN0YW5jZSwgZm9ybWF0dGluZyBhIERhdGUgdG8KKyAgICAgKiB0aGUgdGltZSBzdHJpbmcgIjEgUE0gUERUIChQYWNpZmljIERheWxpZ2h0IFRpbWUpIiB1c2luZyB0aGUgcGF0dGVybgorICAgICAqICJoIGEgeiAoenp6eikiIGFuZCB0aGUgYWxpZ25tZW50IGZpZWxkIERhdGVGb3JtYXQuVElNRVpPTkVfRklFTEQsCisgICAgICogdGhlIGJlZ2luIGluZGV4IGFuZCBlbmQgaW5kZXggb2YgZmllbGRQb3NpdGlvbiB3aWxsIGJlIHNldCB0bworICAgICAqIDUgYW5kIDgsIHJlc3BlY3RpdmVseSwgZm9yIHRoZSBmaXJzdCBvY2N1cmVuY2Ugb2YgdGhlIHRpbWV6b25lCisgICAgICogcGF0dGVybiBjaGFyYWN0ZXIgJ3onLgorICAgICAqIEBzZWUgamF2YS50ZXh0LkZvcm1hdAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmdCdWZmZXIgZm9ybWF0KE9iamVjdCBvYmosIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gZmllbGRQb3NpdGlvbikKKyAgICB7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBDYWxlbmRhcikKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXQoIChDYWxlbmRhcilvYmosIHRvQXBwZW5kVG8sIGZpZWxkUG9zaXRpb24gKTsKKyAgICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXQoIChEYXRlKW9iaiwgdG9BcHBlbmRUbywgZmllbGRQb3NpdGlvbiApOworICAgICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gZm9ybWF0KCBuZXcgRGF0ZSgoKE51bWJlcilvYmopLmxvbmdWYWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9BcHBlbmRUbywgZmllbGRQb3NpdGlvbiApOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IGZvcm1hdCBnaXZlbiBPYmplY3QgYXMgYSBEYXRlIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogRm9ybWF0cyBhIGRhdGUgaW50byBhIGRhdGUvdGltZSBzdHJpbmcuCisgICAgICogQHBhcmFtIGNhbCBhIENhbGVuZGFyIHNldCB0byB0aGUgZGF0ZSBhbmQgdGltZSB0byBiZSBmb3JtYXR0ZWQKKyAgICAgKiBpbnRvIGEgZGF0ZS90aW1lIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gdG9BcHBlbmRUbyB0aGUgc3RyaW5nIGJ1ZmZlciBmb3IgdGhlIHJldHVybmluZyBkYXRlL3RpbWUgc3RyaW5nLgorICAgICAqIEBwYXJhbSBmaWVsZFBvc2l0aW9uIGtlZXBzIHRyYWNrIG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmllbGQKKyAgICAgKiB3aXRoaW4gdGhlIHJldHVybmVkIHN0cmluZy4KKyAgICAgKiBPbiBpbnB1dDogYW4gYWxpZ25tZW50IGZpZWxkLAorICAgICAqIGlmIGRlc2lyZWQuIE9uIG91dHB1dDogdGhlIG9mZnNldHMgb2YgdGhlIGFsaWdubWVudCBmaWVsZC4gRm9yCisgICAgICogZXhhbXBsZSwgZ2l2ZW4gYSB0aW1lIHRleHQgIjE5OTYuMDcuMTAgQUQgYXQgMTU6MDg6NTYgUERUIiwKKyAgICAgKiBpZiB0aGUgZ2l2ZW4gZmllbGRQb3NpdGlvbiBpcyBEYXRlRm9ybWF0LllFQVJfRklFTEQsIHRoZQorICAgICAqIGJlZ2luIGluZGV4IGFuZCBlbmQgaW5kZXggb2YgZmllbGRQb3NpdGlvbiB3aWxsIGJlIHNldCB0bworICAgICAqIDAgYW5kIDQsIHJlc3BlY3RpdmVseS4KKyAgICAgKiBOb3RpY2UgdGhhdCBpZiB0aGUgc2FtZSB0aW1lIGZpZWxkIGFwcGVhcnMKKyAgICAgKiBtb3JlIHRoYW4gb25jZSBpbiBhIHBhdHRlcm4sIHRoZSBmaWVsZFBvc2l0aW9uIHdpbGwgYmUgc2V0IGZvciB0aGUgZmlyc3QKKyAgICAgKiBvY2N1cmVuY2Ugb2YgdGhhdCB0aW1lIGZpZWxkLiBGb3IgaW5zdGFuY2UsIGZvcm1hdHRpbmcgYSBEYXRlIHRvCisgICAgICogdGhlIHRpbWUgc3RyaW5nICIxIFBNIFBEVCAoUGFjaWZpYyBEYXlsaWdodCBUaW1lKSIgdXNpbmcgdGhlIHBhdHRlcm4KKyAgICAgKiAiaCBhIHogKHp6enopIiBhbmQgdGhlIGFsaWdubWVudCBmaWVsZCBEYXRlRm9ybWF0LlRJTUVaT05FX0ZJRUxELAorICAgICAqIHRoZSBiZWdpbiBpbmRleCBhbmQgZW5kIGluZGV4IG9mIGZpZWxkUG9zaXRpb24gd2lsbCBiZSBzZXQgdG8KKyAgICAgKiA1IGFuZCA4LCByZXNwZWN0aXZlbHksIGZvciB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSB0aW1lem9uZQorICAgICAqIHBhdHRlcm4gY2hhcmFjdGVyICd6Jy4KKyAgICAgKiBAcmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZS90aW1lIHN0cmluZy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nQnVmZmVyIGZvcm1hdChDYWxlbmRhciBjYWwsIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gZmllbGRQb3NpdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXRzIGEgRGF0ZSBpbnRvIGEgZGF0ZS90aW1lIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gZGF0ZSBhIERhdGUgdG8gYmUgZm9ybWF0dGVkIGludG8gYSBkYXRlL3RpbWUgc3RyaW5nLgorICAgICAqIEBwYXJhbSB0b0FwcGVuZFRvIHRoZSBzdHJpbmcgYnVmZmVyIGZvciB0aGUgcmV0dXJuaW5nIGRhdGUvdGltZSBzdHJpbmcuCisgICAgICogQHBhcmFtIGZpZWxkUG9zaXRpb24ga2VlcHMgdHJhY2sgb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaWVsZAorICAgICAqIHdpdGhpbiB0aGUgcmV0dXJuZWQgc3RyaW5nLgorICAgICAqIE9uIGlucHV0OiBhbiBhbGlnbm1lbnQgZmllbGQsCisgICAgICogaWYgZGVzaXJlZC4gT24gb3V0cHV0OiB0aGUgb2Zmc2V0cyBvZiB0aGUgYWxpZ25tZW50IGZpZWxkLiBGb3IKKyAgICAgKiBleGFtcGxlLCBnaXZlbiBhIHRpbWUgdGV4dCAiMTk5Ni4wNy4xMCBBRCBhdCAxNTowODo1NiBQRFQiLAorICAgICAqIGlmIHRoZSBnaXZlbiBmaWVsZFBvc2l0aW9uIGlzIERhdGVGb3JtYXQuWUVBUl9GSUVMRCwgdGhlCisgICAgICogYmVnaW4gaW5kZXggYW5kIGVuZCBpbmRleCBvZiBmaWVsZFBvc2l0aW9uIHdpbGwgYmUgc2V0IHRvCisgICAgICogMCBhbmQgNCwgcmVzcGVjdGl2ZWx5LgorICAgICAqIE5vdGljZSB0aGF0IGlmIHRoZSBzYW1lIHRpbWUgZmllbGQgYXBwZWFycworICAgICAqIG1vcmUgdGhhbiBvbmNlIGluIGEgcGF0dGVybiwgdGhlIGZpZWxkUG9zaXRpb24gd2lsbCBiZSBzZXQgZm9yIHRoZSBmaXJzdAorICAgICAqIG9jY3VyZW5jZSBvZiB0aGF0IHRpbWUgZmllbGQuIEZvciBpbnN0YW5jZSwgZm9ybWF0dGluZyBhIERhdGUgdG8KKyAgICAgKiB0aGUgdGltZSBzdHJpbmcgIjEgUE0gUERUIChQYWNpZmljIERheWxpZ2h0IFRpbWUpIiB1c2luZyB0aGUgcGF0dGVybgorICAgICAqICJoIGEgeiAoenp6eikiIGFuZCB0aGUgYWxpZ25tZW50IGZpZWxkIERhdGVGb3JtYXQuVElNRVpPTkVfRklFTEQsCisgICAgICogdGhlIGJlZ2luIGluZGV4IGFuZCBlbmQgaW5kZXggb2YgZmllbGRQb3NpdGlvbiB3aWxsIGJlIHNldCB0bworICAgICAqIDUgYW5kIDgsIHJlc3BlY3RpdmVseSwgZm9yIHRoZSBmaXJzdCBvY2N1cmVuY2Ugb2YgdGhlIHRpbWV6b25lCisgICAgICogcGF0dGVybiBjaGFyYWN0ZXIgJ3onLgorICAgICAqIEByZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlL3RpbWUgc3RyaW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmdCdWZmZXIgZm9ybWF0KERhdGUgZGF0ZSwgU3RyaW5nQnVmZmVyIHRvQXBwZW5kVG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBmaWVsZFBvc2l0aW9uKSB7CisgICAgICAgIC8vIFVzZSBvdXIgQ2FsZW5kYXIgb2JqZWN0CisgICAgICAgIGNhbGVuZGFyLnNldFRpbWUoZGF0ZSk7CisgICAgICAgIHJldHVybiBmb3JtYXQoY2FsZW5kYXIsIHRvQXBwZW5kVG8sIGZpZWxkUG9zaXRpb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvcm1hdHMgYSBEYXRlIGludG8gYSBkYXRlL3RpbWUgc3RyaW5nLgorICAgICAqIEBwYXJhbSBkYXRlIHRoZSB0aW1lIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBpbnRvIGEgdGltZSBzdHJpbmcuCisgICAgICogQHJldHVybiB0aGUgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZm9ybWF0KERhdGUgZGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmb3JtYXQoZGF0ZSwgbmV3IFN0cmluZ0J1ZmZlcigpLG5ldyBGaWVsZFBvc2l0aW9uKDApKS50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBhcnNlIGEgZGF0ZS90aW1lIHN0cmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0ZXh0ICBUaGUgZGF0ZS90aW1lIHN0cmluZyB0byBiZSBwYXJzZWQKKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgICBBIERhdGUsIG9yIG51bGwgaWYgdGhlIGlucHV0IGNvdWxkIG5vdCBiZSBwYXJzZWQKKyAgICAgKgorICAgICAqIEBleGNlcHRpb24gIFBhcnNlRXhjZXB0aW9uICBJZiB0aGUgZ2l2ZW4gc3RyaW5nIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBkYXRlLgorICAgICAqCisgICAgICogQHNlZSAjcGFyc2UoU3RyaW5nLCBQYXJzZVBvc2l0aW9uKQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBEYXRlIHBhcnNlKFN0cmluZyB0ZXh0KSB0aHJvd3MgUGFyc2VFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFBhcnNlUG9zaXRpb24gcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIERhdGUgcmVzdWx0ID0gcGFyc2UodGV4dCwgcG9zKTsKKyAgICAgICAgaWYgKHBvcy5nZXRJbmRleCgpID09IDApIC8vIElDVTRKCisgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oIlVucGFyc2VhYmxlIGRhdGU6IFwiIiArIHRleHQgKyAiXCIiICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MuZ2V0RXJyb3JJbmRleCgpKTsgLy8gSUNVNEoKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIGRhdGUvdGltZSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBwYXJzZSBwb3NpdGlvbi4KKyAgICAgKiBGb3IgZXhhbXBsZSwgYSB0aW1lIHRleHQgIjA3LzEwLzk2IDQ6NSBQTSwgUERUIiB3aWxsIGJlIHBhcnNlZAorICAgICAqIGludG8gYSBDYWxlbmRhciB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gRGF0ZSg4MzcwMzk5MjgwNDYpLiAgVGhlCisgICAgICogY2FsbGVyIHNob3VsZCBjbGVhciB0aGUgY2FsZW5kYXIgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsCisgICAgICogdW5sZXNzIGV4aXN0aW5nIGZpZWxkIGluZm9ybWF0aW9uIGlzIHRvIGJlIGtlcHQuCisgICAgICoKKyAgICAgKiA8cD4gQnkgZGVmYXVsdCwgcGFyc2luZyBpcyBsZW5pZW50OiBJZiB0aGUgaW5wdXQgaXMgbm90IGluIHRoZSBmb3JtIHVzZWQKKyAgICAgKiBieSB0aGlzIG9iamVjdCdzIGZvcm1hdCBtZXRob2QgYnV0IGNhbiBzdGlsbCBiZSBwYXJzZWQgYXMgYSBkYXRlLCB0aGVuCisgICAgICogdGhlIHBhcnNlIHN1Y2NlZWRzLiAgQ2xpZW50cyBtYXkgaW5zaXN0IG9uIHN0cmljdCBhZGhlcmVuY2UgdG8gdGhlCisgICAgICogZm9ybWF0IGJ5IGNhbGxpbmcgc2V0TGVuaWVudChmYWxzZSkuCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRMZW5pZW50KGJvb2xlYW4pCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGV4dCAgVGhlIGRhdGUvdGltZSBzdHJpbmcgdG8gYmUgcGFyc2VkCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsICAgVGhlIGNhbGVuZGFyIGludG8gd2hpY2ggcGFyc2VkIGRhdGEgd2lsbCBiZSBzdG9yZWQuCisgICAgICogICAgICAgICAgICAgIEluIGdlbmVyYWwsIHRoaXMgc2hvdWxkIGJlIGNsZWFyZWQgYmVmb3JlIGNhbGxpbmcgdGhpcworICAgICAqICAgICAgICAgICAgICBtZXRob2QuICBJZiB0aGlzIHBhcnNlIGZhaWxzLCB0aGUgY2FsZW5kYXIgbWF5IHN0aWxsCisgICAgICogICAgICAgICAgICAgIGhhdmUgYmVlbiBtb2RpZmllZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwb3MgICBPbiBpbnB1dCwgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRvIHN0YXJ0IHBhcnNpbmc7IG9uCisgICAgICogICAgICAgICAgICAgIG91dHB1dCwgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHBhcnNpbmcgdGVybWluYXRlZCwgb3IgdGhlCisgICAgICogICAgICAgICAgICAgIHN0YXJ0IHBvc2l0aW9uIGlmIHRoZSBwYXJzZSBmYWlsZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgcGFyc2UoU3RyaW5nIHRleHQsIENhbGVuZGFyIGNhbCwgUGFyc2VQb3NpdGlvbiBwb3MpOworCisgICAgLyoqCisgICAgICogUGFyc2UgYSBkYXRlL3RpbWUgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gcGFyc2UgcG9zaXRpb24uICBGb3IKKyAgICAgKiBleGFtcGxlLCBhIHRpbWUgdGV4dCAiMDcvMTAvOTYgNDo1IFBNLCBQRFQiIHdpbGwgYmUgcGFyc2VkIGludG8gYSBEYXRlCisgICAgICogdGhhdCBpcyBlcXVpdmFsZW50IHRvIERhdGUoODM3MDM5OTI4MDQ2KS4KKyAgICAgKgorICAgICAqIDxwPiBCeSBkZWZhdWx0LCBwYXJzaW5nIGlzIGxlbmllbnQ6IElmIHRoZSBpbnB1dCBpcyBub3QgaW4gdGhlIGZvcm0gdXNlZAorICAgICAqIGJ5IHRoaXMgb2JqZWN0J3MgZm9ybWF0IG1ldGhvZCBidXQgY2FuIHN0aWxsIGJlIHBhcnNlZCBhcyBhIGRhdGUsIHRoZW4KKyAgICAgKiB0aGUgcGFyc2Ugc3VjY2VlZHMuICBDbGllbnRzIG1heSBpbnNpc3Qgb24gc3RyaWN0IGFkaGVyZW5jZSB0byB0aGUKKyAgICAgKiBmb3JtYXQgYnkgY2FsbGluZyBzZXRMZW5pZW50KGZhbHNlKS4KKyAgICAgKgorICAgICAqIEBzZWUgI3NldExlbmllbnQoYm9vbGVhbikKKyAgICAgKgorICAgICAqIEBwYXJhbSB0ZXh0ICBUaGUgZGF0ZS90aW1lIHN0cmluZyB0byBiZSBwYXJzZWQKKyAgICAgKgorICAgICAqIEBwYXJhbSBwb3MgICBPbiBpbnB1dCwgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRvIHN0YXJ0IHBhcnNpbmc7IG9uCisgICAgICogICAgICAgICAgICAgIG91dHB1dCwgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHBhcnNpbmcgdGVybWluYXRlZCwgb3IgdGhlCisgICAgICogICAgICAgICAgICAgIHN0YXJ0IHBvc2l0aW9uIGlmIHRoZSBwYXJzZSBmYWlsZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgICAgQSBEYXRlLCBvciBudWxsIGlmIHRoZSBpbnB1dCBjb3VsZCBub3QgYmUgcGFyc2VkCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIERhdGUgcGFyc2UoU3RyaW5nIHRleHQsIFBhcnNlUG9zaXRpb24gcG9zKSB7CisgICAgICAgIGludCBzdGFydCA9IHBvcy5nZXRJbmRleCgpOworICAgICAgICBjYWxlbmRhci5jbGVhcigpOworICAgICAgICBwYXJzZSh0ZXh0LCBjYWxlbmRhciwgcG9zKTsKKyAgICAgICAgaWYgKHBvcy5nZXRJbmRleCgpICE9IHN0YXJ0KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBjYWxlbmRhci5nZXRUaW1lKCk7CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgb2NjdXJzIGlmIHRoZSBjYWxlbmRhciBpcyBub24tbGVuaWVudCBhbmQgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAvLyBhbiBvdXQtb2YtcmFuZ2UgZmllbGQuICBXZSBkb24ndCBrbm93IHdoaWNoIGZpZWxkIHdhcworICAgICAgICAgICAgICAgIC8vIGlsbGVnYWwgc28gd2Ugc2V0IHRoZSBlcnJvciBpbmRleCB0byB0aGUgc3RhcnQuCisgICAgICAgICAgICAgICAgcG9zLnNldEluZGV4KHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBwb3Muc2V0RXJyb3JJbmRleChzdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGFyc2UgYSBkYXRlL3RpbWUgc3RyaW5nIGludG8gYW4gT2JqZWN0LiAgVGhpcyBjb252ZW5pZW5jZSBtZXRob2Qgc2ltcGx5CisgICAgICogY2FsbHMgcGFyc2UoU3RyaW5nLCBQYXJzZVBvc2l0aW9uKS4KKyAgICAgKgorICAgICAqIEBzZWUgI3BhcnNlKFN0cmluZywgUGFyc2VQb3NpdGlvbikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IHBhcnNlT2JqZWN0IChTdHJpbmcgc291cmNlLCBQYXJzZVBvc2l0aW9uIHBvcykKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZShzb3VyY2UsIHBvcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIGZ1bGwgc3R5bGUgcGF0dGVybi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGVUxMID0gMDsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBsb25nIHN0eWxlIHBhdHRlcm4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9ORyA9IDE7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgbWVkaXVtIHN0eWxlIHBhdHRlcm4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVESVVNID0gMjsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBzaG9ydCBzdHlsZSBwYXR0ZXJuLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1JUID0gMzsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBkZWZhdWx0IHN0eWxlIHBhdHRlcm4uICBJdHMgdmFsdWUgaXMgTUVESVVNLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFQgPSBNRURJVU07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0aW1lIGZvcm1hdHRlciB3aXRoIHRoZSBkZWZhdWx0IGZvcm1hdHRpbmcgc3R5bGUKKyAgICAgKiBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEByZXR1cm4gYSB0aW1lIGZvcm1hdHRlci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIERhdGVGb3JtYXQgZ2V0VGltZUluc3RhbmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoLTEsIERFRkFVTFQsIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRpbWUgZm9ybWF0dGVyIHdpdGggdGhlIGdpdmVuIGZvcm1hdHRpbmcgc3R5bGUKKyAgICAgKiBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBwYXJhbSBzdHlsZSB0aGUgZ2l2ZW4gZm9ybWF0dGluZyBzdHlsZS4gRm9yIGV4YW1wbGUsCisgICAgICogU0hPUlQgZm9yICJoOm1tIGEiIGluIHRoZSBVUyBsb2NhbGUuCisgICAgICogQHJldHVybiBhIHRpbWUgZm9ybWF0dGVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgRGF0ZUZvcm1hdCBnZXRUaW1lSW5zdGFuY2UoaW50IHN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgtMSwgc3R5bGUsIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRpbWUgZm9ybWF0dGVyIHdpdGggdGhlIGdpdmVuIGZvcm1hdHRpbmcgc3R5bGUKKyAgICAgKiBmb3IgdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gc3R5bGUgdGhlIGdpdmVuIGZvcm1hdHRpbmcgc3R5bGUuIEZvciBleGFtcGxlLAorICAgICAqIFNIT1JUIGZvciAiaDptbSBhIiBpbiB0aGUgVVMgbG9jYWxlLgorICAgICAqIEBwYXJhbSBhTG9jYWxlIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICogQHJldHVybiBhIHRpbWUgZm9ybWF0dGVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgRGF0ZUZvcm1hdCBnZXRUaW1lSW5zdGFuY2UoaW50IHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsZSBhTG9jYWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgtMSwgc3R5bGUsIGFMb2NhbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGRhdGUgZm9ybWF0dGVyIHdpdGggdGhlIGRlZmF1bHQgZm9ybWF0dGluZyBzdHlsZQorICAgICAqIGZvciB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHJldHVybiBhIGRhdGUgZm9ybWF0dGVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgRGF0ZUZvcm1hdCBnZXREYXRlSW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChERUZBVUxULCAtMSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGF0ZSBmb3JtYXR0ZXIgd2l0aCB0aGUgZ2l2ZW4gZm9ybWF0dGluZyBzdHlsZQorICAgICAqIGZvciB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHBhcmFtIHN0eWxlIHRoZSBnaXZlbiBmb3JtYXR0aW5nIHN0eWxlLiBGb3IgZXhhbXBsZSwKKyAgICAgKiBTSE9SVCBmb3IgIk0vZC95eSIgaW4gdGhlIFVTIGxvY2FsZS4KKyAgICAgKiBAcmV0dXJuIGEgZGF0ZSBmb3JtYXR0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBEYXRlRm9ybWF0IGdldERhdGVJbnN0YW5jZShpbnQgc3R5bGUpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0KHN0eWxlLCAtMSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGF0ZSBmb3JtYXR0ZXIgd2l0aCB0aGUgZ2l2ZW4gZm9ybWF0dGluZyBzdHlsZQorICAgICAqIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqIEBwYXJhbSBzdHlsZSB0aGUgZ2l2ZW4gZm9ybWF0dGluZyBzdHlsZS4gRm9yIGV4YW1wbGUsCisgICAgICogU0hPUlQgZm9yICJNL2QveXkiIGluIHRoZSBVUyBsb2NhbGUuCisgICAgICogQHBhcmFtIGFMb2NhbGUgdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBAcmV0dXJuIGEgZGF0ZSBmb3JtYXR0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBEYXRlRm9ybWF0IGdldERhdGVJbnN0YW5jZShpbnQgc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlIGFMb2NhbGUpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0KHN0eWxlLCAtMSwgYUxvY2FsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGF0ZS90aW1lIGZvcm1hdHRlciB3aXRoIHRoZSBkZWZhdWx0IGZvcm1hdHRpbmcgc3R5bGUKKyAgICAgKiBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEByZXR1cm4gYSBkYXRlL3RpbWUgZm9ybWF0dGVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgRGF0ZUZvcm1hdCBnZXREYXRlVGltZUluc3RhbmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoREVGQVVMVCwgREVGQVVMVCwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGF0ZS90aW1lIGZvcm1hdHRlciB3aXRoIHRoZSBnaXZlbiBkYXRlIGFuZCB0aW1lCisgICAgICogZm9ybWF0dGluZyBzdHlsZXMgZm9yIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gZGF0ZVN0eWxlIHRoZSBnaXZlbiBkYXRlIGZvcm1hdHRpbmcgc3R5bGUuIEZvciBleGFtcGxlLAorICAgICAqIFNIT1JUIGZvciAiTS9kL3l5IiBpbiB0aGUgVVMgbG9jYWxlLgorICAgICAqIEBwYXJhbSB0aW1lU3R5bGUgdGhlIGdpdmVuIHRpbWUgZm9ybWF0dGluZyBzdHlsZS4gRm9yIGV4YW1wbGUsCisgICAgICogU0hPUlQgZm9yICJoOm1tIGEiIGluIHRoZSBVUyBsb2NhbGUuCisgICAgICogQHJldHVybiBhIGRhdGUvdGltZSBmb3JtYXR0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBEYXRlRm9ybWF0IGdldERhdGVUaW1lSW5zdGFuY2UoaW50IGRhdGVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZVN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChkYXRlU3R5bGUsIHRpbWVTdHlsZSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGF0ZS90aW1lIGZvcm1hdHRlciB3aXRoIHRoZSBnaXZlbiBmb3JtYXR0aW5nIHN0eWxlcworICAgICAqIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqIEBwYXJhbSBkYXRlU3R5bGUgdGhlIGdpdmVuIGRhdGUgZm9ybWF0dGluZyBzdHlsZS4KKyAgICAgKiBAcGFyYW0gdGltZVN0eWxlIHRoZSBnaXZlbiB0aW1lIGZvcm1hdHRpbmcgc3R5bGUuCisgICAgICogQHBhcmFtIGFMb2NhbGUgdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBAcmV0dXJuIGEgZGF0ZS90aW1lIGZvcm1hdHRlci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIERhdGVGb3JtYXQKKyAgICAgICAgZ2V0RGF0ZVRpbWVJbnN0YW5jZShpbnQgZGF0ZVN0eWxlLCBpbnQgdGltZVN0eWxlLCBMb2NhbGUgYUxvY2FsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoZGF0ZVN0eWxlLCB0aW1lU3R5bGUsIGFMb2NhbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIGRlZmF1bHQgZGF0ZS90aW1lIGZvcm1hdHRlciB0aGF0IHVzZXMgdGhlIFNIT1JUIHN0eWxlIGZvciBib3RoIHRoZQorICAgICAqIGRhdGUgYW5kIHRoZSB0aW1lLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgRGF0ZUZvcm1hdCBnZXRJbnN0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIGdldERhdGVUaW1lSW5zdGFuY2UoU0hPUlQsIFNIT1JUKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzZXQgb2YgbG9jYWxlcyBmb3Igd2hpY2ggRGF0ZUZvcm1hdHMgYXJlIGluc3RhbGxlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBzZXQgb2YgbG9jYWxlcyBmb3Igd2hpY2ggRGF0ZUZvcm1hdHMgYXJlIGluc3RhbGxlZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvY2FsZVtdIGdldEF2YWlsYWJsZUxvY2FsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIElDVUxvY2FsZURhdGEuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY2FsZW5kYXIgdG8gYmUgdXNlZCBieSB0aGlzIGRhdGUgZm9ybWF0LiAgSW5pdGlhbGx5LCB0aGUgZGVmYXVsdAorICAgICAqIGNhbGVuZGFyIGZvciB0aGUgc3BlY2lmaWVkIG9yIGRlZmF1bHQgbG9jYWxlIGlzIHVzZWQuCisgICAgICogQHBhcmFtIG5ld0NhbGVuZGFyIHRoZSBuZXcgQ2FsZW5kYXIgdG8gYmUgdXNlZCBieSB0aGUgZGF0ZSBmb3JtYXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDYWxlbmRhcihDYWxlbmRhciBuZXdDYWxlbmRhcikKKyAgICB7CisgICAgICAgIHRoaXMuY2FsZW5kYXIgPSBuZXdDYWxlbmRhcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjYWxlbmRhciBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXRlL3RpbWUgZm9ybWF0dGVyLgorICAgICAqIEByZXR1cm4gdGhlIGNhbGVuZGFyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGUvdGltZSBmb3JtYXR0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIENhbGVuZGFyIGdldENhbGVuZGFyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxlbmRhcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbGxvd3MgeW91IHRvIHNldCB0aGUgbnVtYmVyIGZvcm1hdHRlci4KKyAgICAgKiBAcGFyYW0gbmV3TnVtYmVyRm9ybWF0IHRoZSBnaXZlbiBuZXcgTnVtYmVyRm9ybWF0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE51bWJlckZvcm1hdChOdW1iZXJGb3JtYXQgbmV3TnVtYmVyRm9ybWF0KQorICAgIHsKKyAgICAgICAgdGhpcy5udW1iZXJGb3JtYXQgPSBuZXdOdW1iZXJGb3JtYXQ7CisgICAgICAgIC8qSW4gb3JkZXIgdG8gcGFyc2UgU3RyaW5nIGxpa2UgIjExLjEwLjIwMDEiIHRvIERhdGVUaW1lIGNvcnJlY3RseSAKKyAgICAgICAgICBpbiBMb2NhbGUoImZyIiwiQ0giKSBbUmljaGFyZC9HQ0xdCisgICAgICAgICovCisgICAgICAgIHRoaXMubnVtYmVyRm9ybWF0LnNldFBhcnNlSW50ZWdlck9ubHkodHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbnVtYmVyIGZvcm1hdHRlciB3aGljaCB0aGlzIGRhdGUvdGltZSBmb3JtYXR0ZXIgdXNlcyB0bworICAgICAqIGZvcm1hdCBhbmQgcGFyc2UgYSB0aW1lLgorICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBmb3JtYXR0ZXIgd2hpY2ggdGhpcyBkYXRlL3RpbWUgZm9ybWF0dGVyIHVzZXMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIE51bWJlckZvcm1hdCBnZXROdW1iZXJGb3JtYXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlckZvcm1hdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSB0aW1lIHpvbmUgZm9yIHRoZSBjYWxlbmRhciBvZiB0aGlzIERhdGVGb3JtYXQgb2JqZWN0LgorICAgICAqIEBwYXJhbSB6b25lIHRoZSBnaXZlbiBuZXcgdGltZSB6b25lLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRpbWVab25lKFRpbWVab25lIHpvbmUpCisgICAgeworICAgICAgICBjYWxlbmRhci5zZXRUaW1lWm9uZSh6b25lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0aW1lIHpvbmUuCisgICAgICogQHJldHVybiB0aGUgdGltZSB6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsZW5kYXIgb2YgRGF0ZUZvcm1hdC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVGltZVpvbmUgZ2V0VGltZVpvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGVuZGFyLmdldFRpbWVab25lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBkYXRlL3RpbWUgcGFyc2luZyBpcyB0byBiZSBsZW5pZW50LiAgV2l0aAorICAgICAqIGxlbmllbnQgcGFyc2luZywgdGhlIHBhcnNlciBtYXkgdXNlIGhldXJpc3RpY3MgdG8gaW50ZXJwcmV0IGlucHV0cyB0aGF0CisgICAgICogZG8gbm90IHByZWNpc2VseSBtYXRjaCB0aGlzIG9iamVjdCdzIGZvcm1hdC4gIFdpdGggc3RyaWN0IHBhcnNpbmcsCisgICAgICogaW5wdXRzIG11c3QgbWF0Y2ggdGhpcyBvYmplY3QncyBmb3JtYXQuCisgICAgICogQHBhcmFtIGxlbmllbnQgd2hlbiB0cnVlLCBwYXJzaW5nIGlzIGxlbmllbnQKKyAgICAgKiBAc2VlIGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXIjc2V0TGVuaWVudAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldExlbmllbnQoYm9vbGVhbiBsZW5pZW50KQorICAgIHsKKyAgICAgICAgY2FsZW5kYXIuc2V0TGVuaWVudChsZW5pZW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZWxsIHdoZXRoZXIgZGF0ZS90aW1lIHBhcnNpbmcgaXMgdG8gYmUgbGVuaWVudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0xlbmllbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGVuZGFyLmlzTGVuaWVudCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBoYXNoQ29kZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgIHJldHVybiBudW1iZXJGb3JtYXQuaGFzaENvZGUoKTsKKyAgICAgICAgLy8ganVzdCBlbm91Z2ggZmllbGRzIGZvciBhIHJlYXNvbmFibGUgZGlzdHJpYnV0aW9uCisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIGVxdWFscworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisgICAgICAgIGlmICh0aGlzID09IG9iaikgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBnZXRDbGFzcygpICE9IG9iai5nZXRDbGFzcygpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIERhdGVGb3JtYXQgb3RoZXIgPSAoRGF0ZUZvcm1hdCkgb2JqOworICAgICAgICByZXR1cm4gKGNhbGVuZGFyLmlzRXF1aXZhbGVudFRvKG90aGVyLmNhbGVuZGFyKSAmJgorICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdC5lcXVhbHMob3RoZXIubnVtYmVyRm9ybWF0KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIENsb25lYWJsZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKQorICAgIHsKKyAgICAgICAgRGF0ZUZvcm1hdCBvdGhlciA9IChEYXRlRm9ybWF0KSBzdXBlci5jbG9uZSgpOworICAgICAgICBvdGhlci5jYWxlbmRhciA9IChDYWxlbmRhcikgY2FsZW5kYXIuY2xvbmUoKTsKKyAgICAgICAgb3RoZXIubnVtYmVyRm9ybWF0ID0gKE51bWJlckZvcm1hdCkgbnVtYmVyRm9ybWF0LmNsb25lKCk7CisgICAgICAgIHJldHVybiBvdGhlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgRGF0ZUZvcm1hdCB3aXRoIHRoZSBnaXZlbiB0aW1lIGFuZC9vciBkYXRlIHN0eWxlIGluIHRoZSBnaXZlbgorICAgICAqIGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gZGF0ZVN0eWxlIGEgdmFsdWUgZnJvbSAwIHRvIDMgaW5kaWNhdGluZyB0aGUgdGltZSBmb3JtYXQsCisgICAgICogb3IgLTEgdG8gaW5kaWNhdGUgbm8gZGF0ZQorICAgICAqIEBwYXJhbSB0aW1lU3R5bGUgYSB2YWx1ZSBmcm9tIDAgdG8gMyBpbmRpY2F0aW5nIHRoZSB0aW1lIGZvcm1hdCwKKyAgICAgKiBvciAtMSB0byBpbmRpY2F0ZSBubyB0aW1lCisgICAgICogQHBhcmFtIGxvYyB0aGUgbG9jYWxlIGZvciB0aGUgZm9ybWF0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBnZXQoaW50IGRhdGVTdHlsZSwgaW50IHRpbWVTdHlsZSwgTG9jYWxlIGxvYykgeworICAgICAgICBpZiAodGltZVN0eWxlIDwgLTEgfHwgdGltZVN0eWxlID4gMykgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCB0aW1lIHN0eWxlICIgKyB0aW1lU3R5bGUpOworICAgICAgICB9CisgICAgICAgIGlmIChkYXRlU3R5bGUgPCAtMSB8fCBkYXRlU3R5bGUgPiAzKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGRhdGUgc3R5bGUgIiArIGRhdGVTdHlsZSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlRGF0ZUZvcm1hdCh0aW1lU3R5bGUsIGRhdGVTdHlsZSwgbG9jKTsKKyAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiTS9kL3l5IGg6bW0gYSIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IGRhdGUgZm9ybWF0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBEYXRlRm9ybWF0KCkge30KKworICAgIC8vfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIHN0YXRpYyBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIGN1c3RvbiBEYXRlRm9ybWF0cyBmb3IgZGlmZmVyZW50CisgICAgLy8gdHlwZXMgb2YgQ2FsZW5kYXJzLgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIENyZWF0ZSBhIHtAbGluayBEYXRlRm9ybWF0fSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JtYXQgZGF0ZXMgaW4KKyAgICAgKiB0aGUgY2FsZW5kYXIgc3lzdGVtIHNwZWNpZmllZCBieSA8Y29kZT5jYWw8L2NvZGU+LgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBjYWwgICBUaGUgY2FsZW5kYXIgc3lzdGVtIGZvciB3aGljaCBhIGRhdGUgZm9ybWF0IGlzIGRlc2lyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0ZVN0eWxlIFRoZSB0eXBlIG9mIGRhdGUgZm9ybWF0IGRlc2lyZWQuICBUaGlzIGNhbiBiZQorICAgICAqICAgICAgICAgICAgICB7QGxpbmsgRGF0ZUZvcm1hdCNTSE9SVH0sIHtAbGluayBEYXRlRm9ybWF0I01FRElVTX0sCisgICAgICogICAgICAgICAgICAgIGV0Yy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZSBmb3Igd2hpY2ggdGhlIGRhdGUgZm9ybWF0IGlzIGRlc2lyZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIHB1YmxpYyBEYXRlRm9ybWF0IGdldERhdGVJbnN0YW5jZShDYWxlbmRhciBjYWwsIGludCBkYXRlU3R5bGUsIExvY2FsZSBsb2NhbGUpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0RGF0ZVRpbWVJbnN0YW5jZShjYWwsIGRhdGVTdHlsZSwgLTEsIGxvY2FsZSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENyZWF0ZSBhIHtAbGluayBEYXRlRm9ybWF0fSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JtYXQgdGltZXMgaW4KKyAgICAgKiB0aGUgY2FsZW5kYXIgc3lzdGVtIHNwZWNpZmllZCBieSA8Y29kZT5jYWw8L2NvZGU+LgorICAgICAqIDxwPgorICAgICAqIDxiPk5vdGU6PC9iPiBXaGVuIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBtb3ZlZCBpbnRvIHRoZSBjb3JlIEpESywgdGhpcyBtZXRob2QKKyAgICAgKiB3aWxsIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5IGEgbmV3IG92ZXJsb2FkIG9mIHtAbGluayBEYXRlRm9ybWF0I2dldEluc3RhbmNlfS4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gY2FsICAgVGhlIGNhbGVuZGFyIHN5c3RlbSBmb3Igd2hpY2ggYSB0aW1lIGZvcm1hdCBpcyBkZXNpcmVkLgorICAgICAqCisgICAgICogQHBhcmFtIHRpbWVTdHlsZSBUaGUgdHlwZSBvZiB0aW1lIGZvcm1hdCBkZXNpcmVkLiAgVGhpcyBjYW4gYmUKKyAgICAgKiAgICAgICAgICAgICAge0BsaW5rIERhdGVGb3JtYXQjU0hPUlR9LCB7QGxpbmsgRGF0ZUZvcm1hdCNNRURJVU19LAorICAgICAqICAgICAgICAgICAgICBldGMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxlIFRoZSBsb2NhbGUgZm9yIHdoaWNoIHRoZSB0aW1lIGZvcm1hdCBpcyBkZXNpcmVkLgorICAgICAqCisgICAgICogQHNlZSBEYXRlRm9ybWF0I2dldFRpbWVJbnN0YW5jZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBwdWJsaWMgRGF0ZUZvcm1hdCBnZXRUaW1lSW5zdGFuY2UoQ2FsZW5kYXIgY2FsLCBpbnQgdGltZVN0eWxlLCBMb2NhbGUgbG9jYWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldERhdGVUaW1lSW5zdGFuY2UoY2FsLCAtMSwgdGltZVN0eWxlLCBsb2NhbGUpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSB7QGxpbmsgRGF0ZUZvcm1hdH0gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9ybWF0IGRhdGVzIGFuZCB0aW1lcyBpbgorICAgICAqIHRoZSBjYWxlbmRhciBzeXN0ZW0gc3BlY2lmaWVkIGJ5IDxjb2RlPmNhbDwvY29kZT4uCisgICAgICogPHA+CisgICAgICogPGI+Tm90ZTo8L2I+IFdoZW4gdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG1vdmVkIGludG8gdGhlIGNvcmUgSkRLLCB0aGlzIG1ldGhvZAorICAgICAqIHdpbGwgcHJvYmFibHkgYmUgcmVwbGFjZWQgYnkgYSBuZXcgb3ZlcmxvYWQgb2Yge0BsaW5rIERhdGVGb3JtYXQjZ2V0SW5zdGFuY2V9LgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBjYWwgICBUaGUgY2FsZW5kYXIgc3lzdGVtIGZvciB3aGljaCBhIGRhdGUvdGltZSBmb3JtYXQgaXMgZGVzaXJlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXRlU3R5bGUgVGhlIHR5cGUgb2YgZGF0ZSBmb3JtYXQgZGVzaXJlZC4gIFRoaXMgY2FuIGJlCisgICAgICogICAgICAgICAgICAgIHtAbGluayBEYXRlRm9ybWF0I1NIT1JUfSwge0BsaW5rIERhdGVGb3JtYXQjTUVESVVNfSwKKyAgICAgKiAgICAgICAgICAgICAgZXRjLgorICAgICAqCisgICAgICogQHBhcmFtIHRpbWVTdHlsZSBUaGUgdHlwZSBvZiB0aW1lIGZvcm1hdCBkZXNpcmVkLiAgVGhpcyBjYW4gYmUKKyAgICAgKiAgICAgICAgICAgICAge0BsaW5rIERhdGVGb3JtYXQjU0hPUlR9LCB7QGxpbmsgRGF0ZUZvcm1hdCNNRURJVU19LAorICAgICAqICAgICAgICAgICAgICBldGMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxlIFRoZSBsb2NhbGUgZm9yIHdoaWNoIHRoZSBkYXRlL3RpbWUgZm9ybWF0IGlzIGRlc2lyZWQuCisgICAgICoKKyAgICAgKiBAc2VlIERhdGVGb3JtYXQjZ2V0RGF0ZVRpbWVJbnN0YW5jZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBwdWJsaWMgRGF0ZUZvcm1hdCBnZXREYXRlVGltZUluc3RhbmNlKENhbGVuZGFyIGNhbCwgaW50IGRhdGVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZVN0eWxlLCBMb2NhbGUgbG9jYWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbC5nZXREYXRlVGltZUZvcm1hdChkYXRlU3R5bGUsIHRpbWVTdHlsZSwgbG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBvdmVybG9hZAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBwdWJsaWMgRGF0ZUZvcm1hdCBnZXRJbnN0YW5jZShDYWxlbmRhciBjYWwsIExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIGdldERhdGVUaW1lSW5zdGFuY2UoY2FsLCBTSE9SVCwgU0hPUlQsIGxvY2FsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2Ugb3ZlcmxvYWQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgcHVibGljIERhdGVGb3JtYXQgZ2V0SW5zdGFuY2UoQ2FsZW5kYXIgY2FsKSB7CisgICAgICAgIHJldHVybiBnZXRJbnN0YW5jZShjYWwsIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJsb2FkCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIHB1YmxpYyBEYXRlRm9ybWF0IGdldERhdGVJbnN0YW5jZShDYWxlbmRhciBjYWwsIGludCBkYXRlU3R5bGUpIHsKKyAgICAgICAgcmV0dXJuIGdldERhdGVJbnN0YW5jZShjYWwsIGRhdGVTdHlsZSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2Ugb3ZlcmxvYWQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgcHVibGljIERhdGVGb3JtYXQgZ2V0VGltZUluc3RhbmNlKENhbGVuZGFyIGNhbCwgaW50IHRpbWVTdHlsZSkgeworICAgICAgICByZXR1cm4gZ2V0VGltZUluc3RhbmNlKGNhbCwgdGltZVN0eWxlLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBvdmVybG9hZAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBwdWJsaWMgRGF0ZUZvcm1hdCBnZXREYXRlVGltZUluc3RhbmNlKENhbGVuZGFyIGNhbCwgaW50IGRhdGVTdHlsZSwgaW50IHRpbWVTdHlsZSkgeworICAgICAgICByZXR1cm4gZ2V0RGF0ZVRpbWVJbnN0YW5jZShjYWwsIGRhdGVTdHlsZSwgdGltZVN0eWxlLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9EYXRlRm9ybWF0U3ltYm9scy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvRGF0ZUZvcm1hdFN5bWJvbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MTkzNDI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvRGF0ZUZvcm1hdFN5bWJvbHMuamF2YQpAQCAtMCwwICsxLDczOSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvRGF0ZUZvcm1hdFN5bWJvbHMuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzEyLzA1IDAxOjIxOjM2ICQKKyAqICRSZXZpc2lvbjogMS4xNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5UaW1lWm9uZTsKKworaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworaW1wb3J0IGphdmEubGFuZy5yZWYuU29mdFJlZmVyZW5jZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKKy8qKgorICogPGNvZGU+RGF0ZUZvcm1hdFN5bWJvbHM8L2NvZGU+IGlzIGEgcHVibGljIGNsYXNzIGZvciBlbmNhcHN1bGF0aW5nCisgKiBsb2NhbGl6YWJsZSBkYXRlLXRpbWUgZm9ybWF0dGluZyBkYXRhLCBzdWNoIGFzIHRoZSBuYW1lcyBvZiB0aGUKKyAqIG1vbnRocywgdGhlIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLCBhbmQgdGhlIHRpbWUgem9uZSBkYXRhLgorICogPGNvZGU+RGF0ZUZvcm1hdDwvY29kZT4gYW5kIDxjb2RlPlNpbXBsZURhdGVGb3JtYXQ8L2NvZGU+IGJvdGggdXNlCisgKiA8Y29kZT5EYXRlRm9ybWF0U3ltYm9sczwvY29kZT4gdG8gZW5jYXBzdWxhdGUgdGhpcyBpbmZvcm1hdGlvbi4KKyAqCisgKiA8cD4KKyAqIFR5cGljYWxseSB5b3Ugc2hvdWxkbid0IHVzZSA8Y29kZT5EYXRlRm9ybWF0U3ltYm9sczwvY29kZT4gZGlyZWN0bHkuCisgKiBSYXRoZXIsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBjcmVhdGUgYSBkYXRlLXRpbWUgZm9ybWF0dGVyIHdpdGggdGhlCisgKiA8Y29kZT5EYXRlRm9ybWF0PC9jb2RlPiBjbGFzcydzIGZhY3RvcnkgbWV0aG9kczogPGNvZGU+Z2V0VGltZUluc3RhbmNlPC9jb2RlPiwKKyAqIDxjb2RlPmdldERhdGVJbnN0YW5jZTwvY29kZT4sIG9yIDxjb2RlPmdldERhdGVUaW1lSW5zdGFuY2U8L2NvZGU+LgorICogVGhlc2UgbWV0aG9kcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIDxjb2RlPkRhdGVGb3JtYXRTeW1ib2xzPC9jb2RlPiBmb3IKKyAqIHRoZSBmb3JtYXR0ZXIgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0by4gQWZ0ZXIgdGhlCisgKiBmb3JtYXR0ZXIgaXMgY3JlYXRlZCwgeW91IG1heSBtb2RpZnkgaXRzIGZvcm1hdCBwYXR0ZXJuIHVzaW5nIHRoZQorICogPGNvZGU+c2V0UGF0dGVybjwvY29kZT4gbWV0aG9kLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorICogY3JlYXRpbmcgZm9ybWF0dGVycyB1c2luZyA8Y29kZT5EYXRlRm9ybWF0PC9jb2RlPidzIGZhY3RvcnkgbWV0aG9kcywKKyAqIHNlZSB7QGxpbmsgRGF0ZUZvcm1hdH0uCisgKgorICogPHA+CisgKiBJZiB5b3UgZGVjaWRlIHRvIGNyZWF0ZSBhIGRhdGUtdGltZSBmb3JtYXR0ZXIgd2l0aCBhIHNwZWNpZmljCisgKiBmb3JtYXQgcGF0dGVybiBmb3IgYSBzcGVjaWZpYyBsb2NhbGUsIHlvdSBjYW4gZG8gc28gd2l0aDoKKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIG5ldyBTaW1wbGVEYXRlRm9ybWF0KGFQYXR0ZXJuLCBuZXcgRGF0ZUZvcm1hdFN5bWJvbHMoYUxvY2FsZSkpLgorICogPC9wcmU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKgorICogPHA+CisgKiA8Y29kZT5EYXRlRm9ybWF0U3ltYm9sczwvY29kZT4gb2JqZWN0cyBhcmUgY2xvbmFibGUuIFdoZW4geW91IG9idGFpbgorICogYSA8Y29kZT5EYXRlRm9ybWF0U3ltYm9sczwvY29kZT4gb2JqZWN0LCBmZWVsIGZyZWUgdG8gbW9kaWZ5IHRoZQorICogZGF0ZS10aW1lIGZvcm1hdHRpbmcgZGF0YS4gRm9yIGluc3RhbmNlLCB5b3UgY2FuIHJlcGxhY2UgdGhlIGxvY2FsaXplZAorICogZGF0ZS10aW1lIGZvcm1hdCBwYXR0ZXJuIGNoYXJhY3RlcnMgd2l0aCB0aGUgb25lcyB0aGF0IHlvdSBmZWVsIGVhc3kKKyAqIHRvIHJlbWVtYmVyLiBPciB5b3UgY2FuIGNoYW5nZSB0aGUgcmVwcmVzZW50YXRpdmUgY2l0aWVzCisgKiB0byB5b3VyIGZhdm9yaXRlIG9uZXMuCisgKgorICogPHA+CisgKiBOZXcgPGNvZGU+RGF0ZUZvcm1hdFN5bWJvbHM8L2NvZGU+IHN1YmNsYXNzZXMgbWF5IGJlIGFkZGVkIHRvIHN1cHBvcnQKKyAqIDxjb2RlPlNpbXBsZURhdGVGb3JtYXQ8L2NvZGU+IGZvciBkYXRlLXRpbWUgZm9ybWF0dGluZyBmb3IgYWRkaXRpb25hbCBsb2NhbGVzLgorCisgKiBAc2VlICAgICAgICAgIERhdGVGb3JtYXQKKyAqIEBzZWUgICAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdAorICogQHNlZSAgICAgICAgICBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lCisgKiBAYXV0aG9yICAgICAgIENoZW4tTGllaCBIdWFuZworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBjbGFzcyBEYXRlRm9ybWF0U3ltYm9scyBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSwgQ2xvbmVhYmxlIHsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIERhdGVGb3JtYXRTeW1ib2xzIG9iamVjdCBieSBsb2FkaW5nIGZvcm1hdCBkYXRhIGZyb20KKyAgICAgKiByZXNvdXJjZXMgZm9yIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgIGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24KKyAgICAgKiAgICAgICAgICBpZiB0aGUgcmVzb3VyY2VzIGZvciB0aGUgZGVmYXVsdCBsb2NhbGUgY2Fubm90IGJlCisgICAgICogICAgICAgICAgZm91bmQgb3IgY2Fubm90IGJlIGxvYWRlZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgRGF0ZUZvcm1hdFN5bWJvbHMoKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZURhdGEoTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgRGF0ZUZvcm1hdFN5bWJvbHMgb2JqZWN0IGJ5IGxvYWRpbmcgZm9ybWF0IGRhdGEgZnJvbQorICAgICAqIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgIGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24KKyAgICAgKiAgICAgICAgICBpZiB0aGUgcmVzb3VyY2VzIGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZSBjYW5ub3QgYmUKKyAgICAgKiAgICAgICAgICBmb3VuZCBvciBjYW5ub3QgYmUgbG9hZGVkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBEYXRlRm9ybWF0U3ltYm9scyhMb2NhbGUgbG9jYWxlKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZURhdGEobG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFcmEgc3RyaW5ncy4gRm9yIGV4YW1wbGU6ICJBRCIgYW5kICJCQyIuICBBbiBhcnJheSBvZiAyIHN0cmluZ3MsCisgICAgICogaW5kZXhlZCBieSA8Y29kZT5DYWxlbmRhci5CQzwvY29kZT4gYW5kIDxjb2RlPkNhbGVuZGFyLkFEPC9jb2RlPi4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgU3RyaW5nIGVyYXNbXSA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBNb250aCBzdHJpbmdzLiBGb3IgZXhhbXBsZTogIkphbnVhcnkiLCAiRmVicnVhcnkiLCBldGMuICBBbiBhcnJheQorICAgICAqIG9mIDEzIHN0cmluZ3MgKHNvbWUgY2FsZW5kYXJzIGhhdmUgMTMgbW9udGhzKSwgaW5kZXhlZCBieQorICAgICAqIDxjb2RlPkNhbGVuZGFyLkpBTlVBUlk8L2NvZGU+LCA8Y29kZT5DYWxlbmRhci5GRUJSVUFSWTwvY29kZT4sIGV0Yy4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgU3RyaW5nIG1vbnRoc1tdID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFNob3J0IG1vbnRoIHN0cmluZ3MuIEZvciBleGFtcGxlOiAiSmFuIiwgIkZlYiIsIGV0Yy4gIEFuIGFycmF5IG9mCisgICAgICogMTMgc3RyaW5ncyAoc29tZSBjYWxlbmRhcnMgaGF2ZSAxMyBtb250aHMpLCBpbmRleGVkIGJ5CisgICAgICogPGNvZGU+Q2FsZW5kYXIuSkFOVUFSWTwvY29kZT4sIDxjb2RlPkNhbGVuZGFyLkZFQlJVQVJZPC9jb2RlPiwgZXRjLgorCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIFN0cmluZyBzaG9ydE1vbnRoc1tdID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFdlZWtkYXkgc3RyaW5ncy4gRm9yIGV4YW1wbGU6ICJTdW5kYXkiLCAiTW9uZGF5IiwgZXRjLiAgQW4gYXJyYXkKKyAgICAgKiBvZiA4IHN0cmluZ3MsIGluZGV4ZWQgYnkgPGNvZGU+Q2FsZW5kYXIuU1VOREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5DYWxlbmRhci5NT05EQVk8L2NvZGU+LCBldGMuCisgICAgICogVGhlIGVsZW1lbnQgPGNvZGU+d2Vla2RheXNbMF08L2NvZGU+IGlzIGlnbm9yZWQuCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIFN0cmluZyB3ZWVrZGF5c1tdID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFNob3J0IHdlZWtkYXkgc3RyaW5ncy4gRm9yIGV4YW1wbGU6ICJTdW4iLCAiTW9uIiwgZXRjLiAgQW4gYXJyYXkKKyAgICAgKiBvZiA4IHN0cmluZ3MsIGluZGV4ZWQgYnkgPGNvZGU+Q2FsZW5kYXIuU1VOREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5DYWxlbmRhci5NT05EQVk8L2NvZGU+LCBldGMuCisgICAgICogVGhlIGVsZW1lbnQgPGNvZGU+c2hvcnRXZWVrZGF5c1swXTwvY29kZT4gaXMgaWdub3JlZC4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgU3RyaW5nIHNob3J0V2Vla2RheXNbXSA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBBTSBhbmQgUE0gc3RyaW5ncy4gRm9yIGV4YW1wbGU6ICJBTSIgYW5kICJQTSIuICBBbiBhcnJheSBvZgorICAgICAqIDIgc3RyaW5ncywgaW5kZXhlZCBieSA8Y29kZT5DYWxlbmRhci5BTTwvY29kZT4gYW5kCisgICAgICogPGNvZGU+Q2FsZW5kYXIuUE08L2NvZGU+LgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBTdHJpbmcgYW1wbXNbXSA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBMb2NhbGl6ZWQgbmFtZXMgb2YgdGltZSB6b25lcyBpbiB0aGlzIGxvY2FsZS4gIFRoaXMgaXMgYQorICAgICAqIHR3by1kaW1lbnNpb25hbCBhcnJheSBvZiBzdHJpbmdzIG9mIHNpemUgPGVtPm48L2VtPiBieSA8ZW0+bTwvZW0+LAorICAgICAqIHdoZXJlIDxlbT5tPC9lbT4gaXMgYXQgbGVhc3QgNS4gIEVhY2ggb2YgdGhlIDxlbT5uPC9lbT4gcm93cyBpcyBhbgorICAgICAqIGVudHJ5IGNvbnRhaW5pbmcgdGhlIGxvY2FsaXplZCBuYW1lcyBmb3IgYSBzaW5nbGUgPGNvZGU+VGltZVpvbmU8L2NvZGU+LgorICAgICAqIEVhY2ggc3VjaCByb3cgY29udGFpbnMgKHdpdGggPGNvZGU+aTwvY29kZT4gcmFuZ2luZyBmcm9tCisgICAgICogMC4uPGVtPm48L2VtPi0xKToKKyAgICAgKiA8dWw+CisgICAgICogPGxpPjxjb2RlPnpvbmVTdHJpbmdzW2ldWzBdPC9jb2RlPiAtIHRpbWUgem9uZSBJRDwvbGk+CisgICAgICogPGxpPjxjb2RlPnpvbmVTdHJpbmdzW2ldWzFdPC9jb2RlPiAtIGxvbmcgbmFtZSBvZiB6b25lIGluIHN0YW5kYXJkCisgICAgICogdGltZTwvbGk+CisgICAgICogPGxpPjxjb2RlPnpvbmVTdHJpbmdzW2ldWzJdPC9jb2RlPiAtIHNob3J0IG5hbWUgb2Ygem9uZSBpbgorICAgICAqIHN0YW5kYXJkIHRpbWU8L2xpPgorICAgICAqIDxsaT48Y29kZT56b25lU3RyaW5nc1tpXVszXTwvY29kZT4gLSBsb25nIG5hbWUgb2Ygem9uZSBpbiBkYXlsaWdodAorICAgICAqIHNhdmluZ3MgdGltZTwvbGk+CisgICAgICogPGxpPjxjb2RlPnpvbmVTdHJpbmdzW2ldWzRdPC9jb2RlPiAtIHNob3J0IG5hbWUgb2Ygem9uZSBpbiBkYXlsaWdodAorICAgICAqIHNhdmluZ3MgdGltZTwvbGk+CisgICAgICogPC91bD4KKyAgICAgKiBUaGUgem9uZSBJRCBpcyA8ZW0+bm90PC9lbT4gbG9jYWxpemVkOyBpdCBjb3JyZXNwb25kcyB0byB0aGUgSUQKKyAgICAgKiB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBzeXN0ZW0gdGltZSB6b25lIG9iamVjdC4gIEFsbCBvdGhlciBlbnRyaWVzCisgICAgICogYXJlIGxvY2FsaXplZCBuYW1lcy4gIElmIGEgem9uZSBkb2VzIG5vdCBpbXBsZW1lbnQgZGF5bGlnaHQgc2F2aW5ncworICAgICAqIHRpbWUsIHRoZSBkYXlsaWdodCBzYXZpbmdzIHRpbWUgbmFtZXMgYXJlIGlnbm9yZWQuCisgICAgICogQHNlZSBjb20uaWJtLmljdS51dGlsLlRpbWVab25lCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIFN0cmluZyB6b25lU3RyaW5nc1tdW10gPSBudWxsOworCisgICAgLyoqCisgICAgICogVW5sb2NhbGl6ZWQgZGF0ZS10aW1lIHBhdHRlcm4gY2hhcmFjdGVycy4gRm9yIGV4YW1wbGU6ICd5JywgJ2QnLCBldGMuCisgICAgICogQWxsIGxvY2FsZXMgdXNlIHRoZSBzYW1lIHRoZXNlIHVubG9jYWxpemVkIHBhdHRlcm4gY2hhcmFjdGVycy4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nICBwYXR0ZXJuQ2hhcnMgPSAiR3lNZGtIbXNTRURGd1dhaEt6IjsKKworICAgIC8qKgorICAgICAqIExvY2FsaXplZCBkYXRlLXRpbWUgcGF0dGVybiBjaGFyYWN0ZXJzLiBGb3IgZXhhbXBsZSwgYSBsb2NhbGUgbWF5CisgICAgICogd2lzaCB0byB1c2UgJ3UnIHJhdGhlciB0aGFuICd5JyB0byByZXByZXNlbnQgeWVhcnMgaW4gaXRzIGRhdGUgZm9ybWF0CisgICAgICogcGF0dGVybiBzdHJpbmdzLgorICAgICAqIFRoaXMgc3RyaW5nIG11c3QgYmUgZXhhY3RseSAxOCBjaGFyYWN0ZXJzIGxvbmcsIHdpdGggdGhlIGluZGV4IG9mCisgICAgICogdGhlIGNoYXJhY3RlcnMgZGVzY3JpYmVkIGJ5IDxjb2RlPkRhdGVGb3JtYXQuRVJBX0ZJRUxEPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5EYXRlRm9ybWF0LllFQVJfRklFTEQ8L2NvZGU+LCBldGMuICBUaHVzLCBpZiB0aGUgc3RyaW5nIHdlcmUKKyAgICAgKiAiWHouLi4iLCB0aGVuIGxvY2FsaXplZCBwYXR0ZXJucyB3b3VsZCB1c2UgJ1gnIGZvciBlcmEgYW5kICd6JyBmb3IgeWVhci4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgU3RyaW5nICBsb2NhbFBhdHRlcm5DaGFycyA9IG51bGw7CisKKyAgICAvKiB1c2Ugc2VyaWFsVmVyc2lvblVJRCBmcm9tIEpESyAxLjEuNCBmb3IgaW50ZXJvcGVyYWJpbGl0eSAqLworICAgIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNTk4Nzk3MzU0NTU0OTQyNDcwMkw7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGVyYSBzdHJpbmdzLiBGb3IgZXhhbXBsZTogIkFEIiBhbmQgIkJDIi4KKyAgICAgKiBAcmV0dXJuIHRoZSBlcmEgc3RyaW5ncy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RXJhcygpIHsKKyAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZShlcmFzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGVyYSBzdHJpbmdzLiBGb3IgZXhhbXBsZTogIkFEIiBhbmQgIkJDIi4KKyAgICAgKiBAcGFyYW0gbmV3RXJhcyB0aGUgbmV3IGVyYSBzdHJpbmdzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEVyYXMoU3RyaW5nW10gbmV3RXJhcykgeworICAgICAgICBlcmFzID0gZHVwbGljYXRlKG5ld0VyYXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgbW9udGggc3RyaW5ncy4gRm9yIGV4YW1wbGU6ICJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgZXRjLgorICAgICAqIEByZXR1cm4gdGhlIG1vbnRoIHN0cmluZ3MuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZ1tdIGdldE1vbnRocygpIHsKKyAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZShtb250aHMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgbW9udGggc3RyaW5ncy4gRm9yIGV4YW1wbGU6ICJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgZXRjLgorICAgICAqIEBwYXJhbSBuZXdNb250aHMgdGhlIG5ldyBtb250aCBzdHJpbmdzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1vbnRocyhTdHJpbmdbXSBuZXdNb250aHMpIHsKKyAgICAgICAgbW9udGhzID0gZHVwbGljYXRlKG5ld01vbnRocyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyBzaG9ydCBtb250aCBzdHJpbmdzLiBGb3IgZXhhbXBsZTogIkphbiIsICJGZWIiLCBldGMuCisgICAgICogQHJldHVybiB0aGUgc2hvcnQgbW9udGggc3RyaW5ncy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0U2hvcnRNb250aHMoKSB7CisgICAgICAgIHJldHVybiBkdXBsaWNhdGUoc2hvcnRNb250aHMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgc2hvcnQgbW9udGggc3RyaW5ncy4gRm9yIGV4YW1wbGU6ICJKYW4iLCAiRmViIiwgZXRjLgorICAgICAqIEBwYXJhbSBuZXdTaG9ydE1vbnRocyB0aGUgbmV3IHNob3J0IG1vbnRoIHN0cmluZ3MuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2hvcnRNb250aHMoU3RyaW5nW10gbmV3U2hvcnRNb250aHMpIHsKKyAgICAgICAgc2hvcnRNb250aHMgPSBkdXBsaWNhdGUobmV3U2hvcnRNb250aHMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgd2Vla2RheSBzdHJpbmdzLiBGb3IgZXhhbXBsZTogIlN1bmRheSIsICJNb25kYXkiLCBldGMuCisgICAgICogQHJldHVybiB0aGUgd2Vla2RheSBzdHJpbmdzLiBVc2UgPGNvZGU+Q2FsZW5kYXIuU1VOREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5DYWxlbmRhci5NT05EQVk8L2NvZGU+LCBldGMuIHRvIGluZGV4IHRoZSByZXN1bHQgYXJyYXkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZ1tdIGdldFdlZWtkYXlzKCkgeworICAgICAgICByZXR1cm4gZHVwbGljYXRlKHdlZWtkYXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHdlZWtkYXkgc3RyaW5ncy4gRm9yIGV4YW1wbGU6ICJTdW5kYXkiLCAiTW9uZGF5IiwgZXRjLgorICAgICAqIEBwYXJhbSBuZXdXZWVrZGF5cyB0aGUgbmV3IHdlZWtkYXkgc3RyaW5ncy4gVGhlIGFycmF5IHNob3VsZAorICAgICAqIGJlIGluZGV4ZWQgYnkgPGNvZGU+Q2FsZW5kYXIuU1VOREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5DYWxlbmRhci5NT05EQVk8L2NvZGU+LCBldGMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0V2Vla2RheXMoU3RyaW5nW10gbmV3V2Vla2RheXMpIHsKKyAgICAgICAgd2Vla2RheXMgPSBkdXBsaWNhdGUobmV3V2Vla2RheXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgc2hvcnQgd2Vla2RheSBzdHJpbmdzLiBGb3IgZXhhbXBsZTogIlN1biIsICJNb24iLCBldGMuCisgICAgICogQHJldHVybiB0aGUgc2hvcnQgd2Vla2RheSBzdHJpbmdzLiBVc2UgPGNvZGU+Q2FsZW5kYXIuU1VOREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5DYWxlbmRhci5NT05EQVk8L2NvZGU+LCBldGMuIHRvIGluZGV4IHRoZSByZXN1bHQgYXJyYXkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZ1tdIGdldFNob3J0V2Vla2RheXMoKSB7CisgICAgICAgIHJldHVybiBkdXBsaWNhdGUoc2hvcnRXZWVrZGF5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBzaG9ydCB3ZWVrZGF5IHN0cmluZ3MuIEZvciBleGFtcGxlOiAiU3VuIiwgIk1vbiIsIGV0Yy4KKyAgICAgKiBAcGFyYW0gbmV3U2hvcnRXZWVrZGF5cyB0aGUgbmV3IHNob3J0IHdlZWtkYXkgc3RyaW5ncy4gVGhlIGFycmF5IHNob3VsZAorICAgICAqIGJlIGluZGV4ZWQgYnkgPGNvZGU+Q2FsZW5kYXIuU1VOREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5DYWxlbmRhci5NT05EQVk8L2NvZGU+LCBldGMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2hvcnRXZWVrZGF5cyhTdHJpbmdbXSBuZXdTaG9ydFdlZWtkYXlzKSB7CisgICAgICAgIHNob3J0V2Vla2RheXMgPSBkdXBsaWNhdGUobmV3U2hvcnRXZWVrZGF5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyBhbXBtIHN0cmluZ3MuIEZvciBleGFtcGxlOiAiQU0iIGFuZCAiUE0iLgorICAgICAqIEByZXR1cm4gdGhlIHdlZWtkYXkgc3RyaW5ncy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0QW1QbVN0cmluZ3MoKSB7CisgICAgICAgIHJldHVybiBkdXBsaWNhdGUoYW1wbXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgYW1wbSBzdHJpbmdzLiBGb3IgZXhhbXBsZTogIkFNIiBhbmQgIlBNIi4KKyAgICAgKiBAcGFyYW0gbmV3QW1wbXMgdGhlIG5ldyBhbXBtIHN0cmluZ3MuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0QW1QbVN0cmluZ3MoU3RyaW5nW10gbmV3QW1wbXMpIHsKKyAgICAgICAgYW1wbXMgPSBkdXBsaWNhdGUobmV3QW1wbXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGltZXpvbmUgc3RyaW5ncy4KKyAgICAgKiBAcmV0dXJuIHRoZSB0aW1lem9uZSBzdHJpbmdzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdbXVtdIGdldFpvbmVTdHJpbmdzKCkgeworICAgICAgICByZXR1cm4gZHVwbGljYXRlKHpvbmVTdHJpbmdzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRpbWV6b25lIHN0cmluZ3MuCisgICAgICogQHBhcmFtIG5ld1pvbmVTdHJpbmdzIHRoZSBuZXcgdGltZXpvbmUgc3RyaW5ncy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRab25lU3RyaW5ncyhTdHJpbmdbXVtdIG5ld1pvbmVTdHJpbmdzKSB7CisgICAgICAgIHpvbmVTdHJpbmdzID0gZHVwbGljYXRlKG5ld1pvbmVTdHJpbmdzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGxvY2FsaXplZCBkYXRlLXRpbWUgcGF0dGVybiBjaGFyYWN0ZXJzLiBGb3IgZXhhbXBsZTogJ3UnLCAndCcsIGV0Yy4KKyAgICAgKiBAcmV0dXJuIHRoZSBsb2NhbGl6ZWQgZGF0ZS10aW1lIHBhdHRlcm4gY2hhcmFjdGVycy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldExvY2FsUGF0dGVybkNoYXJzKCkgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhsb2NhbFBhdHRlcm5DaGFycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBsb2NhbGl6ZWQgZGF0ZS10aW1lIHBhdHRlcm4gY2hhcmFjdGVycy4gRm9yIGV4YW1wbGU6ICd1JywgJ3QnLCBldGMuCisgICAgICogQHBhcmFtIG5ld0xvY2FsUGF0dGVybkNoYXJzIHRoZSBuZXcgbG9jYWxpemVkIGRhdGUtdGltZQorICAgICAqIHBhdHRlcm4gY2hhcmFjdGVycy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRMb2NhbFBhdHRlcm5DaGFycyhTdHJpbmcgbmV3TG9jYWxQYXR0ZXJuQ2hhcnMpIHsKKyAgICAgICAgbG9jYWxQYXR0ZXJuQ2hhcnMgPSBuZXdMb2NhbFBhdHRlcm5DaGFyczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgQ2xvbmVhYmxlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGF0ZUZvcm1hdFN5bWJvbHMgb3RoZXIgPSAoRGF0ZUZvcm1hdFN5bWJvbHMpc3VwZXIuY2xvbmUoKTsKKyAgICAgICAgICAgIGNvcHlNZW1iZXJzKHRoaXMsIG90aGVyKTsKKyAgICAgICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIGhhc2hDb2RlLgorICAgICAqIEdlbmVyYXRlcyBhIGhhc2ggY29kZSBmb3IgdGhlIERhdGVGb3JtYXRTeW1ib2xzIG9iamVjdC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICBpbnQgaGFzaGNvZGUgPSAwOworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy56b25lU3RyaW5nc1swXS5sZW5ndGg7ICsraW5kZXgpCisgICAgICAgICAgICBoYXNoY29kZSBePSB0aGlzLnpvbmVTdHJpbmdzWzBdW2luZGV4XS5oYXNoQ29kZSgpOworICAgICAgICByZXR1cm4gaGFzaGNvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgZXF1YWxzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCisgICAgeworICAgICAgICBpZiAodGhpcyA9PSBvYmopIHJldHVybiB0cnVlOworICAgICAgICBpZiAob2JqID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBEYXRlRm9ybWF0U3ltYm9scyB0aGF0ID0gKERhdGVGb3JtYXRTeW1ib2xzKSBvYmo7CisgICAgICAgIHJldHVybiAoVXRpbGl0eS5hcnJheUVxdWFscyhlcmFzLCB0aGF0LmVyYXMpCisgICAgICAgICAgICAgICAgJiYgVXRpbGl0eS5hcnJheUVxdWFscyhtb250aHMsIHRoYXQubW9udGhzKQorICAgICAgICAgICAgICAgICYmIFV0aWxpdHkuYXJyYXlFcXVhbHMoc2hvcnRNb250aHMsIHRoYXQuc2hvcnRNb250aHMpCisgICAgICAgICAgICAgICAgJiYgVXRpbGl0eS5hcnJheUVxdWFscyh3ZWVrZGF5cywgdGhhdC53ZWVrZGF5cykKKyAgICAgICAgICAgICAgICAmJiBVdGlsaXR5LmFycmF5RXF1YWxzKHNob3J0V2Vla2RheXMsIHRoYXQuc2hvcnRXZWVrZGF5cykKKyAgICAgICAgICAgICAgICAmJiBVdGlsaXR5LmFycmF5RXF1YWxzKGFtcG1zLCB0aGF0LmFtcG1zKQorICAgICAgICAgICAgICAgICYmIFV0aWxpdHkuYXJyYXlFcXVhbHMoem9uZVN0cmluZ3MsIHRoYXQuem9uZVN0cmluZ3MpCisgICAgICAgICAgICAgICAgJiYgVXRpbGl0eS5hcnJheUVxdWFscyhsb2NhbFBhdHRlcm5DaGFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQubG9jYWxQYXR0ZXJuQ2hhcnMpKTsKKyAgICB9CisKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PXByaXZhdGVzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogVXNlZnVsIGNvbnN0YW50IGZvciBkZWZpbmluZyB0aW1lem9uZSBvZmZzZXRzLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgbWlsbGlzUGVySG91ciA9IDYwKjYwKjEwMDA7CisKKworICAgIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGF0YShMb2NhbGUgZGVzaXJlZExvY2FsZSkKKyAgICB7CisgICAgICAgIFJlc291cmNlQnVuZGxlIHJiID0gSUNVTG9jYWxlRGF0YS5nZXRMb2NhbGVFbGVtZW50cyhkZXNpcmVkTG9jYWxlKTsKKworICAgICAgICAvLyBGSVhNRTogY2FjaGUgb25seSBSZXNvdXJjZUJ1bmRsZS4gSGVuY2UgZXZlcnkgdGltZSwgd2lsbCBkbworICAgICAgICAvLyBnZXRPYmplY3QoKS4gVGhpcyB3b24ndCBiZSBuZWNlc3NhcnkgaWYgdGhlIFJlc291cmNlIGl0c2VsZgorICAgICAgICAvLyBpcyBjYWNoZWQuCisgICAgICAgIGVyYXMgPSByYi5nZXRTdHJpbmdBcnJheSgiRXJhcyIpOworICAgICAgICBtb250aHMgPSByYi5nZXRTdHJpbmdBcnJheSgiTW9udGhOYW1lcyIpOworICAgICAgICBzaG9ydE1vbnRocyA9IHJiLmdldFN0cmluZ0FycmF5KCJNb250aEFiYnJldmlhdGlvbnMiKTsKKworICAgICAgICBTdHJpbmdbXSBsV2Vla2RheXMgPSByYi5nZXRTdHJpbmdBcnJheSgiRGF5TmFtZXMiKTsKKyAgICAgICAgd2Vla2RheXMgPSBuZXcgU3RyaW5nWzhdOworICAgICAgICB3ZWVrZGF5c1swXSA9ICIiOyAgLy8gMS1iYXNlZAorICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxXZWVrZGF5cywgMCwgd2Vla2RheXMsIDEsIGxXZWVrZGF5cy5sZW5ndGgpOworCisgICAgICAgIFN0cmluZ1tdIHNXZWVrZGF5cyA9IHJiLmdldFN0cmluZ0FycmF5KCJEYXlBYmJyZXZpYXRpb25zIik7CisgICAgICAgIHNob3J0V2Vla2RheXMgPSBuZXcgU3RyaW5nWzhdOworICAgICAgICBzaG9ydFdlZWtkYXlzWzBdID0gIiI7ICAvLyAxLWJhc2VkCisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc1dlZWtkYXlzLCAwLCBzaG9ydFdlZWtkYXlzLCAxLCBzV2Vla2RheXMubGVuZ3RoKTsKKworICAgICAgICBhbXBtcyA9IHJiLmdldFN0cmluZ0FycmF5KCJBbVBtTWFya2VycyIpOworCisgICAgICAgIC8vIGhhY2sgYXJvdW5kIGNsYXNzIGNhc3QgcHJvYmxlbQorICAgICAgICAvLyB6b25lU3RyaW5ncyA9IChTdHJpbmdbXVtdKXJiLmdldE9iamVjdCgiem9uZVN0cmluZ3MiKTsKKyAgICAgICAgT2JqZWN0W10gem9uZU9iamVjdCA9IChPYmplY3RbXSlyYi5nZXRPYmplY3QoInpvbmVTdHJpbmdzIik7CisgICAgICAgIHpvbmVTdHJpbmdzID0gbmV3IFN0cmluZ1t6b25lT2JqZWN0Lmxlbmd0aF1bXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB6b25lU3RyaW5ncy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgem9uZVN0cmluZ3NbaV0gPSAoU3RyaW5nW10pem9uZU9iamVjdFtpXTsKKyAgICAgICAgfQorCisgICAgICAgIGxvY2FsUGF0dGVybkNoYXJzID0gcmIuZ2V0U3RyaW5nKCJsb2NhbFBhdHRlcm5DaGFycyIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBhY2thZ2UgcHJpdmF0ZTogdXNlZCBieSBTaW1wbGVEYXRlRm9ybWF0CisgICAgICogR2V0cyB0aGUgaW5kZXggZm9yIHRoZSBnaXZlbiB0aW1lIHpvbmUgSUQgdG8gb2J0YWluIHRoZSB0aW1lem9uZQorICAgICAqIHN0cmluZ3MgZm9yIGZvcm1hdHRpbmcuIFRoZSB0aW1lIHpvbmUgSUQgaXMganVzdCBmb3IgcHJvZ3JhbW1hdGljCisgICAgICogbG9va3VwLiBOT1QgTE9DQUxJWkVEISEhCisgICAgICogQHBhcmFtIElEIHRoZSBnaXZlbiB0aW1lIHpvbmUgSUQuCisgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHRpbWUgem9uZSBJRC4gIFJldHVybnMgLTEgaWYKKyAgICAgKiB0aGUgZ2l2ZW4gdGltZSB6b25lIElEIGNhbid0IGJlIGxvY2F0ZWQgaW4gdGhlIERhdGVGb3JtYXRTeW1ib2xzIG9iamVjdC4KKyAgICAgKiBAc2VlIGNvbS5pYm0uaWN1LnV0aWwuU2ltcGxlVGltZVpvbmUKKyAgICAgKi8KKyAgICBmaW5hbCBpbnQgZ2V0Wm9uZUluZGV4KFN0cmluZyBJRCkgeworICAgICAgICBpbnQgcmVzdWx0ID0gX2dldFpvbmVJbmRleChJRCk7CisgICAgICAgIGlmIChyZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRG8gYSBzZWFyY2ggdGhyb3VnaCB0aGUgZXF1aXZhbGVuY3kgZ3JvdXAgZm9yIHRoZSBnaXZlbiBJRAorICAgICAgICBpbnQgbiA9IFRpbWVab25lLmNvdW50RXF1aXZhbGVudElEcyhJRCk7CisgICAgICAgIGlmIChuID4gMSkgeworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG47ICsraSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBlcXVpdklEID0gVGltZVpvbmUuZ2V0RXF1aXZhbGVudElEKElELCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVxdWl2SUQuZXF1YWxzKElEKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZXF1aXZSZXN1bHQgPSBfZ2V0Wm9uZUluZGV4KGVxdWl2SUQpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXF1aXZSZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVxdWl2UmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIExvb2t1cCB0aGUgZ2l2ZW4gSUQuICBEbyBOT1QgZG8gYW4gZXF1aXZhbGVuY3kgc2VhcmNoLgorICAgICAqLworICAgIHByaXZhdGUgaW50IF9nZXRab25lSW5kZXgoU3RyaW5nIElEKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXg9MDsgaW5kZXg8em9uZVN0cmluZ3MubGVuZ3RoOyBpbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChJRC5lcXVhbHNJZ25vcmVDYXNlKHpvbmVTdHJpbmdzW2luZGV4XVswXSkpIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2xvbmVzIGFuIGFycmF5IG9mIFN0cmluZ3MuCisgICAgICogQHBhcmFtIHNyY0FycmF5IHRoZSBzb3VyY2UgYXJyYXkgdG8gYmUgY2xvbmVkLgorICAgICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBzb3VyY2UgYXJyYXkuCisgICAgICogQHJldHVybiBhIGNsb25lZCBhcnJheS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIGR1cGxpY2F0ZShTdHJpbmdbXSBzcmNBcnJheSkKKyAgICB7CisgICAgICAgIHJldHVybiAoU3RyaW5nW10pc3JjQXJyYXkuY2xvbmUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdW10gZHVwbGljYXRlKFN0cmluZ1tdW10gc3JjQXJyYXkpCisgICAgeworICAgICAgICBTdHJpbmdbXVtdIGFDb3B5ID0gbmV3IFN0cmluZ1tzcmNBcnJheS5sZW5ndGhdW107CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3JjQXJyYXkubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhQ29weVtpXSA9IGR1cGxpY2F0ZShzcmNBcnJheVtpXSk7CisgICAgICAgIHJldHVybiBhQ29weTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgYWxsIHRoZSBkYXRhIG1lbWJlcnMgZnJvbSB0aGUgc291cmNlIERhdGVGb3JtYXRTeW1ib2xzIHRvCisgICAgICogdGhlIHRhcmdldCBEYXRlRm9ybWF0U3ltYm9scy4gVGhpcyBpcyBvbmx5IGZvciBzdWJjbGFzc2VzLgorICAgICAqIEBwYXJhbSBzcmMgdGhlIHNvdXJjZSBEYXRlRm9ybWF0U3ltYm9scy4KKyAgICAgKiBAcGFyYW0gZHN0IHRoZSB0YXJnZXQgRGF0ZUZvcm1hdFN5bWJvbHMuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNvcHlNZW1iZXJzKERhdGVGb3JtYXRTeW1ib2xzIHNyYywgRGF0ZUZvcm1hdFN5bWJvbHMgZHN0KQorICAgIHsKKyAgICAgICAgZHN0LmVyYXMgPSBkdXBsaWNhdGUoc3JjLmVyYXMpOworICAgICAgICBkc3QubW9udGhzID0gZHVwbGljYXRlKHNyYy5tb250aHMpOworICAgICAgICBkc3Quc2hvcnRNb250aHMgPSBkdXBsaWNhdGUoc3JjLnNob3J0TW9udGhzKTsKKyAgICAgICAgZHN0LndlZWtkYXlzID0gZHVwbGljYXRlKHNyYy53ZWVrZGF5cyk7CisgICAgICAgIGRzdC5zaG9ydFdlZWtkYXlzID0gZHVwbGljYXRlKHNyYy5zaG9ydFdlZWtkYXlzKTsKKyAgICAgICAgZHN0LmFtcG1zID0gZHVwbGljYXRlKHNyYy5hbXBtcyk7CisgICAgICAgIGRzdC56b25lU3RyaW5ncyA9IGR1cGxpY2F0ZShzcmMuem9uZVN0cmluZ3MpOworICAgICAgICBkc3QubG9jYWxQYXR0ZXJuQ2hhcnMgPSBuZXcgU3RyaW5nIChzcmMubG9jYWxQYXR0ZXJuQ2hhcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0aGUgdHdvIGFycmF5cyBvZiBTdHJpbmcuCisgICAgICogQHBhcmFtIGN1cnJlbnQgdGhpcyBTdHJpbmcgYXJyYXkuCisgICAgICogQHBhcmFtIG90aGVyIHRoYXQgU3RyaW5nIGFycmF5LgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBlcXVhbHMoU3RyaW5nW10gY3VycmVudCwgU3RyaW5nW10gb3RoZXIpCisgICAgeworICAgICAgICBpbnQgY291bnQgPSBjdXJyZW50Lmxlbmd0aDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBpZiAoIWN1cnJlbnRbaV0uZXF1YWxzKG90aGVyW2ldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisgICAgLyoqCisgICAgICogR2V0IHRoZSB7QGxpbmsgRGF0ZUZvcm1hdFN5bWJvbHN9IG9iamVjdCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGZvcm1hdCBhCisgICAgICogY2FsZW5kYXIgc3lzdGVtJ3MgZGF0ZXMgaW4gdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiA8cD4KKyAgICAgKiA8Yj5TdWJjbGFzc2luZzo8L2I+PGJyPgorICAgICAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgQ2FsZW5kYXIgc3ViY2xhc3MsIHlvdSBtdXN0IGNyZWF0ZSB0aGUKKyAgICAgKiB7QGxpbmsgUmVzb3VyY2VCdW5kbGUgUmVzb3VyY2VCdW5kbGV9CisgICAgICogY29udGFpbmluZyBpdHMge0BsaW5rIERhdGVGb3JtYXRTeW1ib2xzIERhdGVGb3JtYXRTeW1ib2xzfSBpbiBhIHNwZWNpZmljIHBsYWNlLgorICAgICAqIFRoZSByZXNvdXJjZSBidW5kbGUgbmFtZSBpcyBiYXNlZCBvbiB0aGUgY2FsZW5kYXIncyBmdWxseS1zcGVjaWZpZWQKKyAgICAgKiBjbGFzcyBuYW1lLCB3aXRoICIucmVzb3VyY2VzIiBpbnNlcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgKiAoanVzdCBiZWZvcmUgdGhlIGNsYXNzIG5hbWUpIGFuZCAiU3ltYm9scyIgYXBwZW5kZWQgdG8gdGhlIGVuZC4KKyAgICAgKiBGb3IgZXhhbXBsZSwgdGhlIGJ1bmRsZSBjb3JyZXNwb25kaW5nIHRvICJjb20uaWJtLmljdS51dGlsLkhlYnJld0NhbGVuZGFyIgorICAgICAqIGlzICJjb20uaWJtLmljdS5pbXBsLmRhdGEuSGVicmV3Q2FsZW5kYXJTeW1ib2xzIi4KKyAgICAgKiA8cD4KKyAgICAgKiBXaXRoaW4gdGhlIFJlc291cmNlQnVuZGxlLCB0aGlzIG1ldGhvZCBzZWFyY2hlcyBmb3IgZml2ZSBrZXlzOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+PGI+RGF5TmFtZXM8L2I+IC0KKyAgICAgKiAgICAgIEFuIGFycmF5IG9mIHN0cmluZ3MgY29ycmVzcG9uZGluZyB0byBlYWNoIHBvc3NpYmxlCisgICAgICogICAgICB2YWx1ZSBvZiB0aGUgPGNvZGU+REFZX09GX1dFRUs8L2NvZGU+IGZpZWxkLiAgRXZlbiB0aG91Z2gKKyAgICAgKiAgICAgIDxjb2RlPkRBWV9PRl9XRUVLPC9jb2RlPiBzdGFydHMgd2l0aCA8Y29kZT5TVU5EQVk8L2NvZGU+ID0gMSwKKyAgICAgKiAgICAgIFRoaXMgYXJyYXkgaXMgMC1iYXNlZDsgdGhlIG5hbWUgZm9yIFN1bmRheSBnb2VzIGluIHRoZQorICAgICAqICAgICAgZmlyc3QgcG9zaXRpb24sIGF0IGluZGV4IDAuICBJZiB0aGlzIGtleSBpcyBub3QgZm91bmQKKyAgICAgKiAgICAgIGluIHRoZSBidW5kbGUsIHRoZSBkYXkgbmFtZXMgYXJlIGluaGVyaXRlZCBmcm9tIHRoZQorICAgICAqICAgICAgZGVmYXVsdCA8Y29kZT5EYXRlRm9ybWF0U3ltYm9sczwvY29kZT4gZm9yIHRoZSByZXF1ZXN0ZWQgbG9jYWxlLgorICAgICAqCisgICAgICogPGxpPjxiPkRheUFiYnJldmlhdGlvbnM8L2I+IC0KKyAgICAgKiAgICAgIEFuIGFycmF5IG9mIGFiYnJldmlhdGVkIGRheSBuYW1lcyBjb3JyZXNwb25kaW5nCisgICAgICogICAgICB0byB0aGUgdmFsdWVzIGluIHRoZSAiRGF5TmFtZXMiIGFycmF5LiAgSWYgdGhpcyBrZXkKKyAgICAgKiAgICAgIGlzIG5vdCBmb3VuZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlLCB0aGUgIkRheU5hbWVzIgorICAgICAqICAgICAgdmFsdWVzIGFyZSB1c2VkIGluc3RlYWQuICBJZiBuZWl0aGVyIGtleSBpcyBmb3VuZCwKKyAgICAgKiAgICAgIHRoZSBkYXkgYWJicmV2aWF0aW9ucyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIGRlZmF1bHQKKyAgICAgKiAgICAgIDxjb2RlPkRhdGVGb3JtYXRTeW1ib2xzPC9jb2RlPiBmb3IgdGhlIGxvY2FsZS4KKyAgICAgKgorICAgICAqIDxsaT48Yj5Nb250aE5hbWVzPC9iPiAtCisgICAgICogICAgICBBbiBhcnJheSBvZiBzdHJpbmdzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwb3NzaWJsZQorICAgICAqICAgICAgdmFsdWUgb2YgdGhlIDxjb2RlPk1PTlRIPC9jb2RlPiBmaWVsZC4gIElmIHRoaXMga2V5IGlzIG5vdCBmb3VuZAorICAgICAqICAgICAgaW4gdGhlIGJ1bmRsZSwgdGhlIG1vbnRoIG5hbWVzIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUKKyAgICAgKiAgICAgIGRlZmF1bHQgPGNvZGU+RGF0ZUZvcm1hdFN5bWJvbHM8L2NvZGU+IGZvciB0aGUgcmVxdWVzdGVkIGxvY2FsZS4KKyAgICAgKgorICAgICAqIDxsaT48Yj5Nb250aEFiYnJldmlhdGlvbnM8L2I+IC0KKyAgICAgKiAgICAgIEFuIGFycmF5IG9mIGFiYnJldmlhdGVkIGRheSBuYW1lcyBjb3JyZXNwb25kaW5nCisgICAgICogICAgICB0byB0aGUgdmFsdWVzIGluIHRoZSAiTW9udGhOYW1lcyIgYXJyYXkuICBJZiB0aGlzIGtleQorICAgICAqICAgICAgaXMgbm90IGZvdW5kIGluIHRoZSByZXNvdXJjZSBidW5kbGUsIHRoZSAiTW9udGhOYW1lcyIKKyAgICAgKiAgICAgIHZhbHVlcyBhcmUgdXNlZCBpbnN0ZWFkLiAgSWYgbmVpdGhlciBrZXkgaXMgZm91bmQsCisgICAgICogICAgICB0aGUgZGF5IGFiYnJldmlhdGlvbnMgYXJlIGluaGVyaXRlZCBmcm9tIHRoZSBkZWZhdWx0CisgICAgICogICAgICA8Y29kZT5EYXRlRm9ybWF0U3ltYm9sczwvY29kZT4gZm9yIHRoZSBsb2NhbGUuCisgICAgICoKKyAgICAgKiA8bGk+PGI+RXJhczwvYj4gLQorICAgICAqICAgICAgQW4gYXJyYXkgb2Ygc3RyaW5ncyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcG9zc2libGUKKyAgICAgKiAgICAgIHZhbHVlIG9mIHRoZSA8Y29kZT5FUkE8L2NvZGU+IGZpZWxkLiAgSWYgdGhpcyBrZXkgaXMgbm90IGZvdW5kCisgICAgICogICAgICBpbiB0aGUgYnVuZGxlLCB0aGUgZXJhIG5hbWVzIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUKKyAgICAgKiAgICAgIGRlZmF1bHQgPGNvZGU+RGF0ZUZvcm1hdFN5bWJvbHM8L2NvZGU+IGZvciB0aGUgcmVxdWVzdGVkIGxvY2FsZS4KKyAgICAgKiA8L3VsPgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBjYWwgICAgICAgVGhlIGNhbGVuZGFyIHN5c3RlbSB3aG9zZSBkYXRlIGZvcm1hdCBzeW1ib2xzIGFyZSBkZXNpcmVkLgorICAgICAqIEBwYXJhbSBsb2NhbGUgICAgVGhlIGxvY2FsZSB3aG9zZSBzeW1ib2xzIGFyZSBkZXNpcmVkLgorICAgICAqCisgICAgICogQHNlZSBEYXRlRm9ybWF0U3ltYm9scyNEYXRlRm9ybWF0U3ltYm9scyhqYXZhLnV0aWwuTG9jYWxlKQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBEYXRlRm9ybWF0U3ltYm9scyhDYWxlbmRhciBjYWwsIExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgdGhpcyhjYWw9PW51bGw/bnVsbDpjYWwuZ2V0Q2xhc3MoKSwgbG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWYXJpYW50IG9mIERhdGVGb3JtYXRTeW1ib2xzKENhbGVuZGFyLCBMb2NhbGUpIHRoYXQgdGFrZXMgdGhlIENhbGVuZGFyIGNsYXNzCisgICAgICogaW5zdGVhZCBvZiBhIENhbGFuZGFyIGluc3RhbmNlLgorICAgICAqIEBzZWUgI0RhdGVGb3JtYXRTeW1ib2xzKENhbGVuZGFyLCBMb2NhbGUpCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgRGF0ZUZvcm1hdFN5bWJvbHMoQ2xhc3MgY2FsZW5kYXJDbGFzcywgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICB0aGlzKGxvY2FsZSk7IC8vIG9sZC1zdHlsZSBjb25zdHJ1Y3Rpb24KKyAgICAgICAgaWYgKGNhbGVuZGFyQ2xhc3MgIT0gbnVsbCkgeworICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYnVuZGxlID0gZ2V0RGF0ZUZvcm1hdEJ1bmRsZShjYWxlbmRhckNsYXNzLCBsb2NhbGUpOworICAgICAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAvL2lmICghKGNhbCBpbnN0YW5jZW9mIEdyZWdvcmlhbkNhbGVuZGFyKSkgeworICAgICAgICAgICAgICAgIGlmICghKEdyZWdvcmlhbkNhbGVuZGFyLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oY2FsZW5kYXJDbGFzcykpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9rIGZvciBzeW1ib2xzIHRvIGJlIG1pc3NpbmcgZm9yIGEgR3JlZ29yaWFuIGNhbGVuZGFyLCBidXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbm90IGZvciBhbnkgb3RoZXIgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdHJ1Y3RDYWxlbmRhclNwZWNpZmljKGJ1bmRsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGZXRjaCBhIGN1c3RvbSBjYWxlbmRhcidzIERhdGVGb3JtYXRTeW1ib2xzIG91dCBvZiB0aGUgZ2l2ZW4gcmVzb3VyY2UKKyAgICAgKiBidW5kbGUuICBTeW1ib2xzIHRoYXQgYXJlIG5vdCBvdmVycmlkZGVuIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUKKyAgICAgKiBkZWZhdWx0IERhdGVGb3JtYXRTeW1ib2xzIGZvciB0aGUgbG9jYWxlLgorICAgICAqIEBzZWUgRGF0ZUZvcm1hdFN5bWJvbHMjRGF0ZUZvcm1hdFN5bWJvbHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgRGF0ZUZvcm1hdFN5bWJvbHMoUmVzb3VyY2VCdW5kbGUgYnVuZGxlLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBzeW1ib2xzIGZvciB0aGUgbG9jYWxlLCBzaW5jZSBtb3N0CisgICAgICAgIC8vIGNhbGVuZGFycyB3aWxsIG9ubHkgbmVlZCB0byBvdmVycmlkZSBtb250aCBuYW1lcyBhbmQgd2lsbAorICAgICAgICAvLyB3YW50IGV2ZXJ5dGhpbmcgZWxzZSB0aGUgc2FtZQorICAgICAgICB0aGlzKGxvY2FsZSk7IC8vIG9sZC1zdHlsZSBjb25zdHJ1Y3Rpb24KKyAgICAgICAgY29uc3RydWN0Q2FsZW5kYXJTcGVjaWZpYyhidW5kbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdpdmVuIGEgcmVzb3VyY2UgYnVuZGxlIHNwZWNpZmljIHRvIHRoZSBnaXZlbiBDYWxlbmRhciBjbGFzcywKKyAgICAgKiBpbml0aWFsaXplIHRoaXMgb2JqZWN0LiAgTWVtYmVyIHZhcmlhYmxlcyB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuCisgICAgICogaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGRlZmF1bHQgbWVjaGFuaXNtLCBzbyBvbmx5IHRob3NlIHRoYXQgZGlmZmVyCisgICAgICogZnJvbSBvciBzdXBwbGVtZW50IHRoZSBzdGFuZGFyZCByZXNvdXJjZSBkYXRhIG5lZWQgYmUgaGFuZGxlZCBoZXJlLgorICAgICAqIElmIHN1YmNsYXNzZXMgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIHRoZXkgc2hvdWxkIGNhbGwKKyAgICAgKiA8Y29kZT5zdXBlci5jb25zdHJ1Y3RDYWxlbmRhclNwZWNpZmljKGJ1bmRsZSk8L2NvZGU+IGFzIG5lZWRlZCB0bworICAgICAqIGhhbmRsZSB0aGUgIkRheU5hbWVzIiwgIkRheUFiYnJldmlhdGlvbnMiLCAiTW9udGhOYW1lcyIsCisgICAgICogIk1vbnRoQWJicmV2aWF0aW9ucyIsIGFuZCAiRXJhcyIgcmVzb3VyY2UgZGF0YS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBjb25zdHJ1Y3RDYWxlbmRhclNwZWNpZmljKFJlc291cmNlQnVuZGxlIGJ1bmRsZSkgeworCisgICAgICAgIC8vIEZldGNoIHRoZSBkYXkgbmFtZXMgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLiAgSWYgdGhleSdyZSBub3QgZm91bmQsCisgICAgICAgIC8vIGl0J3Mgb2s7IHdlJ2xsIGp1c3QgdXNlIHRoZSBkZWZhdWx0IG9uZXMuCisgICAgICAgIC8vIEFsbG93IGEgbnVsbCBSZXNvdXJjZUJ1bmRsZSBqdXN0IGZvciB0aGUgc2FrZSBvZiBjb21wbGV0ZW5lc3M7CisgICAgICAgIC8vIHRoaXMgaXMgdXNlZnVsIGZvciBjYWxlbmRhcnMgdGhhdCBkb24ndCBoYXZlIGFueSBvdmVycmlkZGVuIHN5bWJvbHMKKworICAgICAgICBpZiAoYnVuZGxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgU3RyaW5nW10gdGVtcCA9IGJ1bmRsZS5nZXRTdHJpbmdBcnJheSgiRGF5TmFtZXMiKTsKKyAgICAgICAgICAgICAgICBzZXRXZWVrZGF5cyh0ZW1wKTsKKyAgICAgICAgICAgICAgICBzZXRTaG9ydFdlZWtkYXlzKHRlbXApOworCisgICAgICAgICAgICAgICAgdGVtcCA9IGJ1bmRsZS5nZXRTdHJpbmdBcnJheSgiRGF5QWJicmV2aWF0aW9ucyIpOworICAgICAgICAgICAgICAgIHNldFNob3J0V2Vla2RheXMoIHRlbXAgKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7fQorCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHRlbXAgPSBidW5kbGUuZ2V0U3RyaW5nQXJyYXkoIk1vbnRoTmFtZXMiKTsKKyAgICAgICAgICAgICAgICBzZXRNb250aHMoIHRlbXAgKTsKKyAgICAgICAgICAgICAgICBzZXRTaG9ydE1vbnRocyggdGVtcCApOworCisgICAgICAgICAgICAgICAgdGVtcCA9IGJ1bmRsZS5nZXRTdHJpbmdBcnJheSgiTW9udGhBYmJyZXZpYXRpb25zIik7CisgICAgICAgICAgICAgICAgc2V0U2hvcnRNb250aHMoIHRlbXAgKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7fQorCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHRlbXAgPSBidW5kbGUuZ2V0U3RyaW5nQXJyYXkoIkVyYXMiKTsKKyAgICAgICAgICAgICAgICBzZXRFcmFzKCB0ZW1wICk7CisgICAgICAgICAgICB9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIFJlc291cmNlQnVuZGxlIGNvbnRhaW5pbmcgdGhlIGRhdGUgZm9ybWF0IGluZm9ybWF0aW9uIGZvcgorICAgICAqIGEgc3BlY2lmaWVkIGNhbGVuZGFyIHN1YmNsYXNzIGluIGEgZ2l2ZW4gbG9jYWxlLgorICAgICAqIDxwPgorICAgICAqIFRoZSByZXNvdXJjZSBidW5kbGUgbmFtZSBpcyBiYXNlZCBvbiB0aGUgY2FsZW5kYXIncyBmdWxseS1zcGVjaWZpZWQKKyAgICAgKiBjbGFzcyBuYW1lLCB3aXRoICIucmVzb3VyY2VzIiBpbnNlcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgKiAoanVzdCBiZWZvcmUgdGhlIGNsYXNzIG5hbWUpIGFuZCAiU3ltYm9scyIgYXBwZW5kZWQgdG8gdGhlIGVuZC4KKyAgICAgKiBGb3IgZXhhbXBsZSwgdGhlIGJ1bmRsZSBjb3JyZXNwb25kaW5nIHRvICJjb20uaWJtLmljdS51dGlsLkhlYnJld0NhbGVuZGFyIgorICAgICAqIGlzICJjb20uaWJtLmljdS5pbXBsLmRhdGEuSGVicmV3Q2FsZW5kYXJTeW1ib2xzIi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIFJlc291cmNlQnVuZGxlIGdldERhdGVGb3JtYXRCdW5kbGUoQ2xhc3MgY2FsZW5kYXJDbGFzcywgTG9jYWxlIGxvY2FsZSkKKyAgICAgICAgdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB7CisKKyAgICAgICAgLy8gRmluZCB0aGUgY2FsZW5kYXIncyBjbGFzcyBuYW1lLCB3aGljaCB3ZSdyZSBnb2luZyB0byB1c2UgdG8gY29uc3RydWN0IHRoZQorICAgICAgICAvLyByZXNvdXJjZSBidW5kbGUgbmFtZS4KKyAgICAgICAgU3RyaW5nIGZ1bGxOYW1lID0gY2FsZW5kYXJDbGFzcy5nZXROYW1lKCk7CisgICAgICAgIGludCBsYXN0RG90ID0gZnVsbE5hbWUubGFzdEluZGV4T2YoJy4nKTsKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGZ1bGxOYW1lLnN1YnN0cmluZyhsYXN0RG90KzEpOworCisgICAgICAgIFN0cmluZyBidW5kbGVOYW1lID0gY2xhc3NOYW1lICsgIlN5bWJvbHMiOworCisgICAgICAgIFJlc291cmNlQnVuZGxlIHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXN1bHQgPSBJQ1VMb2NhbGVEYXRhLmdldFJlc291cmNlQnVuZGxlKGJ1bmRsZU5hbWUsIGxvY2FsZSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvL2lmICghKGNhbCBpbnN0YW5jZW9mIEdyZWdvcmlhbkNhbGVuZGFyKSkgeworICAgICAgICAgICAgaWYgKCEoR3JlZ29yaWFuQ2FsZW5kYXIuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjYWxlbmRhckNsYXNzKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBPayBmb3Igc3ltYm9scyB0byBiZSBtaXNzaW5nIGZvciBhIEdyZWdvcmlhbiBjYWxlbmRhciwgYnV0CisgICAgICAgICAgICAgICAgLy8gbm90IGZvciBhbnkgb3RoZXIgdHlwZS4KKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVmFyaWFudCBvZiBnZXREYXRlRm9ybWF0QnVuZGxlKGphdmEubGFuZy5DbGFzcywgamF2YS51dGlsLkxvY2FsZSkgdGhhdCB0YWtlcworICAgICAqIGEgQ2FsZW5kYXIgaW5zdGFuY2UgaW5zdGVhZCBvZiBhIENhbGVuZGFyIGNsYXNzLgorICAgICAqIEBzZWUgI2dldERhdGVGb3JtYXRCdW5kbGUoamF2YS5sYW5nLkNsYXNzLCBqYXZhLnV0aWwuTG9jYWxlKQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXREYXRlRm9ybWF0QnVuZGxlKENhbGVuZGFyIGNhbCwgTG9jYWxlIGxvY2FsZSkKKyAgICAgICAgdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBnZXREYXRlRm9ybWF0QnVuZGxlKGNhbD09bnVsbD9udWxsOmNhbC5nZXRDbGFzcygpLCBsb2NhbGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mY2E4OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvRGVjaW1hbEZvcm1hdC5qYXZhCkBAIC0wLDAgKzEsMzM3MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvRGVjaW1hbEZvcm1hdC5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzA1IDAxOjIxOjM4ICQgCisgKiAkUmV2aXNpb246IDEuMjAgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkN1cnJlbmN5OworaW1wb3J0IGphdmEudGV4dC5Gb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247CitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CitpbXBvcnQgamF2YS5pby5JbnZhbGlkT2JqZWN0RXhjZXB0aW9uOyAvL0J1ZyA0MTg1NzYxIFtSaWNoYXJkL0dDTF0KKworLyoqCisgKiA8Y29kZT5EZWNpbWFsRm9ybWF0PC9jb2RlPiBpcyBhIGNvbmNyZXRlIHN1YmNsYXNzIG9mCisgKiA8Y29kZT5OdW1iZXJGb3JtYXQ8L2NvZGU+IHRoYXQgZm9ybWF0cyBkZWNpbWFsIG51bWJlcnMuIEl0IGhhcyBhIHZhcmlldHkgb2YKKyAqIGZlYXR1cmVzIGRlc2lnbmVkIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gcGFyc2UgYW5kIGZvcm1hdCBudW1iZXJzIGluIGFueQorICogbG9jYWxlLCBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgV2VzdGVybiwgQXJhYmljLCBvciBJbmRpYyBkaWdpdHMuICBJdCBhbHNvCisgKiBzdXBwb3J0cyBkaWZmZXJlbnQgZmxhdm9ycyBvZiBudW1iZXJzLCBpbmNsdWRpbmcgaW50ZWdlcnMgKDEyMyksIGZpeGVkLXBvaW50CisgKiBudW1iZXJzICgxMjMuNCksIHNjaWVudGlmaWMgbm90YXRpb24gKDEuMjNFNCksIHBlcmNlbnRhZ2VzICgxMiUpLCBhbmQKKyAqIGN1cnJlbmN5IGFtb3VudHMgKCQxMjMpLiAgQWxsIG9mIHRoZXNlIGZsYXZvcnMgY2FuIGJlIGVhc2lseSBsb2NhbGl6ZWQuCisgKgorICogPHA+PHN0cm9uZz5UaGlzIGlzIGFuIGVuaGFuY2VkIHZlcnNpb24gb2YgPGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4gdGhhdAorICogaXMgYmFzZWQgb24gdGhlIHN0YW5kYXJkIHZlcnNpb24gaW4gdGhlIEpESy4gIE5ldyBvciBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHkKKyAqIGlzIGxhYmVsZWQKKyAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4gb3IKKyAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPkNIQU5HRUQ8L2ZvbnQ+PC9zdHJvbmc+Ljwvc3Ryb25nPgorICoKKyAqIDxwPlRvIG9idGFpbiBhIDxjb2RlPk51bWJlckZvcm1hdDwvY29kZT4gZm9yIGEgc3BlY2lmaWMgbG9jYWxlIChpbmNsdWRpbmcgdGhlCisgKiBkZWZhdWx0IGxvY2FsZSkgY2FsbCBvbmUgb2YgPGNvZGU+TnVtYmVyRm9ybWF0PC9jb2RlPidzIGZhY3RvcnkgbWV0aG9kcyBzdWNoCisgKiBhcyA8Y29kZT5nZXRJbnN0YW5jZSgpPC9jb2RlPi4gRG8gbm90IGNhbGwgdGhlIDxjb2RlPkRlY2ltYWxGb3JtYXQ8L2NvZGU+CisgKiBjb25zdHJ1Y3RvcnMgZGlyZWN0bHksIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHNpbmNlIHRoZQorICogPGNvZGU+TnVtYmVyRm9ybWF0PC9jb2RlPiBmYWN0b3J5IG1ldGhvZHMgbWF5IHJldHVybiBzdWJjbGFzc2VzIG90aGVyIHRoYW4KKyAqIDxjb2RlPkRlY2ltYWxGb3JtYXQ8L2NvZGU+LiBJZiB5b3UgbmVlZCB0byBjdXN0b21pemUgdGhlIGZvcm1hdCBvYmplY3QsIGRvCisgKiBzb21ldGhpbmcgbGlrZSB0aGlzOgorICoKKyAqIDxibG9ja3F1b3RlPjxwcmU+CisgKiBOdW1iZXJGb3JtYXQgZiA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZShsb2MpOworICogaWYgKGYgaW5zdGFuY2VvZiBEZWNpbWFsRm9ybWF0KSB7CisgKiAgICAgKChEZWNpbWFsRm9ybWF0KSBmKS5zZXREZWNpbWFsU2VwYXJhdG9yQWx3YXlzU2hvd24odHJ1ZSk7CisgKiB9CisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgKgorICogPHA+QSA8Y29kZT5EZWNpbWFsRm9ybWF0PC9jb2RlPiBjb21wcmlzZXMgYSA8ZW0+cGF0dGVybjwvZW0+IGFuZCBhIHNldCBvZgorICogPGVtPnN5bWJvbHM8L2VtPi4gIFRoZSBwYXR0ZXJuIG1heSBiZSBzZXQgZGlyZWN0bHkgdXNpbmcKKyAqIDxjb2RlPmFwcGx5UGF0dGVybigpPC9jb2RlPiwgb3IgaW5kaXJlY3RseSB1c2luZyB0aGUgQVBJIG1ldGhvZHMuICBUaGUKKyAqIHN5bWJvbHMgYXJlIHN0b3JlZCBpbiBhIDxjb2RlPkRlY2ltYWxGb3JtYXRTeW1ib2xzPC9jb2RlPiBvYmplY3QuICBXaGVuIHVzaW5nCisgKiB0aGUgPGNvZGU+TnVtYmVyRm9ybWF0PC9jb2RlPiBmYWN0b3J5IG1ldGhvZHMsIHRoZSBwYXR0ZXJuIGFuZCBzeW1ib2xzIGFyZQorICogcmVhZCBmcm9tIGxvY2FsaXplZCA8Y29kZT5SZXNvdXJjZUJ1bmRsZTwvY29kZT5zIGluIHRoZSBwYWNrYWdlCisgKiA8Y29kZT5qYXZhLnRleHQucmVzb3VyY2U8L2NvZGU+LgorICogCisgKiA8aDQ+U3luY2hyb25pemF0aW9uPC9oND4KKyAqIDxwPgorICogRGVjaW1hbCBmb3JtYXRzIGFyZSBnZW5lcmFsbHkgbm90IHN5bmNocm9uaXplZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gY3JlYXRlIAorICogc2VwYXJhdGUgZm9ybWF0IGluc3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuIElmIG11bHRpcGxlIHRocmVhZHMgYWNjZXNzIGEgZm9ybWF0CisgKiBjb25jdXJyZW50bHksIGl0IG11c3QgYmUgc3luY2hyb25pemVkIGV4dGVybmFsbHkuIAorICogPHA+CisgKgorICogPHA+PHN0cm9uZz5FeGFtcGxlPC9zdHJvbmc+CisgKgorICogPGJsb2NrcXVvdGU+PHByZT4KKyAqIDxzdHJvbmc+Ly8gUHJpbnQgb3V0IGEgbnVtYmVyIHVzaW5nIHRoZSBsb2NhbGl6ZWQgbnVtYmVyLCBjdXJyZW5jeSwKKyAqIC8vIGFuZCBwZXJjZW50IGZvcm1hdCBmb3IgZWFjaCBsb2NhbGU8L3N0cm9uZz4KKyAqIExvY2FsZVtdIGxvY2FsZXMgPSBOdW1iZXJGb3JtYXQuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICogZG91YmxlIG15TnVtYmVyID0gLTEyMzQuNTY7CisgKiBOdW1iZXJGb3JtYXQgZm9ybTsKKyAqIGZvciAoaW50IGo9MDsgajwzOyArK2opIHsKKyAqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZPUk1BVCIpOworICogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYWxlcy5sZW5ndGg7ICsraSkgeworICogICAgICAgICBpZiAobG9jYWxlc1tpXS5nZXRDb3VudHJ5KCkubGVuZ3RoKCkgPT0gMCkgeworICogICAgICAgICAgICAvLyBTa2lwIGxhbmd1YWdlLW9ubHkgbG9jYWxlcworICogICAgICAgICAgICBjb250aW51ZTsKKyAqICAgICAgICAgfQorICogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGxvY2FsZXNbaV0uZ2V0RGlzcGxheU5hbWUoKSk7CisgKiAgICAgICAgIHN3aXRjaCAoaikgeworICogICAgICAgICBjYXNlIDA6CisgKiAgICAgICAgICAgICBmb3JtID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKGxvY2FsZXNbaV0pOyBicmVhazsKKyAqICAgICAgICAgY2FzZSAxOgorICogICAgICAgICAgICAgZm9ybSA9IE51bWJlckZvcm1hdC5nZXRDdXJyZW5jeUluc3RhbmNlKGxvY2FsZXNbaV0pOyBicmVhazsKKyAqICAgICAgICAgZGVmYXVsdDoKKyAqICAgICAgICAgICAgIGZvcm0gPSBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEluc3RhbmNlKGxvY2FsZXNbaV0pOyBicmVhazsKKyAqICAgICAgICAgfQorICogICAgICAgICB0cnkgeworICogICAgICAgICAgICAgLy8gQXNzdW1lIGZvcm0gaXMgYSBEZWNpbWFsRm9ybWF0CisgKiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCI6ICIgKyAoKERlY2ltYWxGb3JtYXQpIGZvcm0pLnRvUGF0dGVybigpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiAtPiAiICsgZm9ybS5mb3JtYXQobXlOdW1iZXIpKTsKKyAqICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHt9CisgKiAgICAgICAgIHRyeSB7CisgKiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAtPiAiICsgZm9ybS5wYXJzZShmb3JtLmZvcm1hdChteU51bWJlcikpKTsKKyAqICAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkge30KKyAqICAgICB9CisgKiB9CisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgKgorICogPHA+PHN0cm9uZz5Ob3Rlczwvc3Ryb25nPgorICoKKyAqIDxwPkEgPGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4gcGF0dGVybiBjb250YWlucyBhIHBvc3RpdmUgYW5kIG5lZ2F0aXZlCisgKiBzdWJwYXR0ZXJuLCBmb3IgZXhhbXBsZSwgIiMsIyMwLjAwOygjLCMjMC4wMCkiLiAgRWFjaCBzdWJwYXR0ZXJuIGhhcyBhCisgKiBwcmVmaXgsIG51bWVyaWMgcGFydCwgYW5kIHN1ZmZpeC4gIElmIHRoZXJlIGlzIG5vIGV4cGxpY2l0IG5lZ2F0aXZlCisgKiBzdWJwYXR0ZXJuLCB0aGUgbG9jYWxpemVkIG1pbnVzIHNpZ24sIHR5cGljYWxseSAnLScsIGlzIHByZWZpeGVkIHRvIHRoZQorICogcG9zaXRpdmUgZm9ybS4gVGhhdCBpcywgIjAuMDAiIGFsb25lIGlzIGVxdWl2YWxlbnQgdG8gIjAuMDA7LTAuMDAiLiAgSWYgdGhlcmUKKyAqIGlzIGFuIGV4cGxpY2l0IG5lZ2F0aXZlIHN1YnBhdHRlcm4sIGl0IHNlcnZlcyBvbmx5IHRvIHNwZWNpZnkgdGhlIG5lZ2F0aXZlCisgKiBwcmVmaXggYW5kIHN1ZmZpeDsgdGhlIG51bWJlciBvZiBkaWdpdHMsIG1pbmltYWwgZGlnaXRzLCBhbmQgb3RoZXIKKyAqIGNoYXJhY3RlcmlzdGljcyBhcmUgYWxsIHRoZSBzYW1lIGFzIHRoZSBwb3NpdGl2ZSBwYXR0ZXJuLiBUaGF0IG1lYW5zIHRoYXQKKyAqICIjLCMjMC4wIzsoIykiIGhhcyBwcmVjaXNlbHkgdGhlIHNhbWUgcmVzdWx0IGFzICIjLCMjMC4wIzsoIywjIzAuMCMpIi4KKyAqCisgKiA8cD5UaGUgcHJlZml4ZXMsIHN1ZmZpeGVzLCBhbmQgdmFyaW91cyBzeW1ib2xzIHVzZWQgZm9yIGluZmluaXR5LCBkaWdpdHMsCisgKiB0aG91c2FuZHMgc2VwYXJhdG9ycywgZGVjaW1hbCBzZXBhcmF0b3JzLCBldGMuIG1heSBiZSBzZXQgdG8gYXJiaXRyYXJ5CisgKiB2YWx1ZXMsIGFuZCB0aGV5IHdpbGwgYXBwZWFyIHByb3Blcmx5IGR1cmluZyBmb3JtYXR0aW5nLiAgSG93ZXZlciwgY2FyZSBtdXN0CisgKiBiZSB0YWtlbiB0aGF0IHRoZSBzeW1ib2xzIGFuZCBzdHJpbmdzIGRvIG5vdCBjb25mbGljdCwgb3IgcGFyc2luZyB3aWxsIGJlCisgKiB1bnJlbGlhYmxlLiAgRm9yIGV4YW1wbGUsIGVpdGhlciB0aGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHByZWZpeGVzIG9yIHRoZQorICogc3VmZml4ZXMgbXVzdCBiZSBkaXN0aW5jdCBmb3IgPGNvZGU+RGVjaW1hbEZvcm1hdC5wYXJzZSgpPC9jb2RlPiB0byBiZSBhYmxlCisgKiB0byBkaXN0aW5ndWlzaCBwb3NpdGl2ZSBmcm9tIG5lZ2F0aXZlIHZhbHVlcy4gIEFub3RoZXIgZXhhbXBsZSBpcyB0aGF0IHRoZQorICogZGVjaW1hbCBzZXBhcmF0b3IgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3Igc2hvdWxkIGJlIGRpc3RpbmN0IGNoYXJhY3RlcnMsIG9yCisgKiBwYXJzaW5nIHdpbGwgYmUgaW1wb3NzaWJsZS4KKyAqCisgKiA8cD5UaGUgZ3JvdXBpbmcgc2VwYXJhdG9yIGlzIGNvbW1vbmx5IHVzZWQgZm9yIHRob3VzYW5kcywgYnV0IGluIHNvbWUKKyAqIGNvdW50cmllcyBpdCBzZXBhcmF0ZXMgdGVuLXRob3VzYW5kcy4gVGhlIGdyb3VwaW5nIHNpemUgaXMgYSBjb25zdGFudCBudW1iZXIKKyAqIG9mIGRpZ2l0cyBiZXR3ZWVuIHRoZSBncm91cGluZyBjaGFyYWN0ZXJzLCBzdWNoIGFzIDMgZm9yIDEwMCwwMDAsMDAwIG9yIDQgZm9yCisgKiAxLDAwMDAsMDAwMC4KKyAqIElmIHlvdSBzdXBwbHkgYSBwYXR0ZXJuIHdpdGggbXVsdGlwbGUgZ3JvdXBpbmcgY2hhcmFjdGVycywgdGhlIGludGVydmFsCisgKiBiZXR3ZWVuIHRoZSBsYXN0IG9uZSBhbmQgdGhlIGVuZCBvZiB0aGUgaW50ZWdlciBkZXRlcm1pbmVzIHRoZSBwcmltYXJ5CisgKiBncm91cGluZyBzaXplLCBhbmQgdGhlIGludGVydmFsIGJldHdlZW4gdGhlIGxhc3QgdHdvIGRldGVybWluZXMKKyAqIHRoZSBzZWNvbmRhcnkgZ3JvdXBpbmcgc2l6ZSAoc2VlIGJlbG93KTsgYWxsIG90aGVycyBhcmUgaWdub3JlZC4KKyAqIFNvICIjLCMjLCMjIywjIyMjIiA9PSAiIyMjLCMjIywjIyMjIiA9PSAiIyMsIywjIyMsIyMjIyIuCisgKgorICogPFA+U29tZSBsb2NhbGVzIGhhdmUgdHdvIGRpZmZlcmVudCBncm91cGluZyBpbnRlcnZhbHM6ICBPbmUgdXNlZCBmb3IgdGhlCisgKiBsZWFzdCBzaWduaWZpY2FudCBpbnRlZ2VyIGRpZ2l0cyAodGhlIHByaW1hcnkgZ3JvdXBpbmcgc2l6ZSksIGFuZAorICogb25lIHVzZWQgZm9yIGFsbCBvdGhlcnMgKHRoZSBzZWNvbmRhcnkgZ3JvdXBpbmcgc2l6ZSkuICBGb3IgZXhhbXBsZSwKKyAqIGlmIHRoZSBwcmltYXJ5IGdyb3VwaW5nIGludGVydmFsIGlzIDMsIGFuZCB0aGUgc2Vjb25kYXJ5IGlzIDIsIHRoZW4KKyAqIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIHBhdHRlcm4gIiMsIyMsIyMwIiwgYW5kIHRoZSBudW1iZXIgMTIzNDU2Nzg5CisgKiBpcyBmb3JtYXR0ZWQgYXMgIjEyLDM0LDU2LDc4OSIuCisgKgorICogPHA+PGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4gcGFyc2VzIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnQKKyAqIGRlY2ltYWwgZGlnaXRzLCBhcyBkZWZpbmVkIGJ5IDxjb2RlPkNoYXJhY3Rlci5kaWdpdCgpPC9jb2RlPi4gIEluIGFkZGl0aW9uLAorICogPGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4gYWxzbyByZWNvZ25pemVzIGFzIGRpZ2l0cyB0aGUgdGVuIGNvbnNlY3V0aXZlCisgKiBjaGFyYWN0ZXJzIHN0YXJ0aW5nIHdpdGggdGhlIGxvY2FsaXplZCB6ZXJvIGRpZ2l0IGRlZmluZWQgaW4gdGhlCisgKiA8Y29kZT5EZWNpbWFsRm9ybWF0U3ltYm9sczwvY29kZT4gb2JqZWN0LiAgRHVyaW5nIGZvcm1hdHRpbmcsIHRoZQorICogPGNvZGU+RGVjaW1hbEZvcm1hdFN5bWJvbHM8L2NvZGU+LWJhc2VkIGRpZ2l0cyBhcmUgb3V0cHV0LgorICoKKyAqIDxwPklsbGVnYWwgcGF0dGVybnMsIHN1Y2ggYXMgIiMuIy4jIiBvciAiIy4jIyMsIyMjIiwgd2lsbCBjYXVzZQorICogPGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4gdG8gdGhyb3cgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPgorICogd2l0aCBhIG1lc3NhZ2UgdGhhdCBkZXNjcmliZXMgdGhlIHByb2JsZW0uCisgKgorICogPHA+SWYgPGNvZGU+RGVjaW1hbEZvcm1hdC5wYXJzZShTdHJpbmcsIFBhcnNlUG9zaXRpb24pPC9jb2RlPiBmYWlscyB0byBwYXJzZQorICogYSBzdHJpbmcsIGl0IHJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4gYW5kIGxlYXZlcyB0aGUgcGFyc2UgcG9zaXRpb24KKyAqIHVuY2hhbmdlZC4gIFRoZSBjb252ZW5pZW5jZSBtZXRob2QgPGNvZGU+RGVjaW1hbEZvcm1hdC5wYXJzZShTdHJpbmcpPC9jb2RlPgorICogaW5kaWNhdGVzIHBhcnNlIGZhaWx1cmUgYnkgdGhyb3dpbmcgYSA8Y29kZT5QYXJzZUV4Y2VwdGlvbjwvY29kZT4uCisgKgorICogPHA+PHN0cm9uZz5TcGVjaWFsIENhc2VzPC9zdHJvbmc+CisgKgorICogPHA+PGNvZGU+TmFOPC9jb2RlPiBpcyBmb3JtYXR0ZWQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLCB0eXBpY2FsbHkKKyAqIDxjb2RlPiYjOTI7dUZGRkQ8L2NvZGU+LiAgVGhpcyBjaGFyYWN0ZXIgaXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAqIDxjb2RlPkRlY2ltYWxGb3JtYXRTeW1ib2xzPC9jb2RlPiBvYmplY3QuICBUaGlzIGlzIHRoZSBvbmx5IHZhbHVlIGZvciB3aGljaAorICogdGhlIHByZWZpeGVzIGFuZCBzdWZmaXhlcyBhcmUgbm90IHVzZWQuCisgKgorICogPHA+SW5maW5pdHkgaXMgZm9ybWF0dGVkIGFzIGEgc2luZ2xlIGNoYXJhY3RlciwgdHlwaWNhbGx5CisgKiA8Y29kZT4mIzkyO3UyMjFFPC9jb2RlPiwgd2l0aCB0aGUgcG9zaXRpdmUgb3IgbmVnYXRpdmUgcHJlZml4ZXMgYW5kIHN1ZmZpeGVzCisgKiBhcHBsaWVkLiAgVGhlIGluZmluaXR5IGNoYXJhY3RlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorICogPGNvZGU+RGVjaW1hbEZvcm1hdFN5bWJvbHM8L2NvZGU+IG9iamVjdC4KKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAqIDxzdHJvbmc+U2NpZW50aWZpYyBOb3RhdGlvbjwvc3Ryb25nPgorICoKKyAqIDxwPk51bWJlcnMgaW4gc2NpZW50aWZpYyBub3RhdGlvbiBhcmUgZXhwcmVzc2VkIGFzIHRoZSBwcm9kdWN0IG9mIGEgbWFudGlzc2EKKyAqIGFuZCBhIHBvd2VyIG9mIHRlbiwgZm9yIGV4YW1wbGUsIDEyMzQgY2FuIGJlIGV4cHJlc3NlZCBhcyAxLjIzNCB4IDEwXjMuICBUaGUKKyAqIG1hbnRpc3NhIGlzIG9mdGVuIGluIHRoZSByYW5nZSAxLjAgPD0geCA8IDEwLjAsIGJ1dCBpdCBuZWVkIG5vdCBiZS4KKyAqIDxjb2RlPkRlY2ltYWxGb3JtYXQ8L2NvZGU+IGNhbiBiZSBpbnN0cnVjdGVkIHRvIGZvcm1hdCBhbmQgcGFyc2Ugc2NpZW50aWZpYworICogbm90YXRpb24gdGhyb3VnaCB0aGUgQVBJIG9yIHZpYSBhIHBhdHRlcm4uICBJbiBhIHBhdHRlcm4sIHRoZSBleHBvbmVudAorICogY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGRpZ2l0IGNoYXJhY3RlcnMgaW5kaWNhdGVzCisgKiBzY2llbnRpZmljIG5vdGF0aW9uLiAgRXhhbXBsZTogIjAuIyMjRTAiIGZvcm1hdHMgdGhlIG51bWJlciAxMjM0IGFzCisgKiAiMS4yMzRFMyIuCisgKgorICogPHVsPgorICogPGxpPlRoZSBudW1iZXIgb2YgZGlnaXQgY2hhcmFjdGVycyBhZnRlciB0aGUgZXhwb25lbnQgY2hhcmFjdGVyIGdpdmVzIHRoZQorICogbWluaW11bSBleHBvbmVudCBkaWdpdCBjb3VudC4gIFRoZXJlIGlzIG5vIG1heGltdW0uICBOZWdhdGl2ZSBleHBvbmVudHMgYXJlCisgKiBmb3JtYXR0ZWQgdXNpbmcgdGhlIGxvY2FsaXplZCBtaW51cyBzaWduLCA8ZW0+bm90PC9lbT4gdGhlIHByZWZpeCBhbmQgc3VmZml4CisgKiBmcm9tIHRoZSBwYXR0ZXJuLiAgVGhpcyBhbGxvd3MgcGF0dGVybnMgc3VjaCBhcyAiMC4jIyNFMCBtL3MiLiAgVG8gcHJlZml4CisgKiBwb3NpdGl2ZSBleHBvbmVudHMgd2l0aCBhIGxvY2FsaXplZCBwbHVzIHNpZ24sIHNwZWNpZnkgJysnIGJldHdlZW4gdGhlCisgKiBleHBvbmVudCBhbmQgdGhlIGRpZ2l0czogIjAuIyMjRSswIiB3aWxsIHByb2R1Y2UgZm9ybWF0cyAiMUUrMSIsICIxRSswIiwKKyAqICIxRS0xIiwgZXRjLiAgKEluIGxvY2FsaXplZCBwYXR0ZXJucywgdXNlIHRoZSBsb2NhbGl6ZWQgcGx1cyBzaWduIHJhdGhlciB0aGFuCisgKiAnKycuKQorICoKKyAqIDxsaT5UaGUgbWluaW11bSBudW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgaXMgYWNoaWV2ZWQgYnkgYWRqdXN0aW5nIHRoZQorICogZXhwb25lbnQuICBFeGFtcGxlOiAwLjAwMTIzIGZvcm1hdHRlZCB3aXRoICIwMC4jIyNFMCIgeWllbGRzICIxMi4zRS00Ii4gIFRoaXMKKyAqIG9ubHkgaGFwcGVucyBpZiB0aGVyZSBpcyBubyBtYXhpbXVtIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cy4gIElmIHRoZXJlIGlzIGEKKyAqIG1heGltdW0sIHRoZW4gdGhlIG1pbmltdW0gbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGlzIGZpeGVkIGF0IG9uZS4KKyAqCisgKiA8bGk+VGhlIG1heGltdW0gbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzLCBpZiBwcmVzZW50LCBzcGVjaWZpZXMgdGhlIGV4cG9uZW50CisgKiBncm91cGluZy4gIFRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgdGhpcyBpcyB0byBnZW5lcmF0ZSA8ZW0+ZW5naW5lZXJpbmcKKyAqIG5vdGF0aW9uPC9lbT4sIGluIHdoaWNoIHRoZSBleHBvbmVudCBpcyBhIG11bHRpcGxlIG9mIHRocmVlLCBlLmcuLAorICogIiMjMC4jIyNFMCIuICBUaGUgbnVtYmVyIDEyMzQ1IGlzIGZvcm1hdHRlZCB1c2luZyAiIyMwLiMjIyNFMCIgYXMgIjEyLjM0NUUzIi4KKyAqCisgKiA8bGk+VGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaXMgdGhlIHN1bSBvZiB0aGUgPGVtPm1pbmltdW0KKyAqIGludGVnZXI8L2VtPiBhbmQgPGVtPm1heGltdW0gZnJhY3Rpb248L2VtPiBkaWdpdHMsIGFuZCBpcyB1bmFmZmVjdGVkIGJ5IHRoZQorICogbWF4aW11bSBpbnRlZ2VyIGRpZ2l0cy4gIElmIHRoaXMgc3VtIGlzIHplcm8sIHRoZW4gYWxsIHNpZ25pZmljYW50IGRpZ2l0cyBhcmUKKyAqIHNob3duLiAgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgbGltaXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgaW50ZWdlcgorICogYW5kIGZyYWN0aW9uIGRpZ2l0cyB0aGF0IHdpbGwgYmUgc2hvd24gaW4gdGhlIG1hbnRpc3NhOyBpdCBkb2VzIG5vdCBhZmZlY3QKKyAqIHBhcnNpbmcuICBGb3IgZXhhbXBsZSwgMTIzNDUgZm9ybWF0dGVkIHdpdGggIiMjMC4jI0UwIiBpcyAiMTIuM0UzIi4KKyAqCisgKiA8bGk+RXhwb25lbnRpYWwgcGF0dGVybnMgbWF5IG5vdCBjb250YWluIGdyb3VwaW5nIHNlcGFyYXRvcnMuCisgKiA8L3VsPgorICoKKyAqIDxwPgorICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICogPHN0cm9uZz5QYWRkaW5nPC9zdHJvbmc+CisgKgorICogPHA+PGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4gc3VwcG9ydHMgcGFkZGluZyB0aGUgcmVzdWx0IG9mCisgKiA8Y29kZT5mb3JtYXQoKTwvY29kZT4gdG8gYSBzcGVjaWZpYyB3aWR0aC4gIFBhZGRpbmcgbWF5IGJlIHNwZWNpZmllZCBlaXRoZXIKKyAqIHRocm91Z2ggdGhlIEFQSSBvciB0aHJvdWdoIHRoZSBwYXR0ZXJuIHN5bnRheC4gIEluIGEgcGF0dGVybiB0aGUgcGFkIGVzY2FwZQorICogY2hhcmFjdGVyLCBmb2xsb3dlZCBieSBhIHNpbmdsZSBwYWQgY2hhcmFjdGVyLCBjYXVzZXMgcGFkZGluZyB0byBiZSBwYXJzZWQKKyAqIGFuZCBmb3JtYXR0ZWQuICBUaGUgcGFkIGVzY2FwZSBjaGFyYWN0ZXIgaXMgJyonIGluIHVubG9jYWxpemVkIHBhdHRlcm5zLCBhbmQKKyAqIGNhbiBiZSBsb2NhbGl6ZWQgdXNpbmcgPGNvZGU+RGVjaW1hbEZvcm1hdFN5bWJvbHMuc2V0UGFkRXNjYXBlKCk8L2NvZGU+LiAgRm9yCisgKiBleGFtcGxlLCA8Y29kZT4iJCp4IywjIzAuMDAiPC9jb2RlPiBmb3JtYXRzIDEyMyB0byA8Y29kZT4iJHh4MTIzLjAwIjwvY29kZT4sCisgKiBhbmQgMTIzNCB0byA8Y29kZT4iJDEsMjM0LjAwIjwvY29kZT4uCisgKgorICogPHVsPgorICogPGxpPldoZW4gcGFkZGluZyBpcyBpbiBlZmZlY3QsIHRoZSB3aWR0aCBvZiB0aGUgcG9zaXRpdmUgc3VicGF0dGVybiwKKyAqIGluY2x1ZGluZyBwcmVmaXggYW5kIHN1ZmZpeCwgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0IHdpZHRoLiAgRm9yIGV4YW1wbGUsIGluCisgKiB0aGUgcGF0dGVybiA8Y29kZT4iKiAjMCBvJydjbG9jayI8L2NvZGU+LCB0aGUgZm9ybWF0IHdpZHRoIGlzIDEwLgorICoKKyAqIDxsaT5Tb21lIHBhcmFtZXRlcnMgd2hpY2ggdXN1YWxseSBkbyBub3QgbWF0dGVyIGhhdmUgbWVhbmluZyB3aGVuIHBhZGRpbmcgaXMKKyAqIHVzZWQsIGJlY2F1c2UgdGhlIHBhdHRlcm4gd2lkdGggaXMgc2lnbmlmaWNhbnQgd2l0aCBwYWRkaW5nLiAgSW4gdGhlIHBhdHRlcm4KKyAqICJeICMjLCMjLCMsIyMwLiMjIiwgdGhlIGZvcm1hdCB3aWR0aCBpcyAxNC4gIFRoZSBpbml0aWFsIGNoYXJhY3RlcnMgIiMjLCMjLCIKKyAqIGRvIG5vdCBhZmZlY3QgdGhlIGdyb3VwaW5nIHNpemUgb3IgbWF4aW11bSBpbnRlZ2VyIGRpZ2l0cywgYnV0IHRoZXkgZG8gYWZmZWN0CisgKiB0aGUgZm9ybWF0IHdpZHRoLgorICoKKyAqIDxsaT5QYWRkaW5nIG1heSBiZSBpbnNlcnRlZCBhdCBvbmUgb2YgZm91ciBsb2NhdGlvbnM6IGJlZm9yZSB0aGUgcHJlZml4LAorICogYWZ0ZXIgdGhlIHByZWZpeCwgYmVmb3JlIHRoZSBzdWZmaXgsIG9yIGFmdGVyIHRoZSBzdWZmaXguICBJZiBwYWRkaW5nIGlzCisgKiBzcGVjaWZpZWQgaW4gYW55IG90aGVyIGxvY2F0aW9uLCA8Y29kZT5EZWNpbWFsRm9ybWF0LmFwcGx5UGF0dGVybigpPC9jb2RlPgorICogdGhyb3dzIGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4uICBJZiB0aGVyZSBpcyBubyBwcmVmaXgsCisgKiBiZWZvcmUgdGhlIHByZWZpeCBhbmQgYWZ0ZXIgdGhlIHByZWZpeCBhcmUgZXF1aXZhbGVudCwgbGlrZXdpc2UgZm9yIHRoZQorICogc3VmZml4LgorICoKKyAqIDxsaT5UaGUgcGFkIGNoYXJhY3RlciBtYXkgbm90IGJlIGEgcXVvdGUuCisgKiA8L3VsPgorICoKKyAqIDxwPgorICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICogPHN0cm9uZz5Sb3VuZGluZzwvc3Ryb25nPgorICoKKyAqIDxwPjxjb2RlPkRlY2ltYWxGb3JtYXQ8L2NvZGU+IHN1cHBvcnRzIHJvdW5kaW5nIHRvIGEgc3BlY2lmaWMgaW5jcmVtZW50LiAgRm9yCisgKiBleGFtcGxlLCAxMjMwIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgNTAgaXMgMTI1MC4gIDEuMjM0IHJvdW5kZWQgdG8gdGhlCisgKiBuZWFyZXN0IDAuNjUgaXMgMS4zLiAgVGhlIHJvdW5kaW5nIGluY3JlbWVudCBtYXkgYmUgc3BlY2lmaWVkIHRocm91Z2ggdGhlIEFQSQorICogb3IgaW4gYSBwYXR0ZXJuLiAgVG8gc3BlY2lmeSBhIHJvdW5kaW5nIGluY3JlbWVudCBpbiBhIHBhdHRlcm4sIGluY2x1ZGUgdGhlCisgKiBpbmNyZW1lbnQgaW4gdGhlIHBhdHRlcm4gaXRzZWxmLiAgIiMsIzUwIiBzcGVjaWZpZXMgYSByb3VuZGluZyBpbmNyZW1lbnQgb2YKKyAqIDUwLiAgIiMsIyMwLjA1IiBzcGVjaWZpZXMgYSByb3VuZGluZyBpbmNyZW1lbnQgb2YgMC4wNS4KKyAqCisgKiA8dWw+CisgKiA8bGk+Um91bmRpbmcgb25seSBhZmZlY3RzIHRoZSBzdHJpbmcgcHJvZHVjZWQgYnkgZm9ybWF0dGluZy4gIEl0IGRvZXMKKyAqIG5vdCBhZmZlY3QgcGFyc2luZyBvciBjaGFuZ2UgYW55IG51bWVyaWNhbCB2YWx1ZXMuCisgKgorICogPGxpPkEgPGVtPnJvdW5kaW5nIG1vZGU8L2VtPiBkZXRlcm1pbmVzIGhvdyB2YWx1ZXMgYXJlIHJvdW5kZWQ7IHNlZSB0aGUKKyAqIDxjb2RlPmphdmEubWF0aC5CaWdEZWNpbWFsPC9jb2RlPiBkb2N1bWVudGF0aW9uIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQorICogbW9kZXMuICBSb3VuZGluZyBpbmNyZW1lbnRzIHNwZWNpZmllZCBpbiBwYXR0ZXJucyB1c2UgdGhlIGRlZmF1bHQgbW9kZSwKKyAqIDxjb2RlPlJPVU5EX0hBTEZfRVZFTjwvY29kZT4uCisgKgorICogPGxpPlNvbWUgbG9jYWxlcyB1c2Ugcm91bmRpbmcgaW4gdGhlaXIgY3VycmVuY3kgZm9ybWF0cyB0byByZWZsZWN0IHRoZQorICogc21hbGxlc3QgY3VycmVuY3kgZGVub21pbmF0aW9uLgorICoKKyAqIDxsaT5JbiBhIHBhdHRlcm4sIGRpZ2l0cyAnMScgdGhyb3VnaCAnOScgc3BlY2lmeSByb3VuZGluZywgYnV0IG90aGVyd2lzZQorICogYmVoYXZlIGlkZW50aWNhbGx5IHRvIGRpZ2l0ICcwJy4KKyAqIDwvdWw+CisgKgorICogPHA+PHN0cm9uZz5QYXR0ZXJuIFN5bnRheDwvc3Ryb25nPgorICogPHByZT4KKyAqIHBhdHRlcm4gICAgOj0gc3VicGF0dGVybnsnOycgc3VicGF0dGVybn0KKyAqIHN1YnBhdHRlcm4gOj0ge3ByZWZpeH1udW1iZXJ7c3VmZml4fQorICogbnVtYmVyICAgICA6PSBpbnRlZ2VyeycuJyBmcmFjdGlvbn17ZXhwb25lbnR9CisgKiBwcmVmaXggICAgIDo9ICcmIzkyO3UwMDAwJy4uJyYjOTI7dUZGRkQnIC0gc3BlY2lhbENoYXJhY3RlcnMKKyAqIHN1ZmZpeCAgICAgOj0gJyYjOTI7dTAwMDAnLi4nJiM5Mjt1RkZGRCcgLSBzcGVjaWFsQ2hhcmFjdGVycworICogaW50ZWdlciAgICA6PSAnIycqICcwJyogJzAnCisgKiBmcmFjdGlvbiAgIDo9ICcwJyogJyMnKgorICogZXhwb25lbnQgICA6PSAnRScgeycrJ30gJzAnKiAnMCcKKyAqIHBhZFNwZWMgICAgOj0gJyonIHBhZENoYXIKKyAqIHBhZENoYXIgICAgOj0gJyYjOTI7dTAwMDAnLi4nJiM5Mjt1RkZGRCcgLSBxdW90ZQorICogJiMzMjsKKyAqIE5vdGF0aW9uOgorICogICBYKiAgICAgICAwIG9yIG1vcmUgaW5zdGFuY2VzIG9mIFgKKyAqICAgeyBYIH0gICAgMCBvciAxIGluc3RhbmNlcyBvZiBYCisgKiAgIFguLlkgICAgIGFueSBjaGFyYWN0ZXIgZnJvbSBYIHVwIHRvIFksIGluY2x1c2l2ZQorICogICBTIC0gVCAgICBjaGFyYWN0ZXJzIGluIFMsIGV4Y2VwdCB0aG9zZSBpbiBUCisgKiA8L3ByZT4KKyAqIFRoZSBmaXJzdCBzdWJwYXR0ZXJuIGlzIGZvciBwb3NpdGl2ZSBudW1iZXJzLiBUaGUgc2Vjb25kIChvcHRpb25hbCkKKyAqIHN1YnBhdHRlcm4gaXMgZm9yIG5lZ2F0aXZlIG51bWJlcnMuCisgKiAKKyAqIDxwPk5vdCBpbmRpY2F0ZWQgaW4gdGhlIEJORiBzeW50YXggYWJvdmU6CisgKiA8dWw+PGxpPlRoZSBncm91cGluZyBzZXBhcmF0b3IgJywnIGNhbiBvY2N1ciBpbnNpZGUgdGhlIGludGVnZXIgcG9ydGlvbiBiZXR3ZWVuIHRoZQorICogbW9zdCBzaWduaWZpY2FudCBkaWdpdCBhbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGRpZ2l0LgorICoKKyAqIDxsaT48Zm9udCBjb2xvcj1yZWQgZmFjZT1oZWx2ZXRpY2E+PHN0cm9uZz5ORVc8L3N0cm9uZz48L2ZvbnQ+CisgKiAgICAgVHdvIGdyb3VwaW5nIGludGVydmFscyBhcmUgcmVjb2duaXplZDogVGhhdCBiZXR3ZWVuIHRoZQorICogICAgIGRlY2ltYWwgcG9pbnQgYW5kIHRoZSBmaXJzdCBncm91cGluZyBzeW1ib2wsIGFuZCB0aGF0CisgKiAgICAgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBncm91cGluZyBzeW1ib2xzLiBUaGVzZQorICogICAgIGludGVydmFscyBhcmUgaWRlbnRpY2FsIGluIG1vc3QgbG9jYWxlcywgYnV0IGluIHNvbWUKKyAqICAgICBsb2NhbGVzIHRoZXkgZGlmZmVyLiBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4KKyAqICAgICAmcXVvdDsjLCMjLCMjIyZxdW90OyBmb3JtYXRzIHRoZSBudW1iZXIgMTIzNDU2Nzg5IGFzCisgKiAgICAgJnF1b3Q7MTIsMzQsNTYsNzg5JnF1b3Q7LjwvbGk+CisgKiAKKyAqIDxsaT4KKyAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAqIFRoZSBwYWQgc3BlY2lmaWVyIDxjb2RlPnBhZFNwZWM8L2NvZGU+IG1heSBhcHBlYXIgYmVmb3JlIHRoZSBwcmVmaXgsCisgKiBhZnRlciB0aGUgcHJlZml4LCBiZWZvcmUgdGhlIHN1ZmZpeCwgYWZ0ZXIgdGhlIHN1ZmZpeCwgb3Igbm90IGF0IGFsbC4KKyAqCisgKiA8bGk+CisgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgKiBJbiBwbGFjZSBvZiAnMCcsIHRoZSBkaWdpdHMgJzEnIHRocm91Z2ggJzknIG1heSBiZSB1c2VkIHRvCisgKiBpbmRpY2F0ZSBhIHJvdW5kaW5nIGluY3JlbWVudC4KKyAqIDwvdWw+CisgKgorICogPHA+PHN0cm9uZz5TcGVjaWFsIFBhdHRlcm4gQ2hhcmFjdGVyczwvc3Ryb25nPgorICoKKyAqIDxwPkhlcmUgYXJlIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdXNlZCBpbiB0aGUgcGF0dGVybiwgd2l0aCBub3RlcyBvbiB0aGVpcgorICogdXNhZ2UuICBTcGVjaWFsIGNoYXJhY3RlcnMgbXVzdCBiZSBxdW90ZWQsIHVubGVzcyBub3RlZCBvdGhlcndpc2UsIGlmIHRoZXkKKyAqIGFyZSB0byBhcHBlYXIgaW4gdGhlIHByZWZpeCBvciBzdWZmaXguICBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHRob3NlIGxpc3RlZAorICogd2l0aCBsb2NhdGlvbiAicHJlZml4IG9yIHN1ZmZpeC4iICBTdWNoIGNoYXJhY3RlcnMgc2hvdWxkIG9ubHkgYmUgcXVvdGVkIGluCisgKiBvcmRlciB0byByZW1vdmUgdGhlaXIgc3BlY2lhbCBtZWFuaW5nLgorICoKKyAqIDxwPjx0YWJsZSBib3JkZXI9MT4KKyAqIDx0cj48dGg+U3ltYm9sPHRoPkxvY2F0aW9uPHRoPk1lYW5pbmc8L3RyPgorICogPHRyPjx0ZD4wLTk8dGQ+TnVtYmVyPHRkPkRpZ2l0LgorICogICAgICAgICAgICAgICAgICA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgKiAgICAgICAgICAgICAgICAgICcxJyB0aHJvdWdoICc5JyBpbmRpY2F0ZSByb3VuZGluZzwvdHI+CisgKiA8dHI+PHRkPiM8dGQ+TnVtYmVyPHRkPkRpZ2l0LCB6ZXJvIHNob3dzIGFzIGFic2VudDwvdHI+CisgKiA8dHI+PHRkPi48dGQ+TnVtYmVyPHRkPkRlY2ltYWwgc2VwYXJhdG9yIG9yIG1vbmV0YXJ5IGRlY2ltYWwgc2VwYXJhdG9yPC90cj4KKyAqIDx0cj48dGQ+LDx0ZD5OdW1iZXI8dGQ+R3JvdXBpbmcgc2VwYXJhdG9yPC90cj4KKyAqIDx0cj48dGQ+RTx0ZD5OdW1iZXIKKyAqICAgICAgICAgIDx0ZD5TZXBhcmF0ZXMgbWFudGlzc2EgYW5kIGV4cG9uZW50IGluIHNjaWVudGlmaWMgbm90YXRpb24uCisgKiAgICAgICAgICAgICAgPGVtPk5lZWQgbm90IGJlIHF1b3RlZCBpbiBwcmVmaXggb3Igc3VmZml4LjwvZW0+PC90cj4KKyAqIDx0cj48dGQ+PHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICogICAgICAgICArPHRkPkV4cG9uZW50CisgKiAgICAgICAgICA8dGQ+UHJlZml4IHBvc2l0aXZlIGV4cG9uZW50cyB3aXRoIGxvY2FsaXplZCBwbHVzIHNpZ24uCisgKiAgICAgICAgICAgICAgPGVtPk5lZWQgbm90IGJlIHF1b3RlZCBpbiBwcmVmaXggb3Igc3VmZml4LjwvZW0+PC90cj4KKyAqIDx0cj48dGQ+Ozx0ZD5TdWJwYXR0ZXJuIGJvdW5kYXJ5CisgKiAgICAgICAgICA8dGQ+U2VwYXJhdGVzIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBzdWJwYXR0ZXJuczwvdHI+CisgKiA8dHI+PHRkPiU8dGQ+UHJlZml4IG9yIHN1ZmZpeDx0ZD5NdWx0aXBseSBieSAxMDAgYW5kIHNob3cgYXMgcGVyY2VudGFnZTwvdHI+CisgKiA8dHI+PHRkPiYjOTI7dTIwMzA8dGQ+UHJlZml4IG9yIHN1ZmZpeAorICogICAgICAgICAgICAgICAgICAgPHRkPk11bHRpcGx5IGJ5IDEwMDAgYW5kIHNob3cgYXMgcGVyIG1pbGxlPC90cj4KKyAqIDx0cj48dGQ+JiM5Mjt1MDBBNDx0ZD5QcmVmaXggb3Igc3VmZml4CisgKiAgICAgICAgICAgICAgICAgICA8dGQ+Q3VycmVuY3kgc2lnbiwgcmVwbGFjZWQgYnkgY3VycmVuY3kgc3ltYm9sLiAgSWYKKyAqICAgICAgICAgICAgICAgICAgIGRvdWJsZWQsIHJlcGxhY2VkIGJ5IGludGVybmF0aW9uYWwgY3VycmVuY3kgc3ltYm9sLgorICogICAgICAgICAgICAgICAgICAgSWYgcHJlc2VudCBpbiBhIHBhdHRlcm4sIHRoZSBtb25ldGFyeSBkZWNpbWFsIHNlcGFyYXRvcgorICogICAgICAgICAgICAgICAgICAgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWNpbWFsIHNlcGFyYXRvci48L3RyPgorICogPHRyPjx0ZD4nPHRkPlByZWZpeCBvciBzdWZmaXgKKyAqICAgICAgICAgIDx0ZD5Vc2VkIHRvIHF1b3RlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHByZWZpeCBvciBzdWZmaXgsCisgKiAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIDxjb2RlPiInIycjIjwvY29kZT4gZm9ybWF0cyAxMjMgdG8KKyAqICAgICAgICAgICAgICA8Y29kZT4iIzEyMyI8L2NvZGU+LiAgVG8gY3JlYXRlIGEgc2luZ2xlIHF1b3RlCisgKiAgICAgICAgICAgICAgaXRzZWxmLCB1c2UgdHdvIGluIGEgcm93OiA8Y29kZT4iIyBvJydjbG9jayI8L2NvZGU+LjwvdHI+CisgKiA8dHI+PHRkPjxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAqICAgICAgICAgKjx0ZD5QcmVmaXggb3Igc3VmZml4IGJvdW5kYXJ5CisgKiAgICAgICAgICA8dGQ+UGFkIGVzY2FwZSwgcHJlY2VkZXMgcGFkIGNoYXJhY3RlcjwvdHI+CisgKiA8L3RhYmxlPgorICogPC9wcmU+CisgKgorICoKKyAqIEBzZWUgICAgICAgICAgamF2YS50ZXh0LkZvcm1hdAorICogQHNlZSAgICAgICAgICBOdW1iZXJGb3JtYXQKKyAqIEBhdXRob3IgICAgICAgTWFyayBEYXZpcworICogQGF1dGhvciAgICAgICBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNpbWFsRm9ybWF0IGV4dGVuZHMgTnVtYmVyRm9ybWF0IHsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIERlY2ltYWxGb3JtYXQgdXNpbmcgdGhlIGRlZmF1bHQgcGF0dGVybiBhbmQgc3ltYm9scworICAgICAqIGZvciB0aGUgZGVmYXVsdCBsb2NhbGUuIFRoaXMgaXMgYSBjb252ZW5pZW50IHdheSB0byBvYnRhaW4gYQorICAgICAqIERlY2ltYWxGb3JtYXQgd2hlbiBpbnRlcm5hdGlvbmFsaXphdGlvbiBpcyBub3QgdGhlIG1haW4gY29uY2Vybi4KKyAgICAgKiA8cD4KKyAgICAgKiBUbyBvYnRhaW4gc3RhbmRhcmQgZm9ybWF0cyBmb3IgYSBnaXZlbiBsb2NhbGUsIHVzZSB0aGUgZmFjdG9yeSBtZXRob2RzCisgICAgICogb24gTnVtYmVyRm9ybWF0IHN1Y2ggYXMgZ2V0TnVtYmVySW5zdGFuY2UuIFRoZXNlIGZhY3RvcmllcyB3aWxsCisgICAgICogcmV0dXJuIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHN1Yi1jbGFzcyBvZiBOdW1iZXJGb3JtYXQgZm9yIGEgZ2l2ZW4KKyAgICAgKiBsb2NhbGUuCisgICAgICogQHNlZSBOdW1iZXJGb3JtYXQjZ2V0SW5zdGFuY2UKKyAgICAgKiBAc2VlIE51bWJlckZvcm1hdCNnZXROdW1iZXJJbnN0YW5jZQorICAgICAqIEBzZWUgTnVtYmVyRm9ybWF0I2dldEN1cnJlbmN5SW5zdGFuY2UKKyAgICAgKiBAc2VlIE51bWJlckZvcm1hdCNnZXRQZXJjZW50SW5zdGFuY2UKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgRGVjaW1hbEZvcm1hdCgpIHsKKyAgICAgICAgLy8gW05FV10KKyAgICAgICAgTG9jYWxlIGRlZiA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gZ2V0UGF0dGVybihkZWYsIDApOworICAgICAgICAvLyBBbHdheXMgYXBwbHlQYXR0ZXJuIGFmdGVyIHRoZSBzeW1ib2xzIGFyZSBzZXQKKyAgICAgICAgdGhpcy5zeW1ib2xzID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKGRlZik7CisgICAgICAgIGN1cnJlbmN5ID0gQ3VycmVuY3kuZ2V0SW5zdGFuY2UoZGVmKTsKKyAgICAgICAgYXBwbHlQYXR0ZXJuKHBhdHRlcm4sIGZhbHNlKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIERlY2ltYWxGb3JtYXQgZnJvbSB0aGUgZ2l2ZW4gcGF0dGVybiBhbmQgdGhlIHN5bWJvbHMKKyAgICAgKiBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLiBUaGlzIGlzIGEgY29udmVuaWVudCB3YXkgdG8gb2J0YWluIGEKKyAgICAgKiBEZWNpbWFsRm9ybWF0IHdoZW4gaW50ZXJuYXRpb25hbGl6YXRpb24gaXMgbm90IHRoZSBtYWluIGNvbmNlcm4uCisgICAgICogPHA+CisgICAgICogVG8gb2J0YWluIHN0YW5kYXJkIGZvcm1hdHMgZm9yIGEgZ2l2ZW4gbG9jYWxlLCB1c2UgdGhlIGZhY3RvcnkgbWV0aG9kcworICAgICAqIG9uIE51bWJlckZvcm1hdCBzdWNoIGFzIGdldE51bWJlckluc3RhbmNlLiBUaGVzZSBmYWN0b3JpZXMgd2lsbAorICAgICAqIHJldHVybiB0aGUgbW9zdCBhcHByb3ByaWF0ZSBzdWItY2xhc3Mgb2YgTnVtYmVyRm9ybWF0IGZvciBhIGdpdmVuCisgICAgICogbG9jYWxlLgorICAgICAqIEBwYXJhbSBwYXR0ZXJuIEEgbm9uLWxvY2FsaXplZCBwYXR0ZXJuIHN0cmluZy4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gcGF0dGVybiBpcyBpbnZhbGlkLgorICAgICAqIEBzZWUgTnVtYmVyRm9ybWF0I2dldEluc3RhbmNlCisgICAgICogQHNlZSBOdW1iZXJGb3JtYXQjZ2V0TnVtYmVySW5zdGFuY2UKKyAgICAgKiBAc2VlIE51bWJlckZvcm1hdCNnZXRDdXJyZW5jeUluc3RhbmNlCisgICAgICogQHNlZSBOdW1iZXJGb3JtYXQjZ2V0UGVyY2VudEluc3RhbmNlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIERlY2ltYWxGb3JtYXQoU3RyaW5nIHBhdHRlcm4pIHsKKyAgICAvLyBBbHdheXMgYXBwbHlQYXR0ZXJuIGFmdGVyIHRoZSBzeW1ib2xzIGFyZSBzZXQKKyAgICAgICAgTG9jYWxlIGRlZiA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgIHRoaXMuc3ltYm9scyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhkZWYpOworICAgICAgICBjdXJyZW5jeSA9IEN1cnJlbmN5LmdldEluc3RhbmNlKGRlZik7CisgICAgICAgIGFwcGx5UGF0dGVybiggcGF0dGVybiwgZmFsc2UgKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIERlY2ltYWxGb3JtYXQgZnJvbSB0aGUgZ2l2ZW4gcGF0dGVybiBhbmQgc3ltYm9scy4KKyAgICAgKiBVc2UgdGhpcyBjb25zdHJ1Y3RvciB3aGVuIHlvdSBuZWVkIHRvIGNvbXBsZXRlbHkgY3VzdG9taXplIHRoZQorICAgICAqIGJlaGF2aW9yIG9mIHRoZSBmb3JtYXQuCisgICAgICogPHA+CisgICAgICogVG8gb2J0YWluIHN0YW5kYXJkIGZvcm1hdHMgZm9yIGEgZ2l2ZW4KKyAgICAgKiBsb2NhbGUsIHVzZSB0aGUgZmFjdG9yeSBtZXRob2RzIG9uIE51bWJlckZvcm1hdCBzdWNoIGFzCisgICAgICogZ2V0SW5zdGFuY2Ugb3IgZ2V0Q3VycmVuY3lJbnN0YW5jZS4gSWYgeW91IG5lZWQgb25seSBtaW5vciBhZGp1c3RtZW50cworICAgICAqIHRvIGEgc3RhbmRhcmQgZm9ybWF0LCB5b3UgY2FuIG1vZGlmeSB0aGUgZm9ybWF0IHJldHVybmVkIGJ5CisgICAgICogYSBOdW1iZXJGb3JtYXQgZmFjdG9yeSBtZXRob2QuCisgICAgICogQHBhcmFtIHBhdHRlcm4gYSBub24tbG9jYWxpemVkIHBhdHRlcm4gc3RyaW5nCisgICAgICogQHBhcmFtIHN5bWJvbHMgdGhlIHNldCBvZiBzeW1ib2xzIHRvIGJlIHVzZWQKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gcGF0dGVybiBpcyBpbnZhbGlkCisgICAgICogQHNlZSBOdW1iZXJGb3JtYXQjZ2V0SW5zdGFuY2UKKyAgICAgKiBAc2VlIE51bWJlckZvcm1hdCNnZXROdW1iZXJJbnN0YW5jZQorICAgICAqIEBzZWUgTnVtYmVyRm9ybWF0I2dldEN1cnJlbmN5SW5zdGFuY2UKKyAgICAgKiBAc2VlIE51bWJlckZvcm1hdCNnZXRQZXJjZW50SW5zdGFuY2UKKyAgICAgKiBAc2VlIERlY2ltYWxGb3JtYXRTeW1ib2xzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIERlY2ltYWxGb3JtYXQgKFN0cmluZyBwYXR0ZXJuLCBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW1ib2xzKSB7CisgICAgICAgIC8vIEFsd2F5cyBhcHBseVBhdHRlcm4gYWZ0ZXIgdGhlIHN5bWJvbHMgYXJlIHNldAorICAgICAgICB0aGlzLnN5bWJvbHMgPSAoRGVjaW1hbEZvcm1hdFN5bWJvbHMpIHN5bWJvbHMuY2xvbmUoKTsKKyAgICAgICAgc2V0Q3VycmVuY3lGb3JTeW1ib2xzKCk7CisgICAgICAgIGFwcGx5UGF0dGVybiggcGF0dGVybiwgZmFsc2UgKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdCdWZmZXIgZm9ybWF0KGRvdWJsZSBudW1iZXIsIFN0cmluZ0J1ZmZlciByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBmaWVsZFBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgLy9GUDpmaWVsZFBvc2l0aW9uLnNldEJlZ2luSW5kZXgoMCk7CisgICAgICAgIC8vRlA6ZmllbGRQb3NpdGlvbi5zZXRFbmRJbmRleCgwKTsKKworICAgICAgICBpZiAoRG91YmxlLmlzTmFOKG51bWJlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vRlA6aWYgKGZpZWxkUG9zaXRpb24uZ2V0RmllbGQoKSA9PSBOdW1iZXJGb3JtYXQuSU5URUdFUl9GSUVMRCkKKyAgICAgICAgICAgIC8vRlA6ZmllbGRQb3NpdGlvbi5zZXRCZWdpbkluZGV4KHJlc3VsdC5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3ltYm9scy5nZXROYU4oKSk7CisKKyAgICAgICAgICAgIC8vRlA6aWYgKGZpZWxkUG9zaXRpb24uZ2V0RmllbGQoKSA9PSBOdW1iZXJGb3JtYXQuSU5URUdFUl9GSUVMRCkKKyAgICAgICAgICAgIC8vRlA6ZmllbGRQb3NpdGlvbi5zZXRFbmRJbmRleChyZXN1bHQubGVuZ3RoKCkpOworCisgICAgICAgICAgICBhZGRQYWRkaW5nKHJlc3VsdCwgZmFsc2UsIGZhbHNlIC8qaWdub3JlZCovKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBEZXRlY3Rpbmcgd2hldGhlciBhIGRvdWJsZSBpcyBuZWdhdGl2ZSBpcyBlYXN5IHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorICAgICAgICAgKiB0aGUgdmFsdWUgLTAuMC4gIFRoaXMgaXMgYSBkb3VibGUgd2hpY2ggaGFzIGEgemVybyBtYW50aXNzYSAoYW5kCisgICAgICAgICAqIGV4cG9uZW50KSwgYnV0IGEgbmVnYXRpdmUgc2lnbiBiaXQuICBJdCBpcyBzZW1hbnRpY2FsbHkgZGlzdGluY3QgZnJvbQorICAgICAgICAgKiBhIHplcm8gd2l0aCBhIHBvc2l0aXZlIHNpZ24gYml0LCBhbmQgdGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQKKyAgICAgICAgICogdG8gY2VydGFpbiBraW5kcyBvZiBjb21wdXRhdGlvbnMuICBIb3dldmVyLCBpdCdzIGEgbGl0dGxlIHRyaWNreSB0bworICAgICAgICAgKiBkZXRlY3QsIHNpbmNlICgtMC4wID09IDAuMCkgYW5kICEoLTAuMCA8IDAuMCkuICBIb3cgdGhlbiwgeW91IG1heQorICAgICAgICAgKiBhc2ssIGRvZXMgaXQgYmVoYXZlIGRpc3RpbmN0bHkgZnJvbSArMC4wPyAgV2VsbCwgMS8oLTAuMCkgPT0KKyAgICAgICAgICogLUluZmluaXR5LiAgUHJvcGVyIGRldGVjdGlvbiBvZiAtMC4wIGlzIG5lZWRlZCB0byBkZWFsIHdpdGggdGhlCisgICAgICAgICAqIGlzc3VlcyByYWlzZWQgYnkgYnVncyA0MTA2NjU4LCA0MTA2NjY3LCBhbmQgNDE0NzcwNi4gIExpdSA3LzYvOTguCisgICAgICAgICAqLworICAgICAgICBib29sZWFuIGlzTmVnYXRpdmUgPSAobnVtYmVyIDwgMC4wKSB8fCAobnVtYmVyID09IDAuMCAmJiAxL251bWJlciA8IDAuMCk7CisgICAgICAgIGlmIChpc05lZ2F0aXZlKSBudW1iZXIgPSAtbnVtYmVyOworCisgICAgICAgIC8vIERvIHRoaXMgQkVGT1JFIGNoZWNraW5nIHRvIHNlZSBpZiB2YWx1ZSBpcyBpbmZpbml0ZSEKKyAgICAgICAgaWYgKG11bHRpcGxpZXIgIT0gMSkgbnVtYmVyICo9IG11bHRpcGxpZXI7CisKKyAgICAgICAgLy8gQXBwbHkgcm91bmRpbmcgYWZ0ZXIgbXVsdGlwbGllcgorICAgICAgICBpZiAocm91bmRpbmdEb3VibGUgPiAwLjApIHsKKyAgICAgICAgICAgIG51bWJlciA9IHJvdW5kaW5nRG91YmxlCisgICAgICAgICAgICAgICAgKiByb3VuZChudW1iZXIgLyByb3VuZGluZ0RvdWJsZSwgcm91bmRpbmdNb2RlLCBpc05lZ2F0aXZlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChEb3VibGUuaXNJbmZpbml0ZShudW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGlzTmVnYXRpdmUgPyBuZWdhdGl2ZVByZWZpeCA6IHBvc2l0aXZlUHJlZml4KTsKKworICAgICAgICAgICAgLy9GUDppZiAoZmllbGRQb3NpdGlvbi5nZXRGaWVsZCgpID09IE51bWJlckZvcm1hdC5JTlRFR0VSX0ZJRUxEKQorICAgICAgICAgICAgLy9GUDpmaWVsZFBvc2l0aW9uLnNldEJlZ2luSW5kZXgocmVzdWx0Lmxlbmd0aCgpKTsKKworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzeW1ib2xzLmdldEluZmluaXR5KCkpOworCisgICAgICAgICAgICAvL0ZQOmlmIChmaWVsZFBvc2l0aW9uLmdldEZpZWxkKCkgPT0gTnVtYmVyRm9ybWF0LklOVEVHRVJfRklFTEQpCisgICAgICAgICAgICAvL0ZQOmV5ZGZpZWxkUG9zaXRpb24uc2V0RW5kSW5kZXgocmVzdWx0Lmxlbmd0aCgpKTsKKworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpc05lZ2F0aXZlID8gbmVnYXRpdmVTdWZmaXggOiBwb3NpdGl2ZVN1ZmZpeCk7CisKKyAgICAgICAgICAgIGFkZFBhZGRpbmcocmVzdWx0LCB0cnVlLCBpc05lZ2F0aXZlKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBndWFyYW50ZWVkIGEgbm9ubmVnYXRpdmUgZmluaXRlCisgICAgICAgIC8vIG51bWJlci4KKyAgICAgICAgc3luY2hyb25pemVkKGRpZ2l0TGlzdCkgeworICAgICAgICAgICAgZGlnaXRMaXN0LnNldChudW1iZXIsIHVzZUV4cG9uZW50aWFsTm90YXRpb24gPworICAgICAgICAgICAgICAgICAgICAgIGdldE1pbmltdW1JbnRlZ2VyRGlnaXRzKCkgKyBnZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSA6CisgICAgICAgICAgICAgICAgICAgICAgZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCksCisgICAgICAgICAgICAgICAgICAgICAgIXVzZUV4cG9uZW50aWFsTm90YXRpb24pOworCisgICAgICAgICAgICByZXR1cm4gc3ViZm9ybWF0KHJlc3VsdCwgZmllbGRQb3NpdGlvbiwgaXNOZWdhdGl2ZSwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFJvdW5kIGEgZG91YmxlIHZhbHVlIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgICAqIGdpdmVuIG1vZGUuCisgICAgICogQHBhcmFtIGEgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgdG8gYmUgcm91bmRlZAorICAgICAqIEBwYXJhbSBtb2RlIGEgQmlnRGVjaW1hbCByb3VuZGluZyBtb2RlCisgICAgICogQHBhcmFtIGlzTmVnYXRpdmUgdHJ1ZSBpZiB0aGUgbnVtYmVyIHRvIGJlIHJvdW5kZWQgaXMgbmVnYXRpdmUKKyAgICAgKiBAcmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgcm91bmRlZCByZXN1bHQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBkb3VibGUgcm91bmQoZG91YmxlIGEsIGludCBtb2RlLCBib29sZWFuIGlzTmVnYXRpdmUpIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNhc2UgamF2YS5tYXRoLkJpZ0RlY2ltYWwuUk9VTkRfQ0VJTElORzoKKyAgICAgICAgICAgIHJldHVybiBpc05lZ2F0aXZlID8gTWF0aC5mbG9vcihhKSA6IE1hdGguY2VpbChhKTsKKyAgICAgICAgY2FzZSBqYXZhLm1hdGguQmlnRGVjaW1hbC5ST1VORF9GTE9PUjoKKyAgICAgICAgICAgIHJldHVybiBpc05lZ2F0aXZlID8gTWF0aC5jZWlsKGEpIDogTWF0aC5mbG9vcihhKTsKKyAgICAgICAgY2FzZSBqYXZhLm1hdGguQmlnRGVjaW1hbC5ST1VORF9ET1dOOgorICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoYSk7CisgICAgICAgIGNhc2UgamF2YS5tYXRoLkJpZ0RlY2ltYWwuUk9VTkRfVVA6CisgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKGEpOworICAgICAgICBjYXNlIGphdmEubWF0aC5CaWdEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTjoKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRvIGp1c3QgcmV0dXJuIE1hdGgucmludChhKSwgYnV0IHRoaXMKKyAgICAgICAgICAgIC8vIGRvZXNuJ3Qgd29yayBpbiBzb21lIFZNcy4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZiA9IE1hdGguZmxvb3IoYSk7CisgICAgICAgICAgICAgICAgaWYgKChhIC0gZikgIT0gMC41KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJpbnQoYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGYgLz0gMi4wOworICAgICAgICAgICAgICAgIHJldHVybiBmID09IE1hdGguZmxvb3IoZikgPyBNYXRoLmZsb29yKGEpIDogKE1hdGguZmxvb3IoYSkgKyAxLjApOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIGphdmEubWF0aC5CaWdEZWNpbWFsLlJPVU5EX0hBTEZfRE9XTjoKKyAgICAgICAgICAgIHJldHVybiAoKGEgLSBNYXRoLmZsb29yKGEpKSA8PSAwLjUpID8gTWF0aC5mbG9vcihhKSA6IE1hdGguY2VpbChhKTsKKyAgICAgICAgY2FzZSBqYXZhLm1hdGguQmlnRGVjaW1hbC5ST1VORF9IQUxGX1VQOgorICAgICAgICAgICAgcmV0dXJuICgoYSAtIE1hdGguZmxvb3IoYSkpIDwgMC41KSA/IE1hdGguZmxvb3IoYSkgOiBNYXRoLmNlaWwoYSk7CisgICAgICAgIGNhc2UgamF2YS5tYXRoLkJpZ0RlY2ltYWwuUk9VTkRfVU5ORUNFU1NBUlk6CisgICAgICAgICAgICBpZiAoYSAhPSBNYXRoLmZsb29yKGEpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyaXRobWV0aWNFeGNlcHRpb24oIlJvdW5kaW5nIG5lY2Vzc2FyeSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHJvdW5kaW5nIG1vZGU6ICIgKyBtb2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdCdWZmZXIgZm9ybWF0KGxvbmcgbnVtYmVyLCBTdHJpbmdCdWZmZXIgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gZmllbGRQb3NpdGlvbikKKyAgICB7CisgICAgICAgIC8vRlA6ZmllbGRQb3NpdGlvbi5zZXRCZWdpbkluZGV4KDApOworICAgICAgICAvL0ZQOmZpZWxkUG9zaXRpb24uc2V0RW5kSW5kZXgoMCk7CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIHRvIGRvIHJvdW5kaW5nLCB3ZSBuZWVkIHRvIG1vdmUgaW50byB0aGUgQmlnRGVjaW1hbAorICAgICAgICAvLyBkb21haW4gaW4gb3JkZXIgdG8gZG8gZGl2aWRlL211bHRpcGx5IGNvcnJlY3RseS4KKyAgICAgICAgLy8gW05FV10KKyAgICAgICAgaWYgKHJvdW5kaW5nSW5jcmVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXQoamF2YS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZihudW1iZXIpLCByZXN1bHQsIGZpZWxkUG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBpc05lZ2F0aXZlID0gKG51bWJlciA8IDApOworICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgbnVtYmVyID0gLW51bWJlcjsKKworICAgICAgICAvLyBJbiBnZW5lcmFsLCBsb25nIHZhbHVlcyBhbHdheXMgcmVwcmVzZW50IHJlYWwgZmluaXRlIG51bWJlcnMsIHNvCisgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yICsvLSBJbmZpbml0eSBvciBOYU4uICBIb3dldmVyLCB0aGVyZQorICAgICAgICAvLyBpcyBvbmUgY2FzZSB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgb2Y6ICBUaGUgbXVsdGlwbGllciBjYW4gcHVzaAorICAgICAgICAvLyBhIG51bWJlciBuZWFyIE1JTl9WQUxVRSBvciBNQVhfVkFMVUUgb3V0c2lkZSB0aGUgbGVnYWwgcmFuZ2UuICBXZQorICAgICAgICAvLyBjaGVjayBmb3IgdGhpcyBiZWZvcmUgbXVsdGlwbHlpbmcsIGFuZCBpZiBpdCBoYXBwZW5zIHdlIHVzZSBCaWdJbnRlZ2VyCisgICAgICAgIC8vIGluc3RlYWQuCisgICAgICAgIC8vIFtORVddCisgICAgICAgIGlmIChtdWx0aXBsaWVyICE9IDEpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gdG9vQmlnID0gZmFsc2U7CisgICAgICAgICAgICBpZiAobnVtYmVyIDwgMCkgeyAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBudW1iZXIgPT0gTG9uZy5NSU5fVkFMVUUKKyAgICAgICAgICAgICAgICBsb25nIGN1dG9mZiA9IExvbmcuTUlOX1ZBTFVFIC8gbXVsdGlwbGllcjsKKyAgICAgICAgICAgICAgICB0b29CaWcgPSAobnVtYmVyIDwgY3V0b2ZmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9uZyBjdXRvZmYgPSBMb25nLk1BWF9WQUxVRSAvIG11bHRpcGxpZXI7CisgICAgICAgICAgICAgICAgdG9vQmlnID0gKG51bWJlciA+IGN1dG9mZik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9vQmlnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdChCaWdJbnRlZ2VyLnZhbHVlT2YoaXNOZWdhdGl2ZSA/IC1udW1iZXIgOiBudW1iZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBmaWVsZFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG51bWJlciAqPSBtdWx0aXBsaWVyOworICAgICAgICBzeW5jaHJvbml6ZWQoZGlnaXRMaXN0KSB7CisgICAgICAgICAgICBkaWdpdExpc3Quc2V0KG51bWJlciwgdXNlRXhwb25lbnRpYWxOb3RhdGlvbiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE1pbmltdW1JbnRlZ2VyRGlnaXRzKCkgKyBnZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSA6IDApOworCisgICAgICAgICAgICByZXR1cm4gc3ViZm9ybWF0KHJlc3VsdCwgZmllbGRQb3NpdGlvbiwgaXNOZWdhdGl2ZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogRm9ybWF0IGEgQmlnSW50ZWdlciBudW1iZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZ0J1ZmZlciBmb3JtYXQoQmlnSW50ZWdlciBudW1iZXIsIFN0cmluZ0J1ZmZlciByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBmaWVsZFBvc2l0aW9uKSB7CisgICAgICAgIC8vIElmIHdlIGFyZSB0byBkbyByb3VuZGluZywgd2UgbmVlZCB0byBtb3ZlIGludG8gdGhlIEJpZ0RlY2ltYWwKKyAgICAgICAgLy8gZG9tYWluIGluIG9yZGVyIHRvIGRvIGRpdmlkZS9tdWx0aXBseSBjb3JyZWN0bHkuCisgICAgICAgIGlmIChyb3VuZGluZ0luY3JlbWVudCAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0KG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChudW1iZXIpLCByZXN1bHQsIGZpZWxkUG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG11bHRpcGxpZXIgIT0gMSkgeworICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyLm11bHRpcGx5KEJpZ0ludGVnZXIudmFsdWVPZihtdWx0aXBsaWVyKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBndWFyYW50ZWVkIGEgbm9ubmVnYXRpdmUgZmluaXRlCisgICAgICAgIC8vIG51bWJlci4KKyAgICAgICAgc3luY2hyb25pemVkKGRpZ2l0TGlzdCkgeworICAgICAgICAgICAgZGlnaXRMaXN0LnNldChudW1iZXIsIHVzZUV4cG9uZW50aWFsTm90YXRpb24gPworICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygpICsgZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCkgOiAwKTsKKworICAgICAgICAgICAgcmV0dXJuIHN1YmZvcm1hdChyZXN1bHQsIGZpZWxkUG9zaXRpb24sIG51bWJlci5zaWdudW0oKSA8IDAsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBGb3JtYXQgYSBCaWdEZWNpbWFsIG51bWJlci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nQnVmZmVyIGZvcm1hdChqYXZhLm1hdGguQmlnRGVjaW1hbCBudW1iZXIsIFN0cmluZ0J1ZmZlciByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBmaWVsZFBvc2l0aW9uKSB7CisgICAgICAgIGlmIChtdWx0aXBsaWVyICE9IDEpIHsKKyAgICAgICAgICAgIG51bWJlciA9IG51bWJlci5tdWx0aXBseShqYXZhLm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKG11bHRpcGxpZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyb3VuZGluZ0luY3JlbWVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIuZGl2aWRlKHJvdW5kaW5nSW5jcmVtZW50LCAwLCByb3VuZGluZ01vZGUpCisgICAgICAgICAgICAgICAgICAgIC5tdWx0aXBseShyb3VuZGluZ0luY3JlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBndWFyYW50ZWVkIGEgbm9ubmVnYXRpdmUgZmluaXRlCisgICAgICAgIC8vIG51bWJlci4KKyAgICAgICAgc3luY2hyb25pemVkKGRpZ2l0TGlzdCkgeworICAgICAgICAgICAgZGlnaXRMaXN0LnNldChudW1iZXIsIHVzZUV4cG9uZW50aWFsTm90YXRpb24gPworICAgICAgICAgICAgICAgICAgICAgIGdldE1pbmltdW1JbnRlZ2VyRGlnaXRzKCkgKyBnZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSA6CisgICAgICAgICAgICAgICAgICAgICAgZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCksCisgICAgICAgICAgICAgICAgICAgICAgIXVzZUV4cG9uZW50aWFsTm90YXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHN1YmZvcm1hdChyZXN1bHQsIGZpZWxkUG9zaXRpb24sIG51bWJlci5zaWdudW0oKSA8IDAsIGZhbHNlKTsKKyAgICAgICAgfSAgICAgICAgCisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogRm9ybWF0IGEgQmlnRGVjaW1hbCBudW1iZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZ0J1ZmZlciBmb3JtYXQoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsIG51bWJlciwgU3RyaW5nQnVmZmVyIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIGZpZWxkUG9zaXRpb24pIHsKKyAgICAgICAgLyogVGhpcyBtZXRob2QgaXMganVzdCBhIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgamF2YS5tYXRoLkJpZ0RlY2ltYWwKKyAgICAgICAgICogbWV0aG9kIGZvciBub3cuICBJdCBpc24ndCB2ZXJ5IGVmZmljaWVudCBzaW5jZSBpdCBtdXN0IGNyZWF0ZSBhCisgICAgICAgICAqIGNvbnZlcnNpb24gb2JqZWN0IHRvIGRvIG1hdGggb24gdGhlIHJvdW5kaW5nIGluY3JlbWVudC4gIEluIHRoZQorICAgICAgICAgKiBmdXR1cmUgd2UgbWF5IHRyeSB0byBjbGVhbiB0aGlzIHVwLCBvciBldmVuIGJldHRlciwgbGltaXQgb3VyIHN1cHBvcnQKKyAgICAgICAgICogdG8ganVzdCBvbmUgZmxhdm9yIG9mIEJpZ0RlY2ltYWwuCisgICAgICAgICAqLworICAgICAgICBpZiAobXVsdGlwbGllciAhPSAxKSB7CisgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIubXVsdGlwbHkoY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobXVsdGlwbGllcikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJvdW5kaW5nSW5jcmVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCByaSA9IG5ldyBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwocm91bmRpbmdJbmNyZW1lbnQpOworICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyLmRpdmlkZShyaSwgMCwgcm91bmRpbmdNb2RlKQorICAgICAgICAgICAgICAgICAgICAubXVsdGlwbHkocmkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhcmUgZ3VhcmFudGVlZCBhIG5vbm5lZ2F0aXZlIGZpbml0ZQorICAgICAgICAvLyBudW1iZXIuCisgICAgICAgIHN5bmNocm9uaXplZChkaWdpdExpc3QpIHsKKyAgICAgICAgICAgIGRpZ2l0TGlzdC5zZXQobnVtYmVyLCB1c2VFeHBvbmVudGlhbE5vdGF0aW9uID8KKyAgICAgICAgICAgICAgICAgICAgICBnZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygpICsgZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCkgOgorICAgICAgICAgICAgICAgICAgICAgIGdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpLAorICAgICAgICAgICAgICAgICAgICAgICF1c2VFeHBvbmVudGlhbE5vdGF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBzdWJmb3JtYXQocmVzdWx0LCBmaWVsZFBvc2l0aW9uLCBudW1iZXIuc2lnbnVtKCkgPCAwLCBmYWxzZSk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIGEgZ3JvdXBpbmcgc2VwYXJhdG9yIGJlbG9uZ3MgYXQgdGhlIGdpdmVuCisgICAgICogcG9zaXRpb24sIGJhc2VkIG9uIHdoZXRoZXIgZ3JvdXBpbmcgaXMgaW4gdXNlIGFuZCB0aGUgdmFsdWVzIG9mCisgICAgICogdGhlIHByaW1hcnkgYW5kIHNlY29uZGFyeSBncm91cGluZyBpbnRlcnZhbC4KKyAgICAgKiBAcGFyYW0gcG9zIHRoZSBudW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgdG8gdGhlIHJpZ2h0IG9mCisgICAgICogdGhlIGN1cnJlbnQgcG9zaXRpb24uICBaZXJvIGluZGljYXRlcyB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlCisgICAgICogcmlnaHRtb3N0IGludGVnZXIgZGlnaXQuCisgICAgICogQHJldHVybiB0cnVlIGlmIGEgZ3JvdXBpbmcgY2hhcmFjdGVyIGJlbG9uZ3MgYXQgdGhlIGN1cnJlbnQKKyAgICAgKiBwb3NpdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNHcm91cGluZ1Bvc2l0aW9uKGludCBwb3MpIHsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGlzR3JvdXBpbmdVc2VkKCkgJiYgKHBvcyA+IDApICYmIChncm91cGluZ1NpemUgPiAwKSkgeworICAgICAgICAgICAgaWYgKChncm91cGluZ1NpemUyID4gMCkgJiYgKHBvcyA+IGdyb3VwaW5nU2l6ZSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAoKHBvcyAtIGdyb3VwaW5nU2l6ZSkgJSBncm91cGluZ1NpemUyKSA9PSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwb3MgJSBncm91cGluZ1NpemUgPT0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBsZXRlIHRoZSBmb3JtYXR0aW5nIG9mIGEgZmluaXRlIG51bWJlci4gIE9uIGVudHJ5LCB0aGUgZGlnaXRMaXN0IG11c3QKKyAgICAgKiBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgY29ycmVjdCBkaWdpdHMuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgc3ViZm9ybWF0KFN0cmluZ0J1ZmZlciByZXN1bHQsIEZpZWxkUG9zaXRpb24gZmllbGRQb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzTmVnYXRpdmUsIGJvb2xlYW4gaXNJbnRlZ2VyKQorICAgIHsKKyAgICAgICAgLy8gTk9URTogVGhpcyBpc24ndCByZXF1aXJlZCBhbnltb3JlIGJlY2F1c2UgRGlnaXRMaXN0IHRha2VzIGNhcmUgb2YgdGhpcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gIC8vIFRoZSBuZWdhdGl2ZSBvZiB0aGUgZXhwb25lbnQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcKKyAgICAgICAgLy8gIC8vIHplcm9zIGJldHdlZW4gdGhlIGRlY2ltYWwgYW5kIHRoZSBmaXJzdCBub24temVybyBkaWdpdCwgZm9yCisgICAgICAgIC8vICAvLyBhIHZhbHVlIDwgMC4xIChlLmcuLCBmb3IgMC4wMDEyMywgLWZFeHBvbmVudCA9PSAyKS4gIElmIHRoaXMKKyAgICAgICAgLy8gIC8vIGlzIG1vcmUgdGhhbiB0aGUgbWF4aW11bSBmcmFjdGlvbiBkaWdpdHMsIHRoZW4gd2UgaGF2ZSBhbiB1bmRlcmZsb3cKKyAgICAgICAgLy8gIC8vIGZvciB0aGUgcHJpbnRlZCByZXByZXNlbnRhdGlvbi4gIFdlIHJlY29nbml6ZSB0aGlzIGhlcmUgYW5kIHNldAorICAgICAgICAvLyAgLy8gdGhlIERpZ2l0TGlzdCByZXByZXNlbnRhdGlvbiB0byB6ZXJvIGluIHRoaXMgc2l0dWF0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyAgaWYgKC1kaWdpdExpc3QuZGVjaW1hbEF0ID49IGdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpKQorICAgICAgICAvLyAgeworICAgICAgICAvLyAgICAgIGRpZ2l0TGlzdC5jb3VudCA9IDA7CisgICAgICAgIC8vICB9CisKKyAgICAgICAgaW50IGk7CisgICAgICAgIGNoYXIgemVybyA9IHN5bWJvbHMuZ2V0WmVyb0RpZ2l0KCk7CisgICAgICAgIGludCB6ZXJvRGVsdGEgPSB6ZXJvIC0gJzAnOyAvLyAnMCcgaXMgdGhlIERpZ2l0TGlzdCByZXByZXNlbnRhdGlvbiBvZiB6ZXJvCisgICAgICAgIGNoYXIgZ3JvdXBpbmcgPSBzeW1ib2xzLmdldEdyb3VwaW5nU2VwYXJhdG9yKCk7CisgICAgICAgIGNoYXIgZGVjaW1hbCA9IGlzQ3VycmVuY3lGb3JtYXQgPworICAgICAgICAgICAgc3ltYm9scy5nZXRNb25ldGFyeURlY2ltYWxTZXBhcmF0b3IoKSA6CisgICAgICAgICAgICBzeW1ib2xzLmdldERlY2ltYWxTZXBhcmF0b3IoKTsKKyAgICAgICAgaW50IG1heEludERpZyA9IGdldE1heGltdW1JbnRlZ2VyRGlnaXRzKCk7CisgICAgICAgIGludCBtaW5JbnREaWcgPSBnZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygpOworCisgICAgICAgIC8qIFBlciBidWcgNDE0NzcwNiwgRGVjaW1hbEZvcm1hdCBtdXN0IHJlc3BlY3QgdGhlIHNpZ24gb2YgbnVtYmVycyB3aGljaAorICAgICAgICAgKiBmb3JtYXQgYXMgemVyby4gIFRoaXMgYWxsb3dzIHNlbnNpYmxlIGNvbXB1dGF0aW9ucyBhbmQgcHJlc2VydmVzCisgICAgICAgICAqIHJlbGF0aW9ucyBzdWNoIGFzIHNpZ251bSgxL3gpID0gc2lnbnVtKHgpLCB3aGVyZSB4IGlzICtJbmZpbml0eSBvcgorICAgICAgICAgKiAtSW5maW5pdHkuICBQcmlvciB0byB0aGlzIGZpeCwgd2UgYWx3YXlzIGZvcm1hdHRlZCB6ZXJvIHZhbHVlcyBhcyBpZgorICAgICAgICAgKiB0aGV5IHdlcmUgcG9zaXRpdmUuICBMaXUgNy82Lzk4LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGRpZ2l0TGlzdC5pc1plcm8oKSkKKyAgICAgICAgeworICAgICAgICAgICAgZGlnaXRMaXN0LmRlY2ltYWxBdCA9IDA7IC8vIE5vcm1hbGl6ZQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChpc05lZ2F0aXZlID8gbmVnYXRpdmVQcmVmaXggOiBwb3NpdGl2ZVByZWZpeCk7CisKKyAgICAgICAgaWYgKHVzZUV4cG9uZW50aWFsTm90YXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlY29yZCBmaWVsZCBpbmZvcm1hdGlvbiBmb3IgY2FsbGVyLgorICAgICAgICAgICAgLy9GUDppZiAoZmllbGRQb3NpdGlvbi5nZXRGaWVsZCgpID09IE51bWJlckZvcm1hdC5JTlRFR0VSX0ZJRUxEKQorICAgICAgICAgICAgLy9GUDp7CisgICAgICAgICAgICAgICAgLy9GUDpmaWVsZFBvc2l0aW9uLnNldEJlZ2luSW5kZXgocmVzdWx0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAvL0ZQOmZpZWxkUG9zaXRpb24uc2V0RW5kSW5kZXgoLTEpOworICAgICAgICAgICAgLy9GUDp9CisgICAgICAgICAgICAvL0ZQOmVsc2UgaWYgKGZpZWxkUG9zaXRpb24uZ2V0RmllbGQoKSA9PSBOdW1iZXJGb3JtYXQuRlJBQ1RJT05fRklFTEQpCisgICAgICAgICAgICAvL0ZQOnsKKyAgICAgICAgICAgICAgICAvL0ZQOmZpZWxkUG9zaXRpb24uc2V0QmVnaW5JbmRleCgtMSk7CisgICAgICAgICAgICAvL0ZQOn0KKworICAgICAgICAgICAgLy8gTWluaW11bSBpbnRlZ2VyIGRpZ2l0cyBhcmUgaGFuZGxlZCBpbiBleHBvbmVudGlhbCBmb3JtYXQgYnkKKyAgICAgICAgICAgIC8vIGFkanVzdGluZyB0aGUgZXhwb25lbnQuICBGb3IgZXhhbXBsZSwgMC4wMTIzNCB3aXRoIDMgbWluaW11bQorICAgICAgICAgICAgLy8gaW50ZWdlciBkaWdpdHMgaXMgIjEyMy40RS00Ii4KKworICAgICAgICAgICAgLy8gTWF4aW11bSBpbnRlZ2VyIGRpZ2l0cyBhcmUgaW50ZXJwcmV0ZWQgYXMgaW5kaWNhdGluZyB0aGUKKyAgICAgICAgICAgIC8vIHJlcGVhdGluZyByYW5nZS4gIFRoaXMgaXMgdXNlZnVsIGZvciBlbmdpbmVlcmluZyBub3RhdGlvbiwgaW4KKyAgICAgICAgICAgIC8vIHdoaWNoIHRoZSBleHBvbmVudCBpcyByZXN0cmljdGVkIHRvIGEgbXVsdGlwbGUgb2YgMy4gIEZvcgorICAgICAgICAgICAgLy8gZXhhbXBsZSwgMC4wMTIzNCB3aXRoIDMgbWF4aW11bSBpbnRlZ2VyIGRpZ2l0cyBpcyAiMTIuMzRlLTMiLgorICAgICAgICAgICAgLy8gSWYgbWF4aW11bSBpbnRlZ2VyIGRpZ2l0cyBhcmUgZGVmaW5lZCBhbmQgYXJlIGxhcmdlciB0aGFuCisgICAgICAgICAgICAvLyBtaW5pbXVtIGludGVnZXIgZGlnaXRzLCB0aGVuIG1pbmltdW0gaW50ZWdlciBkaWdpdHMgYXJlCisgICAgICAgICAgICAvLyBpZ25vcmVkLgorCisgICAgICAgICAgICBpbnQgZXhwb25lbnQgPSBkaWdpdExpc3QuZGVjaW1hbEF0OworICAgICAgICAgICAgaWYgKG1heEludERpZyA+IDEgJiYgbWF4SW50RGlnICE9IG1pbkludERpZykgeworICAgICAgICAgICAgICAgIC8vIEEgZXhwb25lbnQgaW5jcmVtZW50IGlzIGRlZmluZWQ7IGFkanVzdCB0byBpdC4KKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IChleHBvbmVudCA+IDApID8gKGV4cG9uZW50IC0gMSkgLyBtYXhJbnREaWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGV4cG9uZW50IC8gbWF4SW50RGlnKSAtIDE7CisgICAgICAgICAgICAgICAgZXhwb25lbnQgKj0gbWF4SW50RGlnOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBObyBleHBvbmVudCBpbmNyZW1lbnQgaXMgZGVmaW5lZDsgdXNlIG1pbmltdW0gaW50ZWdlciBkaWdpdHMuCisgICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGFzIGluICIjRTAiLCBnZW5lcmF0ZSAxIGludGVnZXIgZGlnaXQuCisgICAgICAgICAgICAgICAgZXhwb25lbnQgLT0gKG1pbkludERpZyA+IDAgfHwgZ2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKCkgPiAwKQorICAgICAgICAgICAgICAgICAgICA/IG1pbkludERpZyA6IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIG5vdyBvdXRwdXQgYSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMsIGFuZCBtb3JlIGlmIHRoZXJlCisgICAgICAgICAgICAvLyBhcmUgbW9yZSBkaWdpdHMsIHVwIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMuICBXZQorICAgICAgICAgICAgLy8gcGxhY2UgdGhlIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlICJpbnRlZ2VyIiBkaWdpdHMsIHdoaWNoCisgICAgICAgICAgICAvLyBhcmUgdGhlIGZpcnN0IChkZWNpbWFsQXQgLSBleHBvbmVudCkgZGlnaXRzLgorICAgICAgICAgICAgaW50IG1pbmltdW1EaWdpdHMgPSBtaW5JbnREaWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBnZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoKTsKKyAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgaXMgaGFuZGxlZCBzcGVjaWFsbHkgaWYgdGhlIG51bWJlcgorICAgICAgICAgICAgLy8gaXMgemVybywgc2luY2UgdGhlbiB0aGVyZSBtYXkgYmUgbm8gZGlnaXRzLgorICAgICAgICAgICAgaW50IGludGVnZXJEaWdpdHMgPSBkaWdpdExpc3QuaXNaZXJvKCkgPyBtaW5JbnREaWcgOgorICAgICAgICAgICAgICAgIGRpZ2l0TGlzdC5kZWNpbWFsQXQgLSBleHBvbmVudDsKKyAgICAgICAgICAgIGludCB0b3RhbERpZ2l0cyA9IGRpZ2l0TGlzdC5jb3VudDsKKyAgICAgICAgICAgIGlmIChtaW5pbXVtRGlnaXRzID4gdG90YWxEaWdpdHMpIHRvdGFsRGlnaXRzID0gbWluaW11bURpZ2l0czsKKyAgICAgICAgICAgIGlmIChpbnRlZ2VyRGlnaXRzID4gdG90YWxEaWdpdHMpIHRvdGFsRGlnaXRzID0gaW50ZWdlckRpZ2l0czsKKworICAgICAgICAgICAgZm9yIChpPTA7IGk8dG90YWxEaWdpdHM7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbnRlZ2VyRGlnaXRzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVjb3JkIGZpZWxkIGluZm9ybWF0aW9uIGZvciBjYWxsZXIuCisgICAgICAgICAgICAgICAgICAgIC8vRlA6aWYgKGZpZWxkUG9zaXRpb24uZ2V0RmllbGQoKSA9PSBOdW1iZXJGb3JtYXQuSU5URUdFUl9GSUVMRCkKKyAgICAgICAgICAgICAgICAgICAgLy9GUDpmaWVsZFBvc2l0aW9uLnNldEVuZEluZGV4KHJlc3VsdC5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZWNpbWFsKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBSZWNvcmQgZmllbGQgaW5mb3JtYXRpb24gZm9yIGNhbGxlci4KKyAgICAgICAgICAgICAgICAgICAgLy9GUDppZiAoZmllbGRQb3NpdGlvbi5nZXRGaWVsZCgpID09IE51bWJlckZvcm1hdC5GUkFDVElPTl9GSUVMRCkKKyAgICAgICAgICAgICAgICAgICAgLy9GUDpmaWVsZFBvc2l0aW9uLnNldEJlZ2luSW5kZXgocmVzdWx0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoaSA8IGRpZ2l0TGlzdC5jb3VudCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcikoZGlnaXRMaXN0LmRpZ2l0c1tpXSArIHplcm9EZWx0YSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy9Gb3IgSUNVIGNvbXBhdGliaWxpdHkgYW5kIGZvcm1hdCAwIHRvIDBFMCB3aXRoIHBhdHRlcm4gIiNFMCIgW1JpY2hhcmQvR0NMXQorICAgICAgICAgICAgaWYgKGRpZ2l0TGlzdC5pc1plcm8oKSAmJiAodG90YWxEaWdpdHMgPT0wKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoemVybyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlY29yZCBmaWVsZCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgaWYgKGZpZWxkUG9zaXRpb24uZ2V0RmllbGQoKSA9PSBOdW1iZXJGb3JtYXQuSU5URUdFUl9GSUVMRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL0ZQOmlmIChmaWVsZFBvc2l0aW9uLmdldEVuZEluZGV4KCkgPCAwKQorICAgICAgICAgICAgICAgIC8vRlA6ZmllbGRQb3NpdGlvbi5zZXRFbmRJbmRleChyZXN1bHQubGVuZ3RoKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZmllbGRQb3NpdGlvbi5nZXRGaWVsZCgpID09IE51bWJlckZvcm1hdC5GUkFDVElPTl9GSUVMRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL0ZQOmlmIChmaWVsZFBvc2l0aW9uLmdldEJlZ2luSW5kZXgoKSA8IDApCisgICAgICAgICAgICAgICAgLy9GUDpmaWVsZFBvc2l0aW9uLnNldEJlZ2luSW5kZXgocmVzdWx0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAvL0ZQOmZpZWxkUG9zaXRpb24uc2V0RW5kSW5kZXgocmVzdWx0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlIGV4cG9uZW50IGlzIG91dHB1dCB1c2luZyB0aGUgcGF0dGVybi1zcGVjaWZpZWQgbWluaW11bQorICAgICAgICAgICAgLy8gZXhwb25lbnQgZGlnaXRzLiAgVGhlcmUgaXMgbm8gbWF4aW11bSBsaW1pdCB0byB0aGUgZXhwb25lbnQKKyAgICAgICAgICAgIC8vIGRpZ2l0cywgc2luY2UgdHJ1bmNhdGluZyB0aGUgZXhwb25lbnQgd291bGQgcmVzdWx0IGluIGFuCisgICAgICAgICAgICAvLyB1bmFjY2VwdGFibGUgaW5hY2N1cmFjeS4KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3ltYm9scy5nZXRFeHBvbmVudFNlcGFyYXRvcigpKTsKKworICAgICAgICAgICAgLy8gRm9yIHplcm8gdmFsdWVzLCB3ZSBmb3JjZSB0aGUgZXhwb25lbnQgdG8gemVyby4gIFdlCisgICAgICAgICAgICAvLyBtdXN0IGRvIHRoaXMgaGVyZSwgYW5kIG5vdCBlYXJsaWVyLCBiZWNhdXNlIHRoZSB2YWx1ZQorICAgICAgICAgICAgLy8gaXMgdXNlZCB0byBkZXRlcm1pbmUgaW50ZWdlciBkaWdpdCBjb3VudCBhYm92ZS4KKyAgICAgICAgICAgIGlmIChkaWdpdExpc3QuaXNaZXJvKCkpIGV4cG9uZW50ID0gMDsKKworICAgICAgICAgICAgYm9vbGVhbiBuZWdhdGl2ZUV4cG9uZW50ID0gZXhwb25lbnQgPCAwOworICAgICAgICAgICAgaWYgKG5lZ2F0aXZlRXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IC1leHBvbmVudDsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN5bWJvbHMuZ2V0TWludXNTaWduKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChleHBvbmVudFNpZ25BbHdheXNTaG93bikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3ltYm9scy5nZXRQbHVzU2lnbigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpZ2l0TGlzdC5zZXQoZXhwb25lbnQpOworICAgICAgICAgICAgZm9yIChpPWRpZ2l0TGlzdC5kZWNpbWFsQXQ7IGk8bWluRXhwb25lbnREaWdpdHM7ICsraSkgcmVzdWx0LmFwcGVuZCh6ZXJvKTsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPGRpZ2l0TGlzdC5kZWNpbWFsQXQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKChpIDwgZGlnaXRMaXN0LmNvdW50KSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKShkaWdpdExpc3QuZGlnaXRzW2ldICsgemVyb0RlbHRhKSA6IHplcm8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVjb3JkIGZpZWxkIGluZm9ybWF0aW9uIGZvciBjYWxsZXIuCisgICAgICAgICAgICAvL0ZQOmlmIChmaWVsZFBvc2l0aW9uLmdldEZpZWxkKCkgPT0gTnVtYmVyRm9ybWF0LklOVEVHRVJfRklFTEQpCisgICAgICAgICAgICAvL0ZQOmZpZWxkUG9zaXRpb24uc2V0QmVnaW5JbmRleChyZXN1bHQubGVuZ3RoKCkpOworCisgICAgICAgICAgICAvLyBPdXRwdXQgdGhlIGludGVnZXIgcG9ydGlvbi4gIEhlcmUgJ2NvdW50JyBpcyB0aGUgdG90YWwKKyAgICAgICAgICAgIC8vIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyB3ZSB3aWxsIGRpc3BsYXksIGluY2x1ZGluZyBib3RoCisgICAgICAgICAgICAvLyBsZWFkaW5nIHplcm9zIHJlcXVpcmVkIHRvIHNhdGlzZnkgZ2V0TWluaW11bUludGVnZXJEaWdpdHMsCisgICAgICAgICAgICAvLyBhbmQgYWN0dWFsIGRpZ2l0cyBwcmVzZW50IGluIHRoZSBudW1iZXIuCisgICAgICAgICAgICBpbnQgY291bnQgPSBtaW5JbnREaWc7CisgICAgICAgICAgICBpbnQgZGlnaXRJbmRleCA9IDA7IC8vIEluZGV4IGludG8gZGlnaXRMaXN0LmZEaWdpdHNbXQorICAgICAgICAgICAgaWYgKGRpZ2l0TGlzdC5kZWNpbWFsQXQgPiAwICYmIGNvdW50IDwgZGlnaXRMaXN0LmRlY2ltYWxBdCkKKyAgICAgICAgICAgICAgICBjb3VudCA9IGRpZ2l0TGlzdC5kZWNpbWFsQXQ7CisKKyAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBnZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpIGlzIHNtYWxsZXIKKyAgICAgICAgICAgIC8vIHRoYW4gdGhlIHJlYWwgbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzLiAgSWYgdGhpcyBpcyBzbywgd2UKKyAgICAgICAgICAgIC8vIG91dHB1dCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgbWF4IGludGVnZXIgZGlnaXRzLiAgRm9yIGV4YW1wbGUsCisgICAgICAgICAgICAvLyB0aGUgdmFsdWUgMTk5NyBwcmludGVkIHdpdGggMiBtYXggaW50ZWdlciBkaWdpdHMgaXMganVzdCAiOTciLgorCisgICAgICAgICAgICBpZiAoY291bnQgPiBtYXhJbnREaWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY291bnQgPSBtYXhJbnREaWc7CisgICAgICAgICAgICAgICAgZGlnaXRJbmRleCA9IGRpZ2l0TGlzdC5kZWNpbWFsQXQgLSBjb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IHNpemVCZWZvcmVJbnRlZ2VyUGFydCA9IHJlc3VsdC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGZvciAoaT1jb3VudC0xOyBpPj0wOyAtLWkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGkgPCBkaWdpdExpc3QuZGVjaW1hbEF0ICYmIGRpZ2l0SW5kZXggPCBkaWdpdExpc3QuY291bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBPdXRwdXQgYSByZWFsIGRpZ2l0CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGNoYXIpKGRpZ2l0TGlzdC5kaWdpdHNbZGlnaXRJbmRleCsrXSArIHplcm9EZWx0YSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBPdXRwdXQgYSBsZWFkaW5nIHplcm8KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh6ZXJvKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBPdXRwdXQgZ3JvdXBpbmcgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICBpZiAoaXNHcm91cGluZ1Bvc2l0aW9uKGkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZ3JvdXBpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVjb3JkIGZpZWxkIGluZm9ybWF0aW9uIGZvciBjYWxsZXIuCisgICAgICAgICAgICAvL0ZQOmlmIChmaWVsZFBvc2l0aW9uLmdldEZpZWxkKCkgPT0gTnVtYmVyRm9ybWF0LklOVEVHRVJfRklFTEQpCisgICAgICAgICAgICAvL0ZQOmZpZWxkUG9zaXRpb24uc2V0RW5kSW5kZXgocmVzdWx0Lmxlbmd0aCgpKTsKKworICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgcHJpbnRhYmxlIGZyYWN0aW9uYWwKKyAgICAgICAgICAgIC8vIGRpZ2l0cy4gIElmIHdlJ3ZlIHVzZWQgdXAgdGhlIGRpZ2l0cyB3ZSBrbm93IHRoZXJlIGFyZW4ndC4KKyAgICAgICAgICAgIGJvb2xlYW4gZnJhY3Rpb25QcmVzZW50ID0gKGdldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpID4gMCkgfHwKKyAgICAgICAgICAgICghaXNJbnRlZ2VyICYmIGRpZ2l0SW5kZXggPCBkaWdpdExpc3QuY291bnQpOworCisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBmcmFjdGlvbiBwcmVzZW50LCBhbmQgd2UgaGF2ZW4ndCBwcmludGVkIGFueQorICAgICAgICAgICAgLy8gaW50ZWdlciBkaWdpdHMsIHRoZW4gcHJpbnQgYSB6ZXJvLiAgT3RoZXJ3aXNlIHdlIHdvbid0IHByaW50CisgICAgICAgICAgICAvLyBfYW55XyBkaWdpdHMsIGFuZCB3ZSB3b24ndCBiZSBhYmxlIHRvIHBhcnNlIHRoaXMgc3RyaW5nLgorICAgICAgICAgICAgaWYgKCFmcmFjdGlvblByZXNlbnQgJiYgcmVzdWx0Lmxlbmd0aCgpID09IHNpemVCZWZvcmVJbnRlZ2VyUGFydCkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHplcm8pOworCisgICAgICAgICAgICAvLyBPdXRwdXQgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlmIHdlIGFsd2F5cyBkbyBzby4KKyAgICAgICAgICAgIGlmIChkZWNpbWFsU2VwYXJhdG9yQWx3YXlzU2hvd24gfHwgZnJhY3Rpb25QcmVzZW50KQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjaW1hbCk7CisKKyAgICAgICAgICAgIC8vIFJlY29yZCBmaWVsZCBpbmZvcm1hdGlvbiBmb3IgY2FsbGVyLgorICAgICAgICAgICAgLy9GUDppZiAoZmllbGRQb3NpdGlvbi5nZXRGaWVsZCgpID09IE51bWJlckZvcm1hdC5GUkFDVElPTl9GSUVMRCkKKyAgICAgICAgICAgIC8vRlA6ZmllbGRQb3NpdGlvbi5zZXRCZWdpbkluZGV4KHJlc3VsdC5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCk7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBIZXJlIGlzIHdoZXJlIHdlIGVzY2FwZSBmcm9tIHRoZSBsb29wLiAgV2UgZXNjYXBlIGlmIHdlJ3ZlIG91dHB1dAorICAgICAgICAgICAgICAgIC8vIHRoZSBtYXhpbXVtIGZyYWN0aW9uIGRpZ2l0cyAoc3BlY2lmaWVkIGluIHRoZSBmb3IgZXhwcmVzc2lvbiBhYm92ZSkuCisgICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzdG9wIHdoZW4gd2UndmUgb3V0cHV0IHRoZSBtaW5pbXVtIGRpZ2l0cyBhbmQgZWl0aGVyOgorICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYW4gaW50ZWdlciwgc28gdGhlcmUgaXMgbm8gZnJhY3Rpb25hbCBzdHVmZiB0byBkaXNwbGF5LAorICAgICAgICAgICAgICAgIC8vIG9yIHdlJ3JlIG91dCBvZiBzaWduaWZpY2FudCBkaWdpdHMuCisgICAgICAgICAgICAgICAgaWYgKGkgPj0gZ2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKGlzSW50ZWdlciB8fCBkaWdpdEluZGV4ID49IGRpZ2l0TGlzdC5jb3VudCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gT3V0cHV0IGxlYWRpbmcgZnJhY3Rpb25hbCB6ZXJvcy4gIFRoZXNlIGFyZSB6ZXJvcyB0aGF0IGNvbWUgYWZ0ZXIKKyAgICAgICAgICAgICAgICAvLyB0aGUgZGVjaW1hbCBidXQgYmVmb3JlIGFueSBzaWduaWZpY2FudCBkaWdpdHMuICBUaGVzZSBhcmUgb25seQorICAgICAgICAgICAgICAgIC8vIG91dHB1dCBpZiBhYnMobnVtYmVyIGJlaW5nIGZvcm1hdHRlZCkgPCAxLjAuCisgICAgICAgICAgICAgICAgaWYgKC0xLWkgPiAoZGlnaXRMaXN0LmRlY2ltYWxBdC0xKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoemVybyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE91dHB1dCBhIGRpZ2l0LCBpZiB3ZSBoYXZlIGFueSBwcmVjaXNpb24gbGVmdCwgb3IgYQorICAgICAgICAgICAgICAgIC8vIHplcm8gaWYgd2UgZG9uJ3QuICBXZSBkb24ndCB3YW50IHRvIG91dHB1dCBub2lzZSBkaWdpdHMuCisgICAgICAgICAgICAgICAgaWYgKCFpc0ludGVnZXIgJiYgZGlnaXRJbmRleCA8IGRpZ2l0TGlzdC5jb3VudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGNoYXIpKGRpZ2l0TGlzdC5kaWdpdHNbZGlnaXRJbmRleCsrXSArIHplcm9EZWx0YSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHplcm8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVjb3JkIGZpZWxkIGluZm9ybWF0aW9uIGZvciBjYWxsZXIuCisgICAgICAgICAgICAvL0ZQOmlmIChmaWVsZFBvc2l0aW9uLmdldEZpZWxkKCkgPT0gTnVtYmVyRm9ybWF0LkZSQUNUSU9OX0ZJRUxEKQorICAgICAgICAgICAgLy9GUDpmaWVsZFBvc2l0aW9uLnNldEVuZEluZGV4KHJlc3VsdC5sZW5ndGgoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQuYXBwZW5kKGlzTmVnYXRpdmUgPyBuZWdhdGl2ZVN1ZmZpeCA6IHBvc2l0aXZlU3VmZml4KTsKKworICAgICAgICAvLyBbTkVXXQorICAgICAgICBhZGRQYWRkaW5nKHJlc3VsdCwgdHJ1ZSwgaXNOZWdhdGl2ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gW05FV10KKyAgICBwcml2YXRlIGZpbmFsIHZvaWQgYWRkUGFkZGluZyhTdHJpbmdCdWZmZXIgcmVzdWx0LCBib29sZWFuIGhhc0FmZml4ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc05lZ2F0aXZlKSB7CisgICAgICAgIGlmIChmb3JtYXRXaWR0aCA+IDApIHsKKyAgICAgICAgICAgIGludCBsZW4gPSBmb3JtYXRXaWR0aCAtIHJlc3VsdC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgY2hhcltdIHBhZGRpbmcgPSBuZXcgY2hhcltsZW5dOworICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47ICsraSkgeworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nW2ldID0gcGFkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhZFBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQQURfQUZURVJfUFJFRklYOgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQWZmaXhlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydChpc05lZ2F0aXZlID8gbmVnYXRpdmVQcmVmaXgubGVuZ3RoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwb3NpdGl2ZVByZWZpeC5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIGZhbGwgdGhyb3VnaCB0byBuZXh0IGNhc2UKKyAgICAgICAgICAgICAgICBjYXNlIFBBRF9CRUZPUkVfUFJFRklYOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KDAsIHBhZGRpbmcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBBRF9CRUZPUkVfU1VGRklYOgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQWZmaXhlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydChyZXN1bHQubGVuZ3RoKCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNOZWdhdGl2ZSA/IG5lZ2F0aXZlU3VmZml4Lmxlbmd0aCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBvc2l0aXZlU3VmZml4Lmxlbmd0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIGZhbGwgdGhyb3VnaCB0byBuZXh0IGNhc2UKKyAgICAgICAgICAgICAgICBjYXNlIFBBRF9BRlRFUl9TVUZGSVg6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFkZGluZyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPkNIQU5HRUQ8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogUGFyc2UgdGhlIGdpdmVuIHN0cmluZywgcmV0dXJuaW5nIGEgPGNvZGU+TnVtYmVyPC9jb2RlPiBvYmplY3QgdG8KKyAgICAgKiByZXByZXNlbnQgdGhlIHBhcnNlZCB2YWx1ZS4gIDxjb2RlPkRvdWJsZTwvY29kZT4gb2JqZWN0cyBhcmUgcmV0dXJuZWQgdG8KKyAgICAgKiByZXByZXNlbnQgbm9uLWludGVncmFsIHZhbHVlcyB3aGljaCBjYW5ub3QgYmUgc3RvcmVkIGluIGEKKyAgICAgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPi4gIFRoZXNlIGFyZSA8Y29kZT5OYU48L2NvZGU+LCBpbmZpbml0eSwKKyAgICAgKiAtaW5maW5pdHksIGFuZCAtMC4wLiAgQWxsIG90aGVyIHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgPGNvZGU+TG9uZzwvY29kZT4sCisgICAgICogPGNvZGU+QmlnSW50ZWdlcjwvY29kZT4sIG9yIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHZhbHVlcywgaW4gdGhhdCBvcmRlcgorICAgICAqIG9mIHByZWZlcmVuY2UuICBJZiB0aGUgcGFyc2UgZmFpbHMsIG51bGwgaXMgcmV0dXJuZWQuCisgICAgICogQHBhcmFtIHRleHQgdGhlIHN0cmluZyB0byBiZSBwYXJzZWQKKyAgICAgKiBAcGFyYW0gcGFyc2VQb3NpdGlvbiBkZWZpbmVzIHRoZSBwb3NpdGlvbiB3aGVyZSBwYXJzaW5nIGlzIHRvIGJlZ2luLAorICAgICAqIGFuZCB1cG9uIHJldHVybiwgdGhlIHBvc2l0aW9uIHdoZXJlIHBhcnNpbmcgbGVmdCBvZmYuICBJZiB0aGUgcG9zaXRpb24KKyAgICAgKiBoYXMgbm90IGNoYW5nZWQgdXBvbiByZXR1cm4sIHRoZW4gcGFyc2luZyBmYWlsZWQuCisgICAgICogQHJldHVybiBhIDxjb2RlPk51bWJlcjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIHBhcnNlZCB2YWx1ZSBvcgorICAgICAqIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZSBwYXJzZSBmYWlsZWQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgTnVtYmVyIHBhcnNlKFN0cmluZyB0ZXh0LCBQYXJzZVBvc2l0aW9uIHBhcnNlUG9zaXRpb24pCisgICAgeworICAgICAgICAvLyBTa2lwIHBhZGRpbmcgY2hhcmFjdGVycywgaWYgYW55CisgICAgICAgIGludCBiYWNrdXA7CisgICAgICAgIGludCBpID0gYmFja3VwID0gcGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpOworICAgICAgICBpZiAoZm9ybWF0V2lkdGggPiAwKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoKCkgJiYgdGV4dC5jaGFyQXQoaSkgPT0gcGFkKSB7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyc2VQb3NpdGlvbi5zZXRJbmRleChpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSBOYU4gYXMgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgaWYgKHRleHQucmVnaW9uTWF0Y2hlcyhwYXJzZVBvc2l0aW9uLmdldEluZGV4KCksIHN5bWJvbHMuZ2V0TmFOKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc3ltYm9scy5nZXROYU4oKS5sZW5ndGgoKSkpIHsKKyAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0SW5kZXgocGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3ltYm9scy5nZXROYU4oKS5sZW5ndGgoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShEb3VibGUuTmFOKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW5bXSBzdGF0dXMgPSBuZXcgYm9vbGVhbltTVEFUVVNfTEVOR1RIXTsKKyAgICAgICAgaWYgKCFzdWJwYXJzZSh0ZXh0LCBwYXJzZVBvc2l0aW9uLCBkaWdpdExpc3QsIGZhbHNlLCBzdGF0dXMpKSB7CisgICAgICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEluZGV4KGJhY2t1cCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSBlbHNlIGlmIChmb3JtYXRXaWR0aCA8IDApIHsKKyAgICAgICAgICAgIGkgPSBwYXJzZVBvc2l0aW9uLmdldEluZGV4KCk7CisgICAgICAgICAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoKCkgJiYgdGV4dC5jaGFyQXQoaSkgPT0gcGFkKSB7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyc2VQb3NpdGlvbi5zZXRJbmRleChpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSBpbmZpbml0eQorICAgICAgICBpZiAoc3RhdHVzW1NUQVRVU19JTkZJTklURV0pIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHN0YXR1c1tTVEFUVVNfUE9TSVRJVkVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IERvdWJsZS5QT1NJVElWRV9JTkZJTklUWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIC0wLjAKKyAgICAgICAgaWYgKCFzdGF0dXNbU1RBVFVTX1BPU0lUSVZFXSAmJiBkaWdpdExpc3QuaXNaZXJvKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKC0wLjApOworICAgICAgICB9CisKKyAgICAgICAgLy8gRG8gYXMgbXVjaCBvZiB0aGUgbXVsdGlwbGllciBjb252ZXJzaW9uIGFzIHBvc3NpYmxlIHdpdGhvdXQKKyAgICAgICAgLy8gbG9zaW5nIGFjY3VyYWN5LgorICAgICAgICBpbnQgbXVsdCA9IG11bHRpcGxpZXI7IC8vIERvbid0IG1vZGlmeSB0aGlzLm11bHRpcGxpZXIKKyAgICAgICAgd2hpbGUgKG11bHQgJSAxMCA9PSAwKSB7CisgICAgICAgICAgICAtLWRpZ2l0TGlzdC5kZWNpbWFsQXQ7CisgICAgICAgICAgICBtdWx0IC89IDEwOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIGludGVncmFsIHZhbHVlcworICAgICAgICBpZiAobXVsdCA9PSAxICYmIGRpZ2l0TGlzdC5pc0ludGVncmFsKCkpIHsKKyAgICAgICAgICAgIEJpZ0ludGVnZXIgbiA9IGRpZ2l0TGlzdC5nZXRCaWdJbnRlZ2VyKHN0YXR1c1tTVEFUVVNfUE9TSVRJVkVdKTsKKyAgICAgICAgICAgIHJldHVybiAobi5iaXRMZW5ndGgoKSA8IDY0KQorICAgICAgICAgICAgICAgID8gKE51bWJlcikgbmV3IExvbmcobi5sb25nVmFsdWUoKSkgCisgICAgICAgICAgICAgICAgOiAoTnVtYmVyKSBuOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIG5vbi1pbnRlZ3JhbCB2YWx1ZXMKKyAgICAgICAgamF2YS5tYXRoLkJpZ0RlY2ltYWwgbiA9IGRpZ2l0TGlzdC5nZXRCaWdEZWNpbWFsKHN0YXR1c1tTVEFUVVNfUE9TSVRJVkVdKTsKKyAgICAgICAgaWYgKG11bHQgIT0gMSkgeworICAgICAgICAgICAgbiA9IG4uZGl2aWRlKGphdmEubWF0aC5CaWdEZWNpbWFsLnZhbHVlT2YobXVsdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5tYXRoLkJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9FVkVOKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbjsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0lORklOSVRFID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX1BPU0lUSVZFID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0xFTkdUSCAgID0gMjsKKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPkNIQU5HRUQ8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogUGFyc2UgdGhlIGdpdmVuIHRleHQgaW50byBhIG51bWJlci4gIFRoZSB0ZXh0IGlzIHBhcnNlZCBiZWdpbm5pbmcgYXQKKyAgICAgKiBwYXJzZVBvc2l0aW9uLCB1bnRpbCBhbiB1bnBhcnNlYWJsZSBjaGFyYWN0ZXIgaXMgc2Vlbi4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgc3RyaW5nIHRvIHBhcnNlLgorICAgICAqIEBwYXJhbSBwYXJzZVBvc2l0aW9uIFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0byBiZWluZyBwYXJzaW5nLiAgVXBvbgorICAgICAqIHJldHVybiwgdGhlIGZpcnN0IHVucGFyc2VhYmxlIGNoYXJhY3Rlci4KKyAgICAgKiBAcGFyYW0gZGlnaXRzIFRoZSBEaWdpdExpc3QgdG8gc2V0IHRvIHRoZSBwYXJzZWQgdmFsdWUuCisgICAgICogQHBhcmFtIGlzRXhwb25lbnQgSWYgdHJ1ZSwgcGFyc2UgYW4gZXhwb25lbnQuICBUaGlzIG1lYW5zIG5vCisgICAgICogaW5maW5pdGUgdmFsdWVzIGFuZCBpbnRlZ2VyIG9ubHkuCisgICAgICogQHBhcmFtIHN0YXR1cyBVcG9uIHJldHVybiBjb250YWlucyBib29sZWFuIHN0YXR1cyBmbGFncyBpbmRpY2F0aW5nCisgICAgICogd2hldGhlciB0aGUgdmFsdWUgd2FzIGluZmluaXRlIGFuZCB3aGV0aGVyIGl0IHdhcyBwb3NpdGl2ZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gc3VicGFyc2UoU3RyaW5nIHRleHQsIFBhcnNlUG9zaXRpb24gcGFyc2VQb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICBEaWdpdExpc3QgZGlnaXRzLCBib29sZWFuIGlzRXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdGF0dXNbXSkKKyAgICB7CisgICAgICAgIGludCBwb3NpdGlvbiA9IHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKTsKKyAgICAgICAgaW50IG9sZFN0YXJ0ID0gcGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpOworICAgICAgICBpbnQgYmFja3VwOworCisgICAgICAgIC8vIGNoZWNrIGZvciBwb3NpdGl2ZVByZWZpeDsgdGFrZSBsb25nZXN0CisgICAgICAgIGJvb2xlYW4gZ290UG9zaXRpdmUgPSB0ZXh0LnJlZ2lvbk1hdGNoZXMocG9zaXRpb24scG9zaXRpdmVQcmVmaXgsMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZVByZWZpeC5sZW5ndGgoKSk7CisgICAgICAgIGJvb2xlYW4gZ290TmVnYXRpdmUgPSB0ZXh0LnJlZ2lvbk1hdGNoZXMocG9zaXRpb24sbmVnYXRpdmVQcmVmaXgsMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZVByZWZpeC5sZW5ndGgoKSk7CisgICAgICAgIGlmIChnb3RQb3NpdGl2ZSAmJiBnb3ROZWdhdGl2ZSkgeworICAgICAgICAgICAgaWYgKHBvc2l0aXZlUHJlZml4Lmxlbmd0aCgpID4gbmVnYXRpdmVQcmVmaXgubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgZ290TmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l0aXZlUHJlZml4Lmxlbmd0aCgpIDwgbmVnYXRpdmVQcmVmaXgubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgZ290UG9zaXRpdmUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZ290UG9zaXRpdmUpIHsKKyAgICAgICAgICAgIHBvc2l0aW9uICs9IHBvc2l0aXZlUHJlZml4Lmxlbmd0aCgpOworICAgICAgICB9IGVsc2UgaWYgKGdvdE5lZ2F0aXZlKSB7CisgICAgICAgICAgICBwb3NpdGlvbiArPSBuZWdhdGl2ZVByZWZpeC5sZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vUFA6cGFyc2VQb3NpdGlvbi5lcnJvckluZGV4ID0gcG9zaXRpb247CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gcHJvY2VzcyBkaWdpdHMgb3IgSW5mLCBmaW5kIGRlY2ltYWwgcG9zaXRpb24KKyAgICAgICAgc3RhdHVzW1NUQVRVU19JTkZJTklURV0gPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc0V4cG9uZW50ICYmIHRleHQucmVnaW9uTWF0Y2hlcyhwb3NpdGlvbixzeW1ib2xzLmdldEluZmluaXR5KCksMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scy5nZXRJbmZpbml0eSgpLmxlbmd0aCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcG9zaXRpb24gKz0gc3ltYm9scy5nZXRJbmZpbml0eSgpLmxlbmd0aCgpOworICAgICAgICAgICAgc3RhdHVzW1NUQVRVU19JTkZJTklURV0gPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugbm93IGhhdmUgYSBzdHJpbmcgb2YgZGlnaXRzLCBwb3NzaWJseSB3aXRoIGdyb3VwaW5nIHN5bWJvbHMsCisgICAgICAgICAgICAvLyBhbmQgZGVjaW1hbCBwb2ludHMuICBXZSB3YW50IHRvIHByb2Nlc3MgdGhlc2UgaW50byBhIERpZ2l0TGlzdC4KKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcHV0IGEgYnVuY2ggb2YgbGVhZGluZyB6ZXJvcyBpbnRvIHRoZSBEaWdpdExpc3QKKyAgICAgICAgICAgIC8vIHRob3VnaCwgc28gd2Uga2VlcCB0cmFjayBvZiB0aGUgbG9jYXRpb24gb2YgdGhlIGRlY2ltYWwgcG9pbnQsCisgICAgICAgICAgICAvLyBwdXQgb25seSBzaWduaWZpY2FudCBkaWdpdHMgaW50byB0aGUgRGlnaXRMaXN0LCBhbmQgYWRqdXN0IHRoZQorICAgICAgICAgICAgLy8gZXhwb25lbnQgYXMgbmVlZGVkLgorCisgICAgICAgICAgICBkaWdpdHMuZGVjaW1hbEF0ID0gZGlnaXRzLmNvdW50ID0gMDsKKyAgICAgICAgICAgIGNoYXIgemVybyA9IHN5bWJvbHMuZ2V0WmVyb0RpZ2l0KCk7CisgICAgICAgICAgICBjaGFyIGRlY2ltYWwgPSBpc0N1cnJlbmN5Rm9ybWF0ID8KKyAgICAgICAgICAgIHN5bWJvbHMuZ2V0TW9uZXRhcnlEZWNpbWFsU2VwYXJhdG9yKCkgOiBzeW1ib2xzLmdldERlY2ltYWxTZXBhcmF0b3IoKTsKKyAgICAgICAgICAgIGNoYXIgZ3JvdXBpbmcgPSBzeW1ib2xzLmdldEdyb3VwaW5nU2VwYXJhdG9yKCk7CisgICAgICAgICAgICBTdHJpbmcgZXhwb25lbnRTZXAgPSBzeW1ib2xzLmdldEV4cG9uZW50U2VwYXJhdG9yKCk7CisgICAgICAgICAgICBib29sZWFuIHNhd0RlY2ltYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2xlYW4gc2F3RXhwb25lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2xlYW4gc2F3RGlnaXQgPSBmYWxzZTsKKyAgICAgICAgICAgIGludCBleHBvbmVudCA9IDA7IC8vIFNldCB0byB0aGUgZXhwb25lbnQgdmFsdWUsIGlmIGFueQorICAgICAgICAgICAgaW50IGRpZ2l0ID0gMDsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byB0cmFjayBkaWdpdENvdW50IG91cnNlbHZlcywgYmVjYXVzZSBkaWdpdHMuY291bnQgd2lsbAorICAgICAgICAgICAgLy8gcGluIHdoZW4gdGhlIG1heGltdW0gYWxsb3dhYmxlIGRpZ2l0cyBpcyByZWFjaGVkLgorICAgICAgICAgICAgaW50IGRpZ2l0Q291bnQgPSAwOworCisgICAgICAgICAgICBiYWNrdXAgPSAtMTsKKyAgICAgICAgICAgIGZvciAoOyBwb3NpdGlvbiA8IHRleHQubGVuZ3RoKCk7ICsrcG9zaXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hhciBjaCA9IHRleHQuY2hhckF0KHBvc2l0aW9uKTsKKworICAgICAgICAgICAgICAgIC8qIFdlIHJlY29nbml6ZSBhbGwgZGlnaXQgcmFuZ2VzLCBub3Qgb25seSB0aGUgTGF0aW4gZGlnaXQgcmFuZ2UKKyAgICAgICAgICAgICAgICAgKiAnMCcuLic5Jy4gIFdlIGRvIHNvIGJ5IHVzaW5nIHRoZSBDaGFyYWN0ZXIuZGlnaXQoKSBtZXRob2QsCisgICAgICAgICAgICAgICAgICogd2hpY2ggY29udmVydHMgYSB2YWxpZCBVbmljb2RlIGRpZ2l0IHRvIHRoZSByYW5nZSAwLi45LgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogVGhlIGNoYXJhY3RlciAnY2gnIG1heSBiZSBhIGRpZ2l0LiAgSWYgc28sIHBsYWNlIGl0cyB2YWx1ZQorICAgICAgICAgICAgICAgICAqIGZyb20gMCB0byA5IGluICdkaWdpdCcuICBGaXJzdCB0cnkgdXNpbmcgdGhlIGxvY2FsZSBkaWdpdCwKKyAgICAgICAgICAgICAgICAgKiB3aGljaCBtYXkgb3IgTUFZIE5PVCBiZSBhIHN0YW5kYXJkIFVuaWNvZGUgZGlnaXQgcmFuZ2UuICBJZgorICAgICAgICAgICAgICAgICAqIHRoaXMgZmFpbHMsIHRyeSB1c2luZyB0aGUgc3RhbmRhcmQgVW5pY29kZSBkaWdpdCByYW5nZXMgYnkKKyAgICAgICAgICAgICAgICAgKiBjYWxsaW5nIENoYXJhY3Rlci5kaWdpdCgpLiAgSWYgdGhpcyBhbHNvIGZhaWxzLCBkaWdpdCB3aWxsCisgICAgICAgICAgICAgICAgICogaGF2ZSBhIHZhbHVlIG91dHNpZGUgdGhlIHJhbmdlIDAuLjkuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgZGlnaXQgPSBjaCAtIHplcm87CisgICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDwgMCB8fCBkaWdpdCA+IDkpIGRpZ2l0ID0gQ2hhcmFjdGVyLmRpZ2l0KGNoLCAxMCk7CisKKyAgICAgICAgICAgICAgICBpZiAoZGlnaXQgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENhbmNlbCBvdXQgYmFja3VwIHNldHRpbmcgKHNlZSBncm91cGluZyBoYW5kbGVyIGJlbG93KQorICAgICAgICAgICAgICAgICAgICBiYWNrdXAgPSAtMTsgLy8gRG8gdGhpcyBCRUZPUkUgY29udGludWUgc3RhdGVtZW50IGJlbG93ISEhCisgICAgICAgICAgICAgICAgICAgIHNhd0RpZ2l0ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbGVhZGluZyB6ZXJvcworICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzLmNvdW50ID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsZWFkaW5nIHplcm9zIGluIGludGVnZXIgcGFydCBvZiBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNhd0RlY2ltYWwpIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHNlZW4gdGhlIGRlY2ltYWwsIGJ1dCBubyBzaWduaWZpY2FudCBkaWdpdHMgeWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBhY2NvdW50IGZvciBsZWFkaW5nIHplcm9zIGJ5IGRlY3JlbWVudGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cy5kZWNpbWFsQXQgaW50byBuZWdhdGl2ZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAtLWRpZ2l0cy5kZWNpbWFsQXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICArK2RpZ2l0Q291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMuYXBwZW5kKChjaGFyKShkaWdpdCArICcwJykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRpZ2l0ID4gMCAmJiBkaWdpdCA8PSA5KSAvLyBbc2ljXSBkaWdpdD09MCBoYW5kbGVkIGFib3ZlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzYXdEaWdpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICsrZGlnaXRDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgZGlnaXRzLmFwcGVuZCgoY2hhcikoZGlnaXQgKyAnMCcpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBDYW5jZWwgb3V0IGJhY2t1cCBzZXR0aW5nIChzZWUgZ3JvdXBpbmcgaGFuZGxlciBiZWxvdykKKyAgICAgICAgICAgICAgICAgICAgYmFja3VwID0gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0V4cG9uZW50ICYmIGNoID09IGRlY2ltYWwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBvbmx5IHBhcnNpbmcgaW50ZWdlcnMsIG9yIGlmIHdlIEFMUkVBRFkgc2F3IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBkZWNpbWFsLCB0aGVuIGRvbid0IHBhcnNlIHRoaXMgb25lLgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJzZUludGVnZXJPbmx5KCkgfHwgc2F3RGVjaW1hbCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRpZ2l0cy5kZWNpbWFsQXQgPSBkaWdpdENvdW50OyAvLyBOb3QgZGlnaXRzLmNvdW50IQorICAgICAgICAgICAgICAgICAgICBzYXdEZWNpbWFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzRXhwb25lbnQgJiYgY2ggPT0gZ3JvdXBpbmcgJiYgaXNHcm91cGluZ1VzZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzYXdEZWNpbWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgZ3JvdXBpbmcgY2hhcmFjdGVycywgaWYgd2UgYXJlIHVzaW5nIHRoZW0sIGJ1dCByZXF1aXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhleSBiZSBmb2xsb3dlZCBieSBhIGRpZ2l0LiAgT3RoZXJ3aXNlIHdlIGJhY2t1cCBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVwcm9jZXNzIHRoZW0uCisgICAgICAgICAgICAgICAgICAgIGJhY2t1cCA9IHBvc2l0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNFeHBvbmVudCAmJiAhc2F3RXhwb25lbnQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlZ2lvbk1hdGNoZXMocG9zaXRpb24sIGV4cG9uZW50U2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBleHBvbmVudFNlcC5sZW5ndGgoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSBzaWduLCBpZiBwcmVzZW50CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbmVnRXhwID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGludCBwb3MgPSBwb3NpdGlvbiArIGV4cG9uZW50U2VwLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBpZiAocG9zIDwgdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0ZXh0LmNoYXJBdChwb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IHN5bWJvbHMuZ2V0UGx1c1NpZ24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSBzeW1ib2xzLmdldE1pbnVzU2lnbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnRXhwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIERpZ2l0TGlzdCBleHBvbmVudERpZ2l0cyA9IG5ldyBEaWdpdExpc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnREaWdpdHMuY291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXQgPSB0ZXh0LmNoYXJBdChwb3MpIC0gemVybzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdCA8IDAgfHwgZGlnaXQgPiA5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbid0IHBhcnNlICJbMUUwXSIgd2hlbiBwYXR0ZXJuIGlzICIwLiMjI0UwO1swLiMjI0UwXSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3VsZCB1cGRhdGUgcmVhc3NpZ24gdGhlIHZhbHVlIG9mICdjaCcgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAgZGlnaXQgPSBDaGFyYWN0ZXIuZGlnaXQoY2gsIDEwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0ID0gQ2hhcmFjdGVyLmRpZ2l0KHRleHQuY2hhckF0KHBvcyksIDEwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdCA+PSAwICYmIGRpZ2l0IDw9IDkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudERpZ2l0cy5hcHBlbmQoKGNoYXIpKGRpZ2l0ICsgJzAnKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3M7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb25lbnREaWdpdHMuY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudERpZ2l0cy5kZWNpbWFsQXQgPSBleHBvbmVudERpZ2l0cy5jb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gKGludCkgZXhwb25lbnREaWdpdHMuZ2V0TG9uZygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ0V4cCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gLWV4cG9uZW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3M7IC8vIEFkdmFuY2UgcGFzdCB0aGUgZXhwb25lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhd0V4cG9uZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBXaGV0aGVyIHdlIGZhaWwgb3Igc3VjY2VlZCwgd2UgZXhpdCB0aGlzIGxvb3AKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJhY2t1cCAhPSAtMSkgcG9zaXRpb24gPSBiYWNrdXA7CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBubyBkZWNpbWFsIHBvaW50IHdlIGhhdmUgYW4gaW50ZWdlcgorICAgICAgICAgICAgaWYgKCFzYXdEZWNpbWFsKSBkaWdpdHMuZGVjaW1hbEF0ID0gZGlnaXRDb3VudDsgLy8gTm90IGRpZ2l0cy5jb3VudCEKKworICAgICAgICAgICAgLy8gQWRqdXN0IGZvciBleHBvbmVudCwgaWYgYW55CisgICAgICAgICAgICBkaWdpdHMuZGVjaW1hbEF0ICs9IGV4cG9uZW50OworCisgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSB0ZXh0IHN0cmluZyB3YXMgcmVjb2duaXplZC4gIEZvciBleGFtcGxlLCBwYXJzZQorICAgICAgICAgICAgLy8gIngiIHdpdGggcGF0dGVybiAiIzAuMDAiIChyZXR1cm4gaW5kZXggYW5kIGVycm9yIGluZGV4IGJvdGggMCkKKyAgICAgICAgICAgIC8vIHBhcnNlICIkIiB3aXRoIHBhdHRlcm4gIiQjMC4wMCIuIChyZXR1cm4gaW5kZXggMCBhbmQgZXJyb3IgaW5kZXgKKyAgICAgICAgICAgIC8vIDEpLgorICAgICAgICAgICAgaWYgKCFzYXdEaWdpdCAmJiBkaWdpdENvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEluZGV4KG9sZFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAvL1BQOnBhcnNlUG9zaXRpb24uZXJyb3JJbmRleCA9IG9sZFN0YXJ0OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGNoZWNrIGZvciBwb3NpdGl2ZVN1ZmZpeAorICAgICAgICBpZiAoZ290UG9zaXRpdmUpCisgICAgICAgICAgICBnb3RQb3NpdGl2ZSA9IHRleHQucmVnaW9uTWF0Y2hlcyhwb3NpdGlvbixwb3NpdGl2ZVN1ZmZpeCwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmVTdWZmaXgubGVuZ3RoKCkpOworICAgICAgICBpZiAoZ290TmVnYXRpdmUpCisgICAgICAgICAgICBnb3ROZWdhdGl2ZSA9IHRleHQucmVnaW9uTWF0Y2hlcyhwb3NpdGlvbixuZWdhdGl2ZVN1ZmZpeCwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmVTdWZmaXgubGVuZ3RoKCkpOworCisgICAgICAgIC8vIGlmIGJvdGggbWF0Y2gsIHRha2UgbG9uZ2VzdAorICAgICAgICBpZiAoZ290UG9zaXRpdmUgJiYgZ290TmVnYXRpdmUpIHsKKyAgICAgICAgICAgIGlmIChwb3NpdGl2ZVN1ZmZpeC5sZW5ndGgoKSA+IG5lZ2F0aXZlU3VmZml4Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGdvdE5lZ2F0aXZlID0gZmFsc2U7CisgICAgICAgICAgICBlbHNlIGlmIChwb3NpdGl2ZVN1ZmZpeC5sZW5ndGgoKSA8IG5lZ2F0aXZlU3VmZml4Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGdvdFBvc2l0aXZlID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBmYWlsIGlmIG5laXRoZXIgb3IgYm90aAorICAgICAgICBpZiAoZ290UG9zaXRpdmUgPT0gZ290TmVnYXRpdmUpIHsKKyAgICAgICAgICAgIC8vUFA6cGFyc2VQb3NpdGlvbi5lcnJvckluZGV4ID0gcG9zaXRpb247CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEluZGV4KHBvc2l0aW9uICsKKyAgICAgICAgICAgIChnb3RQb3NpdGl2ZSA/IHBvc2l0aXZlU3VmZml4Lmxlbmd0aCgpIDogbmVnYXRpdmVTdWZmaXgubGVuZ3RoKCkpKTsgLy8gbWFyayBzdWNjZXNzIQorCisgICAgICAgIHN0YXR1c1tTVEFUVVNfUE9TSVRJVkVdID0gZ290UG9zaXRpdmU7CisgICAgICAgIGlmIChwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkgPT0gb2xkU3RhcnQpIHsKKyAgICAgICAgICAgIC8vUFA6cGFyc2VQb3NpdGlvbi5lcnJvckluZGV4ID0gcG9zaXRpb247CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZGVjaW1hbCBmb3JtYXQgc3ltYm9scywgd2hpY2ggaXMgZ2VuZXJhbGx5IG5vdCBjaGFuZ2VkCisgICAgICogYnkgdGhlIHByb2dyYW1tZXIgb3IgdXNlci4KKyAgICAgKiBAcmV0dXJuIGRlc2lyZWQgRGVjaW1hbEZvcm1hdFN5bWJvbHMKKyAgICAgKiBAc2VlIERlY2ltYWxGb3JtYXRTeW1ib2xzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIERlY2ltYWxGb3JtYXRTeW1ib2xzIGdldERlY2ltYWxGb3JtYXRTeW1ib2xzKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbXVsdGlwbGUgcmVmZXJlbmNlcworICAgICAgICAgICAgcmV0dXJuIChEZWNpbWFsRm9ybWF0U3ltYm9scykgc3ltYm9scy5jbG9uZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZm9vKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBkZWNpbWFsIGZvcm1hdCBzeW1ib2xzLCB3aGljaCBpcyBnZW5lcmFsbHkgbm90IGNoYW5nZWQKKyAgICAgKiBieSB0aGUgcHJvZ3JhbW1lciBvciB1c2VyLgorICAgICAqIEBwYXJhbSBuZXdTeW1ib2xzIGRlc2lyZWQgRGVjaW1hbEZvcm1hdFN5bWJvbHMKKyAgICAgKiBAc2VlIERlY2ltYWxGb3JtYXRTeW1ib2xzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoRGVjaW1hbEZvcm1hdFN5bWJvbHMgbmV3U3ltYm9scykgeworICAgICAgICBzeW1ib2xzID0gKERlY2ltYWxGb3JtYXRTeW1ib2xzKSBuZXdTeW1ib2xzLmNsb25lKCk7CisgICAgICAgIHNldEN1cnJlbmN5Rm9yU3ltYm9scygpOworICAgICAgICBleHBhbmRBZmZpeGVzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBjdXJyZW5jeSBvYmplY3QgdG8gbWF0Y2ggdGhlIHN5bWJvbHMuICBUaGlzIG1ldGhvZAorICAgICAqIGlzIHVzZWQgb25seSB3aGVuIHRoZSBjYWxsZXIgaGFzIHBhc3NlZCBpbiBhIHN5bWJvbHMgb2JqZWN0CisgICAgICogdGhhdCBtYXkgbm90IGJlIHRoZSBkZWZhdWx0IG9iamVjdCBmb3IgaXRzIGxvY2FsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0Q3VycmVuY3lGb3JTeW1ib2xzKCkgeworICAgICAgICAvKkJ1ZyA0MjEyMDcyCisgICAgICAgICAgVXBkYXRlIHRoZSBhZmZpeCBzdHJpbmdzIGFjY3JvZGluZyB0byBzeW1ib2xzIGluIG9yZGVyIHRvIGtlZXAKKyAgICAgICAgICB0aGUgYWZmaXggc3RyaW5ncyB1cCB0byBkYXRlLgorICAgICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgKi8KKyAgICAgICAgCisgICAgICAgIC8vIFdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgQ3VycmVuY3kgb2JqZWN0LCB0aGUgY3VycmVuY3kKKyAgICAgICAgLy8gc3ltYm9scyBpbiB0aGUgREZTIG9iamVjdCBhcmUgaWdub3JlZC4gIEZvciBiYWNrd2FyZAorICAgICAgICAvLyBjb21wYXRpYmlsaXR5LCB3ZSBjaGVjayBhbnkgZXhwbGljaXRseSBzZXQgREZTIG9iamVjdC4gIElmIGl0CisgICAgICAgIC8vIGlzIGEgZGVmYXVsdCBzeW1ib2xzIG9iamVjdCBmb3IgaXRzIGxvY2FsZSwgd2UgY2hhbmdlIHRoZQorICAgICAgICAvLyBjdXJyZW5jeSBvYmplY3QgdG8gb25lIGZvciB0aGF0IGxvY2FsZS4gIElmIGl0IGlzIGN1c3RvbSwKKyAgICAgICAgLy8gd2Ugc2V0IHRoZSBjdXJyZW5jeSB0byBudWxsLgorICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBkZWYgPQorICAgICAgICAgICAgbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKHN5bWJvbHMuZ2V0TG9jYWxlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHN5bWJvbHMuZ2V0Q3VycmVuY3lTeW1ib2woKS5lcXVhbHMoCisgICAgICAgICAgICAgICAgZGVmLmdldEN1cnJlbmN5U3ltYm9sKCkpICYmCisgICAgICAgICAgICBzeW1ib2xzLmdldEludGVybmF0aW9uYWxDdXJyZW5jeVN5bWJvbCgpLmVxdWFscygKKyAgICAgICAgICAgICAgICBkZWYuZ2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKCkpKSB7CisgICAgICAgICAgICBjdXJyZW5jeSA9IEN1cnJlbmN5LmdldEluc3RhbmNlKHN5bWJvbHMuZ2V0TG9jYWxlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VycmVuY3kgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBwb3NpdGl2ZSBwcmVmaXguCisgICAgICogPFA+RXhhbXBsZXM6ICsxMjMsICQxMjMsIHNGcjEyMworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9zaXRpdmVQcmVmaXggKCkgeworICAgICAgICByZXR1cm4gcG9zaXRpdmVQcmVmaXg7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBwb3NpdGl2ZSBwcmVmaXguCisgICAgICogPFA+RXhhbXBsZXM6ICsxMjMsICQxMjMsIHNGcjEyMworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFBvc2l0aXZlUHJlZml4IChTdHJpbmcgbmV3VmFsdWUpIHsKKyAgICAgICAgcG9zaXRpdmVQcmVmaXggPSBuZXdWYWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIG5lZ2F0aXZlIHByZWZpeC4KKyAgICAgKiA8UD5FeGFtcGxlczogLTEyMywgKCQxMjMpICh3aXRoIG5lZ2F0aXZlIHN1ZmZpeCksIHNGci0xMjMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5lZ2F0aXZlUHJlZml4ICgpIHsKKyAgICAgICAgcmV0dXJuIG5lZ2F0aXZlUHJlZml4OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgbmVnYXRpdmUgcHJlZml4LgorICAgICAqIDxQPkV4YW1wbGVzOiAtMTIzLCAoJDEyMykgKHdpdGggbmVnYXRpdmUgc3VmZml4KSwgc0ZyLTEyMworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE5lZ2F0aXZlUHJlZml4IChTdHJpbmcgbmV3VmFsdWUpIHsKKyAgICAgICAgbmVnYXRpdmVQcmVmaXggPSBuZXdWYWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHBvc2l0aXZlIHN1ZmZpeC4KKyAgICAgKiA8UD5FeGFtcGxlOiAxMjMlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRQb3NpdGl2ZVN1ZmZpeCAoKSB7CisgICAgICAgIHJldHVybiBwb3NpdGl2ZVN1ZmZpeDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHBvc2l0aXZlIHN1ZmZpeC4KKyAgICAgKiA8UD5FeGFtcGxlOiAxMjMlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UG9zaXRpdmVTdWZmaXggKFN0cmluZyBuZXdWYWx1ZSkgeworICAgICAgICBwb3NpdGl2ZVN1ZmZpeCA9IG5ld1ZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgbmVnYXRpdmUgc3VmZml4LgorICAgICAqIDxQPkV4YW1wbGVzOiAtMTIzJSwgKCQxMjMpICh3aXRoIHBvc2l0aXZlIHN1ZmZpeGVzKQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmVnYXRpdmVTdWZmaXggKCkgeworICAgICAgICByZXR1cm4gbmVnYXRpdmVTdWZmaXg7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBwb3NpdGl2ZSBzdWZmaXguCisgICAgICogPFA+RXhhbXBsZXM6IDEyMyUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXROZWdhdGl2ZVN1ZmZpeCAoU3RyaW5nIG5ld1ZhbHVlKSB7CisgICAgICAgIG5lZ2F0aXZlU3VmZml4ID0gbmV3VmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBtdWx0aXBsaWVyIGZvciB1c2UgaW4gcGVyY2VudCwgcGVybWlsbCwgZXRjLgorICAgICAqIEZvciBhIHBlcmNlbnRhZ2UsIHNldCB0aGUgc3VmZml4ZXMgdG8gaGF2ZSAiJSIgYW5kIHRoZSBtdWx0aXBsaWVyIHRvIGJlIDEwMC4KKyAgICAgKiAoRm9yIEFyYWJpYywgdXNlIGFyYWJpYyBwZXJjZW50IHN5bWJvbCkuCisgICAgICogRm9yIGEgcGVybWlsbCwgc2V0IHRoZSBzdWZmaXhlcyB0byBoYXZlICJcdTIwMzEiIGFuZCB0aGUgbXVsdGlwbGllciB0byBiZSAxMDAwLgorICAgICAqIDxQPkV4YW1wbGVzOiB3aXRoIDEwMCwgMS4yMyAtPiAiMTIzIiwgYW5kICIxMjMiIC0+IDEuMjMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE11bHRpcGxpZXIgKCkgeworICAgICAgICByZXR1cm4gbXVsdGlwbGllcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG11bHRpcGxpZXIgZm9yIHVzZSBpbiBwZXJjZW50LCBwZXJtaWxsLCBldGMuCisgICAgICogRm9yIGEgcGVyY2VudGFnZSwgc2V0IHRoZSBzdWZmaXhlcyB0byBoYXZlICIlIiBhbmQgdGhlIG11bHRpcGxpZXIgdG8gYmUgMTAwLgorICAgICAqIChGb3IgQXJhYmljLCB1c2UgYXJhYmljIHBlcmNlbnQgc3ltYm9sKS4KKyAgICAgKiBGb3IgYSBwZXJtaWxsLCBzZXQgdGhlIHN1ZmZpeGVzIHRvIGhhdmUgIlx1MjAzMSIgYW5kIHRoZSBtdWx0aXBsaWVyIHRvIGJlIDEwMDAuCisgICAgICogPFA+RXhhbXBsZXM6IHdpdGggMTAwLCAxLjIzIC0+ICIxMjMiLCBhbmQgIjEyMyIgLT4gMS4yMworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE11bHRpcGxpZXIgKGludCBuZXdWYWx1ZSkgeworICAgICAgICBpZiAobmV3VmFsdWUgPD0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIG11bHRpcGxpZXI6ICIgKyBuZXdWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgbXVsdGlwbGllciA9IG5ld1ZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBHZXQgdGhlIHJvdW5kaW5nIGluY3JlbWVudC4KKyAgICAgKiBAcmV0dXJuIEEgcG9zaXRpdmUgcm91bmRpbmcgaW5jcmVtZW50LCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiByb3VuZGluZworICAgICAqIGlzIG5vdCBpbiBlZmZlY3QuCisgICAgICogQHNlZSAjc2V0Um91bmRpbmdJbmNyZW1lbnQKKyAgICAgKiBAc2VlICNnZXRSb3VuZGluZ01vZGUKKyAgICAgKiBAc2VlICNzZXRSb3VuZGluZ01vZGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgamF2YS5tYXRoLkJpZ0RlY2ltYWwgZ2V0Um91bmRpbmdJbmNyZW1lbnQoKSB7CisgICAgICAgIHJldHVybiByb3VuZGluZ0luY3JlbWVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogU2V0IHRoZSByb3VuZGluZyBpbmNyZW1lbnQuICBUaGlzIG1ldGhvZCBhbHNvIGNvbnRyb2xzIHdoZXRoZXIKKyAgICAgKiByb3VuZGluZyBpcyBlbmFibGVkLgorICAgICAqIEBwYXJhbSBuZXdWYWx1ZSBBIHBvc2l0aXZlIHJvdW5kaW5nIGluY3JlbWVudCwgb3IgPGNvZGU+bnVsbDwvY29kZT4gb3IKKyAgICAgKiA8Y29kZT5CaWdEZWNpbWFsKDAuMCk8L2NvZGU+IHRvIGRpc2FibGUgcm91bmRpbmcuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgPGNvZGU+bmV3VmFsdWU8L2NvZGU+IGlzIDwgMC4wCisgICAgICogQHNlZSAjZ2V0Um91bmRpbmdJbmNyZW1lbnQKKyAgICAgKiBAc2VlICNnZXRSb3VuZGluZ01vZGUKKyAgICAgKiBAc2VlICNzZXRSb3VuZGluZ01vZGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRSb3VuZGluZ0luY3JlbWVudChqYXZhLm1hdGguQmlnRGVjaW1hbCBuZXdWYWx1ZSkgeworICAgICAgICBpbnQgaSA9IG5ld1ZhbHVlID09IG51bGwKKyAgICAgICAgICAgICAgICA/IDAgOiBuZXdWYWx1ZS5jb21wYXJlVG8oamF2YS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZigwKSk7CisgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCByb3VuZGluZyBpbmNyZW1lbnQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICByb3VuZGluZ0luY3JlbWVudCA9IG51bGw7CisgICAgICAgICAgICByb3VuZGluZ0RvdWJsZSA9IDAuMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJvdW5kaW5nSW5jcmVtZW50ID0gbmV3VmFsdWU7CisgICAgICAgICAgICByb3VuZGluZ0RvdWJsZSA9IG5ld1ZhbHVlLmRvdWJsZVZhbHVlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFNldCB0aGUgcm91bmRpbmcgaW5jcmVtZW50LiAgVGhpcyBtZXRob2QgYWxzbyBjb250cm9scyB3aGV0aGVyCisgICAgICogcm91bmRpbmcgaXMgZW5hYmxlZC4KKyAgICAgKiBAcGFyYW0gbmV3VmFsdWUgQSBwb3NpdGl2ZSByb3VuZGluZyBpbmNyZW1lbnQsIG9yIDAuMCB0byBkaXNhYmxlCisgICAgICogcm91bmRpbmcuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgPGNvZGU+bmV3VmFsdWU8L2NvZGU+IGlzIDwgMC4wCisgICAgICogQHNlZSAjZ2V0Um91bmRpbmdJbmNyZW1lbnQKKyAgICAgKiBAc2VlICNnZXRSb3VuZGluZ01vZGUKKyAgICAgKiBAc2VlICNzZXRSb3VuZGluZ01vZGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRSb3VuZGluZ0luY3JlbWVudChkb3VibGUgbmV3VmFsdWUpIHsKKyAgICAgICAgaWYgKG5ld1ZhbHVlIDwgMC4wKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIHJvdW5kaW5nIGluY3JlbWVudCIpOworICAgICAgICB9CisgICAgICAgIHJvdW5kaW5nRG91YmxlID0gbmV3VmFsdWU7CisgICAgICAgIHJvdW5kaW5nSW5jcmVtZW50ID0gKG5ld1ZhbHVlID4gMC4wKQorICAgICAgICAgICAgPyBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoU3RyaW5nLnZhbHVlT2YobmV3VmFsdWUpKSA6IG51bGw7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBHZXQgdGhlIHJvdW5kaW5nIG1vZGUuCisgICAgICogQHJldHVybiBBIHJvdW5kaW5nIG1vZGUsIGJldHdlZW4gPGNvZGU+QmlnRGVjaW1hbC5ST1VORF9VUDwvY29kZT4KKyAgICAgKiBhbmQgPGNvZGU+QmlnRGVjaW1hbC5ST1VORF9VTk5FQ0VTU0FSWTwvY29kZT4uCisgICAgICogQHNlZSAjc2V0Um91bmRpbmdJbmNyZW1lbnQKKyAgICAgKiBAc2VlICNnZXRSb3VuZGluZ0luY3JlbWVudAorICAgICAqIEBzZWUgI3NldFJvdW5kaW5nTW9kZQorICAgICAqIEBzZWUgamF2YS5tYXRoLkJpZ0RlY2ltYWwKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFJvdW5kaW5nTW9kZSgpIHsKKyAgICAgICAgcmV0dXJuIHJvdW5kaW5nTW9kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogU2V0IHRoZSByb3VuZGluZyBtb2RlLiAgVGhpcyBoYXMgbm8gZWZmZWN0IHVubGVzcyB0aGUgcm91bmRpbmcKKyAgICAgKiBpbmNyZW1lbnQgaXMgZ3JlYXRlciB0aGFuIHplcm8uCisgICAgICogQHBhcmFtIHJvdW5kaW5nTW9kZSBBIHJvdW5kaW5nIG1vZGUsIGJldHdlZW4KKyAgICAgKiA8Y29kZT5CaWdEZWNpbWFsLlJPVU5EX1VQPC9jb2RlPiBhbmQKKyAgICAgKiA8Y29kZT5CaWdEZWNpbWFsLlJPVU5EX1VOTkVDRVNTQVJZPC9jb2RlPi4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiA8Y29kZT5yb3VuZGluZ01vZGU8L2NvZGU+CisgICAgICogaXMgdW5yZWNvZ25pemVkLgorICAgICAqIEBzZWUgI3NldFJvdW5kaW5nSW5jcmVtZW50CisgICAgICogQHNlZSAjZ2V0Um91bmRpbmdJbmNyZW1lbnQKKyAgICAgKiBAc2VlICNnZXRSb3VuZGluZ01vZGUKKyAgICAgKiBAc2VlIGphdmEubWF0aC5CaWdEZWNpbWFsCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Um91bmRpbmdNb2RlKGludCByb3VuZGluZ01vZGUpIHsKKyAgICAgICAgaWYgKHJvdW5kaW5nTW9kZSA8IGphdmEubWF0aC5CaWdEZWNpbWFsLlJPVU5EX1VQCisgICAgICAgICAgICB8fCByb3VuZGluZ01vZGUgPiBqYXZhLm1hdGguQmlnRGVjaW1hbC5ST1VORF9VTk5FQ0VTU0FSWSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCByb3VuZGluZyBtb2RlOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcm91bmRpbmdNb2RlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnJvdW5kaW5nTW9kZSA9IHJvdW5kaW5nTW9kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogR2V0IHRoZSB3aWR0aCB0byB3aGljaCB0aGUgb3V0cHV0IG9mIDxjb2RlPmZvcm1hdCgpPC9jb2RlPiBpcyBwYWRkZWQuCisgICAgICogQHJldHVybiB0aGUgZm9ybWF0IHdpZHRoLCBvciB6ZXJvIGlmIG5vIHBhZGRpbmcgaXMgaW4gZWZmZWN0CisgICAgICogQHNlZSAjc2V0Rm9ybWF0V2lkdGgKKyAgICAgKiBAc2VlICNnZXRQYWRDaGFyYWN0ZXIKKyAgICAgKiBAc2VlICNzZXRQYWRDaGFyYWN0ZXIKKyAgICAgKiBAc2VlICNnZXRQYWRQb3NpdGlvbgorICAgICAqIEBzZWUgI3NldFBhZFBvc2l0aW9uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRGb3JtYXRXaWR0aCgpIHsKKyAgICAgICAgcmV0dXJuIGZvcm1hdFdpZHRoOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBTZXQgdGhlIHdpZHRoIHRvIHdoaWNoIHRoZSBvdXRwdXQgb2YgPGNvZGU+Zm9ybWF0KCk8L2NvZGU+IGlzIHBhZGRlZC4KKyAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIGNvbnRyb2xzIHdoZXRoZXIgcGFkZGluZyBpcyBlbmFibGVkLgorICAgICAqIEBwYXJhbSB3aWR0aCB0aGUgd2lkdGggdG8gd2hpY2ggdG8gcGFkIHRoZSByZXN1bHQgb2YKKyAgICAgKiA8Y29kZT5mb3JtYXQoKTwvY29kZT4sIG9yIHplcm8gdG8gZGlzYWJsZSBwYWRkaW5nCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgPGNvZGU+d2lkdGg8L2NvZGU+IGlzIDwgMAorICAgICAqIEBzZWUgI2dldEZvcm1hdFdpZHRoCisgICAgICogQHNlZSAjZ2V0UGFkQ2hhcmFjdGVyCisgICAgICogQHNlZSAjc2V0UGFkQ2hhcmFjdGVyCisgICAgICogQHNlZSAjZ2V0UGFkUG9zaXRpb24KKyAgICAgKiBAc2VlICNzZXRQYWRQb3NpdGlvbgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEZvcm1hdFdpZHRoKGludCB3aWR0aCkgeworICAgICAgICBpZiAod2lkdGggPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGZvcm1hdCB3aWR0aCIpOworICAgICAgICB9CisgICAgICAgIGZvcm1hdFdpZHRoID0gd2lkdGg7CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIEdldCB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gcGFkIHRvIHRoZSBmb3JtYXQgd2lkdGguICBUaGUgZGVmYXVsdCBpcyAnICcuCisgICAgICogQHJldHVybiB0aGUgcGFkIGNoYXJhY3RlcgorICAgICAqIEBzZWUgI3NldEZvcm1hdFdpZHRoCisgICAgICogQHNlZSAjZ2V0Rm9ybWF0V2lkdGgKKyAgICAgKiBAc2VlICNzZXRQYWRDaGFyYWN0ZXIKKyAgICAgKiBAc2VlICNnZXRQYWRQb3NpdGlvbgorICAgICAqIEBzZWUgI3NldFBhZFBvc2l0aW9uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGNoYXIgZ2V0UGFkQ2hhcmFjdGVyKCkgeworICAgICAgICByZXR1cm4gcGFkOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBTZXQgdGhlIGNoYXJhY3RlciB1c2VkIHRvIHBhZCB0byB0aGUgZm9ybWF0IHdpZHRoLiAgVGhpcyBoYXMgbm8gZWZmZWN0CisgICAgICogdW5sZXNzIHBhZGRpbmcgaXMgZW5hYmxlZC4KKyAgICAgKiBAcGFyYW0gcGFkQ2hhciB0aGUgcGFkIGNoYXJhY3RlcgorICAgICAqIEBzZWUgI3NldEZvcm1hdFdpZHRoCisgICAgICogQHNlZSAjZ2V0Rm9ybWF0V2lkdGgKKyAgICAgKiBAc2VlICNnZXRQYWRDaGFyYWN0ZXIKKyAgICAgKiBAc2VlICNnZXRQYWRQb3NpdGlvbgorICAgICAqIEBzZWUgI3NldFBhZFBvc2l0aW9uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UGFkQ2hhcmFjdGVyKGNoYXIgcGFkQ2hhcikgeworICAgICAgICBwYWQgPSBwYWRDaGFyOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBHZXQgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHBhZGRpbmcgd2lsbCB0YWtlIHBsYWNlLiAgVGhpcyBpcyB0aGUgbG9jYXRpb24KKyAgICAgKiBhdCB3aGljaCBwYWRkaW5nIHdpbGwgYmUgaW5zZXJ0ZWQgaWYgdGhlIHJlc3VsdCBvZiA8Y29kZT5mb3JtYXQoKTwvY29kZT4KKyAgICAgKiBpcyBzaG9ydGVyIHRoYW4gdGhlIGZvcm1hdCB3aWR0aC4KKyAgICAgKiBAcmV0dXJuIHRoZSBwYWQgcG9zaXRpb24sIG9uZSBvZiA8Y29kZT5QQURfQkVGT1JFX1BSRUZJWDwvY29kZT4sCisgICAgICogPGNvZGU+UEFEX0FGVEVSX1BSRUZJWDwvY29kZT4sIDxjb2RlPlBBRF9CRUZPUkVfU1VGRklYPC9jb2RlPiwgb3IKKyAgICAgKiA8Y29kZT5QQURfQUZURVJfU1VGRklYPC9jb2RlPi4KKyAgICAgKiBAc2VlICNzZXRGb3JtYXRXaWR0aAorICAgICAqIEBzZWUgI2dldEZvcm1hdFdpZHRoCisgICAgICogQHNlZSAjc2V0UGFkQ2hhcmFjdGVyCisgICAgICogQHNlZSAjZ2V0UGFkQ2hhcmFjdGVyCisgICAgICogQHNlZSAjc2V0UGFkUG9zaXRpb24KKyAgICAgKiBAc2VlICNQQURfQkVGT1JFX1BSRUZJWAorICAgICAqIEBzZWUgI1BBRF9BRlRFUl9QUkVGSVgKKyAgICAgKiBAc2VlICNQQURfQkVGT1JFX1NVRkZJWAorICAgICAqIEBzZWUgI1BBRF9BRlRFUl9TVUZGSVgKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFBhZFBvc2l0aW9uKCkgeworICAgICAgICByZXR1cm4gcGFkUG9zaXRpb247CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFNldCB0aGUgcG9zaXRpb24gYXQgd2hpY2ggcGFkZGluZyB3aWxsIHRha2UgcGxhY2UuICBUaGlzIGlzIHRoZSBsb2NhdGlvbgorICAgICAqIGF0IHdoaWNoIHBhZGRpbmcgd2lsbCBiZSBpbnNlcnRlZCBpZiB0aGUgcmVzdWx0IG9mIDxjb2RlPmZvcm1hdCgpPC9jb2RlPgorICAgICAqIGlzIHNob3J0ZXIgdGhhbiB0aGUgZm9ybWF0IHdpZHRoLiAgVGhpcyBoYXMgbm8gZWZmZWN0IHVubGVzcyBwYWRkaW5nIGlzCisgICAgICogZW5hYmxlZC4KKyAgICAgKiBAcGFyYW0gcGFkUG9zIHRoZSBwYWQgcG9zaXRpb24sIG9uZSBvZiA8Y29kZT5QQURfQkVGT1JFX1BSRUZJWDwvY29kZT4sCisgICAgICogPGNvZGU+UEFEX0FGVEVSX1BSRUZJWDwvY29kZT4sIDxjb2RlPlBBRF9CRUZPUkVfU1VGRklYPC9jb2RlPiwgb3IKKyAgICAgKiA8Y29kZT5QQURfQUZURVJfU1VGRklYPC9jb2RlPi4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgcGFkIHBvc2l0aW9uIGluCisgICAgICogdW5yZWNvZ25pemVkCisgICAgICogQHNlZSAjc2V0Rm9ybWF0V2lkdGgKKyAgICAgKiBAc2VlICNnZXRGb3JtYXRXaWR0aAorICAgICAqIEBzZWUgI3NldFBhZENoYXJhY3RlcgorICAgICAqIEBzZWUgI2dldFBhZENoYXJhY3RlcgorICAgICAqIEBzZWUgI2dldFBhZFBvc2l0aW9uCisgICAgICogQHNlZSAjUEFEX0JFRk9SRV9QUkVGSVgKKyAgICAgKiBAc2VlICNQQURfQUZURVJfUFJFRklYCisgICAgICogQHNlZSAjUEFEX0JFRk9SRV9TVUZGSVgKKyAgICAgKiBAc2VlICNQQURfQUZURVJfU1VGRklYCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UGFkUG9zaXRpb24oaW50IHBhZFBvcykgeworICAgICAgICBpZiAocGFkUG9zIDwgUEFEX0JFRk9SRV9QUkVGSVggfHwgcGFkUG9zID4gUEFEX0FGVEVSX1NVRkZJWCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBwYWQgcG9zaXRpb24iKTsKKyAgICAgICAgfQorICAgICAgICBwYWRQb3NpdGlvbiA9IHBhZFBvczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHNjaWVudGlmaWMgbm90YXRpb24gaXMgdXNlZC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBvYmplY3QgZm9ybWF0cyBhbmQgcGFyc2VzIHNjaWVudGlmaWMgbm90YXRpb24KKyAgICAgKiBAc2VlICNzZXRTY2llbnRpZmljTm90YXRpb24KKyAgICAgKiBAc2VlICNnZXRNaW5pbXVtRXhwb25lbnREaWdpdHMKKyAgICAgKiBAc2VlICNzZXRNaW5pbXVtRXhwb25lbnREaWdpdHMKKyAgICAgKiBAc2VlICNpc0V4cG9uZW50U2lnbkFsd2F5c1Nob3duCisgICAgICogQHNlZSAjc2V0RXhwb25lbnRTaWduQWx3YXlzU2hvd24KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NjaWVudGlmaWNOb3RhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHVzZUV4cG9uZW50aWFsTm90YXRpb247CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFNldCB3aGV0aGVyIG9yIG5vdCBzY2llbnRpZmljIG5vdGF0aW9uIGlzIHVzZWQuCisgICAgICogQHBhcmFtIHVzZVNjaWVudGlmaWMgdHJ1ZSBpZiB0aGlzIG9iamVjdCBmb3JtYXRzIGFuZCBwYXJzZXMgc2NpZW50aWZpYworICAgICAqIG5vdGF0aW9uCisgICAgICogQHNlZSAjaXNTY2llbnRpZmljTm90YXRpb24KKyAgICAgKiBAc2VlICNnZXRNaW5pbXVtRXhwb25lbnREaWdpdHMKKyAgICAgKiBAc2VlICNzZXRNaW5pbXVtRXhwb25lbnREaWdpdHMKKyAgICAgKiBAc2VlICNpc0V4cG9uZW50U2lnbkFsd2F5c1Nob3duCisgICAgICogQHNlZSAjc2V0RXhwb25lbnRTaWduQWx3YXlzU2hvd24KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTY2llbnRpZmljTm90YXRpb24oYm9vbGVhbiB1c2VTY2llbnRpZmljKSB7CisgICAgICAgIHVzZUV4cG9uZW50aWFsTm90YXRpb24gPSB1c2VTY2llbnRpZmljOworICAgICAgICBpZiAodXNlRXhwb25lbnRpYWxOb3RhdGlvbiAmJiBtaW5FeHBvbmVudERpZ2l0cyA8IDEpIHsKKyAgICAgICAgICAgIG1pbkV4cG9uZW50RGlnaXRzID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBSZXR1cm4gdGhlIG1pbmltdW0gZXhwb25lbnQgZGlnaXRzIHRoYXQgd2lsbCBiZSBzaG93bi4KKyAgICAgKiBAcmV0dXJuIHRoZSBtaW5pbXVtIGV4cG9uZW50IGRpZ2l0cyB0aGF0IHdpbGwgYmUgc2hvd24KKyAgICAgKiBAc2VlICNzZXRTY2llbnRpZmljTm90YXRpb24KKyAgICAgKiBAc2VlICNpc1NjaWVudGlmaWNOb3RhdGlvbgorICAgICAqIEBzZWUgI3NldE1pbmltdW1FeHBvbmVudERpZ2l0cworICAgICAqIEBzZWUgI2lzRXhwb25lbnRTaWduQWx3YXlzU2hvd24KKyAgICAgKiBAc2VlICNzZXRFeHBvbmVudFNpZ25BbHdheXNTaG93bgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBieXRlIGdldE1pbmltdW1FeHBvbmVudERpZ2l0cygpIHsKKyAgICAgICAgcmV0dXJuIG1pbkV4cG9uZW50RGlnaXRzOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogU2V0IHRoZSBtaW5pbXVtIGV4cG9uZW50IGRpZ2l0cyB0aGF0IHdpbGwgYmUgc2hvd24uICBUaGlzIGhhcyBubworICAgICAqIGVmZmVjdCB1bmxlc3Mgc2NpZW50aWZpYyBub3RhdGlvbiBpcyBpbiB1c2UuCisgICAgICogQHBhcmFtIG1pbkV4cERpZyBhIHZhbHVlID49IDEgaW5kaWNhdGluZyB0aGUgZmV3ZXN0IGV4cG9uZW50IGRpZ2l0cworICAgICAqIHRoYXQgd2lsbCBiZSBzaG93bgorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIDxjb2RlPm1pbkV4cERpZzwvY29kZT4gPCAxCisgICAgICogQHNlZSAjc2V0U2NpZW50aWZpY05vdGF0aW9uCisgICAgICogQHNlZSAjaXNTY2llbnRpZmljTm90YXRpb24KKyAgICAgKiBAc2VlICNnZXRNaW5pbXVtRXhwb25lbnREaWdpdHMKKyAgICAgKiBAc2VlICNpc0V4cG9uZW50U2lnbkFsd2F5c1Nob3duCisgICAgICogQHNlZSAjc2V0RXhwb25lbnRTaWduQWx3YXlzU2hvd24KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNaW5pbXVtRXhwb25lbnREaWdpdHMoYnl0ZSBtaW5FeHBEaWcpIHsKKyAgICAgICAgaWYgKG1pbkV4cERpZyA8IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkV4cG9uZW50IGRpZ2l0cyBtdXN0IGJlID49IDEiKTsKKyAgICAgICAgfQorICAgICAgICBtaW5FeHBvbmVudERpZ2l0cyA9IG1pbkV4cERpZzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGV4cG9uZW50IHNpZ24gaXMgYWx3YXlzIHNob3duLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZXhwb25lbnQgaXMgYWx3YXlzIHByZWZpeGVkIHdpdGggZWl0aGVyIHRoZQorICAgICAqIGxvY2FsaXplZCBtaW51cyBzaWduIG9yIHRoZSBsb2NhbGl6ZWQgcGx1cyBzaWduLCBmYWxzZSBpZiBvbmx5IG5lZ2F0aXZlCisgICAgICogZXhwb25lbnRzIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBsb2NhbGl6ZWQgbWludXMgc2lnbi4KKyAgICAgKiBAc2VlICNzZXRTY2llbnRpZmljTm90YXRpb24KKyAgICAgKiBAc2VlICNpc1NjaWVudGlmaWNOb3RhdGlvbgorICAgICAqIEBzZWUgI3NldE1pbmltdW1FeHBvbmVudERpZ2l0cworICAgICAqIEBzZWUgI2dldE1pbmltdW1FeHBvbmVudERpZ2l0cworICAgICAqIEBzZWUgI3NldEV4cG9uZW50U2lnbkFsd2F5c1Nob3duCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNFeHBvbmVudFNpZ25BbHdheXNTaG93bigpIHsKKyAgICAgICAgcmV0dXJuIGV4cG9uZW50U2lnbkFsd2F5c1Nob3duOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBTZXQgd2hldGhlciB0aGUgZXhwb25lbnQgc2lnbiBpcyBhbHdheXMgc2hvd24uICBUaGlzIGhhcyBubyBlZmZlY3QKKyAgICAgKiB1bmxlc3Mgc2NpZW50aWZpYyBub3RhdGlvbiBpcyBpbiB1c2UuCisgICAgICogQHBhcmFtIGV4cFNpZ25BbHdheXMgdHJ1ZSBpZiB0aGUgZXhwb25lbnQgaXMgYWx3YXlzIHByZWZpeGVkIHdpdGggZWl0aGVyCisgICAgICogdGhlIGxvY2FsaXplZCBtaW51cyBzaWduIG9yIHRoZSBsb2NhbGl6ZWQgcGx1cyBzaWduLCBmYWxzZSBpZiBvbmx5CisgICAgICogbmVnYXRpdmUgZXhwb25lbnRzIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBsb2NhbGl6ZWQgbWludXMgc2lnbi4KKyAgICAgKiBAc2VlICNzZXRTY2llbnRpZmljTm90YXRpb24KKyAgICAgKiBAc2VlICNpc1NjaWVudGlmaWNOb3RhdGlvbgorICAgICAqIEBzZWUgI3NldE1pbmltdW1FeHBvbmVudERpZ2l0cworICAgICAqIEBzZWUgI2dldE1pbmltdW1FeHBvbmVudERpZ2l0cworICAgICAqIEBzZWUgI2lzRXhwb25lbnRTaWduQWx3YXlzU2hvd24KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRFeHBvbmVudFNpZ25BbHdheXNTaG93bihib29sZWFuIGV4cFNpZ25BbHdheXMpIHsKKyAgICAgICAgZXhwb25lbnRTaWduQWx3YXlzU2hvd24gPSBleHBTaWduQWx3YXlzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZ3JvdXBpbmcgc2l6ZS4gR3JvdXBpbmcgc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBiZXR3ZWVuCisgICAgICogZ3JvdXBpbmcgc2VwYXJhdG9ycyBpbiB0aGUgaW50ZWdlciBwb3J0aW9uIG9mIGEgbnVtYmVyLiAgRm9yIGV4YW1wbGUsCisgICAgICogaW4gdGhlIG51bWJlciAiMTIzLDQ1Ni43OCIsIHRoZSBncm91cGluZyBzaXplIGlzIDMuCisgICAgICogQHNlZSAjc2V0R3JvdXBpbmdTaXplCisgICAgICogQHNlZSBOdW1iZXJGb3JtYXQjaXNHcm91cGluZ1VzZWQKKyAgICAgKiBAc2VlIERlY2ltYWxGb3JtYXRTeW1ib2xzI2dldEdyb3VwaW5nU2VwYXJhdG9yCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRHcm91cGluZ1NpemUgKCkgeworICAgICAgICByZXR1cm4gZ3JvdXBpbmdTaXplOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZ3JvdXBpbmcgc2l6ZS4gR3JvdXBpbmcgc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBiZXR3ZWVuCisgICAgICogZ3JvdXBpbmcgc2VwYXJhdG9ycyBpbiB0aGUgaW50ZWdlciBwb3J0aW9uIG9mIGEgbnVtYmVyLiAgRm9yIGV4YW1wbGUsCisgICAgICogaW4gdGhlIG51bWJlciAiMTIzLDQ1Ni43OCIsIHRoZSBncm91cGluZyBzaXplIGlzIDMuCisgICAgICogQHNlZSAjZ2V0R3JvdXBpbmdTaXplCisgICAgICogQHNlZSBOdW1iZXJGb3JtYXQjc2V0R3JvdXBpbmdVc2VkCisgICAgICogQHNlZSBEZWNpbWFsRm9ybWF0U3ltYm9scyNzZXRHcm91cGluZ1NlcGFyYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwaW5nU2l6ZSAoaW50IG5ld1ZhbHVlKSB7CisgICAgICAgIGdyb3VwaW5nU2l6ZSA9IChieXRlKW5ld1ZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgc2Vjb25kYXJ5IGdyb3VwaW5nIHNpemUuIEluIHNvbWUgbG9jYWxlcyBvbmUKKyAgICAgKiBncm91cGluZyBpbnRlcnZhbCBpcyB1c2VkIGZvciB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgaW50ZWdlcgorICAgICAqIGRpZ2l0cyAodGhlIHByaW1hcnkgZ3JvdXBpbmcgc2l6ZSksIGFuZCBhbm90aGVyIGlzIHVzZWQgZm9yIGFsbAorICAgICAqIG90aGVycyAodGhlIHNlY29uZGFyeSBncm91cGluZyBzaXplKS4gIEEgZm9ybWF0dGVyIHN1cHBvcnRpbmcgYQorICAgICAqIHNlY29uZGFyeSBncm91cGluZyBzaXplIHdpbGwgcmV0dXJuIGEgcG9zaXRpdmUgaW50ZWdlciB1bmVxdWFsCisgICAgICogdG8gdGhlIHByaW1hcnkgZ3JvdXBpbmcgc2l6ZSByZXR1cm5lZCBieQorICAgICAqIDxjb2RlPmdldEdyb3VwaW5nU2l6ZSgpPC9jb2RlPi4gIEZvciBleGFtcGxlLCBpZiB0aGUgcHJpbWFyeQorICAgICAqIGdyb3VwaW5nIHNpemUgaXMgNCwgYW5kIHRoZSBzZWNvbmRhcnkgZ3JvdXBpbmcgc2l6ZSBpcyAyLCB0aGVuCisgICAgICogdGhlIG51bWJlciAxMjM0NTY3ODkgZm9ybWF0cyBhcyAiMSwyMyw0NSw2Nzg5IiwgYW5kIHRoZSBwYXR0ZXJuCisgICAgICogYXBwZWFycyBhcyAiIywjIywjIyMwIi4KKyAgICAgKiBbTkVXXQorICAgICAqIEByZXR1cm4gdGhlIHNlY29uZGFyeSBncm91cGluZyBzaXplLCBvciBhIHZhbHVlIGxlc3MgdGhhbgorICAgICAqIG9uZSBpZiB0aGVyZSBpcyBub25lCisgICAgICogQHNlZSAjc2V0U2Vjb25kYXJ5R3JvdXBpbmdTaXplCisgICAgICogQHNlZSBOdW1iZXJGb3JtYXQjaXNHcm91cGluZ1VzZWQKKyAgICAgKiBAc2VlIERlY2ltYWxGb3JtYXRTeW1ib2xzI2dldEdyb3VwaW5nU2VwYXJhdG9yCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRTZWNvbmRhcnlHcm91cGluZ1NpemUgKCkgeworICAgICAgICByZXR1cm4gZ3JvdXBpbmdTaXplMjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHNlY29uZGFyeSBncm91cGluZyBzaXplLiBJZiBzZXQgdG8gYSB2YWx1ZSBsZXNzIHRoYW4gMSwKKyAgICAgKiB0aGVuIHNlY29uZGFyeSBncm91cGluZyBpcyB0dXJuZWQgb2ZmLCBhbmQgdGhlIHByaW1hcnkgZ3JvdXBpbmcKKyAgICAgKiBzaXplIGlzIHVzZWQgZm9yIGFsbCBpbnRlcnZhbHMsIG5vdCBqdXN0IHRoZSBsZWFzdCBzaWduaWZpY2FudC4KKyAgICAgKiBbTkVXXQorICAgICAqIEBzZWUgI2dldFNlY29uZGFyeUdyb3VwaW5nU2l6ZQorICAgICAqIEBzZWUgTnVtYmVyRm9ybWF0I3NldEdyb3VwaW5nVXNlZAorICAgICAqIEBzZWUgRGVjaW1hbEZvcm1hdFN5bWJvbHMjc2V0R3JvdXBpbmdTZXBhcmF0b3IKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTZWNvbmRhcnlHcm91cGluZ1NpemUgKGludCBuZXdWYWx1ZSkgeworICAgICAgICBncm91cGluZ1NpemUyID0gKGJ5dGUpbmV3VmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWxsb3dzIHlvdSB0byBnZXQgdGhlIGJlaGF2aW9yIG9mIHRoZSBkZWNpbWFsIHNlcGFyYXRvciB3aXRoIGludGVnZXJzLgorICAgICAqIChUaGUgZGVjaW1hbCBzZXBhcmF0b3Igd2lsbCBhbHdheXMgYXBwZWFyIHdpdGggZGVjaW1hbHMuKQorICAgICAqIDxQPkV4YW1wbGU6IERlY2ltYWwgT046IDEyMzQ1IC0+IDEyMzQ1LjsgT0ZGOiAxMjM0NSAtPiAxMjM0NQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzRGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKCkgeworICAgICAgICByZXR1cm4gZGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFsbG93cyB5b3UgdG8gc2V0IHRoZSBiZWhhdmlvciBvZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3Igd2l0aCBpbnRlZ2Vycy4KKyAgICAgKiAoVGhlIGRlY2ltYWwgc2VwYXJhdG9yIHdpbGwgYWx3YXlzIGFwcGVhciB3aXRoIGRlY2ltYWxzLikKKyAgICAgKiA8UD5FeGFtcGxlOiBEZWNpbWFsIE9OOiAxMjM0NSAtPiAxMjM0NS47IE9GRjogMTIzNDUgLT4gMTIzNDUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREZWNpbWFsU2VwYXJhdG9yQWx3YXlzU2hvd24oYm9vbGVhbiBuZXdWYWx1ZSkgeworICAgICAgICBkZWNpbWFsU2VwYXJhdG9yQWx3YXlzU2hvd24gPSBuZXdWYWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFuZGFyZCBvdmVycmlkZTsgbm8gY2hhbmdlIGluIHNlbWFudGljcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBvdGhlciA9IChEZWNpbWFsRm9ybWF0KSBzdXBlci5jbG9uZSgpOworICAgICAgICAgICAgb3RoZXIuc3ltYm9scyA9IChEZWNpbWFsRm9ybWF0U3ltYm9scykgc3ltYm9scy5jbG9uZSgpOworICAgICAgICAgICAgcmV0dXJuIG90aGVyOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBlcXVhbHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKKyAgICB7CisgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXN1cGVyLmVxdWFscyhvYmopKSByZXR1cm4gZmFsc2U7IC8vIHN1cGVyIGRvZXMgY2xhc3MgY2hlY2sKKyAgICAgICAgRGVjaW1hbEZvcm1hdCBvdGhlciA9IChEZWNpbWFsRm9ybWF0KSBvYmo7CisgICAgICAgIC8qIEFkZCB0aGUgY29tcGFyaXNvbiBvZiB0aGUgZm91ciBuZXcgYWRkZWQgZmllbGRzICx0aGV5IGFyZQorICAgICAgICAgKiBwb3NQcmVmaXhQYXR0ZXJuLCBwb3NTdWZmaXhQYXR0ZXJuLCBuZWdQcmVmaXhQYXR0ZXJuLCBuZWdTdWZmaXhQYXR0ZXJuLgorICAgICAgICAgKiBbUmljaGFyZC9HQ0xdCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gKCgocG9zUHJlZml4UGF0dGVybiA9PSBvdGhlci5wb3NQcmVmaXhQYXR0ZXJuICYmCisgICAgICAgICAgICAgICAgIHBvc2l0aXZlUHJlZml4LmVxdWFscyhvdGhlci5wb3NpdGl2ZVByZWZpeCkpCisgICAgICAgICAgICAgICAgfHwgKHBvc1ByZWZpeFBhdHRlcm4gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBwb3NQcmVmaXhQYXR0ZXJuLmVxdWFscyhvdGhlci5wb3NQcmVmaXhQYXR0ZXJuKSkpCisgICAgICAgICAgICAmJiAoKHBvc1N1ZmZpeFBhdHRlcm4gPT0gb3RoZXIucG9zU3VmZml4UGF0dGVybiAmJgorICAgICAgICAgICAgICAgICBwb3NpdGl2ZVN1ZmZpeC5lcXVhbHMob3RoZXIucG9zaXRpdmVTdWZmaXgpKQorICAgICAgICAgICAgICAgIHx8IChwb3NTdWZmaXhQYXR0ZXJuICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgcG9zU3VmZml4UGF0dGVybi5lcXVhbHMob3RoZXIucG9zU3VmZml4UGF0dGVybikpKQorICAgICAgICAgICAgJiYgKChuZWdQcmVmaXhQYXR0ZXJuID09IG90aGVyLm5lZ1ByZWZpeFBhdHRlcm4gJiYKKyAgICAgICAgICAgICAgICAgbmVnYXRpdmVQcmVmaXguZXF1YWxzKG90aGVyLm5lZ2F0aXZlUHJlZml4KSkKKyAgICAgICAgICAgICAgICB8fCAobmVnUHJlZml4UGF0dGVybiAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgIG5lZ1ByZWZpeFBhdHRlcm4uZXF1YWxzKG90aGVyLm5lZ1ByZWZpeFBhdHRlcm4pKSkKKyAgICAgICAgICAgICYmICgobmVnU3VmZml4UGF0dGVybiA9PSBvdGhlci5uZWdTdWZmaXhQYXR0ZXJuICYmCisgICAgICAgICAgICAgICAgIG5lZ2F0aXZlU3VmZml4LmVxdWFscyhvdGhlci5uZWdhdGl2ZVN1ZmZpeCkpCisgICAgICAgICAgICAgICAgfHwgKG5lZ1N1ZmZpeFBhdHRlcm4gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBuZWdTdWZmaXhQYXR0ZXJuLmVxdWFscyhvdGhlci5uZWdTdWZmaXhQYXR0ZXJuKSkpCisgICAgICAgICAgICAmJiBtdWx0aXBsaWVyID09IG90aGVyLm11bHRpcGxpZXIKKyAgICAgICAgICAgICYmIGdyb3VwaW5nU2l6ZSA9PSBvdGhlci5ncm91cGluZ1NpemUKKyAgICAgICAgICAgICYmIGdyb3VwaW5nU2l6ZTIgPT0gb3RoZXIuZ3JvdXBpbmdTaXplMgorICAgICAgICAgICAgJiYgZGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duID09IG90aGVyLmRlY2ltYWxTZXBhcmF0b3JBbHdheXNTaG93bgorICAgICAgICAgICAgJiYgdXNlRXhwb25lbnRpYWxOb3RhdGlvbiA9PSBvdGhlci51c2VFeHBvbmVudGlhbE5vdGF0aW9uCisgICAgICAgICAgICAmJiAoIXVzZUV4cG9uZW50aWFsTm90YXRpb24gfHwKKyAgICAgICAgICAgICAgICBtaW5FeHBvbmVudERpZ2l0cyA9PSBvdGhlci5taW5FeHBvbmVudERpZ2l0cykKKyAgICAgICAgICAgICYmIHN5bWJvbHMuZXF1YWxzKG90aGVyLnN5bWJvbHMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgaGFzaENvZGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICByZXR1cm4gc3VwZXIuaGFzaENvZGUoKSAqIDM3ICsgcG9zaXRpdmVQcmVmaXguaGFzaENvZGUoKTsKKyAgICAgICAgLy8ganVzdCBlbm91Z2ggZmllbGRzIGZvciBhIHJlYXNvbmFibGUgZGlzdHJpYnV0aW9uCisgICAgfQorCisgICAgLyoqCisgICAgICogU3ludGhlc2l6ZXMgYSBwYXR0ZXJuIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUKKyAgICAgKiBvZiB0aGlzIEZvcm1hdCBvYmplY3QuCisgICAgICogQHNlZSAjYXBwbHlQYXR0ZXJuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1BhdHRlcm4oKSB7CisgICAgICAgIHJldHVybiB0b1BhdHRlcm4oIGZhbHNlICk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3ludGhlc2l6ZXMgYSBsb2NhbGl6ZWQgcGF0dGVybiBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50CisgICAgICogc3RhdGUgb2YgdGhpcyBGb3JtYXQgb2JqZWN0LgorICAgICAqIEBzZWUgI2FwcGx5UGF0dGVybgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9Mb2NhbGl6ZWRQYXR0ZXJuKCkgeworICAgICAgICByZXR1cm4gdG9QYXR0ZXJuKCB0cnVlICk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRXhwYW5kIHRoZSBhZmZpeCBwYXR0ZXJuIHN0cmluZ3MgaW50byB0aGUgZXhwYW5kZWQgYWZmaXggc3RyaW5ncy4gIElmIGFueQorICAgICAqIGFmZml4IHBhdHRlcm4gc3RyaW5nIGlzIG51bGwsIGRvIG5vdCBleHBhbmQgaXQuICBUaGlzIG1ldGhvZCBzaG91bGQgYmUKKyAgICAgKiBjYWxsZWQgYW55IHRpbWUgdGhlIHN5bWJvbHMgb3IgdGhlIGFmZml4IHBhdHRlcm5zIGNoYW5nZSBpbiBvcmRlciB0byBrZWVwCisgICAgICogdGhlIGV4cGFuZGVkIGFmZml4IHN0cmluZ3MgdXAgdG8gZGF0ZS4KKyAgICAgKi8KKyAgICAvL0J1ZyA0MjEyMDcyIFtSaWNoYXJkL0dDTF0KKyAgICBwcml2YXRlIHZvaWQgZXhwYW5kQWZmaXhlcygpIHsKKyAgICAgICAgLy8gUmV1c2Ugb25lIFN0cmluZ0J1ZmZlciBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGlmIChwb3NQcmVmaXhQYXR0ZXJuICE9IG51bGwpIHsKKyAgICAgICAgICAgIHBvc2l0aXZlUHJlZml4ID0gZXhwYW5kQWZmaXgocG9zUHJlZml4UGF0dGVybiwgYnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocG9zU3VmZml4UGF0dGVybiAhPSBudWxsKSB7CisgICAgICAgICAgICBwb3NpdGl2ZVN1ZmZpeCA9IGV4cGFuZEFmZml4KHBvc1N1ZmZpeFBhdHRlcm4sIGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5lZ1ByZWZpeFBhdHRlcm4gIT0gbnVsbCkgeworICAgICAgICAgICAgbmVnYXRpdmVQcmVmaXggPSBleHBhbmRBZmZpeChuZWdQcmVmaXhQYXR0ZXJuLCBidWZmZXIpOworICAgICAgICB9CisgICAgICAgIGlmIChuZWdTdWZmaXhQYXR0ZXJuICE9IG51bGwpIHsKKyAgICAgICAgICAgIG5lZ2F0aXZlU3VmZml4ID0gZXhwYW5kQWZmaXgobmVnU3VmZml4UGF0dGVybiwgYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEV4cGFuZCBhbiBhZmZpeCBwYXR0ZXJuIGludG8gYW4gYWZmaXggc3RyaW5nLiAgQWxsIGNoYXJhY3RlcnMgaW4gdGhlCisgICAgICogcGF0dGVybiBhcmUgbGl0ZXJhbCB1bmxlc3MgcHJlZml4ZWQgYnkgUVVPVEUuICBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMKKyAgICAgKiBhZnRlciBRVU9URSBhcmUgcmVjb2duaXplZDogUEFUVEVSTl9QRVJDRU5ULCBQQVRURVJOX1BFUl9NSUxMRSwKKyAgICAgKiBQQVRURVJOX01JTlVTLCBhbmQgQ1VSUkVOQ1lfU0lHTi4gIElmIENVUlJFTkNZX1NJR04gaXMgZG91YmxlZCAoUVVPVEUgKworICAgICAqIENVUlJFTkNZX1NJR04gKyBDVVJSRU5DWV9TSUdOKSwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZXJuYXRpb25hbAorICAgICAqIGN1cnJlbmN5IHNpZ24uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGFmdGVyIGEgUVVPVEUgcmVwcmVzZW50cyBpdHNlbGYuCisgICAgICogUVVPVEUgbXVzdCBiZSBmb2xsb3dlZCBieSBhbm90aGVyIGNoYXJhY3RlcjsgUVVPVEUgbWF5IG5vdCBvY2N1ciBieQorICAgICAqIGl0c2VsZiBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLgorICAgICAqCisgICAgICogQHBhcmFtIHBhdHRlcm4gdGhlIG5vbi1udWxsLCBwb3NzaWJseSBlbXB0eSBwYXR0ZXJuCisgICAgICogQHBhcmFtIGJ1ZmZlciBhIHNjcmF0Y2ggU3RyaW5nQnVmZmVyOyBpdHMgY29udGVudHMgd2lsbCBiZSBsb3N0CisgICAgICogQHJldHVybiB0aGUgZXhwYW5kZWQgZXF1aXZhbGVudCBvZiBwYXR0ZXJuCisgICAgICovCisgICAgLy9CdWcgNDIxMjA3MiBbUmljaGFyZC9HQ0xdCisgICAgcHJpdmF0ZSBTdHJpbmcgZXhwYW5kQWZmaXgoU3RyaW5nIHBhdHRlcm4sIFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKKyAgICAgICAgYnVmZmVyLnNldExlbmd0aCgwKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHBhdHRlcm4ubGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgY2hhciBjID0gcGF0dGVybi5jaGFyQXQoaSsrKTsKKyAgICAgICAgICAgIGlmIChjID09IFFVT1RFKSB7CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBpbnQgaiA9IHBhdHRlcm4uaW5kZXhPZihRVU9URSwgaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChqID09IGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoUVVPVEUpOworICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGorMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGogPiBpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHBhdHRlcm4uc3Vic3RyaW5nKGksIGopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBqKzE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaTxwYXR0ZXJuLmxlbmd0aCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGFyQXQoaSk9PVFVT1RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChRVU9URSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvb3AgYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgcXVvdGU6ICIgKyBwYXR0ZXJuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlIENVUlJFTkNZX1NJR046CisgICAgICAgICAgICAgICAgLy8gQXMgb2YgSUNVIDIuMiB3ZSB1c2UgdGhlIGN1cnJlbmN5IG9iamVjdCwgYW5kCisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBjdXJyZW5jeSBzeW1ib2xzIGluIHRoZSBERlMsIHVubGVzcworICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBudWxsIGN1cnJlbmN5IG9iamVjdC4gIFRoaXMgb2NjdXJzIGlmCisgICAgICAgICAgICAgICAgLy8gcmVzdXJyZWN0aW5nIGEgcHJlLTIuMiBvYmplY3Qgb3IgaWYgdGhlIHVzZXIKKyAgICAgICAgICAgICAgICAvLyBzZXRzIGEgY3VzdG9tIERGUy4KKyAgICAgICAgICAgICAgICBib29sZWFuIGludGwgPSBpPHBhdHRlcm4ubGVuZ3RoKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGFyQXQoaSkgPT0gQ1VSUkVOQ1lfU0lHTjsKKyAgICAgICAgICAgICAgICBpZiAoaW50bCkgeworICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFN0cmluZyBzOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW5jeSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHMgPSBpbnRsID8gY3VycmVuY3kuZ2V0Q3VycmVuY3lDb2RlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVuY3kuZ2V0U3ltYm9sKHN5bWJvbHMuZ2V0TG9jYWxlKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHMgPSBpbnRsID8gc3ltYm9scy5nZXRJbnRlcm5hdGlvbmFsQ3VycmVuY3lTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICAgICAgOiBzeW1ib2xzLmdldEN1cnJlbmN5U3ltYm9sKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQocyk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYXNlIFBBVFRFUk5fUEVSQ0VOVDoKKyAgICAgICAgICAgICAgICBjID0gc3ltYm9scy5nZXRQZXJjZW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBBVFRFUk5fUEVSX01JTExFOgorICAgICAgICAgICAgICAgIGMgPSBzeW1ib2xzLmdldFBlck1pbGwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUEFUVEVSTl9NSU5VUzoKKyAgICAgICAgICAgICAgICBjID0gc3ltYm9scy5nZXRNaW51c1NpZ24oKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGVuZCBhbiBhZmZpeCBwYXR0ZXJuIHRvIHRoZSBnaXZlbiBTdHJpbmdCdWZmZXIuICBMb2NhbGl6ZSB1bnF1b3RlZAorICAgICAqIHNwZWNpYWxzLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhcHBlbmRBZmZpeFBhdHRlcm4oU3RyaW5nQnVmZmVyIGJ1ZmZlciwgU3RyaW5nIGFmZml4UGF0LCBib29sZWFuIGxvY2FsaXplZCkgeworICAgICAgICBpZiAoIWxvY2FsaXplZCkgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChhZmZpeFBhdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgaSwgajsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPGFmZml4UGF0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGNoID0gYWZmaXhQYXQuY2hhckF0KGkpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFFVT1RFOgorICAgICAgICAgICAgICAgICAgICBqID0gYWZmaXhQYXQuaW5kZXhPZihRVU9URSwgaSsxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGogPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYWxmb3JtZWQgYWZmaXggcGF0dGVybjogIiArIGFmZml4UGF0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGFmZml4UGF0LnN1YnN0cmluZyhpLCBqKzEpKTsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGo7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2UgUEFUVEVSTl9QRVJfTUlMTEU6CisgICAgICAgICAgICAgICAgICAgIGNoID0gc3ltYm9scy5nZXRQZXJNaWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUEFUVEVSTl9QRVJDRU5UOgorICAgICAgICAgICAgICAgICAgICBjaCA9IHN5bWJvbHMuZ2V0UGVyY2VudCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBBVFRFUk5fTUlOVVM6CisgICAgICAgICAgICAgICAgICAgIGNoID0gc3ltYm9scy5nZXRNaW51c1NpZ24oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+Q0hBTkdFRDwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBEb2VzIHRoZSByZWFsIHdvcmsgb2YgZ2VuZXJhdGluZyBhIHBhdHRlcm4uCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgdG9QYXR0ZXJuKGJvb2xlYW4gbG9jYWxpemVkKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGNoYXIgemVybyA9IGxvY2FsaXplZCA/IHN5bWJvbHMuZ2V0WmVyb0RpZ2l0KCkgOiBQQVRURVJOX1pFUk9fRElHSVQ7CisgICAgICAgIGNoYXIgZGlnaXQgPSBsb2NhbGl6ZWQgPyBzeW1ib2xzLmdldERpZ2l0KCkgOiBQQVRURVJOX0RJR0lUOworICAgICAgICBjaGFyIGdyb3VwID0gbG9jYWxpemVkID8gc3ltYm9scy5nZXRHcm91cGluZ1NlcGFyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQQVRURVJOX0dST1VQSU5HX1NFUEFSQVRPUjsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGludCByb3VuZGluZ0RlY2ltYWxQb3MgPSAwOyAvLyBQb3Mgb2YgZGVjaW1hbCBpbiByb3VuZGluZ0RpZ2l0cworICAgICAgICBTdHJpbmcgcm91bmRpbmdEaWdpdHMgPSBudWxsOworICAgICAgICBpbnQgcGFkUG9zID0gKGZvcm1hdFdpZHRoID4gMCkgPyBwYWRQb3NpdGlvbiA6IC0xOworICAgICAgICBTdHJpbmcgcGFkU3BlYyA9IChmb3JtYXRXaWR0aCA+IDApCisgICAgICAgICAgICA/IG5ldyBTdHJpbmdCdWZmZXIoMikuCisgICAgICAgICAgICAgICAgYXBwZW5kKGxvY2FsaXplZCA/IHN5bWJvbHMuZ2V0UGFkRXNjYXBlKCkgOiBQQVRURVJOX1BBRF9FU0NBUEUpLgorICAgICAgICAgICAgICAgIGFwcGVuZChwYWQpLnRvU3RyaW5nKCkKKyAgICAgICAgICAgIDogbnVsbDsKKyAgICAgICAgaWYgKHJvdW5kaW5nSW5jcmVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGkgPSByb3VuZGluZ0luY3JlbWVudC5zY2FsZSgpOworICAgICAgICAgICAgcm91bmRpbmdEaWdpdHMgPSByb3VuZGluZ0luY3JlbWVudC5tb3ZlUG9pbnRSaWdodChpKS50b1N0cmluZygpOworICAgICAgICAgICAgcm91bmRpbmdEZWNpbWFsUG9zID0gcm91bmRpbmdEaWdpdHMubGVuZ3RoKCkgLSBpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHBhcnQ9MDsgcGFydDwyOyArK3BhcnQpIHsKKyAgICAgICAgICAgIC8vIHZhcmlhYmxlIG5vdCB1c2VkIGludCBwYXJ0U3RhcnQgPSByZXN1bHQubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAocGFkUG9zID09IFBBRF9CRUZPUkVfUFJFRklYKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYWRTcGVjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFVzZSBvcmlnaW5hbCBzeW1ib2xzIHJlYWQgZnJvbSByZXNvdXJjZXMgaW4gcGF0dGVybgorICAgICAgICAgICAgICogZWcuIHVzZSAiXHUwMEE0IiBpbnN0ZWFkIG9mICIkIiBpbiBMb2NhbGUuVVMgW1JpY2hhcmQvR0NMXQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBhcHBlbmRBZmZpeFBhdHRlcm4ocmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0PT0wID8gcG9zUHJlZml4UGF0dGVybiA6IG5lZ1ByZWZpeFBhdHRlcm4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsaXplZCk7CisgICAgICAgICAgICBpZiAocGFkUG9zID09IFBBRF9BRlRFUl9QUkVGSVgpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhZFNwZWMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHN1YjBTdGFydCA9IHJlc3VsdC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGludCBnID0gaXNHcm91cGluZ1VzZWQoKSA/IE1hdGgubWF4KDAsIGdyb3VwaW5nU2l6ZSkgOiAwOworICAgICAgICAgICAgaWYgKGcgPiAwICYmIGdyb3VwaW5nU2l6ZTIgPiAwICYmIGdyb3VwaW5nU2l6ZTIgIT0gZ3JvdXBpbmdTaXplKSB7CisgICAgICAgICAgICAgICAgZyArPSBncm91cGluZ1NpemUyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IG1heEludERpZyA9IHVzZUV4cG9uZW50aWFsTm90YXRpb24gPyBnZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpIDoKKyAgICAgICAgICAgICAgICAoTWF0aC5tYXgoTWF0aC5tYXgoZywgZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nRGVjaW1hbFBvcykgKyAxKTsKKyAgICAgICAgICAgIGZvciAoaSA9IG1heEludERpZzsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgICAgIGlmICghdXNlRXhwb25lbnRpYWxOb3RhdGlvbiAmJiBpPG1heEludERpZyAmJgorICAgICAgICAgICAgICAgICAgICBpc0dyb3VwaW5nUG9zaXRpb24oaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChncm91cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyb3VuZGluZ0RpZ2l0cyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBwb3MgPSByb3VuZGluZ0RlY2ltYWxQb3MgLSBpOworICAgICAgICAgICAgICAgICAgICBpZiAocG9zID49IDAgJiYgcG9zIDwgcm91bmRpbmdEaWdpdHMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGNoYXIpIChyb3VuZGluZ0RpZ2l0cy5jaGFyQXQocG9zKSAtICcwJyArIHplcm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaTw9Z2V0TWluaW11bUludGVnZXJEaWdpdHMoKSA/IHplcm8gOiBkaWdpdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCkgPiAwIHx8IGRlY2ltYWxTZXBhcmF0b3JBbHdheXNTaG93bikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobG9jYWxpemVkID8gc3ltYm9scy5nZXREZWNpbWFsU2VwYXJhdG9yKCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTl9ERUNJTUFMX1NFUEFSQVRPUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgcG9zID0gcm91bmRpbmdEZWNpbWFsUG9zOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAocm91bmRpbmdEaWdpdHMgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBwb3MgPCByb3VuZGluZ0RpZ2l0cy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBvcyA8IDAgPyB6ZXJvIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcikgKHJvdW5kaW5nRGlnaXRzLmNoYXJBdChwb3MpIC0gJzAnICsgemVybykpOworICAgICAgICAgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaTxnZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoKSA/IHplcm8gOiBkaWdpdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodXNlRXhwb25lbnRpYWxOb3RhdGlvbikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobG9jYWxpemVkID8gc3ltYm9scy5nZXRFeHBvbmVudFNlcGFyYXRvcigpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk5fRVhQT05FTlQpOworICAgICAgICAgICAgICAgIGlmIChleHBvbmVudFNpZ25BbHdheXNTaG93bikgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGxvY2FsaXplZCA/IHN5bWJvbHMuZ2V0UGx1c1NpZ24oKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTl9QTFVTX1NJR04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxtaW5FeHBvbmVudERpZ2l0czsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoemVybyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhZFNwZWMgIT0gbnVsbCAmJiAhdXNlRXhwb25lbnRpYWxOb3RhdGlvbikgeworICAgICAgICAgICAgICAgIGludCBhZGQgPSBmb3JtYXRXaWR0aCAtIHJlc3VsdC5sZW5ndGgoKSArIHN1YjBTdGFydAorICAgICAgICAgICAgICAgICAgICAtICgocGFydCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICA/IHBvc2l0aXZlUHJlZml4Lmxlbmd0aCgpICsgcG9zaXRpdmVTdWZmaXgubGVuZ3RoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgOiBuZWdhdGl2ZVByZWZpeC5sZW5ndGgoKSArIG5lZ2F0aXZlU3VmZml4Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYWRkID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHN1YjBTdGFydCwgZGlnaXQpOworICAgICAgICAgICAgICAgICAgICArK21heEludERpZzsKKyAgICAgICAgICAgICAgICAgICAgLS1hZGQ7CisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYWRkIGEgZ3JvdXBpbmcgc2VwYXJhdG9yIGlmIHdlIGhhdmUgYXQgbGVhc3QKKyAgICAgICAgICAgICAgICAgICAgLy8gMiBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQsIHNvIHdlIGRvbid0CisgICAgICAgICAgICAgICAgICAgIC8vIGVuZCB1cCB3aXRoICIsIyMjIi4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGFkZD4xICYmIGlzR3JvdXBpbmdQb3NpdGlvbihtYXhJbnREaWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHN1YjBTdGFydCwgZ3JvdXApOworICAgICAgICAgICAgICAgICAgICAgICAgLS1hZGQ7ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFkUG9zID09IFBBRF9CRUZPUkVfU1VGRklYKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYWRTcGVjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJ0ID09IDApIHsKKyAgICAgICAgICAgICAgICAvKiBVc2Ugb3JpZ2luYWwgc3ltYm9scyByZWFkIGZyb20gcmVzb3VyY2VzIGluIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgKiBlZy4gdXNlICJcdTAwQTQiIGluc3RlYWQgb2YgIiQiIGluIExvY2FsZS5VUyBbUmljaGFyZC9HQ0xdCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYXBwZW5kQWZmaXhQYXR0ZXJuKHJlc3VsdCwgcG9zU3VmZml4UGF0dGVybiwgbG9jYWxpemVkKTsKKyAgICAgICAgICAgICAgICBpZiAocGFkUG9zID09IFBBRF9BRlRFUl9TVUZGSVgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYWRTcGVjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlU3VmZml4LmVxdWFscyhwb3NpdGl2ZVN1ZmZpeCkgJiYKKyAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmVQcmVmaXguZXF1YWxzKHN5bWJvbHMuZ2V0TWludXNTaWduKCkgKyBwb3NpdGl2ZVByZWZpeCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydCA9IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsb2NhbGl6ZWQgPyBzeW1ib2xzLmdldFBhdHRlcm5TZXBhcmF0b3IoKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTl9TRVBBUkFUT1IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXBwZW5kQWZmaXhQYXR0ZXJuKHJlc3VsdCwgbmVnU3VmZml4UGF0dGVybiwgbG9jYWxpemVkKTsKKyAgICAgICAgICAgICAgICBpZiAocGFkUG9zID09IFBBRF9BRlRFUl9TVUZGSVgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYWRTcGVjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGx5IHRoZSBnaXZlbiBwYXR0ZXJuIHRvIHRoaXMgRm9ybWF0IG9iamVjdC4gIEEgcGF0dGVybiBpcyBhCisgICAgICogc2hvcnQtaGFuZCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgdmFyaW91cyBmb3JtYXR0aW5nIHByb3BlcnRpZXMuCisgICAgICogVGhlc2UgcHJvcGVydGllcyBjYW4gYWxzbyBiZSBjaGFuZ2VkIGluZGl2aWR1YWxseSB0aHJvdWdoIHRoZQorICAgICAqIHZhcmlvdXMgc2V0dGVyIG1ldGhvZHMuCisgICAgICogPHA+CisgICAgICogVGhlcmUgaXMgbm8gbGltaXQgdG8gaW50ZWdlciBkaWdpdHMgYXJlIHNldAorICAgICAqIGJ5IHRoaXMgcm91dGluZSwgc2luY2UgdGhhdCBpcyB0aGUgdHlwaWNhbCBlbmQtdXNlciBkZXNpcmU7CisgICAgICogdXNlIHNldE1heGltdW1JbnRlZ2VyIGlmIHlvdSB3YW50IHRvIHNldCBhIHJlYWwgdmFsdWUuCisgICAgICogRm9yIG5lZ2F0aXZlIG51bWJlcnMsIHVzZSBhIHNlY29uZCBwYXR0ZXJuLCBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24KKyAgICAgKiA8UD5FeGFtcGxlICIjLCMwMC4wIyIgLT4gMSwyMzQuNTYKKyAgICAgKiA8UD5UaGlzIG1lYW5zIGEgbWluaW11bSBvZiAyIGludGVnZXIgZGlnaXRzLCAxIGZyYWN0aW9uIGRpZ2l0LCBhbmQKKyAgICAgKiBhIG1heGltdW0gb2YgMiBmcmFjdGlvbiBkaWdpdHMuCisgICAgICogPHA+RXhhbXBsZTogIiMsIzAwLjAjOygjLCMwMC4wIykiIGZvciBuZWdhdGl2ZXMgaW4gcGFyZW50aGVzZXMuCisgICAgICogPHA+SW4gbmVnYXRpdmUgcGF0dGVybnMsIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGNvdW50cyBhcmUgaWdub3JlZDsKKyAgICAgKiB0aGVzZSBhcmUgcHJlc3VtZWQgdG8gYmUgc2V0IGluIHRoZSBwb3NpdGl2ZSBwYXR0ZXJuLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFwcGx5UGF0dGVybiggU3RyaW5nIHBhdHRlcm4gKSB7CisgICAgICAgIGFwcGx5UGF0dGVybiggcGF0dGVybiwgZmFsc2UgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBseSB0aGUgZ2l2ZW4gcGF0dGVybiB0byB0aGlzIEZvcm1hdCBvYmplY3QuICBUaGUgcGF0dGVybgorICAgICAqIGlzIGFzc3VtZWQgdG8gYmUgaW4gYSBsb2NhbGl6ZWQgbm90YXRpb24uIEEgcGF0dGVybiBpcyBhCisgICAgICogc2hvcnQtaGFuZCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgdmFyaW91cyBmb3JtYXR0aW5nIHByb3BlcnRpZXMuCisgICAgICogVGhlc2UgcHJvcGVydGllcyBjYW4gYWxzbyBiZSBjaGFuZ2VkIGluZGl2aWR1YWxseSB0aHJvdWdoIHRoZQorICAgICAqIHZhcmlvdXMgc2V0dGVyIG1ldGhvZHMuCisgICAgICogPHA+CisgICAgICogVGhlcmUgaXMgbm8gbGltaXQgdG8gaW50ZWdlciBkaWdpdHMgYXJlIHNldAorICAgICAqIGJ5IHRoaXMgcm91dGluZSwgc2luY2UgdGhhdCBpcyB0aGUgdHlwaWNhbCBlbmQtdXNlciBkZXNpcmU7CisgICAgICogdXNlIHNldE1heGltdW1JbnRlZ2VyIGlmIHlvdSB3YW50IHRvIHNldCBhIHJlYWwgdmFsdWUuCisgICAgICogRm9yIG5lZ2F0aXZlIG51bWJlcnMsIHVzZSBhIHNlY29uZCBwYXR0ZXJuLCBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24KKyAgICAgKiA8UD5FeGFtcGxlICIjLCMwMC4wIyIgLT4gMSwyMzQuNTYKKyAgICAgKiA8UD5UaGlzIG1lYW5zIGEgbWluaW11bSBvZiAyIGludGVnZXIgZGlnaXRzLCAxIGZyYWN0aW9uIGRpZ2l0LCBhbmQKKyAgICAgKiBhIG1heGltdW0gb2YgMiBmcmFjdGlvbiBkaWdpdHMuCisgICAgICogPHA+RXhhbXBsZTogIiMsIzAwLjAjOygjLCMwMC4wIykiIGZvciBuZWdhdGl2ZXMgaW4gcGFyYW50aGVzZXMuCisgICAgICogPHA+SW4gbmVnYXRpdmUgcGF0dGVybnMsIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGNvdW50cyBhcmUgaWdub3JlZDsKKyAgICAgKiB0aGVzZSBhcmUgcHJlc3VtZWQgdG8gYmUgc2V0IGluIHRoZSBwb3NpdGl2ZSBwYXR0ZXJuLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFwcGx5TG9jYWxpemVkUGF0dGVybiggU3RyaW5nIHBhdHRlcm4gKSB7CisgICAgICAgIGFwcGx5UGF0dGVybiggcGF0dGVybiwgdHJ1ZSApOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPkNIQU5HRUQ8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogRG9lcyB0aGUgcmVhbCB3b3JrIG9mIGFwcGx5aW5nIGEgcGF0dGVybi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgYXBwbHlQYXR0ZXJuKFN0cmluZyBwYXR0ZXJuLCBib29sZWFuIGxvY2FsaXplZCkgeworICAgICAgICBjaGFyIHplcm9EaWdpdCAgICAgICAgID0gUEFUVEVSTl9aRVJPX0RJR0lUOworICAgICAgICBjaGFyIGdyb3VwaW5nU2VwYXJhdG9yID0gUEFUVEVSTl9HUk9VUElOR19TRVBBUkFUT1I7CisgICAgICAgIGNoYXIgZGVjaW1hbFNlcGFyYXRvciAgPSBQQVRURVJOX0RFQ0lNQUxfU0VQQVJBVE9SOworICAgICAgICBjaGFyIHBlcmNlbnQgICAgICAgICAgID0gUEFUVEVSTl9QRVJDRU5UOworICAgICAgICBjaGFyIHBlck1pbGwgICAgICAgICAgID0gUEFUVEVSTl9QRVJfTUlMTEU7CisgICAgICAgIGNoYXIgZGlnaXQgICAgICAgICAgICAgPSBQQVRURVJOX0RJR0lUOworICAgICAgICBjaGFyIHNlcGFyYXRvciAgICAgICAgID0gUEFUVEVSTl9TRVBBUkFUT1I7CisgICAgICAgIFN0cmluZyBleHBvbmVudCAgICAgICAgPSBQQVRURVJOX0VYUE9ORU5UOworICAgICAgICBjaGFyIHBsdXMgICAgICAgICAgICAgID0gUEFUVEVSTl9QTFVTX1NJR047CisgICAgICAgIGNoYXIgcGFkRXNjYXBlICAgICAgICAgPSBQQVRURVJOX1BBRF9FU0NBUEU7CisgICAgICAgIGNoYXIgbWludXMgICAgICAgICAgICAgPSBQQVRURVJOX01JTlVTOyAvL0J1ZyA0MjEyMDcyIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgaWYgKGxvY2FsaXplZCkgeworICAgICAgICAgICAgemVyb0RpZ2l0ICAgICAgICAgPSBzeW1ib2xzLmdldFplcm9EaWdpdCgpOworICAgICAgICAgICAgZ3JvdXBpbmdTZXBhcmF0b3IgPSBzeW1ib2xzLmdldEdyb3VwaW5nU2VwYXJhdG9yKCk7CisgICAgICAgICAgICBkZWNpbWFsU2VwYXJhdG9yICA9IHN5bWJvbHMuZ2V0RGVjaW1hbFNlcGFyYXRvcigpOworICAgICAgICAgICAgcGVyY2VudCAgICAgICAgICAgPSBzeW1ib2xzLmdldFBlcmNlbnQoKTsKKyAgICAgICAgICAgIHBlck1pbGwgICAgICAgICAgID0gc3ltYm9scy5nZXRQZXJNaWxsKCk7CisgICAgICAgICAgICBkaWdpdCAgICAgICAgICAgICA9IHN5bWJvbHMuZ2V0RGlnaXQoKTsKKyAgICAgICAgICAgIHNlcGFyYXRvciAgICAgICAgID0gc3ltYm9scy5nZXRQYXR0ZXJuU2VwYXJhdG9yKCk7CisgICAgICAgICAgICBleHBvbmVudCAgICAgICAgICA9IHN5bWJvbHMuZ2V0RXhwb25lbnRTZXBhcmF0b3IoKTsKKyAgICAgICAgICAgIHBsdXMgICAgICAgICAgICAgID0gc3ltYm9scy5nZXRQbHVzU2lnbigpOworICAgICAgICAgICAgcGFkRXNjYXBlICAgICAgICAgPSBzeW1ib2xzLmdldFBhZEVzY2FwZSgpOworICAgICAgICAgICAgbWludXMgICAgICAgICAgICAgPSBzeW1ib2xzLmdldE1pbnVzU2lnbigpOyAvL0J1ZyA0MjEyMDcyIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgfQorICAgICAgICBjaGFyIG5pbmVEaWdpdCA9IChjaGFyKSAoemVyb0RpZ2l0ICsgOSk7CisKKyAgICAgICAgYm9vbGVhbiBnb3ROZWdhdGl2ZSA9IGZhbHNlOworCisgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICAvLyBQYXJ0IDAgaXMgdGhlIHBvc2l0aXZlIHBhdHRlcm4uICBQYXJ0IDEsIGlmIHByZXNlbnQsIGlzIHRoZSBuZWdhdGl2ZQorICAgICAgICAvLyBwYXR0ZXJuLgorICAgICAgICBmb3IgKGludCBwYXJ0PTA7IHBhcnQ8MiAmJiBwb3M8cGF0dGVybi5sZW5ndGgoKTsgKytwYXJ0KSB7CisgICAgICAgICAgICAvLyBUaGUgc3VicGFydCByYW5nZXMgZnJvbSAwIHRvIDQ6IDA9cGF0dGVybiBwcm9wZXIsIDE9cHJlZml4LAorICAgICAgICAgICAgLy8gMj1zdWZmaXgsIDM9cHJlZml4IGluIHF1b3RlLCA0PXN1ZmZpeCBpbiBxdW90ZS4gIFN1YnBhcnQgMCBpcworICAgICAgICAgICAgLy8gYmV0d2VlbiB0aGUgcHJlZml4IGFuZCBzdWZmaXgsIGFuZCBjb25zaXN0cyBvZiBwYXR0ZXJuCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzLiAgSW4gdGhlIHByZWZpeCBhbmQgc3VmZml4LCBwZXJjZW50LCBwZXJtaWxsZSwgYW5kCisgICAgICAgICAgICAvLyBjdXJyZW5jeSBzeW1ib2xzIGFyZSByZWNvZ25pemVkIGFuZCB0cmFuc2xhdGVkLgorICAgICAgICAgICAgaW50IHN1YnBhcnQgPSAxLCBzdWIwU3RhcnQgPSAwLCBzdWIwTGltaXQgPSAwLCBzdWIyTGltaXQgPSAwOworCisgICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHdlIGRvbid0IGNoYW5nZSBhbnkgZmllbGRzIG9mIHRoaXMgb2JqZWN0CisgICAgICAgICAgICAvLyBwcmVtYXR1cmVseS4gIFdlIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBmb3IgdGhlIG11bHRpcGxpZXIsCisgICAgICAgICAgICAvLyBncm91cGluZywgZXRjLiwgYW5kIHRoZW4gb25seSBjaGFuZ2UgdGhlIGFjdHVhbCBvYmplY3QgZmllbGRzIGlmCisgICAgICAgICAgICAvLyBldmVyeXRoaW5nIHBhcnNlcyBjb3JyZWN0bHkuICBUaGlzIGFsc28gbGV0cyB1cyByZWdpc3RlcgorICAgICAgICAgICAgLy8gdGhlIGRhdGEgZnJvbSBwYXJ0IDAgYW5kIGlnbm9yZSB0aGUgcGFydCAxLCBleGNlcHQgZm9yIHRoZQorICAgICAgICAgICAgLy8gcHJlZml4IGFuZCBzdWZmaXguCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgcHJlZml4ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHN1ZmZpeCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIGludCBkZWNpbWFsUG9zID0gLTE7CisgICAgICAgICAgICBpbnQgbXVsdGlwbGllciA9IDE7CisgICAgICAgICAgICBpbnQgZGlnaXRMZWZ0Q291bnQgPSAwLCB6ZXJvRGlnaXRDb3VudCA9IDAsIGRpZ2l0UmlnaHRDb3VudCA9IDA7CisgICAgICAgICAgICBieXRlIGdyb3VwaW5nQ291bnQgPSAtMTsKKyAgICAgICAgICAgIGJ5dGUgZ3JvdXBpbmdDb3VudDIgPSAtMTsKKyAgICAgICAgICAgIGludCBwYWRQb3MgPSAtMTsKKyAgICAgICAgICAgIGNoYXIgcGFkQ2hhciA9IDA7CisgICAgICAgICAgICBpbnQgaW5jcmVtZW50UG9zID0gLTE7CisgICAgICAgICAgICBsb25nIGluY3JlbWVudFZhbCA9IDA7CisgICAgICAgICAgICBieXRlIGV4cERpZ2l0cyA9IC0xOworICAgICAgICAgICAgYm9vbGVhbiBleHBTaWduQWx3YXlzID0gZmFsc2U7CisgICAgICAgICAgICBib29sZWFuIGlzQ3VycmVuY3kgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gVGhlIGFmZml4IGlzIGVpdGhlciB0aGUgcHJlZml4IG9yIHRoZSBzdWZmaXguCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYWZmaXggPSBwcmVmaXg7CisKKyAgICAgICAgICAgIGludCBzdGFydCA9IHBvczsKKworICAgICAgICBQQVJUTE9PUDoKKyAgICAgICAgICAgIGZvciAoOyBwb3MgPCBwYXR0ZXJuLmxlbmd0aCgpOyArK3BvcykgeworICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBwYXR0ZXJuLmNoYXJBdChwb3MpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3VicGFydCkgeworICAgICAgICAgICAgICAgIGNhc2UgMDogLy8gUGF0dGVybiBwcm9wZXIgc3VicGFydCAoYmV0d2VlbiBwcmVmaXggJiBzdWZmaXgpCisgICAgICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGRpZ2l0cywgZGVjaW1hbCwgYW5kIGdyb3VwaW5nIGNoYXJhY3RlcnMuICBXZQorICAgICAgICAgICAgICAgICAgICAvLyByZWNvcmQgZml2ZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24uICBXZSBleHBlY3QgdGhlIGRpZ2l0cworICAgICAgICAgICAgICAgICAgICAvLyB0byBvY2N1ciBpbiB0aGUgcGF0dGVybiAjIyMjMDAuMDAjIyMjLCBhbmQgd2UgcmVjb3JkIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgbGVmdCBkaWdpdHMsIHplcm8gKGNlbnRyYWwpIGRpZ2l0cywgYW5kIHJpZ2h0CisgICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cy4gIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBncm91cGluZyBjaGFyYWN0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVjb3JkZWQgKHNob3VsZCBiZSBzb21ld2hlcmUgd2l0aGluIHRoZSBmaXJzdCB0d28gYmxvY2tzCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIGNoYXJhY3RlcnMpLCBhcyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGRlY2ltYWwgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIGFueSAoc2hvdWxkIGJlIGluIHRoZSB6ZXJvIGRpZ2l0cykuICBJZiB0aGVyZSBpcyBubworICAgICAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIHBvaW50LCB0aGVuIHRoZXJlIHNob3VsZCBiZSBubyByaWdodCBkaWdpdHMuCisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBkaWdpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHplcm9EaWdpdENvdW50ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZGlnaXRSaWdodENvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2RpZ2l0TGVmdENvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwaW5nQ291bnQgPj0gMCAmJiBkZWNpbWFsUG9zIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZ3JvdXBpbmdDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSB6ZXJvRGlnaXQgJiYgY2ggPD0gbmluZURpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRSaWdodENvdW50ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkICcwJyBpbiBwYXR0ZXJuIFwiIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKyAnIicpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKyt6ZXJvRGlnaXRDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cGluZ0NvdW50ID49IDAgJiYgZGVjaW1hbFBvcyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2dyb3VwaW5nQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggIT0gemVyb0RpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHAgPSBkaWdpdExlZnRDb3VudCArIHplcm9EaWdpdENvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGlnaXRSaWdodENvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmNyZW1lbnRQb3MgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5jcmVtZW50UG9zIDwgcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50VmFsICo9IDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmNyZW1lbnRQb3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRQb3MgPSBwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRWYWwgKz0gY2ggLSB6ZXJvRGlnaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gZ3JvdXBpbmdTZXBhcmF0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qQnVnIDQyMTIwNzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyB0aGUgTG9jYWxpemVkIHBhdHRlcm4gbGlrZSAiJ0ZyLiAnIycjIzAuMDU7J0ZyLi0nIycjIzAuMDUiCisgICAgICAgICAgICAgICAgICAgICAgICAgIChMb2NhbGU9IkNIIiwgZ3JvdXBpbmdTZXBhcmF0b3IgPT0gUVVPVEUpICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1JpY2hhcmQvR0NMXQorICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBRVU9URSAmJiAocG9zKzEpIDwgcGF0dGVybi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYWZ0ZXIgPSBwYXR0ZXJuLmNoYXJBdChwb3MrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYWZ0ZXIgPT0gZGlnaXQgfHwgKGFmdGVyID49IHplcm9EaWdpdCAmJiBhZnRlciA8PSBuaW5lRGlnaXQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHF1b3RlIG91dHNpZGUgcXVvdGVzIGluZGljYXRlcyBlaXRoZXIgdGhlIG9wZW5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcXVvdGUgb3IgdHdvIHF1b3Rlcywgd2hpY2ggaXMgYSBxdW90ZSBsaXRlcmFsLiAgVGhhdCBpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0aGUgZmlyc3QgcXVvdGUgaW4gJ2RvJyBvciBvJydjbG9jay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyID09IFFVT1RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBhcHBlbmQoY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBpbmdDb3VudCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwYXJ0ID0gMzsgLy8gcXVvdGVkIHByZWZpeCBzdWJwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHN1ZmZpeCBzdWJwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhcnQgPSAyOyAvLyBzdWZmaXggc3VicGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpeCA9IHN1ZmZpeDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMExpbWl0ID0gcG9zLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNpbWFsUG9zID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdyb3VwaW5nIHNlcGFyYXRvciBhZnRlciBkZWNpbWFsIGluIHBhdHRlcm4gXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKyAnIicpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdDb3VudDIgPSBncm91cGluZ0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gZGVjaW1hbFNlcGFyYXRvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2ltYWxQb3MgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXVsdGlwbGUgZGVjaW1hbCBzZXBhcmF0b3JzIGluIHBhdHRlcm4gXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKyAnIicpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZW50aW9uYWxseSBpbmNvcnBvcmF0ZSB0aGUgZGlnaXRSaWdodENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggaXQgaXMgaWxsZWdhbCBmb3IgdGhpcyB0byBiZSA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuICBXZSBjaGVjayBwYXR0ZXJuIHN5bnRheCBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxQb3MgPSBkaWdpdExlZnRDb3VudCArIHplcm9EaWdpdENvdW50ICsgZGlnaXRSaWdodENvdW50OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4ucmVnaW9uTWF0Y2hlcyhwb3MsIGV4cG9uZW50LCAwLCBleHBvbmVudC5sZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwRGlnaXRzID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXVsdGlwbGUgZXhwb25lbnRpYWwgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHMgaW4gcGF0dGVybiBcIiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKyAnIicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBpbmdDb3VudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdyb3VwaW5nIHNlcGFyYXRvciBpbiBleHBvbmVudGlhbCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0dGVybiBcIiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKyAnIicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgcG9zaXRpdmUgcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwb3MrMSkgPCBwYXR0ZXJuLmxlbmd0aCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBhdHRlcm4uY2hhckF0KHBvcysxKSA9PSBwbHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cFNpZ25BbHdheXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGxvb2thaGVhZCB0byBwYXJzZSBvdXQgdGhlIGV4cG9uZW50aWFsIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGF0dGVybiwgdGhlbiBqdW1wIGludG8gc3VmZml4IHN1YnBhcnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwRGlnaXRzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKytwb3MgPCBwYXR0ZXJuLmxlbmd0aCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4uY2hhckF0KHBvcykgPT0gemVyb0RpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZXhwRGlnaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRpZ2l0TGVmdENvdW50ICsgemVyb0RpZ2l0Q291bnQpIDwgMSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBEaWdpdHMgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hbGZvcm1lZCBleHBvbmVudGlhbCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0dGVybiBcIiIgKyBwYXR0ZXJuICsgJyInKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHN1ZmZpeCBzdWJwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBzdWJwYXJ0ID0gMjsgLy8gc3VmZml4IHN1YnBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFmZml4ID0gc3VmZml4OworICAgICAgICAgICAgICAgICAgICAgICAgc3ViMExpbWl0ID0gcG9zLS07CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIFByZWZpeCBzdWJwYXJ0CisgICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBTdWZmaXggc3VicGFydAorICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBwcmVmaXggLyBzdWZmaXggY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHVucXVvdGVkIGNoYXJhY3RlcnMgc2VlbiBpbiBwcmVmaXggb3Igc3VmZml4CisgICAgICAgICAgICAgICAgICAgIC8vIHN1YnBhcnQuCisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBkaWdpdCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gZ3JvdXBpbmdTZXBhcmF0b3IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoID09IGRlY2ltYWxTZXBhcmF0b3IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaCA+PSB6ZXJvRGlnaXQgJiYgY2ggPD0gbmluZURpZ2l0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW55IG9mIHRoZXNlIGNoYXJhY3RlcnMgaW1wbGljaXRseSBiZWdpbnMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IHN1YnBhcnQgaWYgd2UgYXJlIGluIHRoZSBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJwYXJ0ID09IDEpIHsgLy8gcHJlZml4IHN1YnBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwYXJ0ID0gMDsgLy8gcGF0dGVybiBwcm9wZXIgc3VicGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjBTdGFydCA9IHBvcy0tOyAvLyBSZXByb2Nlc3MgdGhpcyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gUVVPVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKkJ1ZyA0MjEyMDcyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIHRoZSBMb2NhbGl6ZWQgcGF0dGVybiBsaWtlICInRnIuICcjJyMjMC4wNTsnRnIuLScjJyMjMC4wNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMb2NhbGU9IkNIIiwgZ3JvdXBpbmdTZXBhcmF0b3IgPT0gUVVPVEUpICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgcXVvdGUgb3V0c2lkZSBxdW90ZXMgaW5kaWNhdGVzIGVpdGhlciB0aGUgb3BlbmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHF1b3RlIG9yIHR3byBxdW90ZXMsIHdoaWNoIGlzIGEgcXVvdGUgbGl0ZXJhbC4gIFRoYXQgaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0aGUgZmlyc3QgcXVvdGUgaW4gJ2RvJyBvciBvJydjbG9jay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHBvcysxKSA8IHBhdHRlcm4ubGVuZ3RoKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGFyQXQocG9zKzEpID09IFFVT1RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gYXBwZW5kKGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhcnQgKz0gMjsgLy8gb3BlbiBxdW90ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gYXBwZW5kKGNoKQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09IENVUlJFTkNZX1NJR04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBsb29rYWhlYWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW5jeSBzaWduIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb3VibGVkIG9yIG5vdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZG91YmxlZCA9IChwb3MgKyAxKSA8IHBhdHRlcm4ubGVuZ3RoKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLmNoYXJBdChwb3MgKyAxKSA9PSBDVVJSRU5DWV9TSUdOOworICAgICAgICAgICAgICAgICAgICAgICAgLypCdWcgNDIxMjA3MgorICAgICAgICAgICAgICAgICAgICAgICAgIFRvIG1lZXQgdGhlIG5lZWQgb2YgZXhwYW5kQWZmaXgoU3RyaW5nLCBTdGlybmdCdWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgW1JpY2hhcmQvR0NMXQorICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb3VibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3M7IC8vIFNraXAgb3ZlciB0aGUgZG91YmxlZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpeC5hcHBlbmQoY2gpOyAvLyBhcHBlbmQgdHdvOiBvbmUgaGVyZSwgb25lIGJlbG93CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbmN5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBhcHBlbmQoY2gpCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gUVVPVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgcXVvdGUgb3V0c2lkZSBxdW90ZXMgaW5kaWNhdGVzIGVpdGhlciB0aGUgb3BlbmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcXVvdGUgb3IgdHdvIHF1b3Rlcywgd2hpY2ggaXMgYSBxdW90ZSBsaXRlcmFsLiAgVGhhdCBpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgdGhlIGZpcnN0IHF1b3RlIGluICdkbycgb3IgbycnY2xvY2suCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHBvcysxKSA8IHBhdHRlcm4ubGVuZ3RoKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLmNoYXJBdChwb3MrMSkgPT0gUVVPVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpeC5hcHBlbmQoY2gpOyAvLyBhcHBlbmQgdHdvOiBvbmUgaGVyZSwgb25lIGJlbG93CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhcnQgKz0gMjsgLy8gb3BlbiBxdW90ZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGFwcGVuZChjaCkKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSBzZXBhcmF0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGFsbG93IHNlcGFyYXRvcnMgaW4gdGhlIHByZWZpeCwgYW5kIGRvbid0IGFsbG93CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXBhcmF0b3JzIGluIHRoZSBzZWNvbmQgcGF0dGVybiAocGFydCA9PSAxKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJwYXJ0ID09IDEgfHwgcGFydCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbnF1b3RlZCBzcGVjaWFsIGNoYXJhY3RlciAnIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCArICInIGluIHBhdHRlcm4gXCIiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKyAnIicpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgc3ViMkxpbWl0ID0gcG9zKys7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBQQVJUTE9PUDsgLy8gR28gdG8gbmV4dCBwYXJ0CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gcGVyY2VudCB8fCBjaCA9PSBwZXJNaWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXh0IGhhbmRsZSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBhcHBlbmRlZCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdWx0aXBsaWVyICE9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvbyBtYW55IHBlcmNlbnQvcGVybWlsbGUgY2hhcmFjdGVycyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJpbiBwYXR0ZXJuIFwiIiArIHBhdHRlcm4gKyAnIicpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllciA9IChjaCA9PSBwZXJjZW50KSA/IDEwMCA6IDEwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIG5vbi1sb2NhbGl6ZWQgcGF0dGVybgorICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSAoY2ggPT0gcGVyY2VudCkgPyBQQVRURVJOX1BFUkNFTlQgOiBQQVRURVJOX1BFUl9NSUxMRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBhcHBlbmQoY2gpCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gbWludXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gbm9uLWxvY2FsaXplZCBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFBBVFRFUk5fTUlOVVM7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gYXBwZW5kKGNoKQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09IHBhZEVzY2FwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhZFBvcyA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNdWx0aXBsZSBwYWQgc3BlY2lmaWVycyIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwb3MrMSkgPT0gcGF0dGVybi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBwYWQgc3BlY2lmaWVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRQb3MgPSBwb3MrKzsgLy8gQWR2YW5jZSBwYXN0IHBhZCBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICBwYWRDaGFyID0gcGF0dGVybi5jaGFyQXQocG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFmZml4LmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogLy8gUHJlZml4IHN1YnBhcnQsIGluIHF1b3RlCisgICAgICAgICAgICAgICAgY2FzZSA0OiAvLyBTdWZmaXggc3VicGFydCwgaW4gcXVvdGUKKyAgICAgICAgICAgICAgICAgICAgLy8gQSBxdW90ZSB3aXRoaW4gcXVvdGVzIGluZGljYXRlcyBlaXRoZXIgdGhlIGNsb3NpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gcXVvdGUgb3IgdHdvIHF1b3Rlcywgd2hpY2ggaXMgYSBxdW90ZSBsaXRlcmFsLiAgVGhhdCBpcywKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0aGUgc2Vjb25kIHF1b3RlIGluICdkbycgb3IgJ2RvbicndCcuCisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBRVU9URSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwb3MrMSkgPCBwYXR0ZXJuLmxlbmd0aCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGFyQXQocG9zKzEpID09IFFVT1RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3M7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZml4LmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhcnQgLT0gMjsgLy8gY2xvc2UgcXVvdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBhcHBlbmQoY2gpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogSW4gSUNVIDIuMiB0aGVyZSB3YXMgY29kZSBoZXJlIHRvIHBhcnNlIHF1b3RlZAorICAgICAgICAgICAgICAgICAgICAvLyBwZXJjZW50IGFuZCBwZXJtaWxsZSBjaGFyYWN0ZXJzIF93aXRoaW4gcXVvdGVzXyBhbmQgZ2l2ZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGVtIHNwZWNpYWwgbWVhbmluZy4gIFRoaXMgaXMgaW5jb3JyZWN0LCBzaW5jZSBxdW90ZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBhcmUgbGl0ZXJhbHMgd2l0aG91dCBzcGVjaWFsIG1lYW5pbmcuCisgICAgICAgICAgICAgICAgICAgIGFmZml4LmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc3VicGFydCA9PSAzIHx8IHN1YnBhcnQgPT0gNCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVudGVybWluYXRlZCBxdW90ZSBpbiAiICsgcGF0dGVybik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdWIwTGltaXQgPT0gMCkgeworICAgICAgICAgICAgICAgIHN1YjBMaW1pdCA9IHBhdHRlcm4ubGVuZ3RoKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdWIyTGltaXQgPT0gMCkgeworICAgICAgICAgICAgICAgIHN1YjJMaW1pdCA9IHBhdHRlcm4ubGVuZ3RoKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEhhbmRsZSBwYXR0ZXJucyB3aXRoIG5vICcwJyBwYXR0ZXJuIGNoYXJhY3Rlci4gIFRoZXNlIHBhdHRlcm5zCisgICAgICAgICAgICAgKiBhcmUgbGVnYWwsIGJ1dCBtdXN0IGJlIHJlY29kaWZpZWQgdG8gbWFrZSBzZW5zZS4gICIjIy4jIyMiIC0+CisgICAgICAgICAgICAgKiAiIzAuIyMjIi4gICIuIyMjIiAtPiAiLjAjIyIuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogV2UgYWxsb3cgcGF0dGVybnMgb2YgdGhlIGZvcm0gIiMjIyMiIHRvIHByb2R1Y2UgYSB6ZXJvRGlnaXRDb3VudAorICAgICAgICAgICAgICogb2YgemVybyAoZ290IHRoYXQ/KTsgYWx0aG91Z2ggdGhpcyBzZWVtcyBsaWtlIGl0IG1pZ2h0IG1ha2UgaXQKKyAgICAgICAgICAgICAqIHBvc3NpYmxlIGZvciBmb3JtYXQoKSB0byBwcm9kdWNlIGVtcHR5IHN0cmluZ3MsIGZvcm1hdCgpIGNoZWNrcworICAgICAgICAgICAgICogZm9yIHRoaXMgY29uZGl0aW9uIGFuZCBvdXRwdXRzIGEgemVybyBkaWdpdCBpbiB0aGlzIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAqIEhhdmluZyBhIHplcm9EaWdpdENvdW50IG9mIHplcm8geWllbGRzIGEgbWluaW11bSBpbnRlZ2VyIGRpZ2l0cworICAgICAgICAgICAgICogb2YgemVybywgd2hpY2ggYWxsb3dzIHByb3BlciByb3VuZC10cmlwIHBhdHRlcm5zLiAgV2UgZG9uJ3Qgd2FudAorICAgICAgICAgICAgICogIiMiIHRvIGJlY29tZSAiIzAiIHdoZW4gdG9QYXR0ZXJuKCkgaXMgY2FsbGVkIChldmVuIHRob3VnaCB0aGF0J3MKKyAgICAgICAgICAgICAqIHdoYXQgaXQgcmVhbGx5IGlzLCBzZW1hbnRpY2FsbHkpLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoemVyb0RpZ2l0Q291bnQgPT0gMCAmJiBkaWdpdExlZnRDb3VudCA+IDAgJiYgZGVjaW1hbFBvcyA+PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlICIjIyMuIyMjIiBhbmQgIiMjIy4iIGFuZCAiLiMjIyIKKyAgICAgICAgICAgICAgICBpbnQgbiA9IGRlY2ltYWxQb3M7CisgICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkgKytuOyAvLyBIYW5kbGUgIi4jIyMiCisgICAgICAgICAgICAgICAgZGlnaXRSaWdodENvdW50ID0gZGlnaXRMZWZ0Q291bnQgLSBuOworICAgICAgICAgICAgICAgIGRpZ2l0TGVmdENvdW50ID0gbiAtIDE7CisgICAgICAgICAgICAgICAgemVyb0RpZ2l0Q291bnQgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEbyBzeW50YXggY2hlY2tpbmcgb24gdGhlIGRpZ2l0cywgZGVjaW1hbCBwb2ludHMsIGFuZCBxdW90ZXMuCisgICAgICAgICAgICBpZiAoKGRlY2ltYWxQb3MgPCAwICYmIGRpZ2l0UmlnaHRDb3VudCA+IDApIHx8CisgICAgICAgICAgICAgICAgKGRlY2ltYWxQb3MgPj0gMCAmJgorICAgICAgICAgICAgICAgICAoZGVjaW1hbFBvcyA8IGRpZ2l0TGVmdENvdW50IHx8CisgICAgICAgICAgICAgICAgICBkZWNpbWFsUG9zID4gKGRpZ2l0TGVmdENvdW50ICsgemVyb0RpZ2l0Q291bnQpKSkgfHwKKyAgICAgICAgICAgICAgICBncm91cGluZ0NvdW50ID09IDAgfHwgZ3JvdXBpbmdDb3VudDIgPT0gMCB8fAorICAgICAgICAgICAgICAgIHN1YnBhcnQgPiAyKSB7IC8vIHN1YnBhcnQgPiAyID09IHVubWF0Y2hlZCBxdW90ZQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1hbGZvcm1lZCBwYXR0ZXJuIFwiIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuICsgJyInKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBhZCBpcyBhdCBsZWdhbCBwb3NpdGlvbiBiZWZvcmUgb3IgYWZ0ZXIgYWZmaXguCisgICAgICAgICAgICBpZiAocGFkUG9zID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocGFkUG9zID09IHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIHBhZFBvcyA9IFBBRF9CRUZPUkVfUFJFRklYOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFkUG9zKzIgPT0gc3ViMFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIHBhZFBvcyA9IFBBRF9BRlRFUl9QUkVGSVg7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWRQb3MgPT0gc3ViMExpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIHBhZFBvcyA9IFBBRF9CRUZPUkVfU1VGRklYOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFkUG9zKzIgPT0gc3ViMkxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIHBhZFBvcyA9IFBBRF9BRlRFUl9TVUZGSVg7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBwYWQgcG9zaXRpb24iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXJ0ID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBTZXQgbmVnYXRpdmUgYWZmaXhlcyB0ZW1wb3JhcmlseSB0byBtYXRjaCB0aGUgcG9zaXRpdmUKKyAgICAgICAgICAgICAgICAvLyBhZmZpeGVzLiAgRml4IHRoaXMgdXAgbGF0ZXIgYWZ0ZXIgcHJvY2Vzc2luZyBib3RoIHBhcnRzLgorICAgICAgICAgICAgICAgIC8qQnVnIDQyMTIwNzIKKyAgICAgICAgICAgICAgICAgIFRvIG1lZXQgdGhlIG5lZWQgb2YgZXhwYW5kQWZmaXgoU3RyaW5nLCBTdGlybmdCdWZmZXIpCisgICAgICAgICAgICAgICAgICBbUmljaGFyZC9HQ0xdCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBwb3NQcmVmaXhQYXR0ZXJuID0gbmVnUHJlZml4UGF0dGVybiA9IHByZWZpeC50b1N0cmluZygpOworICAgICAgICAgICAgICAgIHBvc1N1ZmZpeFBhdHRlcm4gPSBuZWdTdWZmaXhQYXR0ZXJuID0gc3VmZml4LnRvU3RyaW5nKCk7CisKKyAgICAgICAgICAgICAgICB1c2VFeHBvbmVudGlhbE5vdGF0aW9uID0gKGV4cERpZ2l0cyA+PSAwKTsKKyAgICAgICAgICAgICAgICBpZiAodXNlRXhwb25lbnRpYWxOb3RhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBtaW5FeHBvbmVudERpZ2l0cyA9IGV4cERpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnRTaWduQWx3YXlzU2hvd24gPSBleHBTaWduQWx3YXlzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpc0N1cnJlbmN5Rm9ybWF0ID0gaXNDdXJyZW5jeTsKKyAgICAgICAgICAgICAgICBpbnQgZGlnaXRUb3RhbENvdW50ID0gZGlnaXRMZWZ0Q291bnQgKyB6ZXJvRGlnaXRDb3VudCArIGRpZ2l0UmlnaHRDb3VudDsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZWZmZWN0aXZlRGVjaW1hbFBvcyBpcyB0aGUgcG9zaXRpb24gdGhlIGRlY2ltYWwgaXMgYXQgb3IKKyAgICAgICAgICAgICAgICAvLyB3b3VsZCBiZSBhdCBpZiB0aGVyZSBpcyBubyBkZWNpbWFsLiAgTm90ZSB0aGF0IGlmCisgICAgICAgICAgICAgICAgLy8gZGVjaW1hbFBvczwwLCB0aGVuIGRpZ2l0VG90YWxDb3VudCA9PSBkaWdpdExlZnRDb3VudCArCisgICAgICAgICAgICAgICAgLy8gemVyb0RpZ2l0Q291bnQuCisgICAgICAgICAgICAgICAgaW50IGVmZmVjdGl2ZURlY2ltYWxQb3MgPSBkZWNpbWFsUG9zID49IDAgPyBkZWNpbWFsUG9zIDogZGlnaXRUb3RhbENvdW50OworICAgICAgICAgICAgICAgIHNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKGVmZmVjdGl2ZURlY2ltYWxQb3MgLSBkaWdpdExlZnRDb3VudCk7CisgICAgICAgICAgICAgICAgLypVcHBlciBsaW1pdCBvbiBpbnRlZ2VyIGFuZCBmcmFjdGlvbiBkaWdpdHMgZm9yIGEgSmF2YSBkb3VibGUKKyAgICAgICAgICAgICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNldE1heGltdW1JbnRlZ2VyRGlnaXRzKHVzZUV4cG9uZW50aWFsTm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgID8gZGlnaXRMZWZ0Q291bnQgKyBnZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygpIDogRE9VQkxFX0lOVEVHRVJfRElHSVRTKTsKKyAgICAgICAgICAgICAgICBzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoZGVjaW1hbFBvcyA+PSAwCisgICAgICAgICAgICAgICAgICAgICAgICA/IChkaWdpdFRvdGFsQ291bnQgLSBkZWNpbWFsUG9zKSA6IDApOworICAgICAgICAgICAgICAgIHNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cyhkZWNpbWFsUG9zID49IDAKKyAgICAgICAgICAgICAgICAgICAgICAgID8gKGRpZ2l0TGVmdENvdW50ICsgemVyb0RpZ2l0Q291bnQgLSBkZWNpbWFsUG9zKSA6IDApOworICAgICAgICAgICAgICAgIHNldEdyb3VwaW5nVXNlZChncm91cGluZ0NvdW50ID4gMCk7CisgICAgICAgICAgICAgICAgdGhpcy5ncm91cGluZ1NpemUgPSAoZ3JvdXBpbmdDb3VudCA+IDApID8gZ3JvdXBpbmdDb3VudCA6IDA7CisgICAgICAgICAgICAgICAgdGhpcy5ncm91cGluZ1NpemUyID0gKGdyb3VwaW5nQ291bnQyID4gMCAmJiBncm91cGluZ0NvdW50MiAhPSBncm91cGluZ0NvdW50KQorICAgICAgICAgICAgICAgICAgICA/IGdyb3VwaW5nQ291bnQyIDogMDsKKyAgICAgICAgICAgICAgICB0aGlzLm11bHRpcGxpZXIgPSBtdWx0aXBsaWVyOworICAgICAgICAgICAgICAgIHNldERlY2ltYWxTZXBhcmF0b3JBbHdheXNTaG93bihkZWNpbWFsUG9zID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRlY2ltYWxQb3MgPT0gZGlnaXRUb3RhbENvdW50KTsKKyAgICAgICAgICAgICAgICBpZiAocGFkUG9zID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFkUG9zaXRpb24gPSBwYWRQb3M7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdFdpZHRoID0gc3ViMExpbWl0IC0gc3ViMFN0YXJ0OyAvLyB0byBiZSBmaXhlZCB1cCBiZWxvdworICAgICAgICAgICAgICAgICAgICBwYWQgPSBwYWRDaGFyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdFdpZHRoID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudFZhbCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEJpZ0RlY2ltYWwgc2NhbGUgY2Fubm90IGJlIG5lZ2F0aXZlIChldmVuIHRob3VnaAorICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UpLCBzbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGlzLgorICAgICAgICAgICAgICAgICAgICBpbnQgc2NhbGUgPSBpbmNyZW1lbnRQb3MgLSBlZmZlY3RpdmVEZWNpbWFsUG9zOworICAgICAgICAgICAgICAgICAgICByb3VuZGluZ0luY3JlbWVudCA9CisgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm1hdGguQmlnRGVjaW1hbC52YWx1ZU9mKGluY3JlbWVudFZhbCwgc2NhbGUgPiAwID8gc2NhbGUgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjYWxlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRpbmdJbmNyZW1lbnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nSW5jcmVtZW50Lm1vdmVQb2ludFJpZ2h0KC1zY2FsZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcm91bmRpbmdEb3VibGUgPSByb3VuZGluZ0luY3JlbWVudC5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICByb3VuZGluZ01vZGUgPSBqYXZhLm1hdGguQmlnRGVjaW1hbC5ST1VORF9IQUxGX0VWRU47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Um91bmRpbmdJbmNyZW1lbnQobnVsbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKkJ1ZyA0MjEyMDcyCisgICAgICAgICAgICAgICAgICBUbyBtZWV0IHRoZSBuZWVkIG9mIGV4cGFuZEFmZml4KFN0cmluZywgU3Rpcm5nQnVmZmVyKQorICAgICAgICAgICAgICAgICAgW1JpY2hhcmQvR0NMXQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbmVnUHJlZml4UGF0dGVybiA9IHByZWZpeC50b1N0cmluZygpOworICAgICAgICAgICAgICAgIG5lZ1N1ZmZpeFBhdHRlcm4gPSBzdWZmaXgudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBnb3ROZWdhdGl2ZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKkJ1ZyA0MTQwMDA5CisgICAgICAgICAgUHJvY2VzcyB0aGUgZW1wdHkgcGF0dGVybgorICAgICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKHBhdHRlcm4ubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgcG9zUHJlZml4UGF0dGVybiA9IHBvc1N1ZmZpeFBhdHRlcm4gPSAiIjsKKyAgICAgICAgICAgIHNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKDApOworICAgICAgICAgICAgc2V0TWF4aW11bUludGVnZXJEaWdpdHMoRE9VQkxFX0lOVEVHRVJfRElHSVRTKTsKKyAgICAgICAgICAgIHNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygwKTsKKyAgICAgICAgICAgIHNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhET1VCTEVfRlJBQ1RJT05fRElHSVRTKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIG5lZ2F0aXZlIHBhdHRlcm4sIG9yIGlmIHRoZSBuZWdhdGl2ZSBwYXR0ZXJuIGlzCisgICAgICAgIC8vIGlkZW50aWNhbCB0byB0aGUgcG9zaXRpdmUgcGF0dGVybiwgdGhlbiBwcmVwZW5kIHRoZSBtaW51cyBzaWduIHRvIHRoZQorICAgICAgICAvLyBwb3NpdGl2ZSBwYXR0ZXJuIHRvIGZvcm0gdGhlIG5lZ2F0aXZlIHBhdHRlcm4uCisgICAgICAgIC8qQnVnIDQyMTIwNzIKKyAgICAgICAgICBUbyBtZWV0IHRoZSBuZWVkIG9mIGV4cGFuZEFmZml4KFN0cmluZywgU3Rpcm5nQnVmZmVyKQorICAgICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKCFnb3ROZWdhdGl2ZSB8fAorICAgICAgICAgICAgKG5lZ1ByZWZpeFBhdHRlcm4uZXF1YWxzKHBvc1ByZWZpeFBhdHRlcm4pCisgICAgICAgICAgICAgJiYgbmVnU3VmZml4UGF0dGVybi5lcXVhbHMocG9zU3VmZml4UGF0dGVybikpKSB7CisgICAgICAgICAgICBuZWdTdWZmaXhQYXR0ZXJuID0gcG9zU3VmZml4UGF0dGVybjsKKyAgICAgICAgICAgIG5lZ1ByZWZpeFBhdHRlcm4gPSBzeW1ib2xzLmdldE1pbnVzU2lnbigpICsgcG9zUHJlZml4UGF0dGVybjsKKyAgICAgICAgfQorICAgICAgICAvKkJ1ZyA0MjEyMDcyCisgICAgICAgICAgVXBkYXRlIHRoZSBhZmZpeCBzdHJpbmdzIGFjY3JvZGluZyB0byBzeW1ib2xzIGluIG9yZGVyIHRvIGtlZXAKKyAgICAgICAgICB0aGUgYWZmaXggc3RyaW5ncyB1cCB0byBkYXRlLgorICAgICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgKi8KKyAgICAgICAgZXhwYW5kQWZmaXhlcygpOworCisgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGFjdHVhbCBwcmVmaXggYW5kIHN1ZmZpeCwgZml4IHVwIGZvcm1hdFdpZHRoCisgICAgICAgIGlmIChmb3JtYXRXaWR0aCA+IDApIHsKKyAgICAgICAgICAgIGZvcm1hdFdpZHRoICs9IHBvc2l0aXZlUHJlZml4Lmxlbmd0aCgpICsgcG9zaXRpdmVTdWZmaXgubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKlJld3JpdGUgdGhlIGZvbGxvd2luZyA0ICJzZXQiIG1ldGhvZHMKKyAgICAgIFVwcGVyIGxpbWl0IG9uIGludGVnZXIgYW5kIGZyYWN0aW9uIGRpZ2l0cyBmb3IgYSBKYXZhIGRvdWJsZSAKKyAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAqLworICAgIC8qKgorICAgICAqIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYQorICAgICAqIG51bWJlci4gVGhpcyBvdmVycmlkZSBsaW1pdHMgdGhlIGludGVnZXIgZGlnaXQgY291bnQgdG8gMzA5LgorICAgICAqIEBzZWUgTnVtYmVyRm9ybWF0I3NldE1heGltdW1JbnRlZ2VyRGlnaXRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TWF4aW11bUludGVnZXJEaWdpdHMoaW50IG5ld1ZhbHVlKSB7CisgICAgICAgIHN1cGVyLnNldE1heGltdW1JbnRlZ2VyRGlnaXRzKE1hdGgubWluKG5ld1ZhbHVlLCBET1VCTEVfSU5URUdFUl9ESUdJVFMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiB0aGUgaW50ZWdlciBwb3J0aW9uIG9mIGEKKyAgICAgKiBudW1iZXIuIFRoaXMgb3ZlcnJpZGUgbGltaXRzIHRoZSBpbnRlZ2VyIGRpZ2l0IGNvdW50IHRvIDMwOS4KKyAgICAgKiBAc2VlIE51bWJlckZvcm1hdCNzZXRNaW5pbXVtSW50ZWdlckRpZ2l0cworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKGludCBuZXdWYWx1ZSkgeworICAgICAgICBzdXBlci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cyhNYXRoLm1pbihuZXdWYWx1ZSwgRE9VQkxFX0lOVEVHRVJfRElHSVRTKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgPHR0PkN1cnJlbmN5PC90dD4gb2JqZWN0IHVzZWQgdG8gZGlzcGxheSBjdXJyZW5jeQorICAgICAqIGFtb3VudHMuICBUaGlzIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSwgaWYgdGhpcyBmb3JtYXQgaXMgYQorICAgICAqIGN1cnJlbmN5IGZvcm1hdC4gIElmIHRoaXMgZm9ybWF0IGlzIG5vdCBhIGN1cnJlbmN5IGZvcm1hdCwgdGhlbgorICAgICAqIHRoZSBjdXJyZW5jeSBvYmplY3QgaXMgdXNlZCBpZiBhbmQgd2hlbiB0aGlzIG9iamVjdCBiZWNvbWVzIGEKKyAgICAgKiBjdXJyZW5jeSBmb3JtYXQgdGhyb3VnaCB0aGUgYXBwbGljYXRpb24gb2YgYSBuZXcgcGF0dGVybi4KKyAgICAgKiBAcGFyYW0gdGhlQ3VycmVuY3kgbmV3IGN1cnJlbmN5IG9iamVjdCB0byB1c2UuICBNdXN0IG5vdCBiZQorICAgICAqIG51bGwuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW5jeShDdXJyZW5jeSB0aGVDdXJyZW5jeSkgeworICAgICAgICAvLyBJZiB3ZSBhcmUgYSBjdXJyZW5jeSBmb3JtYXQsIHRoZW4gbW9kaWZ5IG91ciBhZmZpeGVzIHRvCisgICAgICAgIC8vIGVuY29kZSB0aGUgY3VycmVuY3kgc3ltYm9sIGZvciB0aGUgZ2l2ZW4gY3VycmVuY3kgaW4gb3VyCisgICAgICAgIC8vIGxvY2FsZSwgYW5kIGFkanVzdCB0aGUgZGVjaW1hbCBkaWdpdHMgYW5kIHJvdW5kaW5nIGZvciB0aGUKKyAgICAgICAgLy8gZ2l2ZW4gY3VycmVuY3kuCisKKyAgICAgICAgY3VycmVuY3kgPSB0aGVDdXJyZW5jeTsKKworICAgICAgICBpZiAoaXNDdXJyZW5jeUZvcm1hdCkgeworICAgICAgICAgICAgc2V0Um91bmRpbmdJbmNyZW1lbnQoY3VycmVuY3kuZ2V0Um91bmRpbmdJbmNyZW1lbnQoKSk7CisKKyAgICAgICAgICAgIGludCBkID0gY3VycmVuY3kuZ2V0RGVmYXVsdEZyYWN0aW9uRGlnaXRzKCk7CisgICAgICAgICAgICBzZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoZCk7CisgICAgICAgICAgICBzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoZCk7CisKKyAgICAgICAgICAgIGV4cGFuZEFmZml4ZXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIDx0dD5DdXJyZW5jeTwvdHQ+IG9iamVjdCB1c2VkIHRvIGRpc3BsYXkgY3VycmVuY3kKKyAgICAgKiBhbW91bnRzLiAgVGhpcyB3aWxsIGJlIG51bGwgaWYgYSBvYmplY3QgaXMgcmVzdXJyZWN0ZWQgd2l0aCBhCisgICAgICogY3VzdG9tIERlY2ltYWxGb3JtYXRTeW1ib2xzIG9iamVjdCwgb3IgaWYgdGhlIHVzZXIgc2V0cyBhCisgICAgICogY3VzdG9tIERlY2ltYWxGb3JtYXRTeW1ib2xzIG9iamVjdC4gIEEgY3VzdG9tCisgICAgICogRGVjaW1hbEZvcm1hdFN5bWJvbHMgb2JqZWN0IGhhcyBjdXJyZW5jeSBzeW1ib2xzIHRoYXQgYXJlIG5vdAorICAgICAqIHRoZSBzdGFuZGFyZCBvbmVzIGZvciBpdHMgbG9jYWxlLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIEN1cnJlbmN5IGdldEN1cnJlbmN5KCkgeworICAgICAgICByZXR1cm4gY3VycmVuY3k7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIHRoZSBmcmFjdGlvbiBwb3J0aW9uIG9mIGEKKyAgICAgKiBudW1iZXIuIFRoaXMgb3ZlcnJpZGUgbGltaXRzIHRoZSBmcmFjdGlvbiBkaWdpdCBjb3VudCB0byAzNDAuCisgICAgICogQHNlZSBOdW1iZXJGb3JtYXQjc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKGludCBuZXdWYWx1ZSkgeworICAgICAgICBzdXBlci5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoTWF0aC5taW4obmV3VmFsdWUsIERPVUJMRV9GUkFDVElPTl9ESUdJVFMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiB0aGUgZnJhY3Rpb24gcG9ydGlvbiBvZiBhCisgICAgICogbnVtYmVyLiBUaGlzIG92ZXJyaWRlIGxpbWl0cyB0aGUgZnJhY3Rpb24gZGlnaXQgY291bnQgdG8gMzQwLgorICAgICAqIEBzZWUgTnVtYmVyRm9ybWF0I3NldE1pbmltdW1GcmFjdGlvbkRpZ2l0cworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cyhpbnQgbmV3VmFsdWUpIHsKKyAgICAgICAgc3VwZXIuc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKE1hdGgubWluKG5ld1ZhbHVlLCBET1VCTEVfRlJBQ1RJT05fRElHSVRTKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmlyc3QsIHJlYWQgdGhlIGRlZmF1bHQgc2VyaWFsaXphYmxlIGZpZWxkcyBmcm9tIHRoZSBzdHJlYW0uICBUaGVuCisgICAgICogaWYgPGNvZGU+c2VyaWFsVmVyc2lvbk9uU3RyZWFtPC9jb2RlPiBpcyBsZXNzIHRoYW4gMSwgaW5kaWNhdGluZyB0aGF0CisgICAgICogdGhlIHN0cmVhbSB3YXMgd3JpdHRlbiBieSBKREsgMS4xLCBpbml0aWFsaXplIDxjb2RlPnVzZUV4cG9uZW50aWFsTm90YXRpb248L2NvZGU+CisgICAgICogdG8gZmFsc2UsIHNpbmNlIGl0IHdhcyBub3QgcHJlc2VudCBpbiBKREsgMS4xLgorICAgICAqIEZpbmFsbHksIHNldCBzZXJpYWxWZXJzaW9uT25TdHJlYW0gYmFjayB0byB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIHNvIHRoYXQKKyAgICAgKiBkZWZhdWx0IHNlcmlhbGl6YXRpb24gd2lsbCB3b3JrIHByb3Blcmx5IGlmIHRoaXMgb2JqZWN0IGlzIHN0cmVhbWVkIG91dCBhZ2Fpbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVhZE9iamVjdChPYmplY3RJbnB1dFN0cmVhbSBzdHJlYW0pCisgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN0cmVhbS5kZWZhdWx0UmVhZE9iamVjdCgpOworICAgICAgICAvKkJ1ZyA0MTg1NzYxIHZhbGlkYXRlIGZpZWxkcworICAgICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgKi8KKyAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBtYXhpbXVtIGNvdW50cyBiZWNhdXNlIE51bWJlckZvcm1hdAorICAgICAgICAvLyAucmVhZE9iamVjdCBoYXMgYWxyZWFkeSBlbnN1cmVkIHRoYXQgdGhlIG1heGltdW0gaXMgZ3JlYXRlciB0aGFuIHRoZQorICAgICAgICAvLyBtaW5pbXVtIGNvdW50LgorICAgICAgICAvKkNvbW1lbnRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb24sIGFuZCByZXNlcnZlZCBmb3IgZnVydGhlciB1c2UKKyAgICAgICAgaWYgKGdldE1heGltdW1JbnRlZ2VyRGlnaXRzKCkgPiBET1VCTEVfSU5URUdFUl9ESUdJVFMgfHwKKyAgICAgICAgICAgIGdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpID4gRE9VQkxFX0ZSQUNUSU9OX0RJR0lUUykgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPYmplY3RFeGNlcHRpb24oIkRpZ2l0IGNvdW50IG91dCBvZiByYW5nZSIpOworICAgICAgICB9Ki8KKyAgICAgICAgLyogVHJ1bmNhdGUgdGhlIG1heGltdW1JbnRlZ2VyRGlnaXRzIHRvIERPVUJMRV9JTlRFR0VSX0RJR0lUUyBhbmQgbWF4aW11bUZyYWN0aW9uRGlnaXRzCisgICAgICAgICAqIHRvIERPVUJMRV9GUkFDVElPTl9ESUdJVFMKKyAgICAgICAgICovCisgICAgICAgIGlmIChnZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpID4gRE9VQkxFX0lOVEVHRVJfRElHSVRTKSB7CisgICAgICAgICAgICAgc2V0TWF4aW11bUludGVnZXJEaWdpdHMoRE9VQkxFX0lOVEVHRVJfRElHSVRTKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCkgPiBET1VCTEVfRlJBQ1RJT05fRElHSVRTKSB7CisgICAgICAgICAgICBzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoRE9VQkxFX0ZSQUNUSU9OX0RJR0lUUyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcmlhbFZlcnNpb25PblN0cmVhbSA8IDIpIHsKKyAgICAgICAgICAgIGV4cG9uZW50U2lnbkFsd2F5c1Nob3duID0gZmFsc2U7CisgICAgICAgICAgICByb3VuZGluZ0RvdWJsZSA9IDAuMDsKKyAgICAgICAgICAgIHJvdW5kaW5nSW5jcmVtZW50ID0gbnVsbDsKKyAgICAgICAgICAgIHJvdW5kaW5nTW9kZSA9IGphdmEubWF0aC5CaWdEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTjsKKyAgICAgICAgICAgIGZvcm1hdFdpZHRoID0gMDsKKyAgICAgICAgICAgIHBhZCA9ICcgJzsKKyAgICAgICAgICAgIHBhZFBvc2l0aW9uID0gUEFEX0JFRk9SRV9QUkVGSVg7CisgICAgICAgICAgICBpZiAoc2VyaWFsVmVyc2lvbk9uU3RyZWFtIDwgMSkgeworICAgICAgICAgICAgICAgIC8vIERpZG4ndCBoYXZlIGV4cG9uZW50aWFsIGZpZWxkcworICAgICAgICAgICAgICAgIHVzZUV4cG9uZW50aWFsTm90YXRpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc2VyaWFsVmVyc2lvbk9uU3RyZWFtIDwgMykgeworICAgICAgICAgICAgLy8gVmVyc2lvbnMgcHJpb3IgdG8gMyBkbyBub3Qgc3RvcmUgYSBjdXJyZW5jeSBvYmplY3QuCisgICAgICAgICAgICAvLyBDcmVhdGUgb25lIHRvIG1hdGNoIHRoZSBEZWNpbWFsRm9ybWF0U3ltYm9scyBvYmplY3QuCisgICAgICAgICAgICBzZXRDdXJyZW5jeUZvclN5bWJvbHMoKTsKKyAgICAgICAgfQorICAgICAgICBzZXJpYWxWZXJzaW9uT25TdHJlYW0gPSBjdXJyZW50U2VyaWFsVmVyc2lvbjsKKyAgICAgICAgZGlnaXRMaXN0ID0gbmV3IERpZ2l0TGlzdCgpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIElOU1RBTkNFIFZBUklBQkxFUworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgRGlnaXRMaXN0IGRpZ2l0TGlzdCA9IG5ldyBEaWdpdExpc3QoKTsKKworICAgIC8qKgorICAgICAqIFRoZSBzeW1ib2wgdXNlZCBhcyBhIHByZWZpeCB3aGVuIGZvcm1hdHRpbmcgcG9zaXRpdmUgbnVtYmVycywgZS5nLiAiKyIuCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0UG9zaXRpdmVQcmVmaXgKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyAgcG9zaXRpdmVQcmVmaXggPSAiIjsKKworICAgIC8qKgorICAgICAqIFRoZSBzeW1ib2wgdXNlZCBhcyBhIHN1ZmZpeCB3aGVuIGZvcm1hdHRpbmcgcG9zaXRpdmUgbnVtYmVycy4KKyAgICAgKiBUaGlzIGlzIG9mdGVuIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRQb3NpdGl2ZVN1ZmZpeAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nICBwb3NpdGl2ZVN1ZmZpeCA9ICIiOworCisgICAgLyoqCisgICAgICogVGhlIHN5bWJvbCB1c2VkIGFzIGEgcHJlZml4IHdoZW4gZm9ybWF0dGluZyBuZWdhdGl2ZSBudW1iZXJzLCBlLmcuICItIi4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXROZWdhdGl2ZVByZWZpeAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nICBuZWdhdGl2ZVByZWZpeCA9ICItIjsKKworICAgIC8qKgorICAgICAqIFRoZSBzeW1ib2wgdXNlZCBhcyBhIHN1ZmZpeCB3aGVuIGZvcm1hdHRpbmcgbmVnYXRpdmUgbnVtYmVycy4KKyAgICAgKiBUaGlzIGlzIG9mdGVuIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXROZWdhdGl2ZVN1ZmZpeAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nICBuZWdhdGl2ZVN1ZmZpeCA9ICIiOworICAgIAorICAgIC8qKgorICAgICAqIFRoZSBwcmVmaXggcGF0dGVybiBmb3Igbm9uLW5lZ2F0aXZlIG51bWJlcnMuICBUaGlzIHZhcmlhYmxlIGNvcnJlc3BvbmRzCisgICAgICogdG8gPGNvZGU+cG9zaXRpdmVQcmVmaXg8L2NvZGU+LgorICAgICAqCisgICAgICogPHA+VGhpcyBwYXR0ZXJuIGlzIGV4cGFuZGVkIGJ5IHRoZSBtZXRob2QgPGNvZGU+ZXhwYW5kQWZmaXgoKTwvY29kZT4gdG8KKyAgICAgKiA8Y29kZT5wb3NpdGl2ZVByZWZpeDwvY29kZT4gdG8gdXBkYXRlIHRoZSBsYXR0ZXIgdG8gcmVmbGVjdCBjaGFuZ2VzIGluCisgICAgICogPGNvZGU+c3ltYm9sczwvY29kZT4uICBJZiB0aGlzIHZhcmlhYmxlIGlzIDxjb2RlPm51bGw8L2NvZGU+IHRoZW4KKyAgICAgKiA8Y29kZT5wb3NpdGl2ZVByZWZpeDwvY29kZT4gaXMgdGFrZW4gYXMgYSBsaXRlcmFsIHZhbHVlIHRoYXQgZG9lcyBub3QKKyAgICAgKiBjaGFuZ2Ugd2hlbiA8Y29kZT5zeW1ib2xzPC9jb2RlPiBjaGFuZ2VzLiAgVGhpcyB2YXJpYWJsZSBpcyBhbHdheXMKKyAgICAgKiA8Y29kZT5udWxsPC9jb2RlPiBmb3IgPGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4gb2JqZWN0cyBvbGRlciB0aGFuCisgICAgICogc3RyZWFtIHZlcnNpb24gMiByZXN0b3JlZCBmcm9tIHN0cmVhbS4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICAvL1tSaWNoYXJkL0dDTF0KKyAgICBwcml2YXRlIFN0cmluZyBwb3NQcmVmaXhQYXR0ZXJuOworCisgICAgLyoqCisgICAgICogVGhlIHN1ZmZpeCBwYXR0ZXJuIGZvciBub24tbmVnYXRpdmUgbnVtYmVycy4gIFRoaXMgdmFyaWFibGUgY29ycmVzcG9uZHMKKyAgICAgKiB0byA8Y29kZT5wb3NpdGl2ZVN1ZmZpeDwvY29kZT4uICBUaGlzIHZhcmlhYmxlIGlzIGFuYWxvZ291cyB0bworICAgICAqIDxjb2RlPnBvc1ByZWZpeFBhdHRlcm48L2NvZGU+OyBzZWUgdGhhdCB2YXJpYWJsZSBmb3IgZnVydGhlcgorICAgICAqIGRvY3VtZW50YXRpb24uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgLy9bUmljaGFyZC9HQ0xdCisgICAgcHJpdmF0ZSBTdHJpbmcgcG9zU3VmZml4UGF0dGVybjsKKworICAgIC8qKgorICAgICAqIFRoZSBwcmVmaXggcGF0dGVybiBmb3IgbmVnYXRpdmUgbnVtYmVycy4gIFRoaXMgdmFyaWFibGUgY29ycmVzcG9uZHMKKyAgICAgKiB0byA8Y29kZT5uZWdhdGl2ZVByZWZpeDwvY29kZT4uICBUaGlzIHZhcmlhYmxlIGlzIGFuYWxvZ291cyB0bworICAgICAqIDxjb2RlPnBvc1ByZWZpeFBhdHRlcm48L2NvZGU+OyBzZWUgdGhhdCB2YXJpYWJsZSBmb3IgZnVydGhlcgorICAgICAqIGRvY3VtZW50YXRpb24uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgLy9bUmljaGFyZC9HQ0xdCisgICAgcHJpdmF0ZSBTdHJpbmcgbmVnUHJlZml4UGF0dGVybjsKKworICAgIC8qKgorICAgICAqIFRoZSBzdWZmaXggcGF0dGVybiBmb3IgbmVnYXRpdmUgbnVtYmVycy4gIFRoaXMgdmFyaWFibGUgY29ycmVzcG9uZHMKKyAgICAgKiB0byA8Y29kZT5uZWdhdGl2ZVN1ZmZpeDwvY29kZT4uICBUaGlzIHZhcmlhYmxlIGlzIGFuYWxvZ291cyB0bworICAgICAqIDxjb2RlPnBvc1ByZWZpeFBhdHRlcm48L2NvZGU+OyBzZWUgdGhhdCB2YXJpYWJsZSBmb3IgZnVydGhlcgorICAgICAqIGRvY3VtZW50YXRpb24uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgLy9bUmljaGFyZC9HQ0xdCisgICAgcHJpdmF0ZSBTdHJpbmcgbmVnU3VmZml4UGF0dGVybjsKKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGUgbXVsdGlwbGllciBmb3IgdXNlIGluIHBlcmNlbnQsIHBlcm1pbGwsIGV0Yy4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRNdWx0aXBsaWVyCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgICAgIG11bHRpcGxpZXIgPSAxOworICAgIAorICAgIC8qKgorICAgICAqIFRoZSBudW1iZXIgb2YgZGlnaXRzIGJldHdlZW4gZ3JvdXBpbmcgc2VwYXJhdG9ycyBpbiB0aGUgaW50ZWdlcgorICAgICAqIHBvcnRpb24gb2YgYSBudW1iZXIuICBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGlmCisgICAgICogPGNvZGU+TnVtYmVyRm9ybWF0Lmdyb3VwaW5nVXNlZDwvY29kZT4gaXMgdHJ1ZS4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRHcm91cGluZ1NpemUKKyAgICAgKiBAc2VlIE51bWJlckZvcm1hdCNpc0dyb3VwaW5nVXNlZAorICAgICAqLworICAgIHByaXZhdGUgYnl0ZSAgICBncm91cGluZ1NpemUgPSAzOyAgLy8gaW52YXJpYW50LCA+IDAgaWYgdXNlVGhvdXNhbmRzCisKKyAgICAvKioKKyAgICAgKiBUaGUgc2Vjb25kYXJ5IGdyb3VwaW5nIHNpemUuICBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgSGluZGkKKyAgICAgKiBudW1lcmFscywgd2hpY2ggdXNlIGEgcHJpbWFyeSBncm91cGluZyBvZiAzIGFuZCBhIHNlY29uZGFyeQorICAgICAqIGdyb3VwaW5nIG9mIDIsIGUuZy4sICIxMiwzNCw1NjciLiAgSWYgdGhpcyB2YWx1ZSBpcyBsZXNzIHRoYW4KKyAgICAgKiAxLCB0aGVuIHNlY29uZGFyeSBncm91cGluZyBpcyBlcXVhbCB0byB0aGUgcHJpbWFyeSBncm91cGluZy4KKyAgICAgKiBbTkVXXQorICAgICAqLworICAgIHByaXZhdGUgYnl0ZSAgICBncm91cGluZ1NpemUyID0gMDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBJZiB0cnVlLCBmb3JjZXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIHRvIGFsd2F5cyBhcHBlYXIgaW4gYSBmb3JtYXR0ZWQKKyAgICAgKiBudW1iZXIsIGV2ZW4gaWYgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgbnVtYmVyIGlzIHplcm8uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjaXNEZWNpbWFsU2VwYXJhdG9yQWx3YXlzU2hvd24KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gZGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duID0gZmFsc2U7CisgICAgCisgICAgLyoqCisgICAgICogVHJ1ZSBpZiB0aGlzIG9iamVjdCByZXByZXNlbnRzIGEgY3VycmVuY3kgZm9ybWF0LiAgVGhpcyBkZXRlcm1pbmVzCisgICAgICogd2hldGhlciB0aGUgbW9uZXRhcnkgZGVjaW1hbCBzZXBhcmF0b3IgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgb25lLgorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gaXNDdXJyZW5jeUZvcm1hdCA9IGZhbHNlOworICAgIAorICAgIC8qKgorICAgICAqIFRoZSA8Y29kZT5EZWNpbWFsRm9ybWF0U3ltYm9sczwvY29kZT4gb2JqZWN0IHVzZWQgYnkgdGhpcyBmb3JtYXQuCisgICAgICogSXQgY29udGFpbnMgdGhlIHN5bWJvbHMgdXNlZCB0byBmb3JtYXQgbnVtYmVycywgZS5nLiB0aGUgZ3JvdXBpbmcgc2VwYXJhdG9yLAorICAgICAqIGRlY2ltYWwgc2VwYXJhdG9yLCBhbmQgc28gb24uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjc2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMKKyAgICAgKiBAc2VlIERlY2ltYWxGb3JtYXRTeW1ib2xzCisgICAgICovCisgICAgcHJpdmF0ZSBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW1ib2xzID0gbnVsbDsgLy8gTElVIG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scygpOworCisgICAgLyoqCisgICAgICogVHJ1ZSB0byBmb3JjZSB0aGUgdXNlIG9mIGV4cG9uZW50aWFsIChpLmUuIHNjaWVudGlmaWMpIG5vdGF0aW9uIHdoZW4gZm9ybWF0dGluZworICAgICAqIG51bWJlcnMuCisgICAgICogPHA+CisgICAgICogTm90ZSB0aGF0IHRoZSBKREsgMS4yIHB1YmxpYyBBUEkgcHJvdmlkZXMgbm8gd2F5IHRvIHNldCB0aGlzIGZpZWxkLAorICAgICAqIGV2ZW4gdGhvdWdoIGl0IGlzIHN1cHBvcnRlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBzdHJlYW0gZm9ybWF0LgorICAgICAqIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGlzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIEFQSSBpbiB0aGUgZnV0dXJlLgorICAgICAqCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiB1c2VFeHBvbmVudGlhbE5vdGF0aW9uOyAgLy8gTmV3bHkgcGVyc2lzdGVudCBpbiBKREsgMS4yCisKKyAgICAvKioKKyAgICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIHVzZWQgdG8gZGlzcGxheSB0aGUgZXhwb25lbnQgd2hlbiBhIG51bWJlciBpcworICAgICAqIGZvcm1hdHRlZCBpbiBleHBvbmVudGlhbCBub3RhdGlvbi4gIFRoaXMgZmllbGQgaXMgaWdub3JlZCBpZgorICAgICAqIDxjb2RlPnVzZUV4cG9uZW50aWFsTm90YXRpb248L2NvZGU+IGlzIG5vdCB0cnVlLgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhhdCB0aGUgSkRLIDEuMiBwdWJsaWMgQVBJIHByb3ZpZGVzIG5vIHdheSB0byBzZXQgdGhpcyBmaWVsZCwKKyAgICAgKiBldmVuIHRob3VnaCBpdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgc3RyZWFtIGZvcm1hdC4KKyAgICAgKiBUaGUgaW50ZW50IGlzIHRoYXQgdGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBBUEkgaW4gdGhlIGZ1dHVyZS4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIGJ5dGUgICAgbWluRXhwb25lbnREaWdpdHM7ICAgICAgIC8vIE5ld2x5IHBlcnNpc3RlbnQgaW4gSkRLIDEuMgorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIElmIHRydWUsIHRoZSBleHBvbmVudCBpcyBhbHdheXMgcHJlZml4ZWQgd2l0aCBlaXRoZXIgdGhlIHBsdXMKKyAgICAgKiBzaWduIG9yIHRoZSBtaW51cyBzaWduLiAgT3RoZXJ3aXNlLCBvbmx5IG5lZ2F0aXZlIGV4cG9uZW50cyBhcmUKKyAgICAgKiBwcmVmaXhlZCB3aXRoIHRoZSBtaW51cyBzaWduLiAgVGhpcyBoYXMgbm8gZWZmZWN0IHVubGVzcworICAgICAqIDxjb2RlPnVzZUV4cG9uZW50aWFsTm90YXRpb248L2NvZGU+IGlzIHRydWUuCisgICAgICogQHNlcmlhbAorICAgICAqIEBzaW5jZSBBbHBoYVdvcmtzIE51bWJlckZvcm1hdAorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBleHBvbmVudFNpZ25BbHdheXNTaG93biA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFRoZSB2YWx1ZSB0byB3aGljaCBudW1iZXJzIGFyZSByb3VuZGVkIGR1cmluZyBmb3JtYXR0aW5nLiAgRm9yIGV4YW1wbGUsCisgICAgICogaWYgdGhlIHJvdW5kaW5nIGluY3JlbWVudCBpcyAwLjA1LCB0aGVuIDEzLjM3MSB3b3VsZCBiZSBmb3JtYXR0ZWQgYXMKKyAgICAgKiAxMy4zNTAsIGFzc3VtaW5nIDMgZnJhY3Rpb24gZGlnaXRzLiAgSGFzIHRoZSB2YWx1ZSA8Y29kZT5udWxsPC9jb2RlPiBpZgorICAgICAqIHJvdW5kaW5nIGlzIG5vdCBpbiBlZmZlY3QsIG9yIGEgcG9zaXRpdmUgdmFsdWUgaWYgcm91bmRpbmcgaXMgaW4gZWZmZWN0LgorICAgICAqIERlZmF1bHQgdmFsdWUgPGNvZGU+bnVsbDwvY29kZT4uCisgICAgICogQHNlcmlhbAorICAgICAqIEBzaW5jZSBBbHBoYVdvcmtzIE51bWJlckZvcm1hdAorICAgICAqLworICAgIHByaXZhdGUgamF2YS5tYXRoLkJpZ0RlY2ltYWwgcm91bmRpbmdJbmNyZW1lbnQgPSBudWxsOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFRoZSByb3VuZGluZyBpbmNyZW1lbnQgYXMgYSBkb3VibGUuICBJZiB0aGlzIHZhbHVlIGlzIDw9IDAsIHRoZW4gbm8KKyAgICAgKiByb3VuZGluZyBpcyBkb25lLiAgVGhpcyB2YWx1ZSBpcworICAgICAqIDxjb2RlPnJvdW5kaW5nSW5jcmVtZW50LmRvdWJsZVZhbHVlKCk8L2NvZGU+LiAgRGVmYXVsdCB2YWx1ZSAwLjAuCisgICAgICovCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgZG91YmxlIHJvdW5kaW5nRG91YmxlID0gMC4wOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFRoZSByb3VuZGluZyBtb2RlLiAgVGhpcyB2YWx1ZSBjb250cm9scyBhbnkgcm91bmRpbmcgb3BlcmF0aW9ucyB3aGljaAorICAgICAqIG9jY3VyIHdoZW4gYXBwbHlpbmcgYSByb3VuZGluZyBpbmNyZW1lbnQgb3Igd2hlbiByZWR1Y2luZyB0aGUgbnVtYmVyIG9mCisgICAgICogZnJhY3Rpb24gZGlnaXRzIHRvIHNhdGlzZnkgYSBtYXhpbXVtIGZyYWN0aW9uIGRpZ2l0cyBsaW1pdC4gIFRoZSB2YWx1ZQorICAgICAqIG1heSBhc3N1bWUgYW55IG9mIHRoZSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiByb3VuZGluZyBtb2RlIHZhbHVlcy4KKyAgICAgKiBEZWZhdWx0IHZhbHVlIDxjb2RlPkJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9FVkVOPC9jb2RlPi4KKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNpbmNlIEFscGhhV29ya3MgTnVtYmVyRm9ybWF0CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcm91bmRpbmdNb2RlID0gamF2YS5tYXRoLkJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9FVkVOOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFRoZSBwYWRkZWQgZm9ybWF0IHdpZHRoLCBvciB6ZXJvIGlmIHRoZXJlIGlzIG5vIHBhZGRpbmcuICBNdXN0CisgICAgICogYmUgPj0gMC4gIERlZmF1bHQgdmFsdWUgemVyby4KKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNpbmNlIEFscGhhV29ya3MgTnVtYmVyRm9ybWF0CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZm9ybWF0V2lkdGggPSAwOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBwYWQgdGhlIHJlc3VsdCBvZiBmb3JtYXQgdG8KKyAgICAgKiA8Y29kZT5mb3JtYXRXaWR0aDwvY29kZT4sIGlmIHBhZGRpbmcgaXMgaW4gZWZmZWN0LiAgRGVmYXVsdCB2YWx1ZSAnICcuCisgICAgICogQHNlcmlhbAorICAgICAqIEBzaW5jZSBBbHBoYVdvcmtzIE51bWJlckZvcm1hdAorICAgICAqLworICAgIHByaXZhdGUgY2hhciBwYWQgPSAnICc7CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogVGhlIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgYXQgd2hpY2ggdGhlIDxjb2RlPnBhZDwvY29kZT4gY2hhcmFjdGVyCisgICAgICogd2lsbCBiZSBpbnNlcnRlZCwgaWYgcGFkZGluZyBpcyBpbiBlZmZlY3QuICBNdXN0IGhhdmUgYSB2YWx1ZSBmcm9tCisgICAgICogPGNvZGU+UEFEX0JFRk9SRV9QUkVGSVg8L2NvZGU+IHRvIDxjb2RlPlBBRF9BRlRFUl9TVUZGSVg8L2NvZGU+LgorICAgICAqIERlZmF1bHQgdmFsdWUgPGNvZGU+UEFEX0JFRk9SRV9QUkVGSVg8L2NvZGU+LgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2luY2UgQWxwaGFXb3JrcyBOdW1iZXJGb3JtYXQKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBwYWRQb3NpdGlvbiA9IFBBRF9CRUZPUkVfUFJFRklYOworCisgICAgLyoqCisgICAgICogQ3VycmVuY3kgb2JqZWN0IHVzZWQgdG8gZm9ybWF0IGN1cnJlbmNpZXMuICBPbmx5IHVzZWQgaWYKKyAgICAgKiA8dHQ+aXNDdXJyZW5jeUZvcm1hdDwvdHQ+IGlzIHRydWUuICBJbiBzb21lIGNhc2VzIHRoaXMgd2lsbCBiZQorICAgICAqIG51bGw6IElmIGEgcHJlLTIuMiBvYmplY3QgaXMgcmVzdXJyZWN0ZWQgd2l0aCBhIGN1c3RvbQorICAgICAqIERlY2ltYWxGb3JtYXRTeW1ib2xzIG9iamVjdCwgb3IgaWYgdGhlIHVzZXIgc2V0cyBhIGN1c3RvbSBERlMKKyAgICAgKiBvYmplY3QuICBBIGN1c3RvbSBERlMgb2JqZWN0IGhhcyBjdXJyZW5jeSBzeW1ib2xzIHRoYXQgYXJlIG5vdAorICAgICAqIHRoZSBzdGFuZGFyZCBvbmVzIGZvciBpdHMgbG9jYWxlLgorICAgICAqIEBzaW5jZSBJQ1UgMi4yCisgICAgICovCisgICAgcHJpdmF0ZSBDdXJyZW5jeSBjdXJyZW5jeTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgc3RhdGljIGZpbmFsIGludCBjdXJyZW50U2VyaWFsVmVyc2lvbiA9IDM7CisKKyAgICAvKioKKyAgICAgKiBUaGUgaW50ZXJuYWwgc2VyaWFsIHZlcnNpb24gd2hpY2ggc2F5cyB3aGljaCB2ZXJzaW9uIHdhcyB3cml0dGVuCisgICAgICogUG9zc2libGUgdmFsdWVzIGFyZToKKyAgICAgKiA8dWw+CisgICAgICogPGxpPjxiPjA8L2I+IChkZWZhdWx0KTogdmVyc2lvbnMgYmVmb3JlIEpESyAxLjIKKyAgICAgKiA8bGk+PGI+MTwvYj46IHZlcnNpb24gZnJvbSBKREsgMS4yIGFuZCBsYXRlciwgd2hpY2ggaW5jbHVkZXMgdGhlIHR3byBuZXcgZmllbGRzCisgICAgICogICAgICA8Y29kZT51c2VFeHBvbmVudGlhbE5vdGF0aW9uPC9jb2RlPiBhbmQgPGNvZGU+bWluRXhwb25lbnREaWdpdHM8L2NvZGU+LgorICAgICAqIDxsaT48Yj4yPC9iPjogdmVyc2lvbiBvbiBBbHBoYVdvcmtzLCB3aGljaCBhZGRzIHJvdW5kaW5nTW9kZSwgZm9ybWF0V2lkdGgsCisgICAgICogICAgICBwYWQsIHBhZFBvc2l0aW9uLCBleHBvbmVudFNpZ25BbHdheXNTaG93biwgcm91bmRpbmdJbmNyZW1lbnQuCisgICAgICogPGxpPjxiPjM8L2I+OiBJQ1UgMi4yLiAgQWRkcyBjdXJyZW5jeSBvYmplY3QuCisgICAgICogPC91bD4KKyAgICAgKiBAc2VyaWFsICovCisgICAgcHJpdmF0ZSBpbnQgc2VyaWFsVmVyc2lvbk9uU3RyZWFtID0gY3VycmVudFNlcmlhbFZlcnNpb247CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDT05TVEFOVFMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBDb25zdGFudCBmb3IgPGNvZGU+Z2V0UGFkUG9zaXRpb24oKTwvY29kZT4gYW5kCisgICAgICogPGNvZGU+c2V0UGFkUG9zaXRpb24oKTwvY29kZT4gc3BlY2lmeWluZyBwYWQgY2hhcmFjdGVycyBpbnNlcnRlZCBiZWZvcmUKKyAgICAgKiB0aGUgcHJlZml4LgorICAgICAqIEBzZWUgI3NldFBhZFBvc2l0aW9uCisgICAgICogQHNlZSAjZ2V0UGFkUG9zaXRpb24KKyAgICAgKiBAc2VlICNQQURfQUZURVJfUFJFRklYCisgICAgICogQHNlZSAjUEFEX0JFRk9SRV9TVUZGSVgKKyAgICAgKiBAc2VlICNQQURfQUZURVJfU1VGRklYCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFEX0JFRk9SRV9QUkVGSVggPSAwOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIENvbnN0YW50IGZvciA8Y29kZT5nZXRQYWRQb3NpdGlvbigpPC9jb2RlPiBhbmQKKyAgICAgKiA8Y29kZT5zZXRQYWRQb3NpdGlvbigpPC9jb2RlPiBzcGVjaWZ5aW5nIHBhZCBjaGFyYWN0ZXJzIGluc2VydGVkIGFmdGVyCisgICAgICogdGhlIHByZWZpeC4KKyAgICAgKiBAc2VlICNzZXRQYWRQb3NpdGlvbgorICAgICAqIEBzZWUgI2dldFBhZFBvc2l0aW9uCisgICAgICogQHNlZSAjUEFEX0JFRk9SRV9QUkVGSVgKKyAgICAgKiBAc2VlICNQQURfQkVGT1JFX1NVRkZJWAorICAgICAqIEBzZWUgI1BBRF9BRlRFUl9TVUZGSVgKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQURfQUZURVJfUFJFRklYICA9IDE7CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogQ29uc3RhbnQgZm9yIDxjb2RlPmdldFBhZFBvc2l0aW9uKCk8L2NvZGU+IGFuZAorICAgICAqIDxjb2RlPnNldFBhZFBvc2l0aW9uKCk8L2NvZGU+IHNwZWNpZnlpbmcgcGFkIGNoYXJhY3RlcnMgaW5zZXJ0ZWQgYmVmb3JlCisgICAgICogdGhlIHN1ZmZpeC4KKyAgICAgKiBAc2VlICNzZXRQYWRQb3NpdGlvbgorICAgICAqIEBzZWUgI2dldFBhZFBvc2l0aW9uCisgICAgICogQHNlZSAjUEFEX0JFRk9SRV9QUkVGSVgKKyAgICAgKiBAc2VlICNQQURfQUZURVJfUFJFRklYCisgICAgICogQHNlZSAjUEFEX0FGVEVSX1NVRkZJWAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRF9CRUZPUkVfU1VGRklYID0gMjsKKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBDb25zdGFudCBmb3IgPGNvZGU+Z2V0UGFkUG9zaXRpb24oKTwvY29kZT4gYW5kCisgICAgICogPGNvZGU+c2V0UGFkUG9zaXRpb24oKTwvY29kZT4gc3BlY2lmeWluZyBwYWQgY2hhcmFjdGVycyBpbnNlcnRlZCBhZnRlcgorICAgICAqIHRoZSBzdWZmaXguCisgICAgICogQHNlZSAjc2V0UGFkUG9zaXRpb24KKyAgICAgKiBAc2VlICNnZXRQYWRQb3NpdGlvbgorICAgICAqIEBzZWUgI1BBRF9CRUZPUkVfUFJFRklYCisgICAgICogQHNlZSAjUEFEX0FGVEVSX1BSRUZJWAorICAgICAqIEBzZWUgI1BBRF9CRUZPUkVfU1VGRklYCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFEX0FGVEVSX1NVRkZJWCAgPSAzOworCisgICAgLy8gQ29uc3RhbnRzIGZvciBjaGFyYWN0ZXJzIHVzZWQgaW4gcHJvZ3JhbW1hdGljICh1bmxvY2FsaXplZCkgcGF0dGVybnMuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciAgICAgICBQQVRURVJOX1pFUk9fRElHSVQgICAgICAgICA9ICcwJzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyICAgICAgIFBBVFRFUk5fR1JPVVBJTkdfU0VQQVJBVE9SID0gJywnOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgICAgICAgUEFUVEVSTl9ERUNJTUFMX1NFUEFSQVRPUiAgPSAnLic7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciAgICAgICBQQVRURVJOX0RJR0lUICAgICAgICAgICAgICA9ICcjJzsKKyAgICAgICAgICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgICAgIFBBVFRFUk5fRVhQT05FTlQgICAgICAgICAgID0gIkUiOyAvLyBbTkVXXQorICAgICAgICAgICAgc3RhdGljIGZpbmFsIGNoYXIgICAgICAgUEFUVEVSTl9QTFVTX1NJR04gICAgICAgICAgPSAnKyc7IC8vIFtORVddCisKKyAgICAvLyBBZmZpeAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgICAgICAgUEFUVEVSTl9QRVJfTUlMTEUgICAgICAgICAgPSAnXHUyMDMwJzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyICAgICAgIFBBVFRFUk5fUEVSQ0VOVCAgICAgICAgICAgID0gJyUnOworICAgICAgICAgICAgc3RhdGljIGZpbmFsIGNoYXIgICAgICAgUEFUVEVSTl9QQURfRVNDQVBFICAgICAgICAgPSAnKic7IC8vIFtORVddCisgICAgLypCdWcgNDIxMjA3MgorICAgICAgVG8gbWVldCB0aGUgbmVlZCBvZiBleHBhbmRBZmZpeChTdHJpbmcsIFN0aXJuZ0J1ZmZlcikKKyAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgICAgICAgUEFUVEVSTl9NSU5VUyAgICAgICAgICAgICAgPSAnLSc7IC8vW1JpY2hhcmQvR0NMXQorCisgICAgLy8gT3RoZXIgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciAgICAgICBQQVRURVJOX1NFUEFSQVRPUiAgICAgICAgICA9ICc7JzsKKworICAgIC8vIFBhZCBlc2NhcGUgaXMgcGFja2FnZSBwcml2YXRlIHRvIGFsbG93IGFjY2VzcyBieSBEZWNpbWFsRm9ybWF0U3ltYm9scy4KKyAgICAvLyBBbHNvIHBsdXMgc2lnbi4gIEFsc28gZXhwb25lbnQuCisKKyAgICAvKioKKyAgICAgKiBUaGUgQ1VSUkVOQ1lfU0lHTiBpcyB0aGUgc3RhbmRhcmQgVW5pY29kZSBzeW1ib2wgZm9yIGN1cnJlbmN5LiAgSXQKKyAgICAgKiBpcyB1c2VkIGluIHBhdHRlcm5zIGFuZCBzdWJzdGl0dWVkIHdpdGggZWl0aGVyIHRoZSBjdXJyZW5jeSBzeW1ib2wsCisgICAgICogb3IgaWYgaXQgaXMgZG91YmxlZCwgd2l0aCB0aGUgaW50ZXJuYXRpb25hbCBjdXJyZW5jeSBzeW1ib2wuICBJZiB0aGUKKyAgICAgKiBDVVJSRU5DWV9TSUdOIGlzIHNlZW4gaW4gYSBwYXR0ZXJuLCB0aGVuIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcworICAgICAqIHJlcGxhY2VkIHdpdGggdGhlIG1vbmV0YXJ5IGRlY2ltYWwgc2VwYXJhdG9yLgorICAgICAqCisgICAgICogVGhlIENVUlJFTkNZX1NJR04gaXMgbm90IGxvY2FsaXplZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyICAgICAgIENVUlJFTkNZX1NJR04gPSAnXHUwMEE0JzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgICAgICAgUVVPVEUgPSAnXCcnOworICAgIAorICAgIC8qIFVwcGVyIGxpbWl0IG9uIGludGVnZXIgYW5kIGZyYWN0aW9uIGRpZ2l0cyBmb3IgYSBKYXZhIGRvdWJsZQorICAgICAgIFtSaWNoYXJkL0dDTF0KKyAgICAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgRE9VQkxFX0lOVEVHRVJfRElHSVRTICA9IDMwOTsKKyAgICBzdGF0aWMgZmluYWwgaW50IERPVUJMRV9GUkFDVElPTl9ESUdJVFMgPSAzNDA7CisgICAgCisgICAgLy8gUHJvY2xhaW0gSkRLIDEuMSBzZXJpYWwgY29tcGF0aWJpbGl0eS4KKyAgICBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gODY0NDEzMzc2NTUxNDY1MDE4TDsKKworICAgIC8qKgorICAgICAqIENhY2hlIHRvIGhvbGQgdGhlIE51bWJlclBhdHRlcm4gb2YgYSBMb2NhbGUuCisgICAgICogW05FV10gTm8gbG9uZ2VyIG5lZWRlZCAtLSBzaGFyZSB0aGUgTnVtYmVyRm9ybWF0IGNhY2hlCisgICAgICovCisgICAgLy8gcHJpdmF0ZSBzdGF0aWMgSGFzaHRhYmxlIGNhY2hlZExvY2FsZURhdGEgPSBuZXcgSGFzaHRhYmxlKDMpOworfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvRGVjaW1hbEZvcm1hdFN5bWJvbHMuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXRTeW1ib2xzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTlhNjFjNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXRTeW1ib2xzLmphdmEKQEAgLTAsMCArMSw3NDQgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXRTeW1ib2xzLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjE6NDIgJCAKKyAqICRSZXZpc2lvbjogMS44ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBzZXQgb2Ygc3ltYm9scyAoc3VjaCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IsIHRoZQorICogZ3JvdXBpbmcgc2VwYXJhdG9yLCBhbmQgc28gb24pIG5lZWRlZCBieSA8Y29kZT5EZWNpbWFsRm9ybWF0PC9jb2RlPiB0byBmb3JtYXQKKyAqIG51bWJlcnMuIDxjb2RlPkRlY2ltYWxGb3JtYXQ8L2NvZGU+IGNyZWF0ZXMgZm9yIGl0c2VsZiBhbiBpbnN0YW5jZSBvZgorICogPGNvZGU+RGVjaW1hbEZvcm1hdFN5bWJvbHM8L2NvZGU+IGZyb20gaXRzIGxvY2FsZSBkYXRhLiAgSWYgeW91IG5lZWQgdG8KKyAqIGNoYW5nZSBhbnkgb2YgdGhlc2Ugc3ltYm9scywgeW91IGNhbiBnZXQgdGhlCisgKiA8Y29kZT5EZWNpbWFsRm9ybWF0U3ltYm9sczwvY29kZT4gb2JqZWN0IGZyb20geW91ciA8Y29kZT5EZWNpbWFsRm9ybWF0PC9jb2RlPgorICogYW5kIG1vZGlmeSBpdC4KKyAqCisgKiA8cD48c3Ryb25nPlRoaXMgaXMgYW4gZW5oYW5jZWQgdmVyc2lvbiBvZiA8Y29kZT5EZWNpbWFsRm9ybWF0U3ltYm9sczwvY29kZT4gdGhhdAorICogaXMgYmFzZWQgb24gdGhlIHN0YW5kYXJkIHZlcnNpb24gaW4gdGhlIEpESy4gIE5ldyBvciBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHkKKyAqIGlzIGxhYmVsZWQKKyAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4uPC9zdHJvbmc+CisgKgorICogQHNlZSAgICAgICAgICBqYXZhLnV0aWwuTG9jYWxlCisgKiBAc2VlICAgICAgICAgIERlY2ltYWxGb3JtYXQKKyAqIEBhdXRob3IgICAgICAgTWFyayBEYXZpcworICogQGF1dGhvciAgICAgICBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KKworZmluYWwgcHVibGljIGNsYXNzIERlY2ltYWxGb3JtYXRTeW1ib2xzIGltcGxlbWVudHMgQ2xvbmVhYmxlLCBTZXJpYWxpemFibGUgeworCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgRGVjaW1hbEZvcm1hdFN5bWJvbHMgb2JqZWN0IGZvciB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIERlY2ltYWxGb3JtYXRTeW1ib2xzKCkgeworICAgICAgICBpbml0aWFsaXplKCBMb2NhbGUuZ2V0RGVmYXVsdCgpICk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgRGVjaW1hbEZvcm1hdFN5bWJvbHMgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqIEBwYXJhbSBsb2NhbGUgdGhlIGxvY2FsZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBEZWNpbWFsRm9ybWF0U3ltYm9scyggTG9jYWxlIGxvY2FsZSApIHsKKyAgICAgICAgaW5pdGlhbGl6ZSggbG9jYWxlICk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjaGFyYWN0ZXIgdXNlZCBmb3IgemVyby4gRGlmZmVyZW50IGZvciBBcmFiaWMsIGV0Yy4KKyAgICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBnZXRaZXJvRGlnaXQoKSB7CisgICAgICAgIHJldHVybiB6ZXJvRGlnaXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjaGFyYWN0ZXIgdXNlZCBmb3IgemVyby4KKyAgICAgKiBAcGFyYW0gemVyb0RpZ2l0IHRoZSB6ZXJvIGNoYXJhY3Rlci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRaZXJvRGlnaXQoY2hhciB6ZXJvRGlnaXQpIHsKKyAgICAgICAgdGhpcy56ZXJvRGlnaXQgPSB6ZXJvRGlnaXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjaGFyYWN0ZXIgdXNlZCBmb3IgdGhvdXNhbmRzIHNlcGFyYXRvci4gRGlmZmVyZW50IGZvciBGcmVuY2gsIGV0Yy4KKyAgICAgKiBAcmV0dXJuIHRoZSB0aG91c2FuZHMgY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGNoYXIgZ2V0R3JvdXBpbmdTZXBhcmF0b3IoKSB7CisgICAgICAgIHJldHVybiBncm91cGluZ1NlcGFyYXRvcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGNoYXJhY3RlciB1c2VkIGZvciB0aG91c2FuZHMgc2VwYXJhdG9yLiBEaWZmZXJlbnQgZm9yIEZyZW5jaCwgZXRjLgorICAgICAqIEBwYXJhbSBncm91cGluZ1NlcGFyYXRvciB0aGUgdGhvdXNhbmRzIGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwaW5nU2VwYXJhdG9yKGNoYXIgZ3JvdXBpbmdTZXBhcmF0b3IpIHsKKyAgICAgICAgdGhpcy5ncm91cGluZ1NlcGFyYXRvciA9IGdyb3VwaW5nU2VwYXJhdG9yOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY2hhcmFjdGVyIHVzZWQgZm9yIGRlY2ltYWwgc2lnbi4gRGlmZmVyZW50IGZvciBGcmVuY2gsIGV0Yy4KKyAgICAgKiBAcmV0dXJuIHRoZSBkZWNpbWFsIGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGdldERlY2ltYWxTZXBhcmF0b3IoKSB7CisgICAgICAgIHJldHVybiBkZWNpbWFsU2VwYXJhdG9yOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY2hhcmFjdGVyIHVzZWQgZm9yIGRlY2ltYWwgc2lnbi4gRGlmZmVyZW50IGZvciBGcmVuY2gsIGV0Yy4KKyAgICAgKiBAcGFyYW0gZGVjaW1hbFNlcGFyYXRvciB0aGUgZGVjaW1hbCBjaGFyYWN0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREZWNpbWFsU2VwYXJhdG9yKGNoYXIgZGVjaW1hbFNlcGFyYXRvcikgeworICAgICAgICB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPSBkZWNpbWFsU2VwYXJhdG9yOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY2hhcmFjdGVyIHVzZWQgZm9yIG1pbGxlIHBlcmNlbnQgc2lnbi4gRGlmZmVyZW50IGZvciBBcmFiaWMsIGV0Yy4KKyAgICAgKiBAcmV0dXJuIHRoZSBtaWxsZSBwZXJjZW50IGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGdldFBlck1pbGwoKSB7CisgICAgICAgIHJldHVybiBwZXJNaWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY2hhcmFjdGVyIHVzZWQgZm9yIG1pbGxlIHBlcmNlbnQgc2lnbi4gRGlmZmVyZW50IGZvciBBcmFiaWMsIGV0Yy4KKyAgICAgKiBAcGFyYW0gcGVyTWlsbCB0aGUgbWlsbGUgcGVyY2VudCBjaGFyYWN0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQZXJNaWxsKGNoYXIgcGVyTWlsbCkgeworICAgICAgICB0aGlzLnBlck1pbGwgPSBwZXJNaWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY2hhcmFjdGVyIHVzZWQgZm9yIHBlcmNlbnQgc2lnbi4gRGlmZmVyZW50IGZvciBBcmFiaWMsIGV0Yy4KKyAgICAgKiBAcmV0dXJuIHRoZSBwZXJjZW50IGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGdldFBlcmNlbnQoKSB7CisgICAgICAgIHJldHVybiBwZXJjZW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY2hhcmFjdGVyIHVzZWQgZm9yIHBlcmNlbnQgc2lnbi4gRGlmZmVyZW50IGZvciBBcmFiaWMsIGV0Yy4KKyAgICAgKiBAcGFyYW0gcGVyY2VudCB0aGUgcGVyY2VudCBjaGFyYWN0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQZXJjZW50KGNoYXIgcGVyY2VudCkgeworICAgICAgICB0aGlzLnBlcmNlbnQgPSBwZXJjZW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY2hhcmFjdGVyIHVzZWQgZm9yIGEgZGlnaXQgaW4gYSBwYXR0ZXJuLgorICAgICAqIEByZXR1cm4gdGhlIGRpZ2l0IHBhdHRlcm4gY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGNoYXIgZ2V0RGlnaXQoKSB7CisgICAgICAgIHJldHVybiBkaWdpdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGNoYXJhY3RlciB1c2VkIGZvciBhIGRpZ2l0IGluIGEgcGF0dGVybi4KKyAgICAgKiBAcGFyYW0gZGlnaXQgdGhlIGRpZ2l0IHBhdHRlcm4gY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RGlnaXQoY2hhciBkaWdpdCkgeworICAgICAgICB0aGlzLmRpZ2l0ID0gZGlnaXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgc3VicGF0dGVybnMKKyAgICAgKiBpbiBhIHBhdHRlcm4uCisgICAgICogQHJldHVybiB0aGUgcGF0dGVybiBzZXBhcmF0b3IgY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGNoYXIgZ2V0UGF0dGVyblNlcGFyYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIHBhdHRlcm5TZXBhcmF0b3I7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgc3VicGF0dGVybnMKKyAgICAgKiBpbiBhIHBhdHRlcm4uCisgICAgICogQHBhcmFtIHBhdHRlcm5TZXBhcmF0b3IgdGhlIHBhdHRlcm4gc2VwYXJhdG9yIGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFBhdHRlcm5TZXBhcmF0b3IoY2hhciBwYXR0ZXJuU2VwYXJhdG9yKSB7CisgICAgICAgIHRoaXMucGF0dGVyblNlcGFyYXRvciA9IHBhdHRlcm5TZXBhcmF0b3I7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBTdHJpbmcgdXNlZCB0byByZXByZXNlbnQgaW5maW5pdHkuIEFsbW9zdCBhbHdheXMgbGVmdAorICAgICAqIHVuY2hhbmdlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBJbmZpbml0eSBzdHJpbmcKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICAgLy9CdWcgNDE5NDE3MyBbUmljaGFyZC9HQ0xdCisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEluZmluaXR5KCkgeworICAgICAgICByZXR1cm4gaW5maW5pdHk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBTdHJpbmcgdXNlZCB0byByZXByZXNlbnQgaW5maW5pdHkuIEFsbW9zdCBhbHdheXMgbGVmdAorICAgICAqIHVuY2hhbmdlZC4KKyAgICAgKiBAcGFyYW0gaW5maW5pdHkgdGhlIEluZmluaXR5IFN0cmluZworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEluZmluaXR5KFN0cmluZyBpbmZpbml0eSkgeworICAgICAgICB0aGlzLmluZmluaXR5ID0gaW5maW5pdHk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBTdHJpbmcgdXNlZCB0byByZXByZXNlbnQgTmFOLiBBbG1vc3QgYWx3YXlzIGxlZnQKKyAgICAgKiB1bmNoYW5nZWQuCisgICAgICogQHJldHVybiB0aGUgTmFOIFN0cmluZworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgICAvL0J1ZyA0MTk0MTczIFtSaWNoYXJkL0dDTF0KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hTigpIHsKKyAgICAgICAgcmV0dXJuIE5hTjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIFN0cmluZyB1c2VkIHRvIHJlcHJlc2VudCBOYU4uIEFsbW9zdCBhbHdheXMgbGVmdAorICAgICAqIHVuY2hhbmdlZC4KKyAgICAgKiBAcGFyYW0gTmFOIHRoZSBOYU4gU3RyaW5nCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TmFOKFN0cmluZyBOYU4pIHsKKyAgICAgICAgdGhpcy5OYU4gPSBOYU47CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byByZXByZXNlbnQgbWludXMgc2lnbi4gSWYgbm8gZXhwbGljaXQKKyAgICAgKiBuZWdhdGl2ZSBmb3JtYXQgaXMgc3BlY2lmaWVkLCBvbmUgaXMgZm9ybWVkIGJ5IHByZWZpeGluZworICAgICAqIG1pbnVzU2lnbiB0byB0aGUgcG9zaXRpdmUgZm9ybWF0LgorICAgICAqIEByZXR1cm4gdGhlIG1pbnVzIHNpZ24gY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGNoYXIgZ2V0TWludXNTaWduKCkgeworICAgICAgICByZXR1cm4gbWludXNTaWduOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gcmVwcmVzZW50IG1pbnVzIHNpZ24uIElmIG5vIGV4cGxpY2l0CisgICAgICogbmVnYXRpdmUgZm9ybWF0IGlzIHNwZWNpZmllZCwgb25lIGlzIGZvcm1lZCBieSBwcmVmaXhpbmcKKyAgICAgKiBtaW51c1NpZ24gdG8gdGhlIHBvc2l0aXZlIGZvcm1hdC4KKyAgICAgKiBAcGFyYW0gbWludXNTaWduIHRoZSBtaW51cyBzaWduIGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1pbnVzU2lnbihjaGFyIG1pbnVzU2lnbikgeworICAgICAgICB0aGlzLm1pbnVzU2lnbiA9IG1pbnVzU2lnbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHN0cmluZyBkZW5vdGluZyB0aGUgbG9jYWwgY3VycmVuY3kuCisgICAgICogQHJldHVybiB0aGUgbG9jYWwgY3VycmVuY3kgU3RyaW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q3VycmVuY3lTeW1ib2woKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbmN5U3ltYm9sOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgc3RyaW5nIGRlbm90aW5nIHRoZSBsb2NhbCBjdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gY3VycmVuY3kgdGhlIGxvY2FsIGN1cnJlbmN5IFN0cmluZy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW5jeVN5bWJvbChTdHJpbmcgY3VycmVuY3kpCisgICAgeworICAgICAgICBjdXJyZW5jeVN5bWJvbCA9IGN1cnJlbmN5OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgaW50ZXJuYXRpb25hbCBzdHJpbmcgZGVub3RpbmcgdGhlIGxvY2FsIGN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gdGhlIGludGVybmF0aW9uYWwgc3RyaW5nIGRlbm90aW5nIHRoZSBsb2NhbCBjdXJyZW5jeQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRsQ3VycmVuY3lTeW1ib2w7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBpbnRlcm5hdGlvbmFsIHN0cmluZyBkZW5vdGluZyB0aGUgbG9jYWwgY3VycmVuY3kuCisgICAgICogQHBhcmFtIGN1cnJlbmN5IHRoZSBpbnRlcm5hdGlvbmFsIHN0cmluZyBkZW5vdGluZyB0aGUgbG9jYWwgY3VycmVuY3kuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKFN0cmluZyBjdXJyZW5jeSkKKyAgICB7CisgICAgICAgIGludGxDdXJyZW5jeVN5bWJvbCA9IGN1cnJlbmN5OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbW9uZXRhcnkgZGVjaW1hbCBzZXBhcmF0b3IuCisgICAgICogQHJldHVybiB0aGUgbW9uZXRhcnkgZGVjaW1hbCBzZXBhcmF0b3IgY2hhcmFjdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGNoYXIgZ2V0TW9uZXRhcnlEZWNpbWFsU2VwYXJhdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtb25ldGFyeVNlcGFyYXRvcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG1vbmV0YXJ5IGRlY2ltYWwgc2VwYXJhdG9yLgorICAgICAqIEBwYXJhbSBzZXAgdGhlIG1vbmV0YXJ5IGRlY2ltYWwgc2VwYXJhdG9yIGNoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1vbmV0YXJ5RGVjaW1hbFNlcGFyYXRvcihjaGFyIHNlcCkKKyAgICB7CisgICAgICAgIG1vbmV0YXJ5U2VwYXJhdG9yID0gc2VwOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBSZXR1cm4gdGhlIHN0cmluZyB1c2VkIHRvIHNlcGFyYXRlIHRoZSBtYW50aXNzYSBmcm9tIHRoZSBleHBvbmVudC4KKyAgICAgKiBFeGFtcGxlczogIngxMF4iIGZvciAxLjIzeDEwXjQsICJFIiBmb3IgMS4yM0U0LgorICAgICAqIEByZXR1cm4gdGhlIGxvY2FsaXplZCBleHBvbmVudCBzeW1ib2wsIHVzZWQgaW4gbG9jYWxpemVkIHBhdHRlcm5zCisgICAgICogYW5kIGZvcm1hdHRlZCBzdHJpbmdzCisgICAgICogQHNlZSAjc2V0RXhwb25lbnRTZXBhcmF0b3IKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldEV4cG9uZW50U2VwYXJhdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiBleHBvbmVudFNlcGFyYXRvcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogU2V0IHRoZSBzdHJpbmcgdXNlZCB0byBzZXBhcmF0ZSB0aGUgbWFudGlzc2EgZnJvbSB0aGUgZXhwb25lbnQuCisgICAgICogRXhhbXBsZXM6ICJ4MTBeIiBmb3IgMS4yM3gxMF40LCAiRSIgZm9yIDEuMjNFNC4KKyAgICAgKiBAcGFyYW0gZXhwIHRoZSBsb2NhbGl6ZWQgZXhwb25lbnQgc3ltYm9sLCB1c2VkIGluIGxvY2FsaXplZCBwYXR0ZXJucworICAgICAqIGFuZCBmb3JtYXR0ZWQgc3RyaW5ncworICAgICAqIEBzZWUgI2dldEV4cG9uZW50U2VwYXJhdG9yCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RXhwb25lbnRTZXBhcmF0b3IoU3RyaW5nIGV4cCkKKyAgICB7CisgICAgICAgIGV4cG9uZW50U2VwYXJhdG9yID0gZXhwOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBSZXR1cm4gdGhlIGxvY2FsaXplZCBwbHVzIHNpZ24uCisgICAgICogQHJldHVybiB0aGUgcGx1cyBzaWduLCB1c2VkIGluIGxvY2FsaXplZCBwYXR0ZXJucyBhbmQgZm9ybWF0dGVkCisgICAgICogc3RyaW5ncworICAgICAqIEBzZWUgI3NldFBsdXNTaWduCisgICAgICogQHNlZSAjc2V0TWludXNTaWduCisgICAgICogQHNlZSAjZ2V0TWludXNTaWduCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGNoYXIgZ2V0UGx1c1NpZ24oKSB7CisgICAgICAgIHJldHVybiBwbHVzU2lnbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogU2V0IHRoZSBsb2NhbGl6ZWQgcGx1cyBzaWduLgorICAgICAqIEBwYXJhbSBwbHVzIHRoZSBwbHVzIHNpZ24sIHVzZWQgaW4gbG9jYWxpemVkIHBhdHRlcm5zIGFuZCBmb3JtYXR0ZWQKKyAgICAgKiBzdHJpbmdzCisgICAgICogQHNlZSAjZ2V0UGx1c1NpZ24KKyAgICAgKiBAc2VlICNzZXRNaW51c1NpZ24KKyAgICAgKiBAc2VlICNnZXRNaW51c1NpZ24KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQbHVzU2lnbihjaGFyIHBsdXMpIHsKKyAgICAgICAgcGx1c1NpZ24gPSBwbHVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBSZXR1cm4gdGhlIGNoYXJhY3RlciB1c2VkIHRvIHBhZCBudW1iZXJzIG91dCB0byBhIHNwZWNpZmllZCB3aWR0aC4gIFRoaXMKKyAgICAgKiBpcyBub3QgdGhlIHBhZCBjaGFyYWN0ZXIgaXRzZWxmOyByYXRoZXIsIGl0IGlzIHRoZSBzcGVjaWFsIHBhdHRlcm4KKyAgICAgKiBjaGFyYWN0ZXIgPGVtPnByZWNlZGluZzwvZW0+IHRoZSBwYWQgY2hhcmFjdGVyLiAgSW4gdGhlIHBhdHRlcm4KKyAgICAgKiAiKl8jLCMjMCIsICcqJyBpcyB0aGUgcGFkIGVzY2FwZSwgYW5kICdfJyBpcyB0aGUgcGFkIGNoYXJhY3Rlci4KKyAgICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgCisgICAgICogQHNlZSAjc2V0UGFkRXNjYXBlCisgICAgICogQHNlZSBEZWNpbWFsRm9ybWF0I2dldEZvcm1hdFdpZHRoCisgICAgICogQHNlZSBEZWNpbWFsRm9ybWF0I2dldFBhZFBvc2l0aW9uCisgICAgICogQHNlZSBEZWNpbWFsRm9ybWF0I2dldFBhZENoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGdldFBhZEVzY2FwZSgpIHsKKyAgICAgICAgcmV0dXJuIHBhZEVzY2FwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogU2V0IHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBwYWQgbnVtYmVycyBvdXQgdG8gYSBzcGVjaWZpZWQgd2lkdGguICBUaGlzIGlzCisgICAgICogbm90IHRoZSBwYWQgY2hhcmFjdGVyIGl0c2VsZjsgcmF0aGVyLCBpdCBpcyB0aGUgc3BlY2lhbCBwYXR0ZXJuIGNoYXJhY3RlcgorICAgICAqIDxlbT5wcmVjZWRpbmc8L2VtPiB0aGUgcGFkIGNoYXJhY3Rlci4gIEluIHRoZSBwYXR0ZXJuICIqXyMsIyMwIiwgJyonIGlzCisgICAgICogdGhlIHBhZCBlc2NhcGUsIGFuZCAnXycgaXMgdGhlIHBhZCBjaGFyYWN0ZXIuCisgICAgICogQHNlZSAjZ2V0UGFkRXNjYXBlCisgICAgICogQHNlZSBEZWNpbWFsRm9ybWF0I3NldEZvcm1hdFdpZHRoCisgICAgICogQHNlZSBEZWNpbWFsRm9ybWF0I3NldFBhZFBvc2l0aW9uCisgICAgICogQHNlZSBEZWNpbWFsRm9ybWF0I3NldFBhZENoYXJhY3RlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFBhZEVzY2FwZShjaGFyIGMpIHsKKyAgICAgICAgcGFkRXNjYXBlID0gYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbGUgZm9yIHdoaWNoIHRoaXMgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBsb2NhbGUgZm9yIHdoaWNoIHRoaXMgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBMb2NhbGUgZ2V0TG9jYWxlKCkgeworICAgICAgICByZXR1cm4gbG9jYWxlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YW5kYXJkIG92ZXJyaWRlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKERlY2ltYWxGb3JtYXRTeW1ib2xzKXN1cGVyLmNsb25lKCk7CisgICAgICAgICAgICAvLyBvdGhlciBmaWVsZHMgYXJlIGJpdC1jb3BpZWQKKyAgICAgICAgfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIGVxdWFscy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXMgPT0gb2JqKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgb3RoZXIgPSAoRGVjaW1hbEZvcm1hdFN5bWJvbHMpIG9iajsKKyAgICAgICAgcmV0dXJuICh6ZXJvRGlnaXQgPT0gb3RoZXIuemVyb0RpZ2l0ICYmCisgICAgICAgIGdyb3VwaW5nU2VwYXJhdG9yID09IG90aGVyLmdyb3VwaW5nU2VwYXJhdG9yICYmCisgICAgICAgIGRlY2ltYWxTZXBhcmF0b3IgPT0gb3RoZXIuZGVjaW1hbFNlcGFyYXRvciAmJgorICAgICAgICBwZXJjZW50ID09IG90aGVyLnBlcmNlbnQgJiYKKyAgICAgICAgcGVyTWlsbCA9PSBvdGhlci5wZXJNaWxsICYmCisgICAgICAgIGRpZ2l0ID09IG90aGVyLmRpZ2l0ICYmCisgICAgICAgIG1pbnVzU2lnbiA9PSBvdGhlci5taW51c1NpZ24gJiYKKyAgICAgICAgcGF0dGVyblNlcGFyYXRvciA9PSBvdGhlci5wYXR0ZXJuU2VwYXJhdG9yICYmCisgICAgICAgIGluZmluaXR5LmVxdWFscyhvdGhlci5pbmZpbml0eSkgJiYKKyAgICAgICAgTmFOLmVxdWFscyhvdGhlci5OYU4pICYmCisgICAgICAgIGN1cnJlbmN5U3ltYm9sLmVxdWFscyhvdGhlci5jdXJyZW5jeVN5bWJvbCkgJiYKKyAgICAgICAgaW50bEN1cnJlbmN5U3ltYm9sLmVxdWFscyhvdGhlci5pbnRsQ3VycmVuY3lTeW1ib2wpICYmCisgICAgICAgIHBhZEVzY2FwZSA9PSBvdGhlci5wYWRFc2NhcGUgJiYgLy8gW05FV10KKyAgICAgICAgcGx1c1NpZ24gPT0gb3RoZXIucGx1c1NpZ24gJiYgLy8gW05FV10KKyAgICAgICAgZXhwb25lbnRTZXBhcmF0b3IuZXF1YWxzKG90aGVyLmV4cG9uZW50U2VwYXJhdG9yKSAmJiAvLyBbTkVXXQorICAgICAgICBtb25ldGFyeVNlcGFyYXRvciA9PSBvdGhlci5tb25ldGFyeVNlcGFyYXRvcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgaGFzaENvZGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IHplcm9EaWdpdDsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDM3ICsgZ3JvdXBpbmdTZXBhcmF0b3I7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAzNyArIGRlY2ltYWxTZXBhcmF0b3I7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBzeW1ib2xzIGZyb20gdGhlIExvY2FsZUVsZW1lbnRzIHJlc291cmNlIGJ1bmRsZS4KKyAgICAgKiBOb3RlOiBUaGUgb3JnYW5pemF0aW9uIG9mIExvY2FsZUVsZW1lbnRzIGJhZGx5IG5lZWRzIHRvIGJlCisgICAgICogY2xlYW5lZCB1cC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZSggTG9jYWxlIGxvY2FsZSApIHsKKyAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7CisgICAgICAgIC8qIHRyeSB0aGUgY2FjaGUgZmlyc3QgKi8KKyAgICAgICAgU3RyaW5nW11bXSBkYXRhID0gKFN0cmluZ1tdW10pIGNhY2hlZExvY2FsZURhdGEuZ2V0KGxvY2FsZSk7CisgICAgICAgIFN0cmluZ1tdIG51bWJlckVsZW1lbnRzOworICAgICAgICBTdHJpbmdbXSBjdXJyZW5jeUVsZW1lbnRzOworICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7ICAvKiBjYWNoZSBtaXNzICovCisgICAgICAgICAgICBkYXRhID0gbmV3IFN0cmluZ1syXVtdOworICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBJQ1VMb2NhbGVEYXRhLmdldExvY2FsZUVsZW1lbnRzKGxvY2FsZSk7CisgICAgICAgICAgICBkYXRhWzBdID0gcmIuZ2V0U3RyaW5nQXJyYXkoIk51bWJlckVsZW1lbnRzIik7CisgICAgICAgICAgICBkYXRhWzFdID0gcmIuZ2V0U3RyaW5nQXJyYXkoIkN1cnJlbmN5RWxlbWVudHMiKTsKKyAgICAgICAgICAgIC8qIHVwZGF0ZSBjYWNoZSAqLworICAgICAgICAgICAgY2FjaGVkTG9jYWxlRGF0YS5wdXQobG9jYWxlLCBkYXRhKTsKKyAgICAgICAgfQorICAgICAgICBudW1iZXJFbGVtZW50cyA9IGRhdGFbMF07CisgICAgICAgIGN1cnJlbmN5RWxlbWVudHMgPSBkYXRhWzFdOworCisJLy8ge2RsZn0gY2xlYW4gdXAgYmVsb3cgbm93IHRoYXQgd2UgaGF2ZSBvdXIgb3duIHJlc291cmNlIGRhdGEKKyAgICAgICAgZGVjaW1hbFNlcGFyYXRvciA9IG51bWJlckVsZW1lbnRzWzBdLmNoYXJBdCgwKTsKKyAgICAgICAgZ3JvdXBpbmdTZXBhcmF0b3IgPSBudW1iZXJFbGVtZW50c1sxXS5jaGFyQXQoMCk7CisgICAgICAgIC8vIFtORVddIFRlbXBvcmFyeSBoYWNrIHRvIHN1cHBvcnQgb2xkIEpESyAxLjEgcmVzb3VyY2VzCisgICAgICAgIHBhdHRlcm5TZXBhcmF0b3IgPSBudW1iZXJFbGVtZW50c1syXS5sZW5ndGgoKSA+IDAgPworICAgICAgICAgICAgbnVtYmVyRWxlbWVudHNbMl0uY2hhckF0KDApIDogJzsnOworICAgICAgICAvLyBwYXR0ZXJuU2VwYXJhdG9yID0gbnVtYmVyRWxlbWVudHNbMl0uY2hhckF0KDApOworICAgICAgICBwZXJjZW50ID0gbnVtYmVyRWxlbWVudHNbM10uY2hhckF0KDApOworICAgICAgICB6ZXJvRGlnaXQgPSBudW1iZXJFbGVtZW50c1s0XS5jaGFyQXQoMCk7IC8vZGlmZmVyZW50IGZvciBBcmFiaWMsZXRjLgorICAgICAgICBkaWdpdCA9IG51bWJlckVsZW1lbnRzWzVdLmNoYXJBdCgwKTsKKyAgICAgICAgbWludXNTaWduID0gbnVtYmVyRWxlbWVudHNbNl0uY2hhckF0KDApOworICAgICAgICAKKyAgICAgICAgLy8gW05FV10gVGVtcG9yYXJ5IGhhY2sgdG8gc3VwcG9ydCBKREsgdmVyc2lvbnMgYmVmb3JlIDEuMS42ICg/KQorICAgICAgICBleHBvbmVudFNlcGFyYXRvciA9IG51bWJlckVsZW1lbnRzLmxlbmd0aCA+PSA5ID8KKyAgICAgICAgICAgIG51bWJlckVsZW1lbnRzWzddIDogRGVjaW1hbEZvcm1hdC5QQVRURVJOX0VYUE9ORU5UOworICAgICAgICBwZXJNaWxsID0gbnVtYmVyRWxlbWVudHMubGVuZ3RoID49IDkgPworICAgICAgICAgICAgbnVtYmVyRWxlbWVudHNbOF0uY2hhckF0KDApIDogJ1x1MjAzMCc7CisgICAgICAgIGluZmluaXR5ICA9IG51bWJlckVsZW1lbnRzLmxlbmd0aCA+PSAxMCA/CisgICAgICAgICAgICBudW1iZXJFbGVtZW50c1s5XSA6ICJcdTIyMWUiOworICAgICAgICBOYU4gPSBudW1iZXJFbGVtZW50cy5sZW5ndGggPj0gMTEgPworICAgICAgICAgICAgbnVtYmVyRWxlbWVudHNbMTBdIDogIlx1ZmZmZCI7CisgICAgICAgIAorICAgICAgICAvLyBbTkVXXSBUZW1wb3JhcmlseSBoYXJkIGNvZGU7IHJldHJpZXZlIGZyb20gcmVzb3VyY2UgbGF0ZXIKKyAgICAgICAgcGx1c1NpZ24gID0gRGVjaW1hbEZvcm1hdC5QQVRURVJOX1BMVVNfU0lHTjsKKyAgICAgICAgcGFkRXNjYXBlID0gRGVjaW1hbEZvcm1hdC5QQVRURVJOX1BBRF9FU0NBUEU7CisKKyAgICAgICAgY3VycmVuY3lTeW1ib2wgPSBjdXJyZW5jeUVsZW1lbnRzWzBdOworICAgICAgICBpbnRsQ3VycmVuY3lTeW1ib2wgPSBjdXJyZW5jeUVsZW1lbnRzWzFdOworCisgICAgICAgIC8vIGlmIHRoZSByZXNvdXJjZSBkYXRhIHNwZWNpZmllZCB0aGUgZW1wdHkgc3RyaW5nIGFzIHRoZSBtb25ldGFyeSBkZWNpbWFsCisgICAgICAgIC8vIHNlcGFyYXRvciwgdGhhdCBtZWFucyB3ZSBzaG91bGQganVzdCB1c2UgdGhlIHJlZ3VsYXIgc2VwYXJhdG9yIGFzIHRoZQorICAgICAgICAvLyBtb25ldGFyeSBzZXBhcmF0b3IKKyAgICAgICAgaWYgKGN1cnJlbmN5RWxlbWVudHNbMl0ubGVuZ3RoKCkgPT0gMCkKKyAgICAgICAgICAgIG1vbmV0YXJ5U2VwYXJhdG9yID0gZGVjaW1hbFNlcGFyYXRvcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW9uZXRhcnlTZXBhcmF0b3IgPSBjdXJyZW5jeUVsZW1lbnRzWzJdLmNoYXJBdCgwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWFkIHRoZSBkZWZhdWx0IHNlcmlhbGl6YWJsZSBmaWVsZHMsIHRoZW4gaWYgPGNvZGU+c2VyaWFsVmVyc2lvbk9uU3RyZWFtPC9jb2RlPgorICAgICAqIGlzIGxlc3MgdGhhbiAxLCBpbml0aWFsaXplIDxjb2RlPm1vbmV0YXJ5U2VwYXJhdG9yPC9jb2RlPiB0byBiZQorICAgICAqIHRoZSBzYW1lIGFzIDxjb2RlPmRlY2ltYWxTZXBhcmF0b3I8L2NvZGU+IGFuZCA8Y29kZT5leHBvbmVudGlhbDwvY29kZT4KKyAgICAgKiB0byBiZSAnRScuCisgICAgICogRmluYWxseSwgc2V0IHNlcmlhbFZlcnNpb25PblN0cmVhbSBiYWNrIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgc28gdGhhdAorICAgICAqIGRlZmF1bHQgc2VyaWFsaXphdGlvbiB3aWxsIHdvcmsgcHJvcGVybHkgaWYgdGhpcyBvYmplY3QgaXMgc3RyZWFtZWQgb3V0IGFnYWluLgorICAgICAqCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoT2JqZWN0SW5wdXRTdHJlYW0gc3RyZWFtKQorICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICBzdHJlYW0uZGVmYXVsdFJlYWRPYmplY3QoKTsKKyAgICAgICAgaWYgKHNlcmlhbFZlcnNpb25PblN0cmVhbSA8IDEpIHsKKyAgICAgICAgICAgIC8vIERpZG4ndCBoYXZlIG1vbmV0YXJ5U2VwYXJhdG9yIG9yIGV4cG9uZW50aWFsIGZpZWxkOworICAgICAgICAgICAgLy8gdXNlIGRlZmF1bHRzLgorICAgICAgICAgICAgbW9uZXRhcnlTZXBhcmF0b3IgPSBkZWNpbWFsU2VwYXJhdG9yOworICAgICAgICAgICAgZXhwb25lbnRpYWwgPSAnRSc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcmlhbFZlcnNpb25PblN0cmVhbSA8IDIpIHsgLy8gW05FV10KKyAgICAgICAgICAgIHBhZEVzY2FwZSA9IERlY2ltYWxGb3JtYXQuUEFUVEVSTl9QQURfRVNDQVBFOworICAgICAgICAgICAgcGx1c1NpZ24gPSBEZWNpbWFsRm9ybWF0LlBBVFRFUk5fUExVU19TSUdOOworICAgICAgICAgICAgZXhwb25lbnRTZXBhcmF0b3IgPSBTdHJpbmcudmFsdWVPZihleHBvbmVudGlhbCk7CisgICAgICAgICAgICAvLyBBbHRob3VnaCB3ZSByZWFkIHRoZSBleHBvbmVudGlhbCBmaWVsZCBvbiBzdHJlYW0gdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgLy8gZXhwb25lbnRTZXBhcmF0b3IsIHdlIGRvbid0IGRvIHRoZSByZXZlcnNlLCBzaW5jZSBzY2llbnRpZmljCisgICAgICAgICAgICAvLyBub3RhdGlvbiBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIG9sZCBjbGFzc2VzLCBldmVuIHRob3VnaCB0aGUKKyAgICAgICAgICAgIC8vIHN5bWJvbCBpcyB0aGVyZS4KKyAgICAgICAgfQorICAgICAgICBpZiAoc2VyaWFsVmVyc2lvbk9uU3RyZWFtIDwgMykgeworICAgICAgICAgICAgLy8gUmVzdXJyZWN0ZWQgb2JqZWN0cyBmcm9tIG9sZCBzdHJlYW1zIHdpbGwgaGF2ZSBubworICAgICAgICAgICAgLy8gbG9jYWxlLiAgVGhlcmUgaXMgbm8gMTAwJSBmaXggZm9yIHRoaXMuICBBCisgICAgICAgICAgICAvLyA5MCUgZml4IGlzIHRvIGNvbnN0cnVjdCBhIG1hcHBpbmcgb2YgZGF0YSBiYWNrIHRvCisgICAgICAgICAgICAvLyBsb2NhbGUsIHBlcmhhcHMgYSBoYXNoIG9mIGFsbCBvdXIgbWVtYmVycy4gIFRoaXMgaXMKKyAgICAgICAgICAgIC8vIGV4cGVuc2l2ZSBhbmQgZG9lc24ndCBzZWVtIHdvcnRoIGl0LgorICAgICAgICAgICAgbG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKyAgICAgICAgfQorICAgICAgICBzZXJpYWxWZXJzaW9uT25TdHJlYW0gPSBjdXJyZW50U2VyaWFsVmVyc2lvbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdXNlZCBmb3IgemVyby4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRaZXJvRGlnaXQKKyAgICAgKi8KKyAgICBwcml2YXRlICBjaGFyICAgIHplcm9EaWdpdDsKKworICAgIC8qKgorICAgICAqIENoYXJhY3RlciB1c2VkIGZvciB0aG91c2FuZHMgc2VwYXJhdG9yLgorICAgICAqCisgICAgICogQHNlcmlhbAorICAgICAqIEBzZWUgI2dldEdyb3VwaW5nU2VwYXJhdG9yCisgICAgICovCisgICAgcHJpdmF0ZSAgY2hhciAgICBncm91cGluZ1NlcGFyYXRvcjsKKworICAgIC8qKgorICAgICAqIENoYXJhY3RlciB1c2VkIGZvciBkZWNpbWFsIHNpZ24uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0RGVjaW1hbFNlcGFyYXRvcgorICAgICAqLworICAgIHByaXZhdGUgIGNoYXIgICAgZGVjaW1hbFNlcGFyYXRvcjsKKworICAgIC8qKgorICAgICAqIENoYXJhY3RlciB1c2VkIGZvciBtaWxsZSBwZXJjZW50IHNpZ24uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0UGVyTWlsbAorICAgICAqLworICAgIHByaXZhdGUgIGNoYXIgICAgcGVyTWlsbDsKKworICAgIC8qKgorICAgICAqIENoYXJhY3RlciB1c2VkIGZvciBwZXJjZW50IHNpZ24uCisgICAgICogQHNlcmlhbAorICAgICAqIEBzZWUgI2dldFBlcmNlbnQKKyAgICAgKi8KKyAgICBwcml2YXRlICBjaGFyICAgIHBlcmNlbnQ7CisKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdXNlZCBmb3IgYSBkaWdpdCBpbiBhIHBhdHRlcm4uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0RGlnaXQKKyAgICAgKi8KKyAgICBwcml2YXRlICBjaGFyICAgIGRpZ2l0OworCisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHN1YnBhdHRlcm5zCisgICAgICogaW4gYSBwYXR0ZXJuLgorICAgICAqCisgICAgICogQHNlcmlhbAorICAgICAqIEBzZWUgI2dldFBhdHRlcm5TZXBhcmF0b3IKKyAgICAgKi8KKyAgICBwcml2YXRlICBjaGFyICAgIHBhdHRlcm5TZXBhcmF0b3I7CisKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgdXNlZCB0byByZXByZXNlbnQgaW5maW5pdHkuCisgICAgICogQHNlcmlhbAorICAgICAqIEBzZWUgI2dldEluZmluaXR5CisgICAgICovCisgICAgcHJpdmF0ZSAgU3RyaW5nICBpbmZpbml0eTsKKworICAgIC8qKgorICAgICAqIENoYXJhY3RlciB1c2VkIHRvIHJlcHJlc2VudCBOYU4uCisgICAgICogQHNlcmlhbAorICAgICAqIEBzZWUgI2dldE5hTgorICAgICAqLworICAgIHByaXZhdGUgIFN0cmluZyAgTmFOOworCisgICAgLyoqCisgICAgICogQ2hhcmFjdGVyIHVzZWQgdG8gcmVwcmVzZW50IG1pbnVzIHNpZ24uCisgICAgICogQHNlcmlhbAorICAgICAqIEBzZWUgI2dldE1pbnVzU2lnbgorICAgICAqLworICAgIHByaXZhdGUgIGNoYXIgICAgbWludXNTaWduOworCisgICAgLyoqCisgICAgICogU3RyaW5nIGRlbm90aW5nIHRoZSBsb2NhbCBjdXJyZW5jeSwgZS5nLiAiJCIuCisgICAgICogQHNlcmlhbAorICAgICAqIEBzZWUgI2dldEN1cnJlbmN5U3ltYm9sCisgICAgICovCisgICAgcHJpdmF0ZSAgU3RyaW5nICBjdXJyZW5jeVN5bWJvbDsKKworICAgIC8qKgorICAgICAqIEludGVybmF0aW9uYWwgc3RyaW5nIGRlbm90aW5nIHRoZSBsb2NhbCBjdXJyZW5jeSwgZS5nLiAiVVNEIi4KKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sCisgICAgICovCisgICAgcHJpdmF0ZSAgU3RyaW5nICBpbnRsQ3VycmVuY3lTeW1ib2w7CisKKyAgICAvKioKKyAgICAgKiBUaGUgZGVjaW1hbCBzZXBhcmF0b3IgdXNlZCB3aGVuIGZvcm1hdHRpbmcgY3VycmVuY3kgdmFsdWVzLgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRNb25ldGFyeURlY2ltYWxTZXBhcmF0b3IKKyAgICAgKi8KKyAgICBwcml2YXRlICBjaGFyICAgIG1vbmV0YXJ5U2VwYXJhdG9yOyAvLyBGaWVsZCBuZXcgaW4gSkRLIDEuMS42CisKKyAgICAvKioKKyAgICAgKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIGV4cG9uZW50IGluIGEgbnVtYmVyIGZvcm1hdHRlZAorICAgICAqIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uLCBlLmcuICdFJyBmb3IgYSBudW1iZXIgc3VjaCBhcyAiMS4yM0U0NSIuCisgICAgICogPHA+CisgICAgICogTm90ZSB0aGF0IHRoaXMgZmllbGQgaGFzIGJlZW4gc3VwZXJzZWRlZCBieSA8Y29kZT5leHBvbmVudFNlcGFyYXRvcjwvY29kZT4uCisgICAgICogSXQgaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSAgY2hhciAgICBleHBvbmVudGlhbDsgICAgICAgLy8gRmllbGQgbmV3IGluIEpESyAxLjEuNgorCisgICAgLyoqCisgICAgICogVGhlIHN0cmluZyB1c2VkIHRvIHNlcGFyYXRlIHRoZSBtYW50aXNzYSBmcm9tIHRoZSBleHBvbmVudC4KKyAgICAgKiBFeGFtcGxlczogIngxMF4iIGZvciAxLjIzeDEwXjQsICJFIiBmb3IgMS4yM0U0LgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhhdCB0aGlzIHN1cGVyc2VkZXMgdGhlIDxjb2RlPmV4cG9uZW50aWFsPC9jb2RlPiBmaWVsZC4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2luY2UgQWxwaGFXb3JrcworICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGV4cG9uZW50U2VwYXJhdG9yOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBpbmRpY2F0ZSBhIHBhZGRpbmcgY2hhcmFjdGVyIGluIGEgZm9ybWF0LAorICAgICAqIGUuZy4sICcqJyBpbiBhIHBhdHRlcm4gc3VjaCBhcyAiJCpfIywjIzAuMDAiLgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2luY2UgQWxwaGFXb3JrcworICAgICAqLworICAgIHByaXZhdGUgY2hhciBwYWRFc2NhcGU7CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogVGhlIGNoYXJhY3RlciB1c2VkIHRvIGluZGljYXRlIGEgcGx1cyBzaWduLgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2luY2UgQWxwaGFXb3JrcworICAgICAqLworICAgIHByaXZhdGUgY2hhciBwbHVzU2lnbjsKKworICAgIC8qKgorICAgICAqIFRoZSBsb2NhbGUgZm9yIHdoaWNoIHRoaXMgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZC4gIFNldCB0byB0aGUKKyAgICAgKiBkZWZhdWx0IGxvY2FsZSBmb3Igb2JqZWN0cyByZXN1cnJlY3RlZCBmcm9tIG9sZCBzdHJlYW1zLgorICAgICAqIEBzaW5jZSBJQ1UgMi4yCisgICAgICovCisgICAgcHJpdmF0ZSBMb2NhbGUgbG9jYWxlOworCisgICAgLy8gUHJvY2xhaW0gSkRLIDEuMSBGQ1MgY29tcGF0aWJpbGl0eQorICAgIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA1NzcyNzk2MjQzMzk3MzUwMzAwTDsKKworICAgIC8vIFRoZSBpbnRlcm5hbCBzZXJpYWwgdmVyc2lvbiB3aGljaCBzYXlzIHdoaWNoIHZlcnNpb24gd2FzIHdyaXR0ZW4KKyAgICAvLyAtIDAgKGRlZmF1bHQpIGZvciB2ZXJzaW9uIHVwIHRvIEpESyAxLjEuNQorICAgIC8vIC0gMSBmb3IgdmVyc2lvbiBmcm9tIEpESyAxLjEuNiwgd2hpY2ggaW5jbHVkZXMgdHdvIG5ldyBmaWVsZHM6CisgICAgLy8gICAgIG1vbmV0YXJ5U2VwYXJhdG9yIGFuZCBleHBvbmVudGlhbC4KKyAgICAvLyAtIDIgZm9yIHZlcnNpb24gZnJvbSBBbHBoYVdvcmtzLCB3aGljaCBpbmNsdWRlcyAzIG5ldyBmaWVsZHM6CisgICAgLy8gICAgIHBhZEVzY2FwZSwgZXhwb25lbnRTZXBhcmF0b3IsIGFuZCBwbHVzU2lnbi4KKyAgICAvLyAtIDMgZm9yIElDVSAyLjIsIHdoaWNoIGluY2x1ZGVzIHRoZSBsb2NhbGUgZmllbGQKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgY3VycmVudFNlcmlhbFZlcnNpb24gPSAzOworICAgIAorICAgIC8qKgorICAgICAqIERlc2NyaWJlcyB0aGUgdmVyc2lvbiBvZiA8Y29kZT5EZWNpbWFsRm9ybWF0U3ltYm9sczwvY29kZT4gcHJlc2VudCBvbiB0aGUgc3RyZWFtLgorICAgICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisgICAgICogPHVsPgorICAgICAqIDxsaT48Yj4wPC9iPiAob3IgdW5pbml0aWFsaXplZCk6IHZlcnNpb25zIHByaW9yIHRvIEpESyAxLjEuNi4KKyAgICAgKgorICAgICAqIDxsaT48Yj4xPC9iPjogVmVyc2lvbnMgd3JpdHRlbiBieSBKREsgMS4xLjYgb3IgbGF0ZXIsIHdoaWNoIGluY2x1ZGVzCisgICAgICogICAgICB0d28gbmV3IGZpZWxkczogPGNvZGU+bW9uZXRhcnlTZXBhcmF0b3I8L2NvZGU+IGFuZCA8Y29kZT5leHBvbmVudGlhbDwvY29kZT4uCisgICAgICogPGxpPjxiPjI8L2I+OiBWZXJzaW9uIGZvciBBbHBoYVdvcmtzLiAgQWRkcyBwYWRFc2NhcGUsIGV4cG9uZW50U2VwYXJhdG9yLAorICAgICAqICAgICAgYW5kIHBsdXNTaWduLgorICAgICAqIDwvdWw+CisgICAgICogV2hlbiBzdHJlYW1pbmcgb3V0IGEgPGNvZGU+RGVjaW1hbEZvcm1hdFN5bWJvbHM8L2NvZGU+LCB0aGUgbW9zdCByZWNlbnQgZm9ybWF0CisgICAgICogKGNvcnJlc3BvbmRpbmcgdG8gdGhlIGhpZ2hlc3QgYWxsb3dhYmxlIDxjb2RlPnNlcmlhbFZlcnNpb25PblN0cmVhbTwvY29kZT4pCisgICAgICogaXMgYWx3YXlzIHdyaXR0ZW4uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgc2VyaWFsVmVyc2lvbk9uU3RyZWFtID0gY3VycmVudFNlcmlhbFZlcnNpb247CisKKyAgICAvKioKKyAgICAgKiBjYWNoZSB0byBob2xkIHRoZSBOdW1iZXJFbGVtZW50cyBhbmQgdGhlIEN1cnJlbmN5RWxlbWVudHMKKyAgICAgKiBvZiBhIExvY2FsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIYXNodGFibGUgY2FjaGVkTG9jYWxlRGF0YSA9IG5ldyBIYXNodGFibGUoMyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9EZWNvbXBEYXRhLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9EZWNvbXBEYXRhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmFiN2M0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0RlY29tcERhdGEuamF2YQpAQCAtMCwwICsxLDc0NSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogPiBUSElTIEZJTEUgV0FTIE1BQ0hJTkUgR0VORVJBVEVEIDwKKyogPiAgICAgICBETyBOT1QgRURJVCBCWSBIQU5EICAgICAgIDwKKyogPiAgICAgIFJVTiBUT09MIFRPIFJFR0VORVJBVEUgICAgIDwKKyogVG9vbDogY29tLmlibS5pY3UudGV4dC5Ob3JtYWxpemVyCisqIENyZWF0aW9uIGRhdGU6IFR1ZSBKdWwgMTggMTE6MDU6MjggUERUIDIwMDAKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLio7CisKK2NsYXNzIERlY29tcERhdGEgeworICAgIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NBTk9OSUNBTCA9IDIxNzU0OworICAgIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NPTVBBVCA9IDExMTc3OworICAgIHN0YXRpYyBmaW5hbCBpbnQgREVDT01QX01BU0sgPSAzMjc2NzsKKyAgICBzdGF0aWMgZmluYWwgaW50IERFQ09NUF9SRUNVUlNFID0gMzI3Njg7CisgICAgc3RhdGljIGZpbmFsIHNob3J0IEJBU0UgPSAwOworCisgICAgc3RhdGljIGZpbmFsIENvbXBhY3RDaGFyQXJyYXkgb2Zmc2V0cyA9IG5ldyBDb21wYWN0Q2hhckFycmF5KAorICAgICAgICAiXDAwMFx1MDgwMFx1QTVBNVwwMDVcMDAwIEBgXHUwMDgwXHUwMEEwXHUwMEMwXHUwMEUwXDAwMFx1MDEwMFx1MDEyMFx1MDE0MCIrCisgICAgICAgICJcdTAxNjBcdTAxODBcMDAwXDAwMFwwMDBcdTAxQTBcdTAxQzBcdTAxRTBcMDAwXDAwMFx1MDIwMFx1MDIyMFx1MDI0MFx1MDI2MCIrCisgICAgICAgICJcdTAyODBcdTAyQTBcdTAyQzBcdTAyRTBcdTAzMDBcdTAzMjBcMDAwXDAwMFx1MDM0MFx1MDM2MFx1QTVBNVwwMDRcMDAwIisKKyAgICAgICAgIlx1MDM4MFx1QTVBNVwwMDRcMDAwXHUwM0EwXDAwMFx1MDNDMFwwMDBcMDAwXHUwM0UwXHVBNUE1XDAyMlwwMDBcdTA0MDAiKworICAgICAgICAiXHUwNDIwXDAwMFwwMDBcMDAwXHUwNDQwXDAwMFwwMDBcdTA0NjBcdTA0ODBcdUE1QTVcMDA3XDAwMFx1MDRBMFwwMDBcdTA0QzAiKworICAgICAgICAiXDAwMFx1MDRFMFwwMDBcMDAwXDAwMFx1MDUwMFwwMDBcMDAwXDAwMFx1MDUyMFwwMDBcMDAwXDAwMFx1MDU0MFwwMDBcMDAwIisKKyAgICAgICAgIlwwMDBcdTA1NjBcMDAwXDAwMFx1MDU4MFwwMDBcMDAwXDAwMFx1MDVBMFx1MDVDMFwwMDBcdTA1RTBcMDAwXHUwNjAwXHUwNjIwIisKKyAgICAgICAgIlx1MDY0MFx1MDY2MFwwMDBcMDAwXDAwMFx1MDY4MFx1QTVBNW5cMDAwXHUwNkEwXHUwNkMwXHUwNkUwXHUwNzAwXHUwNzIwIisKKyAgICAgICAgIlx1MDc0MFx1MDc2MFx1MDc4MFx1MDdBMFx1MDdDMFx1MDdFMFx1MDgwMFx1MDgyMFx1MDg0MFx1MDg2MFx1MDg4MFx1MDhBMCIrCisgICAgICAgICJcdTA4QzBcdTA4RTBcdTA5MDBcdTA5MjBcdTA5NDBcMDAwXDAwMFx1MDk2MFx1MDk4MFx1MDlBMFx1MDlDMFx1MDlFMFx1MEEwMCIrCisgICAgICAgICJcdTBBMjBcMDAwXHUwQTQwXHUwQTYwXHUwQTgwXHUwQUEwXHUwQUMwXHUwQUUwXDAwMFx1MEIwMFwwMDBcdTBCMjBcdUE1QTUiKworICAgICAgICAiXDAxMVwwMDBcdTBCNDBcdTBCNjBcdTBCODBcdTBCQTBcdTBCQzBcdUE1QTVMXDAwMFx1MEJFMFwwMDBcMDAwXHUwQzAwIisKKyAgICAgICAgIlx1MEMyMFx1MEM0MFx1MEM2MFx1MEM4MFx1MENBMFx1MENDMFx1MENFMFwwMDBcdTBEMDBcdTBEMjBcdTBENDBcdTBENjAiKworICAgICAgICAiXHUwRDgwXHUwREEwXHUwREMwXHUwREUwXDAwMFx1MEUwMFx1MEUyMFx1MEU0MFx1MEU2MFwwMDBcMDAwXDAwMFx1MEU4MCIrCisgICAgICAgICJcdTBFQTBcdTBFQzBcdTBFRTBcdTBGMDBcdTBGMjBcdTBGNDBcdTBGNjBcdTBGODBcdTBGQTBcdTBGQzBcdTBGRTBcdTEwMDAiKworICAgICAgICAiXHUxMDIwXHUxMDQwXHUxMDYwXHVBNUE1XHUwNjI4XDAwMFx1MTA4MFx1MTBBMFx1MTBDMFx1MTBFMFx1MTEwMFx1MTEyMCIrCisgICAgICAgICJcdTExNDBcdTExNjBcdTExODBcdTExQTBcdUE1QTVcMDA2XDAwMFx1MTFDMFx1MTFFMFx1MTIwMFx1MTIyMFx1MTI0MFx1MTI2MCIrCisgICAgICAgICJcdTEyODBcdTEyQTBcdTEyQzBcdTEyRTBcdTEzMDBcdTEzMjBcdTEzNDBcdTEzNjBcdTEzODBcdTEzQTBcdTEzQzBcdTEzRTAiKworICAgICAgICAiXHUxNDAwXHUxNDIwXHUxNDQwXHUxNDYwXHUxNDgwXHUxNEEwXDAwMFx1MTRDMFx1MTRFMFx1MTUwMFx1MTUyMFx1MTU0MCIrCisgICAgICAgICJcdTE1NjBcdTE1ODBcdTE1QTBcdTE1QzBcdTE1RTBcdTE2MDBcdTE2MjBcdTE2NDBcdTE2NjBcdTE2ODAiCisgICAgICAgICwKKyAgICAgICAgIlwwMDBcdTE2QTBcdUE1QTUgXDAwMFwwMDVcdUE1QTVcMDA3XDAwMFwwMTJcMDAwXDAyMVx1QTVBNVwwMDRcMDAwXDAyNiIrCisgICAgICAgICJcMDAwXDAwMFwwMzUhJi1cMDAwXDAwMDI5PVwwMDBDT1tcMDAwXHUyQkFFXHUyQkI2XHUyQkJFXHUyQkM2XHUyQkNFXHUyQkQ2IisKKyAgICAgICAgIlwwMDBcdTJCREVcdTJCRTZcdTJCRUVcdTJCRjZcdTJCRkVcdTJDMDZcdTJDMEVcdTJDMTZcdTJDMUVcMDAwXHUyQzI2XHUyQzJFIisKKyAgICAgICAgIlx1MkMzNlx1MkMzRVx1MkM0Nlx1MkM0RVwwMDBcMDAwXHUyQzU2XHUyQzVFXHUyQzY2XHUyQzZFXHUyQzc2XDAwMFwwMDAiKworICAgICAgICAiXHUyQzdFXHUyQzg2XHUyQzhFXHUyQzk2XHUyQzlFXHUyQ0E2XDAwMFx1MkNBRVx1MkNCNlx1MkNCRVx1MkNDNlx1MkNDRSIrCisgICAgICAgICJcdTJDRDZcdTJDREVcdTJDRTZcdTJDRUVcMDAwXHUyQ0Y2XHUyQ0ZFXHUyRDA2XHUyRDBFXHUyRDE2XHUyRDFFXDAwMFwwMDAiKworICAgICAgICAiXHUyRDI2XHUyRDJFXHUyRDM2XHUyRDNFXHUyRDQ2XDAwMFx1MkQ0RVx1MkQ1Nlx1MkQ1RVx1MkQ2Nlx1MkQ2RVx1MkQ3NiIrCisgICAgICAgICJcdTJEN0VcdTJEODZcdTJEOEVcdTJEOTZcdTJEOUVcdTJEQTZcdTJEQUVcdTJEQjZcdTJEQkVcdTJEQzZcdTJEQ0VcMDAwIisKKyAgICAgICAgIlwwMDBcdTJERDZcdTJEREVcdTJERTZcdTJERUVcdTJERjZcdTJERkVcdTJFMDZcdTJFMEVcdTJFMTZcdTJFMUVcdTJFMjYiKworICAgICAgICAiXHUyRTJFXHUyRTM2XHUyRTNFXHUyRTQ2XHUyRTRFXHUyRTU2XHUyRTVFXHUyRTY2XHUyRTZFXDAwMFwwMDBcdTJFNzZcdTJFN0UiKworICAgICAgICAiXHUyRTg2XHUyRThFXHUyRTk2XHUyRTlFXHUyRUE2XHUyRUFFXHUyRUI2XDAwMGZuXHUyRUJFXHUyRUM2XHUyRUNFXHUyRUQ2IisKKyAgICAgICAgIlwwMDBcdTJFREVcdTJFRTZcdTJFRUVcdTJFRjZcdTJFRkVcdTJGMDZ2flwwMDBcMDAwXHUyRjBFXHUyRjE2XHUyRjFFXHUyRjI2IisKKyAgICAgICAgIlx1MkYyRVx1MkYzNlx1MDA4NlwwMDBcMDAwXHUyRjNFXHUyRjQ2XHUyRjRFXHUyRjU2XHUyRjVFXHUyRjY2XDAwMFwwMDAiKworICAgICAgICAiXHUyRjZFXHUyRjc2XHUyRjdFXHUyRjg2XHUyRjhFXHUyRjk2XHUyRjlFXHUyRkE2XHUyRkFFXHUyRkI2XHUyRkJFXHUyRkM2IisKKyAgICAgICAgIlx1MkZDRVx1MkZENlx1MkZERVx1MkZFNlx1MkZFRVx1MkZGNlwwMDBcMDAwXHUyRkZFXHUzMDA2XHUzMDBFXHUzMDE2XHUzMDFFIisKKyAgICAgICAgIlx1MzAyNlx1MzAyRVx1MzAzNlx1MzAzRVx1MzA0Nlx1MzA0RVx1MzA1Nlx1MzA1RVx1MzA2Nlx1MzA2RVx1MzA3Nlx1MzA3RSIrCisgICAgICAgICJcdTMwODZcdTMwOEVcdTMwOTZcdTMwOUVcdTMwQTZcdTMwQUVcdTAwOERcdTMwQjZcdTMwQkVcdUE1QTVcMDE1XDAwMFx1MzBDNiIrCisgICAgICAgICJcdTMwQ0VcdUE1QTVcMDIzXDAwMFx1MDA5M1x1MDA5Rlx1MDBBQlx1MDBCNlx1MDBCRVx1MDBDNlx1MDBDRVx1MDBENlx1MDBERSIrCisgICAgICAgICJcdTMwRDZcdTMwREVcdTMwRTZcdTMwRUVcdTMwRjZcdTMwRkVcdTMxMDZcdTMxMEVcdTMxMTdcdTMxMjNcdTMxMkZcdTMxM0IiKworICAgICAgICAiXHUzMTQ3XHUzMTUzXHUzMTVGXHUzMTZCXDAwMFx1MzE3N1x1MzE4M1x1MzE4Rlx1MzE5Qlx1MzFBNlx1MzFBRVwwMDBcMDAwIisKKyAgICAgICAgIlx1MzFCNlx1MzFCRVx1MzFDNlx1MzFDRVx1MzFENlx1MzFERVx1MzFFN1x1MzFGM1x1MzFGRVx1MzIwNlx1MzIwRVx1MDA5MiIrCisgICAgICAgICJcdTAwOUVcdTAwQUFcdTMyMTZcdTMyMUVcMDAwXDAwMFx1MzIyNlx1MzIyRVx1MzIzN1x1MzI0M1x1MzI0RVx1MzI1Nlx1MzI1RSIrCisgICAgICAgICJcdTMyNjZcdTMyNkVcdTMyNzZcdTMyN0VcdTMyODZcdTMyOEVcdTMyOTZcdTMyOUVcdTMyQTZcdTMyQUVcdTMyQjZcdTMyQkUiKworICAgICAgICAiXHUzMkM2XHUzMkNFXHUzMkQ2XHUzMkRFXHUzMkU2XHUzMkVFXHUzMkY2XHUzMkZFXHUzMzA2XHUzMzBFXHUzMzE2XHUzMzFFIisKKyAgICAgICAgIlx1MzMyNlx1MzMyRVx1MzMzNlx1MzMzRVx1MzM0NlwwMDBcMDAwXHUzMzRFXHUzMzU2XHVBNUE1XDAwNlwwMDBcdTMzNUUiKworICAgICAgICAiXHUzMzY2XHUzMzZFXHUzMzc2XHUzMzdGXHUzMzhCXHUzMzk3XHUzM0EzXHUzM0FFXHUzM0I2XHUzM0JGXHUzM0NCXHUzM0Q2IisKKyAgICAgICAgIlx1MzNERVx1QTVBNVwwMzRcMDAwXHUwMEU1XHUwMEU5cVx1MDBFRFx1MDBGMVx1MDBGNVx1MDBGOVx1MDBGRFx1MDEwMSIrCisgICAgICAgICJcdUE1QTVcMDM3XDAwMFx1MDEwNlx1MDEwRVx1MDExNlx1MDExRVx1MDEyNlx1MDEyRVwwMDBcMDAwXHUwMTM1fVx1MDA4RCIrCisgICAgICAgICJcdTAxMzlcdTAxM0RcdUE1QTVcMDMzXDAwMFx1MzNFNVx1MzNFOVwwMDBcdTMzRURcdTMzRjJcdUE1QTUvXDAwMFx1MzNGOSIrCisgICAgICAgICJcdUE1QTVcMDA1XDAwMFx1MDE0MlwwMDBcMDAwXDAwMFx1MzNGRFx1QTVBNVwwMDVcMDAwJlx1QjQwMlx1MzQwQVx1MzQxMSIrCisgICAgICAgICJcdTM0MTZcdTM0MUVcdTM0MjZcMDAwXHUzNDJFXDAwMFx1MzQzNlx1MzQzRVx1MzQ0N1x1QTVBNVwwMzFcMDAwXHUzNDUyIisKKyAgICAgICAgIlx1MzQ1QVx1MzQ2Mlx1MzQ2QVx1MzQ3Mlx1MzQ3QVx1MzQ4M1x1QTVBNVwwMzFcMDAwXHUzNDhFXHUzNDk2XHUzNDlFXHUzNEE2IisKKyAgICAgICAgIlx1MzRBRVwwMDBcdTAxNDlcdTAxNERcdTAxNTFcdUI0QjZcdUI0QkVcdTAxNTVcdTAxNTlcdUE1QTVcMDMxXDAwMFx1MDE1RCIrCisgICAgICAgICJcdTAxNjFcdTAxNjVcdUE1QTVcMDE1XDAwMFx1MzRDNlx1MzRDRVwwMDBcdTM0RDZcMDAwXDAwMFwwMDBcdTM0REVcdUE1QTUiKworICAgICAgICAiXDAwNFwwMDBcdTM0RTZcdTM0RUVcdTM0RjZcdUE1QTVcMDEyXDAwMFx1MzRGRVx1QTVBNVwwMzdcMDAwXHUzNTA2XHVBNUE1IisKKyAgICAgICAgIlwwMjZcMDAwXHUzNTBFXHUzNTE2XDAwMFx1MzUxRVwwMDBcMDAwXDAwMFx1MzUyNlx1QTVBNVwwMDRcMDAwXHUzNTJFXHUzNTM2IisKKyAgICAgICAgIlx1MzUzRVx1QTVBNVwwMjdcMDAwXHUzNTQ2XHUzNTRFXHVBNUE1XDAxMVwwMDBcdTM1NTZcdTM1NUVcdUE1QTVcMDE1XDAwMCIrCisgICAgICAgICJcdTM1NjZcdTM1NkVcdTM1NzZcdTM1N0VcMDAwXDAwMFx1MzU4Nlx1MzU4RVwwMDBcMDAwXHUzNTk2XHUzNTlFXHUzNUE2IisKKyAgICAgICAgIlx1MzVBRVx1MzVCNlx1MzVCRVwwMDBcMDAwXHUzNUM2XHUzNUNFXHUzNUQ2XHUzNURFXHUzNUU2XHUzNUVFXDAwMFwwMDAiKworICAgICAgICAiXHUzNUY2XHUzNUZFXHUzNjA2XHUzNjBFXHUzNjE2XHUzNjFFXHUzNjI2XHUzNjJFXHUzNjM2XHUzNjNFXHUzNjQ2XHUzNjRFIisKKyAgICAgICAgIlwwMDBcMDAwXHUzNjU2XHUzNjVFXHVBNUE1XDAxNVwwMDBcdTAxNkFcdUE1QTVcMDMyXDAwMFx1MzY2Nlx1MzY2RVx1MzY3NiIrCisgICAgICAgICJcdTM2N0VcdTM2ODZcdUE1QTUuXDAwMFx1MDE3Mlx1MDE3QVx1MDE4Mlx1MDE4QVx1QTVBNVwwMDdcMDAwXHUzNjhFXDAwMCIrCisgICAgICAgICJcdTM2OTZcdUE1QTVcMDIwXDAwMFx1MzY5RVx1QTVBNVwwMjVcMDAwXHUzNkE2XHVBNUE1XDAwN1wwMDBcdTM2QUVcMDAwIisKKyAgICAgICAgIlwwMDBcdTM2QjZcdUE1QTUjXDAwMFx1MzZCRVx1MzZDNlx1MzZDRVx1MzZENlx1MzZERVx1MzZFNlx1MzZFRVx1MzZGNiIrCisgICAgICAgICJcdUE1QTVcMDEzXDAwMFx1MzZGRVx1MzcwNlx1QTVBNVwwMTdcMDAwXHUzNzBFXHUzNzE2XDAwMFx1MzcxRVx1QTVBNVwwMjMiKworICAgICAgICAiXDAwMFx1MzcyNlwwMDBcMDAwXHUzNzJFXHVBNUE1XDA0MlwwMDBcdTM3MzZcdTM3M0VcdTM3NDZcMDAwXDAwMFx1Mzc0RSIrCisgICAgICAgICJcdUE1QTVcMDExXDAwMFx1Mzc1NlwwMDBcMDAwXHUzNzVFXHUzNzY2XHVBNUE1XDAxN1wwMDBcdTM3NkVcdTM3NzZcdUE1QTUiKworICAgICAgICAiXDAyNlwwMDBcdTM3N0VcdUE1QTVcMDI1XDAwMFx1Mzc4Nlx1Mzc4RVx1Mzc5Nlx1QTVBNVwwMzNcMDAwXHUzNzlFXHVBNUE1IisKKyAgICAgICAgIlwwMjdcMDAwXHUzN0E2XHVBNUE1XDAwNlwwMDBcdTM3QUVcdTM3QjZcMDAwXHUzN0JFXHUzN0M3XHVBNUE1XDAzNlwwMDAiKworICAgICAgICAiXHUzN0QyXHUzN0RBXHUzN0UyXHVBNUE1LVwwMDBcdTM3RUFcMDAwXHUzN0YyXHUzN0ZCXHUzODA2XHVBNUE1XDAyNFwwMDAiKworICAgICAgICAiXHUwMTkyXHVBNUE1XDAzN1wwMDBcdTAxOUFcdUE1QTUoXDAwMFx1MDFBMlx1MDFBQVx1QTVBNVwwMTZcMDAwXHUwMUIxIisKKyAgICAgICAgIlx1QTVBNVwwMjZcMDAwXHUzODBFXHVBNUE1XDAxMVwwMDBcdTM4MTZcdUE1QTVcMDA0XDAwMFx1MzgxRVx1QTVBNVwwMDQiKworICAgICAgICAiXDAwMFx1MzgyNlx1QTVBNVwwMDRcMDAwXHUzODJFXHVBNUE1XDAxNFwwMDBcdTM4MzZcdUE1QTVcMDExXDAwMFx1MzgzRSIrCisgICAgICAgICJcMDAwXHUzODQ2XHUzODRFXHUwMUI3XHUzODU2XHUwMUMzXHVBNUE1XDAwN1wwMDBcdTM4NUVcdUE1QTVcMDIxXDAwMFx1Mzg2NiIrCisgICAgICAgICJcdUE1QTVcMDExXDAwMFx1Mzg2RVx1QTVBNVwwMDRcMDAwXHUzODc2XHVBNUE1XDAwNFwwMDBcdTM4N0VcdUE1QTVcMDA0IisKKyAgICAgICAgIlwwMDBcdTM4ODZcdUE1QTVcMDE0XDAwMFx1Mzg4RVx1QTVBNVwwMTRcMDAwXHUzODk2XHVBNUE1XDAzMVwwMDBcdTM4OUUiKworICAgICAgICAiXHUzOEE2XHUzOEFFXHUzOEI2XHUzOEJFXHUzOEM2XHUzOENFXHUzOEQ2XHUzOERGXHUzOEVCXHUzOEY2XHUzOEZFXHUzOTA2IisKKyAgICAgICAgIlx1MzkwRVx1MzkxNlx1MzkxRVx1MzkyNlx1MzkyRVx1MzkzNlx1MzkzRVx1Mzk0N1x1Mzk1M1x1Mzk1Rlx1Mzk2Qlx1Mzk3NiIrCisgICAgICAgICJcdTM5N0VcdTM5ODZcdTM5OEVcdTM5OTdcdTM5QTNcdTM5QUVcdTM5QjZcdTM5QkVcdTM5QzZcdTM5Q0VcdTM5RDZcdTM5REUiKworICAgICAgICAiXHUzOUU2XHUzOUVFXHUzOUY2XHUzOUZFXHUzQTA2XHUzQTBFXHUzQTE2XHUzQTFFXHUzQTI2XHUzQTJGXHUzQTNCXHUzQTQ2IisKKyAgICAgICAgIlx1M0E0RVx1M0E1Nlx1M0E1RVx1M0E2Nlx1M0E2RVx1M0E3Nlx1M0E3RVx1M0E4N1x1M0E5M1x1M0E5RVx1M0FBNlx1M0FBRSIrCisgICAgICAgICJcdTNBQjZcdTNBQkVcdTNBQzZcdTNBQ0VcdTNBRDZcdTNBREVcdTNBRTZcdTNBRUVcdTNBRjZcdTNBRkVcdTNCMDZcdTNCMEUiKworICAgICAgICAiXHUzQjE2XHUzQjFFXHUzQjI2XHUzQjJGXHUzQjNCXHUzQjQ3XHUzQjUzXHUzQjVGXHUzQjZCXHUzQjc3XHUzQjgzXHUzQjhFIisKKyAgICAgICAgIlx1M0I5Nlx1M0I5RVx1M0JBNlx1M0JBRVx1M0JCNlx1M0JCRVx1M0JDNlx1M0JDRlx1M0JEQlx1M0JFNlx1M0JFRVx1M0JGNiIrCisgICAgICAgICJcdTNCRkVcdTNDMDZcdTNDMEVcdTNDMTdcdTNDMjNcdTNDMkZcdTNDM0JcdTNDNDdcdTNDNTNcdTNDNUVcdTNDNjZcdTNDNkUiKworICAgICAgICAiXHUzQzc2XHUzQzdFXHUzQzg2XHUzQzhFXHUzQzk2XHUzQzlFXHUzQ0E2XHUzQ0FFXHUzQ0I2XHUzQ0JFXHUzQ0M2XHUzQ0NGIisKKyAgICAgICAgIlx1M0NEQlx1M0NFN1x1M0NGM1x1M0NGRVx1M0QwNlx1M0QwRVx1M0QxNlx1M0QxRVx1M0QyNlx1M0QyRVx1M0QzNlx1M0QzRSIrCisgICAgICAgICJcdTNENDZcdTNENEVcdTNENTZcdTNENUVcdTNENjZcdTNENkVcdTNENzZcdTNEN0VcdTNEODZcdTNEOEVcdTNEOTZcdTNEOUUiKworICAgICAgICAiXHUzREE2XHUzREFFXHUzREI2XHUzREJFXHUzREM2XHUzRENFXHUzREQ2XHUzRERFXHUzREU2XHUwMUNFXHVCREVFXHVBNUE1IisKKyAgICAgICAgIlwwMDRcMDAwXHUzREY2XHUzREZFXHUzRTA2XHUzRTBFXHUzRTE3XHUzRTIzXHUzRTJGXHUzRTNCXHUzRTQ3XHUzRTUzXHUzRTVGIisKKyAgICAgICAgIlx1M0U2Qlx1M0U3N1x1M0U4M1x1M0U4Rlx1M0U5Qlx1M0VBN1x1M0VCM1x1M0VCRlx1M0VDQlx1M0VEN1x1M0VFM1x1M0VFRiIrCisgICAgICAgICJcdTNFRkJcdTNGMDZcdTNGMEVcdTNGMTZcdTNGMUVcdTNGMjZcdTNGMkVcdTNGMzdcdTNGNDNcdTNGNEZcdTNGNUJcdTNGNjciKworICAgICAgICAiXHUzRjczXHUzRjdGXHUzRjhCXHUzRjk3XHUzRkEzXHUzRkFFXHUzRkI2XHUzRkJFXHUzRkM2XHUzRkNFXHUzRkQ2XHUzRkRFIisKKyAgICAgICAgIlx1M0ZFNlx1M0ZFRlx1M0ZGQlx1NDAwN1x1NDAxM1x1NDAxRlx1NDAyQlx1NDAzN1x1NDA0M1x1NDA0Rlx1NDA1Qlx1NDA2NyIrCisgICAgICAgICJcdTQwNzNcdTQwN0ZcdTQwOEJcdTQwOTdcdTQwQTNcdTQwQUZcdTQwQkJcdTQwQzdcdTQwRDNcdTQwREVcdTQwRTZcdTQwRUUiKworICAgICAgICAiXHU0MEY2XHU0MEZGXHU0MTBCXHU0MTE3XHU0MTIzXHU0MTJGXHU0MTNCXHU0MTQ3XHU0MTUzXHU0MTVGXHU0MTZCXHU0MTc2IisKKyAgICAgICAgIlx1NDE3RVx1NDE4Nlx1NDE4RVx1NDE5Nlx1NDE5RVx1NDFBNlx1NDFBRVx1QTVBNVwwMDZcMDAwXHU0MUI2XHU0MUJFXHU0MUM3IisKKyAgICAgICAgIlx1NDFEM1x1NDFERlx1NDFFQlx1NDFGN1x1NDIwM1x1NDIwRVx1NDIxNlx1NDIxRlx1NDIyQlx1NDIzN1x1NDI0M1x1NDI0RiIrCisgICAgICAgICJcdTQyNUJcdTQyNjZcdTQyNkVcdTQyNzdcdTQyODNcdTQyOEZcdTQyOUJcMDAwXDAwMFx1NDJBNlx1NDJBRVx1NDJCN1x1NDJDMyIrCisgICAgICAgICJcdTQyQ0ZcdTQyREJcMDAwXDAwMFx1NDJFNlx1NDJFRVx1NDJGN1x1NDMwM1x1NDMwRlx1NDMxQlx1NDMyN1x1NDMzM1x1NDMzRSIrCisgICAgICAgICJcdTQzNDZcdTQzNEZcdTQzNUJcdTQzNjdcdTQzNzNcdTQzN0ZcdTQzOEJcdTQzOTZcdTQzOUVcdTQzQTdcdTQzQjNcdTQzQkYiKworICAgICAgICAiXHU0M0NCXHU0M0Q3XHU0M0UzXHU0M0VFXHU0M0Y2XHU0M0ZGXHU0NDBCXHU0NDE3XHU0NDIzXHU0NDJGXHU0NDNCXHU0NDQ2IisKKyAgICAgICAgIlx1NDQ0RVx1NDQ1N1x1NDQ2M1x1NDQ2Rlx1NDQ3QlwwMDBcMDAwXHU0NDg2XHU0NDhFXHU0NDk3XHU0NEEzXHU0NEFGXHU0NEJCIisKKyAgICAgICAgIlwwMDBcMDAwXHU0NEM2XHU0NENFXHU0NEQ3XHU0NEUzXHU0NEVGXHU0NEZCXHU0NTA3XHU0NTEzXDAwMFx1NDUxRVwwMDAiKworICAgICAgICAiXHU0NTI3XDAwMFx1NDUzM1wwMDBcdTQ1M0ZcdTQ1NEFcdTQ1NTJcdTQ1NUJcdTQ1NjdcdTQ1NzNcdTQ1N0ZcdTQ1OEJcdTQ1OTciKworICAgICAgICAiXHU0NUEyXHU0NUFBXHU0NUIzXHU0NUJGXHU0NUNCXHU0NUQ3XHU0NUUzXHU0NUVGXHU0NUZBXHU0NjAyXHU0NjBBXHU0NjEyIisKKyAgICAgICAgIlx1NDYxQVx1NDYyMlx1NDYyQVx1NDYzMlx1NDYzQVx1NDY0Mlx1NDY0QVx1NDY1Mlx1NDY1QVx1NDY2MlwwMDBcMDAwXHU0NjZCIisKKyAgICAgICAgIlx1NDY3N1x1NDY4MFx1NDY5NFx1NDZBOFx1NDZCQ1x1NDZEMFx1NDZFNFx1NDZGQlx1NDcwN1x1NDcxMFx1NDcyNFx1NDczOCIrCisgICAgICAgICJcdTQ3NENcdTQ3NjBcdTQ3NzRcdTQ3OEJcdTQ3OTdcdTQ3QTBcdTQ3QjRcdTQ3QzhcdTQ3RENcdTQ3RjBcdTQ4MDRcdTQ4MUIiKworICAgICAgICAiXHU0ODI3XHU0ODMwXHU0ODQ0XHU0ODU4XHU0ODZDXHU0ODgwXHU0ODk0XHU0OEFCXHU0OEI3XHU0OEMwXHU0OEQ0XHU0OEU4IisKKyAgICAgICAgIlx1NDhGQ1x1NDkxMFx1NDkyNFx1NDkzQlx1NDk0N1x1NDk1MFx1NDk2NFx1NDk3OFx1NDk4Q1x1NDlBMFx1NDlCNFx1NDlDQSIrCisgICAgICAgICJcdTQ5RDJcdTQ5REJcdTQ5RTZcdTQ5RUZcMDAwXHU0OUZBXHU0QTAzXHU0QTBFXHU0QTE2XHU0QTFFXHU0QTI2XHU0QTJFIisKKyAgICAgICAgIlx1MDFENlx1NEEzNVx1MDFENlx1MDFERVx1Q0EzQVx1NEE0M1x1NEE0RVx1NEE1N1wwMDBcdTRBNjJcdTRBNkJcdTRBNzYiKworICAgICAgICAiXHU0QTdFXHU0QTg2XHU0QThFXHU0QTk2XHVDQTlFXHVDQUE2XHVDQUFFXHU0QUI2XHU0QUJFXHU0QUM3XHU0QUQzXDAwMCIrCisgICAgICAgICJcMDAwXHU0QURFXHU0QUU3XHU0QUYyXHU0QUZBXHU0QjAyXHU0QjBBXDAwMFx1Q0IxMlx1Q0IxQVx1Q0IyMlx1NEIyQVx1NEIzMiIrCisgICAgICAgICJcdTRCM0JcdTRCNDdcdTRCNTJcdTRCNUFcdTRCNjJcdTRCNkJcdTRCNzZcdTRCN0VcdTRCODZcdTRCOEVcdTRCOTZcdUNCOUUiKworICAgICAgICAiXHVDQkE2XHU0QkFEXDAwMFwwMDBcdTRCQjNcdTRCQkVcdTRCQzdcMDAwXHU0QkQyXHU0QkRCXHU0QkU2XHU0QkVFXHU0QkY2IisKKyAgICAgICAgIlx1NEJGRVx1NEMwNlx1Q0MwRFx1MDFFNlwwMDBcdUNDMTFcdUNDMTVcdUE1QTVcMDExXDAwNVx1QTVBNVwwMDZcMDAwXHUwMUVEIisKKyAgICAgICAgIlx1QTVBNVwwMDVcMDAwXHUwMUYyXHVBNUE1XDAxNFwwMDBcdTAxRjlcdTAxRkVcdTAxRkJcdUE1QTVcMDEwXDAwMFwwMDUiKworICAgICAgICAiXDAwMFwwMDBcMDAwXHUwMjA2XHUwMjBGXDAwMFx1MDIxQVx1MDIyM1x1QTVBNVwwMDRcMDAwXHUwMjJFXDAwMFx1MDIzNiIrCisgICAgICAgICJcdUE1QTVcMDExXDAwMFx1MDIzRVx1MDI0Nlx1QTVBNSZcMDAwXHUwMjREXDAwMFwwMDBcMDAwSVx1MDI1MVx1MDI1NVx1MDI1OSIrCisgICAgICAgICJcdTAyNURcdTAyNjFcdTAyNjVcdTAyNjlcdTAyNkRcdTAyNzFcdTAyNzVcdTAwODlcdTAyNEQ5XDAzNSFJXHUwMjUxXHUwMjU1IisKKyAgICAgICAgIlx1MDI1OVx1MDI1RFx1MDI2MVx1MDI2NVx1MDI2OVx1MDI2RFx1MDI3MVx1MDI3NVx1QTVBNVwwMzFcMDAwXHUwMjdBXHVBNUE1IisKKyAgICAgICAgIlwwMjdcMDAwXHUwMjgzXHUwMjhGXHUwMjk5XHUwMjlFXDAwMFx1MDJBN1x1MDJCM1x1MDJCRFwwMDBcdTAyQzJcdTAyQzkiKworICAgICAgICAiXHUwMkNEXHUwMkNEXHUwMkNEXHUwMEU1XHUwMkQxZWV1fVwwMDBcdTAwQ0RcdTAyRDZcMDAwXDAwMFx1MDJERFx1MDJFMSIrCisgICAgICAgICJcdTAyNzlcdTAyNzlcdTAyNzlcMDAwXDAwMFx1MDJFNlx1MDJFRlx1MDJGQVwwMDBcdTAwOTVcMDAwXHU0QzE5XDAwMFx1MDA5NSIrCisgICAgICAgICJcMDAwXHU0QzFEXHU0QzIyXHUwMzAxXHUwMjk5XDAwMFx1MDMwNVx1MDJGMVx1MDJDNVwwMDBcdTAyRTk9XHUwMzA5XHUwMzBEIisKKyAgICAgICAgIlx1MDMxMVx1MDMxNW1cdUE1QTVcMDMxXDAwMFx1MDMxQlx1MDMyN1x1MDMzM1x1MDMzRlx1MDM0Qlx1MDM1N1x1MDM2MyIrCisgICAgICAgICJcdTAzNkZcdTAzN0JcdTAzODdcdTAzOTNcdTAzOUZCZVx1MDNBQVx1MDNCM1x1MDNCRVx1MDNDMVx1MDNDNlx1MDNDRlx1MDNEOCIrCisgICAgICAgICJcdTAzRUVcdTAzRjFcdTAzRjZcdTAzRkZ1XHUwMjk5XHUwMDkxXHUwMkU5bVx1MDQwQVx1MDQxM1x1MDQxRVx1MDQyMVx1MDQyNiIrCisgICAgICAgICJcdTA0MkZcdTA0MzhcdTA0NEVcdTAxMzlcdTA0NTZcdTA0NUZ9XHUwMjg5XHUwMEE5XHUwNDY5XHVBNUE1XDAzMlwwMDAiKworICAgICAgICAiXHU0QzJBXHU0QzMyXHVBNUE1XDAyMlwwMDBcdTRDM0FcdUE1QTVcMDM2XDAwMFx1NEM0Mlx1NEM0QVx1NEM1Mlx1QTVBNSIrCisgICAgICAgICJcMDI0XDAwMFx1NEM1QVx1QTVBNVwwMDRcMDAwXHU0QzYyXDAwMFwwMDBcdTRDNkFcdUE1QTVcMDI3XDAwMFx1NEM3MlwwMDAiKworICAgICAgICAiXHU0QzdBXHVBNUE1XDAwNVwwMDBcdTA0NkVcdTA0NzdcMDAwXHUwNDgyXHUwNDhCXHVBNUE1XDAyMFwwMDBcdTRDODJcMDAwIisKKyAgICAgICAgIlwwMDBcdTRDOEFcMDAwXDAwMFx1NEM5MlwwMDBcdTRDOUFcdUE1QTVcMDI2XDAwMFx1NENBMlwwMDBcdTRDQUFcdUE1QTUiKworICAgICAgICAiXDAxMlwwMDBcdTRDQjJcdTRDQkFcdTRDQzJcdTRDQ0FcdTRDRDJcMDAwXDAwMFx1NENEQVx1NENFMlwwMDBcMDAwXHU0Q0VBIisKKyAgICAgICAgIlx1NENGMlx1QTVBNVwwMDZcMDAwXHU0Q0ZBXHU0RDAyXDAwMFwwMDBcdTREMEFcdTREMTJcMDAwXDAwMFx1NEQxQVx1NEQyMiIrCisgICAgICAgICJcdUE1QTVcMDQyXDAwMFx1NEQyQVx1NEQzMlx1NEQzQVx1NEQ0Mlx1QTVBNVwwMjBcMDAwXHU0RDRBXHU0RDUyXHU0RDVBIisKKyAgICAgICAgIlx1NEQ2Mlx1QTVBNVwwMDZcMDAwXHU0RDZBXHU0RDcyXHU0RDdBXHU0RDgyXHVBNUE1XDAzM1wwMDBcdTREODlcdTREOEQiKworICAgICAgICAiXHVBNUE1XDAyNVwwMDA5XDAzNSFJXHUwMjUxXHUwMjU1XHUwMjU5XHUwMjVEXHUwMjYxXHUwNDk2XHUwNDlFXHUwNEE2IisKKyAgICAgICAgIlx1MDRBRVx1MDRCNlx1MDRCRVx1MDRDNlx1MDRDRVx1MDRENlx1MDRERVx1MDRFNlx1MDRFRlx1MDRGQlx1MDUwN1x1MDUxMyIrCisgICAgICAgICJcdTA1MUZcdTA1MkJcdTA1MzdcdTA1NDNcdTA1NEZcdTA1NThcdTA1NkNcdTA1ODBcdTA1OTRcdTA1QThcdTA1QkNcdTA1RDAiKworICAgICAgICAiXHUwNUU0XHUwNUY4XHUwNjBDXHUwNjIwXHUwNjM2XHUwNjNFXHUwNjQ2XHUwNjRFXHUwNjU2XHUwNjVFXHUwNjY2XHUwNjZFIisKKyAgICAgICAgIlx1MDY3Nlx1MDY3Rlx1MDY4Qlx1MDY5N1x1MDZBM1x1MDZBRlx1MDZCQlx1MDZDN1x1MDZEM1x1MDZERlx1MDZFQlx1MDZGNyIrCisgICAgICAgICJcdTA3MDNcdTA3MEZcdTA3MUJcdTA3MjdcdTA3MzNcdTA3M0ZcdTA3NEJcdTA3NTdcdTA3NjNcdTA3NkZcdTA3N0JcdTA3ODciKworICAgICAgICAiXHUwNzkzXHUwNzlGXHUwN0FCXHUwN0I3XHUwN0MzXHUwN0NGXHUwN0RCXHUwN0U3XHUwN0YzXHUwN0ZGXHUwODBCXHUwODE3IisKKyAgICAgICAgIlx1MDgyM1x1MDgyRlx1MDgzOVx1MDMwMVx1MDI5OVx1MDA5MVx1MDJGMVx1MDJDNVx1MDgzRFx1MDJDRGVpXHUwODQxdSIrCisgICAgICAgICJcdTAyRTlcdTAwQ0RcdTA4NDVcdTAyRERcdTAyRTFcdTAyNzlcdTAyRTVcdTAyRURcdTA4NDlcdTAzQzFcdTA4NERcdTAzRjEiKworICAgICAgICAiXHUwODUxXHUwMDk1XDAyMVx1MDcxMVx1MDI4OVx1MDBBOVx1MDMwNVx1MDc0MVx1MDJDOVx1MDBFNW1xXHUwNzdEfVx1MDQ2OSIrCisgICAgICAgICJcdTAwODk9XHUwN0I5XHUwN0M1XHUwMEVEXHUwMDhEXHUwN0U5XHUwMkI5XHUwNDIxXHUwMEZEXHUwMTM5XHUwMTAxXHUwMEExIisKKyAgICAgICAgIlx1MDI0RFx1QTVBNTRcMDAwXHUwODU1XHVBNUE1XDAyM1wwMDBcdTA4NTlcdUE1QTVcMDE0XDAwMFx1MDg1RFx1MDg2MSIrCisgICAgICAgICJcdTA4NjVcdTA4NjlcdTA4NkRcdTA4NzFcdTA4NzVcdTA4NzlcdTA4N0RcdTA4ODFcdTA4ODVcdTA4ODlcdTA4OERcdTA4OTEiKworICAgICAgICAiXHUwODk1XHUwODk5XHUwODlEXHUwOEExXHUwOEE1XHUwOEE5XHUwOEFEXHUwOEIxXHUwOEI1XHUwOEI5XHUwOEJEXHUwOEMxIisKKyAgICAgICAgIlx1MDhDNVx1MDhDOVx1MDhDRFx1MDhEMVx1MDhENVx1MDhEOVx1MDhERFx1MDhFMVx1MDhFNVx1MDhFOVx1MDhFRFx1MDhGMSIrCisgICAgICAgICJcdTA4RjVcdTA4RjlcdTA4RkRcdTA5MDFcdTA5MDVcdTA5MDlcdTA5MERcdTA5MTFcdTA5MTVcdTA5MTlcdTA5MURcdTA5MjEiKworICAgICAgICAiXHUwOTI1XHUwOTI5XHUwOTJEXHUwOTMxXHUwOTM1XHUwOTM5XHUwOTNEXHUwOTQxXHUwOTQ1XHUwOTQ5XHUwOTREXHUwOTUxIisKKyAgICAgICAgIlx1MDk1NVx1MDk1OVx1MDk1RFx1MDk2MVx1MDk2NVx1MDk2OVx1MDk2RFx1MDk3MVx1MDk3NVx1MDk3OVx1MDk3RFx1MDk4MSIrCisgICAgICAgICJcdTA5ODVcdTA5ODlcdTA5OERcdTA5OTFcdTA5OTVcdTA5OTlcdTA5OURcdTA5QTFcdTA5QTVcdTA5QTlcdTA5QURcdTA5QjEiKworICAgICAgICAiXHUwOUI1XHUwOUI5XHUwOUJEXHUwOUMxXHUwOUM1XHUwOUM5XHUwOUNEXHUwOUQxXHUwOUQ1XHUwOUQ5XHUwOUREXHUwOUUxIisKKyAgICAgICAgIlx1MDlFNVx1MDlFOVx1MDlFRFx1MDlGMVx1MDlGNVx1MDlGOVx1MDlGRFx1MEEwMVx1MEEwNVx1MEEwOVx1MEEwRFx1MEExMSIrCisgICAgICAgICJcdTBBMTVcdTBBMTlcdTBBMURcdTBBMjFcdTBBMjVcdTBBMjlcdTBBMkRcdTBBMzFcdTBBMzVcdTBBMzlcdTBBM0RcdTBBNDEiKworICAgICAgICAiXHUwQTQ1XHUwQTQ5XHUwQTREXHUwQTUxXHUwQTU1XHUwQTU5XHUwQTVEXHUwQTYxXHUwQTY1XHUwQTY5XHUwQTZEXHUwQTcxIisKKyAgICAgICAgIlx1MEE3NVx1MEE3OVx1MEE3RFx1MEE4MVx1MEE4NVx1MEE4OVx1MEE4RFx1MEE5MVx1MEE5NVx1MEE5OVx1MEE5RFx1MEFBMSIrCisgICAgICAgICJcdTBBQTVcdTBBQTlcdTBBQURcdTBBQjFcdTBBQjVcdTBBQjlcdTBBQkRcdTBBQzFcdTBBQzVcdTBBQzlcdTBBQ0RcdTBBRDEiKworICAgICAgICAiXHUwQUQ1XHUwQUQ5XHUwQUREXHUwQUUxXHUwQUU1XHUwQUU5XHUwQUVEXHUwQUYxXHUwQUY1XHUwQUY5XHUwQUZEXHUwQjAxIisKKyAgICAgICAgIlx1MEIwNVx1MEIwOVx1MEIwRFx1MEIxMVx1MEIxNVx1MEIxOVx1MEIxRFx1MEIyMVx1MEIyNVx1MEIyOVx1MEIyRFx1MEIzMSIrCisgICAgICAgICJcdTBCMzVcdTBCMzlcdTBCM0RcdTBCNDFcdTBCNDVcdTBCNDlcdTBCNERcdTBCNTFcdTBCNTVcdTBCNTlcdTBCNURcdTBCNjEiKworICAgICAgICAiXHUwQjY1XHUwQjY5XHUwQjZEXHUwQjcxXHUwQjc1XHUwQjc5XHUwQjdEXHUwQjgxXHUwQjg1XHUwQjg5XHUwQjhEXHUwQjkxIisKKyAgICAgICAgIlx1MEI5NVx1MEI5OVx1MEI5RFx1MEJBMVx1MEJBNVx1MEJBOVx1MEJBRFx1MEJCMVx1QTVBNVwwMTJcMDAwXDAwNVx1QTVBNSIrCisgICAgICAgICI1XDAwMFx1MEJCNVwwMDBcdTA4QjlcdTBCQjlcdTBCQkRcdUE1QTVcMDIxXDAwMFx1NEQ5MlwwMDBcdTREOUFcMDAwXHU0REEyIisKKyAgICAgICAgIlwwMDBcdTREQUFcMDAwXHU0REIyXDAwMFx1NERCQVwwMDBcdTREQzJcMDAwXHU0RENBXDAwMFx1NEREMlwwMDBcdTREREEiKworICAgICAgICAiXDAwMFx1NERFMlwwMDBcdTRERUFcMDAwXDAwMFx1NERGMlwwMDBcdTRERkFcMDAwXHU0RTAyXHVBNUE1XDAwNlwwMDBcdTRFMEEiKworICAgICAgICAiXHU0RTEyXDAwMFx1NEUxQVx1NEUyMlwwMDBcdTRFMkFcdTRFMzJcMDAwXHU0RTNBXHU0RTQyXDAwMFx1NEU0QVx1NEU1MiIrCisgICAgICAgICJcdUE1QTVcMDI2XDAwMFx1NEU1QVx1QTVBNVwwMDZcMDAwXHUwQkMyXHUwQkNBXDAwMFx1NEU2Mlx1QTVBNVwwMTVcMDAwIisKKyAgICAgICAgIlx1NEU2QVwwMDBcdTRFNzJcMDAwXHU0RTdBXDAwMFx1NEU4MlwwMDBcdTRFOEFcMDAwXHU0RTkyXDAwMFx1NEU5QVwwMDAiKworICAgICAgICAiXHU0RUEyXDAwMFx1NEVBQVwwMDBcdTRFQjJcMDAwXHU0RUJBXDAwMFx1NEVDMlwwMDBcMDAwXHU0RUNBXDAwMFx1NEVEMiIrCisgICAgICAgICJcMDAwXHU0RURBXHVBNUE1XDAwNlwwMDBcdTRFRTJcdTRFRUFcMDAwXHU0RUYyXHU0RUZBXDAwMFx1NEYwMlx1NEYwQVwwMDAiKworICAgICAgICAiXHU0RjEyXHU0RjFBXDAwMFx1NEYyMlx1NEYyQVx1QTVBNVwwMjZcMDAwXHU0RjMyXDAwMFwwMDBcdTRGM0FcdTRGNDJcdTRGNEEiKworICAgICAgICAiXHU0RjUyXDAwMFwwMDBcMDAwXHU0RjVBXHVBNUE1XDAyMlwwMDBcdTBCRDFcdTBCRDVcdTBCRDlcdTBCRERcdTBCRTFcdTBCRTUiKworICAgICAgICAiXHUwQkU5XHUwQkVEXHUwQkYxXHUwQkY1XHUwQkY5XHUwQkZEXHUwQzAxXHUwQzA1XHUwQzA5XHUwQzBEXHUwQzExXHUwQzE1IisKKyAgICAgICAgIlx1MEMxOVx1MEMxRFx1MEMyMVx1MEMyNVx1MEMyOVx1MEMyRFx1MEMzMVx1MEMzNVx1MEMzOVx1MEMzRFx1MEM0MVx1MEM0NSIrCisgICAgICAgICJcdTBDNDlcdTBDNERcdTBDNTFcdTBDNTVcdTBDNTlcdTBDNURcdTBDNjFcdTBDNjVcdTBDNjlcdTBDNkRcdTBDNzFcdTBDNzUiKworICAgICAgICAiXHUwQzc5XHUwQzdEXHUwQzgxXHUwQzg1XHUwQzg5XHUwQzhEXHUwQzkxXHUwQzk1XHUwQzk5XHUwQzlEXHUwQ0ExXHUwQ0E1IisKKyAgICAgICAgIlx1MENBOVx1MENBRFx1MENCMVx1MENCNVx1MENCOVx1MENCRFx1MENDMVx1MENDNVx1MENDOVx1MENDRFx1MENEMVx1MENENSIrCisgICAgICAgICJcdTBDRDlcdTBDRERcdTBDRTFcdTBDRTVcdTBDRTlcdTBDRURcdTBDRjFcdTBDRjVcdTBDRjlcdTBDRkRcdTBEMDFcdTBEMDUiKworICAgICAgICAiXHUwRDA5XHUwRDBEXHUwRDExXHUwRDE1XHUwRDE5XHUwRDFEXHUwRDIxXHUwRDI1XHUwRDI5XHUwRDJEXHUwRDMxXHUwRDM1IisKKyAgICAgICAgIlx1MEQzOVx1MEQzRFx1MEQ0MVx1MEQ0NVwwMDBcMDAwXDAwMFx1MDg1RFx1MDg3NVx1MEQ0OVx1MEQ0RFx1MEQ1MVx1MEQ1NSIrCisgICAgICAgICJcdTBENTlcdTBENURcdTA4NkRcdTBENjFcdTBENjVcdTBENjlcdTBENkRcdTA4N0RcdTBENzNcdTBEN0ZcdTBEOEJcdTBEOTciKworICAgICAgICAiXHUwREEzXHUwREFGXHUwREJCXHUwREM3XHUwREQzXHUwRERGXHUwREVCXHUwREY3XHUwRTAzXHUwRTBGXHUwRTE4XHUwRTJDIisKKyAgICAgICAgIlx1MEU0MFx1MEU1NFx1MEU2OFx1MEU3Q1x1MEU5MFx1MEVBNFx1MEVCOFx1MEVDQ1x1MEVFMFx1MEVGNFx1MEYwOFx1MEYxQyIrCisgICAgICAgICJcdTBGMzBcMDAwXDAwMFwwMDBcdTBGNDdcdTBGNTNcdTBGNUZcdTBGNkJcdTBGNzdcdTBGODNcdTBGOEZcdTBGOUJcdTBGQTciKworICAgICAgICAiXHUwRkIzXHUwRkJGXHUwRkNCXHUwRkQ3XHUwRkUzXHUwRkVGXHUwRkZCXHUxMDA3XHUxMDEzXHUxMDFGXHUxMDJCXHUxMDM3IisKKyAgICAgICAgIlx1MTA0M1x1MTA0Rlx1MTA1Qlx1MTA2N1x1MTA3M1x1MTA3Rlx1MTA4Qlx1MTA5N1x1MTBBM1x1MTBBRlx1MTBCQlx1MTBDNyIrCisgICAgICAgICJcdTEwRDNcdTEwREZcdTEwRUJcdUE1QTVcMDM0XDAwMFx1MEJEMVx1MEJERFx1MEJFOVx1MEJGMVx1MEMxMVx1MEMxNVx1MEMyMSIrCisgICAgICAgICJcdTBDMjlcdTBDMkRcdTBDMzVcdTBDMzlcdTBDM0RcdTBDNDFcdTBDNDVcdTBFMUVcdTBFMzJcdTBFNDZcdTBFNUFcdTBFNkUiKworICAgICAgICAiXHUwRTgyXHUwRTk2XHUwRUFBXHUwRUJFXHUwRUQyXHUwRUU2XHUwRUZBXHUwRjBFXHUwQzQ2XHVBNUE1XDAwNFwwMDBcdTA4NUQiKworICAgICAgICAiXHUwODc1XHUwRDQ5XHUwRDREXHUwRjc5XHUwRjg1XHUwRjkxXHUwODg5XHUwRkE5XHUwOEI5XHUwOTgxXHUwOUIxXHUwOUFEIisKKyAgICAgICAgIlx1MDk4NVx1MEFGNVx1MDhEOVx1MDk3OVx1MTAxNVx1MTAyMVx1MTAyRFx1MTAzOVx1MTA0NVx1MTA1MVx1MTA1RFx1MTA2OSIrCisgICAgICAgICJcdTEwRjVcdTEwRjlcdTA4RjFcdTEwRkRcdTExMDFcdTExMDVcdTExMDlcdTExMERcdTEwRDVcdTExMTFcdTExMTVcdTBENTEiKworICAgICAgICAiXHUwRDU1XHUwRDU5XHUxMTE5XHUxMTFEXHUxMTIxXHUxMTI1XHUxMDhEXHUxMDk5XHUxMEE1XHUxMEIxXHUxMEJEXHUxMTI5IisKKyAgICAgICAgIlx1QTVBNVwwMTdcMDAwXHUxMTJFXHUxMTM2XHUxMTNFXHUxMTQ2XHUxMTRFXHUxMTU2XHUxMTVFXHUxMTY2XHUxMTZFXHUxMTc3IisKKyAgICAgICAgIlx1MTE4M1x1MTE4Rlx1QTVBNVwwMDRcMDAwXHUxMTk5XHUxMTlEXHUxMUExXHUxMUE1XHUxMUE5XHUxMUFEXHUxMUIxXHUxMUI1IisKKyAgICAgICAgIlx1MTFCOVx1MTFCRFx1MTFDMVx1MTFDNVx1MTFDOVx1MTFDRFx1MTFEMVx1MTFENVx1MTFEOVx1MTFERFx1MTFFMVx1MTFFNSIrCisgICAgICAgICJcdTExRTlcdTExRURcdTExRjFcdTExRjVcdTExRjlcdTExRkRcdTEyMDFcdTEyMDVcdTEyMDlcdTEyMERcdTEyMTFcdTEyMTUiKworICAgICAgICAiXHUxMjE5XHUxMjFEXHUxMjIxXHUxMjI1XHUxMjI5XHUxMjJEXHUxMjMxXHUxMjM1XHUxMjM5XHUxMjNEXHUxMjQxXHUxMjQ1IisKKyAgICAgICAgIlx1MTI0OVx1MTI0RFx1MTI1MVwwMDBcdTEyNTRcdTEyNkNcdTEyODBcdTEyOUJcdTEyQTRcdTEyQkZcdTEyQ0JcdTEyRDQiKworICAgICAgICAiXHUxMkYwXHUxMzA3XHUxMzEzXHUxMzFGXHUxMzI4XHUxMzNDXHUxMzUwXHUxMzY0XHUxMzc4XHUxMzhDXHUxM0EwXHUxM0I0IisKKyAgICAgICAgIlx1MTNEMlx1MTNEOFx1MTNGNFx1MTQxMFx1MTNFMFx1MTQyOFx1MTQ0NFx1MTQ2MFx1MTQ3N1x1MTQ4M1x1MTQ4Q1x1MTRBMCIrCisgICAgICAgICJcdTE0QjRcdTE0Q0NcdTE0RTdcdTE0RjNcdTE0RkNcdTE1MTNcdTE1MUZcdTE0M0FcdTE1MkFcdTE1MzNcdTE1M0ZcdTE1NDgiKworICAgICAgICAiXHUxNTY0XHUxNTc4XHUxNTkwXHUxNUFDXHUxNUMzXHUxNUNGXHUxNUQ4XHUxNUY0XHUxNjA4XHUxNjI3XHUxNjMwXHUxNjRCIisKKyAgICAgICAgIlx1MTY1NFx1MTY2Qlx1MTY3NFx1MTY4OFx1MTZBMFx1MTZCNFx1MTZDQ1x1MTZFMlx1MTZFOFx1MTcwM1x1MTcwRlx1MTcxOCIrCisgICAgICAgICJcdTE3MkZcdTE3M0JcdTE3NDdcdTE3NTBcdTE3NjhcdTE3N0VcdTE3ODRcdTE3QTNcdTE3QUNcdTEzRkNcdTE3QzRcdTE3REIiKworICAgICAgICAiXHUxN0U3XHUxN0YwXHUxODA2XHUxODBDXHUxODIwXHUxODNBXHUxODQwXHUxNDFCXHUxODVFXHUxODY2XHUxODZFXHUxODc2IisKKyAgICAgICAgIlx1MTg3RVx1MTg4Nlx1MTg4RVx1MTg5Nlx1MTg5RVx1MThBNlx1MThBRlx1MThCQlx1MThDN1x1MThEM1x1MThERlx1MThFQiIrCisgICAgICAgICJcdTE4RjdcdTE5MDNcdTE5MEZcdTE5MUJcdTE5MjdcdTE5MzNcdTE5M0ZcdTE5NEJcdTE5NTdcdTE5NjNcdTE5NkVcdTE5NzYiKworICAgICAgICAiXHUxOTdGXHUxOThBXHUxOTkyXHVBNUE1XDAwNFwwMDBcdTE5OUFcdTE5QTJcdTE5QUFcdTE5QjJcdTE5QjhcdTE5Q0VcdTE5RDYiKworICAgICAgICAiXHUxOURFXHUxOUU2XHUxOUVFXHUxOUY2XHUwMkZFXHUxOUZFXHUxQTA3XHUxQTEwXHUxQTI2XHUxQTJFXHUxQTM2XHUxQTNFIisKKyAgICAgICAgIlx1MUE0Nlx1MUE0RVx1MUE1Nlx1MUE1Rlx1MUE2Qlx1MUE3N1x1MUE4M1x1MUE4RVx1MUE5Nlx1MUE5RVx1MUFBNlx1MUFBRSIrCisgICAgICAgICJcdTFBQjZcdTFBQkVcdTFBQzZcdTFBQ0VcdTFBRDZcdTFBREZcdTFBRUJcdTFBRTJcdTFBRjdcdTFCMDNcdTFCMEZcdTFCMDYiKworICAgICAgICAiXHUxQjFCXHUxQjI3XHUxQjMwXHUxOTY2XHUxQjQ3XHUxQjUzXHUxQjVGXHUxQjZCXHUxQjc0XHUxQjhDXHUxQkFBXHUwMDhBIisKKyAgICAgICAgIlx1MUJCMlx1MUJCQVx1MUJDMlx1MUJDQVx1MUJEMlx1MUJEQVx1MUJFMlx1MUJFQVx1MUJGMlx1MUJGQVx1MUMwMlx1MUMwQSIrCisgICAgICAgICJcdTFDMTJcdTFDMUFcdTFDMjJcdTFDMkFcdTFDMzBcdTFDNDZcdTFDNEVcdTFDNTZcdTFDNUNcdTFDNzNcdTFDN0VcdTFDODYiKworICAgICAgICAiXHUxQzhFXHUxQzk2XHUxQzlFXHUxQ0E2XHUxQ0FFXHUxQ0I2XHUxQTkyXHUxQ0JFXHUxQ0M3XHUxQ0QyXHUxQ0RBXHUxQ0UzIisKKyAgICAgICAgIlx1MUNFRlx1MUNGQVx1MUQwMFx1MUQxN1x1MUQyMlx1MUQyQVx1MUQzMlx1MUQzQVwwMDBcMDAwXHUxRDQyXHUxRDRBXHUxRDUyIisKKyAgICAgICAgIlx1MUQ1QVx1MUQ2Mlx1MUQ2QVx1MUQ3Mlx1MUQ3QVx1MUQ4Mlx1MUQ4Qlx1MUQ5N1x1MURBM1x1MURBRlx1MURCQlx1MURDNyIrCisgICAgICAgICJcdTFERDNcdTFEREZcdTFERUJcdTFERjdcdTFFMDNcdTFFMEZcdTFFMUJcdTFFMjdcdTFFMzNcdTFFM0ZcdTFFNEJcdTFFNTciKworICAgICAgICAiXHUxRTYzXHUxRTZGXHUxRTdCXHUxRTg3XDAwMFx1NEY2MVx1NEY2NVx1NEY2OVx1NEY2RFx1NEY3MVx1NEY3NVx1NEY3OSIrCisgICAgICAgICJcdTRGN0RcdTRGODFcdTRGODVcdTRGODlcdTRGOERcdTRGOTFcdTRGOTVcdTRGOTlcdTRGOURcdTRGQTFcdTRGQTVcdTRGQTkiKworICAgICAgICAiXHU0RkFEXHU0RkIxXHU0RkI1XHU0RkI5XHU0RkJEXHU0RkMxXHU0RkM1XHU0RkM5XHU0RkNEXHU0RkQxXHU0RkQ1XHU0RkQ5IisKKyAgICAgICAgIlx1NEZERFx1NEZFMVx1NEZFNVx1NEZFOVx1NEZFRFx1NEZGMVx1NEZGNVx1NEZGOVx1NEZGRFx1NTAwMVx1NTAwNVx1NTAwOSIrCisgICAgICAgICJcdTUwMERcdTUwMTFcdTUwMTVcdTUwMTlcdTUwMURcdTUwMjFcdTUwMjVcdTUwMjlcdTUwMkRcdTUwMzFcdTUwMzVcdTUwMzkiKworICAgICAgICAiXHU1MDNEXHU1MDQxXHU1MDQ1XHU1MDQ5XHU1MDREXHU1MDUxXHU1MDU1XHU1MDU5XHU1MDVEXHU1MDYxXHU1MDY1XHU1MDY5IisKKyAgICAgICAgIlx1NTA2RFx1NTA3MVx1NTA3NVx1NTA3OVx1NTA3RFx1NTA4MVx1NTA4NVx1NTA4OVx1NTA4RFx1NTA5MVx1NTA5NVx1NTA5OSIrCisgICAgICAgICJcdTUwOURcdTUwQTFcdTUwQTVcdTUwQTlcdTUwQURcdTUwQjFcdTUwQjVcdTUwQjlcdTUwQkRcdTUwQzFcdTUwQzVcdTUwQzkiKworICAgICAgICAiXHU1MENEXHU1MEQxXHU1MEQ1XHU1MEQ5XHU1MEREXHU1MEUxXHU1MEU1XHU1MEU5XHU1MEVEXHU1MEYxXHU1MEY1XHU1MEY5IisKKyAgICAgICAgIlx1NTBGRFx1NTEwMVx1NTEwNVx1NTEwOVx1NTEwRFx1NTExMVx1NTExNVx1NTExOVx1NTExRFx1NTEyMVx1NTEyNVx1NTEyOSIrCisgICAgICAgICJcdTUxMkRcdTUxMzFcdTUxMzVcdTUxMzlcdTUxM0RcdTUxNDFcdTUxNDVcdTUxNDlcdTUxNERcdTUxNTFcdTUxNTVcdTUxNTkiKworICAgICAgICAiXHU1MTVEXHU1MTYxXHU1MTY1XHU1MTY5XHU1MTZEXHU1MTcxXHU1MTc1XHU1MTc5XHU1MTdEXHU1MTgxXHU1MTg1XHU1MTg5IisKKyAgICAgICAgIlx1NTE4RFx1NTE5MVx1NTE5NVx1NTE5OVx1NTE5RFx1NTFBMVx1NTFBNVx1NTFBOVx1NTFBRFx1NTFCMVx1NTFCNVx1NTFCOSIrCisgICAgICAgICJcdTUxQkRcdTUxQzFcdTUxQzVcdTUxQzlcdTUxQ0RcdTUxRDFcdTUxRDVcdTUxRDlcdTUxRERcdTUxRTFcdTUxRTVcdTUxRTkiKworICAgICAgICAiXHU1MUVEXHU1MUYxXHU1MUY1XHU1MUY5XHU1MUZEXHU1MjAxXHU1MjA1XHU1MjA5XHU1MjBEXHU1MjExXHU1MjE1XHU1MjE5IisKKyAgICAgICAgIlx1NTIxRFx1NTIyMVx1NTIyNVx1NTIyOVx1NTIyRFx1NTIzMVx1NTIzNVx1NTIzOVx1NTIzRFx1NTI0MVx1NTI0NVx1NTI0OSIrCisgICAgICAgICJcdTUyNERcdTUyNTFcdTUyNTVcdTUyNTlcdTUyNURcdTUyNjFcdTUyNjVcdTUyNjlcdTUyNkRcdTUyNzFcdTUyNzVcdTUyNzkiKworICAgICAgICAiXHU1MjdEXHU1MjgxXHU1Mjg1XHU1Mjg5XHU1MjhEXHU1MjkxXHU1Mjk1XHU1Mjk5XHU1MjlEXHU1MkExXHU1MkE1XHU1MkE5IisKKyAgICAgICAgIlx1NTJBRFx1NTJCMVx1NTJCNVx1NTJCOVx1NTJCRFx1NTJDMVx1NTJDNVx1NTJDOVx1NTJDRFx1NTJEMVx1NTJENVx1NTJEOSIrCisgICAgICAgICJcdTUyRERcdTUyRTFcdTUyRTVcdTUyRTlcdTUyRURcdTUyRjFcdTUyRjVcdTUyRjlcdTUyRkRcdTUzMDFcdTUzMDVcdTUzMDkiKworICAgICAgICAiXHU1MzBEXHU1MzExXHU1MzE1XHU1MzE5XHU1MzFEXHU1MzIxXHU1MzI1XHU1MzI5XHU1MzJEXHU1MzMxXHU1MzM1XHU1MzM5IisKKyAgICAgICAgIlx1NTMzRFx1NTM0MVx1NTM0NVx1NTM0OVx1NTM0RFx1NTM1MVx1NTM1NVx1NTM1OVx1NTM1RFx1NTM2MVx1NTM2NVx1NTM2OSIrCisgICAgICAgICJcdTUzNkRcdTUzNzFcdTUzNzVcdTUzNzlcdTUzN0RcdTUzODFcdTUzODVcdTUzODlcdTUzOERcdTUzOTFcdTUzOTVcMDAwIisKKyAgICAgICAgIlwwMDBcdTUzOTlcMDAwXHU1MzlEXDAwMFwwMDBcdTUzQTFcdTUzQTVcdTUzQTlcdTUzQURcdTUzQjFcdTUzQjVcdTUzQjkiKworICAgICAgICAiXHU1M0JEXHU1M0MxXHU1M0M1XDAwMFx1NTNDOVwwMDBcdTUzQ0RcMDAwXDAwMFx1NTNEMVx1NTNENVwwMDBcMDAwXDAwMCIrCisgICAgICAgICJcdTUzRDlcdTUzRERcdTUzRTFcdTUzRTVcdUE1QTVcMDIyXDAwMFx1MUU5Mlx1MUU5QVx1MUVBMlx1MUU5N1x1MUVBQlx1MUVCNiIrCisgICAgICAgICJcdTFFQjZcdUE1QTVcMDE0XDAwMFx1MUVCRVx1MUVDNlx1MUVDRVx1MUVENlx1MUVERVx1QTVBNVwwMDVcMDAwXHU1M0VBIisKKyAgICAgICAgIlwwMDBcdTUzRjJcdTFFRTVcdTAzMDlcdTAzMTVcdTFFRTlcdTFFRURcdTFFRjFcdTFFRjVcdTFFRjlcdTFFRkRcdTAyNjUiKworICAgICAgICAiXHU1M0ZBXHU1NDAyXHU1NDBCXHU1NDE3XHU1NDIyXHU1NDJBXHU1NDMyXHU1NDNBXHU1NDQyXHU1NDRBXHU1NDUyXHU1NDVBIisKKyAgICAgICAgIlx1NTQ2MlwwMDBcdTU0NkFcdTU0NzJcdTU0N0FcdTU0ODJcdTU0OEFcMDAwXHU1NDkyXDAwMFx1NTQ5QVx1NTRBMlwwMDAiKworICAgICAgICAiXHU1NEFBXHU1NEIyXDAwMFx1NTRCQVx1NTRDMlx1NTRDQVx1NTREMlx1NTREQVx1NTRFMlx1NTRFQVx1NTRGMlx1NTRGQSIrCisgICAgICAgICJcdTFGMDJcdTFGMDlcdTFGMDlcdUE1QTVcMDA0XHUxRjBEXHVBNUE1XDAwNFx1MUYxMVx1QTVBNVwwMDRcdTFGMTVcdUE1QTUiKworICAgICAgICAiXDAwNFx1MUYxOVx1QTVBNVwwMDRcdTFGMURcdUE1QTVcMDA0XHUxRjIxXHVBNUE1XDAwNFx1MUYyNVx1QTVBNVwwMDRcdTFGMjkiKworICAgICAgICAiXHVBNUE1XDAwNFx1MUYyRFx1QTVBNVwwMDRcdTFGMzFcdUE1QTVcMDA0XHUxRjM1XHVBNUE1XDAwNFx1MUYzOVx1MUYzRCIrCisgICAgICAgICJcdTFGM0RcdTFGNDFcdTFGNDFcdTFGNDVcdTFGNDVcdTFGNDlcdTFGNDlcdTFGNERcdTFGNERcdTFGNTFcdTFGNTFcdUE1QTUiKworICAgICAgICAiXDAwNFx1MUY1NVx1QTVBNVwwMDRcdTFGNTlcdUE1QTVcMDA0XHUxRjVEXHVBNUE1XDAwNFx1MUY2MVx1MUY2NVx1MUY2NSIrCisgICAgICAgICJcdUE1QTVcMDA0XHUxRjY5XHUxRjZFXHUxRjZFXHVBNUE1XDAwNFx1MUY3NVx1QTVBNVwwMDRcdTFGNzlcdTFGN0RcdTFGN0QiKworICAgICAgICAiXHUxRjgyXHUxRjgyXHVBNUE1IVwwMDBcdUE1QTVcMDA0XHUxRjg5XHUwMTgxXHUwMTgxXHUxRjhEXHUxRjhEXHUxRjkxIisKKyAgICAgICAgIlx1MUY5MVx1MDE4Mlx1MUY5NVx1MUY5NVx1MUY5OVx1MUY5OVx1MUY5RFx1MUY5RFx1QTVBNVwwMDRcdTFGQTFcdTFGQTUiKworICAgICAgICAiXHUxRkE1XHUxRkFCXHUxRkFCXHUxRkI3XHUxRkI3XHUxRkMzXHUxRkMzXHUxRkNGXHUxRkNGXHUxRkRCXHUxRkRCXHUxRkU3IisKKyAgICAgICAgIlx1MUZFN1x1MUZGM1x1MUZGM1x1MUZGM1x1MUZGRlx1MUZGRlx1MUZGRlx1QTVBNVwwMDRcdTIwMDlcdTIwMEZcdTIwMUIiKworICAgICAgICAiXHUyMDI3XHUxRkZGXHUyMDMzXHUyMDNFXHUyMDQ2XHUyMDRFXHUyMDU2XHUyMDVFXHUyMDY2XHUyMDZFXHUyMDc2XHUyMDdFIisKKyAgICAgICAgIlx1MjA4Nlx1MjA4RVx1MjA5Nlx1MjA5RVx1MjBBNlx1MjBBRVx1MjBCNlx1MjBCRVx1MjBDNlx1MjBDMlx1MjBDRVx1MjBENiIrCisgICAgICAgICJcdTIwREVcdTIwRTZcdTIwRUVcdTIwRjZcdTIwRkVcdTIxMDZcdTIxMEVcdTIxMTZcdTIxMUVcdTIxMjZcdTIxMkVcdTIxMzYiKworICAgICAgICAiXHUyMTNFXHUyMTQ2XHUyMTRFXHUyMTU2XHUyMTVFXHUyMTY2XHUyMTZFXHUyMTc2XHUyMTdFXHUyMTg2XHUyMThFXHUyMTk2IisKKyAgICAgICAgIlx1MjE5RVx1MjFBNlx1MjFBRVx1MjFCNlx1MjFCRVx1MjFDNlx1MjFDRVx1MjFENlx1MjFERVx1MjFFNlx1MjFFRVx1MjFGNiIrCisgICAgICAgICJcdTIxRkVcdTIyMDZcdTIyMEVcdTIyMTZcdTIyMUVcdTIyMjZcdTIyMkVcdTIyMzZcdTIwQ0FcdTIwRDJcdTIyM0VcdTIyNDYiKworICAgICAgICAiXHUyMDJFXHUyMjRFXHUyMjU2XHUyMjVFXHUyMjY2XHUyMjZFXHUyMjc2XHUyMjdFXHUyMjg2XHUyMjhFXHUyMjk2XHUyMEJBIisKKyAgICAgICAgIlx1MjI5RVx1MjJBNlx1MjIzMlx1MjJBRVx1MjI5QVx1MjJCNlx1MjJCRVx1MjJDNlx1MjJDRlx1MjJEQlx1MjJFN1x1MjJGMyIrCisgICAgICAgICJcdTIyRkZcdTIzMEJcdTIzMTdcdTIzMjNcdTIwMjdcdTIzMkZcdTFGRkZcdTIwMzNcdTIzM0FcdTIzNDJcdTIwNTZcdTIzNEEiKworICAgICAgICAiXHUyMDVFXHUyMDY2XHUyMzUyXHUyMzVBXHUyMDg2XHUyMzYyXHUyMDhFXHUyMDk2XHUyMzZBXHUyMzcyXHUyMEE2XHUyMzdBIisKKyAgICAgICAgIlx1MjBBRVx1MjBCNlx1MjE5Nlx1MjE5RVx1MjFCNlx1MjFCRVx1MjFDNlx1MjFFNlx1MjFFRVx1MjFGNlx1MjFGRVx1MjIxRSIrCisgICAgICAgICJcdTIyMjZcdTIyMkVcdTIzODJcdTIyM0VcdTIzOEFcdTIzOTJcdTIyNjZcdTIzOUFcdTIyNkVcdTIyNzZcdTIyQzZcdTIzQTIiKworICAgICAgICAiXHUyM0FBXHUyMjMyXHUyM0IyXHUyMkFFXHUyMjlBXHUyMDBGXHUyMDFCXHUyM0JCXHUyMDI3XHUyM0M3XHUyMDNFXHUyMDQ2IisKKyAgICAgICAgIlx1MjA0RVx1MjA1Nlx1MjNEMlx1MjA2RVx1MjA3Nlx1MjA3RVx1MjA4Nlx1MjNEQVx1MjBBNlx1MjBCRVx1MjBDNlx1MjBDMiIrCisgICAgICAgICJcdTIwQ0VcdTIwRDZcdTIwRTZcdTIwRUVcdTIwRjZcdTIwRkVcdTIxMDZcdTIxMEVcdTIzRTJcdTIxMTZcdTIxMUVcdTIxMjYiKworICAgICAgICAiXHUyMTJFXHUyMTM2XHUyMTNFXHUyMTRFXHUyMTU2XHUyMTVFXHUyMTY2XHUyMTZFXHUyMTc2XHUyMTdFXHUyMTg2XHUyMThFIisKKyAgICAgICAgIlx1MjFBNlx1MjFBRVx1MjFDRVx1MjFENlx1MjFERVx1MjFFNlx1MjFFRVx1MjIwNlx1MjIwRVx1MjIxNlx1MjIxRVx1MjNFQSIrCisgICAgICAgICJcdTIyMzZcdTIwQ0FcdTIwRDJcdTIyM0VcdTIyNEVcdTIyNTZcdTIyNUVcdTIyNjZcdTIzRjJcdTIyN0VcdTIyODZcdTIzRkEiKworICAgICAgICAiXHUyMEJBXHUyMjlFXHUyMkE2XHUyMjMyXHUyMjdBXHUyMDI3XHUyM0M3XHUyMDU2XHUyM0QyXHUyMDg2XHUyM0RBXHUyMEE2IisKKyAgICAgICAgIlx1MjQwMlx1MjEwNlx1MjQwQVx1MjQxMlx1MjQxQVx1MjFFNlx1MjFFRVx1MjIxRVx1MjI2Nlx1MjNGMlx1MjIzMlx1MjI3QSIrCisgICAgICAgICJcdTI0MjNcdTI0MkZcdTI0M0JcdTI0NDZcdTI0NEVcdTI0NTZcdTI0NUVcdTI0NjZcdTI0NkVcdTI0NzZcdTI0N0VcdTI0ODYiKworICAgICAgICAiXHUyNDhFXHUyNDk2XHUyMDIyXHUyNDlFXHUyMDE2XHUyNEE2XHUyMkFBXHUyNEFFXHUyNEI2XHUyNEJFXHUyNEM2XHUyNENFIisKKyAgICAgICAgIlx1MjRENlx1MjRERVx1MjQxMlx1MjRFNlx1MjRFRVx1MjRGNlx1MjRGRVx1MjQ0Nlx1MjQ0RVx1MjQ1Nlx1MjQ1RVx1MjQ2NiIrCisgICAgICAgICJcdTI0NkVcdTI0NzZcdTI0N0VcdTI0ODZcdTI0OEVcdTI0OTZcdTIwMjJcdTI0OUVcdTIwMTZcdTI0QTZcdTIyQUFcdTI0QUUiKworICAgICAgICAiXHUyNEI2XHUyNEJFXHUyNEM2XHUyNENFXHUyNEQ2XHUyNERFXHUyNDEyXHUyNEU2XHUyNEVFXHUyNEY2XHUyNEZFXHUyNENFIisKKyAgICAgICAgIlx1MjRENlx1MjRERVx1MjQxMlx1MjQwQVx1MjQxQVx1MjE0Nlx1MjBFRVx1MjBGNlx1MjBGRVx1MjRDRVx1MjRENlx1MjRERSIrCisgICAgICAgICJcdTIxNDZcdTIxNEVcdTI1MDZcdTI1MDZcdUE1QTVcMDIyXDAwMFx1MjUwRlx1MjUxQlx1MjUxQlx1MjUyN1x1MjUzM1x1MjUzRiIrCisgICAgICAgICJcdTI1NEJcdTI1NTdcdTIwQzdcdTIwQzdcdTI1NjNcdTI1NkZcdTI1N0JcdTI1ODdcdTI1OTNcdTI1OUZcdTI1OUZcdTI1QUIiKworICAgICAgICAiXHUyNUI3XHUyNUI3XHUyNUMzXHUyNUMzXHUyNUNGXHUyNURCXHUyNURCXHUyNUU3XHUyNUYzXHUyNUYzXHUyNUZGXHUyNUZGIisKKyAgICAgICAgIlx1MjYwQlx1MjYxN1x1MjYxN1x1MjYyM1x1MjYyM1x1MjYyRlx1MjYzQlx1MjY0N1x1MjY1M1x1MjY1M1x1MjY1Rlx1MjY2QiIrCisgICAgICAgICJcdTI2NzdcdTI2ODNcdTI2OEZcdTI2OEZcdTI2OUJcdTI2QTdcdTI2QjNcdTI2QkZcdTI2Q0JcdTI2RDdcdTI2RDdcdTI2RTMiKworICAgICAgICAiXHUyNkUzXHUyNkVGXHUyNkVGXHUyNkZCXHUyMENCXHUyNzA3XHUyNzEzXHUyMjM3XHUyMEQzXHUyNzFGXDAwMFwwMDBcdTI3MkIiKworICAgICAgICAiXHUyNzM3XHUyNzQzXHUyNzRGXHUyNzVCXHUyNzY3XHUyNzY3XHUyNzczXHUyNzdGXHUyNzhCXHUyNzk3XHUyNzk3XHUyN0EzIisKKyAgICAgICAgIlx1MjdBRlx1MjdCQlx1MjdDN1x1MjdEM1x1MjdERlx1MjdFQlx1MjdGN1x1MjgwM1x1MjgwRlx1MjgxQlx1MjgyN1x1MjgzMyIrCisgICAgICAgICJcdTI4M0ZcdTI4NEJcdTI4NTdcdTIyOUZcdTI4NjNcdTI4NkZcdTI4N0JcdTI4ODdcdTI4OTNcdTI2OUJcdTI2QjNcdTI4OUYiKworICAgICAgICAiXHUyOEFCXHUyOEI3XHUyOEMzXHUyOENGXHUyOERCXHUyOENGXHUyOEI3XHUyOEU3XHUyOEYzXHUyOEZGXHUyOTBCXHUyOTE3IisKKyAgICAgICAgIlx1MjhEQlx1MjY0N1x1MjVDRlx1MjkyM1x1MjkyRlx1QTVBNShcMDAwXHUyOTNCXHUyOTQ3XHUyOTUwXHUyOTY0XHUyOTc4IisKKyAgICAgICAgIlx1Mjk4Q1x1MjlBMFx1MjlCNFx1MjlDOFx1MjlERlx1MjlFOFx1MkEzNFx1QTVBNVwwMjRcMDAwXHUwMUZBXHUyQTU5XHUyQTVEIisKKyAgICAgICAgIlx1MkE2MVx1MkE2MVx1MDI3MVx1MDI3NVx1MkE2NVx1MkE2OVx1MkE2RFx1MkE3MVx1MkE3NVx1MkE3OVx1MkE3RFx1MkE4MSIrCisgICAgICAgICJcdTJBODVcdTJBODlcdTJBOERcdTJBOTFcdTJBOTVcdTJBOTlcdUE1QTVcMDA0XDAwMFx1QTVBNVwwMDRcdTAyMzZcdTJBNjEiKworICAgICAgICAiXHUyQTYxXHUyQTYxXHUyQTlEXHUyQUExXHUwMUY5XDAwMFx1MkFBNVx1MkFBOVx1MDIzRFx1MDIyRFx1MkE1OVx1MDI3MSIrCisgICAgICAgICJcdTAyNzVcdTJBNjVcdTJBNjlcdTJBNkRcdTJBNzFcdTJBQURcdTJBQjFcdTJBQjVcdTAyNjVcdTJBQjlcdTJBQkRcdTJBQzEiKworICAgICAgICAiXHUwMjZEXDAwMFx1MkFDNVx1MkFDOVx1MkFDRFx1MkFEMVx1QTVBNVwwMDRcMDAwXHUyQUQ2XHUyQURFXHUyMkNFXDAwMCIrCisgICAgICAgICJcdTIyREFcMDAwXHUyMkU2XHUyNDIyXHUyMkYyXHUyNDJFXHUyMkZFXHUyNDNBXHUyMzBBXHUyQUU2XHUyQUVFXHUyQUY2IisKKyAgICAgICAgIlx1MkFGRFx1MkIwMlx1MkIwMlx1MkIwQVx1MkIwQVx1MkIxMlx1MkIxMlx1MkIxQVx1MkIxQVx1QTVBNVwwMDRcdTFGQUEiKworICAgICAgICAiXHUwMTcxXHUwMTcxXHVBNUE1XDAwNFx1MjAzRFx1MkIyMVx1MkIyMVx1QTVBNVwwMDRcdTIwNkRcdUE1QTVcMDA0XHUyMDlEIisKKyAgICAgICAgIlx1QTVBNVwwMDRcdTIwMTVcdUE1QTVcMDA0XHUyMDIxXHVBNUE1XDAwNFx1MjA1MVx1Mjk4NVx1Mjk4NVx1MjJCNVx1MjJCNSIrCisgICAgICAgICJcdTIyQkRcdTIyQkRcdTIzMjlcdTIzMjlcdUE1QTVcMDA0XHUyMEVEXHVBNUE1XDAwNFx1MjQxMVx1QTVBNVwwMDRcdTIxMEQiKworICAgICAgICAiXHVBNUE1XDAwNFx1MjExRFx1QTVBNVwwMDRcdTIxM0RcdUE1QTVcMDA0XHUyMTREXHVBNUE1XDAwNFx1MjE1NVx1QTVBNSIrCisgICAgICAgICJcMDA0XHUyMTY1XHVBNUE1XDAwNFx1MjE3NVx1QTVBNVwwMDRcdTIxQTVcdUE1QTVcMDA0XHUyMUM1XHVBNUE1XDAwNFx1MjFFOSIrCisgICAgICAgICJcdUE1QTVcMDA0XHUyMDJEXHVBNUE1XDAwNFx1MjI0RFx1QTVBNVwwMDRcdTIyN0RcdTAxNzlcdTAxNzlcdTFGQTVcdTFGQTUiKworICAgICAgICAiXHVBNUE1XDAwNFx1MDE4OVx1MkIyN1x1MkIyN1x1MkIzM1x1MkIzM1x1MkIzRlx1MkIzRlx1MkE0Nlx1MkE0Nlx1QTVBNSIrCisgICAgICAgICJcMDA0XDAwMFx1MDIyRFx1MkI0OVx1MkFBRFx1MkFDOVx1MkFDRFx1MkFCMVx1MkI0RFx1MDI3MVx1MDI3NVx1MkFCNVx1MDI2NSIrCisgICAgICAgICJcdTJBOURcdTJBQjlcdTAxRjlcdTAyODVcdTAyNEQ5XDAzNSFJXHUwMjUxXHUwMjU1XHUwMjU5XHUwMjVEXHUwMjYxXHUyQUE5IisKKyAgICAgICAgIlx1MkFBNVx1MkFCRFx1MDI2RFx1MkFDMVx1MDIzRFx1MkFEMVx1MDgzOVx1MDMwMVx1MDI5OVx1MDA5MVx1MDJGMVx1MDJDNSIrCisgICAgICAgICJcdTA4M0RcdTAyQ0RlaVx1MDg0MXVcdTAyRTlcdTAwQ0RcdTA4NDVcdTAyRERcdTAyRTFcdTAyNzlcdTAyRTVcdTAyRUQiKworICAgICAgICAiXHUwODQ5XHUwM0MxXHUwODREXHUwM0YxXHUwODUxXHUwMDk1XHUyQjUxXHUyQUM1XHUyQjU1XHUyQjU5XHUyQTYxXHUyQjVEIisKKyAgICAgICAgIlwwMjFcdTA3MTFcdTAyODlcdTAwQTlcdTAzMDVcdTA3NDFcdTAyQzlcdTAwRTVtcVx1MDc3RH1cdTA0NjlcdTAwODk9XHUwN0I5IisKKyAgICAgICAgIlx1MDdDNVx1MDBFRFx1MDA4RFx1MDdFOVx1MDJCOVx1MDQyMVx1MDBGRFx1MDEzOVx1MDEwMVx1MDBBMVx1MkE2NVx1MkI2MSIrCisgICAgICAgICJcdTJBNjlcdTJCNjVcMDAwXDAwMFx1MkI2OVx1MkE4RFx1MkE5MVx1MkFBMVx1MkI2RFx1MTI1MVx1MTI3OVx1MTVGOVx1MkI3MSIrCisgICAgICAgICJcdTE2MTlcdTEyQ0RcdTJCNzVcdTEzQTVcdTE3NURcdTEzMzFcdTEyNjFcdTExOTlcdTExOURcdTExQTFcdTExQTVcdTExQTkiKworICAgICAgICAiXHUxMUFEXHUxMUIxXHUxMUI1XHUxMUI5XHUxMUJEXHUxMUMxXHUxMUM1XHUxMUM5XHUxMUNEXHUxMUQxXHUxMUQ1XHUxMUQ5IisKKyAgICAgICAgIlx1MTFERFx1MTFFMVx1MTFFNVx1MTFFOVx1MTFFRFx1MTFGMVx1MTFGNVx1MTFGOVx1MTFGRFx1MTIwMVx1MTIwNVx1MTIwOSIrCisgICAgICAgICJcdTEyMERcdTEyMTFcdTEyMTVcdTEyMTlcdTEyMURcdTEyMjFcdTEyMjVcdTEyMjlcdTEyMkRcdTEyMzFcdTEyMzVcdTEyMzkiKworICAgICAgICAiXHUxMjNEXHUxMjQxXHUxMjQ1XHUxMjg1XHUwQkM1XHUwQkNEXHUwQzlEXHUwQkQxXHUwQkQ1XHUwQkQ5XHUwQkREXHUwQkUxIisKKyAgICAgICAgIlx1MEJFNVx1MEJFOVx1MEJFRFx1MEJGMVx1MEJGNVx1MEJGOVx1MEJGRFx1MEMwMVx1MEMwNVx1MEMwOVx1MEMwRFx1MEMxMSIrCisgICAgICAgICJcdTBDMTVcdTBDMTlcdTBDMURcdTBDMjFcdTBDMjVcdTBDMjlcdTBDMkRcdTBDMzFcdTBDMzVcdTBDMzlcdTBDM0RcdTBDNDEiKworICAgICAgICAiXHUwQzQ1XDAwMFwwMDBcMDAwXHUwQzQ5XHUwQzREXHUwQzUxXHUwQzU1XHUwQzU5XHUwQzVEXDAwMFwwMDBcdTBDNjFcdTBDNjUiKworICAgICAgICAiXHUwQzY5XHUwQzZEXHUwQzcxXHUwQzc1XDAwMFwwMDBcdTBDNzlcdTBDN0RcdTBDODFcdTBDODVcdTBDODlcdTBDOERcMDAwIisKKyAgICAgICAgIlwwMDBcdTBDOTFcdTBDOTVcdTBDOTlcMDAwXDAwMFwwMDBcdTJCNzlcdTJCN0RcdTJCODFcMDI2XHUyQjg1XHUyQjg5XHUyQjhEIisKKyAgICAgICAgIlwwMDBcdTJCOTFcdTJCOTVcdTJCOTlcdTJCOURcdTJCQTFcdTJCQTVcdTJCQTlcdUE1QTVcMDIxXDAwMCIKKyAgICAgICAgKTsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29udGVudHMgPSAKKyAgICAgICAgIlx1RkZGRiAgXHUwMzA4YSBcdTAzMDQyMyBcdTAzMDFcdTAzQkMgXHUwMzI3MW8xXHUyMDQ0NDFcdTIwNDQyM1x1MjA0NCIrCisgICAgICAgICI0SUppakxcdTAwQjdsXHUwMEI3XHUwMkJDbnNEWlx1MDMwQ0R6XHUwMzBDZHpcdTAzMENMSkxqbGpOSk5qbmpoXHUwMjY2IisKKyAgICAgICAgInJcdTAyNzlcdTAyN0JcdTAyODF3eSBcdTAzMDYgXHUwMzA3IFx1MDMwQSBcdTAzMjggXHUwMzAzIFx1MDMwQlx1MDI2MyIrCisgICAgICAgICJ4XHUwMjk1IFx1MDM0NVx1MDNCMlx1MDNCOFx1MDNBNVx1MDNDNlx1MDNDMFx1MDNCQVx1MDNDMVx1MDNDMlx1MDU2NVx1MDU4MiIrCisgICAgICAgICJcdTA2MjdcdTA2NzRcdTA2NDhcdTA2NzRcdTA2QzdcdTA2NzRcdTA2NEFcdTA2NzRcdTBFNERcdTBFMzJcdTBFQ0RcdTBFQjIiKworICAgICAgICAiXHUwRUFCXHUwRTk5XHUwRUFCXHUwRUExXHUwRjBCXHUwRkIyXHUwRjcxXHUwRjgwXHUwRkIzXHUwRjcxXHUwRjgwYVx1MDJCRSIrCisgICAgICAgICIgXHUwMzEzIFx1MDM0MiBcdTAzMTRcdTIwMTAgXHUwMzMzLi4uXHUyMDMyXHUyMDMyXHUyMDMyXHUyMDMyXHUyMDMyXHUyMDM1IisKKyAgICAgICAgIlx1MjAzNVx1MjAzNVx1MjAzNVx1MjAzNSEhIFx1MDMwNT8hIT8wNTY3ODkrXHUyMjEyPSgpUnNhL2NhL3NDXHUwMEIwQyIrCisgICAgICAgICJjL29jL3VcdTAxOTBcdTAwQjBGZ0hcdTAxMjdOb1BRU01URUxUTUJlXHUwNUQwXHUwNUQxXHUwNUQyXHUwNUQzMVx1MjA0NCIrCisgICAgICAgICIzMlx1MjA0NDMxXHUyMDQ0NTJcdTIwNDQ1M1x1MjA0NDU0XHUyMDQ0NTFcdTIwNDQ2NVx1MjA0NDYxXHUyMDQ0ODNcdTIwNDQiKworICAgICAgICAiODVcdTIwNDQ4N1x1MjA0NDhJSUlJSUlWVklWSUlWSUlJXDAwMElYWElYSUlpaWlpaWl2dml2aWl2aWlpXDAwMGl4eGl4IisKKyAgICAgICAgImlpbVx1MjIyQlx1MjIyQlx1MjIyQlx1MjIyQlx1MjIyQlx1MjIyRVx1MjIyRVx1MjIyRVx1MjIyRVx1MjIyRTEwMTExMiIrCisgICAgICAgICIxMzE0MTUxNjE3MTgxOTIwKDEpKDIpKDMpKDQpKDUpKDYpKDcpKDgpKDkpKDEwKVwwMDAoMTEpXDAwMCgxMilcMDAwKDEiKworICAgICAgICAiMylcMDAwKDE0KVwwMDAoMTUpXDAwMCgxNilcMDAwKDE3KVwwMDAoMTgpXDAwMCgxOSlcMDAwKDIwKVwwMDAxLjIuMy40IisKKyAgICAgICAgIi41LjYuNy44LjkuMTAuMTEuMTIuMTMuMTQuMTUuMTYuMTcuMTguMTkuMjAuKGEpKGIpKGMpKGQpKGUpKGYpKGcpKGgpKCIrCisgICAgICAgICJpKShqKShrKShsKShtKShuKShvKShwKShxKShyKShzKSh0KSh1KSh2KSh3KSh4KSh5KSh6KUFHS09VV1lcdTZCQ0RcdTlGOUYiKworICAgICAgICAiXHU0RTAwXHU0RTI4XHU0RTM2XHU0RTNGXHU0RTU5XHU0RTg1XHU0RThDXHU0RUEwXHU0RUJBXHU1MTNGXHU1MTY1XHU1MTZCIisKKyAgICAgICAgIlx1NTE4Mlx1NTE5Nlx1NTFBQlx1NTFFMFx1NTFGNVx1NTIwMFx1NTI5Qlx1NTJGOVx1NTMxNVx1NTMxQVx1NTMzOFx1NTM0MSIrCisgICAgICAgICJcdTUzNUNcdTUzNjlcdTUzODJcdTUzQjZcdTUzQzhcdTUzRTNcdTU2RDdcdTU3MUZcdTU4RUJcdTU5MDJcdTU5MEFcdTU5MTUiKworICAgICAgICAiXHU1OTI3XHU1OTczXHU1QjUwXHU1QjgwXHU1QkY4XHU1QzBGXHU1QzIyXHU1QzM4XHU1QzZFXHU1QzcxXHU1RERCXHU1REU1IisKKyAgICAgICAgIlx1NURGMVx1NURGRVx1NUU3Mlx1NUU3QVx1NUU3Rlx1NUVGNFx1NUVGRVx1NUYwQlx1NUYxM1x1NUY1MFx1NUY2MVx1NUY3MyIrCisgICAgICAgICJcdTVGQzNcdTYyMDhcdTYyMzZcdTYyNEJcdTY1MkZcdTY1MzRcdTY1ODdcdTY1OTdcdTY1QTRcdTY1QjlcdTY1RTBcdTY1RTUiKworICAgICAgICAiXHU2NkYwXHU2NzA4XHU2NzI4XHU2QjIwXHU2QjYyXHU2Qjc5XHU2QkIzXHU2QkNCXHU2QkQ0XHU2QkRCXHU2QzBGXHU2QzE0IisKKyAgICAgICAgIlx1NkMzNFx1NzA2Qlx1NzIyQVx1NzIzNlx1NzIzQlx1NzIzRlx1NzI0N1x1NzI1OVx1NzI1Qlx1NzJBQ1x1NzM4NFx1NzM4OSIrCisgICAgICAgICJcdTc0RENcdTc0RTZcdTc1MThcdTc1MUZcdTc1MjhcdTc1MzBcdTc1OEJcdTc1OTJcdTc2NzZcdTc2N0RcdTc2QUVcdTc2QkYiKworICAgICAgICAiXHU3NkVFXHU3N0RCXHU3N0UyXHU3N0YzXHU3OTNBXHU3OUI4XHU3OUJFXHU3QTc0XHU3QUNCXHU3QUY5XHU3QzczXHU3Q0Y4IisKKyAgICAgICAgIlx1N0YzNlx1N0Y1MVx1N0Y4QVx1N0ZCRFx1ODAwMVx1ODAwQ1x1ODAxMlx1ODAzM1x1ODA3Rlx1ODA4OVx1ODFFM1x1ODFFQSIrCisgICAgICAgICJcdTgxRjNcdTgxRkNcdTgyMENcdTgyMUJcdTgyMUZcdTgyNkVcdTgyNzJcdTgyNzhcdTg2NERcdTg2NkJcdTg4NDBcdTg4NEMiKworICAgICAgICAiXHU4ODYzXHU4OTdFXHU4OThCXHU4OUQyXHU4QTAwXHU4QzM3XHU4QzQ2XHU4QzU1XHU4Qzc4XHU4QzlEXHU4RDY0XHU4RDcwIisKKyAgICAgICAgIlx1OERCM1x1OEVBQlx1OEVDQVx1OEY5Qlx1OEZCMFx1OEZCNVx1OTA5MVx1OTE0OVx1OTFDNlx1OTFDQ1x1OTFEMVx1OTU3NyIrCisgICAgICAgICJcdTk1ODBcdTk2MUNcdTk2QjZcdTk2QjlcdTk2RThcdTk3NTFcdTk3NUVcdTk3NjJcdTk3NjlcdTk3Q0JcdTk3RURcdTk3RjMiKworICAgICAgICAiXHU5ODAxXHU5OEE4XHU5OERCXHU5OERGXHU5OTk2XHU5OTk5XHU5OUFDXHU5QUE4XHU5QUQ4XHU5QURGXHU5QjI1XHU5QjJGIisKKyAgICAgICAgIlx1OUIzMlx1OUIzQ1x1OUI1QVx1OUNFNVx1OUU3NVx1OUU3Rlx1OUVBNVx1OUVCQlx1OUVDM1x1OUVDRFx1OUVEMVx1OUVGOSIrCisgICAgICAgICJcdTlFRkRcdTlGMEVcdTlGMTNcdTlGMjBcdTlGM0JcdTlGNEFcdTlGNTJcdTlGOERcdTlGOUNcdTlGQTBcdTMwMTJcdTUzNDQiKworICAgICAgICAiXHU1MzQ1IFx1MzA5OSBcdTMwOUFcdTExMDBcdTExMDFcdTExQUFcdTExMDJcdTExQUNcdTExQURcdTExMDNcdTExMDRcdTExMDUiKworICAgICAgICAiXHUxMUIwXHUxMUIxXHUxMUIyXHUxMUIzXHUxMUI0XHUxMUI1XHUxMTFBXHUxMTA2XHUxMTA3XHUxMTA4XHUxMTIxXHUxMTA5IisKKyAgICAgICAgIlx1MTEwQVx1MTEwQlx1MTEwQ1x1MTEwRFx1MTEwRVx1MTEwRlx1MTExMFx1MTExMVx1MTExMlx1MTE2MVx1MTE2Mlx1MTE2MyIrCisgICAgICAgICJcdTExNjRcdTExNjVcdTExNjZcdTExNjdcdTExNjhcdTExNjlcdTExNkFcdTExNkJcdTExNkNcdTExNkRcdTExNkVcdTExNkYiKworICAgICAgICAiXHUxMTcwXHUxMTcxXHUxMTcyXHUxMTczXHUxMTc0XHUxMTc1XHUxMTYwXHUxMTE0XHUxMTE1XHUxMUM3XHUxMUM4XHUxMUNDIisKKyAgICAgICAgIlx1MTFDRVx1MTFEM1x1MTFEN1x1MTFEOVx1MTExQ1x1MTFERFx1MTFERlx1MTExRFx1MTExRVx1MTEyMFx1MTEyMlx1MTEyMyIrCisgICAgICAgICJcdTExMjdcdTExMjlcdTExMkJcdTExMkNcdTExMkRcdTExMkVcdTExMkZcdTExMzJcdTExMzZcdTExNDBcdTExNDdcdTExNEMiKworICAgICAgICAiXHUxMUYxXHUxMUYyXHUxMTU3XHUxMTU4XHUxMTU5XHUxMTg0XHUxMTg1XHUxMTg4XHUxMTkxXHUxMTkyXHUxMTk0XHUxMTlFIisKKyAgICAgICAgIlx1MTFBMVx1NEUwOVx1NTZEQlx1NEUwQVx1NEUyRFx1NEUwQlx1NzUzMlx1NEUxOVx1NEUwMVx1NTkyOVx1NTczMChcdTExMDAiKworICAgICAgICAiKShcdTExMDIpKFx1MTEwMykoXHUxMTA1KShcdTExMDYpKFx1MTEwNykoXHUxMTA5KShcdTExMEIpKFx1MTEwQykoXHUxMTBFIisKKyAgICAgICAgIikoXHUxMTBGKShcdTExMTApKFx1MTExMSkoXHUxMTEyKShcdTExMDBcdTExNjEpXDAwMChcdTExMDJcdTExNjEpXDAwMCIrCisgICAgICAgICIoXHUxMTAzXHUxMTYxKVwwMDAoXHUxMTA1XHUxMTYxKVwwMDAoXHUxMTA2XHUxMTYxKVwwMDAoXHUxMTA3XHUxMTYxKVwwMDAiKworICAgICAgICAiKFx1MTEwOVx1MTE2MSlcMDAwKFx1MTEwQlx1MTE2MSlcMDAwKFx1MTEwQ1x1MTE2MSlcMDAwKFx1MTEwRVx1MTE2MSlcMDAwIisKKyAgICAgICAgIihcdTExMEZcdTExNjEpXDAwMChcdTExMTBcdTExNjEpXDAwMChcdTExMTFcdTExNjEpXDAwMChcdTExMTJcdTExNjEpXDAwMCIrCisgICAgICAgICIoXHUxMTBDXHUxMTZFKVwwMDAoXHU0RTAwKShcdTRFOEMpKFx1NEUwOSkoXHU1NkRCKShcdTRFOTQpKFx1NTE2RCkoXHU0RTAzIisKKyAgICAgICAgIikoXHU1MTZCKShcdTRFNUQpKFx1NTM0MSkoXHU2NzA4KShcdTcwNkIpKFx1NkMzNCkoXHU2NzI4KShcdTkxRDEpKFx1NTcxRiIrCisgICAgICAgICIpKFx1NjVFNSkoXHU2ODJBKShcdTY3MDkpKFx1NzkzRSkoXHU1NDBEKShcdTcyNzkpKFx1OENBMSkoXHU3OTVEKShcdTUyQjQiKworICAgICAgICAiKShcdTRFRTMpKFx1NTQ3QykoXHU1QjY2KShcdTc2RTMpKFx1NEYwMSkoXHU4Q0M3KShcdTUzNTQpKFx1Nzk2RCkoXHU0RjExIisKKyAgICAgICAgIikoXHU4MUVBKShcdTgxRjMpXHU3OUQ4XHU3NTM3XHU5MDY5XHU1MTJBXHU1MzcwXHU2Q0U4XHU5ODA1XHU1MTk5XHU2QjYzIisKKyAgICAgICAgIlx1NURFNlx1NTNGM1x1NTMzQlx1NUI5N1x1NTkxQzFcdTY3MDgyXHU2NzA4M1x1NjcwODRcdTY3MDg1XHU2NzA4Nlx1NjcwOCIrCisgICAgICAgICI3XHU2NzA4OFx1NjcwODlcdTY3MDgxMFx1NjcwODExXHU2NzA4MTJcdTY3MDhcdTMwQTJcdTMwQTRcdTMwQTZcdTMwQTgiKworICAgICAgICAiXHUzMEFBXHUzMEFCXHUzMEFEXHUzMEFGXHUzMEIxXHUzMEIzXHUzMEI1XHUzMEI3XHUzMEI5XHUzMEJCXHUzMEJEXHUzMEJGIisKKyAgICAgICAgIlx1MzBDMVx1MzBDNFx1MzBDNlx1MzBDOFx1MzBDQVx1MzBDQlx1MzBDQ1x1MzBDRFx1MzBDRVx1MzBDRlx1MzBEMlx1MzBENSIrCisgICAgICAgICJcdTMwRDhcdTMwREJcdTMwREVcdTMwREZcdTMwRTBcdTMwRTFcdTMwRTJcdTMwRTRcdTMwRTZcdTMwRThcdTMwRTlcdTMwRUEiKworICAgICAgICAiXHUzMEVCXHUzMEVDXHUzMEVEXHUzMEVGXHUzMEYwXHUzMEYxXHUzMEYyXHUzMEEyXHUzMENGXHUzMDlBXHUzMEZDXHUzMEM4IisKKyAgICAgICAgIlwwMDBcdTMwQTJcdTMwRUJcdTMwRDVcdTMwQTFcMDAwXHUzMEEyXHUzMEYzXHUzMEQ4XHUzMDlBXHUzMEEyXDAwMFx1MzBBMiIrCisgICAgICAgICJcdTMwRkNcdTMwRUJcdTMwQTRcdTMwQ0JcdTMwRjNcdTMwQUZcdTMwOTlcMDAwXHUzMEE0XHUzMEYzXHUzMEMxXHUzMEE2IisKKyAgICAgICAgIlx1MzBBOVx1MzBGM1x1MzBBOFx1MzBCOVx1MzBBRlx1MzBGQ1x1MzBDOFx1MzA5OVwwMDBcdTMwQThcdTMwRkNcdTMwQUIiKworICAgICAgICAiXHUzMEZDXDAwMFx1MzBBQVx1MzBGM1x1MzBCOVx1MzBBQVx1MzBGQ1x1MzBFMFx1MzBBQlx1MzBBNFx1MzBFQVx1MzBBQiIrCisgICAgICAgICJcdTMwRTlcdTMwQzNcdTMwQzhcMDAwXHUzMEFCXHUzMEVEXHUzMEVBXHUzMEZDXDAwMFx1MzBBQlx1MzA5OVx1MzBFRFx1MzBGMyIrCisgICAgICAgICJcMDAwXHUzMEFCXHUzMDk5XHUzMEYzXHUzMERFXDAwMFx1MzBBRFx1MzA5OVx1MzBBQlx1MzA5OVwwMDBcdTMwQURcdTMwOTkiKworICAgICAgICAiXHUzMENCXHUzMEZDXDAwMFx1MzBBRFx1MzBFNVx1MzBFQVx1MzBGQ1wwMDBcdTMwQURcdTMwOTlcdTMwRUJcdTMwQkZcdTMwOTkiKworICAgICAgICAiXHUzMEZDXDAwMFx1MzBBRFx1MzBFRFx1MzBBRFx1MzBFRFx1MzBBRlx1MzA5OVx1MzBFOVx1MzBFMFwwMDBcdTMwQURcdTMwRUQiKworICAgICAgICAiXHUzMEUxXHUzMEZDXHUzMEM4XHUzMEVCXDAwMFx1MzBBRFx1MzBFRFx1MzBFRlx1MzBDM1x1MzBDOFwwMDBcdTMwQUZcdTMwOTkiKworICAgICAgICAiXHUzMEU5XHUzMEUwXHUzMEM4XHUzMEYzXDAwMFx1MzBBRlx1MzBFQlx1MzBCQlx1MzA5OVx1MzBBNFx1MzBFRFwwMDBcdTMwQUYiKworICAgICAgICAiXHUzMEVEXHUzMEZDXHUzMENEXDAwMFx1MzBCMVx1MzBGQ1x1MzBCOVx1MzBCM1x1MzBFQlx1MzBDQVx1MzBCM1x1MzBGQyIrCisgICAgICAgICJcdTMwREJcdTMwOUFcMDAwXHUzMEI1XHUzMEE0XHUzMEFGXHUzMEVCXDAwMFx1MzBCNVx1MzBGM1x1MzBDMVx1MzBGQ1x1MzBFMCIrCisgICAgICAgICJcMDAwXHUzMEI3XHUzMEVBXHUzMEYzXHUzMEFGXHUzMDk5XDAwMFx1MzBCQlx1MzBGM1x1MzBDMVx1MzBCQlx1MzBGM1x1MzBDOCIrCisgICAgICAgICJcdTMwQkZcdTMwOTlcdTMwRkNcdTMwQjlcMDAwXHUzMEM2XHUzMDk5XHUzMEI3XHUzMEM4XHUzMDk5XHUzMEVCXHUzMENBIisKKyAgICAgICAgIlx1MzBDRVx1MzBDRVx1MzBDM1x1MzBDOFx1MzBDRlx1MzBBNFx1MzBDNFx1MzBDRlx1MzA5QVx1MzBGQ1x1MzBCQlx1MzBGMyIrCisgICAgICAgICJcdTMwQzhcMDAwXHUzMENGXHUzMDlBXHUzMEZDXHUzMEM0XDAwMFx1MzBDRlx1MzA5OVx1MzBGQ1x1MzBFQ1x1MzBFQlwwMDAiKworICAgICAgICAiXHUzMEQyXHUzMDlBXHUzMEEyXHUzMEI5XHUzMEM4XHUzMEVCXDAwMFx1MzBEMlx1MzA5QVx1MzBBRlx1MzBFQlwwMDBcdTMwRDIiKworICAgICAgICAiXHUzMDlBXHUzMEIzXHUzMEQyXHUzMDk5XHUzMEVCXHUzMEQ1XHUzMEExXHUzMEU5XHUzMEMzXHUzMEM4XHUzMDk5XDAwMCIrCisgICAgICAgICJcdTMwRDVcdTMwQTNcdTMwRkNcdTMwQzhcMDAwXHUzMEQ1XHUzMDk5XHUzMEMzXHUzMEI3XHUzMEE3XHUzMEVCXDAwMFx1MzBENSIrCisgICAgICAgICJcdTMwRTlcdTMwRjNcdTMwRDhcdTMwQUZcdTMwQkZcdTMwRkNcdTMwRUJcMDAwXHUzMEQ4XHUzMDlBXHUzMEJEXHUzMEQ4IisKKyAgICAgICAgIlx1MzA5QVx1MzBDQlx1MzBEMlwwMDBcdTMwRDhcdTMwRUJcdTMwQzRcdTMwRDhcdTMwOUFcdTMwRjNcdTMwQjlcMDAwXHUzMEQ4IisKKyAgICAgICAgIlx1MzA5QVx1MzBGQ1x1MzBCN1x1MzA5OVwwMDBcdTMwRDhcdTMwOTlcdTMwRkNcdTMwQkZcMDAwXHUzMERCXHUzMDlBXHUzMEE0IisKKyAgICAgICAgIlx1MzBGM1x1MzBDOFwwMDBcdTMwREJcdTMwOTlcdTMwRUJcdTMwQzhcMDAwXHUzMERCXHUzMEYzXHUzMERCXHUzMDlBXHUzMEYzIisKKyAgICAgICAgIlx1MzBDOFx1MzA5OVwwMDBcdTMwREJcdTMwRkNcdTMwRUJcdTMwREJcdTMwRkNcdTMwRjNcdTMwREVcdTMwQTRcdTMwQUYiKworICAgICAgICAiXHUzMEVEXDAwMFx1MzBERVx1MzBBNFx1MzBFQlx1MzBERVx1MzBDM1x1MzBDRlx1MzBERVx1MzBFQlx1MzBBRlx1MzBERSIrCisgICAgICAgICJcdTMwRjNcdTMwQjdcdTMwRTdcdTMwRjNcMDAwXHUzMERGXHUzMEFGXHUzMEVEXHUzMEYzXDAwMFx1MzBERlx1MzBFQVx1MzBERiIrCisgICAgICAgICJcdTMwRUFcdTMwQ0ZcdTMwOTlcdTMwRkNcdTMwRUJcMDAwXHUzMEUxXHUzMEFCXHUzMDk5XHUzMEUxXHUzMEFCXHUzMDk5IisKKyAgICAgICAgIlx1MzBDOFx1MzBGM1wwMDBcdTMwRTRcdTMwRkNcdTMwQzhcdTMwOTlcMDAwXHUzMEU0XHUzMEZDXHUzMEVCXHUzMEU2XHUzMEEyIisKKyAgICAgICAgIlx1MzBGM1x1MzBFQVx1MzBDM1x1MzBDOFx1MzBFQlwwMDBcdTMwRUFcdTMwRTlcdTMwRUJcdTMwRDJcdTMwOUFcdTMwRkMiKworICAgICAgICAiXDAwMFx1MzBFQlx1MzBGQ1x1MzBENVx1MzA5OVx1MzBFQlwwMDBcdTMwRUNcdTMwRTBcdTMwRUNcdTMwRjNcdTMwQzhcdTMwQjEiKworICAgICAgICAiXHUzMDk5XHUzMEYzXDAwMDBcdTcwQjkxXHU3MEI5Mlx1NzBCOTNcdTcwQjk0XHU3MEI5NVx1NzBCOTZcdTcwQjk3XHU3MEI5IisKKyAgICAgICAgIjhcdTcwQjk5XHU3MEI5MTBcdTcwQjkxMVx1NzBCOTEyXHU3MEI5MTNcdTcwQjkxNFx1NzBCOTE1XHU3MEI5MTZcdTcwQjkiKworICAgICAgICAiMTdcdTcwQjkxOFx1NzBCOTE5XHU3MEI5MjBcdTcwQjkyMVx1NzBCOTIyXHU3MEI5MjNcdTcwQjkyNFx1NzBCOWhQYWRhIisKKyAgICAgICAgIkFVYmFyb1ZwY1x1NUU3M1x1NjIxMFx1NjYyRFx1NTQ4Q1x1NTkyN1x1NkI2M1x1NjYwRVx1NkNCQlx1NjgyQVx1NUYwRiIrCisgICAgICAgICJcdTRGMUFcdTc5M0VcMDAwcEFuQVx1MDNCQ0FtQWtBS0JHQmNhbGtjYWxcMDAwcEZuRlx1MDNCQ0ZcdTAzQkNnbWdrZ0giKworICAgICAgICAiemtIek1IekdIelRIelx1MDNCQ2xtbGRsa2xmbW5tXHUwM0JDbW1tY21rbW1tMmNtMmttMm1tM2NtM2ttM21cdTIyMTVzIisKKyAgICAgICAgIm1cdTIyMTVzMlwwMDBrUGFNUGFHUGFyYWRyYWRcdTIyMTVzXDAwMHJhZFx1MjIxNXMyXDAwMHBzXHUwM0JDc21zcFZuViIrCisgICAgICAgICJcdTAzQkNWbVZrVk1WcFduV1x1MDNCQ1dtV2tXTVdrXHUwM0E5TVx1MDNBOWEubS5cMDAwQnFjY2NkQ1x1MjIxNWtnXDAwMCIrCisgICAgICAgICJDby5kQkd5aGFIUGluS0tLTWt0bG5sb2dseG1ibWlsbW9sUEhwLm0uXDAwMFBQTVBSc3JTdldiMVx1NjVFNTJcdTY1RTUiKworICAgICAgICAiM1x1NjVFNTRcdTY1RTU1XHU2NUU1Nlx1NjVFNTdcdTY1RTU4XHU2NUU1OVx1NjVFNTEwXHU2NUU1MTFcdTY1RTUxMlx1NjVFNSIrCisgICAgICAgICIxM1x1NjVFNTE0XHU2NUU1MTVcdTY1RTUxNlx1NjVFNTE3XHU2NUU1MThcdTY1RTUxOVx1NjVFNTIwXHU2NUU1MjFcdTY1RTUiKworICAgICAgICAiMjJcdTY1RTUyM1x1NjVFNTI0XHU2NUU1MjVcdTY1RTUyNlx1NjVFNTI3XHU2NUU1MjhcdTY1RTUyOVx1NjVFNTMwXHU2NUU1IisKKyAgICAgICAgIjMxXHU2NUU1ZmZmaWZsZmZsc3RcdTA1NzRcdTA1NzZcdTA1NzRcdTA1NjVcdTA1NzRcdTA1NkJcdTA1N0VcdTA1NzZcdTA1NzQiKworICAgICAgICAiXHUwNTZEXHUwNUUyXHUwNUQ0XHUwNURCXHUwNURDXHUwNUREXHUwNUU4XHUwNUVBXHUwNUQwXHUwNURDXHUwNjcxXHUwNjdCIisKKyAgICAgICAgIlx1MDY3RVx1MDY4MFx1MDY3QVx1MDY3Rlx1MDY3OVx1MDZBNFx1MDZBNlx1MDY4NFx1MDY4M1x1MDY4Nlx1MDY4N1x1MDY4RCIrCisgICAgICAgICJcdTA2OENcdTA2OEVcdTA2ODhcdTA2OThcdTA2OTFcdTA2QTlcdTA2QUZcdTA2QjNcdTA2QjFcdTA2QkFcdTA2QkJcdTA2RDUiKworICAgICAgICAiXHUwNjU0XHUwNkMxXHUwNkJFXHUwNkQyXHUwNkQyXHUwNjU0XHUwNkFEXHUwNkM2XHUwNkM4XHUwNkNCXHUwNkM1XHUwNkM5IisKKyAgICAgICAgIlx1MDZEMFx1MDY0OVx1MDY0QVx1MDY1NFx1MDYyN1x1MDY0QVx1MDY1NFx1MDZENVx1MDY0QVx1MDY1NFx1MDY0OFx1MDY0QSIrCisgICAgICAgICJcdTA2NTRcdTA2QzdcdTA2NEFcdTA2NTRcdTA2QzZcdTA2NEFcdTA2NTRcdTA2QzhcdTA2NEFcdTA2NTRcdTA2RDBcdTA2NEEiKworICAgICAgICAiXHUwNjU0XHUwNjQ5XHUwNkNDXHUwNjRBXHUwNjU0XHUwNjJDXHUwNjRBXHUwNjU0XHUwNjJEXHUwNjRBXHUwNjU0XHUwNjQ1IisKKyAgICAgICAgIlx1MDY0QVx1MDY1NFx1MDY0QVx1MDYyOFx1MDYyQ1x1MDYyOFx1MDYyRFx1MDYyOFx1MDYyRVx1MDYyOFx1MDY0NVx1MDYyOCIrCisgICAgICAgICJcdTA2NDlcdTA2MjhcdTA2NEFcdTA2MkFcdTA2MkNcdTA2MkFcdTA2MkRcdTA2MkFcdTA2MkVcdTA2MkFcdTA2NDVcdTA2MkEiKworICAgICAgICAiXHUwNjQ5XHUwNjJBXHUwNjRBXHUwNjJCXHUwNjJDXHUwNjJCXHUwNjQ1XHUwNjJCXHUwNjQ5XHUwNjJCXHUwNjRBXHUwNjJDIisKKyAgICAgICAgIlx1MDYyRFx1MDYyQ1x1MDY0NVx1MDYyRFx1MDY0NVx1MDYyRVx1MDYyQ1x1MDYyRVx1MDYyRFx1MDYyRVx1MDY0NVx1MDYzMyIrCisgICAgICAgICJcdTA2MkNcdTA2MzNcdTA2MkRcdTA2MzNcdTA2MkVcdTA2MzNcdTA2NDVcdTA2MzVcdTA2MkRcdTA2MzVcdTA2NDVcdTA2MzYiKworICAgICAgICAiXHUwNjJDXHUwNjM2XHUwNjJEXHUwNjM2XHUwNjJFXHUwNjM2XHUwNjQ1XHUwNjM3XHUwNjJEXHUwNjM3XHUwNjQ1XHUwNjM4IisKKyAgICAgICAgIlx1MDY0NVx1MDYzOVx1MDYyQ1x1MDYzOVx1MDY0NVx1MDYzQVx1MDYyQ1x1MDYzQVx1MDY0NVx1MDY0MVx1MDYyQ1x1MDY0MSIrCisgICAgICAgICJcdTA2MkRcdTA2NDFcdTA2MkVcdTA2NDFcdTA2NDVcdTA2NDFcdTA2NDlcdTA2NDFcdTA2NEFcdTA2NDJcdTA2MkRcdTA2NDIiKworICAgICAgICAiXHUwNjQ1XHUwNjQyXHUwNjQ5XHUwNjQyXHUwNjRBXHUwNjQzXHUwNjI3XHUwNjQzXHUwNjJDXHUwNjQzXHUwNjJEXHUwNjQzIisKKyAgICAgICAgIlx1MDYyRVx1MDY0M1x1MDY0NFx1MDY0M1x1MDY0NVx1MDY0M1x1MDY0OVx1MDY0M1x1MDY0QVx1MDY0NFx1MDYyQ1x1MDY0NCIrCisgICAgICAgICJcdTA2MkRcdTA2NDRcdTA2MkVcdTA2NDRcdTA2NDVcdTA2NDRcdTA2NDlcdTA2NDRcdTA2NEFcdTA2NDVcdTA2MkNcdTA2NDUiKworICAgICAgICAiXHUwNjQ1XHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNjJDXHUwNjQ2XHUwNjJEXHUwNjQ2XHUwNjJFXHUwNjQ2XHUwNjQ1XHUwNjQ2IisKKyAgICAgICAgIlx1MDY0OVx1MDY0Nlx1MDY0QVx1MDY0N1x1MDYyQ1x1MDY0N1x1MDY0NVx1MDY0N1x1MDY0OVx1MDY0N1x1MDY0QVx1MDY0QSIrCisgICAgICAgICJcdTA2MkRcdTA2NEFcdTA2MkVcdTA2NEFcdTA2NDlcdTA2MzBcdTA2NzBcdTA2MzFcdTA2NzBcdTA2NDlcdTA2NzAgXHUwNjRDIisKKyAgICAgICAgIlx1MDY1MSBcdTA2NERcdTA2NTEgXHUwNjRFXHUwNjUxIFx1MDY0Rlx1MDY1MSBcdTA2NTBcdTA2NTEgXHUwNjUxXHUwNjcwIisKKyAgICAgICAgIlx1MDY0QVx1MDY1NFx1MDYzMVx1MDY0QVx1MDY1NFx1MDYzMlx1MDY0QVx1MDY1NFx1MDY0Nlx1MDYyOFx1MDYzMVx1MDYyOCIrCisgICAgICAgICJcdTA2MzJcdTA2MjhcdTA2NDZcdTA2MkFcdTA2MzFcdTA2MkFcdTA2MzJcdTA2MkFcdTA2NDZcdTA2MkJcdTA2MzFcdTA2MkIiKworICAgICAgICAiXHUwNjMyXHUwNjJCXHUwNjQ2XHUwNjQ1XHUwNjI3XHUwNjQ2XHUwNjMxXHUwNjQ2XHUwNjMyXHUwNjQ2XHUwNjQ2XHUwNjRBIisKKyAgICAgICAgIlx1MDYzMVx1MDY0QVx1MDYzMlx1MDY0QVx1MDY0Nlx1MDY0QVx1MDY1NFx1MDYyRVx1MDY0QVx1MDY1NFx1MDY0N1x1MDYyOCIrCisgICAgICAgICJcdTA2NDdcdTA2MkFcdTA2NDdcdTA2MzVcdTA2MkVcdTA2NDRcdTA2NDdcdTA2NDZcdTA2NDdcdTA2NDdcdTA2NzBcdTA2MkIiKworICAgICAgICAiXHUwNjQ3XHUwNjMzXHUwNjQ3XHUwNjM0XHUwNjQ1XHUwNjM0XHUwNjQ3XHUwNjQwXHUwNjRFXHUwNjUxXHUwNjQwXHUwNjRGIisKKyAgICAgICAgIlx1MDY1MVx1MDY0MFx1MDY1MFx1MDY1MVx1MDYzN1x1MDY0OVx1MDYzN1x1MDY0QVx1MDYzOVx1MDY0OVx1MDYzOVx1MDY0QSIrCisgICAgICAgICJcdTA2M0FcdTA2NDlcdTA2M0FcdTA2NEFcdTA2MzNcdTA2NDlcdTA2MzNcdTA2NEFcdTA2MzRcdTA2NDlcdTA2MzRcdTA2NEEiKworICAgICAgICAiXHUwNjJEXHUwNjQ5XHUwNjJDXHUwNjQ5XHUwNjJFXHUwNjQ5XHUwNjM1XHUwNjQ5XHUwNjM1XHUwNjRBXHUwNjM2XHUwNjQ5IisKKyAgICAgICAgIlx1MDYzNlx1MDY0QVx1MDYzNFx1MDYyQ1x1MDYzNFx1MDYyRFx1MDYzNFx1MDYyRVx1MDYzNFx1MDYzMVx1MDYzM1x1MDYzMSIrCisgICAgICAgICJcdTA2MzVcdTA2MzFcdTA2MzZcdTA2MzFcdTA2MjdcdTA2NEJcdTA2MkFcdTA2MkNcdTA2NDVcdTA2MkFcdTA2MkRcdTA2MkMiKworICAgICAgICAiXHUwNjJBXHUwNjJEXHUwNjQ1XHUwNjJBXHUwNjJFXHUwNjQ1XHUwNjJBXHUwNjQ1XHUwNjJDXHUwNjJBXHUwNjQ1XHUwNjJEIisKKyAgICAgICAgIlx1MDYyQVx1MDY0NVx1MDYyRVx1MDYyRFx1MDY0NVx1MDY0QVx1MDYyRFx1MDY0NVx1MDY0OVx1MDYzM1x1MDYyRFx1MDYyQyIrCisgICAgICAgICJcdTA2MzNcdTA2MkNcdTA2MkRcdTA2MzNcdTA2MkNcdTA2NDlcdTA2MzNcdTA2NDVcdTA2MkRcdTA2MzNcdTA2NDVcdTA2MkMiKworICAgICAgICAiXHUwNjMzXHUwNjQ1XHUwNjQ1XHUwNjM1XHUwNjJEXHUwNjJEXHUwNjM1XHUwNjQ1XHUwNjQ1XHUwNjM0XHUwNjJEXHUwNjQ1IisKKyAgICAgICAgIlx1MDYzNFx1MDYyQ1x1MDY0QVx1MDYzNFx1MDY0NVx1MDYyRVx1MDYzNFx1MDY0NVx1MDY0NVx1MDYzNlx1MDYyRFx1MDY0OSIrCisgICAgICAgICJcdTA2MzZcdTA2MkVcdTA2NDVcdTA2MzdcdTA2NDVcdTA2MkRcdTA2MzdcdTA2NDVcdTA2NDVcdTA2MzdcdTA2NDVcdTA2NEEiKworICAgICAgICAiXHUwNjM5XHUwNjJDXHUwNjQ1XHUwNjM5XHUwNjQ1XHUwNjQ1XHUwNjM5XHUwNjQ1XHUwNjQ5XHUwNjNBXHUwNjQ1XHUwNjQ1IisKKyAgICAgICAgIlx1MDYzQVx1MDY0NVx1MDY0QVx1MDYzQVx1MDY0NVx1MDY0OVx1MDY0MVx1MDYyRVx1MDY0NVx1MDY0Mlx1MDY0NVx1MDYyRCIrCisgICAgICAgICJcdTA2NDJcdTA2NDVcdTA2NDVcdTA2NDRcdTA2MkRcdTA2NDVcdTA2NDRcdTA2MkRcdTA2NEFcdTA2NDRcdTA2MkRcdTA2NDkiKworICAgICAgICAiXHUwNjQ0XHUwNjJDXHUwNjJDXHUwNjQ0XHUwNjJFXHUwNjQ1XHUwNjQ0XHUwNjQ1XHUwNjJEXHUwNjQ1XHUwNjJEXHUwNjJDIisKKyAgICAgICAgIlx1MDY0NVx1MDYyRFx1MDY0QVx1MDY0NVx1MDYyQ1x1MDYyRFx1MDY0NVx1MDYyRVx1MDY0NVx1MDY0NVx1MDYyQ1x1MDYyRSIrCisgICAgICAgICJcdTA2NDdcdTA2NDVcdTA2MkNcdTA2NDdcdTA2NDVcdTA2NDVcdTA2NDZcdTA2MkRcdTA2NDVcdTA2NDZcdTA2MkRcdTA2NDkiKworICAgICAgICAiXHUwNjQ2XHUwNjJDXHUwNjQ1XHUwNjQ2XHUwNjJDXHUwNjQ5XHUwNjQ2XHUwNjQ1XHUwNjRBXHUwNjQ2XHUwNjQ1XHUwNjQ5IisKKyAgICAgICAgIlx1MDY0QVx1MDY0NVx1MDY0NVx1MDYyOFx1MDYyRVx1MDY0QVx1MDYyQVx1MDYyQ1x1MDY0QVx1MDYyQVx1MDYyQ1x1MDY0OSIrCisgICAgICAgICJcdTA2MkFcdTA2MkVcdTA2NEFcdTA2MkFcdTA2MkVcdTA2NDlcdTA2MkFcdTA2NDVcdTA2NEFcdTA2MkFcdTA2NDVcdTA2NDkiKworICAgICAgICAiXHUwNjJDXHUwNjQ1XHUwNjRBXHUwNjJDXHUwNjJEXHUwNjQ5XHUwNjJDXHUwNjQ1XHUwNjQ5XHUwNjMzXHUwNjJFXHUwNjQ5IisKKyAgICAgICAgIlx1MDYzNVx1MDYyRFx1MDY0QVx1MDYzNFx1MDYyRFx1MDY0QVx1MDYzNlx1MDYyRFx1MDY0QVx1MDY0NFx1MDYyQ1x1MDY0QSIrCisgICAgICAgICJcdTA2NDRcdTA2NDVcdTA2NEFcdTA2NEFcdTA2MkNcdTA2NEFcdTA2NEFcdTA2NDVcdTA2NEFcdTA2NDVcdTA2NDVcdTA2NEEiKworICAgICAgICAiXHUwNjQyXHUwNjQ1XHUwNjRBXHUwNjQ2XHUwNjJEXHUwNjRBXHUwNjM5XHUwNjQ1XHUwNjRBXHUwNjQzXHUwNjQ1XHUwNjRBIisKKyAgICAgICAgIlx1MDY0Nlx1MDYyQ1x1MDYyRFx1MDY0NVx1MDYyRVx1MDY0QVx1MDY0NFx1MDYyQ1x1MDY0NVx1MDY0M1x1MDY0NVx1MDY0NSIrCisgICAgICAgICJcdTA2MkNcdTA2MkRcdTA2NEFcdTA2MkRcdTA2MkNcdTA2NEFcdTA2NDVcdTA2MkNcdTA2NEFcdTA2NDFcdTA2NDVcdTA2NEEiKworICAgICAgICAiXHUwNjI4XHUwNjJEXHUwNjRBXHUwNjMzXHUwNjJFXHUwNjRBXHUwNjQ2XHUwNjJDXHUwNjRBXHUwNjM1XHUwNjQ0XHUwNkQyIisKKyAgICAgICAgIlx1MDY0Mlx1MDY0NFx1MDZEMlx1MDYyN1x1MDY0NFx1MDY0NFx1MDY0N1wwMDBcdTA2MjdcdTA2NDNcdTA2MjhcdTA2MzEiKworICAgICAgICAiXDAwMFx1MDY0NVx1MDYyRFx1MDY0NVx1MDYyRlwwMDBcdTA2MzVcdTA2NDRcdTA2MzlcdTA2NDVcMDAwXHUwNjMxXHUwNjMzIisKKyAgICAgICAgIlx1MDY0OFx1MDY0NFwwMDBcdTA2MzlcdTA2NDRcdTA2NEFcdTA2NDdcMDAwXHUwNjQ4XHUwNjMzXHUwNjQ0XHUwNjQ1XDAwMCIrCisgICAgICAgICJcdTA2MzVcdTA2NDRcdTA2NDlcdTA2MzVcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjQ0XHUwNjQ3IFx1MDYzOVx1MDY0NCIrCisgICAgICAgICJcdTA2NEFcdTA2NDcgXHUwNjQ4XHUwNjMzXHUwNjQ0XHUwNjQ1XDAwMFx1MDYyQ1x1MDY0NCBcdTA2MkNcdTA2NDRcdTA2MjciKworICAgICAgICAiXHUwNjQ0XHUwNjQ3XDAwMFx1MjAxNFx1MjAxM197fVx1MzAxNFx1MzAxNVx1MzAxMFx1MzAxMVx1MzAwQVx1MzAwQlx1MzAwOCIrCisgICAgICAgICJcdTMwMDlcdTMwMENcdTMwMERcdTMwMEVcdTMwMEYsXHUzMDAxOzojJiotPD5cMTM0JCVAIFx1MDY0Qlx1MDY0MFx1MDY0QiIrCisgICAgICAgICJcdTA2NDBcdTA2NTEgXHUwNjUyXHUwNjQwXHUwNjUyXHUwNjIxXHUwNjI3XHUwNjUzXHUwNjI3XHUwNjU0XHUwNjQ4XHUwNjU0IisKKyAgICAgICAgIlx1MDYyN1x1MDY1NVx1MDYyOVx1MDY0NFx1MDYyN1x1MDY1M1x1MDY0NFx1MDYyN1x1MDY1NFx1MDY0NFx1MDYyN1x1MDY1NSIrCisgICAgICAgICJcMDQyJ1tdXmB8flx1MzAwMlx1MzBGQlx1MzBBNVx1MzBFM1x1MDBBMlx1MDBBM1x1MDBBQ1x1MDBBNlx1MDBBNVx1MjBBOSIrCisgICAgICAgICJcdTI1MDJcdTIxOTBcdTIxOTFcdTIxOTJcdTIxOTNcdTI1QTBcdTI1Q0JBXHUwMzAwQVx1MDMwMUFcdTAzMDJBXHUwMzAzIisKKyAgICAgICAgIkFcdTAzMDhBXHUwMzBBQ1x1MDMyN0VcdTAzMDBFXHUwMzAxRVx1MDMwMkVcdTAzMDhJXHUwMzAwSVx1MDMwMUlcdTAzMDIiKworICAgICAgICAiSVx1MDMwOE5cdTAzMDNPXHUwMzAwT1x1MDMwMU9cdTAzMDJPXHUwMzAzT1x1MDMwOFVcdTAzMDBVXHUwMzAxVVx1MDMwMiIrCisgICAgICAgICJVXHUwMzA4WVx1MDMwMWFcdTAzMDBhXHUwMzAxYVx1MDMwMmFcdTAzMDNhXHUwMzA4YVx1MDMwQWNcdTAzMjdlXHUwMzAwIisKKyAgICAgICAgImVcdTAzMDFlXHUwMzAyZVx1MDMwOGlcdTAzMDBpXHUwMzAxaVx1MDMwMmlcdTAzMDhuXHUwMzAzb1x1MDMwMG9cdTAzMDEiKworICAgICAgICAib1x1MDMwMm9cdTAzMDNvXHUwMzA4dVx1MDMwMHVcdTAzMDF1XHUwMzAydVx1MDMwOHlcdTAzMDF5XHUwMzA4QVx1MDMwNCIrCisgICAgICAgICJhXHUwMzA0QVx1MDMwNmFcdTAzMDZBXHUwMzI4YVx1MDMyOENcdTAzMDFjXHUwMzAxQ1x1MDMwMmNcdTAzMDJDXHUwMzA3IisKKyAgICAgICAgImNcdTAzMDdDXHUwMzBDY1x1MDMwQ0RcdTAzMENkXHUwMzBDRVx1MDMwNGVcdTAzMDRFXHUwMzA2ZVx1MDMwNkVcdTAzMDciKworICAgICAgICAiZVx1MDMwN0VcdTAzMjhlXHUwMzI4RVx1MDMwQ2VcdTAzMENHXHUwMzAyZ1x1MDMwMkdcdTAzMDZnXHUwMzA2R1x1MDMwNyIrCisgICAgICAgICJnXHUwMzA3R1x1MDMyN2dcdTAzMjdIXHUwMzAyaFx1MDMwMklcdTAzMDNpXHUwMzAzSVx1MDMwNGlcdTAzMDRJXHUwMzA2IisKKyAgICAgICAgImlcdTAzMDZJXHUwMzI4aVx1MDMyOElcdTAzMDdKXHUwMzAyalx1MDMwMktcdTAzMjdrXHUwMzI3TFx1MDMwMWxcdTAzMDEiKworICAgICAgICAiTFx1MDMyN2xcdTAzMjdMXHUwMzBDbFx1MDMwQ05cdTAzMDFuXHUwMzAxTlx1MDMyN25cdTAzMjdOXHUwMzBDblx1MDMwQyIrCisgICAgICAgICJPXHUwMzA0b1x1MDMwNE9cdTAzMDZvXHUwMzA2T1x1MDMwQm9cdTAzMEJSXHUwMzAxclx1MDMwMVJcdTAzMjdyXHUwMzI3IisKKyAgICAgICAgIlJcdTAzMENyXHUwMzBDU1x1MDMwMXNcdTAzMDFTXHUwMzAyc1x1MDMwMlNcdTAzMjdzXHUwMzI3U1x1MDMwQ3NcdTAzMEMiKworICAgICAgICAiVFx1MDMyN3RcdTAzMjdUXHUwMzBDdFx1MDMwQ1VcdTAzMDN1XHUwMzAzVVx1MDMwNHVcdTAzMDRVXHUwMzA2dVx1MDMwNiIrCisgICAgICAgICJVXHUwMzBBdVx1MDMwQVVcdTAzMEJ1XHUwMzBCVVx1MDMyOHVcdTAzMjhXXHUwMzAyd1x1MDMwMllcdTAzMDJ5XHUwMzAyIisKKyAgICAgICAgIllcdTAzMDhaXHUwMzAxelx1MDMwMVpcdTAzMDd6XHUwMzA3Wlx1MDMwQ3pcdTAzMENPXHUwMzFCb1x1MDMxQlVcdTAzMUIiKworICAgICAgICAidVx1MDMxQkFcdTAzMENhXHUwMzBDSVx1MDMwQ2lcdTAzMENPXHUwMzBDb1x1MDMwQ1VcdTAzMEN1XHUwMzBDVVx1MDMwOCIrCisgICAgICAgICJcdTAzMDR1XHUwMzA4XHUwMzA0VVx1MDMwOFx1MDMwMXVcdTAzMDhcdTAzMDFVXHUwMzA4XHUwMzBDdVx1MDMwOFx1MDMwQyIrCisgICAgICAgICJVXHUwMzA4XHUwMzAwdVx1MDMwOFx1MDMwMEFcdTAzMDhcdTAzMDRhXHUwMzA4XHUwMzA0QVx1MDMwN1x1MDMwNGFcdTAzMDciKworICAgICAgICAiXHUwMzA0XHUwMEM2XHUwMzA0XHUwMEU2XHUwMzA0R1x1MDMwQ2dcdTAzMENLXHUwMzBDa1x1MDMwQ09cdTAzMjhvXHUwMzI4IisKKyAgICAgICAgIk9cdTAzMjhcdTAzMDRvXHUwMzI4XHUwMzA0XHUwMUI3XHUwMzBDXHUwMjkyXHUwMzBDalx1MDMwQ0dcdTAzMDFnXHUwMzAxIisKKyAgICAgICAgIk5cdTAzMDBuXHUwMzAwQVx1MDMwQVx1MDMwMWFcdTAzMEFcdTAzMDFcdTAwQzZcdTAzMDFcdTAwRTZcdTAzMDFcdTAwRDgiKworICAgICAgICAiXHUwMzAxXHUwMEY4XHUwMzAxQVx1MDMwRmFcdTAzMEZBXHUwMzExYVx1MDMxMUVcdTAzMEZlXHUwMzBGRVx1MDMxMWVcdTAzMTEiKworICAgICAgICAiSVx1MDMwRmlcdTAzMEZJXHUwMzExaVx1MDMxMU9cdTAzMEZvXHUwMzBGT1x1MDMxMW9cdTAzMTFSXHUwMzBGclx1MDMwRiIrCisgICAgICAgICJSXHUwMzExclx1MDMxMVVcdTAzMEZ1XHUwMzBGVVx1MDMxMXVcdTAzMTFTXHUwMzI2c1x1MDMyNlRcdTAzMjZ0XHUwMzI2IisKKyAgICAgICAgIkhcdTAzMENoXHUwMzBDQVx1MDMwN2FcdTAzMDdFXHUwMzI3ZVx1MDMyN09cdTAzMDhcdTAzMDRvXHUwMzA4XHUwMzA0TyIrCisgICAgICAgICJcdTAzMDNcdTAzMDRvXHUwMzAzXHUwMzA0T1x1MDMwN29cdTAzMDdPXHUwMzA3XHUwMzA0b1x1MDMwN1x1MDMwNFlcdTAzMDQiKworICAgICAgICAieVx1MDMwNFx1MDMwMFx1MDMwMVx1MDMxM1x1MDMwOFx1MDMwMVx1MDJCOTtcdTAwQThcdTAzMDFcdTAzOTFcdTAzMDFcdTAwQjciKworICAgICAgICAiXHUwMzk1XHUwMzAxXHUwMzk3XHUwMzAxXHUwMzk5XHUwMzAxXHUwMzlGXHUwMzAxXHUwM0E1XHUwMzAxXHUwM0E5XHUwMzAxIisKKyAgICAgICAgIlx1MDNCOVx1MDMwOFx1MDMwMVx1MDM5OVx1MDMwOFx1MDNBNVx1MDMwOFx1MDNCMVx1MDMwMVx1MDNCNVx1MDMwMVx1MDNCNyIrCisgICAgICAgICJcdTAzMDFcdTAzQjlcdTAzMDFcdTAzQzVcdTAzMDhcdTAzMDFcdTAzQjlcdTAzMDhcdTAzQzVcdTAzMDhcdTAzQkZcdTAzMDEiKworICAgICAgICAiXHUwM0M1XHUwMzAxXHUwM0M5XHUwMzAxXHUwM0QyXHUwMzAxXHUwM0QyXHUwMzA4XHUwNDE1XHUwMzAwXHUwNDE1XHUwMzA4IisKKyAgICAgICAgIlx1MDQxM1x1MDMwMVx1MDQwNlx1MDMwOFx1MDQxQVx1MDMwMVx1MDQxOFx1MDMwMFx1MDQyM1x1MDMwNlx1MDQxOFx1MDMwNiIrCisgICAgICAgICJcdTA0MzhcdTAzMDZcdTA0MzVcdTAzMDBcdTA0MzVcdTAzMDhcdTA0MzNcdTAzMDFcdTA0NTZcdTAzMDhcdTA0M0FcdTAzMDEiKworICAgICAgICAiXHUwNDM4XHUwMzAwXHUwNDQzXHUwMzA2XHUwNDc0XHUwMzBGXHUwNDc1XHUwMzBGXHUwNDE2XHUwMzA2XHUwNDM2XHUwMzA2IisKKyAgICAgICAgIlx1MDQxMFx1MDMwNlx1MDQzMFx1MDMwNlx1MDQxMFx1MDMwOFx1MDQzMFx1MDMwOFx1MDQxNVx1MDMwNlx1MDQzNVx1MDMwNiIrCisgICAgICAgICJcdTA0RDhcdTAzMDhcdTA0RDlcdTAzMDhcdTA0MTZcdTAzMDhcdTA0MzZcdTAzMDhcdTA0MTdcdTAzMDhcdTA0MzdcdTAzMDgiKworICAgICAgICAiXHUwNDE4XHUwMzA0XHUwNDM4XHUwMzA0XHUwNDE4XHUwMzA4XHUwNDM4XHUwMzA4XHUwNDFFXHUwMzA4XHUwNDNFXHUwMzA4IisKKyAgICAgICAgIlx1MDRFOFx1MDMwOFx1MDRFOVx1MDMwOFx1MDQyRFx1MDMwOFx1MDQ0RFx1MDMwOFx1MDQyM1x1MDMwNFx1MDQ0M1x1MDMwNCIrCisgICAgICAgICJcdTA0MjNcdTAzMDhcdTA0NDNcdTAzMDhcdTA0MjNcdTAzMEJcdTA0NDNcdTAzMEJcdTA0MjdcdTAzMDhcdTA0NDdcdTAzMDgiKworICAgICAgICAiXHUwNDJCXHUwMzA4XHUwNDRCXHUwMzA4XHUwNjI3XHUwNjUzXHUwNjI3XHUwNjU0XHUwNjQ4XHUwNjU0XHUwNjI3XHUwNjU1IisKKyAgICAgICAgIlx1MDY0QVx1MDY1NFx1MDZENVx1MDY1NFx1MDZDMVx1MDY1NFx1MDZEMlx1MDY1NFx1MDkyOFx1MDkzQ1x1MDkzMFx1MDkzQyIrCisgICAgICAgICJcdTA5MzNcdTA5M0NcdTA5MTVcdTA5M0NcdTA5MTZcdTA5M0NcdTA5MTdcdTA5M0NcdTA5MUNcdTA5M0NcdTA5MjFcdTA5M0MiKworICAgICAgICAiXHUwOTIyXHUwOTNDXHUwOTJCXHUwOTNDXHUwOTJGXHUwOTNDXHUwOUM3XHUwOUJFXHUwOUM3XHUwOUQ3XHUwOUExXHUwOUJDIisKKyAgICAgICAgIlx1MDlBMlx1MDlCQ1x1MDlBRlx1MDlCQ1x1MEEzMlx1MEEzQ1x1MEEzOFx1MEEzQ1x1MEExNlx1MEEzQ1x1MEExN1x1MEEzQyIrCisgICAgICAgICJcdTBBMUNcdTBBM0NcdTBBMkJcdTBBM0NcdTBCNDdcdTBCNTZcdTBCNDdcdTBCM0VcdTBCNDdcdTBCNTdcdTBCMjFcdTBCM0MiKworICAgICAgICAiXHUwQjIyXHUwQjNDXHUwQjkyXHUwQkQ3XHUwQkM2XHUwQkJFXHUwQkM3XHUwQkJFXHUwQkM2XHUwQkQ3XHUwQzQ2XHUwQzU2IisKKyAgICAgICAgIlx1MENCRlx1MENENVx1MENDNlx1MENENVx1MENDNlx1MENENlx1MENDNlx1MENDMlx1MENDNlx1MENDMlx1MENENVx1MEQ0NiIrCisgICAgICAgICJcdTBEM0VcdTBENDdcdTBEM0VcdTBENDZcdTBENTdcdTBERDlcdTBEQ0FcdTBERDlcdTBEQ0ZcdTBERDlcdTBEQ0ZcdTBEQ0EiKworICAgICAgICAiXHUwREQ5XHUwRERGXHUwRjQyXHUwRkI3XHUwRjRDXHUwRkI3XHUwRjUxXHUwRkI3XHUwRjU2XHUwRkI3XHUwRjVCXHUwRkI3IisKKyAgICAgICAgIlx1MEY0MFx1MEZCNVx1MEY3MVx1MEY3Mlx1MEY3MVx1MEY3NFx1MEZCMlx1MEY4MFx1MEZCM1x1MEY4MFx1MEY3MVx1MEY4MCIrCisgICAgICAgICJcdTBGOTJcdTBGQjdcdTBGOUNcdTBGQjdcdTBGQTFcdTBGQjdcdTBGQTZcdTBGQjdcdTBGQUJcdTBGQjdcdTBGOTBcdTBGQjUiKworICAgICAgICAiXHUxMDI1XHUxMDJFQVx1MDMyNWFcdTAzMjVCXHUwMzA3Ylx1MDMwN0JcdTAzMjNiXHUwMzIzQlx1MDMzMWJcdTAzMzFDIisKKyAgICAgICAgIlx1MDMyN1x1MDMwMWNcdTAzMjdcdTAzMDFEXHUwMzA3ZFx1MDMwN0RcdTAzMjNkXHUwMzIzRFx1MDMzMWRcdTAzMzFEXHUwMzI3IisKKyAgICAgICAgImRcdTAzMjdEXHUwMzJEZFx1MDMyREVcdTAzMDRcdTAzMDBlXHUwMzA0XHUwMzAwRVx1MDMwNFx1MDMwMWVcdTAzMDRcdTAzMDEiKworICAgICAgICAiRVx1MDMyRGVcdTAzMkRFXHUwMzMwZVx1MDMzMEVcdTAzMjdcdTAzMDZlXHUwMzI3XHUwMzA2Rlx1MDMwN2ZcdTAzMDdHIisKKyAgICAgICAgIlx1MDMwNGdcdTAzMDRIXHUwMzA3aFx1MDMwN0hcdTAzMjNoXHUwMzIzSFx1MDMwOGhcdTAzMDhIXHUwMzI3aFx1MDMyNyIrCisgICAgICAgICJIXHUwMzJFaFx1MDMyRUlcdTAzMzBpXHUwMzMwSVx1MDMwOFx1MDMwMWlcdTAzMDhcdTAzMDFLXHUwMzAxa1x1MDMwMUsiKworICAgICAgICAiXHUwMzIza1x1MDMyM0tcdTAzMzFrXHUwMzMxTFx1MDMyM2xcdTAzMjNMXHUwMzIzXHUwMzA0bFx1MDMyM1x1MDMwNExcdTAzMzEiKworICAgICAgICAibFx1MDMzMUxcdTAzMkRsXHUwMzJETVx1MDMwMW1cdTAzMDFNXHUwMzA3bVx1MDMwN01cdTAzMjNtXHUwMzIzTlx1MDMwNyIrCisgICAgICAgICJuXHUwMzA3Tlx1MDMyM25cdTAzMjNOXHUwMzMxblx1MDMzMU5cdTAzMkRuXHUwMzJET1x1MDMwM1x1MDMwMW9cdTAzMDMiKworICAgICAgICAiXHUwMzAxT1x1MDMwM1x1MDMwOG9cdTAzMDNcdTAzMDhPXHUwMzA0XHUwMzAwb1x1MDMwNFx1MDMwME9cdTAzMDRcdTAzMDEiKworICAgICAgICAib1x1MDMwNFx1MDMwMVBcdTAzMDFwXHUwMzAxUFx1MDMwN3BcdTAzMDdSXHUwMzA3clx1MDMwN1JcdTAzMjNyXHUwMzIzIisKKyAgICAgICAgIlJcdTAzMjNcdTAzMDRyXHUwMzIzXHUwMzA0Ulx1MDMzMXJcdTAzMzFTXHUwMzA3c1x1MDMwN1NcdTAzMjNzXHUwMzIzUyIrCisgICAgICAgICJcdTAzMDFcdTAzMDdzXHUwMzAxXHUwMzA3U1x1MDMwQ1x1MDMwN3NcdTAzMENcdTAzMDdTXHUwMzIzXHUwMzA3c1x1MDMyMyIrCisgICAgICAgICJcdTAzMDdUXHUwMzA3dFx1MDMwN1RcdTAzMjN0XHUwMzIzVFx1MDMzMXRcdTAzMzFUXHUwMzJEdFx1MDMyRFVcdTAzMjQiKworICAgICAgICAidVx1MDMyNFVcdTAzMzB1XHUwMzMwVVx1MDMyRHVcdTAzMkRVXHUwMzAzXHUwMzAxdVx1MDMwM1x1MDMwMVVcdTAzMDRcdTAzMDgiKworICAgICAgICAidVx1MDMwNFx1MDMwOFZcdTAzMDN2XHUwMzAzVlx1MDMyM3ZcdTAzMjNXXHUwMzAwd1x1MDMwMFdcdTAzMDF3XHUwMzAxIisKKyAgICAgICAgIldcdTAzMDh3XHUwMzA4V1x1MDMwN3dcdTAzMDdXXHUwMzIzd1x1MDMyM1hcdTAzMDd4XHUwMzA3WFx1MDMwOHhcdTAzMDgiKworICAgICAgICAiWVx1MDMwN3lcdTAzMDdaXHUwMzAyelx1MDMwMlpcdTAzMjN6XHUwMzIzWlx1MDMzMXpcdTAzMzFoXHUwMzMxdFx1MDMwOCIrCisgICAgICAgICJ3XHUwMzBBeVx1MDMwQVx1MDE3Rlx1MDMwN0FcdTAzMjNhXHUwMzIzQVx1MDMwOWFcdTAzMDlBXHUwMzAyXHUwMzAxYVx1MDMwMiIrCisgICAgICAgICJcdTAzMDFBXHUwMzAyXHUwMzAwYVx1MDMwMlx1MDMwMEFcdTAzMDJcdTAzMDlhXHUwMzAyXHUwMzA5QVx1MDMwMlx1MDMwMyIrCisgICAgICAgICJhXHUwMzAyXHUwMzAzQVx1MDMyM1x1MDMwMmFcdTAzMjNcdTAzMDJBXHUwMzA2XHUwMzAxYVx1MDMwNlx1MDMwMUFcdTAzMDYiKworICAgICAgICAiXHUwMzAwYVx1MDMwNlx1MDMwMEFcdTAzMDZcdTAzMDlhXHUwMzA2XHUwMzA5QVx1MDMwNlx1MDMwM2FcdTAzMDZcdTAzMDMiKworICAgICAgICAiQVx1MDMyM1x1MDMwNmFcdTAzMjNcdTAzMDZFXHUwMzIzZVx1MDMyM0VcdTAzMDllXHUwMzA5RVx1MDMwM2VcdTAzMDNFIisKKyAgICAgICAgIlx1MDMwMlx1MDMwMWVcdTAzMDJcdTAzMDFFXHUwMzAyXHUwMzAwZVx1MDMwMlx1MDMwMEVcdTAzMDJcdTAzMDllXHUwMzAyIisKKyAgICAgICAgIlx1MDMwOUVcdTAzMDJcdTAzMDNlXHUwMzAyXHUwMzAzRVx1MDMyM1x1MDMwMmVcdTAzMjNcdTAzMDJJXHUwMzA5aVx1MDMwOSIrCisgICAgICAgICJJXHUwMzIzaVx1MDMyM09cdTAzMjNvXHUwMzIzT1x1MDMwOW9cdTAzMDlPXHUwMzAyXHUwMzAxb1x1MDMwMlx1MDMwMU8iKworICAgICAgICAiXHUwMzAyXHUwMzAwb1x1MDMwMlx1MDMwME9cdTAzMDJcdTAzMDlvXHUwMzAyXHUwMzA5T1x1MDMwMlx1MDMwM29cdTAzMDIiKworICAgICAgICAiXHUwMzAzT1x1MDMyM1x1MDMwMm9cdTAzMjNcdTAzMDJPXHUwMzFCXHUwMzAxb1x1MDMxQlx1MDMwMU9cdTAzMUJcdTAzMDAiKworICAgICAgICAib1x1MDMxQlx1MDMwME9cdTAzMUJcdTAzMDlvXHUwMzFCXHUwMzA5T1x1MDMxQlx1MDMwM29cdTAzMUJcdTAzMDNPXHUwMzFCIisKKyAgICAgICAgIlx1MDMyM29cdTAzMUJcdTAzMjNVXHUwMzIzdVx1MDMyM1VcdTAzMDl1XHUwMzA5VVx1MDMxQlx1MDMwMXVcdTAzMUJcdTAzMDEiKworICAgICAgICAiVVx1MDMxQlx1MDMwMHVcdTAzMUJcdTAzMDBVXHUwMzFCXHUwMzA5dVx1MDMxQlx1MDMwOVVcdTAzMUJcdTAzMDN1XHUwMzFCIisKKyAgICAgICAgIlx1MDMwM1VcdTAzMUJcdTAzMjN1XHUwMzFCXHUwMzIzWVx1MDMwMHlcdTAzMDBZXHUwMzIzeVx1MDMyM1lcdTAzMDl5XHUwMzA5IisKKyAgICAgICAgIllcdTAzMDN5XHUwMzAzXHUwM0IxXHUwMzEzXHUwM0IxXHUwMzE0XHUwM0IxXHUwMzEzXHUwMzAwXHUwM0IxXHUwMzE0XHUwMzAwIisKKyAgICAgICAgIlx1MDNCMVx1MDMxM1x1MDMwMVx1MDNCMVx1MDMxNFx1MDMwMVx1MDNCMVx1MDMxM1x1MDM0Mlx1MDNCMVx1MDMxNFx1MDM0MiIrCisgICAgICAgICJcdTAzOTFcdTAzMTNcdTAzOTFcdTAzMTRcdTAzOTFcdTAzMTNcdTAzMDBcdTAzOTFcdTAzMTRcdTAzMDBcdTAzOTFcdTAzMTMiKworICAgICAgICAiXHUwMzAxXHUwMzkxXHUwMzE0XHUwMzAxXHUwMzkxXHUwMzEzXHUwMzQyXHUwMzkxXHUwMzE0XHUwMzQyXHUwM0I1XHUwMzEzIisKKyAgICAgICAgIlx1MDNCNVx1MDMxNFx1MDNCNVx1MDMxM1x1MDMwMFx1MDNCNVx1MDMxNFx1MDMwMFx1MDNCNVx1MDMxM1x1MDMwMVx1MDNCNSIrCisgICAgICAgICJcdTAzMTRcdTAzMDFcdTAzOTVcdTAzMTNcdTAzOTVcdTAzMTRcdTAzOTVcdTAzMTNcdTAzMDBcdTAzOTVcdTAzMTRcdTAzMDAiKworICAgICAgICAiXHUwMzk1XHUwMzEzXHUwMzAxXHUwMzk1XHUwMzE0XHUwMzAxXHUwM0I3XHUwMzEzXHUwM0I3XHUwMzE0XHUwM0I3XHUwMzEzIisKKyAgICAgICAgIlx1MDMwMFx1MDNCN1x1MDMxNFx1MDMwMFx1MDNCN1x1MDMxM1x1MDMwMVx1MDNCN1x1MDMxNFx1MDMwMVx1MDNCN1x1MDMxMyIrCisgICAgICAgICJcdTAzNDJcdTAzQjdcdTAzMTRcdTAzNDJcdTAzOTdcdTAzMTNcdTAzOTdcdTAzMTRcdTAzOTdcdTAzMTNcdTAzMDBcdTAzOTciKworICAgICAgICAiXHUwMzE0XHUwMzAwXHUwMzk3XHUwMzEzXHUwMzAxXHUwMzk3XHUwMzE0XHUwMzAxXHUwMzk3XHUwMzEzXHUwMzQyXHUwMzk3IisKKyAgICAgICAgIlx1MDMxNFx1MDM0Mlx1MDNCOVx1MDMxM1x1MDNCOVx1MDMxNFx1MDNCOVx1MDMxM1x1MDMwMFx1MDNCOVx1MDMxNFx1MDMwMCIrCisgICAgICAgICJcdTAzQjlcdTAzMTNcdTAzMDFcdTAzQjlcdTAzMTRcdTAzMDFcdTAzQjlcdTAzMTNcdTAzNDJcdTAzQjlcdTAzMTRcdTAzNDIiKworICAgICAgICAiXHUwMzk5XHUwMzEzXHUwMzk5XHUwMzE0XHUwMzk5XHUwMzEzXHUwMzAwXHUwMzk5XHUwMzE0XHUwMzAwXHUwMzk5XHUwMzEzIisKKyAgICAgICAgIlx1MDMwMVx1MDM5OVx1MDMxNFx1MDMwMVx1MDM5OVx1MDMxM1x1MDM0Mlx1MDM5OVx1MDMxNFx1MDM0Mlx1MDNCRlx1MDMxMyIrCisgICAgICAgICJcdTAzQkZcdTAzMTRcdTAzQkZcdTAzMTNcdTAzMDBcdTAzQkZcdTAzMTRcdTAzMDBcdTAzQkZcdTAzMTNcdTAzMDFcdTAzQkYiKworICAgICAgICAiXHUwMzE0XHUwMzAxXHUwMzlGXHUwMzEzXHUwMzlGXHUwMzE0XHUwMzlGXHUwMzEzXHUwMzAwXHUwMzlGXHUwMzE0XHUwMzAwIisKKyAgICAgICAgIlx1MDM5Rlx1MDMxM1x1MDMwMVx1MDM5Rlx1MDMxNFx1MDMwMVx1MDNDNVx1MDMxM1x1MDNDNVx1MDMxNFx1MDNDNVx1MDMxMyIrCisgICAgICAgICJcdTAzMDBcdTAzQzVcdTAzMTRcdTAzMDBcdTAzQzVcdTAzMTNcdTAzMDFcdTAzQzVcdTAzMTRcdTAzMDFcdTAzQzVcdTAzMTMiKworICAgICAgICAiXHUwMzQyXHUwM0M1XHUwMzE0XHUwMzQyXHUwM0E1XHUwMzE0XHUwM0E1XHUwMzE0XHUwMzAwXHUwM0E1XHUwMzE0XHUwMzAxIisKKyAgICAgICAgIlx1MDNBNVx1MDMxNFx1MDM0Mlx1MDNDOVx1MDMxM1x1MDNDOVx1MDMxNFx1MDNDOVx1MDMxM1x1MDMwMFx1MDNDOVx1MDMxNCIrCisgICAgICAgICJcdTAzMDBcdTAzQzlcdTAzMTNcdTAzMDFcdTAzQzlcdTAzMTRcdTAzMDFcdTAzQzlcdTAzMTNcdTAzNDJcdTAzQzlcdTAzMTQiKworICAgICAgICAiXHUwMzQyXHUwM0E5XHUwMzEzXHUwM0E5XHUwMzE0XHUwM0E5XHUwMzEzXHUwMzAwXHUwM0E5XHUwMzE0XHUwMzAwXHUwM0E5IisKKyAgICAgICAgIlx1MDMxM1x1MDMwMVx1MDNBOVx1MDMxNFx1MDMwMVx1MDNBOVx1MDMxM1x1MDM0Mlx1MDNBOVx1MDMxNFx1MDM0Mlx1MDNCMSIrCisgICAgICAgICJcdTAzMDBcdTAzQjFcdTAzMDFcdTAzQjVcdTAzMDBcdTAzQjVcdTAzMDFcdTAzQjdcdTAzMDBcdTAzQjdcdTAzMDFcdTAzQjkiKworICAgICAgICAiXHUwMzAwXHUwM0I5XHUwMzAxXHUwM0JGXHUwMzAwXHUwM0JGXHUwMzAxXHUwM0M1XHUwMzAwXHUwM0M1XHUwMzAxXHUwM0M5IisKKyAgICAgICAgIlx1MDMwMFx1MDNDOVx1MDMwMVx1MDNCMVx1MDMxM1x1MDM0NVx1MDNCMVx1MDMxNFx1MDM0NVx1MDNCMVx1MDMxM1x1MDMwMCIrCisgICAgICAgICJcdTAzNDVcMDAwXHUwM0IxXHUwMzE0XHUwMzAwXHUwMzQ1XDAwMFx1MDNCMVx1MDMxM1x1MDMwMVx1MDM0NVwwMDBcdTAzQjEiKworICAgICAgICAiXHUwMzE0XHUwMzAxXHUwMzQ1XDAwMFx1MDNCMVx1MDMxM1x1MDM0Mlx1MDM0NVwwMDBcdTAzQjFcdTAzMTRcdTAzNDJcdTAzNDUiKworICAgICAgICAiXDAwMFx1MDM5MVx1MDMxM1x1MDM0NVx1MDM5MVx1MDMxNFx1MDM0NVx1MDM5MVx1MDMxM1x1MDMwMFx1MDM0NVwwMDBcdTAzOTEiKworICAgICAgICAiXHUwMzE0XHUwMzAwXHUwMzQ1XDAwMFx1MDM5MVx1MDMxM1x1MDMwMVx1MDM0NVwwMDBcdTAzOTFcdTAzMTRcdTAzMDFcdTAzNDUiKworICAgICAgICAiXDAwMFx1MDM5MVx1MDMxM1x1MDM0Mlx1MDM0NVwwMDBcdTAzOTFcdTAzMTRcdTAzNDJcdTAzNDVcMDAwXHUwM0I3XHUwMzEzIisKKyAgICAgICAgIlx1MDM0NVx1MDNCN1x1MDMxNFx1MDM0NVx1MDNCN1x1MDMxM1x1MDMwMFx1MDM0NVwwMDBcdTAzQjdcdTAzMTRcdTAzMDAiKworICAgICAgICAiXHUwMzQ1XDAwMFx1MDNCN1x1MDMxM1x1MDMwMVx1MDM0NVwwMDBcdTAzQjdcdTAzMTRcdTAzMDFcdTAzNDVcMDAwXHUwM0I3IisKKyAgICAgICAgIlx1MDMxM1x1MDM0Mlx1MDM0NVwwMDBcdTAzQjdcdTAzMTRcdTAzNDJcdTAzNDVcMDAwXHUwMzk3XHUwMzEzXHUwMzQ1XHUwMzk3IisKKyAgICAgICAgIlx1MDMxNFx1MDM0NVx1MDM5N1x1MDMxM1x1MDMwMFx1MDM0NVwwMDBcdTAzOTdcdTAzMTRcdTAzMDBcdTAzNDVcMDAwXHUwMzk3IisKKyAgICAgICAgIlx1MDMxM1x1MDMwMVx1MDM0NVwwMDBcdTAzOTdcdTAzMTRcdTAzMDFcdTAzNDVcMDAwXHUwMzk3XHUwMzEzXHUwMzQyXHUwMzQ1IisKKyAgICAgICAgIlwwMDBcdTAzOTdcdTAzMTRcdTAzNDJcdTAzNDVcMDAwXHUwM0M5XHUwMzEzXHUwMzQ1XHUwM0M5XHUwMzE0XHUwMzQ1XHUwM0M5IisKKyAgICAgICAgIlx1MDMxM1x1MDMwMFx1MDM0NVwwMDBcdTAzQzlcdTAzMTRcdTAzMDBcdTAzNDVcMDAwXHUwM0M5XHUwMzEzXHUwMzAxXHUwMzQ1IisKKyAgICAgICAgIlwwMDBcdTAzQzlcdTAzMTRcdTAzMDFcdTAzNDVcMDAwXHUwM0M5XHUwMzEzXHUwMzQyXHUwMzQ1XDAwMFx1MDNDOVx1MDMxNCIrCisgICAgICAgICJcdTAzNDJcdTAzNDVcMDAwXHUwM0E5XHUwMzEzXHUwMzQ1XHUwM0E5XHUwMzE0XHUwMzQ1XHUwM0E5XHUwMzEzXHUwMzAwIisKKyAgICAgICAgIlx1MDM0NVwwMDBcdTAzQTlcdTAzMTRcdTAzMDBcdTAzNDVcMDAwXHUwM0E5XHUwMzEzXHUwMzAxXHUwMzQ1XDAwMFx1MDNBOSIrCisgICAgICAgICJcdTAzMTRcdTAzMDFcdTAzNDVcMDAwXHUwM0E5XHUwMzEzXHUwMzQyXHUwMzQ1XDAwMFx1MDNBOVx1MDMxNFx1MDM0Mlx1MDM0NSIrCisgICAgICAgICJcMDAwXHUwM0IxXHUwMzA2XHUwM0IxXHUwMzA0XHUwM0IxXHUwMzAwXHUwMzQ1XHUwM0IxXHUwMzQ1XHUwM0IxXHUwMzAxIisKKyAgICAgICAgIlx1MDM0NVx1MDNCMVx1MDM0Mlx1MDNCMVx1MDM0Mlx1MDM0NVx1MDM5MVx1MDMwNlx1MDM5MVx1MDMwNFx1MDM5MVx1MDMwMCIrCisgICAgICAgICJcdTAzOTFcdTAzMDFcdTAzOTFcdTAzNDVcdTAzQjlcdTAwQThcdTAzNDJcdTAzQjdcdTAzMDBcdTAzNDVcdTAzQjdcdTAzNDUiKworICAgICAgICAiXHUwM0I3XHUwMzAxXHUwMzQ1XHUwM0I3XHUwMzQyXHUwM0I3XHUwMzQyXHUwMzQ1XHUwMzk1XHUwMzAwXHUwMzk1XHUwMzAxIisKKyAgICAgICAgIlx1MDM5N1x1MDMwMFx1MDM5N1x1MDMwMVx1MDM5N1x1MDM0NVx1MUZCRlx1MDMwMFx1MUZCRlx1MDMwMVx1MUZCRlx1MDM0MiIrCisgICAgICAgICJcdTAzQjlcdTAzMDZcdTAzQjlcdTAzMDRcdTAzQjlcdTAzMDhcdTAzMDBcdTAzQjlcdTAzMDhcdTAzMDFcdTAzQjlcdTAzNDIiKworICAgICAgICAiXHUwM0I5XHUwMzA4XHUwMzQyXHUwMzk5XHUwMzA2XHUwMzk5XHUwMzA0XHUwMzk5XHUwMzAwXHUwMzk5XHUwMzAxXHUxRkZFIisKKyAgICAgICAgIlx1MDMwMFx1MUZGRVx1MDMwMVx1MUZGRVx1MDM0Mlx1MDNDNVx1MDMwNlx1MDNDNVx1MDMwNFx1MDNDNVx1MDMwOFx1MDMwMCIrCisgICAgICAgICJcdTAzQzVcdTAzMDhcdTAzMDFcdTAzQzFcdTAzMTNcdTAzQzFcdTAzMTRcdTAzQzVcdTAzNDJcdTAzQzVcdTAzMDhcdTAzNDIiKworICAgICAgICAiXHUwM0E1XHUwMzA2XHUwM0E1XHUwMzA0XHUwM0E1XHUwMzAwXHUwM0E1XHUwMzAxXHUwM0ExXHUwMzE0XHUwMEE4XHUwMzAwIisKKyAgICAgICAgIlx1MDBBOFx1MDMwMWBcdTAzQzlcdTAzMDBcdTAzNDVcdTAzQzlcdTAzNDVcdTAzQzlcdTAzMDFcdTAzNDVcdTAzQzlcdTAzNDIiKworICAgICAgICAiXHUwM0M5XHUwMzQyXHUwMzQ1XHUwMzlGXHUwMzAwXHUwMzlGXHUwMzAxXHUwM0E5XHUwMzAwXHUwM0E5XHUwMzAxXHUwM0E5IisKKyAgICAgICAgIlx1MDM0NVx1MDBCNFx1MjAwMlx1MjAwM1x1MDNBOUtBXHUwMzBBXHUyMTkwXHUwMzM4XHUyMTkyXHUwMzM4XHUyMTk0XHUwMzM4IisKKyAgICAgICAgIlx1MjFEMFx1MDMzOFx1MjFENFx1MDMzOFx1MjFEMlx1MDMzOFx1MjIwM1x1MDMzOFx1MjIwOFx1MDMzOFx1MjIwQlx1MDMzOCIrCisgICAgICAgICJcdTIyMjNcdTAzMzhcdTIyMjVcdTAzMzhcdTIyM0NcdTAzMzhcdTIyNDNcdTAzMzhcdTIyNDVcdTAzMzhcdTIyNDhcdTAzMzgiKworICAgICAgICAiPVx1MDMzOFx1MjI2MVx1MDMzOFx1MjI0RFx1MDMzODxcdTAzMzg+XHUwMzM4XHUyMjY0XHUwMzM4XHUyMjY1XHUwMzM4IisKKyAgICAgICAgIlx1MjI3Mlx1MDMzOFx1MjI3M1x1MDMzOFx1MjI3Nlx1MDMzOFx1MjI3N1x1MDMzOFx1MjI3QVx1MDMzOFx1MjI3Qlx1MDMzOCIrCisgICAgICAgICJcdTIyODJcdTAzMzhcdTIyODNcdTAzMzhcdTIyODZcdTAzMzhcdTIyODdcdTAzMzhcdTIyQTJcdTAzMzhcdTIyQThcdTAzMzgiKworICAgICAgICAiXHUyMkE5XHUwMzM4XHUyMkFCXHUwMzM4XHUyMjdDXHUwMzM4XHUyMjdEXHUwMzM4XHUyMjkxXHUwMzM4XHUyMjkyXHUwMzM4IisKKyAgICAgICAgIlx1MjJCMlx1MDMzOFx1MjJCM1x1MDMzOFx1MjJCNFx1MDMzOFx1MjJCNVx1MDMzOFx1MzAwOFx1MzAwOVx1MzA0Qlx1MzA5OSIrCisgICAgICAgICJcdTMwNERcdTMwOTlcdTMwNEZcdTMwOTlcdTMwNTFcdTMwOTlcdTMwNTNcdTMwOTlcdTMwNTVcdTMwOTlcdTMwNTdcdTMwOTkiKworICAgICAgICAiXHUzMDU5XHUzMDk5XHUzMDVCXHUzMDk5XHUzMDVEXHUzMDk5XHUzMDVGXHUzMDk5XHUzMDYxXHUzMDk5XHUzMDY0XHUzMDk5IisKKyAgICAgICAgIlx1MzA2Nlx1MzA5OVx1MzA2OFx1MzA5OVx1MzA2Rlx1MzA5OVx1MzA2Rlx1MzA5QVx1MzA3Mlx1MzA5OVx1MzA3Mlx1MzA5QSIrCisgICAgICAgICJcdTMwNzVcdTMwOTlcdTMwNzVcdTMwOUFcdTMwNzhcdTMwOTlcdTMwNzhcdTMwOUFcdTMwN0JcdTMwOTlcdTMwN0JcdTMwOUEiKworICAgICAgICAiXHUzMDQ2XHUzMDk5XHUzMDlEXHUzMDk5XHUzMEFCXHUzMDk5XHUzMEFEXHUzMDk5XHUzMEFGXHUzMDk5XHUzMEIxXHUzMDk5IisKKyAgICAgICAgIlx1MzBCM1x1MzA5OVx1MzBCNVx1MzA5OVx1MzBCN1x1MzA5OVx1MzBCOVx1MzA5OVx1MzBCQlx1MzA5OVx1MzBCRFx1MzA5OSIrCisgICAgICAgICJcdTMwQkZcdTMwOTlcdTMwQzFcdTMwOTlcdTMwQzRcdTMwOTlcdTMwQzZcdTMwOTlcdTMwQzhcdTMwOTlcdTMwQ0ZcdTMwOTkiKworICAgICAgICAiXHUzMENGXHUzMDlBXHUzMEQyXHUzMDk5XHUzMEQyXHUzMDlBXHUzMEQ1XHUzMDk5XHUzMEQ1XHUzMDlBXHUzMEQ4XHUzMDk5IisKKyAgICAgICAgIlx1MzBEOFx1MzA5QVx1MzBEQlx1MzA5OVx1MzBEQlx1MzA5QVx1MzBBNlx1MzA5OVx1MzBFRlx1MzA5OVx1MzBGMFx1MzA5OSIrCisgICAgICAgICJcdTMwRjFcdTMwOTlcdTMwRjJcdTMwOTlcdTMwRkRcdTMwOTlcdThDNDhcdTY2RjRcdThFQ0FcdThDQzhcdTZFRDFcdTRFMzIiKworICAgICAgICAiXHU1M0U1XHU5RjlDXHU5RjlDXHU1OTUxXHU5MUQxXHU1NTg3XHU1OTQ4XHU2MUY2XHU3NjY5XHU3Rjg1XHU4NjNGXHU4N0JBIisKKyAgICAgICAgIlx1ODhGOFx1OTA4Rlx1NkEwMlx1NkQxQlx1NzBEOVx1NzNERVx1ODQzRFx1OTE2QVx1OTlGMVx1NEU4Mlx1NTM3NVx1NkIwNCIrCisgICAgICAgICJcdTcyMUJcdTg2MkRcdTlFMUVcdTVENTBcdTZGRUJcdTg1Q0RcdTg5NjRcdTYyQzlcdTgxRDhcdTg4MUZcdTVFQ0FcdTY3MTciKworICAgICAgICAiXHU2RDZBXHU3MkZDXHU5MENFXHU0Rjg2XHU1MUI3XHU1MkRFXHU2NEM0XHU2QUQzXHU3MjEwXHU3NkU3XHU4MDAxXHU4NjA2IisKKyAgICAgICAgIlx1ODY1Q1x1OERFRlx1OTczMlx1OUI2Rlx1OURGQVx1Nzg4Q1x1Nzk3Rlx1N0RBMFx1ODNDOVx1OTMwNFx1OUU3Rlx1OEFENiIrCisgICAgICAgICJcdTU4REZcdTVGMDRcdTdDNjBcdTgwN0VcdTcyNjJcdTc4Q0FcdThDQzJcdTk2RjdcdTU4RDhcdTVDNjJcdTZBMTNcdTZEREEiKworICAgICAgICAiXHU2RjBGXHU3RDJGXHU3RTM3XHU5NkZCXHU1MkQyXHU4MDhCXHU1MURDXHU1MUNDXHU3QTFDXHU3REJFXHU4M0YxXHU5Njc1IisKKyAgICAgICAgIlx1OEI4MFx1NjJDRlx1NkEwMlx1OEFGRVx1NEUzOVx1NUJFN1x1NjAxMlx1NzM4N1x1NzU3MFx1NTMxN1x1NzhGQlx1NEZCRiIrCisgICAgICAgICJcdTVGQTlcdTRFMERcdTZDQ0NcdTY1NzhcdTdEMjJcdTUzQzNcdTU4NUVcdTc3MDFcdTg0NDlcdThBQUFcdTZCQkFcdThGQjAiKworICAgICAgICAiXHU2Qzg4XHU2MkZFXHU4MkU1XHU2M0EwXHU3NTY1XHU0RUFFXHU1MTY5XHU1MUM5XHU2ODgxXHU3Q0U3XHU4MjZGXHU4QUQyIisKKyAgICAgICAgIlx1OTFDRlx1NTJGNVx1NTQ0Mlx1NTk3M1x1NUVFQ1x1NjVDNVx1NkZGRVx1NzkyQVx1OTVBRFx1OUE2QVx1OUU5N1x1OUVDRSIrCisgICAgICAgICJcdTUyOUJcdTY2QzZcdTZCNzdcdThGNjJcdTVFNzRcdTYxOTBcdTYyMDBcdTY0OUFcdTZGMjNcdTcxNDlcdTc0ODlcdTc5Q0EiKworICAgICAgICAiXHU3REY0XHU4MDZGXHU4RjI2XHU4NEVFXHU5MDIzXHU5MzRBXHU1MjE3XHU1MkEzXHU1NEJEXHU3MEM4XHU4OEMyXHU4QUFBIisKKyAgICAgICAgIlx1NUVDOVx1NUZGNVx1NjM3Qlx1NkJBRVx1N0MzRVx1NzM3NVx1NEVFNFx1NTZGOVx1NUJFN1x1NURCQVx1NjAxQ1x1NzNCMiIrCisgICAgICAgICJcdTc0NjlcdTdGOUFcdTgwNDZcdTkyMzRcdTk2RjZcdTk3NDhcdTk4MThcdTRGOEJcdTc5QUVcdTkxQjRcdTk2QjhcdTYwRTEiKworICAgICAgICAiXHU0RTg2XHU1MERBXHU1QkVFXHU1QzNGXHU2NTk5XHU2QTAyXHU3MUNFXHU3NjQyXHU4NEZDXHU5MDdDXHU5RjhEXHU2Njg4IisKKyAgICAgICAgIlx1OTYyRVx1NTI4OVx1Njc3Qlx1NjdGM1x1NkQ0MVx1NkU5Q1x1NzQwOVx1NzU1OVx1Nzg2Qlx1N0QxMFx1OTg1RVx1NTE2RCIrCisgICAgICAgICJcdTYyMkVcdTk2NzhcdTUwMkJcdTVEMTlcdTZERUFcdThGMkFcdTVGOEJcdTYxNDRcdTY4MTdcdTczODdcdTk2ODZcdTUyMjkiKworICAgICAgICAiXHU1NDBGXHU1QzY1XHU2NjEzXHU2NzRFXHU2OEE4XHU2Q0U1XHU3NDA2XHU3NUUyXHU3Rjc5XHU4OENGXHU4OEUxXHU5MUNDIisKKyAgICAgICAgIlx1OTZFMlx1NTMzRlx1NkVCQVx1NTQxRFx1NzFEMFx1NzQ5OFx1ODVGQVx1OTZBM1x1OUM1N1x1OUU5Rlx1Njc5N1x1NkRDQiIrCisgICAgICAgICJcdTgxRThcdTdBQ0JcdTdCMjBcdTdDOTJcdTcyQzBcdTcwOTlcdThCNThcdTRFQzBcdTgzMzZcdTUyM0FcdTUyMDdcdTVFQTYiKworICAgICAgICAiXHU2MkQzXHU3Q0Q2XHU1Qjg1XHU2RDFFXHU2NkI0XHU4RjNCXHU4ODRDXHU5NjREXHU4OThCXHU1RUQzXHU1MTQwXHU1NUMwIisKKyAgICAgICAgIlx1NTg1QVx1NjY3NFx1NTFERVx1NzMyQVx1NzZDQVx1NzkzQ1x1Nzk1RVx1Nzk2NVx1Nzk4Rlx1OTc1Nlx1N0NCRVx1N0ZCRCIrCisgICAgICAgICJcdTg2MTJcdThBRjhcdTkwMzhcdTkwRkRcdTk4RUZcdTk4RkNcdTk5MjhcdTlEQjRcdTA1RDlcdTA1QjRcdTA1RjJcdTA1QjciKworICAgICAgICAiXHUwNUU5XHUwNUMxXHUwNUU5XHUwNUMyXHUwNUU5XHUwNUJDXHUwNUMxXHUwNUU5XHUwNUJDXHUwNUMyXHUwNUQwXHUwNUI3IisKKyAgICAgICAgIlx1MDVEMFx1MDVCOFx1MDVEMFx1MDVCQ1x1MDVEMVx1MDVCQ1x1MDVEMlx1MDVCQ1x1MDVEM1x1MDVCQ1x1MDVENFx1MDVCQyIrCisgICAgICAgICJcdTA1RDVcdTA1QkNcdTA1RDZcdTA1QkNcdTA1RDhcdTA1QkNcdTA1RDlcdTA1QkNcdTA1REFcdTA1QkNcdTA1REJcdTA1QkMiKworICAgICAgICAiXHUwNURDXHUwNUJDXHUwNURFXHUwNUJDXHUwNUUwXHUwNUJDXHUwNUUxXHUwNUJDXHUwNUUzXHUwNUJDXHUwNUU0XHUwNUJDIisKKyAgICAgICAgIlx1MDVFNlx1MDVCQ1x1MDVFN1x1MDVCQ1x1MDVFOFx1MDVCQ1x1MDVFOVx1MDVCQ1x1MDVFQVx1MDVCQ1x1MDVENVx1MDVCOSIrCisgICAgICAgICJcdTA1RDFcdTA1QkZcdTA1REJcdTA1QkZcdTA1RTRcdTA1QkYiCisgICAgOworCisgICAgc3RhdGljIGZpbmFsIENvbXBhY3RCeXRlQXJyYXkgY2Fub25DbGFzcyA9IG5ldyBDb21wYWN0Qnl0ZUFycmF5KAorICAgICAgICAiXDAwMFx1MDIwMFx1QTVBNVwwMDZcMDAwXHUwMDgwXDAwMFwwMDBcdTAxMDBcMDAwXHUwMTgwXHUwMjAwXHUwMjgwXHUwMzAwIisKKyAgICAgICAgIlwwMDBcMDAwXDAwMFx1MDM4MFx1QTVBNVwwMDRcdTA0MDBcdTA0ODBcdTA1MDBcdTA0ODBcdTA0ODBcdTA1ODBcdTA2MDAiKworICAgICAgICAiXHUwNjgwXHUwNzAwXHUwNzgwXHUwODAwXHVBNUE1XDAxNlwwMDBcdTA4ODBcMDAwXHUwOTAwXHVBNUE1XDAxN1wwMDBcdTA5ODAiKworICAgICAgICAiXHVBNUE1XDAzNlwwMDBcdTBBMDBcdTBBODBcdUE1QTVcdTAxOTRcMDAwXHUwQjAwXHVBNUE1XDAwNVwwMDBcdTBCODBcMDAwIisKKyAgICAgICAgIlwwMDBcMDAwIgorICAgICAgICAsCisgICAgICAgICJcMDAwXHUwQzAwXHVBNTgwXHUwMEE1XHUxNUU2XHVFOEE1XHUwNERDXHVFOEQ4XHVBNTA1XHVEQ0NBXHVDQUE1XHUwNERDIisKKyAgICAgICAgIlx1Q0FDQVx1QTUwQlx1RENBNVx1MDUwMVx1QTUwNFx1RENBNVx1MDhFNlx1RjBFNlx1RENEQ1x1RENFNlx1RTZFNlx1RENEQyIrCisgICAgICAgICJcdUE1MTFcdTAwRUFcdUVBRTlcdUE1MjBcdTAwQTVcdTA0RTZcdUE1OEFcdTAwRENcdUE1MDRcdUU2RENcdUU2RTZcdUU2REUiKworICAgICAgICAiXHVEQ0E1XHUwNkU2XHUwMEE1XHUwNURDXHVFNkU2XHVEQ0U2XHVFNkRFXHVFNEU2XHUwQTBCXHUwQzBEXHUwRTBGXHUxMDExIisKKyAgICAgICAgIlx1MTIxM1wwMjRcdTE1MTZcMDI3XDAzMFx1MTkwMFx1RTZBNVx1ODYwMFx1MUIxQ1x1MUQxRVx1MUYyMFx1MjEyMlx1RTZFNiIrCisgICAgICAgICJcdURDQTVcdTFBMDBcdTIzQTVcdTY1MDBcdUE1MDdcdUU2MDBcdTAwQTVcdTA0RTZcdURDRTZcMDAwXHVFNkU2XHUwMERDIisKKyAgICAgICAgIlx1RTZFNlx1RENBNVx1MjMwMFx1MjRBNVx1MUUwMFx1RTZEQ1x1RTZFNlx1RENFNlx1RTZEQ1x1RENEQ1x1RTZEQ1x1RENFNiIrCisgICAgICAgICJcdURDRTZcdUU2RTZcdURDRTZcdURDRTZcdURDRTZcdURDRTZcdUU2QTVcdTcxMDBcdTA3QTVcdTEwMDBcdTA5MDBcMDAwIisKKyAgICAgICAgIlx1RTZEQ1x1RTZFNlx1QTU2N1wwMDdcdUE1MTBcMDExXHVBNTdGXDAxMVx1QTU3RlwwMTFcdUE1MDdUXHU1QkE1XHU3MzAwIisKKyAgICAgICAgIlx1MDlBNVx1NkQwMFx1Njc2N1x1MDlBNVx1MEQwMFx1QTUwNFx1NkJBNVx1NkMwMFx1NzY3Nlx1QTUwRVx1MDBBNVx1MDQ3QSIrCisgICAgICAgICJcdUE1NENcdTAwRENcdURDQTVcdTFCMDBcdURDMDBcdURDMDBcdUQ4QTVcdTM3MDBcdTgxODJcdTAwODRcdUE1MDVcdTAwQTUiKworICAgICAgICAiXHUwNDgyXDAwMFx1ODIwMFx1RTZFNlx1MDkwMFx1RTZFNlx1QTUzRVx1MDBEQ1x1QTU3MFwwMDdcMDExXHVBNTk4XDAxMSIrCisgICAgICAgICJcdUE1NTZcdTAwRTRcdUE1QTZcdTAwRTZcdUU2MDFcdTAxQTVcdTA0RTZcdTAxMDFcdTAxRTZcdUU2QTVcdTA0MDBcdUU2QTUiKworICAgICAgICAiXHU0ODAwXHVEQUU0XHVFOERFXHVFMEUwXHVBNTY5XDAxMFx1MDhBNVx1ODMwMFx1MUFBNVx1ODEwMFx1QTUwNFx1RTZBNSIrCisgICAgICAgICJcdTVDMDAiCisgICAgICAgICk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9EaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9EaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjRlMzRlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0RpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDU4OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvRGljdGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvci5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjE6NDIgJAorICogJFJldmlzaW9uOiAxLjExICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworaW1wb3J0IGphdmEudXRpbC5TdGFjazsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8qKgorICogQSBzdWJjbGFzcyBvZiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHRoYXQgYWRkcyB0aGUgYWJpbGl0eSB0byB1c2UgYSBkaWN0aW9uYXJ5CisgKiB0byBmdXJ0aGVyIHN1YmRpdmlkZSByYW5nZXMgb2YgdGV4dCBiZXlvbmQgd2hhdCBpcyBwb3NzaWJsZSB1c2luZyBqdXN0IHRoZQorICogc3RhdGUtdGFibGUtYmFzZWQgYWxnb3JpdGhtLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLCB0byBoYW5kbGUKKyAqIHdvcmQgYW5kIGxpbmUgYnJlYWtpbmcgaW4gVGhhaSwgd2hpY2ggZG9lc24ndCB1c2Ugc3BhY2VzIGJldHdlZW4gd29yZHMuICBUaGUKKyAqIHN0YXRlLXRhYmxlLWJhc2VkIGFsZ29yaXRobSB1c2VkIGJ5IFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgaXMgdXNlZCB0byBkaXZpZGUKKyAqIHVwIHRleHQgYXMgZmFyIGFzIHBvc3NpYmxlLCBhbmQgdGhlbiBjb250aWd1b3VzIHJhbmdlcyBvZiBsZXR0ZXJzIGFyZQorICogcmVwZWF0ZWRseSBjb21wYXJlZCBhZ2FpbnN0IGEgbGlzdCBvZiBrbm93biB3b3JkcyAoaS5lLiwgdGhlIGRpY3Rpb25hcnkpCisgKiB0byBkaXZpZGUgdGhlbSB1cCBpbnRvIHdvcmRzLgorICoKKyAqIERpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IgdXNlcyB0aGUgc2FtZSBydWxlIGxhbmd1YWdlIGFzIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IsCisgKiBidXQgYWRkcyBvbmUgbW9yZSBzcGVjaWFsIHN1YnN0aXR1dGlvbiBuYW1lOiBfZGljdGlvbmFyeV8uICBUaGlzIHN1YnN0aXR1dGlvbgorICogbmFtZSBpcyB1c2VkIHRvIGlkZW50aWZ5IGNoYXJhY3RlcnMgaW4gd29yZHMgaW4gdGhlIGRpY3Rpb25hcnkuICBUaGUgaWRlYSBpcyB0aGF0CisgKiBpZiB0aGUgaXRlcmF0b3IgcGFzc2VzIG92ZXIgYSBjaHVuayBvZiB0ZXh0IHRoYXQgaW5jbHVkZXMgdHdvIG9yIG1vcmUgY2hhcmFjdGVycworICogaW4gYSByb3cgdGhhdCBhcmUgaW5jbHVkZWQgaW4gX2RpY3Rpb25hcnlfLCBpdCBnb2VzIGJhY2sgdGhyb3VnaCB0aGF0IHJhbmdlIGFuZAorICogZGVyaXZlcyBhZGRpdGlvbmFsIGJyZWFrIHBvc2l0aW9ucyAoaWYgcG9zc2libGUpIHVzaW5nIHRoZSBkaWN0aW9uYXJ5LgorICoKKyAqIERpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IgaXMgYWxzbyBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBmaWxlbmFtZSBvZiBhIGRpY3Rpb25hcnkKKyAqIGZpbGUuICBJdCB1c2VzIENsYXNzLmdldFJlc291cmNlKCkgdG8gbG9jYXRlIHRoZSBkaWN0aW9uYXJ5IGZpbGUuICBUaGUKKyAqIGRpY3Rpb25hcnkgZmlsZSBpcyBpbiBhIHNlcmlhbGl6ZWQgYmluYXJ5IGZvcm1hdC4gIFdlIGhhdmUgYSB2ZXJ5IHByaW1pdGl2ZSAoYW5kCisgKiBzbG93KSBCdWlsZERpY3Rpb25hcnlGaWxlIHV0aWxpdHkgZm9yIGNyZWF0aW5nIGRpY3Rpb25hcnkgZmlsZXMsIGJ1dCBhcmVuJ3QKKyAqIGN1cnJlbnRseSBtYWtpbmcgaXQgcHVibGljLiAgQ29udGFjdCB1cyBmb3IgaGVscC4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGNsYXNzIERpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IgZXh0ZW5kcyBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHsKKworICAgIC8qKgorICAgICAqIGEgbGlzdCBvZiBrbm93biB3b3JkcyB0aGF0IGlzIHVzZWQgdG8gZGl2aWRlIHVwIGNvbnRpZ3VvdXMgcmFuZ2VzIG9mIGxldHRlcnMsCisgICAgICogc3RvcmVkIGluIGEgY29tcHJlc3NlZCwgaW5kZXhlZCwgZm9ybWF0IHRoYXQgb2ZmZXJzIGZhc3QgYWNjZXNzCisgICAgICovCisgICAgcHJpdmF0ZSBCcmVha0RpY3Rpb25hcnkgZGljdGlvbmFyeTsKKworICAgIC8qKgorICAgICAqIGEgbGlzdCBvZiBmbGFncyBpbmRpY2F0aW5nIHdoaWNoIGNoYXJhY3RlciBjYXRlZ29yaWVzIGFyZSBjb250YWluZWQgaW4KKyAgICAgKiB0aGUgZGljdGlvbmFyeSBmaWxlICh0aGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHJhbmdlcyBvZiBjaGFyYWN0ZXJzCisgICAgICogdG8gYXBwbHkgdGhlIGRpY3Rpb25hcnkgdG8pCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuW10gY2F0ZWdvcnlGbGFnczsKKworICAgIC8qKgorICAgICAqIGEgdGVtcG9yYXJ5IGhpZGluZyBwbGFjZSBmb3IgdGhlIG51bWJlciBvZiBkaWN0aW9uYXJ5IGNoYXJhY3RlcnMgaW4gdGhlCisgICAgICogbGFzdCByYW5nZSBwYXNzZWQgb3ZlciBieSBuZXh0KCkKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBkaWN0aW9uYXJ5Q2hhckNvdW50OworCisgICAgLyoqCisgICAgICogd2hlbiBhIHJhbmdlIG9mIGNoYXJhY3RlcnMgaXMgZGl2aWRlZCB1cCB1c2luZyB0aGUgZGljdGlvbmFyeSwgdGhlIGJyZWFrCisgICAgICogcG9zaXRpb25zIHRoYXQgYXJlIGRpc2NvdmVyZWQgYXJlIHN0b3JlZCBoZXJlLCBwcmV2ZW50aW5nIHVzIGZyb20gaGF2aW5nCisgICAgICogdG8gdXNlIGVpdGhlciB0aGUgZGljdGlvbmFyeSBvciB0aGUgc3RhdGUgdGFibGUgYWdhaW4gdW50aWwgdGhlIGl0ZXJhdG9yCisgICAgICogbGVhdmVzIHRoaXMgcmFuZ2Ugb2YgdGV4dAorICAgICAqLworICAgIHByaXZhdGUgaW50W10gY2FjaGVkQnJlYWtQb3NpdGlvbnM7CisKKyAgICAvKioKKyAgICAgKiBpZiBjYWNoZWRCcmVha1Bvc2l0aW9ucyBpcyBub3QgbnVsbCwgdGhpcyBpbmRpY2F0ZXMgd2hpY2ggaXRlbSBpbiB0aGUKKyAgICAgKiBjYWNoZSB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gcmVmZXJzIHRvCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcG9zaXRpb25JbkNhY2hlOworCisgICAgLyoqCisgICAgICogU3BlY2lhbCB2YXJpYWJsZSBuYW1lIGZvciBjaGFyYWN0ZXJzIGluIHdvcmRzIGluIGRpY3Rpb25hcnkKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElDVElPTkFSWV9WQVIgPSAiX2RpY3Rpb25hcnlfIjsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yLgorICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBTYW1lIGFzIHRoZSBkZXNjcmlwdGlvbiBwYXJhbWV0ZXIgb24gUnVsZUJhc2VkQnJlYWtJdGVyYXRvciwKKyAgICAgKiBleGNlcHQgZm9yIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgRElDVElPTkFSWV9WQVIuICBUaGlzIHBhcmFtZXRlciBpcyBqdXN0CisgICAgICogcGFzc2VkIHRocm91Z2ggdG8gUnVsZUJhc2VkQnJlYWtJdGVyYXRvcidzIGNvbnN0cnVjdG9yLgorICAgICAqIEBwYXJhbSBkaWN0aW9uYXJ5RmlsZW5hbWUgVGhlIGZpbGVuYW1lIG9mIHRoZSBkaWN0aW9uYXJ5IGZpbGUgdG8gdXNlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIERpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IoU3RyaW5nIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGRpY3Rpb25hcnlTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgZGljdGlvbmFyeSA9IG5ldyBCcmVha0RpY3Rpb25hcnkoZGljdGlvbmFyeVN0cmVhbSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIEJ1aWxkZXIgdGhhdCBpcyBjdXN0b21pemVkIHRvIGJ1aWxkIGEgRGljdGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvci4KKyAgICAgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuQnVpbGRlciwgZXhjZXB0IGZvciB0aGUgZXh0cmEgY29kZQorICAgICAqIHRvIGhhbmRsZSB0aGUgRElDVElPTkFSWV9WQVIgdGFnLgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIHByb3RlY3RlZCBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLkJ1aWxkZXIgbWFrZUJ1aWxkZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcigpOworICAgIH0KKworLyoqIEBpbnRlcm5hbCAqLworcHVibGljIHZvaWQgd3JpdGVUYWJsZXNUb0ZpbGUoRmlsZU91dHB1dFN0cmVhbSBmaWxlLCBib29sZWFuIGxpdHRsZUVuZGlhbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKK3N1cGVyLndyaXRlVGFibGVzVG9GaWxlKGZpbGUsIGxpdHRsZUVuZGlhbik7CisKK0RhdGFPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IERhdGFPdXRwdXRTdHJlYW0oZmlsZSk7CisKKy8vIC0tLSB3cml0ZSBpbmRleCB0byBmaWVsZHMgKHRoZXJlJ3Mgb25seSBvbmUgZW50cnksIGJ1dCB0aGlzIGFsbG93cyBzdWJjbGFzc2luZyBvZiB0aGlzIGNsYXNzKQord3JpdGVTd2FwcGVkSW50KChzaG9ydCk4LCBvdXQsIGxpdHRsZUVuZGlhbik7Cit3cml0ZVN3YXBwZWRJbnQoKHNob3J0KShjYXRlZ29yeUZsYWdzLmxlbmd0aCArIDMgJiAweDBmKSwgb3V0LCBsaXR0bGVFbmRpYW4pOworCitmb3IgKGludCBpID0gMDsgaSA8IGNhdGVnb3J5RmxhZ3MubGVuZ3RoOyBpKyspCisgICAgb3V0LndyaXRlQm9vbGVhbihjYXRlZ29yeUZsYWdzW2ldKTsKK3N3aXRjaCAoY2F0ZWdvcnlGbGFncy5sZW5ndGggJSA0KSB7CisgICAgY2FzZSAxOiBvdXQud3JpdGUoMCk7CisgICAgY2FzZSAyOiBvdXQud3JpdGUoMCk7CisgICAgY2FzZSAzOiBvdXQud3JpdGUoMCk7CisgICAgZGVmYXVsdDogYnJlYWs7Cit9Cit9CisKKyAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCisgICAgcHVibGljIHZvaWQgc2V0VGV4dChDaGFyYWN0ZXJJdGVyYXRvciBuZXdUZXh0KSB7CisgICAgICAgIHN1cGVyLnNldFRleHQobmV3VGV4dCk7CisgICAgICAgIGNhY2hlZEJyZWFrUG9zaXRpb25zID0gbnVsbDsKKyAgICAgICAgZGljdGlvbmFyeUNoYXJDb3VudCA9IDA7CisgICAgICAgIHBvc2l0aW9uSW5DYWNoZSA9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dC4KKyAgICAgKiAoaS5lLiwgdGhlIENoYXJhY3Rlckl0ZXJhdG9yJ3Mgc3RhcnRpbmcgb2Zmc2V0KS4KKyAgICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGZpcnN0KCkgeworICAgICAgICBjYWNoZWRCcmVha1Bvc2l0aW9ucyA9IG51bGw7CisgICAgICAgIGRpY3Rpb25hcnlDaGFyQ291bnQgPSAwOworICAgICAgICBwb3NpdGlvbkluQ2FjaGUgPSAwOworICAgICAgICByZXR1cm4gc3VwZXIuZmlyc3QoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0LgorICAgICAqIChpLmUuLCB0aGUgQ2hhcmFjdGVySXRlcmF0b3IncyBlbmRpbmcgb2Zmc2V0KS4KKyAgICAgKiBAcmV0dXJuIFRoZSB0ZXh0J3MgcGFzdC10aGUtZW5kIG9mZnNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGxhc3QoKSB7CisgICAgICAgIGNhY2hlZEJyZWFrUG9zaXRpb25zID0gbnVsbDsKKyAgICAgICAgZGljdGlvbmFyeUNoYXJDb3VudCA9IDA7CisgICAgICAgIHBvc2l0aW9uSW5DYWNoZSA9IDA7CisgICAgICAgIHJldHVybiBzdXBlci5sYXN0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWR2YW5jZXMgdGhlIGl0ZXJhdG9yIG9uZSBzdGVwIGJhY2t3YXJkcy4KKyAgICAgKiBAcmV0dXJuIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBib3VuZGFyeSBwb3NpdGlvbiBiZWZvcmUgdGhlCisgICAgICogY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHByZXZpb3VzKCkgeworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0ID0gZ2V0VGV4dCgpOworCisgICAgICAgIC8vIGlmIHdlIGhhdmUgY2FjaGVkIGJyZWFrIHBvc2l0aW9ucyBhbmQgd2UncmUgc3RpbGwgaW4gdGhlIHJhbmdlCisgICAgICAgIC8vIGNvdmVyZWQgYnkgdGhlbSwganVzdCBtb3ZlIG9uZSBzdGVwIGJhY2t3YXJkIGluIHRoZSBjYWNoZQorICAgICAgICBpZiAoY2FjaGVkQnJlYWtQb3NpdGlvbnMgIT0gbnVsbCAmJiBwb3NpdGlvbkluQ2FjaGUgPiAwKSB7CisgICAgICAgICAgICAtLXBvc2l0aW9uSW5DYWNoZTsKKyAgICAgICAgICAgIHRleHQuc2V0SW5kZXgoY2FjaGVkQnJlYWtQb3NpdGlvbnNbcG9zaXRpb25JbkNhY2hlXSk7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVkQnJlYWtQb3NpdGlvbnNbcG9zaXRpb25JbkNhY2hlXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG90aGVyd2lzZSwgZHVtcCB0aGUgY2FjaGUgYW5kIHVzZSB0aGUgaW5oZXJpdGVkIHByZXZpb3VzKCkgbWV0aG9kIHRvIG1vdmUKKyAgICAgICAgLy8gYmFja3dhcmQuICBUaGlzIG1heSBmaWxsIHVwIHRoZSBjYWNoZSB3aXRoIG5ldyBicmVhayBwb3NpdGlvbnMsIGluIHdoaWNoCisgICAgICAgIC8vIGNhc2Ugd2UgaGF2ZSB0byBtYXJrIG91ciBwb3NpdGlvbiBpbiB0aGUgY2FjaGUKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjYWNoZWRCcmVha1Bvc2l0aW9ucyA9IG51bGw7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gc3VwZXIucHJldmlvdXMoKTsKKyAgICAgICAgICAgIGlmIChjYWNoZWRCcmVha1Bvc2l0aW9ucyAhPSBudWxsKQorICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5DYWNoZSA9IGNhY2hlZEJyZWFrUG9zaXRpb25zLmxlbmd0aCAtIDI7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gdG8gdGhlIGxhc3QgYm91bmRhcnkgcG9zaXRpb24KKyAgICAgKiBiZWZvcmUgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBwb3NpdGlvbiB0byBiZWdpbiBzZWFyY2hpbmcgZnJvbQorICAgICAqIEByZXR1cm4gVGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGJvdW5kYXJ5IGJlZm9yZSAib2Zmc2V0IgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgcHJlY2VkaW5nKGludCBvZmZzZXQpIHsKKyAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgdGV4dCA9IGdldFRleHQoKTsKKyAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCB0ZXh0KTsKKworICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIGNhY2hlZCBicmVhayBwb3NpdGlvbnMsIG9yICJvZmZzZXQiIGlzIG91dHNpZGUgdGhlCisgICAgICAgIC8vIHJhbmdlIGNvdmVyZWQgYnkgdGhlIGNhY2hlLCB3ZSBjYW4ganVzdCBjYWxsIHRoZSBpbmhlcml0ZWQgcm91dGluZQorICAgICAgICAvLyAod2hpY2ggd2lsbCBldmVudHVhbGx5IGNhbGwgb3RoZXIgcm91dGluZXMgaW4gdGhpcyBjbGFzcyB0aGF0IG1heQorICAgICAgICAvLyByZWZyZXNoIHRoZSBjYWNoZSkKKyAgICAgICAgaWYgKGNhY2hlZEJyZWFrUG9zaXRpb25zID09IG51bGwgfHwgb2Zmc2V0IDw9IGNhY2hlZEJyZWFrUG9zaXRpb25zWzBdIHx8CisgICAgICAgICAgICAgICAgb2Zmc2V0ID4gY2FjaGVkQnJlYWtQb3NpdGlvbnNbY2FjaGVkQnJlYWtQb3NpdGlvbnMubGVuZ3RoIC0gMV0pIHsKKyAgICAgICAgICAgIGNhY2hlZEJyZWFrUG9zaXRpb25zID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBzdXBlci5wcmVjZWRpbmcob2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG9uIHRoZSBvdGhlciBoYW5kLCBpZiAib2Zmc2V0IiBpcyB3aXRoaW4gdGhlIHJhbmdlIGNvdmVyZWQgYnkgdGhlIGNhY2hlLAorICAgICAgICAvLyB0aGVuIGFsbCB3ZSBoYXZlIHRvIGRvIGlzIHNlYXJjaCB0aGUgY2FjaGUgZm9yIHRoZSBsYXN0IGJyZWFrIHBvc2l0aW9uCisgICAgICAgIC8vIGJlZm9yZSAib2Zmc2V0IgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBvc2l0aW9uSW5DYWNoZSA9IDA7CisgICAgICAgICAgICB3aGlsZSAocG9zaXRpb25JbkNhY2hlIDwgY2FjaGVkQnJlYWtQb3NpdGlvbnMubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgJiYgb2Zmc2V0ID4gY2FjaGVkQnJlYWtQb3NpdGlvbnNbcG9zaXRpb25JbkNhY2hlXSkKKyAgICAgICAgICAgICAgICArK3Bvc2l0aW9uSW5DYWNoZTsKKyAgICAgICAgICAgIC0tcG9zaXRpb25JbkNhY2hlOworICAgICAgICAgICAgdGV4dC5zZXRJbmRleChjYWNoZWRCcmVha1Bvc2l0aW9uc1twb3NpdGlvbkluQ2FjaGVdKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0LmdldEluZGV4KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiB0byB0aGUgZmlyc3QgYm91bmRhcnkgcG9zaXRpb24gYWZ0ZXIKKyAgICAgKiB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgorICAgICAqIEBwYXJhbSBvZmZzZXQgVGhlIHBvc2l0aW9uIHRvIGJlZ2luIHNlYXJjaGluZyBmb3J3YXJkIGZyb20KKyAgICAgKiBAcmV0dXJuIFRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYm91bmRhcnkgYWZ0ZXIgIm9mZnNldCIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGZvbGxvd2luZyhpbnQgb2Zmc2V0KSB7CisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIHRleHQgPSBnZXRUZXh0KCk7CisgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgdGV4dCk7CisKKyAgICAgICAgLy8gaWYgd2UgaGF2ZSBubyBjYWNoZWQgYnJlYWsgcG9zaXRpb25zLCBvciBpZiAib2Zmc2V0IiBpcyBvdXRzaWRlIHRoZQorICAgICAgICAvLyByYW5nZSBjb3ZlcmVkIGJ5IHRoZSBjYWNoZSwgdGhlbiBkdW1wIHRoZSBjYWNoZSBhbmQgY2FsbCBvdXIKKyAgICAgICAgLy8gaW5oZXJpdGVkIGZvbGxvd2luZygpIG1ldGhvZC4gIFRoaXMgd2lsbCBjYWxsIG90aGVyIG1ldGhvZHMgaW4gdGhpcworICAgICAgICAvLyBjbGFzcyB0aGF0IG1heSByZWZyZXNoIHRoZSBjYWNoZS4KKyAgICAgICAgaWYgKGNhY2hlZEJyZWFrUG9zaXRpb25zID09IG51bGwgfHwgb2Zmc2V0IDwgY2FjaGVkQnJlYWtQb3NpdGlvbnNbMF0gfHwKKyAgICAgICAgICAgICAgICBvZmZzZXQgPj0gY2FjaGVkQnJlYWtQb3NpdGlvbnNbY2FjaGVkQnJlYWtQb3NpdGlvbnMubGVuZ3RoIC0gMV0pIHsKKyAgICAgICAgICAgIGNhY2hlZEJyZWFrUG9zaXRpb25zID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBzdXBlci5mb2xsb3dpbmcob2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG9uIHRoZSBvdGhlciBoYW5kLCBpZiAib2Zmc2V0IiBpcyB3aXRoaW4gdGhlIHJhbmdlIGNvdmVyZWQgYnkgdGhlCisgICAgICAgIC8vIGNhY2hlLCB0aGVuIGp1c3Qgc2VhcmNoIHRoZSBjYWNoZSBmb3IgdGhlIGZpcnN0IGJyZWFrIHBvc2l0aW9uCisgICAgICAgIC8vIGFmdGVyICJvZmZzZXQiCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcG9zaXRpb25JbkNhY2hlID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbkluQ2FjaGUgPCBjYWNoZWRCcmVha1Bvc2l0aW9ucy5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAmJiBvZmZzZXQgPj0gY2FjaGVkQnJlYWtQb3NpdGlvbnNbcG9zaXRpb25JbkNhY2hlXSkKKyAgICAgICAgICAgICAgICArK3Bvc2l0aW9uSW5DYWNoZTsKKyAgICAgICAgICAgIHRleHQuc2V0SW5kZXgoY2FjaGVkQnJlYWtQb3NpdGlvbnNbcG9zaXRpb25JbkNhY2hlXSk7CisgICAgICAgICAgICByZXR1cm4gdGV4dC5nZXRJbmRleCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24gZm9yIG5leHQoKS4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZU5leHQoKSB7CisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIHRleHQgPSBnZXRUZXh0KCk7CisKKyAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIGNhY2hlZCBicmVhayBwb3NpdGlvbnMsIG9yIGlmIHdlJ3ZlIGp1c3QgbW92ZWQKKyAgICAgICAgLy8gb2ZmIHRoZSBlbmQgb2YgdGhlIHJhbmdlIGNvdmVyZWQgYnkgdGhlIGNhY2hlLCB3ZSBoYXZlIHRvIGR1bXAKKyAgICAgICAgLy8gYW5kIHBvc3NpYmx5IHJlZ2VuZXJhdGUgdGhlIGNhY2hlCisgICAgICAgIGlmIChjYWNoZWRCcmVha1Bvc2l0aW9ucyA9PSBudWxsIHx8IHBvc2l0aW9uSW5DYWNoZSA9PSBjYWNoZWRCcmVha1Bvc2l0aW9ucy5sZW5ndGggLSAxKSB7CisKKyAgICAgICAgICAgIC8vIHN0YXJ0IGJ5IHVzaW5nIHRoZSBpbmhlcml0ZWQgaGFuZGxlTmV4dCgpIHRvIGZpbmQgYSB0ZW50YXRpdmUgcmV0dXJuCisgICAgICAgICAgICAvLyB2YWx1ZS4gICBkaWN0aW9uYXJ5Q2hhckNvdW50IHRlbGxzIHVzIGhvdyBtYW55IGRpY3Rpb25hcnkgY2hhcmFjdGVycworICAgICAgICAgICAgLy8gd2UgcGFzc2VkIG92ZXIgb24gb3VyIHdheSB0byB0aGUgdGVudGF0aXZlIHJldHVybiB2YWx1ZQorICAgICAgICAgICAgaW50IHN0YXJ0UG9zID0gdGV4dC5nZXRJbmRleCgpOworICAgICAgICAgICAgZGljdGlvbmFyeUNoYXJDb3VudCA9IDA7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gc3VwZXIuaGFuZGxlTmV4dCgpOworCisgICAgICAgICAgICAvLyBpZiB3ZSBwYXNzZWQgb3ZlciBtb3JlIHRoYW4gb25lIGRpY3Rpb25hcnkgY2hhcmFjdGVyLCB0aGVuIHdlIHVzZQorICAgICAgICAgICAgLy8gZGl2aWRlVXBEaWN0aW9uYXJ5UmFuZ2UoKSB0byByZWdlbmVyYXRlIHRoZSBjYWNoZWQgYnJlYWsgcG9zaXRpb25zCisgICAgICAgICAgICAvLyBmb3IgdGhlIG5ldyByYW5nZQorICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnlDaGFyQ291bnQgPiAxICYmIHJlc3VsdCAtIHN0YXJ0UG9zID4gMSkgeworICAgICAgICAgICAgICAgIGRpdmlkZVVwRGljdGlvbmFyeVJhbmdlKHN0YXJ0UG9zLCByZXN1bHQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSB2YWx1ZSB3ZSBnb3QgYmFjayBmcm9tIHRoZSBpbmhlcml0ZWQgZnVjdGlvbgorICAgICAgICAgICAgLy8gaXMgb3VyIHJldHVybiB2YWx1ZSwgYW5kIHdlIGNhbiBkdW1wIHRoZSBjYWNoZQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY2FjaGVkQnJlYWtQb3NpdGlvbnMgPSBudWxsOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgY2FjaGUgb2YgYnJlYWsgcG9zaXRpb25zIGhhcyBiZWVuIHJlZ2VuZXJhdGVkIChvciBleGlzdGVkIGFsbAorICAgICAgICAvLyBhbG9uZyksIHRoZW4ganVzdCBhZHZhbmNlIHRvIHRoZSBuZXh0IGJyZWFrIHBvc2l0aW9uIGluIHRoZSBjYWNoZQorICAgICAgICAvLyBhbmQgcmV0dXJuIGl0CisgICAgICAgIGlmIChjYWNoZWRCcmVha1Bvc2l0aW9ucyAhPSBudWxsKSB7CisgICAgICAgICAgICArK3Bvc2l0aW9uSW5DYWNoZTsKKyAgICAgICAgICAgIHRleHQuc2V0SW5kZXgoY2FjaGVkQnJlYWtQb3NpdGlvbnNbcG9zaXRpb25JbkNhY2hlXSk7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVkQnJlYWtQb3NpdGlvbnNbcG9zaXRpb25JbkNhY2hlXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTk5OTk7ICAgLy8gU0hPVUxEIE5FVkVSIEdFVCBIRVJFIQorICAgIH0KKworICAgIC8qKgorICAgICAqIExvb2tzIHVwIGEgY2hhcmFjdGVyIGNhdGVnb3J5IGZvciBhIGNoYXJhY3Rlci4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGxvb2t1cENhdGVnb3J5KGNoYXIgYykgeworICAgICAgICAvLyB0aGlzIG92ZXJyaWRlIG9mIGxvb2t1cENhdGVnb3J5KCkgZXhpc3RzIG9ubHkgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIHdlJ3ZlCisgICAgICAgIC8vIHBhc3NlZCBvdmVyIGFueSBkaWN0aW9uYXJ5IGNoYXJhY3RlcnMuICBJdCBjYWxscyB0aGUgaW5oZXJpdGVkIGxvb2t1cENhdGVnb3J5KCkKKyAgICAgICAgLy8gdG8gZG8gdGhlIHJlYWwgd29yaywgYW5kIHRoZW4gY2hlY2tzIHdoZXRoZXIgaXRzIHJldHVybiB2YWx1ZSBpcyBvbmUgb2YgdGhlCisgICAgICAgIC8vIGNhdGVnb3JpZXMgcmVwcmVzZW50ZWQgaW4gdGhlIGRpY3Rpb25hcnkuICBJZiBpdCBpcywgYnVtcCB0aGUgZGljdGlvbmFyeS0KKyAgICAgICAgLy8gY2hhcmFjdGVyIGNvdW50LgorICAgICAgICBpbnQgcmVzdWx0ID0gc3VwZXIubG9va3VwQ2F0ZWdvcnkoYyk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5JR05PUkUgJiYgY2F0ZWdvcnlGbGFnc1tyZXN1bHRdKSB7CisgICAgICAgICAgICArK2RpY3Rpb25hcnlDaGFyQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGltcGxlbWVudHMgdGhlIGRpY3Rpb25hcnktYmFzZWQKKyAgICAgKiBhbGdvcml0aG0uICBHaXZlbiB0aGUgZW5kcG9pbnRzIG9mIGEgcmFuZ2Ugb2YgdGV4dCwgaXQgdXNlcyB0aGUKKyAgICAgKiBkaWN0aW9uYXJ5IHRvIGRldGVybWluZSB0aGUgcG9zaXRpb25zIG9mIGFueSBib3VuZGFyaWVzIGluIHRoaXMKKyAgICAgKiByYW5nZS4gIEl0IHN0b3JlcyBhbGwgdGhlIGJvdW5kYXJ5IHBvc2l0aW9ucyBpdCBkaXNjb3ZlcnMgaW4KKyAgICAgKiBjYWNoZWRCcmVha1Bvc2l0aW9ucyBzbyB0aGF0IHdlIG9ubHkgaGF2ZSB0byBkbyB0aGlzIHdvcmsgb25jZQorICAgICAqIGZvciBlYWNoIHRpbWUgd2UgZW50ZXIgdGhlIHJhbmdlLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBkaXZpZGVVcERpY3Rpb25hcnlSYW5nZShpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIHsKKyAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgdGV4dCA9IGdldFRleHQoKTsKKworICAgICAgICAvLyB0aGUgcmFuZ2Ugd2UncmUgZGl2aWRpbmcgbWF5IGJlZ2luIG9yIGVuZCB3aXRoIG5vbi1kaWN0aW9uYXJ5IGNoYXJhY3RlcnMKKyAgICAgICAgLy8gKGkuZS4sIGZvciBsaW5lIGJyZWFraW5nLCB3ZSBtYXkgaGF2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHB1bmN0dWF0aW9uCisgICAgICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUga2VwdCB3aXRoIHRoZSB3b3JkKS4gIFNlZWsgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICAgICAvLyByYW5nZSB0byB0aGUgZmlyc3QgZGljdGlvbmFyeSBjaGFyYWN0ZXIKKyAgICAgICAgdGV4dC5zZXRJbmRleChzdGFydFBvcyk7CisgICAgICAgIGNoYXIgYyA9IHRleHQuY3VycmVudCgpOworICAgICAgICBpbnQgY2F0ZWdvcnkgPSBsb29rdXBDYXRlZ29yeShjKTsKKyAgICAgICAgd2hpbGUgKGNhdGVnb3J5ID09IElHTk9SRSB8fCAhY2F0ZWdvcnlGbGFnc1tjYXRlZ29yeV0pIHsKKyAgICAgICAgICAgIGMgPSB0ZXh0Lm5leHQoKTsKKyAgICAgICAgICAgIGNhdGVnb3J5ID0gbG9va3VwQ2F0ZWdvcnkoYyk7CisgICAgICAgIH0KKy8vU3lzdGVtLm91dC5wcmludGxuKCJcbkRpdmlkaW5nIHVwIHJhbmdlIGZyb20gIiArICh0ZXh0LmdldEluZGV4KCkgKyAxKSArICIgdG8gIiArIGVuZFBvcyk7CisKKyAgICAgICAgLy8gaW5pdGlhbGl6ZS4gIFdlIG1haW50YWluIHR3byBzdGFja3M6IGN1cnJlbnRCcmVha1Bvc2l0aW9ucyBjb250YWlucworICAgICAgICAvLyB0aGUgbGlzdCBvZiBicmVhayBwb3NpdGlvbnMgdGhhdCB3aWxsIGJlIHJldHVybmVkIGlmIHdlIHN1Y2Nlc3NmdWxseQorICAgICAgICAvLyBmaW5pc2ggdHJhdmVyc2luZyB0aGUgd2hvbGUgcmFuZ2Ugbm93LiAgcG9zc2libGVCcmVha1Bvc2l0aW9ucyBsaXN0cworICAgICAgICAvLyBhbGwgb3RoZXIgcG9zc2libGUgd29yZCBlbmRzIHdlJ3ZlIHBhc3NlZCBhbG9uZyB0aGUgd2F5LiAgKFdoZW5ldmVyCisgICAgICAgIC8vIHdlIHJlYWNoIGFuIGVycm9yIFthIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZWdpbiBhbnkgd29yZAorICAgICAgICAvLyBpbiB0aGUgZGljdGlvbmFyeV0sIHdlIGJhY2sgdXAsIHBvc3NpYmx5IGRlbGV0ZSBzb21lIGJyZWFrcyBmcm9tCisgICAgICAgIC8vIGN1cnJlbnRCcmVha1Bvc2l0aW9ucywgbW92ZSBhIGJyZWFrIGZyb20gcG9zc2libGVCcmVha1Bvc2l0aW9ucworICAgICAgICAvLyB0byBjdXJyZW50QnJlYWtQb3NpdGlvbnMsIGFuZCBzdGFydCBvdmVyIGZyb20gdGhlcmUuICBUaGlzIHByb2Nlc3MKKyAgICAgICAgLy8gY29udGludWVzIGluIHRoaXMgd2F5IHVudGlsIHdlIGVpdGhlciBzdWNjZXNzZnVsbHkgbWFrZSBpdCBhbGwgdGhlIHdheQorICAgICAgICAvLyBhY3Jvc3MgdGhlIHJhbmdlLCBvciBleGhhdXN0IGFsbCBvZiBvdXIgY29tYmluYXRpb25zIG9mIGJyZWFrCisgICAgICAgIC8vIHBvc2l0aW9ucy4pCisgICAgICAgIFN0YWNrIGN1cnJlbnRCcmVha1Bvc2l0aW9ucyA9IG5ldyBTdGFjaygpOworICAgICAgICBTdGFjayBwb3NzaWJsZUJyZWFrUG9zaXRpb25zID0gbmV3IFN0YWNrKCk7CisgICAgICAgIFZlY3RvciB3cm9uZ0JyZWFrUG9zaXRpb25zID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIC8vIHRoZSBkaWN0aW9uYXJ5IGlzIGltcGxlbWVudGVkIGFzIGEgdHJpZSwgd2hpY2ggaXMgdHJlYXRlZCBhcyBhIHN0YXRlCisgICAgICAgIC8vIG1hY2hpbmUuICAtMSByZXByZXNlbnRzIHRoZSBlbmQgb2YgYSBsZWdhbCB3b3JkLiAgRXZlcnkgd29yZCBpbiB0aGUKKyAgICAgICAgLy8gZGljdGlvbmFyeSBpcyByZXByZXNlbnRlZCBieSBhIHBhdGggZnJvbSB0aGUgcm9vdCBub2RlIHRvIC0xLiAgQSBwYXRoCisgICAgICAgIC8vIHRoYXQgZW5kcyBpbiBzdGF0ZSAwIGlzIGFuIGlsbGVnYWwgY29tYmluYXRpb24gb2YgY2hhcmFjdGVycy4KKyAgICAgICAgaW50IHN0YXRlID0gMDsKKworICAgICAgICAvLyB0aGVzZSB0d28gdmFyaWFibGVzIGFyZSB1c2VkIGZvciBlcnJvciBoYW5kbGluZy4gIFdlIGtlZXAgdHJhY2sgb2YgdGhlCisgICAgICAgIC8vIGZhcnRoZXN0IHdlJ3ZlIGdvdHRlbiB0aHJvdWdoIHRoZSByYW5nZSBiZWluZyBkaXZpZGVkLCBhbmQgdGhlIGNvbWJpbmF0aW9uCisgICAgICAgIC8vIG9mIGJyZWFrcyB0aGF0IGdvdCB1cyB0aGF0IGZhci4gIElmIHdlIHVzZSB1cCBhbGwgcG9zc2libGUgYnJlYWsKKyAgICAgICAgLy8gY29tYmluYXRpb25zLCB0aGUgdGV4dCBjb250YWlucyBhbiBlcnJvciBvciBhIHdvcmQgdGhhdCdzIG5vdCBpbiB0aGUKKyAgICAgICAgLy8gZGljdGlvbmFyeS4gIEluIHRoaXMgY2FzZSwgd2UgImJsZXNzIiB0aGUgYnJlYWsgcG9zaXRpb25zIHRoYXQgZ290IHVzIHRoZQorICAgICAgICAvLyBmYXJ0aGVzdCBhcyByZWFsIGJyZWFrIHBvc2l0aW9ucywgYW5kIHRoZW4gc3RhcnQgb3ZlciBmcm9tIHNjcmF0Y2ggd2l0aAorICAgICAgICAvLyB0aGUgY2hhcmFjdGVyIHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZC4KKyAgICAgICAgaW50IGZhcnRoZXN0RW5kUG9pbnQgPSB0ZXh0LmdldEluZGV4KCk7CisgICAgICAgIFN0YWNrIGJlc3RCcmVha1Bvc2l0aW9ucyA9IG51bGw7CisKKyAgICAgICAgLy8gaW5pdGlhbGl6ZSAod2UgYWx3YXlzIGV4aXQgdGhlIGxvb3Agd2l0aCBhIGJyZWFrIHN0YXRlbWVudCkKKyAgICAgICAgYyA9IHRleHQuY3VycmVudCgpOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworLy9TeXN0ZW0ub3V0LnByaW50KCJjID0gIiArIEludGVnZXIudG9TdHJpbmcoYywgMTYpICsgIiwgcG9zID0gIiArIHRleHQuZ2V0SW5kZXgoKSk7CisKKyAgICAgICAgICAgIC8vIGlmIHdlIGNhbiB0cmFuc2l0aW9uIHRvIHN0YXRlICItMSIgZnJvbSBvdXIgY3VycmVudCBzdGF0ZSwgd2UncmUKKyAgICAgICAgICAgIC8vIG9uIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIGxlZ2FsIHdvcmQuICBQdXNoIHRoYXQgcG9zaXRpb24gb250bworICAgICAgICAgICAgLy8gdGhlIHBvc3NpYmxlLWJyZWFrLXBvc2l0aW9ucyBzdGFjaworICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnkuYXQoc3RhdGUsIDApID09IC0xKSB7CisgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha1Bvc2l0aW9ucy5wdXNoKG5ldyBJbnRlZ2VyKHRleHQuZ2V0SW5kZXgoKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBsb29rIHVwIHRoZSBuZXcgc3RhdGUgdG8gdHJhbnNpdGlvbiB0byBpbiB0aGUgZGljdGlvbmFyeQorICAgICAgICAgICAgc3RhdGUgPSAoZGljdGlvbmFyeS5hdChzdGF0ZSwgYykpICYgMHhGRkZGOworLy9TeXN0ZW0ub3V0LnByaW50KCIsIHN0YXRlID0gIiArIHN0YXRlKTsKKworICAgICAgICAgICAgLy8gaWYgdGhlIGNoYXJhY3RlciB3ZSdyZSBzaXR0aW5nIG9uIGNhdXNlcyB1cyB0byB0cmFuc2l0aW9uIHRvCisgICAgICAgICAgICAvLyB0aGUgImVuZCBvZiB3b3JkIiBzdGF0ZSwgdGhlbiBpdCB3YXMgYSBub24tZGljdGlvbmFyeSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIGFuZCB3ZSd2ZSBzdWNjZXNzZnVsbHkgdHJhdmVyc2VkIHRoZSB3aG9sZSByYW5nZS4gIERyb3Agb3V0CisgICAgICAgICAgICAvLyBvZiB0aGUgbG9vcC4KKyAgICAgICAgICAgIGlmIChzdGF0ZSA9PSAvKi0xKi8gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgY3VycmVudEJyZWFrUG9zaXRpb25zLnB1c2gobmV3IEludGVnZXIodGV4dC5nZXRJbmRleCgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlmIHRoZSBjaGFyYWN0ZXIgd2UncmUgc2l0dGluZyBvbiBjYXVzZXMgdXMgdG8gdHJhbnNpdGlvbiB0bworICAgICAgICAgICAgLy8gdGhlIGVycm9yIHN0YXRlLCBvciBpZiB3ZSd2ZSBnb25lIG9mZiB0aGUgZW5kIG9mIHRoZSByYW5nZQorICAgICAgICAgICAgLy8gd2l0aG91dCB0cmFuc2l0aW9uaW5nIHRvIHRoZSAiZW5kIG9mIHdvcmQiIHN0YXRlLCB3ZSd2ZSBoaXQKKyAgICAgICAgICAgIC8vIGFuIGVycm9yLi4uCisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSAwIHx8IHRleHQuZ2V0SW5kZXgoKSA+PSBlbmRQb3MpIHsKKworICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIGZhcnRoZXN0IHdlJ3ZlIGdvdHRlbiwgdGFrZSBub3RlIG9mIGl0IGluCisgICAgICAgICAgICAgICAgLy8gY2FzZSB0aGVyZSdzIGFuIGVycm9yIGluIHRoZSB0ZXh0CisgICAgICAgICAgICAgICAgaWYgKHRleHQuZ2V0SW5kZXgoKSA+IGZhcnRoZXN0RW5kUG9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFydGhlc3RFbmRQb2ludCA9IHRleHQuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYmVzdEJyZWFrUG9zaXRpb25zID0gKFN0YWNrKShjdXJyZW50QnJlYWtQb3NpdGlvbnMuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gd3JvbmdCcmVha1Bvc2l0aW9ucyBpcyBhIGxpc3Qgb2YgYWxsIGJyZWFrIHBvc2l0aW9ucyB3ZSd2ZSB0cmllZCBzdGFydGluZworICAgICAgICAgICAgICAgIC8vIHRoYXQgZGlkbid0IGFsbG93IHVzIHRvIHRyYXZlcnNlIGFsbCB0aGUgd2F5IHRocm91Z2ggdGhlIHRleHQuICBFdmVyeSB0aW1lCisgICAgICAgICAgICAgICAgLy8gd2UgcG9wIGEgYnJlYWsgcG9zaXRpb24gb2ZmIG9mIGN1cnJlbnRCcmVha1Bvc2l0aW9ucywgd2UgcHV0IGl0IGludG8KKyAgICAgICAgICAgICAgICAvLyB3cm9uZ0JyZWFrUG9zaXRpb25zIHRvIGF2b2lkIHRyeWluZyBpdCBhZ2FpbiBsYXRlci4gIElmIHdlIG1ha2UgaXQgdG8gdGhpcworICAgICAgICAgICAgICAgIC8vIHNwb3QsIHdlJ3JlIGVpdGhlciBnb2luZyB0byBiYWNrIHVwIHRvIGEgYnJlYWsgaW4gcG9zc2libGVCcmVha1Bvc2l0aW9ucworICAgICAgICAgICAgICAgIC8vIGFuZCB0cnkgc3RhcnRpbmcgb3ZlciBmcm9tIHRoZXJlLCBvciB3ZSd2ZSBleGhhdXN0ZWQgYWxsIHBvc3NpYmxlIGJyZWFrCisgICAgICAgICAgICAgICAgLy8gcG9zaXRpb25zIGFuZCBhcmUgZ29pbmcgdG8gZG8gdGhlIGZhbGxiYWNrIHByb2NlZHVyZS4gIFRoaXMgbG9vcCBwcmV2ZW50cworICAgICAgICAgICAgICAgIC8vIHVzIGZyb20gbWVzc2luZyB3aXRoIGFueXRoaW5nIGluIHBvc3NpYmxlQnJlYWtQb3NpdGlvbnMgdGhhdCBkaWRuJ3Qgd29yayBhcworICAgICAgICAgICAgICAgIC8vIGEgc3RhcnRpbmcgcG9pbnQgdGhlIGxhc3QgdGltZSB3ZSB0cmllZCBpdCAodGhpcyBpcyB0byBwcmV2ZW50IGEgYnVuY2ggb2YKKyAgICAgICAgICAgICAgICAvLyByZXBldGl0aXZlIGNoZWNrcyBmcm9tIHNsb3dpbmcgZG93biBzb21lIGV4dHJlbWUgY2FzZXMpCisgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgbm90IHVzZWQgSW50ZWdlciBuZXdTdGFydGluZ1Nwb3QgPSBudWxsOworICAgICAgICAgICAgICAgIHdoaWxlICghcG9zc2libGVCcmVha1Bvc2l0aW9ucy5pc0VtcHR5KCkgJiYgd3JvbmdCcmVha1Bvc2l0aW9ucy5jb250YWlucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrUG9zaXRpb25zLnBlZWsoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha1Bvc2l0aW9ucy5wb3AoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSd2ZSB1c2VkIHVwIGFsbCBwb3NzaWJsZSBicmVhay1wb3NpdGlvbiBjb21iaW5hdGlvbnMsIHRoZXJlJ3MKKyAgICAgICAgICAgICAgICAvLyBhbiBlcnJvciBvciBhbiB1bmtub3duIHdvcmQgaW4gdGhlIHRleHQuICBJbiB0aGlzIGNhc2UsIHdlIHN0YXJ0CisgICAgICAgICAgICAgICAgLy8gb3ZlciwgdHJlYXRpbmcgdGhlIGZhcnRoZXN0IGNoYXJhY3RlciB3ZSd2ZSByZWFjaGVkIGFzIHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgcmFuZ2UsIGFuZCAiYmxlc3NpbmciIHRoZSBicmVhayBwb3NpdGlvbnMgdGhhdCBnb3QgdXMgdGhhdAorICAgICAgICAgICAgICAgIC8vIGZhciBhcyByZWFsIGJyZWFrIHBvc2l0aW9ucworICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUJyZWFrUG9zaXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYmVzdEJyZWFrUG9zaXRpb25zICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha1Bvc2l0aW9ucyA9IGJlc3RCcmVha1Bvc2l0aW9uczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYXJ0aGVzdEVuZFBvaW50IDwgZW5kUG9zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5zZXRJbmRleChmYXJ0aGVzdEVuZFBvaW50ICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY3VycmVudEJyZWFrUG9zaXRpb25zLnNpemUoKSA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoSW50ZWdlcikoY3VycmVudEJyZWFrUG9zaXRpb25zLnBlZWsoKSkpLmludFZhbHVlKCkgIT0gdGV4dC5nZXRJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXh0LmdldEluZGV4KCkgIT0gc3RhcnRQb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtQb3NpdGlvbnMucHVzaChuZXcgSW50ZWdlcih0ZXh0LmdldEluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQubmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJyZWFrUG9zaXRpb25zLnB1c2gobmV3IEludGVnZXIodGV4dC5nZXRJbmRleCgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG1vcmUgYnJlYWsgcG9zaXRpb25zIHdlIGNhbiB0cnksIHRoZW4gcHJvbW90ZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBsYXN0IGJyZWFrIGluIHBvc3NpYmxlQnJlYWtQb3NpdGlvbnMgaW50byBjdXJyZW50QnJlYWtQb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgLy8gYW5kIGdldCByaWQgb2YgYWxsIGVudHJpZXMgaW4gY3VycmVudEJyZWFrUG9zaXRpb25zIHRoYXQgY29tZSBhZnRlcgorICAgICAgICAgICAgICAgIC8vIGl0LiAgVGhlbiBiYWNrIHVwIHRvIHRoYXQgcG9zaXRpb24gYW5kIHN0YXJ0IG92ZXIgZnJvbSB0aGVyZSAoaS5lLiwKKyAgICAgICAgICAgICAgICAvLyB0cmVhdCB0aGF0IHBvc2l0aW9uIGFzIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgd29yZCkKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgSW50ZWdlciB0ZW1wID0gKEludGVnZXIpcG9zc2libGVCcmVha1Bvc2l0aW9ucy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHRlbXAyID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFjdXJyZW50QnJlYWtQb3NpdGlvbnMuaXNFbXB0eSgpICYmIHRlbXAuaW50VmFsdWUoKSA8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEludGVnZXIpY3VycmVudEJyZWFrUG9zaXRpb25zLnBlZWsoKSkuaW50VmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcDIgPSBjdXJyZW50QnJlYWtQb3NpdGlvbnMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3cm9uZ0JyZWFrUG9zaXRpb25zLmFkZEVsZW1lbnQodGVtcDIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha1Bvc2l0aW9ucy5wdXNoKHRlbXApOworICAgICAgICAgICAgICAgICAgICB0ZXh0LnNldEluZGV4KCgoSW50ZWdlciljdXJyZW50QnJlYWtQb3NpdGlvbnMucGVlaygpKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyByZS1zeW5jICJjIiBmb3IgdGhlIG5leHQgZ28tcm91bmQsIGFuZCBkcm9wIG91dCBvZiB0aGUgbG9vcCBpZgorICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIG1hZGUgaXQgb2ZmIHRoZSBlbmQgb2YgdGhlIHJhbmdlCisgICAgICAgICAgICAgICAgYyA9IHRleHQuY3VycmVudCgpOworICAgICAgICAgICAgICAgIHN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodGV4dC5nZXRJbmRleCgpID49IGVuZFBvcykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBoaXQgYW55IGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMgb24gdGhpcyBsYXN0IGl0ZXJhdGlvbiwKKyAgICAgICAgICAgIC8vIGp1c3QgYWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIGxvb3AKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGMgPSB0ZXh0Lm5leHQoKTsKKyAgICAgICAgICAgIH0KKy8vU3lzdGVtLm91dC5wcmludCgiLCBwb3NzaWJsZUJyZWFrUG9zaXRpb25zID0geyAiKTsgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3NzaWJsZUJyZWFrUG9zaXRpb25zLnNpemUoKTsgaSsrKSBTeXN0ZW0ub3V0LnByaW50KHBvc3NpYmxlQnJlYWtQb3NpdGlvbnMuZWxlbWVudEF0KGkpICsgIiAiKTsgU3lzdGVtLm91dC5wcmludCgifSIpOworLy9TeXN0ZW0ub3V0LnByaW50KCIsIGN1cnJlbnRCcmVha1Bvc2l0aW9ucyA9IHsgIik7IGZvciAoaW50IGkgPSAwOyBpIDwgY3VycmVudEJyZWFrUG9zaXRpb25zLnNpemUoKTsgaSsrKSBTeXN0ZW0ub3V0LnByaW50KGN1cnJlbnRCcmVha1Bvc2l0aW9ucy5lbGVtZW50QXQoaSkgKyAiICIpOyBTeXN0ZW0ub3V0LnByaW50bG4oIn0iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGR1bXAgdGhlIGxhc3QgYnJlYWsgcG9zaXRpb24gaW4gdGhlIGxpc3QsIGFuZCByZXBsYWNlIGl0IHdpdGggdGhlIGFjdHVhbAorICAgICAgICAvLyBlbmQgb2YgdGhlIHJhbmdlICh3aGljaCBtYXkgYmUgdGhlIHNhbWUgY2hhcmFjdGVyLCBvciBtYXkgYmUgZnVydGhlciBvbgorICAgICAgICAvLyBiZWNhdXNlIHRoZSByYW5nZSBhY3R1YWxseSBlbmRlZCB3aXRoIG5vbi1kaWN0aW9uYXJ5IGNoYXJhY3RlcnMgd2Ugd2FudCB0bworICAgICAgICAvLyBrZWVwIHdpdGggdGhlIHdvcmQpCisgICAgICAgIGlmICghY3VycmVudEJyZWFrUG9zaXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY3VycmVudEJyZWFrUG9zaXRpb25zLnBvcCgpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRCcmVha1Bvc2l0aW9ucy5wdXNoKG5ldyBJbnRlZ2VyKGVuZFBvcykpOworCisgICAgICAgIC8vIGNyZWF0ZSBhIHJlZ3VsYXIgYXJyYXkgdG8gaG9sZCB0aGUgYnJlYWsgcG9zaXRpb25zIGFuZCBjb3B5CisgICAgICAgIC8vIHRoZSBicmVhayBwb3NpdGlvbnMgZnJvbSB0aGUgc3RhY2sgdG8gdGhlIGFycmF5IChpbiBhZGRpdGlvbiwKKyAgICAgICAgLy8gb3VyIHN0YXJ0aW5nIHBvc2l0aW9uIGdvZXMgaW50byB0aGlzIGFycmF5IGFzIGEgYnJlYWsgcG9zaXRpb24pLgorICAgICAgICAvLyBUaGlzIGFycmF5IGJlY29tZXMgdGhlIGNhY2hlIG9mIGJyZWFrIHBvc2l0aW9ucyB1c2VkIGJ5IG5leHQoKQorICAgICAgICAvLyBhbmQgcHJldmlvdXMoKSwgc28gdGhpcyBpcyB3aGVyZSB3ZSBhY3R1YWxseSByZWZyZXNoIHRoZSBjYWNoZS4KKyAgICAgICAgY2FjaGVkQnJlYWtQb3NpdGlvbnMgPSBuZXcgaW50W2N1cnJlbnRCcmVha1Bvc2l0aW9ucy5zaXplKCkgKyAxXTsKKyAgICAgICAgY2FjaGVkQnJlYWtQb3NpdGlvbnNbMF0gPSBzdGFydFBvczsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN1cnJlbnRCcmVha1Bvc2l0aW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgY2FjaGVkQnJlYWtQb3NpdGlvbnNbaSArIDFdID0gKChJbnRlZ2VyKWN1cnJlbnRCcmVha1Bvc2l0aW9ucy5lbGVtZW50QXQoaSkpLmludFZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgcG9zaXRpb25JbkNhY2hlID0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgQnVpbGRlciBjbGFzcyBmb3IgRGljdGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvciBpbmhlcml0cyBhbG1vc3QgYWxsIG9mCisgICAgICogaXRzIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgQnVpbGRlciBjbGFzcyBmb3IgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciwgYnV0CisgICAgICogZXh0ZW5kcyBpdCB3aXRoIGV4dHJhIGxvZ2ljIHRvIGhhbmRsZSB0aGUgRElDVElPTkFSWV9WQVIgdG9rZW4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgY2xhc3MgQnVpbGRlciBleHRlbmRzIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuQnVpbGRlciB7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgVW5pY29kZVNldCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgY2hhcmFjdGVycyByZXByZXNlbnRlZCBpbiB0aGUgZGljdGlvbmFyeQorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBVbmljb2RlU2V0IGRpY3Rpb25hcnlDaGFycyA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGRpY3Rpb25hcnlFeHByZXNzaW9uID0gIiI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE5vIHNwZWNpYWwgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKCkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdlIG92ZXJyaWRlIGhhbmRsZVNwZWNpYWxTdWJzdGl0dXRpb24oKSB0byBhZGQgbG9naWMgdG8gaGFuZGxlCisgICAgICAgICAqIHRoZSAkZGljdGlvbmFyeSB0YWcuICBJZiB3ZSBzZWUgYSBzdWJzdGl0dXRpb24gbmFtZWQgRElDVElPTkFSWV9WQVIsCisgICAgICAgICAqIHBhcnNlIHRoZSBzdWJzdGl0dXRpb24gZXhwcmVzc2lvbiBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbgorICAgICAgICAgKiBkaWN0aW9uYXJ5Q2hhcnMuCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVTcGVjaWFsU3Vic3RpdHV0aW9uKFN0cmluZyByZXBsYWNlLCBTdHJpbmcgcmVwbGFjZVdpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0UG9zLCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIHN1cGVyLmhhbmRsZVNwZWNpYWxTdWJzdGl0dXRpb24ocmVwbGFjZSwgcmVwbGFjZVdpdGgsIHN0YXJ0UG9zLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgICAgIGlmIChyZXBsYWNlLmVxdWFscyhESUNUSU9OQVJZX1ZBUikpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZVdpdGguY2hhckF0KDApID09ICcoJykgeworICAgICAgICAgICAgICAgICAgICBlcnJvcigiRGljdGlvbmFyeSBncm91cCBjYW4ndCBiZSBlbmNsb3NlZCBpbiAoIiwgc3RhcnRQb3MsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGljdGlvbmFyeUV4cHJlc3Npb24gPSByZXBsYWNlV2l0aDsKKyAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5Q2hhcnMgPSBuZXcgVW5pY29kZVNldChyZXBsYWNlV2l0aCwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBvdGhlciBoYWxmIG9mIHRoZSBsb2dpYyB0byBoYW5kbGUgdGhlIGRpY3Rpb25hcnkgY2hhcmFjdGVycyBoYXBwZW5zIGhlcmUuCisgICAgICAgICAqIEFmdGVyIHRoZSBpbmhlcml0ZWQgYnVpbGRlciBoYXMgZGVyaXZlZCB0aGUgcmVhbCBjaGFyYWN0ZXIgY2F0ZWdvcmllcywgd2UKKyAgICAgICAgICogc2V0IHVwIHRoZSBjYXRlZ29yeUZsYWdzIGFycmF5IGluIHRoZSBpdGVyYXRvci4gIFRoaXMgYXJyYXkgY29udGFpbnMgInRydWUiCisgICAgICAgICAqIGZvciBldmVyeSBjaGFyYWN0ZXIgY2F0ZWdvcnkgdGhhdCBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgY2hhcmFjdGVyLgorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgYnVpbGRDaGFyQ2F0ZWdvcmllcyhWZWN0b3IgdGVtcFJ1bGVMaXN0KSB7CisgICAgICAgICAgICBzdXBlci5idWlsZENoYXJDYXRlZ29yaWVzKHRlbXBSdWxlTGlzdCk7CisKKyAgICAgICAgICAgIGNhdGVnb3J5RmxhZ3MgPSBuZXcgYm9vbGVhbltjYXRlZ29yaWVzLnNpemUoKV07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhdGVnb3JpZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBVbmljb2RlU2V0IGNzID0gKFVuaWNvZGVTZXQpY2F0ZWdvcmllcy5lbGVtZW50QXQoaSk7CisKKyAgICAgICAgICAgICAgICBjcy5yZXRhaW5BbGwoZGljdGlvbmFyeUNoYXJzKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeUZsYWdzW2ldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBieSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmJ1aWxkQ2hhckNhdGVnb3JpZXMoKSwKKyAgICAgICAgLy8gd2hpY2ggaXMgY2FsbGVkIGJ5IHRoZSBmdW5jdGlvbiBhYm92ZS4gIFRoaXMgZ2l2ZXMgdXMgYSB3YXkgdG8gY3JlYXRlIGEgc2VwYXJhdGUKKyAgICAgICAgLy8gY2hhcmFjdGVyIGNhdGVnb3J5IGZvciB0aGUgZGljdGlvbmFyeSBjaGFyYWN0ZXJzIGV2ZW4gd2hlbiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yCisgICAgICAgIC8vIGlzbid0IG1ha2luZyBhIGRpc3RpbmN0aW9uCisgICAgICAgIHByb3RlY3RlZCB2b2lkIG11bmdlRXhwcmVzc2lvbkxpc3QoSGFzaHRhYmxlIGV4cHJlc3Npb25zKSB7CisgICAgICAgICAgICBleHByZXNzaW9ucy5wdXQoZGljdGlvbmFyeUV4cHJlc3Npb24sIGRpY3Rpb25hcnlDaGFycyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9EaWdpdExpc3QuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0RpZ2l0TGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwN2NmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9EaWdpdExpc3QuamF2YQpAQCAtMCwwICsxLDc0MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvRGlnaXRMaXN0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MDcgJCAKKyAqICRSZXZpc2lvbjogMS45ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CisKKy8qKgorICogPGNvZGU+RGlnaXRMaXN0PC9jb2RlPiBoYW5kbGVzIHRoZSB0cmFuc2NvZGluZyBiZXR3ZWVuIG51bWVyaWMgdmFsdWVzIGFuZAorICogc3RyaW5ncyBvZiBjaGFyYWN0ZXJzLiAgSXQgb25seSByZXByZXNlbnRzIG5vbi1uZWdhdGl2ZSBudW1iZXJzLiAgVGhlCisgKiBkaXZpc2lvbiBvZiBsYWJvciBiZXR3ZWVuIDxjb2RlPkRpZ2l0TGlzdDwvY29kZT4gYW5kCisgKiA8Y29kZT5EZWNpbWFsRm9ybWF0PC9jb2RlPiBpcyB0aGF0IDxjb2RlPkRpZ2l0TGlzdDwvY29kZT4gaGFuZGxlcyB0aGUgcmFkaXgKKyAqIDEwIHJlcHJlc2VudGF0aW9uIGlzc3VlcyBhbmQgbnVtZXJpYyBjb252ZXJzaW9uLCBpbmNsdWRpbmcgcm91bmRpbmc7CisgKiA8Y29kZT5EZWNpbWFsRm9ybWF0PC9jb2RlPiBoYW5kbGVzIHRoZSBsb2NhbGUtc3BlY2lmaWMgaXNzdWVzIHN1Y2ggYXMKKyAqIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSByZXByZXNlbnRhdGlvbiwgZGlnaXQgZ3JvdXBpbmcsIGRlY2ltYWwgcG9pbnQsCisgKiBjdXJyZW5jeSwgYW5kIHNvIG9uLgorICoKKyAqIDxwPkEgPGNvZGU+RGlnaXRMaXN0PC9jb2RlPiBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgZmluaXRlIG51bWVyaWMgdmFsdWUuCisgKiA8Y29kZT5EaWdpdExpc3Q8L2NvZGU+IG9iamVjdHMgZG8gbm90IHJlcHJlc2VudCA8Y29kZT5OYU48L2NvZGU+IG9yIGluZmluaXRlCisgKiB2YWx1ZXMuICBBIDxjb2RlPkRpZ2l0TGlzdDwvY29kZT4gdmFsdWUgY2FuIGJlIGNvbnZlcnRlZCB0byBhCisgKiA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLiAgQ29udmVyc2lvbiB0byBvdGhlcgorICogbnVtZXJpYyBmb3JtYXRzIG1heSBpbnZvbHZlIGxvc3Mgb2YgcHJlY2lzaW9uLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljCisgKiB2YWx1ZS4KKyAqCisgKiA8cD5UaGUgPGNvZGU+RGlnaXRMaXN0PC9jb2RlPiByZXByZXNlbnRhdGlvbiBjb25zaXN0cyBvZiBhIHN0cmluZyBvZgorICogY2hhcmFjdGVycywgd2hpY2ggYXJlIHRoZSBkaWdpdHMgcmFkaXggMTAsIGZyb20gJzAnIHRvICc5Jy4gIEl0IGFsc28gaGFzIGEKKyAqIGJhc2UgMTAgZXhwb25lbnQgYXNzb2NpYXRlZCB3aXRoIGl0LiAgVGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IGEKKyAqIDxjb2RlPkRpZ2l0TGlzdDwvY29kZT4gb2JqZWN0IGNhbiBiZSBjb21wdXRlZCBieSBtdWxpdHBseWluZyB0aGUgZnJhY3Rpb24KKyAqIDxlbT5mPC9lbT4sIHdoZXJlIDAgPD0gPGVtPmY8L2VtPiA8IDEsIGRlcml2ZWQgYnkgcGxhY2luZyBhbGwgdGhlIGRpZ2l0cyBvZgorICogdGhlIGxpc3QgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkZWNpbWFsIHBvaW50LCBieSAxMF5leHBvbmVudC4KKyAqCisgKiBAc2VlIGphdmEudXRpbC5Mb2NhbGUKKyAqIEBzZWUgamF2YS50ZXh0LkZvcm1hdAorICogQHNlZSBOdW1iZXJGb3JtYXQKKyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHNlZSBqYXZhLnRleHQuQ2hvaWNlRm9ybWF0CisgKiBAc2VlIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0CisgKiBAdmVyc2lvbiAgICAgIDEuMTggMDgvMTIvOTgKKyAqIEBhdXRob3IgICAgICAgTWFyayBEYXZpcywgQWxhbiBMaXUKKyAqICovCitmaW5hbCBjbGFzcyBEaWdpdExpc3QgaW1wbGVtZW50cyBDbG9uZWFibGUgeworICAgIC8qKgorICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYW4gSUVFRSA3NTQgZG91YmxlLCB0aGF0CisgICAgICogaXMsIGluIGEgSmF2YSBkb3VibGUuICBUaGlzIG11c3Qgbm90IGJlIGluY3JlYXNlZCwgb3IgZ2FyYmFnZSBkaWdpdHMKKyAgICAgKiB3aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHNob3VsZCBub3QgYmUgZGVjcmVhc2VkLCBvciBhY2N1cmFjeSB3aWxsIGJlIGxvc3QuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xPTkdfRElHSVRTID0gMTk7IC8vID09IExvbmcudG9TdHJpbmcoTG9uZy5NQVhfVkFMVUUpLmxlbmd0aCgpCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREJMX0RJRyA9IDE3OworCisgICAgLyoqCisgICAgICogVGhlc2UgZGF0YSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHB1YmxpYyBhbmQgY2FuIGJlIHNldCBkaXJlY3RseS4KKyAgICAgKgorICAgICAqIFRoZSB2YWx1ZSByZXByZXNlbnRlZCBpcyBnaXZlbiBieSBwbGFjaW5nIHRoZSBkZWNpbWFsIHBvaW50IGJlZm9yZQorICAgICAqIGRpZ2l0c1tkZWNpbWFsQXRdLiAgSWYgZGVjaW1hbEF0IGlzIDwgMCwgdGhlbiBsZWFkaW5nIHplcm9zIGJldHdlZW4KKyAgICAgKiB0aGUgZGVjaW1hbCBwb2ludCBhbmQgdGhlIGZpcnN0IG5vbnplcm8gZGlnaXQgYXJlIGltcGxpZWQuICBJZiBkZWNpbWFsQXQKKyAgICAgKiBpcyA+IGNvdW50LCB0aGVuIHRyYWlsaW5nIHplcm9zIGJldHdlZW4gdGhlIGRpZ2l0c1tjb3VudC0xXSBhbmQgdGhlCisgICAgICogZGVjaW1hbCBwb2ludCBhcmUgaW1wbGllZC4KKyAgICAgKgorICAgICAqIEVxdWl2YWxlbnRseSwgdGhlIHJlcHJlc2VudGVkIHZhbHVlIGlzIGdpdmVuIGJ5IGYgKiAxMF5kZWNpbWFsQXQuICBIZXJlCisgICAgICogZiBpcyBhIHZhbHVlIDAuMSA8PSBmIDwgMSBhcnJpdmVkIGF0IGJ5IHBsYWNpbmcgdGhlIGRpZ2l0cyBpbiBEaWdpdHMgdG8KKyAgICAgKiB0aGUgcmlnaHQgb2YgdGhlIGRlY2ltYWwuCisgICAgICoKKyAgICAgKiBEaWdpdExpc3QgaXMgbm9ybWFsaXplZCwgc28gaWYgaXQgaXMgbm9uLXplcm8sIGZpZ2l0c1swXSBpcyBub24temVyby4gIFdlCisgICAgICogZG9uJ3QgYWxsb3cgZGVub3JtYWxpemVkIG51bWJlcnMgYmVjYXVzZSBvdXIgZXhwb25lbnQgaXMgZWZmZWN0aXZlbHkgb2YKKyAgICAgKiB1bmxpbWl0ZWQgbWFnbml0dWRlLiAgVGhlIGNvdW50IHZhbHVlIGNvbnRhaW5zIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQKKyAgICAgKiBkaWdpdHMgcHJlc2VudCBpbiBkaWdpdHNbXS4KKyAgICAgKgorICAgICAqIFplcm8gaXMgcmVwcmVzZW50ZWQgYnkgYW55IERpZ2l0TGlzdCB3aXRoIGNvdW50ID09IDAgb3Igd2l0aCBlYWNoIGRpZ2l0c1tpXQorICAgICAqIGZvciBhbGwgaSA8PSBjb3VudCA9PSAnMCcuCisgICAgICovCisgICAgcHVibGljIGludCBkZWNpbWFsQXQgPSAwOworICAgIHB1YmxpYyBpbnQgY291bnQgPSAwOworICAgIHB1YmxpYyBieXRlW10gZGlnaXRzID0gbmV3IGJ5dGVbTUFYX0xPTkdfRElHSVRTXTsKKworICAgIHByaXZhdGUgZmluYWwgdm9pZCBlbnN1cmVDYXBhY2l0eShpbnQgZGlnaXRDYXBhY2l0eSwgaW50IGRpZ2l0c1RvQ29weSkgeworICAgICAgICBpZiAoZGlnaXRDYXBhY2l0eSA+IGRpZ2l0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGJ5dGVbXSBuZXdEaWdpdHMgPSBuZXcgYnl0ZVtkaWdpdENhcGFjaXR5ICogMl07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGRpZ2l0cywgMCwgbmV3RGlnaXRzLCAwLCBkaWdpdHNUb0NvcHkpOworICAgICAgICAgICAgZGlnaXRzID0gbmV3RGlnaXRzOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHJlcHJlc2VudGVkIG51bWJlciBpcyB6ZXJvLgorICAgICAqLworICAgIGJvb2xlYW4gaXNaZXJvKCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgKytpKSBpZiAoZGlnaXRzW2ldICE9ICcwJykgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDbGVhcnMgb3V0IHRoZSBkaWdpdHMuCisgICAgICogVXNlIGJlZm9yZSBhcHBlbmRpbmcgdGhlbS4KKyAgICAgKiBUeXBpY2FsbHksIHlvdSBzZXQgYSBzZXJpZXMgb2YgZGlnaXRzIHdpdGggYXBwZW5kLCB0aGVuIGF0IHRoZSBwb2ludAorICAgICAqIHlvdSBoaXQgdGhlIGRlY2ltYWwgcG9pbnQsIHlvdSBzZXQgbXlEaWdpdExpc3QuZGVjaW1hbEF0ID0gbXlEaWdpdExpc3QuY291bnQ7CisgICAgICogdGhlbiBnbyBvbiBhcHBlbmRpbmcgZGlnaXRzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyICgpIHsKKyAgICAgICAgZGVjaW1hbEF0ID0gMDsKKyAgICAgICAgY291bnQgPSAwOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBcHBlbmRzIGRpZ2l0cyB0byB0aGUgbGlzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhcHBlbmQgKGludCBkaWdpdCkgeworICAgICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCsxLCBjb3VudCk7CisgICAgICAgIGRpZ2l0c1tjb3VudCsrXSA9IChieXRlKSBkaWdpdDsKKyAgICB9CisgICAgLyoqCisgICAgICogVXRpbGl0eSByb3V0aW5lIHRvIGdldCB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0IGxpc3QKKyAgICAgKiBJZiAoY291bnQgPT0gMCkgdGhpcyB0aHJvd3MgYSBOdW1iZXJGb3JtYXRFeGNlcHRpb24sIHdoaWNoCisgICAgICogbWltaWNzIExvbmcucGFyc2VMb25nKCkuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGRvdWJsZSBnZXREb3VibGUoKSB7CisgICAgICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gMC4wOworICAgICAgICBTdHJpbmdCdWZmZXIgdGVtcCA9IG5ldyBTdHJpbmdCdWZmZXIoY291bnQpOworICAgICAgICB0ZW1wLmFwcGVuZCgnLicpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHRlbXAuYXBwZW5kKChjaGFyKShkaWdpdHNbaV0pKTsKKyAgICAgICAgdGVtcC5hcHBlbmQoJ0UnKTsKKyAgICAgICAgdGVtcC5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhkZWNpbWFsQXQpKTsKKyAgICAgICAgcmV0dXJuIERvdWJsZS52YWx1ZU9mKHRlbXAudG9TdHJpbmcoKSkuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgLy8gbG9uZyB2YWx1ZSA9IExvbmcucGFyc2VMb25nKHRlbXAudG9TdHJpbmcoKSk7CisgICAgICAgIC8vIHJldHVybiAodmFsdWUgKiBNYXRoLnBvdygxMCwgZGVjaW1hbEF0IC0gY291bnQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IHJvdXRpbmUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXQgbGlzdC4KKyAgICAgKiBJZiAoY291bnQgPT0gMCkgdGhpcyByZXR1cm5zIDAsIHVubGlrZSBMb25nLnBhcnNlTG9uZygpLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBsb25nIGdldExvbmcoKSB7CisgICAgICAgIC8vIGZvciBub3csIHNpbXBsZSBpbXBsZW1lbnRhdGlvbjsgbGF0ZXIsIGRvIHByb3BlciBJRUVFIG5hdGl2ZSBzdHVmZgorCisgICAgICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gMDsKKworICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciB0aGlzLCBiZWNhdXNlIHRoaXMgaXMgdGhlIG9uZSBORUdBVElWRSB2YWx1ZQorICAgICAgICAvLyB3ZSByZXByZXNlbnQuICBJZiB3ZSB0cmllZCB0byBqdXN0IHBhc3MgdGhlIGRpZ2l0cyBvZmYgdG8gcGFyc2VMb25nLAorICAgICAgICAvLyB3ZSdkIGdldCBhIHBhcnNlIGZhaWx1cmUuCisgICAgICAgIGlmIChpc0xvbmdNSU5fVkFMVUUoKSkgcmV0dXJuIExvbmcuTUlOX1ZBTFVFOworCisgICAgICAgIFN0cmluZ0J1ZmZlciB0ZW1wID0gbmV3IFN0cmluZ0J1ZmZlcihjb3VudCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjaW1hbEF0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAuYXBwZW5kKChpIDwgY291bnQpID8gKGNoYXIpKGRpZ2l0c1tpXSkgOiAnMCcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBMb25nLnBhcnNlTG9uZyh0ZW1wLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIDxjb2RlPkJpZ0ludGVnZXI8L2NvZGU+IHJlcHJlc2VudGluZyB0aGUgdmFsdWUgc3RvcmVkIGluIHRoaXMKKyAgICAgKiA8Y29kZT5EaWdpdExpc3Q8L2NvZGU+LiAgVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IHRoaXMgb2JqZWN0IGNvbnRhaW5zCisgICAgICogYW4gaW50ZWdyYWwgdmFsdWU7IGlmIG5vdCwgaXQgd2lsbCByZXR1cm4gYW4gaW5jb3JyZWN0IHZhbHVlLgorICAgICAqIFtibmZdCisgICAgICogQHBhcmFtIGlzUG9zaXRpdmUgZGV0ZXJtaW5lcyB0aGUgc2lnbiBvZiB0aGUgcmV0dXJuZWQgcmVzdWx0CisgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBvYmplY3QgYXMgYSA8Y29kZT5CaWdJbnRlZ2VyPC9jb2RlPgorICAgICAqLworICAgIHB1YmxpYyBCaWdJbnRlZ2VyIGdldEJpZ0ludGVnZXIoYm9vbGVhbiBpc1Bvc2l0aXZlKSB7CisgICAgICAgIGlmIChpc1plcm8oKSkgcmV0dXJuIEJpZ0ludGVnZXIudmFsdWVPZigwKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHN0cmluZ1JlcCA9IG5ldyBTdHJpbmdCdWZmZXIoY291bnQpOworICAgICAgICBpZiAoIWlzUG9zaXRpdmUpIHsKKyAgICAgICAgICAgIHN0cmluZ1JlcC5hcHBlbmQoJy0nKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpPTA7IGk8Y291bnQ7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nUmVwLmFwcGVuZCgoY2hhcikgZGlnaXRzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZCA9IGRlY2ltYWxBdDsKKyAgICAgICAgd2hpbGUgKGQtLSA+IGNvdW50KSB7CisgICAgICAgICAgICBzdHJpbmdSZXAuYXBwZW5kKCcwJyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKHN0cmluZ1JlcC50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSA8Y29kZT5CaWdEZWNpbWFsPC9jb2RlPiByZXByZXNlbnRpbmcgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGlzCisgICAgICogPGNvZGU+RGlnaXRMaXN0PC9jb2RlPi4KKyAgICAgKiBbYm5mXQorICAgICAqIEBwYXJhbSBpc1Bvc2l0aXZlIGRldGVybWluZXMgdGhlIHNpZ24gb2YgdGhlIHJldHVybmVkIHJlc3VsdAorICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMgb2JqZWN0IGFzIGEgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4KKyAgICAgKi8KKyAgICBwdWJsaWMgamF2YS5tYXRoLkJpZ0RlY2ltYWwgZ2V0QmlnRGVjaW1hbChib29sZWFuIGlzUG9zaXRpdmUpIHsKKyAgICAgICAgaWYgKGlzWmVybygpKSByZXR1cm4gamF2YS5tYXRoLkJpZ0RlY2ltYWwudmFsdWVPZigwKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHN0cmluZ1JlcCA9IG5ldyBTdHJpbmdCdWZmZXIoY291bnQrMSk7CisgICAgICAgIGlmICghaXNQb3NpdGl2ZSkgeworICAgICAgICAgICAgc3RyaW5nUmVwLmFwcGVuZCgnLScpOworICAgICAgICB9CisgICAgICAgIGludCBkID0gZGVjaW1hbEF0OworICAgICAgICBpZiAoZCA8IDApIHsKKyAgICAgICAgICAgIHN0cmluZ1JlcC5hcHBlbmQoJy4nKTsKKyAgICAgICAgICAgIHdoaWxlIChkIDwgMCkgeworICAgICAgICAgICAgICAgIHN0cmluZ1JlcC5hcHBlbmQoJzAnKTsKKyAgICAgICAgICAgICAgICArK2Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChkID09IGkpIHsKKyAgICAgICAgICAgICAgICBzdHJpbmdSZXAuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJpbmdSZXAuYXBwZW5kKChjaGFyKSBkaWdpdHNbaV0pOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChkLS0gPiBjb3VudCkgeworICAgICAgICAgICAgc3RyaW5nUmVwLmFwcGVuZCgnMCcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoc3RyaW5nUmVwLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGlzIG9iamVjdHMgcmVwcmVzZW50ZWQgdmFsdWUgaXMgYW4gaW50ZWdlci4KKyAgICAgKiBbYm5mXQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmVwcmVzZW50ZWQgdmFsdWUgb2YgdGhpcyBvYmplY3QgaXMgYW4gaW50ZWdlcgorICAgICAqLworICAgIGJvb2xlYW4gaXNJbnRlZ3JhbCgpIHsKKyAgICAgICAgLy8gVHJpbSB0cmFpbGluZyB6ZXJvcy4gIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSByZXByZXNlbnRlZCB2YWx1ZS4KKyAgICAgICAgd2hpbGUgKGNvdW50ID4gMCAmJiBkaWdpdHNbY291bnQgLSAxXSA9PSAoYnl0ZSknMCcpIC0tY291bnQ7CisgICAgICAgIHJldHVybiBjb3VudCA9PSAwIHx8IGRlY2ltYWxBdCA+PSBjb3VudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgbnVtYmVyIHJlcHJlc2VudGVkIGJ5IHRoaXMgb2JqZWN0IGNhbiBmaXQgaW50bworICAgICAqIGEgbG9uZy4KKyAgICAgKi8KKyAgICBib29sZWFuIGZpdHNJbnRvTG9uZyhib29sZWFuIGlzUG9zaXRpdmUpCisgICAgeworICAgICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZSByZXN1bHQgd2lsbCBmaXQgaW4gYSBsb25nLiAgV2UgaGF2ZSB0bworICAgICAgICAvLyBmaXJzdCBsb29rIGZvciBub256ZXJvIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludDsKKyAgICAgICAgLy8gdGhlbiBjaGVjayB0aGUgc2l6ZS4gIElmIHRoZSBkaWdpdCBjb3VudCBpcyAxOCBvciBsZXNzLCB0aGVuCisgICAgICAgIC8vIHRoZSB2YWx1ZSBjYW4gZGVmaW5pdGVseSBiZSByZXByZXNlbnRlZCBhcyBhIGxvbmcuICBJZiBpdCBpcyAxOQorICAgICAgICAvLyB0aGVuIGl0IG1heSBiZSB0b28gbGFyZ2UuCisKKyAgICAgICAgLy8gVHJpbSB0cmFpbGluZyB6ZXJvcy4gIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSByZXByZXNlbnRlZCB2YWx1ZS4KKyAgICAgICAgd2hpbGUgKGNvdW50ID4gMCAmJiBkaWdpdHNbY291bnQgLSAxXSA9PSAoYnl0ZSknMCcpIC0tY291bnQ7CisKKyAgICAgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgICAgICAgIC8vIFBvc2l0aXZlIHplcm8gZml0cyBpbnRvIGEgbG9uZywgYnV0IG5lZ2F0aXZlIHplcm8gY2FuIG9ubHkKKyAgICAgICAgICAgIC8vIGJlIHJlcHJlc2VudGVkIGFzIGEgZG91YmxlLiAtIGJ1ZyA0MTYyODUyCisgICAgICAgICAgICByZXR1cm4gaXNQb3NpdGl2ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZWNpbWFsQXQgPCBjb3VudCB8fCBkZWNpbWFsQXQgPiBNQVhfTE9OR19ESUdJVFMpIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoZGVjaW1hbEF0IDwgTUFYX0xPTkdfRElHSVRTKSByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZGVjaW1hbEF0ID09IGNvdW50LCBhbmQgY291bnQgPT0gTUFYX0xPTkdfRElHSVRTLgorICAgICAgICAvLyBUaGUgbnVtYmVyIHdpbGwgb3ZlcmZsb3cgaWYgaXQgaXMgbGFyZ2VyIHRoYW4gOTIyMzM3MjAzNjg1NDc3NTgwNworICAgICAgICAvLyBvciBzbWFsbGVyIHRoYW4gLTkyMjMzNzIwMzY4NTQ3NzU4MDguCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlIGRpZyA9IGRpZ2l0c1tpXSwgbWF4ID0gTE9OR19NSU5fUkVQW2ldOworICAgICAgICAgICAgaWYgKGRpZyA+IG1heCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGRpZyA8IG1heCkgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBmaXJzdCBjb3VudCBkaWdpdHMgbWF0Y2guICBJZiBkZWNpbWFsQXQgaXMgbGVzcworICAgICAgICAvLyB0aGFuIGNvdW50LCB0aGVuIHRoZSByZW1haW5pbmcgZGlnaXRzIGFyZSB6ZXJvLCBhbmQgd2UgcmV0dXJuIHRydWUuCisgICAgICAgIGlmIChjb3VudCA8IGRlY2ltYWxBdCkgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gTm93IHdlIGhhdmUgYSByZXByZXNlbnRhdGlvbiBvZiBMb25nLk1JTl9WQUxVRSwgd2l0aG91dCB0aGUgbGVhZGluZworICAgICAgICAvLyBuZWdhdGl2ZSBzaWduLiAgSWYgdGhpcyByZXByZXNlbnRzIGEgcG9zaXRpdmUgdmFsdWUsIHRoZW4gaXQgZG9lcworICAgICAgICAvLyBub3QgZml0OyBvdGhlcndpc2UgaXQgZml0cy4KKyAgICAgICAgcmV0dXJuICFpc1Bvc2l0aXZlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZGlnaXQgbGlzdCB0byBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb3VibGUgdmFsdWUuCisgICAgICogVGhpcyBtZXRob2Qgc3VwcG9ydHMgZml4ZWQtcG9pbnQgbm90YXRpb24uCisgICAgICogQHBhcmFtIHNvdXJjZSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQ7IG11c3Qgbm90IGJlIEluZiwgLUluZiwgTmFuLAorICAgICAqIG9yIGEgdmFsdWUgPD0gMC4KKyAgICAgKiBAcGFyYW0gbWF4aW11bUZyYWN0aW9uRGlnaXRzIFRoZSBtb3N0IGZyYWN0aW9uYWwgZGlnaXRzIHdoaWNoIHNob3VsZAorICAgICAqIGJlIGNvbnZlcnRlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoZG91YmxlIHNvdXJjZSwgaW50IG1heGltdW1GcmFjdGlvbkRpZ2l0cykKKyAgICB7CisgICAgICAgIHNldChzb3VyY2UsIG1heGltdW1GcmFjdGlvbkRpZ2l0cywgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBkaWdpdCBsaXN0IHRvIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvdWJsZSB2YWx1ZS4KKyAgICAgKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBib3RoIGZpeGVkLXBvaW50IGFuZCBleHBvbmVudGlhbCBub3RhdGlvbi4KKyAgICAgKiBAcGFyYW0gc291cmNlIFZhbHVlIHRvIGJlIGNvbnZlcnRlZDsgbXVzdCBub3QgYmUgSW5mLCAtSW5mLCBOYW4sCisgICAgICogb3IgYSB2YWx1ZSA8PSAwLgorICAgICAqIEBwYXJhbSBtYXhpbXVtRGlnaXRzIFRoZSBtb3N0IGZyYWN0aW9uYWwgb3IgdG90YWwgZGlnaXRzIHdoaWNoIHNob3VsZAorICAgICAqIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcGFyYW0gZml4ZWRQb2ludCBJZiB0cnVlLCB0aGVuIG1heGltdW1EaWdpdHMgaXMgdGhlIG1heGltdW0KKyAgICAgKiBmcmFjdGlvbmFsIGRpZ2l0cyB0byBiZSBjb252ZXJ0ZWQuICBJZiBmYWxzZSwgdG90YWwgZGlnaXRzLgorICAgICAqLworICAgIGZpbmFsIHZvaWQgc2V0KGRvdWJsZSBzb3VyY2UsIGludCBtYXhpbXVtRGlnaXRzLCBib29sZWFuIGZpeGVkUG9pbnQpCisgICAgeworICAgICAgICBpZiAoc291cmNlID09IDApIHNvdXJjZSA9IDA7CisgICAgICAgIC8vIEdlbmVyYXRlIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZvcm0gREREREQsIERERERELkRERERELCBvcgorICAgICAgICAvLyBEREREREUrLy1ERERERC4KKyAgICAgICAgU3RyaW5nIHJlcCA9IERvdWJsZS50b1N0cmluZyhzb3VyY2UpOworCisgICAgICAgIHNldChyZXAsIE1BWF9MT05HX0RJR0lUUyk7CisKKyAgICAgICAgaWYgKGZpeGVkUG9pbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBuZWdhdGl2ZSBvZiB0aGUgZXhwb25lbnQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcKKyAgICAgICAgICAgIC8vIHplcm9zIGJldHdlZW4gdGhlIGRlY2ltYWwgYW5kIHRoZSBmaXJzdCBub24temVybyBkaWdpdCwgZm9yCisgICAgICAgICAgICAvLyBhIHZhbHVlIDwgMC4xIChlLmcuLCBmb3IgMC4wMDEyMywgLWRlY2ltYWxBdCA9PSAyKS4gIElmIHRoaXMKKyAgICAgICAgICAgIC8vIGlzIG1vcmUgdGhhbiB0aGUgbWF4aW11bSBmcmFjdGlvbiBkaWdpdHMsIHRoZW4gd2UgaGF2ZSBhbiB1bmRlcmZsb3cKKyAgICAgICAgICAgIC8vIGZvciB0aGUgcHJpbnRlZCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIGlmICgtZGVjaW1hbEF0ID4gbWF4aW11bURpZ2l0cykgeworICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKC1kZWNpbWFsQXQgPT0gbWF4aW11bURpZ2l0cykgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRSb3VuZFVwKDApKSB7CisgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgKytkZWNpbWFsQXQ7CisgICAgICAgICAgICAgICAgICAgIGRpZ2l0c1swXSA9IChieXRlKScxJzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGVsc2UgZmFsbCB0aHJvdWdoCisgICAgICAgIH0KKworICAgICAgICAvLyBFbGltaW5hdGUgdHJhaWxpbmcgemVyb3MuCisgICAgICAgIHdoaWxlIChjb3VudCA+IDEgJiYgZGlnaXRzW2NvdW50IC0gMV0gPT0gJzAnKQorICAgICAgICAgICAgLS1jb3VudDsKKworICAgICAgICAvLyBFbGltaW5hdGUgZGlnaXRzIGJleW9uZCBtYXhpbXVtIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuCisgICAgICAgIC8vIFJvdW5kIHVwIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICByb3VuZChmaXhlZFBvaW50ID8gKG1heGltdW1EaWdpdHMgKyBkZWNpbWFsQXQpIDogbWF4aW11bURpZ2l0cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZvcm0gREREREQsIERERERELkRERERELAorICAgICAqIG9yIERERERERSsvLURERERELCBzZXQgdGhpcyBvYmplY3QncyB2YWx1ZSB0byBpdC4gIElnbm9yZQorICAgICAqIGFueSBsZWFkaW5nICctJy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0KFN0cmluZyByZXAsIGludCBtYXhDb3VudCkgeworICAgICAgICBkZWNpbWFsQXQgPSAtMTsKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBpbnQgZXhwb25lbnQgPSAwOworICAgICAgICAvLyBOdW1iZXIgb2YgemVyb3MgYmV0d2VlbiBkZWNpbWFsIHBvaW50IGFuZCBmaXJzdCBub24temVybyBkaWdpdCBhZnRlcgorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LCBmb3IgbnVtYmVycyA8IDEuCisgICAgICAgIGludCBsZWFkaW5nWmVyb3NBZnRlckRlY2ltYWwgPSAwOworICAgICAgICBib29sZWFuIG5vblplcm9EaWdpdFNlZW4gPSBmYWxzZTsKKyAgICAgICAgLy8gU2tpcCBvdmVyIGxlYWRpbmcgJy0nCisgICAgICAgIGludCBpPTA7CisgICAgICAgIGlmIChyZXAuY2hhckF0KGkpID09ICctJykgeworICAgICAgICAgICAgKytpOworICAgICAgICB9CisgICAgICAgIGZvciAoOyBpIDwgcmVwLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHJlcC5jaGFyQXQoaSk7CisgICAgICAgICAgICBpZiAoYyA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICBkZWNpbWFsQXQgPSBjb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnZScgfHwgYyA9PSAnRScpIHsKKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgLy8gSW50ZWdlci5wYXJzZUludCBkb2Vzbid0IGhhbmRsZSBsZWFkaW5nICcrJyBzaWducworICAgICAgICAgICAgICAgIGlmIChyZXAuY2hhckF0KGkpID09ICcrJykgeworICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gSW50ZWdlci52YWx1ZU9mKHJlcC5zdWJzdHJpbmcoaSkpLmludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWF4Q291bnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5vblplcm9EaWdpdFNlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgbm9uWmVyb0RpZ2l0U2VlbiA9IChjICE9ICcwJyk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9uWmVyb0RpZ2l0U2VlbiAmJiBkZWNpbWFsQXQgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrbGVhZGluZ1plcm9zQWZ0ZXJEZWNpbWFsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG5vblplcm9EaWdpdFNlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgZW5zdXJlQ2FwYWNpdHkoY291bnQrMSwgY291bnQpOworICAgICAgICAgICAgICAgICAgICBkaWdpdHNbY291bnQrK10gPSAoYnl0ZSljOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZGVjaW1hbEF0ID09IC0xKSB7CisgICAgICAgICAgICBkZWNpbWFsQXQgPSBjb3VudDsKKyAgICAgICAgfQorICAgICAgICBkZWNpbWFsQXQgKz0gZXhwb25lbnQgLSBsZWFkaW5nWmVyb3NBZnRlckRlY2ltYWw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdHJ1bmNhdGluZyB0aGUgcmVwcmVzZW50YXRpb24gdG8gdGhlIGdpdmVuIG51bWJlcgorICAgICAqIG9mIGRpZ2l0cyB3aWxsIHJlc3VsdCBpbiBhbiBpbmNyZW1lbnQgdG8gdGhlIGxhc3QgZGlnaXQuICBUaGlzCisgICAgICogbWV0aG9kIGltcGxlbWVudHMgaGFsZi1ldmVuIHJvdW5kaW5nLCB0aGUgZGVmYXVsdCByb3VuZGluZyBtb2RlLgorICAgICAqIFtibmZdCisgICAgICogQHBhcmFtIG1heGltdW1EaWdpdHMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8ga2VlcCwgZnJvbSAwIHRvCisgICAgICogPGNvZGU+Y291bnQtMTwvY29kZT4uICBJZiAwLCB0aGVuIGFsbCBkaWdpdHMgYXJlIHJvdW5kZWQgYXdheSwgYW5kCisgICAgICogdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIGEgb25lIHNob3VsZCBiZSBnZW5lcmF0ZWQgKGUuZy4sIGZvcm1hdHRpbmcKKyAgICAgKiAwLjA5IHdpdGggIiMuIyIpLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBkaWdpdCA8Y29kZT5tYXhpbXVtRGlnaXRzLTE8L2NvZGU+IHNob3VsZCBiZQorICAgICAqIGluY3JlbWVudGVkCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHNob3VsZFJvdW5kVXAoaW50IG1heGltdW1EaWdpdHMpIHsKKyAgICAgICAgLy8gdmFyaWFibGUgbm90IHVzZWQgYm9vbGVhbiBpbmNyZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgLy8gSW1wbGVtZW50IElFRUUgaGFsZi1ldmVuIHJvdW5kaW5nCisgICAgICAgIC8qQnVnIDQyNDMxMDgKKyAgICAgICAgICBmb3JtYXQoMC4wKSBnaXZlcyAiMC4xIiBpZiBwcmVjZWRlZCBieSBwYXJzZSgiOTkuOTkiKSBbUmljaGFyZC9HQ0xdCisgICAgICAgICovCisgICAgICAgIGlmIChtYXhpbXVtRGlnaXRzIDwgY291bnQpIHsKKyAgICAgICAgICAgIGlmIChkaWdpdHNbbWF4aW11bURpZ2l0c10gPiAnNScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzW21heGltdW1EaWdpdHNdID09ICc1JyApIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpPW1heGltdW1EaWdpdHMrMTsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNbaV0gIT0gJzAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4aW11bURpZ2l0cyA+IDAgJiYgKGRpZ2l0c1ttYXhpbXVtRGlnaXRzLTFdICUgMiAhPSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogUm91bmQgdGhlIHJlcHJlc2VudGF0aW9uIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGlnaXRzLgorICAgICAqIEBwYXJhbSBtYXhpbXVtRGlnaXRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgc2hvd24uCisgICAgICogVXBvbiByZXR1cm4sIGNvdW50IHdpbGwgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG1heGltdW1EaWdpdHMuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgcm91bmQoaW50IG1heGltdW1EaWdpdHMpIHsgICAgICAgIAorICAgICAgICAvLyBFbGltaW5hdGUgZGlnaXRzIGJleW9uZCBtYXhpbXVtIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuCisgICAgICAgIC8vIFJvdW5kIHVwIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAvLyBbYm5mXSByZXdyaXR0ZW4gdG8gZml4IDQxNzk4MTgKKyAgICAgICAgaWYgKG1heGltdW1EaWdpdHMgPiAwICYmIG1heGltdW1EaWdpdHMgPCBjb3VudCkgeworICAgICAgICAgICAgaWYgKHNob3VsZFJvdW5kVXAobWF4aW11bURpZ2l0cykpIHsKKyAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBpbnZvbHZlZCBpbmNyZW1lbnRpbmcgZGlnaXRzIGZyb20gTFNEIHRvIE1TRC4KKyAgICAgICAgICAgICAgICAvLyBJbiBtb3N0IGNhc2VzIHRoaXMgaXMgc2ltcGxlLCBidXQgaW4gYSB3b3JzdCBjYXNlIHNpdHVhdGlvbgorICAgICAgICAgICAgICAgIC8vICg5OTk5Li45OSkgd2UgaGF2ZSB0byBhZGp1c3QgdGhlIGRlY2ltYWxBdCB2YWx1ZS4KKyAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLS1tYXhpbXVtRGlnaXRzOworICAgICAgICAgICAgICAgICAgICBpZiAobWF4aW11bURpZ2l0cyA8IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYWxsIDkncywgc28gd2UgaW5jcmVtZW50IHRvIGEgc2luZ2xlIGRpZ2l0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiBvbmUgYW5kIGFkanVzdCB0aGUgZXhwb25lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHNbMF0gPSAoYnl0ZSkgJzEnOworICAgICAgICAgICAgICAgICAgICAgICAgKytkZWNpbWFsQXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtRGlnaXRzID0gMDsgLy8gQWRqdXN0IHRoZSBjb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICArK2RpZ2l0c1ttYXhpbXVtRGlnaXRzXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c1ttYXhpbXVtRGlnaXRzXSA8PSAnOScpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAvLyBkaWdpdHNbbWF4aW11bURpZ2l0c10gPSAnMCc7IC8vIFVubmVjZXNzYXJ5IHNpbmNlIHdlJ2xsIHRydW5jYXRlIHRoaXMKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyttYXhpbXVtRGlnaXRzOyAvLyBJbmNyZW1lbnQgZm9yIHVzZSBhcyBjb3VudAorICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQgPSBtYXhpbXVtRGlnaXRzOworICAgICAgICAgICAgLypCdWcgNDIxNzY2MSBEZWNpbWFsRm9ybWF0IGZvcm1hdHMgMS4wMDEgdG8gIjEuMDAiIGluc3RlYWQgb2YgIjEiCisgICAgICAgICAgICAgIEVsaW1pbmF0ZSB0cmFpbGluZyB6ZXJvcy4gW1JpY2hhcmQvR0NMXQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHdoaWxlIChjb3VudCA+IDEgJiYgZGlnaXRzW2NvdW50LTFdID09ICcwJykgeworICAgICAgICAgICAgICAgIC0tY291bnQ7CisgICAgICAgICAgICB9IC8vW1JpY2hhcmQvR0NMXQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVXRpbGl0eSByb3V0aW5lIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0IGxpc3QgZnJvbSBhIGxvbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQobG9uZyBzb3VyY2UpCisgICAgeworICAgICAgICBzZXQoc291cmNlLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGRpZ2l0IGxpc3QgdG8gYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gbG9uZyB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gc291cmNlIFZhbHVlIHRvIGJlIGNvbnZlcnRlZDsgbXVzdCBiZSA+PSAwIG9yID09CisgICAgICogTG9uZy5NSU5fVkFMVUUuCisgICAgICogQHBhcmFtIG1heGltdW1EaWdpdHMgVGhlIG1vc3QgZGlnaXRzIHdoaWNoIHNob3VsZCBiZSBjb252ZXJ0ZWQuCisgICAgICogSWYgbWF4aW11bURpZ2l0cyBpcyBsb3dlciB0aGFuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzCisgICAgICogaW4gc291cmNlLCB0aGUgcmVwcmVzZW50YXRpb24gd2lsbCBiZSByb3VuZGVkLiAgSWdub3JlZCBpZiA8PSAwLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldChsb25nIHNvdXJjZSwgaW50IG1heGltdW1EaWdpdHMpCisgICAgeworICAgICAgICAvLyBUaGlzIG1ldGhvZCBkb2VzIG5vdCBleHBlY3QgYSBuZWdhdGl2ZSBudW1iZXIuIEhvd2V2ZXIsCisgICAgICAgIC8vICJzb3VyY2UiIGNhbiBiZSBhIExvbmcuTUlOX1ZBTFVFICgtOTIyMzM3MjAzNjg1NDc3NTgwOCksCisgICAgICAgIC8vIGlmIHRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkIGlzIGEgTG9uZy5NSU5fVkFMVUUuICBJbiB0aGF0CisgICAgICAgIC8vIGNhc2UsIGl0IHdpbGwgYmUgZm9ybWF0dGVkIGFzIC1Mb25nLk1JTl9WQUxVRSwgYSBudW1iZXIKKyAgICAgICAgLy8gd2hpY2ggaXMgb3V0c2lkZSB0aGUgbGVnYWwgcmFuZ2Ugb2YgYSBsb25nLCBidXQgd2hpY2ggY2FuCisgICAgICAgIC8vIGJlIHJlcHJlc2VudGVkIGJ5IERpZ2l0TGlzdC4KKyAgICAgICAgLy8gW05FV10gRmFzdGVyIGltcGxlbWVudGF0aW9uCisgICAgICAgIGlmIChzb3VyY2UgPD0gMCkgeworICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBMb25nLk1JTl9WQUxVRSkgeworICAgICAgICAgICAgICAgIGRlY2ltYWxBdCA9IGNvdW50ID0gTUFYX0xPTkdfRElHSVRTOworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoTE9OR19NSU5fUkVQLCAwLCBkaWdpdHMsIDAsIGNvdW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgICAgICAgIGRlY2ltYWxBdCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgbGVmdCA9IE1BWF9MT05HX0RJR0lUUzsKKyAgICAgICAgICAgIGludCByaWdodDsKKyAgICAgICAgICAgIHdoaWxlIChzb3VyY2UgPiAwKSB7CisgICAgICAgICAgICAgICAgZGlnaXRzWy0tbGVmdF0gPSAoYnl0ZSkgKCgobG9uZykgJzAnKSArIChzb3VyY2UgJSAxMCkpOworICAgICAgICAgICAgICAgIHNvdXJjZSAvPSAxMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlY2ltYWxBdCA9IE1BWF9MT05HX0RJR0lUUy1sZWZ0OworICAgICAgICAgICAgLy8gRG9uJ3QgY29weSB0cmFpbGluZyB6ZXJvcworICAgICAgICAgICAgLy8gd2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbm9uLXplcm8gZGlnaXQsCisgICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGxvd2VyIGJvdW5kcworICAgICAgICAgICAgZm9yIChyaWdodCA9IE1BWF9MT05HX0RJR0lUUyAtIDE7IGRpZ2l0c1tyaWdodF0gPT0gKGJ5dGUpICcwJzsgLS1yaWdodCkge30KKyAgICAgICAgICAgIGNvdW50ID0gcmlnaHQgLSBsZWZ0ICsgMTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZGlnaXRzLCBsZWZ0LCBkaWdpdHMsIDAsIGNvdW50KTsKKyAgICAgICAgfSAgICAgICAgCisgICAgICAgIGlmIChtYXhpbXVtRGlnaXRzID4gMCkgcm91bmQobWF4aW11bURpZ2l0cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBkaWdpdCBsaXN0IHRvIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIEJpZ0ludGVnZXIgdmFsdWUuCisgICAgICogW2JuZl0KKyAgICAgKiBAcGFyYW0gc291cmNlIFZhbHVlIHRvIGJlIGNvbnZlcnRlZAorICAgICAqIEBwYXJhbSBtYXhpbXVtRGlnaXRzIFRoZSBtb3N0IGRpZ2l0cyB3aGljaCBzaG91bGQgYmUgY29udmVydGVkLgorICAgICAqIElmIG1heGltdW1EaWdpdHMgaXMgbG93ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cworICAgICAqIGluIHNvdXJjZSwgdGhlIHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgcm91bmRlZC4gIElnbm9yZWQgaWYgPD0gMC4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoQmlnSW50ZWdlciBzb3VyY2UsIGludCBtYXhpbXVtRGlnaXRzKSB7CisgICAgICAgIFN0cmluZyBzdHJpbmdEaWdpdHMgPSBzb3VyY2UudG9TdHJpbmcoKTsKKworICAgICAgICBjb3VudCA9IGRlY2ltYWxBdCA9IHN0cmluZ0RpZ2l0cy5sZW5ndGgoKTsKKworICAgICAgICAvLyBEb24ndCBjb3B5IHRyYWlsaW5nIHplcm9zCisgICAgICAgIHdoaWxlIChjb3VudCA+IDEgJiYgc3RyaW5nRGlnaXRzLmNoYXJBdChjb3VudCAtIDEpID09ICcwJykgLS1jb3VudDsKKworICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKHN0cmluZ0RpZ2l0cy5jaGFyQXQoMCkgPT0gJy0nKSB7CisgICAgICAgICAgICArK29mZnNldDsKKyAgICAgICAgICAgIC0tY291bnQ7CisgICAgICAgICAgICAtLWRlY2ltYWxBdDsKKyAgICAgICAgfQorCisgICAgICAgIGVuc3VyZUNhcGFjaXR5KGNvdW50LCAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBkaWdpdHNbaV0gPSAoYnl0ZSkgc3RyaW5nRGlnaXRzLmNoYXJBdChpICsgb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXhpbXVtRGlnaXRzID4gMCkgcm91bmQobWF4aW11bURpZ2l0cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgc2V0cyB0aGlzIGRpZ2l0IGxpc3QgdG8gcmVwcmVzZW50IHRoZQorICAgICAqIGdpdmVuIHZhbHVlLiAgVGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQKKyAgICAgKiByZXR1cm5lZCBieSBCaWdEZWNpbWFsLgorICAgICAqIEBwYXJhbSBzdHJpbmdEaWdpdHMgdmFsdWUgdG8gYmUgcmVwcmVzZW50ZWQgd2l0aCB0aGUgZm9sbG93aW5nCisgICAgICogc3ludGF4LCBleHByZXNzZWQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb246IC0/XGQqLj9cZCoKKyAgICAgKiBNdXN0IG5vdCBiZSBhbiBlbXB0eSBzdHJpbmcuCisgICAgICogQHBhcmFtIG1heGltdW1EaWdpdHMgVGhlIG1vc3QgZGlnaXRzIHdoaWNoIHNob3VsZCBiZSBjb252ZXJ0ZWQuCisgICAgICogSWYgbWF4aW11bURpZ2l0cyBpcyBsb3dlciB0aGFuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzCisgICAgICogaW4gc291cmNlLCB0aGUgcmVwcmVzZW50YXRpb24gd2lsbCBiZSByb3VuZGVkLiAgSWdub3JlZCBpZiA8PSAwLgorICAgICAqIEBwYXJhbSBmaXhlZFBvaW50IElmIHRydWUsIHRoZW4gbWF4aW11bURpZ2l0cyBpcyB0aGUgbWF4aW11bQorICAgICAqIGZyYWN0aW9uYWwgZGlnaXRzIHRvIGJlIGNvbnZlcnRlZC4gIElmIGZhbHNlLCB0b3RhbCBkaWdpdHMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldEJpZ0RlY2ltYWxEaWdpdHMoU3RyaW5nIHN0cmluZ0RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4aW11bURpZ2l0cywgYm9vbGVhbiBmaXhlZFBvaW50KSB7CisvL3wgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5vbi16ZXJvIGRpZ2l0LCB0aGUgZGVjaW1hbCwgYW5kIHRoZSBsYXN0IG5vbi16ZXJvIGRpZ2l0LgorLy98ICAgICAgICBpbnQgZmlyc3Q9LTEsIGxhc3Q9c3RyaW5nRGlnaXRzLmxlbmd0aCgpLTEsIGRlY2ltYWw9LTE7CisvL3wgICAgICAgIGZvciAoaW50IGk9MDsgKGZpcnN0PDAgfHwgZGVjaW1hbDwwKSAmJiBpPD1sYXN0OyArK2kpIHsKKy8vfCAgICAgICAgICAgIGNoYXIgYyA9IHN0cmluZ0RpZ2l0cy5jaGFyQXQoaSk7CisvL3wgICAgICAgICAgICBpZiAoYyA9PSAnLicpIHsKKy8vfCAgICAgICAgICAgICAgICBkZWNpbWFsID0gaTsKKy8vfCAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlyc3QgPCAwICYmIChjID49ICcxJyAmJiBjIDw9ICc5JykpIHsKKy8vfCAgICAgICAgICAgICAgICBmaXJzdCA9IGk7CisvL3wgICAgICAgICAgICB9CisvL3wgICAgICAgIH0KKy8vfAorLy98ICAgICAgICBpZiAoZmlyc3QgPCAwKSB7CisvL3wgICAgICAgICAgICBjbGVhcigpOworLy98ICAgICAgICAgICAgcmV0dXJuOworLy98ICAgICAgICB9CisvL3wKKy8vfCAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBub24temVybyBkaWdpdCwgc28gdGhlCisvL3wgICAgICAgIC8vIGZvbGxvd2luZyBsb29wIGlzIHNhZmUuCisvL3wgICAgICAgIGZvciAoOzspIHsKKy8vfCAgICAgICAgICAgIGNoYXIgYyA9IHN0cmluZ0RpZ2l0cy5jaGFyQXQobGFzdCk7CisvL3wgICAgICAgICAgICBpZiAoYyAhPSAnMCcgJiYgYyAhPSAnLicpIHsKKy8vfCAgICAgICAgICAgICAgICBicmVhazsKKy8vfCAgICAgICAgICAgIH0KKy8vfCAgICAgICAgICAgIC0tbGFzdDsKKy8vfCAgICAgICAgfQorLy98CisvL3wgICAgICAgIGlmIChkZWNpbWFsIDwgMCkgeworLy98ICAgICAgICAgICAgZGVjaW1hbCA9IHN0cmluZ0RpZ2l0cy5sZW5ndGgoKTsKKy8vfCAgICAgICAgfQorLy98CisvL3wgICAgICAgIGNvdW50ID0gbGFzdCAtIGZpcnN0OworLy98ICAgICAgICBpZiAoZGVjaW1hbCA8IGZpcnN0IHx8IGRlY2ltYWwgPiBsYXN0KSB7CisvL3wgICAgICAgICAgICArK2NvdW50OworLy98ICAgICAgICB9CisvL3wgICAgICAgIGRlY2ltYWxBdCA9IGRlY2ltYWwgLSBmaXJzdDsKKy8vfCAgICAgICAgaWYgKGRlY2ltYWxBdCA8IDApIHsKKy8vfCAgICAgICAgICAgICsrZGVjaW1hbEF0OworLy98ICAgICAgICB9CisvL3wKKy8vfCAgICAgICAgZW5zdXJlQ2FwYWNpdHkoY291bnQsIDApOworLy98ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKy8vfCAgICAgICAgICAgIGRpZ2l0c1tpXSA9IChieXRlKSBzdHJpbmdEaWdpdHMuY2hhckF0KGZpcnN0KyspOworLy98ICAgICAgICAgICAgaWYgKGZpcnN0ID09IGRlY2ltYWwpIHsKKy8vfCAgICAgICAgICAgICAgICArK2ZpcnN0OworLy98ICAgICAgICAgICAgfQorLy98ICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIG1heERpZ2l0cyBoZXJlIGNvdWxkIGFsc28gYmUgSW50ZWdlci5NQVhfVkFMVUUKKyAgICAgICAgc2V0KHN0cmluZ0RpZ2l0cywgc3RyaW5nRGlnaXRzLmxlbmd0aCgpKTsKKworICAgICAgICAvLyBFbGltaW5hdGUgZGlnaXRzIGJleW9uZCBtYXhpbXVtIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuCisgICAgICAgIC8vIFJvdW5kIHVwIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICByb3VuZChmaXhlZFBvaW50ID8gKG1heGltdW1EaWdpdHMgKyBkZWNpbWFsQXQpIDogbWF4aW11bURpZ2l0cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBkaWdpdCBsaXN0IHRvIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIEJpZ0RlY2ltYWwgdmFsdWUuCisgICAgICogW2JuZl0KKyAgICAgKiBAcGFyYW0gc291cmNlIFZhbHVlIHRvIGJlIGNvbnZlcnRlZAorICAgICAqIEBwYXJhbSBtYXhpbXVtRGlnaXRzIFRoZSBtb3N0IGRpZ2l0cyB3aGljaCBzaG91bGQgYmUgY29udmVydGVkLgorICAgICAqIElmIG1heGltdW1EaWdpdHMgaXMgbG93ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cworICAgICAqIGluIHNvdXJjZSwgdGhlIHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgcm91bmRlZC4gIElnbm9yZWQgaWYgPD0gMC4KKyAgICAgKiBAcGFyYW0gZml4ZWRQb2ludCBJZiB0cnVlLCB0aGVuIG1heGltdW1EaWdpdHMgaXMgdGhlIG1heGltdW0KKyAgICAgKiBmcmFjdGlvbmFsIGRpZ2l0cyB0byBiZSBjb252ZXJ0ZWQuICBJZiBmYWxzZSwgdG90YWwgZGlnaXRzLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldChqYXZhLm1hdGguQmlnRGVjaW1hbCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhpbXVtRGlnaXRzLCBib29sZWFuIGZpeGVkUG9pbnQpIHsKKyAgICAgICAgc2V0QmlnRGVjaW1hbERpZ2l0cyhzb3VyY2UudG9TdHJpbmcoKSwgbWF4aW11bURpZ2l0cywgZml4ZWRQb2ludCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIGRpZ2l0IGxpc3QgdG8gYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gQmlnRGVjaW1hbCB2YWx1ZS4KKyAgICAgKiBbYm5mXQorICAgICAqIEBwYXJhbSBzb3VyY2UgVmFsdWUgdG8gYmUgY29udmVydGVkCisgICAgICogQHBhcmFtIG1heGltdW1EaWdpdHMgVGhlIG1vc3QgZGlnaXRzIHdoaWNoIHNob3VsZCBiZSBjb252ZXJ0ZWQuCisgICAgICogSWYgbWF4aW11bURpZ2l0cyBpcyBsb3dlciB0aGFuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzCisgICAgICogaW4gc291cmNlLCB0aGUgcmVwcmVzZW50YXRpb24gd2lsbCBiZSByb3VuZGVkLiAgSWdub3JlZCBpZiA8PSAwLgorICAgICAqIEBwYXJhbSBmaXhlZFBvaW50IElmIHRydWUsIHRoZW4gbWF4aW11bURpZ2l0cyBpcyB0aGUgbWF4aW11bQorICAgICAqIGZyYWN0aW9uYWwgZGlnaXRzIHRvIGJlIGNvbnZlcnRlZC4gIElmIGZhbHNlLCB0b3RhbCBkaWdpdHMuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgc2V0KGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhpbXVtRGlnaXRzLCBib29sZWFuIGZpeGVkUG9pbnQpIHsKKyAgICAgICAgc2V0QmlnRGVjaW1hbERpZ2l0cyhzb3VyY2UudG9TdHJpbmcoKSwgbWF4aW11bURpZ2l0cywgZml4ZWRQb2ludCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogZXF1YWxpdHkgdGVzdCBiZXR3ZWVuIHR3byBkaWdpdCBsaXN0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgeworICAgICAgICBpZiAodGhpcyA9PSBvYmopICAgICAgICAgICAgICAgICAgICAgIC8vIHF1aWNrIGNoZWNrCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRGlnaXRMaXN0KSkgICAgICAgICAvLyAoMSkgc2FtZSBvYmplY3Q/CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIERpZ2l0TGlzdCBvdGhlciA9IChEaWdpdExpc3QpIG9iajsKKyAgICAgICAgaWYgKGNvdW50ICE9IG90aGVyLmNvdW50IHx8CisgICAgICAgIGRlY2ltYWxBdCAhPSBvdGhlci5kZWNpbWFsQXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIGlmIChkaWdpdHNbaV0gIT0gb3RoZXIuZGlnaXRzW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2VuZXJhdGVzIHRoZSBoYXNoIGNvZGUgZm9yIHRoZSBkaWdpdCBsaXN0LgorICAgICAqLworICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgIGludCBoYXNoY29kZSA9IGRlY2ltYWxBdDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICBoYXNoY29kZSA9IGhhc2hjb2RlICogMzcgKyBkaWdpdHNbaV07CisKKyAgICAgICAgcmV0dXJuIGhhc2hjb2RlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIERpZ2l0TGlzdCByZXByZXNlbnRzIExvbmcuTUlOX1ZBTFVFOworICAgICAqIGZhbHNlLCBvdGhlcndpc2UuICBUaGlzIGlzIHJlcXVpcmVkIHNvIHRoYXQgZ2V0TG9uZygpIHdvcmtzLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc0xvbmdNSU5fVkFMVUUoKQorICAgIHsKKyAgICAgICAgaWYgKGRlY2ltYWxBdCAhPSBjb3VudCB8fCBjb3VudCAhPSBNQVhfTE9OR19ESUdJVFMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRpZ2l0c1tpXSAhPSBMT05HX01JTl9SRVBbaV0pIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBMT05HX01JTl9SRVA7CisKKyAgICBzdGF0aWMKKyAgICB7CisgICAgICAgIC8vIFN0b3JlIHRoZSByZXByZXNlbnRhdGlvbiBvZiBMT05HX01JTiB3aXRob3V0IHRoZSBsZWFkaW5nICctJworICAgICAgICBTdHJpbmcgcyA9IExvbmcudG9TdHJpbmcoTG9uZy5NSU5fVkFMVUUpOworICAgICAgICBMT05HX01JTl9SRVAgPSBuZXcgYnl0ZVtNQVhfTE9OR19ESUdJVFNdOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfTE9OR19ESUdJVFM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgTE9OR19NSU5fUkVQW2ldID0gKGJ5dGUpcy5jaGFyQXQoaSArIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBmbG9vciBvZiB0aGUgbG9nIGJhc2UgMTAgb2YgYSBnaXZlbiBkb3VibGUuCisgICAgICogVGhpcyBtZXRob2QgY29tcGVuc2F0ZXMgZm9yIGluYWNjdXJhY2llcyB3aGljaCBhcmlzZSBuYXR1cmFsbHkgd2hlbgorICAgICAqIGNvbXB1dGluZyBsb2dzLCBhbmQgYWx3YXlzIGdpdmUgdGhlIGNvcnJlY3QgdmFsdWUuICBUaGUgcGFyYW1ldGVyCisgICAgICogbXVzdCBiZSBwb3NpdGl2ZSBhbmQgZmluaXRlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBsb2cxMChkb3VibGUgZCkKKyAgICB7CisgICAgICAgIC8vIFRoZSByZWFzb24gdGhpcyByb3V0aW5lIGlzIG5lZWRlZCBpcyB0aGF0IHNpbXBseSB0YWtpbmcgdGhlCisgICAgICAgIC8vIGxvZyBhbmQgZGl2aWRpbmcgYnkgbG9nMTAgeWllbGRzIGEgcmVzdWx0IHdoaWNoIG1heSBiZSBvZmYKKyAgICAgICAgLy8gYnkgMSBkdWUgdG8gcm91bmRpbmcgZXJyb3JzLiAgRm9yIGV4YW1wbGUsIHRoZSBuYWl2ZSBsb2cxMAorICAgICAgICAvLyBvZiAxLjBlMzAwIHRha2VuIHRoaXMgd2F5IGlzIDI5OSwgcmF0aGVyIHRoYW4gMzAwLgorICAgICAgICBkb3VibGUgbG9nMTAgPSBNYXRoLmxvZyhkKSAvIExPRzEwOworICAgICAgICBpbnQgaWxvZzEwID0gKGludClNYXRoLmZsb29yKGxvZzEwKTsKKyAgICAgICAgLy8gUG9zaXRpdmUgbG9ncyBjb3VsZCBiZSB0b28gc21hbGwsIGUuZy4gMC45OSBpbnN0ZWFkIG9mIDEuMAorICAgICAgICBpZiAobG9nMTAgPiAwICYmIGQgPj0gTWF0aC5wb3coMTAsIGlsb2cxMCArIDEpKQorICAgICAgICB7CisgICAgICAgICAgICArK2lsb2cxMDsKKyAgICAgICAgfQorICAgICAgICAvLyBOZWdhdGl2ZSBsb2dzIGNvdWxkIGJlIHRvbyBiaWcsIGUuZy4gLTAuOTkgaW5zdGVhZCBvZiAtMS4wCisgICAgICAgIGVsc2UgaWYgKGxvZzEwIDwgMCAmJiBkIDwgTWF0aC5wb3coMTAsIGlsb2cxMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC0taWxvZzEwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbG9nMTA7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIExPRzEwID0gTWF0aC5sb2coMTAuMCk7CisKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChpc1plcm8oKSkgcmV0dXJuICIwIjsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoIjAuIik7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgKytpKSBidWYuYXBwZW5kKChjaGFyKWRpZ2l0c1tpXSk7CisgICAgICAgIGJ1Zi5hcHBlbmQoIngxMF4iKTsKKyAgICAgICAgYnVmLmFwcGVuZChkZWNpbWFsQXQpOworICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvRXNjYXBlVHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0VzY2FwZVRyYW5zbGl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQwYTFhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0VzY2FwZVRyYW5zbGl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChjKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAxMS8xOS8yMDAxICBhbGl1ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIEEgdHJhbnNsaXRlcmF0b3IgdGhhdCBjb252ZXJ0cyBVbmljb2RlIGNoYXJhY3RlcnMgdG8gYW4gZXNjYXBlCisgKiBmb3JtLiAgRXhhbXBsZXMgb2YgZXNjYXBlIGZvcm1zIGFyZSAiVSs0RTAxIiBhbmQgIiYjeDEwRkZGRjsiLgorICogRXNjYXBlIGZvcm1zIGhhdmUgYSBwcmVmaXggYW5kIHN1ZmZpeCwgZWl0aGVyIG9mIHdoaWNoIG1heSBiZQorICogZW1wdHksIGEgcmFkaXgsIHR5cGljYWxseSAxNiBvciAxMCwgYSBtaW5pbXVtIGRpZ2l0IGNvdW50LAorICogdHlwaWNhbGx5IDEsIDQsIG9yIDgsIGFuZCBhIGJvb2xlYW4gdGhhdCBzcGVjaWZpZXMgd2hldGhlcgorICogc3VwcGxlbWVudGFsIGNoYXJhY3RlcnMgYXJlIGhhbmRsZWQgYXMgMzItYml0IGNvZGUgcG9pbnRzIG9yIGFzIHR3bworICogMTYtYml0IGNvZGUgdW5pdHMuICBNb3N0IGVzY2FwZSBmb3JtcyBoYW5kbGUgMzItYml0IGNvZGUgcG9pbnRzLAorICogYnV0IHNvbWUsIHN1Y2ggYXMgdGhlIEphdmEgZm9ybSwgaW50ZW50aW9uYWxseSBicmVhayB0aGVtIGludG8gdHdvCisgKiBzdXJyb2dhdGUgcGFpcnMsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICoKKyAqIDxwPlNvbWUgZXNjYXBlIGZvcm1zIGFjdHVhbGx5IGhhdmUgdHdvIGRpZmZlcmVudCBwYXR0ZXJucywgb25lIGZvcgorICogQk1QIGNoYXJhY3RlcnMgKDAuLkZGRkYpIGFuZCBvbmUgZm9yIHN1cHBsZW1lbnRzICg+RkZGRikuICBUbworICogaGFuZGxlIHRoaXMsIGEgc2Vjb25kIEVzY2FwZVRyYW5zbGl0ZXJhdG9yIG1heSBiZSBkZWZpbmVkIHRoYXQKKyAqIHNwZWNpZmllcyB0aGUgcGF0dGVybiB0byBiZSBwcm9kdWNlZCBmb3Igc3VwcGxlbWVudGFscy4gIEFuIGV4YW1wbGUKKyAqIG9mIGEgZm9ybSB0aGF0IHJlcXVpcmVzIHRoaXMgaXMgdGhlIEMgZm9ybSwgd2hpY2ggdXNlcyAiXFx1RkZGRiIKKyAqIGZvciBCTVAgY2hhcmFjdGVycyBhbmQgIlxcVTAwMTBGRkZGIiBmb3Igc3VwcGxlbWVudGFscy4KKyAqCisgKiA8cD5UaGlzIGNsYXNzIGlzIHBhY2thZ2UgcHJpdmF0ZS4gIEl0IHJlZ2lzdGVycyBzZXZlcmFsIHN0YW5kYXJkCisgKiB2YXJpYW50cyB3aXRoIHRoZSBzeXN0ZW0gd2hpY2ggYXJlIHRoZW4gYWNjZXNzZWQgdmlhIHRoZWlyIElEcy4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAdmVyc2lvbiAkUkNTZmlsZTogRXNjYXBlVHJhbnNsaXRlcmF0b3IuamF2YSx2ICQgJFJldmlzaW9uOiAxLjUgJCAkRGF0ZTogMjAwMi8wMi8yNSAyMjo0Mzo1OCAkCisgKi8KK2NsYXNzIEVzY2FwZVRyYW5zbGl0ZXJhdG9yIGV4dGVuZHMgVHJhbnNsaXRlcmF0b3IgeworCisgICAgLyoqCisgICAgICogVGhlIHByZWZpeCBvZiB0aGUgZXNjYXBlIGZvcm07IG1heSBiZSBlbXB0eSwgYnV0IHVzdWFsbHkgaXNuJ3QuCisgICAgICogTWF5IG5vdCBiZSBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIHByZWZpeDsKKworICAgIC8qKgorICAgICAqIFRoZSBwcmVmaXggb2YgdGhlIGVzY2FwZSBmb3JtOyBvZnRlbiBlbXB0eS4gIE1heSBub3QgYmUgbnVsbC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBzdWZmaXg7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcmFkaXggdG8gZGlzcGxheSB0aGUgbnVtYmVyIGluLiAgVHlwaWNhbGx5IDE2IG9yIDEwLiAgTXVzdAorICAgICAqIGJlIGluIHRoZSByYW5nZSAyIHRvIDM2LgorICAgICAqLworICAgIHByaXZhdGUgaW50IHJhZGl4OworCisgICAgLyoqCisgICAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cy4gIFR5cGljYWxseSAxLCA0LCBvciA4LiAgVmFsdWVzCisgICAgICogbGVzcyB0aGFuIDEgYXJlIGVxdWl2YWxlbnQgdG8gMS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtaW5EaWdpdHM7CisKKyAgICAvKioKKyAgICAgKiBJZiB0cnVlLCBzdXBwbGVtZW50YWxzIGFyZSBoYW5kbGVkIGFzIDMyLWJpdCBjb2RlIHBvaW50cy4gIElmCisgICAgICogZmFsc2UsIHRoZXkgYXJlIGhhbmRsZWQgYXMgdHdvIDE2LWJpdCBjb2RlIHVuaXRzLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBncm9rU3VwcGxlbWVudGFsczsKKworICAgIC8qKgorICAgICAqIFRoZSBmb3JtIHRvIGJlIHVzZWQgZm9yIHN1cHBsZW1lbnRhbHMuICBJZiB0aGlzIGlzIG51bGwgdGhlbgorICAgICAqIHRoZSBzYW1lIGZvcm0gaXMgdXNlZCBmb3IgQk1QIGNoYXJhY3RlcnMgYW5kIHN1cHBsZW1lbnRhbHMuICBJZgorICAgICAqIHRoaXMgaXMgbm90IG51bGwgYW5kIGlmIGdyb2tTdXBwbGVtZW50YWxzIGlzIHRydWUgdGhlbiB0aGUKKyAgICAgKiBwcmVmaXgsIHN1ZmZpeCwgcmFkaXgsIGFuZCBtaW5EaWdpdHMgb2YgdGhpcyBvYmplY3QgYXJlIHVzZWQKKyAgICAgKiBmb3Igc3VwcGxlbWVudGFscy4KKyAgICAgKi8KKyAgICBwcml2YXRlIEVzY2FwZVRyYW5zbGl0ZXJhdG9yIHN1cHBsZW1lbnRhbEhhbmRsZXI7CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgc3RhbmRhcmQgdmFyaWFudHMgd2l0aCB0aGUgc3lzdGVtLiAgQ2FsbGVkIGJ5CisgICAgICogVHJhbnNsaXRlcmF0b3IgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyKCkgeworICAgICAgICAvLyBVbmljb2RlOiAiVSsxMEZGRkYiIGhleCwgbWluPTQsIG1heD02CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LUhleC9Vbmljb2RlIiwgbmV3IFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc2NhcGVUcmFuc2xpdGVyYXRvcigiQW55LUhleC9Vbmljb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVKyIsICIiLCAxNiwgNCwgdHJ1ZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gSmF2YTogIlxcdUZGRkYiIGhleCwgbWluPTQsIG1heD00CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LUhleC9KYXZhIiwgbmV3IFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc2NhcGVUcmFuc2xpdGVyYXRvcigiQW55LUhleC9KYXZhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXHUiLCAiIiwgMTYsIDQsIGZhbHNlLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBDOiAiXFx1RkZGRiIgaGV4LCBtaW49NCwgbWF4PTQ7IFxcVTAwMTBGRkZGIGhleCwgbWluPTgsIG1heD04CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LUhleC9DIiwgbmV3IFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc2NhcGVUcmFuc2xpdGVyYXRvcigiQW55LUhleC9DIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXHUiLCAiIiwgMTYsIDQsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFc2NhcGVUcmFuc2xpdGVyYXRvcigiIiwgIlxcVSIsICIiLCAxNiwgOCwgdHJ1ZSwgbnVsbCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFhNTDogIiYjeDEwRkZGRjsiIGhleCwgbWluPTEsIG1heD02CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LUhleC9YTUwiLCBuZXcgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzY2FwZVRyYW5zbGl0ZXJhdG9yKCJBbnktSGV4L1hNTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJiN4IiwgIjsiLCAxNiwgMSwgdHJ1ZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFhNTDEwOiAiJjExMTQxMTE7IiBkZWMsIG1pbj0xLCBtYXg9NyAobm90IHJlYWxseSAiQW55LUhleCIpCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LUhleC9YTUwxMCIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNjYXBlVHJhbnNsaXRlcmF0b3IoIkFueS1IZXgvWE1MMTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiYjIiwgIjsiLCAxMCwgMSwgdHJ1ZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFBlcmw6ICJcXHh7MjYzQX0iIGhleCwgbWluPTEsIG1heD02CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LUhleC9QZXJsIiwgbmV3IFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc2NhcGVUcmFuc2xpdGVyYXRvcigiQW55LUhleC9QZXJsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXHh7IiwgIn0iLCAxNiwgMSwgdHJ1ZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIEdlbmVyaWMKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXJGYWN0b3J5KCJBbnktSGV4IiwgbmV3IFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc2NhcGVUcmFuc2xpdGVyYXRvcigiQW55LUhleCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx1IiwgIiIsIDE2LCA0LCBmYWxzZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gZXNjYXBlIHRyYW5zbGl0ZXJhdG9yIHdpdGggdGhlIGdpdmVuIElEIGFuZAorICAgICAqIHBhcmFtZXRlcnMuICBTZWUgdGhlIGNsYXNzIG1lbWJlciBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorICAgICAqLworICAgIEVzY2FwZVRyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIHN1ZmZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXgsIGludCBtaW5EaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBncm9rU3VwcGxlbWVudGFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICBFc2NhcGVUcmFuc2xpdGVyYXRvciBzdXBwbGVtZW50YWxIYW5kbGVyKSB7CisgICAgICAgIHN1cGVyKElELCBudWxsKTsKKyAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7CisgICAgICAgIHRoaXMuc3VmZml4ID0gc3VmZml4OworICAgICAgICB0aGlzLnJhZGl4ID0gcmFkaXg7CisgICAgICAgIHRoaXMubWluRGlnaXRzID0gbWluRGlnaXRzOworICAgICAgICB0aGlzLmdyb2tTdXBwbGVtZW50YWxzID0gZ3Jva1N1cHBsZW1lbnRhbHM7CisgICAgICAgIHRoaXMuc3VwcGxlbWVudGFsSGFuZGxlciA9IHN1cHBsZW1lbnRhbEhhbmRsZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyB7QGxpbmsgVHJhbnNsaXRlcmF0b3IjaGFuZGxlVHJhbnNsaXRlcmF0ZX0uCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9zLCBib29sZWFuIGluY3JlbWVudGFsKSB7CisgICAgICAgIGludCBzdGFydCA9IHBvcy5zdGFydDsKKyAgICAgICAgaW50IGxpbWl0ID0gcG9zLmxpbWl0OworCisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHByZWZpeCk7CisgICAgICAgIGludCBwcmVmaXhMZW4gPSBwcmVmaXgubGVuZ3RoKCk7CisgICAgICAgIGJvb2xlYW4gcmVkb1ByZWZpeCA9IGZhbHNlOworCisgICAgICAgIHdoaWxlIChzdGFydCA8IGxpbWl0KSB7CisgICAgICAgICAgICBpbnQgYyA9IGdyb2tTdXBwbGVtZW50YWxzID8gdGV4dC5jaGFyMzJBdChzdGFydCkgOiB0ZXh0LmNoYXJBdChzdGFydCk7CisgICAgICAgICAgICBpbnQgY2hhckxlbiA9IGdyb2tTdXBwbGVtZW50YWxzID8gVVRGMTYuZ2V0Q2hhckNvdW50KGMpIDogMTsKKworICAgICAgICAgICAgaWYgKChjICYgMHhGRkZGMDAwMCkgIT0gMCAmJiBzdXBwbGVtZW50YWxIYW5kbGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoc3VwcGxlbWVudGFsSGFuZGxlci5wcmVmaXgpOworICAgICAgICAgICAgICAgIFV0aWxpdHkuYXBwZW5kTnVtYmVyKGJ1ZiwgYywgc3VwcGxlbWVudGFsSGFuZGxlci5yYWRpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGVtZW50YWxIYW5kbGVyLm1pbkRpZ2l0cyk7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChzdXBwbGVtZW50YWxIYW5kbGVyLnN1ZmZpeCk7CisgICAgICAgICAgICAgICAgcmVkb1ByZWZpeCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZWRvUHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQocHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgcmVkb1ByZWZpeCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5zZXRMZW5ndGgocHJlZml4TGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVXRpbGl0eS5hcHBlbmROdW1iZXIoYnVmLCBjLCByYWRpeCwgbWluRGlnaXRzKTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKHN1ZmZpeCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRleHQucmVwbGFjZShzdGFydCwgc3RhcnQgKyBjaGFyTGVuLCBidWYudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBzdGFydCArPSBidWYubGVuZ3RoKCk7CisgICAgICAgICAgICBsaW1pdCArPSBidWYubGVuZ3RoKCkgLSBjaGFyTGVuOworICAgICAgICB9CisKKyAgICAgICAgcG9zLmNvbnRleHRMaW1pdCArPSBsaW1pdCAtIHBvcy5saW1pdDsKKyAgICAgICAgcG9zLmxpbWl0ID0gbGltaXQ7CisgICAgICAgIHBvcy5zdGFydCA9IHN0YXJ0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0Z1bmN0aW9uUmVwbGFjZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L0Z1bmN0aW9uUmVwbGFjZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzA3MzkwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvRnVuY3Rpb25SZXBsYWNlci5qYXZhCkBAIC0wLDAgKzEsODUgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChjKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisqICAgYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMS8xNC8yMDAyICBhbGl1ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CisKKy8qKgorICogQSByZXBsYWNlciB0aGF0IGNhbGxzIGEgdHJhbnNsaXRlcmF0b3IgdG8gZ2VuZXJhdGUgaXRzIG91dHB1dCB0ZXh0LgorICogVGhlIGlucHV0IHRleHQgdG8gdGhlIHRyYW5zbGl0ZXJhdG9yIGlzIHRoZSBvdXRwdXQgb2YgYW5vdGhlcgorICogVW5pY29kZVJlcGxhY2VyIG9iamVjdC4gIFRoYXQgaXMsIHRoaXMgcmVwbGFjZXIgd3JhcHMgYW5vdGhlcgorICogcmVwbGFjZXIgd2l0aCBhIHRyYW5zbGl0ZXJhdG9yLgorICogQGF1dGhvciBBbGFuIExpdQorICovCitjbGFzcyBGdW5jdGlvblJlcGxhY2VyIGltcGxlbWVudHMgVW5pY29kZVJlcGxhY2VyIHsKKworICAgIC8qKgorICAgICAqIFRoZSB0cmFuc2xpdGVyYXRvci4gIE11c3Qgbm90IGJlIG51bGwuCisgICAgICovCisgICAgcHJpdmF0ZSBUcmFuc2xpdGVyYXRvciB0cmFuc2xpdDsKKworICAgIC8qKgorICAgICAqIFRoZSByZXBsYWNlciBvYmplY3QuICBUaGlzIGdlbmVyYXRlcyB0ZXh0IHRoYXQgaXMgdGhlbgorICAgICAqIHByb2Nlc3NlZCBieSAndHJhbnNsaXQnLiAgTXVzdCBub3QgYmUgbnVsbC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFVuaWNvZGVSZXBsYWNlciByZXBsYWNlcjsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIHJlcGxhY2VyIHRoYXQgdGFrZXMgdGhlIG91dHB1dCBvZiB0aGUgZ2l2ZW4KKyAgICAgKiByZXBsYWNlciwgcGFzc2VzIGl0IHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGl0ZXJhdG9yLCBhbmQgZW1pdHMKKyAgICAgKiB0aGUgcmVzdWx0IGFzIG91dHB1dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgRnVuY3Rpb25SZXBsYWNlcihUcmFuc2xpdGVyYXRvciB0aGVUcmFuc2xpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlUmVwbGFjZXIgdGhlUmVwbGFjZXIpIHsKKyAgICAgICAgdHJhbnNsaXQgPSB0aGVUcmFuc2xpdDsKKyAgICAgICAgcmVwbGFjZXIgPSB0aGVSZXBsYWNlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbmljb2RlUmVwbGFjZXIgQVBJCisgICAgICovCisgICAgcHVibGljIGludCByZXBsYWNlKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBjdXJzb3IpIHsKKworICAgICAgICAvLyBGaXJzdCBkZWxlZ2F0ZSB0byBzdWJvcmRpbmF0ZSByZXBsYWNlcgorICAgICAgICBpbnQgbGVuID0gcmVwbGFjZXIucmVwbGFjZSh0ZXh0LCBzdGFydCwgbGltaXQsIGN1cnNvcik7CisgICAgICAgIGxpbWl0ID0gc3RhcnQgKyBsZW47CisKKyAgICAgICAgLy8gTm93IHRyYW5zbGl0ZXJhdGUKKyAgICAgICAgbGltaXQgPSB0cmFuc2xpdC50cmFuc2xpdGVyYXRlKHRleHQsIHN0YXJ0LCBsaW1pdCk7CisKKyAgICAgICAgcmV0dXJuIGxpbWl0IC0gc3RhcnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVW5pY29kZVJlcGxhY2VyIEFQSQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9SZXBsYWNlclBhdHRlcm4oYm9vbGVhbiBlc2NhcGVVbnByaW50YWJsZSkgeworICAgICAgICBTdHJpbmdCdWZmZXIgcnVsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIiYiKTsKKyAgICAgICAgcnVsZS5hcHBlbmQodHJhbnNsaXQuZ2V0SUQoKSk7CisgICAgICAgIHJ1bGUuYXBwZW5kKCIoICIpOworICAgICAgICBydWxlLmFwcGVuZChyZXBsYWNlci50b1JlcGxhY2VyUGF0dGVybihlc2NhcGVVbnByaW50YWJsZSkpOworICAgICAgICBydWxlLmFwcGVuZCgiICkiKTsKKyAgICAgICAgcmV0dXJuIHJ1bGUudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbmlvbiB0aGUgc2V0IG9mIGFsbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IG91dHB1dCBieSB0aGlzIG9iamVjdAorICAgICAqIGludG8gdGhlIGdpdmVuIHNldC4KKyAgICAgKiBAcGFyYW0gdG9VbmlvblRvIHRoZSBzZXQgaW50byB3aGljaCB0byB1bmlvbiB0aGUgb3V0cHV0IGNoYXJhY3RlcnMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRSZXBsYWNlbWVudFNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKSB7CisgICAgICAgIHRvVW5pb25Uby5hZGRBbGwodHJhbnNsaXQuZ2V0VGFyZ2V0U2V0KCkpOworICAgIH0KK30KKworLy9lb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L0hleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9IZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhNjkyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9IZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9BdHRpYy9IZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzAzIDE4OjU2OjQ0ICQgCisgKiAkUmV2aXNpb246IDEuMTQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIEEgdHJhbnNsaXRlcmF0b3IgdGhhdCBjb252ZXJ0cyBmcm9tIGhleGFkZWNpbWFsIFVuaWNvZGUgZXNjYXBlCisgKiBzZXF1ZW5jZXMgdG8gdGhlIGNoYXJhY3RlcnMgdGhleSByZXByZXNlbnQuICBGb3IgZXhhbXBsZSwgIlUrMDA0MCIKKyAqIGFuZCAnXHUwMDQwJy4gIEEgZGVmYXVsdCBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciByZWNvZ25pemVzIHRoZQorICogcHJlZml4ZXMgIlUrIiwgInUrIiwgIiYjOTI7VSIsIGFuZCAiJiM5Mjt1Ii4gIEhleCB2YWx1ZXMgbWF5IGJlCisgKiB1cHBlci0gb3IgbG93ZXJjYXNlLiAgQnkgY2FsbGluZyB0aGUgYXBwbHlQYXR0ZXJuKCkgbWV0aG9kLCBvbmUKKyAqIG9yIG1vcmUgY3VzdG9tIHByZWZpeC9zdWZmaXggcGFpcnMgbWF5IGJlIHNwZWNpZmllZC4gIFNlZQorICogYXBwbHlQYXR0ZXJuKCkgZm9yIGRldGFpbHMuCisgKgorICogQGF1dGhvciBBbGFuIExpdQorICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy0xMi0wMS4gVXNlIHRoZSBUcmFuc2xpdGVyYXRvciBmYWN0b3J5IG1ldGhvZHMuCisgKi8KK3B1YmxpYyBjbGFzcyBIZXhUb1VuaWNvZGVUcmFuc2xpdGVyYXRvciBleHRlbmRzIFRyYW5zbGl0ZXJhdG9yIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgIlx1MDBBOSBJQk0gQ29ycG9yYXRpb24gMTk5OS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLyoqCisgICAgICogUGFja2FnZSBhY2Nlc3NpYmxlIElEIGZvciB0aGlzIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgX0lEID0gIkhleC1BbnkiOworCisgICAgLyoqCisgICAgICogVGhpcyBwYXR0ZXJuIGVuY29kZXMgdGhlIGZvbGxvd2luZyBzcGVjcyBmb3IgdGhlIGRlZmF1bHQgY29uc3RydWN0b3I6CisgICAgICogICBcXHUwMDAwCisgICAgICogICBcXFUwMDAwCisgICAgICogICB1KzAwMDAKKyAgICAgKiAgIFUrMDAwMAorICAgICAqIFRoZSBtdWx0aXBsZSBiYWNrc2xhc2hlcyByZXNvbHZlIHRvIGEgc2luZ2xlIGJhY2tzbGFzaAorICAgICAqIGluIHRoZSBlZmZlY3RpdmUgcHJlZml4LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BBVFRFUk4gPSAiXFxcXHUwMDAwO1xcXFxVMDAwMDt1KzAwMDA7VSswMDAwIjsKKworICAgIC8vIENoYXJhY3RlciBjb25zdGFudHMgZm9yIHNwZWNpYWwgcGF0dGVybiBjaGFyYWN0ZXJzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBTRU1JQ09MT04gPSAnOyc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBaRVJPICAgICAgPSAnMCc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBQT1VORCAgICAgPSAnIyc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBCQUNLU0xBU0ggPSAnXFwnOworCisgICAgLyoqCisgICAgICogVGhlIHBhdHRlcm4gZm9yIHRoaXMgdHJhbnNsaXRlcmF0b3IKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBwYXR0ZXJuOworCisgICAgLyoqCisgICAgICogVGhlIHByb2Nlc3NlZCBwYXR0ZXJuIHNwZWNpZmljYXRpb24uICBTZWUgYXBwbHlQYXR0ZXJuKCkgZm9yCisgICAgICogZGV0YWlscy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNoYXJbXSBhZmZpeGVzOworCisgICAgLyoqCisgICAgICogVGhlIG51bWJlciBvZiBkaWZmZXJlbnQgYWZmaXggc2V0cyBpbiBhZmZpeGVzLgorICAgICAqLworICAgIHByaXZhdGUgaW50IGFmZml4Q291bnQ7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgdHJhbnNsaXRlcmF0b3IuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy0xMi0wMS4gVXNlIHRoZSBUcmFuc2xpdGVyYXRvciBmYWN0b3J5IG1ldGhvZHMuCisgICAgICovCisgICAgcHVibGljIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKCkgeworICAgICAgICBzdXBlcihfSUQsIG51bGwpOworICAgICAgICBhcHBseVBhdHRlcm4oREVGQVVMVF9QQVRURVJOKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgdHJhbnNsaXRlcmF0b3IuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy0xMi0wMS4gVXNlIHRoZSBUcmFuc2xpdGVyYXRvciBmYWN0b3J5IG1ldGhvZHMuCisgICAgICovCisgICAgcHVibGljIEhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yKFN0cmluZyB0aGVQYXR0ZXJuKSB7CisgICAgICAgIHRoaXModGhlUGF0dGVybiwgbnVsbCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB0cmFuc2xpdGVyYXRvci4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgSGV4VG9Vbmljb2RlVHJhbnNsaXRlcmF0b3IoU3RyaW5nIHRoZVBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVGaWx0ZXIgdGhlRmlsdGVyKSB7CisgICAgICAgIHN1cGVyKF9JRCwgdGhlRmlsdGVyKTsKKyAgICAgICAgYXBwbHlQYXR0ZXJuKHRoZVBhdHRlcm4pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgcGF0dGVybnMgcmVjb2duaXplZCBieSB0aGlzIHRyYW5zbGl0ZXJhdG9yLiAgT25lIG9yCisgICAgICogbW9yZSBwYXR0ZXJucyBtYXkgYmUgc3BlY2lmaWVkLCBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucyAoJzsnKS4KKyAgICAgKiBFYWNoIHBhdHRlcm4gY29udGFpbnMgemVybyBvciBtb3JlIHByZWZpeCBjaGFyYWN0ZXJzLCBvbmUgb3IKKyAgICAgKiBtb3JlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCB6ZXJvIG9yIG1vcmUgc3VmZml4IGNoYXJhY3RlcnMuICBUaGUKKyAgICAgKiBkaWdpdCBjaGFyYWN0ZXJzIGluZGljYXRlcyBvcHRpb25hbCBkaWdpdHMgKCcjJykgZm9sbG93ZWQgYnkKKyAgICAgKiByZXF1aXJlZCBkaWdpdHMgKCcwJykuICBUaGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cyBjYW5ub3QKKyAgICAgKiBleGNlZWQgNCwgYW5kIG11c3QgYmUgYXQgbGVhc3QgMSByZXF1aXJlZCBkaWdpdC4gIFVzZSBhCisgICAgICogYmFja3NsYXNoICgnXFwnKSB0byBlc2NhcGUgYW55IG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMuICBBbgorICAgICAqIGVtcHR5IHBhdHRlcm4gaXMgYWxsb3dlZDsgaXQgc3BlY2lmaWVzIGEgdHJhbnNsaXRlcmF0b3IgdGhhdAorICAgICAqIGRvZXMgbm90aGluZy4KKyAgICAgKgorICAgICAqIDxwPkV4YW1wbGU6ICJVKzAwMDA7PCMjIzA+IiBzcGVjaWZpZXMgdHdvIHBhdHRlcm5zLiAgVGhlIGZpcnN0CisgICAgICogaGFzIGEgcHJlZml4IG9mICJVKyIsIGV4YWN0bHkgZm91ciBkaWdpdHMsIGFuZCBubyBzdWZmaXguICBUaGUKKyAgICAgKiBzZWNvbmQgaGFzIGEgcHJlZml4IG9mICI8IiwgYmV0d2VlbiBvbmUgYW5kIGZvdXIgZGlnaXRzLCBhbmQgYQorICAgICAqIHN1ZmZpeCBvZiAiPiIuCisgICAgICoKKyAgICAgKiA8cD48cHJlPgorICAgICAqIHBhdHRlcm4gOj0gc3BlYyB8ICggcGF0dGVybiAnOycgc3BlYyApCisgICAgICogc3BlYyA6PSBwcmVmaXgtY2hhciogZGlnaXQtc3BlYyBzdWZmaXgtY2hhcioKKyAgICAgKiBkaWdpdC1zcGVjIDo9ICcjJyogJzAnKworICAgICAqIHByZWZpeC1jaGFyIDo9IFtec3BlY2lhbC1jaGFyXSB8ICdcXCcgc3BlY2lhbC1jaGFyCisgICAgICogc3VmZml4LWNoYXIgOj0gW15zcGVjaWFsLWNoYXJdIHwgJ1xcJyBzcGVjaWFsLWNoYXIKKyAgICAgKiBzcGVjaWFsLWNoYXIgOj0gJzsnIHwgJzAnIHwgJyMnIHwgJ1xcJworICAgICAqIDwvcHJlPgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZSByZW1vdmVkIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFwcGx5UGF0dGVybihTdHJpbmcgcGF0dGVybikgeworCisgICAgICAgIC8qIFRoZSBwYXR0ZXJuIGlzIHByb2Nlc3NlZCBhbmQgc3RvcmVkIGluIGFmZml4ZXMuICBUaGUgcGF0dGVybgorICAgICAgICAgKiBjb25zaXN0cyBvZiB6ZXJvIG9yIG1vcmUgYWZmaXhlcy4gIEVhY2ggYWZmaXggaXMgcGFyc2VkIHRvCisgICAgICAgICAqIGRldGVybWluZSB0aGUgcHJlZml4LCBzdWZmaXgsIG1pbmltdW0gZGlnaXQgY291bnQsIGFuZCBtYXhpbXVtCisgICAgICAgICAqIGRpZ2l0IGNvdW50LiAgVGhlc2UgdmFsdWVzIGFyZSB0aGVuIHN0b3JlZCBhcyBhIGZvdXIgY2hhcmFjdGVyCisgICAgICAgICAqIGhlYWRlci4gIFRoYXQgaXMsIHRoZWlyIG51bWVyaWMgdmFsdWVzIGFyZSBjYXN0IHRvIFVDaGFycyBhbmQKKyAgICAgICAgICogc3RvcmVkIGluIHRoZSBzdHJpbmcuICBGb2xsb3dpbmcgdGhlc2UgZm91ciBjaGFyYWN0ZXJzLCB0aGUgcHJlZml4CisgICAgICAgICAqIGNoYXJhY3RlcnMsIHRoZW4gc3VmZml4IGNoYXJhY3RlcnMgYXJlIHN0b3JlZC4gIEVhY2ggc3BlYyB0YWtlcworICAgICAgICAgKiBuKzQgY2hhcmFjdGVycywgd2hlcmUgbiBpcyB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBwcmVmaXggYW5kCisgICAgICAgICAqIHN1ZmZpeC4KKyAgICAgICAgICovCisKKyAgICAgICAgU3RyaW5nQnVmZmVyIGFmZml4ZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGFmZml4Q291bnQgPSAwOworCisgICAgICAgIC8qIFRoZSBtb2RlIHNwZWNpZmllcyB3aGVyZSB3ZSBhcmUgaW4gZWFjaCBzcGVjLgorICAgICAgICAgKiBtb2RlIDAgPSBpbiBwcmVmaXgKKyAgICAgICAgICogbW9kZSAxID0gaW4gb3B0aW9uYWwgZGlnaXRzICgjKQorICAgICAgICAgKiBtb2RlIDIgPSBpbiByZXF1aXJlZCBkaWdpdHMgKDApCisgICAgICAgICAqIG1vZGUgMyA9IGluIHN1ZmZpeAorICAgICAgICAgKi8KKyAgICAgICAgaW50IG1vZGUgPSAwOworCisgICAgICAgIGludCBwcmVmaXhMZW4gPSAwLCBzdWZmaXhMZW4gPSAwLCBtaW5EaWdpdHMgPSAwLCBtYXhEaWdpdHMgPSAwOworICAgICAgICBpbnQgc3RhcnQgPSAwOworCisgICAgICAgIC8qIFRvIG1ha2UgcGFyc2luZyBlYXNpZXIsIHdlIGFwcGVuZCBhIHZpcnR1YWwgJzsnIGF0IHRoZSBlbmQgb2YKKyAgICAgICAgICogdGhlIHBhdHRlcm4gc3RyaW5nLCBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4gIFdoZW4gd2UgZ2V0IHRvCisgICAgICAgICAqIHRoZSBpbmRleCBwYXR0ZXJuLmxlbmd0aCgpICh0aGF0IGlzLCBvbmUgcGFzdCB0aGUgZW5kKSwgd2UKKyAgICAgICAgICogY3JlYXRlIGEgdmlydHVhbCAnOycgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgKi8KKyAgICAgICAgY2hhciBjID0gMDsgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIG91dHNpZGUgdGhlIGxvb3Agc28gd2UgY2FuCisgICAgICAgIGJvb2xlYW4gaXNMaXRlcmFsID0gZmFsc2U7IC8vIHNlZSB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLi4uCisgICAgICAgIGZvciAoaW50IGk9MDsgaTw9cGF0dGVybi5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHZpcnR1YWwgdHJhaWxpbmcgJzsnIGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAgaWYgKGkgPT0gcGF0dGVybi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBsYXN0IGNoYXJhY3RlciB3YXMgbm90IGEgbm9uLWxpdGVyYWwgJzsnLi4uCisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmICEoYyA9PSBTRU1JQ09MT04gJiYgIWlzTGl0ZXJhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYyA9IFNFTUlDT0xPTjsKKyAgICAgICAgICAgICAgICAgICAgaXNMaXRlcmFsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjID0gcGF0dGVybi5jaGFyQXQoaSk7CisgICAgICAgICAgICAgICAgaXNMaXRlcmFsID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjID09IEJBQ0tTTEFTSCkgeworICAgICAgICAgICAgICAgIGlmICgoaSsxKTxwYXR0ZXJuLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlzTGl0ZXJhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGMgPSBwYXR0ZXJuLmNoYXJBdCgrK2kpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRyYWlsaW5nICdcXCcKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVHJhaWxpbmcgJ1xcJyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc0xpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBPVU5EOgorICAgICAgICAgICAgICAgICAgICAvLyBTZWVpbmcgYSAnIycgbW92ZXMgdXMgZnJvbSBtb2RlIDAgKHByZWZpeCkgdG8gbW9kZSAxCisgICAgICAgICAgICAgICAgICAgIC8vIChvcHRpb25hbCBkaWdpdHMpLgorICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK21vZGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSAhPSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnF1b3RlZCAnIycKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVucXVvdGVkICcjJyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsrbWF4RGlnaXRzOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFpFUk86CisgICAgICAgICAgICAgICAgICAgIC8vIFNlZWluZyBhICcwJyBtb3ZlcyB1cyB0byBtb2RlIDIgKHJlcXVpcmVkIGRpZ2l0cykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlICE9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucXVvdGVkICcwJworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5xdW90ZWQgJzAnIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKyttaW5EaWdpdHM7CisgICAgICAgICAgICAgICAgICAgICsrbWF4RGlnaXRzOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNFTUlDT0xPTjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1pbkRpZ2l0cyA8IDEgfHwgbWF4RGlnaXRzID4gNAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBtaW4vbWF4IGRpZ2l0IGNvdW50CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmVmaXhMZW4gPiAweEZGRkYgfHwgc3VmZml4TGVuID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWZmaXggb3IgcHJlZml4IHRvbyBsb25nCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTdWZmaXggb3IgcHJlZml4IHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIHByZWZpeCBhbmQgbm8gc3VmZml4LCB0aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBoZWFkZXIgd2lsbCBub3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCB5ZXQuICBXZSBuZWVkCisgICAgICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIHRoZSBoZWFkZXIgbm93LgorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPT0gYWZmaXhlcy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWZmaXhlcy5hcHBlbmQoIkFBQUEiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBGaWxsIGluIDQtY2hhcmFjdGVyIGhlYWRlcgorICAgICAgICAgICAgICAgICAgICBhZmZpeGVzLnNldENoYXJBdChzdGFydCsrLCAoY2hhcikgcHJlZml4TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYWZmaXhlcy5zZXRDaGFyQXQoc3RhcnQrKywgKGNoYXIpIHN1ZmZpeExlbik7CisgICAgICAgICAgICAgICAgICAgIGFmZml4ZXMuc2V0Q2hhckF0KHN0YXJ0KyssIChjaGFyKSBtaW5EaWdpdHMpOworICAgICAgICAgICAgICAgICAgICBhZmZpeGVzLnNldENoYXJBdChzdGFydCwgICAoY2hhcikgbWF4RGlnaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBhZmZpeGVzLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICArK2FmZml4Q291bnQ7CisgICAgICAgICAgICAgICAgICAgIHByZWZpeExlbiA9IHN1ZmZpeExlbiA9IG1pbkRpZ2l0cyA9IG1heERpZ2l0cyA9IG1vZGUgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpc0xpdGVyYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0xpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPT0gYWZmaXhlcy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHNwYWNlIGZvciB0aGUgaGVhZGVyLiAgQXBwZW5kIGFueSBmb3VyCisgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgYXMgcGxhY2UgaG9sZGVycyBmb3IgdGhlIGhlYWRlciB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGZpbGwgdGhlc2UgaW4gd2hlbiB3ZSBwYXJzZSB0aGUgJzsnLgorICAgICAgICAgICAgICAgICAgICBhZmZpeGVzLmFwcGVuZCgiQUFBQSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZmZpeGVzLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICsrcHJlZml4TGVuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFueSBsaXRlcmFsIG91dHNpZGUgdGhlIHByZWZpeCBtb3ZlcyB1cyBpbnRvIG1vZGUgMworICAgICAgICAgICAgICAgICAgICAvLyAoc3VmZml4KQorICAgICAgICAgICAgICAgICAgICBtb2RlID0gMzsKKyAgICAgICAgICAgICAgICAgICAgKytzdWZmaXhMZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2Ugb25seSBtb2RpZnkgdGhlIHBhdHRlcm4gYW5kIGFmZml4ZXMgbWVtYmVyIHZhcmlhYmxlcyBpZgorICAgICAgICAvLyB3ZSBnZXQgdG8gdGhpcyBwb2ludCwgdGhhdCBpcywgaWYgdGhlIHBhcnNlIHN1Y2NlZWRzLgorICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuOworICAgICAgICBpbnQgbGVuID0gYWZmaXhlcy5sZW5ndGgoKTsKKyAgICAgICAgdGhpcy5hZmZpeGVzID0gbmV3IGNoYXJbbGVuXTsKKyAgICAgICAgVXRpbGl0eS5nZXRDaGFycyhhZmZpeGVzLCAwLCBsZW4sIHRoaXMuYWZmaXhlcywgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoaXMgdHJhbnNsaXRlcmF0b3IncyBwYXR0ZXJuLgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZSByZW1vdmVkIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9QYXR0ZXJuKCkgeworICAgICAgICByZXR1cm4gcGF0dGVybjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBUcmFuc2xpdGVyYXRvciNoYW5kbGVUcmFuc2xpdGVyYXRlfS4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVUcmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBvZmZzZXRzLCBib29sZWFuIGlzSW5jcmVtZW50YWwpIHsKKyAgICAgICAgaW50IGN1cnNvciA9IG9mZnNldHMuc3RhcnQ7CisgICAgICAgIGludCBsaW1pdCA9IG9mZnNldHMubGltaXQ7CisgICAgICAgIGludCBpLCBqLCBpcGF0OworCisgICAgICBsb29wOgorICAgICAgICB3aGlsZSAoY3Vyc29yIDwgbGltaXQpIHsKKyAgICAgICAgICAgIC8vIExvb3Agb3ZlciB0aGUgc3BlY3MgaW4gYWZmaXhlcy4gIElmIGFmZml4Q291bnQgaXMgemVybyAoYW4KKyAgICAgICAgICAgIC8vIGVtcHR5IHBhdHRlcm4pLCB0aGVuIHdlIGRvIG5vdGhpbmcuICBXZSBleGl0IHRoaXMgbG9vcCB3aGVuCisgICAgICAgICAgICAvLyB3ZSBtYXRjaCBvbmUgb2YgdGhlIHNwZWNzLiAgV2UgZXhpdCB0aGlzIGZ1bmN0aW9uIChieQorICAgICAgICAgICAgLy8ganVtcGluZyB0byBleGl0OiBiZWxvdykgaWYgYSBwYXJ0aWFsIG1hdGNoIGlzIGRldGVjdGVkIGFuZAorICAgICAgICAgICAgLy8gaXNJbmNyZW1lbnRhbCBpcyB0cnVlLgorICAgICAgICAgICAgZm9yIChqPTAsIGlwYXQ9MDsgajxhZmZpeENvdW50OyArK2opIHsKKworICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIGludCBwcmVmaXhMZW4gPSBhZmZpeGVzW2lwYXQrK107CisgICAgICAgICAgICAgICAgaW50IHN1ZmZpeExlbiA9IGFmZml4ZXNbaXBhdCsrXTsKKyAgICAgICAgICAgICAgICBpbnQgbWluRGlnaXRzID0gYWZmaXhlc1tpcGF0KytdOworICAgICAgICAgICAgICAgIGludCBtYXhEaWdpdHMgPSBhZmZpeGVzW2lwYXQrK107CisKKyAgICAgICAgICAgICAgICAvLyBjdXJzIGlzIGEgY29weSBvZiBjdXJzb3IgdGhhdCBpcyBhZHZhbmNlZCBvdmVyIHRoZQorICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgYXMgd2UgcGFyc2UgdGhlbS4KKyAgICAgICAgICAgICAgICBpbnQgY3VycyA9IGN1cnNvcjsKKyAgICAgICAgICAgICAgICBib29sZWFuIG1hdGNoID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHByZWZpeExlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJzID49IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IG1hdGNoZWQgYSBjaGFyYWN0ZXIuICBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBwYXJ0aWFsIG1hdGNoLCBzbyB3ZSByZXR1cm4gaWYgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnRhbCBtb2RlLiAgSW4gbm9uLWluY3JlbWVudGFsIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ28gdG8gdGhlIG5leHQgc3BlYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmNyZW1lbnRhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IHRleHQuY2hhckF0KGN1cnMrKyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjICE9IGFmZml4ZXNbaXBhdCArIGldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciB1ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0Q291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycyA+PSBsaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBwYXJ0aWFsIG1hdGNoIGluIGluY3JlbWVudGFsIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnMgPiBjdXJzb3IgJiYgaXNJbmNyZW1lbnRhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IENoYXJhY3Rlci5kaWdpdCh0ZXh0LmNoYXJBdChjdXJzKSwgMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKytjdXJzOworICAgICAgICAgICAgICAgICAgICAgICAgdSA8PD0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUgfD0gKGNoYXIpIGRpZ2l0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrZGlnaXRDb3VudCA9PSBtYXhEaWdpdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gKGRpZ2l0Q291bnQgPj0gbWluRGlnaXRzKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHN1ZmZpeExlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnMgPj0gbGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaW4gaW5jcmVtZW50YWwgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnMgPiBjdXJzb3IgJiYgaXNJbmNyZW1lbnRhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjID0gdGV4dC5jaGFyQXQoY3VycysrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSBhZmZpeGVzW2lwYXQgKyBwcmVmaXhMZW4gKyBpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZShjdXJzb3IsIGN1cnMsIFN0cmluZy52YWx1ZU9mKHUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCAtPSBjdXJzIC0gY3Vyc29yIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGJyZWFrIHN0YXRlbWVudCBsZWF2ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCB0aGF0IGlzIHRyYXZlcnNpbmcgdGhlIHNwZWNzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmaXhlcy4gIFdlIHRoZW4gcGFyc2UgdGhlIG5leHQgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpcGF0ICs9IHByZWZpeExlbiArIHN1ZmZpeExlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKytjdXJzb3I7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXRzLmNvbnRleHRMaW1pdCArPSBsaW1pdCAtIG9mZnNldHMubGltaXQ7CisgICAgICAgIG9mZnNldHMubGltaXQgPSBsaW1pdDsKKyAgICAgICAgb2Zmc2V0cy5zdGFydCA9IGN1cnNvcjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9Mb3dlcmNhc2VUcmFuc2xpdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvTG93ZXJjYXNlVHJhbnNsaXRlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YmU5ZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvTG93ZXJjYXNlVHJhbnNsaXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDk5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9Mb3dlcmNhc2VUcmFuc2xpdGVyYXRvci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEwLzMxIDIyOjM2OjQ5ICQgCisgKiAkUmV2aXNpb246IDEuMTMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyUHJvcGVydHk7CisKKy8qKgorICogQSB0cmFuc2xpdGVyYXRvciB0aGF0IHBlcmZvcm1zIGxvY2FsZS1zZW5zaXRpdmUgdG9Mb3dlcigpCisgKiBjYXNlIG1hcHBpbmcuCisgKi8KK2NsYXNzIExvd2VyY2FzZVRyYW5zbGl0ZXJhdG9yIGV4dGVuZHMgVHJhbnNsaXRlcmF0b3J7CisKKyAgICAvKioKKyAgICAgKiBQYWNrYWdlIGFjY2Vzc2libGUgSUQuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBfSUQgPSAiQW55LUxvd2VyIjsKKyAgICAKKyAgICAvLyBUT0RPOiBBZGQgdmFyaWFudHMgZm9yIHRyLCBheiwgbHQsIGRlZmF1bHQgPSBkZWZhdWx0IGxvY2FsZQorCisgICAgLyoqCisgICAgICogU3lzdGVtIHJlZ2lzdHJhdGlvbiBob29rLgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyKCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlckZhY3RvcnkoX0lELCBuZXcgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvd2VyY2FzZVRyYW5zbGl0ZXJhdG9yKExvY2FsZS5VUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyU3BlY2lhbEludmVyc2UoIkxvd2VyIiwgIlVwcGVyIiwgdHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBMb2NhbGUgbG9jOworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqLworCisgICAgcHVibGljIExvd2VyY2FzZVRyYW5zbGl0ZXJhdG9yKExvY2FsZSBsb2MpIHsKKyAgICAgICAgc3VwZXIoX0lELCBudWxsKTsKKyAgICAgICAgdGhpcy5sb2MgPSBsb2M7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyB7QGxpbmsgVHJhbnNsaXRlcmF0b3IjaGFuZGxlVHJhbnNsaXRlcmF0ZX0uCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gb2Zmc2V0cywgYm9vbGVhbiBpc0luY3JlbWVudGFsKSB7CisgICAgICAgIGludCB0ZXh0UG9zID0gb2Zmc2V0cy5zdGFydDsKKyAgICAgICAgaWYgKHRleHRQb3MgPj0gb2Zmc2V0cy5saW1pdCkgcmV0dXJuOworCisgICAgICAgIC8vIGdldCBzdHJpbmcgZm9yIGNvbnRleHQKKyAgICAgICAgLy8gVE9ETzogYWRkIGNvbnZlbmllbmNlIG1ldGhvZCB0byBkbyB0aGlzLCBzaW5jZSB3ZSBkbyBpdCBhbGwgb3ZlcgorICAgICAgICAKKyAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIG9yaWdpbmFsID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHRleHQpOworICAgICAgICAKKyAgICAgICAgLy8gV2FsayB0aHJvdWdoIG9yaWdpbmFsIHN0cmluZworICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGNhc2UgY2hhbmdlLCBtb2RpZnkgY29ycmVzcG9uZGluZyBwb3NpdGlvbiBpbiByZXBsYWNlYWJsZQorICAgICAgICAKKyAgICAgICAgaW50IGxpbWl0ID0gb2Zmc2V0cy5saW1pdDsKKyAgICAgICAgaW50IGNwOworICAgICAgICBpbnQgb2xkTGVuOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHRleHRQb3MgPCBsaW1pdCkgeworICAgICAgICAJb3JpZ2luYWwuc2V0SW5kZXgodGV4dFBvcyk7CisgICAgICAgICAgICBjcCA9IG9yaWdpbmFsLmN1cnJlbnRDb2RlUG9pbnQoKTsKKyAgICAgICAgICAgIG9sZExlbiA9IFVURjE2LmdldENoYXJDb3VudChjcCk7CisgICAgICAgICAgICBpbnQgbmV3TGVuID0gbV9jaGFycHB0eV8udG9Mb3dlckNhc2UobG9jLCBjcCwgb3JpZ2luYWwsIGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobmV3TGVuID49IDApIHsKKyAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UodGV4dFBvcywgdGV4dFBvcyArIG9sZExlbiwgYnVmZmVyLCAwLCBuZXdMZW4pOworICAgICAgICAgICAgICAgIGlmIChuZXdMZW4gIT0gb2xkTGVuKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHRQb3MgKz0gbmV3TGVuOworICAgICAgICAgICAgICAgICAgICBvZmZzZXRzLmxpbWl0ICs9IG5ld0xlbiAtIG9sZExlbjsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5jb250ZXh0TGltaXQgKz0gbmV3TGVuIC0gb2xkTGVuOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0UG9zICs9IG9sZExlbjsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXRzLnN0YXJ0ID0gb2Zmc2V0cy5saW1pdDsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBjaGFyIGJ1ZmZlcltdID0gbmV3IGNoYXJbVUNoYXJhY3RlclByb3BlcnR5Lk1BWF9DQVNFX01BUF9TSVpFXTsKKyAgICAvKioKKyAgICAgKiBDaGFyYWN0ZXIgcHJvcGVydGllcyBkYXRhIGJhc2UKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVQ2hhcmFjdGVyUHJvcGVydHkgbV9jaGFycHB0eV8gPSAKKyAgICAJCQkJCQkJICAgICAgICAgICAgVUNoYXJhY3RlclByb3BlcnR5LmdldEluc3RhbmNlKCk7IAorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvTkZSdWxlLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9ORlJ1bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MDVmNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvTkZSdWxlLmphdmEKQEAgLTAsMCArMSwxMzM1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9ORlJ1bGUuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wNy8zMSAwMDo1NDo1OCAkIAorICogJFJldmlzaW9uOiAxLjYgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKKworaW1wb3J0IGphdmEudGV4dC4qOworCisvKioKKyAqIEEgY2xhc3MgcmVwcmVzbnRpbmcgYSBzaW5nbGUgcnVsZSBpbiBhIFJ1bGVCYXNlZE51bWJlckZvcm1hdC4gIEEgcnVsZQorICogaW5zZXJ0cyBpdHMgdGV4dCBpbnRvIHRoZSByZXN1bHQgc3RyaW5nIGFuZCB0aGVuIHBhc3NlcyBjb250cm9sIHRvIGl0cworICogc3Vic3RpdHV0aW9ucywgd2hpY2ggZG8gdGhlIHNhbWUgdGhpbmcuCisgKiAkUkNTZmlsZTogTkZSdWxlLmphdmEsdiAkICRSZXZpc2lvbjogMS42ICQgJERhdGU6IDIwMDIvMDcvMzEgMDA6NTQ6NTggJAorICovCitmaW5hbCBjbGFzcyBORlJ1bGUgeworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjb25zdGFudHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQdXRzIGEgY29weXJpZ2h0IGluIHRoZSAuY2xhc3MgZmlsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHROb3RpY2UKKyAgICAgICAgPSAiQ29weXJpZ2h0IFx1MDBhOTE5OTctMTk5OCBJQk0gQ29ycC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIC8qKgorICAgICAqIFNwZWNpYWwgYmFzZSB2YWx1ZSB1c2VkIHRvIGlkZW50aWZ5IGEgbmVnYXRpdmUtbnVtYmVyIHJ1bGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORUdBVElWRV9OVU1CRVJfUlVMRSA9IC0xOworCisgICAgLyoqCisgICAgICogU3BlY2lhbCBiYXNlIHZhbHVlIHVzZWQgdG8gaWRlbnRpZnkgYW4gaW1wcm9wZXIgZnJhY3Rpb24gKHgueCkgcnVsZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUFJPUEVSX0ZSQUNUSU9OX1JVTEUgPSAtMjsKKworICAgIC8qKgorICAgICAqIFNwZWNpYWwgYmFzZSB2YWx1ZSB1c2VkIHRvIGlkZW50aWZ5IGEgcHJvcGVyIGZyYWN0aW9uICgwLngpIHJ1bGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJfRlJBQ1RJT05fUlVMRSA9IC0zOworCisgICAgLyoqCisgICAgICogU3BlY2lhbCBiYXNlIHZhbHVlIHVzZWQgdG8gaWRlbnRpZnkgYSBtYXN0ZXIgcnVsZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BU1RFUl9SVUxFID0gLTQ7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZGF0YSBtZW1iZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogVGhlIHJ1bGUncyBiYXNlIHZhbHVlCisgICAgICovCisgICAgcHJpdmF0ZSBsb25nIGJhc2VWYWx1ZTsKKworICAgIC8qKgorICAgICAqIFRoZSBydWxlJ3MgcmFkaXggKHRoZSByYWRpeCB0byB0aGUgcG93ZXIgb2YgdGhlIGV4cG9uZW50IGVxdWFscworICAgICAqIHRoZSBydWxlJ3MgZGl2aXNvcikKKyAgICAgKi8KKyAgICBwcml2YXRlIHNob3J0IHJhZGl4ID0gMTA7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcnVsZSdzIGV4cG9uZW50ICh0aGUgcmFkeCByYXNlZCB0byB0aGUgcG93ZXIgb2YgdGhlIGV4cG9uc250CisgICAgICogZXF1YWxzIHRoZSBydWxlJ3MgZGl2aXNvcikKKyAgICAgKi8KKyAgICBwcml2YXRlIHNob3J0IGV4cG9uZW50ID0gMDsKKworICAgIC8qKgorICAgICAqIFRoZSBydWxlJ3MgcnVsZSB0ZXh0LiAgV2hlbiBmb3JtYXR0aW5nIGEgbnVtYmVyLCB0aGUgcnVsZSdzIHRleHQKKyAgICAgKiBpcyBpbnNlcnRlZCBpbnRvIHRoZSByZXN1bHQgc3RyaW5nLCBhbmQgdGhlbiB0aGUgdGV4dCBmcm9tIGFueQorICAgICAqIHN1YnN0aXR1dGlvbnMgaXMgaW5zZXJ0ZWQgaW50byB0aGUgcmVzdWx0IHN0cmluZworICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIHJ1bGVUZXh0ID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoZSBydWxlJ3MgZmlyc3Qgc3Vic3RpdHV0aW9uICh0aGUgb25lIHdpdGggdGhlIGxvd2VyIG9mZnNldAorICAgICAqIGludG8gdGhlIHJ1bGUgdGV4dCkKKyAgICAgKi8KKyAgICBwcml2YXRlIE5GU3Vic3RpdHV0aW9uIHN1YjEgPSBudWxsOworCisgICAgLyoqCisgICAgICogVGhlIHJ1bGUncyBzZWNvbmQgc3Vic3RpdHV0aW9uICh0aGUgb25lIHdpdGggdGhlIGhpZ2hlciBvZmZzZXQKKyAgICAgKiBpbnRvIHRoZSBydWxlIHRleHQpCisgICAgICovCisgICAgcHJpdmF0ZSBORlN1YnN0aXR1dGlvbiBzdWIyID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoZSBSdWxlQmFzZWROdW1iZXJGb3JtYXQgdGhhdCBvd25zIHRoaXMgcnVsZQorICAgICAqLworICAgIHByaXZhdGUgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZvcm1hdHRlciA9IG51bGw7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY29uc3RydWN0aW9uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBvbmUgb3IgbW9yZSBydWxlcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gcGFzc2VkIGluLgorICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHJ1bGUocykuCisgICAgICogQHBhcmFtIG93bmVyIFRoZSBydWxlIHNldCBjb250YWluaW5nIHRoZSBuZXcgcnVsZShzKS4KKyAgICAgKiBAcGFyYW0gcHJlZGVjZXNzb3IgVGhlIHJ1bGUgdGhhdCBwcmVjZWRlcyB0aGUgbmV3IG9uZShzKSBpbiAib3duZXIiJ3MKKyAgICAgKiBydWxlIGxpc3QKKyAgICAgKiBAcGFyYW0gb3duZXJzT3duZXIgVGhlIFJ1bGVCYXNlZE51bWJlckZvcm1hdCB0aGF0IG93bnMgdGhlCisgICAgICogcnVsZSBzZXQgdGhhdCBvd25zIHRoZSBuZXcgcnVsZShzKQorICAgICAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2YgTkZSdWxlLCBvciBhbiBhcnJheSBvZiBORlJ1bGVzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBPYmplY3QgbWFrZVJ1bGVzKFN0cmluZyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZSdWxlU2V0ICAgICAgICAgICAgIG93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORlJ1bGUgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBvd25lcnNPd25lcikgeworICAgICAgICAvLyB3ZSBrbm93IHdlJ3JlIG1ha2luZyBhdCBsZWFzdCBvbmUgcnVsZSwgc28gZ28gYWhlYWQgYW5kCisgICAgICAgIC8vIG5ldyBpdCB1cCBhbmQgaW5pdGlhbGl6ZSBpdHMgYmFzZXZhbHVlIGFuZCBkaXZpc29yCisgICAgICAgIC8vICh0aGlzIGFsc28gc3RyaXBzIHRoZSBydWxlIGRlc2NyaXB0b3IsIGlmIGFueSwgb2ZmIHRoZQorICAgICAgICAvLyBkZXNjcmlwdG9uIHN0cmluZykKKyAgICAgICAgTkZSdWxlIHJ1bGUxID0gbmV3IE5GUnVsZShvd25lcnNPd25lcik7CisgICAgICAgIGRlc2NyaXB0aW9uID0gcnVsZTEucGFyc2VSdWxlRGVzY3JpcHRvcihkZXNjcmlwdGlvbik7CisKKyAgICAgICAgLy8gY2hlY2sgdGhlIGRlc2NyaXB0aW9uIHRvIHNlZSB3aGV0aGVyIHRoZXJlJ3MgdGV4dCBlbmNsb3NlZAorICAgICAgICAvLyBpbiBicmFja2V0cworICAgICAgICBpbnQgYnJhY2sxID0gZGVzY3JpcHRpb24uaW5kZXhPZigiWyIpOworICAgICAgICBpbnQgYnJhY2syID0gZGVzY3JpcHRpb24uaW5kZXhPZigiXSIpOworCisgICAgICAgIC8vIGlmIHRoZSBkZXNjcmlwdGlvbiBkb2Vzbid0IGNvbnRhaW4gYSBtYXRjaGVkIHBhaXIgb2YgYnJhY2tldHMsCisgICAgICAgIC8vIG9yIGlmIGl0J3Mgb2YgYSB0eXBlIHRoYXQgZG9lc24ndCByZWNvZ25pemUgYnJhY2tldGVkIHRleHQsCisgICAgICAgIC8vIHRoZW4gbGVhdmUgdGhlIGRlc2NyaXB0aW9uIGFsb25lLCBpbml0aWFsaXplIHRoZSBydWxlJ3MKKyAgICAgICAgLy8gcnVsZSB0ZXh0IGFuZCBzdWJzdGl0dXRpb25zLCBhbmQgcmV0dXJuIHRoYXQgcnVsZQorICAgICAgICBpZiAoYnJhY2sxID09IC0xIHx8IGJyYWNrMiA9PSAtMSB8fCBicmFjazEgPiBicmFjazIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBydWxlMS5nZXRCYXNlVmFsdWUoKSA9PSBQUk9QRVJfRlJBQ1RJT05fUlVMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHJ1bGUxLmdldEJhc2VWYWx1ZSgpID09IE5FR0FUSVZFX05VTUJFUl9SVUxFKSB7CisgICAgICAgICAgICBydWxlMS5ydWxlVGV4dCA9IGRlc2NyaXB0aW9uOworICAgICAgICAgICAgcnVsZTEuZXh0cmFjdFN1YnN0aXR1dGlvbnMob3duZXIsIHByZWRlY2Vzc29yLCBvd25lcnNPd25lcik7CisgICAgICAgICAgICByZXR1cm4gcnVsZTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBpZiB0aGUgZGVzY3JpcHRpb24gZG9lcyBjb250YWluIGEgbWF0Y2hlZCBwYWlyIG9mIGJyYWNrZXRzLAorICAgICAgICAgICAgLy8gdGhlbiBpdCdzIHJlYWxseSBzaG9ydGhhbmQgZm9yIHR3byBydWxlcyAod2l0aCBvbmUgZXhjZXB0aW9uKQorICAgICAgICAgICAgTkZSdWxlIHJ1bGUyID0gbnVsbDsKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCisgICAgICAgICAgICAvLyB3ZSdsbCBhY3R1YWxseSBvbmx5IHNwbGl0IHRoZSBydWxlIGludG8gdHdvIHJ1bGVzIGlmIGl0cworICAgICAgICAgICAgLy8gYmFzZSB2YWx1ZSBpcyBhbiBldmVuIG11bHRpcGxlIG9mIGl0cyBkaXZpc29yIChvciBpdCdzIG9uZQorICAgICAgICAgICAgLy8gb2YgdGhlIHNwZWNpYWwgcnVsZXMpCisgICAgICAgICAgICBpZiAoKHJ1bGUxLmJhc2VWYWx1ZSA+IDAKKyAgICAgICAgICAgICAgICAgICAgJiYgcnVsZTEuYmFzZVZhbHVlICUgKE1hdGgucG93KHJ1bGUxLnJhZGl4LCBydWxlMS5leHBvbmVudCkpID09IDApCisgICAgICAgICAgICAgICAgICAgIHx8IHJ1bGUxLmJhc2VWYWx1ZSA9PSBJTVBST1BFUl9GUkFDVElPTl9SVUxFCisgICAgICAgICAgICAgICAgICAgIHx8IHJ1bGUxLmJhc2VWYWx1ZSA9PSBNQVNURVJfUlVMRSkgeworCisgICAgICAgICAgICAgICAgLy8gaWYgaXQgcGFzc2VzIHRoYXQgdGVzdCwgbmV3IHVwIHRoZSBzZWNvbmQgcnVsZS4gIElmIHRoZQorICAgICAgICAgICAgICAgIC8vIHJ1bGUgc2V0IGJvdGggcnVsZXMgd2lsbCBiZWxvbmcgdG8gaXMgYSBmcmFjdGlvbiBydWxlCisgICAgICAgICAgICAgICAgLy8gc2V0LCB0aGV5IGJvdGggaGF2ZSB0aGUgc2FtZSBiYXNlIHZhbHVlOyBvdGhlcndpc2UsCisgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRoZSBvcmlnaW5hbCBydWxlJ3MgYmFzZSB2YWx1ZSAoInJ1bGUxIiBhY3R1YWxseQorICAgICAgICAgICAgICAgIC8vIGdvZXMgU0VDT05EIGluIHRoZSBydWxlIHNldCdzIHJ1bGUgbGlzdCkKKyAgICAgICAgICAgICAgICBydWxlMiA9IG5ldyBORlJ1bGUob3duZXJzT3duZXIpOworICAgICAgICAgICAgICAgIGlmIChydWxlMS5iYXNlVmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBydWxlMi5iYXNlVmFsdWUgPSBydWxlMS5iYXNlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghb3duZXIuaXNGcmFjdGlvblNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK3J1bGUxLmJhc2VWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBkZXNjcmlwdGlvbiBiZWdhbiB3aXRoICJ4LngiIGFuZCBjb250YWlucyBicmFja2V0ZWQKKyAgICAgICAgICAgICAgICAvLyB0ZXh0LCBpdCBkZXNjcmliZXMgYm90aCB0aGUgaW1wcm9wZXIgZnJhY3Rpb24gcnVsZSBhbmQKKyAgICAgICAgICAgICAgICAvLyB0aGUgcHJvcGVyIGZyYWN0aW9uIHJ1bGUKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChydWxlMS5iYXNlVmFsdWUgPT0gSU1QUk9QRVJfRlJBQ1RJT05fUlVMRSkgeworICAgICAgICAgICAgICAgICAgICBydWxlMi5iYXNlVmFsdWUgPSBQUk9QRVJfRlJBQ1RJT05fUlVMRTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGVzY3JpcHRpb24gYmVnYW4gd2l0aCAieC4wIiBhbmQgY29udGFpbnMgYnJhY2tldGVkCisgICAgICAgICAgICAgICAgLy8gdGV4dCwgaXQgZGVzY3JpYmVzIGJvdGggdGhlIG1hc3RlciBydWxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAvLyBpbXByb3BlciBmcmFjdGlvbiBydWxlCisgICAgICAgICAgICAgICAgZWxzZSBpZiAocnVsZTEuYmFzZVZhbHVlID09IE1BU1RFUl9SVUxFKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGUyLmJhc2VWYWx1ZSA9IHJ1bGUxLmJhc2VWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgcnVsZTEuYmFzZVZhbHVlID0gSU1QUk9QRVJfRlJBQ1RJT05fUlVMRTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBib3RoIHJ1bGVzIGhhdmUgdGhlIHNhbWUgcmFkaXggYW5kIGV4cG9uZW50IChpLmUuLCB0aGUKKyAgICAgICAgICAgICAgICAvLyBzYW1lIGRpdmlzb3IpCisgICAgICAgICAgICAgICAgcnVsZTIucmFkaXggPSBydWxlMS5yYWRpeDsKKyAgICAgICAgICAgICAgICBydWxlMi5leHBvbmVudCA9IHJ1bGUxLmV4cG9uZW50OworCisgICAgICAgICAgICAgICAgLy8gcnVsZTIncyBydWxlIHRleHQgb21pdHMgdGhlIHN0dWZmIGluIGJyYWNrZXRzOiBpbml0YWxpemUKKyAgICAgICAgICAgICAgICAvLyBpdHMgcnVsZSB0ZXh0IGFuZCBzdWJzdGl0dXRpb25zIGFjY29yZGluZ2x5CisgICAgICAgICAgICAgICAgc2J1Zi5hcHBlbmQoZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIGJyYWNrMSkpOworICAgICAgICAgICAgICAgIGlmIChicmFjazIgKyAxIDwgZGVzY3JpcHRpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2J1Zi5hcHBlbmQoZGVzY3JpcHRpb24uc3Vic3RyaW5nKGJyYWNrMiArIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcnVsZTIucnVsZVRleHQgPSBzYnVmLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgcnVsZTIuZXh0cmFjdFN1YnN0aXR1dGlvbnMob3duZXIsIHByZWRlY2Vzc29yLCBvd25lcnNPd25lcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHJ1bGUxJ3MgdGV4dCBpbmNsdWRlcyB0aGUgdGV4dCBpbiB0aGUgYnJhY2tldHMgYnV0IG9taXRzCisgICAgICAgICAgICAvLyB0aGUgYnJhY2tldHMgdGhlbXNlbHZlczogaW5pdGlhbGl6ZSBfaXRzXyBydWxlIHRleHQgYW5kCisgICAgICAgICAgICAvLyBzdWJzdGl0dXRpb25zIGFjY29yZGluZ2x5CisgICAgICAgICAgICBzYnVmLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgIHNidWYuYXBwZW5kKGRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCBicmFjazEpKTsKKyAgICAgICAgICAgIHNidWYuYXBwZW5kKGRlc2NyaXB0aW9uLnN1YnN0cmluZyhicmFjazEgKyAxLCBicmFjazIpKTsKKyAgICAgICAgICAgIGlmIChicmFjazIgKyAxIDwgZGVzY3JpcHRpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBzYnVmLmFwcGVuZChkZXNjcmlwdGlvbi5zdWJzdHJpbmcoYnJhY2syICsgMSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcnVsZTEucnVsZVRleHQgPSBzYnVmLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBydWxlMS5leHRyYWN0U3Vic3RpdHV0aW9ucyhvd25lciwgcHJlZGVjZXNzb3IsIG93bmVyc093bmVyKTsKKworICAgICAgICAgICAgLy8gaWYgd2Ugb25seSBoYXZlIG9uZSBydWxlLCByZXR1cm4gaXQ7IGlmIHdlIGhhdmUgdHdvLCByZXR1cm4KKyAgICAgICAgICAgIC8vIGEgdHdvLWVsZW1lbnQgYXJyYXkgY29udGFpbmluZyB0aGVtIChub3RpY2UgdGhhdCBydWxlMiBnb2VzCisgICAgICAgICAgICAvLyBCRUZPUkUgcnVsZTEgaW4gdGhlIGxpc3Q6IGluIGFsbCBjYXNlcywgcnVsZTIgT01JVFMgdGhlCisgICAgICAgICAgICAvLyBtYXRlcmlhbCBpbiB0aGUgYnJhY2tldHMgYW5kIHJ1bGUxIElOQ0xVREVTIHRoZSBtYXRlcmlhbAorICAgICAgICAgICAgLy8gaW4gdGhlIGJyYWNrZXRzKQorICAgICAgICAgICAgaWYgKHJ1bGUyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVsZTE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTkZSdWxlW10geyBydWxlMiwgcnVsZTEgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE5vbWluYWwgY29uc3RydWN0b3IgZm9yIE5GUnVsZS4gIE1vc3Qgb2YgdGhlIHdvcmsgb2YgY29uc3RydWN0aW5nCisgICAgICogYW4gTkZSdWxlIGlzIGFjdHVhbGx5IHBlcmZvcm1lZCBieSBtYWtlUnVsZXMoKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgTkZSdWxlKFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIpIHsKKyAgICAgICAgdGhpcy5mb3JtYXR0ZXIgPSBmb3JtYXR0ZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIHJ1bGUncyBydWxlIGRlc2NyaXB0b3IgKGkuZS4sIHRoZSBiYXNlCisgICAgICogdmFsdWUgYW5kL29yIG90aGVyIHRva2VucyB0aGF0IHByZWNlZGUgdGhlIHJ1bGUncyBydWxlIHRleHQKKyAgICAgKiBpbiB0aGUgZGVzY3JpcHRpb24pIGFuZCBzZXRzIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZSwgcmFkaXgsIGFuZAorICAgICAqIGV4cG9uZW50IGFjY29yZGluZyB0byB0aGUgZGVzY3JpcHRvci4gIChJZiB0aGUgZGVzY3JpcHRpb24gZG9lc24ndAorICAgICAqIGluY2x1ZGUgYSBydWxlIGRlc2NyaXB0b3IsIHRoZW4gdGhpcyBmdW5jdGlvbiBzZXRzIGV2ZXJ5dGhpbmcgdG8KKyAgICAgKiBkZWZhdWx0IHZhbHVlcyBhbmQgdGhlIHJ1bGUgc2V0IHNldHMgdGhlIHJ1bGUncyByZWFsIGJhc2UgdmFsdWUpLgorICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgcnVsZSdzIGRlc2NyaXB0aW9uCisgICAgICogQHJldHVybiBJZiAiZGVzY3JpcHRpb24iIGluY2x1ZGVkIGEgcnVsZSBkZXNjcmlwdG9yLCB0aGlzIGlzCisgICAgICogImRlc2NyaXB0aW9uIiB3aXRoIHRoZSBkZXNjcmlwdG9yIGFuZCBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAqIHN0cmlwcGVkIG9mZi4gIE90aGVyd2lzZTsgaXQncyAiZGVzY3JpcHRvciIgdW5jaGFuZ2QuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgcGFyc2VSdWxlRGVzY3JpcHRvcihTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0b3I7CisKKyAgICAgICAgLy8gdGhlIGRlc2NyaXB0aW9uIGNvbnNpc3RzIG9mIGEgcnVsZSBkZXNjcmlwdG9yIGFuZCBhIHJ1bGUgYm9keSwKKyAgICAgICAgLy8gc2VwYXJhdGVkIGJ5IGEgY29sb24uICBUaGUgcnVsZSBkZXNjcmlwdG9yIGlzIG9wdGlvbmFsLiAgSWYKKyAgICAgICAgLy8gaXQncyBvbWl0dGVkLCBqdXN0IHNldCB0aGUgYmFzZSB2YWx1ZSB0byAwLgorICAgICAgICBpbnQgcCA9IGRlc2NyaXB0aW9uLmluZGV4T2YoIjoiKTsKKyAgICAgICAgaWYgKHAgPT0gLTEpIHsKKyAgICAgICAgICAgIHNldEJhc2VWYWx1ZSgwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGNvcHkgdGhlIGRlc2NyaXB0b3Igb3V0IGludG8gaXRzIG93biBzdHJpbmcgYW5kIHN0cmlwIGl0LAorICAgICAgICAgICAgLy8gYWxvbmcgd2l0aCBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZSwgb3V0IG9mIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgLy8gZGVzY3JpcHRpb24KKyAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBkZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgcCk7CisgICAgICAgICAgICArK3A7CisgICAgICAgICAgICB3aGlsZSAocCA8IGRlc2NyaXB0aW9uLmxlbmd0aCgpICYmIFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGRlc2NyaXB0aW9uLmNoYXJBdChwKSkpCisgICAgICAgICAgICAgICAgKytwOworICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5zdWJzdHJpbmcocCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGZpcnN0IHRvIHNlZSBpZiB0aGUgcnVsZSBkZXNjcmlwdG9yIG1hdGNoZXMgdGhlIHRva2VuCisgICAgICAgICAgICAvLyBmb3Igb25lIG9mIHRoZSBzcGVjaWFsIHJ1bGVzLiAgSWYgaXQgZG9lcywgc2V0IHRoZSBiYXNlCisgICAgICAgICAgICAvLyB2YWx1ZSB0byB0aGUgY29ycmVjdCBpZGVudGZpZXIgdmFsdWUKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmVxdWFscygiLXgiKSkgeworICAgICAgICAgICAgICAgIHNldEJhc2VWYWx1ZShORUdBVElWRV9OVU1CRVJfUlVMRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChkZXNjcmlwdG9yLmVxdWFscygieC54IikpIHsKKyAgICAgICAgICAgICAgICBzZXRCYXNlVmFsdWUoSU1QUk9QRVJfRlJBQ1RJT05fUlVMRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChkZXNjcmlwdG9yLmVxdWFscygiMC54IikpIHsKKyAgICAgICAgICAgICAgICBzZXRCYXNlVmFsdWUoUFJPUEVSX0ZSQUNUSU9OX1JVTEUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZGVzY3JpcHRvci5lcXVhbHMoInguMCIpKSB7CisgICAgICAgICAgICAgICAgc2V0QmFzZVZhbHVlKE1BU1RFUl9SVUxFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWYgdGhlIHJ1bGUgZGVzY3JpcHRvciBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBpdCdzIGEgZGVzY3JpcHRvcgorICAgICAgICAgICAgLy8gZm9yIGEgbm9ybWFsIHJ1bGUKKyAgICAgICAgICAgIGVsc2UgaWYgKGRlc2NyaXB0b3IuY2hhckF0KDApID49ICcwJyAmJiBkZXNjcmlwdG9yLmNoYXJBdCgwKSA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdGVtcFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgICAgIHAgPSAwOworICAgICAgICAgICAgICAgIGNoYXIgYyA9ICcgJzsKKworICAgICAgICAgICAgICAgIC8vIGJlZ2luIHBhcnNpbmcgdGhlIGRlc2NyaXB0b3I6IGNvcHkgZGlnaXRzCisgICAgICAgICAgICAgICAgLy8gaW50byAidGVtcFZhbHVlIiwgc2tpcCBwZXJpb2RzLCBjb21tYXMsIGFuZCBzcGFjZXMsCisgICAgICAgICAgICAgICAgLy8gc3RvcCBvbiBhIHNsYXNoIG9yID4gc2lnbiAob3IgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uIG9uIGFueSBvdGhlciBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGRlc2NyaXB0b3IubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYyA9IGRlc2NyaXB0b3IuY2hhckF0KHApOworICAgICAgICAgICAgICAgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBWYWx1ZS5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnLycgfHwgYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGMpIHx8IGMgPT0gJywnIHx8IGMgPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGNoYXJhY3RlciBpbiBydWxlIGRlc2NyaXB0b3IiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gdGVtcFZhbHVlIG5vdyBjb250YWlucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBydWxlJ3MgYmFzZSB2YWx1ZSB3aXRoIHRoZSBwdW5jdHVhdGlvbiBzdHJpcHBlZCBvdXQuCisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBydWxlJ3MgYmFzZSB2YWx1ZSBhY2NvcmRpbmdseQorICAgICAgICAgICAgICAgIHNldEJhc2VWYWx1ZShMb25nLnBhcnNlTG9uZyh0ZW1wVmFsdWUudG9TdHJpbmcoKSkpOworCisgICAgICAgICAgICAgICAgLy8gaWYgd2Ugc3RvcHBlZCB0aGUgcHJldmlvdXMgbG9vcCBvbiBhIHNsYXNoLCB3ZSdyZQorICAgICAgICAgICAgICAgIC8vIG5vdyBwYXJzaW5nIHRoZSBydWxlJ3MgcmFkaXguICBBZ2FpbiwgYWNjdW11bGF0ZSBkaWdpdHMKKyAgICAgICAgICAgICAgICAvLyBpbiB0ZW1wVmFsdWUsIHNraXAgcHVuY3R1YXRpb24sIHN0b3Agb24gYSA+IG1hcmssIGFuZAorICAgICAgICAgICAgICAgIC8vIHRocm93IGFuIGV4Y2VwdGlvbiBvbiBhbnl0aGluZyBlbHNlCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBWYWx1ZS5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBkZXNjcmlwdG9yLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjID0gZGVzY3JpcHRvci5jaGFyQXQocCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVmFsdWUuYXBwZW5kKGMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGMpIHx8IGMgPT0gJywnIHx8IGMgPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGNoYXJhY3RlciBpcyBydWxlIGRlc2NyaXB0b3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIHRlbXBWYWx1ZSBub3cgY29udGFpbidzIHRoZSBydWxlJ3MgcmFkaXguICBTZXQgaXQKKyAgICAgICAgICAgICAgICAgICAgLy8gYWNjb3JkaW5nbHksIGFuZCByZWNhbGN1bGF0ZSB0aGUgcnVsZSdzIGV4cG9uZW50CisgICAgICAgICAgICAgICAgICAgIHJhZGl4ID0gU2hvcnQucGFyc2VTaG9ydCh0ZW1wVmFsdWUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYWRpeCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSdWxlIGNhbid0IGhhdmUgcmFkaXggb2YgMCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gZXhwZWN0ZWRFeHBvbmVudCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIHdlIHN0b3BwZWQgdGhlIHByZXZpb3VzIGxvb3Agb24gYSA+IHNpZ24sIHRoZW4gY29udGludWUKKyAgICAgICAgICAgICAgICAvLyBmb3IgYXMgbG9uZyBhcyB3ZSBzdGlsbCBzZWUgPiBzaWducy4gIEZvciBlYWNoIG9uZSwKKyAgICAgICAgICAgICAgICAvLyBkZWNyZW1lbnQgdGhlIGV4cG9uZW50ICh1bmxlc3MgdGhlIGV4cG9uZW50IGlzIGFscmVhZHkgMCkuCisgICAgICAgICAgICAgICAgLy8gSWYgd2Ugc2VlIGFub3RoZXIgY2hhcmFjdGVyIGJlZm9yZSByZWFjaGluZyB0aGUgZW5kIG9mCisgICAgICAgICAgICAgICAgLy8gdGhlIGRlc2NyaXB0b3IsIHRoYXQncyBhbHNvIGEgc3ludGF4IGVycm9yLgorICAgICAgICAgICAgICAgIGlmIChjID09ICc+JykgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGRlc2NyaXB0b3IubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBkZXNjcmlwdG9yLmNoYXJBdChwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICc+JyAmJiBleHBvbmVudCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWV4cG9uZW50OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGNoYXJhY3RlciBpbiBydWxlIGRlc2NyaXB0b3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGZpbmFsbHksIGlmIHRoZSBydWxlIGJvZHkgYmVnaW5zIHdpdGggYW4gYXBvc3Ryb3BoZSwgc3RyaXAgaXQgb2ZmCisgICAgICAgIC8vICh0aGlzIGlzIGdlbmVyYWxseSB1c2VkIHRvIHB1dCB3aGl0ZXNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAgICAgLy8gYSBydWxlJ3MgcnVsZSB0ZXh0KQorICAgICAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoKCkgPiAwICYmIGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PSAnXCcnKSB7CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLnN1YnN0cmluZygxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJldHVybiB0aGUgZGVzY3JpcHRpb24gd2l0aCBhbGwgdGhlIHN0dWZmIHdlJ3ZlIGp1c3Qgd2FkZWQgdGhyb3VnaAorICAgICAgICAvLyBzdHJpcHBlZCBvZmYgdGhlIGZyb250LiAgSXQgbm93IGNvbnRhaW5zIGp1c3QgdGhlIHJ1bGUgYm9keS4KKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlYXJjaGVzIHRoZSBydWxlJ3MgcnVsZSB0ZXh0IGZvciB0aGUgc3Vic3RpdHV0aW9uIHRva2VucywKKyAgICAgKiBjcmVhdGVzIHRoZSBzdWJzdGl0dXRpb25zLCBhbmQgcmVtb3ZlcyB0aGUgc3Vic3RpdHV0aW9uIHRva2VucworICAgICAqIGZyb20gdGhlIHJ1bGUncyBydWxlIHRleHQuCisgICAgICogQHBhcmFtIG93bmVyIFRoZSBydWxlIHNldCBjb250YWluaW5nIHRoaXMgcnVsZQorICAgICAqIEBwYXJhbSBwcmVkZWNlc3NvciBUaGUgcnVsZSBwcmVzZWRpbmcgdGhpcyBvbmUgaW4gIm93bmVycyIgcnVsZSBsaXN0CisgICAgICogQHBhcmFtIG93bmVyc093bmVyIFRoZSBSdWxlQmFzZWRGb3JtYXQgdGhhdCBvd25zIHRoaXMgcnVsZQorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBleHRyYWN0U3Vic3RpdHV0aW9ucyhORlJ1bGVTZXQgICAgICAgICAgICAgb3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5GUnVsZSAgICAgICAgICAgICAgICBwcmVkZWNlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IG93bmVyc093bmVyKSB7CisgICAgICAgIHN1YjEgPSBleHRyYWN0U3Vic3RpdHV0aW9uKG93bmVyLCBwcmVkZWNlc3Nvciwgb3duZXJzT3duZXIpOworICAgICAgICBzdWIyID0gZXh0cmFjdFN1YnN0aXR1dGlvbihvd25lciwgcHJlZGVjZXNzb3IsIG93bmVyc093bmVyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZWFyY2hlcyB0aGUgcnVsZSdzIHJ1bGUgdGV4dCBmb3IgdGhlIGZpcnN0IHN1YnN0aXR1dGlvbiB0b2tlbiwKKyAgICAgKiBjcmVhdGVzIGEgc3Vic3RpdHV0aW9uIGJhc2VkIG9uIGl0LCBhbmQgcmVtb3ZlcyB0aGUgdG9rZW4gZnJvbQorICAgICAqIHRoZSBydWxlJ3MgcnVsZSB0ZXh0LgorICAgICAqIEBwYXJhbSBvd25lciBUaGUgcnVsZSBzZXQgY29udGFpbmluZyB0aGlzIHJ1bGUKKyAgICAgKiBAcGFyYW0gcHJlZGVjZXNzb3IgVGhlIHJ1bGUgcHJlY2VkaW5nIHRoaXMgb25lIGluIHRoZSBydWxlIHNldCdzCisgICAgICogcnVsZSBsaXN0CisgICAgICogQHBhcmFtIG93bmVyc093bmVyIFRoZSBSdWxlQmFzZWROdW1iZXJGb3JtYXQgdGhhdCBvd25zIHRoaXMgcnVsZQorICAgICAqIEByZXR1cm4gVGhlIG5ld2x5LWNyZWF0ZWQgc3Vic3RpdHV0aW9uLiAgVGhpcyBpcyBuZXZlciBudWxsOyBpZgorICAgICAqIHRoZSBydWxlIHRleHQgZG9lc24ndCBjb250YWluIGFueSBzdWJzdGl0dXRpb24gdG9rZW5zLCB0aGlzIHdpbGwKKyAgICAgKiBiZSBhIE51bGxTdWJzdGl0dXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBORlN1YnN0aXR1dGlvbiBleHRyYWN0U3Vic3RpdHV0aW9uKE5GUnVsZVNldCAgICAgICAgICAgICBvd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZSdWxlICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgb3duZXJzT3duZXIpIHsKKyAgICAgICAgTkZTdWJzdGl0dXRpb24gcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgaW50IHN1YlN0YXJ0OworICAgICAgICBpbnQgc3ViRW5kOworCisgICAgICAgIC8vIHNlYXJjaCB0aGUgcnVsZSdzIHJ1bGUgdGV4dCBmb3IgdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mCisgICAgICAgIC8vIGEgc3Vic3RpdHV0aW9uIHRva2VuCisgICAgICAgIHN1YlN0YXJ0ID0gaW5kZXhPZkFueShuZXcgU3RyaW5nW10geyAiPDwiLCAiPCUiLCAiPCMiLCAiPDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj4+IiwgIj4lIiwgIj4jIiwgIj4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9JSIsICI9IyIsICI9MCIgfSApOworCisgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIG9uZSwgY3JlYXRlIGEgbnVsbCBzdWJzdGl0dXRpb24gcG9zaXRpb25lZAorICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBydWxlIHRleHQKKyAgICAgICAgaWYgKHN1YlN0YXJ0ID09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gTkZTdWJzdGl0dXRpb24ubWFrZVN1YnN0aXR1dGlvbihydWxlVGV4dC5sZW5ndGgoKSwgdGhpcywgcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIsIG93bmVyc093bmVyLCAiIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBzcGVjaWFsLWNhc2UgdGhlICI+Pj4iIHRva2VuLCBzaW5jZSBzZWFyY2hpbmcgZm9yIHRoZSA+IGF0IHRoZQorICAgICAgICAvLyBlbmQgd2lsbCBhY3R1YWxseSBmaW5kIHRoZSA+IGluIHRoZSBtaWRkbGUKKyAgICAgICAgaWYgKHJ1bGVUZXh0LnN1YnN0cmluZyhzdWJTdGFydCkuc3RhcnRzV2l0aCgiPj4+IikpIHsKKyAgICAgICAgICAgIHN1YkVuZCA9IHN1YlN0YXJ0ICsgMjsKKworICAgICAgICAvLyBvdGhlcndpc2UgdGhlIHN1YnN0aXR1dGlvbiB0b2tlbiBlbmRzIHdpdGggdGhlIHNhbWUgY2hhcmFjdGVyCisgICAgICAgIC8vIGl0IGJlZ2FuIHdpdGgKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YkVuZCA9IHJ1bGVUZXh0LmluZGV4T2YocnVsZVRleHQuY2hhckF0KHN1YlN0YXJ0KSwgc3ViU3RhcnQgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHdlIGRvbid0IGZpbmQgdGhlIGVuZCBvZiB0aGUgdG9rZW4gKGkuZS4sIGlmIHdlJ3JlIG9uIGEgc2luZ2xlLAorICAgICAgICAvLyB1bm1hdGNoZWQgdG9rZW4gY2hhcmFjdGVyKSwgY3JlYXRlIGEgbnVsbCBzdWJzdGl0dXRpb24gcG9zaXRpb25lZAorICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBydWxlCisgICAgICAgIGlmIChzdWJFbmQgPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBORlN1YnN0aXR1dGlvbi5tYWtlU3Vic3RpdHV0aW9uKHJ1bGVUZXh0Lmxlbmd0aCgpLCB0aGlzLCBwcmVkZWNlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciwgb3duZXJzT3duZXIsICIiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGEgcmVhbCBzdWJzdGl0dXRpb24gdG9rZW4gKG9yIGF0IGxlYXN0CisgICAgICAgIC8vIHNvbWUgdGV4dCBib3VuZGVkIGJ5IHN1YnN0aXR1dGlvbiB0b2tlbiBjaGFyYWN0ZXJzKS4gIFVzZQorICAgICAgICAvLyBtYWtlU3Vic3RpdHV0aW9uKCkgdG8gY3JlYXRlIHRoZSByaWdodCBraW5kIG9mIHN1YnN0aXR1dGlvbgorICAgICAgICByZXN1bHQgPSBORlN1YnN0aXR1dGlvbi5tYWtlU3Vic3RpdHV0aW9uKHN1YlN0YXJ0LCB0aGlzLCBwcmVkZWNlc3Nvciwgb3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25lcnNPd25lciwgcnVsZVRleHQuc3Vic3RyaW5nKHN1YlN0YXJ0LCBzdWJFbmQgKyAxKSk7CisKKyAgICAgICAgLy8gcmVtb3ZlIHRoZSBzdWJzdGl0dXRpb24gZnJvbSB0aGUgcnVsZSB0ZXh0CisgICAgICAgIHJ1bGVUZXh0ID0gcnVsZVRleHQuc3Vic3RyaW5nKDAsIHN1YlN0YXJ0KSArIHJ1bGVUZXh0LnN1YnN0cmluZyhzdWJFbmQgKyAxKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZSwgYW5kIGNhdXNlcyB0aGUgcmFkaXggYW5kIGV4cG9uZW50CisgICAgICogdG8gYmUgcmVjYWxjdWxhdGVkLiAgVGhpcyBpcyB1c2VkIGR1cmluZyBjb25zdHJ1Y3Rpb24gd2hlbiB3ZQorICAgICAqIGRvbid0IGtub3cgdGhlIHJ1bGUncyBiYXNlIHZhbHVlIHVudGlsIGFmdGVyIGl0J3MgYmVlbgorICAgICAqIGNvbnN0cnVjdGVkLiAgSXQgc2hvdWxkIGJlIHVzZWQgYXQgYW55IG90aGVyIHRpbWUuCisgICAgICogQHBhcmFtIFRoZSBuZXcgYmFzZSB2YWx1ZSBmb3IgdGhlIHJ1bGUuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgc2V0QmFzZVZhbHVlKGxvbmcgbmV3QmFzZVZhbHVlKSB7CisgICAgICAgIC8vIHNldCB0aGUgYmFzZSB2YWx1ZQorICAgICAgICBiYXNlVmFsdWUgPSBuZXdCYXNlVmFsdWU7CisKKyAgICAgICAgLy8gaWYgdGhpcyBpc24ndCBhIHNwZWNpYWwgcnVsZSwgcmVjYWxjdWxhdGUgdGhlIHJhZGl4IGFuZCBleHBvbmVudAorICAgICAgICAvLyAodGhlIHJhZGl4IGFsd2F5cyBkZWZhdWx0cyB0byAxMDsgaWYgaXQncyBzdXBwb3NlZCB0byBiZSBzb21ldGhpbmcKKyAgICAgICAgLy8gZWxzZSwgaXQncyBjbGVhbmVkIHVwIGJ5IHRoZSBjYWxsZXIgYW5kIHRoZSBleHBvbmVudCBpcworICAgICAgICAvLyByZWNhbGN1bGF0ZWQgYWdhaW4tLSB0aGUgb25seSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhpcyBpcworICAgICAgICAvLyBORlJ1bGUucGFyc2VSdWxlRGVzY3JpcHRvcigpICkKKyAgICAgICAgaWYgKGJhc2VWYWx1ZSA+PSAxKSB7CisgICAgICAgICAgICByYWRpeCA9IDEwOworICAgICAgICAgICAgZXhwb25lbnQgPSBleHBlY3RlZEV4cG9uZW50KCk7CisKKyAgICAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgb24gYSBmdWxseS1jb25zdHJ1Y3RlZCBydWxlIHdob3NlCisgICAgICAgICAgICAvLyBkZXNjcmlwdGlvbiBkaWRuJ3Qgc3BlY2lmeSBhIGJhc2UgdmFsdWUuICBUaGlzIG1lYW5zIGl0CisgICAgICAgICAgICAvLyBoYXMgc3Vic3RpdHV0aW9ucywgYW5kIHNvbWUgc3Vic3RpdHV0aW9ucyBob2xkIG9uIHRvIGNvcGllcworICAgICAgICAgICAgLy8gb2YgdGhlIHJ1bGUncyBkaXZpc29yLiAgRml4IHRoZWlyIGNvcGllcyBvZiB0aGUgZGl2aXNvci4KKyAgICAgICAgICAgIGlmIChzdWIxICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzdWIxLnNldERpdmlzb3IocmFkaXgsIGV4cG9uZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdWIyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzdWIyLnNldERpdmlzb3IocmFkaXgsIGV4cG9uZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGlzIGlzIGEgc3BlY2lhbCBydWxlLCBpdHMgcmFkaXggYW5kIGV4cG9uZW50IGFyZSBiYXNpY2FsbHkKKyAgICAgICAgLy8gaWdub3JlZC4gIFNldCB0aGVtIHRvICJzYWZlIiBkZWZhdWx0IHZhbHVlcworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFkaXggPSAxMDsKKyAgICAgICAgICAgIGV4cG9uZW50ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgcnVsZSdzIGV4cG9uZW50IGJhc2VkIG9uIGl0cyByYWRpeCBhbmQgYmFzZQorICAgICAqIHZhbHVlLiAgVGhpcyB3aWxsIGJlIHRoZSBoaWdoZXN0IHBvd2VyIHRoZSByYWRpeCBjYW4gYmUgcmFpc2VkIHRvCisgICAgICogYW5kIHN0aWxsIHByb2R1Y2UgYSByZXN1bHQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBiYXNlIHZhbHVlLgorICAgICAqLworICAgIHByaXZhdGUgc2hvcnQgZXhwZWN0ZWRFeHBvbmVudCgpIHsKKyAgICAgICAgLy8gc2luY2UgdGhlIGxvZyBvZiAwLCBvciB0aGUgbG9nIGJhc2UgMCBvZiBzb21ldGhpbmcsIGNhdXNlcyBhbgorICAgICAgICAvLyBlcnJvciwgZGVjbGFyZSB0aGUgZXhwb25lbnQgaW4gdGhlc2UgY2FzZXMgdG8gYmUgMCAod2UgYWxzbworICAgICAgICAvLyBkZWFsIHdpdGggdGhlIHNwZWNpYWwtcnVsZSBpZGVudGlmaWVycyBoZXJlKQorICAgICAgICBpZiAocmFkaXggPT0gMCB8fCBiYXNlVmFsdWUgPCAxKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHdlIGdldCByb3VuZGluZyBlcnJvciBpbiBzb21lIGNhc2VzLS0gZm9yIGV4YW1wbGUsIGxvZyAxMDAwIC8gbG9nIDEwCisgICAgICAgIC8vIGdpdmVzIHVzIDEuOTk5OTk5OTk5NiBpbnN0ZWFkIG9mIDIuICBUaGUgZXh0cmEgbG9naWMgaGVyZSBpcyB0byB0YWtlCisgICAgICAgIC8vIHRoYXQgaW50byBhY2NvdW50CisgICAgICAgIHNob3J0IHRlbXBSZXN1bHQgPSAoc2hvcnQpKE1hdGgubG9nKGJhc2VWYWx1ZSkgLyBNYXRoLmxvZyhyYWRpeCkpOworICAgICAgICBpZiAoTWF0aC5wb3cocmFkaXgsIHRlbXBSZXN1bHQgKyAxKSA8PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiAoc2hvcnQpKHRlbXBSZXN1bHQgKyAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wUmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VhcmNoZXMgdGhlIHJ1bGUncyBydWxlIHRleHQgZm9yIGFueSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ3MuCisgICAgICogQHBhcmFtIHN0cmluZ3MgQW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBzZWFyY2ggdGhlIHJ1bGUncyBydWxlCisgICAgICogdGV4dCBmb3IKKyAgICAgKiBAcmV0dXJuIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgbWF0Y2ggaW4gdGhlIHJ1bGUncyBydWxlIHRleHQKKyAgICAgKiAoaS5lLiwgdGhlIGZpcnN0IHN1YnN0cmluZyBpbiB0aGUgcnVsZSdzIHJ1bGUgdGV4dCB0aGF0IG1hdGNoZXMKKyAgICAgKiBfYW55XyBvZiB0aGUgc3RyaW5ncyBpbiAic3RyaW5ncyIpLiAgSWYgbm9uZSBvZiB0aGUgc3RyaW5ncyBpbgorICAgICAqICJzdHJpbmdzIiBpcyBmb3VuZCBpbiB0aGUgcnVsZSdzIHJ1bGUgdGV4dCwgcmV0dXJucyAtMS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBpbmRleE9mQW55KFN0cmluZ1tdIHN0cmluZ3MpIHsKKyAgICAgICAgaW50IHBvczsKKyAgICAgICAgaW50IHJlc3VsdCA9IC0xOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHBvcyA9IHJ1bGVUZXh0LmluZGV4T2Yoc3RyaW5nc1tpXSk7CisgICAgICAgICAgICBpZiAocG9zICE9IC0xICYmIChyZXN1bHQgPT0gLTEgfHwgcG9zIDwgcmVzdWx0KSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBib2lsZXJwbGF0ZQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRlc3RzIHR3byBydWxlcyBmb3IgZXF1YWxpdHkuCisgICAgICogQHBhcmFtIHRoYXQgVGhlIHJ1bGUgdG8gY29tcGFyZSB0aGlzIG9uZSBhZ2FpbnN0CisgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcnVsZXMgYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50CisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCB0aGF0KSB7CisJaWYgKHRoYXQgaW5zdGFuY2VvZiBORlJ1bGUpIHsKKyAgICAgICAgICAgIE5GUnVsZSB0aGF0MiA9IChORlJ1bGUpdGhhdDsKKworICAgICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZSA9PSB0aGF0Mi5iYXNlVmFsdWUKKyAgICAgICAgICAgICAgICAgICAmJiByYWRpeCA9PSB0aGF0Mi5yYWRpeAorICAgICAgICAgICAgICAgICAgICYmIGV4cG9uZW50ID09IHRoYXQyLmV4cG9uZW50CisgICAgICAgICAgICAgICAgICAgJiYgcnVsZVRleHQuZXF1YWxzKHRoYXQyLnJ1bGVUZXh0KQorICAgICAgICAgICAgICAgICAgICYmIHN1YjEuZXF1YWxzKHRoYXQyLnN1YjEpCisgICAgICAgICAgICAgICAgICAgJiYgc3ViMi5lcXVhbHModGhhdDIuc3ViMik7CisJfQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcnVsZS4gIFRoaXMgd29uJ3QKKyAgICAgKiBuZWNlc3NhcmlseSBiZSB0aGUgc2FtZSBhcyB0aGUgZGVzY3JpcHRpb24gdGhhdCB0aGlzIHJ1bGUKKyAgICAgKiB3YXMgY3JlYXRlZCB3aXRoLCBidXQgaXQgd2lsbCBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdC4KKyAgICAgKiBAcmV0dXJuIEEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgcnVsZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgLy8gc3RhcnQgd2l0aCB0aGUgcnVsZSBkZXNjcmlwdG9yLiAgU3BlY2lhbC1jYXNlIHRoZSBzcGVjaWFsIHJ1bGVzCisgICAgICAgIGlmIChiYXNlVmFsdWUgPT0gTkVHQVRJVkVfTlVNQkVSX1JVTEUpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIi14OiAiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiYXNlVmFsdWUgPT0gSU1QUk9QRVJfRlJBQ1RJT05fUlVMRSkgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgieC54OiAiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiYXNlVmFsdWUgPT0gUFJPUEVSX0ZSQUNUSU9OX1JVTEUpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIjAueDogIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzZVZhbHVlID09IE1BU1RFUl9SVUxFKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJ4LjA6ICIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZm9yIGEgbm9ybWFsIHJ1bGUsIHdyaXRlIG91dCBpdHMgYmFzZSB2YWx1ZSwgYW5kIGlmIHRoZSByYWRpeCBpcworICAgICAgICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiAxMCwgd3JpdGUgb3V0IHRoZSByYWRpeCAod2l0aCB0aGUgcHJlY2VkaW5nCisgICAgICAgIC8vIHNsYXNoLCBvZiBjb3Vyc2UpLiAgVGhlbiBjYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGV4cG9uZW50IGFuZCBpZgorICAgICAgICAvLyBpZiBpc24ndCB0aGUgc2FtZSBhcyB0aGUgYWN0dWFsIGV4cG9uZW50LCB3cml0ZSBhbiBhcHByb3ByaWF0ZQorICAgICAgICAvLyBudW1iZXIgb2YgPiBzaWducy4gIEZpbmFsbHksIHRlcm1pbmF0ZSB0aGUgd2hvbGUgdGhpbmcgd2l0aAorICAgICAgICAvLyBhIGNvbG9uLgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoYmFzZVZhbHVlKSk7CisgICAgICAgICAgICBpZiAocmFkaXggIT0gMTApIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmcudmFsdWVPZihyYWRpeCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IG51bUNhcmV0cyA9IGV4cGVjdGVkRXhwb25lbnQoKSAtIGV4cG9uZW50OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DYXJldHM7IGkrKykKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI6ICIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gaWYgdGhlIHJ1bGUgdGV4dCBiZWdpbnMgd2l0aCBhIHNwYWNlLCB3cml0ZSBhbiBhcG9zdHJvcGhlCisgICAgICAgIC8vICh3aGl0ZXNwYWNlIGFmdGVyIHRoZSBydWxlIGRlc2NyaXB0b3IgaXMgaWdub3JlZDsgdGhlCisgICAgICAgIC8vIGFwb3N0cm9waGUgaXMgdXNlZCB0byBtYWtlIHRoZSB3aGl0ZXNwYWNlIHNpZ25pZmljYW50KQorICAgICAgICBpZiAocnVsZVRleHQuc3RhcnRzV2l0aCgiICIpICYmIChzdWIxID09IG51bGwgfHwgc3ViMS5nZXRQb3MoKSAhPSAwKSkgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCciKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG5vdywgd3JpdGUgdGhlIHJ1bGUncyBydWxlIHRleHQsIGluc2VydGluZyBhcHByb3ByaWF0ZQorICAgICAgICAvLyBzdWJzdGl0dXRpb24gdG9rZW5zIGluIHRoZSBhcHByb3ByaWF0ZSBwbGFjZXMKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJ1bGVUZXh0Q29weSA9IG5ldyBTdHJpbmdCdWZmZXIocnVsZVRleHQpOworICAgICAgICBydWxlVGV4dENvcHkuaW5zZXJ0KHN1YjIuZ2V0UG9zKCksIHN1YjIudG9TdHJpbmcoKSk7CisgICAgICAgIHJ1bGVUZXh0Q29weS5pbnNlcnQoc3ViMS5nZXRQb3MoKSwgc3ViMS50b1N0cmluZygpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChydWxlVGV4dENvcHkpOworCisgICAgICAgIC8vIGFuZCBmaW5hbGx5LCB0b3AgdGhlIHdob2xlIHRoaW5nIG9mZiB3aXRoIGEgc2VtaWNvbG9uIGFuZAorICAgICAgICAvLyByZXR1cm4gdGhlIHJlc3VsdAorICAgICAgICByZXN1bHQuYXBwZW5kKCc7Jyk7CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gc2ltcGxlIGFjY2Vzc29ycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHJ1bGUncyBiYXNlIHZhbHVlCisgICAgICogQHJldHVybiBUaGUgcnVsZSdzIGJhc2UgdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgbG9uZyBnZXRCYXNlVmFsdWUoKSB7CisgICAgICAgIHJldHVybiBiYXNlVmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgcnVsZSdzIGRpdmlzb3IgKHRoZSB2YWx1ZSB0aGF0IGNvdHJvbHMgdGhlIGJlaGF2aW9yCisgICAgICogb2YgaXRzIHN1YnN0aXR1dGlvbnMpCisgICAgICogQHJldHVybiBUaGUgcnVsZSdzIGRpdmlzb3IKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIGdldERpdmlzb3IoKSB7CisgICAgICAgIHJldHVybiBNYXRoLnBvdyhyYWRpeCwgZXhwb25lbnQpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBmb3JtYXR0aW5nCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogRm9ybWF0cyB0aGUgbnVtYmVyLCBhbmQgaW5zZXJ0cyB0aGUgcmVzdWx0aW5nIHRleHQgaW50bworICAgICAqIHRvSW5zZXJ0SW50by4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkCisgICAgICogQHBhcmFtIHRvSW5zZXJ0SW50byBUaGUgc3RyaW5nIHdoZXJlIHRoZSByZXN1bHRhbnQgdGV4dCBzaG91bGQKKyAgICAgKiBiZSBpbnNlcnRlZAorICAgICAqIEBwYXJhbSBwb3MgVGhlIHBvc2l0aW9uIGluIHRvSW5zZXJ0SW50byB3aGVyZSB0aGUgcmVzdWx0YW50IHRleHQKKyAgICAgKiBzaG91bGQgYmUgaW5zZXJ0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkb0Zvcm1hdChsb25nIG51bWJlciwgU3RyaW5nQnVmZmVyIHRvSW5zZXJ0SW50bywgaW50IHBvcykgeworICAgICAgICAvLyBmaXJzdCwgaW5zZXJ0IHRoZSBydWxlJ3MgcnVsZSB0ZXh0IGludG8gdG9JbnNlcnRJbnRvIGF0IHRoZQorICAgICAgICAvLyBzcGVjaWZpZWQgcG9zaXRpb24sIHRoZW4gaW5zZXJ0IHRoZSByZXN1bHRzIG9mIHRoZSBzdWJzdGl0dXRpb25zCisgICAgICAgIC8vIGludG8gdGhlIHJpZ2h0IHBsYWNlcyBpbiB0b0luc2VydEludG8gKG5vdGljZSB3ZSBkbyB0aGUKKyAgICAgICAgLy8gc3Vic3RpdHV0aW9ucyBpbiByZXZlcnNlIG9yZGVyIHNvIHRoYXQgdGhlIG9mZnNldHMgZG9uJ3QgZ2V0CisgICAgICAgIC8vIG1lc3NlZCB1cCkKKyAgICAgICAgdG9JbnNlcnRJbnRvLmluc2VydChwb3MsIHJ1bGVUZXh0KTsKKyAgICAgICAgc3ViMi5kb1N1YnN0aXR1dGlvbihudW1iZXIsIHRvSW5zZXJ0SW50bywgcG9zKTsKKyAgICAgICAgc3ViMS5kb1N1YnN0aXR1dGlvbihudW1iZXIsIHRvSW5zZXJ0SW50bywgcG9zKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXRzIHRoZSBudW1iZXIsIGFuZCBpbnNlcnRzIHRoZSByZXN1bHRpbmcgdGV4dCBpbnRvCisgICAgICogdG9JbnNlcnRJbnRvLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAcGFyYW0gdG9JbnNlcnRJbnRvIFRoZSBzdHJpbmcgd2hlcmUgdGhlIHJlc3VsdGFudCB0ZXh0IHNob3VsZAorICAgICAqIGJlIGluc2VydGVkCisgICAgICogQHBhcmFtIHBvcyBUaGUgcG9zaXRpb24gaW4gdG9JbnNlcnRJbnRvIHdoZXJlIHRoZSByZXN1bHRhbnQgdGV4dAorICAgICAqIHNob3VsZCBiZSBpbnNlcnRlZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRvRm9ybWF0KGRvdWJsZSBudW1iZXIsIFN0cmluZ0J1ZmZlciB0b0luc2VydEludG8sIGludCBwb3MpIHsKKyAgICAgICAgLy8gZmlyc3QsIGluc2VydCB0aGUgcnVsZSdzIHJ1bGUgdGV4dCBpbnRvIHRvSW5zZXJ0SW50byBhdCB0aGUKKyAgICAgICAgLy8gc3BlY2lmaWVkIHBvc2l0aW9uLCB0aGVuIGluc2VydCB0aGUgcmVzdWx0cyBvZiB0aGUgc3Vic3RpdHV0aW9ucworICAgICAgICAvLyBpbnRvIHRoZSByaWdodCBwbGFjZXMgaW4gdG9JbnNlcnRJbnRvCisgICAgICAgIC8vIFthZ2Fpbiwgd2UgaGF2ZSB0d28gY29waWVzIG9mIHRoaXMgcm91dGluZSB0aGF0IGRvIHRoZSBzYW1lIHRoaW5nCisgICAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3Qgc2FjcmlmaWNlIHByZWNpc2lvbiBpbiBhIGxvbmcgYnkgY2FzdGluZyBpdAorICAgICAgICAvLyB0byBhIGRvdWJsZV0KKyAgICAgICAgdG9JbnNlcnRJbnRvLmluc2VydChwb3MsIHJ1bGVUZXh0KTsKKyAgICAgICAgc3ViMi5kb1N1YnN0aXR1dGlvbihudW1iZXIsIHRvSW5zZXJ0SW50bywgcG9zKTsKKyAgICAgICAgc3ViMS5kb1N1YnN0aXR1dGlvbihudW1iZXIsIHRvSW5zZXJ0SW50bywgcG9zKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVc2VkIGJ5IHRoZSBvd25pbmcgcnVsZSBzZXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gaW52b2tlIHRoZQorICAgICAqIHJvbGxiYWNrIHJ1bGUgKGkuZS4sIHdoZXRoZXIgdGhpcyBydWxlIG9yIHRoZSBvbmUgdGhhdCBwcmVjZWRlcworICAgICAqIGl0IGluIHRoZSBydWxlIHNldCdzIGxpc3Qgc2hvdWxkIGJlIHVzZWQgdG8gZm9ybWF0IHRoZSBudW1iZXIpCisgICAgICogQHBhcmFtIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkCisgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBydWxlIHNldCBzaG91bGQgdXNlIHRoZSBydWxlIHRoYXQgcHJlY2VkZXMKKyAgICAgKiB0aGlzIG9uZSBpbiBpdHMgbGlzdDsgZmFsc2UgaWYgaXQgc2hvdWxkIHVzZSB0aGlzIHJ1bGUKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBzaG91bGRSb2xsQmFjayhkb3VibGUgbnVtYmVyKSB7CisgICAgICAgIC8vIHdlIHJvbGwgYmFjayBpZiB0aGUgcnVsZSBjb250YWlucyBhIG1vZHVsdXMgc3Vic3RpdHV0aW9uLAorICAgICAgICAvLyB0aGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZCBpcyBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBydWxlJ3MKKyAgICAgICAgLy8gZGl2aXNvciwgYW5kIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZSBpcyBOT1QgYW4gZXZlbiBtdWx0aXBsZQorICAgICAgICAvLyBvZiBpdHMgZGl2aXNvcgorICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgaWYgdGhlIG9yaWdpbmFsIGRlc2NyaXB0aW9uIGhhZAorICAgICAgICAvLyAgICAxMDA6IDw8IGh1bmRyZWRbID4+XTsKKyAgICAgICAgLy8gdGhhdCBleHBhbmRzIGludG8KKyAgICAgICAgLy8gICAgMTAwOiA8PCBodW5kcmVkOworICAgICAgICAvLyAgICAxMDE6IDw8IGh1bmRyZWQgPj47CisgICAgICAgIC8vIGludGVybmFsbHkuICBCdXQgd2hlbiB3ZSdyZSBmb3JtYXR0aW5nIDIwMCwgaWYgd2UgdXNlIHRoZSBydWxlCisgICAgICAgIC8vIGF0IDEwMSwgd2hpY2ggd291bGQgbm9ybWFsbHkgYXBwbHksIHdlIGdldCAidHdvIGh1bmRyZWQgemVybyIuCisgICAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2Ugcm9sbCBiYWNrIGFuZCB1c2UgdGhlIHJ1bGUgYXQgMTAwIGluc3RlYWQuCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvZ2ljIHRoYXQgbWFrZXMgdGhpcyBoYXBwZW46IHRoZSBydWxlIGF0IDEwMSBoYXMKKyAgICAgICAgLy8gYSBtb2R1bHVzIHN1YnN0aXR1dGlvbiwgaXRzIGJhc2UgdmFsdWUgaXNuJ3QgYW4gZXZlbiBtdWx0aXBsZQorICAgICAgICAvLyBvZiAxMDAsIGFuZCB0aGUgdmFsdWUgd2UncmUgdHJ5aW5nIHRvIGZvcm1hdCBfaXNfIGFuIGV2ZW4KKyAgICAgICAgLy8gbXVsdGlwbGUgb2YgMTAwLiAgVGhpcyBpcyBjYWxsZWQgdGhlICJyb2xsYmFjayBydWxlLiIKKyAgICAgICAgaWYgKChzdWIxLmlzTW9kdWx1c1N1YnN0aXR1dGlvbigpKSB8fCAoc3ViMi5pc01vZHVsdXNTdWJzdGl0dXRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVybiAobnVtYmVyICUgTWF0aC5wb3cocmFkaXgsIGV4cG9uZW50KSkgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiYXNlVmFsdWUgJSBNYXRoLnBvdyhyYWRpeCwgZXhwb25lbnQpKSAhPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gcGFyc2luZworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEF0dGVtcHRzIHRvIHBhcnNlIHRoZSBzdHJpbmcgd2l0aCB0aGlzIHJ1bGUuCisgICAgICogQHBhcmFtIHRleHQgVGhlIHN0cmluZyBiZWluZyBwYXJzZWQKKyAgICAgKiBAcGFyYW0gcGFyc2VQb3NpdGlvbiBPbiBlbnRyeSwgdGhlIHZhbHVlIGlzIGlnbm9yZWQgYW5kIGFzc3VtZWQgdG8KKyAgICAgKiBiZSAwLiBPbiBleGl0LCB0aGlzIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0CisgICAgICogY2hhcmFjdGVyIG5vdCBjb25zdW1lZCBieSBtYXRjaGluZyB0aGUgdGV4dCBhZ2FpbnN0IHRoaXMgcnVsZQorICAgICAqIChpZiB0aGlzIHJ1bGUgZG9lc24ndCBtYXRjaCB0aGUgdGV4dCBhdCBhbGwsIHRoZSBwYXJzZSBwb3NpdGlvbgorICAgICAqIGlmIGxlZnQgdW5jaGFuZ2VkIChwcmVzdW1hYmx5IGF0IDApIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucworICAgICAqIG5ldyBMb25nKDApKS4KKyAgICAgKiBAcGFyYW0gaXNGcmFjdGlvblJ1bGUgVHJ1ZSBpZiB0aGlzIHJ1bGUgaXMgY29udGFpbmVkIHdpdGhpbiBhCisgICAgICogZnJhY3Rpb24gcnVsZSBzZXQuICBUaGlzIGlzIG9ubHkgdXNlZCBpZiB0aGUgcnVsZSBoYXMgbm8KKyAgICAgKiBzdWJzdGl0dXRpb25zLgorICAgICAqIEByZXR1cm4gSWYgdGhpcyBydWxlIG1hdGNoZWQgdGhlIHRleHQsIHRoaXMgaXMgdGhlIHJ1bGUncyBiYXNlIHZhbHVlCisgICAgICogY29tYmluZWQgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSByZXN1bHRzIG9mIHBhcnNpbmcgdGhlIHN1YnN0aXR1dGlvbnMuCisgICAgICogSWYgbm90aGluZyBtYXRjaGVkLCB0aGlzIGlzIG5ldyBMb25nKDApIGFuZCB0aGUgcGFyc2UgcG9zaXRpb24gaXMKKyAgICAgKiBsZWZ0IHVuY2hhbmdlZC4gIFRoZSByZXN1bHQgd2lsbCBiZSBhbiBpbnN0YW5jZSBvZiBMb25nIGlmIHRoZQorICAgICAqIHJlc3VsdCBpcyBhbiBpbnRlZ2VyIGFuZCBEb3VibGUgb3RoZXJ3aXNlLiAgVGhlIHJlc3VsdCBpcyBuZXZlciBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBOdW1iZXIgZG9QYXJzZShTdHJpbmcgdGV4dCwgUGFyc2VQb3NpdGlvbiBwYXJzZVBvc2l0aW9uLCBib29sZWFuIGlzRnJhY3Rpb25SdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVwcGVyQm91bmQpIHsKKworICAgICAgICAvLyBpbnRlcm5hbGx5IHdlIG9wZXJhdGUgb24gYSBjb3B5IG9mIHRoZSBzdHJpbmcgYmVpbmcgcGFyc2VkCisgICAgICAgIC8vIChiZWNhdXNlIHdlJ3JlIGdvaW5nIHRvIGNoYW5nZSBpdCkgYW5kIHVzZSBvdXIgb3duIFBhcnNlUG9zaXRpb24KKyAgICAgICAgUGFyc2VQb3NpdGlvbiBwcCA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICBTdHJpbmcgd29ya1RleHQgPSBuZXcgU3RyaW5nKHRleHQpOworCisgICAgICAgIC8vIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZSB0ZXh0IGJlZm9yZSB0aGUgZmlyc3Qgc3Vic3RpdHV0aW9uCisgICAgICAgIC8vIG1hdGNoZXMgdGhlIHRleHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIGJlaW5nCisgICAgICAgIC8vIHBhcnNlZC4gIElmIGl0IGRvZXMsIHN0cmlwIHRoYXQgb2ZmIHRoZSBmcm9udCBvZiB3b3JrVGV4dDsKKyAgICAgICAgLy8gb3RoZXJ3aXNlLCBkdW1wIG91dCB3aXRoIGEgbWlzbWF0Y2gKKyAgICAgICAgd29ya1RleHQgPSBzdHJpcFByZWZpeCh3b3JrVGV4dCwgcnVsZVRleHQuc3Vic3RyaW5nKDAsIHN1YjEuZ2V0UG9zKCkpLCBwcCk7CisgICAgICAgIGludCBwcmVmaXhMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpIC0gd29ya1RleHQubGVuZ3RoKCk7CisKKyAgICAgICAgaWYgKHBwLmdldEluZGV4KCkgPT0gMCAmJiBzdWIxLmdldFBvcygpICE9IDApIHsKKy8vIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBQYXJzZVBvc2l0aW9uIGRvZXNuJ3QgaGF2ZSBlcnJvciBpbmRleCBpbiAxLjEueAorLy8gICAgICAgICAgICAgICAgcGFyc2VQb3NpdGlvbi5zZXRFcnJvckluZGV4KHBwLmdldEVycm9ySW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcoMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyB0aGlzIGlzIHRoZSBmdW4gcGFydC4gIFRoZSBiYXNpYyBndXRzIG9mIHRoZSBydWxlLW1hdGNoaW5nCisgICAgICAgIC8vIGxvZ2ljIGlzIG1hdGNoVG9EZWxpbWl0ZXIoKSwgd2hpY2ggaXMgY2FsbGVkIHR3aWNlLiAgVGhlIGZpcnN0CisgICAgICAgIC8vIHRpbWUgaXQgc2VhcmNoZXMgdGhlIGlucHV0IHN0cmluZyBmb3IgdGhlIHJ1bGUgdGV4dCBCRVRXRUVOCisgICAgICAgIC8vIHRoZSBzdWJzdGl0dXRpb25zIGFuZCB0cmllcyB0byBtYXRjaCB0aGUgaW50ZXJ2ZW5pbmcgdGV4dAorICAgICAgICAvLyBpbiB0aGUgaW5wdXQgc3RyaW5nIHdpdGggdGhlIGZpcnN0IHN1YnN0aXR1dGlvbi4gIElmIHRoYXQKKyAgICAgICAgLy8gc3VjY2VlZHMsIGl0IHRoZW4gY2FsbHMgaXQgYWdhaW4sIHRoaXMgdGltZSB0byBsb29rIGZvciB0aGUKKyAgICAgICAgLy8gcnVsZSB0ZXh0IGFmdGVyIHRoZSBzZWNvbmQgc3Vic3RpdHV0aW9uIGFuZCB0byBtYXRjaCB0aGUKKyAgICAgICAgLy8gaW50ZXJ2ZW5pbmcgaW5wdXQgdGV4dCBhZ2FpbnN0IHRoZSBzZWNvbmQgc3Vic3RpdHV0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyBGb3IgZXhhbXBsZSwgc2F5IHdlIGhhdmUgYSBydWxlIHRoYXQgbG9va3MgbGlrZSB0aGlzOgorICAgICAgICAvLyAgICBmaXJzdCA8PCBtaWRkbGUgPj4gbGFzdDsKKyAgICAgICAgLy8gYW5kIGlucHV0IHRleHQgdGhhdCBsb29rcyBsaWtlIHRoaXM6CisgICAgICAgIC8vICAgIGZpcnN0IG9uZSBtaWRkbGUgdHdvIGxhc3QKKyAgICAgICAgLy8gRmlyc3Qgd2UgdXNlIHN0cmlwUHJlZml4KCkgdG8gbWF0Y2ggImZpcnN0ICIgaW4gYm90aCBwbGFjZXMgYW5kCisgICAgICAgIC8vIHN0cmlwIGl0IG9mZiB0aGUgZnJvbnQsIGxlYXZpbmcKKyAgICAgICAgLy8gICAgb25lIG1pZGRsZSB0d28gbGFzdAorICAgICAgICAvLyBUaGVuIHdlIHVzZSBtYXRjaFRvRGVsaW1pdGVyKCkgdG8gbWF0Y2ggIiBtaWRkbGUgIiBhbmQgdHJ5IHRvCisgICAgICAgIC8vIG1hdGNoICJvbmUiIGFnYWluc3QgYSBzdWJzdGl0dXRpb24uICBJZiBpdCdzIHN1Y2Nlc3NmdWwsIHdlIG5vdworICAgICAgICAvLyBoYXZlCisgICAgICAgIC8vICAgIHR3byBsYXN0CisgICAgICAgIC8vIFdlIHVzZSBtYXRjaFRvRGVsaW1pdGVyKCkgYSBzZWNvbmQgdGltZSB0byBtYXRjaCAiIGxhc3QiIGFuZAorICAgICAgICAvLyB0cnkgdG8gbWF0Y2ggInR3byIgYWdhaW5zdCBhIHN1YnN0aXR1dGlvbi4gIElmICJ0d28iIG1hdGNoZXMKKyAgICAgICAgLy8gdGhlIHN1YnN0aXR1dGlvbiwgd2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgcGFyc2UuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbmNlIGl0J3MgcG9zc2libGUgaW4gbWFueSBjYXNlcyB0byBmaW5kIG11bHRpcGxlIGluc3RhbmNlcworICAgICAgICAvLyBvZiBlYWNoIG9mIHRoZXNlIHBpZWNlcyBvZiBydWxlIHRleHQgaW4gdGhlIGlucHV0IHN0cmluZywKKyAgICAgICAgLy8gd2UgbmVlZCB0byB0cnkgYWxsIHRoZSBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlc2UKKyAgICAgICAgLy8gbG9jYXRpb25zLiAgVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHByZW1hdHVyZWx5IGRlY2xhcmluZyBhIG1pc21hdGNoLAorICAgICAgICAvLyBhbmQgbWFrZXMgc3VyZSB3ZSBtYXRjaCBhcyBtdWNoIGlucHV0IHRleHQgYXMgd2UgY2FuLgorICAgICAgICBpbnQgaGlnaFdhdGVyTWFyayA9IDA7CisgICAgICAgIGRvdWJsZSByZXN1bHQgPSAwOworICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBkb3VibGUgdGVtcEJhc2VWYWx1ZSA9IE1hdGgubWF4KDAsIGJhc2VWYWx1ZSk7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gb3VyIHBhcnRpYWwgcGFyc2UgcmVzdWx0IHN0YXJ0cyBvdXQgYXMgdGhpcyBydWxlJ3MgYmFzZQorICAgICAgICAgICAgLy8gdmFsdWUuICBJZiBpdCBmaW5kcyBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIG1hdGNoVG9EZWxpbWl0ZXIoKQorICAgICAgICAgICAgLy8gd2lsbCBjb21wb3NlIHRoaXMgaW4gc29tZSB3YXkgd2l0aCB3aGF0IGl0IGdldHMgYmFjayBmcm9tCisgICAgICAgICAgICAvLyB0aGUgc3Vic3RpdHV0aW9uLCBnaXZpbmcgdXMgYSBuZXcgcGFydGlhbCBwYXJzZSByZXN1bHQKKyAgICAgICAgICAgIHBwLnNldEluZGV4KDApOworICAgICAgICAgICAgZG91YmxlIHBhcnRpYWxSZXN1bHQgPSBtYXRjaFRvRGVsaW1pdGVyKHdvcmtUZXh0LCBzdGFydCwgdGVtcEJhc2VWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlVGV4dC5zdWJzdHJpbmcoc3ViMS5nZXRQb3MoKSwgc3ViMi5nZXRQb3MoKSksIHBwLCBzdWIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyQm91bmQpLmRvdWJsZVZhbHVlKCk7CisKKyAgICAgICAgICAgIC8vIGlmIHdlIGdvdCBhIHN1Y2Nlc3NmdWwgbWF0Y2ggKG9yIHdlcmUgdHJ5aW5nIHRvIG1hdGNoIGEKKyAgICAgICAgICAgIC8vIG51bGwgc3Vic3RpdHV0aW9uKSwgcHAgaXMgbm93IHBvaW50aW5nIGF0IHRoZSBmaXJzdCB1bm1hdGNoZWQKKyAgICAgICAgICAgIC8vIGNoYXJhY3Rlci4gIFRha2Ugbm90ZSBvZiB0aGF0LCBhbmQgdHJ5IG1hdGNoVG9EZWxpbWl0ZXIoKQorICAgICAgICAgICAgLy8gb24gdGhlIGlucHV0IHRleHQgYWdhaW4KKyAgICAgICAgICAgIGlmIChwcC5nZXRJbmRleCgpICE9IDAgfHwgc3ViMS5pc051bGxTdWJzdGl0dXRpb24oKSkgeworICAgICAgICAgICAgICAgIHN0YXJ0ID0gcHAuZ2V0SW5kZXgoKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyB3b3JrVGV4dDIgPSB3b3JrVGV4dC5zdWJzdHJpbmcocHAuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwcDIgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKworICAgICAgICAgICAgICAgIC8vIHRoZSBzZWNvbmQgbWF0Y2hUb0RlbGltaXRlcigpIHdpbGwgY29tcG9zZSBvdXIgcHJldmlvdXMKKyAgICAgICAgICAgICAgICAvLyBwYXJ0aWFsIHJlc3VsdCB3aXRoIHdoYXRldmVyIGl0IGdldHMgYmFjayBmcm9tIGl0cworICAgICAgICAgICAgICAgIC8vIHN1YnN0aXR1dGlvbiBpZiB0aGVyZSdzIGEgc3VjY2Vzc2Z1bCBtYXRjaCwgZ2l2aW5nIHVzCisgICAgICAgICAgICAgICAgLy8gYSByZWFsIHJlc3VsdAorICAgICAgICAgICAgICAgIHBhcnRpYWxSZXN1bHQgPSBtYXRjaFRvRGVsaW1pdGVyKHdvcmtUZXh0MiwgMCwgcGFydGlhbFJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZVRleHQuc3Vic3RyaW5nKHN1YjIuZ2V0UG9zKCkpLCBwcDIsIHN1YjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyQm91bmQpLmRvdWJsZVZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSBnb3QgYSBzdWNjZXNzZnVsIG1hdGNoIG9uIHRoaXMgc2Vjb25kCisgICAgICAgICAgICAgICAgLy8gbWF0Y2hUb0RlbGltaXRlcigpIGNhbGwsIHVwZGF0ZSB0aGUgaGlnaC13YXRlciBtYXJrCisgICAgICAgICAgICAgICAgLy8gYW5kIHJlc3VsdCAoaWYgbmVjZXNzYXJ5KQorICAgICAgICAgICAgICAgIGlmIChwcDIuZ2V0SW5kZXgoKSAhPSAwIHx8IHN1YjIuaXNOdWxsU3Vic3RpdHV0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeExlbmd0aCArIHBwLmdldEluZGV4KCkgKyBwcDIuZ2V0SW5kZXgoKSA+IGhpZ2hXYXRlck1hcmspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSBwcmVmaXhMZW5ndGggKyBwcC5nZXRJbmRleCgpICsgcHAyLmdldEluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJ0aWFsUmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorLy8gY29tbWVudGVkIG91dCBiZWNhdXNlIFBhcnNlUG9zaXRpb24gZG9lc24ndCBoYXZlIGVycm9yIGluZGV4IGluIDEuMS54CisvLyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1wID0gcHAyLmdldEVycm9ySW5kZXgoKSArIHN1YjEuZ2V0UG9zKCkgKyBwcC5nZXRJbmRleCgpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcD4gcGFyc2VQb3NpdGlvbi5nZXRFcnJvckluZGV4KCkpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0RXJyb3JJbmRleCh0ZW1wKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKy8vIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBQYXJzZVBvc2l0aW9uIGRvZXNuJ3QgaGF2ZSBlcnJvciBpbmRleCBpbiAxLjEueAorLy8gICAgICAgICAgICAgICAgZWxzZSB7CisvLyAgICAgICAgICAgICAgICAgICAgaW50IHRlbXAgPSBzdWIxLmdldFBvcygpICsgcHAuZ2V0RXJyb3JJbmRleCgpOworLy8gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wID4gcGFyc2VQb3NpdGlvbi5nZXRFcnJvckluZGV4KCkpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VQb3NpdGlvbi5zZXRFcnJvckluZGV4KHRlbXApOworLy8gICAgICAgICAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8ga2VlcCB0cnlpbmcgdG8gbWF0Y2ggdGhpbmdzIHVudGlsIHRoZSBvdXRlciBtYXRjaFRvRGVsaW1pdGVyKCkKKyAgICAgICAgLy8gY2FsbCBmYWlscyB0byBtYWtlIGEgbWF0Y2ggKGVhY2ggdGltZSwgaXQgcGlja3MgdXAgd2hlcmUgaXQKKyAgICAgICAgLy8gbGVmdCBvZmYgdGhlIHByZXZpb3VzIHRpbWUpCisgICAgICAgIH0gd2hpbGUgKHN1YjEuZ2V0UG9zKCkgIT0gc3ViMi5nZXRQb3MoKSAmJiBwcC5nZXRJbmRleCgpID4gMCAmJiBwcC5nZXRJbmRleCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCB3b3JrVGV4dC5sZW5ndGgoKSAmJiBwcC5nZXRJbmRleCgpICE9IHN0YXJ0KTsKKworICAgICAgICAvLyB1cGRhdGUgdGhlIGNhbGxlcidzIFBhcnNlUG9zaXRpb24gd2l0aCBvdXIgaGlnaC13YXRlciBtYXJrCisgICAgICAgIC8vIChpLmUuLCBpdCBub3cgcG9pbnRzIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhpcyBmdW5jdGlvbgorICAgICAgICAvLyBkaWRuJ3QgbWF0Y2gtLSB0aGUgUGFyc2VQb3NpdGlvbiBpcyB0aGVyZWZvcmUgdW5jaGFuZ2VkIGlmCisgICAgICAgIC8vIHdlIGRpZG4ndCBtYXRjaCBhbnl0aGluZykKKyAgICAgICAgcGFyc2VQb3NpdGlvbi5zZXRJbmRleChoaWdoV2F0ZXJNYXJrKTsKKy8vIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBQYXJzZVBvc2l0aW9uIGRvZXNuJ3QgaGF2ZSBlcnJvciBpbmRleCBpbiAxLjEueAorLy8gICAgICAgIGlmIChoaWdoV2F0ZXJNYXJrID4gMCkgeworLy8gICAgICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEVycm9ySW5kZXgoMCk7CisvLyAgICAgICAgfQorCisgICAgICAgIC8vIHRoaXMgaXMgYSBoYWNrIGZvciBvbmUgdW51c3VhbCBjb25kaXRpb246IE5vcm1hbGx5LCB3aGV0aGVyIHRoaXMKKyAgICAgICAgLy8gcnVsZSBiZWxvbmcgdG8gYSBmcmFjdGlvbiBydWxlIHNldCBvciBub3QgaXMgaGFuZGxlZCBieSBpdHMKKyAgICAgICAgLy8gc3Vic3RpdHV0aW9ucy4gIEJ1dCBpZiB0aGF0IHJ1bGUgSEFTIE5PIHN1YnN0aXR1dGlvbnMsIHRoZW4KKyAgICAgICAgLy8gd2UgaGF2ZSB0byBhY2NvdW50IGZvciBpdCBoZXJlLiAgQnkgZGVmaW5pdGlvbiwgaWYgdGhlIG1hdGNoaW5nCisgICAgICAgIC8vIHJ1bGUgaW4gYSBmcmFjdGlvbiBydWxlIHNldCBoYXMgbm8gc3Vic3RpdHV0aW9ucywgaXRzIG51bWVyYXRvcgorICAgICAgICAvLyBpcyAxLCBhbmQgc28gdGhlIHJlc3VsdCBpcyB0aGUgcmVjaXByb2NhbCBvZiBpdHMgYmFzZSB2YWx1ZS4KKyAgICAgICAgaWYgKGlzRnJhY3Rpb25SdWxlICYmIGhpZ2hXYXRlck1hcmsgPiAwICYmIHN1YjEuaXNOdWxsU3Vic3RpdHV0aW9uKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IDEgLyByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIExvbmcgaWYgcG9zc2libGUsIG9yIGFzIGEgRG91YmxlCisgICAgICAgIGlmIChyZXN1bHQgPT0gKGxvbmcpcmVzdWx0KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcoKGxvbmcpcmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFyc2UoKSB0byBtYXRjaCB0aGUgdGV4dCBiZWluZyBwYXJzZWQKKyAgICAgKiBhZ2FpbnN0IGEgcG9zc2libGUgcHJlZml4IHN0cmluZy4gIFRoaXMgZnVuY3Rpb24KKyAgICAgKiBtYXRjaGVzIGNoYXJhY3RlcnMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgYmVpbmcgcGFyc2VkCisgICAgICogdG8gY2hhcmFjdGVycyBmcm9tIHRoZSBwcm9zcGVjdGl2ZSBwcmVmaXguICBJZiB0aGV5IG1hdGNoLCBwcCBpcworICAgICAqIHVwZGF0ZWQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBub3QgbWF0Y2hlZCwgYW5kIHRoZSByZXN1bHQgaXMKKyAgICAgKiB0aGUgdW5wYXJzZWQgcGFydCBvZiB0aGUgc3RyaW5nLiAgSWYgdGhleSBkb24ndCBtYXRjaCwgdGhlIHdob2xlCisgICAgICogc3RyaW5nIGlzIHJldHVybmVkLCBhbmQgcHAgaXMgbGVmdCB1bmNoYW5nZWQuCisgICAgICogQHBhcmFtIHRleHQgVGhlIHN0cmluZyBiZWluZyBwYXJzZWQKKyAgICAgKiBAcGFyYW0gcHJlZml4IFRoZSB0ZXh0IHRvIG1hdGNoIGFnYWluc3QKKyAgICAgKiBAcGFyYW0gcHAgT24gZW50cnksIGlnbm9yZWQgYW5kIGFzc3VtZWQgdG8gYmUgMC4gIE9uIGV4aXQsIHBvaW50cworICAgICAqIHRvIHRoZSBmaXJzdCB1bm1hdGNoZWQgY2hhcmFjdGVyIChhc3N1bWluZyB0aGUgd2hvbGUgcHJlZml4IG1hdGNoZWQpLAorICAgICAqIG9yIGlzIHVuY2hhbmdlZCAoaWYgdGhlIHdob2xlIHByZWZpeCBkaWRuJ3QgbWF0Y2gpLgorICAgICAqIEByZXR1cm4gSWYgdGhpbmdzIG1hdGNoLCB0aGlzIGlzIHRoZSB1bnBhcnNlZCBwYXJ0IG9mICJ0ZXh0IjsKKyAgICAgKiBpZiB0aGV5IGRpZG4ndCBtYXRjaCwgdGhpcyBpcyAidGV4dCIuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgc3RyaXBQcmVmaXgoU3RyaW5nIHRleHQsIFN0cmluZyBwcmVmaXgsIFBhcnNlUG9zaXRpb24gcHApIHsKKyAgICAgICAgLy8gaWYgdGhlIHByZWZpeCB0ZXh0IGlzIGVtcHR5LCBkdW1wIG91dCB3aXRob3V0IGRvaW5nIGFueXRoaW5nCisgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHVzZSBwcmVmaXhMZW5ndGgoKSB0byBtYXRjaCB0aGUgYmVnaW5uaW5nIG9mCisgICAgICAgICAgICAvLyAidGV4dCIgYWdhaW5zdCAicHJlZml4Ii4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUKKyAgICAgICAgICAgIC8vIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gInRleHQiIHRoYXQgbWF0Y2hlZCAob3IgMCBpZgorICAgICAgICAgICAgLy8gd2UgZGlkbid0IG1hdGNoIHRoZSB3aG9sZSBwcmVmaXgpCisgICAgICAgICAgICBpbnQgcGZsID0gcHJlZml4TGVuZ3RoKHRleHQsIHByZWZpeCk7CisgICAgICAgICAgICBpZiAocGZsICE9IDApIHsKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSBnb3QgYSBzdWNjZXNzZnVsIG1hdGNoLCB1cGRhdGUgdGhlIHBhcnNlIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgLy8gYW5kIHN0cmlwIHRoZSBwcmVmaXggb2ZmIG9mICJ0ZXh0IgorICAgICAgICAgICAgICAgIHBwLnNldEluZGV4KHBwLmdldEluZGV4KCkgKyBwZmwpOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZyhwZmwpOworCisgICAgICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgc3VjY2Vzc2Z1bCBtYXRjaCwgbGVhdmUgZXZlcnl0aGluZyBhbG9uZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVzZWQgYnkgcGFyc2UoKSB0byBtYXRjaCBhIHN1YnN0aXR1dGlvbiBhbmQgYW55IGZvbGxvd2luZyB0ZXh0LgorICAgICAqICJ0ZXh0IiBpcyBzZWFyY2hlZCBmb3IgaW5zdGFuY2VzIG9mICJkZWxpbWl0ZXIiLiAgRm9yIGVhY2ggaW5zdGFuY2UKKyAgICAgKiBvZiBkZWxpbWl0ZXIsIHRoZSBpbnRlcnZlbmluZyB0ZXh0IGlzIHRlc3RlZCB0byBzZWUgd2hldGhlciBpdAorICAgICAqIG1hdGNoZXMgdGhlIHN1YnN0aXR1dGlvbi4gIFRoZSBsb25nZXN0IG1hdGNoIHdpbnMuCisgICAgICogQHBhcmFtIHRleHQgVGhlIHN0cmluZyBiZWluZyBwYXJzZWQKKyAgICAgKiBAcGFyYW0gc3RhcnRQb3MgVGhlIHBvc2l0aW9uIGluICJ0ZXh0IiB3aGVyZSB3ZSBzaG91bGQgc3RhcnQgbG9va2luZworICAgICAqIGZvciAiZGVsaW1pdGVyIi4KKyAgICAgKiBAcGFyYW0gYmFzZVZhbHVlIEEgcGFydGlhbCBwYXJzZSByZXN1bHQgKG9mdGVuIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZSksCisgICAgICogd2hpY2ggaXMgY29tYmluZWQgd2l0aCB0aGUgcmVzdWx0IGZyb20gbWF0Y2hpbmcgdGhlIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgVGhlIHN0cmluZyB0byBzZWFyY2ggInRleHQiIGZvci4KKyAgICAgKiBAcGFyYW0gcHAgSWdub3JlZCBhbmQgcHJlc3VtZWQgdG8gYmUgMCBvbiBlbnRyeS4gIElmIHRoZXJlJ3MgYSBtYXRjaCwKKyAgICAgKiBvbiBleGl0IHRoaXMgd2lsbCBwb2ludCB0byB0aGUgZmlyc3QgdW5tYXRjaGVkIGNoYXJhY3Rlci4KKyAgICAgKiBAcGFyYW0gc3ViIElmIHdlIGZpbmQgImRlbGltaXRlciIgaW4gInRleHQiLCB0aGlzIHN1YnN0aXR1dGlvbiBpcyB1c2VkCisgICAgICogdG8gbWF0Y2ggdGhlIHRleHQgYmV0d2VlbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgYW5kIHRoZQorICAgICAqIHBvc2l0aW9uIG9mICJkZWxpbWl0ZXIuIiAgKElmICJkZWxpbWl0ZXIiIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4KKyAgICAgKiB0aGlzIGZ1bmN0aW9uIGp1c3QgbWF0Y2hlcyBhZ2FpbnN0IHRoaXMgc3Vic3RpdHV0aW9uIGFuZCB1cGRhdGVzCisgICAgICogZXZlcnl0aGluZyBhY2NvcmRpbmdseS4pCisgICAgICogQHBhcmFtIHVwcGVyQm91bmQgV2hlbiBtYXRjaGluZyB0aGUgc3Vic3RpdHV0aW9uLCBpdCB3aWxsIG9ubHkKKyAgICAgKiBjb25zaWRlciBydWxlcyB3aXRoIGJhc2UgdmFsdWVzIGxvd2VyIHRoYW4gdGhpcyB2YWx1ZS4KKyAgICAgKiBAcmV0dXJuIElmIHRoZXJlJ3MgYSBtYXRjaCwgdGhpcyBpcyB0aGUgcmVzdWx0IG9mIGNvbXBvc2luZworICAgICAqIGJhc2VWYWx1ZSB3aXRoIHRoZSByZXN1bHQgb2YgbWF0Y2hpbmcgdGhlIHN1YnN0aXR1dGlvbi4gIE90aGVyd2lzZSwKKyAgICAgKiB0aGlzIGlzIG5ldyBMb25nKDApLiAgSXQncyBuZXZlciBudWxsLiAgSWYgdGhlIHJlc3VsdCBpcyBhbiBpbnRlZ2VyLAorICAgICAqIHRoaXMgd2lsbCBiZSBhbiBpbnN0YW5jZSBvZiBMb25nOyBvdGhlcndpc2UsIGl0J3MgYW4gaW5zdGFuY2Ugb2YKKyAgICAgKiBEb3VibGUuCisgICAgICovCisgICAgcHJpdmF0ZSBOdW1iZXIgbWF0Y2hUb0RlbGltaXRlcihTdHJpbmcgdGV4dCwgaW50IHN0YXJ0UG9zLCBkb3VibGUgYmFzZVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlbGltaXRlciwgUGFyc2VQb3NpdGlvbiBwcCwgTkZTdWJzdGl0dXRpb24gc3ViLCBkb3VibGUgdXBwZXJCb3VuZCkgeworICAgICAgICAvLyBpZiAiZGVsaW1pdGVyIiBjb250YWlucyByZWFsIChpLmUuLCBub24taWdub3JhYmxlKSB0ZXh0LCBzZWFyY2gKKyAgICAgICAgLy8gaXQgZm9yICJkZWxpbWl0ZXIiIGJlZ2lubmluZyBhdCAic3RhcnQiLiAgSWYgdGhhdCBzdWNjZWVkcywgdGhlbgorICAgICAgICAvLyB1c2UgInN1YiIncyBkb1BhcnNlKCkgbWV0aG9kIHRvIG1hdGNoIHRoZSB0ZXh0IGJlZm9yZSB0aGUKKyAgICAgICAgLy8gaW5zdGFuY2Ugb2YgImRlbGltaXRlciIgd2UganVzdCBmb3VuZC4KKyAgICAgICAgaWYgKCFhbGxJZ25vcmFibGUoZGVsaW1pdGVyKSkgeworICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiB0ZW1wUFAgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgICAgIE51bWJlciB0ZW1wUmVzdWx0OworCisgICAgICAgICAgICAvLyB1c2UgZmluZFRleHQoKSB0byBzZWFyY2ggZm9yICJkZWxpbWl0ZXIiLiAgSXQgcmV0dXJucyBhIHR3by0KKyAgICAgICAgICAgIC8vIGVsZW1lbnQgYXJyYXk6IGVsZW1lbnQgMCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIG1hdGNoLCBhbmQKKyAgICAgICAgICAgIC8vIGVsZW1lbnQgMSBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBtYXRjaGVkCisgICAgICAgICAgICAvLyAiZGVsaW1pdGVyIi4KKyAgICAgICAgICAgIGludFtdIHRlbXAgPSBmaW5kVGV4dCh0ZXh0LCBkZWxpbWl0ZXIsIHN0YXJ0UG9zKTsKKyAgICAgICAgICAgIGludCBkUG9zID0gdGVtcFswXTsKKyAgICAgICAgICAgIGludCBkTGVuID0gdGVtcFsxXTsKKworICAgICAgICAgICAgLy8gaWYgZmluZFRleHQoKSBzdWNjZWVkZWQsIGlzb2xhdGUgdGhlIHRleHQgcHJlY2VkaW5nIHRoZQorICAgICAgICAgICAgLy8gbWF0Y2gsIGFuZCB1c2UgInN1YiIgdG8gbWF0Y2ggdGhhdCB0ZXh0CisgICAgICAgICAgICB3aGlsZSAoZFBvcyA+PSAwKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN1YlRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBkUG9zKTsKKyAgICAgICAgICAgICAgICBpZiAoc3ViVGV4dC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFJlc3VsdCA9IHN1Yi5kb1BhcnNlKHN1YlRleHQsIHRlbXBQUCwgYmFzZVZhbHVlLCB1cHBlckJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmxlbmllbnRQYXJzZUVuYWJsZWQoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN1YnN0aXR1dGlvbiBjb3VsZCBtYXRjaCBhbGwgdGhlIHRleHQgdXAgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgd2UgZm91bmQgImRlbGltaXRlciIsIHRoZW4gdGhpcyBmdW5jdGlvbiBoYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIG1hdGNoLiAgQnVtcCB0aGUgY2FsbGVyJ3MgcGFyc2UgcG9zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgdGV4dAorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IG1hdGNoZXMgImRlbGltaXRlciIsIGFuZCByZXR1cm4gdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAvLyB3ZSBnb3QgZnJvbSBwYXJzaW5nIHRoZSBzdWJzdGl0dXRpb24uCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wUFAuZ2V0SW5kZXgoKSA9PSBkUG9zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcC5zZXRJbmRleChkUG9zICsgZExlbik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorLy8gY29tbWVudGVkIG91dCBiZWNhdXNlIFBhcnNlUG9zaXRpb24gZG9lc24ndCBoYXZlIGVycm9yIGluZGV4IGluIDEuMS54CisvLyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wUFAuZ2V0RXJyb3JJbmRleCgpID4gMCkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAuc2V0RXJyb3JJbmRleCh0ZW1wUFAuZ2V0RXJyb3JJbmRleCgpKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwLnNldEVycm9ySW5kZXgodGVtcFBQLmdldEluZGV4KCkpOworLy8gICAgICAgICAgICAgICAgICAgICAgICB9CisvLyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBtYXRjaCB0aGUgc3Vic3RpdHV0aW9uLCBzZWFyY2ggZm9yIGFub3RoZXIKKyAgICAgICAgICAgICAgICAvLyBjb3B5IG9mICJkZWxpbWl0ZXIiIGluICJ0ZXh0IiBhbmQgcmVwZWF0IHRoZSBsb29wIGlmCisgICAgICAgICAgICAgICAgLy8gd2UgZmluZCBpdAorICAgICAgICAgICAgICAgIHRlbXBQUC5zZXRJbmRleCgwKTsKKyAgICAgICAgICAgICAgICB0ZW1wID0gZmluZFRleHQodGV4dCwgZGVsaW1pdGVyLCBkUG9zICsgZExlbik7CisgICAgICAgICAgICAgICAgZFBvcyA9IHRlbXBbMF07CisgICAgICAgICAgICAgICAgZExlbiA9IHRlbXBbMV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBpZiB3ZSBtYWtlIGl0IGhlcmUsIHRoaXMgd2FzIGFuIHVuc3VjY2Vzc2Z1bCBtYXRjaCwgYW5kIHdlCisgICAgICAgICAgICAvLyBsZWF2ZSBwcCB1bmNoYW5nZWQgYW5kIHJldHVybiAwCisgICAgICAgICAgICBwcC5zZXRJbmRleCgwKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZygwKTsKKworICAgICAgICAvLyBpZiAiZGVsaW1pdGVyIiBpcyBlbXB0eSwgb3IgY29uc2lzdHMgb25seSBvZiBpZ25vcmFibGUgY2hhcmFjdGVycworICAgICAgICAvLyAoaS5lLiwgaXMgc2VtYW50aWNhbGx5IGVtcHR5KSwgdGh3ZSB3ZSBvYnZpb3VzbHkgY2FuJ3Qgc2VhcmNoCisgICAgICAgIC8vIGZvciAiZGVsaW1pdGVyIi4gIEluc3RlYWQsIGp1c3QgdXNlICJzdWIiIHRvIHBhcnNlIGFzIG11Y2ggb2YKKyAgICAgICAgLy8gInRleHQiIGFzIHBvc3NpYmxlLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiB0ZW1wUFAgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgICAgIE51bWJlciByZXN1bHQgPSBuZXcgTG9uZygwKTsKKyAgICAgICAgICAgIE51bWJlciB0ZW1wUmVzdWx0OworCisgICAgICAgICAgICAvLyB0cnkgdG8gbWF0Y2ggdGhlIHdob2xlIHN0cmluZyBhZ2FpbnN0IHRoZSBzdWJzdGl0dXRpb24KKyAgICAgICAgICAgIHRlbXBSZXN1bHQgPSBzdWIuZG9QYXJzZSh0ZXh0LCB0ZW1wUFAsIGJhc2VWYWx1ZSwgdXBwZXJCb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIubGVuaWVudFBhcnNlRW5hYmxlZCgpKTsKKyAgICAgICAgICAgIGlmICh0ZW1wUFAuZ2V0SW5kZXgoKSAhPSAwIHx8IHN1Yi5pc051bGxTdWJzdGl0dXRpb24oKSkgeworICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3MgYSBzdWNjZXNzZnVsIG1hdGNoIChvciBpdCdzIGEgbnVsbAorICAgICAgICAgICAgICAgIC8vIHN1YnN0aXR1dGlvbiksIHVwZGF0ZSBwcCB0byBwb2ludCB0byB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgd2UgZGlkbid0IG1hdGNoLCBhbmQgcGFzcyB0aGUgcmVzdWx0IGZyb20KKyAgICAgICAgICAgICAgICAvLyBzdWIuZG9QYXJzZSgpIG9uIHRocm91Z2ggdG8gdGhlIGNhbGxlcgorICAgICAgICAgICAgICAgIHBwLnNldEluZGV4KHRlbXBQUC5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBpZiAodGVtcFJlc3VsdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorLy8gY29tbWVudGVkIG91dCBiZWNhdXNlIFBhcnNlUG9zaXRpb24gZG9lc24ndCBoYXZlIGVycm9yIGluZGV4IGluIDEuMS54CisvLyAgICAgICAgICAgIGVsc2UgeworLy8gICAgICAgICAgICAgICAgcHAuc2V0RXJyb3JJbmRleCh0ZW1wUFAuZ2V0RXJyb3JJbmRleCgpKTsKKy8vICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBhbmQgaWYgd2UgZ2V0IHRvIGhlcmUsIHRoZW4gbm90aGluZyBtYXRjaGVkLCBzbyB3ZSByZXR1cm4KKyAgICAgICAgICAgIC8vIDAgYW5kIGxlYXZlIHBwIGFsb25lCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVXNlZCBieSBzdHJpcFByZWZpeCgpIHRvIG1hdGNoIGNoYXJhY3RlcnMuICBJZiBsZW5pZW50IHBhcnNlIG1vZGUKKyAgICAgKiBpcyBvZmYsIHRoaXMganVzdCBjYWxscyBzdGFydHNXaXRoKCkuICBJZiBsZW5pZW50IHBhcnNlIG1vZGUgaXMgb24sCisgICAgICogdGhpcyBmdW5jdGlvbiB1c2VzIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcnMgdG8gbWF0Y2ggY2hhcmFjdGVycyBpbgorICAgICAqIHRoZSBzdHJpbmdzIChvbmx5IHByaW1hcnktb3JkZXIgZGlmZmVyZW5jZXMgYXJlIHNpZ25pZmljYW50IGluCisgICAgICogZGV0ZXJtaW5pbmcgd2hldGhlciB0aGVyZSdzIGEgbWF0Y2gpLgorICAgICAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyBiZWluZyB0ZXN0ZWQKKyAgICAgKiBAcGFyYW0gcHJlZml4IFRoZSB0ZXh0IHdlJ3JlIGhvcGluZyB0byBzZWUgYXQgdGhlIGJlZ2lubmluZworICAgICAqIG9mICJzdHIiCisgICAgICogQHJldHVybiBJZiAicHJlZml4IiBpcyBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mICJzdHIiLCB0aGlzCisgICAgICogaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluICJzdHIiIHRoYXQgd2VyZSBtYXRjaGVkICh0aGlzCisgICAgICogaXNuJ3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aCBvZiAicHJlZml4IiB3aGVuIG1hdGNoaW5nCisgICAgICogdGV4dCB3aXRoIGEgY29sbGF0b3IpLiAgSWYgdGhlcmUncyBubyBtYXRjaCwgdGhpcyBpcyAwLgorICAgICAqLworICAgIHByaXZhdGUgaW50IHByZWZpeExlbmd0aChTdHJpbmcgc3RyLCBTdHJpbmcgcHJlZml4KSB7CisgICAgICAgIC8vIGlmIHdlJ3JlIGxvb2tpbmcgZm9yIGFuIGVtcHR5IHByZWZpeCwgaXQgb2J2aW91c2x5IG1hdGNoZXMKKyAgICAgICAgLy8gemVybyBjaGFyYWN0ZXJzLiAgSnVzdCBnbyBhaGVhZCBhbmQgcmV0dXJuIDAuCisgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBnbyB0aHJvdWdoIGFsbCB0aGlzIGdyaWVmIGlmIHdlJ3JlIGluIGxlbmllbnQtcGFyc2UgbW9kZQorICAgICAgICBpZiAoZm9ybWF0dGVyLmxlbmllbnRQYXJzZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8gZ2V0IHRoZSBmb3JtYXR0ZXIncyBjb2xsYXRvciBhbmQgdXNlIGl0IHRvIGNyZWF0ZSB0d28KKyAgICAgICAgICAgIC8vIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9ycywgb25lIG92ZXIgdGhlIHRhcmdldCBzdHJpbmcKKyAgICAgICAgICAgIC8vIGFuZCBhbm90aGVyIG92ZXIgdGhlIHByZWZpeCAocmlnaHQgbm93LCB3ZSdsbCB0aHJvdyBhbgorICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlmIHRoZSBjb2xsYXRvciB3ZSBnZXQgYmFjayBmcm9tIHRoZSBmb3JtYXR0ZXIKKyAgICAgICAgICAgIC8vIGlzbid0IGEgUnVsZUJhc2VkQ29sbGF0b3IsIGJlY2F1c2UgUnVsZUJhc2VkQ29sbGF0b3IgZGVmaW5lcworICAgICAgICAgICAgLy8gdGhlIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvZXIgcHJvdG9jb2wuICBIb3BlZnVsbHksIHRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2hhbmdlIHNvbWVkYXkuKQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFByZXZpb3VzIGNvZGUgd2FzIG1hdGNoaW5nICJmaWZ0eS0iIGFnYWluc3QgIiBmaWZ0eSIgYW5kIGxlYXZpbmcKKyAgICAgICAgICAgIC8vIHRoZSBudW1iZXIgIiBmaWZ0eS03IiB0byBwYXJzZSBhcyA0MyAoNTAgLSA3KS4KKyAgICAgICAgICAgIC8vIEFsc28gaXQgc2VlbXMgdGhhdCBpZiB3ZSBjb25zdW1lIHRoZSBlbnRpcmUgcHJlZml4LCB0aGF0J3Mgb2sgZXZlbgorICAgICAgICAgICAgLy8gaWYgd2UndmUgY29uc3VtZWQgdGhlIGVudGlyZSBzdHJpbmcsIHNvIEkgc3dpdGNoZWQgdGhlIGxvZ2ljIHRvCisgICAgICAgICAgICAvLyByZWZsZWN0IHRoaXMuCisgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciA9IChSdWxlQmFzZWRDb2xsYXRvcilmb3JtYXR0ZXIuZ2V0Q29sbGF0b3IoKTsKKyAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBzdHJJdGVyID0gY29sbGF0b3IuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHN0cik7CisgICAgICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgcHJlZml4SXRlciA9IGNvbGxhdG9yLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihwcmVmaXgpOworCisgICAgICAgICAgICAvLyBtYXRjaCBjb2xsYXRpb24gZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RyaW5ncworICAgICAgICAgICAgaW50IG9TdHIgPSBzdHJJdGVyLm5leHQoKTsKKyAgICAgICAgICAgIGludCBvUHJlZml4ID0gcHJlZml4SXRlci5uZXh0KCk7CisKKyAgICAgICAgICAgIHdoaWxlIChvUHJlZml4ICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgaWdub3JhYmxlIGNoYXJhY3RlcnMgaW4gdGhlIHRhcmdldCBzdHJpbmcKKyAgICAgICAgICAgICAgICB3aGlsZSAoQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvU3RyKSA9PSAwICYmIG9TdHIgIT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgICAgICAgICBvU3RyID0gc3RySXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyIGlnbm9yYWJsZSBjaGFyYWN0ZXJzIGluIHRoZSBwcmVmaXgKKyAgICAgICAgICAgICAgICB3aGlsZSAoQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvUHJlZml4KSA9PSAwICYmIG9QcmVmaXggIT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgICAgICAgICBvUHJlZml4ID0gcHJlZml4SXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgc2tpcHBpbmcgb3ZlciBpZ25vcmFibGVzIGJyb3VnaHQgdG8gdGhlIGVuZCBvZgorICAgICAgICAgICAgICAgIC8vIHRoZSBwcmVmaXgsIHdlIERJRCBtYXRjaDogZHJvcCBvdXQgb2YgdGhlIGxvb3AKKyAgICAgICAgICAgICAgICBpZiAob1ByZWZpeCA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIHNraXBwaW5nIG92ZXIgaWdub3JhYmxlcyBicm91Z2h0IHVzIHRvIHRoZSBlbmQKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgdGFyZ2V0IHN0cmluZywgd2UgZGlkbid0IG1hdGNoIGFuZCByZXR1cm4gMAorICAgICAgICAgICAgICAgIGlmIChvU3RyID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gbWF0Y2ggY29sbGF0aW9uIGVsZW1lbnRzIGZyb20gdGhlIHR3byBzdHJpbmdzCisgICAgICAgICAgICAgICAgLy8gKGNvbnNpZGVyaW5nIG9ubHkgcHJpbWFyeSBkaWZmZXJlbmNlcykuICBJZiB3ZQorICAgICAgICAgICAgICAgIC8vIGdldCBhIG1pc21hdGNoLCBkdW1wIG91dCBhbmQgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBpZiAoQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvU3RyKSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlPcmRlcihvUHJlZml4KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBpbiBlYWNoIHN0cmluZworICAgICAgICAgICAgICAgIC8vIGFuZCBsb29wICh3ZSBkcm9wIG91dCBvZiB0aGUgbG9vcCB3aGVuIHdlIGV4aGF1c3QKKyAgICAgICAgICAgICAgICAvLyBjb2xsYXRpb24gZWxlbWVudHMgaW4gdGhlIHByZWZpeCkKKworICAgICAgICAgICAgICAgIG9TdHIgPSBzdHJJdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICBvUHJlZml4ID0gcHJlZml4SXRlci5uZXh0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHdlIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIGpkayAxLjEgYW55IGxvbmdlcgorICAgICAgICAgICAgaW50IHJlc3VsdCA9IHN0ckl0ZXIuZ2V0T2Zmc2V0KCk7CisgICAgICAgICAgICBpZiAob1N0ciAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAgICAgLS1yZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyBKREsgMS4yLXNwZWNpZmljIEFQSSBjYWxsCisgICAgICAgICAgICAvLyByZXR1cm4gc3RySXRlci5nZXRPZmZzZXQoKTsKKyAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gSkRLIDEuMSBIQUNLICh0YWtlIG91dCBmb3IgMS4yLXNwZWNpZmljIGNvZGUpCisKKyAgICAgICAgICAgIC8vIGlmIHdlIG1ha2UgaXQgdG8gaGVyZSwgd2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgbWF0Y2guICBOb3cgd2UKKyAgICAgICAgICAgIC8vIGhhdmUgdG8gZmluZCBvdXQgSE9XIE1BTlkgY2hhcmFjdGVycyBmcm9tIHRoZSB0YXJnZXQgc3RyaW5nCisgICAgICAgICAgICAvLyBtYXRjaGVkIHRoZSBwcmVmaXggKHRoZXJlIGlzbid0IG5lY2Vzc2FyaWx5IGEgb25lLXRvLW9uZQorICAgICAgICAgICAgLy8gbWFwcGluZyBiZXR3ZWVuIGNvbGxhdGlvbiBlbGVtZW50cyBhbmQgY2hhcmFjdGVycykuCisgICAgICAgICAgICAvLyBJbiBKREsgMS4yLCB0aGVyZSdzIGEgc2ltcGxlIGdldE9mZnNldCgpIGNhbGwgd2UgY2FuIHVzZS4KKyAgICAgICAgICAgIC8vIEluIEpESyAxLjEsIG9uIHRoZSBvdGhlciBoYW5kLCB3ZSBoYXZlIHRvIGdvIHRocm91Z2ggc29tZQorICAgICAgICAgICAgLy8gdWdseSBjb250b3J0aW9ucy4gIEZpcnN0LCB1c2UgdGhlIGNvbGxhdG9yIHRvIGNvbXBhcmUgdGhlCisgICAgICAgICAgICAvLyBzYW1lIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIHByZWZpeCBhbmQgdGFyZ2V0IHN0cmluZy4KKyAgICAgICAgICAgIC8vIElmIHRoZXkncmUgZXF1YWwsIHdlJ3JlIGRvbmUuCisgICAgICAgICAgICBjb2xsYXRvci5zZXRTdHJlbmd0aChDb2xsYXRvci5QUklNQVJZKTsKKyAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoKCkgPj0gcHJlZml4Lmxlbmd0aCgpCisgICAgICAgICAgICAgICAgICAgICYmIGNvbGxhdG9yLmVxdWFscyhzdHIuc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgoKSksIHByZWZpeCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4Lmxlbmd0aCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpZiB0aGV5J3JlIG5vdCBlcXVhbCwgdGhlbiB3ZSBoYXZlIHRvIGNvbXBhcmUgc3VjY2Vzc2l2ZWx5CisgICAgICAgICAgICAvLyBsYXJnZXIgYW5kIGxhcmdlciBzdWJzdHJpbmdzIG9mIHRoZSB0YXJnZXQgc3RyaW5nIHVudGlsIHdlCisgICAgICAgICAgICAvLyBnZXQgdG8gb25lIHRoYXQgbWF0Y2hlcyB0aGUgcHJlZml4LiAgQXQgdGhhdCBwb2ludCwgd2Uga25vdworICAgICAgICAgICAgLy8gaG93IG1hbnkgY2hhcmFjdGVycyBtYXRjaGVkIHRoZSBwcmVmaXgsIGFuZCB3ZSBjYW4gcmV0dXJuLgorICAgICAgICAgICAgaW50IHAgPSAxOworICAgICAgICAgICAgd2hpbGUgKHAgPD0gc3RyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbGxhdG9yLmVxdWFscyhzdHIuc3Vic3RyaW5nKDAsIHApLCBwcmVmaXgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNIT1VMS0QgTkVWRVIgR0VUIEhFUkUhISEKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAqLworCisgICAgICAgIC8vIElmIGxlbmllbnQgcGFyc2luZyBpcyB0dXJuZWQgb2ZmLCBmb3JnZXQgYWxsIHRoYXQgY3JhcCBhYm92ZS4KKyAgICAgICAgLy8gSnVzdCB1c2UgU3RyaW5nLnN0YXJ0c1dpdGgoKSBhbmQgYmUgZG9uZSB3aXRoIGl0LgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHN0ci5zdGFydHNXaXRoKHByZWZpeCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4Lmxlbmd0aCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNlYXJjaGVzIGEgc3RyaW5nIGZvciBhbm90aGVyIHN0cmluZy4gIElmIGxlbmllbnQgcGFyc2luZyBpcyBvZmYsCisgICAgICogdGhpcyBqdXN0IGNhbGxzIGluZGV4T2YoKS4gIElmIGxlbmllbnQgcGFyc2luZyBpcyBvbiwgdGhpcyBmdW5jdGlvbgorICAgICAqIHVzZXMgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIHRvIG1hdGNoIGNoYXJhY3RlcnMsIGFuZCBvbmx5CisgICAgICogcHJpbWFyeS1vcmRlciBkaWZmZXJlbmNlcyBhcmUgc2lnbmlmaWNhbnQgaW4gZGV0ZXJtaW5pbmcgd2hldGhlcgorICAgICAqIHRoZXJlJ3MgYSBtYXRjaC4KKyAgICAgKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gc2VhcmNoCisgICAgICogQHBhcmFtIGtleSBUaGUgc3RyaW5nIHRvIHNlYXJjaCAic3RyIiBmb3IKKyAgICAgKiBAcmV0dXJuIEEgdHdvLWVsZW1lbnQgYXJyYXkgb2YgaW50cy4gIEVsZW1lbnQgMCBpcyB0aGUgcG9zaXRpb24KKyAgICAgKiBvZiB0aGUgbWF0Y2gsIG9yIC0xIGlmIHRoZXJlIHdhcyBubyBtYXRjaC4gIEVsZW1lbnQgMSBpcyB0aGUKKyAgICAgKiBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiAic3RyIiB0aGF0IG1hdGNoZWQgKHdoaWNoIGlzbid0IG5lY2Vzc2FyaWx5CisgICAgICogdGhlIHNhbWUgYXMgdGhlIGxlbmd0aCBvZiAia2V5IikKKyAgICAgKi8KKyAgICBwcml2YXRlIGludFtdIGZpbmRUZXh0KFN0cmluZyBzdHIsIFN0cmluZyBrZXkpIHsKKyAgICAgICAgcmV0dXJuIGZpbmRUZXh0KHN0ciwga2V5LCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZWFyY2hlcyBhIHN0cmluZyBmb3IgYW5vdGhlciBzdHJpbmcuICBJZiBsZW5pZW50IHBhcnNpbmcgaXMgb2ZmLAorICAgICAqIHRoaXMganVzdCBjYWxscyBpbmRleE9mKCkuICBJZiBsZW5pZW50IHBhcnNpbmcgaXMgb24sIHRoaXMgZnVuY3Rpb24KKyAgICAgKiB1c2VzIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciB0byBtYXRjaCBjaGFyYWN0ZXJzLCBhbmQgb25seQorICAgICAqIHByaW1hcnktb3JkZXIgZGlmZmVyZW5jZXMgYXJlIHNpZ25pZmljYW50IGluIGRldGVybWluaW5nIHdoZXRoZXIKKyAgICAgKiB0aGVyZSdzIGEgbWF0Y2guCisgICAgICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIHNlYXJjaAorICAgICAqIEBwYXJhbSBrZXkgVGhlIHN0cmluZyB0byBzZWFyY2ggInN0ciIgZm9yCisgICAgICogQHBhcmFtIHN0YXJ0aW5nQXQgVGhlIGluZGV4IGludG8gInN0ciIgd2hlcmUgdGhlIHNlYXJjaCBpcyB0bworICAgICAqIGJlZ2luCisgICAgICogQHJldHVybiBBIHR3by1lbGVtZW50IGFycmF5IG9mIGludHMuICBFbGVtZW50IDAgaXMgdGhlIHBvc2l0aW9uCisgICAgICogb2YgdGhlIG1hdGNoLCBvciAtMSBpZiB0aGVyZSB3YXMgbm8gbWF0Y2guICBFbGVtZW50IDEgaXMgdGhlCisgICAgICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gInN0ciIgdGhhdCBtYXRjaGVkICh3aGljaCBpc24ndCBuZWNlc3NhcmlseQorICAgICAqIHRoZSBzYW1lIGFzIHRoZSBsZW5ndGggb2YgImtleSIpCisgICAgICovCisgICAgcHJpdmF0ZSBpbnRbXSBmaW5kVGV4dChTdHJpbmcgc3RyLCBTdHJpbmcga2V5LCBpbnQgc3RhcnRpbmdBdCkgeworICAgICAgICAvLyBpZiBsZW5pZW50IHBhcnNpbmcgaXMgdHVybmVkIG9mZiwgdGhpcyBpcyBlYXN5OiBqdXN0IGNhbGwKKyAgICAgICAgLy8gU3RyaW5nLmluZGV4T2YoKSBhbmQgd2UncmUgZG9uZQorICAgICAgICBpZiAoIWZvcm1hdHRlci5sZW5pZW50UGFyc2VFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgaW50W10geyBzdHIuaW5kZXhPZihrZXksIHN0YXJ0aW5nQXQpLCBrZXkubGVuZ3RoKCkgfTsKKworICAgICAgICAvLyBidXQgaWYgbGVuaWVudCBwYXJzaW5nIGlzIHR1cm5lZCBPTiwgd2UndmUgZ290IHNvbWUgd29yaworICAgICAgICAvLyBhaGVhZCBvZiB1cworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyBKREsgMS4xIEhBQ0sgKHRha2Ugb3V0IG9mIDEuMi1zcGVjaWZpYyBjb2RlKQorCisgICAgICAgICAgICAvLyBpbiBKREsgMS4yLCBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgcHJvdmlkZXMgdXMgd2l0aCBhbgorICAgICAgICAgICAgLy8gQVBJIHRvIG1hcCBiZXR3ZWVuIGNoYXJhY3RlciBvZmZzZXRzIGFuZCBjb2xsYXRpb24gZWxlbWVudHMKKyAgICAgICAgICAgIC8vIGFuZCB3ZSBjYW4gZG8gdGhpcyBieSBtYXJjaGluZyB0aHJvdWdoIHRoZSBzdHJpbmcgY29tcGFyaW5nCisgICAgICAgICAgICAvLyBjb2xsYXRpb24gZWxlbWVudHMuICBXZSBjYW4ndCBkbyB0aGF0IGluIEpESyAxLjEuICBJbnN0ZWQsCisgICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGdvIHRocm91Z2ggdGhpcyBob3JyaWJsZSBzbG93IG1lc3M6CisgICAgICAgICAgICBpbnQgcCA9IHN0YXJ0aW5nQXQ7CisgICAgICAgICAgICBpbnQga2V5TGVuID0gMDsKKworICAgICAgICAgICAgLy8gYmFzaWNhbGx5IGp1c3QgaXNvbGF0ZSBzbWFsbGVyIGFuZCBzbWFsbGVyIHN1YnN0cmluZ3Mgb2YKKyAgICAgICAgICAgIC8vIHRoZSB0YXJnZXQgc3RyaW5nIChlYWNoIHJ1bm5pbmcgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLAorICAgICAgICAgICAgLy8gYW5kIHdpdGggdGhlIGZpcnN0IG9uZSBydW5uaW5nIGZyb20gc3RhcnRpbmdBdCB0byB0aGUgZW5kKQorICAgICAgICAgICAgLy8gYW5kIHRoZW4gdXNlIHByZWZpeExlbmd0aCgpIHRvIHNlZSBpZiB0aGUgc2VhcmNoIGtleSBpcyBhdAorICAgICAgICAgICAgLy8gdGhlIGJlZ2lubmluZyBvZiBlYWNoIHN1YnN0cmluZy4gIFRoaXMgaXMgZXhjcnVjaWF0aW5nbHkKKyAgICAgICAgICAgIC8vIHNsb3csIGJ1dCBpdCB3aWxsIGxvY2F0ZSB0aGUga2V5IGFuZCB0ZWxsIHVzZSBob3cgbG9uZyB0aGUKKyAgICAgICAgICAgIC8vIG1hdGNoaW5nIHRleHQgd2FzLgorICAgICAgICAgICAgd2hpbGUgKHAgPCBzdHIubGVuZ3RoKCkgJiYga2V5TGVuID09IDApIHsKKyAgICAgICAgICAgICAgICBrZXlMZW4gPSBwcmVmaXhMZW5ndGgoc3RyLnN1YnN0cmluZyhwKSwga2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoa2V5TGVuICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBpbnRbXSB7IHAsIGtleUxlbiB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBpZiB3ZSBtYWtlIGl0IHRvIGhlcmUsIHdlIGRpZG4ndCBmaW5kIGl0LiAgUmV0dXJuIC0xIGZvciB0aGUKKyAgICAgICAgICAgIC8vIGxvY2F0aW9uLiAgVGhlIGxlbmd0aCBzaG91bGQgYmUgaWdub3JlZCwgYnV0IHNldCBpdCB0byAwLAorICAgICAgICAgICAgLy8gd2hpY2ggc2hvdWxkIGJlICJzYWZlIgorICAgICAgICAgICAgcmV0dXJuIG5ldyBpbnRbXSB7IC0xLCAwIH07CisKKyAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gSkRLIDEuMiB2ZXJzaW9uIG9mIHRoaXMgcm91dGluZQorICAgICAgICAgICAgLy9SdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciA9IChSdWxlQmFzZWRDb2xsYXRvcilmb3JtYXR0ZXIuZ2V0Q29sbGF0b3IoKTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvL0NvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBzdHJJdGVyID0gY29sbGF0b3IuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKHN0cik7CisgICAgICAgICAgICAvL0NvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBrZXlJdGVyID0gY29sbGF0b3IuZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKGtleSk7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy9pbnQga2V5U3RhcnQgPSAtMTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvL3N0ci5zZXRPZmZzZXQoc3RhcnRpbmdBdCk7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy9pbnQgb1N0ciA9IHN0ckl0ZXIubmV4dCgpOworICAgICAgICAgICAgLy9pbnQgb0tleSA9IGtleUl0ZXIubmV4dCgpOworICAgICAgICAgICAgLy93aGlsZSAob0tleSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisgICAgICAgICAgICAvLyAgICB3aGlsZSAob1N0ciAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSICYmCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IucHJpbWFyeU9yZGVyKG9TdHIpID09IDApCisgICAgICAgICAgICAvLyAgICAgICAgb1N0ciA9IHN0ckl0ZXIubmV4dCgpOworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIHdoaWxlIChvS2V5ICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIgJiYKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5wcmltYXJ5T3JkZXIob0tleSkgPT0gMCkKKyAgICAgICAgICAgIC8vICAgICAgICBvS2V5ID0ga2V5SXRlci5uZXh0KCk7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgaWYgKG9TdHIgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgLy8gICAgICAgIHJldHVybiBuZXcgaW50W10geyAtMSwgMCB9OworICAgICAgICAgICAgLy8gICAgfQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIGlmIChvS2V5ID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKyAgICAgICAgICAgIC8vICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vICAgIH0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICBpZiAoQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihvU3RyKSA9PQorICAgICAgICAgICAgLy8gICAgICAgICAgICBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IucHJpbWFyeU9yZGVyKG9LZXkpKSB7CisgICAgICAgICAgICAvLyAgICAgICAga2V5U3RhcnQgPSBzdHJJdGVyLmdldE9mZnNldCgpOworICAgICAgICAgICAgLy8gICAgICAgIG9TdHIgPSBzdHJJdGVyLm5leHQoKTsKKyAgICAgICAgICAgIC8vICAgICAgICBvS2V5ID0ga2V5SXRlci5uZXh0KCk7CisgICAgICAgICAgICAvLyAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gICAgICAgIGlmIChrZXlTdGFydCAhPSAtMSkgeworICAgICAgICAgICAgLy8gICAgICAgICAgICBrZXlTdGFydCA9IC0xOworICAgICAgICAgICAgLy8gICAgICAgICAgICBrZXlJdGVyLnJlc2V0KCk7CisgICAgICAgICAgICAvLyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgb1N0ciA9IHN0ckl0ZXIubmV4dCgpOworICAgICAgICAgICAgLy8gICAgICAgIH0KKyAgICAgICAgICAgIC8vICAgIH0KKyAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vaWYgKG9LZXkgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgLy8gICAgcmV0dXJuIG5ldyBpbnRbXSB7IGtleVN0YXJ0LCBzdHJJdGVyLmdldE9mZnNldCgpIC0ga2V5U3RhcnQgfTsKKyAgICAgICAgICAgIC8vfSBlbHNlIHsKKyAgICAgICAgICAgIC8vICAgIHJldHVybiBuZXcgaW50W10geyAtMSwgMCB9OworICAgICAgICAgICAgLy99CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgYSBzdHJpbmcgY29uc2lzdHMgZW50aXJlbHkgb2YgaWdub3JhYmxlCisgICAgICogY2hhcmFjdGVycy4KKyAgICAgKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gdGVzdC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBlbXB0eSBvZiBjb25zaXN0cyBlbnRpcmVseSBvZgorICAgICAqIGNoYXJhY3RlcnMgdGhhdCB0aGUgbnVtYmVyIGZvcm1hdHRlcidzIGNvbGxhdG9yIHNheXMgYXJlCisgICAgICogaWdub3JhYmxlIGF0IHRoZSBwcmltYXJ5LW9yZGVyIGxldmVsLiAgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBhbGxJZ25vcmFibGUoU3RyaW5nIHN0cikgeworICAgICAgICAvLyBpZiB0aGUgc3RyaW5nIGlzIGVtcHR5LCB3ZSBjYW4ganVzdCByZXR1cm4gdHJ1ZQorICAgICAgICBpZiAoc3RyLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gaWYgbGVuaWVudCBwYXJzaW5nIGlzIHR1cm5lZCBvbiwgd2FsayB0aHJvdWdoIHRoZSBzdHJpbmcgd2l0aAorICAgICAgICAvLyBhIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yIGFuZCBtYWtlIHN1cmUgZWFjaCBjb2xsYXRpb24KKyAgICAgICAgLy8gZWxlbWVudCBpcyAwIChpZ25vcmFibGUpIGF0IHRoZSBwcmltYXJ5IGxldmVsCisgICAgICAgIGlmIChmb3JtYXR0ZXIubGVuaWVudFBhcnNlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciA9IChSdWxlQmFzZWRDb2xsYXRvcikoZm9ybWF0dGVyLmdldENvbGxhdG9yKCkpOworICAgICAgICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ZXIgPSBjb2xsYXRvci5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioc3RyKTsKKworICAgICAgICAgICAgaW50IG8gPSBpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIHdoaWxlIChvICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIKKyAgICAgICAgICAgICAgICAgICAmJiBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IucHJpbWFyeU9yZGVyKG8pID09IDApIHsKKyAgICAgICAgICAgICAgICBvID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbyA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSOworICAgICAgICAvLyBpZiBsZW5pZW50IHBhcnNpbmcgaXMgdHVybmVkIG9mZiwgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcworICAgICAgICAvLyBhbiBpZ25vcmFibGUgY2hhcmFjdGVyOiByZXR1cm4gdHJ1ZSBvbmx5IGlmIHRoZSBzdHJpbmcgaXMgZW1wdHkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L05GUnVsZVNldC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvTkZSdWxlU2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjJmMWU1OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L05GUnVsZVNldC5qYXZhCkBAIC0wLDAgKzEsNzU0IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9ORlJ1bGVTZXQuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wNy8zMSAxNzozNzowOCAkIAorICogJFJldmlzaW9uOiAxLjcgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CisKK2ltcG9ydCBqYXZhLnRleHQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCisvKioKKyAqIEEgY29sbGVjdGlvbiBvZiBydWxlcyB1c2VkIGJ5IGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IHRvIGZvcm1hdCBhbmQKKyAqIHBhcnNlIG51bWJlcnMuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYSBSdWxlU2V0IHRvIHNlbGVjdCBhbgorICogYXBwcm9wcmlhdGUgcnVsZSBmb3IgZm9ybWF0dGluZyBhIHBhcnRpY3VsYXIgbnVtYmVyIGFuZCBkaXNwYXRjaAorICogY29udHJvbCB0byBpdCwgYW5kIHRvIGFyYml0cmF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBydWxlcyB3aGVuIHBhcnNpbmcKKyAqIGEgbnVtYmVyLgorICogJFJDU2ZpbGU6IE5GUnVsZVNldC5qYXZhLHYgJCAkUmV2aXNpb246IDEuNyAkICREYXRlOiAyMDAyLzA3LzMxIDE3OjM3OjA4ICQKKyAqLworZmluYWwgY2xhc3MgTkZSdWxlU2V0IHsKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY29uc3RhbnRzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUHV0cyBhIGNvcHlyaWdodCBpbiB0aGUgLmNsYXNzIGZpbGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0Tm90aWNlCisgICAgICAgID0gIkNvcHlyaWdodCBcdTAwYTkxOTk3LTE5OTggSUJNIENvcnAuICBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZGF0YSBtZW1iZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogVGhlIHJ1bGUgc2V0J3MgbmFtZQorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcnVsZSBzZXQncyByZWd1bGFyIHJ1bGVzCisgICAgICovCisgICAgcHJpdmF0ZSBORlJ1bGVbXSBydWxlczsKKworICAgIC8qKgorICAgICAqIFRoZSBydWxlIHNldCdzIG5lZ2F0aXZlLW51bWJlciBydWxlCisgICAgICovCisgICAgcHJpdmF0ZSBORlJ1bGUgbmVnYXRpdmVOdW1iZXJSdWxlID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoZSBydWxlIHNldCdzIGZyYWN0aW9uIHJ1bGVzOiBlbGVtZW50IDAgaXMgdGhlIHByb3BlciBmcmFjdGlvbgorICAgICAqICgwLngpIHJ1bGUsIGVsZW1lbnQgMSBpcyB0aGUgaW1wcm9wZXIgZnJhY3Rpb24gKHgueCkgcnVsZSwgYW5kCisgICAgICogZWxlbWVudCAyIGlzIHRoZSBtYXN0ZXIgKHguMCkgcnVsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIE5GUnVsZVtdIGZyYWN0aW9uUnVsZXMgPSBuZXcgTkZSdWxlWzNdOworCisgICAgLyoqCisgICAgICogVHJ1ZSBpZiB0aGUgcnVsZSBzZXQgaXMgYSBmcmFjdGlvbiBydWxlIHNldC4gIEEgZnJhY3Rpb24gcnVsZSBzZXQKKyAgICAgKiBpcyBhIHJ1bGUgc2V0IHRoYXQgaXMgdXNlZCB0byBmb3JtYXQgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiBhCisgICAgICogbnVtYmVyLiAgSXQgaXMgY2FsbGVkIGZyb20gYSA+PiBzdWJzdGl0dXRpb24gaW4gYW5vdGhlciBydWxlIHNldCdzCisgICAgICogZnJhY3Rpb24gcnVsZSwgYW5kIGlzIG9ubHkgY2FsbGVkIHVwb24gdG8gZm9ybWF0IHZhbHVlcyBiZXR3ZWVuCisgICAgICogMCBhbmQgMS4gIEEgZnJhY3Rpb24gcnVsZSBzZXQgaGFzIGRpZmZlcmVudCBydWxlLXNlbGVjdGlvbgorICAgICAqIGJlaGF2aW9yIHRoYW4gYSByZWd1bGFyIHJ1bGUgc2V0LgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc0ZyYWN0aW9uUnVsZVNldCA9IGZhbHNlOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0cnVjdGlvbgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qCisgICAgICogQ29uc3RydWN0cyBhIHJ1bGUgc2V0LgorICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbnMgQW4gYXJyYXkgb2YgU3RyaW5ncyByZXByZXNlbnRpbmcgcnVsZSBzZXQKKyAgICAgKiBkZXNjcmlwdGlvbnMuICBPbiBleGl0LCB0aGlzIHJ1bGUgc2V0J3MgZW50cnkgaW4gdGhlIGFycmF5IHdpbGwKKyAgICAgKiBoYXZlIGJlZW4gc3RyaXBwZWQgb2YgaXRzIHJ1bGUgc2V0IG5hbWUgYW5kIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW50byAiZGVzY3JpcHRpb25zIiBvZiB0aGUgZGVzY3JpcHRpb24KKyAgICAgKiBmb3IgdGhlIHJ1bGUgdG8gYmUgY29uc3RydWN0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgTkZSdWxlU2V0KFN0cmluZ1tdIGRlc2NyaXB0aW9ucywgaW50IGluZGV4KSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25zW2luZGV4XTsKKworICAgICAgICAvLyBpZiB0aGUgZGVzY3JpcHRpb24gYmVnaW5zIHdpdGggYSBydWxlIHNldCBuYW1lICh0aGUgcnVsZSBzZXQKKyAgICAgICAgLy8gbmFtZSBjYW4gYmUgb21pdHRlZCBpbiBmb3JtYXR0ZXIgZGVzY3JpcHRpb25zIHRoYXQgY29uc2lzdAorICAgICAgICAvLyBvZiBvbmx5IG9uZSBydWxlIHNldCksIGNvcHkgaXQgb3V0IGludG8gb3VyICJuYW1lIiBtZW1iZXIKKyAgICAgICAgLy8gYW5kIGRlbGV0ZSBpdCBmcm9tIHRoZSBkZXNjcmlwdGlvbgorICAgICAgICBpZiAoZGVzY3JpcHRpb24uY2hhckF0KDApID09ICclJykgeworICAgICAgICAgICAgaW50IHBvcyA9IGRlc2NyaXB0aW9uLmluZGV4T2YoJzonKTsKKyAgICAgICAgICAgIGlmIChwb3MgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSdWxlIHNldCBuYW1lIGRvZXNuJ3QgZW5kIGluIGNvbG9uIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5hbWUgPSBkZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgcG9zKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgZGVzY3JpcHRpb24ubGVuZ3RoKCkgJiYgVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoZGVzY3JpcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJBdCgrK3BvcykpKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uc3Vic3RyaW5nKHBvcyk7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zW2luZGV4XSA9IGRlc2NyaXB0aW9uOworICAgICAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHRoZSBkZXNjcmlwdGlvbiBkb2Vzbid0IGJlZ2luIHdpdGggYSBydWxlIHNldCBuYW1lLCBpdHMKKyAgICAgICAgLy8gbmFtZSBpcyAiJWRlZmF1bHQiCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuYW1lID0gIiVkZWZhdWx0IjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJFbXB0eSBydWxlIHNldCBkZXNjcmlwdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gYWxsIG9mIHRoZSBvdGhlciBtZW1iZXJzIG9mIE5GUnVsZVNldCBhcmUgaW5pdGlhbGl6ZWQKKyAgICAgICAgLy8gYnkgcGFyc2VSdWxlcygpCisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IHRoZSBzdWJvcmRpbmF0ZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIG9iamVjdC4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGNvbnN0cnVjdG9yCisgICAgICogYWZ0ZXIgYWxsIHRoZSBydWxlIHNldHMgaGF2ZSBiZWVuIGNyZWF0ZWQgdG8gYWN0dWFsbHkgcGFyc2UKKyAgICAgKiB0aGUgZGVzY3JpcHRpb24gYW5kIGJ1aWxkIHJ1bGVzIGZyb20gaXQuICBTaW5jZSBhbnkgcnVsZSBzZXQKKyAgICAgKiBjYW4gcmVmZXIgdG8gYW55IG90aGVyIHJ1bGUgc2V0LCB3ZSBoYXZlIHRvIGhhdmUgY3JlYXRlZCBhbGwgb2YKKyAgICAgKiB0aGVtIGJlZm9yZSB3ZSBjYW4gY3JlYXRlIGFueXRoaW5nIGVsc2UuCisgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoaXMgcnVsZSBzZXQKKyAgICAgKiBAcGFyYW0gb3duZXIgVGhlIGZvcm1hdHRlciB0aGF0IG93bnMgdGhpcyBydWxlIHNldAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHBhcnNlUnVsZXMoU3RyaW5nICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IG93bmVyKSB7CisgICAgICAgIC8vIHN0YXJ0IGJ5IGNyZWF0aW5nIGEgVmVjdG9yIHdob3NlIGVsZW1lbnRzIGFyZSBTdHJpbmdzIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gdGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgcnVsZXMgKG9uZSBydWxlIHBlciBlbGVtZW50KS4gIFRoZSBydWxlcworICAgICAgICAvLyBhcmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMgKHRoZXJlJ3Mgbm8gZXNjYXBlIGZhY2lsaXR5OiBBTEwKKyAgICAgICAgLy8gc2VtaWNvbG9ucyBhcmUgcnVsZSBkZWxpbWl0ZXJzKQorICAgICAgICBWZWN0b3IgcnVsZURlc2NyaXB0aW9ucyA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICBpbnQgb2xkUCA9IDA7CisgICAgICAgIGludCBwID0gZGVzY3JpcHRpb24uaW5kZXhPZignOycpOworICAgICAgICB3aGlsZSAob2xkUCAhPSAtMSkgeworICAgICAgICAgICAgaWYgKHAgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBydWxlRGVzY3JpcHRpb25zLmFkZEVsZW1lbnQoZGVzY3JpcHRpb24uc3Vic3RyaW5nKG9sZFAsIHApKTsKKyAgICAgICAgICAgICAgICBvbGRQID0gcCArIDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChvbGRQIDwgZGVzY3JpcHRpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcnVsZURlc2NyaXB0aW9ucy5hZGRFbGVtZW50KGRlc2NyaXB0aW9uLnN1YnN0cmluZyhvbGRQKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9sZFAgPSBwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcCA9IGRlc2NyaXB0aW9uLmluZGV4T2YoJzsnLCBwICsgMSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBub3cgZ28gYmFjayB0aHJvdWdoIGFuZCBidWlsZCBhIHZlY3RvciBvZiB0aGUgcnVsZXMgdGhlbXNlbHZlcworICAgICAgICAvLyAodGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGVzY3JpcHRpb24gbGlzdCBpc24ndCBuZWNlc3NhcmlseQorICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIHJ1bGVzLS0gc29tZSBkZXNjcmlwdGlvbnMgbWF5IGV4cGVuZCBpbnRvIHR3byBydWxlcykKKyAgICAgICAgVmVjdG9yIHRlbXBSdWxlcyA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBydWxlIGJlZm9yZSB0aGUgb25lIHdlJ3JlIGN1cnJlbnRseSB3b3JraW5nCisgICAgICAgIC8vIG9uIHNvbGVseSB0byBzdXBwb3J0ID4+PiBzdWJzdGl0dXRpb25zCisgICAgICAgIE5GUnVsZSBwcmVkZWNlc3NvciA9IG51bGw7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVsZURlc2NyaXB0aW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgLy8gbWFrZVJ1bGVzIChhIGZhY3RvcnkgbWV0aG9kIG9uIE5GUnVsZSkgd2lsbCByZXR1cm4gZWl0aGVyCisgICAgICAgICAgICAvLyBhIHNpbmdsZSBydWxlIG9yIGFuIGFycmF5IG9mIHJ1bGVzLiAgRWl0aGVyIHdheSwgYWRkIHRoZW0KKyAgICAgICAgICAgIC8vIHRvIG91ciBydWxlIHZlY3RvcgorICAgICAgICAgICAgT2JqZWN0IHRlbXAgPSBORlJ1bGUubWFrZVJ1bGVzKChTdHJpbmcpcnVsZURlc2NyaXB0aW9ucy5lbGVtZW50QXQoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgcHJlZGVjZXNzb3IsIG93bmVyKTsKKworICAgICAgICAgICAgaWYgKHRlbXAgaW5zdGFuY2VvZiBORlJ1bGUpIHsKKyAgICAgICAgICAgICAgICB0ZW1wUnVsZXMuYWRkRWxlbWVudCh0ZW1wKTsKKyAgICAgICAgICAgICAgICBwcmVkZWNlc3NvciA9IChORlJ1bGUpdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRlbXAgaW5zdGFuY2VvZiBORlJ1bGVbXSkgeworICAgICAgICAgICAgICAgIE5GUnVsZVtdIHJ1bGVzVG9BZGQgPSAoTkZSdWxlW10pdGVtcDsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcnVsZXNUb0FkZC5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wUnVsZXMuYWRkRWxlbWVudChydWxlc1RvQWRkW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3IgPSBydWxlc1RvQWRkW2pdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBub3cgd2UgY2FuIGJhZyB0aGUgZGVzY3JpcHRpb24gbGlzdAorICAgICAgICBydWxlRGVzY3JpcHRpb25zID0gbnVsbDsKKworICAgICAgICAvLyBmb3IgcnVsZXMgdGhhdCBkaWRuJ3Qgc3BlY2lmeSBhIGJhc2UgdmFsdWUsIHRoZWlyIGJhc2UgdmFsdWVzCisgICAgICAgIC8vIHdlcmUgaW5pdGlhbGl6ZWQgdG8gMC4gIE1ha2UgYW5vdGhlciBwYXNzIHRocm91Z2ggdGhlIGxpc3QgYW5kCisgICAgICAgIC8vIHNldCBhbGwgdGhvc2UgcnVsZXMnIGJhc2UgdmFsdWVzLiAgV2UgYWxzbyByZW1vdmUgYW55IHNwZWNpYWwKKyAgICAgICAgLy8gcnVsZXMgZnJvbSB0aGUgbGlzdCBhbmQgcHV0IHRoZW0gaW50byB0aGVpciBvd24gbWVtYmVyIHZhcmlhYmxlcworICAgICAgICBsb25nIGRlZmF1bHRCYXNlVmFsdWUgPSAwOworCisgICAgICAgIC8vICh0aGlzIGlzbid0IGEgZm9yIGxvb3AgYmVjYXVzZSB3ZSBtaWdodCBiZSBkZWxldGluZyBpdGVtcyBmcm9tCisgICAgICAgIC8vIHRoZSB2ZWN0b3ItLSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGluY3JlbWVudCBpIHdoZW4KKyAgICAgICAgLy8gd2UgX2RpZG4ndF8gZGVsZXRlIGF5dGhpbmcgZnJvbSB0aGUgdmVjdG9yKQorICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgdGVtcFJ1bGVzLnNpemUoKSkgeworICAgICAgICAgICAgTkZSdWxlIHJ1bGUgPSAoTkZSdWxlKXRlbXBSdWxlcy5lbGVtZW50QXQoaSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoKGludClydWxlLmdldEJhc2VWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHJ1bGUncyBiYXNlIHZhbHVlIGlzIDAsIGZpbGwgaW4gYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgLy8gYmFzZSB2YWx1ZSAodGhpcyB3aWxsIGJlIDEgcGx1cyB0aGUgcHJlY2VkaW5nCisgICAgICAgICAgICAgICAgLy8gcnVsZSdzIGJhc2UgdmFsdWUgZm9yIHJlZ3VsYXIgcnVsZSBzZXRzLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgLy8gc2FtZSBhcyB0aGUgcHJlY2VkaW5nIHJ1bGUncyBiYXNlIHZhbHVlIGluIGZyYWN0aW9uCisgICAgICAgICAgICAgICAgLy8gcnVsZSBzZXRzKQorICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgcnVsZS5zZXRCYXNlVmFsdWUoZGVmYXVsdEJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNGcmFjdGlvblJ1bGVTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrZGVmYXVsdEJhc2VWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gaWYgaXQncyB0aGUgbmVnYXRpdmUtbnVtYmVyIHJ1bGUsIGNvcHkgaXQgaW50byBpdHMgb3duCisgICAgICAgICAgICAgICAgLy8gZGF0YSBtZW1iZXIgYW5kIGRlbGV0ZSBpdCBmcm9tIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgY2FzZSBORlJ1bGUuTkVHQVRJVkVfTlVNQkVSX1JVTEU6CisgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlTnVtYmVyUnVsZSA9IHJ1bGU7CisgICAgICAgICAgICAgICAgICAgIHRlbXBSdWxlcy5yZW1vdmVFbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gaWYgaXQncyB0aGUgaW1wcm9wZXIgZnJhY3Rpb24gcnVsZSwgY29weSBpdCBpbnRvIHRoZQorICAgICAgICAgICAgICAgIC8vIGNvcnJlY3QgZWxlbWVudCBvZiBmcmFjdGlvblJ1bGVzCisgICAgICAgICAgICAgICAgY2FzZSBORlJ1bGUuSU1QUk9QRVJfRlJBQ1RJT05fUlVMRToKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SdWxlc1swXSA9IHJ1bGU7CisgICAgICAgICAgICAgICAgICAgIHRlbXBSdWxlcy5yZW1vdmVFbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gaWYgaXQncyB0aGUgcHJvcGVyIGZyYWN0aW9uIHJ1bGUsIGNvcHkgaXQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAvLyBjb3JyZWN0IGVsZW1lbnQgb2YgZnJhY3Rpb25SdWxlcworICAgICAgICAgICAgICAgIGNhc2UgTkZSdWxlLlBST1BFUl9GUkFDVElPTl9SVUxFOgorICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJ1bGVzWzFdID0gcnVsZTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFJ1bGVzLnJlbW92ZUVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIHRoZSBtYXN0ZXIgcnVsZSwgY29weSBpdCBpbnRvIHRoZQorICAgICAgICAgICAgICAgIC8vIGNvcnJlY3QgZWxlbWVudCBvZiBmcmFjdGlvblJ1bGVzCisgICAgICAgICAgICAgICAgY2FzZSBORlJ1bGUuTUFTVEVSX1JVTEU6CisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUnVsZXNbMl0gPSBydWxlOworICAgICAgICAgICAgICAgICAgICB0ZW1wUnVsZXMucmVtb3ZlRWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSByZWd1bGFyIHJ1bGUgdGhhdCBhbHJlYWR5IGtub3dzIGl0cyBiYXNlIHZhbHVlLAorICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcnVsZXMgYXJlIGluIG9yZGVyLCBhbmQgdXBkYXRlCisgICAgICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgYmFzZSB2YWx1ZSBmb3IgdGhlIG5leHQgcnVsZQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmdldEJhc2VWYWx1ZSgpIDwgZGVmYXVsdEJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUnVsZXMgYXJlIG5vdCBpbiBvcmRlciIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRCYXNlVmFsdWUgPSBydWxlLmdldEJhc2VWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRnJhY3Rpb25SdWxlU2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK2RlZmF1bHRCYXNlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGZpbmFsbHksIHdlIGNhbiBjb3B5IHRoZSBydWxlcyBmcm9tIHRoZSB2ZWN0b3IgaW50byBhCisgICAgICAgIC8vIGZpeGVkLWxlbmd0aCBhcnJheQorICAgICAgICBydWxlcyA9IG5ldyBORlJ1bGVbdGVtcFJ1bGVzLnNpemUoKV07CisgICAgICAgIHRlbXBSdWxlcy5jb3B5SW50bygoT2JqZWN0W10pcnVsZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZsYWdzIHRoaXMgcnVsZSBzZXQgYXMgYSBmcmFjdGlvbiBydWxlIHNldC4gIFRoaXMgZnVuY3Rpb24gaXMKKyAgICAgKiBjYWxsZWQgZHVyaW5nIHRoZSBjb25zdHJ1Y3Rpb24gcHJvY2VzcyBvbmNlIHdlIGtub3cgdGhpcyBydWxlCisgICAgICogc2V0IGlzIGEgZnJhY3Rpb24gcnVsZSBzZXQuICBXZSBkb24ndCBrbm93IGEgcnVsZSBzZXQgaXMgYQorICAgICAqIGZyYWN0aW9uIHJ1bGUgc2V0IHVudGlsIHdlIHNlZSBpdCB1c2VkIHNvbWV3aGVyZS4gIFRoaXMgZnVuY3Rpb24KKyAgICAgKiBpcyBub3QgYWQgbXVzdCBub3QgYmUgY2FsbGVkIGF0IGFueSB0aW1lIG90aGVyIHRoYW4gZHVyaW5nCisgICAgICogY29uc3RydWN0aW9uIG9mIGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1ha2VJbnRvRnJhY3Rpb25SdWxlU2V0KCkgeworICAgICAgICBpc0ZyYWN0aW9uUnVsZVNldCA9IHRydWU7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGJvaWxlcnBsYXRlCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdHdvIHJ1bGUgc2V0cyBmb3IgZXF1YWxpdHkuCisgICAgICogQHBhcmFtIHRoYXQgVGhlIG90aGVyIHJ1bGUgc2V0CisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0d28gcnVsZSBzZXRzIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IHRoYXQpIHsKKyAgICAgICAgLy8gaWYgZGlmZmVyZW50IGNsYXNzZXMsIHRoZXkncmUgbm90IGVxdWFsCisgICAgICAgIGlmICghKHRoYXQgaW5zdGFuY2VvZiBORlJ1bGVTZXQpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGNvbXBhcmUgdGhlIG1lbWJlcnMgb25lIGJ5IG9uZS4uLgorICAgICAgICAgICAgTkZSdWxlU2V0IHRoYXQyID0gKE5GUnVsZVNldCl0aGF0OworCisgICAgICAgICAgICBpZiAoIW5hbWUuZXF1YWxzKHRoYXQyLm5hbWUpCisJCXx8ICFVdGlsaXR5Lm9iamVjdEVxdWFscyhuZWdhdGl2ZU51bWJlclJ1bGUsIHRoYXQyLm5lZ2F0aXZlTnVtYmVyUnVsZSkKKwkJfHwgIVV0aWxpdHkub2JqZWN0RXF1YWxzKGZyYWN0aW9uUnVsZXNbMF0sIHRoYXQyLmZyYWN0aW9uUnVsZXNbMF0pCisJCXx8ICFVdGlsaXR5Lm9iamVjdEVxdWFscyhmcmFjdGlvblJ1bGVzWzFdLCB0aGF0Mi5mcmFjdGlvblJ1bGVzWzFdKQorCQl8fCAhVXRpbGl0eS5vYmplY3RFcXVhbHMoZnJhY3Rpb25SdWxlc1syXSwgdGhhdDIuZnJhY3Rpb25SdWxlc1syXSkKKwkJfHwgcnVsZXMubGVuZ3RoICE9IHRoYXQyLnJ1bGVzLmxlbmd0aAorICAgICAgICAgICAgICAgIHx8IGlzRnJhY3Rpb25SdWxlU2V0ICE9IHRoYXQyLmlzRnJhY3Rpb25SdWxlU2V0KSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIC4uLnRoZW4gY29tcGFyZSB0aGUgcnVsZSBsaXN0cy4uLgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghcnVsZXNbaV0uZXF1YWxzKHRoYXQyLnJ1bGVzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyAuLi5hbmQgaWYgd2UgbWFrZSBpdCBoZXJlLCB0bmV5J3JlIGVxdWFsCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogQnVpbGRzIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhIHJ1bGUgc2V0LgorICAgICAqIEByZXR1cm4gQSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgcnVsZSBzZXQuICBUaGlzIHdvbid0CisgICAgICogbmVjZXNzYXJpbHkgYmUgdGhlIHNhbWUgZGVzY3JpcHRpb24gdGhhdCB0aGUgcnVsZSBzZXQgd2FzCisgICAgICogY29uc3RydWN0ZWQgd2l0aCwgYnV0IGl0IHdpbGwgcHJvZHVjZSB0aGUgc2FtZSByZXN1bHRzLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgLy8gdGhlIHJ1bGUgc2V0IG5hbWUgZ29lcyBmaXJzdC4uLgorICAgICAgICByZXN1bHQuYXBwZW5kKG5hbWUgKyAiOlxuIik7CisKKyAgICAgICAgLy8gZm9sbG93ZWQgYnkgdGhlIHJlZ3VsYXIgcnVsZXMuLi4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAgICIgKyBydWxlc1tpXS50b1N0cmluZygpICsgIlxuIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBmb2xsb3dlZCBieSB0aGUgc3BlY2lhbCBydWxlcyAoaWYgdGhleSBleGlzdCkKKyAgICAgICAgaWYgKG5lZ2F0aXZlTnVtYmVyUnVsZSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIgICAgIiArIG5lZ2F0aXZlTnVtYmVyUnVsZS50b1N0cmluZygpICsgIlxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZyYWN0aW9uUnVsZXNbMF0gIT0gbnVsbCkgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAgICIgKyBmcmFjdGlvblJ1bGVzWzBdLnRvU3RyaW5nKCkgKyAiXG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhY3Rpb25SdWxlc1sxXSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIgICAgIiArIGZyYWN0aW9uUnVsZXNbMV0udG9TdHJpbmcoKSArICJcbiIpOworICAgICAgICB9CisgICAgICAgIGlmIChmcmFjdGlvblJ1bGVzWzJdICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgICAiICsgZnJhY3Rpb25SdWxlc1syXS50b1N0cmluZygpICsgIlxuIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHNpbXBsZSBhY2Nlc3NvcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBTYXlzIHdoZXRoZXIgdGhpcyBydWxlIHNldCBpcyBhIGZyYWN0aW9uIHJ1bGUgc2V0LgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHJ1bGUgaXMgYSBmcmFjdGlvbiBydWxlIHNldDsgZmFsc2UgaWYgaXQgaXNuJ3QKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0ZyYWN0aW9uU2V0KCkgeworICAgICAgICByZXR1cm4gaXNGcmFjdGlvblJ1bGVTZXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZXR1cm5zIHRoZSBydWxlIHNldCdzIG5hbWUKKyAgICAgKiBAcmV0dXJuIFRoZSBydWxlIHNldCdzIG5hbWUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBmb3JtYXR0aW5nCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogRm9ybWF0cyBhIGxvbmcuICBTZWxlY3RzIGFuIGFwcHJvcHJpYXRlIHJ1bGUgYW5kIGRpc3BhdGNoZXMKKyAgICAgKiBjb250cm9sIHRvIGl0LgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAcGFyYW0gdG9JbnNlcnRJbnRvIFRoZSBzdHJpbmcgd2hlcmUgdGhlIHJlc3VsdCBpcyB0byBiZSBwbGFjZWQKKyAgICAgKiBAcGFyYW0gcG9zIFRoZSBwb3NpdGlvbiBpbiB0b0luc2VydEludG8gd2hlcmUgdGhlIHJlc3VsdCBvZgorICAgICAqIHRoaXMgb3BlcmF0aW9uIGlzIHRvIGJlIGluc2VydGVkCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9ybWF0KGxvbmcgbnVtYmVyLCBTdHJpbmdCdWZmZXIgdG9JbnNlcnRJbnRvLCBpbnQgcG9zKSB7CisgICAgICAgIE5GUnVsZSBhcHBsaWNhYmxlUnVsZSA9IGZpbmROb3JtYWxSdWxlKG51bWJlcik7CisKKyAgICAgICAgYXBwbGljYWJsZVJ1bGUuZG9Gb3JtYXQobnVtYmVyLCB0b0luc2VydEludG8sIHBvcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRm9ybWF0cyBhIGRvdWJsZS4gIFNlbGVjdHMgYW4gYXBwcm9wcmlhdGUgcnVsZSBhbmQgZGlzcGF0Y2hlcworICAgICAqIGNvbnRyb2wgdG8gaXQuCisgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZAorICAgICAqIEBwYXJhbSB0b0luc2VydEludG8gVGhlIHN0cmluZyB3aGVyZSB0aGUgcmVzdWx0IGlzIHRvIGJlIHBsYWNlZAorICAgICAqIEBwYXJhbSBwb3MgVGhlIHBvc2l0aW9uIGluIHRvSW5zZXJ0SW50byB3aGVyZSB0aGUgcmVzdWx0IG9mCisgICAgICogdGhpcyBvcGVyYXRpb24gaXMgdG8gYmUgaW5zZXJ0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JtYXQoZG91YmxlIG51bWJlciwgU3RyaW5nQnVmZmVyIHRvSW5zZXJ0SW50bywgaW50IHBvcykgeworICAgICAgICBORlJ1bGUgYXBwbGljYWJsZVJ1bGUgPSBmaW5kUnVsZShudW1iZXIpOworCisgICAgICAgIGFwcGxpY2FibGVSdWxlLmRvRm9ybWF0KG51bWJlciwgdG9JbnNlcnRJbnRvLCBwb3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlbGVjdHMgYW4gYXByb3ByaWF0ZSBydWxlIGZvciBmb3JtYXR0aW5nIHRoZSBudW1iZXIuCisgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZC4KKyAgICAgKiBAcmV0dXJuIFRoZSBydWxlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZm9ybWF0IGl0CisgICAgICovCisgICAgcHJpdmF0ZSBORlJ1bGUgZmluZFJ1bGUoZG91YmxlIG51bWJlcikgeworICAgICAgICAvLyBpZiB0aGlzIGlzIGEgZnJhY3Rpb24gcnVsZSBzZXQsIHVzZSBmaW5kRnJhY3Rpb25SdWxlU2V0UnVsZSgpCisgICAgICAgIGlmIChpc0ZyYWN0aW9uUnVsZVNldCkgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRGcmFjdGlvblJ1bGVTZXRSdWxlKG51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlLCByZXR1cm4gdGhlIG5lZ2F0aXZlIG51bWJlciBydWxlCisgICAgICAgIC8vIChpZiB0aGVyZSBpc24ndCBhIG5lZ2F0aXZlLW51bWJlciBydWxlLCB3ZSBwcmV0ZW5kIGl0J3MgYQorICAgICAgICAvLyBwb3NpdGl2ZSBudW1iZXIpCisgICAgICAgIGlmIChudW1iZXIgPCAwKSB7CisgICAgICAgICAgICBpZiAobmVnYXRpdmVOdW1iZXJSdWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmVnYXRpdmVOdW1iZXJSdWxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgPSAtbnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpc24ndCBhbiBpbnRlZ2VyLCB3ZSB1c2Ugb25lIGYgdGhlIGZyYWN0aW9uIHJ1bGVzLi4uCisgICAgICAgIGlmIChudW1iZXIgIT0gTWF0aC5mbG9vcihudW1iZXIpKSB7CisgICAgICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIGJldHdlZW4gMCBhbmQgMSwgcmV0dXJuIHRoZSBwcm9wZXIKKyAgICAgICAgICAgIC8vIGZyYWN0aW9uIHJ1bGUKKyAgICAgICAgICAgIGlmIChudW1iZXIgPCAxICYmIGZyYWN0aW9uUnVsZXNbMV0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmcmFjdGlvblJ1bGVzWzFdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHJldHVybiB0aGUgaW1wcm9wZXIgZnJhY3Rpb24gcnVsZQorICAgICAgICAgICAgZWxzZSBpZiAoZnJhY3Rpb25SdWxlc1swXSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWN0aW9uUnVsZXNbMF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGVyZSdzIGEgbWFzdGVyIHJ1bGUsIHVzZSBpdCB0byBmb3JtYXQgdGhlIG51bWJlcgorICAgICAgICBpZiAoZnJhY3Rpb25SdWxlc1syXSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZnJhY3Rpb25SdWxlc1syXTsKKworICAgICAgICAvLyBhbmQgaWYgd2UgaGF2ZW4ndCB5ZXQgcmV0dXJuZWQgYSBydWxlLCB1c2UgZmluZE5vcm1hbFJ1bGUoKQorICAgICAgICAvLyB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHJ1bGUKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmaW5kTm9ybWFsUnVsZSgobG9uZylNYXRoLnJvdW5kKG51bWJlcikpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgdGhlIHZhbHVlIHBhc3NlZCB0byBmaW5kUnVsZSgpIGlzIGEgcG9zaXRpdmUgaW50ZWdlciwgZmluZFJ1bGUoKQorICAgICAqIHVzZXMgdGhpcyBmdW5jdGlvbiB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHJ1bGUuICBUaGUgcmVzdWx0IHdpbGwKKyAgICAgKiBnZW5lcmFsbHkgYmUgdGhlIHJ1bGUgd2l0aCB0aGUgaGlnaGVzdCBiYXNlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbAorICAgICAqIHRvIHRoZSBudW1iZXIuICBUaGVyZSBpcyBvbmUgZXhjZXB0aW9uIHRvIHRoaXM6IElmIHRoYXQgcnVsZSBoYXMKKyAgICAgKiB0d28gc3Vic3RpdHV0aW9ucyBhbmQgYSBiYXNlIHZhbHVlIHRoYXQgaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2YKKyAgICAgKiBpdHMgZGl2aXNvciwgYW5kIHRoZSBudW1iZXIgaXRzZWxmIElTIGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIHJ1bGUncworICAgICAqIGRpdmlzb3IsIHRoZW4gdGhlIHJlc3VsdCB3aWxsIGJlIHRoZSBydWxlIHRoYXQgcHJlY2VkZWQgdGhlIG9yaWdpbmFsCisgICAgICogcmVzdWx0IGluIHRoZSBydWxlIGxpc3QuICAoVGhpcyBiZWhhdmlvciBpcyBrbm93biBhcyB0aGUgInJvbGxiYWNrCisgICAgICogcnVsZSIsIGFuZCBpcyB1c2VkIHRvIGhhbmRsZSBvcHRpb25hbCB0ZXh0OiBhIHJ1bGUgd2l0aCBvcHRpb25hbAorICAgICAqIHRleHQgaXMgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhcyB0d28gcnVsZXMsIGFuZCB0aGUgcm9sbGJhY2sgcnVsZQorICAgICAqIHNlbGVjdHMgYXBwcm9wcmlhdGUgYmV0d2VlbiB0aGVtLiAgVGhpcyBhdm9pZHMgdGhpbmdzIGxpa2UgInR3bworICAgICAqIGh1bmRyZWQgemVybyIuKQorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAcmV0dXJuIFRoZSBydWxlIHRvIHVzZSB0byBmb3JtYXQgdGhpcyBudW1iZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIE5GUnVsZSBmaW5kTm9ybWFsUnVsZShsb25nIG51bWJlcikgeworICAgICAgICAvLyBpZiB0aGlzIGlzIGEgZnJhY3Rpb24gcnVsZSBzZXQsIHVzZSBmaW5kRnJhY3Rpb25SdWxlU2V0UnVsZSgpCisgICAgICAgIC8vIHRvIGZpbmQgdGhlIHJ1bGUgKHdlIHNob3VsZCBvbmx5IGdvIGludG8gdGhpcyBjbGF1c2UgaWYgdGhlCisgICAgICAgIC8vIHZhbHVlIGlzIDApCisgICAgICAgIGlmIChpc0ZyYWN0aW9uUnVsZVNldCkgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRGcmFjdGlvblJ1bGVTZXRSdWxlKG51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlLCByZXR1cm4gdGhlIG5lZ2F0aXZlLW51bWJlciBydWxlCisgICAgICAgIC8vIChpZiB0aGVyZSBpc24ndCBvbmUsIHByZXRlbmQgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSkKKyAgICAgICAgaWYgKG51bWJlciA8IDApIHsKKyAgICAgICAgICAgIGlmIChuZWdhdGl2ZU51bWJlclJ1bGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZWdhdGl2ZU51bWJlclJ1bGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG51bWJlciA9IC1udW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyB3ZSBoYXZlIHRvIHJlcGVhdCB0aGUgcHJlY2VkaW5nIHR3byBjaGVja3MsIGV2ZW4gdGhvdWdoIHdlCisgICAgICAgIC8vIGRvIHRoZW0gaW4gZmluZFJ1bGUoKSwgYmVjYXVzZSB0aGUgdmVyc2lvbiBvZiBmb3JtYXQoKSB0aGF0CisgICAgICAgIC8vIHRha2VzIGEgbG9uZyBieXBhc3NlcyBmaW5kUnVsZSgpIGFuZCBnb2VzIHN0cmFpZ2h0IHRvIHRoaXMKKyAgICAgICAgLy8gZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uIGRvZXMgc2tpcCB0aGUgZnJhY3Rpb24gcnVsZXMgc2luY2UKKyAgICAgICAgLy8gd2Uga25vdyB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciAoaXQgYWxzbyBza2lwcyB0aGUgbWFzdGVyCisgICAgICAgIC8vIHJ1bGUsIHNpbmNlIGl0J3MgY29uc2lkZXJlZCBhIGZyYWN0aW9uIHJ1bGUuICBTa2lwcGluZyB0aGUKKyAgICAgICAgLy8gbWFzdGVyIHJ1bGUgaW4gdGhpcyBmdW5jdGlvbiBpcyBhbHNvIGhvdyB3ZSBhdm9pZCBpbmZpbml0ZQorICAgICAgICAvLyByZWN1cnNpb24pCisKKyAgICAgICAgLy8gYmluYXJ5LXNlYXJjaCB0aGUgcnVsZSBsaXN0IGZvciB0aGUgYXBwbGljYWJsZSBydWxlCisgICAgICAgIC8vIChhIHJ1bGUgaXMgdXNlZCBmb3IgYWxsIHZhbHVlcyBmcm9tIGl0cyBiYXNlIHZhbHVlIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IHJ1bGUncyBiYXNlIHZhbHVlKQorICAgICAgICBpbnQgbG8gPSAwOworICAgICAgICBpbnQgaGkgPSBydWxlcy5sZW5ndGg7CisJaWYgKGhpID4gMCkgeworCSAgICB3aGlsZSAobG8gPCBoaSkgeworCQlpbnQgbWlkID0gKGxvICsgaGkpIC8gMjsKKwkJaWYgKHJ1bGVzW21pZF0uZ2V0QmFzZVZhbHVlKCkgPT0gbnVtYmVyKSB7CisJCSAgICByZXR1cm4gcnVsZXNbbWlkXTsKKwkJfQorCQllbHNlIGlmIChydWxlc1ttaWRdLmdldEJhc2VWYWx1ZSgpID4gbnVtYmVyKSB7CisJCSAgICBoaSA9IG1pZDsKKwkJfQorCQllbHNlIHsKKwkJICAgIGxvID0gbWlkICsgMTsKKwkJfQorCSAgICB9CisJICAgIE5GUnVsZSByZXN1bHQgPSBydWxlc1toaSAtIDFdOworCisJICAgIC8vIHVzZSBzaG91bGRSb2xsQmFjaygpIHRvIHNlZSB3aGV0aGVyIHdlIG5lZWQgdG8gaW52b2tlIHRoZQorCSAgICAvLyByb2xsYmFjayBydWxlIChzZWUgc2hvdWxkUm9sbEJhY2soKSdzIGRvY3VtZW50YXRpb24gZm9yCisJICAgIC8vIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSByb2xsYmFjayBydWxlKS4gIElmIHdlIGRvLCByb2xsIGJhY2sKKwkgICAgLy8gb25lIHJ1bGUgYW5kIHJldHVybiB0aGF0IG9uZSBpbnN0ZWFkIG9mIHRoZSBvbmUgd2UnZCBub3JtYWxseQorCSAgICAvLyByZXR1cm4KKwkgICAgaWYgKHJlc3VsdC5zaG91bGRSb2xsQmFjayhudW1iZXIpKSB7CisJCXJlc3VsdCA9IHJ1bGVzW2hpIC0gMl07CisJICAgIH0KKwkgICAgcmV0dXJuIHJlc3VsdDsKKwl9CisJLy8gZWxzZSB1c2UgdGhlIG1hc3RlciBydWxlCisJcmV0dXJuIGZyYWN0aW9uUnVsZXNbMl07CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgdGhpcyBydWxlIGlzIGEgZnJhY3Rpb24gcnVsZSBzZXQsIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieQorICAgICAqIGZpbmRSdWxlKCkgdG8gc2VsZWN0IHRoZSBtb3N0IGFwcHJvcHJpYXRlIHJ1bGUgZm9yIGZvcm1hdHRpbmcKKyAgICAgKiB0aGUgbnVtYmVyLiAgQmFzaWNhbGx5LCB0aGUgYmFzZSB2YWx1ZSBvZiBlYWNoIHJ1bGUgaW4gdGhlIHJ1bGUKKyAgICAgKiBzZXQgaXMgdHJlYXRlZCBhcyB0aGUgZGVub21pbmF0b3Igb2YgYSBmcmFjdGlvbi4gIFdoaWNoZXZlcgorICAgICAqIGRlbm9taW5hdG9yIGNhbiBwcm9kdWNlIHRoZSBmcmFjdGlvbiBjbG9zZXN0IGluIHZhbHVlIHRvIHRoZQorICAgICAqIG51bWJlciBwYXNzZWQgaW4gaXMgdGhlIHJlc3VsdC4gIElmIHRoZXJlJ3MgYSB0aWUsIHRoZSBlYXJsaWVyCisgICAgICogb25lIGluIHRoZSBsaXN0IHdpbnMuICAoSWYgdGhlcmUgYXJlIHR3byBydWxlcyBpbiBhIHJvdyB3aXRoIHRoZQorICAgICAqIHNhbWUgYmFzZSB2YWx1ZSwgdGhlIGZpcnN0IG9uZSBpcyB1c2VkIHdoZW4gdGhlIG51bWVyYXRvciBvZiB0aGUKKyAgICAgKiBmcmFjdGlvbiB3b3VsZCBiZSAxLCBhbmQgdGhlIHNlY29uZCBydWxlIGlzIHVzZWQgdGhlIHJlc3Qgb2YgdGhlCisgICAgICogdGltZS4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkICh3aGljaCB3aWxsIGFsd2F5cyBiZQorICAgICAqIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcmV0dXJuIFRoZSBydWxlIHRvIHVzZSB0byBmb3JtYXQgdGhpcyBudW1iZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIE5GUnVsZSBmaW5kRnJhY3Rpb25SdWxlU2V0UnVsZShkb3VibGUgbnVtYmVyKSB7CisgICAgICAgIC8vIHRoZSBvYnZpb3VzIHdheSB0byBkbyB0aGlzIChtdWx0aXBseSB0aGUgdmFsdWUgYmVpbmcgZm9ybWF0dGVkCisgICAgICAgIC8vIGJ5IGVhY2ggcnVsZSdzIGJhc2UgdmFsdWUgdW50aWwgeW91IGdldCBhbiBpbnRlZ3JhbCByZXN1bHQpCisgICAgICAgIC8vIGRvZXNuJ3Qgd29yayBiZWNhdXNlIG9mIHJvdW5kaW5nIGVycm9yLiAgVGhpcyBtZXRob2QgaXMgbW9yZQorICAgICAgICAvLyBhY2N1cmF0ZQorCisgICAgICAgIC8vIGZpbmQgdGhlIGxlYXN0IGNvbW1vbiBtdWx0aXBsZSBvZiB0aGUgcnVsZXMnIGJhc2UgdmFsdWVzCisgICAgICAgIC8vIGFuZCBtdWx0aXBseSB0aGlzIGJ5IHRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkLiAgVGhpcyBpcworICAgICAgICAvLyBhbGwgdGhlIHByZWNpc2lvbiB3ZSBuZWVkLCBhbmQgd2UgY2FuIGRvIGFsbCBvZiB0aGUgcmVzdAorICAgICAgICAvLyBvZiB0aGUgbWF0aCB1c2luZyBpbnRlZ2VyIGFyaXRobWV0aWMKKyAgICAgICAgbG9uZyBsZWFzdENvbW1vbk11bHRpcGxlID0gcnVsZXNbMF0uZ2V0QmFzZVZhbHVlKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGxlYXN0Q29tbW9uTXVsdGlwbGUgPSBsY20obGVhc3RDb21tb25NdWx0aXBsZSwgcnVsZXNbaV0uZ2V0QmFzZVZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIGxvbmcgbnVtZXJhdG9yID0gKGxvbmcpKE1hdGgucm91bmQobnVtYmVyICogbGVhc3RDb21tb25NdWx0aXBsZSkpOworCisgICAgICAgIC8vIGZvciBlYWNoIHJ1bGUsIGRvIHRoZSBmb2xsb3dpbmcuLi4KKyAgICAgICAgbG9uZyB0ZW1wRGlmZmVyZW5jZTsKKyAgICAgICAgbG9uZyBkaWZmZXJlbmNlID0gTG9uZy5NQVhfVkFMVUU7CisgICAgICAgIGludCB3aW5uZXIgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAvLyAibnVtZXJhdG9yIiBpcyB0aGUgbnVtZXJhdG9yIG9mIHRoZSBmcmFjdGlvbiBpcyB0aGUKKyAgICAgICAgICAgIC8vIGRlbm9taW5hdG9yIGlzIHRoZSBMQ0QuICBUaGUgbnVtZXJhdG9yIGlmIHRoZSB0aGUgcnVsZSdzCisgICAgICAgICAgICAvLyBiYXNlIHZhbHVlIGlzIHRoZSBkZW5vbWlhdG9yIGlzICJudW1lcmF0b3IiIHRpbWVzIHRoZQorICAgICAgICAgICAgLy8gYmFzZSB2YWx1ZSBkaXZpZGVkIGJ5dGhlIExDRC4gIEhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmCisgICAgICAgICAgICAvLyB0aGF0J3MgYW4gaW50ZWdlciwgYW5kIGlmIG5vdCwgaG93IGNsb3NlIGl0IGlzIHRvIGJlaW5nCisgICAgICAgICAgICAvLyBhbiBpbnRlZ2VyLgorICAgICAgICAgICAgdGVtcERpZmZlcmVuY2UgPSBudW1lcmF0b3IgKiBydWxlc1tpXS5nZXRCYXNlVmFsdWUoKSAlIGxlYXN0Q29tbW9uTXVsdGlwbGU7CisKKyAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB0aGUgcmVzdWx0IG9mIHRoZSBhYm92ZSBjYWxjdWxhdGlvbjogd2Ugd2FudAorICAgICAgICAgICAgLy8gdGhlIG51bWVyYXRvcidzIGRpc3RhbmNlIGZyb20gdGhlIENMT1NFU1QgbXVsdGlwbGUKKyAgICAgICAgICAgIC8vIG9mIHRoZSBMQ0QKKyAgICAgICAgICAgIGlmIChsZWFzdENvbW1vbk11bHRpcGxlIC0gdGVtcERpZmZlcmVuY2UgPCB0ZW1wRGlmZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIHRlbXBEaWZmZXJlbmNlID0gbGVhc3RDb21tb25NdWx0aXBsZSAtIHRlbXBEaWZmZXJlbmNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGFzIGNsb3NlIGFzIHdlJ3ZlIGNvbWUsIGtlZXAgdHJhY2sgb2YgaG93IGNsb3NlCisgICAgICAgICAgICAvLyB0aGF0IGlzLCBhbmQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBydWxlIHRoYXQgZGlkIGl0LiAgSWYKKyAgICAgICAgICAgIC8vIHdlJ3ZlIHNjb3JlZCBhIGRpcmVjdCBoaXQsIHdlIGRvbid0IGhhdmUgdG8gbG9vayBhdCBhbnkgbW9yZQorICAgICAgICAgICAgLy8gcnVsZXMKKyAgICAgICAgICAgIGlmICh0ZW1wRGlmZmVyZW5jZSA8IGRpZmZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlID0gdGVtcERpZmZlcmVuY2U7CisgICAgICAgICAgICAgICAgd2lubmVyID0gaTsKKyAgICAgICAgICAgICAgICBpZiAoZGlmZmVyZW5jZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHdlIGhhdmUgdHdvIHN1Y2Nlc3NpdmUgcnVsZXMgdGhhdCBib3RoIGhhdmUgdGhlIHdpbm5pbmcgYmFzZQorICAgICAgICAvLyB2YWx1ZSwgdGhlbiB0aGUgZmlyc3Qgb25lICh0aGUgb25lIHdlIGZvdW5kIGFib3ZlKSBpcyB1c2VkIGlmCisgICAgICAgIC8vIHRoZSBudW1lcmF0b3Igb2YgdGhlIGZyYWN0aW9uIGlzIDEgYW5kIHRoZSBzZWNvbmQgb25lIGlzIHVzZWQgaWYKKyAgICAgICAgLy8gdGhlIG51bWVyYXRvciBvZiB0aGUgZnJhY3Rpb24gaXMgYW55dGhpbmcgZWxzZSAodGhpcyBsZXRzIHVzCisgICAgICAgIC8vIGRvIHRoaW5ncyBsaWtlICJvbmUgdGhpcmQiLyJ0d28gdGhpcmRzIiB3aXRob3V0IGhhdmVpbmcgdG8gZGVmaW5lCisgICAgICAgIC8vIGEgd2hvbGUgYnVuY2ggb2YgZXh0cmEgcnVsZSBzZXRzKQorICAgICAgICBpZiAod2lubmVyICsgMSA8IHJ1bGVzLmxlbmd0aAorICAgICAgICAgICAgICAgICYmIHJ1bGVzW3dpbm5lciArIDFdLmdldEJhc2VWYWx1ZSgpID09IHJ1bGVzW3dpbm5lcl0uZ2V0QmFzZVZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKG51bWJlciAqIHJ1bGVzW3dpbm5lcl0uZ2V0QmFzZVZhbHVlKCkpIDwgMQorICAgICAgICAgICAgICAgICAgICB8fCBNYXRoLnJvdW5kKG51bWJlciAqIHJ1bGVzW3dpbm5lcl0uZ2V0QmFzZVZhbHVlKCkpID49IDIpIHsKKyAgICAgICAgICAgICAgICArK3dpbm5lcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGZpbmFsbHksIHJldHVybiB0aGUgd2lubmluZyBydWxlCisgICAgICAgIHJldHVybiBydWxlc1t3aW5uZXJdOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGN1bGF0ZXMgdGhlIGxlYXN0IGNvbW1vbiBtdWx0aXBsZSBvZiB4IGFuZCB5LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGxvbmcgbGNtKGxvbmcgeCwgbG9uZyB5KSB7CisgICAgICAgIC8vIGJpbmFyeSBnY2QgYWxnb3JpdGhtIGZyb20gS251dGgsICJUaGUgQXJ0IG9mIENvbXB1dGVyIFByb2dyYW1taW5nLCIKKyAgICAgICAgLy8gdm9sLiAyLCAxc3QgZWQuLCBwcC4gMjk4LTI5OQorICAgICAgICBsb25nIHgxID0geDsKKyAgICAgICAgbG9uZyB5MSA9IHk7CisKKyAgICAgICAgaW50IHAyID0gMDsKKyAgICAgICAgd2hpbGUgKCh4MSAmIDEpID09IDAgJiYgKHkxICYgMSkgPT0gMCkgeworICAgICAgICAgICAgKytwMjsKKyAgICAgICAgICAgIHgxID4+PSAxOworICAgICAgICAgICAgeTEgPj49IDE7CisgICAgICAgIH0KKworICAgICAgICBsb25nIHQ7CisgICAgICAgIGlmICgoeDEgJiAxKSA9PSAxKSB7CisgICAgICAgICAgICB0ID0gLXkxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdCA9IHgxOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKHQgIT0gMCkgeworICAgICAgICAgICAgd2hpbGUgKCh0ICYgMSkgPT0gMCkgeworICAgICAgICAgICAgICAgIHQgPj49IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodCA+IDApIHsKKyAgICAgICAgICAgICAgICB4MSA9IHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHkxID0gLXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ID0geDEgLSB5MTsKKyAgICAgICAgfQorICAgICAgICBsb25nIGdjZCA9IHgxIDw8IHAyOworCisgICAgICAgIC8vIHggKiB5ID09IGdjZCh4LCB5KSAqIGxjbSh4LCB5KQorICAgICAgICByZXR1cm4geCAvIGdjZCAqIHk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHBhcnNpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgYSBzdHJpbmcuICBNYXRjaGVzIHRoZSBzdHJpbmcgdG8gYmUgcGFyc2VkIGFnYWluc3QgZWFjaAorICAgICAqIG9mIGl0cyBydWxlcyAod2l0aCBhIGJhc2UgdmFsdWUgbGVzcyB0aGFuIHVwcGVyQm91bmQpIGFuZCByZXR1cm5zCisgICAgICogdGhlIHZhbHVlIHByb2R1Y2VkIGJ5IHRoZSBydWxlIHRoYXQgbWF0Y2hlZCB0aGUgbW9zdCBjaGFyY3RlcnMKKyAgICAgKiBpbiB0aGUgc291cmNlIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgc3RyaW5nIHRvIHBhcnNlCisgICAgICogQHBhcmFtIHBhcnNlUG9zaXRpb24gVGhlIGluaXRpYWwgcG9zaXRpb24gaXMgaWdub3JlZCBhbmQgYXNzdW1lZAorICAgICAqIHRvIGJlIDAuICBPbiBleGl0LCB0aGlzIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZQorICAgICAqIGZpcnN0IGNoYXJhY3RlciBwb3NpdGlvbiB0aGlzIHJ1bGUgc2V0IGRpZG4ndCBjb25zdW1lLgorICAgICAqIEBwYXJhbSB1cHBlckJvdW5kIExpbWl0cyB0aGUgcnVsZXMgdGhhdCBjYW4gYmUgYWxsb3dlZCB0byBtYXRjaC4KKyAgICAgKiBPbmx5IHJ1bGVzIHdob3NlIGJhc2UgdmFsdWVzIGFyZSBzdHJpY3RseSBsZXNzIHRoYW4gdXBwZXJCb3VuZAorICAgICAqIGFyZSBjb25zaWRlcmVkLgorICAgICAqIEByZXR1cm4gVGhlIG51bWVyaWNhbCByZXN1bHQgb2YgcGFyc2luZyB0aGlzIHN0cmluZy4gIFRoaXMgd2lsbAorICAgICAqIGJlIHRoZSBtYXRjaGluZyBydWxlJ3MgYmFzZSB2YWx1ZSwgY29tcG9zZWQgYXBwcm9wcmlhdGVseSB3aXRoCisgICAgICogdGhlIHJlc3VsdHMgb2YgbWF0Y2hpbmcgYW55IG9mIGl0cyBzdWJzdGl0dXRpb25zLiAgVGhlIG9iamVjdAorICAgICAqIHdpbGwgYmUgYW4gaW5zdGFuY2Ugb2YgTG9uZyBpZiBpdCdzIGFuIGludGVncmFsIHZhbHVlOyBvdGhlcndpc2UsCisgICAgICogaXQgd2lsbCBiZSBhbiBpbnN0YW5jZSBvZiBEb3VibGUuICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zCisgICAgICogYSB2YWxpZCBvYmplY3Q6IElmIG5vdGhpbmcgbWF0Y2hlZCB0aGUgaW5wdXQgc3RyaW5nIGF0IGFsbCwKKyAgICAgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgbmV3IExvbmcoMCksIGFuZCB0aGUgcGFyc2UgcG9zaXRpb24gaXMKKyAgICAgKiBsZWZ0IHVuY2hhbmdlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgTnVtYmVyIHBhcnNlKFN0cmluZyB0ZXh0LCBQYXJzZVBvc2l0aW9uIHBhcnNlUG9zaXRpb24sIGRvdWJsZSB1cHBlckJvdW5kKSB7CisgICAgICAgIC8vIHRyeSBtYXRjaGluZyBlYWNoIHJ1bGUgaW4gdGhlIHJ1bGUgc2V0IGFnYWluc3QgdGhlIHRleHQgYmVpbmcKKyAgICAgICAgLy8gcGFyc2VkLiAgV2hpY2hldmVyIG9uZSBtYXRjaGVzIHRoZSBtb3N0IGNoYXJhY3RlcnMgaXMgdGhlIG9uZQorICAgICAgICAvLyB0aGF0IGRldGVybWluZXMgdGhlIHZhbHVlIHdlIHJldHVybi4KKworICAgICAgICBQYXJzZVBvc2l0aW9uIGhpZ2hXYXRlck1hcmsgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgTnVtYmVyIHJlc3VsdCA9IG5ldyBMb25nKDApOworICAgICAgICBOdW1iZXIgdGVtcFJlc3VsdCA9IG51bGw7CisKKyAgICAgICAgLy8gZHVtcCBvdXQgaWYgdGhlcmUncyBubyB0ZXh0IHRvIHBhcnNlCisgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBzdGFydCBieSB0cnlpbmcgdGhlIG5laGF0aXZlIG51bWJlciBydWxlIChpZiB0aGVyZSBpcyBvbmUpCisgICAgICAgIGlmIChuZWdhdGl2ZU51bWJlclJ1bGUgIT0gbnVsbCkgeworICAgICAgICAgICAgdGVtcFJlc3VsdCA9IG5lZ2F0aXZlTnVtYmVyUnVsZS5kb1BhcnNlKHRleHQsIHBhcnNlUG9zaXRpb24sIGZhbHNlLCB1cHBlckJvdW5kKTsKKyAgICAgICAgICAgIGlmIChwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkgPiBoaWdoV2F0ZXJNYXJrLmdldEluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsuc2V0SW5kZXgocGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIH0KKy8vIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGUgZXJyb3ItaW5kZXggQVBJIG9uIFBhcnNlUG9zaXRpb24gaXNuJ3QgdGhlcmUgaW4gMS4xLngKKy8vICAgICAgICAgICAgaWYgKHBhcnNlUG9zaXRpb24uZ2V0RXJyb3JJbmRleCgpID4gaGlnaFdhdGVyTWFyay5nZXRFcnJvckluZGV4KCkpIHsKKy8vICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsuc2V0RXJyb3JJbmRleChwYXJzZVBvc2l0aW9uLmdldEVycm9ySW5kZXgoKSk7CisvLyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0SW5kZXgoMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyB0aGVuIHRyeSBlYWNoIG9mIHRoZSBmcmFjdGlvbiBydWxlcworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgaWYgKGZyYWN0aW9uUnVsZXNbaV0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRlbXBSZXN1bHQgPSBmcmFjdGlvblJ1bGVzW2ldLmRvUGFyc2UodGV4dCwgcGFyc2VQb3NpdGlvbiwgZmFsc2UsIHVwcGVyQm91bmQpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkgPiBoaWdoV2F0ZXJNYXJrLmdldEluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyay5zZXRJbmRleChwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkpOworICAgICAgICAgICAgICAgIH0KKy8vIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGUgZXJyb3ItaW5kZXggQVBJIG9uIFBhcnNlUG9zaXRpb24gaXNuJ3QgdGhlcmUgaW4gMS4xLngKKy8vICAgICAgICAgICAgaWYgKHBhcnNlUG9zaXRpb24uZ2V0RXJyb3JJbmRleCgpID4gaGlnaFdhdGVyTWFyay5nZXRFcnJvckluZGV4KCkpIHsKKy8vICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsuc2V0RXJyb3JJbmRleChwYXJzZVBvc2l0aW9uLmdldEVycm9ySW5kZXgoKSk7CisvLyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEluZGV4KDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gZmluYWxseSwgZ28gdGhyb3VnaCB0aGUgcmVndWxhciBydWxlcyBvbmUgYXQgYSB0aW1lLiAgV2Ugc3RhcnQKKyAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBiZWNhdXNlIHdlIHdhbnQgdG8gdHJ5IG1hdGNoaW5nIHRoZSBtb3N0CisgICAgICAgIC8vIHNpZ2lmaWNhbnQgcnVsZSBmaXJzdCAodGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB3ZSBwYXJzZQorICAgICAgICAvLyAiZml2ZSB0aG91c2FuZCB0aHJlZSBodW5kcmVkIHNpeCIgYXMKKyAgICAgICAgLy8gIihmaXZlIHRob3VzYW5kKSAodGhyZWUgaHVuZHJlZCkgKHNpeCkiIHJhdGhlciB0aGFuCisgICAgICAgIC8vICIoKGZpdmUgdGhvdXNhbmQgdGhyZWUpIGh1bmRyZWQpIChzaXgpIikuICBTa2lwIHJ1bGVzIHdob3NlCisgICAgICAgIC8vIGJhc2UgdmFsdWVzIGFyZSBoaWdoZXIgdGhhbiB0aGUgdXBwZXIgYm91bmQgKGFnYWluLCB0aGlzIGhlbHBzCisgICAgICAgIC8vIGxpbWl0IGFtYmlndWl0eSBieSBtYWtpbmcgc3VyZSB0aGUgcnVsZXMgdGhhdCBtYXRjaCBhIHJ1bGUncworICAgICAgICAvLyBhcmUgbGVzcyBzaWduaWZpY2FudCB0aGFuIHRoZSBydWxlIGNvbnRhaW5pbmcgdGhlIHN1YnN0aXR1dGlvbnMpLworICAgICAgICBmb3IgKGludCBpID0gcnVsZXMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIGhpZ2hXYXRlck1hcmsuZ2V0SW5kZXgoKSA8IHRleHQubGVuZ3RoKCk7IGktLSkgeworICAgICAgICAgICAgaWYgKCFpc0ZyYWN0aW9uUnVsZVNldCAmJiBydWxlc1tpXS5nZXRCYXNlVmFsdWUoKSA+PSB1cHBlckJvdW5kKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlbXBSZXN1bHQgPSBydWxlc1tpXS5kb1BhcnNlKHRleHQsIHBhcnNlUG9zaXRpb24sIGlzRnJhY3Rpb25SdWxlU2V0LCB1cHBlckJvdW5kKTsKKyAgICAgICAgICAgIGlmIChwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkgPiBoaWdoV2F0ZXJNYXJrLmdldEluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsuc2V0SW5kZXgocGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIH0KKy8vIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGUgZXJyb3ItaW5kZXggQVBJIG9uIFBhcnNlUG9zaXRpb24gaXNuJ3QgdGhlcmUgaW4gMS4xLngKKy8vICAgICAgICAgICAgaWYgKHBhcnNlUG9zaXRpb24uZ2V0RXJyb3JJbmRleCgpID4gaGlnaFdhdGVyTWFyay5nZXRFcnJvckluZGV4KCkpIHsKKy8vICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsuc2V0RXJyb3JJbmRleChwYXJzZVBvc2l0aW9uLmdldEVycm9ySW5kZXgoKSk7CisvLyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0SW5kZXgoMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBmaW5hbGx5LCB1cGRhdGUgdGhlIHBhcnNlIHBvc3Rpb24gd2Ugd2VyZSBwYXNzZWQgdG8gcG9pbnQgdG8gdGhlCisgICAgICAgIC8vIGZpcnN0IGNoYXJhY3RlciB3ZSBkaWRuJ3QgdXNlLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgdGhhdAorICAgICAgICAvLyBjcG9ycmVzcG9uZHMgdG8gdGhhdCBzdHJpbmcgb2YgY2hhcmFjdGVycworICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEluZGV4KGhpZ2hXYXRlck1hcmsuZ2V0SW5kZXgoKSk7CisvLyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhlIGVycm9yLWluZGV4IEFQSSBvbiBQYXJzZVBvc2l0aW9uIGlzbid0IHRoZXJlIGluIDEuMS54CisvLyAgICAgICAgaWYgKHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKSA9PSAwKSB7CisvLyAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0RXJyb3JJbmRleChoaWdoV2F0ZXJNYXJrLmdldEVycm9ySW5kZXgoKSk7CisvLyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvTkZTdWJzdGl0dXRpb24uamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L05GU3Vic3RpdHV0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZhNTMxYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L05GU3Vic3RpdHV0aW9uLmphdmEKQEAgLTAsMCArMSwxNzU1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9ORlN1YnN0aXR1dGlvbi5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA3LzMxIDE3OjM3OjA4ICQgCisgKiAkUmV2aXNpb246IDEuOCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGphdmEudGV4dC4qOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE5GU3Vic3RpdHV0aW9uIChhYnN0cmFjdCBiYXNlIGNsYXNzKQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogQW4gYWJzdHJhY3QgY2xhc3MgZGVmaW5pbmcgcHJvdG9jb2wgZm9yIHN1YnN0aXR1dGlvbnMuICBBIHN1YnN0aXR1dGlvbgorICogaXMgYSBzZWN0aW9uIG9mIGEgcnVsZSB0aGF0IGluc2VydHMgdGV4dCBpbnRvIHRoZSBydWxlJ3MgcnVsZSB0ZXh0CisgKiBiYXNlZCBvbiBzb21lIHBhcnQgb2YgdGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQuCisgKiBAYXV0aG9yIFJpY2hhcmQgR2lsbGFtCisgKiBAdmVyc2lvbiAkUkNTZmlsZTogTkZTdWJzdGl0dXRpb24uamF2YSx2ICQgJFJldmlzaW9uOiAxLjggJCAkRGF0ZTogMjAwMi8wNy8zMSAxNzozNzowOCAkCisgKi8KK2Fic3RyYWN0IGNsYXNzIE5GU3Vic3RpdHV0aW9uIHsKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY29uc3RhbnRzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUHV0cyBhIGNvcHlyaWdodCBpbiB0aGUgLmNsYXNzIGZpbGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0Tm90aWNlCisgICAgICAgID0gIkNvcHlyaWdodCBcdTAwYTkxOTk3LTE5OTggSUJNIENvcnAuICBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZGF0YSBtZW1iZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogVGhlIHN1YnN0aXR1dGlvbidzIHBvc2l0aW9uIGluIHRoZSBydWxlIHRleHQgb2YgdGhlIHJ1bGUgdGhhdCBvd25zIGl0CisgICAgICovCisgICAgaW50IHBvczsKKworICAgIC8qKgorICAgICAqIFRoZSBydWxlIHNldCB0aGlzIHN1YnN0aXR1dGlvbiB1c2VzIHRvIGZvcm1hdCBpdHMgcmVzdWx0LCBvciBudWxsLgorICAgICAqIChFaXRoZXIgdGhpcyBvciBudW1iZXJGb3JtYXQgaGFzIHRvIGJlIG5vbi1udWxsLikKKyAgICAgKi8KKyAgICBORlJ1bGVTZXQgcnVsZVNldCA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBUaGUgRGVjaW1hbEZvcm1hdCB0aGlzIHN1YnN0aXR1dGlvbiB1c2VzIHRvIGZvcm1hdCBpdHMgcmVzdWx0LAorICAgICAqIG9yIG51bGwuICAoRWl0aGVyIHRoaXMgb3IgcnVsZVNldCBoYXMgdG8gYmUgbm9uLW51bGwuKQorICAgICAqLworICAgIERlY2ltYWxGb3JtYXQgbnVtYmVyRm9ybWF0ID0gbnVsbDsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjb25zdHJ1Y3Rpb24KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgdGhlIGRlc2NyaXB0aW9uLCBjcmVhdGVzIHRoZSByaWdodCBraW5kIG9mIHN1YnN0aXR1dGlvbiwKKyAgICAgKiBhbmQgaW5pdGlhbGl6ZXMgaXQgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLgorICAgICAqIEBwYXJhbSBwb3MgVGhlIHN1YnN0aXR1dGlvbidzIHBvc2l0aW9uIGluIHRoZSBydWxlIHRleHQgb2YgdGhlCisgICAgICogcnVsZSB0aGF0IG93bnMgaXQuCisgICAgICogQHBhcmFtIHJ1bGUgVGhlIHJ1bGUgY29udGFpbmluZyB0aGlzIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBydWxlUHJlZGVjZXNzb3IgVGhlIHJ1bGUgcHJlY2VkaW5nIHRoZSBvbmUgdGhhdCBjb250YWlucworICAgICAqIHRoaXMgc3Vic3RpdHV0aW9uIGluIHRoZSBydWxlIHNldCdzIHJ1bGUgbGlzdCAodGhpcyBpcyB1c2VkCisgICAgICogb25seSBmb3IgPj4+IHN1YnN0aXR1dGlvbnMpLgorICAgICAqIEBwYXJhbSBydWxlU2V0IFRoZSBydWxlIHNldCBjb250YWluaW5nIHRoZSBydWxlIGNvbnRhaW5pbmcgdGhpcworICAgICAqIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBmb3JtYXR0ZXIgVGhlIFJ1bGVCYXNlZE51bWJlckZvcm1hdCB0aGF0IHVsdGltYXRlbHkgb3ducworICAgICAqIHRoaXMgc3Vic3RpdHV0aW9uCisgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiB0byBwYXJzZSB0byBidWlsZCB0aGUgc3Vic3RpdHV0aW9uCisgICAgICogKHRoaXMgaXMganVzdCB0aGUgc3Vic3RyaW5nIG9mIHRoZSBydWxlJ3MgZGVzY3JpcHRpb24gY29udGFpbmluZworICAgICAqIHRoZSBzdWJzdGl0dXRpb24gdG9rZW4gaXRzZWxmKQorICAgICAqIEByZXR1cm4gQSBuZXcgc3Vic3RpdHV0aW9uIGNvbnN0cnVjdGVkIGFjY29yZGluZyB0byB0aGUgZGVzY3JpcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE5GU3Vic3RpdHV0aW9uIG1ha2VTdWJzdGl0dXRpb24oaW50IHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZSdWxlIHJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5GUnVsZSBydWxlUHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5GUnVsZVNldCBydWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgLy8gaWYgdGhlIGRlc2NyaXB0aW9uIGlzIGVtcHR5LCByZXR1cm4gYSBOdW1tU3Vic3RpdHV0aW9uCisgICAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IE51bGxTdWJzdGl0dXRpb24ocG9zLCBydWxlU2V0LCBmb3JtYXR0ZXIsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRpb24uY2hhckF0KDApKSB7CisgICAgICAgICAgICAvLyBpZiB0aGUgZGVzY3JpcHRpb24gYmVnaW5zIHdpdGggJzwnLi4uCisgICAgICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgICAgICAgICAvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlIHJ1bGUgaXMgYSBuZWdhdGl2ZSBudW1iZXIKKyAgICAgICAgICAgICAgICAvLyBydWxlCisgICAgICAgICAgICAgICAgaWYgKHJ1bGUuZ2V0QmFzZVZhbHVlKCkgPT0gTkZSdWxlLk5FR0FUSVZFX05VTUJFUl9SVUxFKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIjw8IG5vdCBhbGxvd2VkIGluIG5lZ2F0aXZlLW51bWJlciBydWxlIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHJ1bGUgaXMgYSBmcmFjdGlvbiBydWxlLCByZXR1cm4gYW4KKyAgICAgICAgICAgICAgICAvLyBJbnRlZ3JhbFBhcnRTdWJzdGl0dXRpb24KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChydWxlLmdldEJhc2VWYWx1ZSgpID09IE5GUnVsZS5JTVBST1BFUl9GUkFDVElPTl9SVUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcnVsZS5nZXRCYXNlVmFsdWUoKSA9PSBORlJ1bGUuUFJPUEVSX0ZSQUNUSU9OX1JVTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBydWxlLmdldEJhc2VWYWx1ZSgpID09IE5GUnVsZS5NQVNURVJfUlVMRSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVncmFsUGFydFN1YnN0aXR1dGlvbihwb3MsIHJ1bGVTZXQsIGZvcm1hdHRlciwgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBydWxlIHNldCBjb250YWluaW5nIHRoZSBydWxlIGlzIGEgZnJhY3Rpb24KKyAgICAgICAgICAgICAgICAvLyBydWxlIHNldCwgcmV0dXJuIGEgTnVtZXJhdG9yU3Vic3RpdHV0aW9uCisgICAgICAgICAgICAgICAgZWxzZSBpZiAocnVsZVNldC5pc0ZyYWN0aW9uU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOdW1lcmF0b3JTdWJzdGl0dXRpb24ocG9zLCBydWxlLmdldEJhc2VWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmdldERlZmF1bHRSdWxlU2V0KCksIGZvcm1hdHRlciwgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIGEgTXVsdGlwbGllclN1YnN0aXR1dGlvbgorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpcGxpZXJTdWJzdGl0dXRpb24ocG9zLCBydWxlLmdldERpdmlzb3IoKSwgcnVsZVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlciwgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWYgdGhlIGRlc2NyaXB0aW9uIGJlZ2lucyB3aXRoICc+Jy4uLgorICAgICAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHJ1bGUgaXMgYSBuZWdhdGl2ZS1udW1iZXIgcnVsZSwgcmV0dXJuCisgICAgICAgICAgICAgICAgLy8gYW4gQWJzb2x1dGVWYWx1ZVN1YnN0aXR1dGlvbgorICAgICAgICAgICAgICAgIGlmIChydWxlLmdldEJhc2VWYWx1ZSgpID09IE5GUnVsZS5ORUdBVElWRV9OVU1CRVJfUlVMRSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlVmFsdWVTdWJzdGl0dXRpb24ocG9zLCBydWxlU2V0LCBmb3JtYXR0ZXIsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcnVsZSBpcyBhIGZyYWN0aW9uIHJ1bGUsIHJldHVybiBhCisgICAgICAgICAgICAgICAgLy8gRnJhY3Rpb25hbFBhcnRTdWJzdGl0dXRpb24KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChydWxlLmdldEJhc2VWYWx1ZSgpID09IE5GUnVsZS5JTVBST1BFUl9GUkFDVElPTl9SVUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcnVsZS5nZXRCYXNlVmFsdWUoKSA9PSBORlJ1bGUuUFJPUEVSX0ZSQUNUSU9OX1JVTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBydWxlLmdldEJhc2VWYWx1ZSgpID09IE5GUnVsZS5NQVNURVJfUlVMRSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uYWxQYXJ0U3Vic3RpdHV0aW9uKHBvcywgcnVsZVNldCwgZm9ybWF0dGVyLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHJ1bGUgc2V0IG93bmluZyB0aGUgcnVsZSBpcyBhIGZyYWN0aW9uIHJ1bGUgc2V0LAorICAgICAgICAgICAgICAgIC8vIHRocm93IGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJ1bGVTZXQuaXNGcmFjdGlvblNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIj4+IG5vdCBhbGxvd2VkIGluIGZyYWN0aW9uIHJ1bGUgc2V0Iik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCByZXR1cm4gYSBNb2R1bHVzU3Vic3RpdHV0aW9uCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW9kdWx1c1N1YnN0aXR1dGlvbihwb3MsIHJ1bGUuZ2V0RGl2aXNvcigpLCBydWxlUHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlU2V0LCBmb3JtYXR0ZXIsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlmIHRoZSBkZXNjcmlwdGlvbiBiZWdpbnMgd2l0aCAnPScsIGFsd2F5cyByZXR1cm4gYQorICAgICAgICAgICAgLy8gU2FtZVZhbHVlU3Vic3RpdHV0aW9uCisgICAgICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNhbWVWYWx1ZVN1YnN0aXR1dGlvbihwb3MsIHJ1bGVTZXQsIGZvcm1hdHRlciwgZGVzY3JpcHRpb24pOworCisgICAgICAgICAgICAvLyBhbmQgaWYgaXQncyBhbnl0aGluZyBlbHNlLCB0aHJvdyBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBzdWJzdGl0dXRpb24gY2hhcmFjdGVyIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCYXNlIGNvbnN0cnVjdG9yIGZvciBzdWJzdGl0dXRpb25zLiAgVGhpcyBjb25zdHJ1Y3RvciBzZXRzIHVwIHRoZQorICAgICAqIGZpZWxkcyB3aGljaCBhcmUgY29tbW9uIHRvIGFsbCBzdWJzdGl0dXRpb25zLgorICAgICAqIEBwYXJhbSBwb3MgVGhlIHN1YnN0aXR1dGlvbidzIHBvc2l0aW9uIGluIHRoZSBvd25pbmcgcnVsZSdzIHJ1bGUKKyAgICAgKiB0ZXh0CisgICAgICogQHBhcmFtIHJ1bGVTZXQgVGhlIHJ1bGUgc2V0IHRoYXQgb3ducyB0aGlzIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBmb3JtYXR0ZXIgVGhlIFJ1bGVCYXNlZE51bWJlckZvcm1hdCB0aGF0IG93bnMgdGhpcyBzdWJzdGl0dXRpb24KKyAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gVGhlIHN1YnN0aXR1dGlvbiBkZXNjcmlwdG9yIChpLmUuLCB0aGUgdGV4dAorICAgICAqIGluc2lkZSB0aGUgdG9rZW4gY2hhcmFjdGVycykKKyAgICAgKi8KKyAgICBORlN1YnN0aXR1dGlvbihpbnQgcG9zLAorICAgICAgICAgICAgICAgICAgIE5GUnVsZVNldCBydWxlU2V0LAorICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIC8vIGluaXRpYWxpemUgdGhlIHN1YnN0aXR1dGlvbidzIHBvc2l0aW9uIGluIGl0cyBwYXJlbnQgcnVsZQorICAgICAgICB0aGlzLnBvcyA9IHBvczsKKworICAgICAgICAvLyB0aGUgZGVzY3JpcHRpb24gc2hvdWxkIGJlZ2luIGFuZCBlbmQgd2l0aCB0aGUgc2FtZSBjaGFyYWN0ZXIuCisgICAgICAgIC8vIElmIGl0IGRvZXNuJ3QgdGhhdCdzIGEgc3ludGF4IGVycm9yLiAgT3RoZXJ3aXNlLAorICAgICAgICAvLyBtYWtlU3Vic3RpdHV0aW9uKCkgd2FzIHRoZSBvbmx5IHRoaW5nIHRoYXQgbmVlZGVkIHRvIGtub3cKKyAgICAgICAgLy8gYWJvdXQgdGhlc2UgY2hhcmFjdGVycywgc28gc3RyaXAgdGhlbSBvZmYKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9uLmxlbmd0aCgpID49IDIgJiYgZGVzY3JpcHRpb24uY2hhckF0KDApID09IGRlc2NyaXB0aW9uLmNoYXJBdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLmxlbmd0aCgpIC0gMSkpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uc3Vic3RyaW5nKDEsIGRlc2NyaXB0aW9uLmxlbmd0aCgpIC0gMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBzdWJzdGl0dXRpb24gc3ludGF4Iik7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgZGVzY3JpcHRpb24gd2FzIGp1c3QgdHdvIHBhaXJlZCB0b2tlbiBjaGFyYWN0ZXJzCisgICAgICAgIC8vIChpLmUuLCAiPDwiIG9yICI+PiIpLCBpdCB1c2VzIHRoZSBydWxlIHNldCBpdCBiZWxvbmdzIHRvIHRvCisgICAgICAgIC8vIGZvcm1hdCBpdHMgcmVzdWx0CisgICAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICB0aGlzLnJ1bGVTZXQgPSBydWxlU2V0OworICAgICAgICB9CisKKyAgICAgICAgLy8gaWYgdGhlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIGEgcnVsZSBzZXQgbmFtZSwgdGhhdCdzIHRoZSBydWxlCisgICAgICAgIC8vIHNldCB3ZSB1c2UgdG8gZm9ybWF0IHRoZSByZXN1bHQ6IGdldCBhIHJlZmVyZW5jZSB0byB0aGUKKyAgICAgICAgLy8gbmFtZXMgcnVsZSBzZXQKKyAgICAgICAgZWxzZSBpZiAoZGVzY3JpcHRpb24uY2hhckF0KDApID09ICclJykgeworICAgICAgICAgICAgdGhpcy5ydWxlU2V0ID0gZm9ybWF0dGVyLmZpbmRSdWxlU2V0KGRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHRoZSBkZXNjcmlwdGlvbiBiZWdpbnMgd2l0aCAwIG9yICMsIHRyZWF0IGl0IGFzIGEKKyAgICAgICAgLy8gRGVjaW1hbEZvcm1hdCBwYXR0ZXJuLCBhbmQgaW5pdGlhbGl6ZSBhIERlY2ltYWxGb3JtYXQgd2l0aAorICAgICAgICAvLyB0aGF0IHBhdHRlcm4gKHRoZW4gc2V0IGl0IHRvIHVzZSB0aGUgRGVjaW1hbEZvcm1hdFN5bWJvbHMKKyAgICAgICAgLy8gYmVsb25naW5nIHRvIG91ciBmb3JtYXR0ZXIpCisgICAgICAgIGVsc2UgaWYgKGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PSAnIycgfHwgZGVzY3JpcHRpb24uY2hhckF0KDApID09ICcwJykgeworICAgICAgICAgICAgdGhpcy5udW1iZXJGb3JtYXQgPSBuZXcgRGVjaW1hbEZvcm1hdChkZXNjcmlwdGlvbik7CisgICAgICAgICAgICB0aGlzLm51bWJlckZvcm1hdC5zZXREZWNpbWFsRm9ybWF0U3ltYm9scyhmb3JtYXR0ZXIuZ2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgZGVzY3JpcHRpb24gaXMgIj4+PiIsIHRoaXMgc3Vic3RpdHV0aW9uIGJ5cGFzc2VzIHRoZQorICAgICAgICAvLyB1c3VhbCBydWxlLXNlYXJjaCBwcm9jZXNzIGFuZCBhbHdheXMgdXNlcyB0aGUgcnVsZSB0aGF0IHByZWNlZGVzCisgICAgICAgIC8vIGl0IGluIGl0cyBvd24gcnVsZSBzZXQncyBydWxlIGxpc3QgKHRoaXMgaXMgdXNlZCBmb3IgcGxhY2UtdmFsdWUKKyAgICAgICAgLy8gbm90YXRpb25zOiBmb3JtYXRzIHdoZXJlIHlvdSB3YW50IHRvIHNlZSBhIHBhcnRpY3VsYXIgcGFydCBvZgorICAgICAgICAvLyBhIG51bWJlciBldmVuIHdoZW4gaXQncyAwKQorICAgICAgICBlbHNlIGlmIChkZXNjcmlwdGlvbi5jaGFyQXQoMCkgPT0gJz4nKSB7CisgICAgICAgICAgICB0aGlzLnJ1bGVTZXQgPSBydWxlU2V0OyAvLyB3YXMgbnVsbCwgdGhhaSBydWxlcyBhZGRlZCB0byBjb250cm9sIHNwYWNlCisgICAgICAgICAgICB0aGlzLm51bWJlckZvcm1hdCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvLyBhbmQgb2YgdGhlIGRlc2NyaXB0aW9uIGlzIG5vbmUgb2YgdGhlc2UgdGhpbmdzLCBpdCdzIGEgc3ludGF4IGVycm9yCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBzdWJzdGl0dXRpb24gc3ludGF4Iik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQncyB0aGUgc3Vic3RpdHV0aW9uJ3MgZGl2aXNvci4gIFVzZWQgYnkgTkZSdWxlLnNldEJhc2VWYWx1ZSgpLgorICAgICAqIEEgbm8tb3AgZm9yIGFsbCBzdWJzdGl0dXRpb25zIGV4Y2VwdCBtdWx0aXBsaWVyIGFuZCBtb2R1bHVzCisgICAgICogc3Vic3RpdHV0aW9ucy4KKyAgICAgKiBAcGFyYW0gcmFkaXggVGhlIHJhZGl4IG9mIHRoZSBkaXZpc29yCisgICAgICogQHBhcmFtIGV4cG9uZW50IFRoZSBleHBvbmVudCBvZiB0aGUgZGl2aXNvcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldERpdmlzb3IoaW50IHJhZGl4LCBpbnQgZXhwb25lbnQpIHsKKyAgICAgICAgLy8gYSBuby1vcCBmb3IgYWxsIHN1YnN0aXR1dGlvbnMgZXhjZXB0IG11bHRpcGxpZXIgYW5kIG1vZHVsdXMgc3Vic3RpdHV0aW9ucworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBib2lsZXJwbGF0ZQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbXBhcmVzIHR3byBzdWJzdGl0dXRpb25zIGZvciBlcXVhbGl0eQorICAgICAqIEBwYXJhbSBUaGUgc3Vic3RpdHV0aW9uIHRvIGNvbXBhcmUgdGhpcyBvbmUgdG8KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBzdWJzdGl0dXRpb25zIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgdGhhdCkgeworICAgICAgICAvLyBjb21wYXJlIGNsYXNzIGFuZCBhbGwgb2YgdGhlIGZpZWxkcyBhbGwgc3Vic3RpdHV0aW9ucyBoYXZlCisgICAgICAgIC8vIGluIGNvbW1vbgorICAgICAgICBpZiAodGhpcy5nZXRDbGFzcygpID09IHRoYXQuZ2V0Q2xhc3MoKSkgeworICAgICAgICAgICAgTkZTdWJzdGl0dXRpb24gdGhhdDIgPSAoTkZTdWJzdGl0dXRpb24pdGhhdDsKKworICAgICAgICAgICAgIHJldHVybiBwb3MgPT0gdGhhdDIucG9zCisJCSAmJiAocnVsZVNldCA9PSBudWxsID8gdGhhdDIucnVsZVNldCA9PSBudWxsIDogdHJ1ZSkgLy8gY2FuJ3QgY29tcGFyZSB0cmVlIHN0cnVjdHVyZSwgbm8gLmVxdWFscyBvciByZWN1cnNlCisJCSAmJiAobnVtYmVyRm9ybWF0ID09IG51bGwgPyAodGhhdDIubnVtYmVyRm9ybWF0ID09IG51bGwpIDogbnVtYmVyRm9ybWF0LmVxdWFscyh0aGF0Mi5udW1iZXJGb3JtYXQpKTsKKyAgICAgICAgfQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgc3Vic3RpdHV0aW9uCisgICAgICogQHJldHVybiBBIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHN1YnN0aXR1dGlvbi4gIFRoaXMgbWlnaHQKKyAgICAgKiBub3QgYmUgaWRlbnRpY2FsIHRvIHRoZSBkZXNjcmlwdGlvbiBpdCB3YXMgY3JlYXRlZCBmcm9tLCBidXQKKyAgICAgKiBpdCdsbCBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAvLyB1c2UgdG9rZW5DaGFyKCkgdG8gZ2V0IHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZyBhbmQKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBzdWJzdGl0dXRpb24gdG9rZW4uICBJbiBiZXR3ZWVuIHRoZW0gd2lsbCBnbworICAgICAgICAvLyBlaXRoZXIgdGhlIG5hbWUgb2YgdGhlIHJ1bGUgc2V0IGl0IHVzZXMsIG9yIHRoZSBwYXR0ZXJuIG9mCisgICAgICAgIC8vIHRoZSBEZWNpbWFsRm9ybWF0IGl0IHVzZXMKKyAgICAgICAgaWYgKHJ1bGVTZXQgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhcigpICsgcnVsZVNldC5nZXROYW1lKCkgKyB0b2tlbkNoYXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYXIoKSArIG51bWJlckZvcm1hdC50b1BhdHRlcm4oKSArIHRva2VuQ2hhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGZvcm1hdHRpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtcyBhIG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gb24gdGhlIG51bWJlciwgZm9ybWF0cyBpdCB1c2luZworICAgICAqIGVpdGhlciBydWxlU2V0IG9yIGRlY2ltYWxGb3JtYXQsIGFuZCBpbnNlcnRzIHRoZSByZXN1bHQgaW50bworICAgICAqIHRvSW5zZXJ0SW50by4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkLgorICAgICAqIEBwYXJhbSB0b0luc2VydEludG8gVGhlIHN0cmluZyB3ZSBpbnNlcnQgdGhlIHJlc3VsdCBpbnRvCisgICAgICogQHBhcmFtIHBvcyBUaGUgcG9zaXRpb24gaW4gdG9JbnNlcnRJbnRvIHdoZXJlIHRoZSBvd25pbmcgcnVsZSdzCisgICAgICogcnVsZSB0ZXh0IGJlZ2lucyAodGhpcyB2YWx1ZSBpcyBhZGRlZCB0byB0aGlzIHN1YnN0aXR1dGlvbidzCisgICAgICogcG9zaXRpb24gdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgdG8gaW5zZXJ0IHRoZSBuZXcgdGV4dCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkb1N1YnN0aXR1dGlvbihsb25nIG51bWJlciwgU3RyaW5nQnVmZmVyIHRvSW5zZXJ0SW50bywgaW50IHBvcykgeworICAgICAgICBpZiAocnVsZVNldCAhPSBudWxsKSB7CisgICAgICAgICAgIC8vIHBlcmZvcm0gYSB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgbnVtYmVyIHRoYXQgaXMgZGVwZW5kZW50CisgICAgICAgICAgIC8vIG9uIHRoZSB0eXBlIG9mIHN1YnN0aXR1dGlvbiB0aGlzIGlzLCB0aGVuIGp1c3QgY2FsbCBpdHMKKyAgICAgICAgICAgLy8gcnVsZSBzZXQncyBmb3JtYXQoKSBtZXRob2QgdG8gZm9ybWF0IHRoZSByZXN1bHQKKyAgICAgICAgICAgbG9uZyBudW1iZXJUb0Zvcm1hdCA9IHRyYW5zZm9ybU51bWJlcihudW1iZXIpOworCisgICAgICAgICAgICBydWxlU2V0LmZvcm1hdChudW1iZXJUb0Zvcm1hdCwgdG9JbnNlcnRJbnRvLCBwb3MgKyB0aGlzLnBvcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBvciBwZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgbnVtYmVyIChwcmVzZXJ2aW5nCisgICAgICAgICAgICAvLyB0aGUgcmVzdWx0J3MgZnJhY3Rpb25hbCBwYXJ0IGlmIHRoZSBmb3JtYXR0ZXIgaXQgc2V0CisgICAgICAgICAgICAvLyB0byBzaG93IGl0KSwgdGhlbiB1c2UgdGhhdCBmb3JtYXR0ZXIncyBmb3JtYXQoKSBtZXRob2QKKyAgICAgICAgICAgIC8vIHRvIGZvcm1hdCB0aGUgcmVzdWx0CisgICAgICAgICAgICBkb3VibGUgbnVtYmVyVG9Gb3JtYXQgPSB0cmFuc2Zvcm1OdW1iZXIoKGRvdWJsZSludW1iZXIpOworICAgICAgICAgICAgaWYgKG51bWJlckZvcm1hdC5nZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyVG9Gb3JtYXQgPSBNYXRoLmZsb29yKG51bWJlclRvRm9ybWF0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9JbnNlcnRJbnRvLmluc2VydChwb3MgKyB0aGlzLnBvcywgbnVtYmVyRm9ybWF0LmZvcm1hdChudW1iZXJUb0Zvcm1hdCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybXMgYSBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIsIGZvcm1hdHMgaXQgdXNpbmcKKyAgICAgKiBlaXRoZXIgcnVsZVNldCBvciBkZWNpbWFsRm9ybWF0LCBhbmQgaW5zZXJ0cyB0aGUgcmVzdWx0IGludG8KKyAgICAgKiB0b0luc2VydEludG8uCisgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZC4KKyAgICAgKiBAcGFyYW0gdG9JbnNlcnRJbnRvIFRoZSBzdHJpbmcgd2UgaW5zZXJ0IHRoZSByZXN1bHQgaW50bworICAgICAqIEBwYXJhbSBwb3MgVGhlIHBvc2l0aW9uIGluIHRvSW5zZXJ0SW50byB3aGVyZSB0aGUgb3duaW5nIHJ1bGUncworICAgICAqIHJ1bGUgdGV4dCBiZWdpbnMgKHRoaXMgdmFsdWUgaXMgYWRkZWQgdG8gdGhpcyBzdWJzdGl0dXRpb24ncworICAgICAqIHBvc2l0aW9uIHRvIGRldGVybWluZSBleGFjdGx5IHdoZXJlIHRvIGluc2VydCB0aGUgbmV3IHRleHQpCisgICAgICovCisgICAgcHVibGljIHZvaWQgZG9TdWJzdGl0dXRpb24oZG91YmxlIG51bWJlciwgU3RyaW5nQnVmZmVyIHRvSW5zZXJ0SW50bywgaW50IHBvcykgeworICAgICAgICAvLyBwZXJmb3JtIGEgdHJhbnNmb3JtYXRpb24gb24gdGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQgdGhhdAorICAgICAgICAvLyBpcyBkZXBlbmRlbnQgb24gdGhlIHR5cGUgb2Ygc3Vic3RpdHV0aW9uIHRoaXMgaXMKKyAgICAgICAgZG91YmxlIG51bWJlclRvRm9ybWF0ID0gdHJhbnNmb3JtTnVtYmVyKG51bWJlcik7CisKKyAgICAgICAgLy8gaWYgdGhlIHJlc3VsdCBpcyBhbiBpbnRlZ2VyLCBmcm9tIGhlcmUgb24gb3V0IHdlIHdvcmsgaW4gaW50ZWdlcgorICAgICAgICAvLyBzcGFjZSAoc2F2aW5nIHRpbWUgYW5kIG1lbW9yeSBhbmQgcHJlc2VydmluZyBhY2N1cmFjeSkKKyAgICAgICAgaWYgKG51bWJlclRvRm9ybWF0ID09IE1hdGguZmxvb3IobnVtYmVyVG9Gb3JtYXQpICYmIHJ1bGVTZXQgIT0gbnVsbCkgeworICAgICAgICAgICAgcnVsZVNldC5mb3JtYXQoKGxvbmcpbnVtYmVyVG9Gb3JtYXQsIHRvSW5zZXJ0SW50bywgcG9zICsgdGhpcy5wb3MpOworCisgICAgICAgIC8vIGlmIHRoZSByZXN1bHQgaXNuJ3QgYW4gaW50ZWdlciwgdGhlbiBjYWxsIGVpdGhlciBvdXIgcnVsZSBzZXQncworICAgICAgICAvLyBmb3JtYXQoKSBtZXRob2Qgb3Igb3VyIERlY2ltYWxGb3JtYXQncyBmb3JtYXQoKSBtZXRob2QgdG8KKyAgICAgICAgLy8gZm9ybWF0IHRoZSByZXN1bHQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChydWxlU2V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBydWxlU2V0LmZvcm1hdChudW1iZXJUb0Zvcm1hdCwgdG9JbnNlcnRJbnRvLCBwb3MgKyB0aGlzLnBvcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRvSW5zZXJ0SW50by5pbnNlcnQocG9zICsgdGhpcy5wb3MsIG51bWJlckZvcm1hdC5mb3JtYXQobnVtYmVyVG9Gb3JtYXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBwZXJmb3JtIHNvbWUga2luZCBvZgorICAgICAqIG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gb24gdGhlIG51bWJlci4gIFRoZSByZXN1bHQgb2YgdGhpcyBvcGVyYXRpb24KKyAgICAgKiBpcyBmb3JtYXR0ZWQgdXNpbmcgdGhlIHJ1bGUgc2V0IG9yIERlY2ltYWxGb3JtYXQgdGhhdCB0aGlzCisgICAgICogc3Vic3RpdHV0aW9uIHJlZmVycyB0bywgYW5kIHRoZSByZXN1bHQgaXMgaW5zZXJ0ZWQgaW50byB0aGUgcmVzdWx0CisgICAgICogc3RyaW5nLgorICAgICAqIEBwYXJhbSBUaGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZAorICAgICAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBwZXJmb3JtaW5nIHRoZSBvcHJlcmF0aW9uIG9uIHRoZSBudW1iZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgbG9uZyB0cmFuc2Zvcm1OdW1iZXIobG9uZyBudW1iZXIpOworCisgICAgLyoqCisgICAgICogU3ViY2xhc3NlcyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIHBlcmZvcm0gc29tZSBraW5kIG9mCisgICAgICogbWF0aGVtYXRpY2FsIG9wZXJhdGlvbiBvbiB0aGUgbnVtYmVyLiAgVGhlIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbgorICAgICAqIGlzIGZvcm1hdHRlZCB1c2luZyB0aGUgcnVsZSBzZXQgb3IgRGVjaW1hbEZvcm1hdCB0aGF0IHRoaXMKKyAgICAgKiBzdWJzdGl0dXRpb24gcmVmZXJzIHRvLCBhbmQgdGhlIHJlc3VsdCBpcyBpbnNlcnRlZCBpbnRvIHRoZSByZXN1bHQKKyAgICAgKiBzdHJpbmcuCisgICAgICogQHBhcmFtIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkCisgICAgICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHBlcmZvcm1pbmcgdGhlIG9wcmVyYXRpb24gb24gdGhlIG51bWJlcgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBkb3VibGUgdHJhbnNmb3JtTnVtYmVyKGRvdWJsZSBudW1iZXIpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHBhcnNpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgYSBzdHJpbmcgdXNpbmcgdGhlIHJ1bGUgc2V0IG9yIERlY2ltYWxGb3JtYXQgYmVsb25naW5nCisgICAgICogdG8gdGhpcyBzdWJzdGl0dXRpb24uICBJZiB0aGVyZSdzIGEgbWF0Y2gsIGEgbWF0aGVtYXRpY2FsCisgICAgICogb3BlcmF0aW9uICh0aGUgaW52ZXJzZSBvZiB0aGUgb25lIHVzZWQgaW4gZm9ybWF0dGluZykgaXMKKyAgICAgKiBwZXJmb3JtZWQgb24gdGhlIHJlc3VsdCBvZiB0aGUgcGFyc2UgYW5kIHRoZSB2YWx1ZSBwYXNzZWQgaW4KKyAgICAgKiBhbmQgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4gIFRoZSBwYXJzZSBwb3NpdGlvbiBpcyB1cGRhdGVkIHRvCisgICAgICogcG9pbnQgdG8gdGhlIGZpcnN0IHVubWF0Y2hlZCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgc3RyaW5nIHRvIHBhcnNlCisgICAgICogQHBhcmFtIHBhcnNlUG9zaXRpb24gT24gZW50cnksIGlnbm9yZWQsIGJ1dCBhc3N1bWVkIHRvIGJlIDAuCisgICAgICogT24gZXhpdCwgdGhpcyBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBmaXJzdCB1bm1hdGNoZWQKKyAgICAgKiBjaGFyYWN0ZXIgKG9yIDAgaWYgdGhlIHN1YnN0aXR1dGlvbiBkaWRuJ3QgbWF0Y2gpCisgICAgICogQHBhcmFtIGJhc2VWYWx1ZSBBIHBhcnRpYWwgcGFyc2UgcmVzdWx0IHRoYXQgc2hvdWxkIGJlCisgICAgICogY29tYmluZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoaXMgcGFyc2UKKyAgICAgKiBAcGFyYW0gdXBwZXJCb3VuZCBXaGVuIHNlYXJjaGluZyB0aGUgcnVsZSBzZXQgZm9yIGEgcnVsZQorICAgICAqIG1hdGNoaW5nIHRoZSBzdHJpbmcgcGFzc2VkIGluLCBvbmx5IHJ1bGVzIHdpdGggYmFzZSB2YWx1ZXMKKyAgICAgKiBsb3dlciB0aGFuIHRoaXMgYXJlIGNvbnNpZGVyZWQKKyAgICAgKiBAcGFyYW0gbGVuaWVudFBhcnNlIElmIHRydWUgYW5kIG1hdGNoaW5nIGFnYWluc3QgcnVsZXMgZmFpbHMsCisgICAgICogdGhlIHN1YnN0aXR1dGlvbiB3aWxsIGFsc28gdHJ5IG1hdGNoaW5nIHRoZSB0ZXh0IGFnYWluc3QKKyAgICAgKiBudW1lcmFscyB1c2luZyBhIGRlZmF1bHQtY29zdHJ1Y3RlZCBOdW1iZXJGb3JtYXQuICBJZiBmYWxzZSwKKyAgICAgKiBubyBleHRyYSB3b3JrIGlzIGRvbmUuICAoVGhpcyB2YWx1ZSBpcyBmYWxzZSB3aGVuZXZlciB0aGUKKyAgICAgKiBmb3JtYXR0ZXIgaXNuJ3QgaW4gbGVuaWVudC1wYXJzZSBtb2RlLCBidXQgaXMgYWxzbyBmYWxzZQorICAgICAqIHVuZGVyIHNvbWUgY29uZGl0aW9ucyBldmVuIHdoZW4gdGhlIGZvcm1hdHRlciBfaXNfIGluCisgICAgICogbGVuaWVudC1wYXJzZSBtb2RlLikKKyAgICAgKiBAcmV0dXJuIElmIHRoZXJlJ3MgYSBtYXRjaCwgdGhpcyBpcyB0aGUgcmVzdWx0IG9mIGNvbXBvc2luZworICAgICAqIGJhc2VWYWx1ZSB3aXRoIHdoYXRldmVyIHdhcyByZXR1cm5lZCBmcm9tIG1hdGNoaW5nIHRoZQorICAgICAqIGNoYXJhY3RlcnMuICBUaGlzIHdpbGwgYmUgZWl0aGVyIGEgTG9uZyBvciBhIERvdWJsZS4gIElmIHRoZXJlJ3MKKyAgICAgKiBubyBtYXRjaCB0aGlzIGlzIG5ldyBMb25nKDApIChub3QgbnVsbCksIGFuZCBwYXJzZVBvc2l0aW9uCisgICAgICogaXMgbGVmdCB1bmNoYW5nZWQuCisgICAgICovCisgICAgcHVibGljIE51bWJlciBkb1BhcnNlKFN0cmluZyB0ZXh0LCBQYXJzZVBvc2l0aW9uIHBhcnNlUG9zaXRpb24sIGRvdWJsZSBiYXNlVmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1cHBlckJvdW5kLCBib29sZWFuIGxlbmllbnRQYXJzZSkgeworICAgICAgICBOdW1iZXIgdGVtcFJlc3VsdDsKKworICAgICAgICAvLyBmaWd1cmUgb3V0IHRoZSBoaWdoZXN0IGJhc2UgdmFsdWUgYSBydWxlIGNhbiBoYXZlIGFuZCBtYXRjaAorICAgICAgICAvLyB0aGUgdGV4dCBiZWluZyBwYXJzZWQgKHRoaXMgdmFyaWVzIGFjY29yZGluZyB0byB0aGUgdHlwZSBvZgorICAgICAgICAvLyBzdWJzdGl0dXRpb25zOiBtdWx0aXBsaWVyLCBtb2R1bHVzLCBhbmQgbnVtZXJhdG9yIHN1YnN0aXR1dGlvbnMKKyAgICAgICAgLy8gcmVzdHJpY3QgdGhlIHNlYXJjaCB0byBydWxlcyB3aXRoIGJhc2UgdmFsdWVzIGxvd2VyIHRoYW4gdGhlaXIKKyAgICAgICAgLy8gb3duOyBzYW1lLXZhbHVlIHN1YnN0aXR1dGlvbnMgbGVhdmUgdGhlIHVwcGVyIGJvdW5kIHdoZXJldmVyCisgICAgICAgIC8vIGl0IHdhcywgYW5kIHRoZSBvdGhlcnMgYWxsb3cgYW55IHJ1bGUgdG8gbWF0Y2gKKyAgICAgICAgdXBwZXJCb3VuZCA9IGNhbGNVcHBlckJvdW5kKHVwcGVyQm91bmQpOworCisgICAgICAgIC8vIHVzZSBvdXIgcnVsZSBzZXQgdG8gcGFyc2UgdGhlIHRleHQuICBJZiB0aGF0IGZhaWxzIGFuZAorICAgICAgICAvLyBsZW5pZW50IHBhcnNpbmcgaXMgZW5hYmxlZCAodGhpcyBpcyBhbHdheXMgZmFsc2UgaWYgdGhlCisgICAgICAgIC8vIGZvcm1hdHRlcidzIGxlbmllbnQtcGFyc2luZyBtb2RlIGlzIG9mZiwgYnV0IGl0IG1heSBhbHNvCisgICAgICAgIC8vIGJlIGZhbHNlIGV2ZW4gd2hlbiB0aGUgZm9ybWF0dGVyJ3MgbGVuaWVudC1wYXJzZSBtb2RlIGlzCisgICAgICAgIC8vIG9uKSwgdGhlbiBhbHNvIHRyeSBwYXJzaW5nIHRoZSB0ZXh0IHVzaW5nIGEgZGVmYXVsdC0KKyAgICAgICAgLy8gY29uc3RydWN0ZWQgTnVtYmVyRm9ybWF0CisgICAgICAgIGlmIChydWxlU2V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRlbXBSZXN1bHQgPSBydWxlU2V0LnBhcnNlKHRleHQsIHBhcnNlUG9zaXRpb24sIHVwcGVyQm91bmQpOworICAgICAgICAgICAgaWYgKGxlbmllbnRQYXJzZSAmJiAhcnVsZVNldC5pc0ZyYWN0aW9uU2V0KCkgJiYgcGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpID09IDApIHsKKyAgICAgICAgICAgICAgICB0ZW1wUmVzdWx0ID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKCkucGFyc2UodGV4dCwgcGFyc2VQb3NpdGlvbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gLi4ub3IgdXNlIG91ciBEZWNpbWFsRm9ybWF0IHRvIHBhcnNlIHRoZSB0ZXh0CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZW1wUmVzdWx0ID0gbnVtYmVyRm9ybWF0LnBhcnNlKHRleHQsIHBhcnNlUG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgLy8gaWYgdGhlIHBhcnNlIHdhcyBzdWNjZXNzZnVsLCB3ZSd2ZSBhbHJlYWR5IGFkdmFuY2VkIHRoZSBjYWxsZXIncworICAgICAgICAvLyBwYXJzZSBwb3NpdGlvbiAodGhpcyBpcyB0aGUgb25lIGZ1bmN0aW9uIHRoYXQgZG9lc24ndCBoYXZlIG9uZQorICAgICAgICAvLyBvZiBpdHMgb3duKS4gIERlcml2ZSBhIHBhcnNlIHJlc3VsdCBhbmQgcmV0dXJuIGl0IGFzIGEgTG9uZywKKyAgICAgICAgLy8gaWYgcG9zc2libGUsIG9yIGEgRG91YmxlCisgICAgICAgIGlmIChwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkgIT0gMCkgeworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IHRlbXBSZXN1bHQuZG91YmxlVmFsdWUoKTsKKworICAgICAgICAgICAgLy8gY29tcG9zZVJ1bGVWYWx1ZSgpIHByb2R1Y2VzIGEgZnVsbCBwYXJzZSByZXN1bHQgZnJvbQorICAgICAgICAgICAgLy8gdGhlIHBhcnRpYWwgcGFyc2UgcmVzdWx0IHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBjYWxsZXIgKHRoaXMgaXMgZWl0aGVyIHRoZSBvd25pbmcgcnVsZSdzIGJhc2UgdmFsdWUKKyAgICAgICAgICAgIC8vIG9yIHRoZSBwYXJ0aWFsIHJlc3VsdCBvYnRhaW5lZCBmcm9tIGNvbXBvc2luZyB0aGUKKyAgICAgICAgICAgIC8vIG93bmluZyBydWxlJ3MgYmFzZSB2YWx1ZSB3aXRoIGl0cyBvdGhlciBzdWJzdGl0dXRpb24ncworICAgICAgICAgICAgLy8gcGFyc2UgcmVzdWx0KSBhbmQgdGhlIHBhcnRpYWwgcGFyc2UgcmVzdWx0IG9idGFpbmVkIGJ5CisgICAgICAgICAgICAvLyBtYXRjaGluZyB0aGUgc3Vic3RpdHV0aW9uICh3aGljaCB3aWxsIGJlIHRoZSBzYW1lIHZhbHVlCisgICAgICAgICAgICAvLyB0aGUgY2FsbGVyIHdvdWxkIGdldCBieSBwYXJzaW5nIGp1c3QgdGhpcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgLy8gdGV4dCB3aXRoIFJ1bGVCYXNlZE51bWJlckZvcm1hdC5wYXJzZSgpICkuICBIb3cgdGhlIHR3bworICAgICAgICAgICAgLy8gdmFsdWVzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgZnVsbCBwYXJzZSByZXN1bHQgZGVwZW5kcworICAgICAgICAgICAgLy8gb24gdGhlIHR5cGVzIG9mIHN1YnN0aXR1dGlvbnM6IEZvciBhIHJlZ3VsYXIgcnVsZSwgdGhlCisgICAgICAgICAgICAvLyB1bHRpbWF0ZSByZXN1bHQgaXMgaXRzIG11bHRpcGxpZXIgc3Vic3RpdHV0aW9uJ3MgcmVzdWx0CisgICAgICAgICAgICAvLyB0aW1lcyB0aGUgcnVsZSdzIGRpdmlzb3IgKG9yIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZSkgcGx1cworICAgICAgICAgICAgLy8gdGhlIG1vZHVsdXMgc3Vic3RpdHV0aW9uJ3MgcmVzdWx0ICh3aGljaCB3aWxsIGFjdHVhbGx5CisgICAgICAgICAgICAvLyBzdXBlcnNlZGUgcGFydCBvZiB0aGUgcnVsZSdzIGJhc2UgdmFsdWUpLiAgRm9yIGEgbmVnYXRpdmUtCisgICAgICAgICAgICAvLyBudW1iZXIgcnVsZSwgdGhlIHJlc3VsdCBpcyB0aGUgbmVnYXRpdmUgb2YgaXRzIHN1YnN0aXR1dGlvbidzCisgICAgICAgICAgICAvLyByZXN1bHQuICBGb3IgYSBmcmFjdGlvbiBydWxlLCBpdCdzIHRoZSBzdW0gb2YgaXRzIHR3bworICAgICAgICAgICAgLy8gc3Vic3RpdHV0aW9uIHJlc3VsdHMuICBGb3IgYSBydWxlIGluIGEgZnJhY3Rpb24gcnVsZSBzZXQsCisgICAgICAgICAgICAvLyBpdCdzIHRoZSBudW1lcmF0b3Igc3Vic3RpdHV0aW9uJ3MgcmVzdWx0IGRpdmlkZWQgYnkKKyAgICAgICAgICAgIC8vIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZS4gIFJlc3VsdHMgZnJvbSBzYW1lLXZhbHVlIHN1YnN0aXR1dGlvbnMKKyAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSBiYWNrIHVwYXJkLCBhbmQgbnVsbCBzdWJzdGl0dXRpb25zIGRvbid0IGFmZmVjdAorICAgICAgICAgICAgLy8gdGhlIHJlc3VsdC4KKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBvc2VSdWxlVmFsdWUocmVzdWx0LCBiYXNlVmFsdWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAobG9uZylyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcoKGxvbmcpcmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGUocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgcGFyc2Ugd2FzIFVOc3VjY2Vzc2Z1bCwgcmV0dXJuIDAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wUmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVyaXZlcyBhIG5ldyB2YWx1ZSBmcm9tIHRoZSB0d28gdmFsdWVzIHBhc3NlZCBpbi4gIFRoZSB0d28gdmFsdWVzCisgICAgICogYXJlIHR5cGljYWxseSBlaXRoZXIgdGhlIGJhc2UgdmFsdWVzIG9mIHR3byBydWxlcyAodGhlIG9uZSBjb250YWluaW5nCisgICAgICogdGhlIHN1YnN0aXR1dGlvbiBhbmQgdGhlIG9uZSBtYXRjaGluZyB0aGUgc3Vic3RpdHV0aW9uKSBvciBwYXJ0aWFsCisgICAgICogcGFyc2UgcmVzdWx0cyBkZXJpdmVkIGluIHNvbWUgb3RoZXIgd2F5LiAgVGhlIG9wZXJhdGlvbiBpcyBnZW5lcmFsbHkKKyAgICAgKiB0aGUgaW52ZXJzZSBvZiB0aGUgb3BlcmF0aW9uIHBlcmZvcm1lZCBieSB0cmFuc2Zvcm1OdW1iZXIoKS4KKyAgICAgKiBAcGFyYW0gbmV3UnVsZVZhbHVlIFRoZSB2YWx1ZSBwcm9kdWNlZCBieSBtYXRjaGluZyB0aGlzIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBvbGRSdWxlVmFsdWUgVGhlIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgc3Vic3RpdHV0aW9uCisgICAgICogYnkgdGhlIHJ1bGUgdGhhdCBvd25zIGl0CisgICAgICogQHJldHVybiBBIHRoaXJkIHZhbHVlIGRlcml2ZWQgZnJvbSB0aGUgb3RoZXIgdHdvLCByZXByZXNlbnRpbmcgYQorICAgICAqIHBhcnRpYWwgcGFyc2UgcmVzdWx0CisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGRvdWJsZSBjb21wb3NlUnVsZVZhbHVlKGRvdWJsZSBuZXdSdWxlVmFsdWUsIGRvdWJsZSBvbGRSdWxlVmFsdWUpOworCisgICAgLyoqCisgICAgICogQ2FsY3VsYXRlcyBhbiB1cHBlciBib3VuZCB3aGVuIHNlYXJjaGluZyBmb3IgYSBydWxlIHRoYXQgbWF0Y2hlcworICAgICAqIHRoaXMgc3Vic3RpdHV0aW9uLiAgUnVsZXMgd2l0aCBiYXNlIHZhbHVlcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwKKyAgICAgKiB0byB1cHBlckJvdW5kIGFyZSBub3QgY29uc2lkZXJlZC4KKyAgICAgKiBAcGFyYW0gb2xkVXBwZXJCb3VuZCBUaGUgY3VycmVudCB1cHBlci1ib3VuZCBzZXR0aW5nLiAgVGhlIG5ldworICAgICAqIHVwcGVyIGJvdW5kIGNhbid0IGJlIGFueSBoaWdoZXIuCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGRvdWJsZSBjYWxjVXBwZXJCb3VuZChkb3VibGUgb2xkVXBwZXJCb3VuZCk7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gc2ltcGxlIGFjY2Vzc29ycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN1YnN0aXR1dGlvbidzIHBvc2l0aW9uIGluIHRoZSBydWxlIHRoYXQgb3ducyBpdC4KKyAgICAgKiBAcmV0dXJuIFRoZSBzdWJzdGl0dXRpb24ncyBwb3NpdGlvbiBpbiB0aGUgcnVsZSB0aGF0IG93bnMgaXQuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBnZXRQb3MoKSB7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIHVzZWQgaW4gdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YKKyAgICAgKiBzdWJzdGl0dXRpb25zIG9mIHRoaXMgdHlwZS4gIFVzZWQgYnkgdG9TdHJpbmcoKS4KKyAgICAgKiBAcmV0dXJuIFRoaXMgc3Vic3RpdHV0aW9uJ3MgdG9rZW4gY2hhcmFjdGVyLgorICAgICAqLworICAgIGFic3RyYWN0IGNoYXIgdG9rZW5DaGFyKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIG51bGwgc3Vic3RpdHV0aW9uLiAgKFdlIGRpZG4ndCBkbyB0aGlzCisgICAgICogd2l0aCBpbnN0YW5jZW9mIHBhcnRpYWxseSBiZWNhdXNlIGl0IGNhdXNlcyBzb3VyY2UgZmlsZXMgdG8KKyAgICAgKiBwcm9saWZlcmF0ZSBhbmQgcGFydGlhbGx5IGJlY2F1c2Ugd2UgaGF2ZSB0byBwb3J0IHRoaXMgdG8gQysrLikKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgTnVsbFN1YnN0aXR1dGlvbgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzTnVsbFN1YnN0aXR1dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgbW9kdWx1cyBzdWJzdGl0dXRpb24uICAoV2UgZGlkbid0IGRvIHRoaXMKKyAgICAgKiB3aXRoIGluc3RhbmNlb2YgcGFydGlhbGx5IGJlY2F1c2UgaXQgY2F1c2VzIHNvdXJjZSBmaWxlcyB0bworICAgICAqIHByb2xpZmVyYXRlIGFuZCBwYXJ0aWFsbHkgYmVjYXVzZSB3ZSBoYXZlIHRvIHBvcnQgdGhpcyB0byBDKysuKQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBNb2R1bHVzU3Vic3RpdHV0aW9uCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNNb2R1bHVzU3Vic3RpdHV0aW9uKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNhbWVWYWx1ZVN1YnN0aXR1dGlvbgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogQSBzdWJzdGl0dXRpb24gdGhhdCBwYXNzZXMgdGhlIHZhbHVlIHBhc3NlZCB0byBpdCB0aHJvdWdoIHVuY2hhbmdlZC4KKyAqIFJlcHJlc2VudGVkIGJ5ID09IGluIHJ1bGUgZGVzY3JpcHRpb25zLgorICovCitjbGFzcyBTYW1lVmFsdWVTdWJzdGl0dXRpb24gZXh0ZW5kcyBORlN1YnN0aXR1dGlvbiB7CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFB1dHMgYSBjb3B5cmlnaHQgaW4gdGhlIC5jbGFzcyBmaWxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodE5vdGljZQorICAgICAgICA9ICJDb3B5cmlnaHQgXHUwMGE5MTk5Ny0xOTk4IElCTSBDb3JwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0cnVjdGlvbgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBTYW1lVmFsdWVTdWJzdHV0aW9uLiAgVGhpcyBmdW5jdGlvbiBqdXN0IHVzZXMgdGhlCisgICAgICogc3VwZXJjbGFzcyBjb25zdHJ1Y3RvciwgYnV0IGl0IHBlcmZvcm1zIGEgY2hlY2sgdGhhdCB0aGlzCisgICAgICogc3Vic3RpdHV0aW9uIGRvZXNuJ3QgY2FsbCB0aGUgcnVsZSBzZXQgdGhhdCBvd25zIGl0LCBzaW5jZSB0aGF0CisgICAgICogd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uCisgICAgICovCisgICAgU2FtZVZhbHVlU3Vic3RpdHV0aW9uKGludCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5GUnVsZVNldCBydWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgc3VwZXIocG9zLCBydWxlU2V0LCBmb3JtYXR0ZXIsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9uLmVxdWFscygiPT0iKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiPT0gaXMgbm90IGEgbGVnYWwgdG9rZW4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBmb3JtYXR0aW5nCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUmV0dXJucyAibnVtYmVyIiB1bmNoYW5nZWQuCisgICAgICogQHJldHVybiAibnVtYmVyIgorICAgICAqLworICAgIHB1YmxpYyBsb25nIHRyYW5zZm9ybU51bWJlcihsb25nIG51bWJlcikgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgIm51bWJlciIgdW5jaGFuZ2VkLgorICAgICAqIEByZXR1cm4gIm51bWJlciIKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIHRyYW5zZm9ybU51bWJlcihkb3VibGUgbnVtYmVyKSB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHBhcnNpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIG5ld1J1bGVWYWx1ZSBhbmQgaWdub3JlcyBvbGRSdWxlVmFsdWUuIChUaGUgdmFsdWUgd2UgZ290CisgICAgICogbWF0Y2hpbmcgdGhlIHN1YnN0aXR1dGlvbiBzdXBlcnNlZGVzIHRoZSB2YWx1ZSBvZiB0aGUgcnVsZQorICAgICAqIHRoYXQgb3ducyB0aGUgc3Vic3RpdHV0aW9uLikKKyAgICAgKiBAcGFyYW0gbmV3UnVsZVZhbHVlIFRoZSB2YWx1ZSByZXN1bHRpbmcgZnJvbSBtYXRjaGluZyB0aGUgc3Vic3RpdHVpb24KKyAgICAgKiBAcGFyYW0gb2xkUnVsZVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcnVsZSBjb250YWluaW5nIHRoZQorICAgICAqIHN1YnN0aXR1dGlvbi4KKyAgICAgKiBAcmV0dXJuIG5ld1J1bGVWYWx1ZQorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgY29tcG9zZVJ1bGVWYWx1ZShkb3VibGUgbmV3UnVsZVZhbHVlLCBkb3VibGUgb2xkUnVsZVZhbHVlKSB7CisgICAgICAgIHJldHVybiBuZXdSdWxlVmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2FtZVZhbHVlU3Vic3RpdHV0aW9uIGRvZXNuJ3QgY2hhbmdlIHRoZSB1cHBlciBib3VuZC4KKyAgICAgKiBAcGFyYW0gb2xkVXBwZXJCb3VuZCBUaGUgY3VycmVudCB1cHBlciBib3VuZC4KKyAgICAgKiBAcmV0dXJuIG9sZFVwcGVyQm91bmQKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIGNhbGNVcHBlckJvdW5kKGRvdWJsZSBvbGRVcHBlckJvdW5kKSB7CisgICAgICAgIHJldHVybiBvbGRVcHBlckJvdW5kOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBzaW1wbGUgYWNjZXNzb3IKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBUaGUgdG9rZW4gY2hhcmFjdGVyIGZvciBhIFNhbWVWYWx1ZVN1YnN0aXR1dGlvbiBpcyA9LgorICAgICAqIEByZXR1cm4gJz0nCisgICAgICovCisgICAgY2hhciB0b2tlbkNoYXIoKSB7CisgICAgICAgIHJldHVybiAnPSc7CisgICAgfQorfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE11bHRpcGxpZXJTdWJzdGl0dXRpb24KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIEEgc3Vic3RpdHV0aW9uIHRoYXQgZGl2aWRlcyB0aGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZCBieSB0aGUgcnVsZSdzCisgKiBkaXZpc29yIGFuZCBmb3JtYXRzIHRoZSBxdW90aWVudC4gIFJlcHJlc2VudGVkIGJ5ICZsdDsmbHQ7IGluIG5vcm1hbAorICogcnVsZXMuCisgKi8KK2NsYXNzIE11bHRpcGxpZXJTdWJzdGl0dXRpb24gZXh0ZW5kcyBORlN1YnN0aXR1dGlvbiB7CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFB1dHMgYSBjb3B5cmlnaHQgaW4gdGhlIC5jbGFzcyBmaWxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodE5vdGljZQorICAgICAgICA9ICJDb3B5cmlnaHQgXHUwMGE5MTk5Ny0xOTk4IElCTSBDb3JwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGRhdGEgbWVtYmVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRoZSBkaXZpc29yIG9mIHRoZSBydWxlIHRoYXQgb3ducyB0aGlzIHN1YnN0aXR1dGlvbi4KKyAgICAgKi8KKyAgICBkb3VibGUgZGl2aXNvcjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjb25zdHJ1Y3Rpb24KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgTXVsdGlwbGllclN1YnN0aXR1dGlvbi4gIFRoaXMgdXNlcyB0aGUgc3VwZXJjbGFzcworICAgICAqIGNvbnN0cnVjdG9yIHRvIGluaXRpYWxpemUgbW9zdCBtZW1iZXJzLCBidXQgdGhpcyBzdWJzdGl0dXRpb24KKyAgICAgKiBhbHNvIG1haW50YWlucyBpdHMgb3duIGNvcHkgb2YgaXRzIHJ1bGUncyBkaXZpc29yLgorICAgICAqIEBwYXJhbSBwb3MgVGhlIHN1YnN0aXR1dGlvbidzIHBvc2l0aW9uIGluIGl0cyBydWxlJ3MgcnVsZSB0ZXh0CisgICAgICogQHBhcmFtIGRpdmlzb3IgVGhlIG93bmluZyBydWxlJ3MgZGl2aXNvcgorICAgICAqIEBydWxlU2V0IFRoZSBydWxlU2V0IHRoaXMgc3Vic3RpdHV0aW9uIHVzZXMgdG8gZm9ybWF0IGl0cyByZXN1bHQKKyAgICAgKiBAZm9ybWF0dGVyIFRoZSBmb3JtYXR0ZXIgdGhhdCBvd25zIHRoaXMgc3Vic3RpdHV0aW9uCisgICAgICogQGRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiBkZXNjcmliaW5nIHRoaXMgc3Vic3RpdHV0aW9uCisgICAgICovCisgICAgTXVsdGlwbGllclN1YnN0aXR1dGlvbihpbnQgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRpdmlzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBORlJ1bGVTZXQgcnVsZVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgc3VwZXIocG9zLCBydWxlU2V0LCBmb3JtYXR0ZXIsIGRlc2NyaXB0aW9uKTsKKworICAgICAgICAvLyB0aGUgb3duaW5nIHJ1bGUncyBkaXZpc29yIGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoaXMKKyAgICAgICAgLy8gc3Vic3RpdHV0aW9uLiAgUmF0aGVyIHRoYW4ga2VlcGluZyBhIGJhY2stcG9pbnRlciB0byB0aGUKKyAgICAgICAgLy8gcnVsZSwgd2Uga2VlcCBhIGNvcHkgb2YgdGhlIGRpdmlzb3IKKyAgICAgICAgdGhpcy5kaXZpc29yID0gZGl2aXNvcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBzdWJzdGl0dXRpb24ncyBkaXZpc29yIGJhc2VkIG9uIHRoZSB2YWx1ZXMgcGFzc2VkIGluLgorICAgICAqIEBwYXJhbSByYWRpeCBUaGUgcmFkaXggb2YgdGhlIGRpdmlzb3IuCisgICAgICogQHBhcmFtIGV4cG9uZW50IFRoZSBleHBvbmVudCBvZiB0aGUgZGl2aXNvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREaXZpc29yKGludCByYWRpeCwgaW50IGV4cG9uZW50KSB7CisgICAgICAgIGRpdmlzb3IgPSBNYXRoLnBvdyhyYWRpeCwgZXhwb25lbnQpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBib2lsZXJwbGF0ZQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEF1Z21lbnRzIHRoZSBzdXBlcmNsYXNzJ3MgZXF1YWxzKCkgZnVuY3Rpb24gYnkgY29tcGFyaW5nIGRpdmlzb3JzLgorICAgICAqIEBwYXJhbSB0aGF0IFRoZSBvdGhlciBzdWJzdGl0dXRpb24KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBzdWJzdGl0dXRpb25zIGFyZSBmdW5jdGlvbmFsbHkgZXF1YWwKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IHRoYXQpIHsKKyAgICAgICAgaWYgKHN1cGVyLmVxdWFscyh0aGF0KSkgeworICAgICAgICAgICAgTXVsdGlwbGllclN1YnN0aXR1dGlvbiB0aGF0MiA9IChNdWx0aXBsaWVyU3Vic3RpdHV0aW9uKXRoYXQ7CisKKyAgICAgICAgICAgIHJldHVybiBkaXZpc29yID09IHRoYXQyLmRpdmlzb3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZm9ybWF0dGluZworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERpdmlkZXMgdGhlIG51bWJlciBieSB0aGUgcnVsZSdzIGRpdmlzb3IgYW5kIHJldHVybnMgdGhlIHF1b3RpZW50LgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQuCisgICAgICogQHJldHVybiAibnVtYmVyIiBkaXZpZGVkIGJ5IHRoZSBydWxlJ3MgZGl2aXNvcgorICAgICAqLworICAgIHB1YmxpYyBsb25nIHRyYW5zZm9ybU51bWJlcihsb25nIG51bWJlcikgeworICAgICAgICByZXR1cm4gKGxvbmcpTWF0aC5mbG9vcihudW1iZXIgLyBkaXZpc29yKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEaXZpZGVzIHRoZSBudW1iZXIgYnkgdGhlIHJ1bGUncyBkaXZpc29yIGFuZCByZXR1cm5zIHRoZSBxdW90aWVudC4KKyAgICAgKiBUaGlzIGlzIGFuIGludGVncmFsIHF1b3RpZW50IGlmIHdlJ3JlIGZpbGxpbmcgaW4gdGhlIHN1YnN0aXR1dGlvbgorICAgICAqIHVzaW5nIGFub3RoZXIgcnVsZSBzZXQsIGJ1dCBpdCdzIHRoZSBmdWxsIHF1b3RpZW50IChpbnRlZ3JhbCBhbmQKKyAgICAgKiBmcmFjdGlvbmFsIHBhcnRzKSBpZiB3ZSdyZSBmaWxsaW5nIGluIHRoZSBzdWJzdGl0dXRpb24gdXNpbmcKKyAgICAgKiBhIERlY2ltYWxGb3JtYXQuICAoVGhpcyBhbGxvd3MgdGhpbmdzIHN1Y2ggYXMgIjEuMiBtaWxsaW9uIi4pCisgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZAorICAgICAqIEByZXR1cm4gIm51bWJlciIgZGl2aWRlZCBieSB0aGUgcnVsZSdzIGRpdmlzb3IKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIHRyYW5zZm9ybU51bWJlcihkb3VibGUgbnVtYmVyKSB7CisgICAgICAgIGlmIChydWxlU2V0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudW1iZXIgLyBkaXZpc29yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gZGl2aXNvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gcGFyc2luZworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgbmV3UnVsZVZhbHVlIHRpbWVzIHRoZSBkaXZpc29yLiAgSWdub3JlcyBvbGRSdWxlVmFsdWUuCisgICAgICogKFRoZSByZXN1bHQgb2YgbWF0Y2hpbmcgYSA8PCBzdWJzdGl0dXRpb24gc3VwZXJzZWRlcyB0aGUgYmFzZQorICAgICAqIHZhbHVlIG9mIHRoZSBydWxlIHRoYXQgY29udGFpbnMgaXQuKQorICAgICAqIEBwYXJhbSBuZXdSdWxlVmFsdWUgVGhlIHJlc3VsdCBvZiBtYXRjaGluZyB0aGUgc3Vic3RpdHV0aW9uCisgICAgICogQHBhcmFtIG9sZFJ1bGVWYWx1ZSBUaGUgYmFzZSB2YWx1ZSBvZiB0aGUgcnVsZSBjb250YWluaW5nIHRoZQorICAgICAqIHN1YnN0aXR1dGlvbgorICAgICAqIEByZXR1cm4gbmV3UnVsZVZhbHVlICogZGl2aXNvcgorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgY29tcG9zZVJ1bGVWYWx1ZShkb3VibGUgbmV3UnVsZVZhbHVlLCBkb3VibGUgb2xkUnVsZVZhbHVlKSB7CisgICAgICAgIHJldHVybiBuZXdSdWxlVmFsdWUgKiBkaXZpc29yOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHVwcGVyIGJvdW5kIGRvd24gdG8gdGhlIHJ1bGUncyBkaXZpc29yLgorICAgICAqIEBwYXJhbSBvbGRVcHBlckJvdW5kIElnbm9yZWQuCisgICAgICogQHJldHVybiBUaGUgcnVsZSdzIGRpdmlzb3IuCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSBjYWxjVXBwZXJCb3VuZChkb3VibGUgb2xkVXBwZXJCb3VuZCkgeworICAgICAgICByZXR1cm4gZGl2aXNvcjsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gc2ltcGxlIGFjY2Vzc29yCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogVGhlIHRva2VuIGNoYXJhY3RlciBmb3IgYSBtdWx0aXBsaWVyIHN1YnN0aXR1dGlvbiBpcyAmbHQ7LgorICAgICAqIEByZXR1cm4gJyZsdDsnCisgICAgICovCisgICAgY2hhciB0b2tlbkNoYXIoKSB7CisgICAgICAgIHJldHVybiAnPCc7CisgICAgfQorfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1vZHVsdXNTdWJzdGl0dXRpb24KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIEEgc3Vic3RpdHV0aW9uIHRoYXQgZGl2aWRlcyB0aGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZCBieSB0aGUgaXRzIHJ1bGUncworICogZGl2aXNvciBhbmQgZm9ybWF0cyB0aGUgcmVtYWluZGVyLiAgUmVwcmVzZW50ZWQgYnkgIiZndDsmZ3Q7IiBpbiBhCisgKiByZWd1bGFyIHJ1bGUuCisgKi8KK2NsYXNzIE1vZHVsdXNTdWJzdGl0dXRpb24gZXh0ZW5kcyBORlN1YnN0aXR1dGlvbiB7CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFB1dHMgYSBjb3B5cmlnaHQgaW4gdGhlIC5jbGFzcyBmaWxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodE5vdGljZQorICAgICAgICA9ICJDb3B5cmlnaHQgXHUwMGE5MTk5Ny0xOTk4IElCTSBDb3JwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGRhdGEgbWVtYmVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRoZSBkaXZpc29yIG9mIHRoZSBydWxlIG93bmluZyB0aGlzIHN1YnN0aXR1dGlvbgorICAgICAqLworICAgIGRvdWJsZSBkaXZpc29yOworCisgICAgLyoqCisgICAgICogSWYgdGhpcyBpcyBhICZndDsmZ3Q7Jmd0OyBzdWJzdGl0dXRpb24sIHRoZSBydWxlIHRvIHVzZSB0byBmb3JtYXQKKyAgICAgKiB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlLiAgT3RoZXJ3aXNlLCBudWxsLgorICAgICAqLworICAgIE5GUnVsZSBydWxlVG9Vc2U7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY29uc3RydWN0aW9uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIE1vZHVsdXNTdWJzdHV0aW9uLiAgSW4gYWRkaXRpb24gdG8gdGhlIGluaGVyaXRlZAorICAgICAqIG1lbWJlcnMsIGEgTW9kdWx1c1N1YnN0aXR1dGlvbiBrZWVwcyB0cmFjayBvZiB0aGUgZGl2aXNvciBvZiB0aGUKKyAgICAgKiBydWxlIHRoYXQgb3ducyBpdCwgYW5kIG1heSBhbHNvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHJ1bGUKKyAgICAgKiB0aGF0IHByZWNlZGVzIHRoZSBydWxlIGNvbnRhaW5pbmcgdGhpcyBzdWJzdGl0dXRpb24gaW4gdGhlIHJ1bGUKKyAgICAgKiBzZXQncyBydWxlIGxpc3QuCisgICAgICogQHBhcmFtIHBvcyBUaGUgc3Vic3RpdHV0aW9uJ3MgcG9zaXRpb24gaW4gaXRzIHJ1bGUncyBydWxlIHRleHQKKyAgICAgKiBAcGFyYW0gZGl2aXNvciBUaGUgZGl2aXNvciBvZiB0aGUgcnVsZSB0aGF0IG93bnMgdGhpcyBzdWJzdGl0dXRpb24KKyAgICAgKiBAcGFyYW0gcnVsZVByZWRlY2Vzc29yIFRoZSBydWxlIHRoYXQgcHJlY2VkZXMgdGhpcyBzdWJzdGl0dXRpb24ncworICAgICAqIHJ1bGUgaW4gaXRzIHJ1bGUgc2V0J3MgcnVsZSBsaXN0CisgICAgICogQHBhcmFtIGZvcm1hdHRlciBUaGUgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IG93bmluZyB0aGlzIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgc3Vic3RpdHV0aW9uCisgICAgICovCisgICAgTW9kdWx1c1N1YnN0aXR1dGlvbihpbnQgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRpdmlzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBORlJ1bGUgcnVsZVByZWRlY2Vzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgTkZSdWxlU2V0IHJ1bGVTZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIHN1cGVyKHBvcywgcnVsZVNldCwgZm9ybWF0dGVyLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgLy8gdGhlIG93bmluZyBydWxlJ3MgZGl2aXNvciBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgdGhpcworICAgICAgICAvLyBzdWJzdGl0dXRpb246IHJhdGhlciB0aGFuIGtlZXBpbmcgYSBiYWNrcG9pbnRlciB0byB0aGUgcnVsZSwKKyAgICAgICAgLy8gd2Uga2VlcCBhIGNvcHkgb2YgdGhlIGRpdmlzb3IKKyAgICAgICAgdGhpcy5kaXZpc29yID0gZGl2aXNvcjsKKworICAgICAgICAvLyB0aGUgPj4+IHRva2VuIGRvZXNuJ3QgYWx0ZXIgaG93IHRoaXMgc3Vic3RpdHVpb24gY2FsY3VsYXRlcyB0aGUKKyAgICAgICAgLy8gdmFsdWVzIGl0IHVzZXMgZm9yIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcsIGJ1dCBpdCBjaGFuZ2VzCisgICAgICAgIC8vIHdoYXQncyBkb25lIHdpdGggdGhhdCB2YWx1ZSBhZnRlciBpdCdzIG9idGFpbmVkOiA+Pj4gc2hvcnQtCisgICAgICAgIC8vIGNpcmN1aXRzIHRoZSBydWxlLXNlYXJjaCBwcm9jZXNzIGFuZCBnb2VzIHN0cmFpZ2h0IHRvIHRoZQorICAgICAgICAvLyBzcGVjaWZpZWQgcnVsZSB0byBmb3JtYXQgdGhlIHN1YnN0aXR1dGlvbiB2YWx1ZQorICAgICAgICBpZiAoZGVzY3JpcHRpb24uZXF1YWxzKCI+Pj4iKSkgeworICAgICAgICAgICAgcnVsZVRvVXNlID0gcnVsZVByZWRlY2Vzc29yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcnVsZVRvVXNlID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE1ha2VzIHRoZSBzdWJzdGl0dXRpb24ncyBkaXZpc29yIGNvbmZvcm0gdG8gdGhhdCBvZiB0aGUgcnVsZQorICAgICAqIHRoYXQgb3ducyBpdC4gIFVzZWQgd2hlbiB0aGUgZGl2aXNvciBpcyBkZXRlcm1pbmVkIGFmdGVyIGNyZWF0aW9uLgorICAgICAqIEBwYXJhbSByYWRpeCBUaGUgcmFkaXggb2YgdGhlIGRpdnNvci4KKyAgICAgKiBAcGFyYW0gZXhwb25lbnQgVGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldERpdmlzb3IoaW50IHJhZGl4LCBpbnQgZXhwb25lbnQpIHsKKyAgICAgICAgZGl2aXNvciA9IE1hdGgucG93KHJhZGl4LCBleHBvbmVudCk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGJvaWxlcnBsYXRlCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQXVnbWVudHMgdGhlIGluaGVyaXRlZCBlcXVhbHMoKSBmdW5jdGlvbiBieSBjb21wYXJpbmcgZGl2aXNvcnMgYW5kCisgICAgICogcnVsZVRvVXNlLgorICAgICAqIEBwYXJhbSB0aGF0IFRoZSBvdGhlciBzdWJzdGl0dXRpb24KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBzdWJzdGl0dXRpb25zIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgdGhhdCkgeworICAgICAgICBpZiAoc3VwZXIuZXF1YWxzKHRoYXQpKSB7CisgICAgICAgICAgICBNb2R1bHVzU3Vic3RpdHV0aW9uIHRoYXQyID0gKE1vZHVsdXNTdWJzdGl0dXRpb24pdGhhdDsKKworICAgICAgICAgICAgcmV0dXJuIGRpdmlzb3IgPT0gdGhhdDIuZGl2aXNvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBmb3JtYXR0aW5nCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogSWYgdGhpcyBpcyBhICZndDsmZ3Q7Jmd0OyBzdWJzdGl0dXRpb24sIHVzZSBydWxlVG9Vc2UgdG8gZmlsbCBpbgorICAgICAqIHRoZSBzdWJzdGl0dXRpb24uICBPdGhlcndpc2UsIGp1c3QgdXNlIHRoZSBzdXBlcmNsYXNzIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAdG9JbnNlcnRJbnRvIFRoZSBzdHJpbmcgdG8gaW5zZXJ0IHRoZSByZXN1bHQgb2YgdGhpcyBzdWJzdGl0dXRpb24KKyAgICAgKiBpbnRvCisgICAgICogQHBhcmFtIHBvcyBUaGUgcG9zaXRpb24gb2YgdGhlIHJ1bGUgdGV4dCBpbiB0b0luc2VydEludG8KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkb1N1YnN0aXR1dGlvbihsb25nIG51bWJlciwgU3RyaW5nQnVmZmVyIHRvSW5zZXJ0SW50bywgaW50IHBvcykgeworICAgICAgICAvLyBpZiB0aGlzIGlzbid0IGEgPj4+IHN1YnN0aXR1dGlvbiwganVzdCB1c2UgdGhlIGluaGVyaXRlZCB2ZXJzaW9uCisgICAgICAgIC8vIG9mIHRoaXMgZnVuY3Rpb24gKHdoaWNoIHVzZXMgZWl0aGVyIGEgcnVsZSBzZXQgb3IgYSBEZWNpbWFsRm9ybWF0CisgICAgICAgIC8vIHRvIGZvcm1hdCBpdHMgc3Vic3RpdHV0aW9uIHZhbHVlKQorICAgICAgICBpZiAocnVsZVRvVXNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHN1cGVyLmRvU3Vic3RpdHV0aW9uKG51bWJlciwgdG9JbnNlcnRJbnRvLCBwb3MpOworCisgICAgICAgIC8vIGEgPj4+IHN1YnN0aXR1dGlvbiBnb2VzIHN0cmFpZ2h0IHRvIGEgcGFydGljdWxhciBydWxlIHRvCisgICAgICAgIC8vIGZvcm1hdCB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb25nIG51bWJlclRvRm9ybWF0ID0gdHJhbnNmb3JtTnVtYmVyKG51bWJlcik7CisgICAgICAgICAgICBydWxlVG9Vc2UuZG9Gb3JtYXQobnVtYmVyVG9Gb3JtYXQsIHRvSW5zZXJ0SW50bywgcG9zICsgdGhpcy5wb3MpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgdGhpcyBpcyBhICZndDsmZ3Q7Jmd0OyBzdWJzdGl0dXRpb24sIHVzZSBydWxlVG9Vc2UgdG8gZmlsbCBpbgorICAgICAqIHRoZSBzdWJzdGl0dXRpb24uICBPdGhlcndpc2UsIGp1c3QgdXNlIHRoZSBzdXBlcmNsYXNzIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAdG9JbnNlcnRJbnRvIFRoZSBzdHJpbmcgdG8gaW5zZXJ0IHRoZSByZXN1bHQgb2YgdGhpcyBzdWJzdGl0dXRpb24KKyAgICAgKiBpbnRvCisgICAgICogQHBhcmFtIHBvcyBUaGUgcG9zaXRpb24gb2YgdGhlIHJ1bGUgdGV4dCBpbiB0b0luc2VydEludG8KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkb1N1YnN0aXR1dGlvbihkb3VibGUgbnVtYmVyLCBTdHJpbmdCdWZmZXIgdG9JbnNlcnRJbnRvLCBpbnQgcG9zKSB7CisgICAgICAgIC8vIGlmIHRoaXMgaXNuJ3QgYSA+Pj4gc3Vic3RpdHV0aW9uLCBqdXN0IHVzZSB0aGUgaW5oZXJpdGVkIHZlcnNpb24KKyAgICAgICAgLy8gb2YgdGhpcyBmdW5jdGlvbiAod2hpY2ggdXNlcyBlaXRoZXIgYSBydWxlIHNldCBvciBhIERlY2ltYWxGb3JtYXQKKyAgICAgICAgLy8gdG8gZm9ybWF0IGl0cyBzdWJzdGl0dXRpb24gdmFsdWUpCisgICAgICAgIGlmIChydWxlVG9Vc2UgPT0gbnVsbCkgeworICAgICAgICAgICAgc3VwZXIuZG9TdWJzdGl0dXRpb24obnVtYmVyLCB0b0luc2VydEludG8sIHBvcyk7CisKKyAgICAgICAgLy8gYSA+Pj4gc3Vic3RpdHV0aW9uIGdvZXMgc3RyYWlnaHQgdG8gYSBwYXJ0aWN1bGFyIHJ1bGUgdG8KKyAgICAgICAgLy8gZm9ybWF0IHRoZSBzdWJzdGl0dXRpb24gdmFsdWUKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXJUb0Zvcm1hdCA9IHRyYW5zZm9ybU51bWJlcihudW1iZXIpOworCisgICAgICAgICAgICBydWxlVG9Vc2UuZG9Gb3JtYXQobnVtYmVyVG9Gb3JtYXQsIHRvSW5zZXJ0SW50bywgcG9zICsgdGhpcy5wb3MpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGl2aWRlcyB0aGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZCBieSB0aGUgcnVsZSdzIGRpdmlzb3IgYW5kCisgICAgICogcmV0dXJucyB0aGUgcmVtYWluZGVyLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAcmV0dXJuICJudW1iZXIiIG1vZCBkaXZpc29yCisgICAgICovCisgICAgcHVibGljIGxvbmcgdHJhbnNmb3JtTnVtYmVyKGxvbmcgbnVtYmVyKSB7CisgICAgICAgIHJldHVybiAobG9uZylNYXRoLmZsb29yKG51bWJlciAlIGRpdmlzb3IpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERpdmlkZXMgdGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQgYnkgdGhlIHJ1bGUncyBkaXZpc29yIGFuZAorICAgICAqIHJldHVybnMgdGhlIHJlbWFpbmRlci4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkCisgICAgICogQHJldHVybiAibnVtYmVyIiBtb2QgZGl2aXNvcgorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgdHJhbnNmb3JtTnVtYmVyKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyICUgZGl2aXNvcik7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHBhcnNpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBJZiB0aGlzIGlzIGEgJmd0OyZndDsmZ3Q7IHN1YnN0aXR1dGlvbiwgbWF0Y2ggb25seSBhZ2FpbnN0IHJ1bGVUb1VzZS4KKyAgICAgKiBPdGhlcndpc2UsIHVzZSB0aGUgc3VwZXJjbGFzcyBmdW5jdGlvbi4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgc3RyaW5nIHRvIHBhcnNlCisgICAgICogQHBhcmFtIHBhcnNlUG9zaXRpb24gSWdub3JlZCBvbiBlbnRyeSwgdXBkYXRlZCBvbiBleGl0IHRvIHBvaW50IHRvCisgICAgICogdGhlIGZpcnN0IHVubWF0Y2hlZCBjaGFyYWN0ZXIuCisgICAgICogQHBhcmFtIGJhc2VWYWx1ZSBUaGUgcGFydGlhbCBwYXJzZSByZXN1bHQgcHJpb3IgdG8gY2FsbGluZyB0aGlzCisgICAgICogcm91dGluZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgTnVtYmVyIGRvUGFyc2UoU3RyaW5nIHRleHQsIFBhcnNlUG9zaXRpb24gcGFyc2VQb3NpdGlvbiwgZG91YmxlIGJhc2VWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1cHBlckJvdW5kLCBib29sZWFuIGxlbmllbnRQYXJzZSkgeworICAgICAgICAvLyBpZiB0aGlzIGlzbid0IGEgPj4+IHN1YnN0aXR1dGlvbiwgd2UgY2FuIGp1c3QgdXNlIHRoZQorICAgICAgICAvLyBpbmhlcml0ZWQgcGFyc2UoKSByb3V0aW5lIHRvIGRvIHRoZSBwYXJzaW5nCisgICAgICAgIGlmIChydWxlVG9Vc2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmRvUGFyc2UodGV4dCwgcGFyc2VQb3NpdGlvbiwgYmFzZVZhbHVlLCB1cHBlckJvdW5kLCBsZW5pZW50UGFyc2UpOworCisgICAgICAgIC8vIGJ1dCBpZiBpdCBJUyBhID4+PiBzdWJzdGl0dXRpb24sIHdlIGhhdmUgdG8gZG8gaXQgaGVyZTogd2UKKyAgICAgICAgLy8gdXNlIHRoZSBzcGVjaWZpYyBydWxlJ3MgZG9QYXJzZSgpIG1ldGhvZCwgYW5kIHRoZW4gd2UgaGF2ZSB0bworICAgICAgICAvLyBkbyBzb21lIG9mIHRoZSBvdGhlciB3b3JrIG9mIE5GUnVsZVNldC5wYXJzZSgpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOdW1iZXIgdGVtcFJlc3VsdCA9IHJ1bGVUb1VzZS5kb1BhcnNlKHRleHQsIHBhcnNlUG9zaXRpb24sIGZhbHNlLCB1cHBlckJvdW5kKTsKKworICAgICAgICAgICAgaWYgKHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IHRlbXBSZXN1bHQuZG91YmxlVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBvc2VSdWxlVmFsdWUocmVzdWx0LCBiYXNlVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gKGxvbmcpcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZygobG9uZylyZXN1bHQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGhpZ2hlc3QgbXVsdGlwbGUgb2YgdGhlIHJ1bGUncyBkaXZpc29yIHRoYXQgaXRzIGxlc3MKKyAgICAgKiB0aGFuIG9yIGVxdWFsIHRvIG9sZFJ1bGVWYWx1ZSwgcGx1cyBuZXdSdWxlVmFsdWUuICAoVGhlIHJlc3VsdAorICAgICAqIGlzIHRoZSBzdW0gb2YgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBzdWJzdGl0dXRpb24gcGx1cyB0aGUKKyAgICAgKiBiYXNlIHZhbHVlb2YgdGhlIHJ1bGUgY29udGFpbmluZyB0aGUgc3Vic3RpdHV0aW9uLCBidXQgaWYgdGhlCisgICAgICogb3duaW5nIHJ1bGUncyBiYXNlIHZhbHVlIGlzbid0IGFuIGV2ZW4gbXVsdGlwbGUgb2YgaXRzIGRpdmlzb3IsCisgICAgICogd2UgaGF2ZSB0byByb3VuZCBpdCBkb3duIHRvIGEgbXVsdGlwbGUgb2YgdGhlIGRpdmlzb3IsIG9yIHdlCisgICAgICogZ2V0IHVud2FudGVkIGRpZ2l0cyBpbiB0aGUgcmVzdWx0LikKKyAgICAgKiBAcGFyYW0gbmV3UnVsZVZhbHVlIFRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgc3Vic3RpdHV0aW9uCisgICAgICogQHBhcmFtIG9sZFJ1bGVWYWx1ZSBUaGUgYmFzZSB2YWx1ZSBvZiB0aGUgcnVsZSBjb250YWluaW5nIHRoZQorICAgICAqIHN1YnN0aXR1dGlvbgorICAgICAqIEByZXR1cm4gKG9sZFJ1bGVWYWx1ZSAtIChvbGRSdWxlVmFsdWUgJSBkaXZpc29yKSkgKyBuZXdSdWxlVmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIGNvbXBvc2VSdWxlVmFsdWUoZG91YmxlIG5ld1J1bGVWYWx1ZSwgZG91YmxlIG9sZFJ1bGVWYWx1ZSkgeworICAgICAgICByZXR1cm4gKG9sZFJ1bGVWYWx1ZSAtIChvbGRSdWxlVmFsdWUgJSBkaXZpc29yKSkgKyBuZXdSdWxlVmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgdXBwZXIgYm91bmQgZG93biB0byB0aGUgb3duaW5nIHJ1bGUncyBkaXZpc29yCisgICAgICogQHBhcmFtIG9sZFVwcGVyQm91bmQgSWdub3JlZAorICAgICAqIEByZXR1cm4gVGhlIG93bmluZyBydWxlJ3MgZHZpc29yCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSBjYWxjVXBwZXJCb3VuZChkb3VibGUgb2xkVXBwZXJCb3VuZCkgeworICAgICAgICByZXR1cm4gZGl2aXNvcjsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gc2ltcGxlIGFjY2Vzc29ycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZS4gIFRoaXMgX2lzXyBhIE1vZHVsdXNTdWJzdGl0dXRpb24uCisgICAgICogQHJldHVybiB0cnVlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNNb2R1bHVzU3Vic3RpdHV0aW9uKCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgdG9rZW4gY2hhcmFjdGVyIG9mIGEgTW9kdWx1c1N1YnN0aXR1dGlvbiBpcyAmZ3Q7LgorICAgICAqIEByZXR1cm4gJyZndDsnCisgICAgICovCisgICAgY2hhciB0b2tlbkNoYXIoKSB7CisgICAgICAgIHJldHVybiAnPic7CisgICAgfQorfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVncmFsUGFydFN1YnN0aXR1dGlvbgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogQSBzdWJzdGl0dXRpb24gdGhhdCBmb3JtYXRzIHRoZSBudW1iZXIncyBpbnRlZ3JhbCBwYXJ0LiAgVGhpcyBpcworICogcmVwcmVzZW50ZWQgYnkgJmx0OyZsdDsgaW4gYSBmcmFjdGlvbiBydWxlLgorICovCitjbGFzcyBJbnRlZ3JhbFBhcnRTdWJzdGl0dXRpb24gZXh0ZW5kcyBORlN1YnN0aXR1dGlvbiB7CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFB1dHMgYSBjb3B5cmlnaHQgaW4gdGhlIC5jbGFzcyBmaWxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodE5vdGljZQorICAgICAgICA9ICJDb3B5cmlnaHQgXHUwMGE5MTk5Ny0xOTk4IElCTSBDb3JwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0cnVjdGlvbgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gSW50ZWdyYWxQYXJ0U3Vic3RpdHV0aW9uLiAgVGhpcyBqdXN0IGNhbGxzCisgICAgICogdGhlIHN1cGVyY2xhc3MgY29uc3RydWN0b3IuCisgICAgICovCisgICAgSW50ZWdyYWxQYXJ0U3Vic3RpdHV0aW9uKGludCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5GUnVsZVNldCBydWxlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgc3VwZXIocG9zLCBydWxlU2V0LCBmb3JtYXR0ZXIsIGRlc2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZm9ybWF0dGluZworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlcidzIGludGVncmFsIHBhcnQuIChGb3IgYSBsb25nLCB0aGF0J3MganVzdCB0aGUKKyAgICAgKiBudW1iZXIgdW5jaGFuZ2VkLikKKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkCisgICAgICogQHJldHVybiAibnVtYmVyIiB1bmNoYW5nZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyB0cmFuc2Zvcm1OdW1iZXIobG9uZyBudW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIncyBpbnRlZ3JhbCBwYXJ0LgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIGludGVncmFsIHBhcnQgb2YgdGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAcmV0dXJuIGZsb29yKG51bWJlcikKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIHRyYW5zZm9ybU51bWJlcihkb3VibGUgbnVtYmVyKSB7CisgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHBhcnNpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBzdWJzdGl0dXRpb24gYW5kIHRoZQorICAgICAqIG93bmluZyBydWxlJ3MgYmFzZSB2YWx1ZS4gIChUaGUgb3duaW5nIHJ1bGUsIGF0IGJlc3QsIGhhcyBhbgorICAgICAqIGludGVncmFsLXBhcnQgc3Vic3RpdHV0aW9uIGFuZCBhIGZyYWN0aW9uYWwtcGFydCBzdWJzdGl0dXRpb24sCisgICAgICogc28gd2UgY2FuIHNhZmVseSBqdXN0IGFkZCB0aGVtLikKKyAgICAgKiBAcGFyYW0gbmV3UnVsZVZhbHVlIFRoZSByZXN1bHQgb2YgbWF0Y2hpbmcgdGhlIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBvbGRSdWxlVmFsdWUgVGhlIHBhcnRpYWwgcmVzdWx0IG9mIHRoZSBwYXJzZSBwcmlvciB0bworICAgICAqIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICAgICAqIEByZXR1cm4gb2xkUnVsZVZhbHVlICsgbmV3UnVsZVZhbHVlCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSBjb21wb3NlUnVsZVZhbHVlKGRvdWJsZSBuZXdSdWxlVmFsdWUsIGRvdWJsZSBvbGRSdWxlVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIG5ld1J1bGVWYWx1ZSArIG9sZFJ1bGVWYWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbiBJbnRlZ3JhbFBhcnRTdWJzdGl0dXRpb24gc2V0cyB0aGUgdXBwZXIgYm91bmQgYmFjayB1cCBzbyBhbGwKKyAgICAgKiBwb3RlbnRpYWxseSBtYXRjaGluZyBydWxlcyBhcmUgY29uc2lkZXJlZC4KKyAgICAgKiBAcGFyYW0gb2xkVXBwZXJCb3VuZCBJZ25vcmVkCisgICAgICogQHJldHVybiBEb3VibGUuTUFYX1ZBTFVFCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSBjYWxjVXBwZXJCb3VuZChkb3VibGUgb2xkVXBwZXJCb3VuZCkgeworICAgICAgICByZXR1cm4gRG91YmxlLk1BWF9WQUxVRTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gc2ltcGxlIGFjY2Vzc29yCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQW4gSW50ZWdyYWxQYXJ0U3Vic3RpdHV0aW9uJ3MgdG9rZW4gY2hhcmFjdGVyIGlzICZsdDsKKyAgICAgKiBAcmV0dXJuICcmbHQ7JworICAgICAqLworICAgIGNoYXIgdG9rZW5DaGFyKCkgeworICAgICAgICByZXR1cm4gJzwnOworICAgIH0KK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBGcmFjdGlvbmFsUGFydFN1YnN0aXR1dGlvbgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogQSBzdWJzdGl0dXRpb24gdGhhdCBmb3JtYXRzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgYSBudW1iZXIuICBUaGlzIGlzCisgKiByZXByZXNlbnRlZCBieSAmZ3Q7Jmd0OyBpbiBhIGZyYWN0aW9uIHJ1bGUuCisgKi8KK2NsYXNzIEZyYWN0aW9uYWxQYXJ0U3Vic3RpdHV0aW9uIGV4dGVuZHMgTkZTdWJzdGl0dXRpb24geworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjb25zdGFudHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQdXRzIGEgY29weXJpZ2h0IGluIHRoZSAuY2xhc3MgZmlsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHROb3RpY2UKKyAgICAgICAgPSAiQ29weXJpZ2h0IFx1MDBhOTE5OTctMTk5OCBJQk0gQ29ycC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBkYXRhIG1lbWJlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiB0cnVlIGlmIHRoaXMgc3Vic3RpdHV0aW9uIHNob3VsZCBoYXZlIHRoZSBkZWZhdWx0ICJieSBkaWdpdHMiCisgICAgICogYmVoYXZpb3IsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBieURpZ2l0cyA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogdHJ1ZSBpZiB3ZSBhdXRvbWF0aWNhbGx5IGluc2VydCBzcGFjZXMgdG8gc2VwYXJhdGUgbmFtZXMgb2YgZGlnaXRzCisgICAgICogc2V0IHRvIGZhbHNlIGJ5ICc+Pj4nIGluIGZyYWN0aW9uIHJ1bGVzLCB1c2VkIGJ5IFRoYWkuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHVzZVNwYWNlcyA9IHRydWU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbGFyZ2VzdCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IHRoYXQgdGhpcworICAgICAqIG9iamVjdCB3aWxsIHNob3cgaW4gImJ5IGRpZ2l0cyIgbW9kZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhERUNJTUFMRElHSVRTID0gODsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjb25zdHJ1Y3Rpb24KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgRnJhY3Rpb25hbFBhcnRTdWJzdGl0dXRpb24uICBUaGlzIG9iamVjdCBrZWVwcyBhIGZsYWcKKyAgICAgKiB0ZWxsaW5nIHdoZXRoZXIgaXQgc2hvdWxkIGZvcm1hdCBieSBkaWdpdHMgb3Igbm90LiAgSW4gYWRkaXRpb24sCisgICAgICogaXQgbWFya3MgdGhlIHJ1bGUgc2V0IGl0IGNhbGxzIChpZiBhbnkpIGFzIGEgZnJhY3Rpb24gcnVsZSBzZXQuCisgICAgICovCisgICAgRnJhY3Rpb25hbFBhcnRTdWJzdGl0dXRpb24oaW50IHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORlJ1bGVTZXQgcnVsZVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbikgeworICAgICAgICBzdXBlcihwb3MsIHJ1bGVTZXQsIGZvcm1hdHRlciwgZGVzY3JpcHRpb24pOworICAgICAgICBpZiAoZGVzY3JpcHRpb24uZXF1YWxzKCI+PiIpIHx8IGRlc2NyaXB0aW9uLmVxdWFscygiPj4+IikgfHwgcnVsZVNldCA9PSB0aGlzLnJ1bGVTZXQpIHsKKyAgICAgICAgICAgIGJ5RGlnaXRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbi5lcXVhbHMoIj4+PiIpKSB7CisgICAgICAgICAgICAgIHVzZVNwYWNlcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5ydWxlU2V0Lm1ha2VJbnRvRnJhY3Rpb25SdWxlU2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZm9ybWF0dGluZworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIElmIGluICJieSBkaWdpdHMiIG1vZGUsIGZpbGxzIGluIHRoZSBzdWJzdGl0dXRpb24gb25lIGRlY2ltYWwgZGlnaXQKKyAgICAgKiBhdCBhIHRpbWUgdXNpbmcgdGhlIHJ1bGUgc2V0IGNvbnRhaW5pbmcgdGhpcyBzdWJzdGl0dXRpb24uCisgICAgICogT3RoZXJ3aXNlLCB1c2VzIHRoZSBzdXBlcmNsYXNzIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAcGFyYW0gdG9JbnNlcnRJbnRvIFRoZSBzdHJpbmcgdG8gaW5zZXJ0IHRoZSByZXN1bHQgb2YgZm9ybWF0dGluZworICAgICAqIHRoZSBzdWJzdGl0dXRpb24gaW50bworICAgICAqIEBwYXJhbSBwb3MgVGhlIHBvc2l0aW9uIG9mIHRoZSBvd25pbmcgcnVsZSdzIHJ1bGUgdGV4dCBpbgorICAgICAqIHRvSW5zZXJ0SW50bworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRvU3Vic3RpdHV0aW9uKGRvdWJsZSBudW1iZXIsIFN0cmluZ0J1ZmZlciB0b0luc2VydEludG8sIGludCBwb3MpIHsKKyAgICAgICAgLy8gaWYgd2UncmUgbm90IGluICJieURpZ2l0cyIgbW9kZSwganVzdCB1c2UgdGhlIGluaGVyaXRlZAorICAgICAgICAvLyBkb1N1YnN0aXR1dGlvbigpIHJvdXRpbmUKKyAgICAgICAgaWYgKCFieURpZ2l0cykgeworICAgICAgICAgICAgc3VwZXIuZG9TdWJzdGl0dXRpb24obnVtYmVyLCB0b0luc2VydEludG8sIHBvcyk7CisKKyAgICAgICAgLy8gaWYgd2UncmUgaW4gImJ5RGlnaXRzIiBtb2RlLCB0cmFuc2Zvcm0gdGhlIHZhbHVlIGludG8gYW4gaW50ZWdlcgorICAgICAgICAvLyBieSBtb3ZpbmcgdGhlIGRlY2ltYWwgcG9pbnQgZWlnaHQgcGxhY2VzIHRvIHRoZSByaWdodCBhbmQKKyAgICAgICAgLy8gcHVsbGluZyBkaWdpdHMgb2ZmIHRoZSByaWdodCBvbmUgYXQgYSB0aW1lLCBmb3JtYXR0aW5nIGVhY2ggZGlnaXQKKyAgICAgICAgLy8gYXMgYW4gaW50ZWdlciB1c2luZyB0aGlzIHN1YnN0aXR1dGlvbidzIG93bmluZyBydWxlIHNldAorICAgICAgICAvLyAodGhpcyBpcyBzbG93ZXIsIGJ1dCBtb3JlIGFjY3VyYXRlLCB0aGFuIGRvaW5nIGl0IGZyb20gdGhlCisgICAgICAgIC8vIG90aGVyIGVuZCkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBudW1iZXJUb0Zvcm1hdCA9IChpbnQpTWF0aC5yb3VuZCh0cmFuc2Zvcm1OdW1iZXIobnVtYmVyKSAqIE1hdGgucG93KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCBNQVhERUNJTUFMRElHSVRTKSk7CisgICAgICAgICAgICAvLyB0aGlzIGZsYWcga2VlcHMgdXMgZnJvbSBmb3JtYXR0aW5nIHRyYWlsaW5nIHplcm9zLiAgSXQgc3RhcnRzCisgICAgICAgICAgICAvLyBvdXQgZmFsc2UgYmVjYXVzZSB3ZSdyZSBwdWxsaW5nIGZyb20gdGhlIHJpZ2h0LCBhbmQgc3dpdGNoZXMKKyAgICAgICAgICAgIC8vIHRvIHRydWUgdGhlIGZpcnN0IHRpbWUgd2UgZW5jb3VudGVyIGEgbm9uLXplcm8gZGlnaXQKKyAgICAgICAgICAgIGJvb2xlYW4gZG9aZXJvcyA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhERUNJTUFMRElHSVRTOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBudW1iZXJUb0Zvcm1hdCAlIDEwOworICAgICAgICAgICAgICAgIGlmIChkaWdpdCAhPSAwIHx8IGRvWmVyb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRvWmVyb3MgJiYgdXNlU3BhY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b0luc2VydEludG8uaW5zZXJ0KHBvcyArIHRoaXMucG9zLCAnICcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRvWmVyb3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBydWxlU2V0LmZvcm1hdChkaWdpdCwgdG9JbnNlcnRJbnRvLCBwb3MgKyB0aGlzLnBvcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG51bWJlclRvRm9ybWF0IC89IDEwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBudW1iZXIsIHdoaWNoIHdpbGwgYWx3YXlzIGJlCisgICAgICogemVybyBpZiBpdCdzIGEgbG9uZy4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkCisgICAgICogQHJldHVybiAwCisgICAgICovCisgICAgcHVibGljIGxvbmcgdHJhbnNmb3JtTnVtYmVyKGxvbmcgbnVtYmVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgbnVtYmVyLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQuCisgICAgICogQHJldHVybiBudW1iZXIgLSBmbG9vcihudW1iZXIpCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSB0cmFuc2Zvcm1OdW1iZXIoZG91YmxlIG51bWJlcikgeworICAgICAgICByZXR1cm4gbnVtYmVyIC0gTWF0aC5mbG9vcihudW1iZXIpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBwYXJzaW5nCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogSWYgaW4gImJ5IGRpZ2l0cyIgbW9kZSwgcGFyc2VzIHRoZSBzdHJpbmcgYXMgaWYgaXQgd2VyZSBhIHN0cmluZworICAgICAqIG9mIGluZGl2aWR1YWwgZGlnaXRzOyBvdGhlcndpc2UsIHVzZXMgdGhlIHN1cGVyY2xhc3MgZnVuY3Rpb24uCisgICAgICogQHBhcmFtIHRleHQgVGhlIHN0cmluZyB0byBwYXJzZQorICAgICAqIEBwYXJhbSBwYXJzZVBvc2l0aW9uIElnbm9yZWQgb24gZW50cnksIGJ1dCB1cGRhdGVkIG9uIGV4aXQgdG8gcG9pbnQKKyAgICAgKiB0byB0aGUgZmlyc3QgdW5tYXRjaGVkIGNoYXJhY3RlcgorICAgICAqIEBwYXJhbSBiYXNlVmFsdWUgVGhlIHBhcnRpYWwgcGFyc2UgcmVzdWx0IHByaW9yIHRvIGVudGVyaW5nIHRoaXMKKyAgICAgKiBmdW5jdGlvbgorICAgICAqIEBwYXJhbSB1cHBlckJvdW5kIE9ubHkgY29uc2lkZXIgcnVsZXMgd2l0aCBiYXNlIHZhbHVlcyBsb3dlciB0aGFuCisgICAgICogdGhpcyB3aGVuIGZpbGxpbmcgaW4gdGhlIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBsZW5pZW50UGFyc2UgSWYgdHJ1ZSwgdHJ5IG1hdGNoaW5nIHRoZSB0ZXh0IGFzIG51bWVyYWxzIGlmCisgICAgICogbWF0Y2hpbmcgYXMgd29yZHMgZG9lc24ndCB3b3JrCisgICAgICogQHJldHVybiBJZiB0aGUgbWF0Y2ggd2FzIHN1Y2Nlc3NmdWwsIHRoZSBjdXJyZW50IHBhcnRpYWwgcGFyc2UKKyAgICAgKiByZXN1bHQ7IG90aGVyd2lzZSBuZXcgTG9uZygwKS4gIFRoZSByZXN1bHQgaXMgZWl0aGVyIGEgTG9uZyBvcgorICAgICAqIGEgRG91YmxlLgorICAgICAqLworICAgIHB1YmxpYyBOdW1iZXIgZG9QYXJzZShTdHJpbmcgdGV4dCwgUGFyc2VQb3NpdGlvbiBwYXJzZVBvc2l0aW9uLCBkb3VibGUgYmFzZVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVwcGVyQm91bmQsIGJvb2xlYW4gbGVuaWVudFBhcnNlKSB7CisgICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBpbiBieURpZ2l0cyBtb2RlLCB3ZSBjYW4ganVzdCB1c2UgdGhlIGluaGVyaXRlZAorICAgICAgICAvLyBkb1BhcnNlKCkKKyAgICAgICAgaWYgKCFieURpZ2l0cykgeworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmRvUGFyc2UodGV4dCwgcGFyc2VQb3NpdGlvbiwgYmFzZVZhbHVlLCAwLCBsZW5pZW50UGFyc2UpOworCisgICAgICAgIC8vIGlmIHdlIEFSRSBpbiBieURpZ2l0cyBtb2RlLCBwYXJzZSB0aGUgdGV4dCBvbmUgZGlnaXQgYXQgYSB0aW1lCisgICAgICAgIC8vIHVzaW5nIHRoaXMgc3Vic3RpdHV0aW9uJ3Mgb3duaW5nIHJ1bGUgc2V0ICh3ZSBkbyB0aGlzIGJ5IHNldHRpbmcKKyAgICAgICAgLy8gdXBwZXJCb3VuZCB0byAxMCB3aGVuIGNhbGxpbmcgZG9QYXJzZSgpICkgdW50aWwgd2UgcmVhY2gKKyAgICAgICAgLy8gbm9ubWF0Y2hpbmcgdGV4dAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIHdvcmtUZXh0ID0gbmV3IFN0cmluZyh0ZXh0KTsKKyAgICAgICAgICAgIFBhcnNlUG9zaXRpb24gd29ya1BvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKDEpOworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IDA7CisgICAgICAgICAgICBpbnQgZGlnaXQ7CisgICAgICAgICAgICBkb3VibGUgcDEwID0gMC4xOworCisgICAgICAgICAgICB3aGlsZSAod29ya1RleHQubGVuZ3RoKCkgPiAwICYmIHdvcmtQb3MuZ2V0SW5kZXgoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgd29ya1Bvcy5zZXRJbmRleCgwKTsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHJ1bGVTZXQucGFyc2Uod29ya1RleHQsIHdvcmtQb3MsIDEwKS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChsZW5pZW50UGFyc2UgJiYgd29ya1Bvcy5nZXRJbmRleCgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGlnaXQgPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoKS5wYXJzZSh3b3JrVGV4dCwgd29ya1BvcykuaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAod29ya1Bvcy5nZXRJbmRleCgpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGRpZ2l0ICogcDEwOworICAgICAgICAgICAgICAgICAgICBwMTAgLz0gMTA7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0SW5kZXgocGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpICsgd29ya1Bvcy5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgd29ya1RleHQgPSB3b3JrVGV4dC5zdWJzdHJpbmcod29ya1Bvcy5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHdvcmtUZXh0Lmxlbmd0aCgpID4gMCAmJiB3b3JrVGV4dC5jaGFyQXQoMCkgPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrVGV4dCA9IHdvcmtUZXh0LnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0SW5kZXgocGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSBjb21wb3NlUnVsZVZhbHVlKHJlc3VsdCwgYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhlIHR3byBwYXJ0aWFsIHBhcnNlIHJlc3VsdHMuCisgICAgICogQHBhcmFtIG5ld1J1bGVWYWx1ZSBUaGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIHN1YnN0aXR1dGlvbgorICAgICAqIEBwYXJhbSBvbGRSdWxlVmFsdWUgVGhlIHBhcnRpYWwgcGFyc2UgcmVzdWx0IHByaW9yIHRvIGNhbGxpbmcKKyAgICAgKiB0aGlzIGZ1bmN0aW9uCisgICAgICogQHJldHVybiBuZXdSdWxlVmFsdWUgKyBvbGRSdWxlVmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIGNvbXBvc2VSdWxlVmFsdWUoZG91YmxlIG5ld1J1bGVWYWx1ZSwgZG91YmxlIG9sZFJ1bGVWYWx1ZSkgeworICAgICAgICByZXR1cm4gbmV3UnVsZVZhbHVlICsgb2xkUnVsZVZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdCB1c2VkLgorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgY2FsY1VwcGVyQm91bmQoZG91YmxlIG9sZFVwcGVyQm91bmQpIHsKKyAgICAgICAgcmV0dXJuIDA7ICAgLy8gdGhpcyB2YWx1ZSBpcyBpZ25vcmVkCisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHNpbXBsZSBhY2Nlc3NvcgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRoZSB0b2tlbiBjaGFyYWN0ZXIgZm9yIGEgRnJhY3Rpb25hbFBhcnRTdWJzdGl0dXRpb24gaXMgJmd0Oy4KKyAgICAgKiBAcmV0dXJuICcmZ3Q7JworICAgICAqLworICAgIGNoYXIgdG9rZW5DaGFyKCkgeworICAgICAgICByZXR1cm4gJz4nOworICAgIH0KK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBBYnNvbHV0ZVZhbHVlU3Vic3RpdHV0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIC8qKgorICAqIEEgc3Vic3RpdHV0aW9uIHRoYXQgZm9ybWF0cyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlci4KKyAgKiBUaGlzIHN1YnN0aXRpb24gaXMgcmVwcmVzZW50ZWQgYnkgJmd0OyZndDsgaW4gYSBuZWdhdGl2ZS1udW1iZXIgcnVsZS4KKyAgKi8KK2NsYXNzIEFic29sdXRlVmFsdWVTdWJzdGl0dXRpb24gZXh0ZW5kcyBORlN1YnN0aXR1dGlvbiB7CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFB1dHMgYSBjb3B5cmlnaHQgaW4gdGhlIC5jbGFzcyBmaWxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodE5vdGljZQorICAgICAgICA9ICJDb3B5cmlnaHQgXHUwMGE5MTk5Ny0xOTk4IElCTSBDb3JwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0cnVjdGlvbgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gQWJzb2x1dGVWYWx1ZVN1YnN0aXR1dGlvbi4gIFRoaXMganVzdCB1c2VzIHRoZQorICAgICAqIHN1cGVyY2xhc3MgY29uc3RydWN0b3IuCisgICAgICovCisgICAgQWJzb2x1dGVWYWx1ZVN1YnN0aXR1dGlvbihpbnQgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZSdWxlU2V0IHJ1bGVTZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIHN1cGVyKHBvcywgcnVsZVNldCwgZm9ybWF0dGVyLCBkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGZvcm1hdHRpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQuCisgICAgICogQHJldHVybiBhYnMobnVtYmVyKQorICAgICAqLworICAgIHB1YmxpYyBsb25nIHRyYW5zZm9ybU51bWJlcihsb25nIG51bWJlcikgeworICAgICAgICByZXR1cm4gTWF0aC5hYnMobnVtYmVyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQuCisgICAgICogQHJldHVybiBhYnMobnVtYmVyKQorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgdHJhbnNmb3JtTnVtYmVyKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguYWJzKG51bWJlcik7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHBhcnNpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhZGR0aXZlIGludmVyc2Ugb2YgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZQorICAgICAqIHN1YnN0aXR1dGlvbiAodGhpcyBzdXBlcnNlZGVzIHRoZSBlYXJsaWVyIHBhcnRpYWwgcmVzdWx0KQorICAgICAqIEBwYXJhbSBuZXdSdWxlVmFsdWUgVGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBzdWJzdGl0dXRpb24KKyAgICAgKiBAcGFyYW0gb2xkUnVsZVZhbHVlIFRoZSBwYXJ0aWFsIHBhcnNlIHJlc3VsdCBwcmlvciB0byBjYWxsaW5nCisgICAgICogdGhpcyBmdW5jdGlvbgorICAgICAqIEByZXR1cm4gLW5ld1J1bGVWYWx1ZQorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgY29tcG9zZVJ1bGVWYWx1ZShkb3VibGUgbmV3UnVsZVZhbHVlLCBkb3VibGUgb2xkUnVsZVZhbHVlKSB7CisgICAgICAgIHJldHVybiAtbmV3UnVsZVZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHVwcGVyIGJvdW5kIGJlY2sgdXAgdG8gY29uc2lkZXIgYWxsIHJ1bGVzCisgICAgICogQHBhcmFtIG9sZFVwcGVyQm91bmQgSWdub3JlZC4KKyAgICAgKiBAcmV0dXJuIERvdWJsZS5NQVhfVkFMVUUKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIGNhbGNVcHBlckJvdW5kKGRvdWJsZSBvbGRVcHBlckJvdW5kKSB7CisgICAgICAgIHJldHVybiBEb3VibGUuTUFYX1ZBTFVFOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBzaW1wbGUgYWNjZXNzb3IKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBUaGUgdG9rZW4gY2hhcmFjdGVyIGZvciBhbiBBYnNvbHV0ZVZhbHVlU3Vic3RpdHV0aW9uIGlzICZndDsKKyAgICAgKiBAcmV0dXJuICcmZ3Q7JworICAgICAqLworICAgIGNoYXIgdG9rZW5DaGFyKCkgeworICAgICAgICByZXR1cm4gJz4nOworICAgIH0KK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBOdW1lcmF0b3JTdWJzdGl0dXRpb24KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIEEgc3Vic3RpdHV0aW9uIHRoYXQgbXVsdGlwbGllcyB0aGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZCAod2hpY2ggaXMKKyAqIGJldHdlZW4gMCBhbmQgMSkgYnkgdGhlIGJhc2UgdmFsdWUgb2YgdGhlIHJ1bGUgdGhhdCBvd25zIGl0IGFuZAorICogZm9ybWF0cyB0aGUgcmVzdWx0LiAgSXQgaXMgcmVwcmVzZW50ZWQgYnkgJmx0OyZsdDsgaW4gdGhlIHJ1bGVzCisgKiBpbiBhIGZyYWN0aW9uIHJ1bGUgc2V0LgorICovCitjbGFzcyBOdW1lcmF0b3JTdWJzdGl0dXRpb24gZXh0ZW5kcyBORlN1YnN0aXR1dGlvbiB7CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFB1dHMgYSBjb3B5cmlnaHQgaW4gdGhlIC5jbGFzcyBmaWxlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodE5vdGljZQorICAgICAgICA9ICJDb3B5cmlnaHQgXHUwMGE5MTk5Ny0xOTk4IElCTSBDb3JwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGRhdGEgbWVtYmVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRoZSBkZW5vbWluYXRvciBvZiB0aGUgZnJhY3Rpb24gd2UncmUgZmluZGluZyB0aGUgbnVtZXJhdG9yIGZvci4KKyAgICAgKiAoVGhlIGJhc2UgdmFsdWUgb2YgdGhlIHJ1bGUgdGhhdCBvd25zIHRoaXMgc3Vic3RpdHV0aW9uLikKKyAgICAgKi8KKyAgICBkb3VibGUgZGVub21pbmF0b3I7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY29uc3RydWN0aW9uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIE51bWJlcmF0b3JTdWJzdGl0dXRpb24uICBJbiBhZGRpdGlvbiB0byB0aGUgaW5oZXJpdGVkCisgICAgICogZmllbGRzLCBhIE51bWVyYXRvclN1YnN0aXR1dGlvbiBrZWVwcyB0cmFjayBvZiBhIGRlbm9taW5hdG9yLCB3aGljaAorICAgICAqIGlzIG1lcmVseSB0aGUgYmFzZSB2YWx1ZSBvZiB0aGUgcnVsZSB0aGF0IG93bnMgaXQuCisgICAgICovCisgICAgTnVtZXJhdG9yU3Vic3RpdHV0aW9uKGludCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkZSdWxlU2V0IHJ1bGVTZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbikgeworICAgICAgICBzdXBlcihwb3MsIHJ1bGVTZXQsIGZvcm1hdHRlciwgZGVzY3JpcHRpb24pOworCisgICAgICAgIC8vIHRoaXMgc3Vic3RpdHV0aW9uJ3MgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcnVsZSdzIGJhc2UgdmFsdWUKKyAgICAgICAgLy8gUmF0aGVyIHRoYW4ga2VlcGluZyBhIGJhY2twb2ludGVyIHRvIHRoZSBydWxlLCB3ZSBjb3B5IGl0cworICAgICAgICAvLyBiYXNlIHZhbHVlIGhlcmUKKyAgICAgICAgdGhpcy5kZW5vbWluYXRvciA9IGRlbm9taW5hdG9yOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBib2lsZXJwbGF0ZQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRlc3RzIHR3byBOdW1lcmF0b3JTdWJzdGl0dXRpb25zIGZvciBlcXVhbGl0eQorICAgICAqIEBwYXJhbSB0aGF0IFRoZSBvdGhlciBOdW1lcmF0b3JTdWJzdGl0dXRpb24KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgdGhhdCkgeworICAgICAgICBpZiAoc3VwZXIuZXF1YWxzKHRoYXQpKSB7CisgICAgICAgICAgICBOdW1lcmF0b3JTdWJzdGl0dXRpb24gdGhhdDIgPSAoTnVtZXJhdG9yU3Vic3RpdHV0aW9uKXRoYXQ7CisgICAgICAgICAgICByZXR1cm4gZGVub21pbmF0b3IgPT0gdGhhdDIuZGVub21pbmF0b3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZm9ybWF0dGluZworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQgdGltZXMgdGhlIGRlbm9taW5hdG9yLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQKKyAgICAgKiBAcmV0dXJuIG51bWJlciAqIGRlbm9taW5hdG9yCisgICAgICovCisgICAgcHVibGljIGxvbmcgdHJhbnNmb3JtTnVtYmVyKGxvbmcgbnVtYmVyKSB7CisgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlciAqIGRlbm9taW5hdG9yKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkIHRpbWVzIHRoZSBkZW5vbWluYXRvci4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkCisgICAgICogQHJldHVybiBudW1iZXIgKiBkZW5vbWluYXRvcgorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgdHJhbnNmb3JtTnVtYmVyKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZGVub21pbmF0b3IpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBwYXJzaW5nCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogRGlzcGF0Y2hlcyB0byB0aGUgaW5oZXJpdGVkIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiwgYnV0IG1ha2VzCisgICAgICogc3VyZSB0aGF0IGxlbmllbnRQYXJzZSBpcyBvZmYuCisgICAgICovCisgICAgcHVibGljIE51bWJlciBkb1BhcnNlKFN0cmluZyB0ZXh0LCBQYXJzZVBvc2l0aW9uIHBhcnNlUG9zaXRpb24sIGRvdWJsZSBiYXNlVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdXBwZXJCb3VuZCwgYm9vbGVhbiBsZW5pZW50UGFyc2UpIHsKKyAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsIHRvIGRvIHRoZSBwYXJzaW5nIGhlcmUsCisgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIHRvIHR1cm4gbGVuaWVudCBwYXJzaW5nIG9mZi0tIGlmIHdlIGxlYXZlIGl0IG9uLAorICAgICAgICAvLyBpdCBTRVJJT1VTTFkgbWVzc2VzIHVwIHRoZSBhbGdvcml0aG0KKyAgICAgICAgcmV0dXJuIHN1cGVyLmRvUGFyc2UodGV4dCwgcGFyc2VQb3NpdGlvbiwgYmFzZVZhbHVlLCB1cHBlckJvdW5kLCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGl2aWRlcyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIHN1YnN0aXR1dGlvbiBieSB0aGUgcGFydGlhbAorICAgICAqIHBhcnNlIHJlc3VsdC4KKyAgICAgKiBAcGFyYW0gbmV3UnVsZVZhbHVlIFRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgc3Vic3RpdHV0aW9uCisgICAgICogQHBhcmFtIG9sZFJ1bGVWYWx1ZSBUaGUgb3duaW5nIHJ1bGUncyBiYXNlIHZhbHVlCisgICAgICogQHJldHVybiBuZXdSdWxlVmFsdWUgLyBvbGRSdWxlVmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIGNvbXBvc2VSdWxlVmFsdWUoZG91YmxlIG5ld1J1bGVWYWx1ZSwgZG91YmxlIG9sZFJ1bGVWYWx1ZSkgeworICAgICAgICByZXR1cm4gbmV3UnVsZVZhbHVlIC8gb2xkUnVsZVZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHVwZXIgYm91bmQgZG93biB0byB0aGlzIHJ1bGUncyBiYXNlIHZhbHVlCisgICAgICogQHBhcmFtIG9sZFVwcGVyQm91bmQgSWdub3JlZAorICAgICAqIEByZXR1cm4gVGhlIGJhc2UgdmFsdWUgb2YgdGhlIHJ1bGUgb3duaW5nIHRoaXMgc3Vic3RpdHV0aW9uCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSBjYWxjVXBwZXJCb3VuZChkb3VibGUgb2xkVXBwZXJCb3VuZCkgeworICAgICAgICByZXR1cm4gZGVub21pbmF0b3I7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHNpbXBsZSBhY2Nlc3NvcgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRoZSB0b2tlbiBjaGFyYWN0ZXIgZm9yIGEgTnVtZXJhdG9yU3Vic3RpdHV0aW9uIGlzICZsdDsKKyAgICAgKiBAcmV0dXJuICcmbHQ7JworICAgICAqLworICAgIGNoYXIgdG9rZW5DaGFyKCkgeworICAgICAgICByZXR1cm4gJzwnOworICAgIH0KK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBOdWxsU3Vic3RpdHV0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBBIHN1YnN0aXR1dGlvbiB3aGljaCBkb2VzIG5vdGhpbmcuICBUaGlzIGNsYXNzIGV4aXN0cyBqdXN0IHRvIHNpbXBsaWZ5CisgKiB0aGUgbG9naWMgaW4gc29tZSBvdGhlciByb3V0aW5lcyBzbyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICogYWJvdXQgaG93IG1hbnkgc3Vic3RpdHV0aW9ucyBhIHJ1bGUgaGFzLgorICovCitjbGFzcyBOdWxsU3Vic3RpdHV0aW9uIGV4dGVuZHMgTkZTdWJzdGl0dXRpb24geworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjb25zdGFudHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQdXRzIGEgY29weXJpZ2h0IGluIHRoZSAuY2xhc3MgZmlsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHROb3RpY2UKKyAgICAgICAgPSAiQ29weXJpZ2h0IFx1MDBhOTE5OTctMTk5OCBJQk0gQ29ycC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjb25zdHJ1Y3Rpb24KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgTnVsbFN1YnN0aXR1dGlvbi4gIFRoaXMganVzdCBkZWxlZ2F0ZXMgdG8gdGhlIHN1cGVyY2xhc3MKKyAgICAgKiBjb25zdHJ1Y3RvciwgYnV0IHRoZSBvbmx5IHZhbHVlIHdlIHJlYWxseSBjYXJlIGFib3V0IGlzIHRoZSBwb3NpdGlvbi4KKyAgICAgKi8KKyAgICBOdWxsU3Vic3RpdHV0aW9uKGludCBwb3MsCisgICAgICAgICAgICAgICAgICAgICBORlJ1bGVTZXQgcnVsZVNldCwKKyAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCBmb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgc3VwZXIocG9zLCBydWxlU2V0LCBmb3JtYXR0ZXIsIGRlc2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gYm9pbGVycGxhdGUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBPbmx5IGNoZWNrcyBmb3IgY2xhc3MgZXF1YWxpdHkKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IHRoYXQpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmVxdWFscyh0aGF0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOdWxsU3Vic3RpdHV0aW9ucyBkb24ndCBzaG93IHVwIGluIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uCisgICAgICogb2YgYSBSdWxlQmFzZWROdW1iZXJGb3JtYXQKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGZvcm1hdHRpbmcKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBEb2VzIG5vdGhpbmcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZG9TdWJzdGl0dXRpb24obG9uZyBudW1iZXIsIFN0cmluZ0J1ZmZlciB0b0luc2VydEludG8sIGludCBwb3MpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEb2VzIG5vdGhpbmcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZG9TdWJzdGl0dXRpb24oZG91YmxlIG51bWJlciwgU3RyaW5nQnVmZmVyIHRvSW5zZXJ0SW50bywgaW50IHBvcykgeworICAgIH0KKworICAgIC8qKgorICAgICAqIE5ldmVyIGNhbGxlZC4KKyAgICAgKi8KKyAgICAvLy9DTE9WRVI6T0ZGCisgICAgcHVibGljIGxvbmcgdHJhbnNmb3JtTnVtYmVyKGxvbmcgbnVtYmVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvLy9DTE9WRVI6T04KKworICAgIC8qKgorICAgICAqIE5ldmVyIGNhbGxlZC4KKyAgICAgKi8KKyAgICAvLy9DTE9WRVI6T0ZGCisgICAgcHVibGljIGRvdWJsZSB0cmFuc2Zvcm1OdW1iZXIoZG91YmxlIG51bWJlcikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgLy8vQ0xPVkVSOk9OCisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gcGFyc2luZworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHBhcnRpYWwgcGFyc2UgcmVzdWx0IHVuY2hhbmdlZAorICAgICAqLworICAgIHB1YmxpYyBOdW1iZXIgZG9QYXJzZShTdHJpbmcgdGV4dCwgUGFyc2VQb3NpdGlvbiBwYXJzZVBvc2l0aW9uLCBkb3VibGUgYmFzZVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVwcGVyQm91bmQsIGJvb2xlYW4gbGVuaWVudFBhcnNlKSB7CisgICAgICAgIGlmIChiYXNlVmFsdWUgPT0gKGxvbmcpYmFzZVZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcoKGxvbmcpYmFzZVZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKGJhc2VWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOZXZlciBjYWxsZWQuCisgICAgICovCisgICAgLy8vQ0xPVkVSOk9GRgorICAgIHB1YmxpYyBkb3VibGUgY29tcG9zZVJ1bGVWYWx1ZShkb3VibGUgbmV3UnVsZVZhbHVlLCBkb3VibGUgb2xkUnVsZVZhbHVlKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvLy9DTE9WRVI6T04KKworICAgIC8qKgorICAgICAqIE5ldmVyIGNhbGxlZC4KKyAgICAgKi8KKyAgICAvLy9DTE9WRVI6T0ZGCisgICAgcHVibGljIGRvdWJsZSBjYWxjVXBwZXJCb3VuZChkb3VibGUgb2xkVXBwZXJCb3VuZCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgLy8vQ0xPVkVSOk9OCisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gc2ltcGxlIGFjY2Vzc29ycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSAodGhpcyBfaXNfIGEgTnVsbFN1YnN0aXR1dGlvbikuCisgICAgICogQHJldHVybiB0cnVlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNOdWxsU3Vic3RpdHV0aW9uKCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOZXZlciBjYWxsZWQuCisgICAgICovCisgICAgLy8vQ0xPVkVSOk9GRgorICAgIGNoYXIgdG9rZW5DaGFyKCkgeworICAgICAgICByZXR1cm4gJyAnOworICAgIH0KKyAgICAvLy9DTE9WRVI6T04KK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvTmFtZVVuaWNvZGVUcmFuc2xpdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvTmFtZVVuaWNvZGVUcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkY2U5ODAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9OYW1lVW5pY29kZVRyYW5zbGl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9OYW1lVW5pY29kZVRyYW5zbGl0ZXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDkvMTkgMjM6MTc6MDIgJCAKKyAqICRSZXZpc2lvbjogMS4xMyAkCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVUNoYXJhY3RlclByb3BlcnR5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVUNoYXJhY3Rlck5hbWU7CisKKy8qKgorICogQSB0cmFuc2xpdGVyYXRvciB0aGF0IHBlcmZvcm1zIG5hbWUgdG8gY2hhcmFjdGVyIG1hcHBpbmcuCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKi8KK2NsYXNzIE5hbWVVbmljb2RlVHJhbnNsaXRlcmF0b3IgZXh0ZW5kcyBUcmFuc2xpdGVyYXRvciB7CisKKyAgICBjaGFyIG9wZW5EZWxpbWl0ZXI7CisgICAgY2hhciBjbG9zZURlbGltaXRlcjsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgX0lEID0gIk5hbWUtQW55IjsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFTl9QQVQgICAgPSAiXFxOfnt+IjsKKyAgICBzdGF0aWMgZmluYWwgY2hhciAgIE9QRU5fREVMSU0gID0gJ1xcJzsgLy8gZmlyc3QgY2hhciBvZiBPUEVOX1BBVAorICAgIHN0YXRpYyBmaW5hbCBjaGFyICAgQ0xPU0VfREVMSU0gPSAnfSc7CisgICAgc3RhdGljIGZpbmFsIGNoYXIgICBTUEFDRSAgICAgICA9ICcgJzsKKworCisgICAgLyoqCisgICAgICogU3lzdGVtIHJlZ2lzdHJhdGlvbiBob29rLgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyKCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlckZhY3RvcnkoX0lELCBuZXcgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hbWVVbmljb2RlVHJhbnNsaXRlcmF0b3IobnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB0cmFuc2xpdGVyYXRvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgTmFtZVVuaWNvZGVUcmFuc2xpdGVyYXRvcihVbmljb2RlRmlsdGVyIGZpbHRlcikgeworICAgICAgICBzdXBlcihfSUQsIGZpbHRlcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyB7QGxpbmsgVHJhbnNsaXRlcmF0b3IjaGFuZGxlVHJhbnNsaXRlcmF0ZX0uCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gb2Zmc2V0cywgYm9vbGVhbiBpc0luY3JlbWVudGFsKSB7CisKKyAgICAgICAgaW50IG1heExlbiA9IFVDaGFyYWN0ZXJOYW1lLmdldEluc3RhbmNlKCkuZ2V0TWF4Q2hhck5hbWVMZW5ndGgoKSArIDE7IC8vIGFsbG93IGZvciB0ZW1wb3JhcnkgdHJhaWxpbmcgc3BhY2UKKworICAgICAgICBTdHJpbmdCdWZmZXIgbmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIobWF4TGVuKTsKKworICAgICAgICAvLyBHZXQgdGhlIGxlZ2FsIGNoYXJhY3RlciBzZXQKKyAgICAgICAgVW5pY29kZVNldCBsZWdhbCA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgIFVDaGFyYWN0ZXJOYW1lLmdldEluc3RhbmNlKCkuZ2V0Q2hhck5hbWVDaGFyYWN0ZXJzKGxlZ2FsKTsKKworICAgICAgICBpbnQgY3Vyc29yID0gb2Zmc2V0cy5zdGFydDsKKyAgICAgICAgaW50IGxpbWl0ID0gb2Zmc2V0cy5saW1pdDsKKworICAgICAgICAvLyBNb2RlczoKKyAgICAgICAgLy8gMCAtIGxvb2tpbmcgZm9yIG9wZW4gZGVsaW1pdGVyCisgICAgICAgIC8vIDEgLSBhZnRlciBvcGVuIGRlbGltaXRlcgorICAgICAgICBpbnQgbW9kZSA9IDA7CisgICAgICAgIGludCBvcGVuUG9zID0gLTE7IC8vIG9wZW4gZGVsaW0gY2FuZGlkYXRlIHBvcworICAgICAgICAKKyAgICAgICAgaW50IGM7CisgICAgICAgIHdoaWxlIChjdXJzb3IgPCBsaW1pdCkgeworICAgICAgICAgICAgYyA9IHRleHQuY2hhcjMyQXQoY3Vyc29yKTsKKworICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIDA6IC8vIGxvb2tpbmcgZm9yIG9wZW4gZGVsaW1pdGVyCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gT1BFTl9ERUxJTSkgeyAvLyBxdWljayBjaGVjayBmaXJzdAorICAgICAgICAgICAgICAgICAgICBvcGVuUG9zID0gY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IFV0aWxpdHkucGFyc2VQYXR0ZXJuKE9QRU5fUEFULCB0ZXh0LCBjdXJzb3IsIGxpbWl0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgbGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vICoqKiByZXByb2Nlc3MgY2hhcjMyQXQoY3Vyc29yKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDE6IC8vIGFmdGVyIG9wZW4gZGVsaW1pdGVyCisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3IgbGVnYWwgY2hhcnMuICBJZiBccysgaXMgZm91bmQsIGNvbnZlcnQgaXQKKyAgICAgICAgICAgICAgICAvLyB0byBhIHNpbmdsZSBzcGFjZS4gIElmIGNsb3NlRGVsaW1pdGVyIGlzIGZvdW5kLCBleGl0CisgICAgICAgICAgICAgICAgLy8gdGhlIGxvb3AuICBJZiBhbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGZvdW5kLCBleGl0IHRoZQorICAgICAgICAgICAgICAgIC8vIGxvb3AuICBJZiB0aGUgbGltaXQgaXMgcmVhY2hlZCwgZXhpdCB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IFxzKyA9PiBTUEFDRS4gIFRoaXMgYXNzdW1lcyB0aGVyZSBhcmUgbm8KKyAgICAgICAgICAgICAgICAvLyBydW5zIG9mID4xIHNwYWNlIGNoYXJhY3RlcnMgaW4gbmFtZXMuCisgICAgICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsZWFkaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLmNoYXJBdChuYW1lLmxlbmd0aCgpLTEpICE9IFNQQUNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLmFwcGVuZChTUEFDRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgdG9vIGxvbmcgdGhlbiBhYm9ydC4gIG1heExlbiBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVtcG9yYXJ5IHRyYWlsaW5nIHNwYWNlLCBzbyB1c2UgJz4nLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBtYXhMZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBDTE9TRV9ERUxJTSkgeworCisgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBuYW1lLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRyYWlsaW5nIHNwYWNlLCBpZiBhbnkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuY2hhckF0KGxlbi0xKSA9PSBTUEFDRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5zZXRMZW5ndGgoLS1sZW4pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYyA9IFVDaGFyYWN0ZXIuZ2V0Q2hhckZyb21FeHRlbmRlZE5hbWUobmFtZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb2t1cCBzdWNjZWVkZWQKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0KFVURjE2LmdldENoYXJDb3VudChDTE9TRV9ERUxJTSkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IrKzsgLy8gYWR2YW5jZSBvdmVyIENMT1NFX0RFTElNCisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSBVVEYxNi52YWx1ZU9mKGMpOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKG9wZW5Qb3MsIGN1cnNvciwgc3RyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGluZGljZXMgZm9yIHRoZSBjaGFuZ2UgaW4gdGhlIGxlbmd0aCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0cmluZy4gIERvIG5vdCBhc3N1bWUgdGhhdCBzdHIubGVuZ3RoKCkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEsIGluIGNhc2Ugb2Ygc3Vycm9nYXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IGN1cnNvciAtIG9wZW5Qb3MgLSBzdHIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgLT0gZGVsdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCAtPSBkZWx0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydChjdXJzb3IgPT0gb3BlblBvcyArIHN0ci5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGxvb2t1cCBmYWlsZWQsIHdlIGxlYXZlIHRoaW5ncyBhcy1pcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwgc3dpdGNoIHRvIG1vZGUgMCBhbmQgY29udGludWUuCisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAwOworICAgICAgICAgICAgICAgICAgICBvcGVuUG9zID0gLTE7IC8vIGNsb3NlIG9mZiBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vICoqKiByZXByb2Nlc3MgY2hhcjMyQXQoY3Vyc29yKQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChsZWdhbC5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgICAgICBVVEYxNi5hcHBlbmQobmFtZSwgYyk7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGdvIHBhc3QgdGhlIGxvbmdlc3QgcG9zc2libGUgbmFtZSB0aGVuIGFib3J0LgorICAgICAgICAgICAgICAgICAgICAvLyBtYXhMZW4gaW5jbHVkZXMgdGVtcG9yYXJ5IHRyYWlsaW5nIHNwYWNlLCBzbyB1c2UgJz49Jy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUubGVuZ3RoKCkgPj0gbWF4TGVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEludmFsaWQgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC0tY3Vyc29yOyAvLyBCYWNrdXAgYW5kIHJlcHJvY2VzcyB0aGlzIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICBtb2RlID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3Vyc29yICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldHMuY29udGV4dExpbWl0ICs9IGxpbWl0IC0gb2Zmc2V0cy5saW1pdDsKKyAgICAgICAgb2Zmc2V0cy5saW1pdCA9IGxpbWl0OworICAgICAgICAvLyBJbiBpbmNyZW1lbnRhbCBtb2RlLCBvbmx5IGFkdmFuY2UgdGhlIGN1cnNvciB1cCB0byB0aGUgbGFzdAorICAgICAgICAvLyBvcGVuIGRlbGltaXRlciBjYW5kaWRhdGUuCisgICAgICAgIG9mZnNldHMuc3RhcnQgPSAoaXNJbmNyZW1lbnRhbCAmJiBvcGVuUG9zID49IDApID8gb3BlblBvcyA6IGN1cnNvcjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9Ob3JtYWxpemF0aW9uVHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L05vcm1hbGl6YXRpb25UcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiZDBmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Ob3JtYWxpemF0aW9uVHJhbnNsaXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDY3MSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBDb3B5cmlnaHQgKEMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDA2LzA4LzAxICAgIGFsaXUgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKKworLyoqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAdmVyc2lvbiAkUkNTZmlsZTogTm9ybWFsaXphdGlvblRyYW5zbGl0ZXJhdG9yLmphdmEsdiAkICRSZXZpc2lvbjogMS4xOSAkICREYXRlOiAyMDAyLzA3LzI3IDAxOjA0OjU0ICQKKyAqLworZmluYWwgY2xhc3MgTm9ybWFsaXphdGlvblRyYW5zbGl0ZXJhdG9yIGV4dGVuZHMgVHJhbnNsaXRlcmF0b3IgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbm9ybWFsaXphdGlvbiBtb2RlIG9mIHRoaXMgdHJhbnNsaXRlcmF0b3IuCisgICAgICovCisgICAgcHJpdmF0ZSBOb3JtYWxpemVyLk1vZGUgbW9kZTsKKworICAgIC8qKgorICAgICAqIE5vcm1hbGl6YXRpb24gb3B0aW9ucyBmb3IgdGhpcyB0cmFuc2xpdGVyYXRvci4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBvcHRpb25zOworCisgICAgLyoqCisgICAgICogVGhlIHNldCBvZiAidW5zYWZlIHN0YXJ0IiBjaGFyYWN0ZXJzLiAgVGhlc2UgYXJlIGNoYXJhY3RlcnMKKyAgICAgKiB3aXRoIGNjPT0wIGJ1dCB3aGljaCBtYXkgaW50ZXJhY3Qgd2l0aCBwcmV2aW91cyBjaGFyYWN0ZXJzLiAgV2UKKyAgICAgKiBlZmZlY3RpdmVseSBjb25zaWRlciB0aGVzZSB0byBiZSBjYyE9MCwgZm9yIG91ciBwdXJwb3Nlcy4KKyAgICAgKgorICAgICAqIEZyb20gaHR0cDovL3d3dy5tYWNjaGlhdG8uY29tL3V0Yy9ORlVuc2FmZVN0YXJ0LTMuMS4xZFgudHh0CisgICAgICogR2VuZXJhdGVkIGluIHVuaWNvZGV0b29scywgTkZTa2lwcGFibGUKKyAgICAgKgorICAgICAqLworICAgICAKKyAgICBzdGF0aWMgZmluYWwgVW5pY29kZVNldFtdIFVOU0FGRV9TVEFSVFMgPSBuZXcgVW5pY29kZVNldFs0XTsKKyAgICBzdGF0aWMgZmluYWwgVW5pY29kZVNldFtdIFNLSVBQQUJMRVMgPSBuZXcgVW5pY29kZVNldFs0XTsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgaW50CisgICAgICAgIEQgPSAwLCBDID0gMSwgS0Q9IDIsIEtDID0gMzsKKyAgICAKKyAgICAvLyBJbnN0YW5jZSBkYXRhLCBzaW1wbHkgcG9pbnRlciB0byBvbmUgb2YgdGhlIHNldHMgYmVsb3cKKyAgICBmaW5hbCBVbmljb2RlU2V0IFVOU0FGRV9TVEFSVDsKKyAgICBmaW5hbCBVbmljb2RlU2V0IFNLSVBQQUJMRTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBTeXN0ZW0gcmVnaXN0cmF0aW9uIGhvb2suCisgICAgICovCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXIoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LU5GQyIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemF0aW9uVHJhbnNsaXRlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIGdldEluc3RhbmNlKE5vcm1hbGl6ZXIuTkZDKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LU5GRCIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemF0aW9uVHJhbnNsaXRlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIGdldEluc3RhbmNlKE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiQW55LU5GS0MiLCBuZXcgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXphdGlvblRyYW5zbGl0ZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICBnZXRJbnN0YW5jZShOb3JtYWxpemVyLk5GS0MpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXJGYWN0b3J5KCJBbnktTkZLRCIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemF0aW9uVHJhbnNsaXRlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIGdldEluc3RhbmNlKE5vcm1hbGl6ZXIuTkZLRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlclNwZWNpYWxJbnZlcnNlKCJORkMiLCAiTkZEIiwgdHJ1ZSk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyU3BlY2lhbEludmVyc2UoIk5GS0MiLCAiTkZLRCIsIHRydWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZhY3RvcnkgbWV0aG9kLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTm9ybWFsaXphdGlvblRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKE5vcm1hbGl6ZXIuTW9kZSBtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGlkID0gbmV3IFN0cmluZ0J1ZmZlcigiTkYiKTsKKyAgICAgICAgaW50IGNob2ljZSA9IDA7CisgICAgICAgIGlmKG09PU5vcm1hbGl6ZXIuTkZDKXsKKyAgICAgICAgICAgIGlkLmFwcGVuZCgiQyIpOworICAgICAgICAgICAgY2hvaWNlIHw9IEM7CisgICAgICAgIH1lbHNlIGlmKG09PU5vcm1hbGl6ZXIuTkZLQyl7CisgICAgICAgICAgICBpZC5hcHBlbmQoIktDIik7CisgICAgICAgICAgICBjaG9pY2UgfD0gS0M7CisgICAgICAgIH1lbHNlIGlmKG09PU5vcm1hbGl6ZXIuTkZEKXsKKyAgICAgICAgICAgIGlkLmFwcGVuZCgiRCIpOworICAgICAgICAgICAgY2hvaWNlIHw9IEQ7CisgICAgICAgIH1lbHNlIGlmKG09PU5vcm1hbGl6ZXIuTkZLRCl7CisgICAgICAgICAgICBpZC5hcHBlbmQoIktEIik7CisgICAgICAgICAgICBjaG9pY2UgfD0gS0Q7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qaWYgKG0uY29tcGF0KCkpIHsKKyAgICAgICAgICAgIGlkLmFwcGVuZCgnSycpOworICAgICAgICAgICAgY2hvaWNlIHw9IEtEOworICAgICAgICB9CisgICAgICAgIGlmIChtLmNvbXBvc2UoKSkgeworICAgICAgICAgICAgaWQuYXBwZW5kKCdDJyk7CisgICAgICAgICAgICBjaG9pY2UgfD0gQzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlkLmFwcGVuZCgnRCcpOworICAgICAgICB9Ki8KKyAgICAgICAgcmV0dXJuIG5ldyBOb3JtYWxpemF0aW9uVHJhbnNsaXRlcmF0b3IoaWQudG9TdHJpbmcoKSwgbSwgY2hvaWNlLCBvcHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZhY3RvcnkgbWV0aG9kLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTm9ybWFsaXphdGlvblRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKE5vcm1hbGl6ZXIuTW9kZSBtKSB7CisgICAgICAgIHJldHVybiBnZXRJbnN0YW5jZShtLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgdHJhbnNsaXRlcmF0b3IuCisgICAgICovCisgICAgcHJpdmF0ZSBOb3JtYWxpemF0aW9uVHJhbnNsaXRlcmF0b3IoU3RyaW5nIGlkLCBOb3JtYWxpemVyLk1vZGUgbSwgaW50IHN0YXJ0Q2hvaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHQpIHsKKyAgICAgICAgc3VwZXIoaWQsIG51bGwpOworICAgICAgICBtb2RlID0gbTsKKyAgICAgICAgb3B0aW9ucyA9IG9wdDsKKyAgICAgICAgVU5TQUZFX1NUQVJUID0gVU5TQUZFX1NUQVJUU1tzdGFydENob2ljZV07CisgICAgICAgIFNLSVBQQUJMRSA9IFNLSVBQQUJMRVNbc3RhcnRDaG9pY2VdOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudHMge0BsaW5rIFRyYW5zbGl0ZXJhdG9yI2hhbmRsZVRyYW5zbGl0ZXJhdGV9LgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVRyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIG9mZnNldHMsIGJvb2xlYW4gaXNJbmNyZW1lbnRhbCkgeworICAgICAgICBpbnQgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0OworICAgICAgICBpbnQgbGltaXQgPSBvZmZzZXRzLmxpbWl0OworICAgICAgICBpZiAoc3RhcnQgPj0gbGltaXQpIHJldHVybjsKKworICAgICAgICBpbnQgb3ZlcmFsbERlbHRhID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHN0cmluZyBsb29raW5nIGZvciBzYWZlIGNoYXJhY3RlcnMuCisgICAgICAgIC8vIFdoZW5ldmVyIHlvdSBoaXQgb25lIG5vcm1hbGl6ZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbGFzdAorICAgICAgICAvLyBzYWZlIGNoYXJhY3RlciB1cCB0byBqdXN0IGJlZm9yZSB0aGUgbmV4dCBzYWZlIGNoYXJhY3RlcgorICAgICAgICAvLyBBbHNvLCBpZiB5b3UgaGl0IHRoZSBlbmQgYW5kIHdlIGFyZSBub3QgaW4gaW5jcmVtZW50YWwgbW9kZSwKKyAgICAgICAgLy8gZG8gdG8gZW5kLgorICAgICAgICAgICAgCisgICAgICAgIC8vIFRPRE86IGZpeCBmb3Igc3Vycm9nYXRlcworICAgICAgICAvLyBUT0RPOiBhZGQgUXVpY2tDaGVjaywgc28gd2UgcmFyZWx5IGNvbnZlcnQgT0sgc3R1ZmYKKyAgICAgICAgICAgIAorICAgICAgICBpbnQgbGFzdFNhZmUgPSBzdGFydDsgLy8gZ28gYmFjayB0byBzdGFydCBpbiBhbnkgZXZlbnQKKyAgICAgICAgaW50IGNwOworICAgICAgICBmb3IgKGludCBpID0gc3RhcnQrMTsgaSA8IGxpbWl0OyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAgICAgICAgIGNwID0gdGV4dC5jaGFyMzJBdChpKTsKKyAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmdldENvbWJpbmluZ0NsYXNzKGNwKSA9PSAwICYmICFVTlNBRkVfU1RBUlQuY29udGFpbnMoY3ApKSB7CisgICAgICAgICAgICAgICAgaW50IGRlbHRhID0gY29udmVydCh0ZXh0LCBsYXN0U2FmZSwgaSwgbnVsbCk7CisgICAgICAgICAgICAgICAgaSArPSBkZWx0YTsKKyAgICAgICAgICAgICAgICBsaW1pdCArPSBkZWx0YTsKKyAgICAgICAgICAgICAgICBvdmVyYWxsRGVsdGEgKz0gZGVsdGE7CisgICAgICAgICAgICAgICAgbGFzdFNhZmUgPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghaXNJbmNyZW1lbnRhbCkgeworICAgICAgICAgICAgaW50IGRlbHRhID0gY29udmVydCh0ZXh0LCBsYXN0U2FmZSwgbGltaXQsIG51bGwpOworICAgICAgICAgICAgb3ZlcmFsbERlbHRhICs9IGRlbHRhOworICAgICAgICAgICAgbGFzdFNhZmUgPSBsaW1pdCArIGRlbHRhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgYXJlIGluY3JlbWVudGFsLCBzbyBhY2NlcHQgdGhlIGxhc3QgY2hhcmFjdGVycyBJRiB0aGV5IHR1cm4gaW50byBTS0lQUEFCTEVzCisgICAgICAgICAgICBpbnQgZGVsdGEgPSBjb252ZXJ0KHRleHQsIGxhc3RTYWZlLCBsaW1pdCwgU0tJUFBBQkxFKTsKKyAgICAgICAgICAgIGlmIChkZWx0YSAhPSBJbnRlZ2VyLk1JTl9WQUxVRSkgeworICAgICAgICAgICAgICAgIG92ZXJhbGxEZWx0YSArPSBkZWx0YTsKKyAgICAgICAgICAgICAgICBsYXN0U2FmZSA9IGxpbWl0ICsgZGVsdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0cy5jb250ZXh0TGltaXQgKz0gb3ZlcmFsbERlbHRhOworICAgICAgICBvZmZzZXRzLmxpbWl0ICs9IG92ZXJhbGxEZWx0YTsKKyAgICAgICAgb2Zmc2V0cy5zdGFydCA9IGxhc3RTYWZlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgcmFuZ2UgZnJvbSBsYXN0U2FmZSB0byBsaW1pdC4KKyAgICAgKiBAcGFyYW0gdmVyaWZ5IElmIG5vbi1udWxsLCBjaGVjayB0byBzZWUgdGhhdCBhbGwgcmVwbGFjZW1lbnQgY2hhcmFjdGVycyBhcmUgaW4gaXQuIElmIG5vdCwKKyAgICAgKiBhYm9ydCB0aGUgY29udmVyc2lvbiBhbmQgcmV0dXJuIEludGVnZXIuTUlOX1ZBTFVFLgorICAgICAqIEByZXR1cm4gcmV0dXJuIHRoZSBkZWx0YSBpbiBsZW5ndGggKG5ldyAtIG9sZCksIG9yIEludGVnZXIuTUlOX1ZBTFVFIGlmIHRoZSB2ZXJpZnkgYWJvcnRlZC4KKyAgICAgKi8KKyAgICBpbnQgY29udmVydChSZXBsYWNlYWJsZSB0ZXh0LCBpbnQgbGFzdFNhZmUsIGludCBsaW1pdCwgVW5pY29kZVNldCB2ZXJpZnkpIHsgICAgICAgIAorICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigidDogIiArIGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eS5oZXgodGV4dC50b1N0cmluZygpKSArICIsIHM6ICIgKyBsYXN0U2FmZSArICIsIGw6ICIgKyBsaW1pdCk7CisKKyAgICAgICAgaW50IGxlbiA9IGxpbWl0IC0gbGFzdFNhZmU7CisgICAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgbGVuKSB7CisgICAgICAgICAgICBidWZmZXIgPSBuZXcgY2hhcltsZW5dOyAvLyByYXJlLCBhbmQgd2UgZG9uJ3QgY2FyZSBpZiB3ZSBncm93IHRvbyBsYXJnZQorICAgICAgICB9CisgICAgICAgIHRleHQuZ2V0Q2hhcnMobGFzdFNhZmUsIGxpbWl0LCBidWZmZXIsIDApOworICAgICAgICBTdHJpbmcgaW5wdXQgPSBuZXcgU3RyaW5nKGJ1ZmZlciwgMCwgbGVuKTsgLy8gVE9ETzogZml4IG5vcm1hbGl6ZXIgdG8gdGFrZSBjaGFyW10KKyAgICAgICAgU3RyaW5nIG91dHB1dCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGlucHV0LCBtb2RlKTsKKyAgICAgICAgCisgICAgICAgIC8vIHZlcmlmeSBPSywgaWYgc3BlY2lmaWVkCisgICAgICAgIGlmICh2ZXJpZnkgIT0gbnVsbCkgeworICAgICAgICAgICAgYm9vbGVhbiBza2lwID0gIVNLSVBQQUJMRS5jb250YWluc0FsbChvdXRwdXQpOworICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKChza2lwID8gIiAgU0tJUDogIiA6ICJOT1NLSVA6ICIpIAorICAgICAgICAgICAgICAgICAgICArIGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eS5lc2NhcGUoaW5wdXQpIAorICAgICAgICAgICAgICAgICAgICArICIgPT4gIiArIGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eS5lc2NhcGUob3V0cHV0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2tpcCkgcmV0dXJuIEludGVnZXIuTUlOX1ZBTFVFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3V0cHV0LmVxdWFscyhpbnB1dCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRleHQucmVwbGFjZShsYXN0U2FmZSwgbGltaXQsIG91dHB1dCk7CisgICAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoKCkgLSBsZW47CisgICAgfQorICAgIAorICAgIHByaXZhdGUgY2hhciBidWZmZXJbXSA9IG5ldyBjaGFyWzMwXTsKKyAgICAKKyAgICBzdGF0aWMgeworICAgICAgICBVTlNBRkVfU1RBUlRTW0RdID0gbmV3IFVuaWNvZGVTZXQoIltcdTBGNzNcdTBGNzVcdTBGODFdIiwgZmFsc2UpOworICAgICAgICBVTlNBRkVfU1RBUlRTW0NdID0gbmV3IFVuaWNvZGVTZXQoIltcdTA5QkVcdTA5RDdcdTBCM0VcdTBCNTYtXHUwQjU3XHUwQkJFXHUwQkQ3XHUwQ0MyXHUwQ0Q1LVx1MENENiIKKyAgICAgICAgICAgICsgIlx1MEQzRVx1MEQ1N1x1MERDRlx1MERERlx1MEY3M1x1MEY3NVx1MEY4MVx1MTAyRVx1MTE2MS1cdTExNzVcdTExQTgtXHUxMUMyXSIsIGZhbHNlKTsKKyAgICAgICAgVU5TQUZFX1NUQVJUU1tLRF0gPSBuZXcgVW5pY29kZVNldCgiW1x1MEY3M1x1MEY3NVx1MEY4MVx1RkY5RS1cdUZGOUZdIiwgZmFsc2UpOworICAgICAgICBVTlNBRkVfU1RBUlRTW0tDXSA9IG5ldyBVbmljb2RlU2V0KCJbXHUwOUJFXHUwOUQ3XHUwQjNFXHUwQjU2LVx1MEI1N1x1MEJCRVx1MEJEN1x1MENDMlx1MENENS1cdTBDRDYiCisgICAgICAgICAgICArICJcdTBEM0VcdTBENTdcdTBEQ0ZcdTBEREZcdTBGNzNcdTBGNzVcdTBGODFcdTEwMkVcdTExNjEtXHUxMTc1XHUxMUE4LVx1MTFDMlx1MzEzM1x1MzEzNS1cdTMxMzYiCisgICAgICAgICAgICArICJcdTMxM0EtXHUzMTNGXHUzMTRGLVx1MzE2M1x1RkY5RS1cdUZGOUZcdUZGQTNcdUZGQTUtXHVGRkE2XHVGRkFBLVx1RkZBRlx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGIgorICAgICAgICAgICAgKyAiXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdIiwgZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgIFNLSVBQQUJMRVNbRF0gPSBuZXcgVW5pY29kZVNldCgKKwkgICAgICAgICJbXlxcdTAwQzAtXFx1MDBDNVxcdTAwQzctXFx1MDBDRlxcdTAwRDEtXFx1MDBENlxcdTAwRDktXFx1MDBERCIKKyAgICAgICAgICAgICsgIlxcdTAwRTAtXFx1MDBFNVxcdTAwRTctXFx1MDBFRlxcdTAwRjEtXFx1MDBGNlxcdTAwRjktXFx1MDBGRCIKKyAgICAgICAgICAgICsgIlxcdTAwRkYtXFx1MDEwRlxcdTAxMTItXFx1MDEyNVxcdTAxMjgtXFx1MDEzMFxcdTAxMzQtXFx1MDEzNyIKKyAgICAgICAgICAgICsgIlxcdTAxMzktXFx1MDEzRVxcdTAxNDMtXFx1MDE0OFxcdTAxNEMtXFx1MDE1MVxcdTAxNTQtXFx1MDE2NSIKKyAgICAgICAgICAgICsgIlxcdTAxNjgtXFx1MDE3RVxcdTAxQTAtXFx1MDFBMVxcdTAxQUYtXFx1MDFCMFxcdTAxQ0QtXFx1MDFEQyIKKyAgICAgICAgICAgICsgIlxcdTAxREUtXFx1MDFFM1xcdTAxRTYtXFx1MDFGMFxcdTAxRjQtXFx1MDFGNVxcdTAxRjgtXFx1MDIxQiIKKyAgICAgICAgICAgICsgIlxcdTAyMUUtXFx1MDIxRlxcdTAyMjYtXFx1MDIzM1xcdTAzMDAtXFx1MDM0RVxcdTAzNjAtXFx1MDM2RiIKKyAgICAgICAgICAgICsgIlxcdTAzNzRcXHUwMzdFXFx1MDM4NS1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDM5MFxcdTAzQUEtIgorICAgICAgICAgICAgKyAiXFx1MDNCMFxcdTAzQ0EtXFx1MDNDRVxcdTAzRDMtXFx1MDNENFxcdTA0MDAtXFx1MDQwMVxcdTA0MDMiCisgICAgICAgICAgICArICJcXHUwNDA3XFx1MDQwQy1cXHUwNDBFXFx1MDQxOVxcdTA0MzlcXHUwNDUwLVxcdTA0NTFcXHUwNDUzIgorICAgICAgICAgICAgKyAiXFx1MDQ1N1xcdTA0NUMtXFx1MDQ1RVxcdTA0NzYtXFx1MDQ3N1xcdTA0ODMtXFx1MDQ4NlxcdTA0QzEtIgorICAgICAgICAgICAgKyAiXFx1MDRDMlxcdTA0RDAtXFx1MDREM1xcdTA0RDYtXFx1MDREN1xcdTA0REEtXFx1MDRERlxcdTA0RTItIgorICAgICAgICAgICAgKyAiXFx1MDRFN1xcdTA0RUEtXFx1MDRGNVxcdTA0RjgtXFx1MDRGOVxcdTA1OTEtXFx1MDVBMVxcdTA1QTMtIgorICAgICAgICAgICAgKyAiXFx1MDVCOVxcdTA1QkItXFx1MDVCRFxcdTA1QkZcXHUwNUMxLVxcdTA1QzJcXHUwNUM0XFx1MDYyMi0iCisgICAgICAgICAgICArICJcXHUwNjI2XFx1MDY0Qi1cXHUwNjU1XFx1MDY3MFxcdTA2QzBcXHUwNkMyXFx1MDZEM1xcdTA2RDYtIgorICAgICAgICAgICAgKyAiXFx1MDZEQ1xcdTA2REYtXFx1MDZFNFxcdTA2RTctXFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTEiCisgICAgICAgICAgICArICJcXHUwNzMwLVxcdTA3NEFcXHUwOTI5XFx1MDkzMVxcdTA5MzRcXHUwOTNDXFx1MDk0RFxcdTA5NTEtIgorICAgICAgICAgICAgKyAiXFx1MDk1NFxcdTA5NTgtXFx1MDk1RlxcdTA5QkNcXHUwOUNCLVxcdTA5Q0RcXHUwOURDLVxcdTA5REQiCisgICAgICAgICAgICArICJcXHUwOURGXFx1MEEzM1xcdTBBMzZcXHUwQTNDXFx1MEE0RFxcdTBBNTktXFx1MEE1QlxcdTBBNUVcXHUwQUJDIgorICAgICAgICAgICAgKyAiXFx1MEFDRFxcdTBCM0NcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1Qy1cXHUwQjVEXFx1MEI5NCIKKyAgICAgICAgICAgICsgIlxcdTBCQ0EtXFx1MEJDRFxcdTBDNDhcXHUwQzREXFx1MEM1NS1cXHUwQzU2XFx1MENDMFxcdTBDQzctIgorICAgICAgICAgICAgKyAiXFx1MENDOFxcdTBDQ0EtXFx1MENDQlxcdTBDQ0RcXHUwRDRBLVxcdTBENERcXHUwRENBXFx1MEREQSIKKyAgICAgICAgICAgICsgIlxcdTBEREMtXFx1MERERVxcdTBFMzgtXFx1MEUzQVxcdTBFNDgtXFx1MEU0QlxcdTBFQjgtXFx1MEVCOSIKKyAgICAgICAgICAgICsgIlxcdTBFQzgtXFx1MEVDQlxcdTBGMTgtXFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGNDMiCisgICAgICAgICAgICArICJcXHUwRjREXFx1MEY1MlxcdTBGNTdcXHUwRjVDXFx1MEY2OVxcdTBGNzEtXFx1MEY3NlxcdTBGNzhcXHUwRjdBIgorICAgICAgICAgICAgKyAiLVxcdTBGN0RcXHUwRjgwLVxcdTBGODRcXHUwRjg2LVxcdTBGODdcXHUwRjkzXFx1MEY5RFxcdTBGQTIiCisgICAgICAgICAgICArICJcXHUwRkE3XFx1MEZBQ1xcdTBGQjlcXHUwRkM2XFx1MTAyNlxcdTEwMzdcXHUxMDM5XFx1MTcxNFxcdTE3MzQiCisgICAgICAgICAgICArICJcXHUxN0QyXFx1MThBOVxcdTFFMDAtXFx1MUU5OVxcdTFFOUJcXHUxRUEwLVxcdTFFRjlcXHUxRjAwLSIKKyAgICAgICAgICAgICsgIlxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLSIKKyAgICAgICAgICAgICsgIlxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjQiCisgICAgICAgICAgICArICJcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMS1cXHUxRkM0XFx1MUZDNi1cXHUxRkQzXFx1MUZENi0iCisgICAgICAgICAgICArICJcXHUxRkRCXFx1MUZERC1cXHUxRkVGXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZEXFx1MjAwMC0iCisgICAgICAgICAgICArICJcXHUyMDAxXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBFQVxcdTIxMjZcXHUyMTJBLSIKKyAgICAgICAgICAgICsgIlxcdTIxMkJcXHUyMTlBLVxcdTIxOUJcXHUyMUFFXFx1MjFDRC1cXHUyMUNGXFx1MjIwNFxcdTIyMDkiCisgICAgICAgICAgICArICJcXHUyMjBDXFx1MjIyNFxcdTIyMjZcXHUyMjQxXFx1MjI0NFxcdTIyNDdcXHUyMjQ5XFx1MjI2MFxcdTIyNjIiCisgICAgICAgICAgICArICJcXHUyMjZELVxcdTIyNzFcXHUyMjc0LVxcdTIyNzVcXHUyMjc4LVxcdTIyNzlcXHUyMjgwLVxcdTIyODEiCisgICAgICAgICAgICArICJcXHUyMjg0LVxcdTIyODVcXHUyMjg4LVxcdTIyODlcXHUyMkFDLVxcdTIyQUZcXHUyMkUwLVxcdTIyRTMiCisgICAgICAgICAgICArICJcXHUyMkVBLVxcdTIyRURcXHUyMzI5LVxcdTIzMkFcXHUyQURDXFx1MzAyQS1cXHUzMDJGXFx1MzA0QyIKKyAgICAgICAgICAgICsgIlxcdTMwNEVcXHUzMDUwXFx1MzA1MlxcdTMwNTRcXHUzMDU2XFx1MzA1OFxcdTMwNUFcXHUzMDVDXFx1MzA1RSIKKyAgICAgICAgICAgICsgIlxcdTMwNjBcXHUzMDYyXFx1MzA2NVxcdTMwNjdcXHUzMDY5XFx1MzA3MC1cXHUzMDcxXFx1MzA3My0iCisgICAgICAgICAgICArICJcXHUzMDc0XFx1MzA3Ni1cXHUzMDc3XFx1MzA3OS1cXHUzMDdBXFx1MzA3Qy1cXHUzMDdEXFx1MzA5NCIKKyAgICAgICAgICAgICsgIlxcdTMwOTktXFx1MzA5QVxcdTMwOUVcXHUzMEFDXFx1MzBBRVxcdTMwQjBcXHUzMEIyXFx1MzBCNFxcdTMwQjYiCisgICAgICAgICAgICArICJcXHUzMEI4XFx1MzBCQVxcdTMwQkNcXHUzMEJFXFx1MzBDMFxcdTMwQzJcXHUzMEM1XFx1MzBDN1xcdTMwQzkiCisgICAgICAgICAgICArICJcXHUzMEQwLVxcdTMwRDFcXHUzMEQzLVxcdTMwRDRcXHUzMEQ2LVxcdTMwRDdcXHUzMEQ5LVxcdTMwREEiCisgICAgICAgICAgICArICJcXHUzMERDLVxcdTMwRERcXHUzMEY0XFx1MzBGNy1cXHUzMEZBXFx1MzBGRVxcdUFDMDAtXFx1RDdBMyIKKyAgICAgICAgICAgICsgIlxcdUY5MDAtXFx1RkEwRFxcdUZBMTBcXHVGQTEyXFx1RkExNS1cXHVGQTFFXFx1RkEyMFxcdUZBMjIiCisgICAgICAgICAgICArICJcXHVGQTI1LVxcdUZBMjZcXHVGQTJBLVxcdUZBMkRcXHVGQTMwLVxcdUZBNkFcXHVGQjFELVxcdUZCMUYiCisgICAgICAgICAgICArICJcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MC1cXHVGQjQxXFx1RkI0My0iCisgICAgICAgICAgICArICJcXHVGQjQ0XFx1RkI0Ni1cXHVGQjRFXFx1RkUyMC1cXHVGRTIzXFxVMDAwMUQxNUUtXFxVMDAwMUQxNjkiCisgICAgICAgICAgICArICJcXFUwMDAxRDE2RC1cXFUwMDAxRDE3MlxcVTAwMDFEMTdCLVxcVTAwMDFEMTgyXFxVMDAwMUQxODUtIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQxOEJcXFUwMDAxRDFBQS1cXFUwMDAxRDFBRFxcVTAwMDFEMUJCLVxcVTAwMDFEMUMwXFxVMDAwMiIKKyAgICAgICAgICAgICsgIkY4MDAtXFxVMDAwMkZBMURdIiwgZmFsc2UpOworLypVbmljb2RlOiAKKyAgICAgICJbXsAtxcctz9Et1tkt3eAt5ect7/Et9vkt/f8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tnj8tPz8tPz8tPz8tIgorICAgICsgIj8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/Pz8tPz8/LT8/LT8/LT8/LT8/LT8/Pz8tPz8/Py0/Pz8/LT8/LT8/LT8iCisgICAgKyAiPy0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8tPz8/LT8/LT8/Pz8/Py0/Py0/Py0/Py0/Pz8tPz8/PyIKKyAgICArICI/Pz8tPz8tPz8/LT8/LT8/Pz8/Pz8tPz8/Pz8/Py0/Py0/Pz8tPz8/Py0/Pz8tPz8tPz8/LT8/Pz8tPz8tPz8tIgorICAgICsgIj8/LT8/LT8/LT8/Pz8/Pz8/Pz8/LT8/Py0/Py0/Py0/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/Py0/Py0/Py0/Py0/Py0iCisgICAgKyAiPz8tPz8/Pz8tPz8tPz8tPz8/LT8/LT8/LT8/LT8/LT8/LT9cPy1cPz8tPz8/LT8/Py0/Py0/Pz8tPz8/Pz8/PyIKKyAgICArICI/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8/LT8/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/LT8/LT8/IgorICAgICsgIi0/Py0/Pz8tPz8/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/LT8/LT8/LT8/LT8/Py0/Pz8tPz8tPz8/Py0/Pz8/LT8/LT8iCisgICAgKyAiPy0/Py0/Py0/Py0/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tP10iKi8KKworICAgICAgICBTS0lQUEFCTEVTW0NdID0gbmV3IFVuaWNvZGVTZXQoCisJICAgICAgICAiW148LT5BLVBSLVphLXByLXpcXHUwMEE4XFx1MDBDMC1cXHUwMENGXFx1MDBEMS1cXHUwMEQ2XFx1MDBEOC0iCisgICAgICAgICAgICArICJcXHUwMEREXFx1MDBFMC1cXHUwMEVGXFx1MDBGMS1cXHUwMEY2XFx1MDBGOC1cXHUwMEZEXFx1MDBGRi0iCisgICAgICAgICAgICArICJcXHUwMTAzXFx1MDEwNi1cXHUwMTBGXFx1MDExMi1cXHUwMTE3XFx1MDExQS1cXHUwMTIxXFx1MDEyNC0iCisgICAgICAgICAgICArICJcXHUwMTI1XFx1MDEyOC1cXHUwMTJEXFx1MDEzMFxcdTAxMzktXFx1MDEzQVxcdTAxM0QtXFx1MDEzRSIKKyAgICAgICAgICAgICsgIlxcdTAxNDMtXFx1MDE0NFxcdTAxNDctXFx1MDE0OFxcdTAxNEMtXFx1MDE1MVxcdTAxNTQtXFx1MDE1NSIKKyAgICAgICAgICAgICsgIlxcdTAxNTgtXFx1MDE1RFxcdTAxNjAtXFx1MDE2MVxcdTAxNjQtXFx1MDE2NVxcdTAxNjgtXFx1MDE3MSIKKyAgICAgICAgICAgICsgIlxcdTAxNzQtXFx1MDE3RlxcdTAxQTAtXFx1MDFBMVxcdTAxQUYtXFx1MDFCMFxcdTAxQjdcXHUwMUNELSIKKyAgICAgICAgICAgICsgIlxcdTAxRENcXHUwMURFLVxcdTAxRTFcXHUwMUU2LVxcdTAxRUJcXHUwMUY0LVxcdTAxRjVcXHUwMUY4LSIKKyAgICAgICAgICAgICsgIlxcdTAxRkJcXHUwMjAwLVxcdTAyMUJcXHUwMjFFLVxcdTAyMUZcXHUwMjI2LVxcdTAyMzNcXHUwMjkyIgorICAgICAgICAgICAgKyAiXFx1MDMwMC1cXHUwMzRFXFx1MDM2MC1cXHUwMzZGXFx1MDM3NFxcdTAzN0VcXHUwMzg3XFx1MDM5MSIKKyAgICAgICAgICAgICsgIlxcdTAzOTVcXHUwMzk3XFx1MDM5OVxcdTAzOUZcXHUwM0ExXFx1MDNBNVxcdTAzQTlcXHUwM0FDXFx1MDNBRSIKKyAgICAgICAgICAgICsgIlxcdTAzQjFcXHUwM0I1XFx1MDNCN1xcdTAzQjlcXHUwM0JGXFx1MDNDMVxcdTAzQzVcXHUwM0M5LVxcdTAzQ0IiCisgICAgICAgICAgICArICJcXHUwM0NFXFx1MDNEMlxcdTA0MDZcXHUwNDEwXFx1MDQxM1xcdTA0MTUtXFx1MDQxOFxcdTA0MUFcXHUwNDFFIgorICAgICAgICAgICAgKyAiXFx1MDQyM1xcdTA0MjdcXHUwNDJCXFx1MDQyRFxcdTA0MzBcXHUwNDMzXFx1MDQzNS1cXHUwNDM4XFx1MDQzQSIKKyAgICAgICAgICAgICsgIlxcdTA0M0VcXHUwNDQzXFx1MDQ0N1xcdTA0NEJcXHUwNDREXFx1MDQ1NlxcdTA0NzQtXFx1MDQ3NVxcdTA0ODMiCisgICAgICAgICAgICArICItXFx1MDQ4NlxcdTA0RDgtXFx1MDREOVxcdTA0RTgtXFx1MDRFOVxcdTA1OTEtXFx1MDVBMVxcdTA1QTMtIgorICAgICAgICAgICAgKyAiXFx1MDVCOVxcdTA1QkItXFx1MDVCRFxcdTA1QkZcXHUwNUMxLVxcdTA1QzJcXHUwNUM0XFx1MDYyMi0iCisgICAgICAgICAgICArICJcXHUwNjIzXFx1MDYyN1xcdTA2NDhcXHUwNjRBLVxcdTA2NTVcXHUwNjcwXFx1MDZDMVxcdTA2RDJcXHUwNkQ1IgorICAgICAgICAgICAgKyAiLVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3LVxcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExIgorICAgICAgICAgICAgKyAiXFx1MDczMC1cXHUwNzRBXFx1MDkyOFxcdTA5MzBcXHUwOTMzXFx1MDkzQ1xcdTA5NERcXHUwOTUxLSIKKyAgICAgICAgICAgICsgIlxcdTA5NTRcXHUwOTU4LVxcdTA5NUZcXHUwOUJDXFx1MDlCRVxcdTA5QzdcXHUwOUNEXFx1MDlEN1xcdTA5REMiCisgICAgICAgICAgICArICItXFx1MDlERFxcdTA5REZcXHUwQTMzXFx1MEEzNlxcdTBBM0NcXHUwQTREXFx1MEE1OS1cXHUwQTVCIgorICAgICAgICAgICAgKyAiXFx1MEE1RVxcdTBBQkNcXHUwQUNEXFx1MEIzQ1xcdTBCM0VcXHUwQjQ3XFx1MEI0RFxcdTBCNTYtXFx1MEI1NyIKKyAgICAgICAgICAgICsgIlxcdTBCNUMtXFx1MEI1RFxcdTBCOTJcXHUwQkJFXFx1MEJDNi1cXHUwQkM3XFx1MEJDRFxcdTBCRDciCisgICAgICAgICAgICArICJcXHUwQzQ2XFx1MEM0RFxcdTBDNTUtXFx1MEM1NlxcdTBDQkZcXHUwQ0MyXFx1MENDNlxcdTBDQ0FcXHUwQ0NEIgorICAgICAgICAgICAgKyAiXFx1MENENS1cXHUwQ0Q2XFx1MEQzRVxcdTBENDYtXFx1MEQ0N1xcdTBENERcXHUwRDU3XFx1MERDQSIKKyAgICAgICAgICAgICsgIlxcdTBEQ0ZcXHUwREQ5XFx1MEREQ1xcdTBEREZcXHUwRTM4LVxcdTBFM0FcXHUwRTQ4LVxcdTBFNEIiCisgICAgICAgICAgICArICJcXHUwRUI4LVxcdTBFQjlcXHUwRUM4LVxcdTBFQ0JcXHUwRjE4LVxcdTBGMTlcXHUwRjM1XFx1MEYzNyIKKyAgICAgICAgICAgICsgIlxcdTBGMzlcXHUwRjQzXFx1MEY0RFxcdTBGNTJcXHUwRjU3XFx1MEY1Q1xcdTBGNjlcXHUwRjcxLVxcdTBGNzYiCisgICAgICAgICAgICArICJcXHUwRjc4XFx1MEY3QS1cXHUwRjdEXFx1MEY4MC1cXHUwRjg0XFx1MEY4Ni1cXHUwRjg3XFx1MEY5MyIKKyAgICAgICAgICAgICsgIlxcdTBGOURcXHUwRkEyXFx1MEZBN1xcdTBGQUNcXHUwRkI5XFx1MEZDNlxcdTEwMjVcXHUxMDJFXFx1MTAzNyIKKyAgICAgICAgICAgICsgIlxcdTEwMzlcXHUxMTAwLVxcdTExMTJcXHUxMTYxLVxcdTExNzVcXHUxMUE4LVxcdTExQzJcXHUxNzE0IgorICAgICAgICAgICAgKyAiXFx1MTczNFxcdTE3RDJcXHUxOEE5XFx1MUUwMC1cXHUxRTAzXFx1MUUwQS1cXHUxRTBGXFx1MUUxMi0iCisgICAgICAgICAgICArICJcXHUxRTFCXFx1MUUyMC1cXHUxRTI3XFx1MUUyQS1cXHUxRTQxXFx1MUU0NC1cXHUxRTUzXFx1MUU1OC0iCisgICAgICAgICAgICArICJcXHUxRTdEXFx1MUU4MC1cXHUxRTg3XFx1MUU4RS1cXHUxRTkxXFx1MUU5Ni1cXHUxRTk5XFx1MUVBMC0iCisgICAgICAgICAgICArICJcXHUxRUYzXFx1MUVGNi1cXHUxRUY5XFx1MUYwMC1cXHUxRjExXFx1MUYxOC1cXHUxRjE5XFx1MUYyMC0iCisgICAgICAgICAgICArICJcXHUxRjMxXFx1MUYzOC1cXHUxRjM5XFx1MUY0MC1cXHUxRjQxXFx1MUY0OC1cXHUxRjQ5XFx1MUY1MC0iCisgICAgICAgICAgICArICJcXHUxRjUxXFx1MUY1OVxcdTFGNjAtXFx1MUY3MVxcdTFGNzMtXFx1MUY3NVxcdTFGNzdcXHUxRjc5IgorICAgICAgICAgICAgKyAiXFx1MUY3Qi1cXHUxRjdEXFx1MUY4MC1cXHUxRjgxXFx1MUY4OC1cXHUxRjg5XFx1MUY5MC1cXHUxRjkxIgorICAgICAgICAgICAgKyAiXFx1MUY5OC1cXHUxRjk5XFx1MUZBMC1cXHUxRkExXFx1MUZBOC1cXHUxRkE5XFx1MUZCM1xcdTFGQjYiCisgICAgICAgICAgICArICJcXHUxRkJCLVxcdTFGQkNcXHUxRkJFLVxcdTFGQkZcXHUxRkMzXFx1MUZDNlxcdTFGQzlcXHUxRkNCLSIKKyAgICAgICAgICAgICsgIlxcdTFGQ0NcXHUxRkQzXFx1MUZEQlxcdTFGRTNcXHUxRkVCXFx1MUZFRS1cXHUxRkVGXFx1MUZGM1xcdTFGRjYiCisgICAgICAgICAgICArICJcXHUxRkY5XFx1MUZGQi1cXHUxRkZFXFx1MjAwMC1cXHUyMDAxXFx1MjBEMC1cXHUyMERDXFx1MjBFMSIKKyAgICAgICAgICAgICsgIlxcdTIwRTUtXFx1MjBFQVxcdTIxMjZcXHUyMTJBLVxcdTIxMkJcXHUyMTkwXFx1MjE5MlxcdTIxOTQiCisgICAgICAgICAgICArICJcXHUyMUQwXFx1MjFEMlxcdTIxRDRcXHUyMjAzXFx1MjIwOFxcdTIyMEJcXHUyMjIzXFx1MjIyNVxcdTIyM0MiCisgICAgICAgICAgICArICJcXHUyMjQzXFx1MjI0NVxcdTIyNDhcXHUyMjREXFx1MjI2MVxcdTIyNjQtXFx1MjI2NVxcdTIyNzItIgorICAgICAgICAgICAgKyAiXFx1MjI3M1xcdTIyNzYtXFx1MjI3N1xcdTIyN0EtXFx1MjI3RFxcdTIyODItXFx1MjI4M1xcdTIyODYtIgorICAgICAgICAgICAgKyAiXFx1MjI4N1xcdTIyOTEtXFx1MjI5MlxcdTIyQTJcXHUyMkE4LVxcdTIyQTlcXHUyMkFCXFx1MjJCMi0iCisgICAgICAgICAgICArICJcXHUyMkI1XFx1MjMyOS1cXHUyMzJBXFx1MkFEQ1xcdTMwMkEtXFx1MzAyRlxcdTMwNDZcXHUzMDRCIgorICAgICAgICAgICAgKyAiXFx1MzA0RFxcdTMwNEZcXHUzMDUxXFx1MzA1M1xcdTMwNTVcXHUzMDU3XFx1MzA1OVxcdTMwNUJcXHUzMDVEIgorICAgICAgICAgICAgKyAiXFx1MzA1RlxcdTMwNjFcXHUzMDY0XFx1MzA2NlxcdTMwNjhcXHUzMDZGXFx1MzA3MlxcdTMwNzVcXHUzMDc4IgorICAgICAgICAgICAgKyAiXFx1MzA3QlxcdTMwOTktXFx1MzA5QVxcdTMwOURcXHUzMEE2XFx1MzBBQlxcdTMwQURcXHUzMEFGXFx1MzBCMSIKKyAgICAgICAgICAgICsgIlxcdTMwQjNcXHUzMEI1XFx1MzBCN1xcdTMwQjlcXHUzMEJCXFx1MzBCRFxcdTMwQkZcXHUzMEMxXFx1MzBDNCIKKyAgICAgICAgICAgICsgIlxcdTMwQzZcXHUzMEM4XFx1MzBDRlxcdTMwRDJcXHUzMEQ1XFx1MzBEOFxcdTMwREJcXHUzMEVGLVxcdTMwRjIiCisgICAgICAgICAgICArICJcXHUzMEZEXFx1QUMwMFxcdUFDMUNcXHVBQzM4XFx1QUM1NFxcdUFDNzBcXHVBQzhDXFx1QUNBOFxcdUFDQzQiCisgICAgICAgICAgICArICJcXHVBQ0UwXFx1QUNGQ1xcdUFEMThcXHVBRDM0XFx1QUQ1MFxcdUFENkNcXHVBRDg4XFx1QURBNFxcdUFEQzAiCisgICAgICAgICAgICArICJcXHVBRERDXFx1QURGOFxcdUFFMTRcXHVBRTMwXFx1QUU0Q1xcdUFFNjhcXHVBRTg0XFx1QUVBMFxcdUFFQkMiCisgICAgICAgICAgICArICJcXHVBRUQ4XFx1QUVGNFxcdUFGMTBcXHVBRjJDXFx1QUY0OFxcdUFGNjRcXHVBRjgwXFx1QUY5Q1xcdUFGQjgiCisgICAgICAgICAgICArICJcXHVBRkQ0XFx1QUZGMFxcdUIwMENcXHVCMDI4XFx1QjA0NFxcdUIwNjBcXHVCMDdDXFx1QjA5OFxcdUIwQjQiCisgICAgICAgICAgICArICJcXHVCMEQwXFx1QjBFQ1xcdUIxMDhcXHVCMTI0XFx1QjE0MFxcdUIxNUNcXHVCMTc4XFx1QjE5NFxcdUIxQjAiCisgICAgICAgICAgICArICJcXHVCMUNDXFx1QjFFOFxcdUIyMDRcXHVCMjIwXFx1QjIzQ1xcdUIyNThcXHVCMjc0XFx1QjI5MFxcdUIyQUMiCisgICAgICAgICAgICArICJcXHVCMkM4XFx1QjJFNFxcdUIzMDBcXHVCMzFDXFx1QjMzOFxcdUIzNTRcXHVCMzcwXFx1QjM4Q1xcdUIzQTgiCisgICAgICAgICAgICArICJcXHVCM0M0XFx1QjNFMFxcdUIzRkNcXHVCNDE4XFx1QjQzNFxcdUI0NTBcXHVCNDZDXFx1QjQ4OFxcdUI0QTQiCisgICAgICAgICAgICArICJcXHVCNEMwXFx1QjREQ1xcdUI0RjhcXHVCNTE0XFx1QjUzMFxcdUI1NENcXHVCNTY4XFx1QjU4NFxcdUI1QTAiCisgICAgICAgICAgICArICJcXHVCNUJDXFx1QjVEOFxcdUI1RjRcXHVCNjEwXFx1QjYyQ1xcdUI2NDhcXHVCNjY0XFx1QjY4MFxcdUI2OUMiCisgICAgICAgICAgICArICJcXHVCNkI4XFx1QjZENFxcdUI2RjBcXHVCNzBDXFx1QjcyOFxcdUI3NDRcXHVCNzYwXFx1Qjc3Q1xcdUI3OTgiCisgICAgICAgICAgICArICJcXHVCN0I0XFx1QjdEMFxcdUI3RUNcXHVCODA4XFx1QjgyNFxcdUI4NDBcXHVCODVDXFx1Qjg3OFxcdUI4OTQiCisgICAgICAgICAgICArICJcXHVCOEIwXFx1QjhDQ1xcdUI4RThcXHVCOTA0XFx1QjkyMFxcdUI5M0NcXHVCOTU4XFx1Qjk3NFxcdUI5OTAiCisgICAgICAgICAgICArICJcXHVCOUFDXFx1QjlDOFxcdUI5RTRcXHVCQTAwXFx1QkExQ1xcdUJBMzhcXHVCQTU0XFx1QkE3MFxcdUJBOEMiCisgICAgICAgICAgICArICJcXHVCQUE4XFx1QkFDNFxcdUJBRTBcXHVCQUZDXFx1QkIxOFxcdUJCMzRcXHVCQjUwXFx1QkI2Q1xcdUJCODgiCisgICAgICAgICAgICArICJcXHVCQkE0XFx1QkJDMFxcdUJCRENcXHVCQkY4XFx1QkMxNFxcdUJDMzBcXHVCQzRDXFx1QkM2OFxcdUJDODQiCisgICAgICAgICAgICArICJcXHVCQ0EwXFx1QkNCQ1xcdUJDRDhcXHVCQ0Y0XFx1QkQxMFxcdUJEMkNcXHVCRDQ4XFx1QkQ2NFxcdUJEODAiCisgICAgICAgICAgICArICJcXHVCRDlDXFx1QkRCOFxcdUJERDRcXHVCREYwXFx1QkUwQ1xcdUJFMjhcXHVCRTQ0XFx1QkU2MFxcdUJFN0MiCisgICAgICAgICAgICArICJcXHVCRTk4XFx1QkVCNFxcdUJFRDBcXHVCRUVDXFx1QkYwOFxcdUJGMjRcXHVCRjQwXFx1QkY1Q1xcdUJGNzgiCisgICAgICAgICAgICArICJcXHVCRjk0XFx1QkZCMFxcdUJGQ0NcXHVCRkU4XFx1QzAwNFxcdUMwMjBcXHVDMDNDXFx1QzA1OFxcdUMwNzQiCisgICAgICAgICAgICArICJcXHVDMDkwXFx1QzBBQ1xcdUMwQzhcXHVDMEU0XFx1QzEwMFxcdUMxMUNcXHVDMTM4XFx1QzE1NFxcdUMxNzAiCisgICAgICAgICAgICArICJcXHVDMThDXFx1QzFBOFxcdUMxQzRcXHVDMUUwXFx1QzFGQ1xcdUMyMThcXHVDMjM0XFx1QzI1MFxcdUMyNkMiCisgICAgICAgICAgICArICJcXHVDMjg4XFx1QzJBNFxcdUMyQzBcXHVDMkRDXFx1QzJGOFxcdUMzMTRcXHVDMzMwXFx1QzM0Q1xcdUMzNjgiCisgICAgICAgICAgICArICJcXHVDMzg0XFx1QzNBMFxcdUMzQkNcXHVDM0Q4XFx1QzNGNFxcdUM0MTBcXHVDNDJDXFx1QzQ0OFxcdUM0NjQiCisgICAgICAgICAgICArICJcXHVDNDgwXFx1QzQ5Q1xcdUM0QjhcXHVDNEQ0XFx1QzRGMFxcdUM1MENcXHVDNTI4XFx1QzU0NFxcdUM1NjAiCisgICAgICAgICAgICArICJcXHVDNTdDXFx1QzU5OFxcdUM1QjRcXHVDNUQwXFx1QzVFQ1xcdUM2MDhcXHVDNjI0XFx1QzY0MFxcdUM2NUMiCisgICAgICAgICAgICArICJcXHVDNjc4XFx1QzY5NFxcdUM2QjBcXHVDNkNDXFx1QzZFOFxcdUM3MDRcXHVDNzIwXFx1QzczQ1xcdUM3NTgiCisgICAgICAgICAgICArICJcXHVDNzc0XFx1Qzc5MFxcdUM3QUNcXHVDN0M4XFx1QzdFNFxcdUM4MDBcXHVDODFDXFx1QzgzOFxcdUM4NTQiCisgICAgICAgICAgICArICJcXHVDODcwXFx1Qzg4Q1xcdUM4QThcXHVDOEM0XFx1QzhFMFxcdUM4RkNcXHVDOTE4XFx1QzkzNFxcdUM5NTAiCisgICAgICAgICAgICArICJcXHVDOTZDXFx1Qzk4OFxcdUM5QTRcXHVDOUMwXFx1QzlEQ1xcdUM5RjhcXHVDQTE0XFx1Q0EzMFxcdUNBNEMiCisgICAgICAgICAgICArICJcXHVDQTY4XFx1Q0E4NFxcdUNBQTBcXHVDQUJDXFx1Q0FEOFxcdUNBRjRcXHVDQjEwXFx1Q0IyQ1xcdUNCNDgiCisgICAgICAgICAgICArICJcXHVDQjY0XFx1Q0I4MFxcdUNCOUNcXHVDQkI4XFx1Q0JENFxcdUNCRjBcXHVDQzBDXFx1Q0MyOFxcdUNDNDQiCisgICAgICAgICAgICArICJcXHVDQzYwXFx1Q0M3Q1xcdUNDOThcXHVDQ0I0XFx1Q0NEMFxcdUNDRUNcXHVDRDA4XFx1Q0QyNFxcdUNENDAiCisgICAgICAgICAgICArICJcXHVDRDVDXFx1Q0Q3OFxcdUNEOTRcXHVDREIwXFx1Q0RDQ1xcdUNERThcXHVDRTA0XFx1Q0UyMFxcdUNFM0MiCisgICAgICAgICAgICArICJcXHVDRTU4XFx1Q0U3NFxcdUNFOTBcXHVDRUFDXFx1Q0VDOFxcdUNFRTRcXHVDRjAwXFx1Q0YxQ1xcdUNGMzgiCisgICAgICAgICAgICArICJcXHVDRjU0XFx1Q0Y3MFxcdUNGOENcXHVDRkE4XFx1Q0ZDNFxcdUNGRTBcXHVDRkZDXFx1RDAxOFxcdUQwMzQiCisgICAgICAgICAgICArICJcXHVEMDUwXFx1RDA2Q1xcdUQwODhcXHVEMEE0XFx1RDBDMFxcdUQwRENcXHVEMEY4XFx1RDExNFxcdUQxMzAiCisgICAgICAgICAgICArICJcXHVEMTRDXFx1RDE2OFxcdUQxODRcXHVEMUEwXFx1RDFCQ1xcdUQxRDhcXHVEMUY0XFx1RDIxMFxcdUQyMkMiCisgICAgICAgICAgICArICJcXHVEMjQ4XFx1RDI2NFxcdUQyODBcXHVEMjlDXFx1RDJCOFxcdUQyRDRcXHVEMkYwXFx1RDMwQ1xcdUQzMjgiCisgICAgICAgICAgICArICJcXHVEMzQ0XFx1RDM2MFxcdUQzN0NcXHVEMzk4XFx1RDNCNFxcdUQzRDBcXHVEM0VDXFx1RDQwOFxcdUQ0MjQiCisgICAgICAgICAgICArICJcXHVENDQwXFx1RDQ1Q1xcdUQ0NzhcXHVENDk0XFx1RDRCMFxcdUQ0Q0NcXHVENEU4XFx1RDUwNFxcdUQ1MjAiCisgICAgICAgICAgICArICJcXHVENTNDXFx1RDU1OFxcdUQ1NzRcXHVENTkwXFx1RDVBQ1xcdUQ1QzhcXHVENUU0XFx1RDYwMFxcdUQ2MUMiCisgICAgICAgICAgICArICJcXHVENjM4XFx1RDY1NFxcdUQ2NzBcXHVENjhDXFx1RDZBOFxcdUQ2QzRcXHVENkUwXFx1RDZGQ1xcdUQ3MTgiCisgICAgICAgICAgICArICJcXHVENzM0XFx1RDc1MFxcdUQ3NkNcXHVENzg4XFx1RjkwMC1cXHVGQTBEXFx1RkExMFxcdUZBMTJcXHVGQTE1IgorICAgICAgICAgICAgKyAiLVxcdUZBMUVcXHVGQTIwXFx1RkEyMlxcdUZBMjUtXFx1RkEyNlxcdUZBMkEtXFx1RkEyRFxcdUZBMzAtIgorICAgICAgICAgICAgKyAiXFx1RkE2QVxcdUZCMUQtXFx1RkIxRlxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0UiCisgICAgICAgICAgICArICJcXHVGQjQwLVxcdUZCNDFcXHVGQjQzLVxcdUZCNDRcXHVGQjQ2LVxcdUZCNEVcXHVGRTIwLVxcdUZFMjMiCisgICAgICAgICAgICArICJcXFUwMDAxRDE1RS1cXFUwMDAxRDE2OVxcVTAwMDFEMTZELVxcVTAwMDFEMTcyXFxVMDAwMUQxN0ItIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQxODJcXFUwMDAxRDE4NS1cXFUwMDAxRDE4QlxcVTAwMDFEMUFBLVxcVTAwMDFEMUFEXFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQxQkItXFxVMDAwMUQxQzBcXFUwMDAyRjgwMC1cXFUwMDAyRkExRF0iLCBmYWxzZSk7CisvKlVuaWNvZGU6IAorICAgICAgIltePC0+QS1QUi1aYS1wci16qMAtz9Et1tgt3eAt7/Et9vgt/f8tPz8tPz8tPz8tPz8tPz8tPz8/LT8/LT8/LT8iCisgICAgKyAiPy0/Py0/Py0/Py0/ii2aPy0/Py0/Py0/Py0/Py0/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8/LT8/LT8/PyIKKyAgICArICI/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/Pz8/Pz8tPz8/Pz8/Pz8/Py0/Pz8/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8tIgorICAgICsgIj8/LT8/Py0/Pz8tPz8/Py0/Pz8/Py0/Py0/Py0/Py0/Pz8tPz8/Pz8/Py0/Py0/Pz8/Pz8/LT8/Pz8/Pz8tPz8iCisgICAgKyAiPz8/Pz8/Py0/Py0/Pz8/LT8/Pz8/Py0/Pz8/Pz8/LT8/Py0/Pz8/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8/Pz8/PyIKKyAgICArICI/Pz8/LT8/Py0/Py0/Py0/Pz8/Pz8/Pz8/Pz8/LT8/LT8/LT8/Pz8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/IgorICAgICsgIj8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8/LT8/LT8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8iCisgICAgKyAiPz8tPz8tPz8/Pz8tPz8/Pz8/LT8/Pz8/LT9cPy1cPz8tPz8/LT8/Py0/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/LSIKKyAgICArICI/Py0/Py0/Py0/Py0/Py0/Pz8tPz8/LT8/LT8/Py0/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Py0/Pz8/Pz8/Pz8/IgorICAgICsgIj8/Pz8/Pz8/Pz8/Pz8/LT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8iCisgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICArICI/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/IgorICAgICsgIj8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8iCisgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICArICI/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/IgorICAgICsgIj8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Py0/Pz8/LT8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8/LT8iCisgICAgKyAiPy0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/XSIqLworICAgICAgICBTS0lQUEFCTEVTW0tEXSA9IG5ldyBVbmljb2RlU2V0KAorCSAgICAgICAgIlteXFx1MDBBMFxcdTAwQThcXHUwMEFBXFx1MDBBRlxcdTAwQjItXFx1MDBCNVxcdTAwQjgtXFx1MDBCQSIKKyAgICAgICAgICAgICsgIlxcdTAwQkMtXFx1MDBCRVxcdTAwQzAtXFx1MDBDNVxcdTAwQzctXFx1MDBDRlxcdTAwRDEtXFx1MDBENiIKKyAgICAgICAgICAgICsgIlxcdTAwRDktXFx1MDBERFxcdTAwRTAtXFx1MDBFNVxcdTAwRTctXFx1MDBFRlxcdTAwRjEtXFx1MDBGNiIKKyAgICAgICAgICAgICsgIlxcdTAwRjktXFx1MDBGRFxcdTAwRkYtXFx1MDEwRlxcdTAxMTItXFx1MDEyNVxcdTAxMjgtXFx1MDEzMCIKKyAgICAgICAgICAgICsgIlxcdTAxMzItXFx1MDEzN1xcdTAxMzktXFx1MDE0MFxcdTAxNDMtXFx1MDE0OVxcdTAxNEMtXFx1MDE1MSIKKyAgICAgICAgICAgICsgIlxcdTAxNTQtXFx1MDE2NVxcdTAxNjgtXFx1MDE3RlxcdTAxQTAtXFx1MDFBMVxcdTAxQUYtXFx1MDFCMCIKKyAgICAgICAgICAgICsgIlxcdTAxQzQtXFx1MDFEQ1xcdTAxREUtXFx1MDFFM1xcdTAxRTYtXFx1MDFGNVxcdTAxRjgtXFx1MDIxQiIKKyAgICAgICAgICAgICsgIlxcdTAyMUUtXFx1MDIxRlxcdTAyMjYtXFx1MDIzM1xcdTAyQjAtXFx1MDJCOFxcdTAyRDgtXFx1MDJERCIKKyAgICAgICAgICAgICsgIlxcdTAyRTAtXFx1MDJFNFxcdTAzMDAtXFx1MDM0RVxcdTAzNjAtXFx1MDM2RlxcdTAzNzRcXHUwMzdBIgorICAgICAgICAgICAgKyAiXFx1MDM3RVxcdTAzODQtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzOTBcXHUwM0FBLVxcdTAzQjAiCisgICAgICAgICAgICArICJcXHUwM0NBLVxcdTAzQ0VcXHUwM0QwLVxcdTAzRDZcXHUwM0YwLVxcdTAzRjJcXHUwM0Y0LVxcdTAzRjUiCisgICAgICAgICAgICArICJcXHUwNDAwLVxcdTA0MDFcXHUwNDAzXFx1MDQwN1xcdTA0MEMtXFx1MDQwRVxcdTA0MTlcXHUwNDM5IgorICAgICAgICAgICAgKyAiXFx1MDQ1MC1cXHUwNDUxXFx1MDQ1M1xcdTA0NTdcXHUwNDVDLVxcdTA0NUVcXHUwNDc2LVxcdTA0NzciCisgICAgICAgICAgICArICJcXHUwNDgzLVxcdTA0ODZcXHUwNEMxLVxcdTA0QzJcXHUwNEQwLVxcdTA0RDNcXHUwNEQ2LVxcdTA0RDciCisgICAgICAgICAgICArICJcXHUwNERBLVxcdTA0REZcXHUwNEUyLVxcdTA0RTdcXHUwNEVBLVxcdTA0RjVcXHUwNEY4LVxcdTA0RjkiCisgICAgICAgICAgICArICJcXHUwNTg3XFx1MDU5MS1cXHUwNUExXFx1MDVBMy1cXHUwNUI5XFx1MDVCQi1cXHUwNUJEXFx1MDVCRiIKKyAgICAgICAgICAgICsgIlxcdTA1QzEtXFx1MDVDMlxcdTA1QzRcXHUwNjIyLVxcdTA2MjZcXHUwNjRCLVxcdTA2NTVcXHUwNjcwIgorICAgICAgICAgICAgKyAiXFx1MDY3NS1cXHUwNjc4XFx1MDZDMFxcdTA2QzJcXHUwNkQzXFx1MDZENi1cXHUwNkRDXFx1MDZERi0iCisgICAgICAgICAgICArICJcXHUwNkU0XFx1MDZFNy1cXHUwNkU4XFx1MDZFQS1cXHUwNkVEXFx1MDcxMVxcdTA3MzAtXFx1MDc0QSIKKyAgICAgICAgICAgICsgIlxcdTA5MjlcXHUwOTMxXFx1MDkzNFxcdTA5M0NcXHUwOTREXFx1MDk1MS1cXHUwOTU0XFx1MDk1OC0iCisgICAgICAgICAgICArICJcXHUwOTVGXFx1MDlCQ1xcdTA5Q0ItXFx1MDlDRFxcdTA5REMtXFx1MDlERFxcdTA5REZcXHUwQTMzIgorICAgICAgICAgICAgKyAiXFx1MEEzNlxcdTBBM0NcXHUwQTREXFx1MEE1OS1cXHUwQTVCXFx1MEE1RVxcdTBBQkNcXHUwQUNEXFx1MEIzQyIKKyAgICAgICAgICAgICsgIlxcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjVDLVxcdTBCNURcXHUwQjk0XFx1MEJDQS1cXHUwQkNEIgorICAgICAgICAgICAgKyAiXFx1MEM0OFxcdTBDNERcXHUwQzU1LVxcdTBDNTZcXHUwQ0MwXFx1MENDNy1cXHUwQ0M4XFx1MENDQS0iCisgICAgICAgICAgICArICJcXHUwQ0NCXFx1MENDRFxcdTBENEEtXFx1MEQ0RFxcdTBEQ0FcXHUwRERBXFx1MEREQy1cXHUwRERFIgorICAgICAgICAgICAgKyAiXFx1MEUzM1xcdTBFMzgtXFx1MEUzQVxcdTBFNDgtXFx1MEU0QlxcdTBFQjNcXHUwRUI4LVxcdTBFQjkiCisgICAgICAgICAgICArICJcXHUwRUM4LVxcdTBFQ0JcXHUwRURDLVxcdTBFRERcXHUwRjBDXFx1MEYxOC1cXHUwRjE5XFx1MEYzNSIKKyAgICAgICAgICAgICsgIlxcdTBGMzdcXHUwRjM5XFx1MEY0M1xcdTBGNERcXHUwRjUyXFx1MEY1N1xcdTBGNUNcXHUwRjY5XFx1MEY3MS0iCisgICAgICAgICAgICArICJcXHUwRjdEXFx1MEY4MC1cXHUwRjg0XFx1MEY4Ni1cXHUwRjg3XFx1MEY5M1xcdTBGOURcXHUwRkEyIgorICAgICAgICAgICAgKyAiXFx1MEZBN1xcdTBGQUNcXHUwRkI5XFx1MEZDNlxcdTEwMjZcXHUxMDM3XFx1MTAzOVxcdTE3MTRcXHUxNzM0IgorICAgICAgICAgICAgKyAiXFx1MTdEMlxcdTE4QTlcXHUxRTAwLVxcdTFFOUJcXHUxRUEwLVxcdTFFRjlcXHUxRjAwLVxcdTFGMTUiCisgICAgICAgICAgICArICJcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTciCisgICAgICAgICAgICArICJcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LSIKKyAgICAgICAgICAgICsgIlxcdTFGQzRcXHUxRkM2LVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkRELVxcdTFGRUZcXHUxRkYyLSIKKyAgICAgICAgICAgICsgIlxcdTFGRjRcXHUxRkY2LVxcdTFGRkVcXHUyMDAwLVxcdTIwMEFcXHUyMDExXFx1MjAxN1xcdTIwMjQtIgorICAgICAgICAgICAgKyAiXFx1MjAyNlxcdTIwMkZcXHUyMDMzLVxcdTIwMzRcXHUyMDM2LVxcdTIwMzdcXHUyMDNDXFx1MjAzRSIKKyAgICAgICAgICAgICsgIlxcdTIwNDctXFx1MjA0OVxcdTIwNTdcXHUyMDVGXFx1MjA3MC1cXHUyMDcxXFx1MjA3NC1cXHUyMDhFIgorICAgICAgICAgICAgKyAiXFx1MjBBOFxcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRUFcXHUyMTAwLVxcdTIxMDMiCisgICAgICAgICAgICArICJcXHUyMTA1LVxcdTIxMDdcXHUyMTA5LVxcdTIxMTNcXHUyMTE1LVxcdTIxMTZcXHUyMTE5LVxcdTIxMUQiCisgICAgICAgICAgICArICJcXHUyMTIwLVxcdTIxMjJcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLSIKKyAgICAgICAgICAgICsgIlxcdTIxMzFcXHUyMTMzLVxcdTIxMzlcXHUyMTNELVxcdTIxNDBcXHUyMTQ1LVxcdTIxNDlcXHUyMTUzLSIKKyAgICAgICAgICAgICsgIlxcdTIxN0ZcXHUyMTlBLVxcdTIxOUJcXHUyMUFFXFx1MjFDRC1cXHUyMUNGXFx1MjIwNFxcdTIyMDkiCisgICAgICAgICAgICArICJcXHUyMjBDXFx1MjIyNFxcdTIyMjZcXHUyMjJDLVxcdTIyMkRcXHUyMjJGLVxcdTIyMzBcXHUyMjQxIgorICAgICAgICAgICAgKyAiXFx1MjI0NFxcdTIyNDdcXHUyMjQ5XFx1MjI2MFxcdTIyNjJcXHUyMjZELVxcdTIyNzFcXHUyMjc0LSIKKyAgICAgICAgICAgICsgIlxcdTIyNzVcXHUyMjc4LVxcdTIyNzlcXHUyMjgwLVxcdTIyODFcXHUyMjg0LVxcdTIyODVcXHUyMjg4LSIKKyAgICAgICAgICAgICsgIlxcdTIyODlcXHUyMkFDLVxcdTIyQUZcXHUyMkUwLVxcdTIyRTNcXHUyMkVBLVxcdTIyRURcXHUyMzI5LSIKKyAgICAgICAgICAgICsgIlxcdTIzMkFcXHUyNDYwLVxcdTI0RUFcXHUyQTBDXFx1MkE3NC1cXHUyQTc2XFx1MkFEQ1xcdTJFOUYiCisgICAgICAgICAgICArICJcXHUyRUYzXFx1MkYwMC1cXHUyRkQ1XFx1MzAwMFxcdTMwMkEtXFx1MzAyRlxcdTMwMzZcXHUzMDM4LSIKKyAgICAgICAgICAgICsgIlxcdTMwM0FcXHUzMDRDXFx1MzA0RVxcdTMwNTBcXHUzMDUyXFx1MzA1NFxcdTMwNTZcXHUzMDU4XFx1MzA1QSIKKyAgICAgICAgICAgICsgIlxcdTMwNUNcXHUzMDVFXFx1MzA2MFxcdTMwNjJcXHUzMDY1XFx1MzA2N1xcdTMwNjlcXHUzMDcwLVxcdTMwNzEiCisgICAgICAgICAgICArICJcXHUzMDczLVxcdTMwNzRcXHUzMDc2LVxcdTMwNzdcXHUzMDc5LVxcdTMwN0FcXHUzMDdDLVxcdTMwN0QiCisgICAgICAgICAgICArICJcXHUzMDk0XFx1MzA5OS1cXHUzMDlDXFx1MzA5RS1cXHUzMDlGXFx1MzBBQ1xcdTMwQUVcXHUzMEIwIgorICAgICAgICAgICAgKyAiXFx1MzBCMlxcdTMwQjRcXHUzMEI2XFx1MzBCOFxcdTMwQkFcXHUzMEJDXFx1MzBCRVxcdTMwQzBcXHUzMEMyIgorICAgICAgICAgICAgKyAiXFx1MzBDNVxcdTMwQzdcXHUzMEM5XFx1MzBEMC1cXHUzMEQxXFx1MzBEMy1cXHUzMEQ0XFx1MzBENi0iCisgICAgICAgICAgICArICJcXHUzMEQ3XFx1MzBEOS1cXHUzMERBXFx1MzBEQy1cXHUzMEREXFx1MzBGNFxcdTMwRjctXFx1MzBGQSIKKyAgICAgICAgICAgICsgIlxcdTMwRkUtXFx1MzBGRlxcdTMxMzEtXFx1MzE4RVxcdTMxOTItXFx1MzE5RlxcdTMyMDAtXFx1MzIxQyIKKyAgICAgICAgICAgICsgIlxcdTMyMjAtXFx1MzI0M1xcdTMyNTEtXFx1MzI3QlxcdTMyODAtXFx1MzJDQlxcdTMyRDAtXFx1MzJGRSIKKyAgICAgICAgICAgICsgIlxcdTMzMDAtXFx1MzM3NlxcdTMzN0ItXFx1MzNERFxcdTMzRTAtXFx1MzNGRVxcdUFDMDAtXFx1RDdBMyIKKyAgICAgICAgICAgICsgIlxcdUY5MDAtXFx1RkEwRFxcdUZBMTBcXHVGQTEyXFx1RkExNS1cXHVGQTFFXFx1RkEyMFxcdUZBMjIiCisgICAgICAgICAgICArICJcXHVGQTI1LVxcdUZBMjZcXHVGQTJBLVxcdUZBMkRcXHVGQTMwLVxcdUZBNkFcXHVGQjAwLVxcdUZCMDYiCisgICAgICAgICAgICArICJcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MC0iCisgICAgICAgICAgICArICJcXHVGQjQxXFx1RkI0My1cXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC0iCisgICAgICAgICAgICArICJcXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZDXFx1RkUyMC1cXHVGRTIzXFx1RkUzMC0iCisgICAgICAgICAgICArICJcXHVGRTQ0XFx1RkU0OS1cXHVGRTUyXFx1RkU1NC1cXHVGRTY2XFx1RkU2OC1cXHVGRTZCXFx1RkU3MC0iCisgICAgICAgICAgICArICJcXHVGRTcyXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMDEtXFx1RkZCRVxcdUZGQzItXFx1RkZDNyIKKyAgICAgICAgICAgICsgIlxcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ1xcdUZGRTAtXFx1RkZFNiIKKyAgICAgICAgICAgICsgIlxcdUZGRTgtXFx1RkZFRVxcVTAwMDFEMTVFLVxcVTAwMDFEMTY5XFxVMDAwMUQxNkQtXFxVMDAwMUQxNzIiCisgICAgICAgICAgICArICJcXFUwMDAxRDE3Qi1cXFUwMDAxRDE4MlxcVTAwMDFEMTg1LVxcVTAwMDFEMThCXFxVMDAwMUQxQUEtIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQxQURcXFUwMDAxRDFCQi1cXFUwMDAxRDFDMFxcVTAwMDFENDAwLVxcVTAwMDFENDU0XFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ0NTYtXFxVMDAwMUQ0OUNcXFUwMDAxRDQ5RS1cXFUwMDAxRDQ5RlxcVTAwMDFENEEyXFxVMDAwMUQ0QTUtIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ0QTZcXFUwMDAxRDRBOS1cXFUwMDAxRDRBQ1xcVTAwMDFENEFFLVxcVTAwMDFENEI5XFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ0QkJcXFUwMDAxRDRCRC1cXFUwMDAxRDRDMFxcVTAwMDFENEMyLVxcVTAwMDFENEMzXFxVMDAwMUQ0QzUtIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ1MDVcXFUwMDAxRDUwNy1cXFUwMDAxRDUwQVxcVTAwMDFENTBELVxcVTAwMDFENTE0XFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ1MTYtXFxVMDAwMUQ1MUNcXFUwMDAxRDUxRS1cXFUwMDAxRDUzOVxcVTAwMDFENTNCLVxcVTAwMDFENTNFIgorICAgICAgICAgICAgKyAiXFxVMDAwMUQ1NDAtXFxVMDAwMUQ1NDRcXFUwMDAxRDU0NlxcVTAwMDFENTRBLVxcVTAwMDFENTUwXFxVMDAwMSIKKyAgICAgICAgICAgICsgIkQ1NTItXFxVMDAwMUQ2QTNcXFUwMDAxRDZBOC1cXFUwMDAxRDdDOVxcVTAwMDFEN0NFLVxcVTAwMDFEN0ZGIgorICAgICAgICAgICAgKyAiXFxVMDAwMkY4MDAtXFxVMDAwMkZBMURdIiwgZmFsc2UpOworLypVbmljb2RlOiAKKyAgICAgICJbXqCoqq+yLbW4Lbq8Lb7ALcXHLc/RLdbZLd3gLeXnLe/xLfb5Lf3/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/IgorICAgICsgIi0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8/Py0/Pz8tPz8tPz8tPz8tPz8tPz8iCisgICAgKyAiLT8/LT8/Pz8tPz8/Py0/Pz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/Py0/Py0/Py0/Pz8tPz8/LSIKKyAgICArICI/Py0/Pz8tPz8/Pz8tPz8tPz8tPz8tPz8/LT8/Pz8/Pz8tPz8tPz8/LT8/LT8/Pz8/Pz8tPz8/Pz8/Py0/Py0/IgorICAgICsgIj8/LT8/Pz8tPz8/LT8/LT8/Py0/Pz8/LT8/Py0/Py0/Pz8tPz8tPz8tPz8/LT8/Pz8/Pz8/Pz8/LT8/LT8/LT8iCisgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/Pz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8iCisgICAgKyAiXD8tXD8/Pz8thT8/LT8/LT8/Pz8tPz9cPz8tPz8tPz8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/Py2ZPz8/Py0/PyIKKyAgICArICItPz8tPz8tPz8tPz8tPz8tPz8/LT8/Pz8/Pz8tPz8tPz8/Pz8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tIgorICAgICsgIj8/LT8/LT8/Py0/Pz8/Py0/XD8/LT8/Py0/Pz8/Pz8/Pz8/Pz8/Pz8/Py0/Py0/Py0/Py0/Py0/Pz8tPz8tPz8iCisgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/LT8/LT8/LT8/LT8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/PyIKKyAgICArICItPz8tPz8tPz8/Py0/Pz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/IgorICAgICsgIj8tPz8tPz8tPz8tPz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/IgorICAgICsgIi0/Py0/Py0/Py0/Pz8tPz8tPz8tPz8/LT8/LT8/LT8/LT8/LT8/IgorICAgICsgIi0/Py0/Py0/Py0/Pz8tPz8tPz8tPz8tPz8tP10iKi8KKworICAgICAgICBTS0lQUEFCTEVTW0tDXSA9IG5ldyBVbmljb2RlU2V0KAorCSAgICAgICAgIltePC0+QS1QUi1aYS1wci16XFx1MDBBMFxcdTAwQThcXHUwMEFBXFx1MDBBRlxcdTAwQjItXFx1MDBCNSIKKyAgICAgICAgICAgICsgIlxcdTAwQjgtXFx1MDBCQVxcdTAwQkMtXFx1MDBCRVxcdTAwQzAtXFx1MDBDRlxcdTAwRDEtXFx1MDBENiIKKyAgICAgICAgICAgICsgIlxcdTAwRDgtXFx1MDBERFxcdTAwRTAtXFx1MDBFRlxcdTAwRjEtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRCIKKyAgICAgICAgICAgICsgIlxcdTAwRkYtXFx1MDEwM1xcdTAxMDYtXFx1MDEwRlxcdTAxMTItXFx1MDExN1xcdTAxMUEtXFx1MDEyMSIKKyAgICAgICAgICAgICsgIlxcdTAxMjQtXFx1MDEyNVxcdTAxMjgtXFx1MDEyRFxcdTAxMzBcXHUwMTMyLVxcdTAxMzNcXHUwMTM5LSIKKyAgICAgICAgICAgICsgIlxcdTAxM0FcXHUwMTNELVxcdTAxNDBcXHUwMTQzLVxcdTAxNDRcXHUwMTQ3LVxcdTAxNDlcXHUwMTRDLSIKKyAgICAgICAgICAgICsgIlxcdTAxNTFcXHUwMTU0LVxcdTAxNTVcXHUwMTU4LVxcdTAxNURcXHUwMTYwLVxcdTAxNjFcXHUwMTY0LSIKKyAgICAgICAgICAgICsgIlxcdTAxNjVcXHUwMTY4LVxcdTAxNzFcXHUwMTc0LVxcdTAxN0ZcXHUwMUEwLVxcdTAxQTFcXHUwMUFGLSIKKyAgICAgICAgICAgICsgIlxcdTAxQjBcXHUwMUI3XFx1MDFDNC1cXHUwMURDXFx1MDFERS1cXHUwMUUxXFx1MDFFNi1cXHUwMUVCIgorICAgICAgICAgICAgKyAiXFx1MDFGMS1cXHUwMUY1XFx1MDFGOC1cXHUwMUZCXFx1MDIwMC1cXHUwMjFCXFx1MDIxRS1cXHUwMjFGIgorICAgICAgICAgICAgKyAiXFx1MDIyNi1cXHUwMjMzXFx1MDI5MlxcdTAyQjAtXFx1MDJCOFxcdTAyRDgtXFx1MDJERFxcdTAyRTAtIgorICAgICAgICAgICAgKyAiXFx1MDJFNFxcdTAzMDAtXFx1MDM0RVxcdTAzNjAtXFx1MDM2RlxcdTAzNzRcXHUwMzdBXFx1MDM3RSIKKyAgICAgICAgICAgICsgIlxcdTAzODQtXFx1MDM4NVxcdTAzODdcXHUwMzkxXFx1MDM5NVxcdTAzOTdcXHUwMzk5XFx1MDM5RlxcdTAzQTEiCisgICAgICAgICAgICArICJcXHUwM0E1XFx1MDNBOVxcdTAzQUNcXHUwM0FFXFx1MDNCMVxcdTAzQjVcXHUwM0I3XFx1MDNCOVxcdTAzQkYiCisgICAgICAgICAgICArICJcXHUwM0MxXFx1MDNDNVxcdTAzQzktXFx1MDNDQlxcdTAzQ0VcXHUwM0QwLVxcdTAzRDZcXHUwM0YwLSIKKyAgICAgICAgICAgICsgIlxcdTAzRjJcXHUwM0Y0LVxcdTAzRjVcXHUwNDA2XFx1MDQxMFxcdTA0MTNcXHUwNDE1LVxcdTA0MTgiCisgICAgICAgICAgICArICJcXHUwNDFBXFx1MDQxRVxcdTA0MjNcXHUwNDI3XFx1MDQyQlxcdTA0MkRcXHUwNDMwXFx1MDQzM1xcdTA0MzUtIgorICAgICAgICAgICAgKyAiXFx1MDQzOFxcdTA0M0FcXHUwNDNFXFx1MDQ0M1xcdTA0NDdcXHUwNDRCXFx1MDQ0RFxcdTA0NTZcXHUwNDc0LSIKKyAgICAgICAgICAgICsgIlxcdTA0NzVcXHUwNDgzLVxcdTA0ODZcXHUwNEQ4LVxcdTA0RDlcXHUwNEU4LVxcdTA0RTlcXHUwNTg3IgorICAgICAgICAgICAgKyAiXFx1MDU5MS1cXHUwNUExXFx1MDVBMy1cXHUwNUI5XFx1MDVCQi1cXHUwNUJEXFx1MDVCRlxcdTA1QzEtIgorICAgICAgICAgICAgKyAiXFx1MDVDMlxcdTA1QzRcXHUwNjIyLVxcdTA2MjNcXHUwNjI3XFx1MDY0OFxcdTA2NEEtXFx1MDY1NSIKKyAgICAgICAgICAgICsgIlxcdTA2NzBcXHUwNjc1LVxcdTA2NzhcXHUwNkMxXFx1MDZEMlxcdTA2RDUtXFx1MDZEQ1xcdTA2REYtIgorICAgICAgICAgICAgKyAiXFx1MDZFNFxcdTA2RTctXFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEEiCisgICAgICAgICAgICArICJcXHUwOTI4XFx1MDkzMFxcdTA5MzNcXHUwOTNDXFx1MDk0RFxcdTA5NTEtXFx1MDk1NFxcdTA5NTgtIgorICAgICAgICAgICAgKyAiXFx1MDk1RlxcdTA5QkNcXHUwOUJFXFx1MDlDN1xcdTA5Q0RcXHUwOUQ3XFx1MDlEQy1cXHUwOUREXFx1MDlERiIKKyAgICAgICAgICAgICsgIlxcdTBBMzNcXHUwQTM2XFx1MEEzQ1xcdTBBNERcXHUwQTU5LVxcdTBBNUJcXHUwQTVFXFx1MEFCQ1xcdTBBQ0QiCisgICAgICAgICAgICArICJcXHUwQjNDXFx1MEIzRVxcdTBCNDdcXHUwQjREXFx1MEI1Ni1cXHUwQjU3XFx1MEI1Qy1cXHUwQjVEIgorICAgICAgICAgICAgKyAiXFx1MEI5MlxcdTBCQkVcXHUwQkM2LVxcdTBCQzdcXHUwQkNEXFx1MEJEN1xcdTBDNDZcXHUwQzREXFx1MEM1NSIKKyAgICAgICAgICAgICsgIi1cXHUwQzU2XFx1MENCRlxcdTBDQzJcXHUwQ0M2XFx1MENDQVxcdTBDQ0RcXHUwQ0Q1LVxcdTBDRDYiCisgICAgICAgICAgICArICJcXHUwRDNFXFx1MEQ0Ni1cXHUwRDQ3XFx1MEQ0RFxcdTBENTdcXHUwRENBXFx1MERDRlxcdTBERDlcXHUwRERDIgorICAgICAgICAgICAgKyAiXFx1MERERlxcdTBFMzNcXHUwRTM4LVxcdTBFM0FcXHUwRTQ4LVxcdTBFNEJcXHUwRUIzXFx1MEVCOC0iCisgICAgICAgICAgICArICJcXHUwRUI5XFx1MEVDOC1cXHUwRUNCXFx1MEVEQy1cXHUwRUREXFx1MEYwQ1xcdTBGMTgtXFx1MEYxOSIKKyAgICAgICAgICAgICsgIlxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGNDNcXHUwRjREXFx1MEY1MlxcdTBGNTdcXHUwRjVDXFx1MEY2OSIKKyAgICAgICAgICAgICsgIlxcdTBGNzEtXFx1MEY3RFxcdTBGODAtXFx1MEY4NFxcdTBGODYtXFx1MEY4N1xcdTBGOTNcXHUwRjlEIgorICAgICAgICAgICAgKyAiXFx1MEZBMlxcdTBGQTdcXHUwRkFDXFx1MEZCOVxcdTBGQzZcXHUxMDI1XFx1MTAyRVxcdTEwMzdcXHUxMDM5IgorICAgICAgICAgICAgKyAiXFx1MTEwMC1cXHUxMTEyXFx1MTE2MS1cXHUxMTc1XFx1MTFBOC1cXHUxMUMyXFx1MTcxNFxcdTE3MzQiCisgICAgICAgICAgICArICJcXHUxN0QyXFx1MThBOVxcdTFFMDAtXFx1MUUwM1xcdTFFMEEtXFx1MUUwRlxcdTFFMTItXFx1MUUxQiIKKyAgICAgICAgICAgICsgIlxcdTFFMjAtXFx1MUUyN1xcdTFFMkEtXFx1MUU0MVxcdTFFNDQtXFx1MUU1M1xcdTFFNTgtXFx1MUU3RCIKKyAgICAgICAgICAgICsgIlxcdTFFODAtXFx1MUU4N1xcdTFFOEUtXFx1MUU5MVxcdTFFOTYtXFx1MUU5QlxcdTFFQTAtXFx1MUVGMyIKKyAgICAgICAgICAgICsgIlxcdTFFRjYtXFx1MUVGOVxcdTFGMDAtXFx1MUYxMVxcdTFGMTgtXFx1MUYxOVxcdTFGMjAtXFx1MUYzMSIKKyAgICAgICAgICAgICsgIlxcdTFGMzgtXFx1MUYzOVxcdTFGNDAtXFx1MUY0MVxcdTFGNDgtXFx1MUY0OVxcdTFGNTAtXFx1MUY1MSIKKyAgICAgICAgICAgICsgIlxcdTFGNTlcXHUxRjYwLVxcdTFGNzFcXHUxRjczLVxcdTFGNzVcXHUxRjc3XFx1MUY3OVxcdTFGN0ItIgorICAgICAgICAgICAgKyAiXFx1MUY3RFxcdTFGODAtXFx1MUY4MVxcdTFGODgtXFx1MUY4OVxcdTFGOTAtXFx1MUY5MVxcdTFGOTgtIgorICAgICAgICAgICAgKyAiXFx1MUY5OVxcdTFGQTAtXFx1MUZBMVxcdTFGQTgtXFx1MUZBOVxcdTFGQjNcXHUxRkI2XFx1MUZCQi0iCisgICAgICAgICAgICArICJcXHUxRkMxXFx1MUZDM1xcdTFGQzZcXHUxRkM5XFx1MUZDQi1cXHUxRkNGXFx1MUZEM1xcdTFGREJcXHUxRkREIgorICAgICAgICAgICAgKyAiLVxcdTFGREZcXHUxRkUzXFx1MUZFQlxcdTFGRUQtXFx1MUZFRlxcdTFGRjNcXHUxRkY2XFx1MUZGOSIKKyAgICAgICAgICAgICsgIlxcdTFGRkItXFx1MUZGRVxcdTIwMDAtXFx1MjAwQVxcdTIwMTFcXHUyMDE3XFx1MjAyNC1cXHUyMDI2IgorICAgICAgICAgICAgKyAiXFx1MjAyRlxcdTIwMzMtXFx1MjAzNFxcdTIwMzYtXFx1MjAzN1xcdTIwM0NcXHUyMDNFXFx1MjA0Ny0iCisgICAgICAgICAgICArICJcXHUyMDQ5XFx1MjA1N1xcdTIwNUZcXHUyMDcwLVxcdTIwNzFcXHUyMDc0LVxcdTIwOEVcXHUyMEE4IgorICAgICAgICAgICAgKyAiXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBFQVxcdTIxMDAtXFx1MjEwM1xcdTIxMDUtIgorICAgICAgICAgICAgKyAiXFx1MjEwN1xcdTIxMDktXFx1MjExM1xcdTIxMTUtXFx1MjExNlxcdTIxMTktXFx1MjExRFxcdTIxMjAtIgorICAgICAgICAgICAgKyAiXFx1MjEyMlxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzMSIKKyAgICAgICAgICAgICsgIlxcdTIxMzMtXFx1MjEzOVxcdTIxM0QtXFx1MjE0MFxcdTIxNDUtXFx1MjE0OVxcdTIxNTMtXFx1MjE3RiIKKyAgICAgICAgICAgICsgIlxcdTIxOTBcXHUyMTkyXFx1MjE5NFxcdTIxRDBcXHUyMUQyXFx1MjFENFxcdTIyMDNcXHUyMjA4XFx1MjIwQiIKKyAgICAgICAgICAgICsgIlxcdTIyMjNcXHUyMjI1XFx1MjIyQy1cXHUyMjJEXFx1MjIyRi1cXHUyMjMwXFx1MjIzQ1xcdTIyNDMiCisgICAgICAgICAgICArICJcXHUyMjQ1XFx1MjI0OFxcdTIyNERcXHUyMjYxXFx1MjI2NC1cXHUyMjY1XFx1MjI3Mi1cXHUyMjczIgorICAgICAgICAgICAgKyAiXFx1MjI3Ni1cXHUyMjc3XFx1MjI3QS1cXHUyMjdEXFx1MjI4Mi1cXHUyMjgzXFx1MjI4Ni1cXHUyMjg3IgorICAgICAgICAgICAgKyAiXFx1MjI5MS1cXHUyMjkyXFx1MjJBMlxcdTIyQTgtXFx1MjJBOVxcdTIyQUJcXHUyMkIyLVxcdTIyQjUiCisgICAgICAgICAgICArICJcXHUyMzI5LVxcdTIzMkFcXHUyNDYwLVxcdTI0RUFcXHUyQTBDXFx1MkE3NC1cXHUyQTc2XFx1MkFEQyIKKyAgICAgICAgICAgICsgIlxcdTJFOUZcXHUyRUYzXFx1MkYwMC1cXHUyRkQ1XFx1MzAwMFxcdTMwMkEtXFx1MzAyRlxcdTMwMzYiCisgICAgICAgICAgICArICJcXHUzMDM4LVxcdTMwM0FcXHUzMDQ2XFx1MzA0QlxcdTMwNERcXHUzMDRGXFx1MzA1MVxcdTMwNTNcXHUzMDU1IgorICAgICAgICAgICAgKyAiXFx1MzA1N1xcdTMwNTlcXHUzMDVCXFx1MzA1RFxcdTMwNUZcXHUzMDYxXFx1MzA2NFxcdTMwNjZcXHUzMDY4IgorICAgICAgICAgICAgKyAiXFx1MzA2RlxcdTMwNzJcXHUzMDc1XFx1MzA3OFxcdTMwN0JcXHUzMDk5LVxcdTMwOURcXHUzMDlGXFx1MzBBNiIKKyAgICAgICAgICAgICsgIlxcdTMwQUJcXHUzMEFEXFx1MzBBRlxcdTMwQjFcXHUzMEIzXFx1MzBCNVxcdTMwQjdcXHUzMEI5XFx1MzBCQiIKKyAgICAgICAgICAgICsgIlxcdTMwQkRcXHUzMEJGXFx1MzBDMVxcdTMwQzRcXHUzMEM2XFx1MzBDOFxcdTMwQ0ZcXHUzMEQyXFx1MzBENSIKKyAgICAgICAgICAgICsgIlxcdTMwRDhcXHUzMERCXFx1MzBFRi1cXHUzMEYyXFx1MzBGRFxcdTMwRkZcXHUzMTMxLVxcdTMxOEUiCisgICAgICAgICAgICArICJcXHUzMTkyLVxcdTMxOUZcXHUzMjAwLVxcdTMyMUNcXHUzMjIwLVxcdTMyNDNcXHUzMjUxLVxcdTMyN0IiCisgICAgICAgICAgICArICJcXHUzMjgwLVxcdTMyQ0JcXHUzMkQwLVxcdTMyRkVcXHUzMzAwLVxcdTMzNzZcXHUzMzdCLVxcdTMzREQiCisgICAgICAgICAgICArICJcXHUzM0UwLVxcdTMzRkVcXHVBQzAwXFx1QUMxQ1xcdUFDMzhcXHVBQzU0XFx1QUM3MFxcdUFDOENcXHVBQ0E4IgorICAgICAgICAgICAgKyAiXFx1QUNDNFxcdUFDRTBcXHVBQ0ZDXFx1QUQxOFxcdUFEMzRcXHVBRDUwXFx1QUQ2Q1xcdUFEODhcXHVBREE0IgorICAgICAgICAgICAgKyAiXFx1QURDMFxcdUFERENcXHVBREY4XFx1QUUxNFxcdUFFMzBcXHVBRTRDXFx1QUU2OFxcdUFFODRcXHVBRUEwIgorICAgICAgICAgICAgKyAiXFx1QUVCQ1xcdUFFRDhcXHVBRUY0XFx1QUYxMFxcdUFGMkNcXHVBRjQ4XFx1QUY2NFxcdUFGODBcXHVBRjlDIgorICAgICAgICAgICAgKyAiXFx1QUZCOFxcdUFGRDRcXHVBRkYwXFx1QjAwQ1xcdUIwMjhcXHVCMDQ0XFx1QjA2MFxcdUIwN0NcXHVCMDk4IgorICAgICAgICAgICAgKyAiXFx1QjBCNFxcdUIwRDBcXHVCMEVDXFx1QjEwOFxcdUIxMjRcXHVCMTQwXFx1QjE1Q1xcdUIxNzhcXHVCMTk0IgorICAgICAgICAgICAgKyAiXFx1QjFCMFxcdUIxQ0NcXHVCMUU4XFx1QjIwNFxcdUIyMjBcXHVCMjNDXFx1QjI1OFxcdUIyNzRcXHVCMjkwIgorICAgICAgICAgICAgKyAiXFx1QjJBQ1xcdUIyQzhcXHVCMkU0XFx1QjMwMFxcdUIzMUNcXHVCMzM4XFx1QjM1NFxcdUIzNzBcXHVCMzhDIgorICAgICAgICAgICAgKyAiXFx1QjNBOFxcdUIzQzRcXHVCM0UwXFx1QjNGQ1xcdUI0MThcXHVCNDM0XFx1QjQ1MFxcdUI0NkNcXHVCNDg4IgorICAgICAgICAgICAgKyAiXFx1QjRBNFxcdUI0QzBcXHVCNERDXFx1QjRGOFxcdUI1MTRcXHVCNTMwXFx1QjU0Q1xcdUI1NjhcXHVCNTg0IgorICAgICAgICAgICAgKyAiXFx1QjVBMFxcdUI1QkNcXHVCNUQ4XFx1QjVGNFxcdUI2MTBcXHVCNjJDXFx1QjY0OFxcdUI2NjRcXHVCNjgwIgorICAgICAgICAgICAgKyAiXFx1QjY5Q1xcdUI2QjhcXHVCNkQ0XFx1QjZGMFxcdUI3MENcXHVCNzI4XFx1Qjc0NFxcdUI3NjBcXHVCNzdDIgorICAgICAgICAgICAgKyAiXFx1Qjc5OFxcdUI3QjRcXHVCN0QwXFx1QjdFQ1xcdUI4MDhcXHVCODI0XFx1Qjg0MFxcdUI4NUNcXHVCODc4IgorICAgICAgICAgICAgKyAiXFx1Qjg5NFxcdUI4QjBcXHVCOENDXFx1QjhFOFxcdUI5MDRcXHVCOTIwXFx1QjkzQ1xcdUI5NThcXHVCOTc0IgorICAgICAgICAgICAgKyAiXFx1Qjk5MFxcdUI5QUNcXHVCOUM4XFx1QjlFNFxcdUJBMDBcXHVCQTFDXFx1QkEzOFxcdUJBNTRcXHVCQTcwIgorICAgICAgICAgICAgKyAiXFx1QkE4Q1xcdUJBQThcXHVCQUM0XFx1QkFFMFxcdUJBRkNcXHVCQjE4XFx1QkIzNFxcdUJCNTBcXHVCQjZDIgorICAgICAgICAgICAgKyAiXFx1QkI4OFxcdUJCQTRcXHVCQkMwXFx1QkJEQ1xcdUJCRjhcXHVCQzE0XFx1QkMzMFxcdUJDNENcXHVCQzY4IgorICAgICAgICAgICAgKyAiXFx1QkM4NFxcdUJDQTBcXHVCQ0JDXFx1QkNEOFxcdUJDRjRcXHVCRDEwXFx1QkQyQ1xcdUJENDhcXHVCRDY0IgorICAgICAgICAgICAgKyAiXFx1QkQ4MFxcdUJEOUNcXHVCREI4XFx1QkRENFxcdUJERjBcXHVCRTBDXFx1QkUyOFxcdUJFNDRcXHVCRTYwIgorICAgICAgICAgICAgKyAiXFx1QkU3Q1xcdUJFOThcXHVCRUI0XFx1QkVEMFxcdUJFRUNcXHVCRjA4XFx1QkYyNFxcdUJGNDBcXHVCRjVDIgorICAgICAgICAgICAgKyAiXFx1QkY3OFxcdUJGOTRcXHVCRkIwXFx1QkZDQ1xcdUJGRThcXHVDMDA0XFx1QzAyMFxcdUMwM0NcXHVDMDU4IgorICAgICAgICAgICAgKyAiXFx1QzA3NFxcdUMwOTBcXHVDMEFDXFx1QzBDOFxcdUMwRTRcXHVDMTAwXFx1QzExQ1xcdUMxMzhcXHVDMTU0IgorICAgICAgICAgICAgKyAiXFx1QzE3MFxcdUMxOENcXHVDMUE4XFx1QzFDNFxcdUMxRTBcXHVDMUZDXFx1QzIxOFxcdUMyMzRcXHVDMjUwIgorICAgICAgICAgICAgKyAiXFx1QzI2Q1xcdUMyODhcXHVDMkE0XFx1QzJDMFxcdUMyRENcXHVDMkY4XFx1QzMxNFxcdUMzMzBcXHVDMzRDIgorICAgICAgICAgICAgKyAiXFx1QzM2OFxcdUMzODRcXHVDM0EwXFx1QzNCQ1xcdUMzRDhcXHVDM0Y0XFx1QzQxMFxcdUM0MkNcXHVDNDQ4IgorICAgICAgICAgICAgKyAiXFx1QzQ2NFxcdUM0ODBcXHVDNDlDXFx1QzRCOFxcdUM0RDRcXHVDNEYwXFx1QzUwQ1xcdUM1MjhcXHVDNTQ0IgorICAgICAgICAgICAgKyAiXFx1QzU2MFxcdUM1N0NcXHVDNTk4XFx1QzVCNFxcdUM1RDBcXHVDNUVDXFx1QzYwOFxcdUM2MjRcXHVDNjQwIgorICAgICAgICAgICAgKyAiXFx1QzY1Q1xcdUM2NzhcXHVDNjk0XFx1QzZCMFxcdUM2Q0NcXHVDNkU4XFx1QzcwNFxcdUM3MjBcXHVDNzNDIgorICAgICAgICAgICAgKyAiXFx1Qzc1OFxcdUM3NzRcXHVDNzkwXFx1QzdBQ1xcdUM3QzhcXHVDN0U0XFx1QzgwMFxcdUM4MUNcXHVDODM4IgorICAgICAgICAgICAgKyAiXFx1Qzg1NFxcdUM4NzBcXHVDODhDXFx1QzhBOFxcdUM4QzRcXHVDOEUwXFx1QzhGQ1xcdUM5MThcXHVDOTM0IgorICAgICAgICAgICAgKyAiXFx1Qzk1MFxcdUM5NkNcXHVDOTg4XFx1QzlBNFxcdUM5QzBcXHVDOURDXFx1QzlGOFxcdUNBMTRcXHVDQTMwIgorICAgICAgICAgICAgKyAiXFx1Q0E0Q1xcdUNBNjhcXHVDQTg0XFx1Q0FBMFxcdUNBQkNcXHVDQUQ4XFx1Q0FGNFxcdUNCMTBcXHVDQjJDIgorICAgICAgICAgICAgKyAiXFx1Q0I0OFxcdUNCNjRcXHVDQjgwXFx1Q0I5Q1xcdUNCQjhcXHVDQkQ0XFx1Q0JGMFxcdUNDMENcXHVDQzI4IgorICAgICAgICAgICAgKyAiXFx1Q0M0NFxcdUNDNjBcXHVDQzdDXFx1Q0M5OFxcdUNDQjRcXHVDQ0QwXFx1Q0NFQ1xcdUNEMDhcXHVDRDI0IgorICAgICAgICAgICAgKyAiXFx1Q0Q0MFxcdUNENUNcXHVDRDc4XFx1Q0Q5NFxcdUNEQjBcXHVDRENDXFx1Q0RFOFxcdUNFMDRcXHVDRTIwIgorICAgICAgICAgICAgKyAiXFx1Q0UzQ1xcdUNFNThcXHVDRTc0XFx1Q0U5MFxcdUNFQUNcXHVDRUM4XFx1Q0VFNFxcdUNGMDBcXHVDRjFDIgorICAgICAgICAgICAgKyAiXFx1Q0YzOFxcdUNGNTRcXHVDRjcwXFx1Q0Y4Q1xcdUNGQThcXHVDRkM0XFx1Q0ZFMFxcdUNGRkNcXHVEMDE4IgorICAgICAgICAgICAgKyAiXFx1RDAzNFxcdUQwNTBcXHVEMDZDXFx1RDA4OFxcdUQwQTRcXHVEMEMwXFx1RDBEQ1xcdUQwRjhcXHVEMTE0IgorICAgICAgICAgICAgKyAiXFx1RDEzMFxcdUQxNENcXHVEMTY4XFx1RDE4NFxcdUQxQTBcXHVEMUJDXFx1RDFEOFxcdUQxRjRcXHVEMjEwIgorICAgICAgICAgICAgKyAiXFx1RDIyQ1xcdUQyNDhcXHVEMjY0XFx1RDI4MFxcdUQyOUNcXHVEMkI4XFx1RDJENFxcdUQyRjBcXHVEMzBDIgorICAgICAgICAgICAgKyAiXFx1RDMyOFxcdUQzNDRcXHVEMzYwXFx1RDM3Q1xcdUQzOThcXHVEM0I0XFx1RDNEMFxcdUQzRUNcXHVENDA4IgorICAgICAgICAgICAgKyAiXFx1RDQyNFxcdUQ0NDBcXHVENDVDXFx1RDQ3OFxcdUQ0OTRcXHVENEIwXFx1RDRDQ1xcdUQ0RThcXHVENTA0IgorICAgICAgICAgICAgKyAiXFx1RDUyMFxcdUQ1M0NcXHVENTU4XFx1RDU3NFxcdUQ1OTBcXHVENUFDXFx1RDVDOFxcdUQ1RTRcXHVENjAwIgorICAgICAgICAgICAgKyAiXFx1RDYxQ1xcdUQ2MzhcXHVENjU0XFx1RDY3MFxcdUQ2OENcXHVENkE4XFx1RDZDNFxcdUQ2RTBcXHVENkZDIgorICAgICAgICAgICAgKyAiXFx1RDcxOFxcdUQ3MzRcXHVENzUwXFx1RDc2Q1xcdUQ3ODhcXHVGOTAwLVxcdUZBMERcXHVGQTEwXFx1RkExMiIKKyAgICAgICAgICAgICsgIlxcdUZBMTUtXFx1RkExRVxcdUZBMjBcXHVGQTIyXFx1RkEyNS1cXHVGQTI2XFx1RkEyQS1cXHVGQTJEIgorICAgICAgICAgICAgKyAiXFx1RkEzMC1cXHVGQTZBXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjM2IgorICAgICAgICAgICAgKyAiXFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDAtXFx1RkI0MVxcdUZCNDMtXFx1RkI0NFxcdUZCNDYtIgorICAgICAgICAgICAgKyAiXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtIgorICAgICAgICAgICAgKyAiXFx1RkRGQ1xcdUZFMjAtXFx1RkUyM1xcdUZFMzAtXFx1RkU0NFxcdUZFNDktXFx1RkU1MlxcdUZFNTQtIgorICAgICAgICAgICAgKyAiXFx1RkU2NlxcdUZFNjgtXFx1RkU2QlxcdUZFNzAtXFx1RkU3MlxcdUZFNzRcXHVGRTc2LVxcdUZFRkMiCisgICAgICAgICAgICArICJcXHVGRjAxLVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDciCisgICAgICAgICAgICArICJcXHVGRkRBLVxcdUZGRENcXHVGRkUwLVxcdUZGRTZcXHVGRkU4LVxcdUZGRUVcXFUwMDAxRDE1RS1cXFUwMDAxIgorICAgICAgICAgICAgKyAiRDE2OVxcVTAwMDFEMTZELVxcVTAwMDFEMTcyXFxVMDAwMUQxN0ItXFxVMDAwMUQxODJcXFUwMDAxRDE4NS0iCisgICAgICAgICAgICArICJcXFUwMDAxRDE4QlxcVTAwMDFEMUFBLVxcVTAwMDFEMUFEXFxVMDAwMUQxQkItXFxVMDAwMUQxQzBcXFUwMDAxIgorICAgICAgICAgICAgKyAiRDQwMC1cXFUwMDAxRDQ1NFxcVTAwMDFENDU2LVxcVTAwMDFENDlDXFxVMDAwMUQ0OUUtXFxVMDAwMUQ0OUYiCisgICAgICAgICAgICArICJcXFUwMDAxRDRBMlxcVTAwMDFENEE1LVxcVTAwMDFENEE2XFxVMDAwMUQ0QTktXFxVMDAwMUQ0QUNcXFUwMDAxIgorICAgICAgICAgICAgKyAiRDRBRS1cXFUwMDAxRDRCOVxcVTAwMDFENEJCXFxVMDAwMUQ0QkQtXFxVMDAwMUQ0QzBcXFUwMDAxRDRDMi0iCisgICAgICAgICAgICArICJcXFUwMDAxRDRDM1xcVTAwMDFENEM1LVxcVTAwMDFENTA1XFxVMDAwMUQ1MDctXFxVMDAwMUQ1MEFcXFUwMDAxIgorICAgICAgICAgICAgKyAiRDUwRC1cXFUwMDAxRDUxNFxcVTAwMDFENTE2LVxcVTAwMDFENTFDXFxVMDAwMUQ1MUUtXFxVMDAwMUQ1MzkiCisgICAgICAgICAgICArICJcXFUwMDAxRDUzQi1cXFUwMDAxRDUzRVxcVTAwMDFENTQwLVxcVTAwMDFENTQ0XFxVMDAwMUQ1NDZcXFUwMDAxIgorICAgICAgICAgICAgKyAiRDU0QS1cXFUwMDAxRDU1MFxcVTAwMDFENTUyLVxcVTAwMDFENkEzXFxVMDAwMUQ2QTgtXFxVMDAwMUQ3QzkiCisgICAgICAgICAgICArICJcXFUwMDAxRDdDRS1cXFUwMDAxRDdGRlxcVTAwMDJGODAwLVxcVTAwMDJGQTFEXSIsIGZhbHNlKTsKKy8qVW5pY29kZTogCisgICAgICAiW148LT5BLVBSLVphLXByLXqgqKqvsi21uC26vC2+wC3P0S3W2C3d4C3v8S32+C39/y0/Py0/Py0/Py0/Py0/PyIKKyAgICArICItPz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/LT+KLZo/LT8/LT8/LT8/LT8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/IgorICAgICsgIj8tPz8tPz8/LT8/LT8/LT8/LT8/LT8/Pz8/LT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/LT8/Py0/Py0/Py0/Pz8/Py0iCisgICAgKyAiPz8/Pz8/Pz8/Py0/Pz8/Pz8/Pz8tPz8tPz8tPz8tPz8/LT8/LT8/LT8/Py0/Pz8tPz8/Py0/Pz8tPz8/Py0/PyIKKyAgICArICItPz8tPz8tPz8/LT8/Pz8/Pz8tPz8tPz8/Pz8/Py0/Pz8/Pz8/LT8/Pz8/Pz8/Py0/Py0/Pz8/LT8/Pz8/Py0/IgorICAgICsgIj8/Pz8/Py0/Pz8tPz8/Pz8/Pz8/Py0/Py0/Pz8tPz8tPz8tPz8/LT8/Pz8/Pz8/Pz8/LT8/LT8/LT8/Pz8/Pz8iCisgICAgKyAiPz8/Pz8/LT8/LT8/LT8/Pz8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/PyIKKyAgICArICItPz8tPz8tPz8tPz8/LT8/LT8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8/Py0/Pz8/Py0/Pz8/LT8/Pz8tPz8/IgorICAgICsgIj8/LT9cPy1cPz8/Py2FPz8tPz8tPz8/Py0/P1w/Py0/Py0/Pz8tPz8/LT8/LT8/LT8/LT8/LT8/LT8/LZk/Pz8iCisgICAgKyAiPy0/Py0/Py0/Py0/Py0/Py0/Pz8/Pz8/Pz8/Pz8/LT8/LT8/Pz8/Pz8/LT8/LT8/LT8/LT8/LT8/LT8/LT8/PyIKKyAgICArICItPz8/LT8/LT8/LT8/Py0/Pz8/Py0/XD8/LT8/Py0/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Py0/Pz8/Pz8/Pz8/IgorICAgICsgIj8/Pz8/Pz8/Pz8/Pz8/LT8/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8/Pz8/Pz8/Pz8/Pz8/Pz8iCisgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICArICI/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/IgorICAgICsgIj8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8iCisgICAgKyAiPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyIKKyAgICArICI/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/IgorICAgICsgIj8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8iCisgICAgKyAiLT8/Pz8tPz8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Pz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPz8tPyIKKyAgICArICI/LT8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0/Py0iCisgICAgKyAiPz8tPz8tPz8/LT8/LT8/LT8/Py0/Py0/Py0/Py0/Py0/Py0/Py0iCisgICAgKyAiPz8tPz8tPz8/LT8/LT8/LT8/LT8/LT9dIiovCisgICAgfSAgICAKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L05vcm1hbGl6ZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L05vcm1hbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OGE0MTBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvTm9ybWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMjU3MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvTm9ybWFsaXplci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzAzIDIyOjAzOjU5ICQgCisgKiAkUmV2aXNpb246IDEuMjggJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5Ob3JtYWxpemVySW1wbDsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIFVuaWNvZGUgTm9ybWFsaXphdGlvbiAKKyAqCisgKiA8aDI+VW5pY29kZSBub3JtYWxpemF0aW9uIEFQSTwvaDI+CisgKgorICogPGNvZGU+bm9ybWFsaXplPC9jb2RlPiB0cmFuc2Zvcm1zIFVuaWNvZGUgdGV4dCBpbnRvIGFuIGVxdWl2YWxlbnQgY29tcG9zZWQgb3IKKyAqIGRlY29tcG9zZWQgZm9ybSwgYWxsb3dpbmcgZm9yIGVhc2llciBzb3J0aW5nIGFuZCBzZWFyY2hpbmcgb2YgdGV4dC4KKyAqIDxjb2RlPm5vcm1hbGl6ZTwvY29kZT4gc3VwcG9ydHMgdGhlIHN0YW5kYXJkIG5vcm1hbGl6YXRpb24gZm9ybXMgZGVzY3JpYmVkIGluCisgKiA8YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjE1LyIgdGFyZ2V0PSJ1bmljb2RlIj4KKyAqIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXggIzE1ICZtZGFzaDsgVW5pY29kZSBOb3JtYWxpemF0aW9uIEZvcm1zPC9hPi4KKyAqCisgKiBDaGFyYWN0ZXJzIHdpdGggYWNjZW50cyBvciBvdGhlciBhZG9ybm1lbnRzIGNhbiBiZSBlbmNvZGVkIGluCisgKiBzZXZlcmFsIGRpZmZlcmVudCB3YXlzIGluIFVuaWNvZGUuICBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgY2hhcmFjdGVyIEEtYWN1dGUuCisgKiBJbiBVbmljb2RlLCB0aGlzIGNhbiBiZSBlbmNvZGVkIGFzIGEgc2luZ2xlIGNoYXJhY3RlciAodGhlCisgKiAiY29tcG9zZWQiIGZvcm0pOgorICoKKyAqIDxwPgorICogICAgICAwMEMxICAgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICogPC9wPgorICoKKyAqIG9yIGFzIHR3byBzZXBhcmF0ZSBjaGFyYWN0ZXJzICh0aGUgImRlY29tcG9zZWQiIGZvcm0pOgorICoKKyAqIDxwPgorICogICAgICAwMDQxICAgIExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAqICAgICAgMDMwMSAgICBDT01CSU5JTkcgQUNVVEUgQUNDRU5UCisgKiA8L3A+CisgKgorICogVG8gYSB1c2VyIG9mIHlvdXIgcHJvZ3JhbSwgaG93ZXZlciwgYm90aCBvZiB0aGVzZSBzZXF1ZW5jZXMgc2hvdWxkIGJlCisgKiB0cmVhdGVkIGFzIHRoZSBzYW1lICJ1c2VyLWxldmVsIiBjaGFyYWN0ZXIgIkEgd2l0aCBhY3V0ZSBhY2NlbnQiLiAgV2hlbiB5b3UgCisgKiBhcmUgc2VhcmNoaW5nIG9yIGNvbXBhcmluZyB0ZXh0LCB5b3UgbXVzdCBlbnN1cmUgdGhhdCB0aGVzZSB0d28gc2VxdWVuY2VzIGFyZSAKKyAqIHRyZWF0ZWQgZXF1aXZhbGVudGx5LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGhhbmRsZSBjaGFyYWN0ZXJzIHdpdGggbW9yZSB0aGFuCisgKiBvbmUgYWNjZW50LiAgU29tZXRpbWVzIHRoZSBvcmRlciBvZiBhIGNoYXJhY3RlcidzIGNvbWJpbmluZyBhY2NlbnRzIGlzCisgKiBzaWduaWZpY2FudCwgd2hpbGUgaW4gb3RoZXIgY2FzZXMgYWNjZW50IHNlcXVlbmNlcyBpbiBkaWZmZXJlbnQgb3JkZXJzIGFyZQorICogcmVhbGx5IGVxdWl2YWxlbnQuCisgKgorICogU2ltaWxhcmx5LCB0aGUgc3RyaW5nICJmZmkiIGNhbiBiZSBlbmNvZGVkIGFzIHRocmVlIHNlcGFyYXRlIGxldHRlcnM6CisgKgorICogPHA+CisgKiAgICAgIDAwNjYgICAgTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAqICAgICAgMDA2NiAgICBMQVRJTiBTTUFMTCBMRVRURVIgRgorICogICAgICAwMDY5ICAgIExBVElOIFNNQUxMIExFVFRFUiBJCisgKiA8XHA+CisgKgorICogb3IgYXMgdGhlIHNpbmdsZSBjaGFyYWN0ZXIKKyAqCisgKiA8cD4KKyAqICAgICAgRkIwMyAgICBMQVRJTiBTTUFMTCBMSUdBVFVSRSBGRkkKKyAqIDxccD4KKyAqCisgKiBUaGUgZmZpIGxpZ2F0dXJlIGlzIG5vdCBhIGRpc3RpbmN0IHNlbWFudGljIGNoYXJhY3RlciwgYW5kIHN0cmljdGx5IHNwZWFraW5nCisgKiBpdCBzaG91bGRuJ3QgYmUgaW4gVW5pY29kZSBhdCBhbGwsIGJ1dCBpdCB3YXMgaW5jbHVkZWQgZm9yIGNvbXBhdGliaWxpdHkKKyAqIHdpdGggZXhpc3RpbmcgY2hhcmFjdGVyIHNldHMgdGhhdCBhbHJlYWR5IHByb3ZpZGVkIGl0LiAgVGhlIFVuaWNvZGUgc3RhbmRhcmQKKyAqIGlkZW50aWZpZXMgc3VjaCBjaGFyYWN0ZXJzIGJ5IGdpdmluZyB0aGVtICJjb21wYXRpYmlsaXR5IiBkZWNvbXBvc2l0aW9ucworICogaW50byB0aGUgY29ycmVzcG9uZGluZyBzZW1hbnRpYyBjaGFyYWN0ZXJzLiAgV2hlbiBzb3J0aW5nIGFuZCBzZWFyY2hpbmcsIHlvdQorICogd2lsbCBvZnRlbiB3YW50IHRvIHVzZSB0aGVzZSBtYXBwaW5ncy4KKyAqCisgKiA8Y29kZT5ub3JtYWxpemU8L2NvZGU+IGhlbHBzIHNvbHZlIHRoZXNlIHByb2JsZW1zIGJ5IHRyYW5zZm9ybWluZyB0ZXh0IGludG8gCisgKiB0aGUgY2Fub25pY2FsIGNvbXBvc2VkIGFuZCBkZWNvbXBvc2VkIGZvcm1zIGFzIHNob3duIGluIHRoZSBmaXJzdCBleGFtcGxlIAorICogYWJvdmUuIEluIGFkZGl0aW9uLCB5b3UgY2FuIGhhdmUgaXQgcGVyZm9ybSBjb21wYXRpYmlsaXR5IGRlY29tcG9zaXRpb25zIHNvIAorICogdGhhdCB5b3UgY2FuIHRyZWF0IGNvbXBhdGliaWxpdHkgY2hhcmFjdGVycyB0aGUgc2FtZSBhcyB0aGVpciBlcXVpdmFsZW50cy4KKyAqIEZpbmFsbHksIDxjb2RlPm5vcm1hbGl6ZTwvY29kZT4gcmVhcnJhbmdlcyBhY2NlbnRzIGludG8gdGhlIHByb3BlciBjYW5vbmljYWwKKyAqIG9yZGVyLCBzbyB0aGF0IHlvdSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhY2NlbnQgcmVhcnJhbmdlbWVudCBvbiB5b3VyCisgKiBvd24uCisgKgorICogRm9ybSBGQ0QsICJGYXN0IEMgb3IgRCIsIGlzIGFsc28gZGVzaWduZWQgZm9yIGNvbGxhdGlvbi4KKyAqIEl0IGFsbG93cyB0byB3b3JrIG9uIHN0cmluZ3MgdGhhdCBhcmUgbm90IG5lY2Vzc2FyaWx5IG5vcm1hbGl6ZWQKKyAqIHdpdGggYW4gYWxnb3JpdGhtIChsaWtlIGluIGNvbGxhdGlvbikgdGhhdCB3b3JrcyB1bmRlciAiY2Fub25pY2FsIGNsb3N1cmUiLCAKKyAqIGkuZS4sIGl0IHRyZWF0cyBwcmVjb21wb3NlZCBjaGFyYWN0ZXJzIGFuZCB0aGVpciBkZWNvbXBvc2VkIGVxdWl2YWxlbnRzIHRoZSAKKyAqIHNhbWUuCisgKgorICogSXQgaXMgbm90IGEgbm9ybWFsaXphdGlvbiBmb3JtIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvdmlkZSBmb3IgdW5pcXVlbmVzcyBvZiAKKyAqIHJlcHJlc2VudGF0aW9uLiBNdWx0aXBsZSBzdHJpbmdzIG1heSBiZSBjYW5vbmljYWxseSBlcXVpdmFsZW50ICh0aGVpciBORkRzIAorICogYXJlIGlkZW50aWNhbCkgYW5kIG1heSBhbGwgY29uZm9ybSB0byBGQ0Qgd2l0aG91dCBiZWluZyBpZGVudGljYWwgdGhlbXNlbHZlcy4KKyAqCisgKiBUaGUgZm9ybSBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgInJhdyBkZWNvbXBvc2l0aW9uIiwgdGhlIHJlY3Vyc2l2ZSAKKyAqIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIG9mIGVhY2ggY2hhcmFjdGVyLCByZXN1bHRzIGluIGEgc3RyaW5nIHRoYXQgaXMgCisgKiBjYW5vbmljYWxseSBvcmRlcmVkLiBUaGlzIG1lYW5zIHRoYXQgcHJlY29tcG9zZWQgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCBmb3IgCisgKiBhcyBsb25nIGFzIHRoZWlyIGRlY29tcG9zaXRpb25zIGRvIG5vdCBuZWVkIGNhbm9uaWNhbCByZW9yZGVyaW5nLgorICoKKyAqIEl0cyBhZHZhbnRhZ2UgZm9yIGEgcHJvY2VzcyBsaWtlIGNvbGxhdGlvbiBpcyB0aGF0IGFsbCBORkQgYW5kIG1vc3QgTkZDIHRleHRzCisgKiAtIGFuZCBtYW55IHVubm9ybWFsaXplZCB0ZXh0cyAtIGFscmVhZHkgY29uZm9ybSB0byBGQ0QgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIAorICogbm9ybWFsaXplZCAoTkZEKSBmb3Igc3VjaCBhIHByb2Nlc3MuIFRoZSBGQ0QgcXVpY2sgY2hlY2sgd2lsbCByZXR1cm4gWUVTIGZvciAKKyAqIG1vc3Qgc3RyaW5ncyBpbiBwcmFjdGljZS4KKyAqCisgKiBub3JtYWxpemUoRkNEKSBtYXkgYmUgaW1wbGVtZW50ZWQgd2l0aCBORkQuCisgKgorICogRm9yIG1vcmUgZGV0YWlscyBvbiBGQ0Qgc2VlIHRoZSBjb2xsYXRpb24gZGVzaWduIGRvY3VtZW50OgorICogaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2N2cy9pY3UvfmNoZWNrb3V0fi9pY3VodG1sL2Rlc2lnbi9jb2xsYXRpb24vSUNVX2NvbGxhdGlvbl9kZXNpZ24uaHRtCisgKgorICogSUNVIGNvbGxhdGlvbiBwZXJmb3JtcyBlaXRoZXIgTkZEIG9yIEZDRCBub3JtYWxpemF0aW9uIGF1dG9tYXRpY2FsbHkgaWYgCisgKiBub3JtYWxpemF0aW9uIGlzIHR1cm5lZCBvbiBmb3IgdGhlIGNvbGxhdG9yIG9iamVjdC4gQmV5b25kIGNvbGxhdGlvbiBhbmQgCisgKiBzdHJpbmcgc2VhcmNoLCBub3JtYWxpemVkIHN0cmluZ3MgbWF5IGJlIHVzZWZ1bCBmb3Igc3RyaW5nIGVxdWl2YWxlbmNlIAorICogY29tcGFyaXNvbnMsIHRyYW5zbGl0ZXJhdGlvbi90cmFuc2NyaXB0aW9uLCB1bmlxdWUgcmVwcmVzZW50YXRpb25zLCBldGMuCisgKgorICogVGhlIFczQyBnZW5lcmFsbHkgcmVjb21tZW5kcyB0byBleGNoYW5nZSB0ZXh0cyBpbiBORkMuCisgKiBOb3RlIGFsc28gdGhhdCBtb3N0IGxlZ2FjeSBjaGFyYWN0ZXIgZW5jb2RpbmdzIHVzZSBvbmx5IHByZWNvbXBvc2VkIGZvcm1zIGFuZAorICogb2Z0ZW4gZG8gbm90IGVuY29kZSBhbnkgY29tYmluaW5nIG1hcmtzIGJ5IHRoZW1zZWx2ZXMuIEZvciBjb252ZXJzaW9uIHRvIHN1Y2gKKyAqIGNoYXJhY3RlciBlbmNvZGluZ3MgdGhlIFVuaWNvZGUgdGV4dCBuZWVkcyB0byBiZSBub3JtYWxpemVkIHRvIE5GQy4KKyAqIEZvciBtb3JlIHVzYWdlIGV4YW1wbGVzLCBzZWUgdGhlIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXguCisgKiBAZHJhZnQgSUNVIDIuMgorICovCisKK3B1YmxpYyBmaW5hbCBjbGFzcyBOb3JtYWxpemVyIGltcGxlbWVudHMgQ2xvbmVhYmxleworICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFByaXZhdGUgZGF0YQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisgICAgcHJpdmF0ZSBjaGFyW10gYnVmZmVyID0gbmV3IGNoYXJbMTAwXTsKKyAgICBwcml2YXRlIGludCBidWZmZXJTdGFydCA9IDA7CisgICAgcHJpdmF0ZSBpbnQgYnVmZmVyUG9zICAgPSAwOworICAgIHByaXZhdGUgaW50IGJ1ZmZlckxpbWl0ID0gMDsKKyAgICAKKyAgICAvLyBUaGlzIHRlbGxzIHVzIHdoYXQgdGhlIGJpdHMgaW4gdGhlICJtb2RlIiBvYmplY3QgbWVhbi4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09NUEFUX0JJVCA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFQ09NUF9CSVQgPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT01QT1NFX0JJVCA9IDQ7CisgICAgCisgICAgLy8gVGhlIGlucHV0IHRleHQgYW5kIG91ciBwb3NpdGlvbiBpbiBpdAorICAgIHByaXZhdGUgVUNoYXJhY3Rlckl0ZXJhdG9yICB0ZXh0OworICAgIHByaXZhdGUgTW9kZSAgICAgICAgICAgICAgICBtb2RlID0gTkZDOworICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgICBvcHRpb25zID0gMDsKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4OworICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgICBuZXh0SW5kZXg7CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBlbmQgb2YgdGhlIGl0ZXJhdGlvbiBoYXMgYmVlbiByZWFjaGVkLgorICAgICAqIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHtAbGluayBVQ2hhcmFjdGVySXRlcmF0b3IjRE9ORX0uCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET05FID0gVUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkU7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudHMgZm9yIG5vcm1hbGl6YXRpb24gbW9kZXMuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE1vZGUgeworCQlwcml2YXRlIGludCBtb2RlVmFsdWU7CisJCXByaXZhdGUgTW9kZShpbnQgdmFsdWUpeworCQkgICAgbW9kZVZhbHVlID0gdmFsdWU7CisJCX0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIG1ldGhvZCBkaXNwYXRjaAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIGludCBub3JtYWxpemUoY2hhcltdIHNyYywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCwgaW50IGRlc3RTdGFydCwgaW50IGRlc3RMaW1pdCl7CisgICAgICAgICAgICBpbnQgc3JjTGVuID0gKHNyY0xpbWl0IC0gc3JjU3RhcnQpOworICAgICAgICAgICAgaW50IGRlc3RMZW4gPSAoZGVzdExpbWl0IC0gZGVzdFN0YXJ0KTsKKyAgICAgICAgICAgIGlmKCBzcmNMZW4gPiBkZXN0TGVuICl7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNyY0xlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3JjLHNyY1N0YXJ0LGRlc3QsZGVzdFN0YXJ0LHNyY0xlbik7CisgICAgICAgICAgICByZXR1cm4gc3JjTGVuOworICAgICAgICB9CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvciBtZXRob2QgZGlzcGF0Y2gKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBzcmMpeworICAgICAgICAgICAgcmV0dXJuIHNyYzsKKyAgICAgICAgfQorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IgbWV0aG9kIGRpc3BhdGNoCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgaW50IGdldE1pbkMoKXsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IgbWV0aG9kIGRpc3BhdGNoCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgaW50IGdldE1hc2soKXsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IgbWV0aG9kIGRpc3BhdGNoCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgSXNQcmV2Qm91bmRhcnkgZ2V0UHJldkJvdW5kYXJ5KCl7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IgbWV0aG9kIGRpc3BhdGNoCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgSXNOZXh0Qm91bmRhcnkgZ2V0TmV4dEJvdW5kYXJ5KCl7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IgbWV0aG9kIGRpc3BhdGNoCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgUXVpY2tDaGVja1Jlc3VsdCBxdWlja0NoZWNrKGNoYXJbXSBzcmMsaW50IHN0YXJ0LCBpbnQgbGltaXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYWxsb3dNYXliZSl7CisgICAgICAgICAgICBpZihhbGxvd01heWJlKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUFZQkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIG1ldGhvZCBkaXNwYXRjaAorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNORlNraXBwYWJsZShpbnQgYyl7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqIAorICAgICAqIE5vIGRlY29tcG9zaXRpb24vY29tcG9zaXRpb24uICAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgTW9kZSBOT05FID0gbmV3IE1vZGUoMSk7CisKKyAgICAvKiogCisgICAgICogQ2Fub25pY2FsIGRlY29tcG9zaXRpb24uICAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgTW9kZSBORkQgPSBuZXcgTkZETW9kZSgyKTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBORkRNb2RlIGV4dGVuZHMgTW9kZXsKKyAgICAgICAgcHJpdmF0ZSBORkRNb2RlKGludCB2YWx1ZSl7CisgICAgICAgICAgICBzdXBlcih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIGludCBub3JtYWxpemUoIGNoYXJbXSBzcmMsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBkZXN0LGludCBkZXN0U3RhcnQsaW50IGRlc3RMaW1pdCl7CisgICAgICAgICAgcmV0dXJuIGRlY29tcG9zZShzcmMsICBzcmNTdGFydCxzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RTdGFydCxkZXN0TGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RlY3RlZCBTdHJpbmcgbm9ybWFsaXplKCBTdHJpbmcgc3JjKXsKKyAgICAgICAgICAgIHJldHVybiBkZWNvbXBvc2Uoc3JjLGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgaW50IGdldE1pbkMoKXsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5NSU5fV0lUSF9MRUFEX0NDOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBJc1ByZXZCb3VuZGFyeSBnZXRQcmV2Qm91bmRhcnkoKXsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSXNQcmV2TkZEU2FmZSgpOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBJc05leHRCb3VuZGFyeSBnZXROZXh0Qm91bmRhcnkoKXsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSXNOZXh0TkZEU2FmZSgpOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBpbnQgZ2V0TWFzaygpeworICAgICAgICAgICAgcmV0dXJuIChOb3JtYWxpemVySW1wbC5DQ19NQVNLfE5vcm1hbGl6ZXJJbXBsLlFDX05GRCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIFF1aWNrQ2hlY2tSZXN1bHQgcXVpY2tDaGVjayhjaGFyW10gc3JjLGludCBzdGFydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LGJvb2xlYW4gYWxsb3dNYXliZSl7CisgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplckltcGwucXVpY2tDaGVjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMsIHN0YXJ0LGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXJJbXBsLmdldEZyb21JbmRleGVzQXJyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplckltcGwuSU5ERVhfTUlOX05GRF9OT19NQVlCRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplckltcGwuUUNfTkZELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93TWF5YmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc05GU2tpcHBhYmxlKGludCBjKXsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5pc05GU2tpcHBhYmxlKGMsdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9ybWFsaXplckltcGwuQ0NfTUFTS3xOb3JtYWxpemVySW1wbC5RQ19ORkQpCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfSAgICAgICAgICAgCisgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoqIAorICAgICAqIENvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbi4gIAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNb2RlIE5GS0QgPSBuZXcgTkZLRE1vZGUoMyk7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgTkZLRE1vZGUgZXh0ZW5kcyBNb2RleworICAgICAgICBwcml2YXRlIE5GS0RNb2RlKGludCB2YWx1ZSl7CisgICAgICAgICAgICBzdXBlcih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIGludCBub3JtYWxpemUoIGNoYXJbXSBzcmMsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCxpbnQgZGVzdFN0YXJ0LGludCBkZXN0TGltaXQpeworICAgICAgICAgIHJldHVybiBkZWNvbXBvc2Uoc3JjLCAgc3JjU3RhcnQsc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LCBkZXN0U3RhcnQsZGVzdExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBub3JtYWxpemUoIFN0cmluZyBzcmMpeworICAgICAgICAgICAgcmV0dXJuIGRlY29tcG9zZShzcmMsdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIGludCBnZXRNaW5DKCl7CisgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplckltcGwuTUlOX1dJVEhfTEVBRF9DQzsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgSXNQcmV2Qm91bmRhcnkgZ2V0UHJldkJvdW5kYXJ5KCl7CisgICAgICAgICAgICByZXR1cm4gbmV3IElzUHJldk5GRFNhZmUoKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgSXNOZXh0Qm91bmRhcnkgZ2V0TmV4dEJvdW5kYXJ5KCl7CisgICAgICAgICAgICByZXR1cm4gbmV3IElzTmV4dE5GRFNhZmUoKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgaW50IGdldE1hc2soKXsKKyAgICAgICAgICAgIHJldHVybiAoTm9ybWFsaXplckltcGwuQ0NfTUFTS3xOb3JtYWxpemVySW1wbC5RQ19ORktEKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgUXVpY2tDaGVja1Jlc3VsdCBxdWlja0NoZWNrKGNoYXJbXSBzcmMsaW50IHN0YXJ0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsYm9vbGVhbiBhbGxvd01heWJlKXsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5xdWlja0NoZWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyxzdGFydCxsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVySW1wbC5nZXRGcm9tSW5kZXhlc0FycigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplckltcGwuSU5ERVhfTUlOX05GS0RfTk9fTUFZQkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXJJbXBsLlFDX05GS0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dNYXliZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNORlNraXBwYWJsZShpbnQgYyl7CisgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplckltcGwuaXNORlNraXBwYWJsZShjLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb3JtYWxpemVySW1wbC5DQ19NQVNLfE5vcm1hbGl6ZXJJbXBsLlFDX05GS0QpCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoqIAorICAgICAqIENhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIGZvbGxvd2VkIGJ5IGNhbm9uaWNhbCBjb21wb3NpdGlvbi4gIAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNb2RlIE5GQyA9IG5ldyBORkNNb2RlKDQpOworICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIE5GQ01vZGUgZXh0ZW5kcyBNb2RleworICAgICAgICBwcml2YXRlIE5GQ01vZGUoaW50IHZhbHVlKXsKKyAgICAgICAgICAgIHN1cGVyKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgaW50IG5vcm1hbGl6ZSggY2hhcltdIHNyYywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGRlc3QsaW50IGRlc3RTdGFydCxpbnQgZGVzdExpbWl0KXsKKyAgICAgICAgICByZXR1cm4gY29tcG9zZShzcmMsICBzcmNTdGFydCxzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LCBkZXN0U3RhcnQsZGVzdExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBub3JtYWxpemUoIFN0cmluZyBzcmMpeworICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2Uoc3JjLGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgIAorICAgICAgICBwcm90ZWN0ZWQgaW50IGdldE1pbkMoKXsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5nZXRGcm9tSW5kZXhlc0FycigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXJJbXBsLklOREVYX01JTl9ORkNfTk9fTUFZQkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgSXNQcmV2Qm91bmRhcnkgZ2V0UHJldkJvdW5kYXJ5KCl7CisgICAgICAgICAgICByZXR1cm4gbmV3IElzUHJldlRydWVTdGFydGVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIElzTmV4dEJvdW5kYXJ5IGdldE5leHRCb3VuZGFyeSgpeworICAgICAgICAgICAgcmV0dXJuIG5ldyBJc05leHRUcnVlU3RhcnRlcigpOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBpbnQgZ2V0TWFzaygpeworICAgICAgICAgICAgcmV0dXJuIChOb3JtYWxpemVySW1wbC5DQ19NQVNLfE5vcm1hbGl6ZXJJbXBsLlFDX05GQyk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIFF1aWNrQ2hlY2tSZXN1bHQgcXVpY2tDaGVjayhjaGFyW10gc3JjLGludCBzdGFydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LGJvb2xlYW4gYWxsb3dNYXliZSl7CisgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplckltcGwucXVpY2tDaGVjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLHN0YXJ0LGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVySW1wbC5nZXRGcm9tSW5kZXhlc0FycigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXJJbXBsLklOREVYX01JTl9ORkNfTk9fTUFZQkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplckltcGwuUUNfTkZDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd01heWJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc05GU2tpcHBhYmxlKGludCBjKXsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5pc05GU2tpcHBhYmxlKGMsdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICggTm9ybWFsaXplckltcGwuQ0NfTUFTS3xOb3JtYWxpemVySW1wbC5DT01CSU5FU19BTll8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb3JtYWxpemVySW1wbC5RQ19ORkMgJiBOb3JtYWxpemVySW1wbC5RQ19BTllfTk8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfSAKKyAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKiogCisgICAgICogRGVmYXVsdCBub3JtYWxpemF0aW9uLiAgCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1vZGUgREVGQVVMVCA9IE5GQzsgCisgICAgCisgICAgLyoqIAorICAgICAqIENvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbiBmb2xsb3dlZCBieSBjYW5vbmljYWwgY29tcG9zaXRpb24uIAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNb2RlIE5GS0MgPW5ldyBORktDTW9kZSg1KTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBORktDTW9kZSBleHRlbmRzIE1vZGV7CisgICAgICAgIHByaXZhdGUgTkZLQ01vZGUoaW50IHZhbHVlKXsKKyAgICAgICAgICAgIHN1cGVyKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgaW50IG5vcm1hbGl6ZSggY2hhcltdIHNyYywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGRlc3QsaW50IGRlc3RTdGFydCxpbnQgZGVzdExpbWl0KXsKKyAgICAgICAgICByZXR1cm4gY29tcG9zZShzcmMsICBzcmNTdGFydCxzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LCBkZXN0U3RhcnQsZGVzdExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBTdHJpbmcgbm9ybWFsaXplKCBTdHJpbmcgc3JjKXsKKyAgICAgICAgICAgIHJldHVybiBjb21wb3NlKHNyYyx0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgaW50IGdldE1pbkMoKXsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5nZXRGcm9tSW5kZXhlc0FycigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXJJbXBsLklOREVYX01JTl9ORktDX05PX01BWUJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIElzUHJldkJvdW5kYXJ5IGdldFByZXZCb3VuZGFyeSgpeworICAgICAgICAgICAgcmV0dXJuIG5ldyBJc1ByZXZUcnVlU3RhcnRlcigpOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBJc05leHRCb3VuZGFyeSBnZXROZXh0Qm91bmRhcnkoKXsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSXNOZXh0VHJ1ZVN0YXJ0ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgaW50IGdldE1hc2soKXsKKyAgICAgICAgICAgIHJldHVybiAoTm9ybWFsaXplckltcGwuQ0NfTUFTS3xOb3JtYWxpemVySW1wbC5RQ19ORktDKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgUXVpY2tDaGVja1Jlc3VsdCBxdWlja0NoZWNrKGNoYXJbXSBzcmMsaW50IHN0YXJ0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsYm9vbGVhbiBhbGxvd01heWJlKXsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5xdWlja0NoZWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMsc3RhcnQsbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXJJbXBsLmdldEZyb21JbmRleGVzQXJyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVySW1wbC5JTkRFWF9NSU5fTkZLQ19OT19NQVlCRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVySW1wbC5RQ19ORktDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd01heWJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGlzTkZTa2lwcGFibGUoaW50IGMpeworICAgICAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZXJJbXBsLmlzTkZTa2lwcGFibGUoYywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCBOb3JtYWxpemVySW1wbC5DQ19NQVNLfE5vcm1hbGl6ZXJJbXBsLkNPTUJJTkVTX0FOWXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9ybWFsaXplckltcGwuUUNfTkZLQyAmIE5vcm1hbGl6ZXJJbXBsLlFDX0FOWV9OTykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0gCisgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKiogCisgICAgICogIkZhc3QgQyBvciBEIiBmb3JtLiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMiAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1vZGUgRkNEID0gbmV3IEZDRE1vZGUoNik7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgRkNETW9kZSBleHRlbmRzIE1vZGV7CisgICAgICAgIHByaXZhdGUgRkNETW9kZShpbnQgdmFsdWUpeworICAgICAgICAgICAgc3VwZXIodmFsdWUpOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBpbnQgbm9ybWFsaXplKCBjaGFyW10gc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCxpbnQgZGVzdFN0YXJ0LGludCBkZXN0TGltaXQpeworICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5tYWtlRkNEKHNyYywgc3JjU3RhcnQsc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFN0YXJ0LGRlc3RMaW1pdCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBub3JtYWxpemUoIFN0cmluZyBzcmMpeworICAgICAgICAgICAgcmV0dXJuIG1ha2VGQ0Qoc3JjKTsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgaW50IGdldE1pbkMoKXsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5NSU5fV0lUSF9MRUFEX0NDOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBJc1ByZXZCb3VuZGFyeSBnZXRQcmV2Qm91bmRhcnkoKXsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSXNQcmV2TkZEU2FmZSgpOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBJc05leHRCb3VuZGFyeSBnZXROZXh0Qm91bmRhcnkoKXsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSXNOZXh0TkZEU2FmZSgpOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBpbnQgZ2V0TWFzaygpeworICAgICAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZXJJbXBsLkNDX01BU0t8Tm9ybWFsaXplckltcGwuUUNfTkZEOworICAgICAgICB9CisgICAgICAgIHByb3RlY3RlZCBRdWlja0NoZWNrUmVzdWx0IHF1aWNrQ2hlY2soY2hhcltdIHNyYyxpbnQgc3RhcnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW1pdCxib29sZWFuIGFsbG93TWF5YmUpeworICAgICAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZXJJbXBsLmNoZWNrRkNEKHNyYyxzdGFydCxsaW1pdCkgPyBZRVMgOiBOTzsKKyAgICAgICAgfQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc05GU2tpcHBhYmxlKGludCBjKXsKKyAgICAgICAgICAgIC8qIEZDRDogc2tpcHBhYmxlIGlmIGxlYWQgY2M9PTAgYW5kIHRyYWlsIGNjPD0xICovCisgICAgICAgICAgIHJldHVybiAoTm9ybWFsaXplckltcGwuZ2V0RkNEMTYoYyk+MSk7CisgICAgICAgIH0gICAKKyAgICB9OworCisgICAgCisgICAgLyoqCisgICAgICogTnVsbCBvcGVyYXRpb24gZm9yIHVzZSB3aXRoIHRoZSB7QGxpbmsgI05vcm1hbGl6ZXIgY29uc3RydWN0b3JzfQorICAgICAqIGFuZCB0aGUgc3RhdGljIHtAbGluayAjbm9ybWFsaXplIG5vcm1hbGl6ZX0gbWV0aG9kLiAgVGhpcyB2YWx1ZSB0ZWxscworICAgICAqIHRoZSA8dHQ+Tm9ybWFsaXplcjwvdHQ+IHRvIGRvIG5vdGhpbmcgYnV0IHJldHVybiB1bnByb2Nlc3NlZCBjaGFyYWN0ZXJzCisgICAgICogZnJvbSB0aGUgdW5kZXJseWluZyBTdHJpbmcgb3IgQ2hhcmFjdGVySXRlcmF0b3IuICBJZiB5b3UgaGF2ZSBjb2RlIHdoaWNoCisgICAgICogcmVxdWlyZXMgcmF3IHRleHQgYXQgc29tZSB0aW1lcyBhbmQgbm9ybWFsaXplZCB0ZXh0IGF0IG90aGVycywgeW91IGNhbgorICAgICAqIHVzZSA8dHQ+Tk9fT1A8L3R0PiBmb3IgdGhlIGNhc2VzIHdoZXJlIHlvdSB3YW50IHJhdyB0ZXh0LCByYXRoZXIKKyAgICAgKiB0aGFuIGhhdmluZyBhIHNlcGFyYXRlIGNvZGUgcGF0aCB0aGF0IGJ5cGFzc2VzIDx0dD5Ob3JtYWxpemVyPC90dD4KKyAgICAgKiBhbHRvZ2V0aGVyLgorICAgICAqIDxwPgorICAgICAqIEBzZWUgI3NldE1vZGUKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtQXVnLTMxLiBVc2UgTm9tYWxpemVyLk5PTkUKKyAgICAgKiBAc2VlICNOT05FCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNb2RlIE5PX09QID0gTk9ORTsKKworICAgIC8qKgorICAgICAqIENhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIGZvbGxvd2VkIGJ5IGNhbm9uaWNhbCBjb21wb3NpdGlvbi4gIFVzZWQgd2l0aCB0aGUKKyAgICAgKiB7QGxpbmsgI05vcm1hbGl6ZXIgY29uc3RydWN0b3JzfSBhbmQgdGhlIHN0YXRpYyAKKyAgICAgKiB7QGxpbmsgI25vcm1hbGl6ZSBub3JtYWxpemV9IG1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbiB0byBiZSAKKyAgICAgKiBwZXJmb3JtZWQuCisgICAgICogPHA+CisgICAgICogSWYgYWxsIG9wdGlvbmFsIGZlYXR1cmVzICg8aT5lLmcuPC9pPiB7QGxpbmsgI0lHTk9SRV9IQU5HVUx9KSBhcmUgdHVybmVkCisgICAgICogb2ZmLCB0aGlzIG9wZXJhdGlvbiBwcm9kdWNlcyBvdXRwdXQgdGhhdCBpcyBpbgorICAgICAqIDxhIGhyZWY9aHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3JlcG9ydHMvdHIxNS8+VW5pY29kZSBDYW5vbmljYWwgCisgICAgICogRm9ybTwvYT4KKyAgICAgKiA8Yj5DPC9iPi4KKyAgICAgKiA8cD4KKyAgICAgKiBAc2VlICNzZXRNb2RlCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuMi4gVG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLUF1Zy0zMS4gVXNlIE5vcm1hbGllci5ORkMKKyAgICAgKiBAc2VlICNORkMKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1vZGUgQ09NUE9TRSA9IE5GQzsKKworICAgIC8qKgorICAgICAqIENvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbiBmb2xsb3dlZCBieSBjYW5vbmljYWwgY29tcG9zaXRpb24uCisgICAgICogVXNlZCB3aXRoIHRoZSB7QGxpbmsgI05vcm1hbGl6ZXIgY29uc3RydWN0b3JzfSBhbmQgdGhlIHN0YXRpYworICAgICAqIHtAbGluayAjbm9ybWFsaXplIG5vcm1hbGl6ZX0gbWV0aG9kIHRvIGRldGVybWluZSB0aGUgb3BlcmF0aW9uIHRvIGJlIAorICAgICAqIHBlcmZvcm1lZC4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiBhbGwgb3B0aW9uYWwgZmVhdHVyZXMgKDxpPmUuZy48L2k+IHtAbGluayAjSUdOT1JFX0hBTkdVTH0pIGFyZSB0dXJuZWQKKyAgICAgKiBvZmYsIHRoaXMgb3BlcmF0aW9uIHByb2R1Y2VzIG91dHB1dCB0aGF0IGlzIGluCisgICAgICogPGEgaHJlZj1odHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjE1Lz5Vbmljb2RlIENhbm9uaWNhbCAKKyAgICAgKiBGb3JtPC9hPgorICAgICAqIDxiPktDPC9iPi4KKyAgICAgKiA8cD4KKyAgICAgKiBAc2VlICNzZXRNb2RlCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuMi4gVG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLUF1Zy0zMS4gVXNlIE5vcm1hbGl6ZXIuTkZLQworICAgICAqIEBzZWUgI05GS0MKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1vZGUgQ09NUE9TRV9DT01QQVQgPSBORktDOworCisgICAgLyoqCisgICAgICogQ2Fub25pY2FsIGRlY29tcG9zaXRpb24uICBUaGlzIHZhbHVlIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgI05vcm1hbGl6ZXIgY29uc3RydWN0b3JzfSBhbmQgdGhlIHN0YXRpYworICAgICAqIHtAbGluayAjbm9ybWFsaXplIG5vcm1hbGl6ZX0KKyAgICAgKiBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkLgorICAgICAqIDxwPgorICAgICAqIElmIGFsbCBvcHRpb25hbCBmZWF0dXJlcyAoPGk+ZS5nLjwvaT4ge0BsaW5rICNJR05PUkVfSEFOR1VMfSkgYXJlIHR1cm5lZAorICAgICAqIG9mZiwgdGhpcyBvcGVyYXRpb24gcHJvZHVjZXMgb3V0cHV0IHRoYXQgaXMgaW4KKyAgICAgKiA8YSBocmVmPWh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMTUvPlVuaWNvZGUgQ2Fub25pY2FsIAorICAgICAqIEZvcm08L2E+CisgICAgICogPGI+RDwvYj4uCisgICAgICogPHA+CisgICAgICogQHNlZSAjc2V0TW9kZQorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjIuIFRvIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy1BdWctMzEuVXNlIE5vcm1hbGl6ZXIuTkZECisgICAgICogQHNlZSAjTkZECisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNb2RlIERFQ09NUCA9IE5GRDsKKworICAgIC8qKgorICAgICAqIENvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbi4gIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayAjTm9ybWFsaXplciBjb25zdHJ1Y3RvcnN9IGFuZCB0aGUgc3RhdGljIAorICAgICAqIHtAbGluayAjbm9ybWFsaXplIG5vcm1hbGl6ZX0KKyAgICAgKiBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkLgorICAgICAqIDxwPgorICAgICAqIElmIGFsbCBvcHRpb25hbCBmZWF0dXJlcyAoPGk+ZS5nLjwvaT4ge0BsaW5rICNJR05PUkVfSEFOR1VMfSkgYXJlIHR1cm5lZAorICAgICAqIG9mZiwgdGhpcyBvcGVyYXRpb24gcHJvZHVjZXMgb3V0cHV0IHRoYXQgaXMgaW4KKyAgICAgKiA8YSBocmVmPWh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMTUvPlVuaWNvZGUgQ2Fub25pY2FsIAorICAgICAqIEZvcm08L2E+CisgICAgICogPGI+S0Q8L2I+LgorICAgICAqIDxwPgorICAgICAqIEBzZWUgI3NldE1vZGUKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtQXVnLTMxLiBVc2UgTm9ybWFsaXplci5ORktECisgICAgICogQHNlZSAjTkZLRAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgTW9kZSBERUNPTVBfQ09NUEFUID0gTkZLRDsKKworICAgIC8qKgorICAgICAqIE9wdGlvbiB0byBkaXNhYmxlIEhhbmd1bC9KYW1vIGNvbXBvc2l0aW9uIGFuZCBkZWNvbXBvc2l0aW9uLgorICAgICAqIFRoaXMgb3B0aW9uIGFwcGxpZXMgdG8gS29yZWFuIHRleHQsCisgICAgICogd2hpY2ggY2FuIGJlIHJlcHJlc2VudGVkIGVpdGhlciBpbiB0aGUgSmFtbyBhbHBoYWJldCBvciBpbiBIYW5ndWwKKyAgICAgKiBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgcmVhbGx5IGp1c3QgdHdvIG9yIHRocmVlIEphbW8gY29tYmluZWQKKyAgICAgKiBpbnRvIG9uZSB2aXN1YWwgZ2x5cGguICBTaW5jZSBKYW1vIHRha2VzIHVwIG1vcmUgc3RvcmFnZSBzcGFjZSB0aGFuCisgICAgICogSGFuZ3VsLCBhcHBsaWNhdGlvbnMgdGhhdCBwcm9jZXNzIG9ubHkgSGFuZ3VsIHRleHQgbWF5IHdpc2ggdG8gdHVybgorICAgICAqIHRoaXMgb3B0aW9uIG9uIHdoZW4gZGVjb21wb3NpbmcgdGV4dC4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgVW5pY29kZSBzdGFuZGFyZCB0cmVhdGVzIEhhbmd1bCB0byBKYW1vIGNvbnZlcnNpb24gYXMgYQorICAgICAqIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uLCBzbyB0aGlzIG9wdGlvbiBtdXN0IGJlIHR1cm5lZCA8Yj5vZmY8L2I+IGlmIHlvdQorICAgICAqIHdpc2ggdG8gdHJhbnNmb3JtIHN0cmluZ3MgaW50byBvbmUgb2YgdGhlIHN0YW5kYXJkCisgICAgICogPGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3JlcG9ydHMvdHIxNS8iIHRhcmdldD0idW5pY29kZSI+CisgICAgICogVW5pY29kZSBOb3JtYWxpemF0aW9uIEZvcm1zPC9hPi4KKyAgICAgKiA8cD4KKyAgICAgKiBAc2VlICNzZXRPcHRpb24KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtQXVnLTMxLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElHTk9SRV9IQU5HVUwgPSAweDAwMDE7CisgICAgICAgICAgCisgICAgLyoqCisgICAgICogUmVzdWx0IHZhbHVlcyBmb3IgcXVpY2tDaGVjaygpLgorICAgICAqIEZvciBkZXRhaWxzIHNlZSBVbmljb2RlIFRlY2huaWNhbCBSZXBvcnQgMTUuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFF1aWNrQ2hlY2tSZXN1bHR7CisJCXByaXZhdGUgaW50IHJlc3VsdFZhbHVlOworCQlwcml2YXRlIFF1aWNrQ2hlY2tSZXN1bHQoaW50IHZhbHVlKXsKKwkJICAgIHJlc3VsdFZhbHVlPXZhbHVlOworCQl9CisgICAgfQorICAgIC8qKiAKKyAgICAgKiBJbmRpY2F0ZXMgdGhhdCBzdHJpbmcgaXMgbm90IGluIHRoZSBub3JtYWxpemVkIGZvcm1hdAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBRdWlja0NoZWNrUmVzdWx0IE5PID0gbmV3IFF1aWNrQ2hlY2tSZXN1bHQoMCk7CisJCisgICAgLyoqIAorICAgICAqIEluZGljYXRlcyB0aGF0IHN0cmluZyBpcyBpbiB0aGUgbm9ybWFsaXplZCBmb3JtYXQKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUXVpY2tDaGVja1Jlc3VsdCBZRVMgPSBuZXcgUXVpY2tDaGVja1Jlc3VsdCgxKTsKKworICAgIC8qKiAKKyAgICAgKiBJbmRpY2F0ZXMgaXQgY2Fubm90IGJlIGRldGVybWluZWQgaWYgc3RyaW5nIGlzIGluIHRoZSBub3JtYWxpemVkIAorICAgICAqIGZvcm1hdCB3aXRob3V0IGZ1cnRoZXIgdGhvcm91Z2ggY2hlY2tzLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBRdWlja0NoZWNrUmVzdWx0IE1BWUJFID0gbmV3IFF1aWNrQ2hlY2tSZXN1bHQoMik7CisgICAgCisgICAgLyoqCisgICAgICogT3B0aW9uIGJpdCBmb3IgY29tcGFyZToKKyAgICAgKiBDYXNlIHNlbnNpdGl2ZWx5IGNvbXBhcmUgdGhlIHN0cmluZ3MKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTERfQ0FTRV9ERUZBVUxUICAgID0gICAgICAweDAwMDA7CisgICAgCisgICAgLyoqCisgICAgICogT3B0aW9uIGJpdCBmb3IgY29tcGFyZToKKyAgICAgKiBCb3RoIGlucHV0IHN0cmluZ3MgYXJlIGFzc3VtZWQgdG8gZnVsZmlsbCBGQ0QgY29uZGl0aW9ucy4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOUFVUX0lTX0ZDRCAgICA9ICAgICAgMHgyMDAwMDsKKwkKKyAgICAvKioKKyAgICAgKiBPcHRpb24gYml0IGZvciBjb21wYXJlOgorICAgICAqIFBlcmZvcm0gY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09NUEFSRV9JR05PUkVfQ0FTRSAgPSAgICAgMHgxMDAwMDsKKwkKKyAgICAvKioKKyAgICAgKiBPcHRpb24gYml0IGZvciBjb21wYXJlOgorICAgICAqIENvbXBhcmUgc3RyaW5ncyBpbiBjb2RlIHBvaW50IG9yZGVyIGluc3RlYWQgb2YgY29kZSB1bml0IG9yZGVyLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09NUEFSRV9DT0RFX1BPSU5UX09SREVSID0gMHg4MDAwOworICAgIAorICAgIC8qKiBPcHRpb24gdmFsdWUgZm9yIGNhc2UgZm9sZGluZzogZXhjbHVkZSB0aGUgbWFwcGluZ3MgZm9yIGRvdHRlZCBJIAorICAgICAqIGFuZCBkb3RsZXNzIGkgbWFya2VkIHdpdGggJ0knIGluIENhc2VGb2xkaW5nLnR4dC4gCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kgPSAweDAwMDE7CisJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQ29uc3RydWN0b3JzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IDx0dD5Ob3JtYWxpemVyPC90dD4gb2JqZWN0IGZvciBpdGVyYXRpbmcgb3ZlciB0aGUKKyAgICAgKiBub3JtYWxpemVkIGZvcm0gb2YgYSBnaXZlbiBzdHJpbmcuCisgICAgICogPHA+CisgICAgICogQHBhcmFtIHN0ciAgIFRoZSBzdHJpbmcgdG8gYmUgbm9ybWFsaXplZC4gIFRoZSBub3JtYWxpemF0aW9uCisgICAgICogICAgICAgICAgICAgIHdpbGwgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIG1vZGUgIFRoZSBub3JtYWxpemF0aW9uIG1vZGUuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgTm9ybWFsaXplcihTdHJpbmcgc3RyLCBNb2RlIG1vZGUpIHsKKyAgICAgICAgdGhpcy50ZXh0ID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHN0cik7CisgICAgICAgIHRoaXMubW9kZSA9IG1vZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyA8dHQ+Tm9ybWFsaXplcjwvdHQ+IG9iamVjdCBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlCisgICAgICogbm9ybWFsaXplZCBmb3JtIG9mIGEgZ2l2ZW4gc3RyaW5nLgorICAgICAqIDxwPgorICAgICAqIFRoZSA8dHQ+b3B0aW9uczwvdHQ+IHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggb3B0aW9uYWwKKyAgICAgKiA8dHQ+Tm9ybWFsaXplcjwvdHQ+IGZlYXR1cmVzIGFyZSB0byBiZSBlbmFibGVkIGZvciB0aGlzIG9iamVjdC4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gc3RyICBUaGUgc3RyaW5nIHRvIGJlIG5vcm1hbGl6ZWQuICBUaGUgbm9ybWFsaXphdGlvbgorICAgICAqICAgICAgICAgICAgICB3aWxsIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtb2RlIFRoZSBub3JtYWxpemF0aW9uIG1vZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb3B0IEFueSBvcHRpb25hbCBmZWF0dXJlcyB0byBiZSBlbmFibGVkLgorICAgICAqICAgICAgICAgICAgQ3VycmVudGx5IHRoZSBvbmx5IGF2YWlsYWJsZSBvcHRpb24gaXMge0BsaW5rICNJR05PUkVfSEFOR1VMfS4KKyAgICAgKiAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGNvcnJlc3BvbmRpbmcgdG8gb25lIG9mIHRoZQorICAgICAqICAgICAgICAgICAgc3RhbmRhcmQgVW5pY29kZSBOb3JtYWxpemF0aW9uIEZvcm1zLCB1c2UgMCBmb3IgdGhpcyBhcmd1bWVudC4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtQXVnLTMxLiAKKyAgICAgKiAgICAgICAgICAgICAgVXNlIE5vcm1hbGl6ZXIoIFN0cmluZyBzdHIsIE1vZGUgbW9kZSkuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgTm9ybWFsaXplcihTdHJpbmcgc3RyLCBNb2RlIG1vZGUsIGludCBvcHQpIHsKKyAgICAgICAgdGhpcy50ZXh0ID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHN0cik7CisgICAgICAgIHRoaXMubW9kZSA9IG1vZGU7IAorICAgICAgICB0aGlzLm9wdGlvbnM9b3B0OworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgPHR0Pk5vcm1hbGl6ZXI8L3R0PiBvYmplY3QgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZQorICAgICAqIG5vcm1hbGl6ZWQgZm9ybSBvZiB0aGUgZ2l2ZW4gdGV4dC4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gaXRlciAgVGhlIGlucHV0IHRleHQgdG8gYmUgbm9ybWFsaXplZC4gIFRoZSBub3JtYWxpemF0aW9uCisgICAgICogICAgICAgICAgICAgIHdpbGwgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIG1vZGUgIFRoZSBub3JtYWxpemF0aW9uIG1vZGUuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgTm9ybWFsaXplcihDaGFyYWN0ZXJJdGVyYXRvciBpdGVyLCBNb2RlIG1vZGUpIHsKKyAgICAgICAgdGhpcy50ZXh0ID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDaGFyYWN0ZXJJdGVyYXRvcilpdGVyLmNsb25lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIHRoaXMubW9kZSA9IG1vZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyA8dHQ+Tm9ybWFsaXplcjwvdHQ+IG9iamVjdCBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlCisgICAgICogbm9ybWFsaXplZCBmb3JtIG9mIHRoZSBnaXZlbiB0ZXh0LgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBpdGVyICBUaGUgaW5wdXQgdGV4dCB0byBiZSBub3JtYWxpemVkLiAgVGhlIG5vcm1hbGl6YXRpb24KKyAgICAgKiAgICAgICAgICAgICAgd2lsbCBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9kZSAgVGhlIG5vcm1hbGl6YXRpb24gbW9kZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvcHQgQW55IG9wdGlvbmFsIGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQuCisgICAgICogICAgICAgICAgICBDdXJyZW50bHkgdGhlIG9ubHkgYXZhaWxhYmxlIG9wdGlvbiBpcyB7QGxpbmsgI0lHTk9SRV9IQU5HVUx9LgorICAgICAqICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgY29ycmVzcG9uZGluZyB0byBvbmUgb2YgdGhlCisgICAgICogICAgICAgICAgICBzdGFuZGFyZCBVbmljb2RlIE5vcm1hbGl6YXRpb24gRm9ybXMsIHVzZSAwIGZvciB0aGlzIGFyZ3VtZW50LgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjIuIFRvIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy1BdWctMzEuIAorICAgICAqICAgICAgICAgICAgICBVc2UgTm9ybWFsaXplcihDaGFyYWN0ZXJJdGVyYXRvciBpdGVyLCBNb2RlIG1vZGUpLgorICAgICAqLworICAgIHB1YmxpYyBOb3JtYWxpemVyKENoYXJhY3Rlckl0ZXJhdG9yIGl0ZXIsIE1vZGUgbW9kZSwgaW50IG9wdCl7CisgICAgICAgIHRoaXMudGV4dCA9IFVDaGFyYWN0ZXJJdGVyYXRvci5nZXRJbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ2hhcmFjdGVySXRlcmF0b3IpaXRlci5jbG9uZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB0aGlzLm1vZGUgPSBtb2RlOworICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgPHR0Pk5vcm1hbGl6ZXI8L3R0PiBvYmplY3QgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZQorICAgICAqIG5vcm1hbGl6ZWQgZm9ybSBvZiB0aGUgZ2l2ZW4gdGV4dC4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gaXRlciAgVGhlIGlucHV0IHRleHQgdG8gYmUgbm9ybWFsaXplZC4gIFRoZSBub3JtYWxpemF0aW9uCisgICAgICogICAgICAgICAgICAgIHdpbGwgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIG1vZGUgIFRoZSBub3JtYWxpemF0aW9uIG1vZGUuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICAvL2ludGVybmFsIGNvbnN0cnVjdG9yIGZvciBub3cKKyAgICBwdWJsaWMgTm9ybWFsaXplcihVQ2hhcmFjdGVySXRlcmF0b3IgaXRlciwgTW9kZSBtb2RlKXsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgdGhpcy50ZXh0ICAgICA9IChVQ2hhcmFjdGVySXRlcmF0b3IpaXRlci5jbG9uZSgpOworICAgICAgICAgICAgdGhpcy5tb2RlICAgICA9IG1vZGU7CisgICAgICAgIH1jYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgfQorCisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoaXMgPHR0Pk5vcm1hbGl6ZXI8L3R0PiBvYmplY3QuICBBbGwgcHJvcGVydGllcyBvZiB0aGlzCisgICAgICogb2JqZWN0IGFyZSBkdXBsaWNhdGVkIGluIHRoZSBuZXcgb2JqZWN0LCBpbmNsdWRpbmcgdGhlIGNsb25pbmcgb2YgYW55CisgICAgICoge0BsaW5rIENoYXJhY3Rlckl0ZXJhdG9yfSB0aGF0IHdhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yCisgICAgICogb3IgdG8ge0BsaW5rICNzZXRUZXh0KENoYXJhY3Rlckl0ZXJhdG9yKSBzZXRUZXh0fS4KKyAgICAgKiBIb3dldmVyLCB0aGUgdGV4dCBzdG9yYWdlIHVuZGVybHlpbmcKKyAgICAgKiB0aGUgPHR0PkNoYXJhY3Rlckl0ZXJhdG9yPC90dD4gaXMgbm90IGR1cGxpY2F0ZWQgdW5sZXNzIHRoZQorICAgICAqIGl0ZXJhdG9yJ3MgPHR0PmNsb25lPC90dD4gbWV0aG9kIGRvZXMgc28uCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgTm9ybWFsaXplciBjb3B5ID0gKE5vcm1hbGl6ZXIpIHN1cGVyLmNsb25lKCk7CisgICAgICAgICAgICBjb3B5LnRleHQgPSAoVUNoYXJhY3Rlckl0ZXJhdG9yKSB0ZXh0LmNsb25lKCk7CisgICAgICAgICAgICAvL2Nsb25lIHRoZSBpbnRlcm5hbCBidWZmZXIKKyAgICAgICAgICAgIGlmIChidWZmZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvcHkuYnVmZmVyID0gbmV3IGNoYXJbYnVmZmVyLmxlbmd0aF07CisgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShidWZmZXIsMCxjb3B5LmJ1ZmZlciwwLGJ1ZmZlci5sZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN0YXRpYyBVdGlsaXR5IG1ldGhvZHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogQ29tcG9zZSBhIHN0cmluZy4KKyAgICAgKiBUaGUgc3RyaW5nIHdpbGwgYmUgY29tcG9zZWQgdG8gYWNjb3JkaW5nIHRoZSB0aGUgc3BlY2lmaWVkIG1vZGUuCisgICAgICogQHBhcmFtIHN0ciAgICAgICAgVGhlIHN0cmluZyB0byBjb21wb3NlLgorICAgICAqIEBwYXJhbSBjb21wYXQgICAgIElmIHRydWUgdGhlIHN0cmluZyB3aWxsIGJlIGNvbXBvc2VkIGFjY29kaW5nIHRvIAorICAgICAqICAgICAgICAgICAgICAgICAgICBORktDIHJ1bGVzIGFuZCBpZiBmYWxzZSB3aWxsIGJlIGNvbXBvc2VkIGFjY29yZGluZyB0byAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgTkZDIHJ1bGVzLgorICAgICAqIEByZXR1cm4gU3RyaW5nICAgIFRoZSBjb21wb3NlZCBzdHJpbmcgICAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLyAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXBvc2UoU3RyaW5nIHN0ciwgYm9vbGVhbiBjb21wYXQpeworICAgICAgICBjaGFyW10gZGVzdCA9IG5ldyBjaGFyW3N0ci5sZW5ndGgoKSpNQVhfQlVGX1NJWkVfQ09NUE9TRV07CisgICAgICAgIGludCBkZXN0U2l6ZT0wOworICAgICAgICBjaGFyW10gc3JjID0gc3RyLnRvQ2hhckFycmF5KCk7CisgICAgICAgIGZvcig7Oyl7CisgICAgICAgICAgICBkZXN0U2l6ZT1Ob3JtYWxpemVySW1wbC5jb21wb3NlKHNyYywwLHNyYy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsMCxkZXN0Lmxlbmd0aCxjb21wYXQpOworICAgICAgICAgICAgaWYoZGVzdFNpemU8PWRlc3QubGVuZ3RoKXsKKwkJICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhkZXN0LDAsZGVzdFNpemUpOyAgCisgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICBkZXN0ID0gbmV3IGNoYXJbZGVzdFNpemVdOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqICBDb21wb3NlIGEgc3RyaW5nLgorICAgICAqIFRoZSBzdHJpbmcgd2lsbCBiZSBjb21wb3NlZCB0byBhY2NvcmRpbmcgdGhlIHRoZSBzcGVjaWZpZWQgbW9kZS4KKyAgICAgKiBAcGFyYW0gc3RyICAgICAgICBUaGUgc3RyaW5nIHRvIGNvbXBvc2UuCisgICAgICogQHBhcmFtIGNvbXBhdCAgICAgSWYgdHJ1ZSB0aGUgc3RyaW5nIHdpbGwgYmUgY29tcG9zZWQgYWNjb2RpbmcgdG8gCisgICAgICogICAgICAgICAgICAgICAgICAgIE5GS0MgcnVsZXMgYW5kIGlmIGZhbHNlIHdpbGwgYmUgY29tcG9zZWQgYWNjb3JkaW5nIHRvIAorICAgICAqICAgICAgICAgICAgICAgICAgICBORkMgcnVsZXMuCisgICAgICogQHBhcmFtIG9wdGlvbnMgICAgVGhlIG9ubHkgcmVjb2duaXplZCBvcHRpb24gaXMgSUdOT1JFX0hBTkdVTAorICAgICAqIEByZXR1cm4gU3RyaW5nICAgIFRoZSBjb21wb3NlZCBzdHJpbmcgICAKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtQXVnLTMxLiAKKyAgICAgKiAgICAgICAgICAgICAgVXNlIGNvbXBvc2UoU3RyaW5nIHN0ciwgYm9vbGVhbiBjb21wYXQpLgorICAgICAqLyAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXBvc2UoU3RyaW5nIHN0ciwgYm9vbGVhbiBjb21wYXQsIGludCBvcHRpb25zKXsKKyAgICAgICAgcmV0dXJuIGNvbXBvc2Uoc3RyLGNvbXBhdCk7ICAgICAgICAgICAgICAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbXBvc2UgYSBzdHJpbmcuCisgICAgICogVGhlIHN0cmluZyB3aWxsIGJlIGNvbXBvc2VkIHRvIGFjY29yZGluZyB0aGUgdGhlIHNwZWNpZmllZCBtb2RlLgorICAgICAqIEBwYXJhbSBzb3VyY2UgVGhlIGNoYXIgYXJyYXkgdG8gY29tcG9zZS4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IEEgY2hhciBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgbm9ybWFsaXplZCB0ZXh0LgorICAgICAqIEBwYXJhbSBjb21wYXQgSWYgdHJ1ZSB0aGUgY2hhciBhcnJheSB3aWxsIGJlIGNvbXBvc2VkIGFjY29kaW5nIHRvIAorICAgICAqICAgICAgICAgICAgICAgIE5GS0MgcnVsZXMgYW5kIGlmIGZhbHNlIHdpbGwgYmUgY29tcG9zZWQgYWNjb3JkaW5nIHRvIAorICAgICAqICAgICAgICAgICAgICAgIE5GQyBydWxlcy4KKyAgICAgKiBAcmV0dXJuIGludCAgIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7aWYgZ3JlYXRlciB0aGFuIGxlbmd0aCBvZiAKKyAgICAgKiAgICAgICAgICAgICAgICByZXN1bHQsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgdGFyZ2V0Lmxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIAorICAgICAqICAgICAgICAgICAgIHJlcXVpcmVkIGxlbmd0aAorICAgICAqIEBkcmFmdCBJQ1UgMi4yICAKKyAgICAgKi8gICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGludCBjb21wb3NlKGNoYXJbXSBzb3VyY2UsY2hhcltdIHRhcmdldCwgYm9vbGVhbiBjb21wYXQpeworICAgICAgICBpbnQgbGVuZ3RoID0gTm9ybWFsaXplckltcGwuY29tcG9zZShzb3VyY2UsMCxzb3VyY2UubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsMCx0YXJnZXQubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXQpOworCQlpZihsZW5ndGg8PXRhcmdldC5sZW5ndGgpeworCQkgICAgcmV0dXJuIGxlbmd0aDsKKwkJfWVsc2V7CisJCSAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihJbnRlZ2VyLnRvU3RyaW5nKGxlbmd0aCkpOworCQl9IAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb21wb3NlIGEgc3RyaW5nLgorICAgICAqIFRoZSBzdHJpbmcgd2lsbCBiZSBjb21wb3NlZCB0byBhY2NvcmRpbmcgdGhlIHRoZSBzcGVjaWZpZWQgbW9kZS4KKyAgICAgKiBAcGFyYW0gc3JjICAgICAgIFRoZSBjaGFyIGFycmF5IHRvIGNvbXBvc2UuCisgICAgICogQHBhcmFtIHNyY1N0YXJ0ICBTdGFydCBpbmRleCBvZiB0aGUgc291cmNlCisgICAgICogQHBhcmFtIHNyY0xpbWl0ICBMaW1pdCBpbmRleCBvZiB0aGUgc291cmNlCisgICAgICogQHBhcmFtIGRlc3QgICAgICBUaGUgY2hhciBidWZmZXIgdG8gZmlsbCBpbgorICAgICAqIEBwYXJhbSBkZXN0U3RhcnQgU3RhcnQgaW5kZXggb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAgCisgICAgICogQHBhcmFtIGRlc3RMaW1pdCBFbmQgaW5kZXggb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBjb21wYXQgSWYgdHJ1ZSB0aGUgY2hhciBhcnJheSB3aWxsIGJlIGNvbXBvc2VkIGFjY29kaW5nIHRvIAorICAgICAqICAgICAgICAgICAgICAgIE5GS0MgcnVsZXMgYW5kIGlmIGZhbHNlIHdpbGwgYmUgY29tcG9zZWQgYWNjb3JkaW5nIHRvIAorICAgICAqICAgICAgICAgICAgICAgIE5GQyBydWxlcy4KKyAgICAgKiBAcmV0dXJuIGludCAgIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7aWYgZ3JlYXRlciB0aGFuIGxlbmd0aCBvZiAKKyAgICAgKiAgICAgICAgICAgICAgICByZXN1bHQsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgdGFyZ2V0Lmxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIAorICAgICAqICAgICAgICAgICAgIHJlcXVpcmVkIGxlbmd0aCAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMiAKKyAgICAgKi8gICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGludCBjb21wb3NlKGNoYXJbXSBzcmMsaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCxpbnQgZGVzdFN0YXJ0LCBpbnQgZGVzdExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBjb21wYXQpeworICAgICAgICBpbnQgbGVuZ3RoID0gTm9ybWFsaXplckltcGwuY29tcG9zZShzcmMsc3JjU3RhcnQsc3JjTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsZGVzdFN0YXJ0LGRlc3RMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0KTsKKyAgICAgICAgaWYobGVuZ3RoPD0oZGVzdExpbWl0LWRlc3RTdGFydCkpeworICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICAgICAgfWVsc2V7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihJbnRlZ2VyLnRvU3RyaW5nKGxlbmd0aCkpOworICAgICAgICB9IAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0JVRl9TSVpFX0NPTVBPU0UgPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfQlVGX1NJWkVfREVDT01QT1NFID0gMzsKKyAgICAKKyAgICAvKioKKyAgICAgKiBEZWNvbXBvc2UgYSBzdHJpbmcuCisgICAgICogVGhlIHN0cmluZyB3aWxsIGJlIGRlY29tcG9zZWQgdG8gYWNjb3JkaW5nIHRoZSB0aGUgc3BlY2lmaWVkIG1vZGUuCisgICAgICogQHBhcmFtIHN0ciAgICAgICBUaGUgc3RyaW5nIHRvIGRlY29tcG9zZS4KKyAgICAgKiBAcGFyYW0gY29tcGF0ICAgIElmIHRydWUgdGhlIHN0cmluZyB3aWxsIGJlIGRlY29tcG9zZWQgYWNjb2RpbmcgdG8gTkZLRCAKKyAgICAgKiAgICAgICAgICAgICAgICAgICBydWxlcyBhbmQgaWYgZmFsc2Ugd2lsbCBiZSBkZWNvbXBvc2VkIGFjY29yZGluZyB0byBORkQgCisgICAgICogICAgICAgICAgICAgICAgICAgcnVsZXMuCisgICAgICogQHJldHVybiBTdHJpbmcgICBUaGUgZGVjb21wb3NlZCBzdHJpbmcgIAorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLyAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGRlY29tcG9zZShTdHJpbmcgc3RyLCBib29sZWFuIGNvbXBhdCl7CisgICAgICAgIGNoYXJbXSBkZXN0ID0gbmV3IGNoYXJbc3RyLmxlbmd0aCgpKk1BWF9CVUZfU0laRV9ERUNPTVBPU0VdOworICAgICAgICBpbnRbXSB0cmFpbENDID0gbmV3IGludFsxXTsKKyAgICAgICAgaW50IGRlc3RTaXplPTA7CisgICAgICAgIGZvcig7Oyl7CisgICAgICAgICAgICBkZXN0U2l6ZT1Ob3JtYWxpemVySW1wbC5kZWNvbXBvc2Uoc3RyLnRvQ2hhckFycmF5KCksMCxzdHIubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwwLGRlc3QubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdCx0cmFpbENDKTsKKyAgICAgICAgICAgIGlmKGRlc3RTaXplPD1kZXN0Lmxlbmd0aCl7CisJCSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoZGVzdCwwLGRlc3RTaXplKTsgCisgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICBkZXN0ID0gbmV3IGNoYXJbZGVzdFNpemVdOworICAgICAgICAgICAgfQorICAgICAgICB9IAorCSAgICAgICAgICAgICAgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBEZWNvbXBvc2UgYSBzdHJpbmcuCisgICAgICogVGhlIHN0cmluZyB3aWxsIGJlIGRlY29tcG9zZWQgdG8gYWNjb3JkaW5nIHRoZSB0aGUgc3BlY2lmaWVkIG1vZGUuCisgICAgICogQHBhcmFtIHN0ciAgICAgVGhlIHN0cmluZyB0byBkZWNvbXBvc2UuCisgICAgICogQHBhcmFtIGNvbXBhdCAgSWYgdHJ1ZSB0aGUgc3RyaW5nIHdpbGwgYmUgZGVjb21wb3NlZCBhY2NvZGluZyB0byBORktEIAorICAgICAqICAgICAgICAgICAgICAgICBydWxlcyBhbmQgaWYgZmFsc2Ugd2lsbCBiZSBkZWNvbXBvc2VkIGFjY29yZGluZyB0byBORkQgCisgICAgICogICAgICAgICAgICAgICAgIHJ1bGVzLgorICAgICAqIEByZXR1cm4gU3RyaW5nIFRoZSBkZWNvbXBvc2VkIHN0cmluZyAKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtQXVnLTMxLiAKKyAgICAgKiAgICAgICAgICAgICAgVXNlIGRlY29tcG9zZShTdHJpbmcgc3RyLCBib29sZWFuIGNvbXBhdCkuCisgICAgICovICAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZGVjb21wb3NlKFN0cmluZyBzdHIsIGJvb2xlYW4gY29tcGF0LCBpbnQgb3B0aW9ucyl7CisgICAgICAgIHJldHVybiBkZWNvbXBvc2Uoc3RyLGNvbXBhdCk7ICAgICAgICAgICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRGVjb21wb3NlIGEgc3RyaW5nLgorICAgICAqIFRoZSBzdHJpbmcgd2lsbCBiZSBkZWNvbXBvc2VkIHRvIGFjY29yZGluZyB0aGUgdGhlIHNwZWNpZmllZCBtb2RlLgorICAgICAqIEBwYXJhbSBzb3VyY2UgVGhlIGNoYXIgYXJyYXkgdG8gZGVjb21wb3NlLgorICAgICAqIEBwYXJhbSB0YXJnZXQgQSBjaGFyIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBub3JtYWxpemVkIHRleHQuCisgICAgICogQHBhcmFtIGNvbXBhdCBJZiB0cnVlIHRoZSBjaGFyIGFycmF5IHdpbGwgYmUgZGVjb21wb3NlZCBhY2NvZGluZyB0byBORktEIAorICAgICAqICAgICAgICAgICAgICAgIHJ1bGVzIGFuZCBpZiBmYWxzZSB3aWxsIGJlIGRlY29tcG9zZWQgYWNjb3JkaW5nIHRvIAorICAgICAqICAgICAgICAgICAgICAgIE5GRCBydWxlcy4KKyAgICAgKiBAcmV0dXJuIGludCAgIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7aWYgZ3JlYXRlciB0aGFuIGxlbmd0aCBvZiAKKyAgICAgKiAgICAgICAgICAgICAgICByZXN1bHQsdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiB0aGUgdGFyZ2V0IGNhcGFjaXR5IGlzIGxlc3MgdGhhbgorICAgICAqICAgICAgICAgICAgIHRoZSByZXF1aXJlZCBsZW5ndGggICAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGRlY29tcG9zZShjaGFyW10gc291cmNlLGNoYXJbXSB0YXJnZXQsIGJvb2xlYW4gY29tcGF0KXsKKyAgICAgICAgaW50W10gdHJhaWxDQyA9IG5ldyBpbnRbMV07CisgICAgICAgIGludCBsZW5ndGggPSBOb3JtYWxpemVySW1wbC5kZWNvbXBvc2Uoc291cmNlLDAsc291cmNlLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsMCx0YXJnZXQubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdCx0cmFpbENDKTsKKwkJaWYobGVuZ3RoPD10YXJnZXQubGVuZ3RoKXsKKwkJICAgIHJldHVybiBsZW5ndGg7CisJCX1lbHNleworCQkgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oSW50ZWdlci50b1N0cmluZyhsZW5ndGgpKTsKKwkJfSAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRGVjb21wb3NlIGEgc3RyaW5nLgorICAgICAqIFRoZSBzdHJpbmcgd2lsbCBiZSBkZWNvbXBvc2VkIHRvIGFjY29yZGluZyB0aGUgdGhlIHNwZWNpZmllZCBtb2RlLgorICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIGNoYXIgYXJyYXkgdG8gY29tcG9zZS4KKyAgICAgKiBAcGFyYW0gc3JjU3RhcnQgIFN0YXJ0IGluZGV4IG9mIHRoZSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gc3JjTGltaXQgIExpbWl0IGluZGV4IG9mIHRoZSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gZGVzdCAgICAgIFRoZSBjaGFyIGJ1ZmZlciB0byBmaWxsIGluCisgICAgICogQHBhcmFtIGRlc3RTdGFydCBTdGFydCBpbmRleCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyICAKKyAgICAgKiBAcGFyYW0gZGVzdExpbWl0IEVuZCBpbmRleCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIGNvbXBhdCBJZiB0cnVlIHRoZSBjaGFyIGFycmF5IHdpbGwgYmUgZGVjb21wb3NlZCBhY2NvZGluZyB0byBORktEIAorICAgICAqICAgICAgICAgICAgICAgIHJ1bGVzIGFuZCBpZiBmYWxzZSB3aWxsIGJlIGRlY29tcG9zZWQgYWNjb3JkaW5nIHRvIAorICAgICAqICAgICAgICAgICAgICAgIE5GRCBydWxlcy4KKyAgICAgKiBAcmV0dXJuIGludCAgIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7aWYgZ3JlYXRlciB0aGFuIGxlbmd0aCBvZiAKKyAgICAgKiAgICAgICAgICAgICAgICByZXN1bHQsdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiB0aGUgdGFyZ2V0IGNhcGFjaXR5IGlzIGxlc3MgdGhhbgorICAgICAqICAgICAgICAgICAgIHRoZSByZXF1aXJlZCBsZW5ndGggIAorICAgICAqIEBkcmFmdCBJQ1UgMi4yIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGRlY29tcG9zZShjaGFyW10gc3JjLGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCxpbnQgZGVzdFN0YXJ0LCBpbnQgZGVzdExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbXBhdCl7CisgICAgICAgIGludFtdIHRyYWlsQ0MgPSBuZXcgaW50WzFdOworICAgICAgICBpbnQgbGVuZ3RoID0gTm9ybWFsaXplckltcGwuZGVjb21wb3NlKHNyYyxzcmNTdGFydCxzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LGRlc3RTdGFydCxkZXN0TGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0LHRyYWlsQ0MpOworICAgICAgICBpZihsZW5ndGg8PShkZXN0TGltaXQtZGVzdFN0YXJ0KSl7CisgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKEludGVnZXIudG9TdHJpbmcobGVuZ3RoKSk7CisgICAgICAgIH0gCisgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbWFrZUZDRChTdHJpbmcgc3JjKXsKKyAgICAgICAgaW50IHNyY0xlbiA9IHNyYy5sZW5ndGgoKTsKKyAgICAgICAgY2hhcltdIGRlc3QgPSBuZXcgY2hhcltNQVhfQlVGX1NJWkVfREVDT01QT1NFKnNyY0xlbl07CisgICAgICAgIGludCBsZW5ndGggPSAwOworICAgICAgICBmb3IoOzspeworICAgICAgICAgICAgbGVuZ3RoID0gTm9ybWFsaXplckltcGwubWFrZUZDRChzcmMudG9DaGFyQXJyYXkoKSwwLHNyY0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwwLGRlc3QubGVuZ3RoKTsKKyAgICAgICAgICAgIGlmKGxlbmd0aCA8PSBkZXN0Lmxlbmd0aCl7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoZGVzdCwwLGxlbmd0aCk7CisgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICBkZXN0ID0gbmV3IGNoYXJbbGVuZ3RoXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBOb3JtYWxpemVzIGEgPHR0PlN0cmluZzwvdHQ+IHVzaW5nIHRoZSBnaXZlbiBub3JtYWxpemF0aW9uIG9wZXJhdGlvbi4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgPHR0Pm9wdGlvbnM8L3R0PiBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIG9wdGlvbmFsCisgICAgICogPHR0Pk5vcm1hbGl6ZXI8L3R0PiBmZWF0dXJlcyBhcmUgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBvcGVyYXRpb24uCisgICAgICogQ3VycmVudGx5IHRoZSBvbmx5IGF2YWlsYWJsZSBvcHRpb24gaXMge0BsaW5rICNJR05PUkVfSEFOR1VMfS4KKyAgICAgKiBJZiB5b3Ugd2FudCB0aGUgZGVmYXVsdCBiZWhhdmlvciBjb3JyZXNwb25kaW5nIHRvIG9uZSBvZiB0aGUgc3RhbmRhcmQKKyAgICAgKiBVbmljb2RlIE5vcm1hbGl6YXRpb24gRm9ybXMsIHVzZSAwIGZvciB0aGlzIGFyZ3VtZW50LgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBzdHIgICAgICAgdGhlIGlucHV0IHN0cmluZyB0byBiZSBub3JtYWxpemVkLgorICAgICAqCisgICAgICogQHBhcmFtIGFNb2RlICAgICB0aGUgbm9ybWFsaXphdGlvbiBtb2RlCisgICAgICoKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyAgIHRoZSBvcHRpb25hbCBmZWF0dXJlcyB0byBiZSBlbmFibGVkLgorICAgICAqIEBkZXByZWNhdGVkICAgICBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtQXVnLTMxLiAKKyAgICAgKiAgICAgICAgICAgICAgICAgIFVzZSBub3JtYWxpemUoU3RyaW5nIHN0ciwgTW9kZSBtb2RlKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHN0ciwgTW9kZSBtb2RlLCBpbnQgb3B0aW9ucyl7CisgICAgICAgIHJldHVybiBub3JtYWxpemUoc3RyLG1vZGUpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBOb3JtYWxpemUgYSBzdHJpbmcuCisgICAgICogVGhlIHN0cmluZyB3aWxsIGJlIG5vcm1hbGl6ZWQgYWNjb3JkaW5nIHRoZSB0aGUgc3BlY2lmaWVkIG5vcm1hbGl6YXRpb24gCisgICAgICogbW9kZSBhbmQgb3B0aW9ucy4KKyAgICAgKiBAcGFyYW0gc291cmNlICAgICBUaGUgc3RyaW5nIHRvIG5vcm1hbGl6ZS4KKyAgICAgKiBAcGFyYW0gbW9kZSAgICAgICBUaGUgbm9ybWFsaXphdGlvbiBtb2RlOyBvbmUgb2YgTm9ybWFsaXplci5OT05FLCAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5ORkQsIE5vcm1hbGl6ZXIuTkZDLCBOb3JtYWxpemVyLk5GS0MsIAorICAgICAqICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk5GS0QsIE5vcm1hbGl6ZXIuREVGQVVMVAorICAgICAqIEByZXR1cm4gU3RyaW5nICAgIFRoZSBub3JtYWxpemVkIHN0cmluZworICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICogICAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBub3JtYWxpemUoIFN0cmluZyBzcmMsTW9kZSBtb2RlKXsKKyAgICAgICAgcmV0dXJuIG1vZGUubm9ybWFsaXplKHNyYyk7ICAgIAorICAgIH0KKyAgICAvKioKKyAgICAgKiBOb3JtYWxpemUgYSBzdHJpbmcuCisgICAgICogVGhlIHN0cmluZyB3aWxsIGJlIG5vcm1hbGl6ZWQgYWNjb3JkaW5nIHRoZSB0aGUgc3BlY2lmaWVkIG5vcm1hbGl6YXRpb24gCisgICAgICogbW9kZSBhbmQgb3B0aW9ucy4KKyAgICAgKiBAcGFyYW0gc291cmNlIFRoZSBjaGFyIGFycmF5IHRvIG5vcm1hbGl6ZS4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IEEgY2hhciBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgbm9ybWFsaXplZCB0ZXh0LgorICAgICAqIEBwYXJhbSBtb2RlICAgVGhlIG5vcm1hbGl6YXRpb24gbW9kZTsgb25lIG9mIE5vcm1hbGl6ZXIuTk9ORSwgCisgICAgICogICAgICAgICAgICAgICAgTm9ybWFsaXplci5ORkQsIE5vcm1hbGl6ZXIuTkZDLCBOb3JtYWxpemVyLk5GS0MsIAorICAgICAqICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZLRCwgTm9ybWFsaXplci5ERUZBVUxUCisgICAgICogQHJldHVybiBpbnQgICBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkO2lmIGdyZWF0ZXIgdGhhbiBsZW5ndGggb2YgCisgICAgICogICAgICAgICAgICAgICAgcmVzdWx0LCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisgICAgICogQGV4Y2VwdGlvbiAgICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIHRoZSB0YXJnZXQgY2FwYWNpdHkgaXMgbGVzcyAKKyAgICAgKiAgICAgICAgICAgICAgICB0aGFuIHRoZSByZXF1aXJlZCBsZW5ndGgKKyAgICAgKiBAZHJhZnQgSUNVIDIuMiAgICAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgbm9ybWFsaXplKGNoYXJbXSBzb3VyY2UsY2hhcltdIHRhcmdldCwgTW9kZSAgbW9kZSl7CisJCWludCBsZW5ndGggPSBub3JtYWxpemUoc291cmNlLDAsc291cmNlLmxlbmd0aCx0YXJnZXQsMCx0YXJnZXQubGVuZ3RoLG1vZGUpOworCQlpZihsZW5ndGg8PXRhcmdldC5sZW5ndGgpeworCQkgICAgcmV0dXJuIGxlbmd0aDsKKwkJfWVsc2V7CisJCSAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihJbnRlZ2VyLnRvU3RyaW5nKGxlbmd0aCkpOworCQl9IAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBOb3JtYWxpemUgYSBzdHJpbmcuCisgICAgICogVGhlIHN0cmluZyB3aWxsIGJlIG5vcm1hbGl6ZWQgYWNjb3JkaW5nIHRoZSB0aGUgc3BlY2lmaWVkIG5vcm1hbGl6YXRpb24KKyAgICAgKiBtb2RlIGFuZCBvcHRpb25zLgorICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIGNoYXIgYXJyYXkgdG8gY29tcG9zZS4KKyAgICAgKiBAcGFyYW0gc3JjU3RhcnQgIFN0YXJ0IGluZGV4IG9mIHRoZSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gc3JjTGltaXQgIExpbWl0IGluZGV4IG9mIHRoZSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gZGVzdCAgICAgIFRoZSBjaGFyIGJ1ZmZlciB0byBmaWxsIGluCisgICAgICogQHBhcmFtIGRlc3RTdGFydCBTdGFydCBpbmRleCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyICAKKyAgICAgKiBAcGFyYW0gZGVzdExpbWl0IEVuZCBpbmRleCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG1vZGUgICAgICBUaGUgbm9ybWFsaXphdGlvbiBtb2RlOyBvbmUgb2YgTm9ybWFsaXplci5OT05FLCAKKyAgICAgKiAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk5GRCwgTm9ybWFsaXplci5ORkMsIE5vcm1hbGl6ZXIuTkZLQywgCisgICAgICogICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5ORktELCBOb3JtYWxpemVyLkRFRkFVTFQKKyAgICAgKiBAcmV0dXJuIGludCAgICAgIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7aWYgZ3JlYXRlciB0aGFuIGxlbmd0aCBvZiAKKyAgICAgKiAgICAgICAgICAgICAgICAgICByZXN1bHQsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAgICAgKiBAZXhjZXB0aW9uICAgICAgIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgdGhlIHRhcmdldCBjYXBhY2l0eSBpcyAKKyAgICAgKiAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIHJlcXVpcmVkIGxlbmd0aAorICAgICAqIEBkcmFmdCBJQ1UgMi4yICAgICAKKyAgICAgKi8gICAgICAgCisgICAgcHVibGljIHN0YXRpYyBpbnQgbm9ybWFsaXplKGNoYXJbXSBzcmMsaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gZGVzdCxpbnQgZGVzdFN0YXJ0LCBpbnQgZGVzdExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlICBtb2RlKXsKKyAgICAgICAgaW50IGxlbmd0aCA9IG1vZGUubm9ybWFsaXplKHNyYyxzcmNTdGFydCxzcmNMaW1pdCxkZXN0LGRlc3RTdGFydCxkZXN0TGltaXQpOworICAgICAgIAorICAgICAgICBpZihsZW5ndGg8PShkZXN0TGltaXQtZGVzdFN0YXJ0KSl7CisgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKEludGVnZXIudG9TdHJpbmcobGVuZ3RoKSk7CisgICAgICAgIH0gCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIE5vcm1hbGl6ZSBhIGNvZGVwb2ludCBhY2NvZGluZyB0byB0aGUgZ2l2ZW4gbW9kZQorICAgICAqIEBwYXJhbSBjaGFyMzIgICAgVGhlIGlucHV0IHN0cmluZyB0byBiZSBub3JtYWxpemVkLgorICAgICAqIEBwYXJhbSBhTW9kZSAgICAgVGhlIG5vcm1hbGl6YXRpb24gbW9kZQorICAgICAqIEByZXR1cm4gU3RyaW5nICAgVGhlIG5vcm1hbGl6ZWQgc3RyaW5nCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICAvLyBUT0RPOiBhY3R1YWxseSBkbyB0aGUgb3B0aW1pemF0aW9uIHdoZW4gdGhlIGd1dHMgb2YgTm9ybWFsaXplciBhcmUgCisgICAgLy8gdXBncmFkZWQgLS1oYXMganVzdCBkdW1iIGltcGxlbWVudGF0aW9uIGZvciBub3cKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBub3JtYWxpemUoaW50IGNoYXIzMiwgTW9kZSBtb2RlKSB7CisgICAgICAgIHJldHVybiBub3JtYWxpemUoVVRGMTYudmFsdWVPZihjaGFyMzIpLCBtb2RlKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kLgorICAgICAqCisgICAgICogQHBhcmFtIHNvdXJjZSAgIHN0cmluZyBmb3IgZGV0ZXJtaW5pbmcgaWYgaXQgaXMgaW4gYSBub3JtYWxpemVkIGZvcm1hdAorICAgICAqIEBwYXJhbSBtb2RlICAgICBub3JtYWxpemF0aW9uIGZvcm1hdCAoTm9ybWFsaXplci5ORkMsTm9ybWFsaXplci5ORkQsICAKKyAgICAgKiAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZLQyxOb3JtYWxpemVyLk5GS0QpCisgICAgICogQHJldHVybiAgICAgICAgIFJldHVybiBjb2RlIHRvIHNwZWNpZnkgaWYgdGhlIHRleHQgaXMgbm9ybWFsaXplZCBvciBub3QgCisgICAgICogICAgICAgICAgICAgICAgICAgICAoTm9ybWFsaXplci5ZRVMsIE5vcm1hbGl6ZXIuTk8gb3IgTm9ybWFsaXplci5NQVlCRSkKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUXVpY2tDaGVja1Jlc3VsdCBxdWlja0NoZWNrKCBTdHJpbmcgc291cmNlLCBNb2RlIG1vZGUpeworCSAgICByZXR1cm4gbW9kZS5xdWlja0NoZWNrKHNvdXJjZS50b0NoYXJBcnJheSgpLDAsc291cmNlLmxlbmd0aCgpLHRydWUpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc291cmNlIEFycmF5IG9mIGNoYXJhY3RlcnMgZm9yIGRldGVybWluaW5nIGlmIGl0IGlzIGluIGEgCisgICAgICogICAgICAgICAgICAgICAgbm9ybWFsaXplZCBmb3JtYXQKKyAgICAgKiBAcGFyYW0gbW9kZSAgIG5vcm1hbGl6YXRpb24gZm9ybWF0IChOb3JtYWxpemVyLk5GQyxOb3JtYWxpemVyLk5GRCwgIAorICAgICAqICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXIuTkZLQyxOb3JtYWxpemVyLk5GS0QpCisgICAgICogQHJldHVybiAgICAgICBSZXR1cm4gY29kZSB0byBzcGVjaWZ5IGlmIHRoZSB0ZXh0IGlzIG5vcm1hbGl6ZWQgb3Igbm90IAorICAgICAqICAgICAgICAgICAgICAgIChOb3JtYWxpemVyLllFUywgTm9ybWFsaXplci5OTyBvciBOb3JtYWxpemVyLk1BWUJFKQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBRdWlja0NoZWNrUmVzdWx0IHF1aWNrQ2hlY2soY2hhcltdIHNvdXJjZSwgTW9kZSBtb2RlKXsKKyAgICAgICAgcmV0dXJuIG1vZGUucXVpY2tDaGVjayhzb3VyY2UsMCxzb3VyY2UubGVuZ3RoLHRydWUpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtaW5nIHF1aWNrIGNoZWNrIG9uIGEgc3RyaW5nLCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgc3RyaW5nIGlzIAorICAgICAqIGluIGEgcGFydGljdWxhciBub3JtYWxpemF0aW9uIGZvcm1hdC4KKyAgICAgKiBUaHJlZSB0eXBlcyBvZiByZXN1bHQgY2FuIGJlIHJldHVybmVkIE5vcm1hbGl6ZXIuWUVTLCBOb3JtYWxpemVyLk5PIG9yCisgICAgICogTm9ybWFsaXplci5NQVlCRS4gUmVzdWx0IE5vcm1hbGl6ZXIuWUVTIGluZGljYXRlcyB0aGF0IHRoZSBhcmd1bWVudAorICAgICAqIHN0cmluZyBpcyBpbiB0aGUgZGVzaXJlZCBub3JtYWxpemVkIGZvcm1hdCwgTm9ybWFsaXplci5OTyBkZXRlcm1pbmVzIHRoYXQKKyAgICAgKiBhcmd1bWVudCBzdHJpbmcgaXMgbm90IGluIHRoZSBkZXNpcmVkIG5vcm1hbGl6ZWQgZm9ybWF0LiBBIAorICAgICAqIE5vcm1hbGl6ZXIuTUFZQkUgcmVzdWx0IGluZGljYXRlcyB0aGF0IGEgbW9yZSB0aG9yb3VnaCBjaGVjayBpcyByZXF1aXJlZCwgCisgICAgICogdGhlIHVzZXIgbWF5IGhhdmUgdG8gcHV0IHRoZSBzdHJpbmcgaW4gaXRzIG5vcm1hbGl6ZWQgZm9ybSBhbmQgY29tcGFyZSAKKyAgICAgKiB0aGUgcmVzdWx0cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzb3VyY2UgICAgc3RyaW5nIGZvciBkZXRlcm1pbmluZyBpZiBpdCBpcyBpbiBhIG5vcm1hbGl6ZWQgZm9ybWF0CisgICAgICogQHBhcmFtIHN0YXJ0ICAgICB0aGUgc3RhcnQgaW5kZXggb2YgdGhlIHNvdXJjZQorICAgICAqIEBwYXJhbSBsaW1pdCAgICAgdGhlIGxpbWl0IGluZGV4IG9mIHRoZSBzb3VyY2UgaXQgaXMgZXF1YWwgdG8gdGhlIGxlbmd0aAorICAgICAqIEBwYXJhbSBtb2RlICAgICAgbm9ybWFsaXphdGlvbiBmb3JtYXQgKE5vcm1hbGl6ZXIuTkZDLE5vcm1hbGl6ZXIuTkZELCAgCisgICAgICogICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5ORktDLE5vcm1hbGl6ZXIuTkZLRCkKKyAgICAgKiBAcmV0dXJuICAgICAgICAgIFJldHVybiBjb2RlIHRvIHNwZWNpZnkgaWYgdGhlIHRleHQgaXMgbm9ybWFsaXplZCBvciBub3QgCisgICAgICogICAgICAgICAgICAgICAgICAgKE5vcm1hbGl6ZXIuWUVTLCBOb3JtYWxpemVyLk5PIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgTm9ybWFsaXplci5NQVlCRSkKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworCisgICAgcHVibGljIHN0YXRpYyBRdWlja0NoZWNrUmVzdWx0IHF1aWNrQ2hlY2soY2hhcltdIHNvdXJjZSxpbnQgc3RhcnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW1pdCwgTW9kZSBtb2RlKXsgICAgCQorCSAgICByZXR1cm4gbW9kZS5xdWlja0NoZWNrKHNvdXJjZSxzdGFydCxsaW1pdCx0cnVlKTsKKyAgICB9CisgICAgCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyAoZm9yIG5vdykKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgICAgLyoqCisJICogVGVzdCBpZiBhIHN0cmluZyBpcyBpbiBhIGdpdmVuIG5vcm1hbGl6YXRpb24gZm9ybS4KKwkgKiBUaGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHNvdXJjZS5lcXVhbHMobm9ybWFsaXplKHNvdXJjZSwgbW9kZSkpLgorCSAqCisJICogVW5saWtlIHF1aWNrQ2hlY2soKSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZGVmaW5pdGl2ZSByZXN1bHQsCisJICogbmV2ZXIgYSAibWF5YmUiLgorCSAqIEZvciBORkQsIE5GS0QsIGFuZCBGQ0QsIGJvdGggZnVuY3Rpb25zIHdvcmsgZXhhY3RseSB0aGUgc2FtZS4KKwkgKiBGb3IgTkZDIGFuZCBORktDIHdoZXJlIHF1aWNrQ2hlY2sgbWF5IHJldHVybiAibWF5YmUiLCB0aGlzIGZ1bmN0aW9uIHdpbGwKKwkgKiBwZXJmb3JtIGZ1cnRoZXIgdGVzdHMgdG8gYXJyaXZlIGF0IGEgdHJ1ZS9mYWxzZSByZXN1bHQuCisgICAgICogQHBhcmFtIHNyYyAgICAgICBUaGUgaW5wdXQgYXJyYXkgb2YgY2hhcmFjdGVycyB0byBiZSBjaGVja2VkIHRvIHNlZSBpZiAKKyAgICAgKiAgICAgICAgICAgICAgICAgICBpdCBpcyBub3JtYWxpemVkCisgICAgICogQHBhcmFtIHN0YXJ0ICAgICBUaGUgc3RyYXJ0IGluZGV4IGluIHRoZSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gbGltaXQgICAgIFRoZSBsaW1pdCBpbmRleCBpbiB0aGUgc291cmNlCisgICAgICogQHBhcmFtIGFNb2RlICAgICB0aGUgbm9ybWFsaXphdGlvbiBtb2RlCisgICAgICogQHJldHVybiBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgc291cmNlIHN0cmluZyBpcyBpbiB0aGUKKyAgICAgKiAgICAgICAgICJtb2RlIiBub3JtYWxpemF0aW9uIGZvcm0KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vcm1hbGl6ZWQoY2hhcltdIHNyYyxpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsIE1vZGUgbW9kZSkgeworICAgICAgICByZXR1cm4gKG1vZGUucXVpY2tDaGVjayhzcmMsc3RhcnQsbGltaXQsZmFsc2UpPT1ZRVMpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBNZXRob2QKKyAgICAgKiBAcGFyYW0gc3RyICAgICAgIHRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY2hlY2tlZCB0byBzZWUgaWYgaXQgaXMgCisgICAgICogICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZAorICAgICAqIEBwYXJhbSBhTW9kZSAgICAgdGhlIG5vcm1hbGl6YXRpb24gbW9kZQorICAgICAqIEBzZWUgI2lzTm9ybWFsaXplZAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9ybWFsaXplZChTdHJpbmcgc3RyLCBNb2RlIG1vZGUpIHsKKyAgICAgICAgcmV0dXJuIChtb2RlLnF1aWNrQ2hlY2soc3RyLnRvQ2hhckFycmF5KCksMCxzdHIubGVuZ3RoKCksZmFsc2UpPT1ZRVMpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBNZXRob2QKKyAgICAgKiBAcGFyYW0gY2hhcjMyICAgIHRoZSBpbnB1dCBjb2RlIHBvaW50IHRvIGJlIGNoZWNrZWQgdG8gc2VlIGlmIGl0IGlzIAorICAgICAqICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQKKyAgICAgKiBAcGFyYW0gYU1vZGUgICAgIHRoZSBub3JtYWxpemF0aW9uIG1vZGUKKyAgICAgKiBAc2VlICNpc05vcm1hbGl6ZWQKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIC8vIFRPRE86IGFjdHVhbGx5IGRvIHRoZSBvcHRpbWl6YXRpb24gd2hlbiB0aGUgZ3V0cyBvZiBOb3JtYWxpemVyIGFyZSAKKyAgICAvLyB1cGdyYWRlZCAtLWhhcyBqdXN0IGR1bWIgaW1wbGVtZW50YXRpb24gZm9yIG5vdworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vcm1hbGl6ZWQoaW50IGNoYXIzMiwgTW9kZSBtb2RlKSB7CisgICAgICAgIHJldHVybiBpc05vcm1hbGl6ZWQoVVRGMTYudmFsdWVPZihjaGFyMzIpLCBtb2RlKTsKKyAgICB9CisgICAgIAorICAgIC8qKgorICAgICAqIENvbXBhcmUgdHdvIHN0cmluZ3MgZm9yIGNhbm9uaWNhbCBlcXVpdmFsZW5jZS4KKyAgICAgKiBGdXJ0aGVyIG9wdGlvbnMgaW5jbHVkZSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24gYW5kCisgICAgICogY29kZSBwb2ludCBvcmRlciAoYXMgb3Bwb3NlZCB0byBjb2RlIHVuaXQgb3JkZXIpLgorICAgICAqCisgICAgICogQ2Fub25pY2FsIGVxdWl2YWxlbmNlIGJldHdlZW4gdHdvIHN0cmluZ3MgaXMgZGVmaW5lZCBhcyB0aGVpciBub3JtYWxpemVkCisgICAgICogZm9ybXMgKE5GRCBvciBORkMpIGJlaW5nIGlkZW50aWNhbC4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIHN0cmluZ3MgaW5jcmVtZW50YWxseSBpbnN0ZWFkIG9mIG5vcm1hbGl6aW5nCisgICAgICogKGFuZCBvcHRpb25hbGx5IGNhc2UtZm9sZGluZykgYm90aCBzdHJpbmdzIGVudGlyZWx5LAorICAgICAqIGltcHJvdmluZyBwZXJmb3JtYW5jZSBzaWduaWZpY2FudGx5LgorICAgICAqCisgICAgICogQnVsayBub3JtYWxpemF0aW9uIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHRoZSBzdHJpbmdzIGRvIG5vdCBmdWxmaWxsIHRoZSAKKyAgICAgKiBGQ0QgY29uZGl0aW9ucy4gT25seSBpbiB0aGlzIGNhc2UsIGFuZCBvbmx5IGlmIHRoZSBzdHJpbmdzIGFyZSByZWxhdGl2ZWx5IAorICAgICAqIGxvbmcsIGlzIG1lbW9yeSBhbGxvY2F0ZWQgdGVtcG9yYXJpbHkuCisgICAgICogRm9yIEZDRCBzdHJpbmdzIGFuZCBzaG9ydCBub24tRkNEIHN0cmluZ3MgdGhlcmUgaXMgbm8gbWVtb3J5IGFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBTZW1hbnRpY2FsbHksIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAqICAgc3RyY21wW0NvZGVQb2ludE9yZGVyXShmb2xkQ2FzZShORkQoczEpKSwgZm9sZENhc2UoTkZEKHMyKSkpCisgICAgICogd2hlcmUgY29kZSBwb2ludCBvcmRlciBhbmQgZm9sZENhc2UgYXJlIGFsbCBvcHRpb25hbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzMSAgICAgICAgRmlyc3Qgc291cmNlIGNoYXJhY3RlciBhcnJheS4KKyAgICAgKiBAcGFyYW0gczFTdGFydCAgIHN0YXJ0IGluZGV4IG9mIHNvdXJjZQorICAgICAqIEBwYXJhbSBzMUxpbWl0ICAgbGltaXQgb2YgdGhlIHNvdXJjZQorICAgICAqCisgICAgICogQHBhcmFtIHMyICAgICAgICBTZWNvbmQgc291cmNlIGNoYXJhY3RlciBhcnJheS4KKyAgICAgKiBAcGFyYW0gczJTdGFydCAgIHN0YXJ0IGluZGV4IG9mIHRoZSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gczJMaW1pdCAgIGxpbWl0IG9mIHRoZSBzb3VyY2UKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBBIGJpdCBzZXQgb2Ygb3B0aW9uczoKKyAgICAgKiAgIC0gRk9MRF9DQVNFX0RFRkFVTFQgb3IgMCBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnM6CisgICAgICogICAgIENhc2Utc2Vuc2l0aXZlIGNvbXBhcmlzb24gaW4gY29kZSB1bml0IG9yZGVyLCBhbmQgdGhlIGlucHV0IHN0cmluZ3MKKyAgICAgKiAgICAgYXJlIHF1aWNrLWNoZWNrZWQgZm9yIEZDRC4KKyAgICAgKgorICAgICAqICAgLSBJTlBVVF9JU19GQ0QKKyAgICAgKiAgICAgU2V0IGlmIHRoZSBjYWxsZXIga25vd3MgdGhhdCBib3RoIHMxIGFuZCBzMiBmdWxmaWxsIHRoZSBGQ0QgCisgICAgICogICAgIGNvbmRpdGlvbnMuSWYgbm90IHNldCwgdGhlIGZ1bmN0aW9uIHdpbGwgcXVpY2tDaGVjayBmb3IgRkNECisgICAgICogICAgIGFuZCBub3JtYWxpemUgaWYgbmVjZXNzYXJ5LgorICAgICAqCisgICAgICogICAtIENPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUgorICAgICAqICAgICBTZXQgdG8gY2hvb3NlIGNvZGUgcG9pbnQgb3JkZXIgaW5zdGVhZCBvZiBjb2RlIHVuaXQgb3JkZXIKKyAgICAgKgorICAgICAqICAgLSBDT01QQVJFX0lHTk9SRV9DQVNFCisgICAgICogICAgIFNldCB0byBjb21wYXJlIHN0cmluZ3MgY2FzZS1pbnNlbnNpdGl2ZWx5IHVzaW5nIGNhc2UgZm9sZGluZywKKyAgICAgKiAgICAgaW5zdGVhZCBvZiBjYXNlLXNlbnNpdGl2ZWx5LgorICAgICAqICAgICBJZiBzZXQsIHRoZW4gdGhlIGZvbGxvd2luZyBjYXNlIGZvbGRpbmcgb3B0aW9ucyBhcmUgdXNlZC4KKyAgICAgKgorICAgICAqCisgICAgICogQHJldHVybiA8MCBvciAwIG9yID4wIGFzIHVzdWFsIGZvciBzdHJpbmcgY29tcGFyaXNvbnMKKyAgICAgKgorICAgICAqIEBzZWUgI25vcm1hbGl6ZQorICAgICAqIEBzZWUgI0ZDRAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmUoY2hhcltdIHMxLCBpbnQgczFTdGFydCwgaW50IHMxTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIHMyLCBpbnQgczJTdGFydCwgaW50IHMyTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMpeworICAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZXJJbXBsLmNvbXBhcmUoczEsIHMxU3RhcnQsIHMxTGltaXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIsIHMyU3RhcnQsIHMyTGltaXQsIG9wdGlvbnMpOworICAgICB9IAorICAgICAgIAorICAgIC8qKgorICAgICAqIENvbXBhcmUgdHdvIHN0cmluZ3MgZm9yIGNhbm9uaWNhbCBlcXVpdmFsZW5jZS4KKyAgICAgKiBGdXJ0aGVyIG9wdGlvbnMgaW5jbHVkZSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24gYW5kCisgICAgICogY29kZSBwb2ludCBvcmRlciAoYXMgb3Bwb3NlZCB0byBjb2RlIHVuaXQgb3JkZXIpLgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzMSBGaXJzdCBzb3VyY2Ugc3RyaW5nLgorICAgICAqIEBwYXJhbSBzMiBTZWNvbmQgc291cmNlIHN0cmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvcHRpb25zIEEgYml0IHNldCBvZiBvcHRpb25zOgorICAgICAqICAgLSBGT0xEX0NBU0VfREVGQVVMVCBvciAwIGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9uczoKKyAgICAgKiAgICAgQ2FzZS1zZW5zaXRpdmUgY29tcGFyaXNvbiBpbiBjb2RlIHVuaXQgb3JkZXIsIGFuZCB0aGUgaW5wdXQgc3RyaW5ncworICAgICAqICAgICBhcmUgcXVpY2stY2hlY2tlZCBmb3IgRkNELgorICAgICAqCisgICAgICogICAtIElOUFVUX0lTX0ZDRAorICAgICAqICAgICBTZXQgaWYgdGhlIGNhbGxlciBrbm93cyB0aGF0IGJvdGggczEgYW5kIHMyIGZ1bGZpbGwgdGhlIEZDRCAKKyAgICAgKiAgICAgY29uZGl0aW9ucy4gSWYgbm90IHNldCwgdGhlIGZ1bmN0aW9uIHdpbGwgcXVpY2tDaGVjayBmb3IgRkNECisgICAgICogICAgIGFuZCBub3JtYWxpemUgaWYgbmVjZXNzYXJ5LgorICAgICAqCisgICAgICogICAtIENPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUgorICAgICAqICAgICBTZXQgdG8gY2hvb3NlIGNvZGUgcG9pbnQgb3JkZXIgaW5zdGVhZCBvZiBjb2RlIHVuaXQgb3JkZXIKKyAgICAgKgorICAgICAqICAgLSBDT01QQVJFX0lHTk9SRV9DQVNFCisgICAgICogICAgIFNldCB0byBjb21wYXJlIHN0cmluZ3MgY2FzZS1pbnNlbnNpdGl2ZWx5IHVzaW5nIGNhc2UgZm9sZGluZywKKyAgICAgKiAgICAgaW5zdGVhZCBvZiBjYXNlLXNlbnNpdGl2ZWx5LgorICAgICAqICAgICBJZiBzZXQsIHRoZW4gdGhlIGZvbGxvd2luZyBjYXNlIGZvbGRpbmcgb3B0aW9ucyBhcmUgdXNlZC4KKyAgICAgKgorICAgICAqCisgICAgICogQHJldHVybiA8MCBvciAwIG9yID4wIGFzIHVzdWFsIGZvciBzdHJpbmcgY29tcGFyaXNvbnMKKyAgICAgKgorICAgICAqIEBzZWUgI25vcm1hbGl6ZQorICAgICAqIEBzZWUgI0ZDRAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmUoU3RyaW5nIHMxLCBTdHJpbmcgczIsIGludCBvcHRpb25zKXsKKyAgICAgICAgIAorICAgICAgICAgcmV0dXJuIGNvbXBhcmUoczEudG9DaGFyQXJyYXkoKSwwLHMxLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIudG9DaGFyQXJyYXkoKSwwLHMyLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyk7CisgICAgIH0KKyAgICAgCisgICAgLyoqCisgICAgICogQ29tcGFyZSB0d28gc3RyaW5ncyBmb3IgY2Fub25pY2FsIGVxdWl2YWxlbmNlLgorICAgICAqIEZ1cnRoZXIgb3B0aW9ucyBpbmNsdWRlIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbiBhbmQKKyAgICAgKiBjb2RlIHBvaW50IG9yZGVyIChhcyBvcHBvc2VkIHRvIGNvZGUgdW5pdCBvcmRlcikuCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kLgorICAgICAqCisgICAgICogQHBhcmFtIHMxIEZpcnN0IHNvdXJjZSBzdHJpbmcuCisgICAgICogQHBhcmFtIHMyIFNlY29uZCBzb3VyY2Ugc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIG9wdGlvbnMgQSBiaXQgc2V0IG9mIG9wdGlvbnM6CisgICAgICogICAtIEZPTERfQ0FTRV9ERUZBVUxUIG9yIDAgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zOgorICAgICAqICAgICBDYXNlLXNlbnNpdGl2ZSBjb21wYXJpc29uIGluIGNvZGUgdW5pdCBvcmRlciwgYW5kIHRoZSBpbnB1dCBzdHJpbmdzCisgICAgICogICAgIGFyZSBxdWljay1jaGVja2VkIGZvciBGQ0QuCisgICAgICoKKyAgICAgKiAgIC0gSU5QVVRfSVNfRkNECisgICAgICogICAgIFNldCBpZiB0aGUgY2FsbGVyIGtub3dzIHRoYXQgYm90aCBzMSBhbmQgczIgZnVsZmlsbCB0aGUgRkNEIAorICAgICAqICAgICBjb25kaXRpb25zLiBJZiBub3Qgc2V0LCB0aGUgZnVuY3Rpb24gd2lsbCBxdWlja0NoZWNrIGZvciBGQ0QKKyAgICAgKiAgICAgYW5kIG5vcm1hbGl6ZSBpZiBuZWNlc3NhcnkuCisgICAgICoKKyAgICAgKiAgIC0gQ09NUEFSRV9DT0RFX1BPSU5UX09SREVSCisgICAgICogICAgIFNldCB0byBjaG9vc2UgY29kZSBwb2ludCBvcmRlciBpbnN0ZWFkIG9mIGNvZGUgdW5pdCBvcmRlcgorICAgICAqCisgICAgICogICAtIENPTVBBUkVfSUdOT1JFX0NBU0UKKyAgICAgKiAgICAgU2V0IHRvIGNvbXBhcmUgc3RyaW5ncyBjYXNlLWluc2Vuc2l0aXZlbHkgdXNpbmcgY2FzZSBmb2xkaW5nLAorICAgICAqICAgICBpbnN0ZWFkIG9mIGNhc2Utc2Vuc2l0aXZlbHkuCisgICAgICogICAgIElmIHNldCwgdGhlbiB0aGUgZm9sbG93aW5nIGNhc2UgZm9sZGluZyBvcHRpb25zIGFyZSB1c2VkLgorICAgICAqCisgICAgICoKKyAgICAgKiBAcmV0dXJuIDwwIG9yIDAgb3IgPjAgYXMgdXN1YWwgZm9yIHN0cmluZyBjb21wYXJpc29ucworICAgICAqCisgICAgICogQHNlZSAjbm9ybWFsaXplCisgICAgICogQHNlZSAjRkNECisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICAgcHVibGljIHN0YXRpYyBpbnQgY29tcGFyZShjaGFyW10gczEsIGNoYXJbXSBzMiwgaW50IG9wdGlvbnMpeworICAgICAgICAgCisgICAgICAgICByZXR1cm4gY29tcGFyZShzMSwwLHMxLmxlbmd0aCxzMiwwLHMyLmxlbmd0aCxvcHRpb25zKTsKKyAgICAgfSAKKyAgICAgICAgCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY2FuIGhhdmUgZmFzdGVyIGltcGxlbWVudGF0aW9uCisgICAgICogYnkgbm90IGFsbG9jYXRpbmcgYnVmZmVycy4KKyAgICAgKiBAcGFyYW0gY2hhcjMyYSAgICB0aGUgZmlyc3QgY29kZSBwb2ludCB0byBiZSBjaGVja2VkIGFnYWluc3QgdGhlCisgICAgICogQHBhcmFtIGNoYXIzMmIgICAgdGhlIHNlY29uZCBjb2RlIHBvaW50CisgICAgICoKKyAgICAgKiBAcGFyYW0gYU1vZGUgICAgIHRoZSBub3JtYWxpemF0aW9uIG1vZGUKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIC8vIFRPRE86IGFjdHVhbGx5IGRvIHRoZSBvcHRpbWl6YXRpb24gd2hlbiB0aGUgZ3V0cyBvZiBOb3JtYWxpemVyIGFyZSAKKyAgICAvLyB1cGdyYWRlZCAtLWhhcyBqdXN0IGR1bWIgaW1wbGVtZW50YXRpb24gZm9yIG5vdworICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmUoaW50IGNoYXIzMmEsIGludCBjaGFyMzJiLGludCBvcHRpb25zKSB7CisgICAgICAgIHJldHVybiBjb21wYXJlKFVURjE2LnZhbHVlT2YoY2hhcjMyYSksIFVURjE2LnZhbHVlT2YoY2hhcjMyYiksIG9wdGlvbnMpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjYW4gaGF2ZSBmYXN0ZXIgaW1wbGVtZW50YXRpb24KKyAgICAgKiBieSBub3QgYWxsb2NhdGluZyBidWZmZXJzLgorICAgICAqIEBpbnRlcm5hbAorICAgICAqIEBwYXJhbSBjaGFyMzJhICAgIHRoZSBmaXJzdCBjb2RlIHBvaW50IHRvIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGUKKyAgICAgKiBAcGFyYW0gc3RyMiAgICB0aGUgc2Vjb25kIHN0cmluZworICAgICAqCisgICAgICogQHBhcmFtIGFNb2RlICAgICB0aGUgbm9ybWFsaXphdGlvbiBtb2RlCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKgorICAgICAqLworICAgIC8vIFRPRE86IGFjdHVhbGx5IGRvIHRoZSBvcHRpbWl6YXRpb24gd2hlbiB0aGUgZ3V0cyBvZiBOb3JtYWxpemVyIGFyZSAKKyAgICAvLyB1cGdyYWRlZCAtLWhhcyBqdXN0IGR1bWIgaW1wbGVtZW50YXRpb24gZm9yIG5vdworICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmUoaW50IGNoYXJBLCBTdHJpbmcgc3RyMiwgaW50IG9wdGlvbnMpIHsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmUoVVRGMTYudmFsdWVPZihjaGFyQSksIHN0cjIsIG9wdGlvbnMpOworICAgIH0KKyAgIAorICAgIC8qKgorICAgICAqIENvbmNhdGVuYXRlIG5vcm1hbGl6ZWQgc3RyaW5ncywgbWFraW5nIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIG5vcm1hbGl6ZWQKKyAgICAgKiBhcyB3ZWxsLgorICAgICAqCisgICAgICogSWYgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IHN0cmluZ3MgYXJlIGluCisgICAgICogdGhlIG5vcm1hbGl6YXRpb24gZm9ybSBhY2NvcmRpbmcgdG8gIm1vZGUiLAorICAgICAqIHRoZW4gdGhlIHJlc3VsdCB3aWxsIGJlCisgICAgICoKKyAgICAgKiBcY29kZQorICAgICAqICAgICBkZXN0PW5vcm1hbGl6ZShsZWZ0K3JpZ2h0LCBtb2RlKQorICAgICAqIFxlbmRjb2RlCisgICAgICoKKyAgICAgKiBXaXRoIHRoZSBpbnB1dCBzdHJpbmdzIGFscmVhZHkgYmVpbmcgbm9ybWFsaXplZCwKKyAgICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlIG5leHQoKSBhbmQgcHJldmlvdXMoKQorICAgICAqIHRvIGZpbmQgdGhlIGFkamFjZW50IGVuZCBwaWVjZXMgb2YgdGhlIGlucHV0IHN0cmluZ3MuCisgICAgICogT25seSB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGVzZSBlbmQgcGllY2VzIHdpbGwgYmUgbm9ybWFsaXplZCBhbmQKKyAgICAgKiB0aGVuIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSByZW1haW5pbmcgcGFydHMgb2YgdGhlIGlucHV0IHN0cmluZ3MuCisgICAgICoKKyAgICAgKiBJdCBpcyBhbGxvd2VkIHRvIGhhdmUgZGVzdD09bGVmdCB0byBhdm9pZCBjb3B5aW5nIHRoZSBlbnRpcmUgbGVmdCBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbGVmdCBMZWZ0IHNvdXJjZSBhcnJheSwgbWF5IGJlIHNhbWUgYXMgZGVzdC4KKyAgICAgKiBAcGFyYW0gbGVmdFN0YXJ0IHN0YXJ0IGluZGV4IG9mIHRoZSBsZWZ0IGFycmF5LgorICAgICAqIEBwYXJhbSBsZWZ0TGltaXQgZW5kIGluZGV4IG9mIHRoZSBsZWZ0IGFycmF5ICg9PWxlbmd0aCkKKyAgICAgKiBAcGFyYW0gcmlnaHQgUmlnaHQgc291cmNlIGFycmF5LgorICAgICAqIEBwYXJhbSByaWdodFN0YXJ0IHN0YXJ0IGluZGV4IG9mIHRoZSByaWdodCBhcnJheS4KKyAgICAgKiBAcGFyYW0gbGVmdExpbWl0IGVuZCBpbmRleCBvZiB0aGUgcmlnaHQgYXJyYXkgKD09bGVuZ3RoKQorICAgICAqIEBwYXJhbSBkZXN0IFRoZSBvdXRwdXQgYnVmZmVyOyBjYW4gYmUgbnVsbCBpZiBkZXN0U3RhcnQ9PWRlc3RMaW1pdD09MCAKKyAgICAgKiAgICAgICAgICAgICAgZm9yIHB1cmUgcHJlZmxpZ2h0aW5nLgorICAgICAqIEBwYXJhbSBkZXN0U3RhcnQgc3RhcnQgaW5kZXggb2YgdGhlIGRlc3RpbmF0aW9uIGFycmF5CisgICAgICogQHBhcmFtIG1vZGUgVGhlIG5vcm1hbGl6YXRpb24gbW9kZS4KKyAgICAgKiBAcmV0dXJuIExlbmd0aCBvZiBvdXRwdXQgKG51bWJlciBvZiBjaGFycykgd2hlbiBzdWNjZXNzZnVsIG9yIAorICAgICAqICAgICAgICAgIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hvc2UgbWVzc2FnZSBoYXMgdGhlIHN0cmluZyAKKyAgICAgKiAgICAgICAgICAgICByZXByZXNlbnRhdGlvbiBvZiBkZXN0aW5hdGlvbiBjYXBhY2l0eSByZXF1aXJlZC4gCisgICAgICogQHNlZSAjbm9ybWFsaXplCisgICAgICogQHNlZSAjbmV4dAorICAgICAqIEBzZWUgI3ByZXZpb3VzCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIHRhcmdldCBjYXBhY2l0eSBpcyBsZXNzIHRoYW4gdGhlCisgICAgICogICAgICAgICAgICAgcmVxdWlyZWQgbGVuZ3RoCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICAgLyogQ29uY2F0ZW5hdGlvbiBvZiBub3JtYWxpemVkIHN0cmluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgCisgICAgcHVibGljIHN0YXRpYyBpbnQgY29uY2F0ZW5hdGUoY2hhcltdIGxlZnQsICBpbnQgbGVmdFN0YXJ0LCAgaW50IGxlZnRMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gcmlnaHQsIGludCByaWdodFN0YXJ0LCBpbnQgcmlnaHRMaW1pdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGRlc3QsICBpbnQgZGVzdFN0YXJ0LCAgaW50IGRlc3RMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk1vZGUgbW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBjaGFyW10gYnVmZmVyPW5ldyBjaGFyWzEwMF07CisgICAgICAgIGludCBidWZmZXJMZW5ndGg7CisgICAgCisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBpdGVyOworICAgICAgICAKKyAgICAgICAgaW50IGxlZnRCb3VuZGFyeSwgcmlnaHRCb3VuZGFyeSwgZGVzdExlbmd0aDsKKyAgICAKKyAgICAgICAgaWYoZGVzdCA9PSBudWxsKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvKiBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgcmlnaHQgYW5kIGRlc3RpbmF0aW9uICovCisgICAgICAgIGlmIChyaWdodCA9PSBkZXN0ICYmIHJpZ2h0U3RhcnQgPCBkZXN0TGltaXQgJiYgZGVzdFN0YXJ0IDwgcmlnaHRMaW1pdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigib3ZlcmxhcHBpbmcgcmlnaHQgYW5kIGRzdCByYW5nZXMiKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvKiBhbGxvdyBsZWZ0PT1kZXN0ICovCisgICAgCisgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIElucHV0OiBsZWZ0WzAuLmxlZnRMZW5ndGhbICsgcmlnaHRbMC4ucmlnaHRMZW5ndGhbCisgICAgICAgICAqCisgICAgICAgICAqIEZpbmQgbm9ybWFsaXphdGlvbi1zYWZlIGJvdW5kYXJpZXMgbGVmdEJvdW5kYXJ5IGFuZCByaWdodEJvdW5kYXJ5CisgICAgICAgICAqIGFuZCBjb3B5IHRoZSBlbmQgcGFydHMgdG9nZXRoZXI6CisgICAgICAgICAqIGJ1ZmZlcj1sZWZ0W2xlZnRCb3VuZGFyeS4ubGVmdExlbmd0aFsgKyByaWdodFswLi5yaWdodEJvdW5kYXJ5WworICAgICAgICAgKgorICAgICAgICAgKiBkZXN0PWxlZnRbMC4ubGVmdEJvdW5kYXJ5WyArCisgICAgICAgICAqICAgICAgbm9ybWFsaXplKGJ1ZmZlcikgKworICAgICAgICAgKiAgICAgIHJpZ2h0W3JpZ2h0Qm91bmRhcnkuLnJpZ2h0TGVuZ3RoWworICAgICAgICAgKi8KKyAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogZmluZCBhIG5vcm1hbGl6YXRpb24gYm91bmRhcnkgYXQgdGhlIGVuZCBvZiB0aGUgbGVmdCBzdHJpbmcKKyAgICAgICAgICogYW5kIGNvcHkgdGhlIGVuZCBwYXJ0IGludG8gdGhlIGJ1ZmZlcgorICAgICAgICAgKi8KKworICAgICAgICBpdGVyID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKGxlZnQsIGxlZnRTdGFydCwgbGVmdExpbWl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpdGVyLnNldEluZGV4KGl0ZXIuZ2V0TGVuZ3RoKCkpOyAvKiBlbmQgb2YgbGVmdCBzdHJpbmcgKi8KKyAgICAKKyAgICAgICAgYnVmZmVyTGVuZ3RoPXByZXZpb3VzKGl0ZXIsIGJ1ZmZlciwwLGJ1ZmZlci5sZW5ndGgsbW9kZSxmYWxzZSxudWxsKTsKKyAgICAgICAgCisgICAgICAgIGxlZnRCb3VuZGFyeT1pdGVyLmdldEluZGV4KCk7CisgICAgICAgIAorICAgICAgICBpZihidWZmZXJMZW5ndGg+YnVmZmVyLmxlbmd0aCkgeworICAgICAgICAgICAgY2hhcltdIG5ld0J1ZiA9IG5ldyBjaGFyW2J1ZmZlci5sZW5ndGgqMl07CisgICAgICAgICAgICBidWZmZXIgPSBuZXdCdWY7CisgICAgICAgICAgICBuZXdCdWYgPSBudWxsOyAvLyBudWxsIHRoZSByZWZlcmVuY2UgZm9yIEdDCisgICAgICAgICAgICAvKiBqdXN0IGNvcHkgZnJvbSB0aGUgbGVmdCBzdHJpbmc6IHdlIGtub3cgdGhlIGJvdW5kYXJ5IGFscmVhZHkgKi8KKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobGVmdCxsZWZ0Qm91bmRhcnksYnVmZmVyLDAsYnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBmaW5kIGEgbm9ybWFsaXphdGlvbiBib3VuZGFyeSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByaWdodCBzdHJpbmcKKyAgICAgICAgICogYW5kIGNvbmNhdGVuYXRlIHRoZSBiZWdpbm5pbmcgcGFydCB0byB0aGUgYnVmZmVyCisgICAgICAgICAqLworCisgICAgICAgIGl0ZXIgPSBVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2UocmlnaHQsIHJpZ2h0U3RhcnQsIHJpZ2h0TGltaXQpOworICAgICAgICAKKyAgICAgICAgcmlnaHRCb3VuZGFyeT1uZXh0KGl0ZXIsYnVmZmVyLGJ1ZmZlckxlbmd0aCwgYnVmZmVyLmxlbmd0aC1idWZmZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlLCBmYWxzZSxudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpZihidWZmZXJMZW5ndGg+YnVmZmVyLmxlbmd0aCkgeworICAgICAgICAgICAgY2hhcltdIG5ld0J1ZiA9IG5ldyBjaGFyW2J1ZmZlci5sZW5ndGgqMl07CisgICAgICAgICAgICBidWZmZXIgPSBuZXdCdWY7CisgICAgICAgICAgICBuZXdCdWYgPSBudWxsOyAvLyBudWxsIHRoZSByZWZlcmVuY2UgZm9yIEdDCisgICAgICAgICAgICAvKiBqdXN0IGNvcHkgZnJvbSB0aGUgcmlnaHQgc3RyaW5nOiB3ZSBrbm93IHRoZSBib3VuZGFyeSBhbHJlYWR5ICovCisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHJpZ2h0LHJpZ2h0Qm91bmRhcnksYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJMZW5ndGgscmlnaHRCb3VuZGFyeSk7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXJMZW5ndGgrPXJpZ2h0Qm91bmRhcnk7CisgICAgCisgICAgICAgIC8qIGNvcHkgbGVmdFswLi5sZWZ0Qm91bmRhcnlbIHRvIGRlc3QgKi8KKyAgICAgICAgaWYobGVmdCE9ZGVzdCAmJiBsZWZ0Qm91bmRhcnk+MCAmJiAoZGVzdExpbWl0KT4wKSB7CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxlZnQsMCxkZXN0LDAsIE1hdGgubWluKGxlZnRCb3VuZGFyeSxkZXN0TGltaXQpKTsgCisgICAgICAgIH0KKyAgICAgICAgZGVzdExlbmd0aD1sZWZ0Qm91bmRhcnk7CisgICAgCisgICAgICAgIC8qIGNvbmNhdGVuYXRlIHRoZSBub3JtYWxpemF0aW9uIG9mIHRoZSBidWZmZXIgdG8gZGVzdCAqLworICAgICAgICBpZihkZXN0TGltaXQ+ZGVzdExlbmd0aCkgeworICAgICAgICAgICAgZGVzdExlbmd0aCs9Tm9ybWFsaXplci5ub3JtYWxpemUoYnVmZmVyLDAsYnVmZmVyTGVuZ3RoLGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RMZW5ndGgsZGVzdExpbWl0LG1vZGUpOworICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0TGVuZ3RoKz1Ob3JtYWxpemVyLm5vcm1hbGl6ZShidWZmZXIsIDAsIGJ1ZmZlckxlbmd0aCxudWxsLDAsMCxtb2RlKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvKiBjb25jYXRlbmF0ZSByaWdodFtyaWdodEJvdW5kYXJ5Li5yaWdodExlbmd0aFsgdG8gZGVzdCAqLworICAgICAgICByaWdodFN0YXJ0Kz1yaWdodEJvdW5kYXJ5OworICAgICAgICBpbnQgcmlnaHRMZW5ndGg9KHJpZ2h0TGltaXQtcmlnaHRTdGFydCk7CisgICAgICAgIGlmKHJpZ2h0TGVuZ3RoPjAgJiYgZGVzdExpbWl0PmRlc3RMZW5ndGgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkocmlnaHQscmlnaHRTdGFydCxkZXN0LGRlc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKHJpZ2h0TGVuZ3RoLGRlc3RMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBkZXN0TGVuZ3RoKz1yaWdodExlbmd0aDsKKyAgICAgICAgCisgICAgICAgIGlmKGRlc3RMZW5ndGg8PShkZXN0TGltaXQtZGVzdFN0YXJ0KSl7CisgICAgICAgICAgICByZXR1cm4gZGVzdExlbmd0aDsKKyAgICAgICAgfWVsc2V7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihJbnRlZ2VyLnRvU3RyaW5nKGRlc3RMZW5ndGgpKTsKKyAgICAgICAgfSAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbmNhdGVuYXRlIG5vcm1hbGl6ZWQgc3RyaW5ncywgbWFraW5nIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIG5vcm1hbGl6ZWQKKyAgICAgKiBhcyB3ZWxsLgorICAgICAqCisgICAgICogSWYgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IHN0cmluZ3MgYXJlIGluCisgICAgICogdGhlIG5vcm1hbGl6YXRpb24gZm9ybSBhY2NvcmRpbmcgdG8gIm1vZGUiLAorICAgICAqIHRoZW4gdGhlIHJlc3VsdCB3aWxsIGJlCisgICAgICoKKyAgICAgKiA8Y29kZT4KKyAgICAgKiAgICAgZGVzdD1ub3JtYWxpemUobGVmdCtyaWdodCwgbW9kZSkKKyAgICAgKiA8L2NvZGU+CisgICAgICoKKyAgICAgKiBGb3IgZGV0YWlscyBzZWUgY29uY2F0ZW5hdGUgCisgICAgICoKKyAgICAgKiBAcGFyYW0gbGVmdCBMZWZ0IHNvdXJjZSBzdHJpbmcuCisgICAgICogQHBhcmFtIHJpZ2h0IFJpZ2h0IHNvdXJjZSBzdHJpbmcuCisgICAgICogQHBhcmFtIG1vZGUgVGhlIG5vcm1hbGl6YXRpb24gbW9kZS4KKyAgICAgKiBAcmV0dXJuIHJlc3VsdAorICAgICAqCisgICAgICogQHNlZSAjY29uY2F0ZW5hdGUKKyAgICAgKiBAc2VlICNub3JtYWxpemUKKyAgICAgKiBAc2VlICNuZXh0CisgICAgICogQHNlZSAjcHJldmlvdXMKKyAgICAgKiBAc2VlICNjb25jYXRlbmF0ZQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29uY2F0ZW5hdGUoY2hhcltdIGxlZnQsIGNoYXJbXSByaWdodCxNb2RlIG1vZGUpeworICAgICAgICBjaGFyW10gcmVzdWx0ID0gbmV3IGNoYXJbKGxlZnQubGVuZ3RoK3JpZ2h0Lmxlbmd0aCkqIE1BWF9CVUZfU0laRV9ERUNPTVBPU0VdOworICAgICAgICBmb3IoOzspeworICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gY29uY2F0ZW5hdGUobGVmdCwgIDAsIGxlZnQubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0LCAwLCByaWdodC5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LDAsIHJlc3VsdC5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSk7CisgICAgICAgICAgICBpZihsZW5ndGg8PXJlc3VsdC5sZW5ndGgpeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKHJlc3VsdCwwLGxlbmd0aCk7CisgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgY2hhcltsZW5ndGhdOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbmNhdGVuYXRlIG5vcm1hbGl6ZWQgc3RyaW5ncywgbWFraW5nIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIG5vcm1hbGl6ZWQKKyAgICAgKiBhcyB3ZWxsLgorICAgICAqCisgICAgICogSWYgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IHN0cmluZ3MgYXJlIGluCisgICAgICogdGhlIG5vcm1hbGl6YXRpb24gZm9ybSBhY2NvcmRpbmcgdG8gIm1vZGUiLAorICAgICAqIHRoZW4gdGhlIHJlc3VsdCB3aWxsIGJlCisgICAgICoKKyAgICAgKiA8Y29kZT4KKyAgICAgKiAgICAgZGVzdD1ub3JtYWxpemUobGVmdCtyaWdodCwgbW9kZSkKKyAgICAgKiA8L2NvZGU+CisgICAgICoKKyAgICAgKiBGb3IgZGV0YWlscyBzZWUgY29uY2F0ZW5hdGUKKyAgICAgKgorICAgICAqIEBwYXJhbSBsZWZ0IExlZnQgc291cmNlIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gcmlnaHQgUmlnaHQgc291cmNlIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gbW9kZSBUaGUgbm9ybWFsaXphdGlvbiBtb2RlLgorICAgICAqIEByZXR1cm4gcmVzdWx0CisgICAgICoKKyAgICAgKiBAc2VlICNjb25jYXRlbmF0ZQorICAgICAqIEBzZWUgI25vcm1hbGl6ZQorICAgICAqIEBzZWUgI25leHQKKyAgICAgKiBAc2VlICNwcmV2aW91cworICAgICAqIEBzZWUgI2NvbmNhdGVuYXRlCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBjb25jYXRlbmF0ZShTdHJpbmcgbGVmdCwgU3RyaW5nIHJpZ2h0LE1vZGUgbW9kZSl7CisgICAgICAgIGNoYXJbXSByZXN1bHQgPSBuZXcgY2hhclsobGVmdC5sZW5ndGgoKStyaWdodC5sZW5ndGgoKSkqIE1BWF9CVUZfU0laRV9ERUNPTVBPU0VdOworICAgICAgICBmb3IoOzspeworICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gY29uY2F0ZW5hdGUobGVmdC50b0NoYXJBcnJheSgpLCAwLCBsZWZ0Lmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0LnRvQ2hhckFycmF5KCksMCwgcmlnaHQubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCAgICAgICAgICAgICAwLCByZXN1bHQubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUpOworICAgICAgICAgICAgaWYobGVuZ3RoPD1yZXN1bHQubGVuZ3RoKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhyZXN1bHQsMCxsZW5ndGgpOworICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IGNoYXJbbGVuZ3RoXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBGQ19ORktDIGNsb3N1cmUgc2V0IGZyb20gdGhlIG5vcm1hbGl6YXRpb24gZGF0YQorICAgICAqIEBwYXJhbSBjIFRoZSBjb2RlIHBvaW50IHdob3NlIGNsb3N1cmUgc2V0IGlzIHRvIGJlIHJldHJpZXZlZAorICAgICAqIEBwYXJhbSBkZXN0IFRoZSBjaGFyIGFycmF5IHRvIHJlY2l2ZSB0aGUgY2xvc3VyZSBzZXQKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldEZDX05GS0NfQ2xvc3VyZShpbnQgYyxjaGFyW10gZGVzdCl7CisgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5nZXRGQ19ORktDX0Nsb3N1cmUoYyxkZXN0KTsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgRkNfTkZLQyBjbG9zdXJlIHNldCBmcm9tIHRoZSBub3JtYWxpemF0aW9uIGRhdGEKKyAgICAgKiBAcGFyYW0gYyBUaGUgdGhlIGNvZGUgcG9pbnQgd2hvc2UgY2xvc3VyZSBzZXQgaXMgdG8gYmUgcmV0cmlldmVkCisgICAgICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNsb3N1cmUgc2V0CisgICAgICogQGludGVybmFsCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8gCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RkNfTkZLQ19DbG9zdXJlKGludCBjKXsKKyAgICAgICAgY2hhcltdIGRlc3QgPSBuZXcgY2hhclsxMF07CisgICAgICAgIGZvcig7Oyl7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gZ2V0RkNfTkZLQ19DbG9zdXJlKGMsZGVzdCk7CisgICAgICAgICAgICBpZihsZW5ndGg8PWRlc3QubGVuZ3RoKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhkZXN0LDAsbGVuZ3RoKTsKKyAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgIGRlc3QgPSBuZXcgY2hhcltsZW5ndGhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEl0ZXJhdGlvbiBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGluIHRoZSBub3JtYWxpemVkIHRleHQtPgorICAgICAqIEByZXR1cm4gVGhlIGNvZGVwb2ludCBhcyBhbiBpbnQKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBpbnQgY3VycmVudCgpIHsKKwkJaWYoYnVmZmVyUG9zPGJ1ZmZlckxpbWl0IHx8IG5leHROb3JtYWxpemUoKSkgeworCQkgICAgcmV0dXJuIGdldENvZGVQb2ludEF0KGJ1ZmZlclBvcyk7CisJCX0gZWxzZSB7CisJCSAgICByZXR1cm4gRE9ORTsKKwkJfQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBub3JtYWxpemVkIHRleHQgYW5kIGFkdmFuY2UKKyAgICAgKiB0aGUgaXRlcmF0aW9uIHBvc2l0aW9uIGJ5IG9uZS4gIElmIHRoZSBlbmQKKyAgICAgKiBvZiB0aGUgdGV4dCBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWQsIHtAbGluayAjRE9ORX0gaXMgcmV0dXJuZWQuCisgICAgICogQHJldHVybiBUaGUgY29kZXBvaW50IGFzIGFuIGludAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBuZXh0KCkgeworCQlpZihidWZmZXJQb3M8YnVmZmVyTGltaXQgfHwgIG5leHROb3JtYWxpemUoKSkgeworCQkgICAgaW50IGM9Z2V0Q29kZVBvaW50QXQoYnVmZmVyUG9zKTsKKwkJICAgIGJ1ZmZlclBvcys9KGM+MHhGRkZGKSA/IDIgOiAxOworCQkgICAgcmV0dXJuIGM7CisJCX0gZWxzZSB7CisJCSAgICByZXR1cm4gRE9ORTsKKwkJfQorICAgIH0KKwkKKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgaW4gdGhlIG5vcm1hbGl6ZWQgdGV4dCBhbmQgZGVjcmVtZW50CisgICAgICogdGhlIGl0ZXJhdGlvbiBwb3NpdGlvbiBieSBvbmUuICBJZiB0aGUgYmVnaW5uaW5nCisgICAgICogb2YgdGhlIHRleHQgaGFzIGFscmVhZHkgYmVlbiByZWFjaGVkLCB7QGxpbmsgI0RPTkV9IGlzIHJldHVybmVkLgorICAgICAqIEByZXR1cm4gVGhlIGNvZGVwb2ludCBhcyBhbiBpbnQKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBpbnQgcHJldmlvdXMoKSB7CisJCWlmKGJ1ZmZlclBvcz4wIHx8IHByZXZpb3VzTm9ybWFsaXplKCkpIHsKKwkJICAgIGludCBjPWdldENvZGVQb2ludEF0KGJ1ZmZlclBvcy0xKTsKKwkJICAgIGJ1ZmZlclBvcy09KGM+MHhGRkZGKSA/IDIgOiAxOworCQkgICAgcmV0dXJuIGM7CisJCX0gZWxzZSB7CisJCSAgICByZXR1cm4gRE9ORTsKKwkJfQorICAgIH0KKwkKKyAgIC8qKgorICAgICogUmVzZXQgdGhlIGluZGV4IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQuCisgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2V0SW5kZXhPbmx5KHN0YXJ0SW5kZXgpKS4KKyAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKKyAgICAgICAgdGV4dC5zZXRJbmRleCgwKTsKKwkJY3VycmVudEluZGV4PW5leHRJbmRleD0wOworCQljbGVhckJ1ZmZlcigpOworICAgIH0KKyAgICAKKyAgIC8qKgorICAgICogU2V0IHRoZSBpdGVyYXRpb24gcG9zaXRpb24gaW4gdGhlIGlucHV0IHRleHQgdGhhdCBpcyBiZWluZyBub3JtYWxpemVkLAorICAgICogd2l0aG91dCBhbnkgaW1tZWRpYXRlIG5vcm1hbGl6YXRpb24uCisgICAgKiBBZnRlciBzZXRJbmRleE9ubHkoKSwgZ2V0SW5kZXgoKSB3aWxsIHJldHVybiB0aGUgc2FtZSBpbmRleCB0aGF0IGlzCisgICAgKiBzcGVjaWZpZWQgaGVyZS4KKyAgICAqCisgICAgKiBAcGFyYW0gaW5kZXggdGhlIGRlc2lyZWQgaW5kZXggaW4gdGhlIGlucHV0IHRleHQuCisgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SW5kZXhPbmx5KGludCBpbmRleCkgeworICAgICAgICB0ZXh0LnNldEluZGV4KGluZGV4KTsKKwkJY3VycmVudEluZGV4PW5leHRJbmRleD1pbmRleDsgLy8gdmFsaWRhdGVzIGluZGV4CisJCWNsZWFyQnVmZmVyKCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFNldCB0aGUgaXRlcmF0aW9uIHBvc2l0aW9uIGluIHRoZSBpbnB1dCB0ZXh0IHRoYXQgaXMgYmVpbmcgbm9ybWFsaXplZAorICAgICAqIGFuZCByZXR1cm4gdGhlIGZpcnN0IG5vcm1hbGl6ZWQgY2hhcmFjdGVyIGF0IHRoYXQgcG9zaXRpb24uCisgICAgICogPHA+CisgICAgICogPGI+Tm90ZTo8L2I+IFRoaXMgbWV0aG9kIHNldHMgdGhlIHBvc2l0aW9uIGluIHRoZSA8ZW0+aW5wdXQ8L2VtPiB0ZXh0LAorICAgICAqIHdoaWxlIHtAbGluayAjbmV4dH0gYW5kIHtAbGluayAjcHJldmlvdXN9IGl0ZXJhdGUgdGhyb3VnaCBjaGFyYWN0ZXJzCisgICAgICogaW4gdGhlIG5vcm1hbGl6ZWQgPGVtPm91dHB1dDwvZW0+LiAgVGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIG5vdAorICAgICAqIG5lY2Vzc2FyaWx5IGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGNoYXJhY3RlcnMgcmV0dXJuZWQKKyAgICAgKiBieSA8dHQ+bmV4dDwvdHQ+IGFuZCA8dHQ+cHJldmlvdXM8L3R0PiBhbmQgdGhlIGluZGljZXMgcGFzc2VkIHRvIGFuZAorICAgICAqIHJldHVybmVkIGZyb20gPHR0PnNldEluZGV4PC90dD4gYW5kIHtAbGluayAjZ2V0SW5kZXh9LgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgZGVzaXJlZCBpbmRleCBpbiB0aGUgaW5wdXQgdGV4dC0+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgdGhlIGZpcnN0IG5vcm1hbGl6ZWQgY2hhcmFjdGVyIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBpdGVyYXRpbmcKKyAgICAgKiAgICAgICAgICAgIGZvcndhcmQgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGluZGV4LgorICAgICAqCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGdpdmVuIGluZGV4IGlzIGxlc3MgdGhhbgorICAgICAqICAgICAgICAgIHtAbGluayAjZ2V0QmVnaW5JbmRleH0gb3IgZ3JlYXRlciB0aGFuIHtAbGluayAjZ2V0RW5kSW5kZXh9LgorICAgICAqIEByZXR1cm4gVGhlIGNvZGVwb2ludCBhcyBhbiBpbnQKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBpbnQgc2V0SW5kZXgoaW50IGluZGV4KSB7CisJCXNldEluZGV4T25seShpbmRleCk7CisJCXJldHVybiBjdXJyZW50KCk7CisgICAgfQorIAorICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSBpbmRleCBvZiB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IHRleHQuIFRoaXMgaXMgdGhlIGJlZ2luIAorICAgICAqIGluZGV4IG9mIHRoZSA8dHQ+Q2hhcmFjdGVySXRlcmF0b3I8L3R0PiBvciB0aGUgc3RhcnQgKGkuZS4gMCkgb2YgdGhlIAorICAgICAqIDx0dD5TdHJpbmc8L3R0PiBvdmVyIHdoaWNoIHRoaXMgPHR0Pk5vcm1hbGl6ZXI8L3R0PiBpcyBpdGVyYXRpbmcKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtYXVnLTMxLiBVc2Ugc3RhcnRJbmRleCgpIGluc3RlYWQuCisgICAgICogQHJldHVybiBUaGUgY29kZXBvaW50IGFzIGFuIGludAorICAgICAqIEBzZWUgI3N0YXJ0SW5kZXgKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEJlZ2luSW5kZXgoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSBpbmRleCBvZiB0aGUgZW5kIG9mIHRoZSBpbnB1dCB0ZXh0LiAgVGhpcyBpcyB0aGUgZW5kIGluZGV4CisgICAgICogb2YgdGhlIDx0dD5DaGFyYWN0ZXJJdGVyYXRvcjwvdHQ+IG9yIHRoZSBsZW5ndGggb2YgdGhlIDx0dD5TdHJpbmc8L3R0PgorICAgICAqIG92ZXIgd2hpY2ggdGhpcyA8dHQ+Tm9ybWFsaXplcjwvdHQ+IGlzIGl0ZXJhdGluZworICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjIuIFRvIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy1hdWctMzEuIFVzZSBlbmRJbmRleCgpIGluc3RlYWQuCisgICAgICogQHJldHVybiBUaGUgY29kZXBvaW50IGFzIGFuIGludAorICAgICAqIEBzZWUgI2VuZEluZGV4CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEVuZEluZGV4KCkgeworICAgICAgICByZXR1cm4gdGV4dC5nZXRMZW5ndGgoKS0xOworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgbm9ybWFsaXplZCB0ZXh0LT4gIFRoaXMgcmVzZXRzCisgICAgICogdGhlIDx0dD5Ob3JtYWxpemVyJ3M8L3R0PiBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0LT4KKyAgICAgKiBAcmV0dXJuIFRoZSBjb2RlcG9pbnQgYXMgYW4gaW50CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGZpcnN0KCkgeworCQlyZXNldCgpOworCQlyZXR1cm4gbmV4dCgpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBub3JtYWxpemVkIHRleHQtPiAgVGhpcyByZXNldHMKKyAgICAgKiB0aGUgPHR0Pk5vcm1hbGl6ZXInczwvdHQ+IHBvc2l0aW9uIHRvIGJlIGp1c3QgYmVmb3JlIHRoZQorICAgICAqIHRoZSBpbnB1dCB0ZXh0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBub3JtYWxpemVkIGNoYXJhY3Rlci4KKyAgICAgKiBAcmV0dXJuIFRoZSBjb2RlcG9pbnQgYXMgYW4gaW50CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGxhc3QoKSB7CisgICAgICAgIHRleHQuc2V0VG9MaW1pdCgpOworCQljdXJyZW50SW5kZXg9bmV4dEluZGV4PXRleHQuZ2V0SW5kZXgoKTsKKwkJY2xlYXJCdWZmZXIoKTsKKwkJcmV0dXJuIHByZXZpb3VzKCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgdGV4dCB0aGF0IGlzCisgICAgICogYmVpbmcgbm9ybWFsaXplZC4gIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBpbiBhcHBsaWNhdGlvbnMgc3VjaCBhcworICAgICAqIHNlYXJjaGluZywgd2hlcmUgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIHBvc2l0aW9uIGluCisgICAgICogdGhlIGlucHV0IHRleHQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGdpdmVuIG5vcm1hbGl6ZWQgb3V0cHV0IGNoYXJhY3Rlci4KKyAgICAgKiA8cD4KKyAgICAgKiA8Yj5Ob3RlOjwvYj4gVGhpcyBtZXRob2Qgc2V0cyB0aGUgcG9zaXRpb24gaW4gdGhlIDxlbT5pbnB1dDwvZW0+LCB3aGlsZQorICAgICAqIHtAbGluayAjbmV4dH0gYW5kIHtAbGluayAjcHJldmlvdXN9IGl0ZXJhdGUgdGhyb3VnaCBjaGFyYWN0ZXJzIGluIHRoZQorICAgICAqIDxlbT5vdXRwdXQ8L2VtPi4gIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBub3QgbmVjZXNzYXJpbHkgYSBvbmUtdG8tb25lCisgICAgICogY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IDx0dD5uZXh0PC90dD4gYW5kCisgICAgICogPHR0PnByZXZpb3VzPC90dD4gYW5kIHRoZSBpbmRpY2VzIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbQorICAgICAqIDx0dD5zZXRJbmRleDwvdHQ+IGFuZCB7QGxpbmsgI2dldEluZGV4fS4KKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJbmRleCgpeworCQlpZihidWZmZXJQb3M8YnVmZmVyTGltaXQpIHsKKwkJICAgIHJldHVybiBjdXJyZW50SW5kZXg7CisJCX0gZWxzZSB7CisJCSAgICByZXR1cm4gbmV4dEluZGV4OworCQl9CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSBpbmRleCBvZiB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IHRleHQuIFRoaXMgaXMgdGhlIGJlZ2luIAorICAgICAqIGluZGV4IG9mIHRoZSA8dHQ+Q2hhcmFjdGVySXRlcmF0b3I8L3R0PiBvciB0aGUgc3RhcnQgKGkuZS4gMCkgb2YgdGhlIAorICAgICAqIDx0dD5TdHJpbmc8L3R0PiBvdmVyIHdoaWNoIHRoaXMgPHR0Pk5vcm1hbGl6ZXI8L3R0PiBpcyBpdGVyYXRpbmcKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBzdGFydEluZGV4KCl7CisJCXJldHVybiAwOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSB0aGUgaW5kZXggb2YgdGhlIGVuZCBvZiB0aGUgaW5wdXQgdGV4dC0+ICBUaGlzIGlzIHRoZSBlbmQgaW5kZXgKKyAgICAgKiBvZiB0aGUgPHR0PkNoYXJhY3Rlckl0ZXJhdG9yPC90dD4gb3IgdGhlIGxlbmd0aCBvZiB0aGUgPHR0PlN0cmluZzwvdHQ+CisgICAgICogb3ZlciB3aGljaCB0aGlzIDx0dD5Ob3JtYWxpemVyPC90dD4gaXMgaXRlcmF0aW5nCisgICAgICogQHJldHVybiBUaGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZW5kSW5kZXgoKXsKKwkJcmV0dXJuIHRleHQuZ2V0TGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFByb3BlcnR5IGFjY2VzcyBtZXRob2RzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLyoqCisgICAgICogU2V0IHRoZSBub3JtYWxpemF0aW9uIG1vZGUgZm9yIHRoaXMgb2JqZWN0LgorICAgICAqIDxwPgorICAgICAqIDxiPk5vdGU6PC9iPklmIHRoZSBub3JtYWxpemF0aW9uIG1vZGUgaXMgY2hhbmdlZCB3aGlsZSBpdGVyYXRpbmcKKyAgICAgKiBvdmVyIGEgc3RyaW5nLCBjYWxscyB0byB7QGxpbmsgI25leHR9IGFuZCB7QGxpbmsgI3ByZXZpb3VzfSBtYXkKKyAgICAgKiByZXR1cm4gcHJldmlvdXNseSBidWZmZXJzIGNoYXJhY3RlcnMgaW4gdGhlIG9sZCBub3JtYWxpemF0aW9uIG1vZGUKKyAgICAgKiB1bnRpbCB0aGUgaXRlcmF0aW9uIGlzIGFibGUgdG8gcmUtc3luYyBhdCB0aGUgbmV4dCBiYXNlIGNoYXJhY3Rlci4KKyAgICAgKiBJdCBpcyBzYWZlc3QgdG8gY2FsbCB7QGxpbmsgI3NldFRleHQgc2V0VGV4dCgpfSwge0BsaW5rICNmaXJzdH0sCisgICAgICoge0BsaW5rICNsYXN0fSwgZXRjLiBhZnRlciBjYWxsaW5nIDx0dD5zZXRNb2RlPC90dD4uCisgICAgICogPHA+CisgICAgICogQHBhcmFtIG5ld01vZGUgdGhlIG5ldyBtb2RlIGZvciB0aGlzIDx0dD5Ob3JtYWxpemVyPC90dD4uCisgICAgICogVGhlIHN1cHBvcnRlZCBtb2RlcyBhcmU6CisgICAgICogPHVsPgorICAgICAqICA8bGk+e0BsaW5rICNDT01QT1NFfSAgICAgICAgLSBVbmljb2RlIGNhbm9uaWNhbCBkZWNvbXBvc2l0aWlvbgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IGNhbm9uaWNhbCBjb21wb3NpdGlvbi4KKyAgICAgKiAgPGxpPntAbGluayAjQ09NUE9TRV9DT01QQVR9IC0gVW5pY29kZSBjb21wYXRpYmlsaXR5IGRlY29tcG9zaXRpaW9uCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbHdlZCBieSBjYW5vbmljYWwgY29tcG9zaXRpb24uCisgICAgICogIDxsaT57QGxpbmsgI0RFQ09NUH0gICAgICAgICAtIFVuaWNvZGUgY2Fub25pY2FsIGRlY29tcG9zaXRpb24KKyAgICAgKiAgPGxpPntAbGluayAjREVDT01QX0NPTVBBVH0gIC0gVW5pY29kZSBjb21wYXRpYmlsaXR5IGRlY29tcG9zaXRpb24uCisgICAgICogIDxsaT57QGxpbmsgI05PX09QfSAgICAgICAgICAtIERvIG5vdGhpbmcgYnV0IHJldHVybiBjaGFyYWN0ZXJzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgdW5kZXJseWluZyBpbnB1dCB0ZXh0LgorICAgICAqIDwvdWw+CisgICAgICoKKyAgICAgKiBAc2VlICNnZXRNb2RlCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RlKE1vZGUgbmV3TW9kZSl7CisJCW1vZGUgPSBuZXdNb2RlOworICAgIH0KKwkvKioKKyAgICAgKiBSZXR1cm4gdGhlIGJhc2ljIG9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgdGhpcyA8dHQ+Tm9ybWFsaXplcjwvdHQ+CisgICAgICoKKyAgICAgKiBAc2VlICNzZXRNb2RlCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgTW9kZSBnZXRNb2RlKCkgeworCQlyZXR1cm4gbW9kZTsKKyAgICB9CisJLyoqCisgICAgICogU2V0IG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhpcyA8dHQ+Tm9ybWFsaXplcjwvdHQ+J3Mgb3BlcmF0aW9uLgorICAgICAqIE9wdGlvbnMgZG8gbm90IGNoYW5nZSB0aGUgYmFzaWMgY29tcG9zaXRpb24gb3IgZGVjb21wb3NpdGlvbiBvcGVyYXRpb24KKyAgICAgKiB0aGF0IGlzIGJlaW5nIHBlcmZvcm1lZCAsIGJ1dCB0aGV5IGNvbnRyb2wgd2hldGhlcgorICAgICAqIGNlcnRhaW4gb3B0aW9uYWwgcG9ydGlvbnMgb2YgdGhlIG9wZXJhdGlvbiBhcmUgZG9uZS4KKyAgICAgKiBDdXJyZW50bHkgdGhlIG9ubHkgYXZhaWxhYmxlIG9wdGlvbiBpczoKKyAgICAgKiA8cD4KKyAgICAgKiA8dWw+CisgICAgICogICA8bGk+e0BsaW5rICNJR05PUkVfSEFOR1VMfSAtIERvIG5vdCBkZWNvbXBvc2UgSGFuZ3VsIHN5bGxhYmxlcyBpbnRvIHRoZQorICAgICAqICAgICAgICAgIEphbW8gYWxwaGFiZXQgYW5kIHZpY2UtdmVyc2EuICBUaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdCAKKyAgICAgKiAgICAgICAgICAoPGk+aS5lLjwvaT4gSGFuZ3VsIHByb2Nlc3NpbmcgaXMgZW5hYmxlZCkgc2luY2UgdGhlIFVuaWNvZGUgCisgICAgICogICAgICAgICAgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgSGFuZ3VsIHRvIEphbW8gaXMgYSBjYW5vbmljYWwgCisgICAgICogICAgICAgICAgZGVjb21wb3NpdGlvbi4gIEZvciBhbnkgb2YgdGhlIHN0YW5kYXJkIFVuaWNvZGUgTm9ybWFsaXphdGlvbiAKKyAgICAgKiAgICAgICAgICBGb3JtcywgeW91IHNob3VsZCBsZWF2ZSB0aGlzIG9wdGlvbiBvZmYuCisgICAgICogPC91bD4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gICBvcHRpb24gIHRoZSBvcHRpb24gd2hvc2UgdmFsdWUgaXMgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgIHZhbHVlICAgdGhlIG5ldyBzZXR0aW5nIGZvciB0aGUgb3B0aW9uLiAgVXNlIDx0dD50cnVlPC90dD4gdG8KKyAgICAgKiAgICAgICAgICAgICAgICAgIHR1cm4gdGhlIG9wdGlvbiBvbiBhbmQgPHR0PmZhbHNlPC90dD4gdG8gdHVybiBpdCBvZmYuCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRPcHRpb24KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi4yLiBUbyBiZSByZW1vdmVkIGFmdGVyIDIwMDMtQXVnLTMxLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE9wdGlvbihpbnQgb3B0aW9uLGJvb2xlYW4gdmFsdWUpIHsKKwkJaWYgKHZhbHVlKSB7CisJCSAgICBvcHRpb25zIHw9IG9wdGlvbjsKKwkJfSBlbHNlIHsKKwkJICAgIG9wdGlvbnMgJj0gKH5vcHRpb24pOworCQl9CisgICAgfQorCQorICAgIC8qKgorICAgICAqIERldGVybWluZSB3aGV0aGVyIGFuIG9wdGlvbiBpcyB0dXJuZWQgb24gb3Igb2ZmLgorICAgICAqIDxwPgorICAgICAqIEBzZWUgI3NldE9wdGlvbgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjIuIFRvIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy1BdWctMzEuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRPcHRpb24oaW50IG9wdGlvbil7CisJICAgIGlmKChvcHRpb25zICYgb3B0aW9uKSE9MCl7CisgICAgICAgICAgICByZXR1cm4gMSA7CisgICAgICAgIH1lbHNleworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdW5kZXJseWluZyB0ZXh0IHN0b3JhZ2UKKyAgICAgKiBAcGFyYW0gZmlsbEluIHRoZSBjaGFyIGJ1ZmZlciB0byBmaWxsIHRoZSBVVEYtMTYgdW5pdHMuCisgICAgICogICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhlCisgICAgICogICAgICAgICB1bmRlcmx5aW5nIHRleHQgc3RvcmFnZQorICAgICAqIEB0aHJvd3MgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgorICAgICAqIEBzZWUgICAjZ2V0TGVuZ3RoCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFRleHQoY2hhcltdIGZpbGxJbil7CisgICAgICAgIHJldHVybiB0ZXh0LmdldFRleHQoZmlsbEluKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHVuZGVybHlpbmcgdGV4dCBzdG9yYWdlCisgICAgICogQHJldHVybiB0aGUgbGVuZ3RoCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8gCisgICAgcHVibGljIGludCBnZXRMZW5ndGgoKXsKKyAgICAgICAgcmV0dXJuIHRleHQuZ2V0TGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRleHQgdW5kZXIgaXRlcmF0aW9uIGFzIGEgc3RyaW5nCisgICAgICogQHBhcmFtIHJlc3VsdCBhIGNvcHkgb2YgdGhlIHRleHQgdW5kZXIgaXRlcmF0aW9uLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCl7CisgICAgICAgIHJldHVybiB0ZXh0LmdldFRleHQoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBpbnB1dCB0ZXh0IG92ZXIgd2hpY2ggdGhpcyA8dHQ+Tm9ybWFsaXplcjwvdHQ+IHdpbGwgaXRlcmF0ZS4KKyAgICAgKiBUaGUgaXRlcmF0aW9uIHBvc2l0aW9uIGlzIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCB0ZXh0LT4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCAgIFRoZSBuZXcgc3RyaW5nIHRvIGJlIG5vcm1hbGl6ZWQuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZ0J1ZmZlciBuZXdUZXh0KXsKKyAgICAgICAgCisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBuZXdJdGVyID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKG5ld1RleHQpOworICAgICAgICBpZiAobmV3SXRlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgYSBuZXcgVUNoYXJhY3Rlckl0ZXJhdG9yIik7CisgICAgICAgIH0gIAorICAgICAgICB0ZXh0ID0gbmV3SXRlcjsKKyAgICAgICAgcmVzZXQoKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogU2V0IHRoZSBpbnB1dCB0ZXh0IG92ZXIgd2hpY2ggdGhpcyA8dHQ+Tm9ybWFsaXplcjwvdHQ+IHdpbGwgaXRlcmF0ZS4KKyAgICAgKiBUaGUgaXRlcmF0aW9uIHBvc2l0aW9uIGlzIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCB0ZXh0LT4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCAgIFRoZSBuZXcgc3RyaW5nIHRvIGJlIG5vcm1hbGl6ZWQuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KGNoYXJbXSBuZXdUZXh0KXsKKyAgICAgICAgCisgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBuZXdJdGVyID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKG5ld1RleHQpOworICAgICAgICBpZiAobmV3SXRlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgYSBuZXcgVUNoYXJhY3Rlckl0ZXJhdG9yIik7CisgICAgICAgIH0gIAorICAgICAgICB0ZXh0ID0gbmV3SXRlcjsKKyAgICAgICAgcmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBpbnB1dCB0ZXh0IG92ZXIgd2hpY2ggdGhpcyA8dHQ+Tm9ybWFsaXplcjwvdHQ+IHdpbGwgaXRlcmF0ZS4KKyAgICAgKiBUaGUgaXRlcmF0aW9uIHBvc2l0aW9uIGlzIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCB0ZXh0LT4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCAgIFRoZSBuZXcgc3RyaW5nIHRvIGJlIG5vcm1hbGl6ZWQuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyBuZXdUZXh0KXsKKwkgICAgCisJCVVDaGFyYWN0ZXJJdGVyYXRvciBuZXdJdGVyID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKG5ld1RleHQpOworCQlpZiAobmV3SXRlciA9PSBudWxsKSB7CisJICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgYSBuZXcgVUNoYXJhY3Rlckl0ZXJhdG9yIik7CisJCX0gIAorCQl0ZXh0ID0gbmV3SXRlcjsKKwkJcmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBpbnB1dCB0ZXh0IG92ZXIgd2hpY2ggdGhpcyA8dHQ+Tm9ybWFsaXplcjwvdHQ+IHdpbGwgaXRlcmF0ZS4KKyAgICAgKiBUaGUgaXRlcmF0aW9uIHBvc2l0aW9uIGlzIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCB0ZXh0LT4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCAgIFRoZSBuZXcgc3RyaW5nIHRvIGJlIG5vcm1hbGl6ZWQuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KENoYXJhY3Rlckl0ZXJhdG9yIG5ld1RleHQpeworICAgICAgICAKKyAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIG5ld0l0ZXIgPSBVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2UobmV3VGV4dCk7CisgICAgICAgIGlmIChuZXdJdGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIGEgbmV3IFVDaGFyYWN0ZXJJdGVyYXRvciIpOworICAgICAgICB9ICAKKyAgICAgICAgdGV4dCA9IG5ld0l0ZXI7CisgICAgICAgIHJlc2V0KCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgaW5wdXQgdGV4dCBvdmVyIHdoaWNoIHRoaXMgPHR0Pk5vcm1hbGl6ZXI8L3R0PiB3aWxsIGl0ZXJhdGUuCisgICAgICogVGhlIGl0ZXJhdGlvbiBwb3NpdGlvbiBpcyBzZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgorICAgICAqIEBwYXJhbSBuZXdUZXh0ICAgVGhlIG5ldyBzdHJpbmcgdG8gYmUgbm9ybWFsaXplZC4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIC8vSW50ZXJuYWwgbWV0aG9kIGZvciBub3cKKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFVDaGFyYWN0ZXJJdGVyYXRvciBuZXdUZXh0KXsgCisgICAgICAgIHRyeXsKKwkgICAgICAgIFVDaGFyYWN0ZXJJdGVyYXRvciBuZXdJdGVyID0gKFVDaGFyYWN0ZXJJdGVyYXRvciluZXdUZXh0LmNsb25lKCk7CisJCSAgICBpZiAobmV3SXRlciA9PSBudWxsKSB7CisJCQkgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgYSBuZXcgVUNoYXJhY3Rlckl0ZXJhdG9yIik7CisJCSAgICB9CisJCSAgICB0ZXh0ID0gbmV3SXRlcjsKKwkJICAgIHJlc2V0KCk7CisgICAgICAgIH1jYXRjaChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJDb3VsZCBub3QgY2xvbmUgdGhlIFVDaGFyYWN0ZXJJdGVyYXRvciIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFByaXZhdGUgdXRpbGl0eSBtZXRob2RzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisKKyAgICAvKiBiYWNrd2FyZCBpdGVyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICAgICAgICAgICAKKyAgICAvKgorICAgICAqIHJlYWQgYmFja3dhcmRzIGFuZCBnZXQgbm9ybTMyCisgICAgICogcmV0dXJuIDAgaWYgdGhlIGNoYXJhY3RlciBpcyA8bWluQworICAgICAqIGlmIGMyIT0wIHRoZW4gKGMyLCBjKSBpcyBhIHN1cnJvZ2F0ZSBwYWlyIChyZXZlcnNlZCAtIGMyIGlzIGZpcnN0IAorICAgICAqIHN1cnJvZ2F0ZSBidXQgcmVhZCBzZWNvbmQhKQorICAgICAqLworCisgICAgcHJpdmF0ZSBzdGF0aWMgIGxvbmcgZ2V0UHJldk5vcm0zMihVQ2hhcmFjdGVySXRlcmF0b3Igc3JjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIG1pbkMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWFzaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBjaGFycykgeworICAgICAgICBsb25nIG5vcm0zMjsKKyAgICAgICAgaW50IGNoPTA7CisgICAgICAgIC8qIG5lZWQgc3JjLmhhc1ByZXZpb3VzKCkgKi8KKyAgICAgICAgaWYoKGNoPXNyYy5wcmV2aW91cygpKSA9PSBVQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSl7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBjaGFyc1swXT0oY2hhciljaDsKKyAgICAgICAgY2hhcnNbMV09MDsKKyAgICAKKyAgICAgICAgLyogY2hlY2sgZm9yIGEgc3Vycm9nYXRlIGJlZm9yZSBnZXR0aW5nIG5vcm0zMiB0byBzZWUgaWYgd2UgbmVlZCB0byAKKyAgICAgICAgICogcHJlZGVjcmVtZW50IGZ1cnRoZXIgKi8KKyAgICAgICAgaWYoY2hhcnNbMF08bWluQykgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZSBpZighVVRGMTYuaXNTdXJyb2dhdGUoY2hhcnNbMF0pKSB7CisgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplckltcGwuZ2V0Tm9ybTMyKGNoYXJzWzBdKTsKKyAgICAgICAgfSBlbHNlIGlmKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShjaGFyc1swXSkgfHwgKHNyYy5nZXRJbmRleCgpPT0wKSkgeworICAgICAgICAgICAgLyogdW5wYWlyZWQgc3Vycm9nYXRlICovCisgICAgICAgICAgICBjaGFyc1sxXT0oY2hhcilzcmMuY3VycmVudCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZSBpZihVVEYxNi5pc0xlYWRTdXJyb2dhdGUoY2hhcnNbMV09KGNoYXIpc3JjLnByZXZpb3VzKCkpKSB7CisgICAgICAgICAgICBub3JtMzI9Tm9ybWFsaXplckltcGwuZ2V0Tm9ybTMyKGNoYXJzWzFdKTsKKyAgICAgICAgICAgIGlmKChub3JtMzImbWFzayk9PTApIHsKKyAgICAgICAgICAgICAgICAvKiBhbGwgc3Vycm9nYXRlIHBhaXJzIHdpdGggdGhpcyBsZWFkIHN1cnJvZ2F0ZSBoYXZlIGlycmVsZXZhbnQgCisgICAgICAgICAgICAgICAgICogZGF0YSAqLworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBub3JtMzIgbXVzdCBiZSBhIHN1cnJvZ2F0ZSBzcGVjaWFsICovCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZXJJbXBsLmdldE5vcm0zMkZyb21TdXJyb2dhdGVQYWlyKG5vcm0zMixjaGFyc1swXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiB1bnBhaXJlZCBzZWNvbmQgc3Vycm9nYXRlLCB1bmRvIHRoZSBjMj1zcmMucHJldmlvdXMoKSBtb3ZlbWVudCAqLworICAgICAgICAgICAgc3JjLm1vdmVJbmRleCggMSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICBwcml2YXRlIGludGVyZmFjZSBJc1ByZXZCb3VuZGFyeXsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNQcmV2Qm91bmRhcnkoVUNoYXJhY3Rlckl0ZXJhdG9yIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIG1pbkMsIAorICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWFzaywgCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBjaGFycyk7CisgICAgfQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIElzUHJldk5GRFNhZmUgaW1wbGVtZW50cyBJc1ByZXZCb3VuZGFyeXsKKyAgICAgICAgLyoKKyAgICAgICAgICogZm9yIE5GKkQ6CisgICAgICAgICAqIHJlYWQgYmFja3dhcmRzIGFuZCBjaGVjayBpZiB0aGUgbGVhZCBjb21iaW5pbmcgY2xhc3MgaXMgMAorICAgICAgICAgKiBpZiBjMiE9MCB0aGVuIChjMiwgYykgaXMgYSBzdXJyb2dhdGUgcGFpciAocmV2ZXJzZWQgLSBjMiBpcyBmaXJzdCAKKyAgICAgICAgICogc3Vycm9nYXRlIGJ1dCByZWFkIHNlY29uZCEpCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1ByZXZCb3VuZGFyeShVQ2hhcmFjdGVySXRlcmF0b3Igc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWluQywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC8qdW5zaWduZWQqLyBjY09yUUNNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGNoYXJzKSB7CisgICAgCisgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplckltcGwuaXNORkRTYWZlKGdldFByZXZOb3JtMzIoc3JjLCBtaW5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY09yUUNNYXNrLCBjaGFycyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY09yUUNNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NPclFDTWFzayYgTm9ybWFsaXplckltcGwuUUNfTUFTSyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgSXNQcmV2VHJ1ZVN0YXJ0ZXIgaW1wbGVtZW50cyBJc1ByZXZCb3VuZGFyeXsKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVhZCBiYWNrd2FyZHMgYW5kIGNoZWNrIGlmIHRoZSBjaGFyYWN0ZXIgaXMgKG9yIGl0cyBkZWNvbXBvc2l0aW9uIAorICAgICAgICAgKiBiZWdpbnMgd2l0aCkgYSAidHJ1ZSBzdGFydGVyIiAoY2M9PTAgYW5kIE5GKkNfWUVTKQorICAgICAgICAgKiBpZiBjMiE9MCB0aGVuIChjMiwgYykgaXMgYSBzdXJyb2dhdGUgcGFpciAocmV2ZXJzZWQgLSBjMiBpcyBmaXJzdCAKKyAgICAgICAgICogc3Vycm9nYXRlIGJ1dCByZWFkIHNlY29uZCEpCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1ByZXZCb3VuZGFyeShVQ2hhcmFjdGVySXRlcmF0b3Igc3JjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIG1pbkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC8qdW5zaWduZWQqLyBjY09yUUNNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gY2hhcnMpIHsKKyAgICAgICAgICAgIGxvbmcgbm9ybTMyOyAKKyAgICAgICAgICAgIGludC8qdW5zaWduZWQqLyBkZWNvbXBRQ01hc2s7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlY29tcFFDTWFzaz0oY2NPclFDTWFzazw8MikmMHhmOyAvKmRlY29tcG9zaXRpb24gcXVpY2sgY2hlY2sgbWFzayovCisgICAgICAgICAgICBub3JtMzI9Z2V0UHJldk5vcm0zMihzcmMsIG1pbkMsIGNjT3JRQ01hc2t8ZGVjb21wUUNNYXNrLCBjaGFycyk7CisgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplckltcGwuaXNUcnVlU3RhcnRlcihub3JtMzIsY2NPclFDTWFzayxkZWNvbXBRQ01hc2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGludCBmaW5kUHJldmlvdXNJdGVyYXRpb25Cb3VuZGFyeShVQ2hhcmFjdGVySXRlcmF0b3Igc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc1ByZXZCb3VuZGFyeSBvYmosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWluQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LyptYXNrKi8gbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGJ1ZmZlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIHN0YXJ0SW5kZXgpIHsKKyAgICAgICAgY2hhcltdIGNoYXJzPW5ldyBjaGFyWzJdOworICAgICAgICBib29sZWFuIGlzQm91bmRhcnk7CisgICAgCisgICAgICAgICAvKiBmaWxsIHRoZSBidWZmZXIgZnJvbSB0aGUgZW5kIGJhY2t3YXJkcyAqLworICAgICAgICBzdGFydEluZGV4WzBdID0gYnVmZmVyLmxlbmd0aDsKKyAgICAgICAgY2hhcnNbMF09MDsKKyAgICAgICAgd2hpbGUoc3JjLmdldEluZGV4KCk+MCAmJiBjaGFyc1swXSE9VUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpIHsKKyAgICAgICAgICAgIGlzQm91bmRhcnk9b2JqLmlzUHJldkJvdW5kYXJ5KHNyYywgbWluQywgbWFzaywgY2hhcnMpOworICAgIAorICAgICAgICAgICAgLyogYWx3YXlzIHdyaXRlIHRoaXMgY2hhcmFjdGVyIHRvIHRoZSBmcm9udCBvZiB0aGUgYnVmZmVyICovCisgICAgICAgICAgICAvKiBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIgKi8KKyAgICAgICAgICAgIGlmKHN0YXJ0SW5kZXhbMF0gPCAoY2hhcnNbMV09PTAgPyAxIDogMikpIHsKKworICAgICAgICAgICAgICAgIC8vIGdyb3cgdGhlIGJ1ZmZlcgorICAgICAgICAgICAgICAgIGNoYXJbXSBuZXdCdWYgPSBuZXcgY2hhcltidWZmZXIubGVuZ3RoKjJdOworICAgICAgICAgICAgICAgIC8qIG1vdmUgdGhlIGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIHVwICovCisgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShidWZmZXIsc3RhcnRJbmRleFswXSxuZXdCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCdWYubGVuZ3RoLShidWZmZXIubGVuZ3RoLXN0YXJ0SW5kZXhbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmxlbmd0aC1zdGFydEluZGV4WzBdKTsKKyAgICAgICAgICAgICAgICAvL2FkanVzdCB0aGUgc3RhcnRJbmRleAorICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXhbMF0rPW5ld0J1Zi5sZW5ndGgtYnVmZmVyLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBidWZmZXI9bmV3QnVmOworICAgICAgICAgICAgICAgIG5ld0J1Zj1udWxsOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGJ1ZmZlclstLXN0YXJ0SW5kZXhbMF1dPWNoYXJzWzBdOworICAgICAgICAgICAgaWYoY2hhcnNbMV0hPTApIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbLS1zdGFydEluZGV4WzBdXT1jaGFyc1sxXTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8qIHN0b3AgaWYgdGhpcyBqdXN0LWNvcGllZCBjaGFyYWN0ZXIgaXMgYSBib3VuZGFyeSAqLworICAgICAgICAgICAgaWYoaXNCb3VuZGFyeSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIC8qIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgY29udGVudHMgKi8KKyAgICAgICAgcmV0dXJuIGJ1ZmZlci5sZW5ndGgtc3RhcnRJbmRleFswXTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHByZXZpb3VzKFVDaGFyYWN0ZXJJdGVyYXRvciBzcmMsCisgICAgICAgICAgICAgICAgICAgY2hhcltdIGRlc3QsIGludCBkZXN0U3RhcnQsIGludCBkZXN0TGltaXQsIAorICAgICAgICAgICAgICAgICAgIE1vZGUgbW9kZSwgCisgICAgICAgICAgICAgICAgICAgLyppbnQgb3B0aW9ucywqLworICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZG9Ob3JtYWxpemUsIAorICAgICAgICAgICAgICAgICAgIGJvb2xlYW5bXSBwTmVlZGVkVG9Ob3JtYWxpemUpIHsKKworICAgICAgICBJc1ByZXZCb3VuZGFyeSBpc1ByZXZpb3VzQm91bmRhcnk7CisgICAgICAgIGludCBkZXN0TGVuZ3RoLCBidWZmZXJMZW5ndGg7CisgICAgICAgIGludC8qdW5zaWduZWQqLyBtYXNrOworICAgICAgICBpbnRbXSBzdGFydEluZGV4PSBuZXcgaW50WzFdOworICAgICAgICBpbnQgYyxjMjsKKyAgICAgICAgCisgICAgICAgIGNoYXIgbWluQzsKKyAgICAgICAgaW50IGRlc3RDYXBhY2l0eSA9IGRlc3RMaW1pdC1kZXN0U3RhcnQ7CisgICAgICAgIGRlc3RMZW5ndGg9MDsKKyAgICAgICAgY2hhcltdIGJ1ZmZlciA9IG5ldyBjaGFyWzEwMF07CisgICAgICAgIAorICAgICAgICBpZihwTmVlZGVkVG9Ob3JtYWxpemUhPW51bGwpIHsKKyAgICAgICAgICAgIHBOZWVkZWRUb05vcm1hbGl6ZVswXT1mYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtaW5DID0gKGNoYXIpbW9kZS5nZXRNaW5DKCk7CisgICAgICAgIG1hc2sgPSBtb2RlLmdldE1hc2soKTsKKyAgICAgICAgaXNQcmV2aW91c0JvdW5kYXJ5ID0gbW9kZS5nZXRQcmV2Qm91bmRhcnkoKTsKKworICAgICAgICBpZihpc1ByZXZpb3VzQm91bmRhcnk9PW51bGwpeworICAgICAgICAgICAgZGVzdExlbmd0aD0wOworICAgICAgICAgICAgaWYoKGM9c3JjLnByZXZpb3VzKCkpPj0wKSB7CisgICAgICAgICAgICAgICAgZGVzdExlbmd0aD0xOworICAgICAgICAgICAgICAgIGlmKFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoKGNoYXIpYykpeworICAgICAgICAgICAgICAgICAgICBjMj0gc3JjLnByZXZpb3VzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmKGMyIT0gVUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKChjaGFyKWMyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlc3RDYXBhY2l0eT49MikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0WzFdPShjaGFyKWM7IC8vIHRyYWlsIHN1cnJvZ2F0ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdExlbmd0aD0yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWFkIHN1cnJvZ2F0ZSB0byBiZSB3cml0dGVuIGJlbG93IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9YzI7IAorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMubW92ZUluZGV4KDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgICAgIGlmKGRlc3RDYXBhY2l0eT4wKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMF09KGNoYXIpYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVzdExlbmd0aDsKKyAgICAgICAgIH0KKyAgICAKKyAgICAgICAgYnVmZmVyTGVuZ3RoPWZpbmRQcmV2aW91c0l0ZXJhdGlvbkJvdW5kYXJ5KHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJldmlvdXNCb3VuZGFyeSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5DLCBtYXNrLGJ1ZmZlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4KTsKKyAgICAgICAgaWYoYnVmZmVyTGVuZ3RoPjApIHsKKyAgICAgICAgICAgIGlmKGRvTm9ybWFsaXplKSB7CisgICAgICAgICAgICAgICAgZGVzdExlbmd0aD1Ob3JtYWxpemVyLm5vcm1hbGl6ZShidWZmZXIsc3RhcnRJbmRleFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4WzBdK2J1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LCBkZXN0U3RhcnQsZGVzdExpbWl0LG1vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmKHBOZWVkZWRUb05vcm1hbGl6ZSE9bnVsbCkgeworICAgICAgICAgICAgICAgICAgICBwTmVlZGVkVG9Ob3JtYWxpemVbMF09KGJvb2xlYW4pKGRlc3RMZW5ndGghPWJ1ZmZlckxlbmd0aCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuYXJyYXlSZWdpb25NYXRjaGVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLDAsZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTdGFydCxkZXN0TGltaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyoganVzdCBjb3B5IHRoZSBzb3VyY2UgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgICAgIGlmKGRlc3RDYXBhY2l0eT4wKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnVmZmVyLHN0YXJ0SW5kZXhbMF0sZGVzdCwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXJMZW5ndGg8ZGVzdENhcGFjaXR5KSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA6IGRlc3RDYXBhY2l0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gCisKKyAgICAKKyAgICAgICAgcmV0dXJuIGRlc3RMZW5ndGg7CisgICAgfQorCisgCisgICAgCisgICAgLyogZm9yd2FyZCBpdGVyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIC8qCisgICAgICogcmVhZCBmb3J3YXJkIGFuZCBjaGVjayBpZiB0aGUgY2hhcmFjdGVyIGlzIGEgbmV4dC1pdGVyYXRpb24gYm91bmRhcnkKKyAgICAgKiBpZiBjMiE9MCB0aGVuIChjLCBjMikgaXMgYSBzdXJyb2dhdGUgcGFpcgorICAgICAqLworICAgIHByaXZhdGUgaW50ZXJmYWNlIElzTmV4dEJvdW5kYXJ5eworICAgICAgICBib29sZWFuIGlzTmV4dEJvdW5kYXJ5KFVDaGFyYWN0ZXJJdGVyYXRvciBzcmMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC8qdW5zaWduZWQqLyBtaW5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWFzaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gY2hhcnMpOworICAgIH0gICAKKyAgICAvKgorICAgICAqIHJlYWQgZm9yd2FyZCBhbmQgZ2V0IG5vcm0zMgorICAgICAqIHJldHVybiAwIGlmIHRoZSBjaGFyYWN0ZXIgaXMgPG1pbkMKKyAgICAgKiBpZiBjMiE9MCB0aGVuIChjMiwgYykgaXMgYSBzdXJyb2dhdGUgcGFpcgorICAgICAqIGFsd2F5cyByZWFkcyBjb21wbGV0ZSBjaGFyYWN0ZXJzCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyAvKnVuc2lnbmVkKi8gZ2V0TmV4dE5vcm0zMihVQ2hhcmFjdGVySXRlcmF0b3Igc3JjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIG1pbkMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gbWFzaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIGNoYXJzKSB7CisgICAgICAgIGxvbmcgbm9ybTMyOworICAgIAorICAgICAgICAvKiBuZWVkIHNyYy5oYXNOZXh0KCkgdG8gYmUgdHJ1ZSAqLworICAgICAgICBjaGFyc1swXT1zcmMubmV4dCgpOworICAgICAgICBjaGFyc1sxXT0wOworICAgIAorICAgICAgICBpZihjaGFyc1swXTxtaW5DKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIAorICAgICAgICBub3JtMzI9Tm9ybWFsaXplckltcGwuZ2V0Tm9ybTMyKChjaGFyKWNoYXJzWzBdKTsKKyAgICAgICAgaWYoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKChjaGFyKWNoYXJzWzBdKSkgeworICAgICAgICAgICAgaWYoc3JjLmN1cnJlbnQoKSE9VUNoYXJhY3Rlckl0ZXJhdG9yLkRPTkUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoKGNoYXIpKGNoYXJzWzFdPXNyYy5jdXJyZW50KCkpKSl7CisgICAgICAgICAgICAgICAgc3JjLm1vdmVJbmRleCgxKTsgLyogc2tpcCB0aGUgYzIgc3Vycm9nYXRlICovCisgICAgICAgICAgICAgICAgaWYoKG5vcm0zMiZtYXNrKT09MCkgeworICAgICAgICAgICAgICAgICAgICAvKiBpcnJlbGV2YW50IGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogbm9ybTMyIG11c3QgYmUgYSBzdXJyb2dhdGUgc3BlY2lhbCAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9ybWFsaXplckltcGwuZ2V0Tm9ybTMyRnJvbVN1cnJvZ2F0ZVBhaXIobm9ybTMyLChjaGFyKWNoYXJzWzFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHVubWF0Y2hlZCBzdXJyb2dhdGUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9ybTMyOworICAgIH0KKworCisgICAgLyoKKyAgICAgKiBmb3IgTkYqRDoKKyAgICAgKiByZWFkIGZvcndhcmQgYW5kIGNoZWNrIGlmIHRoZSBsZWFkIGNvbWJpbmluZyBjbGFzcyBpcyAwCisgICAgICogaWYgYzIhPTAgdGhlbiAoYywgYzIpIGlzIGEgc3Vycm9nYXRlIHBhaXIKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBJc05leHRORkRTYWZlIGltcGxlbWVudHMgSXNOZXh0Qm91bmRhcnl7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzTmV4dEJvdW5kYXJ5KFVDaGFyYWN0ZXJJdGVyYXRvciBzcmMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC8qdW5zaWduZWQqLyBtaW5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gY2NPclFDTWFzaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gY2hhcnMpIHsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5pc05GRFNhZmUoZ2V0TmV4dE5vcm0zMihzcmMsbWluQyxjY09yUUNNYXNrLGNoYXJzKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjT3JRQ01hc2ssIGNjT3JRQ01hc2smTm9ybWFsaXplckltcGwuUUNfTUFTSyk7CisgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIGZvciBORipDOgorICAgICAqIHJlYWQgZm9yd2FyZCBhbmQgY2hlY2sgaWYgdGhlIGNoYXJhY3RlciBpcyAob3IgaXRzIGRlY29tcG9zaXRpb24gYmVnaW5zIAorICAgICAqIHdpdGgpIGEgInRydWUgc3RhcnRlciIgKGNjPT0wIGFuZCBORipDX1lFUykKKyAgICAgKiBpZiBjMiE9MCB0aGVuIChjLCBjMikgaXMgYSBzdXJyb2dhdGUgcGFpcgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIElzTmV4dFRydWVTdGFydGVyIGltcGxlbWVudHMgSXNOZXh0Qm91bmRhcnl7CisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzTmV4dEJvdW5kYXJ5KFVDaGFyYWN0ZXJJdGVyYXRvciBzcmMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC8qdW5zaWduZWQqLyBtaW5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQvKnVuc2lnbmVkKi8gY2NPclFDTWFzaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gY2hhcnMpIHsKKyAgICAgICAgICAgIGxvbmcgbm9ybTMyOworICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIGRlY29tcFFDTWFzazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVjb21wUUNNYXNrPShjY09yUUNNYXNrPDwyKSYweGY7IC8qZGVjb21wb3NpdGlvbiBxdWljayBjaGVjayBtYXNrKi8KKyAgICAgICAgICAgIG5vcm0zMj1nZXROZXh0Tm9ybTMyKHNyYywgbWluQywgY2NPclFDTWFza3xkZWNvbXBRQ01hc2ssIGNoYXJzKTsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5pc1RydWVTdGFydGVyKG5vcm0zMiwgY2NPclFDTWFzaywgZGVjb21wUUNNYXNrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZmluZE5leHRJdGVyYXRpb25Cb3VuZGFyeShVQ2hhcmFjdGVySXRlcmF0b3Igc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzTmV4dEJvdW5kYXJ5IG9iaiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Lyp1bnNpZ25lZCovIG1pbkMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC8qdW5zaWduZWQqLyBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBidWZmZXIpIHsKKyAgICAgICAgaW50W10gY2hhcnMgPSBuZXcgaW50WzJdOworICAgICAgICBpbnQgYnVmZmVySW5kZXggPTA7CisgICAgICAgIAorICAgICAgICBpZihzcmMuY3VycmVudCgpPT1VQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSl7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAvKiBnZXQgb25lIGNoYXJhY3RlciBhbmQgaWdub3JlIGl0cyBwcm9wZXJ0aWVzICovCisgICAgICAgIGNoYXJzWzBdPXNyYy5uZXh0KCk7CisgICAgICAgIGJ1ZmZlclswXT0oY2hhciljaGFyc1swXTsKKyAgICAgICAgYnVmZmVySW5kZXg9MTsKKyAgICAgICAgCisgICAgICAgIGlmKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZSgoY2hhciljaGFyc1swXSkmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMuY3VycmVudCgpIT1VQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSl7CisgICAgICAgICAgICBpZihVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKChjaGFyKShjaGFyc1sxXT1zcmMubmV4dCgpKSkpeworICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJJbmRleCsrXT0oY2hhciljaGFyc1sxXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3JjLm1vdmVJbmRleCgtMSk7IC8qIGJhY2sgb3V0IHRoZSBub24tdHJhaWwtc3Vycm9nYXRlICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLyogZ2V0IGFsbCBmb2xsb3dpbmcgY2hhcmFjdGVycyB1bnRpbCB3ZSBzZWUgYSBib3VuZGFyeSAqLworICAgICAgICAvKiBjaGVja2luZyBoYXNOZXh0KCkgaW5zdGVhZCBvZiBjIT1ET05FIG9uIHRoZSBvZmYtY2hhbmNlIHRoYXQgVStmZmZmIAorICAgICAgICAgKiBpcyBwYXJ0IG9mIHRoZSBzdHJpbmcgKi8KKyAgICAgICAgd2hpbGUoIHNyYy5jdXJyZW50KCkhPVVDaGFyYWN0ZXJJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICBpZihvYmouaXNOZXh0Qm91bmRhcnkoc3JjLCBtaW5DLCBtYXNrLCBjaGFycykpIHsKKyAgICAgICAgICAgICAgICAvKiBiYWNrIG91dCB0aGUgbGF0ZXN0IG1vdmVtZW50IHRvIHN0b3AgYXQgdGhlIGJvdW5kYXJ5ICovCisgICAgICAgICAgICAgICAgc3JjLm1vdmVJbmRleChjaGFyc1sxXT09MCA/IC0xIDogLTIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZihidWZmZXJJbmRleCsoY2hhcnNbMV09PTAgPyAxIDogMik8PWJ1ZmZlci5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckluZGV4KytdPShjaGFyKWNoYXJzWzBdOworICAgICAgICAgICAgICAgICAgICBpZihjaGFyc1sxXSE9MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckluZGV4KytdPShjaGFyKWNoYXJzWzFdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBuZXdCdWYgPSBuZXcgY2hhcltidWZmZXIubGVuZ3RoICAgICoyXTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShidWZmZXIsMCxuZXdCdWYsMCxidWZmZXJJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ld0J1ZjsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckluZGV4KytdPShjaGFyKWNoYXJzWzBdOworICAgICAgICAgICAgICAgICAgICBpZihjaGFyc1sxXSE9MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckluZGV4KytdPShjaGFyKWNoYXJzWzFdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIC8qIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgY29udGVudHMgKi8KKyAgICAgICAgcmV0dXJuIGJ1ZmZlckluZGV4OworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgbmV4dChVQ2hhcmFjdGVySXRlcmF0b3Igc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIGRlc3QsIGludCBkZXN0U3RhcnQsIGludCBkZXN0TGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVyLk1vZGUgbW9kZSwgLyppbnQgb3B0aW9ucywqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBkb05vcm1hbGl6ZSwgYm9vbGVhbltdIHBOZWVkZWRUb05vcm1hbGl6ZSl7CisgICAgICAgIGNoYXJbXSBidWZmZXI9bmV3IGNoYXJbMTAwXTsKKyAgICAgICAgSXNOZXh0Qm91bmRhcnkgaXNOZXh0Qm91bmRhcnk7CisgICAgICAgIGludCAvKnVuc2lnbmVkKi8gbWFzazsKKyAgICAgICAgaW50IC8qdW5zaWduZWQqLyBidWZmZXJMZW5ndGg7CisgICAgICAgIGludCBjLGMyOworICAgICAgICBjaGFyIG1pbkM7CisgICAgICAgIGludCBkZXN0Q2FwYWNpdHkgPSBkZXN0TGltaXQgLSBkZXN0U3RhcnQ7CisgICAgICAgIGludCBkZXN0TGVuZ3RoID0gMDsKKyAgICAgICAgaW50W10gc3RhcnRJbmRleCA9IG5ldyBpbnRbMV07CisgICAgICAgIGlmKHBOZWVkZWRUb05vcm1hbGl6ZSE9bnVsbCkgeworICAgICAgICAgICAgcE5lZWRlZFRvTm9ybWFsaXplWzBdPWZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbWluQyA9IChjaGFyKW1vZGUuZ2V0TWluQygpOworICAgICAgICBtYXNrID0gbW9kZS5nZXRNYXNrKCk7CisgICAgICAgIGlzTmV4dEJvdW5kYXJ5ID0gbW9kZS5nZXROZXh0Qm91bmRhcnkoKTsKKyAgICAgICAgCisgICAgICAgIGlmKGlzTmV4dEJvdW5kYXJ5PT1udWxsKXsKKyAgICAgICAgICAgIGRlc3RMZW5ndGg9MDsKKyAgICAgICAgICAgIGM9c3JjLm5leHQoKTsKKyAgICAgICAgICAgIGlmKGMhPVVDaGFyYWN0ZXJJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgICAgZGVzdExlbmd0aD0xOworICAgICAgICAgICAgICAgIGlmKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZSgoY2hhciljKSl7CisgICAgICAgICAgICAgICAgICAgIGMyPSBzcmMubmV4dCgpOworICAgICAgICAgICAgICAgICAgICBpZihjMiE9IFVDaGFyYWN0ZXJJdGVyYXRvci5ET05FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKChjaGFyKWMyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlc3RDYXBhY2l0eT49MikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0WzFdPShjaGFyKWMyOyAvLyB0cmFpbCBzdXJyb2dhdGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RMZW5ndGg9MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVhZCBzdXJyb2dhdGUgdG8gYmUgd3JpdHRlbiBiZWxvdyAKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLm1vdmVJbmRleCgtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgICAgaWYoZGVzdENhcGFjaXR5PjApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFswXT0oY2hhciljOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBkZXN0TGVuZ3RoOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBidWZmZXJMZW5ndGg9ZmluZE5leHRJdGVyYXRpb25Cb3VuZGFyeShzcmMsaXNOZXh0Qm91bmRhcnksIG1pbkMsIG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcik7CisgICAgICAgIGlmKGJ1ZmZlckxlbmd0aD4wKSB7CisgICAgICAgICAgICBpZihkb05vcm1hbGl6ZSkgeworICAgICAgICAgICAgICAgIGRlc3RMZW5ndGg9bW9kZS5ub3JtYWxpemUoYnVmZmVyLHN0YXJ0SW5kZXhbMF0sYnVmZmVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCxkZXN0U3RhcnQsZGVzdExpbWl0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZihwTmVlZGVkVG9Ob3JtYWxpemUhPW51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcE5lZWRlZFRvTm9ybWFsaXplWzBdPShib29sZWFuKShkZXN0TGVuZ3RoIT1idWZmZXJMZW5ndGggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGl0eS5hcnJheVJlZ2lvbk1hdGNoZXMoYnVmZmVyLHN0YXJ0SW5kZXhbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsZGVzdFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0TGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBqdXN0IGNvcHkgdGhlIHNvdXJjZSBjaGFyYWN0ZXJzICovCisgICAgICAgICAgICAgICAgaWYoZGVzdENhcGFjaXR5PjApIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShidWZmZXIsMCxkZXN0LGRlc3RTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihidWZmZXJMZW5ndGgsZGVzdENhcGFjaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBkZXN0TGVuZ3RoOworICAgIH0gCisKKyAgICBwcml2YXRlIHZvaWQgY2xlYXJCdWZmZXIoKSB7CisgICAgICAgIGJ1ZmZlckxpbWl0PWJ1ZmZlclN0YXJ0PWJ1ZmZlclBvcz0wOworICAgIH0KKwkKKyAgICBwcml2YXRlIGJvb2xlYW4gbmV4dE5vcm1hbGl6ZSgpIHsKKyAgICAgICAgCisJCWNsZWFyQnVmZmVyKCk7CisJCWN1cnJlbnRJbmRleD1uZXh0SW5kZXg7CisJCXRleHQuc2V0SW5kZXgobmV4dEluZGV4KTsKKwkgICAgICAgIAorCQlidWZmZXJMaW1pdD1uZXh0KHRleHQsYnVmZmVyLGJ1ZmZlclN0YXJ0LGJ1ZmZlci5sZW5ndGgsbW9kZSx0cnVlLG51bGwpOworCSAgICAgICAgICAgICAgICAKKwkJbmV4dEluZGV4PXRleHQuZ2V0SW5kZXgoKTsKKwkJcmV0dXJuIChidWZmZXJMaW1pdD4wKTsKKyAgICB9CisJCisgICAgcHJpdmF0ZSBib29sZWFuCXByZXZpb3VzTm9ybWFsaXplKCkgeworCisJCWNsZWFyQnVmZmVyKCk7CisJCW5leHRJbmRleD1jdXJyZW50SW5kZXg7CisJCXRleHQuc2V0SW5kZXgoY3VycmVudEluZGV4KTsKKwkJYnVmZmVyTGltaXQ9cHJldmlvdXModGV4dCxidWZmZXIsYnVmZmVyU3RhcnQsYnVmZmVyLmxlbmd0aCxtb2RlLHRydWUsbnVsbCk7CisJCQorCQljdXJyZW50SW5kZXg9dGV4dC5nZXRJbmRleCgpOworCSAgICBidWZmZXJQb3MgPSBidWZmZXJMaW1pdDsKKwkJcmV0dXJuIGJ1ZmZlckxpbWl0PjA7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgaW50IGdldENvZGVQb2ludEF0KGludCBpbmRleCl7CisgICAgICAgIGlmKCBVVEYxNi5pc1N1cnJvZ2F0ZShidWZmZXJbaW5kZXhdKSl7CisgICAgICAgICAgICBpZihVVEYxNi5pc0xlYWRTdXJyb2dhdGUoYnVmZmVyW2luZGV4XSkpeworICAgICAgICAgICAgICAgIGlmKChpbmRleCsxKTxidWZmZXJMaW1pdCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShidWZmZXJbaW5kZXgrMV0pKXsKKwkJICAgICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRSYXdTdXBwbGVtZW50YXJ5KAorCQkJCSAgICAgICAgCSAgICAgICAgICBidWZmZXJbaW5kZXhdLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2luZGV4KzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9ZWxzZSBpZihVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGJ1ZmZlcltpbmRleF0pKXsKKyAgICAgICAgICAgICAgICBpZihpbmRleD4wICYmIFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShidWZmZXJbaW5kZXgtMV0pKXsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRSYXdTdXBwbGVtZW50YXJ5KAorCQkJCQkJCQkgICAgIGJ1ZmZlcltpbmRleC0xXSwKKwkJCQkJCQkJICAgICBidWZmZXJbaW5kZXhdCisJCQkJCQkJCSAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9ICAgCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ1ZmZlcltpbmRleF07CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBBUEkKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNORlNraXBwYWJsZShpbnQgYywgTW9kZSBtb2RlKXsKKyAgICAgICAgcmV0dXJuIG1vZGUuaXNORlNraXBwYWJsZShjKTsKKyAgICB9ICAgICAgICAgICAgICAKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L051bGxUcmFuc2xpdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvTnVsbFRyYW5zbGl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjM2ZjE2NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L051bGxUcmFuc2xpdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L051bGxUcmFuc2xpdGVyYXRvci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzAzIDE4OjU3OjM2ICQgCisgKiAkUmV2aXNpb246IDEuMTEgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogQSB0cmFuc2xpdGVyYXRvciB0aGF0IGxlYXZlcyB0ZXh0IHVuY2hhbmdlZC4KKyAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZWNvbWUgcHJpdmF0ZSBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAqLworcHVibGljIGNsYXNzIE51bGxUcmFuc2xpdGVyYXRvciBleHRlbmRzIFRyYW5zbGl0ZXJhdG9yIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgIlx1MDBBOSBJQk0gQ29ycG9yYXRpb24gMjAwMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLyoqCisgICAgICogUGFja2FnZSBhY2Nlc3NpYmxlIElEcyBmb3IgdGhpcyB0cmFuc2xpdGVyYXRvci4KKyAgICAgKi8KKyAgICBzdGF0aWMgU3RyaW5nIFNIT1JUX0lEID0gIk51bGwiOworICAgIHN0YXRpYyBTdHJpbmcgX0lEICAgICAgPSAiQW55LU51bGwiOworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZWNvbWUgcHJpdmF0ZSBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgTnVsbFRyYW5zbGl0ZXJhdG9yKCkgeworICAgICAgICBzdXBlcihfSUQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudHMge0BsaW5rIFRyYW5zbGl0ZXJhdG9yI2hhbmRsZVRyYW5zbGl0ZXJhdGV9LgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZWNvbWUgcHJpdmF0ZSBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVUcmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBvZmZzZXRzLCBib29sZWFuIGluY3JlbWVudGFsKSB7CisgICAgICAgIG9mZnNldHMuc3RhcnQgPSBvZmZzZXRzLmxpbWl0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L051bWJlckZvcm1hdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvTnVtYmVyRm9ybWF0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWFkNzRkMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L051bWJlckZvcm1hdC5qYXZhCkBAIC0wLDAgKzEsMTEzNSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvTnVtYmVyRm9ybWF0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjE6NDIgJCAKKyAqICRSZXZpc2lvbjogMS4yMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGphdmEuaW8uSW52YWxpZE9iamVjdEV4Y2VwdGlvbjsgLy9CdWcgNDE4NTc2MSBbUmljaGFyZC9HQ0xdCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworaW1wb3J0IGphdmEudGV4dC5Gb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5QYXJzZVBvc2l0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZURhdGE7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZS5GYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZVNlcnZpY2UuSUNVUmVzb3VyY2VCdW5kbGVGYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZS5Mb2NhbGVLZXlGYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuTG9jYWxlVXRpbGl0eTsKKworLyoqCisgKiA8Y29kZT5OdW1iZXJGb3JtYXQ8L2NvZGU+IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbGwgbnVtYmVyCisgKiBmb3JtYXRzLiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBpbnRlcmZhY2UgZm9yIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcKKyAqIG51bWJlcnMuIDxjb2RlPk51bWJlckZvcm1hdDwvY29kZT4gYWxzbyBwcm92aWRlcyBtZXRob2RzIGZvciBkZXRlcm1pbmluZworICogd2hpY2ggbG9jYWxlcyBoYXZlIG51bWJlciBmb3JtYXRzLCBhbmQgd2hhdCB0aGVpciBuYW1lcyBhcmUuCisgKgorICogPHA+PHN0cm9uZz5UaGlzIGlzIGFuIGVuaGFuY2VkIHZlcnNpb24gb2YgPGNvZGU+TnVtYmVyRm9ybWF0PC9jb2RlPiB0aGF0CisgKiBpcyBiYXNlZCBvbiB0aGUgc3RhbmRhcmQgdmVyc2lvbiBpbiB0aGUgSkRLLiAgTmV3IG9yIGNoYW5nZWQgZnVuY3Rpb25hbGl0eQorICogaXMgbGFiZWxlZAorICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPiBvcgorICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+Q0hBTkdFRDwvZm9udD48L3N0cm9uZz4uPC9zdHJvbmc+CisgKgorICogPHA+CisgKiA8Y29kZT5OdW1iZXJGb3JtYXQ8L2NvZGU+IGhlbHBzIHlvdSB0byBmb3JtYXQgYW5kIHBhcnNlIG51bWJlcnMgZm9yIGFueSBsb2NhbGUuCisgKiBZb3VyIGNvZGUgY2FuIGJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIGxvY2FsZSBjb252ZW50aW9ucyBmb3IKKyAqIGRlY2ltYWwgcG9pbnRzLCB0aG91c2FuZHMtc2VwYXJhdG9ycywgb3IgZXZlbiB0aGUgcGFydGljdWxhciBkZWNpbWFsCisgKiBkaWdpdHMgdXNlZCwgb3Igd2hldGhlciB0aGUgbnVtYmVyIGZvcm1hdCBpcyBldmVuIGRlY2ltYWwuCisgKgorICogPHA+CisgKiBUbyBmb3JtYXQgYSBudW1iZXIgZm9yIHRoZSBjdXJyZW50IExvY2FsZSwgdXNlIG9uZSBvZiB0aGUgZmFjdG9yeQorICogY2xhc3MgbWV0aG9kczoKKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqICBteVN0cmluZyA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpLmZvcm1hdChteU51bWJlcik7CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqIElmIHlvdSBhcmUgZm9ybWF0dGluZyBtdWx0aXBsZSBudW1iZXJzLCBpdCBpcworICogbW9yZSBlZmZpY2llbnQgdG8gZ2V0IHRoZSBmb3JtYXQgYW5kIHVzZSBpdCBtdWx0aXBsZSB0aW1lcyBzbyB0aGF0CisgKiB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSB0byBmZXRjaCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2FsCisgKiBsYW5ndWFnZSBhbmQgY291bnRyeSBjb252ZW50aW9ucyBtdWx0aXBsZSB0aW1lcy4KKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIE51bWJlckZvcm1hdCBuZiA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZSgpOworICogZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CisgKiAgICAgb3V0cHV0LnByaW50bG4obmYuZm9ybWF0KG15TnVtYmVyW2ldKSArICI7ICIpOworICogfQorICogPC9wcmU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKiBUbyBmb3JtYXQgYSBudW1iZXIgZm9yIGEgZGlmZmVyZW50IExvY2FsZSwgc3BlY2lmeSBpdCBpbiB0aGUKKyAqIGNhbGwgdG8gPGNvZGU+Z2V0SW5zdGFuY2U8L2NvZGU+LgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogTnVtYmVyRm9ybWF0IG5mID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKExvY2FsZS5GUkVOQ0gpOworICogPC9wcmU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKiBZb3UgY2FuIGFsc28gdXNlIGEgPGNvZGU+TnVtYmVyRm9ybWF0PC9jb2RlPiB0byBwYXJzZSBudW1iZXJzOgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogbXlOdW1iZXIgPSBuZi5wYXJzZShteVN0cmluZyk7CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqIFVzZSA8Y29kZT5nZXRJbnN0YW5jZTwvY29kZT4gb3IgPGNvZGU+Z2V0TnVtYmVySW5zdGFuY2U8L2NvZGU+IHRvIGdldCB0aGUKKyAqIG5vcm1hbCBudW1iZXIgZm9ybWF0LiBVc2UgPGNvZGU+Z2V0SW50ZWdlckluc3RhbmNlPC9jb2RlPiB0byBnZXQgYW4KKyAqIGludGVnZXIgbnVtYmVyIGZvcm1hdC4gVXNlIDxjb2RlPmdldEN1cnJlbmN5SW5zdGFuY2U8L2NvZGU+IHRvIGdldCB0aGUKKyAqIGN1cnJlbmN5IG51bWJlciBmb3JtYXQuIEFuZCB1c2UgPGNvZGU+Z2V0UGVyY2VudEluc3RhbmNlPC9jb2RlPiB0byBnZXQgYQorICogZm9ybWF0IGZvciBkaXNwbGF5aW5nIHBlcmNlbnRhZ2VzLiBXaXRoIHRoaXMgZm9ybWF0LCBhIGZyYWN0aW9uIGxpa2UKKyAqIDAuNTMgaXMgZGlzcGxheWVkIGFzIDUzJS4KKyAqCisgKiA8cD4KKyAqIFlvdSBjYW4gYWxzbyBjb250cm9sIHRoZSBkaXNwbGF5IG9mIG51bWJlcnMgd2l0aCBzdWNoIG1ldGhvZHMgYXMKKyAqIDxjb2RlPnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0czwvY29kZT4uCisgKiBJZiB5b3Ugd2FudCBldmVuIG1vcmUgY29udHJvbCBvdmVyIHRoZSBmb3JtYXQgb3IgcGFyc2luZywKKyAqIG9yIHdhbnQgdG8gZ2l2ZSB5b3VyIHVzZXJzIG1vcmUgY29udHJvbCwKKyAqIHlvdSBjYW4gdHJ5IGNhc3RpbmcgdGhlIDxjb2RlPk51bWJlckZvcm1hdDwvY29kZT4geW91IGdldCBmcm9tIHRoZSBmYWN0b3J5IG1ldGhvZHMKKyAqIHRvIGEgPGNvZGU+RGVjaW1hbEZvcm1hdDwvY29kZT4uIFRoaXMgd2lsbCB3b3JrIGZvciB0aGUgdmFzdCBtYWpvcml0eQorICogb2YgbG9jYWxlczsganVzdCByZW1lbWJlciB0byBwdXQgaXQgaW4gYSA8Y29kZT50cnk8L2NvZGU+IGJsb2NrIGluIGNhc2UgeW91CisgKiBlbmNvdW50ZXIgYW4gdW51c3VhbCBvbmUuCisgKgorICogPHA+CisgKiBOdW1iZXJGb3JtYXQgYW5kIERlY2ltYWxGb3JtYXQgYXJlIGRlc2lnbmVkIHN1Y2ggdGhhdCBzb21lIGNvbnRyb2xzCisgKiB3b3JrIGZvciBmb3JtYXR0aW5nIGFuZCBvdGhlcnMgd29yayBmb3IgcGFyc2luZy4gIFRoZSBmb2xsb3dpbmcgaXMKKyAqIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBmb3IgZWFjaCB0aGVzZSBjb250cm9sIG1ldGhvZHMsCisgKiA8cD4KKyAqIHNldFBhcnNlSW50ZWdlck9ubHkgOiBvbmx5IGFmZmVjdHMgcGFyc2luZywgZS5nLgorICogaWYgdHJ1ZSwgICIzNDU2Ljc4IiAtPiAzNDU2IChhbmQgbGVhdmVzIHRoZSBwYXJzZSBwb3NpdGlvbiBqdXN0IGFmdGVyIGluZGV4IDYpCisgKiBpZiBmYWxzZSwgIjM0NTYuNzgiIC0+IDM0NTYuNzggKGFuZCBsZWF2ZXMgdGhlIHBhcnNlIHBvc2l0aW9uIGp1c3QgYWZ0ZXIgaW5kZXggOCkKKyAqIFRoaXMgaXMgaW5kZXBlbmRlbnQgb2YgZm9ybWF0dGluZy4gIElmIHlvdSB3YW50IHRvIG5vdCBzaG93IGEgZGVjaW1hbCBwb2ludAorICogd2hlcmUgdGhlcmUgbWlnaHQgYmUgbm8gZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LCB1c2UKKyAqIHNldERlY2ltYWxTZXBhcmF0b3JBbHdheXNTaG93bi4KKyAqIDxwPgorICogc2V0RGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duIDogb25seSBhZmZlY3RzIGZvcm1hdHRpbmcsIGFuZCBvbmx5IHdoZXJlCisgKiB0aGVyZSBtaWdodCBiZSBubyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQsIHN1Y2ggYXMgd2l0aCBhIHBhdHRlcm4KKyAqIGxpa2UgIiMsIyMwLiMjIiwgZS5nLiwKKyAqIGlmIHRydWUsICAzNDU2LjAwIC0+ICIzLDQ1Ni4iCisgKiBpZiBmYWxzZSwgMzQ1Ni4wMCAtPiAiMzQ1NiIKKyAqIFRoaXMgaXMgaW5kZXBlbmRlbnQgb2YgcGFyc2luZy4gIElmIHlvdSB3YW50IHBhcnNpbmcgdG8gc3RvcCBhdCB0aGUgZGVjaW1hbAorICogcG9pbnQsIHVzZSBzZXRQYXJzZUludGVnZXJPbmx5LgorICoKKyAqIDxwPgorICogWW91IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUgPGNvZGU+cGFyc2U8L2NvZGU+IGFuZCA8Y29kZT5mb3JtYXQ8L2NvZGU+CisgKiBtZXRob2RzIHdpdGggPGNvZGU+UGFyc2VQb3NpdGlvbjwvY29kZT4gYW5kIDxjb2RlPkZpZWxkUG9zaXRpb248L2NvZGU+IHRvCisgKiBhbGxvdyB5b3UgdG86CisgKiA8dWw+CisgKiA8bGk+IHByb2dyZXNzaXZlbHkgcGFyc2UgdGhyb3VnaCBwaWVjZXMgb2YgYSBzdHJpbmcKKyAqIDxsaT4gYWxpZ24gdGhlIGRlY2ltYWwgcG9pbnQgYW5kIG90aGVyIGFyZWFzCisgKiA8L3VsPgorICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gYWxpZ24gbnVtYmVycyBpbiB0d28gd2F5czoKKyAqIDxvbD4KKyAqIDxsaT4gSWYgeW91IGFyZSB1c2luZyBhIG1vbm9zcGFjZWQgZm9udCB3aXRoIHNwYWNpbmcgZm9yIGFsaWdubWVudCwKKyAqICAgICAgeW91IGNhbiBwYXNzIHRoZSA8Y29kZT5GaWVsZFBvc2l0aW9uPC9jb2RlPiBpbiB5b3VyIGZvcm1hdCBjYWxsLCB3aXRoCisgKiAgICAgIDxjb2RlPmZpZWxkPC9jb2RlPiA9IDxjb2RlPklOVEVHRVJfRklFTEQ8L2NvZGU+LiBPbiBvdXRwdXQsCisgKiAgICAgIDxjb2RlPmdldEVuZEluZGV4PC9jb2RlPiB3aWxsIGJlIHNldCB0byB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlCisgKiAgICAgIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBpbnRlZ2VyIGFuZCB0aGUgZGVjaW1hbC4gQWRkCisgKiAgICAgIChkZXNpcmVkU3BhY2VDb3VudCAtIGdldEVuZEluZGV4KSBzcGFjZXMgYXQgdGhlIGZyb250IG9mIHRoZSBzdHJpbmcuCisgKgorICogPGxpPiBJZiB5b3UgYXJlIHVzaW5nIHByb3BvcnRpb25hbCBmb250cywKKyAqICAgICAgaW5zdGVhZCBvZiBwYWRkaW5nIHdpdGggc3BhY2VzLCBtZWFzdXJlIHRoZSB3aWR0aAorICogICAgICBvZiB0aGUgc3RyaW5nIGluIHBpeGVscyBmcm9tIHRoZSBzdGFydCB0byA8Y29kZT5nZXRFbmRJbmRleDwvY29kZT4uCisgKiAgICAgIFRoZW4gbW92ZSB0aGUgcGVuIGJ5CisgKiAgICAgIChkZXNpcmVkUGl4ZWxXaWR0aCAtIHdpZHRoVG9BbGlnbm1lbnRQb2ludCkgYmVmb3JlIGRyYXdpbmcgdGhlIHRleHQuCisgKiAgICAgIEl0IGFsc28gd29ya3Mgd2hlcmUgdGhlcmUgaXMgbm8gZGVjaW1hbCwgYnV0IHBvc3NpYmx5IGFkZGl0aW9uYWwKKyAqICAgICAgY2hhcmFjdGVycyBhdCB0aGUgZW5kLCBlLmcuLCB3aXRoIHBhcmVudGhlc2VzIGluIG5lZ2F0aXZlCisgKiAgICAgIG51bWJlcnM6ICIoMTIpIiBmb3IgLTEyLgorICogPC9vbD4KKyAqCisgKiA8aDQ+U3luY2hyb25pemF0aW9uPC9oND4KKyAqIDxwPgorICogTnVtYmVyIGZvcm1hdHMgYXJlIGdlbmVyYWxseSBub3Qgc3luY2hyb25pemVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBjcmVhdGUgCisgKiBzZXBhcmF0ZSBmb3JtYXQgaW5zdGFuY2VzIGZvciBlYWNoIHRocmVhZC4gSWYgbXVsdGlwbGUgdGhyZWFkcyBhY2Nlc3MgYSBmb3JtYXQKKyAqIGNvbmN1cnJlbnRseSwgaXQgbXVzdCBiZSBzeW5jaHJvbml6ZWQgZXh0ZXJuYWxseS4gCisgKiA8cD4KKyAqCisgKiBzZWUgICAgICAgICAgRGVjaW1hbEZvcm1hdAorICogc2VlICAgICAgICAgIGphdmEudGV4dC5DaG9pY2VGb3JtYXQKKyAqIEBhdXRob3IgICAgICAgTWFyayBEYXZpcworICogQGF1dGhvciAgICAgICBIZWxlbmEgU2hpaAorICogQGF1dGhvciAgICAgICBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBOdW1iZXJGb3JtYXQgZXh0ZW5kcyBGb3JtYXR7CisKKyAgICAvLyBDb25zdGFudHMgdXNlZCBieSBmYWN0b3J5IG1ldGhvZHMgdG8gc3BlY2lmeSBhIHN0eWxlIG9mIGZvcm1hdC4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNQkVSU1RZTEUgPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDVVJSRU5DWVNUWUxFID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUEVSQ0VOVFNUWUxFID0gMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0NJRU5USUZJQ1NUWUxFID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5URUdFUlNUWUxFID0gNDsKKworICAgIC8qKgorICAgICAqIEZpZWxkIGNvbnN0YW50IHVzZWQgdG8gY29uc3RydWN0IGEgRmllbGRQb3NpdGlvbiBvYmplY3QuIFNpZ25pZmllcyB0aGF0CisgICAgICogdGhlIHBvc2l0aW9uIG9mIHRoZSBpbnRlZ2VyIHBhcnQgb2YgYSBmb3JtYXR0ZWQgbnVtYmVyIHNob3VsZCBiZSByZXR1cm5lZC4KKyAgICAgKiBAc2VlIGphdmEudGV4dC5GaWVsZFBvc2l0aW9uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URUdFUl9GSUVMRCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBGaWVsZCBjb25zdGFudCB1c2VkIHRvIGNvbnN0cnVjdCBhIEZpZWxkUG9zaXRpb24gb2JqZWN0LiBTaWduaWZpZXMgdGhhdAorICAgICAqIHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJhY3Rpb24gcGFydCBvZiBhIGZvcm1hdHRlZCBudW1iZXIgc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAqIEBzZWUgamF2YS50ZXh0LkZpZWxkUG9zaXRpb24KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGUkFDVElPTl9GSUVMRCA9IDE7CisKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5DSEFOR0VEPC9mb250Pjwvc3Ryb25nPgorICAgICAqIEZvcm1hdCBhbiBvYmplY3QuICBDaGFuZ2U6IHJlY29nbml6ZXMgPGNvZGU+QmlnSW50ZWdlcjwvY29kZT4KKyAgICAgKiBhbmQgPGNvZGU+QmlnRGVjaW1hbDwvY29kZT4gb2JqZWN0cyBub3cuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFN0cmluZ0J1ZmZlciBmb3JtYXQoT2JqZWN0IG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdG9BcHBlbmRUbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcykKKyAgICB7CisgICAgICAgIGlmIChudW1iZXIgaW5zdGFuY2VvZiBMb25nKSB7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0KCgoTG9uZyludW1iZXIpLmxvbmdWYWx1ZSgpLCB0b0FwcGVuZFRvLCBwb3MpOworICAgICAgICB9IGVsc2UgaWYgKG51bWJlciBpbnN0YW5jZW9mIEJpZ0ludGVnZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXQoKEJpZ0ludGVnZXIpIG51bWJlciwgdG9BcHBlbmRUbywgcG9zKTsKKyAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgaW5zdGFuY2VvZiBqYXZhLm1hdGguQmlnRGVjaW1hbCkgeworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdCgoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIG51bWJlciwgdG9BcHBlbmRUbywgcG9zKTsKKyAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgaW5zdGFuY2VvZiBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwpIHsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXQoKGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbCkgbnVtYmVyLCB0b0FwcGVuZFRvLCBwb3MpOworICAgICAgICB9IGVsc2UgaWYgKG51bWJlciBpbnN0YW5jZW9mIE51bWJlcikgeworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdCgoKE51bWJlciludW1iZXIpLmRvdWJsZVZhbHVlKCksIHRvQXBwZW5kVG8sIHBvcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3QgZm9ybWF0IGdpdmVuIE9iamVjdCBhcyBhIE51bWJlciIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIE9iamVjdCBwYXJzZU9iamVjdChTdHJpbmcgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwYXJzZVBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlKHNvdXJjZSwgcGFyc2VQb3NpdGlvbik7CisgICAgfQorCisgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiBvZiBmb3JtYXQuCisgICAgICogQHNlZSBqYXZhLnRleHQuRm9ybWF0I2Zvcm1hdChPYmplY3QpCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFN0cmluZyBmb3JtYXQgKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIGZvcm1hdChudW1iZXIsbmV3IFN0cmluZ0J1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWVsZFBvc2l0aW9uKDApKS50b1N0cmluZygpOworICAgIH0KKworICAgLyoqCisgICAgICogU3BlY2lhbGl6YXRpb24gb2YgZm9ybWF0LgorICAgICAqIEBzZWUgamF2YS50ZXh0LkZvcm1hdCNmb3JtYXQoT2JqZWN0KQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZm9ybWF0IChsb25nIG51bWJlcikgeworICAgICAgICByZXR1cm4gZm9ybWF0KG51bWJlcixuZXcgU3RyaW5nQnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpZWxkUG9zaXRpb24oMCkpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBmb3JtYXQgYSBCaWdJbnRlZ2VyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZm9ybWF0KEJpZ0ludGVnZXIgbnVtYmVyKSB7CisgICAgICAgIHJldHVybiBmb3JtYXQobnVtYmVyLCBuZXcgU3RyaW5nQnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpZWxkUG9zaXRpb24oMCkpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBmb3JtYXQgYSBCaWdEZWNpbWFsLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZm9ybWF0KGphdmEubWF0aC5CaWdEZWNpbWFsIG51bWJlcikgeworICAgICAgICByZXR1cm4gZm9ybWF0KG51bWJlciwgbmV3IFN0cmluZ0J1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWVsZFBvc2l0aW9uKDApKS50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gZm9ybWF0IGEgQmlnRGVjaW1hbC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGZvcm1hdChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbnVtYmVyKSB7CisgICAgICAgIHJldHVybiBmb3JtYXQobnVtYmVyLCBuZXcgU3RyaW5nQnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpZWxkUG9zaXRpb24oMCkpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiBvZiBmb3JtYXQuCisgICAgICogQHNlZSBqYXZhLnRleHQuRm9ybWF0I2Zvcm1hdChPYmplY3QsIFN0cmluZ0J1ZmZlciwgRmllbGRQb3NpdGlvbikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nQnVmZmVyIGZvcm1hdChkb3VibGUgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zKTsKKworICAgLyoqCisgICAgICogU3BlY2lhbGl6YXRpb24gb2YgZm9ybWF0LgorICAgICAqIEBzZWUgamF2YS50ZXh0LkZvcm1hdCNmb3JtYXQoT2JqZWN0LCBTdHJpbmdCdWZmZXIsIEZpZWxkUG9zaXRpb24pCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IFN0cmluZ0J1ZmZlciBmb3JtYXQobG9uZyBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHRvQXBwZW5kVG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MpOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIEZvcm1hdCBhIEJpZ0ludGVnZXIuCisgICAgICogQHNlZSBqYXZhLnRleHQuRm9ybWF0I2Zvcm1hdChPYmplY3QsIFN0cmluZ0J1ZmZlciwgRmllbGRQb3NpdGlvbikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nQnVmZmVyIGZvcm1hdChCaWdJbnRlZ2VyIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdG9BcHBlbmRUbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcyk7IAorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIEZvcm1hdCBhIEJpZ0RlY2ltYWwuCisgICAgICogQHNlZSBqYXZhLnRleHQuRm9ybWF0I2Zvcm1hdChPYmplY3QsIFN0cmluZ0J1ZmZlciwgRmllbGRQb3NpdGlvbikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nQnVmZmVyIGZvcm1hdChqYXZhLm1hdGguQmlnRGVjaW1hbCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHRvQXBwZW5kVG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBwb3MpOworCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIEZvcm1hdCBhIEJpZ0RlY2ltYWwuCisgICAgICogQHNlZSBqYXZhLnRleHQuRm9ybWF0I2Zvcm1hdChPYmplY3QsIFN0cmluZ0J1ZmZlciwgRmllbGRQb3NpdGlvbikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nQnVmZmVyIGZvcm1hdChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zKTsKKyAgIAorICAgLyoqCisgICAgICogUmV0dXJucyBhIExvbmcgaWYgcG9zc2libGUgKGUuZy4sIHdpdGhpbiB0aGUgcmFuZ2UgW0xvbmcuTUlOX1ZBTFVFLAorICAgICAqIExvbmcuTUFYX1ZBTFVFXSBhbmQgd2l0aCBubyBkZWNpbWFscyksIG90aGVyd2lzZSBhIERvdWJsZS4KKyAgICAgKiBJZiBJbnRlZ2VyT25seSBpcyBzZXQsIHdpbGwgc3RvcCBhdCBhIGRlY2ltYWwKKyAgICAgKiBwb2ludCAob3IgZXF1aXZhbGVudDsgZS5nLiwgZm9yIHJhdGlvbmFsIG51bWJlcnMgIjEgMi8zIiwgd2lsbCBzdG9wCisgICAgICogYWZ0ZXIgdGhlIDEpLgorICAgICAqIERvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbjsgaWYgbm8gb2JqZWN0IGNhbiBiZSBwYXJzZWQsIGluZGV4IGlzCisgICAgICogdW5jaGFuZ2VkIQorICAgICAqIEBzZWUgI2lzUGFyc2VJbnRlZ2VyT25seQorICAgICAqIEBzZWUgamF2YS50ZXh0LkZvcm1hdCNwYXJzZU9iamVjdChTdHJpbmcsIFBhcnNlUG9zaXRpb24pCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IE51bWJlciBwYXJzZShTdHJpbmcgdGV4dCwgUGFyc2VQb3NpdGlvbiBwYXJzZVBvc2l0aW9uKTsKKworICAgIC8qKgorICAgICAqIFBhcnNlcyB0ZXh0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHByb2R1Y2UgYSBudW1iZXIuCisgICAgICogVGhlIG1ldGhvZCBtYXkgbm90IHVzZSB0aGUgZW50aXJlIHRleHQgb2YgdGhlIGdpdmVuIHN0cmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0ZXh0IEEgU3RyaW5nIHdob3NlIGJlZ2lubmluZyBzaG91bGQgYmUgcGFyc2VkLgorICAgICAqIEByZXR1cm4gQSBOdW1iZXIgcGFyc2VkIGZyb20gdGhlIHN0cmluZy4KKyAgICAgKiBAZXhjZXB0aW9uIFBhcnNlRXhjZXB0aW9uIGlmIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmcgCisgICAgICogY2Fubm90IGJlIHBhcnNlZC4KKyAgICAgKiBAc2VlICNmb3JtYXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICAvL0J1ZyA0Mzc1Mzk5IFtSaWNoYXJkL0dDTF0KKyAgICBwdWJsaWMgTnVtYmVyIHBhcnNlKFN0cmluZyB0ZXh0KSB0aHJvd3MgUGFyc2VFeGNlcHRpb24geworICAgICAgICBQYXJzZVBvc2l0aW9uIHBhcnNlUG9zaXRpb24gPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgTnVtYmVyIHJlc3VsdCA9IHBhcnNlKHRleHQsIHBhcnNlUG9zaXRpb24pOworICAgICAgICBpZiAocGFyc2VQb3NpdGlvbi5nZXRJbmRleCgpID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbigiVW5wYXJzZWFibGUgbnVtYmVyOiBcIiIgKyB0ZXh0ICsgIlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BQOnBhcnNlUG9zaXRpb24uZXJyb3JJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBmb3JtYXQgd2lsbCBwYXJzZSBudW1iZXJzIGFzIGludGVnZXJzIG9ubHkuCisgICAgICogRm9yIGV4YW1wbGUgaW4gdGhlIEVuZ2xpc2ggbG9jYWxlLCB3aXRoIFBhcnNlSW50ZWdlck9ubHkgdHJ1ZSwgdGhlCisgICAgICogc3RyaW5nICIxMjM0LiIgd291bGQgYmUgcGFyc2VkIGFzIHRoZSBpbnRlZ2VyIHZhbHVlIDEyMzQgYW5kIHBhcnNpbmcKKyAgICAgKiB3b3VsZCBzdG9wIGF0IHRoZSAiLiIgY2hhcmFjdGVyLiAgT2YgY291cnNlLCB0aGUgZXhhY3QgZm9ybWF0IGFjY2VwdGVkCisgICAgICogYnkgdGhlIHBhcnNlIG9wZXJhdGlvbiBpcyBsb2NhbGUgZGVwZW5kYW50IGFuZCBkZXRlcm1pbmVkIGJ5IHN1Yi1jbGFzc2VzCisgICAgICogb2YgTnVtYmVyRm9ybWF0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzUGFyc2VJbnRlZ2VyT25seSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW50ZWdlck9ubHk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB3aGV0aGVyIG9yIG5vdCBudW1iZXJzIHNob3VsZCBiZSBwYXJzZWQgYXMgaW50ZWdlcnMgb25seS4KKyAgICAgKiBAc2VlICNpc1BhcnNlSW50ZWdlck9ubHkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQYXJzZUludGVnZXJPbmx5KGJvb2xlYW4gdmFsdWUpIHsKKyAgICAgICAgcGFyc2VJbnRlZ2VyT25seSA9IHZhbHVlOworICAgIH0KKworICAgIC8vPT09PT09PT09PT09PT0gTG9jYWxlIFN0dWZmID09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBudW1iZXIgZm9ybWF0IGZvciB0aGUgY3VycmVudCBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgb25lIG9mIHRoZSBzdHlsZXMgcHJvdmlkZWQgYnkgdGhlIG90aGVyCisgICAgICogZmFjdG9yeSBtZXRob2RzOiBnZXROdW1iZXJJbnN0YW5jZSwgZ2V0SW50ZWdlckluc3RhbmNlLAorICAgICAqIGdldEN1cnJlbmN5SW5zdGFuY2Ugb3IgZ2V0UGVyY2VudEluc3RhbmNlLgorICAgICAqIEV4YWN0bHkgd2hpY2ggb25lIGlzIGxvY2FsZSBkZXBlbmRhbnQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgLy9CdWcgNDQwODA2NiBbUmljaGFyZC9HQ0xdCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBOdW1iZXJGb3JtYXQgZ2V0SW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBnZXRJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpLCBOVU1CRVJTVFlMRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBudW1iZXIgZm9ybWF0IGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KKyAgICAgKiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgb25lIG9mIHRoZSBzdHlsZXMgcHJvdmlkZWQgYnkgdGhlIG90aGVyCisgICAgICogZmFjdG9yeSBtZXRob2RzOiBnZXROdW1iZXJJbnN0YW5jZSwgZ2V0Q3VycmVuY3lJbnN0YW5jZSBvciBnZXRQZXJjZW50SW5zdGFuY2UuCisgICAgICogRXhhY3RseSB3aGljaCBvbmUgaXMgbG9jYWxlIGRlcGVuZGFudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE51bWJlckZvcm1hdCBnZXRJbnN0YW5jZShMb2NhbGUgaW5Mb2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKGluTG9jYWxlLCBOVU1CRVJTVFlMRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGdlbmVyYWwtcHVycG9zZSBudW1iZXIgZm9ybWF0IGZvciB0aGUgY3VycmVudCBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE51bWJlckZvcm1hdCBnZXROdW1iZXJJbnN0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCksIE5VTUJFUlNUWUxFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgZ2VuZXJhbC1wdXJwb3NlIG51bWJlciBmb3JtYXQgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTnVtYmVyRm9ybWF0IGdldE51bWJlckluc3RhbmNlKExvY2FsZSBpbkxvY2FsZSkgeworICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2UoaW5Mb2NhbGUsIE5VTUJFUlNUWUxFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFuIGludGVnZXIgbnVtYmVyIGZvcm1hdCBmb3IgdGhlIGN1cnJlbnQgZGVmYXVsdCBsb2NhbGUuIFRoZQorICAgICAqIHJldHVybmVkIG51bWJlciBmb3JtYXQgaXMgY29uZmlndXJlZCB0byByb3VuZCBmbG9hdGluZyBwb2ludCBudW1iZXJzCisgICAgICogdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB1c2luZyBJRUVFIGhhbGYtZXZlbiByb3VuZGluZyAoc2VlIHtAbGluayAKKyAgICAgKiBjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwjUk9VTkRfSEFMRl9FVkVOIFJPVU5EX0hBTEZfRVZFTn0pIGZvciBmb3JtYXR0aW5nLAorICAgICAqIGFuZCB0byBwYXJzZSBvbmx5IHRoZSBpbnRlZ2VyIHBhcnQgb2YgYW4gaW5wdXQgc3RyaW5nIChzZWUge0BsaW5rCisgICAgICogI2lzUGFyc2VJbnRlZ2VyT25seSBpc1BhcnNlSW50ZWdlck9ubHl9KS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gYSBudW1iZXIgZm9ybWF0IGZvciBpbnRlZ2VyIHZhbHVlcworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIC8vQnVnIDQ0MDgwNjYgW1JpY2hhcmQvR0NMXQorICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTnVtYmVyRm9ybWF0IGdldEludGVnZXJJbnN0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCksIElOVEVHRVJTVFlMRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBpbnRlZ2VyIG51bWJlciBmb3JtYXQgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLiBUaGUKKyAgICAgKiByZXR1cm5lZCBudW1iZXIgZm9ybWF0IGlzIGNvbmZpZ3VyZWQgdG8gcm91bmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycworICAgICAqIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdXNpbmcgSUVFRSBoYWxmLWV2ZW4gcm91bmRpbmcgKHNlZSB7QGxpbmsgCisgICAgICogY29tLmlibS5pY3UubWF0aC5CaWdEZWNpbWFsI1JPVU5EX0hBTEZfRVZFTiBST1VORF9IQUxGX0VWRU59KSBmb3IgZm9ybWF0dGluZywKKyAgICAgKiBhbmQgdG8gcGFyc2Ugb25seSB0aGUgaW50ZWdlciBwYXJ0IG9mIGFuIGlucHV0IHN0cmluZyAoc2VlIHtAbGluaworICAgICAqICNpc1BhcnNlSW50ZWdlck9ubHkgaXNQYXJzZUludGVnZXJPbmx5fSkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5Mb2NhbGUgdGhlIGxvY2FsZSBmb3Igd2hpY2ggYSBudW1iZXIgZm9ybWF0IGlzIG5lZWRlZAorICAgICAqIEByZXR1cm4gYSBudW1iZXIgZm9ybWF0IGZvciBpbnRlZ2VyIHZhbHVlcworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIC8vQnVnIDQ0MDgwNjYgW1JpY2hhcmQvR0NMXQorICAgIHB1YmxpYyBzdGF0aWMgTnVtYmVyRm9ybWF0IGdldEludGVnZXJJbnN0YW5jZShMb2NhbGUgaW5Mb2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKGluTG9jYWxlLCBJTlRFR0VSU1RZTEUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBjdXJyZW5jeSBmb3JtYXQgZm9yIHRoZSBjdXJyZW50IGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTnVtYmVyRm9ybWF0IGdldEN1cnJlbmN5SW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBnZXRJbnN0YW5jZShMb2NhbGUuZ2V0RGVmYXVsdCgpLCBDVVJSRU5DWVNUWUxFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgY3VycmVuY3kgZm9ybWF0IGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE51bWJlckZvcm1hdCBnZXRDdXJyZW5jeUluc3RhbmNlKExvY2FsZSBpbkxvY2FsZSkgeworICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2UoaW5Mb2NhbGUsIENVUlJFTkNZU1RZTEUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBwZXJjZW50YWdlIGZvcm1hdCBmb3IgdGhlIGN1cnJlbnQgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBOdW1iZXJGb3JtYXQgZ2V0UGVyY2VudEluc3RhbmNlKCkgeworICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSwgUEVSQ0VOVFNUWUxFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgcGVyY2VudGFnZSBmb3JtYXQgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTnVtYmVyRm9ybWF0IGdldFBlcmNlbnRJbnN0YW5jZShMb2NhbGUgaW5Mb2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKGluTG9jYWxlLCBQRVJDRU5UU1RZTEUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBSZXR1cm5zIGEgc2NpZW50aWZpYyBmb3JtYXQgZm9yIHRoZSBjdXJyZW50IGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTnVtYmVyRm9ybWF0IGdldFNjaWVudGlmaWNJbnN0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKExvY2FsZS5nZXREZWZhdWx0KCksIFNDSUVOVElGSUNTVFlMRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIFJldHVybnMgYSBzY2llbnRpZmljIGZvcm1hdCBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBOdW1iZXJGb3JtYXQgZ2V0U2NpZW50aWZpY0luc3RhbmNlKExvY2FsZSBpbkxvY2FsZSkgeworICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2UoaW5Mb2NhbGUsIFNDSUVOVElGSUNTVFlMRSk7CisgICAgfQorCisgICAgLy8gPT09PT0gRmFjdG9yeSBzdHVmZiA9PT09PQorCisgICAgLyogQHByb3RvdHlwZSAqLworICAgIC8qIHB1YmxpYyAqLyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgTnVtYmVyRm9ybWF0RmFjdG9yeSB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF9OVU1CRVIgPSBOVU1CRVJTVFlMRTsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STUFUX0NVUlJFTkNZID0gQ1VSUkVOQ1lTVFlMRTsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STUFUX1BFUkNFTlQgPSBQRVJDRU5UU1RZTEU7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF9TQ0lFTlRJRklDID0gU0NJRU5USUZJQ1NUWUxFOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNQVRfSU5URUdFUiA9IElOVEVHRVJTVFlMRTsKKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBmYWN0b3J5IHdpbGwgYmUgdmlzaWJsZS4gIERlZmF1bHQgaXMgdHJ1ZS4gICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIHZpc2libGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gYW4gdW5tb2RpZmlhYmxlIGNvbGxlY3Rpb24gb2YgdGhlIGxvY2FsZSBuYW1lcyBkaXJlY3RseSAKKyAgICAgICAgICogc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKyAgICAgICAgICovCisgICAgICAgICBwdWJsaWMgYWJzdHJhY3QgU2V0IGdldFN1cHBvcnRlZExvY2FsZU5hbWVzKCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiBhIG51bWJlciBmb3JtYXQgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuICBJZiB0aGUgbG9jYWxlCisgICAgICAgICAqIGlzIG5vdCBzdXBwb3J0ZWQsIHJldHVybiBudWxsLiAgQWxsIHRoZSBkZWZpbmVkIHR5cGVzIG11c3QgYmUKKyAgICAgICAgICogc3VwcG9ydGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGFic3RyYWN0IE51bWJlckZvcm1hdCBjcmVhdGVGb3JtYXQoTG9jYWxlIGxvYywgaW50IGZvcm1hdFR5cGUpOworICAgIH0KKworICAgIC8qIEBwcm90b3R5cGUgKi8KKyAgICAvKiBwdWJsaWMgKi8gc3RhdGljIGFic3RyYWN0IGNsYXNzIFNpbXBsZU51bWJlckZvcm1hdEZhY3RvcnkgZXh0ZW5kcyBOdW1iZXJGb3JtYXRGYWN0b3J5IHsKKyAgICAgICAgZmluYWwgU2V0IGxvY2FsZU5hbWVzOworICAgICAgICBmaW5hbCBib29sZWFuIHZpc2libGU7CisKKyAgICAgICAgcHVibGljIFNpbXBsZU51bWJlckZvcm1hdEZhY3RvcnkoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgdGhpcyhsb2NhbGUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgU2ltcGxlTnVtYmVyRm9ybWF0RmFjdG9yeShMb2NhbGUgbG9jYWxlLCBib29sZWFuIHZpc2libGUpIHsKKyAgICAgICAgICAgIGxvY2FsZU5hbWVzID0gQ29sbGVjdGlvbnMuc2luZ2xldG9uKExvY2FsZVV0aWxpdHkuY2Fub25pY2FsTG9jYWxlU3RyaW5nKGxvY2FsZSkpOworICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHZpc2libGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdmlzaWJsZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBmaW5hbCBTZXQgZ2V0U3VwcG9ydGVkTG9jYWxlTmFtZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gbG9jYWxlTmFtZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBORkZhY3RvcnkgZXh0ZW5kcyBMb2NhbGVLZXlGYWN0b3J5IHsKKyAgICAgICAgcHJpdmF0ZSBOdW1iZXJGb3JtYXRGYWN0b3J5IGRlbGVnYXRlOworCisgICAgICAgIE5GRmFjdG9yeShOdW1iZXJGb3JtYXRGYWN0b3J5IGRlbGVnYXRlKSB7CisgICAgICAgICAgICBzdXBlcihkZWxlZ2F0ZS52aXNpYmxlKCkgPyBWSVNJQkxFIDogSU5WSVNJQkxFKTsKKworICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBoYW5kbGVDcmVhdGUoTG9jYWxlIGxvYywgaW50IGtpbmQsIElDVVNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUZvcm1hdChsb2MsIGtpbmQpOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIFNldCBnZXRTdXBwb3J0ZWRJRHMoKSB7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuZ2V0U3VwcG9ydGVkTG9jYWxlTmFtZXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgc2V0IG9mIExvY2FsZXMgZm9yIHdoaWNoIE51bWJlckZvcm1hdHMgYXJlIGluc3RhbGxlZAorICAgICAqIEByZXR1cm4gYXZhaWxhYmxlIGxvY2FsZXMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvY2FsZVtdIGdldEF2YWlsYWJsZUxvY2FsZXMoKSB7CisgICAgICAgIGlmIChzZXJ2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBJQ1VMb2NhbGVEYXRhLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyBhIG5ldyBOdW1iZXJGb3JtYXQgZm9yIHRoZSBwcm92aWRlZCBsb2NhbGUgb2YgdGhlIGRlZmluZWQKKyAgICAgKiB0eXBlLiAgVGhlIHJldHVybmVkIG9iamVjdCBpcyBhIGtleSB0aGF0IGNhbiBiZSB1c2VkIHRvIHVucmVnaXN0ZXIgdGhpcworICAgICAqIE51bWJlckZvcm1hdCBvYmplY3QuCisgICAgICogQHByb3RvdHlwZQorICAgICAqLworICAgIC8qIHB1YmxpYyAqLyBzdGF0aWMgT2JqZWN0IHJlZ2lzdGVyKE51bWJlckZvcm1hdEZhY3RvcnkgZmFjdG9yeSkgeworICAgICAgICBpZiAoZmFjdG9yeSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmYWN0b3J5IG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2V0U2VydmljZSgpLnJlZ2lzdGVyRmFjdG9yeShuZXcgTkZGYWN0b3J5KGZhY3RvcnkpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbnJlZ2lzdGVyIHRoZSBjdXJyZW5jeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXkgKG9idGFpbmVkIGZyb20KKyAgICAgKiByZWdpc3Rlckluc3RhbmNlKS4KKyAgICAgKiBAcHJvdG90eXBlCisgICAgICovCisgICAgLyogcHVibGljICovIHN0YXRpYyBib29sZWFuIHVucmVnaXN0ZXIoT2JqZWN0IHJlZ2lzdHJ5S2V5KSB7CisgICAgICAgIGlmIChzZXJ2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLnVucmVnaXN0ZXJGYWN0b3J5KChGYWN0b3J5KXJlZ2lzdHJ5S2V5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIElDVUxvY2FsZVNlcnZpY2Ugc2VydmljZSA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgSUNVTG9jYWxlU2VydmljZSBnZXRTZXJ2aWNlKCkgeworICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICBjbGFzcyBSQk51bWJlckZvcm1hdEZhY3RvcnkgZXh0ZW5kcyBJQ1VSZXNvdXJjZUJ1bmRsZUZhY3RvcnkgeworICAgICAgICAgICAgICAgIHByb3RlY3RlZCBPYmplY3QgaGFuZGxlQ3JlYXRlKExvY2FsZSBsb2MsIGludCBraW5kLCBJQ1VTZXJ2aWNlIHNlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKGxvYywga2luZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgSUNVTG9jYWxlU2VydmljZSBuZXdTZXJ2aWNlID0gbmV3IElDVUxvY2FsZVNlcnZpY2UoIk51bWJlckZvcm1hdCIpOworICAgICAgICAgICAgbmV3U2VydmljZS5yZWdpc3RlckZhY3RvcnkobmV3IFJCTnVtYmVyRm9ybWF0RmFjdG9yeSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3luY2hyb25pemVkIChOdW1iZXJGb3JtYXQuY2xhc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgPSBuZXdTZXJ2aWNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9CisKKyAgICAvLyA9PT09PSBFbmQgb2YgZmFjdG9yeSBzdHVmZiA9PT09PQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIGhhc2hDb2RlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIG1heGltdW1JbnRlZ2VyRGlnaXRzICogMzcgKyBtYXhGcmFjdGlvbkRpZ2l0czsKKyAgICAgICAgLy8ganVzdCBlbm91Z2ggZmllbGRzIGZvciBhIHJlYXNvbmFibGUgZGlzdHJpYnV0aW9uCisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIGVxdWFscworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodGhpcyA9PSBvYmopCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE51bWJlckZvcm1hdCBvdGhlciA9IChOdW1iZXJGb3JtYXQpIG9iajsKKyAgICAgICAgcmV0dXJuIChtYXhpbXVtSW50ZWdlckRpZ2l0cyA9PSBvdGhlci5tYXhpbXVtSW50ZWdlckRpZ2l0cworICAgICAgICAgICAgJiYgbWluaW11bUludGVnZXJEaWdpdHMgPT0gb3RoZXIubWluaW11bUludGVnZXJEaWdpdHMKKyAgICAgICAgICAgICYmIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9PSBvdGhlci5tYXhpbXVtRnJhY3Rpb25EaWdpdHMKKyAgICAgICAgICAgICYmIG1pbmltdW1GcmFjdGlvbkRpZ2l0cyA9PSBvdGhlci5taW5pbXVtRnJhY3Rpb25EaWdpdHMKKyAgICAgICAgICAgICYmIGdyb3VwaW5nVXNlZCA9PSBvdGhlci5ncm91cGluZ1VzZWQKKyAgICAgICAgICAgICYmIHBhcnNlSW50ZWdlck9ubHkgPT0gb3RoZXIucGFyc2VJbnRlZ2VyT25seSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIENsb25lYWJsZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKQorICAgIHsKKyAgICAgICAgTnVtYmVyRm9ybWF0IG90aGVyID0gKE51bWJlckZvcm1hdCkgc3VwZXIuY2xvbmUoKTsKKyAgICAgICAgcmV0dXJuIG90aGVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiBncm91cGluZyBpcyB1c2VkIGluIHRoaXMgZm9ybWF0LiBGb3IgZXhhbXBsZSwgaW4gdGhlCisgICAgICogRW5nbGlzaCBsb2NhbGUsIHdpdGggZ3JvdXBpbmcgb24sIHRoZSBudW1iZXIgMTIzNDU2NyBtaWdodCBiZSBmb3JtYXR0ZWQKKyAgICAgKiBhcyAiMSwyMzQsNTY3Ii4gVGhlIGdyb3VwaW5nIHNlcGFyYXRvciBhcyB3ZWxsIGFzIHRoZSBzaXplIG9mIGVhY2ggZ3JvdXAKKyAgICAgKiBpcyBsb2NhbGUgZGVwZW5kYW50IGFuZCBpcyBkZXRlcm1pbmVkIGJ5IHN1Yi1jbGFzc2VzIG9mIE51bWJlckZvcm1hdC4KKyAgICAgKiBAc2VlICNzZXRHcm91cGluZ1VzZWQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0dyb3VwaW5nVXNlZCgpIHsKKyAgICAgICAgcmV0dXJuIGdyb3VwaW5nVXNlZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgd2hldGhlciBvciBub3QgZ3JvdXBpbmcgd2lsbCBiZSB1c2VkIGluIHRoaXMgZm9ybWF0LgorICAgICAqIEBzZWUgI2lzR3JvdXBpbmdVc2VkCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0R3JvdXBpbmdVc2VkKGJvb2xlYW4gbmV3VmFsdWUpIHsKKyAgICAgICAgZ3JvdXBpbmdVc2VkID0gbmV3VmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZGlnaXRzIGFsbG93ZWQgaW4gdGhlIGludGVnZXIgcG9ydGlvbiBvZiBhCisgICAgICogbnVtYmVyLgorICAgICAqIEBzZWUgI3NldE1heGltdW1JbnRlZ2VyRGlnaXRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpIHsKKyAgICAgICAgcmV0dXJuIG1heGltdW1JbnRlZ2VyRGlnaXRzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYQorICAgICAqIG51bWJlci4gTWF4aW11bUludGVnZXJEaWdpdHMgbXVzdCBiZSA+PSBtaW5pbXVtSW50ZWdlckRpZ2l0cy4gIElmIHRoZQorICAgICAqIG5ldyB2YWx1ZSBmb3IgbWF4aW11bUludGVnZXJEaWdpdHMgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHZhbHVlCisgICAgICogb2YgbWluaW11bUludGVnZXJEaWdpdHMsIHRoZW4gbWluaW11bUludGVnZXJEaWdpdHMgd2lsbCBhbHNvIGJlIHNldCB0bworICAgICAqIHRoZSBuZXcgdmFsdWUuCisgICAgICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyB0byBiZSBzaG93bjsgaWYKKyAgICAgKiBsZXNzIHRoYW4gemVybywgdGhlbiB6ZXJvIGlzIHVzZWQuIFRoZSBjb25jcmV0ZSBzdWJjbGFzcyBtYXkgZW5mb3JjZSBhbgorICAgICAqIHVwcGVyIGxpbWl0IHRvIHRoaXMgdmFsdWUgYXBwcm9wcmlhdGUgdG8gdGhlIG51bWVyaWMgdHlwZSBiZWluZyBmb3JtYXR0ZWQuCisgICAgICogQHNlZSAjZ2V0TWF4aW11bUludGVnZXJEaWdpdHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNYXhpbXVtSW50ZWdlckRpZ2l0cyhpbnQgbmV3VmFsdWUpIHsKKyAgICAgICAgbWF4aW11bUludGVnZXJEaWdpdHMgPSBNYXRoLm1heCgwLG5ld1ZhbHVlKTsKKyAgICAgICAgaWYgKG1pbmltdW1JbnRlZ2VyRGlnaXRzID4gbWF4aW11bUludGVnZXJEaWdpdHMpCisgICAgICAgICAgICBtaW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1heGltdW1JbnRlZ2VyRGlnaXRzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYQorICAgICAqIG51bWJlci4KKyAgICAgKiBAc2VlICNzZXRNaW5pbXVtSW50ZWdlckRpZ2l0cworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKSB7CisgICAgICAgIHJldHVybiBtaW5pbXVtSW50ZWdlckRpZ2l0czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiB0aGUgaW50ZWdlciBwb3J0aW9uIG9mIGEKKyAgICAgKiBudW1iZXIuICBNaW5pbXVtSW50ZWdlckRpZ2l0cyBtdXN0IGJlIDw9IG1heGltdW1JbnRlZ2VyRGlnaXRzLiAgSWYgdGhlCisgICAgICogbmV3IHZhbHVlIGZvciBtaW5pbXVtSW50ZWdlckRpZ2l0cyBleGNlZWRzIHRoZSBjdXJyZW50IHZhbHVlCisgICAgICogb2YgbWF4aW11bUludGVnZXJEaWdpdHMsIHRoZW4gbWF4aW11bUludGVnZXJEaWdpdHMgd2lsbCBhbHNvIGJlIHNldCB0bworICAgICAqIHRoZSBuZXcgdmFsdWUKKyAgICAgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIHRvIGJlIHNob3duOyBpZgorICAgICAqIGxlc3MgdGhhbiB6ZXJvLCB0aGVuIHplcm8gaXMgdXNlZC4gVGhlIGNvbmNyZXRlIHN1YmNsYXNzIG1heSBlbmZvcmNlIGFuCisgICAgICogdXBwZXIgbGltaXQgdG8gdGhpcyB2YWx1ZSBhcHByb3ByaWF0ZSB0byB0aGUgbnVtZXJpYyB0eXBlIGJlaW5nIGZvcm1hdHRlZC4KKyAgICAgKiBAc2VlICNnZXRNaW5pbXVtSW50ZWdlckRpZ2l0cworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKGludCBuZXdWYWx1ZSkgeworICAgICAgICBtaW5pbXVtSW50ZWdlckRpZ2l0cyA9IE1hdGgubWF4KDAsbmV3VmFsdWUpOworICAgICAgICBpZiAobWluaW11bUludGVnZXJEaWdpdHMgPiBtYXhpbXVtSW50ZWdlckRpZ2l0cykKKyAgICAgICAgICAgIG1heGltdW1JbnRlZ2VyRGlnaXRzID0gbWluaW11bUludGVnZXJEaWdpdHM7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZGlnaXRzIGFsbG93ZWQgaW4gdGhlIGZyYWN0aW9uIHBvcnRpb24gb2YgYQorICAgICAqIG51bWJlci4KKyAgICAgKiBAc2VlICNzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpIHsKKyAgICAgICAgcmV0dXJuIG1heGltdW1GcmFjdGlvbkRpZ2l0czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiB0aGUgZnJhY3Rpb24gcG9ydGlvbiBvZiBhCisgICAgICogbnVtYmVyLiBNYXhpbXVtRnJhY3Rpb25EaWdpdHMgbXVzdCBiZSA+PSBtaW5pbXVtRnJhY3Rpb25EaWdpdHMuICBJZiB0aGUKKyAgICAgKiBuZXcgdmFsdWUgZm9yIG1heGltdW1GcmFjdGlvbkRpZ2l0cyBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUKKyAgICAgKiBvZiBtaW5pbXVtRnJhY3Rpb25EaWdpdHMsIHRoZW4gbWluaW11bUZyYWN0aW9uRGlnaXRzIHdpbGwgYWxzbyBiZSBzZXQgdG8KKyAgICAgKiB0aGUgbmV3IHZhbHVlLgorICAgICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRvIGJlIHNob3duOyBpZgorICAgICAqIGxlc3MgdGhhbiB6ZXJvLCB0aGVuIHplcm8gaXMgdXNlZC4gVGhlIGNvbmNyZXRlIHN1YmNsYXNzIG1heSBlbmZvcmNlIGFuCisgICAgICogdXBwZXIgbGltaXQgdG8gdGhpcyB2YWx1ZSBhcHByb3ByaWF0ZSB0byB0aGUgbnVtZXJpYyB0eXBlIGJlaW5nIGZvcm1hdHRlZC4KKyAgICAgKiBAc2VlICNnZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoaW50IG5ld1ZhbHVlKSB7CisgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IE1hdGgubWF4KDAsbmV3VmFsdWUpOworICAgICAgICBpZiAobWF4aW11bUZyYWN0aW9uRGlnaXRzIDwgbWluaW11bUZyYWN0aW9uRGlnaXRzKQorICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzID0gbWF4aW11bUZyYWN0aW9uRGlnaXRzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIHRoZSBmcmFjdGlvbiBwb3J0aW9uIG9mIGEKKyAgICAgKiBudW1iZXIuCisgICAgICogQHNlZSAjc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoKSB7CisgICAgICAgIHJldHVybiBtaW5pbXVtRnJhY3Rpb25EaWdpdHM7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFsbG93ZWQgaW4gdGhlIGZyYWN0aW9uIHBvcnRpb24gb2YgYQorICAgICAqIG51bWJlci4gTWluaW11bUZyYWN0aW9uRGlnaXRzIG11c3QgYmUgPD0gbWF4aW11bUZyYWN0aW9uRGlnaXRzLiAgSWYgdGhlCisgICAgICogbmV3IHZhbHVlIGZvciBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgZXhjZWVkcyB0aGUgY3VycmVudCB2YWx1ZQorICAgICAqIG9mIG1heGltdW1GcmFjdGlvbkRpZ2l0cywgdGhlbiBtYXhpbXVtSW50ZWdlckRpZ2l0cyB3aWxsIGFsc28gYmUgc2V0IHRvCisgICAgICogdGhlIG5ldyB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byBiZSBzaG93bjsgaWYKKyAgICAgKiBsZXNzIHRoYW4gemVybywgdGhlbiB6ZXJvIGlzIHVzZWQuIFRoZSBjb25jcmV0ZSBzdWJjbGFzcyBtYXkgZW5mb3JjZSBhbgorICAgICAqIHVwcGVyIGxpbWl0IHRvIHRoaXMgdmFsdWUgYXBwcm9wcmlhdGUgdG8gdGhlIG51bWVyaWMgdHlwZSBiZWluZyBmb3JtYXR0ZWQuCisgICAgICogQHNlZSAjZ2V0TWluaW11bUZyYWN0aW9uRGlnaXRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKGludCBuZXdWYWx1ZSkgeworICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBNYXRoLm1heCgwLG5ld1ZhbHVlKTsKKyAgICAgICAgaWYgKG1heGltdW1GcmFjdGlvbkRpZ2l0cyA8IG1pbmltdW1GcmFjdGlvbkRpZ2l0cykKKyAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IG1pbmltdW1GcmFjdGlvbkRpZ2l0czsKKyAgICB9CisKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PXByaXZhdGVzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLy8gSG9vayBmb3Igc2VydmljZQorICAgIHByaXZhdGUgc3RhdGljIE51bWJlckZvcm1hdCBnZXRJbnN0YW5jZShMb2NhbGUgZGVzaXJlZExvY2FsZSwgaW50IGNob2ljZSkgeworICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UoZGVzaXJlZExvY2FsZSwgY2hvaWNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE51bWJlckZvcm1hdCByZXN1bHQgPSAoTnVtYmVyRm9ybWF0KXNlcnZpY2UuZ2V0KGRlc2lyZWRMb2NhbGUsIGNob2ljZSk7CisgICAgICAgICAgICByZXR1cm4gKE51bWJlckZvcm1hdClyZXN1bHQuY2xvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFtORVddCisgICAgcHJpdmF0ZSBzdGF0aWMgTnVtYmVyRm9ybWF0IGNyZWF0ZUluc3RhbmNlKExvY2FsZSBkZXNpcmVkTG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hvaWNlKSB7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gZ2V0UGF0dGVybihkZXNpcmVkTG9jYWxlLCBjaG9pY2UpOworICAgICAgICBEZWNpbWFsRm9ybWF0U3ltYm9scyBzeW1ib2xzID0gbmV3IERlY2ltYWxGb3JtYXRTeW1ib2xzKGRlc2lyZWRMb2NhbGUpOworICAgICAgICBEZWNpbWFsRm9ybWF0IGZvcm1hdCA9IG5ldyBEZWNpbWFsRm9ybWF0KHBhdHRlcm4sIHN5bWJvbHMpOworICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oImxvYzogIiArIGRlc2lyZWRMb2NhbGUgKyAiIGNob2ljZTogIiArIGNob2ljZSArICIgcGF0OiAiICsgcGF0dGVybiArICIgc3ltOiAiICsgc3ltYm9scyArICIgcmVzdWx0OiAiICsgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAvKkJ1ZyA0NDA4MDY2CisgICAgICAgICBBZGQgY29kZXMgZm9yIHRoZSBuZXcgbWV0aG9kIGdldEludGVnZXJJbnN0YW5jZSgpIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKGNob2ljZSA9PSBJTlRFR0VSU1RZTEUpIHsKKyAgICAgICAgICAgIGZvcm1hdC5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoMCk7CisgICAgICAgICAgICBmb3JtYXQuc2V0RGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKGZhbHNlKTsKKyAgICAgICAgICAgIGZvcm1hdC5zZXRQYXJzZUludGVnZXJPbmx5KHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmb3JtYXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBwYXR0ZXJuIGZvciB0aGUgcHJvdmlkZWQgbG9jYWxlIGFuZCBjaG9pY2UuCisgICAgICogQHBhcmFtIGZvckxvY2FsZSB0aGUgbG9jYWxlIG9mIHRoZSBkYXRhLgorICAgICAqIEBwYXJhbSBjaG9pY2UgdGhlIHBhdHRlcm4gZm9ybWF0LgorICAgICAqIEByZXR1cm4gdGhlIHBhdHRlcm4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIC8vIFtORVddCisgICAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgZ2V0UGF0dGVybihMb2NhbGUgZm9yTG9jYWxlLCBpbnQgY2hvaWNlKSB7CisKKyAgICAgICAgLyogVGhlIGZvbGxvd2luZyBjb2RlIHRha2VzIGNhcmUgb2YgYSBmZXcgY2FzZXMgd2hlcmUgdGhlCisgICAgICAgICAqIHJlc291cmNlIGRhdGEgaW4gdGhlIHVuZGVybHlpbmcgSkRLIGxhZ3MgdGhlIG5ldyBmZWF0dXJlcworICAgICAgICAgKiB3ZSBoYXZlIGFkZGVkIHRvIElDVTRKOiBzY2llbnRpZmljIG5vdGF0aW9uLCByb3VuZGluZywgYW5kCisgICAgICAgICAqIHNlY29uZGFyeSBncm91cGluZy4KKyAgICAgICAgICoKKyAgICAgICAgICogV2UgZGV0ZWN0IHRoZXNlIGNhc2VzIGhlcmUgYW5kIHJldHVybiB2YXJpb3VzIGhhcmQtY29kZWQKKyAgICAgICAgICogcmVzb3VyY2UgZGF0YS4gIFRoaXMgaXMgdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGZvciBub3csIGJ1dAorICAgICAgICAgKiBpdCBpcyBub3QgYSBnb29kIGxvbmctdGVybSBtZWNoYW5pc20uCisgICAgICAgICAqIAorICAgICAgICAgKiBXZSBzaG91bGQgcmVwbGFjZSB0aGlzIGNvZGUgd2l0aCBhIGRhdGEtZHJpdmVuIG1lY2hhbmlzbQorICAgICAgICAgKiB0aGF0IHJlYWRzIHRoZSBidW5kbGUgY29tLmlibS5pY3UuaW1wbC5kYXRhLkxvY2FsZUVsZW1lbnRzCisgICAgICAgICAqIGFuZCBwYXJzZXMgYW4gZXhjZXB0aW9uIHRhYmxlIHRoYXQgb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZAorICAgICAgICAgKiBkYXRhIGF0IGphdmEudGV4dC5yZXNvdXJjZS5Mb2NhbGVFbGVtZW50cyouamF2YS4KKyAgICAgICAgICogQWx0ZXJuYXRpdmVseSwgd2Ugc2hvdWxkIGNyZWF0ZSBvdXIgb3duIGNvcHkgb2YgdGhlCisgICAgICAgICAqIHJlc291cmNlIGRhdGEsIGFuZCB1c2UgdGhhdCBleGNsdXNpdmVseS4KKyAgICAgICAgICovCisKKyAgICAgICAgLy8gVEVNUE9SQVJZLCB1bnRpbCB3ZSBnZXQgc2NpZW50aWZpYyBwYXR0ZXJucyBpbnRvIHRoZSBtYWluCisgICAgICAgIC8vIHJlc291cmNlczogIFJldHJpZXZlIHNjaWVudGlmaWMgcGF0dGVybnMgZnJvbSBvdXIgcmVzb3VyY2VzLgorICAgICAgICBpZiAoY2hvaWNlID09IFNDSUVOVElGSUNTVFlMRSkgeworICAgICAgICAgICAgLy8gVGVtcG9yYXJpbHkgaGFyZCBjb2RlOyByZXRyaWV2ZSBmcm9tIHJlc291cmNlIGxhdGVyCisgICAgICAgICAgICAvKkZvciBJQ1UgY29tcGF0aWJpbGl0eSBbUmljaGFyZC9HQ0xdKi8KKyAgICAgICAgICAgIHJldHVybiAiI0UwIjsKKyAgICAgICAgICAgIC8vIHJldHVybiBOdW1iZXJGb3JtYXQuZ2V0QmFzZVN0cmluZ0FycmF5KCJOdW1iZXJQYXR0ZXJucyIpW1NDSUVOVElGSUNTVFlMRV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVEVNUE9SQVJZOiBVc2Ugcm91bmRpbmcgZm9yIFN3aXNzIGN1cnJlbmN5CisgICAgICAgIC8vaWYgKGNob2ljZSA9PSBDVVJSRU5DWVNUWUxFICYmCisgICAgICAgIC8vICAgIGZvckxvY2FsZS5nZXRDb3VudHJ5KCkuZXF1YWxzKCJDSCIpKSB7CisgICAgICAgIC8vICAgIHJldHVybiAiJ0ZyLiAnIywjIzAuMDU7J0ZyLi0nIywjIzAuMDUiOworICAgICAgICAvL30KKyAgICAgICAgLy8gVEVNUE9SQVJZOiBTcGVjaWFsIGNhc2UgSU4gbnVtYmVyIGZvcm1hdAorICAgICAgICAvL2lmIChjaG9pY2UgPT0gTlVNQkVSU1RZTEUgJiYKKyAgICAgICAgLy8gICAgZm9yTG9jYWxlLmdldENvdW50cnkoKS5lcXVhbHMoIklOIikpIHsKKyAgICAgICAgLy8gICAgcmV0dXJuICIjLCMjLCMjMC4jIyMiOworICAgICAgICAvL30KKworCQkvLyB7ZGxmfQorCQlSZXNvdXJjZUJ1bmRsZSByYiA9IElDVUxvY2FsZURhdGEuZ2V0TG9jYWxlRWxlbWVudHMoZm9yTG9jYWxlKTsKKwkJU3RyaW5nW10gbnVtYmVyUGF0dGVybnMgPSByYi5nZXRTdHJpbmdBcnJheSgiTnVtYmVyUGF0dGVybnMiKTsKKworCQkvKiB7ZGxmfQorICAgICAgICAvLyBUcnkgdGhlIGNhY2hlIGZpcnN0CisgICAgICAgIFN0cmluZ1tdIG51bWJlclBhdHRlcm5zID0gKFN0cmluZ1tdKSBjYWNoZWRMb2NhbGVEYXRhLmdldChmb3JMb2NhbGUpOworICAgICAgICBpZiAobnVtYmVyUGF0dGVybnMgPT0gbnVsbCkgeworICAgICAgICAgICAgT3ZlcmxheUJ1bmRsZSByZXNvdXJjZSA9IG5ldyBPdmVybGF5QnVuZGxlKG5ldyBTdHJpbmdbXQorICAgICAgICAgICAgICAgIHsgImNvbS5pYm0uaWN1LmltcGwuZGF0YS5Mb2NhbGVFbGVtZW50cyIsIFJFU09VUkNFX0JBU0UgfSwgZm9yTG9jYWxlKTsKKyAgICAgICAgICAgIG51bWJlclBhdHRlcm5zID0gcmVzb3VyY2UuZ2V0U3RyaW5nQXJyYXkoIk51bWJlclBhdHRlcm5zIik7CisgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlCisgICAgICAgICAgICBjYWNoZWRMb2NhbGVEYXRhLnB1dChmb3JMb2NhbGUsIG51bWJlclBhdHRlcm5zKTsgCisgICAgICAgIH0KKwkJKi8KKworICAgICAgICAvKkJ1ZyA0NDA4MDY2CisgICAgICAgICBBZGQgY29kZXMgZm9yIHRoZSBuZXcgbWV0aG9kIGdldEludGVnZXJJbnN0YW5jZSgpIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgKi8KKyAgICAgICAgaW50IGVudHJ5ID0gKGNob2ljZSA9PSBJTlRFR0VSU1RZTEUpID8gTlVNQkVSU1RZTEUgOiBjaG9pY2U7IC8vW1JpY2hhcmQvR0NMXQorICAgICAgICByZXR1cm4gbnVtYmVyUGF0dGVybnNbZW50cnldOyAvL1tSaWNoYXJkL0dDTF0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaXJzdCwgcmVhZCBpbiB0aGUgZGVmYXVsdCBzZXJpYWxpemFibGUgZGF0YS4KKyAgICAgKgorICAgICAqIFRoZW4sIGlmIDxjb2RlPnNlcmlhbFZlcnNpb25PblN0cmVhbTwvY29kZT4gaXMgbGVzcyB0aGFuIDEsIGluZGljYXRpbmcgdGhhdAorICAgICAqIHRoZSBzdHJlYW0gd2FzIHdyaXR0ZW4gYnkgSkRLIDEuMSwKKyAgICAgKiBzZXQgdGhlIDxjb2RlPmludDwvY29kZT4gZmllbGRzIHN1Y2ggYXMgPGNvZGU+bWF4aW11bUludGVnZXJEaWdpdHM8L2NvZGU+CisgICAgICogdG8gYmUgZXF1YWwgdG8gdGhlIDxjb2RlPmJ5dGU8L2NvZGU+IGZpZWxkcyBzdWNoIGFzIDxjb2RlPm1heEludGVnZXJEaWdpdHM8L2NvZGU+LAorICAgICAqIHNpbmNlIHRoZSA8Y29kZT5pbnQ8L2NvZGU+IGZpZWxkcyB3ZXJlIG5vdCBwcmVzZW50IGluIEpESyAxLjEuCisgICAgICogRmluYWxseSwgc2V0IHNlcmlhbFZlcnNpb25PblN0cmVhbSBiYWNrIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgc28gdGhhdAorICAgICAqIGRlZmF1bHQgc2VyaWFsaXphdGlvbiB3aWxsIHdvcmsgcHJvcGVybHkgaWYgdGhpcyBvYmplY3QgaXMgc3RyZWFtZWQgb3V0IGFnYWluLgorICAgICAqCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoT2JqZWN0SW5wdXRTdHJlYW0gc3RyZWFtKQorICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uCisgICAgeworICAgICAgICBzdHJlYW0uZGVmYXVsdFJlYWRPYmplY3QoKTsKKyAgICAgICAgaWYgKHNlcmlhbFZlcnNpb25PblN0cmVhbSA8IDEpIHsKKyAgICAgICAgICAgIC8vIERpZG4ndCBoYXZlIGFkZGl0aW9uYWwgaW50IGZpZWxkcywgcmVhc3NpZ24gdG8gdXNlIHRoZW0uCisgICAgICAgICAgICBtYXhpbXVtSW50ZWdlckRpZ2l0cyA9IG1heEludGVnZXJEaWdpdHM7CisgICAgICAgICAgICBtaW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1pbkludGVnZXJEaWdpdHM7CisgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBtYXhGcmFjdGlvbkRpZ2l0czsKKyAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0cyA9IG1pbkZyYWN0aW9uRGlnaXRzOworICAgICAgICB9CisgICAgICAgIC8qQnVnIDQxODU3NjEKKyAgICAgICAgICBWYWxpZGF0ZSB0aGUgbWluIGFuZCBtYXggZmllbGRzIFtSaWNoYXJkL0dDTF0KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKG1pbmltdW1JbnRlZ2VyRGlnaXRzID4gbWF4aW11bUludGVnZXJEaWdpdHMgfHwKKyAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0cyA+IG1heGltdW1GcmFjdGlvbkRpZ2l0cyB8fAorICAgICAgICAgICAgbWluaW11bUludGVnZXJEaWdpdHMgPCAwIHx8IG1pbmltdW1GcmFjdGlvbkRpZ2l0cyA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT2JqZWN0RXhjZXB0aW9uKCJEaWdpdCBjb3VudCByYW5nZSBpbnZhbGlkIik7CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsVmVyc2lvbk9uU3RyZWFtID0gY3VycmVudFNlcmlhbFZlcnNpb247CisgICAgfQorCisgICAgLyoqCisgICAgICogV3JpdGUgb3V0IHRoZSBkZWZhdWx0IHNlcmlhbGl6YWJsZSBkYXRhLCBhZnRlciBmaXJzdCBzZXR0aW5nCisgICAgICogdGhlIDxjb2RlPmJ5dGU8L2NvZGU+IGZpZWxkcyBzdWNoIGFzIDxjb2RlPm1heEludGVnZXJEaWdpdHM8L2NvZGU+IHRvIGJlCisgICAgICogZXF1YWwgdG8gdGhlIDxjb2RlPmludDwvY29kZT4gZmllbGRzIHN1Y2ggYXMgPGNvZGU+bWF4aW11bUludGVnZXJEaWdpdHM8L2NvZGU+CisgICAgICogKG9yIHRvIDxjb2RlPkJ5dGUuTUFYX1ZBTFVFPC9jb2RlPiwgd2hpY2hldmVyIGlzIHNtYWxsZXIpLCBmb3IgY29tcGF0aWJpbGl0eQorICAgICAqIHdpdGggdGhlIEpESyAxLjEgdmVyc2lvbiBvZiB0aGUgc3RyZWFtIGZvcm1hdC4KKyAgICAgKgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChPYmplY3RPdXRwdXRTdHJlYW0gc3RyZWFtKQorICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBtYXhJbnRlZ2VyRGlnaXRzID0gKG1heGltdW1JbnRlZ2VyRGlnaXRzID4gQnl0ZS5NQVhfVkFMVUUpID8gQnl0ZS5NQVhfVkFMVUUgOgorICAgICAgICAgICAgKGJ5dGUpbWF4aW11bUludGVnZXJEaWdpdHM7CisgICAgICAgIG1pbkludGVnZXJEaWdpdHMgPSAobWluaW11bUludGVnZXJEaWdpdHMgPiBCeXRlLk1BWF9WQUxVRSkgPyBCeXRlLk1BWF9WQUxVRSA6CisgICAgICAgICAgICAoYnl0ZSltaW5pbXVtSW50ZWdlckRpZ2l0czsKKyAgICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSAobWF4aW11bUZyYWN0aW9uRGlnaXRzID4gQnl0ZS5NQVhfVkFMVUUpID8gQnl0ZS5NQVhfVkFMVUUgOgorICAgICAgICAgICAgKGJ5dGUpbWF4aW11bUZyYWN0aW9uRGlnaXRzOworICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IChtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPiBCeXRlLk1BWF9WQUxVRSkgPyBCeXRlLk1BWF9WQUxVRSA6CisgICAgICAgICAgICAoYnl0ZSltaW5pbXVtRnJhY3Rpb25EaWdpdHM7CisgICAgICAgIHN0cmVhbS5kZWZhdWx0V3JpdGVPYmplY3QoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWNoZSB0byBob2xkIHRoZSBOdW1iZXJQYXR0ZXJucyBvZiBhIExvY2FsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIYXNodGFibGUgY2FjaGVkTG9jYWxlRGF0YSA9IG5ldyBIYXNodGFibGUoMyk7CisKKyAgICAvKkJ1ZyA0NDA4MDY2CisgICAgICBBZGQgRmllbGQgZm9yIHRoZSBuZXcgbWV0aG9kIGdldEludGVnZXJJbnN0YW5jZSgpIFtSaWNoYXJkL0dDTF0KKyAgICAqLworCisgICAgLyoqCisgICAgICogVHJ1ZSBpZiB0aGUgdGhlIGdyb3VwaW5nIChpLmUuIHRob3VzYW5kcykgc2VwYXJhdG9yIGlzIHVzZWQgd2hlbgorICAgICAqIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgbnVtYmVycy4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNpc0dyb3VwaW5nVXNlZAorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBncm91cGluZ1VzZWQgPSB0cnVlOworCisgICAgLyoqCisgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYQorICAgICAqIG51bWJlci4gIDxjb2RlPm1heEludGVnZXJEaWdpdHM8L2NvZGU+IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCisgICAgICogPGNvZGU+bWluSW50ZWdlckRpZ2l0czwvY29kZT4uCisgICAgICogPHA+CisgICAgICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIGZpZWxkIGV4aXN0cyBvbmx5IGZvciBzZXJpYWxpemF0aW9uCisgICAgICogY29tcGF0aWJpbGl0eSB3aXRoIEpESyAxLjEuICBJbiBKREsgMS4yIGFuZCBoaWdoZXIsIHRoZSBuZXcKKyAgICAgKiA8Y29kZT5pbnQ8L2NvZGU+IGZpZWxkIDxjb2RlPm1heGltdW1JbnRlZ2VyRGlnaXRzPC9jb2RlPiBpcyB1c2VkIGluc3RlYWQuCisgICAgICogV2hlbiB3cml0aW5nIHRvIGEgc3RyZWFtLCA8Y29kZT5tYXhJbnRlZ2VyRGlnaXRzPC9jb2RlPiBpcyBzZXQgdG8KKyAgICAgKiA8Y29kZT5tYXhpbXVtSW50ZWdlckRpZ2l0czwvY29kZT4gb3IgPGNvZGU+Qnl0ZS5NQVhfVkFMVUU8L2NvZGU+LAorICAgICAqIHdoaWNoZXZlciBpcyBzbWFsbGVyLiAgV2hlbiByZWFkaW5nIGZyb20gYSBzdHJlYW0sIHRoaXMgZmllbGQgaXMgdXNlZAorICAgICAqIG9ubHkgaWYgPGNvZGU+c2VyaWFsVmVyc2lvbk9uU3RyZWFtPC9jb2RlPiBpcyBsZXNzIHRoYW4gMS4gCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0TWF4aW11bUludGVnZXJEaWdpdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIGJ5dGUgICAgbWF4SW50ZWdlckRpZ2l0cyA9IDQwOworCisgICAgLyoqCisgICAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYQorICAgICAqIG51bWJlci4gIDxjb2RlPm1pbmltdW1JbnRlZ2VyRGlnaXRzPC9jb2RlPiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgICAqIDxjb2RlPm1heGltdW1JbnRlZ2VyRGlnaXRzPC9jb2RlPi4KKyAgICAgKiA8cD4KKyAgICAgKiA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgZmllbGQgZXhpc3RzIG9ubHkgZm9yIHNlcmlhbGl6YXRpb24KKyAgICAgKiBjb21wYXRpYmlsaXR5IHdpdGggSkRLIDEuMS4gIEluIEpESyAxLjIgYW5kIGhpZ2hlciwgdGhlIG5ldworICAgICAqIDxjb2RlPmludDwvY29kZT4gZmllbGQgPGNvZGU+bWluaW11bUludGVnZXJEaWdpdHM8L2NvZGU+IGlzIHVzZWQgaW5zdGVhZC4KKyAgICAgKiBXaGVuIHdyaXRpbmcgdG8gYSBzdHJlYW0sIDxjb2RlPm1pbkludGVnZXJEaWdpdHM8L2NvZGU+IGlzIHNldCB0bworICAgICAqIDxjb2RlPm1pbmltdW1JbnRlZ2VyRGlnaXRzPC9jb2RlPiBvciA8Y29kZT5CeXRlLk1BWF9WQUxVRTwvY29kZT4sCisgICAgICogd2hpY2hldmVyIGlzIHNtYWxsZXIuICBXaGVuIHJlYWRpbmcgZnJvbSBhIHN0cmVhbSwgdGhpcyBmaWVsZCBpcyB1c2VkCisgICAgICogb25seSBpZiA8Y29kZT5zZXJpYWxWZXJzaW9uT25TdHJlYW08L2NvZGU+IGlzIGxlc3MgdGhhbiAxLiAKKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRNaW5pbXVtSW50ZWdlckRpZ2l0cworICAgICAqLworICAgIHByaXZhdGUgYnl0ZSAgICBtaW5JbnRlZ2VyRGlnaXRzID0gMTsKKworICAgIC8qKgorICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiB0aGUgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIGEKKyAgICAgKiBudW1iZXIuICA8Y29kZT5tYXhpbXVtRnJhY3Rpb25EaWdpdHM8L2NvZGU+IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCisgICAgICogPGNvZGU+bWluaW11bUZyYWN0aW9uRGlnaXRzPC9jb2RlPi4KKyAgICAgKiA8cD4KKyAgICAgKiA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgZmllbGQgZXhpc3RzIG9ubHkgZm9yIHNlcmlhbGl6YXRpb24KKyAgICAgKiBjb21wYXRpYmlsaXR5IHdpdGggSkRLIDEuMS4gIEluIEpESyAxLjIgYW5kIGhpZ2hlciwgdGhlIG5ldworICAgICAqIDxjb2RlPmludDwvY29kZT4gZmllbGQgPGNvZGU+bWF4aW11bUZyYWN0aW9uRGlnaXRzPC9jb2RlPiBpcyB1c2VkIGluc3RlYWQuCisgICAgICogV2hlbiB3cml0aW5nIHRvIGEgc3RyZWFtLCA8Y29kZT5tYXhGcmFjdGlvbkRpZ2l0czwvY29kZT4gaXMgc2V0IHRvCisgICAgICogPGNvZGU+bWF4aW11bUZyYWN0aW9uRGlnaXRzPC9jb2RlPiBvciA8Y29kZT5CeXRlLk1BWF9WQUxVRTwvY29kZT4sCisgICAgICogd2hpY2hldmVyIGlzIHNtYWxsZXIuICBXaGVuIHJlYWRpbmcgZnJvbSBhIHN0cmVhbSwgdGhpcyBmaWVsZCBpcyB1c2VkCisgICAgICogb25seSBpZiA8Y29kZT5zZXJpYWxWZXJzaW9uT25TdHJlYW08L2NvZGU+IGlzIGxlc3MgdGhhbiAxLiAKKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIGJ5dGUgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSAzOyAgICAvLyBpbnZhcmlhbnQsID49IG1pbkZyYWN0aW9uRGlnaXRzCisKKyAgICAvKioKKyAgICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFsbG93ZWQgaW4gdGhlIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiBhCisgICAgICogbnVtYmVyLiAgPGNvZGU+bWluaW11bUZyYWN0aW9uRGlnaXRzPC9jb2RlPiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgICAqIDxjb2RlPm1heGltdW1GcmFjdGlvbkRpZ2l0czwvY29kZT4uCisgICAgICogPHA+CisgICAgICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIGZpZWxkIGV4aXN0cyBvbmx5IGZvciBzZXJpYWxpemF0aW9uCisgICAgICogY29tcGF0aWJpbGl0eSB3aXRoIEpESyAxLjEuICBJbiBKREsgMS4yIGFuZCBoaWdoZXIsIHRoZSBuZXcKKyAgICAgKiA8Y29kZT5pbnQ8L2NvZGU+IGZpZWxkIDxjb2RlPm1pbmltdW1GcmFjdGlvbkRpZ2l0czwvY29kZT4gaXMgdXNlZCBpbnN0ZWFkLgorICAgICAqIFdoZW4gd3JpdGluZyB0byBhIHN0cmVhbSwgPGNvZGU+bWluRnJhY3Rpb25EaWdpdHM8L2NvZGU+IGlzIHNldCB0bworICAgICAqIDxjb2RlPm1pbmltdW1GcmFjdGlvbkRpZ2l0czwvY29kZT4gb3IgPGNvZGU+Qnl0ZS5NQVhfVkFMVUU8L2NvZGU+LAorICAgICAqIHdoaWNoZXZlciBpcyBzbWFsbGVyLiAgV2hlbiByZWFkaW5nIGZyb20gYSBzdHJlYW0sIHRoaXMgZmllbGQgaXMgdXNlZAorICAgICAqIG9ubHkgaWYgPGNvZGU+c2VyaWFsVmVyc2lvbk9uU3RyZWFtPC9jb2RlPiBpcyBsZXNzIHRoYW4gMS4gCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0TWluaW11bUZyYWN0aW9uRGlnaXRzCisgICAgICovCisgICAgcHJpdmF0ZSBieXRlICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gMDsKKworICAgIC8qKgorICAgICAqIFRydWUgaWYgdGhpcyBmb3JtYXQgd2lsbCBwYXJzZSBudW1iZXJzIGFzIGludGVnZXJzIG9ubHkuCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjaXNQYXJzZUludGVnZXJPbmx5CisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHBhcnNlSW50ZWdlck9ubHkgPSBmYWxzZTsKKworICAgIC8vIG5ldyBmaWVsZHMgZm9yIDEuMi4gIGJ5dGUgaXMgdG9vIHNtYWxsIGZvciBpbnRlZ2VyIGRpZ2l0cy4KKworICAgIC8qKgorICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiB0aGUgaW50ZWdlciBwb3J0aW9uIG9mIGEKKyAgICAgKiBudW1iZXIuICA8Y29kZT5tYXhpbXVtSW50ZWdlckRpZ2l0czwvY29kZT4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKyAgICAgKiA8Y29kZT5taW5pbXVtSW50ZWdlckRpZ2l0czwvY29kZT4uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0TWF4aW11bUludGVnZXJEaWdpdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCAgICBtYXhpbXVtSW50ZWdlckRpZ2l0cyA9IDQwOworCisgICAgLyoqCisgICAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhbGxvd2VkIGluIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYQorICAgICAqIG51bWJlci4gIDxjb2RlPm1pbmltdW1JbnRlZ2VyRGlnaXRzPC9jb2RlPiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgICAqIDxjb2RlPm1heGltdW1JbnRlZ2VyRGlnaXRzPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRNaW5pbXVtSW50ZWdlckRpZ2l0cworICAgICAqLworICAgIHByaXZhdGUgaW50ICAgIG1pbmltdW1JbnRlZ2VyRGlnaXRzID0gMTsKKworICAgIC8qKgorICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiB0aGUgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIGEKKyAgICAgKiBudW1iZXIuICA8Y29kZT5tYXhpbXVtRnJhY3Rpb25EaWdpdHM8L2NvZGU+IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCisgICAgICogPGNvZGU+bWluaW11bUZyYWN0aW9uRGlnaXRzPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlICNnZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSAzOyAgICAvLyBpbnZhcmlhbnQsID49IG1pbkZyYWN0aW9uRGlnaXRzCisKKyAgICAvKioKKyAgICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFsbG93ZWQgaW4gdGhlIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiBhCisgICAgICogbnVtYmVyLiAgPGNvZGU+bWluaW11bUZyYWN0aW9uRGlnaXRzPC9jb2RlPiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgICAqIDxjb2RlPm1heGltdW1GcmFjdGlvbkRpZ2l0czwvY29kZT4uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICogQHNlZSAjZ2V0TWluaW11bUZyYWN0aW9uRGlnaXRzCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzID0gMDsKKworICAgIHN0YXRpYyBmaW5hbCBpbnQgY3VycmVudFNlcmlhbFZlcnNpb24gPSAxOworCisgICAgLyoqCisgICAgICogRGVzY3JpYmVzIHRoZSB2ZXJzaW9uIG9mIDxjb2RlPk51bWJlckZvcm1hdDwvY29kZT4gcHJlc2VudCBvbiB0aGUgc3RyZWFtLgorICAgICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisgICAgICogPHVsPgorICAgICAqIDxsaT48Yj4wPC9iPiAob3IgdW5pbml0aWFsaXplZCk6IHRoZSBKREsgMS4xIHZlcnNpb24gb2YgdGhlIHN0cmVhbSBmb3JtYXQuCisgICAgICogICAgIEluIHRoaXMgdmVyc2lvbiwgdGhlIDxjb2RlPmludDwvY29kZT4gZmllbGRzIHN1Y2ggYXMKKyAgICAgKiAgICAgPGNvZGU+bWF4aW11bUludGVnZXJEaWdpdHM8L2NvZGU+IHdlcmUgbm90IHByZXNlbnQsIGFuZCB0aGUgPGNvZGU+Ynl0ZTwvY29kZT4KKyAgICAgKiAgICAgZmllbGRzIHN1Y2ggYXMgPGNvZGU+bWF4SW50ZWdlckRpZ2l0czwvY29kZT4gYXJlIHVzZWQgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIDxsaT48Yj4xPC9iPjogdGhlIEpESyAxLjIgdmVyc2lvbiBvZiB0aGUgc3RyZWFtIGZvcm1hdC4gIFRoZSB2YWx1ZXMgb2YgdGhlCisgICAgICogICAgIDxjb2RlPmJ5dGU8L2NvZGU+IGZpZWxkcyBzdWNoIGFzIDxjb2RlPm1heEludGVnZXJEaWdpdHM8L2NvZGU+IGFyZSBpZ25vcmVkLAorICAgICAqICAgICBhbmQgdGhlIDxjb2RlPmludDwvY29kZT4gZmllbGRzIHN1Y2ggYXMgPGNvZGU+bWF4aW11bUludGVnZXJEaWdpdHM8L2NvZGU+CisgICAgICogICAgIGFyZSB1c2VkIGluc3RlYWQuCisgICAgICogPC91bD4KKyAgICAgKiBXaGVuIHN0cmVhbWluZyBvdXQgYSA8Y29kZT5OdW1iZXJGb3JtYXQ8L2NvZGU+LCB0aGUgbW9zdCByZWNlbnQgZm9ybWF0CisgICAgICogKGNvcnJlc3BvbmRpbmcgdG8gdGhlIGhpZ2hlc3QgYWxsb3dhYmxlIDxjb2RlPnNlcmlhbFZlcnNpb25PblN0cmVhbTwvY29kZT4pCisgICAgICogaXMgYWx3YXlzIHdyaXR0ZW4uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgc2VyaWFsVmVyc2lvbk9uU3RyZWFtID0gY3VycmVudFNlcmlhbFZlcnNpb247CisKKyAgICAvLyBSZW1vdmVkICJpbXBsZW1lbnRzIENsb25lYWJsZSIgY2xhdXNlLiAgTmVlZHMgdG8gdXBkYXRlIHNlcmlhbGl6YXRpb24KKyAgICAvLyBJRCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTIzMDg0NjAxMjU3MzM3MTM5NDRMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvUXVhbnRpZmllci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvUXVhbnRpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0YzExNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9RdWFudGlmaWVyLmphdmEKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9RdWFudGlmaWVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDYvMjggMTk6MTU6NTIgJCAKKyAqICRSZXZpc2lvbjogMS44ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKKworY2xhc3MgUXVhbnRpZmllciBpbXBsZW1lbnRzIFVuaWNvZGVNYXRjaGVyIHsKKworICAgIHByaXZhdGUgVW5pY29kZU1hdGNoZXIgbWF0Y2hlcjsKKworICAgIHByaXZhdGUgaW50IG1pbkNvdW50OworCisgICAgcHJpdmF0ZSBpbnQgbWF4Q291bnQ7CisKKyAgICAvKioKKyAgICAgKiBNYXhpbXVtIGNvdW50IGEgcXVhbnRpZmllciBjYW4gaGF2ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVggPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKworICAgIHB1YmxpYyBRdWFudGlmaWVyKFVuaWNvZGVNYXRjaGVyIHRoZU1hdGNoZXIsCisgICAgICAgICAgICAgICAgICAgICAgaW50IHRoZU1pbkNvdW50LCBpbnQgdGhlTWF4Q291bnQpIHsKKyAgICAgICAgaWYgKHRoZU1hdGNoZXIgPT0gbnVsbCB8fCBtaW5Db3VudCA8IDAgfHwgbWF4Q291bnQgPCAwIHx8IG1pbkNvdW50ID4gbWF4Q291bnQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICBtYXRjaGVyID0gdGhlTWF0Y2hlcjsKKyAgICAgICAgbWluQ291bnQgPSB0aGVNaW5Db3VudDsKKyAgICAgICAgbWF4Q291bnQgPSB0aGVNYXhDb3VudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnQgVW5pY29kZU1hdGNoZXIgQVBJLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgbWF0Y2hlcyhSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpbmNyZW1lbnRhbCkgeworICAgICAgICBpbnQgc3RhcnQgPSBvZmZzZXRbMF07CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChjb3VudCA8IG1heENvdW50KSB7CisgICAgICAgICAgICBpbnQgcG9zID0gb2Zmc2V0WzBdOworICAgICAgICAgICAgaW50IG0gPSBtYXRjaGVyLm1hdGNoZXModGV4dCwgb2Zmc2V0LCBsaW1pdCwgaW5jcmVtZW50YWwpOworICAgICAgICAgICAgaWYgKG0gPT0gVV9NQVRDSCkgeworICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBvZmZzZXRbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgb2Zmc2V0IGhhcyBub3QgbW92ZWQgd2UgaGF2ZSBhIHplcm8td2lkdGggbWF0Y2guCisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGtlZXAgbWF0Y2hpbmcgaXQgaW5maW5pdGVseS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpbmNyZW1lbnRhbCAmJiBtID09IFVfUEFSVElBTF9NQVRDSCkgeworICAgICAgICAgICAgICAgIHJldHVybiBVX1BBUlRJQUxfTUFUQ0g7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpbmNyZW1lbnRhbCAmJiBvZmZzZXRbMF0gPT0gbGltaXQpIHsKKyAgICAgICAgICAgIHJldHVybiBVX1BBUlRJQUxfTUFUQ0g7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50ID49IG1pbkNvdW50KSB7CisgICAgICAgICAgICByZXR1cm4gVV9NQVRDSDsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXRbMF0gPSBzdGFydDsKKyAgICAgICAgcmV0dXJuIFVfTUlTTUFUQ0g7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50IFVuaWNvZGVNYXRjaGVyIEFQSQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9QYXR0ZXJuKGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtYXRjaGVyLnRvUGF0dGVybihlc2NhcGVVbnByaW50YWJsZSkpOworICAgICAgICBpZiAobWluQ291bnQgPT0gMCkgeworICAgICAgICAgICAgaWYgKG1heENvdW50ID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgnPycpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1heENvdW50ID09IE1BWCkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCcqJykudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGVsc2UgZmFsbCB0aHJvdWdoCisgICAgICAgIH0gZWxzZSBpZiAobWluQ291bnQgPT0gMSAmJiBtYXhDb3VudCA9PSBNQVgpIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCcrJykudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuYXBwZW5kKCd7Jyk7CisgICAgICAgIFV0aWxpdHkuYXBwZW5kTnVtYmVyKHJlc3VsdCwgbWluQ291bnQpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcsJyk7CisgICAgICAgIGlmIChtYXhDb3VudCAhPSBNQVgpIHsKKyAgICAgICAgICAgIFV0aWxpdHkuYXBwZW5kTnVtYmVyKHJlc3VsdCwgbWF4Q291bnQpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJ30nKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudCBVbmljb2RlTWF0Y2hlciBBUEkKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzSW5kZXhWYWx1ZShpbnQgdikgeworICAgICAgICByZXR1cm4gKG1pbkNvdW50ID09IDApIHx8IG1hdGNoZXIubWF0Y2hlc0luZGV4VmFsdWUodik7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gb2YgVW5pY29kZU1hdGNoZXIgQVBJLiAgVW5pb24gdGhlIHNldCBvZiBhbGwKKyAgICAgKiBjaGFyYWN0ZXJzIHRoYXQgbWF5IGJlIG1hdGNoZWQgYnkgdGhpcyBvYmplY3QgaW50byB0aGUgZ2l2ZW4KKyAgICAgKiBzZXQuCisgICAgICogQHBhcmFtIHRvVW5pb25UbyB0aGUgc2V0IGludG8gd2hpY2ggdG8gdW5pb24gdGhlIHNvdXJjZSBjaGFyYWN0ZXJzCisgICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0b1VuaW9uVG8KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRNYXRjaFNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKSB7CisgICAgICAgIGlmIChtYXhDb3VudCA+IDApIHsKKyAgICAgICAgICAgIG1hdGNoZXIuYWRkTWF0Y2hTZXRUbyh0b1VuaW9uVG8pOworICAgICAgICB9CisgICAgfQorfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvUmVtb3ZlVHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1JlbW92ZVRyYW5zbGl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODI1Zjk5NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1JlbW92ZVRyYW5zbGl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvUmVtb3ZlVHJhbnNsaXRlcmF0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjoxMiAkIAorICogJFJldmlzaW9uOiAxLjYgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogQSB0cmFuc2xpdGVyYXRvciB0aGF0IHJlbW92ZXMgY2hhcmFjdGVycy4gIFRoaXMgaXMgdXNlZnVsIGluIGNvbmp1bmN0aW9uCisgKiB3aXRoIGEgZmlsdGVyLgorICovCitjbGFzcyBSZW1vdmVUcmFuc2xpdGVyYXRvciBleHRlbmRzIFRyYW5zbGl0ZXJhdG9yIHsKKworICAgIC8qKgorICAgICAqIElEIGZvciB0aGlzIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBfSUQgPSAiQW55LVJlbW92ZSI7CisKKyAgICAvKioKKyAgICAgKiBTeXN0ZW0gcmVnaXN0cmF0aW9uIGhvb2suCisgICAgICovCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXIoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeShfSUQsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVtb3ZlVHJhbnNsaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyU3BlY2lhbEludmVyc2UoIlJlbW92ZSIsICJOdWxsIiwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB0cmFuc2xpdGVyYXRvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUmVtb3ZlVHJhbnNsaXRlcmF0b3IoKSB7CisgICAgICAgIHN1cGVyKF9JRCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyB7QGxpbmsgVHJhbnNsaXRlcmF0b3IjaGFuZGxlVHJhbnNsaXRlcmF0ZX0uCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gaW5kZXgsIGJvb2xlYW4gaW5jcmVtZW50YWwpIHsKKyAgICAgICAgLy8gT3VyIGNhbGxlciAoZmlsdGVyZWRUcmFuc2xpdGVyYXRlKSBoYXMgYWxyZWFkeSBuYXJyb3dlZCB1cworICAgICAgICAvLyB0byBhbiB1bmZpbHRlcmVkIHJ1bi4gIERlbGV0ZSBpdC4KKyAgICAgICAgdGV4dC5yZXBsYWNlKGluZGV4LnN0YXJ0LCBpbmRleC5saW1pdCwgIiIpOworICAgICAgICBpbnQgbGVuID0gaW5kZXgubGltaXQgLSBpbmRleC5zdGFydDsKKyAgICAgICAgaW5kZXguY29udGV4dExpbWl0IC09IGxlbjsKKyAgICAgICAgaW5kZXgubGltaXQgLT0gbGVuOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1JlcGxhY2VhYmxlLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9SZXBsYWNlYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmOWVkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9SZXBsYWNlYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9SZXBsYWNlYWJsZS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzA1IDAxOjIyOjAwICQgCisgKiAkUmV2aXNpb246IDEuMTEgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKKy8qKgorICogPGNvZGU+UmVwbGFjZWFibGU8L2NvZGU+IGlzIGFuIGludGVyZmFjZSByZXByZXNlbnRpbmcgYQorICogc3RyaW5nIG9mIGNoYXJhY3RlcnMgdGhhdCBzdXBwb3J0cyB0aGUgcmVwbGFjZW1lbnQgb2YgYSByYW5nZSBvZgorICogaXRzZWxmIHdpdGggYSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMuICBJdCBpcyB1c2VkIGJ5IEFQSXMgdGhhdAorICogY2hhbmdlIGEgcGllY2Ugb2YgdGV4dCB3aGlsZSByZXRhaW5pbmcgbWV0YWRhdGEuICBNZXRhZGF0YSBpcyBkYXRhCisgKiBvdGhlciB0aGFuIHRoZSBVbmljb2RlIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgY2hhcjMyQXQoKS4gIE9uZQorICogZXhhbXBsZSBvZiBtZXRhZGF0YSBpcyBzdHlsZSBhdHRyaWJ1dGVzOyBhbm90aGVyIGlzIGFuIGVkaXQKKyAqIGhpc3RvcnksIG1hcmtpbmcgZWFjaCBjaGFyYWN0ZXIgd2l0aCBhbiBhdXRob3IgYW5kIHJldmlzaW9uIG51bWJlci4KKyAqCisgKiA8cD5BbiBpbXBsaWNpdCBhc3BlY3Qgb2YgdGhlIDxjb2RlPlJlcGxhY2VhYmxlPC9jb2RlPiBBUEkgaXMgdGhhdAorICogZHVyaW5nIGEgcmVwbGFjZSBvcGVyYXRpb24sIG5ldyBjaGFyYWN0ZXJzIHRha2Ugb24gdGhlIG1ldGFkYXRhIG9mCisgKiB0aGUgb2xkIGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cmluZyAidGhlIDxiPmJvbGQ8L2I+CisgKiBmb250IiBoYXMgcmFuZ2UgKDQsIDgpIHJlcGxhY2VkIHdpdGggInN0cm9uZyIsIHRoZW4gaXQgYmVjb21lcyAidGhlCisgKiA8Yj5zdHJvbmc8L2I+IGZvbnQiLgorICoKKyAqIDxwPjxjb2RlPlJlcGxhY2VhYmxlPC9jb2RlPiBzcGVjaWZpZXMgcmFuZ2VzIHVzaW5nIGEgc3RhcnQKKyAqIG9mZnNldCBhbmQgYSBsaW1pdCBvZmZzZXQuICBUaGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB0aHVzIHNwZWNpZmllZAorICogaW5jbHVkZXMgdGhlIGNoYXJhY3RlcnMgYXQgb2Zmc2V0IHN0YXJ0Li5saW1pdC0xLiAgVGhhdCBpcywgdGhlCisgKiBzdGFydCBvZmZzZXQgaXMgaW5jbHVzaXZlLCBhbmQgdGhlIGxpbWl0IG9mZnNldCBpcyBleGNsdXNpdmUuCisgKgorICogPHA+PGNvZGU+UmVwbGFjZWFibGU8L2NvZGU+IGFsc28gaW5jbHVkZXMgQVBJIHRvIGFjY2VzcyBjaGFyYWN0ZXJzCisgKiBpbiB0aGUgc3RyaW5nOiA8Y29kZT5sZW5ndGgoKTwvY29kZT4sIDxjb2RlPmNoYXJBdCgpPC9jb2RlPiwKKyAqIDxjb2RlPmNoYXIzMkF0KCk8L2NvZGU+LCBhbmQgPGNvZGU+ZXh0cmFjdEJldHdlZW4oKTwvY29kZT4uCisgKgorICogPHA+Rm9yIGEgc3ViY2xhc3MgdG8gc3VwcG9ydCBtZXRhZGF0YSwgdHlwaWNhbCBiZWhhdmlvciBvZgorICogPGNvZGU+cmVwbGFjZSgpPC9jb2RlPiBpcyB0aGUgZm9sbG93aW5nOgorICogPHVsPgorICogICA8bGk+U2V0IHRoZSBtZXRhZGF0YSBvZiB0aGUgbmV3IHRleHQgdG8gdGhlIG1ldGFkYXRhIG9mIHRoZSBmaXJzdAorICogICBjaGFyYWN0ZXIgcmVwbGFjZWQ8L2xpPgorICogICA8bGk+SWYgbm8gY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQsIHVzZSB0aGUgbWV0YWRhdGEgb2YgdGhlCisgKiAgIHByZXZpb3VzIGNoYXJhY3RlcjwvbGk+CisgKiAgIDxsaT5JZiB0aGVyZSBpcyBubyBwcmV2aW91cyBjaGFyYWN0ZXIgKGkuZS4gc3RhcnQgPT0gMCksIHVzZSB0aGUKKyAqICAgZm9sbG93aW5nIGNoYXJhY3RlcjwvbGk+CisgKiAgIDxsaT5JZiB0aGVyZSBpcyBubyBmb2xsb3dpbmcgY2hhcmFjdGVyIChpLmUuIHRoZSByZXBsYWNlYWJsZSB3YXMKKyAqICAgZW1wdHkpLCB1c2UgZGVmYXVsdCBtZXRhZGF0YTxicj4KKyAqICAgPGxpPklmIHRoZSBjb2RlIHBvaW50IFUrRkZGRiBpcyBzZWVuLCBpdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMKKyAqICAgYSBzcGVjaWFsIG1hcmtlciBoYXZpbmcgbm8gbWV0YWRhdGE8bGk+CisgKiAgIDwvbGk+CisgKiA8L3VsPgorICogSWYgdGhpcyBpcyBub3QgdGhlIGJlaGF2aW9yLCB0aGUgc3ViY2xhc3Mgc2hvdWxkIGRvY3VtZW50IGFueSBkaWZmZXJlbmNlcy4KKyAqIAorICogPHA+Q29weXJpZ2h0ICZjb3B5OyBJQk0gQ29ycG9yYXRpb24gMTk5OS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQGF1dGhvciBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVwbGFjZWFibGUgeworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiAxNi1iaXQgY29kZSB1bml0cyBpbiB0aGUgdGV4dC4KKyAgICAgKiBAcmV0dXJuIG51bWJlciBvZiAxNi1iaXQgY29kZSB1bml0cyBpbiB0ZXh0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovIAorICAgIGludCBsZW5ndGgoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIDE2LWJpdCBjb2RlIHVuaXQgYXQgdGhlIGdpdmVuIG9mZnNldCBpbnRvIHRoZSB0ZXh0LgorICAgICAqIEBwYXJhbSBvZmZzZXQgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDxjb2RlPmxlbmd0aCgpPC9jb2RlPi0xCisgICAgICogaW5jbHVzaXZlCisgICAgICogQHJldHVybiAxNi1iaXQgY29kZSB1bml0IG9mIHRleHQgYXQgZ2l2ZW4gb2Zmc2V0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgY2hhciBjaGFyQXQoaW50IG9mZnNldCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSAzMi1iaXQgY29kZSBwb2ludCBhdCB0aGUgZ2l2ZW4gMTYtYml0IG9mZnNldCBpbnRvCisgICAgICogdGhlIHRleHQuICBUaGlzIGFzc3VtZXMgdGhlIHRleHQgaXMgc3RvcmVkIGFzIDE2LWJpdCBjb2RlIHVuaXRzCisgICAgICogd2l0aCBzdXJyb2dhdGUgcGFpcnMgaW50ZXJtaXhlZC4gIElmIHRoZSBvZmZzZXQgb2YgYSBsZWFkaW5nIG9yCisgICAgICogdHJhaWxpbmcgY29kZSB1bml0IG9mIGEgc3Vycm9nYXRlIHBhaXIgaXMgZ2l2ZW4sIHJldHVybiB0aGUKKyAgICAgKiBjb2RlIHBvaW50IG9mIHRoZSBzdXJyb2dhdGUgcGFpci4KKyAgICAgKgorICAgICAqIDxwPk1vc3Qgc3ViY2xhc3NlcyBjYW4gcmV0dXJuCisgICAgICogPGNvZGU+Y29tLmlibS5pY3UudGV4dC5VVEYxNi5jaGFyQXQodGhpcywgb2Zmc2V0KTwvY29kZT4uCisgICAgICogQHBhcmFtIG9mZnNldCBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgPGNvZGU+bGVuZ3RoKCk8L2NvZGU+LTEKKyAgICAgKiBpbmNsdXNpdmUKKyAgICAgKiBAcmV0dXJuIDMyLWJpdCBjb2RlIHBvaW50IG9mIHRleHQgYXQgZ2l2ZW4gb2Zmc2V0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgaW50IGNoYXIzMkF0KGludCBvZmZzZXQpOworCisgICAgLyoqCisgICAgICogQ29waWVzIGNoYXJhY3RlcnMgZnJvbSB0aGlzIG9iamVjdCBpbnRvIHRoZSBkZXN0aW5hdGlvbgorICAgICAqIGNoYXJhY3RlciBhcnJheS4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYmUgY29waWVkIGlzIGF0IGluZGV4CisgICAgICogPGNvZGU+c3JjU3RhcnQ8L2NvZGU+OyB0aGUgbGFzdCBjaGFyYWN0ZXIgdG8gYmUgY29waWVkIGlzIGF0CisgICAgICogaW5kZXggPGNvZGU+c3JjTGltaXQtMTwvY29kZT4gKHRodXMgdGhlIHRvdGFsIG51bWJlciBvZgorICAgICAqIGNoYXJhY3RlcnMgdG8gYmUgY29waWVkIGlzIDxjb2RlPnNyY0xpbWl0LXNyY1N0YXJ0PC9jb2RlPikuIFRoZQorICAgICAqIGNoYXJhY3RlcnMgYXJlIGNvcGllZCBpbnRvIHRoZSBzdWJhcnJheSBvZiA8Y29kZT5kc3Q8L2NvZGU+CisgICAgICogc3RhcnRpbmcgYXQgaW5kZXggPGNvZGU+ZHN0U3RhcnQ8L2NvZGU+IGFuZCBlbmRpbmcgYXQgaW5kZXgKKyAgICAgKiA8Y29kZT5kc3RTdGFydCArIChzcmNMaW1pdC1zcmNTdGFydCkgLSAxPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgYmVnaW5uaW5nIGluZGV4IHRvIGNvcHksIGluY2x1c2l2ZTsgPGNvZGU+MAorICAgICAqIDw9IHN0YXJ0IDw9IGxpbWl0PC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gc3JjTGltaXQgdGhlIGVuZGluZyBpbmRleCB0byBjb3B5LCBleGNsdXNpdmU7CisgICAgICogPGNvZGU+c3RhcnQgPD0gbGltaXQgPD0gbGVuZ3RoKCk8L2NvZGU+LgorICAgICAqIEBwYXJhbSBkc3QgdGhlIGRlc3RpbmF0aW9uIGFycmF5LgorICAgICAqIEBwYXJhbSBkc3RTdGFydCB0aGUgc3RhcnQgb2Zmc2V0IGluIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2b2lkIGdldENoYXJzKGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0LCBjaGFyIGRzdFtdLCBpbnQgZHN0U3RhcnQpOworCisgICAgLyoqCisgICAgICogUmVwbGFjZXMgYSBzdWJzdHJpbmcgb2YgdGhpcyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdGV4dC4KKyAgICAgKgorICAgICAqIDxwPlN1YmNsYXNzZXMgbXVzdCBlbnN1cmUgdGhhdCBpZiB0aGUgdGV4dCBiZXR3ZWVuIHN0YXJ0IGFuZAorICAgICAqIGxpbWl0IGlzIGVxdWFsIHRvIHRoZSByZXBsYWNlbWVudCB0ZXh0LCB0aGF0IHJlcGxhY2UgaGFzIG5vCisgICAgICogZWZmZWN0LiBUaGF0IGlzLCBhbnkgbWV0YWRhdGEKKyAgICAgKiBzaG91bGQgYmUgdW5hZmZlY3RlZC4gSW4gYWRkaXRpb24sIHN1YmNsYXNzZXMgYXJlIGVuY291cmFnZWQgdG8KKyAgICAgKiBjaGVjayBmb3IgaW5pdGlhbCBhbmQgdHJhaWxpbmcgaWRlbnRpY2FsIGNoYXJhY3RlcnMsIGFuZCBtYWtlIGEKKyAgICAgKiBzbWFsbGVyIHJlcGxhY2VtZW50IGlmIHBvc3NpYmxlLiBUaGlzIHdpbGwgcHJlc2VydmUgYXMgbXVjaAorICAgICAqIG1ldGFkYXRhIGFzIHBvc3NpYmxlLgorICAgICAqIEBwYXJhbSBzdGFydCB0aGUgYmVnaW5uaW5nIGluZGV4LCBpbmNsdXNpdmU7IDxjb2RlPjAgPD0gc3RhcnQKKyAgICAgKiA8PSBsaW1pdDwvY29kZT4uCisgICAgICogQHBhcmFtIGxpbWl0IHRoZSBlbmRpbmcgaW5kZXgsIGV4Y2x1c2l2ZTsgPGNvZGU+c3RhcnQgPD0gbGltaXQKKyAgICAgKiA8PSBsZW5ndGgoKTwvY29kZT4uCisgICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gcmVwbGFjZSBjaGFyYWN0ZXJzIDxjb2RlPnN0YXJ0PC9jb2RlPgorICAgICAqIHRvIDxjb2RlPmxpbWl0IC0gMTwvY29kZT4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2b2lkIHJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIFN0cmluZyB0ZXh0KTsKKworICAgIC8qKgorICAgICAqIFJlcGxhY2VzIGEgc3Vic3RyaW5nIG9mIHRoaXMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHRleHQuCisgICAgICoKKyAgICAgKiA8cD5TdWJjbGFzc2VzIG11c3QgZW5zdXJlIHRoYXQgaWYgdGhlIHRleHQgYmV0d2VlbiBzdGFydCBhbmQKKyAgICAgKiBsaW1pdCBpcyBlcXVhbCB0byB0aGUgcmVwbGFjZW1lbnQgdGV4dCwgdGhhdCByZXBsYWNlIGhhcyBubworICAgICAqIGVmZmVjdC4gVGhhdCBpcywgYW55IG1ldGFkYXRhCisgICAgICogc2hvdWxkIGJlIHVuYWZmZWN0ZWQuIEluIGFkZGl0aW9uLCBzdWJjbGFzc2VzIGFyZSBlbmNvdXJhZ2VkIHRvCisgICAgICogY2hlY2sgZm9yIGluaXRpYWwgYW5kIHRyYWlsaW5nIGlkZW50aWNhbCBjaGFyYWN0ZXJzLCBhbmQgbWFrZSBhCisgICAgICogc21hbGxlciByZXBsYWNlbWVudCBpZiBwb3NzaWJsZS4gVGhpcyB3aWxsIHByZXNlcnZlIGFzIG11Y2gKKyAgICAgKiBtZXRhZGF0YSBhcyBwb3NzaWJsZS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGJlZ2lubmluZyBpbmRleCwgaW5jbHVzaXZlOyA8Y29kZT4wIDw9IHN0YXJ0CisgICAgICogPD0gbGltaXQ8L2NvZGU+LgorICAgICAqIEBwYXJhbSBsaW1pdCB0aGUgZW5kaW5nIGluZGV4LCBleGNsdXNpdmU7IDxjb2RlPnN0YXJ0IDw9IGxpbWl0CisgICAgICogPD0gbGVuZ3RoKCk8L2NvZGU+LgorICAgICAqIEBwYXJhbSBjaGFycyB0aGUgdGV4dCB0byByZXBsYWNlIGNoYXJhY3RlcnMgPGNvZGU+c3RhcnQ8L2NvZGU+CisgICAgICogdG8gPGNvZGU+bGltaXQgLSAxPC9jb2RlPgorICAgICAqIEBwYXJhbSBjaGFyc1N0YXJ0IHRoZSBiZWdpbm5pbmcgaW5kZXggaW50byA8Y29kZT5jaGFyczwvY29kZT4sCisgICAgICogaW5jbHVzaXZlOyA8Y29kZT4wIDw9IHN0YXJ0IDw9IGxpbWl0PC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gY2hhcnNMZW4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIG9mIDxjb2RlPmNoYXJzPC9jb2RlPi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2b2lkIHJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGNoYXJbXSBjaGFycywKKyAgICAgICAgICAgICAgICAgaW50IGNoYXJzU3RhcnQsIGludCBjaGFyc0xlbik7CisgICAgLy8gTm90ZTogV2UgdXNlIGxlbmd0aCByYXRoZXIgdGhhbiBsaW1pdCB0byBjb25mb3JtIHRvIFN0cmluZ0J1ZmZlcgorICAgIC8vIGFuZCBTeXN0ZW0uYXJyYXljb3B5LgorCisgICAgLyoqCisgICAgICogQ29waWVzIGEgc3Vic3RyaW5nIG9mIHRoaXMgb2JqZWN0LCByZXRhaW5pbmcgbWV0YWRhdGEuCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkdXBsaWNhdGUgb3IgcmVvcmRlciBzdWJzdHJpbmdzLgorICAgICAqIFRoZSBkZXN0aW5hdGlvbiBpbmRleCBtdXN0IG5vdCBvdmVybGFwIHRoZSBzb3VyY2UgcmFuZ2UuCisgICAgICogSWYgPGNvZGU+aGFzTWV0YURhdGEoKTwvY29kZT4gcmV0dXJucyBmYWxzZSwgc3ViY2xhc3NlcworICAgICAqIG1heSB1c2UgdGhlIG5haXZlIGltcGxlbWVudGF0aW9uOgorICAgICAqCisgICAgICogPHByZT4gY2hhcltdIHRleHQgPSBuZXcgY2hhcltsaW1pdCAtIHN0YXJ0XTsKKyAgICAgKiBnZXRDaGFycyhzdGFydCwgbGltaXQsIHRleHQsIDApOworICAgICAqIHJlcGxhY2UoZGVzdCwgZGVzdCwgdGV4dCwgMCwgbGltaXQgLSBzdGFydCk7PC9wcmU+CisgICAgICogCisgICAgICogQHBhcmFtIHN0YXJ0IHRoZSBiZWdpbm5pbmcgaW5kZXgsIGluY2x1c2l2ZTsgPGNvZGU+MCA8PSBzdGFydCA8PQorICAgICAqIGxpbWl0PC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gbGltaXQgdGhlIGVuZGluZyBpbmRleCwgZXhjbHVzaXZlOyA8Y29kZT5zdGFydCA8PSBsaW1pdCA8PQorICAgICAqIGxlbmd0aCgpPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gZGVzdCB0aGUgZGVzdGluYXRpb24gaW5kZXguICBUaGUgY2hhcmFjdGVycyBmcm9tCisgICAgICogPGNvZGU+c3RhcnQuLmxpbWl0LTE8L2NvZGU+IHdpbGwgYmUgY29waWVkIHRvIDxjb2RlPmRlc3Q8L2NvZGU+LgorICAgICAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBtYXkgYXNzdW1lIHRoYXQgPGNvZGU+ZGVzdCA8PSBzdGFydCB8fAorICAgICAqIGRlc3QgPj0gbGltaXQ8L2NvZGU+LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZvaWQgY29weShpbnQgc3RhcnQsIGludCBsaW1pdCwgaW50IGRlc3QpOworICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG9iamVjdCBjb250YWlucyBtZXRhZGF0YS4gIElmIGEKKyAgICAgKiBSZXBsYWNlYWJsZSBvYmplY3QgaGFzIG1ldGFkYXRhLCBjYWxscyB0byB0aGUgUmVwbGFjZWFibGUgQVBJCisgICAgICogbXVzdCBiZSBtYWRlIHNvIGFzIHRvIHByZXNlcnZlIG1ldGFkYXRhLiAgSWYgaXQgZG9lcyBub3QsIGNhbGxzCisgICAgICogdG8gdGhlIFJlcGxhY2VhYmxlIEFQSSBtYXkgYmUgb3B0aW1pemVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgb2JqZWN0IGNvbnRhaW5zIG1ldGFkYXRhCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBib29sZWFuIGhhc01ldGFEYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9SZXBsYWNlYWJsZVN0cmluZy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvUmVwbGFjZWFibGVTdHJpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40Y2ZiMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvUmVwbGFjZWFibGVTdHJpbmcuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvUmVwbGFjZWFibGVTdHJpbmcuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNSAwMToyMjowNCAkIAorICogJFJldmlzaW9uOiAxLjEzICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIDxjb2RlPlJlcGxhY2VhYmxlU3RyaW5nPC9jb2RlPiBpcyBhbiBhZGFwdGVyIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUKKyAqIDxjb2RlPlJlcGxhY2VhYmxlPC9jb2RlPiBBUEkgYXJvdW5kIGFuIG9yZGluYXJ5IDxjb2RlPlN0cmluZ0J1ZmZlcjwvY29kZT4uCisgKgorICogPHA+PGVtPk5vdGU6PC9lbT4gVGhpcyBjbGFzcyBkb2VzIG5vdCBzdXBwb3J0IGF0dHJpYnV0ZXMgYW5kIGlzIG5vdAorICogaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNlLiAgTW9zdCBjbGllbnRzIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQKKyAqIHtAbGluayBSZXBsYWNlYWJsZX0gaW4gdGhlaXIgdGV4dCByZXByZXNlbnRhdGlvbiBjbGFzcy4KKyAqCisgKiA8cD5Db3B5cmlnaHQgJmNvcHk7IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBAc2VlIFJlcGxhY2VhYmxlCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGNsYXNzIFJlcGxhY2VhYmxlU3RyaW5nIGltcGxlbWVudHMgUmVwbGFjZWFibGUgeworICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGJ1ZjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAiXHUwMEE5IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGluaXRpYWwgY29udGVudHMuCisgICAgICogQHBhcmFtIHN0ciBpbml0aWFsIGNvbnRlbnRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFJlcGxhY2VhYmxlU3RyaW5nKFN0cmluZyBzdHIpIHsKKyAgICAgICAgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihzdHIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIG5ldyBvYmplY3QgdXNpbmcgPGNvZGU+YnVmPC9jb2RlPiBmb3IgaW50ZXJuYWwKKyAgICAgKiBzdG9yYWdlLiAgVGhlIGNvbnRlbnRzIG9mIDxjb2RlPmJ1ZjwvY29kZT4gYXQgdGhlIHRpbWUgb2YKKyAgICAgKiBjb25zdHJ1Y3Rpb24gYXJlIHVzZWQgYXMgdGhlIGluaXRpYWwgY29udGVudHMuICA8ZW0+Tm90ZSEKKyAgICAgKiBNb2RpZmljYXRpb25zIHRvIDxjb2RlPmJ1ZjwvY29kZT4gd2lsbCBtb2RpZnkgdGhpcyBvYmplY3QsIGFuZAorICAgICAqIHZpY2UgdmVyc2EuPC9lbT4KKyAgICAgKiBAcGFyYW0gYnVmIG9iamVjdCB0byBiZSB1c2VkIGFzIGludGVybmFsIHN0b3JhZ2UKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgUmVwbGFjZWFibGVTdHJpbmcoU3RyaW5nQnVmZmVyIGJ1ZikgeworICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgZW1wdHkgb2JqZWN0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBSZXBsYWNlYWJsZVN0cmluZygpIHsKKyAgICAgICAgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY29udGVudHMgb2YgdGhpcyBvYmplY3QgYXMgYSA8Y29kZT5TdHJpbmc8L2NvZGU+LgorICAgICAqIEByZXR1cm4gc3RyaW5nIGNvbnRlbnRzIG9mIHRoaXMgb2JqZWN0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHN1YnN0cmluZyBvZiB0aGUgZ2l2ZW4gc3RyaW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgc3Vic3RyaW5nKGludCBzdGFydCwgaW50IGxpbWl0KSB7CisgICAgICAgIHJldHVybiBidWYuc3Vic3RyaW5nKHN0YXJ0LCBsaW1pdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb250YWluZWQgaW4gdGhpcyBvYmplY3QuCisgICAgICogPGNvZGU+UmVwbGFjZWFibGU8L2NvZGU+IEFQSS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8gCisgICAgcHVibGljIGludCBsZW5ndGgoKSB7CisgICAgICAgIHJldHVybiBidWYubGVuZ3RoKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGluIHRoaXMgb2JqZWN0LgorICAgICAqIDxjb2RlPlJlcGxhY2VhYmxlPC9jb2RlPiBBUEkuCisgICAgICogQHBhcmFtIG9mZnNldCBvZmZzZXQgaW50byB0aGUgY29udGVudHMsIGZyb20gMCB0bworICAgICAqIDxjb2RlPmxlbmd0aCgpPC9jb2RlPiAtIDEKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBjaGFyQXQoaW50IG9mZnNldCkgeworICAgICAgICByZXR1cm4gYnVmLmNoYXJBdChvZmZzZXQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgMzItYml0IGNvZGUgcG9pbnQgYXQgdGhlIGdpdmVuIDE2LWJpdCBvZmZzZXQgaW50bworICAgICAqIHRoZSB0ZXh0LiAgVGhpcyBhc3N1bWVzIHRoZSB0ZXh0IGlzIHN0b3JlZCBhcyAxNi1iaXQgY29kZSB1bml0cworICAgICAqIHdpdGggc3Vycm9nYXRlIHBhaXJzIGludGVybWl4ZWQuICBJZiB0aGUgb2Zmc2V0IG9mIGEgbGVhZGluZyBvcgorICAgICAqIHRyYWlsaW5nIGNvZGUgdW5pdCBvZiBhIHN1cnJvZ2F0ZSBwYWlyIGlzIGdpdmVuLCByZXR1cm4gdGhlCisgICAgICogY29kZSBwb2ludCBvZiB0aGUgc3Vycm9nYXRlIHBhaXIuCisgICAgICogQHBhcmFtIG9mZnNldCBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgPGNvZGU+bGVuZ3RoKCk8L2NvZGU+LTEKKyAgICAgKiBpbmNsdXNpdmUKKyAgICAgKiBAcmV0dXJuIDMyLWJpdCBjb2RlIHBvaW50IG9mIHRleHQgYXQgZ2l2ZW4gb2Zmc2V0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBjaGFyMzJBdChpbnQgb2Zmc2V0KSB7CisgICAgICAgIHJldHVybiBVVEYxNi5jaGFyQXQoYnVmLCBvZmZzZXQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcGllcyBjaGFyYWN0ZXJzIGZyb20gdGhpcyBvYmplY3QgaW50byB0aGUgZGVzdGluYXRpb24KKyAgICAgKiBjaGFyYWN0ZXIgYXJyYXkuICBUaGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZCBpcyBhdCBpbmRleAorICAgICAqIDxjb2RlPnNyY1N0YXJ0PC9jb2RlPjsgdGhlIGxhc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZCBpcyBhdAorICAgICAqIGluZGV4IDxjb2RlPnNyY0xpbWl0LTE8L2NvZGU+ICh0aHVzIHRoZSB0b3RhbCBudW1iZXIgb2YKKyAgICAgKiBjaGFyYWN0ZXJzIHRvIGJlIGNvcGllZCBpcyA8Y29kZT5zcmNMaW1pdC1zcmNTdGFydDwvY29kZT4pLiBUaGUKKyAgICAgKiBjaGFyYWN0ZXJzIGFyZSBjb3BpZWQgaW50byB0aGUgc3ViYXJyYXkgb2YgPGNvZGU+ZHN0PC9jb2RlPgorICAgICAqIHN0YXJ0aW5nIGF0IGluZGV4IDxjb2RlPmRzdFN0YXJ0PC9jb2RlPiBhbmQgZW5kaW5nIGF0IGluZGV4CisgICAgICogPGNvZGU+ZHN0U3RhcnQgKyAoc3JjTGltaXQtc3JjU3RhcnQpIC0gMTwvY29kZT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhlIGJlZ2lubmluZyBpbmRleCB0byBjb3B5LCBpbmNsdXNpdmU7IDxjb2RlPjAKKyAgICAgKiA8PSBzdGFydCA8PSBsaW1pdDwvY29kZT4uCisgICAgICogQHBhcmFtIHNyY0xpbWl0IHRoZSBlbmRpbmcgaW5kZXggdG8gY29weSwgZXhjbHVzaXZlOworICAgICAqIDxjb2RlPnN0YXJ0IDw9IGxpbWl0IDw9IGxlbmd0aCgpPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gZHN0IHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgKiBAcGFyYW0gZHN0U3RhcnQgdGhlIHN0YXJ0IG9mZnNldCBpbiB0aGUgZGVzdGluYXRpb24gYXJyYXkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgZ2V0Q2hhcnMoaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQsIGNoYXIgZHN0W10sIGludCBkc3RTdGFydCkgeworICAgICAgICBVdGlsaXR5LmdldENoYXJzKGJ1Ziwgc3JjU3RhcnQsIHNyY0xpbWl0LCBkc3QsIGRzdFN0YXJ0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBsYWNlIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzIHdpdGggbmV3IGNoYXJhY3RlcnMuCisgICAgICogPGNvZGU+UmVwbGFjZWFibGU8L2NvZGU+IEFQSS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGJlZ2lubmluZyBpbmRleCwgaW5jbHVzaXZlOyA8Y29kZT4wIDw9IHN0YXJ0CisgICAgICogPD0gbGltaXQ8L2NvZGU+LgorICAgICAqIEBwYXJhbSBsaW1pdCB0aGUgZW5kaW5nIGluZGV4LCBleGNsdXNpdmU7IDxjb2RlPnN0YXJ0IDw9IGxpbWl0CisgICAgICogPD0gbGVuZ3RoKCk8L2NvZGU+LgorICAgICAqIEBwYXJhbSB0ZXh0IG5ldyB0ZXh0IHRvIHJlcGxhY2UgY2hhcmFjdGVycyA8Y29kZT5zdGFydDwvY29kZT4gdG8KKyAgICAgKiA8Y29kZT5saW1pdCAtIDE8L2NvZGU+CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgU3RyaW5nIHRleHQpIHsKKyAgICAgICAgYnVmLnJlcGxhY2Uoc3RhcnQsIGxpbWl0LCB0ZXh0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBsYWNlIGEgc3Vic3RyaW5nIG9mIHRoaXMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHRleHQuCisgICAgICogQHBhcmFtIHN0YXJ0IHRoZSBiZWdpbm5pbmcgaW5kZXgsIGluY2x1c2l2ZTsgPGNvZGU+MCA8PSBzdGFydAorICAgICAqIDw9IGxpbWl0PC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gbGltaXQgdGhlIGVuZGluZyBpbmRleCwgZXhjbHVzaXZlOyA8Y29kZT5zdGFydCA8PSBsaW1pdAorICAgICAqIDw9IGxlbmd0aCgpPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gY2hhcnMgdGhlIHRleHQgdG8gcmVwbGFjZSBjaGFyYWN0ZXJzIDxjb2RlPnN0YXJ0PC9jb2RlPgorICAgICAqIHRvIDxjb2RlPmxpbWl0IC0gMTwvY29kZT4KKyAgICAgKiBAcGFyYW0gY2hhcnNTdGFydCB0aGUgYmVnaW5uaW5nIGluZGV4IGludG8gPGNvZGU+Y2hhcnM8L2NvZGU+LAorICAgICAqIGluY2x1c2l2ZTsgPGNvZGU+MCA8PSBzdGFydCA8PSBsaW1pdDwvY29kZT4uCisgICAgICogQHBhcmFtIGNoYXJzTGVuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBvZiA8Y29kZT5jaGFyczwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgY2hhcltdIGNoYXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJzU3RhcnQsIGludCBjaGFyc0xlbikgeworICAgICAgICBidWYuZGVsZXRlKHN0YXJ0LCBsaW1pdCk7CisgICAgICAgIGJ1Zi5pbnNlcnQoc3RhcnQsIGNoYXJzLCBjaGFyc1N0YXJ0LCBjaGFyc0xlbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBhIHN1YnN0cmluZyBvZiB0aGlzIG9iamVjdCwgcmV0YWluaW5nIGF0dHJpYnV0ZSAob3V0LW9mLWJhbmQpCisgICAgICogaW5mb3JtYXRpb24uICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGR1cGxpY2F0ZSBvciByZW9yZGVyIHN1YnN0cmluZ3MuCisgICAgICogVGhlIGRlc3RpbmF0aW9uIGluZGV4IG11c3Qgbm90IG92ZXJsYXAgdGhlIHNvdXJjZSByYW5nZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGJlZ2lubmluZyBpbmRleCwgaW5jbHVzaXZlOyA8Y29kZT4wIDw9IHN0YXJ0IDw9CisgICAgICogbGltaXQ8L2NvZGU+LgorICAgICAqIEBwYXJhbSBsaW1pdCB0aGUgZW5kaW5nIGluZGV4LCBleGNsdXNpdmU7IDxjb2RlPnN0YXJ0IDw9IGxpbWl0IDw9CisgICAgICogbGVuZ3RoKCk8L2NvZGU+LgorICAgICAqIEBwYXJhbSBkZXN0IHRoZSBkZXN0aW5hdGlvbiBpbmRleC4gIFRoZSBjaGFyYWN0ZXJzIGZyb20KKyAgICAgKiA8Y29kZT5zdGFydC4ubGltaXQtMTwvY29kZT4gd2lsbCBiZSBjb3BpZWQgdG8gPGNvZGU+ZGVzdDwvY29kZT4uCisgICAgICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIG1heSBhc3N1bWUgdGhhdCA8Y29kZT5kZXN0IDw9IHN0YXJ0IHx8CisgICAgICogZGVzdCA+PSBsaW1pdDwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weShpbnQgc3RhcnQsIGludCBsaW1pdCwgaW50IGRlc3QpIHsKKyAgICAgICAgaWYgKHN0YXJ0ID09IGxpbWl0ICYmIHN0YXJ0ID49IDAgJiYgc3RhcnQgPD0gYnVmLmxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2hhcltdIHRleHQgPSBuZXcgY2hhcltsaW1pdCAtIHN0YXJ0XTsKKyAgICAgICAgZ2V0Q2hhcnMoc3RhcnQsIGxpbWl0LCB0ZXh0LCAwKTsKKyAgICAgICAgcmVwbGFjZShkZXN0LCBkZXN0LCB0ZXh0LCAwLCBsaW1pdCAtIHN0YXJ0KTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyBSZXBsYWNlYWJsZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGhhc01ldGFEYXRhKCkgeworICAgIAlyZXR1cm4gZmFsc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjNWIzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9SdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwzMTkyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9SdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMi8wNSAwMToyMjoxMSAkCisgKiAkUmV2aXNpb246IDEuMjMgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKworLyoKKyAqIEAoIylSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmphdmEJMS4zIDk5LzA0LzA3CisgKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ29tcGFjdEJ5dGVBcnJheTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RhY2s7CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcjsKKworaW1wb3J0IGphdmEuaW8uKjsKKworLyoqCisgKiA8cD5BIHN1YmNsYXNzIG9mIEJyZWFrSXRlcmF0b3Igd2hvc2UgYmVoYXZpb3IgaXMgc3BlY2lmaWVkIHVzaW5nIGEgbGlzdCBvZiBydWxlcy48L3A+CisgKgorICogPHA+VGhlcmUgYXJlIHR3byBraW5kcyBvZiBydWxlcywgd2hpY2ggYXJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOiA8aT5zdWJzdGl0dXRpb25zPC9pPgorICogYW5kIDxpPnJlZ3VsYXIgZXhwcmVzc2lvbnMuPC9pPjwvcD4KKyAqCisgKiA8cD5BIHN1YnN0aXR1dGlvbiBydWxlIGRlZmluZXMgYSBuYW1lIHRoYXQgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgYW4gZXhwcmVzc2lvbi4gSXQKKyAqIGNvbnNpc3RzIG9mIGEgbmFtZSwgYW4gZXF1YWxzIHNpZ24sIGFuZCBhbiBleHByZXNzaW9uLiAoVGhlcmUgY2FuIGJlIG5vIHdoaXRlc3BhY2Ugb24KKyAqIGVpdGhlciBzaWRlIG9mIHRoZSBlcXVhbHMgc2lnbi4pICBUbyBrZWVwIGl0cyBzeW50YWN0aWMgbWVhbmluZyBpbnRhY3QsIHRoZSBleHByZXNzaW9uCisgKiBtdXN0IGJlIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIG9yIHNxdWFyZSBicmFja2V0cy4gQSBzdWJzdGl0dXRpb24gaXMgdmlzaWJsZSBhZnRlciBpdHMKKyAqIGRlZmluaXRpb24sIGFuZCBpcyBmaWxsZWQgaW4gdXNpbmcgc2ltcGxlIHRleHR1YWwgc3Vic3RpdHV0aW9uICh3aGVuIGEgc3Vic3RpdHV0aW9uIGlzCisgKiB1c2VkLCBpdHMgbmFtZSBpcyBlbmNsb3NlZCBpbiBjdXJseSBicmFjZXMuICBUaGUgY3VybHkgYnJhY2VzIGFyZSBvcHRpb25hbCBpbiB0aGUKKyAqIHN1YnN0aXRpb24ncyBkZWZpbml0aW9uKS4gU3Vic3RpdHV0aW9uIGRlZmluaXRpb25zIGNhbiBjb250YWluIG90aGVyIHN1YnN0aXR1dGlvbnMsIGFzCisgKiBsb25nIGFzIHRob3NlIHN1YnN0aXR1dGlvbnMgaGF2ZSBiZWVuIGRlZmluZWQgZmlyc3QuIFN1YnN0aXR1dGlvbnMgYXJlIGdlbmVyYWxseSB1c2VkIHRvCisgKiBtYWtlIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zICh3aGljaCBjYW4gZ2V0IHF1aXRlIGNvbXBsZXgpIHNob3J0ZXIgYW5kIGVhc2llciB0byByZWFkLgorICogVGhleSB0eXBpY2FsbHkgZGVmaW5lIGVpdGhlciBjaGFyYWN0ZXIgY2F0ZWdvcmllcyBvciBjb21tb25seS11c2VkIHN1YmV4cHJlc3Npb25zLjwvcD4KKyAqCisgKiA8cD5UaGVyZSBpcyBvbmUgc3BlY2lhbCBzdWJzdGl0dXRpb24uJm5ic3A7IElmIHRoZSBkZXNjcmlwdGlvbiBkZWZpbmVzIGEgc3Vic3RpdHV0aW9uCisgKiBjYWxsZWQgJnF1b3Q7X2lnbm9yZV8mcXVvdDssIHRoZSBleHByZXNzaW9uIG11c3QgYmUgYSBbXSBleHByZXNzaW9uLCBhbmQgdGhlCisgKiBleHByZXNzaW9uIGRlZmluZXMgYSBzZXQgb2YgY2hhcmFjdGVycyAodGhlICZxdW90OzxlbT5pZ25vcmUgY2hhcmFjdGVyczwvZW0+JnF1b3Q7KSB0aGF0CisgKiB3aWxsIGJlIHRyYW5zcGFyZW50IHRvIHRoZSBCcmVha0l0ZXJhdG9yLiZuYnNwOyBBIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgd2lsbCBicmVhayB0aGUKKyAqIHNhbWUgd2F5IGl0IHdvdWxkIGlmIGFueSBpZ25vcmUgY2hhcmFjdGVycyBpdCBjb250YWlucyBhcmUgdGFrZW4gb3V0LiZuYnNwOyBCcmVhaworICogcG9zaXRpb25zIG5ldmVyIG9jY3VyIGJlZm9yZSBpZ25vcmUgY2hhcmFjdGVycywgZXhjZXB0IHdoZW4gdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlCisgKiBpZ25vcmUgY2hhcmFjdGVycyBpcyBhIGxpbmUgb3IgcGFyYWdyYXBoIHRlcm1pbmF0b3IuPC9wPgorICoKKyAqIDxwPkEgcmVndWxhciBleHByZXNzaW9uIHVzZXMgYSBzeW50YXggc2ltaWxhciB0byB0aGUgbm9ybWFsIFVuaXggcmVndWxhci1leHByZXNzaW9uCisgKiBzeW50YXgsIGFuZCBkZWZpbmVzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0byBiZSBrZXB0IHRvZ2V0aGVyLiBXaXRoIG9uZSBzaWduaWZpY2FudAorICogZXhjZXB0aW9uLCB0aGUgaXRlcmF0b3IgdXNlcyBhIGxvbmdlc3QtcG9zc2libGUtbWF0Y2ggYWxnb3JpdGhtIHdoZW4gbWF0Y2hpbmcgdGV4dCB0byByZWd1bGFyCisgKiBleHByZXNzaW9ucy4gVGhlIGl0ZXJhdG9yIGFsc28gdHJlYXRzIGRlc2NyaXB0aW9ucyBjb250YWluaW5nIG11bHRpcGxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAqIGFzIGlmIHRoZXkgd2VyZSBPUmVkIHRvZ2V0aGVyIChpLmUuLCBhcyBpZiB0aGV5IHdlcmUgc2VwYXJhdGVkIGJ5IHwpLjwvcD4KKyAqCisgKiA8cD5UaGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHJlY29nbml6ZWQgYnkgdGhlIHJlZ3VsYXItZXhwcmVzc2lvbiBwYXJzZXIgYXJlIGFzIGZvbGxvd3M6PC9wPgorICoKKyAqIDxibG9ja3F1b3RlPgorICogICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+KjwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+U3BlY2lmaWVzIHRoYXQgdGhlIGV4cHJlc3Npb24gcHJlY2VkaW5nIHRoZSBhc3RlcmlzayBtYXkgb2NjdXIgYW55IG51bWJlcgorICogICAgICAgb2YgdGltZXMgKGluY2x1ZGluZyBub3QgYXQgYWxsKS48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+KzwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+U3BlY2lmaWVzIHRoYXQgdGhlIGV4cHJlc3Npb24gcHJlY2VkaW5nIHRoZSBhc3RlcmlzayBtYXkgb2NjdXIgb25lIG9yCisgKiAgICAgICBtb3JlIHRpbWVzLCBidXQgbXVzdCBvY2N1ciBhdCBsZWFzdCBvbmNlLjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICA8dGQgd2lkdGg9IjYlIj4/PC90ZD4KKyAqICAgICAgIDx0ZCB3aWR0aD0iOTQlIj5TcGVjaWZpZXMgdGhhdCB0aGUgZXhwcmVzc2lvbiBwcmVjZWRpbmcgdGhlIGFzdGVyaXNrIG1heSBvY2N1ciBvbmNlCisgKiAgICAgICBvciBub3QgYXQgYWxsIChpLmUuLCBpdCBtYWtlcyB0aGUgcHJlY2VkaW5nIGV4cHJlc3Npb24gb3B0aW9uYWwpLjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICA8dGQgd2lkdGg9IjYlIj4oKTwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+RW5jbG9zZXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLiAgSWYgZm9sbG93ZWQgYnkgKiBvciArLCB0aGUKKyAqICAgICAgIHNlcXVlbmNlIHJlcGVhdHMuICBJZiBmb2xsb3dlZCBieSA/LCB0aGUgc2VxdWVuY2UgaXMgb3B0aW9uYWwuICBPdGhlcndpc2UsIHRoZQorICogICAgICAgcGFyZW50aGVzZXMgYXJlIGp1c3QgYSBncm91cGluZyBkZXZpY2UgYW5kIGEgd2F5IHRvIGRlbGltaXQgdGhlIGVuZHMgb2YgZXhwcmVzc2lvbnMKKyAqICAgICAgIGNvbnRhaW5pbmcgfC48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+fDwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+U2VwYXJhdGVzIHR3byBhbHRlcm5hdGl2ZSBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycy4mbmJzcDsgRWl0aGVyIG9uZQorICogICAgICAgc2VxdWVuY2Ugb3IgdGhlIG90aGVyLCBidXQgbm90IGJvdGgsIG1hdGNoZXMgdGhpcyBleHByZXNzaW9uLiZuYnNwOyBUaGUgfCBjaGFyYWN0ZXIgY2FuCisgKiAgICAgICBvbmx5IG9jY3VyIGluc2lkZSAoKS48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+LjwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+TWF0Y2hlcyBhbnkgY2hhcmFjdGVyLjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICA8dGQgd2lkdGg9IjYlIj4qPzwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+U3BlY2lmaWVzIGEgbm9uLWdyZWVkeSBhc3Rlcmlzay4mbmJzcDsgKj8gd29ya3MgdGhlIHNhbWUgd2F5IGFzICosIGV4Y2VwdAorICogICAgICAgd2hlbiB0aGVyZSBpcyBvdmVybGFwIGJldHdlZW4gdGhlIGxhc3QgZ3JvdXAgb2YgY2hhcmFjdGVycyBpbiB0aGUgZXhwcmVzc2lvbiBwcmVjZWRpbmcgdGhlCisgKiAgICAgICAqIGFuZCB0aGUgZmlyc3QgZ3JvdXAgb2YgY2hhcmFjdGVycyBmb2xsb3dpbmcgdGhlICouJm5ic3A7IFdoZW4gdGhlcmUgaXMgdGhpcyBraW5kIG9mCisgKiAgICAgICBvdmVybGFwLCAqIHdpbGwgbWF0Y2ggdGhlIGxvbmdlc3Qgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IG1hdGNoIHRoZSBleHByZXNzaW9uIGJlZm9yZQorICogICAgICAgdGhlICosIGFuZCAqPyB3aWxsIG1hdGNoIHRoZSBzaG9ydGVzdCBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uCisgKiAgICAgICBiZWZvcmUgdGhlICo/LiZuYnNwOyBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgJnF1b3Q7eHh5eHl5eXh5eHl4eHl4eXh5eSZxdW90OyBpbiB0aGUgdGV4dCwKKyAqICAgICAgICZxdW90O3hbeHldKngmcXVvdDsgd2lsbCBtYXRjaCB0aHJvdWdoIHRvIHRoZSBsYXN0IHggKGkuZS4sICZxdW90OzxzdHJvbmc+eHh5eHl5eXh5eHl4eHl4eXg8L3N0cm9uZz55eSZxdW90OywKKyAqICAgICAgIGJ1dCAmcXVvdDt4W3h5XSo/eCZxdW90OyB3aWxsIG9ubHkgbWF0Y2ggdGhlIGZpcnN0IHR3byB4ZXMgKCZxdW90OzxzdHJvbmc+eHg8L3N0cm9uZz55eHl5eXh5eHl4eHl4eXh5eSZxdW90OykuPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZCB3aWR0aD0iNiUiPltdPC90ZD4KKyAqICAgICAgIDx0ZCB3aWR0aD0iOTQlIj5TcGVjaWZpZXMgYSBncm91cCBvZiBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzLiZuYnNwOyBBIFtdIGV4cHJlc3Npb24gd2lsbAorICogICAgICAgbWF0Y2ggYW55IHNpbmdsZSBjaGFyYWN0ZXIgdGhhdCBpcyBzcGVjaWZpZWQgaW4gdGhlIFtdIGV4cHJlc3Npb24uJm5ic3A7IEZvciBtb3JlIG9uIHRoZQorICogICAgICAgc3ludGF4IG9mIFtdIGV4cHJlc3Npb25zLCBzZWUgYmVsb3cuPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZCB3aWR0aD0iNiUiPi88L3RkPgorICogICAgICAgPHRkIHdpZHRoPSI5NCUiPlNwZWNpZmllcyB3aGVyZSB0aGUgYnJlYWsgcG9zaXRpb24gc2hvdWxkIGdvIGlmIHRleHQgbWF0Y2hlcyB0aGlzCisgKiAgICAgICBleHByZXNzaW9uLiZuYnNwOyAoZS5nLiwgJnF1b3Q7W2Etel0mIzQyOy9bOlpzOl0qWzEtMF0mcXVvdDsgd2lsbCBtYXRjaCBpZiB0aGUgaXRlcmF0b3Igc2VlcyBhIHJ1bgorICogICAgICAgb2YgbGV0dGVycywgZm9sbG93ZWQgYnkgYSBydW4gb2Ygd2hpdGVzcGFjZSwgZm9sbG93ZWQgYnkgYSBkaWdpdCwgYnV0IHRoZSBicmVhayBwb3NpdGlvbgorICogICAgICAgd2lsbCBhY3R1YWxseSBnbyBiZWZvcmUgdGhlIHdoaXRlc3BhY2UpLiZuYnNwOyBFeHByZXNzaW9ucyB0aGF0IGRvbid0IGNvbnRhaW4gLyBwdXQgdGhlCisgKiAgICAgICBicmVhayBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBtYXRjaGluZyB0ZXh0LjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICA8dGQgd2lkdGg9IjYlIj5cPC90ZD4KKyAqICAgICAgIDx0ZCB3aWR0aD0iOTQlIj5Fc2NhcGUgY2hhcmFjdGVyLiZuYnNwOyBUaGUgXCBpdHNlbGYgaXMgaWdub3JlZCwgYnV0IGNhdXNlcyB0aGUgbmV4dAorICogICAgICAgY2hhcmFjdGVyIHRvIGJlIHRyZWF0ZWQgYXMgbGl0ZXJhbCBjaGFyYWN0ZXIuJm5ic3A7IFRoaXMgaGFzIG5vIGVmZmVjdCBmb3IgbWFueQorICogICAgICAgY2hhcmFjdGVycywgYnV0IGZvciB0aGUgY2hhcmFjdGVycyBsaXN0ZWQgYWJvdmUsIHRoaXMgZGVwcml2ZXMgdGhlbSBvZiB0aGVpciBzcGVjaWFsCisgKiAgICAgICBtZWFuaW5nLiZuYnNwOyAoVGhlcmUgYXJlIG5vIHNwZWNpYWwgZXNjYXBlIHNlcXVlbmNlcyBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzLCBvciB0YWJzIGFuZAorICogICAgICAgbmV3bGluZXM7IHRoZXNlIGFyZSBhbGwgaGFuZGxlZCBieSBhIGhpZ2hlci1sZXZlbCBwcm90b2NvbC4mbmJzcDsgSW4gYSBKYXZhIHN0cmluZywKKyAqICAgICAgICZxdW90O1xuJnF1b3Q7IHdpbGwgYmUgY29udmVydGVkIHRvIGEgbGl0ZXJhbCBuZXdsaW5lIGNoYXJhY3RlciBieSB0aGUgdGltZSB0aGUKKyAqICAgICAgIHJlZ3VsYXItZXhwcmVzc2lvbiBwYXJzZXIgc2VlcyBpdC4mbmJzcDsgT2YgY291cnNlLCB0aGlzIG1lYW5zIHRoYXQgXCBzZXF1ZW5jZXMgdGhhdCBhcmUKKyAqICAgICAgIHZpc2libGUgdG8gdGhlIHJlZ2V4cCBwYXJzZXIgbXVzdCBiZSB3cml0dGVuIGFzIFxcIHdoZW4gaW5zaWRlIGEgSmF2YSBzdHJpbmcuKSZuYnNwOyBBbGwKKyAqICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIEFTQ0lJIHJhbmdlIGV4Y2VwdCBmb3IgbGV0dGVycywgZGlnaXRzLCBhbmQgY29udHJvbCBjaGFyYWN0ZXJzIGFyZQorICogICAgICAgcmVzZXJ2ZWQgY2hhcmFjdGVycyB0byB0aGUgcGFyc2VyIGFuZCBtdXN0IGJlIHByZWNlZGVkIGJ5IFwgZXZlbiBpZiB0aGV5IGN1cnJlbnRseSBkb24ndAorICogICAgICAgbWVhbiBhbnl0aGluZy48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+ITwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+SWYgISBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24sIGl0IHRlbGxzIHRoZSByZWdleHAKKyAqICAgICAgIHBhcnNlciB0aGF0IHRoaXMgZXhwcmVzc2lvbiBzcGVjaWZpZXMgdGhlIGJhY2t3YXJkcy1pdGVyYXRpb24gYmVoYXZpb3Igb2YgdGhlIGl0ZXJhdG9yLAorICogICAgICAgYW5kIG5vdCBpdHMgbm9ybWFsIGl0ZXJhdGlvbiBiZWhhdmlvci4mbmJzcDsgVGhpcyBpcyBnZW5lcmFsbHkgb25seSB1c2VkIGluIHNpdHVhdGlvbnMKKyAqICAgICAgIHdoZXJlIHRoZSBhdXRvbWF0aWNhbGx5LWdlbmVyYXRlZCBiYWNrd2FyZHMtaXRlcmF0aW9uIGJlaGF2aW9yIGRvZXNuJ3QgcHJvZHVjZQorICogICAgICAgc2F0aXNmYWN0b3J5IHJlc3VsdHMgYW5kIG11c3QgYmUgc3VwcGxlbWVudGVkIHdpdGggZXh0cmEgY2xpZW50LXNwZWNpZmllZCBydWxlcy48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+PGVtPihhbGwgb3RoZXJzKTwvZW0+PC90ZD4KKyAqICAgICAgIDx0ZCB3aWR0aD0iOTQlIj5BbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBsaXRlcmFsIGNoYXJhY3RlcnMsIHdoaWNoIG11c3QgbWF0Y2gKKyAqICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcihzKSBpbiB0aGUgdGV4dCBleGFjdGx5LjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgPC90YWJsZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiA8cD5XaXRoaW4gYSBbXSBleHByZXNzaW9uLCBhIG51bWJlciBvZiBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQorICogZ3JvdXBzIG9mIGNoYXJhY3RlcnM6PC9wPgorICoKKyAqIDxibG9ja3F1b3RlPgorICogICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+LTwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+U3BlY2lmaWVzIGEgcmFuZ2Ugb2YgbWF0Y2hpbmcgY2hhcmFjdGVycy4mbmJzcDsgRm9yIGV4YW1wbGUKKyAqICAgICAgICZxdW90O1thLXBdJnF1b3Q7IG1hdGNoZXMgYWxsIGxvd2VyY2FzZSBMYXRpbiBsZXR0ZXJzIGZyb20gYSB0byBwIChpbmNsdXNpdmUpLiZuYnNwOyBUaGUgLQorICogICAgICAgc2lnbiBzcGVjaWZpZXMgcmFuZ2VzIG9mIGNvbnRpbnVvdXMgVW5pY29kZSBudW1lcmljIHZhbHVlcywgbm90IHJhbmdlcyBvZiBjaGFyYWN0ZXJzIGluIGEKKyAqICAgICAgIGxhbmd1YWdlJ3MgYWxwaGFiZXRpY2FsIG9yZGVyOiAmcXVvdDtbYS16XSZxdW90OyBkb2Vzbid0IGluY2x1ZGUgY2FwaXRhbCBsZXR0ZXJzLCBub3IgZG9lcworICogICAgICAgaXQgaW5jbHVkZSBhY2NlbnRlZCBsZXR0ZXJzIHN1Y2ggYXMgYS11bWxhdXQuPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZCB3aWR0aD0iNiUiPl48L3RkPgorICogICAgICAgPHRkIHdpZHRoPSI5NCUiPkludmVydHMgdGhlIGV4cHJlc3Npb24uICBBbGwgY2hhcmFjdGVycyB0aGUgZXhwcmVzc2lvbiBpbmNsdWRlcyBhcmUKKyAqICAgICAgIGV4Y2x1ZGVkLCBhbmQgdmljZSB2ZXJzYS4gIChpLmUuLCBpdCBoYXMgdGhlIGVmZmVjdCBvZiBzYXlpbmcgImFsbCBVbmljb2RlIGNoYXJhY3RlcnMKKyAqICAgICAgIGV4Y2VwdC4uLiIpICBUaGlzIGNoYXJhY3RlciBvbmx5IGhhcyBpdHMgc3BlY2lhbCBtZWFuaW5nIHdoZW4gaXQncyB0aGUgZmlyc3QgY2hhcmFjdGVyCisgKiAgICAgICBpbiB0aGUgW10gZXhwcmVzc2lvbi4gIChHZW5lcmFsbHksIHlvdSBvbmx5IHNlZSB0aGUgXiBjaGFyYWN0ZXIgaW5zaWRlIGEgbmVzdGVkIFtdCisgKiAgICAgICBleHByZXNzaW9uIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgc3ludGF4IGJlbG93Lik8L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+PGVtPihhbGwgb3RoZXJzKTwvZW0+PC90ZD4KKyAqICAgICAgIDx0ZCB3aWR0aD0iOTQlIj5BbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBsaXRlcmFsIGNoYXJhY3RlcnMuJm5ic3A7IChGb3IKKyAqICAgICAgIGV4YW1wbGUsICZxdW90O1thZWlvdV0mcXVvdDsgc3BlY2lmaWVzIGp1c3QgdGhlIGxldHRlcnMgYSwgZSwgaSwgbywgYW5kIHUuKTwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgPC90YWJsZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiA8cD5bXSBleHByZXNzaW9ucyBjYW4gbmVzdC4gIFRoZXJlIGFyZSBzb21lIG90aGVyIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHNwZWNpYWwgbWVhbmluZyBvbmx5CisgKiB3aGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZXIgW10gZXhwcmVzc2lvbnM6PC9wPgorICoKKyAqIDxibG9ja3F1b3RlPgorICogICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+Ojo8L3RkPgorICogICAgICAgPHRkIHdpZHRoPSI5NCUiPldpdGhpbiBhIG5lc3RlZCBbXSBleHByZXNzaW9uLCBhIHBhaXIgb2YgY29sb25zIGNvbnRhaW5pbmcgYSBvbmUtIG9yCisgKiAgICAgICB0d28tbGV0dGVyIGNvZGUgbWF0Y2hlcyBhbGwgY2hhcmFjdGVycyBpbiB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNhdGVnb3J5LiZuYnNwOworICogICAgICAgVGhlIDo6IGV4cHJlc3Npb24gaGFzIHRvIGJlIHRoZSBvbmx5IHRoaW5nIGluc2lkZSB0aGUgW10gZXhwcmVzc2lvbi4gVGhlIHR3by1sZXR0ZXIgY29kZXMKKyAqICAgICAgIGFyZSB0aGUgc2FtZSBhcyB0aGUgdHdvLWxldHRlciBjb2RlcyBpbiB0aGUgVW5pY29kZSBkYXRhYmFzZSAoZm9yIGV4YW1wbGUsCisgKiAgICAgICAmcXVvdDtbWzpTYzpdWzpTbTpdXSZxdW90OyBtYXRjaGVzIGFsbCBjdXJyZW5jeSBzeW1ib2xzIGFuZCBhbGwgbWF0aCBzeW1ib2xzKS4mbmJzcDsKKyAqICAgICAgIFNwZWNpZnlpbmcgYSBvbmUtbGV0dGVyIGNvZGUgaXMgdGhlIHNhbWUgYXMgc3BlY2lmeWluZyBhbGwgdHdvLWxldHRlciBjb2RlcyB0aGF0IGJlZ2luCisgKiAgICAgICB3aXRoIHRoYXQgbGV0dGVyIChmb3IgZXhhbXBsZSwgJnF1b3Q7W1s6TDpdXSZxdW90OyBtYXRjaGVzIGFsbCBsZXR0ZXJzLCBhbmQgaXMgZXF1aXZhbGVudAorICogICAgICAgdG8gJnF1b3Q7W1s6THU6XVs6TGw6XVs6TG86XVs6TG06XVs6THQ6XV0mcXVvdDspLiZuYnNwOyBBbnl0aGluZyBvdGhlciB0aGFuIGEgdmFsaWQKKyAqICAgICAgIHR3by1sZXR0ZXIgVW5pY29kZSBjYXRlZ29yeSBjb2RlIG9yIGEgc2luZ2xlIGxldHRlciB0aGF0IGJlZ2lucyBhIHZhbGlkZSBVbmljb2RlIGNhdGVnb3J5CisgKiAgICAgICBjb2RlIGlzIGlsbGVnYWwgd2l0aGluIHRoZSBjb2xvbnMuPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZCB3aWR0aD0iNiUiPnw8L3RkPgorICogICAgICAgPHRkIHdpZHRoPSI5NCUiPlR3byBuZXN0ZWQgW10gZXhwcmVzc2lvbnMganV4dGFwb3NlZCBvciBzZXBhcmF0ZWQgb25seSBieSBhIHwgY2hhcmFjdGVyCisgKiAgICAgICBhcmUgbWVyZ2VkIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgW10gZXhwcmVzc2lvbiBtYXRjaGluZyBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gZWl0aGVyCisgKiAgICAgICBvZiB0aGUgb3JpZ2luYWwgW10gZXhwcmVzc2lvbnMuICAoZS5nLiwgIltbYWJdW2JjXV0iIGlzIGVxdWl2YWxlbnQgdG8gIlthYmNdIiwgYW5kIHNvCisgKiAgICAgICBpcyAiW1thYl18W2JjXV0iLiA8Yj5OT1RFOjwvYj4gICJbYWJdW2JjXSIgaXMgTk9UIHRoZSBzYW1lIHRoaW5nIGFzICJbW2FiXVtiY11dIi4KKyAqICAgICAgIFRoZSBmaXJzdCBleHByZXNzaW9uIHdpbGwgbWF0Y2ggdHdvIGNoYXJhY3RlcnM6IGFuIGEgb3IgYiBmb2xsb3dlZCBieSBlaXRoZXIgYW5vdGhlcgorICogICAgICAgYiBvciBhIGMuICBUaGUgc2Vjb25kIGV4cHJlc3Npb24gd2lsbCBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHdoaWNoIG1heSBiZSBhLCBiLCBvciBjLgorICogICAgICAgVGhlIG5lc3RpbmcgaXMgPGVtPnJlcXVpcmVkPC9lbT4gZm9yIHRoZSBleHByZXNzaW9ucyB0byBtZXJnZSB0b2dldGhlci48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIHdpZHRoPSI2JSI+JjwvdGQ+CisgKiAgICAgICA8dGQgd2lkdGg9Ijk0JSI+VHdvIG5lc3RlZCBbXSBleHByZXNzaW9ucyB3aXRoIG9ubHkgJiBiZXR3ZWVuIHRoZW0gd2lsbCBtYXRjaCBhbnkKKyAqICAgICAgIGNoYXJhY3RlciB0aGF0IGFwcGVhcnMgaW4gYm90aCBuZXN0ZWQgW10gZXhwcmVzc2lvbnMgKHRoaXMgaXMgYSBzZXQgaW50ZXJzZWN0aW9uKS4KKyAqICAgICAgIChlLmcuLCAiW1thYl0mW2JjXV0iIHdpbGwgb25seSBtYXRjaCB0aGUgbGV0dGVyIGIuKTwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICA8dGQgd2lkdGg9IjYlIj4tPC90ZD4KKyAqICAgICAgIDx0ZCB3aWR0aD0iOTQlIj5Ud28gbmVzdGVkIFtdIGV4cHJlc3Npb25zIHdpdGggLSBiZXR3ZWVuIHRoZW0gd2lsbCBtYXRjaCBhbnkKKyAqICAgICAgIGNoYXJhY3RlciB0aGF0IGFwcGVhcnMgaW4gdGhlIGZpcnN0IG5lc3RlZCBbXSBleHByZXNzaW9uIDxlbT5idXQgbm90PC9lbT4gdGhlCisgKiAgICAgICBzZWNvbmQgb25lICh0aGlzIGlzIGFuIGFzeW1tZXRyaWNhbCBzZXQgZGlmZmVyZW5jZSkuICAoZS5nLiwgIltbOlNjOl0tWyRdXSIKKyAqICAgICAgIG1hdGNoZXMgYW55IGN1cnJlbmN5IHN5bWJvbCBleGNlcHQgdGhlIGRvbGxhciBzaWduLiAgIltbYWJdLVtiY11dIHdpbGwgbWF0Y2gKKyAqICAgICAgIG9ubHkgdGhlIGxldHRlciBhLiAgVGhpcyBoYXMgZXhhY3RseSB0aGUgc2FtZSBlZmZlY3QgYXMgIltbYWJdJlteYmNdXSIuKTwvdGQ+CisgKiAgICAgPC90cj4KKyAqCisgKiA8cD5Gb3IgYSBtb3JlIGNvbXBsZXRlIGV4cGxhbmF0aW9uLCBzZWUgPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy91bmljb2RlL2xpYnJhcnkvYm91bmRhcmllcy9ib3VuZGFyaWVzLmh0bWwiPmh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy91bmljb2RlL2xpYnJhcnkvYm91bmRhcmllcy9ib3VuZGFyaWVzLmh0bWw8L2E+LgorICogJm5ic3A7IEZvciBleGFtcGxlcywgc2VlIHRoZSByZXNvdXJjZSBkYXRhICh3aGljaCBpcyBhbm5vdGF0ZWQpLjwvcD4KKyAqCisgKiBAYXV0aG9yIFJpY2hhcmQgR2lsbGFtCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqICRSQ1NmaWxlOiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLmphdmEsdiAkICRSZXZpc2lvbjogMS4yMyAkICREYXRlOiAyMDAyLzEyLzA1IDAxOjIyOjExICQKKyAqLworcHVibGljIGNsYXNzIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgZXh0ZW5kcyBCcmVha0l0ZXJhdG9yIHsKKworICAgIC8qKgorICAgICAqIEEgdG9rZW4gdXNlZCBhcyBhIGNoYXJhY3Rlci1jYXRlZ29yeSB2YWx1ZSB0byBpZGVudGlmeSBpZ25vcmUgY2hhcmFjdGVycworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgYnl0ZSBJR05PUkUgPSAtMTsKKworICAgIC8qKgorICAgICAqIFNwZWNpYWwgdmFyaWFibGUgdXNlZCB0byBkZWZpbmUgaWdub3JlIGNoYXJhY3RlcnMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUdOT1JFX1ZBUiA9ICJfaWdub3JlXyI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgc3RhdGUgbnVtYmVyIG9mIHRoZSBzdGFydGluZyBzdGF0ZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IFNUQVJUX1NUQVRFID0gMTsKKworICAgIC8qKgorICAgICAqIFRoZSBzdGF0ZS10cmFuc2l0aW9uIHZhbHVlIGluZGljYXRpbmcgInN0b3AiCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc2hvcnQgU1RPUF9TVEFURSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGV4dHVhbCBkZXNjcmlwdGlvbiB0aGlzIGl0ZXJhdG9yIHdhcyBjcmVhdGVkIGZyb20KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKworICAgIC8qKgorICAgICAqIEEgdGFibGUgdGhhdCBpbmRleGVzIGZyb20gY2hhcmFjdGVyIHZhbHVlcyB0byBjaGFyYWN0ZXIgY2F0ZWdvcnkgbnVtYmVycworICAgICAqLworICAgIHByaXZhdGUgQ29tcGFjdEJ5dGVBcnJheSBjaGFyQ2F0ZWdvcnlUYWJsZSA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGFibGUgb2Ygc3RhdGUgdHJhbnNpdGlvbnMgdXNlZCBmb3IgZm9yd2FyZCBpdGVyYXRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHNob3J0W10gc3RhdGVUYWJsZSA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGFibGUgb2Ygc3RhdGUgdHJhbnNpdGlvbnMgdXNlZCB0byBzeW5jIHVwIHRoZSBpdGVyYXRvciB3aXRoIHRoZQorICAgICAqIHRleHQgaW4gYmFja3dhcmRzIGFuZCByYW5kb20tYWNjZXNzIGl0ZXJhdGlvbgorICAgICAqLworICAgIHByaXZhdGUgc2hvcnRbXSBiYWNrd2FyZHNTdGF0ZVRhYmxlID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIEEgbGlzdCBvZiBmbGFncyBpbmRpY2F0aW5nIHdoaWNoIHN0YXRlcyBpbiB0aGUgc3RhdGUgdGFibGUgYXJlIGFjY2VwdGluZworICAgICAqICgiZW5kIikgc3RhdGVzCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuW10gZW5kU3RhdGVzID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIEEgbGlzdCBvZiBmbGFncyBpbmRpY2F0aW5nIHdoaWNoIHN0YXRlcyBpbiB0aGUgc3RhdGUgdGFibGUgYXJlCisgICAgICogbG9va2FoZWFkIHN0YXRlcyAoc3RhdGVzIHdoaWNoIHR1cm4gbG9va2FoZWFkIG9uIGFuZCBvZmYpCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuW10gbG9va2FoZWFkU3RhdGVzID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVyIGNhdGVnb3JpZXMgKGFuZCwgdGh1cywgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluCisgICAgICogdGhlIHN0YXRlIHRhYmxlcykKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBudW1DYXRlZ29yaWVzOworCisgICAgLyoqCisgICAgICogVGhlIGNoYXJhY3RlciBpdGVyYXRvciB0aHJvdWdoIHdoaWNoIHRoaXMgQnJlYWtJdGVyYXRvciBhY2Nlc3NlcyB0aGUgdGV4dAorICAgICAqLworICAgIHByaXZhdGUgQ2hhcmFjdGVySXRlcmF0b3IgdGV4dCA9IG51bGw7CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gY29uc3RydWN0b3JzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgYWNjb3JkaW5nIHRvIHRoZSBkZXNjcmlwdGlvbgorICAgICAqIHByb3ZpZGVkLiAgSWYgdGhlIGRlc2NyaXB0aW9uIGlzIG1hbGZvcm1lZCwgdGhyb3dzIGFuCisgICAgICogSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLiAgTm9ybWFsbHksIGluc3RlYWQgb2YgY29uc3RydWN0aW5nIGEKKyAgICAgKiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGRpcmVjdG9yeSwgeW91J2xsIHVzZSB0aGUgZmFjdG9yeSBtZXRob2RzCisgICAgICogb24gQnJlYWtJdGVyYXRvciB0byBjcmVhdGUgb25lIGluZGlyZWN0bHkgZnJvbSBhIGRlc2NyaXB0aW9uCisgICAgICogaW4gdGhlIGZyYW1ld29yaydzIHJlc291cmNlIGZpbGVzLiAgWW91J2QgdXNlIHRoaXMgd2hlbiB5b3Ugd2FudAorICAgICAqIHNwZWNpYWwgYmVoYXZpb3Igbm90IHByb3ZpZGVkIGJ5IHRoZSBidWlsdC1pbiBpdGVyYXRvcnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IoU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisvL1N5c3RlbS5vdXQucHJpbnRsbigiPj4+UkJCSSBjb25zdHJ1Y3RvciIpOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisKKyAgICAgICAgLy8gdGhlIGFjdHVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlIEJ1aWxkZXIgY2xhc3MKKyAgICAgICAgQnVpbGRlciBidWlsZGVyID0gbWFrZUJ1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5idWlsZEJyZWFrSXRlcmF0b3IoKTsKKy8vU3lzdGVtLm91dC5wcmludGxuKCI8PDxSQkJJIGNvbnN0cnVjdG9yIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIEJ1aWxkZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIEJ1aWxkZXIgbWFrZUJ1aWxkZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcigpOworICAgIH0KKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBib2lsZXJwbGF0ZQorICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhpcyBpdGVyYXRvci4KKyAgICAgKiBAcmV0dXJuIEEgbmV3bHktY29uc3RydWN0ZWQgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciB3aXRoIHRoZSBzYW1lCisgICAgICogYmVoYXZpb3IgYXMgdGhpcyBvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpCisgICAgeworICAgICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHJlc3VsdCA9IChSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKSBzdXBlci5jbG9uZSgpOworICAgICAgICBpZiAodGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICByZXN1bHQudGV4dCA9IChDaGFyYWN0ZXJJdGVyYXRvcikgdGV4dC5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIGJvdGggQnJlYWtJdGVyYXRvcnMgYXJlIG9mIHRoZSBzYW1lIGNsYXNzLCBoYXZlIHRoZSBzYW1lCisgICAgICogcnVsZXMsIGFuZCBpdGVyYXRlIG92ZXIgdGhlIHNhbWUgdGV4dC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IHRoYXQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3Igb3RoZXIgPSAoUnVsZUJhc2VkQnJlYWtJdGVyYXRvcikgdGhhdDsKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRpb24uZXF1YWxzKG90aGVyLmRlc2NyaXB0aW9uKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIudGV4dCA9PSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQuZXF1YWxzKG90aGVyLnRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGlzIGl0ZXJhdG9yCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXB1dGUgYSBoYXNoY29kZSBmb3IgdGhpcyBCcmVha0l0ZXJhdG9yCisgICAgICogQHJldHVybiBBIGhhc2ggY29kZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmhhc2hDb2RlKCk7CisgICAgfQorCisvLworLy8gICBEdW1wIG91dCBhIG1vcmUtb3ItbGVzcyBodW1hbiByZWFkYWJsZSBmb3JtIG9mIHRoZQorLy8gICBjb21wbGV0ZSBzdGF0ZSB0YWJsZSBhbmQgY2hhcmFjdGVyIGNsYXNzIGRlZmluaXRpb25zCisvLworICAgIC8vL0NMT1ZFUjpPRkYKK3B1YmxpYyB2b2lkIGRlYnVnRHVtcFRhYmxlcygpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNoYXJhY3RlciBDbGFzc2VzOiIpOworICAgIGludCBjdXJyZW50Q2hhckNsYXNzID0gMjU3OworICAgIGludCBzdGFydEN1cnJlbnRSYW5nZSA9IDA7CisgICAgaW50IGluaXRpYWxTdHJpbmdMZW5ndGggPSAwOworCisgICAgU3RyaW5nQnVmZmVyW10gY2hhckNsYXNzUmFuZ2VzID0gbmV3IFN0cmluZ0J1ZmZlcltudW1DYXRlZ29yaWVzXTsKKyAgICBmb3IgKGludCBpPTA7IGk8bnVtQ2F0ZWdvcmllczsgaSsrKSB7CisgICAgICAgIGNoYXJDbGFzc1Jhbmdlc1tpXSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDB4ZmZmZjsgaSsrKSB7CisgICAgICAgIGlmICgoaW50KWNoYXJDYXRlZ29yeVRhYmxlLmVsZW1lbnRBdCgoY2hhcilpKSAhPSBjdXJyZW50Q2hhckNsYXNzKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudENoYXJDbGFzcyAhPSAyNTcpIHsKKyAgICAgICAgICAgICAgICAvLyBDb21wbGV0ZSB0aGUgb3V0cHV0IG9mIHRoZSBwcmV2aW91cyByYW5nZS4KKyAgICAgICAgICAgICAgICBpZiAoaSAhPSBzdGFydEN1cnJlbnRSYW5nZSsxKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXJDbGFzc1Jhbmdlc1tjdXJyZW50Q2hhckNsYXNzXS5hcHBlbmQoIi0iKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGktMSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2hhckNsYXNzUmFuZ2VzW2N1cnJlbnRDaGFyQ2xhc3NdLmxlbmd0aCgpICUgNzIgPCBpbml0aWFsU3RyaW5nTGVuZ3RoICUgNzIpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhckNsYXNzUmFuZ2VzW2N1cnJlbnRDaGFyQ2xhc3NdLmFwcGVuZCgiXG4gICAgICIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3V0cHV0IHRoZSBzdGFydCBvZiB0aGUgbmV3IHJhbmdlLgorICAgICAgICAgICAgY3VycmVudENoYXJDbGFzcyA9IChpbnQpY2hhckNhdGVnb3J5VGFibGUuZWxlbWVudEF0KChjaGFyKWkpOworICAgICAgICAgICAgc3RhcnRDdXJyZW50UmFuZ2UgPSBpOworICAgICAgICAgICAgaW5pdGlhbFN0cmluZ0xlbmd0aCA9IGNoYXJDbGFzc1Jhbmdlc1tjdXJyZW50Q2hhckNsYXNzXS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChjaGFyQ2xhc3NSYW5nZXNbY3VycmVudENoYXJDbGFzc10ubGVuZ3RoKCkgPiAwKQorICAgICAgICAgICAgICAgIGNoYXJDbGFzc1Jhbmdlc1tjdXJyZW50Q2hhckNsYXNzXS5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBjaGFyQ2xhc3NSYW5nZXNbY3VycmVudENoYXJDbGFzc10uYXBwZW5kKEludGVnZXIudG9IZXhTdHJpbmcoaSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaT0wOyBpPG51bUNhdGVnb3JpZXM7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICI6ICAgICAiICsgY2hhckNsYXNzUmFuZ2VzW2ldKTsKKyAgICB9CisKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cblN0YXRlIFRhYmxlLiAgICo6IGVuZCBzdGF0ZSAgICAgJTogbG9vayBhaGVhZCBzdGF0ZSIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIkM6XHQiKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNhdGVnb3JpZXM7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludChJbnRlZ2VyLnRvU3RyaW5nKGkpICsgIlx0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCk7IFN5c3RlbS5vdXQucHJpbnQoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRlVGFibGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGkgJSBudW1DYXRlZ29yaWVzID09IDApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAgICAgaWYgKGVuZFN0YXRlc1tpIC8gbnVtQ2F0ZWdvcmllc10pCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiKiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiKTsKKyAgICAgICAgICAgIGlmIChsb29rYWhlYWRTdGF0ZXNbaSAvIG51bUNhdGVnb3JpZXNdKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiJSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoSW50ZWdlci50b1N0cmluZyhpIC8gbnVtQ2F0ZWdvcmllcykgKyAiOlx0Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlVGFibGVbaV0gPT0gMCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiLlx0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KEludGVnZXIudG9TdHJpbmcoc3RhdGVUYWJsZVtpXSkgKyAiXHQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKK30KKyAgICAvLy9DTE9WRVI6T04KKworICAgIC8vL0NMT1ZFUjpPRkYKKy8vIERFTEVURSBNRSBCRUZPUkUgUkVMRUFTRSEhIQorcHVibGljIHZvaWQgd3JpdGVUYWJsZXNUb0ZpbGUoRmlsZU91dHB1dFN0cmVhbSBmaWxlLCBib29sZWFuIGxpdHRsZUVuZGlhbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAvLyBOT1RFOiBUaGUgZm9ybWF0IGJlaW5nIHdyaXR0ZW4gaGVyZSBpcyBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGgKKyAgICAvLyB0aGUgSUNVIHVkYXRhIGludGVyZmFjZXMgYW5kIG1heSBub3QgYmUgdXNlZnVsIGZvciBtdWNoIGVsc2UKKyAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKGZpbGUpOworCisvLyAtLS0gd3JpdGUgdGhlIGZpbGUgaGVhZGVyIC0tLQorYnl0ZVtdIGNvbW1lbnQgPSAiQ29weXJpZ2h0IChDKSAxOTk5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnAuIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIi5nZXRCeXRlcygiVVMtQVNDSUkiKTsKKy8vIHdyaXRlIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgKHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgMTYtYnl0ZSBib3VuZGFyeSkKK3Nob3J0IGhlYWRlclNpemUgPSAoc2hvcnQpKGNvbW1lbnQubGVuZ3RoICsgMSAvLyBsZW5ndGggb2YgY29tbWVudAorICAgICAgICAgICAgICAgICAgICsgMjQpOyAvLyBzaXplIG9mIHN0YXRpYyBoZWFkZXIgZGF0YQorc2hvcnQgcmVhbEhlYWRlclNpemUgPSAoc2hvcnQpKGhlYWRlclNpemUgKyAoKGhlYWRlclNpemUgJSAxNiA9PSAwKSA/IDAgOiAxNiAtIChoZWFkZXJTaXplICUgMTYpKSk7Cit3cml0ZVN3YXBwZWRTaG9ydChyZWFsSGVhZGVyU2l6ZSwgb3V0LCBsaXR0bGVFbmRpYW4pOworLy8gd3JpdGUgbWFnaWMgYnl0ZSB2YWx1ZXMKK291dC53cml0ZSgweGRhKTsKK291dC53cml0ZSgweDI3KTsKKy8vIHdyaXRlIHNpemUgb2YgY29yZSBoZWFkZXIgZGF0YQord3JpdGVTd2FwcGVkU2hvcnQoKHNob3J0KTIwLCBvdXQsIGxpdHRsZUVuZGlhbik7CisvLyB3cml0ZSByZXNlcnZlZCBieXRlcword3JpdGVTd2FwcGVkU2hvcnQoKHNob3J0KTAsIG91dCwgbGl0dGxlRW5kaWFuKTsKKworLy8gd3JpdGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgd2UncmUgYmlnLWVuZGlhbgoraWYgKGxpdHRsZUVuZGlhbikgeworICAgIG91dC53cml0ZSgwKTsKK30gZWxzZSB7CisgICAgb3V0LndyaXRlKDEpOworfQorCisvLyB3cml0ZSBjaGFyYWN0ZXIgc2V0IGZhbWlseSBjb2RlICgwIG1lYW5zIEFTQ0lJKQorb3V0LndyaXRlKDApOworLy8gd3JpdGUgc2l6ZSBvZiBVQ2hhciBpbiB0aGlzIGZpbGUKK291dC53cml0ZSgyKTsKKy8vIHdyaXRlIHJlc2VydmVkIGJ5dGUKK291dC53cml0ZSgwKTsKKy8vIHdyaXRlIGRhdGEgZm9ybWF0IGlkZW50aWZpZXIgKHRoaXMgaXMgYW4gYXJyYXkgb2YgYnl0ZXMgaW4gSUNVLCBzbyB0aGUgdmFsdWUgaXMgTk9UIHN3YXBwZWQhKQorb3V0LndyaXRlSW50KDB4NDI1MjRiNTMpOyAgIC8vICgiQlJLUyIpCisvLyB3cml0ZSBmaWxlIGZvcm1hdCB2ZXJzaW9uIG51bWJlciAoTk9UIHN3YXBwZWQhKQorb3V0LndyaXRlSW50KDApOworLy8gd3JpdGUgZGF0YSB2ZXJzaW9uIG51bWJlciAoTk9UIHN3YXBwZWQhKQorb3V0LndyaXRlSW50KDApOworLy8gd3JpdGUgY29weXJpZ2h0IG5vdGljZQorb3V0LndyaXRlKGNvbW1lbnQpOworb3V0LndyaXRlKDApOworLy8gZmlsbCBpbiBwYWRkaW5nIGJ5dGVzCit3aGlsZSAoaGVhZGVyU2l6ZSA8IHJlYWxIZWFkZXJTaXplKSB7CisgICAgb3V0LndyaXRlKDApOworICAgICsraGVhZGVyU2l6ZTsKK30KKworLy8gLS0tIHdyaXRlIGluZGV4IHRvIHRoZSBmaWxlIC0tLQorLy8gd3JpdGUgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBzdGF0ZSB0YWJsZQord3JpdGVTd2FwcGVkSW50KG51bUNhdGVnb3JpZXMsIG91dCwgbGl0dGxlRW5kaWFuKTsKK2ludCBmaWxlRW5kID0gMzY7CisvLyB3cml0ZSB0aGUgbG9jYXRpb24gaW4gdGhlIGZpbGUgb2YgdGhlIEJyZWFrSXRlcmF0b3IgZGVzY3JpcHRpb24gc3RyaW5nCit3cml0ZVN3YXBwZWRJbnQoZmlsZUVuZCwgb3V0LCBsaXR0bGVFbmRpYW4pOworZmlsZUVuZCArPSAoZGVzY3JpcHRpb24ubGVuZ3RoKCkgKyAxKSAqIDI7CitmaWxlRW5kICs9IChmaWxlRW5kICUgNCA9PSAwKSA/IDAgOiA0IC0gKGZpbGVFbmQgJSA0KTsKKy8vIHdyaXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGNhdGVnb3J5IHRhYmxlJ3MgaW5kZXgKK3dyaXRlU3dhcHBlZEludChmaWxlRW5kLCBvdXQsIGxpdHRsZUVuZGlhbik7CitmaWxlRW5kICs9IGNoYXJDYXRlZ29yeVRhYmxlLmdldEluZGV4QXJyYXkoKS5sZW5ndGggKiAyOworZmlsZUVuZCArPSAoZmlsZUVuZCAlIDQgPT0gMCkgPyAwIDogNCAtIChmaWxlRW5kICUgNCk7CisvLyB3cml0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGNoYXJhY3RlciBjYXRlZ29yeSB0YWJsZSdzIHZhbHVlcyBhcnJheQord3JpdGVTd2FwcGVkSW50KGZpbGVFbmQsIG91dCwgbGl0dGxlRW5kaWFuKTsKK2ZpbGVFbmQgKz0gY2hhckNhdGVnb3J5VGFibGUuZ2V0VmFsdWVBcnJheSgpLmxlbmd0aDsKK2ZpbGVFbmQgKz0gKGZpbGVFbmQgJSA0ID09IDApID8gMCA6IDQgLSAoZmlsZUVuZCAlIDQpOworLy8gd3JpdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBmb3J3YXJkIHN0YXRlIHRhYmxlCit3cml0ZVN3YXBwZWRJbnQoZmlsZUVuZCwgb3V0LCBsaXR0bGVFbmRpYW4pOworZmlsZUVuZCArPSBzdGF0ZVRhYmxlLmxlbmd0aCAqIDI7CitmaWxlRW5kICs9IChmaWxlRW5kICUgNCA9PSAwKSA/IDAgOiA0IC0gKGZpbGVFbmQgJSA0KTsKKy8vIHdyaXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmFja3dhcmQgc3RhdGUgdGFibGUKK3dyaXRlU3dhcHBlZEludChmaWxlRW5kLCBvdXQsIGxpdHRsZUVuZGlhbik7CitmaWxlRW5kICs9IGJhY2t3YXJkc1N0YXRlVGFibGUubGVuZ3RoICogMjsKK2ZpbGVFbmQgKz0gKGZpbGVFbmQgJSA0ID09IDApID8gMCA6IDQgLSAoZmlsZUVuZCAlIDQpOworLy8gd3JpdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBlbmRTdGF0ZXMgZmxhZ3MKK3dyaXRlU3dhcHBlZEludChmaWxlRW5kLCBvdXQsIGxpdHRsZUVuZGlhbik7CitmaWxlRW5kICs9IGVuZFN0YXRlcy5sZW5ndGg7CitmaWxlRW5kICs9IChmaWxlRW5kICUgNCA9PSAwKSA/IDAgOiA0IC0gKGZpbGVFbmQgJSA0KTsKKy8vIHdyaXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbG9va2FoZWFkU3RhdGVzIGZsYWdzCit3cml0ZVN3YXBwZWRJbnQoZmlsZUVuZCwgb3V0LCBsaXR0bGVFbmRpYW4pOworZmlsZUVuZCArPSBsb29rYWhlYWRTdGF0ZXMubGVuZ3RoOworZmlsZUVuZCArPSAoZmlsZUVuZCAlIDQgPT0gMCkgPyAwIDogNCAtIChmaWxlRW5kICUgNCk7CisvLyB3cml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlCit3cml0ZVN3YXBwZWRJbnQoZmlsZUVuZCwgb3V0LCBsaXR0bGVFbmRpYW4pOworCisvLyAtLS0gd3JpdGUgdGhlIGFjdHVhbCBkYXRhIC0tLQorLy8gd3JpdGUgZGVzY3JpcHRpb24gc3RyaW5nCitmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmxlbmd0aCgpOyBpKyspCisgICAgd3JpdGVTd2FwcGVkU2hvcnQoKHNob3J0KWRlc2NyaXB0aW9uLmNoYXJBdChpKSwgb3V0LCBsaXR0bGVFbmRpYW4pOworb3V0LndyaXRlU2hvcnQoMCk7CitpZiAoKGRlc2NyaXB0aW9uLmxlbmd0aCgpICsgMSkgJSAyID09IDEpCisgICAgb3V0LndyaXRlU2hvcnQoMCk7CisvLyB3cml0ZSBjaGFyYWN0ZXIgY2F0ZWdvcnkgdGFibGUKK2NoYXJbXSB0ZW1wMSA9IGNoYXJDYXRlZ29yeVRhYmxlLmdldEluZGV4QXJyYXkoKTsKK2ZvciAoaW50IGkgPSAwOyBpIDwgdGVtcDEubGVuZ3RoOyBpKyspCisgICAgd3JpdGVTd2FwcGVkU2hvcnQoKHNob3J0KXRlbXAxW2ldLCBvdXQsIGxpdHRsZUVuZGlhbik7CitpZiAodGVtcDEubGVuZ3RoICUgMiA9PSAxKQorICAgIG91dC53cml0ZVNob3J0KDApOworYnl0ZVtdIHRlbXAyID0gY2hhckNhdGVnb3J5VGFibGUuZ2V0VmFsdWVBcnJheSgpOworb3V0LndyaXRlKHRlbXAyKTsKK3N3aXRjaCAodGVtcDIubGVuZ3RoICUgNCkgeworICAgIGNhc2UgMTogb3V0LndyaXRlKDApOworICAgIGNhc2UgMjogb3V0LndyaXRlKDApOworICAgIGNhc2UgMzogb3V0LndyaXRlKDApOworICAgIGRlZmF1bHQ6IGJyZWFrOworfQorLy8gd3JpdGUgdGhlIHN0YXRlIHRyYW5zaXRpb24gdGFibGVzCitmb3IgKGludCBpID0gMDsgaSA8IHN0YXRlVGFibGUubGVuZ3RoOyBpKyspCisgICAgd3JpdGVTd2FwcGVkU2hvcnQoc3RhdGVUYWJsZVtpXSwgb3V0LCBsaXR0bGVFbmRpYW4pOworaWYgKHN0YXRlVGFibGUubGVuZ3RoICUgMiA9PSAxKQorICAgIG91dC53cml0ZVNob3J0KDApOworZm9yIChpbnQgaSA9IDA7IGkgPCBiYWNrd2FyZHNTdGF0ZVRhYmxlLmxlbmd0aDsgaSsrKQorICAgIHdyaXRlU3dhcHBlZFNob3J0KGJhY2t3YXJkc1N0YXRlVGFibGVbaV0sIG91dCwgbGl0dGxlRW5kaWFuKTsKK2lmIChiYWNrd2FyZHNTdGF0ZVRhYmxlLmxlbmd0aCAlIDIgPT0gMSkKKyAgICBvdXQud3JpdGVTaG9ydCgwKTsKKy8vIHdyaXRlIHRoZSBmbGFnIGFycmF5cworZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRTdGF0ZXMubGVuZ3RoOyBpKyspCisgICAgb3V0LndyaXRlQm9vbGVhbihlbmRTdGF0ZXNbaV0pOworc3dpdGNoIChlbmRTdGF0ZXMubGVuZ3RoICUgNCkgeworICAgIGNhc2UgMTogb3V0LndyaXRlKDApOworICAgIGNhc2UgMjogb3V0LndyaXRlKDApOworICAgIGNhc2UgMzogb3V0LndyaXRlKDApOworICAgIGRlZmF1bHQ6IGJyZWFrOworfQorZm9yIChpbnQgaSA9IDA7IGkgPCBsb29rYWhlYWRTdGF0ZXMubGVuZ3RoOyBpKyspCisgICAgb3V0LndyaXRlQm9vbGVhbihsb29rYWhlYWRTdGF0ZXNbaV0pOworc3dpdGNoIChsb29rYWhlYWRTdGF0ZXMubGVuZ3RoICUgNCkgeworICAgIGNhc2UgMTogb3V0LndyaXRlKDApOworICAgIGNhc2UgMjogb3V0LndyaXRlKDApOworICAgIGNhc2UgMzogb3V0LndyaXRlKDApOworICAgIGRlZmF1bHQ6IGJyZWFrOworfQorfQorCitwcm90ZWN0ZWQgdm9pZCB3cml0ZVN3YXBwZWRTaG9ydChzaG9ydCB4LCBEYXRhT3V0cHV0U3RyZWFtIG91dCwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pCit0aHJvd3MgSU9FeGNlcHRpb257CisgICAgaWYgKGxpdHRsZUVuZGlhbikgeworICAgICAgICBvdXQud3JpdGUoKGJ5dGUpKHggJiAweGZmKSk7CisgICAgICAgIG91dC53cml0ZSgoYnl0ZSkoKHggPj4gOCkgJiAweGZmKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBvdXQud3JpdGUoKGJ5dGUpKCh4ID4+IDgpICYgMHhmZikpOworICAgICAgICBvdXQud3JpdGUoKGJ5dGUpKHggJiAweGZmKSk7CisgICAgfQorfQorCitwcm90ZWN0ZWQgdm9pZCB3cml0ZVN3YXBwZWRJbnQoaW50IHgsIERhdGFPdXRwdXRTdHJlYW0gb3V0LCBib29sZWFuIGxpdHRsZUVuZGlhbikKK3Rocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgaWYgKGxpdHRsZUVuZGlhbikgeworICAgICAgICBvdXQud3JpdGUoKGJ5dGUpKHggJiAweGZmKSk7CisgICAgICAgIG91dC53cml0ZSgoYnl0ZSkoKHggPj4gOCkgJiAweGZmKSk7CisgICAgICAgIG91dC53cml0ZSgoYnl0ZSkoKHggPj4gMTYpICYgMHhmZikpOworICAgICAgICBvdXQud3JpdGUoKGJ5dGUpKCh4ID4+IDI0KSAmIDB4ZmYpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG91dC53cml0ZSgoYnl0ZSkoKHggPj4gMjQpICYgMHhmZikpOworICAgICAgICBvdXQud3JpdGUoKGJ5dGUpKCh4ID4+IDE2KSAmIDB4ZmYpKTsKKyAgICAgICAgb3V0LndyaXRlKChieXRlKSgoeCA+PiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgb3V0LndyaXRlKChieXRlKSh4ICYgMHhmZikpOworICAgIH0KK30KKyAgICAvLy9DTE9WRVI6T04KKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBCcmVha0l0ZXJhdG9yIG92ZXJyaWRlcworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIHBvc2l0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQuCisgICAgICogKGkuZS4sIHRoZSBDaGFyYWN0ZXJJdGVyYXRvcidzIHN0YXJ0aW5nIG9mZnNldCkuCisgICAgICogQHJldHVybiBUaGUgb2Zmc2V0IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBmaXJzdCgpIHsKKyAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgdCA9IGdldFRleHQoKTsKKworICAgICAgICB0LmZpcnN0KCk7CisgICAgICAgIHJldHVybiB0LmdldEluZGV4KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyAgICAgKiAoaS5lLiwgdGhlIENoYXJhY3Rlckl0ZXJhdG9yJ3MgZW5kaW5nIG9mZnNldCkuCisgICAgICogQHJldHVybiBUaGUgdGV4dCdzIHBhc3QtdGhlLWVuZCBvZmZzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBsYXN0KCkgeworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciB0ID0gZ2V0VGV4dCgpOworCisgICAgICAgIC8vIEknbSBub3Qgc3VyZSB3aHksIGJ1dCB0Lmxhc3QoKSByZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIGxhc3QgY2hhcmFjdGVyLAorICAgICAgICAvLyByYXRoZXIgdGhhbiB0aGUgcGFzdC10aGUtZW5kIG9mZnNldAorICAgICAgICB0LnNldEluZGV4KHQuZ2V0RW5kSW5kZXgoKSk7CisgICAgICAgIHJldHVybiB0LmdldEluZGV4KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWR2YW5jZXMgdGhlIGl0ZXJhdG9yIGVpdGhlciBmb3J3YXJkIG9yIGJhY2t3YXJkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHN0ZXBzLgorICAgICAqIE5lZ2F0aXZlIHZhbHVlcyBtb3ZlIGJhY2t3YXJkLCBhbmQgcG9zaXRpdmUgdmFsdWVzIG1vdmUgZm9yd2FyZC4gIFRoaXMgaXMKKyAgICAgKiBlcXVpdmFsZW50IHRvIHJlcGVhdGVkbHkgY2FsbGluZyBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKyAgICAgKiBAcGFyYW0gbiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIG1vdmUuICBUaGUgc2lnbiBpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbgorICAgICAqIChuZWdhdGl2ZSBpcyBiYWNrd2FyZHMsIGFuZCBwb3NpdGl2ZSBpcyBmb3J3YXJkcykuCisgICAgICogQHJldHVybiBUaGUgY2hhcmFjdGVyIG9mZnNldCBvZiB0aGUgYm91bmRhcnkgcG9zaXRpb24gbiBib3VuZGFyaWVzIGF3YXkgZnJvbQorICAgICAqIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG5leHQoaW50IG4pIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IGN1cnJlbnQoKTsKKyAgICAgICAgd2hpbGUgKG4gPiAwKSB7CisgICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVOZXh0KCk7CisgICAgICAgICAgICAtLW47CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG4gPCAwKSB7CisgICAgICAgICAgICByZXN1bHQgPSBwcmV2aW91cygpOworICAgICAgICAgICAgKytuOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWR2YW5jZXMgdGhlIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGJvdW5kYXJ5IHBvc2l0aW9uLgorICAgICAqIEByZXR1cm4gVGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBib3VuZGFyeSBhZnRlciB0aGlzIG9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG5leHQoKSB7CisgICAgICAgIHJldHVybiBoYW5kbGVOZXh0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWR2YW5jZXMgdGhlIGl0ZXJhdG9yIGJhY2t3YXJkcywgdG8gdGhlIGxhc3QgYm91bmRhcnkgcHJlY2VkaW5nIHRoaXMgb25lLgorICAgICAqIEByZXR1cm4gVGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGJvdW5kYXJ5IHBvc2l0aW9uIHByZWNlZGluZyB0aGlzIG9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHByZXZpb3VzKCkgeworICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNpdHRpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCwgcmV0dXJuIERPTkUKKyAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgdGV4dCA9IGdldFRleHQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnQoKSA9PSB0ZXh0LmdldEJlZ2luSW5kZXgoKSkgeworICAgICAgICAgICAgcmV0dXJuIEJyZWFrSXRlcmF0b3IuRE9ORTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHNldCB0aGluZ3MgdXAuICBoYW5kbGVQcmV2aW91cygpIHdpbGwgYmFjayB1cyB1cCB0byBzb21lIHZhbGlkCisgICAgICAgIC8vIGJyZWFrIHBvc2l0aW9uIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiAod2UgYmFjayBvdXIgaW50ZXJuYWwKKyAgICAgICAgLy8gaXRlcmF0b3IgdXAgb25lIHN0ZXAgdG8gcHJldmVudCBoYW5kbGVQcmV2aW91cygpIGZyb20gcmV0dXJuaW5nCisgICAgICAgIC8vIHRoZSBjdXJyZW50IHBvc2l0aW9uKSwgYnV0IG5vdCBuZWNlc3NhcmlseSB0aGUgbGFzdCBvbmUgYmVmb3JlCisgICAgICAgIC8vIHdoZXJlIHdlIHN0YXJ0ZWQKKyAgICAgICAgaW50IHN0YXJ0ID0gY3VycmVudCgpOworICAgICAgICB0ZXh0LnByZXZpb3VzKCk7CisgICAgICAgIGludCBsYXN0UmVzdWx0ID0gaGFuZGxlUHJldmlvdXMoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IGxhc3RSZXN1bHQ7CisKKyAgICAgICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlIGtub3duIGJyZWFrIHBvc2l0aW9uIHVudGlsIHdlIHBhc3Mgb3VyCisgICAgICAgIC8vIHN0YXJ0aW5nIHBvaW50LiAgVGhlIGxhc3QgYnJlYWsgcG9zaXRpb24gYmVmb3JlIHRoZSBzdGFydGluZworICAgICAgICAvLyBwb2ludCBpcyBvdXIgcmV0dXJuIHZhbHVlCisgICAgICAgIHdoaWxlIChyZXN1bHQgIT0gQnJlYWtJdGVyYXRvci5ET05FICYmIHJlc3VsdCA8IHN0YXJ0KSB7CisgICAgICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlTmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gc2V0IHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiB0byBiZSB0aGUgbGFzdCBicmVhayBwb3NpdGlvbgorICAgICAgICAvLyBiZWZvcmUgd2hlcmUgd2Ugc3RhcnRlZCwgYW5kIHRoZW4gcmV0dXJuIHRoYXQgdmFsdWUKKyAgICAgICAgdGV4dC5zZXRJbmRleChsYXN0UmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHVubGVzcyBiZWdpbiA8PSBvZmZzZXQgPCBlbmQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCB2b2lkIGNoZWNrT2Zmc2V0KGludCBvZmZzZXQsIENoYXJhY3Rlckl0ZXJhdG9yIHRleHQpIHsKKyAgICAgICAgaWYgKG9mZnNldCA8IHRleHQuZ2V0QmVnaW5JbmRleCgpIHx8IG9mZnNldCA+IHRleHQuZ2V0RW5kSW5kZXgoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigib2Zmc2V0IG91dCBvZiBib3VuZHMiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyIHRvIHRoZSBmaXJzdCBib3VuZGFyeSBwb3NpdGlvbiBmb2xsb3dpbmcKKyAgICAgKiB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgorICAgICAqIEBwYXJhbSBvZmZzZXQgVGhlIHBvc2l0aW9uIGZyb20gd2hpY2ggdG8gYmVnaW4gc2VhcmNoaW5nIGZvciBhIGJyZWFrIHBvc2l0aW9uLgorICAgICAqIEByZXR1cm4gVGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBicmVhayBhZnRlciB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGZvbGxvd2luZyhpbnQgb2Zmc2V0KSB7CisgICAgICAgIC8vIGlmIHRoZSBvZmZzZXQgcGFzc2VkIGluIGlzIGFscmVhZHkgcGFzdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LAorICAgICAgICAvLyBqdXN0IHJldHVybiBET05FCisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIHRleHQgPSBnZXRUZXh0KCk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gdGV4dC5nZXRFbmRJbmRleCgpKSB7CisgICAgICAgICAgICByZXR1cm4gQnJlYWtJdGVyYXRvci5ET05FOworICAgICAgICB9CisgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgdGV4dCk7CisKKyAgICAgICAgLy8gb3RoZXJ3aXNlLCBzZXQgb3VyIGludGVybmFsIGl0ZXJhdGlvbiBwb3NpdGlvbiAodGVtcG9yYXJpbHkpCisgICAgICAgIC8vIHRvIHRoZSBwb3NpdGlvbiBwYXNzZWQgaW4uICBJZiB0aGlzIGlzIHRoZSBfYmVnaW5uaW5nXyBwb3NpdGlvbiwKKyAgICAgICAgLy8gdGhlbiB3ZSBjYW4ganVzdCB1c2UgbmV4dCgpIHRvIGdldCBvdXIgcmV0dXJuIHZhbHVlCisgICAgICAgIHRleHQuc2V0SW5kZXgob2Zmc2V0KTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSB0ZXh0LmdldEJlZ2luSW5kZXgoKSkgeworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZU5leHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG90aGVyd2lzZSwgd2UgaGF2ZSB0byBzeW5jIHVwIGZpcnN0LiAgVXNlIGhhbmRsZVByZXZpb3VzKCkgdG8gYmFjaworICAgICAgICAvLyB1cyB1cCB0byBhIGtub3duIGJyZWFrIHBvc2l0aW9uIGJlZm9yZSB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIChpZgorICAgICAgICAvLyB3ZSBjYW4gZGV0ZXJtaW5lIHRoYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpcyBhIGJyZWFrIHBvc2l0aW9uLAorICAgICAgICAvLyB3ZSBkb24ndCBiYWNrIHVwIGF0IGFsbCkuICBUaGlzIG1heSBvciBtYXkgbm90IGJlIHRoZSBsYXN0IGJyZWFrCisgICAgICAgIC8vIHBvc2l0aW9uIGF0IG9yIGJlZm9yZSBvdXIgc3RhcnRpbmcgcG9zaXRpb24uICBBZHZhbmNlIGZvcndhcmQKKyAgICAgICAgLy8gZnJvbSBoZXJlIHVudGlsIHdlJ3ZlIHBhc3NlZCB0aGUgc3RhcnRpbmcgcG9zaXRpb24uICBUaGUgcG9zaXRpb24KKyAgICAgICAgLy8gd2Ugc3RvcCBvbiB3aWxsIGJlIHRoZSBmaXJzdCBicmVhayBwb3NpdGlvbiBhZnRlciB0aGUgc3BlY2lmaWVkIG9uZS4KKyAgICAgICAgaW50IHJlc3VsdCA9IGhhbmRsZVByZXZpb3VzKCk7CisgICAgICAgIHdoaWxlIChyZXN1bHQgIT0gQnJlYWtJdGVyYXRvci5ET05FICYmIHJlc3VsdCA8PSBvZmZzZXQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZU5leHQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyIHRvIHRoZSBsYXN0IGJvdW5kYXJ5IHBvc2l0aW9uIGJlZm9yZSB0aGUKKyAgICAgKiBzcGVjaWZpZWQgcG9zaXRpb24uCisgICAgICogQHBhcmFtIG9mZnNldCBUaGUgcG9zaXRpb24gdG8gYmVnaW4gc2VhcmNoaW5nIGZvciBhIGJyZWFrIGZyb20uCisgICAgICogQHJldHVybiBUaGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgYm91bmRhcnkgYmVmb3JlIHRoZSBzdGFydGluZyBwb3NpdGlvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHByZWNlZGluZyhpbnQgb2Zmc2V0KSB7CisgICAgICAgIC8vIGlmIHdlIHN0YXJ0IGJ5IHVwZGF0aW5nIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiB0byB0aGUKKyAgICAgICAgLy8gcG9zaXRpb24gc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIsIHdlIGNhbiBqdXN0IHVzZSBwcmV2aW91cygpCisgICAgICAgIC8vIHRvIGNhcnJ5IG91dCB0aGlzIG9wZXJhdGlvbgorICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0ID0gZ2V0VGV4dCgpOworICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHRleHQpOworICAgICAgICB0ZXh0LnNldEluZGV4KG9mZnNldCk7CisgICAgICAgIHJldHVybiBwcmV2aW91cygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2ZpZWQgcG9zaXRpb24gaXMgYSBib3VuZGFyeSBwb3NpdGlvbi4gIEFzIGEgc2lkZQorICAgICAqIGVmZmVjdCwgbGVhdmVzIHRoZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgYm91bmRhcnkgcG9zaXRpb24gYXQKKyAgICAgKiBvciBhZnRlciAib2Zmc2V0Ii4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0IHRoZSBvZmZzZXQgdG8gY2hlY2suCisgICAgICogQHJldHVybiBUcnVlIGlmICJvZmZzZXQiIGlzIGEgYm91bmRhcnkgcG9zaXRpb24uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNCb3VuZGFyeShpbnQgb2Zmc2V0KSB7CisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIHRleHQgPSBnZXRUZXh0KCk7CisgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgdGV4dCk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gdGV4dC5nZXRCZWdpbkluZGV4KCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gdG8gY2hlY2sgd2hldGhlciB0aGlzIGlzIGEgYm91bmRhcnksIHdlIGNhbiB1c2UgZm9sbG93aW5nKCkgb24gdGhlCisgICAgICAgIC8vIHBvc2l0aW9uIGJlZm9yZSB0aGUgc3BlY2lmaWVkIG9uZSBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIHBvc2l0aW9uIHdlCisgICAgICAgIC8vIGdldCBiYWNrIGlzIHRoZSBvbmUgdGhlIHVzZXIgc3BlY2lmaWVkCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZvbGxvd2luZyhvZmZzZXQgLSAxKSA9PSBvZmZzZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbi4KKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGN1cnJlbnQoKSB7CisgICAgICAgIHJldHVybiBnZXRUZXh0KCkuZ2V0SW5kZXgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDaGFyYWN0ZXJJdGVyYXRvciBvdmVyIHRoZSB0ZXh0IGJlaW5nIGFuYWx5emVkLiAgVGhpcyB2ZXJzaW9uCisgICAgICogb2YgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWN0dWFsIENoYXJhY3Rlckl0ZXJhdG9yIHdlJ3JlIHVzaW5nIGludGVybmFsbHkuCisgICAgICogQ2hhbmdpbmcgdGhlIHN0YXRlIG9mIHRoaXMgaXRlcmF0b3IgY2FuIGhhdmUgdW5kZWZpbmVkIGNvbnNlcXVlbmNlcy4gIElmCisgICAgICogeW91IG5lZWQgdG8gY2hhbmdlIGl0LCBjbG9uZSBpdCBmaXJzdC4KKyAgICAgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG92ZXIgdGhlIHRleHQgYmVpbmcgYW5hbHl6ZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIENoYXJhY3Rlckl0ZXJhdG9yIGdldFRleHQoKSB7CisgICAgICAgIC8vIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZCBwb2ludGluZyB0byBubyB0ZXh0IGF0IGFsbCwgc28gaWYgdGhpcworICAgICAgICAvLyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hpbGUgd2UncmUgaW4gdGhhdCBzdGF0ZSwgd2UgaGF2ZSB0byBmdWRnZSBhbgorICAgICAgICAvLyBhbiBpdGVyYXRvciB0byByZXR1cm4uCisgICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRleHQgPSBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoIiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgaXRlcmF0b3IgdG8gYW5hbHl6ZSBhIG5ldyBwaWVjZSBvZiB0ZXh0LiAgVGhpcyBmdW5jdGlvbiByZXNldHMKKyAgICAgKiB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dC4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCBBbiBpdGVyYXRvciBvdmVyIHRoZSB0ZXh0IHRvIGFuYWx5emUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGV4dChDaGFyYWN0ZXJJdGVyYXRvciBuZXdUZXh0KSB7CisgICAgICAgIC8vIFRlc3QgdGV4dCB0byBzZWUgaWYgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgU2FmZUNoYXJJdGVyYXRvcjoKKyAgICAgICAgaW50IGVuZCA9IG5ld1RleHQuZ2V0RW5kSW5kZXgoKTsKKyAgICAgICAgbmV3VGV4dC5zZXRJbmRleChlbmQpOworICAgICAgICBpZiAobmV3VGV4dC5nZXRJbmRleCgpICE9IGVuZCkgeworICAgICAgICAgICAgLy8gZmFpbGVkIC0gd3JhcCBpbiBjb3JyZWN0IGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICB0ZXh0ID0gbmV3IFNhZmVDaGFySXRlcmF0b3IobmV3VGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0ZXh0ID0gbmV3VGV4dDsKKyAgICAgICAgfQorICAgICAgICB0ZXh0LmZpcnN0KCk7CisgICAgfQorCisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gaW1wbGVtZW50YXRpb24KKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXh0KCkgbWV0aG9kLiAgQWxsIGl0ZXJhdGlvbgorICAgICAqIHZlY3RvcnMgdGhyb3VnaCBoZXJlLiAgVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIHN0YXRlIG1hY2hpbmUgdG8gc3RhdGUgMQorICAgICAqIGFuZCBhZHZhbmNlcyB0aHJvdWdoIHRoZSB0ZXh0IGNoYXJhY3RlciBieSBjaGFyYWN0ZXIgdW50aWwgd2UgcmVhY2ggdGhlIGVuZAorICAgICAqIG9mIHRoZSB0ZXh0IG9yIHRoZSBzdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb25zIHRvIHN0YXRlIDAuICBXZSB1cGRhdGUgb3VyIHJldHVybgorICAgICAqIHZhbHVlIGV2ZXJ5IHRpbWUgdGhlIHN0YXRlIG1hY2hpbmUgcGFzc2VzIHRocm91Z2ggYSBwb3NzaWJsZSBlbmQgc3RhdGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVOZXh0KCkgeworICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IGF0IHRoZSBlbmQgb2YgdGhlIHRleHQsIHJldHVybiBET05FLgorICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0ID0gZ2V0VGV4dCgpOworICAgICAgICBpZiAodGV4dC5nZXRJbmRleCgpID09IHRleHQuZ2V0RW5kSW5kZXgoKSkgeworICAgICAgICAgICAgcmV0dXJuIEJyZWFrSXRlcmF0b3IuRE9ORTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG5vIG1hdHRlciB3aGF0LCB3ZSBhbHdheXMgYWR2YW5jZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGZvcndhcmQKKyAgICAgICAgaW50IHJlc3VsdCA9IHRleHQuZ2V0SW5kZXgoKSArIDE7CisgICAgICAgIGludCBsb29rYWhlYWRSZXN1bHQgPSAwOworCisgICAgICAgIC8vIGJlZ2luIGluIHN0YXRlIDEKKyAgICAgICAgaW50IHN0YXRlID0gU1RBUlRfU1RBVEU7CisgICAgICAgIGludCBjYXRlZ29yeTsKKyAgICAgICAgY2hhciBjID0gdGV4dC5jdXJyZW50KCk7CisgICAgICAgIGNoYXIgbGFzdEMgPSBjOworICAgICAgICBpbnQgbGFzdENQb3MgPSAwOworCisgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhpcyBzZWdtZW50IGlzIGFuIGlnbm9yZSBjaGFyYWN0ZXIgKHdoaWNoIGNhbiBoYXBwZW4KKyAgICAgICAgLy8gd2hlbiBpdCdzIGVpdGhlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBmaWxlIG9yIGZvbGxvd3MgYSBtYW5kYXRvcnkgYnJlYWsKKyAgICAgICAgLy8gY2hhcmFjdGVyKSwgYW5kIHRoZSBmaXJzdCBub24taWdub3JlIGNoYXJhY3RlciBpc24ndCBhIGdsdWUgY2hhcmFjdGVyLCBhbHdheXMKKyAgICAgICAgLy8gcHV0IGEgYnJlYWsgYmV0d2VlbiB0aGUgaWdub3JlIGNoYXJhY3RlcnMgYW5kIHRoZSByZXN0IG9mIHRoZSB0ZXh0CisgICAgICAgIGlmIChsb29rdXBDYXRlZ29yeShjKSA9PSBJR05PUkUpIHsKKyAgICAgICAgICAgIHdoaWxlIChsb29rdXBDYXRlZ29yeShjKSA9PSBJR05PUkUpCisgICAgICAgICAgICAgICAgYyA9IHRleHQubmV4dCgpOworCisgICAgICAgICAgICBpZiAoQ2hhcmFjdGVyLmdldFR5cGUoYykgPT0gQ2hhcmFjdGVyLk5PTl9TUEFDSU5HX01BUksgfHwgQ2hhcmFjdGVyLmdldFR5cGUoYykKKyAgICAgICAgICAgICAgICAgICAgPT0gQ2hhcmFjdGVyLkVOQ0xPU0lOR19NQVJLKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGxvb3AgdW50aWwgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgdGV4dCBvciB0cmFuc2l0aW9uIHRvIHN0YXRlIDAKKyAgICAgICAgd2hpbGUgKGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSAmJiBzdGF0ZSAhPSBTVE9QX1NUQVRFKSB7CisKKyAgICAgICAgICAgIC8vIGxvb2sgdXAgdGhlIGN1cnJlbnQgY2hhcmFjdGVyJ3MgY2hhcmFjdGVyIGNhdGVnb3J5ICh3aGljaCB0ZWxscyB1cworICAgICAgICAgICAgLy8gd2hpY2ggY29sdW1uIGluIHRoZSBzdGF0ZSB0YWJsZSB0byBsb29rIGF0KQorICAgICAgICAgICAgY2F0ZWdvcnkgPSBsb29rdXBDYXRlZ29yeShjKTsKKworICAgICAgICAgICAgLy8gaWYgdGhlIGNoYXJhY3RlciBpc24ndCBhbiBpZ25vcmUgY2hhcmFjdGVyLCBsb29rIHVwIGEgc3RhdGUKKyAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaW4gdGhlIHN0YXRlIHRhYmxlCisgICAgICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gSUdOT1JFKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBsb29rdXBTdGF0ZShzdGF0ZSwgY2F0ZWdvcnkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpZiB0aGUgc3RhdGUgd2UndmUganVzdCB0cmFuc2l0aW9uZWQgdG8gaXMgYSBsb29rYWhlYWQgc3RhdGUsCisgICAgICAgICAgICAvLyAoYnV0IG5vdCBhbHNvIGFuIGVuZCBzdGF0ZSksIHNhdmUgaXRzIHBvc2l0aW9uLiAgSWYgaXQncworICAgICAgICAgICAgLy8gYm90aCBhIGxvb2thaGVhZCBzdGF0ZSBhbmQgYW4gZW5kIHN0YXRlLCB1cGRhdGUgdGhlIGJyZWFrIHBvc2l0aW9uCisgICAgICAgICAgICAvLyB0byB0aGUgbGFzdCBzYXZlZCBsb29rdXAtc3RhdGUgcG9zaXRpb24KKyAgICAgICAgICAgIGlmIChsb29rYWhlYWRTdGF0ZXNbc3RhdGVdKSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZFN0YXRlc1tzdGF0ZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvb2thaGVhZFJlc3VsdCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvb2thaGVhZFJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0SW5kZXgoKSArIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZFJlc3VsdCA9IHRleHQuZ2V0SW5kZXgoKSArIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGlmIHRoZSBzdGF0ZSB3ZSd2ZSBqdXN0IHRyYW5zaXRpb25lZCB0byBpcyBhbiBhY2NlcHRpbmcKKyAgICAgICAgICAgIC8vIHN0YXRlLCB1cGRhdGUgdGhlIGJyZWFrIHBvc2l0aW9uIHRvIGJlIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbgorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZFN0YXRlc1tzdGF0ZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGV4dC5nZXRJbmRleCgpICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgInJlYWwiIGNoYXJhY3RlciB3ZSBzYXcuICBJZiB0aGlzIGNoYXJhY3RlciBpc24ndCBhbgorICAgICAgICAgICAgLy8gaWdub3JlIGNoYXJhY3RlciwgdGFrZSBub3RlIG9mIGl0IGFuZCBpdHMgcG9zaXRpb24gaW4gdGhlIHRleHQKKyAgICAgICAgICAgIGlmIChjYXRlZ29yeSAhPSBJR05PUkUgJiYgc3RhdGUgIT0gU1RPUF9TVEFURSkgeworICAgICAgICAgICAgICAgIGxhc3RDID0gYzsKKyAgICAgICAgICAgICAgICBsYXN0Q1BvcyA9IHRleHQuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGMgPSB0ZXh0Lm5leHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHdlJ3ZlIHJ1biBvZmYgdGhlIGVuZCBvZiB0aGUgdGV4dCwgYW5kIHRoZSB2ZXJ5IGxhc3QgY2hhcmFjdGVyIHRvb2sgdXMgaW50bworICAgICAgICAvLyBhIGxvb2thaGVhZCBzdGF0ZSwgYWR2YW5jZSB0aGUgYnJlYWsgcG9zaXRpb24gdG8gdGhlIGxvb2thaGVhZCBwb3NpdGlvbgorICAgICAgICAvLyAodGhlIHRoZW9yeSBoZXJlIGlzIHRoYXQgaWYgdGhlcmUgYXJlIG5vIGNoYXJhY3RlcnMgYXQgYWxsIGFmdGVyIHRoZSBsb29rYWhlYWQKKyAgICAgICAgLy8gcG9zaXRpb24sIHRoYXQgYWx3YXlzIG1hdGNoZXMgdGhlIGxvb2thaGVhZCBjcml0ZXJpYSkKKyAgICAgICAgaWYgKGMgPT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSAmJiBsb29rYWhlYWRSZXN1bHQgPT0gdGV4dC5nZXRFbmRJbmRleCgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBsb29rYWhlYWRSZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2Ugc2F3IGJlZm9yZSB0aGUgb25lIHRoYXQgdG9vayB1cyBpbnRvIHRoZSBzdG9wIHN0YXRlCisgICAgICAgIC8vIHdhcyBhIG1hbmRhdG9yeSBicmVha2luZyBjaGFyYWN0ZXIsIHRoZW4gdGhlIGJyZWFrIHBvc2l0aW9uIGdvZXMgcmlnaHQgYWZ0ZXIgaXQKKyAgICAgICAgLy8gKHRoaXMgaXMgaGVyZSBzbyB0aGF0IGJyZWFrcyBjb21lIGJlZm9yZSwgcmF0aGVyIHRoYW4gYWZ0ZXIsIGEgc3RyaW5nIG9mCisgICAgICAgIC8vIGlnbm9yZSBjaGFyYWN0ZXJzIHdoZW4gdGhleSBmb2xsb3cgYSBtYW5kYXRvcnkgYnJlYWsgY2hhcmFjdGVyKQorICAgICAgICBlbHNlIGlmICgiXG5cclxmXHUyMDI4XHUyMDI5Ii5pbmRleE9mKGxhc3RDKSAhPSAtMSkgeworICAgICAgICAgICAgcmVzdWx0ID0gbGFzdENQb3MgKyAxOworICAgICAgICB9CisKKyAgICAgICAgdGV4dC5zZXRJbmRleChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGJhY2tzIHRoZSBpdGVyYXRvciBiYWNrIHVwIHRvIGEgInNhZmUgcG9zaXRpb24iIGluIHRoZSB0ZXh0LgorICAgICAqIFRoaXMgaXMgYSBwb3NpdGlvbiB0aGF0IHdlIGtub3csIHdpdGhvdXQgYW55IGNvbnRleHQsIG11c3QgYmUgYSBicmVhayBwb3NpdGlvbi4KKyAgICAgKiBUaGUgdmFyaW91cyBjYWxsaW5nIG1ldGhvZHMgdGhlbiBpdGVyYXRlIGZvcndhcmQgZnJvbSB0aGlzIHNhZmUgcG9zaXRpb24gdG8KKyAgICAgKiB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24gdG8gcmV0dXJuLiAgKEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGRlc2NyaXB0aW9uCisgICAgICogb2YgYnVpbGRCYWNrd2FyZHNTdGF0ZVRhYmxlKCkgaW4gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5CdWlsZGVyLikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZVByZXZpb3VzKCkgeworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0ID0gZ2V0VGV4dCgpOworICAgICAgICBpbnQgc3RhdGUgPSBTVEFSVF9TVEFURTsKKyAgICAgICAgaW50IGNhdGVnb3J5ID0gMDsKKyAgICAgICAgaW50IGxhc3RDYXRlZ29yeSA9IDA7CisgICAgICAgIGNoYXIgYyA9IHRleHQuY3VycmVudCgpOworCisgICAgICAgIC8vIGxvb3AgdW50aWwgd2UgcmVhY2ggdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCBvciB0cmFuc2l0aW9uIHRvIHN0YXRlIDAKKyAgICAgICAgd2hpbGUgKGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSAmJiBzdGF0ZSAhPSBTVE9QX1NUQVRFKSB7CisvL1N5c3RlbS5vdXQucHJpbnQoIiAiICsgdGV4dC5nZXRJbmRleCgpKTsKKworICAgICAgICAgICAgLy8gc2F2ZSB0aGUgbGFzdCBjaGFyYWN0ZXIncyBjYXRlZ29yeSBhbmQgbG9vayB1cCB0aGUgY3VycmVudAorICAgICAgICAgICAgLy8gY2hhcmFjdGVyJ3MgY2F0ZWdvcnkKKyAgICAgICAgICAgIGxhc3RDYXRlZ29yeSA9IGNhdGVnb3J5OworICAgICAgICAgICAgY2F0ZWdvcnkgPSBsb29rdXBDYXRlZ29yeShjKTsKKworICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzbid0IGFuIGlnbm9yZSBjaGFyYWN0ZXIsIGxvb2sgdXAgYQorICAgICAgICAgICAgLy8gc3RhdGUgdHJhbnNpdGlvbiBpbiB0aGUgYmFja3dhcmRzIHN0YXRlIHRhYmxlCisgICAgICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gSUdOT1JFKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBsb29rdXBCYWNrd2FyZFN0YXRlKHN0YXRlLCBjYXRlZ29yeSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRoZW4gYWR2YW5jZSBvbmUgY2hhcmFjdGVyIGJhY2t3YXJkcworICAgICAgICAgICAgYyA9IHRleHQucHJldmlvdXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBtYXJjaCBvZmYgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCwgd2UncmUgZWl0aGVyIG9uZSBvciB0d28KKyAgICAgICAgLy8gcG9zaXRpb25zIGF3YXkgZnJvbSB0aGUgcmVhbCBicmVhayBwb3NpdGlvbi4gIChPbmUgYmVjYXVzZSBvZiB0aGUgY2FsbCB0bworICAgICAgICAvLyBwcmV2aW91cygpIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYWJvdmUsIGFuZCBhbm90aGVyIGJlY2F1c2UgdGhlIGNoYXJhY3RlcgorICAgICAgICAvLyB0aGF0IHRha2VzIHVzIGludG8gdGhlIHN0b3Agc3RhdGUgd2lsbCBhbHdheXMgYmUgdGhlIGNoYXJhY3RlciBCRUZPUkUKKyAgICAgICAgLy8gdGhlIGJyZWFrIHBvc2l0aW9uLikKKyAgICAgICAgaWYgKGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgaWYgKGxhc3RDYXRlZ29yeSAhPSBJR05PUkUpIHsKKyAgICAgICAgICAgICAgICB0ZXh0LnNldEluZGV4KHRleHQuZ2V0SW5kZXgoKSArIDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4dC5uZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKy8vU3lzdGVtLm91dC5wcmludCgiLCIpOworICAgICAgICByZXR1cm4gdGV4dC5nZXRJbmRleCgpOworICAgIH0KKworLy9zdGF0aWMgaW50IHZpc2l0ZWRDaGFycyA9IDA7CisgICAgLyoqCisgICAgICogTG9va3MgdXAgYSBjaGFyYWN0ZXIncyBjYXRlZ29yeSAoaS5lLiwgaXRzIGNhdGVnb3J5IGZvciBicmVha2luZyBwdXJwb3NlcywKKyAgICAgKiBub3QgaXRzIFVuaWNvZGUgY2F0ZWdvcnkpCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBsb29rdXBDYXRlZ29yeShjaGFyIGMpIHsKKy8vKyt2aXNpdGVkQ2hhcnM7CisgICAgICAgIHJldHVybiBjaGFyQ2F0ZWdvcnlUYWJsZS5lbGVtZW50QXQoYyk7CisgICAgfQorCisvKgorc3RhdGljIHZvaWQgcHJpbnRWaXNpdGVkQ2hhckNvdW50KCkgeworU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBudW1iZXIgb2YgY2hhcmFjdGVycyB2aXNpdGVkID0gIiArIHZpc2l0ZWRDaGFycyk7Cit2aXNpdGVkQ2hhcnMgPSAwOworfQorKi8KKworICAgIC8qKgorICAgICAqIEdpdmVuIGEgY3VycmVudCBzdGF0ZSBhbmQgYSBjaGFyYWN0ZXIgY2F0ZWdvcnksIGxvb2tzIHVwIHRoZQorICAgICAqIG5leHQgc3RhdGUgdG8gdHJhbnNpdGlvbiB0byBpbiB0aGUgc3RhdGUgdGFibGUuCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBsb29rdXBTdGF0ZShpbnQgc3RhdGUsIGludCBjYXRlZ29yeSkgeworICAgICAgICByZXR1cm4gc3RhdGVUYWJsZVtzdGF0ZSAqIG51bUNhdGVnb3JpZXMgKyBjYXRlZ29yeV07CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBjdXJyZW50IHN0YXRlIGFuZCBhIGNoYXJhY3RlciBjYXRlZ29yeSwgbG9va3MgdXAgdGhlCisgICAgICogbmV4dCBzdGF0ZSB0byB0cmFuc2l0aW9uIHRvIGluIHRoZSBiYWNrd2FyZHMgc3RhdGUgdGFibGUuCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBsb29rdXBCYWNrd2FyZFN0YXRlKGludCBzdGF0ZSwgaW50IGNhdGVnb3J5KSB7CisgICAgICAgIHJldHVybiBiYWNrd2FyZHNTdGF0ZVRhYmxlW3N0YXRlICogbnVtQ2F0ZWdvcmllcyArIGNhdGVnb3J5XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBjb21wdXRpbmcgdGhlIGludGVyc2VjdGlvbiBvZgorICAgICAqIHR3byA8Y29kZT5Vbmljb2RlU2V0PC9jb2RlPiBvYmplY3RzLgorICAgICAqIEBwYXJhbSBhLCBiIHRoZSB0d28gPGNvZGU+VW5pY29kZVNldDwvY29kZT5zIHRvIGludGVyc2VjdAorICAgICAqIEByZXR1cm4gYSBuZXcgPGNvZGU+VW5pY29kZVNldDwvY29kZT4gd2hpY2ggaXMgdGhlIGludGVyc2VjdGlvbiBvZiBhIGFuZCBiCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgVW5pY29kZVNldCBpbnRlcnNlY3Rpb24oVW5pY29kZVNldCBhLCBVbmljb2RlU2V0IGIpCisgICAgeworICAgICAgICBVbmljb2RlU2V0IHJlc3VsdCA9IG5ldyBVbmljb2RlU2V0KGEpOworCisgICAgICAgIHJlc3VsdC5yZXRhaW5BbGwoYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5CdWlsZGVyCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8qKgorICAgICAqIFRoZSBCdWlsZGVyIGNsYXNzIGhhcyB0aGUgam9iIG9mIGNvbnN0cnVjdGluZyBhIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgZnJvbSBhCisgICAgICogdGV4dHVhbCBkZXNjcmlwdGlvbi4gIEEgQnVpbGRlciBpcyBjb25zdHJ1Y3RlZCBieSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yJ3MKKyAgICAgKiBjb25zdHJ1Y3Rvciwgd2hpY2ggdXNlcyBpdCB0byBjb25zdHJ1Y3QgdGhlIGl0ZXJhdG9yIGl0c2VsZiBhbmQgdGhlbiB0aHJvd3MgaXQKKyAgICAgKiBhd2F5LgorICAgICAqIDxwPlRoZSBjb25zdHJ1Y3Rpb24gbG9naWMgaXMgc2VwYXJhdGVkIG91dCBpbnRvIGl0cyBvd24gY2xhc3MgZm9yIHR3byBwcmltYXJ5CisgICAgICogcmVhc29uczoKKyAgICAgKiA8dWw+PGxpPlRoZSBjb25zdHJ1Y3Rpb24gbG9naWMgaXMgcXVpdGUgc29waGlzdGljYXRlZCBhbmQgbGFyZ2UuICBTZXBhcmF0aW5nIGl0CisgICAgICogb3V0IGludG8gaXRzIG93biBjbGFzcyBtZWFucyB0aGUgY29kZSBtdXN0IG9ubHkgYmUgbG9hZGVkIGludG8gbWVtb3J5IHdoaWxlIGEKKyAgICAgKiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGlzIGJlaW5nIGNvbnN0cnVjdGVkLCBhbmQgY2FuIGJlIHB1cmdlZCBhZnRlciB0aGF0LgorICAgICAqIDxsaT5UaGVyZSBpcyBhIGZhaXIgYW1vdW50IG9mIHN0YXRlIHRoYXQgbXVzdCBiZSBtYWludGFpbmVkIHRocm91Z2hvdXQgdGhlCisgICAgICogY29uc3RydWN0aW9uIHByb2Nlc3MgdGhhdCBpcyBub3QgbmVlZGVkIGJ5IHRoZSBpdGVyYXRvciBhZnRlciBjb25zdHJ1Y3Rpb24uCisgICAgICogU2VwYXJhdGluZyB0aGlzIHN0YXRlIG91dCBpbnRvIGFub3RoZXIgY2xhc3MgcHJldmVudHMgYWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdAorICAgICAqIGNvbnN0cnVjdCB0aGUgaXRlcmF0b3IgZnJvbSBoYXZpbmcgdG8gaGF2ZSByZWFsbHkgbG9uZyBwYXJhbWV0ZXIgbGlzdHMsCisgICAgICogKGhvcGVmdWxseSkgY29udHJpYnV0aW5nIHRvIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkuPC91bD4KKyAgICAgKiA8cD5JdCdkIGJlIHJlYWxseSBuaWNlIGlmIHRoaXMgY291bGQgYmUgYW4gaW5kZXBlbmRlbnQgY2xhc3MgcmF0aGVyIHRoYW4gYW4KKyAgICAgKiBpbm5lciBjbGFzcywgYmVjYXVzZSB0aGF0IHdvdWxkIHNob3J0ZW4gdGhlIHNvdXJjZSBmaWxlIGNvbnNpZGVyYWJseSwgYnV0CisgICAgICogbWFraW5nIEJ1aWxkZXIgYW4gaW5uZXIgY2xhc3Mgb2YgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBhbGxvd3MgaXQgZGlyZWN0IGFjY2VzcworICAgICAqIHRvIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IncyBwcml2YXRlIG1lbWJlcnMsIHdoaWNoIHNhdmVzIHVzIGZyb20gaGF2aW5nIHRvCisgICAgICogcHJvdmlkZSBzb21lIGtpbmQgb2YgImJhY2sgZG9vciIgdG8gdGhlIEJ1aWxkZXIgY2xhc3MgdGhhdCBjb3VsZCB0aGVuIGFsc28gYmUKKyAgICAgKiB1c2VkIGJ5IG90aGVyIGNsYXNzZXMuCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgcHJvdGVjdGVkIGNsYXNzIEJ1aWxkZXIgeworICAgICAgICAvKioKKyAgICAgICAgICogQSB0ZW1wb3JhcnkgaG9sZGluZyBwbGFjZSB1c2VkIGZvciBjYWxjdWxhdGluZyB0aGUgY2hhcmFjdGVyIGNhdGVnb3JpZXMuCisgICAgICAgICAqIFRoaXMgb2JqZWN0IGNvbnRhaW5zIFVuaWNvZGVTZXQgb2JqZWN0cy4KKyAgICAgICAgICogQGludGVybmFsCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgVmVjdG9yIGNhdGVnb3JpZXMgPSBudWxsOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBIHRhYmxlIHVzZWQgdG8gbWFwIHBhcnRzIG9mIHJlZ2V4cCB0ZXh0IHRvIGxpc3RzIG9mIGNoYXJhY3RlciBjYXRlZ29yaWVzLAorICAgICAgICAgKiByYXRoZXIgdGhhbiBoYXZpbmcgdG8gZmlndXJlIHRoZW0gb3V0IGZyb20gc2NyYXRjaCBlYWNoIHRpbWUKKyAgICAgICAgICogQGludGVybmFsCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGV4cHJlc3Npb25zID0gbnVsbDsKKworICAgICAgICAvKioKKyAgICAgICAgICogQSB0ZW1wb3JhcnkgaG9sZGluZyBwbGFjZSBmb3IgdGhlIGxpc3Qgb2YgaWdub3JlIGNoYXJhY3RlcnMKKyAgICAgICAgICogQGludGVybmFsCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgVW5pY29kZVNldCBpZ25vcmVDaGFycyA9IG51bGw7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgdGVtcG9yYXJ5IGhvbGRpbmcgcGxhY2Ugd2hlcmUgdGhlIGZvcndhcmQgc3RhdGUgdGFibGUgaXMgYnVpbHQKKyAgICAgICAgICogQGludGVybmFsCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgVmVjdG9yIHRlbXBTdGF0ZVRhYmxlID0gbnVsbDsKKworICAgICAgICAvKioKKyAgICAgICAgICogQSBsaXN0IG9mIGFsbCB0aGUgc3RhdGVzIHRoYXQgaGF2ZSB0byBiZSBmaWxsZWQgaW4gd2l0aCB0cmFuc2l0aW9ucyB0byB0aGUKKyAgICAgICAgICogbmV4dCBzdGF0ZSB0aGF0IGlzIGNyZWF0ZWQuICBVc2VkIHdoZW4gYnVpbGRpbmcgdGhlIHN0YXRlIHRhYmxlIGZyb20gdGhlCisgICAgICAgICAqIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisgICAgICAgICAqIEBpbnRlcm5hbAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIFZlY3RvciBkZWNpc2lvblBvaW50TGlzdCA9IG51bGw7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgc3RhY2sgZm9yIGhvbGRpbmcgZGVjaXNpb24gcG9pbnQgbGlzdHMuICBUaGlzIGlzIHVzZWQgdG8gaGFuZGxlIG5lc3RlZAorICAgICAgICAgKiBwYXJlbnRoZXNlcyBhbmQgYnJhY2VzIGluIHJlZ2V4cHMuCisgICAgICAgICAqIEBpbnRlcm5hbAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIFN0YWNrIGRlY2lzaW9uUG9pbnRTdGFjayA9IG51bGw7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgbGlzdCBvZiBzdGF0ZXMgdGhhdCBsb29wIGJhY2sgb24gdGhlbXNlbHZlcy4gIFVzZWQgdG8gaGFuZGxlIC4qPworICAgICAgICAgKiBAaW50ZXJuYWwKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBWZWN0b3IgbG9vcGluZ1N0YXRlcyA9IG51bGw7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIExvb3Bpbmcgc3RhdGVzIGFjdHVhbGx5IGhhdmUgdG8gYmUgYmFja2ZpbGxlZCBsYXRlciBpbiB0aGUgcHJvY2VzcworICAgICAgICAgKiB0aGFuIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgaXMgd2hlcmUgYSB0aGUgbGlzdCBvZiBzdGF0ZXMgdG8gYmFja2ZpbGwKKyAgICAgICAgICogaXMgYWNjdW11bGF0ZWQuICBUaGlzIGlzIGFsc28gdXNlZCB0byBoYW5kbGUgLio/CisgICAgICAgICAqIEBpbnRlcm5hbAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIFZlY3RvciBzdGF0ZXNUb0JhY2tmaWxsID0gbnVsbDsKKworICAgICAgICAvKioKKyAgICAgICAgICogQSBsaXN0IG1hcHBpbmcgcGFpcnMgb2Ygc3RhdGUgbnVtYmVycyBmb3Igc3RhdGVzIHRoYXQgYXJlIHRvIGJlIGNvbWJpbmVkCisgICAgICAgICAqIHRvIHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIHN0YXRlIHJlcHJlc2VudGluZyB0aGVpciBjb21iaW5hdGlvbi4gIFVzZWQKKyAgICAgICAgICogaW4gdGhlIHByb2Nlc3Mgb2YgbWFraW5nIHRoZSBzdGF0ZSB0YWJsZSBkZXRlcm1pbmlzdGljIHRvIHByZXZlbnQKKyAgICAgICAgICogaW5maW5pdGUgcmVjdXJzaW9uLgorICAgICAgICAgKiBAaW50ZXJuYWwKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBWZWN0b3IgbWVyZ2VMaXN0ID0gbnVsbDsKKworICAgICAgICAvKioKKyAgICAgICAgICogQSBmbGFnIHRoYXQgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGVuIHRoZSBsaXN0IG9mIGxvb3Bpbmcgc3RhdGVzIGNhbgorICAgICAgICAgKiBiZSByZXNldC4KKyAgICAgICAgICogQGludGVybmFsCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjbGVhckxvb3BpbmdTdGF0ZXMgPSBmYWxzZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQSBiaXQgbWFzayB1c2VkIHRvIGluZGljYXRlIGEgYml0IGluIHRoZSB0YWJsZSdzIGZsYWdzIGNvbHVtbiB0aGF0IG1hcmtzIGEKKyAgICAgICAgICogc3RhdGUgYXMgYW4gYWNjZXB0aW5nIHN0YXRlLgorICAgICAgICAgKiBAaW50ZXJuYWwKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEVORF9TVEFURV9GTEFHID0gMHg4MDAwOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBIGJpdCBtYXNrIHVzZWQgdG8gaW5kaWNhdGUgYSBiaXQgaW4gdGhlIHRhYmxlJ3MgZmxhZ3MgY29sdW1uIHRoYXQgbWFya3MgYQorICAgICAgICAgKiBzdGF0ZSBhcyBvbmUgdGhlIGJ1aWxkZXIgc2hvdWxkbid0IGxvb3AgdG8gYW55IGxvb3Bpbmcgc3RhdGVzCisgICAgICAgICAqIEBpbnRlcm5hbAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgRE9OVF9MT09QX0ZMQUcgPSAweDQwMDA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgYml0IG1hc2sgdXNlZCB0byBpbmRpY2F0ZSBhIGJpdCBpbiB0aGUgdGFibGUncyBmbGFncyBjb2x1bW4gdGhhdCBtYXJrcyBhCisgICAgICAgICAqIHN0YXRlIGFzIGEgbG9va2FoZWFkIHN0YXRlLgorICAgICAgICAgKiBAaW50ZXJuYWwKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IExPT0tBSEVBRF9TVEFURV9GTEFHID0gMHgyMDAwOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBIGJpdCBtYXNrIHJlcHJlc2VudGluZyB0aGUgdW5pb24gb2YgdGhlIG1hc2sgdmFsdWVzIGxpc3RlZCBhYm92ZS4KKyAgICAgICAgICogVXNlZCBmb3IgY2xlYXJpbmcgb3IgbWFza2luZyBvZmYgdGhlIGZsYWcgYml0cy4KKyAgICAgICAgICogQGludGVybmFsCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBBTExfRkxBR1MgPSBFTkRfU1RBVEVfRkxBRyB8IExPT0tBSEVBRF9TVEFURV9GTEFHCisgICAgICAgICAgICAgICAgfCBET05UX0xPT1BfRkxBRzsKKworICAgICAgICAvKioKKyAgICAgICAgICogTm8gc3BlY2lhbCBjb25zdHJ1Y3Rpb24gaXMgcmVxdWlyZWQgZm9yIHRoZSBCdWlsZGVyLgorICAgICAgICAgKiBAaW50ZXJuYWwKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKCkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgdGhlIEJyZWFrSXRlcmF0b3IncyB0YWJsZXMuICBJdAorICAgICAgICAgKiBqdXN0IHZlY3RvcnMgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBqb2Igb2ZmIHRvIG90aGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgICogQGludGVybmFsCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBidWlsZEJyZWFrSXRlcmF0b3IoKSB7CisgICAgICAgICAgICBWZWN0b3IgdGVtcFJ1bGVMaXN0ID0gYnVpbGRSdWxlTGlzdChkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBidWlsZENoYXJDYXRlZ29yaWVzKHRlbXBSdWxlTGlzdCk7CisgICAgICAgICAgICBidWlsZFN0YXRlVGFibGUodGVtcFJ1bGVMaXN0KTsKKyAgICAgICAgICAgIGJ1aWxkQmFja3dhcmRzU3RhdGVUYWJsZSh0ZW1wUnVsZUxpc3QpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRodXMgZnVuY3Rpb24gaGFzIHRocmVlIG1haW4gcHVycG9zZXM6CisgICAgICAgICAqIDx1bD48bGk+UGVyZm9ybSBnZW5lcmFsIHN5bnRheCBjaGVja2luZyBvbiB0aGUgZGVzY3JpcHRpb24sIHNvIHRoZSByZXN0IG9mIHRoZQorICAgICAgICAgKiBidWlsZCBjb2RlIGNhbiBhc3N1bWUgdGhhdCBpdCdzIHBhcnNpbmcgYSBsZWdhbCBkZXNjcmlwdGlvbi4KKyAgICAgICAgICogPGxpPlNwbGl0IHRoZSBkZXNjcmlwdGlvbiBpbnRvIHNlcGFyYXRlIHJ1bGVzCisgICAgICAgICAqIDxsaT5QZXJmb3JtIHZhcmlhYmxlLW5hbWUgc3Vic3RpdHV0aW9ucyAoc28gdGhhdCBubyBvbmUgZWxzZSBzZWVzIHZhcmlhYmxlIG5hbWVzKQorICAgICAgICAgKiA8L3VsPgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBWZWN0b3IgYnVpbGRSdWxlTGlzdChTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIC8vIGludmFyaWFudHM6CisgICAgICAgICAgICAvLyAtIHBhcmVudGhlc2VzIG11c3QgYmUgYmFsYW5jZWQ6ICgpW117fTw+CisgICAgICAgICAgICAvLyAtIG5vdGhpbmcgY2FuIGJlIG5lc3RlZCBpbnNpZGUge30KKyAgICAgICAgICAgIC8vIC0gbm90aGluZyBjYW4gYmUgbmVzdGVkIGluc2lkZSBbXSBleGNlcHQgbW9yZSBbXXMKKyAgICAgICAgICAgIC8vIC0gcGFpcnMgb2YgKClbXXt9PD4gbXVzdCBub3QgYmUgZW1wdHkKKyAgICAgICAgICAgIC8vIC0gOyBjYW4gb25seSBvY2N1ciBhdCB0aGUgb3V0ZXIgbGV2ZWwKKyAgICAgICAgICAgIC8vIC0gfCBjYW4gb25seSBhcHBlYXIgaW5zaWRlICgpCisgICAgICAgICAgICAvLyAtIG9ubHkgb25lID0gb3IgLyBjYW4gb2NjdXIgaW4gYSBzaW5nbGUgcnVsZQorICAgICAgICAgICAgLy8gLSA9IGFuZCAvIGNhbm5vdCBib3RoIG9jY3VyIGluIHRoZSBzYW1lIHJ1bGUKKyAgICAgICAgICAgIC8vIC0gdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiBhID0gZXhwcmVzc2lvbiBtdXN0IGJlIGVuY2xvc2VkIGluIFtdIG9yICgpCisgICAgICAgICAgICAvLyAtICogbWF5IG5vdCBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcnVsZSwgbm9yIG1heSBpdCBmb2xsb3cKKyAgICAgICAgICAgIC8vICAgPSwgLywgKCwgKCwgfCwgfSwgOywgb3IgKgorICAgICAgICAgICAgLy8gLSA/IG1heSBvbmx5IGZvbGxvdyAqCisgICAgICAgICAgICAvLyAtIHRoZSBydWxlIGxpc3QgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSAvIHJ1bGUKKyAgICAgICAgICAgIC8vIC0gbm8gcnVsZSBtYXkgYmUgZW1wdHkKKyAgICAgICAgICAgIC8vIC0gYWxsIHByaW50aW5nIGNoYXJhY3RlcnMgaW4gdGhlIEFTQ0lJIHJhbmdlIGV4Y2VwdCBsZXR0ZXJzIGFuZCBkaWdpdHMKKyAgICAgICAgICAgIC8vICAgYXJlIHJlc2VydmVkIGFuZCBtdXN0IGJlIHByZWNlZGVkIGJ5IFwKKyAgICAgICAgICAgIC8vIC0gISBtYXkgb25seSBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcnVsZQorCisgICAgICAgICAgICAvLyBzZXQgdXAgYSB2ZWN0b3IgdG8gY29udGFpbiB0aGUgYnJva2VuLXVwIGRlc2NyaXB0aW9uIChlYWNoIGVudHJ5IGluIHRoZQorICAgICAgICAgICAgLy8gdmVjdG9yIGlzIGEgc2VwYXJhdGUgcnVsZSkgYW5kIGEgc3RhY2sgZm9yIGtlZXBpbmcgdHJhY2sgb2Ygb3BlbmluZworICAgICAgICAgICAgLy8gcHVuY3R1YXRpb24KKyAgICAgICAgICAgIFZlY3RvciB0ZW1wUnVsZUxpc3QgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICBTdGFjayBwYXJlblN0YWNrID0gbmV3IFN0YWNrKCk7CisKKyAgICAgICAgICAgIGludCBwID0gMDsKKyAgICAgICAgICAgIGludCBydWxlU3RhcnQgPSAwOworICAgICAgICAgICAgY2hhciBjID0gJ1x1MDAwMCc7CisgICAgICAgICAgICBjaGFyIGxhc3RDID0gJ1x1MDAwMCc7CisgICAgICAgICAgICBjaGFyIGxhc3RPcGVuID0gJ1x1MDAwMCc7CisgICAgICAgICAgICBib29sZWFuIGhhdmVFcXVhbHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2xlYW4gaGF2ZVBpcGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2xlYW4gc2F3VmFyTmFtZSA9IGZhbHNlOworICAgICAgICAgICAgYm9vbGVhbiBzYXdJbGxlZ2FsQ2hhciA9IGZhbHNlOworICAgICAgICAgICAgaW50IGlsbGVnYWxDaGFyUG9zID0gMDsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjaGFyc1RoYXRDYW50UHJlY2VkZUFzdGVyaXNrID0gIj0vPCh8PiorPztcdTAwMDAiOworCisgICAgICAgICAgICAvLyBpZiB0aGUgZGVzY3JpcHRpb24gZG9lc24ndCBlbmQgd2l0aCBhIHNlbWljb2xvbiwgdGFjayBhIHNlbWljb2xvbiBvbnRvIHRoZSBlbmQKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGgoKSAhPSAwICYmIGRlc2NyaXB0aW9uLmNoYXJBdChkZXNjcmlwdGlvbi5sZW5ndGgoKSAtIDEpICE9ICc7JykgeworICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gKyAiOyI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGZvciBlYWNoIGNoYXJhY3RlciwgZG8uLi4KKyAgICAgICAgICAgIHdoaWxlIChwIDwgZGVzY3JpcHRpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBjID0gZGVzY3JpcHRpb24uY2hhckF0KHApOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2hhcmFjdGVyIGlzIG9wZW5pbmcgcHVuY3R1YXRpb24sIHZlcmlmeSB0aGF0IG5vIG5lc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gcnVsZXMgYXJlIGJyb2tlbiwgYW5kIHB1c2ggdGhlIGNoYXJhY3RlciBvbnRvIHRoZSBzdGFjaworICAgICAgICAgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RPcGVuID09ICd7JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJDYW4ndCBuZXN0IGJyYWNrZXRzIGluc2lkZSB7fSIsIHAsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0T3BlbiA9PSAnWycgJiYgYyAhPSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcigiQ2FuJ3QgbmVzdCBhbnl0aGluZyBpbiBbXSBidXQgW10iLCBwLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIHNlZSB7IGFueXdoZXJlIGV4Y2VwdCBvbiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgPSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG11c3QgYmUgc2VlaW5nIGEgdmFyaWFibGUgbmFtZSB0aGF0IHdhcyBuZXZlciBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAneycgJiYgKGhhdmVFcXVhbHMgfHwgaGF2ZVBpcGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIlVua25vd24gdmFyaWFibGUgbmFtZSIsIHAsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE9wZW4gPSBjOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW5TdGFjay5wdXNoKG5ldyBDaGFyYWN0ZXIoYykpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3VmFyTmFtZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2hhcmFjdGVyIGlzIGNsb3NpbmcgcHVuY3R1YXRpb24sIHZlcmlmeSB0aGF0IGl0IG1hdGNoZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGxhc3Qgb3BlbmluZyBwdW5jdHVhdGlvbiB3ZSBzYXcsIGFuZCB0aGF0IHRoZSBicmFja2V0cyBjb250YWluCisgICAgICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZywgdGhlbiBwb3AgdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ30nOgorICAgICAgICAgICAgICAgICAgICBjYXNlICddJzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnKSc6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGV4cGVjdGVkQ2xvc2UgPSAnXHUwMDAwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobGFzdE9wZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRDbG9zZSA9ICd9JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ2xvc2UgPSAnXSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZENsb3NlID0gJyknOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9IGV4cGVjdGVkQ2xvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcigiVW5iYWxhbmNlZCBwYXJlbnRoZXNlcyIsIHAsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0QyA9PSBsYXN0T3BlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJQYXJlbnMgZG9uJ3QgY29udGFpbiBhbnl0aGluZyIsIHAsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVuU3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVuU3RhY2suZW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RPcGVuID0gKChDaGFyYWN0ZXIpKHBhcmVuU3RhY2sucGVlaygpKSkuY2hhclZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0T3BlbiA9ICdcdTAwMDAnOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2hhcmFjdGVyIGlzIGFuIGFzdGVyaXNrLCBtYWtlIHN1cmUgaXQgb2NjdXJzIGluIGEgcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYW4gYXN0ZXJpc2sgY2FuIGxlZ2FsbHkgZ28KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnKic6IGNhc2UgJysnOiBjYXNlICc/JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc1RoYXRDYW50UHJlY2VkZUFzdGVyaXNrLmluZGV4T2YobGFzdEMpICE9IC0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChjICE9ICc/JyB8fCBsYXN0QyAhPSAnKicpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIk1pc3BsYWNlZCAqLCArLCBvciA/IiwgcCwgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGNoYXJhY3RlciBpcyBhbiBlcXVhbHMgc2lnbiwgbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgc2VlbiBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgIC8vIGVxdWFscyBzaWduIG9yIGEgc2xhc2ggeWV0CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmVFcXVhbHMgfHwgaGF2ZVBpcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcigiTW9yZSB0aGFuIG9uZSA9IG9yIC8gaW4gcnVsZSIsIHAsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVFcXVhbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgc2F3SWxsZWdhbENoYXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBzbGFzaCwgbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgc2VlbiBhbm90aGVyIHNsYXNoCisgICAgICAgICAgICAgICAgICAgIC8vIG9yIGFuIGVxdWFscyBzaWduIHlldAorICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlRXF1YWxzIHx8IGhhdmVQaXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIk1vcmUgdGhhbiBvbmUgPSBvciAvIGluIHJ1bGUiLCBwLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2F3VmFyTmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJVbmtub3duIHZhcmlhYmxlIG5hbWUiLCBwLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlUGlwZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2hhcmFjdGVyIGlzIGFuIGV4Y2xhbWF0aW9uIHBvaW50LCBtYWtlIHN1cmUgaXQgb2NjdXJzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJ1bGUKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEMgIT0gJzsnICYmIGxhc3RDICE9ICdcdTAwMDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIiEgY2FuIG9ubHkgb2NjdXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJ1bGUiLCBwLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2hhcmFjdGVyIGlzIGEgYmFja3NsYXNoLCBza2lwIHRoZSBjaGFyYWN0ZXIgdGhhdCBmb2xsb3dzIGl0CisgICAgICAgICAgICAgICAgICAgIC8vIChpdCdsbCBnZXQgdHJlYXRlZCBhcyBhIGxpdGVyYWwgY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgb24gYSBwZXJpb2QKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2hhcmFjdGVyIGlzIGEgc3ludGF4IGNoYXJhY3RlciB0aGF0IGNhbiBvbmx5IG9jY3VyCisgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBbXSwgbWFrZSBzdXJlIHRoYXQgaXQgZG9lcyBpbiBmYWN0IG9ubHkgb2NjdXIgaW5zaWRlIFtdCisgICAgICAgICAgICAgICAgICAgIC8vIChvciBpbiBhIHZhcmlhYmxlIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ14nOgorICAgICAgICAgICAgICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJyYnOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RPcGVuICE9ICdbJyAmJiBsYXN0T3BlbiAhPSAneycgJiYgIXNhd0lsbGVnYWxDaGFyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3SWxsZWdhbENoYXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlsbGVnYWxDaGFyUG9zID0gcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBzZW1pY29sb24sIGRvIHRoZSBmb2xsb3dpbmcuLi4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnOyc6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBzYXcgYW55IGlsbGVnYWwgY2hhcmFjdGVycyBhbG9uZyB0aGUgd2F5LCB0aHJvdworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW4gZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYXdJbGxlZ2FsQ2hhcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJJbGxlZ2FsIGNoYXJhY3RlciIsIGlsbGVnYWxDaGFyUG9zLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgcnVsZSBjb250YWlucyBzb21ldGhpbmcgYW5kIHRoYXQgdGhlcmUgYXJlIG5vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmJhbGFuY2VkIHBhcmVudGhlc2VzIG9yIGJyYWNrZXRzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEMgPT0gJzsnIHx8IGxhc3RDID09ICdcdTAwMDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIkVtcHR5IHJ1bGUiLCBwLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVuU3RhY2suZW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJVbmJhbGFuY2VkIHBhcmVuaGVzZXMiLCBwLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlblN0YWNrLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcnVsZSBjb250YWluZWQgYW4gPSBzaWduLCBjYWxsIHByb2Nlc3NTdWJzdGl0dXRpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHJlcGxhY2UgdGhlIHN1YnN0aXR1dGlvbiBuYW1lIHdpdGggdGhlIHN1YnN0aXR1dGlvbiB0ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmV2ZXIgaXQgYXBwZWFycyBpbiB0aGUgZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZUVxdWFscykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHByb2Nlc3NTdWJzdGl0dXRpb24oZGVzY3JpcHRpb24uc3Vic3RyaW5nKHJ1bGVTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHApLCBkZXNjcmlwdGlvbiwgcCArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHJ1bGUgZG9lc24ndCByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IHVuZGVmaW5lZCBzdWJzdGl0dXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYXdWYXJOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcigiVW5rbm93biB2YXJpYWJsZSBuYW1lIiwgcCwgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBhZGQgaXQgdG8gdGVtcFJ1bGVMaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSdWxlTGlzdC5hZGRFbGVtZW50KGRlc2NyaXB0aW9uLnN1YnN0cmluZyhydWxlU3RhcnQsIHApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcmVzZXQgZXZlcnl0aGluZyB0byBwcm9jZXNzIHRoZSBuZXh0IHJ1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlU3RhcnQgPSBwICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlRXF1YWxzID0gaGF2ZVBpcGUgPSBzYXdWYXJOYW1lID0gc2F3SWxsZWdhbENoYXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSB2ZXJ0aWNhbCBiYXIsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgIC8vIG9jY3VycyBpbnNpZGUgYSAoKSBleHByZXNzaW9uIGFuZCB0aGF0IHRoZSBjaGFyYWN0ZXIgdGhhdCBwcmVjZWRlcworICAgICAgICAgICAgICAgICAgICAvLyBpdCBpc24ndCBhbHNvIGEgdmVydGljYWwgYmFyCisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDID09ICd8JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJFbXB0eSBhbHRlcm5hdGl2ZSIsIHAsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlblN0YWNrLmVtcHR5KCkgfHwgbGFzdE9wZW4gIT0gJygnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIk1pc3BsYWNlZCB8IiwgcCwgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGNoYXJhY3RlciBpcyBhbnl0aGluZyBlbHNlIChlc2NhcGVkIGNoYXJhY3RlcnMgYXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHNraXBwZWQgYW5kIGRvbid0IG1ha2UgaXQgaGVyZSksIGl0J3MgYW4gZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID49ICcgJyAmJiBjIDwgJ1x1MDA3ZicgJiYgIUNoYXJhY3Rlci5pc0xldHRlcihjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhQ2hhcmFjdGVyLmlzRGlnaXQoYykgJiYgIXNhd0lsbGVnYWxDaGFyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3SWxsZWdhbENoYXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlsbGVnYWxDaGFyUG9zID0gcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsYXN0QyA9IGM7CisgICAgICAgICAgICAgICAgKytwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRlbXBSdWxlTGlzdC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGVycm9yKCJObyB2YWxpZCBydWxlcyBpbiBkZXNjcmlwdGlvbiIsIHAsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0ZW1wUnVsZUxpc3Q7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB2YXJpYWJsZS1uYW1lIHN1YnN0aXR1dGlvbnMuICBGaXJzdCBpdCBkb2VzIHN5bnRheAorICAgICAgICAgKiBjaGVja2luZyBvbiB0aGUgdmFyaWFibGUtbmFtZSBkZWZpbml0aW9uLiAgSWYgaXQncyBzeW50YWN0aWNhbGx5IHZhbGlkLCBpdAorICAgICAgICAgKiB0aGVuIGdvZXMgdGhyb3VnaCB0aGUgcmVtYWluZGVyIG9mIHRoZSBkZXNjcmlwdGlvbiBhbmQgZG9lcyBhIHNpbXBsZQorICAgICAgICAgKiBmaW5kLWFuZC1yZXBsYWNlIG9mIHRoZSB2YXJpYWJsZSBuYW1lIHdpdGggaXRzIHRleHQuICAoVGhlIHZhcmlhYmxlIHRleHQKKyAgICAgICAgICogbXVzdCBiZSBlbmNsb3NlZCBpbiBlaXRoZXIgW10gb3IgKCkgZm9yIHRoaXMgdG8gd29yay4pCisgICAgICAgICAqIEBpbnRlcm5hbAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBwcm9jZXNzU3Vic3RpdHV0aW9uKFN0cmluZyBzdWJzdGl0dXRpb25SdWxlLCBTdHJpbmcgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRQb3MpIHsKKyAgICAgICAgICAgIC8vIGlzb2xhdGUgb3V0IHRoZSB0ZXh0IG9uIGVpdGhlciBzaWRlIG9mIHRoZSBlcXVhbHMgc2lnbgorICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2U7CisgICAgICAgICAgICBTdHJpbmcgcmVwbGFjZVdpdGg7CisgICAgICAgICAgICBpbnQgZXF1YWxQb3MgPSBzdWJzdGl0dXRpb25SdWxlLmluZGV4T2YoJz0nKTsKKyAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25SdWxlLmNoYXJBdCgwKSAhPSAnJCcpIHsKKyAgICAgICAgICAgICAgICBlcnJvcigiTWlzc2luZyAnJCcgb24gbGVmdC1oYW5kIHNpZGUgb2YgPSIsIHN0YXJ0UG9zLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBsYWNlID0gc3Vic3RpdHV0aW9uUnVsZS5zdWJzdHJpbmcoMSwgZXF1YWxQb3MpOworICAgICAgICAgICAgcmVwbGFjZVdpdGggPSBzdWJzdGl0dXRpb25SdWxlLnN1YnN0cmluZyhlcXVhbFBvcyArIDEpOworCisgICAgICAgICAgICAvLyBjaGVjayB0byBzZWUgd2hldGhlciB0aGUgc3Vic3RpdHV0aW9uIG5hbWUgaXMgc29tZXRoaW5nIHdlJ3ZlIGRlY2xhcmVkCisgICAgICAgICAgICAvLyB0byBiZSAic3BlY2lhbCIuICBGb3IgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBpdHNlbGYsIHRoaXMgaXMgSUdOT1JFX1ZBUi4KKyAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbnkgZXh0cmEgcHJvY2Vzc2luZyB0aGF0IGhhcyB0byBiZSBkb25lCisgICAgICAgICAgICAvLyB3aXRoICJzcGVjaWFsIiBzdWJzdGl0dXRpb24gbmFtZXMuCisgICAgICAgICAgICBoYW5kbGVTcGVjaWFsU3Vic3RpdHV0aW9uKHJlcGxhY2UsIHJlcGxhY2VXaXRoLCBzdGFydFBvcywgZGVzY3JpcHRpb24pOworCisgICAgICAgICAgICAvLyBwZXJmb3JtIHZhcmlvdXMgb3RoZXIgc3ludGF4IGNoZWNrcyBvbiB0aGUgcnVsZQorICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcigiTm90aGluZyBvbiByaWdodC1oYW5kIHNpZGUgb2YgPSIsIHN0YXJ0UG9zLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVwbGFjZS5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJyb3IoIk5vdGhpbmcgb24gbGVmdC1oYW5kIHNpZGUgb2YgPSIsIHN0YXJ0UG9zLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIShyZXBsYWNlV2l0aC5jaGFyQXQoMCkgPT0gJ1snICYmIHJlcGxhY2VXaXRoLmNoYXJBdChyZXBsYWNlV2l0aC5sZW5ndGgoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgID09ICddJykgJiYgIShyZXBsYWNlV2l0aC5jaGFyQXQoMCkgPT0gJygnICYmIHJlcGxhY2VXaXRoLmNoYXJBdCgKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGgubGVuZ3RoKCkgLSAxKSA9PSAnKScpKSB7CisgICAgICAgICAgICAgICAgZXJyb3IoIklsbGVnYWwgcmlnaHQtaGFuZCBzaWRlIGZvciA9Iiwgc3RhcnRQb3MsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gbm93IGdvIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGRlc2NyaXB0aW9uICh3aGljaCBoYXNuJ3QgYmVlbiBicm9rZW4gdXAKKyAgICAgICAgICAgIC8vIGludG8gc2VwYXJhdGUgcnVsZXMgeWV0KSBhbmQgcmVwbGFjZSBldmVyeSBvY2N1cnJlbmNlIG9mIHRoZQorICAgICAgICAgICAgLy8gc3Vic3RpdHV0aW9uIG5hbWUgd2l0aCB0aGUgc3Vic3RpdHV0aW9uIGJvZHkKKyAgICAgICAgICAgIHJlcGxhY2UgPSAiJCIgKyByZXBsYWNlOworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIHN0YXJ0UG9zKSk7CisgICAgICAgICAgICBpbnQgbGFzdFBvcyA9IHN0YXJ0UG9zOworICAgICAgICAgICAgaW50IHBvcyA9IGRlc2NyaXB0aW9uLmluZGV4T2YocmVwbGFjZSwgc3RhcnRQb3MpOworICAgICAgICAgICAgd2hpbGUgKHBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIFtsaXVdIENoZWNrIHRoYXQgdGhlIHN0cmluZyB3ZSd2ZSBmb3VuZCBpc24ndCBhIHJlZGVmaW5pdGlvbgorICAgICAgICAgICAgICAgIC8vIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24uY2hhckF0KHBvcy0xKSA9PSAnOycgJiYKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24uY2hhckF0KHBvcyArIHJlcGxhY2UubGVuZ3RoKCkpID09ICc9JykgeworICAgICAgICAgICAgICAgICAgICBlcnJvcigiQXR0ZW1wdCB0byByZWRlZmluZSAiICsgcmVwbGFjZSwgcG9zLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVzY3JpcHRpb24uc3Vic3RyaW5nKGxhc3RQb3MsIHBvcykpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZVdpdGgpOworICAgICAgICAgICAgICAgIGxhc3RQb3MgPSBwb3MgKyByZXBsYWNlLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHBvcyA9IGRlc2NyaXB0aW9uLmluZGV4T2YocmVwbGFjZSwgbGFzdFBvcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRlc2NyaXB0aW9uLnN1YnN0cmluZyhsYXN0UG9zKSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBmdW5jdGlvbiBkZWZpbmVzIGEgcHJvdG9jb2wgZm9yIGhhbmRsaW5nIHN1YnN0aXR1dGlvbiBuYW1lcyB0aGF0CisgICAgICAgICAqIGFyZSAic3BlY2lhbCwiIGkuZS4sIHRoYXQgaGF2ZSBzb21lIHByb3BlcnR5IGJleW9uZCBqdXN0IGJlaW5nCisgICAgICAgICAqIHN1YnN0aXR1dGlvbnMuICBBdCB0aGUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBsZXZlbCwgd2UgaGF2ZSBvbmUKKyAgICAgICAgICogc3BlY2lhbCBzdWJzdGl0dXRpb24gbmFtZSwgSUdOT1JFX1ZBUi4gIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMKKyAgICAgICAgICogZnVuY3Rpb24gdG8gYWRkIG1vcmUuICBBbnkgc3BlY2lhbCBwcm9jZXNzaW5nIHRoYXQgaGFzIHRvIGdvIG9uIGJleW9uZAorICAgICAgICAgKiB0aGF0IHdoaWNoIGlzIGRvbmUgYnkgdGhlIG5vcm1hbCBzdWJzdGl0dXRpb24tcHJvY2Vzc2luZyBjb2RlIGlzIGRvbmUKKyAgICAgICAgICogaGVyZS4KKyAgICAgICAgICogQGludGVybmFsCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVTcGVjaWFsU3Vic3RpdHV0aW9uKFN0cmluZyByZXBsYWNlLCBTdHJpbmcgcmVwbGFjZVdpdGgsCisgICAgICAgICAgICAgICAgICAgIGludCBzdGFydFBvcywgU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICAvLyBpZiB3ZSBnZXQgYSBkZWZpbml0aW9uIGZvciBhIHN1YnN0aXR1dGlvbiBjYWxsZWQgSUdOT1JFX1ZBUiwgaXQgZGVmaW5lcworICAgICAgICAgICAgLy8gdGhlIGlnbm9yZSBjaGFyYWN0ZXJzIGZvciB0aGUgaXRlcmF0b3IuICBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgICAgIC8vIGlzIGEgW10gZXhwcmVzc2lvbiwgYW5kIGlmIGl0IGlzLCBwYXJzZSBpdCBhbmQgc3RvcmUgdGhlIGNoYXJhY3RlcnMgb2ZmCisgICAgICAgICAgICAvLyB0byB0aGUgc2lkZS4KKyAgICAgICAgICAgIGlmIChyZXBsYWNlLmVxdWFscyhJR05PUkVfVkFSKSkgeworICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aC5jaGFyQXQoMCkgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yKCJJZ25vcmUgZ3JvdXAgY2FuJ3QgYmUgZW5jbG9zZWQgaW4gKCIsIHN0YXJ0UG9zLCBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlnbm9yZUNoYXJzID0gbmV3IFVuaWNvZGVTZXQocmVwbGFjZVdpdGgsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyB0aGUgY2hhcmFjdGVyIGNhdGVnb3J5IHRhYmxlLiAgT24gZW50cnksCisgICAgICAgICAqIHRlbXBSdWxlTGlzdCBpcyBhIHZlY3RvciBvZiBicmVhayBydWxlcyB0aGF0IGhhcyBoYWQgdmFyaWFibGUgbmFtZXMgc3Vic3RpdHV0ZWQuCisgICAgICAgICAqIE9uIGV4aXQsIHRoZSBjaGFyQ2F0ZWdvcnlUYWJsZSBkYXRhIG1lbWJlciBoYXMgYmVlbiBpbml0aWFsaXplZCB0byBob2xkIHRoZQorICAgICAgICAgKiBjaGFyYWN0ZXIgY2F0ZWdvcnkgdGFibGUsIGFuZCB0ZW1wUnVsZUxpc3QncyBydWxlcyBoYXZlIGJlZW4gbXVuZ2VkIHRvIGNvbnRhaW4KKyAgICAgICAgICogY2hhcmFjdGVyIGNhdGVnb3J5IG51bWJlcnMgZXZlcnl3aGVyZSBhIGxpdGVyYWwgY2hhcmFjdGVyIG9yIGEgW10gZXhwcmVzc2lvbgorICAgICAgICAgKiBvcmlnaW5hbGx5IG9jY3VycmVkLgorICAgICAgICAgKiBAaW50ZXJuYWwKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGJ1aWxkQ2hhckNhdGVnb3JpZXMoVmVjdG9yIHRlbXBSdWxlTGlzdCkgeworICAgICAgICAgICAgaW50IGJyYWNrZXRMZXZlbCA9IDA7CisgICAgICAgICAgICBpbnQgcCA9IDA7CisgICAgICAgICAgICBpbnQgbGluZU51bSA9IDA7CisKKyAgICAgICAgICAgIC8vIGJ1aWxkIGhhc2ggdGFibGUgb2YgZXZlcnkgbGl0ZXJhbCBjaGFyYWN0ZXIgb3IgW10gZXhwcmVzc2lvbiBpbiB0aGUgcnVsZSBsaXN0CisgICAgICAgICAgICAvLyBhbmQgZGVyaXZlIGEgVW5pY29kZVNldCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjaGFyYWN0ZXJzIGVhY2ggcmVmZXJzIHRvCisgICAgICAgICAgICBleHByZXNzaW9ucyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lTnVtIDwgdGVtcFJ1bGVMaXN0LnNpemUoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gKFN0cmluZykodGVtcFJ1bGVMaXN0LmVsZW1lbnRBdChsaW5lTnVtKSk7CisgICAgICAgICAgICAgICAgcCA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBsaW5lLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IGxpbmUuY2hhckF0KHApOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciBhbGwgc3ludGF4IGNoYXJhY3RlcnMgZXhjZXB0IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOiBjYXNlICcpJzogY2FzZSAnKic6IGNhc2UgJy4nOiBjYXNlICcvJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3wnOiBjYXNlICc7JzogY2FzZSAnPyc6IGNhc2UgJyEnOiBjYXNlICcrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIFssIGZpbmQgdGhlIG1hdGNoaW5nIF0gKHRha2luZyBuZXN0ZWQgW10gcGFpcnMgaW50byBhY2NvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGFkZCB0aGUgd2hvbGUgZXhwcmVzc2lvbiB0byB0aGUgZXhwcmVzc2lvbiBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcSA9IHAgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrYnJhY2tldExldmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChxIDwgbGluZS5sZW5ndGgoKSAmJiBicmFja2V0TGV2ZWwgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbGluZS5jaGFyQXQocSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdbJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyticmFja2V0TGV2ZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tYnJhY2tldExldmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb25zLmdldChsaW5lLnN1YnN0cmluZyhwLCBxKSkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXQobGluZS5zdWJzdHJpbmcocCwgcSksIG5ldyBVbmljb2RlU2V0KGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHJpbmcocCwgcSksIGZhbHNlKSk7CisvL1Rlc3QuZGVidWdQcmludGxuKCIxLiBBZGRpbmcgZXhwcmVzc2lvbjogIiArIGxpbmUuc3Vic3RyaW5nKHAsIHEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHEgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgXCBzZXF1ZW5jZXMsIGp1c3QgbW92ZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIHRyZWF0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGxpbmUuY2hhckF0KHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERPTidUIGJyZWFrOyBmYWxsIHRocm91Z2ggaW50byAiZGVmYXVsdCIgY2xhdXNlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBhbiBpc29sYXRlZCBzaW5nbGUgY2hhcmFjdGVyLCBhZGQgaXQgdG8gdGhlIGV4cHJlc3Npb24gbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlU2V0IHMgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWRkKGxpbmUuY2hhckF0KHApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXQobGluZS5zdWJzdHJpbmcocCwgcCArIDEpLCBzKTsKKy8vVGVzdC5kZWJ1Z1ByaW50bG4oIjIuIEFkZGluZyBleHByZXNzaW9uOiAiICsgbGluZS5zdWJzdHJpbmcocCwgcCArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbGluZU51bTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSB0ZW1wb3JhcnkgY2F0ZWdvcnkgdGFibGUgKHdoaWNoIGlzIGEgdmVjdG9yIG9mIFVuaWNvZGVTZXQgb2JqZWN0cykKKyAgICAgICAgICAgIGNhdGVnb3JpZXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICBpZiAoaWdub3JlQ2hhcnMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMuYWRkRWxlbWVudChpZ25vcmVDaGFycyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLmFkZEVsZW1lbnQobmV3IFVuaWNvZGVTZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZ25vcmVDaGFycyA9IG51bGw7CisKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBob29rIHRvIGFsbG93IHN1YmNsYXNzZXMgdG8gYWRkIGNhdGVnb3JpZXMgb24gdGhlaXIgb3duCisgICAgICAgICAgICBtdW5nZUV4cHJlc3Npb25MaXN0KGV4cHJlc3Npb25zKTsKKworICAgICAgICAgICAgLy8gRGVyaXZlIHRoZSBjaGFyYWN0ZXIgY2F0ZWdvcmllcy4gIEdvIHRocm91Z2ggdGhlIGV4aXN0aW5nIGNoYXJhY3RlciBjYXRlZ29yaWVzCisgICAgICAgICAgICAvLyBsb29raW5nIGZvciBvdmVybGFwLiAgQW55IHRpbWUgdGhlcmUncyBvdmVybGFwLCB3ZSBjcmVhdGUgYSBuZXcgY2hhcmFjdGVyCisgICAgICAgICAgICAvLyBjYXRlZ29yeSBmb3IgdGhlIGNoYXJhY3RlcnMgdGhhdCBvdmVybGFwcGVkIGFuZCByZW1vdmUgdGhlbSBmcm9tIHRoZWlyIG9yaWdpbmFsCisgICAgICAgICAgICAvLyBjYXRlZ29yeS4gIEF0IHRoZSBlbmQsIGFueSBjaGFyYWN0ZXJzIHRoYXQgYXJlIGxlZnQgaW4gdGhlIGV4cHJlc3Npb24gaGF2ZW4ndAorICAgICAgICAgICAgLy8gYmVlbiBtZW50aW9uZWQgaW4gYW55IGNhdGVnb3J5LCBzbyBhbm90aGVyIG5ldyBjYXRlZ29yeSBpcyBjcmVhdGVkIGZvciB0aGVtLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCBleHByZXNzaW9uIGlzIFthYmNdLCB0aGVuIGEsIGIsIGFuZCBjIHdpbGwgYmUgcGxhY2VkCisgICAgICAgICAgICAvLyBpbnRvIGEgc2luZ2xlIGNoYXJhY3RlciBjYXRlZ29yeS4gIElmIHRoZSBuZXh0IGV4cHJlc3Npb24gaXMgW2JjZF0sIHdlIHdpbGwgZmlyc3QKKyAgICAgICAgICAgIC8vIHJlbW92ZSBiIGFuZCBjIGZyb20gdGhlaXIgZXhpc3RpbmcgY2F0ZWdvcnkgKGxlYXZpbmcgYSBiZWhpbmQpLCBjcmVhdGUgYSBuZXcKKyAgICAgICAgICAgIC8vIGNhdGVnb3J5IGZvciBiIGFuZCBjLCBhbmQgdGhlbiBjcmVhdGUgYW5vdGhlciBuZXcgY2F0ZWdvcnkgZm9yIGQgKHdoaWNoIGhhZG4ndAorICAgICAgICAgICAgLy8gYmVlbiBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIGV4cHJlc3Npb24pLgorICAgICAgICAgICAgLy8gQXQgbm8gdGltZSBzaG91bGQgYSBjaGFyYWN0ZXIgZXZlciBvY2N1ciBpbiBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciBjYXRlZ29yeS4KKworICAgICAgICAgICAgLy8gZm9yIGVhY2ggZXhwcmVzc2lvbiBpbiB0aGUgZXhwcmVzc2lvbnMgbGlzdCwgZG8uLi4KKyAgICAgICAgICAgIEVudW1lcmF0aW9uIGl0ZXIgPSBleHByZXNzaW9ucy5lbGVtZW50cygpOworICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIHRoZSB3b3JraW5nIGNoYXIgc2V0IHRvIHRoZSBjaGFycyBpbiB0aGUgY3VycmVudCBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgVW5pY29kZVNldCB3b3JrID0gbmV3IFVuaWNvZGVTZXQoKFVuaWNvZGVTZXQpaXRlci5uZXh0RWxlbWVudCgpKTsKKworICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGNhdGVnb3J5IGluIHRoZSBjYXRlZ29yeSBsaXN0LCBkby4uLgorICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBjYXRlZ29yaWVzLnNpemUoKSAtIDE7ICF3b3JrLmlzRW1wdHkoKSAmJiBqID4gMDsgai0tKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUncyBvdmVybGFwIGJldHdlZW4gdGhlIGN1cnJlbnQgd29ya2luZyBzZXQgb2YgY2hhcnMKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjdXJyZW50IGNhdGVnb3J5Li4uCisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTZXQgY2F0ID0gKFVuaWNvZGVTZXQpKGNhdGVnb3JpZXMuZWxlbWVudEF0KGopKTsKKyAgICAgICAgICAgICAgICAgICAgVW5pY29kZVNldCBvdmVybGFwID0gaW50ZXJzZWN0aW9uKHdvcmssIGNhdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVybGFwLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgY2F0ZWdvcnkgaXMgbm90IGEgc3Vic2V0IG9mIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3b3JraW5nIHNldCBvZiBjaGFyYWN0ZXJzLCB0aGVuIHJlbW92ZSB0aGUgb3ZlcmxhcHBpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgZnJvbSB0aGUgY3VycmVudCBjYXRlZ29yeSBhbmQgY3JlYXRlIGEgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXRlZ29yeSBmb3IgdGhlbQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVybGFwLmVxdWFscyhjYXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0LnJlbW92ZUFsbChvdmVybGFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLmFkZEVsZW1lbnQob3ZlcmxhcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBhbHdheXMgcmVtb3ZlIHRoZSBvdmVybGFwcGluZyBjaGFyYWN0ZXJzIGZyb20gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdvcmtpbmcgc2V0IG9mIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmsucmVtb3ZlQWxsKG92ZXJsYXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIHN0aWxsIGNoYXJhY3RlcnMgbGVmdCBpbiB0aGUgd29ya2luZyBjaGFyIHNldCwKKyAgICAgICAgICAgICAgICAvLyBhZGQgYSBuZXcgY2F0ZWdvcnkgY29udGFpbmluZyB0aGVtCisgICAgICAgICAgICAgICAgaWYgKCF3b3JrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLmFkZEVsZW1lbnQod29yayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB3ZSBoYXZlIHRoZSBpZ25vcmUgY2hhcmFjdGVycyBzdG9yZWQgaW4gcG9zaXRpb24gMC4gIE1ha2UgYW4gZXh0cmEgcGFzcyB0aHJvdWdoCisgICAgICAgICAgICAvLyB0aGUgY2hhcmFjdGVyIGNhdGVnb3J5IGxpc3QgYW5kIHJlbW92ZSBhbnl0aGluZyBmcm9tIHRoZSBpZ25vcmUgbGlzdCB0aGF0IHNob3dzCisgICAgICAgICAgICAvLyB1cCBpbiBzb21lIG90aGVyIGNhdGVnb3J5CisgICAgICAgICAgICBVbmljb2RlU2V0IGFsbENoYXJzID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY2F0ZWdvcmllcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBhbGxDaGFycy5hZGRBbGwoKFVuaWNvZGVTZXQpKGNhdGVnb3JpZXMuZWxlbWVudEF0KGkpKSk7CisgICAgICAgICAgICBVbmljb2RlU2V0IGlnbm9yZUNoYXJzID0gKFVuaWNvZGVTZXQpKGNhdGVnb3JpZXMuZWxlbWVudEF0KDApKTsKKyAgICAgICAgICAgIGlnbm9yZUNoYXJzLnJlbW92ZUFsbChhbGxDaGFycyk7CisKKyAgICAgICAgICAgIC8vIG5vdyB0aGF0IHdlJ3ZlIGRlcml2ZWQgdGhlIGNoYXJhY3RlciBjYXRlZ29yaWVzLCBnbyBiYWNrIHRocm91Z2ggdGhlIGV4cHJlc3Npb24KKyAgICAgICAgICAgIC8vIGxpc3QgYW5kIHJlcGxhY2UgZWFjaCBVbmljb2RlU2V0IG9iamVjdCB3aXRoIGEgU3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlciBjYXRlZ29yaWVzIHRoYXQgZXhwcmVzc2lvbiByZWZlcnMgdG8uICBUaGUgU3RyaW5nIGlzIGVuY29kZWQ6IGVhY2gKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlciBpcyBhIGNoYXJhY3RlciBjYXRlZ29yeSBudW1iZXIgKHBsdXMgMHgxMDAgdG8gYXZvaWQgY29uZnVzaW5nIHRoZW0KKyAgICAgICAgICAgIC8vIHdpdGggc3ludGF4IGNoYXJhY3RlcnMgaW4gdGhlIHJ1bGUgZ3JhbW1hcikKKyAgICAgICAgICAgIGl0ZXIgPSBleHByZXNzaW9ucy5rZXlzKCk7CisgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWl0ZXIubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBVbmljb2RlU2V0IGNzID0gKFVuaWNvZGVTZXQpZXhwcmVzc2lvbnMuZ2V0KGtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGNhdHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBjYXRlZ29yeS4uLgorICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgY2F0ZWdvcmllcy5zaXplKCk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBVbmljb2RlU2V0IGNhdCA9IG5ldyBVbmljb2RlU2V0KChVbmljb2RlU2V0KSBjYXRlZ29yaWVzLmVsZW1lbnRBdChqKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBjb250YWlucyBjaGFyYWN0ZXJzIGluIHRoYXQgY2F0ZWdvcnkuLi4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNzLmNvbnRhaW5zQWxsKGNhdCkpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBhZGQgdGhlIGVuY29kZWQgY2F0ZWdvcnkgbnVtYmVyIHRvIHRoZSBTdHJpbmcgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhdHMuYXBwZW5kKChjaGFyKSgweDEwMCArIGopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcy5lcXVhbHMoY2F0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gb25jZSB3ZSd2ZSBmaW5pc2hlZCBidWlsZGluZyB0aGUgZW5jb2RlZCBTdHJpbmcgZm9yIHRoaXMgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBVbmljb2RlU2V0IG9iamVjdCB3aXRoIGl0CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHV0KGtleSwgY2F0cy50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gYW5kIGZpbmFsbHksIHdlIHR1cm4gdGhlIHRlbXBvcmFyeSBjYXRlZ29yeSB0YWJsZSBpbnRvIGEgcGVybWFuZW50IGNhdGVnb3J5CisgICAgICAgICAgICAvLyB0YWJsZSwgd2hpY2ggaXMgYSBDb21wYWN0Qnl0ZUFycmF5LiAod2Ugc2tpcCBjYXRlZ29yeSAwLCB3aGljaCBieSBkZWZpbml0aW9uCisgICAgICAgICAgICAvLyByZWZlcnMgdG8gYWxsIGNoYXJhY3RlcnMgbm90IG1lbnRpb25lZCBzcGVjaWZpY2FsbHkgaW4gdGhlIHJ1bGVzKQorICAgICAgICAgICAgY2hhckNhdGVnb3J5VGFibGUgPSBuZXcgQ29tcGFjdEJ5dGVBcnJheSgoYnl0ZSkwKTsKKworICAgICAgICAgICAgLy8gZm9yIGVhY2ggY2F0ZWdvcnkuLi4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2F0ZWdvcmllcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIFVuaWNvZGVTZXQgY2hhcnMgPSAoVW5pY29kZVNldCkoY2F0ZWdvcmllcy5lbGVtZW50QXQoaSkpOworICAgICAgICAgICAgICAgIGludCBuID0gY2hhcnMuZ2V0UmFuZ2VDb3VudCgpOworCisgICAgICAgICAgICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgY2hhcmFjdGVyIHJhbmdlcyBpbiB0aGUgY2F0ZWdvcnkgb25lIGJ5IG9uZS4uLgorICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIGludCByYW5nZVN0YXJ0ID0gY2hhcnMuZ2V0UmFuZ2VTdGFydChqKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAoaWdub3JlIGFueXRoaW5nIGFib3ZlIHRoZSBCTVAgZm9yIG5vdy4uLikKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlU3RhcnQgPj0gMHgxMDAwMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBhbmQgc2V0IHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBDb21wYWN0QXJyYXkgYWNjb3JkaW5nbHkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNhdGVnb3J5VGFibGUuc2V0RWxlbWVudEF0KChjaGFyKXJhbmdlU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpY2hhcnMuZ2V0UmFuZ2VFbmQoaiksIChieXRlKWkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gKGNhdGVnb3J5IDAgaXMgc3BlY2lhbC0tIGl0J3MgdGhlIGhpZGluZyBwbGFjZSBmb3IgdGhlIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzLCB3aG9zZSByZWFsIGNhdGVnb3J5IG51bWJlciBpbiB0aGUgQ29tcGFjdEFycmF5IGlzCisgICAgICAgICAgICAgICAgICAgIC8vIC0xIFt0aGlzIGlzIGJlY2F1c2UgY2F0ZWdvcnkgMCBjb250YWlucyBhbGwgY2hhcmFjdGVycyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWNhbGx5IG1lbnRpb25lZCBhbnl3aGVyZSBpbiB0aGUgcnVsZXNdICkKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ2F0ZWdvcnlUYWJsZS5zZXRFbGVtZW50QXQoKGNoYXIpcmFuZ2VTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciljaGFycy5nZXRSYW5nZUVuZChqKSwgSUdOT1JFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gb25jZSB3ZSd2ZSBwb3B1bGF0ZWQgdGhlIENvbXBhY3RBcnJheSwgY29tcGFjdCBpdAorICAgICAgICAgICAgY2hhckNhdGVnb3J5VGFibGUuY29tcGFjdCgpOworCisgICAgICAgICAgICAvLyBpbml0aWFsaXplIG51bUNhdGVnb3JpZXMKKyAgICAgICAgICAgIG51bUNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzLnNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiAgIEBpbnRlcm5hbCAqLworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBtdW5nZUV4cHJlc3Npb25MaXN0KEhhc2h0YWJsZSBleHByZXNzaW9ucykgeworICAgICAgICAgICAgLy8gZW1wdHkgaW4gdGhlIHBhcmVudCBjbGFzcy4gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBob29rIGZvciBzdWJjbGFzc2VzCisgICAgICAgICAgICAvLyB0byBtZXNzIHdpdGggdGhlIGNoYXJhY3RlciBjYXRlZ29yeSB0YWJsZS4KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyB0aGUgZm9yd2FyZCBzdGF0ZSB0YWJsZS4gIE1vc3Qgb2YgdGhlIHJlYWwKKyAgICAgICAgICogd29yayBpcyBkb25lIGluIHBhcnNlUnVsZSgpLCB3aGljaCBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBydWxlIGluIHRoZQorICAgICAgICAgKiBkZXNjcmlwdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBidWlsZFN0YXRlVGFibGUoVmVjdG9yIHRlbXBSdWxlTGlzdCkgeworICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBvdXIgdGVtcG9yYXJ5IHN0YXRlIHRhYmxlLCBhbmQgZmlsbCBpdCB3aXRoIHR3byBzdGF0ZXM6CisgICAgICAgICAgICAvLyBzdGF0ZSAwIGlzIGEgZHVtbXkgc3RhdGUgdGhhdCBhbGxvd3Mgc3RhdGUgMSB0byBiZSB0aGUgc3RhcnRpbmcgc3RhdGUKKyAgICAgICAgICAgIC8vIGFuZCAwIHRvIHJlcHJlc2VudCAic3RvcCIuICBTdGF0ZSAxIGlzIGFkZGVkIGhlcmUgdG8gc2VlZCB0aGluZ3MKKyAgICAgICAgICAgIC8vIGJlZm9yZSB3ZSBzdGFydCBwYXJzaW5nCisgICAgICAgICAgICB0ZW1wU3RhdGVUYWJsZSA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgIHRlbXBTdGF0ZVRhYmxlLmFkZEVsZW1lbnQobmV3IHNob3J0W251bUNhdGVnb3JpZXMgKyAxXSk7CisgICAgICAgICAgICB0ZW1wU3RhdGVUYWJsZS5hZGRFbGVtZW50KG5ldyBzaG9ydFtudW1DYXRlZ29yaWVzICsgMV0pOworCisgICAgICAgICAgICAvLyBjYWxsIHBhcnNlUnVsZSgpIGZvciBldmVyeSBydWxlIGluIHRoZSBydWxlIGxpc3QgKGV4Y2VwdCB0aG9zZSB3aGljaAorICAgICAgICAgICAgLy8gc3RhcnQgd2l0aCAhLCB3aGljaCBhcmUgYWN0dWFsbHkgYmFja3dhcmRzLWl0ZXJhdGlvbiBydWxlcykKKyAgICAgICAgICAgIC8vIHZhcmlhYmxlIG5vdCB1c2VkIGludCBuID0gdGVtcFJ1bGVMaXN0LnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcFJ1bGVMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHJ1bGUgPSAoU3RyaW5nKXRlbXBSdWxlTGlzdC5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUuY2hhckF0KDApICE9ICchJykgeworICAgICAgICAgICAgICAgICAgICBwYXJzZVJ1bGUocnVsZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBmaW5hbGx5LCB1c2UgZmluaXNoQnVpbGRpbmdTdGF0ZVRhYmxlKCkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgLy8gc3RhdGVzIGluIHRoZSB0YWJsZSBhbmQgcGVyZm9ybSBzb21lIG90aGVyIGNsZWFudXAgd29yaworICAgICAgICAgICAgZmluaXNoQnVpbGRpbmdTdGF0ZVRhYmxlKHRydWUpOworLyoKK1N5c3RlbS5vdXQucHJpbnQoIkM6XHQiKTsKK2ZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2F0ZWdvcmllczsgaSsrKQorU3lzdGVtLm91dC5wcmludChJbnRlZ2VyLnRvU3RyaW5nKGkpICsgIlx0Iik7CitTeXN0ZW0ub3V0LnByaW50bG4oKTsgU3lzdGVtLm91dC5wcmludCgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZVRhYmxlLmxlbmd0aDsgaSsrKSB7CitpZiAoaSAlIG51bUNhdGVnb3JpZXMgPT0gMCkgeworU3lzdGVtLm91dC5wcmludGxuKCk7CitpZiAoZW5kU3RhdGVzW2kgLyBudW1DYXRlZ29yaWVzXSkKK1N5c3RlbS5vdXQucHJpbnQoIioiKTsKK2Vsc2UKK1N5c3RlbS5vdXQucHJpbnQoIiAiKTsKK2lmIChsb29rYWhlYWRTdGF0ZXNbaSAvIG51bUNhdGVnb3JpZXNdKSB7CitTeXN0ZW0ub3V0LnByaW50KCIlIik7Cit9CitlbHNlCitTeXN0ZW0ub3V0LnByaW50KCIgIik7CitTeXN0ZW0ub3V0LnByaW50KEludGVnZXIudG9TdHJpbmcoaSAvIG51bUNhdGVnb3JpZXMpICsgIjpcdCIpOworfQoraWYgKHN0YXRlVGFibGVbaV0gPT0gMCkgU3lzdGVtLm91dC5wcmludCgiLlx0Iik7IGVsc2UgU3lzdGVtLm91dC5wcmludChJbnRlZ2VyLnRvU3RyaW5nKHN0YXRlVGFibGVbaV0pICsgIlx0Iik7Cit9CitTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyovCisgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGlzIHdoZXJlIG1vc3Qgb2YgdGhlIHdvcmsgcmVhbGx5IGhhcHBlbnMuICBUaGlzIHJvdXRpbmUgcGFyc2VzIGEgc2luZ2xlCisgICAgICAgICAqIHJ1bGUgaW4gdGhlIHJ1bGUgZGVzY3JpcHRpb24sIGFkZGluZyBhbmQgbW9kaWZ5aW5nIHN0YXRlcyBpbiB0aGUgc3RhdGUKKyAgICAgICAgICogdGFibGUgYWNjb3JkaW5nIHRvIHRoZSBuZXcgZXhwcmVzc2lvbi4gIFRoZSBzdGF0ZSB0YWJsZSBpcyBrZXB0IGRldGVybWluaXN0aWMKKyAgICAgICAgICogdGhyb3VnaG91dCB0aGUgd2hvbGUgb3BlcmF0aW9uLCBhbHRob3VnaCBzb21lIHVnbHkgcG9zdHByb2Nlc3NpbmcgaXMgbmVlZGVkCisgICAgICAgICAqIHRvIGhhbmRsZSB0aGUgKj8gdG9rZW4uCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgcGFyc2VSdWxlKFN0cmluZyBydWxlLCBib29sZWFuIGZvcndhcmQpIHsKKyAgICAgICAgICAgIC8vIGFsZ29yaXRobSBub3RlczoKKyAgICAgICAgICAgIC8vICAgLSBUaGUgYmFzaWMgaWRlYSBoZXJlIGlzIHRvIHJlYWQgc3VjY2Vzc2l2ZSBjaGFyYWN0ZXItY2F0ZWdvcnkgZ3JvdXBzCisgICAgICAgICAgICAvLyAgIGZyb20gdGhlIGlucHV0IHN0cmluZy4gIEZvciBlYWNoIGdyb3VwLCB5b3UgY3JlYXRlIGEgc3RhdGUgYW5kIHBvaW50CisgICAgICAgICAgICAvLyAgIHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzIGluIHRoZSBwcmV2aW91cyBzdGF0ZSB0byBpdC4gIFRoaXMgcHJvZHVjZXMgYQorICAgICAgICAgICAgLy8gICBzdHJhaWdodCBsaW5lIGZyb20gdGhlIHN0YXJ0IHN0YXRlIHRvIHRoZSBlbmQgc3RhdGUuICBUaGUgPywgKywgKiwgYW5kICh8KQorICAgICAgICAgICAgLy8gICBpZGlvbXMgcHJvZHVjZSBicmFuY2hlcyBpbiB0aGlzIHN0cmFpZ2h0IGxpbmUuICBUaGVzZSBicmFuY2hlcyAoc3RhdGVzCisgICAgICAgICAgICAvLyAgIHRoYXQgY2FuIHRyYW5zaXRpb24gdG8gbW9yZSB0aGFuIG9uZSBvdGhlciBzdGF0ZSkgYXJlIGNhbGxlZCAiZGVjaXNpb24KKyAgICAgICAgICAgIC8vICAgcG9pbnRzLiIgIEEgbGlzdCBvZiBkZWNpc2lvbiBwb2ludHMgaXMga2VwdC4gIFRoaXMgY29udGFpbnMgYSBsaXN0IG9mCisgICAgICAgICAgICAvLyAgIGFsbCBzdGF0ZXMgdGhhdCBjYW4gdHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZSB0byBiZSBjcmVhdGVkLiAgRm9yIGEKKyAgICAgICAgICAgIC8vICAgc3RyYWlnaHQgbGluZSBwcm9ncmVzc2lvbiwgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIGRlY2lzaW9uLXBvaW50IGxpc3QgaXMKKyAgICAgICAgICAgIC8vICAgdGhlIGN1cnJlbnQgc3RhdGUuICBCdXQgaWYgdGhlcmUncyBhIGJyYW5jaCwgdGhlIGRlY2lzaW9uLXBvaW50IGxpc3QKKyAgICAgICAgICAgIC8vICAgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgYmVnaW5uaW5nIHBvaW50cyBvZiB0aGUgYnJhbmNoIHdoZW4gdGhlIG5leHQKKyAgICAgICAgICAgIC8vICAgc3RhdGUgdG8gYmUgY3JlYXRlZCByZXByZXNlbnRzIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGJyYW5jaC4gIEEgc3RhY2sgaXMKKyAgICAgICAgICAgIC8vICAgdXNlZCB0byBzYXZlIGRlY2lzaW9uIHBvaW50IGxpc3RzIGluIHRoZSBwcmVzZW5jZSBvZiBuZXN0ZWQgcGFyZW50aGVzZXMKKyAgICAgICAgICAgIC8vICAgYW5kIHRoZSBsaWtlLiAgRm9yIGV4YW1wbGUsIHdoZW4gYSB7IGlzIGVuY291bnRlcmVkLCB0aGUgY3VycmVudCBkZWNpc2lvbgorICAgICAgICAgICAgLy8gICBwb2ludCBsaXN0IGlzIHNhdmVkIG9uIHRoZSBzdGFjayBhbmQgcmVzdG9yZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyB9CisgICAgICAgICAgICAvLyAgIGlzIGVuY291bnRlcmVkLiAgVGhpcyB3YXksIGFmdGVyIHRoZSB9IGlzIHJlYWQsIHRoZSBkZWNpc2lvbiBwb2ludCBsaXN0CisgICAgICAgICAgICAvLyAgIHdpbGwgY29udGFpbiBib3RoIHRoZSBzdGF0ZSByaWdodCBiZWZvcmUgdGhlIH0gX2FuZF8gdGhlIHN0YXRlIGJlZm9yZQorICAgICAgICAgICAgLy8gICB0aGUgd2hvbGUge30gZXhwcmVzc2lvbi4gIEJvdGggb2YgdGhlc2Ugc3RhdGVzIGNhbiB0cmFuc2l0aW9uIHRvIHRoZSBuZXh0CisgICAgICAgICAgICAvLyAgIHN0YXRlIGFmdGVyIHRoZSB7fSBleHByZXNzaW9uLgorICAgICAgICAgICAgLy8gICAtIG9uZSBjb21wbGljYXRpb24gYXJpc2VzIHdoZW4gd2UgaGF2ZSB0byBzdGFtcCBhIHRyYW5zaXRpb24gdmFsdWUgaW50bworICAgICAgICAgICAgLy8gICBhbiBhcnJheSBjZWxsIHRoYXQgYWxyZWFkeSBjb250YWlucyBvbmUuICBUaGUgdXBkYXRlU3RhdGVUYWJsZSgpIGFuZAorICAgICAgICAgICAgLy8gICBtZXJnZVN0YXRlcygpIGZ1bmN0aW9ucyBoYW5kbGUgdGhpcyBjYXNlLiAgVGhlaXIgYmFzaWMgYXBwcm9hY2ggaXMgdG8KKyAgICAgICAgICAgIC8vICAgY3JlYXRlIGEgbmV3IHN0YXRlIHRoYXQgY29tYmluZXMgdGhlIHR3byBzdGF0ZXMgdGhhdCBjb25mbGljdCBhbmQgcG9pbnQKKyAgICAgICAgICAgIC8vICAgYXQgaXQgd2hlbiBuZWNlc3NhcnkuICBUaGlzIGhhcHBlbnMgcmVjdXJzaXZlbHksIHNvIGlmIHRoZSBtZXJnZWQgc3RhdGVzCisgICAgICAgICAgICAvLyAgIGFsc28gY29uZmxpY3QsIHRoZXkncmUgcmVzb2x2ZWQgaW4gdGhlIHNhbWUgd2F5LCBhbmQgc28gb24uICBUaGVyZSBhcmUKKyAgICAgICAgICAgIC8vICAgYSBudW1iZXIgb2YgdGVzdHMgYWltZWQgYXQgcHJldmVudGluZyBpbmZpbml0ZSByZWN1cnNpb24uCisgICAgICAgICAgICAvLyAgIC0gYW5vdGhlciBjb21wbGljYXRpb24gYXJpc2VzIHdpdGggcmVwZWF0aW5nIGNoYXJhY3RlcnMuICBJdCdzIHNvbWV3aGF0CisgICAgICAgICAgICAvLyAgIGFtYmlndW91cyB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIGEgZ3JlZWR5IG9yIG5vbi1ncmVlZHkgbWF0Y2ggaW4gdGhlc2UgY2FzZXMuCisgICAgICAgICAgICAvLyAgIChlLmcuLCB3aGV0aGVyICJbYS16XSphYmMiIG1lYW5zIHRoZSBTSE9SVEVTVCBzZXF1ZW5jZSBvZiBsZXR0ZXJzIGVuZGluZyBpbgorICAgICAgICAgICAgLy8gICAiYWJjIiBvciB0aGUgTE9OR0VTVCBzZXF1ZW5jZSBvZiBsZXR0ZXJzIGVuZGluZyBpbiAiYWJjIi4gIFdlJ3ZlIGFkb3B0ZWQKKyAgICAgICAgICAgIC8vICAgdGhlICo/IHRvIG1lYW4gInNob3J0ZXN0IiBhbmQgKiBieSBpdHNlbGYgdG8gbWVhbiAibG9uZ2VzdCIuICAoWW91IGdldCB0aGUKKyAgICAgICAgICAgIC8vICAgc2FtZSByZXN1bHQgd2l0aCBib3RoIGlmIHRoZXJlJ3Mgbm8gb3ZlcmxhcCBiZXR3ZWVuIHRoZSByZXBlYXRpbmcgY2hhcmFjdGVyCisgICAgICAgICAgICAvLyAgIGdyb3VwIGFuZCB0aGUgZ3JvdXAgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGl0LikgIEhhbmRsaW5nIHRoZSAqPyB0b2tlbiBpcworICAgICAgICAgICAgLy8gICByYXRoZXIgY29tcGxpY2F0ZWQgYW5kIGludm9sdmVzIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciBhIHN0YXRlIG5lZWRzIHRvCisgICAgICAgICAgICAvLyAgIGJlIG1lcmdlZCAoYXMgZGVzY3JpYmVkIGFib3ZlKSBvciBtZXJlbHkgb3ZlcndyaXR0ZW4gd2hlbiB5b3UgdXBkYXRlIG9uZSBvZgorICAgICAgICAgICAgLy8gICBpdHMgY2VsbHMsIGFuZCBjb3B5aW5nIHRoZSBjb250ZW50cyBvZiBhIHN0YXRlIHRoYXQgbG9vcHMgd2l0aCBhICo/IHRva2VuCisgICAgICAgICAgICAvLyAgIGludG8gc29tZSBvZiB0aGUgc3RhdGVzIHRoYXQgZm9sbG93IGl0IGFmdGVyIHRoZSByZXN0IG9mIHRoZSB0YWJsZS1idWlsZGluZworICAgICAgICAgICAgLy8gICBwcm9jZXNzIGlzIGNvbXBsZXRlICgiYmFja2ZpbGxpbmciKS4KKyAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICAgICAgLy8gICAtIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBzeW50YXggY2hlY2tpbmcgaGFzIGJlZW4gcGVyZm9ybWVkIG9uIHRoZSBpbnB1dCBzdHJpbmcKKyAgICAgICAgICAgIC8vICAgcHJpb3IgdG8gaXRzIGJlaW5nIHBhc3NlZCBpbiBoZXJlLiAgSXQgYXNzdW1lcyB0aGF0IHBhcmVudGhlc2VzIGFyZQorICAgICAgICAgICAgLy8gICBiYWxhbmNlZCwgYWxsIGxpdGVyYWwgY2hhcmFjdGVycyBhcmUgZW5jbG9zZWQgaW4gW10gYW5kIHR1cm5lZCBpbnRvIGNhdGVnb3J5CisgICAgICAgICAgICAvLyAgIG51bWJlcnMsIHRoYXQgdGhlcmUgYXJlIG5vIGlsbGVnYWwgY2hhcmFjdGVycyBvciBjaGFyYWN0ZXIgc2VxdWVuY2VzLCBhbmQgc28KKyAgICAgICAgICAgIC8vICAgb24uICBWaW9sYXRpb24gb2YgdGhlc2UgaW52YXJpYW50cyB3aWxsIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW9yLgorICAgICAgICAgICAgLy8gICAtIEl0J2QgcHJvYmFibHkgYmUgYmV0dGVyIHRvIHVzZSBsaW5rZWQgbGlzdHMgcmF0aGVyIHRoYW4gVmVjdG9yIGFuZCBTdGFjaworICAgICAgICAgICAgLy8gICB0byBtYWludGFpbiB0aGUgZGVjaXNpb24gcG9pbnQgbGlzdCBhbmQgc3RhY2suICBJIHdlbnQgZm9yIHNpbXBsaWNpdHkgaW4KKyAgICAgICAgICAgIC8vICAgdGhpcyBpbml0aWFsIGltcGxlbWVudGF0aW9uLiAgSWYgcGVyZm9ybWFuY2UgaXMgY3JpdGljYWwgZW5vdWdoLCB3ZSBjYW4gZ28KKyAgICAgICAgICAgIC8vICAgYmFjayBhbmQgZml4IHRoaXMgbGF0ZXIuCisgICAgICAgICAgICAvLyAgIC1UaGVyZSBhcmUgYSBudW1iZXIgb2YgaW1wb3J0YW50IGxpbWl0YXRpb25zIG9uIHRoZSAqPyB0b2tlbi4gIEl0IGRvZXMgbm90IHdvcmsKKyAgICAgICAgICAgIC8vICAgcmlnaHQgd2hlbiBmb2xsb3dlZCBieSBhIHJlcGVhdGluZyBjaGFyYWN0ZXIgc2VxdWVuY2UgKGUuZy4sICIuKj8oYWJjKSoiKQorICAgICAgICAgICAgLy8gICAoYWx0aG91Z2ggaXQgZG9lcyB3b3JrIHJpZ2h0IHdoZW4gZm9sbG93ZWQgYnkgYSBzaW5nbGUgcmVwZWF0aW5nIGNoYXJhY3RlcikuCisgICAgICAgICAgICAvLyAgIEl0IHdpbGwgbm90IGFsd2F5cyB3b3JrIHJpZ2h0IHdoZW4gbmVzdGVkIGluIHBhcmVudGhlc2VzIG9yIGJyYWNlcyAoYWx0aG91Z2gKKyAgICAgICAgICAgIC8vICAgc29tZXRpbWVzIGl0IHdpbGwpLiAgSXQgYWxzbyB3aWxsIG5vdCB3b3JrIHJpZ2h0IGlmIHRoZSBncm91cCBvZiByZXBlYXRpbmcKKyAgICAgICAgICAgIC8vICAgY2hhcmFjdGVycyBhbmQgdGhlIGdyb3VwIG9mIGNoYXJhY3RlcnMgdGhhdCBmb2xsb3dzIG92ZXJsYXAgcGFydGlhbGx5CisgICAgICAgICAgICAvLyAgIChlLmcuLCAiW2EtZ10qP1tlLWpdIikuICBOb25lIG9mIHRoZXNlIGNhcGFiaWxpdGVzIHdhcyBkZWVtZWQgbmVjZXNzYXJ5IGZvcgorICAgICAgICAgICAgLy8gICBkZXNjcmliaW5nIGJyZWFraW5nIHJ1bGVzIHdlIGtub3cgYWJvdXQsIHNvIHdlIGxlZnQgdGhlbSBvdXQgZm9yCisgICAgICAgICAgICAvLyAgIGV4cGVkaXRpb3VzbmVzcy4KKyAgICAgICAgICAgIC8vICAgLSBSdWxlcyBzdWNoIGFzICJbYS16XSo/YWJjOyIgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzICJbYS16XSo/YWEqYmM7Ii0tCisgICAgICAgICAgICAvLyAgIHRoYXQgaXMsIGlmIHRoZSBzdHJpbmcgZW5kcyBpbiAiYWFhYWJjIiwgdGhlIGJyZWFrIHdpbGwgZ28gYmVmb3JlIHRoZSBmaXJzdAorICAgICAgICAgICAgLy8gICAiYSIgcmF0aGVyIHRoYW4gdGhlIGxhc3Qgb25lLiAgQm90aCBvZiB0aGVzZSBhcmUgbGltaXRhdGlvbnMgaW4gdGhlIGRlc2lnbgorICAgICAgICAgICAgLy8gICBvZiBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGFuZCBub3QgbGltaXRhdGlvbnMgb2YgdGhlIHJ1bGUgcGFyc2VyLgorCisgICAgICAgICAgICBpbnQgcCA9IDA7CisgICAgICAgICAgICBpbnQgY3VycmVudFN0YXRlID0gMTsgICAvLyBkb24ndCB1c2Ugc3RhdGUgbnVtYmVyIDA7IDAgbWVhbnMgInN0b3AiCisgICAgICAgICAgICBpbnQgbGFzdFN0YXRlID0gY3VycmVudFN0YXRlOworICAgICAgICAgICAgU3RyaW5nIHBlbmRpbmdDaGFycyA9ICIiOworCisgICAgICAgICAgICBkZWNpc2lvblBvaW50U3RhY2sgPSBuZXcgU3RhY2soKTsKKyAgICAgICAgICAgIGRlY2lzaW9uUG9pbnRMaXN0ID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgbG9vcGluZ1N0YXRlcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgIHN0YXRlc1RvQmFja2ZpbGwgPSBuZXcgVmVjdG9yKCk7CisKKyAgICAgICAgICAgIHNob3J0W10gc3RhdGU7CisgICAgICAgICAgICBib29sZWFuIHNhd0Vhcmx5QnJlYWsgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gaWYgd2UncmUgYWRkaW5nIHJ1bGVzIHRvIHRoZSBiYWNrd2FyZCBzdGF0ZSB0YWJsZSwgbWFyayB0aGUgaW5pdGlhbCBzdGF0ZQorICAgICAgICAgICAgLy8gYXMgYSBsb29waW5nIHN0YXRlCisgICAgICAgICAgICBpZiAoIWZvcndhcmQpIHsKKyAgICAgICAgICAgICAgICBsb29waW5nU3RhdGVzLmFkZEVsZW1lbnQobmV3IEludGVnZXIoMSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBwdXQgdGhlIGN1cnJlbnQgc3RhdGUgb24gdGhlIGRlY2lzaW9uIHBvaW50IGxpc3QgYmVmb3JlIHdlIHN0YXJ0CisgICAgICAgICAgICBkZWNpc2lvblBvaW50TGlzdC5hZGRFbGVtZW50KG5ldyBJbnRlZ2VyKGN1cnJlbnRTdGF0ZSkpOyAvLyB3ZSB3YW50IGN1cnJlbnRTdGF0ZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmUgMSBoZXJlLi4uCisgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSB0ZW1wU3RhdGVUYWJsZS5zaXplKCkgLSAxOyAgIC8vIGJ1dCBhZnRlciB0aGF0LCB3ZSB3YW50IGl0IHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgbGVzcyB0aGFuIHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIG5leHQgc3RhdGUKKyAgICAgICAgICAgIHdoaWxlIChwIDwgcnVsZS5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGNoYXIgYyA9IHJ1bGUuY2hhckF0KHApOworICAgICAgICAgICAgICAgIGNsZWFyTG9vcGluZ1N0YXRlcyA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gdGhpcyBzZWN0aW9uIGhhbmRsZXMgbGl0ZXJhbCBjaGFyYWN0ZXJzLCBlc2NhcGVkIGNoYXJhY3RlcnMgKHdoaWNoIGFyZQorICAgICAgICAgICAgICAgIC8vIGVmZmVjdGl2ZWx5IGxpdGVyYWwgY2hhcmFjdGVycyB0b28pLCB0aGUgLiB0b2tlbiwgYW5kIFtdIGV4cHJlc3Npb25zCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1snCisgICAgICAgICAgICAgICAgICAgIHx8IGMgPT0gJ1xcJworICAgICAgICAgICAgICAgICAgICB8fCBDaGFyYWN0ZXIuaXNMZXR0ZXIoYykKKyAgICAgICAgICAgICAgICAgICAgfHwgQ2hhcmFjdGVyLmlzRGlnaXQoYykKKyAgICAgICAgICAgICAgICAgICAgfHwgYyA8ICcgJworICAgICAgICAgICAgICAgICAgICB8fCBjID09ICcuJworICAgICAgICAgICAgICAgICAgICB8fCBjID49ICdcdTAwN2YnKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgbm90IG9uIGEgcGVyaW9kLCBpc29sYXRlIHRoZSBleHByZXNzaW9uIGFuZCBsb29rIHVwCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGNhdGVnb3J5IGxpc3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcSA9IHA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIG9uIGEgYmFja3NsYXNoLCB0aGUgZXhwcmVzc2lvbiBpcyB0aGUgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGUgYmFja3NsYXNoCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHAgKyAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgb24gYW4gb3BlbmluZyBicmFja2V0LCBzY2FuIHRvIHRoZSBjbG9zaW5nIGJyYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGlzb2xhdGUgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ1snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJyYWNrZXRMZXZlbCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJyYWNrZXRMZXZlbCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gcnVsZS5jaGFyQXQocSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdbJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyticmFja2V0TGV2ZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tYnJhY2tldExldmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCB0aGUgZXhwcmVzc2lvbiBpcyBqdXN0IHRoZSBjaGFyYWN0ZXIgaXRzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgdXAgdGhlIGNhdGVnb3J5IGxpc3QgZm9yIHRoZSBleHByZXNzaW9uIGFuZCBzdG9yZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gcGVuZGluZ0NoYXJzCisgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nQ2hhcnMgPSAoU3RyaW5nKWV4cHJlc3Npb25zLmdldChydWxlLnN1YnN0cmluZyhwLCBxKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgdGhlIGN1cnJlbnQgcG9zaXRpb24gcGFzdCB0aGUgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHEgLSAxOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGNoYXJhY3RlciB3ZSdyZSBvbiBpcyBhIHBlcmlvZCwgd2UgZW5kIHVwIGRvd24gaGVyZQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dOdW0gPSAoKEludGVnZXIpZGVjaXNpb25Qb2ludExpc3QubGFzdEVsZW1lbnQoKSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gKHNob3J0W10pdGVtcFN0YXRlVGFibGUuZWxlbWVudEF0KHJvd051bSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwZXJpb2QgaXMgZm9sbG93ZWQgYnkgYW4gYXN0ZXJpc2ssIHRoZW4ganVzdCBzZXQgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRlIHRvIGxvb3AgYmFjayBvbiBpdHNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwICsgMSA8IHJ1bGUubGVuZ3RoKCkgJiYgcnVsZS5jaGFyQXQocCArIDEpID09ICcqJyAmJiBzdGF0ZVswXSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb25Qb2ludExpc3QuYWRkRWxlbWVudChuZXcgSW50ZWdlcihzdGF0ZVswXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdDaGFycyA9ICIiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCArIDEgPCBydWxlLmxlbmd0aCgpICYmIHJ1bGUuY2hhckF0KHAgKyAxKSA9PSAnPycpIHsKKy8vU3lzdGVtLm91dC5wcmludGxuKCJTYXcgKj8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9vcGluZ1N0YXRlcyhkZWNpc2lvblBvaW50TGlzdCwgZGVjaXNpb25Qb2ludExpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLy9TeXN0ZW0ub3V0LnByaW50bG4oIlNhdyAuKiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGZhYnJpY2F0ZSBhIGNhdGVnb3J5IGxpc3QgKCJwZW5kaW5nQ2hhcnMiKSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBldmVyeSBjYXRlZ29yeSBpbiBpdAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHRlbXAgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DYXRlZ29yaWVzOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuYXBwZW5kKChjaGFyKShpICsgMHgxMDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nQ2hhcnMgPSB0ZW1wLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyB3ZSdsbCBlbmQgdXAgaW4gaGVyZSBmb3IgYWxsIGV4cHJlc3Npb25zIGV4Y2VwdCBmb3IgLiosIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwtY2FzZWQgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdDaGFycy5sZW5ndGgoKSAhPSAwKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBleHByZXNzaW9uIGlzIGZvbGxvd2VkIGJ5IGFuIGFzdGVyaXNrIG9yIGEgcXVlc3Rpb24gbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0aGVuIHB1c2ggYSBjb3B5IG9mIHRoZSBjdXJyZW50IGRlY2lzaW9uIHBvaW50IGxpc3Qgb250byB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwICsgMSA8IHJ1bGUubGVuZ3RoKCkgJiYgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUuY2hhckF0KHAgKyAxKSA9PSAnKicgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLmNoYXJBdChwICsgMSkgPT0gJz8nCisgICAgICAgICAgICAgICAgICAgICAgICApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb25Qb2ludFN0YWNrLnB1c2goZGVjaXNpb25Qb2ludExpc3QuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBzdGF0ZSwgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIHN0YXRlcyB0byBiYWNrZmlsbAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBsb29waW5nIHN0YXRlcyB0byB3b3JyeSBhYm91dCwgc2V0IGl0cyAiZG9uJ3QgbWFrZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWUgYW4gYWNjZXB0aW5nIHN0YXRlIiBmbGFnIGlmIHdlJ3ZlIHNlZW4gYSBzbGFzaCwgYW5kIGFkZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgdG8gdGhlIGVuZCBvZiB0aGUgc3RhdGUgdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXdTdGF0ZSA9IHRlbXBTdGF0ZVRhYmxlLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb29waW5nU3RhdGVzLnNpemUoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzVG9CYWNrZmlsbC5hZGRFbGVtZW50KG5ldyBJbnRlZ2VyKG5ld1N0YXRlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IG5ldyBzaG9ydFtudW1DYXRlZ29yaWVzICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2F3RWFybHlCcmVhaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW251bUNhdGVnb3JpZXNdID0gRE9OVF9MT09QX0ZMQUc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhdGVUYWJsZS5hZGRFbGVtZW50KHN0YXRlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGV2ZXJ5Ym9keSBpbiB0aGUgZGVjaXNpb24gcG9pbnQgbGlzdCB0byBwb2ludCB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBzdGF0ZSAodGhpcyBhbHNvIHBlcmZvcm1zIGFsbCB0aGUgcmVjb25jaWxpYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWRlZCB0byBtYWtlIHRoZSB0YWJsZSBkZXRlcm1pbmlzdGljKSwgdGhlbiBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY2lzaW9uIHBvaW50IGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlVGFibGUoZGVjaXNpb25Qb2ludExpc3QsIHBlbmRpbmdDaGFycywgKHNob3J0KW5ld1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9pbnRMaXN0LnJlbW92ZUFsbEVsZW1lbnRzKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBhbGwgc3RhdGVzIGNyZWF0ZWQgc2luY2UgdGhlIGxhc3QgbGl0ZXJhbCBjaGFyYWN0ZXIgd2UndmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZW4gdG8gdGhlIGRlY2lzaW9uIHBvaW50IGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdGF0ZSA9IGN1cnJlbnRTdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnRTdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpc2lvblBvaW50TGlzdC5hZGRFbGVtZW50KG5ldyBJbnRlZ2VyKGN1cnJlbnRTdGF0ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudFN0YXRlICsgMSA8IHRlbXBTdGF0ZVRhYmxlLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBhICogb3IgYSArIGRlbm90ZXMgYSByZXBlYXRpbmcgY2hhcmFjdGVyIG9yIGdyb3VwLCBhbmQgYSA/IGRlbm90ZXMgYW4KKyAgICAgICAgICAgICAgICAvLyBvcHRpb25hbCBjaGFyYWN0ZXIgZ3JvdXAuICgqLCArIGFuZCA/IGFmdGVyICgpIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYmVsb3cuKQorICAgICAgICAgICAgICAgIGlmIChjID09ICcrJyB8fCBjID09ICcqJyB8fCBjID09ICc/JykgeworICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZXJlJ3MgYSAqIG9yIGEgKywgdXBkYXRlIHRoZSBjdXJyZW50IHN0YXRlIHRvIGxvb3AgYmFjayBvbiBpdHNlbGYKKyAgICAgICAgICAgICAgICAgICAgLy8gb24gdGhlIGNoYXJhY3RlciBjYXRlZ29yaWVzIHRoYXQgY2F1c2VkIHVzIHRvIGVudGVyIHRoaXMgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJyonIHx8IGMgPT0gJysnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB3ZSBwcm9jZXNzIG9uZSBzdGF0ZSBhdCBhIHRpbWUgYmVjYXVzZSB1cGRhdGVTdGF0ZVRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXkgYWRkIG5ldyBzdGF0ZXMsIGFuZCB3ZSB3YW50IHRvIHByb2Nlc3MgdGhlbSBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IGxhc3RTdGF0ZSArIDE7IGkgPCB0ZW1wU3RhdGVUYWJsZS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvciB0ZW1wID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuYWRkRWxlbWVudChuZXcgSW50ZWdlcihpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVUYWJsZSh0ZW1wLCBwZW5kaW5nQ2hhcnMsIChzaG9ydCkobGFzdFN0YXRlICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBqdXN0IGFkZGVkIGFueSBuZXcgc3RhdGVzLCBhZGQgdGhlbSB0byB0aGUgZGVjaXNvbiBwb2ludCBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byBhdm9pZCBhZGRpbmcgbmV3IHN0YXRlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY2lzaW9uIHBvaW50IGxpc3QgaW4gbW9yZSB0aGFuIG9uZSBwbGFjZS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRTdGF0ZSArIDEgPCB0ZW1wU3RhdGVUYWJsZS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpc2lvblBvaW50TGlzdC5hZGRFbGVtZW50KG5ldyBJbnRlZ2VyKCsrY3VycmVudFN0YXRlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBmb3IgKiBhbmQgPyBwb3AgdGhlIHRvcCBlbGVtZW50IG9mZiB0aGUgZGVjaXNpb24gcG9pbnQgc3RhY2sgYW5kIG1lcmdlCisgICAgICAgICAgICAgICAgICAgIC8vIGl0IHdpdGggdGhlIGN1cnJlbnQgZGVjaXNpb24gcG9pbnQgbGlzdCAodGhpcyBjYXVzZXMgdGhlIGRpdmVyZ2VudAorICAgICAgICAgICAgICAgICAgICAvLyBwYXRocyB0aHJvdWdoIHRoZSBzdGF0ZSB0YWJsZSB0byBjb21lIHRvZ2V0aGVyIGFnYWluIG9uIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgICAgIC8vIG5ldyBzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJyonIHx8IGMgPT0gJz8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IgdGVtcCA9IChWZWN0b3IpZGVjaXNpb25Qb2ludFN0YWNrLnBvcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNpc2lvblBvaW50TGlzdC5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmFkZEVsZW1lbnQoZGVjaXNpb25Qb2ludExpc3QuZWxlbWVudEF0KGkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9pbnRMaXN0ID0gdGVtcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSA/IGFmdGVyIGEgKiBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgKiBpbiBjYXNlcyB3aGVyZSB0aGVyZSBpcyBvdmVybGFwCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IHJlcGVhdCBhbmQgdGhlIGNoYXJhY3RlcnMgd2hpY2ggZm9sbG93LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2l0aG91dCB0aGUgPywgYWxsIHN0YXRlcyBmb2xsb3dpbmcgdGhlIHJlcGVhdGluZyBzdGF0ZSwgdXAgdG8gYSBzdGF0ZSB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgcmVhY2hlZCBieSBhIGNoYXJhY3RlciB0aGF0IGRvZXNuJ3Qgb3ZlcmxhcCwgd2lsbCBsb29wIGJhY2sgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGVhdGluZyBzdGF0ZS4gIFdpdGggdGhlID8sIHRoZSBtYXJrIHN0YXRlcyBmb2xsb3dpbmcgdGhlICo/IERPTidUIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2sgaW50byB0aGUgcmVwZWF0aW5nIHN0YXRlLiAgVGh1cywgIlthLXpdKnh5eiIgd2lsbCBtYXRjaCB0aGUgbG9uZ2VzdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VxdWVuY2Ugb2YgbGV0dGVycyB0aGF0IGVuZHMgaW4gInh5eiwiIHdoaWxlICJbYS16XSo/IHdpbGwgbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBfc2hvcnRlc3RfIHNlcXVlbmNlIG9mIGxldHRlcnMgdGhhdCBlbmRzIGluICJ4eXoiLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGV4dHJhIGJvb2trZWVwaW5nIHRvIGFjaGlldmUgdGhpcyBlZmZlY3QsIHNpbmNlIGV2ZXJ5dGhpbmcgZWxzZSB3b3JrcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSAibG9uZ2VzdCBwb3NzaWJsZSBtYXRjaCIgcHJpbmNpcGxlLiAgVGhlIGJhc2ljIHByaW5jaXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgdGhhdCB0cmFuc2l0aW9ucyBvdXQgb2YgYSBsb29waW5nIHN0YXRlIGFyZSB3cml0dGVuIGluIG92ZXIgdGhlIGxvb3BpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGluc3RlYWQgb2YgYmVpbmcgcmVjb25jaWxlZCwgYW5kIHRoYXQgd2UgY29weSB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29waW5nIHN0YXRlIGludG8gZW1wdHkgY2VsbHMgb2YgYWxsIG5vbi10ZXJtaW5hbCBzdGF0ZXMgdGhhdCBmb2xsb3cgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29waW5nIHN0YXRlLgorLy9TeXN0ZW0ub3V0LnByaW50bG4oImMgPSAiICsgYyArICIsIHAgPSAiICsgcCArICIsIHJ1bGUubGVuZ3RoKCkgPSAiICsgcnVsZS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKicgJiYgcCArIDEgPCBydWxlLmxlbmd0aCgpICYmIHJ1bGUuY2hhckF0KHAgKyAxKSA9PSAnPycpIHsKKy8vU3lzdGVtLm91dC5wcmludGxuKCJTYXcgKj8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb29waW5nU3RhdGVzKGRlY2lzaW9uUG9pbnRMaXN0LCBkZWNpc2lvblBvaW50TGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gYSAoIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLiAgUGFyZW50aGVzZXMgY2FuIGVpdGhlcgorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW4gc2V2ZXJhbCBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXIgc2VxdWVuY2VzIChpLmUuLCAiKGFifGNkfGVmKSIpLCBvcgorICAgICAgICAgICAgICAgIC8vIHRoZXkgY2FuIGNvbnRhaW4gYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgY2FuIHJlcGVhdCAoaS5lLiwgIihhYmMpKiIpLiAgVGh1cywKKyAgICAgICAgICAgICAgICAvLyBBICgpIGdyb3VwIGNhbiBoYXZlIG11bHRpcGxlIGVudHJ5IGFuZCBleGl0IHBvaW50cy4gIFRvIGtlZXAgdHJhY2sgb2YgdGhpcywKKyAgICAgICAgICAgICAgICAvLyB3ZSByZXNlcnZlIFRXTyBzcG90cyBvbiB0aGUgZGVjaXNpb24tcG9pbnQgc3RhY2suICBUaGUgdG9wIG9mIHRoZSBzdGFjayBpcworICAgICAgICAgICAgICAgIC8vIHRoZSBsaXN0IG9mIGV4aXQgcG9pbnRzLCB3aGljaCBiZWNvbWVzIHRoZSBjdXJyZW50IGRlY2lzaW9uIHBvaW50IGxpc3Qgd2hlbgorICAgICAgICAgICAgICAgIC8vIHRoZSApIGlzIHJlYWNoZWQuICBUaGUgbmV4dCBlbnRyeSBkb3duIGlzIHRoZSBkZWNpc2lvbiBwb2ludCBsaXN0IGF0IHRoZQorICAgICAgICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgKCksIHdoaWNoIGJlY29tZXMgdGhlIGN1cnJlbnQgZGVjaXNpb24gcG9pbnQgbGlzdCBhdCBldmVyeQorICAgICAgICAgICAgICAgIC8vIGVudHJ5IHBvaW50LgorICAgICAgICAgICAgICAgIC8vIEluIGFkZGl0aW9uIHRvIGtlZXBpbmcgdHJhY2sgb2YgdGhlIGV4aXQgcG9pbnRzIGFuZCB0aGUgYWN0aXZlIGRlY2lzaW9uCisgICAgICAgICAgICAgICAgLy8gcG9pbnRzIGJlZm9yZSB0aGUgKCAoaS5lLiwgdGhlIHBsYWNlcyBmcm9tIHdoaWNoIHRoZSAoKSBjYW4gYmUgZW50ZXJlZCksCisgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBlbnRyeSBwb2ludHMgaW4gY2FzZSB0aGUgZXhwcmVzc2lvbiBsb29wcworICAgICAgICAgICAgICAgIC8vIChpLmUuLCBpcyBmb2xsb3dlZCBieSAqKS4gIFdlIGRvIHRoYXQgYnkgY3JlYXRpbmcgYSBkdW1teSBzdGF0ZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBzdGF0ZSB0YWJsZSBhbmQgYWRkaW5nIGl0IHRvIHRoZSBkZWNpc2lvbiBwb2ludCBsaXN0IChCRUZPUkUgaXQncyBkdXBsaWNhdGVkCisgICAgICAgICAgICAgICAgLy8gb24gdGhlIHN0YWNrKS4gIE5vYm9keSBwb2ludHMgdG8gdGhpcyBzdGF0ZSwgc28gaXQnbGwgZ2V0IG9wdGltaXplZCBvdXQKKyAgICAgICAgICAgICAgICAvLyBhdCB0aGUgZW5kLiAgSXQgZXhpc3RzIG9ubHkgdG8gaG9sZCB0aGUgZW50cnkgcG9pbnRzIGluIGNhc2UgdGhlICgpCisgICAgICAgICAgICAgICAgLy8gZXhwcmVzc2lvbiBsb29wcy4KKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKCcpIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBhZGQgYSBuZXcgc3RhdGUgdG8gdGhlIHN0YXRlIHRhYmxlIHRvIGhvbGQgdGhlIGVudHJ5IHBvaW50cyBpbnRvCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAoKSBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIHRlbXBTdGF0ZVRhYmxlLmFkZEVsZW1lbnQobmV3IHNob3J0W251bUNhdGVnb3JpZXMgKyAxXSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBhZGp1c3QgbGFzdFN0YXRlIGFuZCBjdXJyZW50U3RhdGUgdG8gYWNjb3VudCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIG5ldyBkdW1teSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICBsYXN0U3RhdGUgPSBjdXJyZW50U3RhdGU7CisgICAgICAgICAgICAgICAgICAgICsrY3VycmVudFN0YXRlOworCisgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgY3VycmVudCBzdGF0ZSB0byB0aGUgZGVjaXNpb24gcG9pbnQgbGlzdCAoYWRkIGl0IGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBCRUdJTk5JTkcgc28gd2UgY2FuIGZpbmQgaXQgbGF0ZXIpCisgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9pbnRMaXN0Lmluc2VydEVsZW1lbnRBdChuZXcgSW50ZWdlcihjdXJyZW50U3RhdGUpLCAwKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBmaW5hbGx5LCBwdXNoIGEgY29weSBvZiB0aGUgY3VycmVudCBkZWNpc2lvbiBwb2ludCBsaXN0IG9udG8gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHN0YWNrICh0aGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZGVjaXNpb24gcG9pbnQgbGlzdCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlICgpIGV4cHJlc3Npb24pLCBmb2xsb3dlZCBieSBhbiBlbXB0eSBkZWNpc2lvbiBwb2ludCBsaXN0CisgICAgICAgICAgICAgICAgICAgIC8vICh0aGlzIHdpbGwgaG9sZCB0aGUgZXhpdCBwb2ludHMpCisgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9pbnRTdGFjay5wdXNoKGRlY2lzaW9uUG9pbnRMaXN0LmNsb25lKCkpOworICAgICAgICAgICAgICAgICAgICBkZWNpc2lvblBvaW50U3RhY2sucHVzaChuZXcgVmVjdG9yKCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGEgfCBzZXBhcmF0ZXMgYWx0ZXJuYXRpdmUgY2hhcmFjdGVyIHNlcXVlbmNlcyBpbiBhICgpIGV4cHJlc3Npb24uICBXaGVuCisgICAgICAgICAgICAgICAgLy8gYSB8IGlzIGVuY291bnRlcmVkLCB3ZSBhZGQgdGhlIGN1cnJlbnQgZGVjaXNpb24gcG9pbnQgbGlzdCB0byB0aGUgZXhpdC1wb2ludAorICAgICAgICAgICAgICAgIC8vIGxpc3QsIGFuZCByZXN0b3JlIHRoZSBkZWNpc2lvbiBwb2ludCBsaXN0IHRvIGl0cyBzdGF0ZSBwcmlvciB0byB0aGUgKC4KKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnfCcpIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBwaWNrIG91dCB0aGUgdG9wIHR3byBkZWNpc2lvbiBwb2ludCBsaXN0cyBvbiB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yIG9uZURvd24gPSAoVmVjdG9yKWRlY2lzaW9uUG9pbnRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yIHR3b0Rvd24gPSAoVmVjdG9yKWRlY2lzaW9uUG9pbnRTdGFjay5wZWVrKCk7CisgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9pbnRTdGFjay5wdXNoKG9uZURvd24pOworCisgICAgICAgICAgICAgICAgICAgIC8vIGFwcGVuZCB0aGUgY3VycmVudCBkZWNpc2lvbiBwb2ludCBsaXN0IHRvIHRoZSBsaXN0IGJlbG93IGl0CisgICAgICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBzdGFjayAodGhlIGxpc3Qgb2YgZXhpdCBwb2ludHMpLCBhbmQgcmVzdG9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBkZWNpc2lvbiBwb2ludCBsaXN0IHRvIGl0cyBzdGF0ZSBiZWZvcmUgdGhlICgpIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNpc2lvblBvaW50TGlzdC5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uZURvd24uYWRkRWxlbWVudChkZWNpc2lvblBvaW50TGlzdC5lbGVtZW50QXQoaSkpOworICAgICAgICAgICAgICAgICAgICBkZWNpc2lvblBvaW50TGlzdCA9IChWZWN0b3IpdHdvRG93bi5jbG9uZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGEgKSBtYXJrcyB0aGUgZW5kIG9mIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy4gIFdlIGRvIG9uZSBvZiB0d28gdGhpbmdzCisgICAgICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHNlcXVlbmNlIHJlcGVhdHMgKGkuZS4sIHdoZXRoZXIgdGhlICkgaXMgZm9sbG93ZWQKKyAgICAgICAgICAgICAgICAvLyBieSAqKTogIElmIHRoZSBzZXF1ZW5jZSBkb2Vzbid0IHJlcGVhdCwgdGhlbiB0aGUgZXhpdC1wb2ludCBsaXN0IGlzIG1lcmdlZAorICAgICAgICAgICAgICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgZGVjaXNpb24gcG9pbnQgbGlzdCBhbmQgdGhlIGRlY2lzaW9uIHBvaW50IGxpc3QgZnJvbSBiZWZvcmUKKyAgICAgICAgICAgICAgICAvLyB0aGUgKCkgaXMgdGhyb3duIGF3YXkuICBJZiB0aGUgc2VxdWVuY2UgZG9lcyByZXBlYXQsIHRoZW4gd2UgZmlzaCBvdXQgdGhlCisgICAgICAgICAgICAgICAgLy8gc3RhdGUgd2Ugd2VyZSBpbiBiZWZvcmUgdGhlICggYW5kIGNvcHkgYWxsIG9mIGl0cyBmb3J3YXJkIHRyYW5zaXRpb25zCisgICAgICAgICAgICAgICAgLy8gKGkuZS4sIGV2ZXJ5IHRyYW5zaXRpb24gYWRkZWQgYnkgdGhlICgpIGV4cHJlc3Npb24pIGludG8gZXZlcnkgc3RhdGUgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gZXhpdC1wb2ludCBsaXN0IGFuZCB0aGUgY3VycmVudCBkZWNpc2lvbiBwb2ludCBsaXN0LiAgVGhlIGN1cnJlbnQgZGVjaXNpb24KKyAgICAgICAgICAgICAgICAvLyBwb2ludCBsaXN0IGlzIHRoZW4gbWVyZ2VkIHdpdGggYm90aCB0aGUgZXhpdC1wb2ludCBsaXN0IEFORCB0aGUgc2F2ZWQgdmVyc2lvbgorICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBkZWNpc2lvbiBwb2ludCBsaXN0IGZyb20gYmVmb3JlIHRoZSAoKS4gIFRoZW4gd2UgdGhyb3cgb3V0IHRoZSAqLgorICAgICAgICAgICAgICAgIGlmIChjID09ICcpJykgeworCisgICAgICAgICAgICAgICAgICAgIC8vIHB1bGwgdGhlIGV4aXQgcG9pbnQgbGlzdCBvZmYgdGhlIHN0YWNrLCBtZXJnZSBpdCB3aXRoIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgIC8vIGRlY2lzaW9uIHBvaW50IGxpc3QsIGFuZCBtYWtlIHRoZSBtZXJnZWQgdmVyc2lvbiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAvLyBkZWNpc2lvbiBwb2ludCBsaXN0CisgICAgICAgICAgICAgICAgICAgIFZlY3RvciBleGl0UG9pbnRzID0gKFZlY3RvcilkZWNpc2lvblBvaW50U3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjaXNpb25Qb2ludExpc3Quc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBleGl0UG9pbnRzLmFkZEVsZW1lbnQoZGVjaXNpb25Qb2ludExpc3QuZWxlbWVudEF0KGkpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVjaXNpb25Qb2ludExpc3QgPSBleGl0UG9pbnRzOworCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSApIGlzbid0IGZvbGxvd2VkIGJ5IGEgKiwgKyBvciA/LCB0aGVuIGFsbCB3ZSBoYXZlIHRvIGRvIGlzIHRocm93CisgICAgICAgICAgICAgICAgICAgIC8vIGF3YXkgdGhlIG90aGVyIGxpc3Qgb24gdGhlIGRlY2lzaW9uIHBvaW50IHN0YWNrLCBhbmQgd2UncmUgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiAocCArIDEgPj0gcnVsZS5sZW5ndGgoKSB8fCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5jaGFyQXQocCArIDEpICE9ICcqJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUuY2hhckF0KHAgKyAxKSAhPSAnKycgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLmNoYXJBdChwICsgMSkgIT0gJz8nKQorICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9pbnRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBpZiB0aGUgc2VxdWVuY2UgaXMgY29uZGl0aW9uYWwgb3IgaXQgcmVwZWF0cywKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIGxvdCBtb3JlIHdvcmsgdG8gZG8uLi4KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBleGl0UG9pbnRzIGFuZCBkZWNpc2lvblBvaW50TGlzdCBoYXZlIHRvIHBvaW50IHRvIGVxdWl2YWxlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZlY3RvcnMsIGJ1dCBub3QgdGhlIFNBTUUgdmVjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICBleGl0UG9pbnRzID0gKFZlY3RvcilkZWNpc2lvblBvaW50TGlzdC5jbG9uZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3AgdGhlIG9yaWdpbmFsIGRlY2lzaW9uIHBvaW50IGxpc3Qgb2ZmIHRoZSBzdGFjaworICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yIHRlbXAgPSAoVmVjdG9yKWRlY2lzaW9uUG9pbnRTdGFjay5wb3AoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc3F1aXJyZWxlZCBhd2F5IHRoZSByb3cgbnVtYmVyIG9mIG91ciBlbnRyeSBwb2ludCBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvcmlnaW5hbCBkZWNpc2lvbiBwb2ludCBsaXN0LiAgRmlzaAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBzdGF0ZSBudW1iZXIgb3V0IGFuZCByZXRyaWV2ZSB0aGUgZW50cnkgcG9pbnQgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlbXBTdGF0ZU51bSA9ICgoSW50ZWdlcil0ZW1wLmZpcnN0RWxlbWVudCgpKS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRbXSB0ZW1wU3RhdGUgPSAoc2hvcnRbXSl0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQodGVtcFN0YXRlTnVtKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgdGhlIG9yaWdpbmFsIGRlY2lzaW9uIHBvaW50IGxpc3Qgd2l0aCB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVjaXNpb24gcG9pbnQgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuY2hhckF0KHAgKyAxKSA9PSAnPycgfHwgcnVsZS5jaGFyQXQocCArIDEpID09ICcqJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjaXNpb25Qb2ludExpc3Quc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuYWRkRWxlbWVudChkZWNpc2lvblBvaW50TGlzdC5lbGVtZW50QXQoaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uUG9pbnRMaXN0ID0gdGVtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWxseSwgZm9yICogYW5kICsgY29weSBldmVyeSBmb3J3YXJkIHJlZmVyZW5jZSBmcm9tIHRoZSBlbnRyeSBwb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlzdCBpbnRvIGV2ZXJ5IHN0YXRlIGluIHRoZSBuZXcgZGVjaXNpb24gcG9pbnQgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuY2hhckF0KHAgKyAxKSA9PSAnKycgfHwgcnVsZS5jaGFyQXQocCArIDEpID09ICcqJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcFN0YXRlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wU3RhdGVbaV0gPiB0ZW1wU3RhdGVOdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlVGFibGUoZXhpdFBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENoYXJhY3RlcigoY2hhcikoaSArIDB4MTAwKSkudG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFN0YXRlW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGxhc3RTdGF0ZSBhbmQgY3VycmVudFN0YXRlLCBhbmQgdGhyb3cgYXdheSB0aGUgKiwgKywgb3IgPworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0YXRlID0gY3VycmVudFN0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gdGVtcFN0YXRlVGFibGUuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGEgLyBtYXJrcyB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIGJyZWFrIGlzIHRvIGdvIGlmIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UKKyAgICAgICAgICAgICAgICAvLyBtYXRjaGVzIHRoaXMgcnVsZS4gIFdlIHVwZGF0ZSB0aGUgZmxhZyB3b3JkIG9mIGV2ZXJ5IHN0YXRlIG9uIHRoZSBkZWNpc2lvbgorICAgICAgICAgICAgICAgIC8vIHBvaW50IGxpc3QgdG8gbWFyayB0aGVtIGFzIGVuZGluZyBzdGF0ZXMsIGFuZCB0YWtlIG5vdGUgb2YgdGhlIGZhY3QgdGhhdAorICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIHNlZW4gdGhlIHNsYXNoCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgIHNhd0Vhcmx5QnJlYWsgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2lzaW9uUG9pbnRMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IChzaG9ydFtdKXRlbXBTdGF0ZVRhYmxlLmVsZW1lbnRBdCgoKEludGVnZXIpZGVjaXNpb25Qb2ludExpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudEF0KGkpKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW251bUNhdGVnb3JpZXNdIHw9IExPT0tBSEVBRF9TVEFURV9GTEFHOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUgd2l0aG91dCBleGVjdXRpbmcgYW55IG9mIHRoZSBhYm92ZSBjbGF1c2VzLCB3ZSBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyBzeW50YXggZXJyb3IuICBIb3dldmVyLCBmb3Igbm93IHdlIGp1c3QgaWdub3JlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgLy8gYW5kIG1vdmUgb24KKy8qCitkZWJ1Z1ByaW50bG4oIj09PT1QYXJzZWQgXCIiICsgcnVsZS5zdWJzdHJpbmcoMCwgcCArIDEpICsgIlwiLi4uIik7CitTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgIGN1cnJlbnRTdGF0ZSA9ICIgKyBjdXJyZW50U3RhdGUpOworZGVidWdQcmludFZlY3Rvck9mVmVjdG9ycygiICAgICAgZGVjaXNpb25Qb2ludFN0YWNrOiIsICIgICAgICAgICIsIGRlY2lzaW9uUG9pbnRTdGFjayk7CitkZWJ1Z1ByaW50VmVjdG9yKCIgICAgICAgICIsIGRlY2lzaW9uUG9pbnRMaXN0KTsKK2RlYnVnUHJpbnRWZWN0b3IoIiAgICAgIGxvb3BpbmdTdGF0ZXMgPSAiLCBsb29waW5nU3RhdGVzKTsKK2RlYnVnUHJpbnRWZWN0b3IoIiAgICAgIHN0YXRlc1RvQmFja2ZpbGwgPSAiLCBzdGF0ZXNUb0JhY2tmaWxsKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiICAgICAgc2F3RWFybHlCcmVhayA9ICIgKyBzYXdFYXJseUJyZWFrKTsKK2RlYnVnUHJpbnRUZW1wU3RhdGVUYWJsZSgpOworKi8KKworICAgICAgICAgICAgICAgIC8vIGNsZWFyTG9vcGluZ1N0YXRlcyBpcyBhIHNpZ25hbCBiYWNrIGZyb20gdXBkYXRlU3RhdGVUYWJsZSgpIHRoYXQgd2UndmUKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uZWQgdG8gYSBzdGF0ZSB0aGF0IHdvbid0IGxvb3AgYmFjayB0byB0aGUgY3VycmVudCBsb29waW5nCisgICAgICAgICAgICAgICAgLy8gc3RhdGUuICAoSW4gb3RoZXIgd29yZHMsIHdlJ3ZlIGdvdHRlbiB0byBhIHBvaW50IHdoZXJlIHdlIGNhbiBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAvLyBnbyBiYWNrIGludG8gYSAqPyB3ZSBzYXcgZWFybGllci4pICBDbGVhciBvdXQgdGhlIGxpc3Qgb2YgbG9vcGluZyBzdGF0ZXMKKyAgICAgICAgICAgICAgICAvLyBhbmQgYmFja2ZpbGwgYW55IHN0YXRlcyB0aGF0IG5lZWQgdG8gYmUgYmFja2ZpbGxlZC4KKyAgICAgICAgICAgICAgICBpZiAoY2xlYXJMb29waW5nU3RhdGVzKSB7CisgICAgICAgICAgICAgICAgICAgIHNldExvb3BpbmdTdGF0ZXMobnVsbCwgZGVjaXNpb25Qb2ludExpc3QpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyLCBub3cgdGhhdCB3ZSd2ZSBwcm9jZXNzZWQgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRoaXMgdGFrZXMgY2FyZSBvZiBiYWNrZmlsbGluZyBhbnkgc3RhdGVzIHRoYXQgc3RpbGwgbmVlZCB0byBiZSBiYWNrZmlsbGVkCisgICAgICAgICAgICBzZXRMb29waW5nU3RhdGVzKG51bGwsIGRlY2lzaW9uUG9pbnRMaXN0KTsKKworICAgICAgICAgICAgLy8gd2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHdlIGRvIGEgcG9zdHByb2Nlc3Npbmcgc3RlcCB0byBtYXJrIHRoZQorICAgICAgICAgICAgLy8gZW5kIHN0YXRlcy4gIFRoZSBkZWNpc2lvbiBwb2ludCBsaXN0IGNvbnRhaW5zIGV2ZXJ5IHN0YXRlIHRoYXQgY2FuIHRyYW5zaXRpb24KKyAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQgc3RhdGUtLSB0aGF0IGlzLCBldmVyeSBzdGF0ZSB0aGF0IGlzIHRoZSBsYXN0IHN0YXRlIGluIGEgc2VxdWVuY2UKKyAgICAgICAgICAgIC8vIHRoYXQgbWF0Y2hlcyB0aGUgcnVsZS4gIEFsbCBvZiB0aGVzZSBzdGF0ZXMgYXJlIGNvbnNpZGVyZWQgIm1hcmsgc3RhdGVzIgorICAgICAgICAgICAgLy8gb3IgImFjY2VwdGluZyBzdGF0ZXMiLS0gdGhhdCBpcywgc3RhdGVzIHRoYXQgY2F1c2UgdGhlIHBvc2l0aW9uIHJldHVybmVkIGZyb20KKyAgICAgICAgICAgIC8vIG5leHQoKSB0byBiZSB1cGRhdGVkLiAgQSBtYXJrIHN0YXRlIHJlcHJlc2VudHMgYSBwb3NzaWJsZSBicmVhayBwb3NpdGlvbi4KKyAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGxvb2sgYWhlYWQgYW5kIHJlbWVtYmVyIGhvdyBmYXIgdGhlIHJ1bGUgbWF0Y2hlZAorICAgICAgICAgICAgLy8gYmVmb3JlIGZvbGxvd2luZyB0aGUgbmV3IGJyYW5jaCAoc2VlIG5leHQoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisgICAgICAgICAgICAvLyBUaGUgdGVtcG9yYXJ5IHN0YXRlIHRhYmxlIGhhcyBhbiBleHRyYSAiZmxhZyBjb2x1bW4iIGF0IHRoZSBlbmQgd2hlcmUgdGhpcworICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24gaXMgc3RvcmVkLiAgV2UgbWFyayB0aGUgZW5kIHN0YXRlcyBieSBzZXR0aW5nIGEgZmxhZyBpbiB0aGVpcgorICAgICAgICAgICAgLy8gZmxhZyBjb2x1bW4uCisgICAgICAgICAgICAvLyBOb3cgaWYgd2Ugc2F3IHRoZSAvIGluIHRoZSBydWxlLCB0aGVuIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQgaXMgbG9va2FoZWFkCisgICAgICAgICAgICAvLyBtYXRlcmlhbCBhbmQgdGhlIGJyZWFrIHJlYWxseSBnb2VzIHdoZXJlIHRoZSBzbGFzaCBpcy4gIEluIHRoaXMgY2FzZSwKKyAgICAgICAgICAgIC8vIHdlIG1hcmsgdGhlc2Ugc3RhdGVzIGFzIEJPVEggYWNjZXB0aW5nIHN0YXRlcyBhbmQgbG9va2FoZWFkIHN0YXRlcy4gIFRoaXMKKyAgICAgICAgICAgIC8vIHNpZ25hbHMgdGhhdCB0aGVzZSBzdGF0ZXMgY2F1c2UgdGhlIGJyZWFrIHBvc2l0aW9uIHRvIGJlIHVwZGF0ZWQgdG8gdGhlCisgICAgICAgICAgICAvLyBwb3NpdGlvbiBvZiB0aGUgc2xhc2ggcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgYnJlYWsgcG9zaXRpb24uCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2lzaW9uUG9pbnRMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaW50IHJvd051bSA9ICgoSW50ZWdlcilkZWNpc2lvblBvaW50TGlzdC5lbGVtZW50QXQoaSkpLmludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAoc2hvcnRbXSl0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQocm93TnVtKTsKKyAgICAgICAgICAgICAgICBzdGF0ZVtudW1DYXRlZ29yaWVzXSB8PSBFTkRfU1RBVEVfRkxBRzsKKyAgICAgICAgICAgICAgICBpZiAoc2F3RWFybHlCcmVhaykgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZVtudW1DYXRlZ29yaWVzXSB8PSBMT09LQUhFQURfU1RBVEVfRkxBRzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisvKgorZGVidWdQcmludGxuKCI9PT09UGFyc2VkIFwiIiArIHJ1bGUgKyAiOyIpOworU3lzdGVtLm91dC5wcmludGxuKCk7CitTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgIGN1cnJlbnRTdGF0ZSA9ICIgKyBjdXJyZW50U3RhdGUpOworZGVidWdQcmludFZlY3Rvck9mVmVjdG9ycygiICAgICAgZGVjaXNpb25Qb2ludFN0YWNrOiIsICIgICAgICAgICIsIGRlY2lzaW9uUG9pbnRTdGFjayk7CitkZWJ1Z1ByaW50VmVjdG9yKCIgICAgICAgICIsIGRlY2lzaW9uUG9pbnRMaXN0KTsKK2RlYnVnUHJpbnRWZWN0b3IoIiAgICAgIGxvb3BpbmdTdGF0ZXMgPSAiLCBsb29waW5nU3RhdGVzKTsKK2RlYnVnUHJpbnRWZWN0b3IoIiAgICAgIHN0YXRlc1RvQmFja2ZpbGwgPSAiLCBzdGF0ZXNUb0JhY2tmaWxsKTsKK1N5c3RlbS5vdXQucHJpbnRsbigiICAgICAgc2F3RWFybHlCcmVhayA9ICIgKyBzYXdFYXJseUJyZWFrKTsKK2RlYnVnUHJpbnRUZW1wU3RhdGVUYWJsZSgpOworKi8KKyAgICAgICAgfQorCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVwZGF0ZSBlbnRyaWVzIGluIHRoZSBzdGF0ZSB0YWJsZSwgYW5kIG1lcmdlIHN0YXRlcyB3aGVuIG5lY2Vzc2FyeSB0byBrZWVwCisgICAgICAgICAqIHRoZSB0YWJsZSBkZXRlcm1pbmlzdGljLgorICAgICAgICAgKiBAcGFyYW0gcm93cyBUaGUgbGlzdCBvZiByb3dzIHRoYXQgbmVlZCB1cGRhdGluZyAodGhlIGRlY2lzaW9uIHBvaW50IGxpc3QpCisgICAgICAgICAqIEBwYXJhbSBwZW5kaW5nQ2hhcnMgQSBjaGFyYWN0ZXIgY2F0ZWdvcnkgbGlzdCwgZW5jb2RlZCBpbiBhIFN0cmluZy4gIFRoaXMgaXMgdGhlCisgICAgICAgICAqIGxpc3Qgb2YgdGhlIGNvbHVtbnMgdGhhdCBuZWVkIHVwZGF0aW5nLgorICAgICAgICAgKiBAcGFyYW0gbmV3VmFsdWUgVXBkYXRlIHRoZSBjZWxscyBzcGVjZmllZCBhYm92ZSB0byBjb250YWluIHRoaXMgdmFsdWUKKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTdGF0ZVRhYmxlKFZlY3RvciByb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGVuZGluZ0NoYXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBuZXdWYWx1ZSkgeworICAgICAgICAgICAgLy8gY3JlYXRlIGEgZHVtbXkgc3RhdGUgdGhhdCBoYXMgdGhlIHNwZWNpZmllZCByb3cgbnVtYmVyIChuZXdWYWx1ZSkgaW4KKyAgICAgICAgICAgIC8vIHRoZSBjZWxscyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZCAodGhvc2Ugc3BlY2lmaWVkIGJ5IHBlbmRpbmdDaGFycykKKyAgICAgICAgICAgIC8vIGFuZCAwIGluIHRoZSBvdGhlciBjZWxscworICAgICAgICAgICAgc2hvcnRbXSBuZXdWYWx1ZXMgPSBuZXcgc2hvcnRbbnVtQ2F0ZWdvcmllcyArIDFdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwZW5kaW5nQ2hhcnMubGVuZ3RoKCk7IGkrKykKKyAgICAgICAgICAgICAgICBuZXdWYWx1ZXNbKGludCkocGVuZGluZ0NoYXJzLmNoYXJBdChpKSkgLSAweDEwMF0gPSBuZXdWYWx1ZTsKKworICAgICAgICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbGlzdCBvZiByb3dzIHRvIHVwZGF0ZSwgYW5kIHVwZGF0ZSB0aGVtIGJ5IGNhbGxpbmcKKyAgICAgICAgICAgIC8vIG1lcmdlU3RhdGVzKCkgdG8gbWVyZ2UgdGhlbSB0aGUgdGhlIGR1bW15IHN0YXRlIHdlIGNyZWF0ZWQKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIG1lcmdlU3RhdGVzKCgoSW50ZWdlcilyb3dzLmVsZW1lbnRBdChpKSkuaW50VmFsdWUoKSwgbmV3VmFsdWVzLCByb3dzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcmVhbCB3b3JrIG9mIG1ha2luZyB0aGUgc3RhdGUgdGFibGUgZGV0ZXJtaW5pc3RpYyBoYXBwZW5zIGhlcmUuICBUaGlzIGZ1bmN0aW9uCisgICAgICAgICAqIG1lcmdlcyBhIHN0YXRlIGluIHRoZSBzdGF0ZSB0YWJsZSAoc3BlY2lmaWVkIGJ5IHJvd051bSkgd2l0aCBhIHN0YXRlIHRoYXQgaXMKKyAgICAgICAgICogcGFzc2VkIGluIChuZXdWYWx1ZXMpLiAgVGhlIGJhc2ljIHByb2Nlc3MgaXMgdG8gY29weSB0aGUgbm9uemVybyBjZWxscyBpbiBuZXdTdGF0ZXMKKyAgICAgICAgICogaW50byB0aGUgc3RhdGUgaW4gdGhlIHN0YXRlIHRhYmxlICh3ZSdsbCBjYWxsIHRoYXQgb2xkVmFsdWVzKS4gIElmIHRoZXJlJ3MgYQorICAgICAgICAgKiBjb2xsaXNpb24gKGkuZS4sIGlmIHRoZSBzYW1lIGNlbGwgaGFzIGEgbm9uemVybyB2YWx1ZSBpbiBib3RoIHN0YXRlcywgYW5kIGl0J3MKKyAgICAgICAgICogbm90IHRoZSBTQU1FIHZhbHVlKSwgdGhlbiB3ZSBoYXZlIHRvIHJlY29uY2lsZSB0aGUgY29sbGlzaW9uLiAgV2UgZG8gdGhpcyBieQorICAgICAgICAgKiBjcmVhdGluZyBhIG5ldyBzdGF0ZSwgYWRkaW5nIGl0IHRvIHRoZSBlbmQgb2YgdGhlIHN0YXRlIHRhYmxlLCBhbmQgdXNpbmcgdGhpcworICAgICAgICAgKiBmdW5jdGlvbiByZWN1cnNpdmVseSB0byBtZXJnZSB0aGUgb3JpZ2luYWwgdHdvIHN0YXRlcyBpbnRvIGEgc2luZ2xlLCBjb21iaW5lZAorICAgICAgICAgKiBzdGF0ZS4gIFRoaXMgcHJvY2VzcyBtYXkgaGFwcGVuIHJlY3Vyc2l2ZWx5IChpLmUuLCBlYWNoIHN1Y2Nlc3NpdmUgbGV2ZWwgbWF5CisgICAgICAgICAqIGludm9sdmUgY29sbGlzaW9ucykuICBUbyBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiwgd2Uga2VlcCBhIGxvZyBvZiBtZXJnZQorICAgICAgICAgKiBvcGVyYXRpb25zLiAgQW55IHRpbWUgd2UncmUgbWVyZ2luZyB0d28gc3RhdGVzIHdlJ3ZlIG1lcmdlZCBiZWZvcmUsIHdlIGNhbiBqdXN0CisgICAgICAgICAqIHN1cHBseSB0aGUgcm93IG51bWJlciBmb3IgdGhlIHJlc3VsdCBvZiB0aGF0IG1lcmdlIG9wZXJhdGlvbiByYXRoZXIgdGhhbiBjcmVhdGluZworICAgICAgICAgKiBhIG5ldyBzdGF0ZSBqdXN0IGxpa2UgaXQuCisgICAgICAgICAqIEBwYXJhbSByb3dOdW0gVGhlIHJvdyBudW1iZXIgaW4gdGhlIHN0YXRlIHRhYmxlIG9mIHRoZSBzdGF0ZSB0byBiZSB1cGRhdGVkCisgICAgICAgICAqIEBwYXJhbSBuZXdWYWx1ZXMgVGhlIHN0YXRlIHRvIG1lcmdlIGl0IHdpdGguCisgICAgICAgICAqIEBwYXJhbSByb3dzQmVpbmdVcGRhdGVkIEEgY29weSBvZiB0aGUgbGlzdCBvZiByb3dzIHBhc3NlZCB0byB1cGRhdGVTdGF0ZVRhYmxlKCkKKyAgICAgICAgICogKGl0c2VsZiBhIGNvcHkgb2YgdGhlIGRlY2lzaW9uIHBvaW50IGxpc3QgZnJvbSBwYXJzZVJ1bGUoKSkuICBOZXdseS1jcmVhdGVkCisgICAgICAgICAqIHN0YXRlcyBnZXQgYWRkZWQgdG8gdGhlIGRlY2lzaW9uIHBvaW50IGxpc3QgaWYgdGhlaXIgInBhcmVudHMiIHdlcmUgb24gaXQuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgbWVyZ2VTdGF0ZXMoaW50IHJvd051bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0W10gbmV3VmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yIHJvd3NCZWluZ1VwZGF0ZWQpIHsKKyAgICAgICAgICAgIHNob3J0W10gb2xkVmFsdWVzID0gKHNob3J0W10pKHRlbXBTdGF0ZVRhYmxlLmVsZW1lbnRBdChyb3dOdW0pKTsKKy8qCitTeXN0ZW0ub3V0LnByaW50KCIqKipNZXJnaW5nICIgKyByb3dOdW0gKyAiOiIpOworZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRWYWx1ZXMubGVuZ3RoOyBpKyspIFN5c3RlbS5vdXQucHJpbnQoIlx0IiArIG9sZFZhbHVlc1tpXSk7CitTeXN0ZW0ub3V0LnByaW50bG4oKTsKK1N5c3RlbS5vdXQucHJpbnQoIiAgICB3aXRoICAgXHQiKTsKK2ZvciAoaW50IGkgPSAwOyBpIDwgbmV3VmFsdWVzLmxlbmd0aDsgaSsrKSBTeXN0ZW0ub3V0LnByaW50KCJcdCIgKyBuZXdWYWx1ZXNbaV0pOworU3lzdGVtLm91dC5wcmludGxuKCk7CisqLworCisgICAgICAgICAgICBib29sZWFuIGlzTG9vcGluZ1N0YXRlID0gbG9vcGluZ1N0YXRlcy5jb250YWlucyhuZXcgSW50ZWdlcihyb3dOdW0pKTsKKworICAgICAgICAgICAgLy8gZm9yIGVhY2ggb2YgdGhlIGNlbGxzIGluIHRoZSByb3dzIHdlJ3JlIHJlY29uY2lsaW5nLCBkby4uLgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRWYWx1ZXMubGVuZ3RoOyBpKyspIHsKKworICAgICAgICAgICAgICAgIC8vIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZworICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZXNbaV0gPT0gbmV3VmFsdWVzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIG9sZFZhbHVlcyBpcyBhIGxvb3Bpbmcgc3RhdGUgYW5kIHRoZSBzdGF0ZSB0aGUgY3VycmVudCBjZWxsIHBvaW50cyB0bworICAgICAgICAgICAgICAgIC8vIGlzIHRvbywgdGhlbiB3ZSBjYW4ganVzdCBzdG9tcCBvdmVyIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoYXQgY2VsbCAoYW5kCisgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBjbGVhci1sb29waW5nLXN0YXRlcyBmbGFnIGlmIG5lY2Vzc2FyeSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0xvb3BpbmdTdGF0ZSAmJiBsb29waW5nU3RhdGVzLmNvbnRhaW5zKG5ldyBJbnRlZ2VyKG9sZFZhbHVlc1tpXSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZXNbaV0gIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZhbHVlc1tpXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJMb29waW5nU3RhdGVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlc1tpXSA9IG5ld1ZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNlbGwgaW4gb2xkVmFsdWVzIGlzIDAsIGNvcHkgaW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUKKyAgICAgICAgICAgICAgICAvLyBmcm9tIG5ld1ZhbHVlcworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9sZFZhbHVlc1tpXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlc1tpXSA9IG5ld1ZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCBjb2x1bW4gb2YgZWFjaCByb3cgaXMgdGhlIGZsYWcgY29sdW1uLiAgVGFrZSBjYXJlIHRvIG1lcmdlIHRoZQorICAgICAgICAgICAgICAgIC8vIGZsYWcgd29yZHMgY29ycmVjdGx5CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSBudW1DYXRlZ29yaWVzKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlc1tpXSA9IChzaG9ydCkoKG5ld1ZhbHVlc1tpXSAmIEFMTF9GTEFHUykgfCBvbGRWYWx1ZXNbaV0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIGJvdGggbmV3VmFsdWVzIGFuZCBvbGRWYWx1ZXMgaGF2ZSBhIG5vbnplcm8gdmFsdWUgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBjZWxsLCBhbmQgaXQgaXNuJ3QgdGhlIHNhbWUgdmFsdWUgYm90aCBwbGFjZXMuLi4KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvbGRWYWx1ZXNbaV0gIT0gMCAmJiBuZXdWYWx1ZXNbaV0gIT0gMCkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgdXAgdGhpcyBwYWlyIG9mIGNlbGwgdmFsdWVzIGluIHRoZSBtZXJnZSBsaXN0LiAgSWYgaXQncworICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCwgdXBkYXRlIHRoZSBjZWxsIGluIG9sZFZhbHVlcyB0byBwb2ludCB0byB0aGUgbWVyZ2VkIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIGludCBjb21iaW5lZFJvd051bSA9IHNlYXJjaE1lcmdlTGlzdChvbGRWYWx1ZXNbaV0sIG5ld1ZhbHVlc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZFJvd051bSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZXNbaV0gPSAoc2hvcnQpY29tYmluZWRSb3dOdW07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHdlIGhhdmUgdG8gcmVjb25jaWxlIHRoZW0uLi4KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IG91ciByb3cgbnVtYmVycyBpbnRvIHZhcmlhYmxlcyB0byBtYWtlIHRoaW5ncyBlYXNpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvbGRSb3dOdW0gPSBvbGRWYWx1ZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmV3Um93TnVtID0gbmV3VmFsdWVzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZWRSb3dOdW0gPSB0ZW1wU3RhdGVUYWJsZS5zaXplKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGlzIHBhaXIgb2Ygcm93IG51bWJlcnMgdG8gdGhlIG1lcmdlIGxpc3QgKGNyZWF0ZSBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGVkIHRoZSBtZXJnZSBsaXN0IHlldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZUxpc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlTGlzdCA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlTGlzdC5hZGRFbGVtZW50KG5ldyBpbnRbXSB7IG9sZFJvd051bSwgbmV3Um93TnVtLCBjb21iaW5lZFJvd051bSB9KTsKKworLy9TeXN0ZW0ub3V0LnByaW50bG4oIioqKkF0ICIgKyByb3dOdW0gKyAiLCBtZXJnaW5nICIgKyBvbGRSb3dOdW0gKyAiIGFuZCAiICsgbmV3Um93TnVtICsgIiBpbnRvICIgKyBjb21iaW5lZFJvd051bSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyByb3cgdG8gcmVwcmVzZW50IHRoZSBtZXJnZWQgc3RhdGUsIGFuZCBjb3B5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMgb2Ygb2xkUm93IGludG8gaXQsIHRoZW4gYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSB0YWJsZSBhbmQgdXBkYXRlIHRoZSBvcmlnaW5hbCByb3cgKG9sZFZhbHVlcykgdG8gcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBuZXcsIG1lcmdlZCwgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0W10gbmV3Um93ID0gbmV3IHNob3J0W251bUNhdGVnb3JpZXMgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0W10gb2xkUm93ID0gKHNob3J0W10pKHRlbXBTdGF0ZVRhYmxlLmVsZW1lbnRBdChvbGRSb3dOdW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkob2xkUm93LCAwLCBuZXdSb3csIDAsIG51bUNhdGVnb3JpZXMgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBTdGF0ZVRhYmxlLmFkZEVsZW1lbnQobmV3Um93KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlc1tpXSA9IChzaG9ydCljb21iaW5lZFJvd051bTsKKworCisvL1N5c3RlbS5vdXQucHJpbnRsbigibGFzdE9sZFJvd051bSA9ICIgKyBsYXN0T2xkUm93TnVtKTsKKy8vU3lzdGVtLm91dC5wcmludGxuKCJsYXN0Q29tYmluZWRSb3dOdW0gPSAiICsgbGFzdENvbWJpbmVkUm93TnVtKTsKKy8vU3lzdGVtLm91dC5wcmludGxuKCJkZWNpc2lvblBvaW50TGlzdC5jb250YWlucyhsYXN0T2xkUm93TnVtKSA9ICIgKyBkZWNpc2lvblBvaW50TGlzdC5jb250YWlucyhuZXcgSW50ZWdlcihsYXN0T2xkUm93TnVtKSkpOworLy9TeXN0ZW0ub3V0LnByaW50bG4oImRlY2lzaW9uUG9pbnRMaXN0LmNvbnRhaW5zKGxhc3RDb21iaW5lZFJvd051bSkgPSAiICsgZGVjaXNpb25Qb2ludExpc3QuY29udGFpbnMobmV3IEludGVnZXIobGFzdENvbWJpbmVkUm93TnVtKSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGVjaXNpb24gcG9pbnQgbGlzdCBjb250YWlucyBlaXRoZXIgb2YgdGhlIHBhcmVudCByb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGl0IHRvIGluY2x1ZGUgdGhlIG5ldyByb3cgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkZWNpc2lvblBvaW50TGlzdC5jb250YWlucyhuZXcgSW50ZWdlcihvbGRSb3dOdW0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBkZWNpc2lvblBvaW50TGlzdC5jb250YWlucyhuZXcgSW50ZWdlcihuZXdSb3dOdW0pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhZGVjaXNpb25Qb2ludExpc3QuY29udGFpbnMobmV3IEludGVnZXIoY29tYmluZWRSb3dOdW0pKQorICAgICAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb25Qb2ludExpc3QuYWRkRWxlbWVudChuZXcgSW50ZWdlcihjb21iaW5lZFJvd051bSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyB0aGUgc2FtZSB0aGluZyB3aXRoIHRoZSBsaXN0IG9mIHJvd3MgYmVpbmcgdXBkYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyb3dzQmVpbmdVcGRhdGVkLmNvbnRhaW5zKG5ldyBJbnRlZ2VyKG9sZFJvd051bSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHJvd3NCZWluZ1VwZGF0ZWQuY29udGFpbnMobmV3IEludGVnZXIobmV3Um93TnVtKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJvd3NCZWluZ1VwZGF0ZWQuY29udGFpbnMobmV3IEludGVnZXIoY29tYmluZWRSb3dOdW0pKQorICAgICAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb25Qb2ludExpc3QuYWRkRWxlbWVudChuZXcgSW50ZWdlcihjb21iaW5lZFJvd051bSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm93IChncm9hbikgZG8gdGhlIHNhbWUgdGhpbmcgZm9yIGFsbCB0aGUgZW50cmllcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY2lzaW9uIHBvaW50IHN0YWNrCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGRlY2lzaW9uUG9pbnRTdGFjay5zaXplKCk7IGsrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvciBkcGwgPSAoVmVjdG9yKWRlY2lzaW9uUG9pbnRTdGFjay5lbGVtZW50QXQoayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkcGwuY29udGFpbnMobmV3IEludGVnZXIob2xkUm93TnVtKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRwbC5jb250YWlucyhuZXcgSW50ZWdlcihuZXdSb3dOdW0pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWRwbC5jb250YWlucyhuZXcgSW50ZWdlcihjb21iaW5lZFJvd051bSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwbC5hZGRFbGVtZW50KG5ldyBJbnRlZ2VyKGNvbWJpbmVkUm93TnVtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSU5BTExZIChwdWZmIHB1ZmYgcHVmZiksIGNhbGwgbWVyZ2VTdGF0ZXMoKSByZWN1cnNpdmVseSB0byBjb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcm93IHJlZmVycmVkIHRvIGJ5IG5ld1ZhbHVlcyBpbnRvIHRoZSBuZXcgcm93IGFuZCByZXNvbHZlIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uZmxpY3RzIHRoYXQgY29tZSB1cCBhdCB0aGF0IGxldmVsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVN0YXRlcyhjb21iaW5lZFJvd051bSwgKHNob3J0W10pKHRlbXBTdGF0ZVRhYmxlLmVsZW1lbnRBdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZXNbaV0pKSwgcm93c0JlaW5nVXBkYXRlZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIG1lcmdlIGxpc3QgaXMgYSBsaXN0IG9mIHBhaXJzIG9mIHJvd3MgdGhhdCBoYXZlIGJlZW4gbWVyZ2VkIHNvbWV3aGVyZSBpbgorICAgICAgICAgKiB0aGUgcHJvY2VzcyBvZiBidWlsZGluZyB0aGlzIHN0YXRlIHRhYmxlLCBhbG9uZyB3aXRoIHRoZSByb3cgbnVtYmVyIG9mIHRoZQorICAgICAgICAgKiByb3cgY29udGFpbmluZyB0aGUgbWVyZ2VkIHN0YXRlLiAgVGhpcyBmdW5jdGlvbiBsb29rcyB1cCBhIHBhaXIgb2Ygcm93IG51bWJlcnMKKyAgICAgICAgICogYW5kIHJldHVybnMgdGhlIHJvdyBudW1iZXIgb2YgdGhlIHJvdyB0aGV5IGNvbWJpbmUgaW50by4gIChJdCByZXR1cm5zIDAgaWYKKyAgICAgICAgICogdGhpcyBwYWlyIG9mIHJvd3MgaXNuJ3QgaW4gdGhlIG1lcmdlIGxpc3QuKQorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgc2VhcmNoTWVyZ2VMaXN0KGludCBhLCBpbnQgYikgeworICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gbWVyZ2UgbGlzdCwgdGhlcmUgb2J2aW91c2x5IGlzbid0IGFueXRoaW5nIGluIGl0CisgICAgICAgICAgICBpZiAobWVyZ2VMaXN0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtZXJnZSBsaXN0Li4uCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnRbXSBlbnRyeTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lcmdlTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IChpbnRbXSkobWVyZ2VMaXN0LmVsZW1lbnRBdChpKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIGhpdCBpZiB0aGUgdHdvIHJvdyBudW1iZXJzIG1hdGNoIHRoZSB0d28gcm93IG51bWJlcnMKKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgZW50cnkgKHRoZSB0d28gdGhhdCBjb21iaW5lKSwgaW4gZWl0aGVyCisgICAgICAgICAgICAgICAgICAgIC8vIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIGlmICgoZW50cnlbMF0gPT0gYSAmJiBlbnRyeVsxXSA9PSBiKSB8fCAoZW50cnlbMF0gPT0gYiAmJiBlbnRyeVsxXSA9PSBhKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5WzJdOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgYWxzbyBoYXZlIGEgaGl0IGlmIG9uZSBvZiB0aGUgdHdvIHJvdyBudW1iZXJzIG1hdGNoZXMgdGhlIG1hcmdlZAorICAgICAgICAgICAgICAgICAgICAvLyByb3cgbnVtYmVyIGFuZCB0aGUgb3RoZXIgb25lIG1hdGNoZXMgb25lIG9mIHRoZSBvcmlnaW5hbCByb3cgbnVtYmVycworICAgICAgICAgICAgICAgICAgICBpZiAoKGVudHJ5WzJdID09IGEgJiYgKGVudHJ5WzBdID09IGIgfHwgZW50cnlbMV0gPT0gYikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnlbMl07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChlbnRyeVsyXSA9PSBiICYmIChlbnRyeVswXSA9PSBhIHx8IGVudHJ5WzFdID09IGEpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5WzJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB1cGRhdGUgdGhlIGxpc3Qgb2YgY3VycmVudCBsb29vcGluZyBzdGF0ZXMgKGkuZS4sCisgICAgICAgICAqIHN0YXRlcyB0aGF0IGFyZSBjb250cm9sbGVkIGJ5IGEgKj8gY29uc3RydWN0KS4gIEl0IGJhY2tmaWxscyB2YWx1ZXMgZnJvbQorICAgICAgICAgKiB0aGUgbG9vcGluZyBzdGF0ZXMgaW50byB1bnBvcHVsYXRlZCBjZWxscyBvZiB0aGUgc3RhdGVzIHRoYXQgYXJlIGN1cnJlbnRseQorICAgICAgICAgKiBtYXJrZWQgZm9yIGJhY2tmaWxsaW5nLCBhbmQgdGhlbiB1cGRhdGVzIHRoZSBsaXN0IG9mIGxvb3Bpbmcgc3RhdGVzIHRvIGJlCisgICAgICAgICAqIHRoZSBuZXcgbGlzdAorICAgICAgICAgKiBAcGFyYW0gbmV3TG9vcGluZ1N0YXRlcyBUaGUgbGlzdCBvZiBuZXcgbG9vcGluZyBzdGF0ZXMKKyAgICAgICAgICogQHBhcmFtIGVuZFN0YXRlcyBUaGUgbGlzdCBvZiBzdGF0ZXMgdG8gdHJlYXQgYXMgZW5kIHN0YXRlcyAoc3RhdGVzIHRoYXQKKyAgICAgICAgICogY2FuIGV4aXQgdGhlIGxvb3ApLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNldExvb3BpbmdTdGF0ZXMoVmVjdG9yIG5ld0xvb3BpbmdTdGF0ZXMsIFZlY3RvciBlbmRTdGF0ZXMpIHsKKworICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgbGlzdCBvZiBsb29waW5nIHN0YXRlcyBpc24ndCBlbXB0eSwgd2UgaGF2ZSB0byBiYWNrZmlsbAorICAgICAgICAgICAgLy8gdmFsdWVzIGZyb20gdGhlIGxvb3Bpbmcgc3RhdGVzIGludG8gdGhlIHN0YXRlcyB0aGF0IGFyZSB3YWl0aW5nIHRvIGJlCisgICAgICAgICAgICAvLyBiYWNrZmlsbGVkCisgICAgICAgICAgICBpZiAoIWxvb3BpbmdTdGF0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgaW50IGxvb3BpbmdTdGF0ZSA9ICgoSW50ZWdlcilsb29waW5nU3RhdGVzLmxhc3RFbGVtZW50KCkpLmludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgaW50IHJvd051bTsKKworICAgICAgICAgICAgICAgIC8vIGRvbid0IGJhY2tmaWxsIGludG8gYW4gZW5kIHN0YXRlIE9SIGFueSBzdGF0ZSByZWFjaGFibGUgZnJvbSBhbiBlbmQgc3RhdGUKKyAgICAgICAgICAgICAgICAvLyAoc2luY2UgdGhlIHNlYXJjaCBmb3IgcmVhY2hhYmxlIHN0YXRlcyBpcyByZWN1cnNpdmUsIGl0J3Mgc3BsaXQgb3V0IGludG8KKyAgICAgICAgICAgICAgICAvLyBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBlbGltaW5hdGVCYWNrZmlsbFN0YXRlcygpLCBiZWxvdykKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZFN0YXRlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVCYWNrZmlsbFN0YXRlcygoKEludGVnZXIpZW5kU3RhdGVzLmVsZW1lbnRBdChpKSkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gd2UgRE9OJ1QgYWN0dWFsbHkgYmFja2ZpbGwgdGhlIHN0YXRlcyB0aGF0IG5lZWQgdG8gYmUgYmFja2ZpbGxlZCBoZXJlLgorICAgICAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIE1BUksgdGhlbSBmb3IgYmFja2ZpbGxpbmcuICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaWYKKyAgICAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgbXVsdGlwbGUgcnVsZXMgaW4gdGhlIHN0YXRlLXRhYmxlIGRlc2NyaXB0aW9uLCB0aGUgbG9vcGluZworICAgICAgICAgICAgICAgIC8vIHN0YXRlcyBtYXkgaGF2ZSBzb21lIG9mIHRoZWlyIHZhbHVlcyBjaGFuZ2VkIGJ5IGEgc3VjY2VlZGluZyBydWxlLCBhbmQKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHdvdWxkbid0IGJlIHJlZmxlY3RlZCBpbiB0aGUgYmFja2ZpbGxlZCBzdGF0ZXMuICBXZSBtYXJrIGEgc3RhdGUKKyAgICAgICAgICAgICAgICAvLyBmb3IgYmFja2ZpbGxpbmcgYnkgcHV0dGluZyB0aGUgcm93IG51bWJlciBvZiB0aGUgc3RhdGUgdG8gY29weSBmcm9tCisgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgZmxhZyBjZWxsIGF0IHRoZSBlbmQgb2YgdGhlIHJvdworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGVzVG9CYWNrZmlsbC5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICByb3dOdW0gPSAoKEludGVnZXIpc3RhdGVzVG9CYWNrZmlsbC5lbGVtZW50QXQoaSkpLmludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIHNob3J0W10gc3RhdGUgPSAoc2hvcnRbXSl0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQocm93TnVtKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVbbnVtQ2F0ZWdvcmllc10gPQorICAgICAgICAgICAgICAgICAgICAgICAgKHNob3J0KSgoc3RhdGVbbnVtQ2F0ZWdvcmllc10gJiBBTExfRkxBR1MpIHwgbG9vcGluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdGVzVG9CYWNrZmlsbC5yZW1vdmVBbGxFbGVtZW50cygpOworICAgICAgICAgICAgICAgIGxvb3BpbmdTdGF0ZXMucmVtb3ZlQWxsRWxlbWVudHMoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5ld0xvb3BpbmdTdGF0ZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxvb3BpbmdTdGF0ZXMgPSAoVmVjdG9yKW5ld0xvb3BpbmdTdGF0ZXMuY2xvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIHJlbW92ZXMgImVuZGluZyBzdGF0ZXMiIGFuZCBzdGF0ZXMgcmVhY2hhYmxlIGZyb20gdGhlbSBmcm9tIHRoZQorICAgICAgICAgKiBsaXN0IG9mIHN0YXRlcyB0byBiYWNrZmlsbC4KKyAgICAgICAgICogQHBhcmFtIFRoZSByb3cgbnVtYmVyIG9mIHRoZSBzdGF0ZSB0byByZW1vdmUgZnJvbSB0aGUgYmFja2ZpbGwgbGlzdAorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIGVsaW1pbmF0ZUJhY2tmaWxsU3RhdGVzKGludCBiYXNlU3RhdGUpIHsKKworICAgICAgICAgICAgLy8gZG9uJ3QgZG8gYW55dGhpbmcgdW5sZXNzIHRoaXMgc3RhdGUgaXMgYWN0dWFsbHkgaW4gdGhlIGJhY2tmaWxsIGxpc3QuLi4KKyAgICAgICAgICAgIGlmIChzdGF0ZXNUb0JhY2tmaWxsLmNvbnRhaW5zKG5ldyBJbnRlZ2VyKGJhc2VTdGF0ZSkpKSB7CisKKyAgICAgICAgICAgICAgICAvLyBpZiBpdCBpcywgdGFrZSBpdCBvdXQKKyAgICAgICAgICAgICAgICBzdGF0ZXNUb0JhY2tmaWxsLnJlbW92ZUVsZW1lbnQobmV3IEludGVnZXIoYmFzZVN0YXRlKSk7CisKKyAgICAgICAgICAgICAgICAvLyB0aGVuIGdvIHRocm91Z2ggYW5kIHJlY3Vyc2l2ZWx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgZXZlcnkKKyAgICAgICAgICAgICAgICAvLyBzdGF0ZSB0aGF0IHRoZSBiYXNlIHN0YXRlIHBvaW50cyB0bworICAgICAgICAgICAgICAgIHNob3J0W10gc3RhdGUgPSAoc2hvcnRbXSl0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQoYmFzZVN0YXRlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNhdGVnb3JpZXM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVbaV0gIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlQmFja2ZpbGxTdGF0ZXMoc3RhdGVbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgZnVuY3Rpb24gY29tcGxldGVzIHRoZSBiYWNrZmlsbGluZyBwcm9jZXNzIGJ5IGFjdHVhbGx5IGRvaW5nIHRoZQorICAgICAgICAgKiBiYWNrZmlsbGluZyBvbiB0aGUgc3RhdGVzIHRoYXQgYXJlIG1hcmtlZCBmb3IgaXQKKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBiYWNrZmlsbExvb3BpbmdTdGF0ZXMoKSB7CisgICAgICAgICAgICBzaG9ydFtdIHN0YXRlOworICAgICAgICAgICAgc2hvcnRbXSBsb29waW5nU3RhdGUgPSBudWxsOworICAgICAgICAgICAgaW50IGxvb3BpbmdTdGF0ZVJvd051bSA9IDA7CisgICAgICAgICAgICBpbnQgZnJvbVN0YXRlOworCisgICAgICAgICAgICAvLyBmb3IgZWFjaCBzdGF0ZSBpbiB0aGUgc3RhdGUgdGFibGUuLi4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcFN0YXRlVGFibGUuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IChzaG9ydFtdKXRlbXBTdGF0ZVRhYmxlLmVsZW1lbnRBdChpKTsKKworICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBzdGF0ZSdzIGZsYWcgd29yZCB0byBzZWUgaWYgaXQncyBtYXJrZWQgZm9yIGJhY2tmaWxsaW5nCisgICAgICAgICAgICAgICAgLy8gKGl0J3MgbWFya2VkIGZvciBiYWNrZmlsbGluZyBpZiBhbnkgYml0cyBvdGhlciB0aGFuIHRoZSB0d28gaGlnaC1vcmRlcgorICAgICAgICAgICAgICAgIC8vIGJpdHMgYXJlIHNldC0tIGlmIHRoZXkgYXJlLCB0aGVuIHRoZSBmbGFnIHdvcmQsIG1pbnVzIHRoZSB0d28gaGlnaCBiaXRzLAorICAgICAgICAgICAgICAgIC8vIGlzIHRoZSByb3cgbnVtYmVyIHRvIGNvcHkgZnJvbSkKKyAgICAgICAgICAgICAgICBmcm9tU3RhdGUgPSBzdGF0ZVtudW1DYXRlZ29yaWVzXSAmIH5BTExfRkxBR1M7CisgICAgICAgICAgICAgICAgaWYgKGZyb21TdGF0ZSA+IDApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBsb2FkIHVwIHRoZSBzdGF0ZSB0byBjb3B5IGZyb20gKGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21TdGF0ZSAhPSBsb29waW5nU3RhdGVSb3dOdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BpbmdTdGF0ZVJvd051bSA9IGZyb21TdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BpbmdTdGF0ZSA9IChzaG9ydFtdKXRlbXBTdGF0ZVRhYmxlLmVsZW1lbnRBdChsb29waW5nU3RhdGVSb3dOdW0pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgb3V0IHRoZSBiYWNrZmlsbCBwYXJ0IG9mIHRoZSBmbGFnIHdvcmQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVbbnVtQ2F0ZWdvcmllc10gJj0gQUxMX0ZMQUdTOworCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gZmlsbCBhbGwgemVybyBjZWxscyBpbiB0aGUgY3VycmVudCBzdGF0ZSB3aXRoIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGNlbGxzIG9mIHRoZSBmcm9tU3RhdGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdGF0ZS5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlW2pdID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtqXSA9IGxvb3BpbmdTdGF0ZVtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlW2pdID09IERPTlRfTE9PUF9GTEFHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbal0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgZnVuY3Rpb24gY29tcGxldGVzIHRoZSBzdGF0ZS10YWJsZS1idWlsZGluZyBwcm9jZXNzIGJ5IGRvaW5nIHNldmVyYWwKKyAgICAgICAgICogcG9zdHByb2Nlc3Npbmcgc3RlcHMgYW5kIGNvcHlpbmcgZXZlcnl0aGluZyBpbnRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlCisgICAgICAgICAqIGluIHRoZSBpdGVyYXRvciBpdHNlbGYKKyAgICAgICAgICogQHBhcmFtIGZvcndhcmQgVHJ1ZSBpZiB3ZSdyZSB3b3JraW5nIG9uIHRoZSBmb3J3YXJkIHN0YXRlIHRhYmxlCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgZmluaXNoQnVpbGRpbmdTdGF0ZVRhYmxlKGJvb2xlYW4gZm9yd2FyZCkgeworLy9kZWJ1Z1ByaW50VGVtcFN0YXRlVGFibGUoKTsKKyAgICAgICAgICAgIC8vIHN0YXJ0IGJ5IGJhY2tmaWxsaW5nIHRoZSBsb29waW5nIHN0YXRlcworICAgICAgICAgICAgYmFja2ZpbGxMb29waW5nU3RhdGVzKCk7CisvL2RlYnVnUHJpbnRUZW1wU3RhdGVUYWJsZSgpOworCisgICAgICAgICAgICBpbnRbXSByb3dOdW1NYXAgPSBuZXcgaW50W3RlbXBTdGF0ZVRhYmxlLnNpemUoKV07CisgICAgICAgICAgICBTdGFjayByb3dzVG9Gb2xsb3cgPSBuZXcgU3RhY2soKTsKKyAgICAgICAgICAgIHJvd3NUb0ZvbGxvdy5wdXNoKG5ldyBJbnRlZ2VyKDEpKTsKKyAgICAgICAgICAgIHJvd051bU1hcFsxXSA9IDE7CisKKyAgICAgICAgICAgIC8vIGRldGVybWluZSB3aGljaCBzdGF0ZXMgYXJlIG5vIGxvbmdlciByZWFjaGFibGUgZnJvbSB0aGUgc3RhcnQgc3RhdGUKKyAgICAgICAgICAgIC8vICh0aGUgcmVhY2hhYmxlIHN0YXRlcyB3aWxsIGhhdmUgdGhlaXIgcm93IG51bWJlcnMgaW4gdGhlIHJvdyBudW1iZXIKKyAgICAgICAgICAgIC8vIG1hcCwgYW5kIHRoZSBub25yZWFjaGFibGUgc3RhdGVzIHdpbGwgaGF2ZSB6ZXJvIGluIHRoZSByb3cgbnVtYmVyIG1hcCkKKyAgICAgICAgICAgIHdoaWxlIChyb3dzVG9Gb2xsb3cuc2l6ZSgpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93TnVtID0gKChJbnRlZ2VyKXJvd3NUb0ZvbGxvdy5wb3AoKSkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICBzaG9ydFtdIHJvdyA9IChzaG9ydFtdKSh0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQocm93TnVtKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNhdGVnb3JpZXM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAocm93W2ldICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3dOdW1NYXBbcm93W2ldXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93TnVtTWFwW3Jvd1tpXV0gPSByb3dbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93c1RvRm9sbG93LnB1c2gobmV3IEludGVnZXIocm93W2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisvKgorU3lzdGVtLm91dC5wcmludGxuKCJUaGUgZm9sbG93aW5nIHJvd3MgYXJlIG5vdCByZWFjaGFibGU6Iik7Citmb3IgKGludCBpID0gMTsgaSA8IHJvd051bU1hcC5sZW5ndGg7IGkrKykKK2lmIChyb3dOdW1NYXBbaV0gPT0gMCkgU3lzdGVtLm91dC5wcmludCgiXHQiICsgaSk7CitTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyovCisKKyAgICAgICAgICAgIC8vIHZhcmlhYmxlIG5vdCB1c2VkIGJvb2xlYW4gbWFkZUNoYW5nZTsKKyAgICAgICAgICAgIGludCBuZXdSb3dOdW07CisKKyAgICAgICAgICAgIC8vIGFsZ29yaXRobSBmb3IgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHN0YXRlcyBpbiB0aGUgdGFibGUgYWRhcHRlZCBmcm9tCisgICAgICAgICAgICAvLyBBaG8gJiBVbGxtYW4sICJQcmluY2lwbGVzIG9mIENvbXBpbGVyIERlc2lnbiIKKyAgICAgICAgICAgIC8vIFRoZSBiYXNpYyBpZGVhIGhlcmUgaXMgdG8gb3JnYW5pemUgdGhlIHN0YXRlcyBpbnRvIGNsYXNzZXMuICBXaGVuIHdlJ3JlIGRvbmUsCisgICAgICAgICAgICAvLyBhbGwgc3RhdGVzIGluIHRoZSBzYW1lIGNsYXNzIGNhbiBiZSBjb25zaWRlcmVkIGlkZW50aWNhbCBhbmQgYWxsIGJ1dCBvbmUgZWxpbWluYXRlZC4KKworICAgICAgICAgICAgLy8gaW5pdGlhbGx5IGFzc2lnbiBzdGF0ZXMgdG8gY2xhc3NlcyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRlZCBjZWxscyB0aGV5CisgICAgICAgICAgICAvLyBjb250YWluICh0aGUgY2xhc3MgbnVtYmVyIGlzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGVkIGNlbGxzKQorICAgICAgICAgICAgaW50W10gc3RhdGVDbGFzc2VzID0gbmV3IGludFt0ZW1wU3RhdGVUYWJsZS5zaXplKCldOworICAgICAgICAgICAgaW50IG5leHRDbGFzcyA9IG51bUNhdGVnb3JpZXMgKyAxOworICAgICAgICAgICAgc2hvcnRbXSBzdGF0ZTEsIHN0YXRlMjsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc3RhdGVDbGFzc2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHJvd051bU1hcFtpXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZTEgPSAoc2hvcnRbXSl0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1DYXRlZ29yaWVzOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlMVtqXSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK3N0YXRlQ2xhc3Nlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGVDbGFzc2VzW2ldID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVDbGFzc2VzW2ldID0gbmV4dENsYXNzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrbmV4dENsYXNzOworCisgICAgICAgICAgICAvLyB0aGVuLCBmb3IgZWFjaCBjbGFzcywgZWxlY3QgdGhlIGZpcnN0IG1lbWJlciBvZiB0aGF0IGNsYXNzIGFzIHRoYXQgY2xhc3MncworICAgICAgICAgICAgLy8gInJlcHJlc2VudGF0aXZlIi4gIEZvciBlYWNoIG1lbWJlciBvZiB0aGUgY2xhc3MsIGNvbXBhcmUgaXQgdG8gdGhlICJyZXByZXNlbnRhdGl2ZS4iCisgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgY29sdW1uIHBvc2l0aW9uIHdoZXJlIHRoZSBzdGF0ZSBiZWluZyB0ZXN0ZWQgdHJhbnNpdGlvbnMgdG8gYQorICAgICAgICAgICAgLy8gc3RhdGUgaW4gYSBESUZGRVJFTlQgY2xhc3MgZnJvbSB0aGUgY2xhc3Mgd2hlcmUgdGhlICJyZXByZXNlbnRhdGl2ZSIgdHJhbnNpdGlvbnMsCisgICAgICAgICAgICAvLyB0aGVuIG1vdmUgdGhlIHN0YXRlIGludG8gYSBuZXcgY2xhc3MuICBSZXBlYXQgdGhpcyBwcm9jZXNzIHVudGlsIG5vIG5ldyBjbGFzc2VzCisgICAgICAgICAgICAvLyBhcmUgY3JlYXRlZC4KKyAgICAgICAgICAgIGludCBjdXJyZW50Q2xhc3M7CisgICAgICAgICAgICBpbnQgbGFzdENsYXNzOworICAgICAgICAgICAgYm9vbGVhbiBzcGxpdDsKKworICAgICAgICAgICAgZG8geworLy9TeXN0ZW0ub3V0LnByaW50bG4oIk1ha2luZyBhIHBhc3MuLi4iKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2xhc3MgPSAxOworICAgICAgICAgICAgICAgIGxhc3RDbGFzcyA9IG5leHRDbGFzczsKKyAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudENsYXNzIDwgbmV4dENsYXNzKSB7CisvL1N5c3RlbS5vdXQucHJpbnQoIlN0YXRlcyBpbiBjbGFzcyAjIiArIGN1cnJlbnRDbGFzcyArIjoiKTsKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUxID0gc3RhdGUyID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZUNsYXNzZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZUNsYXNzZXNbaV0gPT0gY3VycmVudENsYXNzKSB7CisvL1N5c3RlbS5vdXQucHJpbnQoIlx0IiArIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZTEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTEgPSAoc2hvcnRbXSl0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTIgPSAoc2hvcnRbXSl0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3RhdGUyLmxlbmd0aDsgaisrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChqID09IG51bUNhdGVnb3JpZXMgJiYgc3RhdGUxW2pdICE9IHN0YXRlMltqXSAmJiBmb3J3YXJkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaiAhPSBudW1DYXRlZ29yaWVzICYmIHN0YXRlQ2xhc3Nlc1tzdGF0ZTFbal1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IHN0YXRlQ2xhc3Nlc1tzdGF0ZTJbal1dKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2xhc3Nlc1tpXSA9IG5leHRDbGFzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzcGxpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKytuZXh0Q2xhc3M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50Q2xhc3M7CisvL1N5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKGxhc3RDbGFzcyAhPSBuZXh0Q2xhc3MpOworCisgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBhbGwgb2YgdGhlIHN0YXRlcyBpbiBhIGNsYXNzIGV4Y2VwdCB0aGUgZmlyc3Qgb25lICh0aGUKKyAgICAgICAgICAgIC8vInJlcHJlc2VudGF0aXZlIikgY2FuIGJlIGVsaW1pbmF0ZWQsIHNvIHVwZGF0ZSB0aGUgcm93LW51bWJlciBtYXAgYWNjb3JkaW5nbHkKKyAgICAgICAgICAgIGludFtdIHJlcHJlc2VudGF0aXZlcyA9IG5ldyBpbnRbbmV4dENsYXNzXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc3RhdGVDbGFzc2VzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGlmIChyZXByZXNlbnRhdGl2ZXNbc3RhdGVDbGFzc2VzW2ldXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGF0aXZlc1tzdGF0ZUNsYXNzZXNbaV1dID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJvd051bU1hcFtpXSA9IHJlcHJlc2VudGF0aXZlc1tzdGF0ZUNsYXNzZXNbaV1dOworICAgICAgICAgICAgICAgIH0KKy8vU3lzdGVtLm91dC5wcmludGxuKCJSZW51bWJlcmluZy4uLiIpOworCisgICAgICAgICAgICAvLyByZW51bWJlciBhbGwgcmVtYWluaW5nIHJvd3MuLi4KKyAgICAgICAgICAgIC8vIGZpcnN0IGRyb3AgYWxsIHRoYXQgYXJlIGVpdGhlciB1bnJlZmVyZW5jZWQgb3Igbm90IGEgY2xhc3MgcmVwcmVzZW50YXRpdmUKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcm93TnVtTWFwLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHJvd051bU1hcFtpXSAhPSBpKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBTdGF0ZVRhYmxlLnNldEVsZW1lbnRBdChudWxsLCBpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRoZW4gY2FsY3VsYXRlIGV2ZXJ5Ym9keSdzIG5ldyByb3cgbnVtYmVyIGFuZCB1cGRhdGUgdGhlIHJvdworICAgICAgICAgICAgLy8gbnVtYmVyIG1hcCBhcHByb3ByaWF0ZWx5ICh0aGUgZmlyc3QgcGFzcyB1cGRhdGVzIHRoZSByb3cgbnVtYmVycworICAgICAgICAgICAgLy8gb2YgYWxsIHRoZSBjbGFzcyByZXByZXNlbnRhdGl2ZXMgW3RoZSByb3dzIHdlJ3JlIGtlZXBpbmddLCBhbmQgdGhlCisgICAgICAgICAgICAvLyBzZWNvbmQgcGFzcyB1cGRhdGVzIHRoZSBjcm9zcyByZWZlcmVuY2VzIGZvciBhbGwgdGhlIHJvd3MgdGhhdAorICAgICAgICAgICAgLy8gYXJlIGJlaW5nIGRlbGV0ZWQpCisgICAgICAgICAgICBuZXdSb3dOdW0gPSAxOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByb3dOdW1NYXAubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGVtcFN0YXRlVGFibGUuZWxlbWVudEF0KGkpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcm93TnVtTWFwW2ldID0gbmV3Um93TnVtKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByb3dOdW1NYXAubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGVtcFN0YXRlVGFibGUuZWxlbWVudEF0KGkpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcm93TnVtTWFwW2ldID0gcm93TnVtTWFwW3Jvd051bU1hcFtpXV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorLy9mb3IgKGludCBpID0gMTsgaSA8IHJvd051bU1hcC5sZW5ndGg7IGkrKykgcm93TnVtTWFwW2ldID0gaTsgaW50IG5ld1Jvd051bSA9IHJvd051bU1hcC5sZW5ndGg7CisKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlIHRoZSBwZXJtYW5lbnQgc3RhdGUgdGFibGUsIGFuZCBjb3B5IHRoZSByZW1haW5pbmcgcm93cyBpbnRvIGl0CisgICAgICAgICAgICAvLyAoYWRqdXN0aW5nIGFsbCB0aGUgY2VsbCB2YWx1ZXMsIG9mIGNvdXJzZSkKKworICAgICAgICAgICAgLy8gdGhpcyBzZWN0aW9uIGRvZXMgdGhhdCBmb3IgdGhlIGZvcndhcmQgc3RhdGUgdGFibGUKKyAgICAgICAgICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgICAgICAgICAgZW5kU3RhdGVzID0gbmV3IGJvb2xlYW5bbmV3Um93TnVtXTsKKyAgICAgICAgICAgICAgICBsb29rYWhlYWRTdGF0ZXMgPSBuZXcgYm9vbGVhbltuZXdSb3dOdW1dOworICAgICAgICAgICAgICAgIHN0YXRlVGFibGUgPSBuZXcgc2hvcnRbbmV3Um93TnVtICogbnVtQ2F0ZWdvcmllc107CisgICAgICAgICAgICAgICAgaW50IHAgPSAwOworICAgICAgICAgICAgICAgIGludCBwMiA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wU3RhdGVUYWJsZS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBzaG9ydFtdIHJvdyA9IChzaG9ydFtdKSh0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQoaSkpOworICAgICAgICAgICAgICAgICAgICBpZiAocm93ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQ2F0ZWdvcmllczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVRhYmxlW3BdID0gKHNob3J0KShyb3dOdW1NYXBbcm93W2pdXSk7CisgICAgICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZW5kU3RhdGVzW3AyXSA9ICgocm93W251bUNhdGVnb3JpZXNdICYgRU5EX1NUQVRFX0ZMQUcpICE9IDApOworICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRTdGF0ZXNbcDJdID0gKChyb3dbbnVtQ2F0ZWdvcmllc10gJiBMT09LQUhFQURfU1RBVEVfRkxBRykgIT0gMCk7CisgICAgICAgICAgICAgICAgICAgICsrcDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBhbmQgdGhpcyBzZWN0aW9uIGRvZXMgaXQgZm9yIHRoZSBiYWNrd2FyZCBzdGF0ZSB0YWJsZQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYmFja3dhcmRzU3RhdGVUYWJsZSA9IG5ldyBzaG9ydFtuZXdSb3dOdW0gKiBudW1DYXRlZ29yaWVzXTsKKyAgICAgICAgICAgICAgICBpbnQgcCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wU3RhdGVUYWJsZS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBzaG9ydFtdIHJvdyA9IChzaG9ydFtdKSh0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQoaSkpOworICAgICAgICAgICAgICAgICAgICBpZiAocm93ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQ2F0ZWdvcmllczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZHNTdGF0ZVRhYmxlW3BdID0gKHNob3J0KShyb3dOdW1NYXBbcm93W2pdXSk7CisgICAgICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBmdW5jdGlvbiBidWlsZHMgdGhlIGJhY2t3YXJkIHN0YXRlIHRhYmxlIGZyb20gdGhlIGZvcndhcmQgc3RhdGUKKyAgICAgICAgICogdGFibGUgYW5kIGFueSBhZGRpdGlvbmFsIHJ1bGVzIChpZGVudGlmaWVkIGJ5IHRoZSAhIG9uIHRoZSBmcm9udCkKKyAgICAgICAgICogc3VwcGxpZWQgaW4gdGhlIGRlc2NyaXB0aW9uCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgYnVpbGRCYWNrd2FyZHNTdGF0ZVRhYmxlKFZlY3RvciB0ZW1wUnVsZUxpc3QpIHsKKworICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSB0ZW1wb3Jhcnkgc3RhdGUgdGFibGUgYW5kIHNlZWQgaXQgd2l0aCB0d28gcm93cyAocm93IDAKKyAgICAgICAgICAgIC8vIGlzbid0IHVzZWQgZm9yIGFueXRoaW5nLCBhbmQgd2UgaGF2ZSB0byBjcmVhdGUgcm93IDEgKHRoZSBpbml0aWFsCisgICAgICAgICAgICAvLyBzdGF0ZSkgYmVmb3JlIHdlIGNhbiBkbyBhbnl0aGluZyBlbHNlCisgICAgICAgICAgICB0ZW1wU3RhdGVUYWJsZSA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgIHRlbXBTdGF0ZVRhYmxlLmFkZEVsZW1lbnQobmV3IHNob3J0W251bUNhdGVnb3JpZXMgKyAxXSk7CisgICAgICAgICAgICB0ZW1wU3RhdGVUYWJsZS5hZGRFbGVtZW50KG5ldyBzaG9ydFtudW1DYXRlZ29yaWVzICsgMV0pOworCisgICAgICAgICAgICAvLyBhbHRob3VnaCB0aGUgYmFja3dhcmRzIHN0YXRlIHRhYmxlIGlzIGJ1aWx0IGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgZm9yd2FyZAorICAgICAgICAgICAgLy8gc3RhdGUgdGFibGUsIHRoZXJlIGFyZSBzb21lIHNpdHVhdGlvbnMgKHRoZSBkZWZhdWx0IHNlbnRlbmNlLWJyZWFrIHJ1bGVzLAorICAgICAgICAgICAgLy8gZm9yIGV4YW1wbGUpIHdoZXJlIHRoaXMgZG9lc24ndCB5aWVsZCBlbm91Z2ggc3RvcCBzdGF0ZXMsIGNhdXNpbmcgYSBkcmFtYXRpYworICAgICAgICAgICAgLy8gZHJvcCBpbiBwZXJmb3JtYW5jZS4gIFRvIGhlbHAgd2l0aCB0aGVzZSBjYXNlcywgdGhlIHVzZXIgbWF5IHN1cHBseQorICAgICAgICAgICAgLy8gc3VwcGxlbWVudGFsIHJ1bGVzIHRoYXQgYXJlIGFkZGVkIHRvIHRoZSBiYWNrd2FyZCBzdGF0ZSB0YWJsZS4gIFRoZXNlIGhhdmUKKyAgICAgICAgICAgIC8vIHRoZSBzYW1lIHN5bnRheCBhcyB0aGUgbm9ybWFsIGJyZWFrIHJ1bGVzLCBidXQgYmVnaW4gd2l0aCAnIScgdG8gZGlzdGluZ3Vpc2gKKyAgICAgICAgICAgIC8vIHRoZW0gZnJvbSBub3JtYWwgYnJlYWsgcnVsZXMKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcFJ1bGVMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHJ1bGUgPSAoU3RyaW5nKXRlbXBSdWxlTGlzdC5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUuY2hhckF0KDApID09ICchJykgeworICAgICAgICAgICAgICAgICAgICBwYXJzZVJ1bGUocnVsZS5zdWJzdHJpbmcoMSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiYWNrZmlsbExvb3BpbmdTdGF0ZXMoKTsKKworICAgICAgICAgICAgLy8gQmFja3dhcmRzIGl0ZXJhdGlvbiBpcyBxdWFsaXRhdGl2ZWx5IGRpZmZlcmVudCBmcm9tIGZvcndhcmRzIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSBiYWNrd2FyZHMgaXRlcmF0aW9uIGhhcyB0byBiZSBtYWRlIHRvIG9wZXJhdGUgZnJvbSBubyBjb250ZXh0CisgICAgICAgICAgICAvLyBhdCBhbGwtLSB0aGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBhc2sgQnJlYWtJdGVyYXRvciBmb3IgdGhlIGJyZWFrIHBvc2l0aW9uCisgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBvbiBlaXRoZXIgc2lkZSBvZiBzb21lIGFyYml0cmFyeSBvZmZzZXQgaW4gdGhlIHRleHQuICBUaGUKKyAgICAgICAgICAgIC8vIGZvcndhcmQgaXRlcmF0aW9uIHRhYmxlIGRvZXNuJ3QgbGV0IHVzIGRvIHRoYXQtLSBpdCBhc3N1bWVzIGNvbXBsZXRlCisgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiBvbiB0aGUgY29udGV4dCwgd2hpY2ggbWVhbnMgc3RhcnRpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICAgICAgICAgLy8gZG9jdW1lbnQuCisgICAgICAgICAgICAvLyBUaGUgd2F5IHdlIGRvIGJhY2t3YXJkIGFuZCByYW5kb20tYWNjZXNzIGl0ZXJhdGlvbiBpcyB0byBiYWNrIHVwIGZyb20gdGhlCisgICAgICAgICAgICAvLyBjdXJyZW50IChvciB1c2VyLXNwZWNpZmllZCkgcG9zaXRpb24gdW50aWwgd2Ugc2VlIHNvbWV0aGluZyB3ZSdyZSBzdXJlIGlzCisgICAgICAgICAgICAvLyBhIGJyZWFrIHBvc2l0aW9uIChpdCBtYXkgbm90IGJlIHRoZSBsYXN0IGJyZWFrIHBvc2l0aW9uIGltbWVkaWF0ZWx5CisgICAgICAgICAgICAvLyBwcmVjZWRpbmcgb3VyIHN0YXJ0aW5nIHBvaW50LCBob3dldmVyKS4gIFRoZW4gd2Ugcm9sbCBmb3J3YXJkIGZyb20gdGhlcmUgdG8KKyAgICAgICAgICAgIC8vIGxvY2F0ZSB0aGUgYWN0dWFsIGJyZWFrIHBvc2l0aW9uIHdlJ3JlIGFmdGVyLgorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBiYWNrd2FyZHMgc3RhdGUgdGFibGUgZG9lc24ndCBoYXZlIHRvIGlkZW50aWZ5IGV2ZXJ5CisgICAgICAgICAgICAvLyBicmVhayBwb3NpdGlvbiwgYWxsb3dpbmcgdGhlIGJ1aWxkaW5nIGFsZ29yaXRobSB0byBiZSBtdWNoIHNpbXBsZXIuICBIZXJlLAorICAgICAgICAgICAgLy8gd2UgdXNlIGEgInBhaXJzIiBhcHByb2FjaCwgc2Nhbm5pbmcgdGhlIGZvcndhcmQtaXRlcmF0aW9uIHN0YXRlIHRhYmxlIGZvcgorICAgICAgICAgICAgLy8gcGFpcnMgb2YgY2hhcmFjdGVyIGNhdGVnb3JpZXMgd2UgQUxXQVlTIGJyZWFrIGJldHdlZW4sIGFuZCBidWlsZGluZyBhIHN0YXRlCisgICAgICAgICAgICAvLyB0YWJsZSBmcm9tIHRoYXQgaW5mb3JtYXRpb24uICBObyBjb250ZXh0IGlzIHJlcXVpcmVkLS0gYWxsIHRoaXMgc3RhdGUgdGFibGUKKyAgICAgICAgICAgIC8vIGxvb2tzIGF0IGlzIGEgcGFpciBvZiBhZGphY2VudCBjaGFyYWN0ZXJzLgorCisgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVzZXIgaGFzIHN1cHBsaWVkIHN1cHBsZW1lbnRhcnkgcnVsZXMgKHNlZSBhYm92ZSkuCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0byBiZSBkb25lIGZpcnN0IHRvIGtlZXAgcGFyc2VSdWxlKCkgYW5kIGZyaWVuZHMgZnJvbSBiZWNvbWluZworICAgICAgICAgICAgLy8gRVZFTiBNT1JFIGNvbXBsaWNhdGVkLiAgVGhlIGF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkIHN0YXRlcyBhcmUgYXBwZW5kZWQKKyAgICAgICAgICAgIC8vIG9udG8gdGhlIGVuZCBvZiB0aGUgc3RhdGUgdGFibGUsIGFuZCB0aGVuIHRoZSB0d28gc2V0cyBvZiBydWxlcyBhcmUKKyAgICAgICAgICAgIC8vIHN0aXRjaGVkIHRvZ2V0aGVyIGF0IHRoZSBlbmQuICBUYWtlIG5vdGUgb2YgdGhlIHJvdyBudW1iZXIgb2YgdGhlCisgICAgICAgICAgICAvLyBmaXJzdCByb3cgb2YgdGhlIGF1cm9tYXRpY2FsbHktZ2VuZXJhdGVkIHBhcnQuCisgICAgICAgICAgICBpbnQgYmFja1RhYmxlT2Zmc2V0ID0gdGVtcFN0YXRlVGFibGUuc2l6ZSgpOworICAgICAgICAgICAgaWYgKGJhY2tUYWJsZU9mZnNldCA+IDIpIHsKKyAgICAgICAgICAgICAgICArK2JhY2tUYWJsZU9mZnNldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdGhlIGF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkIHBhcnQgb2YgdGhlIHRhYmxlIG1vZGVscyBhIHR3by1kaW1lbnNpb25hbAorICAgICAgICAgICAgLy8gYXJyYXkgd2hlcmUgdGhlIHR3byBkaW1lbnNpb25zIHJlcHJlc2VudCB0aGUgdHdvIGNoYXJhY3RlcnMgd2UncmUgY3VycmVudGx5CisgICAgICAgICAgICAvLyBsb29raW5nIGF0LiAgVG8gbW9kZWwgdGhpcyBhcyBhIHN0YXRlIHRhYmxlLCB3ZSBhY3R1YWxseSBuZWVkIG9uZSBhZGRpdGlvbmFsCisgICAgICAgICAgICAvLyByb3cgdG8gcmVwcmVzZW50IHRoZSBpbml0aWFsIHN0YXRlLiAgSXQgZ2V0cyBwb3B1bGF0ZWQgd2l0aCB0aGUgcm93IG51bWJlcnMKKyAgICAgICAgICAgIC8vIG9mIHRoZSBvdGhlciByb3dzIChpbiBvcmRlcikuCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNhdGVnb3JpZXMgKyAxOyBpKyspCisgICAgICAgICAgICAgICAgdGVtcFN0YXRlVGFibGUuYWRkRWxlbWVudChuZXcgc2hvcnRbbnVtQ2F0ZWdvcmllcyArIDFdKTsKKworICAgICAgICAgICAgc2hvcnRbXSBzdGF0ZSA9IChzaG9ydFtdKXRlbXBTdGF0ZVRhYmxlLmVsZW1lbnRBdChiYWNrVGFibGVPZmZzZXQgLSAxKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2F0ZWdvcmllczsgaSsrKQorICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gKHNob3J0KShpICsgYmFja1RhYmxlT2Zmc2V0KTsKKworICAgICAgICAgICAgLy8gc2NhdmVuZ2UgdGhlIGZvcndhcmQgc3RhdGUgdGFibGUgZm9yIHBhaXJzIG9mIGNoYXJhY3RlciBjYXRlZ29yaWVzCisgICAgICAgICAgICAvLyB0aGF0IGFsd2F5cyBoYXZlIGEgYnJlYWsgYmV0d2VlbiB0aGVtLiAgVGhlIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgLy8gTG9vayBkb3duIGVhY2ggY29sdW1uIGluIHRoZSBzdGF0ZSB0YWJsZS4gIEZvciBlYWNoIG5vbnplcm8gY2VsbCBpbgorICAgICAgICAgICAgLy8gdGhhdCBjb2x1bW4sIGxvb2sgdXAgdGhlIHJvdyBpdCBwb2ludHMgdG8uICBGb3IgZWFjaCBub256ZXJvIGNlbGwgaW4KKyAgICAgICAgICAgIC8vIHRoYXQgcm93LCBwb3B1bGF0ZSBhIGNlbGwgaW4gdGhlIGJhY2t3YXJkcyBzdGF0ZSB0YWJsZTogdGhlIHJvdyBudW1iZXIKKyAgICAgICAgICAgIC8vIG9mIHRoYXQgY2VsbCBpcyB0aGUgbnVtYmVyIG9mIHRoZSBjb2x1bW4gd2Ugd2VyZSBzY2FubmluZyAocGx1cyB0aGUKKyAgICAgICAgICAgIC8vIG9mZnNldCB0aGF0IGxvY2F0ZXMgdGhpcyBzdWItdGFibGUpLCBhbmQgdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhhdCBjZWxsCisgICAgICAgICAgICAvLyBpcyB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgbm9uemVybyBjZWxsIHdlIGp1c3QgZm91bmQuICBUaGlzIGNlbGwgaXMKKyAgICAgICAgICAgIC8vIHBvcHVsYXRlZCB3aXRoIGl0cyBvd24gY29sdW1uIG51bWJlciAoYWRqdXN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBhY3R1YWwKKyAgICAgICAgICAgIC8vIGxvY2F0aW9uIG9mIHRoZSBzdWItdGFibGUpLiAgVGhpcyBwcm9jZXNzIHdpbGwgcHJvZHVjZSBhIHN0YXRlIHRhYmxlCisgICAgICAgICAgICAvLyB3aG9zZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBsb29raW5nIHVwIHN1Y2Nlc3NpdmUgcGFpcnMgb2YgY2hhcmFjdGVycworICAgICAgICAgICAgLy8gaW4gYW4gYXJyYXkgb2YgQm9vbGVhbnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUgaXMgYSBicmVhay4KKyAgICAgICAgICAgIGludCBudW1Sb3dzID0gc3RhdGVUYWJsZS5sZW5ndGggLyBudW1DYXRlZ29yaWVzOworICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ2F0ZWdvcmllczsgY29sdW1uKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBudW1Sb3dzOyByb3crKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgbmV4dFJvdyA9IGxvb2t1cFN0YXRlKHJvdywgY29sdW1uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRSb3cgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgbmV4dENvbHVtbiA9IDA7IG5leHRDb2x1bW4gPCBudW1DYXRlZ29yaWVzOyBuZXh0Q29sdW1uKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbFZhbHVlID0gbG9va3VwU3RhdGUobmV4dFJvdywgbmV4dENvbHVtbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxWYWx1ZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gKHNob3J0W10pdGVtcFN0YXRlVGFibGUuZWxlbWVudEF0KG5leHRDb2x1bW4gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RhYmxlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbY29sdW1uXSA9IChzaG9ydCkoY29sdW1uICsgYmFja1RhYmxlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKy8vZGVidWdQcmludFRlbXBTdGF0ZVRhYmxlKCk7CisgICAgICAgICAgICAvLyBpZiB0aGUgdXNlciBzcGVjaWZpZWQgc29tZSBiYWNrd2FyZC1pdGVyYXRpb24gcnVsZXMgd2l0aCB0aGUgISB0b2tlbiwKKyAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gbWVyZ2UgdGhlIHJlc3VsdGluZyBzdGF0ZSB0YWJsZSB3aXRoIHRoZSBhdXRvLWdlbmVyYXRlZCBvbmUKKyAgICAgICAgICAgIC8vIGFib3ZlLiAgRmlyc3QgY29weSB0aGUgcG9wdWxhdGVkIGNlbGxzIGZyb20gcm93IDEgb3ZlciB0aGUgcG9wdWxhdGVkCisgICAgICAgICAgICAvLyBjZWxscyBpbiB0aGUgYXV0by1nZW5lcmF0ZWQgdGFibGUuICBUaGVuIGNvcHkgdmFsdWVzIGZyb20gcm93IDEgb2YgdGhlCisgICAgICAgICAgICAvLyBhdXRvLWdlbmVyYXRlZCB0YWJsZSBpbnRvIGFsbCBvZiB0aGUgdGhlIHVucG9wdWxhdGVkIGNlbGxzIG9mIHRoZQorICAgICAgICAgICAgLy8gcnVsZS1iYXNlZCB0YWJsZS4KKyAgICAgICAgICAgIGlmIChiYWNrVGFibGVPZmZzZXQgPiAxKSB7CisKKyAgICAgICAgICAgICAgICAvLyBmb3IgZXZlcnkgcm93IGluIHRoZSBhdXRvLWdlbmVyYXRlZCBzdWItdGFibGUsIGlmIGEgY2VsbCBpcworICAgICAgICAgICAgICAgIC8vIHBvcHVsYXRlZCB0aGF0IGlzIGFsc28gcG9wdWxhdGVkIGluIHJvdyAxIG9mIHRoZSBydWxlLWJhc2VkCisgICAgICAgICAgICAgICAgLy8gc3ViLXRhYmxlLCBjb3B5IHRoZSB2YWx1ZSBmcm9tIHJvdyAxIG92ZXIgdGhlIHZhbHVlIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIGF1dG8tZ2VuZXJhdGVkIHN1Yi10YWJsZQorICAgICAgICAgICAgICAgIHN0YXRlID0gKHNob3J0W10pdGVtcFN0YXRlVGFibGUuZWxlbWVudEF0KDEpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBiYWNrVGFibGVPZmZzZXQgLSAxOyBpIDwgdGVtcFN0YXRlVGFibGUuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgc2hvcnRbXSBzdGF0ZTIgPSAoc2hvcnRbXSl0ZW1wU3RhdGVUYWJsZS5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQ2F0ZWdvcmllczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVbal0gIT0gMCAmJiBzdGF0ZTJbal0gIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlMltqXSA9IHN0YXRlW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gbm93LCBmb3IgZXZlcnkgcm93IGluIHRoZSBydWxlLWJhc2VkIHN1Yi10YWJsZSB0aGF0IGlzIG5vdAorICAgICAgICAgICAgICAgIC8vIGFuIGVuZCBzdGF0ZSwgZmlsbCBpbiBhbGwgdW5wb3B1bGF0ZWQgY2VsbHMgd2l0aCB0aGUgdmFsdWVzCisgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2VsbHMgaW4gdGhlIGZpcnN0IHJvdyBvZiB0aGUgYXV0by0KKyAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZWQgc3ViLXRhYmxlLgorICAgICAgICAgICAgICAgIHN0YXRlID0gKHNob3J0W10pdGVtcFN0YXRlVGFibGUuZWxlbWVudEF0KGJhY2tUYWJsZU9mZnNldCAtIDEpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYmFja1RhYmxlT2Zmc2V0IC0gMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNob3J0W10gc3RhdGUyID0gKHNob3J0W10pdGVtcFN0YXRlVGFibGUuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXRlMltudW1DYXRlZ29yaWVzXSAmIEVORF9TVEFURV9GTEFHKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bUNhdGVnb3JpZXM7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZTJbal0gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTJbal0gPSBzdGF0ZVtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKy8vZGVidWdQcmludFRlbXBTdGF0ZVRhYmxlKCk7CisKKyAgICAgICAgICAgIC8vIGZpbmFsbHksIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgYW5kIGNvcHkgaXQgaW50byB0aGUgYWN0dWFsIEJyZWFrSXRlcmF0b3IKKyAgICAgICAgICAgIC8vIGJ5IGNhbGxpbmcgZmluaXNoQnVpbGRpbmdTdGF0ZVRhYmxlKCkKKyAgICAgICAgICAgIGZpbmlzaEJ1aWxkaW5nU3RhdGVUYWJsZShmYWxzZSk7CisvKgorU3lzdGVtLm91dC5wcmludCgiQzpcdCIpOworZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DYXRlZ29yaWVzOyBpKyspCitTeXN0ZW0ub3V0LnByaW50KEludGVnZXIudG9TdHJpbmcoaSkgKyAiXHQiKTsKK1N5c3RlbS5vdXQucHJpbnRsbigpOyBTeXN0ZW0ub3V0LnByaW50KCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7Citmb3IgKGludCBpID0gMDsgaSA8IGJhY2t3YXJkc1N0YXRlVGFibGUubGVuZ3RoOyBpKyspIHsKK2lmIChpICUgbnVtQ2F0ZWdvcmllcyA9PSAwKSB7CitTeXN0ZW0ub3V0LnByaW50bG4oKTsKK1N5c3RlbS5vdXQucHJpbnQoSW50ZWdlci50b1N0cmluZyhpIC8gbnVtQ2F0ZWdvcmllcykgKyAiOlx0Iik7Cit9CitpZiAoYmFja3dhcmRzU3RhdGVUYWJsZVtpXSA9PSAwKSBTeXN0ZW0ub3V0LnByaW50KCIuXHQiKTsgZWxzZSBTeXN0ZW0ub3V0LnByaW50KEludGVnZXIudG9TdHJpbmcoYmFja3dhcmRzU3RhdGVUYWJsZVtpXSkgKyAiXHQiKTsKK30KK1N5c3RlbS5vdXQucHJpbnRsbigpOworKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaHJvd3MgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHJlcHJlc2VudGluZyBhIHN5bnRheCBlcnJvciBpbiB0aGUgcnVsZQorICAgICAgICAgKiBkZXNjcmlwdGlvbi4gIFRoZSBleGNlcHRpb24ncyBtZXNzYWdlIGNvbnRhaW5zIHNvbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAgKiBAcGFyYW0gbWVzc2FnZSBBIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgcHJvYmxlbQorICAgICAgICAgKiBAcGFyYW0gcG9zaXRpb24gVGhlIHBvc2l0aW9uIGluIHRoZSBkZXNjcmlwdGlvbiB3aGVyZSB0aGUgcHJvYmxlbSB3YXMKKyAgICAgICAgICogZGlzY292ZXJlZAorICAgICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVycm9yCisgICAgICAgICAqIEBpbnRlcm5hbAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBwb3NpdGlvbiwgU3RyaW5nIGNvbnRleHQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcnNlIGVycm9yOiAiICsgbWVzc2FnZSArICJcbiIgKworICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmVzY2FwZShjb250ZXh0LnN1YnN0cmluZygwLCBwb3NpdGlvbikpICsgIlxuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgVXRpbGl0eS5lc2NhcGUoY29udGV4dC5zdWJzdHJpbmcocG9zaXRpb24pKSk7CisgICAgICAgIH0KKworCS8vL0NMT1ZFUjpPRkYKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZGVidWdQcmludFZlY3RvcihTdHJpbmcgbGFiZWwsIFZlY3RvciB2KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGxhYmVsKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHYuZWxlbWVudEF0KGkpLnRvU3RyaW5nKCkgKyAiXHQiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZGVidWdQcmludFZlY3Rvck9mVmVjdG9ycyhTdHJpbmcgbGFiZWwxLCBTdHJpbmcgbGFiZWwyLCBWZWN0b3IgdikgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxhYmVsMSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgZGVidWdQcmludFZlY3RvcihsYWJlbDIsIChWZWN0b3Ipdi5lbGVtZW50QXQoaSkpOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZGVidWdQcmludFRlbXBTdGF0ZVRhYmxlKCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICB0ZW1wU3RhdGVUYWJsZToiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAgICAgICAgQzpcdCIpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbnVtQ2F0ZWdvcmllczsgaSsrKQorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoSW50ZWdlci50b1N0cmluZyhpKSArICJcdCIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHRlbXBTdGF0ZVRhYmxlLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgc2hvcnRbXSByb3cgPSAoc2hvcnRbXSkodGVtcFN0YXRlVGFibGUuZWxlbWVudEF0KGkpKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgICAgICAgICIgKyBpICsgIjpcdCIpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dbal0gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiLlx0Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KEludGVnZXIudG9TdHJpbmcocm93W2pdKSArICJcdCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisgICAgLy8vQ0xPVkVSOk9OCisKKyAgICAvKgorICAgICAqIFRoaXMgY2xhc3MgZXhpc3RzIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIEhvdEphdmEncyBpbXBsZW1lbnRhdGlvbgorICAgICAqIG9mIENoYXJhY3Rlckl0ZXJhdG9yLCB3aGljaCBpbmNvcnJlY3RseSBoYW5kbGVzIHNldEluZGV4KGVuZEluZGV4KS4KKyAgICAgKiBUaGlzIGl0ZXJhdG9yIHJlbGllcyBvbmx5IG9uIGJhc2Uuc2V0SW5kZXgobikgd2hlcmUgbiBpcyBsZXNzIHRoYW4KKyAgICAgKiBlbmRJbmRleC4KKyAgICAgKgorICAgICAqIE9uZSBjYXZlYXQ6ICBpZiB0aGUgYmFzZSBpdGVyYXRvcidzIGJlZ2luIGFuZCBlbmQgaW5kaWNlcyBjaGFuZ2UKKyAgICAgKiB0aGUgY2hhbmdlIHdpbGwgbm90IGJlIHJlZmxlY3RlZCBieSB0aGlzIHdyYXBwZXIuICBEb2VzIHRoYXQgbWF0dGVyPworICAgICAqLworICAgIC8vL0NMT1ZFUjpPRkYKKyAgICAvLyBPbmx5IHVzZWQgZm9yIEhvdEphdmEsIHNvIGNsb3ZlciB3b24ndCBlbmNvdW50ZXIgaXQKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBTYWZlQ2hhckl0ZXJhdG9yIGltcGxlbWVudHMgQ2hhcmFjdGVySXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsb25lYWJsZSB7CisKKyAgICAgICAgcHJpdmF0ZSBDaGFyYWN0ZXJJdGVyYXRvciBiYXNlOworICAgICAgICBwcml2YXRlIGludCByYW5nZVN0YXJ0OworICAgICAgICBwcml2YXRlIGludCByYW5nZUxpbWl0OworICAgICAgICBwcml2YXRlIGludCBjdXJyZW50SW5kZXg7CisKKyAgICAgICAgU2FmZUNoYXJJdGVyYXRvcihDaGFyYWN0ZXJJdGVyYXRvciBiYXNlKSB7CisgICAgICAgICAgICB0aGlzLmJhc2UgPSBiYXNlOworICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ID0gYmFzZS5nZXRCZWdpbkluZGV4KCk7CisgICAgICAgICAgICB0aGlzLnJhbmdlTGltaXQgPSBiYXNlLmdldEVuZEluZGV4KCk7CisgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IGJhc2UuZ2V0SW5kZXgoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBjaGFyIGZpcnN0KCkgeworICAgICAgICAgICAgcmV0dXJuIHNldEluZGV4KHJhbmdlU3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGNoYXIgbGFzdCgpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRJbmRleChyYW5nZUxpbWl0IC0gMSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgY2hhciBjdXJyZW50KCkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IHJhbmdlU3RhcnQgfHwgY3VycmVudEluZGV4ID49IHJhbmdlTGltaXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRE9ORTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLnNldEluZGV4KGN1cnJlbnRJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgY2hhciBuZXh0KCkgeworCisgICAgICAgICAgICBjdXJyZW50SW5kZXgrKzsKKyAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gcmFuZ2VMaW1pdCkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHJhbmdlTGltaXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIERPTkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5zZXRJbmRleChjdXJyZW50SW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGNoYXIgcHJldmlvdXMoKSB7CisKKyAgICAgICAgICAgIGN1cnJlbnRJbmRleC0tOworICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IHJhbmdlU3RhcnQpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSByYW5nZVN0YXJ0OworICAgICAgICAgICAgICAgIHJldHVybiBET05FOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Uuc2V0SW5kZXgoY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBjaGFyIHNldEluZGV4KGludCBpKSB7CisKKyAgICAgICAgICAgIGlmIChpIDwgcmFuZ2VTdGFydCB8fCBpID4gcmFuZ2VMaW1pdCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcG9zaXRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRCZWdpbkluZGV4KCkgeworICAgICAgICAgICAgcmV0dXJuIHJhbmdlU3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldEVuZEluZGV4KCkgeworICAgICAgICAgICAgcmV0dXJuIHJhbmdlTGltaXQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldEluZGV4KCkgeworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB7CisKKyAgICAgICAgICAgIFNhZmVDaGFySXRlcmF0b3IgY29weSA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvcHkgPSAoU2FmZUNoYXJJdGVyYXRvcikgc3VwZXIuY2xvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNsb25lIG5vdCBzdXBwb3J0ZWQ6ICIgKyBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY29weU9mQmFzZSA9IChDaGFyYWN0ZXJJdGVyYXRvcikgYmFzZS5jbG9uZSgpOworICAgICAgICAgICAgY29weS5iYXNlID0gY29weU9mQmFzZTsKKyAgICAgICAgICAgIHJldHVybiBjb3B5OworICAgICAgICB9CisgICAgfQorICAgIC8vL0NMT1ZFUjpPTgorCisgICAgLy8vQ0xPVkVSOk9GRgorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkZWJ1Z1ByaW50bG4oU3RyaW5nIHMpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHplcm9zID0gIjAwMDAiOworICAgICAgICBTdHJpbmcgdGVtcDsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHMuY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGMgPj0gJyAnICYmIGMgPCAnXHUwMDdmJykgeworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKCJcXHUiKTsKKyAgICAgICAgICAgICAgICB0ZW1wID0gSW50ZWdlci50b0hleFN0cmluZygoaW50KWMpOworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoemVyb3Muc3Vic3RyaW5nKDAsIDQgLSB0ZW1wLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCh0ZW1wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ob3V0KTsKKyAgICB9CisgICAgLy8vQ0xPVkVSOk9OCit9CisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1J1bGVCYXNlZENvbGxhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9SdWxlQmFzZWRDb2xsYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyMDgxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9SdWxlQmFzZWRDb2xsYXRvci5qYXZhCkBAIC0wLDAgKzEsNDEwOCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1J1bGVCYXNlZENvbGxhdG9yLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMi8wMyAyMDo0NToyMCAkIAorKiAkUmV2aXNpb246IDEuMjggJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkludFRyaWU7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5UcmllOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlRGF0YTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkJPQ1U7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVRGVidWc7CisKKy8qKgorICogPHA+UnVsZUJhc2VkQ29sbGF0b3IgaXMgYSBjb25jcmV0ZSBzdWJjbGFzcyBvZiBDb2xsYXRvci4gSXQgYWxsb3dzCisgKiBjdXN0b21pemF0aW9uIG9mIHRoZSBDb2xsYXRvciB2aWEgdXNlci1zcGVjaWZpZWQgcnVsZSBzZXRzLgorICogUnVsZUJhc2VkQ29sbGF0b3IgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGxpYW50IHRvIHRoZSA8YQorICogaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3JlcG9ydHMvdHIxMC8iPiBVbmljb2RlCisgKiBDb2xsYXRpb24gQWxnb3JpdGhtIChVQ0EpPC9hPiBhbmQgY29uZm9ybXMgdG8gSVNPIDE0NjUxLjwvcD4KKyAqCisgKiA8cD5Vc2VycyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byByZWFkIDxhCisgKiBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1L3VzZXJndWlkZS9Db2xsYXRlX0ludHJvLmh0bWwiPgorICogdGhlIHVzZXJzIGd1aWRlPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sbGF0aW9uCisgKiBzZXJ2aWNlIGJlZm9yZSB1c2luZyB0aGlzIGNsYXNzLjwvcD4KKyAqCisgKiA8cD5DcmVhdGUgYSBSdWxlQmFzZWRDb2xsYXRvciBmcm9tIGEgbG9jYWxlIGJ5IGNhbGxpbmcgdGhlCisgKiBnZXRJbnN0YW5jZShMb2NhbGUpIGZhY3RvcnkgbWV0aG9kIGluIHRoZSBiYXNlIGNsYXNzIENvbGxhdG9yLgorICogQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlKSBjcmVhdGVzIGEgUnVsZUJhc2VkQ29sbGF0b3Igb2JqZWN0CisgKiBiYXNlZCBvbiB0aGUgY29sbGF0aW9uIHJ1bGVzIGRlZmluZWQgYnkgdGhlIGFyZ3VtZW50IGxvY2FsZS4gIElmIGEKKyAqIGN1c3RvbWl6ZWQgY29sbGF0aW9uIG9yZGVyaW5nIGFyIGF0dHJpYnV0ZXMgaXMgcmVxdWlyZWQsIHVzZSB0aGUKKyAqIFJ1bGVCYXNlZENvbGxhdG9yKFN0cmluZykgY29uc3RydWN0b3Igd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyAqIHJ1bGVzLiBUaGUgY3VzdG9taXplZCBSdWxlQmFzZWRDb2xsYXRvciB3aWxsIGJhc2UgaXRzIG9yZGVyaW5nIG9uCisgKiBVQ0EsIHdoaWxlIHJlLWFkanVzdGluZyB0aGUgYXR0cmlidXRlcyBhbmQgb3JkZXJzIG9mIHRoZSBjaGFyYWN0ZXJzCisgKiBpbiB0aGUgc3BlY2lmaWVkIHJ1bGUgYWNjb3JkaW5nbHkuPC9wPgorICoKKyAqIDxwPlJ1bGVCYXNlZENvbGxhdG9yIHByb3ZpZGVzIGNvcnJlY3QgY29sbGF0aW9uIG9yZGVycyBmb3IgbW9zdAorICogbG9jYWxlcyBzdXBwb3J0ZWQgaW4gSUNVLiBJZiBzcGVjaWZpYyBkYXRhIGZvciBhIGxvY2FsZSBpcyBub3QKKyAqIGF2YWlsYWJsZSwgdGhlIG9yZGVycyBldmVudHVhbGx5IGZhbGxzIGJhY2sgdG8gdGhlIDxhCisgKiBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjEwLyI+VUNBIGNvbGxhdGlvbgorICogb3JkZXIgPC9hPi48L3A+CisgKgorICogPHA+Rm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2xsYXRpb24gcnVsZSBzeW50YXggYW5kIGRldGFpbHMKKyAqIGFib3V0IGN1c3RvbWl6YXRpb24sIHBsZWFzZSByZWZlciB0byB0aGUKKyAqIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvdXNlcmd1aWRlL0NvbGxhdGVfQ3VzdG9taXphdGlvbi5odG1sIj4KKyAqIENvbGxhdGlvbiBjdXN0b21pemF0aW9uPC9hPiBzZWN0aW9uIG9mIHRoZSB1c2VyJ3MgZ3VpZGUuPC9wPgorICoKKyAqIDxwPjxzdHJvbmc+Tm90ZTwvc3Ryb25nPiB0aGF0IHRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4KKyAqIHRoZSBDb2xsYXRpb24gcnVsZSBzeW50YXggdXNlZCBpbiBKYXZhIGFuZCBJQ1U0SjoKKyAqCisgKiA8dWw+CisgKiA8bGk+QWNjb3JkaW5nIHRvIHRoZSBKREsgZG9jdW1lbnRhdGlvbjoKKyAqIDxpPgorICogPHA+CisgKiBNb2RpZmllciAnIScgOiBUdXJucyBvbiBUaGFpL0xhbyB2b3dlbC1jb25zb25hbnQgc3dhcHBpbmcuIElmIHRoaXMgcnVsZSAKKyAqIGlzIGluIGZvcmNlIHdoZW4gYSBUaGFpIHZvd2VsIG9mIHRoZSByYW5nZSAmIzkyO1UwRTQwLSYjOTI7VTBFNDQgcHJlY2VkZXMgYSAKKyAqIFRoYWkgY29uc29uYW50IG9mIHRoZSByYW5nZSAmIzkyO1UwRTAxLSYjOTI7VTBFMkUgT1IgYSBMYW8gdm93ZWwgb2YgdGhlIAorICogcmFuZ2UgJiM5MjtVMEVDMC0mIzkyO1UwRUM0IHByZWNlZGVzIGEgTGFvIGNvbnNvbmFudCBvZiB0aGUgcmFuZ2UgCisgKiAmIzkyO1UwRTgxLSYjOTI7VTBFQUUgdGhlbiB0aGUgCisgKiB2b3dlbCBpcyBwbGFjZWQgYWZ0ZXIgdGhlIGNvbnNvbmFudCBmb3IgY29sbGF0aW9uIHB1cnBvc2VzLiAKKyAqIDwvcD4KKyAqIDxwPgorICogSWYgYSBydWxlIGlzIHdpdGhvdXQgdGhlIG1vZGlmaWVyICchJywgdGhlIFRoYWkvTGFvIHZvd2VsLWNvbnNvbmFudCAKKyAqIHN3YXBwaW5nIGlzIG5vdCB0dXJuZWQgb24uCisgKiA8L3A+CisgKiA8L2k+CisgKiA8cD4KKyAqIElDVTRKJ3MgUnVsZUJhc2VkQ29sbGF0b3IgZG9lcyBub3Qgc3VwcG9ydCB0dXJuaW5nIG9mZiB0aGUgVGhhaS9MYW8gCisgKiB2b3dlbC1jb25zb25hbnQgc3dhcHBpbmcsIHNpbmNlIHRoZSBVQ0EgY2xlYXJseSBzdGF0ZXMgdGhhdCBpdCBoYXMgdG8gYmUgCisgKiBzdXBwb3J0ZWQgdG8gZW5zdXJlIGEgY29ycmVjdCBzb3J0aW5nIG9yZGVyLiBJZiBhICchJyBpcyBlbmNvdW50ZXJlZCwgaXQgaXMKKyAqIGlnbm9yZWQuCisgKiA8L3A+CisgKiA8bGk+QXMgbWVudGlvbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIENvbGxhdG9yLCAKKyAqICAgICBjb21wYXRpYmlsaXR5IGRlY29tcG9zaXRpb24gbW9kZSBpcyBub3Qgc3VwcG9ydGVkLgorICogPC91bD4KKyAqIDxwPgorICogPHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPgorICogPC9wPgorICogPHA+CisgKiBDcmVhdGluZyBDdXN0b21pemVkIFJ1bGVCYXNlZENvbGxhdG9yczoKKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIFN0cmluZyBzaW1wbGUgPSAiJmFtcDsgYSAmbHQ7IGIgJmx0OyBjICZsdDsgZCI7CisgKiBSdWxlQmFzZWRDb2xsYXRvciBzaW1wbGVDb2xsYXRvciA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihzaW1wbGUpOworICogCisgKiBTdHJpbmcgbm9yd2VnaWFuID0gIiZhbXA7IGEgLCBBICZsdDsgYiAsIEIgJmx0OyBjICwgQyAmbHQ7IGQgLCBEICZsdDsgZSAsIEUgIgorICogICAgICAgICAgICAgICAgICAgICsgIiZsdDsgZiAsIEYgJmx0OyBnICwgRyAmbHQ7IGggLCBIICZsdDsgaSAsIEkgJmx0OyBqICwgIgorICogICAgICAgICAgICAgICAgICAgICsgIkogJmx0OyBrICwgSyAmbHQ7IGwgLCBMICZsdDsgbSAsIE0gJmx0OyBuICwgTiAmbHQ7ICIKKyAqICAgICAgICAgICAgICAgICAgICArICJvICwgTyAmbHQ7IHAgLCBQICZsdDsgcSAsIFEgJmx0IHIgLCBSICZsdCBzICwgUyAmbHQ7ICIKKyAqICAgICAgICAgICAgICAgICAgICArICJ0ICwgVCAmbHQ7IHUgLCBVICZsdDsgdiAsIFYgJmx0OyB3ICwgVyAmbHQ7IHggLCBYICIKKyAqICAgICAgICAgICAgICAgICAgICArICImbHQ7IHkgLCBZICZsdDsgeiAsIFogJmx0OyAmIzkyO3UwMEU1ID0gYSYjOTI7dTAzMEEgIgorICogICAgICAgICAgICAgICAgICAgICsgIiwgJiM5Mjt1MDBDNSA9IEEmIzkyO3UwMzBBIDsgYWEgLCBBQSAmbHQ7ICYjOTI7dTAwRTYgIgorICogICAgICAgICAgICAgICAgICAgICsgIiwgJiM5Mjt1MDBDNiAmbHQ7ICYjOTI7dTAwRjggLCAmIzkyO3UwMEQ4IjsKKyAqIFJ1bGVCYXNlZENvbGxhdG9yIG5vcndlZ2lhbkNvbGxhdG9yID0gbmV3IFJ1bGVCYXNlZENvbGxhdG9yKG5vcndlZ2lhbik7CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiBDb25jYXRlbmF0aW5nIHJ1bGVzIHRvIGNvbWJpbmUgPGNvZGU+Q29sbGF0b3I8L2NvZGU+czoKKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIC8vIENyZWF0ZSBhbiBlbl9VUyBDb2xsYXRvciBvYmplY3QKKyAqIFJ1bGVCYXNlZENvbGxhdG9yIGVuX1VTQ29sbGF0b3IgPSAoUnVsZUJhc2VkQ29sbGF0b3IpCisgKiAgICAgQ29sbGF0b3IuZ2V0SW5zdGFuY2UobmV3IExvY2FsZSgiZW4iLCAiVVMiLCAiIikpOworICogLy8gQ3JlYXRlIGEgZGFfREsgQ29sbGF0b3Igb2JqZWN0CisgKiBSdWxlQmFzZWRDb2xsYXRvciBkYV9ES0NvbGxhdG9yID0gKFJ1bGVCYXNlZENvbGxhdG9yKQorICogICAgIENvbGxhdG9yLmdldEluc3RhbmNlKG5ldyBMb2NhbGUoImRhIiwgIkRLIiwgIiIpKTsKKyAqIC8vIENvbWJpbmUgdGhlIHR3bworICogLy8gRmlyc3QsIGdldCB0aGUgY29sbGF0aW9uIHJ1bGVzIGZyb20gZW5fVVNDb2xsYXRvcgorICogU3RyaW5nIGVuX1VTUnVsZXMgPSBlbl9VU0NvbGxhdG9yLmdldFJ1bGVzKCk7CisgKiAvLyBTZWNvbmQsIGdldCB0aGUgY29sbGF0aW9uIHJ1bGVzIGZyb20gZGFfREtDb2xsYXRvcgorICogU3RyaW5nIGRhX0RLUnVsZXMgPSBkYV9ES0NvbGxhdG9yLmdldFJ1bGVzKCk7CisgKiBSdWxlQmFzZWRDb2xsYXRvciBuZXdDb2xsYXRvciA9CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJ1bGVCYXNlZENvbGxhdG9yKGVuX1VTUnVsZXMgKyBkYV9ES1J1bGVzKTsKKyAqIC8vIG5ld0NvbGxhdG9yIGhhcyB0aGUgY29tYmluZWQgcnVsZXMKKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIE1ha2luZyBjaGFuZ2VzIHRvIGFuIGV4aXN0aW5nIFJ1bGVCYXNlZENvbGxhdG9yIHRvIGNyZWF0ZSBhIG5ldyAKKyAqIDxjb2RlPkNvbGxhdG9yPC9jb2RlPiBvYmplY3QsIGJ5IGFwcGVuZGluZyBjaGFuZ2VzIHRvIHRoZSBleGlzdGluZyBydWxlOgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogLy8gQ3JlYXRlIGEgbmV3IENvbGxhdG9yIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgcnVsZXMKKyAqIFN0cmluZyBhZGRSdWxlcyA9ICImYW1wOyBDICZsdDsgY2gsIGNILCBDaCwgQ0giOworICogUnVsZUJhc2VkQ29sbGF0b3IgbXlDb2xsYXRvciA9CisgKiAgICAgbmV3IFJ1bGVCYXNlZENvbGxhdG9yKGVuX1VTQ29sbGF0b3IgKyBhZGRSdWxlcyk7CisgKiAvLyBteUNvbGxhdG9yIGNvbnRhaW5zIHRoZSBuZXcgcnVsZXMKKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIEhvdyB0byBjaGFuZ2UgdGhlIG9yZGVyIG9mIG5vbi1zcGFjaW5nIGFjY2VudHM6CisgKiA8YmxvY2txdW90ZT4KKyAqIDxwcmU+CisgKiAvLyBvbGQgcnVsZSB3aXRoIG1haW4gYWNjZW50cworICogU3RyaW5nIG9sZFJ1bGVzID0gIj0gJiM5Mjt1MDMwMSA7ICYjOTI7dTAzMDAgOyAmIzkyO3UwMzAyIDsgJiM5Mjt1MDMwOCAiICAgIAorICogICAgICAgICAgICAgICAgICsgIjsgJiM5Mjt1MDMyNyA7ICYjOTI7dTAzMDMgOyAmIzkyO3UwMzA0IDsgJiM5Mjt1MDMwNSAiCisgKiAgICAgICAgICAgICAgICAgKyAiOyAmIzkyO3UwMzA2IDsgJiM5Mjt1MDMwNyA7ICYjOTI7dTAzMDkgOyAmIzkyO3UwMzBBICIgCisgKiAgICAgICAgICAgICAgICAgKyAiOyAmIzkyO3UwMzBCIDsgJiM5Mjt1MDMwQyA7ICYjOTI7dTAzMEQgOyAmIzkyO3UwMzBFICIKKyAqICAgICAgICAgICAgICAgICArICI7ICYjOTI7dTAzMEYgOyAmIzkyO3UwMzEwIDsgJiM5Mjt1MDMxMSA7ICYjOTI7dTAzMTIgIgorICogICAgICAgICAgICAgICAgICsgIiZsdDsgYSAsIEEgOyBhZSwgQUUgOyAmIzkyO3UwMGU2ICwgJiM5Mjt1MDBjNiAiCisgKiAgICAgICAgICAgICAgICAgKyAiJmx0OyBiICwgQiAmbHQ7IGMsIEMgJmx0OyBlLCBFICZhbXA7IEMgJmx0OyBkICwgRCI7CisgKiAvLyBjaGFuZ2UgdGhlIG9yZGVyIG9mIGFjY2VudCBjaGFyYWN0ZXJzCisgKiBTdHJpbmcgYWRkT24gPSAiJmFtcDsgJiM5Mjt1MDMwMCA7ICYjOTI7dTAzMDggOyAmIzkyO3UwMzAyIjsKKyAqIFJ1bGVCYXNlZENvbGxhdG9yIG15Q29sbGF0b3IgPSBuZXcgUnVsZUJhc2VkQ29sbGF0b3Iob2xkUnVsZXMgKyBhZGRPbik7CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiBQdXR0aW5nIGluIGEgbmV3IHByaW1hcnkgb3JkZXJpbmcgYmVmb3JlIHRoZSBkZWZhdWx0IHNldHRpbmcsIAorICogZS5nLiBzb3J0IEVuZ2xpc2ggY2hhcmFjdGVycyBiZWZvcmUgb3IgYWZ0ZXIgSmFwYW5lc2UgY2hhcmFjdGVycyBpbiB0aGUgSmFwYW5lc2UgCisgKiA8Y29kZT5Db2xsYXRvcjwvY29kZT46CisgKiA8YmxvY2txdW90ZT4KKyAqIDxwcmU+CisgKiAvLyBnZXQgZW5fVVMgQ29sbGF0b3IgcnVsZXMKKyAqIFJ1bGVCYXNlZENvbGxhdG9yIGVuX1VTQ29sbGF0b3IgCisgKiAgICAgICAgICAgICAgICAgICAgICAgID0gKFJ1bGVCYXNlZENvbGxhdG9yKUNvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5VUyk7CisgKiAvLyBhZGQgYSBmZXcgSmFwYW5lc2UgY2hhcmFjdGVycyB0byBzb3J0IGJlZm9yZSBFbmdsaXNoIGNoYXJhY3RlcnMKKyAqIC8vIHN1cHBvc2UgdGhlIGxhc3QgY2hhcmFjdGVyIGJlZm9yZSB0aGUgZmlyc3QgYmFzZSBsZXR0ZXIgJ2EnIGluCisgKiAvLyB0aGUgRW5nbGlzaCBjb2xsYXRpb24gcnVsZSBpcyAmIzkyO3UyMjEyCisgKiBTdHJpbmcgamFTdHJpbmcgPSAiJiAmIzkyO3UyMjEyICZsdCAmIzkyO3UzMDQxLCAmIzkyO3UzMDQyICZsdCAmIzkyO3UzMDQzLCAiCisgKiAgICAgICAgICAgICAgICAgICArICImIzkyO3UzMDQ0IjsKKyAqIFJ1bGVCYXNlZENvbGxhdG9yIG15SmFwYW5lc2VDb2xsYXRvciAKKyAqICAgICAgICAgICAgICA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihlbl9VU0NvbGxhdG9yLmdldFJ1bGVzKCkgKyBqYVN0cmluZyk7CisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBjbGFzcyBpcyBub3Qgc3ViY2xhc3NhYmxlCisgKiA8L3A+CisgKiBAYXV0aG9yIFN5biBXZWUgUXVlaworICogQGRyYWZ0IElDVSAyLjIKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFJ1bGVCYXNlZENvbGxhdG9yIGV4dGVuZHMgQ29sbGF0b3IgCit7ICAgCisJLy8gcHVibGljIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvLyBwdWJsaWMgY29uc3RydWN0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQorCS8qKgorICAgICAqIDxwPgorICAgICAqIENvbnN0cnVjdG9yIHRoYXQgdGFrZXMgdGhlIGFyZ3VtZW50IHJ1bGVzIGZvciAKKyAgICAgKiBjdXN0b21pemF0aW9uLiBUaGUgY29sbGF0b3Igd2lsbCBiZSBiYXNlZCBvbiBVQ0EsIAorICAgICAqIHdpdGggdGhlIGF0dHJpYnV0ZXMgYW5kIHJlLW9yZGVyaW5nIG9mIHRoZSBjaGFyYWN0ZXJzIHNwZWNpZmllZCBpbiB0aGUgCisgICAgICogYXJndW1lbnQgcnVsZXMuCisgICAgICogPC9wPgorICAgICAqIDxwPlNlZSB0aGUgdXNlciBndWlkZSdzIHNlY3Rpb24gb24gCisgICAgICogPGEgaHJlZj1odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1L3VzZXJndWlkZS9Db2xsYXRlX0N1c3RvbWl6YXRpb24uaHRtbD4KKyAgICAgKiBDb2xsYXRpb24gQ3VzdG9taXphdGlvbjwvYT4gZm9yIGRldGFpbHMgb24gdGhlIHJ1bGUgc3ludGF4LgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gcnVsZXMgdGhlIGNvbGxhdGlvbiBydWxlcyB0byBidWlsZCB0aGUgY29sbGF0aW9uIHRhYmxlIGZyb20uCisgICAgICogQGV4Y2VwdGlvbiBQYXJzZUV4Y2VwdGlvbiBhbmQgSU9FeGNlcHRpb24gdGhyb3duLiBQYXJzZUV4Y2VwdGlvbiB0aHJvd24gCisgICAgICogICAgICAgICAgICB3aGVuIGFyZ3VtZW50IHJ1bGVzIGhhdmUgYW4gaW52YWxpZCBzeW50YXguIElPRXhjZXB0aW9uIAorICAgICAqICAgICAgICAgICAgdGhyb3duIHdoZW4gYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSByZWFkaW5nIGludGVybmFsIGRhdGEuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgUnVsZUJhc2VkQ29sbGF0b3IoU3RyaW5nIHJ1bGVzKSB0aHJvd3MgRXhjZXB0aW9uCisgICAgeworICAgICAgICBpZiAocnVsZXMgPT0gbnVsbCB8fCBydWxlcy5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29sbGF0aW9uIHJ1bGVzIGNhbiBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgCXNldFdpdGhVQ0FEYXRhKCk7CisgICAgICAgIENvbGxhdGlvblBhcnNlZFJ1bGVCdWlsZGVyIGJ1aWxkZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBDb2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlcihydWxlcyk7CisJICAgIAorCQlidWlsZGVyLnNldFJ1bGVzKHRoaXMpOworICAgICAgICBtX3J1bGVzXyA9IHJ1bGVzOworICAgICAgICBpbml0KCk7CisgICAgICAgIGluaXRVdGlsaXR5KCk7CisgICAgfQorICAgIAorICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBSdWxlQmFzZWRDb2xsYXRvcgorICAgICAqIEByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBSdWxlQmFzZWRDb2xsYXRvciBvYmplY3QKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIHJlc3VsdCA9IChSdWxlQmFzZWRDb2xsYXRvcilzdXBlci5jbG9uZSgpOworICAgICAgICAvLyBzaW5jZSBhbGwgY29sbGF0aW9uIGRhdGEgaW4gdGhlIFJ1bGVCYXNlZENvbGxhdG9yIGRvIG5vdCBjaGFuZ2UKKyAgICAgICAgLy8gd2UgY2FuIHNhZmVseSBhc3NpZ24gdGhlIHJlc3VsdC5maWVsZHMgdG8gdGhpcyBjb2xsYXRvcgorICAgICAgICByZXN1bHQuaW5pdFV0aWxpdHkoKTsgLy8gbGV0IHRoZSBuZXcgY2xvbmUgaGF2ZSB0aGVpciBvd24gdXRpbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0b3JzCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiBhIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBmb3IgdGhlIGdpdmVuIFN0cmluZy4KKyAgICAgKiBAc2VlIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBnZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoU3RyaW5nIHNvdXJjZSkgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihzb3VyY2UsIHRoaXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBmb3IgdGhlIGdpdmVuIENoYXJhY3Rlckl0ZXJhdG9yLgorICAgICAqIFRoZSBzb3VyY2UgaXRlcmF0b3IncyBpbnRlZ3JpdHkgd2lsbCBiZSBwcmVzZXJ2ZWQgc2luY2UgYSBuZXcgY29weSAKKyAgICAgKiB3aWxsIGJlIGNyZWF0ZWQgZm9yIHVzZS4KKyAgICAgKiBAc2VlIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBnZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBzb3VyY2UpIAorICAgIHsJCisgICAgIAlDaGFyYWN0ZXJJdGVyYXRvciBuZXdzb3VyY2UgPSAoQ2hhcmFjdGVySXRlcmF0b3Ipc291cmNlLmNsb25lKCk7ICAgCisgICAgICAgIHJldHVybiBuZXcgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKG5ld3NvdXJjZSwgdGhpcyk7CisgICAgfQorICAgIAorICAgIC8vIHB1YmxpYyBzZXR0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgSGlyYWdhbmEgUXVhdGVybmFyeSBtb2RlIHRvIGJlIG9uIG9yIG9mZi4KKyAgICAgKiBXaGVuIHRoZSBIaXJhZ2FuYSBRdWF0ZXJuYXJ5IG1vZGUgaXMgdHVybmVkIG9uLCB0aGUgY29sbGF0b3IgCisgICAgICogcG9zaXRpb25zIEhpcmFnYW5hIGNoYXJhY3RlcnMgYmVmb3JlIGFsbCBub24taWdub3JhYmxlIGNoYXJhY3RlcnMgaW4gCisgICAgICogUVVBVEVSTkFSWSBzdHJlbmd0aC4gVGhpcyBpcyB0byBwcm9kdWNlIGEgY29ycmVjdCBKSVMgY29sbGF0aW9uIG9yZGVyLAorICAgICAqIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gS2F0YWthbmEgIGFuZCBIaXJhZ2FuYSBjaGFyYWN0ZXJzLiAKKyAgICAgKiBAcGFyYW0gZmxhZyB0cnVlIGlmIEhpcmFnYW5hIFF1YXRlcm5hcnkgbW9kZSBpcyB0byBiZSBvbiwgZmFsc2UgCisgICAgICogICAgICAgIG90aGVyd2lzZQorICAgICAqIEBzZWUgI3NldEhpcmFnYW5hUXVhdGVybmFyeURlZmF1bHQKKyAgICAgKiBAc2VlICNpc0hpcmFnYW5hUXVhdGVybmFyeQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SGlyYWdhbmFRdWF0ZXJuYXJ5KGJvb2xlYW4gZmxhZykKKyAgICB7CisJbV9pc0hpcmFnYW5hNF8gPSBmbGFnOwkKKyAgICB9CisJCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgSGlyYWdhbmEgUXVhdGVybmFyeSBtb2RlIHRvIHRoZSBpbml0aWFsIG1vZGUgc2V0IGR1cmluZyAKKyAgICAgKiBjb25zdHJ1Y3Rpb24gb2YgdGhlIFJ1bGVCYXNlZENvbGxhdG9yLgorICAgICAqIFNlZSBzZXRIaXJhZ2FuYVF1YXRlcm5hcnkoYm9vbGVhbikgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgKiBAc2VlICNzZXRIaXJhZ2FuYVF1YXRlcm5hcnkoYm9vbGVhbikKKyAgICAgKiBAc2VlICNpc0hpcmFnYW5hUXVhdGVybmFyeQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SGlyYWdhbmFRdWF0ZXJuYXJ5RGVmYXVsdCgpCisgICAgeworCW1faXNIaXJhZ2FuYTRfID0gbV9kZWZhdWx0SXNIaXJhZ2FuYTRfOwkKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB3aGV0aGVyIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIHNvcnQgYmVmb3JlIGxvd2VyY2FzZQorICAgICAqIGNoYXJhY3RlcnMgb3IgdmljZSB2ZXJzYSwgaW4gc3RyZW5ndGggVEVSVElBUlkuIFRoZSBkZWZhdWx0IAorICAgICAqIG1vZGUgaXMgZmFsc2UsIGFuZCBzbyBsb3dlcmNhc2UgY2hhcmFjdGVycyBzb3J0IGJlZm9yZSB1cHBlcmNhc2UKKyAgICAgKiBjaGFyYWN0ZXJzLiAKKyAgICAgKiBJZiB0cnVlLCBzb3J0IHVwcGVyIGNhc2UgY2hhcmFjdGVycyBmaXJzdC4KKyAgICAgKiBAcGFyYW0gdXBwZXJmaXJzdCB0cnVlIHRvIHNvcnQgdXBwZXJjYXNlIGNoYXJhY3RlcnMgYmVmb3JlIAorICAgICAqICAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZSBjaGFyYWN0ZXJzLCBmYWxzZSB0byBzb3J0IGxvd2VyY2FzZSAKKyAgICAgKiAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGJlZm9yZSB1cHBlcmNhc2UgY2hhcmFjdGVycyAKKyAgICAgKiBAc2VlICNpc0xvd2VyQ2FzZUZpcnN0CisgICAgICogQHNlZSAjaXNVcHBlckNhc2VGaXJzdAorICAgICAqIEBzZWUgI3NldExvd2VyQ2FzZUZpcnN0CisgICAgICogQHNlZSAjc2V0Q2FzZUZpcnN0RGVmYXVsdAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VXBwZXJDYXNlRmlyc3QoYm9vbGVhbiB1cHBlcmZpcnN0KQorICAgIHsKKyAgICAgICAgaWYgKHVwcGVyZmlyc3QpIHsKKyAgICAgICAgICAgIGlmKG1fY2FzZUZpcnN0XyAhPSBBdHRyaWJ1dGVWYWx1ZS5VUFBFUl9GSVJTVF8pIHsKKyAgICAgICAgICAgICAgICBsYXRpbk9uZVJlZ2VuVGFibGVfID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY2FzZUZpcnN0XyA9IEF0dHJpYnV0ZVZhbHVlLlVQUEVSX0ZJUlNUXzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmKG1fY2FzZUZpcnN0XyAhPSBBdHRyaWJ1dGVWYWx1ZS5PRkZfKSB7CisgICAgICAgICAgICAgICAgbGF0aW5PbmVSZWdlblRhYmxlXyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2Nhc2VGaXJzdF8gPSBBdHRyaWJ1dGVWYWx1ZS5PRkZfOworICAgICAgICB9CisgICAgICAgIHVwZGF0ZUludGVybmFsU3RhdGUoKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgb3JkZXJzIG9mIGxvd2VyIGNhc2VkIGNoYXJhY3RlcnMgdG8gc29ydCBiZWZvcmUgdXBwZXIgY2FzZWQgCisgICAgICogY2hhcmFjdGVycywgaW4gc3RyZW5ndGggVEVSVElBUlkuIFRoZSBkZWZhdWx0IAorICAgICAqIG1vZGUgaXMgZmFsc2UuCisgICAgICogSWYgdHJ1ZSBpcyBzZXQsIHRoZSBSdWxlQmFzZWRDb2xsYXRvciB3aWxsIHNvcnQgbG93ZXIgY2FzZWQgY2hhcmFjdGVycyAKKyAgICAgKiBiZWZvcmUgdGhlIHVwcGVyIGNhc2VkIG9uZXMuCisgICAgICogT3RoZXJ3aXNlLCBpZiBmYWxzZSBpcyBzZXQsIHRoZSBSdWxlQmFzZWRDb2xsYXRvciB3aWxsIGlnbm9yZSBjYXNlIAorICAgICAqIHByZWZlcmVuY2VzLgorICAgICAqIEBwYXJhbSBsb3dlcmZpcnN0IHRydWUgZm9yIHNvcnRpbmcgbG93ZXIgY2FzZWQgY2hhcmFjdGVycyBiZWZvcmUgCisgICAgICogICAgICAgICAgICAgICAgICAgdXBwZXIgY2FzZWQgY2hhcmFjdGVycywgZmFsc2UgdG8gaWdub3JlIGNhc2UgCisgICAgICogICAgICAgICAgICAgICAgICAgcHJlZmVyZW5jZXMuIAorICAgICAqIEBzZWUgI2lzTG93ZXJDYXNlRmlyc3QKKyAgICAgKiBAc2VlICNpc1VwcGVyQ2FzZUZpcnN0CisgICAgICogQHNlZSAjc2V0VXBwZXJDYXNlRmlyc3QKKyAgICAgKiBAc2VlICNzZXRDYXNlRmlyc3REZWZhdWx0CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRMb3dlckNhc2VGaXJzdChib29sZWFuIGxvd2VyZmlyc3QpCisgICAgeworICAJaWYgKGxvd2VyZmlyc3QpIHsKKyAgICAgICAgICAgIGlmKG1fY2FzZUZpcnN0XyAhPSBBdHRyaWJ1dGVWYWx1ZS5MT1dFUl9GSVJTVF8pIHsKKyAgICAgICAgICAgICAgICBsYXRpbk9uZVJlZ2VuVGFibGVfID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgIAkJCW1fY2FzZUZpcnN0XyA9IEF0dHJpYnV0ZVZhbHVlLkxPV0VSX0ZJUlNUXzsKKyAgIAl9CisgICAJZWxzZSB7CisgICAgICAgICAgICBpZihtX2Nhc2VGaXJzdF8gIT0gQXR0cmlidXRlVmFsdWUuT0ZGXykgeworICAgICAgICAgICAgICAgIGxhdGluT25lUmVnZW5UYWJsZV8gPSB0cnVlOworICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgCSAgICBtX2Nhc2VGaXJzdF8gPSBBdHRyaWJ1dGVWYWx1ZS5PRkZfOworICAgIAl9CisgICAJdXBkYXRlSW50ZXJuYWxTdGF0ZSgpOworICAgIH0KKyAgIAkKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjYXNlIGZpcnN0IG1vZGUgdG8gdGhlIGluaXRpYWwgbW9kZSBzZXQgZHVyaW5nIAorICAgICAqIGNvbnN0cnVjdGlvbiBvZiB0aGUgUnVsZUJhc2VkQ29sbGF0b3IuCisgICAgICogU2VlIHNldFVwcGVyQ2FzZUZpcnN0KGJvb2xlYW4pIGFuZCBzZXRMb3dlckNhc2VGaXJzdChib29sZWFuKSBmb3IgbW9yZSAKKyAgICAgKiBkZXRhaWxzLgorICAgICAqIEBzZWUgI2lzTG93ZXJDYXNlRmlyc3QKKyAgICAgKiBAc2VlICNpc1VwcGVyQ2FzZUZpcnN0CisgICAgICogQHNlZSAjc2V0TG93ZXJDYXNlRmlyc3QoYm9vbGVhbikKKyAgICAgKiBAc2VlICNzZXRVcHBlckNhc2VGaXJzdChib29sZWFuKQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2FzZUZpcnN0RGVmYXVsdCgpCisgICAgeworICAgICAgICBpZihtX2Nhc2VGaXJzdF8gIT0gbV9kZWZhdWx0Q2FzZUZpcnN0XykgeworICAgICAgICAgICAgbGF0aW5PbmVSZWdlblRhYmxlXyA9IHRydWU7CisgICAgICAgIH0gICAgICAgICAgICAKKwltX2Nhc2VGaXJzdF8gPSBtX2RlZmF1bHRDYXNlRmlyc3RfOworCXVwZGF0ZUludGVybmFsU3RhdGUoKTsKKyAgICB9CisgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBhbHRlcm5hdGUgaGFuZGxpbmcgbW9kZSB0byB0aGUgaW5pdGlhbCBtb2RlIHNldCBkdXJpbmcgCisgICAgICogY29uc3RydWN0aW9uIG9mIHRoZSBSdWxlQmFzZWRDb2xsYXRvci4KKyAgICAgKiBTZWUgc2V0QWx0ZXJuYXRlSGFuZGxpbmcoYm9vbGVhbikgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgKiBAc2VlICNzZXRBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQoYm9vbGVhbikKKyAgICAgKiBAc2VlICNpc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZCgpCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRBbHRlcm5hdGVIYW5kbGluZ0RlZmF1bHQoKQorICAgIHsKKyAgICAJbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8gPSBtX2RlZmF1bHRJc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF87CisgICAgCXVwZGF0ZUludGVybmFsU3RhdGUoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY2FzZSBsZXZlbCBtb2RlIHRvIHRoZSBpbml0aWFsIG1vZGUgc2V0IGR1cmluZyAKKyAgICAgKiBjb25zdHJ1Y3Rpb24gb2YgdGhlIFJ1bGVCYXNlZENvbGxhdG9yLgorICAgICAqIFNlZSBzZXRDYXNlTGV2ZWwoYm9vbGVhbikgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgKiBAc2VlICNzZXRDYXNlTGV2ZWwoYm9vbGVhbikKKyAgICAgKiBAc2VlICNpc0Nhc2VMZXZlbAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q2FzZUxldmVsRGVmYXVsdCgpCisgICAgeworICAgIAltX2lzQ2FzZUxldmVsXyA9IG1fZGVmYXVsdElzQ2FzZUxldmVsXzsKKyAgICAJdXBkYXRlSW50ZXJuYWxTdGF0ZSgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBkZWNvbXBvc2l0aW9uIG1vZGUgdG8gdGhlIGluaXRpYWwgbW9kZSBzZXQgZHVyaW5nIGNvbnN0cnVjdGlvbgorICAgICAqIG9mIHRoZSBSdWxlQmFzZWRDb2xsYXRvci4KKyAgICAgKiBTZWUgc2V0RGVjb21wb3NpdGlvbihpbnQpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICogQHNlZSAjZ2V0RGVjb21wb3NpdGlvbgorICAgICAqIEBzZWUgI3NldERlY29tcG9zaXRpb24oaW50KQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RGVjb21wb3NpdGlvbkRlZmF1bHQoKQorICAgIHsKKyAgICAJc2V0RGVjb21wb3NpdGlvbihtX2RlZmF1bHREZWNvbXBvc2l0aW9uXyk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIEZyZW5jaCBjb2xsYXRpb24gbW9kZSB0byB0aGUgaW5pdGlhbCBtb2RlIHNldCBkdXJpbmcgCisgICAgICogY29uc3RydWN0aW9uIG9mIHRoZSBSdWxlQmFzZWRDb2xsYXRvci4KKyAgICAgKiBTZWUgc2V0RnJlbmNoQ29sbGF0aW9uKGJvb2xlYW4pIGZvciBtb3JlIGRldGFpbHMuCisgICAgICogQHNlZSAjaXNGcmVuY2hDb2xsYXRpb24KKyAgICAgKiBAc2VlICNzZXRGcmVuY2hDb2xsYXRpb24oYm9vbGVhbikKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEZyZW5jaENvbGxhdGlvbkRlZmF1bHQoKQorICAgIHsKKyAgICAgICAgaWYobV9pc0ZyZW5jaENvbGxhdGlvbl8gIT0gbV9kZWZhdWx0SXNGcmVuY2hDb2xsYXRpb25fKSB7CisgICAgICAgICAgICBsYXRpbk9uZVJlZ2VuVGFibGVfID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIAltX2lzRnJlbmNoQ29sbGF0aW9uXyA9IG1fZGVmYXVsdElzRnJlbmNoQ29sbGF0aW9uXzsKKyAgICAJdXBkYXRlSW50ZXJuYWxTdGF0ZSgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjb2xsYXRpb24gc3RyZW5ndGggdG8gdGhlIGluaXRpYWwgbW9kZSBzZXQgZHVyaW5nIHRoZSAKKyAgICAgKiBjb25zdHJ1Y3Rpb24gb2YgdGhlIFJ1bGVCYXNlZENvbGxhdG9yLgorICAgICAqIFNlZSBzZXRTdHJlbmd0aChpbnQpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICogQHNlZSAjc2V0U3RyZW5ndGgoaW50KQorICAgICAqIEBzZWUgI2dldFN0cmVuZ3RoCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTdHJlbmd0aERlZmF1bHQoKQorICAgIHsKKyAgICAJc2V0U3RyZW5ndGgobV9kZWZhdWx0U3RyZW5ndGhfKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbW9kZSBmb3IgdGhlIGRpcmVjdGlvbiBvZiBTRUNPTkRBUlkgd2VpZ2h0cyB0byBiZSB1c2VkIGluIAorICAgICAqIEZyZW5jaCBjb2xsYXRpb24uCisgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UsIHdoaWNoIHRyZWF0cyBTRUNPTkRBUlkgd2VpZ2h0cyBpbiB0aGUgb3JkZXIgCisgICAgICogdGhleSBhcHBlYXIuCisgICAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBTRUNPTkRBUlkgd2VpZ2h0cyB3aWxsIGJlIHNvcnRlZCBiYWNrd2FyZHMuCisgICAgICogU2VlIHRoZSBzZWN0aW9uIG9uIAorICAgICAqIDxhIGhyZWY9aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdS91c2VyZ3VpZGUvQ29sbGF0ZV9TZXJ2aWNlQXJjaGl0ZWN0dXJlLmh0bWw+CisgICAgICogRnJlbmNoIGNvbGxhdGlvbjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIGZsYWcgdHJ1ZSB0byBzZXQgdGhlIEZyZW5jaCBjb2xsYXRpb24gb24sIGZhbHNlIHRvIHNldCBpdCBvZmYKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqIEBzZWUgI2lzRnJlbmNoQ29sbGF0aW9uCisgICAgICogQHNlZSAjc2V0RnJlbmNoQ29sbGF0aW9uRGVmYXVsdAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEZyZW5jaENvbGxhdGlvbihib29sZWFuIGZsYWcpIAorICAgIHsKKyAgICAgICAgaWYobV9pc0ZyZW5jaENvbGxhdGlvbl8gIT0gZmxhZykgeworICAgICAgICAgICAgbGF0aW5PbmVSZWdlblRhYmxlXyA9IHRydWU7CisgICAgICAgIH0KKyAgICAJbV9pc0ZyZW5jaENvbGxhdGlvbl8gPSBmbGFnOworICAgIAl1cGRhdGVJbnRlcm5hbFN0YXRlKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIGFsdGVybmF0ZSBoYW5kbGluZyBmb3IgUVVBVEVSTkFSWSBzdHJlbmd0aCB0byBiZSBlaXRoZXIgCisgICAgICogc2hpZnRlZCBvciBub24taWdub3JhYmxlLiAKKyAgICAgKiBTZWUgdGhlIFVDQSBkZWZpbml0aW9uIG9uIAorICAgICAqIDxhIGhyZWY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMTAvI6czLjIuMiBWYXJpYWJsZSBDb2xsYXRpb24gRWxlbWVudHMiPgorICAgICAqIEFsdGVybmF0ZSBXZWlnaHRpbmc8L2E+LgorICAgICAqIFRoaXMgYXR0cmlidXRlIHdpbGwgb25seSBiZSBlZmZlY3RpdmUgd2hlbiBRVUFURVJOQVJZIHN0cmVuZ3RoIGlzIHNldC4KKyAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBtb2RlIGlzIGZhbHNlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSAKKyAgICAgKiBOT05fSUdOT1JBQkxFIG1vZGUgaW4gVUNBLiBJbiB0aGUgTk9OLUlHTk9SQUJMRSBtb2RlLCB0aGUgCisgICAgICogUnVsZUJhc2VkQ29sbGF0b3Igd2lsbCB0cmVhdHMgYWxsIHRoZSBjb2RlcG9pbnRzIHdpdGggbm9uLWlnbm9yYWJsZSAKKyAgICAgKiBwcmltYXJ5IHdlaWdodHMgaW4gdGhlIHNhbWUgd2F5LiAKKyAgICAgKiBJZiB0aGUgbW9kZSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGJlaGF2aW91ciBjb3JyZXNwb25kcyB0byBTSElGVEVEIGRlZmluZWQKKyAgICAgKiBpbiBVQ0EsIHRoaXMgY2F1c2VzIGNvZGVwb2ludHMgd2l0aCBQUklNQVJZIG9yZGVycyB0aGF0IGFyZSBlcXVhbCBvciAKKyAgICAgKiBiZWxvdyB0aGUgdmFyaWFibGUgdG9wIHZhbHVlIHRvIGJlIGlnbm9yZWQgaW4gUFJJTUFSWSBvcmRlciBhbmQgCisgICAgICogbW92ZWQgdG8gdGhlIFFVQVRFUk5BUlkgb3JkZXIuCisgICAgICogQHBhcmFtIHNoaWZ0ZWQgdHJ1ZSBpZiBTSElGVEVEIGJlaGF2aW91ciBmb3IgYWx0ZXJuYXRlIGhhbmRsaW5nIGlzIAorICAgICAqICAgICAgICBkZXNpcmVkLCBmYWxzZSBmb3IgdGhlIE5PTl9JR05PUkFCTEUgYmVoYXZpb3VyLgorICAgICAqIEBzZWUgI2lzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkCisgICAgICogQHNlZSAjc2V0QWx0ZXJuYXRlSGFuZGxpbmdEZWZhdWx0CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQoYm9vbGVhbiBzaGlmdGVkKQorICAgIHsKKyAgICAJbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8gPSBzaGlmdGVkOworICAgIAl1cGRhdGVJbnRlcm5hbFN0YXRlKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPgorICAgICAqIFdoZW4gY2FzZSBsZXZlbCBpcyBzZXQgdG8gdHJ1ZSwgYW4gYWRkaXRpb25hbCB3ZWlnaHQgaXMgZm9ybWVkIAorICAgICAqIGJldHdlZW4gdGhlIFNFQ09OREFSWSBhbmQgVEVSVElBUlkgd2VpZ2h0LCBrbm93biBhcyB0aGUgY2FzZSBsZXZlbC4gCisgICAgICogVGhlIGNhc2UgbGV2ZWwgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBsYXJnZSBhbmQgc21hbGwgSmFwYW5lc2UgS2FuYSAKKyAgICAgKiBjaGFyYWN0ZXJzLiBDYXNlIGxldmVsIGNvdWxkIGFsc28gYmUgdXNlZCBpbiBvdGhlciBzaXR1YXRpb25zLiAKKyAgICAgKiBGb3IgZXhhbXBsZSB0byBkaXN0aW5ndWlzaCBjZXJ0YWluIFBpbnlpbiBjaGFyYWN0ZXJzLiAKKyAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgd2hpY2ggbWVhbnMgdGhlIGNhc2UgbGV2ZWwgaXMgbm90IGdlbmVyYXRlZC4KKyAgICAgKiBUaGUgY29udGVudHMgb2YgdGhlIGNhc2UgbGV2ZWwgYXJlIGFmZmVjdGVkIGJ5IHRoZSBjYXNlIGZpcnN0CisgICAgICogbW9kZS4gQSBzaW1wbGUgd2F5IHRvIGlnbm9yZSBhY2NlbnQgZGlmZmVyZW5jZXMgaW4gYSBzdHJpbmcgaXMgdG8gc2V0IAorICAgICAqIHRoZSBzdHJlbmd0aCB0byBQUklNQVJZIGFuZCBlbmFibGUgY2FzZSBsZXZlbC4KKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogU2VlIHRoZSBzZWN0aW9uIG9uIAorICAgICAqIDxhIGhyZWY9aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdS91c2VyZ3VpZGUvQ29sbGF0ZV9TZXJ2aWNlQXJjaGl0ZWN0dXJlLmh0bWw+CisgICAgICogY2FzZSBsZXZlbDwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBmbGFnIHRydWUgaWYgY2FzZSBsZXZlbCBzb3J0aW5nIGlzIHJlcXVpcmVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqIEBzZWUgI3NldENhc2VMZXZlbERlZmF1bHQKKyAgICAgKiBAc2VlICNpc0Nhc2VMZXZlbAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENhc2VMZXZlbChib29sZWFuIGZsYWcpIAorICAgIHsKKyAgICAJbV9pc0Nhc2VMZXZlbF8gPSBmbGFnOworICAgIAl1cGRhdGVJbnRlcm5hbFN0YXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogPHA+CisgICAgICogU2V0cyB0aGlzIENvbGxhdG9yJ3Mgc3RyZW5ndGggcHJvcGVydHkuIFRoZSBzdHJlbmd0aCBwcm9wZXJ0eSAKKyAgICAgKiBkZXRlcm1pbmVzIHRoZSBtaW5pbXVtIGxldmVsIG9mIGRpZmZlcmVuY2UgY29uc2lkZXJlZCBzaWduaWZpY2FudCAKKyAgICAgKiBkdXJpbmcgY29tcGFyaXNvbi4KKyAgICAgKiA8L3A+CisgICAgICogPHA+U2VlIHRoZSBDb2xsYXRvciBjbGFzcyBkZXNjcmlwdGlvbiBmb3IgYW4gZXhhbXBsZSBvZiB1c2UuPC9wPgorICAgICAqIEBwYXJhbSB0aGUgbmV3IHN0cmVuZ3RoIHZhbHVlLgorICAgICAqIEBzZWUgI2dldFN0cmVuZ3RoCisgICAgICogQHNlZSAjc2V0U3RyZW5ndGhEZWZhdWx0CisgICAgICogQHNlZSAjUFJJTUFSWQorICAgICAqIEBzZWUgI1NFQ09OREFSWQorICAgICAqIEBzZWUgI1RFUlRJQVJZCisgICAgICogQHNlZSAjUVVBVEVSTkFSWQorICAgICAqIEBzZWUgI0lERU5USUNBTAorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBuZXcgc3RyZW5ndGggdmFsdWUgaXMgbm90IG9uZSAKKyAgICAgKiAJCQkJb2YgUFJJTUFSWSwgU0VDT05EQVJZLCBURVJUSUFSWSwgUVVBVEVSTkFSWSBvciBJREVOVElDQUwuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTdHJlbmd0aChpbnQgbmV3U3RyZW5ndGgpIAorICAgIHsKKyAgICAgICAgc3VwZXIuc2V0U3RyZW5ndGgobmV3U3RyZW5ndGgpOworICAgICAgICB1cGRhdGVJbnRlcm5hbFN0YXRlKCk7CisgICAgfQorCisgICAgLy8gcHVibGljIGdldHRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjb2xsYXRpb24gcnVsZXMgZm9yIHRoaXMgUnVsZUJhc2VkQ29sbGF0b3IuICAgICAKKyAgICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGNvbGxhdGlvbiBydWxlcworICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRSdWxlcygpCisgICAgeworICAgIAlyZXR1cm4gbV9ydWxlc187CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGFuIFVuaWNvZGVTZXQgdGhhdCBjb250YWlucyBhbGwgdGhlIGNoYXJhY3RlcnMgYW5kIHNlcXVlbmNlcyAKKyAgICAgKiB0YWlsb3JlZCBpbiB0aGlzIGNvbGxhdG9yLgorICAgICAqIEByZXR1cm4gYSBwb2ludGVyIHRvIGEgVW5pY29kZVNldCBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIAorICAgICAqICAgICAgICAgY29kZSBwb2ludHMgYW5kIHNlcXVlbmNlcyB0aGF0IG1heSBzb3J0IGRpZmZlcmVudGx5IHRoYW4KKyAgICAgKiAgICAgICAgIGluIHRoZSBVQ0EuIAorICAgICAqIEBleGNlcHRpb24gUGFyc2VFeGNlcHRpb24gdGhyb3duIHdoZW4gYXJndW1lbnQgcnVsZXMgaGF2ZSBhbiAKKyAgICAgKiAgICAgICAgICAgIGludmFsaWQgc3ludGF4LiBJT0V4Y2VwdGlvbiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0IGdldFRhaWxvcmVkU2V0KCkKKyAgICB7CisgICAgICAgIHRyeSB7CisJICAgICAgIENvbGxhdGlvblJ1bGVQYXJzZXIgc3JjID0gbmV3IENvbGxhdGlvblJ1bGVQYXJzZXIoZ2V0UnVsZXMoKSk7CisJICAgICAgIHJldHVybiBzcmMuZ2V0VGFpbG9yZWRTZXQoKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkEgdGFpbG9yaW5nIHJ1bGUgc2hvdWxkIG5vdCBoYXZlIGVycm9ycy4gU29tZXRoaW5nIGlzIHF1aXRlIHdyb25nISIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogPHA+CisgICAgICogR2V0IGEgQ29sbGF0aW9uIGtleSBmb3IgdGhlIGFyZ3VtZW50IFN0cmluZyBzb3VyY2UgZnJvbSB0aGlzIAorICAgICAqIFJ1bGVCYXNlZENvbGxhdG9yLiAKKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogR2VuZXJhbCByZWNvbW1lbmRhdGlvbjogPGJyPgorICAgICAqIElmIGNvbXBhcmlzb24gYXJlIHRvIGJlIGRvbmUgdG8gdGhlIHNhbWUgU3RyaW5nIG11bHRpcGxlIHRpbWVzLCBpdCB3b3VsZAorICAgICAqIGJlIG1vcmUgZWZmaWNpZW50IHRvIGdlbmVyYXRlIENvbGxhdGlvbktleXMgZm9yIHRoZSBTdHJpbmdzIGFuZCB1c2UgCisgICAgICogQ29sbGF0aW9uS2V5LmNvbXBhcmVUbyhDb2xsYXRpb25LZXkpIGZvciB0aGUgY29tcGFyaXNvbnMuCisgICAgICogSWYgdGhlIGVhY2ggU3RyaW5ncyBhcmUgY29tcGFyZWQgdG8gb25seSBvbmNlLCB1c2luZyB0aGUgbWV0aG9kCisgICAgICogUnVsZUJhc2VkQ29sbGF0b3IuY29tcGFyZShTdHJpbmcsIFN0cmluZykgd2lsbCBoYXZlIGEgYmV0dGVyIHBlcmZvcm1hbmNlLgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBTZWUgdGhlIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIGFuIGV4cGxhbmF0aW9uIGFib3V0IENvbGxhdGlvbktleXMuCisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHRleHQgU3RyaW5nIHRvIGJlIHRyYW5zZm9ybWVkIGludG8gYSBjb2xsYXRpb24ga2V5LgorICAgICAqIEByZXR1cm4gdGhlIENvbGxhdGlvbktleSBmb3IgdGhlIGdpdmVuIFN0cmluZyBiYXNlZCBvbiB0aGlzIAorICAgICAqICAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3IncyBjb2xsYXRpb24gcnVsZXMuIElmIHRoZSBzb3VyY2UgU3RyaW5nIGlzIAorICAgICAqICAgICAgICAgbnVsbCwgYSBudWxsIENvbGxhdGlvbktleSBpcyByZXR1cm5lZC4KKyAgICAgKiBAc2VlIENvbGxhdGlvbktleQorICAgICAqIEBzZWUgI2NvbXBhcmUoU3RyaW5nLCBTdHJpbmcpCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgQ29sbGF0aW9uS2V5IGdldENvbGxhdGlvbktleShTdHJpbmcgc291cmNlKQorICAgIHsKKyAgICAJaWYgKHNvdXJjZSA9PSBudWxsKSB7CisgICAgCQlyZXR1cm4gbnVsbDsKKyAgICAJfQorICAgIAlpbnQgc3RyZW5ndGggPSBnZXRTdHJlbmd0aCgpOworICAgIAltX3V0aWxDb21wYXJlMF8gPSBtX2lzQ2FzZUxldmVsXzsKKyAgICAgICAgbV91dGlsQ29tcGFyZTFfID0gdHJ1ZTsKKyAgICAJbV91dGlsQ29tcGFyZTJfID0gc3RyZW5ndGggPj0gU0VDT05EQVJZOworICAgIAltX3V0aWxDb21wYXJlM18gPSBzdHJlbmd0aCA+PSBURVJUSUFSWTsKKyAgICAJbV91dGlsQ29tcGFyZTRfID0gc3RyZW5ndGggPj0gUVVBVEVSTkFSWTsKKwkJbV91dGlsQ29tcGFyZTVfID0gc3RyZW5ndGggPT0gSURFTlRJQ0FMOworCisJCW1fdXRpbEJ5dGVzQ291bnQwXyA9IDA7CisgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyA9IDA7CisgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQyXyA9IDA7CisgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQzXyA9IDA7CisgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQ0XyA9IDA7CisgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQ1XyA9IDA7CisgICAgCW1fdXRpbENvdW50MF8gPSAwOworICAgICAgICBtX3V0aWxDb3VudDFfID0gMDsKKyAgICAgICAgbV91dGlsQ291bnQyXyA9IDA7CisgICAgICAgIG1fdXRpbENvdW50M18gPSAwOworICAgICAgICBtX3V0aWxDb3VudDRfID0gMDsKKyAgICAgICAgbV91dGlsQ291bnQ1XyA9IDA7CisgICAgCWJvb2xlYW4gZG9GcmVuY2ggPSBtX2lzRnJlbmNoQ29sbGF0aW9uXyAmJiBtX3V0aWxDb21wYXJlMl87CisgICAgCS8vIFRPRE86IFVDT0xfQ09NTU9OX0JPVDQgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgcVNoaWZ0ZWQuIAorCSAgICAvLyBJZiB3ZSBoYXZlIG5vIHFTaGlmdGVkLCB3ZSBkb24ndCBuZWVkIHRvIHNldCBVQ09MX0NPTU1PTl9CT1Q0IHNvIAorCSAgICAvLyBoaWdoLgorICAgCQlpbnQgY29tbW9uQm90dG9tNCA9ICgobV92YXJpYWJsZVRvcFZhbHVlXyA+Pj4gOCkgKyAxKSAmIExBU1RfQllURV9NQVNLXzsKKyAgICAJYnl0ZSBoaXJhZ2FuYTQgPSAwOworICAgIAlpZiAobV9pc0hpcmFnYW5hNF8gJiYgbV91dGlsQ29tcGFyZTRfKSB7CisgICAgCQkvLyBhbGxvY2F0ZSBvbmUgbW9yZSBzcGFjZSBmb3IgaGlyYWdhbmEsIHZhbHVlIGZvciBoaXJhZ2FuYQorICAgICAgCQloaXJhZ2FuYTQgPSAoYnl0ZSljb21tb25Cb3R0b200OworICAgICAgCQljb21tb25Cb3R0b200ICsrOworICAgIAl9CisgICAgCQorICAgIAlpbnQgYm90dG9tQ291bnQ0ID0gMHhGRiAtIGNvbW1vbkJvdHRvbTQ7CisgICAgCS8vIElmIHdlIG5lZWQgdG8gbm9ybWFsaXplLCB3ZSdsbCBkbyBpdCBhbGwgYXQgb25jZSBhdCB0aGUgYmVnaW5uaW5nIQorICAgIAlpZiAobV91dGlsQ29tcGFyZTVfICYmIE5vcm1hbGl6ZXIucXVpY2tDaGVjayhzb3VyY2UsIE5vcm1hbGl6ZXIuTkZEKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBOb3JtYWxpemVyLllFUykgeworICAgICAgICAgICAgLy8gaWYgaXQgaXMgaWRlbnRpY2FsIHN0cmVuZ3RoLCB3ZSBoYXZlIHRvIG5vcm1hbGl6ZSB0aGUgc3RyaW5nIHRvCisgICAgICAgICAgICAvLyBORkQgc28gdGhhdCBpdCB3aWxsIGJlIGFwcGVuZGVkIGNvcnJlY3RseSB0byB0aGUgZW5kIG9mIHRoZSBzb3J0CisgICAgICAgICAgICAvLyBrZXkKKyAgICAgICAgICAgIHNvdXJjZSA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKHNvdXJjZSwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGdldERlY29tcG9zaXRpb24oKSAhPSBOT19ERUNPTVBPU0lUSU9OCisgICAgCQkmJiBOb3JtYWxpemVyLnF1aWNrQ2hlY2soc291cmNlLCBOb3JtYWxpemVyLkZDRCkgCisgICAgCQkJCQkJCQkJCQkJIT0gTm9ybWFsaXplci5ZRVMpIHsKKyAgICAgICAgICAgIC8vIGZvciB0aGUgcmVzdCBvZiB0aGUgc3RyZW5ndGgsIGlmIGRlY29tcG9zaXRpb24gaXMgb24sIEZDRCBpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBlbm91Z2ggZm9yIHVzIHRvIHdvcmsgb24uCisgICAgICAgIAlzb3VyY2UgPSBOb3JtYWxpemVyLm5vcm1hbGl6ZShzb3VyY2UsTm9ybWFsaXplci5GQ0QpOworICAgIAl9CisJCWdldFNvcnRLZXlCeXRlcyhzb3VyY2UsIGRvRnJlbmNoLCBoaXJhZ2FuYTQsIGNvbW1vbkJvdHRvbTQsIAorICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tQ291bnQ0KTsKKwkJYnl0ZSBzb3J0a2V5W10gPSBnZXRTb3J0S2V5KHNvdXJjZSwgZG9GcmVuY2gsIGNvbW1vbkJvdHRvbTQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tQ291bnQ0KTsKKwkJcmV0dXJuIG5ldyBDb2xsYXRpb25LZXkoc291cmNlLCBzb3J0a2V5KTsKKyAgICB9CisgICAgCQkgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgYW4gdXBwZXJjYXNlIGNoYXJhY3RlciBpcyBzb3J0ZWQgYmVmb3JlIHRoZSBjb3JyZXNwb25kaW5nIGxvd2VyY2FzZSBjaGFyYWN0ZXIuCisgICAgICogU2VlIHNldENhc2VGaXJzdChib29sZWFuKSBmb3IgZGV0YWlscy4KKyAgICAgKiBAc2VlICNzZXRVcHBlckNhc2VGaXJzdAorICAgICAqIEBzZWUgI3NldExvd2VyQ2FzZUZpcnN0CisgICAgICogQHNlZSAjaXNMb3dlckNhc2VGaXJzdAorICAgICAqIEBzZWUgI3NldENhc2VGaXJzdERlZmF1bHQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdXBwZXIgY2FzZWQgY2hhcmFjdGVycyBhcmUgc29ydGVkIGJlZm9yZSBsb3dlciBjYXNlZCAKKyAgICAgKiAgICAgICAgIGNoYXJhY3RlcnMsIGZhbHNlIG90aGVyd2lzZQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgIHB1YmxpYyBib29sZWFuIGlzVXBwZXJDYXNlRmlyc3QoKQorICAgICB7CisgICAgICAgIHJldHVybiAobV9jYXNlRmlyc3RfID09IEF0dHJpYnV0ZVZhbHVlLlVQUEVSX0ZJUlNUXyk7CisgICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBhIGxvd2VyY2FzZSBjaGFyYWN0ZXIgaXMgc29ydGVkIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyB1cHBlcmNhc2UgY2hhcmFjdGVyLgorICAgICAqIFNlZSBzZXRDYXNlRmlyc3QoYm9vbGVhbikgZm9yIGRldGFpbHMuCisgICAgICogQHNlZSAjc2V0VXBwZXJDYXNlRmlyc3QKKyAgICAgKiBAc2VlICNzZXRMb3dlckNhc2VGaXJzdAorICAgICAqIEBzZWUgI2lzVXBwZXJDYXNlRmlyc3QKKyAgICAgKiBAc2VlICNzZXRDYXNlRmlyc3REZWZhdWx0CisgICAgICogQHJldHVybiB0cnVlIGxvd2VyIGNhc2VkIGNoYXJhY3RlcnMgYXJlIHNvcnRlZCBiZWZvcmUgdXBwZXIgY2FzZWQgCisgICAgICogICAgICAgICBjaGFyYWN0ZXJzLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzTG93ZXJDYXNlRmlyc3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChtX2Nhc2VGaXJzdF8gPT0gQXR0cmlidXRlVmFsdWUuTE9XRVJfRklSU1RfKTsJCisgICAgfQorCQorICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgYWx0ZXJuYXRlIGhhbmRsaW5nIGJlaGF2aW91ciBpcyB0aGUgVUNBIGRlZmluZWQgU0hJRlRFRCBvciAKKyAgICAgKiBOT05fSUdOT1JBQkxFLgorICAgICAqIElmIHJldHVybiB2YWx1ZSBpcyB0cnVlLCB0aGVuIHRoZSBhbHRlcm5hdGUgaGFuZGxpbmcgYXR0cmlidXRlIGZvciB0aGUgCisgICAgICogQ29sbGF0b3IgaXMgU0hJRlRFRC4gT3RoZXJ3aXNlIGlmIHJldHVybiB2YWx1ZSBpcyBmYWxzZSwgdGhlbiB0aGUgCisgICAgICogYWx0ZXJuYXRlIGhhbmRsaW5nIGF0dHJpYnV0ZSBmb3IgdGhlIENvbGxhdG9yIGlzIE5PTl9JR05PUkFCTEUKKyAgICAgKiBTZWUgc2V0QWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkKGJvb2xlYW4pIGZvciBtb3JlIGRldGFpbHMuCisgICAgICogQHJldHVybiB0cnVlIG9yIGZhbHNlIAorICAgICAqIEBzZWUgI3NldEFsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZChib29sZWFuKQorICAgICAqIEBzZWUgI3NldEFsdGVybmF0ZUhhbmRsaW5nRGVmYXVsdAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWQoKQorICAgIHsKKwlyZXR1cm4gbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF87CisgICAgfQorCQorICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBjYXNlIGxldmVsIGlzIHNldCB0byB0cnVlLgorICAgICAqIFNlZSBzZXRDYXNlTGV2ZWwoYm9vbGVhbikgZm9yIGRldGFpbHMuCisgICAgICogQHJldHVybiB0aGUgY2FzZSBsZXZlbCBtb2RlCisgICAgICogQHNlZSAjc2V0Q2FzZUxldmVsRGVmYXVsdAorICAgICAqIEBzZWUgI2lzQ2FzZUxldmVsCisgICAgICogQHNlZSAjc2V0Q2FzZUxldmVsKGJvb2xlYW4pCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0Nhc2VMZXZlbCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9pc0Nhc2VMZXZlbF87CQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgRnJlbmNoIENvbGxhdGlvbiBpcyBzZXQgdG8gdHJ1ZS4KKyAgICAgKiBTZWUgc2V0RnJlbmNoQ29sbGF0aW9uKGJvb2xlYW4pIGZvciBkZXRhaWxzLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBGcmVuY2ggQ29sbGF0aW9uIGlzIHNldCB0byB0cnVlLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKiBAc2VlICNzZXRGcmVuY2hDb2xsYXRpb24oYm9vbGVhbikKKyAgICAgKiBAc2VlICNzZXRGcmVuY2hDb2xsYXRpb25EZWZhdWx0CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICAgcHVibGljIGJvb2xlYW4gaXNGcmVuY2hDb2xsYXRpb24oKQorICAgICB7CisgICAgICAgICByZXR1cm4gbV9pc0ZyZW5jaENvbGxhdGlvbl87CisgICAgIH0KKwkKKwkvKioKKwkgKiBDaGVja3MgaWYgdGhlIEhpcmFnYW5hIFF1YXRlcm5hcnkgbW9kZSBpcyBzZXQgb24uCisJICogU2VlIHNldEhpcmFnYW5hUXVhdGVybmFyeShib29sZWFuKSBmb3IgbW9yZSBkZXRhaWxzLgorCSAqIEByZXR1cm4gZmxhZyB0cnVlIGlmIEhpcmFnYW5hIFF1YXRlcm5hcnkgbW9kZSBpcyBvbiwgZmFsc2Ugb3RoZXJ3aXNlCisJICogQHNlZSAjc2V0SGlyYWdhbmFRdWF0ZXJuYXJ5RGVmYXVsdAorCSAqIEBzZWUgI3NldEhpcmFnYW5hUXVhdGVybmFyeShib29sZWFuKQorCSAqIEBkcmFmdCBJQ1UgMi4yCisJICovCisJcHVibGljIGJvb2xlYW4gaXNIaXJhZ2FuYVF1YXRlcm5hcnkoKQorCXsKKwkJcmV0dXJuIG1faXNIaXJhZ2FuYTRfOworCX0KKwkJCisJLy8gcHVibGljIG90aGVyIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdGhlIGVxdWFsaXR5IG9mIHR3byBSdWxlQmFzZWRDb2xsYXRvciBvYmplY3RzLgorICAgICAqIFJ1bGVCYXNlZENvbGxhdG9yIG9iamVjdHMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBjb2xsYXRpb24KKyAgICAgKiBydWxlcyBhbmQgdGhlIHNhbWUgYXR0cmlidXRlcy4KKyAgICAgKiBAcGFyYW0gb2JqIHRoZSBSdWxlQmFzZWRDb2xsYXRvciB0byBiZSBjb21wYXJlZCB0by4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBSdWxlQmFzZWRDb2xsYXRvciBoYXMgZXhhY3RseSB0aGUgc2FtZSAKKyAgICAgKiAgICAgICAgIGNvbGxhdGlvbiBiZWhhdmlvdXIgYXMgb2JqLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgCisgICAgeworICAgICAgICBpZiAob2JqID09IG51bGwpIHsKKyAgICAgICAgCXJldHVybiBmYWxzZTsgIC8vIHN1cGVyIGRvZXMgY2xhc3MgY2hlY2sKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcyA9PSBvYmopIHsKKyAgICAgICAgCXJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChnZXRDbGFzcygpICE9IG9iai5nZXRDbGFzcygpKSB7CisgICAgICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgUnVsZUJhc2VkQ29sbGF0b3Igb3RoZXIgPSAoUnVsZUJhc2VkQ29sbGF0b3Ipb2JqOworICAgICAgICAvLyBhbGwgb3RoZXIgbm9uLXRyYW5zaWVudCBpbmZvcm1hdGlvbiBpcyBhbHNvIGNvbnRhaW5lZCBpbiBydWxlcy4KKyAgICAgICAgaWYgKGdldFN0cmVuZ3RoKCkgIT0gb3RoZXIuZ2V0U3RyZW5ndGgoKSAKKyAgICAgICAgICAgICAgIHx8IGdldERlY29tcG9zaXRpb24oKSAhPSBvdGhlci5nZXREZWNvbXBvc2l0aW9uKCkgCisgICAgICAgICAgICAgICB8fCBvdGhlci5tX2Nhc2VGaXJzdF8gIT0gbV9jYXNlRmlyc3RfCisgICAgICAgICAgICAgICB8fCBvdGhlci5tX2Nhc2VTd2l0Y2hfICE9IG1fY2FzZVN3aXRjaF8KKyAgICAgICAgICAgICAgIHx8IG90aGVyLm1faXNBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWRfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8KKyAgICAgICAgICAgICAgIHx8IG90aGVyLm1faXNDYXNlTGV2ZWxfICE9IG1faXNDYXNlTGV2ZWxfCisgICAgICAgICAgICAgICB8fCBvdGhlci5tX2lzRnJlbmNoQ29sbGF0aW9uXyAhPSBtX2lzRnJlbmNoQ29sbGF0aW9uXworICAgICAgICAgICAgICAgfHwgb3RoZXIubV9pc0hpcmFnYW5hNF8gIT0gbV9pc0hpcmFnYW5hNF8pIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBib29sZWFuIHJ1bGVzID0gbV9ydWxlc18gPT0gb3RoZXIubV9ydWxlc187CisgICAgICAgIGlmICghcnVsZXMgJiYgKG1fcnVsZXNfICE9IG51bGwgJiYgb3RoZXIubV9ydWxlc18gIT0gbnVsbCkpIHsKKyAgICAgICAgICAgIHJ1bGVzID0gbV9ydWxlc18uZXF1YWxzKG90aGVyLm1fcnVsZXNfKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bGVzIHx8ICFJQ1VEZWJ1Zy5lbmFibGVkKCJjb2xsYXRpb24iKSkgeworICAgICAgICAgICAgcmV0dXJuIHJ1bGVzOworICAgICAgICB9CisgICAgICAgIGlmIChtX2FkZGl0aW9uM18gIT0gb3RoZXIubV9hZGRpdGlvbjNfIAorICAgICAgICAgICAgICAgICAgfHwgbV9ib3R0b20zXyAhPSBvdGhlci5tX2JvdHRvbTNfIAorICAgICAgICAgICAgICAgICAgfHwgbV9ib3R0b21Db3VudDNfICE9IG90aGVyLm1fYm90dG9tQ291bnQzXyAKKyAgICAgICAgICAgICAgICAgIHx8IG1fY29tbW9uM18gIT0gb3RoZXIubV9jb21tb24zXyAKKyAgICAgICAgICAgICAgICAgIHx8IG1faXNTaW1wbGUzXyAhPSBvdGhlci5tX2lzU2ltcGxlM18KKyAgICAgICAgICAgICAgICAgIHx8IG1fbWFzazNfICE9IG90aGVyLm1fbWFzazNfCisgICAgICAgICAgICAgICAgICB8fCBtX21pbkNvbnRyYWN0aW9uRW5kXyAhPSBvdGhlci5tX21pbkNvbnRyYWN0aW9uRW5kXworICAgICAgICAgICAgICAgICAgfHwgbV9taW5VbnNhZmVfICE9IG90aGVyLm1fbWluVW5zYWZlXworICAgICAgICAgICAgICAgICAgfHwgbV90b3AzXyAhPSBvdGhlci5tX3RvcDNfCisgICAgICAgICAgICAgICAgICB8fCBtX3RvcENvdW50M18gIT0gb3RoZXIubV90b3BDb3VudDNfCisgICAgICAgICAgICAgICAgICB8fCAhQXJyYXlzLmVxdWFscyhtX3Vuc2FmZV8sIG90aGVyLm1fdW5zYWZlXykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fdHJpZV8uZXF1YWxzKG90aGVyLm1fdHJpZV8pKSB7CisgICAgICAgICAgICAvLyB3ZSBzaG91bGQgdXNlIHRoZSB0cmllIGl0ZXJhdG9yIGhlcmUsIGJ1dCB0aGVuIHRoaXMgcGFydCBpcyAKKyAgICAgICAgICAgIC8vIG9ubHkgdXNlZCBpbiB0aGUgdGVzdC4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBVQ2hhcmFjdGVyLk1BWF9WQUxVRTsgaSA+PSBVQ2hhcmFjdGVyLk1JTl9WQUxVRTsgaSAtLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgdiA9IG1fdHJpZV8uZ2V0Q29kZVBvaW50VmFsdWUoaSk7CisgICAgICAgICAgICAgICAgaW50IG90aGVydiA9IG90aGVyLm1fdHJpZV8uZ2V0Q29kZVBvaW50VmFsdWUoaSk7CisgICAgICAgICAgICAgICAgaWYgKHYgIT0gb3RoZXJ2KSB7CisgICAgICAgICAgICAgICAgICAgIGludCBtYXNrID0gdiAmIChDRV9UQUdfTUFTS18gfCBDRV9TUEVDSUFMX0ZMQUdfKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2sgPT0gKG90aGVydiAmIDB4ZmYwMDAwMDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ICY9IDB4ZmZmZmZmOyAKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVydiAmPSAweGZmZmZmZjsgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzayA9PSAweGYxMDAwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAtPSAobV9leHBhbnNpb25PZmZzZXRfIDw8IDQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVydiAtPSAob3RoZXIubV9leHBhbnNpb25PZmZzZXRfIDw8IDQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWFzayA9PSAweGYyMDAwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAtPSBtX2NvbnRyYWN0aW9uT2Zmc2V0XzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnYgLT0gb3RoZXIubV9jb250cmFjdGlvbk9mZnNldF87CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBvdGhlcnYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChBcnJheXMuZXF1YWxzKG1fY29udHJhY3Rpb25DRV8sIG90aGVyLm1fY29udHJhY3Rpb25DRV8pCisgICAgICAgICAgICAmJiBBcnJheXMuZXF1YWxzKG1fY29udHJhY3Rpb25FbmRfLCBvdGhlci5tX2NvbnRyYWN0aW9uRW5kXykKKyAgICAgICAgICAgICYmIEFycmF5cy5lcXVhbHMobV9jb250cmFjdGlvbkluZGV4Xywgb3RoZXIubV9jb250cmFjdGlvbkluZGV4XykKKyAgICAgICAgICAgICYmIEFycmF5cy5lcXVhbHMobV9leHBhbnNpb25fLCBvdGhlci5tX2V4cGFuc2lvbl8pCisgICAgICAgICAgICAmJiBBcnJheXMuZXF1YWxzKG1fZXhwYW5zaW9uRW5kQ0VfLCBvdGhlci5tX2V4cGFuc2lvbkVuZENFXykpIHsKKyAgICAgICAgICAgIC8vIG5vdCBjb21wYXJpbmcgcGFkZGluZ3MKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9leHBhbnNpb25FbmRDRV8ubGVuZ3RoOyBpICsrKSB7CisgICAgICAgICAgICAgICAgIGlmIChtX2V4cGFuc2lvbkVuZENFTWF4U2l6ZV9baV0gCisgICAgICAgICAgICAgICAgICAgICAhPSBvdGhlci5tX2V4cGFuc2lvbkVuZENFTWF4U2l6ZV9baV0pIHsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorCS8qKgorICAgICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBoYXNoIGNvZGUgZm9yIHRoaXMgUnVsZUJhc2VkQ29sbGF0b3IuCisgICAgICogQHJldHVybiB0aGUgdW5pcXVlIGhhc2ggY29kZSBmb3IgdGhpcyBDb2xsYXRvcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIAorICAgIHsKKyAgICAgICAgU3RyaW5nIHJ1bGVzID0gZ2V0UnVsZXMoKTsKKyAgICAgICAgaWYgKHJ1bGVzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJ1bGVzID0gIiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJ1bGVzLmhhc2hDb2RlKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbXBhcmVzIHRoZSBzb3VyY2UgdGV4dCBTdHJpbmcgdG8gdGhlIHRhcmdldCB0ZXh0IFN0cmluZyBhY2NvcmRpbmcgdG8gCisgICAgICogdGhlIGNvbGxhdGlvbiBydWxlcywgc3RyZW5ndGggYW5kIGRlY29tcG9zaXRpb24gbW9kZSBmb3IgdGhpcyAKKyAgICAgKiBSdWxlQmFzZWRDb2xsYXRvci4gCisgICAgICogUmV0dXJucyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiwgCisgICAgICogZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHNvdXJjZSBTdHJpbmcgaXMgCisgICAgICogbGVzcyB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIHRhcmdldCBTdHJpbmcuIFNlZSB0aGUgQ29sbGF0b3IKKyAgICAgKiBjbGFzcyBkZXNjcmlwdGlvbiBmb3IgYW4gZXhhbXBsZSBvZiB1c2UuCisgICAgICogPC9wPgorICAgICAqIDxwPgorICAgICAqIEdlbmVyYWwgcmVjb21tZW5kYXRpb246IDxicj4KKyAgICAgKiBJZiBjb21wYXJpc29uIGFyZSB0byBiZSBkb25lIHRvIHRoZSBzYW1lIFN0cmluZyBtdWx0aXBsZSB0aW1lcywgaXQgd291bGQKKyAgICAgKiBiZSBtb3JlIGVmZmljaWVudCB0byBnZW5lcmF0ZSBDb2xsYXRpb25LZXlzIGZvciB0aGUgU3RyaW5ncyBhbmQgdXNlIAorICAgICAqIENvbGxhdGlvbktleS5jb21wYXJlVG8oQ29sbGF0aW9uS2V5KSBmb3IgdGhlIGNvbXBhcmlzb25zLgorICAgICAqIElmIHRoZSBlYWNoIFN0cmluZ3MgYXJlIGNvbXBhcmVkIHRvIG9ubHkgb25jZSwgdXNpbmcgdGhlIG1ldGhvZAorICAgICAqIFJ1bGVCYXNlZENvbGxhdG9yLmNvbXBhcmUoU3RyaW5nLCBTdHJpbmcpIHdpbGwgaGF2ZSBhIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICAgKiA8L3A+CisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgc291cmNlIHRleHQgU3RyaW5nLgorICAgICAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldCB0ZXh0IFN0cmluZy4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYW4gaW50ZWdlciB2YWx1ZS4gVmFsdWUgaXMgbGVzcyB0aGFuIHplcm8gaWYgc291cmNlIGlzIAorICAgICAqICAgICAgICAgbGVzcyB0aGFuIHRhcmdldCwgdmFsdWUgaXMgemVybyBpZiBzb3VyY2UgYW5kIHRhcmdldCBhcmUgZXF1YWwsIAorICAgICAqICAgICAgICAgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHplcm8gaWYgc291cmNlIGlzIGdyZWF0ZXIgdGhhbiB0YXJnZXQuCisgICAgICogQHNlZSBDb2xsYXRpb25LZXkKKyAgICAgKiBAc2VlICNnZXRDb2xsYXRpb25LZXkKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0KQorICAgIHsKKyAgICAJaWYgKHNvdXJjZSA9PSB0YXJnZXQpIHsKKwkgICAgICAgIHJldHVybiAwOworCSAgICB9CisJCisJCS8vIEZpbmQgdGhlIGxlbmd0aCBvZiBhbnkgbGVhZGluZyBwb3J0aW9uIHRoYXQgaXMgZXF1YWwKKwkJaW50IG9mZnNldCA9IGdldEZpcnN0VW5tYXRjaGVkT2Zmc2V0KHNvdXJjZSwgdGFyZ2V0KTsKKwkJaWYgKG9mZnNldCA9PSBzb3VyY2UubGVuZ3RoKCkpIHsKKwkJCWlmIChvZmZzZXQgPT0gdGFyZ2V0Lmxlbmd0aCgpIHx8IGNoZWNrSWdub3JhYmxlKHRhcmdldCwgb2Zmc2V0KSkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmV0dXJuIC0xOworCSAgICB9CisJICAgIGVsc2UgaWYgKHRhcmdldC5sZW5ndGgoKSA9PSBvZmZzZXQpIHsKKwkgICAgCWlmIChjaGVja0lnbm9yYWJsZShzb3VyY2UsIG9mZnNldCkpIHsKKwkgICAgCQlyZXR1cm4gMDsKKwkgICAgCX0KKwkgICAgCXJldHVybiAxOworCSAgICB9CisgICAgICAgIAorICAgICAgICAvL3JldHVybiBjb21wYXJlUmVndWxhcihzb3VyY2UsIHRhcmdldCwgb2Zmc2V0KTsKKyAgICAgICAgaWYobGF0aW5PbmVVc2VfKSB7CisgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQXQob2Zmc2V0KSA+IEVORE9GTEFUSU5PTkVSQU5HRV8gfHwgdGFyZ2V0LmNoYXJBdChvZmZzZXQpID4gRU5ET0ZMQVRJTk9ORVJBTkdFXykgeyAvLyBzb3VyY2Ugb3IgdGFyZ2V0IHN0YXJ0IHdpdGggbm9uLWxhdGluLTEKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlUmVndWxhcihzb3VyY2UsIHRhcmdldCwgb2Zmc2V0KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVVc2VMYXRpbjEoc291cmNlLCB0YXJnZXQsIG9mZnNldCk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBjb21wYXJlUmVndWxhcihzb3VyY2UsIHRhcmdldCwgb2Zmc2V0KTsKKyAgICAgICAgfSAgICAgICAgCisgICAgfQorCisgICAgLy8gcGFja2FnZSBwcml2YXRlIGlubmVyIGludGVyZmFjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKwkgKiBBdHRyaWJ1dGUgdmFsdWVzIHRvIGJlIHVzZWQgd2hlbiBzZXR0aW5nIHRoZSBDb2xsYXRvciBvcHRpb25zCisJICovCisJc3RhdGljIGludGVyZmFjZSBBdHRyaWJ1dGVWYWx1ZQorCXsKKwkJLyoqCisJCSAqIEluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0IGF0dHJpYnV0ZSB2YWx1ZSB3aWxsIGJlIHVzZWQuIAorCQkgKiBTZWUgaW5kaXZpZHVhbCBhdHRyaWJ1dGUgZm9yIGRldGFpbHMgb24gaXRzIGRlZmF1bHQgdmFsdWUuIAorCQkgKi8KKwkJc3RhdGljIGZpbmFsIGludCBERUZBVUxUXyA9IC0xOworCQkvKiogCisJCSAqIFByaW1hcnkgY29sbGF0aW9uIHN0cmVuZ3RoIAorCQkgKi8KKwkJc3RhdGljIGZpbmFsIGludCBQUklNQVJZXyA9IENvbGxhdG9yLlBSSU1BUlk7CisJCS8qKiAKKwkJICogU2Vjb25kYXJ5IGNvbGxhdGlvbiBzdHJlbmd0aCAKKwkJICovCisJCXN0YXRpYyBmaW5hbCBpbnQgU0VDT05EQVJZXyA9IENvbGxhdG9yLlNFQ09OREFSWTsKKwkJLyoqIAorCQkgKiBUZXJ0aWFyeSBjb2xsYXRpb24gc3RyZW5ndGggCisJCSAqLworCQlzdGF0aWMgZmluYWwgaW50IFRFUlRJQVJZXyA9IENvbGxhdG9yLlRFUlRJQVJZOworCQkvKiogCisJCSAqIERlZmF1bHQgY29sbGF0aW9uIHN0cmVuZ3RoIAorCQkgKi8KKwkJc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NUUkVOR1RIXyA9IENvbGxhdG9yLlRFUlRJQVJZOworCQkvKioKKwkJICogSW50ZXJuYWwgdXNlIGZvciBzdHJlbmd0aCBjaGVja3MgaW4gQ29sbGF0aW9uIGVsZW1lbnRzCisJCSAqLworCQlzdGF0aWMgZmluYWwgaW50IENFX1NUUkVOR1RIX0xJTUlUXyA9IENvbGxhdG9yLlRFUlRJQVJZICsgMTsKKwkJLyoqIAorCQkgKiBRdWF0ZXJuYXJ5IGNvbGxhdGlvbiBzdHJlbmd0aCAKKwkJICovCisJCXN0YXRpYyBmaW5hbCBpbnQgUVVBVEVSTkFSWV8gPSAzOworCQkvKiogCisJCSAqIElkZW50aWNhbCBjb2xsYXRpb24gc3RyZW5ndGggCisJCSAqLworCQlzdGF0aWMgZmluYWwgaW50IElERU5USUNBTF8gPSBDb2xsYXRvci5JREVOVElDQUw7CisJCS8qKgorCQkgKiBJbnRlcm5hbCB1c2UgZm9yIHN0cmVuZ3RoIGNoZWNrcworCQkgKi8KKwkJc3RhdGljIGZpbmFsIGludCBTVFJFTkdUSF9MSU1JVF8gPSBDb2xsYXRvci5JREVOVElDQUwgKyAxOworCQkvKiogCisJCSAqIFR1cm4gdGhlIGZlYXR1cmUgb2ZmIC0gd29ya3MgZm9yIEZSRU5DSF9DT0xMQVRJT04sIENBU0VfTEVWRUwsIAorCQkgKiBISVJBR0FOQV9RVUFURVJOQVJZX01PREUgYW5kIERFQ09NUE9TSVRJT05fTU9ERQorCQkgKi8KKwkJc3RhdGljIGZpbmFsIGludCBPRkZfID0gMTY7CisJCS8qKiAKKwkJICogVHVybiB0aGUgZmVhdHVyZSBvbiAtIHdvcmtzIGZvciBGUkVOQ0hfQ09MTEFUSU9OLCBDQVNFX0xFVkVMLCAKKwkJICogSElSQUdBTkFfUVVBVEVSTkFSWV9NT0RFIGFuZCBERUNPTVBPU0lUSU9OX01PREUKKwkJICovCisJCXN0YXRpYyBmaW5hbCBpbnQgT05fID0gMTc7CisJCS8qKiAKKwkJICogVmFsaWQgZm9yIEFMVEVSTkFURV9IQU5ETElORy4gQWx0ZXJuYXRlIGhhbmRsaW5nIHdpbGwgYmUgc2hpZnRlZCAKKwkJICovCisJCXN0YXRpYyBmaW5hbCBpbnQgU0hJRlRFRF8gPSAyMDsKKwkJLyoqIAorCQkgKiBWYWxpZCBmb3IgQUxURVJOQVRFX0hBTkRMSU5HLiBBbHRlcm5hdGUgaGFuZGxpbmcgd2lsbCBiZSBub24gCisJCSAqIGlnbm9yYWJsZSAKKwkJICovCisJCXN0YXRpYyBmaW5hbCBpbnQgTk9OX0lHTk9SQUJMRV8gPSAyMTsKKwkJLyoqIAorCQkgKiBWYWxpZCBmb3IgQ0FTRV9GSVJTVCAtIGxvd2VyIGNhc2Ugc29ydHMgYmVmb3JlIHVwcGVyIGNhc2UgCisJCSAqLworCQlzdGF0aWMgZmluYWwgaW50IExPV0VSX0ZJUlNUXyA9IDI0OworCQkvKiogCisJCSAqIFVwcGVyIGNhc2Ugc29ydHMgYmVmb3JlIGxvd2VyIGNhc2UgCisJCSAqLworCQlzdGF0aWMgZmluYWwgaW50IFVQUEVSX0ZJUlNUXyA9IDI1OworCSAgICAvKioKKwkJICogTnVtYmVyIG9mIGF0dHJpYnV0ZSB2YWx1ZXMKKwkJICovCisJICAgIHN0YXRpYyBmaW5hbCBpbnQgTElNSVRfID0gMjk7CisJfTsKKwkgICAgCisJLyoqIAorCSAqIEF0dHJpYnV0ZXMgdGhhdCBjb2xsYXRpb24gc2VydmljZSB1bmRlcnN0YW5kcy4gQWxsIHRoZSBhdHRyaWJ1dGVzIGNhbiAKKwkgKiB0YWtlIERFRkFVTFQgdmFsdWUsIGFzIHdlbGwgYXMgdGhlIHZhbHVlcyBzcGVjaWZpYyB0byBlYWNoIG9uZS4gCisJICovCisJc3RhdGljIGludGVyZmFjZSBBdHRyaWJ1dGUgCisJeworCSAgICAvKiogCisJICAgICAqIEF0dHJpYnV0ZSBmb3IgZGlyZWN0aW9uIG9mIHNlY29uZGFyeSB3ZWlnaHRzIC0gdXNlZCBpbiBGcmVuY2guCisJICAgICAqIEFjY2VwdGFibGUgdmFsdWVzIGFyZSBPTiwgd2hpY2ggcmVzdWx0cyBpbiBzZWNvbmRhcnkgd2VpZ2h0cyBiZWluZyAKKwkgICAgICogY29uc2lkZXJlZCBiYWNrd2FyZHMgYW5kIE9GRiB3aGljaCB0cmVhdHMgc2Vjb25kYXJ5IHdlaWdodHMgaW4gdGhlIAorCSAgICAgKiBvcmRlciB0aGV5IGFwcGVhci4KKwkgICAgICovCisgICAgCXN0YXRpYyBmaW5hbCBpbnQgRlJFTkNIX0NPTExBVElPTl8gPSAwOyAKKwkgICAgLyoqIAorCSAgICAgKiBBdHRyaWJ1dGUgZm9yIGhhbmRsaW5nIHZhcmlhYmxlIGVsZW1lbnRzLiBBY2NlcHRhYmxlIHZhbHVlcyBhcmUgCisJICAgICAqIE5PTl9JR05PUkFCTEUgKGRlZmF1bHQpIHdoaWNoIHRyZWF0cyBhbGwgdGhlIGNvZGVwb2ludHMgd2l0aCAKKwkgICAgICogbm9uLWlnbm9yYWJsZSBwcmltYXJ5IHdlaWdodHMgaW4gdGhlIHNhbWUgd2F5LCBhbmQgU0hJRlRFRCB3aGljaCAKKwkgICAgICogY2F1c2VzIGNvZGVwb2ludHMgd2l0aCBwcmltYXJ5IHdlaWdodHMgdGhhdCBhcmUgZXF1YWwgb3IgYmVsb3cgdGhlIAorCSAgICAgKiB2YXJpYWJsZSB0b3AgdmFsdWUgdG8gYmUgaWdub3JlZCBvbiBwcmltYXJ5IGxldmVsIGFuZCBtb3ZlZCB0byB0aGUgCisJICAgICAqIHF1YXRlcm5hcnkgbGV2ZWwuCisJICAgICAqLworCSAgICBzdGF0aWMgZmluYWwgaW50IEFMVEVSTkFURV9IQU5ETElOR18gPSAxOworCSAgICAvKiogCisJICAgICAqIENvbnRyb2xzIHRoZSBvcmRlcmluZyBvZiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLiBBY2NlcHRhYmxlIAorCSAgICAgKiB2YWx1ZXMgYXJlIE9GRiAoZGVmYXVsdCksIHdoaWNoIG9yZGVycyB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzIAorCSAgICAgKiBpbiBhY2NvcmRhbmNlIHRvIHRoZWlyIHRlcnRpYXJ5IHdlaWdodHMsIFVQUEVSX0ZJUlNUIHdoaWNoIGZvcmNlcyAKKwkgICAgICogdXBwZXIgY2FzZSBsZXR0ZXJzIHRvIHNvcnQgYmVmb3JlIGxvd2VyIGNhc2UgbGV0dGVycywgYW5kIAorCSAgICAgKiBMT1dFUl9GSVJTVCB3aGljaCBkb2VzIHRoZSBvcHBvc2l0ZS4gCisJICAgICAqLworCSAgICBzdGF0aWMgZmluYWwgaW50IENBU0VfRklSU1RfID0gMjsKKwkgICAgLyoqIAorCSAgICAgKiBDb250cm9scyB3aGV0aGVyIGFuIGV4dHJhIGNhc2UgbGV2ZWwgKHBvc2l0aW9uZWQgYmVmb3JlIHRoZSB0aGlyZCAKKwkgICAgICogbGV2ZWwpIGlzIGdlbmVyYXRlZCBvciBub3QuIEFjY2VwdGFibGUgdmFsdWVzIGFyZSBPRkYgKGRlZmF1bHQpLAorCSAgICAgKiB3aGVuIGNhc2UgbGV2ZWwgaXMgbm90IGdlbmVyYXRlZCwgYW5kIE9OIHdoaWNoIGNhdXNlcyB0aGUgY2FzZQorCSAgICAgKiBsZXZlbCB0byBiZSBnZW5lcmF0ZWQuIENvbnRlbnRzIG9mIHRoZSBjYXNlIGxldmVsIGFyZSBhZmZlY3RlZCBieQorCSAgICAgKiB0aGUgdmFsdWUgb2YgQ0FTRV9GSVJTVCBhdHRyaWJ1dGUuIEEgc2ltcGxlIHdheSB0byBpZ25vcmUgYWNjZW50IAorCSAgICAgKiBkaWZmZXJlbmNlcyBpbiBhIHN0cmluZyBpcyB0byBzZXQgdGhlIHN0cmVuZ3RoIHRvIFBSSU1BUlkgYW5kIAorCSAgICAgKiBlbmFibGUgY2FzZSBsZXZlbC4gCisJICAgICAqLworCSAgICBzdGF0aWMgZmluYWwgaW50IENBU0VfTEVWRUxfID0gMzsKKwkgICAgLyoqIAorCSAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBub3JtYWxpemF0aW9uIGNoZWNrIGFuZCBuZWNlc3NhcnkgCisJICAgICAqIG5vcm1hbGl6YXRpb25zIGFyZSBwZXJmb3JtZWQuIFdoZW4gc2V0IHRvIE9GRiAoZGVmYXVsdCkgbm8gCisJICAgICAqIG5vcm1hbGl6YXRpb24gY2hlY2sgaXMgcGVyZm9ybWVkLiBUaGUgY29ycmVjdG5lc3Mgb2YgdGhlIHJlc3VsdCBpcyAKKwkgICAgICogZ3VhcmFudGVlZCBvbmx5IGlmIHRoZSBpbnB1dCBkYXRhIGlzIGluIHNvLWNhbGxlZCBGQ0QgZm9ybSAoc2VlIAorCSAgICAgKiB1c2VycyBtYW51YWwgZm9yIG1vcmUgaW5mbykuIFdoZW4gc2V0IHRvIE9OLCBhbiBpbmNyZW1lbnRhbCBjaGVjayAKKwkgICAgICogaXMgcGVyZm9ybWVkIHRvIHNlZSB3aGV0aGVyIHRoZSBpbnB1dCBkYXRhIGlzIGluIHRoZSBGQ0QgZm9ybS4gSWYgCisJICAgICAqIHRoZSBkYXRhIGlzIG5vdCBpbiB0aGUgRkNEIGZvcm0sIGluY3JlbWVudGFsIE5GRCBub3JtYWxpemF0aW9uIGlzIAorCSAgICAgKiBwZXJmb3JtZWQuIAorCSAgICAgKi8KKwkgICAgc3RhdGljIGZpbmFsIGludCBOT1JNQUxJWkFUSU9OX01PREVfID0gNDsgCisJICAgIC8qKiAKKwkgICAgICogVGhlIHN0cmVuZ3RoIGF0dHJpYnV0ZS4gQ2FuIGJlIGVpdGhlciBQUklNQVJZLCBTRUNPTkRBUlksIFRFUlRJQVJZLCAKKwkgICAgICogUVVBVEVSTkFSWSBvciBJREVOVElDQUwuIFRoZSB1c3VhbCBzdHJlbmd0aCBmb3IgbW9zdCBsb2NhbGVzIAorCSAgICAgKiAoZXhjZXB0IEphcGFuZXNlKSBpcyB0ZXJ0aWFyeS4gUXVhdGVybmFyeSBzdHJlbmd0aCBpcyB1c2VmdWwgd2hlbiAKKwkgICAgICogY29tYmluZWQgd2l0aCBzaGlmdGVkIHNldHRpbmcgZm9yIGFsdGVybmF0ZSBoYW5kbGluZyBhdHRyaWJ1dGUgYW5kIAorCSAgICAgKiBmb3IgSklTIHggNDA2MSBjb2xsYXRpb24sIHdoZW4gaXQgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIAorCSAgICAgKiBLYXRha2FuYSAgYW5kIEhpcmFnYW5hICh0aGlzIGlzIGFjaGlldmVkIGJ5IHNldHRpbmcgdGhlIAorCSAgICAgKiBISVJBR0FOQV9RVUFURVJOQVJZIG1vZGUgdG8gb24uIE90aGVyd2lzZSwgcXVhdGVybmFyeSBsZXZlbCBpcyAKKyAgICAgICAgICogYWZmZWN0ZWQgb25seSBieSB0aGUgbnVtYmVyIG9mIG5vbiBpZ25vcmFibGUgY29kZSBwb2ludHMgaW4gdGhlIAorCSAgICAgKiBzdHJpbmcuIElkZW50aWNhbCBzdHJlbmd0aCBpcyByYXJlbHkgdXNlZnVsLCBhcyBpdCBhbW91bnRzIHRvIAorCSAgICAgKiBjb2RlcG9pbnRzIG9mIHRoZSBORkQgZm9ybSBvZiB0aGUgc3RyaW5nLiAKKwkgICAgICovCisJICAgIHN0YXRpYyBmaW5hbCBpbnQgU1RSRU5HVEhfID0gNTsKKwkgICAgLyoqIAorCSAgICAgKiBXaGVuIHR1cm5lZCBvbiwgdGhpcyBhdHRyaWJ1dGUgcG9zaXRpb25zIEhpcmFnYW5hIGJlZm9yZSBhbGwgIAorCSAgICAgKiBub24taWdub3JhYmxlcyBvbiBxdWF0ZXJuYXJ5IGxldmVsLiBUaGlzIGlzIGEgc25lYWt5IHdheSB0byBwcm9kdWNlIAorCSAgICAgKiBKSVMgc29ydCBvcmRlci4gCisJICAgICAqLyAgICAgCisJICAgIHN0YXRpYyBmaW5hbCBpbnQgSElSQUdBTkFfUVVBVEVSTkFSWV9NT0RFXyA9IDY7CisgICAgICAgIC8qKgorCSAgICAgKiBBdHRyaWJ1dGUgY291bnQKKwkgICAgICovCisJICAgIHN0YXRpYyBmaW5hbCBpbnQgTElNSVRfID0gNzsKKwl9OworCQorCS8qKgorICAgICAqIERhdGFNYW5pcHVsYXRlIHNpbmdsZXRvbgorICAgICAqLworICAgIHN0YXRpYyBjbGFzcyBEYXRhTWFuaXB1bGF0ZSBpbXBsZW1lbnRzIFRyaWUuRGF0YU1hbmlwdWxhdGUKKyAgICB7CisgICAgCS8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAJCisgICAgCS8qKgorCSAgICAgKiBJbnRlcm5hbCBtZXRob2QgY2FsbGVkIHRvIHBhcnNlIGEgbGVhZCBzdXJyb2dhdGUncyBjZSBmb3IgdGhlIG9mZnNldAorCSAgICAgKiB0byB0aGUgbmV4dCB0cmFpbCBzdXJyb2dhdGUgZGF0YS4KKwkgICAgICogQHBhcmFtIGNlIGNvbGxhdGlvbiBlbGVtZW50IG9mIHRoZSBsZWFkIHN1cnJvZ2F0ZQorCSAgICAgKiBAcmV0dXJuIGRhdGEgb2Zmc2V0IG9yIDAgZm9yIHRoZSBuZXh0IHRyYWlsIHN1cnJvZ2F0ZQorCSAgICAgKiBAZHJhZnQgMi4yCisJICAgICAqLworCSAgICBwdWJsaWMgZmluYWwgaW50IGdldEZvbGRpbmdPZmZzZXQoaW50IGNlKQorCSAgICB7CisJICAgIAlpZiAoaXNTcGVjaWFsKGNlKSAmJiBnZXRUYWcoY2UpID09IENFX1NVUlJPR0FURV9UQUdfKSB7CisJICAgIAkJcmV0dXJuIChjZSAmIDB4RkZGRkZGKTsKKwkgICAgCX0KKwkgICAgCXJldHVybiAwOworCSAgICB9IAorCSAgICAKKwkgICAgLyoqCisJICAgICAqIEdldCBzaW5nbGV0b24gb2JqZWN0CisJICAgICAqLworCSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIERhdGFNYW5pcHVsYXRlIGdldEluc3RhbmNlKCkKKwkgICAgeworCSAgICAJaWYgKG1faW5zdGFuY2VfID09IG51bGwpIHsKKwkgICAgCQltX2luc3RhbmNlXyA9ICBuZXcgRGF0YU1hbmlwdWxhdGUoKTsKKwkgICAgCX0KKwkgICAgCXJldHVybiBtX2luc3RhbmNlXzsKKwkgICAgfQorCSAgICAKKwkgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgIAorCSAgICAvKioKKwkgICAgICogU2luZ2xldG9uIGluc3RhbmNlCisJICAgICAqLworCSAgICBwcml2YXRlIHN0YXRpYyBEYXRhTWFuaXB1bGF0ZSBtX2luc3RhbmNlXzsKKwkgICAgCisJICAgIC8vIHByaXZhdGUgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAKKwkgICAgLyoqCisJICAgICAqIHByaXZhdGUgdG8gcHJldmVudCBpbml0aWFsaXphdGlvbgorCSAgICAgKi8KKwkgICAgcHJpdmF0ZSBEYXRhTWFuaXB1bGF0ZSgpCisJICAgIHsKKwkgICAgfQorICAgIH07CisgICAgCisgICAgLyoqCisgICAgICogVUNBQ29uc3RhbnRzCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGNsYXNzIFVDQUNvbnN0YW50cworICAgIHsKKyAgICAgICAgIGludCBGSVJTVF9URVJUSUFSWV9JR05PUkFCTEVfW10gPSBuZXcgaW50WzJdOyAgICAgICAvLyAweDAwMDAwMDAwIAorICAgICAgICAgaW50IExBU1RfVEVSVElBUllfSUdOT1JBQkxFX1tdID0gbmV3IGludFsyXTsgICAgICAgIC8vIDB4MDAwMDAwMDAgCisgICAgICAgICBpbnQgRklSU1RfUFJJTUFSWV9JR05PUkFCTEVfW10gPSBuZXcgaW50WzJdOyAgICAgICAgLy8gMHgwMDAwODcwNSAKKyAgICAgICAgIGludCBGSVJTVF9TRUNPTkRBUllfSUdOT1JBQkxFX1tdID0gbmV3IGludFsyXTsgICAgICAvLyAweDAwMDAwMDAwIAorICAgICAgICAgaW50IExBU1RfU0VDT05EQVJZX0lHTk9SQUJMRV9bXSA9IG5ldyBpbnRbMl07ICAgICAgIC8vIDB4MDAwMDA1MDAgCisgICAgICAgICBpbnQgTEFTVF9QUklNQVJZX0lHTk9SQUJMRV9bXSA9IG5ldyBpbnRbMl07ICAgICAgICAgLy8gMHgwMDAwREQwNSAKKyAgICAgICAgIGludCBGSVJTVF9WQVJJQUJMRV9bXSA9IG5ldyBpbnRbMl07ICAgICAgICAgICAgICAgICAvLyAweDA1MDcwNTA1IAorICAgICAgICAgaW50IExBU1RfVkFSSUFCTEVfW10gPSBuZXcgaW50WzJdOyAgICAgICAgICAgICAgICAgIC8vIDB4MTNDRjA1MDUgCisgICAgICAgICBpbnQgRklSU1RfTk9OX1ZBUklBQkxFX1tdID0gbmV3IGludFsyXTsgICAgICAgICAgICAgLy8gMHgxNjIwMDUwNSAKKyAgICAgICAgIGludCBMQVNUX05PTl9WQVJJQUJMRV9bXSA9IG5ldyBpbnRbMl07ICAgICAgICAgICAgICAvLyAweDc2N0MwNTA1IAorICAgICAgICAgaW50IFJFU0VUX1RPUF9WQUxVRV9bXSA9IG5ldyBpbnRbMl07ICAgICAgICAgICAgICAgIC8vIDB4OUYwMDAzMDMgCisgICAgICAgICBpbnQgRklSU1RfSU1QTElDSVRfW10gPSBuZXcgaW50WzJdOyAKKyAgICAgICAgIGludCBMQVNUX0lNUExJQ0lUX1tdID0gbmV3IGludFsyXTsgIAorICAgICAgICAgaW50IEZJUlNUX1RSQUlMSU5HX1tdID0gbmV3IGludFsyXTsgCisgICAgICAgICBpbnQgTEFTVF9UUkFJTElOR19bXSA9IG5ldyBpbnRbMl07ICAKKyAgICAgICAgIGludCBQUklNQVJZX1RPUF9NSU5fOyAKKyAgICAgICAgIGludCBQUklNQVJZX0lNUExJQ0lUX01JTl87IC8vIDB4RTgwMDAwMDAgCisgICAgICAgICBpbnQgUFJJTUFSWV9JTVBMSUNJVF9NQVhfOyAvLyAweEYwMDAwMDAwIAorICAgICAgICAgaW50IFBSSU1BUllfVFJBSUxJTkdfTUlOXzsgLy8gMHhFODAwMDAwMCAKKyAgICAgICAgIGludCBQUklNQVJZX1RSQUlMSU5HX01BWF87IC8vIDB4RjAwMDAwMDAgCisgICAgICAgICBpbnQgUFJJTUFSWV9TUEVDSUFMX01JTl87IC8vIDB4RTgwMDAwMDAgCisgICAgICAgICBpbnQgUFJJTUFSWV9TUEVDSUFMX01BWF87IC8vIDB4RjAwMDAwMDAgCisgICAgfQorICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBkYXRhIG1lbWJlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgc3RhdGljIGZpbmFsIGJ5dGUgQllURV9GSVJTVF9UQUlMT1JFRF8gPSAoYnl0ZSkweDA0OworICAgIHN0YXRpYyBmaW5hbCBieXRlIEJZVEVfQ09NTU9OXyA9IChieXRlKTB4MDU7CisgICAgc3RhdGljIGZpbmFsIGludCBDT01NT05fVE9QXzJfID0gMHg4NjsgLy8gaW50IGZvciB1bnNpZ25lc3MKKyAgICBzdGF0aWMgZmluYWwgaW50IENPTU1PTl9CT1RUT01fMl8gPSBCWVRFX0NPTU1PTl87CisgICAgLyoqCisJICogQ2FzZSBzdHJlbmd0aCBtYXNrCisJICovCisJc3RhdGljIGZpbmFsIGludCBDRV9DQVNFX0JJVF9NQVNLXyA9IDB4QzA7CisJc3RhdGljIGZpbmFsIGludCBDRV9UQUdfU0hJRlRfID0gMjQ7CisJc3RhdGljIGZpbmFsIGludCBDRV9UQUdfTUFTS18gPSAweDBGMDAwMDAwOworCQorCXN0YXRpYyBmaW5hbCBpbnQgQ0VfU1BFQ0lBTF9GTEFHXyA9IDB4RjAwMDAwMDA7CisgICAgLyoqIAorICAgICAqIExlYWQgc3Vycm9nYXRlIHRoYXQgaXMgdGFpbG9yZWQgYW5kIGRvZXNuJ3Qgc3RhcnQgYSBjb250cmFjdGlvbiAKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENFX1NVUlJPR0FURV9UQUdfID0gNTsgIAorCS8qKgorICAJICogTWFzayB0byBnZXQgdGhlIHByaW1hcnkgc3RyZW5ndGggb2YgdGhlIGNvbGxhdGlvbiBlbGVtZW50CisgIAkgKi8KKyAgCXN0YXRpYyBmaW5hbCBpbnQgQ0VfUFJJTUFSWV9NQVNLXyA9IDB4RkZGRjAwMDA7CisgIAkvKioKKyAgCSAqIE1hc2sgdG8gZ2V0IHRoZSBzZWNvbmRhcnkgc3RyZW5ndGggb2YgdGhlIGNvbGxhdGlvbiBlbGVtZW50CisgIAkgKi8KKyAgIAlzdGF0aWMgZmluYWwgaW50IENFX1NFQ09OREFSWV9NQVNLXyA9IDB4RkYwMDsKKyAgIAkvKioKKyAgCSAqIE1hc2sgdG8gZ2V0IHRoZSB0ZXJ0aWFyeSBzdHJlbmd0aCBvZiB0aGUgY29sbGF0aW9uIGVsZW1lbnQKKyAgCSAqLworICAgCXN0YXRpYyBmaW5hbCBpbnQgQ0VfVEVSVElBUllfTUFTS18gPSAweEZGOworICAgCS8qKgorICAgCSAqIFByaW1hcnkgc3RyZW5ndGggc2hpZnQgCisgICAJICovCisJc3RhdGljIGZpbmFsIGludCBDRV9QUklNQVJZX1NISUZUXyA9IDE2OworCS8qKiAKKwkgKiBTZWNvbmRhcnkgc3RyZW5ndGggc2hpZnQgCisJICovCisJc3RhdGljIGZpbmFsIGludCBDRV9TRUNPTkRBUllfU0hJRlRfID0gODsKKyAgIAkvKioKKyAgIAkgKiBDb250aW51YXRpb24gbWFya2VyCisgICAJICovCisgICAJc3RhdGljIGZpbmFsIGludCBDRV9DT05USU5VQVRJT05fTUFSS0VSXyA9IDB4QzA7CisgICAJCisgICAJLyoqCisJICogU2l6ZSBvZiBjb2xsYXRvciByYXcgZGF0YSBoZWFkZXJzIGFuZCBvcHRpb25zIGJlZm9yZSB0aGUgZXhwYW5zaW9uCisJICogZGF0YS4gVGhpcyBpcyB1c2VkIHdoZW4gZXhwYW5zaW9uIGNlcyBhcmUgdG8gYmUgcmV0cmlldmVkLiBJQ1U0QyB1c2VzCisJICogdGhlIGV4cGFuc2lvbiBvZmZzZXQgc3RhcnRpbmcgZnJvbSBVQ29sbGF0b3IuVUNvbEhlYWRlciwgaGVuY2UgSUNVNEoKKwkgKiB3aWxsIGhhdmUgdG8gbWludXMgdGhhdCBvZmYgdG8gZ2V0IHRoZSByaWdodCBleHBhbnNpb24gY2Ugb2Zmc2V0LiBJbgorCSAqIG51bWJlciBvZiBpbnRzLgorCSAqLworCWludCBtX2V4cGFuc2lvbk9mZnNldF87CisJLyoqCisJICogU2l6ZSBvZiBjb2xsYXRvciByYXcgZGF0YSBoZWFkZXJzLCBvcHRpb25zIGFuZCBleHBhbnNpb25zIGJlZm9yZQorCSAqIGNvbnRyYWN0aW9uIGRhdGEuIFRoaXMgaXMgdXNlZCB3aGVuIGNvbnRyYWN0aW9uIGNlcyBhcmUgdG8gYmUgcmV0cmlldmVkLiAKKwkgKiBJQ1U0QyB1c2VzIGNvbnRyYWN0aW9uIG9mZnNldCBzdGFydGluZyBmcm9tIFVDb2xsYXRvci5VQ29sSGVhZGVyLCBoZW5jZQorCSAqIElDVTRKIHdpbGwgaGF2ZSB0byBtaW51cyB0aGF0IG9mZiB0byBnZXQgdGhlIHJpZ2h0IGNvbnRyYWN0aW9uIGNlIAorCSAqIG9mZnNldC4gSW4gbnVtYmVyIG9mIGNoYXJzLgorCSAqLworCWludCBtX2NvbnRyYWN0aW9uT2Zmc2V0XzsKKyAgICAvKioKKyAgICAgKiBGbGFnIGluZGljYXRvciBpZiBKYW1vIGlzIHNwZWNpYWwKKyAgICAgKi8KKyAgICBib29sZWFuIG1faXNKYW1vU3BlY2lhbF87CisgCisgCS8vIENvbGxhdG9yIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgCisgCWludCBtX2RlZmF1bHRWYXJpYWJsZVRvcFZhbHVlXzsKKwlib29sZWFuIG1fZGVmYXVsdElzRnJlbmNoQ29sbGF0aW9uXzsKKwlib29sZWFuIG1fZGVmYXVsdElzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkXzsgCisgICAgaW50IG1fZGVmYXVsdENhc2VGaXJzdF87CisgICAgYm9vbGVhbiBtX2RlZmF1bHRJc0Nhc2VMZXZlbF87CisgICAgaW50IG1fZGVmYXVsdERlY29tcG9zaXRpb25fOworICAgIGludCBtX2RlZmF1bHRTdHJlbmd0aF87CisgICAgYm9vbGVhbiBtX2RlZmF1bHRJc0hpcmFnYW5hNF87CisgCS8qKgorIAkgKiBWYWx1ZSBvZiB0aGUgdmFyaWFibGUgdG9wCisgCSAqLworICAgIGludCBtX3ZhcmlhYmxlVG9wVmFsdWVfOworICAgIC8qKiAKKyAgICAgKiBBdHRyaWJ1dGUgZm9yIHNwZWNpYWwgSGlyYWdhbmEgCisgICAgICovCisgICAgYm9vbGVhbiBtX2lzSGlyYWdhbmE0XzsgICAgICAgICAKKwkvKioKKyAgICAgKiBDYXNlIHNvcnRpbmcgY3VzdG9taXphdGlvbgorICAgICAqLworICAgIGludCBtX2Nhc2VGaXJzdF87CisgICAgCisgICAgLy8gZW5kIENvbGxhdG9yIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAKKyAgICAvKioKKyAgICAgKiBFeHBhbnNpb24gdGFibGUKKyAgICAgKi8KKyAgICBpbnQgbV9leHBhbnNpb25fW107CisgICAgLyoqCisgICAgICogQ29udHJhY3Rpb24gaW5kZXggdGFibGUKKyAgICAgKi8KKyAgICBjaGFyIG1fY29udHJhY3Rpb25JbmRleF9bXTsKKyAgICAvKioKKyAgICAgKiBDb250cmFjdGlvbiBDRSB0YWJsZQorICAgICAqLworICAgIGludCBtX2NvbnRyYWN0aW9uQ0VfW107CisgICAgLyoqCisgICAgICogRGF0YSB0cmllCisgICAgICovCisgICAgSW50VHJpZSBtX3RyaWVfOworICAgIC8qKgorICAgICAqIFRhYmxlIHRvIHN0b3JlIGFsbCBjb2xsYXRpb24gZWxlbWVudHMgdGhhdCBhcmUgdGhlIGxhc3QgZWxlbWVudCBvZiBhbgorICAgICAqIGV4cGFuc2lvbi4gVGhpcyBpcyBmb3IgdXNlIGluIFN0cmluZ1NlYXJjaC4KKyAgICAgKi8KKyAgICBpbnQgbV9leHBhbnNpb25FbmRDRV9bXTsKKyAgICAvKioKKyAgICAgKiBUYWJsZSB0byBzdG9yZSB0aGUgbWF4aW11bSBzaXplIG9mIGFueSBleHBhbnNpb25zIHRoYXQgZW5kIHdpdGggdGhlIAorICAgICAqIGNvcnJlc3BvbmRpbmcgY29sbGF0aW9uIGVsZW1lbnQgaW4gbV9leHBhbnNpb25FbmRDRV8uIEZvciB1c2UgaW4KKyAgICAgKiBTdHJpbmdTZWFyY2ggdG9vCisgICAgICovCisgICAgYnl0ZSBtX2V4cGFuc2lvbkVuZENFTWF4U2l6ZV9bXTsKKyAgICAvKioKKyAgICAgKiBIZXVyaXN0aWMgdGFibGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gb24gd2hldGhlciBhIGNoYXIgY2hhcmFjdGVyIGlzIAorICAgICAqIGNvbnNpZGVyZWQgInVuc2FmZSIuICJVbnNhZmUiIGNoYXJhY3RlciBhcmUgY29tYmluaW5nIG1hcmtzIG9yIHRob3NlIAorICAgICAqIGJlbG9uZ2luZyB0byBzb21lIGNvbnRyYWN0aW9uIHNlcXVlbmNlIGZyb20gdGhlIG9mZnNldCAxIG9ud2FyZHMuIAorICAgICAqIEUuZy4gaWYgIkFCQyIgaXMgdGhlIG9ubHkgY29udHJhY3Rpb24sIHRoZW4gJ0InIGFuZCAnQycgYXJlIGNvbnNpZGVyZWQgCisgICAgICogdW5zYWZlLiBJZiB3ZSBoYXZlIGFub3RoZXIgY29udHJhY3Rpb24gIlpBIiB3aXRoIHRoZSBvbmUgYWJvdmUsIHRoZW4gCisgICAgICogJ0EnLCAnQicsICdDJyBhcmUgInVuc2FmZSIgYnV0ICdaJyBpcyBub3QuIAorICAgICAqLworICAgIGJ5dGUgbV91bnNhZmVfW107CisgICAgLyoqCisgICAgICogVGFibGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gb24gd2hldGhlciBhIGNvZGVwb2ludCBjYW4gb2NjdXIgYXMgdGhlIGxhc3QKKyAgICAgKiBjaGFyYWN0ZXIgaW4gYSBjb250cmFjdGlvbgorICAgICAqLworICAgIGJ5dGUgbV9jb250cmFjdGlvbkVuZF9bXTsKKyAgICAvKioKKwkgKiBPcmlnaW5hbCBjb2xsYXRpb24gcnVsZXMKKwkgKi8KKwlTdHJpbmcgbV9ydWxlc187CisJLyoqCisgICAgICogVGhlIHNtYWxsZXN0ICJ1bnNhZmUiIGNvZGVwb2ludAorICAgICAqLworICAgIGNoYXIgbV9taW5VbnNhZmVfOworICAgIC8qKgorCSAqIFRoZSBzbWFsbGVzdCBjb2RlcG9pbnQgdGhhdCBjb3VsZCBiZSB0aGUgZW5kIG9mIGEgY29udHJhY3Rpb24KKwkgKi8KKwljaGFyIG1fbWluQ29udHJhY3Rpb25FbmRfOworCQorCS8qKgorICAgICAqIFVuaWNvZGVEYXRhLnR4dCBwcm9wZXJ0eSBvYmplY3QKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgUnVsZUJhc2VkQ29sbGF0b3IgVUNBXzsgIAorICAgIC8qKgorICAgICAqIFVDQSBDb25zdGFudHMKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgVUNBQ29uc3RhbnRzIFVDQV9DT05TVEFOVFNfOworICAgIC8qKgorICAgICAqIFRhYmxlIGZvciBVQ0EgYW5kIGJ1aWxkZXIgdXNlCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGNoYXIgVUNBX0NPTlRSQUNUSU9OU19bXTsKKyAgICAvKioKKyAgICAgKiBJbXBsaWNpdCBjb25zdGFudHMKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IElNUExJQ0lUX0JBU0VfQllURV87CisgICAgc3RhdGljIGZpbmFsIGludCBJTVBMSUNJVF9MSU1JVF9CWVRFXzsKKyAgICBzdGF0aWMgZmluYWwgaW50IElNUExJQ0lUXzRCWVRFX0JPVU5EQVJZXzsKKyAgICBzdGF0aWMgZmluYWwgaW50IExBU1RfTVVMVElQTElFUl87CisgICAgc3RhdGljIGZpbmFsIGludCBMQVNUMl9NVUxUSVBMSUVSXzsKKyAgICBzdGF0aWMgZmluYWwgaW50IElNUExJQ0lUX0JBU0VfM0JZVEVfOworICAgIHN0YXRpYyBmaW5hbCBpbnQgSU1QTElDSVRfQkFTRV80QllURV87CisgICAgc3RhdGljIGZpbmFsIGludCBCWVRFU19UT19BVk9JRF8gPSAzOworICAgIHN0YXRpYyBmaW5hbCBpbnQgT1RIRVJfQ09VTlRfID0gMjU2IC0gQllURVNfVE9fQVZPSURfOworICAgIHN0YXRpYyBmaW5hbCBpbnQgTEFTVF9DT1VOVF8gPSBPVEhFUl9DT1VOVF8gLyAyOworICAgIC8qKgorICAgICAqIFJvb20gZm9yIGludGVydmVuaW5nLCB3aXRob3V0IGV4cGFuZGluZyB0byA1IGJ5dGVzCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBMQVNUX0NPVU5UMl8gPSBPVEhFUl9DT1VOVF8gLyAyMTsgCisgICAgc3RhdGljIGZpbmFsIGludCBJTVBMSUNJVF8zQllURV9DT1VOVF8gPSAxOworICAgIAorICAgIC8vIGJsb2NrIHRvIGluaXRpYWxpc2UgY2hhcmFjdGVyIHByb3BlcnR5IGRhdGFiYXNlCisgICAgc3RhdGljCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAJVUNBXyA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcigpOworICAgICAgICAgICAgVUNBX0NPTlNUQU5UU18gPSBuZXcgVUNBQ29uc3RhbnRzKCk7CisgICAgICAgIAlJbnB1dFN0cmVhbSBpID0gVUNBXy5nZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9jb20vaWJtL2ljdS9pbXBsL2RhdGEvdWNhZGF0YS5pY3UiKTsKKyAgICAgICAgCQorICAgICAgIAkJQnVmZmVyZWRJbnB1dFN0cmVhbSBiID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oaSwgOTAwMDApOworICAgICAgICAJQ29sbGF0b3JSZWFkZXIgcmVhZGVyID0gbmV3IENvbGxhdG9yUmVhZGVyKGIpOworICAgICAgICAJVUNBX0NPTlRSQUNUSU9OU18gPSByZWFkZXIucmVhZChVQ0FfLCBVQ0FfQ09OU1RBTlRTXyk7CisgICAgICAgICAgICBiLmNsb3NlKCk7CisgICAgICAgIAlpLmNsb3NlKCk7CisgICAgICAgICAgICAvLyBjYWxsZWQgYmVmb3JlIGRvaW5nIGNhbm9uaWNhbCBjbG9zdXJlIGZvciB0aGUgVUNBLgorICAgICAgICAgICAgSU1QTElDSVRfQkFTRV9CWVRFXyA9IFVDQV9DT05TVEFOVFNfLlBSSU1BUllfSU1QTElDSVRfTUlOXzsKKyAgICAgICAgICAgIC8vIGxlYXZlIHJvb20gZm9yIDEgMy1ieXRlIGFuZCAyIDQtYnl0ZSBmb3JtcworICAgICAgICAgICAgSU1QTElDSVRfTElNSVRfQllURV8gPSBJTVBMSUNJVF9CQVNFX0JZVEVfICsgNDsgCisgICAgICAgICAgICBJTVBMSUNJVF80QllURV9CT1VOREFSWV8gPSBJTVBMSUNJVF8zQllURV9DT1VOVF8gKiBPVEhFUl9DT1VOVF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIExBU1RfQ09VTlRfOworICAgICAgICAgICAgTEFTVF9NVUxUSVBMSUVSXyA9IE9USEVSX0NPVU5UXyAvIExBU1RfQ09VTlRfOworICAgICAgICAgICAgTEFTVDJfTVVMVElQTElFUl8gPSBPVEhFUl9DT1VOVF8gLyBMQVNUX0NPVU5UMl87CisgICAgICAgICAgICBJTVBMSUNJVF9CQVNFXzNCWVRFXyA9IChJTVBMSUNJVF9CQVNFX0JZVEVfIDw8IDI0KSArIDB4MDMwMzAwOworICAgICAgICAgICAgSU1QTElDSVRfQkFTRV80QllURV8gPSAoKElNUExJQ0lUX0JBU0VfQllURV8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBJTVBMSUNJVF8zQllURV9DT1VOVF8pIDw8IDI0KSArIDB4MDMwMzAzOworICAgICAgICAJVUNBXy5tX3J1bGVzXyA9IG51bGw7CisgICAgICAgIAlVQ0FfLmluaXQoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCisgICAgICAgIHsKKyAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9IAorICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3RvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiA8cD5Qcml2YXRlIGNvbnRydWN0b3IgZm9yIHVzZSBieSBzdWJjbGFzc2VzLiAKKyAgICAqIFB1YmxpYyBhY2Nlc3MgdG8gY3JlYXRpbmcgQ29sbGF0b3JzIGlzIGhhbmRsZWQgYnkgdGhlIEFQSSAKKyAgICAqIENvbGxhdG9yLmdldEluc3RhbmNlKCkgb3IgUnVsZUJhc2VkQ29sbGF0b3IoU3RyaW5nIHJ1bGVzKS4KKyAgICAqIDwvcD4KKyAgICAqIDxwPgorICAgICogVGhpcyBjb25zdHJ1Y3RvciBjb25zdHJ1Y3RzIHRoZSBVQ0EgY29sbGF0b3IgaW50ZXJuYWxseQorICAgICogPC9wPgorICAgICovCisgICAgUnVsZUJhc2VkQ29sbGF0b3IoKSAKKyAgICB7CisgICAgICAgIGluaXRVdGlsaXR5KCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9ycyBhIFJ1bGVCYXNlZENvbGxhdG9yIGZyb20gdGhlIGFyZ3VtZW50IGxvY2FsZS4KKyAgICAgKiBJZiBubyByZXNvdXJjZSBidW5kbGUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2NhbGUsIFVDQSBpcyB1c2VkIAorICAgICAqIGluc3RlYWQuCisgICAgICogQHBhcmFtIGxvY2FsZQorICAgICAqIEBleGNlcHRpb24gRXhjZXB0aW9uIHRocm93biB3aGVuIHRoZXJlJ3MgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIENvbGxhdG9yCisgICAgICovCisgICAgUnVsZUJhc2VkQ29sbGF0b3IoTG9jYWxlIGxvY2FsZSkgLy8gdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBJQ1VMb2NhbGVEYXRhLmdldExvY2FsZUVsZW1lbnRzKGxvY2FsZSk7CisgICAgICAgIGluaXRVdGlsaXR5KCk7CisgICAgICAgIGlmIChyYiAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIE9iamVjdCBlbGVtZW50cyA9IHJiLmdldE9iamVjdCgiQ29sbGF0aW9uRWxlbWVudHMiKTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBPYmplY3RbXVtdIHJ1bGVzID0gKE9iamVjdFtdW10pZWxlbWVudHM7CisgICAgICAgICAgICAgICAgICAgIG1fcnVsZXNfID0gKFN0cmluZylydWxlc1sxXVsxXTsKKyAgICAgICAgICAgICAgICAgICAgLy8gJSVDb2xsYXRpb25CaW4KKyAgICAgICAgICAgICAgICAgICAgYnl0ZSBtYXBbXSA9IChieXRlIFtdKXJ1bGVzWzBdWzFdOworICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZElucHV0U3RyZWFtIGlucHV0ID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShtYXApKTsKKyAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3JSZWFkZXIgcmVhZGVyID0gbmV3IENvbGxhdG9yUmVhZGVyKGlucHV0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXAubGVuZ3RoID4gTUlOX0JJTkFSWV9EQVRBX1NJWkVfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZCh0aGlzLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEhlYWRlcih0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkT3B0aW9ucyh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR1cGxpY2F0aW5nIFVDQV8ncyBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRXaXRoVUNBVGFibGVzKCk7CisgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgLy8gaWYgZmFpbGVkIHVzZSBVQ0EuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2V0V2l0aFVDQURhdGEoKTsKKyAgICB9IAorICAgIAorICAgIC8vIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGlzIGNvbGxhdG9yIHRvIHVzZSB0aGUgdGFibGVzIGluIFVDQS4gTm90ZSBvcHRpb25zIG5vdCB0YWtlbgorICAgICAqIGNhcmUgb2YgaGVyZS4KKyAgICAgKi8KKyAgICBmaW5hbCB2b2lkIHNldFdpdGhVQ0FUYWJsZXMoKQorICAgIHsKKyAgICAgICAgbV9jb250cmFjdGlvbk9mZnNldF8gPSBVQ0FfLm1fY29udHJhY3Rpb25PZmZzZXRfOworICAgICAgICBtX2V4cGFuc2lvbk9mZnNldF8gPSBVQ0FfLm1fZXhwYW5zaW9uT2Zmc2V0XzsKKyAgICAgICAgbV9leHBhbnNpb25fID0gVUNBXy5tX2V4cGFuc2lvbl87CisgICAgICAgIG1fY29udHJhY3Rpb25JbmRleF8gPSBVQ0FfLm1fY29udHJhY3Rpb25JbmRleF87CisgICAgICAgIG1fY29udHJhY3Rpb25DRV8gPSBVQ0FfLm1fY29udHJhY3Rpb25DRV87CisgICAgICAgIG1fdHJpZV8gPSBVQ0FfLm1fdHJpZV87CisgICAgICAgIG1fZXhwYW5zaW9uRW5kQ0VfID0gVUNBXy5tX2V4cGFuc2lvbkVuZENFXzsKKwkgICAgbV9leHBhbnNpb25FbmRDRU1heFNpemVfID0gVUNBXy5tX2V4cGFuc2lvbkVuZENFTWF4U2l6ZV87CisJICAgIG1fdW5zYWZlXyA9IFVDQV8ubV91bnNhZmVfOworCSAgICBtX2NvbnRyYWN0aW9uRW5kXyA9IFVDQV8ubV9jb250cmFjdGlvbkVuZF87CisJICAgIG1fbWluVW5zYWZlXyA9IFVDQV8ubV9taW5VbnNhZmVfOyAKKyAgICAgICAgbV9taW5Db250cmFjdGlvbkVuZF8gPSBVQ0FfLm1fbWluQ29udHJhY3Rpb25FbmRfOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoaXMgY29sbGF0b3IgdG8gdXNlIHRoZSBhbGwgb3B0aW9ucyBhbmQgdGFibGVzIGluIFVDQS4gCisgICAgICovCisgICAgZmluYWwgdm9pZCBzZXRXaXRoVUNBRGF0YSgpCisgICAgeworICAgICAgICBsYXRpbk9uZUZhaWxlZF8gPSB0cnVlOworICAgICAgICAKKyAgICAJbV9hZGRpdGlvbjNfID0gVUNBXy5tX2FkZGl0aW9uM187CisgICAgCW1fYm90dG9tM18gPSBVQ0FfLm1fYm90dG9tM187CisgICAgCW1fYm90dG9tQ291bnQzXyA9IFVDQV8ubV9ib3R0b21Db3VudDNfOworICAgIAltX2Nhc2VGaXJzdF8gPSBVQ0FfLm1fY2FzZUZpcnN0XzsKKyAgICAJbV9jYXNlU3dpdGNoXyA9IFVDQV8ubV9jYXNlU3dpdGNoXzsKKyAgICAJbV9jb21tb24zXyA9IFVDQV8ubV9jb21tb24zXzsKKyAgICAJbV9jb250cmFjdGlvbk9mZnNldF8gPSBVQ0FfLm1fY29udHJhY3Rpb25PZmZzZXRfOworICAgIAlzZXREZWNvbXBvc2l0aW9uKFVDQV8uZ2V0RGVjb21wb3NpdGlvbigpKTsKKyAgICAJbV9kZWZhdWx0Q2FzZUZpcnN0XyA9IFVDQV8ubV9kZWZhdWx0Q2FzZUZpcnN0XzsKKyAgICAJbV9kZWZhdWx0RGVjb21wb3NpdGlvbl8gPSBVQ0FfLm1fZGVmYXVsdERlY29tcG9zaXRpb25fOworICAgIAltX2RlZmF1bHRJc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8gCisgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVUNBXy5tX2RlZmF1bHRJc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF87CisgICAgCW1fZGVmYXVsdElzQ2FzZUxldmVsXyA9IFVDQV8ubV9kZWZhdWx0SXNDYXNlTGV2ZWxfOworICAgIAltX2RlZmF1bHRJc0ZyZW5jaENvbGxhdGlvbl8gPSBVQ0FfLm1fZGVmYXVsdElzRnJlbmNoQ29sbGF0aW9uXzsKKyAgICAJbV9kZWZhdWx0SXNIaXJhZ2FuYTRfID0gVUNBXy5tX2RlZmF1bHRJc0hpcmFnYW5hNF87CisgICAgCW1fZGVmYXVsdFN0cmVuZ3RoXyA9IFVDQV8ubV9kZWZhdWx0U3RyZW5ndGhfOworICAgIAltX2RlZmF1bHRWYXJpYWJsZVRvcFZhbHVlXyA9IFVDQV8ubV9kZWZhdWx0VmFyaWFibGVUb3BWYWx1ZV87CisgICAgCW1fZXhwYW5zaW9uT2Zmc2V0XyA9IFVDQV8ubV9leHBhbnNpb25PZmZzZXRfOworICAgIAltX2lzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkXyA9IFVDQV8ubV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF87CisgICAgCW1faXNDYXNlTGV2ZWxfID0gVUNBXy5tX2lzQ2FzZUxldmVsXzsKKyAgICAJbV9pc0ZyZW5jaENvbGxhdGlvbl8gPSBVQ0FfLm1faXNGcmVuY2hDb2xsYXRpb25fOworICAgIAltX2lzSGlyYWdhbmE0XyA9IFVDQV8ubV9pc0hpcmFnYW5hNF87CisgICAgCW1faXNKYW1vU3BlY2lhbF8gPSBVQ0FfLm1faXNKYW1vU3BlY2lhbF87CisgICAgCW1faXNTaW1wbGUzXyA9IFVDQV8ubV9pc1NpbXBsZTNfOworICAgIAltX21hc2szXyA9IFVDQV8ubV9tYXNrM187CisgICAgCW1fbWluQ29udHJhY3Rpb25FbmRfID0gVUNBXy5tX21pbkNvbnRyYWN0aW9uRW5kXzsKKyAgICAJbV9taW5VbnNhZmVfID0gVUNBXy5tX21pblVuc2FmZV87CisgICAgCW1fcnVsZXNfID0gVUNBXy5tX3J1bGVzXzsKKyAgICAJc2V0U3RyZW5ndGgoVUNBXy5nZXRTdHJlbmd0aCgpKTsKKyAgICAJbV90b3AzXyA9IFVDQV8ubV90b3AzXzsKKyAgICAJbV90b3BDb3VudDNfID0gVUNBXy5tX3RvcENvdW50M187CisgICAgCW1fdmFyaWFibGVUb3BWYWx1ZV8gPSBVQ0FfLm1fdmFyaWFibGVUb3BWYWx1ZV87CisgICAgCXNldFdpdGhVQ0FUYWJsZXMoKTsKKyAgICAgICAgbGF0aW5PbmVGYWlsZWRfID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3Qgd2hldGhlciBhIGNoYXIgY2hhcmFjdGVyIGlzIHBvdGVudGlhbGx5ICJ1bnNhZmUiIGZvciB1c2UgYXMgYSAKKyAgICAgKiBjb2xsYXRpb24gc3RhcnRpbmcgcG9pbnQuICJVbnNhZmUiIGNoYXJhY3RlcnMgYXJlIGNvbWJpbmluZyBtYXJrcyBvciAKKyAgICAgKiB0aG9zZSBiZWxvbmdpbmcgdG8gc29tZSBjb250cmFjdGlvbiBzZXF1ZW5jZSBmcm9tIHRoZSBvZmZzZXQgMSBvbndhcmRzLgorICAgICAqIEUuZy4gaWYgIkFCQyIgaXMgdGhlIG9ubHkgY29udHJhY3Rpb24sIHRoZW4gJ0InIGFuZCAKKyAgICAgKiAnQycgYXJlIGNvbnNpZGVyZWQgdW5zYWZlLiBJZiB3ZSBoYXZlIGFub3RoZXIgY29udHJhY3Rpb24gIlpBIiB3aXRoIAorICAgICAqIHRoZSBvbmUgYWJvdmUsIHRoZW4gJ0EnLCAnQicsICdDJyBhcmUgInVuc2FmZSIgYnV0ICdaJyBpcyBub3QuIAorICAgICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIgdG8gZGV0ZXJtaW4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgY2ggaXMgdW5zYWZlLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKwlmaW5hbCBib29sZWFuIGlzVW5zYWZlKGNoYXIgY2gpIAorCXsKKyAgICAJaWYgKGNoIDwgbV9taW5VbnNhZmVfKSB7CisJICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwkKKwkgICAgaWYgKGNoID49IChIRVVSSVNUSUNfU0laRV8gPDwgSEVVUklTVElDX1NISUZUXykpIHsKKwkgICAgICAJaWYgKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShjaCkgfHwgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjaCkpIHsKKwkgICAgICAgICAgICAvLyAgVHJhaWwgc3Vycm9nYXRlIGFyZSBhbHdheXMgY29uc2lkZXJlZCB1bnNhZmUuCisJICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICB9CisJICAgICAgICBjaCAmPSBIRVVSSVNUSUNfT1ZFUkZMT1dfTUFTS187CisJICAgICAgICBjaCArPSBIRVVSSVNUSUNfT1ZFUkZMT1dfT0ZGU0VUXzsKKwkgICAgfQorCSAgICBpbnQgdmFsdWUgPSBtX3Vuc2FmZV9bY2ggPj4gSEVVUklTVElDX1NISUZUX107CisJICAgIHJldHVybiAoKHZhbHVlID4+IChjaCAmIEhFVVJJU1RJQ19NQVNLXykpICYgMSkgIT0gMDsKKwl9CisJCisJLyoqCisJICogQXBwcm94aW1hdGUgZGV0ZXJtaW5hdGlvbiBpZiBhIGNoYXIgY2hhcmFjdGVyIGlzIGF0IGEgY29udHJhY3Rpb24gZW5kLgorCSAqIEd1YXJhbnRlZWQgdG8gYmUgdHJ1ZSBpZiBhIGNoYXJhY3RlciBpcyBhdCB0aGUgZW5kIG9mIGEgY29udHJhY3Rpb24sCisJICogb3RoZXJ3aXNlIGl0IGlzIG5vdCBkZXRlcm1pbmlzdGljLgorCSAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIgdG8gYmUgZGV0ZXJtaW5lZAorCSAqLworCWZpbmFsIGJvb2xlYW4gaXNDb250cmFjdGlvbkVuZChjaGFyIGNoKSAKKwl7CisJCWlmIChVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGNoKSkgeworICAgICAgCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisgICAgCWlmIChjaCA8IG1fbWluQ29udHJhY3Rpb25FbmRfKSB7CisgICAgICAgIAlyZXR1cm4gZmFsc2U7CisgICAgCX0KKworICAgCQlpZiAoY2ggPj0gKEhFVVJJU1RJQ19TSVpFXyA8PCBIRVVSSVNUSUNfU0hJRlRfKSkgeworICAgICAgICAJY2ggJj0gSEVVUklTVElDX09WRVJGTE9XX01BU0tfOworICAgICAgICAJY2ggKz0gSEVVUklTVElDX09WRVJGTE9XX09GRlNFVF87CisgICAgCX0KKyAgICAJaW50IHZhbHVlID0gbV9jb250cmFjdGlvbkVuZF9bY2ggPj4gSEVVUklTVElDX1NISUZUX107CisJICAgIHJldHVybiAoKHZhbHVlID4+IChjaCAmIEhFVVJJU1RJQ19NQVNLXykpICYgMSkgIT0gMDsKKwl9CisJCisJLyoqCisJICogUmV0cmlldmUgdGhlIHRhZyBvZiBhIHNwZWNpYWwgY2UKKwkgKiBAcGFyYW0gY2UgY2UgdG8gdGVzdAorCSAqIEByZXR1cm4gdGFnIG9mIGNlCisJICovCisJc3RhdGljIGludCBnZXRUYWcoaW50IGNlKSAKKwl7CisJCXJldHVybiAoY2UgJiBDRV9UQUdfTUFTS18pID4+IENFX1RBR19TSElGVF87CisJfQorICAgIAorICAgIC8qKiAKKwkgKiBDaGVja2luZyBpZiBjZSBpcyBzcGVjaWFsCisJICogQHBhcmFtIGNlIHRvIGNoZWNrCisJICogQHJldHVybiB0cnVlIGlmIGNlIGlzIHNwZWNpYWwKKwkgKi8KKwlzdGF0aWMgYm9vbGVhbiBpc1NwZWNpYWwoaW50IGNlKQorCXsKKwkJcmV0dXJuIChjZSAmIENFX1NQRUNJQUxfRkxBR18pID09IENFX1NQRUNJQUxfRkxBR187IAorCX0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgYXJndW1lbnQgY2UgaXMgYSBjb250aW51YXRpb24KKyAgICAgKiBAcGFyYW0gY2UgY29sbGF0aW9uIGVsZW1lbnQgdG8gdGVzdAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBjZSBpcyBhIGNvbnRpbnVhdGlvbgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzQ29udGludWF0aW9uKGludCBjZSkgCisgICAgeworICAgICAgICByZXR1cm4gY2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiAKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNlICYgQ0VfQ09OVElOVUFUSU9OX1RBR18pID09IENFX0NPTlRJTlVBVElPTl9UQUdfOworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGlubmVyIGNsYXNzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRoZSBzbWFsbGVzdCBuYXR1cmFsIHVuc2FmZSBvciBjb250cmFjdGlvbiBlbmQgY2hhciBjaGFyYWN0ZXIgYmVmb3JlIAorICAgICAqIHRhaWxvcmluZy4KKyAgICAgKiBUaGlzIGlzIGEgY29tYmluaW5nIG1hcmsuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfTUlOX0hFVVJJU1RJQ18gPSAweDMwMDsKKyAgICAvKiogCisgICAgICogSGV1cmlzdGljIHRhYmxlIHRhYmxlIHNpemUuIFNpemUgaXMgMzIgYnl0ZXMsIDEgYml0IGZvciBlYWNoIAorICAgICAqIGxhdGluIDEgY2hhciwgYW5kIHNvbWUgcG93ZXIgb2YgdHdvIGZvciBoYXNoaW5nIHRoZSByZXN0IG9mIHRoZSBjaGFycy4gICAKKyAgICAgKiBTaXplIGluIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEhFVVJJU1RJQ19TSVpFXyA9IDEwNTY7CisgICAgLyoqIAorICAgICAqIE1hc2sgdmFsdWUgZG93biB0byAic29tZSBwb3dlciBvZiB0d28iIC0gMSwKKyAgICAgKiBudW1iZXIgb2YgYml0cywgbm90IG51bSBvZiBieXRlcy4KKyAgICAgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEhFVVJJU1RJQ19PVkVSRkxPV19NQVNLXyA9IDB4MWZmZjsKKwkvKioKKwkgKiBVbnNhZmUgY2hhcmFjdGVyIHNoaWZ0CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFVVJJU1RJQ19TSElGVF8gPSAzOworCS8qKgorCSAqIFVuc2FmZSBjaGFyYWN0ZXIgYWRkaXRpb24gZm9yIGNoYXJhY3RlciB0b28gbGFyZ2UsIGl0IGhhcyB0byBiZSBmb2xkZWQKKwkgKiB0aGVuIGluY3JlbWVudGVkLgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgSEVVUklTVElDX09WRVJGTE9XX09GRlNFVF8gPSAyNTY7CisJLyoqIAorICAgICAqIE1hc2sgdmFsdWUgdG8gZ2V0IG9mZnNldCBpbiBoZXVyaXN0aWMgdGFibGUuCisgICAgICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBIRVVSSVNUSUNfTUFTS18gPSA3OworCQorCXByaXZhdGUgaW50IG1fY2FzZVN3aXRjaF87IAorICAgIHByaXZhdGUgaW50IG1fY29tbW9uM187CisgICAgcHJpdmF0ZSBpbnQgbV9tYXNrM187IAorICAgIC8qKiAKKyAgICAgKiBXaGVuIHN3aXRjaGluZyBjYXNlLCB3ZSBuZWVkIHRvIGFkZCBvciBzdWJ0cmFjdCBkaWZmZXJlbnQgdmFsdWVzLgorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fYWRkaXRpb24zXzsgCisgICAgLyoqIAorICAgICAqIFVwcGVyIHJhbmdlIHdoZW4gY29tcHJlc3NpbmcgCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV90b3AzXzsKKyAgICAvKiogCisgICAgICogVXBwZXIgcmFuZ2Ugd2hlbiBjb21wcmVzc2luZyAKKyAgICAgKi8gCisgICAgcHJpdmF0ZSBpbnQgbV9ib3R0b20zXzsgCisgICAgcHJpdmF0ZSBpbnQgbV90b3BDb3VudDNfOworICAgIHByaXZhdGUgaW50IG1fYm90dG9tQ291bnQzXzsJCisJLyoqCisJICogQ2FzZSBmaXJzdCBjb25zdGFudHMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FTRV9TV0lUQ0hfID0gMHhDMDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9fQ0FTRV9TV0lUQ0hfID0gMDsKKwkvKioKKwkgKiBDYXNlIGxldmVsIGNvbnN0YW50cworCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDRV9SRU1PVkVfQ0FTRV8gPSAweDNGOyAKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfS0VFUF9DQVNFXyA9IDB4RkY7CisJLyoqCisJICogQ2FzZSBzdHJlbmd0aCBtYXNrCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0NBU0VfTUFTS18zXyA9IDB4RkY7CisJLyoqIAorCSAqIFNvcnRrZXkgc2l6ZSBmYWN0b3IuIFZhbHVlcyBjYW4gYmUgY2hhbmdlZC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgUFJPUE9SVElPTl8yXyA9IDAuNTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgUFJPUE9SVElPTl8zXyA9IDAuNjY3OworCisJLy8gVGhlc2UgdmFsdWVzIGNvbWUgZnJvbSB0aGUgVUNBIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKiogCisJICogVGhpcyBpcyBhbiBlbnVtIHRoYXQgbGlzdHMgbWFnaWMgc3BlY2lhbCBieXRlIHZhbHVlcyBmcm9tIHRoZSAKKwkgKiBmcmFjdGlvbmFsIFVDQSAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIEJZVEVfWkVST18gPSAweDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBCWVRFX0xFVkVMX1NFUEFSQVRPUl8gPSAoYnl0ZSkweDAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgQllURV9TT1JUS0VZX0dMVUVfID0gKGJ5dGUpMHgwMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIEJZVEVfU0hJRlRfUFJFRklYXyA9IChieXRlKTB4MDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBCWVRFX1VOU0hJRlRFRF9NSU5fID0gQllURV9TSElGVF9QUkVGSVhfOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgQllURV9GSVJTVF9VQ0FfID0gQllURV9DT01NT05fOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgQllURV9MQVNUX0xBVElOX1BSSU1BUllfID0gKGJ5dGUpMHg0QzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIEJZVEVfRklSU1RfTk9OX0xBVElOX1BSSU1BUllfID0gKGJ5dGUpMHg0RDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIEJZVEVfVU5TSElGVEVEX01BWF8gPSAoYnl0ZSkweEZGOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT1RBTF8yXyA9IENPTU1PTl9UT1BfMl8gLSBDT01NT05fQk9UVE9NXzJfIC0gMTsgCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMQUdfQklUX01BU0tfQ0FTRV9TV0lUQ0hfT0ZGXyA9IDB4ODA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMQUdfQklUX01BU0tfQ0FTRV9TV0lUQ0hfT05fID0gMHg0MDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09NTU9OX1RPUF9DQVNFX1NXSVRDSF9PRkZfM18gPSAweDg1OworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT01NT05fVE9QX0NBU0VfU1dJVENIX0xPV0VSXzNfID0gMHg0NTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09NTU9OX1RPUF9DQVNFX1NXSVRDSF9VUFBFUl8zXyA9IDB4QzU7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTU1PTl9CT1RUT01fM18gPSAweDA1OworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT01NT05fQk9UVE9NX0NBU0VfU1dJVENIX1VQUEVSXzNfID0gMHg4NjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09NTU9OX0JPVFRPTV9DQVNFX1NXSVRDSF9MT1dFUl8zXyA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NT05fQk9UVE9NXzNfOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT1BfQ09VTlRfMl8gPSAoaW50KShQUk9QT1JUSU9OXzJfICogVE9UQUxfMl8pOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCT1RUT01fQ09VTlRfMl8gPSBUT1RBTF8yXyAtIFRPUF9DT1VOVF8yXzsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09NTU9OXzJfID0gQ09NTU9OX0JPVFRPTV8yXzsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09NTU9OX1VQUEVSX0ZJUlNUXzNfID0gMHhDNTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09NTU9OX05PUk1BTF8zXyA9IENPTU1PTl9CT1RUT01fM187CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTU1PTl80XyA9IChieXRlKTB4RkY7CisgICAgCisgICAgCisJCisJLyoqCisJICogTWluaW11bSBzaXplIHJlcXVpcmVkIGZvciB0aGUgYmluYXJ5IGNvbGxhdGlvbiBkYXRhIGluIGJ5dGVzLgorCSAqIFNpemUgb2YgVUNBIGhlYWRlciArIHNpemUgb2Ygb3B0aW9ucyB0byA0IGJ5dGVzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9CSU5BUllfREFUQV9TSVpFXyA9ICg0MiArIDI0KSA8PCAyOyAgICAgCisJCisJLyoqCisJICogSWYgdGhpcyBjb2xsYXRvciBpcyB0byBnZW5lcmF0ZSBvbmx5IHNpbXBsZSB0ZXJ0aWFyaWVzIGZvciBmYXN0IHBhdGgKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gbV9pc1NpbXBsZTNfOworCQorCS8qKgorICAgICAqIEZyZW5jaCBjb2xsYXRpb24gc29ydGluZyBmbGFnCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1faXNGcmVuY2hDb2xsYXRpb25fOyAKKyAgICAvKioKKyAgICAgKiBGbGFnIGluZGljYXRpbmcgaWYgc2hpZnRlZCBpcyByZXF1ZXN0ZWQgZm9yIFF1YXRlcm5hcnkgYWx0ZXJuYXRlCisgICAgICogaGFuZGxpbmcuIElmIHRoaXMgaXMgbm90IHRydWUsIHRoZSBkZWZhdWx0IGZvciBhbHRlcm5hdGUgaGFuZGxpbmcgd2lsbAorICAgICAqIGJlIG5vbi1pZ25vcmFibGUuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1faXNBbHRlcm5hdGVIYW5kbGluZ1NoaWZ0ZWRfOyAKKyAgICAvKiogCisgICAgICogRXh0cmEgY2FzZSBsZXZlbCBmb3Igc29ydGluZworICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtX2lzQ2FzZUxldmVsXzsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU09SVF9CVUZGRVJfSU5JVF9TSVpFXyA9IDEyODsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU09SVF9CVUZGRVJfSU5JVF9TSVpFXzFfID0gCisJCQkJCQkJCQkJCQkJU09SVF9CVUZGRVJfSU5JVF9TSVpFXyA8PCAzOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTT1JUX0JVRkZFUl9JTklUX1NJWkVfMl8gPSBTT1JUX0JVRkZFUl9JTklUX1NJWkVfOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTT1JUX0JVRkZFUl9JTklUX1NJWkVfM18gPSBTT1JUX0JVRkZFUl9JTklUX1NJWkVfOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTT1JUX0JVRkZFUl9JTklUX1NJWkVfQ0FTRV8gPSAKKwkJCQkJCQkJCQkJCVNPUlRfQlVGRkVSX0lOSVRfU0laRV8gPj4gMjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU09SVF9CVUZGRVJfSU5JVF9TSVpFXzRfID0gU09SVF9CVUZGRVJfSU5JVF9TSVpFXzsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfQ09OVElOVUFUSU9OX1RBR18gPSAweEMwOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDRV9SRU1PVkVfQ09OVElOVUFUSU9OX01BU0tfID0gMHhGRkZGRkYzRjsgCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFTVF9CWVRFX01BU0tfID0gMHhGRjsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0VfUkVTRVRfVE9QX1ZBTFVFXyA9IDB4OUYwMDAzMDM7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX05FWFRfVE9QX1ZBTFVFXyA9IDB4RTg5NjAzMDM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFNPUlRfQ0FTRV9CWVRFX1NUQVJUXyA9IChieXRlKTB4ODA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBTT1JUX0NBU0VfU0hJRlRfU1RBUlRfID0gKGJ5dGUpNzsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFNPUlRfTEVWRUxfVEVSTUlOQVRPUl8gPSAxOworCQorCS8qKgorCSAqIENFIGJ1ZmZlciBzaXplCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENFX0JVRkZFUl9TSVpFXyA9IDUxMjsKKyAgICAgICAKKyAgICAvLyB2YXJpYWJsZXMgZm9yIExhdGluLTEgcHJvY2Vzc2luZworICAgIGJvb2xlYW4gbGF0aW5PbmVVc2VfICAgICAgICA9IGZhbHNlOworICAgIGJvb2xlYW4gbGF0aW5PbmVSZWdlblRhYmxlXyA9IGZhbHNlOworICAgIGJvb2xlYW4gbGF0aW5PbmVGYWlsZWRfICAgICA9IGZhbHNlOworCisgICAgaW50IGxhdGluT25lVGFibGVMZW5fID0gMDsgICAgICAgCisgICAgaW50IGxhdGluT25lQ0VzX1tdID0gbnVsbDsKKyAgICAvKioKKyAgICAgKiBCdW5jaCBvZiB1dGlsaXR5IGl0ZXJhdG9ycworICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgbV9zcmNVdGlsSXRlcl87CisgICAgcHJpdmF0ZSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgbV9zcmNVdGlsQ29sRUl0ZXJfOyAgIAorICAgIHByaXZhdGUgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgbV90Z3RVdGlsSXRlcl87CisgICAgcHJpdmF0ZSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgbV90Z3RVdGlsQ29sRUl0ZXJfOworICAgIC8qKgorICAgICAqIFV0aWxpdHkgY29tcGFyaXNvbiBmbGFncworICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtX3V0aWxDb21wYXJlMF87CisgICAgcHJpdmF0ZSBib29sZWFuIG1fdXRpbENvbXBhcmUxXzsKKyAgICBwcml2YXRlIGJvb2xlYW4gbV91dGlsQ29tcGFyZTJfOworICAgIHByaXZhdGUgYm9vbGVhbiBtX3V0aWxDb21wYXJlM187CisgICAgcHJpdmF0ZSBib29sZWFuIG1fdXRpbENvbXBhcmU0XzsKKyAgICBwcml2YXRlIGJvb2xlYW4gbV91dGlsQ29tcGFyZTVfOyAKKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IGJ5dGUgYnVmZmVyCisgICAgICovCisgICAgcHJpdmF0ZSBieXRlIG1fdXRpbEJ5dGVzMF9bXTsKKyAgICBwcml2YXRlIGJ5dGUgbV91dGlsQnl0ZXMxX1tdOworICAgIHByaXZhdGUgYnl0ZSBtX3V0aWxCeXRlczJfW107CisgICAgcHJpdmF0ZSBieXRlIG1fdXRpbEJ5dGVzM19bXTsKKyAgICBwcml2YXRlIGJ5dGUgbV91dGlsQnl0ZXM0X1tdOworICAgIHByaXZhdGUgYnl0ZSBtX3V0aWxCeXRlczVfW107CisgICAgCisgICAgcHJpdmF0ZSBpbnQgbV91dGlsQnl0ZXNDb3VudDBfOworICAgIHByaXZhdGUgaW50IG1fdXRpbEJ5dGVzQ291bnQxXzsKKyAgICBwcml2YXRlIGludCBtX3V0aWxCeXRlc0NvdW50Ml87CisgICAgcHJpdmF0ZSBpbnQgbV91dGlsQnl0ZXNDb3VudDNfOworICAgIHByaXZhdGUgaW50IG1fdXRpbEJ5dGVzQ291bnQ0XzsKKyAgICBwcml2YXRlIGludCBtX3V0aWxCeXRlc0NvdW50NV87CisgICAgcHJpdmF0ZSBpbnQgbV91dGlsQ291bnQwXzsKKyAgICBwcml2YXRlIGludCBtX3V0aWxDb3VudDFfOworICAgIHByaXZhdGUgaW50IG1fdXRpbENvdW50Ml87CisgICAgcHJpdmF0ZSBpbnQgbV91dGlsQ291bnQzXzsKKyAgICBwcml2YXRlIGludCBtX3V0aWxDb3VudDRfOworICAgIHByaXZhdGUgaW50IG1fdXRpbENvdW50NV87CisgICAgCisgICAgcHJpdmF0ZSBpbnQgbV91dGlsRnJlbmNoU3RhcnRfOyAKKyAgICBwcml2YXRlIGludCBtX3V0aWxGcmVuY2hFbmRfOworICAgIAorICAgIC8qKiAKKyAgICAgKiBQcmVwYXJpbmcgdGhlIENFIGJ1ZmZlcnMuIHdpbGwgYmUgZmlsbGVkIGR1cmluZyB0aGUgcHJpbWFyeSBwaGFzZQorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fc3JjVXRpbENFQnVmZmVyX1tdOyAKKyAgICBwcml2YXRlIGludCBtX3RndFV0aWxDRUJ1ZmZlcl9bXTsKKyAgICBwcml2YXRlIGludCBtX3NyY1V0aWxDRUJ1ZmZlclNpemVfOworICAgIHByaXZhdGUgaW50IG1fdGd0VXRpbENFQnVmZmVyU2l6ZV87CisgICAgCisgICAgcHJpdmF0ZSBpbnQgbV9zcmNVdGlsQ29udE9mZnNldF87CisgICAgcHJpdmF0ZSBpbnQgbV90Z3RVdGlsQ29udE9mZnNldF87CisgICAgCisgICAgcHJpdmF0ZSBpbnQgbV9zcmNVdGlsT2Zmc2V0XzsKKyAgICBwcml2YXRlIGludCBtX3RndFV0aWxPZmZzZXRfOworICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgY29tcGFyZVJlZ3VsYXIoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgaW50IG9mZnNldCkgeworICAgICAgICBpbnQgc3RyZW5ndGggPSBnZXRTdHJlbmd0aCgpOworICAgICAgICAvLyBzZXR0aW5nIHVwIHRoZSBjb2xsYXRvciBwYXJhbWV0ZXJzICAgCisgICAgICAgIG1fdXRpbENvbXBhcmUwXyA9IG1faXNDYXNlTGV2ZWxfOworICAgICAgICBtX3V0aWxDb21wYXJlMV8gPSB0cnVlOworICAgICAgICBtX3V0aWxDb21wYXJlMl8gPSBzdHJlbmd0aCA+PSBTRUNPTkRBUlk7CisgICAgICAgIG1fdXRpbENvbXBhcmUzXyA9IHN0cmVuZ3RoID49IFRFUlRJQVJZOworICAgICAgICBtX3V0aWxDb21wYXJlNF8gPSBzdHJlbmd0aCA+PSBRVUFURVJOQVJZOworICAgICAgICBtX3V0aWxDb21wYXJlNV8gPSBzdHJlbmd0aCA9PSBJREVOVElDQUw7CisgICAgICAgIGJvb2xlYW4gZG9GcmVuY2ggPSBtX2lzRnJlbmNoQ29sbGF0aW9uXyAmJiBtX3V0aWxDb21wYXJlMl87CisgICAgICAgIGJvb2xlYW4gZG9TaGlmdDQgPSBtX2lzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkXyAmJiBtX3V0aWxDb21wYXJlNF87CisgICAgICAgIGJvb2xlYW4gZG9IaXJhZ2FuYTQgPSBtX2lzSGlyYWdhbmE0XyAmJiBtX3V0aWxDb21wYXJlNF87CisgICAgCisgICAgICAgIGlmIChkb0hpcmFnYW5hNCAmJiBkb1NoaWZ0NCkgeworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZXN1YiA9IHNvdXJjZS5zdWJzdHJpbmcob2Zmc2V0KTsKKyAgICAgICAgICAgIFN0cmluZyB0YXJnZXRzdWIgPSB0YXJnZXQuc3Vic3RyaW5nKG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJ5U29ydEtleXMoc291cmNlc3ViLCB0YXJnZXRzdWIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHRoZSBsb3dlc3QgcHJpbWFyeSB2YWx1ZSB0aGF0IHdpbGwgbm90IGJlIGlnbm9yZWQgaWYgc2hpZnRlZAorICAgICAgICBpbnQgbG93ZXN0cHZhbHVlID0gbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbV92YXJpYWJsZVRvcFZhbHVlXyA8PCAxNiA6IDA7CisgICAgICAgIG1fc3JjVXRpbENFQnVmZmVyU2l6ZV8gPSAwOworICAgICAgICBtX3RndFV0aWxDRUJ1ZmZlclNpemVfID0gMDsKKyAgICAgICAgaW50IHJlc3VsdCA9IGRvUHJpbWFyeUNvbXBhcmUoZG9IaXJhZ2FuYTQsIGxvd2VzdHB2YWx1ZSwgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBvZmZzZXQpOworICAgICAgICBpZiAobV9zcmNVdGlsQ0VCdWZmZXJTaXplXyA9PSAtMSAKKyAgICAgICAgICAgICYmIG1fdGd0VXRpbENFQnVmZmVyU2l6ZV8gPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBjZWJ1ZmZlciBpcyBjbGVhcmVkIHdoZW4gd2UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQKKyAgICAgICAgICAgIC8vIGVpdGhlciBzb3VyY2UgaXMgZ3JlYXRlciB0aGFuIHRhcmdldCBvciB2aWNlIHZlcnNhLCB0aGUgcmV0dXJuCisgICAgICAgICAgICAvLyByZXN1bHQgaXMgdGhlIGNvbXBhcmlzb24gcmVzdWx0IGFuZCBub3QgdGhlIGhpcmFnYW5hIHJlc3VsdAorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSAKKyAgICAgICAgCisgICAgICAgIGludCBoaXJhZ2FuYXJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3V0aWxDb21wYXJlMl8pIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRvU2Vjb25kYXJ5Q29tcGFyZShkb0ZyZW5jaCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGRvaW5nIHRoZSBjYXNlIGJpdAorICAgICAgICBpZiAobV91dGlsQ29tcGFyZTBfKSB7CisgICAgICAgICAgICByZXN1bHQgPSBkb0Nhc2VDb21wYXJlKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfSAgIAorICAgICAgICB9CisgICAgICAgIC8vIFRlcnRpYXJ5IGxldmVsCisgICAgICAgIGlmIChtX3V0aWxDb21wYXJlM18pIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRvVGVydGlhcnlDb21wYXJlKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChkb1NoaWZ0NCkgeyAgLy8gY2hlY2tRdWFkCisgICAgICAgICAgICByZXN1bHQgPSBkb1F1YXRlcm5hcnlDb21wYXJlKGxvd2VzdHB2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9IAorICAgICAgICBlbHNlIGlmIChkb0hpcmFnYW5hNCAmJiBoaXJhZ2FuYXJlc3VsdCAhPSAwKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBmaW5lIG9uIHF1YXRlcm5hcmllcywgd2UgbWlnaHQgYmUgZGlmZmVyZW50CisgICAgICAgICAgICAvLyBvbiBIaXJhZ2FuYS4gVGhpcywgaG93ZXZlciwgbWlnaHQgZmFpbCB1cyBpbiBzaGlmdGVkLgorICAgICAgICAgICAgcmV0dXJuIGhpcmFnYW5hcmVzdWx0OworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIEZvciBJREVOVElDQUwgY29tcGFyaXNvbnMsIHdlIHVzZSBhIGJpdHdpc2UgY2hhcmFjdGVyIGNvbXBhcmlzb24gCisgICAgICAgIC8vIGFzIGEgdGllYnJlYWtlciBpZiBhbGwgZWxzZSBpcyBlcXVhbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBHZXR0aW5nIGhlcmUgIHNob3VsZCBiZSBxdWl0ZSByYXJlIC0gc3RyaW5ncyBhcmUgbm90IGlkZW50aWNhbCAtICAgICAKKyAgICAgICAgLy8gdGhhdCBpcyBjaGVja2VkIGZpcnN0LCBidXQgY29tcGFyZWQgPT0gdGhyb3VnaCBhbGwgb3RoZXIgY2hlY2tzLiAgCisgICAgICAgIGlmIChtX3V0aWxDb21wYXJlNV8pIHsKKyAgICAgICAgICAgIHJldHVybiBkb0lkZW50aWNhbENvbXBhcmUoc291cmNlLCB0YXJnZXQsIG9mZnNldCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIDIgYnl0ZXMgb2YgcHJpbWFyeSBvcmRlciBhbmQgYWRkcyBpdCB0byB0aGUgcHJpbWFyeSBieXRlIGFycmF5CisgICAgICogQHBhcmFtIGNlIGN1cnJlbnQgY2UKKyAgICAgKiBAcGFyYW0gbm90SXNDb250aW51YXRpb24gZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBjdXJyZW50IGJ5dGVzIGJlbG9uZyB0byAKKyAgICAgKiAJCQlhIGNvbnRpbnVhdGlvbiBjZQorICAgICAqIEBwYXJhbSBkb1NoaWZ0IGZsYWcgaW5kaWNhdGluZyBpZiBjZSBpcyB0byBiZSBzaGlmdGVkCisgICAgICogQHBhcmFtIGxlYWRQcmltYXJ5IGxlYWQgcHJpbWFyeSB1c2VkIGZvciBjb21wcmVzc2lvbgorICAgICAqIEBwYXJhbSBjb21tb25Cb3R0b200IGNvbW1vbiBieXRlIHZhbHVlIGZvciBRdWF0ZXJuYXJ5CisgICAgICogQHBhcmFtIGJvdHRvbUNvdW50NCBzbWFsbGVzdCBieXRlIHZhbHVlIGZvciBRdWF0ZXJuYXJ5CisgICAgICogQHJldHVybiB0aGUgbmV3IGxlYWQgcHJpbWFyeSBmb3IgY29tcHJlc3Npb24KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGludCBkb1ByaW1hcnlCeXRlcyhpbnQgY2UsIGJvb2xlYW4gbm90SXNDb250aW51YXRpb24sIAorICAgIAkJCQkJCSAgICAgIGJvb2xlYW4gZG9TaGlmdCwgaW50IGxlYWRQcmltYXJ5LAorICAgIAkJCQkJCSAgICAgIGludCBjb21tb25Cb3R0b200LCBpbnQgYm90dG9tQ291bnQ0KQorICAgIHsKKyAgICAJCisgICAgCWludCBwMiA9IChjZSA+Pj0gMTYpICYgTEFTVF9CWVRFX01BU0tfOyAvLyBpbiBpbnRzIGZvciB1bnNpZ25lZCAKKyAgICAgICAgaW50IHAxID0gY2UgPj4+IDg7ICAvLyBjb21wYXJpc29uCisgICAgCWlmIChkb1NoaWZ0KSB7CisgICAgCQlpZiAobV91dGlsQ291bnQ0XyA+IDApIHsKKyAgICAgICAgICAgIAl3aGlsZSAobV91dGlsQ291bnQ0XyA+IGJvdHRvbUNvdW50NCkgeworICAgICAgICAgICAgCQltX3V0aWxCeXRlczRfID0gYXBwZW5kKG1fdXRpbEJ5dGVzNF8sIG1fdXRpbEJ5dGVzQ291bnQ0XywKKyAgICAgICAgICAgIAkJCQkgICAgICAgICAgICAgKGJ5dGUpKGNvbW1vbkJvdHRvbTQgKyBib3R0b21Db3VudDQpKTsKKyAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDRfICsrOworICAgICAgICAgICAJCQltX3V0aWxDb3VudDRfIC09IGJvdHRvbUNvdW50NDsKKyAgICAgICAgICAgCQl9CisgICAgICAgICAgIAkJbV91dGlsQnl0ZXM0XyA9IGFwcGVuZChtX3V0aWxCeXRlczRfLCBtX3V0aWxCeXRlc0NvdW50NF8sCisJCQkJCQkJICAgICAgICAgICAoYnl0ZSkoY29tbW9uQm90dG9tNCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChtX3V0aWxDb3VudDRfIC0gMSkpKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50NF8gKys7CisgICAgICAgICAgIAkJbV91dGlsQ291bnQ0XyA9IDA7CisgICAgICAgIAl9CisgICAgICAgIAkvLyBkZWFsaW5nIHdpdGggYSB2YXJpYWJsZSBhbmQgd2UncmUgdHJlYXRpbmcgdGhlbSBhcyBzaGlmdGVkCisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hpZnRlZCBpZ25vcmFibGUKKyAgICAgICAgICAgIGlmIChwMSAhPSAwKSB7IAorICAgICAgICAgICAgIAkvLyB3ZSBuZWVkIHRvIGNoZWNrIHRoaXMgc2luY2Ugd2UgY291bGQgYmUgaW4gY29udGludWF0aW9uCisgICAgICAgICAgICAgCW1fdXRpbEJ5dGVzNF8gPSBhcHBlbmQobV91dGlsQnl0ZXM0XywgbV91dGlsQnl0ZXNDb3VudDRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKXAxKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50NF8gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocDIgIT0gMCkgeworICAgICAgICAgICAgCW1fdXRpbEJ5dGVzNF8gPSBhcHBlbmQobV91dGlsQnl0ZXM0XywgbV91dGlsQnl0ZXNDb3VudDRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKXAyKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50NF8gKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeworICAgICAgICAJLy8gTm90ZTogVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFibGUgaXMgd2VsbCBidWlsdCAKKyAgICAgICAgCS8vIGkuZS4gbm90IGhhdmluZyAwIGJ5dGVzIHdoZXJlIHRoZXkgYXJlIG5vdCBzdXBwb3NlZCB0byBiZS4KKyAgICAgICAJCS8vIFVzdWFsbHksIHdlJ2xsIGhhdmUgbm9uLXplcm8gcHJpbWFyeTEgJiBwcmltYXJ5MiwgZXhjZXB0IAorICAgICAgCQkvLyBpbiBjYXNlcyBvZiBMYXRpbk9uZSBhbmQgZnJpZW5kcywgd2hlbiBwcmltYXJ5MiB3aWxsIGJlCisgICAgICAgCQkvLyByZWd1bGFyIGFuZCBzaW1wbGUgc29ydGtleSBjYWxjIAorICAgICAgIAkJaWYgKHAxICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKyAgICAgICAgICAgCQlpZiAobm90SXNDb250aW51YXRpb24pIHsKKyAgICAgICAgICAgCQkJaWYgKGxlYWRQcmltYXJ5ID09IHAxKSB7CisgICAgICAgICAgICAgICAJCQltX3V0aWxCeXRlczFfID0gYXBwZW5kKG1fdXRpbEJ5dGVzMV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8sIChieXRlKXAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyArKzsKKyAgICAgICAgICAgCQkJfSAKKyAgICAgICAgICAgICAgICAgIAllbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgCWlmIChsZWFkUHJpbWFyeSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIAkJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgIAkJCQkoYnl0ZSkoKHAxID4gbGVhZFByaW1hcnkpIAorICAgICAgICAgICAgICAgICAgICAJCQkJCQk/IEJZVEVfVU5TSElGVEVEX01BWF8gCisgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJOiBCWVRFX1VOU0hJRlRFRF9NSU5fKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworICAgICAgICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgICAJaWYgKHAyID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKyAgICAgICAgICAgICAgICAgICAgCQkvLyBvbmUgYnl0ZXIsIG5vdCBjb21wcmVzc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSlwMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworICAgICAgICAgICAgICAgICAgICAgICAgCWxlYWRQcmltYXJ5ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgCX0gCisgICAgICAgICAgICAgICAgICAgIAllbHNlIGlmIChwMSA8IEJZVEVfRklSU1RfTk9OX0xBVElOX1BSSU1BUllfCisgICAgICAgICAgICAgICAgICAgIAkJICB8fCAocDEgCisgICAgICAgICAgICAgICAgICAgID4gKFJ1bGVCYXNlZENvbGxhdG9yLlVDQV9DT05TVEFOVFNfLkxBU1RfTk9OX1ZBUklBQkxFX1swXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4+IDI0KQorICAgICAgICAgICAgICAgICAgICAJCQkmJiBwMSAKKyAgICAgICAgICAgICAgICAgICAgPCAoUnVsZUJhc2VkQ29sbGF0b3IuVUNBX0NPTlNUQU5UU18uRklSU1RfSU1QTElDSVRfWzBdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Pj4gMjQpKSkgeworICAgICAgICAgICAgICAgICAgICAJCQkvLyBub3QgY29tcHJlc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAJCWxlYWRQcmltYXJ5ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIAkJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKXAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworICAgICAgICAgICAgICAgICAgICAgICAgCQltX3V0aWxCeXRlczFfID0gYXBwZW5kKG1fdXRpbEJ5dGVzMV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpcDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8gKys7CisgICAgICAgICAgICAgICAgICAgIAl9IAorICAgICAgICAgICAgICAgICAgICAJZWxzZSB7IC8vIGNvbXByZXNzCisgICAgICAgICAgICAgICAgICAgIAkJbGVhZFByaW1hcnkgPSBwMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAltX3V0aWxCeXRlczFfID0gYXBwZW5kKG1fdXRpbEJ5dGVzMV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKXAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAltX3V0aWxCeXRlc0NvdW50MV8gKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfLCAoYnl0ZSlwMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworICAgICAgICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICAJLy8gY29udGludWF0aW9uLCBhZGQgcHJpbWFyeSB0byB0aGUga2V5LCBubyBjb21wcmVzc2lvbgorICAgICAgICAgICAgICAgICAgCW1fdXRpbEJ5dGVzMV8gPSBhcHBlbmQobV91dGlsQnl0ZXMxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfLCAoYnl0ZSlwMSk7CisgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyArKzsKKyAgICAgICAgICAgICAgICAgIAlpZiAocDIgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworICAgICAgICAgICAgICAgICAgICAJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8sIChieXRlKXAyKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWNvbmQgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworICAgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgCX0KKyAgICAgICAJcmV0dXJuIGxlYWRQcmltYXJ5OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzZWNvbmRhcnkgYnl0ZSBhbmQgYWRkcyBpdCB0byB0aGUgc2Vjb25kYXJ5IGJ5dGUgYXJyYXkKKyAgICAgKiBAcGFyYW0gY2UgY3VycmVudCBjZQorICAgICAqIEBwYXJhbSBub3RJc0NvbnRpbnVhdGlvbiBmbGFnIGluZGljYXRpbmcgaWYgdGhlIGN1cnJlbnQgYnl0ZXMgYmVsb25nIHRvIAorICAgICAqIAkJCWEgY29udGludWF0aW9uIGNlCisgICAgICogQHBhcmFtIGRvRnJlbmNoIGZsYWcgaW5kaWNhdG9yIGlmIGZyZW5jaCBzb3J0IGlzIHRvIGJlIHBlcmZvcm1lZAorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgdm9pZCBkb1NlY29uZGFyeUJ5dGVzKGludCBjZSwgYm9vbGVhbiBub3RJc0NvbnRpbnVhdGlvbiwKKyAgICAJCQkJCQkgCQkgICAgYm9vbGVhbiBkb0ZyZW5jaCkKKyAgICB7CisgICAgCWludCBzID0gKGNlID4+PSA4KSAmIExBU1RfQllURV9NQVNLXzsgLy8gaW50IGZvciBjb21wYXJpc29uCisgICAgCWlmIChzICE9IDApIHsKKyAgICAJCWlmICghZG9GcmVuY2gpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNvbXByZXNzaW9uIGNvZGUuCisgICAgICAgICAgICAgICAgaWYgKHMgPT0gQ09NTU9OXzJfICYmIG5vdElzQ29udGludWF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgbV91dGlsQ291bnQyXyArKzsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgCWlmIChtX3V0aWxDb3VudDJfID4gMCkgeworICAgICAgICAgICAgICAgICAgICAJaWYgKHMgPiBDT01NT05fMl8pIHsgLy8gbm90IG5lY2Vzc2FyeSBmb3IgNHRoIGxldmVsLgorICAgICAgICAgICAgICAgICAgICAJCXdoaWxlIChtX3V0aWxDb3VudDJfID4gVE9QX0NPVU5UXzJfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAJCW1fdXRpbEJ5dGVzMl8gPSBhcHBlbmQobV91dGlsQnl0ZXMyXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50Ml8sCisgICAgICAgICAgICAgICAgICAgICAgICAJCQkJKGJ5dGUpKENPTU1PTl9UT1BfMl8gLSBUT1BfQ09VTlRfMl8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDJfICsrOworICAgICAgICAgICAgICAgICAgICAgICAgCQltX3V0aWxDb3VudDJfIC09IFRPUF9DT1VOVF8yXzsKKyAgICAgICAgICAgICAgICAgICAgICAJCX0KKyAgICAgICAgICAgICAgICAgICAgICAJCW1fdXRpbEJ5dGVzMl8gPSBhcHBlbmQobV91dGlsQnl0ZXMyXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQyXywKKyAgICAgICAgICAgICAgICAgICAgICAJCQkJICAgICAgICAgICAgICAgKGJ5dGUpKENPTU1PTl9UT1BfMl8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAobV91dGlsQ291bnQyXyAtIDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDJfICsrOworICAgICAgICAgICAgICAgICAgICAJfSAKKyAgICAgICAgICAgICAgICAgICAgCWVsc2UgeworICAgICAgICAgICAgICAgICAgICAJCXdoaWxlIChtX3V0aWxDb3VudDJfID4gQk9UVE9NX0NPVU5UXzJfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAJCW1fdXRpbEJ5dGVzMl8gPSBhcHBlbmQobV91dGlsQnl0ZXMyXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50Ml8sCisgICAgICAgICAgICAgICAgICAgICAgICAJCQkoYnl0ZSkoQ09NTU9OX0JPVFRPTV8yXyArIEJPVFRPTV9DT1VOVF8yXykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50Ml8gKys7CisgICAgICAgICAgICAgICAgICAgICAgICAJCW1fdXRpbENvdW50Ml8gLT0gQk9UVE9NX0NPVU5UXzJfOworICAgICAgICAgICAgICAgICAgICAgIAkJfQorICAgICAgICAgICAgICAgICAgICAgIAkJbV91dGlsQnl0ZXMyXyA9IGFwcGVuZChtX3V0aWxCeXRlczJfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDJfLAorICAgICAgICAgICAgICAgICAgICAgIAkJCQkgICAgICAgICAgICAgICAoYnl0ZSkoQ09NTU9OX0JPVFRPTV8yXyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChtX3V0aWxDb3VudDJfIC0gMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50Ml8gKys7CisgICAgICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICAgIAltX3V0aWxDb3VudDJfID0gMDsKKyAgICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICAJbV91dGlsQnl0ZXMyXyA9IGFwcGVuZChtX3V0aWxCeXRlczJfLCBtX3V0aWxCeXRlc0NvdW50Ml8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKXMpOworICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50Ml8gKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXMyXyA9IGFwcGVuZChtX3V0aWxCeXRlczJfLCBtX3V0aWxCeXRlc0NvdW50Ml8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSlzKTsKKyAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQyXyArKzsKKyAgICAgICAgICAgICAgICAgIC8vIERvIHRoZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBGcmVuY2ggc2Vjb25kYXJpZXMKKyAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ2V0IGNvbnRpbnVhdGlvbiBlbGVtZW50cyBhbmQgZG8gaW50ZXJtZWRpYXRlIAorICAgICAgICAgICAgICAgICAgLy8gcmVzdG9yZSAKKyAgICAgICAgICAgICAgICAgIC8vIGFiYzFjMmMzZGUgd2l0aCBmcmVuY2ggc2Vjb25kYXJpZXMgbmVlZCB0byBiZSBlZGMxYzJjM2JhIAorICAgICAgICAgICAgICAgICAgLy8gTk9UIGVkYzNjMmMxYmEKKyAgICAgICAgICAgICAgICAgIGlmIChub3RJc0NvbnRpbnVhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAJaWYgKG1fdXRpbEZyZW5jaFN0YXJ0XyAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgCS8vIHJldmVyc2Ugc2Vjb25kYXJpZXMgZnJvbSBmcmVuY2hTdGFydFB0ciB1cCB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgIAkvLyBmcmVuY2hFbmRQdHIKKyAgICAgICAgICAgICAgICAgICAgICAJCXJldmVyc2VCdWZmZXIobV91dGlsQnl0ZXMyXyk7CisgICAgICAgICAgICAgICAgICAgICAgCQltX3V0aWxGcmVuY2hTdGFydF8gPSAtMTsgCisgICAgICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIAlpZiAobV91dGlsRnJlbmNoU3RhcnRfID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgCQltX3V0aWxGcmVuY2hTdGFydF8gID0gbV91dGlsQnl0ZXNDb3VudDJfIC0gMjsKKyAgICAgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAgICAgCW1fdXRpbEZyZW5jaEVuZF8gPSBtX3V0aWxCeXRlc0NvdW50Ml8gLSAxOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAJfQorICAgIAl9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldmVyc2UgdGhlIGFyZ3VtZW50IGJ1ZmZlciAKKyAgICAgKiBAcGFyYW0gYnVmZmVyIHRvIHJldmVyc2UKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmV2ZXJzZUJ1ZmZlcihieXRlIGJ1ZmZlcltdKSAKKyAgICB7IAorICAgIAlpbnQgc3RhcnQgPSBtX3V0aWxGcmVuY2hTdGFydF87CisgICAgCWludCBlbmQgPSBtX3V0aWxGcmVuY2hFbmRfOworICAgIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsgCisgICAgCQlieXRlIGIgPSBidWZmZXJbc3RhcnRdOyAKKyAgICAJCWJ1ZmZlcltzdGFydCArK10gPSBidWZmZXJbZW5kXTsgCisgICAgCQlidWZmZXJbZW5kIC0tXSA9IGI7IAorICAgIAl9CisJfQorCisJLyoqCisJICogSW5zZXJ0IHRoZSBjYXNlIHNoaWZ0aW5nIGJ5dGUgaWYgcmVxdWlyZWQKKwkgKiBAcGFyYW0gY2FzZXNoaWZ0IHZhbHVlCisJICogQHJldHVybiBuZXcgY2FzZXNoaWZ0IHZhbHVlCisJICovCisJcHJpdmF0ZSBmaW5hbCBpbnQgZG9DYXNlU2hpZnQoaW50IGNhc2VzaGlmdCkgCisJeworICAJCWlmIChjYXNlc2hpZnQgID09IDApIHsKKyAgICAJCW1fdXRpbEJ5dGVzMF8gPSBhcHBlbmQobV91dGlsQnl0ZXMwXywgbV91dGlsQnl0ZXNDb3VudDBfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09SVF9DQVNFX0JZVEVfU1RBUlRfKTsKKyAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQwXyArKzsKKyAgICAJCWNhc2VzaGlmdCA9IFNPUlRfQ0FTRV9TSElGVF9TVEFSVF87CisgIAkJfQorICAJCXJldHVybiBjYXNlc2hpZnQ7CisJfQorCisJLyoqCisJICogUGVyZm9ybXMgdGhlIGNhc2luZyBzb3J0CisJICogQHBhcmFtIHRlcnRpYXJ5IGJ5dGUgaW4gaW50cyBmb3IgZWFzeSBjb21wYXJpc29uCisJICogQHBhcmFtIG5vdElzQ29udGludWF0aW9uIGZsYWcgaW5kaWNhdGluZyBpZiB0aGUgY3VycmVudCBieXRlcyBiZWxvbmcgdG8gCisgICAgICogCQkJYSBjb250aW51YXRpb24gY2UKKwkgKiBAcGFyYW0gY2FzZXNoaWZ0CisJICogQHJldHVybiB0aGUgbmV3IHZhbHVlIG9mIGNhc2Ugc2hpZnQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBkb0Nhc2VCeXRlcyhpbnQgdGVydGlhcnksIGJvb2xlYW4gbm90SXNDb250aW51YXRpb24sIAorCQkJCQkJCSAgICAgIGludCBjYXNlc2hpZnQpCisJeworCQljYXNlc2hpZnQgPSBkb0Nhc2VTaGlmdChjYXNlc2hpZnQpOworICAgICAgICAgICAgICAJCQorICAgICAgICBpZiAobm90SXNDb250aW51YXRpb24gJiYgdGVydGlhcnkgIT0gMCkgeworICAgICAgICAJYnl0ZSBjYXNlYml0cyA9IChieXRlKSh0ZXJ0aWFyeSAmIDB4QzApOworICAgICAgICAgICAgaWYgKG1fY2FzZUZpcnN0XyA9PSBBdHRyaWJ1dGVWYWx1ZS5VUFBFUl9GSVJTVF8pIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FzZWJpdHMgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlczBfW21fdXRpbEJ5dGVzQ291bnQwXyAtIDFdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfD0gKDEgPDwgKC0tIGNhc2VzaGlmdCkpOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAvLyBzZWNvbmQgYml0CisgICAgICAgICAgICAgICAgICAgICBjYXNlc2hpZnQgPSBkb0Nhc2VTaGlmdChjYXNlc2hpZnQgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzMF9bbV91dGlsQnl0ZXNDb3VudDBfIC0gMV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PSAoKGNhc2ViaXRzID4+IDYpICYgMSkgPDwgKC0tIGNhc2VzaGlmdCk7CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjYXNlYml0cyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzMF9bbV91dGlsQnl0ZXNDb3VudDBfIC0gMV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHw9IDEgPDwgKC0tIGNhc2VzaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHNlY29uZCBiaXQKKyAgICAgICAgICAgICAgICAgICAgY2FzZXNoaWZ0ID0gZG9DYXNlU2hpZnQoY2FzZXNoaWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXMwX1ttX3V0aWxCeXRlc0NvdW50MF8gLSAxXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PSAoKGNhc2ViaXRzID4+IDcpICYgMSkgPDwgKC0tIGNhc2VzaGlmdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjYXNlc2hpZnQgLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAgCisJCXJldHVybiBjYXNlc2hpZnQ7CisJfQorCQorCS8qKgorCSAqIEdldHMgdGhlIHRlcnRpYXJ5IGJ5dGUgYW5kIGFkZHMgaXQgdG8gdGhlIHRlcnRpYXJ5IGJ5dGUgYXJyYXkKKyAgICAgKiBAcGFyYW0gdGVydGlhcnkgYnl0ZSBpbiBpbnQgZm9yIGVhc3kgY29tcGFyaXNvbgorICAgICAqIEBwYXJhbSBub3RJc0NvbnRpbnVhdGlvbiBmbGFnIGluZGljYXRpbmcgaWYgdGhlIGN1cnJlbnQgYnl0ZXMgYmVsb25nIHRvIAorICAgICAqIAkJCWEgY29udGludWF0aW9uIGNlCisJICovCisJcHJpdmF0ZSBmaW5hbCB2b2lkIGRvVGVydGlhcnlCeXRlcyhpbnQgdGVydGlhcnksIGJvb2xlYW4gbm90SXNDb250aW51YXRpb24pCisJeworCQlpZiAodGVydGlhcnkgIT0gMCkgeworCQkJLy8gVGhpcyBpcyBjb21wcmVzc2lvbiBjb2RlLgorICAgICAgICAgICAgLy8gc2VxdWVuY2Ugc2l6ZSBjaGVjayBpcyBpbmNsdWRlZCBpbiB0aGUgaWYgY2xhdXNlCisgICAgICAgICAgICBpZiAodGVydGlhcnkgPT0gbV9jb21tb24zXyAmJiBub3RJc0NvbnRpbnVhdGlvbikgeworICAgICAgICAgICAgICAgICBtX3V0aWxDb3VudDNfICsrOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgCWludCBjb21tb24zID0gbV9jb21tb24zXyAmIExBU1RfQllURV9NQVNLXzsKKyAgICAgICAgICAgICAgICBpZiAodGVydGlhcnkgPiBjb21tb24zICYmIG1fY29tbW9uM18gPT0gQ09NTU9OX05PUk1BTF8zXykgeworICAgICAgICAgICAgICAgICAgICB0ZXJ0aWFyeSArPSBtX2FkZGl0aW9uM187CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlcnRpYXJ5IDw9IGNvbW1vbjMgCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9jb21tb24zXyA9PSBDT01NT05fVVBQRVJfRklSU1RfM18pIHsKKyAgICAgICAgICAgICAgICAgICAgdGVydGlhcnkgLT0gbV9hZGRpdGlvbjNfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV91dGlsQ291bnQzXyA+IDApIHsKKyAgICAgICAgICAgICAgICAJaWYgKHRlcnRpYXJ5ID4gY29tbW9uMykgeworICAgICAgICAgICAgICAgIAkJd2hpbGUgKG1fdXRpbENvdW50M18gPiBtX3RvcENvdW50M18pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAltX3V0aWxCeXRlczNfID0gYXBwZW5kKG1fdXRpbEJ5dGVzM18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDNfLAorICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkoYnl0ZSkobV90b3AzXyAtIG1fdG9wQ291bnQzXykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQzXyArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIAltX3V0aWxDb3VudDNfIC09IG1fdG9wQ291bnQzXzsKKyAgICAgICAgICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgICAgIAltX3V0aWxCeXRlczNfID0gYXBwZW5kKG1fdXRpbEJ5dGVzM18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18sCisgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgICAgIChieXRlKShtX3RvcDNfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAobV91dGlsQ291bnQzXyAtIDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18gKys7CisgICAgICAgICAgICAgICAgIAl9IAorICAgICAgICAgICAgICAgICAJZWxzZSB7CisgICAgICAgICAgICAgICAgIAkJd2hpbGUgKG1fdXRpbENvdW50M18gPiBtX2JvdHRvbUNvdW50M18pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAltX3V0aWxCeXRlczNfID0gYXBwZW5kKG1fdXRpbEJ5dGVzM18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDNfLAorICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgICAoYnl0ZSkobV9ib3R0b20zXyArIG1fYm90dG9tQ291bnQzXykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQzXyArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIAltX3V0aWxDb3VudDNfIC09IG1fYm90dG9tQ291bnQzXzsKKyAgICAgICAgICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgICAgIAltX3V0aWxCeXRlczNfID0gYXBwZW5kKG1fdXRpbEJ5dGVzM18sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18sCisgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgICAgIChieXRlKShtX2JvdHRvbTNfIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAobV91dGlsQ291bnQzXyAtIDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18gKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV91dGlsQ291bnQzXyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzM18gPSBhcHBlbmQobV91dGlsQnl0ZXMzXywgbV91dGlsQnl0ZXNDb3VudDNfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKXRlcnRpYXJ5KTsKKyAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18gKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwl9CisJCisJLyoqCisJICogR2V0cyB0aGUgUXVhdGVybmFyeSBieXRlIGFuZCBhZGRzIGl0IHRvIHRoZSBRdWF0ZXJuYXJ5IGJ5dGUgYXJyYXkKKyAgICAgKiBAcGFyYW0gaXNDb2RlUG9pbnRIaXJhZ2FuYSBmbGFnIGluZGljYXRvciBpZiB0aGUgcHJldmlvdXMgY29kZXBvaW50IAorICAgICAqIAkJCXdlIGRlYWx0IHdpdGggd2FzIEhpcmFnYW5hCisgICAgICogQHBhcmFtIGNvbW1vbkJvdHRvbTQgc21hbGxlc3QgY29tbW9uIFF1YXRlcm5hcnkgYnl0ZSAKKyAgICAgKiBAcGFyYW0gYm90dG9tQ291bnQ0IHNtYWxsZXN0IFF1YXRlcm5hcnkgYnl0ZSAKKyAgICAgKiBAcGFyYW0gaGlyYWdhbmE0IGhpcmFnYW5hIFF1YXRlcm5hcnkgYnl0ZQorCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCBkb1F1YXRlcm5hcnlCeXRlcyhib29sZWFuIGlzQ29kZVBvaW50SGlyYWdhbmEsCisJCQkJCQkJCQkgIGludCBjb21tb25Cb3R0b200LCBpbnQgYm90dG9tQ291bnQ0LAorCQkJCQkJCQkJICBieXRlIGhpcmFnYW5hNCkKKwl7CisJCWlmIChpc0NvZGVQb2ludEhpcmFnYW5hKSB7IC8vIFRoaXMgd2FzIEhpcmFnYW5hLCBuZWVkIHRvIG5vdGUgaXQKKwkJCWlmIChtX3V0aWxDb3VudDRfID4gMCkgeyAvLyBDbG9zZSB0aGlzIHBhcnQKKyAgICAgICAgICAgIAl3aGlsZSAobV91dGlsQ291bnQ0XyA+IGJvdHRvbUNvdW50NCkgeworICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlczRfID0gYXBwZW5kKG1fdXRpbEJ5dGVzNF8sIG1fdXRpbEJ5dGVzQ291bnQ0XywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpKGNvbW1vbkJvdHRvbTQgCisgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSsgYm90dG9tQ291bnQ0KSk7CisgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQ0XyArKzsKKyAgICAgICAgICAgICAgICAgICAgbV91dGlsQ291bnQ0XyAtPSBib3R0b21Db3VudDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzNF8gPSBhcHBlbmQobV91dGlsQnl0ZXM0XywgbV91dGlsQnl0ZXNDb3VudDRfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpKGNvbW1vbkJvdHRvbTQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChtX3V0aWxDb3VudDRfIC0gMSkpKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50NF8gKys7CisgICAgICAgICAgICAgICAgbV91dGlsQ291bnQ0XyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3V0aWxCeXRlczRfID0gYXBwZW5kKG1fdXRpbEJ5dGVzNF8sIG1fdXRpbEJ5dGVzQ291bnQ0XywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpcmFnYW5hNCk7IC8vIEFkZCB0aGUgSGlyYWdhbmEKKyAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQ0XyArKzsKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSB7IC8vIFRoaXMgd2Fzbid0IEhpcmFnYW5hLCBzbyB3ZSBjYW4gY29udGludWUgYWRkaW5nIHN0dWZmCisgICAgICAgICAgICBtX3V0aWxDb3VudDRfICsrOworICAgICAgICB9CisJfQorCQorCS8qKgorCSAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGFyZ3VtZW50IHN0cmluZyBmb3IgYWxsIGNlcy4KKwkgKiBTcGxpdCB0aGUgY2VzIGludG8gdGhlaXIgcmVsZXZhbnQgcHJpbWFyaWVzLCBzZWNvbmRhcmllcyBldGMuCisJICogQHBhcmFtIHNvdXJjZSBub3JtYWxpemVkIHN0cmluZworCSAqIEBwYXJhbSBkb0ZyZW5jaCBmbGFnIGluZGljYXRvciBpZiBzcGVjaWFsIGhhbmRsaW5nIG9mIEZyZW5jaCBoYXMgdG8gYmUKKwkgKiAJCQkJCWRvbmUKKwkgKiBAcGFyYW0gaGlyYWdhbmE0IG9mZnNldCBmb3IgSGlyYWdhbmEgcXVhdGVybmFyeQorCSAqIEBwYXJhbSBjb21tb25Cb3R0b200IHNtYWxsZXN0IGNvbW1vbiBxdWF0ZXJuYXJ5IGJ5dGUKKwkgKiBAcGFyYW0gYm90dG9tQ291bnQ0IHNtYWxsZXN0IHF1YXRlcm5hcnkgYnl0ZQorCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCBnZXRTb3J0S2V5Qnl0ZXMoU3RyaW5nIHNvdXJjZSwgYm9vbGVhbiBkb0ZyZW5jaCwKKwkJCQkJCQkJCSAgIGJ5dGUgaGlyYWdhbmE0LCBpbnQgY29tbW9uQm90dG9tNCwgCisJCQkJCQkJCQkgICBpbnQgYm90dG9tQ291bnQ0KQorCQkJCQkJCQkJICAgCisJeworCQlpbnQgYmFja3VwRGVjb21wb3NpdGlvbiA9IGdldERlY29tcG9zaXRpb24oKTsKKwkJc2V0RGVjb21wb3NpdGlvbihOT19ERUNPTVBPU0lUSU9OKTsgLy8gaGF2ZSB0byByZXZlcnQgdG8gYmFja3VwIGxhdGVyCisgICAgCW1fc3JjVXRpbEl0ZXJfLnNldFRleHQoc291cmNlKTsKKyAgICAgICAgbV9zcmNVdGlsQ29sRUl0ZXJfLnNldFRleHQobV9zcmNVdGlsSXRlcl8pOworICAgIAltX3V0aWxGcmVuY2hTdGFydF8gPSAtMTsgCisgICAgICAgIG1fdXRpbEZyZW5jaEVuZF8gPSAtMTsKKyAgICAJCisgICAgCS8vIHNjcmlwdG9yZGVyIG5vdCBpbXBsZW1lbnRlZCB5ZXQgCisgICAgCS8vIGNvbnN0IHVpbnQ4X3QgKnNjcmlwdE9yZGVyID0gY29sbC0+c2NyaXB0T3JkZXI7CisKKwkJYm9vbGVhbiBkb1NoaWZ0ID0gZmFsc2U7CisgICAgCWJvb2xlYW4gbm90SXNDb250aW51YXRpb24gPSBmYWxzZTsKKworICAgIAlpbnQgbGVhZFByaW1hcnkgPSAwOyAvLyBpbnQgZm9yIGVhc2llciBjb21wYXJpc29uCisgICAgCWludCBjYXNlU2hpZnQgPSAwOworCSAgICAKKyAgICAJd2hpbGUgKHRydWUpIHsKKyAgICAgICAgCWludCBjZSA9IG1fc3JjVXRpbENvbEVJdGVyXy5uZXh0KCk7CisgICAgICAgICAgICBpZiAoY2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgCWJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworICAgICAgICAgICAgCWNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub3RJc0NvbnRpbnVhdGlvbiA9ICFpc0NvbnRpbnVhdGlvbihjZSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBpZiAobm90SXNDb250aW51YXRpb24pIHsKKyAgICAgICAgICAgIAkJaWYgKHNjcmlwdE9yZGVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAJCXByaW1hcnkxID0gc2NyaXB0T3JkZXJbcHJpbWFyeTFdOworICAgICAgICAgICAgICAJCX0KKyAgICAgICAgICAgIAl9Ki8KKyAgICAgICAgICAgIGJvb2xlYW4gaXNQcmltYXJ5Qnl0ZUlnbm9yYWJsZSA9IChjZSAmIENFX1BSSU1BUllfTUFTS18pID09IDA7CisgICAgICAgICAgICAvLyBhY3R1YWxseSB3ZSBjYW4ganVzdCBjaGVjayB0aGF0IHRoZSBmaXJzdCBieXRlIGlzIDAKKyAgICAgICAgICAgIC8vIGdlbmVyYXRpb24gc3R1ZmZzIHRoZSBvcmRlciBsZWZ0IGZpcnN0CisgICAgICAgICAgICBib29sZWFuIGlzU21hbGxlclRoYW5WYXJpYWJsZVRvcCA9IChjZSA+Pj4gQ0VfUFJJTUFSWV9TSElGVF8pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PSBtX3ZhcmlhYmxlVG9wVmFsdWVfOworICAgICAgICAgICAgZG9TaGlmdCA9IChtX2lzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkXyAKKyAgICAgICAgICAgIAkJCSYmICgobm90SXNDb250aW51YXRpb24gJiYgaXNTbWFsbGVyVGhhblZhcmlhYmxlVG9wIAorICAgIAkJCQkJCSYmICFpc1ByaW1hcnlCeXRlSWdub3JhYmxlKSAvLyBwcmltYXJ5IGJ5dGUgbm90IDAKKyAgICAJCQkJCXx8ICghbm90SXNDb250aW51YXRpb24gJiYgZG9TaGlmdCkpIAorICAgIAkJCQkJfHwgKGRvU2hpZnQgJiYgaXNQcmltYXJ5Qnl0ZUlnbm9yYWJsZSkpOworICAgICAgICAgICAgaWYgKGRvU2hpZnQgJiYgaXNQcmltYXJ5Qnl0ZUlnbm9yYWJsZSkgeworICAgIAkJCS8vIGFtZW5kbWVudCB0byB0aGUgVUNBIHNheXMgdGhhdCBwcmltYXJ5IGlnbm9yYWJsZXMgYW5kIG90aGVyIAorICAgIAkJCS8vIGlnbm9yYWJsZXMgc2hvdWxkIGJlIHJlbW92ZWQgaWYgZm9sbG93aW5nIGEgc2hpZnRlZCBjb2RlIAorICAgIAkJCS8vIHBvaW50CisgICAgICAgICAgICAgICAgLy8gaWYgd2Ugd2VyZSBzaGlmdGVkIGFuZCB3ZSBnb3QgYW4gaWdub3JhYmxlIGNvZGUgcG9pbnQKKyAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQganVzdCBjb21wbGV0ZWx5IGlnbm9yZSBpdAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKKyAgICAgICAgICAgIH0gCisJCQlsZWFkUHJpbWFyeSA9IGRvUHJpbWFyeUJ5dGVzKGNlLCBub3RJc0NvbnRpbnVhdGlvbiwgZG9TaGlmdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRQcmltYXJ5LCBjb21tb25Cb3R0b200LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tQ291bnQ0KTsKKyAgICAgICAgICAgIGlmIChkb1NoaWZ0KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisJCQlpZiAobV91dGlsQ29tcGFyZTJfKSB7CisgICAgICAgIAkJZG9TZWNvbmRhcnlCeXRlcyhjZSwgbm90SXNDb250aW51YXRpb24sCWRvRnJlbmNoKTsKKwkJCX0KKworCQkJaW50IHQgPSBjZSAmIExBU1RfQllURV9NQVNLXzsKKwkJCWlmICghbm90SXNDb250aW51YXRpb24pIHsKKyAgICAgICAgICAgICAgCXQgPSBjZSAmIENFX1JFTU9WRV9DT05USU5VQVRJT05fTUFTS187CisgICAgICAgICAgICB9CisgICAgICAgICAgICAJCisgICAgICAgICAgICBpZiAobV91dGlsQ29tcGFyZTBfKSB7CisgICAgICAgICAgICAgIAljYXNlU2hpZnQgPSBkb0Nhc2VCeXRlcyh0LCBub3RJc0NvbnRpbnVhdGlvbiwgY2FzZVNoaWZ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5vdElzQ29udGludWF0aW9uKSB7CisgICAgICAgICAgICAgICAgIHQgXj0gbV9jYXNlU3dpdGNoXzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdCAmPSBtX21hc2szXzsKKyAgICAgICAgICAgICAgCQorICAgICAgICAgICAgaWYgKG1fdXRpbENvbXBhcmUzXykgeworICAgICAgICAgICAgCWRvVGVydGlhcnlCeXRlcyh0LCBub3RJc0NvbnRpbnVhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV91dGlsQ29tcGFyZTRfICYmIG5vdElzQ29udGludWF0aW9uKSB7IC8vIGNvbXBhcmUgcXVhZAorICAgICAgICAgICAgICAgIGRvUXVhdGVybmFyeUJ5dGVzKG1fc3JjVXRpbENvbEVJdGVyXy5tX2lzQ29kZVBvaW50SGlyYWdhbmFfLCAKKyAgICAgICAgICAgICAgICAJCQkgCSAgY29tbW9uQm90dG9tNCwgYm90dG9tQ291bnQ0LCBoaXJhZ2FuYTQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNldERlY29tcG9zaXRpb24oYmFja3VwRGVjb21wb3NpdGlvbik7IC8vIHJldmVydHMgdG8gb3JpZ2luYWwJCisgICAgICAgIGlmIChtX3V0aWxGcmVuY2hTdGFydF8gIT0gLTEpIHsKKyAgICAgICAgCS8vIG9uZSBsYXN0IHJvdW5kIG9mIGNoZWNrcworICAgIAkJcmV2ZXJzZUJ1ZmZlcihtX3V0aWxCeXRlczJfKTsKKyAgCQl9CisJfQorCQorCS8qKgorCSAqIEZyb20gdGhlIGluZGl2aWR1YWwgc3RyZW5ndGggYnl0ZSByZXN1bHRzIHRoZSBmaW5hbCBjb21wYWN0IHNvcnRrZXkgCisJICogd2lsbCBiZSBjYWxjdWxhdGVkLgorCSAqIEBwYXJhbSBzb3VyY2UgdGV4dCBzdHJpbmcKKwkgKiBAcGFyYW0gZG9GcmVuY2ggZmxhZyBpbmRpY2F0aW5nIHRoYXQgc3BlY2lhbCBoYW5kbGluZyBvZiBGcmVuY2ggaGFzIHRvIAorCSAqIAkJCQkJYmUgZG9uZQorCSAqIEBwYXJhbSBjb21tb25Cb3R0b200IHNtYWxsZXN0IGNvbW1vbiBxdWF0ZXJuYXJ5IGJ5dGUKKwkgKiBAcGFyYW0gYm90dG9tQ291bnQ0IHNtYWxsZXN0IHF1YXRlcm5hcnkgYnl0ZQorCSAqIEByZXR1cm4gdGhlIGNvbXBhY3Qgc29ydGtleQorCSAqLworCXByaXZhdGUgZmluYWwgYnl0ZVtdIGdldFNvcnRLZXkoU3RyaW5nIHNvdXJjZSwgYm9vbGVhbiBkb0ZyZW5jaCwgCisJCQkJCQkJCQlpbnQgY29tbW9uQm90dG9tNCwgaW50IGJvdHRvbUNvdW50NCkKKwl7CisJCS8vIHdlIGhhdmUgZG9uZSBhbGwgdGhlIENFJ3MsIG5vdyBsZXQncyBwdXQgdGhlbSB0b2dldGhlciB0byBmb3JtIAorICAgICAgCS8vIGEga2V5IAorICAgICAgCWlmIChtX3V0aWxDb21wYXJlMl8pIHsKKyAgICAgICAgCWRvU2Vjb25kYXJ5KGRvRnJlbmNoKTsKKyAgICAgIAkJaWYgKG1fdXRpbENvbXBhcmUwXykgeworCQkJCWRvQ2FzZSgpOyAgICAgICAgCisgICAgICAJCX0KKyAgICAgIAkJaWYgKG1fdXRpbENvbXBhcmUzXykgeworICAgICAgCQkJZG9UZXJ0aWFyeSgpOworICAgICAgCQkJaWYgKG1fdXRpbENvbXBhcmU0XykgeworICAgICAgCQkJCWRvUXVhdGVybmFyeShjb21tb25Cb3R0b200LCBib3R0b21Db3VudDQpOworICAgICAgICAJCQlpZiAobV91dGlsQ29tcGFyZTVfKSB7CisgICAgICAgICAgCQkJCWRvSWRlbnRpY2FsKHNvdXJjZSk7CisgICAgICAgIAkJCX0KKworICAgICAgCQkJfQorICAgICAgCQl9CisgICAgICAJfQorICAgICAgCW1fdXRpbEJ5dGVzMV8gPSBhcHBlbmQobV91dGlsQnl0ZXMxXywgbV91dGlsQnl0ZXNDb3VudDFfLCAoYnl0ZSkwKTsKKyAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworICAgICAgICBieXRlIHJlc3VsdFtdID0gKGJ5dGUgW10pbV91dGlsQnl0ZXMxXy5jbG9uZSgpOworICAgIAlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwkvKioKKwkgKiBQYWNrcyB0aGUgRnJlbmNoIGJ5dGVzCisJICogQHBhcmFtIGNvdW50IGFycmF5IG9mIGNvbXByZXNzaW9uIGNvdW50cworCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCBkb0ZyZW5jaCgpIAorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtX3V0aWxCeXRlc0NvdW50Ml87IGkgKyspIHsKKwkJCWJ5dGUgcyA9IG1fdXRpbEJ5dGVzMl9bbV91dGlsQnl0ZXNDb3VudDJfIC0gaSAtIDFdOworCQkgICAgLy8gVGhpcyBpcyBjb21wcmVzc2lvbiBjb2RlLgorCQkgICAgaWYgKHMgPT0gQ09NTU9OXzJfKSB7CisJCSAgICAgICAgKysgbV91dGlsQ291bnQyXzsKKwkJICAgIH0gCisJCSAgICBlbHNlIHsKKwkJICAgICAgCWlmIChtX3V0aWxDb3VudDJfID4gMCkgeworCQkgICAgICAJCS8vIGdldHRpbmcgdGhlIHVuc2lnbmVkIHZhbHVlCisJCSAgICAgICAgCWlmICgocyAmIExBU1RfQllURV9NQVNLXykgPiBDT01NT05fMl8pIHsgCisJCSAgICAgICAgCQkvLyBub3QgbmVjZXNzYXJ5IGZvciA0dGggbGV2ZWwuCisJCSAgICAgICAgICAJCXdoaWxlIChtX3V0aWxDb3VudDJfID4gVE9QX0NPVU5UXzJfKSB7CisJCSAgICAgICAgICAgIAkJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfLCAKKwkJICAgICAgICAgICAgCQkJCQkoYnl0ZSkoQ09NTU9OX1RPUF8yXyAtIFRPUF9DT1VOVF8yXykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyArKzsKKwkJICAgICAgICAgICAgCQltX3V0aWxDb3VudDJfIC09IFRPUF9DT1VOVF8yXzsKKwkJICAgICAgICAgIAkJfQorCQkgICAgICAgICAgCQltX3V0aWxCeXRlczFfID0gYXBwZW5kKG1fdXRpbEJ5dGVzMV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKShDT01NT05fVE9QXzJfIAorCQkgICAgICAgICAgCQkJCQkJCQkJICAtIChtX3V0aWxDb3VudDJfIC0gMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyArKzsKKwkJICAgICAgICAJfSAKKwkJICAgICAgICAJZWxzZSB7CisJCSAgICAgICAgICAJCXdoaWxlIChtX3V0aWxDb3VudDJfID4gQk9UVE9NX0NPVU5UXzJfKSB7CisJCSAgICAgICAgICAgIAkJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfLCAKKwkJICAgICAgICAgICAgCQkJKGJ5dGUpKENPTU1PTl9CT1RUT01fMl8gKyBCT1RUT01fQ09VTlRfMl8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8gKys7CisJCSAgICAgICAgICAgIAkJbV91dGlsQ291bnQyXyAtPSBCT1RUT01fQ09VTlRfMl87CisJCSAgICAgICAgICAJCX0KKwkJICAgICAgICAgIAkJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8sICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpKENPTU1PTl9CT1RUT01fMl8gCisJCSAgICAgICAgICAJCQkJCQkJCQkgICsgKG1fdXRpbENvdW50Ml8gLSAxKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworCQkgICAgICAgIAl9CisJCSAgICAgICAgCW1fdXRpbENvdW50Ml8gPSAwOworCQkgICAgICAJfQorCQkgICAgICAJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLCBtX3V0aWxCeXRlc0NvdW50MV8sIHMpOworICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyArKzsKKwkJICAgIH0KKwkJfQorCQlpZiAobV91dGlsQ291bnQyXyA+IDApIHsKKwkJICAgIHdoaWxlIChtX3V0aWxDb3VudDJfID4gQk9UVE9NX0NPVU5UXzJfKSB7CisJCSAgICAgIAltX3V0aWxCeXRlczFfID0gYXBwZW5kKG1fdXRpbEJ5dGVzMV8sIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSkoQ09NTU9OX0JPVFRPTV8yXyAKKwkJICAgICAgCQkJCQkJCQkJCSsgQk9UVE9NX0NPVU5UXzJfKSk7CisgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworCQkgICAgICAJbV91dGlsQ291bnQyXyAtPSBCT1RUT01fQ09VTlRfMl87CisJCSAgICB9CisJCSAgICBtX3V0aWxCeXRlczFfID0gYXBwZW5kKG1fdXRpbEJ5dGVzMV8sIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKShDT01NT05fQk9UVE9NXzJfIAorCQkgICAgCQkJCQkJCQkJCSsgKG1fdXRpbENvdW50Ml8gLSAxKSkpOworICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworCQl9CisJfQorCisJLyoqCisJICogQ29tcGFjdHMgdGhlIHNlY29uZGFyeSBieXRlcyBhbmQgc3RvcmVzIHRoZW0gaW50byB0aGUgcHJpbWFyeSBhcnJheQorCSAqIEBwYXJhbSBkb0ZyZW5jaCBmbGFnIGluZGljYXRvciB0aGF0IEZyZW5jaCBoYXMgdG8gYmUgaGFuZGxlZCBzcGVjaWFsbHkKKwkgKi8KKwlwcml2YXRlIGZpbmFsIHZvaWQgZG9TZWNvbmRhcnkoYm9vbGVhbiBkb0ZyZW5jaCkKKwl7CisJCWlmIChtX3V0aWxDb3VudDJfID4gMCkgeworICAgICAgICAgIAl3aGlsZSAobV91dGlsQ291bnQyXyA+IEJPVFRPTV9DT1VOVF8yXykgeworICAgICAgICAgICAgCW1fdXRpbEJ5dGVzMl8gPSBhcHBlbmQobV91dGlsQnl0ZXMyXywgbV91dGlsQnl0ZXNDb3VudDJfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpKENPTU1PTl9CT1RUT01fMl8gCisgICAgICAgICAgICAJCQkJCSAJCQkJCQkrIEJPVFRPTV9DT1VOVF8yXykpOworICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQyXyArKzsKKyAgICAgICAgICAgIAltX3V0aWxDb3VudDJfIC09IEJPVFRPTV9DT1VOVF8yXzsKKyAgICAgICAgICAJfQorICAgICAgICAgIAltX3V0aWxCeXRlczJfID0gYXBwZW5kKG1fdXRpbEJ5dGVzMl8sIG1fdXRpbEJ5dGVzQ291bnQyXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpKENPTU1PTl9CT1RUT01fMl8gKyAKKyAgICAgICAgICAJCQkJCQkJCQkJCShtX3V0aWxDb3VudDJfIC0gMSkpKTsKKyAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQyXyArKzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLCBtX3V0aWxCeXRlc0NvdW50MV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPUlRfTEVWRUxfVEVSTUlOQVRPUl8pOworICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8gKys7CisgICAgICAgIAorICAgICAgICBpZiAoZG9GcmVuY2gpIHsgLy8gZG8gdGhlIHJldmVyc2UgY29weQorICAgICAgICAgICAJZG9GcmVuY2goKTsKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSB7CisgICAgICAgIAlpZiAobV91dGlsQnl0ZXMxXy5sZW5ndGggPD0gbV91dGlsQnl0ZXNDb3VudDFfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtX3V0aWxCeXRlc0NvdW50Ml8pIHsKKyAgICAgICAgCQltX3V0aWxCeXRlczFfID0gaW5jcmVhc2UobV91dGlsQnl0ZXMxXywgbV91dGlsQnl0ZXNDb3VudDFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDJfKTsKKyAgICAgICAgCX0KKyAgICAgICAgICAgCVN5c3RlbS5hcnJheWNvcHkobV91dGlsQnl0ZXMyXywgMCwgbV91dGlsQnl0ZXMxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXywgbV91dGlsQnl0ZXNDb3VudDJfKTsKKyAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyArPSBtX3V0aWxCeXRlc0NvdW50Ml87CisgICAgICAgIH0gCisJfQorCQorCS8qKgorCSAqIEluY3JlYXNlIGJ1ZmZlciBzaXplCisJICogQHBhcmFtIGFycmF5IGFycmF5IG9mIGJ5dGVzCisJICogQHBhcmFtIHNpemUgb2YgdGhlIGJ5dGUgYXJyYXkKKwkgKiBAcGFyYW0gaW5jcmVtZW50c2l6ZSBzaXplIHRvIGluY3JlYXNlCisJICogQHJldHVybiB0aGUgbmV3IGJ1ZmZlcgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBpbmNyZWFzZShieXRlIGJ1ZmZlcltdLCBpbnQgc2l6ZSwgCisJCQkJCQkJCQkJIGludCBpbmNyZW1lbnRzaXplKQorCXsKKwkJYnl0ZSByZXN1bHRbXSA9IG5ldyBieXRlW2J1ZmZlci5sZW5ndGggKyBpbmNyZW1lbnRzaXplXTsKKwkJU3lzdGVtLmFycmF5Y29weShidWZmZXIsIDAsIHJlc3VsdCwgMCwgc2l6ZSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCS8qKgorCSAqIEluY3JlYXNlIGJ1ZmZlciBzaXplCisJICogQHBhcmFtIGFycmF5IGFycmF5IG9mIGJ5dGVzCisJICogQHBhcmFtIHNpemUgb2YgdGhlIGJ5dGUgYXJyYXkKKwkgKiBAcGFyYW0gaW5jcmVtZW50c2l6ZSBzaXplIHRvIGluY3JlYXNlCisJICogQHJldHVybiB0aGUgbmV3IGJ1ZmZlcgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIGluY3JlYXNlKGludCBidWZmZXJbXSwgaW50IHNpemUsIAorCQkJCQkJCQkJCWludCBpbmNyZW1lbnRzaXplKQorCXsKKwkJaW50IHJlc3VsdFtdID0gbmV3IGludFtidWZmZXIubGVuZ3RoICsgaW5jcmVtZW50c2l6ZV07CisJCVN5c3RlbS5hcnJheWNvcHkoYnVmZmVyLCAwLCByZXN1bHQsIDAsIHNpemUpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwkvKioKKwkgKiBDb21wYWN0cyB0aGUgY2FzZSBieXRlcyBhbmQgc3RvcmVzIHRoZW0gaW50byB0aGUgcHJpbWFyeSBhcnJheQorCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCBkb0Nhc2UoKQorCXsKKwkJbV91dGlsQnl0ZXMxXyA9IGFwcGVuZChtX3V0aWxCeXRlczFfLCBtX3V0aWxCeXRlc0NvdW50MV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPUlRfTEVWRUxfVEVSTUlOQVRPUl8pOworICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8gKys7CisJCWlmIChtX3V0aWxCeXRlczFfLmxlbmd0aCA8PSBtX3V0aWxCeXRlc0NvdW50MV8gKyBtX3V0aWxCeXRlc0NvdW50MF8pIHsKKwkJCW1fdXRpbEJ5dGVzMV8gPSBpbmNyZWFzZShtX3V0aWxCeXRlczFfLCBtX3V0aWxCeXRlc0NvdW50MV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQwXyk7CisJCX0KKwkJU3lzdGVtLmFycmF5Y29weShtX3V0aWxCeXRlczBfLCAwLCBtX3V0aWxCeXRlczFfLCBtX3V0aWxCeXRlc0NvdW50MV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQwXyk7CisgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyArPSBtX3V0aWxCeXRlc0NvdW50MF87CisJfQorCQorCS8qKgorCSAqIENvbXBhY3RzIHRoZSB0ZXJ0aWFyeSBieXRlcyBhbmQgc3RvcmVzIHRoZW0gaW50byB0aGUgcHJpbWFyeSBhcnJheQorCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCBkb1RlcnRpYXJ5KCkKKwl7CisJCWlmIChtX3V0aWxDb3VudDNfID4gMCkgeworICAgICAgICAgIAlpZiAobV9jb21tb24zXyAhPSBDT01NT05fQk9UVE9NXzNfKSB7CisgICAgICAgICAgCQl3aGlsZSAobV91dGlsQ291bnQzXyA+PSBtX3RvcENvdW50M18pIHsKKyAgICAgICAgICAgICAgCQltX3V0aWxCeXRlczNfID0gYXBwZW5kKG1fdXRpbEJ5dGVzM18sIG1fdXRpbEJ5dGVzQ291bnQzXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSkobV90b3AzXyAtIG1fdG9wQ291bnQzXykpOworICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18gKys7CisgICAgICAgICAgICAgIAkJbV91dGlsQ291bnQzXyAtPSBtX3RvcENvdW50M187CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgCW1fdXRpbEJ5dGVzM18gPSBhcHBlbmQobV91dGlsQnl0ZXMzXywgbV91dGlsQnl0ZXNDb3VudDNfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKShtX3RvcDNfIC0gbV91dGlsQ291bnQzXykpOworICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQzXyArKzsKKyAgICAgICAgICAJfSAKKyAgICAgICAgICAJZWxzZSB7CisgICAgICAgICAgCQl3aGlsZSAobV91dGlsQ291bnQzXyA+IG1fYm90dG9tQ291bnQzXykgeworICAgICAgICAgICAgICAJCW1fdXRpbEJ5dGVzM18gPSBhcHBlbmQobV91dGlsQnl0ZXMzXywgbV91dGlsQnl0ZXNDb3VudDNfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZSkobV9ib3R0b20zXyAKKyAgICAgICAgICAgICAgCQkJCQkJCQkJCQkrIG1fYm90dG9tQ291bnQzXykpOworICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18gKys7CisgICAgICAgICAgICAgIAkJbV91dGlsQ291bnQzXyAtPSBtX2JvdHRvbUNvdW50M187CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgCW1fdXRpbEJ5dGVzM18gPSBhcHBlbmQobV91dGlsQnl0ZXMzXywgbV91dGlsQnl0ZXNDb3VudDNfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKShtX2JvdHRvbTNfIAorICAgICAgICAgICAgCQkJCQkJCQkgICsgKG1fdXRpbENvdW50M18gLSAxKSkpOworICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQzXyArKzsKKyAgICAgICAgICAJfQorICAgICAgICB9CisgICAgICAgIG1fdXRpbEJ5dGVzMV8gPSBhcHBlbmQobV91dGlsQnl0ZXMxXywgbV91dGlsQnl0ZXNDb3VudDFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1JUX0xFVkVMX1RFUk1JTkFUT1JfKTsKKyAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworICAgICAgICBpZiAobV91dGlsQnl0ZXMxXy5sZW5ndGggPD0gbV91dGlsQnl0ZXNDb3VudDFfICsgbV91dGlsQnl0ZXNDb3VudDNfKSB7CisgICAgICAgIAltX3V0aWxCeXRlczFfID0gaW5jcmVhc2UobV91dGlsQnl0ZXMxXywgbV91dGlsQnl0ZXNDb3VudDFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18pOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobV91dGlsQnl0ZXMzXywgMCwgbV91dGlsQnl0ZXMxXywgbV91dGlsQnl0ZXNDb3VudDFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50M18pOworICAgICAgICBtX3V0aWxCeXRlc0NvdW50MV8gKz0gbV91dGlsQnl0ZXNDb3VudDNfOworCX0KKwkKKwkvKioKKwkgKiBDb21wYWN0cyB0aGUgcXVhdGVybmFyeSBieXRlcyBhbmQgc3RvcmVzIHRoZW0gaW50byB0aGUgcHJpbWFyeSBhcnJheQorCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCBkb1F1YXRlcm5hcnkoaW50IGNvbW1vbmJvdHRvbTQsIGludCBib3R0b21jb3VudDQpCisJeworCQlpZiAobV91dGlsQ291bnQ0XyA+IDApIHsKKyAgICAgICAgICAgIHdoaWxlIChtX3V0aWxDb3VudDRfID4gYm90dG9tY291bnQ0KSB7CisgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXM0XyA9IGFwcGVuZChtX3V0aWxCeXRlczRfLCBtX3V0aWxCeXRlc0NvdW50NF8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGUpKGNvbW1vbmJvdHRvbTQgKyBib3R0b21jb3VudDQpKTsKKyAgICAgICAgICAgICAgICBtX3V0aWxCeXRlc0NvdW50NF8gKys7CisgICAgICAgICAgICAgICAgbV91dGlsQ291bnQ0XyAtPSBib3R0b21jb3VudDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3V0aWxCeXRlczRfID0gYXBwZW5kKG1fdXRpbEJ5dGVzNF8sIG1fdXRpbEJ5dGVzQ291bnQ0XywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlKShjb21tb25ib3R0b200CisgICAgICAgICAgICAJCQkJCQkJCQkrIChtX3V0aWxDb3VudDRfIC0gMSkpKTsKKyAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQ0XyArKzsKKyAgICAgICAgfQorICAgICAgICBtX3V0aWxCeXRlczFfID0gYXBwZW5kKG1fdXRpbEJ5dGVzMV8sIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09SVF9MRVZFTF9URVJNSU5BVE9SXyk7CisgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyArKzsKKyAgICAgICAgaWYgKG1fdXRpbEJ5dGVzMV8ubGVuZ3RoIDw9IG1fdXRpbEJ5dGVzQ291bnQxXyArIG1fdXRpbEJ5dGVzQ291bnQ0XykgeworICAgICAgICAJbV91dGlsQnl0ZXMxXyA9IGluY3JlYXNlKG1fdXRpbEJ5dGVzMV8sIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDRfKTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1fdXRpbEJ5dGVzNF8sIDAsIG1fdXRpbEJ5dGVzMV8sIG1fdXRpbEJ5dGVzQ291bnQxXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgbV91dGlsQnl0ZXNDb3VudDRfKTsKKyAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICs9IG1fdXRpbEJ5dGVzQ291bnQ0XzsKKwl9CisJCisJLyoqCisJICogRGVhbHMgd2l0aCB0aGUgaWRlbnRpY2FsIHNvcnQuCisJICogQXBwZW5kcyB0aGUgQk9DU1UgdmVyc2lvbiBvZiB0aGUgc291cmNlIHN0cmluZyB0byB0aGUgZW5kcyBvZiB0aGUKKwkgKiBieXRlIGJ1ZmZlci4KKwkgKiBAcGFyYW0gc291cmNlIHRleHQgc3RyaW5nCisJICovCisJcHJpdmF0ZSBmaW5hbCB2b2lkIGRvSWRlbnRpY2FsKFN0cmluZyBzb3VyY2UpCisJeworCQlpbnQgaXNpemUgPSBCT0NVLmdldENvbXByZXNzaW9uTGVuZ3RoKHNvdXJjZSk7CisJCW1fdXRpbEJ5dGVzMV8gPSBhcHBlbmQobV91dGlsQnl0ZXMxXywgbV91dGlsQnl0ZXNDb3VudDFfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1JUX0xFVkVMX1RFUk1JTkFUT1JfKTsKKyAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfICsrOworCQlpZiAobV91dGlsQnl0ZXMxXy5sZW5ndGggPD0gbV91dGlsQnl0ZXNDb3VudDFfICsgaXNpemUpIHsKKyAgICAgICAgCW1fdXRpbEJ5dGVzMV8gPSBpbmNyZWFzZShtX3V0aWxCeXRlczFfLCBtX3V0aWxCeXRlc0NvdW50MV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKyBpc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV91dGlsQnl0ZXNDb3VudDFfID0gQk9DVS5jb21wcmVzcyhzb3VyY2UsIG1fdXRpbEJ5dGVzMV8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXRpbEJ5dGVzQ291bnQxXyk7IAorCX0KKwkKKwkvKioKKwkgKiBHZXRzIHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IHVubWF0Y2hlZCBjaGFyYWN0ZXJzIGluIHNvdXJjZSBhbmQgdGFyZ2V0LgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgYSBjb250cmFjdGlvbiBvciBhIAorCSAqIGNvbWJpbmluZyBzZXF1ZW5jZSwgaWYgdGhlIGZpcnN0IGRpZmZlcmVuY2UgaXMgaW4gdGhlIG1pZGRsZSBvZiBzdWNoIGEgCisJICogc2VxdWVuY2UuCisJICogQHBhcmFtIHNvdXJjZSBzdHJpbmcKKwkgKiBAcGFyYW0gdGFyZ2V0IHN0cmluZworCSAqIEByZXR1cm4gb2Zmc2V0IG9mIHRoZSBmaXJzdCB1bm1hdGNoZWQgY2hhcmFjdGVycyBpbiBzb3VyY2UgYW5kIHRhcmdldC4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBnZXRGaXJzdFVubWF0Y2hlZE9mZnNldChTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0KQorCXsKKwkJaW50IHJlc3VsdCA9IDA7CisJCWludCBzbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOworCQlpbnQgdGxlbmd0aCA9IHRhcmdldC5sZW5ndGgoKTsKKwkJaW50IG1pbmxlbmd0aCA9IHNsZW5ndGg7CisJCWlmIChtaW5sZW5ndGggPiB0bGVuZ3RoKSB7CisJCQltaW5sZW5ndGggPSB0bGVuZ3RoOworCQl9CisJCXdoaWxlIChyZXN1bHQgPCBtaW5sZW5ndGggCisJCQkJJiYgc291cmNlLmNoYXJBdChyZXN1bHQpID09IHRhcmdldC5jaGFyQXQocmVzdWx0KSkgeworCQkJcmVzdWx0ICsrOworCSAgICB9CisJICAgIGlmIChyZXN1bHQgPiAwKSB7CisJICAgICAgICAvLyBUaGVyZSBpcyBhbiBpZGVudGljYWwgcG9ydGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0d28gCisJICAgICAgICAvLyBzdHJpbmdzLiBJZiB0aGUgaWRlbnRpY2FsIHBvcnRpb24gZW5kcyB3aXRoaW4gYSBjb250cmFjdGlvbiBvciBhIAorCSAgICAgICAgLy8gY29tYmluaW5nIGNoYXJhY3RlciBzZXF1ZW5jZSwgYmFjayB1cCB0byB0aGUgc3RhcnQgb2YgdGhhdCAKKwkgICAgICAgIC8vIHNlcXVlbmNlLgorCSAgICAgICAgY2hhciBzY2hhciA9IDA7CisJICAgICAgICBjaGFyIHRjaGFyID0gMDsKKwkgICAgICAgIGlmIChyZXN1bHQgPCBtaW5sZW5ndGgpIHsgICAgICAgICAgICAgIAorCSAgICAgICAgCXNjaGFyID0gc291cmNlLmNoYXJBdChyZXN1bHQpOyAvLyBmaXJzdCBkaWZmZXJpbmcgY2hhcnMgICAKKwkgICAgICAgIAl0Y2hhciA9IHRhcmdldC5jaGFyQXQocmVzdWx0KTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNjaGFyID0gc291cmNlLmNoYXJBdChtaW5sZW5ndGggLSAxKTsgCisgICAgICAgICAgICAgICAgaWYgKGlzVW5zYWZlKHNjaGFyKSkgeworICAgICAgICAgICAgICAgICAgICB0Y2hhciA9IHNjaGFyOworICAgICAgICAgICAgICAgIH0KKyAgICAJICAgICAgICBlbHNlIGlmIChzbGVuZ3RoID09IHRsZW5ndGgpIHsKKyAgICAJICAgICAgICAJCXJldHVybiByZXN1bHQ7CisgICAgCSAgICAgICAgfQorICAgIAkgICAgICAgIGVsc2UgaWYgKHNsZW5ndGggPCB0bGVuZ3RoKSB7CisgICAgCSAgICAgICAgCXRjaGFyID0gdGFyZ2V0LmNoYXJBdChyZXN1bHQpOworICAgIAkgICAgICAgIH0KKyAgICAJICAgICAgICBlbHNlIHsKKyAgICAJICAgICAgICAJc2NoYXIgPSBzb3VyY2UuY2hhckF0KHJlc3VsdCk7CisgICAgCSAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaWYgKGlzVW5zYWZlKHNjaGFyKSB8fCBpc1Vuc2FmZSh0Y2hhcikpCisJICAgICAgICB7CisJICAgICAgICAgICAgLy8gV2UgYXJlIHN0b3BwZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbnRyYWN0aW9uIG9yIGNvbWJpbmluZworCSAgICAgICAgICAgIC8vIHNlcXVlbmNlLgorCSAgICAgICAgICAgIC8vIExvb2sgYmFja3dhcmRzIGZvciB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIGZvciB0aGUgc3RhcnQgb2YgCisJICAgICAgICAgICAgLy8gdGhlIHNlcXVlbmNlCisJICAgICAgICAgICAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgd2hpY2ggc3RyaW5nIHdlIHNjYW4sIHNpbmNlIHRoZXkgYXJlIHRoZSAKKwkgICAgICAgICAgICAvLyBzYW1lIGluIHRoaXMgcmVnaW9uLgorCSAgICAgICAgICAgIGRvIHsKKwkgICAgICAgICAgICAgICAgcmVzdWx0IC0tOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB3aGlsZSAocmVzdWx0ID4gMCAmJiBpc1Vuc2FmZShzb3VyY2UuY2hhckF0KHJlc3VsdCkpKTsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gcmVzdWx0OworCX0KKwkKKwkvKioKKwkgKiBBcHBlbmRpbmcgYW4gYnl0ZSB0byBhbiBhcnJheSBvZiBieXRlcyBhbmQgaW5jcmVhc2VzIGl0IGlmIHdlIHJ1biBvdXQgb2YgCisJICogc3BhY2UKKwkgKiBAcGFyYW0gYXJyYXkgb2YgYnl0ZSBhcnJheXMKKwkgKiBAcGFyYW0gYXBwZW5kaW5kZXggaW5kZXggaW4gdGhlIGJ5dGUgYXJyYXkgdG8gYXBwZW5kCisJICogQHBhcmFtIHZhbHVlIHRvIGFwcGVuZAorICAgICAqIEByZXR1cm4gYXJyYXkgaWYgYXJyYXkgc2l6ZSBjYW4gYWNjb21vZGF0ZSB0aGUgbmV3IHZhbHVlLCBvdGhlcndpc2UKKyAgICAgKiAgICAgICAgIGEgYmlnZ2VyIGFycmF5IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gYXBwZW5kKGJ5dGUgYXJyYXlbXSwgaW50IGFwcGVuZGluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgdmFsdWUpCisJeworCQlpZiAoYXBwZW5kaW5kZXggKyAxID49IGFycmF5Lmxlbmd0aCkgeworCQkJYXJyYXkgPSBpbmNyZWFzZShhcnJheSwJYXBwZW5kaW5kZXgsIFNPUlRfQlVGRkVSX0lOSVRfU0laRV8pOworCQl9CQkJCisJCWFycmF5W2FwcGVuZGluZGV4XSA9IHZhbHVlOworICAgICAgICByZXR1cm4gYXJyYXk7CisJfQorCQorCS8qKiAKKwkgKiBUaGlzIGlzIGEgdHJpY2sgc3RyaW5nIGNvbXBhcmUgZnVuY3Rpb24gdGhhdCBnb2VzIGluIGFuZCB1c2VzIHNvcnRrZXlzIAorCSAqIHRvIGNvbXBhcmUuIEl0IGlzIHVzZWQgd2hlbiBjb21wYXJlIGdldHMgaW4gdHJvdWJsZSBhbmQgbmVlZHMgdG8gYmFpbCAKKwkgKiBvdXQuCisJICogQHBhcmFtIHNvdXJjZSB0ZXh0IHN0cmluZworCSAqIEBwYXJhbSB0YXJnZXQgdGV4dCBzdHJpbmcKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBjb21wYXJlQnlTb3J0S2V5cyhTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0KQorCQkJCQkJCQkJCQkJCQkKKwl7CisJICAgIENvbGxhdGlvbktleSBzb3VyY2VrZXkgPSBnZXRDb2xsYXRpb25LZXkoc291cmNlKTsKKwkgICAgQ29sbGF0aW9uS2V5IHRhcmdldGtleSA9IGdldENvbGxhdGlvbktleSh0YXJnZXQpOwkKKwkgICAgcmV0dXJuIHNvdXJjZWtleS5jb21wYXJlVG8odGFyZ2V0a2V5KTsKKwl9CisJCisJLyoqCisJICogUGVyZm9ybXMgdGhlIHByaW1hcnkgY29tcGFyaXNvbnMsIGFuZCBmaWxscyB1cCB0aGUgQ0UgYnVmZmVyIGF0IHRoZQorCSAqIHNhbWUgdGltZS4gCisJICogVGhlIHJldHVybiB2YWx1ZSB0b2dnbGVzIGJldHdlZW4gdGhlIGNvbXBhcmlzb24gcmVzdWx0IGFuZCB0aGUgaGlyYWdhbmEKKwkgKiByZXN1bHQuIElmIGVpdGhlciB0aGUgc291cmNlIGlzIGdyZWF0ZXIgdGhhbiB0YXJnZXQgb3IgdmljZSB2ZXJzYSwgdGhlIAorCSAqIHJldHVybiByZXN1bHQgaXMgdGhlIGNvbXBhcmlzb24gcmVzdWx0LCBpZSAxIG9yIC0xLCBmdXJ0aGVybW9yZSB0aGUKKwkgKiBjZWJ1ZmZlcnMgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhhdCBoYXBwZW5zLiBJZiB0aGUgcHJpbWFyeSBjb21wYXJpc29ucworCSAqIGFyZSBlcXVhbCwgd2UnbGwgaGF2ZSB0byBjb250aW51ZSB3aXRoIHNlY29uZGFyeSBjb21wYXJpc29uLiBJbiB0aGlzIGNhc2UKKwkgKiB0aGUgY2VidWZmZXIgd2lsbCBub3QgYmUgY2xlYXJlZCBhbmQgdGhlIHJldHVybiByZXN1bHQgd2lsbCBiZSB0aGUgCisJICogaGlyYWdhbmEgcmVzdWx0LgorCSAqIEBwYXJhbSBkb0hpcmFnYW5hNCBmbGFnIGluZGljYXRvciB0aGF0IEhpcmFnYW5hIFF1YXRlcm5hcnkgaGFzIHRvIGJlIAorCSAqIAkJCQkJb2JzZXJ2ZWQKKwkgKiBAcGFyYW0gbG93ZXN0cHZhbHVlIHRoZSBsb3dlc3QgcHJpbWFyeSB2YWx1ZSB0aGF0IHdpbGwgbm90IGJlIGlnbm9yZWQgaWYgCisJICogCQkJCQkJYWx0ZXJuYXRlIGhhbmRsaW5nIGlzIHNoaWZ0ZWQKKwkgKiBAcGFyYW0gc291cmNlIHRleHQgc3RyaW5nCisJICogQHBhcmFtIHRhcmdldCB0ZXh0IHN0cmluZworCSAqIEBwYXJhbSB0ZXh0b2Zmc2V0IG9mZnNldCBpbiB0ZXh0IHRvIHN0YXJ0IHRoZSBjb21wYXJpc29uCisJICogQHJldHVybiBjb21wYXJpb24gcmVzdWx0IGlmIGEgcHJpbWFyeSBkaWZmZXJlbmNlIGlzIGZvdW5kLCBvdGhlcndpc2UKKwkgKiAJCQkJCQloaXJhZ2FuYSByZXN1bHQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBkb1ByaW1hcnlDb21wYXJlKGJvb2xlYW4gZG9IaXJhZ2FuYTQsIGludCBsb3dlc3RwdmFsdWUsCisJCQkJCQkJCQkJU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgCisJCQkJCQkJCQkJaW50IHRleHRvZmZzZXQpCisJCQkJCQkJCQkgICAJCisJeworCQkvLyBQcmVwYXJpbmcgdGhlIGNvbnRleHQgb2JqZWN0cyBmb3IgaXRlcmF0aW5nIG92ZXIgc3RyaW5ncworICAgICAgICBtX3NyY1V0aWxJdGVyXy5zZXRUZXh0KHNvdXJjZSk7CisgICAgICAgIG1fc3JjVXRpbENvbEVJdGVyXy5zZXRUZXh0KG1fc3JjVXRpbEl0ZXJfLCB0ZXh0b2Zmc2V0KTsKKyAgICAgICAgbV90Z3RVdGlsSXRlcl8uc2V0VGV4dCh0YXJnZXQpOworICAgICAgICBtX3RndFV0aWxDb2xFSXRlcl8uc2V0VGV4dChtX3RndFV0aWxJdGVyXywgdGV4dG9mZnNldCk7CisJCQorCQkvLyBOb24gc2hpZnRlZCBwcmltYXJ5IHByb2Nlc3NpbmcgaXMgcXVpdGUgc2ltcGxlCisJICAgIGlmICghbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8pIHsKKwkgICAgCWludCBoaXJhZ2FuYXJlc3VsdCA9IDA7ICAgIAkJCQkJCQkJCQkJCQkJCisJICAgICAgCXdoaWxlICh0cnVlKSB7CisJICAgICAgCQlpbnQgc29yZGVyID0gMDsKKwkJCQkvLyBXZSBmZXRjaCBDRXMgdW50aWwgd2UgaGl0IGEgbm9uIGlnbm9yYWJsZSBwcmltYXJ5IG9yIGVuZC4KKwkgICAgICAgIAlkbyB7CisJICAgICAgICAgIAkJc29yZGVyID0gbV9zcmNVdGlsQ29sRUl0ZXJfLm5leHQoKTsKKwkgICAgICAgICAgCQltX3NyY1V0aWxDRUJ1ZmZlcl8gPSBhcHBlbmQobV9zcmNVdGlsQ0VCdWZmZXJfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3JjVXRpbENFQnVmZmVyU2l6ZV8sIHNvcmRlcik7CisgICAgICAgICAgICAgICAgICAgIG1fc3JjVXRpbENFQnVmZmVyU2l6ZV8gKys7CisJICAgICAgICAgIAkJc29yZGVyICY9IENFX1BSSU1BUllfTUFTS187CisJICAgICAgICAJfSB3aGlsZSAoc29yZGVyID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpOworCQorCQkJCWludCB0b3JkZXIgPSAwOworCSAgICAgICAgCWRvIHsKKwkgICAgICAgICAgCQl0b3JkZXIgPSBtX3RndFV0aWxDb2xFSXRlcl8ubmV4dCgpOworCSAgICAgICAgICAJCW1fdGd0VXRpbENFQnVmZmVyXyA9IGFwcGVuZChtX3RndFV0aWxDRUJ1ZmZlcl8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90Z3RVdGlsQ0VCdWZmZXJTaXplXywgdG9yZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV90Z3RVdGlsQ0VCdWZmZXJTaXplXyArKzsKKwkgICAgICAgICAgCQl0b3JkZXIgJj0gQ0VfUFJJTUFSWV9NQVNLXzsKKwkgICAgICAgIAl9IHdoaWxlICh0b3JkZXIgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSk7CisJCisJICAgICAgICAJLy8gaWYgYm90aCBwcmltYXJpZXMgYXJlIHRoZSBzYW1lCisJICAgICAgICAJaWYgKHNvcmRlciA9PSB0b3JkZXIpIHsKKwkgICAgICAgICAgICAJLy8gYW5kIHRoZXJlIGFyZSBubyBtb3JlIENFcywgd2UgYWR2YW5jZSB0byB0aGUgbmV4dCBsZXZlbAorCSAgICAgICAgICAgIAlpZiAobV9zcmNVdGlsQ0VCdWZmZXJfW21fc3JjVXRpbENFQnVmZmVyU2l6ZV8gLSAxXSAKKwkgICAgICAgICAgICAJCQkJCT09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgICAgIAkJYnJlYWs7CisJICAgICAgICAgICAgCX0KKwkgICAgICAgICAgICAJaWYgKGRvSGlyYWdhbmE0ICYmIGhpcmFnYW5hcmVzdWx0ID09IDAgCisJICAgICAgICAgICAgCQkmJiBtX3NyY1V0aWxDb2xFSXRlcl8ubV9pc0NvZGVQb2ludEhpcmFnYW5hXyAhPQorCSAgICAgICAgICAgICAgCQkJCQkJbV90Z3RVdGlsQ29sRUl0ZXJfLm1faXNDb2RlUG9pbnRIaXJhZ2FuYV8pIHsKKwkgICAgICAgICAgICAgIAkJaWYgKG1fc3JjVXRpbENvbEVJdGVyXy5tX2lzQ29kZVBvaW50SGlyYWdhbmFfKSB7CisJICAgICAgICAgICAgICAgIAkJaGlyYWdhbmFyZXN1bHQgPSAtMTsKKwkgICAgICAgICAgICAgIAkJfQorCSAgICAgICAgICAgICAgCQllbHNlIHsKKwkgICAgICAgICAgICAgIAkJCWhpcmFnYW5hcmVzdWx0ID0gMTsKKwkgICAgICAgICAgICAgIAkJfQorCSAgICAgICAgICAgIAl9CisJICAgICAgICAJfSAKKwkgICAgICAgIAllbHNlIHsKKwkgICAgICAgICAgICAJLy8gaWYgdHdvIHByaW1hcmllcyBhcmUgZGlmZmVyZW50LCB3ZSBhcmUgZG9uZQorCSAgICAgICAgICAgIAlyZXR1cm4gZW5kUHJpbWFyeUNvbXBhcmUoc29yZGVyLCB0b3JkZXIpOworCSAgICAgICAgCX0KKwkgICAgICAJfSAKKwkgICAgICAJLy8gbm8gcHJpbWFyeSBkaWZmZXJlbmNlLi4uIGRvIHRoZSByZXN0IGZyb20gdGhlIGJ1ZmZlcnMKKwkgICAgICAJcmV0dXJuIGhpcmFnYW5hcmVzdWx0OworCSAgICB9IAorCSAgICBlbHNlIHsgLy8gc2hpZnRlZCAtIGRvIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCBwcm9jZXNzaW5nIDopCisJICAgICAgCXdoaWxlICh0cnVlKSB7CisJICAgICAgICAJaW50IHNvcmRlciA9IGdldFByaW1hcnlTaGlmdGVkQ29tcGFyZUNFKG1fc3JjVXRpbENvbEVJdGVyXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VzdHB2YWx1ZSwgdHJ1ZSk7CisJCQkJaW50IHRvcmRlciA9IGdldFByaW1hcnlTaGlmdGVkQ29tcGFyZUNFKG1fdGd0VXRpbENvbEVJdGVyXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VzdHB2YWx1ZSwgZmFsc2UpOworCSAgICAgICAgCWlmIChzb3JkZXIgPT0gdG9yZGVyKSB7CisJICAgICAgICAgICAgCWlmIChtX3NyY1V0aWxDRUJ1ZmZlcl9bbV9zcmNVdGlsQ0VCdWZmZXJTaXplXyAtIDFdIAorCSAgICAgICAgICAgIAkJCT09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgICAgIAkJYnJlYWs7CisJICAgICAgICAgICAgCX0gCisJICAgICAgICAgICAgCWVsc2UgeworCSAgICAgICAgICAgICAgCQljb250aW51ZTsKKwkgICAgICAgICAgICAJfQorCSAgICAgICAgCX0gCisJICAgICAgICAJZWxzZSB7CisJICAgIAkJCXJldHVybiBlbmRQcmltYXJ5Q29tcGFyZShzb3JkZXIsIHRvcmRlcik7CisJICAgICAgICAJfQorCSAgICAgIAl9IC8vIG5vIHByaW1hcnkgZGlmZmVyZW5jZS4uLiBkbyB0aGUgcmVzdCBmcm9tIHRoZSBidWZmZXJzCisJICAgIH0KKwkJcmV0dXJuIDA7CisJfQorCQorCS8qKgorCSAqIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBwcmltYXJ5IHN0cmVuZ3RoIHdoZW4gd2Uga25vdyB0aGF0IHNvcmRlciBpcyAKKwkgKiBhbHJlYWR5IGRpZmZlcmVudCBmcm9tIHRvcmRlci4KKwkgKiBDb21wYXJlcyBzb3JkZXIgYW5kIHRvcmRlciwgcmV0dXJucyAtMSBpZiBzb3JkZXIgaXMgbGVzcyB0aGFuIHRvcmRlci4KKwkgKiBDbGVhcnMgdGhlIGNlYnVmZmVyIGF0IHRoZSBzYW1lIHRpbWUuCisJICogQHBhcmFtIHNvcmRlciBzb3VyY2Ugc3RyZW5ndGggb3JkZXIKKwkgKiBAcGFyYW0gdG9yZGVyIHRhcmdldCBzdHJlbmd0aCBvcmRlcgorCSAqIEByZXR1cm4gdGhlIGNvbXBhcmlzb24gcmVzdWx0IG9mIHNvcmRlciBhbmQgdG9yZGVyCisJICovCisJcHJpdmF0ZSBmaW5hbCBpbnQgZW5kUHJpbWFyeUNvbXBhcmUoaW50IHNvcmRlciwgaW50IHRvcmRlcikKKwl7CisJCS8vIGlmIHdlIHJlYWNoIGhlcmUsIHRoZSBjZSBvZmZzZXQgYWNjZXNzZWQgaXMgdGhlIGxhc3QgY2UKKwkJLy8gYXBwZW5kZWQgdG8gdGhlIGJ1ZmZlcgorCQlib29sZWFuIGlzU291cmNlTnVsbE9yZGVyID0gKG1fc3JjVXRpbENFQnVmZmVyX1sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NyY1V0aWxDRUJ1ZmZlclNpemVfIC0gMV0gCisJCQkgCQkJCQkJCT09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpOworCQlib29sZWFuIGlzVGFyZ2V0TnVsbE9yZGVyID0gKG1fdGd0VXRpbENFQnVmZmVyX1sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RndFV0aWxDRUJ1ZmZlclNpemVfIC0gMV0gCisJCQkgCQkJCQkJCT09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpOwkgCQkJCQkKKwkJbV9zcmNVdGlsQ0VCdWZmZXJTaXplXyA9IC0xOworCSAgICBtX3RndFV0aWxDRUJ1ZmZlclNpemVfID0gLTE7CisJICAgIGlmIChpc1NvdXJjZU51bGxPcmRlcikgeworCSAgICAJcmV0dXJuIC0xOworCSAgICB9CisJICAgIGlmIChpc1RhcmdldE51bGxPcmRlcikgeworCSAgICAJcmV0dXJuIDE7CisJICAgIH0KKwkgICAgLy8gZ2V0dGluZyByaWQgb2YgdGhlIHNpZ24KKwkgICAgc29yZGVyID4+Pj0gQ0VfUFJJTUFSWV9TSElGVF87CisJICAgIHRvcmRlciA+Pj49IENFX1BSSU1BUllfU0hJRlRfOworCSAgICBpZiAoc29yZGVyIDwgdG9yZGVyKSB7CisJICAgIAlyZXR1cm4gLTE7CisJICAgIH0KKwkgICAgcmV0dXJuIDE7CisJfQorCQorCS8qKgorCSAqIENhbGN1bGF0ZXMgdGhlIG5leHQgcHJpbWFyeSBzaGlmdGVkIHZhbHVlIGFuZCBmaWxscyB1cCBjZWJ1ZmZlciB3aXRoIHRoZSAKKwkgKiBuZXh0IG5vbi1pZ25vcmFibGUgY2UuCisJICogQHBhcmFtIGNvbGVpdGVyIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yCisJICogQHBhcmFtIGRvSGlyYWdhbmE0IGZsYWcgaW5kaWNhdG9yIGlmIGhpcmFnYW5hIHF1YXRlcm5hcnkgaXMgdG8gYmUgCisJICogCQkJCQkJaGFuZGxlZAorCSAqIEBwYXJhbSBsb3dlc3RwdmFsdWUgbG93ZXN0IHByaW1hcnkgc2hpZnRlZCB2YWx1ZSB0aGF0IHdpbGwgbm90IGJlIAorCSAqIAkJCQkJCWlnbm9yZWQKKwkgKiBAcmV0dXJuIHJlc3VsdCBuZXh0IG1vZGlmaWVkIGNlIAorCSAqLworCXByaXZhdGUgZmluYWwgaW50IGdldFByaW1hcnlTaGlmdGVkQ29tcGFyZUNFKAorCQkJCQkJCQkJCUNvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBjb2xlaXRlciwKKwkJCQkJCQkJCQlpbnQgbG93ZXN0cHZhbHVlLCBib29sZWFuIGlzU3JjKQorCQkJCQkJCQkJCQorCXsKKwkJYm9vbGVhbiBzaGlmdGVkID0gZmFsc2U7CisJCWludCByZXN1bHQgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFOworICAgICAgICBpbnQgY2VidWZmZXJbXSA9IG1fc3JjVXRpbENFQnVmZmVyXzsKKyAgICAgICAgaW50IGNlYnVmZmVyc2l6ZSA9IG1fc3JjVXRpbENFQnVmZmVyU2l6ZV87CisgICAgICAgIGlmICghaXNTcmMpIHsKKyAgICAgICAgICAgIGNlYnVmZmVyID0gbV90Z3RVdGlsQ0VCdWZmZXJfOworICAgICAgICAgICAgY2VidWZmZXJzaXplID0gbV90Z3RVdGlsQ0VCdWZmZXJTaXplXzsKKyAgICAgICAgfQorCSAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAgICAgcmVzdWx0ID0gY29sZWl0ZXIubmV4dCgpOworCSAgICAgICAgaWYgKHJlc3VsdCA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgICAgY2VidWZmZXIgPSBhcHBlbmQoY2VidWZmZXIsIGNlYnVmZmVyc2l6ZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBjZWJ1ZmZlcnNpemUgKys7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICB9IAorCSAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUKKwkgICAgICAgICAgICAgICAgIHx8IChzaGlmdGVkIAorCSAgICAgICAgICAgICAgICAgICAgICYmIChyZXN1bHQgJiBDRV9QUklNQVJZX01BU0tfKSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkpIHsgCisgICAgICAgICAgICAgICAgLy8gVUNBIGFtZW5kbWVudCAtIGlnbm9yZSBpZ25vcmFibGVzIHRoYXQgZm9sbG93IHNoaWZ0ZWQgY29kZSAKKyAgICAgICAgICAgICAgICAvLyBwb2ludHMKKwkgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgIH0gCisJICAgICAgICBlbHNlIGlmIChpc0NvbnRpbnVhdGlvbihyZXN1bHQpKSB7CisJICAgICAgICAJaWYgKChyZXN1bHQgJiBDRV9QUklNQVJZX01BU0tfKSAKKwkgICAgICAgICAgICAJCQkJCSE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsgCisJICAgICAgICAgICAgCS8vIFRoZXJlIGlzIHByaW1hcnkgdmFsdWUKKwkgICAgICAgICAgICAgIAlpZiAoc2hpZnRlZCkgeworCSAgICAgICAgICAgICAgICAJcmVzdWx0ID0gKHJlc3VsdCAmIENFX1BSSU1BUllfTUFTS18pIAorCSAgICAgICAgICAgICAgICAJCQkJCQl8IENFX0NPTlRJTlVBVElPTl9NQVJLRVJfOyAKKwkgICAgICAgICAgICAgICAgCS8vIHByZXNlcnZlIGludGVyZXN0aW5nIGNvbnRpbnVhdGlvbgorCSAgICAgICAgICAgICAgICAJY2VidWZmZXIgPSBhcHBlbmQoY2VidWZmZXIsIGNlYnVmZmVyc2l6ZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlYnVmZmVyc2l6ZSArKzsKKwkgICAgICAgICAgIAkJCWNvbnRpbnVlOworCSAgICAgICAgCQl9IAorCSAgICAgICAgCQllbHNlIHsKKwkgICAgICAgICAgIAkJCWNlYnVmZmVyID0gYXBwZW5kKGNlYnVmZmVyLCBjZWJ1ZmZlcnNpemUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjZWJ1ZmZlcnNpemUgKys7CisJICAgICAgICAgICAgICAgIAlicmVhazsKKwkgICAgICAgICAgICAgIAl9CisJICAgICAgICAgICAgfSAKKwkgICAgICAgICAgICBlbHNlIHsgLy8gSnVzdCBsb3dlciBsZXZlbCB2YWx1ZXMKKwkgICAgICAgICAgICAJaWYgKCFzaGlmdGVkKSB7CisJICAgICAgICAgICAgCQljZWJ1ZmZlciA9IGFwcGVuZChjZWJ1ZmZlciwgY2VidWZmZXJzaXplLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2VidWZmZXJzaXplICsrOworCSAgICAgICAgICAgICAgCX0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9IAorCSAgICAgICAgZWxzZSB7IC8vIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICBpZiAoVXRpbGl0eS5jb21wYXJlVW5zaWduZWQocmVzdWx0ICYgQ0VfUFJJTUFSWV9NQVNLXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VzdHB2YWx1ZSkgPiAwKSB7CisJICAgICAgICAgICAgIAljZWJ1ZmZlciA9IGFwcGVuZChjZWJ1ZmZlciwgY2VidWZmZXJzaXplLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBjZWJ1ZmZlcnNpemUgKys7CisJICAgICAgICAgICAgIAlicmVhazsKKwkgICAgICAgICAgICB9IAorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIAlpZiAoKHJlc3VsdCAmIENFX1BSSU1BUllfTUFTS18pICE9IDApIHsKKwkgICAgICAgICAgICAgICAgCXNoaWZ0ZWQgPSB0cnVlOworCSAgICAgICAgICAgICAgICAJcmVzdWx0ICY9IENFX1BSSU1BUllfTUFTS187CisJICAgICAgICAgICAgICAgIAljZWJ1ZmZlciA9IGFwcGVuZChjZWJ1ZmZlciwgY2VidWZmZXJzaXplLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2VidWZmZXJzaXplICsrOworCSAgICAgICAgICAgICAgICAJY29udGludWU7CisJICAgICAgICAgICAgICAJfSAKKwkgICAgICAgICAgICAgIAllbHNlIHsKKwkgICAgICAgICAgICAgICAgCWNlYnVmZmVyID0gYXBwZW5kKGNlYnVmZmVyLCBjZWJ1ZmZlcnNpemUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjZWJ1ZmZlcnNpemUgKys7CisJICAgICAgICAgICAgICAgIAlzaGlmdGVkID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIAljb250aW51ZTsKKwkgICAgICAgICAgICAgIAl9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICB9CisgICAgICAgIGlmIChpc1NyYykgeworICAgICAgICAgICAgbV9zcmNVdGlsQ0VCdWZmZXJfID0gY2VidWZmZXI7CisgICAgICAgICAgICBtX3NyY1V0aWxDRUJ1ZmZlclNpemVfID0gY2VidWZmZXJzaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV90Z3RVdGlsQ0VCdWZmZXJfID0gY2VidWZmZXI7CisgICAgICAgICAgICBtX3RndFV0aWxDRUJ1ZmZlclNpemVfID0gY2VidWZmZXJzaXplOworICAgICAgICB9CisJICAgIHJlc3VsdCAmPSBDRV9QUklNQVJZX01BU0tfOworCSAgICByZXR1cm4gcmVzdWx0OworCX0KKwkJCQkJCQkKKwkvKioKKwkgKiBBcHBlbmRpbmcgYW4gaW50IHRvIGFuIGFycmF5IG9mIGludHMgYW5kIGluY3JlYXNlcyBpdCBpZiB3ZSBydW4gb3V0IG9mIAorCSAqIHNwYWNlCisJICogQHBhcmFtIGFycmF5IG9mIGludCBhcnJheXMKKwkgKiBAcGFyYW0gYXBwZW5kaW5kZXggaW5kZXggYXQgd2hpY2ggdmFsdWUgd2lsbCBiZSBhcHBlbmRlZAorCSAqIEBwYXJhbSB2YWx1ZSB0byBhcHBlbmQKKyAgICAgKiBAcmV0dXJuIGFycmF5IGlmIHNpemUgaXMgbm90IGluY3JlYXNlZCwgb3RoZXJ3aXNlIGEgbmV3IGFycmF5IHdpbGwgYmUgCisgICAgICogICAgICAgICByZXR1cm5lZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIGFwcGVuZChpbnQgYXJyYXlbXSwgaW50IGFwcGVuZGluZGV4LCBpbnQgdmFsdWUpCisJeworCQlpZiAoYXBwZW5kaW5kZXggKyAxID49IGFycmF5Lmxlbmd0aCkgeworCQkJYXJyYXkgPSBpbmNyZWFzZShhcnJheSwgYXBwZW5kaW5kZXgsIENFX0JVRkZFUl9TSVpFXyk7CisJCX0JCQkKKwkJYXJyYXlbYXBwZW5kaW5kZXhdID0gdmFsdWU7CisgICAgICAgIHJldHVybiBhcnJheTsKKwl9CisJCisJLyoqCisJICogRG9lcyBzZWNvbmRhcnkgc3RyZW5ndGggY29tcGFyaXNvbiBiYXNlZCBvbiB0aGUgY29sbGVjdGVkIGNlcy4KKwkgKiBAcGFyYW0gZG9GcmVuY2ggZmxhZyBpbmRpY2F0ZXMgaWYgRnJlbmNoIG9yZGVyaW5nIGlzIHRvIGJlIGRvbmUKKwkgKiBAcmV0dXJuIHRoZSBzZWNvbmRhcnkgc3RyZW5ndGggY29tcGFyaXNvbiByZXN1bHQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBkb1NlY29uZGFyeUNvbXBhcmUoYm9vbGVhbiBkb0ZyZW5jaCkKKwl7CisJCS8vIG5vdywgd2UncmUgZ29ubmEgcmVleGFtaW5lIGNvbGxlY3RlZCBDRXMKKwkgICAgaWYgKCFkb0ZyZW5jaCkgeyAvLyBub3JtYWwKKwkgICAgCWludCBzb2Zmc2V0ID0gMDsKKwkgICAgCWludCB0b2Zmc2V0ID0gMDsKKwkgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAgICAJaW50IHNvcmRlciA9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEU7CisJICAgICAgICAgIAl3aGlsZSAoc29yZGVyID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgICAJc29yZGVyID0gbV9zcmNVdGlsQ0VCdWZmZXJfW3NvZmZzZXQgKytdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIENFX1NFQ09OREFSWV9NQVNLXzsKKwkgICAgICAgICAgCX0KKwkJCQlpbnQgdG9yZGVyID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRTsKKwkgICAgICAgICAgCXdoaWxlICh0b3JkZXIgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAJCXRvcmRlciA9IG1fdGd0VXRpbENFQnVmZmVyX1t0b2Zmc2V0ICsrXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBDRV9TRUNPTkRBUllfTUFTS187CisJICAgICAgICAgIAl9CisJCisJICAgICAgICAgIAlpZiAoc29yZGVyID09IHRvcmRlcikgeworCSAgICAgICAgICAgIAlpZiAobV9zcmNVdGlsQ0VCdWZmZXJfW3NvZmZzZXQgLSAxXSAgCisJICAgICAgICAgICAgCQkJCQk9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgICAgICAJCWJyZWFrOworCSAgICAgICAgICAgIAl9CisJICAgICAgICAgIAl9IAorCSAgICAgICAgICAJZWxzZSB7CisJICAgICAgICAgIAkJaWYgKG1fc3JjVXRpbENFQnVmZmVyX1tzb2Zmc2V0IC0gMV0gPT0gCisJICAgICAgICAgIAkJCQlDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgIAkJCXJldHVybiAtMTsKKwkgICAgICAgICAgCQl9CisJICAgICAgICAgIAkJaWYgKG1fdGd0VXRpbENFQnVmZmVyX1t0b2Zmc2V0IC0gMV0gPT0gCisJICAgICAgICAgIAkJCQlDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgIAkJCXJldHVybiAxOworCSAgICAgICAgICAJCX0KKwkgICAgICAgICAgICAgICAJcmV0dXJuIChzb3JkZXIgPCB0b3JkZXIpID8gLTEgOiAxOworCSAgICAgICAgICAJfQorCSAgICAgICAgfQorCSAgICB9IAorCSAgICBlbHNlIHsgLy8gZG8gdGhlIEZyZW5jaCAKKwkgICAgCW1fc3JjVXRpbENvbnRPZmZzZXRfID0gMDsKKyAgICAgICAgICAgIG1fdGd0VXRpbENvbnRPZmZzZXRfID0gMDsKKyAgICAgICAgICAgIG1fc3JjVXRpbE9mZnNldF8gPSBtX3NyY1V0aWxDRUJ1ZmZlclNpemVfIC0gMjsgCisgICAgICAgICAgICBtX3RndFV0aWxPZmZzZXRfID0gbV90Z3RVdGlsQ0VCdWZmZXJTaXplXyAtIDI7IAorCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgIAlpbnQgc29yZGVyID0gZ2V0U2Vjb25kYXJ5RnJlbmNoQ0UodHJ1ZSk7CisJICAgICAgICAJaW50IHRvcmRlciA9IGdldFNlY29uZGFyeUZyZW5jaENFKGZhbHNlKTsKKwkgICAgICAgICAgCWlmIChzb3JkZXIgPT0gdG9yZGVyKSB7CisJICAgICAgICAgICAgCWlmICgobV9zcmNVdGlsT2Zmc2V0XyA8IDAgJiYgbV90Z3RVdGlsT2Zmc2V0XyA8IDApIAorCSAgICAgICAgICAgIAkJfHwgbV9zcmNVdGlsQ0VCdWZmZXJfW21fc3JjVXRpbE9mZnNldF9dIAorCSAgICAgICAgICAgIAkJCQkJPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgICAgICAgCQlicmVhazsKKwkgICAgICAgICAgICAJfSAKKwkgICAgICAgICAgCX0gCisJICAgICAgICAgIAllbHNlIHsKKwkgICAgICAgICAgICAgIAlyZXR1cm4gKHNvcmRlciA8IHRvcmRlcikgPyAtMSA6IDE7CisJICAgICAgICAgIAl9CisJICAgICAgICB9CisJICAgIH0KKwkgICAgcmV0dXJuIDA7CisJfQorCQorCS8qKgorCSAqIENhbGN1bGF0ZXMgdGhlIG5leHQgc2Vjb25kYXJ5IGZyZW5jaCBDRS4KKwkgKiBAcGFyYW0gaXNTcmMgZmxhZyBpbmRpY2F0b3IgaWYgd2UgYXJlIGNhbGN1bGF0aW5nIHRoZSBzcmMgY2VzCisJICogQHJldHVybiByZXN1bHQgbmV4dCBtb2RpZmllZCBjZQorCSAqLworCXByaXZhdGUgZmluYWwgaW50IGdldFNlY29uZGFyeUZyZW5jaENFKGJvb2xlYW4gaXNTcmMpCisJeworCQlpbnQgcmVzdWx0ID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRTsKKyAgICAgICAgaW50IG9mZnNldCA9IG1fc3JjVXRpbE9mZnNldF87CisgICAgICAgIGludCBjb250aW51YXRpb25vZmZzZXQgPSBtX3NyY1V0aWxDb250T2Zmc2V0XzsKKyAgICAgICAgaW50IGNlYnVmZmVyW10gPSBtX3NyY1V0aWxDRUJ1ZmZlcl87CisgICAgICAgIGlmICghaXNTcmMpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IG1fdGd0VXRpbE9mZnNldF87CisgICAgICAgICAgICBjb250aW51YXRpb25vZmZzZXQgPSBtX3RndFV0aWxDb250T2Zmc2V0XzsKKyAgICAgICAgICAgIGNlYnVmZmVyID0gbV90Z3RVdGlsQ0VCdWZmZXJfOworICAgICAgICB9CisgICAgICAgIAorCSAgICB3aGlsZSAocmVzdWx0ID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUgCisJICAgIAkJJiYgb2Zmc2V0ID49IDApIHsKKwkgICAgICAgIGlmIChjb250aW51YXRpb25vZmZzZXQgPT0gMCkgeworCSAgICAgICAgCXJlc3VsdCA9IGNlYnVmZmVyW29mZnNldF07CisJCSAgICAgICAgd2hpbGUgKGlzQ29udGludWF0aW9uKGNlYnVmZmVyW29mZnNldCAtLV0pKTsKKwkJICAgICAgICAvLyBhZnRlciB0aGlzLCBzb3JkZXIgaXMgYXQgdGhlIHN0YXJ0IG9mIGNvbnRpbnVhdGlvbiwgCisJCSAgICAgICAgLy8gYW5kIG9mZnNldCBwb2ludHMgYmVmb3JlIHRoYXQgCisJCSAgICAgICAgaWYgKGlzQ29udGludWF0aW9uKGNlYnVmZmVyW29mZnNldCArIDFdKSkgeworCQkgICAgICAgIAkvLyBzYXZlIG9mZnNldCBmb3IgbGF0ZXIKKwkJICAgICAgICAJY29udGludWF0aW9ub2Zmc2V0ID0gb2Zmc2V0OyAKKwkJICAgICAgICAJb2Zmc2V0ICs9IDI7ICAKKwkJICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgIAlyZXN1bHQgPSBjZWJ1ZmZlcltvZmZzZXQgKytdOworCSAgICAgICAgCWlmICghaXNDb250aW51YXRpb24ocmVzdWx0KSkgeyAKKwkgICAgICAgIAkJLy8gd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIHRoaXMgY29udGludWF0aW9uCisJICAgICAgICAgICAJCW9mZnNldCA9IGNvbnRpbnVhdGlvbm9mZnNldDsKKwkgICAgICAgICAgIAkJLy8gcmVzZXQgdGhlIHBvaW50ZXIgdG8gYmVmb3JlIGNvbnRpbnVhdGlvbiAKKwkgICAgICAgICAgIAkJY29udGludWF0aW9ub2Zmc2V0ID0gMDsKKwkgICAgICAgICAgIAkJY29udGludWU7CisJICAgICAgICAJfQorCSAgICAgICAgfQorCSAgICAgICAgcmVzdWx0ICY9IENFX1NFQ09OREFSWV9NQVNLXzsgLy8gcmVtb3ZlIGNvbnRpbnVhdGlvbiBiaXQgICAgICAgIAorCSAgICB9ICAKKyAgICAgICAgaWYgKGlzU3JjKSB7CisgICAgICAgICAgICBtX3NyY1V0aWxPZmZzZXRfID0gb2Zmc2V0OworICAgICAgICAgICAgbV9zcmNVdGlsQ29udE9mZnNldF8gPSBjb250aW51YXRpb25vZmZzZXQ7CisgICAgICAgIH0gIAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fdGd0VXRpbE9mZnNldF8gPSBvZmZzZXQ7CisgICAgICAgICAgICBtX3RndFV0aWxDb250T2Zmc2V0XyA9IGNvbnRpbnVhdGlvbm9mZnNldDsKKyAgICAgICAgfQorCSAgICByZXR1cm4gcmVzdWx0OworCX0KKwkKKwkvKioKKwkgKiBEb2VzIGNhc2Ugc3RyZW5ndGggY29tcGFyaXNvbiBiYXNlZCBvbiB0aGUgY29sbGVjdGVkIGNlcy4KKwkgKiBAcmV0dXJuIHRoZSBjYXNlIHN0cmVuZ3RoIGNvbXBhcmlzb24gcmVzdWx0CisJICovCisJcHJpdmF0ZSBmaW5hbCBpbnQgZG9DYXNlQ29tcGFyZSgpCisJeworCQlpbnQgc29mZnNldCA9IDA7CisJCWludCB0b2Zmc2V0ID0gMDsKKwkgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgCWludCBzb3JkZXIgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFOworCSAgICAgICAgaW50IHRvcmRlciA9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEU7CisJICAgICAgICB3aGlsZSAoKHNvcmRlciAmIENFX1JFTU9WRV9DQVNFXykgCisJICAgICAgICAJCQkJCQk9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisJICAgICAgICAJc29yZGVyID0gbV9zcmNVdGlsQ0VCdWZmZXJfW3NvZmZzZXQgKytdOworCSAgICAgICAgICAJaWYgKCFpc0NvbnRpbnVhdGlvbihzb3JkZXIpKSB7CisJICAgICAgICAgICAgCXNvcmRlciAmPSBDRV9DQVNFX01BU0tfM187CisJICAgICAgICAgICAgCXNvcmRlciBePSBtX2Nhc2VTd2l0Y2hfOworCSAgICAgICAgICAJfSAKKwkgICAgICAgICAgCWVsc2UgeworCSAgICAgICAgICAgIAlzb3JkZXIgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFOworCSAgICAgICAgICAJfQorCSAgICAgICAgfQorCQorCSAgICAgICAgd2hpbGUgKCh0b3JkZXIgJiBDRV9SRU1PVkVfQ0FTRV8pIAorCSAgICAgICAgCQkJCQkJPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgCXRvcmRlciA9IG1fdGd0VXRpbENFQnVmZmVyX1t0b2Zmc2V0ICsrXTsKKwkgICAgICAgICAgCWlmICghaXNDb250aW51YXRpb24odG9yZGVyKSkgeworCSAgICAgICAgICAgIAl0b3JkZXIgJj0gQ0VfQ0FTRV9NQVNLXzNfOworCSAgICAgICAgICAgIAl0b3JkZXIgXj0gbV9jYXNlU3dpdGNoXzsKKwkgICAgICAgICAgCX0gCisJICAgICAgICAgIAllbHNlIHsKKwkgICAgICAgICAgICAJdG9yZGVyID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRTsKKwkgICAgICAgICAgCX0KKwkgICAgICAgIH0KKwkKKyAgICAgICAgICAgIHNvcmRlciAmPSBDRV9DQVNFX0JJVF9NQVNLXzsKKyAgICAgICAgICAgIHRvcmRlciAmPSBDRV9DQVNFX0JJVF9NQVNLXzsKKwkJCWlmIChzb3JkZXIgPT0gdG9yZGVyKSB7CisJCQkJaWYgKG1fc3JjVXRpbENFQnVmZmVyX1tzb2Zmc2V0IC0gMV0gCisJCQkJCQkJCQkJPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgICAJCWJyZWFrOworCSAgICAgICAgCX0gCisJCQl9CisJCQllbHNlIHsKKwkgICAgICAgIAlpZiAobV9zcmNVdGlsQ0VCdWZmZXJfW3NvZmZzZXQgLSAxXSAKKwkgICAgICAgIAkJCQkJCT09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgCQlyZXR1cm4gLTE7CisJICAgICAgICAJfQorICAgICAgICAgICAgICAgIGlmIChtX3RndFV0aWxDRUJ1ZmZlcl9bc29mZnNldCAtIDFdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisJICAgICAgICAJcmV0dXJuIChzb3JkZXIgPCB0b3JkZXIpID8gLTEgOiAxOworCQkJfQorCSAgICB9CisJICAgIHJldHVybiAwOworCX0KKwkKKwkvKioKKwkgKiBEb2VzIHRlcnRpYXJ5IHN0cmVuZ3RoIGNvbXBhcmlzb24gYmFzZWQgb24gdGhlIGNvbGxlY3RlZCBjZXMuCisJICogQHJldHVybiB0aGUgdGVydGlhcnkgc3RyZW5ndGggY29tcGFyaXNvbiByZXN1bHQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBkb1RlcnRpYXJ5Q29tcGFyZSgpCisJeworCQlpbnQgc29mZnNldCA9IDA7CisJICAgIGludCB0b2Zmc2V0ID0gMDsKKwkgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgCWludCBzb3JkZXIgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFOworCSAgICAJaW50IHRvcmRlciA9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEU7CisJICAgICAgICB3aGlsZSAoKHNvcmRlciAmIENFX1JFTU9WRV9DQVNFXykgCisJICAgICAgICAJCQkJCT09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgCXNvcmRlciA9IG1fc3JjVXRpbENFQnVmZmVyX1tzb2Zmc2V0ICsrXSAmIG1fbWFzazNfOworCSAgICAgICAgICAJaWYgKCFpc0NvbnRpbnVhdGlvbihzb3JkZXIpKSB7CisJICAgICAgICAgICAgCXNvcmRlciBePSBtX2Nhc2VTd2l0Y2hfOworCSAgICAgICAgICAJfSAKKwkgICAgICAgICAgCWVsc2UgeworCSAgICAgICAgICAgIAlzb3JkZXIgJj0gQ0VfUkVNT1ZFX0NBU0VfOworCSAgICAgICAgICAJfQorCSAgICAgICAgfQorCQorCQkJd2hpbGUgKCh0b3JkZXIgJiBDRV9SRU1PVkVfQ0FTRV8pIAorCSAgICAgICAgCQkJCQk9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisJICAgICAgICAgIAl0b3JkZXIgPSBtX3RndFV0aWxDRUJ1ZmZlcl9bdG9mZnNldCArK10gJiBtX21hc2szXzsKKwkgICAgICAgICAgCWlmICghaXNDb250aW51YXRpb24odG9yZGVyKSkgeworCSAgICAgICAgICAgIAl0b3JkZXIgXj0gbV9jYXNlU3dpdGNoXzsKKwkgICAgICAgICAgCX0gCisJICAgICAgICAgIAllbHNlIHsKKwkgICAgICAgICAgICAJdG9yZGVyICY9IENFX1JFTU9WRV9DQVNFXzsKKwkgICAgICAgICAgCX0KKwkgICAgICAgIH0gICAgICAgIAorCQorCSAgICAgICAgaWYgKHNvcmRlciA9PSB0b3JkZXIpIHsKKwkgICAgICAgICAgCWlmIChtX3NyY1V0aWxDRUJ1ZmZlcl9bc29mZnNldCAtIDFdIAorCSAgICAgICAgICAJCQkJCQk9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgICAgCWJyZWFrOworCSAgICAgICAgICAJfSAKKwkgICAgICAgIH0gCisJICAgICAgICBlbHNlIHsKKwkgICAgICAgIAlpZiAobV9zcmNVdGlsQ0VCdWZmZXJfW3NvZmZzZXQgLSAxXSA9PSAKKwkgICAgICAgICAgCQkJCQkJCUNvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgCQlyZXR1cm4gLTE7CisJICAgICAgICAgIAl9CisJICAgICAgICAgIAlpZiAobV90Z3RVdGlsQ0VCdWZmZXJfW3RvZmZzZXQgLSAxXSA9PSAKKwkgICAgICAgICAgCQkJCUNvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgCQlyZXR1cm4gMTsKKwkgICAgICAgICAgCX0KKwkgICAgICAgICAgICByZXR1cm4gKHNvcmRlciA8IHRvcmRlcikgPyAtMSA6IDE7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgcmV0dXJuIDA7CisJfQorCQorCS8qKgorCSAqIERvZXMgcXVhdGVybmFyeSBzdHJlbmd0aCBjb21wYXJpc29uIGJhc2VkIG9uIHRoZSBjb2xsZWN0ZWQgY2VzLgorCSAqIEBwYXJhbSBsb3dlc3RwdmFsdWUgdGhlIGxvd2VzdCBwcmltYXJ5IHZhbHVlIHRoYXQgd2lsbCBub3QgYmUgaWdub3JlZCBpZiAKKwkgKiAJCQkJCQlhbHRlcm5hdGUgaGFuZGxpbmcgaXMgc2hpZnRlZAorCSAqIEByZXR1cm4gdGhlIHF1YXRlcm5hcnkgc3RyZW5ndGggY29tcGFyaXNvbiByZXN1bHQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBkb1F1YXRlcm5hcnlDb21wYXJlKGludCBsb3dlc3RwdmFsdWUpCisJeworCQlib29sZWFuIHNTaGlmdGVkID0gdHJ1ZTsKKwkgICAgYm9vbGVhbiB0U2hpZnRlZCA9IHRydWU7CisJICAgIGludCBzb2Zmc2V0ID0gMDsKKwkgICAgaW50IHRvZmZzZXQgPSAwOworCSAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAJaW50IHNvcmRlciA9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEU7CisJICAgIAlpbnQgdG9yZGVyID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRTsKKwkgICAgICAgIHdoaWxlIChzb3JkZXIgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRQorCSAgICAgICAgCQl8fCAoaXNDb250aW51YXRpb24oc29yZGVyKSAmJiAhc1NoaWZ0ZWQpKSB7CisJICAgICAgICAgIAlzb3JkZXIgPSBtX3NyY1V0aWxDRUJ1ZmZlcl9bc29mZnNldCArK107CisJICAgICAgICAgIAlpZiAoaXNDb250aW51YXRpb24oc29yZGVyKSkgeworCSAgICAgICAgICAgIAlpZiAoIXNTaGlmdGVkKSB7CisJICAgICAgICAgICAgICAJCWNvbnRpbnVlOworCSAgICAgICAgICAgIAl9CisJICAgICAgICAgIAl9IAorCSAgICAgICAgICAJZWxzZSBpZiAoVXRpbGl0eS5jb21wYXJlVW5zaWduZWQoc29yZGVyLCBsb3dlc3RwdmFsdWUpID4gMCAKKwkgICAgICAgICAgCQkJCXx8IChzb3JkZXIgJiBDRV9QUklNQVJZX01BU0tfKSAKKwkgICAgICAgICAgCQkJCQkJPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeyAKKwkgICAgICAgICAgCQkvLyBub24gY29udGludWF0aW9uCisJICAgICAgICAgICAgCXNvcmRlciA9IENFX1BSSU1BUllfTUFTS187CisJICAgICAgICAgICAgCXNTaGlmdGVkID0gZmFsc2U7CisJICAgICAgICAgIAl9IAorCSAgICAgICAgICAJZWxzZSB7CisJICAgICAgICAgICAgCXNTaGlmdGVkID0gdHJ1ZTsKKwkgICAgICAgICAgCX0KKwkgICAgICAgIH0KKwkgICAgICAgIHNvcmRlciA+Pj49IENFX1BSSU1BUllfU0hJRlRfOworCQkJd2hpbGUgKHRvcmRlciA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFIAorCSAgICAgICAgCQl8fCAoaXNDb250aW51YXRpb24odG9yZGVyKSAmJiAhdFNoaWZ0ZWQpKSB7CisJICAgICAgICAgIAl0b3JkZXIgPSBtX3RndFV0aWxDRUJ1ZmZlcl9bdG9mZnNldCArK107CisJICAgICAgICAgIAlpZiAoaXNDb250aW51YXRpb24odG9yZGVyKSkgeworCSAgICAgICAgICAgIAlpZiAoIXRTaGlmdGVkKSB7CisJICAgICAgICAgICAgICAJCWNvbnRpbnVlOworCSAgICAgICAgICAgIAl9CisJICAgICAgICAgIAl9IAorCSAgICAgICAgICAJZWxzZSBpZiAoVXRpbGl0eS5jb21wYXJlVW5zaWduZWQodG9yZGVyLCBsb3dlc3RwdmFsdWUpID4gMCAKKwkgICAgICAgICAgCQkJCXx8ICh0b3JkZXIgJiBDRV9QUklNQVJZX01BU0tfKSAKKwkgICAgICAgICAgCQkJCQkJPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeyAKKwkgICAgICAgICAgCQkvLyBub24gY29udGludWF0aW9uCisJICAgICAgICAgICAgCXRvcmRlciA9IENFX1BSSU1BUllfTUFTS187CisJICAgICAgICAgICAgCXRTaGlmdGVkID0gZmFsc2U7CisJICAgICAgICAgIAl9IAorCSAgICAgICAgICAJZWxzZSB7CisJICAgICAgICAgICAgCXRTaGlmdGVkID0gdHJ1ZTsKKwkgICAgICAgICAgCX0KKwkgICAgICAgIH0KKwkgICAgICAgIHRvcmRlciA+Pj49IENFX1BSSU1BUllfU0hJRlRfOworCQorCSAgICAgICAgaWYgKHNvcmRlciA9PSB0b3JkZXIpIHsKKwkgICAgICAgICAgCWlmIChtX3NyY1V0aWxDRUJ1ZmZlcl9bc29mZnNldCAtIDFdIAorCSAgICAgICAgICAJCT09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgICAJYnJlYWs7CisJICAgICAgICAgIAl9CisJICAgICAgICB9IAorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAJaWYgKG1fc3JjVXRpbENFQnVmZmVyX1tzb2Zmc2V0IC0gMV0gPT0gCisJICAgICAgICAgIAkJQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgICAJCXJldHVybiAtMTsKKwkgICAgICAgICAgCX0KKwkgICAgICAgICAgCWlmIChtX3RndFV0aWxDRUJ1ZmZlcl9bdG9mZnNldCAtIDFdID09IAorCSAgICAgICAgICAJCUNvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgCQlyZXR1cm4gMTsKKwkgICAgICAgICAgCX0KKwkgICAgICAgICAgICByZXR1cm4gKHNvcmRlciA8IHRvcmRlcikgPyAtMSA6IDE7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgcmV0dXJuIDA7CisJfQorCQorCS8qKiAgCisJICogSW50ZXJuYWwgZnVuY3Rpb24uIERvZXMgYnl0ZSBsZXZlbCBzdHJpbmcgY29tcGFyZS4gVXNlZCBieSBzdHJjb2xsIGlmIAorCSAqIHN0cmVuZ3RoID09IGlkZW50aWNhbCBhbmQgc3RyaW5ncyBhcmUgb3RoZXJ3aXNlIGVxdWFsLiBUaGlzIGlzIGEgcmFyZSAKKwkgKiBjYXNlLiBDb21wYXJpc29uIG11c3QgYmUgZG9uZSBvbiBORkQgbm9ybWFsaXplZCBzdHJpbmdzLiBGQ0QgaXMgbm90IGdvb2QgCisJICogZW5vdWdoLgorCSAqIEBwYXJhbSBzb3VyY2UgdGV4dAorCSAqIEBwYXJhbSB0YXJnZXQgdGV4dAorCSAqIEBwYXJhbSBvZmZzZXQgb2YgdGhlIGZpcnN0IGRpZmZlcmVuY2UgaW4gdGhlIHRleHQgc3RyaW5ncworCSAqIEBwYXJhbSBub3JtYWxpemUgZmxhZyBpbmRpY2F0aW5nIGlmIHdlIGFyZSB0byBub3JtYWxpemUgdGhlIHRleHQgYmVmb3JlCisJICogCQkJCWNvbXBhcmlzb24KKwkgKiBAcmV0dXJuIDEgaWYgc291cmNlIGlzIGdyZWF0ZXIgdGhhbiB0YXJnZXQsIC0xIGxlc3MgdGhhbiBhbmQgMCBpZiBlcXVhbHMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZG9JZGVudGljYWxDb21wYXJlKFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQsIAorCQkJCQkJCQkJCQkJaW50IG9mZnNldCwgYm9vbGVhbiBub3JtYWxpemUpCisJCQkJCQkJCQkJCQkKKwl7CisJICAgIGlmIChub3JtYWxpemUpIHsKKwkgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soc291cmNlLCBOb3JtYWxpemVyLk5GRCkgCisJICAgICAgICAJCQkJCQkJCQkJIT0gTm9ybWFsaXplci5ZRVMpIHsKKwkgICAgICAgICAgICBzb3VyY2UgPSBOb3JtYWxpemVyLmRlY29tcG9zZShzb3VyY2UsIGZhbHNlKTsKKwkgICAgICAgIH0KKwkKKwkgICAgICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2sodGFyZ2V0LCBOb3JtYWxpemVyLk5GRCkgCisJICAgICAgICAJCQkJCQkJCQkJCSE9IE5vcm1hbGl6ZXIuWUVTKSB7CisJICAgICAgICAgICAgdGFyZ2V0ID0gTm9ybWFsaXplci5kZWNvbXBvc2UodGFyZ2V0LCBmYWxzZSk7CisJICAgICAgICB9CisJICAgICAgICBvZmZzZXQgPSAwOworCSAgICB9CisJCisJICAgIHJldHVybiBkb1N0cmluZ0NvbXBhcmUoc291cmNlLCB0YXJnZXQsIG9mZnNldCk7CisJfQorCQorCS8qKgorCSAqIENvbXBhcmVzIHN0cmluZyBmb3IgdGhlaXIgY29kZXBvaW50IG9yZGVyLgorCSAqIFRoaXMgY29tcGFyaXNvbiBoYW5kbGVzIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFuZCBwbGFjZSB0aGVtIGFmdGVyIHRoZSAKKwkgKiBhbGwgbm9uIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzLgorCSAqIEBwYXJhbSBzb3VyY2UgdGV4dAorCSAqIEBwYXJhbSB0YXJnZXQgdGV4dAorCSAqIEBwYXJhbSBvZmZzZXQgc3RhcnQgb2Zmc2V0IGZvciBjb21wYXJpc29uCisJICogQHJldHVybiAxIGlmIHNvdXJjZSBpcyBncmVhdGVyIHRoYW4gdGFyZ2V0LCAtMSBsZXNzIHRoYW4gYW5kIDAgaWYgZXF1YWxzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGRvU3RyaW5nQ29tcGFyZShTdHJpbmcgc291cmNlLCAKKwkJCQkJCQkJCQkJIFN0cmluZyB0YXJnZXQsCisJCQkJCQkJCQkJCSBpbnQgb2Zmc2V0KSAKKwl7CisgICAgCS8vIGNvbXBhcmUgaWRlbnRpY2FsIHByZWZpeGVzIC0gdGhleSBkbyBub3QgbmVlZCB0byBiZSBmaXhlZCB1cAorICAgIAljaGFyIHNjaGFyID0gMDsKKyAgICAJY2hhciB0Y2hhciA9IDA7CisgICAgCWludCBzbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOworICAgIAlpbnQgdGxlbmd0aCA9IHRhcmdldC5sZW5ndGgoKTsKKyAgICAJaW50IG1pbmxlbmd0aCA9IE1hdGgubWluKHNsZW5ndGgsIHRsZW5ndGgpOworICAgIAl3aGlsZSAob2Zmc2V0IDwgbWlubGVuZ3RoKSB7CisgICAgICAgIAlzY2hhciA9IHNvdXJjZS5jaGFyQXQob2Zmc2V0KTsKKyAgICAgICAgCXRjaGFyID0gdGFyZ2V0LmNoYXJBdChvZmZzZXQgKyspOworICAgICAgICAJaWYgKHNjaGFyICE9IHRjaGFyKSB7CisgICAgICAgICAgICAJYnJlYWs7CisgICAgICAgIAl9CisgICAgCX0KKyAgICAJCisgICAgCWlmIChzY2hhciA9PSB0Y2hhciAmJiBvZmZzZXQgPT0gbWlubGVuZ3RoKSB7CisgICAgCQlpZiAoc2xlbmd0aCA+IG1pbmxlbmd0aCkgeworICAgIAkJCXJldHVybiAxOworICAgIAkJfQorICAgIAkJaWYgKHRsZW5ndGggPiBtaW5sZW5ndGgpIHsKKyAgICAJCQlyZXR1cm4gLTE7CisgICAgCQl9CisgICAgCQlyZXR1cm4gMDsKKyAgICAJfQorCisgICAJCS8vICBpZiBib3RoIHZhbHVlcyBhcmUgaW4gb3IgYWJvdmUgdGhlIHN1cnJvZ2F0ZSByYW5nZSwgRml4IHRoZW0gdXAuCisgICAJCWlmIChzY2hhciA+PSBVVEYxNi5MRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgCisgICAJCQkmJiB0Y2hhciA+PSBVVEYxNi5MRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUpIHsKKyAgICAgICAgCXNjaGFyID0gZml4dXBVVEYxNihzY2hhcik7CisgICAgICAgIAl0Y2hhciA9IGZpeHVwVVRGMTYodGNoYXIpOworICAgIAl9CisKKyAgICAJLy8gbm93IGMxIGFuZCBjMiBhcmUgaW4gVVRGLTMyLWNvbXBhdGlibGUgb3JkZXIKKyAgICAJcmV0dXJuIChzY2hhciA8IHRjaGFyKSA/IC0xIDogMTsgLy8gc2NoYXIgYW5kIHRjaGFyIGhhcyB0byBiZSBkaWZmZXJlbnQKKwl9CisJCisJLyoqIAorCSAqIFJvdGF0ZSBzdXJyb2dhdGVzIHRvIHRoZSB0b3AgdG8gZ2V0IGNvZGUgcG9pbnQgb3JkZXIKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIGZpeHVwVVRGMTYoY2hhciBjaCkgCisJeyAgICAgICAgICAgICAgICAgIAorICAgIAlpZiAoY2ggPj0gMHhlMDAwKSB7ICAgICAgICAgICAgICAgICAKKyAgICAgICAgCWNoIC09IDB4ODAwOyAgICAgICAgICAgICAgICAgICAgCisgICAgCX0gCisgICAgCWVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAljaCArPSAweDIwMDA7ICAgICAgICAgICAgICAgICAKKyAgICAJfSAgICAgCisgICAgCXJldHVybiBjaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCX0KKwkKKwkvKioKKwkgKiBDaGVja3MgdGhhdCB0aGUgc291cmNlIGFmdGVyIG9mZnNldCBpcyBpZ25vcmFibGUKKwkgKiBAcGFyYW0gc291cmNlIHRleHQgc3RyaW5nIHRvIGNoZWNrCisJICogQHBhcmFtIG9mZnNldCAKKwkgKiBAcmV0dXJuIHRydWUgaWYgc291cmNlIGFmdGVyIG9mZnNldCBpcyBpZ25vcmFibGUuIGZhbHNlIG90aGVyd2lzZQorCSAqLworCXByaXZhdGUgZmluYWwgYm9vbGVhbiBjaGVja0lnbm9yYWJsZShTdHJpbmcgc291cmNlLCBpbnQgb2Zmc2V0KQorCQkJCQkJCQkJCQkJCQorCXsKKyAgICAgICAgbV9zcmNVdGlsSXRlcl8uc2V0VGV4dChzb3VyY2UpOworICAgICAgICBtX3NyY1V0aWxDb2xFSXRlcl8uc2V0VGV4dChtX3NyY1V0aWxJdGVyXywgb2Zmc2V0KTsKKwkgICAgaW50IGNlID0gbV9zcmNVdGlsQ29sRUl0ZXJfLm5leHQoKTsKKwkgICAgd2hpbGUgKGNlICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgCWlmIChjZSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisJICAgIAkJcmV0dXJuIGZhbHNlOworCSAgICAJfQorCSAgICAJY2UgPSBtX3NyY1V0aWxDb2xFSXRlcl8ubmV4dCgpOworCSAgICB9CisJICAgIHJldHVybiB0cnVlOyAKKwl9CisJCisJLyoqCisJICogUmVzZXRzIHRoZSBpbnRlcm5hbCBjYXNlIGRhdGEgbWVtYmVycyBhbmQgY29tcHJlc3Npb24gdmFsdWVzLgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVJbnRlcm5hbFN0YXRlKCkgCisJeworICAgICAgCWlmIChtX2Nhc2VGaXJzdF8gPT0gQXR0cmlidXRlVmFsdWUuVVBQRVJfRklSU1RfKSB7CisgICAgICAgIAltX2Nhc2VTd2l0Y2hfID0gQ0FTRV9TV0lUQ0hfOworICAgICAgCX0gCisgICAgICAJZWxzZSB7CisgICAgICAgIAltX2Nhc2VTd2l0Y2hfID0gTk9fQ0FTRV9TV0lUQ0hfOworICAgICAgCX0KKworICAgICAgCWlmIChtX2lzQ2FzZUxldmVsXyB8fCBtX2Nhc2VGaXJzdF8gPT0gQXR0cmlidXRlVmFsdWUuT0ZGXykgeworICAgICAgICAJbV9tYXNrM18gPSBDRV9SRU1PVkVfQ0FTRV87CisgICAgICAgIAltX2NvbW1vbjNfID0gQ09NTU9OX05PUk1BTF8zXzsKKyAgICAgICAgCW1fYWRkaXRpb24zXyA9IEZMQUdfQklUX01BU0tfQ0FTRV9TV0lUQ0hfT0ZGXzsKKyAgICAgICAgCW1fdG9wM18gPSBDT01NT05fVE9QX0NBU0VfU1dJVENIX09GRl8zXzsKKyAgICAgICAgCW1fYm90dG9tM18gPSBDT01NT05fQk9UVE9NXzNfOworICAgICAgCX0gCisgICAgICAJZWxzZSB7CisgICAgICAgIAltX21hc2szXyA9IENFX0tFRVBfQ0FTRV87CisgICAgICAgIAltX2FkZGl0aW9uM18gPSBGTEFHX0JJVF9NQVNLX0NBU0VfU1dJVENIX09OXzsKKyAgICAgICAgCWlmIChtX2Nhc2VGaXJzdF8gPT0gQXR0cmlidXRlVmFsdWUuVVBQRVJfRklSU1RfKSB7CisgICAgICAgICAgCQltX2NvbW1vbjNfID0gQ09NTU9OX1VQUEVSX0ZJUlNUXzNfOworICAgICAgICAgIAkJbV90b3AzXyA9IENPTU1PTl9UT1BfQ0FTRV9TV0lUQ0hfVVBQRVJfM187CisgICAgICAgICAgCQltX2JvdHRvbTNfID0gQ09NTU9OX0JPVFRPTV9DQVNFX1NXSVRDSF9VUFBFUl8zXzsKKyAgICAgICAgCX0gZWxzZSB7CisgICAgICAgICAgCQltX2NvbW1vbjNfID0gQ09NTU9OX05PUk1BTF8zXzsKKyAgICAgICAgICAJCW1fdG9wM18gPSBDT01NT05fVE9QX0NBU0VfU1dJVENIX0xPV0VSXzNfOworICAgICAgICAgIAkJbV9ib3R0b20zXyA9IENPTU1PTl9CT1RUT01fQ0FTRV9TV0lUQ0hfTE9XRVJfM187CisgICAgICAgIAl9CisgICAgICAJfQorCisgICAgICAJLy8gU2V0IHRoZSBjb21wcmVzc2lvbiB2YWx1ZXMKKyAgICAgIAlpbnQgdG90YWwzID0gbV90b3AzXyAtIENPTU1PTl9CT1RUT01fM18gLSAxOworICAgICAgCS8vIHdlIG11bHRpbHBseSBkb3VibGUgd2l0aCBpbnQsIGJ1dCBuZWVkIG9ubHkgaW50CisgICAgICAJbV90b3BDb3VudDNfID0gKGludCkoUFJPUE9SVElPTl8zXyAqIHRvdGFsMyk7IAorICAgICAgCW1fYm90dG9tQ291bnQzXyA9IHRvdGFsMyAtIG1fdG9wQ291bnQzXzsKKworICAgICAgCWlmICghbV9pc0Nhc2VMZXZlbF8gJiYgZ2V0U3RyZW5ndGgoKSA9PSBBdHRyaWJ1dGVWYWx1ZS5URVJUSUFSWV8gCisgICAgICAgICAgCSYmICFtX2lzRnJlbmNoQ29sbGF0aW9uXyAmJiAhbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8pIHsKKyAgICAgICAgCW1faXNTaW1wbGUzXyA9IHRydWU7CisgICAgICAJfSAKKyAgICAgIAllbHNlIHsKKyAgICAgICAgCW1faXNTaW1wbGUzXyA9IGZhbHNlOworICAgICAgCX0KKyAgICAgICAgaWYoIW1faXNDYXNlTGV2ZWxfICYmIGdldFN0cmVuZ3RoKCkgPD0gQXR0cmlidXRlVmFsdWUuVEVSVElBUllfIAorICAgICAgICAgICYmICFtX2lzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkXyAmJiAhbGF0aW5PbmVGYWlsZWRfKSB7CisgICAgICAgICAgaWYobGF0aW5PbmVDRXNfID09IG51bGwgfHwgbGF0aW5PbmVSZWdlblRhYmxlXykgeworICAgICAgICAgICAgaWYoc2V0VXBMYXRpbk9uZSgpKSB7IC8vIGlmIHdlIHN1Y2NlZWQgaW4gYnVpbGRpbmcgbGF0aW4xIHRhYmxlLCB3ZSdsbCB1c2UgaXQKKyAgICAgICAgICAgICAgbGF0aW5PbmVVc2VfID0gdHJ1ZTsgCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBsYXRpbk9uZVVzZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgbGF0aW5PbmVGYWlsZWRfID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhdGluT25lUmVnZW5UYWJsZV8gPSBmYWxzZTsKKyAgICAgICAgICB9IGVsc2UgeyAvLyBsYXRpbjFUYWJsZSBleGlzdHMgYW5kIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSByZWdlbmVyYXRlZCwganVzdCB1c2UgaXQKKyAgICAgICAgICAgIGxhdGluT25lVXNlXyA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxhdGluT25lVXNlXyA9IGZhbHNlOworICAgICAgICB9ICAgICAKKyAgICAgICAgCisJfQorCQorCS8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBSdWxlQmFzZWRDb2xsYXRvcgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgdm9pZCBpbml0KCkKKyAgICB7CisgICAgCWZvciAobV9taW5VbnNhZmVfID0gMDsgbV9taW5VbnNhZmVfIDwgREVGQVVMVF9NSU5fSEVVUklTVElDXzsgCisgICAgCSAgICAgbV9taW5VbnNhZmVfICsrKSB7ICAKKyAgICAJCS8vIEZpbmQgdGhlIHNtYWxsZXN0IHVuc2FmZSBjaGFyLgorICAgICAgICAJaWYgKGlzVW5zYWZlKG1fbWluVW5zYWZlXykpIHsKKyAgICAgICAgCQlicmVhazsKKyAgICAgICAgCX0KKyAgICAJfQorICAgIAkKKyAgICAJZm9yIChtX21pbkNvbnRyYWN0aW9uRW5kXyA9IDA7IAorICAgIAkgICAgIG1fbWluQ29udHJhY3Rpb25FbmRfIDwgREVGQVVMVF9NSU5fSEVVUklTVElDXzsgCisgICAgCSAgICAgbV9taW5Db250cmFjdGlvbkVuZF8gKyspIHsgIAorICAgIAkgICAgLy8gRmluZCB0aGUgc21hbGxlc3QgY29udHJhY3Rpb24tZW5kaW5nIGNoYXIuCisgICAgICAgIAlpZiAoaXNDb250cmFjdGlvbkVuZChtX21pbkNvbnRyYWN0aW9uRW5kXykpIHsKKyAgICAgICAgCQlicmVhazsKKyAgICAgICAgCX0KKyAgICAJfQorICAgICAgICBsYXRpbk9uZUZhaWxlZF8gPSB0cnVlOworICAgIAlzZXRTdHJlbmd0aChtX2RlZmF1bHRTdHJlbmd0aF8pOworICAgIAlzZXREZWNvbXBvc2l0aW9uKG1fZGVmYXVsdERlY29tcG9zaXRpb25fKTsKKyAgICAgICAgbV92YXJpYWJsZVRvcFZhbHVlXyA9IG1fZGVmYXVsdFZhcmlhYmxlVG9wVmFsdWVfOworICAgIAltX2lzRnJlbmNoQ29sbGF0aW9uXyA9IG1fZGVmYXVsdElzRnJlbmNoQ29sbGF0aW9uXzsKKyAgICAJbV9pc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF8gPSBtX2RlZmF1bHRJc0FsdGVybmF0ZUhhbmRsaW5nU2hpZnRlZF87CisgICAgCW1faXNDYXNlTGV2ZWxfID0gbV9kZWZhdWx0SXNDYXNlTGV2ZWxfOworICAgIAltX2Nhc2VGaXJzdF8gPSBtX2RlZmF1bHRDYXNlRmlyc3RfOworICAgIAltX2lzSGlyYWdhbmE0XyA9IG1fZGVmYXVsdElzSGlyYWdhbmE0XzsKKyAgICAgICAgbGF0aW5PbmVGYWlsZWRfID0gZmFsc2U7CisgICAgCXVwZGF0ZUludGVybmFsU3RhdGUoKTsKKyAgICB9CisgICAgCisgICAgLyoqIAorICAgICAqICBJbml0aWFsaXplcyB1dGlsaXR5IGl0ZXJhdG9ycyBhbmQgYnl0ZSBidWZmZXIgdXNlZCBieSBjb21wYXJlCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIGluaXRVdGlsaXR5KCkgeworICAgICAgIG1fc3JjVXRpbEl0ZXJfID0gbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKG5ldyBTdHJpbmcoIiIpKTsKKyAgICAgICBtX3NyY1V0aWxDb2xFSXRlcl8gPSBuZXcgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKG1fc3JjVXRpbEl0ZXJfLCB0aGlzKTsKKyAgICAgICBtX3RndFV0aWxJdGVyXyA9IG5ldyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihuZXcgU3RyaW5nKCIiKSk7CisgICAgICAgbV90Z3RVdGlsQ29sRUl0ZXJfID0gbmV3IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihtX3RndFV0aWxJdGVyXywgdGhpcyk7CisgICAgICAgbV91dGlsQnl0ZXMwXyA9IG5ldyBieXRlW1NPUlRfQlVGRkVSX0lOSVRfU0laRV9DQVNFX107IC8vIGNhc2UKKyAgICAgICBtX3V0aWxCeXRlczFfID0gbmV3IGJ5dGVbU09SVF9CVUZGRVJfSU5JVF9TSVpFXzFfXTsgLy8gcHJpbWFyeSAKKyAgICAgICBtX3V0aWxCeXRlczJfID0gbmV3IGJ5dGVbU09SVF9CVUZGRVJfSU5JVF9TSVpFXzJfXTsgLy8gc2Vjb25kYXJ5CisgICAgICAgbV91dGlsQnl0ZXMzXyA9IG5ldyBieXRlW1NPUlRfQlVGRkVSX0lOSVRfU0laRV8zX107IC8vIHRlcnRpYXJ5IAorICAgICAgIG1fdXRpbEJ5dGVzNF8gPSBuZXcgYnl0ZVtTT1JUX0JVRkZFUl9JTklUX1NJWkVfNF9dOyAgLy8gUXVhdGVybmFyeQorICAgICAgIG1fc3JjVXRpbENFQnVmZmVyXyA9IG5ldyBpbnRbQ0VfQlVGRkVSX1NJWkVfXTsKKyAgICAgICBtX3RndFV0aWxDRUJ1ZmZlcl8gPSBuZXcgaW50W0NFX0JVRkZFUl9TSVpFX107CisgICAgfQorICAgIAorICAgIAorICAgIAorICAgIC8vIENvbnN0cyBmb3IgTGF0aW4tMSBzcGVjaWFsIHByb2Nlc3NpbmcKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRU5ET0ZMQVRJTk9ORVJBTkdFXyA9IDB4RkY7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExBVElOT05FVEFCTEVMRU5fICAgPSAoRU5ET0ZMQVRJTk9ORVJBTkdFXys1MCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJBSUxfT1VUX0NFXyAgICAgICAgPSAweEZGMDAwMDAwOworICAgIAorICAgICAvKiogCisgICAgICogR2VuZXJhdGUgbGF0aW4tMSB0YWJsZXMKKyAgICAgKi8KKyAgICAKKyAgICBwcml2YXRlIGNsYXNzIHNoaWZ0VmFsdWVzIHsKKyAgICAgICAgaW50IHByaW1TaGlmdCA9IDI0OworICAgICAgICBpbnQgc2VjU2hpZnQgPSAyNDsKKyAgICAgICAgaW50IHRlclNoaWZ0ID0gMjQ7CisgICAgfTsKKyAgICAKKyAgICBwcml2YXRlIGZpbmFsIHZvaWQgCisgICAgYWRkTGF0aW5PbmVFbnRyeShjaGFyIGNoLCBpbnQgQ0UsIHNoaWZ0VmFsdWVzIHNoKSB7CisgICAgICBpbnQgcHJpbWFyeTEgPSAwLCBwcmltYXJ5MiA9IDAsIHNlY29uZGFyeSA9IDAsIHRlcnRpYXJ5ID0gMDsKKyAgICAgIGJvb2xlYW4gcmV2ZXJzZVNlY29uZGFyeSA9IGZhbHNlOworICAgICAgaWYoIWlzQ29udGludWF0aW9uKENFKSkgeworICAgICAgICB0ZXJ0aWFyeSA9ICgoQ0UgJiBtX21hc2szXykpOworICAgICAgICB0ZXJ0aWFyeSBePSBtX2Nhc2VTd2l0Y2hfOworICAgICAgICByZXZlcnNlU2Vjb25kYXJ5ID0gdHJ1ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRlcnRpYXJ5ID0gKGJ5dGUpKChDRSAmIENFX1JFTU9WRV9DT05USU5VQVRJT05fTUFTS18pKTsKKyAgICAgICAgdGVydGlhcnkgJj0gQ0VfUkVNT1ZFX0NBU0VfOworICAgICAgICByZXZlcnNlU2Vjb25kYXJ5ID0gZmFsc2U7CisgICAgICB9CisgICAgCisgICAgICBzZWNvbmRhcnkgPSAoKENFID4+Pj0gOCkgJiBMQVNUX0JZVEVfTUFTS18pOworICAgICAgcHJpbWFyeTIgPSAgKChDRSA+Pj49IDgpICYgTEFTVF9CWVRFX01BU0tfKTsKKyAgICAgIHByaW1hcnkxID0gIChDRSA+Pj4gOCk7CisgICAgCisgICAgICBpZihwcmltYXJ5MSAhPSAwKSB7CisgICAgICAgIGxhdGluT25lQ0VzX1tjaF0gfD0gKHByaW1hcnkxIDw8IHNoLnByaW1TaGlmdCk7CisgICAgICAgIHNoLnByaW1TaGlmdCAtPSA4OworICAgICAgfQorICAgICAgaWYocHJpbWFyeTIgIT0gMCkgeworICAgICAgICBpZihzaC5wcmltU2hpZnQgPCAwKSB7CisgICAgICAgICAgbGF0aW5PbmVDRXNfW2NoXSA9IEJBSUxfT1VUX0NFXzsKKyAgICAgICAgICBsYXRpbk9uZUNFc19bbGF0aW5PbmVUYWJsZUxlbl8rY2hdID0gQkFJTF9PVVRfQ0VfOworICAgICAgICAgIGxhdGluT25lQ0VzX1syKmxhdGluT25lVGFibGVMZW5fK2NoXSA9IEJBSUxfT1VUX0NFXzsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGF0aW5PbmVDRXNfW2NoXSB8PSAocHJpbWFyeTIgPDwgc2gucHJpbVNoaWZ0KTsKKyAgICAgICAgc2gucHJpbVNoaWZ0IC09IDg7CisgICAgICB9CisgICAgICBpZihzZWNvbmRhcnkgIT0gMCkgeworICAgICAgICBpZihyZXZlcnNlU2Vjb25kYXJ5ICYmIG1faXNGcmVuY2hDb2xsYXRpb25fKSB7IC8vIHJldmVyc2Ugc2Vjb25kYXJ5CisgICAgICAgICAgbGF0aW5PbmVDRXNfW2xhdGluT25lVGFibGVMZW5fK2NoXSA+Pj49IDg7IC8vIG1ha2Ugc3BhY2UgZm9yIHNlY29uZGFyeQorICAgICAgICAgIGxhdGluT25lQ0VzX1tsYXRpbk9uZVRhYmxlTGVuXytjaF0gfD0gKHNlY29uZGFyeSA8PCAyNCk7CisgICAgICAgIH0gZWxzZSB7IC8vIG5vcm1hbCBjYXNlIAorICAgICAgICAgIGxhdGluT25lQ0VzX1tsYXRpbk9uZVRhYmxlTGVuXytjaF0gfD0gKHNlY29uZGFyeSA8PCBzaC5zZWNTaGlmdCk7CisgICAgICAgIH0KKyAgICAgICAgc2guc2VjU2hpZnQgLT0gODsKKyAgICAgIH0KKyAgICAgIGlmKHRlcnRpYXJ5ICE9IDApIHsKKyAgICAgICAgbGF0aW5PbmVDRXNfWzIqbGF0aW5PbmVUYWJsZUxlbl8rY2hdIHw9ICh0ZXJ0aWFyeSA8PCBzaC50ZXJTaGlmdCk7CisgICAgICAgIHNoLnRlclNoaWZ0IC09IDg7CisgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgZmluYWwgdm9pZAorICAgIHJlc2l6ZUxhdGluT25lVGFibGUoaW50IG5ld1NpemUpIHsKKyAgICAgICAgaW50IG5ld1RhYmxlW10gPSBuZXcgaW50WzMqbmV3U2l6ZV07CisgICAgICAgIGludCBzaXplVG9Db3B5ID0gKChuZXdTaXplPGxhdGluT25lVGFibGVMZW5fKT9uZXdTaXplOmxhdGluT25lVGFibGVMZW5fKTsKKyAgICAgICAgLy91cHJ2X21lbXNldChuZXdUYWJsZSwgMCwgbmV3U2l6ZSpzaXplb2YodWludDMyX3QpKjMpOyAvLyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQuCisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobGF0aW5PbmVDRXNfLCAwLCBuZXdUYWJsZSwgMCwgc2l6ZVRvQ29weSk7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobGF0aW5PbmVDRXNfLCBsYXRpbk9uZVRhYmxlTGVuXywgbmV3VGFibGUsIG5ld1NpemUsIHNpemVUb0NvcHkpOworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxhdGluT25lQ0VzXywgMipsYXRpbk9uZVRhYmxlTGVuXywgbmV3VGFibGUsIDIqbmV3U2l6ZSwgc2l6ZVRvQ29weSk7CisgICAgICAgIGxhdGluT25lVGFibGVMZW5fID0gbmV3U2l6ZTsKKyAgICAgICAgbGF0aW5PbmVDRXNfID0gbmV3VGFibGU7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBzZXRVcExhdGluT25lKCkgeworICAgICAgaWYobGF0aW5PbmVDRXNfID09IG51bGwpIHsKKyAgICAgICAgbGF0aW5PbmVDRXNfID0gbmV3IGludFszKkxBVElOT05FVEFCTEVMRU5fXTsgCisgICAgICAgIGxhdGluT25lVGFibGVMZW5fID0gTEFUSU5PTkVUQUJMRUxFTl87CisgICAgICB9IGVsc2UgeworICAgICAgICBBcnJheXMuZmlsbChsYXRpbk9uZUNFc18sIDApOworICAgICAgfQorICAgICAgaWYobV9Db250SW5mb18gPT0gbnVsbCkgeworICAgICAgICBtX0NvbnRJbmZvXyA9IG5ldyBDb250cmFjdGlvbkluZm8oKTsKKyAgICAgIH0KKyAgICAgIGNoYXIgY2ggPSAwOworICAgICAgLy9TdHJpbmdCdWZmZXIgc0NoID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgLy9Db2xsYXRpb25FbGVtZW50SXRlcmF0b3IgaXQgPSBnZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3Ioc0NoLnRvU3RyaW5nKCkpOworICAgICAgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIGl0ID0gZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKCIiKTsKKyAgICAKKyAgICAgIHNoaWZ0VmFsdWVzIHMgPSBuZXcgc2hpZnRWYWx1ZXMoKTsKKyAgICAgIGludCBDRSA9IDA7CisgICAgICBjaGFyIGNvbnRyYWN0aW9uT2Zmc2V0ID0gRU5ET0ZMQVRJTk9ORVJBTkdFXysxOworICAgIAorICAgICAgZm9yKGNoID0gMDsgY2ggPD0gRU5ET0ZMQVRJTk9ORVJBTkdFXzsgY2grKykgeworICAgICAgICBzLnByaW1TaGlmdCA9IDI0OyBzLnNlY1NoaWZ0ID0gMjQ7IHMudGVyU2hpZnQgPSAyNDsKKyAgICAgICAgaWYoY2ggPCAweDEwMCkgeworICAgICAgICAgIENFID0gbV90cmllXy5nZXRMYXRpbjFMaW5lYXJWYWx1ZShjaCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgQ0UgPSBtX3RyaWVfLmdldExlYWRWYWx1ZShjaCk7CisgICAgICAgICAgaWYoQ0UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLkNFX05PVF9GT1VORF8pIHsKKyAgICAgICAgICAgIENFID0gVUNBXy5tX3RyaWVfLmdldExlYWRWYWx1ZShjaCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKCFpc1NwZWNpYWwoQ0UpKSB7IAorICAgICAgICAgIGFkZExhdGluT25lRW50cnkoY2gsIENFLCBzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzd2l0Y2ggKFJ1bGVCYXNlZENvbGxhdG9yLmdldFRhZyhDRSkpIHsKKyAgICAgICAgICBjYXNlIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5DRV9FWFBBTlNJT05fVEFHXzoKKyAgICAgICAgICAgIC8vc0NoLmRlbGV0ZSgwLCBzQ2gubGVuZ3RoKCkpOworICAgICAgICAgICAgLy9zQ2guYXBwZW5kKGNoKTsKKyAgICAgICAgICAgIC8vaXQuc2V0VGV4dChzQ2gudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBpdC5zZXRUZXh0KFVDaGFyYWN0ZXIudG9TdHJpbmcoY2gpKTsKKyAgICAgICAgICAgIHdoaWxlKChDRSA9IGl0Lm5leHQoKSkgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworICAgICAgICAgICAgICBpZihzLnByaW1TaGlmdCA8IDAgfHwgcy5zZWNTaGlmdCA8IDAgfHwgcy50ZXJTaGlmdCA8IDApIHsKKyAgICAgICAgICAgICAgICBsYXRpbk9uZUNFc19bY2hdID0gQkFJTF9PVVRfQ0VfOworICAgICAgICAgICAgICAgIGxhdGluT25lQ0VzX1tsYXRpbk9uZVRhYmxlTGVuXytjaF0gPSBCQUlMX09VVF9DRV87CisgICAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfWzIqbGF0aW5PbmVUYWJsZUxlbl8rY2hdID0gQkFJTF9PVVRfQ0VfOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGFkZExhdGluT25lRW50cnkoY2gsIENFLCBzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLkNFX0NPTlRSQUNUSU9OX1RBR186CisgICAgICAgICAgICAvLyBoZXJlIGlzIHRoZSB0cmljaworICAgICAgICAgICAgLy8gRjIgaXMgY29udHJhY3Rpb24uIFdlIGRvIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIgdG8gY29udHJhY3Rpb25zCisgICAgICAgICAgICAvLyBidXQgaGF2ZSB0d28gaW5kaWNlcywgb25lIGluIHRoZSByZWFsIGNvbnRyYWN0aW9uIHRhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgIC8vIG90aGVyIHRvIHdoZXJlIHdlIHN0dWZmZWQgdGhpbmdzLiBUaGlzIGhvcGVzIHRoYXQgd2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgLy8gbWFueSBjb250cmFjdGlvbnMgKHRoaXMgc2hvdWxkIHdvcmsgZm9yIGxhdGluLTEgdGFibGVzKS4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYoKENFICYgMHgwMEZGRjAwMCkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgICBpbnQgVUNoYXJPZmZzZXQgPSAoQ0UgJiAweEZGRkZGRikgLSBtX2NvbnRyYWN0aW9uT2Zmc2V0XzsgLy9nZXRDb250cmFjdGlvbk9mZnNldChDRSldCisgICAgCisgICAgICAgICAgICAgIENFIHw9IChjb250cmFjdGlvbk9mZnNldCAmIDB4RkZGKSA8PCAxMjsgLy8gaW5zZXJ0IHRoZSBvZmZzZXQgaW4gbGF0aW4tMSB0YWJsZQorICAgICAgICAKKyAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfW2NoXSA9IENFOworICAgICAgICAgICAgICBsYXRpbk9uZUNFc19bbGF0aW5PbmVUYWJsZUxlbl8rY2hdID0gQ0U7CisgICAgICAgICAgICAgIGxhdGluT25lQ0VzX1syKmxhdGluT25lVGFibGVMZW5fK2NoXSA9IENFOworICAgIAorICAgICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBqdW1wIGludG8gY29udHJhY3Rpb24gdGFibGUsIHBpY2sgdGhlIGVsZW1lbnRzCisgICAgICAgICAgICAgIC8vIGFuZCB1c2UgdGhlbQorICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAvL0NFID0gKihjb250cmFjdGlvbkNFcyArIChVQ2hhck9mZnNldCAtIGNvbnRyYWN0aW9uSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgIENFID0gbV9jb250cmFjdGlvbkNFX1tVQ2hhck9mZnNldF07CisgICAgICAgICAgICAgICAgICBpZihnZXRUYWcoQ0UpID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5DRV9FWFBBTlNJT05fVEFHXykgeworICAgICAgICAgICAgICAgICAgICBpbnQgaTsgICAgLyogZ2VuZXJhbCBjb3VudGVyICovCisgICAgICAgICAgICAgICAgICAgIC8vdWludDMyX3QgKkNFT2Zmc2V0ID0gKHVpbnQzMl90ICopaW1hZ2UrZ2V0RXhwYW5zaW9uT2Zmc2V0KENFKTsgLyogZmluZCB0aGUgb2Zmc2V0IHRvIGV4cGFuc2lvbiB0YWJsZSAqLworICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKChDRSAmIDB4RkZGRkYwKSA+PiA0KSAtIG1fZXhwYW5zaW9uT2Zmc2V0XzsgLy9pdC5nZXRFeHBhbnNpb25PZmZzZXQodGhpcywgQ0UpOworICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IENFICYgMHhGOyAvLyBnZXRFeHBhbnNpb25Db3VudChDRSk7CisgICAgICAgICAgICAgICAgICAgIC8vQ0UgPSAqQ0VPZmZzZXQrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYoc2l6ZSAhPSAwKSB7IC8qIGlmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMTYgZWxlbWVudHMgaW4gZXhwYW5zaW9uLCB3ZSBkb24ndCB0ZXJtaW5hdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGk8c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihzLnByaW1TaGlmdCA8IDAgfHwgcy5zZWNTaGlmdCA8IDAgfHwgcy50ZXJTaGlmdCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfW2NvbnRyYWN0aW9uT2Zmc2V0XSA9IEJBSUxfT1VUX0NFXzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfW2xhdGluT25lVGFibGVMZW5fK2NvbnRyYWN0aW9uT2Zmc2V0XSA9IEJBSUxfT1VUX0NFXzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfWzIqbGF0aW5PbmVUYWJsZUxlbl8rY29udHJhY3Rpb25PZmZzZXRdID0gQkFJTF9PVVRfQ0VfOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZExhdGluT25lRW50cnkoY29udHJhY3Rpb25PZmZzZXQsIG1fZXhwYW5zaW9uX1tvZmZzZXQraV0sIHMpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogZWxzZSwgd2UgZG8gKi8KKyAgICAgICAgICAgICAgICAgICAgICB3aGlsZShtX2V4cGFuc2lvbl9bb2Zmc2V0XSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihzLnByaW1TaGlmdCA8IDAgfHwgcy5zZWNTaGlmdCA8IDAgfHwgcy50ZXJTaGlmdCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfW2NvbnRyYWN0aW9uT2Zmc2V0XSA9IEJBSUxfT1VUX0NFXzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfW2xhdGluT25lVGFibGVMZW5fK2NvbnRyYWN0aW9uT2Zmc2V0XSA9IEJBSUxfT1VUX0NFXzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfWzIqbGF0aW5PbmVUYWJsZUxlbl8rY29udHJhY3Rpb25PZmZzZXRdID0gQkFJTF9PVVRfQ0VfOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZExhdGluT25lRW50cnkoY29udHJhY3Rpb25PZmZzZXQsIG1fZXhwYW5zaW9uX1tvZmZzZXQrK10sIHMpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250cmFjdGlvbk9mZnNldCsrOworICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCFpc1NwZWNpYWwoQ0UpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZExhdGluT25lRW50cnkoY29udHJhY3Rpb25PZmZzZXQrKywgQ0UsIHMpOworICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIGxhdGluT25lQ0VzX1tjb250cmFjdGlvbk9mZnNldF0gPSBCQUlMX09VVF9DRV87CisgICAgICAgICAgICAgICAgICAgICAgbGF0aW5PbmVDRXNfW2xhdGluT25lVGFibGVMZW5fK2NvbnRyYWN0aW9uT2Zmc2V0XSA9IEJBSUxfT1VUX0NFXzsKKyAgICAgICAgICAgICAgICAgICAgICBsYXRpbk9uZUNFc19bMipsYXRpbk9uZVRhYmxlTGVuXytjb250cmFjdGlvbk9mZnNldF0gPSBCQUlMX09VVF9DRV87CisgICAgICAgICAgICAgICAgICAgICAgY29udHJhY3Rpb25PZmZzZXQrKzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIFVDaGFyT2Zmc2V0Kys7CisgICAgICAgICAgICAgICAgICBzLnByaW1TaGlmdCA9IDI0OyBzLnNlY1NoaWZ0ID0gMjQ7IHMudGVyU2hpZnQgPSAyNDsKKyAgICAgICAgICAgICAgICAgIGlmKGNvbnRyYWN0aW9uT2Zmc2V0ID09IGxhdGluT25lVGFibGVMZW5fKSB7IC8vIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZQorICAgICAgICAgICAgICAgICAgIHJlc2l6ZUxhdGluT25lVGFibGUoMipsYXRpbk9uZVRhYmxlTGVuXyk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0gd2hpbGUobV9jb250cmFjdGlvbkluZGV4X1tVQ2hhck9mZnNldF0gIT0gMHhGRkZGKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsYXRpbk9uZUZhaWxlZF8gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gY29tcGFjdCB0YWJsZQorICAgICAgaWYoY29udHJhY3Rpb25PZmZzZXQgPCBsYXRpbk9uZVRhYmxlTGVuXykgeworICAgICAgICByZXNpemVMYXRpbk9uZVRhYmxlKGNvbnRyYWN0aW9uT2Zmc2V0KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MKKyAgICBDb250cmFjdGlvbkluZm8geworICAgICAgICBpbnQgaW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBDb250cmFjdGlvbkluZm8gbV9Db250SW5mb187CisKKyAgICBwcml2YXRlIGludCAKKyAgICBnZXRMYXRpbk9uZUNvbnRyYWN0aW9uKGludCBzdHJlbmd0aCwgaW50IENFLCBTdHJpbmcgcykgeworICAgIC8vaW50IHN0cmVuZ3RoLCBpbnQgQ0UsIFN0cmluZyBzLCBJbnRlZ2VyIGluZCkgeworICAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIC8vY29uc3QgVUNoYXIgKlVDaGFyT2Zmc2V0ID0gKFVDaGFyICopY29sbC0+aW1hZ2UrZ2V0Q29udHJhY3RPZmZzZXQoQ0UmMHhGRkYpOworICAgICAgaW50IFVDaGFyT2Zmc2V0ID0gKENFICYgMHhGRkYpIC0gbV9jb250cmFjdGlvbk9mZnNldF87CisgICAgICBpbnQgb2Zmc2V0ID0gMTsKKyAgICAgIGludCBsYXRpbk9uZU9mZnNldCA9IChDRSAmIDB4MDBGRkYwMDApID4+PiAxMjsKKyAgICAgIGNoYXIgc2NoYXIgPSAwLCB0Y2hhciA9IDA7CisgICAgCisgICAgICBmb3IoOzspIHsKKyAgICAgICAgLyoKKyAgICAgICAgaWYobGVuID09IC0xKSB7CisgICAgICAgICAgaWYoc1sqaW5kZXhdID09IDApIHsgLy8gZW5kIG9mIHN0cmluZworICAgICAgICAgICAgcmV0dXJuKGNvbGwtPmxhdGluT25lQ0VzW3N0cmVuZ3RoKmNvbGwtPmxhdGluT25lVGFibGVMZW4rbGF0aW5PbmVPZmZzZXRdKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2NoYXIgPSBzWyppbmRleF07CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAqLworICAgICAgICAgIGlmKG1fQ29udEluZm9fLmluZGV4ID09IGxlbikgeworICAgICAgICAgICAgcmV0dXJuKGxhdGluT25lQ0VzX1tzdHJlbmd0aCpsYXRpbk9uZVRhYmxlTGVuXytsYXRpbk9uZU9mZnNldF0pOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzY2hhciA9IHMuY2hhckF0KG1fQ29udEluZm9fLmluZGV4KTsKKyAgICAgICAgICB9CisgICAgICAgIC8vfQorICAgIAorICAgICAgICB3aGlsZShzY2hhciA+ICh0Y2hhciA9IG1fY29udHJhY3Rpb25JbmRleF9bVUNoYXJPZmZzZXQrb2Zmc2V0XS8qKihVQ2hhck9mZnNldCtvZmZzZXQpKi8pKSB7IC8qIHNpbmNlIHRoZSBjb250cmFjdGlvbiBjb2RlcG9pbnRzIHNob3VsZCBiZSBvcmRlcmVkLCB3ZSBza2lwIGFsbCB0aGF0IGFyZSBzbWFsbGVyICovCisgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHNjaGFyID09IHRjaGFyKSB7CisgICAgICAgICAgbV9Db250SW5mb18uaW5kZXgrKzsKKyAgICAgICAgICByZXR1cm4obGF0aW5PbmVDRXNfW3N0cmVuZ3RoKmxhdGluT25lVGFibGVMZW5fK2xhdGluT25lT2Zmc2V0K29mZnNldF0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmKHNjaGFyICA+IEVORE9GTEFUSU5PTkVSQU5HRV8gLyomIDB4RkYwMCovKSB7CisgICAgICAgICAgICByZXR1cm4gQkFJTF9PVVRfQ0VfOworICAgICAgICAgIH0KKyAgICAgICAgICAvLyBza2lwIGNvbXBsZXRlbHkgaWdub3JhYmxlcworICAgICAgICAgIGludCBpc1plcm9DRSA9IG1fdHJpZV8uZ2V0TGVhZFZhbHVlKHNjaGFyKTsgLy9VVFJJRV9HRVQzMl9GUk9NX0xFQUQoY29sbC0+bWFwcGluZywgc2NoYXIpOworICAgICAgICAgIGlmKGlzWmVyb0NFID09IDApIHsgLy8gd2UgaGF2ZSB0byBpZ25vcmUgY29tcGxldGVseSBpZ25vcmFibGVzCisgICAgICAgICAgICBtX0NvbnRJbmZvXy5pbmRleCsrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgIAorICAgICAgICAgIHJldHVybihsYXRpbk9uZUNFc19bc3RyZW5ndGgqbGF0aW5PbmVUYWJsZUxlbl8rbGF0aW5PbmVPZmZzZXRdKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIAorICAgIC8qKiAKKyAgICAgKiBUaGlzIGlzIGEgZmFzdCBzdHJjb2xsLCBnZWFyZWQgdG93YXJkcyB0ZXh0IGluIExhdGluLTEuIAorICAgICAqIEl0IHN1cHBvcnRzIGNvbnRyYWN0aW9ucyBvZiBzaXplIHR3bywgRnJlbmNoIHNlY29uZGFyaWVzCisgICAgICogYW5kIGNhc2Ugc3dpdGNoaW5nLiBZb3UgY2FuIHVzZSBpdCB3aXRoIHN0cmVuZ3RocyBwcmltYXJ5CisgICAgICogdG8gdGVydGlhcnkuIEl0IGRvZXMgbm90IHN1cHBvcnQgc2hpZnRlZCBhbmQgY2FzZSBsZXZlbC4KKyAgICAgKiBJdCByZWxpZXMgb24gdGhlIHRhYmxlIGJ1aWxkIGJ5IHNldHVwTGF0aW4xVGFibGUuIElmIGl0CisgICAgICogZG9lc24ndCB1bmRlcnN0YW5kIHNvbWV0aGluZywgaXQgd2lsbCBnbyB0byB0aGUgcmVndWxhcgorICAgICAqIHN0cmNvbGwuIAorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgaW50IAorICAgIGNvbXBhcmVVc2VMYXRpbjEoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCwgaW50IHN0YXJ0T2Zmc2V0KQorICAgIHsKKyAgICAgICAgaW50IHNMZW4gPSBzb3VyY2UubGVuZ3RoKCk7CisgICAgICAgIGludCB0TGVuID0gdGFyZ2V0Lmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgaW50IHN0cmVuZ3RoID0gZ2V0U3RyZW5ndGgoKTsKKyAgICAKKyAgICAgICAgaW50IHNJbmRleCA9IHN0YXJ0T2Zmc2V0LCB0SW5kZXggPSBzdGFydE9mZnNldDsKKyAgICAgICAgY2hhciBzQ2hhciA9IDAsIHRDaGFyID0gMDsKKyAgICAgICAgaW50IHNPcmRlcj0wLCB0T3JkZXI9MDsKKyAgICAKKyAgICAgICAgYm9vbGVhbiBlbmRPZlNvdXJjZSA9IGZhbHNlOworICAgIAorICAgICAgICAvL3VpbnQzMl90ICplbGVtZW50cyA9IGNvbGwtPmxhdGluT25lQ0VzOworICAgIAorICAgICAgICBib29sZWFuIGhhdmVDb250cmFjdGlvbnMgPSBmYWxzZTsgLy8gaWYgd2UgaGF2ZSBjb250cmFjdGlvbnMgaW4gb3VyIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBkbyBGcmVuY2ggc2Vjb25kYXJ5CisgICAgCisgICAgICAgIGludCBvZmZzZXQgPSBsYXRpbk9uZVRhYmxlTGVuXzsKKyAgICAgICAgCisgICAgICAgIC8vIERvIHRoZSBwcmltYXJ5IGxldmVsCisgICAgcHJpbUxvb3A6CisgICAgICAgIGZvcig7OykgeworICAgICAgICAgIHdoaWxlKHNPcmRlcj09MCkgeyAvLyB0aGlzIGxvb3Agc2tpcHMgcHJpbWFyeSBpZ25vcmFibGVzCisgICAgICAgICAgICAvLyBzT3JkZXI9Z2V0TmV4dGxhdGluT25lQ0Uoc291cmNlKTsKKyAgICAgICAgICAgICAgaWYoc0luZGV4PT1zTGVuKSB7CisgICAgICAgICAgICAgICAgZW5kT2ZTb3VyY2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHNDaGFyPXNvdXJjZS5jaGFyQXQoc0luZGV4KyspOyAvL1tzSW5kZXgrK107ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgaWYoc0NoYXIgPiBFTkRPRkxBVElOT05FUkFOR0VfKSB7IC8vIGlmIHdlIGVuY291bnRlciBub24tbGF0aW4tMSwgd2UgYmFpbCBvdXQgCisgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJSIik7CisgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlUmVndWxhcihzb3VyY2UsIHRhcmdldCwgc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc09yZGVyID0gbGF0aW5PbmVDRXNfW3NDaGFyXTsKKyAgICAgICAgICAgIGlmKGlzU3BlY2lhbChzT3JkZXIpKSB7IC8vIGlmIHdlIGdvdCBhIHNwZWNpYWwKKyAgICAgICAgICAgICAgLy8gc3BlY2lhbHMgY2FuIGJhc2ljYWxseSBiZSBlaXRoZXIgY29udHJhY3Rpb25zIG9yIGJhaWwtb3V0IHNpZ25zLiBJZiB3ZSBnZXQgYW55dGhpbmcKKyAgICAgICAgICAgICAgLy8gZWxzZSwgd2UnbGwgYmFpbCBvdXQgYW55d2FzeQorICAgICAgICAgICAgICBpZihnZXRUYWcoc09yZGVyKSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuQ0VfQ09OVFJBQ1RJT05fVEFHXykgeworICAgICAgICAgICAgICAgIG1fQ29udEluZm9fLmluZGV4ID0gc0luZGV4OworICAgICAgICAgICAgICAgIHNPcmRlciA9IGdldExhdGluT25lQ29udHJhY3Rpb24oMCwgc09yZGVyLCBzb3VyY2UpOworICAgICAgICAgICAgICAgIHNJbmRleCA9IG1fQ29udEluZm9fLmluZGV4OworICAgICAgICAgICAgICAgIGhhdmVDb250cmFjdGlvbnMgPSB0cnVlOyAvLyBpZiB0aGVyZSBhcmUgY29udHJhY3Rpb25zLCB3ZSBjYW5ub3QgZG8gRnJlbmNoIHNlY29uZGFyeQorICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGlmIHRoZXJlIGFyZSBjb250cmFjdGlvbnMgaW4gdGhlIHRhYmxlLCBidXQgd2UgYWx3YXlzIHVzZSBqdXN0IG9uZSBjaGFyLAorICAgICAgICAgICAgICAgIC8vIHdlIG1pZ2h0IGJlIGFibGUgdG8gZG8gRnJlbmNoLiBUaGlzIHNob3VsZCBiZSBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZihpc1NwZWNpYWwoc09yZGVyKSAvKj09IFVDT0xfQkFJTF9PVVRfQ0UqLykgeworICAgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJTIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVSZWd1bGFyKHNvdXJjZSwgdGFyZ2V0LCBzdGFydE9mZnNldCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgCisgICAgICAgICAgd2hpbGUodE9yZGVyPT0wKSB7ICAvLyB0aGlzIGxvb3Agc2tpcHMgcHJpbWFyeSBpZ25vcmFibGVzCisgICAgICAgICAgICAvLyB0T3JkZXI9Z2V0TmV4dGxhdGluT25lQ0UodGFyZ2V0KTsKKyAgICAgICAgICAgIGlmKHRJbmRleD09dExlbikgeworICAgICAgICAgICAgICBpZihlbmRPZlNvdXJjZSkgeworICAgICAgICAgICAgICAgIGJyZWFrIHByaW1Mb29wOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0Q2hhcj10YXJnZXQuY2hhckF0KHRJbmRleCsrKTsgLy9bdEluZGV4KytdOworICAgICAgICAgICAgaWYodENoYXIgPiBFTkRPRkxBVElOT05FUkFOR0VfKSB7IC8vIGlmIHdlIGVuY291bnRlciBub24tbGF0aW4tMSwgd2UgYmFpbCBvdXQgCisgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJSIik7CisgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlUmVndWxhcihzb3VyY2UsIHRhcmdldCwgc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdE9yZGVyID0gbGF0aW5PbmVDRXNfW3RDaGFyXTsKKyAgICAgICAgICAgIGlmKGlzU3BlY2lhbCh0T3JkZXIpKSB7CisgICAgICAgICAgICAgIC8vIEhhbmRsaW5nIHNwZWNpYWxzLCBzZWUgdGhlIGNvbW1lbnRzIGZvciBzb3VyY2UKKyAgICAgICAgICAgICAgaWYoZ2V0VGFnKHRPcmRlcikgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLkNFX0NPTlRSQUNUSU9OX1RBR18pIHsKKyAgICAgICAgICAgICAgICBtX0NvbnRJbmZvXy5pbmRleCA9IHRJbmRleDsKKyAgICAgICAgICAgICAgICB0T3JkZXIgPSBnZXRMYXRpbk9uZUNvbnRyYWN0aW9uKDAsIHRPcmRlciwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB0SW5kZXggPSBtX0NvbnRJbmZvXy5pbmRleDsKKyAgICAgICAgICAgICAgICBoYXZlQ29udHJhY3Rpb25zID0gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZihpc1NwZWNpYWwodE9yZGVyKS8qPT0gVUNPTF9CQUlMX09VVF9DRSovKSB7CisgICAgICAgICAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwgIlMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZVJlZ3VsYXIoc291cmNlLCB0YXJnZXQsIHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZihlbmRPZlNvdXJjZSkgeyAvLyBzb3VyY2UgaXMgZmluaXNoZWQsIGJ1dCB0YXJnZXQgaXMgbm90LCBzYXkgdGhlIHJlc3VsdC4KKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICBpZihzT3JkZXIgPT0gdE9yZGVyKSB7IC8vIGlmIHdlIGhhdmUgc2FtZSBDRXMsIHdlIGNvbnRpbnVlIHRoZSBsb29wCisgICAgICAgICAgICBzT3JkZXIgPSAwOyB0T3JkZXIgPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGNvbXBhcmUgY3VycmVudCB0b3AgYnl0ZXMKKyAgICAgICAgICAgIGlmKCgoc09yZGVyXnRPcmRlcikmMHhGRjAwMDAwMCkhPTApIHsKKyAgICAgICAgICAgICAgLy8gdG9wIGJ5dGVzIGRpZmZlciwgcmV0dXJuIGRpZmZlcmVuY2UKKyAgICAgICAgICAgICAgaWYoc09yZGVyID4+PiA4IDwgdE9yZGVyID4+PiA4KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgcmV0dXJuIChpbnQzMl90KShzT3JkZXI+PjI0KS0oaW50MzJfdCkodE9yZGVyPj4yNCk7CisgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIG11c3QgcmV0dXJuIGVudW0gdmFsdWUKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8vIHRvcCBieXRlcyBtYXRjaCwgY29udGludWUgd2l0aCBmb2xsb3dpbmcgYnl0ZXMKKyAgICAgICAgICAgIHNPcmRlcjw8PTg7CisgICAgICAgICAgICB0T3JkZXI8PD04OworICAgICAgICAgIH0gCisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gYWZ0ZXIgcHJpbWFyeSBsb29wLCB3ZSBkZWZpbml0ZWx5IGtub3cgdGhlIHNpemVzIG9mIHN0cmluZ3MsIAorICAgICAgICAvLyBzbyB3ZSBzZXQgaXQgYW5kIHVzZSBzaW1wbGVyIGxvb3AgZm9yIHNlY29uZGFyaWVzIGFuZCB0ZXJ0aWFyaWVzCisgICAgICAgIC8vc0xlbiA9IHNJbmRleDsgdExlbiA9IHRJbmRleDsKKyAgICAgICAgaWYoc3RyZW5ndGggPj0gU0VDT05EQVJZKSB7CisgICAgICAgICAgLy8gYWRqdXN0IHRoZSB0YWJsZSBiZWdnaW5pbmcKKyAgICAgICAgICAvL2xhdGluT25lQ0VzXyArPSBjb2xsLT5sYXRpbk9uZVRhYmxlTGVuOworICAgICAgICAgIGVuZE9mU291cmNlID0gZmFsc2U7IAorICAgIAorICAgICAgICAgIGlmKCFtX2lzRnJlbmNoQ29sbGF0aW9uXykgeyAvLyBub24gRnJlbmNoCisgICAgICAgICAgICAvLyBUaGlzIGxvb3AgaXMgYSBzaW1wbGlmaWVkIGNvcHkgb2YgcHJpbWFyeSBsb29wCisgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCB3aG9sZSBzdHJpbmdzIGFyZSBsYXRpbi0xLCBzbyB3ZSBkb24ndCAKKyAgICAgICAgICAgIC8vIGNoZWNrIGZvciB0aGF0LiBXZSBhbHNvIGtub3cgdGhhdCB3ZSBvbmx5IGhhdmUgY29udHJhY3Rpb25zIGFzIAorICAgICAgICAgICAgLy8gc3BlY2lhbHMuCisgICAgICAgICAgICAvL3NJbmRleCA9IDA7IHRJbmRleCA9IDA7CisgICAgICAgICAgICBzSW5kZXggPSBzdGFydE9mZnNldDsgdEluZGV4ID0gc3RhcnRPZmZzZXQ7CisgICAgc2VjTG9vcDoKKyAgICAgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgICB3aGlsZShzT3JkZXI9PTApIHsKKyAgICAgICAgICAgICAgICBpZihzSW5kZXg9PXNMZW4pIHsKKyAgICAgICAgICAgICAgICAgIGVuZE9mU291cmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzQ2hhcj1zb3VyY2UuY2hhckF0KHNJbmRleCsrKTsgLy9bc0luZGV4KytdOworICAgICAgICAgICAgICAgIHNPcmRlciA9IGxhdGluT25lQ0VzX1tvZmZzZXQrc0NoYXJdOworICAgICAgICAgICAgICAgIGlmKGlzU3BlY2lhbChzT3JkZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fQ29udEluZm9fLmluZGV4ID0gc0luZGV4OworICAgICAgICAgICAgICAgICAgICBzT3JkZXIgPSBnZXRMYXRpbk9uZUNvbnRyYWN0aW9uKDEsIHNPcmRlciwgc291cmNlKTsKKyAgICAgICAgICAgICAgICAgICAgc0luZGV4ID0gbV9Db250SW5mb18uaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgIHdoaWxlKHRPcmRlcj09MCkgeworICAgICAgICAgICAgICAgIGlmKHRJbmRleD09dExlbikgeworICAgICAgICAgICAgICAgICAgaWYoZW5kT2ZTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2VjTG9vcDsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0Q2hhcj10YXJnZXQuY2hhckF0KHRJbmRleCsrKTsgLy9bdEluZGV4KytdOworICAgICAgICAgICAgICAgIHRPcmRlciA9IGxhdGluT25lQ0VzX1tvZmZzZXQrdENoYXJdOworICAgICAgICAgICAgICAgIGlmKGlzU3BlY2lhbCh0T3JkZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fQ29udEluZm9fLmluZGV4ID0gdEluZGV4OworICAgICAgICAgICAgICAgICAgICB0T3JkZXIgPSBnZXRMYXRpbk9uZUNvbnRyYWN0aW9uKDEsIHRPcmRlciwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgdEluZGV4ID0gbV9Db250SW5mb18uaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmKGVuZE9mU291cmNlKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgaWYoc09yZGVyID09IHRPcmRlcikgeworICAgICAgICAgICAgICAgIHNPcmRlciA9IDA7IHRPcmRlciA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gc2VlIHByaW1hcnkgbG9vcCBmb3IgY29tbWVudHMgb24gdGhpcworICAgICAgICAgICAgICAgIGlmKCgoc09yZGVyXnRPcmRlcikmMHhGRjAwMDAwMCkhPTApIHsKKyAgICAgICAgICAgICAgICAgIGlmKHNPcmRlciA+Pj4gOCA8IHRPcmRlciA+Pj4gOCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc09yZGVyPDw9ODsKKyAgICAgICAgICAgICAgICB0T3JkZXI8PD04OworICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7IC8vIEZyZW5jaAorICAgICAgICAgICAgaWYoaGF2ZUNvbnRyYWN0aW9ucykgeyAvLyBpZiB3ZSBoYXZlIGNvbnRyYWN0aW9ucywgd2UgaGF2ZSB0byBiYWlsIG91dAorICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBkb24ndCByZWFsbHkga25vdyBob3cgdG8gaGFuZGxlIHRoZW0gaGVyZQorICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZVJlZ3VsYXIoc291cmNlLCB0YXJnZXQsIHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZvciBGcmVuY2gsIHdlIGdvIGJhY2t3YXJkcworICAgICAgICAgICAgc0luZGV4ID0gc0xlbjsgdEluZGV4ID0gdExlbjsKKyAgICBzZWNGTG9vcDoKKyAgICAgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgICB3aGlsZShzT3JkZXI9PTApIHsKKyAgICAgICAgICAgICAgICBpZihzSW5kZXg9PXN0YXJ0T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICBlbmRPZlNvdXJjZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc0NoYXI9c291cmNlLmNoYXJBdCgtLXNJbmRleCk7IC8vWy0tc0luZGV4XTsKKyAgICAgICAgICAgICAgICBzT3JkZXIgPSBsYXRpbk9uZUNFc19bb2Zmc2V0K3NDaGFyXTsKKyAgICAgICAgICAgICAgICAvLyBkb24ndCBldmVuIGxvb2sgZm9yIGNvbnRyYWN0aW9ucworICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgIHdoaWxlKHRPcmRlcj09MCkgeworICAgICAgICAgICAgICAgIGlmKHRJbmRleD09c3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgIGlmKGVuZE9mU291cmNlKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNlY0ZMb29wOworICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRDaGFyPXRhcmdldC5jaGFyQXQoLS10SW5kZXgpOyAvL1stLXRJbmRleF07CisgICAgICAgICAgICAgICAgdE9yZGVyID0gbGF0aW5PbmVDRXNfW29mZnNldCt0Q2hhcl07CisgICAgICAgICAgICAgICAgLy8gZG9uJ3QgZXZlbiBsb29rIGZvciBjb250cmFjdGlvbnMKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZihlbmRPZlNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgIGlmKHNPcmRlciA9PSB0T3JkZXIpIHsKKyAgICAgICAgICAgICAgICBzT3JkZXIgPSAwOyB0T3JkZXIgPSAwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIHNlZSB0aGUgcHJpbWFyeSBsb29wIGZvciBjb21tZW50cworICAgICAgICAgICAgICAgIGlmKCgoc09yZGVyXnRPcmRlcikmMHhGRjAwMDAwMCkhPTApIHsKKyAgICAgICAgICAgICAgICAgIGlmKHNPcmRlciA+Pj4gOCA8IHRPcmRlciA+Pj4gOCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc09yZGVyPDw9ODsKKyAgICAgICAgICAgICAgICB0T3JkZXI8PD04OworICAgICAgICAgICAgICB9ICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSAKKyAgICAKKyAgICAgICAgaWYoc3RyZW5ndGggPj0gVEVSVElBUlkpIHsKKyAgICAgICAgICAvLyB0ZXJ0aWFyeSBsb29wIGlzIHRoZSBzYW1lIGFzIHNlY29uZGFyeSAoZXhjZXB0IG5vIEZyZW5jaCkKKyAgICAgICAgICBvZmZzZXQgKz0gbGF0aW5PbmVUYWJsZUxlbl87CisgICAgICAgICAgLy9zSW5kZXggPSAwOyB0SW5kZXggPSAwOworICAgICAgICAgIHNJbmRleCA9IHN0YXJ0T2Zmc2V0OyB0SW5kZXggPSBzdGFydE9mZnNldDsKKyAgICAgICAgICBlbmRPZlNvdXJjZSA9IGZhbHNlOworICAgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgd2hpbGUoc09yZGVyPT0wKSB7CisgICAgICAgICAgICAgIGlmKHNJbmRleD09c0xlbikgeworICAgICAgICAgICAgICAgIGVuZE9mU291cmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzQ2hhcj1zb3VyY2UuY2hhckF0KHNJbmRleCsrKTsgLy9bc0luZGV4KytdOworICAgICAgICAgICAgICBzT3JkZXIgPSBsYXRpbk9uZUNFc19bb2Zmc2V0K3NDaGFyXTsKKyAgICAgICAgICAgICAgaWYoaXNTcGVjaWFsKHNPcmRlcikpIHsKKyAgICAgICAgICAgICAgICBtX0NvbnRJbmZvXy5pbmRleCA9IHNJbmRleDsKKyAgICAgICAgICAgICAgICBzT3JkZXIgPSBnZXRMYXRpbk9uZUNvbnRyYWN0aW9uKDIsIHNPcmRlciwgc291cmNlKTsKKyAgICAgICAgICAgICAgICBzSW5kZXggPSBtX0NvbnRJbmZvXy5pbmRleDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUodE9yZGVyPT0wKSB7CisgICAgICAgICAgICAgIGlmKHRJbmRleD09dExlbikgeworICAgICAgICAgICAgICAgIGlmKGVuZE9mU291cmNlKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gMDsgLy8gaWYgYm90aCBzdHJpbmdzIGFyZSBhdCB0aGUgZW5kLCB0aGV5IGFyZSBlcXVhbAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdENoYXI9dGFyZ2V0LmNoYXJBdCh0SW5kZXgrKyk7IC8vW3RJbmRleCsrXTsKKyAgICAgICAgICAgICAgdE9yZGVyID0gbGF0aW5PbmVDRXNfW29mZnNldCt0Q2hhcl07CisgICAgICAgICAgICAgIGlmKGlzU3BlY2lhbCh0T3JkZXIpKSB7CisgICAgICAgICAgICAgICAgbV9Db250SW5mb18uaW5kZXggPSB0SW5kZXg7CisgICAgICAgICAgICAgICAgdE9yZGVyID0gZ2V0TGF0aW5PbmVDb250cmFjdGlvbigyLCB0T3JkZXIsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgdEluZGV4ID0gbV9Db250SW5mb18uaW5kZXg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGVuZE9mU291cmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoc09yZGVyID09IHRPcmRlcikgeworICAgICAgICAgICAgICBzT3JkZXIgPSAwOyB0T3JkZXIgPSAwOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmKCgoc09yZGVyXnRPcmRlcikmMHhmZjAwMDAwMCkhPTApIHsKKyAgICAgICAgICAgICAgICBpZihzT3JkZXIgPj4+IDggPCB0T3JkZXIgPj4+IDgpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHNPcmRlcjw8PTg7CisgICAgICAgICAgICAgIHRPcmRlcjw8PTg7CisgICAgICAgICAgICB9IAorICAgICAgICAgIH0KKyAgICAgICAgfSAKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSAgICAKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1J1bGVCYXNlZE51bWJlckZvcm1hdC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvUnVsZUJhc2VkTnVtYmVyRm9ybWF0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjE4ZmQ1NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1J1bGVCYXNlZE51bWJlckZvcm1hdC5qYXZhCkBAIC0wLDAgKzEsMTMzMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvUnVsZUJhc2VkTnVtYmVyRm9ybWF0LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjI6MjAgJCAKKyAqICRSZXZpc2lvbjogMS4xMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVUNoYXJhY3RlclByb3BlcnR5OworCitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CitpbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKKworLyoqCisgKiA8cD5BIGNsYXNzIHRoYXQgZm9ybWF0cyBudW1iZXJzIGFjY29yZGluZyB0byBhIHNldCBvZiBydWxlcy4gVGhpcyBudW1iZXIgZm9ybWF0dGVyIGlzCisgKiB0eXBpY2FsbHkgdXNlZCBmb3Igc3BlbGxpbmcgb3V0IG51bWVyaWMgdmFsdWVzIGluIHdvcmRzIChlLmcuLCAyNSwzNDc2IGFzCisgKiAmcXVvdDt0d2VudHktZml2ZSB0aG91c2FuZCB0aHJlZSBodW5kcmVkIHNldmVudHktc2l4JnF1b3Q7IG9yICZxdW90O3Zpbmd0LWNpbnEgbWlsbGUgdHJvaXMKKyAqIGNlbnRzIHNvaXhhbnRlLXNlaXplJnF1b3Q7IG9yCisgKiAmcXVvdDtmdW5mdW5kendhbnppZ3RhdXNlbmRkcmVpaHVuZGVydHNlY2hzdW5kc2llYnppZyZxdW90OyksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGZvcgorICogb3RoZXIgY29tcGxpY2F0ZWQgZm9ybWF0dGluZyB0YXNrcywgc3VjaCBhcyBmb3JtYXR0aW5nIGEgbnVtYmVyIG9mIHNlY29uZHMgYXMgaG91cnMsCisgKiBtaW51dGVzIGFuZCBzZWNvbmRzIChlLmcuLCAzLDczMCBhcyAmcXVvdDsxOjAyOjEwJnF1b3Q7KS48L3A+CisgKgorICogPHA+VGhlIHJlc291cmNlcyBjb250YWluIHRocmVlIHByZWRlZmluZWQgZm9ybWF0dGVycyBmb3IgZWFjaCBsb2NhbGU6IHNwZWxsb3V0LCB3aGljaAorICogc3BlbGxzIG91dCBhIHZhbHVlIGluIHdvcmRzICgxMjMgaXMgJnF1b3Q7b25lIGh1bmRyZWQgdHdlbnR5LXRocmVlJnF1b3Q7KTsgb3JkaW5hbCwgd2hpY2gKKyAqIGFwcGVuZHMgYW4gb3JkaW5hbCBzdWZmaXggdG8gdGhlIGVuZCBvZiBhIG51bWVyYWwgKDEyMyBpcyAmcXVvdDsxMjNyZCZxdW90Oyk7IGFuZAorICogZHVyYXRpb24sIHdoaWNoIHNob3dzIGEgZHVyYXRpb24gaW4gc2Vjb25kcyBhcyBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgKDEyMyBpcworICogJnF1b3Q7MjowMyZxdW90OykuJm5ic3A7IFRoZSBjbGllbnQgY2FuIGFsc28gZGVmaW5lIG1vcmUgc3BlY2lhbGl6ZWQgPHR0PlJ1bGVCYXNlZE51bWJlckZvcm1hdDwvdHQ+cworICogYnkgc3VwcGx5aW5nIHByb2dyYW1tZXItZGVmaW5lZCBydWxlIHNldHMuPC9wPgorICoKKyAqIDxwPlRoZSBiZWhhdmlvciBvZiBhIDx0dD5SdWxlQmFzZWROdW1iZXJGb3JtYXQ8L3R0PiBpcyBzcGVjaWZpZWQgYnkgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uCisgKiB0aGF0IGlzIGVpdGhlciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIGFzIGEgPHR0PlN0cmluZzwvdHQ+IG9yIGxvYWRlZCBmcm9tIGEgcmVzb3VyY2UKKyAqIGJ1bmRsZS4gSW4gaXRzIHNpbXBsZXN0IGZvcm0sIHRoZSBkZXNjcmlwdGlvbiBjb25zaXN0cyBvZiBhIHNlbWljb2xvbi1kZWxpbWl0ZWQgbGlzdCBvZiA8ZW0+cnVsZXMuPC9lbT4KKyAqIEVhY2ggcnVsZSBoYXMgYSBzdHJpbmcgb2Ygb3V0cHV0IHRleHQgYW5kIGEgdmFsdWUgb3IgcmFuZ2Ugb2YgdmFsdWVzIGl0IGlzIGFwcGxpY2FibGUgdG8uCisgKiBJbiBhIHR5cGljYWwgc3BlbGxvdXQgcnVsZSBzZXQsIHRoZSBmaXJzdCB0d2VudHkgcnVsZXMgYXJlIHRoZSB3b3JkcyBmb3IgdGhlIG51bWJlcnMgZnJvbQorICogMCB0byAxOTo8L3A+CisgKgorICogPHByZT56ZXJvOyBvbmU7IHR3bzsgdGhyZWU7IGZvdXI7IGZpdmU7IHNpeDsgc2V2ZW47IGVpZ2h0OyBuaW5lOworICogdGVuOyBlbGV2ZW47IHR3ZWx2ZTsgdGhpcnRlZW47IGZvdXJ0ZWVuOyBmaWZ0ZWVuOyBzaXh0ZWVuOyBzZXZlbnRlZW47IGVpZ2h0ZWVuOyBuaW5ldGVlbjs8L3ByZT4KKyAqCisgKiA8cD5Gb3IgbGFyZ2VyIG51bWJlcnMsIHdlIGNhbiB1c2UgdGhlIHByZWNlZGluZyBzZXQgb2YgcnVsZXMgdG8gZm9ybWF0IHRoZSBvbmVzIHBsYWNlLCBhbmQKKyAqIHdlIG9ubHkgaGF2ZSB0byBzdXBwbHkgdGhlIHdvcmRzIGZvciB0aGUgbXVsdGlwbGVzIG9mIDEwOjwvcD4KKyAqCisgKiA8cHJlPjIwOiB0d2VudHlbLSZndDsmZ3Q7XTsKKyAqIDMwOiB0aGlydHl7LSZndDsmZ3Q7XTsKKyAqIDQwOiBmb3J0eVstJmd0OyZndDtdOworICogNTA6IGZpZnR5Wy0mZ3Q7Jmd0O107CisgKiA2MDogc2l4dHlbLSZndDsmZ3Q7XTsKKyAqIDcwOiBzZXZlbnR5Wy0mZ3Q7Jmd0O107CisgKiA4MDogZWlnaHR5Wy0mZ3Q7Jmd0O107CisgKiA5MDogbmluZXR5Wy0mZ3Q7Jmd0O107PC9wcmU+CisgKgorICogPHA+SW4gdGhlc2UgcnVsZXMsIHRoZSA8ZW0+YmFzZSB2YWx1ZTwvZW0+IGlzIHNwZWxsZWQgb3V0IGV4cGxpY2l0bHkgYW5kIHNldCBvZmYgZnJvbSB0aGUKKyAqIHJ1bGUncyBvdXRwdXQgdGV4dCB3aXRoIGEgY29sb24uIFRoZSBydWxlcyBhcmUgaW4gYSBzb3J0ZWQgbGlzdCwgYW5kIGEgcnVsZSBpcyBhcHBsaWNhYmxlCisgKiB0byBhbGwgbnVtYmVycyBmcm9tIGl0cyBvd24gYmFzZSB2YWx1ZSB0byBvbmUgbGVzcyB0aGFuIHRoZSBuZXh0IHJ1bGUncyBiYXNlIHZhbHVlLiBUaGUKKyAqICZxdW90OyZndDsmZ3Q7JnF1b3Q7IHRva2VuIGlzIGNhbGxlZCBhIDxlbT5zdWJzdGl0dXRpb248L2VtPiBhbmQgdGVsbHMgdGhlIGZvbWF0dGVyIHRvCisgKiBpc29sYXRlIHRoZSBudW1iZXIncyBvbmVzIGRpZ2l0LCBmb3JtYXQgaXQgdXNpbmcgdGhpcyBzYW1lIHNldCBvZiBydWxlcywgYW5kIHBsYWNlIHRoZQorICogcmVzdWx0IGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgJnF1b3Q7Jmd0OyZndDsmcXVvdDsgdG9rZW4uIFRleHQgaW4gYnJhY2tldHMgaXMgb21pdHRlZCBpZgorICogdGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQgaXMgYW4gZXZlbiBtdWx0aXBsZSBvZiAxMCAodGhlIGh5cGhlbiBpcyBhIGxpdGVyYWwgaHlwaGVuOyAyNAorICogaXMgJnF1b3Q7dHdlbnR5LWZvdXIsJnF1b3Q7IG5vdCAmcXVvdDt0d2VudHkgZm91ciZxdW90OykuPC9wPgorICoKKyAqIDxwPkZvciBldmVuIGxhcmdlciBudW1iZXJzLCB3ZSBjYW4gYWN0dWFsbHkgbG9vayB1cCBzZXZlcmFsIHBhcnRzIG9mIHRoZSBudW1iZXIgaW4gdGhlCisgKiBsaXN0OjwvcD4KKyAqCisgKiA8cHJlPjEwMDogJmx0OyZsdDsgaHVuZHJlZFsgJmd0OyZndDtdOzwvcHJlPgorICoKKyAqIDxwPlRoZSAmcXVvdDsmbHQ7Jmx0OyZxdW90OyByZXByZXNlbnRzIGEgbmV3IGtpbmQgb2Ygc3Vic3RpdHV0aW9uLiBUaGUgJmx0OyZsdDsgaXNvbGF0ZXMKKyAqIHRoZSBodW5kcmVkcyBkaWdpdCAoYW5kIGFueSBkaWdpdHMgdG8gaXRzIGxlZnQpLCBmb3JtYXRzIGl0IHVzaW5nIHRoaXMgc2FtZSBydWxlIHNldCwgYW5kCisgKiBwbGFjZXMgdGhlIHJlc3VsdCB3aGVyZSB0aGUgJnF1b3Q7Jmx0OyZsdDsmcXVvdDsgd2FzLiBOb3RpY2UgYWxzbyB0aGF0IHRoZSBtZWFuaW5nIG9mCisgKiAmZ3Q7Jmd0OyBoYXMgY2hhbmdlZDogaXQgbm93IHJlZmVycyB0byBib3RoIHRoZSB0ZW5zIGFuZCB0aGUgb25lcyBkaWdpdHMuIFRoZSBtZWFuaW5nIG9mCisgKiBib3RoIHN1YnN0aXR1dGlvbnMgZGVwZW5kcyBvbiB0aGUgcnVsZSdzIGJhc2UgdmFsdWUuIFRoZSBiYXNlIHZhbHVlIGRldGVybWluZXMgdGhlIHJ1bGUncyA8ZW0+ZGl2aXNvciw8L2VtPgorICogd2hpY2ggaXMgdGhlIGhpZ2hlc3QgcG93ZXIgb2YgMTAgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGJhc2UgdmFsdWUgKHRoZSB1c2VyCisgKiBjYW4gY2hhbmdlIHRoaXMpLiBUbyBmaWxsIGluIHRoZSBzdWJzdGl0dXRpb25zLCB0aGUgZm9ybWF0dGVyIGRpdmlkZXMgdGhlIG51bWJlciBiZWluZworICogZm9ybWF0dGVkIGJ5IHRoZSBkaXZpc29yLiBUaGUgaW50ZWdyYWwgcXVvdGllbnQgaXMgdXNlZCB0byBmaWxsIGluIHRoZSAmbHQ7Jmx0OworICogc3Vic3RpdHV0aW9uLCBhbmQgdGhlIHJlbWFpbmRlciBpcyB1c2VkIHRvIGZpbGwgaW4gdGhlICZndDsmZ3Q7IHN1YnN0aXR1dGlvbi4gVGhlIG1lYW5pbmcKKyAqIG9mIHRoZSBicmFja2V0cyBjaGFuZ2VzIHNpbWlsYXJseTogdGV4dCBpbiBicmFja2V0cyBpcyBvbWl0dGVkIGlmIHRoZSB2YWx1ZSBiZWluZworICogZm9ybWF0dGVkIGlzIGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIHJ1bGUncyBkaXZpc29yLiBUaGUgcnVsZXMgYXJlIGFwcGxpZWQgcmVjdXJzaXZlbHksIHNvCisgKiBpZiBhIHN1YnN0aXR1dGlvbiBpcyBmaWxsZWQgaW4gd2l0aCB0ZXh0IHRoYXQgaW5jbHVkZXMgYW5vdGhlciBzdWJzdGl0dXRpb24sIHRoYXQKKyAqIHN1YnN0aXR1dGlvbiBpcyBhbHNvIGZpbGxlZCBpbi48L3A+CisgKgorICogPHA+VGhpcyBydWxlIGNvdmVycyB2YWx1ZXMgdXAgdG8gOTk5LCBhdCB3aGljaCBwb2ludCB3ZSBhZGQgYW5vdGhlciBydWxlOjwvcD4KKyAqCisgKiA8cHJlPjEwMDA6ICZsdDsmbHQ7IHRob3VzYW5kWyAmZ3Q7Jmd0O107PC9wcmU+CisgKgorICogPHA+QWdhaW4sIHRoZSBtZWFuaW5ncyBvZiB0aGUgYnJhY2tldHMgYW5kIHN1YnN0aXR1dGlvbiB0b2tlbnMgc2hpZnQgYmVjYXVzZSB0aGUgcnVsZSdzCisgKiBiYXNlIHZhbHVlIGlzIGEgaGlnaGVyIHBvd2VyIG9mIDEwLCBjaGFuZ2luZyB0aGUgcnVsZSdzIGRpdmlzb3IuIFRoaXMgcnVsZSBjYW4gYWN0dWFsbHkgYmUKKyAqIHVzZWQgYWxsIHRoZSB3YXkgdXAgdG8gOTk5LDk5OS4gVGhpcyBhbGxvd3MgdXMgdG8gZmluaXNoIG91dCB0aGUgcnVsZXMgYXMgZm9sbG93czo8L3A+CisgKgorICogPHByZT4xLDAwMCwwMDA6ICZsdDsmbHQ7IG1pbGxpb25bICZndDsmZ3Q7XTsKKyAqIDEsMDAwLDAwMCwwMDA6ICZsdDsmbHQ7IGJpbGxpb25bICZndDsmZ3Q7XTsKKyAqIDEsMDAwLDAwMCwwMDAsMDAwOiAmbHQ7Jmx0OyB0cmlsbGlvblsgJmd0OyZndDtdOworICogMSwwMDAsMDAwLDAwMCwwMDAsMDAwOiBPVVQgT0YgUkFOR0UhOzwvcHJlPgorICoKKyAqIDxwPkNvbW1hcywgcGVyaW9kcywgYW5kIHNwYWNlcyBjYW4gYmUgdXNlZCBpbiB0aGUgYmFzZSB2YWx1ZXMgdG8gaW1wcm92ZSBsZWdpYmlsaXR5IGFuZAorICogYXJlIGlnbm9yZWQgYnkgdGhlIHJ1bGUgcGFyc2VyLiBUaGUgbGFzdCBydWxlIGluIHRoZSBsaXN0IGlzIGN1c3RvbWFyaWx5IHRyZWF0ZWQgYXMgYW4KKyAqICZxdW90O292ZXJmbG93IHJ1bGUsJnF1b3Q7IGFwcGx5aW5nIHRvIGV2ZXJ5dGhpbmcgZnJvbSBpdHMgYmFzZSB2YWx1ZSBvbiB1cCwgYW5kIG9mdGVuIChhcworICogaW4gdGhpcyBleGFtcGxlKSBiZWluZyB1c2VkIHRvIHByaW50IG91dCBhbiBlcnJvciBtZXNzYWdlIG9yIGRlZmF1bHQgcmVwcmVzZW50YXRpb24uCisgKiBOb3RpY2UgYWxzbyB0aGF0IHRoZSBzaXplIG9mIHRoZSBtYWpvciBncm91cGluZ3MgaW4gbGFyZ2UgbnVtYmVycyBpcyBjb250cm9sbGVkIGJ5IHRoZQorICogc3BhY2luZyBvZiB0aGUgcnVsZXM6IGJlY2F1c2UgaW4gRW5nbGlzaCB3ZSBncm91cCBudW1iZXJzIGJ5IHRob3VzYW5kLCB0aGUgaGlnaGVyIHJ1bGVzCisgKiBhcmUgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciBieSBhIGZhY3RvciBvZiAxLDAwMC48L3A+CisgKgorICogPHA+VG8gc2VlIGhvdyB0aGVzZSBydWxlcyBhY3R1YWxseSB3b3JrIGluIHByYWN0aWNlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgKiBGb3JtYXR0aW5nIDI1LDQzMCB3aXRoIHRoaXMgcnVsZSBzZXQgd291bGQgd29yayBsaWtlIHRoaXM6PC9wPgorICoKKyAqIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI2MzAiPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSIyMSI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjI1NyIgdmFsaWduPSJ0b3AiPjxzdHJvbmc+Jmx0OyZsdDsgdGhvdXNhbmQgJmd0OyZndDs8L3N0cm9uZz48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMzQwIiB2YWxpZ249InRvcCI+W3RoZSBydWxlIHdob3NlIGJhc2UgdmFsdWUgaXMgMSwwMDAgaXMgYXBwbGljYWJsZSB0byAyNSwzNDBdPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iMjEiPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIyNTciIHZhbGlnbj0idG9wIj48c3Ryb25nPnR3ZW50eS0mZ3Q7Jmd0Ozwvc3Ryb25nPiB0aG91c2FuZCAmZ3Q7Jmd0OzwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIzNDAiIHZhbGlnbj0idG9wIj5bMjUsMzQwIG92ZXIgMSwwMDAgaXMgMjUuIFRoZSBydWxlIGZvciAyMCBhcHBsaWVzLl08L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSIyMSI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjI1NyIgdmFsaWduPSJ0b3AiPnR3ZW50eS08c3Ryb25nPmZpdmU8L3N0cm9uZz4gdGhvdXNhbmQgJmd0OyZndDs8L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMzQwIiB2YWxpZ249InRvcCI+WzI1IG1vZCAxMCBpcyA1LiBUaGUgcnVsZSBmb3IgNSBpcyAmcXVvdDtmaXZlLiZxdW90OzwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjIxIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMjU3IiB2YWxpZ249InRvcCI+dHdlbnR5LWZpdmUgdGhvdXNhbmQgPHN0cm9uZz4mbHQ7Jmx0OyBodW5kcmVkICZndDsmZ3Q7PC9zdHJvbmc+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjM0MCIgdmFsaWduPSJ0b3AiPlsyNSwzNDAgbW9kIDEsMDAwIGlzIDM0MC4gVGhlIHJ1bGUgZm9yIDEwMCBhcHBsaWVzLl08L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSIyMSI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjI1NyIgdmFsaWduPSJ0b3AiPnR3ZW50eS1maXZlIHRob3VzYW5kIDxzdHJvbmc+dGhyZWU8L3N0cm9uZz4gaHVuZHJlZCAmZ3Q7Jmd0OzwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIzNDAiIHZhbGlnbj0idG9wIj5bMzQwIG92ZXIgMTAwIGlzIDMuIFRoZSBydWxlIGZvciAzIGlzICZxdW90O3RocmVlLiZxdW90O108L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSIyMSI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjI1NyIgdmFsaWduPSJ0b3AiPnR3ZW50eS1maXZlIHRob3VzYW5kIHRocmVlIGh1bmRyZWQgPHN0cm9uZz5mb3J0eTwvc3Ryb25nPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIzNDAiIHZhbGlnbj0idG9wIj5bMzQwIG1vZCAxMDAgaXMgNDAuIFRoZSBydWxlIGZvciA0MCBhcHBsaWVzLiBTaW5jZSA0MCBkaXZpZGVzCisgKiAgICAgZXZlbmx5IGJ5IDEwLCB0aGUgaHlwaGVuIGFuZCBzdWJzdGl0dXRpb24gaW4gdGhlIGJyYWNrZXRzIGFyZSBvbWl0dGVkLl08L3RkPgorICogICA8L3RyPgorICogPC90YWJsZT4KKyAqCisgKiA8cD5UaGUgYWJvdmUgc3ludGF4IHN1ZmZpY2VzIG9ubHkgdG8gZm9ybWF0IHBvc2l0aXZlIGludGVnZXJzLiBUbyBmb3JtYXQgbmVnYXRpdmUgbnVtYmVycywKKyAqIHdlIGFkZCBhIHNwZWNpYWwgcnVsZTo8L3A+CisgKgorICogPHByZT4teDogbWludXMgJmd0OyZndDs7PC9wcmU+CisgKgorICogPHA+VGhpcyBpcyBjYWxsZWQgYSA8ZW0+bmVnYXRpdmUtbnVtYmVyIHJ1bGUsPC9lbT4gYW5kIGlzIGlkZW50aWZpZWQgYnkgJnF1b3Q7LXgmcXVvdDsKKyAqIHdoZXJlIHRoZSBiYXNlIHZhbHVlIHdvdWxkIGJlLiBUaGlzIHJ1bGUgaXMgdXNlZCB0byBmb3JtYXQgYWxsIG5lZ2F0aXZlIG51bWJlcnMuIHRoZQorICogJmd0OyZndDsgdG9rZW4gaGVyZSBtZWFucyAmcXVvdDtmaW5kIHRoZSBudW1iZXIncyBhYnNvbHV0ZSB2YWx1ZSwgZm9ybWF0IGl0IHdpdGggdGhlc2UKKyAqIHJ1bGVzLCBhbmQgcHV0IHRoZSByZXN1bHQgaGVyZS4mcXVvdDs8L3A+CisgKgorICogPHA+V2UgYWxzbyBhZGQgYSBzcGVjaWFsIHJ1bGUgY2FsbGVkIGEgPGVtPmZyYWN0aW9uIHJ1bGUgPC9lbT5mb3IgbnVtYmVycyB3aXRoIGZyYWN0aW9uYWwKKyAqIHBhcnRzOjwvcD4KKyAqCisgKiA8cHJlPngueDogJmx0OyZsdDsgcG9pbnQgJmd0OyZndDs7PC9wcmU+CisgKgorICogPHA+VGhpcyBydWxlIGlzIHVzZWQgZm9yIGFsbCBwb3NpdGl2ZSBub24taW50ZWdlcnMgKG5lZ2F0aXZlIG5vbi1pbnRlZ2VycyBwYXNzIHRocm91Z2ggdGhlCisgKiBuZWdhdGl2ZS1udW1iZXIgcnVsZSBmaXJzdCBhbmQgdGhlbiB0aHJvdWdoIHRoaXMgcnVsZSkuIEhlcmUsIHRoZSAmbHQ7Jmx0OyB0b2tlbiByZWZlcnMgdG8KKyAqIHRoZSBudW1iZXIncyBpbnRlZ3JhbCBwYXJ0LCBhbmQgdGhlICZndDsmZ3Q7IHRvIHRoZSBudW1iZXIncyBmcmFjdGlvbmFsIHBhcnQuIFRoZQorICogZnJhY3Rpb25hbCBwYXJ0IGlzIGZvcm1hdHRlZCBhcyBhIHNlcmllcyBvZiBzaW5nbGUtZGlnaXQgbnVtYmVycyAoZS5nLiwgMTIzLjQ1NiB3b3VsZCBiZQorICogZm9ybWF0dGVkIGFzICZxdW90O29uZSBodW5kcmVkIHR3ZW50eS10aHJlZSBwb2ludCBmb3VyIGZpdmUgc2l4JnF1b3Q7KS48L3A+CisgKgorICogPHA+VG8gc2VlIGhvdyB0aGlzIHJ1bGUgc3ludGF4IGlzIGFwcGxpZWQgdG8gdmFyaW91cyBsYW5ndWFnZXMsIGV4YW1pbmUgdGhlIHJlc291cmNlIGRhdGEuPC9wPgorICoKKyAqIDxwPlRoZXJlIGlzIGFjdHVhbGx5IG11Y2ggbW9yZSBmbGV4aWJpbGl0eSBidWlsdCBpbnRvIHRoZSBydWxlIGxhbmd1YWdlIHRoYW4gdGhlCisgKiBkZXNjcmlwdGlvbiBhYm92ZSBzaG93cy4gQSBmb3JtYXR0ZXIgbWF5IG93biBtdWx0aXBsZSBydWxlIHNldHMsIHdoaWNoIGNhbiBiZSBzZWxlY3RlZCBieQorICogdGhlIGNhbGxlciwgYW5kIHdoaWNoIGNhbiB1c2UgZWFjaCBvdGhlciB0byBmaWxsIGluIHRoZWlyIHN1YnN0aXR1dGlvbnMuIFN1YnN0aXR1dGlvbnMgY2FuCisgKiBhbHNvIGJlIGZpbGxlZCBpbiB3aXRoIGRpZ2l0cywgdXNpbmcgYSBEZWNpbWFsRm9ybWF0IG9iamVjdC4gVGhlcmUgaXMgc3ludGF4IHRoYXQgY2FuIGJlCisgKiB1c2VkIHRvIGFsdGVyIGEgcnVsZSdzIGRpdmlzb3IgaW4gdmFyaW91cyB3YXlzLiBBbmQgdGhlcmUgaXMgcHJvdmlzaW9uIGZvciBtdWNoIG1vcmUKKyAqIGZsZXhpYmxlIGZyYWN0aW9uIGhhbmRsaW5nLiBBIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBydWxlIHN5bnRheCBmb2xsb3dzOjwvcD4KKyAqCisgKiA8aHI+CisgKgorICogPHA+VGhlIGRlc2NyaXB0aW9uIG9mIGEgPHR0PlJ1bGVCYXNlZE51bWJlckZvcm1hdDwvdHQ+J3MgYmVoYXZpb3IgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgPGVtPnJ1bGUKKyAqIHNldHMuPC9lbT4gRWFjaCBydWxlIHNldCBjb25zaXN0cyBvZiBhIG5hbWUsIGEgY29sb24sIGFuZCBhIGxpc3Qgb2YgPGVtPnJ1bGVzLjwvZW0+IEEgcnVsZQorICogc2V0IG5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgJSBzaWduLiBSdWxlIHNldHMgd2l0aCBuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBzaW5nbGUgJSBzaWduCisgKiBhcmUgPGVtPnB1YmxpYzo8L2VtPiB0aGUgY2FsbGVyIGNhbiBzcGVjaWZ5IHRoYXQgdGhleSBiZSB1c2VkIHRvIGZvcm1hdCBhbmQgcGFyc2UgbnVtYmVycy4KKyAqIFJ1bGUgc2V0cyB3aXRoIG5hbWVzIHRoYXQgYmVnaW4gd2l0aCAlJSBhcmUgPGVtPnByaXZhdGU6PC9lbT4gdGhleSBleGlzdCBvbmx5IGZvciB0aGUgdXNlCisgKiBvZiBvdGhlciBydWxlIHNldHMuIElmIGEgZm9ybWF0dGVyIG9ubHkgaGFzIG9uZSBydWxlIHNldCwgdGhlIG5hbWUgbWF5IGJlIG9taXR0ZWQuPC9wPgorICoKKyAqIDxwPlRoZSB1c2VyIGNhbiBhbHNvIHNwZWNpZnkgYSBzcGVjaWFsICZxdW90O3J1bGUgc2V0JnF1b3Q7IG5hbWVkIDx0dD4lJWxlbmllbnQtcGFyc2U8L3R0Pi4KKyAqIFRoZSBib2R5IG9mIDx0dD4lJWxlbmllbnQtcGFyc2U8L3R0PiBpc24ndCBhIHNldCBvZiBudW1iZXItZm9ybWF0dGluZyBydWxlcywgYnV0IGEgPHR0PlJ1bGVCYXNlZENvbGxhdG9yPC90dD4KKyAqIGRlc2NyaXB0aW9uIHdoaWNoIGlzIHVzZWQgdG8gZGVmaW5lIGVxdWl2YWxlbmNlcyBmb3IgbGVuaWVudCBwYXJzaW5nLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICogb24gdGhlIHN5bnRheCwgc2VlIDx0dD5SdWxlQmFzZWRDb2xsYXRvcjwvdHQ+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBsZW5pZW50IHBhcnNpbmcsCisgKiBzZWUgPHR0PnNldExlbmllbnRQYXJzZSgpPC90dD4uPC9wPgorICoKKyAqIDxwPlRoZSBib2R5IG9mIGEgcnVsZSBzZXQgY29uc2lzdHMgb2YgYW4gb3JkZXJlZCwgc2VtaWNvbG9uLWRlbGltaXRlZCBsaXN0IG9mIDxlbT5ydWxlcy48L2VtPgorICogSW50ZXJuYWxseSwgZXZlcnkgcnVsZSBoYXMgYSBiYXNlIHZhbHVlLCBhIGRpdmlzb3IsIHJ1bGUgdGV4dCwgYW5kIHplcm8sIG9uZSwgb3IgdHdvIDxlbT5zdWJzdHR1dGlvbnMuPC9lbT4KKyAqIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGRlc2NyaXB0aW9uIHN5bnRheCwgd2hpY2ggY29uc2lzdHMgb2YgYSA8ZW0+cnVsZQorICogZGVzY3JpcHRvciw8L2VtPiBhIGNvbG9uLCBhbmQgYSA8ZW0+cnVsZSBib2R5LjwvZW0+PC9wPgorICoKKyAqIDxwPkEgcnVsZSBkZXNjcmlwdG9yIGNhbiB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zICh0ZXh0IGluIDxlbT5pdGFsaWNzPC9lbT4gaXMgdGhlCisgKiBuYW1lIG9mIGEgdG9rZW4pOjwvcD4KKyAqCisgKiA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjglIiB2YWxpZ249InRvcCI+PGVtPmJ2PC9lbT46PC90ZD4KKyAqICAgICA8dGQgdmFsaWduPSJ0b3AiPjxlbT5idjwvZW0+IHNwZWNpZmllcyB0aGUgcnVsZSdzIGJhc2UgdmFsdWUuIDxlbT5idjwvZW0+IGlzIGEgZGVjaW1hbAorICogICAgIG51bWJlciBleHByZXNzZWQgdXNpbmcgQVNDSUkgZGlnaXRzLiA8ZW0+YnY8L2VtPiBtYXkgY29udGFpbiBzcGFjZXMsIHBlcmlvZCwgYW5kIGNvbW1hcywKKyAqICAgICB3aGljaCBhcmUgaXJnbm9yZWQuIFRoZSBydWxlJ3MgZGl2aXNvciBpcyB0aGUgaGlnaGVzdCBwb3dlciBvZiAxMCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAqICAgICB0aGUgYmFzZSB2YWx1ZS48L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSI1JSIgdmFsaWduPSJ0b3AiPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSI4JSIgdmFsaWduPSJ0b3AiPjxlbT5idjwvZW0+LzxlbT5yYWQ8L2VtPjo8L3RkPgorICogICAgIDx0ZCB2YWxpZ249InRvcCI+PGVtPmJ2PC9lbT4gc3BlY2lmaWVzIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZS4gVGhlIHJ1bGUncyBkaXZpc29yIGlzIHRoZQorICogICAgIGhpZ2hlc3QgcG93ZXIgb2YgPGVtPnJhZDwvZW0+IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYmFzZSB2YWx1ZS48L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSI1JSIgdmFsaWduPSJ0b3AiPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSI4JSIgdmFsaWduPSJ0b3AiPjxlbT5idjwvZW0+Jmd0Ozo8L3RkPgorICogICAgIDx0ZCB2YWxpZ249InRvcCI+PGVtPmJ2PC9lbT4gc3BlY2lmaWVzIHRoZSBydWxlJ3MgYmFzZSB2YWx1ZS4gVG8gY2FsY3VsYXRlIHRoZSBkaXZpc29yLAorICogICAgIGxldCB0aGUgcmFkaXggYmUgMTAsIGFuZCB0aGUgZXhwb25lbnQgYmUgdGhlIGhpZ2hlc3QgZXhwb25lbnQgb2YgdGhlIHJhZGl4IHRoYXQgeWllbGRzIGEKKyAqICAgICByZXN1bHQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBiYXNlIHZhbHVlLiBFdmVyeSAmZ3Q7IGNoYXJhY3RlciBhZnRlciB0aGUgYmFzZSB2YWx1ZQorICogICAgIGRlY3JlYXNlcyB0aGUgZXhwb25lbnQgYnkgMS4gSWYgdGhlIGV4cG9uZW50IGlzIHBvc2l0aXZlIG9yIDAsIHRoZSBkaXZpc29yIGlzIHRoZSByYWRpeAorICogICAgIHJhaXNlZCB0byB0aGUgcG93ZXIgb2YgdGhlIGV4cG9uZW50OyBvdGhlcndpc2UsIHRoZSBkaXZpc29yIGlzIDEuPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iOCUiIHZhbGlnbj0idG9wIj48ZW0+YnY8L2VtPi88ZW0+cmFkPC9lbT4mZ3Q7OjwvdGQ+CisgKiAgICAgPHRkIHZhbGlnbj0idG9wIj48ZW0+YnY8L2VtPiBzcGVjaWZpZXMgdGhlIHJ1bGUncyBiYXNlIHZhbHVlLiBUbyBjYWxjdWxhdGUgdGhlIGRpdmlzb3IsCisgKiAgICAgbGV0IHRoZSByYWRpeCBiZSA8ZW0+cmFkPC9lbT4sIGFuZCB0aGUgZXhwb25lbnQgYmUgdGhlIGhpZ2hlc3QgZXhwb25lbnQgb2YgdGhlIHJhZGl4IHRoYXQKKyAqICAgICB5aWVsZHMgYSByZXN1bHQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBiYXNlIHZhbHVlLiBFdmVyeSAmZ3Q7IGNoYXJhY3RlciBhZnRlciB0aGUgcmFkaXgKKyAqICAgICBkZWNyZWFzZXMgdGhlIGV4cG9uZW50IGJ5IDEuIElmIHRoZSBleHBvbmVudCBpcyBwb3NpdGl2ZSBvciAwLCB0aGUgZGl2aXNvciBpcyB0aGUgcmFkaXgKKyAqICAgICByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIHRoZSBleHBvbmVudDsgb3RoZXJ3aXNlLCB0aGUgZGl2aXNvciBpcyAxLjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjglIiB2YWxpZ249InRvcCI+LXg6PC90ZD4KKyAqICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBydWxlIGlzIGEgbmVnYXRpdmUtbnVtYmVyIHJ1bGUuPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iOCUiIHZhbGlnbj0idG9wIj54Lng6PC90ZD4KKyAqICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBydWxlIGlzIGFuIDxlbT5pbXByb3BlciBmcmFjdGlvbiBydWxlLjwvZW0+PC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iOCUiIHZhbGlnbj0idG9wIj4wLng6PC90ZD4KKyAqICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBydWxlIGlzIGEgPGVtPnByb3BlciBmcmFjdGlvbiBydWxlLjwvZW0+PC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iOCUiIHZhbGlnbj0idG9wIj54LjA6PC90ZD4KKyAqICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBydWxlIGlzIGEgPGVtPm1hc3RlciBydWxlLjwvZW0+PC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iOCUiIHZhbGlnbj0idG9wIj48ZW0+bm90aGluZzwvZW0+PC90ZD4KKyAqICAgICA8dGQgdmFsaWduPSJ0b3AiPklmIHRoZSBydWxlJ3MgcnVsZSBkZXNjcmlwdG9yIGlzIGxlZnQgb3V0LCB0aGUgYmFzZSB2YWx1ZSBpcyBvbmUgcGx1cyB0aGUKKyAqICAgICBwcmVjZWRpbmcgcnVsZSdzIGJhc2UgdmFsdWUgKG9yIHplcm8gaWYgdGhpcyBpcyB0aGUgZmlyc3QgcnVsZSBpbiB0aGUgbGlzdCkgaW4gYSBub3JtYWwKKyAqICAgICBydWxlIHNldC4mbmJzcDsgSW4gYSBmcmFjdGlvbiBydWxlIHNldCwgdGhlIGJhc2UgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIHByZWNlZGluZyBydWxlJ3MKKyAqICAgICBiYXNlIHZhbHVlLjwvdGQ+CisgKiAgIDwvdHI+CisgKiA8L3RhYmxlPgorICoKKyAqIDxwPkEgcnVsZSBzZXQgbWF5IGJlIGVpdGhlciBhIHJlZ3VsYXIgcnVsZSBzZXQgb3IgYSA8ZW0+ZnJhY3Rpb24gcnVsZSBzZXQsPC9lbT4gZGVwZW5kaW5nCisgKiBvbiB3aGV0aGVyIGl0IGlzIHVzZWQgdG8gZm9ybWF0IGEgbnVtYmVyJ3MgaW50ZWdyYWwgcGFydCAob3IgdGhlIHdob2xlIG51bWJlcikgb3IgYQorICogbnVtYmVyJ3MgZnJhY3Rpb25hbCBwYXJ0LiBVc2luZyBhIHJ1bGUgc2V0IHRvIGZvcm1hdCBhIHJ1bGUncyBmcmFjdGlvbmFsIHBhcnQgbWFrZXMgaXQgYQorICogZnJhY3Rpb24gcnVsZSBzZXQuPC9wPgorICoKKyAqIDxwPldoaWNoIHJ1bGUgaXMgdXNlZCB0byBmb3JtYXQgYSBudW1iZXIgaXMgZGVmaW5lZCBhY2NvcmRpbmcgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIGFsZ29yaXRobXM6IElmIHRoZSBydWxlIHNldCBpcyBhIHJlZ3VsYXIgcnVsZSBzZXQsIGRvIHRoZSBmb2xsb3dpbmc6CisgKgorICogPHVsPgorICogICA8bGk+SWYgdGhlIHJ1bGUgc2V0IGluY2x1ZGVzIGEgbWFzdGVyIHJ1bGUgKGFuZCB0aGUgbnVtYmVyIHdhcyBwYXNzZWQgaW4gYXMgYSA8dHQ+ZG91YmxlPC90dD4pLAorICogICAgIHVzZSB0aGUgbWFzdGVyIHJ1bGUuJm5ic3A7IChJZiB0aGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZCB3YXMgcGFzc2VkIGluIGFzIGEgPHR0Pmxvbmc8L3R0PiwKKyAqICAgICB0aGUgbWFzdGVyIHJ1bGUgaXMgaWdub3JlZC4pPC9saT4KKyAqICAgPGxpPklmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUsIHVzZSB0aGUgbmVnYXRpdmUtbnVtYmVyIHJ1bGUuPC9saT4KKyAqICAgPGxpPklmIHRoZSBudW1iZXIgaGFzIGEgZnJhY3Rpb25hbCBwYXJ0IGFuZCBpcyBncmVhdGVyIHRoYW4gMSwgdXNlIHRoZSBpbXByb3BlciBmcmFjdGlvbgorICogICAgIHJ1bGUuPC9saT4KKyAqICAgPGxpPklmIHRoZSBudW1iZXIgaGFzIGEgZnJhY3Rpb25hbCBwYXJ0IGFuZCBpcyBiZXR3ZWVuIDAgYW5kIDEsIHVzZSB0aGUgcHJvcGVyIGZyYWN0aW9uCisgKiAgICAgcnVsZS48L2xpPgorICogICA8bGk+QmluYXJ5LXNlYXJjaCB0aGUgcnVsZSBsaXN0IGZvciB0aGUgcnVsZSB3aXRoIHRoZSBoaWdoZXN0IGJhc2UgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsCisgKiAgICAgdG8gdGhlIG51bWJlci4gSWYgdGhhdCBydWxlIGhhcyB0d28gc3Vic3RpdHV0aW9ucywgaXRzIGJhc2UgdmFsdWUgaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUKKyAqICAgICBvZiBpdHMgZGl2aXNvciwgYW5kIHRoZSBudW1iZXIgPGVtPmlzPC9lbT4gYW4gZXZlbiBtdWx0aXBsZSBvZiB0aGUgcnVsZSdzIGRpdmlzb3IsIHVzZSB0aGUKKyAqICAgICBydWxlIHRoYXQgcHJlY2VkZXMgaXQgaW4gdGhlIHJ1bGUgbGlzdC4gT3RoZXJ3aXNlLCB1c2UgdGhlIHJ1bGUgaXRzZWxmLjwvbGk+CisgKiA8L3VsPgorICoKKyAqIDxwPklmIHRoZSBydWxlIHNldCBpcyBhIGZyYWN0aW9uIHJ1bGUgc2V0LCBkbyB0aGUgZm9sbG93aW5nOgorICoKKyAqIDx1bD4KKyAqICAgPGxpPklnbm9yZSBuZWdhdGl2ZS1udW1iZXIgYW5kIGZyYWN0aW9uIHJ1bGVzLjwvbGk+CisgKiAgIDxsaT5Gb3IgZWFjaCBydWxlIGluIHRoZSBsaXN0LCBtdWx0aXBseSB0aGUgbnVtYmVyIGJlaW5nIGZvcm1hdHRlZCAod2hpY2ggd2lsbCBhbHdheXMgYmUKKyAqICAgICBiZXR3ZWVuIDAgYW5kIDEpIGJ5IHRoZSBydWxlJ3MgYmFzZSB2YWx1ZS4gS2VlcCB0cmFjayBvZiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgcmVzdWx0CisgKiAgICAgdGhlIG5lYXJlc3QgaW50ZWdlci48L2xpPgorICogICA8bGk+VXNlIHRoZSBydWxlIHRoYXQgcHJvZHVjZWQgdGhlIHJlc3VsdCBjbG9zZXN0IHRvIHplcm8gaW4gdGhlIGFib3ZlIGNhbGN1bGF0aW9uLiBJbiB0aGUKKyAqICAgICBldmVudCBvZiBhIHRpZSBvciBhIGRpcmVjdCBoaXQsIHVzZSB0aGUgZmlyc3QgbWF0Y2hpbmcgcnVsZSBlbmNvdW50ZXJlZC4gKFRoZSBpZGVhIGhlcmUgaXMKKyAqICAgICB0byB0cnkgZWFjaCBydWxlJ3MgYmFzZSB2YWx1ZSBhcyBhIHBvc3NpYmxlIGRlbm9taW5hdG9yIG9mIGEgZnJhY3Rpb24uIFdoaWNoZXZlcgorICogICAgIGRlbm9taW5hdG9yIHByb2R1Y2VzIHRoZSBmcmFjdGlvbiBjbG9zZXN0IGluIHZhbHVlIHRvIHRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkIHdpbnMuKSBJZgorICogICAgIHRoZSBydWxlIGZvbGxvd2luZyB0aGUgbWF0Y2hpbmcgcnVsZSBoYXMgdGhlIHNhbWUgYmFzZSB2YWx1ZSwgdXNlIGl0IGlmIHRoZSBudW1lcmF0b3Igb2YKKyAqICAgICB0aGUgZnJhY3Rpb24gaXMgYW55dGhpbmcgb3RoZXIgdGhhbiAxOyBpZiB0aGUgbnVtZXJhdG9yIGlzIDEsIHVzZSB0aGUgb3JpZ2luYWwgbWF0Y2hpbmcKKyAqICAgICBydWxlLiAoVGhpcyBpcyB0byBhbGxvdyBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm1zIG9mIHRoZSBydWxlIHRleHQgd2l0aG91dCBhIGxvdCBvZiBleHRyYQorICogICAgIGhhc3NsZS4pPC9saT4KKyAqIDwvdWw+CisgKgorICogPHA+QSBydWxlJ3MgYm9keSBjb25zaXN0cyBvZiBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24uIFRoZSBydWxlCisgKiBtYXkgaW5jbHVkZSB6ZXJvLCBvbmUsIG9yIHR3byA8ZW0+c3Vic3RpdHV0aW9uIHRva2Vucyw8L2VtPiBhbmQgYSByYW5nZSBvZiB0ZXh0IGluCisgKiBicmFja2V0cy4gVGhlIGJyYWNrZXRzIGRlbm90ZSBvcHRpb25hbCB0ZXh0IChhbmQgbWF5IGFsc28gaW5jbHVkZSBvbmUgb3IgYm90aAorICogc3Vic3RpdHV0aW9ucykuIFRoZSBleGFjdCBtZWFuaW5ncyBvZiB0aGUgc3Vic3RpdHV0aW9uIHRva2VucywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucworICogb3B0aW9uYWwgdGV4dCBpcyBvbWl0dGVkLCBkZXBlbmQgb24gdGhlIHN5bnRheCBvZiB0aGUgc3Vic3RpdHV0aW9uIHRva2VuIGFuZCB0aGUgY29udGV4dC4KKyAqIFRoZSByZXN0IG9mIHRoZSB0ZXh0IGluIGEgcnVsZSBib2R5IGlzIGxpdGVyYWwgdGV4dCB0aGF0IGlzIG91dHB1dCB3aGVuIHRoZSBydWxlIG1hdGNoZXMKKyAqIHRoZSBudW1iZXIgYmVpbmcgZm9ybWF0dGVkLjwvcD4KKyAqCisgKiA8cD5BIHN1YnN0aXR1dGlvbiB0b2tlbiBiZWdpbnMgYW5kIGVuZHMgd2l0aCBhIDxlbT50b2tlbiBjaGFyYWN0ZXIuPC9lbT4gVGhlIHRva2VuCisgKiBjaGFyYWN0ZXIgYW5kIHRoZSBjb250ZXh0IHRvZ2V0aGVyIHNwZWNpZnkgYSBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGUKKyAqIG51bWJlciBiZWluZyBmb3JtYXR0ZWQuIEFuIG9wdGlvbmFsIDxlbT5zdWJzdGl0dXRpb24gZGVzY3JpcHRvciA8L2VtPnNwZWNpZmllcyBob3cgdGhlCisgKiB2YWx1ZSByZXN1bHRpbmcgZnJvbSB0aGF0IG9wZXJhdGlvbiBpcyB1c2VkIHRvIGZpbGwgaW4gdGhlIHN1YnN0aXR1dGlvbi4gVGhlIHBvc2l0aW9uIG9mCisgKiB0aGUgc3Vic3RpdHV0aW9uIHRva2VuIGluIHRoZSBydWxlIGJvZHkgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVzdWx0YW50IHRleHQgaW4KKyAqIHRoZSBvcmlnaW5hbCBydWxlIHRleHQuPC9wPgorICoKKyAqIDxwPlRoZSBtZWFuaW5ncyBvZiB0aGUgc3Vic3RpdHV0aW9uIHRva2VuIGNoYXJhY3RlcnMgYXJlIGFzIGZvbGxvd3M6PC9wPgorICoKKyAqIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iMzciPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIyMyI+Jmd0OyZndDs8L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMTY1IiB2YWxpZ249InRvcCI+aW4gbm9ybWFsIHJ1bGU8L3RkPgorICogICAgIDx0ZD5EaXZpZGUgdGhlIG51bWJlciBieSB0aGUgcnVsZSdzIGRpdmlzb3IgYW5kIGZvcm1hdCB0aGUgcmVtYWluZGVyPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iMzciPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIyMyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NSIgdmFsaWduPSJ0b3AiPmluIG5lZ2F0aXZlLW51bWJlciBydWxlPC90ZD4KKyAqICAgICA8dGQ+RmluZCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBhbmQgZm9ybWF0IHRoZSByZXN1bHQ8L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSIzNyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjIzIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMTY1IiB2YWxpZ249InRvcCI+aW4gZnJhY3Rpb24gb3IgbWFzdGVyIHJ1bGU8L3RkPgorICogICAgIDx0ZD5Jc29sYXRlIHRoZSBudW1iZXIncyBmcmFjdGlvbmFsIHBhcnQgYW5kIGZvcm1hdCBpdC48L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSIzNyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjIzIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMTY1IiB2YWxpZ249InRvcCI+aW4gcnVsZSBpbiBmcmFjdGlvbiBydWxlIHNldDwvdGQ+CisgKiAgICAgPHRkPk5vdCBhbGxvd2VkLjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjM3Ij48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMjMiPiZndDsmZ3Q7Jmd0OzwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIxNjUiIHZhbGlnbj0idG9wIj5pbiBub3JtYWwgcnVsZTwvdGQ+CisgKiAgICAgPHRkPkRpdmlkZSB0aGUgbnVtYmVyIGJ5IHRoZSBydWxlJ3MgZGl2aXNvciBhbmQgZm9ybWF0IHRoZSByZW1haW5kZXIsCisgKiAgICAgICBidXQgYnlwYXNzIHRoZSBub3JtYWwgcnVsZS1zZWxlY3Rpb24gcHJvY2VzcyBhbmQganVzdCB1c2UgdGhlCisgKiAgICAgICBydWxlIHRoYXQgcHJlY2VkZXMgdGhpcyBvbmUgaW4gdGhpcyBydWxlIGxpc3QuPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iMzciPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIyMyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NSIgdmFsaWduPSJ0b3AiPmluIGFsbCBvdGhlciBydWxlczwvdGQ+CisgKiAgICAgPHRkPk5vdCBhbGxvd2VkLjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjM3Ij48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMjMiPiZsdDsmbHQ7PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NSIgdmFsaWduPSJ0b3AiPmluIG5vcm1hbCBydWxlPC90ZD4KKyAqICAgICA8dGQ+RGl2aWRlIHRoZSBudW1iZXIgYnkgdGhlIHJ1bGUncyBkaXZpc29yIGFuZCBmb3JtYXQgdGhlIHF1b3RpZW50PC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iMzciPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIyMyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NSIgdmFsaWduPSJ0b3AiPmluIG5lZ2F0aXZlLW51bWJlciBydWxlPC90ZD4KKyAqICAgICA8dGQ+Tm90IGFsbG93ZWQuPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iMzciPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIyMyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NSIgdmFsaWduPSJ0b3AiPmluIGZyYWN0aW9uIG9yIG1hc3RlciBydWxlPC90ZD4KKyAqICAgICA8dGQ+SXNvbGF0ZSB0aGUgbnVtYmVyJ3MgaW50ZWdyYWwgcGFydCBhbmQgZm9ybWF0IGl0LjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjM3Ij48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMjMiPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIxNjUiIHZhbGlnbj0idG9wIj5pbiBydWxlIGluIGZyYWN0aW9uIHJ1bGUgc2V0PC90ZD4KKyAqICAgICA8dGQ+TXVsdGlwbHkgdGhlIG51bWJlciBieSB0aGUgcnVsZSdzIGJhc2UgdmFsdWUgYW5kIGZvcm1hdCB0aGUgcmVzdWx0LjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjM3Ij48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMjMiPj09PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NSIgdmFsaWduPSJ0b3AiPmluIGFsbCBydWxlIHNldHM8L3RkPgorICogICAgIDx0ZD5Gb3JtYXQgdGhlIG51bWJlciB1bmNoYW5nZWQ8L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSIzNyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjIzIj5bXTwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIxNjUiIHZhbGlnbj0idG9wIj5pbiBub3JtYWwgcnVsZTwvdGQ+CisgKiAgICAgPHRkPk9taXQgdGhlIG9wdGlvbmFsIHRleHQgaWYgdGhlIG51bWJlciBpcyBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBydWxlJ3MgZGl2aXNvcjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjM3Ij48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMjMiPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIxNjUiIHZhbGlnbj0idG9wIj5pbiBuZWdhdGl2ZS1udW1iZXIgcnVsZTwvdGQ+CisgKiAgICAgPHRkPk5vdCBhbGxvd2VkLjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjM3Ij48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMjMiPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIxNjUiIHZhbGlnbj0idG9wIj5pbiBpbXByb3Blci1mcmFjdGlvbiBydWxlPC90ZD4KKyAqICAgICA8dGQ+T21pdCB0aGUgb3B0aW9uYWwgdGV4dCBpZiB0aGUgbnVtYmVyIGlzIGJldHdlZW4gMCBhbmQgMSAoc2FtZSBhcyBzcGVjaWZ5aW5nIGJvdGggYW4KKyAqICAgICB4LnggcnVsZSBhbmQgYSAwLnggcnVsZSk8L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSIzNyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjIzIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMTY1IiB2YWxpZ249InRvcCI+aW4gbWFzdGVyIHJ1bGU8L3RkPgorICogICAgIDx0ZD5PbWl0IHRoZSBvcHRpb25hbCB0ZXh0IGlmIHRoZSBudW1iZXIgaXMgYW4gaW50ZWdlciAoc2FtZSBhcyBzcGVjaWZ5aW5nIGJvdGggYW4geC54CisgKiAgICAgcnVsZSBhbmQgYW4geC4wIHJ1bGUpPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iMzciPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIyMyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NSIgdmFsaWduPSJ0b3AiPmluIHByb3Blci1mcmFjdGlvbiBydWxlPC90ZD4KKyAqICAgICA8dGQ+Tm90IGFsbG93ZWQuPC90ZD4KKyAqICAgPC90cj4KKyAqICAgPHRyPgorICogICAgIDx0ZCB3aWR0aD0iMzciPjwvdGQ+CisgKiAgICAgPHRkIHdpZHRoPSIyMyI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NSIgdmFsaWduPSJ0b3AiPmluIHJ1bGUgaW4gZnJhY3Rpb24gcnVsZSBzZXQ8L3RkPgorICogICAgIDx0ZD5PbWl0IHRoZSBvcHRpb25hbCB0ZXh0IGlmIG11bHRpcGx5aW5nIHRoZSBudW1iZXIgYnkgdGhlIHJ1bGUncyBiYXNlIHZhbHVlIHlpZWxkcyAxLjwvdGQ+CisgKiAgIDwvdHI+CisgKiA8L3RhYmxlPgorICoKKyAqIDxwPlRoZSBzdWJzdGl0dXRpb24gZGVzY3JpcHRvciAoaS5lLiwgdGhlIHRleHQgYmV0d2VlbiB0aGUgdG9rZW4gY2hhcmFjdGVycykgbWF5IHRha2Ugb25lCisgKiBvZiB0aHJlZSBmb3Jtczo8L3A+CisgKgorICogPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSI0MiI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NiIgdmFsaWduPSJ0b3AiPmEgcnVsZSBzZXQgbmFtZTwvdGQ+CisgKiAgICAgPHRkPlBlcmZvcm0gdGhlIG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gb24gdGhlIG51bWJlciwgYW5kIGZvcm1hdCB0aGUgcmVzdWx0IHVzaW5nIHRoZQorICogICAgIG5hbWVkIHJ1bGUgc2V0LjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KKyAqICAgICA8dGQgd2lkdGg9IjQyIj48L3RkPgorICogICAgIDx0ZCB3aWR0aD0iMTY2IiB2YWxpZ249InRvcCI+YSBEZWNpbWFsRm9ybWF0IHBhdHRlcm48L3RkPgorICogICAgIDx0ZD5QZXJmb3JtIHRoZSBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIsIGFuZCBmb3JtYXQgdGhlIHJlc3VsdCB1c2luZyBhCisgKiAgICAgRGVjaW1hbEZvcm1hdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0dGVybi4mbmJzcDsgVGhlIHBhdHRlcm4gbXVzdCBiZWdpbiB3aXRoIDAgb3IgIy48L3RkPgorICogICA8L3RyPgorICogICA8dHI+CisgKiAgICAgPHRkIHdpZHRoPSI0MiI+PC90ZD4KKyAqICAgICA8dGQgd2lkdGg9IjE2NiIgdmFsaWduPSJ0b3AiPm5vdGhpbmc8L3RkPgorICogICAgIDx0ZD5QZXJmb3JtIHRoZSBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIsIGFuZCBmb3JtYXQgdGhlIHJlc3VsdCB1c2luZyB0aGUgcnVsZQorICogICAgIHNldCBjb250YWluaW5nIHRoZSBjdXJyZW50IHJ1bGUsIGV4Y2VwdDo8dWw+CisgKiAgICAgICA8bGk+WW91IGNhbid0IGhhdmUgYW4gZW1wdHkgc3Vic3RpdHV0aW9uIGRlc2NyaXB0b3Igd2l0aCBhID09IHN1YnN0aXR1dGlvbi48L2xpPgorICogICAgICAgPGxpPklmIHlvdSBvbWl0IHRoZSBzdWJzdGl0dXRpb24gZGVzY3JpcHRvciBpbiBhICZndDsmZ3Q7IHN1YnN0aXR1dGlvbiBpbiBhIGZyYWN0aW9uIHJ1bGUsCisgKiAgICAgICAgIGZvcm1hdCB0aGUgcmVzdWx0IG9uZSBkaWdpdCBhdCBhIHRpbWUgdXNpbmcgdGhlIHJ1bGUgc2V0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcnVsZS48L2xpPgorICogICAgICAgPGxpPklmIHlvdSBvbWl0IHRoZSBzdWJzdGl0dXRpb24gZGVzY3JpcHRvciBpbiBhICZsdDsmbHQ7IHN1YnN0aXR1dGlvbiBpbiBhIHJ1bGUgaW4gYQorICogICAgICAgICBmcmFjdGlvbiBydWxlIHNldCwgZm9ybWF0IHRoZSByZXN1bHQgdXNpbmcgdGhlIGRlZmF1bHQgcnVsZSBzZXQgZm9yIHRoaXMgZm9ybWF0dGVyLjwvbGk+CisgKiAgICAgPC91bD4KKyAqICAgICA8L3RkPgorICogICA8L3RyPgorICogPC90YWJsZT4KKyAqCisgKiA8cD5XaGl0ZXNwYWNlIGlzIGlnbm9yZWQgYmV0d2VlbiBhIHJ1bGUgc2V0IG5hbWUgYW5kIGEgcnVsZSBzZXQgYm9keSwgYmV0d2VlbiBhIHJ1bGUKKyAqIGRlc2NyaXB0b3IgYW5kIGEgcnVsZSBib2R5LCBvciBiZXR3ZWVuIHJ1bGVzLiBJZiBhIHJ1bGUgYm9keSBiZWdpbnMgd2l0aCBhbiBhcG9zdHJvcGhlLAorICogdGhlIGFwb3N0cm9waGUgaXMgaWdub3JlZCwgYnV0IGFsbCB0ZXh0IGFmdGVyIGl0IGJlY29tZXMgc2lnbmlmaWNhbnQgKHRoaXMgaXMgaG93IHlvdSBjYW4KKyAqIGhhdmUgYSBydWxlJ3MgcnVsZSB0ZXh0IGJlZ2luIHdpdGggd2hpdGVzcGFjZSkuIFRoZXJlIGlzIG5vIGVzY2FwZSBmdW5jdGlvbjogdGhlIHNlbWljb2xvbgorICogaXMgbm90IGFsbG93ZWQgaW4gcnVsZSBzZXQgbmFtZXMgb3IgaW4gcnVsZSB0ZXh0LCBhbmQgdGhlIGNvbG9uIGlzIG5vdCBhbGxvd2VkIGluIHJ1bGUgc2V0CisgKiBuYW1lcy4gVGhlIGNoYXJhY3RlcnMgYmVnaW5uaW5nIGEgc3Vic3RpdHV0aW9uIHRva2VuIGFyZSBhbHdheXMgdHJlYXRlZCBhcyB0aGUgYmVnaW5uaW5nCisgKiBvZiBhIHN1YnN0aXR1dGlvbiB0b2tlbi48L3A+CisgKgorICogPHA+U2VlIHRoZSByZXNvdXJjZSBkYXRhIGFuZCB0aGUgZGVtbyBwcm9ncmFtIGZvciBhbm5vdGF0ZWQgZXhhbXBsZXMgb2YgcmVhbCBydWxlIHNldHMKKyAqIHVzaW5nIHRoZXNlIGZlYXR1cmVzLjwvcD4KKyAqCisgKiBAYXV0aG9yIFJpY2hhcmQgR2lsbGFtCisgKiAkUkNTZmlsZTogUnVsZUJhc2VkTnVtYmVyRm9ybWF0LmphdmEsdiAkICRSZXZpc2lvbjogMS4xMSAkICREYXRlOiAyMDAyLzEyLzA1IDAxOjIyOjIwICQKKyAqIEBzZWUgTnVtYmVyRm9ybWF0CisgKiBAc2VlIERlY2ltYWxGb3JtYXQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGV4dGVuZHMgTnVtYmVyRm9ybWF0IHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjb25zdGFudHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQdXRzIGEgY29weXJpZ2h0IGluIHRoZSAuY2xhc3MgZmlsZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHROb3RpY2UKKyAgICAgICAgPSAiQ29weXJpZ2h0IFx1MDBhOTE5OTctMTk5OCBJQk0gQ29ycC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIC8qKgorICAgICAqIFNlbGVjdG9yIGNvZGUgdGhhdCB0ZWxscyB0aGUgY29uc3RydWN0b3IgdG8gY3JlYXRlIGEgc3BlbGxvdXQgZm9ybWF0dGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1BFTExPVVQgPSAxOworCisgICAgLyoqCisgICAgICogU2VsZWN0b3IgY29kZSB0aGF0IHRlbGxzIHRoZSBjb25zdHJ1Y3RvciB0byBjcmVhdGUgYW4gb3JkaW5hbCBmb3JtYXR0ZXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUkRJTkFMID0gMjsKKworICAgIC8qKgorICAgICAqIFNlbGVjdG9yIGNvZGUgdGhhdCB0ZWxscyB0aGUgY29uc3RydWN0b3IgdG8gY3JlYXRlIGEgZHVyYXRpb24gZm9ybWF0dGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFVSQVRJT04gPSAzOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGRhdGEgbWVtYmVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRoZSBmb3JtYXR0ZXIncyBydWxlIHNldHMuCisgICAgICovCisgICAgcHJpdmF0ZSBORlJ1bGVTZXRbXSBydWxlU2V0cyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdHRlcidzIGRlZmF1bHQgcnVsZSBzZXQuICBUaGlzIGlzIGFsd2F5cyBpbmNsdWRlZAorICAgICAqIGluIHJ1bGVTZXRzLgorICAgICAqLworICAgIHByaXZhdGUgTkZSdWxlU2V0IGRlZmF1bHRSdWxlU2V0ID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoZSBmb3JtYXR0ZXIncyBsb2NhbGUuICBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIERlY2ltYWxGb3JtYXRTeW1ib2xzIGFuZAorICAgICAqIENvbGxhdG9yIG9iamVjdHMuCisgICAgICovCisgICAgcHJpdmF0ZSBMb2NhbGUgbG9jYWxlID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIENvbGxhdG9yIHRvIGJlIHVzZWQgaW4gbGVuaWVudCBwYXJzaW5nLiAgVGhpcyB2YXJpYWJsZSBpcyBsYXp5LWV2YWx1YXRlZDoKKyAgICAgKiB0aGUgY29sbGF0b3IgaXMgYWN0dWFsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSB0aGUgY2xpZW50IGRvZXMgYSBwYXJzZQorICAgICAqIHdpdGggbGVuaWVudC1wYXJzZSBtb2RlIHR1cm5lZCBvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIENvbGxhdG9yIGNvbGxhdG9yID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoZSBEZWNpbWFsRm9ybWF0U3ltYm9scyBvYmplY3QgdGhhdCBhbnkgRGVjaW1hbEZvcm1hdCBvYmplY3RzIHRoaXMKKyAgICAgKiBmb3JtYXR0ZXIgdXNlcyBzaG91bGQgdXNlLiAgVGhpcyB2YXJpYWJsZSBpcyBsYXp5LWV2YWx1YXRlZDogaXQgaXNuJ3QKKyAgICAgKiBmaWxsZWQgaW4gaWYgdGhlIHJ1bGUgc2V0IG5ldmVyIHVzZXMgYSBEZWNpbWFsRm9ybWF0IHBhdHRlcm4uCisgICAgICovCisgICAgcHJpdmF0ZSBEZWNpbWFsRm9ybWF0U3ltYm9scyBkZWNpbWFsRm9ybWF0U3ltYm9scyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBGbGFnIHNwZWNpZnlpbmcgd2hldGhlciBsZW5pZW50IHBhcnNlIG1vZGUgaXMgb24gb3Igb2ZmLiAgT2ZmIGJ5IGRlZmF1bHQuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGxlbmllbnRQYXJzZSA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogSWYgdGhlIGRlc2NyaXB0aW9uIHNwZWNpZmllcyBsZW5pZW50LXBhcnNlIHJ1bGVzLCB0aGV5J3JlIHN0b3JlZCBoZXJlIHVudGlsCisgICAgICogdGhlIGNvbGxhdG9yIGlzIGNyZWF0ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgbGVuaWVudFBhcnNlUnVsZXMgPSBudWxsOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNvbnN0cnVjdG9ycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBSdWxlQmFzZWROdW1iZXJGb3JtYXQgdGhhdCBiZWhhdmVzIGFjY29yZGluZyB0byB0aGUgZGVzY3JpcHRpb24KKyAgICAgKiBwYXNzZWQgaW4uICBUaGUgZm9ybWF0dGVyIHVzZXMgdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0ZXIncyBkZXNpcmVkIGJlaGF2aW9yLgorICAgICAqIFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbiBmb3IgYSBjb21wbGV0ZSBleHBsYW5hdGlvbiBvZiB0aGUgZGVzY3JpcHRpb24KKyAgICAgKiBzeW50YXguCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFJ1bGVCYXNlZE51bWJlckZvcm1hdChTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgbG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKyAgICAgICAgaW5pdChkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFJ1bGVCYXNlZE51bWJlckZvcm1hdCB0aGF0IGJlaGF2ZXMgYWNjb3JkaW5nIHRvIHRoZSBkZXNjcmlwdGlvbgorICAgICAqIHBhc3NlZCBpbi4gIFRoZSBmb3JtYXR0ZXIgdXNlcyB0aGUgc3BlY2lmaWVkIGxvY2FsZSB0byBkZXRlcm1pbmUgdGhlCisgICAgICogY2hhcmFjdGVycyB0byB1c2Ugd2hlbiBmb3JtYXR0aW5nIGluIG51bWVyYWxzLCBhbmQgdG8gZGVmaW5lIGVxdWl2YWxlbmNlcworICAgICAqIGZvciBsZW5pZW50IHBhcnNpbmcuCisgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIEEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRlcidzIGRlc2lyZWQgYmVoYXZpb3IuCisgICAgICogU2VlIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBhIGNvbXBsZXRlIGV4cGxhbmF0aW9uIG9mIHRoZSBkZXNjcmlwdGlvbgorICAgICAqIHN5bnRheC4KKyAgICAgKiBAcGFyYW0gbG9jYWxlIEEgbG9jYWxlLCB3aGljaCBnb3Zlcm5zIHdoaWNoIGNoYXJhY3RlcnMgYXJlIHVzZWQgZm9yCisgICAgICogZm9ybWF0dGluZyB2YWx1ZXMgaW4gbnVtZXJhbHMsIGFuZCB3aGljaCBjaGFyYWN0ZXJzIGFyZSBlcXVpdmFsZW50IGluCisgICAgICogbGVuaWVudCBwYXJzaW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoU3RyaW5nIGRlc2NyaXB0aW9uLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlOworICAgICAgICBpbml0KGRlc2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZyb20gYSBwcmVkZWZpbmVkIGRlc2NyaXB0aW9uLiAgVGhlIHNlbGVjdG9yCisgICAgICogY29kZSBjaG9vc2VkIGFtb25nIHRocmVlIHBvc3NpYmxlIHByZWRlZmluZWQgZm9ybWF0czogc3BlbGxvdXQsIG9yZGluYWwsCisgICAgICogYW5kIGR1cmF0aW9uLgorICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZSBmb3IgdGhlIGZvcm1hdHRlci4KKyAgICAgKiBAcGFyYW0gZm9ybWF0IEEgc2VsZWN0b3IgY29kZSBzcGVjaWZ5aW5nIHdoaWNoIGtpbmQgb2YgZm9ybWF0dGVyIHRvIGNyZWF0ZSBmb3IgdGhhdAorICAgICAqIGxvY2FsZS4gIFRoZXJlIGFyZSB0aHJlZSBsZWdhbCB2YWx1ZXM6IFNQRUxMT1VULCB3aGljaCBjcmVhdGVzIGEgZm9ybWF0dGVyIHRoYXQKKyAgICAgKiBzcGVsbHMgb3V0IGEgdmFsdWUgaW4gd29yZHMgaW4gdGhlIGRlc2lyZWQgbGFuZ3VhZ2UsIE9SRElOQUwsIHdoaWNoIGF0dGFjaGVzCisgICAgICogYW4gb3JkaW5hbCBzdWZmaXggZnJvbSB0aGUgZGVzaXJlZCBsYW5ndWFnZSB0byB0aGUgZW5kIG9mIGEgbnVtYmVyIChlLmcuICIxMjNyZCIpLAorICAgICAqIGFuZCBEVVJBVElPTiwgd2hpY2ggZm9ybWF0cyBhIGR1cmF0aW9uIGluIHNlY29uZHMgYXMgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoTG9jYWxlIGxvY2FsZSwgaW50IGZvcm1hdCkgeworICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTsKKworICAgICAgICAvLyBsb2FkIHVwIHRoZSByZXNvdXJjZSBidW5kbGUgY29udGFpbmluZyB0aGUgZGVzY3JpcHRpb24KKyAgICAgICAgLy8gZnJvbSB0aGUgc3BlY2lmaWVkIGxvY2FsZQorCS8vICAgICAgICBSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBJQ1VMb2NhbGVEYXRhLmdldFJlc291cmNlQnVuZGxlKCJOdW1iZXJGb3JtYXRSdWxlcyIsIGxvY2FsZSk7CisgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IElDVUxvY2FsZURhdGEuZ2V0UmVzb3VyY2VCdW5kbGUoIkxvY2FsZUVsZW1lbnRzIiwgbG9jYWxlKTsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gIiI7CisKKyAgICAgICAgLy8gcGljayBhIGRlc2NyaXB0aW9uIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgLy8ga2luZCBvZiBmb3JtYXR0ZXIgdGhlIHVzZXIgYXNrZWQgZm9yCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIFNQRUxMT1VUOgorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gYnVuZGxlLmdldFN0cmluZygiU3BlbGxvdXRSdWxlcyIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9SRElOQUw6CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBidW5kbGUuZ2V0U3RyaW5nKCJPcmRpbmFsUnVsZXMiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBEVVJBVElPTjoKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGJ1bmRsZS5nZXRTdHJpbmcoIkR1cmF0aW9uUnVsZXMiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNvbnN0cnVjdCB0aGUgZm9ybWF0dGVyIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbgorICAgICAgICBpbml0KGRlc2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZyb20gYSBwcmVkZWZpbmVkIGRlc2NyaXB0aW9uLiAgVXNlcyB0aGUKKyAgICAgKiBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gZm9ybWF0IEEgc2VsZWN0b3IgY29kZSBzcGVjaWZ5aW5nIHdoaWNoIGtpbmQgb2YgZm9ybWF0dGVyIHRvIGNyZWF0ZS4KKyAgICAgKiBUaGVyZSBhcmUgdGhyZWUgbGVnYWwgdmFsdWVzOiBTUEVMTE9VVCwgd2hpY2ggY3JlYXRlcyBhIGZvcm1hdHRlciB0aGF0IHNwZWxscworICAgICAqIG91dCBhIHZhbHVlIGluIHdvcmRzIGluIHRoZSBkZWZhdWx0IGxvY2FsZSdzIGxhbmd5YWdlLCBPUkRJTkFMLCB3aGljaCBhdHRhY2hlcworICAgICAqIGFuIG9yZGluYWwgc3VmZml4IGZyb20gdGhlIGRlZmF1bHQgbG9jYWxlJ3MgbGFuZ3VhZ2UgdG8gYSBudW1lcmFsLCBhbmQKKyAgICAgKiBEVVJBVElPTiwgd2hpY2ggZm9ybWF0cyBhIGR1cmF0aW9uIGluIHNlY29uZHMgYXMgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBSdWxlQmFzZWROdW1iZXJGb3JtYXQoaW50IGZvcm1hdCkgeworICAgICAgICB0aGlzKExvY2FsZS5nZXREZWZhdWx0KCksIGZvcm1hdCk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGJvaWxlcnBsYXRlCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogRHVwbGljYXRlcyB0aGlzIGZvcm1hdHRlci4KKyAgICAgKiBAcmV0dXJuIEEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IHRoYXQgaXMgZXF1YWwgdG8gdGhpcyBvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmNsb25lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdHMgdHdvIFJ1bGVCYXNlZE51bWJlckZvcm1hdHMgZm9yIGVxdWFsaXR5LgorICAgICAqIEBwYXJhbSB0aGF0IFRoZSBmb3JtYXR0ZXIgdG8gY29tcGFyZSBhZ2FpbnN0IHRoaXMgb25lLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdHdvIGZvcm1hdHRlcnMgaGF2ZSBpZGVudGljYWwgYmVoYXZpb3IuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCB0aGF0KSB7CisgICAgICAgIC8vIGlmIHRoZSBvdGhlciBvYmplY3QgaXNuJ3QgYSBSdWxlQmFzZWROdW1iZXJGb3JtYXQsIHRoYXQncworICAgICAgICAvLyBhbGwgd2UgbmVlZCB0byBrbm93CisgICAgICAgIGlmICghKHRoYXQgaW5zdGFuY2VvZiBSdWxlQmFzZWROdW1iZXJGb3JtYXQpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBjYXN0IHRoZSBvdGhlciBvYmplY3QncyBwb2ludGVyIHRvIGEgcG9pbnRlciB0byBhCisgICAgICAgICAgICAvLyBSdWxlQmFzZWROdW1iZXJGb3JtYXQKKyAgICAgICAgICAgIFJ1bGVCYXNlZE51bWJlckZvcm1hdCB0aGF0MiA9IChSdWxlQmFzZWROdW1iZXJGb3JtYXQpdGhhdDsKKworICAgICAgICAgICAgLy8gY29tcGFyZSB0aGVpciBsb2NhbGVzIGFuZCBsZW5pZW50LXBhcnNlIG1vZGVzCisgICAgICAgICAgICBpZiAoIWxvY2FsZS5lcXVhbHModGhhdDIubG9jYWxlKSB8fCBsZW5pZW50UGFyc2UgIT0gdGhhdDIubGVuaWVudFBhcnNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpZiB0aGF0IHN1Y2NlZWRzLCB0aGVuIGNvbXBhcmUgdGhlaXIgcnVsZSBzZXQgbGlzdHMKKyAgICAgICAgICAgIGlmIChydWxlU2V0cy5sZW5ndGggIT0gdGhhdDIucnVsZVNldHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydWxlU2V0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghcnVsZVNldHNbaV0uZXF1YWxzKHRoYXQyLnJ1bGVTZXRzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdlbmVyYXRlcyBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhpcyBmb3JtYXR0ZXIuCisgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIGEgcnVsZSBzZXQgdGhhdCB3aWxsIHByb2R1Y2UgYSBSdWxlQmFzZWROdW1iZXJGb3JtYXQKKyAgICAgKiB3aXRoIGlkZW50aWNhbCBiZWhhdmlvciB0byB0aGlzIG9uZS4gIFRoaXMgd29uJ3QgbmVjZXNzYXJpbHkgYmUgaWRlbnRpY2FsCisgICAgICogdG8gdGhlIHJ1bGUgc2V0IGRlc2NyaXB0aW9uIHRoYXQgd2FzIG9yaWdpbmFsbHkgcGFzc2VkIGluLCBidXQgd2lsbCBwcm9kdWNlCisgICAgICogdGhlIHNhbWUgcmVzdWx0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisKKyAgICAgICAgLy8gYWNjdW11bGF0ZSB0aGUgZGVzY3JpcHRpb25zIG9mIGFsbCB0aGUgcnVsZSBzZXRzIGluIGEKKyAgICAgICAgLy8gU3RyaW5nQnVmZmVyLCB0aGVuIGNhc3QgaXQgdG8gYSBTdHJpbmcgYW5kIHJldHVybiBpdAorICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bGVTZXRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJ1bGVTZXRzW2ldLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXcml0ZXMgdGhpcyBvYmplY3QgdG8gYSBzdHJlYW0uCisgICAgICogQHBhcmFtIG91dCBUaGUgc3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbSBvdXQpCisgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gd2UganVzdCB3cml0ZSB0aGUgdGV4dHVhbCBkZXNjcmlwdGlvbiB0byB0aGUgc3RyZWFtLCBzbyB3ZQorICAgICAgICAvLyBoYXZlIGFuIGltcGxlbWVudGF0aW9uLWluZGVwZW5kZW50IHN0cmVhbWluZyBmb3JtYXQKKyAgICAgICAgb3V0LndyaXRlVVRGKHRoaXMudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVhZHMgdGhpcyBvYmplY3QgaW4gZnJvbSBhIHN0cmVhbS4KKyAgICAgKiBAcGFyYW0gaW4gVGhlIHN0cmVhbSB0byByZWFkIGZyb20uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbSBpbikKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24geworCisgICAgICAgIC8vIHJlYWQgdGhlIGRlc2NyaXB0aW9uIGluIGZyb20gdGhlIHN0cmVhbQorICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBpbi5yZWFkVVRGKCk7CisKKyAgICAgICAgLy8gYnVpbGQgYSBicmFuZC1uZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IGZyb20gdGhlIGRlc2NyaXB0aW9uLAorICAgICAgICAvLyB0aGVuIHN0ZWFsIGl0cyBzdWJzdHJ1Y3R1cmUuICBUaGlzIG9iamVjdCdzIHN1YnN0cnVjdHVyZSBhbmQKKyAgICAgICAgLy8gdGhlIHRlbXBvcmFyeSBSdWxlQmFzZWROdW1iZXJGb3JtYXQgZHJvcCBvbiB0aGUgZmxvb3IgYW5kCisgICAgICAgIC8vIGdldCBzd2VwdCB1cCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IKKyAgICAgICAgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IHRlbXAgPSBuZXcgUnVsZUJhc2VkTnVtYmVyRm9ybWF0KGRlc2NyaXB0aW9uKTsKKyAgICAgICAgcnVsZVNldHMgPSB0ZW1wLnJ1bGVTZXRzOworICAgICAgICBkZWZhdWx0UnVsZVNldCA9IHRlbXAuZGVmYXVsdFJ1bGVTZXQ7CisgICAgfQorCisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gcHVibGljIEFQSSBmdW5jdGlvbnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgYWxsIG9mIHRoaXMgZm9ybWF0dGVyJ3MgcHVibGljIHJ1bGUgc2V0cy4KKyAgICAgKiBAcmV0dXJuIEEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgYWxsIG9mIHRoaXMgZm9ybWF0dGVyJ3MgcHVibGljIHJ1bGUgc2V0cy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UnVsZVNldE5hbWVzKCkgeworICAgICAgICAvLyBwcmVmbGlnaHQgdGhlIGl0ZXJhdGlvbiwgY291bnRpbmcgdGhlIG51bWJlciBvZiBwdWJsaWMgcnVsZSBzZXRzCisgICAgICAgIC8vIChwdWJsaWMgcnVsZSBzZXRzIGhhdmUgbmFtZXMgdGhhdCBiZWdpbiB3aXRoICUgaW5zdGVhZCBvZiAlJSkKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydWxlU2V0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKCFydWxlU2V0c1tpXS5nZXROYW1lKCkuc3RhcnRzV2l0aCgiJSUiKSkgeworICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyB0aGVuIG5ldyB1cCBhbiBhcnJheSBvZiB0aGUgcHJvcGVyIHNpemUgYW5kIGNvcHkgdGhlIG5hbWVzIGludG8gaXQKKyAgICAgICAgU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1tjb3VudF07CisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IHJ1bGVTZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoIXJ1bGVTZXRzW2ldLmdldE5hbWUoKS5zdGFydHNXaXRoKCIlJSIpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W2NvdW50KytdID0gcnVsZVNldHNbaV0uZ2V0TmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXRzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHJ1bGUgc2V0LgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciB0byBmb3JtYXQuCisgICAgICogQHBhcmFtIHJ1bGVTZXQgVGhlIG5hbWUgb2YgdGhlIHJ1bGUgc2V0IHRvIGZvcm1hdCB0aGUgbnVtYmVyIHdpdGguCisgICAgICogVGhpcyBtdXN0IGJlIHRoZSBuYW1lIG9mIGEgdmFsaWQgcHVibGljIHJ1bGUgc2V0IGZvciB0aGlzIGZvcm1hdHRlci4KKyAgICAgKiBAcmV0dXJuIEEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZm9ybWF0KGRvdWJsZSBudW1iZXIsIFN0cmluZyBydWxlU2V0KSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHJ1bGVTZXQuc3RhcnRzV2l0aCgiJSUiKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2FuJ3QgdXNlIGludGVybmFsIHJ1bGUgc2V0Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZvcm1hdChudW1iZXIsIGZpbmRSdWxlU2V0KHJ1bGVTZXQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXRzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHJ1bGUgc2V0LgorICAgICAqIChJZiB0aGUgc3BlY2lmaWVkIHJ1bGUgc2V0IHNwZWNpZmllcyBhIG1hc3RlciBbInguMCJdIHJ1bGUsIHRoaXMgZnVuY3Rpb24KKyAgICAgKiBpZ25vcmVzIGl0LiAgQ29udmVydCB0aGUgbnVtYmVyIHRvIGEgZG91YmxlIGZpcnN0IGlmIHlvdSBuZWQgaXQuKSAgVGhpcworICAgICAqIGZ1bmN0aW9uIHByZXNlcnZlcyBhbGwgdGhlIHByZWNpc2lvbiBpbiB0aGUgbG9uZy0tIGl0IGRvZXNuJ3QgY29udmVydCBpdAorICAgICAqIHRvIGEgZG91YmxlLgorICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciB0byBmb3JtYXQuCisgICAgICogQHBhcmFtIHJ1bGVTZXQgVGhlIG5hbWUgb2YgdGhlIHJ1bGUgc2V0IHRvIGZvcm1hdCB0aGUgbnVtYmVyIHdpdGguCisgICAgICogVGhpcyBtdXN0IGJlIHRoZSBuYW1lIG9mIGEgdmFsaWQgcHVibGljIHJ1bGUgc2V0IGZvciB0aGlzIGZvcm1hdHRlci4KKyAgICAgKiBAcmV0dXJuIEEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZm9ybWF0KGxvbmcgbnVtYmVyLCBTdHJpbmcgcnVsZVNldCkgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChydWxlU2V0LnN0YXJ0c1dpdGgoIiUlIikpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNhbid0IHVzZSBpbnRlcm5hbCBydWxlIHNldCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmb3JtYXQobnVtYmVyLCBmaW5kUnVsZVNldChydWxlU2V0KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRm9ybWF0cyB0aGUgc3BlY2lmaWVkIG51bWJlciB1c2luZyB0aGUgZm9ybWF0dGVyJ3MgZGVmYXVsdCBydWxlIHNldC4KKyAgICAgKiAoVGhlIGRlZmF1bHQgcnVsZSBzZXQgaXMgdGhlIGxhc3QgcHVibGljIHJ1bGUgc2V0IGRlZmluZWQgaW4gdGhlIGRlc2NyaXB0aW9uLikKKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gZm9ybWF0LgorICAgICAqIEBwYXJhbSB0b0FwcGVuZFRvIEEgU3RyaW5nQnVmZmVyIHRoYXQgdGhlIHJlc3VsdCBzaG91bGQgYmUgYXBwZW5kZWQgdG8uCisgICAgICogQHBhcmFtIGlnbm9yZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhhbWluZSBvciB1cGRhdGUgdGhlIGZpZWxkIHBvc2l0aW9uLgorICAgICAqIEByZXR1cm4gdG9BcHBlbmRUbworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdCdWZmZXIgZm9ybWF0KGRvdWJsZSBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHRvQXBwZW5kVG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbiBpZ25vcmUpIHsKKyAgICAgICAgLy8gdGhpcyBpcyBvbmUgb2YgdGhlIGluaGVyaXRlZCBmb3JtYXQoKSBtZXRob2RzLiAgU2luY2UgaXQgZG9lc24ndAorICAgICAgICAvLyBoYXZlIGEgd2F5IHRvIHNlbGVjdCB0aGUgcnVsZSBzZXQgdG8gdXNlLCBpdCBqdXN0IHVzZXMgdGhlCisgICAgICAgIC8vIGRlZmF1bHQgb25lCisgICAgICAgIHRvQXBwZW5kVG8uYXBwZW5kKGZvcm1hdChudW1iZXIsIGRlZmF1bHRSdWxlU2V0KSk7CisgICAgICAgIHJldHVybiB0b0FwcGVuZFRvOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvcm1hdHMgdGhlIHNwZWNpZmllZCBudW1iZXIgdXNpbmcgdGhlIGZvcm1hdHRlcidzIGRlZmF1bHQgcnVsZSBzZXQuCisgICAgICogKFRoZSBkZWZhdWx0IHJ1bGUgc2V0IGlzIHRoZSBsYXN0IHB1YmxpYyBydWxlIHNldCBkZWZpbmVkIGluIHRoZSBkZXNjcmlwdGlvbi4pCisgICAgICogKElmIHRoZSBzcGVjaWZpZWQgcnVsZSBzZXQgc3BlY2lmaWVzIGEgbWFzdGVyIFsieC4wIl0gcnVsZSwgdGhpcyBmdW5jdGlvbgorICAgICAqIGlnbm9yZXMgaXQuICBDb252ZXJ0IHRoZSBudW1iZXIgdG8gYSBkb3VibGUgZmlyc3QgaWYgeW91IG5lZCBpdC4pICBUaGlzCisgICAgICogZnVuY3Rpb24gcHJlc2VydmVzIGFsbCB0aGUgcHJlY2lzaW9uIGluIHRoZSBsb25nLS0gaXQgZG9lc24ndCBjb252ZXJ0IGl0CisgICAgICogdG8gYSBkb3VibGUuCisgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyAgICAgKiBAcGFyYW0gdG9BcHBlbmRUbyBBIFN0cmluZ0J1ZmZlciB0aGF0IHRoZSByZXN1bHQgc2hvdWxkIGJlIGFwcGVuZGVkIHRvLgorICAgICAqIEBwYXJhbSBpZ25vcmUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4YW1pbmUgb3IgdXBkYXRlIHRoZSBmaWVsZCBwb3NpdGlvbi4KKyAgICAgKiBAcmV0dXJuIHRvQXBwZW5kVG8KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nQnVmZmVyIGZvcm1hdChsb25nIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdG9BcHBlbmRUbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIGlnbm9yZSkgeworICAgICAgICAvLyB0aGlzIGlzIG9uZSBvZiB0aGUgaW5oZXJpdGVkIGZvcm1hdCgpIG1ldGhvZHMuICBTaW5jZSBpdCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYSB3YXkgdG8gc2VsZWN0IHRoZSBydWxlIHNldCB0byB1c2UsIGl0IGp1c3QgdXNlcyB0aGUKKyAgICAgICAgLy8gZGVmYXVsdCBvbmUKKyAgICAgICAgdG9BcHBlbmRUby5hcHBlbmQoZm9ybWF0KG51bWJlciwgZGVmYXVsdFJ1bGVTZXQpKTsKKyAgICAgICAgcmV0dXJuIHRvQXBwZW5kVG87CisgICAgfQorCisgICAgLyoqCisgICAgICogPHN0cm9uZz48Zm9udCBmYWNlPWhlbHZldGljYSBjb2xvcj1yZWQ+TkVXPC9mb250Pjwvc3Ryb25nPgorICAgICAqIEltcGxlbWVudCBjb20uaWJtLmljdS50ZXh0Lk51bWJlckZvcm1hdDoKKyAgICAgKiBGb3JtYXQgYSBCaWdJbnRlZ2VyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdCdWZmZXIgZm9ybWF0KEJpZ0ludGVnZXIgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zKSB7CisgICAgICAgIHJldHVybiBmb3JtYXQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChudW1iZXIpLCB0b0FwcGVuZFRvLCBwb3MpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8c3Ryb25nPjxmb250IGZhY2U9aGVsdmV0aWNhIGNvbG9yPXJlZD5ORVc8L2ZvbnQ+PC9zdHJvbmc+CisgICAgICogSW1wbGVtZW50IGNvbS5pYm0uaWN1LnRleHQuTnVtYmVyRm9ybWF0OgorICAgICAqIEZvcm1hdCBhIEJpZ0RlY2ltYWwuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZ0J1ZmZlciBmb3JtYXQoamF2YS5tYXRoLkJpZ0RlY2ltYWwgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zKSB7CisgICAgICAgIHJldHVybiBmb3JtYXQobmV3IGNvbS5pYm0uaWN1Lm1hdGguQmlnRGVjaW1hbChudW1iZXIpLCB0b0FwcGVuZFRvLCBwb3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxzdHJvbmc+PGZvbnQgZmFjZT1oZWx2ZXRpY2EgY29sb3I9cmVkPk5FVzwvZm9udD48L3N0cm9uZz4KKyAgICAgKiBJbXBsZW1lbnQgY29tLmlibS5pY3UudGV4dC5OdW1iZXJGb3JtYXQ6CisgICAgICogRm9ybWF0IGEgQmlnRGVjaW1hbC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nQnVmZmVyIGZvcm1hdChjb20uaWJtLmljdS5tYXRoLkJpZ0RlY2ltYWwgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zKSB7CisgICAgICAgIC8vIFRFTVBPUkFSWToKKyAgICAgICAgcmV0dXJuIGZvcm1hdChudW1iZXIuZG91YmxlVmFsdWUoKSwgdG9BcHBlbmRUbywgcG9zKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgdGhlIHNwZWNmaWVkIHN0cmluZywgYmVnaW5uaW5nIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24sIGFjY29yZGluZworICAgICAqIHRvIHRoaXMgZm9ybWF0dGVyJ3MgcnVsZXMuICBUaGlzIHdpbGwgbWF0Y2ggdGhlIHN0cmluZyBhZ2FpbnN0IGFsbCBvZiB0aGUKKyAgICAgKiBmb3JtYXR0ZXIncyBwdWJsaWMgcnVsZSBzZXRzIGFuZCByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvbmdlc3QKKyAgICAgKiBwYXJzZWFibGUgc3Vic3RyaW5nLiAgVGhpcyBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGFmZmVjdGVkIGJ5IHRoZSBsZW5pZW50CisgICAgICogcGFyc2UgbW9kZS4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgc3RyaW5nIHRvIHBhcnNlCisgICAgICogQHBhcmFtIHBhcnNlUG9zaXRpb24gT24gZW50cnksIGNvbnRhaW5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAgICogaW4gInRleHQiIHRvIGV4YW1pbmUuICBPbiBleGl0LCBoYXMgYmVlbiB1cGRhdGVkIHRvIGNvbnRhaW4gdGhlIHBvc2l0aW9uCisgICAgICogb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiAidGV4dCIgdGhhdCB3YXNuJ3QgY29uc3VtZWQgYnkgdGhlIHBhcnNlLgorICAgICAqIEByZXR1cm4gVGhlIG51bWJlciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwYXJzZWQgdGV4dC4gIFRoaXMgd2lsbCBiZSBhbgorICAgICAqIGluc3RhbmNlIG9mIGVpdGhlciBMb25nIG9yIERvdWJsZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHJlc3VsdCBoYXMgYQorICAgICAqIGZyYWN0aW9uYWwgcGFydC4KKyAgICAgKiBAc2VlICNzZXRMZW5pZW50UGFyc2VNb2RlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIE51bWJlciBwYXJzZShTdHJpbmcgdGV4dCwgUGFyc2VQb3NpdGlvbiBwYXJzZVBvc2l0aW9uKSB7CisKKyAgICAgICAgLy8gcGFyc2VQb3NpdGlvbiB0ZWxscyB1cyB3aGVyZSB0byBzdGFydCBwYXJzaW5nLiAgV2UgY29weSB0aGUKKyAgICAgICAgLy8gdGV4dCBpbiB0aGUgc3RyaW5nIGZyb20gaGVyZSB0byB0aGUgZW5kIGlucm8gYSBuZXcgc3RyaW5nLAorICAgICAgICAvLyBhbmQgY3JlYXRlIGEgbmV3IFBhcnNlUG9zaXRpb24gYW5kIHJlc3VsdCB2YXJpYWJsZSB0byB1c2UKKyAgICAgICAgLy8gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGFyc2Ugb3BlcmF0aW9uCisgICAgICAgIFN0cmluZyB3b3JraW5nVGV4dCA9IHRleHQuc3Vic3RyaW5nKHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKSk7CisgICAgICAgIFBhcnNlUG9zaXRpb24gd29ya2luZ1BvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICBOdW1iZXIgdGVtcFJlc3VsdCA9IG51bGw7CisKKyAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZCBpbgorICAgICAgICAvLyB0aGUgdmFyaW91cyB0cmlhbHMsIGFuZCB0aGUgcmVzdWx0IHRoYXQgY29ycmVzcG9uZHMgdG8gaXQKKyAgICAgICAgTnVtYmVyIHJlc3VsdCA9IG5ldyBMb25nKDApOworICAgICAgICBQYXJzZVBvc2l0aW9uIGhpZ2hXYXRlck1hcmsgPSBuZXcgUGFyc2VQb3NpdGlvbih3b3JraW5nUG9zLmdldEluZGV4KCkpOworCisgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUgcHVibGljIHJ1bGUgc2V0cyAoYmVnaW5uaW5nIHdpdGggdGhlIGRlZmF1bHQgb25lKQorICAgICAgICAvLyBhbmQgdHJ5IHBhcnNpbmcgdGhlIHRleHQgd2l0aCBlYWNoIG9mIHRoZW0uICBLZWVwIHRyYWNrIG9mIHdoaWNoCisgICAgICAgIC8vIG9uZSBjb25zdW1lcyB0aGUgbW9zdCBjaGFyYWN0ZXJzOiB0aGF0J3MgdGhlIG9uZSB0aGF0IGRldGVybWluZXMKKyAgICAgICAgLy8gdGhlIHJlc3VsdCB3ZSByZXR1cm4KKyAgICAgICAgZm9yIChpbnQgaSA9IHJ1bGVTZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAvLyBza2lwIHByaXZhdGUgcnVsZSBzZXRzCisgICAgICAgICAgICBpZiAocnVsZVNldHNbaV0uZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIiUlIikpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdHJ5IHBhcnNpbmcgdGhlIHN0cmluZyB3aXRoIHRoZSBydWxlIHNldC4gIElmIGl0IGdldHMgcGFzdCB0aGUKKyAgICAgICAgICAgIC8vIGhpZ2gtd2F0ZXIgbWFyaywgdXBkYXRlIHRoZSBoaWdoLXdhdGVyIG1hcmsgYW5kIHRoZSByZXN1bHQKKyAgICAgICAgICAgIHRlbXBSZXN1bHQgPSBydWxlU2V0c1tpXS5wYXJzZSh3b3JraW5nVGV4dCwgd29ya2luZ1BvcywgRG91YmxlLk1BWF9WQUxVRSk7CisgICAgICAgICAgICBpZiAod29ya2luZ1Bvcy5nZXRJbmRleCgpID4gaGlnaFdhdGVyTWFyay5nZXRJbmRleCgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgICAgICBoaWdoV2F0ZXJNYXJrLnNldEluZGV4KHdvcmtpbmdQb3MuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICB9CisvLyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhpcyBBUEkgb24gUGFyc2VQb3NpdGlvbiBkb2Vzbid0IGV4aXN0IGluIDEuMS54CisvLyAgICAgICAgICAgIGlmICh3b3JraW5nUG9zLmdldEVycm9ySW5kZXgoKSA+IGhpZ2hXYXRlck1hcmsuZ2V0RXJyb3JJbmRleCgpKSB7CisvLyAgICAgICAgICAgICAgICBoaWdoV2F0ZXJNYXJrLnNldEVycm9ySW5kZXgod29ya2luZ1Bvcy5nZXRFcnJvckluZGV4KCkpOworLy8gICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlmIHdlIG1hbmFnZSB0byB1c2UgdXAgYWxsIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcsCisgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIHRyeSBhbnkgbW9yZSBydWxlIHNldHMKKyAgICAgICAgICAgIGlmIChoaWdoV2F0ZXJNYXJrLmdldEluZGV4KCkgPT0gd29ya2luZ1RleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCByZXNldCBvdXIgaW50ZXJuYWwgcGFyc2UgcG9zaXRpb24gdG8gdGhlCisgICAgICAgICAgICAvLyBiZWdpbm5pbmcgYW5kIHRyeSBhZ2FpbiB3aXRoIHRoZSBuZXh0IHJ1bGUgc2V0CisgICAgICAgICAgICB3b3JraW5nUG9zLnNldEluZGV4KDApOworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkIHRoZSBoaWdoIHdhdGVyIG1hcmsgdG8gb3VyIG9yaWdpbmFsIHBhcnNlIHBvc2l0aW9uIGFuZAorICAgICAgICAvLyByZXR1cm4gdGhlIHJlc3VsdAorICAgICAgICBwYXJzZVBvc2l0aW9uLnNldEluZGV4KHBhcnNlUG9zaXRpb24uZ2V0SW5kZXgoKSArIGhpZ2hXYXRlck1hcmsuZ2V0SW5kZXgoKSk7CisvLyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhpcyBBUEkgb24gUGFyc2VQb3NpdGlvbiBkb2Vzbid0IGV4aXN0IGluIDEuMS54CisvLyAgICAgICAgaWYgKGhpZ2hXYXRlck1hcmsuZ2V0SW5kZXgoKSA9PSAwKSB7CisvLyAgICAgICAgICAgIHBhcnNlUG9zaXRpb24uc2V0RXJyb3JJbmRleChwYXJzZVBvc2l0aW9uLmdldEluZGV4KCkgKyBoaWdoV2F0ZXJNYXJrLmdldEVycm9ySW5kZXgoKSk7CisvLyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFR1cm5zIGxlbmllbnQgcGFyc2UgbW9kZSBvbiBhbmQgb2ZmLgorICAgICAqCisgICAgICogV2hlbiBpbiBsZW5pZW50IHBhcnNlIG1vZGUsIHRoZSBmb3JtYXR0ZXIgdXNlcyBhIENvbGxhdG9yIGZvciBwYXJzaW5nIHRoZSB0ZXh0LgorICAgICAqIE9ubHkgcHJpbWFyeSBkaWZmZXJlbmNlcyBhcmUgdHJlYXRlZCBhcyBzaWduaWZpY2FudC4gIFRoaXMgbWVhbnMgdGhhdCBjYXNlCisgICAgICogZGlmZmVyZW5jZXMsIGFjY2VudCBkaWZmZXJlbmNlcywgYWx0ZXJuYXRlIHNwZWxsaW5ncyBvZiB0aGUgc2FtZSBsZXR0ZXIKKyAgICAgKiAoZS5nLiwgYWUgYW5kIGEtdW1sYXV0IGluIEdlcm1hbiksIGlnbm9yYWJsZSBjaGFyYWN0ZXJzLCBldGMuIGFyZSBpZ25vcmVkIGluCisgICAgICogbWF0Y2hpbmcgdGhlIHRleHQuICBJbiBtYW55IGNhc2VzLCBudW1lcmFscyB3aWxsIGJlIGFjY2VwdGVkIGluIHBsYWNlIG9mIHdvcmRzCisgICAgICogb3IgcGhyYXNlcyBhcyB3ZWxsLgorICAgICAqCisgICAgICogRm9yIGV4YW1wbGUsIGFsbCBvZiB0aGUgZm9sbG93aW5nIHdpbGwgY29ycmVjdGx5IHBhcnNlIGFzIDI1NSBpbiBFbmdsaXNoIGluCisgICAgICogbGVuaWVudC1wYXJzZSBtb2RlOgorICAgICAqIDxicj4idHdvIGh1bmRyZWQgZmlmdHktZml2ZSIKKyAgICAgKiA8YnI+InR3byBodW5kcmVkIGZpZnR5IGZpdmUiCisgICAgICogPGJyPiJUV08gSFVORFJFRCBGSUZUWS1GSVZFIgorICAgICAqIDxicj4idHdvaHVuZHJlZGZpZnR5Zml2ZSIKKyAgICAgKiA8YnI+IjIgaHVuZHJlZCBmaWZ0eS01IgorICAgICAqCisgICAgICogVGhlIENvbGxhdG9yIHVzZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbG9jYWxlIHRoYXQgd2FzCisgICAgICogcGFzc2VkIHRvIHRoaXMgb2JqZWN0IG9uIGNvbnN0cnVjdGlvbi4gIFRoZSBkZXNjcmlwdGlvbiBwYXNzZWQgdG8gdGhpcyBvYmplY3QKKyAgICAgKiBvbiBjb25zdHJ1Y3Rpb24gbWF5IHN1cHBseSBhZGRpdGlvbmFsIGNvbGxhdGlvbiBydWxlcyB0aGF0IGFyZSBhcHBlbmRlZCB0byB0aGUKKyAgICAgKiBlbmQgb2YgdGhlIGRlZmF1bHQgY29sbGF0b3IgZm9yIHRoZSBsb2NhbGUsIGVuYWJsaW5nIGFkZGl0aW9uYWwgZXF1aXZhbGVuY2VzCisgICAgICogKHN1Y2ggYXMgYWRkaW5nIG1vcmUgaWdub3JhYmxlIGNoYXJhY3RlcnMgb3IgcGVybWl0dGluZyBzcGVsbGVkLW91dCB2ZXJzaW9uIG9mCisgICAgICogc3ltYm9sczsgc2VlIHRoZSBkZW1vIHByb2dyYW0gZm9yIGV4YW1wbGVzKS4KKyAgICAgKgorICAgICAqIEl0J3MgaW1wb3J0YW50IHRvIGVtcGhhc2l6ZSB0aGF0IGV2ZW4gc3RyaWN0IHBhcnNpbmcgaXMgcmVsYXRpdmVseSBsZW5pZW50OiBpdAorICAgICAqIHdpbGwgYWNjZXB0IHNvbWUgdGV4dCB0aGF0IGl0IHdvbid0IHByb2R1Y2UgYXMgb3V0cHV0LiAgSW4gRW5nbGlzaCwgZm9yIGV4YW1wbGUsCisgICAgICogaXQgd2lsbCBjb3JyZWN0bHkgcGFyc2UgInR3byBodW5kcmVkIHplcm8iIGFuZCAiZmlmdGVlbiBodW5kcmVkIi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlbmFibGVkIElmIHRydWUsIHR1cm5zIGxlbmllbnQtcGFyc2UgbW9kZSBvbjsgaWYgZmFsc2UsIHR1cm5zIGl0IG9mZi4KKyAgICAgKiBAc2VlIGphdmEudGV4dC5SdWxlQmFzZWRDb2xsYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldExlbmllbnRQYXJzZU1vZGUoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIGxlbmllbnRQYXJzZSA9IGVuYWJsZWQ7CisKKyAgICAgICAgLy8gaWYgd2UncmUgbGVhdmluZyBsZW5pZW50LXBhcnNlIG1vZGUsIHRocm93IGF3YXkgdGhlIGNvbGxhdG9yCisgICAgICAgIC8vIHdlJ3ZlIGJlZW4gdXNpbmcKKyAgICAgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgICAgICBjb2xsYXRvciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgbGVuaWVudC1wYXJzZSBtb2RlIGlzIHR1cm5lZCBvbi4gIExlbmllbnQgcGFyc2luZyBpcyBvZmYKKyAgICAgKiBieSBkZWZhdWx0LgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBsZW5pZW50LXBhcnNlIG1vZGUgaXMgdHVybmVkIG9uLgorICAgICAqIEBzZWUgI3NldExlbmllbnRQYXJzZU1vZGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBsZW5pZW50UGFyc2VFbmFibGVkKCkgeworICAgICAgICByZXR1cm4gbGVuaWVudFBhcnNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHJ1bGUgc2V0IHRvIHVzZS4gIElmIHJ1bGVTZXROYW1lIGlzIG51bGwsIHJlc2V0CisgICAgICogdG8gdGhlIGluaXRpYWwgZGVmYXVsdCBydWxlIHNldC4KKyAgICAgKiBAcGFyYW0gcnVsZVNldE5hbWUgdGhlIG5hbWUgb2YgdGhlIHJ1bGUgc2V0LCBvciBudWxsIHRvIHJlc2V0IHRoZSBpbml0aWFsIGRlZmF1bHQuCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgcnVsZVNldE5hbWUgaXMgbm90IHRoZSBuYW1lIG9mIGEgcHVibGljIHJ1bGVzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RGVmYXVsdFJ1bGVTZXQoU3RyaW5nIHJ1bGVTZXROYW1lKSB7CisgICAgICAgIGlmIChydWxlU2V0TmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICBpbml0RGVmYXVsdFJ1bGVTZXQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChydWxlU2V0TmFtZS5zdGFydHNXaXRoKCIlJSIpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjYW5ub3QgdXNlIHByaXZhdGUgcnVsZSBzZXQ6ICIgKyBydWxlU2V0TmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWZhdWx0UnVsZVNldCA9IGZpbmRSdWxlU2V0KHJ1bGVTZXROYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBwYWNrYWdlLWludGVybmFsIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm1hdHRlcidzIGRlZmF1bHQgcnVsZSBzZXQuICBUaGUgZGVmYXVsdAorICAgICAqIHJ1bGUgc2V0IGlzIHRoZSBsYXN0IHB1YmxpYyBydWxlIHNldCBpbiB0aGUgZGVzY3JpcHRpb24sIG9yIHRoZSBvbmUKKyAgICAgKiBtb3N0IHJlY2VudGx5IHNldCBieSBzZXREZWZhdWx0UnVsZVNldC4KKyAgICAgKiBAcmV0dXJuIFRoZSBmb3JtYXR0ZXIncyBkZWZhdWx0IHJ1bGUgc2V0LgorICAgICAqLworICAgIE5GUnVsZVNldCBnZXREZWZhdWx0UnVsZVNldCgpIHsKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRSdWxlU2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNvbGxhdG9yIHRvIHVzZSBmb3IgbGVuaWVudCBwYXJzaW5nLiAgVGhlIGNvbGxhdG9yIGlzIGxhemlseSBjcmVhdGVkOgorICAgICAqIHRoaXMgZnVuY3Rpb24gY3JlYXRlcyBpdCB0aGUgZmlyc3QgdGltZSBpdCdzIGNhbGxlZC4KKyAgICAgKiBAcmV0dXJuIFRoZSBjb2xsYXRvciB0byB1c2UgZm9yIGxlbmllbnQgcGFyc2luZywgb3IgbnVsbCBpZiBsZW5pZW50IHBhcnNpbmcKKyAgICAgKiBpcyB0dXJuZWQgb2ZmLgorICAgICAqLworICAgIENvbGxhdG9yIGdldENvbGxhdG9yKCkgeworICAgICAgICAvLyBsYXp5LWV2YXVsYXRlIHRoZSBjb2xsYXRvcgorICAgICAgICBpZiAoY29sbGF0b3IgPT0gbnVsbCAmJiBsZW5pZW50UGFyc2UpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgZGVmYXVsdCBjb2xsYXRvciBiYXNlZCBvbiB0aGUgZm9ybWF0dGVyJ3MgbG9jYWxlLAorICAgICAgICAgICAgICAgIC8vIHRoZW4gcHVsbCBvdXQgdGhhdCBjb2xsYXRvcidzIHJ1bGVzLCBhcHBlbmQgYW55IGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAvLyBydWxlcyBzcGVjaWZpZWQgaW4gdGhlIGRlc2NyaXB0aW9uLCBhbmQgY3JlYXRlIGEgX25ld18KKyAgICAgICAgICAgICAgICAvLyBjb2xsYXRvciBiYXNlZCBvbiB0aGUgY29tYmluYWl0b24gb2YgdGhvc2UgcnVsZXMKKyAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciB0ZW1wID0gKFJ1bGVCYXNlZENvbGxhdG9yKWNvbGxhdG9yLmdldEluc3RhbmNlKGxvY2FsZSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHJ1bGVzID0gdGVtcC5nZXRSdWxlcygpICsgbGVuaWVudFBhcnNlUnVsZXM7CisKKyAgICAgICAgICAgICAgICBjb2xsYXRvciA9IG5ldyBSdWxlQmFzZWRDb2xsYXRvcihydWxlcyk7CisgICAgICAgICAgICAgICAgY29sbGF0b3Iuc2V0RGVjb21wb3NpdGlvbihDb2xsYXRvci5DQU5PTklDQUxfREVDT01QT1NJVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgaXQgbWVhbnMgd2UgaGF2ZSBhIG1hbGZvcm1lZCBzZXQgb2YKKyAgICAgICAgICAgICAgICAvLyBjb2xsYXRpb24gcnVsZXMsIHdoaWNoIGhvcGVmdWxseSB3b24ndCBoYXBwZW4KKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIGNvbGxhdG9yID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIGxlbmllbnQtcGFyc2UgbW9kZSBpcyBvZmYsIHRoaXMgd2lsbCBiZSBudWxsCisgICAgICAgIC8vIChzZWUgc2V0TGVuaWVudFBhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm4gY29sbGF0b3I7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgRGVjaW1hbEZvcm1hdFN5bWJvbHMgb2JqZWN0IHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgYWxsIERlY2ltYWxGb3JtYXQKKyAgICAgKiBpbnN0YW5jZXMgb3duZWQgYnkgdGhpcyBmb3JtYXR0ZXIuICBUaGlzIG9iamVjdCBpcyBsYXppbHkgY3JlYXRlZDogdGhpcyBmdW5jdGlvbgorICAgICAqIGNyZWF0ZXMgaXQgdGhlIGZpcnN0IHRpbWUgaXQncyBjYWxsZWQuCisgICAgICogQHJldHVybiBUaGUgRGVjaW1hbEZvcm1hdFN5bWJvbHMgb2JqZWN0IHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgYWxsIERlY2ltYWxGb3JtYXQKKyAgICAgKiBpbnN0YW5jZXMgb3duZWQgYnkgdGhpcyBmb3JtYXR0ZXIuCisgICAgICovCisgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMgZ2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKSB7CisgICAgICAgIC8vIGxhenktZXZhbHVhdGUgdGhlIERlY2ltYWxGb3JtYXRTeW1ib2xzIG9iamVjdC4gIFRoaXMgb2JqZWN0CisgICAgICAgIC8vIGlzIHNoYXJlZCBieSBhbGwgRGVjaW1hbEZvcm1hdCBpbnN0YW5jZXMgYmVsb25naW5nIHRvIHRoaXMKKyAgICAgICAgLy8gZm9ybWF0dGVyCisgICAgICAgIGlmIChkZWNpbWFsRm9ybWF0U3ltYm9scyA9PSBudWxsKSB7CisgICAgICAgICAgICBkZWNpbWFsRm9ybWF0U3ltYm9scyA9IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhsb2NhbGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkZWNpbWFsRm9ybWF0U3ltYm9sczsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY29uc3RydWN0aW9uIGltcGxlbWVudGF0aW9uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIGRlc2NyaXB0aW9uIGFuZCB1c2VzIGl0IHRvIGJ1aWxkIGFsbCBvZgorICAgICAqIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZSBmb3JtYXR0ZXIgdXNlcyB0byBkbyBmb3JtYXR0aW5nCisgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGVyJ3MgZGVzaXJlZCBiZWhhdmlvci4KKyAgICAgKiBUaGlzIGlzIGVpdGhlciBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvciBsb2FkZWQgb3V0IG9mIGEgcmVzb3VyY2UKKyAgICAgKiBieSBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycywgYW5kIGlzIGluIHRoZSBkZXNjcmlwdGlvbiBmb3JtYXQgc3BlY2lmaWVkCisgICAgICogaW4gdGhlIGNsYXNzIGRvY3MuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGluaXQoU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIC8vIHN0YXJ0IGJ5IHN0cmlwcGluZyB0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIGFsbCB0aGUgcnVsZXMKKyAgICAgICAgLy8gKHRoaXMgaXMgYWxsIHRoZSB3aGl0ZXNwYWNlIGZvbGx3aW5nIGVhY2ggc2VtaWNvbG9uIGluIHRoZQorICAgICAgICAvLyBkZXNjcmlwdGlvbikuICBUaGlzIGFsbG93cyB1cyB0byBsb29rIGZvciBydWxlLXNldCBib3VuZGFyaWVzCisgICAgICAgIC8vIGJ5IHNlYXJjaGluZyBmb3IgIjslIiB3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dCB3aGl0ZXNwYWNlCisgICAgICAgIC8vIGJldHdlZW4gdGhlIDsgYW5kIHRoZSAlCisgICAgICAgIGRlc2NyaXB0aW9uID0gc3RyaXBXaGl0ZXNwYWNlKGRlc2NyaXB0aW9uKTsKKworICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIHNldCBvZiBsZW5pZW50LXBhcnNlIHJ1bGVzLiAgSWYgdGhlcmUKKyAgICAgICAgLy8gaXMsIHB1bGwgdGhlbSBvdXQgaW50byBvdXIgdGVtcG9yYXJ5IGhvbGRpbmcgcGxhY2UgZm9yIHRoZW0sCisgICAgICAgIC8vIGFuZCBkZWxldGUgdGhlbSBmcm9tIHRoZSBkZXNjcmlwdGlvbiBiZWZvcmUgdGhlIHJlYWwgZGVzY2lwdGlvbi0KKyAgICAgICAgLy8gcGFyc2luZyBjb2RlIHNlZXMgdGhlbQorICAgICAgICBpbnQgbHAgPSBkZXNjcmlwdGlvbi5pbmRleE9mKCIlJWxlbmllbnQtcGFyc2U6Iik7CisgICAgICAgIGlmIChscCAhPSAtMSkgeworICAgICAgICAgICAgLy8gd2UndmUgZ290IHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgaW4gdGhlIG1pZGRsZSBvZiBhIHJ1bGUKKyAgICAgICAgICAgIC8vICh3aGVyZSAiJSVsZW5pZW50LXBhcnNlIiB3b3VsZCBhY3R1YWxseSBnZXQgdHJlYXRlZCBhcworICAgICAgICAgICAgLy8gcnVsZSB0ZXh0KQorICAgICAgICAgICAgaWYgKGxwID09IDAgfHwgZGVzY3JpcHRpb24uY2hhckF0KGxwIC0gMSkgPT0gJzsnKSB7CisgICAgICAgICAgICAgICAgLy8gbG9jYXRlIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgYWN0dWFsIGNvbGxhdGlvbgorICAgICAgICAgICAgICAgIC8vIHJ1bGVzICh0aGVyZSBtYXkgYmUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZSBuYW1lIGFuZAorICAgICAgICAgICAgICAgIC8vIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgZGVzY3JpcHRpb24pCisgICAgICAgICAgICAgICAgaW50IGxwRW5kID0gZGVzY3JpcHRpb24uaW5kZXhPZigiOyUiLCBscCk7CisKKyAgICAgICAgICAgICAgICBpZiAobHBFbmQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgbHBFbmQgPSBkZXNjcmlwdGlvbi5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBscFN0YXJ0ID0gbHAgKyAiJSVsZW5pZW50LXBhcnNlOiIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGRlc2NyaXB0aW9uLmNoYXJBdChscFN0YXJ0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgKytscFN0YXJ0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNvcHkgb3V0IHRoZSBsZW5pZW50LXBhcnNlIHJ1bGVzIGFuZCBkZWxldGUgdGhlbQorICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgbGVuaWVudFBhcnNlUnVsZXMgPSBkZXNjcmlwdGlvbi5zdWJzdHJpbmcobHBTdGFydCwgbHBFbmQpOworCisgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHRlbXAgPSBuZXcgU3RyaW5nQnVmZmVyKGRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCBscCkpOworICAgICAgICAgICAgICAgIGlmIChscEVuZCArIDEgPCBkZXNjcmlwdGlvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICB0ZW1wLmFwcGVuZChkZXNjcmlwdGlvbi5zdWJzdHJpbmcobHBFbmQgKyAxKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGVtcC50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gcHJlLWZsaWdodCBwYXJzaW5nIHRoZSBkZXNjcmlwdGlvbiBhbmQgY291bnQgdGhlIG51bWJlciBvZgorICAgICAgICAvLyBydWxlIHNldHMgKCI7JSIgbWFya3MgdGhlIGVuZCBvZiBvbmUgcnVsZSBzZXQgYW5kIHRoZSBiZWdpbm5pbmcKKyAgICAgICAgLy8gb2YgdGhlIG5leHQpCisgICAgICAgIGludCBudW1SdWxlU2V0cyA9IDA7CisgICAgICAgIGZvciAoaW50IHAgPSBkZXNjcmlwdGlvbi5pbmRleE9mKCI7JSIpOyBwICE9IC0xOyBwID0gZGVzY3JpcHRpb24uaW5kZXhPZigiOyUiLCBwKSkgeworICAgICAgICAgICAgKytudW1SdWxlU2V0czsKKyAgICAgICAgICAgICsrcDsKKyAgICAgICAgfQorICAgICAgICArK251bVJ1bGVTZXRzOworCisgICAgICAgIC8vIG91ciBydWxlIGxpc3QgaXMgYW4gYXJyYXkgb2YgdGhlIGFwcHJwcmlhdGUgc2l6ZQorICAgICAgICBydWxlU2V0cyA9IG5ldyBORlJ1bGVTZXRbbnVtUnVsZVNldHNdOworCisgICAgICAgIC8vIGRpdmlkZSB1cCB0aGUgZGVzY3JpcHRpb25zIGludG8gaW5kaXZpZHVhbCBydWxlLXNldCBkZXNjcmlwdGlvbnMKKyAgICAgICAgLy8gYW5kIHN0b3JlIHRoZW0gaW4gYSB0ZW1wb3JhcnkgYXJyYXkuICBBdCBlYWNoIHN0ZXAsIHdlIGFsc28KKyAgICAgICAgLy8gbmV3IHVwIGEgcnVsZSBzZXQsIGJ1dCBhbGwgdGhpcyBkb2VzIGlzIGluaXRpYWxpemUgaXRzIG5hbWUKKyAgICAgICAgLy8gYW5kIHJlbW92ZSBpdCBmcm9tIGl0cyBkZXNjcmlwdGlvbi4gIFdlIGNhbid0IGFjdHVhbGx5IHBhcnNlCisgICAgICAgIC8vIHRoZSByZXN0IG9mIHRoZSBkZXNjcmlwdGlvbnMgYW5kIGZpbmlzaCBpbml0aWFsaXppbmcgZXZlcnl0aGluZworICAgICAgICAvLyBiZWNhdXNlIHdlIGhhdmUgdG8ga25vdyB0aGUgbmFtZXMgYW5kIGxvY2F0aW9ucyBvZiBhbGwgdGhlIHJ1bGUKKyAgICAgICAgLy8gc2V0cyBiZWZvcmUgd2UgY2FuIGFjdHVhbGx5IHNldCBldmVyeXRoaW5nIHVwCisgICAgICAgIFN0cmluZ1tdIHJ1bGVTZXREZXNjcmlwdGlvbnMgPSBuZXcgU3RyaW5nW251bVJ1bGVTZXRzXTsKKworICAgICAgICBpbnQgY3VyUnVsZVNldCA9IDA7CisgICAgICAgIGludCBzdGFydCA9IDA7CisgICAgICAgIGZvciAoaW50IHAgPSBkZXNjcmlwdGlvbi5pbmRleE9mKCI7JSIpOyBwICE9IC0xOyBwID0gZGVzY3JpcHRpb24uaW5kZXhPZigiOyUiLCBzdGFydCkpIHsKKyAgICAgICAgICAgIHJ1bGVTZXREZXNjcmlwdGlvbnNbY3VyUnVsZVNldF0gPSBkZXNjcmlwdGlvbi5zdWJzdHJpbmcoc3RhcnQsIHAgKyAxKTsKKyAgICAgICAgICAgIHJ1bGVTZXRzW2N1clJ1bGVTZXRdID0gbmV3IE5GUnVsZVNldChydWxlU2V0RGVzY3JpcHRpb25zLCBjdXJSdWxlU2V0KTsKKyAgICAgICAgICAgICsrY3VyUnVsZVNldDsKKyAgICAgICAgICAgIHN0YXJ0ID0gcCArIDE7CisgICAgICAgIH0KKyAgICAgICAgcnVsZVNldERlc2NyaXB0aW9uc1tjdXJSdWxlU2V0XSA9IGRlc2NyaXB0aW9uLnN1YnN0cmluZyhzdGFydCk7CisgICAgICAgIHJ1bGVTZXRzW2N1clJ1bGVTZXRdID0gbmV3IE5GUnVsZVNldChydWxlU2V0RGVzY3JpcHRpb25zLCBjdXJSdWxlU2V0KTsKKworICAgICAgICAvLyBub3cgd2UgY2FuIHRha2Ugbm90ZSBvZiB0aGUgZm9ybWF0dGVyJ3MgZGVmYXVsdCBydWxlIHNldCwgd2hpY2gKKyAgICAgICAgLy8gaXMgdGhlIGxhc3QgcHVibGljIHJ1bGUgc2V0IGluIHRoZSBkZXNjcmlwdGlvbiAoaXQncyB0aGUgbGFzdAorICAgICAgICAvLyByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgc28gdGhhdCBhIHVzZXIgY2FuIGNyZWF0ZSBhIG5ldyBmb3JtYXR0ZXIKKyAgICAgICAgLy8gZnJvbSBhbiBleGlzdGluZyBmb3JtYXR0ZXIgYW5kIGNoYW5nZSBpdHMgZGVmYXVsdCBiZXZoYWlvciBqdXN0CisgICAgICAgIC8vIGJ5IGFwcGVuZGluZyBtb3JlIHJ1bGUgc2V0cyB0byB0aGUgZW5kKQorICAgICAgICBpbml0RGVmYXVsdFJ1bGVTZXQoKTsKKworICAgICAgICAvLyBmaW5hbGx5LCB3ZSBjYW4gZ28gYmFjayB0aHJvdWdoIHRoZSB0ZW1wb3JhcnkgZGVzY3JpcHRpb25zCisgICAgICAgIC8vIGxpc3QgYW5kIGZpbmlzaCBzZXRpbmcgdXAgdGhlIHN1YnN0cnVjdHVyZSAoYW5kIHdlIHRocm93CisgICAgICAgIC8vIGF3YXkgdGhlIHRlbXBvcmFyeSBkZXNjcmlwdGlvbnMgYXMgd2UgZ28pCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVsZVNldHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHJ1bGVTZXRzW2ldLnBhcnNlUnVsZXMocnVsZVNldERlc2NyaXB0aW9uc1tpXSwgdGhpcyk7CisgICAgICAgICAgICBydWxlU2V0RGVzY3JpcHRpb25zW2ldID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBpbml0KCkgdG8gc3RyaXAgd2hpdGVzcGFjZSBiZXR3ZWVuIHJ1bGVzIChpLmUuLAorICAgICAqIGFmdGVyIHNlbWljb2xvbnMpLgorICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZm9ybWF0dGVyIGRlc2NyaXB0aW9uCisgICAgICogQHJldHVybiBUaGUgZGVzY3JpcHRpb24gd2l0aCBhbGwgdGhlIHdoaXRlc3BhY2UgdGhhdCBmb2xsb3dzIHNlbWljb2xvbnMKKyAgICAgKiB0YWtlbiBvdXQuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgc3RyaXBXaGl0ZXNwYWNlKFN0cmluZyBkZXNjcmlwdGlvbikgeworICAgICAgICAvLyBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgbWV0aG9kIHRoYXQgZGVsZXRlcyBjaGFyYWN0ZXJzICh3aHk/ISEpCisgICAgICAgIC8vIGNyZWF0ZSBhIG53ZSBTdHJpbmdCdWZmZXIgdG8gY29weSB0aGUgdGV4dCBpbnRvCisgICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGFyYWN0ZXJzLi4uCisgICAgICAgIGludCBzdGFydCA9IDA7CisgICAgICAgIHdoaWxlIChzdGFydCAhPSAtMSAmJiBzdGFydCA8IGRlc2NyaXB0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAvLyBzZWVrIHRvIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuLi4KKyAgICAgICAgICAgIHdoaWxlIChzdGFydCA8IGRlc2NyaXB0aW9uLmxlbmd0aCgpCisgICAgICAgICAgICAgICAgICAgJiYgVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoZGVzY3JpcHRpb24uY2hhckF0KHN0YXJ0KSkpIHsKKyAgICAgICAgICAgICAgICArK3N0YXJ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBsb2NhdGUgdGhlIG5leHQgc2VtaWNvbG9uIGluIHRoZSB0ZXh0IGFuZCBjb3B5dCBoZSB0ZXh0IGZyb20KKyAgICAgICAgICAgIC8vIG91ciBjdXJyZW50IHBvc2l0aW9uIHVwIHRvIHRoYXQgc2VtaWNvbG9uIGludG8gdGhlIHJlc3VsdAorICAgICAgICAgICAgaW50IHA7CisgICAgICAgICAgICBwID0gZGVzY3JpcHRpb24uaW5kZXhPZignOycsIHN0YXJ0KTsKKyAgICAgICAgICAgIGlmIChwID09IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gb3IgaWYgd2UgZG9uJ3QgZmluZCBhIHNlbWljb2xvbiwganVzdCBjb3B5IHRoZSByZXN0IG9mCisgICAgICAgICAgICAgICAgLy8gdGhlIHN0cmluZyBpbnRvIHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRlc2NyaXB0aW9uLnN1YnN0cmluZyhzdGFydCkpOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwIDwgZGVzY3JpcHRpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRlc2NyaXB0aW9uLnN1YnN0cmluZyhzdGFydCwgcCArIDEpKTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IHAgKyAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB3aGVuIHdlIGdldCBoZXJlLCB3ZSd2ZSBzZWVrZWQgb2ZmIHRoZSBlbmQgb2YgdGhlIHNyaW5nLCBhbmQKKyAgICAgICAgICAgIC8vIHdlIHRlcm1pbmF0ZSB0aGUgbG9vcCAod2UgY29udGludWUgdW50aWwgKnN0YXJ0KiBpcyAtMSByYXRoZXIKKyAgICAgICAgICAgIC8vIHRoYW4gdW50aWwgKnAqIGlzIC0xLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSdkIG1pc3MgdGhlIGxhc3QKKyAgICAgICAgICAgIC8vIHJ1bGUgaW4gdGhlIGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhcnQgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgT05MWSBEVVJJTkcgQ09OU1RSVUNUSU9OIHRvIGZpbGwgaW4gdGhlCisgICAgICogZGVmYXVsdFJ1bGVTZXQgdmFyaWFibGUgb25jZSB3ZSd2ZSBzZXQgdXAgYWxsIHRoZSBydWxlIHNldHMuCisgICAgICogVGhlIGRlZmF1bHQgcnVsZSBzZXQgaXMgdGhlIGxhc3QgcHVibGljIHJ1bGUgc2V0IGluIHRoZSBkZXNjcmlwdGlvbi4KKyAgICAgKiAoSXQncyB0aGUgbGFzdCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgc28gdGhhdCBhIGNhbGxlciBjYW4gYXBwZW5kCisgICAgICogdGV4dCB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGZvcm1hdHRlciBkZXNjcmlwdGlvbiB0byBjaGFuZ2UgaXRzCisgICAgICogYmVoYXZpb3IuKQorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBpbml0RGVmYXVsdFJ1bGVTZXQoKSB7CisgICAgICAgIC8vIHNlZWsgYmFja3dhcmQgZnJvbSB0aGUgZW5kIG9mIHRoZSBsaXN0IHVudGlsIHdlIHJlYWNoIGEgcnVsZSBzZXQKKyAgICAgICAgLy8gd2hvc2UgbmFtZSBET0VTTidUIGJlZ2luIHdpdGggJSUuICBUaGF0J3MgdGhlIGRlZmF1bHQgcnVsZSBzZXQKKyAgICAgICAgZm9yIChpbnQgaSA9IHJ1bGVTZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAoIXJ1bGVTZXRzW2ldLmdldE5hbWUoKS5zdGFydHNXaXRoKCIlJSIpKSB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFJ1bGVTZXQgPSBydWxlU2V0c1tpXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdFJ1bGVTZXQgPSBydWxlU2V0c1tydWxlU2V0cy5sZW5ndGggLSAxXTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZm9ybWF0dGluZyBpbXBsZW1lbnRhdGlvbgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEJvdHRsZW5lY2sgdGhyb3VnaCB3aGljaCBhbGwgdGhlIHB1YmxpYyBmb3JtYXQoKSBtZXRob2RzCisgICAgICogdGhhdCB0YWtlIGEgZG91YmxlIHBhc3MuIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB3ZSBrbm93CisgICAgICogd2hpY2ggcnVsZSBzZXQgd2UncmUgdXNpbmcgdG8gZG8gdGhlIGZvcm1hdHRpbmcuCisgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdAorICAgICAqIEBwYXJhbSBydWxlU2V0IFRoZSBydWxlIHNldCB0byB1c2UgdG8gZm9ybWF0IHRoZSBudW1iZXIKKyAgICAgKiBAcmV0dXJuIFRoZSB0ZXh0IHRoYXQgcmVzdWx0ZWQgZnJvbSBmb3JtYXR0aW5nIHRoZSBudW1iZXIKKyAgICAgKi8KKyAgICBTdHJpbmcgZm9ybWF0KGRvdWJsZSBudW1iZXIsIE5GUnVsZVNldCBydWxlU2V0KSB7CisgICAgICAgIC8vIGFsbCBBUEkgZm9ybWF0KCkgcm91dGluZXMgdGhhdCB0YWtlIGEgZG91YmxlIHZlY3RvciB0aHJvdWdoCisgICAgICAgIC8vIGhlcmUuICBDcmVhdGUgYW4gZW1wdHkgc3RyaW5nIGJ1ZmZlciB3aGVyZSB0aGUgcmVzdWx0IHdpbGwKKyAgICAgICAgLy8gYmUgYnVpbHQsIGFuZCBwYXNzIGl0IHRvIHRoZSBydWxlIHNldCAoYWxvbmcgd2l0aCBhbiBpbnNlcnRpb24KKyAgICAgICAgLy8gcG9zaXRpb24gb2YgMCBhbmQgdGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQpIHRvIHRoZSBydWxlIHNldAorICAgICAgICAvLyBmb3IgZm9ybWF0dGluZworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBydWxlU2V0LmZvcm1hdChudW1iZXIsIHJlc3VsdCwgMCk7CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCb3R0bGVuZWNrIHRocm91Z2ggd2hpY2ggYWxsIHRoZSBwdWJsaWMgZm9ybWF0KCkgbWV0aG9kcworICAgICAqIHRoYXQgdGFrZSBhIGxvbmcgcGFzcy4gQnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUsIHdlIGtub3cKKyAgICAgKiB3aGljaCBydWxlIHNldCB3ZSdyZSB1c2luZyB0byBkbyB0aGUgZm9ybWF0dGluZy4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gZm9ybWF0CisgICAgICogQHBhcmFtIHJ1bGVTZXQgVGhlIHJ1bGUgc2V0IHRvIHVzZSB0byBmb3JtYXQgdGhlIG51bWJlcgorICAgICAqIEByZXR1cm4gVGhlIHRleHQgdGhhdCByZXN1bHRlZCBmcm9tIGZvcm1hdHRpbmcgdGhlIG51bWJlcgorICAgICAqLworICAgIFN0cmluZyBmb3JtYXQobG9uZyBudW1iZXIsIE5GUnVsZVNldCBydWxlU2V0KSB7CisgICAgICAgIC8vIGFsbCBBUEkgZm9ybWF0KCkgcm91dGluZXMgdGhhdCB0YWtlIGEgZG91YmxlIHZlY3RvciB0aHJvdWdoCisgICAgICAgIC8vIGhlcmUuICBXZSBoYXZlIHRoZXNlIHR3byBpZGVudGljYWwgZnVuY3Rpb25zLS0gb25lIHRha2luZyBhCisgICAgICAgIC8vIGRvdWJsZSBhbmQgb25lIHRha2luZyBhIGxvbmctLSB0aGUgY291cGxlIGRpZ2l0cyBvZiBwcmVjaXNpb24KKyAgICAgICAgLy8gdGhhdCBsb25nIGhhcyBidXQgZG91YmxlIGRvZXNuJ3QgKGJvdGggdHlwZXMgYXJlIDggYnl0ZXMgbG9uZywKKyAgICAgICAgLy8gYnV0IGRvdWJsZSBoYXMgdG8gYm9ycm93IHNvbWUgb2YgdGhlIG1hbnRpc3NhIGJpdHMgdG8gaG9sZAorICAgICAgICAvLyB0aGUgZXhwb25lbnQpLgorICAgICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgc3RyaW5nIGJ1ZmZlciB3aGVyZSB0aGUgcmVzdWx0IHdpbGwKKyAgICAgICAgLy8gYmUgYnVpbHQsIGFuZCBwYXNzIGl0IHRvIHRoZSBydWxlIHNldCAoYWxvbmcgd2l0aCBhbiBpbnNlcnRpb24KKyAgICAgICAgLy8gcG9zaXRpb24gb2YgMCBhbmQgdGhlIG51bWJlciBiZWluZyBmb3JtYXR0ZWQpIHRvIHRoZSBydWxlIHNldAorICAgICAgICAvLyBmb3IgZm9ybWF0dGluZworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBydWxlU2V0LmZvcm1hdChudW1iZXIsIHJlc3VsdCwgMCk7CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lZCBydWxlIHNldC4gIFRocm93cyBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKyAgICAgKiBpZiB0aGlzIGZvcm1hdHRlciBkb2Vzbid0IGhhdmUgYSBydWxlIHNldCB3aXRoIHRoYXQgbmFtZS4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBydWxlIHNldAorICAgICAqIEByZXR1cm4gVGhlIHJ1bGUgc2V0IHdpdGggdGhhdCBuYW1lCisgICAgICovCisgICAgTkZSdWxlU2V0IGZpbmRSdWxlU2V0KFN0cmluZyBuYW1lKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydWxlU2V0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHJ1bGVTZXRzW2ldLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVsZVNldHNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTm8gcnVsZSBzZXQgbmFtZWQgIiArIG5hbWUpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1J1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkxMjMzMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1J1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSw2NDEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1J1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMi8wMyAxODo1NzozNiAkCisgKiAkUmV2aXNpb246IDEuNTggJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuZGF0YS5SZXNvdXJjZVJlYWRlcjsKKworLyoqCisgKiA8Y29kZT5SdWxlQmFzZWRUcmFuc2xpdGVyYXRvcjwvY29kZT4gaXMgYSB0cmFuc2xpdGVyYXRvcgorICogdGhhdCByZWFkcyBhIHNldCBvZiBydWxlcyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaG93IHRvIHBlcmZvcm0KKyAqIHRyYW5zbGF0aW9ucy4gUnVsZSBzZXRzIGFyZSBzdG9yZWQgaW4gcmVzb3VyY2UgYnVuZGxlcyBpbmRleGVkIGJ5CisgKiBuYW1lLiBSdWxlcyB3aXRoaW4gYSBydWxlIHNldCBhcmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMgKCc7JykuCisgKiBUbyBpbmNsdWRlIGEgbGl0ZXJhbCBzZW1pY29sb24sIHByZWZpeCBpdCB3aXRoIGEgYmFja3NsYXNoICgnXCcpLgorICogV2hpdGVzcGFjZSwgYXMgZGVmaW5lZCBieSA8Y29kZT5VQ2hhcmFjdGVyUHJvcGVydHkuaXNSdWxlV2hpdGVTcGFjZSgpPC9jb2RlPiwKKyAqIGlzIGlnbm9yZWQuIElmIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9uIGEgbGluZSBpcyAnIycsCisgKiB0aGUgZW50aXJlIGxpbmUgaXMgaWdub3JlZCBhcyBhIGNvbW1lbnQuIDwvcD4KKyAqCisgKiA8cD5FYWNoIHNldCBvZiBydWxlcyBjb25zaXN0cyBvZiB0d28gZ3JvdXBzLCBvbmUgZm9yd2FyZCwgYW5kIG9uZQorICogcmV2ZXJzZS4gVGhpcyBpcyBhIGNvbnZlbnRpb24gdGhhdCBpcyBub3QgZW5mb3JjZWQ7IHJ1bGVzIGZvciBvbmUKKyAqIGRpcmVjdGlvbiBtYXkgYmUgb21pdHRlZCwgd2l0aCB0aGUgcmVzdWx0IHRoYXQgdHJhbnNsYXRpb25zIGluCisgKiB0aGF0IGRpcmVjdGlvbiB3aWxsIG5vdCBtb2RpZnkgdGhlIHNvdXJjZSB0ZXh0LiBJbiBhZGRpdGlvbiwKKyAqIGJpZGlyZWN0aW9uYWwgZm9yd2FyZC1yZXZlcnNlIHJ1bGVzIG1heSBiZSBzcGVjaWZpZWQgZm9yCisgKiBzeW1tZXRyaWNhbCB0cmFuc2Zvcm1hdGlvbnMuPC9wPgorICoKKyAqIDxwPjxiPlJ1bGUgc3ludGF4PC9iPiA8L3A+CisgKgorICogPHA+UnVsZSBzdGF0ZW1lbnRzIHRha2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6IDwvcD4KKyAqCisgKiA8ZGw+CisgKiAgICAgPGR0Pjxjb2RlPiRhbGVmbWFkZGE9XHUwNjIyOzwvY29kZT48L2R0PgorICogICAgIDxkZD48c3Ryb25nPlZhcmlhYmxlIGRlZmluaXRpb24uPC9zdHJvbmc+IFRoZSBuYW1lIG9uIHRoZQorICogICAgICAgICBsZWZ0IGlzIGFzc2lnbmVkIHRoZSB0ZXh0IG9uIHRoZSByaWdodC4gSW4gdGhpcyBleGFtcGxlLAorICogICAgICAgICBhZnRlciB0aGlzIHN0YXRlbWVudCwgaW5zdGFuY2VzIG9mIHRoZSBsZWZ0IGhhbmQgbmFtZSwKKyAqICAgICAgICAgJnF1b3Q7PGNvZGU+JGFsZWZtYWRkYTwvY29kZT4mcXVvdDssIHdpbGwgYmUgcmVwbGFjZWQgYnkKKyAqICAgICAgICAgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIFUrMDYyMi4gVmFyaWFibGUgbmFtZXMgbXVzdCBiZWdpbgorICogICAgICAgICB3aXRoIGEgbGV0dGVyIGFuZCBjb25zaXN0IG9ubHkgb2YgbGV0dGVycywgZGlnaXRzLCBhbmQKKyAqICAgICAgICAgdW5kZXJzY29yZXMuIENhc2UgaXMgc2lnbmlmaWNhbnQuIER1cGxpY2F0ZSBuYW1lcyBjYXVzZQorICogICAgICAgICBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duLCB0aGF0IGlzLCB2YXJpYWJsZXMgY2Fubm90IGJlCisgKiAgICAgICAgIHJlZGVmaW5lZC4gVGhlIHJpZ2h0IGhhbmQgc2lkZSBtYXkgY29udGFpbiB3ZWxsLWZvcm1lZAorICogICAgICAgICB0ZXh0IG9mIGFueSBsZW5ndGgsIGluY2x1ZGluZyBubyB0ZXh0IGF0IGFsbCAoJnF1b3Q7PGNvZGU+JGVtcHR5PTs8L2NvZGU+JnF1b3Q7KS4KKyAqICAgICAgICAgVGhlIHJpZ2h0IGhhbmQgc2lkZSBtYXkgY29udGFpbiBlbWJlZGRlZCA8Y29kZT5Vbmljb2RlU2V0PC9jb2RlPgorICogICAgICAgICBwYXR0ZXJucywgZm9yIGV4YW1wbGUsICZxdW90Ozxjb2RlPiRzb2Z0dm93ZWw9W2VpeUVJWV08L2NvZGU+JnF1b3Q7LjwvZGQ+CisgKiAgICAgPGRkPiZuYnNwOzwvZGQ+CisgKiAgICAgPGR0Pjxjb2RlPmFpJmd0OyRhbGVmbWFkZGE7PC9jb2RlPjwvZHQ+CisgKiAgICAgPGRkPjxzdHJvbmc+Rm9yd2FyZCB0cmFuc2xhdGlvbiBydWxlLjwvc3Ryb25nPiBUaGlzIHJ1bGUKKyAqICAgICAgICAgc3RhdGVzIHRoYXQgdGhlIHN0cmluZyBvbiB0aGUgbGVmdCB3aWxsIGJlIGNoYW5nZWQgdG8gdGhlCisgKiAgICAgICAgIHN0cmluZyBvbiB0aGUgcmlnaHQgd2hlbiBwZXJmb3JtaW5nIGZvcndhcmQKKyAqICAgICAgICAgdHJhbnNsaXRlcmF0aW9uLjwvZGQ+CisgKiAgICAgPGR0PiZuYnNwOzwvZHQ+CisgKiAgICAgPGR0Pjxjb2RlPmFpJmx0OyRhbGVmbWFkZGE7PC9jb2RlPjwvZHQ+CisgKiAgICAgPGRkPjxzdHJvbmc+UmV2ZXJzZSB0cmFuc2xhdGlvbiBydWxlLjwvc3Ryb25nPiBUaGlzIHJ1bGUKKyAqICAgICAgICAgc3RhdGVzIHRoYXQgdGhlIHN0cmluZyBvbiB0aGUgcmlnaHQgd2lsbCBiZSBjaGFuZ2VkIHRvCisgKiAgICAgICAgIHRoZSBzdHJpbmcgb24gdGhlIGxlZnQgd2hlbiBwZXJmb3JtaW5nIHJldmVyc2UKKyAqICAgICAgICAgdHJhbnNsaXRlcmF0aW9uLjwvZGQ+CisgKiA8L2RsPgorICoKKyAqIDxkbD4KKyAqICAgICA8ZHQ+PGNvZGU+YWkmbHQ7Jmd0OyRhbGVmbWFkZGE7PC9jb2RlPjwvZHQ+CisgKiAgICAgPGRkPjxzdHJvbmc+QmlkaXJlY3Rpb25hbCB0cmFuc2xhdGlvbiBydWxlLjwvc3Ryb25nPiBUaGlzCisgKiAgICAgICAgIHJ1bGUgc3RhdGVzIHRoYXQgdGhlIHN0cmluZyBvbiB0aGUgcmlnaHQgd2lsbCBiZSBjaGFuZ2VkCisgKiAgICAgICAgIHRvIHRoZSBzdHJpbmcgb24gdGhlIGxlZnQgd2hlbiBwZXJmb3JtaW5nIGZvcndhcmQKKyAqICAgICAgICAgdHJhbnNsaXRlcmF0aW9uLCBhbmQgdmljZSB2ZXJzYSB3aGVuIHBlcmZvcm1pbmcgcmV2ZXJzZQorICogICAgICAgICB0cmFuc2xpdGVyYXRpb24uPC9kZD4KKyAqIDwvZGw+CisgKgorICogPHA+VHJhbnNsYXRpb24gcnVsZXMgY29uc2lzdCBvZiBhIDxlbT5tYXRjaCBwYXR0ZXJuPC9lbT4gYW5kIGFuIDxlbT5vdXRwdXQKKyAqIHN0cmluZzwvZW0+LiBUaGUgbWF0Y2ggcGF0dGVybiBjb25zaXN0cyBvZiBsaXRlcmFsIGNoYXJhY3RlcnMsCisgKiBvcHRpb25hbGx5IHByZWNlZGVkIGJ5IGNvbnRleHQsIGFuZCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5CisgKiBjb250ZXh0LiBDb250ZXh0IGNoYXJhY3RlcnMsIGxpa2UgbGl0ZXJhbCBwYXR0ZXJuIGNoYXJhY3RlcnMsCisgKiBtdXN0IGJlIG1hdGNoZWQgaW4gdGhlIHRleHQgYmVpbmcgdHJhbnNsaXRlcmF0ZWQuIEhvd2V2ZXIsIHVubGlrZQorICogbGl0ZXJhbCBwYXR0ZXJuIGNoYXJhY3RlcnMsIHRoZXkgYXJlIG5vdCByZXBsYWNlZCBieSB0aGUgb3V0cHV0CisgKiB0ZXh0LiBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4gJnF1b3Q7PGNvZGU+YWJje2RlZn08L2NvZGU+JnF1b3Q7CisgKiBpbmRpY2F0ZXMgdGhlIGNoYXJhY3RlcnMgJnF1b3Q7PGNvZGU+ZGVmPC9jb2RlPiZxdW90OyBtdXN0IGJlCisgKiBwcmVjZWRlZCBieSAmcXVvdDs8Y29kZT5hYmM8L2NvZGU+JnF1b3Q7IGZvciBhIHN1Y2Nlc3NmdWwgbWF0Y2guCisgKiBJZiB0aGVyZSBpcyBhIHN1Y2Nlc3NmdWwgbWF0Y2gsICZxdW90Ozxjb2RlPmRlZjwvY29kZT4mcXVvdDsgd2lsbAorICogYmUgcmVwbGFjZWQsIGJ1dCBub3QgJnF1b3Q7PGNvZGU+YWJjPC9jb2RlPiZxdW90Oy4gVGhlIGZpbmFsICc8Y29kZT59PC9jb2RlPicKKyAqIGlzIG9wdGlvbmFsLCBzbyAmcXVvdDs8Y29kZT5hYmN7ZGVmPC9jb2RlPiZxdW90OyBpcyBlcXVpdmFsZW50IHRvCisgKiAmcXVvdDs8Y29kZT5hYmN7ZGVmfTwvY29kZT4mcXVvdDsuIEFub3RoZXIgZXhhbXBsZSBpcyAmcXVvdDs8Y29kZT57MTIzfTQ1NjwvY29kZT4mcXVvdDsKKyAqIChvciAmcXVvdDs8Y29kZT4xMjN9NDU2PC9jb2RlPiZxdW90OykgaW4gd2hpY2ggdGhlIGxpdGVyYWwKKyAqIHBhdHRlcm4gJnF1b3Q7PGNvZGU+MTIzPC9jb2RlPiZxdW90OyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICZxdW90Ozxjb2RlPjQ1NjwvY29kZT4mcXVvdDsuCisgKiA8L3A+CisgKgorICogPHA+VGhlIG91dHB1dCBzdHJpbmcgb2YgYSBmb3J3YXJkIG9yIHJldmVyc2UgcnVsZSBjb25zaXN0cyBvZgorICogY2hhcmFjdGVycyB0byByZXBsYWNlIHRoZSBsaXRlcmFsIHBhdHRlcm4gY2hhcmFjdGVycy4gSWYgdGhlCisgKiBvdXRwdXQgc3RyaW5nIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXIgJzxjb2RlPnw8L2NvZGU+JywgdGhpcyBpcworICogdGFrZW4gdG8gaW5kaWNhdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSA8ZW0+Y3Vyc29yPC9lbT4gYWZ0ZXIKKyAqIHJlcGxhY2VtZW50LiBUaGUgY3Vyc29yIGlzIHRoZSBwb2ludCBpbiB0aGUgdGV4dCBhdCB3aGljaCB0aGUKKyAqIG5leHQgcmVwbGFjZW1lbnQsIGlmIGFueSwgd2lsbCBiZSBhcHBsaWVkLiBUaGUgY3Vyc29yIGlzIHVzdWFsbHkKKyAqIHBsYWNlZCB3aXRoaW4gdGhlIHJlcGxhY2VtZW50IHRleHQ7IGhvd2V2ZXIsIGl0IGNhbiBhY3R1YWxseSBiZQorICogcGxhY2VkIGludG8gdGhlIHByZWNlbmRpbmcgb3IgZm9sbG93aW5nIGNvbnRleHQgYnkgdXNpbmcgdGhlCisgKiBzcGVjaWFsIGNoYXJhY3RlciAnPGNvZGU+QDwvY29kZT4nLiBFeGFtcGxlczo8L3A+CisgKgorICogPGJsb2NrcXVvdGU+CisgKiAgICAgPHA+PGNvZGU+YSB7Zm9vfSB6ICZndDsgfCBAIGJhcjsgIyBmb28gLSZndDsgYmFyLCBtb3ZlIGN1cnNvcgorICogICAgIGJlZm9yZSBhPGJyPgorICogICAgIHtmb299IHh5eiAmZ3Q7IGJhciBAQHw7ICMmbmJzcDtmb28gLSZndDsgYmFyLCBjdXJzb3IgYmV0d2VlbgorICogICAgIHkgYW5kIHo8L2NvZGU+PC9wPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIDxwPjxiPlVuaWNvZGVTZXQ8L2I+PC9wPgorICoKKyAqIDxwPjxjb2RlPlVuaWNvZGVTZXQ8L2NvZGU+IHBhdHRlcm5zIG1heSBhcHBlYXIgYW55d2hlcmUgdGhhdAorICogbWFrZXMgc2Vuc2UuIFRoZXkgbWF5IGFwcGVhciBpbiB2YXJpYWJsZSBkZWZpbml0aW9ucy4KKyAqIENvbnRyYXJpd2lzZSwgPGNvZGU+VW5pY29kZVNldDwvY29kZT4gcGF0dGVybnMgbWF5IHRoZW1zZWx2ZXMKKyAqIGNvbnRhaW4gdmFyaWFibGUgcmVmZXJlbmNlcywgc3VjaCBhcyAmcXVvdDs8Y29kZT4kYT1bYS16XTskbm90X2E9W14kYV08L2NvZGU+JnF1b3Q7LAorICogb3IgJnF1b3Q7PGNvZGU+JHJhbmdlPWEtejskbGw9WyRyYW5nZV08L2NvZGU+JnF1b3Q7LjwvcD4KKyAqCisgKiA8cD48Y29kZT5Vbmljb2RlU2V0PC9jb2RlPiBwYXR0ZXJucyBtYXkgYWxzbyBiZSBlbWJlZGRlZCBkaXJlY3RseQorICogaW50byBydWxlIHN0cmluZ3MuIFRodXMsIHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzIGFyZSBlcXVpdmFsZW50OjwvcD4KKyAqCisgKiA8YmxvY2txdW90ZT4KKyAqICAgICA8cD48Y29kZT4kdm93ZWw9W2FlaW91XTsgJHZvd2VsJmd0OycqJzsgIyBPbmUgd2F5IHRvIGRvIHRoaXM8YnI+CisgKiAgICAgW2FlaW91XSZndDsnKic7CisgKiAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IworICogICAgIEFub3RoZXIgd2F5PC9jb2RlPjwvcD4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiA8cD5TZWUge0BsaW5rIFVuaWNvZGVTZXR9IGZvciBtb3JlIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLjwvcD4KKyAqCisgKiA8cD48Yj5TZWdtZW50czwvYj48L3A+CisgKgorICogPHA+U2VnbWVudHMgb2YgdGhlIGlucHV0IHN0cmluZyBjYW4gYmUgbWF0Y2hlZCBhbmQgY29waWVkIHRvIHRoZQorICogb3V0cHV0IHN0cmluZy4gVGhpcyBtYWtlcyBjZXJ0YWluIHNldHMgb2YgcnVsZXMgc2ltcGxlciBhbmQgbW9yZQorICogZ2VuZXJhbCwgYW5kIG1ha2VzIHJlb3JkZXJpbmcgcG9zc2libGUuIEZvciBleGFtcGxlOjwvcD4KKyAqCisgKiA8YmxvY2txdW90ZT4KKyAqICAgICA8cD48Y29kZT4oW2Etel0pICZndDsgJDEgJDE7CisgKiAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IworICogICAgIGRvdWJsZSBsb3dlcmNhc2UgbGV0dGVyczxicj4KKyAqICAgICAoWzpMdTpdKSAoWzpMbDpdKSAmZ3Q7ICQyICQxOyAjIHJldmVyc2Ugb3JkZXIgb2YgTHUtTGwgcGFpcnM8L2NvZGU+PC9wPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIDxwPlRoZSBzZWdtZW50IG9mIHRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29waWVkIGlzIGRlbGltaXRlZCBieQorICogJnF1b3Q7PGNvZGU+KDwvY29kZT4mcXVvdDsgYW5kICZxdW90Ozxjb2RlPik8L2NvZGU+JnF1b3Q7LiBVcCB0bworICogbmluZSBzZWdtZW50cyBtYXkgYmUgZGVmaW5lZC4gU2VnbWVudHMgbWF5IG5vdCBvdmVybGFwLiBJbiB0aGUKKyAqIG91dHB1dCBzdHJpbmcsICZxdW90Ozxjb2RlPiQxPC9jb2RlPiZxdW90OyB0aHJvdWdoICZxdW90Ozxjb2RlPiQ5PC9jb2RlPiZxdW90OworICogcmVwcmVzZW50IHRoZSBpbnB1dCBzdHJpbmcgc2VnbWVudHMsIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIgb2YKKyAqIGRlZmluaXRpb24uPC9wPgorICoKKyAqIDxwPjxiPkFuY2hvcnM8L2I+PC9wPgorICoKKyAqIDxwPlBhdHRlcm5zIGNhbiBiZSBhbmNob3JlZCB0byB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIHRleHQuIFRoaXMgaXMgZG9uZSB3aXRoIHRoZQorICogc3BlY2lhbCBjaGFyYWN0ZXJzICc8Y29kZT5ePC9jb2RlPicgYW5kICc8Y29kZT4kPC9jb2RlPicuIEZvciBleGFtcGxlOjwvcD4KKyAqCisgKiA8YmxvY2txdW90ZT4KKyAqICAgPHA+PGNvZGU+XiBhJm5ic3A7Jm5ic3A7ICZndDsgJ0JFR19BJzsgJm5ic3A7Jm5ic3A7IyBtYXRjaCAnYScgYXQgc3RhcnQgb2YgdGV4dDxicj4KKyAqICAgJm5ic3A7IGEmbmJzcDsmbmJzcDsgJmd0OyAnQSc7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICMgbWF0Y2ggb3RoZXIgaW5zdGFuY2VzCisgKiAgIG9mICdhJzxicj4KKyAqICAgJm5ic3A7IHogJCAmZ3Q7ICdFTkRfWic7ICZuYnNwOyZuYnNwOyMgbWF0Y2ggJ3onIGF0IGVuZCBvZiB0ZXh0PGJyPgorICogICAmbmJzcDsgeiZuYnNwOyZuYnNwOyAmZ3Q7ICdaJzsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgIyBtYXRjaCBvdGhlciBpbnN0YW5jZXMKKyAqICAgb2YgJ3onPC9jb2RlPjwvcD4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiA8cD5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG1hdGNoIHRoZSBiZWdpbm5pbmcgb3IgdGhlIGVuZCBvZiB0aGUgdGV4dCB1c2luZyBhIDxjb2RlPlVuaWNvZGVTZXQ8L2NvZGU+LgorICogVGhpcyBpcyBkb25lIGJ5IGluY2x1ZGluZyBhIHZpcnR1YWwgYW5jaG9yIGNoYXJhY3RlciAnPGNvZGU+JDwvY29kZT4nIGF0IHRoZSBlbmQgb2YgdGhlCisgKiBzZXQgcGF0dGVybi4gQWx0aG91Z2ggdGhpcyBpcyB1c3VhbGx5IHRoZSBtYXRjaCBjaGFmYWN0ZXIgZm9yIHRoZSBlbmQgYW5jaG9yLCB0aGUgc2V0IHdpbGwKKyAqIG1hdGNoIGVpdGhlciB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIHRleHQsIGRlcGVuZGluZyBvbiBpdHMgcGxhY2VtZW50LiBGb3IKKyAqIGV4YW1wbGU6PC9wPgorICoKKyAqIDxibG9ja3F1b3RlPgorICogICA8cD48Y29kZT4keCA9IFthLXokXTsgJm5ic3A7Jm5ic3A7IyBtYXRjaCAnYScgdGhyb3VnaCAneicgT1IgYW5jaG9yPGJyPgorICogICAkeCAxJm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgMjsmbmJzcDsmbmJzcDsgIyBtYXRjaCAnMScgYWZ0ZXIgYS16IG9yIGF0IHRoZSBzdGFydDxicj4KKyAqICAgJm5ic3A7Jm5ic3A7IDMgJHggJmd0OyA0OyAmbmJzcDsmbmJzcDsjIG1hdGNoICczJyBiZWZvcmUgYS16IG9yIGF0IHRoZSBlbmQ8L2NvZGU+PC9wPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIDxwPjxiPkV4YW1wbGU8L2I+IDwvcD4KKyAqCisgKiA8cD5UaGUgZm9sbG93aW5nIGV4YW1wbGUgcnVsZXMgaWxsdXN0cmF0ZSBtYW55IG9mIHRoZSBmZWF0dXJlcyBvZgorICogdGhlIHJ1bGUgbGFuZ3VhZ2UuIDwvcD4KKyAqCisgKiA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlJ1bGUgMS48L3RkPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIG5vd3JhcD48Y29kZT5hYmN7ZGVmfSZndDt4fHk8L2NvZGU+PC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5SdWxlIDIuPC90ZD4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBub3dyYXA+PGNvZGU+eHl6Jmd0O3I8L2NvZGU+PC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5SdWxlIDMuPC90ZD4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBub3dyYXA+PGNvZGU+eXomZ3Q7cTwvY29kZT48L3RkPgorICogICAgIDwvdHI+CisgKiA8L3RhYmxlPgorICoKKyAqIDxwPkFwcGx5aW5nIHRoZXNlIHJ1bGVzIHRvIHRoZSBzdHJpbmcgJnF1b3Q7PGNvZGU+YWRlZmFiY2RlZno8L2NvZGU+JnF1b3Q7CisgKiB5aWVsZHMgdGhlIGZvbGxvd2luZyByZXN1bHRzOiA8L3A+CisgKgorICogPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQiPgorICogICAgIDx0cj4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBub3dyYXA+PGNvZGU+fGFkZWZhYmNkZWZ6PC9jb2RlPjwvdGQ+CisgKiAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+SW5pdGlhbCBzdGF0ZSwgbm8gcnVsZXMgbWF0Y2guIEFkdmFuY2UKKyAqICAgICAgICAgY3Vyc29yLjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgbm93cmFwPjxjb2RlPmF8ZGVmYWJjZGVmejwvY29kZT48L3RkPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlN0aWxsIG5vIG1hdGNoLiBSdWxlIDEgZG9lcyBub3QgbWF0Y2gKKyAqICAgICAgICAgYmVjYXVzZSB0aGUgcHJlY2VkaW5nIGNvbnRleHQgaXMgbm90IHByZXNlbnQuPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBub3dyYXA+PGNvZGU+YWR8ZWZhYmNkZWZ6PC9jb2RlPjwvdGQ+CisgKiAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+U3RpbGwgbm8gbWF0Y2guIEtlZXAgYWR2YW5jaW5nIHVudGlsCisgKiAgICAgICAgIHRoZXJlIGlzIGEgbWF0Y2guLi48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIG5vd3JhcD48Y29kZT5hZGV8ZmFiY2RlZno8L2NvZGU+PC90ZD4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4uLi48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIG5vd3JhcD48Y29kZT5hZGVmfGFiY2RlZno8L2NvZGU+PC90ZD4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4uLi48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIG5vd3JhcD48Y29kZT5hZGVmYXxiY2RlZno8L2NvZGU+PC90ZD4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4uLi48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIG5vd3JhcD48Y29kZT5hZGVmYWJ8Y2RlZno8L2NvZGU+PC90ZD4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4uLi48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIG5vd3JhcD48Y29kZT5hZGVmYWJjfGRlZno8L2NvZGU+PC90ZD4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5SdWxlIDEgbWF0Y2hlczsgcmVwbGFjZSAmcXVvdDs8Y29kZT5kZWY8L2NvZGU+JnF1b3Q7CisgKiAgICAgICAgIHdpdGggJnF1b3Q7PGNvZGU+eHk8L2NvZGU+JnF1b3Q7IGFuZCBiYWNrIHVwIHRoZSBjdXJzb3IKKyAqICAgICAgICAgdG8gYmVmb3JlIHRoZSAnPGNvZGU+eTwvY29kZT4nLjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgbm93cmFwPjxjb2RlPmFkZWZhYmN4fHl6PC9jb2RlPjwvdGQ+CisgKiAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+QWx0aG91Z2ggJnF1b3Q7PGNvZGU+eHl6PC9jb2RlPiZxdW90OyBpcworICogICAgICAgICBwcmVzZW50LCBydWxlIDIgZG9lcyBub3QgbWF0Y2ggYmVjYXVzZSB0aGUgY3Vyc29yIGlzCisgKiAgICAgICAgIGJlZm9yZSB0aGUgJzxjb2RlPnk8L2NvZGU+Jywgbm90IGJlZm9yZSB0aGUgJzxjb2RlPng8L2NvZGU+Jy4KKyAqICAgICAgICAgUnVsZSAzIGRvZXMgbWF0Y2guIFJlcGxhY2UgJnF1b3Q7PGNvZGU+eXo8L2NvZGU+JnF1b3Q7CisgKiAgICAgICAgIHdpdGggJnF1b3Q7PGNvZGU+cTwvY29kZT4mcXVvdDsuPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBub3dyYXA+PGNvZGU+YWRlZmFiY3hxfDwvY29kZT48L3RkPgorICogICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBjdXJzb3IgaXMgYXQgdGhlIGVuZDsKKyAqICAgICAgICAgdHJhbnNsaXRlcmF0aW9uIGlzIGNvbXBsZXRlLjwvdGQ+CisgKiAgICAgPC90cj4KKyAqIDwvdGFibGU+CisgKgorICogPHA+VGhlIG9yZGVyIG9mIHJ1bGVzIGlzIHNpZ25pZmljYW50LiBJZiBtdWx0aXBsZSBydWxlcyBtYXkgbWF0Y2gKKyAqIGF0IHNvbWUgcG9pbnQsIHRoZSBmaXJzdCBtYXRjaGluZyBydWxlIGlzIGFwcGxpZWQuIDwvcD4KKyAqCisgKiA8cD5Gb3J3YXJkIGFuZCByZXZlcnNlIHJ1bGVzIG1heSBoYXZlIGFuIGVtcHR5IG91dHB1dCBzdHJpbmcuCisgKiBPdGhlcndpc2UsIGFuIGVtcHR5IGxlZnQgb3IgcmlnaHQgaGFuZCBzaWRlIG9mIGFueSBzdGF0ZW1lbnQgaXMgYQorICogc3ludGF4IGVycm9yLiA8L3A+CisgKgorICogPHA+U2luZ2xlIHF1b3RlcyBhcmUgdXNlZCB0byBxdW90ZSBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gYQorICogZGlnaXQgb3IgbGV0dGVyLiBUbyBzcGVjaWZ5IGEgc2luZ2xlIHF1b3RlIGl0c2VsZiwgaW5zaWRlIG9yCisgKiBvdXRzaWRlIG9mIHF1b3RlcywgdXNlIHR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LiBGb3IgZXhhbXBsZSwKKyAqIHRoZSBydWxlICZxdW90Ozxjb2RlPicmZ3Q7JyZndDtvJydjbG9jazwvY29kZT4mcXVvdDsgY2hhbmdlcyB0aGUKKyAqIHN0cmluZyAmcXVvdDs8Y29kZT4mZ3Q7PC9jb2RlPiZxdW90OyB0byB0aGUgc3RyaW5nICZxdW90Ozxjb2RlPm8nY2xvY2s8L2NvZGU+JnF1b3Q7LgorICogPC9wPgorICoKKyAqIDxwPjxiPk5vdGVzPC9iPiA8L3A+CisgKgorICogPHA+V2hpbGUgYSBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvciBpcyBiZWluZyBidWlsdCwgaXQgY2hlY2tzIHRoYXQKKyAqIHRoZSBydWxlcyBhcmUgYWRkZWQgaW4gcHJvcGVyIG9yZGVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHJ1bGUKKyAqICZxdW90O2EmZ3Q7eCZxdW90OyBpcyBmb2xsb3dlZCBieSB0aGUgcnVsZSAmcXVvdDthYiZndDt5JnF1b3Q7LAorICogdGhlbiB0aGUgc2Vjb25kIHJ1bGUgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uIFRoZSByZWFzb24gaXMgdGhhdAorICogdGhlIHNlY29uZCBydWxlIGNhbiBuZXZlciBiZSB0cmlnZ2VyZWQsIHNpbmNlIHRoZSBmaXJzdCBydWxlCisgKiBhbHdheXMgbWF0Y2hlcyBhbnl0aGluZyBpdCBtYXRjaGVzLiBJbiBvdGhlciB3b3JkcywgdGhlIGZpcnN0CisgKiBydWxlIDxlbT5tYXNrczwvZW0+IHRoZSBzZWNvbmQgcnVsZS4gPC9wPgorICoKKyAqIDxwPkNvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uIDE5OTktMjAwMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48L3A+CisgKgorICogQGF1dGhvciBBbGFuIExpdQorICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICovCitwdWJsaWMgY2xhc3MgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IgZXh0ZW5kcyBUcmFuc2xpdGVyYXRvciB7CisKKyAgICBwcml2YXRlIERhdGEgZGF0YTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAiXHUwMEE5IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHRyYW5zbGl0ZXJhdG9yIGZyb20gdGhlIGdpdmVuIHJ1bGVzLgorICAgICAqIEBwYXJhbSBydWxlcyBydWxlcywgc2VwYXJhdGVkIGJ5ICc7JworICAgICAqIEBwYXJhbSBkaXJlY3Rpb24gZWl0aGVyIEZPUldBUkQgb3IgUkVWRVJTRS4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBydWxlcyBhcmUgbWFsZm9ybWVkCisgICAgICogb3IgZGlyZWN0aW9uIGlzIGludmFsaWQuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcihTdHJpbmcgSUQsIFN0cmluZyBydWxlcywgaW50IGRpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZUZpbHRlciBmaWx0ZXIpIHsKKyAgICAgICAgc3VwZXIoSUQsIGZpbHRlcik7CisgICAgICAgIGlmIChkaXJlY3Rpb24gIT0gRk9SV0FSRCAmJiBkaXJlY3Rpb24gIT0gUkVWRVJTRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBkaXJlY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yUGFyc2VyIHBhcnNlciA9IG5ldyBUcmFuc2xpdGVyYXRvclBhcnNlcigpOworICAgICAgICBwYXJzZXIucGFyc2UocnVsZXMsIGRpcmVjdGlvbik7CisgICAgICAgIGlmIChwYXJzZXIuaWRCbG9jay5sZW5ndGgoKSAhPSAwIHx8CisgICAgICAgICAgICBwYXJzZXIuY29tcG91bmRGaWx0ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiOjpJRCBibG9ja3MgaWxsZWdhbCBpbiBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvciBjb25zdHJ1Y3RvciIpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YSA9IHBhcnNlci5kYXRhOworICAgICAgICBzZXRNYXhpbXVtQ29udGV4dExlbmd0aChkYXRhLnJ1bGVTZXQuZ2V0TWF4aW11bUNvbnRleHRMZW5ndGgoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyB0cmFuc2xpdGVyYXRvciBmcm9tIHRoZSBnaXZlbiBydWxlcyBpbiB0aGUKKyAgICAgKiA8Y29kZT5GT1JXQVJEPC9jb2RlPiBkaXJlY3Rpb24uCisgICAgICogQHBhcmFtIHJ1bGVzIHJ1bGVzLCBzZXBhcmF0ZWQgYnkgJzsnCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgcnVsZXMgYXJlIG1hbGZvcm1lZAorICAgICAqIG9yIGRpcmVjdGlvbiBpcyBpbnZhbGlkLgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZWNvbWUgcHJpdmF0ZSBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IoU3RyaW5nIElELCBTdHJpbmcgcnVsZXMpIHsKKyAgICAgICAgdGhpcyhJRCwgcnVsZXMsIEZPUldBUkQsIG51bGwpOworICAgIH0KKworICAgIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCwgRGF0YSBkYXRhLCBVbmljb2RlRmlsdGVyIGZpbHRlcikgeworICAgICAgICBzdXBlcihJRCwgZmlsdGVyKTsKKyAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICAgICAgc2V0TWF4aW11bUNvbnRleHRMZW5ndGgoZGF0YS5ydWxlU2V0LmdldE1heGltdW1Db250ZXh0TGVuZ3RoKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudHMge0BsaW5rIFRyYW5zbGl0ZXJhdG9yI2hhbmRsZVRyYW5zbGl0ZXJhdGV9LgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZWNvbWUgcHJpdmF0ZSBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVUcmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBpbmRleCwgYm9vbGVhbiBpbmNyZW1lbnRhbCkgeworICAgICAgICAvKiBXZSBrZWVwIHN0YXJ0IGFuZCBsaW1pdCBmaXhlZCB0aGUgZW50aXJlIHRpbWUsCisgICAgICAgICAqIHJlbGF0aXZlIHRvIHRoZSB0ZXh0IC0tIGxpbWl0IG1heSBtb3ZlIG51bWVyaWNhbGx5IGlmIHRleHQgaXMKKyAgICAgICAgICogaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4gIFRoZSBjdXJzb3IgbW92ZXMgZnJvbSBzdGFydCB0byBsaW1pdCwgd2l0aAorICAgICAgICAgKiByZXBsYWNlbWVudHMgaGFwcGVuaW5nIHVuZGVyIGl0LgorICAgICAgICAgKgorICAgICAgICAgKiBFeGFtcGxlOiBydWxlcyAxLiBhYj54fHkKKyAgICAgICAgICogICAgICAgICAgICAgICAgMi4geWM+egorICAgICAgICAgKgorICAgICAgICAgKiB8ZWFiY2QgICBzdGFydCAtIG5vIG1hdGNoLCBhZHZhbmNlIGN1cnNvcgorICAgICAgICAgKiBlfGFiY2QgICBtYXRjaCBydWxlIDEgLSBjaGFuZ2UgdGV4dCAmIGFkanVzdCBjdXJzb3IKKyAgICAgICAgICogZXh8eWNkICAgbWF0Y2ggcnVsZSAyIC0gY2hhbmdlIHRleHQgJiBhZGp1c3QgY3Vyc29yCisgICAgICAgICAqIGV4enxkICAgIG5vIG1hdGNoLCBhZHZhbmNlIGN1cnNvcgorICAgICAgICAgKiBleHpkfCAgICBkb25lCisgICAgICAgICAqLworCisgICAgICAgIC8qIEEgcnVsZSBsaWtlCisgICAgICAgICAqICAgYT5ifGEKKyAgICAgICAgICogY3JlYXRlcyBhbiBpbmZpbml0ZSBsb29wLiBUbyBwcmV2ZW50IHRoYXQsIHdlIHB1dCBhbiBhcmJpdHJhcnkKKyAgICAgICAgICogbGltaXQgb24gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgd2UgdGFrZSwgb25lIHRoYXQgaXMKKyAgICAgICAgICogaGlnaCBlbm91Z2ggdGhhdCBhbnkgcmVhc29uYWJsZSBydWxlcyBhcmUgb2ssIGJ1dCBsb3cgZW5vdWdoIHRvCisgICAgICAgICAqIHByZXZlbnQgYSBzZXJ2ZXIgZnJvbSBoYW5naW5nLiAgVGhlIGxpbWl0IGlzIDE2IHRpbWVzIHRoZQorICAgICAgICAgKiBudW1iZXIgb2YgY2hhcmFjdGVycyBuLCB1bmxlc3MgbiBpcyBzbyBsYXJnZSB0aGF0IDE2biBleGNlZWRzIGEKKyAgICAgICAgICogdWludDMyX3QuCisgICAgICAgICAqLworICAgICAgICBpbnQgbG9vcENvdW50ID0gMDsKKyAgICAgICAgaW50IGxvb3BMaW1pdCA9IChpbmRleC5saW1pdCAtIGluZGV4LnN0YXJ0KSA8PCA0OworICAgICAgICBpZiAobG9vcExpbWl0IDwgMCkgeworICAgICAgICAgICAgbG9vcExpbWl0ID0gMHg3RkZGRkZGRjsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleC5zdGFydCA8IGluZGV4LmxpbWl0ICYmCisgICAgICAgICAgICAgICBsb29wQ291bnQgPD0gbG9vcExpbWl0ICYmCisgICAgICAgICAgICAgICBkYXRhLnJ1bGVTZXQudHJhbnNsaXRlcmF0ZSh0ZXh0LCBpbmRleCwgaW5jcmVtZW50YWwpKSB7CisgICAgICAgICAgICArK2xvb3BDb3VudDsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgc3RhdGljIGNsYXNzIERhdGEgeworICAgICAgICBwdWJsaWMgRGF0YSgpIHsKKyAgICAgICAgICAgIHZhcmlhYmxlTmFtZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICBydWxlU2V0ID0gbmV3IFRyYW5zbGl0ZXJhdGlvblJ1bGVTZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSdWxlIHRhYmxlLiAgTWF5IGJlIGVtcHR5LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdGlvblJ1bGVTZXQgcnVsZVNldDsKKworICAgICAgICAvKioKKyAgICAgICAgICogTWFwIHZhcmlhYmxlIG5hbWUgKFN0cmluZykgdG8gdmFyaWFibGUgKGNoYXJbXSkuICBBIHZhcmlhYmxlIG5hbWUKKyAgICAgICAgICogY29ycmVzcG9uZHMgdG8gemVybyBvciBtb3JlIGNoYXJhY3RlcnMsIHN0b3JlZCBpbiBhIGNoYXJbXSBhcnJheSBpbgorICAgICAgICAgKiB0aGlzIGhhc2guICBPbmUgb3IgbW9yZSBvZiB0aGVzZSBjaGFycyBtYXkgYWxzbyBjb3JyZXNwb25kIHRvIGEKKyAgICAgICAgICogVW5pY29kZVNldCwgaW4gd2hpY2ggY2FzZSB0aGUgY2hhcmFjdGVyIGluIHRoZSBjaGFyW10gaW4gdGhpcyBoYXNoIGlzCisgICAgICAgICAqIGEgc3RhbmQtaW46IGl0IGlzIGFuIGluZGV4IGZvciBhIHNlY29uZGFyeSBsb29rdXAgaW4KKyAgICAgICAgICogZGF0YS52YXJpYWJsZXMuICBUaGUgc3RhbmQtaW4gYWxzbyByZXByZXNlbnRzIHRoZSBVbmljb2RlU2V0IGluCisgICAgICAgICAqIHRoZSBzdG9yZWQgcnVsZXMuCisgICAgICAgICAqLworICAgICAgICBIYXNodGFibGUgdmFyaWFibGVOYW1lczsKKworICAgICAgICAvKioKKyAgICAgICAgICogTWFwIGNhdGVnb3J5IHZhcmlhYmxlIChDaGFyYWN0ZXIpIHRvIFVuaWNvZGVNYXRjaGVyIG9yIFVuaWNvZGVSZXBsYWNlci4KKyAgICAgICAgICogVmFyaWFibGVzIHRoYXQgY29ycmVzcG9uZCB0byBhIHNldCBvZiBjaGFyYWN0ZXJzIGFyZSBtYXBwZWQKKyAgICAgICAgICogZnJvbSB2YXJpYWJsZSBuYW1lIHRvIGEgc3RhbmQtaW4gY2hhcmFjdGVyIGluIGRhdGEudmFyaWFibGVOYW1lcy4KKyAgICAgICAgICogVGhlIHN0YW5kLWluIHRoZW4gc2VydmVzIGFzIGEga2V5IGluIHRoaXMgaGFzaCB0byBsb29rdXAgdGhlCisgICAgICAgICAqIGFjdHVhbCBVbmljb2RlU2V0IG9iamVjdC4gIEluIGFkZGl0aW9uLCB0aGUgc3RhbmQtaW4gaXMKKyAgICAgICAgICogc3RvcmVkIGluIHRoZSBydWxlIHRleHQgdG8gcmVwcmVzZW50IHRoZSBzZXQgb2YgY2hhcmFjdGVycy4KKyAgICAgICAgICogdmFyaWFibGVzW2ldIHJlcHJlc2VudHMgY2hhcmFjdGVyICh2YXJpYWJsZXNCYXNlICsgaSkuCisgICAgICAgICAqLworICAgICAgICBPYmplY3RbXSB2YXJpYWJsZXM7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjaGFyYWN0ZXIgdGhhdCByZXByZXNlbnRzIHZhcmlhYmxlc1swXS4gIENoYXJhY3RlcnMKKyAgICAgICAgICogdmFyaWFibGVzQmFzZSB0aHJvdWdoIHZhcmlhYmxlc0Jhc2UgKworICAgICAgICAgKiB2YXJpYWJsZXMubGVuZ3RoIC0gMSByZXByZXNlbnQgVW5pY29kZVNldCBvYmplY3RzLgorICAgICAgICAgKi8KKyAgICAgICAgY2hhciB2YXJpYWJsZXNCYXNlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIFVuaWNvZGVNYXRjaGVyIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBjaGFyYWN0ZXIsIG9yCisgICAgICAgICAqIG51bGwgaWYgbm9uZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBVbmljb2RlTWF0Y2hlciBsb29rdXBNYXRjaGVyKGludCBzdGFuZEluKSB7CisgICAgICAgICAgICBpbnQgaSA9IHN0YW5kSW4gLSB2YXJpYWJsZXNCYXNlOworICAgICAgICAgICAgcmV0dXJuIChpID49IDAgJiYgaSA8IHZhcmlhYmxlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgPyAoVW5pY29kZU1hdGNoZXIpIHZhcmlhYmxlc1tpXSA6IG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIHRoZSBVbmljb2RlUmVwbGFjZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGNoYXJhY3Rlciwgb3IKKyAgICAgICAgICogbnVsbCBpZiBub25lLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFVuaWNvZGVSZXBsYWNlciBsb29rdXBSZXBsYWNlcihpbnQgc3RhbmRJbikgeworICAgICAgICAgICAgaW50IGkgPSBzdGFuZEluIC0gdmFyaWFibGVzQmFzZTsKKyAgICAgICAgICAgIHJldHVybiAoaSA+PSAwICYmIGkgPCB2YXJpYWJsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgID8gKFVuaWNvZGVSZXBsYWNlcikgdmFyaWFibGVzW2ldIDogbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0cmFuc2xpdGVyYXRvciBhcyBzb3VyY2UgcnVsZXMuCisgICAgICogVGhlc2UgcnVsZXMgd2lsbCBwcm9kdWNlIGFuIGVxdWl2YWxlbnQgdHJhbnNsaXRlcmF0b3IgaWYgdXNlZAorICAgICAqIHRvIGNvbnN0cnVjdCBhIG5ldyB0cmFuc2xpdGVyYXRvci4KKyAgICAgKiBAcGFyYW0gZXNjYXBlVW5wcmludGFibGUgaWYgVFJVRSB0aGVuIGNvbnZlcnQgdW5wcmludGFibGUKKyAgICAgKiBjaGFyYWN0ZXIgdG8gdGhlaXIgaGV4IGVzY2FwZSByZXByZXNlbnRhdGlvbnMsIFxcdXh4eHggb3IKKyAgICAgKiBcXFV4eHh4eHh4eC4gIFVucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIHRob3NlIG90aGVyIHRoYW4KKyAgICAgKiBVKzAwMEEsIFUrMDAyMC4uVSswMDdFLgorICAgICAqIEByZXR1cm4gcnVsZXMgc3RyaW5nCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9SdWxlcyhib29sZWFuIGVzY2FwZVVucHJpbnRhYmxlKSB7CisgICAgICAgIHJldHVybiBkYXRhLnJ1bGVTZXQudG9SdWxlcyhlc2NhcGVVbnByaW50YWJsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBzZXQgb2YgYWxsIGNoYXJhY3RlcnMgdGhhdCBtYXkgYmUgbW9kaWZpZWQgYnkgdGhpcworICAgICAqIFRyYW5zbGl0ZXJhdG9yLCBpZ25vcmluZyB0aGUgZWZmZWN0IG9mIG91ciBmaWx0ZXIuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHByb3RlY3RlZCBVbmljb2RlU2V0IGhhbmRsZUdldFNvdXJjZVNldCgpIHsKKyAgICAgICAgcmV0dXJuIGRhdGEucnVsZVNldC5nZXRTb3VyY2VUYXJnZXRTZXQoZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBhbGwgY2hhcmFjdGVycyB0aGF0IG1heSBiZSBnZW5lcmF0ZWQgYXMKKyAgICAgKiByZXBsYWNlbWVudCB0ZXh0IGJ5IHRoaXMgdHJhbnNsaXRlcmF0b3IuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlY29tZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0IGdldFRhcmdldFNldCgpIHsKKyAgICAgICAgcmV0dXJuIGRhdGEucnVsZVNldC5nZXRTb3VyY2VUYXJnZXRTZXQodHJ1ZSk7CisgICAgfQorfQorCisvKioKKyAqICRMb2c6IFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLmphdmEsdiAkCisgKiBSZXZpc2lvbiAxLjU4ICAyMDAyLzEyLzAzIDE4OjU3OjM2ICBhbGFuCisgKiBqaXR0ZXJidWcgMjA4NzogZml4IEAgdGFncworICoKKyAqIFJldmlzaW9uIDEuNTcgIDIwMDIvMDcvMjYgMjE6MTI6MzYgIGFsYW4KKyAqIGppdHRlcmJ1ZyAxOTk3OiB1c2UgVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoKSBpbiBwYXJzZXJzCisgKgorICogUmV2aXNpb24gMS41NiAgMjAwMi8wNi8yOCAxOToxNTo1MiAgYWxhbgorICogaml0dGVyYnVnIDE0MzQ6IGltcHJvdmUgbWV0aG9kIG5hbWVzOyBtaW5vciBjbGVhbnVwCisgKgorICogUmV2aXNpb24gMS41NSAgMjAwMi8wNi8yNiAxODoxMjozOSAgYWxhbgorICogaml0dGVyYnVnIDE0MzQ6IGluaXRpYWwgcHVibGljIGltcGxlbWVudGF0aW9uIG9mIGdldFNvdXJjZVNldCBhbmQgZ2V0VGFyZ2V0U2V0CisgKgorICogUmV2aXNpb24gMS41NCAgMjAwMi8wMi8yNSAyMjo0Mzo1OCAgcmFtCisgKiBNb3ZlIFV0aWxpdHkgY2xhc3MgdG8gaWN1LmltcGwKKyAqCisgKiBSZXZpc2lvbiAxLjUzICAyMDAyLzAyLzE2IDAzOjA2OjEzICBNb2hhbgorICogSUNVNEogcmVvcmdhbml6YXRpb24KKyAqCisgKiBSZXZpc2lvbiAxLjUyICAyMDAyLzAyLzA3IDAwOjUzOjU0ICBhbGFuCisgKiBqaXR0ZXJidWcgMTIzNDogbWFrZSBvdXRwdXQgc2lkZSBvZiBSQlRzIG9iamVjdC1vcmllbnRlZDsgcmV3cml0ZSBJRCBwYXJzZXJzIGFuZCBtb2R1bGFyaXplIHRoZW07IGltcGxlbWVudCAmQW55LUxvd2VyKCkgc3VwcG9ydAorICoKKyAqIFJldmlzaW9uIDEuNTEgIDIwMDEvMTEvMjkgMjI6MzE6MTggIGFsYW4KKyAqIGppdHRlcmJ1ZyAxNTYwOiBhZGQgc291cmNlLXNldCBtZXRob2RzIGFuZCBUcmFuc2xpdGVyYXRvclV0aWxpdHkgY2xhc3MKKyAqCisgKiBSZXZpc2lvbiAxLjUwICAyMDAxLzExLzI3IDIyOjA3OjMzICBhbGFuCisgKiBqaXR0ZXJidWcgMTM4OTogaW5jb3Jwb3JhdGUgTWFyaydzIHJldmlldyBjb21tZW50cyAtIGNvbW1lbnRzIG9ubHkKKyAqCisgKiBSZXZpc2lvbiAxLjQ5ICAyMDAxLzEwLzEwIDIwOjI2OjI3ICBhbGFuCisgKiBqaXR0ZXJidWcgODE6IGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgY29tcG91bmQgZmlsdGVycyBpbiBJRHMgYW5kIDo6SUQgYmxvY2tzCisgKgorICogUmV2aXNpb24gMS40OCAgMjAwMS8xMC8wNSAxODoxNTo1NCAgYWxhbgorICogaml0dGVyYnVnIDc0OiBmaW5pc2ggcG9ydCBvZiBTb3VyY2UtVGFyZ2V0L1ZhcmlhbnQgY29kZSBpbmNsLiBUcmFuc2xpdGVyYXRvclJlZ2lzdHJ5IGFuZCB0ZXN0cworICoKKyAqIFJldmlzaW9uIDEuNDcgIDIwMDEvMTAvMDMgMDA6MTQ6MjIgIGFsYW4KKyAqIGppdHRlcmJ1ZyA3MzogZmluaXNoIHF1YW50aWZpZXIgYW5kIHN1cHBsZW1lbnRhbCBjaGFyIHN1cHBvcnQKKyAqCisgKiBSZXZpc2lvbiAxLjQ2ICAyMDAxLzA5LzI2IDE4OjAwOjA2ICBhbGFuCisgKiBqaXR0ZXJidWcgNjc6IHN5bmMgcGFyc2VyIHdpdGggaWN1NGMsIGFsbG93IHVubGltaXRlZCwgbmVzdGVkIHNlZ21lbnRzCisgKgorICogUmV2aXNpb24gMS40NSAgMjAwMS8wOS8yNCAxOTo1NzoxNyAgYWxhbgorICogaml0dGVyYnVnIDYwOiBpbXBsZW1lbnQgdG9QYXR0ZXJuIGluIFVuaWNvZGVTZXQ7IHVwZGF0ZSBVbmljb2RlRmlsdGVyLmNvbnRhaW5zIHRvIHRha2UgYW4gaW50OyB1cGRhdGUgVW5pY29kZVNldCB0byBzdXBwb3J0IGNvZGUgcG9pbnRzIHRvIFUrMTBGRkZGCisgKgorICogUmV2aXNpb24gMS40NCAgMjAwMS8wOS8yMSAyMToyNDowNCAgYWxhbgorICogaml0dGVyYnVnIDY0OiBhbGxvdyA6OklEIGJsb2NrcyBpbiBydWxlcworICoKKyAqIFJldmlzaW9uIDEuNDMgIDIwMDEvMDkvMTkgMTc6NDM6MzcgIGFsYW4KKyAqIGppdHRlcmJ1ZyA2MDogaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0b1J1bGVzKCkKKyAqCisgKiBSZXZpc2lvbiAxLjQyICAyMDAxLzAyLzIwIDE3OjU5OjQwICBhbGFuNGoKKyAqIFJlbW92ZSBiYWNrc2xhc2gtdSBmcm9tIGxvZworICoKKyAqIFJldmlzaW9uIDEuNDEgIDIwMDEvMDIvMTYgMTg6NTM6NTUgIGFsYW40agorICogSGFuZGxlIGJhY2tzbGFzaC11IGVzY2FwZXMKKyAqCisgKiBSZXZpc2lvbiAxLjQwICAyMDAxLzAyLzAzIDAwOjQ2OjIxICBhbGFuNGoKKyAqIExvYWQgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IgZmlsZXMgZnJvbSBVVEY4IGZpbGVzIGluc3RlYWQgb2YgUmVzb3VyY2VCdW5kbGVzCisgKgorICogUmV2aXNpb24gMS4zOSAgMjAwMC8wOC8zMSAxNzoxMTo0MiAgYWxhbjRqCisgKiBJbXBsZW1lbnQgYW5jaG9ycy4KKyAqCisgKiBSZXZpc2lvbiAxLjM4ICAyMDAwLzA4LzMwIDIwOjQwOjMwICBhbGFuNGoKKyAqIEltcGxlbWVudCBhbmNob3JzLgorICoKKyAqIFJldmlzaW9uIDEuMzcgIDIwMDAvMDcvMTIgMTY6MzE6MzYgIGFsYW40agorICogU2ltcGxpZnkgbG9vcCBsaW1pdCBsb2dpYworICoKKyAqIFJldmlzaW9uIDEuMzYgIDIwMDAvMDYvMjkgMjE6NTk6MjMgIGFsYW40agorICogRml4IGhhbmRsaW5nIG9mIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIGZpZWxkcworICoKKyAqIFJldmlzaW9uIDEuMzUgIDIwMDAvMDYvMjggMjA6NDk6NTQgIGFsYW40agorICogRml4IGhhbmRsaW5nIG9mIFBvc2l0aW9ucyBmaWVsZHMKKyAqCisgKiBSZXZpc2lvbiAxLjM0ICAyMDAwLzA2LzI4IDIwOjM2OjMyICBhbGFuNGoKKyAqIENsZWFuIHVwIFRyYW5zbGl0ZXJhdG9yOjpQb3NpdGlvbiAtIHJlbmFtZSB0ZW1wb3JhcnkgbmFtZXMKKyAqCisgKiBSZXZpc2lvbiAxLjMzICAyMDAwLzA2LzI4IDIwOjMxOjQzICBhbGFuNGoKKyAqIENsZWFuIHVwIFRyYW5zbGl0ZXJhdG9yOjpQb3NpdGlvbiBhbmQgcmVuYW1lIGZpZWxkcyAocmVsYXRlZCB0byBqaXR0ZXJidWcgNDUwKQorICoKKyAqIFJldmlzaW9uIDEuMzIgIDIwMDAvMDUvMjQgMjI6MjE6MDAgIGFsYW40agorICogQ29tcGFjdCBVbmljb2RlU2V0cworICoKKyAqIFJldmlzaW9uIDEuMzEgIDIwMDAvMDUvMjMgMTY6NDg6MjcgIGFsYW40agorICogRml4IGRvYzsgcmVtb3ZlIHVudXNlZCBhdXRvCisgKgorICogUmV2aXNpb24gMS4zMCAgMjAwMC8wNS8xOCAyMjo0OTo1MSAgYWxhbgorICogVXBkYXRlIGRvY3MKKyAqCisgKiBSZXZpc2lvbiAxLjI5ICAyMDAwLzA0LzI4IDAwOjI1OjQyICBhbGFuCisgKiBJbXByb3ZlIGVycm9yIHJlcG9ydGluZworICoKKyAqIFJldmlzaW9uIDEuMjggIDIwMDAvMDQvMjUgMTc6Mzg6MDAgIGFsYW4KKyAqIE1pbm9yIHBhcnNlciBjbGVhbnVwLgorICoKKyAqIFJldmlzaW9uIDEuMjcgIDIwMDAvMDQvMjUgMDE6NDI6NTggIGFsYW4KKyAqIEFsbG93IGFyYml0cmFyeSBsZW5ndGggdmFyaWFibGUgdmFsdWVzLiBDbGVhbiB1cCBEYXRhIEFQSS4gVXBkYXRlIGphdmFkb2NzLgorICoKKyAqIFJldmlzaW9uIDEuMjYgIDIwMDAvMDQvMjIgMDE6MjU6MTAgIGFsYW4KKyAqIEFkZCBzdXBwb3J0IGZvciBjdXJzb3IgcG9zaXRpb25lciAnQCc7IHVwZGF0ZSBqYXZhZG9jCisgKgorICogUmV2aXNpb24gMS4yNSAgMjAwMC8wNC8yMiAwMDowODo0MyAgYWxhbgorICogTmFycm93IHJhbmdlIHRvIDIxIC0gN0UgZm9yIG1hbmRhdG9yeSBxdW90aW5nLgorICoKKyAqIFJldmlzaW9uIDEuMjQgIDIwMDAvMDQvMjIgMDA6MDM6NTQgIGFsYW4KKyAqIERpc2FsbG93IHVucXVvdGVkIHNwZWNpYWwgY2hhcnMuIFJlcG9ydCBtdWx0aXBsZSBlcnJvcnMgYXQgb25jZS4KKyAqCisgKiBSZXZpc2lvbiAxLjIzICAyMDAwLzA0LzIxIDIyOjIzOjQwICBhbGFuCisgKiBDbGVhbiB1cCBwYXJzZVJlZmVyZW5jZS4gUHJldmlvdXMgbG9nIHNob3VsZCByZWFkICdkZWxlZ2F0ZScsIG5vdCAnZGVsZXRlJy4KKyAqCisgKiBSZXZpc2lvbiAxLjIyICAyMDAwLzA0LzIxIDIyOjE2OjI5ICBhbGFuCisgKiBEZWxldGUgdmFyaWFibGUgbmFtZSBwYXJzaW5nIHRvIFN5bWJvbFRhYmxlIGludGVyZmFjZSB0byBjb25zb2xpZGF0ZSBwYXJzaW5nIGNvZGUuCisgKgorICogUmV2aXNpb24gMS4yMSAgMjAwMC8wNC8yMSAyMToxNjo0MCAgYWxhbgorICogTW9kaWZ5IHJ1bGUgc3ludGF4CisgKgorICogUmV2aXNpb24gMS4yMCAgMjAwMC8wNC8xOSAxNzozNToyMyAgYWxhbgorICogVXBkYXRlIGphdmFkb2M7IGZpeCBjb21waWxlIGVycm9yCisgKgorICogUmV2aXNpb24gMS4xOSAgMjAwMC8wNC8xOSAxNjozNDoxOCAgYWxhbgorICogQWRkIHNlZ21lbnQgc3VwcG9ydC4KKyAqCisgKiBSZXZpc2lvbiAxLjE4ICAyMDAwLzA0LzEyIDIwOjE3OjQ1ICBhbGFuCisgKiBEZWxlZ2F0ZSByZXBsYWNlIG9wZXJhdGlvbiB0byBydWxlIG9iamVjdAorICoKKyAqIFJldmlzaW9uIDEuMTcgIDIwMDAvMDMvMTAgMDQ6MDc6MjMgIGpvaG5mCisgKiBDb3B5cmlnaHQgdXBkYXRlCisgKgorICogUmV2aXNpb24gMS4xNiAgMjAwMC8wMi8yNCAyMDo0Njo0OSAgbGl1CisgKiBBZGQgaW5maW5pdGUgbG9vcCBjaGVjaworICoKKyAqIFJldmlzaW9uIDEuMTUgIDIwMDAvMDIvMTAgMDc6MzY6MjUgIGpvaG5mCisgKiBmaXhlZCBpbXBvcnRzIGZvciBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHkKKyAqCisgKiBSZXZpc2lvbiAxLjE0ICAyMDAwLzAyLzAzIDE4OjE4OjQyICBBbGFuCisgKiBVc2UgYXJyYXkgcmF0aGVyIHRoYW4gaGFzaHRhYmxlIGZvciBjaGFyLXRvLXNldCBtYXAKKyAqCisgKiBSZXZpc2lvbiAxLjEzICAyMDAwLzAxLzI3IDE4OjU5OjE5ICBBbGFuCisgKiBVc2UgUG9zaXRpb24gcmF0aGVyIHRoYW4gaW50W10gYW5kIG1vdmUgYWxsIHN1YmNsYXNzIG92ZXJyaWRlcyB0byBvbmUgbWV0aG9kIChoYW5kbGVUcmFuc2xpdGVyYXRlKQorICoKKyAqIFJldmlzaW9uIDEuMTIgIDIwMDAvMDEvMTggMTc6NTE6MDkgIEFsYW4KKyAqIFJlbW92ZSAia2V5Ym9hcmQiIGZyb20gbWV0aG9kIG5hbWVzLiBNYWtlIG1heGltdW0gY29udGV4dCBhIGZpZWxkIG9mIFRyYW5zbGl0ZXJhdG9yLCBhbmQgaGF2ZSBzdWJjbGFzc2VzIHNldCBpdC4KKyAqCisgKiBSZXZpc2lvbiAxLjExICAyMDAwLzAxLzE4IDAyOjMwOjQ5ICBBbGFuCisgKiBBZGQgSmFtby1IYW5ndWwsIEhhbmd1bC1KYW1vLCBmaXggcnVsZXMsIGFkZCBjb21wb3VuZCBJRCBzdXBwb3J0CisgKgorICogUmV2aXNpb24gMS4xMCAgMjAwMC8wMS8xMyAyMzo1MzoyMyAgQWxhbgorICogRml4IGJ1Z3MgZm91bmQgZHVyaW5nIElDVSBwb3J0CisgKgorICogUmV2aXNpb24gMS45ICAyMDAwLzAxLzExIDA0OjEyOjA2ICBBbGFuCisgKiBDbGVhbnVwLCBlbWJlbGxpc2ggY29tbWVudHMKKyAqCisgKiBSZXZpc2lvbiAxLjggIDIwMDAvMDEvMTEgMDI6MjU6MDMgIEFsYW4KKyAqIFJld3JpdGUgVW5pY29kZVNldCBhbmQgUkJUIHBhcnNlcnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgbmV3IHN5bnRheAorICoKKyAqIFJldmlzaW9uIDEuNyAgMjAwMC8wMS8wNiAwMTozNjozNiAgQWxhbgorICogQWxsb3cgc3RyaW5nIGFycmF5cyBpbiBydWxlIHJlc291cmNlIGJ1bmRsZXMKKyAqCisgKiBSZXZpc2lvbiAxLjYgIDIwMDAvMDEvMDQgMjE6NDM6NTcgIEFsYW4KKyAqIEFkZCBydWxlIGluZGV4aW5nLCBhbmQgbW92ZSBtYXNraW5nIGNoZWNrIHRvIFRyYW5zbGl0ZXJhdGlvblJ1bGVTZXQuCisgKgorICogUmV2aXNpb24gMS41ICAxOTk5LzEyLzIyIDAxOjQwOjU0ICBBbGFuCisgKiBDb25zb2xpZGF0ZSBydWxlIHBhdHRlcm4gYW50ZUNvbnRleHQsIGtleSwgYW5kIHBvc3RDb250ZXh0IGludG8gb25lIHN0cmluZy4KKyAqCisgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTIvMjIgMDE6MDU6NTQgIEFsYW4KKyAqIEltcHJvdmUgbWFza2luZyBjaGVja2luZzsgdHVybiBpdCBvZmYgYnkgZGVmYXVsdCwgZm9yIGJldHRlciBwZXJmb3JtYW5jZQorICovCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9TQ1NVLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9TQ1NVLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTMxZDQwMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1NDU1UuamF2YQpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvU0NTVS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjE0ICQgCisgKiAkUmV2aXNpb246IDEuMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCisvKioKKyAqIEFuIGludGVyZmFjZSBkZWZpbmluZyAgY29uc3RhbnRzIGZvciB0aGUgU3RhbmRhcmQgQ29tcHJlc3Npb24gU2NoZW1lCisgKiBmb3IgVW5pY29kZSAoU0NTVSkgYXMgb3V0bGluZWQgaW4gPEEKKyAqIEhSRUY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyNiI+VW5pY29kZSBUZWNobmljYWwKKyAqIFJlcG9ydCAjNjwvQT4uCisgKgorICogQGF1dGhvciBTdGVwaGVuIEYuIEJvb3RoCisgKiBAdmVyc2lvbiAxLjEgMDUgQXVnIDk5CisgKiBAdmVyc2lvbiAxLjAgMjYgSnVsIDk5CisgKi8KK2ludGVyZmFjZSBTQ1NVCit7CisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIEdlbmVyaWMgd2luZG93IHNoaWZ0CisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGZpbmFsIHN0YXRpYyBpbnQgQ09NUFJFU1NJT05PRkZTRVQgICAgICAgICAgID0gMHg4MDsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBOdW1iZXIgb2Ygd2luZG93cworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBmaW5hbCBzdGF0aWMgaW50IE5VTVdJTkRPV1MgICAgICAgICAgICAgICAgICA9IDg7CisgICAgZmluYWwgc3RhdGljIGludCBOVU1TVEFUSUNXSU5ET1dTICAgICAgICAgICAgPSA4OworCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIEluZGljYXRlcyBhIHdpbmRvdyBpbmRleCBpcyBpbnZhbGlkCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGZpbmFsIHN0YXRpYyBpbnQgSU5WQUxJRFdJTkRPVyAgICAgICAgICAgICAgID0gLTE7CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gSW5kaWNhdGVzIGEgY2hhcmFjdGVyIGRvZXNuJ3QgZXhpc3QgaW4gaW5wdXQgKHBhc3QgZW5kIG9mIGJ1ZmZlcikKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZmluYWwgc3RhdGljIGludCBJTlZBTElEQ0hBUiAgICAgICAgICAgICAgICAgPSAtMTsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBDb21wcmVzc2lvbiBtb2RlcworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBmaW5hbCBzdGF0aWMgaW50IFNJTkdMRUJZVEVNT0RFICAgICAgICAgICAgICA9IDA7CisgICAgZmluYWwgc3RhdGljIGludCBVTklDT0RFTU9ERSAgICAgICAgICAgICAgICAgPSAxOworCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIE1heGltdW0gdmFsdWUgZm9yIGEgd2luZG93J3MgaW5kZXgKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZmluYWwgc3RhdGljIGludCBNQVhJTkRFWCAgICAgICAgICAgICAgICAgICAgPSAweEZGOworCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIFJlc2VydmVkIGluZGV4IHZhbHVlIChjaGFyYWN0ZXJzIGJlbG9uZ3MgdG8gZmlyc3QgYmxvY2spCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGZpbmFsIHN0YXRpYyBpbnQgUkVTRVJWRURJTkRFWCAgICAgICAgICAgICAgID0gMHgwMDsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBJbmRpY2VzIGZvciBzY3JpcHRzIHdoaWNoIGNyb3NzIGEgaGFsZi1ibG9jayBib3VuZGFyeQorICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBmaW5hbCBzdGF0aWMgaW50IExBVElOSU5ERVggICAgICAgICAgICAgICAgICA9IDB4Rjk7CisgICAgZmluYWwgc3RhdGljIGludCBJUEFFWFRFTlNJT05JTkRFWCAgICAgICAgICAgPSAweEZBOworICAgIGZpbmFsIHN0YXRpYyBpbnQgR1JFRUtJTkRFWCAgICAgICAgICAgICAgICAgID0gMHhGQjsKKyAgICBmaW5hbCBzdGF0aWMgaW50IEFSTUVOSUFOSU5ERVggICAgICAgICAgICAgICA9IDB4RkM7CisgICAgZmluYWwgc3RhdGljIGludCBISVJBR0FOQUlOREVYICAgICAgICAgICAgICAgPSAweEZEOworICAgIGZpbmFsIHN0YXRpYyBpbnQgS0FUQUtBTkFJTkRFWCAgICAgICAgICAgICAgID0gMHhGRTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IEhBTEZXSURUSEtBVEFLQU5BSU5ERVggICAgICA9IDB4RkY7CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gU2luZ2xlLWJ5dGUgbW9kZSB0YWdzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORVggICAgICAgICAgICAgICAgICAgID0gMHgwQjsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNSRVNFUlZFRCAgICAgICAgICAgICAgICAgICA9IDB4MEM7ICAvLyByZXNlcnZlZCB2YWx1ZQorICAgIGZpbmFsIHN0YXRpYyBpbnQgU1FVT1RFVSAgICAgICAgICAgICAgICAgICAgID0gMHgwRTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNDSEFOR0VVICAgICAgICAgICAgICAgICAgICA9IDB4MEY7CisKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTAgICAgICAgICAgICAgICAgICAgICA9IDB4MDE7CisgICAgZmluYWwgc3RhdGljIGludCBTUVVPVEUxICAgICAgICAgICAgICAgICAgICAgPSAweDAyOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU1FVT1RFMiAgICAgICAgICAgICAgICAgICAgID0gMHgwMzsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTMgICAgICAgICAgICAgICAgICAgICA9IDB4MDQ7CisgICAgZmluYWwgc3RhdGljIGludCBTUVVPVEU0ICAgICAgICAgICAgICAgICAgICAgPSAweDA1OworICAgIGZpbmFsIHN0YXRpYyBpbnQgU1FVT1RFNSAgICAgICAgICAgICAgICAgICAgID0gMHgwNjsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNRVU9URTYgICAgICAgICAgICAgICAgICAgICA9IDB4MDc7CisgICAgZmluYWwgc3RhdGljIGludCBTUVVPVEU3ICAgICAgICAgICAgICAgICAgICAgPSAweDA4OworCisgICAgZmluYWwgc3RhdGljIGludCBTQ0hBTkdFMCAgICAgICAgICAgICAgICAgICAgPSAweDEwOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0NIQU5HRTEgICAgICAgICAgICAgICAgICAgID0gMHgxMTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNDSEFOR0UyICAgICAgICAgICAgICAgICAgICA9IDB4MTI7CisgICAgZmluYWwgc3RhdGljIGludCBTQ0hBTkdFMyAgICAgICAgICAgICAgICAgICAgPSAweDEzOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0NIQU5HRTQgICAgICAgICAgICAgICAgICAgID0gMHgxNDsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNDSEFOR0U1ICAgICAgICAgICAgICAgICAgICA9IDB4MTU7CisgICAgZmluYWwgc3RhdGljIGludCBTQ0hBTkdFNiAgICAgICAgICAgICAgICAgICAgPSAweDE2OworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0NIQU5HRTcgICAgICAgICAgICAgICAgICAgID0gMHgxNzsKKworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTAgICAgICAgICAgICAgICAgICAgID0gMHgxODsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNERUZJTkUxICAgICAgICAgICAgICAgICAgICA9IDB4MTk7CisgICAgZmluYWwgc3RhdGljIGludCBTREVGSU5FMiAgICAgICAgICAgICAgICAgICAgPSAweDFBOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTMgICAgICAgICAgICAgICAgICAgID0gMHgxQjsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNERUZJTkU0ICAgICAgICAgICAgICAgICAgICA9IDB4MUM7CisgICAgZmluYWwgc3RhdGljIGludCBTREVGSU5FNSAgICAgICAgICAgICAgICAgICAgPSAweDFEOworICAgIGZpbmFsIHN0YXRpYyBpbnQgU0RFRklORTYgICAgICAgICAgICAgICAgICAgID0gMHgxRTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFNERUZJTkU3ICAgICAgICAgICAgICAgICAgICA9IDB4MUY7CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gVW5pY29kZSBtb2RlIHRhZ3MKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZmluYWwgc3RhdGljIGludCBVQ0hBTkdFMCAgICAgICAgICAgICAgICAgICAgPSAweEUwOworICAgIGZpbmFsIHN0YXRpYyBpbnQgVUNIQU5HRTEgICAgICAgICAgICAgICAgICAgID0gMHhFMTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVDSEFOR0UyICAgICAgICAgICAgICAgICAgICA9IDB4RTI7CisgICAgZmluYWwgc3RhdGljIGludCBVQ0hBTkdFMyAgICAgICAgICAgICAgICAgICAgPSAweEUzOworICAgIGZpbmFsIHN0YXRpYyBpbnQgVUNIQU5HRTQgICAgICAgICAgICAgICAgICAgID0gMHhFNDsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVDSEFOR0U1ICAgICAgICAgICAgICAgICAgICA9IDB4RTU7CisgICAgZmluYWwgc3RhdGljIGludCBVQ0hBTkdFNiAgICAgICAgICAgICAgICAgICAgPSAweEU2OworICAgIGZpbmFsIHN0YXRpYyBpbnQgVUNIQU5HRTcgICAgICAgICAgICAgICAgICAgID0gMHhFNzsKKworICAgIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTAgICAgICAgICAgICAgICAgICAgID0gMHhFODsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkUxICAgICAgICAgICAgICAgICAgICA9IDB4RTk7CisgICAgZmluYWwgc3RhdGljIGludCBVREVGSU5FMiAgICAgICAgICAgICAgICAgICAgPSAweEVBOworICAgIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTMgICAgICAgICAgICAgICAgICAgID0gMHhFQjsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkU0ICAgICAgICAgICAgICAgICAgICA9IDB4RUM7CisgICAgZmluYWwgc3RhdGljIGludCBVREVGSU5FNSAgICAgICAgICAgICAgICAgICAgPSAweEVEOworICAgIGZpbmFsIHN0YXRpYyBpbnQgVURFRklORTYgICAgICAgICAgICAgICAgICAgID0gMHhFRTsKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVERUZJTkU3ICAgICAgICAgICAgICAgICAgICA9IDB4RUY7CisKKyAgICBmaW5hbCBzdGF0aWMgaW50IFVRVU9URVUgICAgICAgICAgICAgICAgICAgICA9IDB4RjA7CisgICAgZmluYWwgc3RhdGljIGludCBVREVGSU5FWCAgICAgICAgICAgICAgICAgICAgPSAweEYxOworICAgIGZpbmFsIHN0YXRpYyBpbnQgVVJFU0VSVkVEICAgICAgICAgICAgICAgICAgID0gMHhGMjsgIC8vIHJlc2VydmVkIHZhbHVlCisKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBDbGFzcyB2YXJpYWJsZXMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKiogRm9yIHdpbmRvdyBvZmZzZXQgbWFwcGluZyAqLworICAgIGZpbmFsIHN0YXRpYyBpbnQgW10gc09mZnNldFRhYmxlID0geyAKKyAgICAgICAgLy8gdGFibGUgZ2VuZXJhdGVkIGJ5IENvbXByZXNzaW9uVGFibGVHZW5lcmF0b3IKKyAgICAgICAgMHgwLCAweDgwLCAweDEwMCwgMHgxODAsIDB4MjAwLCAweDI4MCwgMHgzMDAsIDB4MzgwLCAweDQwMCwKKwkweDQ4MCwgMHg1MDAsIDB4NTgwLCAweDYwMCwgMHg2ODAsIDB4NzAwLCAweDc4MCwgMHg4MDAsIDB4ODgwLAorCTB4OTAwLCAweDk4MCwgMHhhMDAsIDB4YTgwLCAweGIwMCwgMHhiODAsIDB4YzAwLCAweGM4MCwgMHhkMDAsCisJMHhkODAsIDB4ZTAwLCAweGU4MCwgMHhmMDAsIDB4ZjgwLCAweDEwMDAsIDB4MTA4MCwgMHgxMTAwLAorCTB4MTE4MCwgMHgxMjAwLCAweDEyODAsIDB4MTMwMCwgMHgxMzgwLCAweDE0MDAsIDB4MTQ4MCwKKwkweDE1MDAsIDB4MTU4MCwgMHgxNjAwLCAweDE2ODAsIDB4MTcwMCwgMHgxNzgwLCAweDE4MDAsCisJMHgxODgwLCAweDE5MDAsIDB4MTk4MCwgMHgxYTAwLCAweDFhODAsIDB4MWIwMCwgMHgxYjgwLAorCTB4MWMwMCwgMHgxYzgwLCAweDFkMDAsIDB4MWQ4MCwgMHgxZTAwLCAweDFlODAsIDB4MWYwMCwKKwkweDFmODAsIDB4MjAwMCwgMHgyMDgwLCAweDIxMDAsIDB4MjE4MCwgMHgyMjAwLCAweDIyODAsCisJMHgyMzAwLCAweDIzODAsIDB4MjQwMCwgMHgyNDgwLCAweDI1MDAsIDB4MjU4MCwgMHgyNjAwLAorCTB4MjY4MCwgMHgyNzAwLCAweDI3ODAsIDB4MjgwMCwgMHgyODgwLCAweDI5MDAsIDB4Mjk4MCwKKwkweDJhMDAsIDB4MmE4MCwgMHgyYjAwLCAweDJiODAsIDB4MmMwMCwgMHgyYzgwLCAweDJkMDAsCisJMHgyZDgwLCAweDJlMDAsIDB4MmU4MCwgMHgyZjAwLCAweDJmODAsIDB4MzAwMCwgMHgzMDgwLAorCTB4MzEwMCwgMHgzMTgwLCAweDMyMDAsIDB4MzI4MCwgMHgzMzAwLCAweDMzODAsIDB4ZTAwMCwKKwkweGUwODAsIDB4ZTEwMCwgMHhlMTgwLCAweGUyMDAsIDB4ZTI4MCwgMHhlMzAwLCAweGUzODAsCisJMHhlNDAwLCAweGU0ODAsIDB4ZTUwMCwgMHhlNTgwLCAweGU2MDAsIDB4ZTY4MCwgMHhlNzAwLAorCTB4ZTc4MCwgMHhlODAwLCAweGU4ODAsIDB4ZTkwMCwgMHhlOTgwLCAweGVhMDAsIDB4ZWE4MCwKKwkweGViMDAsIDB4ZWI4MCwgMHhlYzAwLCAweGVjODAsIDB4ZWQwMCwgMHhlZDgwLCAweGVlMDAsCisJMHhlZTgwLCAweGVmMDAsIDB4ZWY4MCwgMHhmMDAwLCAweGYwODAsIDB4ZjEwMCwgMHhmMTgwLAorCTB4ZjIwMCwgMHhmMjgwLCAweGYzMDAsIDB4ZjM4MCwgMHhmNDAwLCAweGY0ODAsIDB4ZjUwMCwKKwkweGY1ODAsIDB4ZjYwMCwgMHhmNjgwLCAweGY3MDAsIDB4Zjc4MCwgMHhmODAwLCAweGY4ODAsCisJMHhmOTAwLCAweGY5ODAsIDB4ZmEwMCwgMHhmYTgwLCAweGZiMDAsIDB4ZmI4MCwgMHhmYzAwLAorCTB4ZmM4MCwgMHhmZDAwLCAweGZkODAsIDB4ZmUwMCwgMHhmZTgwLCAweGZmMDAsIDB4ZmY4MCwgMHgwLAorCTB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsCisJMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwKKwkweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLAorCTB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsCisJMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwKKwkweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLAorCTB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweGMwLCAweDI1MCwgMHgzNzAsCisJMHg1MzAsIDB4MzA0MCwgMHgzMGEwLCAweGZmNjAgIAorICAgIH07CisKKyAgICAvKiogU3RhdGljIGNvbXByZXNzaW9uIHdpbmRvdyBvZmZzZXRzICovCisgICAgZmluYWwgc3RhdGljIGludCBbXSBzT2Zmc2V0cyA9IHsKKyAgICAgICAgMHgwMDAwLCAgLy8gZm9yIHF1b3Rpbmcgc2luZ2xlLWJ5dGUgbW9kZSB0YWdzCisgICAgICAgIDB4MDA4MCwgIC8vIExhdGluLTEgU3VwcGxlbWVudAorICAgICAgICAweDAxMDAsICAvLyBMYXRpbiBFeHRlbmRlZC1BCisgICAgICAgIDB4MDMwMCwgIC8vIENvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcworICAgICAgICAweDIwMDAsICAvLyBHZW5lcmFsIFB1bmN0dWF0aW9uCisgICAgICAgIDB4MjA4MCwgIC8vIEN1cmVuY3kgU3ltYm9scworICAgICAgICAweDIxMDAsICAvLyBMZXR0ZXJsaWtlIFN5bWJvbHMgYW5kIE51bWJlciBGb3JtcworICAgICAgICAweDMwMDAgICAvLyBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24KKyAgICB9OworCit9OworCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9TZWFyY2hJdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvU2VhcmNoSXRlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOTYzM2FhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvU2VhcmNoSXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDc4NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvU2VhcmNoSXRlcmF0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNSAwMjozODo1NSAkIAorICogJFJldmlzaW9uOiAxLjE0ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CisKKy8qKgorICogPHA+U2VhcmNoSXRlcmF0b3IgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyB0aGF0IGRlZmluZXMgYSBwcm90b2NvbAorICogZm9yIHRleHQgc2VhcmNoaW5nLiBTdWJjbGFzc2VzIHByb3ZpZGUgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mCisgKiB2YXJpb3VzIHNlYXJjaCBhbGdvcml0aG1zLiAgQSBjb25jcmV0ZSBzdWJjbGFzcywgU3RyaW5nU2VhcmNoLCBpcworICogcHJvdmlkZWQgdGhhdCBpbXBsZW1lbnRzIGxhbmd1YWdlLXNlbnNpdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nIGJhc2VkCisgKiBvbiB0aGUgY29tcGFyaXNvbiBydWxlcyBkZWZpbmVkIGluIGEgUnVsZUJhc2VkQ29sbGF0b3IKKyAqIG9iamVjdC4gSW5zdGFuY2VzIG9mIFNlYXJjaEl0ZXJhdG9yIG1haW50YWluIGEgY3VycmVudCBwb3NpdGlvbiBhbmQKKyAqIHNjYW4gb3ZlciB0aGUgdGFyZ2V0IHRleHQsIHJldHVybmluZyB0aGUgaW5kaWNlcyB3aGVyZSBhIG1hdGNoIGlzCisgKiBmb3VuZCBhbmQgdGhlIGxlbmd0aCBvZiBlYWNoIG1hdGNoLiBHZW5lcmFsbHksIHRoZSBzZXF1ZW5jZSBvZiBmb3J3YXJkIAorICogbWF0Y2hlcyB3aWxsIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHNlcXVlbmNlIG9mIGJhY2t3YXJkIG1hdGNoZXMuT25lCisgKiBjYXNlIHdoZXJlIHRoaXMgc3RhdGVtZW50IG1heSBub3QgaG9sZCBpcyB3aGVuIG5vbi1vdmVybGFwcGluZyBtb2RlIAorICogaXMgc2V0IG9uIGFuZCB0aGVyZSBhcmUgY29udGludW91cyByZXBldGl0aXZlIHBhdHRlcm5zIGluIHRoZSB0ZXh0LiAKKyAqIENvbnNpZGVyIHRoZSBjYXNlIHNlYXJjaGluZyBmb3IgcGF0dGVybiAiYWJhIiBpbiB0aGUgdGV4dCAKKyAqICJhYmFiYWJhYmEiLCBzZXR0aW5nIG92ZXJsYXBwaW5nIG1vZGUgb2ZmIHdpbGwgcHJvZHVjZSBmb3J3YXJkIG1hdGNoZXMKKyAqIGF0IG9mZnNldHMgMCwgNC4gSG93ZXZlciB3aGVuIGEgYmFja3dhcmRzIHNlYXJjaCBpcyBkb25lLCB0aGUKKyAqIHJlc3VsdHMgd2lsbCBiZSBhdCBvZmZzZXRzIDYgYW5kIDIuPC9wPgorICogCisgKiA8cD5JZiBtYXRjaGVzIHNlYXJjaGVkIGZvciBoYXZlIGJvdW5kYXJ5IHJlc3RyaWN0aW9ucy4gQnJlYWtJdGVyYXRvcnMgCisgKiBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIHZhbGlkIGJvdW5kYXJpZXMgb2Ygc3VjaCBhIG1hdGNoLiBPbmNlIGEgCisgKiBCcmVha0l0ZXJhdG9yIGlzIHNldCwgcG90ZW50aWFsIG1hdGNoZXMgd2lsbCBiZSB0ZXN0ZWQgYWdhaW5zdCB0aGUKKyAqIEJyZWFrSXRlcmF0b3IgdG8gZGV0ZXJtaW5lIGlmIHRoZSBib3VuZGFyaWVzIGFyZSB2YWxpZCBhbmQgdGhhdCBhbGwKKyAqIGNoYXJhY3RlcnMgaW4gdGhlIHBvdGVudGlhbCBtYXRjaCBhcmUgZXF1aXZhbGVudCB0byB0aGUgcGF0dGVybiAKKyAqIHNlYXJjaGVkIGZvci4gRm9yIGV4YW1wbGUsIGxvb2tpbmcgZm9yIHRoZSBwYXR0ZXJuICJmb3giIGluIHRoZSB0ZXh0CisgKiAiZm94eSBmb3giIHdpbGwgcHJvZHVjZSBtYXRjaCByZXN1bHRzIGF0IG9mZnNldCAwIGFuZCA1IHdpdGggbGVuZ3RoIDMKKyAqIGlmIG5vIEJyZWFrSXRlcmF0b3JzIHdlcmUgc2V0LiBIb3dldmVyIGlmIGEgV29yZEJyZWFrSXRlcmF0b3IgaXMgc2V0LAorICogdGhlIG9ubHkgbWF0Y2ggdGhhdCB3b3VsZCBiZSBmb3VuZCB3aWxsIGJlIGF0IHRoZSBvZmZzZXQgNS4gU2luY2UsCisgKiB0aGUgU2VhcmNoSXRlcmF0b3IgZ3VhcmFudGVlcyB0aGF0IGlmIGEgQnJlYWtJdGVyYXRvciBpcyBzZXQsIGFsbCBpdHMKKyAqIG1hdGNoZXMgd2lsbCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybiBleGFjdGx5LCBhIHBvdGVudGlhbCBtYXRjaCB0aGF0IAorICogcGFzc2VzIHRoZSBCcmVha0l0ZXJhdG9yIG1pZ2h0IHN0aWxsIG5vdCBwcm9kdWNlIGEgdmFsaWQgbWF0Y2guIEZvciAKKyAqIGluc3RhbmNlIHRoZSBwYXR0ZXJuICJlIiB3aWxsIG5vdCBiZSBmb3VuZCBpbiB0aGUgc3RyaW5nIAorICogIiYjOTI7dTAwZTkiIChsYXRpbiBzbWFsbCBsZXR0ZXIgZSB3aXRoIGFjdXRlKSBpZiBhIAorICogQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpcyB1c2VkLiBFdmVuIHRob3VnaCAiZSIgaXMKKyAqIGEgcGFydCBvZiB0aGUgY2hhcmFjdGVyICImIzkyO3UwMGU5IiBhbmQgdGhlIHBvdGVudGlhbCBtYXRjaCBhdAorICogb2Zmc2V0IDAgbGVuZ3RoIDEgcGFzc2VzIHRoZSBDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIHRlc3QsICImIzkyO3UwMGU5IgorICogaXMgbm90IGVxdWl2YWxlbnQgdG8gImUiLCBoZW5jZSB0aGUgU2VhcmNoSXRlcmF0b3IgcmVqZWN0cyB0aGUgcG90ZW50aWFsCisgKiBtYXRjaC4gQnkgZGVmYXVsdCwgdGhlIFNlYXJjaEl0ZXJhdG9yCisgKiBkb2VzIG5vdCBpbXBvc2UgYW55IGJvdW5kYXJ5IHJlc3RyaWN0aW9uIG9uIHRoZSBtYXRjaGVzLCBpdCB3aWxsIAorICogcmV0dXJuIGFsbCByZXN1bHRzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4uIElsbHVzdHJhdGluZyB3aXRoIHRoZSAKKyAqIGFib3ZlIGV4YW1wbGUsICJlIiB3aWxsCisgKiBiZSBmb3VuZCBpbiB0aGUgc3RyaW5nICImIzkyO3UwMGU5IiBpZiBubyBCcmVha0l0ZXJhdG9yIGlzCisgKiBzcGVjaWZpZWQuPC9wPgorICogCisgKiA8cD5TZWFyY2hJdGVyYXRvciBhbHNvIHByb3ZpZGVzIGEgbWVhbnMgdG8gaGFuZGxlIG92ZXJsYXBwaW5nCisgKiBtYXRjaGVzIHZpYSB0aGUgQVBJIHNldE92ZXJsYXBwaW5nKGJvb2xlYW4pLiBGb3IgZXhhbXBsZSwgaWYKKyAqIG92ZXJsYXBwaW5nIG1vZGUgaXMgc2V0LCBzZWFyY2hpbmcgZm9yIHRoZSBwYXR0ZXJuICJhYmFiIiBpbiB0aGUKKyAqIHRleHQgImFiYWJhYiIgd2lsbCBtYXRjaCBhdCBwb3NpdGlvbnMgMCBhbmQgMiwgd2hlcmVhcyBpZgorICogb3ZlcmxhcHBpbmcgaXMgbm90IHNldCwgU2VhcmNoSXRlcmF0b3Igd2lsbCBvbmx5IG1hdGNoIGF0IHBvc2l0aW9uCisgKiAwLiBCeSBkZWZhdWx0LCBvdmVybGFwcGluZyBtb2RlIGlzIG5vdCBzZXQuPC9wPgorICogCisgKiA8cD5UaGUgQVBJcyBpbiBTZWFyY2hJdGVyYXRvciBhcmUgc2ltaWxhciB0byB0aGF0IG9mIG90aGVyIHRleHQKKyAqIGl0ZXJhdGlvbiBjbGFzc2VzIHN1Y2ggYXMgQnJlYWtJdGVyYXRvci4gVXNpbmcgdGhpcyBjbGFzcywgaXQgaXMKKyAqIGVhc3kgdG8gc2NhbiB0aHJvdWdoIHRleHQgbG9va2luZyBmb3IgYWxsIG9jY3VyYW5jZXMgb2YgYQorICogbWF0Y2guPC9wPgorICogPHA+CisgKiBFeGFtcGxlIG9mIHVzZTo8YnI+CisgKiA8cHJlPgorICogU3RyaW5nIHRhcmdldCA9ICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGZveCI7CisgKiBTdHJpbmcgcGF0dGVybiA9ICJmb3giOworICogU2VhcmNoSXRlcmF0b3IgaXRlciA9IG5ldyBTdHJpbmdTZWFyY2gocGF0dGVybiwgdGFyZ2V0KTsKKyAqIGZvciAoaW50IHBvcyA9IGl0ZXIuZmlyc3QoKTsgcG9zICE9IFNlYXJjaEl0ZXJhdG9yLkRPTkU7IAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gaXRlci5uZXh0KCkpIHsKKyAqICAgICAvLyBwcmludGxuIG1hdGNoZXMgYXQgb2Zmc2V0IDE2IGFuZCA0MSB3aXRoIGxlbmd0aCAzCisgKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCBtYXRjaCBhdCAiICsgcG9zICsgIiwgbGVuZ3RoIGlzICIgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICsgaXRlci5nZXRNYXRjaExlbmd0aCgpKTsKKyAqIH0KKyAqIHRhcmdldCA9ICJhYmFiYWJhYmEiOworICogcGF0dGVybiA9ICJhYmEiOworICogaXRlci5zZXRUYXJnZXQobmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKHBhdHRlcm4pKTsKKyAqIGl0ZXIuc2V0T3ZlcmxhcHBpbmcoZmFsc2UpOworICogU3lzdGVtLm91dC5wcmludGxuKCJPdmVybGFwcGluZyBtb2RlIHNldCB0byBmYWxzZSIpOworICogU3lzdGVtLm91dC5wcmludGxuKCJGb3J3YXJkIG1hdGNoZXMgb2YgcGF0dGVybiAiICsgcGF0dGVybiArICIgaW4gdGV4dCAiCisgKiAgICAgICAgICAgICAgICAgICAgKyB0ZXh0ICsgIjogIik7CisgKiBmb3IgKGludCBwb3MgPSBpdGVyLmZpcnN0KCk7IHBvcyAhPSBTZWFyY2hJdGVyYXRvci5ET05FOyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGl0ZXIubmV4dCgpKSB7CisgKiAgICAgLy8gcHJpbnRsbiBtYXRjaGVzIGF0IG9mZnNldCAwIGFuZCA0IHdpdGggbGVuZ3RoIDMKKyAqICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9mZnNldCAiICsgcG9zICsgIiwgbGVuZ3RoICIgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICsgaXRlci5nZXRNYXRjaExlbmd0aCgpKTsKKyAqIH0KKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiQmFja3dhcmQgbWF0Y2hlcyBvZiBwYXR0ZXJuICIgKyBwYXR0ZXJuICsgIiBpbiB0ZXh0ICIKKyAqICAgICAgICAgICAgICAgICAgICArIHRleHQgKyAiOiAiKTsKKyAqIGZvciAoaW50IHBvcyA9IGl0ZXIubGFzdCgpOyBwb3MgIT0gU2VhcmNoSXRlcmF0b3IuRE9ORTsgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBpdGVyLnByZXZpb3VzKCkpIHsKKyAqICAgICAvLyBwcmludGxuIG1hdGNoZXMgYXQgb2Zmc2V0IDYgYW5kIDIgd2l0aCBsZW5ndGggMworICogICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2Zmc2V0ICIgKyBwb3MgKyAiLCBsZW5ndGggIiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgKyBpdGVyLmdldE1hdGNoTGVuZ3RoKCkpOworICogfQorICogU3lzdGVtLm91dC5wcmludGxuKCJPdmVybGFwcGluZyBtb2RlIHNldCB0byB0cnVlIik7CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIkluZGV4IHNldCB0byAyIik7CisgKiBpdGVyLnNldEluZGV4KDIpOworICogaXRlci5zZXRPdmVybGFwcGluZyh0cnVlKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiRm9yd2FyZCBtYXRjaGVzIG9mIHBhdHRlcm4gIiArIHBhdHRlcm4gKyAiIGluIHRleHQgIgorICogICAgICAgICAgICAgICAgICAgICsgdGV4dCArICI6ICIpOworICogZm9yIChpbnQgcG9zID0gaXRlci5maXJzdCgpOyBwb3MgIT0gU2VhcmNoSXRlcmF0b3IuRE9ORTsgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBpdGVyLm5leHQoKSkgeworICogICAgIC8vIHByaW50bG4gbWF0Y2hlcyBhdCBvZmZzZXQgMiwgNCBhbmQgNiB3aXRoIGxlbmd0aCAzCisgKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvZmZzZXQgIiArIHBvcyArICIsIGxlbmd0aCAiIAorICogICAgICAgICAgICAgICAgICAgICAgICArIGl0ZXIuZ2V0TWF0Y2hMZW5ndGgoKSk7CisgKiB9CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIkluZGV4IHNldCB0byAyIik7CisgKiBpdGVyLnNldEluZGV4KDIpOworICogU3lzdGVtLm91dC5wcmludGxuKCJCYWNrd2FyZCBtYXRjaGVzIG9mIHBhdHRlcm4gIiArIHBhdHRlcm4gKyAiIGluIHRleHQgIgorICogICAgICAgICAgICAgICAgICAgICsgdGV4dCArICI6ICIpOworICogZm9yIChpbnQgcG9zID0gaXRlci5sYXN0KCk7IHBvcyAhPSBTZWFyY2hJdGVyYXRvci5ET05FOyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGl0ZXIucHJldmlvdXMoKSkgeworICogICAgIC8vIHByaW50bG4gbWF0Y2hlcyBhdCBvZmZzZXQgMCB3aXRoIGxlbmd0aCAzCisgKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvZmZzZXQgIiArIHBvcyArICIsIGxlbmd0aCAiIAorICogICAgICAgICAgICAgICAgICAgICAgICArIGl0ZXIuZ2V0TWF0Y2hMZW5ndGgoKSk7CisgKiB9CisgKiA8L3ByZT4KKyAqIDwvcD4KKyAqIEBhdXRob3IgTGF1cmEgV2VybmVyLCBzeW53ZWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICogQHNlZSBCcmVha0l0ZXJhdG9yCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZWFyY2hJdGVyYXRvciAKK3sKKwkKKwkvLyBwdWJsaWMgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKyAgICAvKioKKyAgICAgKiBET05FIGlzIHJldHVybmVkIGJ5IHByZXZpb3VzKCkgYW5kIG5leHQoKSBhZnRlciBhbGwgdmFsaWQgbWF0Y2hlcyBoYXZlIAorICAgICAqIGJlZW4gcmV0dXJuZWQsIGFuZCBieSBmaXJzdCgpIGFuZCBsYXN0KCkgaWYgdGhlcmUgYXJlIG5vIG1hdGNoZXMgYXQgYWxsLgorICAgICAqIEBzZWUgI3ByZXZpb3VzCisgICAgICogQHNlZSAjbmV4dAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPTkUgPSAtMTsKKyAgICAKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8vIHB1YmxpYyBzZXR0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogPHA+CisgICAgICogU2V0cyB0aGUgcG9zaXRpb24gaW4gdGhlIHRhcmdldCB0ZXh0IGF0IHdoaWNoIHRoZSBuZXh0IHNlYXJjaCB3aWxsIHN0YXJ0LgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbnkgcHJldmlvdXMgbWF0Y2guCisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBwb3NpdGlvbiBmcm9tIHdoaWNoIHRvIHN0YXJ0IHRoZSBuZXh0IHNlYXJjaAorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB0aHJvd24gaWYgYXJndW1lbnQgcG9zaXRpb24gaXMgb3V0CisgICAgICogICAgICAgICAgICBvZiB0aGUgdGFyZ2V0IHRleHQgcmFuZ2UuCisgICAgICogQHNlZSAjZ2V0SW5kZXgKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEluZGV4KGludCBwb3NpdGlvbikgeworICAgICAgICBpZiAocG9zaXRpb24gPCB0YXJnZXRUZXh0LmdldEJlZ2luSW5kZXgoKSAKKyAgICAgICAgICAgIHx8IHBvc2l0aW9uID4gdGFyZ2V0VGV4dC5nZXRFbmRJbmRleCgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAic2V0SW5kZXgoaW50KSBleHBlY3RlZCBwb3NpdGlvbiB0byBiZSBiZXR3ZWVuICIgKworICAgICAgICAgICAgICAgIHRhcmdldFRleHQuZ2V0QmVnaW5JbmRleCgpICsgIiBhbmQgIiArIHRhcmdldFRleHQuZ2V0RW5kSW5kZXgoKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9zZXRPZmZzZXRfID0gcG9zaXRpb247CisgICAgICAgIG1fcmVzZXRfID0gZmFsc2U7CisgICAgICAgIG1hdGNoTGVuZ3RoID0gMDsKKyAgICB9CisJCisJLyoqCisJICogPHA+CisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG92ZXJsYXBwaW5nIG1hdGNoZXMgYXJlIHJldHVybmVkLiBTZWUgdGhlIGNsYXNzIAorICAgICAqIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3ZlcmxhcHBpbmcgbWF0Y2hlcy4KKyAgICAgKiA8L3A+CisJICogPHA+CisgICAgICogVGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGlzIHByb3BlcnR5IGlzIGZhbHNlCisgICAgICogPC9wPgorCSAqIEBwYXJhbSBhbGxvd092ZXJsYXAgZmxhZyBpbmRpY2F0b3IgaWYgb3ZlcmxhcHBpbmcgbWF0Y2hlcyBhcmUgYWxsb3dlZAorICAgICAqIEBzZWUgI2lzT3ZlcmxhcHBpbmcKKwkgKiBAZHJhZnQgSUNVIDIuMgorCSAqLworCXB1YmxpYyB2b2lkIHNldE92ZXJsYXBwaW5nKGJvb2xlYW4gYWxsb3dPdmVybGFwKQorCXsKKwkJbV9pc092ZXJsYXBfID0gYWxsb3dPdmVybGFwOworCX0KKwkKKwkvKioKKyAgICAgKiBTZXQgdGhlIEJyZWFrSXRlcmF0b3IgdGhhdCBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBwb2ludHMgYXQgd2hpY2ggCisgICAgICogbWF0Y2hlcyBhcmUgZGV0ZWN0ZWQuCisgICAgICogVXNpbmcgPHR0Pm51bGw8L3R0PiBhcyB0aGUgcGFyYW1ldGVyIGlzIGxlZ2FsOyBpdCBtZWFucyB0aGF0IGJyZWFrIAorICAgICAqIGRldGVjdGlvbiBzaG91bGQgbm90IGJlIGF0dGVtcHRlZC4KKyAgICAgKiBTZWUgY2xhc3MgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW0gYnJlYWtpdGVyIEEgQnJlYWtJdGVyYXRvciB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXN0cmljdCB0aGUgCisgICAgICogCQkJCQlwb2ludHMgYXQgd2hpY2ggbWF0Y2hlcyBhcmUgZGV0ZWN0ZWQuCisgICAgICogQHNlZSAjZ2V0QnJlYWtJdGVyYXRvcgorICAgICAqIEBzZWUgQnJlYWtJdGVyYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEJyZWFrSXRlcmF0b3IoQnJlYWtJdGVyYXRvciBicmVha2l0ZXIpIAorICAgIHsKKyAgICAgICAgYnJlYWtJdGVyYXRvciA9IGJyZWFraXRlcjsKKyAgICAgICAgaWYgKGJyZWFrSXRlcmF0b3IgIT0gbnVsbCkgeworICAgICAgICAJYnJlYWtJdGVyYXRvci5zZXRUZXh0KHRhcmdldFRleHQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgdGFyZ2V0IHRleHQgdG8gYmUgc2VhcmNoZWQuIFRleHQgaXRlcmF0aW9uIHdpbGwgdGhlbiBiZWdpbiBhdCAKKyAJICogdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHN0cmluZy4gVGhpcyBtZXRob2QgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIAorICAgICAqIHJldXNlIGFuIGl0ZXJhdG9yIHRvIHNlYXJjaCB3aXRoaW4gYSBkaWZmZXJlbnQgYm9keSBvZiB0ZXh0LgorCSAqIEBwYXJhbSB0ZXh0IG5ldyB0ZXh0IGl0ZXJhdG9yIHRvIGxvb2sgZm9yIG1hdGNoLCAKKwkgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gd2hlbiB0ZXh0IGlzIG51bGwgb3IgaGFzCisJICogCQkJICAwIGxlbmd0aAorCSAqIEBzZWUgI2dldFRhcmdldAorCSAqIEBzdGFibGUgSUNVIDIuNAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRhcmdldChDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0KQorCXsKKwkJaWYgKHRleHQgPT0gbnVsbCB8fCB0ZXh0LmdldEVuZEluZGV4KCkgPT0gdGV4dC5nZXRJbmRleCgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIG51bGwgb3IgZW1wdHkgdGV4dCIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0YXJnZXRUZXh0ID0gdGV4dDsKKyAgICAgICAgdGFyZ2V0VGV4dC5zZXRJbmRleCh0YXJnZXRUZXh0LmdldEJlZ2luSW5kZXgoKSk7CisgICAgICAgIG1hdGNoTGVuZ3RoID0gMDsKKyAgICAgICAgbV9yZXNldF8gPSB0cnVlOworICAgICAgICBtX2lzRm9yd2FyZFNlYXJjaGluZ18gPSB0cnVlOworICAgICAgICBpZiAoYnJlYWtJdGVyYXRvciAhPSBudWxsKSB7CisgICAgICAgIAlicmVha0l0ZXJhdG9yLnNldFRleHQodGFyZ2V0VGV4dCk7CisgICAgICAgIH0KKwl9CisKKwkvLyBwdWJsaWMgZ2V0dGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCisJLyoqCisgICAgICogPHA+CisgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1vc3QgcmVjZW50IG1hdGNoIGluIHRoZSB0YXJnZXQgdGV4dC4KKwkgKiBUaGlzIGNhbGwgcmV0dXJucyBhIHZhbGlkIHJlc3VsdCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIAorCSAqIHtAbGluayAjZmlyc3R9LCB7QGxpbmsgI25leHR9LCB7QGxpbmsgI3ByZXZpb3VzfSwgb3Ige0BsaW5rICNsYXN0fS4KKwkgKiBKdXN0IGFmdGVyIGNvbnN0cnVjdGlvbiwgb3IgYWZ0ZXIgYSBzZWFyY2hpbmcgbWV0aG9kIHJldHVybnMgCisJICogPHR0PkRPTkU8L3R0PiwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gPHR0PkRPTkU8L3R0Pi4KKyAgICAgKiA8L3A+CisJICogPHA+CisgICAgICogVXNlIDx0dD5nZXRNYXRjaExlbmd0aDwvdHQ+IHRvIGdldCB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaGVkIHRleHQuCisgICAgICogPHR0PmdldE1hdGNoZWRUZXh0PC90dD4gd2lsbCByZXR1cm4gdGhlIHN1YnRleHQgaW4gdGhlIHNlYXJjaGVkIAorICAgICAqIHRhcmdldCB0ZXh0IGZyb20gaW5kZXggZ2V0TWF0Y2hTdGFydCgpIHdpdGggbGVuZ3RoIGdldE1hdGNoTGVuZ3RoKCkuIAorICAgICAqIDwvcD4KKwkgKiBAcmV0dXJuIGluZGV4IHRvIGEgc3Vic3RyaW5nIHdpdGhpbiB0aGUgdGV4dCBzdHJpbmcgdGhhdCBpcyBiZWluZyAKKwkgKiAgICAgICAgIHNlYXJjaGVkLgorICAgICAqIEBzZWUgI2dldE1hdGNoTGVuZ3RoCisgICAgICogQHNlZSAjZ2V0TWF0Y2hlZFRleHQKKyAgICAgKiBAc2VlICNmaXJzdAorICAgICAqIEBzZWUgI25leHQKKyAgICAgKiBAc2VlICNwcmV2aW91cworICAgICAqIEBzZWUgI2xhc3QKKyAgICAgKiBAc2VlICNET05FCisJICogQGRyYWZ0IElDVSAyLjIKKwkgKi8KKwlwdWJsaWMgaW50IGdldE1hdGNoU3RhcnQoKQorCXsKKyAgICAgICAgcmV0dXJuIG1fbGFzdE1hdGNoU3RhcnRfOworCX0KKworCS8qKgorICAgICAqIFJldHVybiB0aGUgaW5kZXggaW4gdGhlIHRhcmdldCB0ZXh0IGF0IHdoaWNoIHRoZSBpdGVyYXRvciBpcyBjdXJyZW50bHkKKyAgICAgKiBwb3NpdGlvbmVkLiAKKyAgICAgKiBJZiB0aGUgaXRlcmF0aW9uIGhhcyBnb25lIHBhc3QgdGhlIGVuZCBvZiB0aGUgdGFyZ2V0IHRleHQsIG9yIHBhc3QgCisgICAgICogdGhlIGJlZ2lubmluZyBmb3IgYSBiYWNrd2FyZHMgc2VhcmNoLCB7QGxpbmsgI0RPTkV9IGlzIHJldHVybmVkLgorICAgICAqIEByZXR1cm4gaW5kZXggaW4gdGhlIHRhcmdldCB0ZXh0IGF0IHdoaWNoIHRoZSBpdGVyYXRvciBpcyBjdXJyZW50bHkgCisgICAgICogICAgICAgICBwb3NpdGlvbmVkLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICogQHNlZSAjZmlyc3QKKyAgICAgKiBAc2VlICNuZXh0CisgICAgICogQHNlZSAjcHJldmlvdXMKKyAgICAgKiBAc2VlICNsYXN0CisgICAgICogQHNlZSAjRE9ORQorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0SW5kZXgoKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD4KKyAgICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1vc3QgcmVjZW50IG1hdGNoIGluIHRoZSB0YXJnZXQgdGV4dC4gCisgICAgICogVGhpcyBjYWxsIHJldHVybnMgYSB2YWxpZCByZXN1bHQgb25seSBhZnRlciBhIHN1Y2Nlc3NmdWwKKyAgICAgKiBjYWxsIHRvIHtAbGluayAjZmlyc3R9LCB7QGxpbmsgI25leHR9LCB7QGxpbmsgI3ByZXZpb3VzfSwgb3IgCisgICAgICoge0BsaW5rICNsYXN0fS4KKyAgICAgKiBKdXN0IGFmdGVyIGNvbnN0cnVjdGlvbiwgb3IgYWZ0ZXIgYSBzZWFyY2hpbmcgbWV0aG9kIHJldHVybnMKKyAgICAgKiA8dHQ+RE9ORTwvdHQ+LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiAwLiBTZWUgZ2V0TWF0Y2hTdGFydCgpIGZvciAKKyAgICAgKiBtb3JlIGRldGFpbHMuCisgICAgICogPC9wPgorICAgICAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgbW9zdCByZWNlbnQgbWF0Y2ggaW4gdGhlIHRhcmdldCB0ZXh0LCBvciAwIGlmIAorICAgICAqICAgICAgICAgdGhlcmUgaXMgbm8gbWF0Y2guCisgICAgICogQHNlZSAjZ2V0TWF0Y2hTdGFydAorICAgICAqIEBzZWUgI2dldE1hdGNoZWRUZXh0CisgICAgICogQHNlZSAjZmlyc3QKKyAgICAgKiBAc2VlICNuZXh0CisgICAgICogQHNlZSAjcHJldmlvdXMKKyAgICAgKiBAc2VlICNsYXN0CisgICAgICogQHNlZSAjRE9ORQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0TWF0Y2hMZW5ndGgoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBtYXRjaExlbmd0aDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgQnJlYWtJdGVyYXRvciB0aGF0IGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGluZGV4ZXMgYXQgd2hpY2ggCisgICAgICogbWF0Y2hlcyBhcmUgZGV0ZWN0ZWQuIFRoaXMgd2lsbCBiZSB0aGUgc2FtZSBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIHRvIAorICAgICAqIHRoZSBjb25zdHJ1Y3RvciBvciB0byA8Y29kZT5zZXRCcmVha0l0ZXJhdG9yPC9jb2RlPi4KKyAgICAgKiBJZiB0aGUgQnJlYWtJdGVyYXRvciBoYXMgbm90IGJlZW4gc2V0LCA8dHQ+bnVsbDwvdHQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICogU2VlIHNldEJyZWFrSXRlcmF0b3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICogQHJldHVybiB0aGUgQnJlYWtJdGVyYXRvciBzZXQgdG8gcmVzdHJpY3QgbG9naWMgbWF0Y2hlcworICAgICAqIEBzZWUgI3NldEJyZWFrSXRlcmF0b3IKKyAgICAgKiBAc2VlIEJyZWFrSXRlcmF0b3IKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQnJlYWtJdGVyYXRvciBnZXRCcmVha0l0ZXJhdG9yKCkgCisgICAgeworICAgICAgICByZXR1cm4gYnJlYWtJdGVyYXRvcjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSB0YXJnZXQgdGV4dCB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkLgorICAgICAqIEByZXR1cm4gdGFyZ2V0IHRleHQgYmVpbmcgc2VhcmNoZWQuCisgICAgICogQHNlZSAjc2V0VGFyZ2V0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIENoYXJhY3Rlckl0ZXJhdG9yIGdldFRhcmdldCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldFRleHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRleHQgdGhhdCB3YXMgbWF0Y2hlZCBieSB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byAKKyAgICAgKiB7QGxpbmsgI2ZpcnN0fSwge0BsaW5rICNuZXh0fSwge0BsaW5rICNwcmV2aW91c30sIG9yIHtAbGluayAjbGFzdH0uIAorICAgICAqIElmIHRoZSBpdGVyYXRvciBpcyBub3QgcG9pbnRpbmcgYXQgYSB2YWxpZCBtYXRjaCwgZm9yIGluc3RhbmNlIGp1c3QgCisgICAgICogYWZ0ZXIgY29uc3RydWN0aW9uIG9yIGFmdGVyIDx0dD5ET05FPC90dD4gaGFzIGJlZW4gcmV0dXJuZWQsIGFuIGVtcHR5IAorICAgICAqIFN0cmluZyB3aWxsIGJlIHJldHVybmVkLiBTZWUgZ2V0TWF0Y2hTdGFydCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAqIEBzZWUgI2dldE1hdGNoU3RhcnQKKyAgICAgKiBAc2VlICNnZXRNYXRjaExlbmd0aAorICAgICAqIEBzZWUgI2ZpcnN0CisgICAgICogQHNlZSAjbmV4dAorICAgICAqIEBzZWUgI3ByZXZpb3VzCisgICAgICogQHNlZSAjbGFzdAorICAgICAqIEBzZWUgI0RPTkUKKyAgICAgKiBAcmV0dXJuIHRoZSBzdWJzdHJpbmcgaW4gdGhlIHRhcmdldCB0ZXh0IG9mIHRoZSBtb3N0IHJlY2VudCBtYXRjaCAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldE1hdGNoZWRUZXh0KCkgCisgICAgeworICAgICAgICBpZiAobWF0Y2hMZW5ndGggPiAwKSB7CisgICAgICAgICAgICBpbnQgbGltaXQgPSBtX2xhc3RNYXRjaFN0YXJ0XyArIG1hdGNoTGVuZ3RoOworICAgIAkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIobWF0Y2hMZW5ndGgpOworICAgIAkJcmVzdWx0LmFwcGVuZCh0YXJnZXRUZXh0LmN1cnJlbnQoKSk7CisgICAgCQl0YXJnZXRUZXh0Lm5leHQoKTsKKyAgICAJCXdoaWxlICh0YXJnZXRUZXh0LmdldEluZGV4KCkgPCBsaW1pdCkgeworICAgIAkJCXJlc3VsdC5hcHBlbmQodGFyZ2V0VGV4dC5jdXJyZW50KCkpOworICAgIAkJCXRhcmdldFRleHQubmV4dCgpOworICAgIAkJfQorICAgICAgICAgICAgdGFyZ2V0VGV4dC5zZXRJbmRleChtX2xhc3RNYXRjaFN0YXJ0Xyk7CisgICAgCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgCX0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisJLy8gbWlzY2VsbGFuZW91cyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkvKioKKyAgICAgKiBTZWFyY2ggPGI+Zm9yd2FyZHM8L2I+IGluIHRoZSB0YXJnZXQgdGV4dCBmb3IgdGhlIG5leHQgdmFsaWQgbWF0Y2gsCisgICAgICogc3RhcnRpbmcgdGhlIHNlYXJjaCBmcm9tIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHBvc2l0aW9uLiBUaGUgaXRlcmF0b3IgaXMgCisJICogYWRqdXN0ZWQgc28gdGhhdCBpdHMgY3VycmVudCBpbmRleCwgYXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRJbmRleH0sCisJICogaXMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtYXRjaCBpZiBvbmUgd2FzIGZvdW5kLiBJZiBhIG1hdGNoIGlzIAorICAgICAqIGZvdW5kLCB0aGUgaW5kZXggb2YgdGhlIG1hdGNoIGlzIHJldHVybmVkLCBvdGhlcndpc2UgPHR0PkRPTkU8L3R0PiBpcworICAgICAqIHJldHVybmVkLiAgSWYgb3ZlcmxhcHBpbmcgbW9kZSBpcyBzZXQsIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZvdW5kIG1hdGNoCisgICAgICogY2FuIGJlIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG1hdGNoLCBpZiBhbnkuCisJICogQHJldHVybiBUaGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIG5leHQgZm9yd2FyZCBtYXRjaCBhZnRlciB0aGUgY3VycmVudCAKKyAgICAgKiAgICAgICAgIGl0ZXJhdG9yIHBvc2l0aW9uLCBvciAKKwkgKiAgICAgICAgIDx0dD5ET05FPC90dD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcy4KKwkgKiBAc2VlICNnZXRNYXRjaFN0YXJ0CisgICAgICogQHNlZSAjZ2V0TWF0Y2hMZW5ndGgKKyAgICAgKiBAc2VlICNnZXRNYXRjaGVkVGV4dAorICAgICAqIEBzZWUgI2ZvbGxvd2luZworICAgICAqIEBzZWUgI3ByZWNlZGluZworICAgICAqIEBzZWUgI3ByZXZpb3VzCisgICAgICogQHNlZSAjZmlyc3QKKyAgICAgKiBAc2VlICNsYXN0CisgICAgICogQHNlZSAjRE9ORQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgbmV4dCgpCisgICAgeworICAgIAlpbnQgc3RhcnQgPSB0YXJnZXRUZXh0LmdldEluZGV4KCk7CisgICAgCWlmIChtX3NldE9mZnNldF8gIT0gRE9ORSkgeworCSAgICAJc3RhcnQgPSBtX3NldE9mZnNldF87CQorCSAgICAJbV9zZXRPZmZzZXRfID0gRE9ORTsJCisJICAgIH0KKwkgICAgaWYgKG1faXNGb3J3YXJkU2VhcmNoaW5nXykgeworCSAgICAJaWYgKCFtX3Jlc2V0XyAmJiAKKwkgICAgICAgIAlzdGFydCArIG1hdGNoTGVuZ3RoID49IHRhcmdldFRleHQuZ2V0RW5kSW5kZXgoKSkgeworCSAgICAgICAgICAgIC8vIG5vdCBlbm91Z2ggY2hhcmFjdGVycyB0byBtYXRjaAorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICB0YXJnZXRUZXh0LnNldEluZGV4KHRhcmdldFRleHQuZ2V0RW5kSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgbV9sYXN0TWF0Y2hTdGFydF8gPSBET05FOworCSAgICAgICAgICAgIHJldHVybiBET05FOyAKKwkgICAgICAgIH0KKwkgICAgICAgIG1fcmVzZXRfID0gZmFsc2U7CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgICAvLyBzd2l0Y2hpbmcgZGlyZWN0aW9uLiAKKwkgICAgICAgIC8vIGlmIG1hdGNoZWRJbmRleCA9PSBVU0VBUkNIX0RPTkUsIGl0IG1lYW5zIHRoYXQgZWl0aGVyIGEgCisJICAgICAgICAvLyBzZXRJbmRleCBoYXMgYmVlbiBjYWxsZWQgb3IgdGhhdCBwcmV2aW91cyByYW4gb2ZmIHRoZSB0ZXh0CisJICAgICAgICAvLyBzdHJpbmcuIHRoZSBpdGVyYXRvciB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIG9mZnNldCAwIGlmIGEgCisJICAgICAgICAvLyBtYXRjaCBpcyBub3QgZm91bmQuCisJICAgICAgICBtX2lzRm9yd2FyZFNlYXJjaGluZ18gPSB0cnVlOworCSAgICAgICAgaWYgKHN0YXJ0ICE9IERPTkUpIHsKKwkgICAgICAgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gc2V0IHRoZSBjb2xsYXRpb24gZWxlbWVudCBpdGVyYXRvcgorCSAgICAgICAgICAgIC8vIHRoZSBuZXh0IGNhbGwgdG8gbmV4dCB3aWxsIHNldCB0aGUgb2Zmc2V0LgorCSAgICAgICAgICAgIHJldHVybiBzdGFydDsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICAKKyAgICAgICAgaWYgKHN0YXJ0ID09IERPTkUpIHsKKyAgICAgICAgICAgIHN0YXJ0ID0gdGFyZ2V0VGV4dC5nZXRCZWdpbkluZGV4KCk7CisgICAgICAgIH0KKwkgICAgbV9sYXN0TWF0Y2hTdGFydF8gPSBoYW5kbGVOZXh0KHN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG1fbGFzdE1hdGNoU3RhcnRfOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlYXJjaCA8Yj5iYWNrd2FyZHM8L2I+IGluIHRoZSB0YXJnZXQgdGV4dCBmb3IgdGhlIG5leHQgdmFsaWQgbWF0Y2gsCisgICAgICogc3RhcnRpbmcgdGhlIHNlYXJjaCBmcm9tIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHBvc2l0aW9uLiBUaGUgaXRlcmF0b3IgaXMgCisgICAgICogYWRqdXN0ZWQgc28gdGhhdCBpdHMgY3VycmVudCBpbmRleCwgYXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRJbmRleH0sCisgICAgICogaXMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtYXRjaCBpZiBvbmUgd2FzIGZvdW5kLiBJZiBhIG1hdGNoIGlzIAorICAgICAqIGZvdW5kLCB0aGUgaW5kZXggaXMgcmV0dXJuZWQsIG90aGVyd2lzZSA8dHQ+RE9ORTwvdHQ+IGlzIHJldHVybmVkLiAgSWYKKyAgICAgKiBvdmVybGFwcGluZyBtb2RlIGlzIHNldCwgdGhlIGVuZCBvZiB0aGUgZm91bmQgbWF0Y2ggY2FuIGJlIGFmdGVyIHRoZQorICAgICAqIGJlZ2lubmluZyBvZiB0aGUgcHJldmlvdXMgbWF0Y2gsIGlmIGFueS4KKyAgICAgKiBAcmV0dXJuIFRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgbmV4dCBiYWNrd2FyZHMgbWF0Y2ggYWZ0ZXIgdGhlIGN1cnJlbnQgCisgICAgICogICAgICAgICBpdGVyYXRvciBwb3NpdGlvbiwgb3IgCisgICAgICogICAgICAgICA8dHQ+RE9ORTwvdHQ+IGlmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMuCisgICAgICogQHNlZSAjZ2V0TWF0Y2hTdGFydAorICAgICAqIEBzZWUgI2dldE1hdGNoTGVuZ3RoCisgICAgICogQHNlZSAjZ2V0TWF0Y2hlZFRleHQKKyAgICAgKiBAc2VlICNmb2xsb3dpbmcKKyAgICAgKiBAc2VlICNwcmVjZWRpbmcKKyAgICAgKiBAc2VlICNuZXh0CisgICAgICogQHNlZSAjZmlyc3QKKyAgICAgKiBAc2VlICNsYXN0CisgICAgICogQHNlZSAjRE9ORQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgcHJldmlvdXMoKQorICAgIHsKKyAgICAJaW50IHN0YXJ0ID0gdGFyZ2V0VGV4dC5nZXRJbmRleCgpOworICAgIAlpZiAobV9zZXRPZmZzZXRfICE9IERPTkUpIHsKKwkgICAgCXN0YXJ0ID0gbV9zZXRPZmZzZXRfOwkKKwkgICAgCW1fc2V0T2Zmc2V0XyA9IERPTkU7CQorCSAgICB9CisgICAgCWlmIChtX3Jlc2V0XykgeworICAgICAgICAgICAgbV9pc0ZvcndhcmRTZWFyY2hpbmdfID0gZmFsc2U7CisgICAgICAgICAgICBtX3Jlc2V0XyA9IGZhbHNlOworICAgICAgICAgICAgc3RhcnQgPSB0YXJnZXRUZXh0LmdldEVuZEluZGV4KCk7OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9pc0ZvcndhcmRTZWFyY2hpbmdfID09IHRydWUpIHsKKyAgICAgICAgICAgIC8vIHN3aXRjaGluZyBkaXJlY3Rpb24uIAorICAgICAgICAgICAgLy8gaWYgbWF0Y2hlZEluZGV4ID09IFVTRUFSQ0hfRE9ORSwgaXQgbWVhbnMgdGhhdCBlaXRoZXIgYSAKKyAgICAgICAgICAgIC8vIHNldEluZGV4IGhhcyBiZWVuIGNhbGxlZCBvciB0aGF0IG5leHQgcmFuIG9mZiB0aGUgdGV4dAorICAgICAgICAgICAgLy8gc3RyaW5nLiB0aGUgaXRlcmF0b3Igd291bGQgaGF2ZSBiZWVuIHNldCB0byBvZmZzZXQgdGV4dExlbmd0aCBpZiAKKyAgICAgICAgICAgIC8vIGEgbWF0Y2ggaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgbV9pc0ZvcndhcmRTZWFyY2hpbmdfID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoc3RhcnQgIT0gdGFyZ2V0VGV4dC5nZXRFbmRJbmRleCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAJaWYgKHN0YXJ0ID09IHRhcmdldFRleHQuZ2V0QmVnaW5JbmRleCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbm90IGVub3VnaCBjaGFyYWN0ZXJzIHRvIG1hdGNoCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGggPSAwOworICAgICAgICAgICAgICAgIHRhcmdldFRleHQuc2V0SW5kZXgodGFyZ2V0VGV4dC5nZXRCZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgIG1fbGFzdE1hdGNoU3RhcnRfID0gRE9ORTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRE9ORTsgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtX2xhc3RNYXRjaFN0YXJ0XyA9IGhhbmRsZVByZXZpb3VzKHN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIG1fbGFzdE1hdGNoU3RhcnRfOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBvdmVybGFwcGluZyBwcm9wZXJ0eSBoYXMgYmVlbiBzZXQuCisgICAgICogU2VlIHNldE92ZXJsYXBwaW5nKGJvb2xlYW4pIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAqIEBzZWUgI3NldE92ZXJsYXBwaW5nCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBvdmVybGFwcGluZyBwcm9wZXJ0eSBoYXMgYmVlbiBzZXQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNPdmVybGFwcGluZygpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNPdmVybGFwXzsKKyAgICB9CisgICAgCisgICAgLyoqIAorCSAqIDxwPgorICAgICAqIFJlc2V0cyB0aGUgc2VhcmNoIGl0ZXJhdGlvbi4gQWxsIHByb3BlcnRpZXMgd2lsbCBiZSByZXNldCB0byB0aGVpcgorICAgICAqIGRlZmF1bHQgdmFsdWVzLgorICAgICAqIDwvcD4KKwkgKiA8cD4KKyAgICAgKiBJZiBhIGZvcndhcmQgaXRlcmF0aW9uIGlzIGluaXRpYXRlZCwgdGhlIG5leHQgc2VhcmNoIHdpbGwgYmVnaW4gYXQgdGhlCisgICAgICogc3RhcnQgb2YgdGhlIHRhcmdldCB0ZXh0LiBPdGhlcndpc2UsIGlmIGEgYmFja3dhcmRzIGl0ZXJhdGlvbiBpcyBpbml0aWF0ZWQsCisgICAgICogdGhlIG5leHQgc2VhcmNoIHdpbGwgYmVnaW4gYXQgdGhlIGVuZCBvZiB0aGUgdGFyZ2V0IHRleHQuCisgICAgICogPC9wPgorCSAqIEBkcmFmdCBJQ1UgMi4yCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKQorCXsKKwkJLy8gcmVzZXQgaXMgc2V0dGluZyB0aGUgYXR0cmlidXRlcyB0aGF0IGFyZSBhbHJlYWR5IGluIHN0cmluZyBzZWFyY2gKKyAgICAgICAgbWF0Y2hMZW5ndGggPSAwOworICAgICAgICBzZXRJbmRleCh0YXJnZXRUZXh0LmdldEJlZ2luSW5kZXgoKSk7CisgICAgICAgIG1faXNPdmVybGFwXyA9IGZhbHNlOworICAgICAgICBtX2lzRm9yd2FyZFNlYXJjaGluZ18gPSB0cnVlOworICAgICAgICBtX3Jlc2V0XyA9IHRydWU7CisgICAgICAgIG1fc2V0T2Zmc2V0XyA9IERPTkU7CisJfQorCQorCS8qKgorICAgICAqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IDxiPmZvcndhcmQ8L2I+IG1hdGNoIGluIHRoZSB0YXJnZXQgdGV4dC4gCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgaXRlcmF0aW9uIHRvIGJlZ2luIGF0IHRoZSBzdGFydCBvZiB0aGUgCisgICAgICogdGFyZ2V0IHRleHQgYW5kIHNlYXJjaGVzIGZvcndhcmQgZnJvbSB0aGVyZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZm9yd2FyZCBtYXRjaCwgb3IgPGNvZGU+RE9ORTwvY29kZT4gCisgICAgICogCQkgICBpZiB0aGVyZSBhcmUgbm8gbWF0Y2hlcy4KKyAgICAgKiBAc2VlICNnZXRNYXRjaFN0YXJ0CisgICAgICogQHNlZSAjZ2V0TWF0Y2hMZW5ndGgKKyAgICAgKiBAc2VlICNnZXRNYXRjaGVkVGV4dAorICAgICAqIEBzZWUgI2ZvbGxvd2luZworICAgICAqIEBzZWUgI3ByZWNlZGluZworICAgICAqIEBzZWUgI25leHQKKyAgICAgKiBAc2VlICNwcmV2aW91cworICAgICAqIEBzZWUgI2xhc3QKKyAgICAgKiBAc2VlICNET05FCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBmaXJzdCgpIAorICAgIHsKKyAgICAgICAgbV9pc0ZvcndhcmRTZWFyY2hpbmdfID0gdHJ1ZTsKKyAgICAgICAgc2V0SW5kZXgodGFyZ2V0VGV4dC5nZXRCZWdpbkluZGV4KCkpOworICAgICAgICByZXR1cm4gbmV4dCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IDxiPmZvcndhcmQ8L2I+IG1hdGNoIGluIHRhcmdldCB0ZXh0IHRoYXQgCisgICAgICogaXMgYXQgb3IgYWZ0ZXIgYXJndW1lbnQgPHR0PnBvc2l0aW9uPC90dD4uIAorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGl0ZXJhdGlvbiB0byBiZWdpbiBhdCB0aGUgc3BlY2lmaWVkCisgICAgICogcG9zaXRpb24gaW4gdGhlIHRoZSB0YXJnZXQgdGV4dCBhbmQgc2VhcmNoZXMgZm9yd2FyZCBmcm9tIHRoZXJlLgorICAgICAqIEByZXR1cm4gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBmb3J3YXJkIG1hdGNoLCBvciA8Y29kZT5ET05FPC9jb2RlPiAKKyAgICAgKiAgICAgICAgIGlmIHRoZXJlIGFyZSBubyBtYXRjaGVzLgorICAgICAqIEBzZWUgI2dldE1hdGNoU3RhcnQKKyAgICAgKiBAc2VlICNnZXRNYXRjaExlbmd0aAorICAgICAqIEBzZWUgI2dldE1hdGNoZWRUZXh0CisgICAgICogQHNlZSAjZmlyc3QKKyAgICAgKiBAc2VlICNwcmVjZWRpbmcKKyAgICAgKiBAc2VlICNuZXh0CisgICAgICogQHNlZSAjcHJldmlvdXMKKyAgICAgKiBAc2VlICNsYXN0CisgICAgICogQHNlZSAjRE9ORQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBpbnQgZm9sbG93aW5nKGludCBwb3NpdGlvbikgCisgICAgeworICAgIAltX2lzRm9yd2FyZFNlYXJjaGluZ18gPSB0cnVlOworICAgIAkvLyBwb3NpdGlvbiBjaGVja2VkIGluIHVzZWFyY2hfc2V0T2Zmc2V0CisgICAgICAgIHNldEluZGV4KHBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5leHQoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgPGI+YmFja3dhcmQ8L2I+IG1hdGNoIGluIHRhcmdldCB0ZXh0LiAKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpdGVyYXRpb24gdG8gYmVnaW4gYXQgdGhlIGVuZCBvZiB0aGUgCisgICAgICogdGFyZ2V0IHRleHQgYW5kIHNlYXJjaGVzIGJhY2t3YXJkcyBmcm9tIHRoZXJlLgorICAgICAqIEByZXR1cm4gVGhlIHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBmaXJzdCBiYWNrd2FyZCBtYXRjaCwgb3IgCisgICAgICogICAgICAgICA8Y29kZT5ET05FPC9jb2RlPiBpZiB0aGVyZSBhcmUgbm8gbWF0Y2hlcy4KKyAgICAgKiBAc2VlICNnZXRNYXRjaFN0YXJ0CisgICAgICogQHNlZSAjZ2V0TWF0Y2hMZW5ndGgKKyAgICAgKiBAc2VlICNnZXRNYXRjaGVkVGV4dAorICAgICAqIEBzZWUgI2ZpcnN0CisgICAgICogQHNlZSAjcHJlY2VkaW5nCisgICAgICogQHNlZSAjbmV4dAorICAgICAqIEBzZWUgI3ByZXZpb3VzCisgICAgICogQHNlZSAjZm9sbG93aW5nCisgICAgICogQHNlZSAjRE9ORQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBpbnQgbGFzdCgpIAorICAgIHsKKyAgICAgICAgbV9pc0ZvcndhcmRTZWFyY2hpbmdfID0gZmFsc2U7CisgICAgICAgIHNldEluZGV4KHRhcmdldFRleHQuZ2V0RW5kSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBwcmV2aW91cygpOworICAgIH0KKyAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgPGI+YmFja3dhcmRzPC9iPiBtYXRjaCBpbiB0YXJnZXQgCisgICAgICogdGV4dCB0aGF0IGVuZHMgYXQgb3IgYmVmb3JlIGFyZ3VtZW50IDx0dD5wb3NpdGlvbjwvdHQ+LiAKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpdGVyYXRpb24gdG8gYmVnaW4gYXQgdGhlIGFyZ3VtZW50CisgICAgICogcG9zaXRpb24gaW5kZXggb2YgdGhlIHRhcmdldCB0ZXh0IGFuZCBzZWFyY2hlcyBiYWNrd2FyZHMgZnJvbSB0aGVyZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgZmlyc3QgYmFja3dhcmRzIG1hdGNoLCBvciAKKyAgICAgKiAgICAgICAgIDxjb2RlPkRPTkU8L2NvZGU+IAorICAgICAqICAgICAgICAgaWYgdGhlcmUgYXJlIG5vIG1hdGNoZXMuCisgICAgICogQHNlZSAjZ2V0TWF0Y2hTdGFydAorICAgICAqIEBzZWUgI2dldE1hdGNoTGVuZ3RoCisgICAgICogQHNlZSAjZ2V0TWF0Y2hlZFRleHQKKyAgICAgKiBAc2VlICNmaXJzdAorICAgICAqIEBzZWUgI2ZvbGxvd2luZworICAgICAqIEBzZWUgI25leHQKKyAgICAgKiBAc2VlICNwcmV2aW91cworICAgICAqIEBzZWUgI2xhc3QKKyAgICAgKiBAc2VlICNET05FCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBwcmVjZWRpbmcoaW50IHBvc2l0aW9uKSAKKyAgICB7CisgICAgICAgIG1faXNGb3J3YXJkU2VhcmNoaW5nXyA9IGZhbHNlOworICAgICAgICAvLyBwb3NpdGlvbiBjaGVja2VkIGluIHVzZWFyY2hfc2V0T2Zmc2V0CisgICAgICAgIHNldEluZGV4KHBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzKCk7ICAgCisgICAgfQorICAgIAorICAgIC8vIHByb3RlY3RlZCBkYXRhIG1lbWJlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogVGhlIEJyZWFrSXRlcmF0b3IgdG8gZGVmaW5lIHRoZSBib3VuZGFyaWVzIG9mIGEgbG9naWNhbCBtYXRjaC4KKyAgICAgKiBUaGlzIHZhbHVlIGNhbiBiZSBhIG51bGwuCisgICAgICogU2VlIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICogQHNlZSAjc2V0QnJlYWtJdGVyYXRvcihCcmVha0l0ZXJhdG9yKQorICAgICAqIEBzZWUgI2dldEJyZWFrSXRlcmF0b3IKKyAgICAgKiBAc2VlIEJyZWFrSXRlcmF0b3IKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQnJlYWtJdGVyYXRvciBicmVha0l0ZXJhdG9yOyAKKworICAgIC8qKgorICAgICAqIFRhcmdldCB0ZXh0IGZvciBzZWFyY2hpbmcuCisgICAgICogQHNlZSAjc2V0VGFyZ2V0KENoYXJhY3Rlckl0ZXJhdG9yKQorICAgICAqIEBzZWUgI2dldFRhcmdldAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBDaGFyYWN0ZXJJdGVyYXRvciB0YXJnZXRUZXh0OworICAgIC8qKgorICAgICAqIExlbmd0aCBvZiB0aGUgbW9zdCBjdXJyZW50IG1hdGNoIGluIHRhcmdldCB0ZXh0LiAKKyAgICAgKiBWYWx1ZSAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAqIEBzZWUgI3NldE1hdGNoTGVuZ3RoCisgICAgICogQHNlZSAjZ2V0TWF0Y2hMZW5ndGgKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IG1hdGNoTGVuZ3RoOworICAgIAorICAgIC8vIHByb3RlY3RlZCBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisJLyoqCisgICAgICogUHJvdGVjdGVkIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgc3ViY2xhc3Nlcy4KKyAgICAgKiBJbml0aWFsaXplcyB0aGUgaXRlcmF0b3Igd2l0aCB0aGUgYXJndW1lbnQgdGFyZ2V0IHRleHQgZm9yIHNlYXJjaGluZyAKKyAgICAgKiBhbmQgc2V0cyB0aGUgQnJlYWtJdGVyYXRvci4KKyAgICAgKiBTZWUgY2xhc3MgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSB1c2Ugb2YgdGhlIHRhcmdldCB0ZXh0CisgICAgICogYW5kIEJyZWFrSXRlcmF0b3IuCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHRleHQgdG8gYmUgc2VhcmNoZWQuCisgICAgICogQHBhcmFtIGJyZWFrZXIgQSB7QGxpbmsgQnJlYWtJdGVyYXRvcn0gdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgCisgICAgICogICAgICAgICAgICAgICAgYm91bmRhcmllcyBvZiBhIGxvZ2ljYWwgbWF0Y2guIFRoaXMgYXJndW1lbnQgY2FuIGJlIG51bGwuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhyb3duIHdoZW4gYXJndW1lbnQgdGFyZ2V0IGlzIG51bGwsCisgICAgICogICAgICAgICAgICBvciBvZiBsZW5ndGggMAorICAgICAqIEBzZWUgQnJlYWtJdGVyYXRvciAgCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIFNlYXJjaEl0ZXJhdG9yKENoYXJhY3Rlckl0ZXJhdG9yIHRhcmdldCwgQnJlYWtJdGVyYXRvciBicmVha2VyKQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsIAorICAgICAgICAgICAgfHwgKHRhcmdldC5nZXRFbmRJbmRleCgpIC0gdGFyZ2V0LmdldEJlZ2luSW5kZXgoKSkgPT0gMCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIGFyZ3VtZW50IHRhcmdldC4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgQXJndW1lbnQgY2FuIG5vdCBiZSBudWxsIG9yIG9mIGxlbmd0aCAwIik7CisgICAgICAgIH0KKyAgICAJdGFyZ2V0VGV4dCA9IHRhcmdldDsKKyAgICAJYnJlYWtJdGVyYXRvciA9IGJyZWFrZXI7CisgICAgCWlmIChicmVha0l0ZXJhdG9yICE9IG51bGwpIHsKKyAgICAJCWJyZWFrSXRlcmF0b3Iuc2V0VGV4dCh0YXJnZXQpOworICAgIAl9CisgICAgCW1hdGNoTGVuZ3RoID0gMDsKKyAgICAgICAgbV9sYXN0TWF0Y2hTdGFydF8gPSBET05FOworICAgICAgICBtX2lzT3ZlcmxhcF8gPSBmYWxzZTsKKyAgICAgICAgbV9pc0ZvcndhcmRTZWFyY2hpbmdfID0gdHJ1ZTsKKyAgICAgICAgbV9yZXNldF8gPSB0cnVlOworICAgICAgICBtX3NldE9mZnNldF8gPSBET05FOworICAgIH0gICAgCisgICAgCisgICAgLy8gcHJvdGVjdGVkIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgCisgICAgLyoqCisJICogU2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBtb3N0IHJlY2VudCBtYXRjaCBpbiB0aGUgdGFyZ2V0IHRleHQuIAorCSAqIFN1YmNsYXNzZXMnIGhhbmRsZU5leHQoKSBhbmQgaGFuZGxlUHJldmlvdXMoKSBtZXRob2RzIHNob3VsZCBjYWxsIHRoaXMgCisgICAgICogYWZ0ZXIgdGhleSBmaW5kIGEgbWF0Y2ggaW4gdGhlIHRhcmdldCB0ZXh0LiAgICAKKwkgKiBAcGFyYW0gbGVuZ3RoIG5ldyBsZW5ndGggdG8gc2V0CisgICAgICogQHNlZSAjaGFuZGxlTmV4dAorICAgICAqIEBzZWUgI2hhbmRsZVByZXZpb3VzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisJICovCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0TWF0Y2hMZW5ndGgoaW50IGxlbmd0aCkKKyAgICB7CisgICAgCW1hdGNoTGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKworCS8qKgorCSAqIDxwPgorICAgICAqIEFic3RyYWN0IG1ldGhvZCB0aGF0IHN1YmNsYXNzZXMgb3ZlcnJpZGUgdG8gcHJvdmlkZSB0aGUgbWVjaGFuaXNtIAorCSAqIGZvciBmaW5kaW5nIHRoZSBuZXh0IDxiPmZvcndhcmRzPC9iPiBtYXRjaCBpbiB0aGUgdGFyZ2V0IHRleHQuIFRoaXMgCisgICAgICogYWxsb3dzIGRpZmZlcmVudCBzdWJjbGFzc2VzIHRvIHByb3ZpZGUgZGlmZmVyZW50IHNlYXJjaCBhbGdvcml0aG1zLgorICAgICAqIDwvcD4gCisJICogPHA+CisgICAgICogSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhpcyBmdW5jdGlvbiBtdXN0IGNhbGwgc2V0TWF0Y2hMZW5ndGgoaW50KSB0bworICAgICAqIHNldCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgbWF0Y2guCisgICAgICogVGhlIGl0ZXJhdG9yIGlzIGFkanVzdGVkIHNvIHRoYXQgaXRzIGN1cnJlbnQgaW5kZXgsIGFzIHJldHVybmVkIGJ5IAorICAgICAqIHtAbGluayAjZ2V0SW5kZXh9LCBpcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIG1hdGNoIGlmIG9uZSB3YXMgCisgICAgICogZm91bmQuIElmIGEgbWF0Y2ggaXMgbm90IGZvdW5kLCA8dHQ+RE9ORTwvdHQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICogPC9wPiAKKwkgKiBAcGFyYW0gc3RhcnQgaW5kZXggaW4gdGhlIHRhcmdldCB0ZXh0IGF0IHdoaWNoIHRoZSBmb3J3YXJkcyBzZWFyY2ggCisgICAgICogICAgICAgIHNob3VsZCBiZWdpbi4KKwkgKiBAcmV0dXJuIHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgbmV4dCBmb3J3YXJkcyBtYXRjaCBpZiBmb3VuZCwgRE9ORSAKKyAgICAgKiAgICAgICAgIG90aGVyd2lzZQorCSAqIEBzZWUgI3NldE1hdGNoTGVuZ3RoKGludCkKKyAgICAgKiBAc2VlICNoYW5kbGVQcmV2aW91cyhpbnQpCisgICAgICogQHNlZSAjRE9ORQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorCSAqLworICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgaGFuZGxlTmV4dChpbnQgc3RhcnQpOworICAgIAorICAgIC8qKgorCSAqIDxwPgorICAgICAqIEFic3RyYWN0IG1ldGhvZCB3aGljaCBzdWJjbGFzc2VzIG92ZXJyaWRlIHRvIHByb3ZpZGUgdGhlIG1lY2hhbmlzbSAKKwkgKiBmb3IgZmluZGluZyB0aGUgbmV4dCA8Yj5iYWNrd2FyZHM8L2I+IG1hdGNoIGluIHRoZSB0YXJnZXQgdGV4dC4gCisgICAgICogVGhpcyBhbGxvd3MgZGlmZmVyZW50IAorCSAqIHN1YmNsYXNzZXMgdG8gcHJvdmlkZSBkaWZmZXJlbnQgc2VhcmNoIGFsZ29yaXRobXMuIAorICAgICAqIDwvcD4gCisJICogPHA+CisgICAgICogSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhpcyBmdW5jdGlvbiBtdXN0IGNhbGwgc2V0TWF0Y2hMZW5ndGgoaW50KSB0bworICAgICAqIHNldCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgbWF0Y2guCisgICAgICogVGhlIGl0ZXJhdG9yIGlzIGFkanVzdGVkIHNvIHRoYXQgaXRzIGN1cnJlbnQgaW5kZXgsIGFzIHJldHVybmVkIGJ5IAorICAgICAqIHtAbGluayAjZ2V0SW5kZXh9LCBpcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIG1hdGNoIGlmIG9uZSB3YXMgCisgICAgICogZm91bmQuIElmIGEgbWF0Y2ggaXMgbm90IGZvdW5kLCA8dHQ+RE9ORTwvdHQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICogPC9wPiAKKwkgKiBAcGFyYW0gc3RhcnQgaW5kZXggaW4gdGhlIHRhcmdldCB0ZXh0IGF0IHdoaWNoIHRoZSBiYWNrd2FyZHMgc2VhcmNoIAorICAgICAqICAgICAgICBzaG91bGQgYmVnaW4uCisJICogQHJldHVybiB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIG5leHQgYmFja3dhcmRzIG1hdGNoIGlmIGZvdW5kLCAKKyAgICAgKiAgICAgICAgIERPTkUgb3RoZXJ3aXNlCisJICogQHNlZSAjc2V0TWF0Y2hMZW5ndGgoaW50KQorICAgICAqIEBzZWUgI2hhbmRsZU5leHQoaW50KQorICAgICAqIEBzZWUgI0RPTkUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKwkgKi8KKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGhhbmRsZVByZXZpb3VzKGludCBzdGFydEF0KTsKKyAgICAKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBGbGFnIGluZGljYXRlcyBpZiB3ZSBhcmUgZG9pbmcgYSBmb3J3YXJkcyBzZWFyY2gKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbV9pc0ZvcndhcmRTZWFyY2hpbmdfOworICAgIC8qKgorICAgICAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgb3ZlcmxhcHBpbmcgc2VhcmNoIGlzIHRvIGJlIGRvbmUuCisgICAgICogRS5nLiBsb29raW5nIGZvciAiYWEiIGluICJhYWEiIHdpbGwgeWllbGQgbWF0Y2hlcyBhdCBvZmZzZXQgMCBhbmQgMS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbV9pc092ZXJsYXBfOworICAgIC8qKgorICAgICAqIEZsYWcgaW5kaWNhdGVzIGlmIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBzdHJpbmcgc2VhcmNoLgorICAgICAqIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIGluIGZvcndhcmQgc2VhcmNoIGFuZCBhdCB0aGUgc3RhcnQgb2YgbV90ZXh0LgorICAgICAqLyAKKyAgICBwcml2YXRlIGJvb2xlYW4gbV9yZXNldF87CisgICAgLyoqCisgICAgICogRGF0YSBtZW1iZXIgdG8gc3RvcmUgdXNlciBkZWZpbmVkIHBvc2l0aW9uIGluIHNldEluZGV4KCkuCisgICAgICogSWYgc2V0SW5kZXgoKSBpcyBub3QgY2FsbGVkLCB0aGlzIHZhbHVlIHdpbGwgYmUgRE9ORS4KKyAgICAgKi8gCisgICAgcHJpdmF0ZSBpbnQgbV9zZXRPZmZzZXRfOworICAgIC8qKgorICAgICAqIE9mZnNldCBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsYXN0IG1hdGNoCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9sYXN0TWF0Y2hTdGFydF87Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9TaW1wbGVEYXRlRm9ybWF0LmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9TaW1wbGVEYXRlRm9ybWF0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMxNmVlNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1NpbXBsZURhdGVGb3JtYXQuamF2YQpAQCAtMCwwICsxLDE0MjQgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1NpbXBsZURhdGVGb3JtYXQuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNSAwMToyMjoyOCAkIAorICogJFJldmlzaW9uOiAxLjE3ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZURhdGE7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmU7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOworaW1wb3J0IGphdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEubGFuZy5TdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5GaWVsZFBvc2l0aW9uOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudGV4dC5QYXJzZVBvc2l0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogPGNvZGU+U2ltcGxlRGF0ZUZvcm1hdDwvY29kZT4gaXMgYSBjb25jcmV0ZSBjbGFzcyBmb3IgZm9ybWF0dGluZyBhbmQKKyAqIHBhcnNpbmcgZGF0ZXMgaW4gYSBsb2NhbGUtc2Vuc2l0aXZlIG1hbm5lci4gSXQgYWxsb3dzIGZvciBmb3JtYXR0aW5nCisgKiAoZGF0ZSAtPiB0ZXh0KSwgcGFyc2luZyAodGV4dCAtPiBkYXRlKSwgYW5kIG5vcm1hbGl6YXRpb24uCisgKgorICogPHA+CisgKiA8Y29kZT5TaW1wbGVEYXRlRm9ybWF0PC9jb2RlPiBhbGxvd3MgeW91IHRvIHN0YXJ0IGJ5IGNob29zaW5nCisgKiBhbnkgdXNlci1kZWZpbmVkIHBhdHRlcm5zIGZvciBkYXRlLXRpbWUgZm9ybWF0dGluZy4gSG93ZXZlciwgeW91CisgKiBhcmUgZW5jb3VyYWdlZCB0byBjcmVhdGUgYSBkYXRlLXRpbWUgZm9ybWF0dGVyIHdpdGggZWl0aGVyCisgKiA8Y29kZT5nZXRUaW1lSW5zdGFuY2U8L2NvZGU+LCA8Y29kZT5nZXREYXRlSW5zdGFuY2U8L2NvZGU+LCBvcgorICogPGNvZGU+Z2V0RGF0ZVRpbWVJbnN0YW5jZTwvY29kZT4gaW4gPGNvZGU+RGF0ZUZvcm1hdDwvY29kZT4uIEVhY2gKKyAqIG9mIHRoZXNlIGNsYXNzIG1ldGhvZHMgY2FuIHJldHVybiBhIGRhdGUvdGltZSBmb3JtYXR0ZXIgaW5pdGlhbGl6ZWQKKyAqIHdpdGggYSBkZWZhdWx0IGZvcm1hdCBwYXR0ZXJuLiBZb3UgbWF5IG1vZGlmeSB0aGUgZm9ybWF0IHBhdHRlcm4KKyAqIHVzaW5nIHRoZSA8Y29kZT5hcHBseVBhdHRlcm48L2NvZGU+IG1ldGhvZHMgYXMgZGVzaXJlZC4KKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZXNlIG1ldGhvZHMsIHNlZQorICoge0BsaW5rIERhdGVGb3JtYXR9LgorICoKKyAqIDxwPgorICogPHN0cm9uZz5UaW1lIEZvcm1hdCBTeW50YXg6PC9zdHJvbmc+CisgKiA8cD4KKyAqIFRvIHNwZWNpZnkgdGhlIHRpbWUgZm9ybWF0IHVzZSBhIDxlbT50aW1lIHBhdHRlcm48L2VtPiBzdHJpbmcuCisgKiBJbiB0aGlzIHBhdHRlcm4sIGFsbCBBU0NJSSBsZXR0ZXJzIGFyZSByZXNlcnZlZCBhcyBwYXR0ZXJuIGxldHRlcnMsCisgKiB3aGljaCBhcmUgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nOgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogU3ltYm9sICAgTWVhbmluZyAgICAgICAgICAgICAgICAgUHJlc2VudGF0aW9uICAgICAgICBFeGFtcGxlCisgKiAtLS0tLS0gICAtLS0tLS0tICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0gICAgICAgIC0tLS0tLS0KKyAqIEcgICAgICAgIGVyYSBkZXNpZ25hdG9yICAgICAgICAgIChUZXh0KSAgICAgICAgICAgICAgQUQKKyAqIHkgICAgICAgIHllYXIgICAgICAgICAgICAgICAgICAgIChOdW1iZXIpICAgICAgICAgICAgMTk5NgorICogdSAgICAgICAgZXh0ZW5kZWQgeWVhciAgICAgICAgICAgKE51bWJlcikgICAgICAgICAgICA0NjAxCisgKiBNICAgICAgICBtb250aCBpbiB5ZWFyICAgICAgICAgICAoVGV4dCAmIE51bWJlcikgICAgIEp1bHkgJiAwNworICogZCAgICAgICAgZGF5IGluIG1vbnRoICAgICAgICAgICAgKE51bWJlcikgICAgICAgICAgICAxMAorICogaCAgICAgICAgaG91ciBpbiBhbS9wbSAoMX4xMikgICAgKE51bWJlcikgICAgICAgICAgICAxMgorICogSCAgICAgICAgaG91ciBpbiBkYXkgKDB+MjMpICAgICAgKE51bWJlcikgICAgICAgICAgICAwCisgKiBtICAgICAgICBtaW51dGUgaW4gaG91ciAgICAgICAgICAoTnVtYmVyKSAgICAgICAgICAgIDMwCisgKiBzICAgICAgICBzZWNvbmQgaW4gbWludXRlICAgICAgICAoTnVtYmVyKSAgICAgICAgICAgIDU1CisgKiBTICAgICAgICBtaWxsaXNlY29uZCAgICAgICAgICAgICAoTnVtYmVyKSAgICAgICAgICAgIDk3OAorICogRSAgICAgICAgZGF5IGluIHdlZWsgICAgICAgICAgICAgKFRleHQpICAgICAgICAgICAgICBUdWVzZGF5CisgKiBEICAgICAgICBkYXkgaW4geWVhciAgICAgICAgICAgICAoTnVtYmVyKSAgICAgICAgICAgIDE4OQorICogRiAgICAgICAgZGF5IG9mIHdlZWsgaW4gbW9udGggICAgKE51bWJlcikgICAgICAgICAgICAyICgybmQgV2VkIGluIEp1bHkpCisgKiB3ICAgICAgICB3ZWVrIGluIHllYXIgICAgICAgICAgICAoTnVtYmVyKSAgICAgICAgICAgIDI3CisgKiBXICAgICAgICB3ZWVrIGluIG1vbnRoICAgICAgICAgICAoTnVtYmVyKSAgICAgICAgICAgIDIKKyAqIGEgICAgICAgIGFtL3BtIG1hcmtlciAgICAgICAgICAgIChUZXh0KSAgICAgICAgICAgICAgUE0KKyAqIGsgICAgICAgIGhvdXIgaW4gZGF5ICgxfjI0KSAgICAgIChOdW1iZXIpICAgICAgICAgICAgMjQKKyAqIEsgICAgICAgIGhvdXIgaW4gYW0vcG0gKDB+MTEpICAgIChOdW1iZXIpICAgICAgICAgICAgMAorICogeiAgICAgICAgdGltZSB6b25lICAgICAgICAgICAgICAgKFRleHQpICAgICAgICAgICAgICBQYWNpZmljIFN0YW5kYXJkIFRpbWUKKyAqICcgICAgICAgIGVzY2FwZSBmb3IgdGV4dCAgICAgICAgIChEZWxpbWl0ZXIpCisgKiAnJyAgICAgICBzaW5nbGUgcXVvdGUgICAgICAgICAgICAoTGl0ZXJhbCkgICAgICAgICAgICcKKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICogVGhlIGNvdW50IG9mIHBhdHRlcm4gbGV0dGVycyBkZXRlcm1pbmUgdGhlIGZvcm1hdC4KKyAqIDxwPgorICogPHN0cm9uZz4oVGV4dCk8L3N0cm9uZz46IDQgb3IgbW9yZSBwYXR0ZXJuIGxldHRlcnMtLXVzZSBmdWxsIGZvcm0sCisgKiAmbHQ7IDQtLXVzZSBzaG9ydCBvciBhYmJyZXZpYXRlZCBmb3JtIGlmIG9uZSBleGlzdHMuCisgKiA8cD4KKyAqIDxzdHJvbmc+KE51bWJlcik8L3N0cm9uZz46IHRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMuIFNob3J0ZXIKKyAqIG51bWJlcnMgYXJlIHplcm8tcGFkZGVkIHRvIHRoaXMgYW1vdW50LiBZZWFyIGlzIGhhbmRsZWQgc3BlY2lhbGx5OworICogdGhhdCBpcywgaWYgdGhlIGNvdW50IG9mICd5JyBpcyAyLCB0aGUgWWVhciB3aWxsIGJlIHRydW5jYXRlZCB0byAyIGRpZ2l0cy4KKyAqIDxwPgorICogPHN0cm9uZz4oVGV4dCAmIE51bWJlcik8L3N0cm9uZz46IDMgb3Igb3ZlciwgdXNlIHRleHQsIG90aGVyd2lzZSB1c2UgbnVtYmVyLgorICogPHA+CisgKiBBbnkgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybiB0aGF0IGFyZSBub3QgaW4gdGhlIHJhbmdlcyBvZiBbJ2EnLi4neiddCisgKiBhbmQgWydBJy4uJ1onXSB3aWxsIGJlIHRyZWF0ZWQgYXMgcXVvdGVkIHRleHQuIEZvciBpbnN0YW5jZSwgY2hhcmFjdGVycworICogbGlrZSAnOicsICcuJywgJyAnLCAnIycgYW5kICdAJyB3aWxsIGFwcGVhciBpbiB0aGUgcmVzdWx0aW5nIHRpbWUgdGV4dAorICogZXZlbiB0aGV5IGFyZSBub3QgZW1icmFjZWQgd2l0aGluIHNpbmdsZSBxdW90ZXMuCisgKiA8cD4KKyAqIEEgcGF0dGVybiBjb250YWluaW5nIGFueSBpbnZhbGlkIHBhdHRlcm4gbGV0dGVyIHdpbGwgcmVzdWx0IGluIGEgdGhyb3duCisgKiBleGNlcHRpb24gZHVyaW5nIGZvcm1hdHRpbmcgb3IgcGFyc2luZy4KKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+RXhhbXBsZXMgVXNpbmcgdGhlIFVTIExvY2FsZTo8L3N0cm9uZz4KKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIEZvcm1hdCBQYXR0ZXJuICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAorICogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLQorICogInl5eXkuTU0uZGQgRyAnYXQnIEhIOm1tOnNzIHoiICAgIC0+PiAgMTk5Ni4wNy4xMCBBRCBhdCAxNTowODo1NiBQRFQKKyAqICJFRUUsIE1NTSBkLCAnJ3l5IiAgICAgICAgICAgICAgICAtPj4gIFdlZCwgSnVseSAxMCwgJzk2CisgKiAiaDptbSBhIiAgICAgICAgICAgICAgICAgICAgICAgICAgLT4+ICAxMjowOCBQTQorICogImhoICdvJydjbG9jaycgYSwgenp6eiIgICAgICAgICAgIC0+PiAgMTIgbydjbG9jayBQTSwgUGFjaWZpYyBEYXlsaWdodCBUaW1lCisgKiAiSzptbSBhLCB6IiAgICAgICAgICAgICAgICAgICAgICAgLT4+ICAwOjAwIFBNLCBQU1QKKyAqICJ5eXl5eS5NTU1NTS5kZCBHR0cgaGg6bW0gYWFhIiAgICAtPj4gIDAxOTk2Lkp1bHkuMTAgQUQgMTI6MDggUE0KKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICogPHN0cm9uZz5Db2RlIFNhbXBsZTo8L3N0cm9uZz4KKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIFNpbXBsZVRpbWVab25lIHBkdCA9IG5ldyBTaW1wbGVUaW1lWm9uZSgtOCAqIDYwICogNjAgKiAxMDAwLCAiUFNUIik7CisgKiBwZHQuc2V0U3RhcnRSdWxlKENhbGVuZGFyLkFQUklMLCAxLCBDYWxlbmRhci5TVU5EQVksIDIqNjAqNjAqMTAwMCk7CisgKiBwZHQuc2V0RW5kUnVsZShDYWxlbmRhci5PQ1RPQkVSLCAtMSwgQ2FsZW5kYXIuU1VOREFZLCAyKjYwKjYwKjEwMDApOworICogPGJyPgorICogLy8gRm9ybWF0IHRoZSBjdXJyZW50IHRpbWUuCisgKiBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdHRlcgorICogICAgID0gbmV3IFNpbXBsZURhdGVGb3JtYXQgKCJ5eXl5Lk1NLmRkIEcgJ2F0JyBoaDptbTpzcyBhIHp6eiIpOworICogRGF0ZSBjdXJyZW50VGltZV8xID0gbmV3IERhdGUoKTsKKyAqIFN0cmluZyBkYXRlU3RyaW5nID0gZm9ybWF0dGVyLmZvcm1hdChjdXJyZW50VGltZV8xKTsKKyAqIDxicj4KKyAqIC8vIFBhcnNlIHRoZSBwcmV2aW91cyBzdHJpbmcgYmFjayBpbnRvIGEgRGF0ZS4KKyAqIFBhcnNlUG9zaXRpb24gcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgKiBEYXRlIGN1cnJlbnRUaW1lXzIgPSBmb3JtYXR0ZXIucGFyc2UoZGF0ZVN0cmluZywgcG9zKTsKKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICogSW4gdGhlIGV4YW1wbGUsIHRoZSB0aW1lIHZhbHVlIDxjb2RlPmN1cnJlbnRUaW1lXzI8L2NvZGU+IG9idGFpbmVkIGZyb20KKyAqIHBhcnNpbmcgd2lsbCBiZSBlcXVhbCB0byA8Y29kZT5jdXJyZW50VGltZV8xPC9jb2RlPi4gSG93ZXZlciwgdGhleSBtYXkgbm90IGJlCisgKiBlcXVhbCBpZiB0aGUgYW0vcG0gbWFya2VyICdhJyBpcyBsZWZ0IG91dCBmcm9tIHRoZSBmb3JtYXQgcGF0dGVybiB3aGlsZQorICogdGhlICJob3VyIGluIGFtL3BtIiBwYXR0ZXJuIHN5bWJvbCBpcyB1c2VkLiBUaGlzIGluZm9ybWF0aW9uIGxvc3MgY2FuCisgKiBoYXBwZW4gd2hlbiBmb3JtYXR0aW5nIHRoZSB0aW1lIGluIFBNLgorICoKKyAqIDxwPgorICogV2hlbiBwYXJzaW5nIGEgZGF0ZSBzdHJpbmcgdXNpbmcgdGhlIGFiYnJldmlhdGVkIHllYXIgcGF0dGVybiAoInl5IiksCisgKiBTaW1wbGVEYXRlRm9ybWF0IG11c3QgaW50ZXJwcmV0IHRoZSBhYmJyZXZpYXRlZCB5ZWFyCisgKiByZWxhdGl2ZSB0byBzb21lIGNlbnR1cnkuICBJdCBkb2VzIHRoaXMgYnkgYWRqdXN0aW5nIGRhdGVzIHRvIGJlCisgKiB3aXRoaW4gODAgeWVhcnMgYmVmb3JlIGFuZCAyMCB5ZWFycyBhZnRlciB0aGUgdGltZSB0aGUgU2ltcGxlRGF0ZUZvcm1hdAorICogaW5zdGFuY2UgaXMgY3JlYXRlZC4gRm9yIGV4YW1wbGUsIHVzaW5nIGEgcGF0dGVybiBvZiAiTU0vZGQveXkiIGFuZCBhCisgKiBTaW1wbGVEYXRlRm9ybWF0IGluc3RhbmNlIGNyZWF0ZWQgb24gSmFuIDEsIDE5OTcsICB0aGUgc3RyaW5nCisgKiAiMDEvMTEvMTIiIHdvdWxkIGJlIGludGVycHJldGVkIGFzIEphbiAxMSwgMjAxMiB3aGlsZSB0aGUgc3RyaW5nICIwNS8wNC82NCIKKyAqIHdvdWxkIGJlIGludGVycHJldGVkIGFzIE1heSA0LCAxOTY0LgorICogRHVyaW5nIHBhcnNpbmcsIG9ubHkgc3RyaW5ncyBjb25zaXN0aW5nIG9mIGV4YWN0bHkgdHdvIGRpZ2l0cywgYXMgZGVmaW5lZCBieQorICoge0BsaW5rIGphdmEubGFuZy5DaGFyYWN0ZXIjaXNEaWdpdChjaGFyKX0sIHdpbGwgYmUgcGFyc2VkIGludG8gdGhlIGRlZmF1bHQKKyAqIGNlbnR1cnkuCisgKiBBbnkgb3RoZXIgbnVtZXJpYyBzdHJpbmcsIHN1Y2ggYXMgYSBvbmUgZGlnaXQgc3RyaW5nLCBhIHRocmVlIG9yIG1vcmUgZGlnaXQKKyAqIHN0cmluZywgb3IgYSB0d28gZGlnaXQgc3RyaW5nIHRoYXQgaXNuJ3QgYWxsIGRpZ2l0cyAoZm9yIGV4YW1wbGUsICItMSIpLCBpcworICogaW50ZXJwcmV0ZWQgbGl0ZXJhbGx5LiAgU28gIjAxLzAyLzMiIG9yICIwMS8wMi8wMDMiIGFyZSBwYXJzZWQsIHVzaW5nIHRoZQorICogc2FtZSBwYXR0ZXJuLCBhcyBKYW4gMiwgMyBBRC4gIExpa2V3aXNlLCAiMDEvMDIvLTMiIGlzIHBhcnNlZCBhcyBKYW4gMiwgNCBCQy4KKyAqCisgKiA8cD4KKyAqIElmIHRoZSB5ZWFyIHBhdHRlcm4gZG9lcyBub3QgaGF2ZSBleGFjdGx5IHR3byAneScgY2hhcmFjdGVycywgdGhlIHllYXIgaXMKKyAqIGludGVycHJldGVkIGxpdGVyYWxseSwgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIGRpZ2l0cy4gIFNvIHVzaW5nIHRoZQorICogcGF0dGVybiAiTU0vZGQveXl5eSIsICIwMS8xMS8xMiIgcGFyc2VzIHRvIEphbiAxMSwgMTIgQS5ELgorICoKKyAqIDxwPgorICogRm9yIHRpbWUgem9uZXMgdGhhdCBoYXZlIG5vIG5hbWVzLCB1c2Ugc3RyaW5ncyBHTVQraG91cnM6bWludXRlcyBvcgorICogR01ULWhvdXJzOm1pbnV0ZXMuCisgKgorICogPHA+CisgKiBUaGUgY2FsZW5kYXIgZGVmaW5lcyB3aGF0IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIHRoZSBmaXJzdCB3ZWVrCisgKiBvZiB0aGUgeWVhciwgd2hldGhlciBob3VycyBhcmUgemVybyBiYXNlZCBvciBub3QgKDAgdnMgMTIgb3IgMjQpLCBhbmQgdGhlCisgKiB0aW1lIHpvbmUuIFRoZXJlIGlzIG9uZSBjb21tb24gZGVjaW1hbCBmb3JtYXQgdG8gaGFuZGxlIGFsbCB0aGUgbnVtYmVyczsKKyAqIHRoZSBkaWdpdCBjb3VudCBpcyBoYW5kbGVkIHByb2dyYW1tYXRpY2FsbHkgYWNjb3JkaW5nIHRvIHRoZSBwYXR0ZXJuLgorICoKKyAqIDxoND5TeW5jaHJvbml6YXRpb248L2g0PgorICoKKyAqIERhdGUgZm9ybWF0cyBhcmUgbm90IHN5bmNocm9uaXplZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gY3JlYXRlIHNlcGFyYXRlIAorICogZm9ybWF0IGluc3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuIElmIG11bHRpcGxlIHRocmVhZHMgYWNjZXNzIGEgZm9ybWF0IAorICogY29uY3VycmVudGx5LCBpdCBtdXN0IGJlIHN5bmNocm9uaXplZCBleHRlcm5hbGx5LiAKKyAqCisgKiBAc2VlICAgICAgICAgIGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXIKKyAqIEBzZWUgICAgICAgICAgY29tLmlibS5pY3UudXRpbC5HcmVnb3JpYW5DYWxlbmRhcgorICogQHNlZSAgICAgICAgICBjb20uaWJtLmljdS51dGlsLlRpbWVab25lCisgKiBAc2VlICAgICAgICAgIERhdGVGb3JtYXQKKyAqIEBzZWUgICAgICAgICAgRGF0ZUZvcm1hdFN5bWJvbHMKKyAqIEBzZWUgICAgICAgICAgRGVjaW1hbEZvcm1hdAorICogQGF1dGhvciAgICAgICBNYXJrIERhdmlzLCBDaGVuLUxpZWggSHVhbmcsIEFsYW4gTGl1CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZURhdGVGb3JtYXQgZXh0ZW5kcyBEYXRlRm9ybWF0IHsKKworICAgIC8vIHRoZSBvZmZpY2lhbCBzZXJpYWwgdmVyc2lvbiBJRCB3aGljaCBzYXlzIGNyeXB0aWNhbGx5CisgICAgLy8gd2hpY2ggdmVyc2lvbiB3ZSdyZSBjb21wYXRpYmxlIHdpdGgKKyAgICBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNDc3NDg4MTk3MDU1ODg3NTAyNEw7CisKKyAgICAvLyB0aGUgaW50ZXJuYWwgc2VyaWFsIHZlcnNpb24gd2hpY2ggc2F5cyB3aGljaCB2ZXJzaW9uIHdhcyB3cml0dGVuCisgICAgLy8gLSAwIChkZWZhdWx0KSBmb3IgdmVyc2lvbiB1cCB0byBKREsgMS4xLjMKKyAgICAvLyAtIDEgZm9yIHZlcnNpb24gZnJvbSBKREsgMS4xLjQsIHdoaWNoIGluY2x1ZGVzIGEgbmV3IGZpZWxkCisgICAgc3RhdGljIGZpbmFsIGludCBjdXJyZW50U2VyaWFsVmVyc2lvbiA9IDE7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgc2VyaWFsaXplZCBkYXRhIG9uIHRoZSBzdHJlYW0uICBQb3NzaWJsZSB2YWx1ZXM6CisgICAgICogPHVsPgorICAgICAqIDxsaT48Yj4wPC9iPiBvciBub3QgcHJlc2VudCBvbiBzdHJlYW06IEpESyAxLjEuMy4gIFRoaXMgdmVyc2lvbgorICAgICAqIGhhcyBubyA8Y29kZT5kZWZhdWx0Q2VudHVyeVN0YXJ0PC9jb2RlPiBvbiBzdHJlYW0uCisgICAgICogPGxpPjxiPjE8L2I+IEpESyAxLjEuNCBvciBsYXRlci4gIFRoaXMgdmVyc2lvbiBhZGRzCisgICAgICogPGNvZGU+ZGVmYXVsdENlbnR1cnlTdGFydDwvY29kZT4uCisgICAgICogPC91bD4KKyAgICAgKiBXaGVuIHN0cmVhbWluZyBvdXQgdGhpcyBjbGFzcywgdGhlIG1vc3QgcmVjZW50IGZvcm1hdAorICAgICAqIGFuZCB0aGUgaGlnaGVzdCBhbGxvd2FibGUgPGNvZGU+c2VyaWFsVmVyc2lvbk9uU3RyZWFtPC9jb2RlPgorICAgICAqIGlzIHdyaXR0ZW4uCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IHNlcmlhbFZlcnNpb25PblN0cmVhbSA9IGN1cnJlbnRTZXJpYWxWZXJzaW9uOworCisgICAgLyoqCisgICAgICogVGhlIHBhdHRlcm4gc3RyaW5nIG9mIHRoaXMgZm9ybWF0dGVyLiAgVGhpcyBpcyBhbHdheXMgYSBub24tbG9jYWxpemVkCisgICAgICogcGF0dGVybi4gIE1heSBub3QgYmUgbnVsbC4gIFNlZSBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBwYXR0ZXJuOworCisgICAgLyoqCisgICAgICogVGhlIHN5bWJvbHMgdXNlZCBieSB0aGlzIGZvcm1hdHRlciBmb3Igd2VlayBuYW1lcywgbW9udGggbmFtZXMsCisgICAgICogZXRjLiAgTWF5IG5vdCBiZSBudWxsLgorICAgICAqIEBzZXJpYWwKKyAgICAgKiBAc2VlIERhdGVGb3JtYXRTeW1ib2xzCisgICAgICovCisgICAgcHJpdmF0ZSBEYXRlRm9ybWF0U3ltYm9scyBmb3JtYXREYXRhOworCisgICAgLyoqCisgICAgICogV2UgbWFwIGRhdGVzIHdpdGggdHdvLWRpZ2l0IHllYXJzIGludG8gdGhlIGNlbnR1cnkgc3RhcnRpbmcgYXQKKyAgICAgKiA8Y29kZT5kZWZhdWx0Q2VudHVyeVN0YXJ0PC9jb2RlPiwgd2hpY2ggbWF5IGJlIGFueSBkYXRlLiAgTWF5CisgICAgICogbm90IGJlIG51bGwuCisgICAgICogQHNlcmlhbAorICAgICAqIEBzaW5jZSBKREsxLjEuNAorICAgICAqLworICAgIHByaXZhdGUgRGF0ZSBkZWZhdWx0Q2VudHVyeVN0YXJ0OworCisgICAgdHJhbnNpZW50IHByaXZhdGUgaW50IGRlZmF1bHRDZW50dXJ5U3RhcnRZZWFyOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IG1pbGxpc1BlckhvdXIgPSA2MCAqIDYwICogMTAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgbWlsbGlzUGVyTWludXRlID0gNjAgKiAxMDAwOworCisgICAgLy8gRm9yIHRpbWUgem9uZXMgdGhhdCBoYXZlIG5vIG5hbWVzLCB1c2Ugc3RyaW5ncyBHTVQrbWludXRlcyBhbmQKKyAgICAvLyBHTVQtbWludXRlcy4gRm9yIGluc3RhbmNlLCBpbiBGcmFuY2UgdGhlIHRpbWUgem9uZSBpcyBHTVQrNjAuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdNVF9QTFVTID0gIkdNVCsiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHTVRfTUlOVVMgPSAiR01ULSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdNVCA9ICJHTVQiOworCisgICAgLyoqCisgICAgICogQ2FjaGUgdG8gaG9sZCB0aGUgRGF0ZVRpbWVQYXR0ZXJucyBvZiBhIExvY2FsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgY2FjaGVkTG9jYWxlRGF0YSA9IG5ldyBIYXNodGFibGUoMyk7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBTaW1wbGVEYXRlRm9ybWF0IHVzaW5nIHRoZSBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoZSBkZWZhdWx0CisgICAgICogbG9jYWxlLiAgPGI+Tm90ZTo8L2I+IE5vdCBhbGwgbG9jYWxlcyBzdXBwb3J0IFNpbXBsZURhdGVGb3JtYXQ7IGZvciBmdWxsCisgICAgICogZ2VuZXJhbGl0eSwgdXNlIHRoZSBmYWN0b3J5IG1ldGhvZHMgaW4gdGhlIERhdGVGb3JtYXQgY2xhc3MuCisgICAgICoKKyAgICAgKiBAc2VlIERhdGVGb3JtYXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlRGF0ZUZvcm1hdCgpIHsKKyAgICAgICAgdGhpcyhTSE9SVCwgU0hPUlQsIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIFNpbXBsZURhdGVGb3JtYXQgdXNpbmcgdGhlIGdpdmVuIHBhdHRlcm4gaW4gdGhlIGRlZmF1bHQKKyAgICAgKiBsb2NhbGUuICA8Yj5Ob3RlOjwvYj4gTm90IGFsbCBsb2NhbGVzIHN1cHBvcnQgU2ltcGxlRGF0ZUZvcm1hdDsgZm9yIGZ1bGwKKyAgICAgKiBnZW5lcmFsaXR5LCB1c2UgdGhlIGZhY3RvcnkgbWV0aG9kcyBpbiB0aGUgRGF0ZUZvcm1hdCBjbGFzcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlRGF0ZUZvcm1hdChTdHJpbmcgcGF0dGVybikKKyAgICB7CisgICAgICAgIHRoaXMocGF0dGVybiwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgU2ltcGxlRGF0ZUZvcm1hdCB1c2luZyB0aGUgZ2l2ZW4gcGF0dGVybiBhbmQgbG9jYWxlLgorICAgICAqIDxiPk5vdGU6PC9iPiBOb3QgYWxsIGxvY2FsZXMgc3VwcG9ydCBTaW1wbGVEYXRlRm9ybWF0OyBmb3IgZnVsbAorICAgICAqIGdlbmVyYWxpdHksIHVzZSB0aGUgZmFjdG9yeSBtZXRob2RzIGluIHRoZSBEYXRlRm9ybWF0IGNsYXNzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTaW1wbGVEYXRlRm9ybWF0KFN0cmluZyBwYXR0ZXJuLCBMb2NhbGUgbG9jKQorICAgIHsKKyAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjsKKyAgICAgICAgdGhpcy5mb3JtYXREYXRhID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKGxvYyk7CisgICAgICAgIGluaXRpYWxpemUobG9jKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBTaW1wbGVEYXRlRm9ybWF0IHVzaW5nIHRoZSBnaXZlbiBwYXR0ZXJuIGFuZAorICAgICAqIGxvY2FsZS1zcGVjaWZpYyBzeW1ib2wgZGF0YS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlRGF0ZUZvcm1hdChTdHJpbmcgcGF0dGVybiwgRGF0ZUZvcm1hdFN5bWJvbHMgZm9ybWF0RGF0YSkKKyAgICB7CisgICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47CisgICAgICAgIHRoaXMuZm9ybWF0RGF0YSA9IChEYXRlRm9ybWF0U3ltYm9scykgZm9ybWF0RGF0YS5jbG9uZSgpOworICAgICAgICBpbml0aWFsaXplKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qIFBhY2thZ2UtcHJpdmF0ZSwgY2FsbGVkIGJ5IERhdGVGb3JtYXQgZmFjdG9yeSBtZXRob2RzICovCisgICAgU2ltcGxlRGF0ZUZvcm1hdChpbnQgdGltZVN0eWxlLCBpbnQgZGF0ZVN0eWxlLCBMb2NhbGUgbG9jKSB7CisgICAgICAgIC8qIHRyeSB0aGUgY2FjaGUgZmlyc3QgKi8KKyAgICAgICAgU3RyaW5nW10gZGF0ZVRpbWVQYXR0ZXJucyA9IChTdHJpbmdbXSkgY2FjaGVkTG9jYWxlRGF0YS5nZXQobG9jKTsKKyAgICAgICAgaWYgKGRhdGVUaW1lUGF0dGVybnMgPT0gbnVsbCkgeyAvKiBjYWNoZSBtaXNzICovCisgICAgICAgICAgICBSZXNvdXJjZUJ1bmRsZSByID0gSUNVTG9jYWxlRGF0YS5nZXRMb2NhbGVFbGVtZW50cyhsb2MpOworICAgICAgICAgICAgZGF0ZVRpbWVQYXR0ZXJucyA9IHIuZ2V0U3RyaW5nQXJyYXkoIkRhdGVUaW1lUGF0dGVybnMiKTsKKyAgICAgICAgICAgIC8qIHVwZGF0ZSBjYWNoZSAqLworICAgICAgICAgICAgY2FjaGVkTG9jYWxlRGF0YS5wdXQobG9jLCBkYXRlVGltZVBhdHRlcm5zKTsKKyAgICAgICAgfQorICAgICAgICBmb3JtYXREYXRhID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKGxvYyk7CisgICAgICAgIGlmICgodGltZVN0eWxlID49IDApICYmIChkYXRlU3R5bGUgPj0gMCkpIHsKKyAgICAgICAgICAgIE9iamVjdFtdIGRhdGVUaW1lQXJncyA9IHtkYXRlVGltZVBhdHRlcm5zW3RpbWVTdHlsZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZVRpbWVQYXR0ZXJuc1tkYXRlU3R5bGUgKyA0XX07CisgICAgICAgICAgICBwYXR0ZXJuID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZGF0ZVRpbWVQYXR0ZXJuc1s4XSwgZGF0ZVRpbWVBcmdzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aW1lU3R5bGUgPj0gMCkgeworICAgICAgICAgICAgcGF0dGVybiA9IGRhdGVUaW1lUGF0dGVybnNbdGltZVN0eWxlXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkYXRlU3R5bGUgPj0gMCkgeworICAgICAgICAgICAgcGF0dGVybiA9IGRhdGVUaW1lUGF0dGVybnNbZGF0ZVN0eWxlICsgNF07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJObyBkYXRlIG9yIHRpbWUgc3R5bGUgc3BlY2lmaWVkIik7CisgICAgICAgIH0KKworICAgICAgICBpbml0aWFsaXplKGxvYyk7CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBjYWxlbmRhciBhbmQgbnVtYmVyRm9ybWF0IGZpZWxkcyAqLworICAgIHByaXZhdGUgdm9pZCBpbml0aWFsaXplKExvY2FsZSBsb2MpIHsKKyAgICAgICAgLy8gVGhlIGZvcm1hdCBvYmplY3QgbXVzdCBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgc3ltYm9scyBmb3IgdGhpcyB6b25lLgorICAgICAgICAvLyBIb3dldmVyLCB0aGUgY2FsZW5kYXIgc2hvdWxkIHVzZSB0aGUgY3VycmVudCBkZWZhdWx0IFRpbWVab25lLgorICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBjb250YWluZWQgaW4gdGhlIGxvY2FsZSB6b25lIHN0cmluZ3MsIHRoZW4gdGhlIHpvbmUKKyAgICAgICAgLy8gd2lsbCBiZSBmb3JtYXR0ZWQgdXNpbmcgZ2VuZXJpYyBHTVQrLy1IOk1NIG5vbWVuY2xhdHVyZS4KKyAgICAgICAgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShUaW1lWm9uZS5nZXREZWZhdWx0KCksIGxvYyk7CisgICAgICAgIG51bWJlckZvcm1hdCA9IE51bWJlckZvcm1hdC5nZXRJbnN0YW5jZShsb2MpOworICAgICAgICBudW1iZXJGb3JtYXQuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKKyAgICAgICAgaWYgKG51bWJlckZvcm1hdCBpbnN0YW5jZW9mIERlY2ltYWxGb3JtYXQpCisgICAgICAgICAgICAoKERlY2ltYWxGb3JtYXQpbnVtYmVyRm9ybWF0KS5zZXREZWNpbWFsU2VwYXJhdG9yQWx3YXlzU2hvd24oZmFsc2UpOworICAgICAgICBudW1iZXJGb3JtYXQuc2V0UGFyc2VJbnRlZ2VyT25seSh0cnVlKTsgLyogU28gdGhhdCBkZC5NTS55eSBjYW4gYmUgcGFyc2VkICovCisgICAgICAgIG51bWJlckZvcm1hdC5zZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoMCk7IC8vIFRvIHByZXZlbnQgIkphbiAxLjAwLCAxOTk3LjAwIgorCisgICAgICAgIGluaXRpYWxpemVEZWZhdWx0Q2VudHVyeSgpOworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgdGhlIGZpZWxkcyB3ZSB1c2UgdG8gZGlzYW1iaWd1YXRlIGFtYmlndW91cyB5ZWFycy4gU2VwYXJhdGUKKyAgICAgKiBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIHJlYWRPYmplY3QoKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRDZW50dXJ5KCkgeworICAgICAgICBjYWxlbmRhci5zZXRUaW1lKCBuZXcgRGF0ZSgpICk7CisgICAgICAgIGNhbGVuZGFyLmFkZCggQ2FsZW5kYXIuWUVBUiwgLTgwICk7CisgICAgICAgIHBhcnNlQW1iaWd1b3VzRGF0ZXNBc0FmdGVyKGNhbGVuZGFyLmdldFRpbWUoKSk7CisgICAgfQorCisgICAgLyogRGVmaW5lIG9uZS1jZW50dXJ5IHdpbmRvdyBpbnRvIHdoaWNoIHRvIGRpc2FtYmlndWF0ZSBkYXRlcyB1c2luZworICAgICAqIHR3by1kaWdpdCB5ZWFycy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcGFyc2VBbWJpZ3VvdXNEYXRlc0FzQWZ0ZXIoRGF0ZSBzdGFydERhdGUpIHsKKyAgICAgICAgZGVmYXVsdENlbnR1cnlTdGFydCA9IHN0YXJ0RGF0ZTsKKyAgICAgICAgY2FsZW5kYXIuc2V0VGltZShzdGFydERhdGUpOworICAgICAgICBkZWZhdWx0Q2VudHVyeVN0YXJ0WWVhciA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5ZRUFSKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSAxMDAteWVhciBwZXJpb2QgMi1kaWdpdCB5ZWFycyB3aWxsIGJlIGludGVycHJldGVkIGFzIGJlaW5nIGluCisgICAgICogdG8gYmVnaW4gb24gdGhlIGRhdGUgdGhlIHVzZXIgc3BlY2lmaWVzLgorICAgICAqIEBwYXJhbSBzdGFydERhdGUgRHVyaW5nIHBhcnNpbmcsIHR3byBkaWdpdCB5ZWFycyB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgcmFuZ2UKKyAgICAgKiA8Y29kZT5zdGFydERhdGU8L2NvZGU+IHRvIDxjb2RlPnN0YXJ0RGF0ZSArIDEwMCB5ZWFyczwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0MkRpZ2l0WWVhclN0YXJ0KERhdGUgc3RhcnREYXRlKSB7CisgICAgICAgIHBhcnNlQW1iaWd1b3VzRGF0ZXNBc0FmdGVyKHN0YXJ0RGF0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYmVnaW5uaW5nIGRhdGUgb2YgdGhlIDEwMC15ZWFyIHBlcmlvZCAyLWRpZ2l0IHllYXJzIGFyZSBpbnRlcnByZXRlZAorICAgICAqIGFzIGJlaW5nIHdpdGhpbi4KKyAgICAgKiBAcmV0dXJuIHRoZSBzdGFydCBvZiB0aGUgMTAwLXllYXIgcGVyaW9kIGludG8gd2hpY2ggdHdvIGRpZ2l0IHllYXJzIGFyZQorICAgICAqIHBhcnNlZAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBEYXRlIGdldDJEaWdpdFllYXJTdGFydCgpIHsKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRDZW50dXJ5U3RhcnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIERhdGVGb3JtYXQuCisgICAgICogPHA+Rm9ybWF0cyBhIGRhdGUgb3IgdGltZSwgd2hpY2ggaXMgdGhlIHN0YW5kYXJkIG1pbGxpcworICAgICAqIHNpbmNlIEphbnVhcnkgMSwgMTk3MCwgMDA6MDA6MDAgR01ULgorICAgICAqIDxwPkV4YW1wbGU6IHVzaW5nIHRoZSBVUyBsb2NhbGU6CisgICAgICogInl5eXkuTU0uZGQgRyAnYXQnIEhIOm1tOnNzIHp6eiIgLT4+IDE5OTYuMDcuMTAgQUQgYXQgMTU6MDg6NTYgUERUCisgICAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGUtdGltZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWQgaW50byBhIGRhdGUtdGltZSBzdHJpbmcuCisgICAgICogQHBhcmFtIHRvQXBwZW5kVG8gd2hlcmUgdGhlIG5ldyBkYXRlLXRpbWUgdGV4dCBpcyB0byBiZSBhcHBlbmRlZC4KKyAgICAgKiBAcGFyYW0gcG9zIHRoZSBmb3JtYXR0aW5nIHBvc2l0aW9uLiBPbiBpbnB1dDogYW4gYWxpZ25tZW50IGZpZWxkLAorICAgICAqIGlmIGRlc2lyZWQuIE9uIG91dHB1dDogdGhlIG9mZnNldHMgb2YgdGhlIGFsaWdubWVudCBmaWVsZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZS10aW1lIHN0cmluZy4KKyAgICAgKiBAc2VlIERhdGVGb3JtYXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nQnVmZmVyIGZvcm1hdChDYWxlbmRhciBjYWwsIFN0cmluZ0J1ZmZlciB0b0FwcGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZQorICAgICAgICBwb3Muc2V0QmVnaW5JbmRleCgwKTsKKyAgICAgICAgcG9zLnNldEVuZEluZGV4KDApOworCisgICAgICAgIGJvb2xlYW4gaW5RdW90ZSA9IGZhbHNlOyAvLyB0cnVlIHdoZW4gYmV0d2VlbiBzaW5nbGUgcXVvdGVzCisgICAgICAgIGNoYXIgcHJldkNoID0gMDsgLy8gcHJldmlvdXMgcGF0dGVybiBjaGFyYWN0ZXIKKyAgICAgICAgaW50IGNvdW50ID0gMDsgIC8vIG51bWJlciBvZiB0aW1lIHByZXZDaCByZXBlYXRlZAorICAgICAgICBmb3IgKGludCBpPTA7IGk8cGF0dGVybi5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGNoID0gcGF0dGVybi5jaGFyQXQoaSk7CisgICAgICAgICAgICAvLyBVc2Ugc3ViRm9ybWF0KCkgdG8gZm9ybWF0IGEgcmVwZWF0ZWQgcGF0dGVybiBjaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gYSBkaWZmZXJlbnQgcGF0dGVybiBvciBub24tcGF0dGVybiBjaGFyYWN0ZXIgaXMgc2VlbgorICAgICAgICAgICAgaWYgKGNoICE9IHByZXZDaCAmJiBjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICB0b0FwcGVuZFRvLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1hdChwcmV2Q2gsIGNvdW50LCB0b0FwcGVuZFRvLmxlbmd0aCgpLCBwb3MsIGZvcm1hdERhdGEsIGNhbCkpOworICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaCA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgLy8gQ29uc2VjdXRpdmUgc2luZ2xlIHF1b3RlcyBhcmUgYSBzaW5nbGUgcXVvdGUgbGl0ZXJhbCwKKyAgICAgICAgICAgICAgICAvLyBlaXRoZXIgb3V0c2lkZSBvZiBxdW90ZXMgb3IgYmV0d2VlbiBxdW90ZXMKKyAgICAgICAgICAgICAgICBpZiAoKGkrMSk8cGF0dGVybi5sZW5ndGgoKSAmJiBwYXR0ZXJuLmNoYXJBdChpKzEpID09ICdcJycpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9BcHBlbmRUby5hcHBlbmQoJ1wnJyk7CisgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpblF1b3RlID0gIWluUXVvdGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICghaW5RdW90ZQorICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JyB8fCBjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSkgeworICAgICAgICAgICAgICAgIC8vIGNoIGlzIGEgZGF0ZS10aW1lIHBhdHRlcm4gY2hhcmFjdGVyIHRvIGJlIGludGVycHJldGVkCisgICAgICAgICAgICAgICAgLy8gYnkgc3ViRm9ybWF0KCk7IGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgaXQgaXMgcmVwZWF0ZWQKKyAgICAgICAgICAgICAgICBwcmV2Q2ggPSBjaDsKKyAgICAgICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHF1b3RlZCBjaGFyYWN0ZXJzIGFuZCB1bnF1b3RlZCBub24tcGF0dGVybiBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgdG9BcHBlbmRUby5hcHBlbmQoY2gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEZvcm1hdCB0aGUgbGFzdCBpdGVtIGluIHRoZSBwYXR0ZXJuLCBpZiBhbnkKKyAgICAgICAgaWYgKGNvdW50ID4gMCkgeworICAgICAgICAgICAgdG9BcHBlbmRUby5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1hdChwcmV2Q2gsIGNvdW50LCB0b0FwcGVuZFRvLmxlbmd0aCgpLCBwb3MsIGZvcm1hdERhdGEsIGNhbCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0FwcGVuZFRvOworICAgIH0KKworICAgIC8vIE1hcCBpbmRleCBpbnRvIHBhdHRlcm4gY2hhcmFjdGVyIHN0cmluZyB0byBDYWxlbmRhciBmaWVsZCBudW1iZXIKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBQQVRURVJOX0lOREVYX1RPX0NBTEVOREFSX0ZJRUxEID0KKyAgICB7CisgICAgICAgIENhbGVuZGFyLkVSQSwgQ2FsZW5kYXIuWUVBUiwgQ2FsZW5kYXIuTU9OVEgsIENhbGVuZGFyLkRBVEUsCisgICAgICAgIENhbGVuZGFyLkhPVVJfT0ZfREFZLCBDYWxlbmRhci5IT1VSX09GX0RBWSwgQ2FsZW5kYXIuTUlOVVRFLAorICAgICAgICBDYWxlbmRhci5TRUNPTkQsIENhbGVuZGFyLk1JTExJU0VDT05ELCBDYWxlbmRhci5EQVlfT0ZfV0VFSywKKyAgICAgICAgQ2FsZW5kYXIuREFZX09GX1lFQVIsIENhbGVuZGFyLkRBWV9PRl9XRUVLX0lOX01PTlRILAorICAgICAgICBDYWxlbmRhci5XRUVLX09GX1lFQVIsIENhbGVuZGFyLldFRUtfT0ZfTU9OVEgsCisgICAgICAgIENhbGVuZGFyLkFNX1BNLCBDYWxlbmRhci5IT1VSLCBDYWxlbmRhci5IT1VSLCBDYWxlbmRhci5aT05FX09GRlNFVAorICAgIH07CisKKyAgICAvLyBNYXAgaW5kZXggaW50byBwYXR0ZXJuIGNoYXJhY3RlciBzdHJpbmcgdG8gRGF0ZUZvcm1hdCBmaWVsZCBudW1iZXIKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBQQVRURVJOX0lOREVYX1RPX0RBVEVfRk9STUFUX0ZJRUxEID0geworICAgICAgICBEYXRlRm9ybWF0LkVSQV9GSUVMRCwgRGF0ZUZvcm1hdC5ZRUFSX0ZJRUxELCBEYXRlRm9ybWF0Lk1PTlRIX0ZJRUxELAorICAgICAgICBEYXRlRm9ybWF0LkRBVEVfRklFTEQsIERhdGVGb3JtYXQuSE9VUl9PRl9EQVkxX0ZJRUxELAorICAgICAgICBEYXRlRm9ybWF0LkhPVVJfT0ZfREFZMF9GSUVMRCwgRGF0ZUZvcm1hdC5NSU5VVEVfRklFTEQsCisgICAgICAgIERhdGVGb3JtYXQuU0VDT05EX0ZJRUxELCBEYXRlRm9ybWF0Lk1JTExJU0VDT05EX0ZJRUxELAorICAgICAgICBEYXRlRm9ybWF0LkRBWV9PRl9XRUVLX0ZJRUxELCBEYXRlRm9ybWF0LkRBWV9PRl9ZRUFSX0ZJRUxELAorICAgICAgICBEYXRlRm9ybWF0LkRBWV9PRl9XRUVLX0lOX01PTlRIX0ZJRUxELCBEYXRlRm9ybWF0LldFRUtfT0ZfWUVBUl9GSUVMRCwKKyAgICAgICAgRGF0ZUZvcm1hdC5XRUVLX09GX01PTlRIX0ZJRUxELCBEYXRlRm9ybWF0LkFNX1BNX0ZJRUxELAorICAgICAgICBEYXRlRm9ybWF0LkhPVVIxX0ZJRUxELCBEYXRlRm9ybWF0LkhPVVIwX0ZJRUxELAorICAgICAgICBEYXRlRm9ybWF0LlRJTUVaT05FX0ZJRUxELAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXQgYSBzaW5nbGUgZmllbGQsIGdpdmVuIGl0cyBwYXR0ZXJuIGNoYXJhY3Rlci4gIFN1YmNsYXNzZXMgbWF5CisgICAgICogb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gb3JkZXIgdG8gbW9kaWZ5IG9yIGFkZCBmb3JtYXR0aW5nCisgICAgICogY2FwYWJpbGl0aWVzLgorICAgICAqIEBwYXJhbSBjaCB0aGUgcGF0dGVybiBjaGFyYWN0ZXIKKyAgICAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyBjaCBpcyByZXBlYXRlZCBpbiB0aGUgcGF0dGVybgorICAgICAqIEBwYXJhbSBiZWdpbk9mZnNldCB0aGUgb2Zmc2V0IG9mIHRoZSBvdXRwdXQgc3RyaW5nIGF0IHRoZSBzdGFydCBvZgorICAgICAqIHRoaXMgZmllbGQ7IHVzZWQgdG8gc2V0IHBvcyB3aGVuIGFwcHJvcHJpYXRlCisgICAgICogQHBhcmFtIHBvcyByZWNlaXZlcyB0aGUgcG9zaXRpb24gb2YgYSBmaWVsZCwgd2hlbiBhcHByb3ByaWF0ZQorICAgICAqIEBwYXJhbSBmb3JtYXREYXRhIHRoZSBzeW1ib2xzIGZvciB0aGlzIGZvcm1hdHRlcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBTdHJpbmcgc3ViRm9ybWF0KGNoYXIgY2gsIGludCBjb3VudCwgaW50IGJlZ2luT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24gcG9zLCBEYXRlRm9ybWF0U3ltYm9scyBmb3JtYXREYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyIGNhbCkKKyAgICAgICAgIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGludCAgICAgcGF0dGVybkNoYXJJbmRleCA9IC0xOworICAgICAgICBpbnQgICAgIG1heEludENvdW50ID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgICAgIFN0cmluZyAgY3VycmVudCA9ICIiOworCisgICAgICAgIC8vIFRFTVBPUkFSWSBIQUNLIFRPRE8gZml4IHRoaXMKKyAgICAgICAgaWYgKGNoID09ICd1JykgeyAvLyAndScgLSBFWFRFTkRFRF9ZRUFSCisgICAgICAgICAgICByZXR1cm4gemVyb1BhZGRpbmdOdW1iZXIoY2FsLmdldChDYWxlbmRhci5FWFRFTkRFRF9ZRUFSKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBtYXhJbnRDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHBhdHRlcm5DaGFySW5kZXg9Zm9ybWF0RGF0YS5wYXR0ZXJuQ2hhcnMuaW5kZXhPZihjaCkpID09IC0xKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBwYXR0ZXJuIGNoYXJhY3RlciAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiciICsgY2ggKyAiJyIpOworCisgICAgICAgIGludCBmaWVsZCA9IFBBVFRFUk5fSU5ERVhfVE9fQ0FMRU5EQVJfRklFTERbcGF0dGVybkNoYXJJbmRleF07CisgICAgICAgIGludCB2YWx1ZSA9IGNhbC5nZXQoZmllbGQpOworCisgICAgICAgIHN3aXRjaCAocGF0dGVybkNoYXJJbmRleCkgeworICAgICAgICBjYXNlIDA6IC8vICdHJyAtIEVSQQorICAgICAgICAgICAgY3VycmVudCA9IGZvcm1hdERhdGEuZXJhc1t2YWx1ZV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOiAvLyAneScgLSBZRUFSCisgICAgICAgICAgICAvKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24sIGlmIHRoZSBudW1iZXIgb2YgcGF0dGVybiBsZXR0ZXJzICgneScpIGlzIDIsIAorICAgICAgICAgICAgICogdGhlIHllYXIgaXMgdHJ1bmNhdGVkIHRvIDIgZGlnaXRzOyBvdGhlcndpc2UgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBudW1iZXIuIAorICAgICAgICAgICAgICogQnV0IHRoZSBvcmlnaW5hbCBjb2RlIHByb2Nlc3MgJ3knLCAneXknLCAneXl5JyBpbiB0aGUgc2FtZSB3YXkuIGFuZCBwcm9jZXNzIAorICAgICAgICAgICAgICogcGF0dGVybnMgd2l0aCA0IG9yIG1vcmUgdGhhbiA0ICd5JyBjaGFyYWN0ZXJzIGluIHRoZSBzYW1lIHdheS4gCisgICAgICAgICAgICAgKiBTbyBJIGNoYW5nZSB0aGUgY29kZXMgdG8gbWVldCB0aGUgc3BlY2lmaWNhdGlvbi4gW1JpY2hhcmQvR0NsXQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gemVyb1BhZGRpbmdOdW1iZXIodmFsdWUsIDIsIDIpOyAvLyBjbGlwIDE5OTYgdG8gOTYKKyAgICAgICAgICAgIGVsc2UgLy9jb3VudCA9IDEgb3IgY291bnQgPiAyCisgICAgICAgICAgICAgICAgY3VycmVudCA9IHplcm9QYWRkaW5nTnVtYmVyKHZhbHVlLCBjb3VudCwgbWF4SW50Q291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogLy8gJ00nIC0gTU9OVEgKKyAgICAgICAgICAgIGlmIChjb3VudCA+PSA0KQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmb3JtYXREYXRhLm1vbnRoc1t2YWx1ZV07CisgICAgICAgICAgICBlbHNlIGlmIChjb3VudCA9PSAzKQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmb3JtYXREYXRhLnNob3J0TW9udGhzW3ZhbHVlXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gemVyb1BhZGRpbmdOdW1iZXIodmFsdWUrMSwgY291bnQsIG1heEludENvdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6IC8vICdrJyAtIEhPVVJfT0ZfREFZOiAxLWJhc2VkLiAgZWcsIDIzOjU5ICsgMSBob3VyID0+PiAyNDo1OQorICAgICAgICAgICAgaWYgKHZhbHVlID09IDApCisgICAgICAgICAgICAgICAgY3VycmVudCA9IHplcm9QYWRkaW5nTnVtYmVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0TWF4aW11bShDYWxlbmRhci5IT1VSX09GX0RBWSkrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIG1heEludENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gemVyb1BhZGRpbmdOdW1iZXIodmFsdWUsIGNvdW50LCBtYXhJbnRDb3VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA5OiAvLyAnRScgLSBEQVlfT0ZfV0VFSworICAgICAgICAgICAgaWYgKGNvdW50ID49IDQpCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGZvcm1hdERhdGEud2Vla2RheXNbdmFsdWVdOworICAgICAgICAgICAgZWxzZSAvLyBjb3VudCA8IDQsIHVzZSBhYmJyZXZpYXRlZCBmb3JtIGlmIGV4aXN0cworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmb3JtYXREYXRhLnNob3J0V2Vla2RheXNbdmFsdWVdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTQ6ICAgIC8vICdhJyAtIEFNX1BNCisgICAgICAgICAgICBjdXJyZW50ID0gZm9ybWF0RGF0YS5hbXBtc1t2YWx1ZV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNTogLy8gJ2gnIC0gSE9VUjoxLWJhc2VkLiAgZWcsIDExUE0gKyAxIGhvdXIgPT4+IDEyIEFNCisgICAgICAgICAgICBpZiAodmFsdWUgPT0gMCkKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gemVyb1BhZGRpbmdOdW1iZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXRMZWFzdE1heGltdW0oQ2FsZW5kYXIuSE9VUikrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIG1heEludENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gemVyb1BhZGRpbmdOdW1iZXIodmFsdWUsIGNvdW50LCBtYXhJbnRDb3VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNzogLy8gJ3onIC0gWk9ORV9PRkZTRVQKKyAgICAgICAgICAgIGludCB6b25lSW5kZXgKKyAgICAgICAgICAgICAgICA9IGZvcm1hdERhdGEuZ2V0Wm9uZUluZGV4IChjYWwuZ2V0VGltZVpvbmUoKS5nZXRJRCgpKTsKKyAgICAgICAgICAgIGlmICh6b25lSW5kZXggPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRm9yIHRpbWUgem9uZXMgdGhhdCBoYXZlIG5vIG5hbWVzLCB1c2Ugc3RyaW5ncworICAgICAgICAgICAgICAgIC8vIEdNVCtob3VyczptaW51dGVzIGFuZCBHTVQtaG91cnM6bWludXRlcy4KKyAgICAgICAgICAgICAgICAvLyBGb3IgaW5zdGFuY2UsIEZyYW5jZSB0aW1lIHpvbmUgdXNlcyBHTVQrMDE6MDAuCisgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHpvbmVTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbC5nZXQoQ2FsZW5kYXIuWk9ORV9PRkZTRVQpICsKKyAgICAgICAgICAgICAgICAgICAgY2FsLmdldChDYWxlbmRhci5EU1RfT0ZGU0VUKTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6b25lU3RyaW5nLmFwcGVuZChHTVRfTUlOVVMpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC12YWx1ZTsgLy8gc3VwcHJlc3MgdGhlICctJyBzaWduIGZvciB0ZXh0IGRpc3BsYXkuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgem9uZVN0cmluZy5hcHBlbmQoR01UX1BMVVMpOworICAgICAgICAgICAgICAgIHpvbmVTdHJpbmcuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm9QYWRkaW5nTnVtYmVyKChpbnQpKHZhbHVlL21pbGxpc1BlckhvdXIpLCAyLCAyKSk7CisgICAgICAgICAgICAgICAgem9uZVN0cmluZy5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgICAgICB6b25lU3RyaW5nLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvUGFkZGluZ051bWJlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgodmFsdWUlbWlsbGlzUGVySG91cikvbWlsbGlzUGVyTWludXRlKSwgMiwgMikpOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB6b25lU3RyaW5nLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjYWwuZ2V0KENhbGVuZGFyLkRTVF9PRkZTRVQpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvdW50ID49IDQpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmb3JtYXREYXRhLnpvbmVTdHJpbmdzW3pvbmVJbmRleF1bM107CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAvLyBjb3VudCA8IDQsIHVzZSBhYmJyZXZpYXRlZCBmb3JtIGlmIGV4aXN0cworICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gZm9ybWF0RGF0YS56b25lU3RyaW5nc1t6b25lSW5kZXhdWzRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSA0KQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gZm9ybWF0RGF0YS56b25lU3RyaW5nc1t6b25lSW5kZXhdWzFdOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGZvcm1hdERhdGEuem9uZVN0cmluZ3Nbem9uZUluZGV4XVsyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gY2FzZSAzOiAvLyAnZCcgLSBEQVRFCisgICAgICAgICAgICAvLyBjYXNlIDU6IC8vICdIJyAtIEhPVVJfT0ZfREFZOjAtYmFzZWQuICBlZywgMjM6NTkgKyAxIGhvdXIgPT4+IDAwOjU5CisgICAgICAgICAgICAvLyBjYXNlIDY6IC8vICdtJyAtIE1JTlVURQorICAgICAgICAgICAgLy8gY2FzZSA3OiAvLyAncycgLSBTRUNPTkQKKyAgICAgICAgICAgIC8vIGNhc2UgODogLy8gJ1MnIC0gTUlMTElTRUNPTkQKKyAgICAgICAgICAgIC8vIGNhc2UgMTA6IC8vICdEJyAtIERBWV9PRl9ZRUFSCisgICAgICAgICAgICAvLyBjYXNlIDExOiAvLyAnRicgLSBEQVlfT0ZfV0VFS19JTl9NT05USAorICAgICAgICAgICAgLy8gY2FzZSAxMjogLy8gJ3cnIC0gV0VFS19PRl9ZRUFSCisgICAgICAgICAgICAvLyBjYXNlIDEzOiAvLyAnVycgLSBXRUVLX09GX01PTlRICisgICAgICAgICAgICAvLyBjYXNlIDE2OiAvLyAnSycgLSBIT1VSOiAwLWJhc2VkLiAgZWcsIDExUE0gKyAxIGhvdXIgPT4+IDAgQU0KKyAgICAgICAgICAgIGN1cnJlbnQgPSB6ZXJvUGFkZGluZ051bWJlcih2YWx1ZSwgY291bnQsIG1heEludENvdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IC8vIHN3aXRjaCAocGF0dGVybkNoYXJJbmRleCkKKworICAgICAgICBpZiAocG9zLmdldEZpZWxkKCkgPT0gUEFUVEVSTl9JTkRFWF9UT19EQVRFX0ZPUk1BVF9GSUVMRFtwYXR0ZXJuQ2hhckluZGV4XSkgeworICAgICAgICAgICAgLy8gc2V0IGZvciB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9ubHkuCisgICAgICAgICAgICBpZiAocG9zLmdldEJlZ2luSW5kZXgoKSA9PSAwICYmIHBvcy5nZXRFbmRJbmRleCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBwb3Muc2V0QmVnaW5JbmRleChiZWdpbk9mZnNldCk7CisgICAgICAgICAgICAgICAgcG9zLnNldEVuZEluZGV4KGJlZ2luT2Zmc2V0ICsgY3VycmVudC5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXRzIGEgbnVtYmVyIHdpdGggdGhlIHNwZWNpZmllZCBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZyB6ZXJvUGFkZGluZ051bWJlcihsb25nIHZhbHVlLCBpbnQgbWluRGlnaXRzLCBpbnQgbWF4RGlnaXRzKQorICAgIHsKKyAgICAgICAgbnVtYmVyRm9ybWF0LnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKG1pbkRpZ2l0cyk7CisgICAgICAgIG51bWJlckZvcm1hdC5zZXRNYXhpbXVtSW50ZWdlckRpZ2l0cyhtYXhEaWdpdHMpOworICAgICAgICByZXR1cm4gbnVtYmVyRm9ybWF0LmZvcm1hdCh2YWx1ZSk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgRGF0ZUZvcm1hdAorICAgICAqIEBzZWUgRGF0ZUZvcm1hdAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHBhcnNlKFN0cmluZyB0ZXh0LCBDYWxlbmRhciBjYWwsIFBhcnNlUG9zaXRpb24gcG9zKQorICAgIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gcG9zLmdldEluZGV4KCk7CisgICAgICAgIGludCBvbGRTdGFydCA9IHN0YXJ0OworICAgICAgICBib29sZWFuW10gYW1iaWd1b3VzWWVhciA9IHtmYWxzZX07CisKKyAgICAgICAgYm9vbGVhbiBpblF1b3RlID0gZmFsc2U7IC8vIGluUXVvdGUgc2V0IHRydWUgd2hlbiBoaXRzIDFzdCBzaW5nbGUgcXVvdGUKKyAgICAgICAgY2hhciBwcmV2Q2ggPSAwOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBpbnQgaW50ZXJRdW90ZUNvdW50ID0gMTsgLy8gTnVtYmVyIG9mIGNoYXJzIGJldHdlZW4gcXVvdGVzCisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHBhdHRlcm4ubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBjaCA9IHBhdHRlcm4uY2hhckF0KGkpOworCisgICAgICAgICAgICBpZiAoaW5RdW90ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgd2l0aCAybmQgc2luZ2xlIHF1b3RlCisgICAgICAgICAgICAgICAgICAgIGluUXVvdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gdHdvIGNvbnNlY3V0aXZlIHF1b3RlcyBvdXRzaWRlIGEgcXVvdGUgbWVhbnMgd2UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyBhIHF1b3RlIGxpdGVyYWwgd2UgbmVlZCB0byBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSB0ZXh0Lmxlbmd0aCgpIHx8IGNoICE9IHRleHQuY2hhckF0KHN0YXJ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Muc2V0SW5kZXgob2xkU3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5zZXRFcnJvckluZGV4KHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICArK3N0YXJ0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJRdW90ZUNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcGF0dGVybiB1c2VzIHRleHQgZm9sbG93aW5nIGZyb20gMXN0IHNpbmdsZSBxdW90ZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IHRleHQubGVuZ3RoKCkgfHwgY2ggIT0gdGV4dC5jaGFyQXQoc3RhcnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgY2FzZXMgbGlrZTogJ2F0JyBpbiBwYXR0ZXJuIHZzICJ4dCIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRpbWUgdGV4dCwgd2hlcmUgJ2EnIGRvZXNuJ3QgbWF0Y2ggd2l0aCAneCcuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBmYWlsIHRvIG1hdGNoLCByZXR1cm4uCisgICAgICAgICAgICAgICAgICAgICAgICBwb3Muc2V0SW5kZXgob2xkU3RhcnQpOyAvLyBsZWZ0IHVuY2hhbmdlZAorICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnNldEVycm9ySW5kZXgoc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAgICAgICsrc3RhcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAgICAvLyAhaW5RdW90ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnXCcnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5RdW90ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIC8vIGhhbmRsZSBjYXNlcyBsaWtlOiBlJ2F0JworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXN1YlBhcnNlKHRleHQsIHN0YXJ0LCBwcmV2Q2gsIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGFtYmlndW91c1llYXIsIGNhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXJ0PDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnNldEVycm9ySW5kZXgoc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5zZXRJbmRleChvbGRTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyUXVvdGVDb3VudCA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGluZGljYXRlcyB0d28gY29uc2VjdXRpdmUgcXVvdGVzIGluc2lkZSBhIHF1b3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGV4YW1wbGUsICdvJydjbG9jaycuICBXZSBuZWVkIHRvIHBhcnNlIHRoaXMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcHJlc2VudGluZyBhIHNpbmdsZSBxdW90ZSB3aXRoaW4gdGhlIHF1b3RlLgorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gdGV4dC5sZW5ndGgoKSB8fCAgY2ggIT0gdGV4dC5jaGFyQXQoc3RhcnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5zZXRFcnJvckluZGV4KHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Muc2V0SW5kZXgob2xkU3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsrc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDE7IC8vIE1ha2UgaXQgbG9vayBsaWtlIHdlIG5ldmVyIGxlZnQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onIHx8IGNoID49ICdBJyAmJiBjaCA8PSAnWicpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBjaCBpcyBhIGRhdGUtdGltZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgIGlmIChjaCAhPSBwcmV2Q2ggJiYgY291bnQgPiAwKSAvLyBlLmcuLCB5eXl5TU1kZAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBwYXNzIGluICd0cnVlJyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iZXlDb3VudC4gIFRoYXQncyBiZWNhdXNlIHRoZSBuZXh0IGZpZWxkIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhYnV0cyB0aGlzIG9uZSwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIGNvdW50IHRvIGtub3cgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc3RvcCBwYXJzaW5nLiBbTElVXQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzdWJQYXJzZSh0ZXh0LCBzdGFydCwgcHJldkNoLCBjb3VudCwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1iaWd1b3VzWWVhciwgY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Muc2V0RXJyb3JJbmRleChzdGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnNldEluZGV4KG9sZFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q2ggPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCAhPSBwcmV2Q2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNoID0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjYXNlcyBsaWtlOiBNTS1kZC15eSwgSEg6bW06c3MsIG9yIHl5eXkgTU0gZGQsCisgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGNoID0gJy0nLCAnOicsIG9yICcgJywgcmVwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBzdGFydD1zdWJQYXJzZSh0ZXh0LCBzdGFydCwgcHJldkNoLCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGFtYmlndW91c1llYXIsIGNhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggc3RhcnQgPCAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnNldEVycm9ySW5kZXgoc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnNldEluZGV4KG9sZFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gdGV4dC5sZW5ndGgoKSB8fCBjaCAhPSB0ZXh0LmNoYXJBdChzdGFydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjYXNlcyBsaWtlOiAnTU1NTSBkZCcgaW4gcGF0dGVybiB2cy4gImphbngyMCIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRpbWUgdGV4dCwgd2hlcmUgJyAnIGRvZXNuJ3QgbWF0Y2ggd2l0aCAneCcuCisgICAgICAgICAgICAgICAgICAgICAgICBwb3Muc2V0RXJyb3JJbmRleChzdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3Muc2V0SW5kZXgob2xkU3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0Kys7CisgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcHJldkNoID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAvLyBhbnkgb3RoZXIgdW5xdW90ZWQgY2hhcmFjdGVycworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IHRleHQubGVuZ3RoKCkgfHwgY2ggIT0gdGV4dC5jaGFyQXQoc3RhcnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgY2FzZXMgbGlrZTogJ01NTU0gICBkZCcgaW4gcGF0dGVybiB2cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICJqYW4sLCwyMCIgaW4gdGltZSB0ZXh0LCB3aGVyZSAiICAgIiBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB3aXRoICIsLCwiLgorICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnNldEVycm9ySW5kZXgoc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnNldEluZGV4KG9sZFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdGFydCsrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICsraW50ZXJRdW90ZUNvdW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFBhcnNlIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIHBhdHRlcm4KKyAgICAgICAgaWYgKGNvdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQ7CisgICAgICAgICAgICBzdGFydD1zdWJQYXJzZSh0ZXh0LCBzdGFydCwgcHJldkNoLCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBhbWJpZ3VvdXNZZWFyLCBjYWwpOworICAgICAgICAgICAgaWYgKCBzdGFydCA8IDAgKSB7CisgICAgICAgICAgICAgICAgcG9zLnNldEluZGV4KG9sZFN0YXJ0KTsKKyAgICAgICAgICAgICAgICBwb3Muc2V0RXJyb3JJbmRleChzdGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZmllbGRzIG9mIENhbGVuZGFyIGhhdmUgYmVlbiBzZXQuICBDYWxlbmRhcgorICAgICAgICAvLyB3aWxsIGZpbGwgaW4gZGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3NpbmcgZmllbGRzIHdoZW4gdGhlIHRpbWUKKyAgICAgICAgLy8gaXMgY29tcHV0ZWQuCisKKyAgICAgICAgcG9zLnNldEluZGV4KHN0YXJ0KTsKKworICAgICAgICAvLyBUaGlzIHBhcnQgaXMgYSBwcm9ibGVtOiAgV2hlbiB3ZSBjYWxsIHBhcnNlZERhdGUuYWZ0ZXIsIHdlIGNvbXB1dGUgdGhlIHRpbWUuCisgICAgICAgIC8vIFRha2UgdGhlIGRhdGUgQXByaWwgMyAyMDA0IGF0IDI6MzAgYW0uICBXaGVuIHRoaXMgaXMgZmlyc3Qgc2V0IHVwLCB0aGUgeWVhcgorICAgICAgICAvLyB3aWxsIGJlIHdyb25nIGlmIHdlJ3JlIHBhcnNpbmcgYSAyLWRpZ2l0IHllYXIgcGF0dGVybi4gIEl0IHdpbGwgYmUgMTkwNC4KKyAgICAgICAgLy8gQXByaWwgMyAxOTA0IGlzIGEgU3VuZGF5ICh1bmxpa2UgMjAwNCkgc28gaXQgaXMgdGhlIERTVCBvbnNldCBkYXkuICAyOjMwIGFtCisgICAgICAgIC8vIGlzIHRoZXJlZm9yZSBhbiAiaW1wb3NzaWJsZSIgdGltZSwgc2luY2UgdGhlIHRpbWUgZ29lcyBmcm9tIDE6NTkgdG8gMzowMCBhbQorICAgICAgICAvLyBvbiB0aGF0IGRheS4gIEl0IGlzIHRoZXJlZm9yZSBwYXJzZWQgb3V0IHRvIGZpZWxkcyBhcyAzOjMwIGFtLiAgVGhlbiB3ZQorICAgICAgICAvLyBhZGQgMTAwIHllYXJzLCBhbmQgZ2V0IEFwcmlsIDMgMjAwNCBhdCAzOjMwIGFtLiAgTm90ZSB0aGF0IEFwcmlsIDMgMjAwNCBpcworICAgICAgICAvLyBhIFNhdHVyZGF5LCBzbyBpdCBjYW4gaGF2ZSBhIDI6MzAgYW0gLS0gYW5kIGl0IHNob3VsZC4gW0xJVV0KKyAgICAgICAgLyoKKyAgICAgICAgRGF0ZSBwYXJzZWREYXRlID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgaWYoIGFtYmlndW91c1llYXJbMF0gJiYgIXBhcnNlZERhdGUuYWZ0ZXIoZGVmYXVsdENlbnR1cnlTdGFydCkgKSB7CisgICAgICAgICAgICBjYWwuYWRkKENhbGVuZGFyLllFQVIsIDEwMCk7CisgICAgICAgICAgICBwYXJzZWREYXRlID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgfQorICAgICAgICAqLworICAgICAgICAvLyBCZWNhdXNlIG9mIHRoZSBhYm92ZSBjb25kaXRpb24sIHNhdmUgb2ZmIHRoZSBmaWVsZHMgaW4gY2FzZSB3ZSBuZWVkIHRvIHJlYWRqdXN0LgorICAgICAgICAvLyBUaGUgcHJvY2VkdXJlIHdlIHVzZSBoZXJlIGlzIG5vdCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQgdGhlcmUgaXMgbm8gb3RoZXIKKyAgICAgICAgLy8gd2F5IHRvIGRvIHRoaXMgZ2l2ZW4gdGhlIEFQSSByZXN0cmljdGlvbnMgcHJlc2VudCBpbiBDYWxlbmRhci4gIFdlIG1pbmltaXplCisgICAgICAgIC8vIGluZWZmaWNpZW5jeSBieSBvbmx5IHBlcmZvcm1pbmcgdGhpcyBjb21wdXRhdGlvbiB3aGVuIGl0IG1pZ2h0IGFwcGx5LCB0aGF0IGlzLAorICAgICAgICAvLyB3aGVuIHRoZSB0d28tZGlnaXQgeWVhciBpcyBlcXVhbCB0byB0aGUgc3RhcnQgeWVhciwgYW5kIHRodXMgbWlnaHQgZmFsbCBhdCB0aGUKKyAgICAgICAgLy8gZnJvbnQgb3IgdGhlIGJhY2sgb2YgdGhlIGRlZmF1bHQgY2VudHVyeS4gIFRoaXMgb25seSB3b3JrcyBiZWNhdXNlIHdlIGFkanVzdAorICAgICAgICAvLyB0aGUgeWVhciBjb3JyZWN0bHkgdG8gc3RhcnQgd2l0aCBpbiBvdGhlciBjYXNlcyAtLSBzZWUgc3ViUGFyc2UoKS4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChhbWJpZ3VvdXNZZWFyWzBdKSAvLyBJZiB0aGlzIGlzIHRydWUgdGhlbiB0aGUgdHdvLWRpZ2l0IHllYXIgPT0gdGhlIGRlZmF1bHQgc3RhcnQgeWVhcgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBjb3B5IG9mIHRoZSBmaWVsZHMsIGFuZCB3ZSBuZWVkIHRvIGF2b2lkIHRyaWdnZXJpbmcgYSBjYWxsIHRvCisgICAgICAgICAgICAgICAgLy8gY29tcGxldGUoKSwgd2hpY2ggd2lsbCByZWNhbGN1bGF0ZSB0aGUgZmllbGRzLiAgU2luY2Ugd2UgY2FuJ3QgYWNjZXNzCisgICAgICAgICAgICAgICAgLy8gdGhlIGZpZWxkc1tdIGFycmF5IGluIENhbGVuZGFyLCB3ZSBjbG9uZSB0aGUgZW50aXJlIG9iamVjdC4gIFRoaXMgd2lsbAorICAgICAgICAgICAgICAgIC8vIHN0b3Agd29ya2luZyBpZiBDYWxlbmRhci5jbG9uZSgpIGlzIGV2ZXIgcmV3cml0dGVuIHRvIGNhbGwgY29tcGxldGUoKS4KKyAgICAgICAgICAgICAgICBDYWxlbmRhciBjb3B5ID0gKENhbGVuZGFyKWNhbC5jbG9uZSgpOworICAgICAgICAgICAgICAgIERhdGUgcGFyc2VkRGF0ZSA9IGNvcHkuZ2V0VGltZSgpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLmJlZm9yZShkZWZhdWx0Q2VudHVyeVN0YXJ0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHVzZSBhZGQgaGVyZSBiZWNhdXNlIHRoYXQgZG9lcyBhIGNvbXBsZXRlKCkgZmlyc3QuCisgICAgICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuWUVBUiwgZGVmYXVsdENlbnR1cnlTdGFydFllYXIgKyAxMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBBbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gd2lsbCBiZSB0aHJvd24gYnkgQ2FsZW5kYXIuZ2V0VGltZSgpCisgICAgICAgIC8vIGlmIGFueSBmaWVsZHMgYXJlIG91dCBvZiByYW5nZSwgZS5nLiwgTU9OVEggPT0gMTcuCisgICAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcG9zLnNldEVycm9ySW5kZXgoc3RhcnQpOworICAgICAgICAgICAgcG9zLnNldEluZGV4KG9sZFN0YXJ0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEF0dGVtcHQgdG8gbWF0Y2ggdGhlIHRleHQgYXQgYSBnaXZlbiBwb3NpdGlvbiBhZ2FpbnN0IGFuIGFycmF5IG9mCisgICAgICogc3RyaW5ncy4gIFNpbmNlIG11bHRpcGxlIHN0cmluZ3MgaW4gdGhlIGFycmF5IG1heSBtYXRjaCAoZm9yCisgICAgICogZXhhbXBsZSwgaWYgdGhlIGFycmF5IGNvbnRhaW5zICJhIiwgImFiIiwgYW5kICJhYmMiLCBhbGwgd2lsbCBtYXRjaAorICAgICAqIHRoZSBpbnB1dCBzdHJpbmcgImFiY2QiKSB0aGUgbG9uZ2VzdCBtYXRjaCBpcyByZXR1cm5lZC4gIEFzIGEgc2lkZQorICAgICAqIGVmZmVjdCwgdGhlIGdpdmVuIGZpZWxkIG9mIDxjb2RlPmNhbDwvY29kZT4gaXMgc2V0IHRvIHRoZSBpbmRleAorICAgICAqIG9mIHRoZSBiZXN0IG1hdGNoLCBpZiB0aGVyZSBpcyBvbmUuCisgICAgICogQHBhcmFtIHRleHQgdGhlIHRpbWUgdGV4dCBiZWluZyBwYXJzZWQuCisgICAgICogQHBhcmFtIHN0YXJ0IHdoZXJlIHRvIHN0YXJ0IHBhcnNpbmcuCisgICAgICogQHBhcmFtIGZpZWxkIHRoZSBkYXRlIGZpZWxkIGJlaW5nIHBhcnNlZC4KKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUgc3RyaW5nIGFycmF5IHRvIHBhcnNlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBuZXcgc3RhcnQgcG9zaXRpb24gaWYgbWF0Y2hpbmcgc3VjY2VlZGVkOyBhIG5lZ2F0aXZlCisgICAgICogbnVtYmVyIGluZGljYXRpbmcgbWF0Y2hpbmcgZmFpbHVyZSwgb3RoZXJ3aXNlLiAgQXMgYSBzaWRlIGVmZmVjdCwKKyAgICAgKiBzZXRzIHRoZSA8Y29kZT5jYWw8L2NvZGU+IGZpZWxkIDxjb2RlPmZpZWxkPC9jb2RlPiB0byB0aGUgaW5kZXgKKyAgICAgKiBvZiB0aGUgYmVzdCBtYXRjaCwgaWYgbWF0Y2hpbmcgc3VjY2VlZGVkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgbWF0Y2hTdHJpbmcoU3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGZpZWxkLCBTdHJpbmdbXSBkYXRhLCBDYWxlbmRhciBjYWwpCisgICAgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGludCBjb3VudCA9IGRhdGEubGVuZ3RoOworCisgICAgICAgIGlmIChmaWVsZCA9PSBDYWxlbmRhci5EQVlfT0ZfV0VFSykgaSA9IDE7CisKKyAgICAgICAgLy8gVGhlcmUgbWF5IGJlIG11bHRpcGxlIHN0cmluZ3MgaW4gdGhlIGRhdGFbXSBhcnJheSB3aGljaCBiZWdpbiB3aXRoCisgICAgICAgIC8vIHRoZSBzYW1lIHByZWZpeCAoZS5nLiwgQ2VydmVuIGFuZCBDZXJ2ZW5lYyAoSnVuZSBhbmQgSnVseSkgaW4gQ3plY2gpLgorICAgICAgICAvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBsb25nZXN0IG1hdGNoLCBhbmQgcmV0dXJuIHRoYXQuICBOb3RlIHRoYXQgdGhpcworICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5IHJlcXVpcmVzIHVzIHRvIHRlc3QgYWxsIGFycmF5IGVsZW1lbnRzLgorICAgICAgICBpbnQgYmVzdE1hdGNoTGVuZ3RoID0gMCwgYmVzdE1hdGNoID0gLTE7CisgICAgICAgIGZvciAoOyBpPGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSBkYXRhW2ldLmxlbmd0aCgpOworICAgICAgICAgICAgLy8gQWx3YXlzIGNvbXBhcmUgaWYgd2UgaGF2ZSBubyBtYXRjaCB5ZXQ7IG90aGVyd2lzZSBvbmx5IGNvbXBhcmUKKyAgICAgICAgICAgIC8vIGFnYWluc3QgcG90ZW50aWFsbHkgYmV0dGVyIG1hdGNoZXMgKGxvbmdlciBzdHJpbmdzKS4KKyAgICAgICAgICAgIGlmIChsZW5ndGggPiBiZXN0TWF0Y2hMZW5ndGggJiYKKyAgICAgICAgICAgICAgICB0ZXh0LnJlZ2lvbk1hdGNoZXModHJ1ZSwgc3RhcnQsIGRhdGFbaV0sIDAsIGxlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmVzdE1hdGNoID0gaTsKKyAgICAgICAgICAgICAgICBiZXN0TWF0Y2hMZW5ndGggPSBsZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJlc3RNYXRjaCA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjYWwuc2V0KGZpZWxkLCBiZXN0TWF0Y2gpOworICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ICsgYmVzdE1hdGNoTGVuZ3RoOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtc3RhcnQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgbWF0Y2hab25lU3RyaW5nKFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQsIGludCB6b25lSW5kZXgpIHsKKyAgICBpbnQgajsKKyAgICBmb3IgKGogPSAxOyBqIDw9IDQ7ICsraikgeworICAgICAgICAvLyBDaGVja2luZyBsb25nIGFuZCBzaG9ydCB6b25lcyBbMSAmIDJdLAorICAgICAgICAvLyBhbmQgbG9uZyBhbmQgc2hvcnQgZGF5bGlnaHQgWzMgJiA0XS4KKyAgICAgICAgaWYgKHRleHQucmVnaW9uTWF0Y2hlcyh0cnVlLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICBmb3JtYXREYXRhLnpvbmVTdHJpbmdzW3pvbmVJbmRleF1bal0sIDAsCisgICAgICAgICAgICAgICAgICAgZm9ybWF0RGF0YS56b25lU3RyaW5nc1t6b25lSW5kZXhdW2pdLmxlbmd0aCgpKSkgeworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKGogPiA0KSA/IC0xIDogajsKKyAgICB9ICAgCisKKyAgICAvKioKKyAgICAgKiBmaW5kIHRpbWUgem9uZSAndGV4dCcgbWF0Y2hlZCB6b25lU3RyaW5ncyBhbmQgc2V0IGNhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IHN1YlBhcnNlWm9uZVN0cmluZyhTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBDYWxlbmRhciBjYWwpIHsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCBjaGVjayBmb3IgbmFtZWQgdGltZSB6b25lcyBieSBsb29raW5nIHRocm91Z2gKKyAgICAvLyB0aGUgbG9jYWxlIGRhdGEgZnJvbSB0aGUgRGF0ZUZvcm1hdFpvbmVEYXRhIHN0cmluZ3MuCisgICAgLy8gV2FudCB0byBiZSBhYmxlIHRvIHBhcnNlIGJvdGggc2hvcnQgYW5kIGxvbmcgZm9ybXMuCisgICAgaW50IHpvbmVJbmRleCA9IAorICAgICAgICBmb3JtYXREYXRhLmdldFpvbmVJbmRleCAoZ2V0VGltZVpvbmUoKS5nZXRJRCgpKTsKKyAgICBUaW1lWm9uZSB0eiA9IG51bGw7CisgICAgaW50IGogPSAwLCBpID0gMDsKKyAgICBpZiAoKHpvbmVJbmRleCAhPSAtMSkgJiYgKChqID0gbWF0Y2hab25lU3RyaW5nKHRleHQsIHN0YXJ0LCB6b25lSW5kZXgpKSA+IDApKSB7CisgICAgICAgIHR6ID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoZm9ybWF0RGF0YS56b25lU3RyaW5nc1t6b25lSW5kZXhdWzBdKTsKKyAgICAgICAgaSA9IHpvbmVJbmRleDsKKyAgICB9CisgICAgaWYgKHR6ID09IG51bGwpIHsKKyAgICAgICAgem9uZUluZGV4ID0gCisgICAgICAgIGZvcm1hdERhdGEuZ2V0Wm9uZUluZGV4IChUaW1lWm9uZS5nZXREZWZhdWx0KCkuZ2V0SUQoKSk7CisgICAgICAgIGlmICgoem9uZUluZGV4ICE9IC0xKSAmJiAoKGogPSBtYXRjaFpvbmVTdHJpbmcodGV4dCwgc3RhcnQsIHpvbmVJbmRleCkpID4gMCkpIHsKKyAgICAgICAgdHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZShmb3JtYXREYXRhLnpvbmVTdHJpbmdzW3pvbmVJbmRleF1bMF0pOworICAgICAgICBpID0gem9uZUluZGV4OworICAgICAgICB9CisgICAgfSAgICAgICAKKworICAgIGlmICh0eiA9PSBudWxsKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb3JtYXREYXRhLnpvbmVTdHJpbmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICgoaiA9IG1hdGNoWm9uZVN0cmluZyh0ZXh0LCBzdGFydCwgaSkpID4gMCkgeworICAgICAgICAgICAgdHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZShmb3JtYXREYXRhLnpvbmVTdHJpbmdzW2ldWzBdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHR6ICE9IG51bGwpIHsgLy8gTWF0Y2hlZCBhbnkgPworICAgICAgICBjYWwuc2V0KENhbGVuZGFyLlpPTkVfT0ZGU0VULCB0ei5nZXRSYXdPZmZzZXQoKSk7CisgICAgICAgIC8vIFRoZSBjb2RlIGJlbG93IHRpbWUgem9uZSBpcyBhc3N1bWVkIHRvIGJlIGluc3RhbmNlIG9mCisgICAgICAgIC8vIFNpbXBsZVRpbWVab25lLgorICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkRTVF9PRkZTRVQsIAorICAgICAgICAgICAgIGogPj0gMyA/ICgoU2ltcGxlVGltZVpvbmUpdHopLmdldERTVFNhdmluZ3MoKSA6IDApOworICAgICAgICByZXR1cm4gKHN0YXJ0ICsgZm9ybWF0RGF0YS56b25lU3RyaW5nc1tpXVtqXS5sZW5ndGgoKSk7CisgICAgfQorICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByb3RlY3RlZCBtZXRob2QgdGhhdCBjb252ZXJ0cyBvbmUgZmllbGQgb2YgdGhlIGlucHV0IHN0cmluZyBpbnRvIGEKKyAgICAgKiBudW1lcmljIGZpZWxkIHZhbHVlIGluIDxjb2RlPmNhbDwvY29kZT4uICBSZXR1cm5zIC1zdGFydCAoZm9yCisgICAgICogUGFyc2VQb3NpdGlvbikgaWYgZmFpbGVkLiAgU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8KKyAgICAgKiBtb2RpZnkgb3IgYWRkIHBhcnNpbmcgY2FwYWJpbGl0aWVzLgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSB0aW1lIHRleHQgdG8gYmUgcGFyc2VkLgorICAgICAqIEBwYXJhbSBzdGFydCB3aGVyZSB0byBzdGFydCBwYXJzaW5nLgorICAgICAqIEBwYXJhbSBjaCB0aGUgcGF0dGVybiBjaGFyYWN0ZXIgZm9yIHRoZSBkYXRlIGZpZWxkIHRleHQgdG8gYmUgcGFyc2VkLgorICAgICAqIEBwYXJhbSBjb3VudCB0aGUgY291bnQgb2YgYSBwYXR0ZXJuIGNoYXJhY3Rlci4KKyAgICAgKiBAcGFyYW0gb2JleUNvdW50IGlmIHRydWUsIHRoZW4gdGhlIG5leHQgZmllbGQgZGlyZWN0bHkgYWJ1dHMgdGhpcyBvbmUsCisgICAgICogYW5kIHdlIHNob3VsZCB1c2UgdGhlIGNvdW50IHRvIGtub3cgd2hlbiB0byBzdG9wIHBhcnNpbmcuCisgICAgICogQHBhcmFtIGFtYmlndW91c1llYXIgcmV0dXJuIHBhcmFtZXRlcjsgdXBvbiByZXR1cm4sIGlmIGFtYmlndW91c1llYXJbMF0KKyAgICAgKiBpcyB0cnVlLCB0aGVuIGEgdHdvLWRpZ2l0IHllYXIgd2FzIHBhcnNlZCBhbmQgbWF5IG5lZWQgdG8gYmUgcmVhZGp1c3RlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBuZXcgc3RhcnQgcG9zaXRpb24gaWYgbWF0Y2hpbmcgc3VjY2VlZGVkOyBhIG5lZ2F0aXZlCisgICAgICogbnVtYmVyIGluZGljYXRpbmcgbWF0Y2hpbmcgZmFpbHVyZSwgb3RoZXJ3aXNlLiAgQXMgYSBzaWRlIGVmZmVjdCwKKyAgICAgKiBzZXQgdGhlIGFwcHJvcHJpYXRlIGZpZWxkIG9mIDxjb2RlPmNhbDwvY29kZT4gd2l0aCB0aGUgcGFyc2VkCisgICAgICogdmFsdWUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBzdWJQYXJzZShTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBjaGFyIGNoLCBpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIG9iZXlDb3VudCwgYm9vbGVhbltdIGFtYmlndW91c1llYXIsIENhbGVuZGFyIGNhbCkKKyAgICB7CisgICAgICAgIE51bWJlciBudW1iZXIgPSBudWxsOworICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAgICBpbnQgaTsKKyAgICAgICAgUGFyc2VQb3NpdGlvbiBwb3MgPSBuZXcgUGFyc2VQb3NpdGlvbigwKTsKKyAgICAgICAgaW50IHBhdHRlcm5DaGFySW5kZXggPSAtMTsKKworICAgICAgICAvLyBURU1QT1JBUlkgSEFDSyBUT0RPIGZpeCB0aGlzCisgICAgICAgIGlmIChjaCA9PSAndScpIHsgLy8gJ3UnIC0gRVhURU5ERURfWUVBUgorICAgICAgICAgICAgcG9zLnNldEluZGV4KHN0YXJ0KTsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBpZiAocG9zLmdldEluZGV4KCkgPj0gdGV4dC5sZW5ndGgoKSkgcmV0dXJuIC1zdGFydDsKKyAgICAgICAgICAgICAgICBjaGFyIGMgPSB0ZXh0LmNoYXJBdChwb3MuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaWYgKGMgIT0gJyAnICYmIGMgIT0gJ1x0JykgYnJlYWs7CisgICAgICAgICAgICAgICAgcG9zLnNldEluZGV4KHBvcy5nZXRJbmRleCgpKzEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9iZXlDb3VudCkgeworICAgICAgICAgICAgICAgIGlmICgoc3RhcnQrY291bnQpID4gdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLXN0YXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXJGb3JtYXQucGFyc2UodGV4dC5zdWJzdHJpbmcoMCwgc3RhcnQrY291bnQpLCBwb3MpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXJGb3JtYXQucGFyc2UodGV4dCwgcG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChudW1iZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtc3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZSA9IG51bWJlci5pbnRWYWx1ZSgpOworICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5FWFRFTkRFRF9ZRUFSLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gcG9zLmdldEluZGV4KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHBhdHRlcm5DaGFySW5kZXg9Zm9ybWF0RGF0YS5wYXR0ZXJuQ2hhcnMuaW5kZXhPZihjaCkpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC1zdGFydDsKKworICAgICAgICBpbnQgZmllbGQgPSBQQVRURVJOX0lOREVYX1RPX0NBTEVOREFSX0ZJRUxEW3BhdHRlcm5DaGFySW5kZXhdOworCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc3BhY2VzIGhlcmUsIHNraXAgb3ZlciB0aGVtLiAgSWYgd2UgaGl0IHRoZSBlbmQKKyAgICAgICAgLy8gb2YgdGhlIHN0cmluZywgdGhlbiBmYWlsLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpZiAoc3RhcnQgPj0gdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtc3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgYyA9IFVURjE2LmNoYXJBdCh0ZXh0LCBzdGFydCk7CisgICAgICAgICAgICBpZiAoIVVDaGFyYWN0ZXIuaXNVV2hpdGVTcGFjZShjKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhcnQgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICB9CisgICAgICAgIHBvcy5zZXRJbmRleChzdGFydCk7CisKKyAgICAgICAgLy8gV2UgaGFuZGxlIGEgZmV3IHNwZWNpYWwgY2FzZXMgaGVyZSB3aGVyZSB3ZSBuZWVkIHRvIHBhcnNlCisgICAgICAgIC8vIGEgbnVtYmVyIHZhbHVlLiAgV2UgaGFuZGxlIGZ1cnRoZXIsIG1vcmUgZ2VuZXJpYyBjYXNlcyBiZWxvdy4gIFdlIG5lZWQKKyAgICAgICAgLy8gdG8gaGFuZGxlIHNvbWUgb2YgdGhlbSBoZXJlIGJlY2F1c2Ugc29tZSBmaWVsZHMgcmVxdWlyZSBleHRyYSBwcm9jZXNzaW5nIG9uCisgICAgICAgIC8vIHRoZSBwYXJzZWQgdmFsdWUuCisgICAgICAgIGlmIChwYXR0ZXJuQ2hhckluZGV4ID09IDQgLypIT1VSX09GX0RBWTFfRklFTEQqLyB8fAorICAgICAgICAgICAgcGF0dGVybkNoYXJJbmRleCA9PSAxNSAvKkhPVVIxX0ZJRUxEKi8gfHwKKyAgICAgICAgICAgIChwYXR0ZXJuQ2hhckluZGV4ID09IDIgLypNT05USF9GSUVMRCovICYmIGNvdW50IDw9IDIpIHx8CisgICAgICAgICAgICBwYXR0ZXJuQ2hhckluZGV4ID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIGdvb2QgdG8gdW5pZnkgdGhpcyB3aXRoIHRoZSBvYmV5Q291bnQgbG9naWMgYmVsb3csCisgICAgICAgICAgICAvLyBidXQgdGhhdCdzIGdvaW5nIHRvIGJlIGRpZmZpY3VsdC4KKyAgICAgICAgICAgIGlmIChvYmV5Q291bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChzdGFydCtjb3VudCkgPiB0ZXh0Lmxlbmd0aCgpKSByZXR1cm4gLXN0YXJ0OworICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlckZvcm1hdC5wYXJzZSh0ZXh0LnN1YnN0cmluZygwLCBzdGFydCtjb3VudCksIHBvcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIG51bWJlciA9IG51bWJlckZvcm1hdC5wYXJzZSh0ZXh0LCBwb3MpOworICAgICAgICAgICAgaWYgKG51bWJlciA9PSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiAtc3RhcnQ7CisgICAgICAgICAgICB2YWx1ZSA9IG51bWJlci5pbnRWYWx1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwYXR0ZXJuQ2hhckluZGV4KQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDogLy8gJ0cnIC0gRVJBCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hTdHJpbmcodGV4dCwgc3RhcnQsIENhbGVuZGFyLkVSQSwgZm9ybWF0RGF0YS5lcmFzLCBjYWwpOworICAgICAgICBjYXNlIDE6IC8vICd5JyAtIFlFQVIKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSAzIG9yIG1vcmUgWUVBUiBwYXR0ZXJuIGNoYXJhY3RlcnMsIHRoaXMgaW5kaWNhdGVzCisgICAgICAgICAgICAvLyB0aGF0IHRoZSB5ZWFyIHZhbHVlIGlzIHRvIGJlIHRyZWF0ZWQgbGl0ZXJhbGx5LCB3aXRob3V0IGFueQorICAgICAgICAgICAgLy8gdHdvLWRpZ2l0IHllYXIgYWRqdXN0bWVudHMgKGUuZy4sIGZyb20gIjAxIiB0byAyMDAxKS4gIE90aGVyd2lzZQorICAgICAgICAgICAgLy8gd2UgbWFkZSBhZGp1c3RtZW50cyB0byBwbGFjZSB0aGUgMi1kaWdpdCB5ZWFyIGluIHRoZSBwcm9wZXIKKyAgICAgICAgICAgIC8vIGNlbnR1cnksIGZvciBwYXJzZWQgc3RyaW5ncyBmcm9tICIwMCIgdG8gIjk5Ii4gIEFueSBvdGhlciBzdHJpbmcKKyAgICAgICAgICAgIC8vIGlzIHRyZWF0ZWQgbGl0ZXJhbGx5OiAgIjIyNTAiLCAiLTEiLCAiMSIsICIwMDIiLgorICAgICAgICAgICAgLyogJ3l5JyBpcyB0aGUgb25seSBzcGVjaWFsIGNhc2UsICd5JyBpcyBpbnRlcnByZXRlZCBhcyBudW1iZXIuIFtSaWNoYXJkL0dDTF0qLworICAgICAgICAgICAgaWYgKGNvdW50ID09IDIgJiYgKHBvcy5nZXRJbmRleCgpIC0gc3RhcnQpID09IDIKKyAgICAgICAgICAgICAgICAmJiBDaGFyYWN0ZXIuaXNEaWdpdCh0ZXh0LmNoYXJBdChzdGFydCkpCisgICAgICAgICAgICAgICAgJiYgQ2hhcmFjdGVyLmlzRGlnaXQodGV4dC5jaGFyQXQoc3RhcnQrMSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEFzc3VtZSBmb3IgZXhhbXBsZSB0aGF0IHRoZSBkZWZhdWx0Q2VudHVyeVN0YXJ0IGlzIDYvMTgvMTkwMy4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdHdvLWRpZ2l0IHllYXJzIHdpbGwgYmUgZm9yY2VkIGludG8gdGhlIHJhbmdlCisgICAgICAgICAgICAgICAgLy8gNi8xOC8xOTAzIHRvIDYvMTcvMjAwMy4gIEFzIGEgcmVzdWx0LCB5ZWFycyAwMCwgMDEsIGFuZCAwMgorICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gMjAwMCwgMjAwMSwgYW5kIDIwMDIuICBZZWFycyAwNCwgMDUsIGV0Yy4gY29ycmVzcG9uZAorICAgICAgICAgICAgICAgIC8vIHRvIDE5MDQsIDE5MDUsIGV0Yy4gIElmIHRoZSB5ZWFyIGlzIDAzLCB0aGVuIGl0IGlzIDIwMDMgaWYgdGhlCisgICAgICAgICAgICAgICAgLy8gb3RoZXIgZmllbGRzIHNwZWNpZnkgYSBkYXRlIGJlZm9yZSA2LzE4LCBvciAxOTAzIGlmIHRoZXkgc3BlY2lmeSBhCisgICAgICAgICAgICAgICAgLy8gZGF0ZSBhZnRlcndhcmRzLiAgQXMgYSByZXN1bHQsIDAzIGlzIGFuIGFtYmlndW91cyB5ZWFyLiAgQWxsIG90aGVyCisgICAgICAgICAgICAgICAgLy8gdHdvLWRpZ2l0IHllYXJzIGFyZSB1bmFtYmlndW91cy4KKyAgICAgICAgICAgICAgICBpbnQgYW1iaWd1b3VzVHdvRGlnaXRZZWFyID0gZGVmYXVsdENlbnR1cnlTdGFydFllYXIgJSAxMDA7CisgICAgICAgICAgICAgICAgYW1iaWd1b3VzWWVhclswXSA9IHZhbHVlID09IGFtYmlndW91c1R3b0RpZ2l0WWVhcjsKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSAoZGVmYXVsdENlbnR1cnlTdGFydFllYXIvMTAwKSoxMDAgKworICAgICAgICAgICAgICAgICAgICAodmFsdWUgPCBhbWJpZ3VvdXNUd29EaWdpdFllYXIgPyAxMDAgOiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuWUVBUiwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHBvcy5nZXRJbmRleCgpOworICAgICAgICBjYXNlIDI6IC8vICdNJyAtIE1PTlRICisgICAgICAgICAgICBpZiAoY291bnQgPD0gMikgLy8gaS5lLiwgTSBvciBNTS4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCB3YW50IHRvIHBhcnNlIHRoZSBtb250aCBpZiBpdCBpcyBhIHN0cmluZworICAgICAgICAgICAgICAgIC8vIHdoaWxlIHBhdHRlcm4gdXNlcyBudW1lcmljIHN0eWxlOiBNIG9yIE1NLgorICAgICAgICAgICAgICAgIC8vIFtXZSBjb21wdXRlZCAndmFsdWUnIGFib3ZlLl0KKyAgICAgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLk1PTlRILCB2YWx1ZSAtIDEpOworICAgICAgICAgICAgICAgIHJldHVybiBwb3MuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjb3VudCA+PSAzIC8vIGkuZS4sIE1NTSBvciBNTU1NCisgICAgICAgICAgICAgICAgLy8gV2FudCB0byBiZSBhYmxlIHRvIHBhcnNlIGJvdGggc2hvcnQgYW5kIGxvbmcgZm9ybXMuCisgICAgICAgICAgICAgICAgLy8gVHJ5IGNvdW50ID09IDQgZmlyc3Q6CisgICAgICAgICAgICAgICAgaW50IG5ld1N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoKG5ld1N0YXJ0PW1hdGNoU3RyaW5nKHRleHQsIHN0YXJ0LCBDYWxlbmRhci5NT05USCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdERhdGEubW9udGhzLCBjYWwpKSA+IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGFydDsKKyAgICAgICAgICAgICAgICBlbHNlIC8vIGNvdW50ID09IDQgZmFpbGVkLCBub3cgdHJ5IGNvdW50ID09IDMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoU3RyaW5nKHRleHQsIHN0YXJ0LCBDYWxlbmRhci5NT05USCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdERhdGEuc2hvcnRNb250aHMsIGNhbCk7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgNDogLy8gJ2snIC0gSE9VUl9PRl9EQVk6IDEtYmFzZWQuICBlZywgMjM6NTkgKyAxIGhvdXIgPT4+IDI0OjU5CisgICAgICAgICAgICAvLyBbV2UgY29tcHV0ZWQgJ3ZhbHVlJyBhYm92ZS5dCisgICAgICAgICAgICBpZiAodmFsdWUgPT0gY2FsLmdldE1heGltdW0oQ2FsZW5kYXIuSE9VUl9PRl9EQVkpKzEpIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBwb3MuZ2V0SW5kZXgoKTsKKyAgICAgICAgY2FzZSA5OiB7IC8vICdFJyAtIERBWV9PRl9XRUVLCisgICAgICAgICAgICAvLyBXYW50IHRvIGJlIGFibGUgdG8gcGFyc2UgYm90aCBzaG9ydCBhbmQgbG9uZyBmb3Jtcy4KKyAgICAgICAgICAgIC8vIFRyeSBjb3VudCA9PSA0IChEREREKSBmaXJzdDoKKyAgICAgICAgICAgIGludCBuZXdTdGFydCA9IDA7CisgICAgICAgICAgICBpZiAoKG5ld1N0YXJ0PW1hdGNoU3RyaW5nKHRleHQsIHN0YXJ0LCBDYWxlbmRhci5EQVlfT0ZfV0VFSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RGF0YS53ZWVrZGF5cywgY2FsKSkgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGFydDsKKyAgICAgICAgICAgIGVsc2UgLy8gRERERCBmYWlsZWQsIG5vdyB0cnkgRERECisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoU3RyaW5nKHRleHQsIHN0YXJ0LCBDYWxlbmRhci5EQVlfT0ZfV0VFSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RGF0YS5zaG9ydFdlZWtkYXlzLCBjYWwpOworICAgICAgICB9CisgICAgICAgIGNhc2UgMTQ6ICAgIC8vICdhJyAtIEFNX1BNCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hTdHJpbmcodGV4dCwgc3RhcnQsIENhbGVuZGFyLkFNX1BNLCBmb3JtYXREYXRhLmFtcG1zLCBjYWwpOworICAgICAgICBjYXNlIDE1OiAvLyAnaCcgLSBIT1VSOjEtYmFzZWQuICBlZywgMTFQTSArIDEgaG91ciA9Pj4gMTIgQU0KKyAgICAgICAgICAgIC8vIFtXZSBjb21wdXRlZCAndmFsdWUnIGFib3ZlLl0KKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBjYWwuZ2V0TGVhc3RNYXhpbXVtKENhbGVuZGFyLkhPVVIpKzEpIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuSE9VUiwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHBvcy5nZXRJbmRleCgpOworICAgICAgICBjYXNlIDE3OiAvLyAneicgLSBaT05FX09GRlNFVAorICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHBhcnNlIGdlbmVyaWMgZm9ybXMgc3VjaCBhcyBHTVQtMDc6MDAuIERvIHRoaXMgZmlyc3QKKyAgICAgICAgICAgIC8vIGluIGNhc2UgbG9jYWxpemVkIERhdGVGb3JtYXRab25lRGF0YSBjb250YWlucyB0aGUgc3RyaW5nICJHTVQiCisgICAgICAgICAgICAvLyBmb3IgYSB6b25lOyBpbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gbWF0Y2ggdGhlIGZpcnN0IHRocmVlCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIG9mIEdNVCsvLUhIOk1NIGV0Yy4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgc2lnbiA9IDA7CisgICAgICAgICAgICAgICAgaW50IG9mZnNldDsKKworICAgICAgICAgICAgICAgIC8vIEZvciB0aW1lIHpvbmVzIHRoYXQgaGF2ZSBubyBrbm93biBuYW1lcywgbG9vayBmb3Igc3RyaW5ncworICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgIEdNVFsrLV1ob3VyczptaW51dGVzIG9yCisgICAgICAgICAgICAgICAgLy8gICAgR01UWystXWhobW0gb3IKKyAgICAgICAgICAgICAgICAvLyAgICBHTVQuCisgICAgICAgICAgICAgICAgaWYgKCh0ZXh0Lmxlbmd0aCgpIC0gc3RhcnQpID49IEdNVC5sZW5ndGgoKSAmJgorICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlZ2lvbk1hdGNoZXModHJ1ZSwgc3RhcnQsIEdNVCwgMCwgR01ULmxlbmd0aCgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuRFNUX09GRlNFVCwgMCk7CisKKyAgICAgICAgICAgICAgICAgICAgcG9zLnNldEluZGV4KHN0YXJ0ICsgR01ULmxlbmd0aCgpKTsKKworICAgICAgICAgICAgdHJ5IHsgLy8gdHJ5LWNhdGNoIGZvciAiR01UIiBvbmx5IHRpbWUgem9uZSBzdHJpbmcKKyAgICAgICAgICAgIGlmKCB0ZXh0LmNoYXJBdChwb3MuZ2V0SW5kZXgoKSkgPT0gJysnICkgeworICAgICAgICAgICAgICAgIHNpZ24gPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmKCB0ZXh0LmNoYXJBdChwb3MuZ2V0SW5kZXgoKSkgPT0gJy0nICkgeworICAgICAgICAgICAgICAgIHNpZ24gPSAtMTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9IGNhdGNoKFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2lnbiA9PSAwKSB7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLlpPTkVfT0ZGU0VULCAwICk7CisgICAgICAgICAgICByZXR1cm4gcG9zLmdldEluZGV4KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTG9vayBmb3IgaG91cnM6bWludXRlcyBvciBoaG1tLgorICAgICAgICAgICAgICAgICAgICBwb3Muc2V0SW5kZXgocG9zLmdldEluZGV4KCkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgTnVtYmVyIHR6TnVtYmVyID0gbnVtYmVyRm9ybWF0LnBhcnNlKHRleHQsIHBvcyk7CisgICAgICAgICAgICAgICAgICAgIGlmKCB0ek51bWJlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLXN0YXJ0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKCB0ZXh0LmNoYXJBdChwb3MuZ2V0SW5kZXgoKSkgPT0gJzonICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaG91cnM6bWludXRlcyBjYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSB0ek51bWJlci5pbnRWYWx1ZSgpICogNjA7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3Muc2V0SW5kZXgocG9zLmdldEluZGV4KCkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR6TnVtYmVyID0gbnVtYmVyRm9ybWF0LnBhcnNlKHRleHQsIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggdHpOdW1iZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdHpOdW1iZXIuaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGhobW0gY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHR6TnVtYmVyLmludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggb2Zmc2V0IDwgMjQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAqPSA2MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgJSAxMDAgKyBvZmZzZXQgLyAxMDAgKiA2MDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBmb3IgZmluYWwgcHJvY2Vzc2luZyBiZWxvdyBvZiAnb2Zmc2V0JyBhbmQgJ3NpZ24nLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgY2hlY2sgZm9yIG5hbWVkIHRpbWUgem9uZXMgYnkgbG9va2luZyB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsb2NhbGUgZGF0YSBmcm9tIHRoZSBEYXRlRm9ybWF0Wm9uZURhdGEgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2FudCB0byBiZSBhYmxlIHRvIHBhcnNlIGJvdGggc2hvcnQgYW5kIGxvbmcgZm9ybXMuCisgICAgICAgICAgICBpID0gc3ViUGFyc2Vab25lU3RyaW5nKHRleHQsIHN0YXJ0LCBjYWwpOworICAgICAgICAgICAgaWYgKGkgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEFzIGEgbGFzdCByZXNvcnQsIGxvb2sgZm9yIG51bWVyaWMgdGltZXpvbmVzIG9mIHRoZSBmb3JtCisgICAgICAgICAgICAgICAgICAgIC8vIFsrLV1oaG1tIGFzIHNwZWNpZmllZCBieSBSRkMgODIyLiAgVGhpcyBjb2RlIGlzIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgIC8vIGEgbGl0dGxlIG1vcmUgcGVybWlzc2l2ZSB0aGFuIFJGQyA4MjIuICBJdCB3aWxsIHRyeSB0byBkbworICAgICAgICAgICAgICAgICAgICAvLyBpdHMgYmVzdCB3aXRoIG51bWJlcnMgdGhhdCBhcmVuJ3Qgc3RyaWN0bHkgNCBkaWdpdHMgbG9uZy4KKyAgICAgICAgICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBmbXQgPSBuZXcgRGVjaW1hbEZvcm1hdCgiKyMjIyM7LSMjIyMiKTsKKyAgICAgICAgICAgICAgICAgICAgZm10LnNldFBhcnNlSW50ZWdlck9ubHkodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIE51bWJlciB0ek51bWJlciA9IGZtdC5wYXJzZSggdGV4dCwgcG9zICk7CisgICAgICAgICAgICAgICAgICAgIGlmKCB0ek51bWJlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLXN0YXJ0OyAgIC8vIFdhc24ndCBhY3R1YWxseSBhIG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSB0ek51bWJlci5pbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBzaWduID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYoIG9mZnNldCA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKCBvZmZzZXQgPCAyNCApCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgKiA2MDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICUgMTAwICsgb2Zmc2V0IC8gMTAwICogNjA7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGZvciBmaW5hbCBwcm9jZXNzaW5nIGJlbG93IG9mICdvZmZzZXQnIGFuZCAnc2lnbicuCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRG8gdGhlIGZpbmFsIHByb2Nlc3NpbmcgZm9yIGJvdGggb2YgdGhlIGFib3ZlIGNhc2VzLiAgV2Ugb25seQorICAgICAgICAgICAgICAgIC8vIGFycml2ZSBoZXJlIGlmIHRoZSBmb3JtIEdNVCsvLS4uLiBvciBhbiBSRkMgODIyIGZvcm0gd2FzIHNlZW4uCisgICAgICAgICAgICAgICAgaWYgKHNpZ24gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCAqPSBtaWxsaXNQZXJNaW51dGUgKiBzaWduOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWwuZ2V0VGltZVpvbmUoKS51c2VEYXlsaWdodFRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5EU1RfT0ZGU0VULCBtaWxsaXNQZXJIb3VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBtaWxsaXNQZXJIb3VyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuWk9ORV9PRkZTRVQsIG9mZnNldCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvcy5nZXRJbmRleCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWxsIGVmZm9ydHMgdG8gcGFyc2UgYSB6b25lIGZhaWxlZC4KKyAgICAgICAgICAgIHJldHVybiAtc3RhcnQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIGNhc2UgMzogLy8gJ2QnIC0gREFURQorICAgICAgICAgICAgLy8gY2FzZSA1OiAvLyAnSCcgLSBIT1VSX09GX0RBWTowLWJhc2VkLiAgZWcsIDIzOjU5ICsgMSBob3VyID0+PiAwMDo1OQorICAgICAgICAgICAgLy8gY2FzZSA2OiAvLyAnbScgLSBNSU5VVEUKKyAgICAgICAgICAgIC8vIGNhc2UgNzogLy8gJ3MnIC0gU0VDT05ECisgICAgICAgICAgICAvLyBjYXNlIDg6IC8vICdTJyAtIE1JTExJU0VDT05ECisgICAgICAgICAgICAvLyBjYXNlIDEwOiAvLyAnRCcgLSBEQVlfT0ZfWUVBUgorICAgICAgICAgICAgLy8gY2FzZSAxMTogLy8gJ0YnIC0gREFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICAgICAgICAgIC8vIGNhc2UgMTI6IC8vICd3JyAtIFdFRUtfT0ZfWUVBUgorICAgICAgICAgICAgLy8gY2FzZSAxMzogLy8gJ1cnIC0gV0VFS19PRl9NT05USAorICAgICAgICAgICAgLy8gY2FzZSAxNjogLy8gJ0snIC0gSE9VUjogMC1iYXNlZC4gIGVnLCAxMVBNICsgMSBob3VyID0+PiAwIEFNCisKKyAgICAgICAgICAgIC8vIEhhbmRsZSAiZ2VuZXJpYyIgZmllbGRzCisgICAgICAgICAgICBpZiAob2JleUNvdW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgoc3RhcnQrY291bnQpID4gdGV4dC5sZW5ndGgoKSkgcmV0dXJuIC1zdGFydDsKKyAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXJGb3JtYXQucGFyc2UodGV4dC5zdWJzdHJpbmcoMCwgc3RhcnQrY291bnQpLCBwb3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBudW1iZXIgPSBudW1iZXJGb3JtYXQucGFyc2UodGV4dCwgcG9zKTsKKyAgICAgICAgICAgIGlmIChudW1iZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNhbC5zZXQoZmllbGQsIG51bWJlci5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zLmdldEluZGV4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gLXN0YXJ0OworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBUcmFuc2xhdGUgYSBwYXR0ZXJuLCBtYXBwaW5nIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBmcm9tIHN0cmluZyB0byB0aGUKKyAgICAgKiBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciBpbiB0aGUgdG8gc3RyaW5nLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIHRyYW5zbGF0ZVBhdHRlcm4oU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBmcm9tLCBTdHJpbmcgdG8pIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBpblF1b3RlID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBwYXR0ZXJuLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChpblF1b3RlKSB7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1wnJykKKyAgICAgICAgICAgICAgICAgICAgaW5RdW90ZSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1wnJykKKyAgICAgICAgICAgICAgICAgICAgaW5RdW90ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBjaSA9IGZyb20uaW5kZXhPZihjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBwYXR0ZXJuICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNoYXJhY3RlciAnIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgKyAiJyIpOworICAgICAgICAgICAgICAgICAgICBjID0gdG8uY2hhckF0KGNpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgICAgICB9CisgICAgICAgIGlmIChpblF1b3RlKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5maW5pc2hlZCBxdW90ZSBpbiBwYXR0ZXJuIik7CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBwYXR0ZXJuIHN0cmluZyBkZXNjcmliaW5nIHRoaXMgZGF0ZSBmb3JtYXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1BhdHRlcm4oKSB7CisgICAgICAgIHJldHVybiBwYXR0ZXJuOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIGxvY2FsaXplZCBwYXR0ZXJuIHN0cmluZyBkZXNjcmliaW5nIHRoaXMgZGF0ZSBmb3JtYXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b0xvY2FsaXplZFBhdHRlcm4oKSB7CisgICAgICAgIHJldHVybiB0cmFuc2xhdGVQYXR0ZXJuKHBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdERhdGEucGF0dGVybkNoYXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXREYXRhLmxvY2FsUGF0dGVybkNoYXJzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBseSB0aGUgZ2l2ZW4gdW5sb2NhbGl6ZWQgcGF0dGVybiBzdHJpbmcgdG8gdGhpcyBkYXRlIGZvcm1hdC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhcHBseVBhdHRlcm4gKFN0cmluZyBwYXR0ZXJuKQorICAgIHsKKyAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBseSB0aGUgZ2l2ZW4gbG9jYWxpemVkIHBhdHRlcm4gc3RyaW5nIHRvIHRoaXMgZGF0ZSBmb3JtYXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgYXBwbHlMb2NhbGl6ZWRQYXR0ZXJuKFN0cmluZyBwYXR0ZXJuKSB7CisgICAgICAgIHRoaXMucGF0dGVybiA9IHRyYW5zbGF0ZVBhdHRlcm4ocGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXREYXRhLmxvY2FsUGF0dGVybkNoYXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdERhdGEucGF0dGVybkNoYXJzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBkYXRlL3RpbWUgZm9ybWF0dGluZyBkYXRhLgorICAgICAqIEByZXR1cm4gYSBjb3B5IG9mIHRoZSBkYXRlLXRpbWUgZm9ybWF0dGluZyBkYXRhIGFzc29jaWF0ZWQKKyAgICAgKiB3aXRoIHRoaXMgZGF0ZS10aW1lIGZvcm1hdHRlci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgRGF0ZUZvcm1hdFN5bWJvbHMgZ2V0RGF0ZUZvcm1hdFN5bWJvbHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChEYXRlRm9ybWF0U3ltYm9scylmb3JtYXREYXRhLmNsb25lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWxsb3dzIHlvdSB0byBzZXQgdGhlIGRhdGUvdGltZSBmb3JtYXR0aW5nIGRhdGEuCisgICAgICogQHBhcmFtIG5ld0Zvcm1hdERhdGEgdGhlIGdpdmVuIGRhdGUtdGltZSBmb3JtYXR0aW5nIGRhdGEuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RGF0ZUZvcm1hdFN5bWJvbHMoRGF0ZUZvcm1hdFN5bWJvbHMgbmV3Rm9ybWF0U3ltYm9scykKKyAgICB7CisgICAgICAgIHRoaXMuZm9ybWF0RGF0YSA9IChEYXRlRm9ybWF0U3ltYm9scyluZXdGb3JtYXRTeW1ib2xzLmNsb25lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWV0aG9kIGZvciBzdWJjbGFzc2VzIHRvIGFjY2VzcyB0aGUgRGF0ZUZvcm1hdFN5bWJvbHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIERhdGVGb3JtYXRTeW1ib2xzIGdldFN5bWJvbHMoKSB7CisgICAgICAgIHJldHVybiBmb3JtYXREYXRhOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBDbG9uZWFibGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgeworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IG90aGVyID0gKFNpbXBsZURhdGVGb3JtYXQpIHN1cGVyLmNsb25lKCk7CisgICAgICAgIG90aGVyLmZvcm1hdERhdGEgPSAoRGF0ZUZvcm1hdFN5bWJvbHMpIGZvcm1hdERhdGEuY2xvbmUoKTsKKyAgICAgICAgcmV0dXJuIG90aGVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIGhhc2hDb2RlLgorICAgICAqIEdlbmVyYXRlcyB0aGUgaGFzaCBjb2RlIGZvciB0aGUgU2ltcGxlRGF0ZUZvcm1hdCBvYmplY3QKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXR0ZXJuLmhhc2hDb2RlKCk7CisgICAgICAgIC8vIGp1c3QgZW5vdWdoIGZpZWxkcyBmb3IgYSByZWFzb25hYmxlIGRpc3RyaWJ1dGlvbgorICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIGVxdWFscy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKKyAgICB7CisgICAgICAgIGlmICghc3VwZXIuZXF1YWxzKG9iaikpIHJldHVybiBmYWxzZTsgLy8gc3VwZXIgZG9lcyBjbGFzcyBjaGVjaworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IHRoYXQgPSAoU2ltcGxlRGF0ZUZvcm1hdCkgb2JqOworICAgICAgICByZXR1cm4gKHBhdHRlcm4uZXF1YWxzKHRoYXQucGF0dGVybikKKyAgICAgICAgICAgICAgICAmJiBmb3JtYXREYXRhLmVxdWFscyh0aGF0LmZvcm1hdERhdGEpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSByZWFkT2JqZWN0LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCByZWFkT2JqZWN0KE9iamVjdElucHV0U3RyZWFtIHN0cmVhbSkKKyAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgc3RyZWFtLmRlZmF1bHRSZWFkT2JqZWN0KCk7CisgICAgICAgICAgICAgaWYgKHNlcmlhbFZlcnNpb25PblN0cmVhbSA8IDEpIHsKKyAgICAgICAgICAgICAgICAgLy8gZGlkbid0IGhhdmUgZGVmYXVsdENlbnR1cnlTdGFydCBmaWVsZAorICAgICAgICAgICAgICAgICBpbml0aWFsaXplRGVmYXVsdENlbnR1cnkoKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIC8vIGZpbGwgaW4gZGVwZW5kZW50IHRyYW5zaWVudCBmaWVsZAorICAgICAgICAgICAgICAgICBwYXJzZUFtYmlndW91c0RhdGVzQXNBZnRlcihkZWZhdWx0Q2VudHVyeVN0YXJ0KTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgc2VyaWFsVmVyc2lvbk9uU3RyZWFtID0gY3VycmVudFNlcmlhbFZlcnNpb247CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzRjZTNmNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDMgMjI6MDM6NTggJCAKKyAqICRSZXZpc2lvbjogMS41ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisKKy8vIE5PVEU6ICBUaGlzIGNsYXNzIGlzIGlkZW50aWNhbCB0byBqYXZhLnRleHQuU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IKKy8vIGluIEpESyAxLjIuICBJdCdzIGNvcGllZCBoZXJlIGJlY2F1c2UgdGhlIEpESyAxLjEgdmVyc2lvbiBvZgorLy8gU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgaGFzIGEgYnVnIHRoYXQgcHJldmVudHMgaXQgZnJvbSB3b3JraW5nCisvLyByaWdodCB3aXRoIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IuICBUaGlzIGNsYXNzIGlzIHVubmVjZXNzYXJ5CisvLyB3aGVuIHVzaW5nIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3Igd2l0aCBKREsgMS4yLgorCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworCisvKioKKyAqIDxjb2RlPlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yPC9jb2RlPiBpbXBsZW1lbnRzIHRoZQorICogPGNvZGU+Q2hhcmFjdGVySXRlcmF0ZXI8L2NvZGU+IHByb3RvY29sIGZvciBhIDxjb2RlPlN0cmluZzwvY29kZT4uCisgKiBUaGUgPGNvZGU+U3RyaW5nQ2hhcmFjdGVySXRlcmF0b3I8L2NvZGU+IGNsYXNzIGl0ZXJhdGVzIG92ZXIgdGhlCisgKiBlbnRpcmUgPGNvZGU+U3RyaW5nPC9jb2RlPi4KKyAqCisgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yCisgKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGluc3RlYWQuCisgKi8KKworcHVibGljIGZpbmFsIGNsYXNzIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGltcGxlbWVudHMgQ2hhcmFjdGVySXRlcmF0b3IKK3sKKyAgICBwcml2YXRlIFN0cmluZyB0ZXh0OworICAgIHByaXZhdGUgaW50IGJlZ2luOworICAgIHByaXZhdGUgaW50IGVuZDsKKyAgICAvLyBpbnZhcmlhbnQ6IGJlZ2luIDw9IHBvcyA8PSBlbmQKKyAgICBwcml2YXRlIGludCBwb3M7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIGl0ZXJhdG9yIHdpdGggYW4gaW5pdGlhbCBpbmRleCBvZiAwLgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBqYXZhLnRleHQuU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoU3RyaW5nIHRleHQpCisgICAgeworICAgICAgICB0aGlzKHRleHQsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gaXRlcmF0b3Igd2l0aCB0aGUgc3BlY2lmaWVkIGluaXRpYWwgaW5kZXguCisgICAgICoKKyAgICAgKiBAcGFyYW0gIHRleHQgICBUaGUgU3RyaW5nIHRvIGJlIGl0ZXJhdGVkIG92ZXIKKyAgICAgKiBAcGFyYW0gIHBvcyAgICBJbml0aWFsIGl0ZXJhdG9yIHBvc2l0aW9uICAgICAKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGluc3RlYWQuCisgICAgICovCisgICAgcHVibGljIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKFN0cmluZyB0ZXh0LCBpbnQgcG9zKQorICAgIHsKKyAgICB0aGlzKHRleHQsIDAsIHRleHQubGVuZ3RoKCksIHBvcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiBpdGVyYXRvciBvdmVyIHRoZSBnaXZlbiByYW5nZSBvZiB0aGUgZ2l2ZW4gc3RyaW5nLCB3aXRoIHRoZQorICAgICAqIGluZGV4IHNldCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtICB0ZXh0ICAgVGhlIFN0cmluZyB0byBiZSBpdGVyYXRlZCBvdmVyCisgICAgICogQHBhcmFtICBiZWdpbiAgSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgICAqIEBwYXJhbSAgZW5kICAgIEluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBsYXN0IGNoYXJhY3RlcgorICAgICAqIEBwYXJhbSAgcG9zICAgIEluaXRpYWwgaXRlcmF0b3IgcG9zaXRpb24gCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcihTdHJpbmcgdGV4dCwgaW50IGJlZ2luLCBpbnQgZW5kLCBpbnQgcG9zKSB7CisgICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7CisKKyAgICAgICAgaWYgKGJlZ2luIDwgMCB8fCBiZWdpbiA+IGVuZCB8fCBlbmQgPiB0ZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHN1YnN0cmluZyByYW5nZSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBvcyA8IGJlZ2luIHx8IHBvcyA+IGVuZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBwb3NpdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5iZWdpbiA9IGJlZ2luOworICAgICAgICB0aGlzLmVuZCA9IGVuZDsKKyAgICAgICAgdGhpcy5wb3MgPSBwb3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVzZXQgdGhpcyBpdGVyYXRvciB0byBwb2ludCB0byBhIG5ldyBzdHJpbmcuICBUaGlzIHBhY2thZ2UtdmlzaWJsZQorICAgICAqIG1ldGhvZCBpcyB1c2VkIGJ5IG90aGVyIGphdmEudGV4dCBjbGFzc2VzIHRoYXQgd2FudCB0byBhdm9pZCBhbGxvY2F0aW5nCisgICAgICogbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIG9iamVjdHMgZXZlcnkgdGltZSB0aGVpciBzZXRUZXh0IG1ldGhvZAorICAgICAqIGlzIGNhbGxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgdGV4dCAgIFRoZSBTdHJpbmcgdG8gYmUgaXRlcmF0ZWQgb3ZlciAKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGluc3RlYWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCkgeworICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnRleHQgPSB0ZXh0OworICAgICAgICB0aGlzLmJlZ2luID0gMDsKKyAgICAgICAgdGhpcy5lbmQgPSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICB0aGlzLnBvcyA9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5maXJzdCgpIGZvciBTdHJpbmcuCisgICAgICogQHNlZSBDaGFyYWN0ZXJJdGVyYXRvciNmaXJzdCAKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGluc3RlYWQuCisgICAgICovCisgICAgcHVibGljIGNoYXIgZmlyc3QoKQorICAgIHsKKyAgICAgICAgcG9zID0gYmVnaW47CisgICAgICAgIHJldHVybiBjdXJyZW50KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5sYXN0KCkgZm9yIFN0cmluZy4KKyAgICAgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yI2xhc3QgCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGxhc3QoKQorICAgIHsKKyAgICAgICAgaWYgKGVuZCAhPSBiZWdpbikgeworICAgICAgICAgICAgcG9zID0gZW5kIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBvcyA9IGVuZDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnRzIENoYXJhY3Rlckl0ZXJhdG9yLnNldEluZGV4KCkgZm9yIFN0cmluZy4KKyAgICAgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yI3NldEluZGV4IAorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBqYXZhLnRleHQuU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBzZXRJbmRleChpbnQgcCkKKyAgICB7CisgICAgaWYgKHAgPCBiZWdpbiB8fCBwID4gZW5kKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGluZGV4Iik7CisgICAgfQorICAgICAgICBwb3MgPSBwOworICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudHMgQ2hhcmFjdGVySXRlcmF0b3IuY3VycmVudCgpIGZvciBTdHJpbmcuCisgICAgICogQHNlZSBDaGFyYWN0ZXJJdGVyYXRvciNjdXJyZW50IAorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBqYXZhLnRleHQuU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBjdXJyZW50KCkKKyAgICB7CisgICAgICAgIGlmIChwb3MgPj0gYmVnaW4gJiYgcG9zIDwgZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dC5jaGFyQXQocG9zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBET05FOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5uZXh0KCkgZm9yIFN0cmluZy4KKyAgICAgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yI25leHQgCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBjaGFyIG5leHQoKQorICAgIHsKKyAgICAgICAgaWYgKHBvcyA8IGVuZCAtIDEpIHsKKyAgICAgICAgICAgIHBvcysrOworICAgICAgICAgICAgcmV0dXJuIHRleHQuY2hhckF0KHBvcyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwb3MgPSBlbmQ7CisgICAgICAgICAgICByZXR1cm4gRE9ORTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudHMgQ2hhcmFjdGVySXRlcmF0b3IucHJldmlvdXMoKSBmb3IgU3RyaW5nLgorICAgICAqIEBzZWUgQ2hhcmFjdGVySXRlcmF0b3IjcHJldmlvdXMgCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBjaGFyIHByZXZpb3VzKCkKKyAgICB7CisgICAgICAgIGlmIChwb3MgPiBiZWdpbikgeworICAgICAgICAgICAgcG9zLS07CisgICAgICAgICAgICByZXR1cm4gdGV4dC5jaGFyQXQocG9zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBET05FOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5nZXRCZWdpbkluZGV4KCkgZm9yIFN0cmluZy4KKyAgICAgKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yI2dldEJlZ2luSW5kZXggCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0QmVnaW5JbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gYmVnaW47CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvci5nZXRFbmRJbmRleCgpIGZvciBTdHJpbmcuCisgICAgICogQHNlZSBDaGFyYWN0ZXJJdGVyYXRvciNnZXRFbmRJbmRleCAKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGluc3RlYWQuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRFbmRJbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gZW5kOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudHMgQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5kZXgoKSBmb3IgU3RyaW5nLgorICAgICAqIEBzZWUgQ2hhcmFjdGVySXRlcmF0b3IjZ2V0SW5kZXggCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0aGUgZXF1YWxpdHkgb2YgdHdvIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIG9iamVjdHMuCisgICAgICogQHBhcmFtIG9iaiB0aGUgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3Igb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGguCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBvYmogaXMgdGhlIHNhbWUgYXMgdGhpcworICAgICAqIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIG9iamVjdDsgZmFsc2Ugb3RoZXJ3aXNlLiAKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGluc3RlYWQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCisgICAgeworICAgICAgICBpZiAodGhpcyA9PSBvYmopIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IgdGhhdCA9IChTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcikgb2JqOworCisgICAgICAgIGlmIChoYXNoQ29kZSgpICE9IHRoYXQuaGFzaENvZGUoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghdGV4dC5lcXVhbHModGhhdC50ZXh0KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChwb3MgIT0gdGhhdC5wb3MgfHwgYmVnaW4gIT0gdGhhdC5iZWdpbiB8fCBlbmQgIT0gdGhhdC5lbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyBhIGhhc2hjb2RlIGZvciB0aGlzIGl0ZXJhdG9yLgorICAgICAqIEByZXR1cm4gQSBoYXNoIGNvZGUgCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRleHQuaGFzaENvZGUoKSBeIHBvcyBeIGJlZ2luIF4gZW5kOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgaXRlcmF0b3IuCisgICAgICogQHJldHVybiBBIGNvcHkgb2YgdGhpcyAKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGluc3RlYWQuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3Igb3RoZXIKKyAgICAgICAgICAgID0gKFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKSBzdXBlci5jbG9uZSgpOworICAgICAgICAgICAgcmV0dXJuIG90aGVyOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigpOworICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9TdHJpbmdNYXRjaGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9TdHJpbmdNYXRjaGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWRkYzk1OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ01hdGNoZXIuamF2YQpAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ01hdGNoZXIuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wNi8yOCAxOToxODowNSAkIAorICogJFJldmlzaW9uOiAxLjEyICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKKworLyoqCisgKiBBbiBvYmplY3QgdGhhdCBtYXRjaGVzIGEgZml4ZWQgaW5wdXQgc3RyaW5nLCBpbXBsZW1lbnRpbmcgdGhlCisgKiBVbmljb2RlTWF0Y2hlciBBUEkuICBUaGlzIG9iamVjdCBhbHNvIGltcGxlbWVudHMgdGhlCisgKiBVbmljb2RlUmVwbGFjZXIgQVBJLCBhbGxvd2luZyBpdCB0byBlbWl0IHRoZSBtYXRjaGVkIHRleHQgYXMKKyAqIG91dHB1dC4gIFNpbmNlIHRoZSBtYXRjaCB0ZXh0IG1heSBjb250YWluIGZsZXhpYmxlIG1hdGNoIGVsZW1lbnRzLAorICogc3VjaCBhcyBVbmljb2RlU2V0cywgdGhlIGVtaXR0ZWQgdGV4dCBpcyBub3QgdGhlIG1hdGNoIHBhdHRlcm4sIGJ1dAorICogaW5zdGVhZCBhIHN1YnN0cmluZyBvZiB0aGUgYWN0dWFsIG1hdGNoZWQgdGV4dC4gIEZvbGxvd2luZworICogY29udmVudGlvbiwgdGhlIG91dHB1dCB0ZXh0IGlzIHRoZSBsZWZ0bW9zdCBtYXRjaCBzZWVuIHVwIHRvIHRoaXMKKyAqIHBvaW50LgorICoKKyAqIEEgU3RyaW5nTWF0Y2hlciBtYXkgcmVwcmVzZW50IGEgc2VnbWVudCwgaW4gd2hpY2ggY2FzZSBpdCBoYXMgYQorICogcG9zaXRpdmUgc2VnbWVudCBudW1iZXIuICBUaGlzIGFmZmVjdHMgaG93IHRoZSBtYXRjaGVyIGNvbnZlcnRzCisgKiBpdHNlbGYgdG8gYSBwYXR0ZXJuIGJ1dCBkb2VzIG5vdCBvdGhlcndpc2UgYWZmZWN0IGl0cyBmdW5jdGlvbi4KKyAqCisgKiBBIFN0cmluZ01hdGNoZXIgdGhhdCBpcyBub3QgYSBzZWdtZW50IHNob3VsZCBub3QgYmUgdXNlZCBhcyBhCisgKiBVbmljb2RlUmVwbGFjZXIuCisgKi8KK2NsYXNzIFN0cmluZ01hdGNoZXIgaW1wbGVtZW50cyBVbmljb2RlTWF0Y2hlciwgVW5pY29kZVJlcGxhY2VyIHsKKworICAgIC8qKgorICAgICAqIFRoZSB0ZXh0IHRvIGJlIG1hdGNoZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgcGF0dGVybjsKKworICAgIC8qKgorICAgICAqIFN0YXJ0IG9mZnNldCwgaW4gdGhlIG1hdGNoIHRleHQsIG9mIHRoZSA8ZW0+cmlnaHRtb3N0PC9lbT4KKyAgICAgKiBtYXRjaC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtYXRjaFN0YXJ0OworICAgIAorICAgIC8qKgorICAgICAqIExpbWl0IG9mZnNldCwgaW4gdGhlIG1hdGNoIHRleHQsIG9mIHRoZSA8ZW0+cmlnaHRtb3N0PC9lbT4KKyAgICAgKiBtYXRjaC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtYXRjaExpbWl0OworCisgICAgLyoqCisgICAgICogVGhlIHNlZ21lbnQgbnVtYmVyLCAxLWJhc2VkLCBvciAwIGlmIG5vdCBhIHNlZ21lbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgc2VnbWVudE51bWJlcjsKKworICAgIC8qKgorICAgICAqIENvbnRleHQgb2JqZWN0IHRoYXQgbWFwcyBzdGFuZC1pbnMgdG8gbWF0Y2hlciBhbmQgcmVwbGFjZXIKKyAgICAgKiBvYmplY3RzLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuRGF0YSBkYXRhOworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbWF0Y2hlciB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4gc3RyaW5nLgorICAgICAqIEBwYXJhbSB0aGVTdHJpbmcgdGhlIHBhdHRlcm4gdG8gYmUgbWF0Y2hlZCwgcG9zc2libHkgY29udGFpbmluZworICAgICAqIHN0YW5kLWlucyB0aGF0IHJlcHJlc2VudCBuZXN0ZWQgVW5pY29kZU1hdGNoZXIgb2JqZWN0cy4KKyAgICAgKiBAcGFyYW0gc2VnbWVudE51bSB0aGUgc2VnbWVudCBudW1iZXIgZnJvbSAxLi5uLCBvciAwIGlmIHRoaXMgaXMKKyAgICAgKiBub3QgYSBzZWdtZW50LgorICAgICAqIEBwYXJhbSB0aGVEYXRhIGNvbnRleHQgb2JqZWN0IG1hcHBpbmcgc3RhbmQtaW5zIHRvCisgICAgICogVW5pY29kZU1hdGNoZXIgb2JqZWN0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nTWF0Y2hlcihTdHJpbmcgdGhlU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWdtZW50TnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLkRhdGEgdGhlRGF0YSkgeworICAgICAgICBkYXRhID0gdGhlRGF0YTsKKyAgICAgICAgcGF0dGVybiA9IHRoZVN0cmluZzsKKyAgICAgICAgbWF0Y2hTdGFydCA9IG1hdGNoTGltaXQgPSAtMTsKKyAgICAgICAgc2VnbWVudE51bWJlciA9IHNlZ21lbnROdW07CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbWF0Y2hlciB0aGF0IG1hdGNoZXMgYSBzdWJzdHJpbmcgb2YgdGhlIGdpdmVuCisgICAgICogcGF0dGVybiBzdHJpbmcuCisgICAgICogQHBhcmFtIHRoZVN0cmluZyB0aGUgcGF0dGVybiB0byBiZSBtYXRjaGVkLCBwb3NzaWJseSBjb250YWluaW5nCisgICAgICogc3RhbmQtaW5zIHRoYXQgcmVwcmVzZW50IG5lc3RlZCBVbmljb2RlTWF0Y2hlciBvYmplY3RzLgorICAgICAqIEBwYXJhbSBzdGFydCBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlU3RyaW5nIHRvIGJlIG1hdGNoZWQKKyAgICAgKiBAcGFyYW0gbGltaXQgaW5kZXggYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZVN0cmluZyB0byBiZQorICAgICAqIG1hdGNoZWQuCisgICAgICogQHBhcmFtIHNlZ21lbnROdW0gdGhlIHNlZ21lbnQgbnVtYmVyIGZyb20gMS4ubiwgb3IgMCBpZiB0aGlzIGlzCisgICAgICogbm90IGEgc2VnbWVudC4KKyAgICAgKiBAcGFyYW0gdGhlRGF0YSBjb250ZXh0IG9iamVjdCBtYXBwaW5nIHN0YW5kLWlucyB0bworICAgICAqIFVuaWNvZGVNYXRjaGVyIG9iamVjdHMuCisgICAgICovCisgICAgcHVibGljIFN0cmluZ01hdGNoZXIoU3RyaW5nIHRoZVN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWdtZW50TnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLkRhdGEgdGhlRGF0YSkgeworICAgICAgICB0aGlzKHRoZVN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGxpbWl0KSwgc2VnbWVudE51bSwgdGhlRGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50IFVuaWNvZGVNYXRjaGVyCisgICAgICovCisgICAgcHVibGljIGludCBtYXRjaGVzKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIGludFtdIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGluY3JlbWVudGFsKSB7CisgICAgICAgIC8vIE5vdGUgKDEpOiBXZSBwcm9jZXNzIHRleHQgaW4gMTYtYml0IGNvZGUgdW5pdHMsIHJhdGhlciB0aGFuCisgICAgICAgIC8vIDMyLWJpdCBjb2RlIHBvaW50cy4gIFRoaXMgd29ya3MgYmVjYXVzZSBzdGFuZC1pbnMgYXJlCisgICAgICAgIC8vIGFsd2F5cyBpbiB0aGUgQk1QIGFuZCBiZWNhdXNlIHdlIGFyZSBkb2luZyBhIGxpdGVyYWwgbWF0Y2gKKyAgICAgICAgLy8gb3BlcmF0aW9uLCB3aGljaCBjYW4gYmUgZG9uZSAxNi1iaXRzIGF0IGEgdGltZS4KKyAgICAgICAgaW50IGk7CisgICAgICAgIGludFtdIGN1cnNvciA9IG5ldyBpbnRbXSB7IG9mZnNldFswXSB9OworICAgICAgICBpZiAobGltaXQgPCBjdXJzb3JbMF0pIHsKKyAgICAgICAgICAgIC8vIE1hdGNoIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbgorICAgICAgICAgICAgZm9yIChpPXBhdHRlcm4ubGVuZ3RoKCktMTsgaT49MDsgLS1pKSB7CisgICAgICAgICAgICAgICAgY2hhciBrZXlDaGFyID0gcGF0dGVybi5jaGFyQXQoaSk7IC8vIE9LOyBzZWUgbm90ZSAoMSkgYWJvdmUKKyAgICAgICAgICAgICAgICBVbmljb2RlTWF0Y2hlciBzdWJtID0gZGF0YS5sb29rdXBNYXRjaGVyKGtleUNoYXIpOworICAgICAgICAgICAgICAgIGlmIChzdWJtID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnNvclswXSA+IGxpbWl0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBrZXlDaGFyID09IHRleHQuY2hhckF0KGN1cnNvclswXSkpIHsgLy8gT0s7IHNlZSBub3RlICgxKSBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgLS1jdXJzb3JbMF07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVV9NSVNNQVRDSDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCBtID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym0ubWF0Y2hlcyh0ZXh0LCBjdXJzb3IsIGxpbWl0LCBpbmNyZW1lbnRhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtICE9IFVfTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBtYXRjaCBwb3NpdGlvbiwgYnV0IGFkanVzdCBmb3IgYSBub3JtYWwKKyAgICAgICAgICAgIC8vIGZvcndhcmQgc3RhcnQsIGxpbWl0LCBhbmQgb25seSBpZiBhIHByaW9yIG1hdGNoIGRvZXMgbm90CisgICAgICAgICAgICAvLyBleGlzdCAtLSB3ZSB3YW50IHRoZSByaWdodG1vc3QgbWF0Y2guCisgICAgICAgICAgICBpZiAobWF0Y2hTdGFydCA8IDApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFN0YXJ0ID0gY3Vyc29yWzBdKzE7CisgICAgICAgICAgICAgICAgbWF0Y2hMaW1pdCA9IG9mZnNldFswXSsxOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpPTA7IGk8cGF0dGVybi5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudGFsICYmIGN1cnNvclswXSA9PSBsaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBjb250ZXh0IGxpbWl0IHdpdGhvdXQgYSBtaXNtYXRjaCBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8gd2l0aG91dCBjb21wbGV0aW5nIG91ciBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVfUEFSVElBTF9NQVRDSDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2hhciBrZXlDaGFyID0gcGF0dGVybi5jaGFyQXQoaSk7IC8vIE9LOyBzZWUgbm90ZSAoMSkgYWJvdmUKKyAgICAgICAgICAgICAgICBVbmljb2RlTWF0Y2hlciBzdWJtID0gZGF0YS5sb29rdXBNYXRjaGVyKGtleUNoYXIpOworICAgICAgICAgICAgICAgIGlmIChzdWJtID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0aGUgY3Vyc29yIDwgbGltaXQgY2hlY2sgaWYKKyAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50YWwgaXMgdHJ1ZSAoYmVjYXVzZSBpdCdzIGRvbmUgYWJvdmUpOyBkbyBuZWVkCisgICAgICAgICAgICAgICAgICAgIC8vIGl0IG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnNvclswXSA8IGxpbWl0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBrZXlDaGFyID09IHRleHQuY2hhckF0KGN1cnNvclswXSkpIHsgLy8gT0s7IHNlZSBub3RlICgxKSBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgKytjdXJzb3JbMF07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVV9NSVNNQVRDSDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCBtID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym0ubWF0Y2hlcyh0ZXh0LCBjdXJzb3IsIGxpbWl0LCBpbmNyZW1lbnRhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtICE9IFVfTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBtYXRjaCBwb3NpdGlvbgorICAgICAgICAgICAgbWF0Y2hTdGFydCA9IG9mZnNldFswXTsKKyAgICAgICAgICAgIG1hdGNoTGltaXQgPSBjdXJzb3JbMF07CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXRbMF0gPSBjdXJzb3JbMF07CisgICAgICAgIHJldHVybiBVX01BVENIOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudCBVbmljb2RlTWF0Y2hlcgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9QYXR0ZXJuKGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHF1b3RlQnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpZiAoc2VnbWVudE51bWJlciA+IDApIHsgLy8gaS5lLiwgaWYgdGhpcyBpcyBhIHNlZ21lbnQKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJygnKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpPTA7IGk8cGF0dGVybi5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGtleUNoYXIgPSBwYXR0ZXJuLmNoYXJBdChpKTsgLy8gT0s7IHNlZSBub3RlICgxKSBhYm92ZQorICAgICAgICAgICAgVW5pY29kZU1hdGNoZXIgbSA9IGRhdGEubG9va3VwTWF0Y2hlcihrZXlDaGFyKTsKKyAgICAgICAgICAgIGlmIChtID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBVdGlsaXR5LmFwcGVuZFRvUnVsZShyZXN1bHQsIGtleUNoYXIsIGZhbHNlLCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBVdGlsaXR5LmFwcGVuZFRvUnVsZShyZXN1bHQsIG0udG9QYXR0ZXJuKGVzY2FwZVVucHJpbnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzZWdtZW50TnVtYmVyID4gMCkgeyAvLyBpLmUuLCBpZiB0aGlzIGlzIGEgc2VnbWVudAorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOworICAgICAgICB9CisgICAgICAgIC8vIEZsdXNoIHF1b3RlQnVmIG91dCB0byByZXN1bHQKKyAgICAgICAgVXRpbGl0eS5hcHBlbmRUb1J1bGUocmVzdWx0LCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudCBVbmljb2RlTWF0Y2hlcgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXNJbmRleFZhbHVlKGludCB2KSB7CisgICAgICAgIGlmIChwYXR0ZXJuLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGludCBjID0gVVRGMTYuY2hhckF0KHBhdHRlcm4sIDApOworICAgICAgICBVbmljb2RlTWF0Y2hlciBtID0gZGF0YS5sb29rdXBNYXRjaGVyKGMpOworICAgICAgICByZXR1cm4gKG0gPT0gbnVsbCkgPyAoKGMgJiAweEZGKSA9PSB2KSA6IG0ubWF0Y2hlc0luZGV4VmFsdWUodik7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gb2YgVW5pY29kZU1hdGNoZXIgQVBJLiAgVW5pb24gdGhlIHNldCBvZiBhbGwKKyAgICAgKiBjaGFyYWN0ZXJzIHRoYXQgbWF5IGJlIG1hdGNoZWQgYnkgdGhpcyBvYmplY3QgaW50byB0aGUgZ2l2ZW4KKyAgICAgKiBzZXQuCisgICAgICogQHBhcmFtIHRvVW5pb25UbyB0aGUgc2V0IGludG8gd2hpY2ggdG8gdW5pb24gdGhlIHNvdXJjZSBjaGFyYWN0ZXJzCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkTWF0Y2hTZXRUbyhVbmljb2RlU2V0IHRvVW5pb25UbykgeworICAgICAgICBpbnQgY2g7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxwYXR0ZXJuLmxlbmd0aCgpOyBpKz1VVEYxNi5nZXRDaGFyQ291bnQoY2gpKSB7CisgICAgICAgICAgICBjaCA9IFVURjE2LmNoYXJBdChwYXR0ZXJuLCBpKTsKKyAgICAgICAgICAgIFVuaWNvZGVNYXRjaGVyIG1hdGNoZXIgPSBkYXRhLmxvb2t1cE1hdGNoZXIoY2gpOworICAgICAgICAgICAgaWYgKG1hdGNoZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRvVW5pb25Uby5hZGQoY2gpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVyLmFkZE1hdGNoU2V0VG8odG9VbmlvblRvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVuaWNvZGVSZXBsYWNlciBBUEkKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHJlcGxhY2UoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgIGludFtdIGN1cnNvcikgeworCisgICAgICAgIGludCBvdXRMZW4gPSAwOworCisgICAgICAgIC8vIENvcHkgc2VnbWVudCB3aXRoIG91dC1vZi1iYW5kIGRhdGEKKyAgICAgICAgaW50IGRlc3QgPSBsaW1pdDsKKyAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIG1hdGNoLCB0aGF0IG1lYW5zIHRoYXQgYSBxdWFudGlmaWVyCisgICAgICAgIC8vIG1hdGNoZWQgemVyby1sZW5ndGguICBFLmcuLCB4IChhKSogeSBtYXRjaGVkICJ4eSIuCisgICAgICAgIGlmIChtYXRjaFN0YXJ0ID49IDApIHsKKyAgICAgICAgICAgIGlmIChtYXRjaFN0YXJ0ICE9IG1hdGNoTGltaXQpIHsKKyAgICAgICAgICAgICAgICB0ZXh0LmNvcHkobWF0Y2hTdGFydCwgbWF0Y2hMaW1pdCwgZGVzdCk7CisgICAgICAgICAgICAgICAgb3V0TGVuID0gbWF0Y2hMaW1pdCAtIG1hdGNoU3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0ZXh0LnJlcGxhY2Uoc3RhcnQsIGxpbWl0LCAiIik7IC8vIGRlbGV0ZSBvcmlnaW5hbCB0ZXh0CisKKyAgICAgICAgcmV0dXJuIG91dExlbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbmljb2RlUmVwbGFjZXIgQVBJCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1JlcGxhY2VyUGF0dGVybihib29sZWFuIGVzY2FwZVVucHJpbnRhYmxlKSB7CisgICAgICAgIC8vIGFzc2VydChzZWdtZW50TnVtYmVyID4gMCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciBydWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiJCIpOworICAgICAgICBVdGlsaXR5LmFwcGVuZE51bWJlcihydWxlLCBzZWdtZW50TnVtYmVyLCAxMCwgMSk7CisgICAgICAgIHJldHVybiBydWxlLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFueSBtYXRjaCBkYXRhLiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgcGVyZm9ybWluZyBhCisgICAgICogc2V0IG9mIG1hdGNoZXMgd2l0aCB0aGlzIHNlZ21lbnQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVzZXRNYXRjaCgpIHsKKyAgICAgICAgbWF0Y2hTdGFydCA9IG1hdGNoTGltaXQgPSAtMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbmlvbiB0aGUgc2V0IG9mIGFsbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IG91dHB1dCBieSB0aGlzIG9iamVjdAorICAgICAqIGludG8gdGhlIGdpdmVuIHNldC4KKyAgICAgKiBAcGFyYW0gdG9VbmlvblRvIHRoZSBzZXQgaW50byB3aGljaCB0byB1bmlvbiB0aGUgb3V0cHV0IGNoYXJhY3RlcnMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRSZXBsYWNlbWVudFNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKSB7CisgICAgICAgIC8vIFRoZSBvdXRwdXQgb2YgdGhpcyByZXBsYWNlciB2YXJpZXM7IGl0IGlzIHRoZSBzb3VyY2UgdGV4dCBiZXR3ZWVuCisgICAgICAgIC8vIG1hdGNoU3RhcnQgYW5kIG1hdGNoTGltaXQuICBTaW5jZSB0aGlzIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlCisgICAgICAgIC8vIGlucHV0IHRleHQsIHdlIGNhbid0IGNvbXB1dGUgaXQgaGVyZS4gIFdlIGNhbiBlaXRoZXIgZG8gbm90aGluZworICAgICAgICAvLyBvciB3ZSBjYW4gYWRkIEFMTCBjaGFyYWN0ZXJzIHRvIHRoZSBzZXQuICBJdCdzIHByb2JhYmx5IG1vcmUgdXNlZnVsCisgICAgICAgIC8vIHRvIGRvIG5vdGhpbmcuCisgICAgfQorfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvU3RyaW5nUmVwbGFjZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ1JlcGxhY2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY4YWRlNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ1JlcGxhY2VyLmphdmEKQEAgLTAsMCArMSwzMjggQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChjKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisqICAgYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMS8xNC8yMDAyICBhbGl1ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CisKKy8qKgorICogQSByZXBsYWNlciB0aGF0IHByb2R1Y2VzIHN0YXRpYyB0ZXh0IGFzIGl0cyBvdXRwdXQuICBUaGUgdGV4dCBtYXkKKyAqIGNvbnRhaW4gdHJhbnNsaXRlcmF0b3Igc3RhbmQtaW4gY2hhcmFjdGVycyB0aGF0IHJlcHJlc2VudCBuZXN0ZWQKKyAqIFVuaWNvZGVSZXBsYWNlciBvYmplY3RzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8gZW5jb2RlIGEgdHJlZSBvZgorICogcmVwbGFjZXJzIGluIGEgU3RyaW5nUmVwbGFjZXIuICBBIFN0cmluZ1JlcGxhY2VyIHRoYXQgY29udGFpbnMgc3VjaAorICogc3RhbmQtaW5zIGlzIGNhbGxlZCBhIDxlbT5jb21wbGV4PC9lbT4gU3RyaW5nUmVwbGFjZXIuICBBIGNvbXBsZXgKKyAqIFN0cmluZ1JlcGxhY2VyIGhhcyBhIHNsb3dlciBwcm9jZXNzaW5nIGxvb3AgdGhhbiBhIG5vbi1jb21wbGV4IG9uZS4KKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqLworY2xhc3MgU3RyaW5nUmVwbGFjZXIgaW1wbGVtZW50cyBVbmljb2RlUmVwbGFjZXIgeworCisgICAgLyoqCisgICAgICogT3V0cHV0IHRleHQsIHBvc3NpYmx5IGNvbnRhaW5pbmcgc3RhbmQtaW4gY2hhcmFjdGVycyB0aGF0CisgICAgICogcmVwcmVzZW50IG5lc3RlZCBVbmljb2RlUmVwbGFjZXJzLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIG91dHB1dDsKKworICAgIC8qKgorICAgICAqIEN1cnNvciBwb3NpdGlvbi4gIFZhbHVlIGlzIGlnbm9yZWQgaWYgaGFzQ3Vyc29yIGlzIGZhbHNlLgorICAgICAqLworICAgIHByaXZhdGUgaW50IGN1cnNvclBvczsKKworICAgIC8qKgorICAgICAqIFRydWUgaWYgdGhpcyBvYmplY3Qgb3V0cHV0cyBhIGN1cnNvciBwb3NpdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaGFzQ3Vyc29yOworCisgICAgLyoqCisgICAgICogQSBjb21wbGV4IG9iamVjdCBjb250YWlucyBuZXN0ZWQgcmVwbGFjZXJzIGFuZCByZXF1aXJlcyBtb3JlCisgICAgICogY29tcGxleCBwcm9jZXNzaW5nLiAgU3RyaW5nUmVwbGFjZXJzIGFyZSBpbml0aWFsbHkgYXNzdW1lZCB0bworICAgICAqIGJlIGNvbXBsZXguICBJZiBubyBuZXN0ZWQgcmVwbGFjZXJzIGFyZSBzZWVuIGR1cmluZyBwcm9jZXNzaW5nLAorICAgICAqIHRoZW4gaXNDb21wbGV4IGlzIHNldCB0byBmYWxzZSwgYW5kIGZ1dHVyZSByZXBsYWNlbWVudHMgYXJlCisgICAgICogc2hvcnQgY2lyY3VpdGVkIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGlzQ29tcGxleDsKKworICAgIC8qKgorICAgICAqIE9iamVjdCB0aGF0IHRyYW5zbGF0ZXMgc3RhbmQtaW4gY2hhcmFjdGVycyBpbiAnb3V0cHV0JyB0bworICAgICAqIFVuaWNvZGVSZXBsYWNlciBvYmplY3RzLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuRGF0YSBkYXRhOworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgU3RyaW5nUmVwbGFjZXIgdGhhdCBzZXRzIHRoZSBlbWl0cyB0aGUgZ2l2ZW4gb3V0cHV0CisgICAgICogdGV4dCBhbmQgc2V0cyB0aGUgY3Vyc29yIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAgICAgKiBAcGFyYW0gdGhlT3V0cHV0IHRleHQgdGhhdCB3aWxsIHJlcGxhY2UgaW5wdXQgdGV4dCB3aGVuIHRoZQorICAgICAqIHJlcGxhY2UoKSBtZXRob2QgaXMgY2FsbGVkLiAgTWF5IGNvbnRhaW4gc3RhbmQtaW4gY2hhcmFjdGVycworICAgICAqIHRoYXQgcmVwcmVzZW50IG5lc3RlZCByZXBsYWNlcnMuCisgICAgICogQHBhcmFtIHRoZUN1cnNvclBvcyBjdXJzb3IgcG9zaXRpb24gdGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5CisgICAgICogdGhlIHJlcGxhY2UoKSBtZXRob2QKKyAgICAgKiBAcGFyYW0gdGhlRGF0YSB0cmFuc2xpdGVyYXRvciBjb250ZXh0IG9iamVjdCB0aGF0IHRyYW5zbGF0ZXMKKyAgICAgKiBzdGFuZC1pbiBjaGFyYWN0ZXJzIHRvIFVuaWNvZGVSZXBsYWNlciBvYmplY3RzCisgICAgICovCisgICAgcHVibGljIFN0cmluZ1JlcGxhY2VyKFN0cmluZyB0aGVPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aGVDdXJzb3JQb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLkRhdGEgdGhlRGF0YSkgeworICAgICAgICBvdXRwdXQgPSB0aGVPdXRwdXQ7CisgICAgICAgIGN1cnNvclBvcyA9IHRoZUN1cnNvclBvczsKKyAgICAgICAgaGFzQ3Vyc29yID0gdHJ1ZTsKKyAgICAgICAgZGF0YSA9IHRoZURhdGE7CisgICAgICAgIGlzQ29tcGxleCA9IHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgU3RyaW5nUmVwbGFjZXIgdGhhdCBzZXRzIHRoZSBlbWl0cyB0aGUgZ2l2ZW4gb3V0cHV0CisgICAgICogdGV4dCBhbmQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjdXJzb3IuCisgICAgICogQHBhcmFtIHRoZU91dHB1dCB0ZXh0IHRoYXQgd2lsbCByZXBsYWNlIGlucHV0IHRleHQgd2hlbiB0aGUKKyAgICAgKiByZXBsYWNlKCkgbWV0aG9kIGlzIGNhbGxlZC4gIE1heSBjb250YWluIHN0YW5kLWluIGNoYXJhY3RlcnMKKyAgICAgKiB0aGF0IHJlcHJlc2VudCBuZXN0ZWQgcmVwbGFjZXJzLgorICAgICAqIEBwYXJhbSB0aGVEYXRhIHRyYW5zbGl0ZXJhdG9yIGNvbnRleHQgb2JqZWN0IHRoYXQgdHJhbnNsYXRlcworICAgICAqIHN0YW5kLWluIGNoYXJhY3RlcnMgdG8gVW5pY29kZVJlcGxhY2VyIG9iamVjdHMKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nUmVwbGFjZXIoU3RyaW5nIHRoZU91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuRGF0YSB0aGVEYXRhKSB7CisgICAgICAgIG91dHB1dCA9IHRoZU91dHB1dDsKKyAgICAgICAgY3Vyc29yUG9zID0gMDsKKyAgICAgICAgaGFzQ3Vyc29yID0gZmFsc2U7CisgICAgICAgIGRhdGEgPSB0aGVEYXRhOworICAgICAgICBpc0NvbXBsZXggPSB0cnVlOworICAgIH0KKworLy89ICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZVJlcGxhY2VyIHZhbHVlT2YoU3RyaW5nIG91dHB1dCwKKy8vPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3JQb3MsCisvLz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvci5EYXRhIGRhdGEpIHsKKy8vPSAgICAgICAgaWYgKG91dHB1dC5sZW5ndGgoKSA9PSAxKSB7CisvLz0gICAgICAgICAgICBjaGFyIGMgPSBvdXRwdXQuY2hhckF0KDApOworLy89ICAgICAgICAgICAgVW5pY29kZVJlcGxhY2VyIHIgPSBkYXRhLmxvb2t1cFJlcGxhY2VyKGMpOworLy89ICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgeworLy89ICAgICAgICAgICAgICAgIHJldHVybiByOworLy89ICAgICAgICAgICAgfQorLy89ICAgICAgICB9CisvLz0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nUmVwbGFjZXIob3V0cHV0LCBjdXJzb3JQb3MsIGRhdGEpOworLy89ICAgIH0KKworICAgIC8qKgorICAgICAqIFVuaWNvZGVSZXBsYWNlciBBUEkKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHJlcGxhY2UoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgIGludFtdIGN1cnNvcikgeworICAgICAgICBpbnQgb3V0TGVuOworICAgICAgICBpbnQgbmV3U3RhcnQgPSAwOworCisgICAgICAgIC8vIE5PVEU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBfYWx3YXlzXyBydW4gdGhlIGNvbXBsZXgKKyAgICAgICAgLy8gcHJvY2Vzc2luZyBjb2RlOyBqdXN0IHNsb3dlci4gIElmIG5vdCwgdGhlbiB0aGVyZSBpcyBhIGJ1ZworICAgICAgICAvLyBpbiB0aGUgY29tcGxleCBwcm9jZXNzaW5nIGNvZGUuCisKKyAgICAgICAgLy8gU2ltcGxlIChubyBuZXN0ZWQgcmVwbGFjZXJzKSBQcm9jZXNzaW5nIENvZGUgOgorICAgICAgICBpZiAoIWlzQ29tcGxleCkgeworICAgICAgICAgICAgdGV4dC5yZXBsYWNlKHN0YXJ0LCBsaW1pdCwgb3V0cHV0KTsKKyAgICAgICAgICAgIG91dExlbiA9IG91dHB1dC5sZW5ndGgoKTsKKworICAgICAgICAgICAgLy8gU2V0dXAgZGVmYXVsdCBjdXJzb3IgcG9zaXRpb24gKGZvciBjdXJzb3JQb3Mgd2l0aGluIG91dHB1dCkKKyAgICAgICAgICAgIG5ld1N0YXJ0ID0gY3Vyc29yUG9zOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29tcGxleCAobmVzdGVkIHJlcGxhY2VycykgUHJvY2Vzc2luZyBDb2RlIDoKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBXaGVuIHRoZXJlIGFyZSBzZWdtZW50cyB0byBiZSBjb3BpZWQsIHVzZSB0aGUgUmVwbGFjZWFibGUuY29weSgpCisgICAgICAgICAgICAgKiBBUEkgaW4gb3JkZXIgdG8gcmV0YWluIG91dC1vZi1iYW5kIGRhdGEuICBDb3B5IGV2ZXJ5dGhpbmcgdG8gdGhlCisgICAgICAgICAgICAgKiBlbmQgb2YgdGhlIHN0cmluZywgdGhlbiBjb3B5IHRoZW0gYmFjayBvdmVyIHRoZSBrZXkuICBUaGlzIHByZXNlcnZlcworICAgICAgICAgICAgICogdGhlIGludGVncml0eSBvZiBpbmRpY2VzIGludG8gdGhlIGtleSBhbmQgc3Vycm91bmRpbmcgY29udGV4dCB3aGlsZQorICAgICAgICAgICAgICogZ2VuZXJhdGluZyB0aGUgb3V0cHV0IHRleHQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBpbnQgb091dHB1dDsgLy8gb2Zmc2V0IGludG8gJ291dHB1dCcKKyAgICAgICAgICAgIGlzQ29tcGxleCA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBUaGUgdGVtcG9yYXJ5IGJ1ZmZlciBzdGFydHMgYXQgdGVtcFN0YXJ0LCBhbmQgZXh0ZW5kcworICAgICAgICAgICAgLy8gdG8gZGVzdExpbWl0ICsgdGVtcEV4dHJhLiAgVGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgaGFzIGEgc2luZ2xlCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgZnJvbSBiZWZvcmUgdGhlIGtleS4gIFRoaXMgcHJvdmlkZXMgc3R5bGUKKyAgICAgICAgICAgIC8vIGRhdGEgd2hlbiBhZGRpdGlvbiBjaGFyYWN0ZXJzIGFyZSBmaWxsZWQgaW50byB0aGUKKyAgICAgICAgICAgIC8vIHRlbXBvcmFyeSBidWZmZXIuICBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIHRoZSBsZWZ0LCB1c2UKKyAgICAgICAgICAgIC8vIHRoZSBub24tY2hhcmFjdGVyIFUrRkZGRiwgd2hpY2ggUmVwbGFjZWFibGUgc3ViY2xhc3NlcworICAgICAgICAgICAgLy8gc2hvdWxkIHRyZWF0IHNwZWNpYWxseSBhcyBhICJuby1zdHlsZSBjaGFyYWN0ZXIuIgorICAgICAgICAgICAgLy8gZGVzdFN0YXJ0IHBvaW50cyB0byB0aGUgcG9pbnQgYWZ0ZXIgdGhlIHN0eWxlIGNvbnRleHQKKyAgICAgICAgICAgIC8vIGNoYXJhY3Rlciwgc28gaXQgaXMgdGVtcFN0YXJ0KzEgb3IgdGVtcFN0YXJ0KzIuCisgICAgICAgICAgICBpbnQgdGVtcFN0YXJ0ID0gdGV4dC5sZW5ndGgoKTsgLy8gc3RhcnQgb2YgdGVtcCBidWZmZXIKKyAgICAgICAgICAgIGludCBkZXN0U3RhcnQgPSB0ZW1wU3RhcnQ7IC8vIGNvcHkgbmV3IHRleHQgdG8gaGVyZQorICAgICAgICAgICAgaWYgKHN0YXJ0ID4gMCkgeworICAgICAgICAgICAgICAgIGludCBsZW4gPSBVVEYxNi5nZXRDaGFyQ291bnQodGV4dC5jaGFyMzJBdChzdGFydC0xKSk7CisgICAgICAgICAgICAgICAgdGV4dC5jb3B5KHN0YXJ0LWxlbiwgc3RhcnQsIHRlbXBTdGFydCk7CisgICAgICAgICAgICAgICAgZGVzdFN0YXJ0ICs9IGxlbjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKHRlbXBTdGFydCwgdGVtcFN0YXJ0LCAiXHVGRkZGIik7CisgICAgICAgICAgICAgICAgZGVzdFN0YXJ0Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZGVzdExpbWl0ID0gZGVzdFN0YXJ0OworICAgICAgICAgICAgaW50IHRlbXBFeHRyYSA9IDA7IC8vIHRlbXAgY2hhcnMgYWZ0ZXIgZGVzdExpbWl0CisKKyAgICAgICAgICAgIGZvciAob091dHB1dD0wOyBvT3V0cHV0PG91dHB1dC5sZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgaWYgKG9PdXRwdXQgPT0gY3Vyc29yUG9zKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvcgorICAgICAgICAgICAgICAgICAgICBuZXdTdGFydCA9IGRlc3RMaW1pdCAtIGRlc3RTdGFydDsgLy8gcmVsYXRpdmUgdG8gc3RhcnQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IGMgPSBVVEYxNi5jaGFyQXQob3V0cHV0LCBvT3V0cHV0KTsKKworICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGF0IHRoZSBsYXN0IHBvc2l0aW9uIGNvcHkgdGhlIHJpZ2h0IHN0eWxlCisgICAgICAgICAgICAgICAgLy8gY29udGV4dCBjaGFyYWN0ZXIgaW50byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlci4gIFdlIGRvbid0CisgICAgICAgICAgICAgICAgLy8gZG8gdGhpcyBiZWZvcmUgYmVjYXVzZSBpdCB3aWxsIHByb3ZpZGUgYW4gaW5jb3JyZWN0CisgICAgICAgICAgICAgICAgLy8gcmlnaHQgY29udGV4dCBmb3IgcHJldmlvdXMgcmVwbGFjZSgpIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgaW50IG5leHRJbmRleCA9IG9PdXRwdXQgKyBVVEYxNi5nZXRDaGFyQ291bnQoYyk7CisgICAgICAgICAgICAgICAgaWYgKG5leHRJbmRleCA9PSBvdXRwdXQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcEV4dHJhID0gVVRGMTYuZ2V0Q2hhckNvdW50KHRleHQuY2hhcjMyQXQobGltaXQpKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dC5jb3B5KGxpbWl0LCBsaW1pdCt0ZW1wRXh0cmEsIGRlc3RMaW1pdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVW5pY29kZVJlcGxhY2VyIHIgPSBkYXRhLmxvb2t1cFJlcGxhY2VyKGMpOworICAgICAgICAgICAgICAgIGlmIChyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjdW11bGF0ZSBzdHJhaWdodCAobm9uLXNlZ21lbnQpIHRleHQuCisgICAgICAgICAgICAgICAgICAgIFVURjE2LmFwcGVuZChidWYsIGMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlzQ29tcGxleCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGFueSBhY2N1bXVsYXRlZCBzdHJhaWdodCB0ZXh0LgorICAgICAgICAgICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKGRlc3RMaW1pdCwgZGVzdExpbWl0LCBidWYudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0TGltaXQgKz0gYnVmLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIERlbGVnYXRlIG91dHB1dCBnZW5lcmF0aW9uIHRvIHJlcGxhY2VyIG9iamVjdAorICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gci5yZXBsYWNlKHRleHQsIGRlc3RMaW1pdCwgZGVzdExpbWl0LCBjdXJzb3IpOworICAgICAgICAgICAgICAgICAgICBkZXN0TGltaXQgKz0gbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvT3V0cHV0ID0gbmV4dEluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSW5zZXJ0IGFueSBhY2N1bXVsYXRlZCBzdHJhaWdodCB0ZXh0LgorICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoZGVzdExpbWl0LCBkZXN0TGltaXQsIGJ1Zi50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBkZXN0TGltaXQgKz0gYnVmLmxlbmd0aCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9PdXRwdXQgPT0gY3Vyc29yUG9zKSB7CisgICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yCisgICAgICAgICAgICAgICAgbmV3U3RhcnQgPSBkZXN0TGltaXQgLSBkZXN0U3RhcnQ7IC8vIHJlbGF0aXZlIHRvIHN0YXJ0CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dExlbiA9IGRlc3RMaW1pdCAtIGRlc3RTdGFydDsKKworICAgICAgICAgICAgLy8gQ29weSBuZXcgdGV4dCB0byBzdGFydCwgYW5kIGRlbGV0ZSBpdAorICAgICAgICAgICAgdGV4dC5jb3B5KGRlc3RTdGFydCwgZGVzdExpbWl0LCBzdGFydCk7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UodGVtcFN0YXJ0ICsgb3V0TGVuLCBkZXN0TGltaXQgKyB0ZW1wRXh0cmEgKyBvdXRMZW4sICIiKTsKKworICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBvbGQgdGV4dCAodGhlIGtleSkKKyAgICAgICAgICAgIHRleHQucmVwbGFjZShzdGFydCArIG91dExlbiwgbGltaXQgKyBvdXRMZW4sICIiKTsKKyAgICAgICAgfSAgICAgICAgCisKKyAgICAgICAgaWYgKGhhc0N1cnNvcikgeworICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBjdXJzb3IgZm9yIHBvc2l0aW9ucyBvdXRzaWRlIHRoZSBrZXkuICBUaGVzZQorICAgICAgICAgICAgLy8gcmVmZXIgdG8gY29kZSBwb2ludHMgcmF0aGVyIHRoYW4gY29kZSB1bml0cy4gIElmIGN1cnNvclBvcworICAgICAgICAgICAgLy8gaXMgd2l0aGluIHRoZSBvdXRwdXQgc3RyaW5nLCB0aGVuIHVzZSBuZXdTdGFydCwgd2hpY2ggaGFzCisgICAgICAgICAgICAvLyBhbHJlYWR5IGJlZW4gc2V0IGFib3ZlLgorICAgICAgICAgICAgaWYgKGN1cnNvclBvcyA8IDApIHsKKyAgICAgICAgICAgICAgICBuZXdTdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIGludCBuID0gY3Vyc29yUG9zOworICAgICAgICAgICAgICAgIC8vIE91dHNpZGUgdGhlIG91dHB1dCBzdHJpbmcsIGN1cnNvclBvcyBjb3VudHMgY29kZSBwb2ludHMKKyAgICAgICAgICAgICAgICB3aGlsZSAobiA8IDAgJiYgbmV3U3RhcnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1N0YXJ0IC09IFVURjE2LmdldENoYXJDb3VudCh0ZXh0LmNoYXIzMkF0KG5ld1N0YXJ0LTEpKTsKKyAgICAgICAgICAgICAgICAgICAgKytuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdTdGFydCArPSBuOworICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJzb3JQb3MgPiBvdXRwdXQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBuZXdTdGFydCA9IHN0YXJ0ICsgb3V0TGVuOworICAgICAgICAgICAgICAgIGludCBuID0gY3Vyc29yUG9zIC0gb3V0cHV0Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgIC8vIE91dHNpZGUgdGhlIG91dHB1dCBzdHJpbmcsIGN1cnNvclBvcyBjb3VudHMgY29kZSBwb2ludHMKKyAgICAgICAgICAgICAgICB3aGlsZSAobiA+IDAgJiYgbmV3U3RhcnQgPCB0ZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1N0YXJ0ICs9IFVURjE2LmdldENoYXJDb3VudCh0ZXh0LmNoYXIzMkF0KG5ld1N0YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIC0tbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV3U3RhcnQgKz0gbjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQ3Vyc29yIGlzIHdpdGhpbiBvdXRwdXQgc3RyaW5nLiAgSXQgaGFzIGJlZW4gc2V0IHVwIGFib3ZlCisgICAgICAgICAgICAgICAgLy8gdG8gYmUgcmVsYXRpdmUgdG8gc3RhcnQuCisgICAgICAgICAgICAgICAgbmV3U3RhcnQgKz0gc3RhcnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1cnNvclswXSA9IG5ld1N0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG91dExlbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbmljb2RlUmVwbGFjZXIgQVBJCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1JlcGxhY2VyUGF0dGVybihib29sZWFuIGVzY2FwZVVucHJpbnRhYmxlKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBydWxlID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmdCdWZmZXIgcXVvdGVCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgaW50IGN1cnNvciA9IGN1cnNvclBvczsKKworICAgICAgICAvLyBIYW5kbGUgYSBjdXJzb3IgcHJlY2VkaW5nIHRoZSBvdXRwdXQKKyAgICAgICAgaWYgKGhhc0N1cnNvciAmJiBjdXJzb3IgPCAwKSB7CisgICAgICAgICAgICB3aGlsZSAoY3Vyc29yKysgPCAwKSB7CisgICAgICAgICAgICAgICAgVXRpbGl0eS5hcHBlbmRUb1J1bGUocnVsZSwgJ0AnLCB0cnVlLCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGFuZCBhcHBlbmQgJ3wnIGJlbG93CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpPTA7IGk8b3V0cHV0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChoYXNDdXJzb3IgJiYgaSA9PSBjdXJzb3IpIHsKKyAgICAgICAgICAgICAgICBVdGlsaXR5LmFwcGVuZFRvUnVsZShydWxlLCAnfCcsIHRydWUsIGVzY2FwZVVucHJpbnRhYmxlLCBxdW90ZUJ1Zik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyIGMgPSBvdXRwdXQuY2hhckF0KGkpOyAvLyBPayB0byB1c2UgMTYtYml0cyBoZXJlCisKKyAgICAgICAgICAgIFVuaWNvZGVSZXBsYWNlciByID0gZGF0YS5sb29rdXBSZXBsYWNlcihjKTsKKyAgICAgICAgICAgIGlmIChyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBVdGlsaXR5LmFwcGVuZFRvUnVsZShydWxlLCBjLCBmYWxzZSwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoIiAiKTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKHIudG9SZXBsYWNlclBhdHRlcm4oZXNjYXBlVW5wcmludGFibGUpKTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICAgICAgVXRpbGl0eS5hcHBlbmRUb1J1bGUocnVsZSwgYnVmLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSBhIGN1cnNvciBhZnRlciB0aGUgb3V0cHV0LiAgVXNlID4gcmF0aGVyIHRoYW4gPj0gYmVjYXVzZQorICAgICAgICAvLyBpZiBjdXJzb3IgPT0gb3V0cHV0Lmxlbmd0aCgpIGl0IGlzIGF0IHRoZSBlbmQgb2YgdGhlIG91dHB1dCwKKyAgICAgICAgLy8gd2hpY2ggaXMgdGhlIGRlZmF1bHQgcG9zaXRpb24sIHNvIHdlIG5lZWQgbm90IGVtaXQgaXQuCisgICAgICAgIGlmIChoYXNDdXJzb3IgJiYgY3Vyc29yID4gb3V0cHV0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICBjdXJzb3IgLT0gb3V0cHV0Lmxlbmd0aCgpOworICAgICAgICAgICAgd2hpbGUgKGN1cnNvci0tID4gMCkgeworICAgICAgICAgICAgICAgIFV0aWxpdHkuYXBwZW5kVG9SdWxlKHJ1bGUsICdAJywgdHJ1ZSwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFV0aWxpdHkuYXBwZW5kVG9SdWxlKHJ1bGUsICd8JywgdHJ1ZSwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGbHVzaCBxdW90ZUJ1ZiBvdXQgdG8gcmVzdWx0CisgICAgICAgIFV0aWxpdHkuYXBwZW5kVG9SdWxlKHJ1bGUsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworCisgICAgICAgIHJldHVybiBydWxlLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVW5pb24gdGhlIHNldCBvZiBhbGwgY2hhcmFjdGVycyB0aGF0IG1heSBvdXRwdXQgYnkgdGhpcyBvYmplY3QKKyAgICAgKiBpbnRvIHRoZSBnaXZlbiBzZXQuCisgICAgICogQHBhcmFtIHRvVW5pb25UbyB0aGUgc2V0IGludG8gd2hpY2ggdG8gdW5pb24gdGhlIG91dHB1dCBjaGFyYWN0ZXJzCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkUmVwbGFjZW1lbnRTZXRUbyhVbmljb2RlU2V0IHRvVW5pb25UbykgeworICAgICAgICBpbnQgY2g7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxvdXRwdXQubGVuZ3RoKCk7IGkrPVVURjE2LmdldENoYXJDb3VudChjaCkpIHsKKyAgICAgICAgICAgIGNoID0gVVRGMTYuY2hhckF0KG91dHB1dCwgaSk7CisgICAgICAgICAgICBVbmljb2RlUmVwbGFjZXIgciA9IGRhdGEubG9va3VwUmVwbGFjZXIoY2gpOworICAgICAgICAgICAgaWYgKHIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRvVW5pb25Uby5hZGQoY2gpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByLmFkZFJlcGxhY2VtZW50U2V0VG8odG9VbmlvblRvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworLy9lb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ1NlYXJjaC5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvU3RyaW5nU2VhcmNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2I0NGFhYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N0cmluZ1NlYXJjaC5qYXZhCkBAIC0wLDAgKzEsMzE0MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvU3RyaW5nU2VhcmNoLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDI6Mzc6MjggJCAKKyAqICRSZXZpc2lvbjogMS4xNyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5TdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLk5vcm1hbGl6ZXJJbXBsOworCisvKioKKyAqIDxwPgorICogPGNvZGU+U3RyaW5nU2VhcmNoPC9jb2RlPiBpcyB0aGUgY29uY3JldGUgc3ViY2xhc3Mgb2YgCisgKiA8Y29kZT5TZWFyY2hJdGVyYXRvcjwvY29kZT4gdGhhdCBwcm92aWRlcyBsYW5ndWFnZS1zZW5zaXRpdmUgdGV4dCBzZWFyY2hpbmcgCisgKiBiYXNlZCBvbiB0aGUgY29tcGFyaXNvbiBydWxlcyBkZWZpbmVkIGluIGEge0BsaW5rIFJ1bGVCYXNlZENvbGxhdG9yfSBvYmplY3QuCisgKiA8L3A+CisgKiA8cD4KKyAqIDxjb2RlPlN0cmluZ1NlYXJjaDwvY29kZT4gdXNlcyBhIHZlcnNpb24gb2YgdGhlIGZhc3QgQm95ZXItTW9vcmUgc2VhcmNoCisgKiBhbGdvcml0aG0gdGhhdCBoYXMgYmVlbiBhZGFwdGVkIHRvIHdvcmsgd2l0aCB0aGUgbGFyZ2UgY2hhcmFjdGVyIHNldCBvZgorICogVW5pY29kZS4gUmVmZXIgdG8gCisgKiA8YSBocmVmPWh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvZG9jcy9wYXBlcnMvZWZmaWNpZW50X3RleHRfc2VhcmNoaW5nX2luX2phdmEuaHRtbD4KKyAqICJFZmZpY2llbnQgVGV4dCBTZWFyY2hpbmcgaW4gSmF2YSI8L2E+LCBwdWJsaXNoZWQgaW4gdGhlIAorICogPGk+SmF2YSBSZXBvcnQ8L2k+IG9uIEZlYnJ1YXJ5LCAxOTk5LCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgCisgKiBhbGdvcml0aG0uCisgKiA8L3A+CisgKiA8cD4KKyAqIFVzZXJzIGFyZSBhbHNvIHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gcmVhZCB0aGUgc2VjdGlvbiBvbiAKKyAqIDxhIGhyZWY9aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdS91c2VyZ3VpZGUvc2VhcmNoU3RyaW5nLmh0bWw+CisgKiBTdHJpbmcgU2VhcmNoPC9hPiBhbmQgCisgKiA8YSBocmVmPWh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvdXNlcmd1aWRlL0NvbGxhdGVfSW50cm8uaHRtbD4KKyAqIENvbGxhdGlvbjwvYT4gaW4gdGhlIHVzZXIgZ3VpZGUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIHRoaXMgY2xhc3MuCisgKiA8L3A+CisgKiA8cD4KKyAqIFN0cmluZyBzZWFyY2hpbmcgZ2V0cyBhbGl0dGxlIGNvbXBsaWNhdGVkIHdoZW4gYWNjZW50cyBhcmUgZW5jb3VudGVyZWQgYXQKKyAqIG1hdGNoIGJvdW5kYXJpZXMuIElmIGEgbWF0Y2ggaXMgZm91bmQgYW5kIGl0IGhhcyBwcmVjZWRpbmcgb3IgdHJhaWxpbmcgCisgKiBhY2NlbnRzIG5vdCBwYXJ0IG9mIHRoZSBtYXRjaCwgdGhlIHJlc3VsdCByZXR1cm5lZCB3aWxsIGluY2x1ZGUgdGhlIAorICogcHJlY2VkaW5nIGFjY2VudHMgdXAgdG8gdGhlIGZpcnN0IGJhc2UgY2hhcmFjdGVyLCBpZiB0aGUgcGF0dGVybiBzZWFyY2hlZCAKKyAqIGZvciBzdGFydHMgYW4gYWNjZW50LiBMaWtld2lzZSwgCisgKiBpZiB0aGUgcGF0dGVybiBlbmRzIHdpdGggYW4gYWNjZW50LCBhbGwgdHJhaWxpbmcgYWNjZW50cyB1cCB0byB0aGUgZmlyc3QKKyAqIGJhc2UgY2hhcmFjdGVyIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdC4KKyAqIDwvcD4KKyAqIDxwPgorICogRm9yIGV4YW1wbGUsIGlmIGEgbWF0Y2ggaXMgZm91bmQgaW4gdGFyZ2V0IHRleHQgImEmIzkyO3UwMzI1JiM5Mjt1MDMwMCIgZm9yIAorICogdGhlIHBhdHRlcm4KKyAqICJhJiM5Mjt1MDMyNSIsIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgU3RyaW5nU2VhcmNoIHdpbGwgYmUgdGhlIGluZGV4IDAgYW5kCisgKiBsZW5ndGggMyAmbHQ7MCwgMyZndDsuIElmIGEgbWF0Y2ggaXMgZm91bmQgaW4gdGhlIHRhcmdldCAKKyAqICJhJiM5Mjt1MDMyNSYjOTI7dTAzMDAiIAorICogZm9yIHRoZSBwYXR0ZXJuICImIzkyO3UwMzAwIiwgdGhlbiB0aGUgcmVzdWx0IHdpbGwgYmUgaW5kZXggMSBhbmQgbGVuZ3RoIDIgCisgKiA8MSwgMj4uCisgKiA8L3A+CisgKiA8cD4KKyAqIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBkZWNvbXBvc2l0aW9uIG1vZGUgaXMgb24gZm9yIHRoZSBSdWxlQmFzZWRDb2xsYXRvciwKKyAqIGFsbCBtYXRjaGVzIHRoYXQgc3RhcnRzIG9yIGVuZHMgd2l0aCBhbiBhY2NlbnQgd2lsbCBoYXZlIGl0cyByZXN1bHRzIGluY2x1ZGUgCisgKiBwcmVjZWRpbmcgb3IgZm9sbG93aW5nIGFjY2VudHMgcmVzcGVjdGl2ZWx5LiBGb3IgZXhhbXBsZSwgaWYgcGF0dGVybiAiYSIgaXMKKyAqIGxvb2tlZCBmb3IgaW4gdGhlIHRhcmdldCB0ZXh0ICImYWFjdXRlOyYjOTI7dTAzMjUiLCB0aGUgcmVzdWx0IHdpbGwgYmUKKyAqIGluZGV4IDAgYW5kIGxlbmd0aCAyICZsdDswLCAyJmd0Oy4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIFN0cmluZ1NlYXJjaCBjbGFzcyBwcm92aWRlcyB0d28gb3B0aW9ucyB0byBoYW5kbGUgYWNjZW50IG1hdGNoaW5nIAorICogZGVzY3JpYmVkIGJlbG93OgorICogPC9wPgorICogPHA+CisgKiBMZXQgUycgYmUgdGhlIHN1Yi1zdHJpbmcgb2YgYSB0ZXh0IHN0cmluZyBTIGJldHdlZW4gdGhlIG9mZnNldHMgc3RhcnQgYW5kIAorICogZW5kICZsdDtzdGFydCwgZW5kJmd0Oy4KKyAqIDxicj4KKyAqIEEgcGF0dGVybiBzdHJpbmcgUCBtYXRjaGVzIGEgdGV4dCBzdHJpbmcgUyBhdCB0aGUgb2Zmc2V0cyAmbHQ7c3RhcnQsIAorICogbGVuZ3RoJmd0OyAKKyAqIDxicj4KKyAqIGlmCisgKiA8cHJlPiAKKyAqIG9wdGlvbiAxLiBQIG1hdGNoZXMgc29tZSBjYW5vbmljYWwgZXF1aXZhbGVudCBzdHJpbmcgb2YgUycuIFN1cHBvc2UgdGhlIAorICogICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIHVzZWQgZm9yIHNlYXJjaGluZyBoYXMgYSBjb2xsYXRpb24gc3RyZW5ndGggb2YgCisgKiAgICAgICAgICAgVEVSVElBUlksIGFsbCBhY2NlbnRzIGFyZSBub24taWdub3JhYmxlLiBJZiB0aGUgcGF0dGVybiAKKyAqICAgICAgICAgICAiYSYjOTI7dTAzMDAiIGlzIHNlYXJjaGVkIGluIHRoZSB0YXJnZXQgdGV4dCAKKyAqICAgICAgICAgICAiYSYjOTI7dTAzMjUmIzkyO3UwMzAwIiwgCisgKiAgICAgICAgICAgYSBtYXRjaCB3aWxsIGJlIGZvdW5kLCBzaW5jZSB0aGUgdGFyZ2V0IHRleHQgaXMgY2Fub25pY2FsbHkgCisgKiAgICAgICAgICAgZXF1aXZhbGVudCB0byAiYSYjOTI7dTAzMDAmIzkyO3UwMzI1IgorICogb3B0aW9uIDIuIFAgbWF0Y2hlcyBTJyBhbmQgaWYgUCBzdGFydHMgb3IgZW5kcyB3aXRoIGEgY29tYmluaW5nIG1hcmssIAorICogICAgICAgICAgIHRoZXJlIGV4aXN0cyBubyBub24taWdub3JhYmxlIGNvbWJpbmluZyBtYXJrIGJlZm9yZSBvciBhZnRlciBTkiAKKyAqICAgICAgICAgICBpbiBTIHJlc3BlY3RpdmVseS4gRm9sbG93aW5nIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgcGF0dGVybiAKKyAqICAgICAgICAgICAiYSYjOTI7dTAzMDAiIHdpbGwgbm90IGZpbmQgYSBtYXRjaCBpbiAiYSYjOTI7dTAzMjUmIzkyO3UwMzAwIiwgCisgKiAgICAgICAgICAgc2luY2UKKyAqICAgICAgICAgICB0aGVyZSBleGlzdHMgYSBub24taWdub3JhYmxlIGFjY2VudCAnJiM5Mjt1MDMyNScgaW4gdGhlIG1pZGRsZSBvZiAKKyAqICAgICAgICAgICAnYScgYW5kICcmIzkyO3UwMzAwJy4gRXZlbiB3aXRoIGEgdGFyZ2V0IHRleHQgb2YgCisgKiAgICAgICAgICAgImEmIzkyO3UwMzAwJiM5Mjt1MDMyNSIgYSBtYXRjaCB3aWxsIG5vdCBiZSBmb3VuZCBiZWNhdXNlIG9mIHRoZSAKKyAqICAgICAgICAgICBub24taWdub3JhYmxlIHRyYWlsaW5nIGFjY2VudCAmIzkyO3UwMzI1LgorICogPC9wcmU+CisgKiBPcHRpb24gMi4gd2lsbCBiZSB0aGUgZGVmYXVsdCBtb2RlIGZvciBkZWFsaW5nIHdpdGggYm91bmRhcnkgYWNjZW50cyB1bmxlc3MKKyAqIHNwZWNpZmllZCB2aWEgdGhlIEFQSSBzZXRDYW5vbmljYWwoYm9vbGVhbikuCisgKiBPbmUgcmVzdHJpY3Rpb24gaXMgdG8gYmUgbm90ZWQgZm9yIG9wdGlvbiAxLiBDdXJyZW50bHkgdGhlcmUgYXJlIG5vIAorICogY29tcG9zaXRlIGNoYXJhY3RlcnMgdGhhdCBjb25zaXN0cyBvZiBhIGNoYXJhY3RlciB3aXRoIGNvbWJpbmluZyBjbGFzcyA+IDAgCisgKiBiZWZvcmUgYSBjaGFyYWN0ZXIgd2l0aCBjb21iaW5pbmcgY2xhc3MgPT0gMC4gSG93ZXZlciwgaWYgc3VjaCBhIGNoYXJhY3RlciAKKyAqIGV4aXN0cyBpbiB0aGUgZnV0dXJlLCB0aGUgU3RyaW5nU2VhcmNoIG1heSBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCBvcHRpb24gMQorICogd2hlbiBzdWNoIGNoYXJhY3RlcnMgYXJlIGVuY291bnRlcmVkLgorICogPC9wPgorICogPHA+CisgKiA8dHQ+U2VhcmNoSXRlcmF0b3I8L3R0PiBwcm92aWRlcyBBUElzIHRvIHNwZWNpZnkgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIAorICogd2l0aGluIHRoZSB0ZXh0IHN0cmluZyB0byBiZSBzZWFyY2hlZCwgZS5nLiA8dHQ+c2V0SW5kZXg8L3R0PiwKKyAqIDx0dD5wcmVjZWRpbmc8L3R0PiBhbmQgPHR0PmZvbGxvd2luZzwvdHQ+LiBTaW5jZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gd2lsbCAKKyAqIGJlIHNldCBhcyBpdCBpcyBzcGVjaWZpZWQsIHBsZWFzZSB0YWtlIG5vdGUgdGhhdCB0aGVyZSBhcmUgc29tZSBkYW5nZXJvdXMgCisgKiBwb3NpdGlvbnMgd2hpY2ggdGhlIHNlYXJjaCBtYXkgcmVuZGVyIGluY29ycmVjdCByZXN1bHRzOgorICogPHVsPgorICogPGxpPiBUaGUgbWlkc3Qgb2YgYSBzdWJzdHJpbmcgdGhhdCByZXF1aXJlcyBkZWNvbXBvc2l0aW9uLgorICogPGxpPiBJZiB0aGUgZm9sbG93aW5nIG1hdGNoIGlzIHRvIGJlIGZvdW5kLCB0aGUgcG9zaXRpb24gc2hvdWxkIG5vdCBiZSB0aGUKKyAqICAgICAgc2Vjb25kIGNoYXJhY3RlciB3aGljaCByZXF1aXJlcyB0byBiZSBzd2FwcGVkIHdpdGggdGhlIHByZWNlZGluZyAKKyAqICAgICAgY2hhcmFjdGVyLiBWaWNlIHZlcnNhLCBpZiB0aGUgcHJlY2VkaW5nIG1hdGNoIGlzIHRvIGJlIGZvdW5kLCAKKyAqICAgICAgcG9zaXRpb24gdG8gc2VhcmNoIGZyb20gc2hvdWxkIG5vdCBiZSB0aGUgZmlyc3QgY2hhcmFjdGVyIHdoaWNoIAorICogICAgICByZXF1aXJlcyB0byBiZSBzd2FwcGVkIHdpdGggdGhlIG5leHQgY2hhcmFjdGVyLiBFLmcgY2VydGFpbiBUaGFpIGFuZAorICogICAgICBMYW8gY2hhcmFjdGVycyByZXF1aXJlIHN3YXBwaW5nLgorICogPGxpPiBJZiBhIGZvbGxvd2luZyBwYXR0ZXJuIG1hdGNoIGlzIHRvIGJlIGZvdW5kLCBhbnkgcG9zaXRpb24gd2l0aGluIGEgCisgKiAgICAgIGNvbnRyYWN0aW5nIHNlcXVlbmNlIGV4Y2VwdCB0aGUgZmlyc3Qgd2lsbCBmYWlsLiBWaWNlIHZlcnNhIGlmIGEgCisgKiAgICAgIHByZWNlZGluZyBwYXR0ZXJuIG1hdGNoIGlzIHRvIGJlIGZvdW5kLCBhIGludmFsaWQgc3RhcnRpbmcgcG9pbnQgCisgKiAgICAgIHdvdWxkIGJlIGFueSBjaGFyYWN0ZXIgd2l0aGluIGEgY29udHJhY3Rpbmcgc2VxdWVuY2UgZXhjZXB0IHRoZSBsYXN0LgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhvdWdoIGNvbGxhdG9yIGF0dHJpYnV0ZXMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gd2hpbGUgCisgKiBwZXJmb3JtaW5nIG1hdGNoZXMsIHRoZXJlIGFyZSBubyBBUElzIHByb3ZpZGVkIGluIFN0cmluZ1NlYXJjaCBmb3Igc2V0dGluZyAKKyAqIGFuZCBnZXR0aW5nIHRoZSBhdHRyaWJ1dGVzLiBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBzZXQgYnkgZ2V0dGluZyB0aGUgCisgKiBjb2xsYXRvciBmcm9tIDx0dD5nZXRDb2xsYXRvcjwvdHQ+IGFuZCB1c2luZyB0aGUgQVBJcyBpbiAKKyAqIDx0dD5jb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yPC90dD4uIFRvIHVwZGF0ZSBTdHJpbmdTZWFyY2ggdG8gdGhlIG5ldyAKKyAqIGNvbGxhdG9yIGF0dHJpYnV0ZXMsIDx0dD5yZXNldCgpPC90dD4gb3IgCisgKiA8dHQ+c2V0Q29sbGF0b3IoUnVsZUJhc2VkQ29sbGF0b3IpPC90dD4gaGFzIHRvIGJlIGNhbGxlZC4KKyAqIDwvcD4KKyAqIDxwPgorICogQ29uc3VsdCB0aGUgCisgKiA8YSBocmVmPWh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvdXNlcmd1aWRlL3NlYXJjaFN0cmluZy5odG1sPgorICogU3RyaW5nIFNlYXJjaDwvYT4gdXNlciBndWlkZSBhbmQgdGhlIDxjb2RlPlNlYXJjaEl0ZXJhdG9yPC9jb2RlPiAKKyAqIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzIG9mIHVzZS4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBjbGFzcyBpcyBub3Qgc3ViY2xhc3NhYmxlCisgKiA8L3A+CisgKiBAc2VlIFNlYXJjaEl0ZXJhdG9yCisgKiBAc2VlIFJ1bGVCYXNlZENvbGxhdG9yCisgKiBAYXV0aG9yIExhdXJhIFdlcm5lciwgc3lud2VlCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworLy8gaW50ZXJuYWwgbm90ZXM6IGFsbCBtZXRob2RzIGRvIG5vdCBndWFyYW50ZWUgdGhlIGNvcnJlY3Qgc3RhdHVzIG9mIHRoZSAKKy8vIGNoYXJhY3Rlcml0ZXJhdG9yLiB0aGUgY2FsbGVyIGhhcyB0byBtYWludGFpbiB0aGUgb3JpZ2luYWwgaW5kZXggcG9zaXRpb24KKy8vIGlmIG5lY2Vzc2FyeS4gbWV0aG9kcyBjb3VsZCBjaGFuZ2UgdGhlIGluZGV4IHBvc2l0aW9uIGFzIGl0IGRlZW1zIGZpdAorcHVibGljIGZpbmFsIGNsYXNzIFN0cmluZ1NlYXJjaCBleHRlbmRzIFNlYXJjaEl0ZXJhdG9yCit7CisJCisJLy8gcHVibGljIGNvbnN0cnVjdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQorICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBpdGVyYXRvciB0byB1c2UgdGhlIGxhbmd1YWdlLXNwZWNpZmljIHJ1bGVzIGRlZmluZWQgaW4gCisgICAgICogdGhlIGFyZ3VtZW50IGNvbGxhdG9yIHRvIHNlYXJjaCBmb3IgYXJndW1lbnQgcGF0dGVybiBpbiB0aGUgYXJndW1lbnQgCisgICAgICogdGFyZ2V0IHRleHQuIFRoZSBhcmd1bWVudCBicmVha2l0ZXIgaXMgdXNlZCB0byBkZWZpbmUgbG9naWNhbCBtYXRjaGVzLgorICAgICAqIFNlZSBzdXBlciBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIHVzZSBvZiB0aGUgdGFyZ2V0IAorICAgICAqIHRleHQgYW5kIEJyZWFrSXRlcmF0b3IuCisgICAgICogQHBhcmFtIHBhdHRlcm4gdGV4dCB0byBsb29rIGZvci4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IHRhcmdldCB0ZXh0IHRvIHNlYXJjaCBmb3IgcGF0dGVybi4gCisgICAgICogQHBhcmFtIGNvbGxhdG9yIFJ1bGVCYXNlZENvbGxhdG9yIHRoYXQgZGVmaW5lcyB0aGUgbGFuZ3VhZ2UgcnVsZXMKKyAgICAgKiBAcGFyYW0gYnJlYWtlciBBIHtAbGluayBCcmVha0l0ZXJhdG9yfSB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSAKKyAgICAgKiAgICAgICAgICAgICAgICBib3VuZGFyaWVzIG9mIGEgbG9naWNhbCBtYXRjaC4gVGhpcyBhcmd1bWVudCBjYW4gYmUgbnVsbC4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhcmd1bWVudCB0YXJnZXQgaXMgbnVsbCwKKyAgICAgKiAgICAgICAgICAgIG9yIG9mIGxlbmd0aCAwCisgICAgICogQHNlZSBCcmVha0l0ZXJhdG9yCisgICAgICogQHNlZSBSdWxlQmFzZWRDb2xsYXRvcgorICAgICAqIEBzZWUgU2VhcmNoSXRlcmF0b3IKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nU2VhcmNoKFN0cmluZyBwYXR0ZXJuLCBDaGFyYWN0ZXJJdGVyYXRvciB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRDb2xsYXRvciBjb2xsYXRvciwgQnJlYWtJdGVyYXRvciBicmVha2l0ZXIpIAorICAgIHsKKyAgICAgICAgc3VwZXIodGFyZ2V0LCBicmVha2l0ZXIpOworICAgICAgICBtX3RleHRCZWdpbk9mZnNldF8gPSB0YXJnZXRUZXh0LmdldEJlZ2luSW5kZXgoKTsKKyAgICAgICAgbV90ZXh0TGltaXRPZmZzZXRfID0gdGFyZ2V0VGV4dC5nZXRFbmRJbmRleCgpOworICAgICAgICBtX2NvbGxhdG9yXyA9IGNvbGxhdG9yOworICAgICAgICBtX2NvbEVJdGVyXyA9IG1fY29sbGF0b3JfLmdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcih0YXJnZXQpOworICAgICAgICBtX3V0aWxDb2xFSXRlcl8gPSBjb2xsYXRvci5nZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoIiIpOworICAgICAgICBtX2NlTWFza18gPSBnZXRNYXNrKG1fY29sbGF0b3JfLmdldFN0cmVuZ3RoKCkpOworICAgICAgICBtX2lzQ2Fub25pY2FsTWF0Y2hfID0gZmFsc2U7CisgICAgICAgIG1fcGF0dGVybl8gPSBuZXcgUGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAgbV9tYXRjaGVkSW5kZXhfID0gRE9ORTsKKyAgICAgICAgCisgICAgICAgIGluaXRpYWxpemUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgaXRlcmF0b3IgdG8gdXNlIHRoZSBsYW5ndWFnZS1zcGVjaWZpYyBydWxlcyBkZWZpbmVkIGluIAorICAgICAqIHRoZSBhcmd1bWVudCBjb2xsYXRvciB0byBzZWFyY2ggZm9yIGFyZ3VtZW50IHBhdHRlcm4gaW4gdGhlIGFyZ3VtZW50IAorICAgICAqIHRhcmdldCB0ZXh0LiBObyBCcmVha0l0ZXJhdG9ycyBhcmUgc2V0IHRvIHRlc3QgZm9yIGxvZ2ljYWwgbWF0Y2hlcy4KKyAgICAgKiBAcGFyYW0gcGF0dGVybiB0ZXh0IHRvIGxvb2sgZm9yLgorICAgICAqIEBwYXJhbSB0YXJnZXQgdGFyZ2V0IHRleHQgdG8gc2VhcmNoIGZvciBwYXR0ZXJuLiAKKyAgICAgKiBAcGFyYW0gY29sbGF0b3IgUnVsZUJhc2VkQ29sbGF0b3IgdGhhdCBkZWZpbmVzIHRoZSBsYW5ndWFnZSBydWxlcworICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biB3aGVuIGFyZ3VtZW50IHRhcmdldCBpcyBudWxsLAorICAgICAqICAgICAgICAgICAgb3Igb2YgbGVuZ3RoIDAKKyAgICAgKiBAc2VlIFJ1bGVCYXNlZENvbGxhdG9yCisgICAgICogQHNlZSBTZWFyY2hJdGVyYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdTZWFyY2goU3RyaW5nIHBhdHRlcm4sIENoYXJhY3Rlckl0ZXJhdG9yIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yKSAKKyAgICB7CisgICAgICAgIHRoaXMocGF0dGVybiwgdGFyZ2V0LCBjb2xsYXRvciwgQnJlYWtJdGVyYXRvci5nZXRDaGFyYWN0ZXJJbnN0YW5jZSgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgaXRlcmF0b3IgdG8gdXNlIHRoZSBsYW5ndWFnZS1zcGVjaWZpYyBydWxlcyBhbmQgCisgICAgICogYnJlYWsgaXRlcmF0b3IgcnVsZXMgZGVmaW5lZCBpbiB0aGUgYXJndW1lbnQgbG9jYWxlIHRvIHNlYXJjaCBmb3IgCisgICAgICogYXJndW1lbnQgcGF0dGVybiBpbiB0aGUgYXJndW1lbnQgdGFyZ2V0IHRleHQuIAorICAgICAqIFNlZSBzdXBlciBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIHVzZSBvZiB0aGUgdGFyZ2V0IAorICAgICAqIHRleHQgYW5kIEJyZWFrSXRlcmF0b3IuCisgICAgICogQHBhcmFtIHBhdHRlcm4gdGV4dCB0byBsb29rIGZvci4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IHRhcmdldCB0ZXh0IHRvIHNlYXJjaCBmb3IgcGF0dGVybi4gCisgICAgICogQHBhcmFtIGxvY2FsZSBsb2NhbGUgdG8gdXNlIGZvciBsYW5ndWFnZSBhbmQgYnJlYWsgaXRlcmF0b3IgcnVsZXMKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhcmd1bWVudCB0YXJnZXQgaXMgbnVsbCwKKyAgICAgKiAgICAgICAgICAgIG9yIG9mIGxlbmd0aCAwLiBDbGFzc0Nhc3RFeGNlcHRpb24gdGhyb3duIGlmIHRoZSBjb2xsYXRvciBmb3IgCisgICAgICogICAgICAgICAgICB0aGUgc3BlY2lmaWVkIGxvY2FsZSBpcyBub3QgYSBSdWxlQmFzZWRDb2xsYXRvci4KKyAgICAgKiBAc2VlIEJyZWFrSXRlcmF0b3IKKyAgICAgKiBAc2VlIFJ1bGVCYXNlZENvbGxhdG9yCisgICAgICogQHNlZSBTZWFyY2hJdGVyYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdTZWFyY2goU3RyaW5nIHBhdHRlcm4sIENoYXJhY3Rlckl0ZXJhdG9yIHRhcmdldCwgTG9jYWxlIGxvY2FsZSkKKyAgICB7CisgICAgICAgIHRoaXMocGF0dGVybiwgdGFyZ2V0LCAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UobG9jYWxlKSwKKyAgICAgICAgICAgICBCcmVha0l0ZXJhdG9yLmdldENoYXJhY3Rlckluc3RhbmNlKGxvY2FsZSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBpdGVyYXRvciB0byB1c2UgdGhlIGxhbmd1YWdlLXNwZWNpZmljIHJ1bGVzIGFuZCAKKyAgICAgKiBicmVhayBpdGVyYXRvciBydWxlcyBkZWZpbmVkIGluIHRoZSBkZWZhdWx0IGxvY2FsZSB0byBzZWFyY2ggZm9yIAorICAgICAqIGFyZ3VtZW50IHBhdHRlcm4gaW4gdGhlIGFyZ3VtZW50IHRhcmdldCB0ZXh0LiAKKyAgICAgKiBTZWUgc3VwZXIgY2xhc3MgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSB1c2Ugb2YgdGhlIHRhcmdldCAKKyAgICAgKiB0ZXh0IGFuZCBCcmVha0l0ZXJhdG9yLgorICAgICAqIEBwYXJhbSBwYXR0ZXJuIHRleHQgdG8gbG9vayBmb3IuCisgICAgICogQHBhcmFtIHRhcmdldCB0YXJnZXQgdGV4dCB0byBzZWFyY2ggZm9yIHBhdHRlcm4uIAorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biB3aGVuIGFyZ3VtZW50IHRhcmdldCBpcyBudWxsLAorICAgICAqICAgICAgICAgICAgb3Igb2YgbGVuZ3RoIDAuIENsYXNzQ2FzdEV4Y2VwdGlvbiB0aHJvd24gaWYgdGhlIGNvbGxhdG9yIGZvciAKKyAgICAgKiAgICAgICAgICAgIHRoZSBkZWZhdWx0IGxvY2FsZSBpcyBub3QgYSBSdWxlQmFzZWRDb2xsYXRvci4KKyAgICAgKiBAc2VlIEJyZWFrSXRlcmF0b3IKKyAgICAgKiBAc2VlIFJ1bGVCYXNlZENvbGxhdG9yCisgICAgICogQHNlZSBTZWFyY2hJdGVyYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdTZWFyY2goU3RyaW5nIHBhdHRlcm4sIFN0cmluZyB0YXJnZXQpIAorICAgIHsKKyAgICAgICAgdGhpcyhwYXR0ZXJuLCBuZXcgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IodGFyZ2V0KSwKKyAgICAgICAgICAgICAoUnVsZUJhc2VkQ29sbGF0b3IpQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKSwKKyAgICAgICAgICAgICBCcmVha0l0ZXJhdG9yLmdldENoYXJhY3Rlckluc3RhbmNlKCkpOworICAgIH0KKworICAgIC8vIHB1YmxpYyBnZXR0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3RyZW5ndGggcHJvcGVydHkgb2YgdGhlIFJ1bGVCYXNlZENvbGxhdG9yIHVzZWQgaW4gc2VhcmNoaW5nLiAKKyAgICAgKiBTZWUgdGhlIFJ1bGVCYXNlZENvbGxhdG9yIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgICogc3RyZW5ndGggcHJvcGVydHkuCisgICAgICogQHJldHVybiB0aGUgc3RyZW5ndGggcHJvcGVydHkgb2YgdGhlIFJ1bGVCYXNlZENvbGxhdG9yIHVzZWQgaW4gc2VhcmNoaW5nCisgICAgICogQHNlZSBSdWxlQmFzZWRDb2xsYXRvcgorICAgICAqIEBzZWUgI3NldFN0cmVuZ3RoCisgICAgICogQHNlZSAjZ2V0Q29sbGF0b3IKKyAgICAgKiBAb2Jzb2xldGUgSUNVIDIuMi4gVXNlIHRoaXMuZ2V0Q29sbGF0b3IoKS5nZXRTdHJlbmd0aCgpIGluc3RlYWQgc2luY2UgaXQKKyAgICAgKiAgICAgICAgICAgd2lsbCBiZSByZW1vdmVkIGluIHRoYXQgcmVsZWFzZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFN0cmVuZ3RoKCkgeworICAgICAgICByZXR1cm4gbV9jb2xsYXRvcl8uZ2V0U3RyZW5ndGgoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisJICogPHA+CisgICAgICogR2V0cyB0aGUgUnVsZUJhc2VkQ29sbGF0b3IgdXNlZCBmb3IgdGhlIGxhbmd1YWdlIHJ1bGVzLgorICAgICAqIDwvcD4KKwkgKiA8cD4KKyAgICAgKiBTaW5jZSBTdHJpbmdTZWFyY2ggZGVwZW5kcyBvbiB0aGUgcmV0dXJuZWQgUnVsZUJhc2VkQ29sbGF0b3IsIGFueSAKKwkgKiBjaGFuZ2VzIHRvIHRoZSBSdWxlQmFzZWRDb2xsYXRvciByZXN1bHQgc2hvdWxkIGZvbGxvdyB3aXRoIGEgY2FsbCB0byAKKwkgKiBlaXRoZXIgU3RyaW5nU2VhcmNoLnJlc2V0KCkgb3IgCisJICogU3RyaW5nU2VhcmNoLnNldENvbGxhdG9yKFJ1bGVCYXNlZENvbGxhdG9yKSB0byBlbnN1cmUgdGhlIGNvcnJlY3QgCisJICogc2VhcmNoIGJlaGF2aW91ci4KKyAgICAgKiA8L3A+CisJICogQHJldHVybiBSdWxlQmFzZWRDb2xsYXRvciB1c2VkIGJ5IHRoaXMgU3RyaW5nU2VhcmNoCisgICAgICogQHNlZSBSdWxlQmFzZWRDb2xsYXRvcgorICAgICAqIEBzZWUgI3NldENvbGxhdG9yCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisJICovCisgICAgcHVibGljIFJ1bGVCYXNlZENvbGxhdG9yIGdldENvbGxhdG9yKCkgCisgICAgeworICAgICAgICByZXR1cm4gbV9jb2xsYXRvcl87CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHBhdHRlcm4gZm9yIHdoaWNoIFN0cmluZ1NlYXJjaCBpcyBzZWFyY2hpbmcgZm9yLgorICAgICAqIEByZXR1cm4gdGhlIHBhdHRlcm4gc2VhcmNoZWQgZm9yCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRQYXR0ZXJuKCkgCisgICAgeworICAgICAgICByZXR1cm4gbV9wYXR0ZXJuXy50YXJnZXRUZXh0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGluZGV4IGluIHRoZSB0YXJnZXQgdGV4dCB3aGVyZSB0aGUgaXRlcmF0b3IgaXMgY3VycmVudGx5IAorICAgICAqIHBvc2l0aW9uZWQgYXQuIAorICAgICAqIElmIHRoZSBpdGVyYXRpb24gaGFzIGdvbmUgcGFzdCB0aGUgZW5kIG9mIHRoZSB0YXJnZXQgdGV4dCBvciBwYXN0IAorICAgICAqIHRoZSBiZWdpbm5pbmcgZm9yIGEgYmFja3dhcmRzIHNlYXJjaCwge0BsaW5rICNET05FfSBpcyByZXR1cm5lZC4KKyAgICAgKiBAcmV0dXJuIGluZGV4IGluIHRoZSB0YXJnZXQgdGV4dCB3aGVyZSB0aGUgaXRlcmF0b3IgaXMgY3VycmVudGx5IAorICAgICAqICAgICAgICAgcG9zaXRpb25lZCBhdAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJbmRleCgpIAorICAgIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IG1fY29sRUl0ZXJfLmdldE9mZnNldCgpOworICAgICAgICBpZiAoaXNPdXRPZkJvdW5kcyhtX3RleHRCZWdpbk9mZnNldF8sIG1fdGV4dExpbWl0T2Zmc2V0XywgcmVzdWx0KSkgeworICAgICAgICAgICAgcmV0dXJuIERPTkU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGNhbm9uaWNhbCBtYXRjaGVzIChvcHRpb24gMSwgYXMgZGVzY3JpYmVkIGluIHRoZSAKKyAgICAgKiBjbGFzcyBkb2N1bWVudGF0aW9uKSBpcyBzZXQuCisgICAgICogU2VlIHNldENhbm9uaWNhbChib29sZWFuKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAc2VlICNzZXRDYW5vbmljYWwKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgY2Fub25pY2FsIG1hdGNoZXMgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ2Fub25pY2FsKCkgCisgICAgeworICAgICAgICByZXR1cm4gbV9pc0Nhbm9uaWNhbE1hdGNoXzsKKyAgICB9CisgICAgCisgICAgLy8gcHVibGljIHNldHRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD4KKyAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBwcm9wZXJ0eSBvZiB0aGUgUnVsZUJhc2VkQ29sbGF0b3IgdXNlZCBmb3Igc2VhcmNoaW5nLgorICAgICAqIFNlZSB0aGUgQ29sbGF0b3IgZG9jdW1lbnRhdGlvbiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RyZW5ndGhzLgorICAgICAqIDwvcD4KKyAgICAgKiBAb2Jzb2xldGUgSUNVIDIuMi4gVXNlIHRoaXMuZ2V0Q29sbGF0b3IoKS5zZXRTdHJlbmd0aChpbnQpIGluc3RlYWQgc2luY2UKKyAgICAgKiAgICAgICAgICAgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoYXQgcmVsZWFzZS4KKyAgICAgKiAgICAgICAgICAgICBBZnRlciB3aGljaCBTdHJpbmdTZWFyY2gucmVzZXQoKSAKKyAgICAgKiAgICAgICAgICAgICBvciBTdHJpbmdTZWFyY2guc2V0Q29sbGF0b3IodGhpcy5nZXRDb2xsYXRvcigpKSBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgICAgICBjYWxsZWQgdG8gdXBkYXRlIFN0cmluZ1NlYXJjaC5dCisgICAgICogQHNlZSBDb2xsYXRvcgorICAgICAqIEBzZWUgQ29sbGF0b3IjUFJJTUFSWQorICAgICAqIEBzZWUgQ29sbGF0b3IjU0VDT05EQVJZCisgICAgICogQHNlZSBDb2xsYXRvciNURVJUSUFSWQorICAgICAqIEBzZWUgQ29sbGF0b3IjUVVBVEVSTkFSWQorICAgICAqIEBzZWUgQ29sbGF0b3IjSURFTlRJQ0FMCisgICAgICogQHNlZSAjc2V0Q29sbGF0b3IKKyAgICAgKiBAc2VlICNnZXRDb2xsYXRvcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN0cmVuZ3RoKGludCBuZXdTdHJlbmd0aCkgCisgICAgeworICAgICAgICAvLyBEdWUgdG8gYSBidWcgKD8pIGluIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciwgd2UgbXVzdCBzZXQgdGhlCisgICAgICAgIC8vIGNvbGxhdG9yJ3Mgc3RyZW5ndGggYXMgd2VsbCwgc2luY2UgdGhlIGl0ZXJhdG9yIGlzIGdvaW5nIHRvCisgICAgICAgIC8vIG1hc2sgb3V0IHRoZSBwb3J0aW9ucyBvZiB0aGUgY29sbGF0aW9uIGVsZW1lbnQgdGhhdCBhcmUgbm90CisgICAgICAgIC8vIHJlbGV2YW50IGZvciB0aGUgY29sbGF0b3IncyBjdXJyZW50IHN0cmVuZ3RoIHNldHRpbmcKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzaGFyZSBhIENvbGxhdG9yIGFtb25nCisgICAgICAgIC8vIG11bHRpcGxlIFN0cmluZ1NlYXJjaCBvYmplY3RzIGlmIHlvdSBhZGp1c3QgU3RyZW5ndGggc2V0dGluZ3MuCisgICAgICAgIG1fY29sbGF0b3JfLnNldFN0cmVuZ3RoKG5ld1N0cmVuZ3RoKTsKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD4KKyAgICAgKiBTZXRzIHRoZSBSdWxlQmFzZWRDb2xsYXRvciB0byBiZSB1c2VkIGZvciBsYW5ndWFnZS1zcGVjaWZpYyBzZWFyY2hpbmcuCisgICAgICogPC9wPgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIGNhdXNlcyBpbnRlcm5hbCBkYXRhIHN1Y2ggYXMgQm95ZXItTW9vcmUgc2hpZnQgdGFibGVzCisgICAgICogdG8gYmUgcmVjYWxjdWxhdGVkLCBidXQgdGhlIGl0ZXJhdG9yJ3MgcG9zaXRpb24gaXMgdW5jaGFuZ2VkLgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gY29sbGF0b3IgdG8gdXNlIGZvciB0aGlzIFN0cmluZ1NlYXJjaAorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biB3aGVuIGNvbGxhdG9yIGlzIG51bGwKKyAgICAgKiBAc2VlICNnZXRDb2xsYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbGxhdG9yKFJ1bGVCYXNlZENvbGxhdG9yIGNvbGxhdG9yKSAKKyAgICB7CisgICAgCWlmIChjb2xsYXRvciA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb2xsYXRvciBjYW4gbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICBtX2NvbGxhdG9yXyA9IGNvbGxhdG9yOworICAgICAgICBtX2NlTWFza18gPSBnZXRNYXNrKG1fY29sbGF0b3JfLmdldFN0cmVuZ3RoKCkpOworICAgICAgICAvLyBpZiBzdGF0dXMgaXMgYSBmYWlsdXJlLCB1Y29sX2dldEF0dHJpYnV0ZSByZXR1cm5zIFVDT0xfREVGQVVMVAorICAgICAgICBpbml0aWFsaXplKCk7CisgICAgICAgIG1fY29sRUl0ZXJfLnNldENvbGxhdG9yKG1fY29sbGF0b3JfKTsKKyAgICAgICAgbV91dGlsQ29sRUl0ZXJfLnNldENvbGxhdG9yKG1fY29sbGF0b3JfKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogPHA+CisgICAgICogU2V0IHRoZSBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IuICAKKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogVGhpcyBtZXRob2QgY2F1c2VzIGludGVybmFsIGRhdGEgc3VjaCBhcyBCb3llci1Nb29yZSBzaGlmdCB0YWJsZXMKKyAgICAgKiB0byBiZSByZWNhbGN1bGF0ZWQsIGJ1dCB0aGUgaXRlcmF0b3IncyBwb3NpdGlvbiBpcyB1bmNoYW5nZWQuCisgICAgICogPC9wPgorICAgICAqIEBwYXJhbSBwYXR0ZXJuIGZvciBzZWFyY2hpbmcKKyAgICAgKiBAc2VlICNnZXRQYXR0ZXJuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhyb3duIGlmIHBhdHRlcm4gaXMgbnVsbCBvciBvZgorICAgICAqIAkJCSAgbGVuZ3RoIDAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQYXR0ZXJuKFN0cmluZyBwYXR0ZXJuKSAKKyAgICB7CisgICAgCWlmIChwYXR0ZXJuID09IG51bGwgfHwgcGF0dGVybi5sZW5ndGgoKSA8PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgCQkiUGF0dGVybiB0byBzZWFyY2ggZm9yIGNhbiBub3QgYmUgbnVsbCBvciBvZiBsZW5ndGggMCIpOworICAgICAgICB9CisgICAgICAgIG1fcGF0dGVybl8udGFyZ2V0VGV4dCA9IHBhdHRlcm47CisgICAgICAgIGluaXRpYWxpemUoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgCSAqIFNldCB0aGUgdGFyZ2V0IHRleHQgdG8gYmUgc2VhcmNoZWQuIFRleHQgaXRlcmF0aW9uIHdpbGwgaGVuY2UgYmVnaW4gYXQgCisgICAgICogdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHN0cmluZy4gVGhpcyBtZXRob2QgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIAorICAgICAqIHJlLXVzZSBhbiBpdGVyYXRvciB0byBzZWFyY2ggd2l0aGluIGEgZGlmZmVyZW50IGJvZHkgb2YgdGV4dC4KKyAgICAgKiBAcGFyYW0gdGV4dCBuZXcgdGV4dCBpdGVyYXRvciB0byBsb29rIGZvciBtYXRjaCwgCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhyb3duIHdoZW4gdGV4dCBpcyBudWxsIG9yIGhhcworICAgICAqICAgICAgICAgICAgMCBsZW5ndGgKKyAgICAgKiBAc2VlICNnZXRUYXJnZXQKKwkgKiBAZHJhZnQgSUNVIDIuMgorCSAqLworCXB1YmxpYyB2b2lkIHNldFRhcmdldChDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0KQorCXsKKwkJc3VwZXIuc2V0VGFyZ2V0KHRleHQpOworICAgICAgICBtX3RleHRCZWdpbk9mZnNldF8gPSB0YXJnZXRUZXh0LmdldEJlZ2luSW5kZXgoKTsKKyAgICAgICAgbV90ZXh0TGltaXRPZmZzZXRfID0gdGFyZ2V0VGV4dC5nZXRFbmRJbmRleCgpOworICAgICAgICBtX2NvbEVJdGVyXy5zZXRUZXh0KHRhcmdldFRleHQpOworCX0KKyAgICAKKyAgICAvKioKKwkgKiA8cD4KKyAgICAgKiBTZXRzIHRoZSBwb3NpdGlvbiBpbiB0aGUgdGFyZ2V0IHRleHQgd2hpY2ggdGhlIG5leHQgc2VhcmNoIHdpbGwgc3RhcnQgCisgICAgICogZnJvbSB0byB0aGUgYXJndW1lbnQuIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgcHJldmlvdXMgc3RhdGVzLgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgYXJndW1lbnQgcG9zaXRpb24gYW5kIHNldHMgdGhlIHBvc2l0aW9uIGluIHRoZSAKKyAgICAgKiB0YXJnZXQgdGV4dCBhY2NvcmRpbmdseSwgd2l0aG91dCBjaGVja2luZyBpZiBwb3NpdGlvbiBpcyBwb2ludGluZyB0byBhIAorICAgICAqIHZhbGlkIHN0YXJ0aW5nIHBvaW50IHRvIGJlZ2luIHNlYXJjaGluZy4KKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogU2VhcmNoIHBvc2l0aW9ucyB0aGF0IG1heSByZW5kZXIgaW5jb3JyZWN0IHJlc3VsdHMgYXJlIGhpZ2hsaWdodGVkIGluIAorICAgICAqIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uLgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gaW5kZXggdG8gc3RhcnQgbmV4dCBzZWFyY2ggZnJvbS4KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gdGhyb3duIGlmIGFyZ3VtZW50IHBvc2l0aW9uIGlzIG91dAorICAgICAqICAgICAgICAgICAgb2YgdGhlIHRhcmdldCB0ZXh0IHJhbmdlLgorICAgICAqIEBzZWUgI2dldEluZGV4CisgICAgICogQGRyYWZ0IElDVSAyLjIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmRleChpbnQgcG9zaXRpb24pCisJeworCQlzdXBlci5zZXRJbmRleChwb3NpdGlvbik7CisgICAgICAgIG1fbWF0Y2hlZEluZGV4XyA9IERPTkU7CisgICAgICAgIG1fY29sRUl0ZXJfLnNldEV4YWN0T2Zmc2V0KHBvc2l0aW9uKTsKKwl9CisJCisJLyoqCisJICogPHA+CisgICAgICogU2V0IHRoZSBjYW5vbmljYWwgbWF0Y2ggbW9kZS4gU2VlIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisgICAgICogVGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBmYWxzZS4KKyAgICAgKiA8L3A+CisJICogQHBhcmFtIGFsbG93Q2Fub25pY2FsIGZsYWcgaW5kaWNhdG9yIGlmIGNhbm9uaWNhbCBtYXRjaGVzIGFyZSBhbGxvd2VkCisgICAgICogQHNlZSAjaXNDYW5vbmljYWwKKwkgKiBAZHJhZnQgSUNVIDIuMgorCSAqLworCXB1YmxpYyB2b2lkIHNldENhbm9uaWNhbChib29sZWFuIGFsbG93Q2Fub25pY2FsKQorCXsKKwkJbV9pc0Nhbm9uaWNhbE1hdGNoXyA9IGFsbG93Q2Fub25pY2FsOworCQlpZiAobV9pc0Nhbm9uaWNhbE1hdGNoXyA9PSB0cnVlKSB7CisJCQlpZiAobV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXyA9PSBudWxsKSB7CisJCQkJbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCW1fY2Fub25pY2FsUHJlZml4QWNjZW50c18uZGVsZXRlKDAsIAorCQkJCQkJCQkJCQltX2Nhbm9uaWNhbFByZWZpeEFjY2VudHNfLmxlbmd0aCgpKTsKKwkJCX0KKwkJCWlmIChtX2Nhbm9uaWNhbFN1ZmZpeEFjY2VudHNfID09IG51bGwpIHsKKwkJCQltX2Nhbm9uaWNhbFN1ZmZpeEFjY2VudHNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQkJfQorCQkJZWxzZSB7CisJCQkJbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXy5kZWxldGUoMCwgCisJCQkJCQkJCQkJCW1fY2Fub25pY2FsU3VmZml4QWNjZW50c18ubGVuZ3RoKCkpOworCQkJfQorCQl9CisJfQorCQorCS8vIHB1YmxpYyBtaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkKKwkvKiogCisJICogPHA+CisgICAgICogUmVzZXRzIHRoZSBzZWFyY2ggaXRlcmF0aW9uLiBBbGwgcHJvcGVydGllcyB3aWxsIGJlIHJlc2V0IHRvIHRoZSAKKyAgICAgKiBkZWZhdWx0IHZhbHVlLgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBTZWFyY2ggd2lsbCBiZWdpbiBhdCB0aGUgc3RhcnQgb2YgdGhlIHRhcmdldCB0ZXh0IGlmIGEgZm9yd2FyZCBpdGVyYXRpb24gCisgICAgICogaXMgaW5pdGlhdGVkIGJlZm9yZSBhIGJhY2t3YXJkcyBpdGVyYXRpb24uIE90aGVyd2lzZSBpZiBhIAorICAgICAqIGJhY2t3YXJkcyBpdGVyYXRpb24gaXMgaW5pdGlhdGVkIGJlZm9yZSBhIGZvcndhcmRzIGl0ZXJhdGlvbiwgdGhlIHNlYXJjaCAKKyAgICAgKiB3aWxsIGJlZ2luIGF0IHRoZSBlbmQgb2YgdGhlIHRhcmdldCB0ZXh0LgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBDYW5vbmljYWwgbWF0Y2ggb3B0aW9uIHdpbGwgYmUgcmVzZXQgdG8gZmFsc2UsIGllIGFuIGV4YWN0IG1hdGNoLgorICAgICAqIDwvcD4KKwkgKiBAZHJhZnQgSUNVIDIuMgorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkKKwl7CisJCS8vIHJlc2V0IGlzIHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiBzdHJpbmcgc2VhcmNoLCAKKwkJLy8gaGVuY2UgYWxsIGF0dHJpYnV0ZXMgaW4gdGhlIGNvbGxhdG9yIHNob3VsZCBiZSByZXRyaWV2ZWQgd2l0aG91dCBhbnkgCisJCS8vIHByb2JsZW1zCisJCXN1cGVyLnJlc2V0KCk7CisgICAgICAgIG1faXNDYW5vbmljYWxNYXRjaF8gPSBmYWxzZTsKKyAgICAgICAgbV9jZU1hc2tfID0gZ2V0TWFzayhtX2NvbGxhdG9yXy5nZXRTdHJlbmd0aCgpKTsKKyAgICAgICAgLy8gaWYgc3RhdHVzIGlzIGEgZmFpbHVyZSwgdWNvbF9nZXRBdHRyaWJ1dGUgcmV0dXJucyBVQ09MX0RFRkFVTFQKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworICAgICAgICBtX2NvbEVJdGVyXy5zZXRDb2xsYXRvcihtX2NvbGxhdG9yXyk7CisgICAgICAgIG1fY29sRUl0ZXJfLnJlc2V0KCk7CisgICAgICAgIG1fdXRpbENvbEVJdGVyXy5zZXRDb2xsYXRvcihtX2NvbGxhdG9yXyk7CisJfQorCisgICAgLy8gcHJvdGVjdGVkIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD4KKyAgICAgKiBDb25jcmV0ZSBtZXRob2QgdG8gcHJvdmlkZSB0aGUgbWVjaGFuaXNtIAorICAgICAqIGZvciBmaW5kaW5nIHRoZSBuZXh0IDxiPmZvcndhcmRzPC9iPiBtYXRjaCBpbiB0aGUgdGFyZ2V0IHRleHQuCisgICAgICogU2VlIHN1cGVyIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIGl0cyB1c2UuCisgICAgICogPC9wPiAgCisgICAgICogQHBhcmFtIHN0YXJ0IGluZGV4IGluIHRoZSB0YXJnZXQgdGV4dCBhdCB3aGljaCB0aGUgZm9yd2FyZHMgc2VhcmNoIAorICAgICAqICAgICAgICBzaG91bGQgYmVnaW4uCisgICAgICogQHJldHVybiB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIG5leHQgZm9yd2FyZHMgbWF0Y2ggaWYgZm91bmQsIERPTkUgCisgICAgICogICAgICAgICBvdGhlcndpc2UKKyAgICAgKiBAc2VlICNoYW5kbGVQcmV2aW91cyhpbnQpCisgICAgICogQHNlZSAjRE9ORQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVOZXh0KGludCBzdGFydCkKKyAgICB7CisgICAgCWlmIChtX3BhdHRlcm5fLm1fQ0VMZW5ndGhfID09IDApIHsKKyAgICAgICAgICAgIG1hdGNoTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGlmIChtX21hdGNoZWRJbmRleF8gPT0gRE9ORSAmJiBzdGFydCA9PSBtX3RleHRCZWdpbk9mZnNldF8pIHsKKyAgICAgICAgICAgICAgICBtX21hdGNoZWRJbmRleF8gPSBzdGFydDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXRjaGVkSW5kZXhfOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgCQl0YXJnZXRUZXh0LnNldEluZGV4KHN0YXJ0KTsKKwkgICAgICAgIGNoYXIgY2ggPSB0YXJnZXRUZXh0LmN1cnJlbnQoKTsKKwkgICAgICAgIC8vIGNoIGNhbiBuZXZlciBiZSBkb25lLCBpdCBpcyBoYW5kbGVkIGJ5IG5leHQoKQorCSAgICAgICAgY2hhciBjaDIgPSB0YXJnZXRUZXh0Lm5leHQoKTsKKwkgICAgICAgIGlmIChjaDIgPT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworCSAgICAgICAgICAgIG1fbWF0Y2hlZEluZGV4XyA9IERPTkU7CQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgbV9tYXRjaGVkSW5kZXhfID0gdGFyZ2V0VGV4dC5nZXRJbmRleCgpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZShjaCkgJiYgVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjaDIpKSB7CisJICAgICAgICAgICAgdGFyZ2V0VGV4dC5uZXh0KCk7CisJICAgICAgICAgICAgbV9tYXRjaGVkSW5kZXhfID0gdGFyZ2V0VGV4dC5nZXRJbmRleCgpOworCSAgICAgICAgfQorCSAgICB9CisJICAgIGVsc2UgeworCSAgICAJaWYgKG1hdGNoTGVuZ3RoICE9IDApIHsKKwkJICAgIAlzdGFydCArPSBtYXRjaExlbmd0aDsKKwkJICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIHdlIG11c3QgaGF2ZSByZXZlcnNlZCBkaXJlY3Rpb24gYWZ0ZXIgd2UgcmVhY2hlZCB0aGUgc3RhcnQKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgdGFyZ2V0IHRleHQKKyAgICAgICAgICAgICAgICAvLyBzZWUgU2VhcmNoSXRlcmF0b3IgbmV4dCgpLCBpdCBjaGVja3MgdGhlIGJvdW5kcyBhbmQgcmV0dXJucworICAgICAgICAgICAgICAgIC8vIGlmIGl0IGV4Y2VlZHMgdGhlIHJhbmdlLiBJdCBkb2VzIG5vdCBhbGxvdyBzZXR0aW5nIG9mCisgICAgICAgICAgICAgICAgLy8gbV9tYXRjaGVkSW5kZXgKKyAgICAgICAgICAgICAgICBtX21hdGNoZWRJbmRleF8gPSBET05FOworICAgICAgICAgICAgfQorICAgIAorCSAgICAgICAgLy8gc3RhdHVzIGNoZWNrZWQgYmVsb3cKKwkgICAgICAgIGlmIChtX2lzQ2Fub25pY2FsTWF0Y2hfKSB7CisJICAgICAgICAgICAgLy8gY2FuJ3QgdXNlIGV4YWN0IGhlcmUgc2luY2UgZXh0cmEgYWNjZW50cyBhcmUgYWxsb3dlZC4KKwkgICAgICAgICAgICBoYW5kbGVOZXh0Q2Fub25pY2FsKHN0YXJ0KTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGhhbmRsZU5leHRFeGFjdChzdGFydCk7CisJICAgICAgICB9CisJICAgIH0KKyAgICAgICAgaWYgKG1fbWF0Y2hlZEluZGV4XyA9PSBET05FKSB7CisgICAgICAgICAgICB0YXJnZXRUZXh0LnNldEluZGV4KG1fdGV4dExpbWl0T2Zmc2V0Xyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0YXJnZXRUZXh0LnNldEluZGV4KG1fbWF0Y2hlZEluZGV4Xyk7CisgICAgICAgIH0KKyAgICAJcmV0dXJuIG1fbWF0Y2hlZEluZGV4XzsKKyAgICB9CisgICAgCisgICAgLyoqCisJICogPHA+CisgICAgICogQ29uY3JldGUgbWV0aG9kIHRvIHByb3ZpZGUgdGhlIG1lY2hhbmlzbSAKKyAgICAgKiBmb3IgZmluZGluZyB0aGUgbmV4dCA8Yj5iYWNrd2FyZHM8L2I+IG1hdGNoIGluIHRoZSB0YXJnZXQgdGV4dC4KKyAgICAgKiBTZWUgc3VwZXIgY2xhc3MgZG9jdW1lbnRhdGlvbiBmb3IgaXRzIHVzZS4KKyAgICAgKiA8L3A+ICAKKyAgICAgKiBAcGFyYW0gc3RhcnQgaW5kZXggaW4gdGhlIHRhcmdldCB0ZXh0IGF0IHdoaWNoIHRoZSBiYWNrd2FyZHMgc2VhcmNoIAorICAgICAqICAgICAgICBzaG91bGQgYmVnaW4uCisgICAgICogQHJldHVybiB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIG5leHQgYmFja3dhcmRzIG1hdGNoIGlmIGZvdW5kLCBET05FIAorICAgICAqICAgICAgICAgb3RoZXJ3aXNlCisgICAgICogQHNlZSAjaGFuZGxlTmV4dChpbnQpCisgICAgICogQHNlZSAjRE9ORQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisJICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVQcmV2aW91cyhpbnQgc3RhcnQpCisgICAgeworICAgIAlpZiAobV9wYXR0ZXJuXy5tX0NFTGVuZ3RoXyA9PSAwKSB7CisgICAgICAgICAgICBtYXRjaExlbmd0aCA9IDA7CisJICAgICAgICAvLyBzdGFydCBjYW4gbmV2ZXIgYmUgRE9ORSBvciAwLCBpdCBpcyBoYW5kbGVkIGluIHByZXZpb3VzCisgICAgICAgICAgICB0YXJnZXRUZXh0LnNldEluZGV4KHN0YXJ0KTsKKyAgICAgICAgICAgIGNoYXIgY2ggPSB0YXJnZXRUZXh0LnByZXZpb3VzKCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSkgeworICAgICAgICAgICAgCW1fbWF0Y2hlZEluZGV4XyA9IERPTkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIAltX21hdGNoZWRJbmRleF8gPSB0YXJnZXRUZXh0LmdldEluZGV4KCk7CisJICAgICAgICAgICAgaWYgKFVURjE2LmlzVHJhaWxTdXJyb2dhdGUoY2gpKSB7CisJICAgICAgICAgICAgCWlmIChVVEYxNi5pc0xlYWRTdXJyb2dhdGUodGFyZ2V0VGV4dC5wcmV2aW91cygpKSkgeworCSAgICAgICAgICAgICAgICAgICAgbV9tYXRjaGVkSW5kZXhfID0gdGFyZ2V0VGV4dC5nZXRJbmRleCgpOworCSAgICAgICAgICAgIAl9CisJICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG1hdGNoTGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyB3ZSBtdXN0IGhhdmUgcmV2ZXJzZWQgZGlyZWN0aW9uIGFmdGVyIHdlIHJlYWNoZWQgdGhlIGVuZAorICAgICAgICAgICAgICAgIC8vIG9mIHRoZSB0YXJnZXQgdGV4dAorICAgICAgICAgICAgICAgIC8vIHNlZSBTZWFyY2hJdGVyYXRvciBuZXh0KCksIGl0IGNoZWNrcyB0aGUgYm91bmRzIGFuZCByZXR1cm5zCisgICAgICAgICAgICAgICAgLy8gaWYgaXQgZXhjZWVkcyB0aGUgcmFuZ2UuIEl0IGRvZXMgbm90IGFsbG93IHNldHRpbmcgb2YKKyAgICAgICAgICAgICAgICAvLyBtX21hdGNoZWRJbmRleAorICAgICAgICAgICAgICAgIG1fbWF0Y2hlZEluZGV4XyA9IERPTkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9pc0Nhbm9uaWNhbE1hdGNoXykgeworICAgICAgICAgICAgICAgIC8vIGNhbid0IHVzZSBleGFjdCBoZXJlIHNpbmNlIGV4dHJhIGFjY2VudHMgYXJlIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgaGFuZGxlUHJldmlvdXNDYW5vbmljYWwoc3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaGFuZGxlUHJldmlvdXNFeGFjdChzdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9tYXRjaGVkSW5kZXhfID09IERPTkUpIHsKKyAgICAgICAgICAgIHRhcmdldFRleHQuc2V0SW5kZXgobV90ZXh0QmVnaW5PZmZzZXRfKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRhcmdldFRleHQuc2V0SW5kZXgobV9tYXRjaGVkSW5kZXhfKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9tYXRjaGVkSW5kZXhfOworICAgIH0KKworICAgIC8vIHByaXZhdGUgc3RhdGljIGlubmVyIGNsYXNzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFBhdHRlcm4gCisgICAgeworICAgIAkvLyBwcm90ZWN0ZWQgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAkKKyAgICAJLyoqCisgICAgCSAqIFBhdHRlcm4gc3RyaW5nCisgICAgCSAqLworICAgIAlwcm90ZWN0ZWQgU3RyaW5nIHRhcmdldFRleHQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcnJheSBjb250YWluaW5nIHRoZSBjb2xsYXRpb24gZWxlbWVudHMgb2YgdGFyZ2V0VGV4dAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIGludCBtX0NFX1tdOworICAgICAgICAvKioKKyAgICAgICAgICogTnVtYmVyIG9mIGNvbGxhdGlvbiBlbGVtZW50cyBpbiBtX0NFXworICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIGludCBtX0NFTGVuZ3RoXzsgCisgICAgICAgIC8qKgorICAgICAgICAgKiBGbGFnIGluZGljYXRvciBpZiB0YXJnZXRUZXh0IHN0YXJ0cyB3aXRoIGFuIGFjY2VudAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gbV9oYXNQcmVmaXhBY2NlbnRzXzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZsYWcgaW5kaWNhdG9yIGlmIHRhcmdldFRleHQgZW5kcyB3aXRoIGFuIGFjY2VudAorICAgICAgICAgKi8KKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gbV9oYXNTdWZmaXhBY2NlbnRzXzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmF1bHQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2hpZnQgZm9yIEJveWVyIE1vb3JlCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgaW50IG1fZGVmYXVsdFNoaWZ0U2l6ZV87CisgICAgICAgIC8qKgorICAgICAgICAgKiBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBzaGlmdCBmb3IgQm95ZXIgTW9vcmUsIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgICogc291cmNlIHRleHQgdG8gc2VhcmNoCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgY2hhciBtX3NoaWZ0X1tdOworICAgICAgICAvKioKKyAgICAgICAgICogTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2hpZnQgYmFja3dhcmRzIGZvciBCb3llciBNb29yZSwgZGVwZW5kaW5nIAorICAgICAgICAgKiBvbiB0aGUgc291cmNlIHRleHQgdG8gc2VhcmNoCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgY2hhciBtX2JhY2tTaGlmdF9bXTsKKyAgICAgICAgCisgICAgICAgIC8vIHByb3RlY3RlZCBjb25zdHJ1Y3RvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogRW1wdHkgY29uc3RydWN0b3IgCisgICAgICAgICAqLworICAgICAgICBwcm90ZWN0ZWQgUGF0dGVybihTdHJpbmcgcGF0dGVybikgCisgICAgICAgIHsKKyAgICAgICAgCXRhcmdldFRleHQgPSBwYXR0ZXJuOworICAgICAgICAJbV9DRV8gPSBuZXcgaW50W0lOSVRJQUxfQVJSQVlfU0laRV9dOwkKKyAgICAgICAgCW1fQ0VMZW5ndGhfID0gMDsKKyAgICAgICAgCW1faGFzUHJlZml4QWNjZW50c18gPSBmYWxzZTsKKyAgICAgICAgCW1faGFzU3VmZml4QWNjZW50c18gPSBmYWxzZTsKKyAgICAgICAgCW1fZGVmYXVsdFNoaWZ0U2l6ZV8gPSAxOwkJCisgICAgICAgIAltX3NoaWZ0XyA9IG5ldyBjaGFyW01BWF9UQUJMRV9TSVpFX107CisgICAgICAgIAltX2JhY2tTaGlmdF8gPSBuZXcgY2hhcltNQVhfVEFCTEVfU0laRV9dOworICAgICAgICB9CisgICAgfTsKKworCisgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogdGFyZ2V0IHRleHQgYmVnaW4gb2Zmc2V0LiBFYWNoIHRhcmdldFRleHQgaGFzIGEgdmFsaWQgY29udGlndW91cyByZWdpb24gCisgICAgICogdG8gaXRlcmF0ZSBhbmQgdGhpcyBkYXRhIG1lbWJlciBpcyB0aGUgb2Zmc2V0IHRvIHRoZSBmaXJzdCBzdWNoCisgICAgICogY2hhcmFjdGVyIGluIHRoZSByZWdpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV90ZXh0QmVnaW5PZmZzZXRfOworICAgIC8qKgorICAgICAqIHRhcmdldCB0ZXh0IGxpbWl0IG9mZnNldC4gRWFjaCB0YXJnZXRUZXh0IGhhcyBhIHZhbGlkIGNvbnRpZ3VvdXMgcmVnaW9uIAorICAgICAqIHRvIGl0ZXJhdGUgYW5kIHRoaXMgZGF0YSBtZW1iZXIgaXMgdGhlIG9mZnNldCB0byAxIGFmdGVyIHRoZSBsYXN0IHN1Y2gKKyAgICAgKiBjaGFyYWN0ZXIgaW4gdGhlIHJlZ2lvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX3RleHRMaW1pdE9mZnNldF87CisgICAgLyoqCisgICAgICogVXBvbiBjb21wbGV0aW9uIG9mIGEgc2VhcmNoLCBtX21hdGNoSW5kZXhfIHdpbGwgc3RvcmUgc3RhcnRpbmcgb2Zmc2V0IGluCisgICAgICogbV90ZXh0IGZvciB0aGUgbWF0Y2guIFRoZSBWYWx1ZSBET05FIGlzIHRoZSBkZWZhdWx0IHZhbHVlLiAKKyAgICAgKiBJZiB3ZSBhcmUgbm90IGF0IHRoZSBzdGFydCBvZiB0aGUgdGV4dCBvciB0aGUgZW5kIG9mIHRoZSB0ZXh0IGFuZCAKKyAgICAgKiBtX21hdGNoZWRJbmRleF8gaXMgRE9ORSBpdCBtZWFucyB0aGF0IHdlIGNhbiBmaW5kIGFueSBtb3JlIG1hdGNoZXMgaW4gCisgICAgICogdGhhdCBwYXJ0aWN1bGFyIGRpcmVjdGlvbgorICAgICAqLworICAgIHByaXZhdGUgaW50IG1fbWF0Y2hlZEluZGV4XzsgCisgICAgLyoqCisgICAgICogQ3VycmVudCBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IKKyAgICAgKi8KKyAgICBwcml2YXRlIFBhdHRlcm4gbV9wYXR0ZXJuXzsKKyAgICAvKioKKyAgICAgKiBDb2xsYXRvciB3aG9zZSBydWxlcyBhcmUgdXNlZCB0byBwZXJmb3JtIHRoZSBzZWFyY2gKKyAgICAgKi8KKyAgICBwcml2YXRlIFJ1bGVCYXNlZENvbGxhdG9yIG1fY29sbGF0b3JfOworICAgIC8qKiAKKyAgICAgKiBUaGUgY29sbGF0aW9uIGVsZW1lbnQgaXRlcmF0b3IgZm9yIHRoZSB0ZXh0IHNvdXJjZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBtX2NvbEVJdGVyXzsKKyAgICAvKiogCisgICAgICogVXRpbGl0eSBjb2xsYXRpb24gZWxlbWVudCwgdXNlZCB0aHJvdWdob3V0IHByb2dyYW0gZm9yIHRlbXBvcmFyeSAKKyAgICAgKiBpdGVyYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgbV91dGlsQ29sRUl0ZXJfOworICAgIC8qKgorICAgICAqIFRoZSBtYXNrIHVzZWQgb24gdGhlIGNvbGxhdGlvbiBlbGVtZW50cyB0byByZXRyaWV2ZSB0aGUgdmFsaWQgc3RyZW5ndGgKKyAgICAgKiB3ZWlnaHQgCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV9jZU1hc2tfOworICAgIC8qKgorICAgICAqIEJ1ZmZlciBzdG9yaW5nIGFjY2VudHMgZHVyaW5nIGEgY2Fub25pY2FsIHNlYXJjaAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIG1fY2Fub25pY2FsUHJlZml4QWNjZW50c187CisgICAgLyoqCisgICAgICogQnVmZmVyIHN0b3JpbmcgYWNjZW50cyBkdXJpbmcgYSBjYW5vbmljYWwgc2VhcmNoCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXzsKKyAgICAvKioKKyAgICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIGNhbm9uaWNhbCBzZWFyY2ggaXMgdG8gYmUgZG9uZS4KKyAgICAgKiBFLmcgbG9va2luZyBmb3IgImFcdTAzMDAiIGluICJhXHUwMzE4XHUwMzAwIiB3aWxsIHlpZWxkIHRoZSBtYXRjaCBhdCAwLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtX2lzQ2Fub25pY2FsTWF0Y2hfOworICAgIC8qKgorICAgICAqIFNpemUgb2YgdGhlIHNoaWZ0IHRhYmxlcworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVEFCTEVfU0laRV8gPSAyNTc7IAorICAgIC8qKgorICAgICAqIEluaXRpYWwgYXJyYXkgc2l6ZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTklUSUFMX0FSUkFZX1NJWkVfID0gMjU2OworICAgIC8qKgorICAgICAqIFV0aWxpdHkgbWFzaworICAgICAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRUNPTkRfTEFTVF9CWVRFX1NISUZUXyA9IDg7CisJLyoqCisgICAgICogVXRpbGl0eSBtYXNrCisgICAgICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExBU1RfQllURV9NQVNLXyA9IDB4ZmY7CisJLyoqCisJICogVXRpbGl0eSBidWZmZXIgZm9yIHJldHVybiB2YWx1ZXMgYW5kIHRlbXBvcmFyeSBzdG9yYWdlCisJICovCisJcHJpdmF0ZSBpbnQgbV91dGlsQnVmZmVyX1tdID0gbmV3IGludFsyXTsKKworCS8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBIYXNoIGEgY29sbGF0aW9uIGVsZW1lbnQgZnJvbSBpdHMgZnVsbCBzaXplICgzMiBiaXRzKSBkb3duIGludG8gYQorICAgICAqIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gaW5kZXggaW50byB0aGUgc2hpZnQgdGFibGVzLiAgUmlnaHQKKyAgICAgKiBub3cgd2UgZG8gYSBtb2R1bHVzIGJ5IHRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlLgorICAgICAqIEBwYXJhbSBjZSBjb2xsYXRpb24gZWxlbWVudAorCSAqIEByZXR1cm4gY29sbGFwc2VkIHZlcnNpb24gb2YgdGhlIGNvbGxhdGlvbiBlbGVtZW50CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGhhc2goaW50IGNlKSAKKyAgICB7CisgICAgICAgIC8vIHRoZSBvbGQgdmFsdWUgVUNPTF9QUklNQVJZT1JERVIoY2UpICUgTUFYX1RBQkxFX1NJWkVfIGRvZXMgbm90IHdvcmsKKyAgICAJLy8gd2VsbCB3aXRoIHRoZSBuZXcgY29sbGF0aW9uIHdoZXJlIG1vc3Qgb2YgdGhlIGxhdGluIDEgY2hhcmFjdGVycworICAgIAkvLyBhcmUgb2YgdGhlIHZhbHVlIHh4MDAweHh4LiB0aGVpciBoYXNoZXMgd2lsbCBtb3N0IG9mIHRoZSB0aW1lIGJlIDAKKyAgICAJLy8gdG8gYmUgZGlzY3Vzc2VkIG9uIHRoZSBoYXNoIGFsZ28uCisgICAgCXJldHVybiBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IucHJpbWFyeU9yZGVyKGNlKSAlIE1BWF9UQUJMRV9TSVpFXzsKKyAgICB9CisgICAgCisgICAgLyoqCisJICogR2V0cyB0aGUgZmNkIHZhbHVlIGZvciBhIGNoYXJhY3RlciBhdCB0aGUgYXJndW1lbnQgaW5kZXguCisJICogVGhpcyBtZXRob2QgdGFrZXMgaW50byBhY2NvdW50cyBvZiB0aGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgorCSAqIE5vdGUgdGhpcyBtZXRob2QgY2hhbmdlcyB0aGUgb2Zmc2V0IGluIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IuCisJICogQHBhcmFtIHN0ciBVVEYxNiBzdHJpbmcgd2hlcmUgY2hhcmFjdGVyIGZvciBmY2QgcmV0cmlldmFsIHJlc2lkZXMKKwkgKiBAcGFyYW0gb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgd2hvc2UgZmNkIGlzIHRvIGJlIHJldHJpZXZlZAorCSAqIEByZXR1cm4gZmNkIHZhbHVlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBnZXRGQ0QoQ2hhcmFjdGVySXRlcmF0b3Igc3RyLCBpbnQgb2Zmc2V0KQorCXsKKwkgICAgc3RyLnNldEluZGV4KG9mZnNldCk7CisJICAgIGNoYXIgY2ggPSBzdHIuY3VycmVudCgpOworCSAgICBjaGFyIHJlc3VsdCA9IE5vcm1hbGl6ZXJJbXBsLmdldEZDRDE2KGNoKTsKKwkgICAgCisJICAgIGlmICgocmVzdWx0ICE9IDApICYmIChzdHIuZ2V0RW5kSW5kZXgoKSAhPSBvZmZzZXQgKyAxKSAmJiAKKwkgICAgCVVURjE2LmlzTGVhZFN1cnJvZ2F0ZShjaCkpIHsKKwkgICAgICAgIGNoID0gc3RyLm5leHQoKTsKKwkgICAgICAgIGlmIChVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKGNoKSkgeworCSAgICAgICAgICAgIHJlc3VsdCA9IE5vcm1hbGl6ZXJJbXBsLmdldEZDRDE2RnJvbVN1cnJvZ2F0ZVBhaXIocmVzdWx0LCBjaCk7CisJICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIHJlc3VsdCA9IDA7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJLyoqCisJICogR2V0cyB0aGUgZmNkIHZhbHVlIGZvciBhIGNoYXJhY3RlciBhdCB0aGUgYXJndW1lbnQgaW5kZXguCisJICogVGhpcyBtZXRob2QgdGFrZXMgaW50byBhY2NvdW50cyBvZiB0aGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgorCSAqIEBwYXJhbSBzdHIgVVRGMTYgc3RyaW5nIHdoZXJlIGNoYXJhY3RlciBmb3IgZmNkIHJldHJpZXZhbCByZXNpZGVzCisJICogQHBhcmFtIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIHdob3NlIGZjZCBpcyB0byBiZSByZXRyaWV2ZWQKKwkgKiBAcmV0dXJuIGZjZCB2YWx1ZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgZ2V0RkNEKFN0cmluZyBzdHIsIGludCBvZmZzZXQpCisJeworCSAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChvZmZzZXQpOworCSAgICBjaGFyIHJlc3VsdCA9IE5vcm1hbGl6ZXJJbXBsLmdldEZDRDE2KGNoKTsKKwkgICAgCisJICAgIGlmICgocmVzdWx0ICE9IDApICYmIChzdHIubGVuZ3RoKCkgIT0gb2Zmc2V0ICsgMSkgJiYgCisJICAgIAlVVEYxNi5pc0xlYWRTdXJyb2dhdGUoY2gpKSB7CisJICAgICAgICBjaCA9IHN0ci5jaGFyQXQob2Zmc2V0ICsgMSk7CisJICAgICAgICBpZiAoVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZShjaCkpIHsKKwkgICAgICAgICAgICByZXN1bHQgPSBOb3JtYWxpemVySW1wbC5nZXRGQ0QxNkZyb21TdXJyb2dhdGVQYWlyKHJlc3VsdCwgY2gpOworCSAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgICAgICByZXN1bHQgPSAwOworCSAgICAgICAgfQorCSAgICB9CisJICAgIHJldHVybiByZXN1bHQ7CisJfQorCQorCS8qKgorCSogR2V0dGluZyB0aGUgbW9kaWZpZWQgY29sbGF0aW9uIGVsZW1lbnRzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGNvbGxhdGlvbiAKKwkqIGF0dHJpYnV0ZXMKKwkqIEBwYXJhbSBjZSAKKwkqIEByZXR1cm4gdGhlIG1vZGlmaWVkIGNvbGxhdGlvbiBlbGVtZW50CisJKi8KKwlwcml2YXRlIGZpbmFsIGludCBnZXRDRShpbnQgY2UpCisJeworCSAgICAvLyBub3RlIGZvciB0ZXJ0aWFyeSB3ZSBjYW4ndCB1c2UgdGhlIGNvbGxhdG9yLT50ZXJ0aWFyeU1hc2ssIHRoYXQKKwkgICAgLy8gaXMgYSBwcmVwcm9jZXNzZWQgbWFzayB0aGF0IHRha2VzIGludG8gYWNjb3VudCBjYXNlIG9wdGlvbnMuIHNpbmNlCisJICAgIC8vIHdlIGFyZSBvbmx5IGNvbmNlcm5lZCB3aXRoIGV4YWN0IG1hdGNoZXMsIHdlIGRvbid0IG5lZWQgdGhhdC4KKwkgICAgY2UgJj0gbV9jZU1hc2tfOworCSAgICAKKwkgICAgaWYgKG1fY29sbGF0b3JfLmlzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkKCkpIHsKKwkgICAgICAgIC8vIGFsdGVybmF0ZSBoYW5kbGluZyBoZXJlLCBzaW5jZSBvbmx5IHRoZSAxNiBtb3N0IHNpZ25pZmljYW50IAorCSAgICAgICAgLy8gZGlnaXRzIGlzIG9ubHkgdXNlZCwgd2UgY2FuIHNhZmVseSBkbyBhIGNvbXBhcmUgd2l0aG91dCBtYXNraW5nCisJICAgICAgICAvLyBpZiB0aGUgY2UgaXMgYSB2YXJpYWJsZSwgd2UgbWFzayBhbmQgZ2V0IG9ubHkgdGhlIHByaW1hcnkgdmFsdWVzCisJICAgICAgICAvLyBubyBzaGlmdGluZyB0byBxdWFydGVuYXJ5IGlzIHJlcXVpcmVkIHNpbmNlIGFsbCBwcmltYXJ5IHZhbHVlcworCSAgICAgICAgLy8gbGVzcyB0aGFuIHZhcmlhYmxldG9wIHdpbGwgbmVlZCB0byBiZSBtYXNrZWQgb2ZmIGFueXdheS4KKwkgICAgICAgIGlmICgobV9jb2xsYXRvcl8ubV92YXJpYWJsZVRvcFZhbHVlXyAgPDwgMTYpID4gY2UpIHsKKwkgICAgICAgICAgICBpZiAobV9jb2xsYXRvcl8uZ2V0U3RyZW5ndGgoKSA9PSBDb2xsYXRvci5RVUFURVJOQVJZKSB7CisJICAgICAgICAgICAgICAgIGNlID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLnByaW1hcnlPcmRlcihjZSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeyAKKwkgICAgICAgICAgICAgICAgY2UgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfQorCQorCSAgICByZXR1cm4gY2U7CisJfQorCQorCS8qKgorCSAqIEFwcGVuZHMgYSBpbnQgdG8gYSBpbnQgYXJyYXksIGluY3JlYXNpbmcgdGhlIHNpemUgb2YgdGhlIGFycmF5IHdoZW4gCisJICogd2UgYXJlIG91dCBvZiBzcGFjZS4KKwkgKiBAcGFyYW0gb2Zmc2V0IGluIGFycmF5IHRvIGFwcGVuZCB0bworCSAqIEBwYXJhbSB2YWx1ZSB0byBhcHBlbmQKKwkgKiBAcGFyYW0gYXJyYXkgdG8gYXBwZW5kIHRvCisJICogQHJldHVybiB0aGUgYXJyYXkgYXBwZW5kZWQgdG8sIHRoaXMgY291bGQgYmUgYSBuZXcgYW5kIGJpZ2dlciBhcnJheQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIGFwcGVuZChpbnQgb2Zmc2V0LCBpbnQgdmFsdWUsIGludCBhcnJheVtdKQorCXsKKwkJaWYgKG9mZnNldCA+PSBhcnJheS5sZW5ndGgpIHsKKwkJCWludCB0ZW1wW10gPSBuZXcgaW50W29mZnNldCArIElOSVRJQUxfQVJSQVlfU0laRV9dOworCQkJU3lzdGVtLmFycmF5Y29weShhcnJheSwgMCwgdGVtcCwgMCwgYXJyYXkubGVuZ3RoKTsKKwkJCWFycmF5ID0gdGVtcDsKKwkJfQorCQlhcnJheVtvZmZzZXRdID0gdmFsdWU7CisJCXJldHVybiBhcnJheTsKKwl9CisJCisJLyoqCisJICogSW5pdGlhbGl6aW5nIHRoZSBjZSB0YWJsZSBmb3IgYSBwYXR0ZXJuLiBTdG9yZXMgbm9uLWlnbm9yYWJsZSBjb2xsYXRpb24gCisJICoga2V5cy4gVGFibGUgc2l6ZSB3aWxsIGJlIGVzdGltYXRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgcGF0dGVybiB0ZXh0LiAKKwkgKiBUYWJsZSBleHBhbnNpb24gd2lsbCBiZSBwZXJmb3JtIGFzIHdlIGdvIGFsb25nLiBBZGRpbmcgMSB0byBlbnN1cmUgdGhhdCAKKwkgKiB0aGUgdGFibGUgc2l6ZSBkZWZpbml0ZWx5IGluY3JlYXNlcy4KKwkgKiBJbnRlcm5hbCBtZXRob2QsIHN0YXR1cyBhc3N1bWVkIHRvIGJlIGEgc3VjY2Vzcy4KKwkgKiBAcmV0dXJuIHRvdGFsIG51bWJlciBvZiBleHBhbnNpb25zIAorCSAqLworCXByaXZhdGUgZmluYWwgaW50IGluaXRpYWxpemVQYXR0ZXJuQ0VUYWJsZSgpCisJeworCSAgICBtX3V0aWxDb2xFSXRlcl8uc2V0VGV4dChtX3BhdHRlcm5fLnRhcmdldFRleHQpOworCSAgICAKKwkgICAgaW50IG9mZnNldCA9IDA7CisJICAgIGludCByZXN1bHQgPSAwOworCSAgICBpbnQgY2UgPSBtX3V0aWxDb2xFSXRlcl8ubmV4dCgpOworCQorCSAgICB3aGlsZSAoY2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgaW50IG5ld2NlID0gZ2V0Q0UoY2UpOworCSAgICAgICAgaWYgKG5ld2NlICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgICBtX3BhdHRlcm5fLm1fQ0VfID0gYXBwZW5kKG9mZnNldCwgbmV3Y2UsIG1fcGF0dGVybl8ubV9DRV8pOworCSAgICAgICAgICAgIG9mZnNldCArKzsJICAgICAgICAKKwkgICAgICAgIH0KKwkgICAgICAgIHJlc3VsdCArPSBtX3V0aWxDb2xFSXRlcl8uZ2V0TWF4RXhwYW5zaW9uKGNlKSAtIDE7CisJICAgICAgICBjZSA9IG1fdXRpbENvbEVJdGVyXy5uZXh0KCk7CisJICAgIH0KKwkKKwkgICAgbV9wYXR0ZXJuXy5tX0NFXyA9IGFwcGVuZChvZmZzZXQsIDAsIG1fcGF0dGVybl8ubV9DRV8pOworCSAgICBtX3BhdHRlcm5fLm1fQ0VMZW5ndGhfID0gb2Zmc2V0OworCQorCSAgICByZXR1cm4gcmVzdWx0OworCX0KKwkKKwkvKioKKwkgKiBJbml0aWFsaXplcyB0aGUgcGF0dGVybiBzdHJ1Y3QuCisJICogSW50ZXJuYWwgbWV0aG9kLCBzdGF0dXMgYXNzdW1lZCB0byBiZSBzdWNjZXNzLgorCSAqIEByZXR1cm4gZXhwYW5zaW9uc2l6ZSB0aGUgdG90YWwgZXhwYW5zaW9uIHNpemUgb2YgdGhlIHBhdHRlcm4KKwkgKi8gCisJcHJpdmF0ZSBmaW5hbCBpbnQgaW5pdGlhbGl6ZVBhdHRlcm4oKQorCXsKKwkgICAgbV9wYXR0ZXJuXy5tX2hhc1ByZWZpeEFjY2VudHNfID0gKGdldEZDRChtX3BhdHRlcm5fLnRhcmdldFRleHQsIDApIAorCSAgICAJCQkJCQkJCQkgPj4gU0VDT05EX0xBU1RfQllURV9TSElGVF8pICE9IDA7CisJICAgIG1fcGF0dGVybl8ubV9oYXNTdWZmaXhBY2NlbnRzXyA9IChnZXRGQ0QobV9wYXR0ZXJuXy50YXJnZXRUZXh0LCAKKwkgICAgCQkJCQkJCQkJCSBtX3BhdHRlcm5fLnRhcmdldFRleHQubGVuZ3RoKCkgCisJICAgIAkJCQkJCQkJCQkgLSAxKSAKKwkgICAgCQkJCQkJCQkJJiBMQVNUX0JZVEVfTUFTS18pICE9IDA7CisJICAgIC8vIHNpbmNlIGludGlhbGl6ZVBhdHRlcm4gaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHN0YXR1cyBpcyBhIHN1Y2Nlc3MuCisJICAgIHJldHVybiBpbml0aWFsaXplUGF0dGVybkNFVGFibGUoKTsgICAKKwl9CisJCisJLyoqCisJICogSW5pdGlhbGl6aW5nIHNoaWZ0IHRhYmxlcywgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMuCisJICogSWYgYSBjb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUgaXMgMCwgdGhlIHNoaWZ0IHRhYmxlIGlzIG5vdCBzZXQuCisJICogQHBhcmFtIHNoaWZ0IHRhYmxlIGZvciBmb3J3YXJkcyBzaGlmdCAKKwkgKiBAcGFyYW0gYmFja3NoaWZ0IHRhYmxlIGZvciBiYWNrd2FyZHMgc2hpZnQKKwkgKiBAcGFyYW0gY2V0YWJsZSB0YWJsZSBjb250YWluaW5nIHBhdHRlcm4gY2UKKwkgKiBAcGFyYW0gY2VzaXplIHNpemUgb2YgdGhlIHBhdHRlcm4gY2VzCisJICogQHBhcmFtIGV4cGFuc2lvbnNpemUgdG90YWwgc2l6ZSBvZiB0aGUgZXhwYW5zaW9ucworCSAqIEBwYXJhbSBkZWZhdWx0Zm9yd2FyZCB0aGUgZGVmYXVsdCBmb3J3YXJkIHZhbHVlCisJICogQHBhcmFtIGRlZmF1bHRiYWNrd2FyZCB0aGUgZGVmYXVsdCBiYWNrd2FyZCB2YWx1ZQorCSAqLworCSBwcml2YXRlIGZpbmFsIHZvaWQgc2V0U2hpZnRUYWJsZShjaGFyIHNoaWZ0W10sIAorCSAJCQkJCQkJCQkJCSAgIGNoYXIgYmFja3NoaWZ0W10sIAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgCSAgIGludCBjZXRhYmxlW10sIGludCBjZXNpemUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAJICAgaW50IGV4cGFuc2lvbnNpemUsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAJICAgY2hhciBkZWZhdWx0Zm9yd2FyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgCSAgIGNoYXIgZGVmYXVsdGJhY2t3YXJkKQorCXsKKwkgICAgLy8gZXN0aW1hdGUgdGhlIHZhbHVlIHRvIHNoaWZ0LiB0byBkbyB0aGF0IHdlIGVzdGltYXRlIHRoZSBzbWFsbGVzdCAKKwkgICAgLy8gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gZ2l2ZSB0aGUgcmVsZXZhbnQgY2VzLCBpZSBhcHByb3hpbWF0ZWx5CisJICAgIC8vIHRoZSBudW1iZXIgb2YgY2VzIG1pbnVzIHRoZWlyIGV4cGFuc2lvbiwgc2luY2UgZXhwYW5zaW9ucyBjYW4gY29tZSAKKwkgICAgLy8gZnJvbSBhIGNoYXJhY3Rlci4KKwkgICAgZm9yIChpbnQgY291bnQgPSAwOyBjb3VudCA8IE1BWF9UQUJMRV9TSVpFXzsgY291bnQgKyspIHsKKwkgICAgICAgIHNoaWZ0W2NvdW50XSA9IGRlZmF1bHRmb3J3YXJkOworCSAgICB9CisJICAgIGNlc2l6ZSAtLTsgLy8gZG93biB0byB0aGUgbGFzdCBpbmRleAorCSAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgY2VzaXplOyBjb3VudCArKykgeworCSAgICAgICAgLy8gbnVtYmVyIG9mIGNlcyBmcm9tIHJpZ2h0IG9mIGFycmF5IHRvIHRoZSBjb3VudAorCSAgICAgICAgaW50IHRlbXAgPSBkZWZhdWx0Zm9yd2FyZCAtIGNvdW50IC0gMTsKKwkgICAgICAgIHNoaWZ0W2hhc2goY2V0YWJsZVtjb3VudF0pXSA9IHRlbXAgPiAxID8gKChjaGFyKXRlbXApIDogMTsKKwkgICAgfQorCSAgICBzaGlmdFtoYXNoKGNldGFibGVbY2VzaXplXSldID0gMTsKKwkgICAgLy8gZm9yIGlnbm9yYWJsZXMgd2UganVzdCBzaGlmdCBieSBvbmUuIHNlZSB0ZXN0IGV4YW1wbGVzLgorCSAgICBzaGlmdFtoYXNoKDApXSA9IDE7CisJICAgIAorCSAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgTUFYX1RBQkxFX1NJWkVfOyBjb3VudCArKykgeworCSAgICAgICAgYmFja3NoaWZ0W2NvdW50XSA9IGRlZmF1bHRiYWNrd2FyZDsKKwkgICAgfQorCSAgICBmb3IgKGludCBjb3VudCA9IGNlc2l6ZTsgY291bnQgPiAwOyBjb3VudCAtLSkgeworCSAgICAgICAgLy8gdGhlIG9yaWdpbmFsIHZhbHVlIGNvdW50IGRvZXMgbm90IHNlZW0gdG8gd29yaworCSAgICAgICAgYmFja3NoaWZ0W2hhc2goY2V0YWJsZVtjb3VudF0pXSA9IChjaGFyKShjb3VudCA+IGV4cGFuc2lvbnNpemUgPyAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWNvdW50IC0gZXhwYW5zaW9uc2l6ZSA6IDEpOworCSAgICB9CisJICAgIGJhY2tzaGlmdFtoYXNoKGNldGFibGVbMF0pXSA9IDE7CisJICAgIGJhY2tzaGlmdFtoYXNoKDApXSA9IDE7CisJfQorCQorCS8qKgorCSAqIDxwPkJ1aWxkaW5nIG9mIHRoZSBwYXR0ZXJuIGNvbGxhdGlvbiBlbGVtZW50IGxpc3QgYW5kIHRoZSBCb3llciBNb29yZSAKKwkgKiBTdHJpbmdTZWFyY2ggdGFibGUuPC9wPgorCSAqIDxwPlRoZSBjYW5vbmljYWwgbWF0Y2ggd2lsbCBvbmx5IGJlIHBlcmZvcm1lZCBhZnRlciB0aGUgZGVmYXVsdCBtYXRjaCAKKwkgKiBmYWlscy48L3A+CisJICogPHA+Rm9yIGJvdGggY2FzZXMgd2UgbmVlZCB0byByZW1lbWJlciB0aGUgc2l6ZSBvZiB0aGUgY29tcG9zZWQgYW5kIAorCSAqIGRlY29tcG9zZWQgdmVyc2lvbnMgb2YgdGhlIHN0cmluZy4gU2luY2UgdGhlIEJveWVyLU1vb3JlIHNoaWZ0IAorCSAqIGNhbGN1bGF0aW9ucyBzaGlmdHMgYnkgYSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgdGV4dCBhbmQgdHJpZXMgdG8gCisJICogbWF0Y2ggdGhlIHBhdHRlcm4gZnJvbSB0aGF0IG9mZnNldCwgdGhlIHNoaWZ0IHZhbHVlIGNhbiBub3QgYmUgdG9vIGxhcmdlIAorCSAqIGluIGNhc2Ugd2UgbWlzcyBzb21lIGNoYXJhY3RlcnMuIFRvIGNob29zZSBhIHJpZ2h0IHNoaWZ0IHNpemUsIHdlIAorCSAqIGVzdGltYXRlIHRoZSBORkMgZm9ybSBvZiB0aGUgYW5kIHVzZSBpdHMgc2l6ZSBhcyBhIHNoaWZ0IGd1aWRlLiBUaGUgTkZDIAorCSAqIGZvcm0gc2hvdWxkIGJlIHRoZSBzbWFsbCBwb3NzaWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0dGVybi4gQW55d2F5cywgCisJICogd2UnbGwgZXJyIG9uIHRoZSBzbWFsbGVyIHNoaWZ0IHNpemUuIEhlbmNlIHRoZSBjYWxjdWxhdGlvbiBmb3IgCisJICogbWlubGVuZ3RoLiBDYW5vbmljYWwgbWF0Y2ggd2lsbCBiZSBwZXJmb3JtZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkuIFdlJ2xsIAorCSAqIHNwbGl0IHRoZSBwYXR0ZXJuIGludG8gMyBwYXJ0cywgdGhlIHByZWZpeCBhY2NlbnRzIChQQSksIHRoZSBtaWRkbGUgCisJICogc3RyaW5nIGJvdW5kZWQgYnkgdGhlIGZpcnN0IGFuZCBsYXN0IGJhc2UgY2hhcmFjdGVyIChNUyksIHRoZSBlbmRpbmcgCisJICogYWNjZW50cyAoRUEpLiBNYXRjaGVzIHdpbGwgYmUgZG9uZSBvbiBNUyBmaXJzdCwgYW5kIG9ubHkgd2hlbiB3ZSBtYXRjaCAKKwkgKiBNUyB0aGVuIHNvbWUgcHJvY2Vzc2luZyB3aWxsIGJlIHJlcXVpcmVkIGZvciB0aGUgcHJlZml4IGFuZCBlbmQgYWNjZW50cyAKKwkgKiBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgdGhleSBtYXRjaCBQQSBhbmQgRUEuIEhlbmNlIHRoZSBkZWZhdWx0IHNoaWZ0IAorCSAqIHZhbHVlcyBmb3IgdGhlIGNhbm9uaWNhbCBtYXRjaCB3aWxsIHRha2UgdGhlIHNpemUgb2YgZWl0aGVyIGVuZCdzIGFjY2VudCAKKwkgKiBpbnRvIGNvbnNpZGVyYXRpb24uIEZvcndhcmRzIHNlYXJjaCB3aWxsIHRha2UgdGhlIGVuZCBhY2NlbnRzIGludG8gCisJICogY29uc2lkZXJhdGlvbiBmb3IgdGhlIGRlZmF1bHQgc2hpZnQgdmFsdWVzIGFuZCB0aGUgYmFja3dhcmRzIHNlYXJjaCB3aWxsIAorCSAqIHRha2UgdGhlIHByZWZpeCBhY2NlbnRzIGludG8gY29uc2lkZXJhdGlvbi48L3A+CisJICogPHA+SWYgcGF0dGVybiBoYXMgbm8gbm9uLWlnbm9yYWJsZSBjZSwgd2UgcmV0dXJuIGEgaWxsZWdhbCBhcmd1bWVudCAKKwkgKiBlcnJvci48L3A+CisJICovIAorCXByaXZhdGUgZmluYWwgdm9pZCBpbml0aWFsaXplKCkKKwl7CisJICAgIGludCBleHBhbmRsZW5ndGggID0gaW5pdGlhbGl6ZVBhdHRlcm4oKTsgICAKKwkgICAgaWYgKG1fcGF0dGVybl8ubV9DRUxlbmd0aF8gPiAwKSB7CisJICAgICAgICBjaGFyIG1pbmxlbmd0aCA9IChjaGFyKShtX3BhdHRlcm5fLm1fQ0VMZW5ndGhfID4gZXhwYW5kbGVuZ3RoIAorCSAgICAgICAgCQkJCQk/IG1fcGF0dGVybl8ubV9DRUxlbmd0aF8gLSBleHBhbmRsZW5ndGggOiAxKTsKKwkgICAgICAgIG1fcGF0dGVybl8ubV9kZWZhdWx0U2hpZnRTaXplXyA9IG1pbmxlbmd0aDsKKyAgICAgICAgICAgIHNldFNoaWZ0VGFibGUobV9wYXR0ZXJuXy5tX3NoaWZ0XywgbV9wYXR0ZXJuXy5tX2JhY2tTaGlmdF8sIAorCSAgICAgICAgCQkJICBtX3BhdHRlcm5fLm1fQ0VfLCBtX3BhdHRlcm5fLm1fQ0VMZW5ndGhfLCAKKwkgICAgICAgIAkJCSAgZXhwYW5kbGVuZ3RoLCBtaW5sZW5ndGgsIG1pbmxlbmd0aCk7CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgIAltX3BhdHRlcm5fLm1fZGVmYXVsdFNoaWZ0U2l6ZV8gPSAwOworCSAgICB9CisJfQorCQorCS8qKgorCSAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzZWFyY2ggdGV4dCBib3VuZGVkIGJ5IHRoZSBvZmZzZXQgc3RhcnQgYW5kIGVuZCBpcyAKKwkgKiBvbmUgb3IgbW9yZSB3aG9sZSB1bml0cyBvZiB0ZXh0IGFzIGRldGVybWluZWQgYnkgdGhlIGJyZWFraXRlcmF0b3IgaW4gCisJICogU3RyaW5nU2VhcmNoLgorCSAqIEBwYXJhbSBzdGFydCB0YXJnZXQgdGV4dCBzdGFydCBvZmZzZXQKKwkgKiBAcGFyYW0gZW5kIHRhcmdldCB0ZXh0IGVuZCBvZmZzZXQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNCcmVha1VuaXQoaW50IHN0YXJ0LCBpbnQgZW5kKSAKKwl7CisJICAgIGlmIChicmVha0l0ZXJhdG9yICE9IG51bGwpIHsKKwkgICAgICAgIGludCBzdGFydGluZGV4ID0gYnJlYWtJdGVyYXRvci5maXJzdCgpOworCSAgICAgICAgaW50IGVuZGluZGV4ICAgPSBicmVha0l0ZXJhdG9yLmxhc3QoKTsKKwkgICAgICAgIAorCSAgICAgICAgLy8gb3V0LW9mLXJhbmdlIGluZGV4ZXMgYXJlIG5ldmVyIGJvdW5kYXJ5IHBvc2l0aW9ucworCSAgICAgICAgaWYgKHN0YXJ0IDwgc3RhcnRpbmRleCB8fCBzdGFydCA+IGVuZGluZGV4IHx8IGVuZCA8IHN0YXJ0aW5kZXggCisJICAgICAgICAJfHwgZW5kID4gZW5kaW5kZXgpIHsKKwkgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICB9CisJICAgICAgICAvLyBvdGhlcndpc2UsIHdlIGNhbiB1c2UgZm9sbG93aW5nKCkgb24gdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgCisJICAgICAgICAvLyBzcGVjaWZpZWQgb25lIGFuZCByZXR1cm4gdHJ1ZSBvZiB0aGUgcG9zaXRpb24gd2UgZ2V0IGJhY2sgaXMgdGhlIAorCSAgICAgICAgLy8gb25lIHRoZSB1c2VyIHNwZWNpZmllZAorCSAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAoc3RhcnQgPT0gc3RhcnRpbmRleCAKKwkgICAgICAgIAkJCQkgIHx8IGJyZWFrSXRlcmF0b3IuZm9sbG93aW5nKHN0YXJ0IC0gMSkgPT0gc3RhcnQpIAorCSAgICAgICAgCQkJCSAmJiAoZW5kID09IGVuZGluZGV4IAorCSAgICAgICAgCQkJCSAJIHx8IGJyZWFrSXRlcmF0b3IuZm9sbG93aW5nKGVuZCAtIDEpID09IGVuZCk7CisJICAgICAgICBpZiAocmVzdWx0KSB7CisJICAgICAgICAgICAgLy8gaXRlcmF0ZXMgdGhlIGluZGl2aWR1YWwgY2VzCisJICAgICAgICAgICAgbV91dGlsQ29sRUl0ZXJfLnNldFRleHQodGFyZ2V0VGV4dCwgc3RhcnQpOworCSAgICAgICAgICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCBtX3BhdHRlcm5fLm1fQ0VMZW5ndGhfOworCSAgICAgICAgICAgICAgICAgY291bnQgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNlID0gZ2V0Q0UobV91dGlsQ29sRUl0ZXJfLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGlmIChjZSAhPSBtX3BhdHRlcm5fLm1fQ0VfW2NvdW50XSkgeworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBuZXh0Y2UgPSBtX3V0aWxDb2xFSXRlcl8ubmV4dCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChtX3V0aWxDb2xFSXRlcl8uZ2V0T2Zmc2V0KCkgPT0gZW5kIAorICAgICAgICAgICAgICAgICAgICAgICAmJiBnZXRDRShuZXh0Y2UpID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dGNlID0gbV91dGlsQ29sRUl0ZXJfLm5leHQoKTsgICAgICAgCisgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChuZXh0Y2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiAKKwkgICAgICAgICAgICAJJiYgbV91dGlsQ29sRUl0ZXJfLmdldE9mZnNldCgpID09IGVuZCkgeworCSAgICAgICAgICAgICAgICAvLyBleHRyYSBjb2xsYXRpb24gZWxlbWVudHMgYXQgdGhlIGVuZCBvZiB0aGUgbWF0Y2gKKwkgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH0KKwkgICAgcmV0dXJuIHRydWU7CisJfQorCQorCS8qKgorCSAqIEdldHRpbmcgdGhlIG5leHQgYmFzZSBjaGFyYWN0ZXIgb2Zmc2V0IGlmIGN1cnJlbnQgb2Zmc2V0IGlzIGFuIGFjY2VudCwgCisJICogb3IgdGhlIGN1cnJlbnQgb2Zmc2V0IGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBjb250YWlucyBhIGJhc2UgY2hhcmFjdGVyLiAKKwkgKiBhY2NlbnRzIHRoZSBmb2xsb3dpbmcgYmFzZSBjaGFyYWN0ZXIgd2lsbCBiZSByZXR1cm5lZAorCSAqIEBwYXJhbSB0ZXh0IHN0cmluZworCSAqIEBwYXJhbSB0ZXh0b2Zmc2V0IGN1cnJlbnQgb2Zmc2V0CisJICogQHBhcmFtIHRleHRsZW5ndGggbGVuZ3RoIG9mIHRleHQgc3RyaW5nCisJICogQHJldHVybiB0aGUgbmV4dCBiYXNlIGNoYXJhY3RlciBvciB0aGUgY3VycmVudCBvZmZzZXQKKwkgKiAgICAgICAgIGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBjb250YWlucyBhIGJhc2UgY2hhcmFjdGVyLgorCSAqLworCXByaXZhdGUgZmluYWwgaW50IGdldE5leHRCYXNlT2Zmc2V0KENoYXJhY3Rlckl0ZXJhdG9yIHRleHQsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSBpbnQgdGV4dG9mZnNldCkKKwl7CisJICAgIGlmICh0ZXh0b2Zmc2V0IDwgdGV4dC5nZXRFbmRJbmRleCgpKSB7CisJICAgICAgICB3aGlsZSAodGV4dC5nZXRJbmRleCgpIDwgdGV4dC5nZXRFbmRJbmRleCgpKSB7IAorCSAgICAgICAgICAgIGludCByZXN1bHQgPSB0ZXh0b2Zmc2V0OworCSAgICAgICAgICAgIGlmICgoZ2V0RkNEKHRleHQsIHRleHRvZmZzZXQgKyspIAorCSAgICAgICAgICAgICAgICAJCT4+IFNFQ09ORF9MQVNUX0JZVEVfU0hJRlRfKSA9PSAwKSB7CisJICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0ZXh0LmdldEVuZEluZGV4KCk7CisJICAgIH0KKwkgICAgcmV0dXJuIHRleHRvZmZzZXQ7CisJfQorCQorCS8qKgorCSAqIEdldHMgdGhlIG5leHQgYmFzZSBjaGFyYWN0ZXIgb2Zmc2V0IGRlcGVuZGluZyBvbiB0aGUgc3RyaW5nIHNlYXJjaCAKKwkgKiBwYXR0ZXJuIGRhdGEKKwkgKiBAcGFyYW0gdGV4dG9mZnNldCBvbmUgb2Zmc2V0IGF3YXkgZnJvbSB0aGUgbGFzdCBjaGFyYWN0ZXIKKwkgKiAgICAgICAgICAgICAgICAgICB0byBzZWFyY2ggZm9yLgorCSAqIEByZXR1cm4gc3RhcnQgaW5kZXggb2YgdGhlIG5leHQgYmFzZSBjaGFyYWN0ZXIgb3IgdGhlIGN1cnJlbnQgb2Zmc2V0CisJICogICAgICAgICBpZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgY29udGFpbnMgYSBiYXNlIGNoYXJhY3Rlci4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBnZXROZXh0QmFzZU9mZnNldChpbnQgdGV4dG9mZnNldCkKKwl7CisJICAgIGlmIChtX3BhdHRlcm5fLm1faGFzU3VmZml4QWNjZW50c18gCisJICAgIAkmJiB0ZXh0b2Zmc2V0IDwgbV90ZXh0TGltaXRPZmZzZXRfKSB7CisgICAgICAgICAgICB0YXJnZXRUZXh0LnNldEluZGV4KHRleHRvZmZzZXQpOworICAgICAgICAgICAgdGFyZ2V0VGV4dC5wcmV2aW91cygpOworICAgICAgICAgICAgaWYgKChnZXRGQ0QodGFyZ2V0VGV4dCwgdGFyZ2V0VGV4dC5nZXRJbmRleCgpKSAmIExBU1RfQllURV9NQVNLXykgIT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBnZXROZXh0QmFzZU9mZnNldCh0YXJnZXRUZXh0LCB0ZXh0b2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gdGV4dG9mZnNldDsKKwl9CisJCisJLyoqCisJICogU2hpZnRpbmcgdGhlIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yIHBvc2l0aW9uIGZvcndhcmQgdG8gcHJlcGFyZSBmb3IKKwkgKiBhIGZvbGxvd2luZyBtYXRjaC4gSWYgdGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgdW5zYWZlIGNoYXJhY3Rlciwgd2UnbGwgCisJICogb25seSBzaGlmdCBieSAxIHRvIGNhcHR1cmUgY29udHJhY3Rpb25zLCBub3JtYWxpemF0aW9uIGV0Yy4KKwkgKiBJbnRlcm5hbCBtZXRob2QsIHN0YXR1cyBhc3N1bWVkIHRvIGJlIHN1Y2Nlc3MuCisJICogQHBhcmFtIHRleHRvZmZzZXQgc3RhcnQgdGV4dCBwb3NpdGlvbiB0byBkbyBzZWFyY2gKKwkgKiBAcGFyYW0gY2UgdGhlIHRleHQgY2Ugd2hpY2ggZmFpbGVkIHRoZSBtYXRjaC4KKwkgKiBAcGFyYW0gcGF0dGVybmNlaW5kZXggaW5kZXggb2YgdGhlIGNlIHdpdGhpbiB0aGUgcGF0dGVybiBjZSBidWZmZXIgd2hpY2gKKwkgKiAgICAgICAgZmFpbGVkIHRoZSBtYXRjaAorCSAqIEByZXR1cm4gZmluYWwgb2Zmc2V0CisJICovCisJcHJpdmF0ZSBpbnQgc2hpZnRGb3J3YXJkKGludCB0ZXh0b2Zmc2V0LCBpbnQgY2UsIGludCBwYXR0ZXJuY2VpbmRleCkKKwkJCQkJCQkJCQorCXsKKwkgICAgaWYgKGlzT3ZlcmxhcHBpbmcoKSkgeworCSAgICAgICAgaWYgKHRleHRvZmZzZXQgPiBtX3RleHRCZWdpbk9mZnNldF8pIHsKKwkgICAgICAgICAgICB0ZXh0b2Zmc2V0ICsrOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGV4dG9mZnNldCA9IG1fcGF0dGVybl8ubV9kZWZhdWx0U2hpZnRTaXplXzsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICAgIGlmIChjZSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgICAgaW50IHNoaWZ0ID0gbV9wYXR0ZXJuXy5tX3NoaWZ0X1toYXNoKGNlKV07CisJICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBhZGp1c3QgZm9yIGNoYXJhY3RlcnMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgCisJICAgICAgICAgICAgLy8gc3Vic3RyaW5nIGZvciBtYXRjaGluZyB0aGF0IGZhaWxlZC4KKwkgICAgICAgICAgICBpbnQgYWRqdXN0ID0gbV9wYXR0ZXJuXy5tX0NFTGVuZ3RoXyAtIHBhdHRlcm5jZWluZGV4OworCSAgICAgICAgICAgIGlmIChhZGp1c3QgPiAxICYmIHNoaWZ0ID49IGFkanVzdCkgeworCSAgICAgICAgICAgICAgICBzaGlmdCAtPSBhZGp1c3QgLSAxOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB0ZXh0b2Zmc2V0ICs9IHNoaWZ0OworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGV4dG9mZnNldCArPSBtX3BhdHRlcm5fLm1fZGVmYXVsdFNoaWZ0U2l6ZV87CisJICAgICAgICB9CisJICAgIH0KKwkgICAgIAorICAgICAgICB0ZXh0b2Zmc2V0ID0gZ2V0TmV4dEJhc2VPZmZzZXQodGV4dG9mZnNldCk7CisJICAgIC8vIGNoZWNrIGZvciB1bnNhZmUgY2hhcmFjdGVycworCSAgICAvLyAqIGlmIGl0IGlzIHRoZSBzdGFydCBvciBtaWRkbGUgb2YgYSBjb250cmFjdGlvbjogdG8gYmUgZG9uZSBhZnRlciAKKwkgICAgLy8gICBhIGluaXRpYWwgbWF0Y2ggaXMgZm91bmQKKwkgICAgLy8gKiB0aGFpIG9yIGxhbyBiYXNlIGNvbnNvbmFudCBjaGFyYWN0ZXI6IHNpbWlsYXIgdG8gY29udHJhY3Rpb24KKwkgICAgLy8gKiBoaWdoIHN1cnJvZ2F0ZSBjaGFyYWN0ZXI6IHNpbWlsYXIgdG8gY29udHJhY3Rpb24KKwkgICAgLy8gKiBuZXh0IGNoYXJhY3RlciBpcyBhIGFjY2VudDogc2hpZnQgdG8gdGhlIG5leHQgYmFzZSBjaGFyYWN0ZXIKKwkgICAgcmV0dXJuIHRleHRvZmZzZXQ7CisJfQorCQorCS8qKgorCSAqIEdldHMgdGhlIG9mZnNldCB0byB0aGUgbmV4dCBzYWZlIHBvaW50IGluIHRleHQuCisJICogaWUuIG5vdCB0aGUgbWlkZGxlIG9mIGEgY29udHJhY3Rpb24sIHN3YXBwYWJsZSBjaGFyYWN0ZXJzIG9yIAorCSAqIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4KKwkgKiBAcGFyYW0gdGV4dG9mZnNldCBvZmZzZXQgaW4gc3RyaW5nCisJICogQHBhcmFtIGVuZCBvZmZzZXQgaW4gc3RyaW5nCisJICogQHJldHVybiBvZmZzZXQgdG8gdGhlIG5leHQgc2FmZSBjaGFyYWN0ZXIKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBnZXROZXh0U2FmZU9mZnNldChpbnQgdGV4dG9mZnNldCwgaW50IGVuZCkKKwl7CisJICAgIGludCByZXN1bHQgPSB0ZXh0b2Zmc2V0OyAvLyBmaXJzdCBjb250cmFjdGlvbiBjaGFyYWN0ZXIKKwkgICAgdGFyZ2V0VGV4dC5zZXRJbmRleChyZXN1bHQpOworCSAgICB3aGlsZSAocmVzdWx0ICE9IGVuZCAmJiAKKwkgICAgCW1fY29sbGF0b3JfLmlzVW5zYWZlKHRhcmdldFRleHQuY3VycmVudCgpKSkgeworCSAgICAgICAJcmVzdWx0ICsrOworCSAgICAgICAJdGFyZ2V0VGV4dC5zZXRJbmRleChyZXN1bHQpOworCSAgICB9CisJICAgIHJldHVybiByZXN1bHQ7IAorCX0KKwkKKwkvKiogCisJICogVGhpcyBjaGVja3MgZm9yIGFjY2VudHMgaW4gdGhlIHBvdGVudGlhbCBtYXRjaCBzdGFydGVkIHdpdGggYSBjb21wb3NpdGUgCisJICogY2hhcmFjdGVyLgorCSAqIFRoaXMgaXMgcmVhbGx5IHBhaW5mdWwuLi4gd2UgaGF2ZSB0byBjaGVjayB0aGF0IGNvbXBvc2l0ZSBjaGFyYWN0ZXIgZG8gCisJICogbm90IGhhdmUgYW55IGV4dHJhIGFjY2VudHMuIFdlIGhhdmUgdG8gbm9ybWFsaXplIHRoZSBwb3RlbnRpYWwgbWF0Y2ggYW5kIAorCSAqIGZpbmQgdGhlIGltbWVkaWF0ZSBkZWNvbXBvc2VkIGNoYXJhY3RlciBiZWZvcmUgdGhlIG1hdGNoLgorCSAqIFRoZSBmaXJzdCBjb21wb3NpdGUgY2hhcmFjdGVyIHdvdWxkIGhhdmUgYmVlbiB0YWtlbiBjYXJlIG9mIGJ5IHRoZSBmY2QgCisJICogY2hlY2tzIGluIGNoZWNrRm9yd2FyZEV4YWN0TWF0Y2guCisJICogVGhpcyBpcyB0aGUgc2xvdyBwYXRoIGFmdGVyIHRoZSBmY2Qgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgCisJICogdGhlIGxhc3QgY2hhcmFjdGVyIGhhcyBiZWVuIGNoZWNrZWQgYnkgY2hlY2tGb3J3YXJkRXhhY3RNYXRjaCBhbmQgd2UgCisJICogZGV0ZXJtaW5lIHRoYXQgdGhlIHBvdGVudGlhbCBtYXRjaCBoYXMgZXh0cmEgbm9uLWlnbm9yYWJsZSBwcmVjZWRpbmcKKwkgKiBjZXMuCisJICogRS5nLiBsb29raW5nIGZvciBcdTAzMDEgYWN1dGUgaW4gXHUwMUZBIEEgcmluZyBhYm92ZSBhbmQgYWN1dGUsIAorCSAqIGNoZWNrRXh0cmFNYXRjaEFjY2VudCBzaG91bGQgZmFpbCBzaW5jZSB0aGVyZSBpcyBhIG1pZGRsZSByaW5nIGluIAorCSAqIFx1MDFGQSBOb3RlIGhlcmUgdGhhdCBhY2NlbnRzIGNoZWNraW5nIGFyZSBzbG93IGFuZCBjYXV0aW9uZWQgaW4gdGhlIEFQSSAKKwkgKiBkb2NzLgorCSAqIEludGVybmFsIG1ldGhvZCwgc3RhdHVzIGFzc3VtZWQgdG8gYmUgYSBzdWNjZXNzLCBjYWxsZXIgc2hvdWxkIGNoZWNrIAorCSAqIHN0YXR1cyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZAorCSAqIEBwYXJhbSBzdGFydCBpbmRleCBvZiB0aGUgcG90ZW50aWFsIHVuZnJpZW5kbHkgY29tcG9zaXRlIGNoYXJhY3RlcgorCSAqIEBwYXJhbSBlbmQgaW5kZXggb2YgdGhlIHBvdGVudGlhbCB1bmZyaWVuZGx5IGNvbXBvc2l0ZSBjaGFyYWN0ZXIKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgbm9uLWlnbm9yYWJsZSBhY2NlbnRzIGJlZm9yZSBhdCB0aGUgYmVnaW5uaW5nCisJICogICAgICAgICAgICAgIG9mIHRoZSBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlLgorCSAqLworCXByaXZhdGUgZmluYWwgYm9vbGVhbiBjaGVja0V4dHJhTWF0Y2hBY2NlbnRzKGludCBzdGFydCwgaW50IGVuZCkKKwl7CisJICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJICAgIGlmIChtX3BhdHRlcm5fLm1faGFzUHJlZml4QWNjZW50c18pIHsKKwkgICAgICAgIHRhcmdldFRleHQuc2V0SW5kZXgoc3RhcnQpOworCSAgICAgICAgCisJICAgICAgICBpZiAoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKHRhcmdldFRleHQubmV4dCgpKSkgeworCSAgICAgICAgCWlmICghVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZSh0YXJnZXRUZXh0Lm5leHQoKSkpIHsKKwkgICAgICAgIAkJdGFyZ2V0VGV4dC5wcmV2aW91cygpOworCSAgICAgICAgCX0KKwkgICAgICAgIH0KKwkgICAgICAgIC8vIHdlIGFyZSBvbmx5IGNvbmNlcm5lZCB3aXRoIHRoZSBmaXJzdCBjb21wb3NpdGUgY2hhcmFjdGVyCisJICAgICAgICBTdHJpbmcgc3RyID0gZ2V0U3RyaW5nKHRhcmdldFRleHQsIHN0YXJ0LCBlbmQpOworCSAgICAgICAgaWYgKE5vcm1hbGl6ZXIucXVpY2tDaGVjayhzdHIsIE5vcm1hbGl6ZXIuTkZEKSAKKwkgICAgICAgIAkJCQkJCQkJCQk9PSBOb3JtYWxpemVyLk5PKSB7CisJICAgICAgICAgICAgaW50IHNhZmVvZmZzZXQgPSBnZXROZXh0U2FmZU9mZnNldChzdGFydCwgZW5kKTsKKwkgICAgICAgICAgICBpZiAoc2FmZW9mZnNldCAhPSBlbmQpIHsKKwkgICAgICAgICAgICAgICAgc2FmZW9mZnNldCArKzsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgU3RyaW5nIGRlY29tcCA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKAorCSAgICAgICAgICAgIAkJCQlzdHIuc3Vic3RyaW5nKDAsIHNhZmVvZmZzZXQgLSBzdGFydCksIGZhbHNlKTsKKwkgICAgICAgICAgICBtX3V0aWxDb2xFSXRlcl8uc2V0VGV4dChkZWNvbXApOworCSAgICAgICAgICAgIGludCBmaXJzdGNlID0gbV9wYXR0ZXJuXy5tX0NFX1swXTsKKwkgICAgICAgICAgICBib29sZWFuIGlnbm9yYWJsZSA9IHRydWU7CisJICAgICAgICAgICAgaW50IGNlID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRTsKKwkgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKwkgICAgICAgICAgICB3aGlsZSAoY2UgIT0gZmlyc3RjZSkgeworCSAgICAgICAgICAgIAlvZmZzZXQgPSBtX3V0aWxDb2xFSXRlcl8uZ2V0T2Zmc2V0KCk7CisJICAgICAgICAgICAgICAgIGlmIChjZSAhPSBmaXJzdGNlIAorCSAgICAgICAgICAgICAgICAJJiYgY2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAgICAgICAgICAgaWdub3JhYmxlID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgY2UgPSBtX3V0aWxDb2xFSXRlcl8ubmV4dCgpOworCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3V0aWxDb2xFSXRlcl8uc2V0RXhhY3RPZmZzZXQob2Zmc2V0KTsgLy8gYmFjayB1cCAxIHRvIHRoZSAKKyAgICAgICAgICAgICAgICBtX3V0aWxDb2xFSXRlcl8ucHJldmlvdXMoKTsgICAgICAgICAgICAgLy8gcmlnaHQgb2Zmc2V0CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV91dGlsQ29sRUl0ZXJfLmdldE9mZnNldCgpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9ICFpZ25vcmFibGUgJiYgKFVDaGFyYWN0ZXIuZ2V0Q29tYmluaW5nQ2xhc3MoCisJICAgICAgICAgICAgCQkJCQkJCVVURjE2LmNoYXJBdChkZWNvbXAsIG9mZnNldCkpICE9IDApOworCSAgICAgICAgfQorCSAgICB9CisJCisJICAgIHJldHVybiByZXN1bHQ7CisJfQorCQorCS8qKgorCSogVXNlZCBieSBleGFjdCBtYXRjaGVzLCBjaGVja3MgaWYgdGhlcmUgYXJlIGFjY2VudHMgYmVmb3JlIHRoZSBtYXRjaC4gCisJKiBUaGlzIGlzIHJlYWxseSBwYWluZnVsLi4uIHdlIGhhdmUgdG8gY2hlY2sgdGhhdCBjb21wb3NpdGUgY2hhcmFjdGVycyBhdAorCSogdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaGVzIGhhdmUgdG8gbm90IGhhdmUgYW55IGV4dHJhIGFjY2VudHMuIAorCSogV2UgY2hlY2sgdGhlIEZDRCBvZiB0aGUgY2hhcmFjdGVyIGZpcnN0LCBpZiBpdCBzdGFydHMgd2l0aCBhbiBhY2NlbnQgYW5kIAorCSogdGhlIGZpcnN0IHBhdHRlcm4gY2UgZG9lcyBub3QgbWF0Y2ggdGhlIGZpcnN0IGNlIG9mIHRoZSBjaGFyYWN0ZXIsIHdlIAorCSogYmFpbC4KKwkqIE90aGVyd2lzZSB3ZSB0cnkgbm9ybWFsaXppbmcgdGhlIGZpcnN0IGNvbXBvc2l0ZSAKKwkqIGNoYXJhY3RlciBhbmQgZmluZCB0aGUgaW1tZWRpYXRlIGRlY29tcG9zZWQgY2hhcmFjdGVyIGJlZm9yZSB0aGUgbWF0Y2ggdG8gCisJKiBzZWUgaWYgaXQgaXMgYW4gbm9uLWlnbm9yYWJsZSBhY2NlbnQuCisJKiBOb3cgbm9ybWFsaXppbmcgdGhlIGZpcnN0IGNvbXBvc2l0ZSBjaGFyYWN0ZXIgaXMgZW5vdWdoIGJlY2F1c2Ugd2UgZW5zdXJlIAorCSogdGhhdCB3aGVuIHRoZSBtYXRjaCBpcyBwYXNzZWQgaW4gaGVyZSB3aXRoIGV4dHJhIGJlZ2lubmluZyBjZXMsIHRoZSAKKwkqIGZpcnN0IG9yIGxhc3QgY2UgdGhhdCBtYXRjaCBoYXMgdG8gb2NjdXIgd2l0aGluIHRoZSBmaXJzdCBjaGFyYWN0ZXIuCisJKiBFLmcuIGxvb2tpbmcgZm9yIFx1MDMwMSBhY3V0ZSBpbiBcdTAxRkEgQSByaW5nIGFib3ZlIGFuZCBhY3V0ZSwgCisJKiBjaGVja0V4dHJhTWF0Y2hBY2NlbnQgc2hvdWxkIGZhaWwgc2luY2UgdGhlcmUgaXMgYSBtaWRkbGUgcmluZyBpbiBcdTAxRkEKKwkqIE5vdGUgaGVyZSB0aGF0IGFjY2VudHMgY2hlY2tpbmcgYXJlIHNsb3cgYW5kIGNhdXRpb25lZCBpbiB0aGUgQVBJIGRvY3MuCisJKiBAcGFyYW0gc3RhcnQgb2Zmc2V0IAorCSogQHBhcmFtIGVuZCBvZmZzZXQKKwkqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgYWNjZW50cyBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgbWF0Y2gsIAorCSogICAgICAgICBmYWxzZSBvdGhlcndpc2UKKwkqLworCXByaXZhdGUgZmluYWwgYm9vbGVhbiBoYXNBY2NlbnRzQmVmb3JlTWF0Y2goaW50IHN0YXJ0LCBpbnQgZW5kKSAKKwl7CisJICAgIGlmIChtX3BhdHRlcm5fLm1faGFzUHJlZml4QWNjZW50c18pIHsKKwkgICAgICAgIC8vIHdlIGhhdmUgYmVlbiBpdGVyYXRpbmcgZm9yd2FyZHMgcHJldmlvdXNseQorCSAgICAgICAgYm9vbGVhbiBpZ25vcmFibGUgPSB0cnVlOworCSAgICAgICAgaW50IGZpcnN0Y2UgPSBtX3BhdHRlcm5fLm1fQ0VfWzBdOworCQkJbV9jb2xFSXRlcl8uc2V0RXhhY3RPZmZzZXQoc3RhcnQpOworCSAgICAgICAgaW50IGNlICA9IGdldENFKG1fY29sRUl0ZXJfLm5leHQoKSk7CisJICAgICAgICB3aGlsZSAoY2UgIT0gZmlyc3RjZSkgeworCSAgICAgICAgICAgIGlmIChjZSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisJICAgICAgICAgICAgICAgIGlnbm9yYWJsZSA9IGZhbHNlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBjZSA9IGdldENFKG1fY29sRUl0ZXJfLm5leHQoKSk7CisJICAgICAgICB9CisJICAgICAgICBpZiAoIWlnbm9yYWJsZSAmJiBtX2NvbEVJdGVyXy5pc0luQnVmZmVyKCkpIHsKKwkgICAgICAgICAgICAvLyB3aXRoaW4gbm9ybWFsaXphdGlvbiBidWZmZXIsIGRpc2NvbnRpZ3VvdXMgaGFuZGxlZCBoZXJlCisJICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICB9CisJCisJICAgICAgICAvLyB3aXRoaW4gdGV4dAorCSAgICAgICAgYm9vbGVhbiBhY2NlbnQgPSAoZ2V0RkNEKHRhcmdldFRleHQsIHN0YXJ0KSA+PiBTRUNPTkRfTEFTVF9CWVRFX1NISUZUXykKKwkgICAgICAgIAkJCQkJCQkJCQkJIT0gMDsgCisJICAgICAgICBpZiAoIWFjY2VudCkgeworCSAgICAgICAgICAgIHJldHVybiBjaGVja0V4dHJhTWF0Y2hBY2NlbnRzKHN0YXJ0LCBlbmQpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKCFpZ25vcmFibGUpIHsKKwkgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChzdGFydCA+IG1fdGV4dEJlZ2luT2Zmc2V0XykgeworCSAgICAgICAgCXRhcmdldFRleHQuc2V0SW5kZXgoc3RhcnQpOworCSAgICAgICAgCXRhcmdldFRleHQucHJldmlvdXMoKTsKKwkgICAgICAgICAgICBpZiAoKGdldEZDRCh0YXJnZXRUZXh0LCB0YXJnZXRUZXh0LmdldEluZGV4KCkpICYgTEFTVF9CWVRFX01BU0tfKSAKKwkgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSE9IDApIHsKKwkgICAgICAgICAgICAgICAgbV9jb2xFSXRlcl8uc2V0RXhhY3RPZmZzZXQoc3RhcnQpOworCSAgICAgICAgICAgICAgICBjZSA9IG1fY29sRUl0ZXJfLnByZXZpb3VzKCk7CisJICAgICAgICAgICAgICAgIGlmIChjZSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSIAorCSAgICAgICAgICAgICAgICAJJiYgY2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgIH0KKwkgIAorCSAgICByZXR1cm4gZmFsc2U7CisJfQorCQorCS8qKgorCSAqIFVzZWQgYnkgZXhhY3QgbWF0Y2hlcywgY2hlY2tzIGlmIHRoZXJlIGFyZSBhY2NlbnRzIGJvdW5kaW5nIHRoZSBtYXRjaC4KKwkgKiBOb3RlIHRoaXMgaXMgdGhlIGluaXRpYWwgYm91bmRhcnkgY2hlY2suIElmIHRoZSBwb3RlbnRpYWwgbWF0Y2gKKwkgKiBzdGFydHMgb3IgZW5kcyB3aXRoIGNvbXBvc2l0ZSBjaGFyYWN0ZXJzLCB0aGUgYWNjZW50cyBpbiB0aG9zZQorCSAqIGNoYXJhY3RlcnMgd2lsbCBiZSBkZXRlcm1pbmVkIGxhdGVyLgorCSAqIE5vdCBkb2luZyBiYWNrd2FyZHMgaXRlcmF0aW9uIGhlcmUsIHNpbmNlIGRpc2NvbnRpZ3VvcyBjb250cmFjdGlvbiBmb3IgCisJICogYmFja3dhcmRzIGNvbGxhdGlvbiBlbGVtZW50IGl0ZXJhdG9yLCB1c2UgdXAgdG9vIG1hbnkgY2hhcmFjdGVycy4KKwkgKiBFLmcuIGxvb2tpbmcgZm9yIFx1MDMwQSByaW5nIGluIFx1MDFGQSBBIHJpbmcgYWJvdmUgYW5kIGFjdXRlLCAKKwkgKiBzaG91bGQgZmFpbCBzaW5jZSB0aGVyZSBpcyBhIGFjdXRlIGF0IHRoZSBlbmQgb2YgXHUwMUZBCisJICogTm90ZSBoZXJlIHRoYXQgYWNjZW50cyBjaGVja2luZyBhcmUgc2xvdyBhbmQgY2F1dGlvbmVkIGluIHRoZSBBUEkgZG9jcy4KKwkgKiBAcGFyYW0gc3RhcnQgb2Zmc2V0IG9mIG1hdGNoCisJICogQHBhcmFtIGVuZCBlbmQgb2Zmc2V0IG9mIHRoZSBtYXRjaAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgYWNjZW50cyBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgbWF0Y2gsIAorCSAqICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlCisJICovCisJcHJpdmF0ZSBmaW5hbCBib29sZWFuIGhhc0FjY2VudHNBZnRlck1hdGNoKGludCBzdGFydCwgaW50IGVuZCkgCisJeworCSAgICBpZiAobV9wYXR0ZXJuXy5tX2hhc1N1ZmZpeEFjY2VudHNfKSB7CisJICAgIAl0YXJnZXRUZXh0LnNldEluZGV4KGVuZCk7CisJICAgICAgICBpZiAoZW5kID4gbV90ZXh0QmVnaW5PZmZzZXRfIAorCSAgICAgICAgCSYmIFVURjE2LmlzVHJhaWxTdXJyb2dhdGUodGFyZ2V0VGV4dC5wcmV2aW91cygpKSkgeworCSAgICAgICAgCWlmICh0YXJnZXRUZXh0LmdldEluZGV4KCkgPiBtX3RleHRCZWdpbk9mZnNldF8gJiYKKwkgICAgICAgIAkJIVVURjE2LmlzTGVhZFN1cnJvZ2F0ZSh0YXJnZXRUZXh0LnByZXZpb3VzKCkpKSB7CisJICAgICAgICAJCXRhcmdldFRleHQubmV4dCgpOworCSAgICAgICAgCX0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmICgoZ2V0RkNEKHRhcmdldFRleHQsIHRhcmdldFRleHQuZ2V0SW5kZXgoKSkgJiBMQVNUX0JZVEVfTUFTS18pICE9IDApIHsKKwkgICAgICAgICAgICBpbnQgZmlyc3RjZSAgPSBtX3BhdHRlcm5fLm1fQ0VfWzBdOworCSAgICAgICAgICAgIG1fY29sRUl0ZXJfLnNldEV4YWN0T2Zmc2V0KHN0YXJ0KTsKKwkgICAgICAgICAgICB3aGlsZSAoZ2V0Q0UobV9jb2xFSXRlcl8ubmV4dCgpKSAhPSBmaXJzdGNlKSB7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGludCBjb3VudCA9IDE7CisJICAgICAgICAgICAgd2hpbGUgKGNvdW50IDwgbV9wYXR0ZXJuXy5tX0NFTGVuZ3RoXykgeworCSAgICAgICAgICAgICAgICBpZiAoZ2V0Q0UobV9jb2xFSXRlcl8ubmV4dCgpKSAKKwkgICAgICAgICAgICAgICAgCT09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgICAgICAgCWNvdW50IC0tOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGNvdW50ICsrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpbnQgY2UgPSBnZXRDRShtX2NvbEVJdGVyXy5uZXh0KCkpOworCSAgICAgICAgICAgIGlmIChjZSAhPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSIAorCSAgICAgICAgICAgIAkJCSYmIGNlICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgICAgICAgaWYgKG1fY29sRUl0ZXJfLmdldE9mZnNldCgpIDw9IGVuZCkgeworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKChnZXRGQ0QodGFyZ2V0VGV4dCwgZW5kKSA+PiBTRUNPTkRfTEFTVF9CWVRFX1NISUZUXykgCisJICAgICAgICAgICAgICAgIAkhPSAwKSB7CisJICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorCQorCS8qKgorCSogQ2hlY2tzIGlmIHRoZSBvZmZzZXQgcnVucyBvdXQgb2YgdGhlIHRleHQgc3RyaW5nIHJhbmdlCisJKiBAcGFyYW0gdGV4dHN0YXJ0IG9mZnNldCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSByYW5nZQorCSogQHBhcmFtIHRleHRsaW1pdCBsaW1pdCBvZmZzZXQgb2YgdGhlIHRleHQgc3RyaW5nIHJhbmdlCisJKiBAcGFyYW0gb2Zmc2V0IHRvIHRlc3QKKwkqIEByZXR1cm4gdHJ1ZSBpZiBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kcywgZmFsc2Ugb3RoZXJ3aXNlCisJKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzT3V0T2ZCb3VuZHMoaW50IHRleHRzdGFydCwgaW50IHRleHRsaW1pdCwgCisJCQkJCQkJCQkJCQlpbnQgb2Zmc2V0KQorCXsKKwkgICAgcmV0dXJuIG9mZnNldCA8IHRleHRzdGFydCB8fCBvZmZzZXQgPiB0ZXh0bGltaXQ7CisJfQorCQorCS8qKgorCSAqIENoZWNrcyBmb3IgaWRlbnRpY2FsIG1hdGNoCisJICogQHBhcmFtIHN0cnNyY2ggc3RyaW5nIHNlYXJjaCBkYXRhCisJICogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBwb3NzaWJsZSBtYXRjaAorCSAqIEBwYXJhbSBlbmQgb2Zmc2V0IG9mIHBvc3NpYmxlIG1hdGNoCisJICogQHJldHVybiB0cnVlIGlmIGlkZW50aWNhbCBtYXRjaCBpcyBmb3VuZAorCSAqLworCXByaXZhdGUgZmluYWwgYm9vbGVhbiBjaGVja0lkZW50aWNhbChpbnQgc3RhcnQsIGludCBlbmQpIAorCXsKKwkgICAgaWYgKG1fY29sbGF0b3JfLmdldFN0cmVuZ3RoKCkgIT0gQ29sbGF0b3IuSURFTlRJQ0FMKSB7CisJICAgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgfQorCQorCQlTdHJpbmcgdGV4dHN0ciA9IGdldFN0cmluZyh0YXJnZXRUZXh0LCBzdGFydCwgZW5kIC0gc3RhcnQpOworCQlpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKHRleHRzdHIsIE5vcm1hbGl6ZXIuTkZEKSAKKwkgICAgICAgIAkJCQkJCQkJCQk9PSBOb3JtYWxpemVyLk5PKSB7CisJICAgICAgICB0ZXh0c3RyID0gTm9ybWFsaXplci5kZWNvbXBvc2UodGV4dHN0ciwgZmFsc2UpOworCSAgICB9CisJICAgIFN0cmluZyBwYXR0ZXJuc3RyID0gbV9wYXR0ZXJuXy50YXJnZXRUZXh0OworCSAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKHBhdHRlcm5zdHIsIE5vcm1hbGl6ZXIuTkZEKSAKKwkgICAgICAgIAkJCQkJCQkJCQk9PSBOb3JtYWxpemVyLk5PKSB7CisJICAgICAgICBwYXR0ZXJuc3RyID0gTm9ybWFsaXplci5kZWNvbXBvc2UocGF0dGVybnN0ciwgZmFsc2UpOworCSAgICB9CisJICAgIHJldHVybiB0ZXh0c3RyLmVxdWFscyhwYXR0ZXJuc3RyKTsKKwl9CisJCisJLyoqCisJICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbWF0Y2ggaXMgcmVwZWF0ZWQKKwkgKiBAcGFyYW0gc3RhcnQgbmV3IG1hdGNoIHN0YXJ0IGluZGV4CisJICogQHBhcmFtIGxpbWl0IG5ldyBtYXRjaCBsaW1pdCBpbmRleAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGhlIG1hdGNoIGlzIHJlcGVhdGVkLCBmYWxzZSBvdGhlcndpc2UKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGJvb2xlYW4gY2hlY2tSZXBlYXRlZE1hdGNoKGludCBzdGFydCwgaW50IGxpbWl0KQorCXsKKwkgICAgaWYgKG1fbWF0Y2hlZEluZGV4XyA9PSBET05FKSB7CisJICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKyAgICAgICAgaW50IGVuZCA9IGxpbWl0IC0gMTsgLy8gbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIG1hdGNoCisJICAgIGludCBsYXN0bWF0Y2hlbmQgPSBtX21hdGNoZWRJbmRleF8gKyBtYXRjaExlbmd0aCAtIDE7IAorCSAgICBpZiAoIWlzT3ZlcmxhcHBpbmcoKSkgeworICAgICAgICAgICAgcmV0dXJuIChzdGFydCA+PSBtX21hdGNoZWRJbmRleF8gJiYgc3RhcnQgPD0gbGFzdG1hdGNoZW5kKSAKKyAgICAgICAgICAgICAgICAgICAgfHwgKGVuZCA+PSBtX21hdGNoZWRJbmRleF8gJiYgZW5kIDw9IGxhc3RtYXRjaGVuZCk7CisgICAgICAgICAgICAgICAgICAgICAgCisJICAgIH0KKwkgICAgcmV0dXJuIHN0YXJ0ID09IG1fbWF0Y2hlZEluZGV4XzsKKwl9CisJCisJLyoqCisJICogQ2hlY2tzIG1hdGNoIGZvciBjb250cmFjdGlvbi4gCisJICogSWYgdGhlIG1hdGNoIGVuZHMgd2l0aCBhIHBhcnRpYWwgY29udHJhY3Rpb24gd2UgZmFpbC4KKwkgKiBJZiB0aGUgbWF0Y2ggc3RhcnRzIHRvbyBmYXIgb2ZmIChiZWNhdXNlIG9mIGJhY2t3YXJkcyBpdGVyYXRpb24pIHdlIHRyeSAKKwkgKiB0byBjaGlwIG9mZiB0aGUgZXh0cmEgY2hhcmFjdGVycyBkZXBlbmRpbmcgb24gd2hldGhlciBhIGJyZWFraXRlcmF0b3IgCisJICogaGFzIGJlZW4gdXNlZC4KKwkgKiBUZW1wb3JhcnkgdXRpbGl0eSBidWZmZXIgdXNlZCB0byByZXR1cm4gbW9kaWZpZWQgc3RhcnQgYW5kIGVuZC4KKwkgKiBAcGFyYW0gc3RhcnQgb2Zmc2V0IG9mIHBvdGVudGlhbCBtYXRjaCwgdG8gYmUgbW9kaWZpZWQgaWYgbmVjZXNzYXJ5CisJICogQHBhcmFtIGVuZCBvZmZzZXQgb2YgcG90ZW50aWFsIG1hdGNoLCB0byBiZSBtb2RpZmllZCBpZiBuZWNlc3NhcnkKKwkgKiBAcmV0dXJuIHRydWUgaWYgbWF0Y2ggcGFzc2VzIHRoZSBjb250cmFjdGlvbiB0ZXN0LCBmYWxzZSBvdGhlcndpc2UuCisJICovCisJcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNoZWNrTmV4dEV4YWN0Q29udHJhY3Rpb25NYXRjaChpbnQgc3RhcnQsIGludCBlbmQpIAorCXsKKwkgICAgLy8gVGhpcyBwYXJ0IGNoZWNrcyBpZiBlaXRoZXIgZW5kcyBvZiB0aGUgbWF0Y2ggY29udGFpbnMgcG90ZW50aWFsIAorCSAgICAvLyBjb250cmFjdGlvbi4gSWYgc28gd2UnbGwgaGF2ZSB0byBpdGVyYXRlIHRocm91Z2ggdGhlbQorCSAgICBjaGFyIGVuZGNoYXIgPSAwOworCSAgICBpZiAoZW5kIDwgbV90ZXh0TGltaXRPZmZzZXRfKSB7CisJICAgIAl0YXJnZXRUZXh0LnNldEluZGV4KGVuZCk7CisJICAgIAllbmRjaGFyID0gdGFyZ2V0VGV4dC5jdXJyZW50KCk7CisJICAgIH0KKwkgICAgY2hhciBwb3N0c3RhcnRjaGFyID0gMDsKKwkgICAgaWYgKHN0YXJ0ICsgMSA8IG1fdGV4dExpbWl0T2Zmc2V0XykgeworCSAgICAJdGFyZ2V0VGV4dC5zZXRJbmRleChzdGFydCArIDEpOworCSAgICAJcG9zdHN0YXJ0Y2hhciA9IHRhcmdldFRleHQuY3VycmVudCgpOworCSAgICB9CisJICAgIGlmIChtX2NvbGxhdG9yXy5pc1Vuc2FmZShlbmRjaGFyKSAKKwkgICAgCXx8IG1fY29sbGF0b3JfLmlzVW5zYWZlKHBvc3RzdGFydGNoYXIpKSB7CisJICAgICAgICAvLyBleHBhbnNpb24gcHJlZml4LCB3aGF0J3MgbGVmdCB0byBpdGVyYXRlCisJICAgICAgICBpbnQgYnVmZmVyZWRDRU9mZnNldCA9IG1fY29sRUl0ZXJfLm1fQ0VCdWZmZXJPZmZzZXRfOworCSAgICAgICAgYm9vbGVhbiBoYXNCdWZmZXJlZENFID0gYnVmZmVyZWRDRU9mZnNldCA+IDA7CisJICAgICAgICBtX2NvbEVJdGVyXy5zZXRFeGFjdE9mZnNldChzdGFydCk7CisJICAgICAgICBpbnQgdGVtcCA9IHN0YXJ0OworCSAgICAgICAgd2hpbGUgKGJ1ZmZlcmVkQ0VPZmZzZXQgPiAwKSB7CisJICAgICAgICAgICAgLy8gZ2V0dGluZyByaWQgb2YgdGhlIHJlZHVuZGFudCBjZSwgY2F1c2VkIGJ5IHNldE9mZnNldC4KKwkgICAgICAgICAgICAvLyBzaW5jZSBiYWNrd2FyZCBjb250cmFjdGlvbi9leHBhbnNpb24gbWF5IGhhdmUgZXh0cmEgY2VzIGlmIAorCSAgICAgICAgICAgIC8vIHdlIGFyZSBpbiB0aGUgbm9ybWFsaXphdGlvbiBidWZmZXIsIGhhc0FjY2VudHNCZWZvcmVNYXRjaCAKKwkgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgaXQuCisJICAgICAgICAgICAgLy8gRS5nLiB0aGUgY2hhcmFjdGVyIFx1MDFGQSB3aWxsIGhhdmUgYW4gZXhwYW5zaW9uIG9mIDMsIGJ1dCAKKwkgICAgICAgICAgICAvLyBpZiB3ZSBhcmUgb25seSBsb29raW5nIGZvciBhY3V0ZSBhbmQgcmluZyBcdTAzMEEgYW5kIFx1MDMwMSwgCisJICAgICAgICAgICAgLy8gd2UnbGwgaGF2ZSB0byBza2lwIHRoZSBmaXJzdCBjZSBpbiB0aGUgZXhwYW5zaW9uIGJ1ZmZlci4KKwkgICAgICAgICAgICBtX2NvbEVJdGVyXy5uZXh0KCk7CisJICAgICAgICAgICAgaWYgKG1fY29sRUl0ZXJfLmdldE9mZnNldCgpICE9IHRlbXApIHsKKwkgICAgICAgICAgICAgICAgc3RhcnQgPSB0ZW1wOworCSAgICAgICAgICAgICAgICB0ZW1wICA9IG1fY29sRUl0ZXJfLmdldE9mZnNldCgpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBidWZmZXJlZENFT2Zmc2V0IC0tOworCSAgICAgICAgfQorCQorCSAgICAgICAgaW50IGNvdW50ID0gMDsKKwkgICAgICAgIHdoaWxlIChjb3VudCA8IG1fcGF0dGVybl8ubV9DRUxlbmd0aF8pIHsKKwkgICAgICAgICAgICBpbnQgY2UgPSBnZXRDRShtX2NvbEVJdGVyXy5uZXh0KCkpOworCSAgICAgICAgICAgIGlmIChjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisJICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAoaGFzQnVmZmVyZWRDRSAmJiBjb3VudCA9PSAwIAorCSAgICAgICAgICAgIAkmJiBtX2NvbEVJdGVyXy5nZXRPZmZzZXQoKSAhPSB0ZW1wKSB7CisJICAgICAgICAgICAgICAgIHN0YXJ0ID0gdGVtcDsKKwkgICAgICAgICAgICAgICAgdGVtcCAgID0gbV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChjZSAhPSBtX3BhdHRlcm5fLm1fQ0VfW2NvdW50XSkgeworCSAgICAgICAgICAgICAgICBlbmQgKys7CisJICAgICAgICAgICAgICAgIGVuZCA9IGdldE5leHRCYXNlT2Zmc2V0KGVuZCk7ICAKKwkgICAgICAgICAgICAgICAgbV91dGlsQnVmZmVyX1swXSA9IHN0YXJ0OworCSAgICAgICAgICAgICAgICBtX3V0aWxCdWZmZXJfWzFdID0gZW5kOworCSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGNvdW50ICsrOworCSAgICAgICAgfQorCSAgICB9IAorCSAgICBtX3V0aWxCdWZmZXJfWzBdID0gc3RhcnQ7CisJICAgIG1fdXRpbEJ1ZmZlcl9bMV0gPSBlbmQ7CisJICAgIHJldHVybiB0cnVlOworCX0KKwkKKwkKKwkvKioKKwkgKiBDaGVja3MgYW5kIHNldHMgdGhlIG1hdGNoIGluZm9ybWF0aW9uIGlmIGZvdW5kLgorCSAqIENoZWNrcyAKKwkgKiA8dWw+CisJICogPGxpPiB0aGUgcG90ZW50aWFsIG1hdGNoIGRvZXMgbm90IHJlcGVhdCB0aGUgcHJldmlvdXMgbWF0Y2gKKwkgKiA8bGk+IGJvdW5kYXJpZXMgYXJlIGNvcnJlY3QKKwkgKiA8bGk+IGV4YWN0IG1hdGNoZXMgaGFzIG5vIGV4dHJhIGFjY2VudHMKKwkgKiA8bGk+IGlkZW50aWNhbCBtYXRjaGVzYgorCSAqIDxsaT4gcG90ZW50aWFsIG1hdGNoIGRvZXMgbm90IGVuZCBpbiB0aGUgbWlkZGxlIG9mIGEgY29udHJhY3Rpb24KKwkgKiA8L3VsPgorCSAqIE90aGVyd2lzZSB0aGUgb2Zmc2V0IHdpbGwgYmUgc2hpZnRlZCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuCisJICogVGhlIHJlc3VsdCBtX21hdGNoSW5kZXhfIGFuZCBtX21hdGNoTGVuZ3RoXyB3aWxsIGJlIHNldCB0byB0aGUgdHJ1bmNhdGVkCisJICogbW9yZSBmaXR0aW5nIHJlc3VsdCB2YWx1ZS4KKwkgKiBVc2VzIHRoZSB0ZW1wb3JhcnkgdXRpbGl0eSBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIG1vZGlmaWVkIHRleHRvZmZzZXQuCisJICogQHBhcmFtIHRleHRvZmZzZXQgb2Zmc2V0IGluIHRoZSBjb2xsYXRpb24gZWxlbWVudCB0ZXh0LgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWF0Y2ggaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZQorCSAqLworCXByaXZhdGUgZmluYWwgYm9vbGVhbiBjaGVja05leHRFeGFjdE1hdGNoKGludCB0ZXh0b2Zmc2V0KQorCXsKKwkgICAgaW50IHN0YXJ0ID0gbV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCk7ICAgICAgICAKKwkgICAgaWYgKCFjaGVja05leHRFeGFjdENvbnRyYWN0aW9uTWF0Y2goc3RhcnQsIHRleHRvZmZzZXQpKSB7CisJICAgIAkvLyByZXR1cm5zIHRoZSBtb2RpZmllZCB0ZXh0b2Zmc2V0CisJICAgIAltX3V0aWxCdWZmZXJfWzBdID0gbV91dGlsQnVmZmVyX1sxXTsKKwkgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCQorCQlzdGFydCA9IG1fdXRpbEJ1ZmZlcl9bMF07CisJCXRleHRvZmZzZXQgPSBtX3V0aWxCdWZmZXJfWzFdOworCSAgICAvLyB0aGlzIHRvdGFsbHkgbWF0Y2hlcywgaG93ZXZlciB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIHJlcGVhdGluZworCSAgICBpZiAoIWlzQnJlYWtVbml0KHN0YXJ0LCB0ZXh0b2Zmc2V0KSAKKwkgICAgCXx8IGNoZWNrUmVwZWF0ZWRNYXRjaChzdGFydCwgdGV4dG9mZnNldCkgCisJICAgIAl8fCBoYXNBY2NlbnRzQmVmb3JlTWF0Y2goc3RhcnQsIHRleHRvZmZzZXQpIAorCSAgICAJfHwgIWNoZWNrSWRlbnRpY2FsKHN0YXJ0LCB0ZXh0b2Zmc2V0KSAKKwkgICAgCXx8IGhhc0FjY2VudHNBZnRlck1hdGNoKHN0YXJ0LCB0ZXh0b2Zmc2V0KSkgeworCSAgICAgICAgdGV4dG9mZnNldCArKzsKKwkgICAgICAgIHRleHRvZmZzZXQgPSBnZXROZXh0QmFzZU9mZnNldCh0ZXh0b2Zmc2V0KTsgIAorCSAgICAgICAgbV91dGlsQnVmZmVyX1swXSA9IHRleHRvZmZzZXQ7CisJICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwkgICAgICAgIAorCSAgICAvLyB0b3RhbGx5IG1hdGNoLCB3ZSB3aWxsIGdldCByaWQgb2YgdGhlIGVuZGluZyBpZ25vcmFibGVzLgorCSAgICBtX21hdGNoZWRJbmRleF8gID0gc3RhcnQ7CisJICAgIG1hdGNoTGVuZ3RoID0gdGV4dG9mZnNldCAtIHN0YXJ0OworCSAgICByZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJKiBHZXR0aW5nIHRoZSBwcmV2aW91cyBiYXNlIGNoYXJhY3RlciBvZmZzZXQsIG9yIHRoZSBjdXJyZW50IG9mZnNldCBpZiB0aGUgCisJKiBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGJhc2UgY2hhcmFjdGVyCisJKiBAcGFyYW0gdGV4dCB0aGUgc291cmNlIHRleHQgdG8gd29yayBvbgorCSogQHBhcmFtIHRleHRvZmZzZXQgb25lIG9mZnNldCBhZnRlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIKKwkqIEByZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGJhc2UgY2hhcmFjdGVyIG9yIHRoZSAKKwkqIAkJCWZpcnN0IGNvbXBvc2VkIGNoYXJhY3RlciB3aXRoIGFjY2VudHMKKwkqLworCXByaXZhdGUgZmluYWwgaW50IGdldFByZXZpb3VzQmFzZU9mZnNldChDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRleHRvZmZzZXQpCisJeworCSAgICBpZiAodGV4dG9mZnNldCA+IG1fdGV4dEJlZ2luT2Zmc2V0XykgeworCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICBpbnQgcmVzdWx0ID0gdGV4dG9mZnNldDsKKwkgICAgICAgICAgICB0ZXh0LnNldEluZGV4KHJlc3VsdCk7CisJICAgICAgICAgICAgaWYgKFVURjE2LmlzVHJhaWxTdXJyb2dhdGUodGV4dC5wcmV2aW91cygpKSkgeworCSAgICAgICAgICAgIAlpZiAodGV4dC5nZXRJbmRleCgpICE9IHRleHQuZ2V0QmVnaW5JbmRleCgpICYmCisJICAgICAgICAgICAgCQkhVVRGMTYuaXNMZWFkU3Vycm9nYXRlKHRleHQucHJldmlvdXMoKSkpIHsKKwkgICAgICAgICAgICAJCXRleHQubmV4dCgpOworCSAgICAgICAgICAgIAl9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHRleHRvZmZzZXQgPSB0ZXh0LmdldEluZGV4KCk7CisJICAgICAgICAgICAgY2hhciBmY2QgPSBnZXRGQ0QodGV4dCwgdGV4dG9mZnNldCk7CisJICAgICAgICAgICAgaWYgKChmY2QgPj4gU0VDT05EX0xBU1RfQllURV9TSElGVF8pID09IDApIHsKKwkgICAgICAgICAgICAgICAgaWYgKChmY2QgJiBMQVNUX0JZVEVfTUFTS18pICE9IDApIHsKKwkgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0b2Zmc2V0OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmICh0ZXh0b2Zmc2V0ID09IG1fdGV4dEJlZ2luT2Zmc2V0XykgeworCSAgICAgICAgICAgICAgICByZXR1cm4gbV90ZXh0QmVnaW5PZmZzZXRfOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gdGV4dG9mZnNldDsKKwl9CisJCisJLyoqCisJKiBHZXR0aW5nIHRoZSBpbmRleGVzIG9mIHRoZSBhY2NlbnRzIHRoYXQgYXJlIG5vdCBibG9ja2VkIGluIHRoZSBhcmd1bWVudAorCSogYWNjZW50IGFycmF5CisJKiBAcGFyYW0gYWNjZW50cyBhY2NlbnRzIGluIG5mZC4KKwkqIEBwYXJhbSBhY2NlbnRzaW5kZXggYXJyYXkgdG8gc3RvcmUgdGhlIGluZGV4ZXMgb2YgYWNjZW50cyBpbiBhY2NlbnRzIHRoYXQgCisJKiAJCWFyZSBub3QgYmxvY2tlZAorCSogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHBvcHVsYXRlZCBhY2NlbnRzaW5kZXgKKwkqLworCXByaXZhdGUgaW50IGdldFVuYmxvY2tlZEFjY2VudEluZGV4KFN0cmluZ0J1ZmZlciBhY2NlbnRzLCAKKwkJCQkJCQkJCQlpbnQgYWNjZW50c2luZGV4W10pCisJeworCSAgICBpbnQgaW5kZXggPSAwOworCSAgICBpbnQgbGVuZ3RoID0gYWNjZW50cy5sZW5ndGgoKTsKKwkgICAgaW50IGNjbGFzcyA9IDA7CisJICAgIGludCByZXN1bHQgPSAwOworCSAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKwkgICAgICAgIGludCBjb2RlcG9pbnQgPSBVVEYxNi5jaGFyQXQoYWNjZW50cywgaW5kZXgpOworCSAgICAgICAgaW50IHRlbXBjbGFzcyA9IFVDaGFyYWN0ZXIuZ2V0Q29tYmluaW5nQ2xhc3MoY29kZXBvaW50KTsKKwkgICAgICAgIGlmICh0ZW1wY2xhc3MgIT0gY2NsYXNzKSB7CisJICAgICAgICAgICAgY2NsYXNzID0gdGVtcGNsYXNzOworCSAgICAgICAgICAgIGFjY2VudHNpbmRleFtyZXN1bHRdID0gaW5kZXg7CisJICAgICAgICAgICAgcmVzdWx0ICsrOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNTdXBwbGVtZW50YXJ5KGNvZGVwb2ludCkpIHsKKwkgICAgICAgIAlpbmRleCArPSAyOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAJaW5kZXggKys7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgYWNjZW50c2luZGV4W3Jlc3VsdF0gPSBsZW5ndGg7CisJICAgIHJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogQXBwZW5kcyAzIFN0cmluZ0J1ZmZlci9DaGFyYWN0ZXJJdGVyYXRvciB0b2dldGhlciBpbnRvIGEgZGVzdGluYXRpb24gCisJICogc3RyaW5nIGJ1ZmZlci4KKwkgKiBAcGFyYW0gc291cmNlMSBzdHJpbmcgYnVmZmVyCisJICogQHBhcmFtIHNvdXJjZTIgY2hhcmFjdGVyIGl0ZXJhdG9yCisJICogQHBhcmFtIHN0YXJ0MiBzdGFydCBvZiB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9yIHRvIG1lcmdlCisJICogQHBhcmFtIGVuZDIgZW5kIG9mIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gbWVyZ2UKKwkgKiBAcGFyYW0gc291cmNlMyBzdHJpbmcgYnVmZmVyCisJICogQHJldHVybiBhcHBlbmRlZCBzdHJpbmcgYnVmZmVyCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nQnVmZmVyIG1lcmdlKFN0cmluZ0J1ZmZlciBzb3VyY2UxLCAKKwkJCQkJCQkJCSAJCUNoYXJhY3Rlckl0ZXJhdG9yIHNvdXJjZTIsCisJCQkJCQkJCQkgCQlpbnQgc3RhcnQyLCBpbnQgZW5kMiwKKwkJCQkJCQkJCSAJCVN0cmluZ0J1ZmZlciBzb3VyY2UzKSAKKwl7CisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CQorCQlpZiAoc291cmNlMSAhPSBudWxsICYmIHNvdXJjZTEubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgLy8gamRrIDEuMy4xIGRvZXMgbm90IGhhdmUgYXBwZW5kKFN0cmluZ0J1ZmZlcikgeWV0CisgICAgICAgICAgICBpZihjb20uaWJtLmljdS5pbXBsLklDVURlYnVnLmlzSkRLMTRPckhpZ2hlcil7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzb3VyY2UxKTsKKyAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc291cmNlMS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKwkJfQorCQlzb3VyY2UyLnNldEluZGV4KHN0YXJ0Mik7CisJCXdoaWxlIChzb3VyY2UyLmdldEluZGV4KCkgPCBlbmQyKSB7CisJCQlyZXN1bHQuYXBwZW5kKHNvdXJjZTIuY3VycmVudCgpKTsKKwkJCXNvdXJjZTIubmV4dCgpOworCQl9CisJCWlmIChzb3VyY2UzICE9IG51bGwgJiYgc291cmNlMy5sZW5ndGgoKSAhPSAwKSB7CisJCQkvLyBqZGsgMS4zLjEgZG9lcyBub3QgaGF2ZSBhcHBlbmQoU3RyaW5nQnVmZmVyKSB5ZXQKKyAgICAgICAgICAgIGlmKGNvbS5pYm0uaWN1LmltcGwuSUNVRGVidWcuaXNKREsxNE9ySGlnaGVyKXsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNvdXJjZTMpOworICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzb3VyY2UzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorCQl9CisJICAgIHJldHVybiByZXN1bHQ7CisJfQorCQorCS8qKgorCSogUnVubmluZyB0aHJvdWdoIGEgY29sbGF0aW9uIGVsZW1lbnQgaXRlcmF0b3IgdG8gc2VlIGlmIHRoZSBjb250ZW50cyAKKwkqIG1hdGNoZXMgcGF0dGVybiBpbiBzdHJpbmcgc2VhcmNoIGRhdGEKKwkqIEBwYXJhbSBjb2xlaXRlciBjb2xsYXRpb24gZWxlbWVudCBpdGVyYXRvciB0byB0ZXN0CisJKiBAcmV0dXJuIHRydWUgaWYgYSBtYXRjaCBpZiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCisJKi8KKwlwcml2YXRlIGZpbmFsIGJvb2xlYW4gY2hlY2tDb2xsYXRpb25NYXRjaChDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IgY29sZWl0ZXIpCisJeworCSAgICBpbnQgcGF0dGVybmNlaW5kZXggPSBtX3BhdHRlcm5fLm1fQ0VMZW5ndGhfOworCSAgICBpbnQgb2Zmc2V0ID0gMDsKKwkgICAgd2hpbGUgKHBhdHRlcm5jZWluZGV4ID4gMCkgeworCSAgICAgICAgaW50IGNlID0gZ2V0Q0UoY29sZWl0ZXIubmV4dCgpKTsKKwkgICAgICAgIGlmIChjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisJICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICB9CisJICAgICAgICBpZiAoY2UgIT0gbV9wYXR0ZXJuXy5tX0NFX1tvZmZzZXRdKSB7CisJICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgICAgfQorCSAgICAgICAgb2Zmc2V0ICsrOworCSAgICAgICAgcGF0dGVybmNlaW5kZXggLS07CisJICAgIH0KKwkgICAgcmV0dXJuIHRydWU7CisJfQorCQorCS8qKgorCSAqIFJlYXJyYW5nZXMgdGhlIGZyb250IGFjY2VudHMgdG8gdHJ5IG1hdGNoaW5nLgorCSAqIFByZWZpeCBhY2NlbnRzIGluIHRoZSB0ZXh0IHdpbGwgYmUgZ3JvdXBlZCBhY2NvcmRpbmcgdG8gdGhlaXIgY29tYmluaW5nIAorCSAqIGNsYXNzIGFuZCB0aGUgZ3JvdXBzIHdpbGwgYmUgbWl4ZWQgYW5kIG1hdGNoZWQgdG8gdHJ5IGZpbmQgdGhlIHBlcmZlY3QgCisJICogbWF0Y2ggd2l0aCB0aGUgcGF0dGVybi4KKwkgKiBTbyBmb3IgaW5zdGFuY2UgbG9va2luZyBmb3IgIlx1MDMwMSIgaW4gIlx1MDMwQVx1MDMwMVx1MDMyNSIKKwkgKiBzdGVwIDE6IHNwbGl0ICJcdTAzMEFcdTAzMDEiIGludG8gNiBvdGhlciB0eXBlIG9mIHBvdGVudGlhbCBhY2NlbnQgCisJICogCQkgICBzdWJzdHJpbmdzICJcdTAzMEEiLCAiXHUwMzAxIiwgIlx1MDMyNSIsICJcdTAzMEFcdTAzMDEiLCAKKwkgKiAJCSAgICJcdTAzMEFcdTAzMjUiLCAiXHUwMzAxXHUwMzI1Ii4KKwkgKiBzdGVwIDI6IGNoZWNrIGlmIGFueSBvZiB0aGUgZ2VuZXJhdGVkIHN1YnN0cmluZ3MgbWF0Y2hlcyB0aGUgcGF0dGVybi4KKwkgKiBJbnRlcm5hbCBtZXRob2QsIHN0YXR1cyBpcyBhc3N1bWVkIHRvIGJlIHN1Y2Nlc3MsIGNhbGxlciBoYXMgdG8gY2hlY2sgCisJICogc3RhdHVzIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgorCSAqIEBwYXJhbSBzdGFydCBmaXJzdCBvZmZzZXQgb2YgdGhlIGFjY2VudHMgdG8gc3RhcnQgc2VhcmNoaW5nCisJICogQHBhcmFtIGVuZCBzdGFydCBvZiB0aGUgbGFzdCBhY2NlbnQgc2V0CisJICogQHJldHVybiBET05FIGlmIGEgbWF0Y2ggaXMgbm90IGZvdW5kLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBzdGFydGluZworCSAqICAgICAgICAgb2Zmc2V0IG9mIHRoZSBtYXRjaC4gTm90ZSB0aGlzIHN0YXJ0IGluY2x1ZGVzIGFsbCBwcmVjZWRpbmcgCisJICogCQkgICBhY2NlbnRzLgorCSAqLworCXByaXZhdGUgaW50IGRvTmV4dENhbm9uaWNhbFByZWZpeE1hdGNoKGludCBzdGFydCwgaW50IGVuZCkKKwl7CisJICAgIGlmICgoZ2V0RkNEKHRhcmdldFRleHQsIHN0YXJ0KSAmIExBU1RfQllURV9NQVNLXykgPT0gMCkgeworCSAgICAgICAgLy8gZGllLi4uIGZhaWxlZCBhdCBhIGJhc2UgY2hhcmFjdGVyCisJICAgICAgICByZXR1cm4gRE9ORTsKKwkgICAgfQorCQorCQlzdGFydCA9IHRhcmdldFRleHQuZ2V0SW5kZXgoKTsgLy8gaW5kZXggY2hhbmdlZCBieSBmY2QKKwkgICAgaW50IG9mZnNldCA9IGdldE5leHRCYXNlT2Zmc2V0KHRhcmdldFRleHQsIHN0YXJ0KTsKKwkgICAgc3RhcnQgPSBnZXRQcmV2aW91c0Jhc2VPZmZzZXQoc3RhcnQpOworCQorCSAgICBTdHJpbmdCdWZmZXIgYWNjZW50cyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkgICAgU3RyaW5nIGFjY2VudHN0ciA9IGdldFN0cmluZyh0YXJnZXRUZXh0LCBzdGFydCwgb2Zmc2V0IC0gc3RhcnQpOworCSAgICAvLyBub3JtYWxpemluZyB0aGUgb2ZmZW5zaXZlIHN0cmluZworCSAgICBpZiAoTm9ybWFsaXplci5xdWlja0NoZWNrKGFjY2VudHN0ciwgTm9ybWFsaXplci5ORkQpIAorCSAgICAgICAgCQkJCQkJCQkJCT09IE5vcm1hbGl6ZXIuTk8pIHsKKwkgICAgICAgIGFjY2VudHN0ciA9IE5vcm1hbGl6ZXIuZGVjb21wb3NlKGFjY2VudHN0ciwgZmFsc2UpOworCSAgICB9CisJICAgIGFjY2VudHMuYXBwZW5kKGFjY2VudHN0cik7CisJICAgICAgICAKKwkgICAgaW50IGFjY2VudHNpbmRleFtdID0gbmV3IGludFtJTklUSUFMX0FSUkFZX1NJWkVfXTsgICAgICAKKwkgICAgaW50IGFjY2VudHNpemUgPSBnZXRVbmJsb2NrZWRBY2NlbnRJbmRleChhY2NlbnRzLCBhY2NlbnRzaW5kZXgpOworCSAgICBpbnQgY291bnQgPSAoMiA8PCAoYWNjZW50c2l6ZSAtIDEpKSAtIDI7ICAKKwkgICAgd2hpbGUgKGNvdW50ID4gMCkgeworCSAgICAJLy8gY29weSB0aGUgYmFzZSBjaGFyYWN0ZXJzCisJICAgIAltX2Nhbm9uaWNhbFByZWZpeEFjY2VudHNfLmRlbGV0ZSgwLCAKKwkgICAgCQkJCQkJCQltX2Nhbm9uaWNhbFByZWZpeEFjY2VudHNfLmxlbmd0aCgpKTsKKwkgICAgCWludCBrID0gMDsKKwkgICAgICAgIGZvciAoOyBrIDwgYWNjZW50c2luZGV4WzBdOyBrICsrKSB7CisJICAgICAgICAgICAgbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXy5hcHBlbmQoYWNjZW50cy5jaGFyQXQoaykpOworCSAgICAgICAgfQorCSAgICAgICAgLy8gZm9ybWluZyBhbGwgcG9zc2libGUgY2Fub25pY2FsIHJlYXJyYW5nZW1lbnQgYnkgZHJvcHBpbmcKKwkgICAgICAgIC8vIHNldHMgb2YgYWNjZW50cworCSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gYWNjZW50c2l6ZSAtIDE7IGkgKyspIHsKKwkgICAgICAgICAgICBpbnQgbWFzayA9IDEgPDwgKGFjY2VudHNpemUgLSBpIC0gMSk7CisJICAgICAgICAgICAgaWYgKChjb3VudCAmIG1hc2spICE9IDApIHsKKwkgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IGFjY2VudHNpbmRleFtpXTsgaiA8IGFjY2VudHNpbmRleFtpICsgMV07IAorCSAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJaiArKykgeworCSAgICAgICAgICAgICAgICAgICAgbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXy5hcHBlbmQoYWNjZW50cy5jaGFyQXQoaikpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgU3RyaW5nQnVmZmVyIG1hdGNoID0gbWVyZ2UobV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRleHQsIG9mZnNldCwgZW5kLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXyk7CisJICAgICAgICAgICAgCisJICAgICAgICAvLyBpZiBzdGF0dXMgaXMgYSBmYWlsdXJlLCB1Y29sX3NldFRleHQgZG9lcyBub3RoaW5nLgorCSAgICAgICAgLy8gcnVuIHRoZSBjb2xsYXRvciBpdGVyYXRvciB0aHJvdWdoIHRoaXMgbWF0Y2gKKwkgICAgICAgIG1fdXRpbENvbEVJdGVyXy5zZXRUZXh0KG1hdGNoLnRvU3RyaW5nKCkpOworCSAgICAgICAgaWYgKGNoZWNrQ29sbGF0aW9uTWF0Y2gobV91dGlsQ29sRUl0ZXJfKSkgeworCSAgICAgICAgIAlyZXR1cm4gc3RhcnQ7CisJICAgICAgICB9CisJICAgICAgICBjb3VudCAtLTsKKwkgICAgfQorCSAgICByZXR1cm4gRE9ORTsKKwl9CisKKwkvKioKKwkqIEdldHMgdGhlIG9mZnNldCB0byB0aGUgc2FmZSBwb2ludCBpbiB0ZXh0IGJlZm9yZSB0ZXh0b2Zmc2V0LgorCSogaWUuIG5vdCB0aGUgbWlkZGxlIG9mIGEgY29udHJhY3Rpb24sIHN3YXBwYWJsZSBjaGFyYWN0ZXJzIG9yIAorCSogc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgorCSogQHBhcmFtIHN0YXJ0IG9mZnNldCBpbiBzdHJpbmcKKwkqIEBwYXJhbSB0ZXh0b2Zmc2V0IG9mZnNldCBpbiBzdHJpbmcKKwkqIEByZXR1cm4gb2Zmc2V0IHRvIHRoZSBwcmV2aW91cyBzYWZlIGNoYXJhY3RlcgorCSovCisJcHJpdmF0ZSBmaW5hbCBpbnQgZ2V0UHJldmlvdXNTYWZlT2Zmc2V0KGludCBzdGFydCwgaW50IHRleHRvZmZzZXQpCisJeworCSAgICBpbnQgcmVzdWx0ID0gdGV4dG9mZnNldDsgLy8gZmlyc3QgY29udHJhY3Rpb24gY2hhcmFjdGVyCisJICAgIHRhcmdldFRleHQuc2V0SW5kZXgodGV4dG9mZnNldCk7CisJICAgIHdoaWxlIChyZXN1bHQgPj0gc3RhcnQgJiYgbV9jb2xsYXRvcl8uaXNVbnNhZmUodGFyZ2V0VGV4dC5wcmV2aW91cygpKSkgeworCSAgICAgICAgcmVzdWx0ID0gdGFyZ2V0VGV4dC5nZXRJbmRleCgpOworCSAgICB9CisJICAgIGlmIChyZXN1bHQgIT0gc3RhcnQpIHsKKwkgICAgICAgIC8vIHRoZSBmaXJzdCBjb250cmFjdGlvbiBjaGFyYWN0ZXIgaXMgY29uc2lkZXIgdW5zYWZlIGhlcmUKKwkgICAgICAgIHJlc3VsdCA9IHRhcmdldFRleHQuZ2V0SW5kZXgoKTsgLy8gb3JpZ2luYWxseSByZXN1bHQgLS07CisJICAgIH0KKwkgICAgcmV0dXJuIHJlc3VsdDsgCisJfQorCisJLyoqCisJICogVGFrZSB0aGUgcmVhcnJhbmdlZCBlbmQgYWNjZW50cyBhbmQgdHJpZXMgbWF0Y2hpbmcuIElmIG1hdGNoIGZhaWxlZCBhdAorCSAqIGEgc2VwZXJhdGUgcHJlY2VkaW5nIHNldCBvZiBhY2NlbnRzIChzZXBlcmF0ZWQgZnJvbSB0aGUgcmVhcnJhbmdlZCBvbiBieQorCSAqIGF0IGxlYXN0IGEgYmFzZSBjaGFyYWN0ZXIpIHRoZW4gd2UgcmVhcnJhbmdlIHRoZSBwcmVjZWRpbmcgYWNjZW50cyBhbmQgCisJICogdHJpZXMgbWF0Y2hpbmcgYWdhaW4uCisJICogV2UgYWxsb3cgc2tpcHBpbmcgb2YgdGhlIGVuZHMgb2YgdGhlIGFjY2VudCBzZXQgaWYgdGhlIGNlcyBkbyBub3QgbWF0Y2guIAorCSAqIEhvd2V2ZXIgaWYgdGhlIGZhaWx1cmUgaXMgZm91bmQgYmVmb3JlIHRoZSBhY2NlbnQgc2V0LCBpdCBmYWlscy4KKwkgKiBJbnRlcm5hbCBtZXRob2QsIHN0YXR1cyBhc3N1bWVkIHRvIGJlIHN1Y2Nlc3MsIGNhbGxlciBoYXMgdG8gY2hlY2sgCisJICogc3RhdHVzIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgorCSAqIEBwYXJhbSB0ZXh0b2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgcmVhcnJhbmdlZCBhY2NlbnQKKwkgKiBAcmV0dXJuIERPTkUgaWYgYSBtYXRjaCBpcyBub3QgZm91bmQsIG90aGVyd2lzZSByZXR1cm4gdGhlIHN0YXJ0aW5nCisJICogICAgICAgICBvZmZzZXQgb2YgdGhlIG1hdGNoLiBOb3RlIHRoaXMgc3RhcnQgaW5jbHVkZXMgYWxsIHByZWNlZGluZyAKKwkgKiAgICAgICAgIGFjY2VudHMuCisJICovCisJcHJpdmF0ZSBpbnQgZG9OZXh0Q2Fub25pY2FsU3VmZml4TWF0Y2goaW50IHRleHRvZmZzZXQpCisJeworCSAgICBpbnQgc2FmZWxlbmd0aCA9IDA7CisJICAgIFN0cmluZ0J1ZmZlciBzYWZldGV4dDsKKwkJaW50IHNhZmVvZmZzZXQgPSBtX3RleHRCZWdpbk9mZnNldF87IAorCQkKKwkgICAgaWYgKHRleHRvZmZzZXQgIT0gbV90ZXh0QmVnaW5PZmZzZXRfIAorCSAgICAJJiYgbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXy5sZW5ndGgoKSA+IDAKKwkgICAgCSYmIG1fY29sbGF0b3JfLmlzVW5zYWZlKG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18uY2hhckF0KDApKSkgeworCSAgICAgICAgc2FmZW9mZnNldCAgICAgPSBnZXRQcmV2aW91c1NhZmVPZmZzZXQobV90ZXh0QmVnaW5PZmZzZXRfLCAKKwkgICAgICAgIAkJCQkJCQkJCQl0ZXh0b2Zmc2V0KTsKKwkgICAgICAgIHNhZmVsZW5ndGggICAgID0gdGV4dG9mZnNldCAtIHNhZmVvZmZzZXQ7CisJICAgICAgICBzYWZldGV4dCAgICAgICA9IG1lcmdlKG51bGwsIHRhcmdldFRleHQsIHNhZmVvZmZzZXQsIHRleHRvZmZzZXQsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nhbm9uaWNhbFN1ZmZpeEFjY2VudHNfKTsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICAgIHNhZmV0ZXh0ID0gbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXzsKKwkgICAgfQorCQorCSAgICAvLyBpZiBzdGF0dXMgaXMgYSBmYWlsdXJlLCB1Y29sX3NldFRleHQgZG9lcyBub3RoaW5nCisJICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBjb2xlaXRlciA9IG1fdXRpbENvbEVJdGVyXzsKKwkgICAgY29sZWl0ZXIuc2V0VGV4dChzYWZldGV4dC50b1N0cmluZygpKTsKKwkgICAgLy8gc3RhdHVzIGNoZWNrZWQgaW4gbG9vcCBiZWxvdworCQorCSAgICBpbnQgY2VpbmRleCA9IG1fcGF0dGVybl8ubV9DRUxlbmd0aF8gLSAxOworCSAgICBib29sZWFuIGlzU2FmZSA9IHRydWU7IC8vIGluZGljYXRpb24gZmxhZyBmb3IgcG9zaXRpb24gaW4gc2FmZSB6b25lCisJICAgIAorCSAgICB3aGlsZSAoY2VpbmRleCA+PSAwKSB7CisJICAgICAgICBpbnQgdGV4dGNlID0gY29sZWl0ZXIucHJldmlvdXMoKTsKKwkgICAgICAgIGlmICh0ZXh0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgcGFzc2VkIHRoZSBzYWZlIGJ1ZmZlcgorCSAgICAgICAgICAgIGlmIChjb2xlaXRlciA9PSBtX2NvbEVJdGVyXykgeworCSAgICAgICAgICAgICAgICByZXR1cm4gRE9ORTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgY29sZWl0ZXIgPSBtX2NvbEVJdGVyXzsKKwkgICAgICAgICAgICBpZiAoc2FmZXRleHQgIT0gbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXykgeworCSAgICAgICAgICAgIAlzYWZldGV4dC5kZWxldGUoMCwgc2FmZXRleHQubGVuZ3RoKCkpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBjb2xlaXRlci5zZXRFeGFjdE9mZnNldChzYWZlb2Zmc2V0KTsKKwkgICAgICAgICAgICAvLyBzdGF0dXMgY2hlY2tlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxvb3AKKwkgICAgICAgICAgICBpc1NhZmUgPSBmYWxzZTsKKwkgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRleHRjZSA9IGdldENFKHRleHRjZSk7CisJICAgICAgICBpZiAodGV4dGNlICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUgCisJICAgICAgICAJJiYgdGV4dGNlICE9IG1fcGF0dGVybl8ubV9DRV9bY2VpbmRleF0pIHsKKwkgICAgICAgICAgICAvLyBkbyB0aGUgYmVnaW5uaW5nIHN0dWZmCisJICAgICAgICAgICAgaW50IGZhaWxlZG9mZnNldCA9IGNvbGVpdGVyLmdldE9mZnNldCgpOworCSAgICAgICAgICAgIGlmIChpc1NhZmUgJiYgZmFpbGVkb2Zmc2V0ID49IHNhZmVsZW5ndGgpIHsKKwkgICAgICAgICAgICAgICAgLy8gYWxhcy4uLiBubyBob3BlLiBmYWlsZWQgYXQgcmVhcnJhbmdlZCBhY2NlbnQgc2V0CisJICAgICAgICAgICAgICAgIHJldHVybiBET05FOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgaWYgKGlzU2FmZSkgeworCSAgICAgICAgICAgICAgICAgICAgZmFpbGVkb2Zmc2V0ICs9IHNhZmVvZmZzZXQ7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgICAgIC8vIHRyeSByZWFycmFuZ2luZyB0aGUgZnJvbnQgYWNjZW50cworCSAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gZG9OZXh0Q2Fub25pY2FsUHJlZml4TWF0Y2goZmFpbGVkb2Zmc2V0LCAKKwkgICAgICAgICAgICAgICAgCQkJCQkJCQkJCXRleHRvZmZzZXQpOworCSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IERPTkUpIHsKKwkgICAgICAgICAgICAgICAgICAgIC8vIGlmIHN0YXR1cyBpcyBhIGZhaWx1cmUsIHVjb2xfc2V0T2Zmc2V0IGRvZXMgbm90aGluZworCSAgICAgICAgICAgICAgICAgICAgbV9jb2xFSXRlcl8uc2V0RXhhY3RPZmZzZXQocmVzdWx0KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0ZXh0Y2UgPT0gbV9wYXR0ZXJuXy5tX0NFX1tjZWluZGV4XSkgeworCSAgICAgICAgICAgIGNlaW5kZXggLS07CisJICAgICAgICB9CisJICAgIH0KKwkgICAgLy8gc2V0IG9mZnNldCBoZXJlCisJICAgIGlmIChpc1NhZmUpIHsKKwkgICAgICAgIGludCByZXN1bHQgPSBjb2xlaXRlci5nZXRPZmZzZXQoKTsKKwkgICAgICAgIC8vIHNldHMgdGhlIHRleHQgaXRlcmF0b3Igd2l0aCB0aGUgY29ycmVjdCBleHBhbnNpb24gYW5kIG9mZnNldAorCSAgICAgICAgaW50IGxlZnRvdmVyY2VzID0gY29sZWl0ZXIubV9DRUJ1ZmZlck9mZnNldF87CisJICAgICAgICBpZiAocmVzdWx0ID49IHNhZmVsZW5ndGgpIHsgCisJICAgICAgICAgICAgcmVzdWx0ID0gdGV4dG9mZnNldDsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHJlc3VsdCArPSBzYWZlb2Zmc2V0OworCSAgICAgICAgfQorCSAgICAgICAgbV9jb2xFSXRlcl8uc2V0RXhhY3RPZmZzZXQocmVzdWx0KTsKKwkgICAgICAgIG1fY29sRUl0ZXJfLm1fQ0VCdWZmZXJPZmZzZXRfID0gbGVmdG92ZXJjZXM7CisJICAgICAgICByZXR1cm4gcmVzdWx0OworCSAgICB9CisJICAgIAorCSAgICByZXR1cm4gY29sZWl0ZXIuZ2V0T2Zmc2V0KCk7ICAgICAgICAgICAgICAKKwl9CisJCisJLyoqCisJICogVHJ5aW5nIG91dCB0aGUgc3Vic3RyaW5nIGFuZCBzZWVzIGlmIGl0IGNhbiBiZSBhIGNhbm9uaWNhbCBtYXRjaC4KKwkgKiBUaGlzIHdpbGwgdHJ5IG5vcm1hbGl6aW5nIHRoZSBlbmQgYWNjZW50cyBhbmQgYXJyYW5naW5nIHRoZW0gaW50byAKKwkgKiBjYW5vbmljYWwgZXF1aXZhbGVudHMgYW5kIGNoZWNrIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2VzIHdpdGggdGhlIHBhdHRlcm4gCisJICogY2UuCisJICogU3VmZml4IGFjY2VudHMgaW4gdGhlIHRleHQgd2lsbCBiZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBjb21iaW5pbmcgCisJICogY2xhc3MgYW5kIHRoZSBncm91cHMgd2lsbCBiZSBtaXhlZCBhbmQgbWF0Y2hlZCB0byB0cnkgZmluZCB0aGUgcGVyZmVjdCAKKwkgKiBtYXRjaCB3aXRoIHRoZSBwYXR0ZXJuLgorCSAqIFNvIGZvciBpbnN0YW5jZSBsb29raW5nIGZvciAiXHUwMzAxIiBpbiAiXHUwMzBBXHUwMzAxXHUwMzI1IgorCSAqIHN0ZXAgMTogc3BsaXQgIlx1MDMwQVx1MDMwMSIgaW50byA2IG90aGVyIHR5cGUgb2YgcG90ZW50aWFsIGFjY2VudCAKKwkgKiAgICAgICAgIHN1YnN0cmluZ3MKKwkgKiAgICAgICAgICJcdTAzMEEiLCAiXHUwMzAxIiwgIlx1MDMyNSIsICJcdTAzMEFcdTAzMDEiLCAiXHUwMzBBXHUwMzI1IiwgCisJICogICAgICAgICAiXHUwMzAxXHUwMzI1Ii4KKwkgKiBzdGVwIDI6IGNoZWNrIGlmIGFueSBvZiB0aGUgZ2VuZXJhdGVkIHN1YnN0cmluZ3MgbWF0Y2hlcyB0aGUgcGF0dGVybi4KKwkgKiBAcGFyYW0gdGV4dG9mZnNldCBlbmQgb2Zmc2V0IGluIHRoZSBjb2xsYXRpb24gZWxlbWVudCB0ZXh0IHRoYXQgZW5kcyB3aXRoIAorCSAqICAgICAgICAgICAgICAgICAgIHRoZSBhY2NlbnRzIHRvIGJlIHJlYXJyYW5nZWQKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG1hdGNoIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gZG9OZXh0Q2Fub25pY2FsTWF0Y2goaW50IHRleHRvZmZzZXQpCisJeworCQlpbnQgb2Zmc2V0ID0gbV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCk7CisJCXRhcmdldFRleHQuc2V0SW5kZXgodGV4dG9mZnNldCk7CisJCWlmIChVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKHRhcmdldFRleHQucHJldmlvdXMoKSkgCisJCQkmJiB0YXJnZXRUZXh0LmdldEluZGV4KCkgPiBtX3RleHRCZWdpbk9mZnNldF8pIHsgCisJCQlpZiAoIVVURjE2LmlzTGVhZFN1cnJvZ2F0ZSh0YXJnZXRUZXh0LnByZXZpb3VzKCkpKSB7CisJCQkJdGFyZ2V0VGV4dC5uZXh0KCk7CisJCQl9CisJCX0KKwkgICAgaWYgKChnZXRGQ0QodGFyZ2V0VGV4dCwgdGFyZ2V0VGV4dC5nZXRJbmRleCgpKSAmIExBU1RfQllURV9NQVNLXykgPT0gMCkgeworCSAgICAgICAgaWYgKG1fcGF0dGVybl8ubV9oYXNQcmVmaXhBY2NlbnRzXykgeworCSAgICAgICAgICAgIG9mZnNldCA9IGRvTmV4dENhbm9uaWNhbFByZWZpeE1hdGNoKG9mZnNldCwgdGV4dG9mZnNldCk7CisJICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBET05FKSB7CisJICAgICAgICAgICAgICAgIG1fY29sRUl0ZXJfLnNldEV4YWN0T2Zmc2V0KG9mZnNldCk7CisJICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCQorCSAgICBpZiAoIW1fcGF0dGVybl8ubV9oYXNTdWZmaXhBY2NlbnRzXykgeworCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisJCisJICAgIFN0cmluZ0J1ZmZlciBhY2NlbnRzID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCSAgICAvLyBvZmZzZXQgdG8gdGhlIGxhc3QgYmFzZSBjaGFyYWN0ZXIgaW4gc3Vic3RyaW5nIHRvIHNlYXJjaAorCSAgICBpbnQgYmFzZW9mZnNldCA9IGdldFByZXZpb3VzQmFzZU9mZnNldCh0YXJnZXRUZXh0LCB0ZXh0b2Zmc2V0KTsKKwkgICAgLy8gbm9ybWFsaXppbmcgdGhlIG9mZmVuc2l2ZSBzdHJpbmcKKwkgICAgU3RyaW5nIGFjY2VudHN0ciA9IGdldFN0cmluZyh0YXJnZXRUZXh0LCBiYXNlb2Zmc2V0LCAKKwkgICAgCQkJCQkJCSB0ZXh0b2Zmc2V0IC0gYmFzZW9mZnNldCk7CisJICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soYWNjZW50c3RyLCBOb3JtYWxpemVyLk5GRCkgCisJICAgICAgICAJCQkJCQkJCQkJPT0gTm9ybWFsaXplci5OTykgeworCSAgICAgICAgYWNjZW50c3RyID0gTm9ybWFsaXplci5kZWNvbXBvc2UoYWNjZW50c3RyLCBmYWxzZSk7CisJICAgIH0KKwkgICAgYWNjZW50cy5hcHBlbmQoYWNjZW50c3RyKTsKKwkgICAgLy8gc3RhdHVzIGNoZWNrZWQgaW4gbG9vcCBiZWxvdworCSAgICAgICAgCisJICAgIGludCBhY2NlbnRzaW5kZXhbXSA9IG5ldyBpbnRbSU5JVElBTF9BUlJBWV9TSVpFX107CisJICAgIGludCBzaXplID0gZ2V0VW5ibG9ja2VkQWNjZW50SW5kZXgoYWNjZW50cywgYWNjZW50c2luZGV4KTsKKwkKKwkgICAgLy8gMiBwb3dlciBuIC0gMSBtaW51cyB0aGUgZnVsbCBzZXQgb2YgYWNjZW50cworCSAgICBpbnQgIGNvdW50ID0gKDIgPDwgKHNpemUgLSAxKSkgLSAyOyAgCisJICAgIHdoaWxlIChjb3VudCA+IDApIHsKKyAgICAgICAgICAgIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18uZGVsZXRlKDAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18ubGVuZ3RoKCkpOworCSAgICAgICAgLy8gY29weSB0aGUgYmFzZSBjaGFyYWN0ZXJzCisJICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGFjY2VudHNpbmRleFswXTsgayArKykgeworCSAgICAgICAgICAgIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18uYXBwZW5kKGFjY2VudHMuY2hhckF0KGspKTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIGZvcm1pbmcgYWxsIHBvc3NpYmxlIGNhbm9uaWNhbCByZWFycmFuZ2VtZW50IGJ5IGRyb3BwaW5nCisJICAgICAgICAvLyBzZXRzIG9mIGFjY2VudHMKKwkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHNpemUgLSAxOyBpICsrKSB7CisJICAgICAgICAgICAgaW50IG1hc2sgPSAxIDw8IChzaXplIC0gaSAtIDEpOworCSAgICAgICAgICAgIGlmICgoY291bnQgJiBtYXNrKSAhPSAwKSB7CisJICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBhY2NlbnRzaW5kZXhbaV07IGogPCBhY2NlbnRzaW5kZXhbaSArIDFdOyAKKwkgICAgICAgICAgICAgICAgCWogKyspIHsKKwkgICAgICAgICAgICAgICAgICAgIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18uYXBwZW5kKGFjY2VudHMuY2hhckF0KGopKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIG9mZnNldCA9IGRvTmV4dENhbm9uaWNhbFN1ZmZpeE1hdGNoKGJhc2VvZmZzZXQpOworCSAgICAgICAgaWYgKG9mZnNldCAhPSBET05FKSB7CisJICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIG1hdGNoIGZvdW5kCisJICAgICAgICB9CisJICAgICAgICBjb3VudCAtLTsKKwkgICAgfQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorCQorCS8qKgorCSAqIEdldHMgdGhlIHByZXZpb3VzIGJhc2UgY2hhcmFjdGVyIG9mZnNldCBkZXBlbmRpbmcgb24gdGhlIHN0cmluZyBzZWFyY2ggCisJICogcGF0dGVybiBkYXRhCisJICogQHBhcmFtIHN0cnNyY2ggc3RyaW5nIHNlYXJjaCBkYXRhCisJICogQHBhcmFtIHRleHRvZmZzZXQgY3VycmVudCBvZmZzZXQsIGN1cnJlbnQgY2hhcmFjdGVyCisJICogQHJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IGNoYXJhY3RlciBhZnRlciB0aGlzIGJhc2UgY2hhcmFjdGVyIG9yIAorCSAqIAkJCWl0c2VsZiBpZiBpdCBpcyBhIGNvbXBvc2VkIGNoYXJhY3RlciB3aXRoIGFjY2VudHMKKwkgKi8KKwlwcml2YXRlIGZpbmFsIGludCBnZXRQcmV2aW91c0Jhc2VPZmZzZXQoaW50IHRleHRvZmZzZXQpCisJeworCSAgICBpZiAobV9wYXR0ZXJuXy5tX2hhc1ByZWZpeEFjY2VudHNfICYmIHRleHRvZmZzZXQgPiBtX3RleHRCZWdpbk9mZnNldF8pIHsKKwkgICAgICAgIGludCBvZmZzZXQgPSB0ZXh0b2Zmc2V0OworCSAgICAgICAgaWYgKChnZXRGQ0QodGFyZ2V0VGV4dCwgb2Zmc2V0KSA+PiBTRUNPTkRfTEFTVF9CWVRFX1NISUZUXykgIT0gMCkgeworCSAgICAgICAgICAgIHJldHVybiBnZXRQcmV2aW91c0Jhc2VPZmZzZXQodGFyZ2V0VGV4dCwgdGV4dG9mZnNldCk7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgcmV0dXJuIHRleHRvZmZzZXQ7CisJfQorCQorCS8qKgorCSAqIENoZWNrcyBtYXRjaCBmb3IgY29udHJhY3Rpb24uIAorCSAqIElmIHRoZSBtYXRjaCBlbmRzIHdpdGggYSBwYXJ0aWFsIGNvbnRyYWN0aW9uIHdlIGZhaWwuCisJICogSWYgdGhlIG1hdGNoIHN0YXJ0cyB0b28gZmFyIG9mZiAoYmVjYXVzZSBvZiBiYWNrd2FyZHMgaXRlcmF0aW9uKSB3ZSB0cnkgCisJICogdG8gY2hpcCBvZmYgdGhlIGV4dHJhIGNoYXJhY3RlcnMuCisJICogVXNlcyB0aGUgdGVtcG9yYXJ5IHV0aWwgYnVmZmVyIGZvciByZXR1cm4gdmFsdWVzIG9mIHRoZSBtb2RpZmllZCBzdGFydAorCSAqIGFuZCBlbmQuCisJICogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBwb3RlbnRpYWwgbWF0Y2gsIHRvIGJlIG1vZGlmaWVkIGlmIG5lY2Vzc2FyeQorCSAqIEBwYXJhbSBlbmQgb2Zmc2V0IG9mIHBvdGVudGlhbCBtYXRjaCwgdG8gYmUgbW9kaWZpZWQgaWYgbmVjZXNzYXJ5CisJICogQHJldHVybiB0cnVlIGlmIG1hdGNoIHBhc3NlcyB0aGUgY29udHJhY3Rpb24gdGVzdCwgZmFsc2Ugb3RoZXJ3aXNlLiAKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tOZXh0Q2Fub25pY2FsQ29udHJhY3Rpb25NYXRjaChpbnQgc3RhcnQsIGludCBlbmQpIAorCXsKKwkgICAgLy8gVGhpcyBwYXJ0IGNoZWNrcyBpZiBlaXRoZXIgZW5kcyBvZiB0aGUgbWF0Y2ggY29udGFpbnMgcG90ZW50aWFsIAorCSAgICAvLyBjb250cmFjdGlvbi4gSWYgc28gd2UnbGwgaGF2ZSB0byBpdGVyYXRlIHRocm91Z2ggdGhlbQorCSAgICBjaGFyIHNjaGFyID0gMDsKKwkgICAgY2hhciBlY2hhciA9IDA7CisJICAgIGlmIChlbmQgPCBtX3RleHRMaW1pdE9mZnNldF8pIHsKKwkgICAgCXRhcmdldFRleHQuc2V0SW5kZXgoZW5kKTsKKwkgICAgCWVjaGFyID0gdGFyZ2V0VGV4dC5jdXJyZW50KCk7CisJICAgIH0KKwkgICAgaWYgKHN0YXJ0IDwgbV90ZXh0TGltaXRPZmZzZXRfKSB7CisJICAgIAl0YXJnZXRUZXh0LnNldEluZGV4KHN0YXJ0ICsgMSk7CisJICAgIAlzY2hhciA9IHRhcmdldFRleHQuY3VycmVudCgpOworCSAgICB9CisJICAgIGlmIChtX2NvbGxhdG9yXy5pc1Vuc2FmZShlY2hhcikgfHwgbV9jb2xsYXRvcl8uaXNVbnNhZmUoc2NoYXIpKSB7CisJICAgICAgICBpbnQgZXhwYW5zaW9uICA9IG1fY29sRUl0ZXJfLm1fQ0VCdWZmZXJPZmZzZXRfOworCSAgICAgICAgYm9vbGVhbiBoYXNFeHBhbnNpb24gPSBleHBhbnNpb24gPiAwOworCSAgICAgICAgbV9jb2xFSXRlcl8uc2V0RXhhY3RPZmZzZXQoc3RhcnQpOworCSAgICAgICAgaW50IHRlbXAgPSBzdGFydDsKKwkgICAgICAgIHdoaWxlIChleHBhbnNpb24gPiAwKSB7CisJICAgICAgICAgICAgLy8gZ2V0dGluZyByaWQgb2YgdGhlIHJlZHVuZGFudCBjZSwgY2F1c2VkIGJ5IHNldE9mZnNldC4KKwkgICAgICAgICAgICAvLyBzaW5jZSBiYWNrd2FyZCBjb250cmFjdGlvbi9leHBhbnNpb24gbWF5IGhhdmUgZXh0cmEgY2VzIGlmIAorCSAgICAgICAgICAgIC8vIHdlIGFyZSBpbiB0aGUgbm9ybWFsaXphdGlvbiBidWZmZXIsIGhhc0FjY2VudHNCZWZvcmVNYXRjaCAKKwkgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgaXQuCisJICAgICAgICAgICAgLy8gRS5nLiB0aGUgY2hhcmFjdGVyIFx1MDFGQSB3aWxsIGhhdmUgYW4gZXhwYW5zaW9uIG9mIDMsIGJ1dCAKKwkgICAgICAgICAgICAvLyBpZiB3ZSBhcmUgb25seSBsb29raW5nIGZvciBhY3V0ZSBhbmQgcmluZyBcdTAzMEEgYW5kIFx1MDMwMSwgCisJICAgICAgICAgICAgLy8gd2UnbGwgaGF2ZSB0byBza2lwIHRoZSBmaXJzdCBjZSBpbiB0aGUgZXhwYW5zaW9uIGJ1ZmZlci4KKwkgICAgICAgICAgICBtX2NvbEVJdGVyXy5uZXh0KCk7CisJICAgICAgICAgICAgaWYgKG1fY29sRUl0ZXJfLmdldE9mZnNldCgpICE9IHRlbXApIHsKKwkgICAgICAgICAgICAgICAgc3RhcnQgPSB0ZW1wOworCSAgICAgICAgICAgICAgICB0ZW1wICA9IG1fY29sRUl0ZXJfLmdldE9mZnNldCgpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBleHBhbnNpb24gLS07CisJICAgICAgICB9CisJCisJICAgICAgICBpbnQgY291bnQgPSAwOworCSAgICAgICAgd2hpbGUgKGNvdW50IDwgbV9wYXR0ZXJuXy5tX0NFTGVuZ3RoXykgeworCSAgICAgICAgICAgIGludCBjZSA9IGdldENFKG1fY29sRUl0ZXJfLm5leHQoKSk7CisJICAgICAgICAgICAgLy8gc3RhdHVzIGNoZWNrZWQgYmVsb3csIG5vdGUgdGhhdCBpZiBzdGF0dXMgaXMgYSBmYWlsdXJlCisJICAgICAgICAgICAgLy8gdWNvbF9uZXh0IHJldHVybnMgVUNPTF9OVUxMT1JERVIKKwkgICAgICAgICAgICBpZiAoY2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGhhc0V4cGFuc2lvbiAmJiBjb3VudCA9PSAwIAorCSAgICAgICAgICAgIAkmJiBtX2NvbEVJdGVyXy5nZXRPZmZzZXQoKSAhPSB0ZW1wKSB7CisJICAgICAgICAgICAgICAgIHN0YXJ0ID0gdGVtcDsKKwkgICAgICAgICAgICAgICAgdGVtcCA9IG1fY29sRUl0ZXJfLmdldE9mZnNldCgpOworCSAgICAgICAgICAgIH0KKwkKKwkgICAgICAgICAgICBpZiAoY291bnQgPT0gMCAmJiBjZSAhPSBtX3BhdHRlcm5fLm1fQ0VfWzBdKSB7CisJICAgICAgICAgICAgICAgIC8vIGFjY2VudHMgbWF5IGhhdmUgZXh0cmEgc3RhcnRpbmcgY2VzLCB0aGlzIG9jY3VycyB3aGVuIGEgCisJICAgICAgICAgICAgICAgIC8vIHB1cmUgYWNjZW50IHBhdHRlcm4gaXMgbWF0Y2hlZCB3aXRob3V0IHJlYXJyYW5nZW1lbnQKKwkgICAgICAgICAgICAgICAgLy8gdGV4dCBcdTAzMjVcdTAzMDAgYW5kIGxvb2tpbmcgZm9yIFx1MDMwMAorCSAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWQgPSBtX3BhdHRlcm5fLm1fQ0VfWzBdOyAKKwkgICAgICAgICAgICAgICAgaWYgKChnZXRGQ0QodGFyZ2V0VGV4dCwgc3RhcnQpICYgTEFTVF9CWVRFX01BU0tfKSAhPSAwKSB7CisJICAgICAgICAgICAgICAgICAgICBjZSA9IGdldENFKG1fY29sRUl0ZXJfLm5leHQoKSk7CisJICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2UgIT0gZXhwZWN0ZWQgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2NvbEVJdGVyXy5nZXRPZmZzZXQoKSA8PSBlbmQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjZSA9IGdldENFKG1fY29sRUl0ZXJfLm5leHQoKSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGNlICE9IG1fcGF0dGVybl8ubV9DRV9bY291bnRdKSB7CisJICAgICAgICAgICAgICAgIGVuZCArKzsKKwkgICAgICAgICAgICAgICAgZW5kID0gZ2V0TmV4dEJhc2VPZmZzZXQoZW5kKTsgIAorCSAgICAgICAgICAgICAgICBtX3V0aWxCdWZmZXJfWzBdID0gc3RhcnQ7CisJICAgICAgICAgICAgICAgIG1fdXRpbEJ1ZmZlcl9bMV0gPSBlbmQ7CisJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgY291bnQgKys7CisJICAgICAgICB9CisJICAgIH0gCisJICAgIG1fdXRpbEJ1ZmZlcl9bMF0gPSBzdGFydDsKKwkgICAgbV91dGlsQnVmZmVyX1sxXSA9IGVuZDsKKwkgICAgcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogQ2hlY2tzIGFuZCBzZXRzIHRoZSBtYXRjaCBpbmZvcm1hdGlvbiBpZiBmb3VuZC4KKwkgKiBDaGVja3MgCisJICogPHVsPgorCSAqIDxsaT4gdGhlIHBvdGVudGlhbCBtYXRjaCBkb2VzIG5vdCByZXBlYXQgdGhlIHByZXZpb3VzIG1hdGNoCisJICogPGxpPiBib3VuZGFyaWVzIGFyZSBjb3JyZWN0CisJICogPGxpPiBwb3RlbnRpYWwgbWF0Y2ggZG9lcyBub3QgZW5kIGluIHRoZSBtaWRkbGUgb2YgYSBjb250cmFjdGlvbgorCSAqIDxsaT4gaWRlbnRpY2FsIG1hdGNoZXMKKwkgKiA8L3VsPgorCSAqIE90aGVyd2lzZSB0aGUgb2Zmc2V0IHdpbGwgYmUgc2hpZnRlZCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuCisJICogVGhlIHJlc3VsdCBtX21hdGNoSW5kZXhfIGFuZCBtX21hdGNoTGVuZ3RoXyB3aWxsIGJlIHNldCB0byB0aGUgdHJ1bmNhdGVkCisJICogbW9yZSBmaXR0aW5nIHJlc3VsdCB2YWx1ZS4KKwkgKiBVc2VzIHRoZSB0ZW1wb3JhcnkgdXRpbGl0eSBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIG1vZGlmaWVkIHRleHRvZmZzZXQuCisJICogQHBhcmFtIHRleHRvZmZzZXQgb2Zmc2V0IGluIHRoZSBjb2xsYXRpb24gZWxlbWVudCB0ZXh0LgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWF0Y2ggaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBjaGVja05leHRDYW5vbmljYWxNYXRjaChpbnQgdGV4dG9mZnNldCkKKwl7CisJICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFydCBhbmQgZW5kcyBhcmUgbm90IGNvbXBvc2l0ZSBjaGFyYWN0ZXJzCisJICAgIC8vIGlmIHdlIGhhdmUgYSBjYW5vbmljYWwgYWNjZW50IG1hdGNoCisJICAgIGlmICgobV9wYXR0ZXJuXy5tX2hhc1N1ZmZpeEFjY2VudHNfIAorCSAgICAJCSYmIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18ubGVuZ3RoKCkgIT0gMCkgfHwgCisJICAgICAgICAobV9wYXR0ZXJuXy5tX2hhc1ByZWZpeEFjY2VudHNfIAorCSAgICAgICAgCSYmIG1fY2Fub25pY2FsUHJlZml4QWNjZW50c18ubGVuZ3RoKCkgIT0gMCkpIHsKKwkgICAgICAgIG1fbWF0Y2hlZEluZGV4XyA9IGdldFByZXZpb3VzQmFzZU9mZnNldChtX2NvbEVJdGVyXy5nZXRPZmZzZXQoKSk7CisJICAgICAgICBtYXRjaExlbmd0aCA9IHRleHRvZmZzZXQgLSBtX21hdGNoZWRJbmRleF87CisJICAgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgfQorCQorCSAgICBpbnQgc3RhcnQgPSBtX2NvbEVJdGVyXy5nZXRPZmZzZXQoKTsKKwkgICAgaWYgKCFjaGVja05leHRDYW5vbmljYWxDb250cmFjdGlvbk1hdGNoKHN0YXJ0LCB0ZXh0b2Zmc2V0KSkgeworCSAgICAJLy8gcmV0dXJuIHRoZSBtb2RpZmllZCB0ZXh0b2Zmc2V0CisJICAgIAltX3V0aWxCdWZmZXJfWzBdID0gbV91dGlsQnVmZmVyX1sxXTsgCisJICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwkgICAgc3RhcnQgPSBtX3V0aWxCdWZmZXJfWzBdOworCSAgICB0ZXh0b2Zmc2V0ID0gbV91dGlsQnVmZmVyX1sxXTsKKwkgICAgc3RhcnQgPSBnZXRQcmV2aW91c0Jhc2VPZmZzZXQoc3RhcnQpOworCSAgICAvLyB0aGlzIHRvdGFsbHkgbWF0Y2hlcywgaG93ZXZlciB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIHJlcGVhdGluZworCSAgICBpZiAoY2hlY2tSZXBlYXRlZE1hdGNoKHN0YXJ0LCB0ZXh0b2Zmc2V0KSAKKwkgICAgCXx8ICFpc0JyZWFrVW5pdChzdGFydCwgdGV4dG9mZnNldCkgCisJICAgIAl8fCAhY2hlY2tJZGVudGljYWwoc3RhcnQsIHRleHRvZmZzZXQpKSB7CisJICAgICAgICB0ZXh0b2Zmc2V0ICsrOworCSAgICAgICAgdGV4dG9mZnNldCA9IGdldE5leHRCYXNlT2Zmc2V0KHRhcmdldFRleHQsIHRleHRvZmZzZXQpOworCSAgICAgICAgbV91dGlsQnVmZmVyX1swXSA9IHRleHRvZmZzZXQ7CisJICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwkgICAgCisJICAgIG1fbWF0Y2hlZEluZGV4XyAgPSBzdGFydDsKKwkgICAgbWF0Y2hMZW5ndGggPSB0ZXh0b2Zmc2V0IC0gc3RhcnQ7CisJICAgIHJldHVybiB0cnVlOworCX0KKwkKKwkvKioKKwkgKiBTaGlmdGluZyB0aGUgY29sbGF0aW9uIGVsZW1lbnQgaXRlcmF0b3IgcG9zaXRpb24gZm9yd2FyZCB0byBwcmVwYXJlIGZvcgorCSAqIGEgcHJlY2VkaW5nIG1hdGNoLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEgdW5zYWZlIGNoYXJhY3Rlciwgd2UnbGwgCisJICogb25seSBzaGlmdCBieSAxIHRvIGNhcHR1cmUgY29udHJhY3Rpb25zLCBub3JtYWxpemF0aW9uIGV0Yy4KKwkgKiBAcGFyYW0gdGV4dG9mZnNldCBzdGFydCB0ZXh0IHBvc2l0aW9uIHRvIGRvIHNlYXJjaAorCSAqIEBwYXJhbSBjZSB0aGUgdGV4dCBjZSB3aGljaCBmYWlsZWQgdGhlIG1hdGNoLgorCSAqIEBwYXJhbSBwYXR0ZXJuY2VpbmRleCBpbmRleCBvZiB0aGUgY2Ugd2l0aGluIHRoZSBwYXR0ZXJuIGNlIGJ1ZmZlciB3aGljaAorCSAqICAgICAgICBmYWlsZWQgdGhlIG1hdGNoCisJICogQHJldHVybiBmaW5hbCBvZmZzZXQKKwkgKi8KKwlwcml2YXRlIGludCByZXZlcnNlU2hpZnQoaW50IHRleHRvZmZzZXQsIGludCBjZSwgaW50IHBhdHRlcm5jZWluZGV4KQorCXsgICAgICAgICAKKwkgICAgaWYgKGlzT3ZlcmxhcHBpbmcoKSkgeworCSAgICAgICAgaWYgKHRleHRvZmZzZXQgIT0gbV90ZXh0TGltaXRPZmZzZXRfKSB7CisJICAgICAgICAgICAgdGV4dG9mZnNldCAtLTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHRleHRvZmZzZXQgLT0gbV9wYXR0ZXJuXy5tX2RlZmF1bHRTaGlmdFNpemVfOworCSAgICAgICAgfQorCSAgICB9CisJICAgIGVsc2UgeworCSAgICAgICAgaWYgKGNlICE9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgICBpbnQgc2hpZnQgPSBtX3BhdHRlcm5fLm1fYmFja1NoaWZ0X1toYXNoKGNlKV07CisJICAgICAgICAgICAgCisJICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBhZGp1c3QgZm9yIGNoYXJhY3RlcnMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3Vic3RyaW5nIAorCSAgICAgICAgICAgIC8vIGZvciBtYXRjaGluZyB0aGF0IGZhaWxlZC4KKwkgICAgICAgICAgICBpbnQgYWRqdXN0ID0gcGF0dGVybmNlaW5kZXg7CisJICAgICAgICAgICAgaWYgKGFkanVzdCA+IDEgJiYgc2hpZnQgPiBhZGp1c3QpIHsKKwkgICAgICAgICAgICAgICAgc2hpZnQgLT0gYWRqdXN0IC0gMTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGV4dG9mZnNldCAtPSBzaGlmdDsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHRleHRvZmZzZXQgLT0gbV9wYXR0ZXJuXy5tX2RlZmF1bHRTaGlmdFNpemVfOworCSAgICAgICAgfQorCSAgICB9ICAgIAorICAgICAgICAKKwkgICAgdGV4dG9mZnNldCA9IGdldFByZXZpb3VzQmFzZU9mZnNldCh0ZXh0b2Zmc2V0KTsKKwkgICAgcmV0dXJuIHRleHRvZmZzZXQ7CisJfQorCisJLyoqCisJICogQ2hlY2tzIG1hdGNoIGZvciBjb250cmFjdGlvbi4gCisJICogSWYgdGhlIG1hdGNoIHN0YXJ0cyB3aXRoIGEgcGFydGlhbCBjb250cmFjdGlvbiB3ZSBmYWlsLgorCSAqIFVzZXMgdGhlIHRlbXBvcmFyeSB1dGlsaXR5IGJ1ZmZlciB0byByZXR1cm4gdGhlIG1vZGlmaWVkIHN0YXJ0IGFuZCBlbmQuCisJICogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBwb3RlbnRpYWwgbWF0Y2gsIHRvIGJlIG1vZGlmaWVkIGlmIG5lY2Vzc2FyeQorCSAqIEBwYXJhbSBlbmQgb2Zmc2V0IG9mIHBvdGVudGlhbCBtYXRjaCwgdG8gYmUgbW9kaWZpZWQgaWYgbmVjZXNzYXJ5CisJICogQHJldHVybiB0cnVlIGlmIG1hdGNoIHBhc3NlcyB0aGUgY29udHJhY3Rpb24gdGVzdCwgZmFsc2Ugb3RoZXJ3aXNlLgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBjaGVja1ByZXZpb3VzRXhhY3RDb250cmFjdGlvbk1hdGNoKGludCBzdGFydCwgaW50IGVuZCkgCisJeworCSAgICAvLyBUaGlzIHBhcnQgY2hlY2tzIGlmIGVpdGhlciBlbmRzIG9mIHRoZSBtYXRjaCBjb250YWlucyBwb3RlbnRpYWwgCisJICAgIC8vIGNvbnRyYWN0aW9uLiBJZiBzbyB3ZSdsbCBoYXZlIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGVtCisJICAgIGNoYXIgZWNoYXIgPSAwOworCSAgICBpZiAoZW5kIDwgbV90ZXh0TGltaXRPZmZzZXRfKSB7CisJICAgIAl0YXJnZXRUZXh0LnNldEluZGV4KGVuZCk7CisJICAgIAllY2hhciA9IHRhcmdldFRleHQuY3VycmVudCgpOworCSAgICB9CisJICAgIGNoYXIgc2NoYXIgPSAwOworCSAgICBpZiAoc3RhcnQgKyAxIDwgbV90ZXh0TGltaXRPZmZzZXRfKSB7CisJICAgIAl0YXJnZXRUZXh0LnNldEluZGV4KHN0YXJ0ICsgMSk7CisJICAgIAlzY2hhciA9IHRhcmdldFRleHQuY3VycmVudCgpOworCSAgICB9CisJICAgIGlmIChtX2NvbGxhdG9yXy5pc1Vuc2FmZShlY2hhcikgfHwgbV9jb2xsYXRvcl8uaXNVbnNhZmUoc2NoYXIpKSB7CisJICAgIAkvLyBleHBhbnNpb24gc3VmZml4LCB3aGF0J3MgbGVmdCB0byBpdGVyYXRlCisJICAgICAgICBpbnQgZXhwYW5zaW9uID0gbV9jb2xFSXRlcl8ubV9DRUJ1ZmZlclNpemVfIAorCSAgICAgICAgCQkJCQkJCQktIG1fY29sRUl0ZXJfLm1fQ0VCdWZmZXJPZmZzZXRfOworCSAgICAgICAgYm9vbGVhbiBoYXNFeHBhbnNpb24gPSBleHBhbnNpb24gPiAwOworCSAgICAgICAgbV9jb2xFSXRlcl8uc2V0RXhhY3RPZmZzZXQoZW5kKTsKKwkgICAgICAgIGludCB0ZW1wID0gZW5kOworCSAgICAgICAgd2hpbGUgKGV4cGFuc2lvbiA+IDApIHsKKwkgICAgICAgICAgICAvLyBnZXR0aW5nIHJpZCBvZiB0aGUgcmVkdW5kYW50IGNlCisJICAgICAgICAgICAgLy8gc2luY2UgZm9yd2FyZCBjb250cmFjdGlvbi9leHBhbnNpb24gbWF5IGhhdmUgZXh0cmEgY2VzCisJICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGluIHRoZSBub3JtYWxpemF0aW9uIGJ1ZmZlciwgaGFzQWNjZW50c0JlZm9yZU1hdGNoCisJICAgICAgICAgICAgLy8gd291bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIGl0LgorCSAgICAgICAgICAgIC8vIEUuZy4gdGhlIGNoYXJhY3RlciBcdTAxRkEgd2lsbCBoYXZlIGFuIGV4cGFuc2lvbiBvZiAzLCBidXQgaWYKKwkgICAgICAgICAgICAvLyB3ZSBhcmUgb25seSBsb29raW5nIGZvciBBIHJpbmcgQVx1MDMwQSwgd2UnbGwgaGF2ZSB0byBza2lwIHRoZSAKKwkgICAgICAgICAgICAvLyBsYXN0IGNlIGluIHRoZSBleHBhbnNpb24gYnVmZmVyCisJICAgICAgICAgICAgbV9jb2xFSXRlcl8ucHJldmlvdXMoKTsKKwkgICAgICAgICAgICBpZiAobV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCkgIT0gdGVtcCkgeworCSAgICAgICAgICAgICAgICBlbmQgPSB0ZW1wOworCSAgICAgICAgICAgICAgICB0ZW1wID0gbV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGV4cGFuc2lvbiAtLTsKKwkgICAgICAgIH0KKwkKKwkgICAgICAgIGludCBjb3VudCA9IG1fcGF0dGVybl8ubV9DRUxlbmd0aF87CisJICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7CisJICAgICAgICAgICAgaW50IGNlID0gZ2V0Q0UobV9jb2xFSXRlcl8ucHJldmlvdXMoKSk7CisJICAgICAgICAgICAgLy8gc3RhdHVzIGNoZWNrZWQgYmVsb3csIG5vdGUgdGhhdCBpZiBzdGF0dXMgaXMgYSBmYWlsdXJlCisJICAgICAgICAgICAgLy8gdWNvbF9wcmV2aW91cyByZXR1cm5zIFVDT0xfTlVMTE9SREVSCisJICAgICAgICAgICAgaWYgKGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChoYXNFeHBhbnNpb24gJiYgY291bnQgPT0gMCAKKwkgICAgICAgICAgICAJJiYgbV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCkgIT0gdGVtcCkgeworCSAgICAgICAgICAgICAgICBlbmQgPSB0ZW1wOworCSAgICAgICAgICAgICAgICB0ZW1wID0gbV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChjZSAhPSBtX3BhdHRlcm5fLm1fQ0VfW2NvdW50IC0gMV0pIHsKKwkgICAgICAgICAgICAgICAgc3RhcnQgLS07CisJICAgICAgICAgICAgICAgIHN0YXJ0ID0gZ2V0UHJldmlvdXNCYXNlT2Zmc2V0KHRhcmdldFRleHQsIHN0YXJ0KTsKKwkgICAgICAgICAgICAgICAgbV91dGlsQnVmZmVyX1swXSA9IHN0YXJ0OworCSAgICAgICAgICAgICAgICBtX3V0aWxCdWZmZXJfWzFdID0gZW5kOworCSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGNvdW50IC0tOworCSAgICAgICAgfQorCSAgICB9IAorCSAgICBtX3V0aWxCdWZmZXJfWzBdID0gc3RhcnQ7CisJICAgIG1fdXRpbEJ1ZmZlcl9bMV0gPSBlbmQ7CisJICAgIHJldHVybiB0cnVlOworCX0KKwkKKwkvKioKKwkgKiBDaGVja3MgYW5kIHNldHMgdGhlIG1hdGNoIGluZm9ybWF0aW9uIGlmIGZvdW5kLgorCSAqIENoZWNrcyAKKwkgKiA8dWw+CisJICogPGxpPiB0aGUgY3VycmVudCBtYXRjaCBkb2VzIG5vdCByZXBlYXQgdGhlIGxhc3QgbWF0Y2gKKwkgKiA8bGk+IGJvdW5kYXJpZXMgYXJlIGNvcnJlY3QKKwkgKiA8bGk+IGV4YWN0IG1hdGNoZXMgaGFzIG5vIGV4dHJhIGFjY2VudHMKKwkgKiA8bGk+IGlkZW50aWNhbCBtYXRjaGVzCisJICogPC91bD4KKwkgKiBPdGhlcndpc2UgdGhlIG9mZnNldCB3aWxsIGJlIHNoaWZ0ZWQgdG8gdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIuCisJICogVXNlcyB0aGUgdGVtcG9yYXJ5IHV0aWxpdHkgYnVmZmVyIHRvIHN0b3JlIHRoZSBtb2RpZmllZCB0ZXh0b2Zmc2V0LgorCSAqIEBwYXJhbSB0ZXh0b2Zmc2V0IG9mZnNldCBpbiB0aGUgY29sbGF0aW9uIGVsZW1lbnQgdGV4dC4gdGhlIHJldHVybmVkIHZhbHVlCisJICogICAgICAgIHdpbGwgYmUgdGhlIHRydW5jYXRlZCBzdGFydCBvZmZzZXQgb2YgdGhlIG1hdGNoIG9yIHRoZSBuZXcgc3RhcnQgCisJICogICAgICAgIHNlYXJjaCBvZmZzZXQuCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBtYXRjaCBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlCisJICovCisJcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNoZWNrUHJldmlvdXNFeGFjdE1hdGNoKGludCB0ZXh0b2Zmc2V0KQorCXsKKwkgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmRzIGFyZSBub3QgY29tcG9zaXRlIGNoYXJhY3RlcnMKKwkgICAgaW50IGVuZCA9IG1fY29sRUl0ZXJfLmdldE9mZnNldCgpOyAgICAgICAgCisJICAgIGlmICghY2hlY2tQcmV2aW91c0V4YWN0Q29udHJhY3Rpb25NYXRjaCh0ZXh0b2Zmc2V0LCBlbmQpKSB7CisJICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwkgICAgdGV4dG9mZnNldCA9IG1fdXRpbEJ1ZmZlcl9bMF07CisJICAgIGVuZCA9IG1fdXRpbEJ1ZmZlcl9bMV07CisJICAgICAgICAKKwkgICAgLy8gdGhpcyB0b3RhbGx5IG1hdGNoZXMsIGhvd2V2ZXIgd2UgbmVlZCB0byBjaGVjayBpZiBpdCBpcyByZXBlYXRpbmcKKwkgICAgLy8gdGhlIG9sZCBtYXRjaAorCSAgICBpZiAoY2hlY2tSZXBlYXRlZE1hdGNoKHRleHRvZmZzZXQsIGVuZCkgCisJICAgIAl8fCAhaXNCcmVha1VuaXQodGV4dG9mZnNldCwgZW5kKSAKKwkgICAgCXx8IGhhc0FjY2VudHNCZWZvcmVNYXRjaCh0ZXh0b2Zmc2V0LCBlbmQpIAorCSAgICAJfHwgIWNoZWNrSWRlbnRpY2FsKHRleHRvZmZzZXQsIGVuZCkgCisJICAgIAl8fCBoYXNBY2NlbnRzQWZ0ZXJNYXRjaCh0ZXh0b2Zmc2V0LCBlbmQpKSB7CisJICAgICAgICB0ZXh0b2Zmc2V0IC0tOworCSAgICAgICAgdGV4dG9mZnNldCA9IGdldFByZXZpb3VzQmFzZU9mZnNldCh0YXJnZXRUZXh0LCB0ZXh0b2Zmc2V0KTsKKwkgICAgICAgIG1fdXRpbEJ1ZmZlcl9bMF0gPSB0ZXh0b2Zmc2V0OworCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisJICAgIG1fbWF0Y2hlZEluZGV4XyA9IHRleHRvZmZzZXQ7CisJICAgIG1hdGNoTGVuZ3RoID0gZW5kIC0gdGV4dG9mZnNldDsKKwkgICAgcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogUmVhcnJhbmdlcyB0aGUgZW5kIGFjY2VudHMgdG8gdHJ5IG1hdGNoaW5nLgorCSAqIFN1ZmZpeCBhY2NlbnRzIGluIHRoZSB0ZXh0IHdpbGwgYmUgZ3JvdXBlZCBhY2NvcmRpbmcgdG8gdGhlaXIgY29tYmluaW5nIAorCSAqIGNsYXNzIGFuZCB0aGUgZ3JvdXBzIHdpbGwgYmUgbWl4ZWQgYW5kIG1hdGNoZWQgdG8gdHJ5IGZpbmQgdGhlIHBlcmZlY3QgCisJICogbWF0Y2ggd2l0aCB0aGUgcGF0dGVybi4KKwkgKiBTbyBmb3IgaW5zdGFuY2UgbG9va2luZyBmb3IgIlx1MDMwMSIgaW4gIlx1MDMwQVx1MDMwMVx1MDMyNSIKKwkgKiBzdGVwIDE6IHNwbGl0ICJcdTAzMEFcdTAzMDEiIGludG8gNiBvdGhlciB0eXBlIG9mIHBvdGVudGlhbCBhY2NlbnQgCisJICogCQkJc3Vic3RyaW5ncworCSAqICAgICAgICAgIlx1MDMwQSIsICJcdTAzMDEiLCAiXHUwMzI1IiwgIlx1MDMwQVx1MDMwMSIsICJcdTAzMEFcdTAzMjUiLCAKKwkgKiAgICAgICAgICJcdTAzMDFcdTAzMjUiLgorCSAqIHN0ZXAgMjogY2hlY2sgaWYgYW55IG9mIHRoZSBnZW5lcmF0ZWQgc3Vic3RyaW5ncyBtYXRjaGVzIHRoZSBwYXR0ZXJuLgorCSAqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgdGhlIGZpcnN0IGJhc2UgY2hhcmFjdGVyCisJICogQHBhcmFtIGVuZCBzdGFydCBvZiB0aGUgbGFzdCBhY2NlbnQgc2V0CisJICogQHJldHVybiBET05FIGlmIGEgbWF0Y2ggaXMgbm90IGZvdW5kLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBlbmRpbmcKKwkgKiAgICAgICAgIG9mZnNldCBvZiB0aGUgbWF0Y2guIE5vdGUgdGhpcyBzdGFydCBpbmNsdWRlcyBhbGwgZm9sbG93aW5nIAorCSAqICAgICAgICAgYWNjZW50cy4KKwkgKi8KKwlwcml2YXRlIGludCBkb1ByZXZpb3VzQ2Fub25pY2FsU3VmZml4TWF0Y2goaW50IHN0YXJ0LCBpbnQgZW5kKQorCXsKKwkgICAgdGFyZ2V0VGV4dC5zZXRJbmRleChlbmQpOworCQlpZiAoVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZSh0YXJnZXRUZXh0LnByZXZpb3VzKCkpIAorCQkJJiYgdGFyZ2V0VGV4dC5nZXRJbmRleCgpID4gbV90ZXh0QmVnaW5PZmZzZXRfKSB7CisJCQlpZiAoIVVURjE2LmlzTGVhZFN1cnJvZ2F0ZSh0YXJnZXRUZXh0LnByZXZpb3VzKCkpKSB7CisJCQkJdGFyZ2V0VGV4dC5uZXh0KCk7CisJCQl9IAorCQl9CisJICAgIGlmICgoZ2V0RkNEKHRhcmdldFRleHQsIHRhcmdldFRleHQuZ2V0SW5kZXgoKSkgJiBMQVNUX0JZVEVfTUFTS18pID09IDApIHsKKwkgICAgICAgIC8vIGRpZS4uLiBmYWlsZWQgYXQgYSBiYXNlIGNoYXJhY3RlcgorCSAgICAgICAgcmV0dXJuIERPTkU7CisJICAgIH0KKwkgICAgZW5kID0gZ2V0TmV4dEJhc2VPZmZzZXQodGFyZ2V0VGV4dCwgZW5kKTsKKwkKKwkgICAgU3RyaW5nQnVmZmVyIGFjY2VudHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJICAgIGludCBvZmZzZXQgPSBnZXRQcmV2aW91c0Jhc2VPZmZzZXQodGFyZ2V0VGV4dCwgZW5kKTsKKwkgICAgLy8gbm9ybWFsaXppbmcgdGhlIG9mZmVuc2l2ZSBzdHJpbmcKKwkgICAgU3RyaW5nIGFjY2VudHN0ciA9IGdldFN0cmluZyh0YXJnZXRUZXh0LCBvZmZzZXQsIGVuZCAtIG9mZnNldCk7CisJICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2soYWNjZW50c3RyLCBOb3JtYWxpemVyLk5GRCkgCisJICAgICAgICAJCQkJCQkJCQkJPT0gTm9ybWFsaXplci5OTykgeworCSAgICAgICAgYWNjZW50c3RyID0gTm9ybWFsaXplci5kZWNvbXBvc2UoYWNjZW50c3RyLCBmYWxzZSk7CisJICAgIH0KKwkgICAgYWNjZW50cy5hcHBlbmQoYWNjZW50c3RyKTsgICAgCisJICAgICAgICAKKwkgICAgaW50IGFjY2VudHNpbmRleFtdID0gbmV3IGludFtJTklUSUFMX0FSUkFZX1NJWkVfXTsgICAgICAKKwkgICAgaW50IGFjY2VudHNpemUgPSBnZXRVbmJsb2NrZWRBY2NlbnRJbmRleChhY2NlbnRzLCBhY2NlbnRzaW5kZXgpOworCSAgICBpbnQgY291bnQgPSAoMiA8PCAoYWNjZW50c2l6ZSAtIDEpKSAtIDI7ICAKKwkgICAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgICAgICAgICAgbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXy5kZWxldGUoMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXy5sZW5ndGgoKSk7CisJICAgICAgICAvLyBjb3B5IHRoZSBiYXNlIGNoYXJhY3RlcnMKKwkgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYWNjZW50c2luZGV4WzBdOyBrICsrKSB7CisJICAgICAgICAgICAgIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18uYXBwZW5kKGFjY2VudHMuY2hhckF0KGspKTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIGZvcm1pbmcgYWxsIHBvc3NpYmxlIGNhbm9uaWNhbCByZWFycmFuZ2VtZW50IGJ5IGRyb3BwaW5nCisJICAgICAgICAvLyBzZXRzIG9mIGFjY2VudHMKKwkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGFjY2VudHNpemUgLSAxOyBpICsrKSB7CisJICAgICAgICAgICAgaW50IG1hc2sgPSAxIDw8IChhY2NlbnRzaXplIC0gaSAtIDEpOworCSAgICAgICAgICAgIGlmICgoY291bnQgJiBtYXNrKSAhPSAwKSB7CisJICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBhY2NlbnRzaW5kZXhbaV07IGogPCBhY2NlbnRzaW5kZXhbaSArIDFdOyAKKwkgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCWogKyspIHsKKwkgICAgICAgICAgICAgICAgICAgIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18uYXBwZW5kKGFjY2VudHMuY2hhckF0KGopKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIFN0cmluZ0J1ZmZlciBtYXRjaCA9IG1lcmdlKG1fY2Fub25pY2FsUHJlZml4QWNjZW50c18sIHRhcmdldFRleHQsCisJICAgICAgICAJCQkJCQkJc3RhcnQsIG9mZnNldCwgCisJICAgICAgICAJCQkJCQkJbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXyk7CisJICAgICAgICAvLyBydW4gdGhlIGNvbGxhdG9yIGl0ZXJhdG9yIHRocm91Z2ggdGhpcyBtYXRjaAorCSAgICAgICAgLy8gaWYgc3RhdHVzIGlzIGEgZmFpbHVyZSB1Y29sX3NldFRleHQgZG9lcyBub3RoaW5nCisJICAgICAgICBtX3V0aWxDb2xFSXRlcl8uc2V0VGV4dChtYXRjaC50b1N0cmluZygpKTsKKwkgICAgICAgIGlmIChjaGVja0NvbGxhdGlvbk1hdGNoKG1fdXRpbENvbEVJdGVyXykpIHsKKwkgICAgICAgICAgICByZXR1cm4gZW5kOworCSAgICAgICAgfQorCSAgICAgICAgY291bnQgLS07CisJICAgIH0KKwkgICAgcmV0dXJuIERPTkU7CisJfQorCQorCS8qKgorCSAqIFRha2UgdGhlIHJlYXJyYW5nZWQgc3RhcnQgYWNjZW50cyBhbmQgdHJpZXMgbWF0Y2hpbmcuIElmIG1hdGNoIGZhaWxlZCBhdAorCSAqIGEgc2VwZXJhdGUgZm9sbG93aW5nIHNldCBvZiBhY2NlbnRzIChzZXBlcmF0ZWQgZnJvbSB0aGUgcmVhcnJhbmdlZCBvbiBieQorCSAqIGF0IGxlYXN0IGEgYmFzZSBjaGFyYWN0ZXIpIHRoZW4gd2UgcmVhcnJhbmdlIHRoZSBwcmVjZWRpbmcgYWNjZW50cyBhbmQgCisJICogdHJpZXMgbWF0Y2hpbmcgYWdhaW4uCisJICogV2UgYWxsb3cgc2tpcHBpbmcgb2YgdGhlIGVuZHMgb2YgdGhlIGFjY2VudCBzZXQgaWYgdGhlIGNlcyBkbyBub3QgbWF0Y2guIAorCSAqIEhvd2V2ZXIgaWYgdGhlIGZhaWx1cmUgaXMgZm91bmQgYmVmb3JlIHRoZSBhY2NlbnQgc2V0LCBpdCBmYWlscy4KKwkgKiBJbnRlcm5hbCBtZXRob2QsIHN0YXR1cyBhc3N1bWVkIHRvIGJlIHN1Y2Nlc3MsIGNhbGxlciBoYXMgdG8gY2hlY2sgCisJICogc3RhdHVzIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgorCSAqIEBwYXJhbSB0ZXh0b2Zmc2V0IG9mIHRoZSBlbmRzIG9mIHRoZSByZWFycmFuZ2VkIGFjY2VudAorCSAqIEByZXR1cm4gRE9ORSBpZiBhIG1hdGNoIGlzIG5vdCBmb3VuZCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgZW5kaW5nIG9mZnNldCAKKwkgKiAJCQlvZiB0aGUgbWF0Y2guIE5vdGUgdGhpcyBzdGFydCBpbmNsdWRlcyBhbGwgZm9sbG93aW5nIGFjY2VudHMuCisJICovCisJcHJpdmF0ZSBpbnQgZG9QcmV2aW91c0Nhbm9uaWNhbFByZWZpeE1hdGNoKGludCB0ZXh0b2Zmc2V0KQorCXsKKwkgICAgaW50IHNhZmVsZW5ndGggPSAwOworCSAgICBTdHJpbmdCdWZmZXIgc2FmZXRleHQ7CisJICAgIGludCBzYWZlb2Zmc2V0ID0gdGV4dG9mZnNldDsKKwkKKwkgICAgaWYgKHRleHRvZmZzZXQgPiBtX3RleHRCZWdpbk9mZnNldF8KKwkgICAgCSYmIG1fY29sbGF0b3JfLmlzVW5zYWZlKG1fY2Fub25pY2FsUHJlZml4QWNjZW50c18uY2hhckF0KAorCSAgICAJCQkJCQkJbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXy5sZW5ndGgoKSAtIDEpKSkgeworCSAgICAgICAgc2FmZW9mZnNldCA9IGdldE5leHRTYWZlT2Zmc2V0KHRleHRvZmZzZXQsIG1fdGV4dExpbWl0T2Zmc2V0Xyk7CisJICAgICAgICBzYWZlbGVuZ3RoID0gc2FmZW9mZnNldCAtIHRleHRvZmZzZXQ7CisJICAgICAgICBzYWZldGV4dCA9IG1lcmdlKG1fY2Fub25pY2FsUHJlZml4QWNjZW50c18sIHRhcmdldFRleHQsIHRleHRvZmZzZXQsIAorCSAgICAgICAgCQkJCSBzYWZlb2Zmc2V0LCBudWxsKTsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICAgIHNhZmV0ZXh0ID0gbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXzsKKwkgICAgfQorCQorCSAgICAvLyBpZiBzdGF0dXMgaXMgYSBmYWlsdXJlLCB1Y29sX3NldFRleHQgZG9lcyBub3RoaW5nCisJICAgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvciBjb2xlaXRlciA9IG1fdXRpbENvbEVJdGVyXzsKKwkgICAgY29sZWl0ZXIuc2V0VGV4dChzYWZldGV4dC50b1N0cmluZygpKTsKKwkgICAgLy8gc3RhdHVzIGNoZWNrZWQgaW4gbG9vcCBiZWxvdworCSAgICAKKwkgICAgaW50IGNlaW5kZXggPSAwOworCSAgICBib29sZWFuIGlzU2FmZSA9IHRydWU7IC8vIHNhZmUgem9uZSBpbmRpY2F0aW9uIGZsYWcgZm9yIHBvc2l0aW9uCisJICAgIGludCBwcmVmaXhsZW5ndGggPSBtX2Nhbm9uaWNhbFByZWZpeEFjY2VudHNfLmxlbmd0aCgpOworCSAgICAKKwkgICAgd2hpbGUgKGNlaW5kZXggPCBtX3BhdHRlcm5fLm1fQ0VMZW5ndGhfKSB7CisJICAgICAgICBpbnQgdGV4dGNlID0gY29sZWl0ZXIubmV4dCgpOworCSAgICAgICAgaWYgKHRleHRjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBwYXNzZWQgdGhlIHNhZmUgYnVmZmVyCisJICAgICAgICAgICAgaWYgKGNvbGVpdGVyID09IG1fY29sRUl0ZXJfKSB7CisJICAgICAgICAgICAgICAgIHJldHVybiBET05FOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAoc2FmZXRleHQgIT0gbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXykgeworCSAgICAgICAgICAgIAlzYWZldGV4dC5kZWxldGUoMCwgc2FmZXRleHQubGVuZ3RoKCkpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBjb2xlaXRlciA9IG1fY29sRUl0ZXJfOworCSAgICAgICAgICAgIGNvbGVpdGVyLnNldEV4YWN0T2Zmc2V0KHNhZmVvZmZzZXQpOworCSAgICAgICAgICAgIC8vIHN0YXR1cyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiB0aGUgbG9vcAorCSAgICAgICAgICAgIGlzU2FmZSA9IGZhbHNlOworCSAgICAgICAgICAgIGNvbnRpbnVlOworCSAgICAgICAgfQorCSAgICAgICAgdGV4dGNlID0gZ2V0Q0UodGV4dGNlKTsKKwkgICAgICAgIGlmICh0ZXh0Y2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSAKKwkgICAgICAgIAkmJiB0ZXh0Y2UgIT0gbV9wYXR0ZXJuXy5tX0NFX1tjZWluZGV4XSkgeworCSAgICAgICAgICAgIC8vIGRvIHRoZSBiZWdpbm5pbmcgc3R1ZmYKKwkgICAgICAgICAgICBpbnQgZmFpbGVkb2Zmc2V0ID0gY29sZWl0ZXIuZ2V0T2Zmc2V0KCk7CisJICAgICAgICAgICAgaWYgKGlzU2FmZSAmJiBmYWlsZWRvZmZzZXQgPD0gcHJlZml4bGVuZ3RoKSB7CisJICAgICAgICAgICAgICAgIC8vIGFsYXMuLi4gbm8gaG9wZS4gZmFpbGVkIGF0IHJlYXJyYW5nZWQgYWNjZW50IHNldAorCSAgICAgICAgICAgICAgICByZXR1cm4gRE9ORTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIGlmIChpc1NhZmUpIHsKKwkgICAgICAgICAgICAgICAgICAgIGZhaWxlZG9mZnNldCA9IHNhZmVvZmZzZXQgLSBmYWlsZWRvZmZzZXQ7CisJICAgICAgICAgICAgICAgICAgICBpZiAoc2FmZXRleHQgIT0gbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXykgeworCSAgICAgICAgICAgIAkJCXNhZmV0ZXh0LmRlbGV0ZSgwLCBzYWZldGV4dC5sZW5ndGgoKSk7CisJICAgICAgICAgICAgCQl9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAgICAgIC8vIHRyeSByZWFycmFuZ2luZyB0aGUgZW5kIGFjY2VudHMKKwkgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGRvUHJldmlvdXNDYW5vbmljYWxTdWZmaXhNYXRjaCh0ZXh0b2Zmc2V0LCAKKwkgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQlmYWlsZWRvZmZzZXQpOworCSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IERPTkUpIHsKKwkgICAgICAgICAgICAgICAgICAgIC8vIGlmIHN0YXR1cyBpcyBhIGZhaWx1cmUsIHVjb2xfc2V0T2Zmc2V0IGRvZXMgbm90aGluZworCSAgICAgICAgICAgICAgICAgICAgbV9jb2xFSXRlcl8uc2V0RXhhY3RPZmZzZXQocmVzdWx0KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0ZXh0Y2UgPT0gbV9wYXR0ZXJuXy5tX0NFX1tjZWluZGV4XSkgeworCSAgICAgICAgICAgIGNlaW5kZXggKys7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgLy8gc2V0IG9mZnNldCBoZXJlCisJICAgIGlmIChpc1NhZmUpIHsKKwkgICAgICAgIGludCByZXN1bHQgPSBjb2xlaXRlci5nZXRPZmZzZXQoKTsKKwkgICAgICAgIC8vIHNldHMgdGhlIHRleHQgaXRlcmF0b3IgaGVyZSB3aXRoIHRoZSBjb3JyZWN0IGV4cGFuc2lvbiBhbmQgb2Zmc2V0CisJICAgICAgICBpbnQgbGVmdG92ZXJjZXMgPSBjb2xlaXRlci5tX0NFQnVmZmVyU2l6ZV8gCisJICAgICAgICAJCQkJCQkJCQktIGNvbGVpdGVyLm1fQ0VCdWZmZXJPZmZzZXRfOworCSAgICAgICAgaWYgKHJlc3VsdCA8PSBwcmVmaXhsZW5ndGgpIHsgCisJICAgICAgICAgICAgcmVzdWx0ID0gdGV4dG9mZnNldDsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHJlc3VsdCA9IHRleHRvZmZzZXQgKyAoc2FmZW9mZnNldCAtIHJlc3VsdCk7CisJICAgICAgICB9CisJICAgICAgICBtX2NvbEVJdGVyXy5zZXRFeGFjdE9mZnNldChyZXN1bHQpOworCSAgICAgICAgbV9jb2xFSXRlcl8ubV9DRUJ1ZmZlck9mZnNldF8gPSBtX2NvbEVJdGVyXy5tX0NFQnVmZmVyU2l6ZV8gCisJICAgICAgICAJCQkJCQkJCQkJCQkJLSBsZWZ0b3ZlcmNlczsKKwkgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH0KKwkgICAgCisJICAgIHJldHVybiBjb2xlaXRlci5nZXRPZmZzZXQoKTsgICAgICAgICAgICAgIAorCX0KKwkKKwkvKioKKwkgKiBUcnlpbmcgb3V0IHRoZSBzdWJzdHJpbmcgYW5kIHNlZXMgaWYgaXQgY2FuIGJlIGEgY2Fub25pY2FsIG1hdGNoLgorCSAqIFRoaXMgd2lsbCB0cnkgbm9ybWFsaXppbmcgdGhlIHN0YXJ0aW5nIGFjY2VudHMgYW5kIGFycmFuZ2luZyB0aGVtIGludG8gCisJICogY2Fub25pY2FsIGVxdWl2YWxlbnRzIGFuZCBjaGVjayB0aGVpciBjb3JyZXNwb25kaW5nIGNlcyB3aXRoIHRoZSBwYXR0ZXJuIAorCSAqIGNlLgorCSAqIFByZWZpeCBhY2NlbnRzIGluIHRoZSB0ZXh0IHdpbGwgYmUgZ3JvdXBlZCBhY2NvcmRpbmcgdG8gdGhlaXIgY29tYmluaW5nIAorCSAqIGNsYXNzIGFuZCB0aGUgZ3JvdXBzIHdpbGwgYmUgbWl4ZWQgYW5kIG1hdGNoZWQgdG8gdHJ5IGZpbmQgdGhlIHBlcmZlY3QgCisJICogbWF0Y2ggd2l0aCB0aGUgcGF0dGVybi4KKwkgKiBTbyBmb3IgaW5zdGFuY2UgbG9va2luZyBmb3IgIlx1MDMwMSIgaW4gIlx1MDMwQVx1MDMwMVx1MDMyNSIKKwkgKiBzdGVwIDE6IHNwbGl0ICJcdTAzMEFcdTAzMDEiIGludG8gNiBvdGhlciB0eXBlIG9mIHBvdGVudGlhbCBhY2NlbnQgCisJICogCQkgICBzdWJzdHJpbmdzCisJICogICAgICAgICAiXHUwMzBBIiwgIlx1MDMwMSIsICJcdTAzMjUiLCAiXHUwMzBBXHUwMzAxIiwgIlx1MDMwQVx1MDMyNSIsIAorCSAqICAgICAgICAgIlx1MDMwMVx1MDMyNSIuCisJICogc3RlcCAyOiBjaGVjayBpZiBhbnkgb2YgdGhlIGdlbmVyYXRlZCBzdWJzdHJpbmdzIG1hdGNoZXMgdGhlIHBhdHRlcm4uCisJICogQHBhcmFtIHRleHRvZmZzZXQgc3RhcnQgb2Zmc2V0IGluIHRoZSBjb2xsYXRpb24gZWxlbWVudCB0ZXh0IHRoYXQgc3RhcnRzIAorCSAqICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGFjY2VudHMgdG8gYmUgcmVhcnJhbmdlZAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWF0Y2ggaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBkb1ByZXZpb3VzQ2Fub25pY2FsTWF0Y2goaW50IHRleHRvZmZzZXQpCisJeworICAgICAgICBpbnQgb2Zmc2V0ID0gbV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCk7CisJICAgIGlmICgoZ2V0RkNEKHRhcmdldFRleHQsIHRleHRvZmZzZXQpID4+IFNFQ09ORF9MQVNUX0JZVEVfU0hJRlRfKSA9PSAwKSB7CisJICAgICAgICBpZiAobV9wYXR0ZXJuXy5tX2hhc1N1ZmZpeEFjY2VudHNfKSB7CisJICAgICAgICAgICAgb2Zmc2V0ID0gZG9QcmV2aW91c0Nhbm9uaWNhbFN1ZmZpeE1hdGNoKHRleHRvZmZzZXQsIG9mZnNldCk7CisJICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBET05FKSB7CisJICAgICAgICAgICAgICAgIG1fY29sRUl0ZXJfLnNldEV4YWN0T2Zmc2V0KG9mZnNldCk7CisJICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCQorCSAgICBpZiAoIW1fcGF0dGVybl8ubV9oYXNQcmVmaXhBY2NlbnRzXykgeworCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisJCisJICAgIFN0cmluZ0J1ZmZlciBhY2NlbnRzID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCSAgICAvLyBvZmZzZXQgdG8gdGhlIGxhc3QgYmFzZSBjaGFyYWN0ZXIgaW4gc3Vic3RyaW5nIHRvIHNlYXJjaAorCSAgICBpbnQgYmFzZW9mZnNldCA9IGdldE5leHRCYXNlT2Zmc2V0KHRhcmdldFRleHQsIHRleHRvZmZzZXQpOworCSAgICAvLyBub3JtYWxpemluZyB0aGUgb2ZmZW5zaXZlIHN0cmluZworCSAgICBTdHJpbmcgdGV4dHN0ciA9IGdldFN0cmluZyh0YXJnZXRUZXh0LCB0ZXh0b2Zmc2V0LCAKKwkgICAgCQkJCQkJCQkJCQliYXNlb2Zmc2V0IC0gdGV4dG9mZnNldCk7CisJICAgIGlmIChOb3JtYWxpemVyLnF1aWNrQ2hlY2sodGV4dHN0ciwgTm9ybWFsaXplci5ORkQpIAorCSAgICAgICAgCQkJCQkJCQkJCT09IE5vcm1hbGl6ZXIuTk8pIHsKKwkgICAgICAgIHRleHRzdHIgPSBOb3JtYWxpemVyLmRlY29tcG9zZSh0ZXh0c3RyLCBmYWxzZSk7CisJICAgIH0KKwkgICAgYWNjZW50cy5hcHBlbmQodGV4dHN0cik7CisJICAgIC8vIHN0YXR1cyBjaGVja2VkIGluIGxvb3AKKwkgICAgICAgIAorCSAgICBpbnQgYWNjZW50c2luZGV4W10gPSBuZXcgaW50W0lOSVRJQUxfQVJSQVlfU0laRV9dOworCSAgICBpbnQgc2l6ZSA9IGdldFVuYmxvY2tlZEFjY2VudEluZGV4KGFjY2VudHMsIGFjY2VudHNpbmRleCk7CisJCisJICAgIC8vIDIgcG93ZXIgbiAtIDEgbWludXMgdGhlIGZ1bGwgc2V0IG9mIGFjY2VudHMKKwkgICAgaW50IGNvdW50ID0gKDIgPDwgKHNpemUgLSAxKSkgLSAyOyAgCisJICAgIHdoaWxlIChjb3VudCA+IDApIHsKKwkgICAgCW1fY2Fub25pY2FsUHJlZml4QWNjZW50c18uZGVsZXRlKDAsIAorCSAgICAJCQkJCQkJCW1fY2Fub25pY2FsUHJlZml4QWNjZW50c18ubGVuZ3RoKCkpOworCSAgICAgICAgLy8gY29weSB0aGUgYmFzZSBjaGFyYWN0ZXJzCisJICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGFjY2VudHNpbmRleFswXTsgayArKykgeworCSAgICAgICAgICAgIG1fY2Fub25pY2FsUHJlZml4QWNjZW50c18uYXBwZW5kKGFjY2VudHMuY2hhckF0KGspKTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIGZvcm1pbmcgYWxsIHBvc3NpYmxlIGNhbm9uaWNhbCByZWFycmFuZ2VtZW50IGJ5IGRyb3BwaW5nCisJICAgICAgICAvLyBzZXRzIG9mIGFjY2VudHMKKwkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHNpemUgLSAxOyBpICsrKSB7CisJICAgICAgICAgICAgaW50IG1hc2sgPSAxIDw8IChzaXplIC0gaSAtIDEpOworCSAgICAgICAgICAgIGlmICgoY291bnQgJiBtYXNrKSAhPSAwKSB7CisJICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBhY2NlbnRzaW5kZXhbaV07IGogPCBhY2NlbnRzaW5kZXhbaSArIDFdOyAKKwkgICAgICAgICAgICAgICAgCSBqICsrKSB7CisJICAgICAgICAgICAgICAgICAgICBtX2Nhbm9uaWNhbFByZWZpeEFjY2VudHNfLmFwcGVuZChhY2NlbnRzLmNoYXJBdChqKSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBvZmZzZXQgPSBkb1ByZXZpb3VzQ2Fub25pY2FsUHJlZml4TWF0Y2goYmFzZW9mZnNldCk7CisJICAgICAgICBpZiAob2Zmc2V0ICE9IERPTkUpIHsKKwkgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gbWF0Y2ggZm91bmQKKwkgICAgICAgIH0KKwkgICAgICAgIGNvdW50IC0tOworCSAgICB9CisJICAgIHJldHVybiBmYWxzZTsKKwl9CisJCisJLyoqCisJICogQ2hlY2tzIG1hdGNoIGZvciBjb250cmFjdGlvbi4gCisJICogSWYgdGhlIG1hdGNoIHN0YXJ0cyB3aXRoIGEgcGFydGlhbCBjb250cmFjdGlvbiB3ZSBmYWlsLgorCSAqIFVzZXMgdGhlIHRlbXBvcmFyeSB1dGlsaXR5IGJ1ZmZlciB0byByZXR1cm4gdGhlIG1vZGlmaWVkIHN0YXJ0IGFuZCBlbmQuCisJICogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBwb3RlbnRpYWwgbWF0Y2gsIHRvIGJlIG1vZGlmaWVkIGlmIG5lY2Vzc2FyeQorCSAqIEBwYXJhbSBlbmQgb2Zmc2V0IG9mIHBvdGVudGlhbCBtYXRjaCwgdG8gYmUgbW9kaWZpZWQgaWYgbmVjZXNzYXJ5CisJICogQHJldHVybiB0cnVlIGlmIG1hdGNoIHBhc3NlcyB0aGUgY29udHJhY3Rpb24gdGVzdCwgZmFsc2Ugb3RoZXJ3aXNlLgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBjaGVja1ByZXZpb3VzQ2Fub25pY2FsQ29udHJhY3Rpb25NYXRjaChpbnQgc3RhcnQsIGludCBlbmQpIAorCXsKKwkgICAgaW50IHRlbXAgPSBlbmQ7CisJICAgIC8vIFRoaXMgcGFydCBjaGVja3MgaWYgZWl0aGVyIGVuZHMgb2YgdGhlIG1hdGNoIGNvbnRhaW5zIHBvdGVudGlhbCAKKwkgICAgLy8gY29udHJhY3Rpb24uIElmIHNvIHdlJ2xsIGhhdmUgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZW0KKwkgICAgY2hhciBlY2hhciA9IDA7CisJICAgIGNoYXIgc2NoYXIgPSAwOworCSAgICBpZiAoZW5kIDwgbV90ZXh0TGltaXRPZmZzZXRfKSB7CisJICAgIAl0YXJnZXRUZXh0LnNldEluZGV4KGVuZCk7CisJICAgIAllY2hhciA9IHRhcmdldFRleHQuY3VycmVudCgpOworCSAgICB9CisJICAgIGlmIChzdGFydCArIDEgPCBtX3RleHRMaW1pdE9mZnNldF8pIHsKKwkgICAgCXRhcmdldFRleHQuc2V0SW5kZXgoc3RhcnQgKyAxKTsKKwkgICAgCXNjaGFyID0gdGFyZ2V0VGV4dC5jdXJyZW50KCk7CisJICAgIH0KKwkgICAgaWYgKG1fY29sbGF0b3JfLmlzVW5zYWZlKGVjaGFyKSB8fCBtX2NvbGxhdG9yXy5pc1Vuc2FmZShzY2hhcikpIHsKKwkgICAgICAgIGludCBleHBhbnNpb24gPSBtX2NvbEVJdGVyXy5tX0NFQnVmZmVyU2l6ZV8gCisJICAgICAgICAJCQkJCQkJCS0gbV9jb2xFSXRlcl8ubV9DRUJ1ZmZlck9mZnNldF87CisJICAgICAgICBib29sZWFuIGhhc0V4cGFuc2lvbiA9IGV4cGFuc2lvbiA+IDA7CisJICAgICAgICBtX2NvbEVJdGVyXy5zZXRFeGFjdE9mZnNldChlbmQpOworCSAgICAgICAgd2hpbGUgKGV4cGFuc2lvbiA+IDApIHsKKwkgICAgICAgICAgICAvLyBnZXR0aW5nIHJpZCBvZiB0aGUgcmVkdW5kYW50IGNlCisJICAgICAgICAgICAgLy8gc2luY2UgZm9yd2FyZCBjb250cmFjdGlvbi9leHBhbnNpb24gbWF5IGhhdmUgZXh0cmEgY2VzCisJICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGluIHRoZSBub3JtYWxpemF0aW9uIGJ1ZmZlciwgaGFzQWNjZW50c0JlZm9yZU1hdGNoCisJICAgICAgICAgICAgLy8gd291bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIGl0LgorCSAgICAgICAgICAgIC8vIEUuZy4gdGhlIGNoYXJhY3RlciBcdTAxRkEgd2lsbCBoYXZlIGFuIGV4cGFuc2lvbiBvZiAzLCBidXQgCisJICAgICAgICAgICAgLy8gaWYgd2UgYXJlIG9ubHkgbG9va2luZyBmb3IgQSByaW5nIEFcdTAzMEEsIHdlJ2xsIGhhdmUgdG8gCisJICAgICAgICAgICAgLy8gc2tpcCB0aGUgbGFzdCBjZSBpbiB0aGUgZXhwYW5zaW9uIGJ1ZmZlcgorCSAgICAgICAgICAgIG1fY29sRUl0ZXJfLnByZXZpb3VzKCk7CisJICAgICAgICAgICAgaWYgKG1fY29sRUl0ZXJfLmdldE9mZnNldCgpICE9IHRlbXApIHsKKwkgICAgICAgICAgICAgICAgZW5kID0gdGVtcDsKKwkgICAgICAgICAgICAgICAgdGVtcCA9IG1fY29sRUl0ZXJfLmdldE9mZnNldCgpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBleHBhbnNpb24gLS07CisJICAgICAgICB9CisJCisJICAgICAgICBpbnQgY291bnQgPSBtX3BhdHRlcm5fLm1fQ0VMZW5ndGhfOworCSAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkgeworCSAgICAgICAgICAgIGludCBjZSA9IGdldENFKG1fY29sRUl0ZXJfLnByZXZpb3VzKCkpOworCSAgICAgICAgICAgIC8vIHN0YXR1cyBjaGVja2VkIGJlbG93LCBub3RlIHRoYXQgaWYgc3RhdHVzIGlzIGEgZmFpbHVyZQorCSAgICAgICAgICAgIC8vIHByZXZpb3VzKCkgcmV0dXJucyBOVUxMT1JERVIKKwkgICAgICAgICAgICBpZiAoY2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGhhc0V4cGFuc2lvbiAmJiBjb3VudCA9PSAwIAorCSAgICAgICAgICAgIAkmJiBtX2NvbEVJdGVyXy5nZXRPZmZzZXQoKSAhPSB0ZW1wKSB7CisJICAgICAgICAgICAgICAgIGVuZCA9IHRlbXA7CisJICAgICAgICAgICAgICAgIHRlbXAgPSBtX2NvbEVJdGVyXy5nZXRPZmZzZXQoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGNvdW50ID09IG1fcGF0dGVybl8ubV9DRUxlbmd0aF8gCisJICAgICAgICAgICAgCSYmIGNlICE9IG1fcGF0dGVybl8ubV9DRV9bbV9wYXR0ZXJuXy5tX0NFTGVuZ3RoXyAtIDFdKSB7CisJICAgICAgICAgICAgICAgIC8vIGFjY2VudHMgbWF5IGhhdmUgZXh0cmEgc3RhcnRpbmcgY2VzLCB0aGlzIG9jY3VycyB3aGVuIGEgCisJICAgICAgICAgICAgICAgIC8vIHB1cmUgYWNjZW50IHBhdHRlcm4gaXMgbWF0Y2hlZCB3aXRob3V0IHJlYXJyYW5nZW1lbnQKKwkgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkID0gbV9wYXR0ZXJuXy5tX0NFX1ttX3BhdHRlcm5fLm1fQ0VMZW5ndGhfIC0gMV07CisJICAgICAgICAgICAgICAgIHRhcmdldFRleHQuc2V0SW5kZXgoZW5kKTsKKwkgICAgICAgICAgICAgICAgaWYgKFVURjE2LmlzVHJhaWxTdXJyb2dhdGUodGFyZ2V0VGV4dC5wcmV2aW91cygpKSkgeworCSAgICAgICAgICAgICAgICAJaWYgKHRhcmdldFRleHQuZ2V0SW5kZXgoKSA+IG1fdGV4dEJlZ2luT2Zmc2V0XyAmJgorCSAgICAgICAgICAgICAgICAJCSFVVEYxNi5pc0xlYWRTdXJyb2dhdGUodGFyZ2V0VGV4dC5wcmV2aW91cygpKSkgeworCSAgICAgICAgICAgICAgICAJCXRhcmdldFRleHQubmV4dCgpOworCSAgICAgICAgICAgICAgICAJfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVuZCA9IHRhcmdldFRleHQuZ2V0SW5kZXgoKTsKKwkgICAgICAgICAgICAgICAgaWYgKChnZXRGQ0QodGFyZ2V0VGV4dCwgZW5kKSAmIExBU1RfQllURV9NQVNLXykgIT0gMCkgeworCSAgICAgICAgICAgICAgICAgICAgY2UgPSBnZXRDRShtX2NvbEVJdGVyXy5wcmV2aW91cygpKTsKKwkgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjZSAhPSBleHBlY3RlZCAKKwkgICAgICAgICAgICAgICAgICAgIAkJJiYgY2UgIT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiAKKwkgICAgICAgICAgICAgICAgICAgIAkJJiYgbV9jb2xFSXRlcl8uZ2V0T2Zmc2V0KCkgPD0gc3RhcnQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjZSA9IGdldENFKG1fY29sRUl0ZXJfLnByZXZpb3VzKCkpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChjZSAhPSBtX3BhdHRlcm5fLm1fQ0VfW2NvdW50IC0gMV0pIHsKKwkgICAgICAgICAgICAgICAgc3RhcnQgLS07CisJICAgICAgICAgICAgICAgIHN0YXJ0ID0gZ2V0UHJldmlvdXNCYXNlT2Zmc2V0KHN0YXJ0KTsKKwkgICAgICAgICAgICAgICAgbV91dGlsQnVmZmVyX1swXSA9IHN0YXJ0OworCSAgICAgICAgICAgICAgICBtX3V0aWxCdWZmZXJfWzFdID0gZW5kOworCSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGNvdW50IC0tOworCSAgICAgICAgfQorCSAgICB9IAorCSAgICBtX3V0aWxCdWZmZXJfWzBdID0gc3RhcnQ7CisJICAgIG1fdXRpbEJ1ZmZlcl9bMV0gPSBlbmQ7CisJICAgIHJldHVybiB0cnVlOworCX0KKwkKKwkvKioKKwkgKiBDaGVja3MgYW5kIHNldHMgdGhlIG1hdGNoIGluZm9ybWF0aW9uIGlmIGZvdW5kLgorCSAqIENoZWNrcyAKKwkgKiA8dWw+CisJICogPGxpPiB0aGUgcG90ZW50aWFsIG1hdGNoIGRvZXMgbm90IHJlcGVhdCB0aGUgcHJldmlvdXMgbWF0Y2gKKwkgKiA8bGk+IGJvdW5kYXJpZXMgYXJlIGNvcnJlY3QKKwkgKiA8bGk+IHBvdGVudGlhbCBtYXRjaCBkb2VzIG5vdCBlbmQgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbnRyYWN0aW9uCisJICogPGxpPiBpZGVudGljYWwgbWF0Y2hlcworCSAqIDwvdWw+CisJICogT3RoZXJ3aXNlIHRoZSBvZmZzZXQgd2lsbCBiZSBzaGlmdGVkIHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4KKwkgKiBVc2VzIHRoZSB0ZW1wb3JhcnkgdXRpbGl0eSBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIG1vZGlmaWVkIHRleHRvZmZzZXQuCisJICogQHBhcmFtIHRleHRvZmZzZXQgb2Zmc2V0IGluIHRoZSBjb2xsYXRpb24gZWxlbWVudCB0ZXh0LiB0aGUgcmV0dXJuZWQgCisJICogCQkJdmFsdWUgd2lsbCBiZSB0aGUgdHJ1bmNhdGVkIHN0YXJ0IG9mZnNldCBvZiB0aGUgbWF0Y2ggb3IgdGhlIAorCSAqIAkJCW5ldyBzdGFydCBzZWFyY2ggb2Zmc2V0LgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWF0Y2ggaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBjaGVja1ByZXZpb3VzQ2Fub25pY2FsTWF0Y2goaW50IHRleHRvZmZzZXQpCisJeworCSAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZHMgYXJlIG5vdCBjb21wb3NpdGUgY2hhcmFjdGVycworCSAgICAvLyBpZiB3ZSBoYXZlIGEgY2Fub25pY2FsIGFjY2VudCBtYXRjaAorCSAgICBpZiAobV9wYXR0ZXJuXy5tX2hhc1N1ZmZpeEFjY2VudHNfIAorCSAgICAJJiYgbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXy5sZW5ndGgoKSAhPSAwIAorCSAgICAJfHwgbV9wYXR0ZXJuXy5tX2hhc1ByZWZpeEFjY2VudHNfIAorCSAgICAJJiYgbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXy5sZW5ndGgoKSAhPSAwKSB7CisJICAgICAgICBtX21hdGNoZWRJbmRleF8gPSB0ZXh0b2Zmc2V0OworCSAgICAgICAgbWF0Y2hMZW5ndGggPSBnZXROZXh0QmFzZU9mZnNldChtX2NvbEVJdGVyXy5nZXRPZmZzZXQoKSkgCisJICAgICAgICAgICAgCQkJCQkJCQkJCQkJLSB0ZXh0b2Zmc2V0OworCSAgICAgICAgcmV0dXJuIHRydWU7CisJICAgIH0KKwkKKwkgICAgaW50IGVuZCA9IG1fY29sRUl0ZXJfLmdldE9mZnNldCgpOworCSAgICBpZiAoIWNoZWNrUHJldmlvdXNDYW5vbmljYWxDb250cmFjdGlvbk1hdGNoKHRleHRvZmZzZXQsIGVuZCkpIHsKKwkgICAgCS8vIHN0b3JpbmcgdGhlIG1vZGlmaWVkIHRleHRvZmZzZXQKKwkgICAgCXJldHVybiBmYWxzZTsKKwkgICAgfQorCSAgICB0ZXh0b2Zmc2V0ID0gbV91dGlsQnVmZmVyX1swXTsKKwkJZW5kID0gbV91dGlsQnVmZmVyX1sxXTsKKwkgICAgZW5kID0gZ2V0TmV4dEJhc2VPZmZzZXQoZW5kKTsKKwkgICAgLy8gdGhpcyB0b3RhbGx5IG1hdGNoZXMsIGhvd2V2ZXIgd2UgbmVlZCB0byBjaGVjayBpZiBpdCBpcyByZXBlYXRpbmcKKwkgICAgaWYgKGNoZWNrUmVwZWF0ZWRNYXRjaCh0ZXh0b2Zmc2V0LCBlbmQpIAorCSAgICAJfHwgIWlzQnJlYWtVbml0KHRleHRvZmZzZXQsIGVuZCkgCisJICAgIAl8fCAhY2hlY2tJZGVudGljYWwodGV4dG9mZnNldCwgZW5kKSkgeworCSAgICAgICAgdGV4dG9mZnNldCAtLTsKKwkgICAgICAgIHRleHRvZmZzZXQgPSBnZXRQcmV2aW91c0Jhc2VPZmZzZXQodGV4dG9mZnNldCk7CisJICAgICAgICBtX3V0aWxCdWZmZXJfWzBdID0gdGV4dG9mZnNldDsKKwkgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCSAgICAKKwkgICAgbV9tYXRjaGVkSW5kZXhfID0gdGV4dG9mZnNldDsKKwkgICAgbWF0Y2hMZW5ndGggPSBlbmQgLSB0ZXh0b2Zmc2V0OworCSAgICByZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogTWV0aG9kIHRoYXQgZG9lcyB0aGUgbmV4dCBleGFjdCBtYXRjaAorCSAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IHRvIHN0YXJ0IHNoaWZ0aW5nIGZyb20gYW5kIHBlcmZvcm1pbmcgdGhlIAorCSAqICAgICAgICBuZXh0IGV4YWN0IG1hdGNoCisJICovCisJcHJpdmF0ZSB2b2lkIGhhbmRsZU5leHRFeGFjdChpbnQgc3RhcnQpCisJeworCSAgIAlpbnQgdGV4dG9mZnNldCA9IHNoaWZ0Rm9yd2FyZChzdGFydCwgCisJICAgCQkJCQkJCQkgIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIsCisJICAgCQkJCQkJCQkgIG1fcGF0dGVybl8ubV9DRUxlbmd0aF8pOworCQlpbnQgdGFyZ2V0Y2UgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFOworCSAgICB3aGlsZSAodGV4dG9mZnNldCA8PSBtX3RleHRMaW1pdE9mZnNldF8pIHsKKyAgICAgICAgICAgIG1fY29sRUl0ZXJfLnNldEV4YWN0T2Zmc2V0KHRleHRvZmZzZXQpOworCSAgICAgICAgaW50IHBhdHRlcm5jZWluZGV4ID0gbV9wYXR0ZXJuXy5tX0NFTGVuZ3RoXyAtIDE7CisJICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CisJICAgICAgICBpbnQgbGFzdGNlID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUjsKKwkgICAgICAgIAorCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICAvLyBmaW5kaW5nIHRoZSBsYXN0IHBhdHRlcm4gY2UgbWF0Y2gsIGltYWdpbmUgY29tcG9zaXRlIAorCSAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMuIGZvciBleGFtcGxlOiBzZWFyY2ggZm9yIHBhdHRlcm4gQSBpbiB0ZXh0IFx1MDBDMAorCSAgICAgICAgICAgIC8vIHdlJ2xsIGhhdmUgdG8gc2tpcCBcdTAzMDAgdGhlIGdyYXZlIGZpcnN0IGJlZm9yZSB3ZSBnZXQgdG8gQQorCSAgICAgICAgICAgIHRhcmdldGNlID0gbV9jb2xFSXRlcl8ucHJldmlvdXMoKTsKKwkgICAgICAgICAgICBpZiAodGFyZ2V0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGFyZ2V0Y2UgPSBnZXRDRSh0YXJnZXRjZSk7CisJICAgICAgICAgICAgaWYgKHRhcmdldGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUgJiYgCisJICAgICAgICAgICAgCW1fY29sRUl0ZXJfLmlzSW5CdWZmZXIoKSkgeyAKKwkgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBmb3IgdGhlIHRleHQgXHUwMzE1XHUwMzAwIHRoYXQgcmVxdWlyZXMgCisJICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6YXRpb24gYW5kIHBhdHRlcm4gXHUwMzAwLCB3aGVyZSBcdTAzMTUgaXMgaWdub3JhYmxlCisJICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAobGFzdGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIgCisJICAgICAgICAgICAgCXx8IGxhc3RjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisJICAgICAgICAgICAgICAgIGxhc3RjZSA9IHRhcmdldGNlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAodGFyZ2V0Y2UgPT0gbV9wYXR0ZXJuXy5tX0NFX1twYXR0ZXJuY2VpbmRleF0pIHsKKwkgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGNlIGNhbiBiZSBhIGNvbnRyYWN0aW9uCisJICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChtX2NvbEVJdGVyXy5tX0NFQnVmZmVyT2Zmc2V0XyA8PSAwKSB7CisJICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkKKwkgICAgICAgIHRhcmdldGNlID0gbGFzdGNlOworCSAgICAgICAgCisJICAgICAgICB3aGlsZSAoZm91bmQgJiYgcGF0dGVybmNlaW5kZXggPiAwKSB7CisJICAgICAgICAgICAgdGFyZ2V0Y2UgPSBtX2NvbEVJdGVyXy5wcmV2aW91cygpOworCSAgICAgICAgICAgIGlmICh0YXJnZXRjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB0YXJnZXRjZSA9IGdldENFKHRhcmdldGNlKTsKKwkgICAgICAgICAgICBpZiAodGFyZ2V0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgICAgICB9CisJCisJICAgICAgICAgICAgcGF0dGVybmNlaW5kZXggLS07CisJICAgICAgICAgICAgZm91bmQgPSBmb3VuZCAmJiB0YXJnZXRjZSA9PSBtX3BhdHRlcm5fLm1fQ0VfW3BhdHRlcm5jZWluZGV4XTsgCisJICAgICAgICB9CisJCisJICAgICAgICBpZiAoIWZvdW5kKSB7CisJICAgICAgICAgICAgdGV4dG9mZnNldCA9IHNoaWZ0Rm9yd2FyZCh0ZXh0b2Zmc2V0LCB0YXJnZXRjZSwgCisJICAgICAgICAgICAgCQkJCQkJCQkJCQlwYXR0ZXJuY2VpbmRleCk7CisJICAgICAgICAgICAgLy8gc3RhdHVzIGNoZWNrZWQgYXQgbG9vcC4KKwkgICAgICAgICAgICBwYXR0ZXJuY2VpbmRleCA9IG1fcGF0dGVybl8ubV9DRUxlbmd0aF87CisJICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICB9CisJICAgICAgICAKKwkgICAgICAgIGlmIChjaGVja05leHRFeGFjdE1hdGNoKHRleHRvZmZzZXQpKSB7CisJICAgICAgICAgICAgLy8gc3RhdHVzIGNoZWNrZWQgaW4gdWNvbF9zZXRPZmZzZXQKKwkgICAgICAgICAgICByZXR1cm47CisJICAgICAgICB9CisJICAgICAgICB0ZXh0b2Zmc2V0ID0gbV91dGlsQnVmZmVyX1swXTsKKwkgICAgfQorCSAgICBzZXRNYXRjaE5vdEZvdW5kKCk7CisJfQorCisJLyoqCisJICogTWV0aG9kIHRoYXQgZG9lcyB0aGUgbmV4dCBjYW5vbmljYWwgbWF0Y2gKKwkgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCB0byBzdGFydCBzaGlmdGluZyBmcm9tIGFuZCBwZXJmb3JtaW5nIHRoZSAKKwkgKiAgICAgICAgbmV4dCBjYW5vbmljYWwgbWF0Y2gKKwkgKi8KKwlwcml2YXRlIHZvaWQgaGFuZGxlTmV4dENhbm9uaWNhbChpbnQgc3RhcnQpCisJeworCSAgICBib29sZWFuIGhhc1BhdHRlcm5BY2NlbnRzID0gCisJICAgICAgIG1fcGF0dGVybl8ubV9oYXNTdWZmaXhBY2NlbnRzXyB8fCBtX3BhdHRlcm5fLm1faGFzUHJlZml4QWNjZW50c187CisJICAgICAgICAgIAorCSAgICAvLyBzaGlmdGluZyBpdCBjaGVjayBmb3Igc2V0dGluZyBvZmZzZXQKKwkgICAgLy8gaWYgc2V0T2Zmc2V0IGlzIGNhbGxlZCBwcmV2aW91c2x5IG9yIHRoZXJlIHdhcyBubyBwcmV2aW91cyBtYXRjaCwgd2UKKwkgICAgLy8gbGVhdmUgdGhlIG9mZnNldCBhcyBpdCBpcy4KKwkgICAgaW50IHRleHRvZmZzZXQgPSBzaGlmdEZvcndhcmQoc3RhcnQsIENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkgIG1fcGF0dGVybl8ubV9DRUxlbmd0aF8pOworCSAgICBtX2Nhbm9uaWNhbFByZWZpeEFjY2VudHNfLmRlbGV0ZSgwLCBtX2Nhbm9uaWNhbFByZWZpeEFjY2VudHNfLmxlbmd0aCgpKTsKKwkgICAgbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXy5kZWxldGUoMCwgbV9jYW5vbmljYWxTdWZmaXhBY2NlbnRzXy5sZW5ndGgoKSk7CisJCWludCB0YXJnZXRjZSA9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEU7CisJICAgIAorCSAgICB3aGlsZSAodGV4dG9mZnNldCA8PSBtX3RleHRMaW1pdE9mZnNldF8pCisJICAgIHsKKwkgICAgCW1fY29sRUl0ZXJfLnNldEV4YWN0T2Zmc2V0KHRleHRvZmZzZXQpOworCSAgICAgICAgaW50IHBhdHRlcm5jZWluZGV4ID0gbV9wYXR0ZXJuXy5tX0NFTGVuZ3RoXyAtIDE7CisJICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CisJICAgICAgICBpbnQgbGFzdGNlID0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUjsKKwkgICAgICAgIAorCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICAvLyBmaW5kaW5nIHRoZSBsYXN0IHBhdHRlcm4gY2UgbWF0Y2gsIGltYWdpbmUgY29tcG9zaXRlIGNoYXJhY3RlcnMKKwkgICAgICAgICAgICAvLyBmb3IgZXhhbXBsZTogc2VhcmNoIGZvciBwYXR0ZXJuIEEgaW4gdGV4dCBcdTAwQzAKKwkgICAgICAgICAgICAvLyB3ZSdsbCBoYXZlIHRvIHNraXAgXHUwMzAwIHRoZSBncmF2ZSBmaXJzdCBiZWZvcmUgd2UgZ2V0IHRvIEEKKwkgICAgICAgICAgICB0YXJnZXRjZSA9IG1fY29sRUl0ZXJfLnByZXZpb3VzKCk7CisJICAgICAgICAgICAgaWYgKHRhcmdldGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHRhcmdldGNlID0gZ2V0Q0UodGFyZ2V0Y2UpOworCSAgICAgICAgICAgIGlmIChsYXN0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiAKKwkgICAgICAgICAgICAJCQl8fCBsYXN0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAgICAgICBsYXN0Y2UgPSB0YXJnZXRjZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKHRhcmdldGNlID09IG1fcGF0dGVybl8ubV9DRV9bcGF0dGVybmNlaW5kZXhdKSB7CisJICAgICAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBjZSBjYW4gYmUgYSBjb250cmFjdGlvbgorCSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAobV9jb2xFSXRlcl8ubV9DRUJ1ZmZlck9mZnNldF8gPD0gMCkgeworCSAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0YXJnZXRjZSA9IGxhc3RjZTsKKwkgICAgICAgIAorCSAgICAgICAgd2hpbGUgKGZvdW5kICYmIHBhdHRlcm5jZWluZGV4ID4gMCkgeworCSAgICAgICAgICAgIHRhcmdldGNlICAgID0gbV9jb2xFSXRlcl8ucHJldmlvdXMoKTsKKwkgICAgICAgICAgICBpZiAodGFyZ2V0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGFyZ2V0Y2UgICAgPSBnZXRDRSh0YXJnZXRjZSk7CisJICAgICAgICAgICAgaWYgKHRhcmdldGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICAgICAgfQorCQorCSAgICAgICAgICAgIHBhdHRlcm5jZWluZGV4IC0tOworCSAgICAgICAgICAgIGZvdW5kID0gZm91bmQgJiYgdGFyZ2V0Y2UgPT0gbV9wYXR0ZXJuXy5tX0NFX1twYXR0ZXJuY2VpbmRleF07IAorCSAgICAgICAgfQorCQorCSAgICAgICAgLy8gaW5pdGlhbGl6aW5nIHRoZSByZWFycmFuZ2VkIGFjY2VudCBhcnJheQorCSAgICAgICAgaWYgKGhhc1BhdHRlcm5BY2NlbnRzICYmICFmb3VuZCkgeworCSAgICAgICAgICAgIGZvdW5kID0gZG9OZXh0Q2Fub25pY2FsTWF0Y2godGV4dG9mZnNldCk7CisJICAgICAgICB9CisJCisJICAgICAgICBpZiAoIWZvdW5kKSB7CisJICAgICAgICAgICAgdGV4dG9mZnNldCA9IHNoaWZ0Rm9yd2FyZCh0ZXh0b2Zmc2V0LCB0YXJnZXRjZSwgcGF0dGVybmNlaW5kZXgpOworCSAgICAgICAgICAgIC8vIHN0YXR1cyBjaGVja2VkIGF0IGxvb3AKKwkgICAgICAgICAgICBwYXR0ZXJuY2VpbmRleCA9IG1fcGF0dGVybl8ubV9DRUxlbmd0aF87CisJICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICB9CisJICAgICAgICAKKwkgICAgICAgIGlmIChjaGVja05leHRDYW5vbmljYWxNYXRjaCh0ZXh0b2Zmc2V0KSkgeworCSAgICAgICAgICAgIHJldHVybjsKKwkgICAgICAgIH0KKwkgICAgICAgIHRleHRvZmZzZXQgPSBtX3V0aWxCdWZmZXJfWzBdOworCSAgICB9CisJICAgIHNldE1hdGNoTm90Rm91bmQoKTsKKwl9CisJCisJLyoqCisJICogTWV0aG9kIHRoYXQgZG9lcyB0aGUgcHJldmlvdXMgZXhhY3QgbWF0Y2gKKwkgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCB0byBzdGFydCBzaGlmdGluZyBmcm9tIGFuZCBwZXJmb3JtaW5nIHRoZSAKKwkgKiAgICAgICAgcHJldmlvdXMgZXhhY3QgbWF0Y2gKKwkgKi8KKwlwcml2YXRlIHZvaWQgaGFuZGxlUHJldmlvdXNFeGFjdChpbnQgc3RhcnQpCisJeworCSAgICBpbnQgdGV4dG9mZnNldCA9IHJldmVyc2VTaGlmdChzdGFydCwgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGF0dGVybl8ubV9DRUxlbmd0aF8pOworCSAgICB3aGlsZSAodGV4dG9mZnNldCA+PSBtX3RleHRCZWdpbk9mZnNldF8pCisJICAgIHsKKwkgICAgCW1fY29sRUl0ZXJfLnNldEV4YWN0T2Zmc2V0KHRleHRvZmZzZXQpOworCSAgICAgICAgaW50IHBhdHRlcm5jZWluZGV4ID0gMTsKKwkgICAgICAgIGludCB0YXJnZXRjZSA9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEU7CisJICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CisJICAgICAgICBpbnQgZmlyc3RjZSA9IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVI7CisJICAgICAgICAKKwkgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAgICAgICAgLy8gZmluZGluZyB0aGUgZmlyc3QgcGF0dGVybiBjZSBtYXRjaCwgaW1hZ2luZSBjb21wb3NpdGUgCisJICAgICAgICAgICAgLy8gY2hhcmFjdGVycy4gZm9yIGV4YW1wbGU6IHNlYXJjaCBmb3IgcGF0dGVybiBcdTAzMDAgaW4gdGV4dCAKKwkgICAgICAgICAgICAvLyBcdTAwQzAsIHdlJ2xsIGhhdmUgdG8gc2tpcCBBIGZpcnN0IGJlZm9yZSB3ZSBnZXQgdG8gCisJICAgICAgICAgICAgLy8gXHUwMzAwIHRoZSBncmF2ZSBhY2NlbnQKKwkgICAgICAgICAgICB0YXJnZXRjZSA9IG1fY29sRUl0ZXJfLm5leHQoKTsKKwkgICAgICAgICAgICBpZiAodGFyZ2V0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGFyZ2V0Y2UgPSBnZXRDRSh0YXJnZXRjZSk7CisJICAgICAgICAgICAgaWYgKGZpcnN0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiAKKwkgICAgICAgICAgICAJfHwgZmlyc3RjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFKSB7CisJICAgICAgICAgICAgICAgIGZpcnN0Y2UgPSB0YXJnZXRjZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKHRhcmdldGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICAgICAgfSAgICAgICAgIAorCSAgICAgICAgICAgIGlmICh0YXJnZXRjZSA9PSBtX3BhdHRlcm5fLm1fQ0VfWzBdKSB7CisJICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChtX2NvbEVJdGVyXy5tX0NFQnVmZmVyT2Zmc2V0XyA9PSAtMSAKKwkgICAgICAgICAgICAJfHwgbV9jb2xFSXRlcl8ubV9DRUJ1ZmZlck9mZnNldF8gCisJICAgICAgICAgICAgCQkJCQkJCT09IG1fY29sRUl0ZXJfLm1fQ0VCdWZmZXJTaXplXykgeworCSAgICAgICAgICAgICAgICAvLyBjaGVja2luZyBmb3IgYWNjZW50cyBpbiBjb21wb3NpdGUgY2hhcmFjdGVyCisJICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkKKwkgICAgICAgIHRhcmdldGNlID0gZmlyc3RjZTsKKwkgICAgICAgIAorCSAgICAgICAgd2hpbGUgKGZvdW5kICYmIHBhdHRlcm5jZWluZGV4IDwgbV9wYXR0ZXJuXy5tX0NFTGVuZ3RoXykgeworCSAgICAgICAgICAgIHRhcmdldGNlID0gbV9jb2xFSXRlcl8ubmV4dCgpOworCSAgICAgICAgICAgIGlmICh0YXJnZXRjZSA9PSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSKSB7CisJICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB0YXJnZXRjZSA9IGdldENFKHRhcmdldGNlKTsKKwkgICAgICAgICAgICBpZiAodGFyZ2V0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgICAgICB9CisJCisJICAgICAgICAgICAgZm91bmQgPSBmb3VuZCAmJiB0YXJnZXRjZSA9PSBtX3BhdHRlcm5fLm1fQ0VfW3BhdHRlcm5jZWluZGV4XTsgCisJICAgICAgICAgICAgcGF0dGVybmNlaW5kZXggKys7CisJICAgICAgICB9CisJCisJICAgICAgICBpZiAoIWZvdW5kKSB7CisJICAgICAgICAgICAgdGV4dG9mZnNldCA9IHJldmVyc2VTaGlmdCh0ZXh0b2Zmc2V0LCB0YXJnZXRjZSwgcGF0dGVybmNlaW5kZXgpOworCSAgICAgICAgICAgIHBhdHRlcm5jZWluZGV4ID0gMDsKKwkgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgICAgIH0KKwkgICAgICAgIAorCSAgICAgICAgaWYgKGNoZWNrUHJldmlvdXNFeGFjdE1hdGNoKHRleHRvZmZzZXQpKSB7CisJICAgICAgICAgICAgcmV0dXJuOworCSAgICAgICAgfQorCSAgICAgICAgdGV4dG9mZnNldCA9IG1fdXRpbEJ1ZmZlcl9bMF07CisJICAgIH0KKwkgICAgc2V0TWF0Y2hOb3RGb3VuZCgpOworCX0KKwkKKwkvKioKKwkgKiBNZXRob2QgdGhhdCBkb2VzIHRoZSBwcmV2aW91cyBjYW5vbmljYWwgbWF0Y2gKKwkgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCB0byBzdGFydCBzaGlmdGluZyBmcm9tIGFuZCBwZXJmb3JtaW5nIHRoZSAKKwkgKiAgICAgICAgcHJldmlvdXMgY2Fub25pY2FsIG1hdGNoCisJICovCisJcHJpdmF0ZSB2b2lkIGhhbmRsZVByZXZpb3VzQ2Fub25pY2FsKGludCBzdGFydCkKKwl7CisJICAgIGJvb2xlYW4gaGFzUGF0dGVybkFjY2VudHMgPSAKKwkgICAgICAgbV9wYXR0ZXJuXy5tX2hhc1N1ZmZpeEFjY2VudHNfIHx8IG1fcGF0dGVybl8ubV9oYXNQcmVmaXhBY2NlbnRzXzsKKwkgICAgICAgICAgCisJICAgIC8vIHNoaWZ0aW5nIGl0IGNoZWNrIGZvciBzZXR0aW5nIG9mZnNldAorCSAgICAvLyBpZiBzZXRPZmZzZXQgaXMgY2FsbGVkIHByZXZpb3VzbHkgb3IgdGhlcmUgd2FzIG5vIHByZXZpb3VzIG1hdGNoLCB3ZQorCSAgICAvLyBsZWF2ZSB0aGUgb2Zmc2V0IGFzIGl0IGlzLgorCSAgICBpbnQgdGV4dG9mZnNldCA9IHJldmVyc2VTaGlmdChzdGFydCwgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUiwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQltX3BhdHRlcm5fLm1fQ0VMZW5ndGhfKTsKKwkgICAgbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXy5kZWxldGUoMCwgbV9jYW5vbmljYWxQcmVmaXhBY2NlbnRzXy5sZW5ndGgoKSk7CisJICAgIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18uZGVsZXRlKDAsIG1fY2Fub25pY2FsU3VmZml4QWNjZW50c18ubGVuZ3RoKCkpOworCSAgICAKKwkgICAgd2hpbGUgKHRleHRvZmZzZXQgPj0gbV90ZXh0QmVnaW5PZmZzZXRfKQorCSAgICB7CisJICAgIAltX2NvbEVJdGVyXy5zZXRFeGFjdE9mZnNldCh0ZXh0b2Zmc2V0KTsKKwkgICAgICAgIGludCBwYXR0ZXJuY2VpbmRleCA9IDE7CisJICAgICAgICBpbnQgdGFyZ2V0Y2UgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuSUdOT1JBQkxFOworCSAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOworCSAgICAgICAgaW50IGZpcnN0Y2UgPSBDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IuTlVMTE9SREVSOworCSAgICAgICAgCisJICAgICAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAgICAgICAgIC8vIGZpbmRpbmcgdGhlIGZpcnN0IHBhdHRlcm4gY2UgbWF0Y2gsIGltYWdpbmUgY29tcG9zaXRlIAorCSAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMuIGZvciBleGFtcGxlOiBzZWFyY2ggZm9yIHBhdHRlcm4gXHUwMzAwIGluIHRleHQgCisJICAgICAgICAgICAgLy8gXHUwMEMwLCB3ZSdsbCBoYXZlIHRvIHNraXAgQSBmaXJzdCBiZWZvcmUgd2UgZ2V0IHRvIAorCSAgICAgICAgICAgIC8vIFx1MDMwMCB0aGUgZ3JhdmUgYWNjZW50CisJICAgICAgICAgICAgdGFyZ2V0Y2UgPSBtX2NvbEVJdGVyXy5uZXh0KCk7CisJICAgICAgICAgICAgaWYgKHRhcmdldGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIpIHsKKwkgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHRhcmdldGNlID0gZ2V0Q0UodGFyZ2V0Y2UpOworCSAgICAgICAgICAgIGlmIChmaXJzdGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5OVUxMT1JERVIgCisJICAgICAgICAgICAgCXx8IGZpcnN0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLklHTk9SQUJMRSkgeworCSAgICAgICAgICAgICAgICBmaXJzdGNlID0gdGFyZ2V0Y2U7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIAorCSAgICAgICAgICAgIGlmICh0YXJnZXRjZSA9PSBtX3BhdHRlcm5fLm1fQ0VfWzBdKSB7CisJICAgICAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBjZSBjYW4gYmUgYSBjb250cmFjdGlvbgorCSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAobV9jb2xFSXRlcl8ubV9DRUJ1ZmZlck9mZnNldF8gPT0gLTEgCisJICAgICAgICAgICAgCXx8IG1fY29sRUl0ZXJfLm1fQ0VCdWZmZXJPZmZzZXRfIAorCSAgICAgICAgICAgIAkJCQkJCQk9PSBtX2NvbEVJdGVyXy5tX0NFQnVmZmVyU2l6ZV8pIHsKKwkgICAgICAgICAgICAgICAgLy8gY2hlY2tpbmcgZm9yIGFjY2VudHMgaW4gY29tcG9zaXRlIGNoYXJhY3RlcgorCSAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJCisJICAgICAgICB0YXJnZXRjZSA9IGZpcnN0Y2U7CisJICAgICAgICAKKwkgICAgICAgIHdoaWxlIChmb3VuZCAmJiBwYXR0ZXJuY2VpbmRleCA8IG1fcGF0dGVybl8ubV9DRUxlbmd0aF8pIHsKKwkgICAgICAgICAgICB0YXJnZXRjZSA9IG1fY29sRUl0ZXJfLm5leHQoKTsKKwkgICAgICAgICAgICBpZiAodGFyZ2V0Y2UgPT0gQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yLk5VTExPUkRFUikgeworCSAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGFyZ2V0Y2UgPSBnZXRDRSh0YXJnZXRjZSk7CisJICAgICAgICAgICAgaWYgKHRhcmdldGNlID09IENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvci5JR05PUkFCTEUpIHsKKwkgICAgICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICAgICAgfQorCQorCSAgICAgICAgICAgIGZvdW5kID0gZm91bmQgJiYgdGFyZ2V0Y2UgPT0gbV9wYXR0ZXJuXy5tX0NFX1twYXR0ZXJuY2VpbmRleF07IAorCSAgICAgICAgICAgIHBhdHRlcm5jZWluZGV4ICsrOworCSAgICAgICAgfQorCQorCSAgICAgICAgLy8gaW5pdGlhbGl6aW5nIHRoZSByZWFycmFuZ2VkIGFjY2VudCBhcnJheQorCSAgICAgICAgaWYgKGhhc1BhdHRlcm5BY2NlbnRzICYmICFmb3VuZCkgeworCSAgICAgICAgICAgIGZvdW5kID0gZG9QcmV2aW91c0Nhbm9uaWNhbE1hdGNoKHRleHRvZmZzZXQpOworCSAgICAgICAgfQorCQorCSAgICAgICAgaWYgKCFmb3VuZCkgeworCSAgICAgICAgICAgIHRleHRvZmZzZXQgPSByZXZlcnNlU2hpZnQodGV4dG9mZnNldCwgdGFyZ2V0Y2UsIHBhdHRlcm5jZWluZGV4KTsKKwkgICAgICAgICAgICBwYXR0ZXJuY2VpbmRleCA9IDA7CisJICAgICAgICAgICAgY29udGludWU7CisJICAgICAgICB9CisJCisJICAgICAgICBpZiAoY2hlY2tQcmV2aW91c0Nhbm9uaWNhbE1hdGNoKHRleHRvZmZzZXQpKSB7CisJICAgICAgICAgICAgcmV0dXJuOworCSAgICAgICAgfQorCSAgICAgICAgdGV4dG9mZnNldCA9IG1fdXRpbEJ1ZmZlcl9bMF07CisJICAgIH0KKwkgICAgc2V0TWF0Y2hOb3RGb3VuZCgpOworCX0KKwkKKwkvKioKKwkgKiBHZXRzIGEgc3Vic3RyaW5nIG91dCBvZiBhIENoYXJhY3Rlckl0ZXJhdG9yCisJICogQHBhcmFtIHRleHQgQ2hhcmFjdGVySXRlcmF0b3IKKwkgKiBAcGFyYW0gc3RhcnQgc3RhcnQgb2Zmc2V0CisJICogQHBhcmFtIGxlbmd0aCBvZiBzdWJzdHJpbmcKKwkgKiBAcmV0dXJuIHN1YnN0cmluZyBmcm9tIHRleHQgc3RhcnRpbmcgYXQgc3RhcnQgYW5kIGxlbmd0aCBsZW5ndGgKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0U3RyaW5nKENoYXJhY3Rlckl0ZXJhdG9yIHRleHQsIGludCBzdGFydCwKKwkJCQkJCQkJCQkJaW50IGxlbmd0aCkKKwl7CisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKGxlbmd0aCk7CisJCWludCBvZmZzZXQgPSB0ZXh0LmdldEluZGV4KCk7CisJCXRleHQuc2V0SW5kZXgoc3RhcnQpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSArKykgeworCQkJcmVzdWx0LmFwcGVuZCh0ZXh0LmN1cnJlbnQoKSk7CisJCQl0ZXh0Lm5leHQoKTsKKwkJfQorCQl0ZXh0LnNldEluZGV4KG9mZnNldCk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisJCisJLyoqCisJICogR2V0dGluZyB0aGUgbWFzayBmb3IgY29sbGF0aW9uIHN0cmVuZ3RoCisJICogQHBhcmFtIHN0cmVuZ3RoIGNvbGxhdGlvbiBzdHJlbmd0aAorIAkgKiBAcmV0dXJuIGNvbGxhdGlvbiBlbGVtZW50IG1hc2sKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZ2V0TWFzayhpbnQgc3RyZW5ndGgpIAorCXsKKwkgICAgc3dpdGNoIChzdHJlbmd0aCkgCisJICAgIHsKKwkgICAgCWNhc2UgQ29sbGF0b3IuUFJJTUFSWToKKwkgICAgICAgIAlyZXR1cm4gUnVsZUJhc2VkQ29sbGF0b3IuQ0VfUFJJTUFSWV9NQVNLXzsKKwkgICAgCWNhc2UgQ29sbGF0b3IuU0VDT05EQVJZOgorCSAgICAgICAgCXJldHVybiBSdWxlQmFzZWRDb2xsYXRvci5DRV9TRUNPTkRBUllfTUFTS18gCisJICAgICAgICAJICAgICAgIHwgUnVsZUJhc2VkQ29sbGF0b3IuQ0VfUFJJTUFSWV9NQVNLXzsKKwkgICAgCWRlZmF1bHQ6CisJICAgICAgICAJcmV0dXJuIFJ1bGVCYXNlZENvbGxhdG9yLkNFX1RFUlRJQVJZX01BU0tfIAorCSAgICAgICAgCSAgICAgICB8IFJ1bGVCYXNlZENvbGxhdG9yLkNFX1NFQ09OREFSWV9NQVNLXyAKKwkgICAgICAgICAgICAgICAgICAgfCBSdWxlQmFzZWRDb2xsYXRvci5DRV9QUklNQVJZX01BU0tfOworCSAgICB9CisJfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgbWF0Y2ggbm90IGZvdW5kIAorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzZXRNYXRjaE5vdEZvdW5kKCkgCisgICAgeworICAgICAgICAvLyB0aGlzIG1ldGhvZCByZXNldHMgdGhlIG1hdGNoIHJlc3VsdCByZWdhcmRsZXNzIG9mIHRoZSBlcnJvciBzdGF0dXMuCisgICAgICAgIG1fbWF0Y2hlZEluZGV4XyA9IERPTkU7CisgICAgICAgIHNldE1hdGNoTGVuZ3RoKDApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N5bWJvbFRhYmxlLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9TeW1ib2xUYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiZjliZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9TeW1ib2xUYWJsZS5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1N5bWJvbFRhYmxlLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDQgMDA6MDM6NDAgJCAKKyAqICRSZXZpc2lvbjogMS4xMCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbjsKKworLyoqCisgKiBBbiBpbnRlcmZhY2UgdGhhdCBtYXBzIHN0cmluZ3MgdG8gb2JqZWN0cy4gIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMKKyAqIGJvdGggbG9va3VwIHByb3RvY29sIGFuZCBwYXJzaW5nLiAgVGhpcyBhbGxvd3MgZGlmZmVyZW50IGNvbXBvbmVudHMKKyAqIHRvIHNoYXJlIGEgc3ltYm9sIHRhYmxlIGFuZCB0byBoYW5kbGUgbmFtZSBwYXJzaW5nIHVuaWZvcm1seS4gIEl0CisgKiBpcyBleHBlY3RlZCB0aGF0IGNsaWVudCBwYXJzZSBjb2RlIGxvb2sgZm9yIHRoZSBTWU1CT0xfUkVGCisgKiBjaGFyYWN0ZXIgYW5kLCB3aGVuIHNlZW4sIGF0dGVtcHQgdG8gcGFyc2UgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgaXQKKyAqIHVzaW5nIHBhcnNlUmVmZXJlbmNlKCkuCisgKgorICogPHA+Q3VycmVudGx5LCBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvciBhbmQgVW5pY29kZVNldCB1c2UgdGhpcworICogaW50ZXJmYWNlIHRvIHNoYXJlIHZhcmlhYmxlIGRlZmluaXRpb25zLgorICovCitpbnRlcmZhY2UgU3ltYm9sVGFibGUgeworCisgICAgLyoqCisgICAgICogVGhlIGNoYXJhY3RlciBwcmVjZWRpbmcgYSBzeW1ib2wgcmVmZXJlbmNlIG5hbWUuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGNoYXIgU1lNQk9MX1JFRiA9ICckJzsKKworICAgIC8qKgorICAgICAqIExvb2t1cCB0aGUgY2hhcmFjdGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJpbmcgYW5kIHJldHVybiBpdC4KKyAgICAgKiBSZXR1cm4gPHR0Pm51bGw8L3R0PiBpZiBubyBzdWNoIG5hbWUgZXhpc3RzLiAgVGhlIHJlc3VsdGFudAorICAgICAqIGFycmF5IG1heSBoYXZlIGxlbmd0aCB6ZXJvLgorICAgICAqLworICAgIGNoYXJbXSBsb29rdXAoU3RyaW5nIHMpOworCisgICAgLyoqCisgICAgICogTG9va3VwIHRoZSBVbmljb2RlTWF0Y2hlciBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNoYXJhY3RlciwgYW5kCisgICAgICogcmV0dXJuIGl0LiAgUmV0dXJuIDx0dD5udWxsPC90dD4gaWYgbm90IGZvdW5kLgorICAgICAqIEBwYXJhbSBjaCBhIDMyLWJpdCBjb2RlIHBvaW50IGZyb20gMCB0byAweDEwRkZGRi4KKyAgICAgKi8KKyAgICBVbmljb2RlTWF0Y2hlciBsb29rdXBNYXRjaGVyKGludCBjaCk7CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIHN5bWJvbCByZWZlcmVuY2UgbmFtZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcsIHN0YXJ0aW5nCisgICAgICogYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiAgSWYgbm8gdmFsaWQgc3ltYm9sIHJlZmVyZW5jZSBuYW1lIGlzCisgICAgICogZm91bmQsIHJldHVybiBudWxsIGFuZCBsZWF2ZSBwb3MgdW5jaGFuZ2VkLgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIHBhcnNlIGZvciB0aGUgbmFtZQorICAgICAqIEBwYXJhbSBwb3Mgb24gZW50cnksIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHBhcnNlLgorICAgICAqIFRoaXMgaXMgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIFNZTUJPTF9SRUYgY2hhcmFjdGVyLiAgT24KKyAgICAgKiBleGl0LCB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3QgcGFyc2VkIGNoYXJhY3Rlci4KKyAgICAgKiBAcGFyYW0gbGltaXQgdGhlIGluZGV4IGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciB0byBiZSBwYXJzZWQuCisgICAgICogQHJldHVybiB0aGUgcGFyc2VkIG5hbWUuCisgICAgICovCisgICAgU3RyaW5nIHBhcnNlUmVmZXJlbmNlKFN0cmluZyB0ZXh0LCBQYXJzZVBvc2l0aW9uIHBvcywgaW50IGxpbWl0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RpdGxlY2FzZVRyYW5zbGl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9UaXRsZWNhc2VUcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4N2VmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9UaXRsZWNhc2VUcmFuc2xpdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVGl0bGVjYXNlVHJhbnNsaXRlcmF0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMC8zMSAyMjozNjo0OCAkIAorICogJFJldmlzaW9uOiAxLjE4ICQKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworaW1wb3J0IGphdmEudXRpbC4qOworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyUHJvcGVydHk7CisKKy8qKgorICogQSB0cmFuc2xpdGVyYXRvciB0aGF0IGNvbnZlcnRzIGFsbCBsZXR0ZXJzIChhcyBkZWZpbmVkIGJ5CisgKiA8Y29kZT5VQ2hhcmFjdGVyLmlzTGV0dGVyKCk8L2NvZGU+KSB0byBsb3dlciBjYXNlLCBleGNlcHQgZm9yIHRob3NlCisgKiBsZXR0ZXJzIHByZWNlZGVkIGJ5IG5vbi1sZXR0ZXJzLiAgVGhlIGxhdHRlciBhcmUgY29udmVydGVkIHRvIHRpdGxlCisgKiBjYXNlIHVzaW5nIDxjb2RlPlVDaGFyYWN0ZXIudG9UaXRsZUNhc2UoKTwvY29kZT4uCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKi8KK2NsYXNzIFRpdGxlY2FzZVRyYW5zbGl0ZXJhdG9yIGV4dGVuZHMgVHJhbnNsaXRlcmF0b3IgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBfSUQgPSAiQW55LVRpdGxlIjsKKyAgICBwcml2YXRlIExvY2FsZSBsb2M7CisKKyAgICAvKioKKyAgICAgKiBUaGUgc2V0IG9mIGNoYXJhY3RlcnMgd2Ugc2tpcC4gIFRoZXNlIGFyZSBuZWl0aGVyIGNhc2VkIG5vcgorICAgICAqIG5vbi1jYXNlZCwgdG8gdXM7IHdlIGNvcHkgdGhlbSB2ZXJiYXRpbS4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgVW5pY29kZVNldCBTS0lQID0gbmV3IFVuaWNvZGVTZXQoIltcdTAwQUQgXHUyMDE5IFxcJyBbOk1uOl0gWzpNZTpdIFs6Q2Y6XSBbOkxtOl0gWzpTazpdXSIpOworCisgICAgLyoqCisgICAgICogVGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgY2F1c2UgdGhlIG5leHQgbm9uLVNLSVAgY2hhcmFjdGVyCisgICAgICogdG8gYmUgbG93ZXJjYXNlZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgVW5pY29kZVNldCBDQVNFRCA9IG5ldyBVbmljb2RlU2V0KCJbWzpMdTpdIFs6TGw6XSBbOkx0Ol1dIik7CisKKyAgICAvKioKKyAgICAgKiBTeXN0ZW0gcmVnaXN0cmF0aW9uIGhvb2suCisgICAgICovCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXIoKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeShfSUQsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGl0bGVjYXNlVHJhbnNsaXRlcmF0b3IoTG9jYWxlLlVTKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgcmVnaXN0ZXJTcGVjaWFsSW52ZXJzZSgiVGl0bGUiLCAiTG93ZXIiLCBmYWxzZSk7CisgICAgfQorCisgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgdHJhbnNsaXRlcmF0b3IuCisgICAgICovCisgICAgcHVibGljIFRpdGxlY2FzZVRyYW5zbGl0ZXJhdG9yKExvY2FsZSBsb2MpIHsKKyAgICAgICAgc3VwZXIoX0lELCBudWxsKTsKKyAgICAgICAgdGhpcy5sb2MgPSBsb2M7CisgICAgICAgIC8vIE5lZWQgdG8gbG9vayBiYWNrIDIgY2hhcmFjdGVycyBpbiB0aGUgY2FzZSBvZiAiY2FuJ3QiCisgICAgICAgIHNldE1heGltdW1Db250ZXh0TGVuZ3RoKDIpOworICAgIH0KKyAgICAgCisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyB7QGxpbmsgVHJhbnNsaXRlcmF0b3IjaGFuZGxlVHJhbnNsaXRlcmF0ZX0uCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gb2Zmc2V0cywgYm9vbGVhbiBpbmNyZW1lbnRhbCkgeworCisgICAgICAgIC8vIE91ciBtb2RlOyB3ZSBhcmUgZWl0aGVyIGNvbnZlcnRpbmcgbGV0dGVyIHRvVGl0bGUgb3IKKyAgICAgICAgLy8gdG9Mb3dlci4KKyAgICAgICAgYm9vbGVhbiBkb1RpdGxlID0gdHJ1ZTsKKworICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBwcmVjZWRpbmcgY29udGV4dCBvZiBDQVNFRCBTS0lQKiwKKyAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIHN0YXJ0IGluIHRvTG93ZXIgbW9kZS4gIElmIHRoZQorICAgICAgICAvLyBwcmlvciBjb250ZXh0IGlzIGFueXRoaW5nIGVsc2UgKGluY2x1ZGluZyBlbXB0eSkgdGhlbiBzdGFydAorICAgICAgICAvLyBpbiB0b1RpdGxlIG1vZGUuCisgICAgICAgIGludCBjOworICAgICAgICBmb3IgKGludCBzdGFydCA9IG9mZnNldHMuc3RhcnQgLSAxOyBzdGFydCA+PSBvZmZzZXRzLmNvbnRleHRTdGFydDsgc3RhcnQgLT0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpKSB7CisgICAgICAgICAgICBjID0gdGV4dC5jaGFyMzJBdChzdGFydCk7CisgICAgICAgICAgICBpZiAoU0tJUC5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZG9UaXRsZSA9ICFDQVNFRC5jb250YWlucyhjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29udmVydCB0aGluZ3MgYWZ0ZXIgYSBDQVNFRCBjaGFyYWN0ZXIgdG9Mb3dlcjsgdGhpbmdzCisgICAgICAgIC8vIGFmdGVyIGEgbm9uLUNBU0VELCBub24tU0tJUCBjaGFyYWN0ZXIgdG9UaXRsZS4gIFNLSVAKKyAgICAgICAgLy8gY2hhcmFjdGVycyBhcmUgY29waWVkIGRpcmVjdGx5IGFuZCBkbyBub3QgY2hhbmdlIHRoZSBtb2RlLgorCisgICAgICAgIGludCB0ZXh0UG9zID0gb2Zmc2V0cy5zdGFydDsKKyAgICAgICAgaWYgKHRleHRQb3MgPj0gb2Zmc2V0cy5saW1pdCkgcmV0dXJuOworCisgICAgICAgIC8vIGdldCBzdHJpbmcgZm9yIGNvbnRleHQKKyAgICAgICAgLy8gVE9ETzogYWRkIGNvbnZlbmllbmNlIG1ldGhvZCB0byBkbyB0aGlzLCBzaW5jZSB3ZSBkbyBpdCBhbGwgb3ZlcgorICAgICAgICAKKyAgICAgICAgVUNoYXJhY3Rlckl0ZXJhdG9yIG9yaWdpbmFsID0gVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHRleHQpOworICAgICAgICAKKyAgICAgICAgLy8gV2FsayB0aHJvdWdoIG9yaWdpbmFsIHN0cmluZworICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGNhc2UgY2hhbmdlLCBtb2RpZnkgY29ycmVzcG9uZGluZyBwb3NpdGlvbiBpbiByZXBsYWNlYWJsZQorICAgICAgICAKKyAgICAgICAgaW50IGxpbWl0ID0gb2Zmc2V0cy5saW1pdDsKKyAgICAgICAgaW50IGNwOworICAgICAgICBpbnQgb2xkTGVuOworICAgICAgICBpbnQgbmV3TGVuOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHRleHRQb3MgPCBsaW1pdCkgeworICAgICAgICAJb3JpZ2luYWwuc2V0SW5kZXgodGV4dFBvcyk7CisgICAgICAgICAgICBjcCA9IG9yaWdpbmFsLmN1cnJlbnRDb2RlUG9pbnQoKTsKKyAgICAgICAgICAgIG9sZExlbiA9IFVURjE2LmdldENoYXJDb3VudChjcCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghU0tJUC5jb250YWlucyhjcCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG9UaXRsZSkgeworICAgICAgICAgICAgICAgICAgICBuZXdMZW4gPSBtX2NoYXJwcHR5Xy50b1VwcGVyT3JUaXRsZUNhc2UobG9jLCBjcCwgb3JpZ2luYWwsIGZhbHNlLCBidWZmZXIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5ld0xlbiA9IG1fY2hhcnBwdHlfLnRvTG93ZXJDYXNlKGxvYywgY3AsIG9yaWdpbmFsLCBidWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkb1RpdGxlID0gIUNBU0VELmNvbnRhaW5zKGNwKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3TGVuID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKHRleHRQb3MsIHRleHRQb3MgKyBvbGRMZW4sIGJ1ZmZlciwgMCwgbmV3TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0xlbiAhPSBvbGRMZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQb3MgKz0gbmV3TGVuOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5saW1pdCArPSBuZXdMZW4gLSBvbGRMZW47CisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRzLmNvbnRleHRMaW1pdCArPSBuZXdMZW4gLSBvbGRMZW47CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHRQb3MgKz0gb2xkTGVuOworICAgICAgICB9CisgICAgICAgIG9mZnNldHMuc3RhcnQgPSBvZmZzZXRzLmxpbWl0OworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIGNoYXIgYnVmZmVyW10gPSBuZXcgY2hhcltVQ2hhcmFjdGVyUHJvcGVydHkuTUFYX0NBU0VfTUFQX1NJWkVdOworICAgIC8qKgorICAgICAqIENoYXJhY3RlciBwcm9wZXJ0eSBkYXRhYmFzZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFVDaGFyYWN0ZXJQcm9wZXJ0eSBtX2NoYXJwcHR5XyA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0SW5zdGFuY2UoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zZm9ybVRyYW5zbGl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2Zvcm1UcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwOWRkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2Zvcm1UcmFuc2xpdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVHJhbnNmb3JtVHJhbnNsaXRlcmF0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjoxNiAkIAorICogJFJldmlzaW9uOiAxLjUgJAorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2Fic3RyYWN0IGNsYXNzIFRyYW5zZm9ybVRyYW5zbGl0ZXJhdG9yIHsKKyAgICAvLyBDdXJyZW50bHkgdW51c2VkCit9CisKKy8vLyoqCisvLyAqIEFuIGFic3RyYWN0IGNsYXNzIGZvciB0cmFuc2xpdGVyYXRvcnMgYmFzZWQgb24gYSB0cmFuc2Zvcm0KKy8vICogb3BlcmF0aW9uLiAgVG8gY3JlYXRlIGEgdHJhbnNsaXRlcmF0b3IgdGhhdCBpbXBsZW1lbnRzIGEKKy8vICogdHJhbnNmb3JtYXRpb24sIGNyZWF0ZSBhIHN1YmNsYXNzIG9mIHRoaXMgY2xhc3MgYW5kIGltcGxlbWVudCB0aGUKKy8vICogYWJzdHJhY3QgPGNvZGU+dHJhbnNmb3JtKCk8L2NvZGU+IGFuZCA8Y29kZT5oYXNUcmFuc2Zvcm0oKTwvY29kZT4KKy8vICogbWV0aG9kcy4KKy8vICogQGF1dGhvciBBbGFuIExpdQorLy8gKi8KKy8vYWJzdHJhY3QgY2xhc3MgVHJhbnNmb3JtVHJhbnNsaXRlcmF0b3IgZXh0ZW5kcyBUcmFuc2xpdGVyYXRvciB7CisvLworLy8gICAgLyoqCisvLyAgICAgKiBDb25zdHJ1Y3RzIGEgdHJhbnNsaXRlcmF0b3IuICBGb3IgdXNlIGJ5IHN1YmNsYXNzZXMuCisvLyAgICAgKi8KKy8vICAgIHByb3RlY3RlZCBUcmFuc2Zvcm1UcmFuc2xpdGVyYXRvcihTdHJpbmcgaWQsIFVuaWNvZGVGaWx0ZXIgZikgeworLy8gICAgICAgIHN1cGVyKGlkLCBmKTsKKy8vICAgIH0KKy8vCisvLyAgICAvKioKKy8vICAgICAqIEltcGxlbWVudHMge0BsaW5rIFRyYW5zbGl0ZXJhdG9yI2hhbmRsZVRyYW5zbGl0ZXJhdGV9LgorLy8gICAgICovCisvLyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVUcmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIG9mZnNldHMsIGJvb2xlYW4gaW5jcmVtZW50YWwpIHsKKy8vCisvLyAgICAgICAgaW50IHN0YXJ0OworLy8gICAgICAgIGZvciAoc3RhcnQgPSBvZmZzZXRzLnN0YXJ0OyBzdGFydCA8IG9mZnNldHMubGltaXQ7ICsrc3RhcnQpIHsKKy8vICAgICAgICAgICAgLy8gU2NhbiBmb3IgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGlzICE9IGl0cyB0cmFuc2Zvcm0uCisvLyAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBub25lLCB3ZSBmYWxsIG91dCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLgorLy8gICAgICAgICAgICBjaGFyIGMgPSB0ZXh0LmNoYXJBdChzdGFydCk7CisvLyAgICAgICAgICAgIGlmIChoYXNUcmFuc2Zvcm0oYykpIHsKKy8vICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgdHJhbnNmb3JtaW5nIGNoYXJhY3RlciBhdCBzdGFydC4gIEJyZWFrCisvLyAgICAgICAgICAgICAgICAvLyB1cCB0aGUgcmVtYWluaW5nIHN0cmluZywgZnJvbSBzdGFydCB0bworLy8gICAgICAgICAgICAgICAgLy8gb2Zmc2V0cy5saW1pdCwgaW50byBzZWdtZW50cyBvZiB1bmZpbHRlcmVkIGFuZAorLy8gICAgICAgICAgICAgICAgLy8gZmlsdGVyZWQgY2hhcmFjdGVycy4gIE9ubHkgdHJhbnNmb3JtIHRoZSB1bmZpbHRlcmVkCisvLyAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzLiAgQXMgYWx3YXlzLCBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCisvLyAgICAgICAgICAgICAgICAvLyBjYWxscyB0byBSZXBsYWNlYWJsZS5yZXBsYWNlKCkuCisvLworLy8gICAgICAgICAgICAgICAgaW50IGxlbiA9IG9mZnNldHMubGltaXQgLSBzdGFydDsKKy8vICAgICAgICAgICAgICAgIC8vIGFzc2VydChsZW4gPj0gMSk7CisvLyAgICAgICAgICAgICAgICAKKy8vICAgICAgICAgICAgICAgIGNoYXJbXSBidWYgPSBuZXcgY2hhcltsZW5dOworLy8gICAgICAgICAgICAgICAgdGV4dC5nZXRDaGFycyhzdGFydCwgb2Zmc2V0cy5saW1pdCwgYnVmLCAwKTsKKy8vCisvLyAgICAgICAgICAgICAgICBpbnQgc2VnU3RhcnQgPSAwOworLy8gICAgICAgICAgICAgICAgaW50IHNlZ0xpbWl0OworLy8gICAgICAgICAgICAgICAgVW5pY29kZUZpbHRlciBmaWx0ID0gZ2V0RmlsdGVyKCk7CisvLworLy8gICAgICAgICAgICAgICAgLy8gbGVuRGVsdGEgaXMgdGhlIGFjY3VtdWxhdGVkIGxlbmd0aCBkaWZmZXJlbmNlIGZvcgorLy8gICAgICAgICAgICAgICAgLy8gYWxsIHRyYW5zZm9ybWVkIHNlZ21lbnRzLiAgSXQgaXMgbmV3IGxlbmd0aCAtIG9sZAorLy8gICAgICAgICAgICAgICAgLy8gbGVuZ3RoLgorLy8gICAgICAgICAgICAgICAgaW50IGxlbkRlbHRhID0gMDsKKy8vCisvLyAgICAgICAgICAgICAgICAvLyBTZXQgc2VnU3RhcnQsIHNlZ0xpbWl0IHRvIHRoZSB1bmZpbHRlcmVkIHNlZ21lbnQKKy8vICAgICAgICAgICAgICAgIC8vIHN0YXJ0aW5nIHdpdGggc3RhcnQuICBJZiB0aGUgZmlsdGVyIGlzIG51bGwsIHRoZW4KKy8vICAgICAgICAgICAgICAgIC8vIHNlZ1N0YXJ0L0xpbWl0IHdpbGwgYmUgc2V0IHRvIHRoZSB3aG9sZSBzdHJpbmcsCisvLyAgICAgICAgICAgICAgICAvLyB0aGF0IGlzLCAwL2xlbi4KKy8vICAgICAgICAgICAgICAgIGRvIHsKKy8vICAgICAgICAgICAgICAgICAgICAvLyBTZXQgc2VnTGltaXQgdG8gdGhlIGZpcnN0IGZpbHRlcmVkIGNoYXIgYXQgb3IKKy8vICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciBzZWdTdGFydC4KKy8vICAgICAgICAgICAgICAgICAgICBzZWdMaW1pdCA9IGxlbjsKKy8vICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdCAhPSBudWxsKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIHNlZ0xpbWl0ID0gc2VnU3RhcnQ7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzZWdMaW1pdCA8IGxlbiAmJiBmaWx0LmNvbnRhaW5zKGJ1ZltzZWdMaW1pdF0pKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzZWdMaW1pdDsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICAgICAgICAgIH0KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSB1bmZpbHRlcmVkIGNoYXJzIGJldHdlZW4gc2VnU3RhcnQKKy8vICAgICAgICAgICAgICAgICAgICAvLyBhbmQgc2VnTGltaXQuCisvLyAgICAgICAgICAgICAgICAgICAgaW50IHNlZ0xlbiA9IHNlZ0xpbWl0IC0gc2VnU3RhcnQ7CisvLyAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ0xlbiAhPSAwKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXdTdHIgPSB0cmFuc2Zvcm0oCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nKGJ1Ziwgc2VnU3RhcnQsIHNlZ0xlbikpOworLy8gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2Uoc3RhcnQsIHN0YXJ0ICsgc2VnTGVuLCBuZXdTdHIpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSBuZXdTdHIubGVuZ3RoKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGxlbkRlbHRhICs9IG5ld1N0ci5sZW5ndGgoKSAtIHNlZ0xlbjsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgIC8vIFNldCBzZWdTdGFydCB0byB0aGUgZmlyc3QgdW5maWx0ZXJlZCBjaGFyIGF0IG9yCisvLyAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgc2VnTGltaXQuCisvLyAgICAgICAgICAgICAgICAgICAgc2VnU3RhcnQgPSBzZWdMaW1pdDsKKy8vICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdCAhPSBudWxsKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzZWdTdGFydCA8IGxlbiAmJiAhZmlsdC5jb250YWlucyhidWZbc2VnU3RhcnRdKSkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzZWdTdGFydDsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgICAgICAgICBzdGFydCArPSBzZWdTdGFydCAtIHNlZ0xpbWl0OworLy8KKy8vICAgICAgICAgICAgICAgIH0gd2hpbGUgKHNlZ1N0YXJ0IDwgbGVuKTsKKy8vICAgICAgICAgICAgICAgIAorLy8gICAgICAgICAgICAgICAgb2Zmc2V0cy5saW1pdCArPSBsZW5EZWx0YTsKKy8vICAgICAgICAgICAgICAgIG9mZnNldHMuY29udGV4dExpbWl0ICs9IGxlbkRlbHRhOworLy8gICAgICAgICAgICAgICAgb2Zmc2V0cy5zdGFydCA9IG9mZnNldHMubGltaXQ7CisvLyAgICAgICAgICAgICAgICByZXR1cm47CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisvLyAgICAgICAgLy8gYXNzZXJ0KHN0YXJ0ID09IG9mZnNldHMubGltaXQpOworLy8gICAgICAgIG9mZnNldHMuc3RhcnQgPSBzdGFydDsKKy8vICAgIH0KKy8vCisvLyAgICAvKioKKy8vICAgICAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYQorLy8gICAgICogZ2l2ZW4gY2hhcmFjdGVyIGhhcyBhIHRyYW5zZm9ybSB0aGF0IGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCisvLyAgICAgKiBUaGlzIGlzIGFwcHJveGltYXRlbHkgZXF1aXZhbGVudCB0byA8Y29kZT5jICE9CisvLyAgICAgKiB0cmFuc2Zvcm0oU3RyaW5nLnZhbHVlT2YoYykpPC9jb2RlPiwgd2hlcmUKKy8vICAgICAqIDxjb2RlPlN0cmluZy52YWx1ZU9mKGMpPC9jb2RlPiByZXR1cm5zIGEgU3RyaW5nIGNvbnRhaW5pbmcgdGhlCisvLyAgICAgKiBzaW5nbGUgY2hhcmFjdGVyIChub3QgaW50ZWdlcikgPGNvZGU+YzwvY29kZT4uICBTdWJjbGFzc2VzIHRoYXQKKy8vICAgICAqIHRyYW5zZm9ybSBhbGwgdGhlaXIgaW5wdXQgY2FuIHNpbXBseSByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4uCisvLyAgICAgKi8KKy8vICAgIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGhhc1RyYW5zZm9ybShpbnQgYyk7CisvLworLy8gICAgLyoqCisvLyAgICAgKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHRyYW5zZm9ybSBhIHN0cmluZy4KKy8vICAgICAqLworLy8gICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyB0cmFuc2Zvcm0oU3RyaW5nIHMpOworLy99CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRpb25SdWxlLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRpb25SdWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODk4ZGI5YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zbGl0ZXJhdGlvblJ1bGUuamF2YQpAQCAtMCwwICsxLDczMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVHJhbnNsaXRlcmF0aW9uUnVsZS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDYvMjggMTk6MTU6NTMgJAorICogJFJldmlzaW9uOiAxLjQ3ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIEEgdHJhbnNsaXRlcmF0aW9uIHJ1bGUgdXNlZCBieQorICogPGNvZGU+UnVsZUJhc2VkVHJhbnNsaXRlcmF0b3I8L2NvZGU+LgorICogPGNvZGU+VHJhbnNsaXRlcmF0aW9uUnVsZTwvY29kZT4gaXMgYW4gaW1tdXRhYmxlIG9iamVjdC4KKyAqCisgKiA8cD5BIHJ1bGUgY29uc2lzdHMgb2YgYW4gaW5wdXQgcGF0dGVybiBhbmQgYW4gb3V0cHV0IHN0cmluZy4gIFdoZW4KKyAqIHRoZSBpbnB1dCBwYXR0ZXJuIGlzIG1hdGNoZWQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIGVtaXR0ZWQuICBUaGUKKyAqIGlucHV0IHBhdHRlcm4gY29uc2lzdHMgb2YgemVybyBvciBtb3JlIGNoYXJhY3RlcnMgd2hpY2ggYXJlIG1hdGNoZWQKKyAqIGV4YWN0bHkgKHRoZSBrZXkpIGFuZCBvcHRpb25hbCBjb250ZXh0LiAgQ29udGV4dCBtdXN0IG1hdGNoIGlmIGl0CisgKiBpcyBzcGVjaWZpZWQuICBDb250ZXh0IG1heSBiZSBzcGVjaWZpZWQgYmVmb3JlIHRoZSBrZXksIGFmdGVyIHRoZQorICoga2V5LCBvciBib3RoLiAgVGhlIGtleSwgcHJlY2VkaW5nIGNvbnRleHQsIGFuZCBmb2xsb3dpbmcgY29udGV4dAorICogbWF5IGNvbnRhaW4gdmFyaWFibGVzLiAgVmFyaWFibGVzIHJlcHJlc2VudCBhIHNldCBvZiBVbmljb2RlCisgKiBjaGFyYWN0ZXJzLCBzdWNoIGFzIHRoZSBsZXR0ZXJzIDxpPmE8L2k+IHRocm91Z2ggPGk+ejwvaT4uCisgKiBWYXJpYWJsZXMgYXJlIGRldGVjdGVkIGJ5IGxvb2tpbmcgdXAgZWFjaCBjaGFyYWN0ZXIgaW4gYSBzdXBwbGllZAorICogdmFyaWFibGUgbGlzdCB0byBzZWUgaWYgaXQgaGFzIGJlZW4gc28gZGVmaW5lZC4KKyAqCisgKiA8cD5BIHJ1bGUgbWF5IGNvbnRhaW4gc2VnbWVudHMgaW4gaXRzIGlucHV0IHN0cmluZyBhbmQgc2VnbWVudAorICogcmVmZXJlbmNlcyBpbiBpdHMgb3V0cHV0IHN0cmluZy4gIEEgc2VnbWVudCBpcyBhIHN1YnN0cmluZyBvZiB0aGUKKyAqIGlucHV0IHBhdHRlcm4sIGluZGljYXRlZCBieSBhbiBvZmZzZXQgYW5kIGxpbWl0LiAgVGhlIHNlZ21lbnQgbWF5CisgKiBiZSBpbiB0aGUgcHJlY2VkaW5nIG9yIGZvbGxvd2luZyBjb250ZXh0LiAgSXQgbWF5IG5vdCBzcGFuIGEKKyAqIGNvbnRleHQgYm91bmRhcnkuICBBIHNlZ21lbnQgcmVmZXJlbmNlIGlzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgaW4KKyAqIHRoZSBvdXRwdXQgc3RyaW5nIHRoYXQgY2F1c2VzIGEgc2VnbWVudCBvZiB0aGUgaW5wdXQgc3RyaW5nIChub3QKKyAqIHRoZSBpbnB1dCBwYXR0ZXJuKSB0byBiZSBjb3BpZWQgdG8gdGhlIG91dHB1dCBzdHJpbmcuICBUaGUgcmFuZ2Ugb2YKKyAqIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IHJlcHJlc2VudCBzZWdtZW50IHJlZmVyZW5jZXMgaXMgZGVmaW5lZCBieQorICogUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuRGF0YS4KKyAqCisgKiA8cD5FeGFtcGxlOiBUaGUgcnVsZSAiKFthLXpdKSAuIChbMC05XSkgPiAkMiAuICQxIiB3aWxsIGNoYW5nZSB0aGUgaW5wdXQKKyAqIHN0cmluZyAiYWJjLjEyMyIgdG8gImFiMS5jMjMiLgorICoKKyAqIDxwPkNvcHlyaWdodCAmY29weTsgSUJNIENvcnBvcmF0aW9uIDE5OTkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEB2ZXJzaW9uICRSQ1NmaWxlOiBUcmFuc2xpdGVyYXRpb25SdWxlLmphdmEsdiAkICRSZXZpc2lvbjogMS40NyAkICREYXRlOiAyMDAyLzA2LzI4IDE5OjE1OjUzICQKKyAqLworY2xhc3MgVHJhbnNsaXRlcmF0aW9uUnVsZSB7CisKKyAgICAvLyBUT0RPIEVsaW1pbmF0ZSB0aGUgcGF0dGVybiBhbmQga2V5TGVuZ3RoIGRhdGEgbWVtYmVycy4gIFRoZXkKKyAgICAvLyBhcmUgdXNlZCBvbmx5IGJ5IG1hc2tzKCkgYW5kIGdldEluZGV4VmFsdWUoKSB3aGljaCBhcmUgY2FsbGVkCisgICAgLy8gb25seSBkdXJpbmcgYnVpbGQgdGltZSwgbm90IGR1cmluZyBydW4tdGltZS4gIFBlcmhhcHMgdGhlc2UKKyAgICAvLyBtZXRob2RzIGFuZCBwYXR0ZXJuL2tleUxlbmd0aCBjYW4gYmUgaXNvbGF0ZWQgaW50byBhIHNlcGFyYXRlCisgICAgLy8gb2JqZWN0LgorCisgICAgLyoqCisgICAgICogVGhlIG1hdGNoIHRoYXQgbXVzdCBvY2N1ciBiZWZvcmUgdGhlIGtleSwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubworICAgICAqIHByZWNlZGluZyBjb250ZXh0LgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nTWF0Y2hlciBhbnRlQ29udGV4dDsKKworICAgIC8qKgorICAgICAqIFRoZSBtYXRjaGVyIG9iamVjdCBmb3IgdGhlIGtleS4gIElmIG51bGwsIHRoZW4gdGhlIGtleSBpcyBlbXB0eS4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZ01hdGNoZXIga2V5OworCisgICAgLyoqCisgICAgICogVGhlIG1hdGNoIHRoYXQgbXVzdCBvY2N1ciBhZnRlciB0aGUga2V5LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vCisgICAgICogZm9sbG93aW5nIGNvbnRleHQuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmdNYXRjaGVyIHBvc3RDb250ZXh0OworCisgICAgLyoqCisgICAgICogVGhlIG9iamVjdCB0aGF0IHBlcmZvcm1zIHRoZSByZXBsYWNlbWVudCBpZiB0aGUga2V5LAorICAgICAqIGFudGVDb250ZXh0LCBhbmQgcG9zdENvbnRleHQgYXJlIG1hdGNoZWQuICBOZXZlciBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgVW5pY29kZVJlcGxhY2VyIG91dHB1dDsKKworICAgIC8qKgorICAgICAqIFRoZSBzdHJpbmcgdGhhdCBtdXN0IGJlIG1hdGNoZWQsIGNvbnNpc3Rpbmcgb2YgdGhlIGFudGVDb250ZXh0LCBrZXksCisgICAgICogYW5kIHBvc3RDb250ZXh0LCBjb25jYXRlbmF0ZWQgdG9nZXRoZXIsIGluIHRoYXQgb3JkZXIuICBTb21lIGNvbXBvbmVudHMKKyAgICAgKiBtYXkgYmUgZW1wdHkgKHplcm8gbGVuZ3RoKS4KKyAgICAgKiBAc2VlIGFudGVDb250ZXh0TGVuZ3RoCisgICAgICogQHNlZSBrZXlMZW5ndGgKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBwYXR0ZXJuOworCisgICAgLyoqCisgICAgICogQW4gYXJyYXkgb2YgbWF0Y2hlciBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHBhdHRlcm4KKyAgICAgKiBzZWdtZW50cy4gIElmIHRoZXJlIGFyZSBubyBzZWdtZW50cyB0aGlzIGlzIG51bGwuICBOLkIuIFRoaXMgaXMKKyAgICAgKiBhIFVuaWNvZGVNYXRjaGVyIGZvciBnZW5lcmFsaXR5LCBidXQgaW4gcHJhY3RpY2UgaXQgaXMgYWx3YXlzIGEKKyAgICAgKiBTdHJpbmdNYXRjaGVyLiAgSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZ2VuZXJhbGl6ZSB0aGlzLCBidXQgZm9yCisgICAgICogbm93IHdlIHNvbWV0aW1lcyBjYXN0IGRvd24gdG8gU3RyaW5nTWF0Y2hlci4KKyAgICAgKi8KKyAgICBVbmljb2RlTWF0Y2hlcltdIHNlZ21lbnRzOworCisgICAgLyoqCisgICAgICogVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHRoYXQgbXVzdCBtYXRjaCBiZWZvcmUgdGhlIGtleS4gIElmCisgICAgICogemVybywgdGhlbiB0aGVyZSBpcyBubyBtYXRjaGluZyByZXF1aXJlbWVudCBiZWZvcmUgdGhlIGtleS4KKyAgICAgKiBTdWJzdHJpbmcgWzAsYW50ZUNvbnRleHRMZW5ndGgpIG9mIHBhdHRlcm4gaXMgdGhlIGFudGVDb250ZXh0LgorICAgICAqLworICAgIHByaXZhdGUgaW50IGFudGVDb250ZXh0TGVuZ3RoOworCisgICAgLyoqCisgICAgICogVGhlIGxlbmd0aCBvZiB0aGUga2V5LiAgU3Vic3RyaW5nIFthbnRlQ29udGV4dExlbmd0aCwKKyAgICAgKiBhbnRlQ29udGV4dExlbmd0aCArIGtleUxlbmd0aCkgaXMgdGhlIGtleS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBrZXlMZW5ndGg7CisKKyAgICAvKioKKyAgICAgKiBNaXNjZWxsYW5lb3VzIGF0dHJpYnV0ZXMuCisgICAgICovCisgICAgYnl0ZSBmbGFnczsKKworICAgIC8qKgorICAgICAqIEZsYWcgYXR0cmlidXRlcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IEFOQ0hPUl9TVEFSVCA9IDE7CisgICAgc3RhdGljIGZpbmFsIGludCBBTkNIT1JfRU5EICAgPSAyOworCisgICAgLyoqCisgICAgICogQW4gYWxpYXMgcG9pbnRlciB0byB0aGUgZGF0YSBmb3IgdGhpcyBydWxlLiAgVGhlIGRhdGEgcHJvdmlkZXMKKyAgICAgKiBsb29rdXAgc2VydmljZXMgZm9yIG1hdGNoZXJzIGFuZCBzZWdtZW50cy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLkRhdGEgZGF0YTsKKworICAgIC8qKgorICAgICAqIFRoZSBjaGFyYWN0ZXIgYXQgaW5kZXggaSwgd2hlcmUgaSA8IGNvbnRleHRTdGFydCB8fCBpID49IGNvbnRleHRMaW1pdCwKKyAgICAgKiBpcyBFVEhFUi4gIFRoaXMgYWxsb3dzIGV4cGxpY2l0IG1hdGNoaW5nIGJ5IHJ1bGVzIGFuZCBVbmljb2RlU2V0cworICAgICAqIG9mIHRleHQgb3V0c2lkZSB0aGUgY29udGV4dC4gIEluIHRyYWRpdGlvbmFsIHRlcm1zLCB0aGlzIGFsbG93cyBhbmNob3JpbmcKKyAgICAgKiBhdCB0aGUgc3RhcnQgYW5kL29yIGVuZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgY2hhciBFVEhFUiA9ICdcdUZGRkYnOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICJcdTAwQTkgSUJNIENvcnBvcmF0aW9uIDE5OTktMjAwMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iOworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbmV3IHJ1bGUgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQsIG91dHB1dCB0ZXh0LCBhbmQgb3RoZXIKKyAgICAgKiBhdHRyaWJ1dGVzLiAgQSBjdXJzb3IgcG9zaXRpb24gbWF5IGJlIHNwZWNpZmllZCBmb3IgdGhlIG91dHB1dCB0ZXh0LgorICAgICAqIEBwYXJhbSBpbnB1dCBpbnB1dCBzdHJpbmcsIGluY2x1ZGluZyBrZXkgYW5kIG9wdGlvbmFsIGFudGUgYW5kCisgICAgICogcG9zdCBjb250ZXh0CisgICAgICogQHBhcmFtIGFudGVDb250ZXh0UG9zIG9mZnNldCBpbnRvIGlucHV0IHRvIGVuZCBvZiBhbnRlIGNvbnRleHQsIG9yIC0xIGlmCisgICAgICogbm9uZS4gIE11c3QgYmUgPD0gaW5wdXQubGVuZ3RoKCkgaWYgbm90IC0xLgorICAgICAqIEBwYXJhbSBwb3N0Q29udGV4dFBvcyBvZmZzZXQgaW50byBpbnB1dCB0byBzdGFydCBvZiBwb3N0IGNvbnRleHQsIG9yIC0xCisgICAgICogaWYgbm9uZS4gIE11c3QgYmUgPD0gaW5wdXQubGVuZ3RoKCkgaWYgbm90IC0xLCBhbmQgbXVzdCBiZSA+PQorICAgICAqIGFudGVDb250ZXh0UG9zLgorICAgICAqIEBwYXJhbSBvdXRwdXQgb3V0cHV0IHN0cmluZworICAgICAqIEBwYXJhbSBjdXJzb3JQb3Mgb2Zmc2V0IGludG8gb3V0cHV0IGF0IHdoaWNoIGN1cnNvciBpcyBsb2NhdGVkLCBvciAtMSBpZgorICAgICAqIG5vbmUuICBJZiBsZXNzIHRoYW4gemVybywgdGhlbiB0aGUgY3Vyc29yIGlzIHBsYWNlZCBhZnRlciB0aGUKKyAgICAgKiA8Y29kZT5vdXRwdXQ8L2NvZGU+OyB0aGF0IGlzLCAtMSBpcyBlcXVpdmFsZW50IHRvCisgICAgICogPGNvZGU+b3V0cHV0Lmxlbmd0aCgpPC9jb2RlPi4gIElmIGdyZWF0ZXIgdGhhbgorICAgICAqIDxjb2RlPm91dHB1dC5sZW5ndGgoKTwvY29kZT4gdGhlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgorICAgICAqIEBwYXJhbSBjdXJzb3JPZmZzZXQgYW4gb2Zmc2V0IHRvIGJlIGFkZGVkIHRvIGN1cnNvclBvcyB0byBwb3NpdGlvbiB0aGUKKyAgICAgKiBjdXJzb3IgZWl0aGVyIGluIHRoZSBhbnRlIGNvbnRleHQsIGlmIDwgMCwgb3IgaW4gdGhlIHBvc3QgY29udGV4dCwgaWYgPgorICAgICAqIDAuICBGb3IgZXhhbXBsZSwgdGhlIHJ1bGUgImFiY3tkZWZ9ID4gfCBAQEAgeHl6OyIgY2hhbmdlcyAiZGVmIiB0bworICAgICAqICJ4eXoiIGFuZCBtb3ZlcyB0aGUgY3Vyc29yIHRvIGJlZm9yZSAiYSIuICBJdCB3b3VsZCBoYXZlIGEgY3Vyc29yT2Zmc2V0CisgICAgICogb2YgLTMuCisgICAgICogQHBhcmFtIHNlZ3MgYXJyYXkgb2YgVW5pY29kZU1hdGNoZXIgY29ycmVzcG9uZGluZyB0byBpbnB1dCBwYXR0ZXJuCisgICAgICogc2VnbWVudHMsIG9yIG51bGwgaWYgdGhlcmUgYXJlIG5vbmUKKyAgICAgKiBAcGFyYW0gYW5jaG9yU3RhcnQgdHJ1ZSBpZiB0aGUgdGhlIHJ1bGUgaXMgYW5jaG9yZWQgb24gdGhlIGxlZnQgdG8KKyAgICAgKiB0aGUgY29udGV4dCBzdGFydAorICAgICAqIEBwYXJhbSBhbmNob3JFbmQgdHJ1ZSBpZiB0aGUgcnVsZSBpcyBhbmNob3JlZCBvbiB0aGUgcmlnaHQgdG8gdGhlCisgICAgICogY29udGV4dCBsaW1pdAorICAgICAqLworICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRpb25SdWxlKFN0cmluZyBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYW50ZUNvbnRleHRQb3MsIGludCBwb3N0Q29udGV4dFBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3JQb3MsIGludCBjdXJzb3JPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZU1hdGNoZXJbXSBzZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYW5jaG9yU3RhcnQsIGJvb2xlYW4gYW5jaG9yRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLkRhdGEgdGhlRGF0YSkgeworICAgICAgICBkYXRhID0gdGhlRGF0YTsKKworICAgICAgICAvLyBEbyByYW5nZSBjaGVja3Mgb25seSB3aGVuIHdhcnJhbnRlZCB0byBzYXZlIHRpbWUKKyAgICAgICAgaWYgKGFudGVDb250ZXh0UG9zIDwgMCkgeworICAgICAgICAgICAgYW50ZUNvbnRleHRMZW5ndGggPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGFudGVDb250ZXh0UG9zID4gaW5wdXQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFudGUgY29udGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYW50ZUNvbnRleHRMZW5ndGggPSBhbnRlQ29udGV4dFBvczsKKyAgICAgICAgfQorICAgICAgICBpZiAocG9zdENvbnRleHRQb3MgPCAwKSB7CisgICAgICAgICAgICBrZXlMZW5ndGggPSBpbnB1dC5sZW5ndGgoKSAtIGFudGVDb250ZXh0TGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHBvc3RDb250ZXh0UG9zIDwgYW50ZUNvbnRleHRMZW5ndGggfHwKKyAgICAgICAgICAgICAgICBwb3N0Q29udGV4dFBvcyA+IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBwb3N0IGNvbnRleHQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtleUxlbmd0aCA9IHBvc3RDb250ZXh0UG9zIC0gYW50ZUNvbnRleHRMZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1cnNvclBvcyA8IDApIHsKKyAgICAgICAgICAgIGN1cnNvclBvcyA9IG91dHB1dC5sZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJzb3JQb3MgPiBvdXRwdXQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgY3Vyc29yIHBvc2l0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBkb24ndCB2YWxpZGF0ZSB0aGUgc2VnbWVudHMgYXJyYXkuICBUaGUgY2FsbGVyIG11c3QKKyAgICAgICAgLy8gZ3VhcmFudGVlIHRoYXQgdGhlIHNlZ21lbnRzIGFyZSB3ZWxsLWZvcm1lZCAodGhhdCBpcywgdGhhdAorICAgICAgICAvLyBhbGwgJG4gcmVmZXJlbmNlcyBpbiB0aGUgb3V0cHV0IHJlZmVyIHRvIGluZGljZXMgb2YgdGhpcworICAgICAgICAvLyBhcnJheSwgYW5kIHRoYXQgbm8gYXJyYXkgZWxlbWVudHMgYXJlIG51bGwpLgorICAgICAgICB0aGlzLnNlZ21lbnRzID0gc2VnczsKKworICAgICAgICBwYXR0ZXJuID0gaW5wdXQ7CisgICAgICAgIGZsYWdzID0gMDsKKyAgICAgICAgaWYgKGFuY2hvclN0YXJ0KSB7CisgICAgICAgICAgICBmbGFncyB8PSBBTkNIT1JfU1RBUlQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFuY2hvckVuZCkgeworICAgICAgICAgICAgZmxhZ3MgfD0gQU5DSE9SX0VORDsKKyAgICAgICAgfQorCisgICAgICAgIGFudGVDb250ZXh0ID0gbnVsbDsKKyAgICAgICAgaWYgKGFudGVDb250ZXh0TGVuZ3RoID4gMCkgeworICAgICAgICAgICAgYW50ZUNvbnRleHQgPSBuZXcgU3RyaW5nTWF0Y2hlcihwYXR0ZXJuLnN1YnN0cmluZygwLCBhbnRlQ29udGV4dExlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAga2V5ID0gbnVsbDsKKyAgICAgICAgaWYgKGtleUxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGtleSA9IG5ldyBTdHJpbmdNYXRjaGVyKHBhdHRlcm4uc3Vic3RyaW5nKGFudGVDb250ZXh0TGVuZ3RoLCBhbnRlQ29udGV4dExlbmd0aCArIGtleUxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwb3N0Q29udGV4dExlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoKCkgLSBrZXlMZW5ndGggLSBhbnRlQ29udGV4dExlbmd0aDsKKyAgICAgICAgcG9zdENvbnRleHQgPSBudWxsOworICAgICAgICBpZiAocG9zdENvbnRleHRMZW5ndGggPiAwKSB7CisgICAgICAgICAgICBwb3N0Q29udGV4dCA9IG5ldyBTdHJpbmdNYXRjaGVyKHBhdHRlcm4uc3Vic3RyaW5nKGFudGVDb250ZXh0TGVuZ3RoICsga2V5TGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBTdHJpbmdSZXBsYWNlcihvdXRwdXQsIGN1cnNvclBvcyArIGN1cnNvck9mZnNldCwgZGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBwcmVjZWRpbmcgY29udGV4dCBsZW5ndGguICBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8KKyAgICAgKiBzdXBwb3J0IHRoZSA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gbWV0aG9kCisgICAgICogPGNvZGU+Z2V0TWF4aW11bUNvbnRleHRMZW5ndGgoKTwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIGludCBnZXRBbnRlQ29udGV4dExlbmd0aCgpIHsKKyAgICAgICAgcmV0dXJuIGFudGVDb250ZXh0TGVuZ3RoICsgKCgoZmxhZ3MgJiBBTkNIT1JfU1RBUlQpICE9IDApID8gMSA6IDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEludGVybmFsIG1ldGhvZC4gIFJldHVybnMgOC1iaXQgaW5kZXggdmFsdWUgZm9yIHRoaXMgcnVsZS4KKyAgICAgKiBUaGlzIGlzIHRoZSBsb3cgYnl0ZSBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBrZXksCisgICAgICogdW5sZXNzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGtleSBpcyBhIHNldC4gIElmIGl0J3MgYQorICAgICAqIHNldCwgb3Igb3RoZXJ3aXNlIGNhbiBtYXRjaCBtdWx0aXBsZSBrZXlzLCB0aGUgaW5kZXggdmFsdWUgaXMgLTEuCisgICAgICovCisgICAgZmluYWwgaW50IGdldEluZGV4VmFsdWUoKSB7CisgICAgICAgIGlmIChhbnRlQ29udGV4dExlbmd0aCA9PSBwYXR0ZXJuLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAvLyBBIHBhdHRlcm4gd2l0aCBqdXN0IGFudGUgY29udGV4dCB7c3VjaCBhcyBmb28pPmJhcn0gY2FuCisgICAgICAgICAgICAvLyBtYXRjaCBhbnkga2V5LgorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGludCBjID0gVVRGMTYuY2hhckF0KHBhdHRlcm4sIGFudGVDb250ZXh0TGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGRhdGEubG9va3VwTWF0Y2hlcihjKSA9PSBudWxsID8gKGMgJiAweEZGKSA6IC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIEludGVybmFsIG1ldGhvZC4gIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJ1bGUgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgICAgKiBpbmRleCB2YWx1ZS4gIFRoZSBpbmRleCB2YWx1ZSBpcyBhbiA4LWJpdCBpbnRlZ2VyLCAwLi4yNTUsCisgICAgICogcmVwcmVzZW50aW5nIHRoZSBsb3cgYnl0ZSBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBrZXkuCisgICAgICogSXQgbWF0Y2hlcyB0aGlzIHJ1bGUgaWYgaXQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorICAgICAqIGtleSwgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUga2V5IGlzIGEgc2V0LCBhbmQgdGhlIHNldAorICAgICAqIGNvbnRhaW5zIGFueSBjaGFyYWN0ZXIgd2l0aCBhIGxvdyBieXRlIGVxdWFsIHRvIHRoZSBpbmRleAorICAgICAqIHZhbHVlLiAgSWYgdGhlIHJ1bGUgY29udGFpbnMgb25seSBhbnRlIGNvbnRleHQsIGFzIGluIGZvbyk+YmFyLAorICAgICAqIHRoZW4gaXQgd2lsbCBtYXRjaCBhbnkga2V5LgorICAgICAqLworICAgIGZpbmFsIGJvb2xlYW4gbWF0Y2hlc0luZGV4VmFsdWUoaW50IHYpIHsKKyAgICAgICAgLy8gRGVsZWdhdGUgdG8gdGhlIGtleSwgb3IgaWYgdGhlcmUgaXMgbm9uZSwgdG8gdGhlIHBvc3RDb250ZXh0LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBuZWl0aGVyIHRoZW4gd2UgbWF0Y2ggYW55IGtleTsgcmV0dXJuIHRydWUuCisgICAgICAgIFVuaWNvZGVNYXRjaGVyIG0gPSAoa2V5ICE9IG51bGwpID8ga2V5IDogcG9zdENvbnRleHQ7CisgICAgICAgIHJldHVybiAobSAhPSBudWxsKSA/IG0ubWF0Y2hlc0luZGV4VmFsdWUodikgOiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoaXMgcnVsZSBtYXNrcyBhbm90aGVyIHJ1bGUuICBJZiByMSBtYXNrcyByMiB0aGVuCisgICAgICogcjEgbWF0Y2hlcyBhbnkgaW5wdXQgc3RyaW5nIHRoYXQgcjIgbWF0Y2hlcy4gIElmIHIxIG1hc2tzIHIyIGFuZCByMiBtYXNrcworICAgICAqIHIxIHRoZW4gcjEgPT0gcjIuICBFeGFtcGxlczogImE+eCIgbWFza3MgImFiPnkiLiAgImE+eCIgbWFza3MgImFbYl0+eSIuCisgICAgICogIltjXWE+eCIgbWFza3MgIltkY11hPnkiLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIG1hc2tzKFRyYW5zbGl0ZXJhdGlvblJ1bGUgcjIpIHsKKyAgICAgICAgLyogUnVsZSByMSBtYXNrcyBydWxlIHIyIGlmIHRoZSBzdHJpbmcgZm9ybWVkIG9mIHRoZQorICAgICAgICAgKiBhbnRlY29udGV4dCwga2V5LCBhbmQgcG9zdGNvbnRleHQgb3ZlcmxhcHMgaW4gdGhlIGZvbGxvd2luZworICAgICAgICAgKiB3YXk6CisgICAgICAgICAqCisgICAgICAgICAqIHIxOiAgICAgIGFha2trcHBwcAorICAgICAgICAgKiByMjogICAgIGFhYWtra2trcHBwcAorICAgICAgICAgKiAgICAgICAgICAgIF4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhlIHN0cmluZ3MgbXVzdCBiZSBhbGlnbmVkIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisgICAgICAgICAqIGtleS4gIFRoZSBsZW5ndGggb2YgcjEgdG8gdGhlIGxlZnQgb2YgdGhlIGFsaWdubWVudCBwb2ludAorICAgICAgICAgKiBtdXN0IGJlIDw9IHRoZSBsZW5ndGggb2YgcjIgdG8gdGhlIGxlZnQ7IGRpdHRvIGZvciB0aGUKKyAgICAgICAgICogcmlnaHQuICBUaGUgY2hhcmFjdGVycyBvZiByMSBtdXN0IGVxdWFsIChvciBiZSBhIHN1cGVyc2V0CisgICAgICAgICAqIG9mKSB0aGUgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzIG9mIHIyLiAgVGhlIHN1cGVyc2V0CisgICAgICAgICAqIG9wZXJhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIGNoZWNrIGZvciBVbmljb2RlU2V0CisgICAgICAgICAqIG1hc2tpbmcuCisgICAgICAgICAqCisgICAgICAgICAqIEFuY2hvcnM6ICBUd28gcGF0dGVybnMgdGhhdCBkaWZmZXIgb25seSBpbiBhbmNob3JzIG9ubHkKKyAgICAgICAgICogbWFzayBvbmUgYW5vdGhlciBpZiB0aGV5IGFyZSBleGFjdGx5IGVxdWFsLCBhbmQgcjIgaGFzCisgICAgICAgICAqIGFsbCB0aGUgYW5jaG9ycyByMSBoYXMgKG9wdGlvbmFsbHksIHBsdXMgc29tZSkuICBIZXJlIFkKKyAgICAgICAgICogbWVhbnMgdGhlIHJvdyBtYXNrcyB0aGUgY29sdW1uLCBOIG1lYW5zIGl0IGRvZXNuJ3QuCisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAgYWIgICBeYWIgICAgYWIkICBeYWIkCisgICAgICAgICAqICAgYWIgICAgWSAgICAgWSAgICAgWSAgICAgWQorICAgICAgICAgKiAgXmFiICAgIE4gICAgIFkgICAgIE4gICAgIFkKKyAgICAgICAgICogICBhYiQgICBOICAgICBOICAgICBZICAgICBZCisgICAgICAgICAqICBeYWIkICAgTiAgICAgTiAgICAgTiAgICAgWQorICAgICAgICAgKgorICAgICAgICAgKiBQb3N0IGNvbnRleHQ6IHthfWIgbWFza3MgYWIsIGJ1dCBub3QgdmljZSB2ZXJzYSwgc2luY2Uge2F9YgorICAgICAgICAgKiBtYXRjaGVzIGV2ZXJ5dGhpbmcgYWIgbWF0Y2hlcywgYW5kIHthfWIgbWF0Y2hlcyB7fGF8fWIgYnV0IGFiCisgICAgICAgICAqIGRvZXMgbm90LiAgUHJlIGNvbnRleHQgaXMgZGlmZmVyZW50IChhe2J9IGRvZXMgbm90IGFsaWduIHdpdGgKKyAgICAgICAgICogYWIpLgorICAgICAgICAgKi8KKworICAgICAgICAvKiBMSU1JVEFUSU9OIG9mIHRoZSBjdXJyZW50IG1hc2sgYWxnb3JpdGhtOiBTb21lIHJ1bGUKKyAgICAgICAgICogbWFza2luZ3MgYXJlIGN1cnJlbnRseSBub3QgZGV0ZWN0ZWQuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgICogIntMdX1dYT54IiBtYXNrcyAiQV1hPnkiLiAgVGhpcyBjYW4gYmUgYWRkZWQgbGF0ZXIuIFRPRE8KKyAgICAgICAgICovCisKKyAgICAgICAgaW50IGxlbiA9IHBhdHRlcm4ubGVuZ3RoKCk7CisgICAgICAgIGludCBsZWZ0ID0gYW50ZUNvbnRleHRMZW5ndGg7CisgICAgICAgIGludCBsZWZ0MiA9IHIyLmFudGVDb250ZXh0TGVuZ3RoOworICAgICAgICBpbnQgcmlnaHQgPSBwYXR0ZXJuLmxlbmd0aCgpIC0gbGVmdDsKKyAgICAgICAgaW50IHJpZ2h0MiA9IHIyLnBhdHRlcm4ubGVuZ3RoKCkgLSBsZWZ0MjsKKworICAgICAgICAvLyBUT0RPIENsZWFuIHRoaXMgdXAgLS0gc29tZSBsb2dpYyBtaWdodCBiZSBjb21iaW5hYmxlIHdpdGggdGhlCisgICAgICAgIC8vIG5leHQgc3RhdGVtZW50LgorCisgICAgICAgIC8vIFRlc3QgZm9yIGFuY2hvciBtYXNraW5nCisgICAgICAgIGlmIChsZWZ0ID09IGxlZnQyICYmIHJpZ2h0ID09IHJpZ2h0MiAmJgorICAgICAgICAgICAga2V5TGVuZ3RoIDw9IHIyLmtleUxlbmd0aCAmJgorICAgICAgICAgICAgcjIucGF0dGVybi5yZWdpb25NYXRjaGVzKDAsIHBhdHRlcm4sIDAsIGxlbikpIHsKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYm9vbGVhbiBsb2dpYyBpbXBsZW1lbnRzIHRoZSB0YWJsZSBhYm92ZQorICAgICAgICAgICAgcmV0dXJuIChmbGFncyA9PSByMi5mbGFncykgfHwKKyAgICAgICAgICAgICAgICAoISgoZmxhZ3MgJiBBTkNIT1JfU1RBUlQpICE9IDApICYmICEoKGZsYWdzICYgQU5DSE9SX0VORCkgIT0gMCkpIHx8CisgICAgICAgICAgICAgICAgKCgocjIuZmxhZ3MgJiBBTkNIT1JfU1RBUlQpICE9IDApICYmICgocjIuZmxhZ3MgJiBBTkNIT1JfRU5EKSAhPSAwKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGVmdCA8PSBsZWZ0MiAmJgorICAgICAgICAgICAgKHJpZ2h0IDwgcmlnaHQyIHx8CisgICAgICAgICAgICAgKHJpZ2h0ID09IHJpZ2h0MiAmJiBrZXlMZW5ndGggPD0gcjIua2V5TGVuZ3RoKSkgJiYKKyAgICAgICAgICAgIHIyLnBhdHRlcm4ucmVnaW9uTWF0Y2hlcyhsZWZ0MiAtIGxlZnQsIHBhdHRlcm4sIDAsIGxlbik7CisgICAgfQorCisgICAgc3RhdGljIGZpbmFsIGludCBwb3NCZWZvcmUoUmVwbGFjZWFibGUgc3RyLCBpbnQgcG9zKSB7CisgICAgICAgIHJldHVybiAocG9zID4gMCkgPworICAgICAgICAgICAgcG9zIC0gVVRGMTYuZ2V0Q2hhckNvdW50KHN0ci5jaGFyMzJBdChwb3MtMSkpIDoKKyAgICAgICAgICAgIHBvcyAtIDE7CisgICAgfQorCisgICAgc3RhdGljIGZpbmFsIGludCBwb3NBZnRlcihSZXBsYWNlYWJsZSBzdHIsIGludCBwb3MpIHsKKyAgICAgICAgcmV0dXJuIChwb3MgPj0gMCAmJiBwb3MgPCBzdHIubGVuZ3RoKCkpID8KKyAgICAgICAgICAgIHBvcyArIFVURjE2LmdldENoYXJDb3VudChzdHIuY2hhcjMyQXQocG9zKSkgOgorICAgICAgICAgICAgcG9zICsgMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBdHRlbXB0IGEgbWF0Y2ggYW5kIHJlcGxhY2VtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4gIFJldHVybgorICAgICAqIHRoZSBkZWdyZWUgb2YgbWF0Y2ggYmV0d2VlbiB0aGlzIHJ1bGUgYW5kIHRoZSBnaXZlbiB0ZXh0LiAgVGhlCisgICAgICogZGVncmVlIG9mIG1hdGNoIG1heSBiZSBtaXNtYXRjaCwgYSBwYXJ0aWFsIG1hdGNoLCBvciBhIGZ1bGwKKyAgICAgKiBtYXRjaC4gIEEgbWlzbWF0Y2ggbWVhbnMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBvZiB0aGUgdGV4dAorICAgICAqIGRvZXMgbm90IG1hdGNoIHRoZSBjb250ZXh0IG9yIGtleS4gIEEgcGFydGlhbCBtYXRjaCBtZWFucyBzb21lCisgICAgICogY29udGV4dCBhbmQga2V5IGNoYXJhY3RlcnMgbWF0Y2gsIGJ1dCB0aGUgdGV4dCBpcyBub3QgbG9uZworICAgICAqIGVub3VnaCB0byBtYXRjaCBhbGwgb2YgdGhlbS4gIEEgZnVsbCBtYXRjaCBtZWFucyBhbGwgY29udGV4dAorICAgICAqIGFuZCBrZXkgY2hhcmFjdGVycyBtYXRjaC4KKyAgICAgKgorICAgICAqIElmIGEgZnVsbCBtYXRjaCBpcyBvYnRhaW5lZCwgcGVyZm9ybSBhIHJlcGxhY2VtZW50LCB1cGRhdGUgcG9zLAorICAgICAqIGFuZCByZXR1cm4gVV9NQVRDSC4gIE90aGVyd2lzZSBib3RoIHRleHQgYW5kIHBvcyBhcmUgdW5jaGFuZ2VkLgorICAgICAqCisgICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQKKyAgICAgKiBAcGFyYW0gcG9zIHRoZSBwb3NpdGlvbiBpbmRpY2VzCisgICAgICogQHBhcmFtIGluY3JlbWVudGFsIGlmIFRSVUUsIHRlc3QgZm9yIHBhcnRpYWwgbWF0Y2hlcyB0aGF0IG1heQorICAgICAqIGJlIGNvbXBsZXRlZCBieSBhZGRpdGlvbmFsIHRleHQgaW5zZXJ0ZWQgYXQgcG9zLmxpbWl0LgorICAgICAqIEByZXR1cm4gb25lIG9mIDxjb2RlPlVfTUlTTUFUQ0g8L2NvZGU+LAorICAgICAqIDxjb2RlPlVfUEFSVElBTF9NQVRDSDwvY29kZT4sIG9yIDxjb2RlPlVfTUFUQ0g8L2NvZGU+LiAgSWYKKyAgICAgKiBpbmNyZW1lbnRhbCBpcyBGQUxTRSB0aGVuIFVfUEFSVElBTF9NQVRDSCB3aWxsIG5vdCBiZSByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG1hdGNoQW5kUmVwbGFjZShSZXBsYWNlYWJsZSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGluY3JlbWVudGFsKSB7CisgICAgICAgIC8vIE1hdGNoaW5nIGFuZCByZXBsYWNpbmcgYXJlIGRvbmUgaW4gb25lIG1ldGhvZCBiZWNhdXNlIHRoZQorICAgICAgICAvLyByZXBsYWNlbWVudCBvcGVyYXRpb24gbmVlZHMgaW5mb3JtYXRpb24gb2J0YWluZWQgZHVyaW5nIHRoZQorICAgICAgICAvLyBtYXRjaC4gIEFub3RoZXIgd2F5IHRvIGRvIHRoaXMgaXMgdG8gaGF2ZSB0aGUgbWF0Y2ggbWV0aG9kCisgICAgICAgIC8vIGNyZWF0ZSBhIG1hdGNoIHJlc3VsdCBzdHJ1Y3Qgd2l0aCByZWxldmFudCBvZmZzZXRzLCBhbmQgdG8gcGFzcworICAgICAgICAvLyB0aGlzIGludG8gdGhlIHJlcGxhY2UgbWV0aG9kLgorCisgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gTUFUQ0ggPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgLy8gUmVzZXQgc2VnbWVudCBtYXRjaCBkYXRhCisgICAgICAgIGlmIChzZWdtZW50cyAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8c2VnbWVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAoKFN0cmluZ01hdGNoZXIpIHNlZ21lbnRzW2ldKS5yZXNldE1hdGNoKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQga2V5TGltaXQ7CisgICAgICAgIGludFtdIGludFJlZiA9IG5ldyBpbnRbMV07CisKKyAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFudGUgQ29udGV4dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAvLyBBIG1pc21hdGNoIGluIHRoZSBhbnRlIGNvbnRleHQsIG9yIHdpdGggdGhlIHN0YXJ0IGFuY2hvciwKKyAgICAgICAgLy8gaXMgYW4gb3V0cmlnaHQgVV9NSVNNQVRDSCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYXJlCisgICAgICAgIC8vIGluY3JlbWVudGFsIG9yIG5vdC4KKyAgICAgICAgaW50IG9UZXh0OyAvLyBvZmZzZXQgaW50byAndGV4dCcKKyAgICAgICAgaW50IG1pbk9UZXh0OworCisgICAgICAgIC8vIE5vdGUgKDEpOiBXZSBwcm9jZXNzIHRleHQgaW4gMTYtYml0IGNvZGUgdW5pdHMsIHJhdGhlciB0aGFuCisgICAgICAgIC8vIDMyLWJpdCBjb2RlIHBvaW50cy4gIFRoaXMgd29ya3MgYmVjYXVzZSBzdGFuZC1pbnMgYXJlCisgICAgICAgIC8vIGFsd2F5cyBpbiB0aGUgQk1QIGFuZCBiZWNhdXNlIHdlIGFyZSBkb2luZyBhIGxpdGVyYWwgbWF0Y2gKKyAgICAgICAgLy8gb3BlcmF0aW9uLCB3aGljaCBjYW4gYmUgZG9uZSAxNi1iaXRzIGF0IGEgdGltZS4KKworICAgICAgICBpbnQgYW50ZUxpbWl0ID0gcG9zQmVmb3JlKHRleHQsIHBvcy5jb250ZXh0U3RhcnQpOworCisgICAgICAgIGludCBtYXRjaDsKKworICAgICAgICAvLyBTdGFydCByZXZlcnNlIG1hdGNoIGF0IGNoYXIgYmVmb3JlIHBvcy5zdGFydAorICAgICAgICBpbnRSZWZbMF0gPSBwb3NCZWZvcmUodGV4dCwgcG9zLnN0YXJ0KTsKKworICAgICAgICBpZiAoYW50ZUNvbnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgbWF0Y2ggPSBhbnRlQ29udGV4dC5tYXRjaGVzKHRleHQsIGludFJlZiwgYW50ZUxpbWl0LCBmYWxzZSk7CisgICAgICAgICAgICBpZiAobWF0Y2ggIT0gVW5pY29kZU1hdGNoZXIuVV9NQVRDSCkgeworICAgICAgICAgICAgICAgIHJldHVybiBVbmljb2RlTWF0Y2hlci5VX01JU01BVENIOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb1RleHQgPSBpbnRSZWZbMF07CisgICAgICAgIAorICAgICAgICBtaW5PVGV4dCA9IHBvc0FmdGVyKHRleHQsIG9UZXh0KTsKKworICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhcnQgQW5jaG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIGlmICgoKGZsYWdzICYgQU5DSE9SX1NUQVJUKSAhPSAwKSAmJiBvVGV4dCAhPSBhbnRlTGltaXQpIHsKKyAgICAgICAgICAgIHJldHVybiBVbmljb2RlTWF0Y2hlci5VX01JU01BVENIOworICAgICAgICB9CisKKyAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gS2V5IGFuZCBQb3N0IENvbnRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBpbnRSZWZbMF0gPSBwb3Muc3RhcnQ7CisKKyAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7CisgICAgICAgICAgICBtYXRjaCA9IGtleS5tYXRjaGVzKHRleHQsIGludFJlZiwgcG9zLmxpbWl0LCBpbmNyZW1lbnRhbCk7CisgICAgICAgICAgICBpZiAobWF0Y2ggIT0gVW5pY29kZU1hdGNoZXIuVV9NQVRDSCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGtleUxpbWl0ID0gaW50UmVmWzBdOworCisgICAgICAgIGlmIChwb3N0Q29udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoaW5jcmVtZW50YWwgJiYga2V5TGltaXQgPT0gcG9zLmxpbWl0KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGtleSBtYXRjaGVzIGp1c3QgYmVmb3JlIHBvcy5saW1pdCwgYW5kIHRoZXJlIGlzCisgICAgICAgICAgICAgICAgLy8gYSBwb3N0Q29udGV4dC4gIFNpbmNlIHdlIGFyZSBpbiBpbmNyZW1lbnRhbCBtb2RlLAorICAgICAgICAgICAgICAgIC8vIHdlIG11c3QgYXNzdW1lIG1vcmUgY2hhcmFjdGVycyBtYXkgYmUgaW5zZXJ0ZWQgYXQKKyAgICAgICAgICAgICAgICAvLyBwb3MubGltaXQgLS0gdGhpcyBpcyBhIHBhcnRpYWwgbWF0Y2guCisgICAgICAgICAgICAgICAgcmV0dXJuIFVuaWNvZGVNYXRjaGVyLlVfUEFSVElBTF9NQVRDSDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWF0Y2ggPSBwb3N0Q29udGV4dC5tYXRjaGVzKHRleHQsIGludFJlZiwgcG9zLmNvbnRleHRMaW1pdCwgaW5jcmVtZW50YWwpOworICAgICAgICAgICAgaWYgKG1hdGNoICE9IFVuaWNvZGVNYXRjaGVyLlVfTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvVGV4dCA9IGludFJlZlswXTsKKworICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0b3AgQW5jaG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIGlmICgoKGZsYWdzICYgQU5DSE9SX0VORCkpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChvVGV4dCAhPSBwb3MuY29udGV4dExpbWl0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFVuaWNvZGVNYXRjaGVyLlVfTUlTTUFUQ0g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5jcmVtZW50YWwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVW5pY29kZU1hdGNoZXIuVV9QQVJUSUFMX01BVENIOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09IFJFUExBQ0UgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAvLyBXZSBoYXZlIGEgZnVsbCBtYXRjaC4gIFRoZSBrZXkgaXMgYmV0d2VlbiBwb3Muc3RhcnQgYW5kCisgICAgICAgIC8vIGtleUxpbWl0LgorCisgICAgICAgIGludCBuZXdMZW5ndGggPSBvdXRwdXQucmVwbGFjZSh0ZXh0LCBwb3Muc3RhcnQsIGtleUxpbWl0LCBpbnRSZWYpOworICAgICAgICBpbnQgbGVuRGVsdGEgPSBuZXdMZW5ndGggLSAoa2V5TGltaXQgLSBwb3Muc3RhcnQpOworICAgICAgICBpbnQgbmV3U3RhcnQgPSBpbnRSZWZbMF07CisKKyAgICAgICAgb1RleHQgKz0gbGVuRGVsdGE7CisgICAgICAgIHBvcy5saW1pdCArPSBsZW5EZWx0YTsKKyAgICAgICAgcG9zLmNvbnRleHRMaW1pdCArPSBsZW5EZWx0YTsKKyAgICAgICAgLy8gUmVzdHJpY3QgbmV3IHZhbHVlIG9mIHN0YXJ0IHRvIFttaW5PVGV4dCwgbWluKG9UZXh0LCBwb3MubGltaXQpXS4KKyAgICAgICAgcG9zLnN0YXJ0ID0gTWF0aC5tYXgobWluT1RleHQsIE1hdGgubWluKE1hdGgubWluKG9UZXh0LCBwb3MubGltaXQpLCBuZXdTdGFydCkpOworICAgICAgICByZXR1cm4gVW5pY29kZU1hdGNoZXIuVV9NQVRDSDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBzb3VyY2Ugc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGlzIHJ1bGUuICBBcHBlbmQgaXQgdG8gdGhlCisgICAgICogZ2l2ZW4gc3RyaW5nLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9SdWxlKGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUpIHsKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJ1bGUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAgLy8gQWNjdW11bGF0ZSBzcGVjaWFsIGNoYXJhY3RlcnMgKGFuZCBub24tc3BlY2lhbHMgZm9sbG93aW5nIHRoZW0pCisgICAgICAgIC8vIGludG8gcXVvdGVCdWYuICBBcHBlbmQgcXVvdGVCdWYsIHdpdGhpbiBzaW5nbGUgcXVvdGVzLCB3aGVuCisgICAgICAgIC8vIGEgbm9uLXF1b3RlZCBlbGVtZW50IG11c3QgYmUgaW5zZXJ0ZWQuCisgICAgICAgIFN0cmluZ0J1ZmZlciBxdW90ZUJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgICAgICAvLyBEbyBub3QgZW1pdCB0aGUgYnJhY2VzICd7JyAnfScgYXJvdW5kIHRoZSBwYXR0ZXJuIGlmIHRoZXJlCisgICAgICAgIC8vIGlzIG5laXRoZXIgYW50ZUNvbnRleHQgbm9yIHBvc3RDb250ZXh0LgorICAgICAgICBib29sZWFuIGVtaXRCcmFjZXMgPQorICAgICAgICAgICAgKGFudGVDb250ZXh0ICE9IG51bGwpIHx8IChwb3N0Q29udGV4dCAhPSBudWxsKTsKKworICAgICAgICAvLyBFbWl0IHN0YXJ0IGFuY2hvcgorICAgICAgICBpZiAoKGZsYWdzICYgQU5DSE9SX1NUQVJUKSAhPSAwKSB7CisgICAgICAgICAgICBydWxlLmFwcGVuZCgnXicpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRW1pdCB0aGUgaW5wdXQgcGF0dGVybgorICAgICAgICBVdGlsaXR5LmFwcGVuZFRvUnVsZShydWxlLCBhbnRlQ29udGV4dCwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKworICAgICAgICBpZiAoZW1pdEJyYWNlcykgeworICAgICAgICAgICAgVXRpbGl0eS5hcHBlbmRUb1J1bGUocnVsZSwgJ3snLCB0cnVlLCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworICAgICAgICB9CisKKyAgICAgICAgVXRpbGl0eS5hcHBlbmRUb1J1bGUocnVsZSwga2V5LCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworCisgICAgICAgIGlmIChlbWl0QnJhY2VzKSB7CisgICAgICAgICAgICBVdGlsaXR5LmFwcGVuZFRvUnVsZShydWxlLCAnfScsIHRydWUsIGVzY2FwZVVucHJpbnRhYmxlLCBxdW90ZUJ1Zik7CisgICAgICAgIH0KKworICAgICAgICBVdGlsaXR5LmFwcGVuZFRvUnVsZShydWxlLCBwb3N0Q29udGV4dCwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKworICAgICAgICAvLyBFbWl0IGVuZCBhbmNob3IKKyAgICAgICAgaWYgKChmbGFncyAmIEFOQ0hPUl9FTkQpICE9IDApIHsKKyAgICAgICAgICAgIHJ1bGUuYXBwZW5kKCckJyk7CisgICAgICAgIH0KKworICAgICAgICBVdGlsaXR5LmFwcGVuZFRvUnVsZShydWxlLCAiID4gIiwgdHJ1ZSwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKworICAgICAgICAvLyBFbWl0IHRoZSBvdXRwdXQgcGF0dGVybgorCisgICAgICAgIFV0aWxpdHkuYXBwZW5kVG9SdWxlKHJ1bGUsIG91dHB1dC50b1JlcGxhY2VyUGF0dGVybihlc2NhcGVVbnByaW50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICB0cnVlLCBlc2NhcGVVbnByaW50YWJsZSwgcXVvdGVCdWYpOworCisgICAgICAgIFV0aWxpdHkuYXBwZW5kVG9SdWxlKHJ1bGUsICc7JywgdHJ1ZSwgZXNjYXBlVW5wcmludGFibGUsIHF1b3RlQnVmKTsKKworICAgICAgICByZXR1cm4gcnVsZS50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBnZXRDbGFzcygpLmdldE5hbWUoKSArICd7JyArIHRvUnVsZSh0cnVlKSArICd9JzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbmlvbiB0aGUgc2V0IG9mIGFsbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IGJlIG1vZGlmaWVkIGJ5IHRoaXMgcnVsZQorICAgICAqIGludG8gdGhlIGdpdmVuIHNldC4KKyAgICAgKi8KKyAgICB2b2lkIGFkZFNvdXJjZVNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKSB7CisgICAgICAgIGludCBsaW1pdCA9IGFudGVDb250ZXh0TGVuZ3RoICsga2V5TGVuZ3RoOworICAgICAgICBmb3IgKGludCBpPWFudGVDb250ZXh0TGVuZ3RoOyBpPGxpbWl0OyApIHsKKyAgICAgICAgICAgIGludCBjaCA9IFVURjE2LmNoYXJBdChwYXR0ZXJuLCBpKTsKKyAgICAgICAgICAgIGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGNoKTsKKyAgICAgICAgICAgIFVuaWNvZGVNYXRjaGVyIG1hdGNoZXIgPSBkYXRhLmxvb2t1cE1hdGNoZXIoY2gpOworICAgICAgICAgICAgaWYgKG1hdGNoZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRvVW5pb25Uby5hZGQoY2gpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVyLmFkZE1hdGNoU2V0VG8odG9VbmlvblRvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVuaW9uIHRoZSBzZXQgb2YgYWxsIGNoYXJhY3RlcnMgdGhhdCBtYXkgYmUgZW1pdHRlZCBieSB0aGlzIHJ1bGUKKyAgICAgKiBpbnRvIHRoZSBnaXZlbiBzZXQuCisgICAgICovCisgICAgdm9pZCBhZGRUYXJnZXRTZXRUbyhVbmljb2RlU2V0IHRvVW5pb25UbykgeworICAgICAgICBvdXRwdXQuYWRkUmVwbGFjZW1lbnRTZXRUbyh0b1VuaW9uVG8pOworICAgIH0KK30KKworLyoqCisgKiAkTG9nOiBUcmFuc2xpdGVyYXRpb25SdWxlLmphdmEsdiAkCisgKiBSZXZpc2lvbiAxLjQ3ICAyMDAyLzA2LzI4IDE5OjE1OjUzICBhbGFuCisgKiBqaXR0ZXJidWcgMTQzNDogaW1wcm92ZSBtZXRob2QgbmFtZXM7IG1pbm9yIGNsZWFudXAKKyAqCisgKiBSZXZpc2lvbiAxLjQ2ICAyMDAyLzA2LzI2IDE4OjEyOjM5ICBhbGFuCisgKiBqaXR0ZXJidWcgMTQzNDogaW5pdGlhbCBwdWJsaWMgaW1wbGVtZW50YXRpb24gb2YgZ2V0U291cmNlU2V0IGFuZCBnZXRUYXJnZXRTZXQKKyAqCisgKiBSZXZpc2lvbiAxLjQ1ICAyMDAyLzAyLzI1IDIyOjQzOjU3ICByYW0KKyAqIE1vdmUgVXRpbGl0eSBjbGFzcyB0byBpY3UuaW1wbAorICoKKyAqIFJldmlzaW9uIDEuNDQgIDIwMDIvMDIvMTYgMDM6MDY6MTYgIE1vaGFuCisgKiBJQ1U0SiByZW9yZ2FuaXphdGlvbgorICoKKyAqIFJldmlzaW9uIDEuNDMgIDIwMDIvMDIvMDkgMDE6MDE6NDcgIGFsYW4KKyAqIGppdHRlcmJ1ZyAxNTQ0OiBhZGQgY2hhcjMyQXQoKSB0byBSZXBsYWNlYWJsZQorICoKKyAqIFJldmlzaW9uIDEuNDIgIDIwMDIvMDIvMDcgMDA6NTM6NTQgIGFsYW4KKyAqIGppdHRlcmJ1ZyAxMjM0OiBtYWtlIG91dHB1dCBzaWRlIG9mIFJCVHMgb2JqZWN0LW9yaWVudGVkOyByZXdyaXRlIElEIHBhcnNlcnMgYW5kIG1vZHVsYXJpemUgdGhlbTsgaW1wbGVtZW50ICZBbnktTG93ZXIoKSBzdXBwb3J0CisgKgorICogUmV2aXNpb24gMS40MSAgMjAwMS8xMi8xMSAyMjoxMTowNCAgYWxhbgorICogaml0dGVyYnVnIDE1OTE6IGVkaXQgY29tbWVudHMKKyAqCisgKiBSZXZpc2lvbiAxLjQwICAyMDAxLzEyLzExIDE3OjQzOjU3ICBhbGFuCisgKiBqaXR0ZXJidWcgMTU5MTogY2xlYW4gdXAgVHJhbnNsaXRlcmF0aW9uUnVsZQorICoKKyAqIFJldmlzaW9uIDEuMzkgIDIwMDEvMTIvMDMgMjE6MzM6NTggIGFsYW4KKyAqIGppdHRlcmJ1ZyAxMzczOiBtb3JlIGZpeGVzIHRvIHN1cHBvcnQgc3VwcGxlbWVudGFscworICoKKyAqIFJldmlzaW9uIDEuMzggIDIwMDEvMTEvMzAgMjI6Mjc6MjkgIGFsYW4KKyAqIGppdHRlcmJ1ZyAxNTYwOiBmaXggZG91YmxlIGluY3JlbWVudCBidWcgaW4gZ2V0U291cmNlU2V0CisgKgorICogUmV2aXNpb24gMS4zNyAgMjAwMS8xMS8yOSAyMjozMToxOCAgYWxhbgorICogaml0dGVyYnVnIDE1NjA6IGFkZCBzb3VyY2Utc2V0IG1ldGhvZHMgYW5kIFRyYW5zbGl0ZXJhdG9yVXRpbGl0eSBjbGFzcworICoKKyAqIFJldmlzaW9uIDEuMzYgIDIwMDEvMTEvMjEgMjI6MjE6NDUgIGFsYW4KKyAqIGppdHRlcmJ1ZyAxNTMzOiBpbmNvcnBvcmF0ZSBNYXJrJ3MgcmV2aWV3IGNvbW1lbnRzOyBtb3ZlIGVzY2FwZSBoYW5kbGluZyBtZXRob2RzIHRvIFV0aWxpdHkKKyAqCisgKiBSZXZpc2lvbiAxLjM1ICAyMDAxLzExLzAyIDE3OjQ2OjA1ICBhbGFuCisgKiBqaXR0ZXJidWcgMTQyNjogZWxpbWluYXRlIE5PUCBjYWxsIHRvIGNvcHkoKQorICoKKyAqIFJldmlzaW9uIDEuMzQgIDIwMDEvMTAvMzAgMTg6MDQ6MDggIGFsYW4KKyAqIGppdHRlcmJ1ZyAxNDA2OiBtYWtlIHF1YW50aWZpZWQgc2VnbWVudHMgYmVoYXZlIGxpa2UgcGVybCBjb3VudGVycGFydHMKKyAqCisgKiBSZXZpc2lvbiAxLjMzICAyMDAxLzEwLzI1IDIzOjIyOjE1ICBhbGFuCisgKiBqaXR0ZXJidWcgNzM6IGNoYW5nZXMgdG8gc3VwcG9ydCB6ZXJvLWxlbmd0aCBtYXRjaGVycyBhdCBlbmQgb2Yga2V5CisgKgorICogUmV2aXNpb24gMS4zMiAgMjAwMS8xMC8yNSAyMjo0MjoyNCAgYWxhbgorICogaml0dGVyYnVnIDczOiB1c2UgaW50IGZvciBpbmRleCB2YWx1ZXMgdG8gYXZvaWQgc2lnbmVkbmVzcyBwcm9ibGVtcworICoKKyAqIFJldmlzaW9uIDEuMzEgIDIwMDEvMTAvMTggMjM6MDI6MzIgIGFsYW4KKyAqIGppdHRlcmJ1ZyA2MDogZml4IGhhbmRsaW5nIG9mIGFuY2hvcnMgaW4gdG9SdWxlCisgKgorICogUmV2aXNpb24gMS4zMCAgMjAwMS8xMC8wNCAyMjozMzo1MyAgYWxhbgorICogaml0dGVyYnVnIDY5OiBtaW5vciBmaXggdG8gaW5jcmVtZW50YWwgUkJUIGNvZGUKKyAqCisgKiBSZXZpc2lvbiAxLjI5ICAyMDAxLzEwLzAzIDAwOjE0OjIzICBhbGFuCisgKiBqaXR0ZXJidWcgNzM6IGZpbmlzaCBxdWFudGlmaWVyIGFuZCBzdXBwbGVtZW50YWwgY2hhciBzdXBwb3J0CisgKgorICogUmV2aXNpb24gMS4yOCAgMjAwMS8wOS8yNiAxODowMDowNiAgYWxhbgorICogaml0dGVyYnVnIDY3OiBzeW5jIHBhcnNlciB3aXRoIGljdTRjLCBhbGxvdyB1bmxpbWl0ZWQsIG5lc3RlZCBzZWdtZW50cworICoKKyAqIFJldmlzaW9uIDEuMjcgIDIwMDEvMDkvMTkgMTc6NDM6MzggIGFsYW4KKyAqIGppdHRlcmJ1ZyA2MDogaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0b1J1bGVzKCkKKyAqCisgKiBSZXZpc2lvbiAxLjI2ICAyMDAxLzA2LzI5IDIyOjM1OjQxICBhbGFuNGoKKyAqIEltcGxlbWVudCBBbnktVXBwZXIgQW55LUxvd2VyIGFuZCBBbnktVGl0bGUgdHJhbnNsaXRlcmF0b3JzCisgKgorICogUmV2aXNpb24gMS4yNSAgMjAwMC8xMS8yOSAxOToxMjozMiAgYWxhbjRqCisgKiBVcGRhdGUgZG9jcworICoKKyAqIFJldmlzaW9uIDEuMjQgIDIwMDAvMDgvMzAgMjA6NDA6MzAgIGFsYW40agorICogSW1wbGVtZW50IGFuY2hvcnMuCisgKgorICogUmV2aXNpb24gMS4yMyAgMjAwMC8wNi8yOSAyMTo1OToyMyAgYWxhbjRqCisgKiBGaXggaGFuZGxpbmcgb2YgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24gZmllbGRzCisgKgorICogUmV2aXNpb24gMS4yMiAgMjAwMC8wNS8xOCAyMTozNzoxOSAgYWxhbgorICogVXBkYXRlIGRvY3MKKyAqCisgKiBSZXZpc2lvbiAxLjIxICAyMDAwLzA0LzI4IDAxOjIyOjAxICBhbGFuCisgKiBVcGRhdGUgc3ludGF4IGRpc3BsYXllZCBieSB0b1N0cmluZworICoKKyAqIFJldmlzaW9uIDEuMjAgIDIwMDAvMDQvMjUgMTc6MTc6MzcgIGFsYW4KKyAqIEFkZCBSZXBsYWNlYWJsZS5jb3B5IHRvIHJldGFpbiBvdXQtb2YtYmFuZCBpbmZvIGR1cmluZyByZW9yZGVyaW5nLgorICoKKyAqIFJldmlzaW9uIDEuMTkgIDIwMDAvMDQvMjUgMDE6NDI6NTggIGFsYW4KKyAqIEFsbG93IGFyYml0cmFyeSBsZW5ndGggdmFyaWFibGUgdmFsdWVzLiBDbGVhbiB1cCBEYXRhIEFQSS4gVXBkYXRlIGphdmFkb2NzLgorICoKKyAqIFJldmlzaW9uIDEuMTggIDIwMDAvMDQvMjIgMDE6MjU6MTAgIGFsYW4KKyAqIEFkZCBzdXBwb3J0IGZvciBjdXJzb3IgcG9zaXRpb25lciAnQCc7IHVwZGF0ZSBqYXZhZG9jCisgKgorICogUmV2aXNpb24gMS4xNyAgMjAwMC8wNC8yMSAyMToxNjo0MCAgYWxhbgorICogTW9kaWZ5IHJ1bGUgc3ludGF4CisgKgorICogUmV2aXNpb24gMS4xNiAgMjAwMC8wNC8xOSAxNjozNDoxOCAgYWxhbgorICogQWRkIHNlZ21lbnQgc3VwcG9ydC4KKyAqCisgKiBSZXZpc2lvbiAxLjE1ICAyMDAwLzA0LzEyIDIwOjE3OjQ1ICBhbGFuCisgKiBEZWxlZ2F0ZSByZXBsYWNlIG9wZXJhdGlvbiB0byBydWxlIG9iamVjdAorICoKKyAqIFJldmlzaW9uIDEuMTQgIDIwMDAvMDMvMTAgMDQ6MDc6MjQgIGpvaG5mCisgKiBDb3B5cmlnaHQgdXBkYXRlCisgKgorICogUmV2aXNpb24gMS4xMyAgMjAwMC8wMi8xMCAwNzozNjoyNSAgam9obmYKKyAqIGZpeGVkIGltcG9ydHMgZm9yIGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eQorICoKKyAqIFJldmlzaW9uIDEuMTIgIDIwMDAvMDIvMDMgMTg6MTE6MTkgIEFsYW4KKyAqIFVzZSBhcnJheSByYXRoZXIgdGhhbiBoYXNodGFibGUgZm9yIGNoYXItdG8tc2V0IG1hcAorICoKKyAqIFJldmlzaW9uIDEuMTEgIDIwMDAvMDEvMjcgMTg6NTk6MTkgIEFsYW4KKyAqIFVzZSBQb3NpdGlvbiByYXRoZXIgdGhhbiBpbnRbXSBhbmQgbW92ZSBhbGwgc3ViY2xhc3Mgb3ZlcnJpZGVzIHRvIG9uZSBtZXRob2QgKGhhbmRsZVRyYW5zbGl0ZXJhdGUpCisgKgorICogUmV2aXNpb24gMS4xMCAgMjAwMC8wMS8xOCAyMDozNjoxNyAgQWxhbgorICogTWFrZSBVbmljb2RlU2V0IGluaGVyaXQgZnJvbSBVbmljb2RlRmlsdGVyCisgKgorICogUmV2aXNpb24gMS45ICAyMDAwLzAxLzE4IDAyOjM4OjU1ICBBbGFuCisgKiBGaXggZmlsdGVyaW5nIGJ1Zy4KKyAqCisgKiBSZXZpc2lvbiAxLjggIDIwMDAvMDEvMTMgMjM6NTM6MjMgIEFsYW4KKyAqIEZpeCBidWdzIGZvdW5kIGR1cmluZyBJQ1UgcG9ydAorICoKKyAqIFJldmlzaW9uIDEuNyAgMjAwMC8wMS8xMSAwNDoxMjowNiAgQWxhbgorICogQ2xlYW51cCwgZW1iZWxsaXNoIGNvbW1lbnRzCisgKgorICogUmV2aXNpb24gMS42ICAyMDAwLzAxLzExIDAyOjI1OjAzICBBbGFuCisgKiBSZXdyaXRlIFVuaWNvZGVTZXQgYW5kIFJCVCBwYXJzZXJzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIG5ldyBzeW50YXgKKyAqCisgKiBSZXZpc2lvbiAxLjUgIDIwMDAvMDEvMDQgMjE6NDM6NTcgIEFsYW4KKyAqIEFkZCBydWxlIGluZGV4aW5nLCBhbmQgbW92ZSBtYXNraW5nIGNoZWNrIHRvIFRyYW5zbGl0ZXJhdGlvblJ1bGVTZXQuCisgKgorICogUmV2aXNpb24gMS40ICAxOTk5LzEyLzIyIDAxOjQwOjU0ICBBbGFuCisgKiBDb25zb2xpZGF0ZSBydWxlIHBhdHRlcm4gYW50ZUNvbnRleHQsIGtleSwgYW5kIHBvc3RDb250ZXh0IGludG8gb25lIHN0cmluZy4KKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMjIgMDE6MDU6NTQgIEFsYW4KKyAqIEltcHJvdmUgbWFza2luZyBjaGVja2luZzsgdHVybiBpdCBvZmYgYnkgZGVmYXVsdCwgZm9yIGJldHRlciBwZXJmb3JtYW5jZQorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8yMSAyMzo1ODo0NCAgQWxhbgorICogRGV0ZWN0IGE+eCBtYXNraW5nIGE+eQorICovCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRpb25SdWxlU2V0LmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRpb25SdWxlU2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTI4ZWRjYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zbGl0ZXJhdGlvblJ1bGVTZXQuamF2YQpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVHJhbnNsaXRlcmF0aW9uUnVsZVNldC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMDYvMjggMTk6MTU6NTMgJAorICogJFJldmlzaW9uOiAxLjI1ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIEEgc2V0IG9mIHJ1bGVzIGZvciBhIDxjb2RlPlJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yPC9jb2RlPi4gIFRoaXMgc2V0IGVuY29kZXMKKyAqIHRoZSB0cmFuc2xpdGVyYXRpb24gaW4gb25lIGRpcmVjdGlvbiBmcm9tIG9uZSBzZXQgb2YgY2hhcmFjdGVycyBvciBzaG9ydAorICogc3RyaW5ncyB0byBhbm90aGVyLiAgQSA8Y29kZT5SdWxlQmFzZWRUcmFuc2xpdGVyYXRvcjwvY29kZT4gY29uc2lzdHMgb2YgdXAgdG8KKyAqIHR3byBzdWNoIHNldHMsIG9uZSBmb3IgdGhlIGZvcndhcmQgZGlyZWN0aW9uLCBhbmQgb25lIGZvciB0aGUgcmV2ZXJzZS4KKyAqCisgKiA8cD5BIDxjb2RlPlRyYW5zbGl0ZXJhdGlvblJ1bGVTZXQ8L2NvZGU+IGhhcyBvbmUgaW1wb3J0YW50IG9wZXJhdGlvbiwgdGhhdCBvZgorICogZmluZGluZyBhIG1hdGNoaW5nIHJ1bGUgYXQgYSBnaXZlbiBwb2ludCBpbiB0aGUgdGV4dC4gIFRoaXMgaXMgYWNjb21wbGlzaGVkCisgKiBieSB0aGUgPGNvZGU+ZmluZE1hdGNoKCk8L2NvZGU+IG1ldGhvZC4KKyAqCisgKiA8cD5Db3B5cmlnaHQgJmNvcHk7IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAdmVyc2lvbiAkUkNTZmlsZTogVHJhbnNsaXRlcmF0aW9uUnVsZVNldC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMjUgJCAkRGF0ZTogMjAwMi8wNi8yOCAxOToxNTo1MyAkCisgKi8KK2NsYXNzIFRyYW5zbGl0ZXJhdGlvblJ1bGVTZXQgeworICAgIC8qKgorICAgICAqIFZlY3RvciBvZiBydWxlcywgaW4gdGhlIG9yZGVyIGFkZGVkLgorICAgICAqLworICAgIHByaXZhdGUgVmVjdG9yIHJ1bGVWZWN0b3I7CisKKyAgICAvKioKKyAgICAgKiBMZW5ndGggb2YgdGhlIGxvbmdlc3QgcHJlY2VkaW5nIGNvbnRleHQKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtYXhDb250ZXh0TGVuZ3RoOworCisgICAgLyoqCisgICAgICogU29ydGVkIGFuZCBpbmRleGVkIHRhYmxlIG9mIHJ1bGVzLiAgVGhpcyBpcyBjcmVhdGVkIGJ5IGZyZWV6ZSgpIGZyb20KKyAgICAgKiB0aGUgcnVsZXMgaW4gcnVsZVZlY3Rvci4gIHJ1bGVzLmxlbmd0aCA+PSBydWxlVmVjdG9yLnNpemUoKSwgYW5kIHRoZQorICAgICAqIHJlZmVyZW5jZXMgaW4gcnVsZXNbXSBhcmUgYWxpYXNlcyBvZiB0aGUgcmVmZXJlbmNlcyBpbiBydWxlVmVjdG9yLgorICAgICAqIEEgc2luZ2xlIHJ1bGUgaW4gcnVsZVZlY3RvciBpcyBsaXN0ZWQgb25lIG9yIG1vcmUgdGltZXMgaW4gcnVsZXNbXS4KKyAgICAgKi8KKyAgICBwcml2YXRlIFRyYW5zbGl0ZXJhdGlvblJ1bGVbXSBydWxlczsKKworICAgIC8qKgorICAgICAqIEluZGV4IHRhYmxlLiAgRm9yIHRleHQgaGF2aW5nIGEgZmlyc3QgY2hhcmFjdGVyIGMsIGNvbXB1dGUgeCA9IGMmMHhGRi4KKyAgICAgKiBOb3cgdXNlIHJ1bGVzW2luZGV4W3hdLi5pbmRleFt4KzFdLTFdLiAgVGhpcyBpbmRleCB0YWJsZSBpcyBjcmVhdGVkIGJ5CisgICAgICogZnJlZXplKCkuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnRbXSBpbmRleDsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAiXHUwMEE5IElCTSBDb3Jwb3JhdGlvbiAxOTk5LTIwMDEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIG5ldyBlbXB0eSBydWxlIHNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgVHJhbnNsaXRlcmF0aW9uUnVsZVNldCgpIHsKKyAgICAgICAgcnVsZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgbWF4Q29udGV4dExlbmd0aCA9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBtYXhpbXVtIGNvbnRleHQgbGVuZ3RoLgorICAgICAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBwcmVjZWRpbmcgY29udGV4dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE1heGltdW1Db250ZXh0TGVuZ3RoKCkgeworICAgICAgICByZXR1cm4gbWF4Q29udGV4dExlbmd0aDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSBydWxlIHRvIHRoaXMgc2V0LiAgUnVsZXMgYXJlIGFkZGVkIGluIG9yZGVyLCBhbmQgb3JkZXIgaXMKKyAgICAgKiBzaWduaWZpY2FudC4KKyAgICAgKiBAcGFyYW0gcnVsZSB0aGUgcnVsZSB0byBhZGQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRSdWxlKFRyYW5zbGl0ZXJhdGlvblJ1bGUgcnVsZSkgeworICAgICAgICBydWxlVmVjdG9yLmFkZEVsZW1lbnQocnVsZSk7CisgICAgICAgIGludCBsZW47CisgICAgICAgIGlmICgobGVuID0gcnVsZS5nZXRBbnRlQ29udGV4dExlbmd0aCgpKSA+IG1heENvbnRleHRMZW5ndGgpIHsKKyAgICAgICAgICAgIG1heENvbnRleHRMZW5ndGggPSBsZW47CisgICAgICAgIH0KKworICAgICAgICBydWxlcyA9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2xvc2UgdGhpcyBydWxlIHNldCB0byBmdXJ0aGVyIGFkZGl0aW9ucywgY2hlY2sgaXQgZm9yIG1hc2tlZCBydWxlcywKKyAgICAgKiBhbmQgaW5kZXggaXQgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgc29tZSBydWxlcyBhcmUgbWFza2VkCisgICAgICovCisgICAgcHVibGljIHZvaWQgZnJlZXplKCkgeworICAgICAgICAvKiBDb25zdHJ1Y3QgdGhlIHJ1bGUgYXJyYXkgYW5kIGluZGV4IHRhYmxlLiAgV2UgcmVvcmRlciB0aGUKKyAgICAgICAgICogcnVsZXMgYnkgc29ydGluZyB0aGVtIGludG8gMjU2IGJpbnMuICBFYWNoIGJpbiBjb250YWlucyBhbGwKKyAgICAgICAgICogcnVsZXMgbWF0Y2hpbmcgdGhlIGluZGV4IHZhbHVlIGZvciB0aGF0IGJpbi4gIEEgcnVsZQorICAgICAgICAgKiBtYXRjaGVzIGFuIGluZGV4IHZhbHVlIGlmIHN0cmluZyB3aG9zZSBmaXJzdCBrZXkgY2hhcmFjdGVyCisgICAgICAgICAqIGhhcyBhIGxvdyBieXRlIGVxdWFsIHRvIHRoZSBpbmRleCB2YWx1ZSBjYW4gbWF0Y2ggdGhlIHJ1bGUuCisgICAgICAgICAqCisgICAgICAgICAqIEVhY2ggYmluIGNvbnRhaW5zIHplcm8gb3IgbW9yZSBydWxlcywgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAgICAgICogdGhleSB3ZXJlIGZvdW5kIG9yaWdpbmFsbHkuICBIb3dldmVyLCB0aGUgdG90YWwgcnVsZXMgaW4KKyAgICAgICAgICogdGhlIGJpbnMgbWF5IGV4Y2VlZCB0aGUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCB2ZWN0b3IsCisgICAgICAgICAqIHNpbmNlIHJ1bGVzIHRoYXQgaGF2ZSBhIHZhcmlhYmxlIGFzIHRoZWlyIGZpcnN0IGtleQorICAgICAgICAgKiBjaGFyYWN0ZXIgd2lsbCBnZW5lcmFsbHkgZmFsbCBpbnRvIG1vcmUgdGhhbiBvbmUgYmluLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGF0IGlzLCBlYWNoIGJpbiBjb250YWlucyBhbGwgcnVsZXMgdGhhdCBlaXRoZXIgaGF2ZSB0aGF0CisgICAgICAgICAqIGZpcnN0IGluZGV4IHZhbHVlIGFzIHRoZWlyIGZpcnN0IGtleSBjaGFyYWN0ZXIsIG9yIGhhdmUKKyAgICAgICAgICogYSBzZXQgY29udGFpbmluZyB0aGUgaW5kZXggdmFsdWUgYXMgdGhlaXIgZmlyc3QgY2hhcmFjdGVyLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IG4gPSBydWxlVmVjdG9yLnNpemUoKTsKKyAgICAgICAgaW5kZXggPSBuZXcgaW50WzI1N107IC8vIFtzaWNdCisgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigyKm4pOyAvLyBoZXVyaXN0aWM7IGFkanVzdCBhcyBuZWVkZWQKKworICAgICAgICAvKiBQcmVjb21wdXRlIHRoZSBpbmRleCB2YWx1ZXMuICBUaGlzIHNhdmVzIGEgTE9UIG9mIHRpbWUuCisgICAgICAgICAqLworICAgICAgICBpbnRbXSBpbmRleFZhbHVlID0gbmV3IGludFtuXTsKKyAgICAgICAgZm9yIChpbnQgaj0wOyBqPG47ICsraikgeworICAgICAgICAgICAgVHJhbnNsaXRlcmF0aW9uUnVsZSByID0gKFRyYW5zbGl0ZXJhdGlvblJ1bGUpIHJ1bGVWZWN0b3IuZWxlbWVudEF0KGopOworICAgICAgICAgICAgaW5kZXhWYWx1ZVtqXSA9IHIuZ2V0SW5kZXhWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHg9MDsgeDwyNTY7ICsreCkgeworICAgICAgICAgICAgaW5kZXhbeF0gPSB2LnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxuOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXhWYWx1ZVtqXSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleFZhbHVlW2pdID09IHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuYWRkRWxlbWVudChydWxlVmVjdG9yLmVsZW1lbnRBdChqKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgaW5kZXhWYWx1ZSBpcyA8IDAsIHRoZW4gdGhlIGZpcnN0IGtleSBjaGFyYWN0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYSBzZXQsIGFuZCB3ZSBtdXN0IHVzZSB0aGUgbW9yZSB0aW1lLWNvbnN1bWluZworICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaGVzSW5kZXhWYWx1ZSBjaGVjay4gIEluIHByYWN0aWNlIHRoaXMgaGFwcGVucworICAgICAgICAgICAgICAgICAgICAvLyByYXJlbHksIHNvIHdlIHNlbGRvbSB0cmVhZCB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0aW9uUnVsZSByID0gKFRyYW5zbGl0ZXJhdGlvblJ1bGUpIHJ1bGVWZWN0b3IuZWxlbWVudEF0KGopOworICAgICAgICAgICAgICAgICAgICBpZiAoci5tYXRjaGVzSW5kZXhWYWx1ZSh4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdi5hZGRFbGVtZW50KHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGluZGV4WzI1Nl0gPSB2LnNpemUoKTsKKworICAgICAgICAvKiBGcmVlemUgdGhpbmdzIGludG8gYW4gYXJyYXkuCisgICAgICAgICAqLworICAgICAgICBydWxlcyA9IG5ldyBUcmFuc2xpdGVyYXRpb25SdWxlW3Yuc2l6ZSgpXTsKKyAgICAgICAgdi5jb3B5SW50byhydWxlcyk7CisKKyAgICAgICAgU3RyaW5nQnVmZmVyIGVycm9ycyA9IG51bGw7CisKKyAgICAgICAgLyogQ2hlY2sgZm9yIG1hc2tpbmcuICBUaGlzIGlzIE1VQ0ggZmFzdGVyIHRoYW4gb3VyIG9sZCBjaGVjaywKKyAgICAgICAgICogd2hpY2ggd2FzIGVhY2ggcnVsZSBhZ2FpbnN0IGVhY2ggZm9sbG93aW5nIHJ1bGUsIHNpbmNlIHdlCisgICAgICAgICAqIG9ubHkgaGF2ZSB0byBjaGVjayBmb3IgbWFza2luZyB3aXRoaW4gZWFjaCBiaW4gbm93LiAgSXQncworICAgICAgICAgKiAyNTYqTyhuMl4yKSBpbnN0ZWFkIG9mIE8objFeMiksIHdoZXJlIG4xIGlzIHRoZSB0b3RhbCBydWxlCisgICAgICAgICAqIGNvdW50LCBhbmQgbjIgaXMgdGhlIHBlci1iaW4gcnVsZSBjb3VudC4gIEJ1dCBuMjw8bjEsIHNvCisgICAgICAgICAqIGl0J3MgYSBiaWcgd2luLgorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChpbnQgeD0wOyB4PDI1NjsgKyt4KSB7CisgICAgICAgICAgICBmb3IgKGludCBqPWluZGV4W3hdOyBqPGluZGV4W3grMV0tMTsgKytqKSB7CisgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0aW9uUnVsZSByMSA9IHJ1bGVzW2pdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGs9aisxOyBrPGluZGV4W3grMV07ICsraykgeworICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRpb25SdWxlIHIyID0gcnVsZXNba107CisgICAgICAgICAgICAgICAgICAgIGlmIChyMS5tYXNrcyhyMikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoIlJ1bGUgIiArIHIxICsgIiBtYXNrcyAiICsgcjIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm9ycyAhPSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGVycm9ycy50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRyYW5zbGl0ZXJhdGUgdGhlIGdpdmVuIHRleHQgd2l0aCB0aGUgZ2l2ZW4gVVRyYW5zUG9zaXRpb24KKyAgICAgKiBpbmRpY2VzLiAgUmV0dXJuIFRSVUUgaWYgdGhlIHRyYW5zbGl0ZXJhdGlvbiBzaG91bGQgY29udGludWUKKyAgICAgKiBvciBGQUxTRSBpZiBpdCBzaG91bGQgaGFsdCAoYmVjYXVzZSBvZiBhIFVfUEFSVElBTF9NQVRDSCBtYXRjaCkuCisgICAgICogTm90ZSB0aGF0IEZBTFNFIGlzIG9ubHkgZXZlciByZXR1cm5lZCBpZiBpc0luY3JlbWVudGFsIGlzIFRSVUUuCisgICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gYmUgdHJhbnNsaXRlcmF0ZWQKKyAgICAgKiBAcGFyYW0gcG9zIHRoZSBwb3NpdGlvbiBpbmRpY2VzLCB3aGljaCB3aWxsIGJlIHVwZGF0ZWQKKyAgICAgKiBAcGFyYW0gaW5jcmVtZW50YWwgaWYgVFJVRSwgYXNzdW1lIG5ldyB0ZXh0IG1heSBiZSBpbnNlcnRlZAorICAgICAqIGF0IGluZGV4LmxpbWl0LCBhbmQgcmV0dXJuIEZBTFNFIGlmIHRocmUgaXMgYSBwYXJ0aWFsIG1hdGNoLgorICAgICAqIEByZXR1cm4gVFJVRSB1bmxlc3MgYSBVX1BBUlRJQUxfTUFUQ0ggaGFzIGJlZW4gb2J0YWluZWQsCisgICAgICogaW5kaWNhdGluZyB0aGF0IHRyYW5zbGl0ZXJhdGlvbiBzaG91bGQgc3RvcCB1bnRpbCBtb3JlIHRleHQKKyAgICAgKiBhcnJpdmVzLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHRyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yLlBvc2l0aW9uIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5jcmVtZW50YWwpIHsKKyAgICAgICAgaW50IGluZGV4Qnl0ZSA9IHRleHQuY2hhcjMyQXQocG9zLnN0YXJ0KSAmIDB4RkY7CisgICAgICAgIGZvciAoaW50IGk9aW5kZXhbaW5kZXhCeXRlXTsgaTxpbmRleFtpbmRleEJ5dGUrMV07ICsraSkgeworICAgICAgICAgICAgaW50IG0gPSBydWxlc1tpXS5tYXRjaEFuZFJlcGxhY2UodGV4dCwgcG9zLCBpbmNyZW1lbnRhbCk7CisgICAgICAgICAgICBzd2l0Y2ggKG0pIHsKKyAgICAgICAgICAgIGNhc2UgVW5pY29kZU1hdGNoZXIuVV9NQVRDSDoKKyAgICAgICAgICAgICAgICBpZiAoVHJhbnNsaXRlcmF0b3IuREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKChpbmNyZW1lbnRhbCA/ICJSdWxlLmk6IG1hdGNoICI6IlJ1bGU6IG1hdGNoICIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLnRvUnVsZSh0cnVlKSArICIgPT4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmZvcm1hdElucHV0KHRleHQsIHBvcykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgVW5pY29kZU1hdGNoZXIuVV9QQVJUSUFMX01BVENIOgorICAgICAgICAgICAgICAgIGlmIChUcmFuc2xpdGVyYXRvci5ERUJVRykgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKGluY3JlbWVudGFsID8gIlJ1bGUuaTogcGFydGlhbCBtYXRjaCAiOiJSdWxlOiBwYXJ0aWFsIG1hdGNoICIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLnRvUnVsZSh0cnVlKSArICIgPT4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmZvcm1hdElucHV0KHRleHQsIHBvcykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gTm8gbWF0Y2ggb3IgcGFydGlhbCBtYXRjaCBmcm9tIGFueSBydWxlCisgICAgICAgIHBvcy5zdGFydCArPSBVVEYxNi5nZXRDaGFyQ291bnQodGV4dC5jaGFyMzJBdChwb3Muc3RhcnQpKTsKKyAgICAgICAgaWYgKFRyYW5zbGl0ZXJhdG9yLkRFQlVHKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKGluY3JlbWVudGFsID8gIlJ1bGUuaTogbm8gbWF0Y2ggPT4gIjoiUnVsZTogbm8gbWF0Y2ggPT4gIikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZm9ybWF0SW5wdXQodGV4dCwgcG9zKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIHJ1bGUgc3RyaW5ncyB0aGF0IHJlcHJlc2VudHMgdGhpcyBydWxlIHNldC4KKyAgICAgKi8KKyAgICBTdHJpbmcgdG9SdWxlcyhib29sZWFuIGVzY2FwZVVucHJpbnRhYmxlKSB7CisgICAgICAgIGludCBpOworICAgICAgICBpbnQgY291bnQgPSBydWxlVmVjdG9yLnNpemUoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJ1bGVTb3VyY2UgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgICAgICBydWxlU291cmNlLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdGlvblJ1bGUgciA9CisgICAgICAgICAgICAgICAgKFRyYW5zbGl0ZXJhdGlvblJ1bGUpIHJ1bGVWZWN0b3IuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgcnVsZVNvdXJjZS5hcHBlbmQoci50b1J1bGUoZXNjYXBlVW5wcmludGFibGUpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnVsZVNvdXJjZS50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgc2V0IG9mIGFsbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IGJlIG1vZGlmaWVkIChnZXRUYXJnZXQ9ZmFsc2UpCisgICAgICogb3IgZW1pdHRlZCAoZ2V0VGFyZ2V0PXRydWUpIGJ5IHRoaXMgc2V0LgorICAgICAqLworICAgIFVuaWNvZGVTZXQgZ2V0U291cmNlVGFyZ2V0U2V0KGJvb2xlYW4gZ2V0VGFyZ2V0KSB7CisgICAgICAgIFVuaWNvZGVTZXQgc2V0ID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgaW50IGNvdW50ID0gcnVsZVZlY3Rvci5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICBUcmFuc2xpdGVyYXRpb25SdWxlIHIgPQorICAgICAgICAgICAgICAgIChUcmFuc2xpdGVyYXRpb25SdWxlKSBydWxlVmVjdG9yLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGlmIChnZXRUYXJnZXQpIHsKKyAgICAgICAgICAgIAlyLmFkZFRhcmdldFNldFRvKHNldCk7CisgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgIHIuYWRkU291cmNlU2V0VG8oc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2V0OworICAgIH0KK30KKworLyogJExvZzogVHJhbnNsaXRlcmF0aW9uUnVsZVNldC5qYXZhLHYgJAorICogUmV2aXNpb24gMS4yNSAgMjAwMi8wNi8yOCAxOToxNTo1MyAgYWxhbgorICogaml0dGVyYnVnIDE0MzQ6IGltcHJvdmUgbWV0aG9kIG5hbWVzOyBtaW5vciBjbGVhbnVwCisgKgorLyogUmV2aXNpb24gMS4yNCAgMjAwMi8wNi8yNiAxODoxMjo0MCAgYWxhbgorLyogaml0dGVyYnVnIDE0MzQ6IGluaXRpYWwgcHVibGljIGltcGxlbWVudGF0aW9uIG9mIGdldFNvdXJjZVNldCBhbmQgZ2V0VGFyZ2V0U2V0CisvKgorLyogUmV2aXNpb24gMS4yMyAgMjAwMi8wMi8yNSAyMjo0Mzo1OCAgcmFtCisvKiBNb3ZlIFV0aWxpdHkgY2xhc3MgdG8gaWN1LmltcGwKKy8qCisvKiBSZXZpc2lvbiAxLjIyICAyMDAyLzAyLzE2IDAzOjA2OjE3ICBNb2hhbgorLyogSUNVNEogcmVvcmdhbml6YXRpb24KKy8qCisvKiBSZXZpc2lvbiAxLjIxICAyMDAyLzAyLzA5IDAxOjAxOjQ3ICBhbGFuCisvKiBqaXR0ZXJidWcgMTU0NDogYWRkIGNoYXIzMkF0KCkgdG8gUmVwbGFjZWFibGUKKy8qCisvKiBSZXZpc2lvbiAxLjIwICAyMDAxLzExLzI5IDIyOjMxOjE4ICBhbGFuCisvKiBqaXR0ZXJidWcgMTU2MDogYWRkIHNvdXJjZS1zZXQgbWV0aG9kcyBhbmQgVHJhbnNsaXRlcmF0b3JVdGlsaXR5IGNsYXNzCisvKgorLyogUmV2aXNpb24gMS4xOSAgMjAwMS8xMS8yOSAxNjoxMTo0NiAgYWxhbgorLyogaml0dGVyYnVnIDE1NjA6IGFkZCBkZWJ1Z2dpbmcgY29kZTsgZml4IGhhbmRsaW5nIG9mIHJ1bnM7IGRldGVjdCBpbmNvbXBsZXRlIG5vbi1pbmNyZW1lbnRhbCBwcm9jZXNzaW5nCisvKgorLyogUmV2aXNpb24gMS4xOCAgMjAwMS8xMS8yNyAyMTo1NzowNSAgYWxhbgorLyogaml0dGVyYnVnIDEzODk6IGluY29ycG9yYXRlIE1hcmsncyByZXZpZXcgY29tbWVudHMgLSBjb21tZW50cyBvbmx5CisvKgorLyogUmV2aXNpb24gMS4xNyAgMjAwMS8xMS8wNiAwNTowNjoyNiAgYWxhbgorLyogaml0dGVyYnVnIDYwOiBtYWtlIHRvUnVsZXMoKSByZWFkIGZyb20gb3JpZ2luYWwgdmVjdG9yCisvKgorLyogUmV2aXNpb24gMS4xNiAgMjAwMS8xMS8wNSAxODo1NTo1NCAgYWxhbgorLyogaml0dGVyYnVnIDYwOiBlbGlkZSBkdXBsaWNhdGUgcnVsZXMgaW4gdG9SdWxlcygpCisvKgorLyogUmV2aXNpb24gMS4xNSAgMjAwMS8xMC8yNiAyMjo0ODo0MSAgYWxhbgorLyogaml0dGVyYnVnIDY4OiBhZGQgREVCVUcgc3VwcG9ydCB0byBkdW1wIHJ1bGUtYmFzZWQgbWF0Y2ggcHJvZ3Jlc3Npb24KKy8qCisgKiBSZXZpc2lvbiAxLjE0ICAyMDAxLzEwLzI1IDIyOjMzOjE5ICBhbGFuCisgKiBqaXR0ZXJidWcgNzM6IHVzZSBpbnQgZm9yIGluZGV4IHZhbHVlcyB0byBhdm9pZCBzaWduZWRuZXNzIHByb2JsZW1zCisgKgorICogUmV2aXNpb24gMS4xMyAgMjAwMS8wOS8yNiAxODoxNzo0MiAgYWxhbgorICogaml0dGVyYnVnIDY3OiBkZWxldGUgb2Jzb2xldGUgY29kZQorICoKKyAqIFJldmlzaW9uIDEuMTIgIDIwMDEvMDkvMjYgMTg6MDA6MDYgIGFsYW4KKyAqIGppdHRlcmJ1ZyA2Nzogc3luYyBwYXJzZXIgd2l0aCBpY3U0YywgYWxsb3cgdW5saW1pdGVkLCBuZXN0ZWQgc2VnbWVudHMKKyAqCisgKiBSZXZpc2lvbiAxLjExICAyMDAxLzA5LzE5IDE3OjQzOjM4ICBhbGFuCisgKiBqaXR0ZXJidWcgNjA6IGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgdG9SdWxlcygpCisgKgorICogUmV2aXNpb24gMS4xMCAgMjAwMC8wNi8yOSAyMTo1OToyMyAgYWxhbjRqCisgKiBGaXggaGFuZGxpbmcgb2YgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24gZmllbGRzCisgKgorICogUmV2aXNpb24gMS45ICAyMDAwLzAzLzEwIDA0OjA3OjI0ICBqb2huZgorICogQ29weXJpZ2h0IHVwZGF0ZQorICoKKyAqIFJldmlzaW9uIDEuOCAgMjAwMC8wMi8wMyAxODoxMToxOSAgQWxhbgorICogVXNlIGFycmF5IHJhdGhlciB0aGFuIGhhc2h0YWJsZSBmb3IgY2hhci10by1zZXQgbWFwCisgKgorICogUmV2aXNpb24gMS43ICAyMDAwLzAxLzI3IDE4OjU5OjE5ICBBbGFuCisgKiBVc2UgUG9zaXRpb24gcmF0aGVyIHRoYW4gaW50W10gYW5kIG1vdmUgYWxsIHN1YmNsYXNzIG92ZXJyaWRlcyB0byBvbmUgbWV0aG9kIChoYW5kbGVUcmFuc2xpdGVyYXRlKQorICoKKyAqIFJldmlzaW9uIDEuNiAgMjAwMC8wMS8xOCAyMDozNjoxNyAgQWxhbgorICogTWFrZSBVbmljb2RlU2V0IGluaGVyaXQgZnJvbSBVbmljb2RlRmlsdGVyCisgKgorICogUmV2aXNpb24gMS41ICAyMDAwLzAxLzA0IDIxOjQzOjU3ICBBbGFuCisgKiBBZGQgcnVsZSBpbmRleGluZywgYW5kIG1vdmUgbWFza2luZyBjaGVjayB0byBUcmFuc2xpdGVyYXRpb25SdWxlU2V0LgorICoKKyAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMi8yMiAwMTo0MDo1NCAgQWxhbgorICogQ29uc29saWRhdGUgcnVsZSBwYXR0ZXJuIGFudGVDb250ZXh0LCBrZXksIGFuZCBwb3N0Q29udGV4dCBpbnRvIG9uZSBzdHJpbmcuCisgKgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzIyIDAxOjA1OjU0ICBBbGFuCisgKiBJbXByb3ZlIG1hc2tpbmcgY2hlY2tpbmc7IHR1cm4gaXQgb2ZmIGJ5IGRlZmF1bHQsIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMjIgMDA6MDE6MzYgIEFsYW4KKyAqIERldGVjdCBhPnggbWFza2luZyBhPnkKKyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zbGl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDYzM2I0MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zbGl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwxODAwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRvci5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjI6MzUgJAorICogJFJldmlzaW9uOiAxLjg2ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuZGF0YS5SZXNvdXJjZVJlYWRlcjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5DYXNlSW5zZW5zaXRpdmVTdHJpbmc7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyUHJvcGVydHk7CisKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlUG9zaXRpb247CitpbXBvcnQgamF2YS50ZXh0LlJ1bGVCYXNlZENvbGxhdG9yOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKKworLyoqCisgKiA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gaXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdAorICogdHJhbnNsaXRlcmF0ZXMgdGV4dCBmcm9tIG9uZSBmb3JtYXQgdG8gYW5vdGhlci4gIFRoZSBtb3N0IGNvbW1vbgorICoga2luZCBvZiB0cmFuc2xpdGVyYXRvciBpcyBhIHNjcmlwdCwgb3IgYWxwaGFiZXQsIHRyYW5zbGl0ZXJhdG9yLgorICogRm9yIGV4YW1wbGUsIGEgUnVzc2lhbiB0byBMYXRpbiB0cmFuc2xpdGVyYXRvciBjaGFuZ2VzIFJ1c3NpYW4gdGV4dAorICogd3JpdHRlbiBpbiBDeXJpbGxpYyBjaGFyYWN0ZXJzIHRvIHBob25ldGljYWxseSBlcXVpdmFsZW50IExhdGluCisgKiBjaGFyYWN0ZXJzLiAgSXQgZG9lcyBub3QgPGVtPnRyYW5zbGF0ZTwvZW0+IFJ1c3NpYW4gdG8gRW5nbGlzaCEKKyAqIFRyYW5zbGl0ZXJhdGlvbiwgdW5saWtlIHRyYW5zbGF0aW9uLCBvcGVyYXRlcyBvbiBjaGFyYWN0ZXJzLCB3aXRob3V0CisgKiByZWZlcmVuY2UgdG8gdGhlIG1lYW5pbmdzIG9mIHdvcmRzIGFuZCBzZW50ZW5jZXMuCisgKgorICogPHA+QWx0aG91Z2ggc2NyaXB0IGNvbnZlcnNpb24gaXMgaXRzIG1vc3QgY29tbW9uIHVzZSwgYQorICogdHJhbnNsaXRlcmF0b3IgY2FuIGFjdHVhbGx5IHBlcmZvcm0gYSBtb3JlIGdlbmVyYWwgY2xhc3Mgb2YgdGFza3MuCisgKiBJbiBmYWN0LCA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gZGVmaW5lcyBhIHZlcnkgZ2VuZXJhbCBBUEkKKyAqIHdoaWNoIHNwZWNpZmllcyBvbmx5IHRoYXQgYSBzZWdtZW50IG9mIHRoZSBpbnB1dCB0ZXh0IGlzIHJlcGxhY2VkCisgKiBieSBuZXcgdGV4dC4gIFRoZSBwYXJ0aWN1bGFycyBvZiB0aGlzIGNvbnZlcnNpb24gYXJlIGRldGVybWluZWQKKyAqIGVudGlyZWx5IGJ5IHN1YmNsYXNzZXMgb2YgPGNvZGU+VHJhbnNsaXRlcmF0b3I8L2NvZGU+LgorICoKKyAqIDxwPjxiPlRyYW5zbGl0ZXJhdG9ycyBhcmUgc3RhdGVsZXNzPC9iPgorICoKKyAqIDxwPjxjb2RlPlRyYW5zbGl0ZXJhdG9yPC9jb2RlPiBvYmplY3RzIGFyZSA8ZW0+c3RhdGVsZXNzPC9lbT47IHRoZXkKKyAqIHJldGFpbiBubyBpbmZvcm1hdGlvbiBiZXR3ZWVuIGNhbGxzIHRvCisgKiA8Y29kZT50cmFuc2xpdGVyYXRlKCk8L2NvZGU+LiAgQXMgYSByZXN1bHQsIHRocmVhZHMgbWF5IHNoYXJlCisgKiB0cmFuc2xpdGVyYXRvcnMgd2l0aG91dCBzeW5jaHJvbml6aW5nIHRoZW0uICBUaGlzIG1pZ2h0IHNlZW0gdG8KKyAqIGxpbWl0IHRoZSBjb21wbGV4aXR5IG9mIHRoZSB0cmFuc2xpdGVyYXRpb24gb3BlcmF0aW9uLiAgSW4KKyAqIHByYWN0aWNlLCBzdWJjbGFzc2VzIHBlcmZvcm0gY29tcGxleCB0cmFuc2xpdGVyYXRpb25zIGJ5IGRlbGF5aW5nCisgKiB0aGUgcmVwbGFjZW1lbnQgb2YgdGV4dCB1bnRpbCBpdCBpcyBrbm93biB0aGF0IG5vIG90aGVyCisgKiByZXBsYWNlbWVudHMgYXJlIHBvc3NpYmxlLiAgSW4gb3RoZXIgd29yZHMsIGFsdGhvdWdoIHRoZQorICogPGNvZGU+VHJhbnNsaXRlcmF0b3I8L2NvZGU+IG9iamVjdHMgYXJlIHN0YXRlbGVzcywgdGhlIHNvdXJjZSB0ZXh0CisgKiBpdHNlbGYgZW1ib2RpZXMgYWxsIHRoZSBuZWVkZWQgaW5mb3JtYXRpb24sIGFuZCBkZWxheWVkIG9wZXJhdGlvbgorICogYWxsb3dzIGFyYml0cmFyeSBjb21wbGV4aXR5LgorICoKKyAqIDxwPjxiPkJhdGNoIHRyYW5zbGl0ZXJhdGlvbjwvYj4KKyAqCisgKiA8cD5UaGUgc2ltcGxlc3Qgd2F5IHRvIHBlcmZvcm0gdHJhbnNsaXRlcmF0aW9uIGlzIGFsbCBhdCBvbmNlLCBvbiBhCisgKiBzdHJpbmcgb2YgZXhpc3RpbmcgdGV4dC4gIFRoaXMgaXMgcmVmZXJyZWQgdG8gYXMgPGVtPmJhdGNoPC9lbT4KKyAqIHRyYW5zbGl0ZXJhdGlvbi4gIEZvciBleGFtcGxlLCBnaXZlbiBhIHN0cmluZyA8Y29kZT5pbnB1dDwvY29kZT4KKyAqIGFuZCBhIHRyYW5zbGl0ZXJhdG9yIDxjb2RlPnQ8L2NvZGU+LCB0aGUgY2FsbAorICoKKyAqIDxibG9ja3F1b3RlPjxjb2RlPlN0cmluZyByZXN1bHQgPSB0LnRyYW5zbGl0ZXJhdGUoaW5wdXQpOworICogPC9jb2RlPjwvYmxvY2txdW90ZT4KKyAqCisgKiB3aWxsIHRyYW5zbGl0ZXJhdGUgaXQgYW5kIHJldHVybiB0aGUgcmVzdWx0LiAgT3RoZXIgbWV0aG9kcyBhbGxvdworICogdGhlIGNsaWVudCB0byBzcGVjaWZ5IGEgc3Vic3RyaW5nIHRvIGJlIHRyYW5zbGl0ZXJhdGVkIGFuZCB0byB1c2UKKyAqIHtAbGluayBSZXBsYWNlYWJsZX0gb2JqZWN0cyBpbnN0ZWFkIG9mIHN0cmluZ3MsIGluIG9yZGVyIHRvCisgKiBwcmVzZXJ2ZSBvdXQtb2YtYmFuZCBpbmZvcm1hdGlvbiAoc3VjaCBhcyB0ZXh0IHN0eWxlcykuCisgKgorICogPHA+PGI+S2V5Ym9hcmQgdHJhbnNsaXRlcmF0aW9uPC9iPgorICoKKyAqIDxwPlNvbWV3aGF0IG1vcmUgaW52b2x2ZWQgaXMgPGVtPmtleWJvYXJkPC9lbT4sIG9yIGluY3JlbWVudGFsCisgKiB0cmFuc2xpdGVyYXRpb24uICBUaGlzIGlzIHRoZSB0cmFuc2xpdGVyYXRpb24gb2YgdGV4dCB0aGF0IGlzCisgKiBhcnJpdmluZyBmcm9tIHNvbWUgc291cmNlICh0eXBpY2FsbHkgdGhlIHVzZXIncyBrZXlib2FyZCkgb25lCisgKiBjaGFyYWN0ZXIgYXQgYSB0aW1lLCBvciBpbiBzb21lIG90aGVyIHBpZWNlbWVhbCBmYXNoaW9uLgorICoKKyAqIDxwPkluIGtleWJvYXJkIHRyYW5zbGl0ZXJhdGlvbiwgYSA8Y29kZT5SZXBsYWNlYWJsZTwvY29kZT4gYnVmZmVyCisgKiBzdG9yZXMgdGhlIHRleHQuICBBcyB0ZXh0IGlzIGluc2VydGVkLCBhcyBtdWNoIGFzIHBvc3NpYmxlIGlzCisgKiB0cmFuc2xpdGVyYXRlZCBvbiB0aGUgZmx5LiAgVGhpcyBtZWFucyBhIEdVSSB0aGF0IGRpc3BsYXlzIHRoZQorICogY29udGVudHMgb2YgdGhlIGJ1ZmZlciBtYXkgc2hvdyB0ZXh0IGJlaW5nIG1vZGlmaWVkIGFzIGVhY2ggbmV3CisgKiBjaGFyYWN0ZXIgYXJyaXZlcy4KKyAqCisgKiA8cD5Db25zaWRlciB0aGUgc2ltcGxlIDxjb2RlPlJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yPC9jb2RlPjoKKyAqCisgKiA8YmxvY2txdW90ZT48Y29kZT4KKyAqIHRoJmd0O3t0aGV0YX08YnI+CisgKiB0Jmd0O3t0YXV9CisgKiA8L2NvZGU+PC9ibG9ja3F1b3RlPgorICoKKyAqIFdoZW4gdGhlIHVzZXIgdHlwZXMgJ3QnLCBub3RoaW5nIHdpbGwgaGFwcGVuLCBzaW5jZSB0aGUKKyAqIHRyYW5zbGl0ZXJhdG9yIGlzIHdhaXRpbmcgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyAnaCcuICBUbworICogcmVtZWR5IHRoaXMsIHdlIGludHJvZHVjZSB0aGUgbm90aW9uIG9mIGEgY3Vyc29yLCBtYXJrZWQgYnkgYSAnfCcKKyAqIGluIHRoZSBvdXRwdXQgc3RyaW5nOgorICoKKyAqIDxibG9ja3F1b3RlPjxjb2RlPgorICogdCZndDt8e3RhdX08YnI+CisgKiB7dGF1fWgmZ3Q7e3RoZXRhfQorICogPC9jb2RlPjwvYmxvY2txdW90ZT4KKyAqCisgKiBOb3cgd2hlbiB0aGUgdXNlciB0eXBlcyAndCcsIHRhdSBhcHBlYXJzLCBhbmQgaWYgdGhlIG5leHQgY2hhcmFjdGVyCisgKiBpcyAnaCcsIHRoZSB0YXUgY2hhbmdlcyB0byBhIHRoZXRhLiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkKKyAqIG1haW50YWluaW5nIGEgY3Vyc29yIHBvc2l0aW9uIChpbmRlcGVuZGVudCBvZiB0aGUgaW5zZXJ0aW9uIHBvaW50LAorICogYW5kIGludmlzaWJsZSBpbiB0aGUgR1VJKSBhY3Jvc3MgY2FsbHMgdG8KKyAqIDxjb2RlPnRyYW5zbGl0ZXJhdGUoKTwvY29kZT4uICBUeXBpY2FsbHksIHRoZSBjdXJzb3Igd2lsbAorICogYmUgY29pbmNpZGVudCB3aXRoIHRoZSBpbnNlcnRpb24gcG9pbnQsIGJ1dCBpbiBhIGNhc2UgbGlrZSB0aGUgb25lCisgKiBhYm92ZSwgaXQgd2lsbCBwcmVjZWRlIHRoZSBpbnNlcnRpb24gcG9pbnQuCisgKgorICogPHA+S2V5Ym9hcmQgdHJhbnNsaXRlcmF0aW9uIG1ldGhvZHMgbWFpbnRhaW4gYSBzZXQgb2YgdGhyZWUgaW5kaWNlcworICogdGhhdCBhcmUgdXBkYXRlZCB3aXRoIGVhY2ggY2FsbCB0bworICogPGNvZGU+dHJhbnNsaXRlcmF0ZSgpPC9jb2RlPiwgaW5jbHVkaW5nIHRoZSBjdXJzb3IsIHN0YXJ0LAorICogYW5kIGxpbWl0LiAgVGhlc2UgaW5kaWNlcyBhcmUgY2hhbmdlZCBieSB0aGUgbWV0aG9kLCBhbmQgdGhleSBhcmUKKyAqIHBhc3NlZCBpbiBhbmQgb3V0IHZpYSBhIFBvc2l0aW9uIG9iamVjdC4gVGhlIDxjb2RlPnN0YXJ0PC9jb2RlPiBpbmRleAorICogbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3Vic3RyaW5nIHRoYXQgdGhlIHRyYW5zbGl0ZXJhdG9yIHdpbGwKKyAqIGxvb2sgYXQuICBJdCBpcyBhZHZhbmNlZCBhcyB0ZXh0IGJlY29tZXMgY29tbWl0dGVkIChidXQgaXQgaXMgbm90CisgKiB0aGUgY29tbWl0dGVkIGluZGV4OyB0aGF0J3MgdGhlIDxjb2RlPmN1cnNvcjwvY29kZT4pLiAgVGhlCisgKiA8Y29kZT5jdXJzb3I8L2NvZGU+IGluZGV4LCBkZXNjcmliZWQgYWJvdmUsIG1hcmtzIHRoZSBwb2ludCBhdAorICogd2hpY2ggdGhlIHRyYW5zbGl0ZXJhdG9yIGxhc3Qgc3RvcHBlZCwgZWl0aGVyIGJlY2F1c2UgaXQgcmVhY2hlZAorICogdGhlIGVuZCwgb3IgYmVjYXVzZSBpdCByZXF1aXJlZCBtb3JlIGNoYXJhY3RlcnMgdG8gZGlzYW1iaWd1YXRlCisgKiBiZXR3ZWVuIHBvc3NpYmxlIGlucHV0cy4gIFRoZSA8Y29kZT5jdXJzb3I8L2NvZGU+IGNhbiBhbHNvIGJlCisgKiBleHBsaWNpdGx5IHNldCBieSBydWxlcyBpbiBhIDxjb2RlPlJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yPC9jb2RlPi4KKyAqIEFueSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgPGNvZGU+Y3Vyc29yPC9jb2RlPiBpbmRleCBhcmUgZnJvemVuOworICogZnV0dXJlIGtleWJvYXJkIHRyYW5zbGl0ZXJhdGlvbiBjYWxscyB3aXRoaW4gdGhpcyBpbnB1dCBzZXF1ZW5jZQorICogd2lsbCBub3QgY2hhbmdlIHRoZW0uICBOZXcgdGV4dCBpcyBpbnNlcnRlZCBhdCB0aGUKKyAqIDxjb2RlPmxpbWl0PC9jb2RlPiBpbmRleCwgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgc3Vic3RyaW5nIHRoYXQKKyAqIHRoZSB0cmFuc2xpdGVyYXRvciBsb29rcyBhdC4KKyAqCisgKiA8cD5CZWNhdXNlIGtleWJvYXJkIHRyYW5zbGl0ZXJhdGlvbiBhc3N1bWVzIHRoYXQgbW9yZSBjaGFyYWN0ZXJzCisgKiBhcmUgdG8gYXJyaXZlLCBpdCBpcyBjb25zZXJ2YXRpdmUgaW4gaXRzIG9wZXJhdGlvbi4gIEl0IG9ubHkKKyAqIHRyYW5zbGl0ZXJhdGVzIHdoZW4gaXQgY2FuIGRvIHNvIHVuYW1iaWd1b3VzbHkuICBPdGhlcndpc2UgaXQgd2FpdHMKKyAqIGZvciBtb3JlIGNoYXJhY3RlcnMgdG8gYXJyaXZlLiAgV2hlbiB0aGUgY2xpZW50IGNvZGUga25vd3MgdGhhdCBubworICogbW9yZSBjaGFyYWN0ZXJzIGFyZSBmb3J0aGNvbWluZywgcGVyaGFwcyBiZWNhdXNlIHRoZSB1c2VyIGhhcworICogcGVyZm9ybWVkIHNvbWUgaW5wdXQgdGVybWluYXRpb24gb3BlcmF0aW9uLCB0aGVuIGl0IHNob3VsZCBjYWxsCisgKiA8Y29kZT5maW5pc2hUcmFuc2xpdGVyYXRpb24oKTwvY29kZT4gdG8gY29tcGxldGUgYW55CisgKiBwZW5kaW5nIHRyYW5zbGl0ZXJhdGlvbnMuCisgKgorICogPHA+PGI+SW52ZXJzZXM8L2I+CisgKgorICogPHA+UGFpcnMgb2YgdHJhbnNsaXRlcmF0b3JzIG1heSBiZSBpbnZlcnNlcyBvZiBvbmUgYW5vdGhlci4gIEZvcgorICogZXhhbXBsZSwgaWYgdHJhbnNsaXRlcmF0b3IgPGI+QTwvYj4gdHJhbnNsaXRlcmF0ZXMgY2hhcmFjdGVycyBieQorICogaW5jcmVtZW50aW5nIHRoZWlyIFVuaWNvZGUgdmFsdWUgKHNvICJhYmMiIC0+ICJkZWYiKSwgYW5kCisgKiB0cmFuc2xpdGVyYXRvciA8Yj5CPC9iPiBkZWNyZW1lbnRzIGNoYXJhY3RlciB2YWx1ZXMsIHRoZW4gPGI+QTwvYj4KKyAqIGlzIGFuIGludmVyc2Ugb2YgPGI+QjwvYj4gYW5kIHZpY2UgdmVyc2EuICBJZiB3ZSBjb21wb3NlIDxiPkE8L2I+CisgKiB3aXRoIDxiPkI8L2I+IGluIGEgY29tcG91bmQgdHJhbnNsaXRlcmF0b3IsIHRoZSByZXN1bHQgaXMgdGhlCisgKiBpbmRlbnRpdHkgdHJhbnNsaXRlcmF0b3IsIHRoYXQgaXMsIGEgdHJhbnNsaXRlcmF0b3IgdGhhdCBkb2VzIG5vdAorICogY2hhbmdlIGl0cyBpbnB1dCB0ZXh0LgorICoKKyAqIFRoZSA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gbWV0aG9kIDxjb2RlPmdldEludmVyc2UoKTwvY29kZT4KKyAqIHJldHVybnMgYSB0cmFuc2xpdGVyYXRvcidzIGludmVyc2UsIGlmIG9uZSBleGlzdHMsIG9yCisgKiA8Y29kZT5udWxsPC9jb2RlPiBvdGhlcndpc2UuICBIb3dldmVyLCB0aGUgcmVzdWx0IG9mCisgKiA8Y29kZT5nZXRJbnZlcnNlKCk8L2NvZGU+IHVzdWFsbHkgd2lsbCA8ZW0+bm90PC9lbT4gYmUgYSB0cnVlCisgKiBtYXRoZW1hdGljYWwgaW52ZXJzZS4gIFRoaXMgaXMgYmVjYXVzZSB0cnVlIGludmVyc2UgdHJhbnNsaXRlcmF0b3JzCisgKiBhcmUgZGlmZmljdWx0IHRvIGZvcm11bGF0ZS4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0d28KKyAqIHRyYW5zbGl0ZXJhdG9yczogPGI+QUI8L2I+LCB3aGljaCB0cmFuc2xpdGVyYXRlcyB0aGUgY2hhcmFjdGVyICdBJworICogdG8gJ0InLCBhbmQgPGI+QkE8L2I+LCB3aGljaCB0cmFuc2xpdGVyYXRlcyAnQicgdG8gJ0EnLiAgSXQgbWlnaHQKKyAqIHNlZW0gdGhhdCB0aGVzZSBhcmUgZXhhY3QgaW52ZXJzZXMsIHNpbmNlCisgKgorICogPGJsb2NrcXVvdGU+IkEiIHggPGI+QUI8L2I+IC0+ICJCIjxicj4KKyAqICJCIiB4IDxiPkJBPC9iPiAtPiAiQSI8L2Jsb2NrcXVvdGU+CisgKgorICogd2hlcmUgJ3gnIHJlcHJlc2VudHMgdHJhbnNsaXRlcmF0aW9uLiAgSG93ZXZlciwKKyAqCisgKiA8YmxvY2txdW90ZT4iQUJDRCIgeCA8Yj5BQjwvYj4gLT4gIkJCQ0QiPGJyPgorICogIkJCQ0QiIHggPGI+QkE8L2I+IC0+ICJBQUNEIjwvYmxvY2txdW90ZT4KKyAqCisgKiBzbyA8Yj5BQjwvYj4gY29tcG9zZWQgd2l0aCA8Yj5CQTwvYj4gaXMgbm90IHRoZQorICogaWRlbnRpdHkuIE5vbmV0aGVsZXNzLCA8Yj5CQTwvYj4gbWF5IGJlIHVzZWZ1bGx5IGNvbnNpZGVyZWQgdG8gYmUKKyAqIDxiPkFCPC9iPidzIGludmVyc2UsIGFuZCBpdCBpcyBvbiB0aGlzIGJhc2lzIHRoYXQKKyAqIDxiPkFCPC9iPjxjb2RlPi5nZXRJbnZlcnNlKCk8L2NvZGU+IGNvdWxkIGxlZ2l0aW1hdGVseSByZXR1cm4KKyAqIDxiPkJBPC9iPi4KKyAqCisgKiA8cD48Yj5JRHMgYW5kIGRpc3BsYXkgbmFtZXM8L2I+CisgKgorICogPHA+QSB0cmFuc2xpdGVyYXRvciBpcyBkZXNpZ25hdGVkIGJ5IGEgc2hvcnQgaWRlbnRpZmllciBzdHJpbmcgb3IKKyAqIDxlbT5JRDwvZW0+LiAgSURzIGZvbGxvdyB0aGUgZm9ybWF0IDxlbT5zb3VyY2UtZGVzdGluYXRpb248L2VtPiwKKyAqIHdoZXJlIDxlbT5zb3VyY2U8L2VtPiBkZXNjcmliZXMgdGhlIGVudGl0eSBiZWluZyByZXBsYWNlZCwgYW5kCisgKiA8ZW0+ZGVzdGluYXRpb248L2VtPiBkZXNjcmliZXMgdGhlIGVudGl0eSByZXBsYWNpbmcKKyAqIDxlbT5zb3VyY2U8L2VtPi4gIFRoZSBlbnRpdGllcyBtYXkgYmUgdGhlIG5hbWVzIG9mIHNjcmlwdHMsCisgKiBwYXJ0aWN1bGFyIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzLCBvciB3aGF0ZXZlciBlbHNlIGl0IGlzIHRoYXQgdGhlCisgKiB0cmFuc2xpdGVyYXRvciBjb252ZXJ0cyB0byBvciBmcm9tLiAgRm9yIGV4YW1wbGUsIGEgdHJhbnNsaXRlcmF0b3IKKyAqIGZyb20gUnVzc2lhbiB0byBMYXRpbiBtaWdodCBiZSBuYW1lZCAiUnVzc2lhbi1MYXRpbiIuICBBCisgKiB0cmFuc2xpdGVyYXRvciBmcm9tIGtleWJvYXJkIGVzY2FwZSBzZXF1ZW5jZXMgdG8gTGF0aW4tMSBjaGFyYWN0ZXJzCisgKiBtaWdodCBiZSBuYW1lZCAiS2V5Ym9hcmRFc2NhcGUtTGF0aW4xIi4gIEJ5IGNvbnZlbnRpb24sIHN5c3RlbQorICogZW50aXR5IG5hbWVzIGFyZSBpbiBFbmdsaXNoLCB3aXRoIHRoZSBpbml0aWFsIGxldHRlcnMgb2Ygd29yZHMKKyAqIGNhcGl0YWxpemVkOyB1c2VyIGVudGl0eSBuYW1lcyBtYXkgZm9sbG93IGFueSBmb3JtYXQgc28gbG9uZyBhcworICogdGhleSBkbyBub3QgY29udGFpbiBkYXNoZXMuCisgKgorICogPHA+SW4gYWRkaXRpb24gdG8gcHJvZ3JhbW1hdGljIElEcywgdHJhbnNsaXRlcmF0b3Igb2JqZWN0cyBoYXZlCisgKiBkaXNwbGF5IG5hbWVzIGZvciBwcmVzZW50YXRpb24gaW4gdXNlciBpbnRlcmZhY2VzLCByZXR1cm5lZCBieQorICoge0BsaW5rICNnZXREaXNwbGF5TmFtZX0uCisgKgorICogPHA+PGI+RmFjdG9yeSBtZXRob2RzIGFuZCByZWdpc3RyYXRpb248L2I+CisgKgorICogPHA+SW4gZ2VuZXJhbCwgY2xpZW50IGNvZGUgc2hvdWxkIHVzZSB0aGUgZmFjdG9yeSBtZXRob2QKKyAqIDxjb2RlPmdldEluc3RhbmNlKCk8L2NvZGU+IHRvIG9idGFpbiBhbiBpbnN0YW5jZSBvZiBhCisgKiB0cmFuc2xpdGVyYXRvciBnaXZlbiBpdHMgSUQuICBWYWxpZCBJRHMgbWF5IGJlIGVudW1lcmF0ZWQgdXNpbmcKKyAqIDxjb2RlPmdldEF2YWlsYWJsZUlEcygpPC9jb2RlPi4gIFNpbmNlIHRyYW5zbGl0ZXJhdG9ycyBhcmUKKyAqIHN0YXRlbGVzcywgbXVsdGlwbGUgY2FsbHMgdG8gPGNvZGU+Z2V0SW5zdGFuY2UoKTwvY29kZT4gd2l0aCB0aGUKKyAqIHNhbWUgSUQgd2lsbCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0LgorICoKKyAqIDxwPkluIGFkZGl0aW9uIHRvIHRoZSBzeXN0ZW0gdHJhbnNsaXRlcmF0b3JzIHJlZ2lzdGVyZWQgYXQgc3RhcnR1cCwKKyAqIHVzZXIgdHJhbnNsaXRlcmF0b3JzIG1heSBiZSByZWdpc3RlcmVkIGJ5IGNhbGxpbmcKKyAqIDxjb2RlPnJlZ2lzdGVySW5zdGFuY2UoKTwvY29kZT4gYXQgcnVuIHRpbWUuICBUbyByZWdpc3RlciBhCisgKiB0cmFuc2xpdGVyYXRvciBzdWJjbGFzcyB3aXRob3V0IGluc3RhbnRpYXRpbmcgaXQgKHVudGlsIGl0IGlzCisgKiBuZWVkZWQpLCB1c2VycyBtYXkgY2FsbCA8Y29kZT5yZWdpc3RlckNsYXNzKCk8L2NvZGU+LgorICoKKyAqIDxwPjxiPkNvbXBvc2VkIHRyYW5zbGl0ZXJhdG9yczwvYj4KKyAqCisgKiA8cD5JbiBhZGRpdGlvbiB0byBidWlsdC1pbiBzeXN0ZW0gdHJhbnNsaXRlcmF0b3JzIGxpa2UKKyAqICJMYXRpbi1HcmVlayIsIHRoZXJlIGFyZSBhbHNvIGJ1aWx0LWluIDxlbT5jb21wb3NlZDwvZW0+CisgKiB0cmFuc2xpdGVyYXRvcnMuICBUaGVzZSBhcmUgaW1wbGVtZW50ZWQgYnkgY29tcG9zaW5nIHR3byBvciBtb3JlCisgKiBjb21wb25lbnQgdHJhbnNsaXRlcmF0b3JzLiAgRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgc2NyaXB0cyAiQSIsCisgKiAiQiIsICJDIiwgYW5kICJEIiwgYW5kIHdlIHdhbnQgdG8gdHJhbnNsaXRlcmF0ZSBiZXR3ZWVuIGFsbCBwYWlycworICogb2YgdGhlbSwgdGhlbiB3ZSBuZWVkIHRvIHdyaXRlIDEyIHRyYW5zbGl0ZXJhdG9yczogIkEtQiIsICJBLUMiLAorICogIkEtRCIsICJCLUEiLC4uLiwgIkQtQSIsICJELUIiLCAiRC1DIi4gIElmIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBjb252ZXJ0IGFsbCBzY3JpcHRzIHRvIGFuIGludGVybWVkaWF0ZSBzY3JpcHQgIk0iLCB0aGVuIGluc3RlYWQgb2YKKyAqIHdyaXRpbmcgMTIgcnVsZSBzZXRzLCB3ZSBvbmx5IG5lZWQgdG8gd3JpdGUgODogIkF+TSIsICJCfk0iLCAiQ35NIiwKKyAqICJEfk0iLCAiTX5BIiwgIk1+QiIsICJNfkMiLCAiTX5EIi4gIChUaGlzIG1pZ2h0IG5vdCBzZWVtIGxpa2UgYSBiaWcKKyAqIHdpbiwgYnV0IGl0J3MgcmVhbGx5IDI8ZW0+bjwvZW0+IHZzLiA8ZW0+bjwvZW0+PHN1cD4yPC9zdXA+IC0KKyAqIDxlbT5uPC9lbT4sIHNvIGFzIDxlbT5uPC9lbT4gZ2V0cyBsYXJnZXIgdGhlIGdhaW4gYmVjb21lcworICogc2lnbmlmaWNhbnQuICBXaXRoIDkgc2NyaXB0cywgaXQncyAxOCB2cy4gNzIgcnVsZSBzZXRzLCBhIGJpZworICogZGlmZmVyZW5jZS4pICBOb3RlIHRoZSB1c2Ugb2YgIn4iIHJhdGhlciB0aGFuICItIiBmb3IgdGhlIHNjcmlwdAorICogc2VwYXJhdG9yIGhlcmU7IHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGdpdmVuIHRyYW5zbGl0ZXJhdG9yIGlzCisgKiBpbnRlbmRlZCB0byBiZSBjb21wb3NlZCB3aXRoIG90aGVycywgcmF0aGVyIHRoYW4gYmUgdXNlZCBhcyBpcy4KKyAqCisgKiA8cD5Db21wb3NlZCB0cmFuc2xpdGVyYXRvcnMgY2FuIGJlIGluc3RhbnRpYXRlZCBhcyB1c3VhbC4gIEZvcgorICogZXhhbXBsZSwgdGhlIHN5c3RlbSB0cmFuc2xpdGVyYXRvciAiRGV2YW5hZ2FyaS1HdWphcmF0aSIgaXMgYQorICogY29tcG9zZWQgdHJhbnNsaXRlcmF0b3IgYnVpbHQgaW50ZXJuYWxseSBhcworICogIkRldmFuYWdhcml+SW50ZXJJbmRpYztJbnRlckluZGljfkd1amFyYXRpIi4gIFdoZW4gdGhpcworICogdHJhbnNsaXRlcmF0b3IgaXMgaW5zdGFudGlhdGVkLCBpdCBhcHBlYXJzIGV4dGVybmFsbHkgdG8gYmUgYQorICogc3RhbmRhcmQgdHJhbnNsaXRlcmF0b3IgKGUuZy4sIGdldElEKCkgcmV0dXJucworICogIkRldmFuYWdhcmktR3VqYXJhdGkiKS4KKyAqCisgKiA8cD48Yj5TdWJjbGFzc2luZzwvYj4KKyAqCisgKiA8cD5TdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBhYnN0cmFjdCBtZXRob2QKKyAqIDxjb2RlPmhhbmRsZVRyYW5zbGl0ZXJhdGUoKTwvY29kZT4uICA8cD5TdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZQorICogdGhlIDxjb2RlPnRyYW5zbGl0ZXJhdGUoKTwvY29kZT4gbWV0aG9kIHRha2luZyBhCisgKiA8Y29kZT5SZXBsYWNlYWJsZTwvY29kZT4gYW5kIHRoZSA8Y29kZT50cmFuc2xpdGVyYXRlKCk8L2NvZGU+CisgKiBtZXRob2QgdGFraW5nIGEgPGNvZGU+U3RyaW5nPC9jb2RlPiBhbmQgPGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPgorICogaWYgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIG1ldGhvZHMgY2FuIGJlIGltcHJvdmVkIG92ZXIgdGhlCisgKiBwZXJmb3JtYW5jZSBvYnRhaW5lZCBieSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgaW4gdGhpcyBjbGFzcy4KKyAqCisgKiA8cD5Db3B5cmlnaHQgJmNvcHk7IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFRyYW5zbGl0ZXJhdG9yIHsKKyAgICAvKioKKyAgICAgKiBEaXJlY3Rpb24gY29uc3RhbnQgaW5kaWNhdGluZyB0aGUgZm9yd2FyZCBkaXJlY3Rpb24gaW4gYSB0cmFuc2xpdGVyYXRvciwKKyAgICAgKiBlLmcuLCB0aGUgZm9yd2FyZCBydWxlcyBvZiBhIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLiAgQW4gIkEtQiIKKyAgICAgKiB0cmFuc2xpdGVyYXRvciB0cmFuc2xpdGVyYXRlcyBBIHRvIEIgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIGZvcndhcmQKKyAgICAgKiBkaXJlY3Rpb24sIGFuZCBCIHRvIEEgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLgorICAgICAqIEBzZWUgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IKKyAgICAgKiBAc2VlIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JXQVJEID0gMDsKKworICAgIC8qKgorICAgICAqIERpcmVjdGlvbiBjb25zdGFudCBpbmRpY2F0aW5nIHRoZSByZXZlcnNlIGRpcmVjdGlvbiBpbiBhIHRyYW5zbGl0ZXJhdG9yLAorICAgICAqIGUuZy4sIHRoZSByZXZlcnNlIHJ1bGVzIG9mIGEgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuICBBbiAiQS1CIgorICAgICAqIHRyYW5zbGl0ZXJhdG9yIHRyYW5zbGl0ZXJhdGVzIEEgdG8gQiB3aGVuIG9wZXJhdGluZyBpbiB0aGUgZm9yd2FyZAorICAgICAqIGRpcmVjdGlvbiwgYW5kIEIgdG8gQSB3aGVuIG9wZXJhdGluZyBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uCisgICAgICogQHNlZSBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcgorICAgICAqIEBzZWUgQ29tcG91bmRUcmFuc2xpdGVyYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFVkVSU0UgPSAxOworCisgICAgLyoqCisgICAgICogUG9zaXRpb24gc3RydWN0dXJlIGZvciBpbmNyZW1lbnRhbCB0cmFuc2xpdGVyYXRpb24uICBUaGlzIGRhdGEKKyAgICAgKiBzdHJ1Y3R1cmUgZGVmaW5lcyB0d28gc3Vic3RyaW5ncyBvZiB0aGUgdGV4dCBiZWluZworICAgICAqIHRyYW5zbGl0ZXJhdGVkLiAgVGhlIGZpcnN0IHJlZ2lvbiwgW2NvbnRleHRTdGFydCwKKyAgICAgKiBjb250ZXh0TGltaXQpLCBkZWZpbmVzIHdoYXQgY2hhcmFjdGVycyB0aGUgdHJhbnNsaXRlcmF0b3Igd2lsbAorICAgICAqIHJlYWQgYXMgY29udGV4dC4gIFRoZSBzZWNvbmQgcmVnaW9uLCBbc3RhcnQsIGxpbWl0KSwgZGVmaW5lcworICAgICAqIHdoYXQgY2hhcmFjdGVycyB3aWxsIGFjdHVhbGx5IGJlIHRyYW5zbGl0ZXJhdGVkLiAgVGhlIHNlY29uZAorICAgICAqIHJlZ2lvbiBzaG91bGQgYmUgYSBzdWJzZXQgb2YgdGhlIGZpcnN0LgorICAgICAqCisgICAgICogPHA+QWZ0ZXIgYSB0cmFuc2xpdGVyYXRpb24gb3BlcmF0aW9uLCBzb21lIG9mIHRoZSBpbmRpY2VzIGluIHRoaXMKKyAgICAgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBtb2RpZmllZC4gIFNlZSB0aGUgZmllbGQgZGVzY3JpcHRpb25zIGZvcgorICAgICAqIGRldGFpbHMuCisgICAgICoKKyAgICAgKiA8cD5jb250ZXh0U3RhcnQgPD0gc3RhcnQgPD0gbGltaXQgPD0gY29udGV4dExpbWl0CisgICAgICoKKyAgICAgKiA8cD5Ob3RlOiBBbGwgaW5kZXggdmFsdWVzIGluIHRoaXMgc3RydWN0dXJlIG11c3QgYmUgYXQgY29kZSBwb2ludAorICAgICAqIGJvdW5kYXJpZXMuICBUaGF0IGlzLCBub25lIG9mIHRoZW0gbWF5IG9jY3VyIGJldHdlZW4gdHdvIGNvZGUgdW5pdHMKKyAgICAgKiBvZiBhIHN1cnJvZ2F0ZSBwYWlyLiAgSWYgYW55IGluZGV4IGRvZXMgc3BsaXQgYSBzdXJyb2dhdGUgcGFpciwKKyAgICAgKiByZXN1bHRzIGFyZSB1bnNwZWNpZmllZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFBvc2l0aW9uIHsKKworICAgICAgICAvKioKKyAgICAgICAgICogQmVnaW5uaW5nIGluZGV4LCBpbmNsdXNpdmUsIG9mIHRoZSBjb250ZXh0IHRvIGJlIGNvbnNpZGVyZWQgZm9yCisgICAgICAgICAqIGEgdHJhbnNsaXRlcmF0aW9uIG9wZXJhdGlvbi4gIFRoZSB0cmFuc2xpdGVyYXRvciB3aWxsIGlnbm9yZQorICAgICAgICAgKiBhbnl0aGluZyBiZWZvcmUgdGhpcyBpbmRleC4gIElOUFVUL09VVFBVVCBwYXJhbWV0ZXI6IFRoaXMgcGFyYW1ldGVyCisgICAgICAgICAqIGlzIHVwZGF0ZWQgYnkgYSB0cmFuc2xpdGVyYXRpb24gb3BlcmF0aW9uIHRvIHJlZmxlY3QgdGhlIG1heGltdW0KKyAgICAgICAgICogYW1vdW50IG9mIGFudGVjb250ZXh0IG5lZWRlZCBieSBhIHRyYW5zbGl0ZXJhdG9yLgorICAgICAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgY29udGV4dFN0YXJ0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmRpbmcgaW5kZXgsIGV4Y2x1c2l2ZSwgb2YgdGhlIGNvbnRleHQgdG8gYmUgY29uc2lkZXJlZCBmb3IgYQorICAgICAgICAgKiB0cmFuc2xpdGVyYXRpb24gb3BlcmF0aW9uLiAgVGhlIHRyYW5zbGl0ZXJhdG9yIHdpbGwgaWdub3JlCisgICAgICAgICAqIGFueXRoaW5nIGF0IG9yIGFmdGVyIHRoaXMgaW5kZXguICBJTlBVVC9PVVRQVVQgcGFyYW1ldGVyOiBUaGlzCisgICAgICAgICAqIHBhcmFtZXRlciBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgY2hhbmdlcyBpbiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgICAgICAgKiB0ZXh0LCBidXQgcG9pbnRzIHRvIHRoZSBzYW1lIGxvZ2ljYWwgcG9zaXRpb24gaW4gdGhlIHRleHQuCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBjb250ZXh0TGltaXQ7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJlZ2lubmluZyBpbmRleCwgaW5jbHVzaXZlLCBvZiB0aGUgdGV4dCB0byBiZSB0cmFuc2xpdGVyYXRkLgorICAgICAgICAgKiBJTlBVVC9PVVRQVVQgcGFyYW1ldGVyOiBUaGlzIHBhcmFtZXRlciBpcyBhZHZhbmNlZCBwYXN0CisgICAgICAgICAqIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2xpdGVyYXRlZCBieSBhCisgICAgICAgICAqIHRyYW5zbGl0ZXJhdGlvbiBvcGVyYXRpb24uCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBzdGFydDsKKworICAgICAgICAvKioKKyAgICAgICAgICogRW5kaW5nIGluZGV4LCBleGNsdXNpdmUsIG9mIHRoZSB0ZXh0IHRvIGJlIHRyYW5zbGl0ZXJhdGQuCisgICAgICAgICAqIElOUFVUL09VVFBVVCBwYXJhbWV0ZXI6IFRoaXMgcGFyYW1ldGVyIGlzIHVwZGF0ZWQgdG8gcmVmbGVjdAorICAgICAgICAgKiBjaGFuZ2VzIGluIHRoZSBsZW5ndGggb2YgdGhlIHRleHQsIGJ1dCBwb2ludHMgdG8gdGhlIHNhbWUKKyAgICAgICAgICogbG9naWNhbCBwb3NpdGlvbiBpbiB0aGUgdGV4dC4KKyAgICAgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGxpbWl0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgUG9zaXRpb24gb2JqZWN0IHdpdGggc3RhcnQsIGxpbWl0LAorICAgICAgICAgKiBjb250ZXh0U3RhcnQsIGFuZCBjb250ZXh0TGltaXQgYWxsIGVxdWFsIHRvIHplcm8uCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFBvc2l0aW9uKCkgeworICAgICAgICAgICAgdGhpcygwLCAwLCAwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgUG9zaXRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHN0YXJ0LAorICAgICAgICAgKiBjb250ZXh0U3RhcnQsIGFuZCBjb250ZXh0TGltaXQuICBUaGUgbGltaXQgaXMgc2V0IHRvIHRoZQorICAgICAgICAgKiBjb250ZXh0TGltaXQuCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFBvc2l0aW9uKGludCBjb250ZXh0U3RhcnQsIGludCBjb250ZXh0TGltaXQsIGludCBzdGFydCkgeworICAgICAgICAgICAgdGhpcyhjb250ZXh0U3RhcnQsIGNvbnRleHRMaW1pdCwgc3RhcnQsIGNvbnRleHRMaW1pdCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ29uc3RydWN0cyBhIFBvc2l0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBzdGFydCwgbGltaXQsCisgICAgICAgICAqIGNvbnRleHRTdGFydCwgYW5kIGNvbnRleHRMaW1pdC4KKyAgICAgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUG9zaXRpb24oaW50IGNvbnRleHRTdGFydCwgaW50IGNvbnRleHRMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGxpbWl0KSB7CisgICAgICAgICAgICB0aGlzLmNvbnRleHRTdGFydCA9IGNvbnRleHRTdGFydDsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dExpbWl0ID0gY29udGV4dExpbWl0OworICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgdGhpcy5saW1pdCA9IGxpbWl0OworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENoZWNrIGFsbCBib3VuZHMuICBJZiB0aGV5IGFyZSBpbnZhbGlkLCB0aHJvdyBhbiBleGNlcHRpb24uCisgICAgICAgICAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHRoaXMgb2JqZWN0IGFwcGxpZXMgdG8KKyAgICAgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgYW55IGluZGljZXMgYXJlIG91dAorICAgICAgICAgKiBvZiBib3VuZHMKKyAgICAgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgZmluYWwgdm9pZCB2YWxpZGF0ZShpbnQgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoY29udGV4dFN0YXJ0IDwgMCB8fAorICAgICAgICAgICAgICAgIHN0YXJ0IDwgY29udGV4dFN0YXJ0IHx8CisgICAgICAgICAgICAgICAgbGltaXQgPCBzdGFydCB8fAorICAgICAgICAgICAgICAgIGNvbnRleHRMaW1pdCA8IGxpbWl0IHx8CisgICAgICAgICAgICAgICAgbGVuZ3RoIDwgY29udGV4dExpbWl0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBQb3NpdGlvbiB7Y3M9IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0U3RhcnQgKyAiLCBzPSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyAiLCBsPSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgKyAiLCBjbD0iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMaW1pdCArICJ9LCBsZW49IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvZ3JhbW1hdGljIG5hbWUsIGUuZy4sICJMYXRpbi1BcmFiaWMiLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIElEOworCisgICAgLyoqCisgICAgICogVGhpcyB0cmFuc2xpdGVyYXRvcidzIGZpbHRlci4gIEFueSBjaGFyYWN0ZXIgZm9yIHdoaWNoCisgICAgICogPHR0PmZpbHRlci5jb250YWlucygpPC90dD4gcmV0dXJucyA8dHQ+ZmFsc2U8L3R0PiB3aWxsIG5vdCBiZQorICAgICAqIGFsdGVyZWQgYnkgdGhpcyB0cmFuc2xpdGVyYXRvci4gIElmIDx0dD5maWx0ZXI8L3R0PiBpcworICAgICAqIDx0dD5udWxsPC90dD4gdGhlbiBubyBmaWx0ZXJpbmcgaXMgYXBwbGllZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFVuaWNvZGVGaWx0ZXIgZmlsdGVyOworCisgICAgcHJpdmF0ZSBpbnQgbWF4aW11bUNvbnRleHRMZW5ndGggPSAwOworCisgICAgLyoqCisgICAgICogU3lzdGVtIHRyYW5zbGl0ZXJhdG9yIHJlZ2lzdHJ5LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFRyYW5zbGl0ZXJhdG9yUmVnaXN0cnkgcmVnaXN0cnk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgZGlzcGxheU5hbWVDYWNoZTsKKworICAgIC8qKgorICAgICAqIFByZWZpeCBmb3IgcmVzb3VyY2UgYnVuZGxlIGtleSBmb3IgdGhlIGRpc3BsYXkgbmFtZSBmb3IgYQorICAgICAqIHRyYW5zbGl0ZXJhdG9yLiAgVGhlIElEIGlzIGFwcGVuZGVkIHRvIHRoaXMgdG8gZm9ybSB0aGUga2V5LgorICAgICAqIFRoZSByZXNvdXJjZSBidW5kbGUgdmFsdWUgc2hvdWxkIGJlIGEgU3RyaW5nLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSQl9ESVNQTEFZX05BTUVfUFJFRklYID0gIiVUcmFuc2xpdCUlIjsKKworICAgIC8qKgorICAgICAqIFByZWZpeCBmb3IgcmVzb3VyY2UgYnVuZGxlIGtleSBmb3IgdGhlIGRpc3BsYXkgbmFtZSBmb3IgYQorICAgICAqIHRyYW5zbGl0ZXJhdG9yIFNDUklQVC4gIFRoZSBJRCBpcyBhcHBlbmRlZCB0byB0aGlzIHRvIGZvcm0gdGhlIGtleS4KKyAgICAgKiBUaGUgcmVzb3VyY2UgYnVuZGxlIHZhbHVlIHNob3VsZCBiZSBhIFN0cmluZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkJfU0NSSVBUX0RJU1BMQVlfTkFNRV9QUkVGSVggPSAiJVRyYW5zbGl0JSI7CisKKyAgICAvKioKKyAgICAgKiBSZXNvdXJjZSBidW5kbGUga2V5IGZvciBkaXNwbGF5IG5hbWUgcGF0dGVybi4KKyAgICAgKiBUaGUgcmVzb3VyY2UgYnVuZGxlIHZhbHVlIHNob3VsZCBiZSBhIFN0cmluZyBmb3JtaW5nIGEKKyAgICAgKiBNZXNzYWdlRm9ybWF0IHBhdHRlcm4sIGUuZy46CisgICAgICogInswLGNob2ljZSwwI3wxI3sxfSBUcmFuc2xpdGVyYXRvcnwyI3sxfSB0byB7Mn0gVHJhbnNsaXRlcmF0b3J9Ii4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkJfRElTUExBWV9OQU1FX1BBVFRFUk4gPSAiVHJhbnNsaXRlcmF0b3JOYW1lUGF0dGVybiI7CisKKyAgICAvKioKKyAgICAgKiBEZWxpbWl0ZXIgYmV0d2VlbiBlbGVtZW50cyBpbiBhIGNvbXBvdW5kIElELgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVG8gYmUgbWFkZSBwYWNrYWdlIHByaXZhdGUgYWZ0ZXIgMjAwMy0xMi0wMS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGNoYXIgSURfREVMSU0gPSAnOyc7CisKKyAgICAvKioKKyAgICAgKiBEZWxpbWl0ZXIgYmVmb3JlIHRhcmdldCBpbiBhbiBJRC4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRvIGJlIG1hZGUgcGFja2FnZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBjaGFyIElEX1NFUCA9ICctJzsKKworICAgIC8qKgorICAgICAqIERlbGltaXRlciBiZWZvcmUgdmFyaWFudCBpbiBhbiBJRC4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRvIGJlIG1hZGUgcGFja2FnZSBwcml2YXRlIGFmdGVyIDIwMDMtMTItMDEuCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBjaGFyIFZBUklBTlRfU0VQID0gJy8nOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFOWSA9ICJBbnkiOworCisgICAgLyoqCisgICAgICogVG8gZW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIFRyYW5zbGl0ZXJhdG9yIGNvbXBvbmVudCwgc2V0CisgICAgICogREVCVUcgdG8gdHJ1ZS4KKyAgICAgKgorICAgICAqIE4uQi4gTWFrZSBzdXJlIHRvIHJlY29tcGlsZSBhbGwgb2YgdGhlIGNvbS5pYm0uaWN1LnRleHQgcGFja2FnZQorICAgICAqIGFmdGVyIGNoYW5naW5nIHRoaXMuICBFYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzICdhbnQgY2xlYW4KKyAgICAgKiBjb3JlJyAoJ2FudCcgd2lsbCBOT1QgcGljayB1cCB0aGUgZGVwZW5kZW5jeSBhdXRvbWF0aWNhbGx5KS4KKyAgICAgKgorICAgICAqIDw8VGhpcyBnZW5lcmF0ZXMgYSBsb3Qgb2Ygb3V0cHV0Lj4+CisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAiXHUwMEE5IElCTSBDb3Jwb3JhdGlvbiAxOTk5LiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CisKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAqIEBwYXJhbSBJRCB0aGUgc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoaXMgdHJhbnNsaXRlcmF0b3IKKyAgICAgKiBAcGFyYW0gZmlsdGVyIHRoZSBmaWx0ZXIuICBBbnkgY2hhcmFjdGVyIGZvciB3aGljaAorICAgICAqIDx0dD5maWx0ZXIuY29udGFpbnMoKTwvdHQ+IHJldHVybnMgPHR0PmZhbHNlPC90dD4gd2lsbCBub3QgYmUKKyAgICAgKiBhbHRlcmVkIGJ5IHRoaXMgdHJhbnNsaXRlcmF0b3IuICBJZiA8dHQ+ZmlsdGVyPC90dD4gaXMKKyAgICAgKiA8dHQ+bnVsbDwvdHQ+IHRoZW4gbm8gZmlsdGVyaW5nIGlzIGFwcGxpZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBJRCwgVW5pY29kZUZpbHRlciBmaWx0ZXIpIHsKKyAgICAgICAgaWYgKElEID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuSUQgPSBJRDsKKyAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJhbnNsaXRlcmF0ZXMgYSBzZWdtZW50IG9mIGEgc3RyaW5nLCB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSBzdHJpbmcgdG8gYmUgdHJhbnNsaXRlcmF0ZWQKKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGJlZ2lubmluZyBpbmRleCwgaW5jbHVzaXZlOyA8Y29kZT4wIDw9IHN0YXJ0CisgICAgICogPD0gbGltaXQ8L2NvZGU+LgorICAgICAqIEBwYXJhbSBsaW1pdCB0aGUgZW5kaW5nIGluZGV4LCBleGNsdXNpdmU7IDxjb2RlPnN0YXJ0IDw9IGxpbWl0CisgICAgICogPD0gdGV4dC5sZW5ndGgoKTwvY29kZT4uCisgICAgICogQHJldHVybiBUaGUgbmV3IGxpbWl0IGluZGV4LiAgVGhlIHRleHQgcHJldmlvdXNseSBvY2N1cHlpbmcgPGNvZGU+W3N0YXJ0LAorICAgICAqIGxpbWl0KTwvY29kZT4gaGFzIGJlZW4gdHJhbnNsaXRlcmF0ZWQsIHBvc3NpYmx5IHRvIGEgc3RyaW5nIG9mIGEgZGlmZmVyZW50CisgICAgICogbGVuZ3RoLCBhdCA8Y29kZT5bc3RhcnQsIDwvY29kZT48ZW0+bmV3LWxpbWl0PC9lbT48Y29kZT4pPC9jb2RlPiwgd2hlcmUKKyAgICAgKiA8ZW0+bmV3LWxpbWl0PC9lbT4gaXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgdGhlIGlucHV0IG9mZnNldHMgYXJlIG91dCBvZiBib3VuZHMsCisgICAgICogdGhlIHJldHVybmVkIHZhbHVlIGlzIC0xIGFuZCB0aGUgaW5wdXQgc3RyaW5nIHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBpbnQgdHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0LCBpbnQgc3RhcnQsIGludCBsaW1pdCkgeworICAgICAgICBpZiAoc3RhcnQgPCAwIHx8CisgICAgICAgICAgICBsaW1pdCA8IHN0YXJ0IHx8CisgICAgICAgICAgICB0ZXh0Lmxlbmd0aCgpIDwgbGltaXQpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIFBvc2l0aW9uIHBvcyA9IG5ldyBQb3NpdGlvbihzdGFydCwgbGltaXQsIHN0YXJ0KTsKKyAgICAgICAgZmlsdGVyZWRUcmFuc2xpdGVyYXRlKHRleHQsIHBvcywgZmFsc2UsIHRydWUpOworICAgICAgICByZXR1cm4gcG9zLmxpbWl0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRyYW5zbGl0ZXJhdGVzIGFuIGVudGlyZSBzdHJpbmcgaW4gcGxhY2UuIENvbnZlbmllbmNlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gdGV4dCB0aGUgc3RyaW5nIHRvIGJlIHRyYW5zbGl0ZXJhdGVkCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgdHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSB0ZXh0KSB7CisgICAgICAgIHRyYW5zbGl0ZXJhdGUodGV4dCwgMCwgdGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJhbnNsaXRlcmF0ZSBhbiBlbnRpcmUgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIENvbnZlbmllbmNlIG1ldGhvZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSBzdHJpbmcgdG8gYmUgdHJhbnNsaXRlcmF0ZWQKKyAgICAgKiBAcmV0dXJuIFRoZSB0cmFuc2xpdGVyYXRlZCB0ZXh0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFN0cmluZyB0cmFuc2xpdGVyYXRlKFN0cmluZyB0ZXh0KSB7CisgICAgICAgIFJlcGxhY2VhYmxlU3RyaW5nIHJlc3VsdCA9IG5ldyBSZXBsYWNlYWJsZVN0cmluZyh0ZXh0KTsKKyAgICAgICAgdHJhbnNsaXRlcmF0ZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJhbnNsaXRlcmF0ZXMgdGhlIHBvcnRpb24gb2YgdGhlIHRleHQgYnVmZmVyIHRoYXQgY2FuIGJlCisgICAgICogdHJhbnNsaXRlcmF0ZWQgdW5hbWJpZ3Vvc2x5IGFmdGVyIG5ldyB0ZXh0IGhhcyBiZWVuIGluc2VydGVkLAorICAgICAqIHR5cGljYWxseSBhcyBhIHJlc3VsdCBvZiBhIGtleWJvYXJkIGV2ZW50LiAgVGhlIG5ldyB0ZXh0IGluCisgICAgICogPGNvZGU+aW5zZXJ0aW9uPC9jb2RlPiB3aWxsIGJlIGluc2VydGVkIGludG8gPGNvZGU+dGV4dDwvY29kZT4KKyAgICAgKiBhdCA8Y29kZT5pbmRleC5jb250ZXh0TGltaXQ8L2NvZGU+LCBhZHZhbmNpbmcKKyAgICAgKiA8Y29kZT5pbmRleC5jb250ZXh0TGltaXQ8L2NvZGU+IGJ5IDxjb2RlPmluc2VydGlvbi5sZW5ndGgoKTwvY29kZT4uCisgICAgICogVGhlbiB0aGUgdHJhbnNsaXRlcmF0b3Igd2lsbCB0cnkgdG8gdHJhbnNsaXRlcmF0ZSBjaGFyYWN0ZXJzIG9mCisgICAgICogPGNvZGU+dGV4dDwvY29kZT4gYmV0d2VlbiA8Y29kZT5pbmRleC5zdGFydDwvY29kZT4gYW5kCisgICAgICogPGNvZGU+aW5kZXguY29udGV4dExpbWl0PC9jb2RlPi4gIENoYXJhY3RlcnMgYmVmb3JlCisgICAgICogPGNvZGU+aW5kZXguc3RhcnQ8L2NvZGU+IHdpbGwgbm90IGJlIGNoYW5nZWQuCisgICAgICoKKyAgICAgKiA8cD5VcG9uIHJldHVybiwgdmFsdWVzIGluIDxjb2RlPmluZGV4PC9jb2RlPiB3aWxsIGJlIHVwZGF0ZWQuCisgICAgICogPGNvZGU+aW5kZXguY29udGV4dFN0YXJ0PC9jb2RlPiB3aWxsIGJlIGFkdmFuY2VkIHRvIHRoZSBmaXJzdAorICAgICAqIGNoYXJhY3RlciB0aGF0IGZ1dHVyZSBjYWxscyB0byB0aGlzIG1ldGhvZCB3aWxsIHJlYWQuCisgICAgICogPGNvZGU+aW5kZXguc3RhcnQ8L2NvZGU+IGFuZCA8Y29kZT5pbmRleC5jb250ZXh0TGltaXQ8L2NvZGU+IHdpbGwKKyAgICAgKiBiZSBhZGp1c3RlZCB0byBkZWxpbWl0IHRoZSByYW5nZSBvZiB0ZXh0IHRoYXQgZnV0dXJlIGNhbGxzIHRvCisgICAgICogdGhpcyBtZXRob2QgbWF5IGNoYW5nZS4KKyAgICAgKgorICAgICAqIDxwPlR5cGljYWwgdXNhZ2Ugb2YgdGhpcyBtZXRob2QgYmVnaW5zIHdpdGggYW4gaW5pdGlhbCBjYWxsCisgICAgICogd2l0aCA8Y29kZT5pbmRleC5jb250ZXh0U3RhcnQ8L2NvZGU+IGFuZCA8Y29kZT5pbmRleC5jb250ZXh0TGltaXQ8L2NvZGU+CisgICAgICogc2V0IHRvIGluZGljYXRlIHRoZSBwb3J0aW9uIG9mIDxjb2RlPnRleHQ8L2NvZGU+IHRvIGJlCisgICAgICogdHJhbnNsaXRlcmF0ZWQsIGFuZCA8Y29kZT5pbmRleC5zdGFydCA9PSBpbmRleC5jb250ZXh0U3RhcnQ8L2NvZGU+LgorICAgICAqIFRoZXJlYWZ0ZXIsIDxjb2RlPmluZGV4PC9jb2RlPiBjYW4gYmUgdXNlZCB3aXRob3V0CisgICAgICogbW9kaWZpY2F0aW9uIGluIGZ1dHVyZSBjYWxscywgcHJvdmlkZWQgdGhhdCBhbGwgY2hhbmdlcyB0bworICAgICAqIDxjb2RlPnRleHQ8L2NvZGU+IGFyZSBtYWRlIHZpYSB0aGlzIG1ldGhvZC4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBmdXR1cmUgY2FsbHMgbWF5IGJlIG1hZGUgdGhhdCB3aWxsCisgICAgICogaW5zZXJ0IG5ldyB0ZXh0IGludG8gdGhlIGJ1ZmZlci4gIEFzIGEgcmVzdWx0LCBpdCBvbmx5IHBlcmZvcm1zCisgICAgICogdW5hbWJpZ3VvdXMgdHJhbnNsaXRlcmF0aW9ucy4gIEFmdGVyIHRoZSBsYXN0IGNhbGwgdG8gdGhpcworICAgICAqIG1ldGhvZCwgdGhlcmUgbWF5IGJlIHVudHJhbnNsaXRlcmF0ZWQgdGV4dCB0aGF0IGlzIHdhaXRpbmcgZm9yCisgICAgICogbW9yZSBpbnB1dCB0byByZXNvbHZlIGFuIGFtYmlndWl0eS4gIEluIG9yZGVyIHRvIHBlcmZvcm0gdGhlc2UKKyAgICAgKiBwZW5kaW5nIHRyYW5zbGl0ZXJhdGlvbnMsIGNsaWVudHMgc2hvdWxkIGNhbGwge0BsaW5rCisgICAgICogI2ZpbmlzaFRyYW5zbGl0ZXJhdGlvbn0gYWZ0ZXIgdGhlIGxhc3QgY2FsbCB0byB0aGlzCisgICAgICogbWV0aG9kIGhhcyBiZWVuIG1hZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGV4dCB0aGUgYnVmZmVyIGhvbGRpbmcgdHJhbnNsaXRlcmF0ZWQgYW5kIHVudHJhbnNsaXRlcmF0ZWQgdGV4dAorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgc3RhcnQgYW5kIGxpbWl0IG9mIHRoZSB0ZXh0LCB0aGUgcG9zaXRpb24KKyAgICAgKiBvZiB0aGUgY3Vyc29yLCBhbmQgdGhlIHN0YXJ0IGFuZCBsaW1pdCBvZiB0cmFuc2xpdGVyYXRpb24uCisgICAgICogQHBhcmFtIGluc2VydGlvbiB0ZXh0IHRvIGJlIGluc2VydGVkIGFuZCBwb3NzaWJseQorICAgICAqIHRyYW5zbGl0ZXJhdGVkIGludG8gdGhlIHRyYW5zbGF0aW9uIGJ1ZmZlciBhdAorICAgICAqIDxjb2RlPmluZGV4LmNvbnRleHRMaW1pdDwvY29kZT4uICBJZiA8Y29kZT5udWxsPC9jb2RlPiB0aGVuIG5vIHRleHQKKyAgICAgKiBpcyBpbnNlcnRlZC4KKyAgICAgKiBAc2VlICNoYW5kbGVUcmFuc2xpdGVyYXRlCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgPGNvZGU+aW5kZXg8L2NvZGU+CisgICAgICogaXMgaW52YWxpZAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHRyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUgdGV4dCwgUG9zaXRpb24gaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5zZXJ0aW9uKSB7CisgICAgICAgIGluZGV4LnZhbGlkYXRlKHRleHQubGVuZ3RoKCkpOworCisvLyAgICAgICAgaW50IG9yaWdpbmFsU3RhcnQgPSBpbmRleC5jb250ZXh0U3RhcnQ7CisgICAgICAgIGlmIChpbnNlcnRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgdGV4dC5yZXBsYWNlKGluZGV4LmxpbWl0LCBpbmRleC5saW1pdCwgaW5zZXJ0aW9uKTsKKyAgICAgICAgICAgIGluZGV4LmxpbWl0ICs9IGluc2VydGlvbi5sZW5ndGgoKTsKKyAgICAgICAgICAgIGluZGV4LmNvbnRleHRMaW1pdCArPSBpbnNlcnRpb24ubGVuZ3RoKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5kZXgubGltaXQgPiAwICYmCisgICAgICAgICAgICBVVEYxNi5pc0xlYWRTdXJyb2dhdGUodGV4dC5jaGFyQXQoaW5kZXgubGltaXQgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIE9vcHMsIHRoZXJlIGlzIGEgZGFuZ2xpbmcgbGVhZCBzdXJyb2dhdGUgaW4gdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBicmVhayBtb3N0IHRyYW5zbGl0ZXJhdG9ycywgc2luY2UgdGhleSB3aWxsCisgICAgICAgICAgICAvLyBhc3N1bWUgaXQgaXMgcGFydCBvZiBhIHBhaXIuICBEb24ndCB0cmFuc2xpdGVyYXRlIHVudGlsCisgICAgICAgICAgICAvLyBtb3JlIHRleHQgY29tZXMgaW4uCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmaWx0ZXJlZFRyYW5zbGl0ZXJhdGUodGV4dCwgaW5kZXgsIHRydWUsIHRydWUpOworCisvLyBUT0RPCisvLyBUaGlzIGRvZXNuJ3Qgd29yayBvbmNlIHdlIGFkZCBxdWFudGlmaWVyIHN1cHBvcnQuICBOZWVkIHRvIHJld3JpdGUKKy8vIHRoaXMgY29kZSB0byBzdXBwb3J0IHF1YW50aWZpZXJzIGFuZCAndXNlIG1heGltdW0gYmFja3VwIDxuPjsnLgorLy8KKy8vICAgICAgICBpbmRleC5jb250ZXh0U3RhcnQgPSBNYXRoLm1heChpbmRleC5zdGFydCAtIGdldE1heGltdW1Db250ZXh0TGVuZ3RoKCksCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTdGFydCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJhbnNsaXRlcmF0ZXMgdGhlIHBvcnRpb24gb2YgdGhlIHRleHQgYnVmZmVyIHRoYXQgY2FuIGJlCisgICAgICogdHJhbnNsaXRlcmF0ZWQgdW5hbWJpZ3Vvc2x5IGFmdGVyIGEgbmV3IGNoYXJhY3RlciBoYXMgYmVlbgorICAgICAqIGluc2VydGVkLCB0eXBpY2FsbHkgYXMgYSByZXN1bHQgb2YgYSBrZXlib2FyZCBldmVudC4gIFRoaXMgaXMgYQorICAgICAqIGNvbnZlbmllbmNlIG1ldGhvZDsgc2VlIHtAbGluayAjdHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSwKKyAgICAgKiBUcmFuc2xpdGVyYXRvci5Qb3NpdGlvbiwgU3RyaW5nKX0gZm9yIGRldGFpbHMuCisgICAgICogQHBhcmFtIHRleHQgdGhlIGJ1ZmZlciBob2xkaW5nIHRyYW5zbGl0ZXJhdGVkIGFuZAorICAgICAqIHVudHJhbnNsaXRlcmF0ZWQgdGV4dAorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgc3RhcnQgYW5kIGxpbWl0IG9mIHRoZSB0ZXh0LCB0aGUgcG9zaXRpb24KKyAgICAgKiBvZiB0aGUgY3Vyc29yLCBhbmQgdGhlIHN0YXJ0IGFuZCBsaW1pdCBvZiB0cmFuc2xpdGVyYXRpb24uCisgICAgICogQHBhcmFtIGluc2VydGlvbiB0ZXh0IHRvIGJlIGluc2VydGVkIGFuZCBwb3NzaWJseQorICAgICAqIHRyYW5zbGl0ZXJhdGVkIGludG8gdGhlIHRyYW5zbGF0aW9uIGJ1ZmZlciBhdAorICAgICAqIDxjb2RlPmluZGV4LmNvbnRleHRMaW1pdDwvY29kZT4uCisgICAgICogQHNlZSAjdHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSwgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24sIFN0cmluZykKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCB0cmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsIFBvc2l0aW9uIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluc2VydGlvbikgeworICAgICAgICB0cmFuc2xpdGVyYXRlKHRleHQsIGluZGV4LCBVVEYxNi52YWx1ZU9mKGluc2VydGlvbikpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRyYW5zbGl0ZXJhdGVzIHRoZSBwb3J0aW9uIG9mIHRoZSB0ZXh0IGJ1ZmZlciB0aGF0IGNhbiBiZQorICAgICAqIHRyYW5zbGl0ZXJhdGVkIHVuYW1iaWd1b3NseS4gIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2Q7IHNlZQorICAgICAqIHtAbGluayAjdHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSwgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24sCisgICAgICogU3RyaW5nKX0gZm9yIGRldGFpbHMuCisgICAgICogQHBhcmFtIHRleHQgdGhlIGJ1ZmZlciBob2xkaW5nIHRyYW5zbGl0ZXJhdGVkIGFuZAorICAgICAqIHVudHJhbnNsaXRlcmF0ZWQgdGV4dAorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgc3RhcnQgYW5kIGxpbWl0IG9mIHRoZSB0ZXh0LCB0aGUgcG9zaXRpb24KKyAgICAgKiBvZiB0aGUgY3Vyc29yLCBhbmQgdGhlIHN0YXJ0IGFuZCBsaW1pdCBvZiB0cmFuc2xpdGVyYXRpb24uCisgICAgICogQHNlZSAjdHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSwgVHJhbnNsaXRlcmF0b3IuUG9zaXRpb24sIFN0cmluZykKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCB0cmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsIFBvc2l0aW9uIGluZGV4KSB7CisgICAgICAgIHRyYW5zbGl0ZXJhdGUodGV4dCwgaW5kZXgsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmlzaGVzIGFueSBwZW5kaW5nIHRyYW5zbGl0ZXJhdGlvbnMgdGhhdCB3ZXJlIHdhaXRpbmcgZm9yCisgICAgICogbW9yZSBjaGFyYWN0ZXJzLiAgQ2xpZW50cyBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBhcyB0aGUgbGFzdAorICAgICAqIGNhbGwgYWZ0ZXIgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBjYWxscyB0bworICAgICAqIDxjb2RlPnRyYW5zbGl0ZXJhdGUoKTwvY29kZT4uCisgICAgICogQHBhcmFtIHRleHQgdGhlIGJ1ZmZlciBob2xkaW5nIHRyYW5zbGl0ZXJhdGVkIGFuZAorICAgICAqIHVudHJhbnNsaXRlcmF0ZWQgdGV4dC4KKyAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGFycmF5IG9mIGluZGljZXMgcHJldmlvdXNseSBwYXNzZWQgdG8ge0BsaW5rCisgICAgICogI3RyYW5zbGl0ZXJhdGV9CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgZmluaXNoVHJhbnNsaXRlcmF0aW9uKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIGluZGV4KSB7CisgICAgICAgIGluZGV4LnZhbGlkYXRlKHRleHQubGVuZ3RoKCkpOworICAgICAgICBmaWx0ZXJlZFRyYW5zbGl0ZXJhdGUodGV4dCwgaW5kZXgsIGZhbHNlLCB0cnVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBYnN0cmFjdCBtZXRob2QgdGhhdCBjb25jcmV0ZSBzdWJjbGFzc2VzIGRlZmluZSB0byBpbXBsZW1lbnQKKyAgICAgKiB0aGVpciB0cmFuc2xpdGVyYXRpb24gYWxnb3JpdGhtLiAgVGhpcyBtZXRob2QgaGFuZGxlcyBib3RoCisgICAgICogaW5jcmVtZW50YWwgYW5kIG5vbi1pbmNyZW1lbnRhbCB0cmFuc2xpdGVyYXRpb24uICBMZXQKKyAgICAgKiA8Y29kZT5vcmlnaW5hbFN0YXJ0PC9jb2RlPiByZWZlciB0byB0aGUgdmFsdWUgb2YKKyAgICAgKiA8Y29kZT5wb3Muc3RhcnQ8L2NvZGU+IHVwb24gZW50cnkuCisgICAgICogCisgICAgICogPHVsPgorICAgICAqICA8bGk+SWYgPGNvZGU+aW5jcmVtZW50YWw8L2NvZGU+IGlzIGZhbHNlLCB0aGVuIHRoaXMgbWV0aG9kCisgICAgICogIHNob3VsZCB0cmFuc2xpdGVyYXRlIGFsbCBjaGFyYWN0ZXJzIGJldHdlZW4KKyAgICAgKiAgPGNvZGU+cG9zLnN0YXJ0PC9jb2RlPiBhbmQgPGNvZGU+cG9zLmxpbWl0PC9jb2RlPi4gVXBvbiByZXR1cm4KKyAgICAgKiAgPGNvZGU+cG9zLnN0YXJ0PC9jb2RlPiBtdXN0ID09IDxjb2RlPiBwb3MubGltaXQ8L2NvZGU+LjwvbGk+CisgICAgICoKKyAgICAgKiAgPGxpPklmIDxjb2RlPmluY3JlbWVudGFsPC9jb2RlPiBpcyB0cnVlLCB0aGVuIHRoaXMgbWV0aG9kCisgICAgICogIHNob3VsZCB0cmFuc2xpdGVyYXRlIGFsbCBjaGFyYWN0ZXJzIGJldHdlZW4KKyAgICAgKiAgPGNvZGU+cG9zLnN0YXJ0PC9jb2RlPiBhbmQgPGNvZGU+cG9zLmxpbWl0PC9jb2RlPiB0aGF0IGNhbiBiZQorICAgICAqICB1bmFtYmlndW91c2x5IHRyYW5zbGl0ZXJhdGVkLCByZWdhcmRsZXNzIG9mIGZ1dHVyZSBpbnNlcnRpb25zCisgICAgICogIG9mIHRleHQgYXQgPGNvZGU+cG9zLmxpbWl0PC9jb2RlPi4gIFVwb24gcmV0dXJuLAorICAgICAqICA8Y29kZT5wb3Muc3RhcnQ8L2NvZGU+IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UKKyAgICAgKiAgWzxjb2RlPm9yaWdpbmFsU3RhcnQ8L2NvZGU+LCA8Y29kZT5wb3MubGltaXQ8L2NvZGU+KS4KKyAgICAgKiAgPGNvZGU+cG9zLnN0YXJ0PC9jb2RlPiBzaG91bGQgYmUgcG9zaXRpb25lZCBzdWNoIHRoYXQKKyAgICAgKiAgY2hhcmFjdGVycyBbPGNvZGU+b3JpZ2luYWxTdGFydDwvY29kZT4sIDxjb2RlPgorICAgICAqICBwb3Muc3RhcnQ8L2NvZGU+KSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgYnkgdGhpcworICAgICAqICB0cmFuc2xpdGVyYXRvciBhbmQgY2hhcmFjdGVycyBbPGNvZGU+cG9zLnN0YXJ0PC9jb2RlPiwKKyAgICAgKiAgPGNvZGU+cG9zLmxpbWl0PC9jb2RlPikgYXJlIHVuY2hhbmdlZC48L2xpPgorICAgICAqIDwvdWw+CisgICAgICogCisgICAgICogPHA+SW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIHNob3VsZCBhbHNvIG9iZXkgdGhlCisgICAgICogZm9sbG93aW5nIGludmFyaWFudHM6PC9wPgorICAgICAqCisgICAgICogPHVsPgorICAgICAqICA8bGk+IDxjb2RlPnBvcy5saW1pdDwvY29kZT4gYW5kIDxjb2RlPnBvcy5jb250ZXh0TGltaXQ8L2NvZGU+CisgICAgICogIHNob3VsZCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgY2hhbmdlcyBpbiBsZW5ndGggb2YgdGhlIHRleHQKKyAgICAgKiAgYmV0d2VlbiA8Y29kZT5wb3Muc3RhcnQ8L2NvZGU+IGFuZCA8Y29kZT5wb3MubGltaXQ8L2NvZGU+LiBUaGUKKyAgICAgKiAgZGlmZmVyZW5jZSA8Y29kZT4gcG9zLmNvbnRleHRMaW1pdCAtIHBvcy5saW1pdDwvY29kZT4gc2hvdWxkCisgICAgICogIG5vdCBjaGFuZ2UuPC9saT4KKyAgICAgKgorICAgICAqICA8bGk+PGNvZGU+cG9zLmNvbnRleHRTdGFydDwvY29kZT4gc2hvdWxkIG5vdCBjaGFuZ2UuPC9saT4KKyAgICAgKgorICAgICAqICA8bGk+VXBvbiByZXR1cm4sIG5laXRoZXIgPGNvZGU+cG9zLnN0YXJ0PC9jb2RlPiBub3IKKyAgICAgKiAgPGNvZGU+cG9zLmxpbWl0PC9jb2RlPiBzaG91bGQgYmUgbGVzcyB0aGFuCisgICAgICogIDxjb2RlPm9yaWdpbmFsU3RhcnQ8L2NvZGU+LjwvbGk+CisgICAgICoKKyAgICAgKiAgPGxpPlRleHQgYmVmb3JlIDxjb2RlPm9yaWdpbmFsU3RhcnQ8L2NvZGU+IGFuZCB0ZXh0IGFmdGVyCisgICAgICogIDxjb2RlPnBvcy5saW1pdDwvY29kZT4gc2hvdWxkIG5vdCBjaGFuZ2UuPC9saT4KKyAgICAgKgorICAgICAqICA8bGk+VGV4dCBiZWZvcmUgPGNvZGU+cG9zLmNvbnRleHRTdGFydDwvY29kZT4gYW5kIHRleHQgYWZ0ZXIKKyAgICAgKiAgPGNvZGU+IHBvcy5jb250ZXh0TGltaXQ8L2NvZGU+IHNob3VsZCBiZSBpZ25vcmVkLjwvbGk+CisgICAgICogPC91bD4KKyAgICAgKiAgICAKKyAgICAgKiA8cD5TdWJjbGFzc2VzIG1heSBzYWZlbHkgYXNzdW1lIHRoYXQgYWxsIGNoYXJhY3RlcnMgaW4KKyAgICAgKiBbPGNvZGU+cG9zLnN0YXJ0PC9jb2RlPiwgPGNvZGU+cG9zLmxpbWl0PC9jb2RlPikgYXJlIGZpbHRlcmVkLgorICAgICAqIEluIG90aGVyIHdvcmRzLCB0aGUgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCBieSB0aGUgdGltZQorICAgICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4gIFNlZQorICAgICAqIDxjb2RlPmZpbHRlcmVkVHJhbnNsaXRlcmF0ZSgpPC9jb2RlPi4KKyAgICAgKiAgICAKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCBpcyA8Yj5ub3Q8L2I+IGZvciBwdWJsaWMgY29uc3VtcHRpb24uICBDYWxsaW5nCisgICAgICogdGhpcyBtZXRob2QgZGlyZWN0bHkgd2lsbCB0cmFuc2xpdGVyYXRlCisgICAgICogWzxjb2RlPnBvcy5zdGFydDwvY29kZT4sIDxjb2RlPnBvcy5saW1pdDwvY29kZT4pIHdpdGhvdXQKKyAgICAgKiBhcHBseWluZyB0aGUgZmlsdGVyLiBFbmQgdXNlciBjb2RlIHNob3VsZCBjYWxsIDxjb2RlPgorICAgICAqIHRyYW5zbGl0ZXJhdGUoKTwvY29kZT4gaW5zdGVhZCBvZiB0aGlzIG1ldGhvZC4gU3ViY2xhc3MgY29kZQorICAgICAqIHNob3VsZCBjYWxsIDxjb2RlPmZpbHRlcmVkVHJhbnNsaXRlcmF0ZSgpPC9jb2RlPiBpbnN0ZWFkIG9mCisgICAgICogdGhpcyBtZXRob2QuPHA+CisgICAgICogCisgICAgICogQHBhcmFtIHRleHQgdGhlIGJ1ZmZlciBob2xkaW5nIHRyYW5zbGl0ZXJhdGVkIGFuZAorICAgICAqIHVudHJhbnNsaXRlcmF0ZWQgdGV4dAorICAgICAqIAorICAgICAqIEBwYXJhbSBwb3MgdGhlIGluZGljZXMgaW5kaWNhdGluZyB0aGUgc3RhcnQsIGxpbWl0LCBjb250ZXh0CisgICAgICogc3RhcnQsIGFuZCBjb250ZXh0IGxpbWl0IG9mIHRoZSB0ZXh0LgorICAgICAqIAorICAgICAqIEBwYXJhbSBpbmNyZW1lbnRhbCBpZiB0cnVlLCBhc3N1bWUgbW9yZSB0ZXh0IG1heSBiZSBpbnNlcnRlZCBhdAorICAgICAqIDxjb2RlPnBvcy5saW1pdDwvY29kZT4gYW5kIGFjdCBhY2NvcmRpbmdseS4gIE90aGVyd2lzZSwKKyAgICAgKiB0cmFuc2xpdGVyYXRlIGFsbCB0ZXh0IGJldHdlZW4gPGNvZGU+cG9zLnN0YXJ0PC9jb2RlPiBhbmQKKyAgICAgKiA8Y29kZT5wb3MubGltaXQ8L2NvZGU+IGFuZCBtb3ZlIDxjb2RlPnBvcy5zdGFydDwvY29kZT4gdXAgdG8KKyAgICAgKiA8Y29kZT5wb3MubGltaXQ8L2NvZGU+LgorICAgICAqIAorICAgICAqIEBzZWUgI3RyYW5zbGl0ZXJhdGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBoYW5kbGVUcmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBwb3MsIGJvb2xlYW4gaW5jcmVtZW50YWwpOworCisgICAgLyoqCisgICAgICogVG9wLWxldmVsIHRyYW5zbGl0ZXJhdGlvbiBtZXRob2QsIGhhbmRsaW5nIGZpbHRlcmluZywgaW5jcmVtZW50YWwgYW5kCisgICAgICogbm9uLWluY3JlbWVudGFsIHRyYW5zbGl0ZXJhdGlvbiwgYW5kIHJvbGxiYWNrLiAgQWxsIHRyYW5zbGl0ZXJhdGlvbgorICAgICAqIHB1YmxpYyBBUEkgbWV0aG9kcyBldmVudHVhbGx5IGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBhIHJvbGxiYWNrIGFyZ3VtZW50CisgICAgICogb2YgVFJVRS4gIE90aGVyIGVudGl0aWVzIG1heSBjYWxsIHRoaXMgbWV0aG9kIGJ1dCByb2xsYmFjayBzaG91bGQgYmUKKyAgICAgKiBGQUxTRS4KKyAgICAgKiAKKyAgICAgKiA8cD5JZiB0aGlzIHRyYW5zbGl0ZXJhdG9yIGhhcyBhIGZpbHRlciwgYnJlYWsgdXAgdGhlIGlucHV0IHRleHQgaW50byBydW5zCisgICAgICogb2YgdW5maWx0ZXJlZCBjaGFyYWN0ZXJzLiAgUGFzcyBlYWNoIHJ1biB0bworICAgICAqIDxzdWJjbGFzcz4uaGFuZGxlVHJhbnNsaXRlcmF0ZSgpLgorICAgICAqCisgICAgICogPHA+SW4gaW5jcmVtZW50YWwgbW9kZSwgaWYgcm9sbGJhY2sgaXMgVFJVRSwgcGVyZm9ybSBhIHNwZWNpYWwKKyAgICAgKiBpbmNyZW1lbnRhbCBwcm9jZWR1cmUgaW4gd2hpY2ggc2V2ZXJhbCBwYXNzZXMgYXJlIG1hZGUgb3ZlciB0aGUgaW5wdXQKKyAgICAgKiB0ZXh0LCBhZGRpbmcgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUsIGFuZCBjb21taXR0aW5nIHN1Y2Nlc3NmdWwKKyAgICAgKiB0cmFuc2xpdGVyYXRpb25zIGFzIHRoZXkgb2NjdXIuICBVbnN1Y2Nlc3NmdWwgdHJhbnNsaXRlcmF0aW9ucyBhcmUgcm9sbGVkCisgICAgICogYmFjayBhbmQgcmV0cmllZCB3aXRoIGFkZGl0aW9uYWwgY2hhcmFjdGVycyB0byBnaXZlIGNvcnJlY3QgcmVzdWx0cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIGJlIHRyYW5zbGl0ZXJhdGVkCisgICAgICogQHBhcmFtIGluZGV4IHRoZSBwb3NpdGlvbiBpbmRpY2VzCisgICAgICogQHBhcmFtIGluY3JlbWVudGFsIGlmIFRSVUUsIHRoZW4gYXNzdW1lIG1vcmUgY2hhcmFjdGVycyBtYXkgYmUgaW5zZXJ0ZWQKKyAgICAgKiBhdCBpbmRleC5saW1pdCwgYW5kIHBvc3Rwb25lIHByb2Nlc3NpbmcgdG8gYWNjb21vZGF0ZSBmdXR1cmUgaW5jb21pbmcKKyAgICAgKiBjaGFyYWN0ZXJzCisgICAgICogQHBhcmFtIHJvbGxiYWNrIGlmIFRSVUUgYW5kIGlmIGluY3JlbWVudGFsIGlzIFRSVUUsIHRoZW4gcGVyZm9ybSBzcGVjaWFsCisgICAgICogaW5jcmVtZW50YWwgcHJvY2Vzc2luZywgYXMgZGVzY3JpYmVkIGFib3ZlLCBhbmQgdW5kbyBwYXJ0aWFsCisgICAgICogdHJhbnNsaXRlcmF0aW9ucyB3aGVyZSBuZWNlc3NhcnkuICBJZiBpbmNyZW1lbnRhbCBpcyBGQUxTRSB0aGVuIHRoaXMKKyAgICAgKiBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZmlsdGVyZWRUcmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5jcmVtZW50YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJvbGxiYWNrKSB7CisgICAgICAgIC8vIFNob3J0IGNpcmN1aXQgcGF0aCBmb3IgdHJhbnNsaXRlcmF0b3JzIHdpdGggbm8gZmlsdGVyIGluCisgICAgICAgIC8vIG5vbi1pbmNyZW1lbnRhbCBtb2RlLgorICAgICAgICBpZiAoZmlsdGVyID09IG51bGwgJiYgIXJvbGxiYWNrKSB7CisgICAgICAgICAgICBoYW5kbGVUcmFuc2xpdGVyYXRlKHRleHQsIGluZGV4LCBpbmNyZW1lbnRhbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gVGhpcyBtZXRob2QgcHJvY2Vzc2VzIHRleHQgaW4gdHdvIGdyb3VwaW5nczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUlVOUyAtLSBBIHJ1biBpcyBhIGNvbnRpZ3VvdXMgZ3JvdXAgb2YgY2hhcmFjdGVycyB3aGljaCBhcmUgY29udGFpbmVkCisgICAgICAgIC8vIGluIHRoZSBmaWx0ZXIgZm9yIHRoaXMgdHJhbnNsaXRlcmF0b3IgKGZpbHRlci5jb250YWlucyhjaCkgPT0gdHJ1ZSkuCisgICAgICAgIC8vIFRleHQgb3V0c2lkZSBvZiBydW5zIG1heSBhcHBlYXIgYXMgY29udGV4dCBidXQgaXQgaXMgbm90IG1vZGlmaWVkLgorICAgICAgICAvLyBUaGUgc3RhcnQgYW5kIGxpbWl0IFBvc2l0aW9uIHZhbHVlcyBhcmUgbmFycm93ZWQgdG8gZWFjaCBydW4uCisgICAgICAgIC8vCisgICAgICAgIC8vIFBBU1NFUyAoaW5jcmVtZW50YWwgb25seSkgLS0gVG8gbWFrZSBpbmNyZW1lbnRhbCBtb2RlIHdvcmsgY29ycmVjdGx5LAorICAgICAgICAvLyBlYWNoIHJ1biBpcyBicm9rZW4gdXAgaW50byBuIHBhc3Nlcywgd2hlcmUgbiBpcyB0aGUgbGVuZ3RoIChpbiBjb2RlCisgICAgICAgIC8vIHBvaW50cykgb2YgdGhlIHJ1bi4gIEVhY2ggcGFzcyBjb250YWlucyB0aGUgZmlyc3QgbiBjaGFyYWN0ZXJzLiAgSWYgYQorICAgICAgICAvLyBwYXNzIGlzIGNvbXBsZXRlbHkgdHJhbnNsaXRlcmF0ZWQsIGl0IGlzIGNvbW1pdHRlZCwgYW5kIGZ1cnRoZXIgcGFzc2VzCisgICAgICAgIC8vIGluY2x1ZGUgY2hhcmFjdGVycyBhZnRlciB0aGUgY29tbWl0dGVkIHRleHQuICBJZiBhIHBhc3MgaXMgYmxvY2tlZCwKKyAgICAgICAgLy8gYW5kIGRvZXMgbm90IHRyYW5zbGl0ZXJhdGUgY29tcGxldGVseSwgdGhlbiB0aGlzIG1ldGhvZCByb2xscyBiYWNrCisgICAgICAgIC8vIHRoZSBjaGFuZ2VzIG1hZGUgZHVyaW5nIHRoZSBwYXNzLCBleHRlbmRzIHRoZSBwYXNzIGJ5IG9uZSBjb2RlIHBvaW50LAorICAgICAgICAvLyBhbmQgdHJpZXMgYWdhaW4uCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIC8vIGdsb2JhbExpbWl0IGlzIHRoZSBsaW1pdCB2YWx1ZSBmb3IgdGhlIGVudGlyZSBvcGVyYXRpb24uICBXZQorICAgICAgICAvLyBzZXQgaW5kZXgubGltaXQgdG8gdGhlIGVuZCBvZiBlYWNoIHVuZmlsdGVyZWQgcnVuIGJlZm9yZQorICAgICAgICAvLyBjYWxsaW5nIGhhbmRsZVRyYW5zbGl0ZXJhdGUoKSwgc28gd2UgbmVlZCB0byBtYWludGFpbiB0aGUgcmVhbAorICAgICAgICAvLyB2YWx1ZSBvZiBpbmRleC5saW1pdCBoZXJlLiAgQWZ0ZXIgZWFjaCB0cmFuc2xpdGVyYXRpb24sIHdlCisgICAgICAgIC8vIHVwZGF0ZSBnbG9iYWxMaW1pdCBmb3IgaW5zZXJ0aW9ucyBvciBkZWxldGlvbnMgdGhhdCBoYXZlCisgICAgICAgIC8vIGhhcHBlbmVkLgorICAgICAgICBpbnQgZ2xvYmFsTGltaXQgPSBpbmRleC5saW1pdDsKKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG5vbi1udWxsIGZpbHRlciwgdGhlbiBicmVhayB0aGUgaW5wdXQgdGV4dCB1cC4gIFNheSB0aGUKKyAgICAgICAgLy8gaW5wdXQgdGV4dCBoYXMgdGhlIGZvcm06CisgICAgICAgIC8vICAgeHh4YWJjeHhkZWZ4eAorICAgICAgICAvLyB3aGVyZSAneCcgcmVwcmVzZW50cyBhIGZpbHRlcmVkIGNoYXJhY3RlciAoZmlsdGVyLmNvbnRhaW5zKCd4JykgPT0KKyAgICAgICAgLy8gZmFsc2UpLiAgVGhlbiB3ZSBicmVhayB0aGlzIHVwIGludG86CisgICAgICAgIC8vICAgeHh4YWJjIHh4ZGVmIHh4CisgICAgICAgIC8vIEVhY2ggcGFzcyB0aHJvdWdoIHRoZSBsb29wIGNvbnN1bWVzIGEgcnVuIG9mIGZpbHRlcmVkCisgICAgICAgIC8vIGNoYXJhY3RlcnMgKHdoaWNoIGFyZSBpZ25vcmVkKSBhbmQgYSBzdWJzZXF1ZW50IHJ1biBvZgorICAgICAgICAvLyB1bmZpbHRlcmVkIGNoYXJhY3RlcnMgKHdoaWNoIGFyZSB0cmFuc2xpdGVyYXRlZCkuCisKKyAgICAgICAgU3RyaW5nQnVmZmVyIGxvZyA9IG51bGw7CisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgbG9nID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICg7OykgeworCisgICAgICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBOYXJyb3cgdGhlIHJhbmdlIHRvIGJlIHRyYW5zbGl0ZXJhdGVkIHRvIHRoZSBmaXJzdCBydW4KKyAgICAgICAgICAgICAgICAvLyBvZiB1bmZpbHRlcmVkIGNoYXJhY3RlcnMgYXQgb3IgYWZ0ZXIgaW5kZXguc3RhcnQuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBwYXN0IGZpbHRlcmVkIGNoYXJzCisgICAgICAgICAgICAgICAgaW50IGM7CisgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4LnN0YXJ0IDwgZ2xvYmFsTGltaXQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIWZpbHRlci5jb250YWlucyhjPXRleHQuY2hhcjMyQXQoaW5kZXguc3RhcnQpKSkgeworICAgICAgICAgICAgICAgICAgICBpbmRleC5zdGFydCArPSBVVEYxNi5nZXRDaGFyQ291bnQoYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGlzIHJ1biBvZiB1bmZpbHRlcmVkIGNoYXJzCisgICAgICAgICAgICAgICAgaW5kZXgubGltaXQgPSBpbmRleC5zdGFydDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXgubGltaXQgPCBnbG9iYWxMaW1pdCAmJgorICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuY29udGFpbnMoYz10ZXh0LmNoYXIzMkF0KGluZGV4LmxpbWl0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgubGltaXQgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmZpbHRlcmVkIHJ1biBpcyBlbXB0eS4gIFRoaXMgb25seQorICAgICAgICAgICAgLy8gaGFwcGVucyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2hlbiBhbGwgdGhlIHJlbWFpbmluZworICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBhcmUgZmlsdGVyZWQuCisgICAgICAgICAgICBpZiAoaW5kZXguc3RhcnQgPT0gaW5kZXgubGltaXQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSXMgdGhpcyBydW4gaW5jcmVtZW50YWw/ICBJZiB0aGVyZSBpcyBhZGRpdGlvbmFsCisgICAgICAgICAgICAvLyBmaWx0ZXJlZCB0ZXh0IChpZiBsaW1pdCA8IGdsb2JhbExpbWl0KSB0aGVuIHdlIHBhc3MgaW4KKyAgICAgICAgICAgIC8vIGFuIGluY3JlbWVudGFsIHZhbHVlIG9mIEZBTFNFIHRvIGZvcmNlIHRoZSBzdWJjbGFzcyB0bworICAgICAgICAgICAgLy8gY29tcGxldGUgdGhlIHRyYW5zbGl0ZXJhdGlvbiBmb3IgdGhpcyBydW4uCisgICAgICAgICAgICBib29sZWFuIGlzSW5jcmVtZW50YWxSdW4gPQorICAgICAgICAgICAgICAgIChpbmRleC5saW1pdCA8IGdsb2JhbExpbWl0ID8gZmFsc2UgOiBpbmNyZW1lbnRhbCk7CisKKyAgICAgICAgICAgIGludCBkZWx0YTsKKworICAgICAgICAgICAgLy8gSW1wbGVtZW50IHJvbGxiYWNrLiAgVG8gdW5kZXJzdGFuZCB0aGUgbmVlZCBmb3Igcm9sbGJhY2ssCisgICAgICAgICAgICAvLyBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRyYW5zbGl0ZXJhdG9yOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAidCIgaXMgImEgPiBBOyIKKyAgICAgICAgICAgIC8vICAidSIgaXMgIkEgPiBiOyIKKyAgICAgICAgICAgIC8vICAidiIgaXMgYSBjb21wb3VuZCBvZiAidDsgTkZEOyB1IiB3aXRoIGEgZmlsdGVyIFs6TGw6XQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdyBhcHBseSAidiIgdG8gdGhlIGlucHV0IHRleHQgImEiLiAgVGhlIHJlc3VsdCBpcyAiYiIuICBCdXQgaWYKKyAgICAgICAgICAgIC8vIHRoZSB0cmFuc2xpdGVyYXRpb24gaXMgZG9uZSBpbmNyZW1lbnRhbGx5LCB0aGVuIHRoZSBORkQgaG9sZHMKKyAgICAgICAgICAgIC8vIHRoaW5ncyB1cCBhZnRlciAidCIgaGFzIGFscmVhZHkgdHJhbnNmb3JtZWQgImEiIHRvICJBIi4gIFdoZW4KKyAgICAgICAgICAgIC8vIGZpbmlzaFRyYW5zbGl0ZXJhdGUoKSBpcyBjYWxsZWQsICJBIiBpcyBfbm90XyBwcm9jZXNzZWQgYmVjYXVzZQorICAgICAgICAgICAgLy8gaXQgZ2V0cyBleGNsdWRlZCBieSB0aGUgWzpMbDpdIGZpbHRlciwgYW5kIHRoZSBlbmQgcmVzdWx0IGlzICJBIgorICAgICAgICAgICAgLy8gLS0gaW5jb3JyZWN0LiAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8gYQorICAgICAgICAgICAgLy8gcGFydGlhbGx5LXRyYW5zbGl0ZXJhdGVkIHJlc3VsdCwgd2hlbiB3ZSBvbmx5IHdhbnQgaXQgdG8gYXBwbHkgdG8KKyAgICAgICAgICAgIC8vIGlucHV0IHRleHQuICBBbHRob3VnaCB0aGlzIGV4YW1wbGUgZGVzY3JpYmVzIGEgY29tcG91bmQKKyAgICAgICAgICAgIC8vIHRyYW5zbGl0ZXJhdG9yIGNvbnRhaW5pbmcgTkZEIGFuZCBhIHNwZWNpZmljIGZpbHRlciwgaXQgY2FuCisgICAgICAgICAgICAvLyBoYXBwZW4gd2l0aCBhbnkgdHJhbnNsaXRlcmF0b3Igd2hpY2ggZG9lcyBhIHBhcnRpYWwKKyAgICAgICAgICAgIC8vIHRyYW5zZm9ybWF0aW9uIGluIGluY3JlbWVudGFsIG1vZGUgaW50byBjaGFyYWN0ZXJzIG91dHNpZGUgaXRzCisgICAgICAgICAgICAvLyBmaWx0ZXIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVG8gaGFuZGxlIHRoaXMsIHdoZW4gaW4gaW5jcmVtZW50YWwgbW9kZSB3ZSBzdXBwbHkgY2hhcmFjdGVycyB0bworICAgICAgICAgICAgLy8gaGFuZGxlVHJhbnNsaXRlcmF0ZSgpIGluIHNldmVyYWwgcGFzc2VzLiAgRWFjaCBwYXNzIGFkZHMgb25lIG1vcmUKKyAgICAgICAgICAgIC8vIGlucHV0IGNoYXJhY3RlciB0byB0aGUgaW5wdXQgdGV4dC4gIFRoYXQgaXMsIGZvciBpbnB1dCAiQUJDRCIsIHdlCisgICAgICAgICAgICAvLyBmaXJzdCB0cnkgIkEiLCB0aGVuICJBQiIsIHRoZW4gIkFCQyIsIGFuZCBmaW5hbGx5ICJBQkNEIi4gIElmIGF0CisgICAgICAgICAgICAvLyBhbnkgcG9pbnQgd2UgYmxvY2sgKHVwb24gcmV0dXJuLCBzdGFydCA8IGxpbWl0KSB0aGVuIHdlIHJvbGwKKyAgICAgICAgICAgIC8vIGJhY2suICBJZiBhdCBhbnkgcG9pbnQgd2UgY29tcGxldGUgdGhlIHJ1biAodXBvbiByZXR1cm4gc3RhcnQgPT0KKyAgICAgICAgICAgIC8vIGxpbWl0KSB0aGVuIHdlIGNvbW1pdCB0aGF0IHJ1bi4KKworICAgICAgICAgICAgaWYgKHJvbGxiYWNrICYmIGlzSW5jcmVtZW50YWxSdW4pIHsKKworICAgICAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgICAgICBsb2cuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbHRlcmVkVHJhbnNsaXRlcmF0ZXsiK2dldElEKCkrIn1pOiBJTj0iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZm9ybWF0SW5wdXQodGV4dCwgaW5kZXgpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbnQgcnVuU3RhcnQgPSBpbmRleC5zdGFydDsKKyAgICAgICAgICAgICAgICBpbnQgcnVuTGltaXQgPSBpbmRleC5saW1pdDsKKyAgICAgICAgICAgICAgICBpbnQgcnVuTGVuZ3RoID0gIHJ1bkxpbWl0IC0gcnVuU3RhcnQ7CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIGEgcm9sbGJhY2sgY29weSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICBpbnQgcm9sbGJhY2tPcmlnaW4gPSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHRleHQuY29weShydW5TdGFydCwgcnVuTGltaXQsIHJvbGxiYWNrT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIC8vIFZhcmlhYmxlcyByZWZsZWN0aW5nIHRoZSBjb21taXRtZW50IG9mIGNvbXBsZXRlbHkKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2xpdGVyYXRlZCB0ZXh0LiAgcGFzc1N0YXJ0IGlzIHRoZSBydW5TdGFydCwgYWR2YW5jZWQKKyAgICAgICAgICAgICAgICAvLyBwYXN0IGNvbW1pdHRlZCB0ZXh0LiAgcm9sbGJhY2tTdGFydCBpcyB0aGUgcm9sbGJhY2tPcmlnaW4sCisgICAgICAgICAgICAgICAgLy8gYWR2YW5jZWQgcGFzdCByb2xsYmFjayB0ZXh0IHRoYXQgY29ycmVzcG9uZHMgdG8gY29tbWl0dGVkCisgICAgICAgICAgICAgICAgLy8gdGV4dC4KKyAgICAgICAgICAgICAgICBpbnQgcGFzc1N0YXJ0ID0gcnVuU3RhcnQ7CisgICAgICAgICAgICAgICAgaW50IHJvbGxiYWNrU3RhcnQgPSByb2xsYmFja09yaWdpbjsKKworICAgICAgICAgICAgICAgIC8vIFRoZSBsaW1pdCBmb3IgZWFjaCBwYXNzOyB3ZSBhZHZhbmNlIGJ5IG9uZSBjb2RlIHBvaW50IHdpdGgKKyAgICAgICAgICAgICAgICAvLyBlYWNoIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBpbnQgcGFzc0xpbWl0ID0gaW5kZXguc3RhcnQ7CisKKyAgICAgICAgICAgICAgICAvLyBUb3RhbCBsZW5ndGgsIGluIDE2LWJpdCBjb2RlIHVuaXRzLCBvZiB1bmNvbW1pdHRlZCB0ZXh0LgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxlbmd0aCB0byBiZSByb2xsZWQgYmFjay4KKyAgICAgICAgICAgICAgICBpbnQgdW5jb21taXR0ZWRMZW5ndGggPSAwOworCisgICAgICAgICAgICAgICAgLy8gVG90YWwgZGVsdGEgKGNoYW5nZSBpbiBsZW5ndGgpIGZvciBhbGwgcGFzc2VzCisgICAgICAgICAgICAgICAgaW50IHRvdGFsRGVsdGEgPSAwOworCisgICAgICAgICAgICAgICAgLy8gUEFTUyBNQUlOIExPT1AgLS0gU3RhcnQgd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGFuZCBleHRlbmQKKyAgICAgICAgICAgICAgICAvLyB0aGUgdGV4dCBieSBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZS4gIFJvbGwgYmFjayBwYXJ0aWFsCisgICAgICAgICAgICAgICAgLy8gdHJhbnNsaXRlcmF0aW9ucyBhbmQgY29tbWl0IGNvbXBsZXRlIHRyYW5zbGl0ZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGggb2YgYWRkaXRpb25hbCBjb2RlIHBvaW50LCBlaXRoZXIgb25lIG9yIHR3bworICAgICAgICAgICAgICAgICAgICBpbnQgY2hhckxlbmd0aCA9CisgICAgICAgICAgICAgICAgICAgICAgICBVVEYxNi5nZXRDaGFyQ291bnQodGV4dC5jaGFyMzJBdChwYXNzTGltaXQpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFzc0xpbWl0ICs9IGNoYXJMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXNzTGltaXQgPiBydW5MaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdW5jb21taXR0ZWRMZW5ndGggKz0gY2hhckxlbmd0aDsKKworICAgICAgICAgICAgICAgICAgICBpbmRleC5saW1pdCA9IHBhc3NMaW1pdDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5zZXRMZW5ndGgoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKCJmaWx0ZXJlZFRyYW5zbGl0ZXJhdGV7IitnZXRJRCgpKyJ9aTogIik7CisgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmZvcm1hdElucHV0KGxvZywgdGV4dCwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRGVsZWdhdGUgdG8gc3ViY2xhc3MgZm9yIGFjdHVhbCB0cmFuc2xpdGVyYXRpb24uICBVcG9uCisgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiwgc3RhcnQgd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2xpdGVyYXRlZCB0ZXh0LCBhbmQgbGltaXQgYW5kIGNvbnRleHRMaW1pdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgIC8vIGFkanVzdGVkIGZvciBsZW5ndGggY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlVHJhbnNsaXRlcmF0ZSh0ZXh0LCBpbmRleCwgdHJ1ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKCIgPT4gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmZvcm1hdElucHV0KGxvZywgdGV4dCwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBpbmRleC5saW1pdCAtIHBhc3NMaW1pdDsgLy8gY2hhbmdlIGluIGxlbmd0aAorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGZhaWxlZCB0byBjb21wbGV0ZWx5IHRyYW5zbGl0ZXJhdGUgdGhpcyBwYXNzLgorICAgICAgICAgICAgICAgICAgICAvLyBSb2xsIGJhY2sgdGhlIHRleHQuICBJbmRpY2VzIHJlbWFpbiB1bmNoYW5nZWQ7IHJlc2V0CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW0gd2hlcmUgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXguc3RhcnQgIT0gaW5kZXgubGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHJvbGxiYWNrU3RhcnQsIGFkanVzdGVkIGZvciBsZW5ndGggY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBkZWxldGlvbiBvZiBwYXJ0aWFsbHkgdHJhbnNsaXRlcmF0ZWQgdGV4dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBycyA9IHJvbGxiYWNrU3RhcnQgKyBkZWx0YSAtIChpbmRleC5saW1pdCAtIHBhc3NTdGFydCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBwYXJ0aWFsbHkgdHJhbnNsaXRlcmF0ZWQgdGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKHBhc3NTdGFydCwgaW5kZXgubGltaXQsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSByb2xsYmFjayB0ZXh0IGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY29weShycywgcnMgKyB1bmNvbW1pdHRlZExlbmd0aCwgcGFzc1N0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIGluZGljZXMgdG8gdGhlaXIgb3JpZ2luYWwgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC5zdGFydCA9IHBhc3NTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LmxpbWl0ID0gcGFzc0xpbWl0OworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29udGV4dExpbWl0IC09IGRlbHRhOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKCIgKFJPTExCQUNLKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZGlkIGNvbXBsZXRlbHkgdHJhbnNsaXRlcmF0ZSB0aGlzIHBhc3MuICBVcGRhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGNvbW1pdCBpbmRpY2VzIHRvIHJlY29yZCBob3cgZmFyIHdlIGdvdC4gIEFkanVzdCBpbmRpY2VzCisgICAgICAgICAgICAgICAgICAgIC8vIGZvciBsZW5ndGggY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIHBhc3MgaW5kaWNlcyBwYXN0IHRoZSBjb21taXR0ZWQgdGV4dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NTdGFydCA9IHBhc3NMaW1pdCA9IGluZGV4LnN0YXJ0OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIHJvbGxiYWNrU3RhcnQgZm9yIGxlbmd0aCBjaGFuZ2VzIGFuZCBtb3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBwYXN0IHRoZSBjb21taXR0ZWQgdGV4dC4gIEFsbCBjaGFyYWN0ZXJzIHdlJ3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzZWQgdG8gdGhpcyBwb2ludCBhcmUgY29tbWl0dGVkIG5vdywgc28gemVybworICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB1bmNvbW1pdHRlZExlbmd0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJvbGxiYWNrU3RhcnQgKz0gZGVsdGEgKyB1bmNvbW1pdHRlZExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tbWl0dGVkTGVuZ3RoID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGluZGljZXMgZm9yIGxlbmd0aCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGltaXQgKz0gZGVsdGE7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbERlbHRhICs9IGRlbHRhOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVXRpbGl0eS5lc2NhcGUobG9nLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBvdmVyYWxsIGxpbWl0IGFuZCByb2xsYmFja09yaWdpbiBmb3IgaW5zZXJ0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICAvLyBkZWxldGlvbnMuICBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNvbnRleHRMaW1pdCBiZWNhdXNlCisgICAgICAgICAgICAgICAgLy8gaGFuZGxlVHJhbnNsaXRlcmF0ZSgpIG1haW50YWlucyB0aGF0LgorICAgICAgICAgICAgICAgIHJvbGxiYWNrT3JpZ2luICs9IHRvdGFsRGVsdGE7CisgICAgICAgICAgICAgICAgZ2xvYmFsTGltaXQgKz0gdG90YWxEZWx0YTsKKworICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgcm9sbGJhY2sgY29weQorICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZShyb2xsYmFja09yaWdpbiwgcm9sbGJhY2tPcmlnaW4gKyBydW5MZW5ndGgsICIiKTsKKworICAgICAgICAgICAgICAgIC8vIE1vdmUgc3RhcnQgcGFzdCBjb21taXR0ZWQgdGV4dAorICAgICAgICAgICAgICAgIGluZGV4LnN0YXJ0ID0gcGFzc1N0YXJ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBEZWxlZ2F0ZSB0byBzdWJjbGFzcyBmb3IgYWN0dWFsIHRyYW5zbGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nLmFwcGVuZCgiZmlsdGVyZWRUcmFuc2xpdGVyYXRleyIrZ2V0SUQoKSsifTogIik7CisgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZm9ybWF0SW5wdXQobG9nLCB0ZXh0LCBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaW50IGxpbWl0ID0gaW5kZXgubGltaXQ7CisgICAgICAgICAgICAgICAgaGFuZGxlVHJhbnNsaXRlcmF0ZSh0ZXh0LCBpbmRleCwgaXNJbmNyZW1lbnRhbFJ1bik7CisgICAgICAgICAgICAgICAgZGVsdGEgPSBpbmRleC5saW1pdCAtIGxpbWl0OyAvLyBjaGFuZ2UgaW4gbGVuZ3RoCisKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nLmFwcGVuZCgiID0+ICIpOworICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmZvcm1hdElucHV0KGxvZywgdGV4dCwgaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEluIGEgcHJvcGVybHkgd3JpdHRlbiB0cmFuc2xpdGVyYXRvciwgc3RhcnQgPT0gbGltaXQgYWZ0ZXIKKyAgICAgICAgICAgICAgICAvLyBoYW5kbGVUcmFuc2xpdGVyYXRlKCkgcmV0dXJucyB3aGVuIGluY3JlbWVudGFsIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIC8vIENhdGNoIGNhc2VzIHdoZXJlIHRoZSBzdWJjbGFzcyBkb2Vzbid0IGRvIHRoaXMsIGFuZCB0aHJvdworICAgICAgICAgICAgICAgIC8vIGFuIGV4Y2VwdGlvbi4gIChKdXN0IHBpbm5pbmcgc3RhcnQgdG8gbGltaXQgaXMgYSBiYWQgaWRlYSwKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdoYXQncyBwcm9iYWJseSBoYXBwZW5pbmcgaXMgdGhhdCB0aGUgc3ViY2xhc3MKKyAgICAgICAgICAgICAgICAvLyBpc24ndCB0cmFuc2xpdGVyYXRpbmcgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCwgYW5kIGl0IHNob3VsZAorICAgICAgICAgICAgICAgIC8vIGluIG5vbi1pbmNyZW1lbnRhbCBtb2RlLikKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5jcmVtZW50YWxSdW4gJiYgaW5kZXguc3RhcnQgIT0gaW5kZXgubGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVSUk9SOiBJbmNvbXBsZXRlIG5vbi1pbmNyZW1lbnRhbCB0cmFuc2xpdGVyYXRpb24gYnkgIiArIGdldElEKCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBvdmVyYWxsIGxpbWl0IGZvciBpbnNlcnRpb25zL2RlbGV0aW9ucy4gIERvbid0IG5lZWQKKyAgICAgICAgICAgICAgICAvLyB0byB3b3JyeSBhYm91dCBjb250ZXh0TGltaXQgYmVjYXVzZSBoYW5kbGVUcmFuc2xpdGVyYXRlKCkKKyAgICAgICAgICAgICAgICAvLyBtYWludGFpbnMgdGhhdC4KKyAgICAgICAgICAgICAgICBnbG9iYWxMaW1pdCArPSBkZWx0YTsKKworICAgICAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVXRpbGl0eS5lc2NhcGUobG9nLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmaWx0ZXIgPT0gbnVsbCB8fCBpc0luY3JlbWVudGFsUnVuKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlIGRpZCBjb21wbGV0ZWx5IHRyYW5zbGl0ZXJhdGUgdGhpcworICAgICAgICAgICAgLy8gcnVuLCB0aGVuIHJlcGVhdCB3aXRoIHRoZSBuZXh0IHVuZmlsdGVyZWQgcnVuLgorICAgICAgICB9CisKKyAgICAgICAgLy8gU3RhcnQgaXMgdmFsaWQgd2hlcmUgaXQgaXMuICBMaW1pdCBuZWVkcyB0byBiZSBwdXQgYmFjayB3aGVyZQorICAgICAgICAvLyBpdCB3YXMsIG1vZHVsbyBhZGp1c3RtZW50cyBmb3IgZGVsZXRpb25zL2luc2VydGlvbnMuCisgICAgICAgIGluZGV4LmxpbWl0ID0gZ2xvYmFsTGltaXQ7CisKKyAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbHRlcmVkVHJhbnNsaXRlcmF0ZXsiK2dldElEKCkrIn06IE9VVD0iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LmZvcm1hdElucHV0KHRleHQsIGluZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUcmFuc2xpdGVyYXRlIGEgc3Vic3RyaW5nIG9mIHRleHQsIGFzIHNwZWNpZmllZCBieSBpbmRleCwgdGFraW5nIGZpbHRlcnMKKyAgICAgKiBpbnRvIGFjY291bnQuICBUaGlzIG1ldGhvZCBpcyBmb3Igc3ViY2xhc3NlcyB0aGF0IG5lZWQgdG8gZGVsZWdhdGUgdG8KKyAgICAgKiBhbm90aGVyIHRyYW5zbGl0ZXJhdG9yLCBzdWNoIGFzIENvbXBvdW5kVHJhbnNsaXRlcmF0b3IuCisgICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gYmUgdHJhbnNsaXRlcmF0ZWQKKyAgICAgKiBAcGFyYW0gaW5kZXggdGhlIHBvc2l0aW9uIGluZGljZXMKKyAgICAgKiBAcGFyYW0gaW5jcmVtZW50YWwgaWYgVFJVRSwgdGhlbiBhc3N1bWUgbW9yZSBjaGFyYWN0ZXJzIG1heSBiZSBpbnNlcnRlZAorICAgICAqIGF0IGluZGV4LmxpbWl0LCBhbmQgcG9zdHBvbmUgcHJvY2Vzc2luZyB0byBhY2NvbW9kYXRlIGZ1dHVyZSBpbmNvbWluZworICAgICAqIGNoYXJhY3RlcnMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBmaWx0ZXJlZFRyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5jcmVtZW50YWwpIHsKKyAgICAgICAgZmlsdGVyZWRUcmFuc2xpdGVyYXRlKHRleHQsIGluZGV4LCBpbmNyZW1lbnRhbCwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBjb250ZXh0IHJlcXVpcmVkIGJ5IHRoaXMgdHJhbnNsaXRlcmF0b3IuCisgICAgICogVGhpcyBpcyA8ZW0+cHJlY2VkaW5nPC9lbT4gY29udGV4dC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHplcm8sIGJ1dAorICAgICAqIHN1YmNsYXNzZXMgY2FuIGNoYW5nZSB0aGlzIGJ5IGNhbGxpbmcgPGNvZGU+c2V0TWF4aW11bUNvbnRleHRMZW5ndGgoKTwvY29kZT4uCisgICAgICogRm9yIGV4YW1wbGUsIGlmIGEgdHJhbnNsaXRlcmF0b3IgdHJhbnNsYXRlcyAiZGRkIiAod2hlcmUKKyAgICAgKiBkIGlzIGFueSBkaWdpdCkgdG8gIjU1NSIgd2hlbiBwcmVjZWRlZCBieSAiKGRkZCkiLCB0aGVuIHRoZSBwcmVjZWRpbmcKKyAgICAgKiBjb250ZXh0IGxlbmd0aCBpcyA1LCB0aGUgbGVuZ3RoIG9mICIoZGRkKSIuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwcmVjZWRpbmcgY29udGV4dCBjaGFyYWN0ZXJzIHRoaXMKKyAgICAgKiB0cmFuc2xpdGVyYXRvciBuZWVkcyB0byBleGFtaW5lCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRNYXhpbXVtQ29udGV4dExlbmd0aCgpIHsKKyAgICAgICAgcmV0dXJuIG1heGltdW1Db250ZXh0TGVuZ3RoOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1ldGhvZCBmb3Igc3ViY2xhc3NlcyB0byB1c2UgdG8gc2V0IHRoZSBtYXhpbXVtIGNvbnRleHQgbGVuZ3RoLgorICAgICAqIEBzZWUgI2dldE1heGltdW1Db250ZXh0TGVuZ3RoCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0TWF4aW11bUNvbnRleHRMZW5ndGgoaW50IGEpIHsKKyAgICAgICAgaWYgKGEgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNvbnRleHQgbGVuZ3RoICIgKyBhKTsKKyAgICAgICAgfQorICAgICAgICBtYXhpbXVtQ29udGV4dExlbmd0aCA9IGE7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIGZvciB0aGlzIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqIElmIHRoaXMgaWRlbnRpZmllciBpcyBwYXNzZWQgdG8gPGNvZGU+Z2V0SW5zdGFuY2UoKTwvY29kZT4sIGl0CisgICAgICogd2lsbCByZXR1cm4gdGhpcyBvYmplY3QsIGlmIGl0IGhhcyBiZWVuIHJlZ2lzdGVyZWQuCisgICAgICogQHNlZSAjcmVnaXN0ZXJDbGFzcworICAgICAqIEBzZWUgI2dldEF2YWlsYWJsZUlEcworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SUQoKSB7CisgICAgICAgIHJldHVybiBJRDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIGZvciB0aGlzIHRyYW5zbGl0ZXJhdG9yLiAgT25seQorICAgICAqIGZvciB1c2UgYnkgc3ViY2xhc3Nlcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRJRChTdHJpbmcgaWQpIHsKKyAgICAgICAgSUQgPSBpZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmFtZSBmb3IgdGhpcyB0cmFuc2xpdGVyYXRvciB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvcgorICAgICAqIGRpc3BsYXkgdG8gdGhlIHVzZXIgaW4gdGhlIGRlZmF1bHQgbG9jYWxlLiAgU2VlIHtAbGluaworICAgICAqICNnZXREaXNwbGF5TmFtZShTdHJpbmcsTG9jYWxlKX0gZm9yIGRldGFpbHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoU3RyaW5nIElEKSB7CisgICAgICAgIHJldHVybiBnZXREaXNwbGF5TmFtZShJRCwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5hbWUgZm9yIHRoaXMgdHJhbnNsaXRlcmF0b3IgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IKKyAgICAgKiBkaXNwbGF5IHRvIHRoZSB1c2VyIGluIHRoZSBnaXZlbiBsb2NhbGUuICBUaGlzIG5hbWUgaXMgdGFrZW4KKyAgICAgKiBmcm9tIHRoZSBsb2NhbGUgcmVzb3VyY2UgZGF0YSBpbiB0aGUgc3RhbmRhcmQgbWFubmVyIG9mIHRoZQorICAgICAqIDxjb2RlPmphdmEudGV4dDwvY29kZT4gcGFja2FnZS4KKyAgICAgKgorICAgICAqIDxwPklmIG5vIGxvY2FsaXplZCBuYW1lcyBleGlzdCBpbiB0aGUgc3lzdGVtIHJlc291cmNlIGJ1bmRsZXMsCisgICAgICogYSBuYW1lIGlzIHN5bnRoZXNpemVkIHVzaW5nIGEgbG9jYWxpemVkCisgICAgICogPGNvZGU+TWVzc2FnZUZvcm1hdDwvY29kZT4gcGF0dGVybiBmcm9tIHRoZSByZXNvdXJjZSBkYXRhLiAgVGhlCisgICAgICogYXJndW1lbnRzIHRvIHRoaXMgcGF0dGVybiBhcmUgYW4gaW50ZWdlciBmb2xsb3dlZCBieSBvbmUgb3IgdHdvCisgICAgICogc3RyaW5ncy4gIFRoZSBpbnRlZ2VyIGlzIHRoZSBudW1iZXIgb2Ygc3RyaW5ncywgZWl0aGVyIDEgb3IgMi4KKyAgICAgKiBUaGUgc3RyaW5ncyBhcmUgZm9ybWVkIGJ5IHNwbGl0dGluZyB0aGUgSUQgZm9yIHRoaXMKKyAgICAgKiB0cmFuc2xpdGVyYXRvciBhdCB0aGUgZmlyc3QgJy0nLiAgSWYgdGhlcmUgaXMgbm8gJy0nLCB0aGVuIHRoZQorICAgICAqIGVudGlyZSBJRCBmb3JtcyB0aGUgb25seSBzdHJpbmcuCisgICAgICogQHBhcmFtIGluTG9jYWxlIHRoZSBMb2NhbGUgaW4gd2hpY2ggdGhlIGRpc3BsYXkgbmFtZSBzaG91bGQgYmUKKyAgICAgKiBsb2NhbGl6ZWQuCisgICAgICogQHNlZSBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKFN0cmluZyBpZCwgTG9jYWxlIGluTG9jYWxlKSB7CisKKwkJLy8gUmVzb3VyY2UgYnVuZGxlIGNvbnRhaW5pbmcgZGlzcGxheSBuYW1lIGtleXMgYW5kIHRoZQorCQkvLyBSQl9SVUxFX0JBU0VEX0lEUyBhcnJheS4KKwkJLy8KKwkJLy9JZiB3ZSBldmVyIGludGVncmF0ZSB0aGlzIHdpdGggdGhlIFN1biBKREssIHRoZSByZXNvdXJjZSBidW5kbGUKKyAgICAgICAgLy8gcm9vdCB3aWxsIGNoYW5nZSB0byBzdW4udGV4dC5yZXNvdXJjZXMuTG9jYWxlRWxlbWVudHMKKworICAgICAgICBSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBJQ1VMb2NhbGVEYXRhLmdldExvY2FsZUVsZW1lbnRzKGluTG9jYWxlKTsKKworICAgICAgICAvLyBOb3JtYWxpemUgdGhlIElECisgICAgICAgIFN0cmluZyBzdHZbXSA9IFRyYW5zbGl0ZXJhdG9ySURQYXJzZXIuSUR0b1NUVihpZCk7CisgICAgICAgIGlmIChzdHYgPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gTm8gdGFyZ2V0OyBtYWxmb3JtZWQgaWQKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgSUQgPSBzdHZbMF0gKyAnLScgKyBzdHZbMV07CisgICAgICAgIGlmIChzdHZbMl0gIT0gbnVsbCAmJiBzdHZbMl0ubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICBJRCA9IElEICsgJy8nICsgc3R2WzJdOworICAgICAgICB9CisKKyAgICAgICAgLy8gVXNlIHRoZSByZWdpc3RlcmVkIGRpc3BsYXkgbmFtZSwgaWYgYW55CisgICAgICAgIFN0cmluZyBuID0gKFN0cmluZykgZGlzcGxheU5hbWVDYWNoZS5nZXQobmV3IENhc2VJbnNlbnNpdGl2ZVN0cmluZyhJRCkpOworICAgICAgICBpZiAobiAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVzZSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBlbnRpcmUgdHJhbnNsaXRlcmF0b3IsIGlmIGl0CisgICAgICAgIC8vIGV4aXN0cy4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBidW5kbGUuZ2V0U3RyaW5nKFJCX0RJU1BMQVlfTkFNRV9QUkVGSVggKyBJRCk7CisgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7fQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGZvcm1hdHRlciBmaXJzdDsgaWYgZ2V0U3RyaW5nKCkgZmFpbHMKKyAgICAgICAgICAgIC8vIHdlJ2xsIGV4aXQgdGhlIHRyeSBibG9jaworICAgICAgICAgICAgTWVzc2FnZUZvcm1hdCBmb3JtYXQgPSBuZXcgTWVzc2FnZUZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgYnVuZGxlLmdldFN0cmluZyhSQl9ESVNQTEFZX05BTUVfUEFUVEVSTikpOworICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBhcmd1bWVudCBhcnJheQorICAgICAgICAgICAgT2JqZWN0W10gYXJncyA9IG5ldyBPYmplY3RbXSB7IG5ldyBJbnRlZ2VyKDIpLCBzdHZbMF0sIHN0dlsxXSB9OworCisgICAgICAgICAgICAvLyBVc2UgZGlzcGxheSBuYW1lcyBmb3IgdGhlIHNjcmlwdHMsIGlmIHRoZXkgZXhpc3QKKyAgICAgICAgICAgIGZvciAoaW50IGo9MTsgajw9MjsgKytqKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgYXJnc1tqXSA9IGJ1bmRsZS5nZXRTdHJpbmcoUkJfU0NSSVBUX0RJU1BMQVlfTkFNRV9QUkVGSVggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBhcmdzW2pdKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRm9ybWF0IGl0IHVzaW5nIHRoZSBwYXR0ZXJuIGluIHRoZSByZXNvdXJjZQorICAgICAgICAgICAgcmV0dXJuIChzdHZbMl0ubGVuZ3RoKCkgPiAwKSA/CisgICAgICAgICAgICAgICAgKGZvcm1hdC5mb3JtYXQoYXJncykgKyAnLycgKyBzdHZbMl0pIDoKKyAgICAgICAgICAgICAgICBmb3JtYXQuZm9ybWF0KGFyZ3MpOworICAgICAgICB9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZTIpIHt9CisKKyAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzIHBvaW50IHVubGVzcyB0aGVyZSBpcyBzb21ldGhpbmcKKyAgICAgICAgLy8gd3Jvbmcgd2l0aCB0aGUgYnVpbGQgb3IgdGhlIFJCX0RJU1BMQVlfTkFNRV9QQVRURVJOIGhhcworICAgICAgICAvLyBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUgcm9vdCBSQl9MT0NBTEVfRUxFTUVOVFMgcmVzb3VyY2UuCisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZmlsdGVyIHVzZWQgYnkgdGhpcyB0cmFuc2xpdGVyYXRvciwgb3IgPHR0Pm51bGw8L3R0PgorICAgICAqIGlmIHRoaXMgdHJhbnNsaXRlcmF0b3IgdXNlcyBubyBmaWx0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFVuaWNvZGVGaWx0ZXIgZ2V0RmlsdGVyKCkgeworICAgICAgICByZXR1cm4gZmlsdGVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoYW5nZXMgdGhlIGZpbHRlciB1c2VkIGJ5IHRoaXMgdHJhbnNsaXRlcmF0b3IuICBJZiB0aGUgZmlsdGVyCisgICAgICogaXMgc2V0IHRvIDx0dD5udWxsPC90dD4gdGhlbiBubyBmaWx0ZXJpbmcgd2lsbCBvY2N1ci4KKyAgICAgKgorICAgICAqIDxwPkNhbGxlcnMgbXVzdCB0YWtlIGNhcmUgaWYgYSB0cmFuc2xpdGVyYXRvciBpcyBpbiB1c2UgYnkKKyAgICAgKiBtdWx0aXBsZSB0aHJlYWRzLiAgVGhlIGZpbHRlciBzaG91bGQgbm90IGJlIGNoYW5nZWQgYnkgb25lCisgICAgICogdGhyZWFkIHdoaWxlIGFub3RoZXIgdGhyZWFkIG1heSBiZSB0cmFuc2xpdGVyYXRpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RmlsdGVyKFVuaWNvZGVGaWx0ZXIgZmlsdGVyKSB7CisgICAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gb2JqZWN0IGdpdmVuIGl0cyBJRC4KKyAgICAgKiBUaGUgSUQgbXVzdCBiZSBlaXRoZXIgYSBzeXN0ZW0gdHJhbnNsaXRlcmF0b3IgSUQgb3IgYSBJRCByZWdpc3RlcmVkCisgICAgICogdXNpbmcgPGNvZGU+cmVnaXN0ZXJDbGFzcygpPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBJRCBhIHZhbGlkIElELCBhcyBlbnVtZXJhdGVkIGJ5IDxjb2RlPmdldEF2YWlsYWJsZUlEcygpPC9jb2RlPgorICAgICAqIEByZXR1cm4gQSA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIGdpdmVuIElECisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGdpdmVuIElEIGlzIGludmFsaWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKElELCBGT1JXQVJEKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgPGNvZGU+VHJhbnNsaXRlcmF0b3I8L2NvZGU+IG9iamVjdCBnaXZlbiBpdHMgSUQuCisgICAgICogVGhlIElEIG11c3QgYmUgZWl0aGVyIGEgc3lzdGVtIHRyYW5zbGl0ZXJhdG9yIElEIG9yIGEgSUQgcmVnaXN0ZXJlZAorICAgICAqIHVzaW5nIDxjb2RlPnJlZ2lzdGVyQ2xhc3MoKTwvY29kZT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gSUQgYSB2YWxpZCBJRCwgYXMgZW51bWVyYXRlZCBieSA8Y29kZT5nZXRBdmFpbGFibGVJRHMoKTwvY29kZT4KKyAgICAgKiBAcGFyYW0gZGlyIGVpdGhlciBGT1JXQVJEIG9yIFJFVkVSU0UuICBJZiBSRVZFUlNFIHRoZW4gdGhlCisgICAgICogaW52ZXJzZSBvZiB0aGUgZ2l2ZW4gSUQgaXMgaW5zdGFudGlhdGVkLgorICAgICAqIEByZXR1cm4gQSA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIGdpdmVuIElECisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGdpdmVuIElEIGlzIGludmFsaWQuCisgICAgICogQHNlZSAjcmVnaXN0ZXJDbGFzcworICAgICAqIEBzZWUgI2dldEF2YWlsYWJsZUlEcworICAgICAqIEBzZWUgI2dldElECisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBjYW5vbklEID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBWZWN0b3IgbGlzdCA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgVW5pY29kZVNldFtdIGdsb2JhbEZpbHRlciA9IG5ldyBVbmljb2RlU2V0WzFdOworICAgICAgICBpZiAoIVRyYW5zbGl0ZXJhdG9ySURQYXJzZXIucGFyc2VDb21wb3VuZElEKElELCBkaXIsIGNhbm9uSUQsIGxpc3QsIGdsb2JhbEZpbHRlcikpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgSUQgIiArIElEKTsKKyAgICAgICAgfQorCisgICAgICAgIFRyYW5zbGl0ZXJhdG9ySURQYXJzZXIuaW5zdGFudGlhdGVMaXN0KGxpc3QsIG51bGwsIC0xKTsKKworICAgICAgICAvLyBhc3NlcnQobGlzdC5zaXplKCkgPiAwKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IG51bGw7CisgICAgICAgIHN3aXRjaCAobGlzdC5zaXplKCkpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgdCA9IChUcmFuc2xpdGVyYXRvcikgbGlzdC5lbGVtZW50QXQoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHQgPSBuZXcgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihsaXN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHQuc2V0SUQoY2Fub25JRC50b1N0cmluZygpKTsKKyAgICAgICAgaWYgKGdsb2JhbEZpbHRlclswXSAhPSBudWxsKSB7CisgICAgICAgICAgICB0LnNldEZpbHRlcihnbG9iYWxGaWx0ZXJbMF0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIHRyYW5zbGl0ZXJhdG9yIGZyb20gYSBiYXNpYyBJRC4gIFRoaXMgaXMgYW4gSUQKKyAgICAgKiBjb250YWluaW5nIG9ubHkgdGhlIGZvcndhcmQgZGlyZWN0aW9uIHNvdXJjZSwgdGFyZ2V0LCBhbmQKKyAgICAgKiB2YXJpYW50LgorICAgICAqIEBwYXJhbSBpZCBhIGJhc2ljIElEIG9mIHRoZSBmb3JtIFMtVCBvciBTLVQvVi4KKyAgICAgKiBAcGFyYW0gY2Fub25JRCBjYW5vbmljYWwgSUQgdG8gYXBwbHkgdG8gdGhlIHJlc3VsdCwgb3IKKyAgICAgKiBudWxsIHRvIGxlYXZlIHRoZSBJRCB1bmNoYW5nZWQKKyAgICAgKiBAcmV0dXJuIGEgbmV3bHkgY3JlYXRlZCBUcmFuc2xpdGVyYXRvciBvciBudWxsIGlmIHRoZSBJRCBpcworICAgICAqIGludmFsaWQuCisgICAgICovCisgICAgc3RhdGljIFRyYW5zbGl0ZXJhdG9yIGdldEJhc2ljSW5zdGFuY2UoU3RyaW5nIGlkLCBTdHJpbmcgY2Fub25JRCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IgdCA9IHJlZ2lzdHJ5LmdldChpZCwgcyk7CisgICAgICAgIGlmIChzLmxlbmd0aCgpICE9IDApIHsKKyAgICAgICAgICAgIC8vIGFzc2VydCh0PT0wKTsKKyAgICAgICAgICAgIC8vIEluc3RhbnRpYXRlIGFuIGFsaWFzCisgICAgICAgICAgICB0ID0gZ2V0SW5zdGFuY2Uocy50b1N0cmluZygpLCBGT1JXQVJEKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodCAhPSBudWxsICYmIGNhbm9uSUQgIT0gbnVsbCkgeworICAgICAgICAgICAgdC5zZXRJRChjYW5vbklEKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgPGNvZGU+VHJhbnNsaXRlcmF0b3I8L2NvZGU+IG9iamVjdCBjb25zdHJ1Y3RlZCBmcm9tCisgICAgICogdGhlIGdpdmVuIHJ1bGUgc3RyaW5nLiAgVGhpcyB3aWxsIGJlIGEgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IsCisgICAgICogaWYgdGhlIHJ1bGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgcnVsZXMsIG9yIGEKKyAgICAgKiBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yLCBpZiBpdCBjb250YWlucyBJRCBibG9ja3MsIG9yIGEKKyAgICAgKiBOdWxsVHJhbnNsaXRlcmF0b3IsIGlmIGl0IGNvbnRhaW5zIElEIGJsb2NrcyB3aGljaCBwYXJzZSBhcworICAgICAqIGVtcHR5IGZvciB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVHJhbnNsaXRlcmF0b3IgY3JlYXRlRnJvbVJ1bGVzKFN0cmluZyBJRCwgU3RyaW5nIHJ1bGVzLCBpbnQgZGlyKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBudWxsOworCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yUGFyc2VyIHBhcnNlciA9IG5ldyBUcmFuc2xpdGVyYXRvclBhcnNlcigpOworICAgICAgICBwYXJzZXIucGFyc2UocnVsZXMsIGRpcik7CisKKyAgICAgICAgLy8gTk9URTogVGhlIGxvZ2ljIGhlcmUgbWF0Y2hlcyB0aGF0IGluIFRyYW5zbGl0ZXJhdG9yUmVnaXN0cnkuCisgICAgICAgIGlmIChwYXJzZXIuaWRCbG9jay5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAocGFyc2VyLmRhdGEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIE5vIGlkQmxvY2ssIG5vIGRhdGEgLS0gdGhpcyBpcyBqdXN0IGFuCisgICAgICAgICAgICAgICAgLy8gYWxpYXMgZm9yIE51bGwKKyAgICAgICAgICAgICAgICB0ID0gbmV3IE51bGxUcmFuc2xpdGVyYXRvcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBObyBpZEJsb2NrLCBkYXRhICE9IDAgLS0gdGhpcyBpcyBhbgorICAgICAgICAgICAgICAgIC8vIG9yZGluYXJ5IFJCVF9EQVRBLgorICAgICAgICAgICAgICAgIHQgPSBuZXcgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IoSUQsIHBhcnNlci5kYXRhLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChwYXJzZXIuZGF0YSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gaWRCbG9jaywgbm8gZGF0YSAtLSB0aGlzIGlzIGFuIGFsaWFzLiAgVGhlIElEIGhhcworICAgICAgICAgICAgICAgIC8vIGJlZW4gbXVuZ2VkIGZyb20gcmV2ZXJzZSBpbnRvIGZvcndhcmQgbW9kZSwgaWYKKyAgICAgICAgICAgICAgICAvLyBuZWNlc3NhcnksIHNvIGluc3RhbnRpYXRlIHRoZSBJRCBpbiB0aGUgZm9yd2FyZAorICAgICAgICAgICAgICAgIC8vIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICB0ID0gZ2V0SW5zdGFuY2UocGFyc2VyLmlkQmxvY2spOworICAgICAgICAgICAgICAgIGlmICh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdC5zZXRJRChJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBpZEJsb2NrIGFuZCBkYXRhIC0tIHRoaXMgaXMgYSBjb21wb3VuZAorICAgICAgICAgICAgICAgIC8vIFJCVAorICAgICAgICAgICAgICAgIHQgPSBuZXcgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IoIl8iLCBwYXJzZXIuZGF0YSwgbnVsbCk7CisgICAgICAgICAgICAgICAgdCA9IG5ldyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yKElELCBwYXJzZXIuaWRCbG9jaywgcGFyc2VyLmlkU3BsaXRQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlci5jb21wb3VuZEZpbHRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHQuc2V0RmlsdGVyKHBhcnNlci5jb21wb3VuZEZpbHRlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHJ1bGUgc3RyaW5nIGZvciB0aGlzIHRyYW5zbGl0ZXJhdG9yLgorICAgICAqIEBwYXJhbSBlc2NhcGVVbnByaW50YWJsZSBpZiB0cnVlLCB0aGVuIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMKKyAgICAgKiB3aWxsIGJlIGNvbnZlcnRlZCB0byBlc2NhcGUgZm9ybSBiYWNrc2xhc2gtJ3UnIG9yCisgICAgICogYmFja3NsYXNoLSdVJy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvUnVsZXMoYm9vbGVhbiBlc2NhcGVVbnByaW50YWJsZSkgeworICAgICAgICByZXR1cm4gYmFzZVRvUnVsZXMoZXNjYXBlVW5wcmludGFibGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBydWxlIHN0cmluZyBmb3IgdGhpcyB0cmFuc2xpdGVyYXRvci4gIFRoaXMgaXMKKyAgICAgKiBhIG5vbi1vdmVycmlkZWFibGUgYmFzZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1YmNsYXNzZXMKKyAgICAgKiBtYXkgY2FsbC4gIEl0IHNpbXBseSBtdW5nZXMgdGhlIElEIGludG8gdGhlIGNvcnJlY3QgZm9ybWF0LAorICAgICAqIHRoYXQgaXMsICJmb28iID0+ICI6OmZvbyIuCisgICAgICogQHBhcmFtIGVzY2FwZVVucHJpbnRhYmxlIGlmIHRydWUsIHRoZW4gdW5wcmludGFibGUgY2hhcmFjdGVycworICAgICAqIHdpbGwgYmUgY29udmVydGVkIHRvIGVzY2FwZSBmb3JtIGJhY2tzbGFzaC0ndScgb3IKKyAgICAgKiBiYWNrc2xhc2gtJ1UnLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgYmFzZVRvUnVsZXMoYm9vbGVhbiBlc2NhcGVVbnByaW50YWJsZSkgeworICAgICAgICAvLyBUaGUgYmFzZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBvZiB0b1J1bGVzIG11bmdlcyB0aGUgSUQgaW50bworICAgICAgICAvLyB0aGUgY29ycmVjdCBmb3JtYXQuICBUaGF0IGlzOiBmb28gPT4gOjpmb28KKyAgICAgICAgLy8gS0VFUCBpbiBzeW5jIHdpdGggcmJ0X3BhcnMKKyAgICAgICAgaWYgKGVzY2FwZVVucHJpbnRhYmxlKSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgcnVsZXNTb3VyY2UgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBnZXRJRCgpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGlkLmxlbmd0aCgpOykgeworICAgICAgICAgICAgICAgIGludCBjID0gVVRGMTYuY2hhckF0KGlkLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIVV0aWxpdHkuZXNjYXBlVW5wcmludGFibGUocnVsZXNTb3VyY2UsIGMpKSB7CisgICAgICAgICAgICAgICAgICAgIFVURjE2LmFwcGVuZChydWxlc1NvdXJjZSwgYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcnVsZXNTb3VyY2UuaW5zZXJ0KDAsICI6OiIpOworICAgICAgICAgICAgcnVsZXNTb3VyY2UuYXBwZW5kKElEX0RFTElNKTsKKyAgICAgICAgICAgIHJldHVybiBydWxlc1NvdXJjZS50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiOjoiICsgZ2V0SUQoKSArIElEX0RFTElNOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBhbGwgY2hhcmFjdGVycyB0aGF0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUKKyAgICAgKiBpbnB1dCB0ZXh0IGJ5IHRoaXMgVHJhbnNsaXRlcmF0b3IuICBUaGlzIGluY29ycG9yYXRlcyB0aGlzCisgICAgICogb2JqZWN0J3MgY3VycmVudCBmaWx0ZXI7IGlmIHRoZSBmaWx0ZXIgaXMgY2hhbmdlZCwgdGhlIHJldHVybgorICAgICAqIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgICAqIHJldHVybnMgYW4gZW1wdHkgc2V0LiAgU29tZSBzdWJjbGFzc2VzIG1heSBvdmVycmlkZSB7QGxpbmsKKyAgICAgKiAjaGFuZGxlR2V0U291cmNlU2V0fSB0byByZXR1cm4gYSBtb3JlIHByZWNpc2UgcmVzdWx0LiAgVGhlCisgICAgICogcmV0dXJuIHJlc3VsdCBpcyBhcHByb3hpbWF0ZSBpbiBhbnkgY2FzZSBhbmQgaXMgaW50ZW5kZWQgZm9yCisgICAgICogdXNlIGJ5IHRlc3RzLCB0b29scywgb3IgdXRpbGl0aWVzLgorICAgICAqIEBzZWUgI2dldFRhcmdldFNldAorICAgICAqIEBzZWUgI2hhbmRsZUdldFNvdXJjZVNldAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFVuaWNvZGVTZXQgZ2V0U291cmNlU2V0KCkgeworICAgICAgICBVbmljb2RlU2V0IHNldCA9IGhhbmRsZUdldFNvdXJjZVNldCgpOworICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIFVuaWNvZGVTZXQgZmlsdGVyU2V0OworICAgICAgICAgICAgLy8gTW9zdCwgYnV0IG5vdCBhbGwgZmlsdGVycyB3aWxsIGJlIFVuaWNvZGVTZXRzLiAgT3B0aW1pemUgZm9yCisgICAgICAgICAgICAvLyB0aGUgaGlnaC1ydW5uZXIgY2FzZS4KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZmlsdGVyU2V0ID0gKFVuaWNvZGVTZXQpIGZpbHRlcjsKKyAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyU2V0ID0gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICAgICAgICAgICAgICBmaWx0ZXIuYWRkTWF0Y2hTZXRUbyhmaWx0ZXJTZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0LnJldGFpbkFsbChmaWx0ZXJTZXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRnJhbWV3b3JrIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIHNldCBvZiBhbGwgY2hhcmFjdGVycyB0aGF0CisgICAgICogbWF5IGJlIG1vZGlmaWVkIGluIHRoZSBpbnB1dCB0ZXh0IGJ5IHRoaXMgVHJhbnNsaXRlcmF0b3IsCisgICAgICogaWdub3JpbmcgdGhlIGVmZmVjdCBvZiB0aGlzIG9iamVjdCdzIGZpbHRlci4gIFRoZSBiYXNlIGNsYXNzCisgICAgICogaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZW1wdHkgc2V0LiAgU3ViY2xhc3NlcyB0aGF0IHdpc2ggdG8KKyAgICAgKiBpbXBsZW1lbnQgdGhpcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCisgICAgICogQHJldHVybiB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCB0aGlzIHRyYW5zbGl0ZXJhdG9yIG1heQorICAgICAqIG1vZGlmeS4gIFRoZSBzZXQgbWF5IGJlIG1vZGlmaWVkLCBzbyBzdWJjbGFzc2VzIHNob3VsZCByZXR1cm4gYQorICAgICAqIG5ld2x5LWNyZWF0ZWQgb2JqZWN0LgorICAgICAqIEBzZWUgI2dldFNvdXJjZVNldAorICAgICAqIEBzZWUgI2dldFRhcmdldFNldAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHJvdGVjdGVkIFVuaWNvZGVTZXQgaGFuZGxlR2V0U291cmNlU2V0KCkgeworICAgICAgICByZXR1cm4gbmV3IFVuaWNvZGVTZXQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgYWxsIGNoYXJhY3RlcnMgdGhhdCBtYXkgYmUgZ2VuZXJhdGVkIGFzCisgICAgICogcmVwbGFjZW1lbnQgdGV4dCBieSB0aGlzIHRyYW5zbGl0ZXJhdG9yLiAgVGhlIGRlZmF1bHQKKyAgICAgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBlbXB0eSBzZXQuICBTb21lIHN1YmNsYXNzZXMgbWF5CisgICAgICogb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcmV0dXJuIGEgbW9yZSBwcmVjaXNlIHJlc3VsdC4gIFRoZQorICAgICAqIHJldHVybiByZXN1bHQgaXMgYXBwcm94aW1hdGUgaW4gYW55IGNhc2UgYW5kIGlzIGludGVuZGVkIGZvcgorICAgICAqIHVzZSBieSB0ZXN0cywgdG9vbHMsIG9yIHV0aWxpdGllcyByZXF1aXJpbmcgc3VjaAorICAgICAqIG1ldGEtaW5mb3JtYXRpb24uCisgICAgICogQHNlZSAjZ2V0VGFyZ2V0U2V0CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCBnZXRUYXJnZXRTZXQoKSB7CisgICAgICAgIHJldHVybiBuZXcgVW5pY29kZVNldCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhpcyB0cmFuc2xpdGVyYXRvcidzIGludmVyc2UuICBTZWUgdGhlIGNsYXNzCisgICAgICogZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gIFRoaXMgaW1wbGVtZW50YXRpb24gc2ltcGx5IGludmVydHMKKyAgICAgKiB0aGUgdHdvIGVudGl0aWVzIGluIHRoZSBJRCBhbmQgYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlCisgICAgICogcmVzdWx0aW5nIHRyYW5zbGl0ZXJhdG9yLiAgVGhhdCBpcywgaWYgPGNvZGU+Z2V0SUQoKTwvY29kZT4KKyAgICAgKiByZXR1cm5zICJBLUIiLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgKiA8Y29kZT5nZXRJbnN0YW5jZSgiQi1BIik8L2NvZGU+LCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGF0CisgICAgICogY2FsbCBmYWlscy4KKyAgICAgKgorICAgICAqIDxwPlN1YmNsYXNzZXMgd2l0aCBrbm93bGVkZ2Ugb2YgdGhlaXIgaW52ZXJzZSBtYXkgd2lzaCB0bworICAgICAqIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgorICAgICAqCisgICAgICogQHJldHVybiBhIHRyYW5zbGl0ZXJhdG9yIHRoYXQgaXMgYW4gaW52ZXJzZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgICogZXhhY3QsIG9mIHRoaXMgdHJhbnNsaXRlcmF0b3IsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vIHN1Y2gKKyAgICAgKiB0cmFuc2xpdGVyYXRvciBpcyByZWdpc3RlcmVkLgorICAgICAqIEBzZWUgI3JlZ2lzdGVyQ2xhc3MKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgVHJhbnNsaXRlcmF0b3IgZ2V0SW52ZXJzZSgpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKElELCBSRVZFUlNFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgYSBzdWJjbGFzcyBvZiA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gd2l0aCB0aGUKKyAgICAgKiBzeXN0ZW0uICBUaGlzIHN1YmNsYXNzIG11c3QgaGF2ZSBhIHB1YmxpYyBjb25zdHJ1Y3RvciB0YWtpbmcgbm8KKyAgICAgKiBhcmd1bWVudHMuICBXaGVuIHRoYXQgY29uc3RydWN0b3IgaXMgY2FsbGVkLCB0aGUgcmVzdWx0aW5nCisgICAgICogb2JqZWN0IG11c3QgcmV0dXJuIHRoZSA8Y29kZT5JRDwvY29kZT4gcGFzc2VkIHRvIHRoaXMgbWV0aG9kIGlmCisgICAgICogaXRzIDxjb2RlPmdldElEKCk8L2NvZGU+IG1ldGhvZCBpcyBjYWxsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gSUQgdGhlIHJlc3VsdCBvZiA8Y29kZT5nZXRJRCgpPC9jb2RlPiBmb3IgdGhpcworICAgICAqIHRyYW5zbGl0ZXJhdG9yCisgICAgICogQHBhcmFtIHRyYW5zQ2xhc3MgYSBzdWJjbGFzcyBvZiA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4KKyAgICAgKiBAc2VlICN1bnJlZ2lzdGVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xhc3MoU3RyaW5nIElELCBDbGFzcyB0cmFuc0NsYXNzLCBTdHJpbmcgZGlzcGxheU5hbWUpIHsKKyAgICAgICAgcmVnaXN0cnkucHV0KElELCB0cmFuc0NsYXNzLCB0cnVlKTsKKyAgICAgICAgaWYgKGRpc3BsYXlOYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRpc3BsYXlOYW1lQ2FjaGUucHV0KG5ldyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcoSUQpLCBkaXNwbGF5TmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciBhIGZhY3Rvcnkgb2JqZWN0IHdpdGggdGhlIGdpdmVuIElELiAgVGhlIGZhY3RvcnkKKyAgICAgKiBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHJhbnNsaXRlcmF0b3IuCisgICAgICogQHBhcmFtIElEIHRoZSBJRCBvZiB0aGlzIHRyYW5zbGl0ZXJhdG9yCisgICAgICogQHBhcmFtIGZhY3RvcnkgdGhlIGZhY3Rvcnkgb2JqZWN0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRmFjdG9yeShTdHJpbmcgSUQsIEZhY3RvcnkgZmFjdG9yeSkgeworICAgICAgICByZWdpc3RyeS5wdXQoSUQsIGZhY3RvcnksIHRydWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIGEgVHJhbnNsaXRlcmF0b3Igb2JqZWN0IHdpdGggdGhlIGdpdmVuIElELgorICAgICAqIEBwYXJhbSBJRCB0aGUgSUQgb2YgdGhpcyB0cmFuc2xpdGVyYXRvcgorICAgICAqIEBwYXJhbSB0cmFucyB0aGUgVHJhbnNsaXRlcmF0b3Igb2JqZWN0IAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVySW5zdGFuY2UoVHJhbnNsaXRlcmF0b3IgdHJhbnMpIHsKKyAgICAgICAgcmVnaXN0cnkucHV0KHRyYW5zLmdldElEKCksIHRyYW5zLCB0cnVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciBhIFRyYW5zbGl0ZXJhdG9yIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBJRC4KKyAgICAgKiBAcGFyYW0gSUQgdGhlIElEIG9mIHRoaXMgdHJhbnNsaXRlcmF0b3IKKyAgICAgKiBAcGFyYW0gdHJhbnMgdGhlIFRyYW5zbGl0ZXJhdG9yIG9iamVjdAorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVySW5zdGFuY2UoVHJhbnNsaXRlcmF0b3IgdHJhbnMsIGJvb2xlYW4gdmlzaWJsZSkgeworICAgICAgICByZWdpc3RyeS5wdXQodHJhbnMuZ2V0SUQoKSwgdHJhbnMsIHZpc2libGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIHR3byB0YXJnZXRzIGFzIGJlaW5nIGludmVyc2VzIG9mIG9uZSBhbm90aGVyLiAgRm9yCisgICAgICogZXhhbXBsZSwgY2FsbGluZyByZWdpc3RlclNwZWNpYWxJbnZlcnNlKCJORkMiLCAiTkZEIiwgdHJ1ZSkgY2F1c2VzCisgICAgICogVHJhbnNsaXRlcmF0b3IgdG8gZm9ybSB0aGUgZm9sbG93aW5nIGludmVyc2UgcmVsYXRpb25zaGlwczoKKyAgICAgKgorICAgICAqIDxwcmU+TkZDID0+IE5GRAorICAgICAqIEFueS1ORkMgPT4gQW55LU5GRAorICAgICAqIE5GRCA9PiBORkMKKyAgICAgKiBBbnktTkZEID0+IEFueS1ORkM8L3ByZT4KKyAgICAgKgorICAgICAqIChXaXRob3V0IHRoZSBzcGVjaWFsIGludmVyc2UgcmVnaXN0cmF0aW9uLCB0aGUgaW52ZXJzZSBvZiBORkMKKyAgICAgKiB3b3VsZCBiZSBORkMtQW55LikgIE5vdGUgdGhhdCBORkQgaXMgc2hvcnRoYW5kIGZvciBBbnktTkZELCBidXQKKyAgICAgKiB0aGF0IHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mICJBbnktIiBpcyBwcmVzZXJ2ZWQuCisgICAgICoKKyAgICAgKiA8cD5UaGUgcmVsYXRpb25zaGlwIGlzIHN5bW1ldHJpY2FsOyByZWdpc3RlcmluZyAoYSwgYikgaXMKKyAgICAgKiBlcXVpdmFsZW50IHRvIHJlZ2lzdGVyaW5nIChiLCBhKS4KKyAgICAgKgorICAgICAqIDxwPlRoZSByZWxldmFudCBJRHMgbXVzdCBzdGlsbCBiZSByZWdpc3RlcmVkIHNlcGFyYXRlbHkgYXMKKyAgICAgKiBmYWN0b3JpZXMgb3IgY2xhc3Nlcy4KKyAgICAgKgorICAgICAqIDxwPk9ubHkgdGhlIHRhcmdldHMgYXJlIHNwZWNpZmllZC4gIFNwZWNpYWwgaW52ZXJzZXMgYWx3YXlzCisgICAgICogaGF2ZSB0aGUgZm9ybSBBbnktVGFyZ2V0MSA8PT4gQW55LVRhcmdldDIuICBUaGUgdGFyZ2V0IHNob3VsZAorICAgICAqIGhhdmUgY2Fub25pY2FsIGNhc2luZyAodGhlIGNhc2luZyBkZXNpcmVkIHRvIGJlIHByb2R1Y2VkIHdoZW4KKyAgICAgKiBhbiBpbnZlcnNlIGlzIGZvcm1lZCkgYW5kIHNob3VsZCBjb250YWluIG5vIHdoaXRlc3BhY2Ugb3Igb3RoZXIKKyAgICAgKiBleHRyYW5lb3VzIGNoYXJhY3RlcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQgYWdhaW5zdCB3aGljaCB0byByZWdpc3RlciB0aGUgaW52ZXJzZQorICAgICAqIEBwYXJhbSBpbnZlcnNlVGFyZ2V0IHRoZSBpbnZlcnNlIG9mIHRhcmdldCwgdGhhdCBpcworICAgICAqIEFueS10YXJnZXQuZ2V0SW52ZXJzZSgpID0+IEFueS1pbnZlcnNlVGFyZ2V0CisgICAgICogQHBhcmFtIGJpZGlyZWN0aW9uYWwgaWYgdHJ1ZSwgcmVnaXN0ZXIgdGhlIHJldmVyc2UgcmVsYXRpb24KKyAgICAgKiBhcyB3ZWxsLCB0aGF0IGlzLCBBbnktaW52ZXJzZVRhcmdldC5nZXRJbnZlcnNlKCkgPT4gQW55LXRhcmdldAorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU3BlY2lhbEludmVyc2UoU3RyaW5nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbnZlcnNlVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiaWRpcmVjdGlvbmFsKSB7CisgICAgICAgIFRyYW5zbGl0ZXJhdG9ySURQYXJzZXIucmVnaXN0ZXJTcGVjaWFsSW52ZXJzZSh0YXJnZXQsIGludmVyc2VUYXJnZXQsIGJpZGlyZWN0aW9uYWwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVucmVnaXN0ZXJzIGEgdHJhbnNsaXRlcmF0b3Igb3IgY2xhc3MuICBUaGlzIG1heSBiZSBlaXRoZXIKKyAgICAgKiBhIHN5c3RlbSB0cmFuc2xpdGVyYXRvciBvciBhIHVzZXIgdHJhbnNsaXRlcmF0b3Igb3IgY2xhc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gSUQgdGhlIElEIG9mIHRoZSB0cmFuc2xpdGVyYXRvciBvciBjbGFzcworICAgICAqIEBzZWUgI3JlZ2lzdGVyQ2xhc3MKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdW5yZWdpc3RlcihTdHJpbmcgSUQpIHsKKyAgICAgICAgZGlzcGxheU5hbWVDYWNoZS5yZW1vdmUobmV3IENhc2VJbnNlbnNpdGl2ZVN0cmluZyhJRCkpOworICAgICAgICByZWdpc3RyeS5yZW1vdmUoSUQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb3ZlciB0aGUgcHJvZ3JhbW1hdGljIG5hbWVzIG9mIHJlZ2lzdGVyZWQKKyAgICAgKiA8Y29kZT5UcmFuc2xpdGVyYXRvcjwvY29kZT4gb2JqZWN0cy4gIFRoaXMgaW5jbHVkZXMgYm90aCBzeXN0ZW0KKyAgICAgKiB0cmFuc2xpdGVyYXRvcnMgYW5kIHVzZXIgdHJhbnNsaXRlcmF0b3JzIHJlZ2lzdGVyZWQgdXNpbmcKKyAgICAgKiA8Y29kZT5yZWdpc3RlckNsYXNzKCk8L2NvZGU+LiAgVGhlIGVudW1lcmF0ZWQgbmFtZXMgbWF5IGJlCisgICAgICogcGFzc2VkIHRvIDxjb2RlPmdldEluc3RhbmNlKCk8L2NvZGU+LgorICAgICAqCisgICAgICogQHJldHVybiBBbiA8Y29kZT5FbnVtZXJhdGlvbjwvY29kZT4gb3ZlciA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdHMKKyAgICAgKiBAc2VlICNnZXRJbnN0YW5jZQorICAgICAqIEBzZWUgI3JlZ2lzdGVyQ2xhc3MKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudW1lcmF0aW9uIGdldEF2YWlsYWJsZUlEcygpIHsKKyAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmdldEF2YWlsYWJsZUlEcygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb3ZlciB0aGUgc291cmNlIG5hbWVzIG9mIHJlZ2lzdGVyZWQKKyAgICAgKiB0cmFuc2xpdGVyYXRvcnMuICBTb3VyY2UgbmFtZXMgbWF5IGJlIHBhc3NlZCB0bworICAgICAqIGdldEF2YWlsYWJsZVRhcmdldHMoKSB0byBvYnRhaW4gYXZhaWxhYmxlIHRhcmdldHMgZm9yIGVhY2gKKyAgICAgKiBzb3VyY2UuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtZXJhdGlvbiBnZXRBdmFpbGFibGVTb3VyY2VzKCkgeworICAgICAgICByZXR1cm4gcmVnaXN0cnkuZ2V0QXZhaWxhYmxlU291cmNlcygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb3ZlciB0aGUgdGFyZ2V0IG5hbWVzIG9mIHJlZ2lzdGVyZWQKKyAgICAgKiB0cmFuc2xpdGVyYXRvcnMgaGF2aW5nIGEgZ2l2ZW4gc291cmNlIG5hbWUuICBUYXJnZXQgbmFtZXMgbWF5CisgICAgICogYmUgcGFzc2VkIHRvIGdldEF2YWlsYWJsZVZhcmlhbnRzKCkgdG8gb2J0YWluIGF2YWlsYWJsZQorICAgICAqIHZhcmlhbnRzIGZvciBlYWNoIHNvdXJjZSBhbmQgdGFyZ2V0IHBhaXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtZXJhdGlvbiBnZXRBdmFpbGFibGVUYXJnZXRzKFN0cmluZyBzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmdldEF2YWlsYWJsZVRhcmdldHMoc291cmNlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG92ZXIgdGhlIHZhcmlhbnQgbmFtZXMgb2YgcmVnaXN0ZXJlZAorICAgICAqIHRyYW5zbGl0ZXJhdG9ycyBoYXZpbmcgYSBnaXZlbiBzb3VyY2UgbmFtZSBhbmQgdGFyZ2V0IG5hbWUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtZXJhdGlvbiBnZXRBdmFpbGFibGVWYXJpYW50cyhTdHJpbmcgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdldCkgeworICAgICAgICByZXR1cm4gcmVnaXN0cnkuZ2V0QXZhaWxhYmxlVmFyaWFudHMoc291cmNlLCB0YXJnZXQpOworICAgIH0KKworLy8gUkVNT1ZFRDogSUNVIDIuNAorLy8gIC8qKgorLy8gICAqIE1ldGhvZCBmb3Igc3ViY2xhc3NlcyB0byB1c2UgdG8gb2J0YWluIGEgY2hhcmFjdGVyIGluIHRoZSBnaXZlbgorLy8gICAqIHN0cmluZywgd2l0aCBmaWx0ZXJpbmcuICBJZiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBvZmZzZXQKKy8vICAgKiBpcyBleGNsdWRlZCBieSB0aGlzIHRyYW5zbGl0ZXJhdG9yJ3MgZmlsdGVyLCB0aGVuIFUrRkZGRSBpcyByZXR1cm5lZC4KKy8vICAgKgorLy8gICAqIDxwPjxiPk5vdGU6PC9iPiBNb3N0IHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQKKy8vICAgKiBoYW5kbGVUcmFuc2xpdGVyYXRvcigpIHdpbGwgPGVtPm5vdDwvZW0+IHdhbnQgdG8gdXNlIHRoaXMKKy8vICAgKiBtZXRob2QsIHNpbmNlIGNoYXJhY3RlcnMgdGhleSBzZWUgYXJlIGFscmVhZHkgZmlsdGVyZWQuCisvLyAgICoKKy8vICAgKiBAZGVwcmVjYXRlZCB0aGUgbmV3IGFyY2hpdGVjdHVyZSBwcm92aWRlcyBmaWx0ZXJpbmcgYXQgdGhlIHRvcAorLy8gICAqIGxldmVsLiAgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIERlYyAzMSAyMDAxLgorLy8gICAqLworLy8gIHByb3RlY3RlZCBjaGFyIGZpbHRlcmVkQ2hhckF0KFJlcGxhY2VhYmxlIHRleHQsIGludCBpKSB7CisvLyAgICAgIGNoYXIgYzsKKy8vICAgICAgVW5pY29kZUZpbHRlciBmaWx0ZXIgPSBnZXRGaWx0ZXIoKTsKKy8vICAgICAgcmV0dXJuIChmaWx0ZXIgPT0gbnVsbCkgPyB0ZXh0LmNoYXJBdChpKSA6CisvLyAgICAgICAgICAoZmlsdGVyLmNvbnRhaW5zKGMgPSB0ZXh0LmNoYXJBdChpKSkgPyBjIDogJ1x1RkZGRScpOworLy8gIH0KKworICAgIHN0YXRpYyB7CisgICAgICAgIHJlZ2lzdHJ5ID0gbmV3IFRyYW5zbGl0ZXJhdG9yUmVnaXN0cnkoKTsKKworICAgICAgICAvLyBUaGUgZGlzcGxheSBuYW1lIGNhY2hlIHN0YXJ0cyBvdXQgZW1wdHkKKyAgICAgICAgZGlzcGxheU5hbWVDYWNoZSA9IG5ldyBIYXNodGFibGUoKTsKKworICAgICAgICAvLyBSZWFkIHRoZSBpbmRleCBmaWxlIGFuZCBwb3B1bGF0ZSB0aGUgcmVnaXN0cnkuCisgICAgICAgIC8vIEVhY2ggbGluZSBvZiB0aGUgaW5kZXggZmlsZSBpcyBlaXRoZXIgYmxhbmssIGEgJyMnIGNvbW1lbnQsCisgICAgICAgIC8vIG9yIGEgY29sb24tZGVsaW1pdGVkIGxpbmUuICBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlIGZpcnN0CisgICAgICAgIC8vIGZpZWxkIGlzIHRoZSBJRCBiZWluZyBkZWZpbmVkLiAgVGhlIHNlY29uZCBmaWVsZCBpcyBvbmUgb2YKKyAgICAgICAgLy8gdGhyZWUgc3RyaW5nczogImZpbGUiLCAiaW50ZXJuYWwiLCBvciAiYWxpYXMiLiAgUmVtYWluaW5nCisgICAgICAgIC8vIGZpZWxkcyB2YXJ5IGFjY29yZGluZyB0aGUgdmFsdWUgZm8gdGhlIHNlY29uZCBmaWVsZC4gIFNlZQorICAgICAgICAvLyB0aGUgaW5kZXggZmlsZSBpdHNlbGYgZm9yIGZ1cnRoZXIgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgUmVzb3VyY2VSZWFkZXIgciA9IG5ldyBSZXNvdXJjZVJlYWRlcigiVHJhbnNsaXRlcmF0b3JfaW5kZXgudHh0Iik7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGluZSA9IHIucmVhZExpbmUoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW4ndCByZWFkIFRyYW5zbGl0ZXJhdG9yX2luZGV4LnR4dCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxpbmUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBsaW5lLmxlbmd0aCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KHBvcykpKSB7CisgICAgICAgICAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYmxhbmsgbGluZXMgYW5kIGNvbW1lbnRzCisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmUuY2hhckF0KHBvcykgPT0gJyMnKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBQYXJzZSBjb2xvbi1kZWxpbWl0ZWQgbGluZQorICAgICAgICAgICAgICAgIGludCBjb2xvbiA9IGxpbmUuaW5kZXhPZignOicsIHBvcyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIElEID0gbGluZS5zdWJzdHJpbmcocG9zLCBjb2xvbik7CisgICAgICAgICAgICAgICAgcG9zID0gY29sb24rMTsKKyAgICAgICAgICAgICAgICBjb2xvbiA9IGxpbmUuaW5kZXhPZignOicsIHBvcyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBsaW5lLnN1YnN0cmluZyhwb3MsIGNvbG9uKTsKKyAgICAgICAgICAgICAgICBwb3MgPSBjb2xvbisxOworCisgICAgICAgICAgICAgICAgaWYgKHR5cGUuZXF1YWxzKCJmaWxlIikgfHwgdHlwZS5lcXVhbHMoImludGVybmFsIikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVzdCBvZiBsaW5lIGlzIDxyZXNvdXJjZT46PGVuY29kaW5nPjo8ZGlyZWN0aW9uPgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBwb3MgICAgICAgY29sb24gICAgICBjMgorICAgICAgICAgICAgICAgICAgICBjb2xvbiA9IGxpbmUuaW5kZXhPZignOicsIHBvcyk7CisgICAgICAgICAgICAgICAgICAgIGludCBjMiA9IGxpbmUuaW5kZXhPZignOicsIGNvbG9uKzEpOworICAgICAgICAgICAgICAgICAgICBpbnQgZGlyOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpbmUuY2hhckF0KGMyKzEpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0YnOgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyID0gRk9SV0FSRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpciA9IFJFVkVSU0U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW4ndCBwYXJzZSBsaW5lOiAiICsgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnkucHV0KElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5zdWJzdHJpbmcocG9zLCBjb2xvbiksIC8vIHJlc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZyhjb2xvbisxLCBjMiksIC8vIGVuY29kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdHlwZS5lcXVhbHMoImludGVybmFsIikpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoImFsaWFzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVzdCBvZiBsaW5lIGlzIHRoZSA8Z2V0SW5zdGFuY2VBcmc+CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LnB1dChJRCwgbGluZS5zdWJzdHJpbmcocG9zKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVW5rbm93biB0eXBlCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW4ndCBwYXJzZSBsaW5lOiAiICsgbGluZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbid0IHBhcnNlIGxpbmU6ICIgKyBsaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlZ2lzdGVyU3BlY2lhbEludmVyc2UoTnVsbFRyYW5zbGl0ZXJhdG9yLlNIT1JUX0lELCBOdWxsVHJhbnNsaXRlcmF0b3IuU0hPUlRfSUQsIGZhbHNlKTsKKworICAgICAgICAvLyBSZWdpc3RlciBub24tcnVsZS1iYXNlZCB0cmFuc2xpdGVyYXRvcnMKKyAgICAgICAgcmVnaXN0ZXJDbGFzcyhOdWxsVHJhbnNsaXRlcmF0b3IuX0lELAorICAgICAgICAgICAgICAgICAgICAgIE51bGxUcmFuc2xpdGVyYXRvci5jbGFzcywgbnVsbCk7CisgICAgICAgIFJlbW92ZVRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyKCk7CisgICAgICAgIEVzY2FwZVRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyKCk7CisgICAgICAgIFVuZXNjYXBlVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXIoKTsKKyAgICAgICAgTG93ZXJjYXNlVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXIoKTsKKyAgICAgICAgVXBwZXJjYXNlVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXIoKTsKKyAgICAgICAgVGl0bGVjYXNlVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXIoKTsKKyAgICAgICAgVW5pY29kZU5hbWVUcmFuc2xpdGVyYXRvci5yZWdpc3RlcigpOworICAgICAgICBOYW1lVW5pY29kZVRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyKCk7CisgICAgICAgIE5vcm1hbGl6YXRpb25UcmFuc2xpdGVyYXRvci5yZWdpc3RlcigpOworICAgICAgICBCcmVha1RyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyKCk7CisgICAgICAgIEFueVRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyKCk7IC8vIGRvIHRoaXMgbGFzdCEKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIHRyYW5zbGl0ZXJhdG9ycy4gIFRyYW5zbGl0ZXJhdG9yCisgICAgICogc3ViY2xhc3NlcyBjYW4gcmVnaXN0ZXIgZmFjdG9yeSBvYmplY3RzIGZvciBJRHMgdXNpbmcgdGhlCisgICAgICogcmVnaXN0ZXJGYWN0b3J5KCkgbWV0aG9kIG9mIFRyYW5zbGl0ZXJhdG9yLiAgV2hlbiBpbnZva2VkLCB0aGUKKyAgICAgKiBmYWN0b3J5IG9iamVjdCB3aWxsIGJlIHBhc3NlZCB0aGUgSUQgYmVpbmcgaW5zdGFudGlhdGVkLiAgVGhpcworICAgICAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJlZ2lzdGVyIG9uZSBmYWN0b3J5IG1ldGhvZCB0byBtb3JlIHRoYW4KKyAgICAgKiBvbmUgSUQsIG9yIGZvciBhIGZhY3RvcnkgbWV0aG9kIHRvIHBhcmFtZXRlcml6ZSBpdHMgcmVzdWx0CisgICAgICogYmFzZWQgb24gdGhlIHZhcmlhbnQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgRmFjdG9yeSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gYSB0cmFuc2xpdGVyYXRvciBmb3IgdGhlIGdpdmVuIElELgorICAgICAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgICAgICovCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5NTJmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRvcklEUGFyc2VyLmphdmEKQEAgLTAsMCArMSw3OTIgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChjKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisqICAgYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMS8xNC8yMDAyICBhbGl1ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ2FzZUluc2Vuc2l0aXZlU3RyaW5nOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKKy8qKgorICogUGFyc2luZyBjb21wb25lbnQgZm9yIHRyYW5zbGl0ZXJhdG9yIElEcy4gIFRoaXMgY2xhc3MgY29udGFpbnMgb25seQorICogc3RhdGljIG1lbWJlcnM7IGl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuICBNZXRob2RzIGluIHRoaXMgY2xhc3MKKyAqIHBhcnNlIHZhcmlvdXMgSUQgZm9ybWF0cywgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmc6CisgKgorICogQSBiYXNpYyBJRCwgd2hpY2ggY29udGFpbnMgc291cmNlLCB0YXJnZXQsIGFuZCB2YXJpYW50LCBidXQgbm8KKyAqIGZpbHRlciBhbmQgbm8gZXhwbGljaXQgaW52ZXJzZS4gIEV4YW1wbGVzIGluY2x1ZGUKKyAqICJMYXRpbi1HcmVlay9VTkdFR04iIGFuZCAiTnVsbCIuCisgKgorICogQSBzaW5nbGUgSUQsIHdoaWNoIGlzIGEgYmFzaWMgSUQgcGx1cyBvcHRpb25hbCBmaWx0ZXIgYW5kIG9wdGlvbmFsCisgKiBleHBsaWNpdCBpbnZlcnNlLiAgRXhhbXBsZXMgaW5jbHVkZSAiW2EtekEtWl0gTGF0aW4tR3JlZWsiIGFuZAorICogIkxvd2VyIChVcHBlcikiLgorICoKKyAqIEEgY29tcG91bmQgSUQsIHdoaWNoIGlzIGEgc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUgc2luZ2xlIElEcywKKyAqIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLCB3aXRoIG9wdGlvbmFsIGZvcndhcmQgYW5kIHJldmVyc2UgZ2xvYmFsCisgKiBmaWx0ZXJzLiAgVGhlIGdsb2JhbCBmaWx0ZXJzIGFyZSBVbmljb2RlU2V0IHBhdHRlcm5zIHByZXBlbmRlZCBvcgorICogYXBwZW5kZWQgdG8gdGhlIElEcywgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMuICBBbiBhcHBlbmRlZCBmaWx0ZXIKKyAqIG11c3QgYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgYW5kIGFwcGxpZXMgaW4gdGhlIHJldmVyc2UKKyAqIGRpcmVjdGlvbi4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKi8KK2NsYXNzIFRyYW5zbGl0ZXJhdG9ySURQYXJzZXIgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBJRF9ERUxJTSA9ICc7JzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgVEFSR0VUX1NFUCA9ICctJzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgVkFSSUFOVF9TRVAgPSAnLyc7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIE9QRU5fUkVWID0gJygnOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBDTE9TRV9SRVYgPSAnKSc7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5ZID0gIkFueSI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRk9SV0FSRCA9IFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQ7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVWRVJTRSA9IFRyYW5zbGl0ZXJhdG9yLlJFVkVSU0U7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIYXNodGFibGUgU1BFQ0lBTF9JTlZFUlNFUyA9IG5ldyBIYXNodGFibGUoKTsKKworICAgIC8qKgorICAgICAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBkYXRhIG9mIGEgZmlsdGVyZWQgSUQsIHRoYXQKKyAgICAgKiBpcywgYSBiYXNpYyBJRCBvcHRpb25hbGx5IHdpdGggYSBmaWx0ZXIuCisgICAgICoKKyAgICAgKiAnc291cmNlJyBhbmQgJ3RhcmdldCcgd2lsbCBhbHdheXMgYmUgbm9uLW51bGwuICBUaGUgJ3ZhcmlhbnQnCisgICAgICogd2lsbCBiZSBub24tbnVsbCBvbmx5IGlmIGEgbm9uLWVtcHR5IHZhcmlhbnQgd2FzIHBhcnNlZC4KKyAgICAgKgorICAgICAqICdzYXdTb3VyY2UnIGlzIHRydWUgaWYgdGhlcmUgd2FzIGFuIGV4cGxpY2l0IHNvdXJjZSBpbiB0aGUKKyAgICAgKiBwYXJzZWQgaWQuICBJZiB0aGVyZSB3YXMgbm8gZXhwbGljaXQgc291cmNlLCB0aGVuIGFuIGltcGxpZWQKKyAgICAgKiBzb3VyY2Ugb2YgQU5ZIGlzIHJldHVybmVkIGFuZCAnc2F3U291cmNlJyBpcyBzZXQgdG8gZmFsc2UuCisgICAgICogCisgICAgICogJ2ZpbHRlcicgaXMgdGhlIHBhcnNlZCBmaWx0ZXIgcGF0dGVybiwgb3IgbnVsbCBpZiB0aGVyZSB3YXMgbm8KKyAgICAgKiBmaWx0ZXIuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3BlY3MgeworICAgICAgICBwdWJsaWMgU3RyaW5nIHNvdXJjZTsgLy8gbm90IG51bGwKKyAgICAgICAgcHVibGljIFN0cmluZyB0YXJnZXQ7IC8vIG5vdCBudWxsCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdmFyaWFudDsgLy8gbWF5IGJlIG51bGwKKyAgICAgICAgcHVibGljIFN0cmluZyBmaWx0ZXI7IC8vIG1heSBiZSBudWxsCisgICAgICAgIHB1YmxpYyBib29sZWFuIHNhd1NvdXJjZTsKKyAgICAgICAgU3BlY3MoU3RyaW5nIHMsIFN0cmluZyB0LCBTdHJpbmcgdiwgYm9vbGVhbiBzYXdTLCBTdHJpbmcgZikgeworICAgICAgICAgICAgc291cmNlID0gczsKKyAgICAgICAgICAgIHRhcmdldCA9IHQ7CisgICAgICAgICAgICB2YXJpYW50ID0gdjsKKyAgICAgICAgICAgIHNhd1NvdXJjZSA9IHNhd1M7CisgICAgICAgICAgICBmaWx0ZXIgPSBmOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgY2Fub25pY2FsaXplZCBkYXRhIG9mIGEgZmlsdGVyZWQgSUQsCisgICAgICogdGhhdCBpcywgYSBiYXNpYyBJRCBvcHRpb25hbGx5IHdpdGggYSBmaWx0ZXIuCisgICAgICoKKyAgICAgKiAnY2Fub25JRCcgaXMgYWx3YXlzIG5vbi1udWxsLiAgSXQgbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcgIiIuCisgICAgICogSXQgaXMgdGhlIGlkIHRoYXQgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBjcmVhdGVkCisgICAgICogdHJhbnNsaXRlcmF0b3IuICBJdCBfY2Fubm90XyBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuCisgICAgICoKKyAgICAgKiAnYmFzaWNJRCcgaXMgYWx3YXlzIG5vbi1udWxsIGFuZCBub24tZW1wdHkuICBJdCBpcyBhbHdheXMgb2YKKyAgICAgKiB0aGUgZm9ybSBTLVQgb3IgUy1UL1YuICBJdCBpcyBkZXNpZ25lZCB0byBiZSBmZWQgdG8gbG93LWxldmVsCisgICAgICogaW5zdGFudGlhdGlvbiBjb2RlIHRoYXQgb25seSB1bmRlcnN0YW5kcyB0aGVzZSB0d28gZm9ybWF0cy4KKyAgICAgKgorICAgICAqICdmaWx0ZXInIG1heSBiZSBudWxsLCBpZiB0aGVyZSBpcyBub25lLCBvciBub24tbnVsbCBhbmQKKyAgICAgKiBub24tZW1wdHkuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTaW5nbGVJRCB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgY2Fub25JRDsKKyAgICAgICAgcHVibGljIFN0cmluZyBiYXNpY0lEOworICAgICAgICBwdWJsaWMgU3RyaW5nIGZpbHRlcjsKKyAgICAgICAgU2luZ2xlSUQoU3RyaW5nIGMsIFN0cmluZyBiLCBTdHJpbmcgZikgeworICAgICAgICAgICAgY2Fub25JRCA9IGM7CisgICAgICAgICAgICBiYXNpY0lEID0gYjsKKyAgICAgICAgICAgIGZpbHRlciA9IGY7CisgICAgICAgIH0KKyAgICAgICAgU2luZ2xlSUQoU3RyaW5nIGMsIFN0cmluZyBiKSB7CisgICAgICAgICAgICB0aGlzKGMsIGIsIG51bGwpOworICAgICAgICB9CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKCkgeworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdDsKKyAgICAgICAgICAgIGlmIChiYXNpY0lEID09IG51bGwgfHwgYmFzaWNJRC5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEJhc2ljSW5zdGFuY2UoIkFueS1OdWxsIiwgY2Fub25JRCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHQgPSBUcmFuc2xpdGVyYXRvci5nZXRCYXNpY0luc3RhbmNlKGJhc2ljSUQsIGNhbm9uSUQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0LnNldEZpbHRlcihuZXcgVW5pY29kZVNldChmaWx0ZXIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFBhcnNlIGEgZmlsdGVyIElELCB0aGF0IGlzLCBhbiBJRCBvZiB0aGUgZ2VuZXJhbCBmb3JtCisgICAgICogIltmMV0gczEtdDEvdjEiLCB3aXRoIHRoZSBmaWx0ZXJzIG9wdGlvbmFsLCBhbmQgdGhlIHZhcmlhbnRzIG9wdGlvbmFsLgorICAgICAqIEBwYXJhbSBpZCB0aGUgaWQgdG8gYmUgcGFyc2VkCisgICAgICogQHBhcmFtIHBvcyBJTlBVVC1PVVRQVVQgcGFyYW1ldGVyLiAgT24gaW5wdXQsIHRoZSBwb3NpdGlvbiBvZgorICAgICAqIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gcGFyc2UuICBPbiBvdXRwdXQsIHRoZSBwb3NpdGlvbiBhZnRlcgorICAgICAqIHRoZSBsYXN0IGNoYXJhY3RlciBwYXJzZWQuCisgICAgICogQHJldHVybiBhIFNpbmdsZUlEIG9iamVjdCBvciBudWxsIGlmIHRoZSBwYXJzZSBmYWlscworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2luZ2xlSUQgcGFyc2VGaWx0ZXJJRChTdHJpbmcgaWQsIGludFtdIHBvcykgeworCisgICAgICAgIGludCBzdGFydCA9IHBvc1swXTsKKyAgICAgICAgU3BlY3Mgc3BlY3MgPSBwYXJzZUZpbHRlcklEKGlkLCBwb3MsIHRydWUpOworICAgICAgICBpZiAoc3BlY3MgPT0gbnVsbCkgeworICAgICAgICAgICAgcG9zWzBdID0gc3RhcnQ7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFzc2VtYmxlIHJldHVybiByZXN1bHRzCisgICAgICAgIFNpbmdsZUlEIHNpbmdsZSA9IHNwZWNzVG9JRChzcGVjcywgRk9SV0FSRCk7CisgICAgICAgIHNpbmdsZS5maWx0ZXIgPSBzcGVjcy5maWx0ZXI7CisgICAgICAgIHJldHVybiBzaW5nbGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGFyc2UgYSBzaW5nbGUgSUQsIHRoYXQgaXMsIGFuIElEIG9mIHRoZSBnZW5lcmFsIGZvcm0KKyAgICAgKiAiW2YxXSBzMS10MS92MSAoW2YyXSBzMi10My92MikiLCB3aXRoIHRoZSBwYXJlbnRoZXNpemVkIGVsZW1lbnQKKyAgICAgKiBvcHRpb25hbCwgdGhlIGZpbHRlcnMgb3B0aW9uYWwsIGFuZCB0aGUgdmFyaWFudHMgb3B0aW9uYWwuCisgICAgICogQHBhcmFtIGlkIHRoZSBpZCB0byBiZSBwYXJzZWQKKyAgICAgKiBAcGFyYW0gcG9zIElOUFVULU9VVFBVVCBwYXJhbWV0ZXIuICBPbiBpbnB1dCwgdGhlIHBvc2l0aW9uIG9mCisgICAgICogdGhlIGZpcnN0IGNoYXJhY3RlciB0byBwYXJzZS4gIE9uIG91dHB1dCwgdGhlIHBvc2l0aW9uIGFmdGVyCisgICAgICogdGhlIGxhc3QgY2hhcmFjdGVyIHBhcnNlZC4KKyAgICAgKiBAcGFyYW0gZGlyIHRoZSBkaXJlY3Rpb24uICBJZiB0aGUgZGlyZWN0aW9uIGlzIFJFVkVSU0UgdGhlbiB0aGUKKyAgICAgKiBTaW5nbGVJRCBpcyBjb25zdHJ1Y3RlZCBmb3IgdGhlIHJldmVyc2UgZGlyZWN0aW9uLgorICAgICAqIEByZXR1cm4gYSBTaW5nbGVJRCBvYmplY3Qgb3IgbnVsbAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2luZ2xlSUQgcGFyc2VTaW5nbGVJRChTdHJpbmcgaWQsIGludFtdIHBvcywgaW50IGRpcikgeworCisgICAgICAgIGludCBzdGFydCA9IHBvc1swXTsKKworICAgICAgICAvLyBUaGUgSUQgd2lsbCBiZSBvZiB0aGUgZm9ybSBBLCBBKCksIEEoQiksIG9yIChCKSwgd2hlcmUKKyAgICAgICAgLy8gQSBhbmQgQiBhcmUgZmlsdGVyIElEcy4KKyAgICAgICAgU3BlY3Mgc3BlY3NBID0gbnVsbDsKKyAgICAgICAgU3BlY3Mgc3BlY3NCID0gbnVsbDsKKyAgICAgICAgYm9vbGVhbiBzYXdQYXJlbiA9IGZhbHNlOworCisgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBwYXNzLCBsb29rIGZvciAoQikgb3IgKCkuICBJZiB0aGlzIGZhaWxzLCB0aGVuCisgICAgICAgIC8vIG9uIHRoZSBzZWNvbmQgcGFzcywgbG9vayBmb3IgQSwgQShCKSwgb3IgQSgpLgorICAgICAgICBmb3IgKGludCBwYXNzPTE7IHBhc3M8PTI7ICsrcGFzcykgeworICAgICAgICAgICAgaWYgKHBhc3MgPT0gMikgeworICAgICAgICAgICAgICAgIHNwZWNzQSA9IHBhcnNlRmlsdGVySUQoaWQsIHBvcywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHNwZWNzQSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHBvc1swXSA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVXRpbGl0eS5wYXJzZUNoYXIoaWQsIHBvcywgT1BFTl9SRVYpKSB7CisgICAgICAgICAgICAgICAgc2F3UGFyZW4gPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghVXRpbGl0eS5wYXJzZUNoYXIoaWQsIHBvcywgQ0xPU0VfUkVWKSkgeworICAgICAgICAgICAgICAgICAgICBzcGVjc0IgPSBwYXJzZUZpbHRlcklEKGlkLCBwb3MsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IGNsb3NlIHdpdGggYSAnKScKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWNzQiA9PSBudWxsIHx8ICFVdGlsaXR5LnBhcnNlQ2hhcihpZCwgcG9zLCBDTE9TRV9SRVYpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3NbMF0gPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQXNzZW1ibGUgcmV0dXJuIHJlc3VsdHMKKyAgICAgICAgU2luZ2xlSUQgc2luZ2xlOworICAgICAgICBpZiAoc2F3UGFyZW4pIHsKKyAgICAgICAgICAgIGlmIChkaXIgPT0gRk9SV0FSRCkgeworICAgICAgICAgICAgICAgIHNpbmdsZSA9IHNwZWNzVG9JRChzcGVjc0EsIEZPUldBUkQpOworICAgICAgICAgICAgICAgIHNpbmdsZS5jYW5vbklEID0gc2luZ2xlLmNhbm9uSUQgKworICAgICAgICAgICAgICAgICAgICBPUEVOX1JFViArIHNwZWNzVG9JRChzcGVjc0IsIEZPUldBUkQpLmNhbm9uSUQgKyBDTE9TRV9SRVY7CisgICAgICAgICAgICAgICAgaWYgKHNwZWNzQSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHNpbmdsZS5maWx0ZXIgPSBzcGVjc0EuZmlsdGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2luZ2xlID0gc3BlY3NUb0lEKHNwZWNzQiwgRk9SV0FSRCk7CisgICAgICAgICAgICAgICAgc2luZ2xlLmNhbm9uSUQgPSBzaW5nbGUuY2Fub25JRCArCisgICAgICAgICAgICAgICAgICAgIE9QRU5fUkVWICsgc3BlY3NUb0lEKHNwZWNzQSwgRk9SV0FSRCkuY2Fub25JRCArIENMT1NFX1JFVjsKKyAgICAgICAgICAgICAgICBpZiAoc3BlY3NCICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2luZ2xlLmZpbHRlciA9IHNwZWNzQi5maWx0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gYXNzZXJ0KHNwZWNzQSAhPSBudWxsKTsKKyAgICAgICAgICAgIGlmIChkaXIgPT0gRk9SV0FSRCkgeworICAgICAgICAgICAgICAgIHNpbmdsZSA9IHNwZWNzVG9JRChzcGVjc0EsIEZPUldBUkQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaW5nbGUgPSBzcGVjc1RvU3BlY2lhbEludmVyc2Uoc3BlY3NBKTsKKyAgICAgICAgICAgICAgICBpZiAoc2luZ2xlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2luZ2xlID0gc3BlY3NUb0lEKHNwZWNzQSwgUkVWRVJTRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc2luZ2xlLmZpbHRlciA9IHNwZWNzQS5maWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2luZ2xlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBhcnNlIGEgZ2xvYmFsIGZpbHRlciBvZiB0aGUgZm9ybSAiW2ZdIiBvciAiKFtmXSkiLCBkZXBlbmRpbmcKKyAgICAgKiBvbiAnd2l0aFBhcmVucycuCisgICAgICogQHBhcmFtIGlkIHRoZSBwYXR0ZXJuIHRoZSBwYXJzZQorICAgICAqIEBwYXJhbSBwb3MgSU5QVVQtT1VUUFVUIHBhcmFtZXRlci4gIE9uIGlucHV0LCB0aGUgcG9zaXRpb24gb2YKKyAgICAgKiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHBhcnNlLiAgT24gb3V0cHV0LCB0aGUgcG9zaXRpb24gYWZ0ZXIKKyAgICAgKiB0aGUgbGFzdCBjaGFyYWN0ZXIgcGFyc2VkLgorICAgICAqIEBwYXJhbSBkaXIgdGhlIGRpcmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gd2l0aFBhcmVucyBJTlBVVC1PVVRQVVQgcGFyYW1ldGVyLiAgT24gZW50cnksIGlmCisgICAgICogd2l0aFBhcmVuc1swXSBpcyAwLCB0aGVuIHBhcmVucyBhcmUgZGlzYWxsb3dlZC4gIElmIGl0IGlzIDEsCisgICAgICogdGhlbiBwYXJlbnMgYXJlIHJlcXVpcmVzLiAgSWYgaXQgaXMgLTEsIHRoZW4gcGFyZW5zIGFyZQorICAgICAqIG9wdGlvbmFsLCBhbmQgdGhlIHJldHVybiByZXN1bHQgd2lsbCBiZSBzZXQgdG8gMCBvciAxLgorICAgICAqIEBwYXJhbSBjYW5vbklEIE9VVFBVVCBwYXJhbWV0ZXIuICBUaGUgcGF0dGVybiBmb3IgdGhlIGZpbHRlcgorICAgICAqIGFkZGVkIHRvIHRoZSBjYW5vbklELCBlaXRoZXIgYXQgdGhlIGVuZCwgaWYgZGlyIGlzIEZPUldBUkQsIG9yCisgICAgICogYXQgdGhlIHN0YXJ0LCBpZiBkaXIgaXMgUkVWRVJTRS4gIFRoZSBwYXR0ZXJuIHdpbGwgYmUgZW5jbG9zZWQKKyAgICAgKiBpbiBwYXJlbnRoZXNlcyBpZiBhcHByb3ByaWF0ZSwgYW5kIHdpbGwgYmUgc3VmZml4ZWQgd2l0aCBhbgorICAgICAqIElEX0RFTElNIGNoYXJhY3Rlci4gIE1heSBiZSBudWxsLgorICAgICAqIEByZXR1cm4gYSBVbmljb2RlU2V0IG9iamVjdCBvciBudWxsLiAgQSBub24tbnVsbCByZXN1bHRzCisgICAgICogaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bCBwYXJzZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBmaWx0ZXIKKyAgICAgKiBhcHBsaWVzIHRvIHRoZSBnaXZlbiBkaXJlY3Rpb24uICBUaGUgY2FsbGVyIHNob3VsZCBkaXNjYXJkIGl0CisgICAgICogaWYgd2l0aFBhcmVucyAhPSAoZGlyID09IFJFVkVSU0UpLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZVNldCBwYXJzZUdsb2JhbEZpbHRlcihTdHJpbmcgaWQsIGludFtdIHBvcywgaW50IGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gd2l0aFBhcmVucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGNhbm9uSUQpIHsKKyAgICAgICAgVW5pY29kZVNldCBmaWx0ZXIgPSBudWxsOworICAgICAgICBpbnQgc3RhcnQgPSBwb3NbMF07CisKKyAgICAgICAgaWYgKHdpdGhQYXJlbnNbMF0gPT0gLTEpIHsKKyAgICAgICAgICAgIHdpdGhQYXJlbnNbMF0gPSBVdGlsaXR5LnBhcnNlQ2hhcihpZCwgcG9zLCBPUEVOX1JFVikgPyAxIDogMDsKKyAgICAgICAgfSBlbHNlIGlmICh3aXRoUGFyZW5zWzBdID09IDEpIHsKKyAgICAgICAgICAgIGlmICghVXRpbGl0eS5wYXJzZUNoYXIoaWQsIHBvcywgT1BFTl9SRVYpKSB7CisgICAgICAgICAgICAgICAgcG9zWzBdID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFV0aWxpdHkuc2tpcFdoaXRlc3BhY2UoaWQsIHBvcyk7CisKKyAgICAgICAgaWYgKFVuaWNvZGVTZXQucmVzZW1ibGVzUGF0dGVybihpZCwgcG9zWzBdKSkgeworICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwcG9zID0gbmV3IFBhcnNlUG9zaXRpb24ocG9zWzBdKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZmlsdGVyID0gbmV3IFVuaWNvZGVTZXQoaWQsIHBwb3MsIG51bGwpOworICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBwb3NbMF0gPSBzdGFydDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBpZC5zdWJzdHJpbmcocG9zWzBdLCBwcG9zLmdldEluZGV4KCkpOworICAgICAgICAgICAgcG9zWzBdID0gcHBvcy5nZXRJbmRleCgpOworCisgICAgICAgICAgICBpZiAod2l0aFBhcmVuc1swXSA9PSAxICYmICFVdGlsaXR5LnBhcnNlQ2hhcihpZCwgcG9zLCBDTE9TRV9SRVYpKSB7CisgICAgICAgICAgICAgICAgcG9zWzBdID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiwgYXBwZW5kIHRoZSBwYXR0ZXJuIHRvIHRoZQorICAgICAgICAgICAgLy8gY2Fub25JRC4gIEluIHRoZSByZXZlcnNlLCBpbnNlcnQgaXQgYXQgemVybywgYW5kIGludmVydAorICAgICAgICAgICAgLy8gdGhlIHByZXNlbmNlIG9mIHBhcmVucyAoIkEiIDwtPiAiKEEpIikuCisgICAgICAgICAgICBpZiAoY2Fub25JRCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGRpciA9PSBGT1JXQVJEKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoUGFyZW5zWzBdID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBTdHJpbmcudmFsdWVPZihPUEVOX1JFVikgKyBwYXR0ZXJuICsgQ0xPU0VfUkVWOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhbm9uSUQuYXBwZW5kKHBhdHRlcm4gKyBJRF9ERUxJTSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhQYXJlbnNbMF0gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IFN0cmluZy52YWx1ZU9mKE9QRU5fUkVWKSArIHBhdHRlcm4gKyBDTE9TRV9SRVY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2Fub25JRC5pbnNlcnQoMCwgcGF0dGVybiArIElEX0RFTElNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmlsdGVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBhcnNlIGEgY29tcG91bmQgSUQsIGNvbnNpc3Rpbmcgb2YgYW4gb3B0aW9uYWwgZm9yd2FyZCBnbG9iYWwKKyAgICAgKiBmaWx0ZXIsIGEgc2VwYXJhdG9yLCBvbmUgb3IgbW9yZSBzaW5nbGUgSURzIGRlbGltaXRlZCBieQorICAgICAqIHNlcGFyYXRvcnMsIGFuIGFuIG9wdGlvbmFsIHJldmVyc2UgZ2xvYmFsIGZpbHRlci4gIFRoZQorICAgICAqIHNlcGFyYXRvciBpcyBhIHNlbWljb2xvbi4gIFRoZSBnbG9iYWwgZmlsdGVycyBhcmUgVW5pY29kZVNldAorICAgICAqIHBhdHRlcm5zLiAgVGhlIHJldmVyc2UgZ2xvYmFsIGZpbHRlciBtdXN0IGJlIGVuY2xvc2VkIGluCisgICAgICogcGFyZW50aGVzZXMuCisgICAgICogQHBhcmFtIGlkIHRoZSBwYXR0ZXJuIHRoZSBwYXJzZQorICAgICAqIEBwYXJhbSBkaXIgdGhlIGRpcmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gY2Fub25JRCBPVVRQVVQgcGFyYW1ldGVyIHRoYXQgcmVjZWl2ZXMgdGhlIGNhbm9uaWNhbCBJRCwKKyAgICAgKiBjb25zaXN0aW5nIG9mIGNhbm9uaWNhbCBJRHMgZm9yIGFsbCBlbGVtZW50cywgYXMgcmV0dXJuZWQgYnkKKyAgICAgKiBwYXJzZVNpbmdsZUlEKCksIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLiAgUHJldmlvdXMgY29udGVudHMKKyAgICAgKiBhcmUgZGlzY2FyZGVkLgorICAgICAqIEBwYXJhbSBsaXN0IE9VVFBVVCBwYXJhbWV0ZXIgdGhhdCByZWNlaXZlcyBhIGxpc3Qgb2YgU2luZ2xlSUQKKyAgICAgKiBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIElEcy4gIFByZXZpb3VzIGNvbnRlbnRzIGFyZQorICAgICAqIGRpc2NhcmRlZC4KKyAgICAgKiBAcGFyYW0gZ2xvYmFsRmlsdGVyIE9VVFBVVCBwYXJhbWV0ZXIgdGhhdCByZWNlaXZlcyBhIHBvaW50ZXIgdG8KKyAgICAgKiBhIG5ld2x5IGNyZWF0ZWQgZ2xvYmFsIGZpbHRlciBmb3IgdGhpcyBJRCBpbiB0aGlzIGRpcmVjdGlvbiwgb3IKKyAgICAgKiBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwYXJzZSBzdWNjZWVkcywgdGhhdCBpcywgaWYgdGhlIGVudGlyZQorICAgICAqIGlkIGlzIGNvbnN1bWVkIHdpdGhvdXQgc3ludGF4IGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwYXJzZUNvbXBvdW5kSUQoU3RyaW5nIGlkLCBpbnQgZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGNhbm9uSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTZXRbXSBnbG9iYWxGaWx0ZXIpIHsKKyAgICAgICAgaW50W10gcG9zID0gbmV3IGludFtdIHsgMCB9OworICAgICAgICBpbnRbXSB3aXRoUGFyZW5zID0gbmV3IGludFsxXTsKKyAgICAgICAgbGlzdC5yZW1vdmVBbGxFbGVtZW50cygpOworICAgICAgICBVbmljb2RlU2V0IGZpbHRlcjsKKyAgICAgICAgZ2xvYmFsRmlsdGVyWzBdID0gbnVsbDsKKyAgICAgICAgY2Fub25JRC5zZXRMZW5ndGgoMCk7CisKKyAgICAgICAgLy8gUGFyc2UgbGVhZGluZyBnbG9iYWwgZmlsdGVyLCBpZiBhbnkKKyAgICAgICAgd2l0aFBhcmVuc1swXSA9IDA7IC8vIHBhcmVucyBkaXNhbGxvd2VkCisgICAgICAgIGZpbHRlciA9IHBhcnNlR2xvYmFsRmlsdGVyKGlkLCBwb3MsIGRpciwgd2l0aFBhcmVucywgY2Fub25JRCk7CisgICAgICAgIGlmIChmaWx0ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCFVdGlsaXR5LnBhcnNlQ2hhcihpZCwgcG9zLCBJRF9ERUxJTSkpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3QgYSBnbG9iYWwgZmlsdGVyOyBiYWNrdXAgYW5kIHJlc3VtZQorICAgICAgICAgICAgICAgIGNhbm9uSUQuc2V0TGVuZ3RoKDApOworICAgICAgICAgICAgICAgIHBvc1swXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlyID09IEZPUldBUkQpIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJbMF0gPSBmaWx0ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIHNhd0RlbGltaXRlciA9IHRydWU7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIFNpbmdsZUlEIHNpbmdsZSA9IHBhcnNlU2luZ2xlSUQoaWQsIHBvcywgZGlyKTsKKyAgICAgICAgICAgIGlmIChzaW5nbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpciA9PSBGT1JXQVJEKSB7CisgICAgICAgICAgICAgICAgbGlzdC5hZGRFbGVtZW50KHNpbmdsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxpc3QuaW5zZXJ0RWxlbWVudEF0KHNpbmdsZSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIVV0aWxpdHkucGFyc2VDaGFyKGlkLCBwb3MsIElEX0RFTElNKSkgeworICAgICAgICAgICAgICAgIHNhd0RlbGltaXRlciA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpc3Quc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbnN0cnVjdCBjYW5vbmljYWwgSUQKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFNpbmdsZUlEIHNpbmdsZSA9IChTaW5nbGVJRCkgbGlzdC5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBjYW5vbklELmFwcGVuZChzaW5nbGUuY2Fub25JRCk7CisgICAgICAgICAgICBpZiAoaSAhPSAobGlzdC5zaXplKCktMSkpIHsKKyAgICAgICAgICAgICAgICBjYW5vbklELmFwcGVuZChJRF9ERUxJTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBQYXJzZSB0cmFpbGluZyBnbG9iYWwgZmlsdGVyLCBpZiBhbnksIGFuZCBvbmx5IGlmIHdlIHNhdworICAgICAgICAvLyBhIHRyYWlsaW5nIGRlbGltaXRlciBhZnRlciB0aGUgSURzLgorICAgICAgICBpZiAoc2F3RGVsaW1pdGVyKSB7CisgICAgICAgICAgICB3aXRoUGFyZW5zWzBdID0gMTsgLy8gcGFyZW5zIHJlcXVpcmVkCisgICAgICAgICAgICBmaWx0ZXIgPSBwYXJzZUdsb2JhbEZpbHRlcihpZCwgcG9zLCBkaXIsIHdpdGhQYXJlbnMsIGNhbm9uSUQpOworICAgICAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmVxdWlyZSB0cmFpbGluZyAnOycsIGJ1dCBwYXJzZSBpdCBpZiBwcmVzZW50CisgICAgICAgICAgICAgICAgVXRpbGl0eS5wYXJzZUNoYXIoaWQsIHBvcywgSURfREVMSU0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkaXIgPT0gUkVWRVJTRSkgeworICAgICAgICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJbMF0gPSBmaWx0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVHJhaWxpbmcgdW5wYXJzZWQgdGV4dCBpcyBhIHN5bnRheCBlcnJvcgorICAgICAgICBVdGlsaXR5LnNraXBXaGl0ZXNwYWNlKGlkLCBwb3NbMF0pOworICAgICAgICBpZiAocG9zWzBdICE9IGlkLmxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHRoZSBlbGVtZW50cyBvZiB0aGUgJ2xpc3QnIHZlY3Rvciwgd2hpY2ggYXJlIFNpbmdsZUlECisgICAgICogb2JqZWN0cywgaW50byBhY3R1YWwgVHJhbnNsaXRlcmF0b3Igb2JqZWN0cy4gIEluIHRoZSBjb3Vyc2Ugb2YKKyAgICAgKiB0aGlzLCBzb21lIChvciBhbGwpIGVudHJpZXMgbWF5IGJlIHJlbW92ZWQuICBJZiBhbGwgZW50cmllcworICAgICAqIGFyZSByZW1vdmVkLCB0aGUgTnVsbCB0cmFuc2xpdGVyYXRvciB3aWxsIGJlIGFkZGVkLgorICAgICAqCisgICAgICogRGVsZXRlIGVudHJpZXMgd2l0aCBlbXB0eSBiYXNpY0lEczsgdGhlc2UgYXJlIGdlbmVyYXRlZCBieQorICAgICAqIGVsZW1lbnRzIGxpa2UgIihBKSIgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uLCBvciAiQSgpIiBpbgorICAgICAqIHRoZSByZXZlcnNlLiAgVEhJUyBNQVkgUkVTVUxUIElOIEFOIEVNUFRZIFZFQ1RPUi4gIENvbnZlcnQKKyAgICAgKiBTaW5nbGVJRCBlbnRyaWVzIHRvIGFjdHVhbCB0cmFuc2xpdGVyYXRvcnMuCisgICAgICoKKyAgICAgKiBBbHNvLCBvcHRpb25hbGx5LCBpbnNlcnQgdGhlIGdpdmVuIHRyYW5zbGl0ZXJhdG9yIGF0IHRoZSBnaXZlbgorICAgICAqIHBvc2l0aW9uLiAgVGhpcyBlZmZlY3RpdmVseSBoYXBwZW5zIGJlZm9yZSBhbnl0aGluZyBlbHNlLgorICAgICAqCisgICAgICogQHBhcmFtIGxpc3QgdmVjdG9yIG9mIFNpbmdsZUlEIG9iamVjdHMuICBPbiBleGl0LCB2ZWN0b3IKKyAgICAgKiBvZiBvbmUgb3IgbW9yZSBUcmFuc2xpdGVyYXRvcnMuCisgICAgICogQHBhcmFtIGluc2VydCBUcmFuc2xpdGVyYXRvciB0byBpbnNlcnQsIG9yIG51bGwgaWYgbm9uZS4KKyAgICAgKiBAcGFyYW0gaW5zZXJ0SW5kZXggaW5kZXggZnJvbSAwLi5saXN0LnNpemUoKS0xLCBhdCB3aGljaAorICAgICAqIHRvIHBsYWNlICdpbnNlcnQnLCBvciAtMSBpZiBub25lLgorICAgICAqIEByZXR1cm4gbmV3IHZhbHVlIG9mIGluc2VydEluZGV4LiAgVGhlIGluZGV4IHdpbGwgc2hpZnQgaWYKKyAgICAgKiB0aGVyZSBhcmUgZW1wdHkgaXRlbXMsIGxpa2UgIihMb3dlcikiLCB3aXRoIGluZGljZXMgbGVzcyB0aGFuCisgICAgICogaW5zZXJ0SW5kZXguCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgaW5zdGFudGlhdGVMaXN0KFZlY3RvciBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvciBpbnNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnNlcnRJbmRleCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvciB0OworICAgICAgICBmb3IgKGludCBpPTA7IGk8PWxpc3Quc2l6ZSgpOyApIHsgLy8gW3NpY106IGk8PWxpc3Quc2l6ZSgpCisgICAgICAgICAgICBpZiAoaW5zZXJ0SW5kZXggPT0gaSkgeworICAgICAgICAgICAgICAgIGxpc3QuaW5zZXJ0RWxlbWVudEF0KGluc2VydCwgaSsrKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgcnVuIHRoZSBsb29wIHRvbyBsb25nIGJ5IG9uZSwgc28gd2UgY2FuCisgICAgICAgICAgICAvLyBkbyBhbiBpbnNlcnQgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudAorICAgICAgICAgICAgaWYgKGk9PWxpc3Quc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNpbmdsZUlEIHNpbmdsZSA9IChTaW5nbGVJRCkgbGlzdC5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBpZiAoc2luZ2xlLmJhc2ljSUQubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGxpc3QucmVtb3ZlRWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgIGlmIChpbnNlcnRJbmRleCA+IGkpIHsKKyAgICAgICAgICAgICAgICAgICAgLS1pbnNlcnRJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHQgPSBzaW5nbGUuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAodCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgSUQgIiArIHNpbmdsZS5jYW5vbklEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGlzdC5zZXRFbGVtZW50QXQodCwgaSk7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBbiBlbXB0eSBsaXN0IGlzIGVxdWl2YWxlbnQgdG8gYSBOdWxsIHRyYW5zbGl0ZXJhdG9yLgorICAgICAgICBpZiAobGlzdC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgdCA9IFRyYW5zbGl0ZXJhdG9yLmdldEJhc2ljSW5zdGFuY2UoIkFueS1OdWxsIiwgbnVsbCk7CisgICAgICAgICAgICBpZiAodCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludGVybmFsIGVycm9yOyBjYW5ub3QgaW5zdGFudGlhdGUgQW55LU51bGwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpc3QuYWRkRWxlbWVudCh0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpbnNlcnRJbmRleDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhbiBJRCBpbnRvIHBpZWNlcy4gIFRha2UgSURzIG9mIHRoZSBmb3JtIFQsIFQvViwgUy1ULAorICAgICAqIFMtVC9WLCBvciBTL1YtVC4gIElmIHRoZSBzb3VyY2UgaXMgbWlzc2luZywgcmV0dXJuIGEgc291cmNlIG9mCisgICAgICogQU5ZLgorICAgICAqIEBwYXJhbSBpZCB0aGUgaWQgc3RyaW5nLCBpbiBhbnkgb2Ygc2V2ZXJhbCBmb3JtcworICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgNCBzdHJpbmdzOiBzb3VyY2UsIHRhcmdldCwgdmFyaWFudCwgYW5kCisgICAgICogaXNTb3VyY2VQcmVzZW50LiAgSWYgdGhlIHNvdXJjZSBpcyBub3QgcHJlc2VudCwgQU5ZIHdpbGwgYmUKKyAgICAgKiBnaXZlbiBhcyB0aGUgc291cmNlLCBhbmQgaXNTb3VyY2VQcmVzZW50IHdpbGwgYmUgbnVsbC4gIE90aGVyd2lzZQorICAgICAqIGlzU291cmNlUHJlc2VudCB3aWxsIGJlIG5vbi1udWxsLiAgVGhlIHRhcmdldCBtYXkgYmUgZW1wdHkgaWYgdGhlCisgICAgICogaWQgaXMgbm90IHdlbGwtZm9ybWVkLiAgVGhlIHZhcmlhbnQgbWF5IGJlIGVtcHR5LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gSUR0b1NUVihTdHJpbmcgaWQpIHsKKyAgICAgICAgU3RyaW5nIHNvdXJjZSA9IEFOWTsKKyAgICAgICAgU3RyaW5nIHRhcmdldCA9IG51bGw7CisgICAgICAgIFN0cmluZyB2YXJpYW50ID0gIiI7CisgICAgICAgIAorICAgICAgICBpbnQgc2VwID0gaWQuaW5kZXhPZihUQVJHRVRfU0VQKTsKKyAgICAgICAgaW50IHZhciA9IGlkLmluZGV4T2YoVkFSSUFOVF9TRVApOworICAgICAgICBpZiAodmFyIDwgMCkgeworICAgICAgICAgICAgdmFyID0gaWQubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiBpc1NvdXJjZVByZXNlbnQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXAgPCAwKSB7CisgICAgICAgICAgICAvLyBGb3JtOiBUL1Ygb3IgVCAob3IgL1YpCisgICAgICAgICAgICB0YXJnZXQgPSBpZC5zdWJzdHJpbmcoMCwgdmFyKTsKKyAgICAgICAgICAgIHZhcmlhbnQgPSBpZC5zdWJzdHJpbmcodmFyKTsKKyAgICAgICAgfSBlbHNlIGlmIChzZXAgPCB2YXIpIHsKKyAgICAgICAgICAgIC8vIEZvcm06IFMtVC9WIG9yIFMtVCAob3IgLVQvViBvciAtVCkKKyAgICAgICAgICAgIGlmIChzZXAgPiAwKSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gaWQuc3Vic3RyaW5nKDAsIHNlcCk7CisgICAgICAgICAgICAgIGlzU291cmNlUHJlc2VudCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YXJnZXQgPSBpZC5zdWJzdHJpbmcoKytzZXAsIHZhcik7CisgICAgICAgICAgICB2YXJpYW50ID0gaWQuc3Vic3RyaW5nKHZhcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGb3JtOiAoUy9WLVQgb3IgL1YtVCkKKyAgICAgICAgICAgIGlmICh2YXIgPiAwKSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gaWQuc3Vic3RyaW5nKDAsIHZhcik7CisgICAgICAgICAgICAgICAgaXNTb3VyY2VQcmVzZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhbnQgPSBpZC5zdWJzdHJpbmcodmFyLCBzZXArKyk7CisgICAgICAgICAgICB0YXJnZXQgPSBpZC5zdWJzdHJpbmcoc2VwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YXJpYW50Lmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgdmFyaWFudCA9IHZhcmlhbnQuc3Vic3RyaW5nKDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsgc291cmNlLCB0YXJnZXQsIHZhcmlhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NvdXJjZVByZXNlbnQgPyAiIiA6IG51bGwgfTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHaXZlbiBzb3VyY2UsIHRhcmdldCwgYW5kIHZhcmlhbnQgc3RyaW5ncywgY29uY2F0ZW5hdGUgdGhlbSBpbnRvIGEKKyAgICAgKiBmdWxsIElELiAgSWYgdGhlIHNvdXJjZSBpcyBlbXB0eSwgdGhlbiAiQW55IiB3aWxsIGJlIHVzZWQgZm9yIHRoZQorICAgICAqIHNvdXJjZSwgc28gdGhlIElEIHdpbGwgYWx3YXlzIGJlIG9mIHRoZSBmb3JtIHMtdC92IG9yIHMtdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBTVFZ0b0lEKFN0cmluZyBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhcmlhbnQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGlkID0gbmV3IFN0cmluZ0J1ZmZlcihzb3VyY2UpOworICAgICAgICBpZiAoaWQubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgaWQuYXBwZW5kKEFOWSk7CisgICAgICAgIH0KKyAgICAgICAgaWQuYXBwZW5kKFRBUkdFVF9TRVApLmFwcGVuZCh0YXJnZXQpOworICAgICAgICBpZiAodmFyaWFudCAhPSBudWxsICYmIHZhcmlhbnQubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgaWQuYXBwZW5kKFZBUklBTlRfU0VQKS5hcHBlbmQodmFyaWFudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlkLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgdHdvIHRhcmdldHMgYXMgYmVpbmcgaW52ZXJzZXMgb2Ygb25lIGFub3RoZXIuICBGb3IKKyAgICAgKiBleGFtcGxlLCBjYWxsaW5nIHJlZ2lzdGVyU3BlY2lhbEludmVyc2UoIk5GQyIsICJORkQiLCB0cnVlKSBjYXVzZXMKKyAgICAgKiBUcmFuc2xpdGVyYXRvciB0byBmb3JtIHRoZSBmb2xsb3dpbmcgaW52ZXJzZSByZWxhdGlvbnNoaXBzOgorICAgICAqCisgICAgICogPHByZT5ORkMgPT4gTkZECisgICAgICogQW55LU5GQyA9PiBBbnktTkZECisgICAgICogTkZEID0+IE5GQworICAgICAqIEFueS1ORkQgPT4gQW55LU5GQzwvcHJlPgorICAgICAqCisgICAgICogKFdpdGhvdXQgdGhlIHNwZWNpYWwgaW52ZXJzZSByZWdpc3RyYXRpb24sIHRoZSBpbnZlcnNlIG9mIE5GQworICAgICAqIHdvdWxkIGJlIE5GQy1BbnkuKSAgTm90ZSB0aGF0IE5GRCBpcyBzaG9ydGhhbmQgZm9yIEFueS1ORkQsIGJ1dAorICAgICAqIHRoYXQgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgIkFueS0iIGlzIHByZXNlcnZlZC4KKyAgICAgKgorICAgICAqIDxwPlRoZSByZWxhdGlvbnNoaXAgaXMgc3ltbWV0cmljYWw7IHJlZ2lzdGVyaW5nIChhLCBiKSBpcworICAgICAqIGVxdWl2YWxlbnQgdG8gcmVnaXN0ZXJpbmcgKGIsIGEpLgorICAgICAqCisgICAgICogPHA+VGhlIHJlbGV2YW50IElEcyBtdXN0IHN0aWxsIGJlIHJlZ2lzdGVyZWQgc2VwYXJhdGVseSBhcworICAgICAqIGZhY3RvcmllcyBvciBjbGFzc2VzLgorICAgICAqCisgICAgICogPHA+T25seSB0aGUgdGFyZ2V0cyBhcmUgc3BlY2lmaWVkLiAgU3BlY2lhbCBpbnZlcnNlcyBhbHdheXMKKyAgICAgKiBoYXZlIHRoZSBmb3JtIEFueS1UYXJnZXQxIDw9PiBBbnktVGFyZ2V0Mi4gIFRoZSB0YXJnZXQgc2hvdWxkCisgICAgICogaGF2ZSBjYW5vbmljYWwgY2FzaW5nICh0aGUgY2FzaW5nIGRlc2lyZWQgdG8gYmUgcHJvZHVjZWQgd2hlbgorICAgICAqIGFuIGludmVyc2UgaXMgZm9ybWVkKSBhbmQgc2hvdWxkIGNvbnRhaW4gbm8gd2hpdGVzcGFjZSBvciBvdGhlcgorICAgICAqIGV4dHJhbmVvdXMgY2hhcmFjdGVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldCBhZ2FpbnN0IHdoaWNoIHRvIHJlZ2lzdGVyIHRoZSBpbnZlcnNlCisgICAgICogQHBhcmFtIGludmVyc2VUYXJnZXQgdGhlIGludmVyc2Ugb2YgdGFyZ2V0LCB0aGF0IGlzCisgICAgICogQW55LXRhcmdldC5nZXRJbnZlcnNlKCkgPT4gQW55LWludmVyc2VUYXJnZXQKKyAgICAgKiBAcGFyYW0gYmlkaXJlY3Rpb25hbCBpZiB0cnVlLCByZWdpc3RlciB0aGUgcmV2ZXJzZSByZWxhdGlvbgorICAgICAqIGFzIHdlbGwsIHRoYXQgaXMsIEFueS1pbnZlcnNlVGFyZ2V0LmdldEludmVyc2UoKSA9PiBBbnktdGFyZ2V0CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU3BlY2lhbEludmVyc2UoU3RyaW5nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW52ZXJzZVRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGJpZGlyZWN0aW9uYWwpIHsKKyAgICAgICAgU1BFQ0lBTF9JTlZFUlNFUy5wdXQobmV3IENhc2VJbnNlbnNpdGl2ZVN0cmluZyh0YXJnZXQpLCBpbnZlcnNlVGFyZ2V0KTsKKyAgICAgICAgaWYgKGJpZGlyZWN0aW9uYWwgJiYgIXRhcmdldC5lcXVhbHNJZ25vcmVDYXNlKGludmVyc2VUYXJnZXQpKSB7CisgICAgICAgICAgICBTUEVDSUFMX0lOVkVSU0VTLnB1dChuZXcgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nKGludmVyc2VUYXJnZXQpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHJpdmF0ZSBpbXBsZW1lbnRhdGlvbgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUGFyc2UgYW4gSUQgaW50byBjb21wb25lbnQgcGllY2VzLiAgVGFrZSBJRHMgb2YgdGhlIGZvcm0gVCwKKyAgICAgKiBUL1YsIFMtVCwgUy1UL1YsIG9yIFMvVi1ULiAgSWYgdGhlIHNvdXJjZSBpcyBtaXNzaW5nLCByZXR1cm4gYQorICAgICAqIHNvdXJjZSBvZiBBTlkuCisgICAgICogQHBhcmFtIGlkIHRoZSBpZCBzdHJpbmcsIGluIGFueSBvZiBzZXZlcmFsIGZvcm1zCisgICAgICogQHBhcmFtIHBvcyBJTlBVVC1PVVRQVVQgcGFyYW1ldGVyLiAgT24gaW5wdXQsIHBvc1swXSBpcyB0aGUKKyAgICAgKiBvZmZzZXQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBwYXJzZSBpbiBpZC4gIE9uIG91dHB1dCwKKyAgICAgKiBwb3NbMF0gaXMgdGhlIG9mZnNldCBhZnRlciB0aGUgbGFzdCBwYXJzZWQgY2hhcmFjdGVyLiAgSWYgdGhlCisgICAgICogcGFyc2UgZmFpbGVkLCBwb3NbMF0gd2lsbCBiZSB1bmNoYW5nZWQuCisgICAgICogQHBhcmFtIGFsbG93RmlsdGVyIGlmIHRydWUsIGEgVW5pY29kZVNldCBwYXR0ZXJuIGlzIGFsbG93ZWQKKyAgICAgKiBhdCBhbnkgbG9jYXRpb24gYmV0d2VlbiBzcGVjcyBvciBkZWxpbWl0ZXJzLCBhbmQgaXMgcmV0dXJuZWQKKyAgICAgKiBhcyB0aGUgZmlmdGggc3RyaW5nIGluIHRoZSBhcnJheS4KKyAgICAgKiBAcmV0dXJuIGEgU3BlY3Mgb2JqZWN0LCBvciBudWxsIGlmIHRoZSBwYXJzZSBmYWlsZWQuICBJZgorICAgICAqIG5laXRoZXIgc291cmNlIG5vciB0YXJnZXQgd2FzIHNlZW4gaW4gdGhlIHBhcnNlZCBpZCwgdGhlbiB0aGUKKyAgICAgKiBwYXJzZSBmYWlscy4gIElmIGFsbG93RmlsdGVyIGlzIHRydWUsIHRoZW4gdGhlIHBhcnNlZCBmaWx0ZXIKKyAgICAgKiBwYXR0ZXJuIGlzIHJldHVybmVkIGluIHRoZSBTcGVjcyBvYmplY3QsIG90aGVyd2lzZSB0aGUgcmV0dXJuZWQKKyAgICAgKiBmaWx0ZXIgcmVmZXJlbmNlIGlzIG51bGwuICBJZiB0aGUgcGFyc2UgZmFpbHMgZm9yIGFueSByZWFzb24KKyAgICAgKiBudWxsIGlzIHJldHVybmVkLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFNwZWNzIHBhcnNlRmlsdGVySUQoU3RyaW5nIGlkLCBpbnRbXSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFsbG93RmlsdGVyKSB7CisgICAgICAgIFN0cmluZyBmaXJzdCA9IG51bGw7CisgICAgICAgIFN0cmluZyBzb3VyY2UgPSBudWxsOworICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIHZhcmlhbnQgPSBudWxsOworICAgICAgICBTdHJpbmcgZmlsdGVyID0gbnVsbDsKKyAgICAgICAgY2hhciBkZWxpbWl0ZXIgPSAwOworICAgICAgICBpbnQgc3BlY0NvdW50ID0gMDsKKyAgICAgICAgaW50IHN0YXJ0ID0gcG9zWzBdOworCisgICAgICAgIC8vIFRoaXMgbG9vcCBwYXJzZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhpbmdzIHdpdGggZWFjaAorICAgICAgICAvLyBwYXNzOiBhIGZpbHRlciwgYSBkZWxpbWl0ZXIgY2hhcmFjdGVyIChlaXRoZXIgJy0nIG9yICcvJyksCisgICAgICAgIC8vIG9yIGEgc3BlYyAoc291cmNlLCB0YXJnZXQsIG9yIHZhcmlhbnQpLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBVdGlsaXR5LnNraXBXaGl0ZXNwYWNlKGlkLCBwb3MpOworICAgICAgICAgICAgaWYgKHBvc1swXSA9PSBpZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBQYXJzZSBmaWx0ZXJzCisgICAgICAgICAgICBpZiAoYWxsb3dGaWx0ZXIgJiYgZmlsdGVyID09IG51bGwgJiYKKyAgICAgICAgICAgICAgICBVbmljb2RlU2V0LnJlc2VtYmxlc1BhdHRlcm4oaWQsIHBvc1swXSkpIHsKKworICAgICAgICAgICAgICAgIFBhcnNlUG9zaXRpb24gcHBvcyA9IG5ldyBQYXJzZVBvc2l0aW9uKHBvc1swXSk7CisgICAgICAgICAgICAgICAgVW5pY29kZVNldCBzZXQgPSBuZXcgVW5pY29kZVNldChpZCwgcHBvcywgbnVsbCk7CisgICAgICAgICAgICAgICAgZmlsdGVyID0gaWQuc3Vic3RyaW5nKHBvc1swXSwgcHBvcy5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBwb3NbMF0gPSBwcG9zLmdldEluZGV4KCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkZWxpbWl0ZXIgPT0gMCkgeworICAgICAgICAgICAgICAgIGNoYXIgYyA9IGlkLmNoYXJBdChwb3NbMF0pOworICAgICAgICAgICAgICAgIGlmICgoYyA9PSBUQVJHRVRfU0VQICYmIHRhcmdldCA9PSBudWxsKSB8fAorICAgICAgICAgICAgICAgICAgICAoYyA9PSBWQVJJQU5UX1NFUCAmJiB2YXJpYW50ID09IG51bGwpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGltaXRlciA9IGM7CisgICAgICAgICAgICAgICAgICAgICsrcG9zWzBdOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGFyZSBhYm91dCB0byB0cnkgdG8gcGFyc2UgYSBzcGVjIHdpdGggbm8gZGVsaW1pdGVyCisgICAgICAgICAgICAvLyB3aGVuIHdlIGNhbiBubyBsb25nZXIgZG8gc28gKHdlIGNhbiBvbmx5IGRvIHNvIGF0IHRoZQorICAgICAgICAgICAgLy8gc3RhcnQpOyBicmVhay4KKyAgICAgICAgICAgIGlmIChkZWxpbWl0ZXIgPT0gMCAmJiBzcGVjQ291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZyBzcGVjID0gVXRpbGl0eS5wYXJzZVVuaWNvZGVJZGVudGlmaWVyKGlkLCBwb3MpOworICAgICAgICAgICAgaWYgKHNwZWMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpZiB0aGVyZSB3YXMgYSB0cmFpbGluZyBkZWxpbWl0ZXIsIHdlCisgICAgICAgICAgICAgICAgLy8gY29uc3VtZSBpdC4gIFNvIEZvby0sIEZvby8sIEZvby1CYXIvLCBhbmQgRm9vL0Jhci0KKyAgICAgICAgICAgICAgICAvLyBhcmUgbGVnYWwuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoZGVsaW1pdGVyKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgZmlyc3QgPSBzcGVjOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUQVJHRVRfU0VQOgorICAgICAgICAgICAgICAgIHRhcmdldCA9IHNwZWM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZBUklBTlRfU0VQOgorICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBzcGVjOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytzcGVjQ291bnQ7CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gQSBzcGVjIHdpdGggbm8gcHJpb3IgY2hhcmFjdGVyIGlzIGVpdGhlciBzb3VyY2Ugb3IgdGFyZ2V0LAorICAgICAgICAvLyBkZXBlbmRpbmcgb24gd2hldGhlciBhbiBleHBsaWNpdCAiLXRhcmdldCIgd2FzIHNlZW4uCisgICAgICAgIGlmIChmaXJzdCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBmaXJzdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gZmlyc3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBNdXN0IGhhdmUgZWl0aGVyIHNvdXJjZSBvciB0YXJnZXQKKyAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsICYmIHRhcmdldCA9PSBudWxsKSB7CisgICAgICAgICAgICBwb3NbMF0gPSBzdGFydDsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gRW1wdHkgc291cmNlIG9yIHRhcmdldCBkZWZhdWx0cyB0byBBTlkKKyAgICAgICAgYm9vbGVhbiBzYXdTb3VyY2UgPSB0cnVlOworICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHNvdXJjZSA9IEFOWTsKKyAgICAgICAgICAgIHNhd1NvdXJjZSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgeworICAgICAgICAgICAgdGFyZ2V0ID0gQU5ZOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBTcGVjcyhzb3VyY2UsIHRhcmdldCwgdmFyaWFudCwgc2F3U291cmNlLCBmaWx0ZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdpdmVucyBhIFNwZWMgb2JqZWN0LCBjb252ZXJ0IGl0IHRvIGEgU2luZ2xlSUQgb2JqZWN0LiAgVGhlCisgICAgICogU3BlYyBvYmplY3QgaXMgYSBtb3JlIHVucHJvY2Vzc2VkIHBhcnNlIHJlc3VsdC4gIFRoZSBTaW5nbGVJRAorICAgICAqIG9iamVjdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBjYW5vbmljYWwgYW5kIGJhc2ljIElEcy4KKyAgICAgKiBAcmV0dXJuIGEgU2luZ2xlSUQ7IG5ldmVyIHJldHVybnMgbnVsbC4gIFJldHVybmVkIG9iamVjdCBhbHdheXMKKyAgICAgKiBoYXMgJ2ZpbHRlcicgZmllbGQgb2YgbnVsbC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTaW5nbGVJRCBzcGVjc1RvSUQoU3BlY3Mgc3BlY3MsIGludCBkaXIpIHsKKyAgICAgICAgU3RyaW5nIGNhbm9uSUQgPSAiIjsKKyAgICAgICAgU3RyaW5nIGJhc2ljSUQgPSAiIjsKKyAgICAgICAgU3RyaW5nIGJhc2ljUHJlZml4ID0gIiI7CisgICAgICAgIGlmIChzcGVjcyAhPSBudWxsKSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgaWYgKGRpciA9PSBGT1JXQVJEKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWNzLnNhd1NvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKHNwZWNzLnNvdXJjZSkuYXBwZW5kKFRBUkdFVF9TRVApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJhc2ljUHJlZml4ID0gc3BlY3Muc291cmNlICsgVEFSR0VUX1NFUDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChzcGVjcy50YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKHNwZWNzLnRhcmdldCkuYXBwZW5kKFRBUkdFVF9TRVApLmFwcGVuZChzcGVjcy5zb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNwZWNzLnZhcmlhbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoVkFSSUFOVF9TRVApLmFwcGVuZChzcGVjcy52YXJpYW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJhc2ljSUQgPSBiYXNpY1ByZWZpeCArIGJ1Zi50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKHNwZWNzLmZpbHRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYnVmLmluc2VydCgwLCBzcGVjcy5maWx0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fub25JRCA9IGJ1Zi50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgU2luZ2xlSUQoY2Fub25JRCwgYmFzaWNJRCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBTcGVjcyBvYmplY3QsIHJldHVybiBhIFNpbmdsZUlEIHJlcHJlc2VudGluZyB0aGUKKyAgICAgKiBzcGVjaWFsIGludmVyc2Ugb2YgdGhhdCBJRC4gIElmIHRoZXJlIGlzIG5vIHNwZWNpYWwgaW52ZXJzZQorICAgICAqIHRoZW4gcmV0dXJuIG51bGwuCisgICAgICogQHJldHVybiBhIFNpbmdsZUlEIG9yIG51bGwuICBSZXR1cm5lZCBvYmplY3QgYWx3YXlzIGhhcworICAgICAqICdmaWx0ZXInIGZpZWxkIG9mIG51bGwuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgU2luZ2xlSUQgc3BlY3NUb1NwZWNpYWxJbnZlcnNlKFNwZWNzIHNwZWNzKSB7CisgICAgICAgIGlmICghc3BlY3Muc291cmNlLmVxdWFsc0lnbm9yZUNhc2UoQU5ZKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGludmVyc2VUYXJnZXQgPSAoU3RyaW5nKSBTUEVDSUFMX0lOVkVSU0VTLmdldCgKKyAgICAgICAgICAgIG5ldyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcoc3BlY3MudGFyZ2V0KSk7CisgICAgICAgIGlmIChpbnZlcnNlVGFyZ2V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBvcmlnaW5hbCBJRCBjb250YWluZWQgIkFueS0iIHRoZW4gbWFrZSB0aGUKKyAgICAgICAgICAgIC8vIHNwZWNpYWwgaW52ZXJzZSAiQW55LUZvbyI7IG90aGVyd2lzZSBtYWtlIGl0ICJGb28iLgorICAgICAgICAgICAgLy8gU28gIkFueS1ORkMiID0+ICJBbnktTkZEIiBidXQgIk5GQyIgPT4gIk5GRCIuCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgaWYgKHNwZWNzLmZpbHRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChzcGVjcy5maWx0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNwZWNzLnNhd1NvdXJjZSkgeworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoQU5ZKS5hcHBlbmQoVEFSR0VUX1NFUCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWYuYXBwZW5kKGludmVyc2VUYXJnZXQpOworCisgICAgICAgICAgICBTdHJpbmcgYmFzaWNJRCA9IEFOWSArIFRBUkdFVF9TRVAgKyBpbnZlcnNlVGFyZ2V0OworCisgICAgICAgICAgICBpZiAoc3BlY3MudmFyaWFudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChWQVJJQU5UX1NFUCkuYXBwZW5kKHNwZWNzLnZhcmlhbnQpOworICAgICAgICAgICAgICAgIGJhc2ljSUQgPSBiYXNpY0lEICsgVkFSSUFOVF9TRVAgKyBzcGVjcy52YXJpYW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVJRChidWYudG9TdHJpbmcoKSwgYmFzaWNJRCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVHJhbnNsaXRlcmF0b3JQYXJzZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zbGl0ZXJhdG9yUGFyc2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjEyMDY3OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zbGl0ZXJhdG9yUGFyc2VyLmphdmEKQEAgLTAsMCArMSwxNDg1IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoYykgMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRvclBhcnNlci5qYXZhLHYgJAorKiAkRGF0ZTogMjAwMi8wNy8yNiAyMToxMjozNiAkCisqICRSZXZpc2lvbjogMS4yMyAkCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5kYXRhLlJlc291cmNlUmVhZGVyOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBqYXZhLnV0aWwuU3RhY2s7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbjsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VQ2hhcmFjdGVyUHJvcGVydHk7CisKK2NsYXNzIFRyYW5zbGl0ZXJhdG9yUGFyc2VyIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIERhdGEgbWVtYmVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUFVCTElDIGRhdGEgbWVtYmVyIGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBkYXRhIG9iamVjdCwgb3IgbnVsbCBpZgorICAgICAqIHRoZXJlIHdlcmUgbm8gcnVsZXMuCisgICAgICovCisgICAgcHVibGljIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLkRhdGEgZGF0YTsKKworICAgIC8qKgorICAgICAqIFBVQkxJQyBkYXRhIG1lbWJlci4KKyAgICAgKiBUaGUgYmxvY2sgb2YgOjpJRHMsIGJvdGggYXQgdGhlIHRvcCBhbmQgYXQgdGhlIGJvdHRvbS4KKyAgICAgKiBJbnNlcnRlZCBpbnRvIHRoZXNlIG1heSBiZSBhZGRpdGlvbmFsIHJ1bGVzIGF0IHRoZQorICAgICAqIGlkU3BsaXRQb2ludC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGlkQmxvY2s7CisKKyAgICAvKioKKyAgICAgKiBQVUJMSUMgZGF0YSBtZW1iZXIuCisgICAgICogSW4gYSBjb21wb3VuZCBSQlQsIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgUkJUIHJ1bGVzIGFyZQorICAgICAqIGluc2VydGVkIGludG8gdGhlIElEIGJsb2NrLiAgSW5kZXggMCBtZWFucyBiZWZvcmUgYW55IElEcworICAgICAqIGluIHRoZSBibG9jay4gIEluZGV4IGlkQmxvY2subGVuZ3RoKCkgbWVhbnMgYWZ0ZXIgYWxsIElEcworICAgICAqIGluIHRoZSBibG9jay4gIEluZGV4IGlzIGEgc3RyaW5nIGluZGV4LgorICAgICAqLworICAgIHB1YmxpYyBpbnQgaWRTcGxpdFBvaW50OworCisgICAgLyoqCisgICAgICogUFVCTElDIGRhdGEgbWVtYmVyIGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBjb21wb3VuZCBmaWx0ZXIsIGlmIGFueS4KKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCBjb21wb3VuZEZpbHRlcjsKKworCisgICAgLy8gVGhlIG51bWJlciBvZiBydWxlcyBwYXJzZWQuICBUaGlzIHRlbGxzIHVzIGlmIHRoZXJlIHdlcmUKKyAgICAvLyBhbnkgYWN0dWFsIHRyYW5zbGl0ZXJhdG9yIHJ1bGVzLCBvciBpZiB0aGVyZSB3ZXJlIGp1c3QgOjpJRAorICAgIC8vIGJsb2NrIElEcy4KKyAgICBwcml2YXRlIGludCBydWxlQ291bnQ7CisKKyAgICBwcml2YXRlIGludCBkaXJlY3Rpb247CisKKyAgICAvKioKKyAgICAgKiBUZW1wb3Jhcnkgc3ltYm9sIHRhYmxlIHVzZWQgZHVyaW5nIHBhcnNpbmcuCisgICAgICovCisgICAgcHJpdmF0ZSBQYXJzZURhdGEgcGFyc2VEYXRhOworCisgICAgLyoqCisgICAgICogVGVtcG9yYXJ5IHZlY3RvciBvZiBzZXQgdmFyaWFibGVzLiAgV2hlbiBwYXJzaW5nIGlzIGNvbXBsZXRlLCB0aGlzCisgICAgICogaXMgY29waWVkIGludG8gdGhlIGFycmF5IGRhdGEudmFyaWFibGVzLiAgQXMgd2l0aCBkYXRhLnZhcmlhYmxlcywKKyAgICAgKiBlbGVtZW50IDAgY29ycmVzcG9uZHMgdG8gY2hhcmFjdGVyIGRhdGEudmFyaWFibGVzQmFzZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIFZlY3RvciB2YXJpYWJsZXNWZWN0b3I7CisKKyAgICAvKioKKyAgICAgKiBTdHJpbmcgb2Ygc3RhbmRpbnMgZm9yIHNlZ21lbnRzLiAgVXNlZCBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgYSBzaW5nbGUKKyAgICAgKiBydWxlLiAgc2VnbWVudFN0YW5kaW5zLmNoYXJBdCgwKSBpcyB0aGUgc3RhbmRpbiBmb3IgIiQxIiBhbmQgY29ycmVzcG9uZHMKKyAgICAgKiB0byBTdHJpbmdNYXRjaGVyIG9iamVjdCBzZWdtZW50T2JqZWN0cy5lbGVtZW50QXQoMCksIGV0Yy4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBzZWdtZW50U3RhbmRpbnM7CisKKyAgICAvKioKKyAgICAgKiBWZWN0b3Igb2YgU3RyaW5nTWF0Y2hlciBvYmplY3RzIGZvciBzZWdtZW50cy4gIFVzZWQgZHVyaW5nIHRoZQorICAgICAqIHBhcnNpbmcgb2YgYSBzaW5nbGUgcnVsZS4gIAorICAgICAqIHNlZ21lbnRTdGFuZGlucy5jaGFyQXQoMCkgaXMgdGhlIHN0YW5kaW4gZm9yICIkMSIgYW5kIGNvcnJlc3BvbmRzCisgICAgICogdG8gU3RyaW5nTWF0Y2hlciBvYmplY3Qgc2VnbWVudE9iamVjdHMuZWxlbWVudEF0KDApLCBldGMuCisgICAgICovCisgICAgcHJpdmF0ZSBWZWN0b3Igc2VnbWVudE9iamVjdHM7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbmV4dCBhdmFpbGFibGUgc3RhbmQtaW4gZm9yIHZhcmlhYmxlcy4gIFRoaXMgc3RhcnRzIGF0IHNvbWUgcG9pbnQgaW4KKyAgICAgKiB0aGUgcHJpdmF0ZSB1c2UgYXJlYSAoZGlzY292ZXJlZCBkeW5hbWljYWxseSkgYW5kIGluY3JlbWVudHMgdXAgdG93YXJkCisgICAgICogPGNvZGU+dmFyaWFibGVMaW1pdDwvY29kZT4uICBBdCBhbnkgcG9pbnQgZHVyaW5nIHBhcnNpbmcsIGF2YWlsYWJsZQorICAgICAqIHZhcmlhYmxlcyBhcmUgPGNvZGU+dmFyaWFibGVOZXh0Li52YXJpYWJsZUxpbWl0LTE8L2NvZGU+LgorICAgICAqLworICAgIHByaXZhdGUgY2hhciB2YXJpYWJsZU5leHQ7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbGFzdCBhdmFpbGFibGUgc3RhbmQtaW4gZm9yIHZhcmlhYmxlcy4gIFRoaXMgaXMgZGlzY292ZXJlZAorICAgICAqIGR5bmFtaWNhbGx5LiAgQXQgYW55IHBvaW50IGR1cmluZyBwYXJzaW5nLCBhdmFpbGFibGUgdmFyaWFibGVzIGFyZQorICAgICAqIDxjb2RlPnZhcmlhYmxlTmV4dC4udmFyaWFibGVMaW1pdC0xPC9jb2RlPi4gIER1cmluZyB2YXJpYWJsZSBkZWZpbml0aW9uCisgICAgICogd2UgdXNlIHRoZSBzcGVjaWFsIHZhbHVlIHZhcmlhYmxlTGltaXQtMSBhcyBhIHBsYWNlaG9sZGVyLgorICAgICAqLworICAgIHByaXZhdGUgY2hhciB2YXJpYWJsZUxpbWl0OworCisgICAgLyoqCisgICAgICogV2hlbiB3ZSBlbmNvdW50ZXIgYW4gdW5kZWZpbmVkIHZhcmlhYmxlLCB3ZSBkbyBub3QgaW1tZWRpYXRlbHkgc2lnbmFsCisgICAgICogYW4gZXJyb3IsIGluIGNhc2Ugd2UgYXJlIGRlZmluaW5nIHRoaXMgdmFyaWFibGUsIGUuZy4sICIkYSA9IFthLXpdOyIuCisgICAgICogSW5zdGVhZCwgd2Ugc2F2ZSB0aGUgbmFtZSBvZiB0aGUgdW5kZWZpbmVkIHZhcmlhYmxlLCBhbmQgc3Vic3RpdHV0ZQorICAgICAqIGluIHRoZSBwbGFjZWhvbGRlciBjaGFyIHZhcmlhYmxlTGltaXQgLSAxLCBhbmQgZGVjcmVtZW50CisgICAgICogdmFyaWFibGVMaW1pdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyB1bmRlZmluZWRWYXJpYWJsZU5hbWU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgc3RhbmQtaW4gY2hhcmFjdGVyIGZvciB0aGUgJ2RvdCcgc2V0LCByZXByZXNlbnRlZCBieSAnLicgaW4KKyAgICAgKiBwYXR0ZXJucy4gIFRoaXMgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIGl0IGlzIG5lZWRlZCwgYW5kCisgICAgICogcmV1c2VkIHRoZXJlYWZ0ZXIuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZG90U3RhbmRJbiA9IC0xOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQ29uc3RhbnRzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBJbmRpY2F0b3IgZm9yIElEIGJsb2NrcworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9UT0tFTiA9ICI6OiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElEX1RPS0VOX0xFTiA9IDI7CisKKyAgICAvLyBPcGVyYXRvcnMKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFZBUklBQkxFX0RFRl9PUCAgID0gJz0nOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgRk9SV0FSRF9SVUxFX09QICAgPSAnPic7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBSRVZFUlNFX1JVTEVfT1AgICA9ICc8JzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEZXRFJFVl9SVUxFX09QICAgID0gJ34nOyAvLyBpbnRlcm5hbCByZXAgb2YgPD4gb3AKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRPUlMgPSAiPT48IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEFMRl9FTkRFUlMgPSAiPT48OyI7CisKKyAgICAvLyBPdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFFVT1RFICAgICAgICAgICAgICAgPSAnXCcnOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgRVNDQVBFICAgICAgICAgICAgICA9ICdcXCc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBFTkRfT0ZfUlVMRSAgICAgICAgID0gJzsnOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgUlVMRV9DT01NRU5UX0NIQVIgICA9ICcjJzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgQ09OVEVYVF9BTlRFICAgICAgICA9ICd7JzsgLy8gYW50ZXtrZXkKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIENPTlRFWFRfUE9TVCAgICAgICAgPSAnfSc7IC8vIGtleX1wb3N0CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBDVVJTT1JfUE9TICAgICAgICAgID0gJ3wnOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgQ1VSU09SX09GRlNFVCAgICAgICA9ICdAJzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEFOQ0hPUl9TVEFSVCAgICAgICAgPSAnXic7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIEtMRUVORV9TVEFSICAgICAgICAgPSAnKic7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBPTkVfT1JfTU9SRSAgICAgICAgID0gJysnOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgWkVST19PUl9PTkUgICAgICAgICA9ICc/JzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgRE9UICAgICAgICAgICAgICAgICA9ICcuJzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9UX1NFVCAgICAgICAgICAgPSAiW15bOlpwOl1bOlpsOl1cXHJcXG4kXSI7CisKKyAgICAvLyBCeSBkZWZpbml0aW9uLCB0aGUgQU5DSE9SX0VORCBzcGVjaWFsIGNoYXJhY3RlciBpcyBhCisgICAgLy8gdHJhaWxpbmcgU3ltYm9sVGFibGUuU1lNQk9MX1JFRiBjaGFyYWN0ZXIuCisgICAgLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBBTkNIT1JfRU5EICAgICAgID0gJyQnOworCisgICAgLy8gU2VnbWVudHMgb2YgdGhlIGlucHV0IHN0cmluZyBhcmUgZGVsaW1pdGVkIGJ5ICIoIiBhbmQgIikiLiAgSW4gdGhlCisgICAgLy8gb3V0cHV0IHN0cmluZyB0aGVzZSBzZWdtZW50cyBhcmUgcmVmZXJlbmNlZCBhcyAiJDEiLCAiJDIiLCBldGMuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBTRUdNRU5UX09QRU4gICAgICAgID0gJygnOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgU0VHTUVOVF9DTE9TRSAgICAgICA9ICcpJzsKKworICAgIC8vIEEgZnVuY3Rpb24gaXMgZGVub3RlZCAmU291cmNlLVRhcmdldC9WYXJpYW50KHRleHQpCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBGVU5DVElPTiAgICAgICAgICAgID0gJyYnOworCisgICAgLy8gU3BlY2lhbCBjaGFyYWN0ZXJzIGRpc2FsbG93ZWQgYXQgdGhlIHRvcCBsZXZlbAorICAgIHByaXZhdGUgc3RhdGljIFVuaWNvZGVTZXQgSUxMRUdBTF9UT1AgPSBuZXcgVW5pY29kZVNldCgiW1xcKV0iKTsKKworICAgIC8vIFNwZWNpYWwgY2hhcmFjdGVycyBkaXNhbGxvd2VkIHdpdGhpbiBhIHNlZ21lbnQKKyAgICBwcml2YXRlIHN0YXRpYyBVbmljb2RlU2V0IElMTEVHQUxfU0VHID0gbmV3IFVuaWNvZGVTZXQoIltcXHtcXH1cXHxcXEBdIik7CisKKyAgICAvLyBTcGVjaWFsIGNoYXJhY3RlcnMgZGlzYWxsb3dlZCB3aXRoaW4gYSBmdW5jdGlvbiBhcmd1bWVudAorICAgIHByaXZhdGUgc3RhdGljIFVuaWNvZGVTZXQgSUxMRUdBTF9GVU5DID0gbmV3IFVuaWNvZGVTZXQoIltcXF5cXChcXC5cXCpcXCtcXD9cXHtcXH1cXHxcXEBdIik7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjbGFzcyBQYXJzZURhdGEKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgU3ltYm9sVGFibGUgaW50ZXJmYWNlLiAgSXQgaXMgdXNlZAorICAgICAqIGR1cmluZyBwYXJzaW5nIHRvIGdpdmUgVW5pY29kZVNldCBhY2Nlc3MgdG8gdmFyaWFibGVzIHRoYXQKKyAgICAgKiBoYXZlIGJlZW4gZGVmaW5lZCBzbyBmYXIuICBOb3RlIHRoYXQgaXQgdXNlcyB2YXJpYWJsZXNWZWN0b3IsCisgICAgICogX25vdF8gZGF0YS52YXJpYWJsZXMuCisgICAgICovCisgICAgcHJpdmF0ZSBjbGFzcyBQYXJzZURhdGEgaW1wbGVtZW50cyBTeW1ib2xUYWJsZSB7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEltcGxlbWVudCBTeW1ib2xUYWJsZSBBUEkuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgY2hhcltdIGxvb2t1cChTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIChjaGFyW10pIGRhdGEudmFyaWFibGVOYW1lcy5nZXQobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSW1wbGVtZW50IFN5bWJvbFRhYmxlIEFQSS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBVbmljb2RlTWF0Y2hlciBsb29rdXBNYXRjaGVyKGludCBjaCkgeworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhbm5vdCB1c2UgZGF0YS5sb29rdXAoKSBiZWNhdXNlIHRoZQorICAgICAgICAgICAgLy8gc2V0IGFycmF5IGhhcyBub3QgYmVlbiBjb25zdHJ1Y3RlZCB5ZXQuCisgICAgICAgICAgICBpbnQgaSA9IGNoIC0gZGF0YS52YXJpYWJsZXNCYXNlOworICAgICAgICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgdmFyaWFibGVzVmVjdG9yLnNpemUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAoVW5pY29kZU1hdGNoZXIpIHZhcmlhYmxlc1ZlY3Rvci5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbXBsZW1lbnQgU3ltYm9sVGFibGUgQVBJLiAgUGFyc2Ugb3V0IGEgc3ltYm9sIHJlZmVyZW5jZQorICAgICAgICAgKiBuYW1lLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFN0cmluZyBwYXJzZVJlZmVyZW5jZShTdHJpbmcgdGV4dCwgUGFyc2VQb3NpdGlvbiBwb3MsIGludCBsaW1pdCkgeworICAgICAgICAgICAgaW50IHN0YXJ0ID0gcG9zLmdldEluZGV4KCk7CisgICAgICAgICAgICBpbnQgaSA9IHN0YXJ0OworICAgICAgICAgICAgd2hpbGUgKGkgPCBsaW1pdCkgeworICAgICAgICAgICAgICAgIGNoYXIgYyA9IHRleHQuY2hhckF0KGkpOworICAgICAgICAgICAgICAgIGlmICgoaT09c3RhcnQgJiYgIUNoYXJhY3Rlci5pc1VuaWNvZGVJZGVudGlmaWVyU3RhcnQoYykpIHx8CisgICAgICAgICAgICAgICAgICAgICFDaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmllclBhcnQoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID09IHN0YXJ0KSB7IC8vIE5vIHZhbGlkIG5hbWUgY2hhcnMKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcy5zZXRJbmRleChpKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZyhzdGFydCwgaSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBhIG1hdGNoZXIgc3RhbmRpbiBvciBhIHBsYWluCisgICAgICAgICAqIGNoYXJhY3RlciAobm9uIHN0YW5kaW4pLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNNYXRjaGVyKGludCBjaCkgeworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhbm5vdCB1c2UgZGF0YS5sb29rdXAoKSBiZWNhdXNlIHRoZQorICAgICAgICAgICAgLy8gc2V0IGFycmF5IGhhcyBub3QgYmVlbiBjb25zdHJ1Y3RlZCB5ZXQuCisgICAgICAgICAgICBpbnQgaSA9IGNoIC0gZGF0YS52YXJpYWJsZXNCYXNlOworICAgICAgICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgdmFyaWFibGVzVmVjdG9yLnNpemUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZXNWZWN0b3IuZWxlbWVudEF0KGkpIGluc3RhbmNlb2YgVW5pY29kZU1hdGNoZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGlzIGEgcmVwbGFjZXIgc3RhbmRpbiBvciBhIHBsYWluCisgICAgICAgICAqIGNoYXJhY3RlciAobm9uIHN0YW5kaW4pLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNSZXBsYWNlcihpbnQgY2gpIHsKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIGRhdGEubG9va3VwKCkgYmVjYXVzZSB0aGUKKyAgICAgICAgICAgIC8vIHNldCBhcnJheSBoYXMgbm90IGJlZW4gY29uc3RydWN0ZWQgeWV0LgorICAgICAgICAgICAgaW50IGkgPSBjaCAtIGRhdGEudmFyaWFibGVzQmFzZTsKKyAgICAgICAgICAgIGlmIChpID49IDAgJiYgaSA8IHZhcmlhYmxlc1ZlY3Rvci5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVzVmVjdG9yLmVsZW1lbnRBdChpKSBpbnN0YW5jZW9mIFVuaWNvZGVSZXBsYWNlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY2xhc3NlcyBSdWxlQm9keSwgUnVsZUFycmF5LCBhbmQgUnVsZVJlYWRlcgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQSBwcml2YXRlIGFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyB0aGUgaW50ZXJmYWNlIHRvIHJ1bGUKKyAgICAgKiBzb3VyY2UgY29kZSB0aGF0IGlzIGJyb2tlbiB1cCBpbnRvIGxpbmVzLiAgSGFuZGxlcyB0aGUKKyAgICAgKiBmb2xkaW5nIG9mIGxpbmVzIHRlcm1pbmF0ZWQgYnkgYSBiYWNrc2xhc2guICBUaGlzIGZvbGRpbmcKKyAgICAgKiBpcyBsaW1pdGVkOyBpdCBkb2VzIG5vdCBhY2NvdW50IGZvciBjb21tZW50cywgcXVvdGVzLCBvcgorICAgICAqIGVzY2FwZXMsIHNvIGl0cyB1c2UgdG8gYmUgbGltaXRlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBSdWxlQm9keSB7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHJpZXZlIHRoZSBuZXh0IGxpbmUgb2YgdGhlIHNvdXJjZSwgb3IgcmV0dXJuIG51bGwgaWYKKyAgICAgICAgICogbm9uZS4gIEZvbGRzIGxpbmVzIHRlcm1pbmF0ZWQgYnkgYSBiYWNrc2xhc2ggaW50byB0aGUKKyAgICAgICAgICogbmV4dCBsaW5lLCB3aXRob3V0IHJlZ2FyZCBmb3IgY29tbWVudHMsIHF1b3Rlcywgb3IKKyAgICAgICAgICogZXNjYXBlcy4KKyAgICAgICAgICovCisgICAgICAgIFN0cmluZyBuZXh0TGluZSgpIHsKKyAgICAgICAgICAgIFN0cmluZyBzID0gaGFuZGxlTmV4dExpbmUoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBzLmxlbmd0aCgpID4gMCAmJgorICAgICAgICAgICAgICAgIHMuY2hhckF0KHMubGVuZ3RoKCkgLSAxKSA9PSAnXFwnKSB7CisKKyAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYiA9IG5ldyBTdHJpbmdCdWZmZXIocyk7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBiLmRlbGV0ZUNoYXJBdChiLmxlbmd0aCgpLTEpOworICAgICAgICAgICAgICAgICAgICBzID0gaGFuZGxlTmV4dExpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYi5hcHBlbmQocyk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocy5sZW5ndGgoKSA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBzLmNoYXJBdChzLmxlbmd0aCgpIC0gMSkgPT0gJ1xcJyk7CisKKyAgICAgICAgICAgICAgICBzID0gYi50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmVzZXQgdG8gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNvdXJjZS4KKyAgICAgICAgICovCisgICAgICAgIGFic3RyYWN0IHZvaWQgcmVzZXQoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogU3ViY2xhc3MgbWV0aG9kIHRvIHJldHVybiB0aGUgbmV4dCBsaW5lIG9mIHRoZSBzb3VyY2UuCisgICAgICAgICAqLworICAgICAgICBhYnN0cmFjdCBTdHJpbmcgaGFuZGxlTmV4dExpbmUoKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUnVsZUJvZHkgc3ViY2xhc3MgZm9yIGEgU3RyaW5nW10gYXJyYXkuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUnVsZUFycmF5IGV4dGVuZHMgUnVsZUJvZHkgeworICAgICAgICBTdHJpbmdbXSBhcnJheTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHB1YmxpYyBSdWxlQXJyYXkoU3RyaW5nW10gYXJyYXkpIHsgdGhpcy5hcnJheSA9IGFycmF5OyBpID0gMDsgfQorICAgICAgICBwdWJsaWMgU3RyaW5nIGhhbmRsZU5leHRMaW5lKCkgeworICAgICAgICAgICAgcmV0dXJuIChpIDwgYXJyYXkubGVuZ3RoKSA/IGFycmF5W2krK10gOiBudWxsOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgeworICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogUnVsZUJvZHkgc3ViY2xhc3MgZm9yIGEgUmVzb3VyY2VSZWFkZXIuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUnVsZVJlYWRlciBleHRlbmRzIFJ1bGVCb2R5IHsKKyAgICAgICAgUmVzb3VyY2VSZWFkZXIgcmVhZGVyOworICAgICAgICBwdWJsaWMgUnVsZVJlYWRlcihSZXNvdXJjZVJlYWRlciByZWFkZXIpIHsgdGhpcy5yZWFkZXIgPSByZWFkZXI7IH0KKyAgICAgICAgcHVibGljIFN0cmluZyBoYW5kbGVOZXh0TGluZSgpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkTGluZSgpOworICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIHZvaWQgcmVzZXQoKSB7CisgICAgICAgICAgICByZWFkZXIucmVzZXQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjbGFzcyBSdWxlSGFsZgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQSBjbGFzcyByZXByZXNlbnRpbmcgb25lIHNpZGUgb2YgYSBydWxlLiAgVGhpcyBjbGFzcyBrbm93cyBob3cgdG8KKyAgICAgKiBwYXJzZSBoYWxmIG9mIGEgcnVsZS4gIEl0IGlzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgbWV0aG9kCisgICAgICogVHJhbnNsaXRlcmF0b3JQYXJzZXIucGFyc2VSdWxlKCkuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUnVsZUhhbGYgeworCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdGV4dDsKKworICAgICAgICBwdWJsaWMgaW50IGN1cnNvciA9IC0xOyAvLyBwb3NpdGlvbiBvZiBjdXJzb3IgaW4gdGV4dAorICAgICAgICBwdWJsaWMgaW50IGFudGUgPSAtMTsgICAvLyBwb3NpdGlvbiBvZiBhbnRlIGNvbnRleHQgbWFya2VyICd7JyBpbiB0ZXh0CisgICAgICAgIHB1YmxpYyBpbnQgcG9zdCA9IC0xOyAgIC8vIHBvc2l0aW9uIG9mIHBvc3QgY29udGV4dCBtYXJrZXIgJ30nIGluIHRleHQKKworICAgICAgICAvLyBSZWNvcmQgdGhlIG9mZnNldCB0byB0aGUgY3Vyc29yIGVpdGhlciB0byB0aGUgbGVmdCBvciB0byB0aGUKKyAgICAgICAgLy8gcmlnaHQgb2YgdGhlIGtleS4gIFRoaXMgaXMgaW5kaWNhdGVkIGJ5IGNoYXJhY3RlcnMgb24gdGhlIG91dHB1dAorICAgICAgICAvLyBzaWRlIHRoYXQgYWxsb3cgdGhlIGN1cnNvciB0byBiZSBwb3NpdGlvbmVkIGFyYml0cmFyaWx5IHdpdGhpbgorICAgICAgICAvLyB0aGUgbWF0Y2hpbmcgdGV4dC4gIEZvciBleGFtcGxlLCBhYmN7ZGVmfSA+IHwgQEBAIHh5ejsgY2hhbmdlcworICAgICAgICAvLyBkZWYgdG8geHl6IGFuZCBtb3ZlcyB0aGUgY3Vyc29yIHRvIGJlZm9yZSBhYmMuICBPZmZzZXQgY2hhcmFjdGVycworICAgICAgICAvLyBtdXN0IGJlIGF0IHRoZSBzdGFydCBvciBlbmQsIGFuZCB0aGV5IGNhbm5vdCBtb3ZlIHRoZSBjdXJzb3IgcGFzdAorICAgICAgICAvLyB0aGUgYW50ZS0gb3IgcG9zdGNvbnRleHQgdGV4dC4gIFBsYWNlaG9sZGVycyBhcmUgb25seSB2YWxpZCBpbgorICAgICAgICAvLyBvdXRwdXQgdGV4dC4gIFRoZSBsZW5ndGggb2YgdGhlIGFudGUgYW5kIHBvc3QgY29udGV4dCBpcworICAgICAgICAvLyBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUsIGJlY2F1c2Ugb2Ygc3VwcGxlbWVudGFscyBhbmQgcXVhbnRpZmllcnMuCisgICAgICAgIHB1YmxpYyBpbnQgY3Vyc29yT2Zmc2V0ID0gMDsgLy8gb25seSBub256ZXJvIG9uIG91dHB1dCBzaWRlCisKKyAgICAgICAgLy8gUG9zaXRpb24gb2YgZmlyc3QgQ1VSU09SX09GRlNFVCBvbiBfcmlnaHRfLiAgVGhpcyB3aWxsIGJlIC0xCisgICAgICAgIC8vIGZvciB8QCwgLTIgZm9yIHxAQCwgZXRjLiwgYW5kIDEgZm9yIEB8LCAyIGZvciBAQHwsIGV0Yy4KKyAgICAgICAgcHJpdmF0ZSBpbnQgY3Vyc29yT2Zmc2V0UG9zID0gMDsKKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBhbmNob3JTdGFydCA9IGZhbHNlOworICAgICAgICBwdWJsaWMgYm9vbGVhbiBhbmNob3JFbmQgICA9IGZhbHNlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2VnbWVudCBudW1iZXIgZnJvbSAxLi5uIG9mIHRoZSBuZXh0ICcoJyB3ZSBzZWUKKyAgICAgICAgICogZHVyaW5nIHBhcnNpbmc7IDEtYmFzZWQuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBuZXh0U2VnbWVudE51bWJlciA9IDE7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBhcnNlIG9uZSBzaWRlIG9mIGEgcnVsZSwgc3RvcHBpbmcgYXQgZWl0aGVyIHRoZSBsaW1pdCwKKyAgICAgICAgICogdGhlIEVORF9PRl9SVUxFIGNoYXJhY3Rlciwgb3IgYW4gb3BlcmF0b3IuCisgICAgICAgICAqIEByZXR1cm4gdGhlIGluZGV4IGFmdGVyIHRoZSB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIsIG9yCisgICAgICAgICAqIGlmIGxpbWl0IHdhcyByZWFjaGVkLCBsaW1pdAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBwYXJzZShTdHJpbmcgcnVsZSwgaW50IHBvcywgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yUGFyc2VyIHBhcnNlcikgeworICAgICAgICAgICAgaW50IHN0YXJ0ID0gcG9zOworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgICAgIHBvcyA9IHBhcnNlU2VjdGlvbihydWxlLCBwb3MsIGxpbWl0LCBwYXJzZXIsIGJ1ZiwgSUxMRUdBTF9UT1AsIGZhbHNlKTsKKyAgICAgICAgICAgIHRleHQgPSBidWYudG9TdHJpbmcoKTsKKworICAgICAgICAgICAgaWYgKGN1cnNvck9mZnNldCA+IDAgJiYgY3Vyc29yICE9IGN1cnNvck9mZnNldFBvcykgeworICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJNaXNwbGFjZWQgIiArIENVUlNPUl9QT1MsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBvczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQYXJzZSBhIHNlY3Rpb24gb2Ygb25lIHNpZGUgb2YgYSBydWxlLCBzdG9wcGluZyBhdCBlaXRoZXIKKyAgICAgICAgICogdGhlIGxpbWl0LCB0aGUgRU5EX09GX1JVTEUgY2hhcmFjdGVyLCBhbiBvcGVyYXRvciwgb3IgYQorICAgICAgICAgKiBzZWdtZW50IGNsb3NlIGNoYXJhY3Rlci4gIFRoaXMgbWV0aG9kIHBhcnNlcyBib3RoIGEKKyAgICAgICAgICogdG9wLWxldmVsIHJ1bGUgaGFsZiBhbmQgYSBzZWdtZW50IHdpdGhpbiBzdWNoIGEgcnVsZSBoYWxmLgorICAgICAgICAgKiBJdCBjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkgdG8gcGFyc2Ugc2VnbWVudHMgYW5kIG5lc3RlZAorICAgICAgICAgKiBzZWdtZW50cy4KKyAgICAgICAgICogQHBhcmFtIGJ1ZiBidWZmZXIgaW50byB3aGljaCB0byBhY2N1bXVsYXRlIHRoZSBydWxlIHBhdHRlcm4KKyAgICAgICAgICogY2hhcmFjdGVycywgZWl0aGVyIGxpdGVyYWwgY2hhcmFjdGVycyBmcm9tIHRoZSBydWxlIG9yCisgICAgICAgICAqIHN0YW5kaW5zIGZvciBVbmljb2RlTWF0Y2hlciBvYmplY3RzIGluY2x1ZGluZyBzZWdtZW50cy4KKyAgICAgICAgICogQHBhcmFtIGlsbGVnYWwgdGhlIHNldCBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBpcyBpbGxlZ2FsIGR1cmluZworICAgICAgICAgKiB0aGlzIHBhcnNlLgorICAgICAgICAgKiBAcGFyYW0gaXNTZWdtZW50IGlmIHRydWUsIHRoZW4gd2UndmUgYWxyZWFkeSBzZWVuIGEgJygnIGFuZAorICAgICAgICAgKiBwb3Mgb24gZW50cnkgcG9pbnRzIHJpZ2h0IGFmdGVyIGl0LiAgQWNjdW11bGF0ZSBldmVyeXRoaW5nCisgICAgICAgICAqIHVwIHRvIHRoZSBjbG9zaW5nICcpJywgcHV0IGl0IGluIGEgc2VnbWVudCBtYXRjaGVyIG9iamVjdCwKKyAgICAgICAgICogZ2VuZXJhdGUgYSBzdGFuZGluIGZvciBpdCwgYW5kIGFkZCB0aGUgc3RhbmRpbiB0byBidWYuICBBcworICAgICAgICAgKiBhIHNpZGUgZWZmZWN0LCB1cGRhdGUgdGhlIHNlZ21lbnRzIHZlY3RvciB3aXRoIGEgcmVmZXJlbmNlCisgICAgICAgICAqIHRvIHRoZSBzZWdtZW50IG1hdGNoZXIuICBUaGlzIHdvcmtzIHJlY3Vyc2l2ZWx5IGZvciBuZXN0ZWQKKyAgICAgICAgICogc2VnbWVudHMuICBJZiBpc1NlZ21lbnQgaXMgZmFsc2UsIGp1c3QgYWNjdW11bGF0ZQorICAgICAgICAgKiBjaGFyYWN0ZXJzIGludG8gYnVmLgorICAgICAgICAgKiBAcmV0dXJuIHRoZSBpbmRleCBhZnRlciB0aGUgdGVybWluYXRpbmcgY2hhcmFjdGVyLCBvcgorICAgICAgICAgKiBpZiBsaW1pdCB3YXMgcmVhY2hlZCwgbGltaXQKKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgaW50IHBhcnNlU2VjdGlvbihTdHJpbmcgcnVsZSwgaW50IHBvcywgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3JQYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTZXQgaWxsZWdhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNTZWdtZW50KSB7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSBwb3M7CisgICAgICAgICAgICBQYXJzZVBvc2l0aW9uIHBwID0gbnVsbDsKKyAgICAgICAgICAgIGludCBxdW90ZVN0YXJ0ID0gLTE7IC8vIE1vc3QgcmVjZW50ICdzaW5nbGUgcXVvdGVkIHN0cmluZycKKyAgICAgICAgICAgIGludCBxdW90ZUxpbWl0ID0gLTE7CisgICAgICAgICAgICBpbnQgdmFyU3RhcnQgPSAtMTsgLy8gTW9zdCByZWNlbnQgJHZhcmlhYmxlUmVmZXJlbmNlCisgICAgICAgICAgICBpbnQgdmFyTGltaXQgPSAtMTsKKyAgICAgICAgICAgIGludFtdIGlyZWYgPSBuZXcgaW50WzFdOworICAgICAgICAgICAgaW50IGJ1ZlN0YXJ0ID0gYnVmLmxlbmd0aCgpOworCisgICAgICAgIG1haW46CisgICAgICAgICAgICB3aGlsZSAocG9zIDwgbGltaXQpIHsKKyAgICAgICAgICAgICAgICAvLyBTaW5jZSBhbGwgc3ludGF4IGNoYXJhY3RlcnMgYXJlIGluIHRoZSBCTVAsIGZldGNoaW5nCisgICAgICAgICAgICAgICAgLy8gMTYtYml0IGNvZGUgdW5pdHMgc3VmZmljZXMgaGVyZS4KKyAgICAgICAgICAgICAgICBjaGFyIGMgPSBydWxlLmNoYXJBdChwb3MrKyk7CisgICAgICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBIQUxGX0VOREVSUyBpcyBhbGwgY2hhcnMgdGhhdCBlbmQgYSBydWxlIGhhbGY6ICI8Pj07IgorICAgICAgICAgICAgICAgIGlmIChIQUxGX0VOREVSUy5pbmRleE9mKGMpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2VnbWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIlVuY2xvc2VkIHNlZ21lbnQiLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgbWFpbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGFuY2hvckVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUZXh0IGFmdGVyIGEgcHJlc3VtZWQgZW5kIGFuY2hvciBpcyBhIHN5bnRheCBlcnIKKyAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIk1hbGZvcm1lZCB2YXJpYWJsZSByZWZlcmVuY2UiLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChVbmljb2RlU2V0LnJlc2VtYmxlc1BhdHRlcm4ocnVsZSwgcG9zLTEpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcCA9IG5ldyBQYXJzZVBvc2l0aW9uKDApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBwLnNldEluZGV4KHBvcy0xKTsgLy8gQmFja3VwIHRvIG9wZW5pbmcgJ1snCisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQocGFyc2VyLnBhcnNlU2V0KHJ1bGUsIHBwKSk7CisgICAgICAgICAgICAgICAgICAgIHBvcyA9IHBwLmdldEluZGV4KCk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBlc2NhcGVzCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gRVNDQVBFKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gbGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJUcmFpbGluZyBiYWNrc2xhc2giLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaXJlZlswXSA9IHBvczsKKyAgICAgICAgICAgICAgICAgICAgaW50IGVzY2FwZWQgPSBVdGlsaXR5LnVuZXNjYXBlQXQocnVsZSwgaXJlZik7CisgICAgICAgICAgICAgICAgICAgIHBvcyA9IGlyZWZbMF07CisgICAgICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXhFcnJvcigiTWFsZm9ybWVkIGVzY2FwZSIsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwYXJzZXIuY2hlY2tWYXJpYWJsZVJhbmdlKGVzY2FwZWQsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgVVRGMTYuYXBwZW5kKGJ1ZiwgZXNjYXBlZCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcXVvdGVkIG1hdHRlcgorICAgICAgICAgICAgICAgIGlmIChjID09IFFVT1RFKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBpcSA9IHJ1bGUuaW5kZXhPZihRVU9URSwgcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlxID09IHBvcykgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChjKTsgLy8gUGFyc2UgWycnXSBvdXRzaWRlIHF1b3RlcyBhcyBbJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBsb29wIHBpY2tzIHVwIGEgcnVuIG9mIHF1b3RlZCB0ZXh0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICogZm9ybSAnYWFhYScgZWFjaCB0aW1lIHRocm91Z2guICBJZiB0aGlzIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICogaGFzbid0IHJlYWxseSBlbmRlZCAoJ2FhYWEnJ2JiYmInKSB0aGVuIGl0IGtlZXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBsb29waW5nLCBlYWNoIHRpbWUgYWRkaW5nIG9uIGEgbmV3IHJ1bi4gIFdoZW4gaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlYWNoZXMgdGhlIGZpbmFsIHF1b3RlIGl0IGJyZWFrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVTdGFydCA9IGJ1Zi5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXEgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJVbnRlcm1pbmF0ZWQgcXVvdGUiLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQocnVsZS5zdWJzdHJpbmcocG9zLCBpcSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGlxKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA8IGxpbWl0ICYmIHJ1bGUuY2hhckF0KHBvcykgPT0gUVVPVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSBbJyddIGluc2lkZSBxdW90ZXMgYXMgWyddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlxID0gcnVsZS5pbmRleE9mKFFVT1RFLCBwb3MrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgbG9vcGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlTGltaXQgPSBidWYubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXE9cXVvdGVTdGFydDsgaXE8cXVvdGVMaW1pdDsgKytpcSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5jaGVja1ZhcmlhYmxlUmFuZ2UoYnVmLmNoYXJBdChpcSksIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwYXJzZXIuY2hlY2tWYXJpYWJsZVJhbmdlKGMsIHJ1bGUsIHN0YXJ0KTsKKworICAgICAgICAgICAgICAgIGlmIChpbGxlZ2FsLmNvbnRhaW5zKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJJbGxlZ2FsIGNoYXJhY3RlciAnIiArIGMgKyAnXCcnLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgLy8gRWxlbWVudHMgYWxsb3dlZCB3aXRoaW4gYW5kIG91dCBvZiBzZWdtZW50cworICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgY2FzZSBBTkNIT1JfU1RBUlQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChidWYubGVuZ3RoKCkgPT0gMCAmJiAhYW5jaG9yU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJNaXNwbGFjZWQgYW5jaG9yIHN0YXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNFR01FTlRfT1BFTjoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVmU2VnU3RhcnQgaXMgdGhlIG9mZnNldCBpbiBidWYgdG8gdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgb2YgdGhlIHNlZ21lbnQgd2UgYXJlIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmU2VnU3RhcnQgPSBidWYubGVuZ3RoKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCBzZWdtZW50IG51bWJlciBub3csIHNpbmNlIG5leHRTZWdtZW50TnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGluY3JlbWVudGVkIGR1cmluZyB0aGUgY2FsbCB0byBwYXJzZVNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBuZXN0ZWQgc2VnbWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VnbWVudE51bWJlciA9IG5leHRTZWdtZW50TnVtYmVyKys7IC8vIDEtYmFzZWQKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHNlZ21lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHBhcnNlU2VjdGlvbihydWxlLCBwb3MsIGxpbWl0LCBwYXJzZXIsIGJ1ZiwgSUxMRUdBTF9TRUcsIHRydWUpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZnRlciBwYXJzaW5nIGEgc2VnbWVudCwgdGhlIHJlbGV2YW50IGNoYXJhY3RlcnMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBidWYsIHN0YXJ0aW5nIGF0IG9mZnNldCBidWZTZWdTdGFydC4gIEV4dHJhY3QgdGhlbQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50byBhIHN0cmluZyBtYXRjaGVyLCBhbmQgcmVwbGFjZSB0aGVtIHdpdGggYQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhbmRpbiBmb3IgdGhhdCBtYXRjaGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nTWF0Y2hlciBtID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nTWF0Y2hlcihidWYuc3Vic3RyaW5nKGJ1ZlNlZ1N0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50TnVtYmVyLCBwYXJzZXIuZGF0YSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCBhbmQgYXNzb2NpYXRlIG9iamVjdCBhbmQgc2VnbWVudCBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5zZXRTZWdtZW50T2JqZWN0KHNlZ21lbnROdW1iZXIsIG0pOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLnNldExlbmd0aChidWZTZWdTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKHBhcnNlci5nZXRTZWdtZW50U3RhbmRpbihzZWdtZW50TnVtYmVyKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGVU5DVElPTjoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaXJlZlswXSA9IHBvczsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9ySURQYXJzZXIuU2luZ2xlSUQgc2luZ2xlID0gVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5wYXJzZUZpbHRlcklEKHJ1bGUsIGlyZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5leHQgY2hhcmFjdGVyIE1VU1QgYmUgYSBzZWdtZW50IG9wZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGUgPT0gbnVsbCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICFVdGlsaXR5LnBhcnNlQ2hhcihydWxlLCBpcmVmLCBTRUdNRU5UX09QRU4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIkludmFsaWQgZnVuY3Rpb24iLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBzaW5nbGUuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXhFcnJvcigiSW52YWxpZCBmdW5jdGlvbiBJRCIsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVmU2VnU3RhcnQgaXMgdGhlIG9mZnNldCBpbiBidWYgdG8gdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgb2YgdGhlIHNlZ21lbnQgd2UgYXJlIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmU2VnU3RhcnQgPSBidWYubGVuZ3RoKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBzZWdtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBwYXJzZVNlY3Rpb24ocnVsZSwgaXJlZlswXSwgbGltaXQsIHBhcnNlciwgYnVmLCBJTExFR0FMX0ZVTkMsIHRydWUpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZnRlciBwYXJzaW5nIGEgc2VnbWVudCwgdGhlIHJlbGV2YW50IGNoYXJhY3RlcnMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBidWYsIHN0YXJ0aW5nIGF0IG9mZnNldCBidWZTZWdTdGFydC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUmVwbGFjZXIgciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmN0aW9uUmVwbGFjZXIodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1JlcGxhY2VyKGJ1Zi5zdWJzdHJpbmcoYnVmU2VnU3RhcnQpLCBwYXJzZXIuZGF0YSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBidWZmZXIgY29udGVudHMgd2l0aCBhIHN0YW5kLWluCisgICAgICAgICAgICAgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKGJ1ZlNlZ1N0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQocGFyc2VyLmdlbmVyYXRlU3RhbmRJbkZvcihyKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTeW1ib2xUYWJsZS5TWU1CT0xfUkVGOgorICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdmFyaWFibGUgcmVmZXJlbmNlcyBhbmQgc2VnbWVudCByZWZlcmVuY2VzICIkMSIgLi4gIiQ5IgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHZhcmlhYmxlIHJlZmVyZW5jZSBtdXN0IGJlIGZvbGxvd2VkIGltbWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBhIFVuaWNvZGUgaWRlbnRpZmllciBzdGFydCBhbmQgemVybyBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmljb2RlIGlkZW50aWZpZXIgcGFydCBjaGFyYWN0ZXJzLCBvciBieSBhIGRpZ2l0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAxLi45IGlmIGl0IGlzIGEgc2VnbWVudCByZWZlcmVuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID09IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSB2YXJpYWJsZSByZWYgY2hhcmFjdGVyIGF0IHRoZSBlbmQgYWN0cyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuIGFuY2hvciB0byB0aGUgY29udGV4dCBsaW1pdCwgYXMgaW4gcGVybC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgIiQxIiAiJDIiIC4uICIkOSIgLi4gKG5vIHVwcGVyIGxpbWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHJ1bGUuY2hhckF0KHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgciA9IFVDaGFyYWN0ZXIuZGlnaXQoYywgMTApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj0gMSAmJiByIDw9IDkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmVmWzBdID0gcG9zOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBVdGlsaXR5LnBhcnNlTnVtYmVyKHJ1bGUsIGlyZWYsIDEwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIlVuZGVmaW5lZCBzZWdtZW50IHJlZmVyZW5jZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gaXJlZlswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKHBhcnNlci5nZXRTZWdtZW50U3RhbmRpbihyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcCA9PSBudWxsKSB7IC8vIExhenkgY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwLnNldEluZGV4KHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIucGFyc2VEYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVJlZmVyZW5jZShydWxlLCBwcCwgbGltaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgJyQnIHdhcyBub3QgZm9sbG93ZWQgYnkgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZCBuYW1lLiAgVHJ5IHRvIGludGVycHJldCBpdCBhcyBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmQgYW5jaG9yIHRoZW4uICBJZiB0aGlzIGFsc28gZG9lc24ndCB3b3JrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChpZiB3ZSBzZWUgYSBmb2xsb3dpbmcgY2hhcmFjdGVyKSB0aGVuIHNpZ25hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHBwLmdldEluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHZhcmlhYmxlIGRlZmluaXRpb24gc3RhdGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gdGhlIExIUyB2YXJpYWJsZSB3aWxsIGJlIHVuZGVmaW5lZC4gIEluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBjYXNlIGFwcGVuZFZhcmlhYmxlRGVmKCkgd2lsbCBhcHBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBwbGFjZWhvbGRlciBjaGFyIHZhcmlhYmxlTGltaXQtMS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJTdGFydCA9IGJ1Zi5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuYXBwZW5kVmFyaWFibGVEZWYobmFtZSwgYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJMaW1pdCA9IGJ1Zi5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERPVDoKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChwYXJzZXIuZ2V0RG90U3RhbmRJbigpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTEVFTkVfU1RBUjoKKyAgICAgICAgICAgICAgICBjYXNlIE9ORV9PUl9NT1JFOgorICAgICAgICAgICAgICAgIGNhc2UgWkVST19PUl9PTkU6CisgICAgICAgICAgICAgICAgICAgIC8vIFF1YW50aWZpZXJzLiAgV2UgaGFuZGxlIHNpbmdsZSBjaGFyYWN0ZXJzLCBxdW90ZWQgc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgcmVmZXJlbmNlcywgYW5kIHNlZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICAvLyAgYSsgICAgICBtYXRjaGVzICBhYWEKKyAgICAgICAgICAgICAgICAgICAgLy8gICdmb28nKyAgbWF0Y2hlcyAgZm9vZm9vZm9vCisgICAgICAgICAgICAgICAgICAgIC8vICAkdisgICAgIG1hdGNoZXMgIHh5eHl4eSBpZiAkdiA9PSB4eQorICAgICAgICAgICAgICAgICAgICAvLyAgKHNlZykrICBtYXRjaGVzICBzZWdzZWdzZWcKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2VnbWVudCAmJiBidWYubGVuZ3RoKCkgPT0gYnVmU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgKi8rIGltbWVkaWF0ZWx5IGZvbGxvd3MgJygnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIk1pc3BsYWNlZCBxdWFudGlmaWVyIiwgcnVsZSwgc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBxc3RhcnQsIHFsaW1pdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSAqLysgZm9sbG93cyBhbiBpc29sYXRlZCBjaGFyYWN0ZXIgb3IgcXVvdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHZhcmlhYmxlIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGgoKSA9PSBxdW90ZUxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlICovKyBmb2xsb3dzIGEgJ3F1b3RlZCBzdHJpbmcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXN0YXJ0ID0gcXVvdGVTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBxbGltaXQgPSBxdW90ZUxpbWl0OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidWYubGVuZ3RoKCkgPT0gdmFyTGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgKi8rIGZvbGxvd3MgYSAkdmFyaWFibGVSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBxc3RhcnQgPSB2YXJTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBxbGltaXQgPSB2YXJMaW1pdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlICovKyBmb2xsb3dzIGEgc2luZ2xlIGNoYXJhY3RlciwgcG9zc2libHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHNlZ21lbnQgc3RhbmRpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFzdGFydCA9IGJ1Zi5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWxpbWl0ID0gcXN0YXJ0ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZU1hdGNoZXIgbSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ01hdGNoZXIoYnVmLnRvU3RyaW5nKCksIHFzdGFydCwgcWxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHBhcnNlci5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtaW4gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heCA9IFF1YW50aWZpZXIuTUFYOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9ORV9PUl9NT1JFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFpFUk9fT1JfT05FOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIEtMRUVORV9TVEFSOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGRvIG5vdGhpbmcgLS0gbWluLCBtYXggYWxyZWFkeSBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBuZXcgUXVhbnRpZmllcihtLCBtaW4sIG1heCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKHFzdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKHBhcnNlci5nZW5lcmF0ZVN0YW5kSW5Gb3IobSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAvLyBFbGVtZW50cyBhbGxvd2VkIE9OTFkgV0lUSElOIHNlZ21lbnRzCisgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICBjYXNlIFNFR01FTlRfQ0xPU0U6CisgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydChpc1NlZ21lbnQpOworICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBkb25lIHBhcnNpbmcgYSBzZWdtZW50LgorICAgICAgICAgICAgICAgICAgICBicmVhayBtYWluOworCisgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAvLyBFbGVtZW50cyBhbGxvd2VkIE9OTFkgT1VUU0lERSBzZWdtZW50cworICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgY2FzZSBDT05URVhUX0FOVEU6CisgICAgICAgICAgICAgICAgICAgIGlmIChhbnRlID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJNdWx0aXBsZSBhbnRlIGNvbnRleHRzIiwgcnVsZSwgc3RhcnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFudGUgPSBidWYubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9QT1NUOgorICAgICAgICAgICAgICAgICAgICBpZiAocG9zdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXhFcnJvcigiTXVsdGlwbGUgcG9zdCBjb250ZXh0cyIsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwb3N0ID0gYnVmLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENVUlNPUl9QT1M6CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJzb3IgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIk11bHRpcGxlIGN1cnNvcnMiLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gYnVmLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENVUlNPUl9PRkZTRVQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJzb3JPZmZzZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJNaXNwbGFjZWQgIiArIGMsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC0tY3Vyc29yT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnNvck9mZnNldCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWYubGVuZ3RoKCkgIT0gY3Vyc29yT2Zmc2V0UG9zIHx8IGN1cnNvciA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIk1pc3BsYWNlZCAiICsgYywgcnVsZSwgc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKytjdXJzb3JPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09IDAgJiYgYnVmLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JPZmZzZXQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Vyc29yIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvck9mZnNldFBvcyA9IGJ1Zi5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JPZmZzZXQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXhFcnJvcigiTWlzcGxhY2VkICIgKyBjLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIC8vIE5vbi1zcGVjaWFsIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIC8vIERpc2FsbG93IHVucXVvdGVkIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbMC05QS1aYS16XQorICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgcHJpbnRhYmxlIEFTQ0lJIHJhbmdlLiAgVGhlc2UgY2hhcmFjdGVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UuCisgICAgICAgICAgICAgICAgICAgIGlmIChjID49IDB4MDAyMSAmJiBjIDw9IDB4MDA3RSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgISgoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJVbnF1b3RlZCAiICsgYywgcnVsZSwgc3RhcnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwb3M7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmVtb3ZlIGNvbnRleHQuCisgICAgICAgICAqLworICAgICAgICB2b2lkIHJlbW92ZUNvbnRleHQoKSB7CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoYW50ZSA8IDAgPyAwIDogYW50ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0IDwgMCA/IHRleHQubGVuZ3RoKCkgOiBwb3N0KTsKKyAgICAgICAgICAgIGFudGUgPSBwb3N0ID0gLTE7CisgICAgICAgICAgICBhbmNob3JTdGFydCA9IGFuY2hvckVuZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiB0cnVlIGlmIHRoaXMgaGFsZiBsb29rcyBsaWtlIHZhbGlkIG91dHB1dCwgdGhhdCBpcywgZG9lcyBub3QKKyAgICAgICAgICogY29udGFpbiBxdWFudGlmaWVycyBvciBvdGhlciBzcGVjaWFsIGlucHV0LW9ubHkgZWxlbWVudHMuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkT3V0cHV0KFRyYW5zbGl0ZXJhdG9yUGFyc2VyIHBhcnNlcikgeworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRleHQubGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgIGludCBjID0gVVRGMTYuY2hhckF0KHRleHQsIGkpOworICAgICAgICAgICAgICAgIGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgICAgIGlmICghcGFyc2VyLnBhcnNlRGF0YS5pc1JlcGxhY2VyKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGhhbGYgbG9va3MgbGlrZSB2YWxpZCBpbnB1dCwgdGhhdCBpcywgZG9lcyBub3QKKyAgICAgICAgICogY29udGFpbiBmdW5jdGlvbnMgb3Igb3RoZXIgc3BlY2lhbCBvdXRwdXQtb25seSBlbGVtZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWRJbnB1dChUcmFuc2xpdGVyYXRvclBhcnNlciBwYXJzZXIpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTx0ZXh0Lmxlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICBpbnQgYyA9IFVURjE2LmNoYXJBdCh0ZXh0LCBpKTsKKyAgICAgICAgICAgICAgICBpICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcnNlci5wYXJzZURhdGEuaXNNYXRjaGVyKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFBVQkxJQyBtZXRob2RzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3JQYXJzZXIoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGFyc2UgYSBzZXQgb2YgcnVsZXMuICBBZnRlciB0aGUgcGFyc2UgY29tcGxldGVzLCBleGFtaW5lIHRoZSBwdWJsaWMKKyAgICAgKiBkYXRhIG1lbWJlcnMgZm9yIHJlc3VsdHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcGFyc2UoU3RyaW5nIHJ1bGVzLCBpbnQgZGlyZWN0aW9uKSB7CisgICAgICAgIHBhcnNlUnVsZXMobmV3IFJ1bGVBcnJheShuZXcgU3RyaW5nW10geyBydWxlcyB9KSwgZGlyZWN0aW9uKTsKKyAgICB9CisgICAKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIHNldCBvZiBydWxlcy4gIEFmdGVyIHRoZSBwYXJzZSBjb21wbGV0ZXMsIGV4YW1pbmUgdGhlIHB1YmxpYworICAgICAqIGRhdGEgbWVtYmVycyBmb3IgcmVzdWx0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwYXJzZShSZXNvdXJjZVJlYWRlciBydWxlcywgaW50IGRpcmVjdGlvbikgeworICAgICAgICBwYXJzZVJ1bGVzKG5ldyBSdWxlUmVhZGVyKHJ1bGVzKSwgZGlyZWN0aW9uKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQUklWQVRFIG1ldGhvZHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFBhcnNlIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBydWxlcy4gIFRoZSBzdHJpbmdzIGluIHRoZSBhcnJheSBhcmUKKyAgICAgKiB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIsIHdpdGggcnVsZSB0ZXJtaW5hdG9ycworICAgICAqIGluc2VydGVkIGJldHdlZW4gYXJyYXkgZWxlbWVudHMgaWYgbm90IHByZXNlbnQgYWxyZWFkeS4KKyAgICAgKgorICAgICAqIEFueSBwcmV2aW91cyBydWxlcyBhcmUgZGlzY2FyZGVkLiAgVHlwaWNhbGx5IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBleGFjdGx5CisgICAgICogb25jZSwgZHVyaW5nIGNvbnN0cnVjdGlvbi4KKyAgICAgKgorICAgICAqIFRoZSBtZW1iZXIgdGhpcy5kYXRhIHdpbGwgYmUgc2V0IHRvIG51bGwgaWYgdGhlcmUgYXJlIG5vIHJ1bGVzLgorICAgICAqCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBzeW50YXggZXJyb3IgaW4gdGhlCisgICAgICogcnVsZXMKKyAgICAgKi8KKyAgICB2b2lkIHBhcnNlUnVsZXMoUnVsZUJvZHkgcnVsZUFycmF5LCBpbnQgZGlyKSB7CisgICAgICAgIGRhdGEgPSBuZXcgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuRGF0YSgpOworICAgICAgICBkaXJlY3Rpb24gPSBkaXI7CisgICAgICAgIHJ1bGVDb3VudCA9IDA7CisgICAgICAgIGNvbXBvdW5kRmlsdGVyID0gbnVsbDsKKworICAgICAgICAvLyBCeSBkZWZhdWx0LCBydWxlcyB1c2UgcGFydCBvZiB0aGUgcHJpdmF0ZSB1c2UgYXJlYQorICAgICAgICAvLyBFMDAwLi5GOEZGIGZvciB2YXJpYWJsZXMgYW5kIG90aGVyIHN0YW5kLWlucy4gIEN1cnJlbnRseQorICAgICAgICAvLyB0aGUgcmFuZ2UgRjAwMC4uRjhGRiBpcyB0eXBpY2FsbHkgc3VmZmljaWVudC4gIFRoZSAndXNlCisgICAgICAgIC8vIHZhcmlhYmxlIHJhbmdlJyBwcmFnbWEgYWxsb3dzIHJ1bGUgc2V0cyB0byBtb2RpZnkgdGhpcy4KKyAgICAgICAgc2V0VmFyaWFibGVSYW5nZSgweEYwMDAsIDB4RjhGRik7CisKKyAgICAgICAgdmFyaWFibGVzVmVjdG9yID0gbmV3IFZlY3RvcigpOworICAgICAgICBwYXJzZURhdGEgPSBuZXcgUGFyc2VEYXRhKCk7CisKKyAgICAgICAgU3RyaW5nQnVmZmVyIGVycm9ycyA9IG51bGw7CisgICAgICAgIGludCBlcnJvckNvdW50ID0gMDsKKworICAgICAgICBydWxlQXJyYXkucmVzZXQoKTsKKworICAgICAgICBTdHJpbmdCdWZmZXIgaWRCbG9ja1Jlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgaWRTcGxpdFBvaW50ID0gLTE7CisgICAgICAgIC8vIFRoZSBtb2RlIG1hcmtzIHdoZXRoZXIgd2UgYXJlIGluIHRoZSBoZWFkZXIgOjppZCBibG9jaywgdGhlCisgICAgICAgIC8vIHJ1bGUgYmxvY2ssIG9yIHRoZSBmb290ZXIgOjppZCBibG9jay4KKyAgICAgICAgLy8gbW9kZSA9PSAwOiBzdGFydDogcnVsZS0+MSwgOjppZC0+MAorICAgICAgICAvLyBtb2RlID09IDE6IGluIHJ1bGVzOiBydWxlLT4xLCA6OmlkLT4yCisgICAgICAgIC8vIG1vZGUgPT0gMjogaW4gZm9vdGVyIHJ1bGUgYmxvY2s6IHJ1bGUtPkVSUk9SLCA6OmlkLT4yCisgICAgICAgIGludCBtb2RlID0gMDsKKworICAgICAgICAvLyBUaGUgY29tcG91bmQgZmlsdGVyIG9mZnNldCBpcyBhbiBpbmRleCBpbnRvIGlkQmxvY2tSZXN1bHQuCisgICAgICAgIC8vIElmIGl0IGlzIDAsIHRoZW4gdGhlIGNvbXBvdW5kIGZpbHRlciBvY2N1cnJlZCBhdCB0aGUgc3RhcnQsCisgICAgICAgIC8vIGFuZCBpdCBpcyB0aGUgb2Zmc2V0IHRvIHRoZSBfc3RhcnRfIG9mIHRoZSBjb21wb3VuZCBmaWx0ZXIKKyAgICAgICAgLy8gcGF0dGVybi4gIE90aGVyd2lzZSBpdCBpcyB0aGUgb2Zmc2V0IHRvIHRoZSBfbGltaXRfIG9mIHRoZQorICAgICAgICAvLyBjb21wb3VuZCBmaWx0ZXIgcGF0dGVybiB3aXRoaW4gaWRCbG9ja1Jlc3VsdC4KKyAgICAgICAgdGhpcy5jb21wb3VuZEZpbHRlciA9IG51bGw7CisgICAgICAgIGludCBjb21wb3VuZEZpbHRlck9mZnNldCA9IC0xOworCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgOjpJRCBibG9jayBlbnRyaWVzIHdlIGhhdmUgcGFyc2VkCisgICAgICAgIGludCBpZEJsb2NrQ291bnQgPSAwOworCisgICAgbWFpbjoKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgU3RyaW5nIHJ1bGUgPSBydWxlQXJyYXkubmV4dExpbmUoKTsKKyAgICAgICAgICAgIGlmIChydWxlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICAgICAgaW50IGxpbWl0ID0gcnVsZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHdoaWxlIChwb3MgPCBsaW1pdCkgeworICAgICAgICAgICAgICAgIGNoYXIgYyA9IHJ1bGUuY2hhckF0KHBvcysrKTsKKyAgICAgICAgICAgICAgICBpZiAoVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFNraXAgbGluZXMgc3RhcnRpbmcgd2l0aCB0aGUgY29tbWVudCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBSVUxFX0NPTU1FTlRfQ0hBUikgeworICAgICAgICAgICAgICAgICAgICBwb3MgPSBydWxlLmluZGV4T2YoIlxuIiwgcG9zKSArIDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vICJcbiIgZm91bmQ7IHJlc3Qgb2YgcnVsZSBpcyBhIGNvbW1uZXQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gRWl0aGVyIGZhbGwgb3V0IG9yIHJlc3RhcnQgd2l0aCBuZXh0IGxpbmUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gT2Z0ZW4gYSBydWxlIGZpbGUgY29udGFpbnMgbXVsdGlwbGUgZXJyb3JzLiAgSXQncworICAgICAgICAgICAgICAgIC8vIGNvbnZlbmllbnQgdG8gdGhlIHJ1bGUgYXV0aG9yIGlmIHRoZXNlIGFyZSBhbGwgcmVwb3J0ZWQKKyAgICAgICAgICAgICAgICAvLyBhdCBvbmNlLiAgV2Uga2VlcCBwYXJzaW5nIHJ1bGVzIGV2ZW4gYWZ0ZXIgYSBmYWlsdXJlLCB1cAorICAgICAgICAgICAgICAgIC8vIHRvIGEgc3BlY2lmaWVkIGxpbWl0LCBhbmQgcmVwb3J0IGFsbCBlcnJvcnMgYXQgb25jZS4KKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCB0aGUgc3RhcnQgb2YgYSBydWxlIG9yIElELiAgYyBpcyBpdHMgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyLCBhbmQgcG9zIHBvaW50cyBwYXN0IGMuCisgICAgICAgICAgICAgICAgICAgIC0tcG9zOworICAgICAgICAgICAgICAgICAgICAvLyBMb29rIGZvciBhbiBJRCB0b2tlbi4gIE11c3QgaGF2ZSBhdCBsZWFzdCBJRF9UT0tFTl9MRU4gKyAxCisgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJzIGxlZnQuCisgICAgICAgICAgICAgICAgICAgIGlmICgocG9zICsgSURfVE9LRU5fTEVOICsgMSkgPD0gbGltaXQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUucmVnaW9uTWF0Y2hlcyhwb3MsIElEX1RPS0VOLCAwLCBJRF9UT0tFTl9MRU4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gSURfVE9LRU5fTEVOOworICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHJ1bGUuY2hhckF0KHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoYykgJiYgcG9zIDwgbGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gcnVsZS5jaGFyQXQocG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGp1c3QgZW50ZXJlZCB0aGUgZm9vdGVyIDo6SUQgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24gYWRkIGVsZW1lbnRzIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uIGFkZCBlbGVtZW50cyBhdCB0aGUgc3RhcnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRTcGxpdFBvaW50ID0gaWRCbG9ja0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gcCA9IG5ldyBpbnRbXSB7IHBvcyB9OworCisgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvcklEUGFyc2VyLlNpbmdsZUlEIGlkID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xpdGVyYXRvcklEUGFyc2VyLnBhcnNlU2luZ2xlSUQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLCBwLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBbMF0gIT0gcG9zICYmIFV0aWxpdHkucGFyc2VDaGFyKHJ1bGUsIHAsIEVORF9PRl9SVUxFKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgOjpJRCBwYXJzZS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrUmVzdWx0LmFwcGVuZChpZC5jYW5vbklEKS5hcHBlbmQoRU5EX09GX1JVTEUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2tSZXN1bHQuaW5zZXJ0KDAsIGlkLmNhbm9uSUQgKyBFTkRfT0ZfUlVMRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpZEJsb2NrQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgcGFyc2UgYW4gSUQuICBUcnkgdG8gcGFyc2UgYSBnbG9iYWwgZmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gd2l0aFBhcmVucyA9IG5ldyBpbnRbXSB7IC0xIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZVNldCBmID0gVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5wYXJzZUdsb2JhbEZpbHRlcihydWxlLCBwLCBkaXJlY3Rpb24sIHdpdGhQYXJlbnMsIGlkQmxvY2tSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmICE9IG51bGwgJiYgVXRpbGl0eS5wYXJzZUNoYXIocnVsZSwgcCwgRU5EX09GX1JVTEUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZGlyZWN0aW9uID09IFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2l0aFBhcmVuc1swXSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvdW5kRmlsdGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21wb3VuZCBmaWx0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIk11bHRpcGxlIGdsb2JhbCBmaWx0ZXJzIiwgcnVsZSwgcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kRmlsdGVyID0gZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kRmlsdGVyT2Zmc2V0ID0gaWRCbG9ja0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIDo6aWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuIGJlIHBhcnNlZCBhcyBuZWl0aGVyIGFuIElEIG5vciBhIGdsb2JhbCBmaWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIkludmFsaWQgOjpJRCIsIHJ1bGUsIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBwWzBdOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc2VtYmxlc1ByYWdtYShydWxlLCBwb3MsIGxpbWl0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBwcCA9IHBhcnNlUHJhZ21hKHJ1bGUsIHBvcywgbGltaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBwcCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXhFcnJvcigiVW5yZWNvZ25pemVkIHByYWdtYSIsIHJ1bGUsIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBwcHA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSBhIHJ1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHBhcnNlUnVsZShydWxlLCBwb3MsIGxpbWl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrcnVsZUNvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDo6aWQgaW4gaWxsZWdhbCBwb3NpdGlvbiAoYmVjYXVzZSBhIHJ1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvY2N1cnJlZCBhZnRlciB0aGUgOjppZCBmb290ZXIgYmxvY2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIjo6SUQgaW4gaWxsZWdhbCBwb3NpdGlvbiIsIHJ1bGUsIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckNvdW50ID09IDMwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCJcbk1vcmUgdGhhbiAzMCBlcnJvcnM7IGZ1cnRoZXIgbWVzc2FnZXMgc3F1ZWxjaGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBtYWluOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gbmV3IFN0cmluZ0J1ZmZlcihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCJcbiIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytlcnJvckNvdW50OworICAgICAgICAgICAgICAgICAgICBwb3MgPSBydWxlRW5kKHJ1bGUsIHBvcywgbGltaXQpICsgMTsgLy8gKzEgYWR2YW5jZXMgcGFzdCAnOycKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZEJsb2NrID0gaWRCbG9ja1Jlc3VsdC50b1N0cmluZygpOworCisgICAgICAgIGlmIChpZFNwbGl0UG9pbnQgPCAwKSB7CisgICAgICAgICAgICBpZFNwbGl0UG9pbnQgPSBpZEJsb2NrQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlyZWN0aW9uID09IFRyYW5zbGl0ZXJhdG9yLlJFVkVSU0UpIHsKKyAgICAgICAgICAgIGlkU3BsaXRQb2ludCA9IGlkQmxvY2tDb3VudCAtIGlkU3BsaXRQb2ludDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbnZlcnQgdGhlIHNldCB2ZWN0b3IgdG8gYW4gYXJyYXkKKyAgICAgICAgZGF0YS52YXJpYWJsZXMgPSBuZXcgT2JqZWN0W3ZhcmlhYmxlc1ZlY3Rvci5zaXplKCldOworICAgICAgICB2YXJpYWJsZXNWZWN0b3IuY29weUludG8oZGF0YS52YXJpYWJsZXMpOworICAgICAgICB2YXJpYWJsZXNWZWN0b3IgPSBudWxsOworCisgICAgICAgIC8vIERvIG1vcmUgc3ludGF4IGNoZWNraW5nIGFuZCBpbmRleCB0aGUgcnVsZXMKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChjb21wb3VuZEZpbHRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKChkaXJlY3Rpb24gPT0gVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCAmJgorICAgICAgICAgICAgICAgICAgICAgY29tcG91bmRGaWx0ZXJPZmZzZXQgIT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGRpcmVjdGlvbiA9PSBUcmFuc2xpdGVyYXRvci5SRVZFUlNFICYmCisgICAgICAgICAgICAgICAgICAgICBjb21wb3VuZEZpbHRlck9mZnNldCAhPSBpZEJsb2NrQ291bnQpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNvbXBvdW5kIGZpbHRlcnMgbWlzcGxhY2VkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkYXRhLnJ1bGVTZXQuZnJlZXplKCk7CisKKyAgICAgICAgICAgIGlmIChydWxlQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgIGRhdGEgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgaWYgKGVycm9ycyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgZXJyb3JzID0gbmV3IFN0cmluZ0J1ZmZlcihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoIlxuIikuYXBwZW5kKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvcnMgIT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihlcnJvcnMudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNQUlOIFBBUlNFUi4gIFBhcnNlIHRoZSBuZXh0IHJ1bGUgaW4gdGhlIGdpdmVuIHJ1bGUgc3RyaW5nLCBzdGFydGluZworICAgICAqIGF0IHBvcy4gIFJldHVybiB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIHBhcnNlZC4gIERvIG5vdAorICAgICAqIHBhcnNlIGNoYXJhY3RlcnMgYXQgb3IgYWZ0ZXIgbGltaXQuCisgICAgICoKKyAgICAgKiBJbXBvcnRhbnQ6ICBUaGUgY2hhcmFjdGVyIGF0IHBvcyBtdXN0IGJlIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCisgICAgICogdGhhdCBpcyBub3QgdGhlIGNvbW1lbnQgY2hhcmFjdGVyLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgaGFuZGxlcyBxdW90aW5nLCBlc2NhcGluZywgYW5kIHdoaXRlc3BhY2UgcmVtb3ZhbC4gIEl0CisgICAgICogcGFyc2VzIHRoZSBlbmQtb2YtcnVsZSBjaGFyYWN0ZXIuICBJdCByZWNvZ25pemVzIGNvbnRleHQgYW5kIGN1cnNvcgorICAgICAqIGluZGljYXRvcnMuICBPbmNlIGl0IGRvZXMgYSBsZXhpY2FsIGJyZWFrZG93biBvZiB0aGUgcnVsZSBhdCBwb3MsIGl0CisgICAgICogY3JlYXRlcyBhIHJ1bGUgb2JqZWN0IGFuZCBhZGRzIGl0IHRvIG91ciBydWxlIGxpc3QuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGlubmVyIGNsYXNzIFJ1bGVIYWxmLgorICAgICAqLworICAgIHByaXZhdGUgaW50IHBhcnNlUnVsZShTdHJpbmcgcnVsZSwgaW50IHBvcywgaW50IGxpbWl0KSB7CisgICAgICAgIC8vIExvY2F0ZSB0aGUgbGVmdCBzaWRlLCBvcGVyYXRvciwgYW5kIHJpZ2h0IHNpZGUKKyAgICAgICAgaW50IHN0YXJ0ID0gcG9zOworICAgICAgICBjaGFyIG9wZXJhdG9yID0gMDsKKworICAgICAgICAvLyBTZXQgdXAgc2VnbWVudHMgZGF0YQorICAgICAgICBzZWdtZW50U3RhbmRpbnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHNlZ21lbnRPYmplY3RzID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIFJ1bGVIYWxmIGxlZnQgID0gbmV3IFJ1bGVIYWxmKCk7CisgICAgICAgIFJ1bGVIYWxmIHJpZ2h0ID0gbmV3IFJ1bGVIYWxmKCk7CisKKyAgICAgICAgdW5kZWZpbmVkVmFyaWFibGVOYW1lID0gbnVsbDsKKyAgICAgICAgcG9zID0gbGVmdC5wYXJzZShydWxlLCBwb3MsIGxpbWl0LCB0aGlzKTsKKworICAgICAgICBpZiAocG9zID09IGxpbWl0IHx8CisgICAgICAgICAgICBPUEVSQVRPUlMuaW5kZXhPZihvcGVyYXRvciA9IHJ1bGUuY2hhckF0KC0tcG9zKSkgPCAwKSB7CisgICAgICAgICAgICBzeW50YXhFcnJvcigiTm8gb3BlcmF0b3IgcG9zPSIgKyBwb3MsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgfQorICAgICAgICArK3BvczsKKworICAgICAgICAvLyBGb3VuZCBhbiBvcGVyYXRvciBjaGFyLiAgQ2hlY2sgZm9yIGZvcndhcmQtcmV2ZXJzZSBvcGVyYXRvci4KKyAgICAgICAgaWYgKG9wZXJhdG9yID09IFJFVkVSU0VfUlVMRV9PUCAmJgorICAgICAgICAgICAgKHBvcyA8IGxpbWl0ICYmIHJ1bGUuY2hhckF0KHBvcykgPT0gRk9SV0FSRF9SVUxFX09QKSkgeworICAgICAgICAgICAgKytwb3M7CisgICAgICAgICAgICBvcGVyYXRvciA9IEZXRFJFVl9SVUxFX09QOworICAgICAgICB9CisKKyAgICAgICAgcG9zID0gcmlnaHQucGFyc2UocnVsZSwgcG9zLCBsaW1pdCwgdGhpcyk7CisKKyAgICAgICAgaWYgKHBvcyA8IGxpbWl0KSB7CisgICAgICAgICAgICBpZiAocnVsZS5jaGFyQXQoLS1wb3MpID09IEVORF9PRl9SVUxFKSB7CisgICAgICAgICAgICAgICAgKytwb3M7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFJ1bGVIYWxmIHBhcnNlciBtdXN0IGhhdmUgdGVybWluYXRlZCBhdCBhbiBvcGVyYXRvcgorICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJVbnF1b3RlZCBvcGVyYXRvciIsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvcGVyYXRvciA9PSBWQVJJQUJMRV9ERUZfT1ApIHsKKyAgICAgICAgICAgIC8vIExIUyBpcyB0aGUgbmFtZS4gIFJIUyBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIsIGVpdGhlciBhIGxpdGVyYWwKKyAgICAgICAgICAgIC8vIG9yIGEgc2V0IChhbHJlYWR5IHBhcnNlZCkuICBJZiBSSFMgaXMgbG9uZ2VyIHRoYW4gb25lCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXIsIGl0IGlzIGVpdGhlciBhIG11bHRpLWNoYXJhY3RlciBzdHJpbmcsIG9yIG11bHRpcGxlCisgICAgICAgICAgICAvLyBzZXRzLCBvciBhIG1peHR1cmUgb2YgY2hhcnMgYW5kIHNldHMgLS0gc3ludGF4IGVycm9yLgorCisgICAgICAgICAgICAvLyBXZSBleHBlY3QgdG8gc2VlIGEgc2luZ2xlIHVuZGVmaW5lZCB2YXJpYWJsZSAodGhlIG9uZSBiZWluZworICAgICAgICAgICAgLy8gZGVmaW5lZCkuCisgICAgICAgICAgICBpZiAodW5kZWZpbmVkVmFyaWFibGVOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzeW50YXhFcnJvcigiTWlzc2luZyAnJCcgb3IgZHVwbGljYXRlIGRlZmluaXRpb24iLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC50ZXh0Lmxlbmd0aCgpICE9IDEgfHwgbGVmdC50ZXh0LmNoYXJBdCgwKSAhPSB2YXJpYWJsZUxpbWl0KSB7CisgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIk1hbGZvcm1lZCBMSFMiLCBydWxlLCBzdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC5hbmNob3JTdGFydCB8fCBsZWZ0LmFuY2hvckVuZCB8fAorICAgICAgICAgICAgICAgIHJpZ2h0LmFuY2hvclN0YXJ0IHx8IHJpZ2h0LmFuY2hvckVuZCkgeworICAgICAgICAgICAgICAgIHN5bnRheEVycm9yKCJNYWxmb3JtZWQgdmFyaWFibGUgZGVmIiwgcnVsZSwgc3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gV2UgYWxsb3cgYW55dGhpbmcgb24gdGhlIHJpZ2h0LCBpbmNsdWRpbmcgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAgICAgaW50IG4gPSByaWdodC50ZXh0Lmxlbmd0aCgpOworICAgICAgICAgICAgY2hhcltdIHZhbHVlID0gbmV3IGNoYXJbbl07CisgICAgICAgICAgICByaWdodC50ZXh0LmdldENoYXJzKDAsIG4sIHZhbHVlLCAwKTsKKyAgICAgICAgICAgIGRhdGEudmFyaWFibGVOYW1lcy5wdXQodW5kZWZpbmVkVmFyaWFibGVOYW1lLCB2YWx1ZSk7CisKKyAgICAgICAgICAgICsrdmFyaWFibGVMaW1pdDsKKyAgICAgICAgICAgIHJldHVybiBwb3M7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHZhcmlhYmxlIGRlZmluaXRpb24gcnVsZSwgd2Ugc2hvdWxkbid0IGhhdmUKKyAgICAgICAgLy8gYW55IHVuZGVmaW5lZCB2YXJpYWJsZSBuYW1lcy4KKyAgICAgICAgaWYgKHVuZGVmaW5lZFZhcmlhYmxlTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICBzeW50YXhFcnJvcigiVW5kZWZpbmVkIHZhcmlhYmxlICQiICsgdW5kZWZpbmVkVmFyaWFibGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgcnVsZSwgc3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVmVyaWZ5IHNlZ21lbnRzCisgICAgICAgIGlmIChzZWdtZW50U3RhbmRpbnMubGVuZ3RoKCkgPiBzZWdtZW50T2JqZWN0cy5zaXplKCkpIHsKKyAgICAgICAgICAgIHN5bnRheEVycm9yKCJVbmRlZmluZWQgc2VnbWVudCByZWZlcmVuY2UiLCBydWxlLCBzdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHNlZ21lbnRTdGFuZGlucy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudFN0YW5kaW5zLmNoYXJBdChpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIkludGVybmFsIGVycm9yIiwgcnVsZSwgc3RhcnQpOyAvLyB3aWxsIG5ldmVyIGhhcHBlbgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzZWdtZW50T2JqZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHNlZ21lbnRPYmplY3RzLmVsZW1lbnRBdChpKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3ludGF4RXJyb3IoIkludGVybmFsIGVycm9yIiwgcnVsZSwgc3RhcnQpOyAvLyB3aWxsIG5ldmVyIGhhcHBlbgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlIGRpcmVjdGlvbiB3ZSB3YW50IGRvZXNuJ3QgbWF0Y2ggdGhlIHJ1bGUKKyAgICAgICAgLy8gZGlyZWN0aW9uLCBkbyBub3RoaW5nLgorICAgICAgICBpZiAob3BlcmF0b3IgIT0gRldEUkVWX1JVTEVfT1AgJiYKKyAgICAgICAgICAgICgoZGlyZWN0aW9uID09IFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQpICE9IChvcGVyYXRvciA9PSBGT1JXQVJEX1JVTEVfT1ApKSkgeworICAgICAgICAgICAgcmV0dXJuIHBvczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcnVsZSBpbnRvIGEgZm9yd2FyZCBydWxlIGJ5IHN3YXBwaW5nIHRoZQorICAgICAgICAvLyBzaWRlcyBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVHJhbnNsaXRlcmF0b3IuUkVWRVJTRSkgeworICAgICAgICAgICAgUnVsZUhhbGYgdGVtcCA9IGxlZnQ7CisgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7CisgICAgICAgICAgICByaWdodCA9IHRlbXA7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1vdmUgbm9uLWFwcGxpY2FibGUgZWxlbWVudHMgaW4gZm9yd2FyZC1yZXZlcnNlCisgICAgICAgIC8vIHJ1bGVzLiAgQmlkaXJlY3Rpb25hbCBydWxlcyBpZ25vcmUgZWxlbWVudHMgdGhhdCBkbyBub3QKKyAgICAgICAgLy8gYXBwbHkuCisgICAgICAgIGlmIChvcGVyYXRvciA9PSBGV0RSRVZfUlVMRV9PUCkgeworICAgICAgICAgICAgcmlnaHQucmVtb3ZlQ29udGV4dCgpOworICAgICAgICAgICAgbGVmdC5jdXJzb3IgPSAtMTsKKyAgICAgICAgICAgIGxlZnQuY3Vyc29yT2Zmc2V0ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vcm1hbGl6ZSBjb250ZXh0CisgICAgICAgIGlmIChsZWZ0LmFudGUgPCAwKSB7CisgICAgICAgICAgICBsZWZ0LmFudGUgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChsZWZ0LnBvc3QgPCAwKSB7CisgICAgICAgICAgICBsZWZ0LnBvc3QgPSBsZWZ0LnRleHQubGVuZ3RoKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb250ZXh0IGlzIG9ubHkgYWxsb3dlZCBvbiB0aGUgaW5wdXQgc2lkZS4gIEN1cnNvcnMgYXJlIG9ubHkKKyAgICAgICAgLy8gYWxsb3dlZCBvbiB0aGUgb3V0cHV0IHNpZGUuICBTZWdtZW50IGRlbGltaXRlcnMgY2FuIG9ubHkgYXBwZWFyCisgICAgICAgIC8vIG9uIHRoZSBsZWZ0LCBhbmQgcmVmZXJlbmNlcyBvbiB0aGUgcmlnaHQuICBDdXJzb3Igb2Zmc2V0CisgICAgICAgIC8vIGNhbm5vdCBhcHBlYXIgd2l0aG91dCBhbiBleHBsaWNpdCBjdXJzb3IuICBDdXJzb3Igb2Zmc2V0CisgICAgICAgIC8vIGNhbm5vdCBwbGFjZSB0aGUgY3Vyc29yIG91dHNpZGUgdGhlIGxpbWl0cyBvZiB0aGUgY29udGV4dC4KKyAgICAgICAgLy8gQW5jaG9ycyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBpbnB1dCBzaWRlLgorICAgICAgICBpZiAocmlnaHQuYW50ZSA+PSAwIHx8IHJpZ2h0LnBvc3QgPj0gMCB8fCBsZWZ0LmN1cnNvciA+PSAwIHx8CisgICAgICAgICAgICAocmlnaHQuY3Vyc29yT2Zmc2V0ICE9IDAgJiYgcmlnaHQuY3Vyc29yIDwgMCkgfHwKKyAgICAgICAgICAgIC8vIC0gVGhlIGZvbGxvd2luZyB0d28gY2hlY2tzIHdlcmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgIC8vIC0gdGhlIGN1cnNvciBvZmZzZXQgc3RheWVkIHdpdGhpbiB0aGUgYW50ZS0gb3IgcG9zdGNvbnRleHQuCisgICAgICAgICAgICAvLyAtIEhvd2V2ZXIsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHF1YW50aWZpZXJzLCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAvLyAtIGFsbG93IGFyYml0cmFyeSBjdXJzb3Igb2Zmc2V0cyBhbmQgZG8gcnVudGltZSBjaGVja2luZy4KKyAgICAgICAgICAgIC8vKHJpZ2h0LmN1cnNvck9mZnNldCA+IChsZWZ0LnRleHQubGVuZ3RoKCkgLSBsZWZ0LnBvc3QpKSB8fAorICAgICAgICAgICAgLy8oLXJpZ2h0LmN1cnNvck9mZnNldCA+IGxlZnQuYW50ZSkgfHwKKyAgICAgICAgICAgIHJpZ2h0LmFuY2hvclN0YXJ0IHx8IHJpZ2h0LmFuY2hvckVuZCB8fAorICAgICAgICAgICAgIWxlZnQuaXNWYWxpZElucHV0KHRoaXMpIHx8ICFyaWdodC5pc1ZhbGlkT3V0cHV0KHRoaXMpIHx8CisgICAgICAgICAgICBsZWZ0LmFudGUgPiBsZWZ0LnBvc3QpIHsKKyAgICAgICAgICAgIHN5bnRheEVycm9yKCJNYWxmb3JtZWQgcnVsZSIsIHJ1bGUsIHN0YXJ0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZsYXR0ZW4gc2VnbWVudCBvYmplY3RzIHZlY3RvciB0byBhbiBhcnJheQorICAgICAgICBVbmljb2RlTWF0Y2hlcltdIHNlZ21lbnRzQXJyYXkgPSBudWxsOworICAgICAgICBpZiAoc2VnbWVudE9iamVjdHMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgc2VnbWVudHNBcnJheSA9IG5ldyBVbmljb2RlTWF0Y2hlcltzZWdtZW50T2JqZWN0cy5zaXplKCldOworICAgICAgICAgICAgc2VnbWVudE9iamVjdHMudG9BcnJheShzZWdtZW50c0FycmF5KTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGEucnVsZVNldC5hZGRSdWxlKG5ldyBUcmFuc2xpdGVyYXRpb25SdWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQudGV4dCwgbGVmdC5hbnRlLCBsZWZ0LnBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQudGV4dCwgcmlnaHQuY3Vyc29yLCByaWdodC5jdXJzb3JPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudHNBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmFuY2hvclN0YXJ0LCBsZWZ0LmFuY2hvckVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKSk7CisKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHZhcmlhYmxlIHJhbmdlIHRvIFtzdGFydCwgZW5kXSAoaW5jbHVzaXZlKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0VmFyaWFibGVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKKyAgICAgICAgaWYgKHN0YXJ0ID4gZW5kIHx8IHN0YXJ0IDwgMCB8fCBlbmQgPiAweEZGRkYpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdmFyaWFibGUgcmFuZ2UgIiArIHN0YXJ0ICsgIiwgIiArIGVuZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRhdGEudmFyaWFibGVzQmFzZSA9IHZhcmlhYmxlTmV4dCA9IChjaGFyKSBzdGFydDsgLy8gZmlyc3QgcHJpdmF0ZSB1c2UKKyAgICAgICAgdmFyaWFibGVMaW1pdCA9IChjaGFyKSAoZW5kICsgMSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBOT1Qgd2l0aGluIHRoZSB2YXJpYWJsZSByYW5nZS4KKyAgICAgKiBJZiBpdCBpcywgc2lnbmFsIGFuIGVycm9yLiAgVGhpcyBpcyBuZWNjZXNhcnkgdG8gZW5zdXJlIHRoYXQgdGhlCisgICAgICogdmFyaWFibGUgcmFuZ2UgZG9lcyBub3Qgb3ZlcmxhcCBjaGFyYWN0ZXJzIHVzZWQgaW4gYSBydWxlLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBjaGVja1ZhcmlhYmxlUmFuZ2UoaW50IGNoLCBTdHJpbmcgcnVsZSwgaW50IHN0YXJ0KSB7CisgICAgICAgIGlmIChjaCA+PSBkYXRhLnZhcmlhYmxlc0Jhc2UgJiYgY2ggPCB2YXJpYWJsZUxpbWl0KSB7CisgICAgICAgICAgICBzeW50YXhFcnJvcigiVmFyaWFibGUgcmFuZ2UgY2hhcmFjdGVyIGluIHJ1bGUiLCBydWxlLCBzdGFydCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG1heGltdW0gYmFja3VwIHRvICdiYWNrdXAnLCBpbiByZXNwb25zZSB0byBhIHByYWdtYQorICAgICAqIHN0YXRlbWVudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcHJhZ21hTWF4aW11bUJhY2t1cChpbnQgYmFja3VwKSB7CisgICAgICAgIC8vVE9ETyBGaW5pc2gKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidXNlIG1heGltdW0gYmFja3VwIHByYWdtYSBub3QgaW1wbGVtZW50ZWQgeWV0Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQmVnaW4gbm9ybWFsaXppbmcgYWxsIHJ1bGVzIHVzaW5nIHRoZSBnaXZlbiBtb2RlLCBpbiByZXNwb25zZQorICAgICAqIHRvIGEgcHJhZ21hIHN0YXRlbWVudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcHJhZ21hTm9ybWFsaXplUnVsZXMoTm9ybWFsaXplci5Nb2RlIG1vZGUpIHsKKyAgICAgICAgLy9UT0RPIEZpbmlzaAorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ1c2Ugbm9ybWFsaXplIHJ1bGVzIHByYWdtYSBub3QgaW1wbGVtZW50ZWQgeWV0Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHJ1bGUgbG9va3MgbGlrZSBhIHByYWdtYS4KKyAgICAgKiBAcGFyYW0gcG9zIG9mZnNldCB0byB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCisgICAgICogb2YgdGhlIHJ1bGUuCisgICAgICogQHBhcmFtIGxpbWl0IHBvaW50ZXIgcGFzdCB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHJ1bGUuCisgICAgICovCisgICAgc3RhdGljIGJvb2xlYW4gcmVzZW1ibGVzUHJhZ21hKFN0cmluZyBydWxlLCBpbnQgcG9zLCBpbnQgbGltaXQpIHsKKyAgICAgICAgLy8gTXVzdCBzdGFydCB3aXRoIC91c2Vccy9pCisgICAgICAgIHJldHVybiBVdGlsaXR5LnBhcnNlUGF0dGVybihydWxlLCBwb3MsIGxpbWl0LCAidXNlICIsIG51bGwpID49IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGFyc2UgYSBwcmFnbWEuICBUaGlzIG1ldGhvZCBhc3N1bWVzIHJlc2VtYmxlc1ByYWdtYSgpIGhhcworICAgICAqIGFscmVhZHkgcmV0dXJuZWQgdHJ1ZS4KKyAgICAgKiBAcGFyYW0gcG9zIG9mZnNldCB0byB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCisgICAgICogb2YgdGhlIHJ1bGUuCisgICAgICogQHBhcmFtIGxpbWl0IHBvaW50ZXIgcGFzdCB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHJ1bGUuCisgICAgICogQHJldHVybiB0aGUgcG9zaXRpb24gaW5kZXggYWZ0ZXIgdGhlIGZpbmFsICc7JyBvZiB0aGUgcHJhZ21hLAorICAgICAqIG9yIC0xIG9uIGZhaWx1cmUuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcGFyc2VQcmFnbWEoU3RyaW5nIHJ1bGUsIGludCBwb3MsIGludCBsaW1pdCkgeworICAgICAgICBpbnRbXSBhcnJheSA9IG5ldyBpbnRbMl07CisKKyAgICAgICAgLy8gcmVzZW1ibGVzUHJhZ21hKCkgaGFzIGFscmVhZHkgcmV0dXJuZWQgdHJ1ZSwgc28gd2UKKyAgICAgICAgLy8ga25vdyB0aGF0IHBvcyBwb2ludHMgdG8gL3VzZVxzL2k7IHdlIGNhbiBza2lwIDQgY2hhcmFjdGVycworICAgICAgICAvLyBpbW1lZGlhdGVseQorICAgICAgICBwb3MgKz0gNDsKKyAgICAgICAgCisgICAgICAgIC8vIEhlcmUgYXJlIHRoZSBwcmFnbWFzIHdlIHJlY29nbml6ZToKKyAgICAgICAgLy8gdXNlIHZhcmlhYmxlIHJhbmdlIDB4RTAwMCAweEVGRkY7CisgICAgICAgIC8vIHVzZSBtYXhpbXVtIGJhY2t1cCAxNjsKKyAgICAgICAgLy8gdXNlIG5mZCBydWxlczsKKyAgICAgICAgaW50IHAgPSBVdGlsaXR5LnBhcnNlUGF0dGVybihydWxlLCBwb3MsIGxpbWl0LCAifnZhcmlhYmxlIHJhbmdlICMgI347IiwgYXJyYXkpOworICAgICAgICBpZiAocCA+PSAwKSB7CisgICAgICAgICAgICBzZXRWYXJpYWJsZVJhbmdlKGFycmF5WzBdLCBhcnJheVsxXSk7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorCisgICAgICAgIHAgPSBVdGlsaXR5LnBhcnNlUGF0dGVybihydWxlLCBwb3MsIGxpbWl0LCAifm1heGltdW0gYmFja3VwICN+OyIsIGFycmF5KTsKKyAgICAgICAgaWYgKHAgPj0gMCkgeworICAgICAgICAgICAgcHJhZ21hTWF4aW11bUJhY2t1cChhcnJheVswXSk7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorCisgICAgICAgIHAgPSBVdGlsaXR5LnBhcnNlUGF0dGVybihydWxlLCBwb3MsIGxpbWl0LCAifm5mZCBydWxlc347IiwgbnVsbCk7CisgICAgICAgIGlmIChwID49IDApIHsKKyAgICAgICAgICAgIHByYWdtYU5vcm1hbGl6ZVJ1bGVzKE5vcm1hbGl6ZXIuTkZEKTsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisKKyAgICAgICAgcCA9IFV0aWxpdHkucGFyc2VQYXR0ZXJuKHJ1bGUsIHBvcywgbGltaXQsICJ+bmZjIHJ1bGVzfjsiLCBudWxsKTsKKyAgICAgICAgaWYgKHAgPj0gMCkgeworICAgICAgICAgICAgcHJhZ21hTm9ybWFsaXplUnVsZXMoTm9ybWFsaXplci5ORkMpOworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKworICAgICAgICAvLyBTeW50YXggZXJyb3I6IHVuYWJsZSB0byBwYXJzZSBwcmFnbWEKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRocm93IGFuIGV4Y2VwdGlvbiBpbmRpY2F0aW5nIGEgc3ludGF4IGVycm9yLiAgU2VhcmNoIHRoZSBydWxlIHN0cmluZworICAgICAqIGZvciB0aGUgcHJvYmFibGUgZW5kIG9mIHRoZSBydWxlLiAgT2YgY291cnNlLCBpZiB0aGUgZXJyb3IgaXMgdGhhdAorICAgICAqIHRoZSBlbmQgb2YgcnVsZSBtYXJrZXIgaXMgbWlzc2luZywgdGhlbiB0aGUgcnVsZSBlbmQgd2lsbCBub3QgYmUgZm91bmQuCisgICAgICogSW4gYW55IGNhc2UgdGhlIHJ1bGUgc3RhcnQgd2lsbCBiZSBjb3JyZWN0bHkgcmVwb3J0ZWQuCisgICAgICogQHBhcmFtIG1zZyBlcnJvciBkZXNjcmlwdGlvbgorICAgICAqIEBwYXJhbSBydWxlIHBhdHRlcm4gc3RyaW5nCisgICAgICogQHBhcmFtIHN0YXJ0IHBvc2l0aW9uIG9mIGZpcnN0IGNoYXJhY3RlciBvZiBjdXJyZW50IHJ1bGUKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgdm9pZCBzeW50YXhFcnJvcihTdHJpbmcgbXNnLCBTdHJpbmcgcnVsZSwgaW50IHN0YXJ0KSB7CisgICAgICAgIGludCBlbmQgPSBydWxlRW5kKHJ1bGUsIHN0YXJ0LCBydWxlLmxlbmd0aCgpKTsKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihtc2cgKyAiIGluIFwiIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGl0eS5lc2NhcGUocnVsZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpICsgJyInKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgaW50IHJ1bGVFbmQoU3RyaW5nIHJ1bGUsIGludCBzdGFydCwgaW50IGxpbWl0KSB7CisgICAgICAgIGludCBlbmQgPSBVdGlsaXR5LnF1b3RlZEluZGV4T2YocnVsZSwgc3RhcnQsIGxpbWl0LCAiOyIpOworICAgICAgICBpZiAoZW5kIDwgMCkgeworICAgICAgICAgICAgZW5kID0gbGltaXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIFVuaWNvZGVTZXQgb3V0LCBzdG9yZSBpdCwgYW5kIHJldHVybiB0aGUgc3RhbmQtaW4gY2hhcmFjdGVyCisgICAgICogdXNlZCB0byByZXByZXNlbnQgaXQuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBjaGFyIHBhcnNlU2V0KFN0cmluZyBydWxlLCBQYXJzZVBvc2l0aW9uIHBvcykgeworICAgICAgICBVbmljb2RlU2V0IHNldCA9IG5ldyBVbmljb2RlU2V0KHJ1bGUsIHBvcywgcGFyc2VEYXRhKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlTmV4dCA+PSB2YXJpYWJsZUxpbWl0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUHJpdmF0ZSB1c2UgdmFyaWFibGVzIGV4aGF1c3RlZCIpOworICAgICAgICB9CisgICAgICAgIHNldC5jb21wYWN0KCk7CisgICAgICAgIHJldHVybiBnZW5lcmF0ZVN0YW5kSW5Gb3Ioc2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZSBhbmQgcmV0dXJuIGEgc3RhbmQtaW4gZm9yIGEgbmV3IFVuaWNvZGVNYXRjaGVyIG9yIFVuaWNvZGVSZXBsYWNlci4KKyAgICAgKiBTdG9yZSB0aGUgb2JqZWN0LgorICAgICAqLworICAgIGNoYXIgZ2VuZXJhdGVTdGFuZEluRm9yKE9iamVjdCBvYmopIHsKKyAgICAgICAgLy8gYXNzZXJ0KG9iaiAhPSBudWxsKTsKKworICAgICAgICAvLyBMb29rIHVwIHByZXZpb3VzIHN0YW5kLWluLCBpZiBhbnkuICBUaGlzIGlzIGEgc2hvcnQgbGlzdAorICAgICAgICAvLyAodHlwaWNhbCBuIGlzIDAsIDEsIG9yIDIpOyBsaW5lYXIgc2VhcmNoIGlzIG9wdGltYWwuCisgICAgICAgIGZvciAoaW50IGk9MDsgaTx2YXJpYWJsZXNWZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZXNWZWN0b3IuZWxlbWVudEF0KGkpID09IG9iaikgeyAvLyBbc2ljXSBwb2ludGVyIGNvbXBhcmlzb24KKyAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXIpIChkYXRhLnZhcmlhYmxlc0Jhc2UgKyBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YXJpYWJsZU5leHQgPj0gdmFyaWFibGVMaW1pdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlZhcmlhYmxlIHJhbmdlIGV4aGF1c3RlZCIpOworICAgICAgICB9CisgICAgICAgIHZhcmlhYmxlc1ZlY3Rvci5hZGRFbGVtZW50KG9iaik7CisgICAgICAgIHJldHVybiB2YXJpYWJsZU5leHQrKzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHN0YW5kaW4gZm9yIHNlZ21lbnQgc2VnICgxLWJhc2VkKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBnZXRTZWdtZW50U3RhbmRpbihpbnQgc2VnKSB7CisgICAgICAgIGlmIChzZWdtZW50U3RhbmRpbnMubGVuZ3RoKCkgPCBzZWcpIHsKKyAgICAgICAgICAgIHNlZ21lbnRTdGFuZGlucy5zZXRMZW5ndGgoc2VnKTsKKyAgICAgICAgfQorICAgICAgICBjaGFyIGMgPSBzZWdtZW50U3RhbmRpbnMuY2hhckF0KHNlZy0xKTsKKyAgICAgICAgaWYgKGMgPT0gMCkgeworICAgICAgICAgICAgaWYgKHZhcmlhYmxlTmV4dCA+PSB2YXJpYWJsZUxpbWl0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlZhcmlhYmxlIHJhbmdlIGV4aGF1c3RlZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYyA9IHZhcmlhYmxlTmV4dCsrOworICAgICAgICAgICAgLy8gU2V0IGEgcGxhY2Vob2xkZXIgaW4gdGhlIG1hc3RlciB2YXJpYWJsZXMgdmVjdG9yIHRoYXQgd2lsbCBiZQorICAgICAgICAgICAgLy8gZmlsbGVkIGluIGxhdGVyIGJ5IHNldFNlZ21lbnRPYmplY3QoKS4gIFdlIGtub3cgdGhhdCB3ZSB3aWxsIGdldAorICAgICAgICAgICAgLy8gY2FsbGVkIGZpcnN0IGJlY2F1c2Ugc2V0U2VnbWVudE9iamVjdCgpIHdpbGwgY2FsbCB1cy4KKyAgICAgICAgICAgIHZhcmlhYmxlc1ZlY3Rvci5hZGRFbGVtZW50KG51bGwpOworICAgICAgICAgICAgc2VnbWVudFN0YW5kaW5zLnNldENoYXJBdChzZWctMSwgYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgb2JqZWN0IGZvciBzZWdtZW50IHNlZyAoMS1iYXNlZCkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2VnbWVudE9iamVjdChpbnQgc2VnLCBTdHJpbmdNYXRjaGVyIG9iaikgeworICAgICAgICAvLyBTaW5jZSB3ZSBjYWxsIHBhcnNlU2VjdGlvbigpIHJlY3Vyc2l2ZWx5LCBuZXN0ZWQKKyAgICAgICAgLy8gc2VnbWVudHMgd2lsbCByZXN1bHQgaW4gc2VnbWVudCBpKzEgZ2V0dGluZyBwYXJzZWQKKyAgICAgICAgLy8gYW5kIHN0b3JlZCBiZWZvcmUgc2VnbWVudCBpOyBiZSBjYXJlZnVsIHdpdGggdGhlCisgICAgICAgIC8vIHZlY3RvciBoYW5kbGluZyBoZXJlLgorICAgICAgICBpZiAoc2VnbWVudE9iamVjdHMuc2l6ZSgpIDwgc2VnKSB7CisgICAgICAgICAgICBzZWdtZW50T2JqZWN0cy5zZXRTaXplKHNlZyk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGluZGV4ID0gZ2V0U2VnbWVudFN0YW5kaW4oc2VnKSAtIGRhdGEudmFyaWFibGVzQmFzZTsKKyAgICAgICAgaWYgKHNlZ21lbnRPYmplY3RzLmVsZW1lbnRBdChzZWctMSkgIT0gbnVsbCB8fAorICAgICAgICAgICAgdmFyaWFibGVzVmVjdG9yLmVsZW1lbnRBdChpbmRleCkgIT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAgICB9CisgICAgICAgIHNlZ21lbnRPYmplY3RzLnNldEVsZW1lbnRBdChvYmosIHNlZy0xKTsKKyAgICAgICAgdmFyaWFibGVzVmVjdG9yLnNldEVsZW1lbnRBdChvYmosIGluZGV4KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHN0YW5kLWluIGZvciB0aGUgZG90IHNldC4gIEl0IGlzIGFsbG9jYXRlZCB0aGUgZmlyc3QKKyAgICAgKiB0aW1lIGFuZCByZXVzZWQgdGhlcmVhZnRlci4KKyAgICAgKi8KKyAgICBjaGFyIGdldERvdFN0YW5kSW4oKSB7CisgICAgICAgIGlmIChkb3RTdGFuZEluID09IC0xKSB7CisgICAgICAgICAgICBkb3RTdGFuZEluID0gZ2VuZXJhdGVTdGFuZEluRm9yKG5ldyBVbmljb2RlU2V0KERPVF9TRVQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGNoYXIpIGRvdFN0YW5kSW47CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwZW5kIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gdmFyaWFibGUgbmFtZSB0byB0aGUgZ2l2ZW4KKyAgICAgKiBTdHJpbmdCdWZmZXIuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIG5hbWUgaXMgdW5rbm93bi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgYXBwZW5kVmFyaWFibGVEZWYoU3RyaW5nIG5hbWUsIFN0cmluZ0J1ZmZlciBidWYpIHsKKyAgICAgICAgY2hhcltdIGNoID0gKGNoYXJbXSkgZGF0YS52YXJpYWJsZU5hbWVzLmdldChuYW1lKTsKKyAgICAgICAgaWYgKGNoID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFdlIGFsbG93IG9uZSB1bmRlZmluZWQgdmFyaWFibGUgc28gdGhhdCB2YXJpYWJsZSBkZWZpbml0aW9uCisgICAgICAgICAgICAvLyBzdGF0ZW1lbnRzIHdvcmsuICBGb3IgdGhlIGZpcnN0IHVuZGVmaW5lZCB2YXJpYWJsZSB3ZSByZXR1cm4KKyAgICAgICAgICAgIC8vIHRoZSBzcGVjaWFsIHBsYWNlaG9sZGVyIHZhcmlhYmxlTGltaXQtMSwgYW5kIHNhdmUgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAvLyBuYW1lLgorICAgICAgICAgICAgaWYgKHVuZGVmaW5lZFZhcmlhYmxlTmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdW5kZWZpbmVkVmFyaWFibGVOYW1lID0gbmFtZTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVOZXh0ID49IHZhcmlhYmxlTGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlByaXZhdGUgdXNlIHZhcmlhYmxlcyBleGhhdXN0ZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgLS12YXJpYWJsZUxpbWl0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5kZWZpbmVkIHZhcmlhYmxlICQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmLmFwcGVuZChjaCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRvclJlZ2lzdHJ5LmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9UcmFuc2xpdGVyYXRvclJlZ2lzdHJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzliODdkZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zbGl0ZXJhdG9yUmVnaXN0cnkuamF2YQpAQCAtMCwwICsxLDg5MyBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBDb3B5cmlnaHQgKGMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDA4LzE5LzIwMDEgIGFsaXUgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuTG9jYWxlVXRpbGl0eTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLmRhdGEuUmVzb3VyY2VSZWFkZXI7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VU2NyaXB0OworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ2FzZUluc2Vuc2l0aXZlU3RyaW5nOworCitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKKworY2xhc3MgVHJhbnNsaXRlcmF0b3JSZWdpc3RyeSB7CisKKyAgICAvLyBjaGFyIGNvbnN0YW50cworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgTE9DQUxFX1NFUCAgPSAnXyc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBJRF9TRVAgICAgICA9ICctJzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFZBUklBTlRfU0VQID0gJy8nOworCisgICAgLy8gU3RyaW5nIGNvbnN0YW50cworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT19WQVJJQU5UID0gIiI7IC8vIGVtcHR5IHN0cmluZworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTlkgPSAiQW55IjsKKworICAgIC8qKgorICAgICAqIFJlc291cmNlIGJ1bmRsZSBrZXkgZm9yIHRoZSBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvciBydWxlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSQl9SVUxFID0gIlJ1bGUiOworCisgICAgLyoqCisgICAgICogUmVzb3VyY2UgYnVuZGxlIGNvbnRhaW5pbmcgbG9jYWxlLXNwZWNpZmljIHRyYW5zbGl0ZXJhdG9yIGRhdGEuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJCX0xPQ0FMRV9FTEVNRU5UUyA9CisgICAgICAgICJjb20uaWJtLmljdS5pbXBsLmRhdGEuTG9jYWxlRWxlbWVudHMiOworCisgICAgLyoqCisgICAgICogTG9jYWxlIGluZGljYXRpbmcgdGhlIHJvb3QuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxlIFJPT1RfTE9DQUxFID0gbmV3IExvY2FsZSgiIiwgIiIsICIiKTsKKworICAgIC8qKgorICAgICAqIER5bmFtaWMgcmVnaXN0cnkgbWFwcGluZyBmdWxsIElEcyB0byBFbnRyeSBvYmplY3RzLiAgVGhpcworICAgICAqIGNvbnRhaW5zIGJvdGggcHVibGljIGFuZCBpbnRlcm5hbCBlbnRpdGllcy4gIFRoZSB2aXNpYmlsaXR5IGlzCisgICAgICogY29udHJvbGxlZCBieSB3aGV0aGVyIGFuIGVudHJ5IGlzIGxpc3RlZCBpbiBhdmFpbGFibGVJRHMgYW5kCisgICAgICogc3BlY0RBRyBvciBub3QuCisgICAgICoKKyAgICAgKiBLZXlzIGFyZSBDYXNlSW5zZW5zaXRpdmVTdHJpbmcgb2JqZWN0cy4KKyAgICAgKiBWYWx1ZXMgYXJlIG9iamVjdHMgb2YgY2xhc3MgQ2xhc3MgKHN1YmNsYXNzIG9mIFRyYW5zbGl0ZXJhdG9yKSwKKyAgICAgKiBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvci5EYXRhLCBUcmFuc2xpdGVyYXRvci5GYWN0b3J5LCBvciBvbmUKKyAgICAgKiBvZiB0aGUgZW50cnkgY2xhc3NlcyBkZWZpbmVkIGhlcmUgKEFsaWFzRW50cnkgb3IgUmVzb3VyY2VFbnRyeSkuCisgICAgICovCisgICAgcHJpdmF0ZSBIYXNodGFibGUgcmVnaXN0cnk7CisKKyAgICAvKioKKyAgICAgKiBEQUcgb2YgdmlzaWJsZSBJRHMgYnkgc3BlYy4gIEhhc2h0YWJsZTogc291cmNlID0+IChIYXNodGFibGU6CisgICAgICogdGFyZ2V0ID0+IChVVmVjdG9yOiB2YXJpYW50KSkgVGhlIFVWZWN0b3Igb2YgdmFyaWFudHMgaXMgbmV2ZXIKKyAgICAgKiBlbXB0eS4gIEZvciBhIHNvdXJjZS10YXJnZXQgd2l0aCBubyB2YXJpYW50LCB0aGUgc3BlY2lhbAorICAgICAqIHZhcmlhbnQgTk9fVkFSSUFOVCAodGhlIGVtcHR5IHN0cmluZykgaXMgc3RvcmVkIGluIHNsb3QgemVybyBvZgorICAgICAqIHRoZSBVVmVjdG9yLgorICAgICAqCisgICAgICogS2V5cyBhcmUgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nIG9iamVjdHMuCisgICAgICogVmFsdWVzIGFyZSBIYXNodGFibGUgb2YgKENhc2VJbnNlbnNpdGl2ZVN0cmluZyAtPiBWZWN0b3Igb2YKKyAgICAgKiBDYXNlSW5zZW5zaXRpdmVTdHJpbmcpCisgICAgICovCisgICAgcHJpdmF0ZSBIYXNodGFibGUgc3BlY0RBRzsKKworICAgIC8qKgorICAgICAqIFZlY3RvciBvZiBwdWJsaWMgZnVsbCBJRHMgKENhc2VJbnNlbnNpdGl2ZVN0cmluZyBvYmplY3RzKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIFZlY3RvciBhdmFpbGFibGVJRHM7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjbGFzcyBTcGVjCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBBIFNwZWMgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyBlaXRoZXIgYSBzb3VyY2Ugb3IgYSB0YXJnZXQuICBJbiBtb3JlCisgICAgICogZ2VuZXJhbCB0ZXJtcywgaXQgbWF5IGFsc28gc3BlY2lmeSBhIHZhcmlhbnQsIGJ1dCB3ZSBvbmx5IHVzZSB0aGUKKyAgICAgKiBTcGVjIGNsYXNzIGZvciBzb3VyY2VzIGFuZCB0YXJnZXRzLgorICAgICAqCisgICAgICogQSBTcGVjIG1heSBiZSBhIGxvY2FsZSBvciBhIHNjcmlwdC4gIElmIGl0IGlzIGEgbG9jYWxlLCBpdCBoYXMgYQorICAgICAqIGZhbGxiYWNrIGNoYWluIHRoYXQgZ29lcyB4eF9ZWV9aWlogLT4geHhfWVkgLT4geHggLT4gc3Nzcywgd2hlcmUKKyAgICAgKiBzc3NzIGlzIHRoZSBzY3JpcHQgbWFwcGluZyBvZiB4eF9ZWV9aWlouICBUaGUgU3BlYyBBUEkgbWV0aG9kcworICAgICAqIGhhc0ZhbGxiYWNrKCksIG5leHQoKSwgYW5kIHJlc2V0KCkgaXRlcmF0ZSBvdmVyIHRoaXMgZmFsbGJhY2sKKyAgICAgKiBzZXF1ZW5jZS4KKyAgICAgKgorICAgICAqIFRoZSBTcGVjIGNsYXNzIGNhbm9uaWNhbGl6ZXMgaXRzZWxmLCBzbyB0aGUgbG9jYWxlIGlzIHB1dCBpbnRvCisgICAgICogY2Fub25pY2FsIGZvcm0sIG9yIHRoZSBzY3JpcHQgaXMgdHJhbnNmb3JtZWQgZnJvbSBhbiBhYmJyZXZpYXRpb24KKyAgICAgKiB0byBhIGZ1bGwgbmFtZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgY2xhc3MgU3BlYyB7CisKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgdG9wOyAgICAgICAgLy8gdG9wIHNwZWMKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgc3BlYzsgICAgICAgLy8gY3VycmVudCBzcGVjCisgICAgICAgIHByaXZhdGUgU3RyaW5nIG5leHRTcGVjOyAgIC8vIG5leHQgc3BlYworICAgICAgICBwcml2YXRlIFN0cmluZyBzY3JpcHROYW1lOyAvLyBzY3JpcHQgbmFtZSBlcXVpdmFsZW50IG9mIHRvcCwgaWYgIT0gdG9wCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc1NwZWNMb2NhbGU7IC8vIFRSVUUgaWYgc3BlYyBpcyBhIGxvY2FsZQorICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNOZXh0TG9jYWxlOyAvLyBUUlVFIGlmIG5leHRTcGVjIGlzIGEgbG9jYWxlCisgICAgICAgIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzOworCisgICAgICAgIHB1YmxpYyBTcGVjKFN0cmluZyB0aGVTcGVjKSB7CisgICAgICAgICAgICB0b3AgPSB0aGVTcGVjOworICAgICAgICAgICAgc3BlYyA9IG51bGw7CisgICAgICAgICAgICBzY3JpcHROYW1lID0gbnVsbDsKKworICAgICAgICAgICAgTG9jYWxlIHRvcGxvYyA9IExvY2FsZVV0aWxpdHkuZ2V0TG9jYWxlRnJvbU5hbWUodG9wKTsKKyAgICAgICAgICAgIHJlcyA9IElDVUxvY2FsZURhdGEuZ2V0TG9jYWxlRWxlbWVudHModG9wbG9jKTsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBnb3QgdGhlIGJ1bmRsZSB3ZSB3YW50ZWQ7IG90aGVyd2lzZSwgZG9uJ3QgdXNlIGl0CisgICAgICAgICAgICBpZiAoTG9jYWxlVXRpbGl0eS5pc0ZhbGxiYWNrT2YocmVzLmdldExvY2FsZSgpLnRvU3RyaW5nKCksIHRvcCkpIHsKKyAgICAgICAgICAgICAgICBpc1NwZWNMb2NhbGUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpc1NwZWNMb2NhbGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXMgPSBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgc2NyaXB0IG5hbWUgLW9yLSBkbyBsb2NhbGUtPnNjcmlwdCBtYXBwaW5nCisgICAgICAgICAgICBpbnRbXSBzID0gVVNjcmlwdC5nZXRDb2RlKHRvcCk7CisgICAgICAgICAgICBpZiAocyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2NyaXB0TmFtZSA9IFVTY3JpcHQuZ2V0TmFtZShzWzBdKTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc2NyaXB0IG5hbWUgaXMgdGhlIHNhbWUgYXMgdG9wIHRoZW4gaXQncyByZWR1bmRhbnQKKyAgICAgICAgICAgICAgICBpZiAoc2NyaXB0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHRvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0TmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBhc3NlcnQoc3BlYyAhPSB0b3ApOworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc0ZhbGxiYWNrKCkgeworICAgICAgICAgICAgcmV0dXJuIG5leHRTcGVjICE9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKKyAgICAgICAgICAgIGlmIChzcGVjICE9IHRvcCkgeyAvLyBbc2ljXSBwb2ludGVyIGNvbXBhcmlzb24KKyAgICAgICAgICAgICAgICBzcGVjID0gdG9wOworICAgICAgICAgICAgICAgIGlzU3BlY0xvY2FsZSA9IChyZXMgIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgc2V0dXBOZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgc2V0dXBOZXh0KCkgeworICAgICAgICAgICAgaXNOZXh0TG9jYWxlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXNTcGVjTG9jYWxlKSB7CisgICAgICAgICAgICAgICAgbmV4dFNwZWMgPSBzcGVjOworICAgICAgICAgICAgICAgIGludCBpID0gbmV4dFNwZWMubGFzdEluZGV4T2YoTE9DQUxFX1NFUCk7CisgICAgICAgICAgICAgICAgLy8gSWYgaSA9PSAwIHRoZW4gd2UgaGF2ZSBfRk9PLCBzbyB3ZSBmYWxsIHRocm91Z2gKKyAgICAgICAgICAgICAgICAvLyB0byB0aGUgc2NyaXB0TmFtZS4KKyAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dFNwZWMgPSBzcGVjLnN1YnN0cmluZygwLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgaXNOZXh0TG9jYWxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuZXh0U3BlYyA9IHNjcmlwdE5hbWU7IC8vIHNjcmlwdE5hbWUgbWF5IGJlIG51bGwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBzY3JpcHQsIHdoaWNoIG1heSBiZSBudWxsCisJCQkJaWYgKG5leHRTcGVjICE9IHNjcmlwdE5hbWUpIHsKKwkJCQkJbmV4dFNwZWMgPSBzY3JpcHROYW1lOworCQkJCX0gZWxzZSB7CisJCQkJCW5leHRTcGVjID0gbnVsbDsKKwkJCQl9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBQcm90b2NvbDoKKyAgICAgICAgLy8gZm9yKFN0cmluZyYgcyhzcGVjLmdldCgpKTsKKyAgICAgICAgLy8gICAgIHNwZWMuaGFzRmFsbGJhY2soKTsgcyhzcGVjLm5leHQoKSkpIHsgLi4uCisKKyAgICAgICAgcHVibGljIFN0cmluZyBuZXh0KCkgeworICAgICAgICAgICAgc3BlYyA9IG5leHRTcGVjOworICAgICAgICAgICAgaXNTcGVjTG9jYWxlID0gaXNOZXh0TG9jYWxlOworICAgICAgICAgICAgc2V0dXBOZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gc3BlYzsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0KCkgeworICAgICAgICAgICAgcmV0dXJuIHNwZWM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0xvY2FsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBpc1NwZWNMb2NhbGU7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIHRoZSBSZXNvdXJjZUJ1bmRsZSBmb3IgdGhpcyBzcGVjLCBhdCB0aGUgY3VycmVudAorICAgICAgICAgKiBsZXZlbCBvZiBpdGVyYXRpb24uICBUaGUgbGV2ZWwgb2YgaXRlcmF0aW9uIGdvZXMgZnJvbQorICAgICAgICAgKiBhYV9CQl9DQ0MgdG8gYWFfQkIgdG8gYWEuICBJZiB0aGUgYnVuZGxlIGRvZXMgbm90CisgICAgICAgICAqIGNvcnJlc3BvbmQgdG8gdGhlIGN1cnJlbnQgbGV2ZWwgb2YgaXRlcmF0aW9uLCByZXR1cm4gbnVsbC4KKyAgICAgICAgICogSWYgaXNMb2NhbGUoKSBpcyBmYWxzZSwgYWx3YXlzIHJldHVybiBudWxsLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFJlc291cmNlQnVuZGxlIGdldEJ1bmRsZSgpIHsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIHJlcy5nZXRMb2NhbGUoKS50b1N0cmluZygpLmVxdWFscyhzcGVjKSkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VG9wKCkgeworICAgICAgICAgICAgcmV0dXJuIHRvcDsKKyAgICAgICAgfQorCX0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEVudHJ5IGNsYXNzZXMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCXN0YXRpYyBjbGFzcyBSZXNvdXJjZUVudHJ5IHsKKyAgICAgICAgcHVibGljIFN0cmluZyByZXNvdXJjZU5hbWU7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZW5jb2Rpbmc7CisgICAgICAgIHB1YmxpYyBpbnQgZGlyZWN0aW9uOworICAgICAgICBwdWJsaWMgUmVzb3VyY2VFbnRyeShTdHJpbmcgbiwgU3RyaW5nIGVuYywgaW50IGQpIHsKKyAgICAgICAgICAgIHJlc291cmNlTmFtZSA9IG47CisgICAgICAgICAgICBlbmNvZGluZyA9IGVuYzsKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IGQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbiBlbnRyeSByZXByZXNlbnRpbmcgYSBydWxlIGluIGEgbG9jYWxlIHJlc291cmNlIGJ1bmRsZQorICAgIHN0YXRpYyBjbGFzcyBMb2NhbGVFbnRyeSB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgcnVsZTsKKyAgICAgICAgcHVibGljIGludCBkaXJlY3Rpb247CisgICAgICAgIHB1YmxpYyBMb2NhbGVFbnRyeShTdHJpbmcgciwgaW50IGQpIHsKKyAgICAgICAgICAgIHJ1bGUgPSByOworICAgICAgICAgICAgZGlyZWN0aW9uID0gZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBBbGlhc0VudHJ5IHsKKyAgICAgICAgcHVibGljIFN0cmluZyBhbGlhczsKKyAgICAgICAgcHVibGljIEFsaWFzRW50cnkoU3RyaW5nIGEpIHsKKyAgICAgICAgICAgIGFsaWFzID0gYTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBDb21wb3VuZFJCVEVudHJ5IHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgSUQ7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGlkQmxvY2s7CisgICAgICAgIHByaXZhdGUgaW50IGlkU3BsaXRQb2ludDsKKyAgICAgICAgcHJpdmF0ZSBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvci5EYXRhIGRhdGE7CisgICAgICAgIHByaXZhdGUgVW5pY29kZVNldCBjb21wb3VuZEZpbHRlcjsKKworICAgICAgICBwdWJsaWMgQ29tcG91bmRSQlRFbnRyeShTdHJpbmcgdGhlSUQsIFN0cmluZyB0aGVJREJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhlSURTcGxpdFBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvci5EYXRhIHRoZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTZXQgdGhlQ29tcG91bmRGaWx0ZXIpIHsKKyAgICAgICAgICAgIElEID0gdGhlSUQ7CisgICAgICAgICAgICBpZEJsb2NrID0gdGhlSURCbG9jazsKKyAgICAgICAgICAgIGlkU3BsaXRQb2ludCA9IHRoZUlEU3BsaXRQb2ludDsKKyAgICAgICAgICAgIGRhdGEgPSB0aGVEYXRhOworICAgICAgICAgICAgY29tcG91bmRGaWx0ZXIgPSB0aGVDb21wb3VuZEZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZSgpIHsKKyAgICAgICAgICAgIFRyYW5zbGl0ZXJhdG9yIHQgPSBuZXcgUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IoIl8iLCBkYXRhLCBudWxsKTsKKyAgICAgICAgICAgIHQgPSBuZXcgQ29tcG91bmRUcmFuc2xpdGVyYXRvcihJRCwgaWRCbG9jaywgaWRTcGxpdFBvaW50LCB0KTsKKyAgICAgICAgICAgIHQuc2V0RmlsdGVyKGNvbXBvdW5kRmlsdGVyKTsKKyAgICAgICAgICAgIHJldHVybiB0OworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY2xhc3MgVHJhbnNsaXRlcmF0b3JSZWdpc3RyeTogQmFzaWMgcHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yUmVnaXN0cnkoKSB7CisgICAgICAgIHJlZ2lzdHJ5ID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICBzcGVjREFHID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICBhdmFpbGFibGVJRHMgPSBuZXcgVmVjdG9yKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBzaW1wbGUgSUQgKGZvcndhcmQgZGlyZWN0aW9uLCBubyBpbmxpbmUgZmlsdGVyLCBub3QKKyAgICAgKiBjb21wb3VuZCkgYXR0ZW1wdCB0byBpbnN0YW50aWF0ZSBpdCBmcm9tIHRoZSByZWdpc3RyeS4gIFJldHVybgorICAgICAqIDAgb24gZmFpbHVyZS4KKyAgICAgKgorICAgICAqIFJldHVybiBhIG5vbi1lbXB0eSBhbGlhc1JldHVybiB2YWx1ZSBpZiB0aGUgSUQgcG9pbnRzIHRvIGFuIGFsaWFzLgorICAgICAqIFdlIGNhbm5vdCBpbnN0YW50aWF0ZSBpdCBvdXJzZWx2ZXMgYmVjYXVzZSB0aGUgYWxpYXMgbWF5IGNvbnRhaW4KKyAgICAgKiBmaWx0ZXJzIG9yIGNvbXBvdW5kcywgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQuICBDYWxsZXIgc2hvdWxkCisgICAgICogbWFrZSBhbGlhc1JldHVybiBlbXB0eSBiZWZvcmUgY2FsbGluZy4KKyAgICAgKi8KKyAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0KFN0cmluZyBJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBhbGlhc1JldHVybikgeworICAgICAgICBPYmplY3RbXSBlbnRyeSA9IGZpbmQoSUQpOworICAgICAgICByZXR1cm4gKGVudHJ5ID09IG51bGwpID8gbnVsbAorICAgICAgICAgICAgOiBpbnN0YW50aWF0ZUVudHJ5KElELCBlbnRyeSwgYWxpYXNSZXR1cm4pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIGEgY2xhc3MuICBUaGlzIGFkZHMgYW4gZW50cnkgdG8gdGhlCisgICAgICogZHluYW1pYyBzdG9yZSwgb3IgcmVwbGFjZXMgYW4gZXhpc3RpbmcgZW50cnkuICBBbnkgZW50cnkgaW4gdGhlCisgICAgICogdW5kZXJseWluZyBzdGF0aWMgbG9jYWxlIHJlc291cmNlIHN0b3JlIGlzIG1hc2tlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwdXQoU3RyaW5nIElELAorICAgICAgICAgICAgICAgICAgICBDbGFzcyB0cmFuc2xpdGVyYXRvclN1YmNsYXNzLAorICAgICAgICAgICAgICAgICAgICBib29sZWFuIHZpc2libGUpIHsKKyAgICAgICAgcmVnaXN0ZXJFbnRyeShJRCwgdHJhbnNsaXRlcmF0b3JTdWJjbGFzcywgdmlzaWJsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYW4gSUQgYW5kIGEgZmFjdG9yeSBmdW5jdGlvbiBwb2ludGVyLiAgVGhpcyBhZGRzIGFuCisgICAgICogZW50cnkgdG8gdGhlIGR5bmFtaWMgc3RvcmUsIG9yIHJlcGxhY2VzIGFuIGV4aXN0aW5nIGVudHJ5LiAgQW55CisgICAgICogZW50cnkgaW4gdGhlIHVuZGVybHlpbmcgc3RhdGljIGxvY2FsZSByZXNvdXJjZSBzdG9yZSBpcyBtYXNrZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBJRCwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSBmYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICBib29sZWFuIHZpc2libGUpIHsKKyAgICAgICAgcmVnaXN0ZXJFbnRyeShJRCwgZmFjdG9yeSwgdmlzaWJsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYW4gSUQgYW5kIGEgcmVzb3VyY2UgbmFtZS4gIFRoaXMgYWRkcyBhbiBlbnRyeSB0byB0aGUKKyAgICAgKiBkeW5hbWljIHN0b3JlLCBvciByZXBsYWNlcyBhbiBleGlzdGluZyBlbnRyeS4gIEFueSBlbnRyeSBpbiB0aGUKKyAgICAgKiB1bmRlcmx5aW5nIHN0YXRpYyBsb2NhbGUgcmVzb3VyY2Ugc3RvcmUgaXMgbWFza2VkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcgSUQsCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXNvdXJjZU5hbWUsCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgaW50IGRpciwKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB2aXNpYmxlKSB7CisgICAgICAgIHJlZ2lzdGVyRW50cnkoSUQsIG5ldyBSZXNvdXJjZUVudHJ5KHJlc291cmNlTmFtZSwgZW5jb2RpbmcsIGRpciksIHZpc2libGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIGFuIElEIGFuZCBhbiBhbGlhcyBJRC4gIFRoaXMgYWRkcyBhbiBlbnRyeSB0byB0aGUKKyAgICAgKiBkeW5hbWljIHN0b3JlLCBvciByZXBsYWNlcyBhbiBleGlzdGluZyBlbnRyeS4gIEFueSBlbnRyeSBpbiB0aGUKKyAgICAgKiB1bmRlcmx5aW5nIHN0YXRpYyBsb2NhbGUgcmVzb3VyY2Ugc3RvcmUgaXMgbWFza2VkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcgSUQsCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhbGlhcywKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB2aXNpYmxlKSB7CisgICAgICAgIHJlZ2lzdGVyRW50cnkoSUQsIG5ldyBBbGlhc0VudHJ5KGFsaWFzKSwgdmlzaWJsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYW4gSUQgYW5kIGEgVHJhbnNsaXRlcmF0b3Igb2JqZWN0LiAgVGhpcyBhZGRzIGFuIGVudHJ5CisgICAgICogdG8gdGhlIGR5bmFtaWMgc3RvcmUsIG9yIHJlcGxhY2VzIGFuIGV4aXN0aW5nIGVudHJ5LiAgQW55IGVudHJ5CisgICAgICogaW4gdGhlIHVuZGVybHlpbmcgc3RhdGljIGxvY2FsZSByZXNvdXJjZSBzdG9yZSBpcyBtYXNrZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBJRCwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3IgdHJhbnMsCisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdmlzaWJsZSkgeworICAgICAgICByZWdpc3RlckVudHJ5KElELCB0cmFucywgdmlzaWJsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVW5yZWdpc3RlciBhbiBJRC4gIFRoaXMgcmVtb3ZlcyBhbiBlbnRyeSBmcm9tIHRoZSBkeW5hbWljIHN0b3JlCisgICAgICogaWYgdGhlcmUgaXMgb25lLiAgVGhlIHN0YXRpYyBsb2NhbGUgcmVzb3VyY2Ugc3RvcmUgaXMKKyAgICAgKiB1bmFmZmVjdGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlbW92ZShTdHJpbmcgSUQpIHsKKyAgICAgICAgU3RyaW5nW10gc3R2ID0gVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5JRHRvU1RWKElEKTsKKyAgICAgICAgLy8gT25seSBuZWVkIHRvIGRvIHRoaXMgaWYgSUQuaW5kZXhPZignLScpIDwgMAorICAgICAgICBTdHJpbmcgaWQgPSBUcmFuc2xpdGVyYXRvcklEUGFyc2VyLlNUVnRvSUQoc3R2WzBdLCBzdHZbMV0sIHN0dlsyXSk7CisgICAgICAgIHJlZ2lzdHJ5LnJlbW92ZShuZXcgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nKGlkKSk7CisgICAgICAgIHJlbW92ZVNUVihzdHZbMF0sIHN0dlsxXSwgc3R2WzJdKTsKKyAgICAgICAgYXZhaWxhYmxlSURzLnJlbW92ZUVsZW1lbnQobmV3IENhc2VJbnNlbnNpdGl2ZVN0cmluZyhpZCkpOworICAgIH0KKyAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjbGFzcyBUcmFuc2xpdGVyYXRvclJlZ2lzdHJ5OiBQdWJsaWMgSUQgYW5kIHNwZWMgbWFuYWdlbWVudAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQW4gaW50ZXJuYWwgY2xhc3MgdGhhdCBhZGFwdHMgYW4gZW51bWVyYXRpb24gb3ZlcgorICAgICAqIENhc2VJbnNlbnNpdGl2ZVN0cmluZ3MgdG8gYW4gZW51bWVyYXRpb24gb3ZlciBTdHJpbmdzLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIElERW51bWVyYXRpb24gaW1wbGVtZW50cyBFbnVtZXJhdGlvbiB7CisgICAgICAgIEVudW1lcmF0aW9uIGVudW07CisKKyAgICAgICAgcHVibGljIElERW51bWVyYXRpb24oRW51bWVyYXRpb24gZSkgeworICAgICAgICAgICAgZW51bSA9IGU7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNNb3JlRWxlbWVudHMoKSB7CisgICAgICAgICAgICByZXR1cm4gZW51bSAhPSBudWxsICYmIGVudW0uaGFzTW9yZUVsZW1lbnRzKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgT2JqZWN0IG5leHRFbGVtZW50KCkgeworICAgICAgICAgICAgcmV0dXJuICgoQ2FzZUluc2Vuc2l0aXZlU3RyaW5nKSBlbnVtLm5leHRFbGVtZW50KCkpLmdldFN0cmluZygpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvdmVyIHRoZSBwcm9ncmFtbWF0aWMgbmFtZXMgb2YgdmlzaWJsZQorICAgICAqIHJlZ2lzdGVyZWQgdHJhbnNsaXRlcmF0b3JzLgorICAgICAqCisgICAgICogQHJldHVybiBBbiA8Y29kZT5FbnVtZXJhdGlvbjwvY29kZT4gb3ZlciA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdHMKKyAgICAgKi8KKyAgICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QXZhaWxhYmxlSURzKCkgeworICAgICAgICAvLyBTaW5jZSB0aGUgY2FjaGUgY29udGFpbnMgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nIG9iamVjdHMsIGJ1dAorICAgICAgICAvLyB0aGUgY2FsbGVyIGV4cGVjdHMgU3RyaW5ncywgd2UgaGF2ZSB0byB1c2UgYW4gaW50ZXJtZWRpYXJ5LgorICAgICAgICByZXR1cm4gbmV3IElERW51bWVyYXRpb24oYXZhaWxhYmxlSURzLmVsZW1lbnRzKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb3ZlciBhbGwgdmlzaWJsZSBzb3VyY2UgbmFtZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEFuIDxjb2RlPkVudW1lcmF0aW9uPC9jb2RlPiBvdmVyIDxjb2RlPlN0cmluZzwvY29kZT4gb2JqZWN0cworICAgICAqLworICAgIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBdmFpbGFibGVTb3VyY2VzKCkgeworICAgICAgICByZXR1cm4gbmV3IElERW51bWVyYXRpb24oc3BlY0RBRy5rZXlzKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb3ZlciB2aXNpYmxlIHRhcmdldCBuYW1lcyBmb3IgdGhlIGdpdmVuCisgICAgICogc291cmNlLgorICAgICAqCisgICAgICogQHJldHVybiBBbiA8Y29kZT5FbnVtZXJhdGlvbjwvY29kZT4gb3ZlciA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdHMKKyAgICAgKi8KKyAgICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QXZhaWxhYmxlVGFyZ2V0cyhTdHJpbmcgc291cmNlKSB7CisgICAgICAgIENhc2VJbnNlbnNpdGl2ZVN0cmluZyBjaXNyYyA9IG5ldyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcoc291cmNlKTsKKyAgICAgICAgSGFzaHRhYmxlIHRhcmdldHMgPSAoSGFzaHRhYmxlKSBzcGVjREFHLmdldChjaXNyYyk7CisgICAgICAgIGlmICh0YXJnZXRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSURFbnVtZXJhdGlvbihudWxsKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IElERW51bWVyYXRpb24odGFyZ2V0cy5rZXlzKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb3ZlciB2aXNpYmxlIHZhcmlhbnQgbmFtZXMgZm9yIHRoZSBnaXZlbgorICAgICAqIHNvdXJjZSBhbmQgdGFyZ2V0LgorICAgICAqCisgICAgICogQHJldHVybiBBbiA8Y29kZT5FbnVtZXJhdGlvbjwvY29kZT4gb3ZlciA8Y29kZT5TdHJpbmc8L2NvZGU+IG9iamVjdHMKKyAgICAgKi8KKyAgICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QXZhaWxhYmxlVmFyaWFudHMoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCkgeworICAgICAgICBDYXNlSW5zZW5zaXRpdmVTdHJpbmcgY2lzcmMgPSBuZXcgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nKHNvdXJjZSk7CisgICAgICAgIENhc2VJbnNlbnNpdGl2ZVN0cmluZyBjaXRyZyA9IG5ldyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcodGFyZ2V0KTsKKyAgICAgICAgSGFzaHRhYmxlIHRhcmdldHMgPSAoSGFzaHRhYmxlKSBzcGVjREFHLmdldChjaXNyYyk7CisgICAgICAgIGlmICh0YXJnZXRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSURFbnVtZXJhdGlvbihudWxsKTsKKyAgICAgICAgfQorICAgICAgICBWZWN0b3IgdmFyaWFudHMgPSAoVmVjdG9yKSB0YXJnZXRzLmdldChjaXRyZyk7CisgICAgICAgIGlmICh2YXJpYW50cyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IElERW51bWVyYXRpb24obnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBJREVudW1lcmF0aW9uKHZhcmlhbnRzLmVsZW1lbnRzKCkpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIGNsYXNzIFRyYW5zbGl0ZXJhdG9yUmVnaXN0cnk6IGludGVybmFsCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QuICBDYWxscyA2LWFyZyByZWdpc3RlckVudHJ5KCkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyRW50cnkoU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHZpc2libGUpIHsKKyAgICAgICAgU3RyaW5nIHMgPSBzb3VyY2U7CisgICAgICAgIGlmIChzLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIHMgPSBBTlk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIElEID0gVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5TVFZ0b0lEKHNvdXJjZSwgdGFyZ2V0LCB2YXJpYW50KTsKKyAgICAgICAgcmVnaXN0ZXJFbnRyeShJRCwgcywgdGFyZ2V0LCB2YXJpYW50LCBlbnRyeSwgdmlzaWJsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kLiAgQ2FsbHMgNi1hcmcgcmVnaXN0ZXJFbnRyeSgpLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckVudHJ5KFN0cmluZyBJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB2aXNpYmxlKSB7CisgICAgICAgIFN0cmluZ1tdIHN0diA9IFRyYW5zbGl0ZXJhdG9ySURQYXJzZXIuSUR0b1NUVihJRCk7CisgICAgICAgIC8vIE9ubHkgbmVlZCB0byBkbyB0aGlzIGlmIElELmluZGV4T2YoJy0nKSA8IDAKKyAgICAgICAgU3RyaW5nIGlkID0gVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5TVFZ0b0lEKHN0dlswXSwgc3R2WzFdLCBzdHZbMl0pOworICAgICAgICByZWdpc3RlckVudHJ5KGlkLCBzdHZbMF0sIHN0dlsxXSwgc3R2WzJdLCBlbnRyeSwgdmlzaWJsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYW4gZW50cnkgb2JqZWN0IChhZG9wdGVkKSB3aXRoIHRoZSBnaXZlbiBJRCwgc291cmNlLAorICAgICAqIHRhcmdldCwgYW5kIHZhcmlhbnQgc3RyaW5ncy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJFbnRyeShTdHJpbmcgSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHZpc2libGUpIHsKKyAgICAgICAgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nIGNpSUQgPSBuZXcgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nKElEKTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgZW50cnkgd2l0aGluIGFuIGFycmF5IHNvIGl0IGNhbiBiZSBtb2RpZmllZCBsYXRlcgorICAgICAgICBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIE9iamVjdFtdKSkgeworICAgICAgICAgICAgZW50cnkgPSBuZXcgT2JqZWN0W10geyBlbnRyeSB9OworICAgICAgICB9CisKKyAgICAgICAgcmVnaXN0cnkucHV0KGNpSUQsIGVudHJ5KTsKKyAgICAgICAgaWYgKHZpc2libGUpIHsKKyAgICAgICAgICAgIHJlZ2lzdGVyU1RWKHNvdXJjZSwgdGFyZ2V0LCB2YXJpYW50KTsKKyAgICAgICAgICAgIGlmICghYXZhaWxhYmxlSURzLmNvbnRhaW5zKGNpSUQpKSB7CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlSURzLmFkZEVsZW1lbnQoY2lJRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZW1vdmVTVFYoc291cmNlLCB0YXJnZXQsIHZhcmlhbnQpOworICAgICAgICAgICAgYXZhaWxhYmxlSURzLnJlbW92ZUVsZW1lbnQoY2lJRCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciBhIHNvdXJjZS10YXJnZXQvdmFyaWFudCBpbiB0aGUgc3BlY0RBRy4gIFZhcmlhbnQgbWF5IGJlCisgICAgICogZW1wdHksIGJ1dCBzb3VyY2UgYW5kIHRhcmdldCBtdXN0IG5vdCBiZS4gIElmIHZhcmlhbnQgaXMgZW1wdHkgdGhlbgorICAgICAqIHRoZSBzcGVjaWFsIHZhcmlhbnQgTk9fVkFSSUFOVCBpcyBzdG9yZWQgaW4gc2xvdCB6ZXJvIG9mIHRoZQorICAgICAqIFVWZWN0b3Igb2YgdmFyaWFudHMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyU1RWKFN0cmluZyBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYW50KSB7CisgICAgICAgIC8vIGFzc2VydChzb3VyY2UubGVuZ3RoKCkgPiAwKTsKKyAgICAgICAgLy8gYXNzZXJ0KHRhcmdldC5sZW5ndGgoKSA+IDApOworICAgICAgICBDYXNlSW5zZW5zaXRpdmVTdHJpbmcgY2lzcmMgPSBuZXcgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nKHNvdXJjZSk7CisgICAgICAgIENhc2VJbnNlbnNpdGl2ZVN0cmluZyBjaXRyZyA9IG5ldyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcodGFyZ2V0KTsKKyAgICAgICAgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nIGNpdmFyID0gbmV3IENhc2VJbnNlbnNpdGl2ZVN0cmluZyh2YXJpYW50KTsKKyAgICAgICAgSGFzaHRhYmxlIHRhcmdldHMgPSAoSGFzaHRhYmxlKSBzcGVjREFHLmdldChjaXNyYyk7CisgICAgICAgIGlmICh0YXJnZXRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHRhcmdldHMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICBzcGVjREFHLnB1dChjaXNyYywgdGFyZ2V0cyk7CisgICAgICAgIH0KKyAgICAgICAgVmVjdG9yIHZhcmlhbnRzID0gKFZlY3RvcikgdGFyZ2V0cy5nZXQoY2l0cmcpOworICAgICAgICBpZiAodmFyaWFudHMgPT0gbnVsbCkgeworICAgICAgICAgICAgdmFyaWFudHMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICB0YXJnZXRzLnB1dChjaXRyZywgdmFyaWFudHMpOworICAgICAgICB9CisgICAgICAgIC8vIGFzc2VydChOT19WQVJJQU5UID09ICIiKTsKKyAgICAgICAgLy8gV2UgYWRkIHRoZSB2YXJpYW50IHN0cmluZy4gIElmIGl0IGlzIHRoZSBzcGVjaWFsICJubyB2YXJpYW50IgorICAgICAgICAvLyBzdHJpbmcsIHRoYXQgaXMsIHRoZSBlbXB0eSBzdHJpbmcsIHdlIGFkZCBpdCBhdCBwb3NpdGlvbiB6ZXJvLgorICAgICAgICBpZiAoIXZhcmlhbnRzLmNvbnRhaW5zKGNpdmFyKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgdmFyaWFudHMuYWRkRWxlbWVudChjaXZhcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhcmlhbnRzLmluc2VydEVsZW1lbnRBdChjaXZhciwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBzb3VyY2UtdGFyZ2V0L3ZhcmlhbnQgZnJvbSB0aGUgc3BlY0RBRy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVtb3ZlU1RWKFN0cmluZyBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhcmlhbnQpIHsKKyAgICAgICAgLy8gYXNzZXJ0KHNvdXJjZS5sZW5ndGgoKSA+IDApOworICAgICAgICAvLyBhc3NlcnQodGFyZ2V0Lmxlbmd0aCgpID4gMCk7CisgICAgICAgIENhc2VJbnNlbnNpdGl2ZVN0cmluZyBjaXNyYyA9IG5ldyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcoc291cmNlKTsKKyAgICAgICAgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nIGNpdHJnID0gbmV3IENhc2VJbnNlbnNpdGl2ZVN0cmluZyh0YXJnZXQpOworICAgICAgICBDYXNlSW5zZW5zaXRpdmVTdHJpbmcgY2l2YXIgPSBuZXcgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nKHZhcmlhbnQpOworICAgICAgICBIYXNodGFibGUgdGFyZ2V0cyA9IChIYXNodGFibGUpIHNwZWNEQUcuZ2V0KGNpc3JjKTsKKyAgICAgICAgaWYgKHRhcmdldHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuIGZvciB2YWxpZCBzLXQvdgorICAgICAgICB9CisgICAgICAgIFZlY3RvciB2YXJpYW50cyA9IChWZWN0b3IpIHRhcmdldHMuZ2V0KGNpdHJnKTsKKyAgICAgICAgaWYgKHZhcmlhbnRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbiBmb3IgdmFsaWQgcy10L3YKKyAgICAgICAgfQorICAgICAgICB2YXJpYW50cy5yZW1vdmVFbGVtZW50KHZhcmlhbnQpOworICAgICAgICBpZiAodmFyaWFudHMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIHRhcmdldHMucmVtb3ZlKGNpdHJnKTsgLy8gc2hvdWxkIGRlbGV0ZSB2YXJpYW50cworICAgICAgICAgICAgaWYgKHRhcmdldHMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICBzcGVjREFHLnJlbW92ZShjaXNyYyk7IC8vIHNob3VsZCBkZWxldGUgdGFyZ2V0cworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogQXR0ZW1wdCB0byBmaW5kIGEgc291cmNlLXRhcmdldC92YXJpYW50IGluIHRoZSBkeW5hbWljIHJlZ2lzdHJ5CisgICAgICogc3RvcmUuICBSZXR1cm4gMCBvbiBmYWlsdXJlLgorICAgICAqLworICAgIHByaXZhdGUgT2JqZWN0W10gZmluZEluRHluYW1pY1N0b3JlKFNwZWMgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjIHRyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhcmlhbnQpIHsKKyAgICAgICAgU3RyaW5nIElEID0gVHJhbnNsaXRlcmF0b3JJRFBhcnNlci5TVFZ0b0lEKHNyYy5nZXQoKSwgdHJnLmdldCgpLCB2YXJpYW50KTsKKyAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zbGl0ZXJhdG9yUmVnaXN0cnkuZmluZEluRHluYW1pY1N0b3JlOiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKE9iamVjdFtdKSByZWdpc3RyeS5nZXQobmV3IENhc2VJbnNlbnNpdGl2ZVN0cmluZyhJRCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEF0dGVtcHQgdG8gZmluZCBhIHNvdXJjZS10YXJnZXQvdmFyaWFudCBpbiB0aGUgc3RhdGljIGxvY2FsZQorICAgICAqIHJlc291cmNlIHN0b3JlLiAgRG8gbm90IHBlcmZvcm0gZmFsbGJhY2suICBSZXR1cm4gMCBvbiBmYWlsdXJlLgorICAgICAqCisgICAgICogT24gc3VjY2VzcywgY3JlYXRlIGEgbmV3IGVudHJ5IG9iamVjdCwgcmVnaXN0ZXIgaXQgaW4gdGhlIGR5bmFtaWMKKyAgICAgKiBzdG9yZSwgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQsIGJ1dCBkbyBub3QgbWFrZSBpdCBwdWJsaWMgLS0KKyAgICAgKiBqdXN0IGJlY2F1c2Ugc29tZW9uZSByZXF1ZXN0ZWQgc29tZXRoaW5nLCB3ZSBkbyBub3QgZXhwYW5kIHRoZQorICAgICAqIGF2YWlsYWJsZSBJRCBsaXN0IChvciBzcGVjIERBRykuCisgICAgICovCisgICAgcHJpdmF0ZSBPYmplY3RbXSBmaW5kSW5TdGF0aWNTdG9yZShTcGVjIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjIHRyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFyaWFudCkgeworICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIFN0cmluZyBJRCA9IFRyYW5zbGl0ZXJhdG9ySURQYXJzZXIuU1RWdG9JRChzcmMuZ2V0KCksIHRyZy5nZXQoKSwgdmFyaWFudCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zbGl0ZXJhdG9yUmVnaXN0cnkuZmluZEluU3RhdGljU3RvcmU6IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQpOworICAgICAgICB9CisgICAgICAgIE9iamVjdFtdIGVudHJ5ID0gbnVsbDsKKyAgICAgICAgaWYgKHNyYy5pc0xvY2FsZSgpKSB7CisgICAgICAgICAgICBlbnRyeSA9IGZpbmRJbkJ1bmRsZShzcmMsIHRyZywgdmFyaWFudCwgVHJhbnNsaXRlcmF0b3IuRk9SV0FSRCk7CisgICAgICAgIH0gZWxzZSBpZiAodHJnLmlzTG9jYWxlKCkpIHsKKyAgICAgICAgICAgIGVudHJ5ID0gZmluZEluQnVuZGxlKHRyZywgc3JjLCB2YXJpYW50LCBUcmFuc2xpdGVyYXRvci5SRVZFUlNFKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGZvdW5kIGFuIGVudHJ5LCBzdG9yZSBpdCBpbiB0aGUgSGFzaHRhYmxlIGZvciBuZXh0CisgICAgICAgIC8vIHRpbWUuCisgICAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7CisgICAgICAgICAgICByZWdpc3RlckVudHJ5KHNyYy5nZXRUb3AoKSwgdHJnLmdldFRvcCgpLCB2YXJpYW50LCBlbnRyeSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKworICAgIC8qKgorICAgICAqIEF0dGVtcHQgdG8gZmluZCBhbiBlbnRyeSBpbiBhIHNpbmdsZSByZXNvdXJjZSBidW5kbGUuICBUaGlzIGlzCisgICAgICogYSBvbmUtc2lkZWQgbG9va3VwLiAgZmluZEluU3RhdGljU3RvcmUoKSBwZXJmb3JtcyB1cCB0byB0d28gc3VjaAorICAgICAqIGxvb2t1cHMsIG9uZSBmb3IgdGhlIHNvdXJjZSwgYW5kIG9uZSBmb3IgdGhlIHRhcmdldC4KKyAgICAgKgorICAgICAqIERvIG5vdCBwZXJmb3JtIGZhbGxiYWNrLiAgUmV0dXJuIDAgb24gZmFpbHVyZS4KKyAgICAgKgorICAgICAqIE9uIHN1Y2Nlc3MsIGNyZWF0ZSBhIG5ldyBFbnRyeSBvYmplY3QsIHBvcHVsYXRlIGl0LCBhbmQgcmV0dXJuIGl0LgorICAgICAqIFRoZSBjYWxsZXIgb3ducyB0aGUgcmV0dXJuZWQgb2JqZWN0LgorICAgICAqLworICAgIHByaXZhdGUgT2JqZWN0W10gZmluZEluQnVuZGxlKFNwZWMgc3BlY1RvT3BlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjIHNwZWNUb0ZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhcmlhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbikgeworICAgICAgICAvLyBhc3NlcnQoc3BlY1RvT3Blbi5pc0xvY2FsZSgpKTsKKyAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmVzID0gc3BlY1RvT3Blbi5nZXRCdW5kbGUoKTsKKworICAgICAgICBpZiAocmVzID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgYnVuZGxlJ3MgbG9jYWxlIGRvZXMgbm90IG1hdGNoCisgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBsZXZlbCBvZiBpdGVyYXRpb24gZm9yIHRoZSBzcGVjLgorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBwYXNzPTA7IHBhc3M8MjsgKytwYXNzKSB7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdGFnID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IGVpdGhlciBUcmFuc2xpdGVyYXRvclRvX3h4eCBvcgorICAgICAgICAgICAgLy8gVHJhbnNsaXRlcmF0ZUZyb21feHh4LCB0aGVuIHRyeSB0aGUgYmlkaXJlY3Rpb25hbAorICAgICAgICAgICAgLy8gVHJhbnNsaXRlcmF0ZV94eHguICBUaGlzIHByZWNlZGVuY2Ugb3JkZXIgaXMgYXJiaXRyYXJ5CisgICAgICAgICAgICAvLyBidXQgbXVzdCBiZSBjb25zaXN0ZW50IGFuZCBkb2N1bWVudGVkLgorICAgICAgICAgICAgaWYgKHBhc3MgPT0gMCkgeworICAgICAgICAgICAgICAgIHRhZy5hcHBlbmQoZGlyZWN0aW9uID09IFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zbGl0ZXJhdGVUb18iIDogIlRyYW5zbGl0ZXJhdGVGcm9tXyIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0YWcuYXBwZW5kKCJUcmFuc2xpdGVyYXRlXyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGFnLmFwcGVuZChzcGVjVG9GaW5kLmdldCgpLnRvVXBwZXJDYXNlKCkpOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBUcmFuc2xpdGVyYXRlKl94eHggcmVzb3VyY2UgaXMgYW4gYXJyYXkgb2YKKyAgICAgICAgICAgICAgICAvLyBzdHJpbmdzIG9mIHRoZSBmb3JtYXQgeyA8djA+LCA8cjA+LCAuLi4gfS4gIEVhY2gKKyAgICAgICAgICAgICAgICAvLyA8dmk+IGlzIGEgdmFyaWFudCBuYW1lLCBhbmQgZWFjaCA8cmk+IGlzIGEgcnVsZS4KKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBzdWJyZXMgPSByZXMuZ2V0U3RyaW5nQXJyYXkodGFnLnRvU3RyaW5nKCkpOworCisgICAgICAgICAgICAgICAgLy8gYXNzZXJ0KHN1YnJlcyAhPSBudWxsKTsKKyAgICAgICAgICAgICAgICAvLyBhc3NlcnQoc3VicmVzLmxlbmd0aCAlIDIgPT0gMCk7CisgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lmxlbmd0aCgpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8c3VicmVzLmxlbmd0aDsgaSs9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyZXNbaV0uZXF1YWxzSWdub3JlQ2FzZSh2YXJpYW50KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGkgPCBzdWJyZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaCwgb3IgdGhlcmUgaXMgbm8gdmFyaWFudCBhbmQgaSA9PSAwLgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHN1Y2NlZWRlZCBpbiBsb2FkaW5nIGEgc3RyaW5nIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGxvY2FsZSByZXNvdXJjZXMuICBSZXR1cm4gdGhlIHJ1bGUgc3RyaW5nIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgaXRzZWxmIGJlY29tZSB0aGUgcmVnaXN0cnkgZW50cnkuCisKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRpcmVjdGlvbiBpcyBhbHdheXMgZm9yd2FyZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zbGl0ZXJhdGVUb194eHggYW5kIFRyYW5zbGl0ZXJhdGVGcm9tX3h4eAorICAgICAgICAgICAgICAgICAgICAvLyBpdGVtczsgdGhvc2UgYXJlIHVuaWRpcmVjdGlvbmFsIGZvcndhcmQgcnVsZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgYmlkaXJlY3Rpb25hbCBUcmFuc2xpdGVyYXRlX3h4eCBpdGVtcywKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGRpcmVjdGlvbiBpcyB0aGUgdmFsdWUgcGFzc2VkIGluIHRvIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGludCBkaXIgPSAocGFzcyA9PSAwKSA/IFRyYW5zbGl0ZXJhdG9yLkZPUldBUkQgOiBkaXJlY3Rpb247CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W10geyBuZXcgTG9jYWxlRW50cnkoc3VicmVzW2krMV0sIGRpcikgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7IAorCQkJCWlmIChERUJVRykgU3lzdGVtLm91dC5wcmludGxuKCJtaXNzaW5nIHJlc291cmNlOiAiICsgZSk7IAorCQkJfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgd2UgaGFkIGEgbWlzc2luZyByZXNvdXJjZSBleGNlcHRpb24gb3Igd2UKKyAgICAgICAgLy8gZmFpbGVkIHRvIGZpbmQgYSBkZXNpcmVkIHZhcmlhbnQuCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZC4gIENhbGxzIDMtYXJnIGZpbmQoKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIE9iamVjdFtdIGZpbmQoU3RyaW5nIElEKSB7CisgICAgICAgIFN0cmluZ1tdIHN0diA9IFRyYW5zbGl0ZXJhdG9ySURQYXJzZXIuSUR0b1NUVihJRCk7CisgICAgICAgIHJldHVybiBmaW5kKHN0dlswXSwgc3R2WzFdLCBzdHZbMl0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRvcC1sZXZlbCBmaW5kIG1ldGhvZC4gIEF0dGVtcHQgdG8gZmluZCBhIHNvdXJjZS10YXJnZXQvdmFyaWFudCBpbgorICAgICAqIGVpdGhlciB0aGUgZHluYW1pYyBvciB0aGUgc3RhdGljIChsb2NhbGUgcmVzb3VyY2UpIHN0b3JlLiAgUGVyZm9ybQorICAgICAqIGZhbGxiYWNrLgorICAgICAqCisgICAgICogTG9va3VwIHNlcXVlbmNlIGZvciBzc19TU19TU1MtdHRfVFRfVFRUL3Y6CisgICAgICoKKyAgICAgKiAgIHNzX1NTX1NTUy10dF9UVF9UVFQvdiAtLSBpbiBoYXNodGFibGUKKyAgICAgKiAgIHNzX1NTX1NTUy10dF9UVF9UVFQvdiAtLSBpbiBzc19TU19TU1MgKG5vIGZhbGxiYWNrKQorICAgICAqCisgICAgICogICAgIHJlcGVhdCB3aXRoIHQgPSB0dF9UVF9UVFQsIHR0X1RULCB0dCwgYW5kIHRzY3JpcHQKKyAgICAgKgorICAgICAqICAgICBzc19TU19TU1MtdC8qCisgICAgICogICAgIHNzX1NTLXQvKgorICAgICAqICAgICBzcy10LyoKKyAgICAgKiAgICAgc3NjcmlwdC10LyoKKyAgICAgKgorICAgICAqIEhlcmUgKiBtYXRjaGVzIHRoZSBmaXJzdCB2YXJpYW50IGxpc3RlZC4KKyAgICAgKgorICAgICAqIENhbGxlciBkb2VzIE5PVCBvd24gcmV0dXJuZWQgb2JqZWN0LiAgUmV0dXJuIDAgb24gZmFpbHVyZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIE9iamVjdFtdIGZpbmQoU3RyaW5nIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhcmlhbnQpIHsKKworICAgICAgICBTcGVjIHNyYyA9IG5ldyBTcGVjKHNvdXJjZSk7CisgICAgICAgIFNwZWMgdHJnID0gbmV3IFNwZWModGFyZ2V0KTsKKyAgICAgICAgT2JqZWN0W10gZW50cnkgPSBudWxsOworCisgICAgICAgIGlmICh2YXJpYW50Lmxlbmd0aCgpICE9IDApIHsKKworICAgICAgICAgICAgLy8gU2VlayBleGFjdCBtYXRjaCBpbiBoYXNodGFibGUKKyAgICAgICAgICAgIGVudHJ5ID0gZmluZEluRHluYW1pY1N0b3JlKHNyYywgdHJnLCB2YXJpYW50KTsKKyAgICAgICAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZWVrIGV4YWN0IG1hdGNoIGluIGxvY2FsZSByZXNvdXJjZXMKKyAgICAgICAgICAgIGVudHJ5ID0gZmluZEluU3RhdGljU3RvcmUoc3JjLCB0cmcsIHZhcmlhbnQpOworICAgICAgICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzcmMucmVzZXQoKTsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAvLyBTZWVrIG1hdGNoIGluIGhhc2h0YWJsZQorICAgICAgICAgICAgICAgIGVudHJ5ID0gZmluZEluRHluYW1pY1N0b3JlKHNyYywgdHJnLCBOT19WQVJJQU5UKTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gU2VlayBtYXRjaCBpbiBsb2NhbGUgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgZW50cnkgPSBmaW5kSW5TdGF0aWNTdG9yZShzcmMsIHRyZywgTk9fVkFSSUFOVCk7CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXNyYy5oYXNGYWxsYmFjaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcmMubmV4dCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0cmcuaGFzRmFsbGJhY2soKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJnLm5leHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdpdmVuIGFuIEVudHJ5IG9iamVjdCwgaW5zdGFudGlhdGUgaXQuICBDYWxsZXIgb3ducyByZXN1bHQuICBSZXR1cm4KKyAgICAgKiAwIG9uIGZhaWx1cmUuCisgICAgICoKKyAgICAgKiBSZXR1cm4gYSBub24tZW1wdHkgYWxpYXNSZXR1cm4gdmFsdWUgaWYgdGhlIElEIHBvaW50cyB0byBhbiBhbGlhcy4KKyAgICAgKiBXZSBjYW5ub3QgaW5zdGFudGlhdGUgaXQgb3Vyc2VsdmVzIGJlY2F1c2UgdGhlIGFsaWFzIG1heSBjb250YWluCisgICAgICogZmlsdGVycyBvciBjb21wb3VuZHMsIHdoaWNoIHdlIGRvIG5vdCB1bmRlcnN0YW5kLiAgQ2FsbGVyIHNob3VsZAorICAgICAqIG1ha2UgYWxpYXNSZXR1cm4gZW1wdHkgYmVmb3JlIGNhbGxpbmcuCisgICAgICoKKyAgICAgKiBUaGUgZW50cnkgb2JqZWN0IGlzIGFzc3VtZWQgdG8gcmVzaWRlIGluIHRoZSBkeW5hbWljIHN0b3JlLiAgSXQgbWF5IGJlCisgICAgICogbW9kaWZpZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBUcmFuc2xpdGVyYXRvciBpbnN0YW50aWF0ZUVudHJ5KFN0cmluZyBJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gZW50cnlXcmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYWxpYXNSZXR1cm4pIHsKKyAgICAgICAgLy8gV2UgYWN0dWFsbHkgbW9kaWZ5IHRoZSBlbnRyeSBvYmplY3QgaW4gc29tZSBjYXNlcy4gIElmIGl0CisgICAgICAgIC8vIGlzIGEgc3RyaW5nLCB3ZSBtYXkgcGFydGlhbGx5IHBhcnNlIGl0IGFuZCB0dXJuIGl0IGludG8gYQorICAgICAgICAvLyBtb3JlIHByb2Nlc3NlZCBwcmVjdXJzb3IuICBUaGlzIG1ha2VzIHRoZSBuZXh0CisgICAgICAgIC8vIGluc3RhbnRpYXRpb24gZmFzdGVyIGFuZCBhbGxvd3Mgc2hhcmluZyBvZiBpbW11dGFibGUKKyAgICAgICAgLy8gY29tcG9uZW50cyBsaWtlIHRoZSBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvci5EYXRhIG9iamVjdHMuCisgICAgICAgIC8vIEZvciB0aGlzIHJlYXNvbiwgdGhlIGVudHJ5IG9iamVjdCBpcyBhbiBPYmplY3RbXSBvZiBsZW5ndGgKKyAgICAgICAgLy8gMS4KKworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBPYmplY3QgZW50cnkgPSBlbnRyeVdyYXBwZXJbMF07CisKKyAgICAgICAgICAgIGlmIChlbnRyeSBpbnN0YW5jZW9mIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yLkRhdGEpIHsKKyAgICAgICAgICAgICAgICBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvci5EYXRhIGRhdGEgPSAoUnVsZUJhc2VkVHJhbnNsaXRlcmF0b3IuRGF0YSkgZW50cnk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdWxlQmFzZWRUcmFuc2xpdGVyYXRvcihJRCwgZGF0YSwgbnVsbCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5IGluc3RhbmNlb2YgQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFRyYW5zbGl0ZXJhdG9yKSAoKENsYXNzKSBlbnRyeSkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUyKSB7fQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeSBpbnN0YW5jZW9mIEFsaWFzRW50cnkpIHsKKyAgICAgICAgICAgICAgICBhbGlhc1JldHVybi5hcHBlbmQoKChBbGlhc0VudHJ5KSBlbnRyeSkuYWxpYXMpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeSBpbnN0YW5jZW9mIFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKChUcmFuc2xpdGVyYXRvci5GYWN0b3J5KSBlbnRyeSkuZ2V0SW5zdGFuY2UoSUQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeSBpbnN0YW5jZW9mIENvbXBvdW5kUkJURW50cnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKChDb21wb3VuZFJCVEVudHJ5KSBlbnRyeSkuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkgaW5zdGFuY2VvZiBUcmFuc2xpdGVyYXRvcikgeworICAgICAgICAgICAgICAgIHJldHVybiAoVHJhbnNsaXRlcmF0b3IpIGVudHJ5OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGVudHJ5IHR5cGUgbXVzdCBiZSBlaXRoZXIgUlVMRVNfRk9SV0FSRCBvcgorICAgICAgICAgICAgLy8gUlVMRVNfUkVWRVJTRS4gIFdlIHByb2Nlc3MgdGhlIHJ1bGUgZGF0YSBpbnRvIGEKKyAgICAgICAgICAgIC8vIFRyYW5zbGl0ZXJhdG9yUnVsZURhdGEgb2JqZWN0LCBhbmQgcG9zc2libHkgYWxzbyBpbnRvIGFuCisgICAgICAgICAgICAvLyAuaWQgaGVhZGVyIGFuZC9vciBmb290ZXIuICBUaGVuIHdlIG1vZGlmeSB0aGUgcmVnaXN0cnkgd2l0aAorICAgICAgICAgICAgLy8gdGhlIHBhcnNlZCBkYXRhIGFuZCByZXRyeS4KKworICAgICAgICAgICAgVHJhbnNsaXRlcmF0b3JQYXJzZXIgcGFyc2VyID0gbmV3IFRyYW5zbGl0ZXJhdG9yUGFyc2VyKCk7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VFbnRyeSByZSA9IChSZXNvdXJjZUVudHJ5KSBlbnRyeTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZVJlYWRlciByID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByID0gbmV3IFJlc291cmNlUmVhZGVyKHJlLnJlc291cmNlTmFtZSwgcmUuZW5jb2RpbmcpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW47IFVURjggaXMgYWx3YXlzIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShyLCByZS5kaXJlY3Rpb24pOworICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBwdWxsIGEgcnVsZSBmcm9tIGEgbG9jYWxlIHJlc291cmNlIGJ1bmRsZSBpdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYmUgYSBMb2NhbGVFbnRyeS4KKyAgICAgICAgICAgICAgICBMb2NhbGVFbnRyeSBsZSA9IChMb2NhbGVFbnRyeSkgZW50cnk7CisgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlKGxlLnJ1bGUsIGxlLmRpcmVjdGlvbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlc2V0IGVudHJ5IHRvIHNvbWV0aGluZyB0aGF0IHdlIHByb2Nlc3MgYXQgdGhlCisgICAgICAgICAgICAvLyB0b3Agb2YgdGhlIGxvb3AsIHRoZW4gbG9vcCBiYWNrIHRvIHRoZSB0b3AuICBBcyBsb25nIGFzIHdlCisgICAgICAgICAgICAvLyBkbyB0aGlzLCB3ZSBvbmx5IGxvb3AgdGhyb3VnaCB0d2ljZSBhdCBtb3N0LgorICAgICAgICAgICAgLy8gTk9URTogVGhlIGxvZ2ljIGhlcmUgbWF0Y2hlcyB0aGF0IGluCisgICAgICAgICAgICAvLyBUcmFuc2xpdGVyYXRvci5jcmVhdGVGcm9tUnVsZXMoKS4KKyAgICAgICAgICAgIGlmIChwYXJzZXIuaWRCbG9jay5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlci5kYXRhID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm8gaWRCbG9jaywgbm8gZGF0YSAtLSB0aGlzIGlzIGp1c3QgYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gYWxpYXMgZm9yIE51bGwKKyAgICAgICAgICAgICAgICAgICAgZW50cnlXcmFwcGVyWzBdID0gbmV3IEFsaWFzRW50cnkoTnVsbFRyYW5zbGl0ZXJhdG9yLl9JRCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm8gaWRCbG9jaywgZGF0YSAhPSAwIC0tIHRoaXMgaXMgYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gb3JkaW5hcnkgUkJUX0RBVEEKKyAgICAgICAgICAgICAgICAgICAgZW50cnlXcmFwcGVyWzBdID0gcGFyc2VyLmRhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VyLmRhdGEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBpZEJsb2NrLCBubyBkYXRhIC0tIHRoaXMgaXMgYW4gYWxpYXMuICBUaGUgSUQgaGFzCisgICAgICAgICAgICAgICAgICAgIC8vIGJlZW4gbXVuZ2VkIGZyb20gcmV2ZXJzZSBpbnRvIGZvcndhcmQgbW9kZSwgaWYKKyAgICAgICAgICAgICAgICAgICAgLy8gbmVjZXNzYXJ5LCBzbyBpbnN0YW50aWF0ZSB0aGUgSUQgaW4gdGhlIGZvcndhcmQKKyAgICAgICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBlbnRyeVdyYXBwZXJbMF0gPSBuZXcgQWxpYXNFbnRyeShwYXJzZXIuaWRCbG9jayk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWRCbG9jayBhbmQgZGF0YSAtLSB0aGlzIGlzIGEgY29tcG91bmQKKyAgICAgICAgICAgICAgICAgICAgLy8gUkJUCisgICAgICAgICAgICAgICAgICAgIGVudHJ5V3JhcHBlclswXSA9IG5ldyBDb21wb3VuZFJCVEVudHJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgSUQsIHBhcnNlci5pZEJsb2NrLCBwYXJzZXIuaWRTcGxpdFBvaW50LCBwYXJzZXIuZGF0YSwgcGFyc2VyLmNvbXBvdW5kRmlsdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9VQ2hhcmFjdGVySXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VDaGFyYWN0ZXJJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDFjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9VQ2hhcmFjdGVySXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDQxNSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3Vzci9jdnMvaWN1NGovaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUNoYXJhY3Rlckl0ZXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMDcvMzEgMDM6MDQ6MjggJCAKKyAqICRSZXZpc2lvbjogMS4xMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCisKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLkNoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlcjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlJlcGxhY2VhYmxlVUNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVUNoYXJBcnJheUl0ZXJhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVUNoYXJhY3Rlckl0ZXJhdG9yV3JhcHBlcjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKKworCisvKioKKyAqIEFic3RyYWN0IGNsYXNzIHRoYXQgZGVmaW5lcyBhbiBBUEkgZm9yIGl0ZXJhdGlvbiBvbiB0ZXh0IG9iamVjdHMuVGhpcyBpcyBhbiAKKyAqIGludGVyZmFjZSBmb3IgZm9yd2FyZCBhbmQgYmFja3dhcmQgaXRlcmF0aW9uIGFuZCByYW5kb20gYWNjZXNzIGludG8gYSB0ZXh0IAorICogb2JqZWN0LiBGb3J3YXJkIGl0ZXJhdGlvbiBpcyBkb25lIHdpdGggcG9zdC1pbmNyZW1lbnQgYW5kIGJhY2t3YXJkIGl0ZXJhdGlvbiAKKyAqIGlzIGRvbmUgd2l0aCBwcmUtZGVjcmVtZW50IHNlbWFudGljcywgd2hpbGUgdGhlIAorICogPGNvZGU+amF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yPC9jb2RlPiBpbnRlcmZhY2UgbWV0aG9kcyBwcm92aWRlZCBmb3J3YXJkIAorICogaXRlcmF0aW9uIHdpdGggInByZS1pbmNyZW1lbnQiIGFuZCBiYWNrd2FyZCBpdGVyYXRpb24gd2l0aCBwcmUtZGVjcmVtZW50IAorICogc2VtYW50aWNzLiBUaGlzIEFQSSBpcyBtb3JlIGVmZmljaWVudCBmb3IgZm9yd2FyZCBpdGVyYXRpb24gb3ZlciBjb2RlIHBvaW50cy4KKyAqIFRoZSBvdGhlciBtYWpvciBkaWZmZXJlbmNlIGlzIHRoYXQgdGhpcyBBUEkgY2FuIGRvIGJvdGggY29kZSB1bml0IGFuZCBjb2RlIHBvaW50IAorICogaXRlcmF0aW9uLCA8Y29kZT5qYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I8L2NvZGU+IGNhbiBvbmx5IGl0ZXJhdGUgb3ZlciAKKyAqIGNvZGUgdW5pdHMgYW5kIGlzIGxpbWl0ZWQgdG8gQk1QICgwIC0gMHhGRkZGKQorICogQGF1dGhvciBSYW0KKyAqIEBkcmFmdCBJQ1UgMi40CisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBVQ2hhcmFjdGVySXRlcmF0b3IgCisgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50cyBDbG9uZWFibGUsVUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciB7CisKKyAgICAvKioKKyAgICAgKiBQcm90ZWN0ZWQgZGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdGhlIHN1YmNsYXNzZXMKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHByb3RlY3RlZCBVQ2hhcmFjdGVySXRlcmF0b3IoKXsKKyAgICB9CisgICAgCisgICAgLy8gc3RhdGljIGZpbmFsIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSA8Y29kZT5VQ2hhcmFjdGVySXRlcmF0b3I8L2NvZGU+IG9iamVjdCBnaXZlbiBhIAorICAgICAqIDxjb2RlPlJlcGxhY2VhYmxlPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtIHNvdXJjZSBhIHZhbGlkIHNvdXJjZSBhcyBhIDxjb2RlPlJlcGxhY2VhYmxlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuIFVDaGFyYWN0ZXJJdGVyYXRvciBvYmplY3QKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgYXJndW1lbnQgaXMgbnVsbAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVQ2hhcmFjdGVySXRlcmF0b3IgZ2V0SW5zdGFuY2UoUmVwbGFjZWFibGUgc291cmNlKXsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXBsYWNlYWJsZVVDaGFyYWN0ZXJJdGVyYXRvcihzb3VyY2UpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgPGNvZGU+VUNoYXJhY3Rlckl0ZXJhdG9yPC9jb2RlPiBvYmplY3QgZ2l2ZW4gYSAKKyAgICAgKiBzb3VyY2Ugc3RyaW5nLgorICAgICAqIEBwYXJhbSBzb3VyY2UgYSBzdHJpbmcKKyAgICAgKiBAcmV0dXJuIFVDaGFyYWN0ZXJJdGVyYXRvciBvYmplY3QKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgYXJndW1lbnQgaXMgbnVsbAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVQ2hhcmFjdGVySXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIHNvdXJjZSl7CisgICAgICAgIHJldHVybiBuZXcgUmVwbGFjZWFibGVVQ2hhcmFjdGVySXRlcmF0b3Ioc291cmNlKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIDxjb2RlPlVDaGFyYWN0ZXJJdGVyYXRvcjwvY29kZT4gb2JqZWN0IGdpdmVuIGEgCisgICAgICogc291cmNlIGNoYXJhY3RlciBhcnJheS4KKyAgICAgKiBAcGFyYW0gc291cmNlIGFuIGFycmF5IG9mIFVURi0xNiBjb2RlIHVuaXRzCisgICAgICogQHJldHVybiBVQ2hhcmFjdGVySXRlcmF0b3Igb2JqZWN0CisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGFyZ3VtZW50IGlzIG51bGwKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVUNoYXJhY3Rlckl0ZXJhdG9yIGdldEluc3RhbmNlKGNoYXJbXSBzb3VyY2UpeworICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2Uoc291cmNlLDAsc291cmNlLmxlbmd0aCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSA8Y29kZT5VQ2hhcmFjdGVySXRlcmF0b3I8L2NvZGU+IG9iamVjdCBnaXZlbiBhIAorICAgICAqIHNvdXJjZSBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICogQHBhcmFtIHNvdXJjZSBhbiBhcnJheSBvZiBVVEYtMTYgY29kZSB1bml0cworICAgICAqIEByZXR1cm4gVUNoYXJhY3Rlckl0ZXJhdG9yIG9iamVjdAorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBhcmd1bWVudCBpcyBudWxsCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVDaGFyYWN0ZXJJdGVyYXRvciBnZXRJbnN0YW5jZShjaGFyW10gc291cmNlLCBpbnQgc3RhcnQsIGludCBsaW1pdCl7CisgICAgICAgIHJldHVybiBuZXcgVUNoYXJBcnJheUl0ZXJhdG9yKHNvdXJjZSxzdGFydCxsaW1pdCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMgYSA8Y29kZT5VQ2hhcmFjdGVySXRlcmF0b3I8L2NvZGU+IG9iamVjdCBnaXZlbiBhIAorICAgICAqIHNvdXJjZSBTdHJpbmdCdWZmZXIuCisgICAgICogQHBhcmFtIHNvdXJjZSBhbiBzdHJpbmcgYnVmZmVyIG9mIFVURi0xNiBjb2RlIHVuaXRzCisgICAgICogQHJldHVybiBVQ2hhcmFjdGVySXRlcmF0b3Igb2JqZWN0CisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGFyZ3VtZW50IGlzIG51bGwKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVUNoYXJhY3Rlckl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZ0J1ZmZlciBzb3VyY2UpeworICAgICAgICByZXR1cm4gbmV3IFJlcGxhY2VhYmxlVUNoYXJhY3Rlckl0ZXJhdG9yKHNvdXJjZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIDxjb2RlPlVDaGFyYWN0ZXJJdGVyYXRvcjwvY29kZT4gb2JqZWN0IGdpdmVuIGEgCisgICAgICogQ2hhcmFjdGVySXRlcmF0b3IuCisgICAgICogQHBhcmFtIHNvdXJjZSBhIHZhbGlkIENoYXJhY3Rlckl0ZXJhdG9yIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuIFVDaGFyYWN0ZXJJdGVyYXRvciBvYmplY3QKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgYXJndW1lbnQgaXMgbnVsbAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVUNoYXJhY3Rlckl0ZXJhdG9yIGdldEluc3RhbmNlKENoYXJhY3Rlckl0ZXJhdG9yIHNvdXJjZSl7CisgICAgICAgIHJldHVybiBuZXcgQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyKHNvdXJjZSk7CisgICAgfQorICAgICAgIAorICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgPGNvZGU+amF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yPC9jb2RlPiBvYmplY3QgZm9yCisgICAgICogdGhlIHVuZGVybHlpbmcgdGV4dCBvZiB0aGlzIGl0ZXJhdG9yLiAgVGhlIHJldHVybmVkIGl0ZXJhdG9yIGlzCisgICAgICogaW5kZXBlbmRlbnQgb2YgdGhpcyBpdGVyYXRvci4KKyAgICAgKiBAcmV0dXJuIGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvciBvYmplY3QKKyAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2hhcmFjdGVySXRlcmF0b3IgZ2V0Q2hhcmFjdGVySXRlcmF0b3IoKXsKKyAgICAgICAgcmV0dXJuIG5ldyBVQ2hhcmFjdGVySXRlcmF0b3JXcmFwcGVyKHRoaXMpOworICAgIH0gICAgCisgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjb2RlIHVuaXQgYXQgdGhlIGN1cnJlbnQgaW5kZXguICBJZiBpbmRleCBpcyBvdXQKKyAgICAgKiBvZiByYW5nZSwgcmV0dXJucyBET05FLiAgSW5kZXggaXMgbm90IGNoYW5nZWQuCisgICAgICogQHJldHVybiBjdXJyZW50IGNvZGUgdW5pdAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBjdXJyZW50KCk7CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY29kZXBvaW50IGF0IHRoZSBjdXJyZW50IGluZGV4LgorICAgICAqIElmIHRoZSBjdXJyZW50IGluZGV4IGlzIGludmFsaWQsIERPTkUgaXMgcmV0dXJuZWQuCisgICAgICogSWYgdGhlIGN1cnJlbnQgaW5kZXggcG9pbnRzIHRvIGEgbGVhZCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIGZvbGxvd2luZworICAgICAqIHRyYWlsIHN1cnJvZ2F0ZSwgdGhlbiB0aGUgY29kZSBwb2ludCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSwgdGhlIGNvZGUKKyAgICAgKiB1bml0IGF0IGluZGV4IGlzIHJldHVybmVkLiAgSW5kZXggaXMgbm90IGNoYW5nZWQuIAorICAgICAqIEByZXR1cm4gY3VycmVudCBjb2RlcG9pbnQKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBpbnQgY3VycmVudENvZGVQb2ludCgpeworICAgICAgICBpbnQgY2ggPSBjdXJyZW50KCk7CisgICAgICAgIGlmKFVURjE2LmlzTGVhZFN1cnJvZ2F0ZSgoY2hhciljaCkpeworICAgICAgICAgICAgLy8gYWR2YW5jZSB0aGUgaW5kZXggdG8gZ2V0IHRoZQorICAgICAgICAgICAgLy8gbmV4dCBjb2RlIHBvaW50CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAvLyBkdWUgdG8gcG9zdCBpbmNyZW1lbnQgc2VtYW50aWNzCisgICAgICAgICAgICAvLyBjdXJyZW50KCkgYWZ0ZXIgbmV4dCgpIGFjdHVhbGx5CisgICAgICAgICAgICAvLyByZXR1cm5zIHRoZSBjaGFyIHdlIHdhbnQKKyAgICAgICAgICAgIGludCBjaDIgPSBjdXJyZW50KCk7CisgICAgICAgICAgICAvLyBjdXJyZW50IHNob3VsZCBuZXZlciBjaGFuZ2UKKyAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGluZGV4IHNvIGJhY2sgb2ZmCisgICAgICAgICAgICBwcmV2aW91cygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZihVVEYxNi5pc1RyYWlsU3Vycm9nYXRlKChjaGFyKWNoMikpeworICAgICAgICAgICAgICAgIC8vIHdlIGZvdW5kIGEgc3Vycm9nYXRlIHBhaXIgCisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBjb2RlcG9pbnQKKyAgICAgICAgICAgICAgICByZXR1cm4gVUNoYXJhY3RlclByb3BlcnR5LmdldFJhd1N1cHBsZW1lbnRhcnkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpY2gsKGNoYXIpY2gyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2g7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dAorICAgICAqIEByZXR1cm4gbGVuZ3RoIG9mIHRoZSB0ZXh0CisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldExlbmd0aCgpOworCisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBpbmRleCBpbiB0ZXh0LgorICAgICAqIEByZXR1cm4gY3VycmVudCBpbmRleCBpbiB0ZXh0LgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRJbmRleCgpOworCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBVVEYxNiBjb2RlIHVuaXQgYXQgaW5kZXgsIGFuZCBpbmNyZW1lbnRzIHRvIHRoZSBuZXh0CisgICAgICogY29kZSB1bml0IChwb3N0LWluY3JlbWVudCBzZW1hbnRpY3MpLiAgSWYgaW5kZXggaXMgb3V0IG9mCisgICAgICogcmFuZ2UsIERPTkUgaXMgcmV0dXJuZWQsIGFuZCB0aGUgaXRlcmF0b3IgaXMgcmVzZXQgdG8gdGhlIGxpbWl0CisgICAgICogb2YgdGhlIHRleHQuCisgICAgICogQHJldHVybiB0aGUgbmV4dCBVVEYxNiBjb2RlIHVuaXQsIG9yIERPTkUgaWYgdGhlIGluZGV4IGlzIGF0IHRoZSBsaW1pdAorICAgICAqICAgICAgICAgb2YgdGhlIHRleHQuCisgICAgICogQGRyYWZ0IElDVSAyLjQgIAorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgbmV4dCgpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY29kZSBwb2ludCBhdCBpbmRleCwgYW5kIGluY3JlbWVudHMgdG8gdGhlIG5leHQgY29kZQorICAgICAqIHBvaW50IChwb3N0LWluY3JlbWVudCBzZW1hbnRpY3MpLiAgSWYgaW5kZXggZG9lcyBub3QgcG9pbnQgdG8gYQorICAgICAqIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMKKyAgICAgKiA8Y29kZT5uZXh0KCk8Y29kZT4uICBPdGhlcndpc2UgdGhlIGl0ZXJhdG9yIGlzIGluY3JlbWVudGVkIHBhc3QKKyAgICAgKiB0aGUgc3Vycm9nYXRlIHBhaXIsIGFuZCB0aGUgY29kZSBwb2ludCByZXByZXNlbnRlZCBieSB0aGUgcGFpcgorICAgICAqIGlzIHJldHVybmVkLgorICAgICAqIEByZXR1cm4gdGhlIG5leHQgY29kZXBvaW50IGluIHRleHQsIG9yIERPTkUgaWYgdGhlIGluZGV4IGlzIGF0CisgICAgICogICAgICAgICB0aGUgbGltaXQgb2YgdGhlIHRleHQuCisgICAgICogQGRyYWZ0IElDVSAyLjQgIAorICAgICAqLworICAgIHB1YmxpYyBpbnQgbmV4dENvZGVQb2ludCgpeworICAgICAgICBpbnQgY2gxID0gbmV4dCgpOworICAgICAgICBpZihVVEYxNi5pc0xlYWRTdXJyb2dhdGUoKGNoYXIpY2gxKSl7CisgICAgICAgICAgICBpbnQgY2gyID0gbmV4dCgpOworICAgICAgICAgICAgaWYoVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZSgoY2hhciljaDIpKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gVUNoYXJhY3RlclByb3BlcnR5LmdldFJhd1N1cHBsZW1lbnRhcnkoKGNoYXIpY2gxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciljaDIpOworICAgICAgICAgICAgfWVsc2UgaWYgKGNoMiAhPSBET05FKSB7CisgICAgICAgICAgICAgICAgLy8gdW5tYXRjaGVkIHN1cnJvZ2F0ZSBzbyBiYWNrIG91dAorICAgICAgICAgICAgICAgIHByZXZpb3VzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNyZW1lbnQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBwcmV2aW91cyBjb2RlIHVuaXQgaW4gdGhlCisgICAgICogdGV4dCwgYW5kIHJldHVybiBpdCAocHJlLWRlY3JlbWVudCBzZW1hbnRpY3MpLiAgSWYgdGhlCisgICAgICogcmVzdWx0aW5nIGluZGV4IGlzIGxlc3MgdGhhbiAwLCB0aGUgaW5kZXggaXMgcmVzZXQgdG8gMCBhbmQKKyAgICAgKiBET05FIGlzIHJldHVybmVkLgorICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIGNvZGUgdW5pdCBpbiB0aGUgdGV4dCwgb3IgRE9ORSBpZiB0aGUgbmV3CisgICAgICogICAgICAgICBpbmRleCBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LgorICAgICAqIEBkcmFmdCBJQ1UgMi40ICAKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IHByZXZpb3VzKCk7CisKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXRyZWF0IHRvIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgY29kZSBwb2ludCBpbiB0aGUgdGV4dCwKKyAgICAgKiBhbmQgcmV0dXJuIGl0IChwcmUtZGVjcmVtZW50IHNlbWFudGljcykuICBJZiB0aGUgaW5kZXggaXMgbm90CisgICAgICogcHJlY2VlZGVkIGJ5IGEgdmFsaWQgc3Vycm9nYXRlIHBhaXIsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZQorICAgICAqIGFzIDxjb2RlPnByZXZpb3VzKCk8L2NvZGU+LiAgT3RoZXJ3aXNlIHRoZSBpdGVyYXRvciBpcworICAgICAqIGRlY3JlbWVudGVkIHRvIHRoZSBzdGFydCBvZiB0aGUgc3Vycm9nYXRlIHBhaXIsIGFuZCB0aGUgY29kZQorICAgICAqIHBvaW50IHJlcHJlc2VudGVkIGJ5IHRoZSBwYWlyIGlzIHJldHVybmVkLgorICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIGNvZGUgcG9pbnQgaW4gdGhlIHRleHQsIG9yIERPTkUgaWYgdGhlIG5ldworICAgICAqICAgICAgICAgaW5kZXggaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgdGV4dC4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNCAgCisgICAgICovCisgICAgcHVibGljIGludCBwcmV2aW91c0NvZGVQb2ludCgpeworICAgICAgICBpbnQgY2gxID0gcHJldmlvdXMoKTsKKyAgICAgICAgaWYoVVRGMTYuaXNUcmFpbFN1cnJvZ2F0ZSgoY2hhciljaDEpKXsKKyAgICAgICAgICAgIGludCBjaDIgPSBwcmV2aW91cygpOworICAgICAgICAgICAgaWYoVVRGMTYuaXNMZWFkU3Vycm9nYXRlKChjaGFyKWNoMikpeworICAgICAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeSgoY2hhciljaDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKWNoMSk7CisgICAgICAgICAgICB9ZWxzZSBpZiAoY2gyICE9IERPTkUpIHsKKyAgICAgICAgICAgICAgICAvL3VubWF0Y2hlZCB0cmFpbCBzdXJyb2dhdGUgc28gYmFjayBvdXQKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICB9ICAgCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBpbmRleCB0byB0aGUgc3BlY2lmaWVkIGluZGV4IGluIHRoZSB0ZXh0LgorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggd2l0aGluIHRoZSB0ZXh0LiAKKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaXMgdGhyb3duIGlmIGFuIGludmFsaWQgaW5kZXggaXMgCisgICAgICogICAgICAgICAgICBzdXBwbGllZAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SW5kZXgoaW50IGluZGV4KTsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIGxpbWl0LgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VG9MaW1pdCgpIHsKKwkgICAgc2V0SW5kZXgoZ2V0TGVuZ3RoKCkpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBzdGFydC4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRvU3RhcnQoKSB7CisJICAgIHNldEluZGV4KDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbGxzIHRoZSBidWZmZXIgd2l0aCB0aGUgdW5kZXJseWluZyB0ZXh0IHN0b3JhZ2Ugb2YgdGhlIGl0ZXJhdG9yCisgICAgICogSWYgdGhlIGJ1ZmZlciBjYXBhY2l0eSBpcyBub3QgZW5vdWdoIGEgZXhjZXB0aW9uIGlzIHRocm93bi4gVGhlIGNhcGFjaXR5CisgICAgICogb2YgdGhlIGZpbGwgaW4gYnVmZmVyIHNob3VsZCBhdCBsZWFzdCBiZSBlcXVhbCB0byBsZW5ndGggb2YgdGV4dCBpbiB0aGUgCisgICAgICogaXRlcmF0b3Igb2J0YWluZWQgYnkgY2FsbGluZyA8Y29kZT5nZXRMZW5ndGgoKTwvY29kZSkuCisgICAgICogPGI+VXNhZ2U6PC9iPgorICAgICAqIAorICAgICAqIDxjb2RlPgorICAgICAqIDxwcmU+CisgICAgICogICAgICAgICBVQ2hhY3Rlckl0ZXJhdG9yIGl0ZXIgPSBuZXcgVUNoYXJhY3Rlckl0ZXJhdG9yLmdldEluc3RhbmNlKHRleHQpOworICAgICAqICAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2l0ZXIuZ2V0TGVuZ3RoKCldOworICAgICAqICAgICAgICAgaXRlci5nZXRUZXh0KGJ1Zik7CisgICAgICogICAgICAgICAKKyAgICAgKiAgICAgICAgIE9SCisgICAgICogICAgICAgICBjaGFyW10gYnVmPSBuZXcgY2hhclsxXTsKKyAgICAgKiAgICAgICAgIGludCBsZW4gPSAwOworICAgICAqICAgICAgICAgZm9yKDs7KXsKKyAgICAgKiAgICAgICAgICAgICB0cnl7CisgICAgICogICAgICAgICAgICAgICAgIGxlbiA9IGl0ZXIuZ2V0VGV4dChidWYpOworICAgICAqICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgKiAgICAgICAgICAgICB9Y2F0Y2goSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKXsKKyAgICAgKiAgICAgICAgICAgICAgICAgYnVmID0gbmV3IGNoYXJbaXRlci5nZXRMZW5ndGgoKV07CisgICAgICogICAgICAgICAgICAgfQorICAgICAqICAgICAgICAgfQorICAgICAqIDwvcHJlPgorICAgICAqIDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gZmlsbEluIGFuIGFycmF5IG9mIGNoYXJzIHRvIGZpbGwgd2l0aCB0aGUgdW5kZXJseWluZyBVVEYtMTYgY29kZSAKKyAgICAgKiAgICAgICAgIHVuaXRzLgorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXJyYXkgdG8gc3RhcnQgcHV0dGluZyB0aGUgZGF0YS4KKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cyBhZGRlZCB0byBmaWxsSW4sIGFzIGEgY29udmVuaWVuY2UKKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHMgZXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2gKKyAgICAgKiAgICAgICAgICAgIHJvb20gYWZ0ZXIgb2Zmc2V0IGluIHRoZSBhcnJheSwgb3IgaWYgb2Zmc2V0IDwgMC4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNCAgCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRUZXh0KGNoYXJbXSBmaWxsSW4sIGludCBvZmZzZXQpOyAKKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG92ZXJyaWRlIGZvciA8Y29kZT5nZXRUZXh0KGNoYXJbXSwgaW50KT4vY29kZT4gdGhhdCBwcm92aWRlcworICAgICAqIGFuIG9mZnNldCBvZiAwLgorICAgICAqIEBwYXJhbSBmaWxsSW4gYW4gYXJyYXkgb2YgY2hhcnMgdG8gZmlsbCB3aXRoIHRoZSB1bmRlcmx5aW5nIFVURi0xNiBjb2RlIAorICAgICAqICAgICAgICAgdW5pdHMuCisgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMgYWRkZWQgdG8gZmlsbEluLCBhcyBhIGNvbnZlbmllbmNlCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBub3QgZW5vdWdoCisgICAgICogICAgICAgICAgICByb29tIGluIHRoZSBhcnJheS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNCAgCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBnZXRUZXh0KGNoYXJbXSBmaWxsSW4pIHsKKwkJcmV0dXJuIGdldFRleHQoZmlsbEluLCAwKTsKKyAgICB9CisgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHJldHVybmluZyB0aGUgdW5kZXJseWluZyB0ZXh0IHN0b3JhZ2UgYXMgYXMgc3RyaW5nCisgICAgICogQHJldHVybiB0aGUgdW5kZXJseWluZyB0ZXh0IHN0b3JhZ2UgaW4gdGhlIGl0ZXJhdG9yIGFzIGEgc3RyaW5nCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCWNoYXJbXSB0ZXh0ID0gbmV3IGNoYXJbZ2V0TGVuZ3RoKCldOworCQlnZXRUZXh0KHRleHQpOworCQlyZXR1cm4gbmV3IFN0cmluZyh0ZXh0KTsKKyAgICB9CisgICAgICAgCisgICAgLyoqCisgICAgICogTW92ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gYnkgdGhlIG51bWJlciBvZiBjb2RlIHVuaXRzCisgICAgICogc3BlY2lmaWVkLCBlaXRoZXIgZm9yd2FyZCBvciBiYWNrd2FyZCBkZXBlbmRpbmcgb24gdGhlIHNpZ24KKyAgICAgKiBvZiBkZWx0YSAocG9zaXRpdmUgb3IgbmVnYXRpdmUgcmVzcGVjdGl2ZWx5KS4gIElmIHRoZSByZXN1bHRpbmcKKyAgICAgKiBpbmRleCB3b3VsZCBiZSBsZXNzIHRoYW4gemVybywgdGhlIGluZGV4IGlzIHNldCB0byB6ZXJvLCBhbmQgaWYKKyAgICAgKiB0aGUgcmVzdWx0aW5nIGluZGV4IHdvdWxkIGJlIGdyZWF0ZXIgdGhhbiBsaW1pdCwgdGhlIGluZGV4IGlzCisgICAgICogc2V0IHRvIGxpbWl0LgorICAgICAqCisgICAgICogQHBhcmFtIGRlbHRhIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB0byBtb3ZlIHRoZSBjdXJyZW50CisgICAgICogICAgICAgICAgICAgIGluZGV4LgorICAgICAqIEByZXR1cm4gdGhlIG5ldyBpbmRleC4KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaXMgdGhyb3duIGlmIGFuIGludmFsaWQgaW5kZXggaXMgCisgICAgICogICAgICAgICAgICBzdXBwbGllZCAKKyAgICAgKiBAZHJhZnQgSUNVIDIuNCAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG1vdmVJbmRleChpbnQgZGVsdGEpIHsKKwkJaW50IHggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihnZXRJbmRleCgpICsgZGVsdGEsIGdldExlbmd0aCgpKSk7CisJCXNldEluZGV4KHgpOworCQlyZXR1cm4geDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb3ZlcyB0aGUgY3VycmVudCBwb3NpdGlvbiBieSB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzCisgICAgICogc3BlY2lmaWVkLCBlaXRoZXIgZm9yd2FyZCBvciBiYWNrd2FyZCBkZXBlbmRpbmcgb24gdGhlIHNpZ24gb2YKKyAgICAgKiBkZWx0YSAocG9zaXRpdmUgb3IgbmVnYXRpdmUgcmVzcGVjdGl2ZWx5KS4gSWYgdGhlIGN1cnJlbnQgaW5kZXgKKyAgICAgKiBpcyBhdCBhIHRyYWlsIHN1cnJvZ2F0ZSB0aGVuIHRoZSBmaXJzdCBhZGp1c3RtZW50IGlzIGJ5IGNvZGUKKyAgICAgKiB1bml0LCBhbmQgdGhlIHJlbWFpbmluZyBhZGp1c3RtZW50cyBhcmUgYnkgY29kZSBwb2ludHMuICBJZiB0aGUKKyAgICAgKiByZXN1bHRpbmcgaW5kZXggd291bGQgYmUgbGVzcyB0aGFuIHplcm8sIHRoZSBpbmRleCBpcyBzZXQgdG8KKyAgICAgKiB6ZXJvLCBhbmQgaWYgdGhlIHJlc3VsdGluZyBpbmRleCB3b3VsZCBiZSBncmVhdGVyIHRoYW4gbGltaXQsCisgICAgICogdGhlIGluZGV4IGlzIHNldCB0byBsaW1pdC4KKyAgICAgKiBAcGFyYW0gZGVsdGEgdGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIHRvIG1vdmUgdGhlIGN1cnJlbnQgaW5kZXguCisgICAgICogQHJldHVybiB0aGUgbmV3IGluZGV4ICAKKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaXMgdGhyb3duIGlmIGFuIGludmFsaWQgZGVsdGEgaXMgCisgICAgICogICAgICAgICAgICBzdXBwbGllZAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGludCBtb3ZlQ29kZVBvaW50SW5kZXgoaW50IGRlbHRhKXsKKyAgICAgICAgaWYoZGVsdGE+MCl7CisgICAgICAgICAgICB3aGlsZShkZWx0YT4wICYmIG5leHRDb2RlUG9pbnQoKSAhPSBET05FKXtkZWx0YS0tO30KKyAgICAgICAgfWVsc2V7CisJICAgICAgICB3aGlsZShkZWx0YTwwICYmIHByZXZpb3VzQ29kZVBvaW50KCkgIT0gRE9ORSl7ZGVsdGErKzt9CisgICAgICAgIH0KKyAgICAgICAgaWYoZGVsdGEhPTApeworICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICByZXR1cm4gZ2V0SW5kZXgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGl0ZXJhdG9yLCBpbmRlcGVuZGVudCBmcm9tIG90aGVyIGl0ZXJhdG9ycy4KKyAgICAgKiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gY2xvbmUgdGhlIGl0ZXJhdG9yLCByZXR1cm5zIG51bGwuCisgICAgICogQHJldHVybiBjb3B5IG9mIHRoaXMgaXRlcmF0b3IKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb257CisJICAgIHJldHVybiBzdXBlci5jbG9uZSgpOworICAgIH0gICAKKyAgICAKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Nzg0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9VRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3Vzci9jdnMvaWN1NGovaWN1NGovc3JjL2NvbS9pYm0vaWN1L2ltcGwvVUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzA2LzIwIDAxOjE4OjA5ICQgCisgKiAkUmV2aXNpb246IDEuMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworLyoqCisgKiBJbnRlcmZhY2UgdGhhdCBkZWZpbmVzIGFuIEFQSSBmb3IgZm9yd2FyZC1vbmx5IGl0ZXJhdGlvbgorICogb24gdGV4dCBvYmplY3RzLgorICogVGhpcyBpcyBhIG1pbmltYWwgaW50ZXJmYWNlIGZvciBpdGVyYXRpb24gd2l0aG91dCByYW5kb20gYWNjZXNzCisgKiBvciBiYWNrd2FyZHMgaXRlcmF0aW9uLiBJdCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3Igd3JhcHBpbmcKKyAqIHN0cmVhbXMgd2l0aCBjb252ZXJ0ZXJzIGludG8gYW4gb2JqZWN0IGZvciBjb2xsYXRpb24gb3IKKyAqIG5vcm1hbGl6YXRpb24uCisgKgorICogPHA+Q2hhcmFjdGVycyBjYW4gYmUgYWNjZXNzZWQgaW4gdHdvIHdheXM6IGFzIGNvZGUgdW5pdHMgb3IgYXMKKyAqIGNvZGUgcG9pbnRzLgorICogVW5pY29kZSBjb2RlIHBvaW50cyBhcmUgMjEtYml0IGludGVnZXJzIGFuZCBhcmUgdGhlIHNjYWxhciB2YWx1ZXMKKyAqIG9mIFVuaWNvZGUgY2hhcmFjdGVycy4gSUNVIHVzZXMgdGhlIHR5cGUgPGNvZGU+aW50PC9jb2RlPiBmb3IgdGhlbS4KKyAqIFVuaWNvZGUgY29kZSB1bml0cyBhcmUgdGhlIHN0b3JhZ2UgdW5pdHMgb2YgYSBnaXZlbgorICogVW5pY29kZS9VQ1MgVHJhbnNmb3JtYXRpb24gRm9ybWF0IChhIGNoYXJhY3RlciBlbmNvZGluZyBzY2hlbWUpLgorICogV2l0aCBVVEYtMTYsIGFsbCBjb2RlIHBvaW50cyBjYW4gYmUgcmVwcmVzZW50ZWQgd2l0aCBlaXRoZXIgb25lCisgKiBvciB0d28gY29kZSB1bml0cyAoInN1cnJvZ2F0ZXMiKS4KKyAqIFN0cmluZyBzdG9yYWdlIGlzIHR5cGljYWxseSBiYXNlZCBvbiBjb2RlIHVuaXRzLCB3aGlsZSBwcm9wZXJ0aWVzCisgKiBvZiBjaGFyYWN0ZXJzIGFyZSB0eXBpY2FsbHkgZGV0ZXJtaW5lZCB1c2luZyBjb2RlIHBvaW50IHZhbHVlcy4KKyAqIFNvbWUgcHJvY2Vzc2VzIG1heSBiZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggc2VxdWVuY2VzIG9mIGNvZGUgdW5pdHMsCisgKiBvciBpdCBtYXkgYmUga25vd24gdGhhdCBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gYW4KKyAqIGFsZ29yaXRobSBjYW4gYmUgcmVwcmVzZW50ZWQgd2l0aCBzaW5nbGUgY29kZSB1bml0cy4KKyAqIE90aGVyIHByb2Nlc3NlcyB3aWxsIG5lZWQgdG8gdXNlIHRoZSBjb2RlIHBvaW50IGFjY2VzcyBmdW5jdGlvbnMuPC9wPgorICoKKyAqIDxwPkZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciBwcm92aWRlcyBuZXh0KCkgdG8gYWNjZXNzCisgKiBhIGNvZGUgdW5pdCBhbmQgYWR2YW5jZSBhbiBpbnRlcm5hbCBwb3NpdGlvbiBpbnRvIHRoZSB0ZXh0IG9iamVjdCwKKyAqIHNpbWlsYXIgdG8gYSA8Y29kZT5yZXR1cm4gdGV4dFtwb3NpdGlvbisrXTwvY29kZT4uPGJyPgorICogSXQgcHJvdmlkZXMgbmV4dENvZGVQb2ludCgpIHRvIGFjY2VzcyBhIGNvZGUgcG9pbnQgYW5kIGFkdmFuY2UgYW4gaW50ZXJuYWwKKyAqIHBvc2l0aW9uLjwvcD4KKyAqCisgKiA8cD5uZXh0Q29kZVBvaW50KCkgYXNzdW1lcyB0aGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIHRoYXQgb2YKKyAqIHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIHBvaW50LCBpLmUuLCBvZiBpdHMgZmlyc3QgY29kZSB1bml0LgorICogQWZ0ZXIgbmV4dENvZGVQb2ludCgpLCB0aGlzIHdpbGwgYmUgdHJ1ZSBhZ2Fpbi4KKyAqIEluIGdlbmVyYWwsIGFjY2VzcyB0byBjb2RlIHVuaXRzIGFuZCBjb2RlIHBvaW50cyBpbiB0aGUgc2FtZQorICogaXRlcmF0aW9uIGxvb3Agc2hvdWxkIG5vdCBiZSBtaXhlZC4gSW4gVVRGLTE2LCBpZiB0aGUgY3VycmVudCBwb3NpdGlvbgorICogaXMgb24gYSBzZWNvbmQgY29kZSB1bml0IChMb3cgU3Vycm9nYXRlKSwgdGhlbiBvbmx5IHRoYXQgY29kZSB1bml0CisgKiBpcyByZXR1cm5lZCBldmVuIGJ5IG5leHRDb2RlUG9pbnQoKS48L3A+CisgKgorICogVXNhZ2U6CisgKiA8Y29kZT4gCisgKiAgcHVibGljIHZvaWQgZnVuY3Rpb24xKFVGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IgaXQpIHsKKyAqICAgICBpbnQgYzsKKyAqICAgICB3aGlsZSgoYz1pdC5uZXh0KCkpIT1VRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yLkRPTkUpIHsKKyAqICAgICAgICAgLy8gdXNlIGMKKyAqICAgICAgfQorICogIH0KKyAqIDwvY29kZT4KKyAqIDwvcD4KKyAqIEBkcmFmdCBJQ1UgMi40CisgKgorICovCisKK3B1YmxpYyBpbnRlcmZhY2UgVUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciB7CisgICAgICAKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0b3IgdGhhdCB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZHMgb2YgdGhlIFVURjE2IHRleHQuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET05FID0gLTE7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVVRGMTYgY29kZSB1bml0IGF0IGluZGV4LCBhbmQgaW5jcmVtZW50cyB0byB0aGUgbmV4dAorICAgICAqIGNvZGUgdW5pdCAocG9zdC1pbmNyZW1lbnQgc2VtYW50aWNzKS4gIElmIGluZGV4IGlzIG91dCBvZgorICAgICAqIHJhbmdlLCBET05FIGlzIHJldHVybmVkLCBhbmQgdGhlIGl0ZXJhdG9yIGlzIHJlc2V0IHRvIHRoZSBsaW1pdAorICAgICAqIG9mIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gdGhlIG5leHQgVVRGMTYgY29kZSB1bml0LCBvciBET05FIGlmIHRoZSBpbmRleCBpcyBhdCB0aGUgbGltaXQKKyAgICAgKiAgICAgICAgIG9mIHRoZSB0ZXh0LgorICAgICAqIEBkcmFmdCBJQ1UgMi40ICAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG5leHQoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNvZGUgcG9pbnQgYXQgaW5kZXgsIGFuZCBpbmNyZW1lbnRzIHRvIHRoZSBuZXh0IGNvZGUKKyAgICAgKiBwb2ludCAocG9zdC1pbmNyZW1lbnQgc2VtYW50aWNzKS4gIElmIGluZGV4IGRvZXMgbm90IHBvaW50IHRvIGEKKyAgICAgKiB2YWxpZCBzdXJyb2dhdGUgcGFpciwgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzCisgICAgICogPGNvZGU+bmV4dCgpPGNvZGU+LiAgT3RoZXJ3aXNlIHRoZSBpdGVyYXRvciBpcyBpbmNyZW1lbnRlZCBwYXN0CisgICAgICogdGhlIHN1cnJvZ2F0ZSBwYWlyLCBhbmQgdGhlIGNvZGUgcG9pbnQgcmVwcmVzZW50ZWQgYnkgdGhlIHBhaXIKKyAgICAgKiBpcyByZXR1cm5lZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBuZXh0IGNvZGVwb2ludCBpbiB0ZXh0LCBvciBET05FIGlmIHRoZSBpbmRleCBpcyBhdAorICAgICAqICAgICAgICAgdGhlIGxpbWl0IG9mIHRoZSB0ZXh0LgorICAgICAqIEBkcmFmdCBJQ1UgMi40ICAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG5leHRDb2RlUG9pbnQoKTsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVVRGMTYuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VURjE2LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI5MjQ4YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VURjE2LmphdmEKQEAgLTAsMCArMSwyNjU5IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVVRGMTYuamF2YSx2ICQgCisqICREYXRlOiAyMDAyLzEyLzA1IDAyOjM3OjI3ICQgCisqICRSZXZpc2lvbjogMS4yNyAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLk5vcm1hbGl6ZXJJbXBsOworLyoqCisgKiA8cD5TdGFuZGFsb25lIHV0aWxpdHkgY2xhc3MgcHJvdmlkaW5nIFVURjE2IGNoYXJhY3RlciBjb252ZXJzaW9ucyBhbmQgCisgKiBpbmRleGluZyBjb252ZXJzaW9ucy48L3A+CisgKiA8cD5Db2RlIHRoYXQgdXNlcyBzdHJpbmdzIGFsb25lIHJhcmVseSBuZWVkIG1vZGlmaWNhdGlvbi4gCisgKiBCeSBkZXNpZ24sIFVURi0xNiBkb2VzIG5vdCBhbGxvdyBvdmVybGFwLCBzbyBzZWFyY2hpbmcgZm9yIHN0cmluZ3MgaXMgYSBzYWZlIAorICogb3BlcmF0aW9uLiBTaW1pbGFybHksIGNvbmNhdGVuYXRpb24gaXMgYWx3YXlzIHNhZmUuIFN1YnN0cmluZ2luZyBpcyBzYWZlIGlmIAorICogdGhlIHN0YXJ0IGFuZCBlbmQgYXJlIGJvdGggb24gVVRGLTMyIGJvdW5kYXJpZXMuIEluIG5vcm1hbCBjb2RlLCB0aGUgdmFsdWVzIAorICogZm9yIHN0YXJ0IGFuZCBlbmQgYXJlIG9uIHRob3NlIGJvdW5kYXJpZXMsIHNpbmNlIHRoZXkgYXJvc2UgZnJvbSBvcGVyYXRpb25zIAorICogbGlrZSBzZWFyY2hpbmcuIElmIG5vdCwgdGhlIG5lYXJlc3QgVVRGLTMyIGJvdW5kYXJpZXMgY2FuIGJlIGRldGVybWluZWQgCisgKiB1c2luZyA8Y29kZT5ib3VuZHMoKTwvY29kZT4uPC9wPgorICogPHN0cm9uZz5FeGFtcGxlczo8L3N0cm9uZz4KKyAqIDxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgaWxsdXN0cmF0ZSB1c2Ugb2Ygc29tZSBvZiB0aGVzZSBtZXRob2RzLiAKKyAqIDxwcmU+CisgKiAvLyBpdGVyYXRpb24gZm9yd2FyZHM6IE9yaWdpbmFsCisgKiBmb3IgKGludCBpID0gMDsgaSAmbHQ7IHMubGVuZ3RoKCk7ICsraSkgeworICqgoKBjaGFyIGNoID0gcy5jaGFyQXQoaSk7CisgKqCgoGRvU29tZXRoaW5nV2l0aChjaCk7CisgKiB9CisgKgorICogLy8gaXRlcmF0aW9uIGZvcndhcmRzOiBDaGFuZ2VzIGZvciBVVEYtMzIKKyAqIGludCBjaDsKKyAqIGZvciAoaW50IGkgPSAwOyBpICZsdDsgcy5sZW5ndGgoKTsgaSs9VVRGMTYuZ2V0Q2hhckNvdW50KGNoKSkgeworICqgoKBjaCA9IFVURjE2LmNoYXJBdChzLGkpOworICqgoKBkb1NvbWV0aGluZ1dpdGgoY2gpOworICogfQorICoKKyAqIC8vIGl0ZXJhdGlvbiBiYWNrd2FyZHM6IE9yaWdpbmFsCisgKiBmb3IgKGludCBpID0gcy5sZW5ndGgoKSAtMTsgaSA+PSAwOyAtLWkpIHsKKyAqoKCgY2hhciBjaCA9IHMuY2hhckF0KGkpOworICogoKCgZG9Tb21ldGhpbmdXaXRoKGNoKTsKKyAqIH0KKyAqICAKKyAqIC8vIGl0ZXJhdGlvbiBiYWNrd2FyZHM6IENoYW5nZXMgZm9yIFVURi0zMgorICogaW50IGNoOworICogZm9yIChpbnQgaSA9IHMubGVuZ3RoKCkgLTE7IGkgPiAwOyBpLT1VVEYxNi5nZXRDaGFyQ291bnQoY2gpKSB7CisgKqCgoGNoID0gVVRGMTYuY2hhckF0KHMsaSk7CisgKqCgoGRvU29tZXRoaW5nV2l0aChjaCk7CisgKiB9CisgKiA8L3ByZT4KKyAqIDxzdHJvbmc+Tm90ZXM6PC9zdHJvbmc+CisgKiA8dWw+CisgKiAgIDxsaT4KKyAqICAgPHN0cm9uZz5OYW1pbmc6PC9zdHJvbmc+IEZvciBjbGFyaXR5LCBIaWdoIGFuZCBMb3cgc3Vycm9nYXRlcyBhcmUgY2FsbGVkIAorICogICA8Y29kZT5MZWFkPC9jb2RlPiBhbmQgPGNvZGU+VHJhaWw8L2NvZGU+IGluIHRoZSBBUEksIHdoaWNoIGdpdmVzIGEgYmV0dGVyIAorICogICBzZW5zZSBvZiB0aGVpciBvcmRlcmluZyBpbiBhIHN0cmluZy4gPGNvZGU+b2Zmc2V0MTY8L2NvZGU+IGFuZCAKKyAqICAgPGNvZGU+b2Zmc2V0MzI8L2NvZGU+IGFyZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIG9mZnNldHMgdG8gVVRGLTE2IAorICogICBib3VuZGFyaWVzIHZzIG9mZnNldHMgdG8gVVRGLTMyIGJvdW5kYXJpZXMuIDxjb2RlPmludCBjaGFyMzI8L2NvZGU+IGlzIAorICogICB1c2VkIHRvIGNvbnRhaW4gVVRGLTMyIGNoYXJhY3RlcnMsIGFzIG9wcG9zZWQgdG8gPGNvZGU+Y2hhcjE2PC9jb2RlPiwgCisgKiAgIHdoaWNoIGlzIGEgVVRGLTE2IGNvZGUgdW5pdC4KKyAqICAgPC9saT4KKyAqICAgPGxpPgorICogICA8c3Ryb25nPlJvdW5kdHJpcHBpbmcgT2Zmc2V0czo8L3N0cm9uZz4gWW91IGNhbiBhbHdheXMgcm91bmR0cmlwIGZyb20gYSAKKyAqICAgVVRGLTMyIG9mZnNldCB0byBhIFVURi0xNiBvZmZzZXQgYW5kIGJhY2suIEJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVuY2UgaW4gCisgKiAgIHN0cnVjdHVyZSwgeW91IGNhbiByb3VuZHRyaXAgZnJvbSBhIFVURi0xNiBvZmZzZXQgdG8gYSBVVEYtMzIgb2Zmc2V0IGFuZCAKKyAqICAgYmFjayBpZiBhbmQgb25seSBpZiA8Y29kZT5ib3VuZHMoc3RyaW5nLCBvZmZzZXQxNikgIT0gVFJBSUw8L2NvZGU+LgorICogICA8L2xpPgorICogICA8bGk+CisgKiAgICA8c3Ryb25nPkV4Y2VwdGlvbnM6PC9zdHJvbmc+IFRoZSBlcnJvciBjaGVja2luZyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiAKKyAqICAgaWYgaW5kaWNlcyBhcmUgb3V0IG9mIGJvdW5kcy4gT3RoZXIgdGhhbiB0aGFuIHRoYXQsIGFsbCBtZXRob2RzIHdpbGwgCisgKiAgIGJlaGF2ZSByZWFzb25hYmx5LCBldmVuIGlmIHVubWF0Y2hlZCBzdXJyb2dhdGVzIG9yIG91dC1vZi1ib3VuZHMgVVRGLTMyIAorICogICB2YWx1ZXMgYXJlIHByZXNlbnQuIDxjb2RlPlVDaGFyYWN0ZXIuaXNMZWdhbCgpPC9jb2RlPiBjYW4gYmUgdXNlZCB0byBjaGVjayAKKyAqICAgZm9yIHZhbGlkaXR5IGlmIGRlc2lyZWQuCisgKiAgIDwvbGk+CisgKiAgIDxsaT4KKyAqICAgPHN0cm9uZz5Vbm1hdGNoZWQgU3Vycm9nYXRlczo8L3N0cm9uZz4gSWYgdGhlIHN0cmluZyBjb250YWlucyB1bm1hdGNoZWQgCisgKiAgIHN1cnJvZ2F0ZXMsIHRoZW4gdGhlc2UgYXJlIGNvdW50ZWQgYXMgb25lIFVURi0zMiB2YWx1ZS4gVGhpcyBtYXRjaGVzIAorICogICB0aGVpciBpdGVyYXRpb24gYmVoYXZpb3IsIHdoaWNoIGlzIHZpdGFsLiBJdCBhbHNvIG1hdGNoZXMgY29tbW9uIGRpc3BsYXkgCisgKiAgIHByYWN0aWNlIGFzIG1pc3NpbmcgZ2x5cGhzIChzZWUgdGhlIFVuaWNvZGUgU3RhbmRhcmQgU2VjdGlvbiA1LjQsIDUuNSkuCisgKiAgIDwvbGk+CisgKiAgIDxsaT4KKyAqICAgICA8c3Ryb25nPk9wdGltaXphdGlvbjo8L3N0cm9uZz4gVGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgbWF5IG5lZWQgCisgKiAgICAgb3B0aW1pemF0aW9uIGlmIHRoZSBjb21waWxlciBkb2Vzbid0IGZvbGQgc3RhdGljIGZpbmFsIG1ldGhvZHMuIFNpbmNlIAorICogICAgIHN1cnJvZ2F0ZSBwYWlycyB3aWxsIGZvcm0gYW4gZXhjZWVkaW5nIHNtYWxsIHBlcmNlbnRhZ2Ugb2YgYWxsIHRoZSB0ZXh0IAorICogICAgIGluIHRoZSB3b3JsZCwgdGhlIHNpbmdsZXRvbiBjYXNlIHNob3VsZCBhbHdheXMgYmUgb3B0aW1pemVkIGZvci4KKyAqICAgPC9saT4KKyAqIDwvdWw+CisgKiBAYXV0aG9yIE1hcmsgRGF2aXMsIHdpdGggaGVscCBmcm9tIE1hcmt1cyBTY2hlcmVyCisgKiBAc3RhYmxlIElDVSAyLjEKKyAqLworCitwdWJsaWMgZmluYWwgY2xhc3MgVVRGMTYKK3sKKyAgICAvLyBwdWJsaWMgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgICogVmFsdWUgcmV0dXJuZWQgaW4gPGNvZGU+PGEgaHJlZj0iI2JvdW5kcyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj4KKyAgICAgKiBib3VuZHMoKTwvYT48L2NvZGU+LgorICAgICAqIFRoZXNlIHZhbHVlcyBhcmUgY2hvc2VuIHNwZWNpZmljYWxseSBzbyB0aGF0IGl0IGFjdHVhbGx5IHJlcHJlc2VudHMgIAorICAgICAqIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIAorICAgICAqIFtvZmZzZXQxNiAtICh2YWx1ZSA+PiAyKSwgb2Zmc2V0MTYgKyAodmFsdWUgJiAzKV0KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSU5HTEVfQ0hBUl9CT1VOREFSWSA9IDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFQURfU1VSUk9HQVRFX0JPVU5EQVJZID0gMiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBSUxfU1VSUk9HQVRFX0JPVU5EQVJZID0gNTsKKyAgICAvKiogCisgICAgICogVGhlIGxvd2VzdCBVbmljb2RlIGNvZGUgcG9pbnQgdmFsdWUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09ERVBPSU5UX01JTl9WQUxVRSA9IDA7CisgICAgLyoqCisgICAgICogVGhlIGhpZ2hlc3QgVW5pY29kZSBjb2RlIHBvaW50IHZhbHVlIChzY2FsYXIgdmFsdWUpIGFjY29yZGluZyB0byB0aGUgCisgICAgICogVW5pY29kZSBTdGFuZGFyZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0RFUE9JTlRfTUFYX1ZBTFVFID0gMHgxMGZmZmY7IAorICAgIC8qKgorICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIGZvciBTdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUExFTUVOVEFSWV9NSU5fVkFMVUUgID0gMHgxMDAwMDsgIAorICAgIC8qKgorICAgICAqIExlYWQgc3Vycm9nYXRlIG1pbmltdW0gdmFsdWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgPSAweEQ4MDA7CisJLyoqCisgICAgICogVHJhaWwgc3Vycm9nYXRlIG1pbmltdW0gdmFsdWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFJTF9TVVJST0dBVEVfTUlOX1ZBTFVFID0gMHhEQzAwOyAKKyAgICAvKioKKyAgICAgKiBMZWFkIHN1cnJvZ2F0ZSBtYXhpbXVtIHZhbHVlCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVBRF9TVVJST0dBVEVfTUFYX1ZBTFVFID0gMHhEQkZGOworCS8qKgorICAgICAqIFRyYWlsIHN1cnJvZ2F0ZSBtYXhpbXVtIHZhbHVlCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBSUxfU1VSUk9HQVRFX01BWF9WQUxVRSA9IDB4REZGRjsKKyAgICAvKioKKyAgICAgKiBTdXJyb2dhdGUgbWluaW11bSB2YWx1ZQorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUlJPR0FURV9NSU5fVkFMVUUgPSBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUU7CisgICAgLyoqCisgICAgICogTWF4aW11bSBzdXJyb2dhdGUgdmFsdWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVJST0dBVEVfTUFYX1ZBTFVFID0gVFJBSUxfU1VSUk9HQVRFX01BWF9WQUxVRTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvLyBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgICogUHJldmVudCBpbnN0YW5jZSBmcm9tIGJlaW5nIGNyZWF0ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBVVEYxNigpIAorICAgIHsKKyAgICB9CisKKyAgICAvLyBwdWJsaWMgbWV0aG9kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCisgICAgLyoqCisgICAgICogRXh0cmFjdCBhIHNpbmdsZSBVVEYtMzIgdmFsdWUgZnJvbSBhIHN0cmluZy4KKyAgICAgKiBVc2VkIHdoZW4gaXRlcmF0aW5nIGZvcndhcmRzIG9yIGJhY2t3YXJkcyAod2l0aCAKKyAgICAgKiA8Y29kZT5VVEYxNi5nZXRDaGFyQ291bnQoKTwvY29kZT4sIGFzIHdlbGwgYXMgcmFuZG9tIGFjY2Vzcy4gSWYgYSAKKyAgICAgKiB2YWxpZGl0eSBjaGVjayBpcyByZXF1aXJlZCwgdXNlIAorICAgICAqIDxjb2RlPjxhIGhyZWY9Ii4uL1VDaGFyYWN0ZXIuaHRtbCNpc0xlZ2FsKGNoYXIpIj4KKyAgICAgKiBVQ2hhcmFjdGVyLmlzTGVnYWwoKTwvYT48L2NvZGU+IG9uIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICogSWYgdGhlIGNoYXIgcmV0cmlldmVkIGlzIHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciwgaXRzIHN1cHBsZW1lbnRhcnkgCisgICAgICogY2hhcmFjdGVyIHdpbGwgYmUgcmV0dXJuZWQuIElmIGEgY29tcGxldGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIgaXMgCisgICAgICogbm90IGZvdW5kIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlciB3aWxsIGJlIHJldHVybmVkCisgICAgICogQHBhcmFtIHNvdXJjZSBhcnJheSBvZiBVVEYtMTYgY2hhcnMKKyAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgVVRGLTE2IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIGNoYXJhY3Rlci4KKyAgICAgKiBAcmV0dXJuIFVURi0zMiB2YWx1ZSBmb3IgdGhlIFVURi0zMiB2YWx1ZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGFyIGF0IAorICAgICAqICAgICAgICAgb2Zmc2V0MTYuIFRoZSBib3VuZGFyaWVzIG9mIHRoYXQgY29kZXBvaW50IGFyZSB0aGUgc2FtZSBhcyBpbiAKKyAgICAgKiAgICAgICAgIDxjb2RlPmJvdW5kczMyKCk8L2NvZGU+LiAKKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gdGhyb3duIGlmIG9mZnNldDE2IGlzIG91dCBvZiAKKyAgICAgKiAgICAgICAgICAgIGJvdW5kcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBjaGFyQXQoU3RyaW5nIHNvdXJjZSwgaW50IG9mZnNldDE2KSAKKyAgICB7ICAgICAgICAgICAgIAorICAgICAgICBpZiAob2Zmc2V0MTYgPCAwIHx8IG9mZnNldDE2ID49IHNvdXJjZS5sZW5ndGgoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24ob2Zmc2V0MTYpOworICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgIGNoYXIgc2luZ2xlID0gc291cmNlLmNoYXJBdChvZmZzZXQxNik7CisgICAgICAgIGlmIChzaW5nbGUgPCBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgfHwgCisgICAgICAgICAgICBzaW5nbGUgPiBUUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICByZXR1cm4gc2luZ2xlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29udmVydCB0aGUgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHkgaW4gdXNhZ2UsIGFuZCBiZWNhdXNlIHRoZSBmcmVxdWVuY3kgb2YgcGFpcnMgaXMgCisgICAgICAgIC8vIGxvdywgbG9vayBib3RoIGRpcmVjdGlvbnMuCisgICAgICAgICAgICAgICAgCisJICAgIGlmIChzaW5nbGUgPD0gTEVBRF9TVVJST0dBVEVfTUFYX1ZBTFVFKSB7CisJICAgICAgICArKyBvZmZzZXQxNjsKKwkgICAgICAgIGlmIChzb3VyY2UubGVuZ3RoKCkgIT0gb2Zmc2V0MTYpIHsKKyAgICAJICAgICAgICBjaGFyIHRyYWlsID0gc291cmNlLmNoYXJBdChvZmZzZXQxNik7CisJICAgICAgICAgICAgaWYgKHRyYWlsID49IFRSQUlMX1NVUlJPR0FURV9NSU5fVkFMVUUgJiYKKwkgICAgICAgICAgICAgICAgdHJhaWwgPD0gVFJBSUxfU1VSUk9HQVRFX01BWF9WQUxVRSkgeworCSAgICAgICAgICAgICAgICByZXR1cm4gVUNoYXJhY3RlclByb3BlcnR5LmdldFJhd1N1cHBsZW1lbnRhcnkoc2luZ2xlLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgIH0gCisJICAgIGVsc2UgCisJICAgIHsgCisJICAgICAgICAtLSBvZmZzZXQxNjsKKwkgICAgICAgIGlmIChvZmZzZXQxNiA+PSAwKSB7CisJICAgICAgICAJLy8gc2luZ2xlIGlzIGEgdHJhaWwgc3Vycm9nYXRlIHNvCisJICAgICAgICAJY2hhciBsZWFkID0gc291cmNlLmNoYXJBdChvZmZzZXQxNik7CisJICAgICAgICAJaWYgKGxlYWQgPj0gTEVBRF9TVVJST0dBVEVfTUlOX1ZBTFVFICYmCisJICAgICAgICAJICAgIGxlYWQgPD0gTEVBRF9TVVJST0dBVEVfTUFYX1ZBTFVFKSB7CisJICAgICAgICAgCSAgIHJldHVybiBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeShsZWFkLCAKKwkgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSk7CisJICAgICAgICAJfQorCSAgICAgICAgfQorCSAgICB9IAorCSAgICByZXR1cm4gc2luZ2xlOyAvLyByZXR1cm4gdW5tYXRjaGVkIHN1cnJvZ2F0ZQorICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIEV4dHJhY3QgYSBzaW5nbGUgVVRGLTMyIHZhbHVlIGZyb20gYSBzdHJpbmcuCisgICAgICogVXNlZCB3aGVuIGl0ZXJhdGluZyBmb3J3YXJkcyBvciBiYWNrd2FyZHMgKHdpdGgKKyAgICAgKiA8Y29kZT5VVEYxNi5nZXRDaGFyQ291bnQoKTwvY29kZT4sIGFzIHdlbGwgYXMgcmFuZG9tIGFjY2Vzcy4gSWYgYSAKKyAgICAgKiB2YWxpZGl0eSBjaGVjayBpcyByZXF1aXJlZCwgdXNlIAorICAgICAqIDxjb2RlPjxhIGhyZWY9Ii4uL1VDaGFyYWN0ZXIuaHRtbCNpc0xlZ2FsKGNoYXIpIj5VQ2hhcmFjdGVyLmlzTGVnYWwoKQorICAgICAqIDwvYT48L2NvZGU+IG9uIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICogSWYgdGhlIGNoYXIgcmV0cmlldmVkIGlzIHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciwgaXRzIHN1cHBsZW1lbnRhcnkKKyAgICAgKiBjaGFyYWN0ZXIgd2lsbCBiZSByZXR1cm5lZC4gSWYgYSBjb21wbGV0ZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlciBpcyAKKyAgICAgKiBub3QgZm91bmQgdGhlIGluY29tcGxldGUgY2hhcmFjdGVyIHdpbGwgYmUgcmV0dXJuZWQKKyAgICAgKiBAcGFyYW0gc291cmNlIFVURi0xNiBjaGFycyBzdHJpbmcgYnVmZmVyCisgICAgICogQHBhcmFtIG9mZnNldDE2IFVURi0xNiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaGFyYWN0ZXIuCisgICAgICogQHJldHVybiBVVEYtMzIgdmFsdWUgZm9yIHRoZSBVVEYtMzIgdmFsdWUgdGhhdCBjb250YWlucyB0aGUgY2hhciBhdAorICAgICAqICAgICAgICAgb2Zmc2V0MTYuIFRoZSBib3VuZGFyaWVzIG9mIHRoYXQgY29kZXBvaW50IGFyZSB0aGUgc2FtZSBhcyBpbgorICAgICAqICAgICAgICAgPGNvZGU+Ym91bmRzMzIoKTwvY29kZT4uCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHRocm93biBpZiBvZmZzZXQxNiBpcyBvdXQgb2YgCisgICAgICogICAgICAgICAgICBib3VuZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgY2hhckF0KFN0cmluZ0J1ZmZlciBzb3VyY2UsIGludCBvZmZzZXQxNikKKyAgICB7CisgICAgICAgIGlmIChvZmZzZXQxNiA8IDAgfHwgb2Zmc2V0MTYgPj0gc291cmNlLmxlbmd0aCgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQxNik7CisgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgY2hhciBzaW5nbGUgPSBzb3VyY2UuY2hhckF0KG9mZnNldDE2KTsKKyAgICAgICAgaWYgKCFpc1N1cnJvZ2F0ZShzaW5nbGUpKSB7CisgICAgICAgICAgICByZXR1cm4gc2luZ2xlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29udmVydCB0aGUgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHkgaW4gdXNhZ2UsIGFuZCBiZWNhdXNlIHRoZSBmcmVxdWVuY3kgb2YgcGFpcnMgaXMgCisgICAgICAgIC8vIGxvdywgbG9vayBib3RoIGRpcmVjdGlvbnMuCisgICAgICAgICAgICAgICAgCisJICAgIGlmIChzaW5nbGUgPD0gTEVBRF9TVVJST0dBVEVfTUFYX1ZBTFVFKSAKKwkgICAgeworCSAgICAgICAgKysgb2Zmc2V0MTY7CisJICAgICAgICBpZiAoc291cmNlLmxlbmd0aCgpICE9IG9mZnNldDE2KQorCSAgICAgICAgeworCSAgICAgICAgY2hhciB0cmFpbCA9IHNvdXJjZS5jaGFyQXQob2Zmc2V0MTYpOworCSAgICAgICAgaWYgKGlzVHJhaWxTdXJyb2dhdGUodHJhaWwpKQorCSAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeShzaW5nbGUsIHRyYWlsKTsKKwkgICAgICAgIH0KKwkgICAgfSAKKwkgICAgZWxzZSAKKwkgICAgeyAKKwkgICAgICAgIC0tIG9mZnNldDE2OworCSAgICAgICAgaWYgKG9mZnNldDE2ID49IDApCisJICAgICAgICB7CisJICAgICAgICAvLyBzaW5nbGUgaXMgYSB0cmFpbCBzdXJyb2dhdGUgc28KKwkgICAgICAgIGNoYXIgbGVhZCA9IHNvdXJjZS5jaGFyQXQob2Zmc2V0MTYpOworCSAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShsZWFkKSkgeworCSAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0UmF3U3VwcGxlbWVudGFyeShsZWFkLCBzaW5nbGUpOworCSAgICAgICAgfQorCSAgICAgICAgfQorCSAgICB9IAorCSAgICByZXR1cm4gc2luZ2xlOyAvLyByZXR1cm4gdW5tYXRjaGVkIHN1cnJvZ2F0ZQorICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIEV4dHJhY3QgYSBzaW5nbGUgVVRGLTMyIHZhbHVlIGZyb20gYSBzdWJzdHJpbmcuCisgICAgICogVXNlZCB3aGVuIGl0ZXJhdGluZyBmb3J3YXJkcyBvciBiYWNrd2FyZHMgKHdpdGgKKyAgICAgKiA8Y29kZT5VVEYxNi5nZXRDaGFyQ291bnQoKTwvY29kZT4sIGFzIHdlbGwgYXMgcmFuZG9tIGFjY2Vzcy4gSWYgYQorICAgICAqIHZhbGlkaXR5IGNoZWNrIGlzIHJlcXVpcmVkLCB1c2UgCisgICAgICogPGNvZGU+PGEgaHJlZj0iLi4vVUNoYXJhY3Rlci5odG1sI2lzTGVnYWwoY2hhcikiPlVDaGFyYWN0ZXIuaXNMZWdhbCgpCisgICAgICogPC9hPjwvY29kZT4gb24gdGhlIHJldHVybiB2YWx1ZS4KKyAgICAgKiBJZiB0aGUgY2hhciByZXRyaWV2ZWQgaXMgcGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCBpdHMgc3VwcGxlbWVudGFyeQorICAgICAqIGNoYXJhY3RlciB3aWxsIGJlIHJldHVybmVkLiBJZiBhIGNvbXBsZXRlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIGlzIAorICAgICAqIG5vdCBmb3VuZCB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXIgd2lsbCBiZSByZXR1cm5lZAorICAgICAqIEBwYXJhbSBzb3VyY2UgYXJyYXkgb2YgVVRGLTE2IGNoYXJzCisgICAgICogQHBhcmFtIHN0YXJ0IG9mZnNldCB0byBzdWJzdHJpbmcgaW4gdGhlIHNvdXJjZSBhcnJheSBmb3IgYW5hbHl6aW5nCisgICAgICogQHBhcmFtIGxpbWl0IG9mZnNldCB0byBzdWJzdHJpbmcgaW4gdGhlIHNvdXJjZSBhcnJheSBmb3IgYW5hbHl6aW5nCisgICAgICogQHBhcmFtIG9mZnNldDE2IFVURi0xNiBvZmZzZXQgcmVsYXRpdmUgdG8gc3RhcnQKKyAgICAgKiBAcmV0dXJuIFVURi0zMiB2YWx1ZSBmb3IgdGhlIFVURi0zMiB2YWx1ZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGFyIGF0CisgICAgICogICAgICAgICBvZmZzZXQxNi4gVGhlIGJvdW5kYXJpZXMgb2YgdGhhdCBjb2RlcG9pbnQgYXJlIHRoZSBzYW1lIGFzIGluCisgICAgICogICAgICAgICA8Y29kZT5ib3VuZHMzMigpPC9jb2RlPi4KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gdGhyb3duIGlmIG9mZnNldDE2IGlzIG5vdCB3aXRoaW4gCisgICAgICogICAgICAgICAgICB0aGUgcmFuZ2Ugb2Ygc3RhcnQgYW5kIGxpbWl0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGNoYXJBdChjaGFyIHNvdXJjZVtdLCBpbnQgc3RhcnQsIGludCBsaW1pdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQxNikKKyAgICB7CisgICAgICAgIG9mZnNldDE2ICs9IHN0YXJ0OworICAgICAgICBpZiAob2Zmc2V0MTYgPCBzdGFydCB8fCBvZmZzZXQxNiA+PSBsaW1pdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQxNik7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjaGFyIHNpbmdsZSA9IHNvdXJjZVtvZmZzZXQxNl07CisgICAgICAgIGlmICghaXNTdXJyb2dhdGUoc2luZ2xlKSkgeworICAgICAgICAgICAgcmV0dXJuIHNpbmdsZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbnZlcnQgdGhlIFVURi0xNiBzdXJyb2dhdGUgcGFpciBpZiBuZWNlc3NhcnkuCisgICAgICAgIC8vIEZvciBzaW1wbGljaXR5IGluIHVzYWdlLCBhbmQgYmVjYXVzZSB0aGUgZnJlcXVlbmN5IG9mIHBhaXJzIGlzIAorICAgICAgICAvLyBsb3csIGxvb2sgYm90aCBkaXJlY3Rpb25zLiAgICAgIAorCSAgICBpZiAoc2luZ2xlIDw9IExFQURfU1VSUk9HQVRFX01BWF9WQUxVRSkgeworCSAgICAgICAgb2Zmc2V0MTYgKys7CisJICAgICAgICBpZiAob2Zmc2V0MTYgPj0gbGltaXQpIHsKKwkgICAgICAgICAgICByZXR1cm4gc2luZ2xlOworCSAgICAgICAgfQorCSAgICAgICAgY2hhciB0cmFpbCA9IHNvdXJjZVtvZmZzZXQxNl07CisJICAgICAgICBpZiAoaXNUcmFpbFN1cnJvZ2F0ZSh0cmFpbCkpIHsKKwkgICAgICAgICAgICByZXR1cm4gVUNoYXJhY3RlclByb3BlcnR5LmdldFJhd1N1cHBsZW1lbnRhcnkoc2luZ2xlLCB0cmFpbCk7CisJICAgICAgICB9CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgeyAvLyBpc1RyYWlsU3Vycm9nYXRlKHNpbmdsZSksIHNvCisgICAgICAgICAgICBpZiAob2Zmc2V0MTYgPT0gc3RhcnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2luZ2xlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0MTYgLS07CisJICAgICAgICBjaGFyIGxlYWQgPSBzb3VyY2Vbb2Zmc2V0MTZdOworCSAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShsZWFkKSkKKwkgICAgICAgICAgICByZXR1cm4gVUNoYXJhY3RlclByb3BlcnR5LmdldFJhd1N1cHBsZW1lbnRhcnkobGVhZCwgc2luZ2xlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2luZ2xlOyAvLyByZXR1cm4gdW5tYXRjaGVkIHN1cnJvZ2F0ZQorICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIEV4dHJhY3QgYSBzaW5nbGUgVVRGLTMyIHZhbHVlIGZyb20gYSBzdHJpbmcuCisgICAgICogVXNlZCB3aGVuIGl0ZXJhdGluZyBmb3J3YXJkcyBvciBiYWNrd2FyZHMgKHdpdGgKKyAgICAgKiA8Y29kZT5VVEYxNi5nZXRDaGFyQ291bnQoKTwvY29kZT4sIGFzIHdlbGwgYXMgcmFuZG9tIGFjY2Vzcy4gSWYgYSAKKyAgICAgKiB2YWxpZGl0eSBjaGVjayBpcyByZXF1aXJlZCwgdXNlIAorICAgICAqIDxjb2RlPjxhIGhyZWY9Ii4uL1VDaGFyYWN0ZXIuaHRtbCNpc0xlZ2FsKGNoYXIpIj5VQ2hhcmFjdGVyLmlzTGVnYWwoKQorICAgICAqIDwvYT48L2NvZGU+IG9uIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICogSWYgdGhlIGNoYXIgcmV0cmlldmVkIGlzIHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciwgaXRzIHN1cHBsZW1lbnRhcnkKKyAgICAgKiBjaGFyYWN0ZXIgd2lsbCBiZSByZXR1cm5lZC4gSWYgYSBjb21wbGV0ZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlciBpcyAKKyAgICAgKiBub3QgZm91bmQgdGhlIGluY29tcGxldGUgY2hhcmFjdGVyIHdpbGwgYmUgcmV0dXJuZWQKKyAgICAgKiBAcGFyYW0gc291cmNlIFVURi0xNiBjaGFycyBzdHJpbmcgYnVmZmVyCisgICAgICogQHBhcmFtIG9mZnNldDE2IFVURi0xNiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaGFyYWN0ZXIuCisgICAgICogQHJldHVybiBVVEYtMzIgdmFsdWUgZm9yIHRoZSBVVEYtMzIgdmFsdWUgdGhhdCBjb250YWlucyB0aGUgY2hhciBhdAorICAgICAqICAgICAgICAgb2Zmc2V0MTYuIFRoZSBib3VuZGFyaWVzIG9mIHRoYXQgY29kZXBvaW50IGFyZSB0aGUgc2FtZSBhcyBpbgorICAgICAqICAgICAgICAgPGNvZGU+Ym91bmRzMzIoKTwvY29kZT4uCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHRocm93biBpZiBvZmZzZXQxNiBpcyBvdXQgb2YgCisgICAgICogICAgICAgICAgICBib3VuZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgY2hhckF0KFJlcGxhY2VhYmxlIHNvdXJjZSwgaW50IG9mZnNldDE2KQorICAgIHsKKyAgICAgICAgaWYgKG9mZnNldDE2IDwgMCB8fCBvZmZzZXQxNiA+PSBzb3VyY2UubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKG9mZnNldDE2KTsKKyAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICBjaGFyIHNpbmdsZSA9IHNvdXJjZS5jaGFyQXQob2Zmc2V0MTYpOworICAgICAgICBpZiAoIWlzU3Vycm9nYXRlKHNpbmdsZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBzaW5nbGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb252ZXJ0IHRoZSBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgaWYgbmVjZXNzYXJ5LgorICAgICAgICAvLyBGb3Igc2ltcGxpY2l0eSBpbiB1c2FnZSwgYW5kIGJlY2F1c2UgdGhlIGZyZXF1ZW5jeSBvZiBwYWlycyBpcyAKKyAgICAgICAgLy8gbG93LCBsb29rIGJvdGggZGlyZWN0aW9ucy4KKyAgICAgICAgICAgICAgICAKKwkgICAgaWYgKHNpbmdsZSA8PSBMRUFEX1NVUlJPR0FURV9NQVhfVkFMVUUpIAorCSAgICB7CisJICAgICAgICArKyBvZmZzZXQxNjsKKwkgICAgICAgIGlmIChzb3VyY2UubGVuZ3RoKCkgIT0gb2Zmc2V0MTYpCisJICAgICAgICB7CisJICAgICAgICBjaGFyIHRyYWlsID0gc291cmNlLmNoYXJBdChvZmZzZXQxNik7CisJICAgICAgICBpZiAoaXNUcmFpbFN1cnJvZ2F0ZSh0cmFpbCkpCisJICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRSYXdTdXBwbGVtZW50YXJ5KHNpbmdsZSwgdHJhaWwpOworCSAgICAgICAgfQorCSAgICB9IAorCSAgICBlbHNlIAorCSAgICB7IAorCSAgICAgICAgLS0gb2Zmc2V0MTY7CisJICAgICAgICBpZiAob2Zmc2V0MTYgPj0gMCkKKwkgICAgICAgIHsKKwkgICAgICAgIC8vIHNpbmdsZSBpcyBhIHRyYWlsIHN1cnJvZ2F0ZSBzbworCSAgICAgICAgY2hhciBsZWFkID0gc291cmNlLmNoYXJBdChvZmZzZXQxNik7CisJICAgICAgICBpZiAoaXNMZWFkU3Vycm9nYXRlKGxlYWQpKSB7CisJICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXJQcm9wZXJ0eS5nZXRSYXdTdXBwbGVtZW50YXJ5KGxlYWQsIHNpbmdsZSk7CisJICAgICAgICB9CisJICAgICAgICB9CisJICAgIH0gCisJICAgIHJldHVybiBzaW5nbGU7IC8vIHJldHVybiB1bm1hdGNoZWQgc3Vycm9nYXRlCisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBob3cgbWFueSBjaGFycyB0aGlzIGNoYXIzMiByZXF1aXJlcy4KKyAgICAgKiBJZiBhIHZhbGlkaXR5IGNoZWNrIGlzIHJlcXVpcmVkLCB1c2UgPGNvZGU+CisgICAgICogPGEgaHJlZj0iLi4vVUNoYXJhY3Rlci5odG1sI2lzTGVnYWwoY2hhcikiPmlzTGVnYWwoKTwvYT48L2NvZGU+IG9uIAorICAgICAqIGNoYXIzMiBiZWZvcmUgY2FsbGluZy4KKyAgICAgKiBAcGFyYW0gY2ggdGhlIGlucHV0IGNvZGVwb2ludC4KKyAgICAgKiBAcmV0dXJuIDIgaWYgaXMgaW4gc3VwcGxlbWVudGFyeSBzcGFjZSwgb3RoZXJ3aXNlIDEuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldENoYXJDb3VudChpbnQgY2hhcjMyKSAKKyAgICB7CisgICAgICAgIGlmIChjaGFyMzIgPCBTVVBQTEVNRU5UQVJZX01JTl9WQUxVRSkgeworICAgICAgICAJcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYm91bmRhcmllcyBhcm91bmQgdGhlIGNoYXIgYXQgb2Zmc2V0MTYuCisgICAgICogVXNlZCBmb3IgcmFuZG9tIGFjY2Vzcy4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRleHQgdG8gYW5hbHlzZQorICAgICAqIEBwYXJhbSBvZmZzZXQxNiBVVEYtMTYgb2Zmc2V0CisgICAgICogQHJldHVybiA8dWw+CisgICAgICogICAgICAgICAgIDxsaT4gU0lOR0xFX0NIQVJfQk9VTkRBUlkgOiBhIHNpbmdsZSBjaGFyOyB0aGUgYm91bmRzIGFyZSAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvZmZzZXQxNiwgb2Zmc2V0MTYrMV0KKyAgICAgKiAgICAgICAgICAgPGxpPiBMRUFEX1NVUlJPR0FURV9CT1VOREFSWSA6IGEgc3Vycm9nYXRlIHBhaXIgc3RhcnRpbmcgYXQgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQxNjsgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYm91bmRzIGFyZSAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvZmZzZXQxNiwgb2Zmc2V0MTYgKyAyXQorICAgICAqICAgICAgICAgICA8bGk+IFRSQUlMX1NVUlJPR0FURV9CT1VOREFSWSA6IGEgc3Vycm9nYXRlIHBhaXIgc3RhcnRpbmcgYXQgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0MTYgLSAxOyB0aGUgYm91bmRzIGFyZSAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb2Zmc2V0MTYgLSAxLCBvZmZzZXQxNiArIDFdCisgICAgICogICAgICAgICA8L3VsPgorICAgICAqICAgICAgICAgRm9yIGJpdC10d2lkZGxlcnMsIHRoZSByZXR1cm4gdmFsdWVzIGZvciB0aGVzZSBhcmUgY2hvc2VuIHNvIAorICAgICAqICAgICAgICAgdGhhdCB0aGUgYm91bmRhcmllcyBjYW4gYmUgZ290dGVuIGJ5OgorICAgICAqICAgICAgICAgW29mZnNldDE2IC0gKHZhbHVlID4+IDIpLCBvZmZzZXQxNiArICh2YWx1ZSAmIDMpXS4KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgb2Zmc2V0MTYgaXMgb3V0IG9mIGJvdW5kcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBib3VuZHMoU3RyaW5nIHNvdXJjZSwgaW50IG9mZnNldDE2KSAKKyAgICB7CisgICAgICAgIGNoYXIgY2ggPSBzb3VyY2UuY2hhckF0KG9mZnNldDE2KTsKKyAgICAgICAgaWYgKGlzU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShjaCkpIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgrKyBvZmZzZXQxNiA8IHNvdXJjZS5sZW5ndGgoKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KG9mZnNldDE2KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExFQURfU1VSUk9HQVRFX0JPVU5EQVJZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBpc1RyYWlsU3Vycm9nYXRlKGNoKSwgc28KKyAgICAgICAgICAgICAgICAtLSBvZmZzZXQxNjsKKyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0MTYgPj0gMCAmJiBpc0xlYWRTdXJyb2dhdGUoc291cmNlLmNoYXJBdChvZmZzZXQxNikpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUkFJTF9TVVJST0dBVEVfQk9VTkRBUlk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBTSU5HTEVfQ0hBUl9CT1VOREFSWTsKKyAgICB9CisgICAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBib3VuZGFyaWVzIGFyb3VuZCB0aGUgY2hhciBhdCBvZmZzZXQxNi4gVXNlZCAKKyAgICAgKiBmb3IgcmFuZG9tIGFjY2Vzcy4KKyAgICAgKiBAcGFyYW0gc291cmNlIHN0cmluZyBidWZmZXIgdG8gYW5hbHlzZQorICAgICAqIEBwYXJhbSBvZmZzZXQxNiBVVEYxNiBvZmZzZXQKKyAgICAgKiBAcmV0dXJuCisgICAgICogICAgIDx1bD4KKyAgICAgKiAgICAgPGxpPiBTSU5HTEVfQ0hBUl9CT1VOREFSWSA6IGEgc2luZ2xlIGNoYXI7IHRoZSBib3VuZHMgYXJlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvZmZzZXQxNiwgb2Zmc2V0MTYgKyAxXQorICAgICAqICAgICA8bGk+IExFQURfU1VSUk9HQVRFX0JPVU5EQVJZIDogYSBzdXJyb2dhdGUgcGFpciBzdGFydGluZyBhdCAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDE2OyB0aGUgYm91bmRzIGFyZSAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvZmZzZXQxNiwgb2Zmc2V0MTYgKyAyXQorICAgICAqICAgICA8bGk+IFRSQUlMX1NVUlJPR0FURV9CT1VOREFSWSA6IGEgc3Vycm9nYXRlIHBhaXIgc3RhcnRpbmcgYXQgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0MTYgLSAxOyB0aGUgYm91bmRzIGFyZSAKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb2Zmc2V0MTYgLSAxLCBvZmZzZXQxNiArIDFdCisgICAgICogICAgIDwvdWw+CisgICAgICogRm9yIGJpdC10d2lkZGxlcnMsIHRoZSByZXR1cm4gdmFsdWVzIGZvciB0aGVzZSBhcmUgY2hvc2VuIHNvIHRoYXQgdGhlIAorICAgICAqIGJvdW5kYXJpZXMgY2FuIGJlIGdvdHRlbiBieTogCisgICAgICogICAgICAgICAgICAgICAgICAgIFtvZmZzZXQxNiAtICh2YWx1ZSA+PiAyKSwgb2Zmc2V0MTYgKyAodmFsdWUgJiAzKV0uCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIG9mZnNldDE2IGlzIG91dCBvZiBib3VuZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgYm91bmRzKFN0cmluZ0J1ZmZlciBzb3VyY2UsIGludCBvZmZzZXQxNikKKyAgICB7CisgICAgICAgIGNoYXIgY2ggPSBzb3VyY2UuY2hhckF0KG9mZnNldDE2KTsKKyAgICAgICAgaWYgKGlzU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShjaCkpIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgrKyBvZmZzZXQxNiA8IHNvdXJjZS5sZW5ndGgoKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KG9mZnNldDE2KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExFQURfU1VSUk9HQVRFX0JPVU5EQVJZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBpc1RyYWlsU3Vycm9nYXRlKGNoKSwgc28KKyAgICAgICAgICAgICAgICAtLSBvZmZzZXQxNjsKKyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0MTYgPj0gMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNMZWFkU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQob2Zmc2V0MTYpKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJBSUxfU1VSUk9HQVRFX0JPVU5EQVJZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU0lOR0xFX0NIQVJfQk9VTkRBUlk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYm91bmRhcmllcyBhcm91bmQgdGhlIGNoYXIgYXQgb2Zmc2V0MTYuIFVzZWQgCisgICAgICogZm9yIHJhbmRvbSBhY2Nlc3MuIE5vdGUgdGhhdCB0aGUgYm91bmRhcmllcyBhcmUgZGV0ZXJtaW5lZCB3aXRoIHJlc3BlY3QgCisgICAgICogdG8gdGhlIHN1YmFycmF5LCBoZW5jZSB0aGUgY2hhciBhcnJheSB7MHhEODAwLCAweERDMDB9IGhhcyB0aGUgcmVzdWx0IAorICAgICAqIFNJTkdMRV9DSEFSX0JPVU5EQVJZIGZvciBzdGFydCA9IG9mZnNldDE2ID0gMCBhbmQgbGltaXQgPSAxLgorICAgICAqIEBwYXJhbSBzb3VyY2UgY2hhciBhcnJheSB0byBhbmFseXNlCisgICAgICogQHBhcmFtIHN0YXJ0IG9mZnNldCB0byBzdWJzdHJpbmcgaW4gdGhlIHNvdXJjZSBhcnJheSBmb3IgYW5hbHl6aW5nCisgICAgICogQHBhcmFtIGxpbWl0IG9mZnNldCB0byBzdWJzdHJpbmcgaW4gdGhlIHNvdXJjZSBhcnJheSBmb3IgYW5hbHl6aW5nCisgICAgICogQHBhcmFtIG9mZnNldDE2IFVURjE2IG9mZnNldCByZWxhdGl2ZSB0byBzdGFydAorICAgICAqIEByZXR1cm4KKyAgICAgKiAgICAgPHVsPgorICAgICAqICAgICAgICAgPGxpPiBTSU5HTEVfQ0hBUl9CT1VOREFSWSA6IGEgc2luZ2xlIGNoYXI7IHRoZSBib3VuZHMgYXJlCisgICAgICogICAgICAgICA8bGk+IExFQURfU1VSUk9HQVRFX0JPVU5EQVJZIDogYSBzdXJyb2dhdGUgcGFpciBzdGFydGluZyBhdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQxNjsgdGhlIGJvdW5kcyBhcmUgW29mZnNldDE2LCBvZmZzZXQxNiArIDJdCisgICAgICogICAgICAgICA8bGk+IFRSQUlMX1NVUlJPR0FURV9CT1VOREFSWSA6IGEgc3Vycm9nYXRlIHBhaXIgc3RhcnRpbmcgYXQKKyAgICAgKiAgICAgICAgICAgICAgIG9mZnNldDE2IC0gMTsgdGhlIGJvdW5kcyBhcmUgW29mZnNldDE2IC0gMSwgb2Zmc2V0MTYgKyAxXQorICAgICAqICAgICA8L3VsPgorICAgICAqIEZvciBiaXQtdHdpZGRsZXJzLCB0aGUgYm91bmRhcnkgdmFsdWVzIGZvciB0aGVzZSBhcmUgY2hvc2VuIHNvIHRoYXQgdGhlIAorICAgICAqIGJvdW5kYXJpZXMgY2FuIGJlIGdvdHRlbiBieTogW29mZnNldDE2IC0gKGJvdW5kdmFsdWUgPj4gMiksIG9mZnNldDE2IAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGJvdW5kdmFsdWUgJiAzKV0uCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIG9mZnNldDE2IGlzIG5vdCB3aXRoaW4gdGhlIAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSBvZiBzdGFydCBhbmQgbGltaXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgYm91bmRzKGNoYXIgc291cmNlW10sIGludCBzdGFydCwgaW50IGxpbWl0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldDE2KQorICAgIHsKKyAgICAgICAgb2Zmc2V0MTYgKz0gc3RhcnQ7CisgICAgICAgIGlmIChvZmZzZXQxNiA8IHN0YXJ0IHx8IG9mZnNldDE2ID49IGxpbWl0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKG9mZnNldDE2KTsKKyAgICAgICAgfQorICAgICAgICBjaGFyIGNoID0gc291cmNlW29mZnNldDE2XTsKKyAgICAgICAgaWYgKGlzU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShjaCkpIHsKKyAgICAgICAgICAgICAgICArKyBvZmZzZXQxNjsKKyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0MTYgPCBsaW1pdCAmJiBpc1RyYWlsU3Vycm9nYXRlKHNvdXJjZVtvZmZzZXQxNl0pKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMRUFEX1NVUlJPR0FURV9CT1VOREFSWTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7IC8vIGlzVHJhaWxTdXJyb2dhdGUoY2gpLCBzbworICAgICAgICAgICAgICAgIC0tIG9mZnNldDE2OworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQxNiA+PSBzdGFydCAmJiBpc0xlYWRTdXJyb2dhdGUoc291cmNlW29mZnNldDE2XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSQUlMX1NVUlJPR0FURV9CT1VOREFSWTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNJTkdMRV9DSEFSX0JPVU5EQVJZOyAgICAKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvZGUgdmFsdWUgaXMgYSBzdXJyb2dhdGUuCisgICAgICogQHBhcmFtIGNoIHRoZSBpbnB1dCBjaGFyYWN0ZXIuCisgICAgICogQHJldHVybiB0cnVlIGlmZiB0aGUgaW5wdXQgY2hhcmFjdGVyIGlzIGEgc3Vycm9nYXRlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N1cnJvZ2F0ZShjaGFyIGNoYXIxNikgCisgICAgeworICAgICAgICByZXR1cm4gTEVBRF9TVVJST0dBVEVfTUlOX1ZBTFVFIDw9IGNoYXIxNiAmJiAKKyAgICAgICAgICAgIGNoYXIxNiA8PSBUUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSB0cmFpbCBzdXJyb2dhdGUuCisgICAgICogQHBhcmFtIGNoYXIxNiB0aGUgaW5wdXQgY2hhcmFjdGVyLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZmYgdGhlIGlucHV0IGNoYXJhY3RlciBpcyBhIHRyYWlsIHN1cnJvZ2F0ZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFpbFN1cnJvZ2F0ZShjaGFyIGNoYXIxNikgCisgICAgeworICAgICAgICByZXR1cm4gKFRSQUlMX1NVUlJPR0FURV9NSU5fVkFMVUUgPD0gY2hhcjE2ICYmIAorICAgICAgICAgICAgICAgIGNoYXIxNiA8PSBUUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFKTsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgbGVhZCBzdXJyb2dhdGUuCisgICAgICogQHBhcmFtIGNoYXIxNiB0aGUgaW5wdXQgY2hhcmFjdGVyLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZmYgdGhlIGlucHV0IGNoYXJhY3RlciBpcyBhIGxlYWQgc3Vycm9nYXRlCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTGVhZFN1cnJvZ2F0ZShjaGFyIGNoYXIxNikgCisgICAgeworICAgICAgICByZXR1cm4gTEVBRF9TVVJST0dBVEVfTUlOX1ZBTFVFIDw9IGNoYXIxNiAmJiAKKyAgICAgICAgICAgIGNoYXIxNiA8PSBMRUFEX1NVUlJPR0FURV9NQVhfVkFMVUU7CisgICAgfQorICAgICAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbGVhZCBzdXJyb2dhdGUuCisgICAgICogSWYgYSB2YWxpZGl0eSBjaGVjayBpcyByZXF1aXJlZCwgdXNlIAorICAgICAqIDxjb2RlPjxhIGhyZWY9Ii4uL1VDaGFyYWN0ZXIuaHRtbCNpc0xlZ2FsKGNoYXIpIj5pc0xlZ2FsKCk8L2E+PC9jb2RlPiAKKyAgICAgKiBvbiBjaGFyMzIgYmVmb3JlIGNhbGxpbmcuCisgICAgICogQHBhcmFtIGNoYXIzMiB0aGUgaW5wdXQgY2hhcmFjdGVyLgorICAgICAqIEByZXR1cm4gbGVhZCBzdXJyb2dhdGUgaWYgdGhlIGdldENoYXJDb3VudChjaCkgaXMgMjsgPGJyPgorICAgICAqICAgICAgICAgYW5kIDAgb3RoZXJ3aXNlIChub3RlOiAwIGlzIG5vdCBhIHZhbGlkIGxlYWQgc3Vycm9nYXRlKS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNoYXIgZ2V0TGVhZFN1cnJvZ2F0ZShpbnQgY2hhcjMyKSAKKyAgICB7CisgICAgICAgIGlmIChjaGFyMzIgPj0gU1VQUExFTUVOVEFSWV9NSU5fVkFMVUUpIHsKKyAgICAgICAgCXJldHVybiAoY2hhcikoTEVBRF9TVVJST0dBVEVfT0ZGU0VUXyArIAorICAgICAgICAgICAgICAgICAgICAgIChjaGFyMzIgPj4gTEVBRF9TVVJST0dBVEVfU0hJRlRfKSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRyYWlsIHN1cnJvZ2F0ZS4KKyAgICAgKiBJZiBhIHZhbGlkaXR5IGNoZWNrIGlzIHJlcXVpcmVkLCB1c2UgCisgICAgICogPGNvZGU+PGEgaHJlZj0iLi4vVUNoYXJhY3Rlci5odG1sI2lzTGVnYWwoY2hhcikiPmlzTGVnYWwoKTwvYT48L2NvZGU+IAorICAgICAqIG9uIGNoYXIzMiBiZWZvcmUgY2FsbGluZy4KKyAgICAgKiBAcGFyYW0gY2hhcjMyIHRoZSBpbnB1dCBjaGFyYWN0ZXIuCisgICAgICogQHJldHVybiB0aGUgdHJhaWwgc3Vycm9nYXRlIGlmIHRoZSBnZXRDaGFyQ291bnQoY2gpIGlzIDI7IDxicj5vdGhlcndpc2UgCisgICAgICogICAgICAgICB0aGUgY2hhcmFjdGVyIGl0c2VsZgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2hhciBnZXRUcmFpbFN1cnJvZ2F0ZShpbnQgY2hhcjMyKSAKKyAgICB7CisgICAgICAgIGlmIChjaGFyMzIgPj0gU1VQUExFTUVOVEFSWV9NSU5fVkFMVUUpIHsKKyAgICAgICAgCXJldHVybiAoY2hhcikoVFJBSUxfU1VSUk9HQVRFX01JTl9WQUxVRSArIAorICAgICAgICAgICAgICAgICAgICAgIChjaGFyMzIgJiBUUkFJTF9TVVJST0dBVEVfTUFTS18pKTsgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIChjaGFyKWNoYXIzMjsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCBjb3JyZXNwb25kaW5nIHRvIFN0cmluZy52YWx1ZU9mKGNoYXIpLiBSZXR1cm5zIGEgb25lIAorICAgICAqIG9yIHR3byBjaGFyIHN0cmluZyBjb250YWluaW5nIHRoZSBVVEYtMzIgdmFsdWUgaW4gVVRGMTYgZm9ybWF0LiBJZiBhIAorICAgICAqIHZhbGlkaXR5IGNoZWNrIGlzIHJlcXVpcmVkLCB1c2UgCisgICAgICogPGEgaHJlZj0iLi4vVUNoYXJhY3Rlci5odG1sI2lzTGVnYWwoY2hhcikiPmlzTGVnYWwoKTwvYT48L2NvZGU+IG9uIAorICAgICAqIGNoYXIzMiBiZWZvcmUgY2FsbGluZy4KKyAgICAgKiBAcGFyYW0gY2hhcjMyIHRoZSBpbnB1dCBjaGFyYWN0ZXIuCisgICAgICogQHJldHVybiBzdHJpbmcgdmFsdWUgb2YgY2hhcjMyIGluIFVURjE2IGZvcm1hdAorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biBpZiBjaGFyMzIgaXMgYSBpbnZhbGlkIAorICAgICAqICAgICAgICAgICAgY29kZXBvaW50LgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHZhbHVlT2YoaW50IGNoYXIzMikKKyAgICB7CisgICAgICAgIGlmIChjaGFyMzIgPCBDT0RFUE9JTlRfTUlOX1ZBTFVFIHx8IGNoYXIzMiA+IENPREVQT0lOVF9NQVhfVkFMVUUpIHsKKyAgICAgICAgCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgY29kZXBvaW50Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKGNoYXIzMik7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGNvcnJlc3BvbmRpbmcgdG8gU3RyaW5nLnZhbHVlT2YoY29kZXBvaW50IGF0IAorICAgICAqIG9mZnNldDE2KS4gCisgICAgICogUmV0dXJucyBhIG9uZSBvciB0d28gY2hhciBzdHJpbmcgY29udGFpbmluZyB0aGUgVVRGLTMyIHZhbHVlIGluIFVURjE2IAorICAgICAqIGZvcm1hdC4gSWYgb2Zmc2V0MTYgaW5kZXhlcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIsIHRoZSB3aG9sZSAKKyAgICAgKiBzdXBwbGVtZW50YXJ5IGNvZGVwb2ludCB3aWxsIGJlIHJldHVybmVkLgorICAgICAqIElmIGEgdmFsaWRpdHkgY2hlY2sgaXMgcmVxdWlyZWQsIHVzZSAKKyAgICAgKiA8YSBocmVmPSIuLi9VQ2hhcmFjdGVyLmh0bWwjaXNMZWdhbChjaGFyKSI+aXNMZWdhbCgpPC9hPjwvY29kZT4gb24gdGhlIAorICAgICAqIGNvZGVwb2ludCBhdCBvZmZzZXQxNiBiZWZvcmUgY2FsbGluZy4KKyAgICAgKiBUaGUgcmVzdWx0IHJldHVybmVkIHdpbGwgYmUgYSBuZXdseSBjcmVhdGVkIFN0cmluZyBvYnRhaW5lZCBieSBjYWxsaW5nIAorICAgICAqIHNvdXJjZS5zdWJzdHJpbmcoLi4pIHdpdGggdGhlIGFwcHJvcHJpYXRlIGluZGV4ZXMuCisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgaW5wdXQgc3RyaW5nLgorICAgICAqIEBwYXJhbSBvZmZzZXQxNiB0aGUgVVRGMTYgaW5kZXggdG8gdGhlIGNvZGVwb2ludCBpbiBzb3VyY2UKKyAgICAgKiBAcmV0dXJuIHN0cmluZyB2YWx1ZSBvZiBjaGFyMzIgaW4gVVRGMTYgZm9ybWF0CisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdmFsdWVPZihTdHJpbmcgc291cmNlLCBpbnQgb2Zmc2V0MTYpCisgICAgeworICAgICAgICBzd2l0Y2ggKGJvdW5kcyhzb3VyY2UsIG9mZnNldDE2KSkgeworICAgICAgICAgICAgY2FzZSBMRUFEX1NVUlJPR0FURV9CT1VOREFSWTogCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLnN1YnN0cmluZyhvZmZzZXQxNiwgb2Zmc2V0MTYgKyAyKTsKKyAgICAgICAgICAgIGNhc2UgVFJBSUxfU1VSUk9HQVRFX0JPVU5EQVJZOiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic3RyaW5nKG9mZnNldDE2IC0gMSwgb2Zmc2V0MTYgKyAxKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBzb3VyY2Uuc3Vic3RyaW5nKG9mZnNldDE2LCBvZmZzZXQxNiArIDEpOworICAgICAgICB9CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGNvcnJlc3BvbmRpbmcgdG8gCisgICAgICogU3RyaW5nQnVmZmVyLnZhbHVlT2YoY29kZXBvaW50IGF0IG9mZnNldDE2KS4gCisgICAgICogUmV0dXJucyBhIG9uZSBvciB0d28gY2hhciBzdHJpbmcgY29udGFpbmluZyB0aGUgVVRGLTMyIHZhbHVlIGluIFVURjE2IAorICAgICAqIGZvcm1hdC4gSWYgb2Zmc2V0MTYgaW5kZXhlcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIsIHRoZSB3aG9sZSAKKyAgICAgKiBzdXBwbGVtZW50YXJ5IGNvZGVwb2ludCB3aWxsIGJlIHJldHVybmVkLgorICAgICAqIElmIGEgdmFsaWRpdHkgY2hlY2sgaXMgcmVxdWlyZWQsIHVzZSAKKyAgICAgKiA8YSBocmVmPSIuLi9VQ2hhcmFjdGVyLmh0bWwjaXNMZWdhbChjaGFyKSI+aXNMZWdhbCgpPC9hPjwvY29kZT4gb24gdGhlIAorICAgICAqIGNvZGVwb2ludCBhdCBvZmZzZXQxNiBiZWZvcmUgY2FsbGluZy4KKyAgICAgKiBUaGUgcmVzdWx0IHJldHVybmVkIHdpbGwgYmUgYSBuZXdseSBjcmVhdGVkIFN0cmluZyBvYnRhaW5lZCBieSBjYWxsaW5nIAorICAgICAqIHNvdXJjZS5zdWJzdHJpbmcoLi4pIHdpdGggdGhlIGFwcHJvcHJpYXRlIGluZGV4ZXMuCisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgaW5wdXQgc3RyaW5nIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgdGhlIFVURjE2IGluZGV4IHRvIHRoZSBjb2RlcG9pbnQgaW4gc291cmNlCisgICAgICogQHJldHVybiBzdHJpbmcgdmFsdWUgb2YgY2hhcjMyIGluIFVURjE2IGZvcm1hdAorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHZhbHVlT2YoU3RyaW5nQnVmZmVyIHNvdXJjZSwgaW50IG9mZnNldDE2KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChib3VuZHMoc291cmNlLCBvZmZzZXQxNikpIHsKKyAgICAgICAgICAgIGNhc2UgTEVBRF9TVVJST0dBVEVfQk9VTkRBUlk6IAorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic3RyaW5nKG9mZnNldDE2LCBvZmZzZXQxNiArIDIpOworICAgICAgICAgICAgY2FzZSBUUkFJTF9TVVJST0dBVEVfQk9VTkRBUlk6IAorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic3RyaW5nKG9mZnNldDE2IC0gMSwgb2Zmc2V0MTYgKyAxKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBzb3VyY2Uuc3Vic3RyaW5nKG9mZnNldDE2LCBvZmZzZXQxNiArIDEpOworICAgICAgICB9CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kLiAKKyAgICAgKiBSZXR1cm5zIGEgb25lIG9yIHR3byBjaGFyIHN0cmluZyBjb250YWluaW5nIHRoZSBVVEYtMzIgdmFsdWUgaW4gVVRGMTYgCisgICAgICogZm9ybWF0LiBJZiBvZmZzZXQxNiBpbmRleGVzIGEgc3Vycm9nYXRlIGNoYXJhY3RlciwgdGhlIHdob2xlIAorICAgICAqIHN1cHBsZW1lbnRhcnkgY29kZXBvaW50IHdpbGwgYmUgcmV0dXJuZWQsIGV4Y2VwdCB3aGVuIGVpdGhlciB0aGUgCisgICAgICogbGVhZGluZyBvciB0cmFpbGluZyBzdXJyb2dhdGUgY2hhcmFjdGVyIGxpZXMgb3V0IG9mIHRoZSBzcGVjaWZpZWQgCisgICAgICogc3ViYXJyYXkuIEluIHRoZSBsYXR0ZXIgY2FzZSwgb25seSB0aGUgc3Vycm9nYXRlIGNoYXJhY3RlciB3aXRoaW4gCisgICAgICogYm91bmRzIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICogSWYgYSB2YWxpZGl0eSBjaGVjayBpcyByZXF1aXJlZCwgdXNlIAorICAgICAqIDxhIGhyZWY9Ii4uL1VDaGFyYWN0ZXIuaHRtbCNpc0xlZ2FsKGNoYXIpIj5pc0xlZ2FsKCk8L2E+PC9jb2RlPiBvbiB0aGUgCisgICAgICogY29kZXBvaW50IGF0IG9mZnNldDE2IGJlZm9yZSBjYWxsaW5nLgorICAgICAqIFRoZSByZXN1bHQgcmV0dXJuZWQgd2lsbCBiZSBhIG5ld2x5IGNyZWF0ZWQgU3RyaW5nIGNvbnRhaW5pbmcgdGhlIAorICAgICAqIHJlbGV2YW50IGNoYXJhY3RlcnMuCisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgaW5wdXQgY2hhciBhcnJheS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgc3RhcnQgaW5kZXggb2YgdGhlIHN1YmFycmF5CisgICAgICogQHBhcmFtIGxpbWl0IGVuZCBpbmRleCBvZiB0aGUgc3ViYXJyYXkKKyAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgdGhlIFVURjE2IGluZGV4IHRvIHRoZSBjb2RlcG9pbnQgaW4gc291cmNlIHJlbGF0aXZlIHRvIAorICAgICAqICAgICAgICBzdGFydAorICAgICAqIEByZXR1cm4gc3RyaW5nIHZhbHVlIG9mIGNoYXIzMiBpbiBVVEYxNiBmb3JtYXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB2YWx1ZU9mKGNoYXIgc291cmNlW10sIGludCBzdGFydCwgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldDE2KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChib3VuZHMoc291cmNlLCBzdGFydCwgbGltaXQsIG9mZnNldDE2KSkgeworICAgICAgICAgICAgY2FzZSBMRUFEX1NVUlJPR0FURV9CT1VOREFSWTogCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoc291cmNlLCBzdGFydCArIG9mZnNldDE2LCAyKTsKKyAgICAgICAgICAgIGNhc2UgVFJBSUxfU1VSUk9HQVRFX0JPVU5EQVJZOiAKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhzb3VyY2UsIHN0YXJ0ICsgb2Zmc2V0MTYgLSAxLCAyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhzb3VyY2UsIHN0YXJ0ICsgb2Zmc2V0MTYsIDEpOworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIFVURi0xNiBvZmZzZXQgdGhhdCBjb3JyZXNwb25kcyB0byBhIFVURi0zMiBvZmZzZXQuIAorICAgICAqIFVzZWQgZm9yIHJhbmRvbSBhY2Nlc3MuIFNlZSB0aGUgPGEgbmFtZT0iX3RvcF8iPmNsYXNzIGRlc2NyaXB0aW9uPC9hPiAKKyAgICAgKiBmb3Igbm90ZXMgb24gcm91bmR0cmlwcGluZy4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRoZSBVVEYtMTYgc3RyaW5nCisgICAgICogQHBhcmFtIG9mZnNldDMyIFVURi0zMiBvZmZzZXQKKyAgICAgKiBAcmV0dXJuIFVURi0xNiBvZmZzZXQgCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIG9mZnNldDMyIGlzIG91dCBvZiBib3VuZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZmluZE9mZnNldEZyb21Db2RlUG9pbnQoU3RyaW5nIHNvdXJjZSwgaW50IG9mZnNldDMyKSAKKyAgICB7CisgICAgICAgIGNoYXIgY2g7CisgICAgICAgIGludCBzaXplID0gc291cmNlLmxlbmd0aCgpLAorICAgICAgICAgICAgcmVzdWx0ID0gMCwKKyAgICAgICAgICAgIGNvdW50ID0gb2Zmc2V0MzI7CisgICAgICAgIGlmIChvZmZzZXQzMiA8IDAgfHwgb2Zmc2V0MzIgPiBzaXplKSB7CisgICAgICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKG9mZnNldDMyKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVzdWx0IDwgc2l6ZSAmJiBjb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckF0KHJlc3VsdCk7CisgICAgICAgIGlmIChpc0xlYWRTdXJyb2dhdGUoY2gpICYmICgocmVzdWx0ICsgMSkgPCBzaXplKSAmJiAKKyAgICAgICAgICAgIGlzVHJhaWxTdXJyb2dhdGUoc291cmNlLmNoYXJBdChyZXN1bHQgKyAxKSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCArKzsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNvdW50IC0tOworICAgICAgICByZXN1bHQgKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50ICE9IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24ob2Zmc2V0MzIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVVRGLTE2IG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgVVRGLTMyIG9mZnNldC4KKyAgICAgKiBVc2VkIGZvciByYW5kb20gYWNjZXNzLiBTZWUgdGhlIDxhIG5hbWU9Il90b3BfIj5jbGFzcyBkZXNjcmlwdGlvbjwvYT4KKyAgICAgKiBmb3Igbm90ZXMgb24gcm91bmR0cmlwcGluZy4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRoZSBVVEYtMTYgc3RyaW5nIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBvZmZzZXQzMiBVVEYtMzIgb2Zmc2V0CisgICAgICogQHJldHVybiBVVEYtMTYgb2Zmc2V0CisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIG9mZnNldDMyIGlzIG91dCBvZiBib3VuZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZmluZE9mZnNldEZyb21Db2RlUG9pbnQoU3RyaW5nQnVmZmVyIHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldDMyKQorICAgIHsKKyAgICAgICAgY2hhciBjaDsKKyAgICAgICAgaW50IHNpemUgPSBzb3VyY2UubGVuZ3RoKCksCisgICAgICAgICAgICByZXN1bHQgPSAwLAorICAgICAgICAgICAgY291bnQgPSBvZmZzZXQzMjsKKyAgICAgICAgaWYgKG9mZnNldDMyIDwgMCB8fCBvZmZzZXQzMiA+IHNpemUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24ob2Zmc2V0MzIpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChyZXN1bHQgPCBzaXplICYmIGNvdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQXQocmVzdWx0KTsKKyAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShjaCkgJiYgKChyZXN1bHQgKyAxKSA8IHNpemUpICYmIAorICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHJlc3VsdCArIDEpKSkgeworICAgICAgICAgICAgcmVzdWx0ICsrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY291bnQgLS07CisgICAgICAgIHJlc3VsdCArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY291bnQgIT0gMCkgeworICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQzMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBVVEYtMTYgb2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBVVEYtMzIgb2Zmc2V0LgorICAgICAqIFVzZWQgZm9yIHJhbmRvbSBhY2Nlc3MuIFNlZSB0aGUgPGEgbmFtZT0iX3RvcF8iPmNsYXNzIGRlc2NyaXB0aW9uPC9hPgorICAgICAqIGZvciBub3RlcyBvbiByb3VuZHRyaXBwaW5nLgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIFVURi0xNiBjaGFyIGFycmF5IHdob3NlIHN1YnN0cmluZyBpcyB0byBiZSBhbmFseXNlZAorICAgICAqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgdGhlIHN1YnN0cmluZyB0byBiZSBhbmFseXNlZAorICAgICAqIEBwYXJhbSBsaW1pdCBvZmZzZXQgb2YgdGhlIHN1YnN0cmluZyB0byBiZSBhbmFseXNlZAorICAgICAqIEBwYXJhbSBvZmZzZXQzMiBVVEYtMzIgb2Zmc2V0IHJlbGF0aXZlIHRvIHN0YXJ0CisgICAgICogQHJldHVybiBVVEYtMTYgb2Zmc2V0IHJlbGF0aXZlIHRvIHN0YXJ0CisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIG9mZnNldDMyIGlzIG91dCBvZiBib3VuZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZmluZE9mZnNldEZyb21Db2RlUG9pbnQoY2hhciBzb3VyY2VbXSwgaW50IHN0YXJ0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsIGludCBvZmZzZXQzMikKKyAgICB7CisgICAgICAgIGNoYXIgY2g7CisgICAgICAgIGludCByZXN1bHQgPSBzdGFydCwKKyAgICAgICAgICAgIGNvdW50ID0gb2Zmc2V0MzI7CisgICAgICAgIGlmIChvZmZzZXQzMiA+IGxpbWl0IC0gc3RhcnQpIHsKKyAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQzMik7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHJlc3VsdCA8IGxpbWl0ICYmIGNvdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICBjaCA9IHNvdXJjZVtyZXN1bHRdOworICAgICAgICBpZiAoaXNMZWFkU3Vycm9nYXRlKGNoKSAmJiAoKHJlc3VsdCArIDEpIDwgbGltaXQpICYmIAorICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2VbcmVzdWx0ICsgMV0pKSB7CisgICAgICAgICAgICByZXN1bHQgKys7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjb3VudCAtLTsKKyAgICAgICAgcmVzdWx0ICsrOworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCAhPSAwKSB7CisgICAgICAgIHRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24ob2Zmc2V0MzIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQgLSBzdGFydDsKKyAgICB9CisgICAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBVVEYtMzIgb2Zmc2V0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IFVURi0zMiBib3VuZGFyeSBhdCAKKyAgICAgKiBvciBhZnRlciB0aGUgZ2l2ZW4gVVRGLTE2IG9mZnNldC4gVXNlZCBmb3IgcmFuZG9tIGFjY2Vzcy4gU2VlIHRoZSAKKyAgICAgKiA8YSBuYW1lPSJfdG9wXyI+Y2xhc3MgZGVzY3JpcHRpb248L2E+IGZvciBub3RlcyBvbiByb3VuZHRyaXBwaW5nLjxicj4KKyAgICAgKiA8aT5Ob3RlOiBJZiB0aGUgVVRGLTE2IG9mZnNldCBpcyBpbnRvIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpciwgCisgICAgICogdGhlbiB0aGUgVVRGLTMyIG9mZnNldCBvZiB0aGUgPHN0cm9uZz5sZWFkPC9zdHJvbmc+IG9mIHRoZSBwYWlyIGlzIAorICAgICAqIHJldHVybmVkLgorICAgICAqIDwvaT4KKyAgICAgKiA8cD4KKyAgICAgKiBUbyBmaW5kIHRoZSBVVEYtMzIgbGVuZ3RoIG9mIGEgc3RyaW5nLCB1c2U6CisgICAgICogICA8cHJlPgorICAgICAqICAgICBsZW4zMiA9IGNvdW50Q29kZVBvaW50KHNvdXJjZSwgc291cmNlLmxlbmd0aCgpKTsKKyAgICAgKiAgIDwvcHJlPgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRleHQgdG8gYW5hbHlzZQorICAgICAqIEBwYXJhbSBvZmZzZXQxNiBVVEYtMTYgb2Zmc2V0IDwgc291cmNlIHRleHQgbGVuZ3RoLgorICAgICAqIEByZXR1cm4gVVRGLTMyIG9mZnNldAorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiBvZmZzZXQxNiBpcyBvdXQgb2YgYm91bmRzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGZpbmRDb2RlUG9pbnRPZmZzZXQoU3RyaW5nIHNvdXJjZSwgaW50IG9mZnNldDE2KSAKKyAgICB7CisgICAgICAgIGlmIChvZmZzZXQxNiA8IDAgfHwgb2Zmc2V0MTYgPiBzb3VyY2UubGVuZ3RoKCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24ob2Zmc2V0MTYpOworICAgICAgICB9CisgICAgICAgICAKKyAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgIGNoYXIgY2g7CisgICAgICAgIGJvb2xlYW4gaGFkTGVhZFN1cnJvZ2F0ZSA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQxNjsgKysgaSkgCisgICAgICAgIHsKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckF0KGkpOworICAgICAgICBpZiAoaGFkTGVhZFN1cnJvZ2F0ZSAmJiBpc1RyYWlsU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgaGFkTGVhZFN1cnJvZ2F0ZSA9IGZhbHNlOyAgICAgICAgICAgLy8gY291bnQgdmFsaWQgdHJhaWwgYXMgemVybworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaGFkTGVhZFN1cnJvZ2F0ZSA9IGlzTGVhZFN1cnJvZ2F0ZShjaCk7CisgICAgICAgICAgICArKyByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3VudCBvdGhlcnMgYXMgMQorICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvZmZzZXQxNiA9PSBzb3VyY2UubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIGVuZCBvZiBzb3VyY2UgYmVpbmcgdGhlIGxlc3Mgc2lnbmlmaWNhbnQgc3Vycm9nYXRlIGNoYXJhY3RlcgorICAgICAgICAvLyBzaGlmdCByZXN1bHQgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyCisgICAgICAgIGlmIChoYWRMZWFkU3Vycm9nYXRlICYmIChpc1RyYWlsU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQob2Zmc2V0MTYpKSkpIHsKKyAgICAgICAgcmVzdWx0IC0tOworICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVVRGLTMyIG9mZnNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBVVEYtMzIgYm91bmRhcnkgYXQKKyAgICAgKiB0aGUgZ2l2ZW4gVVRGLTE2IG9mZnNldC4gVXNlZCBmb3IgcmFuZG9tIGFjY2Vzcy4gU2VlIHRoZQorICAgICAqIDxhIG5hbWU9Il90b3BfIj5jbGFzcyBkZXNjcmlwdGlvbjwvYT4gZm9yIG5vdGVzIG9uIHJvdW5kdHJpcHBpbmcuPGJyPgorICAgICAqIDxpPk5vdGU6IElmIHRoZSBVVEYtMTYgb2Zmc2V0IGlzIGludG8gdGhlIG1pZGRsZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCAKKyAgICAgKiB0aGVuIHRoZSBVVEYtMzIgb2Zmc2V0IG9mIHRoZSA8c3Ryb25nPmxlYWQ8L3N0cm9uZz4gb2YgdGhlIHBhaXIgaXMgCisgICAgICogcmV0dXJuZWQuCisgICAgICogPC9pPgorICAgICAqIDxwPgorICAgICAqIFRvIGZpbmQgdGhlIFVURi0zMiBsZW5ndGggb2YgYSBzdHJpbmcsIHVzZToKKyAgICAgKiAgIDxwcmU+CisgICAgICogICAgIGxlbjMyID0gY291bnRDb2RlUG9pbnQoc291cmNlKTsKKyAgICAgKiAgIDwvcHJlPgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRleHQgdG8gYW5hbHlzZQorICAgICAqIEBwYXJhbSBvZmZzZXQxNiBVVEYtMTYgb2Zmc2V0IDwgc291cmNlIHRleHQgbGVuZ3RoLgorICAgICAqIEByZXR1cm4gVVRGLTMyIG9mZnNldAorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiBvZmZzZXQxNiBpcyBvdXQgb2YgYm91bmRzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGZpbmRDb2RlUG9pbnRPZmZzZXQoU3RyaW5nQnVmZmVyIHNvdXJjZSwgaW50IG9mZnNldDE2KQorICAgIHsKKyAgICAgICAgaWYgKG9mZnNldDE2IDwgMCB8fCBvZmZzZXQxNiA+IHNvdXJjZS5sZW5ndGgoKSkgeworICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQxNik7CisgICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgY2hhciBjaDsKKyAgICAgICAgYm9vbGVhbiBoYWRMZWFkU3Vycm9nYXRlID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldDE2OyArKyBpKSAKKyAgICAgICAgeworICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQXQoaSk7CisgICAgICAgIGlmIChoYWRMZWFkU3Vycm9nYXRlICYmIGlzVHJhaWxTdXJyb2dhdGUoY2gpKSB7CisgICAgICAgICAgICBoYWRMZWFkU3Vycm9nYXRlID0gZmFsc2U7ICAgICAgICAgICAvLyBjb3VudCB2YWxpZCB0cmFpbCBhcyB6ZXJvCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBoYWRMZWFkU3Vycm9nYXRlID0gaXNMZWFkU3Vycm9nYXRlKGNoKTsKKyAgICAgICAgICAgICsrIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50IG90aGVycyBhcyAxCisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9mZnNldDE2ID09IHNvdXJjZS5sZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gZW5kIG9mIHNvdXJjZSBiZWluZyB0aGUgbGVzcyBzaWduaWZpY2FudCBzdXJyb2dhdGUgY2hhcmFjdGVyCisgICAgICAgIC8vIHNoaWZ0IHJlc3VsdCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIKKyAgICAgICAgaWYgKGhhZExlYWRTdXJyb2dhdGUgJiYgKGlzVHJhaWxTdXJyb2dhdGUoc291cmNlLmNoYXJBdChvZmZzZXQxNikpKSkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCAtLTsKKyAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIFVURi0zMiBvZmZzZXQgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgVVRGLTMyIGJvdW5kYXJ5IGF0CisgICAgICogdGhlIGdpdmVuIFVURi0xNiBvZmZzZXQuIFVzZWQgZm9yIHJhbmRvbSBhY2Nlc3MuIFNlZSB0aGUKKyAgICAgKiA8YSBuYW1lPSJfdG9wXyI+Y2xhc3MgZGVzY3JpcHRpb248L2E+IGZvciBub3RlcyBvbiByb3VuZHRyaXBwaW5nLjxicj4KKyAgICAgKiA8aT5Ob3RlOiBJZiB0aGUgVVRGLTE2IG9mZnNldCBpcyBpbnRvIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpciwgCisgICAgICogdGhlbiB0aGUgVVRGLTMyIG9mZnNldCBvZiB0aGUgPHN0cm9uZz5sZWFkPC9zdHJvbmc+IG9mIHRoZSBwYWlyIGlzIAorICAgICAqIHJldHVybmVkLgorICAgICAqIDwvaT4KKyAgICAgKiA8cD4KKyAgICAgKiBUbyBmaW5kIHRoZSBVVEYtMzIgbGVuZ3RoIG9mIGEgc3Vic3RyaW5nLCB1c2U6CisgICAgICogICA8cHJlPgorICAgICAqICAgICBsZW4zMiA9IGNvdW50Q29kZVBvaW50KHNvdXJjZSwgc3RhcnQsIGxpbWl0KTsKKyAgICAgKiAgIDwvcHJlPgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gc291cmNlIHRleHQgdG8gYW5hbHlzZQorICAgICAqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgdGhlIHN1YnN0cmluZworICAgICAqIEBwYXJhbSBsaW1pdCBvZmZzZXQgb2YgdGhlIHN1YnN0cmluZworICAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgVVRGLTE2IHJlbGF0aXZlIHRvIHN0YXJ0CisgICAgICogQHJldHVybiBVVEYtMzIgb2Zmc2V0IHJlbGF0aXZlIHRvIHN0YXJ0CisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIG9mZnNldDE2IGlzIG5vdCB3aXRoaW4gdGhlIAorICAgICAqICAgICAgICAgICAgcmFuZ2Ugb2Ygc3RhcnQgYW5kIGxpbWl0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGZpbmRDb2RlUG9pbnRPZmZzZXQoY2hhciBzb3VyY2VbXSwgaW50IHN0YXJ0LCBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0MTYpCisgICAgeworICAgICAgICBvZmZzZXQxNiArPSBzdGFydDsKKyAgICAgICAgaWYgKG9mZnNldDE2ID4gbGltaXQpIHsKKyAgICAgICAgCXRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKG9mZnNldDE2KTsKKyAgICAgICAgfQorICAgICAgICAgCisgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICBjaGFyIGNoOworICAgICAgICBib29sZWFuIGhhZExlYWRTdXJyb2dhdGUgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IG9mZnNldDE2OyArKyBpKSAKKyAgICAgICAgeworICAgICAgICAJY2ggPSBzb3VyY2VbaV07CisgICAgICAgIAlpZiAoaGFkTGVhZFN1cnJvZ2F0ZSAmJiBpc1RyYWlsU3Vycm9nYXRlKGNoKSkgeworICAgICAgICAgICAgCWhhZExlYWRTdXJyb2dhdGUgPSBmYWxzZTsgLy8gY291bnQgdmFsaWQgdHJhaWwgYXMgemVybworICAgICAgICAJfQorICAgICAgICAJZWxzZQorICAgICAgICAJeworICAgICAgICAgICAgCWhhZExlYWRTdXJyb2dhdGUgPSBpc0xlYWRTdXJyb2dhdGUoY2gpOworICAgICAgICAgICAgCSsrIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50IG90aGVycyBhcyAxCisgICAgICAgIAl9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvZmZzZXQxNiA9PSBsaW1pdCkgeworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gZW5kIG9mIHNvdXJjZSBiZWluZyB0aGUgbGVzcyBzaWduaWZpY2FudCBzdXJyb2dhdGUgY2hhcmFjdGVyCisgICAgICAgIC8vIHNoaWZ0IHJlc3VsdCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIKKyAgICAgICAgaWYgKGhhZExlYWRTdXJyb2dhdGUgJiYgKGlzVHJhaWxTdXJyb2dhdGUoc291cmNlW29mZnNldDE2XSkpKSB7CisgICAgICAgIAlyZXN1bHQgLS07CisgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgYSBzaW5nbGUgVVRGLTMyIHZhbHVlIHRvIHRoZSBlbmQgb2YgYSBTdHJpbmdCdWZmZXIuCisgICAgICogSWYgYSB2YWxpZGl0eSBjaGVjayBpcyByZXF1aXJlZCwgdXNlIAorICAgICAqIDxhIGhyZWY9Ii4uL1VDaGFyYWN0ZXIuaHRtbCNpc0xlZ2FsKGNoYXIpIj5pc0xlZ2FsKCk8L2E+PC9jb2RlPiBvbiAKKyAgICAgKiBjaGFyMzIgYmVmb3JlIGNhbGxpbmcuCisgICAgICogQHBhcmFtIGNoYXIzMiB2YWx1ZSB0byBhcHBlbmQuCisgICAgICogQHJldHVybiB0aGUgdXBkYXRlZCBTdHJpbmdCdWZmZXIKKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBjaGFyMzIgZG9lcyBub3QgbGllIAorICAgICAqICAgICAgICAgICAgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgVW5pY29kZSBjb2RlcG9pbnRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdCdWZmZXIgYXBwZW5kKFN0cmluZ0J1ZmZlciB0YXJnZXQsIGludCBjaGFyMzIpCisgICAgeworICAgICAgICAvLyBDaGVjayBmb3IgaXJyZWd1bGFyIHZhbHVlcworICAgICAgICBpZiAoY2hhcjMyIDwgQ09ERVBPSU5UX01JTl9WQUxVRSB8fCBjaGFyMzIgPiBDT0RFUE9JTlRfTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGNvZGVwb2ludCIpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgLy8gV3JpdGUgdGhlIFVURi0xNiB2YWx1ZXMKKyAgICAgICAgaWYgKGNoYXIzMiA+PSBTVVBQTEVNRU5UQVJZX01JTl9WQUxVRSkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoZ2V0TGVhZFN1cnJvZ2F0ZShjaGFyMzIpKTsKKwkgICAgICAgIHRhcmdldC5hcHBlbmQoZ2V0VHJhaWxTdXJyb2dhdGUoY2hhcjMyKSk7CisgICAgICAgIH0gCisJICAgIGVsc2UgeworCSAgICAgICAgdGFyZ2V0LmFwcGVuZCgoY2hhciljaGFyMzIpOworCSAgICB9CisJICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorICAgICAgCisgICAgLyoqCisgICAgICogQWRkcyBhIGNvZGVwb2ludCB0byBvZmZzZXQxNiBwb3NpdGlvbiBvZiB0aGUgYXJndW1lbnQgY2hhciBhcnJheS4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGNoYXIgYXJyYXkgdG8gYmUgYXBwZW5kIHdpdGggdGhlIG5ldyBjb2RlIHBvaW50CisgICAgICogQHBhcmFtIGxpbWl0IFVURjE2IG9mZnNldCB3aGljaCB0aGUgY29kZXBvaW50IHdpbGwgYmUgYXBwZW5kZWQuCisgICAgICogQHBhcmFtIGNoYXIzMiBjb2RlIHBvaW50IHRvIGJlIGFwcGVuZGVkCisgICAgICogQHJldHVybiBvZmZzZXQgYWZ0ZXIgY2hhcjMyIGluIHRoZSBhcnJheS4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gaWYgdGhlcmUgaXMgbm90IGVub3VnaCAKKyAgICAgKiAgICAgICAgICAgIHNwYWNlIGZvciB0aGUgYXBwZW5kLCBvciB3aGVuIGNoYXIzMiBkb2VzIG5vdCBsaWUgd2l0aGluCisgICAgICogICAgICAgICAgICB0aGUgcmFuZ2Ugb2YgdGhlIFVuaWNvZGUgY29kZXBvaW50cy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBhcHBlbmQoY2hhcltdIHRhcmdldCwgaW50IGxpbWl0LCBpbnQgY2hhcjMyKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGlycmVndWxhciB2YWx1ZXMKKyAgICAgICAgaWYgKGNoYXIzMiA8IENPREVQT0lOVF9NSU5fVkFMVUUgfHwgY2hhcjMyID4gQ09ERVBPSU5UX01BWF9WQUxVRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBjb2RlcG9pbnQiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBXcml0ZSB0aGUgVVRGLTE2IHZhbHVlcworICAgICAgICBpZiAoY2hhcjMyID49IFNVUFBMRU1FTlRBUllfTUlOX1ZBTFVFKSAKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0W2xpbWl0ICsrXSA9IGdldExlYWRTdXJyb2dhdGUoY2hhcjMyKTsKKyAgICAgICAgICAgIHRhcmdldFtsaW1pdCArK10gPSBnZXRUcmFpbFN1cnJvZ2F0ZShjaGFyMzIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0W2xpbWl0ICsrXSA9IChjaGFyKWNoYXIzMjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGltaXQ7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgY29kZXBvaW50cyBpbiBhIFVURjE2IFN0cmluZworICAgICAqIEBwYXJhbSBzb3VyY2UgVVRGMTYgc3RyaW5nCisgICAgICogQHJldHVybiBudW1iZXIgb2YgY29kZXBvaW50IGluIHN0cmluZworICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvdW50Q29kZVBvaW50KFN0cmluZyBzb3VyY2UpCisgICAgeworICAgICAgICBpZiAoc291cmNlID09IG51bGwgfHwgc291cmNlLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmaW5kQ29kZVBvaW50T2Zmc2V0KHNvdXJjZSwgc291cmNlLmxlbmd0aCgpKTsKKyAgICB9CisgICAgICAKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgY29kZXBvaW50cyBpbiBhIFVURjE2IFN0cmluZyBidWZmZXIKKyAgICAgKiBAcGFyYW0gc291cmNlIFVURjE2IHN0cmluZyBidWZmZXIKKyAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBjb2RlcG9pbnQgaW4gc3RyaW5nCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgY291bnRDb2RlUG9pbnQoU3RyaW5nQnVmZmVyIHNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCB8fCBzb3VyY2UubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZpbmRDb2RlUG9pbnRPZmZzZXQoc291cmNlLCBzb3VyY2UubGVuZ3RoKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE51bWJlciBvZiBjb2RlcG9pbnRzIGluIGEgVVRGMTYgY2hhciBhcnJheSBzdWJzdHJpbmcKKyAgICAgKiBAcGFyYW0gc291cmNlIFVURjE2IGNoYXIgYXJyYXkKKyAgICAgKiBAcGFyYW0gc3RhcnQgb2Zmc2V0IG9mIHRoZSBzdWJzdHJpbmcKKyAgICAgKiBAcGFyYW0gbGltaXQgb2Zmc2V0IG9mIHRoZSBzdWJzdHJpbmcKKyAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBjb2RlcG9pbnQgaW4gdGhlIHN1YnN0cmluZworICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiBzdGFydCBhbmQgbGltaXQgYXJlIG5vdCB2YWxpZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBjb3VudENvZGVQb2ludChjaGFyIHNvdXJjZVtdLCBpbnQgc3RhcnQsIGludCBsaW1pdCkKKyAgICB7CisgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCB8fCBzb3VyY2UubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmaW5kQ29kZVBvaW50T2Zmc2V0KHNvdXJjZSwgc3RhcnQsIGxpbWl0LCBsaW1pdCAtIHN0YXJ0KTsKKyAgICB9CisgICAgICAKKyAgICAvKioKKyAgICAgKiBTZXQgYSBjb2RlIHBvaW50IGludG8gYSBVVEYxNiBwb3NpdGlvbi4gCisgICAgICogQWRqdXN0cyB0YXJnZXQgYWNjb3JkaW5nIGlmIHdlIGFyZSByZXBsYWNpbmcgYSBub24tc3VwcGxlbWVudGFyeSAKKyAgICAgKiBjb2RlcG9pbnQgd2l0aCBhIHN1cHBsZW1lbnRhcnkgYW5kIHZpY2UgdmVyc2EuCisgICAgICogQHBhcmFtIHRhcmdldCBzdHJpbmdidWZmZXIKKyAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgVVRGMTYgcG9zaXRpb24gdG8gaW5zZXJ0IGludG8KKyAgICAgKiBAcGFyYW0gY2hhcjMyIGNvZGUgcG9pbnQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q2hhckF0KFN0cmluZ0J1ZmZlciB0YXJnZXQsIGludCBvZmZzZXQxNiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhcjMyKQorICAgIHsKKyAgICAgICAgaW50IGNvdW50ID0gMTsKKyAgICAgICAgY2hhciBzaW5nbGUgPSB0YXJnZXQuY2hhckF0KG9mZnNldDE2KTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1N1cnJvZ2F0ZShzaW5nbGUpKSAKKyAgICAgICAgeworICAgICAgICAgICAgLy8gcGFpcnMgb2YgdGhlIHN1cnJvZ2F0ZSB3aXRoIG9mZnNldDE2IGF0IHRoZSBsZWFkIGNoYXIgZm91bmQKKyAgICAgICAgICAgIGlmIChpc0xlYWRTdXJyb2dhdGUoc2luZ2xlKSAmJiAodGFyZ2V0Lmxlbmd0aCgpID4gb2Zmc2V0MTYgKyAxKSAKKyAgICAgICAgICAgICAgICAmJiBpc1RyYWlsU3Vycm9nYXRlKHRhcmdldC5jaGFyQXQob2Zmc2V0MTYgKyAxKSkpIHsKKwkgICAgICAgICAgICBjb3VudCArKzsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIC8vIHBhaXJzIG9mIHRoZSBzdXJyb2dhdGUgd2l0aCBvZmZzZXQxNiBhdCB0aGUgdHJhaWwgY2hhciAKKwkgICAgICAgICAgICAvLyBmb3VuZAorCSAgICAgICAgICAgIGlmIChpc1RyYWlsU3Vycm9nYXRlKHNpbmdsZSkgJiYgKG9mZnNldDE2ID4gMCkgJiYKKwkgICAgICAgICAgICAgICAgaXNMZWFkU3Vycm9nYXRlKHRhcmdldC5jaGFyQXQob2Zmc2V0MTYgLTEpKSkKKwkgICAgICAgICAgICB7CisJICAgICAgICAgICAgICAgIG9mZnNldDE2IC0tOworCSAgICAgICAgICAgICAgICBjb3VudCArKzsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgIH0KKwkgICAgdGFyZ2V0LnJlcGxhY2Uob2Zmc2V0MTYsIG9mZnNldDE2ICsgY291bnQsIHZhbHVlT2YoY2hhcjMyKSk7CisgICAgfQorICAgIAkKKyAgICAvKioKKyAgICAgKiBTZXQgYSBjb2RlIHBvaW50IGludG8gYSBVVEYxNiBwb3NpdGlvbiBpbiBhIGNoYXIgYXJyYXkuCisgICAgICogQWRqdXN0cyB0YXJnZXQgYWNjb3JkaW5nIGlmIHdlIGFyZSByZXBsYWNpbmcgYSBub24tc3VwcGxlbWVudGFyeSAKKyAgICAgKiBjb2RlcG9pbnQgd2l0aCBhIHN1cHBsZW1lbnRhcnkgYW5kIHZpY2UgdmVyc2EuCisgICAgICogQHBhcmFtIHRhcmdldCBjaGFyIGFycmF5CisgICAgICogQHBhcmFtIGxpbWl0IG51bWJlcnMgb2YgdmFsaWQgY2hhcnMgaW4gdGFyZ2V0LCBkaWZmZXJlbnQgZnJvbSAKKyAgICAgKiAgICAgICAgdGFyZ2V0Lmxlbmd0aC4gbGltaXQgY291bnRzIHRoZSBudW1iZXIgb2YgY2hhcnMgaW4gdGFyZ2V0IAorICAgICAqICAgICAgICB0aGF0IHJlcHJlc2VudHMgYSBzdHJpbmcsIG5vdCB0aGUgc2l6ZSBvZiBhcnJheSB0YXJnZXQuCisgICAgICogQHBhcmFtIG9mZnNldDE2IFVURjE2IHBvc2l0aW9uIHRvIGluc2VydCBpbnRvCisgICAgICogQHBhcmFtIGNoYXIzMiBjb2RlIHBvaW50CisgICAgICogQHJldHVybiBuZXcgbnVtYmVyIG9mIGNoYXJzIGluIHRhcmdldCB0aGF0IHJlcHJlc2VudHMgYSBzdHJpbmcKKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgb2Zmc2V0MTYgaXMgb3V0IG9mIHJhbmdlCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgc2V0Q2hhckF0KGNoYXIgdGFyZ2V0W10sIGludCBsaW1pdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQxNiwgaW50IGNoYXIzMikKKyAgICB7CisgICAgICAgIGlmIChvZmZzZXQxNiA+PSBsaW1pdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQxNik7CisgICAgICAgIH0KKyAgICAgICAgaW50IGNvdW50ID0gMTsKKyAgICAgICAgY2hhciBzaW5nbGUgPSB0YXJnZXRbb2Zmc2V0MTZdOworICAgICAgICAKKyAgICAgICAgaWYgKGlzU3Vycm9nYXRlKHNpbmdsZSkpIAorICAgICAgICB7CisgICAgICAgICAgICAvLyBwYWlycyBvZiB0aGUgc3Vycm9nYXRlIHdpdGggb2Zmc2V0MTYgYXQgdGhlIGxlYWQgY2hhciBmb3VuZAorICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShzaW5nbGUpICYmICh0YXJnZXQubGVuZ3RoID4gb2Zmc2V0MTYgKyAxKSAmJgorICAgICAgICAgICAgICAgIGlzVHJhaWxTdXJyb2dhdGUodGFyZ2V0W29mZnNldDE2ICsgMV0pKSB7CisJICAgICAgICAgICAgY291bnQgKys7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAvLyBwYWlycyBvZiB0aGUgc3Vycm9nYXRlIHdpdGggb2Zmc2V0MTYgYXQgdGhlIHRyYWlsIGNoYXIgCisJICAgICAgICAgICAgLy8gZm91bmQKKwkgICAgICAgICAgICBpZiAoaXNUcmFpbFN1cnJvZ2F0ZShzaW5nbGUpICYmIChvZmZzZXQxNiA+IDApICYmCisJICAgICAgICAgICAgICAgIGlzTGVhZFN1cnJvZ2F0ZSh0YXJnZXRbb2Zmc2V0MTYgLTFdKSkKKwkgICAgICAgICAgICB7CisJICAgICAgICAgICAgICAgIG9mZnNldDE2IC0tOworCSAgICAgICAgICAgICAgICBjb3VudCArKzsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgIH0KKyAgICAJICAKKwkgICAgU3RyaW5nIHN0ciA9IHZhbHVlT2YoY2hhcjMyKTsKKwkgICAgaW50IHJlc3VsdCA9IGxpbWl0OworCSAgICBpbnQgc3RybGVuZ3RoID0gc3RyLmxlbmd0aCgpOworCSAgICB0YXJnZXRbb2Zmc2V0MTZdID0gc3RyLmNoYXJBdCgwKTsKKwkgICAgaWYgKGNvdW50ID09IHN0cmxlbmd0aCkgeworCSAgICAgICAgaWYgKGNvdW50ID09IDIpIHsKKwkgICAgICAgICAgICB0YXJnZXRbb2Zmc2V0MTYgKyAxXSA9IHN0ci5jaGFyQXQoMSk7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgICAvLyB0aGlzIGlzIG5vdCBleGFjdCBtYXRjaCBpbiBzcGFjZSwgd2UnbGwgaGF2ZSB0byBkbyBzb21lIAorCSAgICAgICAgLy8gc2hpZnRpbmcKKwkgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGFyZ2V0LCBvZmZzZXQxNiArIGNvdW50LCB0YXJnZXQsIAorCSAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0MTYgKyBzdHJsZW5ndGgsIGxpbWl0IC0gKG9mZnNldDE2ICsgY291bnQpKTsKKwkgICAgICAgIGlmIChjb3VudCA8IHN0cmxlbmd0aCkgeworCSAgICAgICAgICAgIC8vIGNoYXIzMiBpcyBhIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIHRyeWluZyB0byBzcXVlZXplIGludG8KKwkgICAgICAgICAgICAvLyBhIG5vbi1zdXBwbGVtZW50YXJ5IHNwYWNlCisJICAgICAgICAgICAgdGFyZ2V0W29mZnNldDE2ICsgMV0gPSBzdHIuY2hhckF0KDEpOworCSAgICAgICAgICAgIHJlc3VsdCArKzsKKwkgICAgICAgICAgICBpZiAocmVzdWx0IDwgdGFyZ2V0Lmxlbmd0aCkgeworCSAgICAgICAgICAgICAgICB0YXJnZXRbcmVzdWx0XSA9IDA7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgLy8gY2hhcjMyIGlzIGEgbm9uLXN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIHRyeWluZyB0byBmaWxsIAorCSAgICAgICAgICAgIC8vIGludG8gYSBzdXBwbGVtZW50YXJ5IHNwYWNlCisJICAgICAgICAgICAgcmVzdWx0IC0tOworCSAgICAgICAgICAgIHRhcmdldFtyZXN1bHRdID0gMDsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIFNoaWZ0cyBvZmZzZXQxNiBieSB0aGUgYXJndW1lbnQgbnVtYmVyIG9mIGNvZGVwb2ludHMKKyAgICAgKiBAcGFyYW0gc291cmNlIHN0cmluZworICAgICAqIEBwYXJhbSBvZmZzZXQxNiBVVEYxNiBwb3NpdGlvbiB0byBzaGlmdAorICAgICAqIEBwYXJhbSBzaGlmdDMyIG51bWJlciBvZiBjb2RlcG9pbnRzIHRvIHNoaWZ0CisgICAgICogQHJldHVybiBuZXcgc2hpZnRlZCBvZmZzZXQxNiAKKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgdGhlIG5ldyBvZmZzZXQxNiBpcyBvdXQgb2YgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBtb3ZlQ29kZVBvaW50T2Zmc2V0KFN0cmluZyBzb3VyY2UsIGludCBvZmZzZXQxNiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaGlmdDMyKQorICAgIHsKKyAgICAgICAgaW50IHNpemUgPSBzb3VyY2UubGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQxNiA8IDAgfHwgc2hpZnQzMiArIG9mZnNldDE2ID4gc2l6ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24ob2Zmc2V0MTYpOworICAgICAgICB9CisgICAgICAgIGNoYXIgY2g7CisgICAgICAgIGludCByZXN1bHQgPSBvZmZzZXQxNjsKKyAgICAgICAgaW50IGNvdW50ID0gc2hpZnQzMjsKKyAgICAgICAgd2hpbGUgKHJlc3VsdCA8IHNpemUgJiYgY291bnQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQXQocmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChpc0xlYWRTdXJyb2dhdGUoY2gpICYmICgocmVzdWx0ICsgMSkgPCBzaXplKSAmJiAKKyAgICAgICAgICAgICAgICBpc1RyYWlsU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQocmVzdWx0ICsgMSkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY291bnQgLS07CisgICAgICAgICAgICByZXN1bHQgKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50ICE9IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKHNoaWZ0MzIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2hpZnRzIG9mZnNldDE2IGJ5IHRoZSBhcmd1bWVudCBudW1iZXIgb2YgY29kZXBvaW50cworICAgICAqIEBwYXJhbSB0YXJnZXQgc3RyaW5nIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBvZmZzZXQxNiBVVEYxNiBwb3NpdGlvbiB0byBzaGlmdAorICAgICAqIEBwYXJhbSBzaGlmdDMyIG51bWJlciBvZiBjb2RlcG9pbnRzIHRvIHNoaWZ0CisgICAgICogQHJldHVybiBuZXcgc2hpZnRlZCBvZmZzZXQxNiAKKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgdGhlIG5ldyBvZmZzZXQxNiBpcyBvdXQgb2YgCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBtb3ZlQ29kZVBvaW50T2Zmc2V0KFN0cmluZ0J1ZmZlciBzb3VyY2UsIGludCBvZmZzZXQxNiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoaWZ0MzIpCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9IHNvdXJjZS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKG9mZnNldDE2IDwgMCB8fCBzaGlmdDMyICsgb2Zmc2V0MTYgPiBzaXplKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQxNik7CisgICAgICAgIH0KKyAgICAgICAgY2hhciBjaDsKKyAgICAgICAgaW50IHJlc3VsdCA9IG9mZnNldDE2OworICAgICAgICBpbnQgY291bnQgPSBzaGlmdDMyOworICAgICAgICB3aGlsZSAocmVzdWx0IDwgc2l6ZSAmJiBjb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJBdChyZXN1bHQpOworICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShjaCkgJiYgKChyZXN1bHQgKyAxKSA8IHNpemUpICYmIAorICAgICAgICAgICAgICAgIGlzVHJhaWxTdXJyb2dhdGUoc291cmNlLmNoYXJBdChyZXN1bHQgKyAxKSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjb3VudCAtLTsKKyAgICAgICAgICAgIHJlc3VsdCArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY291bnQgIT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oc2hpZnQzMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaGlmdHMgb2Zmc2V0MTYgYnkgdGhlIGFyZ3VtZW50IG51bWJlciBvZiBjb2RlcG9pbnRzIHdpdGhpbiBhIHN1YmFycmF5LgorICAgICAqIEBwYXJhbSB0YXJnZXQgY2hhciBhcnJheQorICAgICAqIEBwYXJhbSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc3ViYXJyYXkgdG8gYmUgcGVyZm9ybWVkIG9uCisgICAgICogQHBhcmFtIGxpbWl0IHBvc2l0aW9uIG9mIHRoZSBzdWJhcnJheSB0byBiZSBwZXJmb3JtZWQgb24KKyAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgVVRGMTYgcG9zaXRpb24gdG8gc2hpZnQgcmVsYXRpdmUgdG8gc3RhcnQKKyAgICAgKiBAcGFyYW0gc2hpZnQzMiBudW1iZXIgb2YgY29kZXBvaW50cyB0byBzaGlmdAorICAgICAqIEByZXR1cm4gbmV3IHNoaWZ0ZWQgb2Zmc2V0MTYgcmVsYXRpdmUgdG8gc3RhcnQKKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgdGhlIG5ldyBvZmZzZXQxNiBpcyBvdXQgb2YgCisgICAgICogICAgICAgICAgICBib3VuZHMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJhcnJheS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBtb3ZlQ29kZVBvaW50T2Zmc2V0KGNoYXIgc291cmNlW10sIGludCBzdGFydCwgaW50IGxpbWl0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQxNiwgaW50IHNoaWZ0MzIpCisgICAgeworICAgICAgICBvZmZzZXQxNiArPSBzdGFydDsKKyAgICAgICAgaWYgKHNoaWZ0MzIgKyBvZmZzZXQxNiA+IGxpbWl0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihvZmZzZXQxNik7CisgICAgICAgIH0KKyAgICAgICAgY2hhciBjaDsKKyAgICAgICAgaW50IHJlc3VsdCA9IG9mZnNldDE2OworICAgICAgICBpbnQgY291bnQgPSBzaGlmdDMyOworICAgICAgICB3aGlsZSAocmVzdWx0IDwgbGltaXQgJiYgY291bnQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtyZXN1bHRdOworICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShjaCkgJiYgKChyZXN1bHQgKyAxKSA8IGxpbWl0KSAmJiAKKyAgICAgICAgICAgICAgICBpc1RyYWlsU3Vycm9nYXRlKHNvdXJjZVtyZXN1bHQgKyAxXSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjb3VudCAtLTsKKyAgICAgICAgICAgIHJlc3VsdCArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY291bnQgIT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oc2hpZnQzMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdCAtIHN0YXJ0OworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIEluc2VydHMgY2hhcjMyIGNvZGVwb2ludCBpbnRvIHRhcmdldCBhdCB0aGUgYXJndW1lbnQgb2Zmc2V0MTYuIAorICAgICAqIElmIHRoZSBvZmZzZXQxNiBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgc3VwcGxlbWVudGFyeSBjb2RlcG9pbnQsIGNoYXIzMiAKKyAgICAgKiB3aWxsIGJlIGluc2VydGVkIGFmdGVyIHRoZSBzdXBwbGVtZW50YXJ5IGNvZGVwb2ludC4KKyAgICAgKiBUaGUgbGVuZ3RoIG9mIHRhcmdldCBpbmNyZWFzZXMgYnkgb25lIGlmIGNvZGVwb2ludCBpcyBub24tc3VwcGxlbWVudGFyeSwgCisgICAgICogMiBvdGhlcndpc2UuIAorICAgICAqIDxwPgorICAgICAqIFRoZSBvdmVyYWxsIGVmZmVjdCBpcyBleGFjdGx5IGFzIGlmIHRoZSBhcmd1bWVudCB3ZXJlIGNvbnZlcnRlZCB0byBhIAorICAgICAqIHN0cmluZyBieSB0aGUgbWV0aG9kIHZhbHVlT2YoY2hhcikgYW5kIHRoZSBjaGFyYWN0ZXJzIGluIHRoYXQgc3RyaW5nIAorICAgICAqIHdlcmUgdGhlbiBpbnNlcnRlZCBpbnRvIHRhcmdldCBhdCB0aGUgcG9zaXRpb24gaW5kaWNhdGVkIGJ5IG9mZnNldDE2LiAKKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogVGhlIG9mZnNldCBhcmd1bWVudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBhbmQgbGVzcyB0aGFuIAorICAgICAqIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2Ygc291cmNlLgorICAgICAqIEBwYXJhbSB0YXJnZXQgc3RyaW5nIGJ1ZmZlciB0byBpbnNlcnQgdG8KKyAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgb2Zmc2V0IHdoaWNoIGNoYXIzMiB3aWxsIGJlIGluc2VydGVkIGluCisgICAgICogQHBhcmFtIGNoYXIzMiBjb2RlcG9pbnQgdG8gYmUgaW5zZXJ0ZWQKKyAgICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRhcmdldAorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB0aHJvd24gaWYgb2Zmc2V0MTYgaXMgaW52YWxpZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1ZmZlciBpbnNlcnQoU3RyaW5nQnVmZmVyIHRhcmdldCwgaW50IG9mZnNldDE2LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhcjMyKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IHZhbHVlT2YoY2hhcjMyKTsKKyAgICAgICAgaWYgKG9mZnNldDE2ICE9IHRhcmdldC5sZW5ndGgoKSAmJiAKKyAgICAgICAgICAgIGJvdW5kcyh0YXJnZXQsIG9mZnNldDE2KSA9PSBUUkFJTF9TVVJST0dBVEVfQk9VTkRBUlkpIHsKKyAgICAgICAgICAgIG9mZnNldDE2ICsrOworICAgICAgICB9CisgICAgICAgIHRhcmdldC5pbnNlcnQob2Zmc2V0MTYsIHN0cik7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5zZXJ0cyBjaGFyMzIgY29kZXBvaW50IGludG8gdGFyZ2V0IGF0IHRoZSBhcmd1bWVudCBvZmZzZXQxNi4gCisgICAgICogSWYgdGhlIG9mZnNldDE2IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBzdXBwbGVtZW50YXJ5IGNvZGVwb2ludCwgY2hhcjMyIAorICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIHN1cHBsZW1lbnRhcnkgY29kZXBvaW50LgorICAgICAqIExpbWl0IGluY3JlYXNlcyBieSBvbmUgaWYgY29kZXBvaW50IGlzIG5vbi1zdXBwbGVtZW50YXJ5LCAyIG90aGVyd2lzZS4gCisgICAgICogPHA+CisgICAgICogVGhlIG92ZXJhbGwgZWZmZWN0IGlzIGV4YWN0bHkgYXMgaWYgdGhlIGFyZ3VtZW50IHdlcmUgY29udmVydGVkIHRvIGEgCisgICAgICogc3RyaW5nIGJ5IHRoZSBtZXRob2QgdmFsdWVPZihjaGFyKSBhbmQgdGhlIGNoYXJhY3RlcnMgaW4gdGhhdCBzdHJpbmcgCisgICAgICogd2VyZSB0aGVuIGluc2VydGVkIGludG8gdGFyZ2V0IGF0IHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgb2Zmc2V0MTYuIAorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgb2Zmc2V0IGFyZ3VtZW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGFuZCBsZXNzIHRoYW4gCisgICAgICogb3IgZXF1YWwgdG8gdGhlIGxpbWl0LgorICAgICAqIEBwYXJhbSB0YXJnZXQgY2hhciBhcnJheSB0byBpbnNlcnQgdG8KKyAgICAgKiBAcGFyYW0gbGltaXQgZW5kIGluZGV4IG9mIHRoZSBjaGFyIGFycmF5LCBsaW1pdCA8PSB0YXJnZXQubGVuZ3RoCisgICAgICogQHBhcmFtIG9mZnNldDE2IG9mZnNldCB3aGljaCBjaGFyMzIgd2lsbCBiZSBpbnNlcnRlZCBpbgorICAgICAqIEBwYXJhbSBjaGFyMzIgY29kZXBvaW50IHRvIGJlIGluc2VydGVkCisgICAgICogQHJldHVybiBuZXcgbGltaXQgc2l6ZQorICAgICAqIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB0aHJvd24gaWYgb2Zmc2V0MTYgaXMgaW52YWxpZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBpbnNlcnQoY2hhciB0YXJnZXRbXSwgaW50IGxpbWl0LCBpbnQgb2Zmc2V0MTYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhcjMyKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IHZhbHVlT2YoY2hhcjMyKTsKKyAgICAgICAgaWYgKG9mZnNldDE2ICE9IGxpbWl0ICYmCisgICAgICAgICAgICBib3VuZHModGFyZ2V0LCAwLCBsaW1pdCwgb2Zmc2V0MTYpID09IFRSQUlMX1NVUlJPR0FURV9CT1VOREFSWSkgeworICAgICAgICAgICAgb2Zmc2V0MTYgKys7CisgICAgICAgIH0KKyAgICAgICAgaW50IHNpemUgPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIGlmIChsaW1pdCArIHNpemUgPiB0YXJnZXQubGVuZ3RoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKG9mZnNldDE2ICsgc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0YXJnZXQsIG9mZnNldDE2LCB0YXJnZXQsIG9mZnNldDE2ICsgc2l6ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCAtIG9mZnNldDE2KTsKKyAgICAgICAgdGFyZ2V0W29mZnNldDE2XSA9IHN0ci5jaGFyQXQoMCk7CisgICAgICAgIGlmIChzaXplID09IDIpIHsKKyAgICAgICAgICAgIHRhcmdldFtvZmZzZXQxNiArIDFdID0gc3RyLmNoYXJBdCgxKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGltaXQgKyBzaXplOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGNvZGVwb2ludCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgdGFyZ2V0IAorICAgICAqIChzaG9ydGVuaW5nIHRhcmdldCBieSAxIGNoYXJhY3RlciBpZiB0aGUgY29kZXBvaW50IGlzIGEgCisgICAgICogbm9uLXN1cHBsZW1lbnRhcnksIDIgb3RoZXJ3aXNlKS4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IHN0cmluZyBidWZmZXIgdG8gcmVtb3ZlIGNvZGVwb2ludCBmcm9tCisgICAgICogQHBhcmFtIG9mZnNldDE2IG9mZnNldCB3aGljaCB0aGUgY29kZXBvaW50IHdpbGwgYmUgcmVtb3ZlZAorICAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGFyZ2V0CisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHRocm93biBpZiBvZmZzZXQxNiBpcyBpbnZhbGlkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nQnVmZmVyIGRlbGV0ZShTdHJpbmdCdWZmZXIgdGFyZ2V0LCBpbnQgb2Zmc2V0MTYpCisgICAgeworICAgICAgICBpbnQgY291bnQgPSAxOworICAgICAgICBzd2l0Y2ggKGJvdW5kcyh0YXJnZXQsIG9mZnNldDE2KSkgeworICAgICAgICAgICAgY2FzZSBMRUFEX1NVUlJPR0FURV9CT1VOREFSWTogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFJBSUxfU1VSUk9HQVRFX0JPVU5EQVJZOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDE2IC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQuZGVsZXRlKG9mZnNldDE2LCBvZmZzZXQxNiArIGNvdW50KTsKKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIHRoZSBjb2RlcG9pbnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzIHRhcmdldCAKKyAgICAgKiAoc2hvcnRlbmluZyB0YXJnZXQgYnkgMSBjaGFyYWN0ZXIgaWYgdGhlIGNvZGVwb2ludCBpcyBhIAorICAgICAqIG5vbi1zdXBwbGVtZW50YXJ5LCAyIG90aGVyd2lzZSkuCisgICAgICogQHBhcmFtIHRhcmdldCBzdHJpbmcgYnVmZmVyIHRvIHJlbW92ZSBjb2RlcG9pbnQgZnJvbQorICAgICAqIEBwYXJhbSBsaW1pdCBlbmQgaW5kZXggb2YgdGhlIGNoYXIgYXJyYXksIGxpbWl0IDw9IHRhcmdldC5sZW5ndGgKKyAgICAgKiBAcGFyYW0gb2Zmc2V0MTYgb2Zmc2V0IHdoaWNoIHRoZSBjb2RlcG9pbnQgd2lsbCBiZSByZW1vdmVkCisgICAgICogQHJldHVybiBhIG5ldyBsaW1pdCBzaXplCisgICAgICogQGV4Y2VwdGlvbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHRocm93biBpZiBvZmZzZXQxNiBpcyBpbnZhbGlkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGRlbGV0ZShjaGFyIHRhcmdldFtdLCBpbnQgbGltaXQsIGludCBvZmZzZXQxNikKKyAgICB7CisgICAgICAgIGludCBjb3VudCA9IDE7CisgICAgICAgIHN3aXRjaCAoYm91bmRzKHRhcmdldCwgMCwgbGltaXQsIG9mZnNldDE2KSkgeworICAgICAgICAgICAgY2FzZSBMRUFEX1NVUlJPR0FURV9CT1VOREFSWTogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFJBSUxfU1VSUk9HQVRFX0JPVU5EQVJZOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDE2IC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHRhcmdldCwgb2Zmc2V0MTYgKyBjb3VudCwgdGFyZ2V0LCBvZmZzZXQxNiwgCisgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCAtIChvZmZzZXQxNiArIGNvdW50KSk7CisgICAgICAgIHRhcmdldFtsaW1pdCAtIGNvdW50XSA9IDA7CisgICAgICAgIHJldHVybiBsaW1pdCAtIGNvdW50OworICAgIH0KKyAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGUgYXJndW1lbnQgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nIG9mIAorICAgICAqIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBhcmd1bWVudCBjb2RlcG9pbnQuIEkuZS4sIHRoZSBzbWFsbGVzdCAKKyAgICAgKiBpbmRleCA8Y29kZT5pPC9jb2RlPiBzdWNoIHRoYXQgPGNvZGU+VVRGMTYuY2hhckF0KHNvdXJjZSwgaSkgPT0gCisgICAgICogY2hhcjMyPC9jb2RlPiBpcyB0cnVlLiAKKyAgICAgKiA8cD5JZiBubyBzdWNoIGNoYXJhY3RlciBvY2N1cnMgaW4gdGhpcyBzdHJpbmcsIHRoZW4gLTEgaXMgcmV0dXJuZWQuPC9wPiAKKyAgICAgKiA8cD4gCisgICAgICogRXhhbXBsZXM6PGJyPgorICAgICAqIFVURjE2LmluZGV4T2YoImFiYyIsICdhJykgcmV0dXJucyAwPGJyPgorICAgICAqIFVURjE2LmluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsIDB4MTAwMDApIHJldHVybnMgMzxicj4KKyAgICAgKiBVVEYxNi5pbmRleE9mKCJhYmNcdWQ4MDBcdWRjMDAiLCAweGQ4MDApIHJldHVybnMgLTE8YnI+CisgICAgICogPC9wPgorICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgc3VwcG9ydCB0byBqZGsgMS4zLCB3aGljaCBkb2VzIG5vdCAKKyAgICAgKiBzdXBwb3J0IHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyB0byBpdHMgZnVsbGVzdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQKKyAgICAgKiBAcGFyYW0gY2hhcjMyIGNvZGVwb2ludCB0byBzZWFyY2ggZm9yIAorICAgICAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBjb2RlcG9pbnQgaW4gdGhlIAorICAgICAqICAgICAgICAgYXJndW1lbnQgVW5pY29kZSBzdHJpbmcsIG9yIC0xIGlmIHRoZSBjb2RlcG9pbnQgZG9lcyBub3Qgb2NjdXIuCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBpbmRleE9mKFN0cmluZyBzb3VyY2UsIGludCBjaGFyMzIpICAKKyAgICB7CisgICAgICAgIGlmIChjaGFyMzIgPCBDT0RFUE9JTlRfTUlOX1ZBTFVFIHx8IAorICAgICAgICAgICAgY2hhcjMyID4gQ09ERVBPSU5UX01BWF9WQUxVRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgY2hhcjMyIGlzIG5vdCBhIHZhbGlkIGNvZGVwb2ludCIpOworICAgICAgICB9CisgICAgICAgIC8vIG5vbi1zdXJyb2dhdGUgYm1wCisgICAgICAgIGlmIChjaGFyMzIgPCBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgfHwKKyAgICAgICAgICAgIChjaGFyMzIgPiBUUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFICYmIAorICAgICAgICAgICAgIGNoYXIzMiA8IFNVUFBMRU1FTlRBUllfTUlOX1ZBTFVFKSkgeworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5pbmRleE9mKChjaGFyKWNoYXIzMik7CisgICAgICAgIH0KKyAgICAgICAgLy8gc3Vycm9nYXRlCisgICAgICAgIGlmIChjaGFyMzIgPCBTVVBQTEVNRU5UQVJZX01JTl9WQUxVRSkgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IHNvdXJjZS5pbmRleE9mKChjaGFyKWNoYXIzMik7CisgICAgICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNMZWFkU3Vycm9nYXRlKChjaGFyKWNoYXIzMikgJiYgCisgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgPCBzb3VyY2UubGVuZ3RoKCkgLSAxKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHJlc3VsdCArIDEpKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4T2Yoc291cmNlLCBjaGFyMzIsIHJlc3VsdCArIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyB0cmFpbCBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID4gMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNMZWFkU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQocmVzdWx0IC0gMSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleE9mKHNvdXJjZSwgY2hhcjMyLCByZXN1bHQgKyAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAvLyBzdXBwbGVtZW50YXJ5CisgICAgICAgIFN0cmluZyBjaGFyMzJzdHIgPSB0b1N0cmluZyhjaGFyMzIpOworICAgICAgICByZXR1cm4gc291cmNlLmluZGV4T2YoY2hhcjMyc3RyKTsKKyAgICB9CisgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGUgYXJndW1lbnQgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nIG9mIAorICAgICAqIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcgc3RyLiBUaGlzIG1ldGhvZCBpcyAKKyAgICAgKiBpbXBsZW1lbnRlZCBiYXNlZCBvbiBjb2RlcG9pbnRzLCBoZW5jZSBhICJsZWFkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKworICAgICAqIHRyYWlsIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIiIGlzIHRyZWF0ZWQgYXMgb25lIGVudGl0eS5lCisgICAgICogSGVuY2UgaWYgdGhlIHN0ciBzdGFydHMgd2l0aCB0cmFpbCBzdXJyb2dhdGUgY2hhcmFjdGVyIGF0IGluZGV4IDAsIGEgCisgICAgICogc291cmNlIHdpdGggYSBsZWFkaW5nIGEgc3Vycm9nYXRlIGNoYXJhY3RlciBiZWZvcmUgc3RyIGZvdW5kIGF0IGluIAorICAgICAqIHNvdXJjZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgbWF0Y2guIFZpY2UgdmVyc2EgZm9yIGxlYWQgc3Vycm9nYXRlcyAKKyAgICAgKiB0aGF0IGVuZHMgc3RyLgorICAgICAqIFNlZSBleGFtcGxlIGJlbG93LgorICAgICAqIDxwPklmIG5vIHN1Y2ggc3RyaW5nIHN0ciBvY2N1cnMgaW4gdGhpcyBzb3VyY2UsIHRoZW4gLTEgaXMgcmV0dXJuZWQuCisgICAgICogPC9wPiA8cD4KKyAgICAgKiBFeGFtcGxlczo8YnI+CisgICAgICogVVRGMTYuaW5kZXhPZigiYWJjIiwgImFiIikgcmV0dXJucyAwPGJyPgorICAgICAqIFVURjE2LmluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsICJcdWQ4MDBcdWRjMDAiKSByZXR1cm5zIDM8YnI+CisgICAgICogVVRGMTYuaW5kZXhPZigiYWJjXHVkODAwXHVkYzAwIiwgIlx1ZDgwMCIpIHJldHVybnMgLTE8YnI+CisgICAgICogPC9wPgorICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgc3VwcG9ydCB0byBqZGsgMS4zLCB3aGljaCBkb2VzIG5vdCAKKyAgICAgKiBzdXBwb3J0IHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyB0byBpdHMgZnVsbGVzdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQKKyAgICAgKiBAcGFyYW0gc3RyIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0byBzZWFyY2ggZm9yCisgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGVwb2ludCBpbiB0aGUgCisgICAgICogICAgICAgICBhcmd1bWVudCBVbmljb2RlIHN0cmluZywgb3IgLTEgaWYgdGhlIGNvZGVwb2ludCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGluZGV4T2YoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHN0cikgIAorICAgIHsKKyAgICAgICAgaW50IHN0ckxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgLy8gbm9uLXN1cnJvZ2F0ZSBlbmRzCisgICAgICAgIGlmICghaXNUcmFpbFN1cnJvZ2F0ZShzdHIuY2hhckF0KDApKSAmJiAKKyAgICAgICAgICAgICFpc0xlYWRTdXJyb2dhdGUoc3RyLmNoYXJBdChzdHJMZW5ndGggLSAxKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2UuaW5kZXhPZihzdHIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgcmVzdWx0ICAgID0gc291cmNlLmluZGV4T2Yoc3RyKTsKKyAgICAgICAgaW50IHJlc3VsdEVuZCA9IHJlc3VsdCArIHN0ckxlbmd0aDsKKyAgICAgICAgaWYgKHJlc3VsdCA+PSAwKSB7CisgICAgICAgICAgICAvLyBjaGVjayBsYXN0IGNoYXJhY3RlcgorICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShzdHIuY2hhckF0KHN0ckxlbmd0aCAtIDEpKSAmJiAKKyAgICAgICAgICAgICAgICAocmVzdWx0IDwgc291cmNlLmxlbmd0aCgpIC0gMSkgJiYgCisgICAgICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHJlc3VsdEVuZCArIDEpKSkgeyAKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhPZihzb3VyY2UsIHN0ciwgcmVzdWx0RW5kICsgMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBjaGVjayBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggaXMgYSB0cmFpbCBzdXJyb2dhdGUKKyAgICAgICAgICAgIGlmIChpc1RyYWlsU3Vycm9nYXRlKHN0ci5jaGFyQXQoMCkpICYmIHJlc3VsdCA+IDAgJiYgCisgICAgICAgICAgICAgICAgaXNMZWFkU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQocmVzdWx0IC0gMSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4T2Yoc291cmNlLCBzdHIsIHJlc3VsdEVuZCArIDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhlIGFyZ3VtZW50IFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyBvZiAKKyAgICAgKiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgYXJndW1lbnQgY29kZXBvaW50LiBJLmUuLCB0aGUgc21hbGxlc3QgCisgICAgICogaW5kZXggaSBzdWNoIHRoYXQ6IDxicj4KKyAgICAgKiAoVVRGMTYuY2hhckF0KHNvdXJjZSwgaSkgPT0gY2hhcjMyICYmIGkgPj0gZnJvbUluZGV4KSBpcyB0cnVlLiAKKyAgICAgKiA8cD5JZiBubyBzdWNoIGNoYXJhY3RlciBvY2N1cnMgaW4gdGhpcyBzdHJpbmcsIHRoZW4gLTEgaXMgcmV0dXJuZWQuPC9wPiAKKyAgICAgKiA8cD4KKyAgICAgKiBFeGFtcGxlczo8YnI+CisgICAgICogVVRGMTYuaW5kZXhPZigiYWJjIiwgJ2EnLCAxKSByZXR1cm5zIC0xPGJyPgorICAgICAqIFVURjE2LmluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsIDB4MTAwMDAsIDEpIHJldHVybnMgMzxicj4KKyAgICAgKiBVVEYxNi5pbmRleE9mKCJhYmNcdWQ4MDBcdWRjMDAiLCAweGQ4MDAsIDEpIHJldHVybnMgLTE8YnI+CisgICAgICogPC9wPgorICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgc3VwcG9ydCB0byBqZGsgMS4zLCB3aGljaCBkb2VzIG5vdCAKKyAgICAgKiBzdXBwb3J0IHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyB0byBpdHMgZnVsbGVzdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQKKyAgICAgKiBAcGFyYW0gY2hhcjMyIGNvZGVwb2ludCB0byBzZWFyY2ggZm9yIAorICAgICAqIEBwYXJhbSBmcm9tSW5kZXggdGhlIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gCisgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGVwb2ludCBpbiB0aGUgCisgICAgICogICAgICAgICBhcmd1bWVudCBVbmljb2RlIHN0cmluZyBhdCBvciBhZnRlciBmcm9tSW5kZXgsIG9yIC0xIGlmIHRoZSAKKyAgICAgKiAgICAgICAgIGNvZGVwb2ludCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGluZGV4T2YoU3RyaW5nIHNvdXJjZSwgaW50IGNoYXIzMiwgaW50IGZyb21JbmRleCkgCisgICAgeworICAgICAgICBpZiAoY2hhcjMyIDwgQ09ERVBPSU5UX01JTl9WQUxVRSB8fCBjaGFyMzIgPiBDT0RFUE9JTlRfTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCBjaGFyMzIgaXMgbm90IGEgdmFsaWQgY29kZXBvaW50Iik7CisgICAgICAgIH0KKyAgICAgICAgLy8gbm9uLXN1cnJvZ2F0ZSBibXAKKyAgICAgICAgaWYgKGNoYXIzMiA8IExFQURfU1VSUk9HQVRFX01JTl9WQUxVRSB8fAorICAgICAgICAgICAgKGNoYXIzMiA+IFRSQUlMX1NVUlJPR0FURV9NQVhfVkFMVUUgJiYgCisgICAgICAgICAgICAgY2hhcjMyIDwgU1VQUExFTUVOVEFSWV9NSU5fVkFMVUUpKSB7CisgICAgICAgICAgICByZXR1cm4gc291cmNlLmluZGV4T2YoKGNoYXIpY2hhcjMyLCBmcm9tSW5kZXgpOworICAgICAgICB9CisgICAgICAgIC8vIHN1cnJvZ2F0ZQorICAgICAgICBpZiAoY2hhcjMyIDwgU1VQUExFTUVOVEFSWV9NSU5fVkFMVUUpIHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBzb3VyY2UuaW5kZXhPZigoY2hhciljaGFyMzIsIGZyb21JbmRleCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNMZWFkU3Vycm9nYXRlKChjaGFyKWNoYXIzMikgJiYgCisgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgPCBzb3VyY2UubGVuZ3RoKCkgLSAxKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHJlc3VsdCArIDEpKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4T2Yoc291cmNlLCBjaGFyMzIsIHJlc3VsdCArIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyB0cmFpbCBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID4gMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNMZWFkU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQocmVzdWx0IC0gMSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleE9mKHNvdXJjZSwgY2hhcjMyLCByZXN1bHQgKyAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAvLyBzdXBwbGVtZW50YXJ5CisgICAgICAgIFN0cmluZyBjaGFyMzJzdHIgPSB0b1N0cmluZyhjaGFyMzIpOworICAgICAgICByZXR1cm4gc291cmNlLmluZGV4T2YoY2hhcjMyc3RyLCBmcm9tSW5kZXgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGUgYXJndW1lbnQgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nIG9mIAorICAgICAqIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcgc3RyLiBUaGlzIG1ldGhvZCBpcyAKKyAgICAgKiBpbXBsZW1lbnRlZCBiYXNlZCBvbiBjb2RlcG9pbnRzLCBoZW5jZSBhICJsZWFkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKworICAgICAqIHRyYWlsIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIiIGlzIHRyZWF0ZWQgYXMgb25lIGVudGl0eS5lCisgICAgICogSGVuY2UgaWYgdGhlIHN0ciBzdGFydHMgd2l0aCB0cmFpbCBzdXJyb2dhdGUgY2hhcmFjdGVyIGF0IGluZGV4IDAsIGEgCisgICAgICogc291cmNlIHdpdGggYSBsZWFkaW5nIGEgc3Vycm9nYXRlIGNoYXJhY3RlciBiZWZvcmUgc3RyIGZvdW5kIGF0IGluICAgCisgICAgICogc291cmNlIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBtYXRjaC4gVmljZSB2ZXJzYSBmb3IgbGVhZCBzdXJyb2dhdGVzICAgCisgICAgICogdGhhdCBlbmRzIHN0ci4KKyAgICAgKiBTZWUgZXhhbXBsZSBiZWxvdy4KKyAgICAgKiA8cD5JZiBubyBzdWNoIHN0cmluZyBzdHIgb2NjdXJzIGluIHRoaXMgc291cmNlLCB0aGVuIC0xIGlzIHJldHVybmVkLgorICAgICAqIDwvcD4gPHA+CisgICAgICogRXhhbXBsZXM6PGJyPgorICAgICAqIFVURjE2LmluZGV4T2YoImFiYyIsICJhYiIsIDApIHJldHVybnMgMDxicj4KKyAgICAgKiBVVEYxNi5pbmRleE9mKCJhYmNcdWQ4MDBcdWRjMDAiLCAiXHVkODAwXHVkYzAwIiwgMCkgcmV0dXJucyAzPGJyPgorICAgICAqIFVURjE2LmluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsICJcdWQ4MDBcdWRjMDAiLCAyKSByZXR1cm5zIDM8YnI+IAorICAgICAqIFVURjE2LmluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsICJcdWQ4MDAiLCAwKSByZXR1cm5zIC0xPGJyPgorICAgICAqIDwvcD4KKyAgICAgKiBOb3RlIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIHN1cHBvcnQgdG8gamRrIDEuMywgd2hpY2ggZG9lcyBub3QgCisgICAgICogc3VwcG9ydCBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgdG8gaXRzIGZ1bGxlc3QuCisgICAgICogQHBhcmFtIHNvdXJjZSBVVEYxNiBmb3JtYXQgVW5pY29kZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHNlYXJjaGVkCisgICAgICogQHBhcmFtIHN0ciBVVEYxNiBmb3JtYXQgVW5pY29kZSBzdHJpbmcgdG8gc2VhcmNoIGZvcgorICAgICAqIEBwYXJhbSBmcm9tSW5kZXggdGhlIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gCisgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGVwb2ludCBpbiB0aGUgCisgICAgICogICAgICAgICBhcmd1bWVudCBVbmljb2RlIHN0cmluZywgb3IgLTEgaWYgdGhlIGNvZGVwb2ludCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGluZGV4T2YoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHN0ciwgaW50IGZyb21JbmRleCkgIAorICAgIHsKKyAgICAgICAgaW50IHN0ckxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgLy8gbm9uLXN1cnJvZ2F0ZSBlbmRzCisgICAgICAgIGlmICghaXNUcmFpbFN1cnJvZ2F0ZShzdHIuY2hhckF0KDApKSAmJiAKKyAgICAgICAgICAgICFpc0xlYWRTdXJyb2dhdGUoc3RyLmNoYXJBdChzdHJMZW5ndGggLSAxKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2UuaW5kZXhPZihzdHIsIGZyb21JbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCByZXN1bHQgICAgPSBzb3VyY2UuaW5kZXhPZihzdHIsIGZyb21JbmRleCk7CisgICAgICAgIGludCByZXN1bHRFbmQgPSByZXN1bHQgKyBzdHJMZW5ndGg7CisgICAgICAgIGlmIChyZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgLy8gY2hlY2sgbGFzdCBjaGFyYWN0ZXIKKyAgICAgICAgICAgIGlmIChpc0xlYWRTdXJyb2dhdGUoc3RyLmNoYXJBdChzdHJMZW5ndGggLSAxKSkgJiYgCisgICAgICAgICAgICAgICAgKHJlc3VsdCA8IHNvdXJjZS5sZW5ndGgoKSAtIDEpICYmIAorICAgICAgICAgICAgICAgIGlzVHJhaWxTdXJyb2dhdGUoc291cmNlLmNoYXJBdChyZXN1bHRFbmQpKSkgeyAKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhPZihzb3VyY2UsIHN0ciwgcmVzdWx0RW5kICsgMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBjaGVjayBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggaXMgYSB0cmFpbCBzdXJyb2dhdGUKKyAgICAgICAgICAgIGlmIChpc1RyYWlsU3Vycm9nYXRlKHN0ci5jaGFyQXQoMCkpICYmIHJlc3VsdCA+IDAgJiYgCisgICAgICAgICAgICAgICAgaXNMZWFkU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQocmVzdWx0IC0gMSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4T2Yoc291cmNlLCBzdHIsIHJlc3VsdEVuZCArIDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhlIGFyZ3VtZW50IFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyBvZiAKKyAgICAgKiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBhcmd1bWVudCBjb2RlcG9pbnQuIEkuZS4sIHRoZSBpbmRleCByZXR1cm5lZCAKKyAgICAgKiBpcyB0aGUgbGFyZ2VzdCB2YWx1ZSBpIHN1Y2ggdGhhdDogVVRGMTYuY2hhckF0KHNvdXJjZSwgaSkgPT0gY2hhcjMyCisgICAgICogaXMgdHJ1ZS4gCisgICAgICogPHA+CisgICAgICogRXhhbXBsZXM6PGJyPgorICAgICAqIFVURjE2Lmxhc3RJbmRleE9mKCJhYmMiLCAnYScpIHJldHVybnMgMDxicj4KKyAgICAgKiBVVEYxNi5sYXN0SW5kZXhPZigiYWJjXHVkODAwXHVkYzAwIiwgMHgxMDAwMCkgcmV0dXJucyAzPGJyPgorICAgICAqIFVURjE2Lmxhc3RJbmRleE9mKCJhYmNcdWQ4MDBcdWRjMDAiLCAweGQ4MDApIHJldHVybnMgLTE8YnI+CisgICAgICogPC9wPgorICAgICAqIDxwPnNvdXJjZSBpcyBzZWFyY2hlZCBiYWNrd2FyZHMgc3RhcnRpbmcgYXQgdGhlIGxhc3QgY2hhcmFjdGVyLjwvcD4gCisgICAgICogTm90ZSB0aGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBzdXBwb3J0IHRvIGpkayAxLjMsIHdoaWNoIGRvZXMgbm90IAorICAgICAqIHN1cHBvcnQgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIHRvIGl0cyBmdWxsZXN0LgorICAgICAqIEBwYXJhbSBzb3VyY2UgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nIHRoYXQgd2lsbCBiZSBzZWFyY2hlZAorICAgICAqIEBwYXJhbSBjaGFyMzIgY29kZXBvaW50IHRvIHNlYXJjaCBmb3IgCisgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29kZXBvaW50IGluIHNvdXJjZSwgCisgICAgICogICAgICAgICBvciAtMSBpZiB0aGUgY29kZXBvaW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgbGFzdEluZGV4T2YoU3RyaW5nIHNvdXJjZSwgaW50IGNoYXIzMikgIAorICAgIHsKKyAgICAgICAgaWYgKGNoYXIzMiA8IENPREVQT0lOVF9NSU5fVkFMVUUgfHwgY2hhcjMyID4gQ09ERVBPSU5UX01BWF9WQUxVRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgY2hhcjMyIGlzIG5vdCBhIHZhbGlkIGNvZGVwb2ludCIpOworICAgICAgICB9CisgICAgICAgIC8vIG5vbi1zdXJyb2dhdGUgYm1wCisgICAgICAgIGlmIChjaGFyMzIgPCBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgfHwKKyAgICAgICAgICAgIChjaGFyMzIgPiBUUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFICYmIAorICAgICAgICAgICAgIGNoYXIzMiA8IFNVUFBMRU1FTlRBUllfTUlOX1ZBTFVFKSkgeworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5sYXN0SW5kZXhPZigoY2hhciljaGFyMzIpOworICAgICAgICB9CisgICAgICAgIC8vIHN1cnJvZ2F0ZQorICAgICAgICBpZiAoY2hhcjMyIDwgU1VQUExFTUVOVEFSWV9NSU5fVkFMVUUpIHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBzb3VyY2UubGFzdEluZGV4T2YoKGNoYXIpY2hhcjMyKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPj0gMCkgeworICAgICAgICAgICAgICAgIGlmIChpc0xlYWRTdXJyb2dhdGUoKGNoYXIpY2hhcjMyKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgKHJlc3VsdCA8IHNvdXJjZS5sZW5ndGgoKSAtIDEpICYmIAorICAgICAgICAgICAgICAgICAgICBpc1RyYWlsU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQocmVzdWx0ICsgMSkpKSB7IAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFzdEluZGV4T2Yoc291cmNlLCBjaGFyMzIsIHJlc3VsdCAtIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyB0cmFpbCBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID4gMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNMZWFkU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQocmVzdWx0IC0gMSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0SW5kZXhPZihzb3VyY2UsIGNoYXIzMiwgcmVzdWx0IC0gMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gc3VwcGxlbWVudGFyeQorICAgICAgICBTdHJpbmcgY2hhcjMyc3RyID0gdG9TdHJpbmcoY2hhcjMyKTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZS5sYXN0SW5kZXhPZihjaGFyMzJzdHIpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhlIGFyZ3VtZW50IFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyBvZiAKKyAgICAgKiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcgc3RyLiBUaGlzIG1ldGhvZCBpcyAKKyAgICAgKiBpbXBsZW1lbnRlZCBiYXNlZCBvbiBjb2RlcG9pbnRzLCBoZW5jZSBhICJsZWFkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKworICAgICAqIHRyYWlsIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIiIGlzIHRyZWF0ZWQgYXMgb25lIGVudGl0eS5lCisgICAgICogSGVuY2UgaWYgdGhlIHN0ciBzdGFydHMgd2l0aCB0cmFpbCBzdXJyb2dhdGUgY2hhcmFjdGVyIGF0IGluZGV4IDAsIGEgCisgICAgICogc291cmNlIHdpdGggYSBsZWFkaW5nIGEgc3Vycm9nYXRlIGNoYXJhY3RlciBiZWZvcmUgc3RyIGZvdW5kIGF0IGluIAorICAgICAqIHNvdXJjZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgbWF0Y2guIFZpY2UgdmVyc2EgZm9yIGxlYWQgc3Vycm9nYXRlcyAKKyAgICAgKiB0aGF0IGVuZHMgc3RyLgorICAgICAqIFNlZSBleGFtcGxlIGJlbG93LgorICAgICAqIDxwPgorICAgICAqIEV4YW1wbGVzOjxicj4KKyAgICAgKiBVVEYxNi5sYXN0SW5kZXhPZigiYWJjIiwgImEiKSByZXR1cm5zIDA8YnI+CisgICAgICogVVRGMTYubGFzdEluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsICJcdWQ4MDBcdWRjMDAiKSByZXR1cm5zIDM8YnI+CisgICAgICogVVRGMTYubGFzdEluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsICJcdWQ4MDAiKSByZXR1cm5zIC0xPGJyPgorICAgICAqIDwvcD4KKyAgICAgKiA8cD5zb3VyY2UgaXMgc2VhcmNoZWQgYmFja3dhcmRzIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGNoYXJhY3Rlci48L3A+IAorICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgc3VwcG9ydCB0byBqZGsgMS4zLCB3aGljaCBkb2VzIG5vdCAKKyAgICAgKiBzdXBwb3J0IHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyB0byBpdHMgZnVsbGVzdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQKKyAgICAgKiBAcGFyYW0gc3RyIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0byBzZWFyY2ggZm9yIAorICAgICAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGVwb2ludCBpbiBzb3VyY2UsIAorICAgICAqICAgICAgICAgb3IgLTEgaWYgdGhlIGNvZGVwb2ludCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGxhc3RJbmRleE9mKFN0cmluZyBzb3VyY2UsIFN0cmluZyBzdHIpICAKKyAgICB7CisgICAgICAgIGludCBzdHJMZW5ndGggPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIC8vIG5vbi1zdXJyb2dhdGUgZW5kcworICAgICAgICBpZiAoIWlzVHJhaWxTdXJyb2dhdGUoc3RyLmNoYXJBdCgwKSkgJiYgCisgICAgICAgICAgICAhaXNMZWFkU3Vycm9nYXRlKHN0ci5jaGFyQXQoc3RyTGVuZ3RoIC0gMSkpKSB7CisgICAgICAgICAgICByZXR1cm4gc291cmNlLmxhc3RJbmRleE9mKHN0cik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCByZXN1bHQgICAgPSBzb3VyY2UubGFzdEluZGV4T2Yoc3RyKTsKKyAgICAgICAgaWYgKHJlc3VsdCA+PSAwKSB7CisgICAgICAgICAgICAvLyBjaGVjayBsYXN0IGNoYXJhY3RlcgorICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShzdHIuY2hhckF0KHN0ckxlbmd0aCAtIDEpKSAmJiAKKyAgICAgICAgICAgICAgICAocmVzdWx0IDwgc291cmNlLmxlbmd0aCgpIC0gMSkgJiYgCisgICAgICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHJlc3VsdCArIHN0ckxlbmd0aCArIDEpKSkgeyAKKyAgICAgICAgICAgICAgICByZXR1cm4gbGFzdEluZGV4T2Yoc291cmNlLCBzdHIsIHJlc3VsdCAtIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY2hlY2sgZmlyc3QgY2hhcmFjdGVyIHdoaWNoIGlzIGEgdHJhaWwgc3Vycm9nYXRlCisgICAgICAgICAgICBpZiAoaXNUcmFpbFN1cnJvZ2F0ZShzdHIuY2hhckF0KDApKSAmJiByZXN1bHQgPiAwICYmIAorICAgICAgICAgICAgICAgIGlzTGVhZFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHJlc3VsdCAtIDEpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBsYXN0SW5kZXhPZihzb3VyY2UsIHN0ciwgcmVzdWx0IC0gMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPlJldHVybnMgdGhlIGluZGV4IHdpdGhpbiB0aGUgYXJndW1lbnQgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nIG9mIAorICAgICAqIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGFyZ3VtZW50IGNvZGVwb2ludCwgd2hlcmUgdGhlIHJlc3VsdCBpcyBsZXNzCisgICAgICogdGhhbiBvciBlcXVhbHMgdG8gZnJvbUluZGV4LjwvcD4gCisgICAgICogPHA+VGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gY29kZXBvaW50cywgaGVuY2UgYSBzaW5nbGUgCisgICAgICogc3Vycm9nYXRlIGNoYXJhY3RlciB3aWxsIG5vdCBtYXRjaCBhIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyLjwvcD4KKyAgICAgKiA8cD5zb3VyY2UgaXMgc2VhcmNoZWQgYmFja3dhcmRzIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGNoYXJhY3RlciBzdGFydGluZyAKKyAgICAgKiBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LjwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBFeGFtcGxlczo8YnI+CisgICAgICogVVRGMTYubGFzdEluZGV4T2YoImFiYyIsICdjJywgMikgcmV0dXJucyAyPGJyPgorICAgICAqIFVURjE2Lmxhc3RJbmRleE9mKCJhYmMiLCAnYycsIDEpIHJldHVybnMgLTE8YnI+CisgICAgICogVVRGMTYubGFzdEluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsIDB4MTAwMDAsIDUpIHJldHVybnMgMzxicj4KKyAgICAgKiBVVEYxNi5sYXN0SW5kZXhPZigiYWJjXHVkODAwXHVkYzAwIiwgMHgxMDAwMCwgMykgcmV0dXJucyAzPGJyPgorICAgICAqIFVURjE2Lmxhc3RJbmRleE9mKCJhYmNcdWQ4MDBcdWRjMDAiLCAweGQ4MDApIHJldHVybnMgLTE8YnI+CisgICAgICogPC9wPgorICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgc3VwcG9ydCB0byBqZGsgMS4zLCB3aGljaCBkb2VzIG5vdCAKKyAgICAgKiBzdXBwb3J0IHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyB0byBpdHMgZnVsbGVzdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQKKyAgICAgKiBAcGFyYW0gY2hhcjMyIGNvZGVwb2ludCB0byBzZWFyY2ggZm9yIAorICAgICAqIEBwYXJhbSBmcm9tSW5kZXggdGhlIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gVGhlcmUgaXMgbm8gCisgICAgICogICAgICAgICAgICAgICAgICByZXN0cmljdGlvbiBvbiB0aGUgdmFsdWUgb2YgZnJvbUluZGV4LiBJZiBpdCBpcyAKKyAgICAgKiAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nLCAKKyAgICAgKiAgICAgICAgICAgICAgICAgIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgaXQgd2VyZSBlcXVhbCB0byBvbmUgCisgICAgICogICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZzogdGhpcyBlbnRpcmUgCisgICAgICogICAgICAgICAgICAgICAgICBzdHJpbmcgbWF5IGJlIHNlYXJjaGVkLiBJZiBpdCBpcyBuZWdhdGl2ZSwgaXQgaGFzIAorICAgICAqICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgZWZmZWN0IGFzIGlmIGl0IHdlcmUgLTE6IC0xIGlzIHJldHVybmVkLiAKKyAgICAgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBjb2RlcG9pbnQgaW4gc291cmNlLCAKKyAgICAgKiAgICAgICAgIG9yIC0xIGlmIHRoZSBjb2RlcG9pbnQgZG9lcyBub3Qgb2NjdXIuCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBsYXN0SW5kZXhPZihTdHJpbmcgc291cmNlLCBpbnQgY2hhcjMyLCBpbnQgZnJvbUluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGNoYXIzMiA8IENPREVQT0lOVF9NSU5fVkFMVUUgfHwgY2hhcjMyID4gQ09ERVBPSU5UX01BWF9WQUxVRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgY2hhcjMyIGlzIG5vdCBhIHZhbGlkIGNvZGVwb2ludCIpOworICAgICAgICB9CisgICAgICAgIC8vIG5vbi1zdXJyb2dhdGUgYm1wCisgICAgICAgIGlmIChjaGFyMzIgPCBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgfHwKKyAgICAgICAgICAgIChjaGFyMzIgPiBUUkFJTF9TVVJST0dBVEVfTUFYX1ZBTFVFICYmIAorICAgICAgICAgICAgIGNoYXIzMiA8IFNVUFBMRU1FTlRBUllfTUlOX1ZBTFVFKSkgeworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5sYXN0SW5kZXhPZigoY2hhciljaGFyMzIsIGZyb21JbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gc3Vycm9nYXRlCisgICAgICAgIGlmIChjaGFyMzIgPCBTVVBQTEVNRU5UQVJZX01JTl9WQUxVRSkgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IHNvdXJjZS5sYXN0SW5kZXhPZigoY2hhciljaGFyMzIsIGZyb21JbmRleCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNMZWFkU3Vycm9nYXRlKChjaGFyKWNoYXIzMikgJiYgCisgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgPCBzb3VyY2UubGVuZ3RoKCkgLSAxKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHJlc3VsdCArIDEpKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RJbmRleE9mKHNvdXJjZSwgY2hhcjMyLCByZXN1bHQgLSAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gdHJhaWwgc3Vycm9nYXRlCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA+IDAgJiYgCisgICAgICAgICAgICAgICAgICAgIGlzTGVhZFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHJlc3VsdCAtIDEpKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFzdEluZGV4T2Yoc291cmNlLCBjaGFyMzIsIHJlc3VsdCAtIDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIC8vIHN1cHBsZW1lbnRhcnkKKyAgICAgICAgU3RyaW5nIGNoYXIzMnN0ciA9IHRvU3RyaW5nKGNoYXIzMik7CisgICAgICAgIHJldHVybiBzb3VyY2UubGFzdEluZGV4T2YoY2hhcjMyc3RyLCBmcm9tSW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD5SZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhlIGFyZ3VtZW50IFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyBvZiAKKyAgICAgKiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBhcmd1bWVudCBzdHJpbmcgc3RyLCB3aGVyZSB0aGUgcmVzdWx0IGlzIGxlc3MKKyAgICAgKiB0aGFuIG9yIGVxdWFscyB0byBmcm9tSW5kZXguPC9wPiAKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBiYXNlZCBvbiBjb2RlcG9pbnRzLCBoZW5jZSBhIAorICAgICAqICJsZWFkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKyB0cmFpbCBzdXJyb2dhdGUgY2hhcmFjdGVyIiBpcyB0cmVhdGVkIGFzIG9uZSAKKyAgICAgKiBlbnRpdHkuCisgICAgICogSGVuY2UgaWYgdGhlIHN0ciBzdGFydHMgd2l0aCB0cmFpbCBzdXJyb2dhdGUgY2hhcmFjdGVyIGF0IGluZGV4IDAsIGEgCisgICAgICogc291cmNlIHdpdGggYSBsZWFkaW5nIGEgc3Vycm9nYXRlIGNoYXJhY3RlciBiZWZvcmUgc3RyIGZvdW5kIGF0IGluIAorICAgICAqIHNvdXJjZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgbWF0Y2guIFZpY2UgdmVyc2EgZm9yIGxlYWQgc3Vycm9nYXRlcyAKKyAgICAgKiB0aGF0IGVuZHMgc3RyLgorICAgICAqIDwvcD4KKyAgICAgKiBTZWUgZXhhbXBsZSBiZWxvdy4KKyAgICAgKiA8cD4KKyAgICAgKiBFeGFtcGxlczo8YnI+CisgICAgICogVVRGMTYubGFzdEluZGV4T2YoImFiYyIsICJjIiwgMikgcmV0dXJucyAyPGJyPgorICAgICAqIFVURjE2Lmxhc3RJbmRleE9mKCJhYmMiLCAiYyIsIDEpIHJldHVybnMgLTE8YnI+CisgICAgICogVVRGMTYubGFzdEluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsICJcdWQ4MDBcdWRjMDAiLCA1KSByZXR1cm5zIDM8YnI+CisgICAgICogVVRGMTYubGFzdEluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsICJcdWQ4MDBcdWRjMDAiLCAzKSByZXR1cm5zIDM8YnI+CisgICAgICogVVRGMTYubGFzdEluZGV4T2YoImFiY1x1ZDgwMFx1ZGMwMCIsICJcdWQ4MDAiLCA0KSByZXR1cm5zIC0xPGJyPgorICAgICAqIDwvcD4KKyAgICAgKiA8cD5zb3VyY2UgaXMgc2VhcmNoZWQgYmFja3dhcmRzIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGNoYXJhY3Rlci48L3A+IAorICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgc3VwcG9ydCB0byBqZGsgMS4zLCB3aGljaCBkb2VzIG5vdCAKKyAgICAgKiBzdXBwb3J0IHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyB0byBpdHMgZnVsbGVzdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQKKyAgICAgKiBAcGFyYW0gc3RyIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyB0byBzZWFyY2ggZm9yIAorICAgICAqIEBwYXJhbSBmcm9tSW5kZXggdGhlIGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gVGhlcmUgaXMgbm8gCisgICAgICogICAgICAgICAgICAgICAgICByZXN0cmljdGlvbiBvbiB0aGUgdmFsdWUgb2YgZnJvbUluZGV4LiBJZiBpdCBpcyAKKyAgICAgKiAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nLCAKKyAgICAgKiAgICAgICAgICAgICAgICAgIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgaXQgd2VyZSBlcXVhbCB0byBvbmUgCisgICAgICogICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZzogdGhpcyBlbnRpcmUgCisgICAgICogICAgICAgICAgICAgICAgICBzdHJpbmcgbWF5IGJlIHNlYXJjaGVkLiBJZiBpdCBpcyBuZWdhdGl2ZSwgaXQgaGFzIAorICAgICAqICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgZWZmZWN0IGFzIGlmIGl0IHdlcmUgLTE6IC0xIGlzIHJldHVybmVkLiAKKyAgICAgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBjb2RlcG9pbnQgaW4gc291cmNlLCAKKyAgICAgKiAgICAgICAgIG9yIC0xIGlmIHRoZSBjb2RlcG9pbnQgZG9lcyBub3Qgb2NjdXIuCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBsYXN0SW5kZXhPZihTdHJpbmcgc291cmNlLCBTdHJpbmcgc3RyLCBpbnQgZnJvbUluZGV4KSAgCisgICAgeworICAgICAgICBpbnQgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aCgpOworICAgICAgICAvLyBub24tc3Vycm9nYXRlIGVuZHMKKyAgICAgICAgaWYgKCFpc1RyYWlsU3Vycm9nYXRlKHN0ci5jaGFyQXQoMCkpICYmIAorICAgICAgICAgICAgIWlzTGVhZFN1cnJvZ2F0ZShzdHIuY2hhckF0KHN0ckxlbmd0aCAtIDEpKSkgeworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5sYXN0SW5kZXhPZihzdHIsIGZyb21JbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCByZXN1bHQgICAgPSBzb3VyY2UubGFzdEluZGV4T2Yoc3RyLCBmcm9tSW5kZXgpOworICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgICAgICAgIC8vIGNoZWNrIGxhc3QgY2hhcmFjdGVyCisgICAgICAgICAgICBpZiAoaXNMZWFkU3Vycm9nYXRlKHN0ci5jaGFyQXQoc3RyTGVuZ3RoIC0gMSkpICYmIAorICAgICAgICAgICAgICAgIChyZXN1bHQgPCBzb3VyY2UubGVuZ3RoKCkgLSAxKSAmJiAKKyAgICAgICAgICAgICAgICBpc1RyYWlsU3Vycm9nYXRlKHNvdXJjZS5jaGFyQXQocmVzdWx0ICsgc3RyTGVuZ3RoKSkpIHsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RJbmRleE9mKHNvdXJjZSwgc3RyLCByZXN1bHQgLSAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGNoZWNrIGZpcnN0IGNoYXJhY3RlciB3aGljaCBpcyBhIHRyYWlsIHN1cnJvZ2F0ZQorICAgICAgICAgICAgaWYgKGlzVHJhaWxTdXJyb2dhdGUoc3RyLmNoYXJBdCgwKSkgJiYgcmVzdWx0ID4gMCAmJiAKKyAgICAgICAgICAgICAgICBpc0xlYWRTdXJyb2dhdGUoc291cmNlLmNoYXJBdChyZXN1bHQgLSAxKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbGFzdEluZGV4T2Yoc291cmNlLCBzdHIsIHJlc3VsdCAtIDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nIHJlc3VsdGluZyBmcm9tIHJlcGxhY2luZyBhbGwgCisgICAgICogb2NjdXJyZW5jZXMgb2Ygb2xkQ2hhcjMyIGluIHNvdXJjZSB3aXRoIG5ld0NoYXIzMi4gCisgICAgICogSWYgdGhlIGNoYXJhY3RlciBvbGRDaGFyMzIgZG9lcyBub3Qgb2NjdXIgaW4gdGhlIFVURjE2IGZvcm1hdCBVbmljb2RlCisgICAgICogc3RyaW5nIHNvdXJjZSwgdGhlbiBzb3VyY2Ugd2lsbCBiZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIG5ldyBTdHJpbmcgCisgICAgICogb2JqZWN0IGlzIGNyZWF0ZWQgdGhhdCByZXByZXNlbnRzIGEgY29kZXBvaW50IHNlcXVlbmNlIGlkZW50aWNhbCB0byB0aGUgCisgICAgICogY29kZXBvaW50IHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHNvdXJjZSwgZXhjZXB0IHRoYXQgZXZlcnkgb2NjdXJyZW5jZSAKKyAgICAgKiBvZiBvbGRDaGFyMzIgaXMgcmVwbGFjZWQgYnkgYW4gb2NjdXJyZW5jZSBvZiBuZXdDaGFyMzIuIAorICAgICAqIDxwPgorICAgICAqIEV4YW1wbGVzOiA8YnI+CisgICAgICogVVRGMTYucmVwbGFjZSgibWVzcXVpdGUgaW4geW91ciBjZWxsYXIiLCAnZScsICdvJyk7PGJyPgorICAgICAqICAgICAgICByZXR1cm5zICJtb3NxdWl0byBpbiB5b3VyIGNvbGxhciI8YnI+CisgICAgICogVVRGMTYucmVwbGFjZSgiSm9uTCIsICdxJywgJ3gnKTs8YnI+CisgICAgICogICAgICAgIHJldHVybnMgIkpvbkwiIChubyBjaGFuZ2UpPGJyPgorICAgICAqIFVURjE2LnJlcGxhY2UoIlN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIFx1ZDgwMFx1ZGMwMCIsIDB4MTAwMDAsICchJyk7CisgICAgICogPGJyPiAgIHJldHVybnMgIlN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyICEiPGJyPgorICAgICAqIFVURjE2LnJlcGxhY2UoIlN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIFx1ZDgwMFx1ZGMwMCIsIDB4ZDgwMCwgJyEnKTsKKyAgICAgKiA8YnI+ICAgcmV0dXJucyAiU3VwcGxlbWVudGFyeSBjaGFyYWN0ZXIgXHVkODAwXHVkYzAwIjxicj4KKyAgICAgKiA8L3A+CisgICAgICogTm90ZSB0aGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBzdXBwb3J0IHRvIGpkayAxLjMsIHdoaWNoIGRvZXMgbm90IAorICAgICAqIHN1cHBvcnQgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIHRvIGl0cyBmdWxsZXN0LgorICAgICAqIEBwYXJhbSBzb3VyY2UgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nIHdoaWNoIHRoZSBjb2RlcG9pbnQgCisgICAgICogICAgICAgICAgICAgICByZXBsYWNlbWVudHMgd2lsbCBiZSBiYXNlZCBvbi4KKyAgICAgKiBAcGFyYW0gb2xkQ2hhcjMyIG5vbi16ZXJvIG9sZCBjb2RlcG9pbnQgdG8gYmUgcmVwbGFjZWQuCisgICAgICogQHBhcmFtIG5ld0NoYXIzMiB0aGUgbmV3IGNvZGVwb2ludCB0byByZXBsYWNlIG9sZENoYXIzMgorICAgICAqIEByZXR1cm4gbmV3IFN0cmluZyBkZXJpdmVkIGZyb20gc291cmNlIGJ5IHJlcGxhY2luZyBldmVyeSBvY2N1cnJlbmNlIAorICAgICAqICAgICAgICAgb2Ygb2xkQ2hhcjMyIHdpdGggbmV3Q2hhcjMyLCB1bmxlc3Mgd2hlbiBubyBvbGRDaGFyMzIgaXMgZm91bmQKKyAgICAgKiAgICAgICAgIGluIHNvdXJjZSB0aGVuIHNvdXJjZSB3aWxsIGJlIHJldHVybmVkLgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVwbGFjZShTdHJpbmcgc291cmNlLCBpbnQgb2xkQ2hhcjMyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXdDaGFyMzIpICAKKyAgICB7CisgICAgICAgIGlmIChvbGRDaGFyMzIgPD0gMCB8fCBvbGRDaGFyMzIgPiBDT0RFUE9JTlRfTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCBvbGRDaGFyMzIgaXMgbm90IGEgdmFsaWQgY29kZXBvaW50Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ld0NoYXIzMiA8PSAwIHx8IG5ld0NoYXIzMiA+IENPREVQT0lOVF9NQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IG5ld0NoYXIzMiBpcyBub3QgYSB2YWxpZCBjb2RlcG9pbnQiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IGluZGV4ICAgICA9IGluZGV4T2Yoc291cmNlLCBvbGRDaGFyMzIpOworICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nICAgICAgIG5ld0NoYXIzMlN0ciAgICA9IHRvU3RyaW5nKG5ld0NoYXIzMik7CisgICAgICAgIGludCAgICAgICAgICBvbGRDaGFyMzJTaXplICAgPSAxOworICAgICAgICBpbnQgICAgICAgICAgbmV3Q2hhcjMyU2l6ZSAgID0gbmV3Q2hhcjMyU3RyLmxlbmd0aCgpOworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzb3VyY2UpOworICAgICAgICBpbnQgICAgICAgICAgcmVzdWx0SW5kZXggICAgID0gaW5kZXg7CisgICAgICAgIAorICAgICAgICBpZiAob2xkQ2hhcjMyID49IFNVUFBMRU1FTlRBUllfTUlOX1ZBTFVFKSB7CisgICAgICAgICAgICBvbGRDaGFyMzJTaXplID0gMjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgd2hpbGUgKGluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICBpbnQgZW5kUmVzdWx0SW5kZXggID0gcmVzdWx0SW5kZXggKyBvbGRDaGFyMzJTaXplOworICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2UocmVzdWx0SW5kZXgsIGVuZFJlc3VsdEluZGV4LCBuZXdDaGFyMzJTdHIpOworICAgICAgICAgICAgaW50IGxhc3RFbmRJbmRleCAgICA9IGluZGV4ICsgb2xkQ2hhcjMyU2l6ZTsKKyAgICAgICAgICAgIGluZGV4ICAgICAgID0gaW5kZXhPZihzb3VyY2UsIG9sZENoYXIzMiwgbGFzdEVuZEluZGV4KTsKKyAgICAgICAgICAgIHJlc3VsdEluZGV4ICs9IG5ld0NoYXIzMlNpemUgKyBpbmRleCAtIGxhc3RFbmRJbmRleDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nIHJlc3VsdGluZyBmcm9tIHJlcGxhY2luZyBhbGwgCisgICAgICogb2NjdXJyZW5jZXMgb2Ygb2xkU3RyIGluIHNvdXJjZSB3aXRoIG5ld1N0ci4gCisgICAgICogSWYgdGhlIGNoYXJhY3RlciBvbGRTdHIgZG9lcyBub3Qgb2NjdXIgaW4gdGhlIFVURjE2IGZvcm1hdCBVbmljb2RlCisgICAgICogc3RyaW5nIHNvdXJjZSwgdGhlbiBzb3VyY2Ugd2lsbCBiZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIG5ldyBTdHJpbmcgCisgICAgICogb2JqZWN0IGlzIGNyZWF0ZWQgdGhhdCByZXByZXNlbnRzIGEgY29kZXBvaW50IHNlcXVlbmNlIGlkZW50aWNhbCB0byB0aGUgCisgICAgICogY29kZXBvaW50IHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHNvdXJjZSwgZXhjZXB0IHRoYXQgZXZlcnkgb2NjdXJyZW5jZSAKKyAgICAgKiBvZiBvbGRTdHIgaXMgcmVwbGFjZWQgYnkgYW4gb2NjdXJyZW5jZSBvZiBuZXdTdHIuIAorICAgICAqIDxwPgorICAgICAqIEV4YW1wbGVzOiA8YnI+CisgICAgICogVVRGMTYucmVwbGFjZSgibWVzcXVpdGUgaW4geW91ciBjZWxsYXIiLCAiZSIsICJvIik7PGJyPgorICAgICAqICAgICAgICByZXR1cm5zICJtb3NxdWl0byBpbiB5b3VyIGNvbGxhciI8YnI+CisgICAgICogVVRGMTYucmVwbGFjZSgibWVzcXVpdGUgaW4geW91ciBjZWxsYXIiLCAibWVzcXVpdGUiLCAiY2F0Iik7PGJyPgorICAgICAqICAgICAgICByZXR1cm5zICJjYXQgaW4geW91ciBjb2xsYXIiPGJyPgorICAgICAqIFVURjE2LnJlcGxhY2UoIkpvbkwiLCAicSIsICJ4Iik7PGJyPgorICAgICAqICAgICAgICByZXR1cm5zICJKb25MIiAobm8gY2hhbmdlKTxicj4KKyAgICAgKiBVVEYxNi5yZXBsYWNlKCJTdXBwbGVtZW50YXJ5IGNoYXJhY3RlciBcdWQ4MDBcdWRjMDAiLCAiXHVkODAwXHVkYzAwIiwKKyAgICAgKiAgICAgICAgICAgICAgICchJyk7CisgICAgICogPGJyPiAgIHJldHVybnMgIlN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyICEiPGJyPgorICAgICAqIFVURjE2LnJlcGxhY2UoIlN1cHBsZW1lbnRhcnkgY2hhcmFjdGVyIFx1ZDgwMFx1ZGMwMCIsICJcdWQ4MDAiLCAnIScpOworICAgICAqIDxicj4gICByZXR1cm5zICJTdXBwbGVtZW50YXJ5IGNoYXJhY3RlciBcdWQ4MDBcdWRjMDAiPGJyPgorICAgICAqIDwvcD4KKyAgICAgKiBOb3RlIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIHN1cHBvcnQgdG8gamRrIDEuMywgd2hpY2ggZG9lcyBub3QgCisgICAgICogc3VwcG9ydCBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgdG8gaXRzIGZ1bGxlc3QuCisgICAgICogQHBhcmFtIHNvdXJjZSBVVEYxNiBmb3JtYXQgVW5pY29kZSBzdHJpbmcgd2hpY2ggdGhlIGNvZGVwb2ludCAKKyAgICAgKiAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cyB3aWxsIGJlIGJhc2VkIG9uLgorICAgICAqIEBwYXJhbSBvbGRDaGFyMzIgbm9uLXplcm8gb2xkIGNvZGVwb2ludCB0byBiZSByZXBsYWNlZC4KKyAgICAgKiBAcGFyYW0gbmV3Q2hhcjMyIHRoZSBuZXcgY29kZXBvaW50IHRvIHJlcGxhY2Ugb2xkQ2hhcjMyCisgICAgICogQHJldHVybiBuZXcgU3RyaW5nIGRlcml2ZWQgZnJvbSBzb3VyY2UgYnkgcmVwbGFjaW5nIGV2ZXJ5IG9jY3VycmVuY2UgCisgICAgICogICAgICAgICBvZiBvbGRDaGFyMzIgd2l0aCBuZXdDaGFyMzIsIHVubGVzcyB3aGVuIG5vIG9sZENoYXIzMiBpcyBmb3VuZAorICAgICAqICAgICAgICAgaW4gc291cmNlIHRoZW4gc291cmNlIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyByZXBsYWNlKFN0cmluZyBzb3VyY2UsIFN0cmluZyBvbGRTdHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1N0cikgIAorICAgIHsKKyAgICAgICAgaW50IGluZGV4ICAgICA9IGluZGV4T2Yoc291cmNlLCBvbGRTdHIpOworICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgICAgIH0KKyAgICAgICAgaW50ICAgICAgICAgIG9sZFN0clNpemUgICA9IG9sZFN0ci5sZW5ndGgoKTsKKyAgICAgICAgaW50ICAgICAgICAgIG5ld1N0clNpemUgICA9IG5ld1N0ci5sZW5ndGgoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCAgICAgICA9IG5ldyBTdHJpbmdCdWZmZXIoc291cmNlKTsKKyAgICAgICAgaW50ICAgICAgICAgIHJlc3VsdEluZGV4ICAgICA9IGluZGV4OworICAgICAgICAKKyAgICAgICAgd2hpbGUgKGluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICBpbnQgZW5kUmVzdWx0SW5kZXggID0gcmVzdWx0SW5kZXggKyBvbGRTdHJTaXplOworICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2UocmVzdWx0SW5kZXgsIGVuZFJlc3VsdEluZGV4LCBuZXdTdHIpOworICAgICAgICAgICAgaW50IGxhc3RFbmRJbmRleCAgICA9IGluZGV4ICsgb2xkU3RyU2l6ZTsKKyAgICAgICAgICAgIGluZGV4ICAgICAgID0gaW5kZXhPZihzb3VyY2UsIG9sZFN0ciwgbGFzdEVuZEluZGV4KTsKKyAgICAgICAgICAgIHJlc3VsdEluZGV4ICs9IG5ld1N0clNpemUgKyBpbmRleCAtIGxhc3RFbmRJbmRleDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIC8qKiAKKyAgICAgKiBSZXZlcnNlcyBhIFVURjE2IGZvcm1hdCBVbmljb2RlIHN0cmluZyBhbmQgcmVwbGFjZXMgc291cmNlJ3MgY29udGVudCAKKyAgICAgKiB3aXRoIGl0LgorICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgcmV2ZXJzZSBzdXJyb2dhdGUgY2hhcmFjdGVycyBjb3JyZWN0bHksIGluc3RlYWQgb2YgCisgICAgICogYmxpbmRseSByZXZlcnNpbmcgZXZlcnkgY2hhcmFjdGVyLgorICAgICAqIDxwPgorICAgICAqIEV4YW1wbGVzOjxicj4KKyAgICAgKiBVVEYxNi5yZXZlcnNlKG5ldyBTdHJpbmdCdWZmZXIoCisgICAgICogICAgICAgICAgICAgIlN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyBcdWQ4MDBcdWRjMDBcdWQ4MDFcdWRjMDEiKSk8YnI+CisgICAgICogcmV0dXJucyAiXHVkODAxXHVkYzAxXHVkODAwXHVkYzAwIHNyZXRjYXJhaGMgeXJhdG5lbWVscHB1UyIuCisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgc291cmNlIFN0cmluZ0J1ZmZlciB0aGF0IGNvbnRhaW5zIFVURjE2IGZvcm1hdCAKKyAgICAgKiAgICAgICAgVW5pY29kZSBzdHJpbmcgdG8gYmUgcmV2ZXJzZWQKKyAgICAgKiBAcmV0dXJuIGEgbW9kaWZpZWQgc291cmNlIHdpdGggcmV2ZXJzZWQgVVRGMTYgZm9ybWF0IFVuaWNvZGUgc3RyaW5nLgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdCdWZmZXIgcmV2ZXJzZShTdHJpbmdCdWZmZXIgc291cmNlKSAgICAgIAorICAgIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IHNvdXJjZS5yZXZlcnNlKCk7CisgICAgICAgIGludCByZXN1bHRMZW5ndGggID0gcmVzdWx0Lmxlbmd0aCgpOworICAgICAgICBpbnQgbWF4TGVhZExlbmd0aCA9IHJlc3VsdExlbmd0aCAtIDI7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpIDw9IG1heExlYWRMZW5ndGggJiYgaXNUcmFpbFN1cnJvZ2F0ZShyZXN1bHQuY2hhckF0KGkpKSAmJgorICAgICAgICAgICAgICAgIGlzTGVhZFN1cnJvZ2F0ZShyZXN1bHQuY2hhckF0KGkgKyAxKSkpIHsKKyAgICAgICAgICAgICAgICBjaGFyIHRyYWlsID0gcmVzdWx0LmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuZGVsZXRlQ2hhckF0KGkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5pbnNlcnQoaSArIDEsIHRyYWlsKTsKKyAgICAgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpICsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgbW9yZSBVbmljb2RlIGNvZGUgcG9pbnRzIHRoYW4gYSBjZXJ0YWluIAorICAgICAqIG51bWJlci4gVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGNvdW50aW5nIGFsbCBjb2RlIHBvaW50cyBpbiB0aGUgCisgICAgICogZW50aXJlIHN0cmluZyBhbmQgY29tcGFyaW5nIHRoYXQgbnVtYmVyIHdpdGggYSB0aHJlc2hvbGQuCisgICAgICogVGhpcyBmdW5jdGlvbiBtYXkgbm90IG5lZWQgdG8gc2NhbiB0aGUgc3RyaW5nIGF0IGFsbCBpZiB0aGUgbGVuZ3RoIGlzCisgICAgICogd2l0aGluIGEgY2VydGFpbiByYW5nZSwgYW5kIG5ldmVyIG5lZWRzIHRvIGNvdW50IG1vcmUgdGhhbiAnbnVtYmVyICsgMScgCisgICAgICogY29kZSBwb2ludHMuIExvZ2ljYWxseSBlcXVpdmFsZW50IHRvIChjb3VudENvZGVQb2ludChzKSA+IG51bWJlcikuIEEgCisgICAgICogVW5pY29kZSBjb2RlIHBvaW50IG1heSBvY2N1cHkgZWl0aGVyIG9uZSBvciB0d28gY29kZSB1bml0cy4KKyAgICAgKiBAcGFyYW0gc291cmNlIFRoZSBpbnB1dCBzdHJpbmcuCisgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIHRoZSBzdHJpbmcgaXMgY29tcGFyZWQgCisgICAgICogICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSAnbnVtYmVyJyBwYXJhbWV0ZXIuCisgICAgICogQHJldHVybiBib29sZWFuIHZhbHVlIGZvciB3aGV0aGVyIHRoZSBzdHJpbmcgY29udGFpbnMgbW9yZSBVbmljb2RlIGNvZGUgCisgICAgICogICAgICAgICBwb2ludHMgdGhhbiAnbnVtYmVyJy4gCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzTW9yZUNvZGVQb2ludHNUaGFuKFN0cmluZyBzb3VyY2UsIGludCBudW1iZXIpCisgICAgeworICAgICAgICBpZiAobnVtYmVyIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gIAorICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gbGVuZ3RoID49IDAga25vd24KKyAgICAgICAgLy8gc291cmNlIGNvbnRhaW5zIGF0IGxlYXN0IChsZW5ndGggKyAxKSAvIDIgY29kZSBwb2ludHM6IDw9IDIgCisgICAgICAgIC8vIGNoYXJzIHBlciBjcAorICAgICAgICBpZiAoKChsZW5ndGggKyAxKSA+PiAxKSA+IG51bWJlcikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gY2hlY2sgaWYgc291cmNlIGRvZXMgbm90IGV2ZW4gY29udGFpbiBlbm91Z2ggY2hhcnMKKyAgICAgICAgaW50IG1heHN1cHBsZW1lbnRhcnkgPSBsZW5ndGggLSBudW1iZXI7CisgICAgICAgIGlmIChtYXhzdXBwbGVtZW50YXJ5IDw9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gdGhlcmUgYXJlIG1heHN1cHBsZW1lbnRhcnkgPSBsZW5ndGggLSBudW1iZXIgbW9yZSBjaGFycyB0aGFuIAorICAgICAgICAvLyBhc2tlZC1mb3IgY29kZSBwb2ludHMKKyAgICAKKyAgICAgICAgLy8gY291bnQgY29kZSBwb2ludHMgdW50aWwgdGhleSBleGNlZWQgYW5kIGFsc28gY2hlY2sgdGhhdCB0aGVyZSBhcmUKKyAgICAgICAgLy8gbm8gbW9yZSB0aGFuIG1heHN1cHBsZW1lbnRhcnkgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50cyAoY2hhciBwYWlycykKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChudW1iZXIgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHN0YXJ0ICsrKSkgJiYgc3RhcnQgIT0gbGVuZ3RoIAorICAgICAgICAgICAgICAgICYmIGlzVHJhaWxTdXJyb2dhdGUoc291cmNlLmNoYXJBdChzdGFydCkpKSB7CisgICAgICAgICAgICAgICAgc3RhcnQgKys7CisgICAgICAgICAgICAgICAgaWYgKC0tIG1heHN1cHBsZW1lbnRhcnkgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyB0b28gbWFueSBwYWlycyAtIHRvbyBmZXcgY29kZSBwb2ludHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tIG51bWJlcjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgc3ViLXJhbmdlIG9mIGNoYXIgYXJyYXksIGZyb20gYXJndW1lbnQgc3RhcnQgdG8gbGltaXQsCisgICAgICogY29udGFpbnMgbW9yZSBVbmljb2RlIGNvZGUgcG9pbnRzIHRoYW4gYSBjZXJ0YWluIAorICAgICAqIG51bWJlci4gVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGNvdW50aW5nIGFsbCBjb2RlIHBvaW50cyBpbiB0aGUgCisgICAgICogZW50aXJlIGNoYXIgYXJyYXkgcmFuZ2UgYW5kIGNvbXBhcmluZyB0aGF0IG51bWJlciB3aXRoIGEgdGhyZXNob2xkLgorICAgICAqIFRoaXMgZnVuY3Rpb24gbWF5IG5vdCBuZWVkIHRvIHNjYW4gdGhlIGNoYXIgYXJyYXkgYXQgYWxsIGlmIHN0YXJ0IGFuZAorICAgICAqIGxpbWl0IGlzIHdpdGhpbiBhIGNlcnRhaW4gcmFuZ2UsIGFuZCBuZXZlciBuZWVkcyB0byBjb3VudCBtb3JlIHRoYW4gCisgICAgICogJ251bWJlciArIDEnIGNvZGUgcG9pbnRzLiAKKyAgICAgKiBMb2dpY2FsbHkgZXF1aXZhbGVudCB0byAoY291bnRDb2RlUG9pbnQoc291cmNlLCBzdGFydCwgbGltaXQpID4gbnVtYmVyKS4gCisgICAgICogQSBVbmljb2RlIGNvZGUgcG9pbnQgbWF5IG9jY3VweSBlaXRoZXIgb25lIG9yIHR3byBjb2RlIHVuaXRzLgorICAgICAqIEBwYXJhbSBzb3VyY2UgYXJyYXkgb2YgVVRGLTE2IGNoYXJzCisgICAgICogQHBhcmFtIHN0YXJ0IG9mZnNldCB0byBzdWJzdHJpbmcgaW4gdGhlIHNvdXJjZSBhcnJheSBmb3IgYW5hbHl6aW5nCisgICAgICogQHBhcmFtIGxpbWl0IG9mZnNldCB0byBzdWJzdHJpbmcgaW4gdGhlIHNvdXJjZSBhcnJheSBmb3IgYW5hbHl6aW5nCisgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIHRoZSBzdHJpbmcgaXMgY29tcGFyZWQgCisgICAgICogICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSAnbnVtYmVyJyBwYXJhbWV0ZXIuCisgICAgICogQHJldHVybiBib29sZWFuIHZhbHVlIGZvciB3aGV0aGVyIHRoZSBzdHJpbmcgY29udGFpbnMgbW9yZSBVbmljb2RlIGNvZGUgCisgICAgICogICAgICAgICBwb2ludHMgdGhhbiAnbnVtYmVyJy4KKyAgICAgKiBAZXhjZXB0aW9uIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gdGhyb3duIHdoZW4gbGltaXQgJmx0OyBzdGFydAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc01vcmVDb2RlUG9pbnRzVGhhbihjaGFyIHNvdXJjZVtdLCBpbnQgc3RhcnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LCBpbnQgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IGxpbWl0IC0gc3RhcnQ7CisgICAgICAgIGlmIChsZW5ndGggPCAwIHx8IHN0YXJ0IDwgMCB8fCBsaW1pdCA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICJTdGFydCBhbmQgbGltaXQgaW5kZXhlcyBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlIGFuZCBzdGFydCA8PSBsaW1pdCIpOworICAgICAgICB9CisgICAgICAgIGlmIChudW1iZXIgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSAgCisgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIGxlbmd0aCA+PSAwIGtub3duCisgICAgICAgIC8vIHNvdXJjZSBjb250YWlucyBhdCBsZWFzdCAobGVuZ3RoICsgMSkgLyAyIGNvZGUgcG9pbnRzOiA8PSAyIAorICAgICAgICAvLyBjaGFycyBwZXIgY3AKKyAgICAgICAgaWYgKCgobGVuZ3RoICsgMSkgPj4gMSkgPiBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIGNoZWNrIGlmIHNvdXJjZSBkb2VzIG5vdCBldmVuIGNvbnRhaW4gZW5vdWdoIGNoYXJzCisgICAgICAgIGludCBtYXhzdXBwbGVtZW50YXJ5ID0gbGVuZ3RoIC0gbnVtYmVyOworICAgICAgICBpZiAobWF4c3VwcGxlbWVudGFyeSA8PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHRoZXJlIGFyZSBtYXhzdXBwbGVtZW50YXJ5ID0gbGVuZ3RoIC0gbnVtYmVyIG1vcmUgY2hhcnMgdGhhbiAKKyAgICAgICAgLy8gYXNrZWQtZm9yIGNvZGUgcG9pbnRzCisgICAgCisgICAgICAgIC8vIGNvdW50IGNvZGUgcG9pbnRzIHVudGlsIHRoZXkgZXhjZWVkIGFuZCBhbHNvIGNoZWNrIHRoYXQgdGhlcmUgYXJlCisgICAgICAgIC8vIG5vIG1vcmUgdGhhbiBtYXhzdXBwbGVtZW50YXJ5IHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMgKGNoYXIgcGFpcnMpCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnVtYmVyID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0xlYWRTdXJyb2dhdGUoc291cmNlW3N0YXJ0ICsrXSkgJiYgc3RhcnQgIT0gbGltaXQgCisgICAgICAgICAgICAgICAgJiYgaXNUcmFpbFN1cnJvZ2F0ZShzb3VyY2Vbc3RhcnRdKSkgeworICAgICAgICAgICAgICAgIHN0YXJ0ICsrOworICAgICAgICAgICAgICAgIGlmICgtLSBtYXhzdXBwbGVtZW50YXJ5IDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gdG9vIG1hbnkgcGFpcnMgLSB0b28gZmV3IGNvZGUgcG9pbnRzCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAtLSBudW1iZXI7CisgICAgICAgIH0KKyAgICB9CisgICAgIAorICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBzdHJpbmcgYnVmZmVyIGNvbnRhaW5zIG1vcmUgVW5pY29kZSBjb2RlIHBvaW50cyB0aGFuIGEgCisgICAgICogY2VydGFpbiBudW1iZXIuIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBjb3VudGluZyBhbGwgY29kZSBwb2ludHMgaW4gCisgICAgICogdGhlIGVudGlyZSBzdHJpbmcgYnVmZmVyIGFuZCBjb21wYXJpbmcgdGhhdCBudW1iZXIgd2l0aCBhIHRocmVzaG9sZC4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIG1heSBub3QgbmVlZCB0byBzY2FuIHRoZSBzdHJpbmcgYnVmZmVyIGF0IGFsbCBpZiB0aGUgCisgICAgICogbGVuZ3RoIGlzIHdpdGhpbiBhIGNlcnRhaW4gcmFuZ2UsIGFuZCBuZXZlciBuZWVkcyB0byBjb3VudCBtb3JlIHRoYW4gCisgICAgICogJ251bWJlciArIDEnIGNvZGUgcG9pbnRzLiBMb2dpY2FsbHkgZXF1aXZhbGVudCB0byAKKyAgICAgKiAoY291bnRDb2RlUG9pbnQocykgPiBudW1iZXIpLiBBIFVuaWNvZGUgY29kZSBwb2ludCBtYXkgb2NjdXB5IGVpdGhlciBvbmUgCisgICAgICogb3IgdHdvIGNvZGUgdW5pdHMuCisgICAgICogQHBhcmFtIHNvdXJjZSBUaGUgaW5wdXQgc3RyaW5nIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gdGhlIHN0cmluZyBidWZmZXIgaXMgY29tcGFyZWQgCisgICAgICogICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSAnbnVtYmVyJyBwYXJhbWV0ZXIuCisgICAgICogQHJldHVybiBib29sZWFuIHZhbHVlIGZvciB3aGV0aGVyIHRoZSBzdHJpbmcgYnVmZmVyIGNvbnRhaW5zIG1vcmUgCisgICAgICogICAgICAgICBVbmljb2RlIGNvZGUgcG9pbnRzIHRoYW4gJ251bWJlcicuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzTW9yZUNvZGVQb2ludHNUaGFuKFN0cmluZ0J1ZmZlciBzb3VyY2UsIGludCBudW1iZXIpCisgICAgeworICAgICAgICBpZiAobnVtYmVyIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gIAorICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gbGVuZ3RoID49IDAga25vd24KKyAgICAgICAgLy8gc291cmNlIGNvbnRhaW5zIGF0IGxlYXN0IChsZW5ndGggKyAxKSAvIDIgY29kZSBwb2ludHM6IDw9IDIgCisgICAgICAgIC8vIGNoYXJzIHBlciBjcAorICAgICAgICBpZiAoKChsZW5ndGggKyAxKSA+PiAxKSA+IG51bWJlcikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gY2hlY2sgaWYgc291cmNlIGRvZXMgbm90IGV2ZW4gY29udGFpbiBlbm91Z2ggY2hhcnMKKyAgICAgICAgaW50IG1heHN1cHBsZW1lbnRhcnkgPSBsZW5ndGggLSBudW1iZXI7CisgICAgICAgIGlmIChtYXhzdXBwbGVtZW50YXJ5IDw9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gdGhlcmUgYXJlIG1heHN1cHBsZW1lbnRhcnkgPSBsZW5ndGggLSBudW1iZXIgbW9yZSBjaGFycyB0aGFuIAorICAgICAgICAvLyBhc2tlZC1mb3IgY29kZSBwb2ludHMKKyAgICAKKyAgICAgICAgLy8gY291bnQgY29kZSBwb2ludHMgdW50aWwgdGhleSBleGNlZWQgYW5kIGFsc28gY2hlY2sgdGhhdCB0aGVyZSBhcmUKKyAgICAgICAgLy8gbm8gbW9yZSB0aGFuIG1heHN1cHBsZW1lbnRhcnkgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50cyAoY2hhciBwYWlycykKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChudW1iZXIgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzTGVhZFN1cnJvZ2F0ZShzb3VyY2UuY2hhckF0KHN0YXJ0ICsrKSkgJiYgc3RhcnQgIT0gbGVuZ3RoIAorICAgICAgICAgICAgICAgICYmIGlzVHJhaWxTdXJyb2dhdGUoc291cmNlLmNoYXJBdChzdGFydCkpKSB7CisgICAgICAgICAgICAgICAgc3RhcnQgKys7CisgICAgICAgICAgICAgICAgaWYgKC0tIG1heHN1cHBsZW1lbnRhcnkgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyB0b28gbWFueSBwYWlycyAtIHRvbyBmZXcgY29kZSBwb2ludHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tIG51bWJlcjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIDxwPlVURjE2IHN0cmluZyBjb21wYXJhdG9yIGNsYXNzLgorICAgICogQWxsb3dzIFVURjE2IHN0cmluZyBjb21wYXJpc29uIHRvIGJlIGRvbmUgd2l0aCB0aGUgdmFyaW91cyBtb2RlczwvcD4KKyAgICAqIDx1bD4KKyAgICAqIDxsaT4gQ29kZSBwb2ludCBjb21wYXJpc29uIG9yIGNvZGUgdW5pdCBjb21wYXJpc29uCisgICAgKiA8bGk+IENhc2Ugc2Vuc2l0aXZlIGNvbXBhcmlzb24sIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiBvciBjYXNlIAorICAgICogICAgICBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgY2hhcmFjdGVyICdpJy4KKyAgICAqIDwvdWw+CisgICAgKiA8cD5UaGUgY29kZSB1bml0IG9yIGNvZGUgcG9pbnQgY29tcGFyaXNvbiBkaWZmZXIgb25seSB3aGVuIGNvbXBhcmluZyAKKyAgICAqIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMgKCYjOTI7dTEwMDAwLi4mIzkyO3UxMGZmZmYpIHRvIEJNUCBjb2RlIHBvaW50cyAKKyAgICAqIG5lYXIgdGhlIGVuZCBvZiB0aGUgQk1QIChpLmUuLCAmIzkyO3VlMDAwLi4mIzkyO3VmZmZmKS4gSW4gY29kZSB1bml0IAorICAgICogY29tcGFyaXNvbiwgaGlnaCBCTVAgY29kZSBwb2ludHMgc29ydCBhZnRlciBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIAorICAgICogYmVjYXVzZSB0aGV5IGFyZSBzdG9yZWQgYXMgcGFpcnMgb2Ygc3Vycm9nYXRlcyB3aGljaCBhcmUgYXQgCisgICAgKiAmIzkyO3VkODAwLi4mIzkyO3VkZmZmLjwvcD4KKyAgICAqIEBzZWUgI0ZPTERfQ0FTRV9ERUZBVUxUCisgICAgKiBAc2VlICNGT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kKKyAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTdHJpbmdDb21wYXJhdG9yIGltcGxlbWVudHMgamF2YS51dGlsLkNvbXBhcmF0b3IgCisgICAgeworICAgICAgICAvLyBwdWJsaWMgY29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciB0aGF0IGRvZXMgY29kZSB1bml0IGNvbXBhcmlzb24gYW5kIGNhc2UgCisgICAgICAgICAqIHNlbnNpdGl2ZSBjb21wYXJpc29uLgorICAgICAgICAgKiBAc3RhYmxlIElDVSAyLjEKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmdDb21wYXJhdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcyhmYWxzZSwgZmFsc2UsIEZPTERfQ0FTRV9ERUZBVUxUKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnN0cnVjdG9yIHRoYXQgZG9lcyBjb21wYXJpc29uIGJhc2VkIG9uIHRoZSBhcmd1bWVudCBvcHRpb25zLgorICAgICAgICAgKiBAcGFyYW0gY29kZXBvaW50Y29tcGFyZSBmbGFnIHRvIGluZGljYXRlIHRydWUgZm9yIGNvZGUgcG9pbnQgCisgICAgICAgICAqICAgICAgICBjb21wYXJpc29uIG9yIGZhbHNlIGZvciBjb2RlIHVuaXQgY29tcGFyaXNvbi4KKyAgICAgICAgICogQHBhcmFtIGlnbm9yZWNhc2UgZmFsc2UgZm9yIGNhc2Ugc2Vuc2l0aXZlIGNvbXBhcmlzb24sIHRydWUgZm9yCisgICAgICAgICAqICAgICAgICBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24KKyAgICAgICAgICogQHBhcmFtIGZvbGRjYXNlb3B0aW9uIEZPTERfQ0FTRV9ERUZBVUxUIG9yIAorICAgICAgICAgKiAgICAgICAgRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JLiBUaGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgd2hlbgorICAgICAgICAgKiAgICAgICAgaWdub3JlY2FzZSBpcyBzZXQgdG8gdHJ1ZS4gSWYgaWdub3JlY2FzZSBpcyBmYWxzZSwgdGhpcyBvcHRpb24KKyAgICAgICAgICogICAgICAgIGlzIGlnbm9yZWQuCisgICAgICAgICAqIEBzZWUgI0ZPTERfQ0FTRV9ERUZBVUxUCisgICAgICAgICAqIEBzZWUgI0ZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSQorICAgICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBmb2xkY2FzZW9wdGlvbiBpcyBvdXQgb2YgcmFuZ2UKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmdDb21wYXJhdG9yKGJvb2xlYW4gY29kZXBvaW50Y29tcGFyZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaWdub3JlY2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvbGRjYXNlb3B0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzZXRDb2RlUG9pbnRDb21wYXJlKGNvZGVwb2ludGNvbXBhcmUpOworICAgICAgICAgICAgbV9pZ25vcmVDYXNlXyA9IGlnbm9yZWNhc2U7ICAgCisgICAgICAgICAgICBpZiAoZm9sZGNhc2VvcHRpb24gPCBGT0xEX0NBU0VfREVGQVVMVCAKKyAgICAgICAgICAgICAgICB8fCBmb2xkY2FzZW9wdGlvbiA+IEZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZm9sZCBjYXNlIG9wdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9mb2xkQ2FzZV8gPSBmb2xkY2FzZW9wdGlvbjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gcHVibGljIGRhdGEgbWVtYmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqIAorICAgICAgICAgKiA8cD5PcHRpb24gdmFsdWUgZm9yIGNhc2UgZm9sZGluZyBjb21wYXJpc29uOjwvcD4gCisgICAgICAgICAqIDxwPkNvbXBhcmlzb24gaXMgY2FzZSBpbnNlbnNpdGl2ZSwgc3RyaW5ncyBhcmUgZm9sZGVkIHVzaW5nIGRlZmF1bHQgCisgICAgICAgICAqIG1hcHBpbmdzIGRlZmluZWQgaW4gVW5pY29kZSBkYXRhIGZpbGUgQ2FzZUZvbGRpbmcudHh0LCBiZWZvcmUgCisgICAgICAgICAqIGNvbXBhcmlzb24uIAorICAgICAgICAgKiA8L3A+CisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT0xEX0NBU0VfREVGQVVMVCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiA8cD5PcHRpb24gdmFsdWUgZm9yIGNhc2UgZm9sZGluZyBjb21wYXJpc29uOjwvcD4KKyAgICAgICAgICogPHA+Q29tcGFyaXNvbiBpcyBjYXNlIGluc2Vuc2l0aXZlLCBzdHJpbmdzIGFyZSBmb2xkZWQgdXNpbmcgbW9kaWZpZWQgCisgICAgICAgICAqIG1hcHBpbmdzIGRlZmluZWQgaW4gVW5pY29kZSBkYXRhIGZpbGUgQ2FzZUZvbGRpbmcudHh0LCBiZWZvcmUgCisgICAgICAgICAqIGNvbXBhcmlzb24uIAorICAgICAgICAgKiA8L3A+CisgICAgICAgICAqIDxwPlRoZSBtb2RpZmllZCBzZXQgb2YgbWFwcGluZ3MgaXMgcHJvdmlkZWQgaW4gYSBVbmljb2RlIGRhdGEgZmlsZQorICAgICAgICAgKiBDYXNlRm9sZGluZy50eHQgdG8gaGFuZGxlIGRvdHRlZCBJIGFuZCBkb3RsZXNzIGkgYXBwcm9wcmlhdGVseSBmb3IgCisgICAgICAgICAqIFR1cmtpYyBsYW5ndWFnZXMgKHRyLCBheikuPC9wPgorICAgICAgICAgKiA8cD5CZWZvcmUgVW5pY29kZSAzLjIsIENhc2VGb2xkaW5nLnR4dCBjb250YWlucyBtYXBwaW5ncyBtYXJrZWQgd2l0aCAKKyAgICAgICAgICogJ0knIHRoYXQgYXJlIHRvIGJlIGluY2x1ZGVkIGZvciBkZWZhdWx0IG1hcHBpbmdzIGFuZCBleGNsdWRlZCBmb3IgCisgICAgICAgICAqIHRoZSBUdXJraWMtc3BlY2lmaWMgbWFwcGluZ3MuPC9wPgorICAgICAgICAgKiA8cD5Vbmljb2RlIDMuMiBDYXNlRm9sZGluZy50eHQgaW5zdGVhZCBjb250YWlucyBtYXBwaW5ncyBtYXJrZWQgd2l0aCAKKyAgICAgICAgICogJ1QnIHRoYXQgYXJlIHRvIGJlIGV4Y2x1ZGVkIGZvciBkZWZhdWx0IG1hcHBpbmdzIGFuZCBpbmNsdWRlZCBmb3IgCisgICAgICAgICAqIHRoZSBUdXJraWMtc3BlY2lmaWMgbWFwcGluZ3MuPC9wPgorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JID0gMTsKKyAgICAgICAgCisgICAgICAgIC8vIHB1YmxpYyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8vIHB1YmxpYyBzZXR0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjb21wYXJpc29uIG1vZGUgdG8gY29kZSBwb2ludCBjb21wYXJlIGlmIGZsYWcgaXMgdHJ1ZS4KKyAgICAgICAgICogT3RoZXJ3aXNlIGNvbXBhcmlzb24gbW9kZSBpcyBzZXQgdG8gY29kZSB1bml0IGNvbXBhcmUKKyAgICAgICAgICogQHBhcmFtIGZsYWcgdHJ1ZSBmb3IgY29kZSBwb2ludCBjb21wYXJlLCBmYWxzZSBmb3IgY29kZSB1bml0IGNvbXBhcmUKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNldENvZGVQb2ludENvbXBhcmUoYm9vbGVhbiBmbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmxhZykgeworICAgICAgICAgICAgICAgIG1fY29kZVBvaW50Q29tcGFyZV8gPSBOb3JtYWxpemVyLkNPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fY29kZVBvaW50Q29tcGFyZV8gPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgQ29tcGFyYXRvciB0byBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24gbW9kZSBpZiBhcmd1bWVudCAKKyAgICAgICAgICogaXMgdHJ1ZSwgb3RoZXJ3aXNlIGNhc2Ugc2Vuc2l0aXZlIGNvbXBhcmlzb24gbW9kZSBpZiBzZXQgdG8gZmFsc2UuCisgICAgICAgICAqIEBwYXJhbSBpZ25vcmVjYXNlIHRydWUgZm9yIGNhc2UtaW5zaXRpdmUgY29tcGFyaXNvbiwgZmFsc2UgZm9yCisgICAgICAgICAqICAgICAgICBjYXNlIHNlbnNpdGl2ZSBjb21wYXJpc29uCisgICAgICAgICAqIEBwYXJhbSBmb2xkY2FzZW9wdGlvbnMgRk9MRF9DQVNFX0RFRkFVTFQgb3IgCisgICAgICAgICAqICAgICAgICBGT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kuIFRoaXMgb3B0aW9uIGlzIHVzZWQgb25seSB3aGVuCisgICAgICAgICAqICAgICAgICBpZ25vcmVjYXNlIGlzIHNldCB0byB0cnVlLiBJZiBpZ25vcmVjYXNlIGlzIGZhbHNlLCB0aGlzIG9wdGlvbgorICAgICAgICAgKiAgICAgICAgaXMgaWdub3JlZC4KKyAgICAgICAgICogQHNlZSAjRk9MRF9DQVNFX0RFRkFVTFQKKyAgICAgICAgICogQHNlZSAjRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JCisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXRJZ25vcmVDYXNlKGJvb2xlYW4gaWdub3JlY2FzZSwgaW50IGZvbGRjYXNlb3B0aW9uKSAKKyAgICAgICAgeworICAgICAgICAgICAgbV9pZ25vcmVDYXNlXyA9IGlnbm9yZWNhc2U7CisgICAgICAgICAgICBpZiAoZm9sZGNhc2VvcHRpb24gPCBGT0xEX0NBU0VfREVGQVVMVCAKKyAgICAgICAgICAgICAgICB8fCBmb2xkY2FzZW9wdGlvbiA+IEZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZm9sZCBjYXNlIG9wdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9mb2xkQ2FzZV8gPSBmb2xkY2FzZW9wdGlvbjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gcHVibGljIGdldHRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIENoZWNrcyBpZiB0aGUgY29tcGFyaXNvbiBtb2RlIGlzIGNvZGUgcG9pbnQgY29tcGFyZS4KKyAgICAgICAgICogQHJldHVybiB0cnVlIGZvciBjb2RlIHBvaW50IGNvbXBhcmUsIGZhbHNlIGZvciBjb2RlIHVuaXQgY29tcGFyZQorICAgICAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0Q29kZVBvaW50Q29tcGFyZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGVQb2ludENvbXBhcmVfID09IE5vcm1hbGl6ZXIuQ09NUEFSRV9DT0RFX1BPSU5UX09SREVSOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogQ2hlY2tzIGlmIENvbXBhcmF0b3IgaXMgaW4gdGhlIGNhc2UgaW5zZW5zaXRpdmUgbW9kZS4KKyAgICAgICAgICogQHJldHVybiB0cnVlIGlmIENvbXBhcmF0b3IgcGVyZm9ybXMgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uLCAKKyAgICAgICAgICogICAgICAgICBmYWxzZSBvdGhlcndpc2UKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGdldElnbm9yZUNhc2UoKSAKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faWdub3JlQ2FzZV87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBmb2xkIGNhc2Ugb3B0aW9ucyBzZXQgaW4gQ29tcGFyYXRvciB0byBiZSB1c2VkIHdpdGggY2FzZSAKKyAgICAgICAgICogaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4gCisgICAgICAgICAqIEByZXR1cm4gZWl0aGVyIEZPTERfQ0FTRV9ERUZBVUxUIG9yIEZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSQorICAgICAgICAgKiBAc2VlICNGT0xEX0NBU0VfREVGQVVMVAorICAgICAgICAgKiBAc2VlICNGT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kKKyAgICAgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SWdub3JlQ2FzZU9wdGlvbigpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9mb2xkQ2FzZV87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHB1YmxpYyBvdGhlciBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb21wYXJlIHR3byBzdHJpbmdzIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyBzZWxlY3RlZCBkdXJpbmcgCisgICAgICAgICAqIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgICogQHBhcmFtIGEgZmlyc3Qgc291cmNlIHN0cmluZy4KKyAgICAgICAgICogQHBhcmFtIGIgc2Vjb25kIHNvdXJjZSBzdHJpbmcuCisgICAgICAgICAqIEByZXR1cm4gMCByZXR1cm5lZCBpZiBhID09IGIuIElmIGEgPCBiLCBhIG5lZ2F0aXZlIHZhbHVlIGlzIHJldHVybmVkLgorICAgICAgICAgKiAgICAgICAgIE90aGVyd2lzZSBpZiBhID4gYiwgYSBwb3NpdGl2ZSB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICAgICAgICogQGV4Y2VwdGlvbiBDbGFzc0Nhc3RFeGNlcHRpb24gdGhyb3duIHdoZW4gZWl0aGVyIGEgb3IgYiBpcyBub3QgYSAKKyAgICAgICAgICogICAgICAgICAgICBTdHJpbmcgb2JqZWN0CisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IGEsIE9iamVjdCBiKSAKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIHN0cjEgPSAoU3RyaW5nKWE7CisgICAgICAgICAgICBTdHJpbmcgc3RyMiA9IChTdHJpbmcpYjsKKyAgICAgICAgICAgIAorCSAgICAgICAgaWYgKHN0cjEgPT0gc3RyMikgeworCSAgICAgICAgCXJldHVybiAwOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKHN0cjEgPT0gbnVsbCkgeworCSAgICAgICAgICAgIHJldHVybiAtMTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChzdHIyID09IG51bGwpIHsKKwkgICAgICAgICAgICByZXR1cm4gMTsKKwkgICAgICAgIH0KKwkgICAgICAgIAorICAgICAgICAgICAgaWYgKG1faWdub3JlQ2FzZV8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUNhc2VJbnNlbnNpdGl2ZShzdHIxLCBzdHIyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlQ2FzZVNlbnNpdGl2ZShzdHIxLCBzdHIyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogQ29kZSB1bml0IGNvbXBhcmlzb24gZmxhZy4gVHJ1ZSBpZiBjb2RlIHVuaXQgY29tcGFyaXNvbiBpcyByZXF1aXJlZC4KKyAgICAgICAgICogRmFsc2UgaWYgY29kZSBwb2ludCBjb21wYXJpc29uIGlzIHJlcXVpcmVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgbV9jb2RlUG9pbnRDb21wYXJlXzsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZvbGQgY2FzZSBjb21wYXJpc29uIG9wdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgaW50IG1fZm9sZENhc2VfOworICAgICAgICAvKiogCisgICAgICAgICAqIEZsYWcgaW5kaWNhdG9yIGlmIGlnbm9yZSBjYXNlIGlzIHRvIGJlIHVzZWQgZHVyaW5nIGNvbXBhcmlzb24KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtX2lnbm9yZUNhc2VfOworICAgICAgICAvKioKKyAgICAgICAgICogQ29kZSBwb2ludCBvcmRlciBvZmZzZXQgZm9yIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09ERV9QT0lOVF9DT01QQVJFX1NVUlJPR0FURV9PRkZTRVRfID0gMHgyODAwOworICAgICAgICAKKyAgICAgICAgLy8gcHJpdmF0ZSBtZXRob2QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogQ29tcGFyZXMgY2FzZSBpbnNlbnNpdGl2ZS4gVGhpcyBpcyBhIGRpcmVjdCBwb3J0IG9mIElDVTRDLCB0byBtYWtlCisgICAgICAgICAqIG1haW50YWluZW5jZSBsaWZlIGVhc2llci4KKyAgICAgICAgICogQHBhcmFtIHMxIGZpcnN0IHN0cmluZyB0byBjb21wYXJlCisgICAgICAgICAqIEBwYXJhbSBzMiBzZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmUKKyAgICAgICAgICogQHJldHVybiAtMSBpcyBzMSAmbHQ7IHMyLCAwIGlmIGVxdWFscywgCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBjb21wYXJlQ2FzZUluc2Vuc2l0aXZlKFN0cmluZyBzMSwgU3RyaW5nIHMyKSAgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemVySW1wbC5jbXBFcXVpdkZvbGQoczEsIHMyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZvbGRDYXNlXyB8IG1fY29kZVBvaW50Q29tcGFyZV8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3JtYWxpemVyLkNPTVBBUkVfSUdOT1JFX0NBU0UpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbXBhcmVzIGNhc2Ugc2Vuc2l0aXZlLiBUaGlzIGlzIGEgZGlyZWN0IHBvcnQgb2YgSUNVNEMsIHRvIG1ha2UKKyAgICAgICAgICogbWFpbnRhaW5lbmNlIGxpZmUgZWFzaWVyLgorICAgICAgICAgKiBAcGFyYW0gczEgZmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmUKKyAgICAgICAgICogQHBhcmFtIHMyIHNlY29uZCBzdHJpbmcgdG8gY29tcGFyZQorICAgICAgICAgKiBAcmV0dXJuIC0xIGlzIHMxICZsdDsgczIsIDAgaWYgZXF1YWxzLCAKKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgaW50IGNvbXBhcmVDYXNlU2Vuc2l0aXZlKFN0cmluZyBzMSwgU3RyaW5nIHMyKSAKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY29tcGFyZSBpZGVudGljYWwgcHJlZml4ZXMgLSB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGZpeGVkIHVwCisgICAgICAgICAgICAvLyBsaW1pdDEgPSBzdGFydDEgKyBtaW4obGVuZ2h0MSwgbGVuZ3RoMikKKyAgICAgICAgICAgIGludCBsZW5ndGgxID0gczEubGVuZ3RoKCk7CisgICAgICAgICAgICBpbnQgbGVuZ3RoMiA9IHMyLmxlbmd0aCgpOworICAgICAgICAgICAgaW50IG1pbmxlbmd0aCA9IGxlbmd0aDE7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIGlmIChsZW5ndGgxIDwgbGVuZ3RoMikgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobGVuZ3RoMSA+IGxlbmd0aDIpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAxOworICAgICAgICAgICAgICAgIG1pbmxlbmd0aCA9IGxlbmd0aDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjaGFyIGMxID0gMDsKKyAgICAgICAgICAgIGNoYXIgYzIgPSAwOworICAgICAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoOyBpbmRleCA8IG1pbmxlbmd0aDsgaW5kZXggKyspIHsKKyAgICAgICAgICAgICAgICBjMSA9IHMxLmNoYXJBdChpbmRleCk7CisgICAgICAgICAgICAgICAgYzIgPSBzMi5jaGFyQXQoaW5kZXgpOworICAgICAgICAgICAgICAgIC8vIGNoZWNrIHBzZXVkby1saW1pdAorICAgICAgICAgICAgICAgIGlmIChjMSAhPSBjMikgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4ID09IG1pbmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2xlYW4gY29kZXBvaW50Y29tcGFyZSAKKyAgICAgICAgICAgICAgICA9IG1fY29kZVBvaW50Q29tcGFyZV8gPT0gTm9ybWFsaXplci5DT01QQVJFX0NPREVfUE9JTlRfT1JERVI7CisgICAgICAgICAgICAvLyBpZiBib3RoIHZhbHVlcyBhcmUgaW4gb3IgYWJvdmUgdGhlIHN1cnJvZ2F0ZSByYW5nZSwgZml4IHRoZW0gdXAKKyAgICAgICAgICAgIGlmIChjMSA+PSBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgCisgICAgICAgICAgICAgICAgJiYgYzIgPj0gTEVBRF9TVVJST0dBVEVfTUlOX1ZBTFVFICYmIGNvZGVwb2ludGNvbXBhcmUpIHsKKyAgICAgICAgICAgICAgICAvLyBzdWJ0cmFjdCAweDI4MDAgZnJvbSBCTVAgY29kZSBwb2ludHMgdG8gbWFrZSB0aGVtIHNtYWxsZXIgCisgICAgICAgICAgICAgICAgLy8gdGhhbiBzdXBwbGVtZW50YXJ5IG9uZXMKKyAgICAgICAgICAgICAgICBpZiAoKGMxIDw9IExFQURfU1VSUk9HQVRFX01BWF9WQUxVRSAmJiAoaW5kZXggKyAxKSAhPSBsZW5ndGgxIAorICAgICAgICAgICAgICAgICAgICAmJiBpc1RyYWlsU3Vycm9nYXRlKHMxLmNoYXJBdChpbmRleCArIDEpKSkgCisgICAgICAgICAgICAgICAgICAgIHx8IChpc1RyYWlsU3Vycm9nYXRlKGMxKSAmJiBpbmRleCAhPSAwIAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNMZWFkU3Vycm9nYXRlKHMxLmNoYXJBdChpbmRleCAtIDEpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCBsZWF2ZSA+PWQ4MDAKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBCTVAgY29kZSBwb2ludCAtIG1heSBiZSBzdXJyb2dhdGUgY29kZSBwb2ludCAtIG1ha2UgCisgICAgICAgICAgICAgICAgICAgIC8vIDwgZDgwMAorICAgICAgICAgICAgICAgICAgICBjMSAtPSBDT0RFX1BPSU5UX0NPTVBBUkVfU1VSUk9HQVRFX09GRlNFVF87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoKGMyIDw9IExFQURfU1VSUk9HQVRFX01BWF9WQUxVRSAKKyAgICAgICAgICAgICAgICAgICAgICYmIChpbmRleCArIDEpICE9IGxlbmd0aDIgCisgICAgICAgICAgICAgICAgICAgICAmJiBpc1RyYWlsU3Vycm9nYXRlKHMyLmNoYXJBdChpbmRleCArIDEpKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGlzVHJhaWxTdXJyb2dhdGUoYzIpICYmIGluZGV4ICE9IDAgCisgICAgICAgICAgICAgICAgICAgICAmJiBpc0xlYWRTdXJyb2dhdGUoczIuY2hhckF0KGluZGV4IC0gMSkpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBwYXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIsIGxlYXZlID49ZDgwMAorICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEJNUCBjb2RlIHBvaW50IC0gbWF5IGJlIHN1cnJvZ2F0ZSBjb2RlIHBvaW50IC0gbWFrZSA8ZDgwMAorICAgICAgICAgICAgICAgICAgICBjMiAtPSBDT0RFX1BPSU5UX0NPTVBBUkVfU1VSUk9HQVRFX09GRlNFVF87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIC8vIG5vdyBjMSBhbmQgYzIgYXJlIGluIFVURi0zMi1jb21wYXRpYmxlIG9yZGVyCisgICAgICAgICAgICByZXR1cm4gYzEgLSBjMjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qKgorICAgICogU2hpZnQgdmFsdWUgZm9yIGxlYWQgc3Vycm9nYXRlIHRvIGZvcm0gYSBzdXBwbGVtZW50YXJ5IGNoYXJhY3Rlci4KKyAgICAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMRUFEX1NVUlJPR0FURV9TSElGVF8gPSAxMDsKKwkvKioKKyAgICAqIE1hc2sgdG8gcmV0cmlldmUgdGhlIHNpZ25pZmljYW50IHZhbHVlIGZyb20gYSB0cmFpbCBzdXJyb2dhdGUuCisgICAgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBSUxfU1VSUk9HQVRFX01BU0tfICAgICA9IDB4M0ZGOyAgIAorICAgIC8qKgorICAgICAqIFZhbHVlIHRoYXQgYWxsIGxlYWQgc3Vycm9nYXRlIHN0YXJ0cyB3aXRoCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExFQURfU1VSUk9HQVRFX09GRlNFVF8gPSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRUFEX1NVUlJPR0FURV9NSU5fVkFMVUUgLSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTVVBQTEVNRU5UQVJZX01JTl9WQUxVRSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiBMRUFEX1NVUlJPR0FURV9TSElGVF8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIDxwPkNvbnZlcnRzIGFyZ3VtZW50IGNvZGUgcG9pbnQgYW5kIHJldHVybnMgYSBTdHJpbmcgb2JqZWN0IHJlcHJlc2VudGluZyAKKyAgICAqIHRoZSBjb2RlIHBvaW50J3MgdmFsdWUgaW4gVVRGMTYgZm9ybWF0LjwvcD4KKyAgICAqIDxwPlRoaXMgbWV0aG9kIGRvZXMgbm90IGNoZWNrIGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvZGVwb2ludCwgdGhlCisgICAgKiByZXN1bHRzIGFyZSBub3QgZ3VhcmFudGVlZCBpZiBhIGludmFsaWQgY29kZXBvaW50IGlzIHBhc3NlZCBhcyAKKyAgICAqIGFyZ3VtZW50LjwvcD4KKyAgICAqIDxwPlRoZSByZXN1bHQgaXMgYSBzdHJpbmcgd2hvc2UgbGVuZ3RoIGlzIDEgZm9yIG5vbi1zdXBwbGVtZW50YXJ5IGNvZGUgCisgICAgKiBwb2ludHMsIDIgb3RoZXJ3aXNlLjwvcD4KKyAgICAqIEBwYXJhbSBjaCBjb2RlIHBvaW50CisgICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29kZSBwb2ludAorICAgICogQG9ic29sZXRlIElDVSAyLjQuIFVzZSBVQ2hhcmFjdGVyLnRvU3RyaW5nKGludCkgaW5zdGVhZCBzaW5jZSBpdCB3aWxsIGJlCisgICAgKiAgICAgICAgICAgcmVtb3ZlZCBpbiB0aGF0IHJlbGVhc2UuCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyhpbnQgY2gpCisgICAgeyAgIAorICAgICAgICBpZiAoY2ggPCBTVVBQTEVNRU5UQVJZX01JTl9WQUxVRSkgeworICAgICAgICAgICAgcmV0dXJuIFN0cmluZy52YWx1ZU9mKChjaGFyKWNoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChnZXRMZWFkU3Vycm9nYXRlKGNoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0VHJhaWxTdXJyb2dhdGUoY2gpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuZXNjYXBlVHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuZXNjYXBlVHJhbnNsaXRlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2VlMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5lc2NhcGVUcmFuc2xpdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjUzIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoYykgMjAwMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMTEvMTkvMjAwMSAgYWxpdSAgICAgICAgQ3JlYXRpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CisKKy8qKgorICogQSB0cmFuc2xpdGVyYXRvciB0aGF0IGNvbnZlcnRzIFVuaWNvZGUgZXNjYXBlIGZvcm1zIHRvIHRoZQorICogY2hhcmFjdGVycyB0aGV5IHJlcHJlc2VudC4gIEVzY2FwZSBmb3JtcyBoYXZlIGEgcHJlZml4LCBhIHN1ZmZpeCwgYQorICogcmFkaXgsIGFuZCBtaW5pbXVtIGFuZCBtYXhpbXVtIGRpZ2l0IGNvdW50cy4KKyAqCisgKiA8cD5UaGlzIGNsYXNzIGlzIHBhY2thZ2UgcHJpdmF0ZS4gIEl0IHJlZ2lzdGVycyBzZXZlcmFsIHN0YW5kYXJkCisgKiB2YXJpYW50cyB3aXRoIHRoZSBzeXN0ZW0gd2hpY2ggYXJlIHRoZW4gYWNjZXNzZWQgdmlhIHRoZWlyIElEcy4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAdmVyc2lvbiAkUkNTZmlsZTogVW5lc2NhcGVUcmFuc2xpdGVyYXRvci5qYXZhLHYgJCAkUmV2aXNpb246IDEuNSAkICREYXRlOiAyMDAyLzAyLzI1IDIyOjQzOjU4ICQKKyAqLworY2xhc3MgVW5lc2NhcGVUcmFuc2xpdGVyYXRvciBleHRlbmRzIFRyYW5zbGl0ZXJhdG9yIHsKKworICAgIC8qKgorICAgICAqIFRoZSBlbmNvZGVkIHBhdHRlcm4gc3BlY2lmaWNhdGlvbi4gIFRoZSBwYXR0ZXJuIGNvbnNpc3RzIG9mCisgICAgICogemVybyBvciBtb3JlIGZvcm1zLiAgRWFjaCBmb3JtIGNvbnNpc3RzIG9mIGEgcHJlZml4LCBzdWZmaXgsCisgICAgICogcmFkaXgsIG1pbmltdW0gZGlnaXQgY291bnQsIGFuZCBtYXhpbXVtIGRpZ2l0IGNvdW50LiAgVGhlc2UKKyAgICAgKiB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBhIGZpdmUgY2hhcmFjdGVyIGhlYWRlci4gIFRoYXQgaXMsIHRoZWlyCisgICAgICogbnVtZXJpYyB2YWx1ZXMgYXJlIGNhc3QgdG8gMTYtYml0IGNoYXJhY3RlcnMgYW5kIHN0b3JlZCBpbiB0aGUKKyAgICAgKiBzdHJpbmcuICBGb2xsb3dpbmcgdGhlc2UgZml2ZSBjaGFyYWN0ZXJzLCB0aGUgcHJlZml4CisgICAgICogY2hhcmFjdGVycywgdGhlbiBzdWZmaXggY2hhcmFjdGVycyBhcmUgc3RvcmVkLiAgRWFjaCBmb3JtIHRodXMKKyAgICAgKiB0YWtlcyBuKzUgY2hhcmFjdGVycywgd2hlcmUgbiBpcyB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBwcmVmaXgKKyAgICAgKiBhbmQgc3VmZml4LiAgVGhlIGVuZCBpcyBtYXJrZWQgYnkgYSBoZWFkZXIgb2YgbGVuZ3RoIG9uZQorICAgICAqIGNvbnNpc3Rpbmcgb2YgdGhlIGNoYXJhY3RlciBFTkQuCisgICAgICovCisgICAgcHJpdmF0ZSBjaGFyIHNwZWNbXTsKKworICAgIC8qKgorICAgICAqIFNwZWNpYWwgY2hhcmFjdGVyIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgc3BlY1tdIGFycmF5LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgRU5EID0gMHhGRkZGOworCisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHN0YW5kYXJkIHZhcmlhbnRzIHdpdGggdGhlIHN5c3RlbS4gIENhbGxlZCBieQorICAgICAqIFRyYW5zbGl0ZXJhdG9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlcigpIHsKKyAgICAgICAgLy8gVW5pY29kZTogIlUrMTBGRkZGIiBoZXgsIG1pbj00LCBtYXg9NgorICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlckZhY3RvcnkoIkhleC1BbnkvVW5pY29kZSIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5lc2NhcGVUcmFuc2xpdGVyYXRvcigiSGV4LUFueS9Vbmljb2RlIiwgbmV3IGNoYXJbXSB7CisgICAgICAgICAgICAgICAgICAgIDIsIDAsIDE2LCA0LCA2LCAnVScsICcrJywKKyAgICAgICAgICAgICAgICAgICAgRU5ECisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gSmF2YTogIlxcdUZGRkYiIGhleCwgbWluPTQsIG1heD00CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiSGV4LUFueS9KYXZhIiwgbmV3IFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmVzY2FwZVRyYW5zbGl0ZXJhdG9yKCJIZXgtQW55L0phdmEiLCBuZXcgY2hhcltdIHsKKyAgICAgICAgICAgICAgICAgICAgMiwgMCwgMTYsIDQsIDQsICdcXCcsICd1JywKKyAgICAgICAgICAgICAgICAgICAgRU5ECisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gQzogIlxcdUZGRkYiIGhleCwgbWluPTQsIG1heD00OyBcXFUwMDEwRkZGRiBoZXgsIG1pbj04LCBtYXg9OAorICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlckZhY3RvcnkoIkhleC1BbnkvQyIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5lc2NhcGVUcmFuc2xpdGVyYXRvcigiSGV4LUFueS9DIiwgbmV3IGNoYXJbXSB7CisgICAgICAgICAgICAgICAgICAgIDIsIDAsIDE2LCA0LCA0LCAnXFwnLCAndScsCisgICAgICAgICAgICAgICAgICAgIDIsIDAsIDE2LCA4LCA4LCAnXFwnLCAnVScsCisgICAgICAgICAgICAgICAgICAgIEVORAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFhNTDogIiYjeDEwRkZGRjsiIGhleCwgbWluPTEsIG1heD02CisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiSGV4LUFueS9YTUwiLCBuZXcgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVuZXNjYXBlVHJhbnNsaXRlcmF0b3IoIkhleC1BbnkvWE1MIiwgbmV3IGNoYXJbXSB7CisgICAgICAgICAgICAgICAgICAgIDMsIDEsIDE2LCAxLCA2LCAnJicsICcjJywgJ3gnLCAnOycsCisgICAgICAgICAgICAgICAgICAgIEVORAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBYTUwxMDogIiYxMTE0MTExOyIgZGVjLCBtaW49MSwgbWF4PTcgKG5vdCByZWFsbHkgIkhleC1BbnkiKQorICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlckZhY3RvcnkoIkhleC1BbnkvWE1MMTAiLCBuZXcgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVuZXNjYXBlVHJhbnNsaXRlcmF0b3IoIkhleC1BbnkvWE1MMTAiLCBuZXcgY2hhcltdIHsKKyAgICAgICAgICAgICAgICAgICAgMiwgMSwgMTAsIDEsIDcsICcmJywgJyMnLCAnOycsCisgICAgICAgICAgICAgICAgICAgIEVORAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBQZXJsOiAiXFx4ezI2M0F9IiBoZXgsIG1pbj0xLCBtYXg9NgorICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlckZhY3RvcnkoIkhleC1BbnkvUGVybCIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5lc2NhcGVUcmFuc2xpdGVyYXRvcigiSGV4LUFueS9QZXJsIiwgbmV3IGNoYXJbXSB7CisgICAgICAgICAgICAgICAgICAgIDMsIDEsIDE2LCAxLCA2LCAnXFwnLCAneCcsICd7JywgJ30nLAorICAgICAgICAgICAgICAgICAgICBFTkQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gQWxsOiBKYXZhLCBDLCBQZXJsLCBYTUwsIFhNTDEwLCBVbmljb2RlCisgICAgICAgIFRyYW5zbGl0ZXJhdG9yLnJlZ2lzdGVyRmFjdG9yeSgiSGV4LUFueSIsIG5ldyBUcmFuc2xpdGVyYXRvci5GYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFRyYW5zbGl0ZXJhdG9yIGdldEluc3RhbmNlKFN0cmluZyBJRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5lc2NhcGVUcmFuc2xpdGVyYXRvcigiSGV4LUFueSIsIG5ldyBjaGFyW10geworICAgICAgICAgICAgICAgICAgICAyLCAwLCAxNiwgNCwgNiwgJ1UnLCAnKycsICAgICAgICAgICAgLy8gVW5pY29kZQorICAgICAgICAgICAgICAgICAgICAyLCAwLCAxNiwgNCwgNCwgJ1xcJywgJ3UnLCAgICAgICAgICAgLy8gSmF2YQorICAgICAgICAgICAgICAgICAgICAyLCAwLCAxNiwgOCwgOCwgJ1xcJywgJ1UnLCAgICAgICAgICAgLy8gQyAoc3Vycm9nYXRlcykKKyAgICAgICAgICAgICAgICAgICAgMywgMSwgMTYsIDEsIDYsICcmJywgJyMnLCAneCcsICc7JywgIC8vIFhNTAorICAgICAgICAgICAgICAgICAgICAyLCAxLCAxMCwgMSwgNywgJyYnLCAnIycsICc7JywgICAgICAgLy8gWE1MMTAKKyAgICAgICAgICAgICAgICAgICAgMywgMSwgMTYsIDEsIDYsICdcXCcsICd4JywgJ3snLCAnfScsIC8vIFBlcmwKKyAgICAgICAgICAgICAgICAgICAgRU5ECisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBhY2thZ2UgcHJpdmF0ZSBjb25zdHJ1Y3Rvci4gIFRha2VzIHRoZSBlbmNvZGVkIHNwZWMgYXJyYXkuCisgICAgICovCisgICAgVW5lc2NhcGVUcmFuc2xpdGVyYXRvcihTdHJpbmcgSUQsIGNoYXIgc3BlY1tdKSB7CisgICAgICAgIHN1cGVyKElELCBudWxsKTsKKyAgICAgICAgdGhpcy5zcGVjID0gc3BlYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBUcmFuc2xpdGVyYXRvciNoYW5kbGVUcmFuc2xpdGVyYXRlfS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVUcmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBwb3MsIGJvb2xlYW4gaXNJbmNyZW1lbnRhbCkgeworICAgICAgICBpbnQgc3RhcnQgPSBwb3Muc3RhcnQ7CisgICAgICAgIGludCBsaW1pdCA9IHBvcy5saW1pdDsKKyAgICAgICAgaW50IGksIGosIGlwYXQ7CisKKyAgICAgIGxvb3A6CisgICAgICAgIHdoaWxlIChzdGFydCA8IGxpbWl0KSB7CisgICAgICAgICAgICAvLyBMb29wIG92ZXIgdGhlIGZvcm1zIGluIHNwZWNbXS4gIEV4aXQgdGhpcyBsb29wIHdoZW4gd2UKKyAgICAgICAgICAgIC8vIG1hdGNoIG9uZSBvZiB0aGUgc3BlY3MuICBFeGl0IHRoZSBvdXRlciBsb29wIGlmIGEKKyAgICAgICAgICAgIC8vIHBhcnRpYWwgbWF0Y2ggaXMgZGV0ZWN0ZWQgYW5kIGlzSW5jcmVtZW50YWwgaXMgdHJ1ZS4KKyAgICAgICAgICAgIGZvciAoaj0wLCBpcGF0PTA7IHNwZWNbaXBhdF0gIT0gRU5EOyArK2opIHsKKworICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIGludCBwcmVmaXhMZW4gPSBzcGVjW2lwYXQrK107CisgICAgICAgICAgICAgICAgaW50IHN1ZmZpeExlbiA9IHNwZWNbaXBhdCsrXTsKKyAgICAgICAgICAgICAgICBpbnQgcmFkaXggICAgID0gc3BlY1tpcGF0KytdOworICAgICAgICAgICAgICAgIGludCBtaW5EaWdpdHMgPSBzcGVjW2lwYXQrK107CisgICAgICAgICAgICAgICAgaW50IG1heERpZ2l0cyA9IHNwZWNbaXBhdCsrXTsKKworICAgICAgICAgICAgICAgIC8vIHMgaXMgYSBjb3B5IG9mIHN0YXJ0IHRoYXQgaXMgYWR2YW5jZWQgb3ZlciB0aGUKKyAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGFzIHdlIHBhcnNlIHRoZW0uCisgICAgICAgICAgICAgICAgaW50IHMgPSBzdGFydDsKKyAgICAgICAgICAgICAgICBib29sZWFuIG1hdGNoID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHByZWZpeExlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzID49IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IG1hdGNoZWQgYSBjaGFyYWN0ZXIuICBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBwYXJ0aWFsIG1hdGNoLCBzbyB3ZSByZXR1cm4gaWYgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnRhbCBtb2RlLiAgSW4gbm9uLWluY3JlbWVudGFsIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ28gdG8gdGhlIG5leHQgc3BlYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmNyZW1lbnRhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IHRleHQuY2hhckF0KHMrKyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjICE9IHNwZWNbaXBhdCArIGldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHUgPSAwOworICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXRDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID49IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaW4gaW5jcmVtZW50YWwgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+IHN0YXJ0ICYmIGlzSW5jcmVtZW50YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSB0ZXh0LmNoYXIzMkF0KHMpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0ID0gVUNoYXJhY3Rlci5kaWdpdChjaCwgcmFkaXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBVVEYxNi5nZXRDaGFyQ291bnQoY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgdSA9ICh1ICogcmFkaXgpICsgZGlnaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytkaWdpdENvdW50ID09IG1heERpZ2l0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAoZGlnaXRDb3VudCA+PSBtaW5EaWdpdHMpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8c3VmZml4TGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+PSBsaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgcGFydGlhbCBtYXRjaCBpbiBpbmNyZW1lbnRhbCBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+IHN0YXJ0ICYmIGlzSW5jcmVtZW50YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IHRleHQuY2hhckF0KHMrKyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gc3BlY1tpcGF0ICsgcHJlZml4TGVuICsgaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGEgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyID0gVVRGMTYudmFsdWVPZih1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2Uoc3RhcnQsIHMsIHN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgLT0gcyAtIHN0YXJ0IC0gc3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYnJlYWsgc3RhdGVtZW50IGxlYXZlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29wIHRoYXQgaXMgdHJhdmVyc2luZyB0aGUgZm9ybXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjW10uICBXZSB0aGVuIHBhcnNlIHRoZSBuZXh0IGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaXBhdCArPSBwcmVmaXhMZW4gKyBzdWZmaXhMZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdGFydCA8IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgc3RhcnQgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KHRleHQuY2hhcjMyQXQoc3RhcnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBvcy5jb250ZXh0TGltaXQgKz0gbGltaXQgLSBwb3MubGltaXQ7CisgICAgICAgIHBvcy5saW1pdCA9IGxpbWl0OworICAgICAgICBwb3Muc3RhcnQgPSBzdGFydDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlQ29tcHJlc3Nvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZUNvbXByZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjMyYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZUNvbXByZXNzb3IuamF2YQpAQCAtMCwwICsxLDEwMTIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVDb21wcmVzc29yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDMgMjI6MDM6NTkgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCisvKioKKyogQSBjb21wcmVzc2lvbiBlbmdpbmUgaW1wbGVtZW50aW5nIHRoZSBTdGFuZGFyZCBDb21wcmVzc2lvbiBTY2hlbWUKKyogZm9yIFVuaWNvZGUgKFNDU1UpIGFzIG91dGxpbmVkIGluIDxBCisqIEhSRUY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyNiI+VW5pY29kZSBUZWNobmljYWwKKyogUmVwb3J0ICM2PC9BPi4KKyoKKyogPFA+VGhlIFNDU1Ugd29ya3MgYnkgdXNpbmcgZHluYW1pY2FsbHkgcG9zaXRpb25lZCA8RU0+d2luZG93czwvRU0+CisqIGNvbnNpc3Rpbmcgb2YgMTI4IGNvbnNlY3V0aXZlIGNoYXJhY3RlcnMgaW4gVW5pY29kZS4gIER1cmluZyBjb21wcmVzc2lvbiwgCisqIGNoYXJhY3RlcnMgd2l0aGluIGEgd2luZG93IGFyZSBlbmNvZGVkIGluIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBhcyB0aGUgYnl0ZXMgCisqIDxUVD4weDdGIC0gMHhGRjwvVFQ+LiBUaGUgU0NTVSBwcm92aWRlcyB0cmFuc3BhcmVuY3kgZm9yIHRoZSBjaGFyYWN0ZXJzIAorKiAoYnl0ZXMpIGJldHdlZW4gPFRUPlUrMDAwMCAtIFUrMDBGRjwvVFQ+LiAgVGhlIFNDU1UgYXBwcm94aW1hdGVzIHRoZSAKKyogc3RvcmFnZSBzaXplIG9mIHRyYWRpdGlvbmFsIGNoYXJhY3RlciBzZXRzLCBmb3IgZXhhbXBsZSAxIGJ5dGUgcGVyCisqIGNoYXJhY3RlciBmb3IgQVNDSUkgb3IgTGF0aW4tMSB0ZXh0LCBhbmQgMiBieXRlcyBwZXIgY2hhcmFjdGVyIGZvciBDSksKKyogaWRlb2dyYXBocy48L1A+CisqCisqIDxQPjxTVFJPTkc+VVNBR0U8L1NUUk9ORz48L1A+CisqCisqIDxQPlRoZSBzdGF0aWMgbWV0aG9kcyBvbiA8VFQ+VW5pY29kZUNvbXByZXNzb3I8L1RUPiBtYXkgYmUgdXNlZCBpbiBhCisqIHN0cmFpZ2h0Zm9yd2FyZCBtYW5uZXIgdG8gY29tcHJlc3Mgc2ltcGxlIHN0cmluZ3M6PC9QPgorKgorKiA8UFJFPgorKiAgU3RyaW5nIHMgPSAuLi4gOyAvLyBnZXQgc3RyaW5nIGZyb20gc29tZXdoZXJlCisqICBieXRlIFtdIGNvbXByZXNzZWQgPSBVbmljb2RlQ29tcHJlc3Nvci5jb21wcmVzcyhzKTsKKyogPC9QUkU+CisqCisqIDxQPlRoZSBzdGF0aWMgbWV0aG9kcyBoYXZlIGEgZmFpcmx5IGxhcmdlIG1lbW9yeSBmb290cHJpbnQuCisqIEZvciBmaW5lci1ncmFpbmVkIGNvbnRyb2wgb3ZlciBtZW1vcnkgdXNhZ2UsIAorKiA8VFQ+VW5pY29kZUNvbXByZXNzb3I8L1RUPiBvZmZlcnMgbW9yZSBwb3dlcmZ1bCBBUElzIGFsbG93aW5nCisqIGl0ZXJhdGl2ZSBjb21wcmVzc2lvbjo8L1A+CisqCisqIDxQUkU+CisqICAvLyBDb21wcmVzcyBhbiBhcnJheSAiY2hhcnMiIG9mIGxlbmd0aCAibGVuIiB1c2luZyBhIGJ1ZmZlciBvZiA1MTIgYnl0ZXMKKyogIC8vIHRvIHRoZSBPdXRwdXRTdHJlYW0gIm91dCIKKyoKKyogIFVuaWNvZGVDb21wcmVzc29yIG15Q29tcHJlc3NvciAgICAgICAgID0gbmV3IFVuaWNvZGVDb21wcmVzc29yKCk7CisqICBmaW5hbCBzdGF0aWMgaW50ICBCVUZTSVpFICAgICAgICAgICAgICA9IDUxMjsKKyogIGJ5dGUgW10gICAgICAgICAgIGJ5dGVCdWZmZXIgICAgICAgICAgID0gbmV3IGJ5dGUgWyBCVUZTSVpFIF07CisqICBpbnQgICAgICAgICAgICAgICBieXRlc1dyaXR0ZW4gICAgICAgICA9IDA7CisqICBpbnQgW10gICAgICAgICAgICB1bmljaGFyc1JlYWQgICAgICAgICA9IG5ldyBpbnQgWzFdOworKiAgaW50ICAgICAgICAgICAgICAgdG90YWxDaGFyc0NvbXByZXNzZWQgPSAwOworKiAgaW50ICAgICAgICAgICAgICAgdG90YWxCeXRlc1dyaXR0ZW4gICAgPSAwOworKgorKiAgZG8geworKiAgICAvLyBkbyB0aGUgY29tcHJlc3Npb24KKyogICAgYnl0ZXNXcml0dGVuID0gbXlDb21wcmVzc29yLmNvbXByZXNzKGNoYXJzLCB0b3RhbENoYXJzQ29tcHJlc3NlZCwgCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4sIHVuaWNoYXJzUmVhZCwKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVCdWZmZXIsIDAsIEJVRlNJWkUpOworKgorKiAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgY3VycmVudCBzZXQgb2YgYnl0ZXMKKyogICAgb3V0LndyaXRlKGJ5dGVCdWZmZXIsIDAsIGJ5dGVzV3JpdHRlbik7CisqCisqICAgIC8vIHVwZGF0ZSB0aGUgbm8uIG9mIGNoYXJhY3RlcnMgY29tcHJlc3NlZAorKiAgICB0b3RhbENoYXJzQ29tcHJlc3NlZCArPSB1bmljaGFyc1JlYWRbMF07CisqCisqICAgIC8vIHVwZGF0ZSB0aGUgbm8uIG9mIGJ5dGVzIHdyaXR0ZW4KKyogICAgdG90YWxCeXRlc1dyaXR0ZW4gKz0gYnl0ZXNXcml0dGVuOworKgorKiAgfSB3aGlsZSh0b3RhbENoYXJzQ29tcHJlc3NlZCA8IGxlbik7CisqCisqICBteUNvbXByZXNzb3IucmVzZXQoKTsgLy8gcmV1c2UgY29tcHJlc3NvcgorKiA8L1BSRT4KKyoKKyogQHNlZSBVbmljb2RlRGVjb21wcmVzc29yCisqCisqIEBhdXRob3IgU3RlcGhlbiBGLiBCb290aAorKiBAZHJhZnQgSUNVIDIuNAorKi8KKworLyoKKyoKKyogQ09NUFJFU1NJT04gU1RSQVRFR1kKKyoKKyogU2luZ2xlIEJ5dGUgTW9kZQorKgorKiBUaGVyZSBhcmUgdGhyZWUgcmVsZXZhbnQgY2FzZXMuCisqIElmIHRoZSBjaGFyYWN0ZXIgaXMgaW4gdGhlIGN1cnJlbnQgd2luZG93IG9yIGlzIExhdGluLTEgKFUrMDAwMCwKKyogVSswMDA5LCBVKzAwMEEsIFUrMDAwRCwgVSswMDIwIC0gVSswMDdGKSwgdGhlIGNoYXJhY3RlciBpcyBwbGFjZWQKKyogZGlyZWN0bHkgaW4gdGhlIHN0cmVhbSBhcyBhIHNpbmdsZSBieXRlLgorKgorKiAgMS4gQ3VycmVudCBjaGFyYWN0ZXIgaXMgaW4gZGVmaW5lZCwgaW5hY3RpdmUgd2luZG93LgorKiAgMi4gQ3VycmVudCBjaGFyYWN0ZXIgaXMgaW4gdW5kZWZpbmVkIHdpbmRvdy4KKyogIDMuIEN1cnJlbnQgY2hhcmFjdGVyIGlzIHVuY29tcHJlc3NpYmxlIFVuaWNvZGUgKFUrMzQwMCAtIFUrREZGRikuCisqIAorKiAgMS4gQ3VycmVudCBjaGFyYWN0ZXIgaXMgaW4gZGVmaW5lZCwgaW5hY3RpdmUgd2luZG93CisqICAgIEEuIExvb2sgYWhlYWQgdHdvIGNoYXJhY3RlcnMKKyogICAgQi4gSWYgYm90aCBmb2xsb3dpbmcgY2hhcmFjdGVycyBpbiBzYW1lIHdpbmRvdyBhcyBjdXJyZW50IGNoYXJhY3RlciwgCisqICAgICAgIHN3aXRjaCB0byBkZWZpbmVkIHdpbmRvdworKiAgICBDLiBJZiBvbmx5IG5leHQgY2hhcmFjdGVyIGlzIGluIHNhbWUgd2luZG93IGFzIGN1cnJlbnQgY2hhcmFjdGVyLCAKKyogICAgICAgcXVvdGUgZGVmaW5lZCB3aW5kb3cKKyogICAgRC4gSWYgbmVpdGhlciBvZiBmb2xsb3dpbmcgY2hhcmFjdGVycyBpcyBpbiBzYW1lIHdpbmRvdyBhcyBjdXJyZW50LCAKKyogICAgICAgcXVvdGUgZGVmaW5lZCB3aW5kb3cKKyogICAKKyogIDIuIEN1cnJlbnQgY2hhcmFjdGVyIGlzIGluIHVuZGVmaW5lZCB3aW5kb3cKKyogICAgQS4gTG9vayBhaGVhZCB0d28gY2hhcmFjdGVycworKiAgICBCLiBJZiBib3RoIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGluIHNhbWUgd2luZG93IGFzIGN1cnJlbnQgY2hhcmFjdGVyLCAKKyogICAgICAgZGVmaW5lIG5ldyB3aW5kb3cKKyogICAgQy4gSWYgb25seSBuZXh0IGNoYXJhY3RlciBpbiBzYW1lIHdpbmRvdyBhcyBjdXJyZW50IGNoYXJhY3RlciwgCisqICAgICAgIHN3aXRjaCB0byBVbmljb2RlIG1vZGUKKyogICAgICAgTk9URTogVGhpcyBjb3N0cyB1cyBvbmUgZXh0cmEgYnl0ZS4gIEhvd2V2ZXIsIAorKiAgICAgICAgc2luY2Ugd2UgaGF2ZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHdpbmRvd3MgdG8gd29yayB3aXRoLCBpdCBpcyAKKyogICAgICAgIGFzc3VtZWQgdGhlIGNvc3Qgd2lsbCBwYXkgb2ZmIGxhdGVyIGluIHNhdmluZ3MgZnJvbSBhIHdpbmRvdyB3aXRoCisqICAgICAgICBtb3JlIGNoYXJhY3RlcnMgaW4gaXQuCisqICAgIEQuIElmIG5laXRoZXIgb2YgZm9sbG93aW5nIGNoYXJhY3RlcnMgaW4gc2FtZSB3aW5kb3cgYXMgY3VycmVudCwgCisqICAgICAgIHN3aXRjaCB0byBVbmljb2RlIG1vZGUuICBBbHRlcm5hdGl2ZSB0byBhYm92ZToganVzdCBxdW90ZSAKKyogICAgICAgVW5pY29kZSAoc2FtZSBieXRlIGNvc3QpCisqICAgCisqICAzLiBDdXJyZW50IGNoYXJhY3RlciBpcyB1bmNvbXByZXNzaWJsZSBVbmljb2RlIChVKzM0MDAgLSBVK0RGRkYpCisqICAgIEEuIExvb2sgYWhlYWQgb25lIGNoYXJhY3RlcgorKiAgICBCLiBJZiBuZXh0IGNoYXJhY3RlciBpbiBub24tY29tcHJlc3NpYmxlIHJlZ2lvbiwgc3dpdGNoIHRvIAorKiAgICAgICBVbmljb2RlIG1vZGUKKyogICAgQy4gSWYgbmV4dCBjaGFyYWN0ZXIgbm90IGluIG5vbi1jb21wcmVzc2libGUgcmVnaW9uLCBxdW90ZSBVbmljb2RlCisqICAgCisqCisqIFRoZSBmb2xsb3dpbmcgY2hhcnQgaWxsdXN0cmF0ZXMgdGhlIGJ5dGVzIHJlcXVpcmVkIGZvciBlbmNvZGluZyBjaGFyYWN0ZXJzCisqIGluIGVhY2ggcG9zc2libGUgd2F5CisqCisqIAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lOR0xFIEJZVEUgTU9ERQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJhY3RlcnMgaW4gYSByb3cgd2l0aCBzYW1lIGluZGV4CisqICAgICAgICAgICAgICAgdGFnIGVuY291bnRlcmVkICAgICAgICAgICAgIDEgICAgICAgMiAgICAgICAzICAgICAgIDQKKyogICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogICAgICAgICAgICAgICBub25lIChpbiBjdXJyZW50IHdpbmRvdykgICAgMSAgICAgICAyICAgICAgIDMgICAgICAgNAorKgorKiAgICAgICAgICAgICAgIHF1b3RlIFVuaWNvZGUgICAgICAgICAgICAgICAzICAgICAgIDYgICAgICAgOSAgICAgICAxMgorKgorKiAgIHdpbmRvdyBub3QgIHN3aXRjaCB0byBVbmljb2RlICAgICAgICAgICAzICAgICAgIDUgICAgICAgNyAgICAgICA5ICAgICBieXRlCisqICAgZGVmaW5lZCAgICAgZGVmaW5lIHdpbmRvdyAgICAgICAgICAgICAgIDMgICAgICAgNCAgICAgICA1ICAgICAgIDYgICAgIGNvc3QKKyogICAgICAKKyogICB3aW5kb3cgICAgICBzd2l0Y2ggdG8gd2luZG93ICAgICAgICAgICAgMiAgICAgICAzICAgICAgIDQgICAgICAgNQorKiAgIGRlZmluZWQgICAgIHF1b3RlIHdpbmRvdyAgICAgICAgICAgICAgICAyICAgICAgIDQgICAgICAgNiAgICAgICA4CisqCisqICBVbmljb2RlIE1vZGUKKyoKKyogVGhlcmUgYXJlIHR3byByZWxldmFudCBjYXNlcy4KKyogSWYgdGhlIGNoYXJhY3RlciBpcyBpbiB0aGUgbm9uLWNvbXByZXNzaWJsZSByZWdpb24KKyogKFUrMzQwMCAtIFUrREZGRiksIHRoZSBjaGFyYWN0ZXIgaXMgc2ltcGx5IHdyaXR0ZW4gdG8gdGhlCisqIHN0cmVhbSBhcyBhIHBhaXIgb2YgYnl0ZXMuCisqCisqIDEuIEN1cnJlbnQgY2hhcmFjdGVyIGlzIGluIGRlZmluZWQsIGluYWN0aXZlIHdpbmRvdy4KKyogMi4gQ3VycmVudCBjaGFyYWN0ZXIgaXMgaW4gdW5kZWZpbmVkIHdpbmRvdy4KKyoKKyogIDEuQ3VycmVudCBjaGFyYWN0ZXIgaXMgaW4gZGVmaW5lZCwgaW5hY3RpdmUgd2luZG93CisqICAgIEEuIExvb2sgYWhlYWQgb25lIGNoYXJhY3RlcgorKiAgICBCLiBJZiBuZXh0IGNoYXJhY3RlciBoYXMgc2FtZSBpbmRleCBhcyBjdXJyZW50IGNoYXJhY3RlciwgCisqICAgICAgIHN3aXRjaCB0byBkZWZpbmVkIHdpbmRvdyAoYW5kIHN3aXRjaCB0byBzaW5nbGUtYnl0ZSBtb2RlKQorKiAgICBDLiBJZiBub3QsIGp1c3QgcHV0IGJ5dGVzIGluIHN0cmVhbQorKiAgIAorKiAgCisqICAyLiBDdXJyZW50IGNoYXJhY3RlciBpcyBpbiB1bmRlZmluZWQgd2luZG93CisqICAgIEEuIExvb2sgYWhlYWQgdHdvIGNoYXJhY3RlcnMKKyogICAgQi4gSWYgYm90aCBpbiBzYW1lIHdpbmRvdyBhcyBjdXJyZW50IGNoYXJhY3RlciwgZGVmaW5lIHdpbmRvdyAKKyogICAgICAgKGFuZCBzd2l0Y2ggdG8gc2luZ2xlLWJ5dGUgbW9kZSkKKyogICAgQy4gSWYgb25seSBuZXh0IGNoYXJhY3RlciBpbiBzYW1lIHdpbmRvdywganVzdCBwdXQgYnl0ZXMgaW4gc3RyZWFtCisqICAgICAgICBOT1RFOiBUaGlzIGNvc3RzIHVzIG9uZSBleHRyYSBieXRlLiAgSG93ZXZlciwgCisqICAgICAgICBzaW5jZSB3ZSBoYXZlIGEgbGltaXRlZCBudW1iZXIgb2Ygd2luZG93cyB0byB3b3JrIHdpdGgsIGl0IGlzIAorKiAgICAgICAgYXNzdW1lZCB0aGUgY29zdCB3aWxsIHBheSBvZmYgbGF0ZXIgaW4gc2F2aW5ncyBmcm9tIGEgd2luZG93IHdpdGggCisqICAgICAgICBtb3JlIGNoYXJhY3RlcnMgaW4gaXQuCisqICAgIEQuIElmIG5laXRoZXIgaW4gc2FtZSB3aW5kb3csIHB1dCBieXRlcyBpbiBzdHJlYW0KKyogICAKKyoKKyogVGhlIGZvbGxvd2luZyBjaGFydCBpbGx1c3RyYXRlcyB0aGUgYnl0ZXMgcmVxdWlyZWQgZm9yIGVuY29kaW5nIGNoYXJhY3RlcnMKKyogaW4gZWFjaCBwb3NzaWJsZSB3YXkKKyoKKyogCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTklDT0RFIE1PREUKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJzIGluIGEgcm93IHdpdGggc2FtZSBpbmRleAorKiAgICAgICAgICAgICAgIHRhZyBlbmNvdW50ZXJlZCAgICAgICAgICAgICAxICAgICAgIDIgICAgICAgMyAgICAgICA0CisqICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICAgICAgICAgICAgICAgbm9uZSAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgICAgNCAgICAgICA2ICAgICAgIDgKKyoKKyogICAgICAgICAgICAgICBxdW90ZSBVbmljb2RlICAgICAgICAgICAgICAgMyAgICAgICA2ICAgICAgIDkgICAgICAgMTIKKyoKKyogICB3aW5kb3cgbm90ICBkZWZpbmUgd2luZG93ICAgICAgICAgICAgICAgMyAgICAgICA0ICAgICAgIDUgICAgICAgNiAgICAgYnl0ZQorKiAgIGRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3N0CisqICAgd2luZG93ICAgICAgc3dpdGNoIHRvIHdpbmRvdyAgICAgICAgICAgIDIgICAgICAgMyAgICAgICA0ICAgICAgIDUKKyogICBkZWZpbmVkCisqLworcHVibGljIGZpbmFsIGNsYXNzIFVuaWNvZGVDb21wcmVzc29yIGltcGxlbWVudHMgU0NTVQoreworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBDbGFzcyB2YXJpYWJsZXMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKiogRm9yIHF1aWNrIGlkZW50aWZpY2F0aW9uIG9mIGEgYnl0ZSBhcyBhIHNpbmdsZS1ieXRlIG1vZGUgdGFnICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBbXSBzU2luZ2xlVGFnVGFibGUgPSB7CisgICAgICAgIC8vIHRhYmxlIGdlbmVyYXRlZCBieSBDb21wcmVzc2lvblRhYmxlR2VuZXJhdG9yCisgICAgICAgIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwKKwlmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsCisJdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKKwl0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlICAgCisgICAgfTsKKworICAgIC8qKiBGb3IgcXVpY2sgaWRlbnRpZmljYXRpb24gb2YgYSBieXRlIGFzIGEgdW5pY29kZSBtb2RlIHRhZyAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gW10gc1VuaWNvZGVUYWdUYWJsZSA9IHsKKyAgICAgICAgLy8gdGFibGUgZ2VuZXJhdGVkIGJ5IENvbXByZXNzaW9uVGFibGVHZW5lcmF0b3IKKyAgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLAorCXRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsCisJdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLAorCWZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJZmFsc2UsIGZhbHNlIAorICAgIH07CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gSW5zdGFuY2UgdmFyaWFibGVzCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIAorICAgIC8qKiBBbGlhcyB0byBjdXJyZW50IGR5bmFtaWMgd2luZG93ICovCisgICAgcHJpdmF0ZSBpbnQgICAgICAgZkN1cnJlbnRXaW5kb3cgICA9IDA7CisKKyAgICAvKiogRHluYW1pYyBjb21wcmVzc2lvbiB3aW5kb3cgb2Zmc2V0cyAqLworICAgIHByaXZhdGUgaW50IFtdICAgIGZPZmZzZXRzICAgICAgICAgPSBuZXcgaW50IFsgTlVNV0lORE9XUyBdOworCisgICAgLyoqIEN1cnJlbnQgY29tcHJlc3Npb24gbW9kZSAqLworICAgIHByaXZhdGUgaW50ICAgICAgIGZNb2RlICAgICAgICAgICAgPSBTSU5HTEVCWVRFTU9ERTsKKworICAgIC8qKiBLZWVwcyBjb3VudCBvZiB0aW1lcyBjaGFyYWN0ZXIgaW5kaWNlcyBhcmUgZW5jb3VudGVyZWQgKi8KKyAgICBwcml2YXRlIGludCBbXSAgICBmSW5kZXhDb3VudCAgICAgID0gbmV3IGludCBbIE1BWElOREVYICsgMSBdOworCisgICAgLyoqIFRoZSB0aW1lIHN0YW1wcyBpbmRpY2F0ZSB3aGVuIGEgd2luZG93IHdhcyBsYXN0IGRlZmluZWQgKi8KKyAgICBwcml2YXRlIGludCBbXSAgICBmVGltZVN0YW1wcyAgICAgID0gbmV3IGludCBbIE5VTVdJTkRPV1MgXTsKKyAgICAKKyAgICAvKiogVGhlIGN1cnJlbnQgdGltZSBzdGFtcCAqLworICAgIHByaXZhdGUgaW50ICAgICAgIGZUaW1lU3RhbXAgICAgICAgPSAwOworICAgIAorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgVW5pY29kZUNvbXByZXNzb3IuCisgICAgICogU2V0cyBhbGwgd2luZG93cyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgKiBAc2VlICNyZXNldAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVDb21wcmVzc29yKCkKKyAgICB7CisJcmVzZXQoKTsgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdG8gZGVmYXVsdHMKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wcmVzcyBhIHN0cmluZyBpbnRvIGEgYnl0ZSBhcnJheS4KKyAgICAgKiBAcGFyYW0gYnVmZmVyIFRoZSBzdHJpbmcgdG8gY29tcHJlc3MuCisgICAgICogQHJldHVybiBBIGJ5dGUgYXJyYXkgY29udGFpbmluZyB0aGUgY29tcHJlc3NlZCBjaGFyYWN0ZXJzLgorICAgICAqIEBzZWUgI2NvbXByZXNzKGNoYXIgW10sIGludCwgaW50KQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBieXRlIFtdIGNvbXByZXNzKFN0cmluZyBidWZmZXIpCisgICAgeworCXJldHVybiBjb21wcmVzcyhidWZmZXIudG9DaGFyQXJyYXkoKSwgMCwgYnVmZmVyLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wcmVzcyBhIFVuaWNvZGUgY2hhcmFjdGVyIGFycmF5IGludG8gYSBieXRlIGFycmF5LgorICAgICAqIEBwYXJhbSBidWZmZXIgVGhlIGNoYXJhY3RlciBidWZmZXIgdG8gY29tcHJlc3MuCisgICAgICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgY2hhcmFjdGVyIHJ1biB0byBjb21wcmVzcy4KKyAgICAgKiBAcGFyYW0gbGltaXQgVGhlIGxpbWl0IG9mIHRoZSBjaGFyYWN0ZXIgcnVuIHRvIGNvbXByZXNzLgorICAgICAqIEByZXR1cm4gQSBieXRlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbXByZXNzZWQgY2hhcmFjdGVycy4KKyAgICAgKiBAc2VlICNjb21wcmVzcyhTdHJpbmcpCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJ5dGUgW10gY29tcHJlc3MoY2hhciBbXSBidWZmZXIsCisJCQkJICAgaW50IHN0YXJ0LAorCQkJCSAgIGludCBsaW1pdCkKKyAgICB7CisJVW5pY29kZUNvbXByZXNzb3IgY29tcCA9IG5ldyBVbmljb2RlQ29tcHJlc3NvcigpOworCisJLy8gdXNlIGEgYnVmZmVyIHRoYXQgd2Uga25vdyB3aWxsIG5ldmVyIG92ZXJmbG93CisJLy8gaW4gdGhlIHdvcnN0IGNhc2UsIGVhY2ggY2hhcmFjdGVyIHdpbGwgdGFrZSAzIGJ5dGVzCisJLy8gdG8gZW5jb2RlOiBVUVUsIGhpYnl0ZSwgbG9ieXRlLiAgSW4gdGhpcyBjYXNlLCB0aGUKKwkvLyBjb21wcmVzc2VkIGRhdGEgd2lsbCBsb29rIGxpa2U6IFNDVSwgVVFVLCBoaWJ5dGUsIGxvYnl0ZSwgLi4uCisJLy8gYnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcyBpbiBzaXplCisJaW50IGxlbiA9IE1hdGgubWF4KDQsIDMgKiAobGltaXQgLSBzdGFydCkgKyAxKTsKKwlieXRlIFtdIHRlbXAgPSBuZXcgYnl0ZSBbbGVuXTsKKworCWludCBieXRlQ291bnQgPSBjb21wLmNvbXByZXNzKGJ1ZmZlciwgc3RhcnQsIGxpbWl0LCBudWxsLCAKKwkJCQkgICAgICB0ZW1wLCAwLCBsZW4pOworCisJYnl0ZSBbXSByZXN1bHQgPSBuZXcgYnl0ZSBbYnl0ZUNvdW50XTsKKwlTeXN0ZW0uYXJyYXljb3B5KHRlbXAsIDAsIHJlc3VsdCwgMCwgYnl0ZUNvdW50KTsKKwlyZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXByZXNzIGEgVW5pY29kZSBjaGFyYWN0ZXIgYXJyYXkgaW50byBhIGJ5dGUgYXJyYXkuCisgICAgICoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgb25seSBjb25zdW1lIGlucHV0IHRoYXQgY2FuIGJlIGNvbXBsZXRlbHkKKyAgICAgKiBvdXRwdXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2hhckJ1ZmZlciBUaGUgY2hhcmFjdGVyIGJ1ZmZlciB0byBjb21wcmVzcy4KKyAgICAgKiBAcGFyYW0gY2hhckJ1ZmZlclN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgY2hhcmFjdGVyIHJ1biB0byBjb21wcmVzcy4KKyAgICAgKiBAcGFyYW0gY2hhckJ1ZmZlckxpbWl0IFRoZSBsaW1pdCBvZiB0aGUgY2hhcmFjdGVyIHJ1biB0byBjb21wcmVzcy4KKyAgICAgKiBAcGFyYW0gY2hhcnNSZWFkIEEgb25lLWVsZW1lbnQgYXJyYXkuICBJZiBub3QgbnVsbCwgb24gcmV0dXJuIAorICAgICAqIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGZyb20gY2hhckJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gYnl0ZUJ1ZmZlciBBIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBjb21wcmVzc2VkIGRhdGEuICBUaGlzIAorICAgICAqIGJ1ZmZlciBtdXN0IGJlIGF0IG1pbmltdW0gZm91ciBieXRlcyBpbiBzaXplLgorICAgICAqIEBwYXJhbSBieXRlQnVmZmVyU3RhcnQgVGhlIHN0YXJ0aW5nIG9mZnNldCB0byB3aGljaCB0byB3cml0ZSAKKyAgICAgKiBjb21wcmVzc2VkIGRhdGEuCisgICAgICogQHBhcmFtIGJ5dGVCdWZmZXJMaW1pdCBUaGUgbGltaXRpbmcgb2Zmc2V0IGZvciB3cml0aW5nIGNvbXByZXNzZWQgZGF0YS4KKyAgICAgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBieXRlQnVmZmVyLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGludCBjb21wcmVzcyhjaGFyIFtdICAgICBjaGFyQnVmZmVyLAorCQkJaW50ICAgICAgICAgY2hhckJ1ZmZlclN0YXJ0LAorCQkJaW50ICAgICAgICAgY2hhckJ1ZmZlckxpbWl0LAorCQkJaW50IFtdICAgICAgY2hhcnNSZWFkLAorCQkJYnl0ZSBbXSAgICAgYnl0ZUJ1ZmZlciwKKwkJCWludCAgICAgICAgIGJ5dGVCdWZmZXJTdGFydCwKKwkJCWludCAgICAgICAgIGJ5dGVCdWZmZXJMaW1pdCkKKyAgICB7CisgICAgICAgIC8vIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSB0YXJnZXQgYnl0ZSBidWZmZXIKKwlpbnQgICAgIGJ5dGVQb3MgICAgICAgPSBieXRlQnVmZmVyU3RhcnQ7CisJCisJLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHNvdXJjZSB1bmljb2RlIGNoYXJhY3RlciBidWZmZXIKKwlpbnQgICAgIHVjUG9zICAgICAgICAgPSBjaGFyQnVmZmVyU3RhcnQ7CisJCisJLy8gdGhlIGN1cnJlbnQgdW5pY29kZSBjaGFyYWN0ZXIgZnJvbSB0aGUgc291cmNlIGJ1ZmZlcgorCWludCAgICAgY3VyVUMgICAgICAgICA9IElOVkFMSURDSEFSOworCQorCS8vIHRoZSBpbmRleCBmb3IgdGhlIGN1cnJlbnQgY2hhcmFjdGVyCisgICAgICAgIGludCAgICAgY3VySW5kZXggICAgICA9IC0xOworICAgICAgICAKKwkvLyBsb29rIGFoZWFkCisJaW50ICAgICBuZXh0VUMgICAgICAgID0gSU5WQUxJRENIQVI7CisJaW50ICAgICBmb3J3YXJkVUMgICAgID0gSU5WQUxJRENIQVI7CisJCisgICAgICAgIC8vIHRlbXBvcmFyeSBmb3Igd2luZG93IHNlYXJjaGluZworCWludCAgICAgd2hpY2hXaW5kb3cgICA9IDA7CisJCisJLy8gaGlnaCBhbmQgbG93IGJ5dGVzIG9mIHRoZSBjdXJyZW50IHVuaWNvZGUgY2hhcmFjdGVyCisJaW50ICAgICBoaUJ5dGUgICAgICAgID0gMDsKKwlpbnQgICAgIGxvQnl0ZSAgICAgICAgPSAwOworCisKKwkvLyBieXRlQnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcyBpbiBzaXplCisJaWYoYnl0ZUJ1ZmZlci5sZW5ndGggPCA0IHx8IChieXRlQnVmZmVyTGltaXQgLSBieXRlQnVmZmVyU3RhcnQpIDwgNCkKKwkgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYnl0ZUJ1ZmZlci5sZW5ndGggPCA0Iik7CisKKyAgICBtYWluTG9vcDoKKwl3aGlsZSh1Y1BvcyA8IGNoYXJCdWZmZXJMaW1pdCAmJiBieXRlUG9zIDwgYnl0ZUJ1ZmZlckxpbWl0KSB7CisJICAgIHN3aXRjaChmTW9kZSkgeworCQkvLyBtYWluIHNpbmdsZSBieXRlIG1vZGUgY29tcHJlc3Npb24gbG9vcAorCSAgICBjYXNlIFNJTkdMRUJZVEVNT0RFOgorCSAgICBzaW5nbGVCeXRlTW9kZUxvb3A6CisJICAgIHdoaWxlKHVjUG9zIDwgY2hhckJ1ZmZlckxpbWl0ICYmIGJ5dGVQb3MgPCBieXRlQnVmZmVyTGltaXQpIHsKKwkJLy8gZ2V0IGN1cnJlbnQgY2hhcgorCQljdXJVQyA9IGNoYXJCdWZmZXJbdWNQb3MrK107CisKKwkJLy8gZ2V0IG5leHQgY2hhcgorCQlpZih1Y1BvcyA8IGNoYXJCdWZmZXJMaW1pdCkgCisJCSAgICBuZXh0VUMgPSBjaGFyQnVmZmVyW3VjUG9zXTsKKwkJZWxzZQorCQkgICAgbmV4dFVDID0gSU5WQUxJRENIQVI7CisJCQorCQkvLyBjaGFycyBsZXNzIHRoYW4gMHgwMDgwIChleGNsdWRpbmcgdGFncykgZ28gc3RyYWlnaHQKKwkJLy8gaW4gc3RyZWFtCisJCWlmKGN1clVDIDwgMHgwMDgwKSB7CisJCSAgICBsb0J5dGUgPSBjdXJVQyAmIDB4RkY7CisKKwkJICAgIC8vIHdlIG5lZWQgdG8gY2hlY2sgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndAorCQkgICAgLy8gYWNjaWRlbnRhbGx5IHdyaXRlIGEgc2luZ2xlIGJ5dGUgbW9kZSB0YWcgdG8KKwkJICAgIC8vIHRoZSBzdHJlYW0gdW5sZXNzIGl0J3MgcXVvdGVkCisJCSAgICBpZihzU2luZ2xlVGFnVGFibGVbbG9CeXRlXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGUgYm90aCBieXRlcyBpZiBub3QsIHJld2luZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc291cmNlIHN0cmVhbSBhbmQgYnJlYWsgb3V0CisJCQlpZiggKGJ5dGVQb3MgKyAxKSA+PSBieXRlQnVmZmVyTGltaXQpIAorCQkJICAgIHsgLS11Y1BvczsgYnJlYWsgbWFpbkxvb3A7IH0KKworCQkJLy8gc2luY2Ugd2Uga25vdyB0aGUgYnl0ZSBpcyBsZXNzIHRoYW4gMHg4MCwgU1FVT1RFMAorCQkJLy8gd2lsbCB1c2Ugc3RhdGljIHdpbmRvdyAwLCBvciBBU0NJSQorCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIFNRVU9URTA7CisJCSAgICB9CisKKwkJICAgIGJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBsb0J5dGU7CisJCX0KKworCQkvLyBpZiB0aGUgY2hhciBiZWxvbmdzIHRvIGN1cnJlbnQgd2luZG93LCBjb252ZXJ0IGl0CisJCS8vIHRvIGEgYnl0ZSBieSBhZGRpbmcgdGhlIGdlbmVyaWMgY29tcHJlc3Npb24gb2Zmc2V0CisJCS8vIGFuZCBzdWJ0cmFjdGluZyB0aGUgd2luZG93J3Mgb2Zmc2V0CisJCWVsc2UgaWYoaW5EeW5hbWljV2luZG93KGN1clVDLCBmQ3VycmVudFdpbmRvdykgKSB7CisJCSAgICBieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgCisJCQkoY3VyVUMgLSBmT2Zmc2V0c1sgZkN1cnJlbnRXaW5kb3cgXSAKKwkJCSArIENPTVBSRVNTSU9OT0ZGU0VUKTsKKwkJfQorCQkKKwkJLy8gaWYgY2hhciBpcyBub3QgaW4gY29tcHJlc3NpYmxlIHJhbmdlLCBlaXRoZXIgc3dpdGNoIHRvIG9yCisJCS8vIHF1b3RlIGZyb20gdW5pY29kZQorCQllbHNlIGlmKCAhIGlzQ29tcHJlc3NpYmxlKGN1clVDKSApIHsKKwkJICAgIC8vIG9ubHkgY2hlY2sgbmV4dCBjaGFyYWN0ZXIgaWYgaXQgaXMgdmFsaWQKKwkJICAgIGlmKG5leHRVQyAhPSBJTlZBTElEQ0hBUiAmJiBpc0NvbXByZXNzaWJsZShuZXh0VUMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cml0ZSBhbGwgdGhyZWUgYnl0ZXMgaWYgbm90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXdpbmQgdGhlIHNvdXJjZSBzdHJlYW0gYW5kIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dAorCQkJaWYoIChieXRlUG9zICsgMikgPj0gYnl0ZUJ1ZmZlckxpbWl0KSAKKwkJCSAgICB7IC0tdWNQb3M7IGJyZWFrIG1haW5Mb29wOyB9CisKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBTUVVPVEVVOworCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIChjdXJVQyA+Pj4gOCk7CisJCQlieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgKGN1clVDICYgMHhGRik7CisJCSAgICB9CisJCSAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIGFsbCBmb3VyIGJ5dGVzIGlmIG5vdCwgcmV3aW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzb3VyY2Ugc3RyZWFtIGFuZCBicmVhayBvdXQKKwkJCWlmKChieXRlUG9zICsgMykgPj0gYnl0ZUJ1ZmZlckxpbWl0KSAKKwkJCSAgICB7IC0tdWNQb3M7IGJyZWFrIG1haW5Mb29wOyB9CisKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBTQ0hBTkdFVTsKKworCQkJaGlCeXRlID0gY3VyVUMgPj4+IDg7CisJCQlsb0J5dGUgPSBjdXJVQyAmIDB4RkY7CisKKwkJCWlmKHNVbmljb2RlVGFnVGFibGVbaGlCeXRlXSkKKwkJCSAgICAvLyBhZGQgcXVvdGUgVW5pY29kZSB0YWcKKwkJCSAgICBieXRlQnVmZmVyW2J5dGVQb3MrK10gICA9IChieXRlKSBVUVVPVEVVOyAgICAKKworCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIGhpQnl0ZTsKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBsb0J5dGU7CisgICAgICAgICAgICAgICAgCisJCQlmTW9kZSA9IFVOSUNPREVNT0RFOworCQkJYnJlYWsgc2luZ2xlQnl0ZU1vZGVMb29wOworCQkgICAgfQorCQl9CisKKwkJLy8gaWYgdGhlIGNoYXIgaXMgaW4gYSBjdXJyZW50bHkgZGVmaW5lZCBkeW5hbWljCisJCS8vIHdpbmRvdywgZmlndXJlIG91dCB3aGljaCBvbmUsIGFuZCBlaXRoZXIgc3dpdGNoIHRvCisJCS8vIGl0IG9yIHF1b3RlIGZyb20gaXQKKwkJZWxzZSBpZigod2hpY2hXaW5kb3cgPSBmaW5kRHluYW1pY1dpbmRvdyhjdXJVQykpIAorCQkJIT0gSU5WQUxJRFdJTkRPVyApIHsKKwkJICAgIC8vIGxvb2sgYWhlYWQKKwkJICAgIGlmKCAodWNQb3MgKyAxKSA8IGNoYXJCdWZmZXJMaW1pdCApCisJCQlmb3J3YXJkVUMgPSBjaGFyQnVmZmVyW3VjUG9zICsgMV07CisJCSAgICBlbHNlCisJCQlmb3J3YXJkVUMgPSBJTlZBTElEQ0hBUjsKKwkJICAgIAorCQkgICAgLy8gYWxsIHRocmVlIGNoYXJzIGluIHNhbWUgd2luZG93LCBzd2l0Y2ggdG8gdGhhdAorCQkgICAgLy8gd2luZG93IGluRHluYW1pY1dpbmRvdyB3aWxsIHJldHVybiBmYWxzZSBmb3IKKwkJICAgIC8vIElOVkFMSURDSEFSCisJCSAgICBpZihpbkR5bmFtaWNXaW5kb3cobmV4dFVDLCB3aGljaFdpbmRvdykgCisJCSAgICAgICAmJiBpbkR5bmFtaWNXaW5kb3coZm9yd2FyZFVDLCB3aGljaFdpbmRvdykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIGJvdGggYnl0ZXMgaWYgbm90LCByZXdpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBzdHJlYW0gYW5kIGJyZWFrIG91dAorCQkJaWYoIChieXRlUG9zICsgMSkgPj0gYnl0ZUJ1ZmZlckxpbWl0KSAKKwkJCSAgICB7IC0tdWNQb3M7IGJyZWFrIG1haW5Mb29wOyB9CisKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKShTQ0hBTkdFMCArIHdoaWNoV2luZG93KTsKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSAKKwkJCSAgICAoY3VyVUMgLSBmT2Zmc2V0c1t3aGljaFdpbmRvd10gCisJCQkgICAgICsgQ09NUFJFU1NJT05PRkZTRVQpOworCQkJZlRpbWVTdGFtcHMgWyB3aGljaFdpbmRvdyBdID0gKytmVGltZVN0YW1wOworCQkJZkN1cnJlbnRXaW5kb3cgPSB3aGljaFdpbmRvdzsKKwkJICAgIH0KKwkJICAgIAorCQkgICAgLy8gZWl0aGVyIG9ubHkgbmV4dCBjaGFyIG9yIG5laXRoZXIgaW4gc2FtZQorCQkgICAgLy8gd2luZG93LCBzbyBxdW90ZQorCQkgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cml0ZSBib3RoIGJ5dGVzIGlmIG5vdCwgcmV3aW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb3VyY2Ugc3RyZWFtIGFuZCBicmVhayBvdXQKKwkJCWlmKChieXRlUG9zICsgMSkgPj0gYnl0ZUJ1ZmZlckxpbWl0KSAKKwkJCSAgICB7IC0tdWNQb3M7IGJyZWFrIG1haW5Mb29wOyB9CisKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSAoU1FVT1RFMCArIHdoaWNoV2luZG93KTsKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSAKKwkJCSAgICAoY3VyVUMgLSBmT2Zmc2V0c1t3aGljaFdpbmRvd10gCisJCQkgICAgICsgQ09NUFJFU1NJT05PRkZTRVQpOworCQkgICAgfQorCQl9CisKKwkJLy8gaWYgYSBzdGF0aWMgd2luZG93IGlzIGRlZmluZWQsIGFuZCB0aGUgZm9sbG93aW5nCisJCS8vIGNoYXJhY3RlciBpcyBub3QgaW4gdGhhdCBzdGF0aWMgd2luZG93LCBxdW90ZSBmcm9tCisJCS8vIHRoZSBzdGF0aWMgd2luZG93IE5vdGU6IHRvIHF1b3RlIGZyb20gYSBzdGF0aWMKKwkJLy8gd2luZG93LCBkb24ndCBhZGQgMHg4MAorCQllbHNlIGlmKCh3aGljaFdpbmRvdyA9IGZpbmRTdGF0aWNXaW5kb3coY3VyVUMpKSAKKwkJCSE9IElOVkFMSURXSU5ET1cgCisJCQkmJiAhIGluU3RhdGljV2luZG93KG5leHRVQywgd2hpY2hXaW5kb3cpICkgeworCQkgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvIHdyaXRlIGJvdGgKKwkJICAgIC8vIGJ5dGVzIGlmIG5vdCwgcmV3aW5kIHRoZSBzb3VyY2Ugc3RyZWFtIGFuZAorCQkgICAgLy8gYnJlYWsgb3V0CisJCSAgICBpZigoYnl0ZVBvcyArIDEpID49IGJ5dGVCdWZmZXJMaW1pdCkgCisJCQl7IC0tdWNQb3M7IGJyZWFrIG1haW5Mb29wOyB9CisKKwkJICAgIGJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSAoU1FVT1RFMCArIHdoaWNoV2luZG93KTsKKwkJICAgIGJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSAKKwkJCShjdXJVQyAtIHNPZmZzZXRzW3doaWNoV2luZG93XSk7CisJCX0KKwkJCisJCS8vIGlmIGEgd2luZG93IGlzIG5vdCBkZWZpbmVkLCBkZWNpZGUgaWYgd2Ugd2FudCB0bworCQkvLyBkZWZpbmUgYSBuZXcgb25lIG9yIHN3aXRjaCB0byB1bmljb2RlIG1vZGUKKwkJZWxzZSB7CisJCSAgICAvLyBkZXRlcm1pbmUgaW5kZXggZm9yIGN1cnJlbnQgY2hhciAoY2hhciBpcyBjb21wcmVzc2libGUpCisJCSAgICBjdXJJbmRleCA9IG1ha2VJbmRleChjdXJVQyk7CisJCSAgICBmSW5kZXhDb3VudFtjdXJJbmRleF0rKzsKKworCQkgICAgLy8gbG9vayBhaGVhZAorCQkgICAgaWYoKHVjUG9zICsgMSkgPCBjaGFyQnVmZmVyTGltaXQpCisJCQlmb3J3YXJkVUMgPSBjaGFyQnVmZmVyW3VjUG9zICsgMV07CisJCSAgICBlbHNlCisJCQlmb3J3YXJkVUMgPSBJTlZBTElEQ0hBUjsKKworCQkgICAgLy8gaWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCB0aGlzIGluZGV4IGF0IGxlYXN0IG9uY2UKKwkJICAgIC8vIGJlZm9yZSwgZGVmaW5lIGEgbmV3IHdpbmRvdworCQkgICAgLy8gT1IKKwkJICAgIC8vIHRocmVlIGNoYXJzIGluIGEgcm93IHdpdGggc2FtZSBpbmRleCwgZGVmaW5lIGEKKwkJICAgIC8vIG5ldyB3aW5kb3cgKG1ha2VJbmRleCB3aWxsIHJldHVybiBSRVNFUlZFRElOREVYCisJCSAgICAvLyBmb3IgSU5WQUxJRENIQVIpCisJCSAgICBpZigoZkluZGV4Q291bnRbY3VySW5kZXhdID4gMSkgfHwKKwkJICAgICAgIChjdXJJbmRleCA9PSBtYWtlSW5kZXgobmV4dFVDKSAKKwkJCSYmIGN1ckluZGV4ID09IG1ha2VJbmRleChmb3J3YXJkVUMpKSkgeworCQkJLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvIHdyaXRlIGFsbAorCQkJLy8gdGhyZWUgYnl0ZXMgaWYgbm90LCByZXdpbmQgdGhlIHNvdXJjZQorCQkJLy8gc3RyZWFtIGFuZCBicmVhayBvdXQKKwkJCWlmKCAoYnl0ZVBvcyArIDIpID49IGJ5dGVCdWZmZXJMaW1pdCkgCisJCQkgICAgeyAtLXVjUG9zOyBicmVhayBtYWluTG9vcDsgfQorCisJCQkvLyBnZXQgbGVhc3QgcmVjZW50bHkgZGVmaW5lZCB3aW5kb3cKKwkJCXdoaWNoV2luZG93ID0gZ2V0TFJEZWZpbmVkV2luZG93KCk7CisKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKShTREVGSU5FMCArIHdoaWNoV2luZG93KTsKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBjdXJJbmRleDsKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSAKKwkJCSAgICAoY3VyVUMgLSBzT2Zmc2V0VGFibGVbY3VySW5kZXhdIAorCQkJICAgICArIENPTVBSRVNTSU9OT0ZGU0VUKTsKKworCQkJZk9mZnNldHNbd2hpY2hXaW5kb3ddID0gc09mZnNldFRhYmxlW2N1ckluZGV4XTsKKwkJCWZDdXJyZW50V2luZG93ID0gd2hpY2hXaW5kb3c7CisJCQlmVGltZVN0YW1wcyBbd2hpY2hXaW5kb3ddID0gKytmVGltZVN0YW1wOworCQkgICAgfQorCisJCSAgICAvLyBvbmx5IHR3byBjaGFycyBpbiBhIHJvdyB3aXRoIHNhbWUgaW5kZXgsIHNvCisJCSAgICAvLyBzd2l0Y2ggdG8gdW5pY29kZSBtb2RlIChtYWtlSW5kZXggd2lsbCByZXR1cm4KKwkJICAgIC8vIFJFU0VSVkVESU5ERVggZm9yIElOVkFMSURDSEFSKQorCQkgICAgLy8gT1IKKwkJICAgIC8vIHRocmVlIGNoYXJzIGhhdmUgZGlmZmVyZW50IGluZGljZXMsIHNvIHN3aXRjaAorCQkgICAgLy8gdG8gdW5pY29kZSBtb2RlCisJCSAgICBlbHNlIHsKKwkJCS8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0byB3cml0ZSBhbGwKKwkJCS8vIGZvdXIgYnl0ZXMgaWYgbm90LCByZXdpbmQgdGhlIHNvdXJjZSBzdHJlYW0KKwkJCS8vIGFuZCBicmVhayBvdXQKKwkJCWlmKChieXRlUG9zICsgMykgPj0gYnl0ZUJ1ZmZlckxpbWl0KSAKKwkJCSAgICB7IC0tdWNQb3M7IGJyZWFrIG1haW5Mb29wOyB9CisKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBTQ0hBTkdFVTsKKworCQkJaGlCeXRlID0gY3VyVUMgPj4+IDg7CisJCQlsb0J5dGUgPSBjdXJVQyAmIDB4RkY7CisKKwkJCWlmKHNVbmljb2RlVGFnVGFibGVbaGlCeXRlXSkKKwkJCSAgICAvLyBhZGQgcXVvdGUgVW5pY29kZSB0YWcKKwkJCSAgICBieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgVVFVT1RFVTsgCisKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBoaUJ5dGU7CisJCQlieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgbG9CeXRlOworCisJCQlmTW9kZSA9IFVOSUNPREVNT0RFOworCQkJYnJlYWsgc2luZ2xlQnl0ZU1vZGVMb29wOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgICAgY2FzZSBVTklDT0RFTU9ERToKKwkJLy8gbWFpbiB1bmljb2RlIG1vZGUgY29tcHJlc3Npb24gbG9vcAorCSAgICB1bmljb2RlTW9kZUxvb3A6CisJICAgIHdoaWxlKHVjUG9zIDwgY2hhckJ1ZmZlckxpbWl0ICYmIGJ5dGVQb3MgPCBieXRlQnVmZmVyTGltaXQpIHsKKwkJLy8gZ2V0IGN1cnJlbnQgY2hhcgorCQljdXJVQyA9IGNoYXJCdWZmZXJbdWNQb3MrK107ICAgIAorCisJCS8vIGdldCBuZXh0IGNoYXIKKwkJaWYoIHVjUG9zIDwgY2hhckJ1ZmZlckxpbWl0ICkKKwkJICAgIG5leHRVQyA9IGNoYXJCdWZmZXJbdWNQb3NdOworCQllbHNlCisJCSAgICBuZXh0VUMgPSBJTlZBTElEQ0hBUjsKKworCQkvLyBpZiB3ZSBoYXZlIHR3byB1bmNvbXByZXNzaWJsZSBjaGFycyBpbiBhIHJvdywKKwkJLy8gcHV0IHRoZSBjdXJyZW50IGNoYXIncyBieXRlcyBpbiB0aGUgc3RyZWFtCisJCWlmKCAhIGlzQ29tcHJlc3NpYmxlKGN1clVDKSAKKwkJICAgIHx8IChuZXh0VUMgIT0gSU5WQUxJRENIQVIgJiYgISBpc0NvbXByZXNzaWJsZShuZXh0VUMpKSkgeworCQkgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvIHdyaXRlIGFsbCB0aHJlZSBieXRlcworCQkgICAgLy8gaWYgbm90LCByZXdpbmQgdGhlIHNvdXJjZSBzdHJlYW0gYW5kIGJyZWFrIG91dAorCQkgICAgaWYoIChieXRlUG9zICsgMikgPj0gYnl0ZUJ1ZmZlckxpbWl0KSAKKwkJCXsgLS11Y1BvczsgYnJlYWsgbWFpbkxvb3A7IH0KKworCQkgICAgaGlCeXRlID0gY3VyVUMgPj4+IDg7CisJCSAgICBsb0J5dGUgPSBjdXJVQyAmIDB4RkY7CisKKwkJICAgIGlmKHNVbmljb2RlVGFnVGFibGVbIGhpQnl0ZSBdKQorCQkJLy8gYWRkIHF1b3RlIFVuaWNvZGUgdGFnCisJCQlieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgVVFVT1RFVTsKKyAgICAgICAgICAgICAgICAKKwkJICAgIGJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBoaUJ5dGU7CisJCSAgICBieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgbG9CeXRlOworICAgICAgICB9CisJCQorCQkvLyBieXRlcyBsZXNzIHRoYW4gMHg4MCBjYW4gZ28gc3RyYWlnaHQgaW4gdGhlIHN0cmVhbSwKKwkJLy8gYnV0IGluIHNpbmdsZS1ieXRlIG1vZGUKKwkJZWxzZSBpZihjdXJVQyA8IDB4MDA4MCkgeworCQkgICAgbG9CeXRlID0gY3VyVUMgJiAweEZGOworCisJCSAgICAvLyBpZiB0d28gY2hhcnMgaW4gYSByb3cgYmVsb3cgMHg4MCBhbmQgdGhlCisJCSAgICAvLyBjdXJyZW50IGNoYXIgaXMgbm90IGEgc2luZ2xlLWJ5dGUgbW9kZSB0YWcsCisJCSAgICAvLyBzd2l0Y2ggdG8gc2luZ2xlLWJ5dGUgbW9kZQorCQkgICAgaWYobmV4dFVDICE9IElOVkFMSURDSEFSIAorCQkgICAgICAgJiYgbmV4dFVDIDwgMHgwMDgwICYmICEgc1NpbmdsZVRhZ1RhYmxlWyBsb0J5dGUgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIGJvdGggYnl0ZXMgaWYgbm90LCByZXdpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBzdHJlYW0gYW5kIGJyZWFrIG91dAorCQkJaWYoIChieXRlUG9zICsgMSkgPj0gYnl0ZUJ1ZmZlckxpbWl0KSAKKwkJCSAgICB7IC0tdWNQb3M7IGJyZWFrIG1haW5Mb29wOyB9CisKKwkJCS8vIHVzZSB0aGUgbGFzdC1hY3RpdmUgd2luZG93CisJCQl3aGljaFdpbmRvdyA9IGZDdXJyZW50V2luZG93OworCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpKFVDSEFOR0UwICsgd2hpY2hXaW5kb3cpOworCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIGxvQnl0ZTsKKworCQkJLy9mQ3VycmVudFdpbmRvdyA9IDA7CisJCQlmVGltZVN0YW1wcyBbd2hpY2hXaW5kb3ddID0gKytmVGltZVN0YW1wOworCQkJZk1vZGUgPSBTSU5HTEVCWVRFTU9ERTsKKwkJCWJyZWFrIHVuaWNvZGVNb2RlTG9vcDsKKwkJICAgIH0KKworCQkgICAgLy8gb3RoZXJ3aXNlLCBqdXN0IHdyaXRlIHRoZSBieXRlcyB0byB0aGUgc3RyZWFtCisJCSAgICAvLyAodGhpcyB3aWxsIGNvdmVyIHRoZSBjYXNlIG9mIG9ubHkgMSBjaGFyIGxlc3MgdGhhbiAweDgwCisJCSAgICAvLyBhbmQgc2luZ2xlLWJ5dGUgbW9kZSB0YWdzKQorCQkgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cml0ZSBib3RoIGJ5dGVzIGlmIG5vdCwgcmV3aW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb3VyY2Ugc3RyZWFtIGFuZCBicmVhayBvdXQKKwkJCWlmKChieXRlUG9zICsgMSkgPj0gYnl0ZUJ1ZmZlckxpbWl0KSAKKwkJCSAgICB7IC0tdWNQb3M7IGJyZWFrIG1haW5Mb29wOyB9CisKKwkJCS8vIHNpbmNlIHRoZSBjaGFyYWN0ZXIgaXMgbGVzcyB0aGFuIDB4ODAsIHRoZQorCQkJLy8gaGlnaCBieXRlIGlzIGFsd2F5cyAweDAwIC0gbm8gbmVlZCBmb3IKKwkJCS8vIChjdXJVQyA+Pj4gOCkKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSAweDAwOworCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIGxvQnl0ZTsKKwkJICAgIH0KKwkJfQorCisJCS8vIGZpZ3VyZSBvdXQgaWYgdGhlIGN1cnJlbnQgY2hhciBpcyBpbiBhIGRlZmluZWQgd2luZG93CisJCWVsc2UgaWYoKHdoaWNoV2luZG93ID0gZmluZER5bmFtaWNXaW5kb3coY3VyVUMpKSAKKwkJCSE9IElOVkFMSURXSU5ET1cgKSB7CisJCSAgICAvLyBpZiB0d28gY2hhcnMgaW4gYSByb3cgaW4gdGhlIHNhbWUgd2luZG93LAorCQkgICAgLy8gc3dpdGNoIHRvIHRoYXQgd2luZG93IGFuZCBnbyB0byBzaW5nbGUtYnl0ZSBtb2RlCisJCSAgICAvLyBpbkR5bmFtaWNXaW5kb3cgd2lsbCByZXR1cm4gZmFsc2UgZm9yIElOVkFMSURDSEFSCisJCSAgICBpZihpbkR5bmFtaWNXaW5kb3cobmV4dFVDLCB3aGljaFdpbmRvdykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIGJvdGggYnl0ZXMgaWYgbm90LCByZXdpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBzdHJlYW0gYW5kIGJyZWFrIG91dAorCQkJaWYoKGJ5dGVQb3MgKyAxKSA+PSBieXRlQnVmZmVyTGltaXQpIAorCQkJICAgIHsgLS11Y1BvczsgYnJlYWsgbWFpbkxvb3A7IH0KKworCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpKFVDSEFOR0UwICsgd2hpY2hXaW5kb3cpOworCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIAorCQkJICAgIChjdXJVQyAtIGZPZmZzZXRzW3doaWNoV2luZG93XSAKKwkJCSAgICAgKyBDT01QUkVTU0lPTk9GRlNFVCk7CisKKwkJCWZUaW1lU3RhbXBzIFsgd2hpY2hXaW5kb3cgXSA9ICsrZlRpbWVTdGFtcDsKKwkJCWZDdXJyZW50V2luZG93ID0gd2hpY2hXaW5kb3c7CisJCQlmTW9kZSA9IFNJTkdMRUJZVEVNT0RFOworCQkJYnJlYWsgdW5pY29kZU1vZGVMb29wOworCQkgICAgfQorCisJCSAgICAvLyBvdGhlcndpc2UsIGp1c3QgcXVvdGUgdGhlIHVuaWNvZGUgZm9yIHRoZSBjaGFyCisJCSAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIGFsbCB0aHJlZSBieXRlcyBpZiBub3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJld2luZCB0aGUgc291cmNlIHN0cmVhbSBhbmQgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0CisJCQlpZigoYnl0ZVBvcyArIDIpID49IGJ5dGVCdWZmZXJMaW1pdCkgCisJCQkgICAgeyAtLXVjUG9zOyBicmVhayBtYWluTG9vcDsgfQorCisJCQloaUJ5dGUgPSBjdXJVQyA+Pj4gODsKKwkJCWxvQnl0ZSA9IGN1clVDICYgMHhGRjsKKworCQkJaWYoc1VuaWNvZGVUYWdUYWJsZVsgaGlCeXRlIF0pCisJCQkgICAgLy8gYWRkIHF1b3RlIFVuaWNvZGUgdGFnCisJCQkgICAgYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIFVRVU9URVU7CisKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBoaUJ5dGU7CisJCQlieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgbG9CeXRlOworCQkgICAgfQorCQl9CisJCQorCQkvLyBjaGFyIGlzIG5vdCBpbiBhIGRlZmluZWQgd2luZG93CisJCWVsc2UgeworCQkgICAgLy8gZGV0ZXJtaW5lIGluZGV4IGZvciBjdXJyZW50IGNoYXIgKGNoYXIgaXMgY29tcHJlc3NpYmxlKQorCQkgICAgY3VySW5kZXggPSBtYWtlSW5kZXgoY3VyVUMpOworCQkgICAgZkluZGV4Q291bnRbY3VySW5kZXhdKys7CisJCSAgICAKKwkJICAgIC8vIGxvb2sgYWhlYWQKKwkJICAgIGlmKCAodWNQb3MgKyAxKSA8IGNoYXJCdWZmZXJMaW1pdCApCisJCQlmb3J3YXJkVUMgPSBjaGFyQnVmZmVyW3VjUG9zICsgMV07CisJCSAgICBlbHNlCisJCQlmb3J3YXJkVUMgPSBJTlZBTElEQ0hBUjsKKwkJICAgIAorCQkgICAgLy8gaWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCB0aGlzIGluZGV4IGF0IGxlYXN0IG9uY2UKKwkJICAgIC8vIGJlZm9yZSwgZGVmaW5lIGEgbmV3IHdpbmRvdyBmb3IgaXQgdGhhdCBoYXNuJ3QKKwkJICAgIC8vIHByZXZpb3VzbHkgYmVlbiByZWRlZmluZWQKKwkJICAgIC8vIE9SCisJCSAgICAvLyBpZiB0aHJlZSBjaGFycyBpbiBhIHJvdyB3aXRoIHRoZSBzYW1lIGluZGV4LAorCQkgICAgLy8gZGVmaW5lIGEgbmV3IHdpbmRvdyAobWFrZUluZGV4IHdpbGwgcmV0dXJuCisJCSAgICAvLyBSRVNFUlZFRElOREVYIGZvciBJTlZBTElEQ0hBUikKKwkJICAgIGlmKChmSW5kZXhDb3VudFtjdXJJbmRleF0gPiAxKSB8fAorCQkgICAgICAgKGN1ckluZGV4ID09IG1ha2VJbmRleChuZXh0VUMpIAorCQkJJiYgY3VySW5kZXggPT0gbWFrZUluZGV4KGZvcndhcmRVQykpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cml0ZSBhbGwgdGhyZWUgYnl0ZXMgaWYgbm90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXdpbmQgdGhlIHNvdXJjZSBzdHJlYW0gYW5kIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dAorCQkJaWYoKGJ5dGVQb3MgKyAyKSA+PSBieXRlQnVmZmVyTGltaXQpIAorCQkJICAgIHsgLS11Y1BvczsgYnJlYWsgbWFpbkxvb3A7IH0KKworCQkJLy8gZ2V0IGxlYXN0IHJlY2VudGx5IGRlZmluZWQgd2luZG93CisJCQl3aGljaFdpbmRvdyA9IGdldExSRGVmaW5lZFdpbmRvdygpOworCisJCQlieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkoVURFRklORTAgKyB3aGljaFdpbmRvdyk7CisJCQlieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgY3VySW5kZXg7CisJCQlieXRlQnVmZmVyW2J5dGVQb3MrK10gPSAoYnl0ZSkgCisJCQkgICAgKGN1clVDIC0gc09mZnNldFRhYmxlW2N1ckluZGV4XSAKKwkJCSAgICAgKyBDT01QUkVTU0lPTk9GRlNFVCk7CisJCQkKKwkJCWZPZmZzZXRzW3doaWNoV2luZG93XSA9IHNPZmZzZXRUYWJsZVtjdXJJbmRleF07CisJCQlmQ3VycmVudFdpbmRvdyA9IHdoaWNoV2luZG93OworCQkJZlRpbWVTdGFtcHMgW3doaWNoV2luZG93XSA9ICsrZlRpbWVTdGFtcDsKKwkJCWZNb2RlID0gU0lOR0xFQllURU1PREU7CisJCQlicmVhayB1bmljb2RlTW9kZUxvb3A7CisJCSAgICB9CisJCSAgICAKKwkJICAgIC8vIG90aGVyd2lzZSBqdXN0IHF1b3RlIHRoZSB1bmljb2RlLCBhbmQgc2F2ZSBvdXIKKwkJICAgIC8vIHdpbmRvd3MgZm9yIGxvbmdlciBydW5zCisJCSAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIGFsbCB0aHJlZSBieXRlcyBpZiBub3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJld2luZCB0aGUgc291cmNlIHN0cmVhbSBhbmQgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0CisJCQlpZigoYnl0ZVBvcyArIDIpID49IGJ5dGVCdWZmZXJMaW1pdCkgCisJCQkgICAgeyAtLXVjUG9zOyBicmVhayBtYWluTG9vcDsgfQorCisJCQloaUJ5dGUgPSBjdXJVQyA+Pj4gODsKKwkJCWxvQnl0ZSA9IGN1clVDICYgMHhGRjsKKworCQkJaWYoc1VuaWNvZGVUYWdUYWJsZVsgaGlCeXRlIF0pCisJCQkgICAgLy8gYWRkIHF1b3RlIFVuaWNvZGUgdGFnCisJCQkgICAgYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIFVRVU9URVU7ICAKKwkJCQorCQkJYnl0ZUJ1ZmZlcltieXRlUG9zKytdID0gKGJ5dGUpIGhpQnl0ZTsKKwkJCWJ5dGVCdWZmZXJbYnl0ZVBvcysrXSA9IChieXRlKSBsb0J5dGU7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICB9ICAvLyBlbmQgc3dpdGNoCisJfQorCQorICAgICAgICAvLyBmaWxsIGluIG91dHB1dCBwYXJhbWV0ZXIKKwlpZihjaGFyc1JlYWQgIT0gbnVsbCkKKwkgICAgY2hhcnNSZWFkIFswXSA9ICh1Y1BvcyAtIGNoYXJCdWZmZXJTdGFydCk7CisgICAgICAgIAorICAgICAgICAvLyByZXR1cm4gIyBvZiBieXRlcyB3cml0dGVuCisgICAgICAgIHJldHVybiAoYnl0ZVBvcyAtIGJ5dGVCdWZmZXJTdGFydCk7CisgICAgfQorCisgICAgLyoqIAorICAgICAqIFJlc2V0IHRoZSBjb21wcmVzc29yIHRvIGl0cyBpbml0aWFsIHN0YXRlLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVzZXQoKQorICAgIHsKKwlpbnQgaTsKKworICAgICAgICAvLyByZXNldCBkeW5hbWljIHdpbmRvd3MKKyAgICAgICAgZk9mZnNldHNbMF0gPSAweDAwODA7ICAgIC8vIExhdGluLTEKKyAgICAgICAgZk9mZnNldHNbMV0gPSAweDAwQzA7ICAgIC8vIExhdGluLTEgU3VwcGxlbWVudCArIExhdGluIEV4dGVuZGVkLUEKKyAgICAgICAgZk9mZnNldHNbMl0gPSAweDA0MDA7ICAgIC8vIEN5cmlsbGljCisgICAgICAgIGZPZmZzZXRzWzNdID0gMHgwNjAwOyAgICAvLyBBcmFiaWMKKyAgICAgICAgZk9mZnNldHNbNF0gPSAweDA5MDA7ICAgIC8vIERldmFuYWdhcmkKKyAgICAgICAgZk9mZnNldHNbNV0gPSAweDMwNDA7ICAgIC8vIEhpcmFnYW5hCisgICAgICAgIGZPZmZzZXRzWzZdID0gMHgzMEEwOyAgICAvLyBLYXRha2FuYQorICAgICAgICBmT2Zmc2V0c1s3XSA9IDB4RkYwMDsgICAgLy8gRnVsbHdpZHRoIEFTQ0lJCisKKworICAgICAgICAvLyByZXNldCB0aW1lIHN0YW1wcworICAgICAgICBmb3IoaSA9IDA7IGkgPCBOVU1XSU5ET1dTOyBpKyspIHsKKyAgICAgICAgICAgIGZUaW1lU3RhbXBzW2ldICAgICAgICAgID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlc2V0IGNvdW50IG9mIHNlZW4gaW5kaWNlcworICAgICAgICBmb3IoaSA9IDA7IGkgPD0gTUFYSU5ERVg7IGkrKyApIHsKKyAgICAgICAgICAgIGZJbmRleENvdW50W2ldID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGZUaW1lU3RhbXAgICAgICA9IDA7ICAgICAgICAgICAgICAgIC8vIFJlc2V0IGN1cnJlbnQgdGltZSBzdGFtcAorICAgICAgICBmQ3VycmVudFdpbmRvdyAgPSAwOyAgICAgICAgICAgICAgICAvLyBNYWtlIGN1cnJlbnQgd2luZG93IExhdGluLTEKKyAgICAgICAgZk1vZGUgICAgICAgICAgID0gU0lOR0xFQllURU1PREU7ICAgLy8gQWx3YXlzIHN0YXJ0IGluIHNpbmdsZS1ieXRlIG1vZGUKKyAgICB9CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbmRleCBmb3IgYSBjaGFyYWN0ZXIKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgdGhlIGluZGV4IHZhbHVlIGZvciBhIGNoYXJhY3Rlci4KKyAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGZ1bmN0aW9uLCByZWZlciB0byB0YWJsZSBYLTMKKyAgICAgKiA8QSBIUkVGPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjYiPlVUUjY8L0E+LgorICAgICAqIEBwYXJhbSBjIFRoZSBjaGFyYWN0ZXIgaW4gcXVlc3Rpb24uCisgICAgICogQHJldHVybiBBbiBpbmRleCBmb3IgYworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBtYWtlSW5kZXgoaW50IGMpCisgICAgeworICAgICAgICAvLyBjaGVjayB0aGUgcHJlZGVmaW5lZCBpbmRpY2VzCisgICAgICAgIGlmKGMgPj0gMHgwMEMwICYmIGMgPCAweDAxNDApCisgICAgICAgICAgICByZXR1cm4gTEFUSU5JTkRFWDsKKyAgICAgICAgZWxzZSBpZihjID49IDB4MDI1MCAmJiBjIDwgMHgwMkQwKQorICAgICAgICAgICAgcmV0dXJuIElQQUVYVEVOU0lPTklOREVYOworICAgICAgICBlbHNlIGlmKGMgPj0gMHgwMzcwICYmIGMgPCAweDAzRjApCisgICAgICAgICAgICByZXR1cm4gR1JFRUtJTkRFWDsKKyAgICAgICAgZWxzZSBpZihjID49IDB4MDUzMCAmJiBjIDwgMHgwNTkwKQorICAgICAgICAgICAgcmV0dXJuIEFSTUVOSUFOSU5ERVg7CisgICAgICAgIGVsc2UgaWYoYyA+PSAweDMwNDAgJiYgYyA8IDB4MzBBMCkKKyAgICAgICAgICAgIHJldHVybiBISVJBR0FOQUlOREVYOworICAgICAgICBlbHNlIGlmKGMgPj0gMHgzMEEwICYmIGMgPCAweDMxMjApCisgICAgICAgICAgICByZXR1cm4gS0FUQUtBTkFJTkRFWDsKKyAgICAgICAgZWxzZSBpZihjID49IDB4RkY2MCAmJiBjIDwgMHhGRjlGKQorICAgICAgICAgICAgcmV0dXJuIEhBTEZXSURUSEtBVEFLQU5BSU5ERVg7CisKKyAgICAgICAgLy8gY2FsY3VsYXRlIGluZGV4CisgICAgICAgIGVsc2UgaWYoYyA+PSAweDAwODAgJiYgYyA8IDB4MzQwMCkKKyAgICAgICAgICAgIHJldHVybiAoYyAvIDB4ODApICYgMHhGRjsKKyAgICAgICAgZWxzZSBpZihjID49IDB4RTAwMCAmJiBjIDw9IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAoKGMgLSAweEFDMDApIC8gMHg4MCkgJiAweEZGOworICAgICAgICAgICAgCisgICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW4KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUkVTRVJWRURJTkRFWDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBDaGVjayBpZiBhIGdpdmVuIGNoYXJhY3RlciBmaXRzIGluIGEgd2luZG93CisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgKiBEZXRlcm1pbmUgaWYgYSBjaGFyYWN0ZXIgaXMgaW4gYSBkeW5hbWljIHdpbmRvdy4KKyAgICAqIEBwYXJhbSBjIFRoZSBjaGFyYWN0ZXIgdG8gdGVzdAorICAgICogQHBhcmFtIHdoaWNoV2luZG93IFRoZSBkeW5hbWljIHdpbmRvdyB0aGUgdGVzdAorICAgICogQHJldHVybiB0cnVlIGlmIDxUVD5jPC9UVD4gd2lsbCBmaXQgaW4gPFRUPndoaWNoV2luZG93PC9UVD4sIAorICAgICogZmFsc2Ugb3RoZXJ3aXNlLgorICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGluRHluYW1pY1dpbmRvdyhpbnQgYywgCisJCQkJICAgIGludCB3aGljaFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiAoYyA+PSBmT2Zmc2V0c1t3aGljaFdpbmRvd10gCisJCSYmIGMgPCAoZk9mZnNldHNbd2hpY2hXaW5kb3ddICsgMHg4MCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZSBpZiBhIGNoYXJhY3RlciBpcyBpbiBhIHN0YXRpYyB3aW5kb3cuCisgICAgKiBAcGFyYW0gYyBUaGUgY2hhcmFjdGVyIHRvIHRlc3QKKyAgICAqIEBwYXJhbSB3aGljaFdpbmRvdyBUaGUgc3RhdGljIHdpbmRvdyB0aGUgdGVzdAorICAgICogQHJldHVybiB0cnVlIGlmIDxUVD5jPC9UVD4gd2lsbCBmaXQgaW4gPFRUPndoaWNoV2luZG93PC9UVD4sIAorICAgICogZmFsc2Ugb3RoZXJ3aXNlLgorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpblN0YXRpY1dpbmRvdyhpbnQgYywgCisJCQkJCSAgaW50IHdoaWNoV2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChjID49IHNPZmZzZXRzW3doaWNoV2luZG93XQorCQkmJiBjIDwgKHNPZmZzZXRzW3doaWNoV2luZG93XSArIDB4ODApKTsKKyAgICB9CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gQ2hlY2sgaWYgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgY29tcHJlc3NpYmxlCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgKiBEZXRlcm1pbmUgaWYgYSBjaGFyYWN0ZXIgaXMgY29tcHJlc3NpYmxlLgorICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciB0byB0ZXN0LgorICAgICogQHJldHVybiB0cnVlIGlmIHRoZSA8VFQ+YzwvVFQ+IGlzIGNvbXByZXNzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbXByZXNzaWJsZShpbnQgYykKKyAgICB7CisgICAgICAgIHJldHVybiAoYyA8IDB4MzQwMCB8fCBjID49IDB4RTAwMCk7CisgICAgfQorCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIENoZWNrIGlmIGEgd2luZG93IGlzIGRlZmluZWQgZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lIGlmIGEgZHluYW1pYyB3aW5kb3cgZm9yIGEgY2VydGFpbiBjaGFyYWN0ZXIgaXMgZGVmaW5lZAorICAgICAqIEBwYXJhbSBjIFRoZSBjaGFyYWN0ZXIgaW4gcXVlc3Rpb24KKyAgICAgKiBAcmV0dXJuIFRoZSBkeW5hbWljIHdpbmRvdyBjb250YWluaW5nIDxUVD5jPC9UVD4sIG9yIAorICAgICAqIElOVkFMSURXSU5ET1cgaWYgbm90IGRlZmluZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZmluZER5bmFtaWNXaW5kb3coaW50IGMpCisgICAgeworCS8vIHN1cHBvc2VkbHkgZmFzdGVyIHRvIGNvdW50IGRvd24KKyAgICAgICAgLy9mb3IoaW50IGkgPSAwOyBpIDwgTlVNV0lORE9XUzsgaSsrKSB7CisJZm9yKGludCBpID0gTlVNV0lORE9XUyAtIDE7IGkgPj0gMDsgLS1pKSB7CisJICAgIGlmKGluRHluYW1pY1dpbmRvdyhjLCBpKSkgeworCQkrK2ZUaW1lU3RhbXBzW2ldOworICAgICAgICAgICAgICAgIHJldHVybiBpOworCSAgICB9CisJfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIElOVkFMSURXSU5ET1c7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lIGlmIGEgc3RhdGljIHdpbmRvdyBmb3IgYSBjZXJ0YWluIGNoYXJhY3RlciBpcyBkZWZpbmVkCisgICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciBpbiBxdWVzdGlvbgorICAgICAqIEByZXR1cm4gVGhlIHN0YXRpYyB3aW5kb3cgY29udGFpbmluZyA8VFQ+YzwvVFQ+LCBvciAKKyAgICAgKiBJTlZBTElEV0lORE9XIGlmIG5vdCBkZWZpbmVkLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBmaW5kU3RhdGljV2luZG93KGludCBjKQorICAgIHsKKwkvLyBzdXBwb3NlZGx5IGZhc3RlciB0byBjb3VudCBkb3duCisgICAgICAgIC8vZm9yKGludCBpID0gMDsgaSA8IE5VTVNUQVRJQ1dJTkRPV1M7IGkrKykgeworCWZvcihpbnQgaSA9IE5VTVNUQVRJQ1dJTkRPV1MgLSAxOyBpID49IDA7IC0taSkgeworCSAgICBpZihpblN0YXRpY1dpbmRvdyhjLCBpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworCSAgICB9CisJfQorCQorICAgICAgICByZXR1cm4gSU5WQUxJRFdJTkRPVzsKKyAgICB9CisgICAgCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIEZpbmQgdGhlIGxlYXN0LXJlY2VudGx5IHVzZWQgd2luZG93CisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqIEZpbmQgdGhlIGxlYXN0LXJlY2VudGx5IGRlZmluZWQgd2luZG93ICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0TFJEZWZpbmVkV2luZG93KCkKKyAgICB7CisgICAgICAgIGludCBsZWFzdFJVICAgICAgICAgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKyAgICAgICAgaW50IHdoaWNoV2luZG93ICAgICA9IElOVkFMSURXSU5ET1c7CisKKyAgICAgICAgLy8gZmluZCBsZWFzdCByZWNlbnRseSB1c2VkIHdpbmRvdworICAgICAgICAvLyBzdXBwb3NlZGx5IGZhc3RlciB0byBjb3VudCBkb3duCisgICAgICAgIC8vZm9yKCBpbnQgaSA9IDA7IGkgPCBOVU1XSU5ET1dTOyBpKysgKSB7CisgICAgICAgIGZvcihpbnQgaSA9IE5VTVdJTkRPV1MgLSAxOyBpID49IDA7IC0taSApIHsKKyAgICAgICAgICAgIGlmKCBmVGltZVN0YW1wc1tpXSA8IGxlYXN0UlUgKSB7CisgICAgICAgICAgICAgICAgbGVhc3RSVSAgID0gZlRpbWVTdGFtcHNbaV07CisgICAgICAgICAgICAgICAgd2hpY2hXaW5kb3cgID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB3aGljaFdpbmRvdzsKKyAgICB9CisgICAgCit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZURlY29tcHJlc3Nvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZURlY29tcHJlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllNTg0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlRGVjb21wcmVzc29yLmphdmEKQEAgLTAsMCArMSw1NjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVEZWNvbXByZXNzb3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wMyAyMjowMzo1OSAkIAorICogJFJldmlzaW9uOiAxLjQgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworLyoqCisqIEEgZGVjb21wcmVzc2lvbiBlbmdpbmUgaW1wbGVtZW50aW5nIHRoZSBTdGFuZGFyZCBDb21wcmVzc2lvbiBTY2hlbWUKKyogZm9yIFVuaWNvZGUgKFNDU1UpIGFzIG91dGxpbmVkIGluIDxBCisqIEhSRUY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyNiI+VW5pY29kZSBUZWNobmljYWwKKyogUmVwb3J0ICM2PC9BPi4KKyoKKyogPFA+PFNUUk9ORz5VU0FHRTwvU1RST05HPjwvUD4KKyoKKyogPFA+VGhlIHN0YXRpYyBtZXRob2RzIG9uIDxUVD5Vbmljb2RlRGVjb21wcmVzc29yPC9UVD4gbWF5IGJlIHVzZWQgaW4gYQorKiBzdHJhaWdodGZvcndhcmQgbWFubmVyIHRvIGRlY29tcHJlc3Mgc2ltcGxlIHN0cmluZ3M6PC9QPgorKgorKiA8UFJFPgorKiAgYnl0ZSBbXSBjb21wcmVzc2VkID0gLi4uIDsgLy8gZ2V0IGNvbXByZXNzZWQgYnl0ZXMgZnJvbSBzb21ld2hlcmUKKyogIFN0cmluZyByZXN1bHQgPSBVbmljb2RlRGVjb21wcmVzc29yLmRlY29tcHJlc3MoY29tcHJlc3NlZCk7CisqIDwvUFJFPgorKgorKiA8UD5UaGUgc3RhdGljIG1ldGhvZHMgaGF2ZSBhIGZhaXJseSBsYXJnZSBtZW1vcnkgZm9vdHByaW50LgorKiBGb3IgZmluZXItZ3JhaW5lZCBjb250cm9sIG92ZXIgbWVtb3J5IHVzYWdlLCAKKyogPFRUPlVuaWNvZGVEZWNvbXByZXNzb3I8L1RUPiBvZmZlcnMgbW9yZSBwb3dlcmZ1bCBBUElzIGFsbG93aW5nCisqIGl0ZXJhdGl2ZSBkZWNvbXByZXNzaW9uOjwvUD4KKyoKKyogPFBSRT4KKyogIC8vIERlY29tcHJlc3MgYW4gYXJyYXkgImJ5dGVzIiBvZiBsZW5ndGggImxlbiIgdXNpbmcgYSBidWZmZXIgb2YgNTEyIGNoYXJzCisqICAvLyB0byB0aGUgV3JpdGVyICJvdXQiCisqCisqICBVbmljb2RlRGVjb21wcmVzc29yIG15RGVjb21wcmVzc29yICAgICAgICAgPSBuZXcgVW5pY29kZURlY29tcHJlc3NvcigpOworKiAgZmluYWwgc3RhdGljIGludCAgICBCVUZTSVpFICAgICAgICAgICAgICAgID0gNTEyOworKiAgY2hhciBbXSAgICAgICAgICAgICBjaGFyQnVmZmVyICAgICAgICAgICAgID0gbmV3IGNoYXIgWyBCVUZTSVpFIF07CisqICBpbnQgICAgICAgICAgICAgICAgIGNoYXJzV3JpdHRlbiAgICAgICAgICAgPSAwOworKiAgaW50IFtdICAgICAgICAgICAgICBieXRlc1JlYWQgICAgICAgICAgICAgID0gbmV3IGludCBbMV07CisqICBpbnQgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXNEZWNvbXByZXNzZWQgPSAwOworKiAgaW50ICAgICAgICAgICAgICAgICB0b3RhbENoYXJzV3JpdHRlbiAgICAgID0gMDsKKyoKKyogIGRvIHsKKyogICAgLy8gZG8gdGhlIGRlY29tcHJlc3Npb24KKyogICAgY2hhcnNXcml0dGVuID0gbXlEZWNvbXByZXNzb3IuZGVjb21wcmVzcyhieXRlcywgdG90YWxCeXRlc0RlY29tcHJlc3NlZCwgCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLCBieXRlc1JlYWQsCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckJ1ZmZlciwgMCwgQlVGU0laRSk7CisqCisqICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBjdXJyZW50IHNldCBvZiBjaGFycworKiAgICBvdXQud3JpdGUoY2hhckJ1ZmZlciwgMCwgY2hhcnNXcml0dGVuKTsKKyoKKyogICAgLy8gdXBkYXRlIHRoZSBuby4gb2YgYnl0ZXMgZGVjb21wcmVzc2VkCisqICAgIHRvdGFsQnl0ZXNEZWNvbXByZXNzZWQgKz0gYnl0ZXNSZWFkWzBdOworKgorKiAgICAvLyB1cGRhdGUgdGhlIG5vLiBvZiBjaGFycyB3cml0dGVuCisqICAgIHRvdGFsQ2hhcnNXcml0dGVuICs9IGNoYXJzV3JpdHRlbjsKKyoKKyogIH0gd2hpbGUodG90YWxCeXRlc0RlY29tcHJlc3NlZCA8IGxlbik7CisqCisqICBteURlY29tcHJlc3Nvci5yZXNldCgpOyAvLyByZXVzZSBkZWNvbXByZXNzb3IKKyogPC9QUkU+CisqCisqIDxQPkRlY29tcHJlc3Npb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQgc2V0IGZvcnRoIGluIAorKiA8QSBIUkVGPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjYiPlVuaWNvZGUgVGVjaG5pY2FsIAorKiBSZXBvcnQgIzY8L0E+PC9QPgorKgorKiBAc2VlIFVuaWNvZGVDb21wcmVzc29yCisqCisqIEBhdXRob3IgU3RlcGhlbiBGLiBCb290aAorKiBAZHJhZnQgSUNVIDIuNAorKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBVbmljb2RlRGVjb21wcmVzc29yIGltcGxlbWVudHMgU0NTVQoreworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBJbnN0YW5jZSB2YXJpYWJsZXMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgCisgICAgLyoqIEFsaWFzIHRvIGN1cnJlbnQgZHluYW1pYyB3aW5kb3cgKi8KKyAgICBwcml2YXRlIGludCAgICAgICBmQ3VycmVudFdpbmRvdyAgID0gMDsKKworICAgIC8qKiBEeW5hbWljIGNvbXByZXNzaW9uIHdpbmRvdyBvZmZzZXRzICovCisgICAgcHJpdmF0ZSBpbnQgW10gICAgZk9mZnNldHMgICAgICAgICA9IG5ldyBpbnQgWyBOVU1XSU5ET1dTIF07CisKKyAgICAvKiogQ3VycmVudCBjb21wcmVzc2lvbiBtb2RlICovCisgICAgcHJpdmF0ZSBpbnQgICAgICAgZk1vZGUgICAgICAgICAgICA9IFNJTkdMRUJZVEVNT0RFOworCisgICAgLyoqIFNpemUgb2Ygb3VyIGludGVybmFsIGJ1ZmZlciAqLworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBCVUZTSVpFICAgPSAzOworCisgICAgLyoqIEludGVybmFsIGJ1ZmZlciBmb3Igc2F2aW5nIHN0YXRlICovCisgICAgcHJpdmF0ZSBieXRlIFtdICAgZkJ1ZmZlciAgICAgICAgICA9IG5ldyBieXRlIFtCVUZTSVpFXTsKKworICAgIC8qKiBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBvdXIgaW50ZXJuYWwgYnVmZmVyICovCisgICAgcHJpdmF0ZSBpbnQgICAgICAgZkJ1ZmZlckxlbmd0aCAgICA9IDA7CisgICAgCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBVbmljb2RlRGVjb21wcmVzc29yLgorICAgICAqIFNldHMgYWxsIHdpbmRvd3MgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICogQHNlZSAjcmVzZXQKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlRGVjb21wcmVzc29yKCkKKyAgICB7CisJcmVzZXQoKTsgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdG8gZGVmYXVsdHMKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNvbXByZXNzIGEgYnl0ZSBhcnJheSBpbnRvIGEgU3RyaW5nLgorICAgICAqIEBwYXJhbSBidWZmZXIgVGhlIGJ5dGUgYXJyYXkgdG8gZGVjb21wcmVzcy4KKyAgICAgKiBAcmV0dXJuIEEgU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBjaGFyYWN0ZXJzLgorICAgICAqIEBzZWUgI2RlY29tcHJlc3MoYnl0ZSBbXSwgaW50LCBpbnQpCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBkZWNvbXByZXNzKGJ5dGUgW10gYnVmZmVyKQorICAgIHsKKwljaGFyIFtdIGJ1ZiA9IGRlY29tcHJlc3MoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKTsKKwlyZXR1cm4gbmV3IFN0cmluZyhidWYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlY29tcHJlc3MgYSBieXRlIGFycmF5IGludG8gYSBVbmljb2RlIGNoYXJhY3RlciBhcnJheS4KKyAgICAgKiBAcGFyYW0gYnVmZmVyIFRoZSBieXRlIGFycmF5IHRvIGRlY29tcHJlc3MuCisgICAgICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgYnl0ZSBydW4gdG8gZGVjb21wcmVzcy4KKyAgICAgKiBAcGFyYW0gbGltaXQgVGhlIGxpbWl0IG9mIHRoZSBieXRlIHJ1biB0byBkZWNvbXByZXNzLgorICAgICAqIEByZXR1cm4gQSBjaGFyYWN0ZXIgYXJyYXkgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIGJ5dGVzLgorICAgICAqIEBzZWUgI2RlY29tcHJlc3MoYnl0ZSBbXSkKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2hhciBbXSBkZWNvbXByZXNzKGJ5dGUgW10gYnVmZmVyLAorCQkJCSAgICAgaW50IHN0YXJ0LAorCQkJCSAgICAgaW50IGxpbWl0KQorICAgIHsKKwlVbmljb2RlRGVjb21wcmVzc29yIGNvbXAgPSBuZXcgVW5pY29kZURlY29tcHJlc3NvcigpOworCisJLy8gdXNlIGEgYnVmZmVyIHdlIGtub3cgd2lsbCBuZXZlciBvdmVyZmxvdworCS8vIGluIHRoZSB3b3JzdCBjYXNlLCBlYWNoIGJ5dGUgd2lsbCBkZWNvbXByZXNzCisJLy8gdG8gYSBzdXJyb2dhdGUgcGFpciAoYnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgMiBjaGFycykKKwlpbnQgbGVuID0gTWF0aC5tYXgoMiwgMiAqIChsaW1pdCAtIHN0YXJ0KSk7CisJY2hhciBbXSB0ZW1wID0gbmV3IGNoYXIgW2xlbl07CisKKwlpbnQgY2hhckNvdW50ID0gY29tcC5kZWNvbXByZXNzKGJ1ZmZlciwgc3RhcnQsIGxpbWl0LCBudWxsLCAKKwkJCQkJdGVtcCwgMCwgbGVuKTsKKworCWNoYXIgW10gcmVzdWx0ID0gbmV3IGNoYXIgW2NoYXJDb3VudF07CisJU3lzdGVtLmFycmF5Y29weSh0ZW1wLCAwLCByZXN1bHQsIDAsIGNoYXJDb3VudCk7CisJcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRGVjb21wcmVzcyBhIGJ5dGUgYXJyYXkgaW50byBhIFVuaWNvZGUgY2hhcmFjdGVyIGFycmF5LgorICAgICAqCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGVpdGhlciBjb21wbGV0ZWx5IGZpbGwgdGhlIG91dHB1dCBidWZmZXIsIAorICAgICAqIG9yIGNvbnN1bWUgdGhlIGVudGlyZSBpbnB1dC4gIAorICAgICAqCisgICAgICogQHBhcmFtIGJ5dGVCdWZmZXIgVGhlIGJ5dGUgYnVmZmVyIHRvIGRlY29tcHJlc3MuCisgICAgICogQHBhcmFtIGJ5dGVCdWZmZXJTdGFydCBUaGUgc3RhcnQgb2YgdGhlIGJ5dGUgcnVuIHRvIGRlY29tcHJlc3MuCisgICAgICogQHBhcmFtIGJ5dGVCdWZmZXJMaW1pdCBUaGUgbGltaXQgb2YgdGhlIGJ5dGUgcnVuIHRvIGRlY29tcHJlc3MuCisgICAgICogQHBhcmFtIGJ5dGVzUmVhZCBBIG9uZS1lbGVtZW50IGFycmF5LiAgSWYgbm90IG51bGwsIG9uIHJldHVybgorICAgICAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIGJ5dGVCdWZmZXIuCisgICAgICogQHBhcmFtIGNoYXJCdWZmZXIgQSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZGVjb21wcmVzc2VkIGRhdGEuIAorICAgICAqIFRoaXMgYnVmZmVyIG11c3QgYmUgYXQgbWluaW11bSB0d28gY2hhcmFjdGVycyBpbiBzaXplLgorICAgICAqIEBwYXJhbSBjaGFyQnVmZmVyU3RhcnQgVGhlIHN0YXJ0aW5nIG9mZnNldCB0byB3aGljaCB0byB3cml0ZSAKKyAgICAgKiBkZWNvbXByZXNzZWQgZGF0YS4KKyAgICAgKiBAcGFyYW0gY2hhckJ1ZmZlckxpbWl0IFRoZSBsaW1pdGluZyBvZmZzZXQgZm9yIHdyaXRpbmcgCisgICAgICogZGVjb21wcmVzc2VkIGRhdGEuCisgICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyB3cml0dGVuIHRvIGNoYXJCdWZmZXIuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGRlY29tcHJlc3MoYnl0ZSBbXSAgICBieXRlQnVmZmVyLAorCQkJICBpbnQgICAgICAgIGJ5dGVCdWZmZXJTdGFydCwKKwkJCSAgaW50ICAgICAgICBieXRlQnVmZmVyTGltaXQsCisJCQkgIGludCBbXSAgICAgYnl0ZXNSZWFkLAorCQkJICBjaGFyIFtdICAgIGNoYXJCdWZmZXIsCisJCQkgIGludCAgICAgICAgY2hhckJ1ZmZlclN0YXJ0LAorCQkJICBpbnQgICAgICAgIGNoYXJCdWZmZXJMaW1pdCkKKyAgICB7CisJLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHNvdXJjZSBieXRlIGJ1ZmZlcgorCWludCBieXRlUG9zICAgICAgPSBieXRlQnVmZmVyU3RhcnQ7CisJCisJLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHRhcmdldCBjaGFyIGJ1ZmZlcgorCWludCB1Y1BvcyAgICAgICAgPSBjaGFyQnVmZmVyU3RhcnQ7CisgICAgICAgIAorICAgICAgICAvLyB0aGUgY3VycmVudCBieXRlIGZyb20gdGhlIHNvdXJjZSBidWZmZXIKKwlpbnQgYUJ5dGUgICAgICAgID0gMHgwMDsKKworCisJLy8gY2hhckJ1ZmZlciBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcnMgaW4gc2l6ZQorCWlmKGNoYXJCdWZmZXIubGVuZ3RoIDwgMiB8fCAoY2hhckJ1ZmZlckxpbWl0IC0gY2hhckJ1ZmZlclN0YXJ0KSA8IDIpCisJICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNoYXJCdWZmZXIubGVuZ3RoIDwgMiIpOworCQorCS8vIGlmIG91ciBpbnRlcm5hbCBidWZmZXIgaXNuJ3QgZW1wdHksIGZsdXNoIGl0cyBjb250ZW50cworCS8vIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGJlZm9yZSBkb2luZyBhbnkgbW9yZSBkZWNvbXByZXNzaW9uCisJaWYoZkJ1ZmZlckxlbmd0aCA+IDApIHsKKworCSAgICBpbnQgbmV3Qnl0ZXMgPSAwOworCisJICAgIC8vIGZpbGwgdGhlIGJ1ZmZlciBjb21wbGV0ZWx5LCB0byBndWFyYW50ZWUgb25lIGZ1bGwgY2hhcmFjdGVyCisJICAgIGlmKGZCdWZmZXJMZW5ndGggIT0gQlVGU0laRSkgeworCQluZXdCeXRlcyA9IGZCdWZmZXIubGVuZ3RoIC0gZkJ1ZmZlckxlbmd0aDsKKworCQkvLyB2ZXJpZnkgdGhlcmUgYXJlIG5ld0J5dGVzIGJ5dGVzIGluIGJ5dGVCdWZmZXIKKwkJaWYoYnl0ZUJ1ZmZlckxpbWl0IC0gYnl0ZUJ1ZmZlclN0YXJ0IDwgbmV3Qnl0ZXMpCisJCSAgICBuZXdCeXRlcyA9IGJ5dGVCdWZmZXJMaW1pdCAtIGJ5dGVCdWZmZXJTdGFydDsKKworCQlTeXN0ZW0uYXJyYXljb3B5KGJ5dGVCdWZmZXIsIGJ5dGVCdWZmZXJTdGFydCwgCisJCQkJIGZCdWZmZXIsIGZCdWZmZXJMZW5ndGgsIG5ld0J5dGVzKTsKKwkgICAgfQorCisJICAgIC8vIHJlc2V0IGJ1ZmZlciBsZW5ndGggdG8gMCBiZWZvcmUgcmVjdXJzaXZlIGNhbGwKKwkgICAgZkJ1ZmZlckxlbmd0aCA9IDA7CisKKwkgICAgLy8gY2FsbCBzZWxmIHJlY3Vyc2l2ZWx5IHRvIGRlY29tcHJlc3MgdGhlIGJ1ZmZlcgorCSAgICBpbnQgY291bnQgPSBkZWNvbXByZXNzKGZCdWZmZXIsIDAsIGZCdWZmZXIubGVuZ3RoLCBudWxsLAorCQkJCSAgIGNoYXJCdWZmZXIsIGNoYXJCdWZmZXJTdGFydCwgCisJCQkJICAgY2hhckJ1ZmZlckxpbWl0KTsKKworCSAgICAvLyB1cGRhdGUgdGhlIHBvc2l0aW9ucyBpbnRvIHRoZSBhcnJheXMKKwkgICAgdWNQb3MgKz0gY291bnQ7CisJICAgIGJ5dGVQb3MgKz0gbmV3Qnl0ZXM7CisJfQorCisgICAgICAgIC8vIHRoZSBtYWluIGRlY29tcHJlc3Npb24gbG9vcAorICAgIG1haW5Mb29wOgorCXdoaWxlKGJ5dGVQb3MgPCBieXRlQnVmZmVyTGltaXQgJiYgdWNQb3MgPCBjaGFyQnVmZmVyTGltaXQpIHsKKwkgICAgc3dpdGNoKGZNb2RlKSB7ICAKKwkgICAgY2FzZSBTSU5HTEVCWVRFTU9ERToKKwkJLy8gc2luZ2xlLWJ5dGUgbW9kZSBkZWNvbXByZXNzaW9uIGxvb3AKKwkgICAgc2luZ2xlQnl0ZU1vZGVMb29wOgorCSAgICB3aGlsZShieXRlUG9zIDwgYnl0ZUJ1ZmZlckxpbWl0ICYmIHVjUG9zIDwgY2hhckJ1ZmZlckxpbWl0KSB7CisJCWFCeXRlID0gYnl0ZUJ1ZmZlcltieXRlUG9zKytdICYgMHhGRjsKKwkJc3dpdGNoKGFCeXRlKSB7CisJCSAgICAvLyBBbGwgYnl0ZXMgZnJvbSAweDgwIHRocm91Z2ggMHhGRiBhcmUgcmVtYXBwZWQKKwkJICAgIC8vIHRvIGNoYXJzIG9yIHN1cnJvZ2F0ZSBwYWlycyBhY2NvcmRpbmcgdG8gdGhlCisJCSAgICAvLyBjdXJyZW50bHkgYWN0aXZlIHdpbmRvdworCQljYXNlIDB4ODA6IGNhc2UgMHg4MTogY2FzZSAweDgyOiBjYXNlIDB4ODM6IGNhc2UgMHg4NDogCisJCWNhc2UgMHg4NTogY2FzZSAweDg2OiBjYXNlIDB4ODc6IGNhc2UgMHg4ODogY2FzZSAweDg5OgorCQljYXNlIDB4OEE6IGNhc2UgMHg4QjogY2FzZSAweDhDOiBjYXNlIDB4OEQ6IGNhc2UgMHg4RToKKwkJY2FzZSAweDhGOiBjYXNlIDB4OTA6IGNhc2UgMHg5MTogY2FzZSAweDkyOiBjYXNlIDB4OTM6CisJCWNhc2UgMHg5NDogY2FzZSAweDk1OiBjYXNlIDB4OTY6IGNhc2UgMHg5NzogY2FzZSAweDk4OgorCQljYXNlIDB4OTk6IGNhc2UgMHg5QTogY2FzZSAweDlCOiBjYXNlIDB4OUM6IGNhc2UgMHg5RDoKKwkJY2FzZSAweDlFOiBjYXNlIDB4OUY6IGNhc2UgMHhBMDogY2FzZSAweEExOiBjYXNlIDB4QTI6CisJCWNhc2UgMHhBMzogY2FzZSAweEE0OiBjYXNlIDB4QTU6IGNhc2UgMHhBNjogY2FzZSAweEE3OgorCQljYXNlIDB4QTg6IGNhc2UgMHhBOTogY2FzZSAweEFBOiBjYXNlIDB4QUI6IGNhc2UgMHhBQzoKKwkJY2FzZSAweEFEOiBjYXNlIDB4QUU6IGNhc2UgMHhBRjogY2FzZSAweEIwOiBjYXNlIDB4QjE6CisJCWNhc2UgMHhCMjogY2FzZSAweEIzOiBjYXNlIDB4QjQ6IGNhc2UgMHhCNTogY2FzZSAweEI2OgorCQljYXNlIDB4Qjc6IGNhc2UgMHhCODogY2FzZSAweEI5OiBjYXNlIDB4QkE6IGNhc2UgMHhCQjoKKwkJY2FzZSAweEJDOiBjYXNlIDB4QkQ6IGNhc2UgMHhCRTogY2FzZSAweEJGOiBjYXNlIDB4QzA6CisJCWNhc2UgMHhDMTogY2FzZSAweEMyOiBjYXNlIDB4QzM6IGNhc2UgMHhDNDogY2FzZSAweEM1OgorCQljYXNlIDB4QzY6IGNhc2UgMHhDNzogY2FzZSAweEM4OiBjYXNlIDB4Qzk6IGNhc2UgMHhDQToKKwkJY2FzZSAweENCOiBjYXNlIDB4Q0M6IGNhc2UgMHhDRDogY2FzZSAweENFOiBjYXNlIDB4Q0Y6CisJCWNhc2UgMHhEMDogY2FzZSAweEQxOiBjYXNlIDB4RDI6IGNhc2UgMHhEMzogY2FzZSAweEQ0OgorCQljYXNlIDB4RDU6IGNhc2UgMHhENjogY2FzZSAweEQ3OiBjYXNlIDB4RDg6IGNhc2UgMHhEOToKKwkJY2FzZSAweERBOiBjYXNlIDB4REI6IGNhc2UgMHhEQzogY2FzZSAweEREOiBjYXNlIDB4REU6CisJCWNhc2UgMHhERjogY2FzZSAweEUwOiBjYXNlIDB4RTE6IGNhc2UgMHhFMjogY2FzZSAweEUzOgorCQljYXNlIDB4RTQ6IGNhc2UgMHhFNTogY2FzZSAweEU2OiBjYXNlIDB4RTc6IGNhc2UgMHhFODoKKwkJY2FzZSAweEU5OiBjYXNlIDB4RUE6IGNhc2UgMHhFQjogY2FzZSAweEVDOiBjYXNlIDB4RUQ6CisJCWNhc2UgMHhFRTogY2FzZSAweEVGOiBjYXNlIDB4RjA6IGNhc2UgMHhGMTogY2FzZSAweEYyOgorCQljYXNlIDB4RjM6IGNhc2UgMHhGNDogY2FzZSAweEY1OiBjYXNlIDB4RjY6IGNhc2UgMHhGNzoKKwkJY2FzZSAweEY4OiBjYXNlIDB4Rjk6IGNhc2UgMHhGQTogY2FzZSAweEZCOiBjYXNlIDB4RkM6CisJCWNhc2UgMHhGRDogY2FzZSAweEZFOiBjYXNlIDB4RkY6IAorCQkgICAgLy8gRm9yIG9mZnNldHMgPD0gMHhGRkZGLCBjb252ZXJ0IHRvIGEgc2luZ2xlIGNoYXIKKwkJICAgIC8vIGJ5IGFkZGluZyB0aGUgd2luZG93J3Mgb2Zmc2V0IGFuZCBzdWJ0cmFjdGluZworCQkgICAgLy8gdGhlIGdlbmVyaWMgY29tcHJlc3Npb24gb2Zmc2V0CisJCSAgICBpZihmT2Zmc2V0c1sgZkN1cnJlbnRXaW5kb3cgXSA8PSAweEZGRkYpIHsKKwkJCWNoYXJCdWZmZXJbdWNQb3MrK10gPSAoY2hhcikgCisJCQkgICAgKGFCeXRlICsgZk9mZnNldHNbIGZDdXJyZW50V2luZG93IF0gCisJCQkgICAgIC0gQ09NUFJFU1NJT05PRkZTRVQpOworCQkgICAgfQorCQkgICAgLy8gRm9yIG9mZnNldHMgPiAweDEwMDAwLCBjb252ZXJ0IHRvIGEgc3Vycm9nYXRlIHBhaXIgYnkgCisJCSAgICAvLyBub3JtQmFzZSA9IHdpbmRvdydzIG9mZnNldCAtIDB4MTAwMDAKKwkJICAgIC8vIGhpZ2ggc3Vyci4gPSAweEQ4MDAgKyAobm9ybUJhc2UgPj4gMTApCisJCSAgICAvLyBsb3cgIHN1cnIuID0gMHhEQzAwICsgKG5vcm1CYXNlICYgMHgzRkYpICsgKGJ5dGUgJiAweDdGKQorCQkgICAgZWxzZSB7CisJCQkvLyBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gdG8gd3JpdGUKKwkJCS8vIGJvdGggY2hhcmFjdGVycyAKKwkJCS8vIGlmIG5vdCwgc2F2ZSBzdGF0ZSBhbmQgYnJlYWsgb3V0CisJCQlpZigodWNQb3MgKyAxKSA+PSBjaGFyQnVmZmVyTGltaXQpIHsKKwkJCSAgICAtLWJ5dGVQb3M7CisJCQkgICAgU3lzdGVtLmFycmF5Y29weShieXRlQnVmZmVyLCBieXRlUG9zLAorCQkJCQkgICAgIGZCdWZmZXIsIDAsIAorCQkJCQkgICAgIGJ5dGVCdWZmZXJMaW1pdCAtIGJ5dGVQb3MpOworCQkJICAgIGZCdWZmZXJMZW5ndGggPSBieXRlQnVmZmVyTGltaXQgLSBieXRlUG9zOworCQkJICAgIGJ5dGVQb3MgKz0gZkJ1ZmZlckxlbmd0aDsKKwkJCSAgICBicmVhayBtYWluTG9vcDsgCisJCQl9CisJCQkKKwkJCWludCBub3JtYWxpemVkQmFzZSA9IGZPZmZzZXRzWyBmQ3VycmVudFdpbmRvdyBdIAorCQkJICAgIC0gMHgxMDAwMDsKKwkJCWNoYXJCdWZmZXJbdWNQb3MrK10gPSAoY2hhcikgCisJCQkgICAgKDB4RDgwMCArIChub3JtYWxpemVkQmFzZSA+PiAxMCkpOworCQkJY2hhckJ1ZmZlclt1Y1BvcysrXSA9IChjaGFyKSAKKwkJCSAgICAoMHhEQzAwICsgKG5vcm1hbGl6ZWRCYXNlICYgMHgzRkYpKyhhQnl0ZSAmIDB4N0YpKTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCisJCSAgICAvLyBieXRlcyBmcm9tIDB4MjAgdGhyb3VnaCAweDdGIGFyZSB0cmVhdGVkIGFzIEFTQ0lJIGFuZAorCQkgICAgLy8gYXJlIHJlbWFwcGVkIHRvIGNoYXJzIGJ5IHBhZGRpbmcgdGhlIGhpZ2ggYnl0ZQorCQkgICAgLy8gKHRoaXMgaXMgdGhlIHNhbWUgYXMgcXVvdGluZyBmcm9tIHN0YXRpYyB3aW5kb3cgMCkKKwkJICAgIC8vIE5VTCAoMHgwMCksIEhUICgweDA5KSwgQ1IgKDB4MEEpLCBMRiAoMHgwRCkgCisJCSAgICAvLyBhcmUgdHJlYXRlZCBhcyBBU0NJSSBhcyB3ZWxsCisJCWNhc2UgMHgwMDogY2FzZSAweDA5OiBjYXNlIDB4MEE6IGNhc2UgMHgwRDoKKwkJY2FzZSAweDIwOiBjYXNlIDB4MjE6IGNhc2UgMHgyMjogY2FzZSAweDIzOiBjYXNlIDB4MjQ6CisJCWNhc2UgMHgyNTogY2FzZSAweDI2OiBjYXNlIDB4Mjc6IGNhc2UgMHgyODogY2FzZSAweDI5OgorCQljYXNlIDB4MkE6IGNhc2UgMHgyQjogY2FzZSAweDJDOiBjYXNlIDB4MkQ6IGNhc2UgMHgyRToKKwkJY2FzZSAweDJGOiBjYXNlIDB4MzA6IGNhc2UgMHgzMTogY2FzZSAweDMyOiBjYXNlIDB4MzM6CisJCWNhc2UgMHgzNDogY2FzZSAweDM1OiBjYXNlIDB4MzY6IGNhc2UgMHgzNzogY2FzZSAweDM4OgorCQljYXNlIDB4Mzk6IGNhc2UgMHgzQTogY2FzZSAweDNCOiBjYXNlIDB4M0M6IGNhc2UgMHgzRDoKKwkJY2FzZSAweDNFOiBjYXNlIDB4M0Y6IGNhc2UgMHg0MDogY2FzZSAweDQxOiBjYXNlIDB4NDI6CisJCWNhc2UgMHg0MzogY2FzZSAweDQ0OiBjYXNlIDB4NDU6IGNhc2UgMHg0NjogY2FzZSAweDQ3OgorCQljYXNlIDB4NDg6IGNhc2UgMHg0OTogY2FzZSAweDRBOiBjYXNlIDB4NEI6IGNhc2UgMHg0QzoKKwkJY2FzZSAweDREOiBjYXNlIDB4NEU6IGNhc2UgMHg0RjogY2FzZSAweDUwOiBjYXNlIDB4NTE6CisJCWNhc2UgMHg1MjogY2FzZSAweDUzOiBjYXNlIDB4NTQ6IGNhc2UgMHg1NTogY2FzZSAweDU2OgorCQljYXNlIDB4NTc6IGNhc2UgMHg1ODogY2FzZSAweDU5OiBjYXNlIDB4NUE6IGNhc2UgMHg1QjoKKwkJY2FzZSAweDVDOiBjYXNlIDB4NUQ6IGNhc2UgMHg1RTogY2FzZSAweDVGOiBjYXNlIDB4NjA6CisJCWNhc2UgMHg2MTogY2FzZSAweDYyOiBjYXNlIDB4NjM6IGNhc2UgMHg2NDogY2FzZSAweDY1OgorCQljYXNlIDB4NjY6IGNhc2UgMHg2NzogY2FzZSAweDY4OiBjYXNlIDB4Njk6IGNhc2UgMHg2QToKKwkJY2FzZSAweDZCOiBjYXNlIDB4NkM6IGNhc2UgMHg2RDogY2FzZSAweDZFOiBjYXNlIDB4NkY6CisJCWNhc2UgMHg3MDogY2FzZSAweDcxOiBjYXNlIDB4NzI6IGNhc2UgMHg3MzogY2FzZSAweDc0OgorCQljYXNlIDB4NzU6IGNhc2UgMHg3NjogY2FzZSAweDc3OiBjYXNlIDB4Nzg6IGNhc2UgMHg3OToKKwkJY2FzZSAweDdBOiBjYXNlIDB4N0I6IGNhc2UgMHg3QzogY2FzZSAweDdEOiBjYXNlIDB4N0U6CisJCWNhc2UgMHg3RjogCisJCSAgICBjaGFyQnVmZmVyW3VjUG9zKytdID0gKGNoYXIpIGFCeXRlOworCQkgICAgYnJlYWs7CisKKwkJICAgIC8vIHF1b3RlIHVuaWNvZGUKKwkJY2FzZSBTUVVPVEVVOgorCQkgICAgLy8gdmVyaWZ5IHdlIGhhdmUgdHdvIGJ5dGVzIGZvbGxvd2luZyB0YWcKKwkJICAgIC8vIGlmIG5vdCwgc2F2ZSBzdGF0ZSBhbmQgYnJlYWsgb3V0CisJCSAgICBpZiggKGJ5dGVQb3MgKyAxKSA+PSBieXRlQnVmZmVyTGltaXQgKSB7CisJCQktLWJ5dGVQb3M7CisJCQlTeXN0ZW0uYXJyYXljb3B5KGJ5dGVCdWZmZXIsIGJ5dGVQb3MsCisJCQkJCSBmQnVmZmVyLCAwLCAKKwkJCQkJIGJ5dGVCdWZmZXJMaW1pdCAtIGJ5dGVQb3MpOworCQkJZkJ1ZmZlckxlbmd0aCA9IGJ5dGVCdWZmZXJMaW1pdCAtIGJ5dGVQb3M7CisJCQlieXRlUG9zICs9IGZCdWZmZXJMZW5ndGg7CisJCQlicmVhayBtYWluTG9vcDsgCisJCSAgICB9CisgICAgICAgICAgICAgICAgCisJCSAgICBhQnl0ZSA9IGJ5dGVCdWZmZXJbYnl0ZVBvcysrXTsKKwkJICAgIGNoYXJCdWZmZXJbdWNQb3MrK10gPSAoY2hhcikKKwkJCShhQnl0ZSA8PCA4IHwgKGJ5dGVCdWZmZXJbYnl0ZVBvcysrXSAmIDB4RkYpKTsKKwkJICAgIGJyZWFrOworCisJCSAgICAvLyBzd2l0Y2ggdG8gVW5pY29kZSBtb2RlCisJCWNhc2UgU0NIQU5HRVU6CisJCSAgICBmTW9kZSA9IFVOSUNPREVNT0RFOworCQkgICAgYnJlYWsgc2luZ2xlQnl0ZU1vZGVMb29wOworCQkgICAgLy9icmVhazsKKworCQkgICAgLy8gaGFuZGxlIGFsbCBxdW90ZSB0YWdzCisJCWNhc2UgU1FVT1RFMDogY2FzZSBTUVVPVEUxOiBjYXNlIFNRVU9URTI6IGNhc2UgU1FVT1RFMzoKKwkJY2FzZSBTUVVPVEU0OiBjYXNlIFNRVU9URTU6IGNhc2UgU1FVT1RFNjogY2FzZSBTUVVPVEU3OgorCQkgICAgLy8gdmVyaWZ5IHRoZXJlIGlzIGEgYnl0ZSBmb2xsb3dpbmcgdGhlIHRhZworCQkgICAgLy8gaWYgbm90LCBzYXZlIHN0YXRlIGFuZCBicmVhayBvdXQKKwkJICAgIGlmKGJ5dGVQb3MgPj0gYnl0ZUJ1ZmZlckxpbWl0KSB7CisJCQktLWJ5dGVQb3M7CisJCQlTeXN0ZW0uYXJyYXljb3B5KGJ5dGVCdWZmZXIsIGJ5dGVQb3MsCisJCQkJCSBmQnVmZmVyLCAwLCAKKwkJCQkJIGJ5dGVCdWZmZXJMaW1pdCAtIGJ5dGVQb3MpOworCQkJZkJ1ZmZlckxlbmd0aCA9IGJ5dGVCdWZmZXJMaW1pdCAtIGJ5dGVQb3M7CisJCQlieXRlUG9zICs9IGZCdWZmZXJMZW5ndGg7CisJCQlicmVhayBtYWluTG9vcDsgCisJCSAgICB9CisgICAgICAgICAgICAgICAgCisJCSAgICAvLyBpZiB0aGUgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCAtIDB4N0YsIHVzZQorCQkgICAgLy8gc3RhdGljIHdpbmRvdyBuIG90aGVyd2lzZSwgdXNlIGR5bmFtaWMgd2luZG93IG4KKwkJICAgIGludCBkQnl0ZSA9IGJ5dGVCdWZmZXJbYnl0ZVBvcysrXSAmIDB4RkY7CisJCSAgICBjaGFyQnVmZmVyW3VjUG9zKytdID0gKGNoYXIpIAorCQkJKGRCeXRlKyAoZEJ5dGUgPj0gMHgwMCAmJiBkQnl0ZSA8IDB4ODAgCisJCQkJID8gc09mZnNldHNbYUJ5dGUgLSBTUVVPVEUwXSAKKwkJCQkgOiAoZk9mZnNldHNbYUJ5dGUgLSBTUVVPVEUwXSAKKwkJCQkgICAgLSBDT01QUkVTU0lPTk9GRlNFVCkpKTsgCisJCSAgICBicmVhazsKKworCQkgICAgLy8gaGFuZGxlIGFsbCBjaGFuZ2UgdGFncworCQljYXNlIFNDSEFOR0UwOiBjYXNlIFNDSEFOR0UxOiBjYXNlIFNDSEFOR0UyOiBjYXNlIFNDSEFOR0UzOgorCQljYXNlIFNDSEFOR0U0OiBjYXNlIFNDSEFOR0U1OiBjYXNlIFNDSEFOR0U2OiBjYXNlIFNDSEFOR0U3OgorCQkgICAgZkN1cnJlbnRXaW5kb3cgPSBhQnl0ZSAtIFNDSEFOR0UwOworCQkgICAgYnJlYWs7CisKKwkJICAgIC8vIGhhbmRsZSBhbGwgZGVmaW5lIHRhZ3MKKwkJY2FzZSBTREVGSU5FMDogY2FzZSBTREVGSU5FMTogY2FzZSBTREVGSU5FMjogY2FzZSBTREVGSU5FMzoKKwkJY2FzZSBTREVGSU5FNDogY2FzZSBTREVGSU5FNTogY2FzZSBTREVGSU5FNjogY2FzZSBTREVGSU5FNzoKKwkJICAgIC8vIHZlcmlmeSB0aGVyZSBpcyBhIGJ5dGUgZm9sbG93aW5nIHRoZSB0YWcKKwkJICAgIC8vIGlmIG5vdCwgc2F2ZSBzdGF0ZSBhbmQgYnJlYWsgb3V0CisJCSAgICBpZihieXRlUG9zID49IGJ5dGVCdWZmZXJMaW1pdCkgeworCQkJLS1ieXRlUG9zOworCQkJU3lzdGVtLmFycmF5Y29weShieXRlQnVmZmVyLCBieXRlUG9zLAorCQkJCQkgZkJ1ZmZlciwgMCwgCisJCQkJCSBieXRlQnVmZmVyTGltaXQgLSBieXRlUG9zKTsKKwkJCWZCdWZmZXJMZW5ndGggPSBieXRlQnVmZmVyTGltaXQgLSBieXRlUG9zOworCQkJYnl0ZVBvcyArPSBmQnVmZmVyTGVuZ3RoOworCQkJYnJlYWsgbWFpbkxvb3A7IAorCQkgICAgfQorCisJCSAgICBmQ3VycmVudFdpbmRvdyA9IGFCeXRlIC0gU0RFRklORTA7CisJCSAgICBmT2Zmc2V0c1tmQ3VycmVudFdpbmRvd10gPSAKKwkJCXNPZmZzZXRUYWJsZVtieXRlQnVmZmVyW2J5dGVQb3MrK10gJiAweEZGXTsKKwkJICAgIGJyZWFrOworCisJCSAgICAvLyBoYW5kbGUgZGVmaW5lIGV4dGVuZGVkIHRhZworCQljYXNlIFNERUZJTkVYOgorCQkgICAgLy8gdmVyaWZ5IHdlIGhhdmUgdHdvIGJ5dGVzIGZvbGxvd2luZyB0YWcKKwkJICAgIC8vIGlmIG5vdCwgc2F2ZSBzdGF0ZSBhbmQgYnJlYWsgb3V0CisJCSAgICBpZigoYnl0ZVBvcyArIDEpID49IGJ5dGVCdWZmZXJMaW1pdCApIHsKKwkJCS0tYnl0ZVBvczsKKwkJCVN5c3RlbS5hcnJheWNvcHkoYnl0ZUJ1ZmZlciwgYnl0ZVBvcywKKwkJCQkJIGZCdWZmZXIsIDAsIAorCQkJCQkgYnl0ZUJ1ZmZlckxpbWl0IC0gYnl0ZVBvcyk7CisJCQlmQnVmZmVyTGVuZ3RoID0gYnl0ZUJ1ZmZlckxpbWl0IC0gYnl0ZVBvczsKKwkJCWJ5dGVQb3MgKz0gZkJ1ZmZlckxlbmd0aDsKKwkJCWJyZWFrIG1haW5Mb29wOyAKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAKKwkJICAgIGFCeXRlID0gYnl0ZUJ1ZmZlcltieXRlUG9zKytdICYgMHhGRjsKKwkJICAgIGZDdXJyZW50V2luZG93ID0gKGFCeXRlICYgMHhFMCkgPj4gNTsKKwkJICAgIGZPZmZzZXRzW2ZDdXJyZW50V2luZG93XSA9IDB4MTAwMDAgKyAKKwkJCSgweDgwICogKCgoYUJ5dGUgJiAweDFGKSA8PCA4KSAKKwkJCQkgfCAoYnl0ZUJ1ZmZlcltieXRlUG9zKytdICYgMHhGRikpKTsKKwkJICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gcmVzZXJ2ZWQsIHNob3VsZG4ndCBoYXBwZW4KKwkJY2FzZSBTUkVTRVJWRUQ6CisJCSAgICBicmVhazsKKworCQl9IC8vIGVuZCBzd2l0Y2gKKwkgICAgfSAvLyBlbmQgd2hpbGUKKwkgICAgYnJlYWs7CisKKwkgICAgY2FzZSBVTklDT0RFTU9ERToKKwkJLy8gdW5pY29kZSBtb2RlIGRlY29tcHJlc3Npb24gbG9vcAorCSAgICB1bmljb2RlTW9kZUxvb3A6CisJICAgIHdoaWxlKGJ5dGVQb3MgPCBieXRlQnVmZmVyTGltaXQgJiYgdWNQb3MgPCBjaGFyQnVmZmVyTGltaXQpIHsKKwkJYUJ5dGUgPSBieXRlQnVmZmVyW2J5dGVQb3MrK10gJiAweEZGOworCQlzd2l0Y2goYUJ5dGUpIHsKKwkJICAgIC8vIGhhbmRsZSBhbGwgZGVmaW5lIHRhZ3MKKwkJY2FzZSBVREVGSU5FMDogY2FzZSBVREVGSU5FMTogY2FzZSBVREVGSU5FMjogY2FzZSBVREVGSU5FMzoKKwkJY2FzZSBVREVGSU5FNDogY2FzZSBVREVGSU5FNTogY2FzZSBVREVGSU5FNjogY2FzZSBVREVGSU5FNzoKKwkJICAgIC8vIHZlcmlmeSB0aGVyZSBpcyBhIGJ5dGUgZm9sbG93aW5nIHRhZworCQkgICAgLy8gaWYgbm90LCBzYXZlIHN0YXRlIGFuZCBicmVhayBvdXQKKwkJICAgIGlmKGJ5dGVQb3MgPj0gYnl0ZUJ1ZmZlckxpbWl0ICkgeworCQkJLS1ieXRlUG9zOworCQkJU3lzdGVtLmFycmF5Y29weShieXRlQnVmZmVyLCBieXRlUG9zLAorCQkJCQkgZkJ1ZmZlciwgMCwgCisJCQkJCSBieXRlQnVmZmVyTGltaXQgLSBieXRlUG9zKTsKKwkJCWZCdWZmZXJMZW5ndGggPSBieXRlQnVmZmVyTGltaXQgLSBieXRlUG9zOworCQkJYnl0ZVBvcyArPSBmQnVmZmVyTGVuZ3RoOworCQkJYnJlYWsgbWFpbkxvb3A7IAorCQkgICAgfQorICAgICAgICAgICAgICAgIAorCQkgICAgZkN1cnJlbnRXaW5kb3cgPSBhQnl0ZSAtIFVERUZJTkUwOworCQkgICAgZk9mZnNldHNbZkN1cnJlbnRXaW5kb3ddID0gCisJCQlzT2Zmc2V0VGFibGVbYnl0ZUJ1ZmZlcltieXRlUG9zKytdICYgMHhGRl07CisJCSAgICBmTW9kZSA9IFNJTkdMRUJZVEVNT0RFOworCQkgICAgYnJlYWsgdW5pY29kZU1vZGVMb29wOworCQkgICAgLy9icmVhazsKKworCQkgICAgLy8gaGFuZGxlIGRlZmluZSBleHRlbmRlZCB0YWcKKwkJY2FzZSBVREVGSU5FWDoKKwkJICAgIC8vIHZlcmlmeSB3ZSBoYXZlIHR3byBieXRlcyBmb2xsb3dpbmcgdGFnCisJCSAgICAvLyBpZiBub3QsIHNhdmUgc3RhdGUgYW5kIGJyZWFrIG91dAorCQkgICAgaWYoKGJ5dGVQb3MgKyAxKSA+PSBieXRlQnVmZmVyTGltaXQgKSB7CisJCQktLWJ5dGVQb3M7CisJCQlTeXN0ZW0uYXJyYXljb3B5KGJ5dGVCdWZmZXIsIGJ5dGVQb3MsCisJCQkJCSBmQnVmZmVyLCAwLCAKKwkJCQkJIGJ5dGVCdWZmZXJMaW1pdCAtIGJ5dGVQb3MpOworCQkJZkJ1ZmZlckxlbmd0aCA9IGJ5dGVCdWZmZXJMaW1pdCAtIGJ5dGVQb3M7CisJCQlieXRlUG9zICs9IGZCdWZmZXJMZW5ndGg7CisJCQlicmVhayBtYWluTG9vcDsgCisJCSAgICB9CisJCSAgICAKKwkJICAgIGFCeXRlID0gYnl0ZUJ1ZmZlcltieXRlUG9zKytdICYgMHhGRjsKKwkJICAgIGZDdXJyZW50V2luZG93ID0gKGFCeXRlICYgMHhFMCkgPj4gNTsKKwkJICAgIGZPZmZzZXRzW2ZDdXJyZW50V2luZG93XSA9IDB4MTAwMDAgKyAKKwkJCSgweDgwICogKCgoYUJ5dGUgJiAweDFGKSA8PCA4KSAKKwkJCQkgfCAoYnl0ZUJ1ZmZlcltieXRlUG9zKytdICYgMHhGRikpKTsKKwkJICAgIGZNb2RlID0gU0lOR0xFQllURU1PREU7CisJCSAgICBicmVhayB1bmljb2RlTW9kZUxvb3A7CisJCSAgICAvL2JyZWFrOworCisJCSAgICAvLyBoYW5kbGUgYWxsIGNoYW5nZSB0YWdzCisJCWNhc2UgVUNIQU5HRTA6IGNhc2UgVUNIQU5HRTE6IGNhc2UgVUNIQU5HRTI6IGNhc2UgVUNIQU5HRTM6CisJCWNhc2UgVUNIQU5HRTQ6IGNhc2UgVUNIQU5HRTU6IGNhc2UgVUNIQU5HRTY6IGNhc2UgVUNIQU5HRTc6CisJCSAgICBmQ3VycmVudFdpbmRvdyA9IGFCeXRlIC0gVUNIQU5HRTA7CisJCSAgICBmTW9kZSA9IFNJTkdMRUJZVEVNT0RFOworCQkgICAgYnJlYWsgdW5pY29kZU1vZGVMb29wOworCQkgICAgLy9icmVhazsKKworCQkgICAgLy8gcXVvdGUgdW5pY29kZQorCQljYXNlIFVRVU9URVU6CisJCSAgICAvLyB2ZXJpZnkgd2UgaGF2ZSB0d28gYnl0ZXMgZm9sbG93aW5nIHRhZworCQkgICAgLy8gaWYgbm90LCBzYXZlIHN0YXRlIGFuZCBicmVhayBvdXQKKwkJICAgIGlmKGJ5dGVQb3MgPj0gYnl0ZUJ1ZmZlckxpbWl0ICAtIDEpIHsKKwkJCS0tYnl0ZVBvczsKKwkJCVN5c3RlbS5hcnJheWNvcHkoYnl0ZUJ1ZmZlciwgYnl0ZVBvcywKKwkJCQkJIGZCdWZmZXIsIDAsIAorCQkJCQkgYnl0ZUJ1ZmZlckxpbWl0IC0gYnl0ZVBvcyk7CisJCQlmQnVmZmVyTGVuZ3RoID0gYnl0ZUJ1ZmZlckxpbWl0IC0gYnl0ZVBvczsKKwkJCWJ5dGVQb3MgKz0gZkJ1ZmZlckxlbmd0aDsKKwkJCWJyZWFrIG1haW5Mb29wOyAKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAKKwkJICAgIGFCeXRlID0gYnl0ZUJ1ZmZlcltieXRlUG9zKytdOworCQkgICAgY2hhckJ1ZmZlclt1Y1BvcysrXSA9IChjaGFyKSAKKwkJCShhQnl0ZSA8PCA4IHwgKGJ5dGVCdWZmZXJbYnl0ZVBvcysrXSAmIDB4RkYpKTsKKwkJICAgIGJyZWFrOworCisJCWRlZmF1bHQ6CisJCSAgICAvLyB2ZXJpZnkgdGhlcmUgaXMgYSBieXRlIGZvbGxvd2luZyB0YWcKKwkJICAgIC8vIGlmIG5vdCwgc2F2ZSBzdGF0ZSBhbmQgYnJlYWsgb3V0CisJCSAgICBpZihieXRlUG9zID49IGJ5dGVCdWZmZXJMaW1pdCApIHsKKwkJCS0tYnl0ZVBvczsKKwkJCVN5c3RlbS5hcnJheWNvcHkoYnl0ZUJ1ZmZlciwgYnl0ZVBvcywKKwkJCQkJIGZCdWZmZXIsIDAsIAorCQkJCQkgYnl0ZUJ1ZmZlckxpbWl0IC0gYnl0ZVBvcyk7CisJCQlmQnVmZmVyTGVuZ3RoID0gYnl0ZUJ1ZmZlckxpbWl0IC0gYnl0ZVBvczsKKwkJCWJ5dGVQb3MgKz0gZkJ1ZmZlckxlbmd0aDsKKwkJCWJyZWFrIG1haW5Mb29wOyAKKwkJICAgIH0KKworCQkgICAgY2hhckJ1ZmZlclt1Y1BvcysrXSA9IChjaGFyKSAKKwkJCShhQnl0ZSA8PCA4IHwgKGJ5dGVCdWZmZXJbYnl0ZVBvcysrXSAmIDB4RkYpKTsKKwkJICAgIGJyZWFrOworCisJCX0gLy8gZW5kIHN3aXRjaAorCSAgICB9IC8vIGVuZCB3aGlsZQorCSAgICBicmVhazsKKwkgICAgCisJICAgIH0gLy8gZW5kIHN3aXRjaCggZk1vZGUgKQorCX0gLy8gZW5kIHdoaWxlCisKKyAgICAgICAgLy8gZmlsbCBpbiBvdXRwdXQgcGFyYW1ldGVyCisJaWYoYnl0ZXNSZWFkICE9IG51bGwpCisJICAgIGJ5dGVzUmVhZCBbMF0gPSAoYnl0ZVBvcyAtIGJ5dGVCdWZmZXJTdGFydCk7CisKKyAgICAgICAgLy8gcmV0dXJuICMgb2YgY2hhcnMgd3JpdHRlbgorCXJldHVybiAodWNQb3MgLSBjaGFyQnVmZmVyU3RhcnQpOworICAgIH0KKworICAgIC8qKiAKKyAgICAgKiBSZXNldCB0aGUgZGVjb21wcmVzc29yIHRvIGl0cyBpbml0aWFsIHN0YXRlLiAKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIC8vIHJlc2V0IGR5bmFtaWMgd2luZG93cworICAgICAgICBmT2Zmc2V0c1swXSA9IDB4MDA4MDsgICAgLy8gTGF0aW4tMQorICAgICAgICBmT2Zmc2V0c1sxXSA9IDB4MDBDMDsgICAgLy8gTGF0aW4tMSBTdXBwbGVtZW50ICsgTGF0aW4gRXh0ZW5kZWQtQQorICAgICAgICBmT2Zmc2V0c1syXSA9IDB4MDQwMDsgICAgLy8gQ3lyaWxsaWMKKyAgICAgICAgZk9mZnNldHNbM10gPSAweDA2MDA7ICAgIC8vIEFyYWJpYworICAgICAgICBmT2Zmc2V0c1s0XSA9IDB4MDkwMDsgICAgLy8gRGV2YW5hZ2FyaQorICAgICAgICBmT2Zmc2V0c1s1XSA9IDB4MzA0MDsgICAgLy8gSGlyYWdhbmEKKyAgICAgICAgZk9mZnNldHNbNl0gPSAweDMwQTA7ICAgIC8vIEthdGFrYW5hCisgICAgICAgIGZPZmZzZXRzWzddID0gMHhGRjAwOyAgICAvLyBGdWxsd2lkdGggQVNDSUkKKworCisgICAgICAgIGZDdXJyZW50V2luZG93ICA9IDA7ICAgICAgICAgICAgICAgIC8vIE1ha2UgY3VycmVudCB3aW5kb3cgTGF0aW4tMQorICAgICAgICBmTW9kZSAgICAgICAgICAgPSBTSU5HTEVCWVRFTU9ERTsgICAvLyBBbHdheXMgc3RhcnQgaW4gc2luZ2xlLWJ5dGUgbW9kZQorCWZCdWZmZXJMZW5ndGggICA9IDA7ICAgICAgICAgICAgICAgIC8vIEVtcHR5IGJ1ZmZlcgorICAgIH0KK307CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlRmlsdGVyLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlRmlsdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGJkZjkxMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVGaWx0ZXIuamF2YQpAQCAtMCwwICsxLDY1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlRmlsdGVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjM6MDYgJCAKKyAqICRSZXZpc2lvbjogMS4xNCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworLyoqCisgKiA8Y29kZT5Vbmljb2RlRmlsdGVyPC9jb2RlPiBkZWZpbmVzIGEgcHJvdG9jb2wgZm9yIHNlbGVjdGluZyBhCisgKiBzdWJzZXQgb2YgdGhlIGZ1bGwgcmFuZ2UgKFUrMDAwMCB0byBVK0ZGRkYpIG9mIFVuaWNvZGUgY2hhcmFjdGVycy4KKyAqIEN1cnJlbnRseSwgZmlsdGVycyBhcmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNsYXNzZXMgbGlrZSB7QGxpbmsKKyAqIFRyYW5zbGl0ZXJhdG9yfSB0byBvbmx5IHByb2Nlc3Mgc2VsZWN0ZWQgY2hhcmFjdGVycyB0aHJvdWdoIGEKKyAqIHRyYW5zZm9ybWF0aW9uLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBVbmljb2RlRmlsdGVyIGltcGxlbWVudHMgVW5pY29kZU1hdGNoZXIgeworCisgICAgLyoqCisgICAgICogUmV0dXJucyA8dHQ+dHJ1ZTwvdHQ+IGZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIGluIHRoZSBzZWxlY3RlZAorICAgICAqIHN1YnNldC4gIEluIG90aGVyIHdvcmRzLCBpZiBhIGNoYXJhY3RlciBpcyA8Yj50byBiZQorICAgICAqIGZpbHRlcmVkPC9iPiwgdGhlbiA8dHQ+Y29udGFpbnMoKTwvdHQ+IHJldHVybnMKKyAgICAgKiA8Yj48dHQ+ZmFsc2U8L3R0PjwvYj4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gY29udGFpbnMoaW50IGMpOworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBVbmljb2RlTWF0Y2hlcjo6bWF0Y2hlcygpIGZvciBVbmljb2RlCisgICAgICogZmlsdGVycy4gIE1hdGNoZXMgYSBzaW5nbGUgMTYtYml0IGNvZGUgdW5pdCBhdCBvZmZzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBtYXRjaGVzKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIGludFtdIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGluY3JlbWVudGFsKSB7CisgICAgICAgIGludCBjOworICAgICAgICBpZiAob2Zmc2V0WzBdIDwgbGltaXQgJiYKKyAgICAgICAgICAgIGNvbnRhaW5zKGMgPSB0ZXh0LmNoYXIzMkF0KG9mZnNldFswXSkpKSB7CisgICAgICAgICAgICBvZmZzZXRbMF0gKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgcmV0dXJuIFVfTUFUQ0g7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldFswXSA+IGxpbWl0ICYmCisgICAgICAgICAgICBjb250YWlucyhjID0gdGV4dC5jaGFyMzJBdChvZmZzZXRbMF0pKSkgeworICAgICAgICAgICAgLy8gQmFja3VwIG9mZnNldCBieSAxLCB1bmxlc3MgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIgaXMgYQorICAgICAgICAgICAgLy8gc3Vycm9nYXRlIHBhaXIgLS0gdGhlbiBiYWNrdXAgYnkgMiAoa2VlcCBvZmZzZXQgcG9pbnRpbmcgYXQKKyAgICAgICAgICAgIC8vIHRoZSBsZWFkIHN1cnJvZ2F0ZSkuCisgICAgICAgICAgICAtLW9mZnNldFswXTsKKyAgICAgICAgICAgIGlmIChvZmZzZXRbMF0gPj0gMCkgeworICAgICAgICAgICAgICAgIG9mZnNldFswXSAtPSBVVEYxNi5nZXRDaGFyQ291bnQodGV4dC5jaGFyMzJBdChvZmZzZXRbMF0pKSAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gVV9NQVRDSDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5jcmVtZW50YWwgJiYgb2Zmc2V0WzBdID09IGxpbWl0KSB7CisgICAgICAgICAgICByZXR1cm4gVV9QQVJUSUFMX01BVENIOworICAgICAgICB9CisgICAgICAgIHJldHVybiBVX01JU01BVENIOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVGaWx0ZXJMb2dpYy5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZUZpbHRlckxvZ2ljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjVmMjViMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVGaWx0ZXJMb2dpYy5qYXZhCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9BdHRpYy9Vbmljb2RlRmlsdGVyTG9naWMuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wMyAyMTowNzo1NyAkIAorICogJFJldmlzaW9uOiAxLjggJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CisKKy8vIERpc2FibGUgY292ZXJhZ2UgYW5hbHlzaXMgZm9yIHRoaXMgZmlsZQorLy8vQ0xPVkVSOk9GRgorCisvKioKKyAqIDxjb2RlPlVuaWNvZGVGaWx0ZXJMb2dpYzwvY29kZT4gcHJvdmlkZXMgbG9naWNhbCBvcGVyYXRvcnMgb24KKyAqIHtAbGluayBVbmljb2RlRmlsdGVyfSBvYmplY3RzLiAgVGhpcyBjbGFzcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkOworICogaXQgY29uc2lzdHMgb25seSBvZiBzdGF0aWMgbWV0aG9kcy4gIFRoZSBzdGF0aWMgbWV0aG9kcyByZXR1cm4KKyAqIGZpbHRlciBvYmplY3RzIHRoYXQgcGVyZm9ybSBsb2dpY2FsIGludmVyc2lvbiAoPHR0Pm5vdDwvdHQ+KSwKKyAqIGludGVyc2VjdGlvbiAoPHR0PmFuZDwvdHQ+KSwgb3IgdW5pb24gKDx0dD5vcjwvdHQ+KSBvZiB0aGUgZ2l2ZW4KKyAqIGZpbHRlciBvYmplY3RzLgorICoKKyAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy1BdWctMjguIFVzZSBVbmljb2RlU2V0IG1ldGhvZHMgaW5zdGVhZC4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFVuaWNvZGVGaWx0ZXJMb2dpYyB7CisKKyAgICAvKioKKyAgICAgKiBVbmljb2RlRmlsdGVyIHN1YmNsYXNzIHRoYXQgc3R1YnMgb3V0IG1ldGhvZHMgd2UgZG9uJ3QgaW1wbGVtZW50LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGFic3RyYWN0IGNsYXNzIF9VRiBleHRlbmRzIFVuaWNvZGVGaWx0ZXIgeworICAgICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBjb250YWlucyhpbnQgYyk7IC8vIHJlZGVjbGFyZQorICAgICAgICBwdWJsaWMgU3RyaW5nIHRvUGF0dGVybihib29sZWFuIGVzY2FwZVVucHJpbnRhYmxlKSB7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlc0luZGV4VmFsdWUoaW50IHYpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBwdWJsaWMgdm9pZCBhZGRNYXRjaFNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKSB7fQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSA8dHQ+VW5pY29kZUZpbHRlcjwvdHQ+IHRoYXQgaW1wbGVtZW50cyB0aGUgaW52ZXJzZSBvZgorICAgICAqIHRoZSBnaXZlbiBmaWx0ZXIuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBhZnRlciAyMDAzLUF1Zy0yOC4gVXNlIFVuaWNvZGVTZXQgbWV0aG9kcyBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZUZpbHRlciBub3QoZmluYWwgVW5pY29kZUZpbHRlciBmKSB7CisgICAgICAgIHJldHVybiBuZXcgX1VGKCkgeworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoaW50IGMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWYuY29udGFpbnMoYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIDx0dD5Vbmljb2RlRmlsdGVyPC90dD4gdGhhdCBpbXBsZW1lbnRzIGEgc2hvcnQKKyAgICAgKiBjaXJjdWl0IEFORCBvZiB0aGUgcmVzdWx0IG9mIHRoZSB0d28gZ2l2ZW4gZmlsdGVycy4gIFRoYXQgaXMsCisgICAgICogaWYgPHR0PmYuY29udGFpbnMoKTwvdHQ+IGlzIDx0dD5mYWxzZTwvdHQ+LCB0aGVuIDx0dD5nLmNvbnRhaW5zKCk8L3R0PgorICAgICAqIGlzIG5vdCBjYWxsZWQsIGFuZCA8dHQ+Y29udGFpbnMoKTwvdHQ+IHJldHVybnMgPHR0PmZhbHNlPC90dD4uCisgICAgICoKKyAgICAgKiA8cD5FaXRoZXIgPHR0PmY8L3R0PiBvciA8dHQ+ZzwvdHQ+IG11c3QgYmUgbm9uLW51bGwuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBhZnRlciAyMDAzLUF1Zy0yOC4gVXNlIFVuaWNvZGVTZXQgbWV0aG9kcyBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZUZpbHRlciBhbmQoZmluYWwgVW5pY29kZUZpbHRlciBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVW5pY29kZUZpbHRlciBnKSB7CisgICAgICAgIGlmIChmID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBnOworICAgICAgICB9CisgICAgICAgIGlmIChnID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgX1VGKCkgeworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoaW50IGMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZi5jb250YWlucyhjKSAmJiBnLmNvbnRhaW5zKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSA8dHQ+VW5pY29kZUZpbHRlcjwvdHQ+IHRoYXQgaW1wbGVtZW50cyBhIHNob3J0CisgICAgICogY2lyY3VpdCBBTkQgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZ2l2ZW4gZmlsdGVycy4gIFRoYXQgaXMsIGlmCisgICAgICogPHR0PmZbaV0uY29udGFpbnMoKTwvdHQ+IGlzIDx0dD5mYWxzZTwvdHQ+LCB0aGVuCisgICAgICogPHR0PmZbal0uY29udGFpbnMoKTwvdHQ+IGlzIG5vdCBjYWxsZWQsIHdoZXJlIDx0dD5qID4gaTwvdHQ+LCBhbmQKKyAgICAgKiA8dHQ+Y29udGFpbnMoKTwvdHQ+IHJldHVybnMgPHR0PmZhbHNlPC90dD4uCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBhZnRlciAyMDAzLUF1Zy0yOC4gVXNlIFVuaWNvZGVTZXQgbWV0aG9kcyBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZUZpbHRlciBhbmQoZmluYWwgVW5pY29kZUZpbHRlcltdIGYpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBfVUYoKSB7CisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhpbnQgYykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxmLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZltpXS5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSA8dHQ+VW5pY29kZUZpbHRlcjwvdHQ+IHRoYXQgaW1wbGVtZW50cyBhIHNob3J0CisgICAgICogY2lyY3VpdCBPUiBvZiB0aGUgcmVzdWx0IG9mIHRoZSB0d28gZ2l2ZW4gZmlsdGVycy4gIFRoYXQgaXMsIGlmCisgICAgICogPHR0PmYuY29udGFpbnMoKTwvdHQ+IGlzIDx0dD50cnVlPC90dD4sIHRoZW4gPHR0PmcuY29udGFpbnMoKTwvdHQ+IGlzCisgICAgICogbm90IGNhbGxlZCwgYW5kIDx0dD5jb250YWlucygpPC90dD4gcmV0dXJucyA8dHQ+dHJ1ZTwvdHQ+LgorICAgICAqCisgICAgICogPHA+RWl0aGVyIDx0dD5mPC90dD4gb3IgPHR0Pmc8L3R0PiBtdXN0IGJlIG5vbi1udWxsLgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy1BdWctMjguIFVzZSBVbmljb2RlU2V0IG1ldGhvZHMgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFVuaWNvZGVGaWx0ZXIgb3IoZmluYWwgVW5pY29kZUZpbHRlciBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBVbmljb2RlRmlsdGVyIGcpIHsKKyAgICAgICAgaWYgKGYgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGcgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGY7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBfVUYoKSB7CisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhpbnQgYykgeworICAgICAgICAgICAgICAgIHJldHVybiBmLmNvbnRhaW5zKGMpIHx8IGcuY29udGFpbnMoYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIDx0dD5Vbmljb2RlRmlsdGVyPC90dD4gdGhhdCBpbXBsZW1lbnRzIGEgc2hvcnQKKyAgICAgKiBjaXJjdWl0IE9SIG9mIHRoZSByZXN1bHQgb2YgdGhlIGdpdmVuIGZpbHRlcnMuICBUaGF0IGlzLCBpZgorICAgICAqIDx0dD5mW2ldLmNvbnRhaW5zKCk8L3R0PiBpcyA8dHQ+ZmFsc2U8L3R0PiwgdGhlbgorICAgICAqIDx0dD5mW2pdLmNvbnRhaW5zKCk8L3R0PiBpcyBub3QgY2FsbGVkLCB3aGVyZSA8dHQ+aiA+IGk8L3R0PiwgYW5kCisgICAgICogPHR0PmNvbnRhaW5zKCk8L3R0PiByZXR1cm5zIDx0dD50cnVlPC90dD4uCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBhZnRlciAyMDAzLUF1Zy0yOC4gVXNlIFVuaWNvZGVTZXQgbWV0aG9kcyBpbnN0ZWFkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVW5pY29kZUZpbHRlciBvcihmaW5hbCBVbmljb2RlRmlsdGVyW10gZikgeworICAgICAgICByZXR1cm4gbmV3IF9VRigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKGludCBjKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGYubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZbaV0uY29udGFpbnMoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvLyBEaXNhYmxlIGluc3RhbnRpYXRpb24gYW5kIG1ha2UgQ2hlY2tUYWdzIGhhcHB5CisgICAgcHJpdmF0ZSBVbmljb2RlRmlsdGVyTG9naWMoKSB7fQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZU1hdGNoZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVNYXRjaGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTg2ZGNjMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVNYXRjaGVyLmphdmEKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlTWF0Y2hlci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzA1IDAxOjIzOjE1ICQgCisgKiAkUmV2aXNpb246IDEuOCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworLyoqCisgKiA8Y29kZT5Vbmljb2RlTWF0Y2hlcjwvY29kZT4gZGVmaW5lcyBhIHByb3RvY29sIGZvciBvYmplY3RzIHRoYXQgY2FuCisgKiBtYXRjaCBhIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gYSBSZXBsYWNlYWJsZSBzdHJpbmcuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGludGVyZmFjZSBVbmljb2RlTWF0Y2hlciB7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCByZXR1cm5lZCBieSA8Y29kZT5tYXRjaGVzKCk8L2NvZGU+IGluZGljYXRpbmcgYQorICAgICAqIG1pc21hdGNoIGJldHdlZW4gdGhlIHRleHQgYW5kIHRoaXMgbWF0Y2hlci4gIFRoZSB0ZXh0IGNvbnRhaW5zCisgICAgICogYSBjaGFyYWN0ZXIgd2hpY2ggZG9lcyBub3QgbWF0Y2gsIG9yIHRoZSB0ZXh0IGRvZXMgbm90IGNvbnRhaW4KKyAgICAgKiBhbGwgZGVzaXJlZCBjaGFyYWN0ZXJzIGZvciBhIG5vbi1pbmNyZW1lbnRhbCBtYXRjaC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVX01JU01BVENIID0gMDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCByZXR1cm5lZCBieSA8Y29kZT5tYXRjaGVzKCk8L2NvZGU+IGluZGljYXRpbmcgYQorICAgICAqIHBhcnRpYWwgbWF0Y2ggYmV0d2VlbiB0aGUgdGV4dCBhbmQgdGhpcyBtYXRjaGVyLiAgVGhpcyB2YWx1ZSBpcworICAgICAqIG9ubHkgcmV0dXJuZWQgZm9yIGluY3JlbWVudGFsIG1hdGNoIG9wZXJhdGlvbnMuICBBbGwgY2hhcmFjdGVycworICAgICAqIG9mIHRoZSB0ZXh0IG1hdGNoLCBidXQgbW9yZSBjaGFyYWN0ZXJzIGFyZSByZXF1aXJlZCBmb3IgYQorICAgICAqIGNvbXBsZXRlIG1hdGNoLiAgQWx0ZXJuYXRpdmVseSwgZm9yIHZhcmlhYmxlLWxlbmd0aCBtYXRjaGVycywKKyAgICAgKiBhbGwgY2hhcmFjdGVycyBvZiB0aGUgdGV4dCBtYXRjaCwgYW5kIGlmIG1vcmUgY2hhcmFjdGVycyB3ZXJlCisgICAgICogc3VwcGxpZWQgYXQgbGltaXQsIHRoZXkgbWlnaHQgYWxzbyBtYXRjaC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVX1BBUlRJQUxfTUFUQ0ggPSAxOworICAgIAorICAgIC8qKgorICAgICAqIENvbnN0YW50IHJldHVybmVkIGJ5IDxjb2RlPm1hdGNoZXMoKTwvY29kZT4gaW5kaWNhdGluZyBhCisgICAgICogY29tcGxldGUgbWF0Y2ggYmV0d2VlbiB0aGUgdGV4dCBhbmQgdGhpcyBtYXRjaGVyLiAgRm9yIGFuCisgICAgICogaW5jcmVtZW50YWwgdmFyaWFibGUtbGVuZ3RoIG1hdGNoLCB0aGlzIHZhbHVlIGlzIHJldHVybmVkIGlmCisgICAgICogdGhlIGdpdmVuIHRleHQgbWF0Y2hlcywgYW5kIGl0IGlzIGtub3duIHRoYXQgYWRkaXRpb25hbAorICAgICAqIGNoYXJhY3RlcnMgd291bGQgbm90IGFsdGVyIHRoZSBleHRlbnQgb2YgdGhlIG1hdGNoLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVfTUFUQ0ggPSAyOworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgVU1hdGNoRGVncmVlIHZhbHVlIGluZGljYXRpbmcgdGhlIGRlZ3JlZSBvZiBtYXRjaCBmb3IKKyAgICAgKiB0aGUgZ2l2ZW4gdGV4dCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LiAgWmVybywgb25lLCBvciBtb3JlCisgICAgICogY2hhcmFjdGVycyBtYXkgYmUgbWF0Y2hlZC4KKyAgICAgKgorICAgICAqIE1hdGNoaW5nIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiBpcyBpbmRpY2F0ZWQgYnkgbGltaXQgPgorICAgICAqIG9mZnNldC4gIENoYXJhY3RlcnMgZnJvbSBvZmZzZXQgZm9yd2FyZHMgdG8gbGltaXQtMSB3aWxsIGJlCisgICAgICogY29uc2lkZXJlZCBmb3IgbWF0Y2hpbmcuCisgICAgICogCisgICAgICogTWF0Y2hpbmcgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uIGlzIGluZGljYXRlZCBieSBsaW1pdCA8CisgICAgICogb2Zmc2V0LiAgQ2hhcmFjdGVycyBmcm9tIG9mZnNldCBiYWNrd2FyZHMgdG8gbGltaXQrMSB3aWxsIGJlCisgICAgICogY29uc2lkZXJlZCBmb3IgbWF0Y2hpbmcuCisgICAgICoKKyAgICAgKiBJZiBsaW1pdCA9PSBvZmZzZXQgdGhlbiB0aGUgb25seSBtYXRjaCBwb3NzaWJsZSBpcyBhIHplcm8KKyAgICAgKiBjaGFyYWN0ZXIgbWF0Y2ggKHdoaWNoIHN1YmNsYXNzZXMgbWF5IGltcGxlbWVudCBpZiBkZXNpcmVkKS4KKyAgICAgKgorICAgICAqIElmIFVfTUFUQ0ggaXMgcmV0dXJuZWQsIHRoZW4gYXMgYSBzaWRlIGVmZmVjdCwgYWR2YW5jZSB0aGUKKyAgICAgKiBvZmZzZXQgcGFyYW1ldGVyIHRvIHRoZSBsaW1pdCBvZiB0aGUgbWF0Y2hlZCBzdWJzdHJpbmcuICBJbiB0aGUKKyAgICAgKiBmb3J3YXJkIGRpcmVjdGlvbiwgdGhpcyB3aWxsIGJlIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBtYXRjaGVkCisgICAgICogY2hhcmFjdGVyIHBsdXMgb25lLiAgSW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLCB0aGlzIHdpbGwgYmUgdGhlCisgICAgICogaW5kZXggb2YgdGhlIGxhc3QgbWF0Y2hlZCBjaGFyYWN0ZXIgbWludXMgb25lLgorICAgICAqCisgICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gYmUgbWF0Y2hlZAorICAgICAqIEBwYXJhbSBvZmZzZXQgb24gaW5wdXQsIHRoZSBpbmRleCBpbnRvIHRleHQgYXQgd2hpY2ggdG8gYmVnaW4KKyAgICAgKiBtYXRjaGluZy4gIE9uIG91dHB1dCwgdGhlIGxpbWl0IG9mIHRoZSBtYXRjaGVkIHRleHQuICBUaGUKKyAgICAgKiBudW1iZXIgb2YgbWF0Y2hlZCBjaGFyYWN0ZXJzIGlzIHRoZSBvdXRwdXQgdmFsdWUgb2Ygb2Zmc2V0CisgICAgICogbWludXMgdGhlIGlucHV0IHZhbHVlLiAgT2Zmc2V0IHNob3VsZCBhbHdheXMgcG9pbnQgdG8gdGhlCisgICAgICogSElHSCBTVVJST0dBVEUgKGxlYWRpbmcgY29kZSB1bml0KSBvZiBhIHBhaXIgb2Ygc3Vycm9nYXRlcywKKyAgICAgKiBib3RoIG9uIGVudHJ5IGFuZCB1cG9uIHJldHVybi4KKyAgICAgKiBAcGFyYW0gbGltaXQgdGhlIGxpbWl0IGluZGV4IG9mIHRleHQgdG8gYmUgbWF0Y2hlZC4gIEdyZWF0ZXIKKyAgICAgKiB0aGFuIG9mZnNldCBmb3IgYSBmb3J3YXJkIGRpcmVjdGlvbiBtYXRjaCwgbGVzcyB0aGFuIG9mZnNldCBmb3IKKyAgICAgKiBhIGJhY2t3YXJkIGRpcmVjdGlvbiBtYXRjaC4gIFRoZSBsYXN0IGNoYXJhY3RlciB0byBiZQorICAgICAqIGNvbnNpZGVyZWQgZm9yIG1hdGNoaW5nIHdpbGwgYmUgdGV4dC5jaGFyQXQobGltaXQtMSkgaW4gdGhlCisgICAgICogZm9yd2FyZCBkaXJlY3Rpb24gb3IgdGV4dC5jaGFyQXQobGltaXQrMSkgaW4gdGhlIGJhY2t3YXJkCisgICAgICogZGlyZWN0aW9uLgorICAgICAqIEBwYXJhbSBpbmNyZW1lbnRhbCBpZiBUUlVFLCB0aGVuIGFzc3VtZSBmdXJ0aGVyIGNoYXJhY3RlcnMgbWF5CisgICAgICogYmUgaW5zZXJ0ZWQgYXQgbGltaXQgYW5kIGNoZWNrIGZvciBwYXJ0aWFsIG1hdGNoaW5nLiAgT3RoZXJ3aXNlCisgICAgICogYXNzdW1lIHRoZSB0ZXh0IGFzIGdpdmVuIGlzIGNvbXBsZXRlLgorICAgICAqIEByZXR1cm4gYSBtYXRjaCBkZWdyZWUgdmFsdWUgaW5kaWNhdGluZyBhIGZ1bGwgbWF0Y2gsIGEgcGFydGlhbAorICAgICAqIG1hdGNoLCBvciBhIG1pc21hdGNoLiAgSWYgaW5jcmVtZW50YWwgaXMgRkFMU0UgdGhlbgorICAgICAqIFVfUEFSVElBTF9NQVRDSCBzaG91bGQgbmV2ZXIgYmUgcmV0dXJuZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBtYXRjaGVzKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGluY3JlbWVudGFsKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBtYXRjaGVyLiAgSWYgdGhlIHJlc3VsdCBvZgorICAgICAqIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQgdG8gdGhlIGFwcHJvcHJpYXRlIHBhcnNlciwgaXQKKyAgICAgKiB3aWxsIHByb2R1Y2UgYW5vdGhlciBtYXRjaGVyIHRoYXQgaXMgZXF1YWwgdG8gdGhpcyBvbmUuCisgICAgICogQHBhcmFtIGVzY2FwZVVucHJpbnRhYmxlIGlmIFRSVUUgdGhlbiBjb252ZXJ0IHVucHJpbnRhYmxlCisgICAgICogY2hhcmFjdGVyIHRvIHRoZWlyIGhleCBlc2NhcGUgcmVwcmVzZW50YXRpb25zLCBcXHV4eHh4IG9yCisgICAgICogXFxVeHh4eHh4eHguICBVbnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBvdGhlciB0aGFuCisgICAgICogVSswMDBBLCBVKzAwMjAuLlUrMDA3RS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIHRvUGF0dGVybihib29sZWFuIGVzY2FwZVVucHJpbnRhYmxlKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgVFJVRSBpZiB0aGlzIG1hdGNoZXIgd2lsbCBtYXRjaCBhIGNoYXJhY3RlciBjLCB3aGVyZSBjCisgICAgICogJiAweEZGID09IHYsIGF0IG9mZnNldCwgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uICh3aXRoIGxpbWl0ID4KKyAgICAgKiBvZmZzZXQpLiAgVGhpcyBpcyB1c2VkIGJ5IDx0dD5SdWxlQmFzZWRUcmFuc2xpdGVyYXRvcjwvdHQ+IGZvcgorICAgICAqIGluZGV4aW5nLgorICAgICAqCisgICAgICogPHA+Tm90ZTogIFRoaXMgQVBJIHVzZXMgYW4gaW50IGV2ZW4gdGhvdWdoIHRoZSB2YWx1ZSB3aWxsIGJlCisgICAgICogcmVzdHJpY3RlZCB0byA4IGJpdHMgaW4gb3JkZXIgdG8gYXZvaWQgY29tcGxpY2F0aW9ucyB3aXRoCisgICAgICogc2lnbmVkbmVzcyAoYnl0ZXMgY29udmVydCB0byBpbnRzIGluIHRoZSByYW5nZSAtMTI4Li4xMjcpLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIG1hdGNoZXNJbmRleFZhbHVlKGludCB2KTsKKworICAgIC8qKgorICAgICAqIFVuaW9uIHRoZSBzZXQgb2YgYWxsIGNoYXJhY3RlcnMgdGhhdCBtYXkgYmUgbWF0Y2hlZCBieSB0aGlzIG9iamVjdAorICAgICAqIGludG8gdGhlIGdpdmVuIHNldC4KKyAgICAgKiBAcGFyYW0gdG9VbmlvblRvIHRoZSBzZXQgaW50byB3aGljaCB0byB1bmlvbiB0aGUgc291cmNlIGNoYXJhY3RlcnMKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGFkZE1hdGNoU2V0VG8oVW5pY29kZVNldCB0b1VuaW9uVG8pOworfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZU5hbWVUcmFuc2xpdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZU5hbWVUcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3MzViNjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlTmFtZVRyYW5zbGl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVOYW1lVHJhbnNsaXRlcmF0b3IuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8wOS8wOSAxNjoxMTowNyAkIAorICogJFJldmlzaW9uOiAxLjkgJAorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnRleHQ7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgY29tLmlibS5pY3UubGFuZy4qOworCisvKioKKyAqIEEgdHJhbnNsaXRlcmF0b3IgdGhhdCBwZXJmb3JtcyBjaGFyYWN0ZXIgdG8gbmFtZSBtYXBwaW5nLgorICogSXQgZ2VuZXJhdGVzIHRoZSBQZXJsIHN5bnRheCBcTntuYW1lfS4KKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqLworY2xhc3MgVW5pY29kZU5hbWVUcmFuc2xpdGVyYXRvciBleHRlbmRzIFRyYW5zbGl0ZXJhdG9yIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgX0lEID0gIkFueS1OYW1lIjsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFTl9ERUxJTSA9ICJcXE57IjsKKyAgICBzdGF0aWMgZmluYWwgY2hhciBDTE9TRV9ERUxJTSA9ICd9JzsKKyAgICBzdGF0aWMgZmluYWwgaW50IE9QRU5fREVMSU1fTEVOID0gMzsKKworICAgIC8qKgorICAgICAqIFN5c3RlbSByZWdpc3RyYXRpb24gaG9vay4KKyAgICAgKi8KKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlcigpIHsKKyAgICAgICAgVHJhbnNsaXRlcmF0b3IucmVnaXN0ZXJGYWN0b3J5KF9JRCwgbmV3IFRyYW5zbGl0ZXJhdG9yLkZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgVHJhbnNsaXRlcmF0b3IgZ2V0SW5zdGFuY2UoU3RyaW5nIElEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmljb2RlTmFtZVRyYW5zbGl0ZXJhdG9yKG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgdHJhbnNsaXRlcmF0b3IuCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVOYW1lVHJhbnNsaXRlcmF0b3IoVW5pY29kZUZpbHRlciBmaWx0ZXIpIHsKKyAgICAgICAgc3VwZXIoX0lELCBmaWx0ZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudHMge0BsaW5rIFRyYW5zbGl0ZXJhdG9yI2hhbmRsZVRyYW5zbGl0ZXJhdGV9LgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVRyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIG9mZnNldHMsIGJvb2xlYW4gaXNJbmNyZW1lbnRhbCkgeworICAgICAgICBpbnQgY3Vyc29yID0gb2Zmc2V0cy5zdGFydDsKKyAgICAgICAgaW50IGxpbWl0ID0gb2Zmc2V0cy5saW1pdDsKKyAgICAgICAgCisgICAgICAgIFN0cmluZ0J1ZmZlciBzdHIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN0ci5hcHBlbmQoT1BFTl9ERUxJTSk7CisgICAgICAgIGludCBsZW47CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKGN1cnNvciA8IGxpbWl0KSB7CisgICAgICAgICAgICBpbnQgYyA9IHRleHQuY2hhcjMyQXQoY3Vyc29yKTsKKyAgICAgICAgICAgIGlmICgobmFtZT1VQ2hhcmFjdGVyLmdldEV4dGVuZGVkTmFtZShjKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0ci5zZXRMZW5ndGgoT1BFTl9ERUxJTV9MRU4pOworICAgICAgICAgICAgICAgIHN0ci5hcHBlbmQobmFtZSkuYXBwZW5kKENMT1NFX0RFTElNKTsKKworICAgICAgICAgICAgICAgIGludCBjbGVuID0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZShjdXJzb3IsIGN1cnNvcitjbGVuLCBzdHIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgbGVuID0gc3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGN1cnNvciArPSBsZW47IC8vIGFkdmFuY2UgY3Vyc29yIGJ5IDEgYW5kIGFkanVzdCBmb3IgbmV3IHRleHQKKyAgICAgICAgICAgICAgICBsaW1pdCArPSBsZW4tY2xlbjsgLy8gY2hhbmdlIGluIGxlbmd0aAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2N1cnNvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldHMuY29udGV4dExpbWl0ICs9IGxpbWl0IC0gb2Zmc2V0cy5saW1pdDsKKyAgICAgICAgb2Zmc2V0cy5saW1pdCA9IGxpbWl0OworICAgICAgICBvZmZzZXRzLnN0YXJ0ID0gY3Vyc29yOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVSZXBsYWNlci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZVJlcGxhY2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDljNGMzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVSZXBsYWNlci5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChjKSAyMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisqICAgYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMS8xNC8yMDAyICBhbGl1ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworLyoqCisgKiA8Y29kZT5Vbmljb2RlUmVwbGFjZXI8L2NvZGU+IGRlZmluZXMgYSBwcm90b2NvbCBmb3Igb2JqZWN0cyB0aGF0CisgKiByZXBsYWNlIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiBhIFJlcGxhY2VhYmxlIHN0cmluZyB3aXRoIG91dHB1dAorICogdGV4dC4gIFRoZSByZXBsYWNlbWVudCBpcyBkb25lIHZpYSB0aGUgUmVwbGFjZWFibGUgQVBJIHNvIGFzIHRvCisgKiBwcmVzZXJ2ZSBvdXQtb2YtYmFuZCBkYXRhLgorICogQGF1dGhvciBBbGFuIExpdQorICovCitpbnRlcmZhY2UgVW5pY29kZVJlcGxhY2VyIHsKKworICAgIC8qKgorICAgICAqIFJlcGxhY2UgY2hhcmFjdGVycyBpbiAndGV4dCcgZnJvbSAnc3RhcnQnIHRvICdsaW1pdCcgd2l0aCB0aGUKKyAgICAgKiBvdXRwdXQgdGV4dCBvZiB0aGlzIG9iamVjdC4gIFVwZGF0ZSB0aGUgJ2N1cnNvcicgcGFyYW1ldGVyIHRvCisgICAgICogZ2l2ZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGFuZCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAgKiByZXBsYWNlbWVudCB0ZXh0LgorICAgICAqCisgICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gYmUgbWF0Y2hlZAorICAgICAqIEBwYXJhbSBzdGFydCBpbmNsdXNpdmUgc3RhcnQgaW5kZXggb2YgdGV4dCB0byBiZSByZXBsYWNlZAorICAgICAqIEBwYXJhbSBsaW1pdCBleGNsdXNpdmUgZW5kIGluZGV4IG9mIHRleHQgdG8gYmUgcmVwbGFjZWQ7CisgICAgICogbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc3RhcnQKKyAgICAgKiBAcGFyYW0gY3Vyc29yIG91dHB1dCBwYXJhbWV0ZXIgZm9yIHRoZSBjdXJzb3IgcG9zaXRpb24uCisgICAgICogTm90IGFsbCByZXBsYWNlciBvYmplY3RzIHdpbGwgdXBkYXRlIHRoaXMsIGJ1dCBpbiBhIGNvbXBsZXRlCisgICAgICogdHJlZSBvZiByZXBsYWNlciBvYmplY3RzLCByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBvdXRwdXQgc2lkZQorICAgICAqIG9mIGEgdHJhbnNsaXRlcmF0aW9uIHJ1bGUsIGF0IGxlYXN0IG9uZSBtdXN0IHVwZGF0ZSBpdC4KKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgMTYtYml0IGNvZGUgdW5pdHMgaW4gdGhlIHRleHQgcmVwbGFjaW5nCisgICAgICogdGhlIGNoYXJhY3RlcnMgYXQgb2Zmc2V0cyBzdGFydC4uKGxpbWl0LTEpIGluIHRleHQKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IHJlcGxhY2UoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIGN1cnNvcik7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcmVwbGFjZXIuICBJZiB0aGUKKyAgICAgKiByZXN1bHQgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byB0aGUgYXBwcm9wcmlhdGUKKyAgICAgKiBwYXJzZXIsIHR5cGljYWxseSBUcmFuc2xpdGVyYXRvclBhcnNlciwgaXQgd2lsbCBwcm9kdWNlIGFub3RoZXIKKyAgICAgKiByZXBsYWNlciB0aGF0IGlzIGVxdWFsIHRvIHRoaXMgb25lLgorICAgICAqIEBwYXJhbSBlc2NhcGVVbnByaW50YWJsZSBpZiBUUlVFIHRoZW4gY29udmVydCB1bnByaW50YWJsZQorICAgICAqIGNoYXJhY3RlciB0byB0aGVpciBoZXggZXNjYXBlIHJlcHJlc2VudGF0aW9ucywgXFx1eHh4eCBvcgorICAgICAqIFxcVXh4eHh4eHh4LiAgVW5wcmludGFibGUgY2hhcmFjdGVycyBhcmUgZGVmaW5lZCBieQorICAgICAqIFV0aWxpdHkuaXNVbnByaW50YWJsZSgpLgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgdG9SZXBsYWNlclBhdHRlcm4oYm9vbGVhbiBlc2NhcGVVbnByaW50YWJsZSk7CisKKyAgICAvKioKKyAgICAgKiBVbmlvbiB0aGUgc2V0IG9mIGFsbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IG91dHB1dCBieSB0aGlzIG9iamVjdAorICAgICAqIGludG8gdGhlIGdpdmVuIHNldC4KKyAgICAgKiBAcGFyYW0gdG9VbmlvblRvIHRoZSBzZXQgaW50byB3aGljaCB0byB1bmlvbiB0aGUgb3V0cHV0IGNoYXJhY3RlcnMKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhZGRSZXBsYWNlbWVudFNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKTsKK30KKworLy9lb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVTZXQuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVTZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZjBlMDhlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZVNldC5qYXZhCkBAIC0wLDAgKzEsMzAwNyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZVNldC5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjM6MTggJAorICogJFJldmlzaW9uOiAxLjgyICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS50ZXh0OworCitpbXBvcnQgamF2YS50ZXh0Lio7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVQcm9wZXJ0eUFsaWFzZXM7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5Tb3J0ZWRTZXRSZWxhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKKy8qKgorICogQSBtdXRhYmxlIHNldCBvZiBVbmljb2RlIGNoYXJhY3RlcnMgYW5kIG11bHRpY2hhcmFjdGVyIHN0cmluZ3MuICBPYmplY3RzIG9mIHRoaXMgY2xhc3MKKyAqIHJlcHJlc2VudCA8ZW0+Y2hhcmFjdGVyIGNsYXNzZXM8L2VtPiB1c2VkIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisgKiBBIGNoYXJhY3RlciBzcGVjaWZpZXMgYSBzdWJzZXQgb2YgVW5pY29kZSBjb2RlIHBvaW50cy4gIExlZ2FsCisgKiBjb2RlIHBvaW50cyBhcmUgVSswMDAwIHRvIFUrMTBGRkZGLCBpbmNsdXNpdmUuCisgKgorICogPHA+VGhlIFVuaWNvZGVTZXQgY2xhc3MgaXMgbm90IGRlc2lnbmVkIHRvIGJlIHN1YmNsYXNzZWQuCisgKgorICogPHA+PGNvZGU+VW5pY29kZVNldDwvY29kZT4gc3VwcG9ydHMgdHdvIEFQSXMuIFRoZSBmaXJzdCBpcyB0aGUKKyAqIDxlbT5vcGVyYW5kPC9lbT4gQVBJIHRoYXQgYWxsb3dzIHRoZSBjYWxsZXIgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBvZgorICogYSA8Y29kZT5Vbmljb2RlU2V0PC9jb2RlPiBvYmplY3QuIEl0IGNvbmZvcm1zIHRvIEphdmEgMidzCisgKiA8Y29kZT5qYXZhLnV0aWwuU2V0PC9jb2RlPiBpbnRlcmZhY2UsIGFsdGhvdWdoCisgKiA8Y29kZT5Vbmljb2RlU2V0PC9jb2RlPiBkb2VzIG5vdCBhY3R1YWxseSBpbXBsZW1lbnQgdGhhdAorICogaW50ZXJmYWNlLiBBbGwgbWV0aG9kcyBvZiA8Y29kZT5TZXQ8L2NvZGU+IGFyZSBzdXBwb3J0ZWQsIHdpdGggdGhlCisgKiBtb2RpZmljYXRpb24gdGhhdCB0aGV5IHRha2UgYSBjaGFyYWN0ZXIgcmFuZ2Ugb3Igc2luZ2xlIGNoYXJhY3RlcgorICogaW5zdGVhZCBvZiBhbiA8Y29kZT5PYmplY3Q8L2NvZGU+LCBhbmQgdGhleSB0YWtlIGEKKyAqIDxjb2RlPlVuaWNvZGVTZXQ8L2NvZGU+IGluc3RlYWQgb2YgYSA8Y29kZT5Db2xsZWN0aW9uPC9jb2RlPi4gIFRoZQorICogb3BlcmFuZCBBUEkgbWF5IGJlIHRob3VnaHQgb2YgaW4gdGVybXMgb2YgYm9vbGVhbiBsb2dpYzogYSBib29sZWFuCisgKiBPUiBpcyBpbXBsZW1lbnRlZCBieSA8Y29kZT5hZGQ8L2NvZGU+LCBhIGJvb2xlYW4gQU5EIGlzIGltcGxlbWVudGVkCisgKiBieSA8Y29kZT5yZXRhaW48L2NvZGU+LCBhIGJvb2xlYW4gWE9SIGlzIGltcGxlbWVudGVkIGJ5CisgKiA8Y29kZT5jb21wbGVtZW50PC9jb2RlPiB0YWtpbmcgYW4gYXJndW1lbnQsIGFuZCBhIGJvb2xlYW4gTk9UIGlzCisgKiBpbXBsZW1lbnRlZCBieSA8Y29kZT5jb21wbGVtZW50PC9jb2RlPiB3aXRoIG5vIGFyZ3VtZW50LiAgSW4gdGVybXMKKyAqIG9mIHRyYWRpdGlvbmFsIHNldCB0aGVvcnkgZnVuY3Rpb24gbmFtZXMsIDxjb2RlPmFkZDwvY29kZT4gaXMgYQorICogdW5pb24sIDxjb2RlPnJldGFpbjwvY29kZT4gaXMgYW4gaW50ZXJzZWN0aW9uLCA8Y29kZT5yZW1vdmU8L2NvZGU+CisgKiBpcyBhbiBhc3ltbWV0cmljIGRpZmZlcmVuY2UsIGFuZCA8Y29kZT5jb21wbGVtZW50PC9jb2RlPiB3aXRoIG5vCisgKiBhcmd1bWVudCBpcyBhIHNldCBjb21wbGVtZW50IHdpdGggcmVzcGVjdCB0byB0aGUgc3VwZXJzZXQgcmFuZ2UKKyAqIDxjb2RlPk1JTl9WQUxVRS1NQVhfVkFMVUU8L2NvZGU+CisgKgorICogPHA+VGhlIHNlY29uZCBBUEkgaXMgdGhlCisgKiA8Y29kZT5hcHBseVBhdHRlcm4oKTwvY29kZT4vPGNvZGU+dG9QYXR0ZXJuKCk8L2NvZGU+IEFQSSBmcm9tIHRoZQorICogPGNvZGU+amF2YS50ZXh0LkZvcm1hdDwvY29kZT4tZGVyaXZlZCBjbGFzc2VzLiAgVW5saWtlIHRoZQorICogbWV0aG9kcyB0aGF0IGFkZCBjaGFyYWN0ZXJzLCBhZGQgY2F0ZWdvcmllcywgYW5kIGNvbnRyb2wgdGhlIGxvZ2ljCisgKiBvZiB0aGUgc2V0LCB0aGUgbWV0aG9kIDxjb2RlPmFwcGx5UGF0dGVybigpPC9jb2RlPiBzZXRzIGFsbAorICogYXR0cmlidXRlcyBvZiBhIDxjb2RlPlVuaWNvZGVTZXQ8L2NvZGU+IGF0IG9uY2UsIGJhc2VkIG9uIGEKKyAqIHN0cmluZyBwYXR0ZXJuLgorICoKKyAqIDxwPjxiPlBhdHRlcm4gc3ludGF4PC9iPjwvcD4KKyAqCisgKiBQYXR0ZXJucyBhcmUgYWNjZXB0ZWQgYnkgdGhlIGNvbnN0cnVjdG9ycyBhbmQgdGhlCisgKiA8Y29kZT5hcHBseVBhdHRlcm4oKTwvY29kZT4gbWV0aG9kcyBhbmQgcmV0dXJuZWQgYnkgdGhlCisgKiA8Y29kZT50b1BhdHRlcm4oKTwvY29kZT4gbWV0aG9kLiAgVGhlc2UgcGF0dGVybnMgZm9sbG93IGEgc3ludGF4CisgKiBzaW1pbGFyIHRvIHRoYXQgZW1wbG95ZWQgYnkgdmVyc2lvbiA4IHJlZ3VsYXIgZXhwcmVzc2lvbiBjaGFyYWN0ZXIKKyAqIGNsYXNzZXMuICBIZXJlIGFyZSBzb21lIHNpbXBsZSBleGFtcGxlczoKKyAqCisgKiA8YmxvY2txdW90ZT4KKyAqICAgPHRhYmxlPgorICogICAgIDx0ciBhbGlnbj0idG9wIj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48Y29kZT5bXTwvY29kZT48L3RkPgorICogICAgICAgPHRkIHZhbGlnbj0idG9wIj5ObyBjaGFyYWN0ZXJzPC90ZD4KKyAqICAgICA8L3RyPjx0ciBhbGlnbj0idG9wIj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48Y29kZT5bYV08L2NvZGU+PC90ZD4KKyAqICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIGNoYXJhY3RlciAnYSc8L3RkPgorICogICAgIDwvdHI+PHRyIGFsaWduPSJ0b3AiPgorICogICAgICAgPHRkIG5vd3JhcCB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxjb2RlPlthZV08L2NvZGU+PC90ZD4KKyAqICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIGNoYXJhY3RlcnMgJ2EnIGFuZCAnZSc8L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIG5vd3JhcCB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxjb2RlPlthLWVdPC9jb2RlPjwvdGQ+CisgKiAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBjaGFyYWN0ZXJzICdhJyB0aHJvdWdoICdlJyBpbmNsdXNpdmUsIGluIFVuaWNvZGUgY29kZSAKKyAqICAgICAgIHBvaW50IG9yZGVyPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48Y29kZT5bXHUwMDVDdTRFMDFdPC9jb2RlPjwvdGQ+CisgKiAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBjaGFyYWN0ZXIgVSs0RTAxPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48Y29kZT5bYXthYn17YWN9XTwvY29kZT48L3RkPgorICogICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgY2hhcmFjdGVyICdhJyBhbmQgdGhlIG11bHRpY2hhcmFjdGVyIHN0cmluZ3MgJnF1b3Q7YWImcXVvdDsgYW5kIAorICogICAgICAgJnF1b3Q7YWMmcXVvdDs8L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkIG5vd3JhcCB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxjb2RlPltccHtMdX1dPC9jb2RlPjwvdGQ+CisgKiAgICAgICA8dGQgdmFsaWduPSJ0b3AiPkFsbCBjaGFyYWN0ZXJzIGluIHRoZSBnZW5lcmFsIGNhdGVnb3J5IFVwcGVyY2FzZSBMZXR0ZXI8L3RkPgorICogICAgIDwvdHI+CisgKiAgIDwvdGFibGU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKgorICogQW55IGNoYXJhY3RlciBtYXkgYmUgcHJlY2VkZWQgYnkgYSBiYWNrc2xhc2ggaW4gb3JkZXIgdG8gcmVtb3ZlIGFueSBzcGVjaWFsCisgKiBtZWFuaW5nLiAgV2hpdGUgc3BhY2UgY2hhcmFjdGVycywgYXMgZGVmaW5lZCBieSBVQ2hhcmFjdGVyUHJvcGVydHkuaXNSdWxlV2hpdGVTcGFjZSgpLCBhcmUKKyAqIGlnbm9yZWQsIHVubGVzcyB0aGV5IGFyZSBlc2NhcGVkLgorICoKKyAqIDxwPlByb3BlcnR5IHBhdHRlcm5zIHNwZWNpZnkgYSBzZXQgb2YgY2hhcmFjdGVycyBoYXZpbmcgYSBjZXJ0YWluCisgKiBwcm9wZXJ0eSBhcyBkZWZpbmVkIGJ5IHRoZSBVbmljb2RlIHN0YW5kYXJkLiAgQm90aCB0aGUgUE9TSVgtbGlrZQorICogIls6THU6XSIgYW5kIHRoZSBQZXJsLWxpa2Ugc3ludGF4ICJccHtMdX0iIGFyZSByZWNvZ25pemVkLiAgRm9yIGEKKyAqIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3BlcnR5IHBhdHRlcm5zLCBzZWUgdGhlIFVzZXIncyBHdWlkZQorICogZm9yIFVuaWNvZGVTZXQgYXQKKyAqIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvdXNlcmd1aWRlL3VuaWNvZGVzZXQuaHRtbCI+CisgKiBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1L3VzZXJndWlkZS91bmljb2Rlc2V0Lmh0bWw8L2E+LgorICogQWN0dWFsIGRldGVybWluYXRpb24gb2YgcHJvcGVydHkgZGF0YSBpcyBkZWZpbmVkIGJ5IHRoZSB1bmRlcmx5aW5nCisgKiBVbmljb2RlIGRhdGFiYXNlIGFzIGltcGxlbWVudGVkIGJ5IFVDaGFyYWN0ZXIuCisgKgorICogPHA+UGF0dGVybnMgc3BlY2lmeSBpbmRpdmlkdWFsIGNoYXJhY3RlcnMsIHJhbmdlcyBvZiBjaGFyYWN0ZXJzLCBhbmQKKyAqIFVuaWNvZGUgcHJvcGVydHkgc2V0cy4gIFdoZW4gZWxlbWVudHMgYXJlIGNvbmNhdGVuYXRlZCwgdGhleQorICogc3BlY2lmeSB0aGVpciB1bmlvbi4gIFRvIGNvbXBsZW1lbnQgYSBzZXQsIHBsYWNlIGEgJ14nIGltbWVkaWF0ZWx5CisgKiBhZnRlciB0aGUgb3BlbmluZyAnWycuICBQcm9wZXJ0eSBwYXR0ZXJucyBhcmUgaW52ZXJ0ZWQgYnkgbW9kaWZ5aW5nCisgKiB0aGVpciBkZWxpbWl0ZXJzOyAiWzpeZm9vXSIgYW5kICJcUHtmb299Ii4gIEluIGFueSBvdGhlciBsb2NhdGlvbiwKKyAqICdeJyBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nLgorICoKKyAqIDxwPlJhbmdlcyBhcmUgaW5kaWNhdGVkIGJ5IHBsYWNpbmcgdHdvIGEgJy0nIGJldHdlZW4gdHdvCisgKiBjaGFyYWN0ZXJzLCBhcyBpbiAiYS16Ii4gIFRoaXMgc3BlY2lmaWVzIHRoZSByYW5nZSBvZiBhbGwKKyAqIGNoYXJhY3RlcnMgZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQsIGluIFVuaWNvZGUgb3JkZXIuICBJZiB0aGUKKyAqIGxlZnQgY2hhcmFjdGVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAqIHJpZ2h0IGNoYXJhY3RlciBpdCBpcyBhIHN5bnRheCBlcnJvci4gIElmIGEgJy0nIG9jY3VycyBhcyB0aGUgZmlyc3QKKyAqIGNoYXJhY3RlciBhZnRlciB0aGUgb3BlbmluZyAnWycgb3IgJ1teJywgb3IgaWYgaXQgb2NjdXJzIGFzIHRoZQorICogbGFzdCBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjbG9zaW5nICddJywgdGhlbiBpdCBpcyB0YWtlbiBhcyBhCisgKiBsaXRlcmFsLiAgVGh1cyAiW2FcdTAwNUMtYl0iLCAiWy1hYl0iLCBhbmQgIlthYi1dIiBhbGwgaW5kaWNhdGUgdGhlIHNhbWUKKyAqIHNldCBvZiB0aHJlZSBjaGFyYWN0ZXJzLCAnYScsICdiJywgYW5kICctJy4KKyAqCisgKiA8cD5TZXRzIG1heSBiZSBpbnRlcnNlY3RlZCB1c2luZyB0aGUgJyYnIG9wZXJhdG9yIG9yIHRoZSBhc3ltbWV0cmljCisgKiBzZXQgZGlmZmVyZW5jZSBtYXkgYmUgdGFrZW4gdXNpbmcgdGhlICctJyBvcGVyYXRvciwgZm9yIGV4YW1wbGUsCisgKiAiW1s6TDpdJltcdTAwNUN1MDAwMC1cdTAwNUN1MEZGRl1dIiBpbmRpY2F0ZXMgdGhlIHNldCBvZiBhbGwgVW5pY29kZSBsZXR0ZXJzCisgKiB3aXRoIHZhbHVlcyBsZXNzIHRoYW4gNDA5Ni4gIE9wZXJhdG9ycyAoJyYnIGFuZCAnfCcpIGhhdmUgZXF1YWwKKyAqIHByZWNlZGVuY2UgYW5kIGJpbmQgbGVmdC10by1yaWdodC4gIFRodXMKKyAqICJbWzpMOl0tW2Etel0tW1x1MDA1Q3UwMTAwLVx1MDA1Q3UwMUZGXV0iIGlzIGVxdWl2YWxlbnQgdG8KKyAqICJbW1s6TDpdLVthLXpdXS1bXHUwMDVDdTAxMDAtXHUwMDVDdTAxRkZdXSIuICBUaGlzIG9ubHkgcmVhbGx5IG1hdHRlcnMgZm9yCisgKiBkaWZmZXJlbmNlOyBpbnRlcnNlY3Rpb24gaXMgY29tbXV0YXRpdmUuCisgKgorICogPHRhYmxlPgorICogPHRyIHZhbGlnbj10b3A+PHRkIG5vd3JhcD48Y29kZT5bYV08L2NvZGU+PHRkPlRoZSBzZXQgY29udGFpbmluZyAnYScKKyAqIDx0ciB2YWxpZ249dG9wPjx0ZCBub3dyYXA+PGNvZGU+W2Etel08L2NvZGU+PHRkPlRoZSBzZXQgY29udGFpbmluZyAnYScKKyAqIHRocm91Z2ggJ3onIGFuZCBhbGwgbGV0dGVycyBpbiBiZXR3ZWVuLCBpbiBVbmljb2RlIG9yZGVyCisgKiA8dHIgdmFsaWduPXRvcD48dGQgbm93cmFwPjxjb2RlPlteYS16XTwvY29kZT48dGQ+VGhlIHNldCBjb250YWluaW5nCisgKiBhbGwgY2hhcmFjdGVycyBidXQgJ2EnIHRocm91Z2ggJ3onLAorICogdGhhdCBpcywgVSswMDAwIHRocm91Z2ggJ2EnLTEgYW5kICd6JysxIHRocm91Z2ggVSsxMEZGRkYKKyAqIDx0ciB2YWxpZ249dG9wPjx0ZCBub3dyYXA+PGNvZGU+W1s8ZW0+cGF0MTwvZW0+XVs8ZW0+cGF0MjwvZW0+XV08L2NvZGU+CisgKiA8dGQ+VGhlIHVuaW9uIG9mIHNldHMgc3BlY2lmaWVkIGJ5IDxlbT5wYXQxPC9lbT4gYW5kIDxlbT5wYXQyPC9lbT4KKyAqIDx0ciB2YWxpZ249dG9wPjx0ZCBub3dyYXA+PGNvZGU+W1s8ZW0+cGF0MTwvZW0+XSZbPGVtPnBhdDI8L2VtPl1dPC9jb2RlPgorICogPHRkPlRoZSBpbnRlcnNlY3Rpb24gb2Ygc2V0cyBzcGVjaWZpZWQgYnkgPGVtPnBhdDE8L2VtPiBhbmQgPGVtPnBhdDI8L2VtPgorICogPHRyIHZhbGlnbj10b3A+PHRkIG5vd3JhcD48Y29kZT5bWzxlbT5wYXQxPC9lbT5dLVs8ZW0+cGF0MjwvZW0+XV08L2NvZGU+CisgKiA8dGQ+VGhlIGFzeW1tZXRyaWMgZGlmZmVyZW5jZSBvZiBzZXRzIHNwZWNpZmllZCBieSA8ZW0+cGF0MTwvZW0+IGFuZAorICogPGVtPnBhdDI8L2VtPgorICogPHRyIHZhbGlnbj10b3A+PHRkIG5vd3JhcD48Y29kZT5bOkx1Ol0gb3IgXHB7THV9PC9jb2RlPgorICogPHRkPlRoZSBzZXQgb2YgY2hhcmFjdGVycyBoYXZpbmcgdGhlIHNwZWNpZmllZAorICogVW5pY29kZSBwcm9wZXJ0eTsgaW4KKyAqIHRoaXMgY2FzZSwgVW5pY29kZSB1cHBlcmNhc2UgbGV0dGVycworICogPHRyIHZhbGlnbj10b3A+PHRkIG5vd3JhcD48Y29kZT5bOl5MdTpdIG9yIFxQe0x1fTwvY29kZT4KKyAqIDx0ZD5UaGUgc2V0IG9mIGNoYXJhY3RlcnMgPGVtPm5vdDwvZW0+IGhhdmluZyB0aGUgZ2l2ZW4KKyAqIFVuaWNvZGUgcHJvcGVydHkKKyAqIDwvdGFibGU+CisgKgorICogPHA+PGI+V2FybmluZzwvYj46IHlvdSBjYW5ub3QgYWRkIGFuIGVtcHR5IHN0cmluZyAoIiIpIHRvIGEgVW5pY29kZVNldC48L3A+CisgKgorICogPHA+PGI+Rm9ybWFsIHN5bnRheDwvYj48L3A+CisgKgorICogPGJsb2NrcXVvdGU+CisgKiAgIDx0YWJsZT4KKyAqICAgICA8dHIgYWxpZ249InRvcCI+CisgKiAgICAgICA8dGQgbm93cmFwIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhdHRlcm4gOj0mbmJzcDsgPC9jb2RlPjwvdGQ+CisgKiAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxjb2RlPignWycgJ14nPyBpdGVtKiAnXScpIHwKKyAqICAgICAgIHByb3BlcnR5PC9jb2RlPjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHIgYWxpZ249InRvcCI+CisgKiAgICAgICA8dGQgbm93cmFwIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjxjb2RlPml0ZW0gOj0mbmJzcDsgPC9jb2RlPjwvdGQ+CisgKiAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxjb2RlPmNoYXIgfCAoY2hhciAnLScgY2hhcikgfCBwYXR0ZXJuLWV4cHI8YnI+CisgKiAgICAgICA8L2NvZGU+PC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0ciBhbGlnbj0idG9wIj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PGNvZGU+cGF0dGVybi1leHByIDo9Jm5ic3A7IDwvY29kZT48L3RkPgorICogICAgICAgPHRkIHZhbGlnbj0idG9wIj48Y29kZT5wYXR0ZXJuIHwgcGF0dGVybi1leHByIHBhdHRlcm4gfAorICogICAgICAgcGF0dGVybi1leHByIG9wIHBhdHRlcm48YnI+CisgKiAgICAgICA8L2NvZGU+PC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0ciBhbGlnbj0idG9wIj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PGNvZGU+b3AgOj0mbmJzcDsgPC9jb2RlPjwvdGQ+CisgKiAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxjb2RlPicmYW1wOycgfCAnLSc8YnI+CisgKiAgICAgICA8L2NvZGU+PC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0ciBhbGlnbj0idG9wIj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PGNvZGU+c3BlY2lhbCA6PSZuYnNwOyA8L2NvZGU+PC90ZD4KKyAqICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGNvZGU+J1snIHwgJ10nIHwgJy0nPGJyPgorICogICAgICAgPC9jb2RlPjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHIgYWxpZ249InRvcCI+CisgKiAgICAgICA8dGQgbm93cmFwIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjxjb2RlPmNoYXIgOj0mbmJzcDsgPC9jb2RlPjwvdGQ+CisgKiAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxlbT5hbnkgY2hhcmFjdGVyIHRoYXQgaXMgbm90PC9lbT48Y29kZT4gc3BlY2lhbDxicj4KKyAqICAgICAgIHwgKCdcdTAwNUMnIDwvY29kZT48ZW0+YW55IGNoYXJhY3RlcjwvZW0+PGNvZGU+KTxicj4KKyAqICAgICAgIHwgKCcmIzkyO3UnIGhleCBoZXggaGV4IGhleCk8YnI+CisgKiAgICAgICA8L2NvZGU+PC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0ciBhbGlnbj0idG9wIj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PGNvZGU+aGV4IDo9Jm5ic3A7IDwvY29kZT48L3RkPgorICogICAgICAgPHRkIHZhbGlnbj0idG9wIj48ZW0+YW55IGNoYXJhY3RlciBmb3Igd2hpY2gKKyAqICAgICAgIDwvZW0+PGNvZGU+Q2hhcmFjdGVyLmRpZ2l0KGMsIDE2KTwvY29kZT48ZW0+CisgKiAgICAgICByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHJlc3VsdDwvZW0+PC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvcGVydHkgOj0mbmJzcDsgPC9jb2RlPjwvdGQ+CisgKiAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxlbT5hIFVuaWNvZGUgcHJvcGVydHkgc2V0IHBhdHRlcm48L3RkPgorICogICAgIDwvdHI+CisgKiAgIDwvdGFibGU+CisgKiAgIDxicj4KKyAqICAgPHRhYmxlIGJvcmRlcj0iMSI+CisgKiAgICAgPHRyPgorICogICAgICAgPHRkPkxlZ2VuZDogPHRhYmxlPgorICogICAgICAgICA8dHI+CisgKiAgICAgICAgICAgPHRkIG5vd3JhcCB2YWxpZ249InRvcCI+PGNvZGU+YSA6PSBiPC9jb2RlPjwvdGQ+CisgKiAgICAgICAgICAgPHRkIHdpZHRoPSIyMCIgdmFsaWduPSJ0b3AiPiZuYnNwOyA8L3RkPgorICogICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGNvZGU+YTwvY29kZT4gbWF5IGJlIHJlcGxhY2VkIGJ5IDxjb2RlPmI8L2NvZGU+IDwvdGQ+CisgKiAgICAgICAgIDwvdHI+CisgKiAgICAgICAgIDx0cj4KKyAqICAgICAgICAgICA8dGQgbm93cmFwIHZhbGlnbj0idG9wIj48Y29kZT5hPzwvY29kZT48L3RkPgorICogICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PC90ZD4KKyAqICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPnplcm8gb3Igb25lIGluc3RhbmNlIG9mIDxjb2RlPmE8L2NvZGU+PGJyPgorICogICAgICAgICAgIDwvdGQ+CisgKiAgICAgICAgIDwvdHI+CisgKiAgICAgICAgIDx0cj4KKyAqICAgICAgICAgICA8dGQgbm93cmFwIHZhbGlnbj0idG9wIj48Y29kZT5hKjwvY29kZT48L3RkPgorICogICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PC90ZD4KKyAqICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPm9uZSBvciBtb3JlIGluc3RhbmNlcyBvZiA8Y29kZT5hPC9jb2RlPjxicj4KKyAqICAgICAgICAgICA8L3RkPgorICogICAgICAgICA8L3RyPgorICogICAgICAgICA8dHI+CisgKiAgICAgICAgICAgPHRkIG5vd3JhcCB2YWxpZ249InRvcCI+PGNvZGU+YSB8IGI8L2NvZGU+PC90ZD4KKyAqICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjwvdGQ+CisgKiAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5laXRoZXIgPGNvZGU+YTwvY29kZT4gb3IgPGNvZGU+YjwvY29kZT48YnI+CisgKiAgICAgICAgICAgPC90ZD4KKyAqICAgICAgICAgPC90cj4KKyAqICAgICAgICAgPHRyPgorICogICAgICAgICAgIDx0ZCBub3dyYXAgdmFsaWduPSJ0b3AiPjxjb2RlPidhJzwvY29kZT48L3RkPgorICogICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PC90ZD4KKyAqICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPnRoZSBsaXRlcmFsIHN0cmluZyBiZXR3ZWVuIHRoZSBxdW90ZXMgPC90ZD4KKyAqICAgICAgICAgPC90cj4KKyAqICAgICAgIDwvdGFibGU+CisgKiAgICAgICA8L3RkPgorICogICAgIDwvdHI+CisgKiAgIDwvdGFibGU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKgorICogQGF1dGhvciBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBjbGFzcyBVbmljb2RlU2V0IGV4dGVuZHMgVW5pY29kZUZpbHRlciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9XID0gMHgwMDAwMDA7IC8vIExPVyA8PSBhbGwgdmFsaWQgdmFsdWVzLiBaRVJPIGZvciBjb2RlcG9pbnRzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhJR0ggPSAweDExMDAwMDsgLy8gSElHSCA+IGFsbCB2YWxpZCB2YWx1ZXMuIDEwMDAwIGZvciBjb2RlIHVuaXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTEwMDAwIGZvciBjb2RlcG9pbnRzCisKKyAgICAvKioKKyAgICAgKiBNaW5pbXVtIHZhbHVlIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiBhIFVuaWNvZGVTZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOX1ZBTFVFID0gTE9XOworCisgICAgLyoqCisgICAgICogTWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gYSBVbmljb2RlU2V0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9WQUxVRSA9IEhJR0ggLSAxOworCisgICAgcHJpdmF0ZSBpbnQgbGVuOyAgICAgIC8vIGxlbmd0aCB1c2VkOyBsaXN0IG1heSBiZSBsb25nZXIgdG8gbWluaW1pemUgcmVhbGxvY3MKKyAgICBwcml2YXRlIGludFtdIGxpc3Q7ICAgLy8gTVVTVCBiZSB0ZXJtaW5hdGVkIHdpdGggSElHSAorICAgIHByaXZhdGUgaW50W10gcmFuZ2VMaXN0OyAvLyBpbnRlcm5hbCBidWZmZXIKKyAgICBwcml2YXRlIGludFtdIGJ1ZmZlcjsgLy8gaW50ZXJuYWwgYnVmZmVyCisgICAgCisgICAgLy8gTk9URTogbm9ybWFsbHkgdGhlIGZpZWxkIHNob3VsZCBiZSBvZiB0eXBlIFNvcnRlZFNldDsgYnV0IHRoYXQgaXMgbWlzc2luZyBhIHB1YmxpYyBjbG9uZSEhCisgICAgLy8gaXMgbm90IHByaXZhdGUgc28gdGhhdCBVbmljb2RlU2V0SXRlcmF0b3IgY2FuIGdldCBhY2Nlc3MKKyAgICBUcmVlU2V0IHN0cmluZ3MgPSBuZXcgVHJlZVNldCgpOworCisgICAgLyoqCisgICAgICogVGhlIHBhdHRlcm4gcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQuICBUaGlzIG1heSBub3QgYmUgdGhlCisgICAgICogbW9zdCBlY29ub21pY2FsIHBhdHRlcm4uICBJdCBpcyB0aGUgcGF0dGVybiBzdXBwbGllZCB0bworICAgICAqIGFwcGx5UGF0dGVybigpLCB3aXRoIHZhcmlhYmxlcyBzdWJzdGl0dXRlZCBhbmQgd2hpdGVzcGFjZQorICAgICAqIHJlbW92ZWQuICBGb3Igc2V0cyBjb25zdHJ1Y3RlZCB3aXRob3V0IGFwcGx5UGF0dGVybigpLCBvcgorICAgICAqIG1vZGlmaWVkIHVzaW5nIHRoZSBub24tcGF0dGVybiBBUEksIHRoaXMgc3RyaW5nIHdpbGwgYmUgbnVsbCwKKyAgICAgKiBpbmRpY2F0aW5nIHRoYXQgdG9QYXR0ZXJuKCkgbXVzdCBnZW5lcmF0ZSBhIHBhdHRlcm4KKyAgICAgKiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBpbnZlcnNpb24gbGlzdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBwYXQgPSBudWxsOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVJUX0VYVFJBID0gMTY7ICAgICAgICAgLy8gaW5pdGlhbCBzdG9yYWdlLiBNdXN0IGJlID49IDAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR1JPV19FWFRSQSA9IFNUQVJUX0VYVFJBOyAvLyBleHRyYSBhbW91bnQgZm9yIGdyb3d0aC4gTXVzdCBiZSA+PSAwCisKKyAgICAvLyBTcGVjaWFsIHByb3BlcnR5IHNldCBJRHMKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5ZX0lEICAgPSAiQU5ZIjsgICAvLyBbXHUwMDAwLVxVMDAxMEZGRkZdCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFTQ0lJX0lEID0gIkFTQ0lJIjsgLy8gW1x1MDAwMC1cdTAwN0ZdCisKKyAgICAvKioKKyAgICAgKiBBIHNldCBvZiBhbGwgY2hhcmFjdGVycyBfZXhjZXB0XyB0aGUgc2Vjb25kIHRocm91Z2ggbGFzdCBjaGFyYWN0ZXJzIG9mCisgICAgICogY2VydGFpbiByYW5nZXMuICBUaGVzZSByYW5nZXMgYXJlIHJhbmdlcyBvZiBjaGFyYWN0ZXJzIHdob3NlCisgICAgICogcHJvcGVydGllcyBhcmUgYWxsIGV4YWN0bHkgYWxpa2UsIGUuZy4gQ0pLIElkZW9ncmFwaHMgZnJvbQorICAgICAqIFUrNEUwMCB0byBVKzlGQTUuCisgICAgICoKKyAgICAgKiBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBhbiBBUEkgY2FsbCB3aGVuIHN1Y2ggQVBJIGlzIGltcGxlbWVudGVkLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFVuaWNvZGVTZXQgSU5DTFVTSU9OUyA9CisgICAgICAgIG5ldyBVbmljb2RlU2V0KCJbXlxcdTM0MDEtXFx1NERCNSBcXHU0RTAxLVxcdTlGQTUgXFx1QUMwMS1cXHVEN0EzIFxcdUQ4MDEtXFx1REI3RiBcXHVEQjgxLVxcdURCRkYgXFx1REMwMS1cXHVERkZGIFxcdUUwMDEtXFx1RjhGRiBcXFUwMDAxMDQ0Ri1cXFUwMDAxQ0ZGRiBcXFUwMDAxRDgwMS1cXFUwMDAxRkZGRiBcXFUwMDAyMDAwMS1cXFUwMDAyQTZENiBcXFUwMDAyQTZEOC1cXFUwMDAyRjdGRiBcXFUwMDAyRkExRi1cXFUwMDBFMDAwMCBcXFUwMDBFMDA4MS1cXFUwMDBFRkZGRiBcXFUwMDBGMDAwMS1cXFUwMDBGRkZGRCBcXFUwMDEwMDAwMS1cXFUwMDEwRkZGRF0iKTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gZW1wdHkgc2V0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0KCkgeworICAgICAgICBsaXN0ID0gbmV3IGludFsxICsgU1RBUlRfRVhUUkFdOworICAgICAgICBsaXN0W2xlbisrXSA9IEhJR0g7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIGNvcHkgb2YgYW4gZXhpc3Rpbmcgc2V0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0KFVuaWNvZGVTZXQgb3RoZXIpIHsKKyAgICAgICAgc2V0KG90aGVyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgc2V0IGNvbnRhaW5pbmcgdGhlIGdpdmVuIHJhbmdlLiBJZiA8Y29kZT5lbmQgPgorICAgICAqIHN0YXJ0PC9jb2RlPiB0aGVuIGFuIGVtcHR5IHNldCBpcyBjcmVhdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHN0YXJ0IGZpcnN0IGNoYXJhY3RlciwgaW5jbHVzaXZlLCBvZiByYW5nZQorICAgICAqIEBwYXJhbSBlbmQgbGFzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2YgcmFuZ2UKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldChpbnQgc3RhcnQsIGludCBlbmQpIHsKKyAgICAgICAgdGhpcygpOworICAgICAgICBjb21wbGVtZW50KHN0YXJ0LCBlbmQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBzZXQgZnJvbSB0aGUgZ2l2ZW4gcGF0dGVybi4gIFNlZSB0aGUgY2xhc3MgZGVzY3JpcHRpb24KKyAgICAgKiBmb3IgdGhlIHN5bnRheCBvZiB0aGUgcGF0dGVybiBsYW5ndWFnZS4gIFdoaXRlc3BhY2UgaXMgaWdub3JlZC4KKyAgICAgKiBAcGFyYW0gcGF0dGVybiBhIHN0cmluZyBzcGVjaWZ5aW5nIHdoYXQgY2hhcmFjdGVycyBhcmUgaW4gdGhlIHNldAorICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgcGF0dGVybiBjb250YWlucworICAgICAqIGEgc3ludGF4IGVycm9yLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0KFN0cmluZyBwYXR0ZXJuKSB7CisgICAgICAgIHRoaXMocGF0dGVybiwgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIHNldCBmcm9tIHRoZSBnaXZlbiBwYXR0ZXJuLiAgU2VlIHRoZSBjbGFzcyBkZXNjcmlwdGlvbgorICAgICAqIGZvciB0aGUgc3ludGF4IG9mIHRoZSBwYXR0ZXJuIGxhbmd1YWdlLgorICAgICAqIEBwYXJhbSBwYXR0ZXJuIGEgc3RyaW5nIHNwZWNpZnlpbmcgd2hhdCBjaGFyYWN0ZXJzIGFyZSBpbiB0aGUgc2V0CisgICAgICogQHBhcmFtIGlnbm9yZVdoaXRlc3BhY2UgaWYgdHJ1ZSwgaWdub3JlIGNoYXJhY3RlcnMgZm9yIHdoaWNoCisgICAgICogVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoKSByZXR1cm5zIHRydWUKKyAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHBhdHRlcm4gY29udGFpbnMKKyAgICAgKiBhIHN5bnRheCBlcnJvci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldChTdHJpbmcgcGF0dGVybiwgYm9vbGVhbiBpZ25vcmVXaGl0ZXNwYWNlKSB7CisgICAgICAgIHRoaXMoKTsKKyAgICAgICAgYXBwbHlQYXR0ZXJuKHBhdHRlcm4sIGlnbm9yZVdoaXRlc3BhY2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBzZXQgZnJvbSB0aGUgZ2l2ZW4gcGF0dGVybi4gIFNlZSB0aGUgY2xhc3MgZGVzY3JpcHRpb24KKyAgICAgKiBmb3IgdGhlIHN5bnRheCBvZiB0aGUgcGF0dGVybiBsYW5ndWFnZS4KKyAgICAgKiBAcGFyYW0gcGF0dGVybiBhIHN0cmluZyBzcGVjaWZ5aW5nIHdoYXQgY2hhcmFjdGVycyBhcmUgaW4gdGhlIHNldAorICAgICAqIEBwYXJhbSBwb3Mgb24gaW5wdXQsIHRoZSBwb3NpdGlvbiBpbiBwYXR0ZXJuIGF0IHdoaWNoIHRvIHN0YXJ0IHBhcnNpbmcuCisgICAgICogT24gb3V0cHV0LCB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIHBhcnNlZC4KKyAgICAgKiBAcGFyYW0gc3ltYm9scyBhIHN5bWJvbCB0YWJsZSBtYXBwaW5nIHZhcmlhYmxlcyB0byBjaGFyW10gYXJyYXlzCisgICAgICogYW5kIGNoYXJzIHRvIFVuaWNvZGVTZXRzCisgICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBwYXR0ZXJuCisgICAgICogY29udGFpbnMgYSBzeW50YXggZXJyb3IuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVTZXQoU3RyaW5nIHBhdHRlcm4sIFBhcnNlUG9zaXRpb24gcG9zLCBTeW1ib2xUYWJsZSBzeW1ib2xzKSB7CisgICAgICAgIHRoaXMoKTsKKyAgICAgICAgYXBwbHlQYXR0ZXJuKHBhdHRlcm4sIHBvcywgc3ltYm9scywgdHJ1ZSk7CisgICAgfQorCisgICAgLy8gRGVsZXRlIHRoZSBmb2xsb3dpbmcgd2hlbiB0aGUgY2F0ZWdvcnkgY29uc3RydWN0b3IgaXMgcmVtb3ZlZAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWV9OQU1FUyA9CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAxIDEgMSAxIDEgMSAxICAgMSAxIDIgMiAyIDIgMiAyIDIgMiAyCisgICAgICAgIC8vMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2ICAgOCA5IDAgMSAyIDMgNCA1IDYgNyA4CisgICAgICAgICJDbkx1TGxMdExtTG9Nbk1lTWNOZE5sTm9ac1psWnBDY0NmLS1Db0NzUGRQc1BlUGNQb1NtU2NTa1NvIjsKKyAgICAvKioKKyAgICAgKiBERVBSRUNBVEVEIC0gQ29uc3RydWN0cyBhIHNldCBmcm9tIHRoZSBnaXZlbiBVbmljb2RlIGNoYXJhY3RlcgorICAgICAqIGNhdGVnb3J5LgorICAgICAqIEBwYXJhbSBjYXRlZ29yeSBhbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIGNoYXJhY3RlciBjYXRlZ29yeSBhcworICAgICAqIHJldHVybmVkIGJ5IDxjb2RlPmphdmEubGFuZy5DaGFyYWN0ZXIuZ2V0VHlwZSgpPC9jb2RlPi4gIE5vdGUKKyAgICAgKiB0aGF0IHRoaXMgaXMgPGVtPmRpZmZlcmVudDwvZW0+IGZyb20gdGhlIFVDaGFyYWN0ZXJDYXRlZ29yeQorICAgICAqIGNvZGVzLgorICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4KKyAgICAgKiBjYXRlZ29yeSBpcyBpbnZhbGlkLgorICAgICAqIEBkZXByZWNhdGVkIElDVSAwLjAgdGhpcyB3aWxsIGJlIHJlbW92ZWQgRGVjLTMxLTIwMDIKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldChpbnQgY2F0ZWdvcnkpIHsKKyAgICAgICAgaWYgKGNhdGVnb3J5IDwgMCB8fCBjYXRlZ29yeSA+IGphdmEubGFuZy5DaGFyYWN0ZXIuT1RIRVJfU1lNQk9MIHx8CisgICAgICAgICAgICBjYXRlZ29yeSA9PSAxNykgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjYXRlZ29yeSIpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBwYXQgPSAiWzoiICsgQ0FURUdPUllfTkFNRVMuc3Vic3RyaW5nKDIqY2F0ZWdvcnksIDIqY2F0ZWdvcnkrMikgKyAiOl0iOworICAgICAgICBhcHBseVBhdHRlcm4ocGF0LCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgbmV3IHNldCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhpcyBvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBVbmljb2RlU2V0KHRoaXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1ha2UgdGhpcyBvYmplY3QgcmVwcmVzZW50IHRoZSByYW5nZSA8Y29kZT5zdGFydCAtIGVuZDwvY29kZT4uCisgICAgICogSWYgPGNvZGU+ZW5kID4gc3RhcnQ8L2NvZGU+IHRoZW4gdGhpcyBvYmplY3QgaXMgc2V0IHRvIGFuCisgICAgICogYW4gZW1wdHkgcmFuZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RhcnQgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzZXQsIGluY2x1c2l2ZQorICAgICAqIEBwYXJhbSBlbmQgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHNldCwgaW5jbHVzaXZlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVTZXQgc2V0KGludCBzdGFydCwgaW50IGVuZCkgeworICAgICAgICBjbGVhcigpOworICAgICAgICBjb21wbGVtZW50KHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYWtlIHRoaXMgb2JqZWN0IHJlcHJlc2VudCB0aGUgc2FtZSBzZXQgYXMgPGNvZGU+b3RoZXI8L2NvZGU+LgorICAgICAqIEBwYXJhbSBvdGhlciBhIDxjb2RlPlVuaWNvZGVTZXQ8L2NvZGU+IHdob3NlIHZhbHVlIHdpbGwgYmUKKyAgICAgKiBjb3BpZWQgdG8gdGhpcyBvYmplY3QKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCBzZXQoVW5pY29kZVNldCBvdGhlcikgeworICAgICAgICBsaXN0ID0gKGludFtdKSBvdGhlci5saXN0LmNsb25lKCk7CisgICAgICAgIGxlbiA9IG90aGVyLmxlbjsKKyAgICAgICAgcGF0ID0gb3RoZXIucGF0OworICAgICAgICBzdHJpbmdzID0gKFRyZWVTZXQpb3RoZXIuc3RyaW5ncy5jbG9uZSgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb2RpZmllcyB0aGlzIHNldCB0byByZXByZXNlbnQgdGhlIHNldCBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHBhdHRlcm4uCisgICAgICogU2VlIHRoZSBjbGFzcyBkZXNjcmlwdGlvbiBmb3IgdGhlIHN5bnRheCBvZiB0aGUgcGF0dGVybiBsYW5ndWFnZS4KKyAgICAgKiBXaGl0ZXNwYWNlIGlzIGlnbm9yZWQuCisgICAgICogQHBhcmFtIHBhdHRlcm4gYSBzdHJpbmcgc3BlY2lmeWluZyB3aGF0IGNoYXJhY3RlcnMgYXJlIGluIHRoZSBzZXQKKyAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHBhdHRlcm4KKyAgICAgKiBjb250YWlucyBhIHN5bnRheCBlcnJvci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgVW5pY29kZVNldCBhcHBseVBhdHRlcm4oU3RyaW5nIHBhdHRlcm4pIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5UGF0dGVybihwYXR0ZXJuLCB0cnVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb2RpZmllcyB0aGlzIHNldCB0byByZXByZXNlbnQgdGhlIHNldCBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHBhdHRlcm4sCisgICAgICogb3B0aW9uYWxseSBpZ25vcmluZyB3aGl0ZXNwYWNlLgorICAgICAqIFNlZSB0aGUgY2xhc3MgZGVzY3JpcHRpb24gZm9yIHRoZSBzeW50YXggb2YgdGhlIHBhdHRlcm4gbGFuZ3VhZ2UuCisgICAgICogQHBhcmFtIHBhdHRlcm4gYSBzdHJpbmcgc3BlY2lmeWluZyB3aGF0IGNoYXJhY3RlcnMgYXJlIGluIHRoZSBzZXQKKyAgICAgKiBAcGFyYW0gaWdub3JlV2hpdGVzcGFjZSBpZiB0cnVlIHRoZW4gY2hhcmFjdGVycyBmb3Igd2hpY2gKKyAgICAgKiBVQ2hhcmFjdGVyUHJvcGVydHkuaXNSdWxlV2hpdGVTcGFjZSgpIHJldHVybnMgdHJ1ZSBhcmUgaWdub3JlZAorICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgcGF0dGVybgorICAgICAqIGNvbnRhaW5zIGEgc3ludGF4IGVycm9yLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0IGFwcGx5UGF0dGVybihTdHJpbmcgcGF0dGVybiwgYm9vbGVhbiBpZ25vcmVXaGl0ZXNwYWNlKSB7CisgICAgICAgIFBhcnNlUG9zaXRpb24gcG9zID0gbmV3IFBhcnNlUG9zaXRpb24oMCk7CisgICAgICAgIGFwcGx5UGF0dGVybihwYXR0ZXJuLCBwb3MsIG51bGwsIGlnbm9yZVdoaXRlc3BhY2UpOworCisgICAgICAgIGludCBpID0gcG9zLmdldEluZGV4KCk7CisKKyAgICAgICAgLy8gU2tpcCBvdmVyIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgaWYgKGlnbm9yZVdoaXRlc3BhY2UpIHsKKyAgICAgICAgICAgIGkgPSBVdGlsaXR5LnNraXBXaGl0ZXNwYWNlKHBhdHRlcm4sIGkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgIT0gcGF0dGVybi5sZW5ndGgoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGFyc2Ugb2YgXCIiICsgcGF0dGVybiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiBmYWlsZWQgYXQgIiArIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBwb3NpdGlvbiwgaW4gdGhlIGdpdmVuIHBhdHRlcm4sIGFwcGVhcnMKKyAgICAgKiB0byBiZSB0aGUgc3RhcnQgb2YgYSBVbmljb2RlU2V0IHBhdHRlcm4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHJlc2VtYmxlc1BhdHRlcm4oU3RyaW5nIHBhdHRlcm4sIGludCBwb3MpIHsKKyAgICAgICAgcmV0dXJuICgocG9zKzEpIDwgcGF0dGVybi5sZW5ndGgoKSAmJgorICAgICAgICAgICAgICAgIHBhdHRlcm4uY2hhckF0KHBvcykgPT0gJ1snKSB8fAorICAgICAgICAgICAgcmVzZW1ibGVzUHJvcGVydHlQYXR0ZXJuKHBhdHRlcm4sIHBvcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwZW5kIHRoZSA8Y29kZT50b1BhdHRlcm4oKTwvY29kZT4gcmVwcmVzZW50YXRpb24gb2YgYQorICAgICAqIHN0cmluZyB0byB0aGUgZ2l2ZW4gPGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIF9hcHBlbmRUb1BhdChTdHJpbmdCdWZmZXIgYnVmLCBTdHJpbmcgcywgYm9vbGVhbiB1c2VIZXhFc2NhcGUpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpICs9IFVURjE2LmdldENoYXJDb3VudChpKSkgeworICAgICAgICAgICAgX2FwcGVuZFRvUGF0KGJ1ZiwgVVRGMTYuY2hhckF0KHMsIGkpLCB1c2VIZXhFc2NhcGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwZW5kIHRoZSA8Y29kZT50b1BhdHRlcm4oKTwvY29kZT4gcmVwcmVzZW50YXRpb24gb2YgYQorICAgICAqIGNoYXJhY3RlciB0byB0aGUgZ2l2ZW4gPGNvZGU+U3RyaW5nQnVmZmVyPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIF9hcHBlbmRUb1BhdChTdHJpbmdCdWZmZXIgYnVmLCBpbnQgYywgYm9vbGVhbiB1c2VIZXhFc2NhcGUpIHsKKyAgICAgICAgaWYgKHVzZUhleEVzY2FwZSkgeworICAgICAgICAgICAgLy8gVXNlIGhleCBlc2NhcGUgbm90YXRpb24gKDxiYWNrc2xhc2g+dXh4eHggb3IgPGJhY2tzbGFzaD5VeHh4eHh4eHgpIGZvciBhbnl0aGluZworICAgICAgICAgICAgLy8gdW5wcmludGFibGUKKyAgICAgICAgICAgIGlmIChVdGlsaXR5LmVzY2FwZVVucHJpbnRhYmxlKGJ1ZiwgYykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gT2theSB0byBsZXQgJzonIHBhc3MgdGhyb3VnaAorICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnWyc6IC8vIFNFVF9PUEVOOgorICAgICAgICBjYXNlICddJzogLy8gU0VUX0NMT1NFOgorICAgICAgICBjYXNlICctJzogLy8gSFlQSEVOOgorICAgICAgICBjYXNlICdeJzogLy8gQ09NUExFTUVOVDoKKyAgICAgICAgY2FzZSAnJic6IC8vIElOVEVSU0VDVElPTjoKKyAgICAgICAgY2FzZSAnXFwnOiAvL0JBQ0tTTEFTSDoKKyAgICAgICAgY2FzZSAneyc6CisgICAgICAgIGNhc2UgJ30nOgorICAgICAgICBjYXNlICckJzoKKyAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICBidWYuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBFc2NhcGUgd2hpdGVzcGFjZQorICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXJQcm9wZXJ0eS5pc1J1bGVXaGl0ZVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFVURjE2LmFwcGVuZChidWYsIGMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQuICBJZiB0aGUgcmVzdWx0IG9mCisgICAgICogY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBhIFVuaWNvZGVTZXQgY29uc3RydWN0b3IsIGl0CisgICAgICogd2lsbCBwcm9kdWNlIGFub3RoZXIgc2V0IHRoYXQgaXMgZXF1YWwgdG8gdGhpcyBvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1BhdHRlcm4oYm9vbGVhbiBlc2NhcGVVbnByaW50YWJsZSkgeworICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICByZXR1cm4gX3RvUGF0dGVybihyZXN1bHQsIGVzY2FwZVVucHJpbnRhYmxlKS50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGVuZCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNldCB0byByZXN1bHQuICBUaGlzIHdpbGwgYmUKKyAgICAgKiBhIGNsZWFuZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHBhc3NlZCB0byBhcHBseVBhdHRlcm4oKSwgaWYgdGhlcmUKKyAgICAgKiBpcyBvbmUuICBPdGhlcndpc2UgaXQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgX3RvUGF0dGVybihTdHJpbmdCdWZmZXIgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBlc2NhcGVVbnByaW50YWJsZSkgeworICAgICAgICBpZiAocGF0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgaW50IGJhY2tzbGFzaENvdW50ID0gMDsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPHBhdC5sZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgaW50IGMgPSBVVEYxNi5jaGFyQXQocGF0LCBpKTsKKyAgICAgICAgICAgICAgICBpICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKyAgICAgICAgICAgICAgICBpZiAoZXNjYXBlVW5wcmludGFibGUgJiYgVXRpbGl0eS5pc1VucHJpbnRhYmxlKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB1bnByaW50YWJsZSBjaGFyYWN0ZXIgaXMgcHJlY2VkZWQgYnkgYW4gb2RkCisgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBiYWNrc2xhc2hlcywgdGhlbiBpdCBoYXMgYmVlbiBlc2NhcGVkLgorICAgICAgICAgICAgICAgICAgICAvLyBCZWZvcmUgdW5lc2NhcGluZyBpdCwgd2UgZGVsZXRlIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICAvLyBiYWNrc2xhc2guCisgICAgICAgICAgICAgICAgICAgIGlmICgoYmFja3NsYXNoQ291bnQgJSAyKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0TGVuZ3RoKHJlc3VsdC5sZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlVW5wcmludGFibGUocmVzdWx0LCBjKTsKKyAgICAgICAgICAgICAgICAgICAgYmFja3NsYXNoQ291bnQgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFVURjE2LmFwcGVuZChyZXN1bHQsIGMpOworICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK2JhY2tzbGFzaENvdW50OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYmFja3NsYXNoQ291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBfZ2VuZXJhdGVQYXR0ZXJuKHJlc3VsdCwgZXNjYXBlVW5wcmludGFibGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdlbmVyYXRlIGFuZCBhcHBlbmQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQgdG8gcmVzdWx0LgorICAgICAqIFRoaXMgZG9lcyBub3QgdXNlIHRoaXMucGF0LCB0aGUgY2xlYW5lZCB1cCBjb3B5IG9mIHRoZSBzdHJpbmcKKyAgICAgKiBwYXNzZWQgdG8gYXBwbHlQYXR0ZXJuKCkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZ0J1ZmZlciBfZ2VuZXJhdGVQYXR0ZXJuKFN0cmluZ0J1ZmZlciByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZXNjYXBlVW5wcmludGFibGUpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnWycpOworCisvLyAgICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIHByZWRlZmluZWQgY2F0ZWdvcmllcy4gIFdlIGltcGxpY2l0bHkgYnVpbGQKKy8vICAgICAgLy8gdXAgQUxMIGNhdGVnb3J5IHNldHMgdGhlIGZpcnN0IHRpbWUgdG9QYXR0ZXJuKCkgaXMgY2FsbGVkLgorLy8gICAgICBmb3IgKGludCBjYXQ9MDsgY2F0PENBVEVHT1JZX0NPVU5UOyArK2NhdCkgeworLy8gICAgICAgICAgaWYgKHRoaXMuZXF1YWxzKGdldENhdGVnb3J5U2V0KGNhdCkpKSB7CisvLyAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnOicpOworLy8gICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoQ0FURUdPUllfTkFNRVMuc3Vic3RyaW5nKGNhdCoyLCBjYXQqMisyKSk7CisvLyAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIjpdIik7CisvLyAgICAgICAgICB9CisvLyAgICAgIH0KKworICAgICAgICBpbnQgY291bnQgPSBnZXRSYW5nZUNvdW50KCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHNldCBjb250YWlucyBhdCBsZWFzdCAyIGludGVydmFscyBhbmQgaW5jbHVkZXMgYm90aAorICAgICAgICAvLyBNSU5fVkFMVUUgYW5kIE1BWF9WQUxVRSwgdGhlbiB0aGUgaW52ZXJzZSByZXByZXNlbnRhdGlvbiB3aWxsCisgICAgICAgIC8vIGJlIG1vcmUgZWNvbm9taWNhbC4KKyAgICAgICAgaWYgKGNvdW50ID4gMSAmJgorICAgICAgICAgICAgZ2V0UmFuZ2VTdGFydCgwKSA9PSBNSU5fVkFMVUUgJiYKKyAgICAgICAgICAgIGdldFJhbmdlRW5kKGNvdW50LTEpID09IE1BWF9WQUxVRSkgeworCisgICAgICAgICAgICAvLyBFbWl0IHRoZSBpbnZlcnNlCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdeJyk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGludCBzdGFydCA9IGdldFJhbmdlRW5kKGktMSkrMTsKKyAgICAgICAgICAgICAgICBpbnQgZW5kID0gZ2V0UmFuZ2VTdGFydChpKS0xOworICAgICAgICAgICAgICAgIF9hcHBlbmRUb1BhdChyZXN1bHQsIHN0YXJ0LCBlc2NhcGVVbnByaW50YWJsZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IGVuZCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCctJyk7CisgICAgICAgICAgICAgICAgICAgIF9hcHBlbmRUb1BhdChyZXN1bHQsIGVuZCwgZXNjYXBlVW5wcmludGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERlZmF1bHQ7IGVtaXQgdGhlIHJhbmdlcyBhcyBwYWlycworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGludCBzdGFydCA9IGdldFJhbmdlU3RhcnQoaSk7CisgICAgICAgICAgICAgICAgaW50IGVuZCA9IGdldFJhbmdlRW5kKGkpOworICAgICAgICAgICAgICAgIF9hcHBlbmRUb1BhdChyZXN1bHQsIHN0YXJ0LCBlc2NhcGVVbnByaW50YWJsZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IGVuZCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCctJyk7CisgICAgICAgICAgICAgICAgICAgIF9hcHBlbmRUb1BhdChyZXN1bHQsIGVuZCwgZXNjYXBlVW5wcmludGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJpbmdzLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gc3RyaW5ncy5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3snKTsKKyAgICAgICAgICAgICAgICBfYXBwZW5kVG9QYXQocmVzdWx0LCAoU3RyaW5nKSBpdC5uZXh0KCksIGVzY2FwZVVucHJpbnRhYmxlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCd9Jyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoJ10nKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBzZXQgKGl0cyBjYXJkaW5hbGl0eSksCisgICAgICogPGVtPm48L2VtPiwgd2hlcmUgPGNvZGU+MCA8PSA8L2NvZGU+PGVtPm48L2VtPjxjb2RlPiA8PSA2NTUzNjwvY29kZT4uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBzZXQgKGl0cyBjYXJkaW5hbGl0eSkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBzaXplKCkgeworICAgICAgICBpbnQgbiA9IDA7CisgICAgICAgIGludCBjb3VudCA9IGdldFJhbmdlQ291bnQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBuICs9IGdldFJhbmdlRW5kKGkpIC0gZ2V0UmFuZ2VTdGFydChpKSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG4gKyBzdHJpbmdzLnNpemUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIDx0dD50cnVlPC90dD4gaWYgdGhpcyBzZXQgY29udGFpbnMgbm8gZWxlbWVudHMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIDx0dD50cnVlPC90dD4gaWYgdGhpcyBzZXQgY29udGFpbnMgbm8gZWxlbWVudHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKKyAgICAgICAgcmV0dXJuIGxlbiA9PSAxICYmIHN0cmluZ3Muc2l6ZSgpID09IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gb2YgVW5pY29kZU1hdGNoZXIgQVBJLiAgUmV0dXJucyA8dHQ+dHJ1ZTwvdHQ+IGlmCisgICAgICogdGhpcyBzZXQgY29udGFpbnMgYW55IGNoYXJhY3RlciB3aG9zZSBsb3cgYnl0ZSBpcyB0aGUgZ2l2ZW4KKyAgICAgKiB2YWx1ZS4gIFRoaXMgaXMgdXNlZCBieSA8dHQ+UnVsZUJhc2VkVHJhbnNsaXRlcmF0b3I8L3R0PiBmb3IKKyAgICAgKiBpbmRleGluZy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzSW5kZXhWYWx1ZShpbnQgdikgeworICAgICAgICAvKiBUaGUgaW5kZXggdmFsdWUgdiwgaW4gdGhlIHJhbmdlIFswLDI1NV0sIGlzIGNvbnRhaW5lZCBpbiB0aGlzIHNldCBpZgorICAgICAgICAgKiBpdCBpcyBjb250YWluZWQgaW4gYW55IHBhaXIgb2YgdGhpcyBzZXQuICBQYWlycyBlaXRoZXIgaGF2ZSB0aGUgaGlnaAorICAgICAgICAgKiBieXRlcyBlcXVhbCwgb3IgdW5lcXVhbC4gIElmIHRoZSBoaWdoIGJ5dGVzIGFyZSBlcXVhbCwgdGhlbiB3ZSBoYXZlCisgICAgICAgICAqIGFheHguLmFheXksIHdoZXJlIGFhIGlzIHRoZSBoaWdoIGJ5dGUuICBUaGVuIHYgaXMgY29udGFpbmVkIGlmIHh4IDw9CisgICAgICAgICAqIHYgPD0geXkuICBJZiB0aGUgaGlnaCBieXRlcyBhcmUgdW5lcXVhbCB3ZSBoYXZlIGFheHguLmJieXksIGJiPmFhLgorICAgICAgICAgKiBUaGVuIHYgaXMgY29udGFpbmVkIGlmIHh4IDw9IHYgfHwgdiA8PSB5eS4gIChUaGlzIGlzIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgICogdGltZSB6b25lIG1vbnRoIGNvbnRhaW5tZW50IGxvZ2ljLikKKyAgICAgICAgICovCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxnZXRSYW5nZUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgaW50IGxvdyA9IGdldFJhbmdlU3RhcnQoaSk7CisgICAgICAgICAgICBpbnQgaGlnaCA9IGdldFJhbmdlRW5kKGkpOworICAgICAgICAgICAgaWYgKChsb3cgJiB+MHhGRikgPT0gKGhpZ2ggJiB+MHhGRikpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGxvdyAmIDB4RkYpIDw9IHYgJiYgdiA8PSAoaGlnaCAmIDB4RkYpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGxvdyAmIDB4RkYpIDw9IHYgfHwgdiA8PSAoaGlnaCAmIDB4RkYpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmluZ3Muc2l6ZSgpICE9IDApIHsKKyAgICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gc3RyaW5ncy5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBzID0gKFN0cmluZykgaXQubmV4dCgpOworICAgICAgICAgICAgICAgIC8vaWYgKHMubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vICAgIC8vIEVtcHR5IHN0cmluZ3MgbWF0Y2ggZXZlcnl0aGluZworICAgICAgICAgICAgICAgIC8vICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgICAgIC8vIGFzc2VydChzLmxlbmd0aCgpICE9IDApOyAvLyBXZSBlbmZvcmNlIHRoaXMgZWxzZXdoZXJlCisgICAgICAgICAgICAgICAgaW50IGMgPSBVVEYxNi5jaGFyQXQocywgMCk7CisgICAgICAgICAgICAgICAgaWYgKChjICYgMHhGRikgPT0gdikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudGF0aW9uIG9mIFVuaWNvZGVNYXRjaGVyLm1hdGNoZXMoKS4gIEFsd2F5cyBtYXRjaGVzIHRoZQorICAgICAqIGxvbmdlc3QgcG9zc2libGUgbXVsdGljaGFyIHN0cmluZy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG1hdGNoZXMoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50W10gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5jcmVtZW50YWwpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChvZmZzZXRbMF0gPT0gbGltaXQpIHsKKyAgICAgICAgICAgIC8vIFN0cmluZ3MsIGlmIGFueSwgaGF2ZSBsZW5ndGggIT0gMCwgc28gd2UgZG9uJ3Qgd29ycnkKKyAgICAgICAgICAgIC8vIGFib3V0IHRoZW0gaGVyZS4gIElmIHdlIGV2ZXIgYWxsb3cgemVyby1sZW5ndGggc3RyaW5ncworICAgICAgICAgICAgLy8gd2UgbXVjaCBjaGVjayBmb3IgdGhlbSBoZXJlLgorICAgICAgICAgICAgaWYgKGNvbnRhaW5zKFRyYW5zbGl0ZXJhdGlvblJ1bGUuRVRIRVIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluY3JlbWVudGFsID8gVV9QQVJUSUFMX01BVENIIDogVV9NQVRDSDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFVfTUlTTUFUQ0g7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3RyaW5ncy5zaXplKCkgIT0gMCkgeyAvLyB0cnkgc3RyaW5ncyBmaXJzdAorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gbWlnaHQgc2VwYXJhdGUgZm9yd2FyZCBhbmQgYmFja3dhcmQgbG9vcHMgbGF0ZXIKKyAgICAgICAgICAgICAgICAvLyBmb3Igbm93IHRoZXkgYXJlIGNvbWJpbmVkCisKKyAgICAgICAgICAgICAgICAvLyBUT0RPIEltcHJvdmUgZWZmaWNpZW5jeSBvZiB0aGlzLCBhdCBsZWFzdCBpbiB0aGUgZm9yd2FyZAorICAgICAgICAgICAgICAgIC8vIGRpcmVjdGlvbiwgaWYgbm90IGluIGJvdGguICBJbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24gd2UKKyAgICAgICAgICAgICAgICAvLyBjYW4gYXNzdW1lIHRoZSBzdHJpbmdzIGFyZSBzb3J0ZWQuCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBJdGVyYXRvciBpdCA9IHN0cmluZ3MuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgICAgICBib29sZWFuIGZvcndhcmQgPSBvZmZzZXRbMF0gPCBsaW1pdDsKKworICAgICAgICAgICAgICAgIC8vIGZpcnN0Q2hhciBpcyB0aGUgbGVmdG1vc3QgY2hhciB0byBtYXRjaCBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBmb3J3YXJkIGRpcmVjdGlvbiBvciB0aGUgcmlnaHRtb3N0IGNoYXIgdG8gbWF0Y2ggaW4KKyAgICAgICAgICAgICAgICAvLyB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uCisgICAgICAgICAgICAgICAgY2hhciBmaXJzdENoYXIgPSB0ZXh0LmNoYXJBdChvZmZzZXRbMF0pOworCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0cmluZ3MgdGhhdCBjYW4gbWF0Y2ggd2UKKyAgICAgICAgICAgICAgICAvLyByZXR1cm4gdGhlIGxvbmdlc3QgbWF0Y2guCisgICAgICAgICAgICAgICAgaW50IGhpZ2hXYXRlckxlbmd0aCA9IDA7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0cmlhbCA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworICAgICAgICAgICAgICAgICAgICAvL2lmICh0cmlhbC5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vICAgIHJldHVybiBVX01BVENIOyAvLyBudWxsLXN0cmluZyBhbHdheXMgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAvL30KKyAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0KHRyaWFsLmxlbmd0aCgpICE9IDApOyAvLyBXZSBlbnN1cmUgdGhpcyBlbHNld2hlcmUKKworICAgICAgICAgICAgICAgICAgICBjaGFyIGMgPSB0cmlhbC5jaGFyQXQoZm9yd2FyZCA/IDAgOiB0cmlhbC5sZW5ndGgoKSAtIDEpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ3MgYXJlIHNvcnRlZCwgc28gd2UgY2FuIG9wdGltaXplIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBmb3J3YXJkIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvcndhcmQgJiYgYyA+IGZpcnN0Q2hhcikgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChjICE9IGZpcnN0Q2hhcikgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IG1hdGNoUmVzdCh0ZXh0LCBvZmZzZXRbMF0sIGxpbWl0LCB0cmlhbCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudGFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4TGVuID0gZm9yd2FyZCA/IGxpbWl0LW9mZnNldFswXSA6IG9mZnNldFswXS1saW1pdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gbWF4TGVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzdWNjZXNzZnVsbHkgbWF0Y2hlZCBidXQgb25seSB1cCB0byBsaW1pdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVV9QQVJUSUFMX01BVENIOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSB0cmlhbC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzdWNjZXNzZnVsbHkgbWF0Y2hlZCB0aGUgd2hvbGUgc3RyaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IGhpZ2hXYXRlckxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlckxlbmd0aCA9IGxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiB3ZSBrbm93IHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzb3J0ZWQgc28gd2UgY2FuIGJhaWwgZWFybHkuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9yd2FyZCAmJiBsZW4gPCBoaWdoV2F0ZXJMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gV2UndmUgY2hlY2tlZCBhbGwgc3RyaW5ncyB3aXRob3V0IGEgcGFydGlhbCBtYXRjaC4KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGZ1bGwgbWF0Y2hlcywgcmV0dXJuIHRoZSBsb25nZXN0IG9uZS4KKyAgICAgICAgICAgICAgICBpZiAoaGlnaFdhdGVyTGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdICs9IGZvcndhcmQgPyBoaWdoV2F0ZXJMZW5ndGggOiAtaGlnaFdhdGVyTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVV9NQVRDSDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VwZXIubWF0Y2hlcyh0ZXh0LCBvZmZzZXQsIGxpbWl0LCBpbmNyZW1lbnRhbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbG9uZ2VzdCBtYXRjaCBmb3IgcyBpbiB0ZXh0IGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAgICAgKiBJZiBsaW1pdCA+IHN0YXJ0IHRoZW4gbWF0Y2ggZm9yd2FyZCBmcm9tIHN0YXJ0KzEgdG8gbGltaXQKKyAgICAgKiBtYXRjaGluZyBhbGwgY2hhcmFjdGVycyBleGNlcHQgcy5jaGFyQXQoMCkuICBJZiBsaW1pdCA8IHN0YXJ0LAorICAgICAqIGdvIGJhY2t3YXJkIHN0YXJ0aW5nIGZyb20gc3RhcnQtMSBtYXRjaGluZyBhbGwgY2hhcmFjdGVycworICAgICAqIGV4Y2VwdCBzLmNoYXJBdChzLmxlbmd0aCgpLTEpLiAgVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IHRoZQorICAgICAqIGZpcnN0IGNoYXJhY3RlciwgdGV4dC5jaGFyQXQoc3RhcnQpLCBtYXRjaGVzIHMsIHNvIGl0IGRvZXMgbm90CisgICAgICogY2hlY2sgaXQuCisgICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gbWF0Y2gKKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBtYXRjaC4gIEluIHRoZSBmb3J3YXJkCisgICAgICogZGlyZWN0aW9uLCB0ZXh0LmNoYXJBdChzdGFydCkgaXMgbWF0Y2hlZCBhZ2FpbnN0IHMuY2hhckF0KDApLgorICAgICAqIEluIHRoZSByZXZlcnNlIGRpcmVjdGlvbiwgaXQgaXMgbWF0Y2hlZCBhZ2FpbnN0CisgICAgICogcy5jaGFyQXQocy5sZW5ndGgoKS0xKS4KKyAgICAgKiBAcGFyYW0gbGltaXQgdGhlIGxpbWl0IG9mZnNldCBmb3IgbWF0Y2hpbmcsIGVpdGhlciBsYXN0KzEgaW4KKyAgICAgKiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24sIG9yIGxhc3QtMSBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24sCisgICAgICogd2hlcmUgbGFzdCBpcyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY2hhcmFjdGVyIHRvIG1hdGNoLgorICAgICAqIEByZXR1cm4gSWYgcGFydCBvZiBzIG1hdGNoZXMgdXAgdG8gdGhlIGxpbWl0LCByZXR1cm4gfGxpbWl0IC0KKyAgICAgKiBzdGFydHwuICBJZiBhbGwgb2YgcyBtYXRjaGVzIGJlZm9yZSByZWFjaGluZyB0aGUgbGltaXQsIHJldHVybgorICAgICAqIHMubGVuZ3RoKCkuICBJZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gcyBhbmQgdGV4dCwgcmV0dXJuCisgICAgICogMAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBtYXRjaFJlc3QgKFJlcGxhY2VhYmxlIHRleHQsIGludCBzdGFydCwgaW50IGxpbWl0LCBTdHJpbmcgcykgeworICAgICAgICBpbnQgbWF4TGVuOworICAgICAgICBpbnQgc2xlbiA9IHMubGVuZ3RoKCk7CisgICAgICAgIGlmIChzdGFydCA8IGxpbWl0KSB7CisgICAgICAgICAgICBtYXhMZW4gPSBsaW1pdCAtIHN0YXJ0OworICAgICAgICAgICAgaWYgKG1heExlbiA+IHNsZW4pIG1heExlbiA9IHNsZW47CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG1heExlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KHN0YXJ0ICsgaSkgIT0gcy5jaGFyQXQoaSkpIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF4TGVuID0gc3RhcnQgLSBsaW1pdDsKKyAgICAgICAgICAgIGlmIChtYXhMZW4gPiBzbGVuKSBtYXhMZW4gPSBzbGVuOworICAgICAgICAgICAgLS1zbGVuOyAvLyA8PT4gc2xlbiA9IHMubGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBtYXhMZW47ICsraSkgeworICAgICAgICAgICAgICAgIGlmICh0ZXh0LmNoYXJBdChzdGFydCAtIGkpICE9IHMuY2hhckF0KHNsZW4gLSBpKSkgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1heExlbjsKKyAgICB9CisgICAgICAgIAorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gb2YgVW5pY29kZU1hdGNoZXIgQVBJLiAgVW5pb24gdGhlIHNldCBvZiBhbGwKKyAgICAgKiBjaGFyYWN0ZXJzIHRoYXQgbWF5IGJlIG1hdGNoZWQgYnkgdGhpcyBvYmplY3QgaW50byB0aGUgZ2l2ZW4KKyAgICAgKiBzZXQuCisgICAgICogQHBhcmFtIHRvVW5pb25UbyB0aGUgc2V0IGludG8gd2hpY2ggdG8gdW5pb24gdGhlIHNvdXJjZSBjaGFyYWN0ZXJzCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRNYXRjaFNldFRvKFVuaWNvZGVTZXQgdG9VbmlvblRvKSB7CisgICAgICAgIHRvVW5pb25Uby5hZGRBbGwodGhpcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIGNoYXJhY3RlciB3aXRoaW4gdGhpcyBzZXQsIHdoZXJlCisgICAgICogdGhlIHNldCBpcyBvcmRlcmVkIGJ5IGFzY2VuZGluZyBjb2RlIHBvaW50LiAgSWYgdGhlIGNoYXJhY3RlcgorICAgICAqIGlzIG5vdCBpbiB0aGlzIHNldCwgcmV0dXJuIC0xLiAgVGhlIGludmVyc2Ugb2YgdGhpcyBtZXRob2QgaXMKKyAgICAgKiA8Y29kZT5jaGFyQXQoKTwvY29kZT4uCisgICAgICogQHJldHVybiBhbiBpbmRleCBmcm9tIDAuLnNpemUoKS0xLCBvciAtMQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgaW5kZXhPZihpbnQgYykgeworICAgICAgICBpZiAoYyA8IE1JTl9WQUxVRSB8fCBjID4gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNvZGUgcG9pbnQgVSsiICsgVXRpbGl0eS5oZXgoYywgNikpOworICAgICAgICB9CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgaW50IG4gPSAwOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSBsaXN0W2krK107CisgICAgICAgICAgICBpZiAoYyA8IHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGxpbWl0ID0gbGlzdFtpKytdOworICAgICAgICAgICAgaWYgKGMgPCBsaW1pdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuICsgYyAtIHN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbiArPSBsaW1pdCAtIHN0YXJ0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleCB3aXRoaW4gdGhpcyBzZXQsIHdoZXJlCisgICAgICogdGhlIHNldCBpcyBvcmRlcmVkIGJ5IGFzY2VuZGluZyBjb2RlIHBvaW50LiAgSWYgdGhlIGluZGV4IGlzCisgICAgICogb3V0IG9mIHJhbmdlLCByZXR1cm4gLTEuICBUaGUgaW52ZXJzZSBvZiB0aGlzIG1ldGhvZCBpcworICAgICAqIDxjb2RlPmluZGV4T2YoKTwvY29kZT4uCisgICAgICogQHBhcmFtIGluZGV4IGFuIGluZGV4IGZyb20gMC4uc2l6ZSgpLTEKKyAgICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4LCBvciAtMS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGNoYXJBdChpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ID49IDApIHsKKyAgICAgICAgICAgIC8vIGxlbjIgaXMgdGhlIGxhcmdlc3QgZXZlbiBpbnRlZ2VyIDw9IGxlbiwgdGhhdCBpcywgaXQgaXMgbGVuCisgICAgICAgICAgICAvLyBmb3IgZXZlbiB2YWx1ZXMgYW5kIGxlbi0xIGZvciBvZGQgdmFsdWVzLiAgV2l0aCBvZGQgdmFsdWVzCisgICAgICAgICAgICAvLyB0aGUgbGFzdCBlbnRyeSBpcyBVTklDT0RFU0VUX0hJR0guCisgICAgICAgICAgICBpbnQgbGVuMiA9IGxlbiAmIH4xOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbGVuMjspIHsKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBsaXN0W2krK107CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gbGlzdFtpKytdIC0gc3RhcnQ7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgY291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ICsgaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZGV4IC09IGNvdW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBzcGVjaWZpZWQgcmFuZ2UgdG8gdGhpcyBzZXQgaWYgaXQgaXMgbm90IGFscmVhZHkKKyAgICAgKiBwcmVzZW50LiAgSWYgdGhpcyBzZXQgYWxyZWFkeSBjb250YWlucyB0aGUgc3BlY2lmaWVkIHJhbmdlLAorICAgICAqIHRoZSBjYWxsIGxlYXZlcyB0aGlzIHNldCB1bmNoYW5nZWQuICBJZiA8Y29kZT5lbmQgPiBzdGFydDwvY29kZT4KKyAgICAgKiB0aGVuIGFuIGVtcHR5IHJhbmdlIGlzIGFkZGVkLCBsZWF2aW5nIHRoZSBzZXQgdW5jaGFuZ2VkLgorICAgICAqCisgICAgICogQHBhcmFtIHN0YXJ0IGZpcnN0IGNoYXJhY3RlciwgaW5jbHVzaXZlLCBvZiByYW5nZSB0byBiZSBhZGRlZAorICAgICAqIHRvIHRoaXMgc2V0LgorICAgICAqIEBwYXJhbSBlbmQgbGFzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2YgcmFuZ2UgdG8gYmUgYWRkZWQKKyAgICAgKiB0byB0aGlzIHNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCBhZGQoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgICAgIGlmIChzdGFydCA8IE1JTl9WQUxVRSB8fCBzdGFydCA+IE1BWF9WQUxVRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjb2RlIHBvaW50IFUrIiArIFV0aWxpdHkuaGV4KHN0YXJ0LCA2KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuZCA8IE1JTl9WQUxVRSB8fCBlbmQgPiBNQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgY29kZSBwb2ludCBVKyIgKyBVdGlsaXR5LmhleChlbmQsIDYpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgICAgIGFkZChyYW5nZShzdGFydCwgZW5kKSwgMiwgMCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT0gZW5kKSB7CisgICAgICAgICAgICBhZGQoc3RhcnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworLy8gICAgLyoqCisvLyAgICAgKiBGb3JtYXQgb3V0IHRoZSBpbnZlcnNpb24gbGlzdCBhcyBhIHN0cmluZywgZm9yIGRlYnVnZ2luZy4gIFVuY29tbWVudCB3aGVuCisvLyAgICAgKiBuZWVkZWQuCisvLyAgICAgKi8KKy8vICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZHVtcCgpIHsKKy8vICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiWyIpOworLy8gICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47ICsraSkgeworLy8gICAgICAgICAgICBpZiAoaSAhPSAwKSBidWYuYXBwZW5kKCIsICIpOworLy8gICAgICAgICAgICBpbnQgYyA9IGxpc3RbaV07CisvLyAgICAgICAgICAgIC8vaWYgKGMgPD0gMHg3RiAmJiBjICE9ICdcbicgJiYgYyAhPSAnXHInICYmIGMgIT0gJ1x0JyAmJiBjICE9ICcgJykgeworLy8gICAgICAgICAgICAvLyAgICBidWYuYXBwZW5kKChjaGFyKSBjKTsKKy8vICAgICAgICAgICAgLy99IGVsc2UgeworLy8gICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiVSsiKS5hcHBlbmQoVXRpbGl0eS5oZXgoYywgKGM8MHgxMDAwMCk/NDo2KSk7CisvLyAgICAgICAgICAgIC8vfQorLy8gICAgICAgIH0KKy8vICAgICAgICBidWYuYXBwZW5kKCJdIik7CisvLyAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworLy8gICAgfQorCisgICAgLyoqCisgICAgICogQWRkcyB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciB0byB0aGlzIHNldCBpZiBpdCBpcyBub3QgYWxyZWFkeQorICAgICAqIHByZXNlbnQuICBJZiB0aGlzIHNldCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLAorICAgICAqIHRoZSBjYWxsIGxlYXZlcyB0aGlzIHNldCB1bmNoYW5nZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFVuaWNvZGVTZXQgYWRkKGludCBjKSB7CisgICAgICAgIGlmIChjIDwgTUlOX1ZBTFVFIHx8IGMgPiBNQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgY29kZSBwb2ludCBVKyIgKyBVdGlsaXR5LmhleChjLCA2KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBmaW5kIHNtYWxsZXN0IGkgc3VjaCB0aGF0IGMgPCBsaXN0W2ldCisgICAgICAgIC8vIGlmIG9kZCwgdGhlbiBpdCBpcyBJTiB0aGUgc2V0CisgICAgICAgIC8vIGlmIGV2ZW4sIHRoZW4gaXQgaXMgT1VUIG9mIHRoZSBzZXQKKyAgICAgICAgaW50IGkgPSBmaW5kQ29kZVBvaW50KGMpOworCisgICAgICAgIC8vIGFscmVhZHkgaW4gc2V0PworICAgICAgICBpZiAoKGkgJiAxKSAhPSAwKSByZXR1cm4gdGhpczsKKworICAgICAgICAvLyBISUdIIGlzIDB4MTEwMDAwCisgICAgICAgIC8vIGFzc2VydChsaXN0W2xlbi0xXSA9PSBISUdIKTsKKyAgICAgICAgCisgICAgICAgIC8vIGVtcHR5ID0gW0hJR0hdCisgICAgICAgIC8vIFtzdGFydF8wLCBsaW1pdF8wLCBzdGFydF8xLCBsaW1pdF8xLCBISUdIXQorCisgICAgICAgIC8vIFsuLi4sIHN0YXJ0X2stMSwgbGltaXRfay0xLCBzdGFydF9rLCBsaW1pdF9rLCAuLi4sIEhJR0hdCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0W2ldCisKKyAgICAgICAgLy8gaSA9PSAwIG1lYW5zIGMgaXMgYmVmb3JlIHRoZSBmaXJzdCByYW5nZQorCisgICAgICAgIGlmIChjID09IGxpc3RbaV0tMSkgeworICAgICAgICAgICAgLy8gYyBpcyBiZWZvcmUgc3RhcnQgb2YgbmV4dCByYW5nZQorICAgICAgICAgICAgbGlzdFtpXSA9IGM7CisgICAgICAgICAgICAvLyBpZiB3ZSB0b3VjaGVkIHRoZSBISUdIIG1hcmssIHRoZW4gYWRkIGEgbmV3IG9uZQorICAgICAgICAgICAgaWYgKGMgPT0gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICAgICAgZW5zdXJlQ2FwYWNpdHkobGVuKzEpOworICAgICAgICAgICAgICAgIGxpc3RbbGVuKytdID0gSElHSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBjID09IGxpc3RbaS0xXSkgeworICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIGFkamFjZW50IHJhbmdlcworCisgICAgICAgICAgICAgICAgLy8gWy4uLiwgc3RhcnRfay0xLCBjLCBjLCBsaW1pdF9rLCAuLi4sIEhJR0hdCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBsaXN0W2ldCisgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShsaXN0LCBpKzEsIGxpc3QsIGktMSwgbGVuLWktMSk7CisgICAgICAgICAgICAgICAgbGVuIC09IDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmIChpID4gMCAmJiBjID09IGxpc3RbaS0xXSkgeworICAgICAgICAgICAgLy8gYyBpcyBhZnRlciBlbmQgb2YgcHJpb3IgcmFuZ2UKKyAgICAgICAgICAgIGxpc3RbaS0xXSsrOworICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBjaGNlayBmb3IgY29sbGFwc2UgaGVyZQorICAgICAgICB9CisKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhlIG5ldyBjaGFyIGlzIG5vdCBhZGphY2VudCB0bworICAgICAgICAgICAgLy8gYW55IGV4aXN0aW5nIHJhbmdlcywgYW5kIGl0IGlzIG5vdCAxMEZGRkYuCisKKworICAgICAgICAgICAgLy8gWy4uLiwgc3RhcnRfay0xLCBsaW1pdF9rLTEsIHN0YXJ0X2ssIGxpbWl0X2ssIC4uLiwgSElHSF0KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFtpXQorCisgICAgICAgICAgICAvLyBbLi4uLCBzdGFydF9rLTEsIGxpbWl0X2stMSwgYywgYysxLCBzdGFydF9rLCBsaW1pdF9rLCAuLi4sIEhJR0hdCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RbaV0KKworICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIGVuc3VyZUNhcGFjaXR5KCkgdG8gc2F2ZSBvbiBjb3B5aW5nLgorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gbWVhc3VyYWJsZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsCisgICAgICAgICAgICAvLyBidXQgaXQgbWlnaHQgaGVscCBpbiBzb21lIHVzYWdlIHBhdHRlcm5zLgorICAgICAgICAgICAgaWYgKGxlbisyID4gbGlzdC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpbnRbXSB0ZW1wID0gbmV3IGludFtsZW4gKyAyICsgR1JPV19FWFRSQV07CisgICAgICAgICAgICAgICAgaWYgKGkgIT0gMCkgU3lzdGVtLmFycmF5Y29weShsaXN0LCAwLCB0ZW1wLCAwLCBpKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxpc3QsIGksIHRlbXAsIGkrMiwgbGVuLWkpOworICAgICAgICAgICAgICAgIGxpc3QgPSB0ZW1wOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxpc3QsIGksIGxpc3QsIGkrMiwgbGVuLWkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaXN0W2ldID0gYzsKKyAgICAgICAgICAgIGxpc3RbaSsxXSA9IGMrMTsKKyAgICAgICAgICAgIGxlbiArPSAyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwYXQgPSBudWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBzcGVjaWZpZWQgbXVsdGljaGFyYWN0ZXIgdG8gdGhpcyBzZXQgaWYgaXQgaXMgbm90IGFscmVhZHkKKyAgICAgKiBwcmVzZW50LiAgSWYgdGhpcyBzZXQgYWxyZWFkeSBjb250YWlucyB0aGUgbXVsdGljaGFyYWN0ZXIsCisgICAgICogdGhlIGNhbGwgbGVhdmVzIHRoaXMgc2V0IHVuY2hhbmdlZC4KKyAgICAgKiBUaHVzICJjaCIgPT4geyJjaCJ9CisJICogPGJyPjxiPldhcm5pbmc6IHlvdSBjYW5ub3QgYWRkIGFuIGVtcHR5IHN0cmluZyAoIiIpIHRvIGEgVW5pY29kZVNldC48L2I+CisgICAgICogQHBhcmFtIHMgdGhlIHNvdXJjZSBzdHJpbmcKKyAgICAgKiBAcmV0dXJuIHRoaXMgb2JqZWN0LCBmb3IgY2hhaW5pbmcKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgVW5pY29kZVNldCBhZGQoU3RyaW5nIHMpIHsKKyAgICAgICAgCisgICAgICAgIGludCBjcCA9IGdldFNpbmdsZUNQKHMpOworICAgICAgICBpZiAoY3AgPCAwKSB7CisgICAgICAgIAlzdHJpbmdzLmFkZChzKTsKKyAgICAgICAgCXBhdCA9IG51bGw7CisJCX0gZWxzZSB7CisJCQlhZGQoY3AsIGNwKTsKKwkJfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQHJldHVybiBhIGNvZGUgcG9pbnQgSUYgdGhlIHN0cmluZyBjb25zaXN0cyBvZiBhIHNpbmdsZSBvbmUuCisgICAgICogb3RoZXJ3aXNlIHJldHVybnMgLTEuCisgICAgICogQHBhcmFtIHN0cmluZyB0byB0ZXN0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFNpbmdsZUNQKFN0cmluZyBzKSB7CisgICAgICAgIGlmIChzLmxlbmd0aCgpIDwgMSkgeworICAgICAgICAJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2FuJ3QgdXNlIHplcm8tbGVuZ3RoIHN0cmluZ3MgaW4gVW5pY29kZVNldCIpOworICAgICAgICB9CisgICAgCWlmIChzLmxlbmd0aCgpID4gMikgcmV0dXJuIC0xOworICAgIAlpZiAocy5sZW5ndGgoKSA9PSAxKSByZXR1cm4gcy5jaGFyQXQoMCk7CisgICAgCQorICAgIAkvLyBhdCB0aGlzIHBvaW50LCBsZW4gPSAyCisgICAgICAgIGludCBjcCA9IFVURjE2LmNoYXJBdChzLCAwKTsKKyAgICAgICAgaWYgKGNwID4gMHhGRkZGKSB7IC8vIGlzIHN1cnJvZ2F0ZSBwYWlyCisgICAgICAgIAlyZXR1cm4gY3A7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGRzIGVhY2ggb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyBzdHJpbmcgdG8gdGhlIHNldC4gVGh1cyAiY2giID0+IHsiYyIsICJoIn0KKyAgICAgKiBJZiB0aGlzIHNldCBhbHJlYWR5IGFueSBwYXJ0aWN1bGFyIGNoYXJhY3RlciwgaXQgaGFzIG5vIGVmZmVjdCBvbiB0aGF0IGNoYXJhY3Rlci4KKyAgICAgKiBAcGFyYW0gcyB0aGUgc291cmNlIHN0cmluZworICAgICAqIEByZXR1cm4gdGhpcyBvYmplY3QsIGZvciBjaGFpbmluZworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBVbmljb2RlU2V0IGFkZEFsbChTdHJpbmcgcykgeworICAgICAgICBpbnQgY3A7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgaSArPSBVVEYxNi5nZXRDaGFyQ291bnQoY3ApKSB7CisgICAgICAgICAgICBjcCA9IFVURjE2LmNoYXJBdChzLCBpKTsKKyAgICAgICAgICAgIGFkZChjcCwgY3ApOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldGFpbnMgRUFDSCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIHN0cmluZy4gTm90ZTogImNoIiA9PSB7ImMiLCAiaCJ9CisgICAgICogSWYgdGhpcyBzZXQgYWxyZWFkeSBhbnkgcGFydGljdWxhciBjaGFyYWN0ZXIsIGl0IGhhcyBubyBlZmZlY3Qgb24gdGhhdCBjaGFyYWN0ZXIuCisgICAgICogQHBhcmFtIHMgdGhlIHNvdXJjZSBzdHJpbmcKKyAgICAgKiBAcmV0dXJuIHRoaXMgb2JqZWN0LCBmb3IgY2hhaW5pbmcKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgVW5pY29kZVNldCByZXRhaW5BbGwoU3RyaW5nIHMpIHsKKyAgICAJcmV0dXJuIHJldGFpbkFsbChmcm9tQWxsKHMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wbGVtZW50IEVBQ0ggb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyBzdHJpbmcuIE5vdGU6ICJjaCIgPT0geyJjIiwgImgifQorICAgICAqIElmIHRoaXMgc2V0IGFscmVhZHkgYW55IHBhcnRpY3VsYXIgY2hhcmFjdGVyLCBpdCBoYXMgbm8gZWZmZWN0IG9uIHRoYXQgY2hhcmFjdGVyLgorICAgICAqIEBwYXJhbSBzIHRoZSBzb3VyY2Ugc3RyaW5nCisgICAgICogQHJldHVybiB0aGlzIG9iamVjdCwgZm9yIGNoYWluaW5nCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFVuaWNvZGVTZXQgY29tcGxlbWVudEFsbChTdHJpbmcgcykgeworICAgIAlyZXR1cm4gY29tcGxlbWVudEFsbChmcm9tQWxsKHMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgRUFDSCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIHN0cmluZy4gTm90ZTogImNoIiA9PSB7ImMiLCAiaCJ9CisgICAgICogSWYgdGhpcyBzZXQgYWxyZWFkeSBhbnkgcGFydGljdWxhciBjaGFyYWN0ZXIsIGl0IGhhcyBubyBlZmZlY3Qgb24gdGhhdCBjaGFyYWN0ZXIuCisgICAgICogQHBhcmFtIHMgdGhlIHNvdXJjZSBzdHJpbmcKKyAgICAgKiBAcmV0dXJuIHRoaXMgb2JqZWN0LCBmb3IgY2hhaW5pbmcKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgVW5pY29kZVNldCByZW1vdmVBbGwoU3RyaW5nIHMpIHsKKyAgICAJcmV0dXJuIHJlbW92ZUFsbChmcm9tQWxsKHMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYWtlcyBhIHNldCBmcm9tIGEgbXVsdGljaGFyYWN0ZXIgc3RyaW5nLiBUaHVzICJjaCIgPT4geyJjaCJ9CisJICogPGJyPjxiPldhcm5pbmc6IHlvdSBjYW5ub3QgYWRkIGFuIGVtcHR5IHN0cmluZyAoIiIpIHRvIGEgVW5pY29kZVNldC48L2I+CisgICAgICogQHBhcmFtIHMgdGhlIHNvdXJjZSBzdHJpbmcKKyAgICAgKiBAcmV0dXJuIGEgbmV3bHkgY3JlYXRlZCBzZXQgY29udGFpbmluZyB0aGUgZ2l2ZW4gc3RyaW5nCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBVbmljb2RlU2V0IGZyb20oU3RyaW5nIHMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBVbmljb2RlU2V0KCkuYWRkKHMpOworICAgIH0KKworICAgIAorICAgIC8qKgorICAgICAqIE1ha2VzIGEgc2V0IGZyb20gZWFjaCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLiBUaHVzICJjaCIgPT4geyJjIiwgImgifQorICAgICAqIEBwYXJhbSBzIHRoZSBzb3VyY2Ugc3RyaW5nCisgICAgICogQHJldHVybiBhIG5ld2x5IGNyZWF0ZWQgc2V0IGNvbnRhaW5pbmcgdGhlIGdpdmVuIGNoYXJhY3RlcnMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFVuaWNvZGVTZXQgZnJvbUFsbChTdHJpbmcgcykgeworICAgICAgICByZXR1cm4gbmV3IFVuaWNvZGVTZXQoKS5hZGRBbGwocyk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBSZXRhaW4gb25seSB0aGUgZWxlbWVudHMgaW4gdGhpcyBzZXQgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoZQorICAgICAqIHNwZWNpZmllZCByYW5nZS4gIElmIDxjb2RlPmVuZCA+IHN0YXJ0PC9jb2RlPiB0aGVuIGFuIGVtcHR5IHJhbmdlIGlzCisgICAgICogcmV0YWluZWQsIGxlYXZpbmcgdGhlIHNldCBlbXB0eS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGFydCBmaXJzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2YgcmFuZ2UgdG8gYmUgcmV0YWluZWQKKyAgICAgKiB0byB0aGlzIHNldC4KKyAgICAgKiBAcGFyYW0gZW5kIGxhc3QgY2hhcmFjdGVyLCBpbmNsdXNpdmUsIG9mIHJhbmdlIHRvIGJlIHJldGFpbmVkCisgICAgICogdG8gdGhpcyBzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVTZXQgcmV0YWluKGludCBzdGFydCwgaW50IGVuZCkgeworICAgICAgICBpZiAoc3RhcnQgPCBNSU5fVkFMVUUgfHwgc3RhcnQgPiBNQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgY29kZSBwb2ludCBVKyIgKyBVdGlsaXR5LmhleChzdGFydCwgNikpOworICAgICAgICB9CisgICAgICAgIGlmIChlbmQgPCBNSU5fVkFMVUUgfHwgZW5kID4gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNvZGUgcG9pbnQgVSsiICsgVXRpbGl0eS5oZXgoZW5kLCA2KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXJ0IDw9IGVuZCkgeworICAgICAgICAgICAgcmV0YWluKHJhbmdlKHN0YXJ0LCBlbmQpLCAyLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0YWluIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGZyb20gdGhpcyBzZXQgaWYgaXQgaXMgcHJlc2VudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgVW5pY29kZVNldCByZXRhaW4oaW50IGMpIHsKKyAgICAgICAgcmV0dXJuIHJldGFpbihjLCBjKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0YWluIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGluIHRoaXMgc2V0IGlmIGl0IGlzIHByZXNlbnQuCisgICAgICogVGhlIHNldCB3aWxsIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIG9uY2UgdGhlIGNhbGwKKyAgICAgKiByZXR1cm5zLgorICAgICAqIEBwYXJhbSBzIHRoZSBzb3VyY2Ugc3RyaW5nCisgICAgICogQHJldHVybiB0aGlzIG9iamVjdCwgZm9yIGNoYWluaW5nCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFVuaWNvZGVTZXQgcmV0YWluKFN0cmluZyBzKSB7CisgICAgICAgIGludCBjcCA9IGdldFNpbmdsZUNQKHMpOworICAgICAgICBpZiAoY3AgPCAwKSB7CisgICAgICAgIAlpZiAoc3RyaW5ncy5zaXplKCkgPT0gMSAmJiBzdHJpbmdzLmNvbnRhaW5zKHMpKSByZXR1cm4gdGhpczsKKyAgICAgICAgCXN0cmluZ3MuY2xlYXIoKTsKKyAgICAgICAgCXN0cmluZ3MuYWRkKHMpOworICAgICAgICAJcGF0ID0gbnVsbDsKKwkJfSBlbHNlIHsKKwkJCXJldGFpbihjcCwgY3ApOworCQl9CisJCXJldHVybiB0aGlzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCByYW5nZSBmcm9tIHRoaXMgc2V0IGlmIGl0IGlzIHByZXNlbnQuCisgICAgICogVGhlIHNldCB3aWxsIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb25jZSB0aGUgY2FsbAorICAgICAqIHJldHVybnMuICBJZiA8Y29kZT5lbmQgPiBzdGFydDwvY29kZT4gdGhlbiBhbiBlbXB0eSByYW5nZSBpcworICAgICAqIHJlbW92ZWQsIGxlYXZpbmcgdGhlIHNldCB1bmNoYW5nZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RhcnQgZmlyc3QgY2hhcmFjdGVyLCBpbmNsdXNpdmUsIG9mIHJhbmdlIHRvIGJlIHJlbW92ZWQKKyAgICAgKiBmcm9tIHRoaXMgc2V0LgorICAgICAqIEBwYXJhbSBlbmQgbGFzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2YgcmFuZ2UgdG8gYmUgcmVtb3ZlZAorICAgICAqIGZyb20gdGhpcyBzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVTZXQgcmVtb3ZlKGludCBzdGFydCwgaW50IGVuZCkgeworICAgICAgICBpZiAoc3RhcnQgPCBNSU5fVkFMVUUgfHwgc3RhcnQgPiBNQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgY29kZSBwb2ludCBVKyIgKyBVdGlsaXR5LmhleChzdGFydCwgNikpOworICAgICAgICB9CisgICAgICAgIGlmIChlbmQgPCBNSU5fVkFMVUUgfHwgZW5kID4gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNvZGUgcG9pbnQgVSsiICsgVXRpbGl0eS5oZXgoZW5kLCA2KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXJ0IDw9IGVuZCkgeworICAgICAgICAgICAgcmV0YWluKHJhbmdlKHN0YXJ0LCBlbmQpLCAyLCAyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGZyb20gdGhpcyBzZXQgaWYgaXQgaXMgcHJlc2VudC4KKyAgICAgKiBUaGUgc2V0IHdpbGwgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgb25jZSB0aGUgY2FsbAorICAgICAqIHJldHVybnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFVuaWNvZGVTZXQgcmVtb3ZlKGludCBjKSB7CisgICAgICAgIHJldHVybiByZW1vdmUoYywgYyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyBmcm9tIHRoaXMgc2V0IGlmIGl0IGlzIHByZXNlbnQuCisgICAgICogVGhlIHNldCB3aWxsIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIG9uY2UgdGhlIGNhbGwKKyAgICAgKiByZXR1cm5zLgorICAgICAqIEBwYXJhbSBzIHRoZSBzb3VyY2Ugc3RyaW5nCisgICAgICogQHJldHVybiB0aGlzIG9iamVjdCwgZm9yIGNoYWluaW5nCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFVuaWNvZGVTZXQgcmVtb3ZlKFN0cmluZyBzKSB7CisgICAgICAgIGludCBjcCA9IGdldFNpbmdsZUNQKHMpOworICAgICAgICBpZiAoY3AgPCAwKSB7CisgICAgICAgIAlzdHJpbmdzLnJlbW92ZShzKTsKKyAgICAgICAgCXBhdCA9IG51bGw7CisJCX0gZWxzZSB7CisJCQlyZW1vdmUoY3AsIGNwKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wbGVtZW50cyB0aGUgc3BlY2lmaWVkIHJhbmdlIGluIHRoaXMgc2V0LiAgQW55IGNoYXJhY3RlciBpbgorICAgICAqIHRoZSByYW5nZSB3aWxsIGJlIHJlbW92ZWQgaWYgaXQgaXMgaW4gdGhpcyBzZXQsIG9yIHdpbGwgYmUKKyAgICAgKiBhZGRlZCBpZiBpdCBpcyBub3QgaW4gdGhpcyBzZXQuICBJZiA8Y29kZT5lbmQgPiBzdGFydDwvY29kZT4KKyAgICAgKiB0aGVuIGFuIGVtcHR5IHJhbmdlIGlzIGNvbXBsZW1lbnRlZCwgbGVhdmluZyB0aGUgc2V0IHVuY2hhbmdlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGFydCBmaXJzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2YgcmFuZ2UgdG8gYmUgcmVtb3ZlZAorICAgICAqIGZyb20gdGhpcyBzZXQuCisgICAgICogQHBhcmFtIGVuZCBsYXN0IGNoYXJhY3RlciwgaW5jbHVzaXZlLCBvZiByYW5nZSB0byBiZSByZW1vdmVkCisgICAgICogZnJvbSB0aGlzIHNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCBjb21wbGVtZW50KGludCBzdGFydCwgaW50IGVuZCkgeworICAgICAgICBpZiAoc3RhcnQgPCBNSU5fVkFMVUUgfHwgc3RhcnQgPiBNQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgY29kZSBwb2ludCBVKyIgKyBVdGlsaXR5LmhleChzdGFydCwgNikpOworICAgICAgICB9CisgICAgICAgIGlmIChlbmQgPCBNSU5fVkFMVUUgfHwgZW5kID4gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNvZGUgcG9pbnQgVSsiICsgVXRpbGl0eS5oZXgoZW5kLCA2KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXJ0IDw9IGVuZCkgeworICAgICAgICAgICAgeG9yKHJhbmdlKHN0YXJ0LCBlbmQpLCAyLCAwKTsKKyAgICAgICAgfQorICAgICAgICBwYXQgPSBudWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wbGVtZW50cyB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBpbiB0aGlzIHNldC4gIFRoZSBjaGFyYWN0ZXIKKyAgICAgKiB3aWxsIGJlIHJlbW92ZWQgaWYgaXQgaXMgaW4gdGhpcyBzZXQsIG9yIHdpbGwgYmUgYWRkZWQgaWYgaXQgaXMKKyAgICAgKiBub3QgaW4gdGhpcyBzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFVuaWNvZGVTZXQgY29tcGxlbWVudChpbnQgYykgeworICAgICAgICByZXR1cm4gY29tcGxlbWVudChjLCBjKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgKiA8Y29kZT5jb21wbGVtZW50KE1JTl9WQUxVRSwgTUFYX1ZBTFVFKTwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVTZXQgY29tcGxlbWVudCgpIHsKKyAgICAgICAgaWYgKGxpc3RbMF0gPT0gTE9XKSB7CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxpc3QsIDEsIGxpc3QsIDAsIGxlbi0xKTsKKyAgICAgICAgICAgIC0tbGVuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW5zdXJlQ2FwYWNpdHkobGVuKzEpOworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShsaXN0LCAwLCBsaXN0LCAxLCBsZW4pOworICAgICAgICAgICAgbGlzdFswXSA9IExPVzsKKyAgICAgICAgICAgICsrbGVuOworICAgICAgICB9CisgICAgICAgIHBhdCA9IG51bGw7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb21wbGVtZW50IHRoZSBzcGVjaWZpZWQgc3RyaW5nIGluIHRoaXMgc2V0LgorICAgICAqIFRoZSBzZXQgd2lsbCBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHN0cmluZyBvbmNlIHRoZSBjYWxsCisgICAgICogcmV0dXJucy4KKwkgKiA8YnI+PGI+V2FybmluZzogeW91IGNhbm5vdCBhZGQgYW4gZW1wdHkgc3RyaW5nICgiIikgdG8gYSBVbmljb2RlU2V0LjwvYj4KKyAgICAgKiBAcGFyYW0gcyB0aGUgc3RyaW5nIHRvIGNvbXBsZW1lbnQKKyAgICAgKiBAcmV0dXJuIHRoaXMgb2JqZWN0LCBmb3IgY2hhaW5pbmcKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgVW5pY29kZVNldCBjb21wbGVtZW50KFN0cmluZyBzKSB7CisgICAgICAgIGludCBjcCA9IGdldFNpbmdsZUNQKHMpOworICAgICAgICBpZiAoY3AgPCAwKSB7CisgICAgICAgIAlpZiAoc3RyaW5ncy5jb250YWlucyhzKSkgc3RyaW5ncy5yZW1vdmUocyk7CisgICAgICAgIAllbHNlIHN0cmluZ3MuYWRkKHMpOworICAgICAgICAJcGF0ID0gbnVsbDsKKwkJfSBlbHNlIHsKKwkJCWNvbXBsZW1lbnQoY3AsIGNwKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKyAgICB9ICAgIAorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc2V0IGNvbnRhaW5zIHRoZSBnaXZlbiBjaGFyYWN0ZXIuCisgICAgICogQHBhcmFtIGMgY2hhcmFjdGVyIHRvIGJlIGNoZWNrZWQgZm9yIGNvbnRhaW5tZW50CisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0ZXN0IGNvbmRpdGlvbiBpcyBtZXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhpbnQgYykgeworICAgICAgICBpZiAoYyA8IE1JTl9WQUxVRSB8fCBjID4gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNvZGUgcG9pbnQgVSsiICsgVXRpbGl0eS5oZXgoYywgNikpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgLy8gU2V0IGkgdG8gdGhlIGluZGV4IG9mIHRoZSBzdGFydCBpdGVtIGdyZWF0ZXIgdGhhbiBjaAorICAgICAgICAvLyBXZSBrbm93IHdlIHdpbGwgdGVybWluYXRlIHdpdGhvdXQgbGVuZ3RoIHRlc3QhCisgICAgICAgIGludCBpID0gLTE7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoYyA8IGxpc3RbKytpXSkgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICBpbnQgaSA9IGZpbmRDb2RlUG9pbnQoYyk7CisKKyAgICAgICAgcmV0dXJuICgoaSAmIDEpICE9IDApOyAvLyByZXR1cm4gdHJ1ZSBpZiBvZGQKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWx1ZSBpIHN1Y2ggdGhhdCBjIDwgbGlzdFtpXS4gIENhbGxlcgorICAgICAqIG11c3QgZW5zdXJlIHRoYXQgYyBpcyBhIGxlZ2FsIHZhbHVlIG9yIHRoaXMgbWV0aG9kIHdpbGwgZW50ZXIKKyAgICAgKiBhbiBpbmZpbml0ZSBsb29wLiAgVGhpcyBtZXRob2QgcGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoLgorICAgICAqIEBwYXJhbSBjIGEgY2hhcmFjdGVyIGluIHRoZSByYW5nZSBNSU5fVkFMVUUuLk1BWF9WQUxVRQorICAgICAqIGluY2x1c2l2ZQorICAgICAqIEByZXR1cm4gdGhlIHNtYWxsZXN0IGludGVnZXIgaSBpbiB0aGUgcmFuZ2UgMC4ubGVuLTEsCisgICAgICogaW5jbHVzaXZlLCBzdWNoIHRoYXQgYyA8IGxpc3RbaV0KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGludCBmaW5kQ29kZVBvaW50KGludCBjKSB7CisgICAgICAgIC8qIEV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRDb2RlUG9pbnQoYykKKyAgICAgICAgICAgc2V0ICAgICAgICAgICAgICBsaXN0W10gICAgICAgICBjPTAgMSAzIDQgNyA4CisgICAgICAgICAgID09PSAgICAgICAgICAgICAgPT09PT09PT09PT09PT0gICA9PT09PT09PT09PQorICAgICAgICAgICBbXSAgICAgICAgICAgICAgIFsxMTAwMDBdICAgICAgICAgMCAwIDAgMCAwIDAKKyAgICAgICAgICAgW1x1MDAwMC1cdTAwMDNdICBbMCwgNCwgMTEwMDAwXSAgIDEgMSAxIDIgMiAyCisgICAgICAgICAgIFtcdTAwMDQtXHUwMDA3XSAgWzQsIDgsIDExMDAwMF0gICAwIDAgMCAxIDEgMgorICAgICAgICAgICBbOmFsbDpdICAgICAgICAgIFswLCAxMTAwMDBdICAgICAgMSAxIDEgMSAxIDEKKyAgICAgICAgICovCisKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBzbWFsbGVzdCBpIHN1Y2ggdGhhdCBjIDwgbGlzdFtpXS4gIEFzc3VtZQorICAgICAgICAvLyBsaXN0W2xlbiAtIDFdID09IEhJR0ggYW5kIHRoYXQgYyBpcyBsZWdhbCAoMC4uSElHSC0xKS4KKyAgICAgICAgaWYgKGMgPCBsaXN0WzBdKSByZXR1cm4gMDsKKyAgICAgICAgLy8gSGlnaCBydW5uZXIgdGVzdC4gIGMgaXMgb2Z0ZW4gYWZ0ZXIgdGhlIGxhc3QgcmFuZ2UsIHNvIGFuCisgICAgICAgIC8vIGluaXRpYWwgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uIHBheXMgb2ZmLiAKKyAgICAgICAgaWYgKGxlbiA+PSAyICYmIGMgPj0gbGlzdFtsZW4tMl0pIHJldHVybiBsZW4tMTsKKyAgICAgICAgaW50IGxvID0gMDsKKyAgICAgICAgaW50IGhpID0gbGVuIC0gMTsKKyAgICAgICAgLy8gaW52YXJpYW50OiBjID49IGxpc3RbbG9dCisgICAgICAgIC8vIGludmFyaWFudDogYyA8IGxpc3RbaGldCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGludCBpID0gKGxvICsgaGkpID4+PiAxOworICAgICAgICAgICAgaWYgKGkgPT0gbG8pIHJldHVybiBoaTsKKyAgICAgICAgICAgIGlmIChjIDwgbGlzdFtpXSkgeworICAgICAgICAgICAgICAgIGhpID0gaTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG8gPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisvLyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIC8vIFVucm9sbGVkIGJpbmFyeSBzZWFyY2gKKy8vICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vICAgIHByaXZhdGUgaW50IHZhbGlkTGVuID0gLTE7IC8vIHZhbGlkYXRlZCB2YWx1ZSBvZiBsZW4KKy8vICAgIHByaXZhdGUgaW50IHRvcE9mTG93OworLy8gICAgcHJpdmF0ZSBpbnQgdG9wT2ZIaWdoOworLy8gICAgcHJpdmF0ZSBpbnQgcG93ZXI7CisvLyAgICBwcml2YXRlIGludCBkZWx0YVN0YXJ0OworLy8KKy8vICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZSgpIHsKKy8vICAgICAgICBpZiAobGVuIDw9IDEpIHsKKy8vICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibGlzdC5sZW49PSIgKyBsZW4gKyAiOyBtdXN0IGJlID4xIik7CisvLyAgICAgICAgfQorLy8KKy8vICAgICAgICAvLyBmaW5kIGdyZWF0ZXN0IHBvd2VyIG9mIDIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxlbgorLy8gICAgICAgIGZvciAocG93ZXIgPSBleHAyLmxlbmd0aC0xOyBwb3dlciA+IDAgJiYgZXhwMltwb3dlcl0gPiBsZW47IHBvd2VyLS0pIHt9CisvLworLy8gICAgICAgIC8vIGFzc2VydChleHAyW3Bvd2VyXSA8PSBsZW4pOworLy8KKy8vICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIHN0YXJ0aW5nIHBvaW50cworLy8gICAgICAgIHRvcE9mTG93ID0gZXhwMltwb3dlcl0gLSAxOworLy8gICAgICAgIHRvcE9mSGlnaCA9IGxlbiAtIDE7CisvLyAgICAgICAgZGVsdGFTdGFydCA9IGV4cDJbcG93ZXItMV07CisvLyAgICAgICAgdmFsaWRMZW4gPSBsZW47CisvLyAgICB9CisvLworLy8gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGV4cDJbXSA9IHsKKy8vICAgICAgICAweDEsIDB4MiwgMHg0LCAweDgsCisvLyAgICAgICAgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKKy8vICAgICAgICAweDEwMCwgMHgyMDAsIDB4NDAwLCAweDgwMCwKKy8vICAgICAgICAweDEwMDAsIDB4MjAwMCwgMHg0MDAwLCAweDgwMDAsCisvLyAgICAgICAgMHgxMDAwMCwgMHgyMDAwMCwgMHg0MDAwMCwgMHg4MDAwMCwKKy8vICAgICAgICAweDEwMDAwMCwgMHgyMDAwMDAsIDB4NDAwMDAwLCAweDgwMDAwMCwKKy8vICAgICAgICAweDEwMDAwMDAsIDB4MjAwMDAwMCwgMHg0MDAwMDAwLCAweDgwMDAwMDAsCisvLyAgICAgICAgMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCAvLyAsIDB4NDAwMDAwMDAgLy8gbm8gdW5zaWduZWQgaW50IGluIEphdmEKKy8vICAgIH07CisvLworLy8gICAgLyoqCisvLyAgICAgKiBVbnJvbGxlZCBsb3dlc3QgaW5kZXggR1QuCisvLyAgICAgKi8KKy8vICAgIHByaXZhdGUgZmluYWwgaW50IGxlYXN0SW5kZXhHVChpbnQgc2VhcmNoVmFsdWUpIHsKKy8vCisvLyAgICAgICAgaWYgKGxlbiAhPSB2YWxpZExlbikgeworLy8gICAgICAgICAgICBpZiAobGVuID09IDEpIHJldHVybiAwOworLy8gICAgICAgICAgICB2YWxpZGF0ZSgpOworLy8gICAgICAgIH0KKy8vICAgICAgICBpbnQgdGVtcDsKKy8vICAgICAgICAKKy8vICAgICAgICAvLyBzZXQgdXAgaW5pdGlhbCByYW5nZSB0byBzZWFyY2guIEVhY2ggc3VicmFuZ2UgaXMgYSBwb3dlciBvZiB0d28gaW4gbGVuZ3RoCisvLyAgICAgICAgaW50IGhpZ2ggPSBzZWFyY2hWYWx1ZSA8IGxpc3RbdG9wT2ZMb3ddID8gdG9wT2ZMb3cgOiB0b3BPZkhpZ2g7CisvLworLy8gICAgICAgIC8vIENvbXBsZXRlbHkgdW5yb2xsZWQgYmluYXJ5IHNlYXJjaCwgZm9saGlnaGluZyAiUHJvZ3JhbW1pbmcgUGVhcmxzIgorLy8gICAgICAgIC8vIEVhY2ggY2FzZSBkZWxpYmVyYXRlbHkgZmFsbHMgdGhyb3VnaCB0byB0aGUgbmV4dAorLy8gICAgICAgIC8vIExvZ2ljYWxseSwgbGlzdFstMV0gPCBhbGxfc2VhcmNoX3ZhbHVlcyAmJiBsaXN0W2NvdW50XSA+IGFsbF9zZWFyY2hfdmFsdWVzCisvLyAgICAgICAgLy8gYWx0aG91Z2ggdGhlIHZhbHVlcyAtMSBhbmQgY291bnQgYXJlIG5ldmVyIGFjdHVhbGx5IHRvdWNoZWQuCisvLyAgICAgICAgCisvLyAgICAgICAgLy8gVGhlIGJvdW5kcyBhdCBlYWNoIHBvaW50IGFyZSBsb3cgJiBoaWdoLAorLy8gICAgICAgIC8vIHdoZXJlIGxvdyA9PSBoaWdoIC0gZGVsdGEqMgorLy8gICAgICAgIC8vIHNvIGhpZ2ggLSBkZWx0YSBpcyB0aGUgbWlkcG9pbnQKKy8vICAgICAgICAKKy8vICAgICAgICAvLyBUaGUgaW52YXJpYW50IEFGVEVSIGVhY2ggbGluZSBpcyB0aGF0IGxpc3RbbG93XSA8IHNlYXJjaFZhbHVlIDw9IGxpc3RbaGlnaF0KKy8vICAgICAgICAKKy8vICAgICAgICBzd2l0Y2ggKHBvd2VyKSB7CisvLyAgICAgICAgLy9jYXNlIDMxOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLTB4NDAwMDAwMDBdKSBoaWdoID0gdGVtcDsgLy8gbm8gdW5zaWduZWQgaW50IGluIEphdmEKKy8vICAgICAgICBjYXNlIDMwOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLTB4MjAwMDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDI5OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLTB4MTAwMDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICAKKy8vICAgICAgICBjYXNlIDI4OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAweDgwMDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDI3OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAweDQwMDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDI2OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAweDIwMDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDI1OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAweDEwMDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICAKKy8vICAgICAgICBjYXNlIDI0OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgMHg4MDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDIzOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgMHg0MDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDIyOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgMHgyMDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDIxOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgMHgxMDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICAKKy8vICAgICAgICBjYXNlIDIwOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgIDB4ODAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDE5OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgIDB4NDAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDE4OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgIDB4MjAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDE3OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgIDB4MTAwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICAKKy8vICAgICAgICBjYXNlIDE2OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAweDgwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDE1OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAweDQwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDE0OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAweDIwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDEzOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAweDEwMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICAKKy8vICAgICAgICBjYXNlIDEyOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgMHg4MDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDExOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgMHg0MDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlIDEwOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgMHgyMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlICA5OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgMHgxMDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICAKKy8vICAgICAgICBjYXNlICA4OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgIDB4ODBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlICA3OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgIDB4NDBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlICA2OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgIDB4MjBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlICA1OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgIDB4MTBdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICAKKy8vICAgICAgICBjYXNlICA0OiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgICAweDhdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlICAzOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgICAweDRdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlICAyOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgICAweDJdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICBjYXNlICAxOiBpZiAoc2VhcmNoVmFsdWUgPCBsaXN0W3RlbXAgPSBoaWdoLSAgICAgICAweDFdKSBoaWdoID0gdGVtcDsKKy8vICAgICAgICB9CisvLworLy8gICAgICAgIHJldHVybiBoaWdoOworLy8gICAgfQorLy8KKy8vICAgIC8vIEZvciBkZWJ1Z2dpbmcgb25seQorLy8gICAgcHVibGljIGludCBsZW4oKSB7CisvLyAgICAgICAgcmV0dXJuIGxlbjsKKy8vICAgIH0KKy8vCisvLyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc2V0IGNvbnRhaW5zIGV2ZXJ5IGNoYXJhY3RlcgorICAgICAqIG9mIHRoZSBnaXZlbiByYW5nZS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgZmlyc3QgY2hhcmFjdGVyLCBpbmNsdXNpdmUsIG9mIHRoZSByYW5nZQorICAgICAqIEBwYXJhbSBlbmQgbGFzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2YgdGhlIHJhbmdlCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0ZXN0IGNvbmRpdGlvbiBpcyBtZXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhpbnQgc3RhcnQsIGludCBlbmQpIHsKKyAgICAgICAgaWYgKHN0YXJ0IDwgTUlOX1ZBTFVFIHx8IHN0YXJ0ID4gTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNvZGUgcG9pbnQgVSsiICsgVXRpbGl0eS5oZXgoc3RhcnQsIDYpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW5kIDwgTUlOX1ZBTFVFIHx8IGVuZCA+IE1BWF9WQUxVRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjb2RlIHBvaW50IFUrIiArIFV0aWxpdHkuaGV4KGVuZCwgNikpOworICAgICAgICB9CisgICAgICAgIC8vaW50IGkgPSAtMTsKKyAgICAgICAgLy93aGlsZSAodHJ1ZSkgeworICAgICAgICAvLyAgICBpZiAoc3RhcnQgPCBsaXN0WysraV0pIGJyZWFrOworICAgICAgICAvL30KKyAgICAgICAgaW50IGkgPSBmaW5kQ29kZVBvaW50KHN0YXJ0KTsKKyAgICAgICAgcmV0dXJuICgoaSAmIDEpICE9IDAgJiYgZW5kIDwgbGlzdFtpXSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoaXMgc2V0IGNvbnRhaW5zIHRoZSBnaXZlbgorICAgICAqIG11bHRpY2hhcmFjdGVyIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gcyBzdHJpbmcgdG8gYmUgY2hlY2tlZCBmb3IgY29udGFpbm1lbnQKKyAgICAgKiBAcmV0dXJuIDx0dD50cnVlPC90dD4gaWYgdGhpcyBzZXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzdHJpbmcKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBjb250YWlucyhTdHJpbmcgcykgeworICAgICAgICAKKyAgICAgICAgaW50IGNwID0gZ2V0U2luZ2xlQ1Aocyk7CisgICAgICAgIGlmIChjcCA8IDApIHsKKyAgICAgICAgCXJldHVybiBzdHJpbmdzLmNvbnRhaW5zKHMpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGNvbnRhaW5zKGNwKTsKKwkJfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgYWxsIHRoZSBjaGFyYWN0ZXJzIGFuZCBzdHJpbmdzCisgICAgICogb2YgdGhlIGdpdmVuIHNldC4KKyAgICAgKiBAcGFyYW0gYyBzZXQgdG8gYmUgY2hlY2tlZCBmb3IgY29udGFpbm1lbnQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRlc3QgY29uZGl0aW9uIGlzIG1ldAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zQWxsKFVuaWNvZGVTZXQgYykgeworICAgICAgICAvLyBUaGUgc3BlY2lmaWVkIHNldCBpcyBhIHN1YnNldCBpZiBhbGwgb2YgaXRzIHBhaXJzIGFyZSBjb250YWluZWQgaW4KKyAgICAgICAgLy8gdGhpcyBzZXQuICBJdCdzIHBvc3NpYmxlIHRvIGNvZGUgdGhpcyBtb3JlIGVmZmljaWVudGx5IGluIHRlcm1zIG9mCisgICAgICAgIC8vIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIGludmVyc2lvbiBsaXN0cyBpZiB0aGUgbmVlZCBhcmlzZXMuCisgICAgICAgIGludCBuID0gYy5nZXRSYW5nZUNvdW50KCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxuOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghY29udGFpbnMoYy5nZXRSYW5nZVN0YXJ0KGkpLCBjLmdldFJhbmdlRW5kKGkpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXN0cmluZ3MuY29udGFpbnNBbGwoYy5zdHJpbmdzKSkgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc2V0IGNvbnRhaW5zIGFsbCB0aGUgY2hhcmFjdGVycworICAgICAqIG9mIHRoZSBnaXZlbiBzdHJpbmcuCisgICAgICogQHBhcmFtIHMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBiZSBjaGVja2VkIGZvciBjb250YWlubWVudAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBjb25kaXRpb24gaXMgbWV0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNBbGwoU3RyaW5nIHMpIHsKKyAgICAgICAgaW50IGNwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7IGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGNwKSkgeworICAgICAgICAgICAgY3AgPSBVVEYxNi5jaGFyQXQocywgaSk7CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5zKGNwKSkgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgbm9uZSBvZiB0aGUgY2hhcmFjdGVycworICAgICAqIG9mIHRoZSBnaXZlbiByYW5nZS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgZmlyc3QgY2hhcmFjdGVyLCBpbmNsdXNpdmUsIG9mIHRoZSByYW5nZQorICAgICAqIEBwYXJhbSBlbmQgbGFzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2YgdGhlIHJhbmdlCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0ZXN0IGNvbmRpdGlvbiBpcyBtZXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc05vbmUoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgICAgIGlmIChzdGFydCA8IE1JTl9WQUxVRSB8fCBzdGFydCA+IE1BWF9WQUxVRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjb2RlIHBvaW50IFUrIiArIFV0aWxpdHkuaGV4KHN0YXJ0LCA2KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuZCA8IE1JTl9WQUxVRSB8fCBlbmQgPiBNQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgY29kZSBwb2ludCBVKyIgKyBVdGlsaXR5LmhleChlbmQsIDYpKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgaSA9IC0xOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHN0YXJ0IDwgbGlzdFsrK2ldKSBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKChpICYgMSkgPT0gMCAmJiBlbmQgPCBsaXN0W2ldKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgbm9uZSBvZiB0aGUgY2hhcmFjdGVycyBhbmQgc3RyaW5ncworICAgICAqIG9mIHRoZSBnaXZlbiBzZXQuCisgICAgICogQHBhcmFtIGMgc2V0IHRvIGJlIGNoZWNrZWQgZm9yIGNvbnRhaW5tZW50CisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0ZXN0IGNvbmRpdGlvbiBpcyBtZXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc05vbmUoVW5pY29kZVNldCBjKSB7CisgICAgICAgIC8vIFRoZSBzcGVjaWZpZWQgc2V0IGlzIGEgc3Vic2V0IGlmIGFsbCBvZiBpdHMgcGFpcnMgYXJlIGNvbnRhaW5lZCBpbgorICAgICAgICAvLyB0aGlzIHNldC4gIEl0J3MgcG9zc2libGUgdG8gY29kZSB0aGlzIG1vcmUgZWZmaWNpZW50bHkgaW4gdGVybXMgb2YKKyAgICAgICAgLy8gZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiB0aGUgaW52ZXJzaW9uIGxpc3RzIGlmIHRoZSBuZWVkIGFyaXNlcy4KKyAgICAgICAgaW50IG4gPSBjLmdldFJhbmdlQ291bnQoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPG47ICsraSkgeworICAgICAgICAgICAgaWYgKCFjb250YWluc05vbmUoYy5nZXRSYW5nZVN0YXJ0KGkpLCBjLmdldFJhbmdlRW5kKGkpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIVNvcnRlZFNldFJlbGF0aW9uLmhhc1JlbGF0aW9uKHN0cmluZ3MsIFNvcnRlZFNldFJlbGF0aW9uLkRJU0pPSU5ULCBjLnN0cmluZ3MpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgbm9uZSBvZiB0aGUgY2hhcmFjdGVycworICAgICAqIG9mIHRoZSBnaXZlbiBzdHJpbmcuCisgICAgICogQHBhcmFtIHMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBiZSBjaGVja2VkIGZvciBjb250YWlubWVudAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBjb25kaXRpb24gaXMgbWV0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNOb25lKFN0cmluZyBzKSB7CisgICAgICAgIGludCBjcDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpICs9IFVURjE2LmdldENoYXJDb3VudChjcCkpIHsKKyAgICAgICAgICAgIGNwID0gVVRGMTYuY2hhckF0KHMsIGkpOworICAgICAgICAgICAgaWYgKGNvbnRhaW5zKGNwKSkgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc2V0IGNvbnRhaW5zIG9uZSBvciBtb3JlIG9mIHRoZSBjaGFyYWN0ZXJzCisgICAgICogaW4gdGhlIGdpdmVuIHJhbmdlLgorICAgICAqIEBwYXJhbSBzdGFydCBmaXJzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2YgdGhlIHJhbmdlCisgICAgICogQHBhcmFtIGVuZCBsYXN0IGNoYXJhY3RlciwgaW5jbHVzaXZlLCBvZiB0aGUgcmFuZ2UKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvbmRpdGlvbiBpcyBtZXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBjb250YWluc1NvbWUoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgCXJldHVybiAhY29udGFpbnNOb25lKHN0YXJ0LCBlbmQpOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc2V0IGNvbnRhaW5zIG9uZSBvciBtb3JlIG9mIHRoZSBjaGFyYWN0ZXJzCisgICAgICogYW5kIHN0cmluZ3Mgb2YgdGhlIGdpdmVuIHNldC4KKyAgICAgKiBAcGFyYW0gYyBzZXQgdG8gYmUgY2hlY2tlZCBmb3IgY29udGFpbm1lbnQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvbmRpdGlvbiBpcyBtZXQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBjb250YWluc1NvbWUoVW5pY29kZVNldCBzKSB7CisgICAgCXJldHVybiAhY29udGFpbnNOb25lKHMpOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc2V0IGNvbnRhaW5zIG9uZSBvciBtb3JlIG9mIHRoZSBjaGFyYWN0ZXJzCisgICAgICogb2YgdGhlIGdpdmVuIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gcyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGJlIGNoZWNrZWQgZm9yIGNvbnRhaW5tZW50CisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb25kaXRpb24gaXMgbWV0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gY29udGFpbnNTb21lKFN0cmluZyBzKSB7CisgICAgCXJldHVybiAhY29udGFpbnNOb25lKHMpOworICAgIH0KKyAgICAgICAgCisgICAgICAgIAorICAgIC8qKgorICAgICAqIEFkZHMgYWxsIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIHNldCB0byB0aGlzIHNldCBpZgorICAgICAqIHRoZXkncmUgbm90IGFscmVhZHkgcHJlc2VudC4gIFRoaXMgb3BlcmF0aW9uIGVmZmVjdGl2ZWx5CisgICAgICogbW9kaWZpZXMgdGhpcyBzZXQgc28gdGhhdCBpdHMgdmFsdWUgaXMgdGhlIDxpPnVuaW9uPC9pPiBvZiB0aGUgdHdvCisgICAgICogc2V0cy4gIFRoZSBiZWhhdmlvciBvZiB0aGlzIG9wZXJhdGlvbiBpcyB1bnNwZWNpZmllZCBpZiB0aGUgc3BlY2lmaWVkCisgICAgICogY29sbGVjdGlvbiBpcyBtb2RpZmllZCB3aGlsZSB0aGUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtIGMgc2V0IHdob3NlIGVsZW1lbnRzIGFyZSB0byBiZSBhZGRlZCB0byB0aGlzIHNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCBhZGRBbGwoVW5pY29kZVNldCBjKSB7CisgICAgICAgIGFkZChjLmxpc3QsIGMubGVuLCAwKTsKKyAgICAgICAgc3RyaW5ncy5hZGRBbGwoYy5zdHJpbmdzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0YWlucyBvbmx5IHRoZSBlbGVtZW50cyBpbiB0aGlzIHNldCB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhlCisgICAgICogc3BlY2lmaWVkIHNldC4gIEluIG90aGVyIHdvcmRzLCByZW1vdmVzIGZyb20gdGhpcyBzZXQgYWxsIG9mCisgICAgICogaXRzIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBzZXQuICBUaGlzCisgICAgICogb3BlcmF0aW9uIGVmZmVjdGl2ZWx5IG1vZGlmaWVzIHRoaXMgc2V0IHNvIHRoYXQgaXRzIHZhbHVlIGlzCisgICAgICogdGhlIDxpPmludGVyc2VjdGlvbjwvaT4gb2YgdGhlIHR3byBzZXRzLgorICAgICAqCisgICAgICogQHBhcmFtIGMgc2V0IHRoYXQgZGVmaW5lcyB3aGljaCBlbGVtZW50cyB0aGlzIHNldCB3aWxsIHJldGFpbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCByZXRhaW5BbGwoVW5pY29kZVNldCBjKSB7CisgICAgICAgIHJldGFpbihjLmxpc3QsIGMubGVuLCAwKTsKKyAgICAgICAgc3RyaW5ncy5yZXRhaW5BbGwoYy5zdHJpbmdzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBmcm9tIHRoaXMgc2V0IGFsbCBvZiBpdHMgZWxlbWVudHMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoZQorICAgICAqIHNwZWNpZmllZCBzZXQuICBUaGlzIG9wZXJhdGlvbiBlZmZlY3RpdmVseSBtb2RpZmllcyB0aGlzCisgICAgICogc2V0IHNvIHRoYXQgaXRzIHZhbHVlIGlzIHRoZSA8aT5hc3ltbWV0cmljIHNldCBkaWZmZXJlbmNlPC9pPiBvZgorICAgICAqIHRoZSB0d28gc2V0cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjIHNldCB0aGF0IGRlZmluZXMgd2hpY2ggZWxlbWVudHMgd2lsbCBiZSByZW1vdmVkIGZyb20KKyAgICAgKiAgICAgICAgICB0aGlzIHNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCByZW1vdmVBbGwoVW5pY29kZVNldCBjKSB7CisgICAgICAgIHJldGFpbihjLmxpc3QsIGMubGVuLCAyKTsKKyAgICAgICAgc3RyaW5ncy5yZW1vdmVBbGwoYy5zdHJpbmdzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGxlbWVudHMgaW4gdGhpcyBzZXQgYWxsIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkCisgICAgICogc2V0LiAgQW55IGNoYXJhY3RlciBpbiB0aGUgb3RoZXIgc2V0IHdpbGwgYmUgcmVtb3ZlZCBpZiBpdCBpcworICAgICAqIGluIHRoaXMgc2V0LCBvciB3aWxsIGJlIGFkZGVkIGlmIGl0IGlzIG5vdCBpbiB0aGlzIHNldC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjIHNldCB0aGF0IGRlZmluZXMgd2hpY2ggZWxlbWVudHMgd2lsbCBiZSBjb21wbGVtZW50ZWQgZnJvbQorICAgICAqICAgICAgICAgIHRoaXMgc2V0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0IGNvbXBsZW1lbnRBbGwoVW5pY29kZVNldCBjKSB7CisgICAgICAgIHhvcihjLmxpc3QsIGMubGVuLCAwKTsKKyAgICAgICAgU29ydGVkU2V0UmVsYXRpb24uZG9PcGVyYXRpb24oc3RyaW5ncywgU29ydGVkU2V0UmVsYXRpb24uQ09NUExFTUVOVEFMTCwgYy5zdHJpbmdzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgb2YgdGhlIGVsZW1lbnRzIGZyb20gdGhpcyBzZXQuICBUaGlzIHNldCB3aWxsIGJlCisgICAgICogZW1wdHkgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVTZXQgY2xlYXIoKSB7CisgICAgICAgIGxpc3RbMF0gPSBISUdIOworICAgICAgICBsZW4gPSAxOworICAgICAgICBwYXQgPSBudWxsOworICAgICAgICBzdHJpbmdzLmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEl0ZXJhdGlvbiBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmFuZ2VzIGNvbnRhaW5lZCBpbgorICAgICAqIHRoaXMgc2V0LgorICAgICAqIEBzZWUgI2dldFJhbmdlU3RhcnQKKyAgICAgKiBAc2VlICNnZXRSYW5nZUVuZAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0UmFuZ2VDb3VudCgpIHsKKyAgICAgICAgcmV0dXJuIGxlbi8yOworICAgIH0KKworICAgIC8qKgorICAgICAqIEl0ZXJhdGlvbiBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICogc3BlY2lmaWVkIHJhbmdlIG9mIHRoaXMgc2V0LgorICAgICAqIEBleGNlcHRpb24gQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGluZGV4IGlzIG91dHNpZGUKKyAgICAgKiB0aGUgcmFuZ2UgPGNvZGU+MC4uZ2V0UmFuZ2VDb3VudCgpLTE8L2NvZGU+CisgICAgICogQHNlZSAjZ2V0UmFuZ2VDb3VudAorICAgICAqIEBzZWUgI2dldFJhbmdlRW5kCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRSYW5nZVN0YXJ0KGludCBpbmRleCkgeworICAgICAgICByZXR1cm4gbGlzdFtpbmRleCoyXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJdGVyYXRpb24gbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlCisgICAgICogc3BlY2lmaWVkIHJhbmdlIG9mIHRoaXMgc2V0LgorICAgICAqIEBleGNlcHRpb24gQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGluZGV4IGlzIG91dHNpZGUKKyAgICAgKiB0aGUgcmFuZ2UgPGNvZGU+MC4uZ2V0UmFuZ2VDb3VudCgpLTE8L2NvZGU+CisgICAgICogQHNlZSAjZ2V0UmFuZ2VTdGFydAorICAgICAqIEBzZWUgI2dldFJhbmdlRW5kCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRSYW5nZUVuZChpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIChsaXN0W2luZGV4KjIgKyAxXSAtIDEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlYWxsb2NhdGUgdGhpcyBvYmplY3RzIGludGVybmFsIHN0cnVjdHVyZXMgdG8gdGFrZSB1cCB0aGUgbGVhc3QKKyAgICAgKiBwb3NzaWJsZSBzcGFjZSwgd2l0aG91dCBjaGFuZ2luZyB0aGlzIG9iamVjdCdzIHZhbHVlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0IGNvbXBhY3QoKSB7CisgICAgICAgIGlmIChsZW4gIT0gbGlzdC5sZW5ndGgpIHsKKyAgICAgICAgICAgIGludFtdIHRlbXAgPSBuZXcgaW50W2xlbl07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxpc3QsIDAsIHRlbXAsIDAsIGxlbik7CisgICAgICAgICAgICBsaXN0ID0gdGVtcDsKKyAgICAgICAgfQorICAgICAgICByYW5nZUxpc3QgPSBudWxsOworICAgICAgICBidWZmZXIgPSBudWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0aGUgc3BlY2lmaWVkIG9iamVjdCB3aXRoIHRoaXMgc2V0IGZvciBlcXVhbGl0eS4gIFJldHVybnMKKyAgICAgKiA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGFsc28gYSBzZXQsIHRoZSB0d28gc2V0cworICAgICAqIGhhdmUgdGhlIHNhbWUgc2l6ZSwgYW5kIGV2ZXJ5IG1lbWJlciBvZiB0aGUgc3BlY2lmaWVkIHNldCBpcworICAgICAqIGNvbnRhaW5lZCBpbiB0aGlzIHNldCAob3IgZXF1aXZhbGVudGx5LCBldmVyeSBtZW1iZXIgb2YgdGhpcyBzZXQgaXMKKyAgICAgKiBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBzZXQpLgorICAgICAqCisgICAgICogQHBhcmFtIG8gT2JqZWN0IHRvIGJlIGNvbXBhcmVkIGZvciBlcXVhbGl0eSB3aXRoIHRoaXMgc2V0LgorICAgICAqIEByZXR1cm4gPHR0PnRydWU8L3R0PiBpZiB0aGUgc3BlY2lmaWVkIE9iamVjdCBpcyBlcXVhbCB0byB0aGlzIHNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFVuaWNvZGVTZXQgdGhhdCA9IChVbmljb2RlU2V0KSBvOworICAgICAgICAgICAgaWYgKGxlbiAhPSB0aGF0LmxlbikgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChsaXN0W2ldICE9IHRoYXQubGlzdFtpXSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzdHJpbmdzLmVxdWFscyh0aGF0LnN0cmluZ3MpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIHZhbHVlIGZvciB0aGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIGhhc2ggY29kZSB2YWx1ZSBmb3IgdGhpcyBzZXQuCisgICAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2hhc2hDb2RlKCkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICBpbnQgcmVzdWx0ID0gbGVuOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICByZXN1bHQgKj0gMTAwMDAwMzsKKyAgICAgICAgICAgIHJlc3VsdCArPSBsaXN0W2ldOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgcHJvZ3JhbW1lci1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIHRvUGF0dGVybih0cnVlKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBJbXBsZW1lbnRhdGlvbjogUGF0dGVybiBwYXJzaW5nCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgdGhlIGdpdmVuIHBhdHRlcm4sIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4gIFRoZSBjaGFyYWN0ZXIKKyAgICAgKiBhdCBwYXR0ZXJuLmNoYXJBdChwb3MuZ2V0SW5kZXgoKSkgbXVzdCBiZSAnWycsIG9yIHRoZSBwYXJzZSBmYWlscy4KKyAgICAgKiBQYXJzaW5nIGNvbnRpbnVlcyB1bnRpbCB0aGUgY29ycmVzcG9uZGluZyBjbG9zaW5nICddJy4gIElmIGEgc3ludGF4IGVycm9yCisgICAgICogaXMgZW5jb3VudGVyZWQgYmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBicmFjZSwgdGhlIHBhcnNlIGZhaWxzLgorICAgICAqIFVwb24gcmV0dXJuIGZyb20gYSBzdWNjZXNzZnVsIHBhcnNlLCB0aGUgUGFyc2VQb3NpdGlvbiBpcyB1cGRhdGVkIHRvCisgICAgICogcG9pbnQgdG8gdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGNsb3NpbmcgJ10nLCBhbmQgYW4gaW52ZXJzaW9uCisgICAgICogbGlzdCBmb3IgdGhlIHBhcnNlZCBwYXR0ZXJuIGlzIHJldHVybmVkLiAgVGhpcyBtZXRob2QKKyAgICAgKiBjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkgdG8gcGFyc2UgZW1iZWRkZWQgc3VicGF0dGVybnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGF0dGVybiB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdHRlcm4gdG8gYmUgcGFyc2VkLiAgVGhlCisgICAgICogcG9ydGlvbiBvZiB0aGUgc3RyaW5nIGZyb20gcG9zLmdldEluZGV4KCksIHdoaWNoIG11c3QgYmUgYSAnWycsIHRvIHRoZQorICAgICAqIGNvcnJlc3BvbmRpbmcgY2xvc2luZyAnXScsIGlzIHBhcnNlZC4KKyAgICAgKiBAcGFyYW0gcG9zIHVwb24gZW50cnksIHRoZSBwb3NpdGlvbiBhdCB3aGljaCB0byBiZWluZyBwYXJzaW5nLiAgVGhlCisgICAgICogY2hhcmFjdGVyIGF0IHBhdHRlcm4uY2hhckF0KHBvcy5nZXRJbmRleCgpKSBtdXN0IGJlIGEgJ1snLiAgVXBvbiByZXR1cm4KKyAgICAgKiBmcm9tIGEgc3VjY2Vzc2Z1bCBwYXJzZSwgcG9zLmdldEluZGV4KCkgaXMgZWl0aGVyIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlCisgICAgICogY2xvc2luZyAnXScgb2YgdGhlIHBhcnNlZCBwYXR0ZXJuLCBvciBwYXR0ZXJuLmxlbmd0aCgpIGlmIHRoZSBjbG9zaW5nICddJworICAgICAqIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgcGF0dGVybiBzdHJpbmcuCisgICAgICogQHJldHVybiBhbiBpbnZlcnNpb24gbGlzdCBmb3IgdGhlIHBhcnNlZCBzdWJzdHJpbmcKKyAgICAgKiBvZiA8Y29kZT5wYXR0ZXJuPC9jb2RlPgorICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgcGFyc2UgZmFpbHMuCisgICAgICovCisgICAgdm9pZCBhcHBseVBhdHRlcm4oU3RyaW5nIHBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUgc3ltYm9scywKKyAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlnbm9yZVdoaXRlc3BhY2UpIHsKKworICAgICAgICAvLyBOZWVkIHRvIGJ1aWxkIHRoZSBwYXR0ZXJuIGluIGEgdGVtcG9yYXJ5IHN0cmluZyBiZWNhdXNlCisgICAgICAgIC8vIF9hcHBseVBhdHRlcm4gY2FsbHMgYWRkKCkgZXRjLiwgd2hpY2ggc2V0IHBhdCB0byBlbXB0eS4KKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlYnVpbHRQYXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIF9hcHBseVBhdHRlcm4ocGF0dGVybiwgcG9zLCBzeW1ib2xzLCByZWJ1aWx0UGF0LCBpZ25vcmVXaGl0ZXNwYWNlKTsKKyAgICAgICAgcGF0ID0gcmVidWlsdFBhdC50b1N0cmluZygpOworICAgIH0KKworICAgIHZvaWQgX2FwcGx5UGF0dGVybihTdHJpbmcgcGF0dGVybiwgUGFyc2VQb3NpdGlvbiBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlIHN5bWJvbHMsIFN0cmluZ0J1ZmZlciByZWJ1aWx0UGF0LAorICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlnbm9yZVdoaXRlc3BhY2UpIHsKKworICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBjb250YWlucyBhbnkgb2YgdGhlIGZvbGxvd2luZywgd2Ugc2F2ZSBhCisgICAgICAgIC8vIHJlYnVpbHQgKHZhcmlhYmxlLXN1YnN0aXR1dGVkKSBjb3B5IG9mIHRoZSBzb3VyY2UgcGF0dGVybjoKKyAgICAgICAgLy8gLSBhIGNhdGVnb3J5CisgICAgICAgIC8vIC0gYW4gaW50ZXJzZWN0aW9uIG9yIHN1YnRyYWN0aW9uIG9wZXJhdG9yCisgICAgICAgIC8vIC0gYW4gYW5jaG9yICh0cmFpbGluZyAnJCcsIGluZGljYXRpbmcgUkJUIGV0aGVyKQorICAgICAgICBib29sZWFuIHJlYnVpbGRQYXR0ZXJuID0gZmFsc2U7CisgICAgICAgIFN0cmluZ0J1ZmZlciBuZXdQYXQgPSBuZXcgU3RyaW5nQnVmZmVyKCJbIik7CisgICAgICAgIGludCBuZXN0ZWRQYXRTdGFydCA9IC0xOyAvLyBzZWUgYmVsb3cgZm9yIHVzYWdlCisgICAgICAgIGJvb2xlYW4gbmVzdGVkUGF0RG9uZSA9IGZhbHNlOyAvLyBzZWUgYmVsb3cgZm9yIHVzYWdlCisgICAgICAgIFN0cmluZ0J1ZmZlciBtdWx0aUNoYXJCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIAorCisgICAgICAgIGJvb2xlYW4gaW52ZXJ0ID0gZmFsc2U7CisgICAgICAgIGNsZWFyKCk7CisKKyAgICAgICAgZmluYWwgaW50IE5PTkUgPSAtMTsKKyAgICAgICAgaW50IGxhc3RDaGFyID0gTk9ORTsgLy8gVGhpcyBpcyBlaXRoZXIgYSBjaGFyICgwLi4xMEZGRkYpIG9yIC0xCisgICAgICAgIGJvb2xlYW4gaXNMYXN0TGl0ZXJhbCA9IGZhbHNlOyAvLyBUUlVFIGlmIGxhc3RDaGFyIHdhcyBhIGxpdGVyYWwKKyAgICAgICAgY2hhciBsYXN0T3AgPSAwOworCisgICAgICAgIC8qIFRoaXMgbG9vcCBpdGVyYXRlcyBvdmVyIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2Ugc3RhcnQgYXQKKyAgICAgICAgICogdGhlIHBvc2l0aW9uIHNwZWNpZmllZCBieSBwb3MuICBXZSBleGl0IHRoZSBsb29wIHdoZW4gZWl0aGVyIGEKKyAgICAgICAgICogbWF0Y2hpbmcgY2xvc2luZyAnXScgaXMgc2Vlbiwgb3Igd2UgcmVhZCBhbGwgY2hhcmFjdGVycyBvZiB0aGUKKyAgICAgICAgICogcGF0dGVybi4gIEluIHRoZSBsYXR0ZXIgY2FzZSBhbiBlcnJvciB3aWxsIGJlIHRocm93bi4KKyAgICAgICAgICovCisKKyAgICAgICAgLyogUGF0dGVybiBzeW50YXg6CisgICAgICAgICAqICBwYXQgOj0gJ1snICdeJz8gZWxlbSogJ10nCisgICAgICAgICAqICBlbGVtIDo9IGEgfCBhICctJyBhIHwgc2V0IHwgc2V0IG9wIHNldAorICAgICAgICAgKiAgc2V0IDo9IHBhdCB8IChhIHNldCB2YXJpYWJsZSkKKyAgICAgICAgICogIG9wIDo9ICcmJyB8ICctJworICAgICAgICAgKiAgYSA6PSAoYSBjaGFyYWN0ZXIsIHBvc3NpYmx5IGRlZmluZWQgYnkgYSB2YXIpCisgICAgICAgICAqLworCisgICAgICAgIC8vIG1vZGUgMDogTm8gY2hhcnMgcGFyc2VkIHlldDsgbmV4dCBtdXN0IGJlICdbJworICAgICAgICAvLyBtb2RlIDE6ICdbJyBzZWVuOyBpZiBuZXh0IGlzICdeJyBvciAnOicgdGhlbiBzcGVjaWFsCisgICAgICAgIC8vIG1vZGUgMjogJ1snICdeJz8gc2VlbjsgcGFyc2UgcGF0dGVybiBhbmQgY2xvc2Ugd2l0aCAnXScKKyAgICAgICAgLy8gbW9kZSAzOiAnWzonIHNlZW47IHBhcnNlIGNhdGVnb3J5IGFuZCBjbG9zZSB3aXRoICc6XScKKyAgICAgICAgLy8gbW9kZSA0OiAnXScgc2VlbjsgcGFyc2UgY29tcGxldGUKKyAgICAgICAgLy8gbW9kZSA1OiBUb3AtbGV2ZWwgcHJvcGVydHkgcGF0dGVybiBzZWVuCisgICAgICAgIGludCBtb2RlID0gMDsKKyAgICAgICAgaW50IHN0YXJ0ID0gcG9zLmdldEluZGV4KCk7CisgICAgICAgIGludCBpID0gc3RhcnQ7CisgICAgICAgIGludCBsaW1pdCA9IHBhdHRlcm4ubGVuZ3RoKCk7CisgICAgICAgIC8qIEluIHRoZSBjYXNlIG9mIGFuIGVtYmVkZGVkIFN5bWJvbFRhYmxlIHZhcmlhYmxlLCB3ZSBsb29rIGl0IHVwIGFuZAorICAgICAgICAgKiB0aGVuIHRha2UgY2hhcmFjdGVycyBmcm9tIHRoZSByZXN1bHRhbnQgY2hhcltdIGFycmF5LiAgVGhlc2UgY2hhcnMKKyAgICAgICAgICogYXJlIHN1YmplY3RlZCB0byBhbiBleHRyYSBsZXZlbCBvZiBsb29rdXAgaW4gdGhlIFN5bWJvbFRhYmxlIGluIGNhc2UKKyAgICAgICAgICogdGhleSBhcmUgc3RhbmQtaW5zIGZvciBhIG5lc3RlZCBVbmljb2RlU2V0LiAgKi8KKyAgICAgICAgY2hhcltdIHZhclZhbHVlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgaW50IGl2YXJWYWx1ZUJ1ZmZlciA9IDA7CisgICAgICAgIGludCBhbmNob3IgPSAwOworICAgICAgICBpbnQgYzsKKyAgICAgICAgd2hpbGUgKGk8bGltaXQpIHsKKyAgICAgICAgICAgIC8qIElmIHRoZSBuZXh0IGVsZW1lbnQgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBjIHdpbGwgYmUgc2V0IHRvIGl0LAorICAgICAgICAgICAgICogYW5kIG5lc3RlZFNldCB3aWxsIGJlIG51bGwuICBJbiB0aGlzIGNhc2UgaXNMaXRlcmFsIGluZGljYXRlcworICAgICAgICAgICAgICogd2hldGhlciB0aGUgY2hhcmFjdGVyIHNob3VsZCBhc3N1bWUgc3BlY2lhbCBtZWFuaW5nIGlmIGl0IGhhcworICAgICAgICAgICAgICogb25lLiAgSWYgdGhlIG5leHQgZWxlbWVudCBpcyBhIG5lc3RlZCBzZXQsIGVpdGhlciB2aWEgYSB2YXJpYWJsZQorICAgICAgICAgICAgICogcmVmZXJlbmNlLCBvciB2aWEgYW4gZW1iZWRkZWQgIlsuLl0iICBvciAiWzouLjpdIiBwYXR0ZXJuLCB0aGVuCisgICAgICAgICAgICAgKiBuZXN0ZWRTZXQgd2lsbCBiZSBzZXQgdG8gdGhlIHBhaXJzIGxpc3QgZm9yIHRoZSBuZXN0ZWQgc2V0LCBhbmQKKyAgICAgICAgICAgICAqIGMncyB2YWx1ZSBzaG91bGQgYmUgaWdub3JlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgVW5pY29kZVNldCBuZXN0ZWRTZXQgPSBudWxsOworICAgICAgICAgICAgYm9vbGVhbiBpc0xpdGVyYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICh2YXJWYWx1ZUJ1ZmZlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGl2YXJWYWx1ZUJ1ZmZlciA8IHZhclZhbHVlQnVmZmVyLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjID0gVVRGMTYuY2hhckF0KHZhclZhbHVlQnVmZmVyLCAwLCB2YXJWYWx1ZUJ1ZmZlci5sZW5ndGgsIGl2YXJWYWx1ZUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIGl2YXJWYWx1ZUJ1ZmZlciArPSBVVEYxNi5nZXRDaGFyQ291bnQoYyk7CisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVNYXRjaGVyIG0gPSBzeW1ib2xzLmxvb2t1cE1hdGNoZXIoYyk7IC8vIG1heSBiZSBOVUxMCisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWRTZXQgPSAoVW5pY29kZVNldCkgbTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlN5bnRheCBlcnJvciIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5lc3RlZFBhdERvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXJWYWx1ZUJ1ZmZlciA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGMgPSBVVEYxNi5jaGFyQXQocGF0dGVybiwgaSk7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gVVRGMTYuZ2V0Q2hhckNvdW50KGMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYyA9IFVURjE2LmNoYXJBdChwYXR0ZXJuLCBpKTsKKyAgICAgICAgICAgICAgICBpICs9IFVURjE2LmdldENoYXJDb3VudChjKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlnbm9yZVdoaXRlc3BhY2UgJiYgVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoYykpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgY291bnQgb2YgY2hhcmFjdGVycyBhZnRlciBhbiBhbGxlZ2VkIGFuY2hvcgorICAgICAgICAgICAgaWYgKGFuY2hvciA+IDApIHsKKyAgICAgICAgICAgICAgICArK2FuY2hvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUGFyc2UgdGhlIG9wZW5pbmcgJ1snIGFuZCBvcHRpb25hbCBmb2xsb3dpbmcgJ14nCisgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBpZiAocmVzZW1ibGVzUHJvcGVydHlQYXR0ZXJuKHBhdHRlcm4sIGktMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBGYWxsIHRocm91Z2gKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1snKSB7CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAxOyAvLyBOZXh0IGxvb2sgZm9yICdeJworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNaXNzaW5nIG9wZW5pbmcgJ1snIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG1vZGUgPSAyOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgICAgIGNhc2UgJ14nOgorICAgICAgICAgICAgICAgICAgICBpbnZlcnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBuZXdQYXQuYXBwZW5kKChjaGFyKSBjKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIEJhY2sgdG8gdG9wIHRvIGZldGNoIG5leHQgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICAgICAgICAgIGlzTGl0ZXJhbCA9IHRydWU7IC8vIFRyZWF0IGxlYWRpbmcgJy0nIGFzIGEgbGl0ZXJhbAorICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gRmFsbCB0aHJvdWdoCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGVsc2UgZmFsbCB0aHJvdWdoIGFuZCBwYXJzZSB0aGlzIGNoYXJhY3RlciBub3JtYWxseQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZnRlciBvcGVuaW5nIG1hdHRlciBpcyBwYXJzZWQgKCJbIiwgIlteIiwgb3IgIls6IiksIHRoZSBtb2RlCisgICAgICAgICAgICAvLyB3aWxsIGJlIDIgaWYgd2Ugd2FudCBhIGNsb3NpbmcgJ10nLCBvciAzIGlmIHdlIHNob3VsZCBwYXJzZSBhCisgICAgICAgICAgICAvLyBjYXRlZ29yeSBhbmQgY2xvc2Ugd2l0aCAiOl0iLgorCisgICAgICAgICAgICAvLyBPbmx5IHByb2Nlc3MgZXNjYXBlcywgdmFyaWFibGUgcmVmZXJlbmNlcywgYW5kIG5lc3RlZCBzZXRzCisgICAgICAgICAgICAvLyBpZiB3ZSBhcmUgX25vdF8gcmV0cmlldmluZyBjaGFyYWN0ZXJzIGZyb20gdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAvLyBidWZmZXIuICBDaGFyYWN0ZXJzIGluIHRoZSB2YXJpYWJsZSBidWZmZXIgaGF2ZSBhbHJlYWR5CisgICAgICAgICAgICAvLyBiZW5uIHRocm91Z2ggZXNjYXBlIGFuZCB2YXJpYWJsZSByZWZlcmVuY2UgcHJvY2Vzc2luZy4KKyAgICAgICAgICAgIGlmICh2YXJWYWx1ZUJ1ZmZlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICogSGFuZGxlIHByb3BlcnR5IHNldCBwYXR0ZXJucy4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAocmVzZW1ibGVzUHJvcGVydHlQYXR0ZXJuKHBhdHRlcm4sIGktMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwcCA9IG5ldyBQYXJzZVBvc2l0aW9uKGktMSk7CisgICAgICAgICAgICAgICAgICAgIG5lc3RlZFNldCA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5lc3RlZFNldC5hcHBseVByb3BlcnR5UGF0dGVybihwYXR0ZXJuLCBwcCk7CisgICAgICAgICAgICAgICAgICAgIG5lc3RlZFBhdFN0YXJ0ID0gbmV3UGF0Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBuZXN0ZWRQYXREb25lID0gdHJ1ZTsgLy8gd2UncmUgZ29pbmcgdG8gZG8gaXQganVzdCBiZWxvdworCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobGFzdE9wKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgICAgICAgICBjYXNlICcmJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhdC5hcHBlbmQobGFzdE9wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHRvcC1sZXZlbCBwcm9wZXJ0eSBwYXR0ZXJuLCB0aGVuIHRyaW0KKyAgICAgICAgICAgICAgICAgICAgLy8gb2ZmIHRoZSBvcGVuaW5nICdbJyBhbmQgdXNlIHRoZSBwcm9wZXJ0eSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBlbnRpcmUgcGF0dGVybi4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gMykgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGF0LmRlbGV0ZUNoYXJBdCgwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBuZXdQYXQuYXBwZW5kKHBhdHRlcm4uc3Vic3RyaW5nKGktMSwgcHAuZ2V0SW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICByZWJ1aWxkUGF0dGVybiA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaSA9IHBwLmdldEluZGV4KCk7IC8vIGFkdmFuY2UgcGFzdCBwcm9wZXJ0eSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnRpcmUgcGF0dGVybiBpcyBhIGNhdGVnb3J5OyBsZWF2ZSBwYXJzZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9vcC4gIFRoaXMgaXMgb25lIG9mIDIgd2F5cyB3ZSBsZWF2ZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29wIGlmIHRoZSBwYXR0ZXJuIGlzIHdlbGwtZm9ybWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0KG5lc3RlZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogSGFuZGxlIGVzY2FwZXMuICBJZiBhIGNoYXJhY3RlciBpcyBlc2NhcGVkLCB0aGVuIGl0IGFzc3VtZXMgaXRzCisgICAgICAgICAgICAgICAgICogbGl0ZXJhbCB2YWx1ZS4gIFRoaXMgaXMgdHJ1ZSBmb3IgYWxsIGNoYXJhY3RlcnMsIGJvdGggc3BlY2lhbAorICAgICAgICAgICAgICAgICAqIGNoYXJhY3RlcnMgYW5kIGNoYXJhY3RlcnMgd2l0aCBubyBzcGVjaWFsIG1lYW5pbmcuICBXZSBhbHNvCisgICAgICAgICAgICAgICAgICogaW50ZXJwcmV0ICdcXHV4eHh4JyBVbmljb2RlIGVzY2FwZXMgaGVyZSAoYXMgbGl0ZXJhbHMpLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICBpbnRbXSBvZmZzZXQgPSBuZXcgaW50W10geyBpIH07CisgICAgICAgICAgICAgICAgICAgIGludCBlc2NhcGVkID0gVXRpbGl0eS51bmVzY2FwZUF0KHBhdHRlcm4sIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhID0gTWF0aC5tYXgoaSAtIDgsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbSA9IE1hdGgubWluKGkgKyAxNiwgcGF0dGVybi5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5zdWJzdHJpbmcoc3RhLCBpLTEpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInwiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5zdWJzdHJpbmcoaS0xLCBsaW0pKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpID0gb2Zmc2V0WzBdOworICAgICAgICAgICAgICAgICAgICBpc0xpdGVyYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjID0gZXNjYXBlZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBQYXJzZSB2YXJpYWJsZSByZWZlcmVuY2VzLiAgVGhlc2UgYXJlIHRyZWF0ZWQgYXMgbGl0ZXJhbHMuICBJZiBhCisgICAgICAgICAgICAgICAgICogdmFyaWFibGUgcmVmZXJzIHRvIGEgVW5pY29kZVNldCwgaXRzIHN0YW5kIGluIGNoYXJhY3RlciBpcworICAgICAgICAgICAgICAgICAqIHJldHVybmVkIGluIHRoZSBjaGFyW10gYnVmZmVyLgorICAgICAgICAgICAgICAgICAqIFZhcmlhYmxlIG5hbWVzIGFyZSBvbmx5IHBhcnNlZCBpZiB2YXJOYW1lVG9DaGFyIGlzIG5vdCBudWxsLgorICAgICAgICAgICAgICAgICAqIFNldCB2YXJpYWJsZXMgYXJlIG9ubHkgbG9va2VkIHVwIGlmIHZhckNoYXJUb1NldCBpcyBub3QgbnVsbC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2xzICE9IG51bGwgJiYgIWlzTGl0ZXJhbCAmJiBjID09IFN5bWJvbFRhYmxlLlNZTUJPTF9SRUYpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zLnNldEluZGV4KGkpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHN5bWJvbHMucGFyc2VSZWZlcmVuY2UocGF0dGVybiwgcG9zLCBsaW1pdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhclZhbHVlQnVmZmVyID0gc3ltYm9scy5sb29rdXAobmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyVmFsdWVCdWZmZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuZGVmaW5lZCB2YXJpYWJsZTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGl2YXJWYWx1ZUJ1ZmZlciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gcG9zLmdldEluZGV4KCk7IC8vIE1ha2UgaSBwb2ludCBQQVNUIGxhc3QgY2hhciBvZiB2YXIgbmFtZQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290IGEgbnVsbDsgdGhpcyBtZWFucyB3ZSBoYXZlIGFuIGlzb2xhdGVkICQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZW50YXRpdmVseSBhc3N1bWUgdGhpcyBpcyBhbiBhbmNob3IuCisgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBCYWNrIHRvIHRoZSB0b3AgdG8gZ2V0IHZhclZhbHVlQnVmZmVyWzBdCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogQW4gb3BlbmluZyBicmFja2V0IGluZGljYXRlcyB0aGUgZmlyc3QgYnJhY2tldCBvZiBhIG5lc3RlZAorICAgICAgICAgICAgICAgICAqIHN1YnBhdHRlcm4uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzTGl0ZXJhbCAmJiBjID09ICdbJykgeworICAgICAgICAgICAgICAgICAgICAvLyBSZWNvcmQgcG9zaXRpb24gYmVmb3JlIG5lc3RlZCBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgIG5lc3RlZFBhdFN0YXJ0ID0gbmV3UGF0Lmxlbmd0aCgpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2UgdG8gZ2V0IHRoZSBwYWlycyBmb3IgdGhpcyBuZXN0ZWQgc2V0LgorICAgICAgICAgICAgICAgICAgICAvLyBCYWNrdXAgaSB0byAnWycuCisgICAgICAgICAgICAgICAgICAgIHBvcy5zZXRJbmRleCgtLWkpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGxhc3RPcCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnJic6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXQuYXBwZW5kKGxhc3RPcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBuZXN0ZWRTZXQgPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICAgICAgICAgICAgICBuZXN0ZWRTZXQuX2FwcGx5UGF0dGVybihwYXR0ZXJuLCBwb3MsIHN5bWJvbHMsIG5ld1BhdCwgaWdub3JlV2hpdGVzcGFjZSk7CisgICAgICAgICAgICAgICAgICAgIG5lc3RlZFBhdERvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpID0gcG9zLmdldEluZGV4KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNMaXRlcmFsICYmIGMgPT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IG9mIGEgc3RyaW5nLiBmaW5kIHRoZSByZXN0LgorICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaW50IHN0ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlDaGFyQnVmZmVyLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBwYXR0ZXJuLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSBVVEYxNi5jaGFyQXQocGF0dGVybiwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpICs9IFVURjE2LmdldENoYXJDb3VudChjaCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICd9JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IC1sZW5ndGg7IC8vIHNpZ25hbCB0aGF0IHdlIHNhdyAnfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIG9mZnNldCA9IG5ldyBpbnRbXSB7IGkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFV0aWxpdHkudW5lc2NhcGVBdChwYXR0ZXJuLCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhID0gTWF0aC5tYXgoaSAtIDgsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltID0gTWF0aC5taW4oaSArIDE2LCBwYXR0ZXJuLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5zdWJzdHJpbmcoc3RhLCBpLTEpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4uc3Vic3RyaW5nKGktMSwgbGltKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvZmZzZXRbMF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAtLWxlbmd0aDsgLy8gc2ljOyBzZWUgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIFVURjE2LmFwcGVuZChtdWx0aUNoYXJCdWZmZXIsIGNoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBtdWx0aWNoYXJhY3RlciBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIG5ldyBzdHJpbmcuIEFkZCBpdCB0byBzZXQgYW5kIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIGRyb3AgdGhyb3VnaCB0byB0aGUgZnVydGhlcgorICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzaW5nCisgICAgICAgICAgICAgICAgICAgIGFkZChtdWx0aUNoYXJCdWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIG5ld1BhdC5hcHBlbmQoJ3snKS5hcHBlbmQocGF0dGVybi5zdWJzdHJpbmcoc3QsIGkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVidWlsZFBhdHRlcm4gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBlaXRoZXIgYSBjaGFyYWN0ZXIgYywgb3IgYSBuZXN0ZWQgc2V0LiAgSWYKKyAgICAgICAgICAgICAqIHdlIGhhdmUgZW5jb3VudGVyZWQgYSBuZXN0ZWQgc2V0LCBlaXRoZXIgZW1iZWRkZWQgaW4gdGhlIHBhdHRlcm4sCisgICAgICAgICAgICAgKiBvciBhcyBhIHZhcmlhYmxlLCB3ZSBoYXZlIGEgbm9uLW51bGwgbmVzdGVkU2V0LCBhbmQgYyBzaG91bGQgYmUKKyAgICAgICAgICAgICAqIGlnbm9yZWQuICBPdGhlcndpc2UgYyBpcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIsIGFuZCBpc0xpdGVyYWwKKyAgICAgICAgICAgICAqIGluZGljYXRlcyB3aGV0aGVyIGl0IGlzIGFuIGVzY2FwZWQgbGl0ZXJhbCAob3IgdmFyaWFibGUpIG9yIGEKKyAgICAgICAgICAgICAqIG5vcm1hbCB1bmVzY2FwZWQgY2hhcmFjdGVyLiAgVW5lc2NhcGVkIGNoYXJhY3RlcnMgJy0nLCAnJicsIGFuZAorICAgICAgICAgICAgICogJ10nIGhhdmUgc3BlY2lhbCBtZWFuaW5ncy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKG5lc3RlZFNldCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGFyICE9IE5PTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RPcCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIHJocyBmb3IgIiArIGxhc3RDaGFyICsgbGFzdE9wKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhZGQobGFzdENoYXIsIGxhc3RDaGFyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lc3RlZFBhdERvbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIGNoYXJhY3RlciBiZWZvcmUgdGhlIG5lc3RlZCBzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIG5lZWQgdG8gaW5zZXJ0IGl0IGluIG5ld1BhdCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuIGZvciB0aGUgbmVzdGVkIHNldC4gIFRoaXMgcG9zaXRpb24gd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWNvcmRlZCBpbiBuZXN0ZWRQYXRTdGFydC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgX2FwcGVuZFRvUGF0KHMsIGxhc3RDaGFyLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXQuaW5zZXJ0KG5lc3RlZFBhdFN0YXJ0LCBzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgX2FwcGVuZFRvUGF0KG5ld1BhdCwgbGFzdENoYXIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsYXN0Q2hhciA9IE5PTkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN3aXRjaCAobGFzdE9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUFsbChuZXN0ZWRTZXQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICcmJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0YWluQWxsKG5lc3RlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgYWRkQWxsKG5lc3RlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgcGF0dGVybiBmb3IgdGhlIG5lc3RlZCBzZXQsIGlmIHdlIGhhdmVuJ3QgZG9uZSBzbworICAgICAgICAgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgICAgICAgICAgaWYgKCFuZXN0ZWRQYXREb25lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0T3AgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGF0LmFwcGVuZChsYXN0T3ApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5lc3RlZFNldC5fdG9QYXR0ZXJuKG5ld1BhdCwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZWJ1aWxkUGF0dGVybiA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBsYXN0T3AgPSAwOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0xpdGVyYWwgJiYgYyA9PSAnXScpIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5hbCBjbG9zaW5nIGRlbGltaXRlci4gIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHdlIGxlYXZlIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBsb29wIGlmIHRoZSBwYXR0ZXJuIGlzIHdlbGwtZm9ybWVkLgorICAgICAgICAgICAgICAgIGlmIChhbmNob3IgPiAyIHx8IGFuY2hvciA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlN5bnRheCBlcnJvciBuZWFyICQiICsgcGF0dGVybik7CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGFuY2hvciA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIHJlYnVpbGRQYXR0ZXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbmV3UGF0LmFwcGVuZChTeW1ib2xUYWJsZS5TWU1CT0xfUkVGKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkKFRyYW5zbGl0ZXJhdGlvblJ1bGUuRVRIRVIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtb2RlID0gNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdE9wID09IDAgJiYgIWlzTGl0ZXJhbCAmJiAoYyA9PSAnLScgfHwgYyA9PSAnJicpKSB7CisgICAgICAgICAgICAgICAgbGFzdE9wID0gKGNoYXIpIGM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RPcCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdENoYXIgPj0gYykgeworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyByZWR1bmRhbnQgKGEtYSkgb3IgZW1wdHkgKGItYSkgcmFuZ2VzOworICAgICAgICAgICAgICAgICAgICAvLyB0aGVzZSBhcmUgbW9zdCBsaWtlbHkgdHlwb3MuCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcmFuZ2UgIiArIGxhc3RDaGFyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLScgKyBjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkKGxhc3RDaGFyLCBjKTsKKyAgICAgICAgICAgICAgICBfYXBwZW5kVG9QYXQobmV3UGF0LCBsYXN0Q2hhciwgZmFsc2UpOworICAgICAgICAgICAgICAgIG5ld1BhdC5hcHBlbmQoJy0nKTsKKyAgICAgICAgICAgICAgICBfYXBwZW5kVG9QYXQobmV3UGF0LCBjLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbGFzdE9wID0gMDsKKyAgICAgICAgICAgICAgICBsYXN0Q2hhciA9IE5PTkU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RPcCAhPSAwKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSA8c2V0PiY8Y2hhcj4gb3IgPGNoYXI+JjxjaGFyPgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVucXVvdGVkICIgKyBsYXN0T3ApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdENoYXIgIT0gTk9ORSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIDxjaGFyPjxjaGFyPgorICAgICAgICAgICAgICAgICAgICBhZGQobGFzdENoYXIsIGxhc3RDaGFyKTsKKyAgICAgICAgICAgICAgICAgICAgX2FwcGVuZFRvUGF0KG5ld1BhdCwgbGFzdENoYXIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdENoYXIgPSBjOworICAgICAgICAgICAgICAgIGlzTGFzdExpdGVyYWwgPSBpc0xpdGVyYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobW9kZSA8IDQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1pc3NpbmcgJ10nIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBUcmVhdCBhIHRyYWlsaW5nICckJyBhcyBpbmRpY2F0aW5nIEVUSEVSLiAgVGhpcyBjb2RlIGlzIG9ubHkKKyAgICAgICAgLy8gZXhlY3V0ZWQgaWYgc3ltYm9scyA9PSBOVUxMOyBvdGhlcndpc2Ugb3RoZXIgY29kZSBwYXJzZXMgdGhlCisgICAgICAgIC8vIGFuY2hvci4KKyAgICAgICAgaWYgKGxhc3RDaGFyID09IFN5bWJvbFRhYmxlLlNZTUJPTF9SRUYgJiYgIWlzTGFzdExpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlYnVpbGRQYXR0ZXJuID0gdHJ1ZTsKKyAgICAgICAgICAgIG5ld1BhdC5hcHBlbmQoKGNoYXIpIGxhc3RDaGFyKTsKKyAgICAgICAgICAgIGFkZChUcmFuc2xpdGVyYXRpb25SdWxlLkVUSEVSKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZWxzZSBpZiAobGFzdENoYXIgIT0gTk9ORSkgeworICAgICAgICAgICAgYWRkKGxhc3RDaGFyLCBsYXN0Q2hhcik7CisgICAgICAgICAgICBfYXBwZW5kVG9QYXQobmV3UGF0LCBsYXN0Q2hhciwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIHVucHJvY2Vzc2VkIHN0dWZmIHByZWNlZGluZyB0aGUgY2xvc2luZyAnXScKKyAgICAgICAgaWYgKGxhc3RPcCA9PSAnLScpIHsKKyAgICAgICAgICAgIC8vIFRyYWlsaW5nICctJyBpcyB0cmVhdGVkIGFzIGxpdGVyYWwKKyAgICAgICAgICAgIGFkZChsYXN0T3AsIGxhc3RPcCk7CisgICAgICAgICAgICBuZXdQYXQuYXBwZW5kKCctJyk7CisgICAgICAgIH0gZWxzZSBpZiAobGFzdE9wID09ICcmJykgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5xdW90ZWQgdHJhaWxpbmcgIiArIGxhc3RPcCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobW9kZSA9PSA0KSB7CisgICAgICAgICAgICBuZXdQYXQuYXBwZW5kKCddJyk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSWYgd2Ugc2F3IGEgJ14nIGFmdGVyIHRoZSBpbml0aWFsICdbJyBvZiB0aGlzIHBhdHRlcm4sIHRoZW4gcGVyZm9ybQorICAgICAgICAgKiB0aGUgY29tcGxlbWVudC4gIChJbnZlcnNpb24gYWZ0ZXIgJ1s6JyBpcyBoYW5kbGVkIGVsc2V3aGVyZS4pCisgICAgICAgICAqLworICAgICAgICBpZiAoaW52ZXJ0KSB7CisgICAgICAgICAgICBjb21wbGVtZW50KCk7CisgICAgICAgIH0KKworICAgICAgICBwb3Muc2V0SW5kZXgoaSk7CisKKyAgICAgICAgLy8gVXNlIHRoZSByZWJ1aWx0IHBhdHRlcm4gKG5ld1BhdCkgb25seSBpZiBuZWNlc3NhcnkuICBQcmVmZXIgdGhlCisgICAgICAgIC8vIGdlbmVyYXRlZCBwYXR0ZXJuLgorICAgICAgICBpZiAocmVidWlsZFBhdHRlcm4pIHsKKyAgICAgICAgICAgIHJlYnVpbHRQYXQuYXBwZW5kKG5ld1BhdC50b1N0cmluZygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIF9nZW5lcmF0ZVBhdHRlcm4ocmVidWlsdFBhdCwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAvLyBEZWJ1ZyBwYXJzZXIKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5pY29kZVNldCgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLnN1YnN0cmluZyhzdGFydCwgaSsxKSArICIpIC0+ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuZXNjYXBlKHRvU3RyaW5nKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEltcGxlbWVudGF0aW9uOiBVdGlsaXR5IG1ldGhvZHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHByaXZhdGUgdm9pZCBlbnN1cmVDYXBhY2l0eShpbnQgbmV3TGVuKSB7CisgICAgICAgIGlmIChuZXdMZW4gPD0gbGlzdC5sZW5ndGgpIHJldHVybjsKKyAgICAgICAgaW50W10gdGVtcCA9IG5ldyBpbnRbbmV3TGVuICsgR1JPV19FWFRSQV07CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobGlzdCwgMCwgdGVtcCwgMCwgbGVuKTsKKyAgICAgICAgbGlzdCA9IHRlbXA7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVuc3VyZUJ1ZmZlckNhcGFjaXR5KGludCBuZXdMZW4pIHsKKyAgICAgICAgaWYgKGJ1ZmZlciAhPSBudWxsICYmIG5ld0xlbiA8PSBidWZmZXIubGVuZ3RoKSByZXR1cm47CisgICAgICAgIGJ1ZmZlciA9IG5ldyBpbnRbbmV3TGVuICsgR1JPV19FWFRSQV07CisgICAgfQorCisgICAgLyoqCisgICAgICogQXNzdW1lcyBzdGFydCA8PSBlbmQuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnRbXSByYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKKyAgICAgICAgaWYgKHJhbmdlTGlzdCA9PSBudWxsKSB7CisgICAgICAgICAgICByYW5nZUxpc3QgPSBuZXcgaW50W10geyBzdGFydCwgZW5kKzEsIEhJR0ggfTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlTGlzdFswXSA9IHN0YXJ0OworICAgICAgICAgICAgcmFuZ2VMaXN0WzFdID0gZW5kKzE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhbmdlTGlzdDsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBJbXBsZW1lbnRhdGlvbjogRnVuZGFtZW50YWwgb3BlcmF0aW9ucworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gcG9sYXJpdHkgPSAwLCAzIGlzIG5vcm1hbDogeCB4b3IgeQorICAgIC8vIHBvbGFyaXR5ID0gMSwgMjogeCB4b3IgfnkgPT0geCA9PT0geQorCisgICAgcHJpdmF0ZSBVbmljb2RlU2V0IHhvcihpbnRbXSBvdGhlciwgaW50IG90aGVyTGVuLCBpbnQgcG9sYXJpdHkpIHsKKyAgICAgICAgZW5zdXJlQnVmZmVyQ2FwYWNpdHkobGVuICsgb3RoZXJMZW4pOworICAgICAgICBpbnQgaSA9IDAsIGogPSAwLCBrID0gMDsKKyAgICAgICAgaW50IGEgPSBsaXN0W2krK107CisgICAgICAgIGludCBiOworICAgICAgICBpZiAocG9sYXJpdHkgPT0gMSB8fCBwb2xhcml0eSA9PSAyKSB7CisgICAgICAgICAgICBiID0gTE9XOworICAgICAgICAgICAgaWYgKG90aGVyW2pdID09IExPVykgeyAvLyBza2lwIGJhc2UgaWYgYWxyZWFkeSBMT1cKKyAgICAgICAgICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgYiA9IG90aGVyW2pdOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYiA9IG90aGVyW2orK107CisgICAgICAgIH0KKyAgICAgICAgLy8gc2ltcGxlc3Qgb2YgYWxsIHRoZSByb3V0aW5lcworICAgICAgICAvLyBzb3J0IHRoZSB2YWx1ZXMsIGRpc2NhcmRpbmcgaWRlbnRpY2FscyEKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChhIDwgYikgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltrKytdID0gYTsKKyAgICAgICAgICAgICAgICBhID0gbGlzdFtpKytdOworICAgICAgICAgICAgfSBlbHNlIGlmIChiIDwgYSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltrKytdID0gYjsKKyAgICAgICAgICAgICAgICBiID0gb3RoZXJbaisrXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYSAhPSBISUdIKSB7IC8vIGF0IHRoaXMgcG9pbnQsIGEgPT0gYgorICAgICAgICAgICAgICAgIC8vIGRpc2NhcmQgYm90aCB2YWx1ZXMhCisgICAgICAgICAgICAgICAgYSA9IGxpc3RbaSsrXTsKKyAgICAgICAgICAgICAgICBiID0gb3RoZXJbaisrXTsKKyAgICAgICAgICAgIH0gZWxzZSB7IC8vIERPTkUhCisgICAgICAgICAgICAgICAgYnVmZmVyW2srK10gPSBISUdIOworICAgICAgICAgICAgICAgIGxlbiA9IGs7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gc3dhcCBsaXN0IGFuZCBidWZmZXIKKyAgICAgICAgaW50W10gdGVtcCA9IGxpc3Q7CisgICAgICAgIGxpc3QgPSBidWZmZXI7CisgICAgICAgIGJ1ZmZlciA9IHRlbXA7CisgICAgICAgIHBhdCA9IG51bGw7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIC8vIHBvbGFyaXR5ID0gMCBpcyBub3JtYWw6IHggdW5pb24geQorICAgIC8vIHBvbGFyaXR5ID0gMjogeCB1bmlvbiB+eQorICAgIC8vIHBvbGFyaXR5ID0gMTogfnggdW5pb24geQorICAgIC8vIHBvbGFyaXR5ID0gMzogfnggdW5pb24gfnkKKworICAgIHByaXZhdGUgVW5pY29kZVNldCBhZGQoaW50W10gb3RoZXIsIGludCBvdGhlckxlbiwgaW50IHBvbGFyaXR5KSB7CisgICAgICAgIGVuc3VyZUJ1ZmZlckNhcGFjaXR5KGxlbiArIG90aGVyTGVuKTsKKyAgICAgICAgaW50IGkgPSAwLCBqID0gMCwgayA9IDA7CisgICAgICAgIGludCBhID0gbGlzdFtpKytdOworICAgICAgICBpbnQgYiA9IG90aGVyW2orK107CisgICAgICAgIC8vIGNoYW5nZSBmcm9tIHhvciBpcyB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgb3ZlcmxhcHBpbmcgcGFpcnMKKyAgICAgICAgLy8gcG9sYXJpdHkgYml0IDEgbWVhbnMgYSBpcyBzZWNvbmQsIGJpdCAyIG1lYW5zIGIgaXMuCisgICAgICAgIG1haW46CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHBvbGFyaXR5KSB7CisgICAgICAgICAgICAgIGNhc2UgMDogLy8gYm90aCBmaXJzdDsgdGFrZSBsb3dlciBpZiB1bmVxdWFsCisgICAgICAgICAgICAgICAgaWYgKGEgPCBiKSB7IC8vIHRha2UgYQorICAgICAgICAgICAgICAgICAgICAvLyBCYWNrIHVwIG92ZXIgb3ZlcmxhcHBpbmcgcmFuZ2VzIGluIGJ1ZmZlcltdCisgICAgICAgICAgICAgICAgICAgIGlmIChrID4gMCAmJiBhIDw9IGJ1ZmZlcltrLTFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQaWNrIGxhdHRlciBlbmQgdmFsdWUgaW4gYnVmZmVyW10gdnMuIGxpc3RbXQorICAgICAgICAgICAgICAgICAgICAgICAgYSA9IG1heChsaXN0W2ldLCBidWZmZXJbLS1rXSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBvdmVybGFwCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaysrXSA9IGE7CisgICAgICAgICAgICAgICAgICAgICAgICBhID0gbGlzdFtpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpKys7IC8vIENvbW1vbiBpZi9lbHNlIGNvZGUgZmFjdG9yZWQgb3V0CisgICAgICAgICAgICAgICAgICAgIHBvbGFyaXR5IF49IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiIDwgYSkgeyAvLyB0YWtlIGIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPiAwICYmIGIgPD0gYnVmZmVyW2stMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBtYXgob3RoZXJbal0sIGJ1ZmZlclstLWtdKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltrKytdID0gYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBvdGhlcltqXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgICAgIHBvbGFyaXR5IF49IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYSA9PSBiLCB0YWtlIGEsIGRyb3AgYgorICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PSBISUdIKSBicmVhayBtYWluOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHN5bW1ldHJpY2FsOyBpdCBkb2Vzbid0IG1hdHRlciBpZgorICAgICAgICAgICAgICAgICAgICAvLyB3ZSBiYWNrdHJhY2sgd2l0aCBhIG9yIGIuIC0gbGl1CisgICAgICAgICAgICAgICAgICAgIGlmIChrID4gMCAmJiBhIDw9IGJ1ZmZlcltrLTFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhID0gbWF4KGxpc3RbaV0sIGJ1ZmZlclstLWtdKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJsYXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltrKytdID0gYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBsaXN0W2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgcG9sYXJpdHkgXj0gMTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IG90aGVyW2orK107IHBvbGFyaXR5IF49IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IC8vIGJvdGggc2Vjb25kOyB0YWtlIGhpZ2hlciBpZiB1bmVxdWFsLCBhbmQgZHJvcCBvdGhlcgorICAgICAgICAgICAgICAgIGlmIChiIDw9IGEpIHsgLy8gdGFrZSBhCisgICAgICAgICAgICAgICAgICAgIGlmIChhID09IEhJR0gpIGJyZWFrIG1haW47CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltrKytdID0gYTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyB0YWtlIGIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGIgPT0gSElHSCkgYnJlYWsgbWFpbjsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2srK10gPSBiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhID0gbGlzdFtpKytdOyBwb2xhcml0eSBePSAxOyAgIC8vIGZhY3RvcmVkIGNvbW1vbiBjb2RlCisgICAgICAgICAgICAgICAgYiA9IG90aGVyW2orK107IHBvbGFyaXR5IF49IDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMTogLy8gYSBzZWNvbmQsIGIgZmlyc3Q7IGlmIGIgPCBhLCBvdmVybGFwCisgICAgICAgICAgICAgICAgaWYgKGEgPCBiKSB7IC8vIG5vIG92ZXJsYXAsIHRha2UgYQorICAgICAgICAgICAgICAgICAgICBidWZmZXJbaysrXSA9IGE7IGEgPSBsaXN0W2krK107IHBvbGFyaXR5IF49IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiIDwgYSkgeyAvLyBPVkVSTEFQLCBkcm9wIGIKKyAgICAgICAgICAgICAgICAgICAgYiA9IG90aGVyW2orK107IHBvbGFyaXR5IF49IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYSA9PSBiLCBkcm9wIGJvdGghCisgICAgICAgICAgICAgICAgICAgIGlmIChhID09IEhJR0gpIGJyZWFrIG1haW47CisgICAgICAgICAgICAgICAgICAgIGEgPSBsaXN0W2krK107IHBvbGFyaXR5IF49IDE7CisgICAgICAgICAgICAgICAgICAgIGIgPSBvdGhlcltqKytdOyBwb2xhcml0eSBePSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyOiAvLyBhIGZpcnN0LCBiIHNlY29uZDsgaWYgYSA8IGIsIG92ZXJsYXAKKyAgICAgICAgICAgICAgICBpZiAoYiA8IGEpIHsgLy8gbm8gb3ZlcmxhcCwgdGFrZSBiCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltrKytdID0gYjsgYiA9IG90aGVyW2orK107IHBvbGFyaXR5IF49IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlICBpZiAoYSA8IGIpIHsgLy8gT1ZFUkxBUCwgZHJvcCBhCisgICAgICAgICAgICAgICAgICAgIGEgPSBsaXN0W2krK107IHBvbGFyaXR5IF49IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYSA9PSBiLCBkcm9wIGJvdGghCisgICAgICAgICAgICAgICAgICAgIGlmIChhID09IEhJR0gpIGJyZWFrIG1haW47CisgICAgICAgICAgICAgICAgICAgIGEgPSBsaXN0W2krK107IHBvbGFyaXR5IF49IDE7CisgICAgICAgICAgICAgICAgICAgIGIgPSBvdGhlcltqKytdOyBwb2xhcml0eSBePSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBidWZmZXJbaysrXSA9IEhJR0g7ICAgIC8vIHRlcm1pbmF0ZQorICAgICAgICBsZW4gPSBrOworICAgICAgICAvLyBzd2FwIGxpc3QgYW5kIGJ1ZmZlcgorICAgICAgICBpbnRbXSB0ZW1wID0gbGlzdDsKKyAgICAgICAgbGlzdCA9IGJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyID0gdGVtcDsKKyAgICAgICAgcGF0ID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLy8gcG9sYXJpdHkgPSAwIGlzIG5vcm1hbDogeCBpbnRlcnNlY3QgeQorICAgIC8vIHBvbGFyaXR5ID0gMjogeCBpbnRlcnNlY3QgfnkgPT0gc2V0LW1pbnVzCisgICAgLy8gcG9sYXJpdHkgPSAxOiB+eCBpbnRlcnNlY3QgeQorICAgIC8vIHBvbGFyaXR5ID0gMzogfnggaW50ZXJzZWN0IH55CisKKyAgICBwcml2YXRlIFVuaWNvZGVTZXQgcmV0YWluKGludFtdIG90aGVyLCBpbnQgb3RoZXJMZW4sIGludCBwb2xhcml0eSkgeworICAgICAgICBlbnN1cmVCdWZmZXJDYXBhY2l0eShsZW4gKyBvdGhlckxlbik7CisgICAgICAgIGludCBpID0gMCwgaiA9IDAsIGsgPSAwOworICAgICAgICBpbnQgYSA9IGxpc3RbaSsrXTsKKyAgICAgICAgaW50IGIgPSBvdGhlcltqKytdOworICAgICAgICAvLyBjaGFuZ2UgZnJvbSB4b3IgaXMgdGhhdCB3ZSBoYXZlIHRvIGNoZWNrIG92ZXJsYXBwaW5nIHBhaXJzCisgICAgICAgIC8vIHBvbGFyaXR5IGJpdCAxIG1lYW5zIGEgaXMgc2Vjb25kLCBiaXQgMiBtZWFucyBiIGlzLgorICAgICAgICBtYWluOgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgc3dpdGNoIChwb2xhcml0eSkgeworICAgICAgICAgICAgICBjYXNlIDA6IC8vIGJvdGggZmlyc3Q7IGRyb3AgdGhlIHNtYWxsZXIKKyAgICAgICAgICAgICAgICBpZiAoYSA8IGIpIHsgLy8gZHJvcCBhCisgICAgICAgICAgICAgICAgICAgIGEgPSBsaXN0W2krK107IHBvbGFyaXR5IF49IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiIDwgYSkgeyAvLyBkcm9wIGIKKyAgICAgICAgICAgICAgICAgICAgYiA9IG90aGVyW2orK107IHBvbGFyaXR5IF49IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYSA9PSBiLCB0YWtlIG9uZSwgZHJvcCBvdGhlcgorICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PSBISUdIKSBicmVhayBtYWluOworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaysrXSA9IGE7IGEgPSBsaXN0W2krK107IHBvbGFyaXR5IF49IDE7CisgICAgICAgICAgICAgICAgICAgIGIgPSBvdGhlcltqKytdOyBwb2xhcml0eSBePSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiAvLyBib3RoIHNlY29uZDsgdGFrZSBsb3dlciBpZiB1bmVxdWFsCisgICAgICAgICAgICAgICAgaWYgKGEgPCBiKSB7IC8vIHRha2UgYQorICAgICAgICAgICAgICAgICAgICBidWZmZXJbaysrXSA9IGE7IGEgPSBsaXN0W2krK107IHBvbGFyaXR5IF49IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiIDwgYSkgeyAvLyB0YWtlIGIKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2srK10gPSBiOyBiID0gb3RoZXJbaisrXTsgcG9sYXJpdHkgXj0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBhID09IGIsIHRha2Ugb25lLCBkcm9wIG90aGVyCisgICAgICAgICAgICAgICAgICAgIGlmIChhID09IEhJR0gpIGJyZWFrIG1haW47CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltrKytdID0gYTsgYSA9IGxpc3RbaSsrXTsgcG9sYXJpdHkgXj0gMTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IG90aGVyW2orK107IHBvbGFyaXR5IF49IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDE6IC8vIGEgc2Vjb25kLCBiIGZpcnN0OworICAgICAgICAgICAgICAgIGlmIChhIDwgYikgeyAvLyBOTyBPVkVSTEFQLCBkcm9wIGEKKyAgICAgICAgICAgICAgICAgICAgYSA9IGxpc3RbaSsrXTsgcG9sYXJpdHkgXj0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGIgPCBhKSB7IC8vIE9WRVJMQVAsIHRha2UgYgorICAgICAgICAgICAgICAgICAgICBidWZmZXJbaysrXSA9IGI7IGIgPSBvdGhlcltqKytdOyBwb2xhcml0eSBePSAyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGEgPT0gYiwgZHJvcCBib3RoIQorICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PSBISUdIKSBicmVhayBtYWluOworICAgICAgICAgICAgICAgICAgICBhID0gbGlzdFtpKytdOyBwb2xhcml0eSBePSAxOworICAgICAgICAgICAgICAgICAgICBiID0gb3RoZXJbaisrXTsgcG9sYXJpdHkgXj0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogLy8gYSBmaXJzdCwgYiBzZWNvbmQ7IGlmIGEgPCBiLCBvdmVybGFwCisgICAgICAgICAgICAgICAgaWYgKGIgPCBhKSB7IC8vIG5vIG92ZXJsYXAsIGRyb3AgYgorICAgICAgICAgICAgICAgICAgICBiID0gb3RoZXJbaisrXTsgcG9sYXJpdHkgXj0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgIGlmIChhIDwgYikgeyAvLyBPVkVSTEFQLCB0YWtlIGEKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2srK10gPSBhOyBhID0gbGlzdFtpKytdOyBwb2xhcml0eSBePSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGEgPT0gYiwgZHJvcCBib3RoIQorICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PSBISUdIKSBicmVhayBtYWluOworICAgICAgICAgICAgICAgICAgICBhID0gbGlzdFtpKytdOyBwb2xhcml0eSBePSAxOworICAgICAgICAgICAgICAgICAgICBiID0gb3RoZXJbaisrXTsgcG9sYXJpdHkgXj0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyW2srK10gPSBISUdIOyAgICAvLyB0ZXJtaW5hdGUKKyAgICAgICAgbGVuID0gazsKKyAgICAgICAgLy8gc3dhcCBsaXN0IGFuZCBidWZmZXIKKyAgICAgICAgaW50W10gdGVtcCA9IGxpc3Q7CisgICAgICAgIGxpc3QgPSBidWZmZXI7CisgICAgICAgIGJ1ZmZlciA9IHRlbXA7CisgICAgICAgIHBhdCA9IG51bGw7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBtYXgoaW50IGEsIGludCBiKSB7CisgICAgICAgIHJldHVybiAoYSA+IGIpID8gYSA6IGI7CisgICAgfQorICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEdlbmVyaWMgZmlsdGVyLWJhc2VkIHNjYW5uaW5nIGNvZGUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHByaXZhdGUgc3RhdGljIGludGVyZmFjZSBGaWx0ZXIgeworICAgICAgICBib29sZWFuIGNvbnRhaW5zKGludCBjb2RlUG9pbnQpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE51bWVyaWNWYWx1ZUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgTnVtZXJpY1ZhbHVlRmlsdGVyKGRvdWJsZSB2YWx1ZSkgeyB0aGlzLnZhbHVlID0gdmFsdWU7IH0KKyAgICAgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoaW50IGNoKSB7CisgICAgICAgICAgICByZXR1cm4gVUNoYXJhY3Rlci5nZXRVbmljb2RlTnVtZXJpY1ZhbHVlKGNoKSA9PSB2YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEdlbmVyYWxDYXRlZ29yeUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CisgICAgICAgIGludCBtYXNrOworICAgICAgICBHZW5lcmFsQ2F0ZWdvcnlGaWx0ZXIoaW50IG1hc2spIHsgdGhpcy5tYXNrID0gbWFzazsgfQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhpbnQgY2gpIHsKKyAgICAgICAgICAgIHJldHVybiAoKDEgPDwgVUNoYXJhY3Rlci5nZXRUeXBlKGNoKSkgJiBtYXNrKSAhPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW50UHJvcGVydHlGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIgeworICAgICAgICBpbnQgcHJvcDsKKyAgICAgICAgaW50IHZhbHVlOworICAgICAgICBJbnRQcm9wZXJ0eUZpbHRlcihpbnQgcHJvcCwgaW50IHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLnByb3AgPSBwcm9wOworICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKGludCBjaCkgeworICAgICAgICAgICAgcmV0dXJuIFVDaGFyYWN0ZXIuZ2V0SW50UHJvcGVydHlWYWx1ZShjaCwgcHJvcCkgPT0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmljIGZpbHRlci1iYXNlZCBzY2FubmluZyBjb2RlIGZvciBVQ0QgcHJvcGVydHkgVW5pY29kZVNldHMuCisgICAgICovCisgICAgcHJpdmF0ZSBVbmljb2RlU2V0IGFwcGx5RmlsdGVyKEZpbHRlciBmaWx0ZXIpIHsKKyAgICAgICAgLy8gV2FsayB0aHJvdWdoIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMsIG5vdGluZyB0aGUgc3RhcnQKKyAgICAgICAgLy8gYW5kIGVuZCBvZiBlYWNoIHJhbmdlIGZvciB3aGljaCBmaWx0ZXIuY29udGFpbihjKSBpcworICAgICAgICAvLyB0cnVlLiAgQWRkIGVhY2ggcmFuZ2UgdG8gYSBzZXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIHVzZSB0aGUgSU5DTFVTSU9OUyBzZXQsIHdoaWNoCisgICAgICAgIC8vIGVuY29kZXMgaW5mb3JtYXRpb24gYWJvdXQgY2hhcmFjdGVyIHJhbmdlcyB0aGF0IGFyZSBrbm93bgorICAgICAgICAvLyB0byBoYXZlIGlkZW50aWNhbCBwcm9wZXJ0aWVzLCBzdWNoIGFzIHRoZSBDSksgSWRlb2dyYXBocworICAgICAgICAvLyBmcm9tIFUrNEUwMCB0byBVKzlGQTUuICBJTkNMVVNJT05TIGNvbnRhaW5zIGFsbCBjaGFyYWN0ZXJzCisgICAgICAgIC8vIGV4Y2VwdCB0aGUgZmlyc3QgY2hhcmFjdGVycyBvZiBzdWNoIHJhbmdlcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVE9ETyBXaGVyZSBwb3NzaWJsZSwgaW5zdGVhZCBvZiBzY2FubmluZyBvdmVyIGNvZGUgcG9pbnRzLAorICAgICAgICAvLyB1c2UgaW50ZXJuYWwgcHJvcGVydHkgZGF0YSB0byBpbml0aWFsaXplIFVuaWNvZGVTZXRzIGZvcgorICAgICAgICAvLyB0aG9zZSBwcm9wZXJ0aWVzLiAgU2Nhbm5pbmcgY29kZSBwb2ludHMgaXMgc2xvdy4KKworICAgICAgICBjbGVhcigpOworCisgICAgICAgIGludCBzdGFydEhhc1Byb3BlcnR5ID0gLTE7CisgICAgICAgIGludCBsaW1pdFJhbmdlID0gSU5DTFVTSU9OUy5nZXRSYW5nZUNvdW50KCk7CisKKyAgICAgICAgZm9yIChpbnQgaj0wOyBqPGxpbWl0UmFuZ2U7ICsraikgeworICAgICAgICAgICAgLy8gZ2V0IGN1cnJlbnQgcmFuZ2UKKyAgICAgICAgICAgIGludCBzdGFydCA9IElOQ0xVU0lPTlMuZ2V0UmFuZ2VTdGFydChqKTsKKyAgICAgICAgICAgIGludCBlbmQgPSBJTkNMVVNJT05TLmdldFJhbmdlRW5kKGopOworCisgICAgICAgICAgICAvLyBmb3IgYWxsIHRoZSBjb2RlIHBvaW50cyBpbiB0aGUgcmFuZ2UsIHByb2Nlc3MKKyAgICAgICAgICAgIGZvciAoaW50IGNoID0gc3RhcnQ7IGNoIDw9IGVuZDsgKytjaCkgeworICAgICAgICAgICAgICAgIC8vIG9ubHkgYWRkIHRvIHRoZSB1bmljb2Rlc2V0IG9uIGluZmxlY3Rpb24gcG9pbnRzIC0tCisgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIGhhc1Byb3BlcnR5IHZhbHVlIGNoYW5nZXMgdG8gZmFsc2UKKyAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmNvbnRhaW5zKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRIYXNQcm9wZXJ0eSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SGFzUHJvcGVydHkgPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRIYXNQcm9wZXJ0eSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZChzdGFydEhhc1Byb3BlcnR5LCBjaC0xKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRIYXNQcm9wZXJ0eSA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhcnRIYXNQcm9wZXJ0eSA+PSAwKSB7CisgICAgICAgICAgICBhZGQoc3RhcnRIYXNQcm9wZXJ0eSwgMHgxMEZGRkYpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcnVsZSB3aGl0ZSBzcGFjZSBhbmQgY29tcHJlc3MKKyAgICAgKiBpbnRlcm5hbCBydWxlIHdoaXRlIHNwYWNlIHRvIGEgc2luZ2xlIHNwYWNlIGNoYXJhY3Rlci4KKyAgICAgKgorICAgICAqIEBzZWUgVUNoYXJhY3RlclByb3BlcnR5I2lzUnVsZVdoaXRlU3BhY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbXVuZ2VDaGFyTmFtZShTdHJpbmcgc291cmNlKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzb3VyY2UubGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgaW50IGNoID0gVVRGMTYuY2hhckF0KHNvdXJjZSwgaSk7CisgICAgICAgICAgICBpICs9IFVURjE2LmdldENoYXJDb3VudChjaCk7CisgICAgICAgICAgICBpZiAoVUNoYXJhY3RlclByb3BlcnR5LmlzUnVsZVdoaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGgoKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5jaGFyQXQoYnVmLmxlbmd0aCgpIC0gMSkgPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaCA9ICcgJzsgLy8gY29udmVydCB0byAnICcKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVURjE2LmFwcGVuZChidWYsIGNoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnVmLmxlbmd0aCgpICE9IDAgJiYKKyAgICAgICAgICAgIGJ1Zi5jaGFyQXQoYnVmLmxlbmd0aCgpIC0gMSkgPT0gJyAnKSB7CisgICAgICAgICAgICBidWYuc2V0TGVuZ3RoKGJ1Zi5sZW5ndGgoKSAtIDEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQcm9wZXJ0eSBzZXQgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogTW9kaWZpZXMgdGhpcyBzZXQgdG8gY29udGFpbiB0aG9zZSBjb2RlIHBvaW50cyB3aGljaCBoYXZlIHRoZQorICAgICAqIGdpdmVuIHZhbHVlIGZvciB0aGUgZ2l2ZW4gYmluYXJ5IG9yIGVudW1lcmF0ZWQgcHJvcGVydHksIGFzCisgICAgICogcmV0dXJuZWQgYnkgVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eVZhbHVlLiAgUHJpb3IgY29udGVudHMgb2YKKyAgICAgKiB0aGlzIHNldCBhcmUgbG9zdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wIGEgcHJvcGVydHkgaW4gdGhlIHJhbmdlCisgICAgICogVVByb3BlcnR5LkJJTl9TVEFSVC4uVVByb3BlcnR5LkJJTl9MSU1JVC0xIG9yCisgICAgICogVVByb3BlcnR5LklOVF9TVEFSVC4uVVByb3BlcnR5LklOVF9MSU1JVC0xLgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlIGEgdmFsdWUgaW4gdGhlIHJhbmdlCisgICAgICogVUNoYXJhY3Rlci5nZXRJbnRQcm9wZXJ0eU1pblZhbHVlKHByb3ApLi4KKyAgICAgKiBVQ2hhcmFjdGVyLmdldEludFByb3BlcnR5TWF4VmFsdWUocHJvcCksIHdpdGggb25lIGV4Y2VwdGlvbi4KKyAgICAgKiBJZiBwcm9wIGlzIFVQcm9wZXJ0eS5HRU5FUkFMX0NBVEVHT1JZLCB0aGVuIHZhbHVlIHNob3VsZCBub3QgYmUKKyAgICAgKiBhIFVDaGFyYWN0ZXIuZ2V0VHlwZSgpIHJlc3VsdCwgYnV0IHJhdGhlciBhIG1hc2sgdmFsdWUgcHJvZHVjZWQKKyAgICAgKiBieSBsb2dpY2FsbHkgT1JpbmcgKDEgPDwgVUNoYXJhY3Rlci5nZXRUeXBlKCkpIHZhbHVlcyB0b2dldGhlci4KKyAgICAgKiBUaGlzIGFsbG93cyBncm91cGVkIGNhdGVnb3JpZXMgc3VjaCBhcyBbOkw6XSB0byBiZSByZXByZWdzZW50ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMgc2V0CisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0IGFwcGx5SW50UHJvcGVydHlWYWx1ZShpbnQgcHJvcCwgaW50IHZhbHVlKSB7CisgICAgICAgIGlmIChwcm9wID09IFVQcm9wZXJ0eS5HRU5FUkFMX0NBVEVHT1JZKSB7CisgICAgICAgICAgICBhcHBseUZpbHRlcihuZXcgR2VuZXJhbENhdGVnb3J5RmlsdGVyKHZhbHVlKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcHBseUZpbHRlcihuZXcgSW50UHJvcGVydHlGaWx0ZXIocHJvcCwgdmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb2RpZmllcyB0aGlzIHNldCB0byBjb250YWluIHRob3NlIGNvZGUgcG9pbnRzIHdoaWNoIGhhdmUgdGhlCisgICAgICogZ2l2ZW4gdmFsdWUgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4gIFByaW9yIGNvbnRlbnRzIG9mIHRoaXMKKyAgICAgKiBzZXQgYXJlIGxvc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlBbGlhcyBhIHByb3BlcnR5IGFsaWFzLCBlaXRoZXIgc2hvcnQgb3IgbG9uZy4KKyAgICAgKiBUaGUgbmFtZSBpcyBtYXRjaGVkIGxvb3NlbHkuICBTZWUgUHJvcGVydHlBbGlhc2VzLnR4dCBmb3IgbmFtZXMKKyAgICAgKiBhbmQgYSBkZXNjcmlwdGlvbiBvZiBsb29zZSBtYXRjaGluZy4gIElmIHRoZSB2YWx1ZSBzdHJpbmcgaXMKKyAgICAgKiBlbXB0eSwgdGhlbiB0aGlzIHN0cmluZyBpcyBpbnRlcnByZXRlZCBhcyBlaXRoZXIgYQorICAgICAqIEdlbmVyYWxfQ2F0ZWdvcnkgdmFsdWUgYWxpYXMsIGEgU2NyaXB0IHZhbHVlIGFsaWFzLCBhIGJpbmFyeQorICAgICAqIHByb3BlcnR5IGFsaWFzLCBvciBhIHNwZWNpYWwgSUQuICBTcGVjaWFsIElEcyBhcmUgbWF0Y2hlZAorICAgICAqIGxvb3NlbHkgYW5kIGNvcnJlc3BvbmQgdG8gdGhlIGZvbGxvd2luZyBzZXRzOgorICAgICAqCisgICAgICogIkFOWSIgPSBbXHUwMDAwLVxVMDAxMEZGRkZdLAorICAgICAqICJBU0NJSSIgPSBbXHUwMDAwLVx1MDA3Rl0uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWVBbGlhcyBhIHZhbHVlIGFsaWFzLCBlaXRoZXIgc2hvcnQgb3IgbG9uZy4gIFRoZQorICAgICAqIG5hbWUgaXMgbWF0Y2hlZCBsb29zZWx5LiAgU2VlIFByb3BlcnR5VmFsdWVBbGlhc2VzLnR4dCBmb3IKKyAgICAgKiBuYW1lcyBhbmQgYSBkZXNjcmlwdGlvbiBvZiBsb29zZSBtYXRjaGluZy4gIEluIGFkZGl0aW9uIHRvCisgICAgICogYWxpYXNlcyBsaXN0ZWQsIG51bWVyaWMgdmFsdWVzIGFuZCBjYW5vbmljYWwgY29tYmluaW5nIGNsYXNzZXMKKyAgICAgKiBtYXkgYmUgZXhwcmVzc2VkIG51bWVyaWNhbGx5LCBlLmcuLCAoIm52IiwgIjAuNSIpIG9yICgiY2NjIiwKKyAgICAgKiAiMjIwIikuICBUaGUgdmFsdWUgc3RyaW5nIG1heSBhbHNvIGJlIGVtcHR5LgorICAgICAqCisgICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzIHNldAorICAgICAqCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVNldCBhcHBseVByb3BlcnR5QWxpYXMoU3RyaW5nIHByb3BlcnR5QWxpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZUFsaWFzKSB7CisgICAgICAgIGludCBwOworICAgICAgICBpbnQgdjsKKyAgICAgICAgYm9vbGVhbiBtdXN0Tm90QmVFbXB0eSA9IGZhbHNlOworCisgICAgICAgIGlmICh2YWx1ZUFsaWFzLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgcCA9IFVDaGFyYWN0ZXIuZ2V0UHJvcGVydHlFbnVtKHByb3BlcnR5QWxpYXMpOworCisgICAgICAgICAgICBpZiAoKHAgPj0gVVByb3BlcnR5LkJJTkFSWV9TVEFSVCAmJiBwIDwgVVByb3BlcnR5LkJJTkFSWV9MSU1JVCkgfHwKKyAgICAgICAgICAgICAgICAocCA+PSBVUHJvcGVydHkuSU5UX1NUQVJUICYmIHAgPCBVUHJvcGVydHkuSU5UX0xJTUlUKSkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHYgPSBVQ2hhcmFjdGVyLmdldFByb3BlcnR5VmFsdWVFbnVtKHAsIHZhbHVlQWxpYXMpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBudW1lcmljIENDQworICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBVUHJvcGVydHkuQ0FOT05JQ0FMX0NPTUJJTklOR19DTEFTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IEludGVnZXIucGFyc2VJbnQoVXRpbGl0eS5kZWxldGVSdWxlV2hpdGVTcGFjZSh2YWx1ZUFsaWFzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0YW50IHNldCBpcyBlbXB0eSB0aGVuIHRoZSBudW1lcmljIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3YXMgaW52YWxpZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG11c3ROb3RCZUVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVsc2UgeworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwKSB7CisgICAgICAgICAgICAgICAgY2FzZSBVUHJvcGVydHkuTlVNRVJJQ19WQUxVRToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gRG91YmxlLnBhcnNlRG91YmxlKFV0aWxpdHkuZGVsZXRlUnVsZVdoaXRlU3BhY2UodmFsdWVBbGlhcykpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlGaWx0ZXIobmV3IE51bWVyaWNWYWx1ZUZpbHRlcih2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFVQcm9wZXJ0eS5OQU1FOgorICAgICAgICAgICAgICAgIGNhc2UgVVByb3BlcnR5LlVOSUNPREVfMV9OQU1FOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IG11bmdlIG5hbWUsIHNpbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVQ2hhcmFjdGVyLmNoYXJGcm9tTmFtZSgpIGRvZXMgbm90IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vc2UnIG1hdGNoaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJ1ZiA9IG11bmdlQ2hhck5hbWUodmFsdWVBbGlhcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwID09IFVQcm9wZXJ0eS5OQU1FKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXJhY3Rlci5nZXRDaGFyRnJvbUV4dGVuZGVkTmFtZShidWYpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcmFjdGVyLmdldENoYXJGcm9tTmFtZTFfMChidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIgbmFtZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZChjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHAgaXMgYSBub24tYmluYXJ5LCBub24tZW51bWVyYXRlZCBwcm9wZXJ0eSB0aGF0IHdlCisgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc3VwcG9ydCAoeWV0KS4KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBwcm9wZXJ0eSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyB2YWx1ZUFsaWFzIGlzIGVtcHR5LiAgSW50ZXJwcmV0IGFzIEdlbmVyYWwgQ2F0ZWdvcnksIFNjcmlwdCwKKyAgICAgICAgICAgIC8vIEJpbmFyeSBwcm9wZXJ0eSwgb3IgQU5ZIG9yIEFTQ0lJLiAgVXBvbiBzdWNjZXNzLCBwIGFuZCB2IHdpbGwKKyAgICAgICAgICAgIC8vIGJlIHNldC4KKyAgICAgICAgICAgIHRyeSB7IAorICAgICAgICAgICAgICAgIHAgPSBVUHJvcGVydHkuR0VORVJBTF9DQVRFR09SWTsKKyAgICAgICAgICAgICAgICB2ID0gVUNoYXJhY3Rlci5nZXRQcm9wZXJ0eVZhbHVlRW51bShwLCBwcm9wZXJ0eUFsaWFzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFVQcm9wZXJ0eS5TQ1JJUFQ7CisgICAgICAgICAgICAgICAgICAgIHYgPSBVQ2hhcmFjdGVyLmdldFByb3BlcnR5VmFsdWVFbnVtKHAsIHByb3BlcnR5QWxpYXMpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlMikgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgcCA9IFVDaGFyYWN0ZXIuZ2V0UHJvcGVydHlFbnVtKHByb3BlcnR5QWxpYXMpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZTMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocCA+PSBVUHJvcGVydHkuQklOQVJZX1NUQVJUICYmIHAgPCBVUHJvcGVydHkuQklOQVJZX0xJTUlUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSBVUHJvcGVydHlBbGlhc2VzLmNvbXBhcmUoQU5ZX0lELCBwcm9wZXJ0eUFsaWFzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldChNSU5fVkFMVUUsIE1BWF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gVVByb3BlcnR5QWxpYXNlcy5jb21wYXJlKEFTQ0lJX0lELCBwcm9wZXJ0eUFsaWFzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCgwLCAweDdGKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkgbmFtZSB3YXMgbmV2ZXIgbWF0Y2hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHByb3BlcnR5IGFsaWFzIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZCBwcm9wZXJ5IG5hbWUsIGJ1dCBpdCBpc24ndCBiaW5hcnksIHNvIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBiZSBzdXBwbGllZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1pc3NpbmcgcHJvcGVydHkgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5SW50UHJvcGVydHlWYWx1ZShwLCB2KTsKKworICAgICAgICBpZiAobXVzdE5vdEJlRW1wdHkgJiYgaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBtdXN0Tm90QmVFbXB0eSBpcyBzZXQgdG8gdHJ1ZSBpZiBhbiBlbXB0eSBzZXQgaW5kaWNhdGVzCisgICAgICAgICAgICAvLyBpbnZhbGlkIGlucHV0LgorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBwcm9wZXJ0eSB2YWx1ZSIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHJvcGVydHkgc2V0IHBhdHRlcm5zCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHBvc2l0aW9uLCBpbiB0aGUgZ2l2ZW4gcGF0dGVybiwgYXBwZWFycworICAgICAqIHRvIGJlIHRoZSBzdGFydCBvZiBhIHByb3BlcnR5IHNldCBwYXR0ZXJuLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcmVzZW1ibGVzUHJvcGVydHlQYXR0ZXJuKFN0cmluZyBwYXR0ZXJuLCBpbnQgcG9zKSB7CisgICAgICAgIC8vIFBhdHRlcm5zIGFyZSBhdCBsZWFzdCA1IGNoYXJhY3RlcnMgbG9uZworICAgICAgICBpZiAoKHBvcys1KSA+IHBhdHRlcm4ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvb2sgZm9yIGFuIG9wZW5pbmcgWzosIFs6XiwgXHAsIG9yIFxQCisgICAgICAgIHJldHVybiBwYXR0ZXJuLnJlZ2lvbk1hdGNoZXMocG9zLCAiWzoiLCAwLCAyKSB8fAorICAgICAgICAgICAgcGF0dGVybi5yZWdpb25NYXRjaGVzKHRydWUsIHBvcywgIlxccCIsIDAsIDIpIHx8CisgICAgICAgICAgICBwYXR0ZXJuLnJlZ2lvbk1hdGNoZXMocG9zLCAiXFxOIiwgMCwgMik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGFyc2UgdGhlIGdpdmVuIHByb3BlcnR5IHBhdHRlcm4gYXQgdGhlIGdpdmVuIHBhcnNlIHBvc2l0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgVW5pY29kZVNldCBhcHBseVByb3BlcnR5UGF0dGVybihTdHJpbmcgcGF0dGVybiwgUGFyc2VQb3NpdGlvbiBwcG9zKSB7CisgICAgICAgIGludCBwb3MgPSBwcG9zLmdldEluZGV4KCk7CisKKyAgICAgICAgLy8gT24gZW50cnksIHBwb3Mgc2hvdWxkIHBvaW50IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKworICAgICAgICAvLyBNaW5pbXVtIGxlbmd0aCBpcyA1IGNoYXJhY3RlcnMsIGUuZy4gXHB7TH0KKyAgICAgICAgaWYgKChwb3MrNSkgPiBwYXR0ZXJuLmxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gcG9zaXggPSBmYWxzZTsgLy8gdHJ1ZSBmb3IgWzpwYXQ6XSwgZmFsc2UgZm9yIFxwe3BhdH0gXFB7cGF0fSBcTntwYXR9CisgICAgICAgIGJvb2xlYW4gaXNOYW1lID0gZmFsc2U7IC8vIHRydWUgZm9yIFxOe3BhdH0sIG8vdyBmYWxzZQorICAgICAgICBib29sZWFuIGludmVydCA9IGZhbHNlOworCisgICAgICAgIC8vIExvb2sgZm9yIGFuIG9wZW5pbmcgWzosIFs6XiwgXHAsIG9yIFxQCisgICAgICAgIGlmIChwYXR0ZXJuLnJlZ2lvbk1hdGNoZXMocG9zLCAiWzoiLCAwLCAyKSkgeworICAgICAgICAgICAgcG9zaXggPSB0cnVlOworICAgICAgICAgICAgcG9zID0gVXRpbGl0eS5za2lwV2hpdGVzcGFjZShwYXR0ZXJuLCBwb3MrMik7CisgICAgICAgICAgICBpZiAocG9zIDwgcGF0dGVybi5sZW5ndGgoKSAmJiBwYXR0ZXJuLmNoYXJBdChwb3MpID09ICdeJykgeworICAgICAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgICAgIGludmVydCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5yZWdpb25NYXRjaGVzKHRydWUsIHBvcywgIlxccCIsIDAsIDIpIHx8CisgICAgICAgICAgICAgICAgICAgcGF0dGVybi5yZWdpb25NYXRjaGVzKHBvcywgIlxcTiIsIDAsIDIpKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBwYXR0ZXJuLmNoYXJBdChwb3MrMSk7CisgICAgICAgICAgICBpbnZlcnQgPSAoYyA9PSAnUCcpOworICAgICAgICAgICAgaXNOYW1lID0gKGMgPT0gJ04nKTsKKyAgICAgICAgICAgIHBvcyA9IFV0aWxpdHkuc2tpcFdoaXRlc3BhY2UocGF0dGVybiwgcG9zKzIpOworICAgICAgICAgICAgaWYgKHBvcyA9PSBwYXR0ZXJuLmxlbmd0aCgpIHx8IHBhdHRlcm4uY2hhckF0KHBvcysrKSAhPSAneycpIHsKKyAgICAgICAgICAgICAgICAvLyBTeW50YXggZXJyb3I7ICJccCIgb3IgIlxQIiBub3QgZm9sbG93ZWQgYnkgInsiCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPcGVuIGRlbGltaXRlciBub3Qgc2VlbgorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvLyBMb29rIGZvciB0aGUgbWF0Y2hpbmcgY2xvc2UgZGVsaW1pdGVyLCBlaXRoZXIgOl0gb3IgfQorICAgICAgICBpbnQgY2xvc2UgPSBwYXR0ZXJuLmluZGV4T2YocG9zaXggPyAiOl0iIDogIn0iLCBwb3MpOworICAgICAgICBpZiAoY2xvc2UgPCAwKSB7CisgICAgICAgICAgICAvLyBTeW50YXggZXJyb3I7IGNsb3NlIGRlbGltaXRlciBtaXNzaW5nCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvb2sgZm9yIGFuICc9JyBzaWduLiAgSWYgdGhpcyBpcyBwcmVzZW50LCB3ZSB3aWxsIHBhcnNlIGEKKyAgICAgICAgLy8gbWVkaXVtIFxwe2djPUNmfSBvciBsb25nIFxwe0dlbmVyYWxDYXRlZ29yeT1Gb3JtYXR9CisgICAgICAgIC8vIHBhdHRlcm4uCisgICAgICAgIGludCBlcXVhbHMgPSBwYXR0ZXJuLmluZGV4T2YoJz0nLCBwb3MpOworICAgICAgICBTdHJpbmcgcHJvcE5hbWUsIHZhbHVlTmFtZTsKKyAgICAgICAgaWYgKGVxdWFscyA+PSAwICYmIGVxdWFscyA8IGNsb3NlICYmICFpc05hbWUpIHsKKyAgICAgICAgICAgIC8vIEVxdWFscyBzZWVuOyBwYXJzZSBtZWRpdW0vbG9uZyBwYXR0ZXJuCisgICAgICAgICAgICBwcm9wTmFtZSA9IHBhdHRlcm4uc3Vic3RyaW5nKHBvcywgZXF1YWxzKTsKKyAgICAgICAgICAgIHZhbHVlTmFtZSA9IHBhdHRlcm4uc3Vic3RyaW5nKGVxdWFscysxLCBjbG9zZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlcmUgbm8gJz0nIGlzIHNlZW4sIGFuZCBcTnt9CisgICAgICAgICAgICBwcm9wTmFtZSA9IHBhdHRlcm4uc3Vic3RyaW5nKHBvcywgY2xvc2UpOworICAgICAgICAgICAgdmFsdWVOYW1lID0gIiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsZSBcTntuYW1lfQorICAgICAgICAgICAgaWYgKGlzTmFtZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsaXR0bGUgaW5lZmZpY2llbnQgc2luY2UgaXQgbWVhbnMgd2UgaGF2ZSB0bworICAgICAgICAgICAgICAgIC8vIHBhcnNlICJuYSIgYmFjayB0byBVUHJvcGVydHkuTkFNRSBldmVuIHRob3VnaCB3ZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgLy8ga25vdyBpdCdzIFVQcm9wZXJ0eS5OQU1FLiAgSWYgd2UgcmVmYWN0b3IgdGhlIEFQSSB0bworICAgICAgICAgICAgICAgIC8vIHN1cHBvcnQgYXJncyBvZiAoaW50LCBTdHJpbmcpIHRoZW4gd2UgY2FuIHJlbW92ZQorICAgICAgICAgICAgICAgIC8vICJuYSIgYW5kIG1ha2UgdGhpcyBhIGxpdHRsZSBtb3JlIGVmZmljaWVudC4KKyAgICAgICAgICAgICAgICB2YWx1ZU5hbWUgPSBwcm9wTmFtZTsKKyAgICAgICAgICAgICAgICBwcm9wTmFtZSA9ICJuYSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhcHBseVByb3BlcnR5QWxpYXMocHJvcE5hbWUsIHZhbHVlTmFtZSk7CisKKyAgICAgICAgaWYgKGludmVydCkgeworICAgICAgICAgICAgY29tcGxlbWVudCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTW92ZSB0byB0aGUgbGltaXQgcG9zaXRpb24gYWZ0ZXIgdGhlIGNsb3NlIGRlbGltaXRlcgorICAgICAgICBwcG9zLnNldEluZGV4KGNsb3NlICsgKHBvc2l4ID8gMiA6IDEpKTsKKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlU2V0SXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVTZXRJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyYWI5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlU2V0SXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZVNldEl0ZXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjQ6MDIgJCAKKyAqICRSZXZpc2lvbjogMS4xMSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuVXRpbGl0eTsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8qKgorICogVW5pY29kZVNldEl0ZXJhdG9yIGl0ZXJhdGVzIG92ZXIgdGhlIGNvbnRlbnRzIG9mIGEgVW5pY29kZVNldC4gIEl0CisgKiBpdGVyYXRlcyBvdmVyIGVpdGhlciBjb2RlIHBvaW50cyBvciBjb2RlIHBvaW50IHJhbmdlcy4gIEFmdGVyIGFsbAorICogY29kZSBwb2ludHMgb3IgcmFuZ2VzIGhhdmUgYmVlbiByZXR1cm5lZCwgaXQgcmV0dXJucyB0aGUKKyAqIG11bHRpY2hhcmFjdGVyIHN0cmluZ3Mgb2YgdGhlIFVuaWNvZFNldCwgaWYgYW55LgorICoKKyAqIDxwPlRvIGl0ZXJhdGUgb3ZlciBjb2RlIHBvaW50cywgdXNlIGEgbG9vcCBsaWtlIHRoaXM6CisgKiA8cHJlPgorICogVW5pY29kZVNldEl0ZXJhdG9yIGl0KHNldCk7CisgKiB3aGlsZSAoc2V0Lm5leHQoKSkgeworICogICBpZiAoc2V0LmNvZGVwb2ludCAhPSBVbmljb2RlU2V0SXRlcmF0b3I6OklTX1NUUklORykgeworICogICAgIHByb2Nlc3NDb2RlcG9pbnQoc2V0LmNvZGVwb2ludCk7CisgKiAgIH0gZWxzZSB7CisgKiAgICAgcHJvY2Vzc1N0cmluZyhzZXQuc3RyaW5nKTsKKyAqICAgfQorICogfQorICogPC9wcmU+CisgKgorICogPHA+VG8gaXRlcmF0ZSBvdmVyIGNvZGUgcG9pbnQgcmFuZ2VzLCB1c2UgYSBsb29wIGxpa2UgdGhpczoKKyAqIDxwcmU+CisgKiBVbmljb2RlU2V0SXRlcmF0b3IgaXQoc2V0KTsKKyAqIHdoaWxlIChzZXQubmV4dFJhbmdlKCkpIHsKKyAqICAgaWYgKHNldC5jb2RlcG9pbnQgIT0gVW5pY29kZVNldEl0ZXJhdG9yOjpJU19TVFJJTkcpIHsKKyAqICAgICBwcm9jZXNzQ29kZXBvaW50UmFuZ2Uoc2V0LmNvZGVwb2ludCwgc2V0LmNvZGVwb2ludEVuZCk7CisgKiAgIH0gZWxzZSB7CisgKiAgICAgcHJvY2Vzc1N0cmluZyhzZXQuc3RyaW5nKTsKKyAqICAgfQorICogfQorICogPC9wcmU+CisgKiBAYXV0aG9yIE0uIERhdmlzCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFVuaWNvZGVTZXRJdGVyYXRvciB7CisJCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgPHR0PmNvZGVwb2ludDwvdHQ+IGlmIHRoZSBpdGVyYXRvciBwb2ludHMgdG8gYSBzdHJpbmcuCisgICAgICogSWYgPHR0PmNvZGVwb2ludCA9PSBJU19TVFJJTkc8L3R0PiwgdGhlbiBleGFtaW5lCisgICAgICogPHR0PnN0cmluZzwvdHQ+IGZvciB0aGUgY3VycmVudCBpdGVyYXRpb24gcmVzdWx0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworCXB1YmxpYyBzdGF0aWMgaW50IElTX1NUUklORyA9IC0xOworCQorCS8qKgorICAgICAqIEN1cnJlbnQgY29kZSBwb2ludCwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgPHR0PklTX1NUUklORzwvdHQ+LCBpZgorICAgICAqIHRoZSBpdGVyYXRvciBwb2ludHMgdG8gYSBzdHJpbmcuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisJcHVibGljIGludCBjb2RlcG9pbnQ7CisKKyAgICAvKioKKyAgICAgKiBXaGVuIGl0ZXJhdGluZyBvdmVyIHJhbmdlcyB1c2luZyA8dHQ+bmV4dFJhbmdlKCk8L3R0PiwKKyAgICAgKiA8dHQ+Y29kZXBvaW50RW5kPC90dD4gY29udGFpbnMgdGhlIGluY2x1c2l2ZSBlbmQgb2YgdGhlCisgICAgICogaXRlcmF0aW9uIHJhbmdlLCBpZiA8dHQ+Y29kZXBvaW50ICE9IElTX1NUUklORzwvdHQ+LiAgSWYKKyAgICAgKiBpdGVyYXRpbmcgb3ZlciBjb2RlIHBvaW50cyB1c2luZyA8dHQ+bmV4dCgpPC90dD4sIG9yIGlmCisgICAgICogPHR0PmNvZGVwb2ludCA9PSBJU19TVFJJTkc8L3R0PiwgdGhlbiB0aGUgdmFsdWUgb2YKKyAgICAgKiA8dHQ+Y29kZXBvaW50RW5kPC90dD4gaXMgdW5kZWZpbmVkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworCXB1YmxpYyBpbnQgY29kZXBvaW50RW5kOworCisgICAgLyoqCisgICAgICogSWYgPHR0PmNvZGVwb2ludCA9PSBJU19TVFJJTkc8L3R0PiwgdGhlbiA8dHQ+c3RyaW5nPC90dD4gcG9pbnRzCisgICAgICogdG8gdGhlIGN1cnJlbnQgc3RyaW5nLiAgSWYgPHR0PmNvZGVwb2ludCAhPSBJU19TVFJJTkc8L3R0PiwgdGhlCisgICAgICogdmFsdWUgb2YgPHR0PnN0cmluZzwvdHQ+IGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKwlwdWJsaWMgU3RyaW5nIHN0cmluZzsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiBpdGVyYXRvciBvdmVyIHRoZSBnaXZlbiBzZXQuCisgICAgICogQHBhcmFtIHNldCBzZXQgdG8gaXRlcmF0ZSBvdmVyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVTZXRJdGVyYXRvcihVbmljb2RlU2V0IHNldCkgeworICAgICAgICByZXNldChzZXQpOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIGl0ZXJhdG9yIG92ZXIgbm90aGluZy4gIDx0dD5uZXh0KCk8L3R0PiBhbmQKKyAgICAgKiA8dHQ+bmV4dFJhbmdlKCk8L3R0PiByZXR1cm4gZmFsc2UuIFRoaXMgaXMgYSBjb252ZW5pZW5jZQorICAgICAqIGNvbnN0cnVjdG9yIGFsbG93aW5nIHRoZSB0YXJnZXQgdG8gYmUgc2V0IGxhdGVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlU2V0SXRlcmF0b3IoKSB7CisgICAgICAgIHJlc2V0KG5ldyBVbmljb2RlU2V0KCkpOworICAgIH0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSBzZXQsIGVpdGhlciBhIHNpbmdsZSBjb2RlIHBvaW50CisgICAgICogb3IgYSBzdHJpbmcuICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBlbGVtZW50cyBpbiB0aGUgc2V0LCByZXR1cm4KKyAgICAgKiBmYWxzZS4gIElmIDx0dD5jb2RlcG9pbnQgPT0gSVNfU1RSSU5HPC90dD4sIHRoZSB2YWx1ZSBpcyBhCisgICAgICogc3RyaW5nIGluIHRoZSA8dHQ+c3RyaW5nPC90dD4gZmllbGQuICBPdGhlcndpc2UgdGhlIHZhbHVlIGlzIGEKKyAgICAgKiBzaW5nbGUgY29kZSBwb2ludCBpbiB0aGUgPHR0PmNvZGVwb2ludDwvdHQ+IGZpZWxkLgorICAgICAqIAorICAgICAqIDxwPlRoZSBvcmRlciBvZiBpdGVyYXRpb24gaXMgYWxsIGNvZGUgcG9pbnRzIGluIHNvcnRlZCBvcmRlciwKKyAgICAgKiBmb2xsb3dlZCBieSBhbGwgc3RyaW5ncyBzb3J0ZWQgb3JkZXIuICA8dHQ+Y29kZXBvaW50RW5kPC90dD4gaXMKKyAgICAgKiB1bmRlZmluZWQgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZC4gIDx0dD5zdHJpbmc8L3R0PiBpcworICAgICAqIHVuZGVmaW5lZCB1bmxlc3MgPHR0PmNvZGVwb2ludCA9PSBJU19TVFJJTkc8L3R0Pi4gIERvIG5vdCBtaXgKKyAgICAgKiBjYWxscyB0byA8dHQ+bmV4dCgpPC90dD4gYW5kIDx0dD5uZXh0UmFuZ2UoKTwvdHQ+IHdpdGhvdXQKKyAgICAgKiBjYWxsaW5nIDx0dD5yZXNldCgpPC90dD4gYmV0d2VlbiB0aGVtLiAgVGhlIHJlc3VsdHMgb2YgZG9pbmcgc28KKyAgICAgKiBhcmUgdW5kZWZpbmVkLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZXJlIHdhcyBhbm90aGVyIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhpcworICAgICAqIG9iamVjdCBjb250YWlucyB0aGUgZWxlbWVudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBuZXh0KCkgeworICAgICAgICBpZiAobmV4dEVsZW1lbnQgPD0gZW5kRWxlbWVudCkgeworICAgICAgICAJY29kZXBvaW50ID0gY29kZXBvaW50RW5kID0gbmV4dEVsZW1lbnQrKzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyYW5nZSA8IGVuZFJhbmdlKSB7CisgICAgICAgIAlsb2FkUmFuZ2UoKytyYW5nZSk7CisgICAgICAgIAljb2RlcG9pbnQgPSBjb2RlcG9pbnRFbmQgPSBuZXh0RWxlbWVudCsrOworICAgICAgICAJcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHN0cmluZ0l0ZXJhdG9yID09IG51bGwgaWZmIHRoZXJlIGFyZSBubyBzdHJpbmcgZWxlbWVudHMgcmVtYWluaW5nCisgICAgICAgIAorICAgICAgICBpZiAoc3RyaW5nSXRlcmF0b3IgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICBjb2RlcG9pbnQgPSBJU19TVFJJTkc7IC8vIHNpZ25hbCB0aGF0IHZhbHVlIGlzIGFjdHVhbGx5IGEgc3RyaW5nCisgICAgICAgIHN0cmluZyA9IChTdHJpbmcpc3RyaW5nSXRlcmF0b3IubmV4dCgpOworICAgICAgICBpZiAoIXN0cmluZ0l0ZXJhdG9yLmhhc05leHQoKSkgc3RyaW5nSXRlcmF0b3IgPSBudWxsOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgc2V0LCBlaXRoZXIgYSBjb2RlIHBvaW50IHJhbmdlCisgICAgICogb3IgYSBzdHJpbmcuICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBlbGVtZW50cyBpbiB0aGUgc2V0LCByZXR1cm4KKyAgICAgKiBmYWxzZS4gIElmIDx0dD5jb2RlcG9pbnQgPT0gSVNfU1RSSU5HPC90dD4sIHRoZSB2YWx1ZSBpcyBhCisgICAgICogc3RyaW5nIGluIHRoZSA8dHQ+c3RyaW5nPC90dD4gZmllbGQuICBPdGhlcndpc2UgdGhlIHZhbHVlIGlzIGEKKyAgICAgKiByYW5nZSBvZiBvbmUgb3IgbW9yZSBjb2RlIHBvaW50cyBmcm9tIDx0dD5jb2RlcG9pbnQ8L3R0PiB0bworICAgICAqIDx0dD5jb2RlcG9pbnRlRW5kPC90dD4gaW5jbHVzaXZlLgorICAgICAqIAorICAgICAqIDxwPlRoZSBvcmRlciBvZiBpdGVyYXRpb24gaXMgYWxsIGNvZGUgcG9pbnRzIHJhbmdlcyBpbiBzb3J0ZWQKKyAgICAgKiBvcmRlciwgZm9sbG93ZWQgYnkgYWxsIHN0cmluZ3Mgc29ydGVkIG9yZGVyLiAgUmFuZ2VzIGFyZQorICAgICAqIGRpc2pvaW50IGFuZCBub24tY29udGlndW91cy4gIDx0dD5zdHJpbmc8L3R0PiBpcyB1bmRlZmluZWQKKyAgICAgKiB1bmxlc3MgPHR0PmNvZGVwb2ludCA9PSBJU19TVFJJTkc8L3R0Pi4gIERvIG5vdCBtaXggY2FsbHMgdG8KKyAgICAgKiA8dHQ+bmV4dCgpPC90dD4gYW5kIDx0dD5uZXh0UmFuZ2UoKTwvdHQ+IHdpdGhvdXQgY2FsbGluZworICAgICAqIDx0dD5yZXNldCgpPC90dD4gYmV0d2VlbiB0aGVtLiAgVGhlIHJlc3VsdHMgb2YgZG9pbmcgc28gYXJlCisgICAgICogdW5kZWZpbmVkLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZXJlIHdhcyBhbm90aGVyIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhpcworICAgICAqIG9iamVjdCBjb250YWlucyB0aGUgZWxlbWVudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBuZXh0UmFuZ2UoKSB7CisgICAgICAgIGlmIChuZXh0RWxlbWVudCA8PSBlbmRFbGVtZW50KSB7CisgICAgICAgIAljb2RlcG9pbnRFbmQgPSBlbmRFbGVtZW50OworICAgICAgICAJY29kZXBvaW50ID0gbmV4dEVsZW1lbnQ7CisgICAgICAgIAluZXh0RWxlbWVudCA9IGVuZEVsZW1lbnQrMTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyYW5nZSA8IGVuZFJhbmdlKSB7CisgICAgICAgICAgICBsb2FkUmFuZ2UoKytyYW5nZSk7CisgICAgICAgIAljb2RlcG9pbnRFbmQgPSBlbmRFbGVtZW50OworICAgICAgICAJY29kZXBvaW50ID0gbmV4dEVsZW1lbnQ7CisgICAgICAgIAluZXh0RWxlbWVudCA9IGVuZEVsZW1lbnQrMTsKKyAgICAgICAgCXJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBzdHJpbmdJdGVyYXRvciA9PSBudWxsIGlmZiB0aGVyZSBhcmUgbm8gc3RyaW5nIGVsZW1lbnRzIHJlbWFpbmluZworICAgICAgICAKKyAgICAgICAgaWYgKHN0cmluZ0l0ZXJhdG9yID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29kZXBvaW50ID0gSVNfU1RSSU5HOyAvLyBzaWduYWwgdGhhdCB2YWx1ZSBpcyBhY3R1YWxseSBhIHN0cmluZworICAgICAgICBzdHJpbmcgPSAoU3RyaW5nKXN0cmluZ0l0ZXJhdG9yLm5leHQoKTsKKyAgICAgICAgaWYgKCFzdHJpbmdJdGVyYXRvci5oYXNOZXh0KCkpIHN0cmluZ0l0ZXJhdG9yID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoaXMgaXRlcmF0b3IgdG8gdmlzaXQgdGhlIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBzZXQgYW5kCisgICAgICogcmVzZXRzIGl0IHRvIHRoZSBzdGFydCBvZiB0aGF0IHNldC4gIFRoZSBpdGVyYXRvciBpcyB2YWxpZCBvbmx5CisgICAgICogc28gbG9uZyBhcyA8dHQ+c2V0PC90dD4gaXMgdmFsaWQuCisgICAgICogQHBhcmFtIHNldCB0aGUgc2V0IHRvIGl0ZXJhdGUgb3Zlci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZXNldChVbmljb2RlU2V0IHNldCkgeworICAgICAgICB0aGlzLnNldCA9IHNldDsKKyAgICAgICAgcmVzZXQoKTsKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGlzIGl0ZXJhdG9yIHRvIHRoZSBzdGFydCBvZiB0aGUgc2V0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgeworICAgICAgICBlbmRSYW5nZSA9IHNldC5nZXRSYW5nZUNvdW50KCkgLSAxOworICAgICAgICByYW5nZSA9IDA7CisgICAgICAgIGVuZEVsZW1lbnQgPSAtMTsKKyAgICAgICAgbmV4dEVsZW1lbnQgPSAwOyAgICAgICAgICAgIAorICAgICAgICBpZiAoZW5kUmFuZ2UgPj0gMCkgeworICAgICAgICAgICAgbG9hZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpbmdJdGVyYXRvciA9IG51bGw7CisgICAgICAgIGlmIChzZXQuc3RyaW5ncyAhPSBudWxsKSB7CisgICAgICAgIAlzdHJpbmdJdGVyYXRvciA9IHNldC5zdHJpbmdzLml0ZXJhdG9yKCk7CisgICAgICAgIAlpZiAoIXN0cmluZ0l0ZXJhdG9yLmhhc05leHQoKSkgc3RyaW5nSXRlcmF0b3IgPSBudWxsOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIElOVEVSTkFMOiBDYXVzZXMgdGhlIGludGVyYXRpb24gdG8gb25seSB2aXNpdCBwYXJ0IG9mIGxvbmcgcmFuZ2VzCisgICAgICogQGludGVybmFsIHVzZWQgb25seSBmb3IgdGVzdGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEFiYnJldmlhdGVkKGJvb2xlYW4gYWJicikgeworICAgICAgICBhYmJyZXZpYXRlZCA9IGFiYnI7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIElOVEVSTkFMOiBDYXVzZXMgdGhlIGludGVyYXRpb24gdG8gb25seSB2aXNpdCBwYXJ0IG9mIGxvbmcgcmFuZ2VzCisgICAgICogQGludGVybmFsIHVzZWQgb25seSBmb3IgdGVzdGluZworICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGdldEFiYnJldmlhdGVkKCkgeworICAgICAgICByZXR1cm4gYWJicmV2aWF0ZWQ7CisgICAgfQorICAgIAorICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09IFBSSVZBVEVTID09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIAorICAgIHByaXZhdGUgVW5pY29kZVNldCBzZXQ7CisgICAgcHJpdmF0ZSBpbnQgZW5kUmFuZ2UgPSAwOworICAgIHByaXZhdGUgaW50IHJhbmdlID0gMDsKKyAgICBwcml2YXRlIGludCBlbmRFbGVtZW50OworICAgIHByaXZhdGUgaW50IG5leHRFbGVtZW50OworICAgIHByaXZhdGUgYm9vbGVhbiBhYmJyZXZpYXRlZCA9IGZhbHNlOworICAgIHByaXZhdGUgSXRlcmF0b3Igc3RyaW5nSXRlcmF0b3IgPSBudWxsOworICAgIAorICAgIC8qKgorICAgICAqIEludmFyaWFudDogc3RyaW5nSXRlcmF0b3IgaXMgbnVsbCB3aGVuIHRoZXJlIGFyZSBubyAobW9yZSkgc3RyaW5ncyByZW1haW5pbmcKKyAgICAgKi8KKworICAgIHByaXZhdGUgZmluYWwgdm9pZCBsb2FkUmFuZ2UoaW50IHJhbmdlKSB7CisgICAgICAgIG5leHRFbGVtZW50ID0gc2V0LmdldFJhbmdlU3RhcnQocmFuZ2UpOworICAgICAgICBlbmRFbGVtZW50ID0gc2V0LmdldFJhbmdlRW5kKHJhbmdlKTsKKyAgICAgICAgaWYgKGFiYnJldmlhdGVkICYmIChlbmRFbGVtZW50ID4gbmV4dEVsZW1lbnQgKyA1MCkpIHsKKyAgICAgICAgICAgIGVuZEVsZW1lbnQgPSBuZXh0RWxlbWVudCArIDUwOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3RleHQvVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjIwNWEwMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yLmphdmEKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L0F0dGljL1VuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDMgMTg6NTY6NDYgJCAKKyAqICRSZXZpc2lvbjogMS4xMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBBIHRyYW5zbGl0ZXJhdG9yIHRoYXQgY29udmVydHMgZnJvbSBVbmljb2RlIGNoYXJhY3RlcnMgdG8gCisgKiBoZXhhZGVjaW1hbCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXMuICBJdCBvdXRwdXRzIGEKKyAqIHByZWZpeCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCBvcHRpb25hbGx5IGNvbnZlcnRzIHRoZSBoZXgKKyAqIGRpZ2l0cyB0byB1cHBlcmNhc2UuCisgKgorICogPHA+VGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGlzIHNldCBieSBhIHBhdHRlcm4uICBUaGlzIHBhdHRlcm4KKyAqIGZvbGxvd3MgdGhlIHNhbWUgc3ludGF4IGFzIDxjb2RlPkhleFRvVW5pY29kZVRyYW5zbGl0ZXJhdG9yPC9jb2RlPiwKKyAqIGV4Y2VwdCBpdCBkb2VzIG5vdCBhbGxvdyBtdWx0aXBsZSBzcGVjaWZpY2F0aW9ucy4gIFRoZSBwYXR0ZXJuIHNldHMKKyAqIHRoZSBwcmVmaXggc3RyaW5nLCBzdWZmaXggc3RyaW5nLCBhbmQgbWluaW11bSBhbmQgbWF4aW11bSBkaWdpdAorICogY291bnQuICBUaGVyZSBhcmUgbm8gc2V0dGVycyBvciBnZXR0ZXJzIGZvciB0aGVzZSBhdHRyaWJ1dGVzOyB0aGV5CisgKiBhcmUgc2V0IG9ubHkgdGhyb3VnaCB0aGUgcGF0dGVybi4KKyAqCisgKiA8cD5UaGUgc2V0VXBwZXJjYXNlKCkgYW5kIGlzVXBwZXJjYXNlKCkgbWV0aG9kcyBjb250cm9sIHdoZXRoZXIgJ2EnCisgKiB0aHJvdWdoICdmJyBvciAnQScgdGhyb3VnaCAnRicgYXJlIG91dHB1dCBhcyBoZXggZGlnaXRzLiAgVGhpcyBpcworICogbm90IGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgcGF0dGVybjsgb25seSB0aHJvdWdoIHRoZSBtZXRob2RzLiAgVGhlCisgKiBkZWZhdWx0IGlzIHVwcGVyY2FzZS4KKyAqCisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAqLworcHVibGljIGNsYXNzIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yIGV4dGVuZHMgVHJhbnNsaXRlcmF0b3IgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICJcdTAwQTkgSUJNIENvcnBvcmF0aW9uIDE5OTkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKKworICAgIC8qKgorICAgICAqIFBhY2thZ2UgYWNjZXNzaWJsZSBJRCBmb3IgdGhpcyB0cmFuc2xpdGVyYXRvci4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIF9JRCA9ICJBbnktSGV4IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBIRVhfRElHSVRTID0geworICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywKKyAgICAgICAgJzgnLCAnOScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsCisgICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLAorICAgICAgICAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywKKyAgICB9OworCisgICAgLy8gQ2hhcmFjdGVyIGNvbnN0YW50cyBmb3Igc3BlY2lhbCBwYXR0ZXJuIGNoYXJzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBaRVJPICAgICAgPSAnMCc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBQT1VORCAgICAgPSAnIyc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBCQUNLU0xBU0ggPSAnXFwnOworCisgICAgLyoqCisgICAgICogVGhlIHBhdHRlcm4gc2V0IGJ5IGFwcGx5UGF0dGVybigpIGFuZCByZXR1cm5lZCBieSB0b1BhdHRlcm4oKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBwYXR0ZXJuOworCisgICAgLyoqCisgICAgICogVGhlIHN0cmluZyBwcmVjZWRpbmcgdGhlIGhleCBkaWdpdHMsIHBhcnNlZCBmcm9tIHRoZSBwYXR0ZXJuLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIHByZWZpeDsKKworICAgIC8qKgorICAgICAqIFRoZSBzdHJpbmcgZm9sbG93aW5nIHRoZSBoZXggZGlnaXRzLCBwYXJzZWQgZnJvbSB0aGUgcGF0dGVybi4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBzdWZmaXg7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgaGV4IGRpZ2l0cyB0byBvdXRwdXQsIGJldHdlZW4gMSBhbmQgNCwKKyAgICAgKiBpbmNsdXNpdmUuICBQYXJzZWQgZnJvbSB0aGUgcGF0dGVybi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtaW5EaWdpdHM7CisKKyAgICAvKioKKyAgICAgKiBJZiB0cnVlLCBvdXRwdXQgdXBwZXJjYXNlIGhleCBkaWdpdHM7IG90aGVyd2lzZSBvdXRwdXQKKyAgICAgKiBsb3dlcmNhc2UuICBTZXQgYnkgc2V0VXBwZXJjYXNlKCkgYW5kIHJldHVybmVkIGJ5IGlzVXBwZXJjYXNlKCkuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHVwcGVyY2FzZTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB0cmFuc2xpdGVyYXRvci4KKyAgICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiBmb3IgdGhpcyB0cmFuc2xpdGVyYXRvci4gIFNlZQorICAgICAqIGFwcGx5UGF0dGVybigpIGZvciBwYXR0ZXJuIHN5bnRheC4KKyAgICAgKiBAcGFyYW0gdXBwZXJjYXNlIGlmIHRydWUsIHRoZSBmb3VyIGhleCBkaWdpdHMgd2lsbCBiZQorICAgICAqIGNvbnZlcnRlZCB0byB1cHBlcmNhc2U7IG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgbG93ZXJjYXNlLgorICAgICAqIElnbm9yZWQgaWYgZGlyZWN0aW9uIGlzIEhFWF9VTklDT0RFLgorICAgICAqIEBwYXJhbSBmaWx0ZXIgdGhlIGZpbHRlciBmb3IgdGhpcyB0cmFuc2xpdGVyYXRvciwgb3IKKyAgICAgKiBudWxsIGlmIG5vbmUuCisgICAgICogQGRlcHJlY2F0ZWQgSUNVIDIuNCBUaGlzIGNsYXNzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMjAwMy0xMi0wMS4gVXNlIHRoZSBUcmFuc2xpdGVyYXRvciBmYWN0b3J5IG1ldGhvZHMuCisgICAgICovCisgICAgcHVibGljIFVuaWNvZGVUb0hleFRyYW5zbGl0ZXJhdG9yKFN0cmluZyBwYXR0ZXJuLCBib29sZWFuIHVwcGVyY2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZUZpbHRlciBmaWx0ZXIpIHsKKyAgICAgICAgc3VwZXIoX0lELCBmaWx0ZXIpOworICAgICAgICB0aGlzLnVwcGVyY2FzZSA9IHVwcGVyY2FzZTsKKyAgICAgICAgYXBwbHlQYXR0ZXJuKHBhdHRlcm4pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gdXBwZXJjYXNlIHRyYW5zbGl0ZXJhdG9yIHdpdGggbm8gZmlsdGVyLgorICAgICAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIGZvciB0aGlzIHRyYW5zbGl0ZXJhdG9yLiAgU2VlCisgICAgICogYXBwbHlQYXR0ZXJuKCkgZm9yIHBhdHRlcm4gc3ludGF4LgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZSByZW1vdmVkIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBVbmljb2RlVG9IZXhUcmFuc2xpdGVyYXRvcihTdHJpbmcgcGF0dGVybikgeworICAgICAgICB0aGlzKHBhdHRlcm4sIHRydWUsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB0cmFuc2xpdGVyYXRvciB3aXRoIHRoZSBkZWZhdWx0IHByZWZpeCAiJiMwOTI7dSIKKyAgICAgKiB0aGF0IG91dHB1dHMgZm91ciB1cHBlcmNhc2UgaGV4IGRpZ2l0cy4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgVW5pY29kZVRvSGV4VHJhbnNsaXRlcmF0b3IoKSB7CisgICAgICAgIHN1cGVyKF9JRCwgbnVsbCk7CisgICAgICAgIHBhdHRlcm4gPSAiXFxcXHUwMDAwIjsKKyAgICAgICAgcHJlZml4ID0gIlxcdSI7CisgICAgICAgIHN1ZmZpeCA9ICIiOworICAgICAgICBtaW5EaWdpdHMgPSA0OworICAgICAgICB1cHBlcmNhc2UgPSB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgcGF0dGVybiByZWNvZ25pemVkIGJ5IHRoaXMgdHJhbnNsaXRlcmF0b3IuICBUaGUgcGF0dGVybgorICAgICAqIG11c3QgY29udGFpbiB6ZXJvIG9yIG1vcmUgcHJlZml4IGNoYXJhY3RlcnMsIG9uZSBvciBtb3JlIGRpZ2l0CisgICAgICogY2hhcmFjdGVycywgYW5kIHplcm8gb3IgbW9yZSBzdWZmaXggY2hhcmFjdGVycy4gIFRoZSBkaWdpdAorICAgICAqIGNoYXJhY3RlcnMgaW5kaWNhdGVzIG9wdGlvbmFsIGRpZ2l0cyAoJyMnKSBmb2xsb3dlZCBieSByZXF1aXJlZAorICAgICAqIGRpZ2l0cyAoJzAnKS4gIFRoZSB0b3RhbCBudW1iZXIgb2YgZGlnaXRzIGNhbm5vdCBleGNlZWQgNCwgYW5kCisgICAgICogbXVzdCBiZSBhdCBsZWFzdCAxIHJlcXVpcmVkIGRpZ2l0LiAgVXNlIGEgYmFja3NsYXNoICgnXFwnKSB0bworICAgICAqIGVzY2FwZSBhbnkgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycy4gIEFuIGVtcHR5IHBhdHRlcm4gaXMgbm90CisgICAgICogYWxsb3dlZC4KKyAgICAgKgorICAgICAqIDxwPkV4YW1wbGU6ICJVKzAwMDAiIHNwZWNpZmllcyBhIHByZWZpeCBvZiAiVSsiLCBleGFjdGx5IGZvdXIKKyAgICAgKiBkaWdpdHMsIGFuZCBubyBzdWZmaXguICAiPCMjIzA+IiBoYXMgYSBwcmVmaXggb2YgIjwiLCBiZXR3ZWVuCisgICAgICogb25lIGFuZCBmb3VyIGRpZ2l0cywgYW5kIGEgc3VmZml4IG9mICI+Ii4KKyAgICAgKgorICAgICAqIDxwPjxwcmU+CisgICAgICogcGF0dGVybiA6PSBwcmVmaXgtY2hhciogZGlnaXQtc3BlYyBzdWZmaXgtY2hhcioKKyAgICAgKiBkaWdpdC1zcGVjIDo9ICcjJyogJzAnKworICAgICAqIHByZWZpeC1jaGFyIDo9IFtec3BlY2lhbC1jaGFyXSB8ICdcXCcgc3BlY2lhbC1jaGFyCisgICAgICogc3VmZml4LWNoYXIgOj0gW15zcGVjaWFsLWNoYXJdIHwgJ1xcJyBzcGVjaWFsLWNoYXIKKyAgICAgKiBzcGVjaWFsLWNoYXIgOj0gJzsnIHwgJzAnIHwgJyMnIHwgJ1xcJworICAgICAqIDwvcHJlPgorICAgICAqCisgICAgICogPHA+TGltaXRhdGlvbnM6IFRoZXJlIGlzIG5vIHdheSB0byBzZXQgdGhlIHVwcGVyY2FzZSBhdHRyaWJ1dGUKKyAgICAgKiBpbiB0aGUgcGF0dGVybi4gIChhcHBseVBhdHRlcm4oKSBkb2VzIG5vdCBhbHRlciB0aGUgdXBwZXJjYXNlCisgICAgICogYXR0cmlidXRlLikKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhcHBseVBhdHRlcm4oU3RyaW5nIHRoZVBhdHRlcm4pIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHByZWZpeEJ1ZiA9IG51bGw7CisgICAgICAgIFN0cmluZ0J1ZmZlciBzdWZmaXhCdWYgPSBudWxsOworICAgICAgICBpbnQgbWluRGlnaXRzID0gMDsKKyAgICAgICAgaW50IG1heERpZ2l0cyA9IDA7CisKKyAgICAgICAgLyogVGhlIG1vZGUgc3BlY2lmaWVzIHdoZXJlIHdlIGFyZSBpbiBlYWNoIHNwZWMuCisgICAgICAgICAqIG1vZGUgMCA9IGluIHByZWZpeAorICAgICAgICAgKiBtb2RlIDEgPSBpbiBvcHRpb25hbCBkaWdpdHMgKCMpCisgICAgICAgICAqIG1vZGUgMiA9IGluIHJlcXVpcmVkIGRpZ2l0cyAoMCkKKyAgICAgICAgICogbW9kZSAzID0gaW4gc3VmZml4CisgICAgICAgICAqLworICAgICAgICBpbnQgbW9kZSA9IDA7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRoZVBhdHRlcm4ubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgY2hhciBjID0gdGhlUGF0dGVybi5jaGFyQXQoaSk7CisgICAgICAgICAgICBib29sZWFuIGlzTGl0ZXJhbCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGMgPT0gQkFDS1NMQVNIKSB7CisgICAgICAgICAgICAgICAgaWYgKChpKzEpPHRoZVBhdHRlcm4ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNMaXRlcmFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYyA9IHRoZVBhdHRlcm4uY2hhckF0KCsraSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJhaWxpbmcgJ1xcJworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUcmFpbGluZyAnXFwnIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWlzTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgICAgIGNhc2UgUE9VTkQ6CisgICAgICAgICAgICAgICAgICAgIC8vIFNlZWluZyBhICcjJyBtb3ZlcyB1cyBmcm9tIG1vZGUgMCAocHJlZml4KSB0byBtb2RlIDEKKyAgICAgICAgICAgICAgICAgICAgLy8gKG9wdGlvbmFsIGRpZ2l0cykuCisgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlICE9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucXVvdGVkICcjJworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5xdW90ZWQgJyMnIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKyttYXhEaWdpdHM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgWkVSTzoKKyAgICAgICAgICAgICAgICAgICAgLy8gU2VlaW5nIGEgJzAnIG1vdmVzIHVzIHRvIG1vZGUgMiAocmVxdWlyZWQgZGlnaXRzKQorICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAyOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgIT0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5xdW90ZWQgJzAnCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnF1b3RlZCAnMCciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK21pbkRpZ2l0czsKKyAgICAgICAgICAgICAgICAgICAgKyttYXhEaWdpdHM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlzTGl0ZXJhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeEJ1ZiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJlZml4QnVmLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBBbnkgbGl0ZXJhbCBvdXRzaWRlIHRoZSBwcmVmaXggbW92ZXMgdXMgaW50byBtb2RlIDMKKyAgICAgICAgICAgICAgICAgICAgLy8gKHN1ZmZpeCkKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDM7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdWZmaXhCdWYgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4QnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN1ZmZpeEJ1Zi5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1pbkRpZ2l0cyA8IDEgfHwgbWF4RGlnaXRzID4gNCkgeworICAgICAgICAgICAgLy8gSW52YWxpZCBtaW4vbWF4IGRpZ2l0IGNvdW50CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIG1pbi9tYXggZGlnaXQgY291bnQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhdHRlcm4gPSB0aGVQYXR0ZXJuOworICAgICAgICBwcmVmaXggPSAocHJlZml4QnVmID09IG51bGwpID8gIiIgOiBwcmVmaXhCdWYudG9TdHJpbmcoKTsKKyAgICAgICAgc3VmZml4ID0gKHN1ZmZpeEJ1ZiA9PSBudWxsKSA/ICIiIDogc3VmZml4QnVmLnRvU3RyaW5nKCk7CisgICAgICAgIHRoaXMubWluRGlnaXRzID0gbWluRGlnaXRzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGlzIHRyYW5zbGl0ZXJhdG9yJ3MgcGF0dGVybi4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvUGF0dGVybigpIHsKKyAgICAgICAgcmV0dXJuIHBhdHRlcm47CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHRoYXQgcHJlY2VkZXMgdGhlIGZvdXIgaGV4IGRpZ2l0cy4KKyAgICAgKiBAcmV0dXJuIHByZWZpeCBzdHJpbmcKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpIHsKKyAgICAgICAgcmV0dXJuIHByZWZpeDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBzdHJpbmcgdGhhdCBwcmVjZWRlcyB0aGUgZm91ciBoZXggZGlnaXRzLgorICAgICAqCisgICAgICogPHA+Q2FsbGVycyBtdXN0IHRha2UgY2FyZSBpZiBhIHRyYW5zbGl0ZXJhdG9yIGlzIGluIHVzZSBieQorICAgICAqIG11bHRpcGxlIHRocmVhZHMuICBUaGUgcHJlZml4IHNob3VsZCBub3QgYmUgY2hhbmdlZCBieSBvbmUKKyAgICAgKiB0aHJlYWQgd2hpbGUgYW5vdGhlciB0aHJlYWQgbWF5IGJlIHRyYW5zbGl0ZXJhdGluZy4KKyAgICAgKiBAcGFyYW0gcHJlZml4IHByZWZpeCBzdHJpbmcKKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQcmVmaXgoU3RyaW5nIHByZWZpeCkgeworICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB0cmFuc2xpdGVyYXRvciBvdXRwdXRzIHVwcGVyY2FzZSBoZXggZGlnaXRzLgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZSByZW1vdmVkIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzVXBwZXJjYXNlKCkgeworICAgICAgICByZXR1cm4gdXBwZXJjYXNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgaWYgdGhpcyB0cmFuc2xpdGVyYXRvciBvdXRwdXRzIHVwcGVyY2FzZSBoZXggZGlnaXRzLgorICAgICAqCisgICAgICogPHA+Q2FsbGVycyBtdXN0IHRha2UgY2FyZSBpZiBhIHRyYW5zbGl0ZXJhdG9yIGlzIGluIHVzZSBieQorICAgICAqIG11bHRpcGxlIHRocmVhZHMuICBUaGUgdXBwZXJjYXNlIG1vZGUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGJ5CisgICAgICogb25lIHRocmVhZCB3aGlsZSBhbm90aGVyIHRocmVhZCBtYXkgYmUgdHJhbnNsaXRlcmF0aW5nLgorICAgICAqIEBwYXJhbSBvdXRwdXRVcHBlcmNhc2UgaWYgdHJ1ZSwgdGhlbiB0aGlzIHRyYW5zbGl0ZXJhdG9yCisgICAgICogb3V0cHV0cyB1cHBlcmNhc2UgaGV4IGRpZ2l0cy4KKyAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgMi40IFRoaXMgY2xhc3MgdG8gYmUgcmVtb3ZlZCBhZnRlciAyMDAzLTEyLTAxLiBVc2UgdGhlIFRyYW5zbGl0ZXJhdG9yIGZhY3RvcnkgbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRVcHBlcmNhc2UoYm9vbGVhbiBvdXRwdXRVcHBlcmNhc2UpIHsKKyAgICAgICAgdXBwZXJjYXNlID0gb3V0cHV0VXBwZXJjYXNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEltcGxlbWVudHMge0BsaW5rIFRyYW5zbGl0ZXJhdG9yI2hhbmRsZVRyYW5zbGl0ZXJhdGV9LgorICAgICAqIEBkZXByZWNhdGVkIElDVSAyLjQgVGhpcyBjbGFzcyB0byBiZSByZW1vdmVkIGFmdGVyIDIwMDMtMTItMDEuIFVzZSB0aGUgVHJhbnNsaXRlcmF0b3IgZmFjdG9yeSBtZXRob2RzLgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVRyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIG9mZnNldHMsIGJvb2xlYW4gaW5jcmVtZW50YWwpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBlcmZvcm1zIHRyYW5zbGl0ZXJhdGlvbiBjaGFuZ2luZyBhbGwgY2hhcmFjdGVycyB0bworICAgICAgICAgKiBVbmljb2RlIGhleGFkZWNpbWFsIGVzY2FwZXMuICBGb3IgZXhhbXBsZSwgJ0AnIC0+ICJVKzAwNDAiLAorICAgICAgICAgKiBhc3N1bWluZyB0aGUgcHJlZml4IGlzICJVKyIuIAorICAgICAgICAgKi8KKyAgICAgICAgaW50IGN1cnNvciA9IG9mZnNldHMuc3RhcnQ7CisgICAgICAgIGludCBsaW1pdCA9IG9mZnNldHMubGltaXQ7CisKKyAgICAgICAgU3RyaW5nQnVmZmVyIGhleCA9IG5ldyBTdHJpbmdCdWZmZXIocHJlZml4KTsKKyAgICAgICAgaW50IHByZWZpeExlbiA9IHByZWZpeC5sZW5ndGgoKTsKKworICAgICAgICB3aGlsZSAoY3Vyc29yIDwgbGltaXQpIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IHRleHQuY2hhckF0KGN1cnNvcik7CisKKyAgICAgICAgICAgIGhleC5zZXRMZW5ndGgocHJlZml4TGVuKTsKKyAgICAgICAgICAgIGJvb2xlYW4gc2hvd1Jlc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MzsgaT49MDsgLS1pKSB7CisgICAgICAgICAgICAgICAgaW50IGQgPSAoYyA+PiAoaSo0KSkgJiAweEY7CisgICAgICAgICAgICAgICAgaWYgKHNob3dSZXN0IHx8IChkICE9IDApIHx8IG1pbkRpZ2l0cyA+IGkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGV4LmFwcGVuZChIRVhfRElHSVRTW3VwcGVyY2FzZSA/IChkfDE2KSA6IGRdKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvd1Jlc3QgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhleC5hcHBlbmQoc3VmZml4KTsKKworICAgICAgICAgICAgdGV4dC5yZXBsYWNlKGN1cnNvciwgY3Vyc29yKzEsIGhleC50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGludCBsZW4gPSBoZXgubGVuZ3RoKCk7CisgICAgICAgICAgICBjdXJzb3IgKz0gbGVuOyAvLyBBZHZhbmNlIGN1cnNvciBieSAxIGFuZCBhZGp1c3QgZm9yIG5ldyB0ZXh0CisgICAgICAgICAgICAtLWxlbjsKKyAgICAgICAgICAgIGxpbWl0ICs9IGxlbjsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldHMuY29udGV4dExpbWl0ICs9IGxpbWl0IC0gb2Zmc2V0cy5saW1pdDsKKyAgICAgICAgb2Zmc2V0cy5saW1pdCA9IGxpbWl0OworICAgICAgICBvZmZzZXRzLnN0YXJ0ID0gY3Vyc29yOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VwcGVyY2FzZVRyYW5zbGl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9pY3UvdGV4dC9VcHBlcmNhc2VUcmFuc2xpdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkZDQ4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdGV4dC9VcHBlcmNhc2VUcmFuc2xpdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS90ZXh0L1VwcGVyY2FzZVRyYW5zbGl0ZXJhdG9yLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTAvMzEgMjI6MzY6NDkgJCAKKyAqICRSZXZpc2lvbjogMS4xMiAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudGV4dDsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlVDaGFyYWN0ZXJQcm9wZXJ0eTsKKworLyoqCisgKiBBIHRyYW5zbGl0ZXJhdG9yIHRoYXQgcGVyZm9ybXMgbG9jYWxlLXNlbnNpdGl2ZSB0b1VwcGVyKCkKKyAqIGNhc2UgbWFwcGluZy4KKyAqLworY2xhc3MgVXBwZXJjYXNlVHJhbnNsaXRlcmF0b3IgZXh0ZW5kcyBUcmFuc2xpdGVyYXRvciB7CisKKyAgICAvKioKKyAgICAgKiBQYWNrYWdlIGFjY2Vzc2libGUgSUQuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBfSUQgPSAiQW55LVVwcGVyIjsKKyAgICAvLyBUT0RPOiBBZGQgdmFyaWFudHMgZm9yIHRyLCBheiwgbHQsIGRlZmF1bHQgPSBkZWZhdWx0IGxvY2FsZQorCisgICAgLyoqCisgICAgICogU3lzdGVtIHJlZ2lzdHJhdGlvbiBob29rLgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyKCkgeworICAgICAgICBUcmFuc2xpdGVyYXRvci5yZWdpc3RlckZhY3RvcnkoX0lELCBuZXcgVHJhbnNsaXRlcmF0b3IuRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHB1YmxpYyBUcmFuc2xpdGVyYXRvciBnZXRJbnN0YW5jZShTdHJpbmcgSUQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVwcGVyY2FzZVRyYW5zbGl0ZXJhdG9yKExvY2FsZS5VUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHByaXZhdGUgTG9jYWxlIGxvYzsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB0cmFuc2xpdGVyYXRvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgVXBwZXJjYXNlVHJhbnNsaXRlcmF0b3IoTG9jYWxlIGxvYykgeworICAgICAgICBzdXBlcihfSUQsIG51bGwpOworICAgICAgICB0aGlzLmxvYyA9IGxvYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBUcmFuc2xpdGVyYXRvciNoYW5kbGVUcmFuc2xpdGVyYXRlfS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVUcmFuc2xpdGVyYXRlKFJlcGxhY2VhYmxlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBvZmZzZXRzLCBib29sZWFuIGlzSW5jcmVtZW50YWwpIHsKKyAgICAgICAgaW50IHRleHRQb3MgPSBvZmZzZXRzLnN0YXJ0OworICAgICAgICBpZiAodGV4dFBvcyA+PSBvZmZzZXRzLmxpbWl0KSByZXR1cm47CisKKyAgICAgICAgLy8gZ2V0IHN0cmluZyBmb3IgY29udGV4dAorICAgICAgICAvLyBUT0RPOiBhZGQgY29udmVuaWVuY2UgbWV0aG9kIHRvIGRvIHRoaXMsIHNpbmNlIHdlIGRvIGl0IGFsbCBvdmVyCisgICAgICAgIAorICAgICAgICBVQ2hhcmFjdGVySXRlcmF0b3Igb3JpZ2luYWwgPSBVQ2hhcmFjdGVySXRlcmF0b3IuZ2V0SW5zdGFuY2UodGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBXYWxrIHRocm91Z2ggb3JpZ2luYWwgc3RyaW5nCisgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgY2FzZSBjaGFuZ2UsIG1vZGlmeSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uIGluIHJlcGxhY2VhYmxlCisgICAgICAgIAorICAgICAgICBpbnQgbGltaXQgPSBvZmZzZXRzLmxpbWl0OworICAgICAgICBpbnQgY3A7CisgICAgICAgIGludCBvbGRMZW47CisgICAgICAgIAorICAgICAgICB3aGlsZSAodGV4dFBvcyA8IGxpbWl0KSB7CisgICAgICAgIAlvcmlnaW5hbC5zZXRJbmRleCh0ZXh0UG9zKTsKKyAgICAgICAgICAgIGNwID0gb3JpZ2luYWwuY3VycmVudENvZGVQb2ludCgpOworICAgICAgICAgICAgb2xkTGVuID0gVVRGMTYuZ2V0Q2hhckNvdW50KGNwKTsKKyAgICAgICAgICAgIGludCBuZXdMZW4gPSBtX2NoYXJwcHR5Xy50b1VwcGVyT3JUaXRsZUNhc2UobG9jLCBjcCwgb3JpZ2luYWwsIHRydWUsIGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobmV3TGVuID49IDApIHsKKyAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UodGV4dFBvcywgdGV4dFBvcyArIG9sZExlbiwgYnVmZmVyLCAwLCBuZXdMZW4pOworICAgICAgICAgICAgICAgIGlmIChuZXdMZW4gIT0gb2xkTGVuKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHRQb3MgKz0gbmV3TGVuOworICAgICAgICAgICAgICAgICAgICBvZmZzZXRzLmxpbWl0ICs9IG5ld0xlbiAtIG9sZExlbjsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5jb250ZXh0TGltaXQgKz0gbmV3TGVuIC0gb2xkTGVuOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0UG9zICs9IG9sZExlbjsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXRzLnN0YXJ0ID0gb2Zmc2V0cy5saW1pdDsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBjaGFyIGJ1ZmZlcltdID0gbmV3IGNoYXJbVUNoYXJhY3RlclByb3BlcnR5Lk1BWF9DQVNFX01BUF9TSVpFXTsKKwkvKioKKwkgKiBDaGFyYWN0ZXIgcHJvcGVydHkgZGF0YWJhc2UKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVQ2hhcmFjdGVyUHJvcGVydHkgbV9jaGFycHB0eV8gPSAKKwkJCQkJCQkJCQlVQ2hhcmFjdGVyUHJvcGVydHkuZ2V0SW5zdGFuY2UoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS90ZXh0L3BhY2thZ2UuaHRtbCBiL3NyYy9jb20vaWJtL2ljdS90ZXh0L3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjYyZGEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3RleHQvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdGV4dC9wYWNrYWdlLmh0bWwsdiAkCisgICRSZXZpc2lvbjogMS4xICQKKyAgJERhdGU6IDIwMDAvMDMvMTUgMjE6MzU6NTEgJAorLS0+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSI+CitDbGFzc2VzIGZvciBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yLCBEaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yCitOb3JtYWxpemVyLCBSdWxlQmFzZWROdW1iZXJGb3JtYXQsIEJpZ051bWJlckZvcm1hdCwKK1VuaWNvZGUgY29tcHJlc3Npb24sIEludGVybmF0aW9uYWwgU2VhcmNoaW5nLCBhbmQgVHJhbnNsaXRlcmF0b3IuCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQnVkZGhpc3RDYWxlbmRhci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQnVkZGhpc3RDYWxlbmRhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3MDgzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9CdWRkaGlzdENhbGVuZGFyLmphdmEKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL0J1ZGRoaXN0Q2FsZW5kYXIuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNSAwMToyNDo1NCAkIAorICogJFJldmlzaW9uOiAxLjExICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogPGNvZGU+QnVkZGhpc3RDYWxlbmRhcjwvY29kZT4gaXMgYSBzdWJjbGFzcyBvZiA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4KKyAqIHRoYXQgbnVtYmVycyB5ZWFycyBzaW5jZSB0aGUgYmlydGggb2YgdGhlIEJ1ZGRoYS4gIFRoaXMgaXMgdGhlIGNpdmlsIGNhbGVuZGFyCisgKiBpbiBzb21lIHByZWRvbWluYW50bHkgQnVkZGhpc3QgY291bnRyaWVzIHN1Y2ggYXMgVGhhaWxhbmQsIGFuZCBpdCBpcyB1c2VkIGZvcgorICogcmVsaWdpb3VzIHB1cnBvc2VzIGVsc2V3aGVyZS4KKyAqIDxwPgorICogVGhlIEJ1ZGRoaXN0IGNhbGVuZGFyIGlzIGlkZW50aWNhbCB0byB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGluIGFsbCByZXNwZWN0cworICogZXhjZXB0IGZvciB0aGUgeWVhciBhbmQgZXJhLiAgWWVhcnMgYXJlIG51bWJlcmVkIHNpbmNlIHRoZSBiaXJ0aCBvZiB0aGUKKyAqIEJ1ZGRoYSBpbiA1NDMgQkMgKEdyZWdvcmlhbiksIHNvIHRoYXQgMSBBRCAoR3JlZ29yaWFuKSBpcyBlcXVpdmFsZW50IHRvIDU0NAorICogQkUgKEJ1ZGRoaXN0IEVyYSkgYW5kIDE5OTggQUQgaXMgMjU0MSBCRS4KKyAqIDxwPgorICogVGhlIEJ1ZGRoaXN0IENhbGVuZGFyIGhhcyBvbmx5IG9uZSBhbGxvd2FibGUgZXJhOiA8Y29kZT5CRTwvY29kZT4uICBJZiB0aGUKKyAqIGNhbGVuZGFyIGlzIG5vdCBpbiBsZW5pZW50IG1vZGUgKHNlZSA8Y29kZT5zZXRMZW5pZW50PC9jb2RlPiksIGRhdGVzIGJlZm9yZQorICogMS8xLzEgQkUgYXJlIHJlamVjdGVkIHdpdGggYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPi4KKyAqCisgKiBAc2VlIGNvbS5pYm0uaWN1LnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIKKyAqCisgKiBAYXV0aG9yIExhdXJhIFdlcm5lcgorICogQGF1dGhvciBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBjbGFzcyBCdWRkaGlzdENhbGVuZGFyIGV4dGVuZHMgR3JlZ29yaWFuQ2FsZW5kYXIgeworICAgIAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDb25zdHJ1Y3RvcnMuLi4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciB0aGUgQnVkZGhpc3QgRXJhLiAgVGhpcyBpcyB0aGUgb25seSBhbGxvd2FibGUgPGNvZGU+RVJBPC9jb2RlPgorICAgICAqIHZhbHVlIGZvciB0aGUgQnVkZGhpc3QgY2FsZW5kYXIuCisgICAgICoKKyAgICAgKiBAc2VlIGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXIjRVJBCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkUgPSAwOworICAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSA8Y29kZT5CdWRkaGlzdENhbGVuZGFyPC9jb2RlPiB1c2luZyB0aGUgY3VycmVudCB0aW1lCisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBCdWRkaGlzdENhbGVuZGFyKCkgeworICAgICAgICBzdXBlcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSA8Y29kZT5CdWRkaGlzdENhbGVuZGFyPC9jb2RlPiBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lCisgICAgICogaW4gdGhlIGdpdmVuIHRpbWUgem9uZSB3aXRoIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB6b25lIHRoZSBnaXZlbiB0aW1lIHpvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEJ1ZGRoaXN0Q2FsZW5kYXIoVGltZVpvbmUgem9uZSkgeworICAgICAgICBzdXBlcih6b25lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QnVkZGhpc3RDYWxlbmRhcjwvY29kZT4gYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZQorICAgICAqIGluIHRoZSBkZWZhdWx0IHRpbWUgem9uZSB3aXRoIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYUxvY2FsZSB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBCdWRkaGlzdENhbGVuZGFyKExvY2FsZSBhTG9jYWxlKSB7CisgICAgICAgIHN1cGVyKGFMb2NhbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSA8Y29kZT5CdWRkaGlzdENhbGVuZGFyPC9jb2RlPiBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lCisgICAgICogaW4gdGhlIGdpdmVuIHRpbWUgem9uZSB3aXRoIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gem9uZSB0aGUgZ2l2ZW4gdGltZSB6b25lLgorICAgICAqCisgICAgICogQHBhcmFtIGFMb2NhbGUgdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQnVkZGhpc3RDYWxlbmRhcihUaW1lWm9uZSB6b25lLCBMb2NhbGUgYUxvY2FsZSkgeworICAgICAgICBzdXBlcih6b25lLCBhTG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+QnVkZGhpc3RDYWxlbmRhcjwvY29kZT4gd2l0aCB0aGUgZ2l2ZW4gZGF0ZSBzZXQKKyAgICAgKiBpbiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgd2l0aCB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0ZSAgICAgIFRoZSBkYXRlIHRvIHdoaWNoIHRoZSBuZXcgY2FsZW5kYXIgaXMgc2V0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBCdWRkaGlzdENhbGVuZGFyKERhdGUgZGF0ZSkgeworICAgICAgICB0aGlzKCk7CisgICAgICAgIHNldFRpbWUoZGF0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIDxjb2RlPkJ1ZGRoaXN0Q2FsZW5kYXI8L2NvZGU+IHdpdGggdGhlIGdpdmVuIGRhdGUgc2V0CisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQHBhcmFtIHllYXIgICAgICBUaGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIGNhbGVuZGFyJ3Mge0BsaW5rICNZRUFSIFlFQVJ9IHRpbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI01PTlRIIE1PTlRIfSB0aW1lIGZpZWxkLgorICAgICAqICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIDAtYmFzZWQuIGUuZy4sIDAgZm9yIEphbnVhcnkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0ZSAgICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI0RBVEUgREFURX0gdGltZSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQnVkZGhpc3RDYWxlbmRhcihpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF0ZSkgeworICAgICAgICBzdXBlcih5ZWFyLCBtb250aCwgZGF0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIEJ1ZGRoaXN0Q2FsZW5kYXIgd2l0aCB0aGUgZ2l2ZW4gZGF0ZQorICAgICAqIGFuZCB0aW1lIHNldCBmb3IgdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQHBhcmFtIHllYXIgICAgICBUaGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIGNhbGVuZGFyJ3Mge0BsaW5rICNZRUFSIFlFQVJ9IHRpbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI01PTlRIIE1PTlRIfSB0aW1lIGZpZWxkLgorICAgICAqICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIDAtYmFzZWQuIGUuZy4sIDAgZm9yIEphbnVhcnkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0ZSAgICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI0RBVEUgREFURX0gdGltZSBmaWVsZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBob3VyICAgICAgVGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBjYWxlbmRhcidzIHtAbGluayAjSE9VUl9PRl9EQVkgSE9VUl9PRl9EQVl9IHRpbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWludXRlICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI01JTlVURSBNSU5VVEV9IHRpbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc2Vjb25kICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI1NFQ09ORCBTRUNPTkR9IHRpbWUgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEJ1ZGRoaXN0Q2FsZW5kYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRhdGUsIGludCBob3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWludXRlLCBpbnQgc2Vjb25kKQorICAgIHsKKyAgICAgICAgc3VwZXIoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsKKyAgICB9CisKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFRoZSBvbmx5IHByYWN0aWNhbCBkaWZmZXJlbmNlIGZyb20gYSBHcmVnb3JpYW4gY2FsZW5kYXIgaXMgdGhhdCB5ZWFycworICAgIC8vIGFyZSBudW1iZXJlZCBzaW5jZSB0aGUgYmlydGggb2YgdGhlIEJ1ZGRoYS4gIEEgY291cGxlIG9mIG92ZXJyaWRlcyB3aWxsCisgICAgLy8gdGFrZSBjYXJlIG9mIHRoYXQuLi4uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLy8gU3RhcnRzIGluIC01NDMgQUQsIGllIDU0NCBCQworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVURESElTVF9FUkFfU1RBUlQgPSAtNTQzOworCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovICAgIAorICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0RXh0ZW5kZWRZZWFyKCkgeworICAgICAgICBpbnQgeWVhcjsKKyAgICAgICAgaWYgKG5ld2VyRmllbGQoRVhURU5ERURfWUVBUiwgWUVBUikgPT0gRVhURU5ERURfWUVBUikgeworICAgICAgICAgICAgeWVhciA9IGludGVybmFsR2V0KEVYVEVOREVEX1lFQVIsIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBlcmEsIGFzIHRoZXJlIGlzIG9ubHkgb25lCisgICAgICAgICAgICB5ZWFyID0gaW50ZXJuYWxHZXQoWUVBUiwgMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHllYXI7CisgICAgfQorCisgICAgLy8gUmV0dXJuIEpEIG9mIHN0YXJ0IG9mIGdpdmVuIG1vbnRoL3llYXIKKyAgICAvKioKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8gICAgCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVDb21wdXRlTW9udGhTdGFydChpbnQgZXllYXIsIGludCBtb250aCwgYm9vbGVhbiB1c2VNb250aCkgeworICAgICAgICByZXR1cm4gc3VwZXIuaGFuZGxlQ29tcHV0ZU1vbnRoU3RhcnQoZXllYXIgKyBCVURESElTVF9FUkFfU1RBUlQsIG1vbnRoLCB1c2VNb250aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovICAgIAorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUNvbXB1dGVGaWVsZHMoaW50IGp1bGlhbkRheSkgeworICAgICAgICBzdXBlci5oYW5kbGVDb21wdXRlRmllbGRzKGp1bGlhbkRheSk7CisgICAgICAgIGludCB5ID0gaW50ZXJuYWxHZXQoRVhURU5ERURfWUVBUikgLSBCVURESElTVF9FUkFfU1RBUlQ7CisgICAgICAgIGludGVybmFsU2V0KEVYVEVOREVEX1lFQVIsIHkpOworICAgICAgICBpbnRlcm5hbFNldChFUkEsIDApOworICAgICAgICBpbnRlcm5hbFNldChZRUFSLCB5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSBHcmVnb3JpYW5DYWxlbmRhci4gIFRoZXJlIGlzIG9ubHkgb25lIEJ1ZGRoaXN0IEVSQS4gIFdlCisgICAgICogc2hvdWxkIHJlYWxseSBoYW5kbGUgWUVBUiwgWUVBUl9XT1ksIGFuZCBFWFRFTkRFRF9ZRUFSIGhlcmUgdG9vIHRvCisgICAgICogaW1wbGVtZW50IHRoZSAxLi41MDAwMDAwIHJhbmdlLCBidXQgaXQncyBub3QgY3JpdGljYWwuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVHZXRMaW1pdChpbnQgZmllbGQsIGludCBsaW1pdFR5cGUpIHsKKyAgICAgICAgaWYgKGZpZWxkID09IEVSQSkgeworICAgICAgICAgICAgcmV0dXJuIEJFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdXBlci5oYW5kbGVHZXRMaW1pdChmaWVsZCwgbGltaXRUeXBlKTsKKyAgICB9CisKKyAgICAvKgorICAgIHByaXZhdGUgc3RhdGljIENhbGVuZGFyRmFjdG9yeSBmYWN0b3J5OworICAgIHB1YmxpYyBzdGF0aWMgQ2FsZW5kYXJGYWN0b3J5IGZhY3RvcnkoKSB7CisgICAgICAgIGlmIChmYWN0b3J5ID09IG51bGwpIHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSBuZXcgQ2FsZW5kYXJGYWN0b3J5KCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyBDYWxlbmRhciBjcmVhdGUoVGltZVpvbmUgdHosIExvY2FsZSBsb2MpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWRkaGlzdENhbGVuZGFyKHR6LCBsb2MpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZmFjdG9yeU5hbWUoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQnVkZGhpc3QiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhY3Rvcnk7CisgICAgfQorICAgICovCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9DYWxlbmRhci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ2FsZW5kYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2RhYzAyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ2FsZW5kYXIuamF2YQpAQCAtMCwwICsxLDQ5MTAgQEAKKy8qCisqICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyovCisKKworcGFja2FnZSBjb20uaWJtLmljdS51dGlsOworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVEYXRhOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVVNlcnZpY2UuS2V5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZS5GYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZTsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLklDVUxvY2FsZVNlcnZpY2UuSUNVUmVzb3VyY2VCdW5kbGVGYWN0b3J5OworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZS5Mb2NhbGVLZXk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVTZXJ2aWNlLkxvY2FsZUtleUZhY3Rvcnk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5Mb2NhbGVVdGlsaXR5OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXRTeW1ib2xzOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY29udmVydGluZyBiZXR3ZWVuCisgKiBhIDxjb2RlPkRhdGU8L2NvZGU+IG9iamVjdCBhbmQgYSBzZXQgb2YgaW50ZWdlciBmaWVsZHMgc3VjaCBhcworICogPGNvZGU+WUVBUjwvY29kZT4sIDxjb2RlPk1PTlRIPC9jb2RlPiwgPGNvZGU+REFZPC9jb2RlPiwgPGNvZGU+SE9VUjwvY29kZT4sCisgKiBhbmQgc28gb24uIChBIDxjb2RlPkRhdGU8L2NvZGU+IG9iamVjdCByZXByZXNlbnRzIGEgc3BlY2lmaWMgaW5zdGFudCBpbgorICogdGltZSB3aXRoIG1pbGxpc2Vjb25kIHByZWNpc2lvbi4gU2VlCisgKiB7QGxpbmsgRGF0ZX0KKyAqIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgPGNvZGU+RGF0ZTwvY29kZT4gY2xhc3MuKQorICoKKyAqIDxwPjxiPk5vdGU6PC9iPiAgVGhpcyBjbGFzcyBpcyBzaW1pbGFyLCBidXQgbm90IGlkZW50aWNhbCwgdG8gdGhlIGNsYXNzCisgKiA8Y29kZT5qYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+LiAgQ2hhbmdlcyBhcmUgZGV0YWlsZWQgYmVsb3cuCisgKgorICogPHA+CisgKiBTdWJjbGFzc2VzIG9mIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiBpbnRlcnByZXQgYSA8Y29kZT5EYXRlPC9jb2RlPgorICogYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiBhIHNwZWNpZmljIGNhbGVuZGFyIHN5c3RlbS4gIElDVTRKIGNvbnRhaW5zCisgKiBzZXZlcmFsIHN1YmNsYXNzZXMgaW1wbGVtZW50aW5nIGRpZmZlcmVudCBpbnRlcm5hdGlvbmFsIGNhbGVuZGFyIHN5c3RlbXMuCisgKgorICogPHA+CisgKiBMaWtlIG90aGVyIGxvY2FsZS1zZW5zaXRpdmUgY2xhc3NlcywgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IHByb3ZpZGVzIGEKKyAqIGNsYXNzIG1ldGhvZCwgPGNvZGU+Z2V0SW5zdGFuY2U8L2NvZGU+LCBmb3IgZ2V0dGluZyBhIGdlbmVyYWxseSB1c2VmdWwKKyAqIG9iamVjdCBvZiB0aGlzIHR5cGUuIDxjb2RlPkNhbGVuZGFyPC9jb2RlPidzIDxjb2RlPmdldEluc3RhbmNlPC9jb2RlPiBtZXRob2QKKyAqIHJldHVybnMgYSA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4gb2JqZWN0IHdob3NlCisgKiB0aW1lIGZpZWxkcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lOgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogQ2FsZW5kYXIgcmlnaHROb3cgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICogPC9wcmU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKgorICogPHA+QSA8Y29kZT5DYWxlbmRhcjwvY29kZT4gb2JqZWN0IGNhbiBwcm9kdWNlIGFsbCB0aGUgdGltZSBmaWVsZCB2YWx1ZXMKKyAqIG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlIGRhdGUtdGltZSBmb3JtYXR0aW5nIGZvciBhIHBhcnRpY3VsYXIgbGFuZ3VhZ2UgYW5kCisgKiBjYWxlbmRhciBzdHlsZSAoZm9yIGV4YW1wbGUsIEphcGFuZXNlLUdyZWdvcmlhbiwgSmFwYW5lc2UtVHJhZGl0aW9uYWwpLgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGRlZmluZXMgdGhlIHJhbmdlIG9mIHZhbHVlcyByZXR1cm5lZCBieSBjZXJ0YWluIGZpZWxkcywKKyAqIGFzIHdlbGwgYXMgdGhlaXIgbWVhbmluZy4gIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbW9udGggb2YgdGhlIHllYXIgaGFzIHZhbHVlCisgKiA8Y29kZT5NT05USDwvY29kZT4gPT0gPGNvZGU+SkFOVUFSWTwvY29kZT4gZm9yIGFsbCBjYWxlbmRhcnMuICBPdGhlciB2YWx1ZXMKKyAqIGFyZSBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBzdWJjbGFzcywgc3VjaCBhcyA8Y29kZT5FUkE8L2NvZGU+IGFuZAorICogPGNvZGU+WUVBUjwvY29kZT4uICBTZWUgaW5kaXZpZHVhbCBmaWVsZCBkb2N1bWVudGF0aW9uIGFuZCBzdWJjbGFzcworICogZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKyAqCisgKiA8cD5XaGVuIGEgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGlzIDxlbT5sZW5pZW50PC9lbT4sIGl0IGFjY2VwdHMgYSB3aWRlciByYW5nZQorICogb2YgZmllbGQgdmFsdWVzIHRoYW4gaXQgcHJvZHVjZXMuICBGb3IgZXhhbXBsZSwgYSBsZW5pZW50CisgKiA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4gaW50ZXJwcmV0cyA8Y29kZT5NT05USDwvY29kZT4gPT0KKyAqIDxjb2RlPkpBTlVBUlk8L2NvZGU+LCA8Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+ID09IDMyIGFzIEZlYnJ1YXJ5IDEuICBBCisgKiBub24tbGVuaWVudCA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIGdpdmVuCisgKiBvdXQtb2YtcmFuZ2UgZmllbGQgc2V0dGluZ3MuICBXaGVuIGNhbGVuZGFycyByZWNvbXB1dGUgZmllbGQgdmFsdWVzIGZvcgorICogcmV0dXJuIGJ5IDxjb2RlPmdldCgpPC9jb2RlPiwgdGhleSBub3JtYWxpemUgdGhlbS4gIEZvciBleGFtcGxlLCBhCisgKiA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4gYWx3YXlzIHByb2R1Y2VzIDxjb2RlPkRBWV9PRl9NT05USDwvY29kZT4KKyAqIHZhbHVlcyBiZXR3ZWVuIDEgYW5kIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoLgorICoKKyAqIDxwPjxjb2RlPkNhbGVuZGFyPC9jb2RlPiBkZWZpbmVzIGEgbG9jYWxlLXNwZWNpZmljIHNldmVuIGRheSB3ZWVrIHVzaW5nIHR3bworICogcGFyYW1ldGVyczogdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayBhbmQgdGhlIG1pbmltYWwgZGF5cyBpbiBmaXJzdCB3ZWVrCisgKiAoZnJvbSAxIHRvIDcpLiAgVGhlc2UgbnVtYmVycyBhcmUgdGFrZW4gZnJvbSB0aGUgbG9jYWxlIHJlc291cmNlIGRhdGEgd2hlbiBhCisgKiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gaXMgY29uc3RydWN0ZWQuICBUaGV5IG1heSBhbHNvIGJlIHNwZWNpZmllZCBleHBsaWNpdGx5CisgKiB0aHJvdWdoIHRoZSBBUEkuCisgKgorICogPHA+V2hlbiBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIDxjb2RlPldFRUtfT0ZfTU9OVEg8L2NvZGU+IG9yCisgKiA8Y29kZT5XRUVLX09GX1lFQVI8L2NvZGU+IGZpZWxkcywgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IG11c3QgZGV0ZXJtaW5lIHRoZQorICogZmlyc3Qgd2VlayBvZiB0aGUgbW9udGggb3IgeWVhciBhcyBhIHJlZmVyZW5jZSBwb2ludC4gIFRoZSBmaXJzdCB3ZWVrIG9mIGEKKyAqIG1vbnRoIG9yIHllYXIgaXMgZGVmaW5lZCBhcyB0aGUgZWFybGllc3Qgc2V2ZW4gZGF5IHBlcmlvZCBiZWdpbm5pbmcgb24KKyAqIDxjb2RlPmdldEZpcnN0RGF5T2ZXZWVrKCk8L2NvZGU+IGFuZCBjb250YWluaW5nIGF0IGxlYXN0CisgKiA8Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCk8L2NvZGU+IGRheXMgb2YgdGhhdCBtb250aCBvciB5ZWFyLiAgV2Vla3MKKyAqIG51bWJlcmVkIC4uLiwgLTEsIDAgcHJlY2VkZSB0aGUgZmlyc3Qgd2Vlazsgd2Vla3MgbnVtYmVyZWQgMiwgMywuLi4gZm9sbG93CisgKiBpdC4gIE5vdGUgdGhhdCB0aGUgbm9ybWFsaXplZCBudW1iZXJpbmcgcmV0dXJuZWQgYnkgPGNvZGU+Z2V0KCk8L2NvZGU+IG1heSBiZQorICogZGlmZmVyZW50LiAgRm9yIGV4YW1wbGUsIGEgc3BlY2lmaWMgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IHN1YmNsYXNzIG1heQorICogZGVzaWduYXRlIHRoZSB3ZWVrIGJlZm9yZSB3ZWVrIDEgb2YgYSB5ZWFyIGFzIHdlZWsgPGVtPm48L2VtPiBvZiB0aGUgcHJldmlvdXMKKyAqIHllYXIuCisgKgorICogPHA+IFdoZW4gY29tcHV0aW5nIGEgPGNvZGU+RGF0ZTwvY29kZT4gZnJvbSB0aW1lIGZpZWxkcywgdHdvIHNwZWNpYWwKKyAqIGNpcmN1bXN0YW5jZXMgbWF5IGFyaXNlOiB0aGVyZSBtYXkgYmUgaW5zdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIGNvbXB1dGUgdGhlCisgKiA8Y29kZT5EYXRlPC9jb2RlPiAoc3VjaCBhcyBvbmx5IHllYXIgYW5kIG1vbnRoIGJ1dCBubyBkYXkgaW4gdGhlIG1vbnRoKSwgb3IKKyAqIHRoZXJlIG1heSBiZSBpbmNvbnNpc3RlbnQgaW5mb3JtYXRpb24gKHN1Y2ggYXMgIlR1ZXNkYXksIEp1bHkgMTUsIDE5OTYiIC0tCisgKiBKdWx5IDE1LCAxOTk2IGlzIGFjdHVhbGx5IGEgTW9uZGF5KS4KKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+SW5zdWZmaWNpZW50IGluZm9ybWF0aW9uLjwvc3Ryb25nPiBUaGUgY2FsZW5kYXIgd2lsbCB1c2UgZGVmYXVsdAorICogaW5mb3JtYXRpb24gdG8gc3BlY2lmeSB0aGUgbWlzc2luZyBmaWVsZHMuIFRoaXMgbWF5IHZhcnkgYnkgY2FsZW5kYXI7IGZvcgorICogdGhlIEdyZWdvcmlhbiBjYWxlbmRhciwgdGhlIGRlZmF1bHQgZm9yIGEgZmllbGQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUKKyAqIHN0YXJ0IG9mIHRoZSBlcG9jaDogaS5lLiwgWUVBUiA9IDE5NzAsIE1PTlRIID0gSkFOVUFSWSwgREFURSA9IDEsIGV0Yy4KKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+SW5jb25zaXN0ZW50IGluZm9ybWF0aW9uLjwvc3Ryb25nPiBJZiBmaWVsZHMgY29uZmxpY3QsIHRoZSBjYWxlbmRhcgorICogd2lsbCBnaXZlIHByZWZlcmVuY2UgdG8gZmllbGRzIHNldCBtb3JlIHJlY2VudGx5LiBGb3IgZXhhbXBsZSwgd2hlbgorICogZGV0ZXJtaW5pbmcgdGhlIGRheSwgdGhlIGNhbGVuZGFyIHdpbGwgbG9vayBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIGNvbWJpbmF0aW9ucyBvZiBmaWVsZHMuICBUaGUgbW9zdCByZWNlbnQgY29tYmluYXRpb24sIGFzIGRldGVybWluZWQgYnkgdGhlCisgKiBtb3N0IHJlY2VudGx5IHNldCBzaW5nbGUgZmllbGQsIHdpbGwgYmUgdXNlZC4KKyAqCisgKiA8YmxvY2txdW90ZT4KKyAqIDxwcmU+CisgKiBNT05USCArIERBWV9PRl9NT05USAorICogTU9OVEggKyBXRUVLX09GX01PTlRIICsgREFZX09GX1dFRUsKKyAqIE1PTlRIICsgREFZX09GX1dFRUtfSU5fTU9OVEggKyBEQVlfT0ZfV0VFSworICogREFZX09GX1lFQVIKKyAqIERBWV9PRl9XRUVLICsgV0VFS19PRl9ZRUFSCisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiBGb3IgdGhlIHRpbWUgb2YgZGF5OgorICoKKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIEhPVVJfT0ZfREFZCisgKiBBTV9QTSArIEhPVVIKKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIDxwPgorICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBmb3Igc29tZSBub24tR3JlZ29yaWFuIGNhbGVuZGFycywgZGlmZmVyZW50CisgKiBmaWVsZHMgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgY29tcGxldGUgZGlzYW1iaWd1YXRpb24uIEZvciBleGFtcGxlLCBhIGZ1bGwKKyAqIHNwZWNpZmljYXRpb24gb2YgdGhlIGhpc3RvcmlhbCBBcmFiaWMgYXN0cm9ub21pY2FsIGNhbGVuZGFyIHJlcXVpcmVzIHllYXIsCisgKiBtb250aCwgZGF5LW9mLW1vbnRoIDxlbT5hbmQ8L2VtPiBkYXktb2Ytd2VlayBpbiBzb21lIGNhc2VzLgorICoKKyAqIDxwPgorICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGVyZSBhcmUgY2VydGFpbiBwb3NzaWJsZSBhbWJpZ3VpdGllcyBpbgorICogaW50ZXJwcmV0YXRpb24gb2YgY2VydGFpbiBzaW5ndWxhciB0aW1lcywgd2hpY2ggYXJlIHJlc29sdmVkIGluIHRoZQorICogZm9sbG93aW5nIHdheXM6CisgKiA8b2w+CisgKiAgICAgPGxpPiAyNDowMDowMCAiYmVsb25ncyIgdG8gdGhlIGZvbGxvd2luZyBkYXkuIFRoYXQgaXMsCisgKiAgICAgICAgICAyMzo1OSBvbiBEZWMgMzEsIDE5NjkgJmx0OyAyNDowMCBvbiBKYW4gMSwgMTk3MCAmbHQ7IDI0OjAxOjAwIG9uIEphbiAxLCAxOTcwCisgKgorICogICAgIDxsaT4gQWx0aG91Z2ggaGlzdG9yaWNhbGx5IG5vdCBwcmVjaXNlLCBtaWRuaWdodCBhbHNvIGJlbG9uZ3MgdG8gImFtIiwKKyAqICAgICAgICAgIGFuZCBub29uIGJlbG9uZ3MgdG8gInBtIiwgc28gb24gdGhlIHNhbWUgZGF5LAorICogICAgICAgICAgMTI6MDAgYW0gKG1pZG5pZ2h0KSAmbHQ7IDEyOjAxIGFtLCBhbmQgMTI6MDAgcG0gKG5vb24pICZsdDsgMTI6MDEgcG0KKyAqIDwvb2w+CisgKgorICogPHA+CisgKiBUaGUgZGF0ZSBvciB0aW1lIGZvcm1hdCBzdHJpbmdzIGFyZSBub3QgcGFydCBvZiB0aGUgZGVmaW5pdGlvbiBvZiBhCisgKiBjYWxlbmRhciwgYXMgdGhvc2UgbXVzdCBiZSBtb2RpZmlhYmxlIG9yIG92ZXJyaWRhYmxlIGJ5IHRoZSB1c2VyIGF0CisgKiBydW50aW1lLiBVc2Uge0BsaW5rIERhdGVGb3JtYXR9CisgKiB0byBmb3JtYXQgZGF0ZXMuCisgKgorICogPHA+PHN0cm9uZz5GaWVsZCBtYW5pcHVsYXRpb24gbWV0aG9kczwvc3Ryb25nPjwvcD4KKyAqIAorICogPHA+PGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGZpZWxkcyBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aHJlZSBtZXRob2RzOgorICogPGNvZGU+c2V0KCk8L2NvZGU+LCA8Y29kZT5hZGQoKTwvY29kZT4sIGFuZCA8Y29kZT5yb2xsKCk8L2NvZGU+LjwvcD4KKyAqIAorICogPHA+PHN0cm9uZz48Y29kZT5zZXQoZiwgdmFsdWUpPC9jb2RlPjwvc3Ryb25nPiBjaGFuZ2VzIGZpZWxkCisgKiA8Y29kZT5mPC9jb2RlPiB0byA8Y29kZT52YWx1ZTwvY29kZT4uICBJbiBhZGRpdGlvbiwgaXQgc2V0cyBhbgorICogaW50ZXJuYWwgbWVtYmVyIHZhcmlhYmxlIHRvIGluZGljYXRlIHRoYXQgZmllbGQgPGNvZGU+ZjwvY29kZT4gaGFzCisgKiBiZWVuIGNoYW5nZWQuIEFsdGhvdWdoIGZpZWxkIDxjb2RlPmY8L2NvZGU+IGlzIGNoYW5nZWQgaW1tZWRpYXRlbHksCisgKiB0aGUgY2FsZW5kYXIncyBtaWxsaXNlY29uZHMgaXMgbm90IHJlY29tcHV0ZWQgdW50aWwgdGhlIG5leHQgY2FsbCB0bworICogPGNvZGU+Z2V0KCk8L2NvZGU+LCA8Y29kZT5nZXRUaW1lKCk8L2NvZGU+LCBvcgorICogPGNvZGU+Z2V0VGltZUluTWlsbGlzKCk8L2NvZGU+IGlzIG1hZGUuIFRodXMsIG11bHRpcGxlIGNhbGxzIHRvCisgKiA8Y29kZT5zZXQoKTwvY29kZT4gZG8gbm90IHRyaWdnZXIgbXVsdGlwbGUsIHVubmVjZXNzYXJ5CisgKiBjb21wdXRhdGlvbnMuIEFzIGEgcmVzdWx0IG9mIGNoYW5naW5nIGEgZmllbGQgdXNpbmcKKyAqIDxjb2RlPnNldCgpPC9jb2RlPiwgb3RoZXIgZmllbGRzIG1heSBhbHNvIGNoYW5nZSwgZGVwZW5kaW5nIG9uIHRoZQorICogZmllbGQsIHRoZSBmaWVsZCB2YWx1ZSwgYW5kIHRoZSBjYWxlbmRhciBzeXN0ZW0uIEluIGFkZGl0aW9uLAorICogPGNvZGU+Z2V0KGYpPC9jb2RlPiB3aWxsIG5vdCBuZWNlc3NhcmlseSByZXR1cm4gPGNvZGU+dmFsdWU8L2NvZGU+CisgKiBhZnRlciB0aGUgZmllbGRzIGhhdmUgYmVlbiByZWNvbXB1dGVkLiBUaGUgc3BlY2lmaWNzIGFyZSBkZXRlcm1pbmVkIGJ5CisgKiB0aGUgY29uY3JldGUgY2FsZW5kYXIgY2xhc3MuPC9wPgorICogCisgKiA8cD48ZW0+RXhhbXBsZTwvZW0+OiBDb25zaWRlciBhIDxjb2RlPkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPgorICogb3JpZ2luYWxseSBzZXQgdG8gQXVndXN0IDMxLCAxOTk5LiBDYWxsaW5nIDxjb2RlPnNldChDYWxlbmRhci5NT05USCwKKyAqIENhbGVuZGFyLlNFUFRFTUJFUik8L2NvZGU+IHNldHMgdGhlIGNhbGVuZGFyIHRvIFNlcHRlbWJlciAzMSwKKyAqIDE5OTkuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gdGhhdCByZXNvbHZlcyB0bworICogT2N0b2JlciAxLCAxOTk5IGlmIDxjb2RlPmdldFRpbWUoKTwvY29kZT5pcyB0aGVuIGNhbGxlZC4gSG93ZXZlciwgYQorICogY2FsbCB0byA8Y29kZT5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAzMCk8L2NvZGU+IGJlZm9yZSB0aGUgY2FsbCB0bworICogPGNvZGU+Z2V0VGltZSgpPC9jb2RlPiBzZXRzIHRoZSBjYWxlbmRhciB0byBTZXB0ZW1iZXIgMzAsIDE5OTksIHNpbmNlCisgKiBubyByZWNvbXB1dGF0aW9uIG9jY3VycyBhZnRlciA8Y29kZT5zZXQoKTwvY29kZT4gaXRzZWxmLjwvcD4KKyAqIAorICogPHA+PHN0cm9uZz48Y29kZT5hZGQoZiwgZGVsdGEpPC9jb2RlPjwvc3Ryb25nPiBhZGRzIDxjb2RlPmRlbHRhPC9jb2RlPgorICogdG8gZmllbGQgPGNvZGU+ZjwvY29kZT4uICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyA8Y29kZT5zZXQoZiwKKyAqIGdldChmKSArIGRlbHRhKTwvY29kZT4gd2l0aCB0d28gYWRqdXN0bWVudHM6PC9wPgorICogCisgKiA8YmxvY2txdW90ZT4KKyAqICAgPHA+PHN0cm9uZz5BZGQgcnVsZSAxPC9zdHJvbmc+LiBUaGUgdmFsdWUgb2YgZmllbGQgPGNvZGU+ZjwvY29kZT4KKyAqICAgYWZ0ZXIgdGhlIGNhbGwgbWludXMgdGhlIHZhbHVlIG9mIGZpZWxkIDxjb2RlPmY8L2NvZGU+IGJlZm9yZSB0aGUKKyAqICAgY2FsbCBpcyA8Y29kZT5kZWx0YTwvY29kZT4sIG1vZHVsbyBhbnkgb3ZlcmZsb3cgdGhhdCBoYXMgb2NjdXJyZWQgaW4KKyAqICAgZmllbGQgPGNvZGU+ZjwvY29kZT4uIE92ZXJmbG93IG9jY3VycyB3aGVuIGEgZmllbGQgdmFsdWUgZXhjZWVkcyBpdHMKKyAqICAgcmFuZ2UgYW5kLCBhcyBhIHJlc3VsdCwgdGhlIG5leHQgbGFyZ2VyIGZpZWxkIGlzIGluY3JlbWVudGVkIG9yCisgKiAgIGRlY3JlbWVudGVkIGFuZCB0aGUgZmllbGQgdmFsdWUgaXMgYWRqdXN0ZWQgYmFjayBpbnRvIGl0cyByYW5nZS48L3A+CisgKiAKKyAqICAgPHA+PHN0cm9uZz5BZGQgcnVsZSAyPC9zdHJvbmc+LiBJZiBhIHNtYWxsZXIgZmllbGQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqICAgaW52YXJpYW50LCBidXQgJm5ic3A7IGl0IGlzIGltcG9zc2libGUgZm9yIGl0IHRvIGJlIGVxdWFsIHRvIGl0cworICogICBwcmlvciB2YWx1ZSBiZWNhdXNlIG9mIGNoYW5nZXMgaW4gaXRzIG1pbmltdW0gb3IgbWF4aW11bSBhZnRlciBmaWVsZAorICogICA8Y29kZT5mPC9jb2RlPiBpcyBjaGFuZ2VkLCB0aGVuIGl0cyB2YWx1ZSBpcyBhZGp1c3RlZCB0byBiZSBhcyBjbG9zZQorICogICBhcyBwb3NzaWJsZSB0byBpdHMgZXhwZWN0ZWQgdmFsdWUuIEEgc21hbGxlciBmaWVsZCByZXByZXNlbnRzIGEKKyAqICAgc21hbGxlciB1bml0IG9mIHRpbWUuIDxjb2RlPkhPVVI8L2NvZGU+IGlzIGEgc21hbGxlciBmaWVsZCB0aGFuCisgKiAgIDxjb2RlPkRBWV9PRl9NT05USDwvY29kZT4uIE5vIGFkanVzdG1lbnQgaXMgbWFkZSB0byBzbWFsbGVyIGZpZWxkcworICogICB0aGF0IGFyZSBub3QgZXhwZWN0ZWQgdG8gYmUgaW52YXJpYW50LiBUaGUgY2FsZW5kYXIgc3lzdGVtCisgKiAgIGRldGVybWluZXMgd2hhdCBmaWVsZHMgYXJlIGV4cGVjdGVkIHRvIGJlIGludmFyaWFudC48L3A+CisgKiA8L2Jsb2NrcXVvdGU+CisgKiAKKyAqIDxwPkluIGFkZGl0aW9uLCB1bmxpa2UgPGNvZGU+c2V0KCk8L2NvZGU+LCA8Y29kZT5hZGQoKTwvY29kZT4gZm9yY2VzCisgKiBhbiBpbW1lZGlhdGUgcmVjb21wdXRhdGlvbiBvZiB0aGUgY2FsZW5kYXIncyBtaWxsaXNlY29uZHMgYW5kIGFsbAorICogZmllbGRzLjwvcD4KKyAqIAorICogPHA+PGVtPkV4YW1wbGU8L2VtPjogQ29uc2lkZXIgYSA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4KKyAqIG9yaWdpbmFsbHkgc2V0IHRvIEF1Z3VzdCAzMSwgMTk5OS4gQ2FsbGluZyA8Y29kZT5hZGQoQ2FsZW5kYXIuTU9OVEgsCisgKiAxMyk8L2NvZGU+IHNldHMgdGhlIGNhbGVuZGFyIHRvIFNlcHRlbWJlciAzMCwgMjAwMC4gPHN0cm9uZz5BZGQgcnVsZQorICogMTwvc3Ryb25nPiBzZXRzIHRoZSA8Y29kZT5NT05USDwvY29kZT4gZmllbGQgdG8gU2VwdGVtYmVyLCBzaW5jZQorICogYWRkaW5nIDEzIG1vbnRocyB0byBBdWd1c3QgZ2l2ZXMgU2VwdGVtYmVyIG9mIHRoZSBuZXh0IHllYXIuIFNpbmNlCisgKiA8Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+IGNhbm5vdCBiZSAzMSBpbiBTZXB0ZW1iZXIgaW4gYQorICogPGNvZGU+R3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+LCA8c3Ryb25nPmFkZCBydWxlIDI8L3N0cm9uZz4gc2V0cyB0aGUKKyAqIDxjb2RlPkRBWV9PRl9NT05USDwvY29kZT4gdG8gMzAsIHRoZSBjbG9zZXN0IHBvc3NpYmxlIHZhbHVlLiBBbHRob3VnaAorICogaXQgaXMgYSBzbWFsbGVyIGZpZWxkLCA8Y29kZT5EQVlfT0ZfV0VFSzwvY29kZT4gaXMgbm90IGFkanVzdGVkIGJ5CisgKiBydWxlIDIsIHNpbmNlIGl0IGlzIGV4cGVjdGVkIHRvIGNoYW5nZSB3aGVuIHRoZSBtb250aCBjaGFuZ2VzIGluIGEKKyAqIDxjb2RlPkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPi48L3A+CisgKiAKKyAqIDxwPjxzdHJvbmc+PGNvZGU+cm9sbChmLCBkZWx0YSk8L2NvZGU+PC9zdHJvbmc+IGFkZHMKKyAqIDxjb2RlPmRlbHRhPC9jb2RlPiB0byBmaWVsZCA8Y29kZT5mPC9jb2RlPiB3aXRob3V0IGNoYW5naW5nIGxhcmdlcgorICogZmllbGRzLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyA8Y29kZT5hZGQoZiwgZGVsdGEpPC9jb2RlPiB3aXRoCisgKiB0aGUgZm9sbG93aW5nIGFkanVzdG1lbnQ6PC9wPgorICogCisgKiA8YmxvY2txdW90ZT4KKyAqICAgPHA+PHN0cm9uZz5Sb2xsIHJ1bGU8L3N0cm9uZz4uIExhcmdlciBmaWVsZHMgYXJlIHVuY2hhbmdlZCBhZnRlciB0aGUKKyAqICAgY2FsbC4gQSBsYXJnZXIgZmllbGQgcmVwcmVzZW50cyBhIGxhcmdlciB1bml0IG9mCisgKiAgIHRpbWUuIDxjb2RlPkRBWV9PRl9NT05USDwvY29kZT4gaXMgYSBsYXJnZXIgZmllbGQgdGhhbgorICogICA8Y29kZT5IT1VSPC9jb2RlPi48L3A+CisgKiA8L2Jsb2NrcXVvdGU+CisgKiAKKyAqIDxwPjxlbT5FeGFtcGxlPC9lbT46IENvbnNpZGVyIGEgPGNvZGU+R3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+CisgKiBvcmlnaW5hbGx5IHNldCB0byBBdWd1c3QgMzEsIDE5OTkuIENhbGxpbmcgPGNvZGU+cm9sbChDYWxlbmRhci5NT05USCwKKyAqIDgpPC9jb2RlPiBzZXRzIHRoZSBjYWxlbmRhciB0byBBcHJpbCAzMCwgPHN0cm9uZz4xOTk5PC9zdHJvbmc+LiAgQWRkCisgKiBydWxlIDEgc2V0cyB0aGUgPGNvZGU+TU9OVEg8L2NvZGU+IGZpZWxkIHRvIEFwcmlsLiBVc2luZyBhCisgKiA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4sIHRoZSA8Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+IGNhbm5vdAorICogYmUgMzEgaW4gdGhlIG1vbnRoIEFwcmlsLiBBZGQgcnVsZSAyIHNldHMgaXQgdG8gdGhlIGNsb3Nlc3QgcG9zc2libGUKKyAqIHZhbHVlLCAzMC4gRmluYWxseSwgdGhlIDxzdHJvbmc+cm9sbCBydWxlPC9zdHJvbmc+IG1haW50YWlucyB0aGUKKyAqIDxjb2RlPllFQVI8L2NvZGU+IGZpZWxkIHZhbHVlIG9mIDE5OTkuPC9wPgorICogCisgKiA8cD48ZW0+RXhhbXBsZTwvZW0+OiBDb25zaWRlciBhIDxjb2RlPkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPgorICogb3JpZ2luYWxseSBzZXQgdG8gU3VuZGF5IEp1bmUgNiwgMTk5OS4gQ2FsbGluZworICogPGNvZGU+cm9sbChDYWxlbmRhci5XRUVLX09GX01PTlRILCAtMSk8L2NvZGU+IHNldHMgdGhlIGNhbGVuZGFyIHRvCisgKiBUdWVzZGF5IEp1bmUgMSwgMTk5OSwgd2hlcmVhcyBjYWxsaW5nCisgKiA8Y29kZT5hZGQoQ2FsZW5kYXIuV0VFS19PRl9NT05USCwgLTEpPC9jb2RlPiBzZXRzIHRoZSBjYWxlbmRhciB0bworICogU3VuZGF5IE1heSAzMCwgMTk5OS4gVGhpcyBpcyBiZWNhdXNlIHRoZSByb2xsIHJ1bGUgaW1wb3NlcyBhbgorICogYWRkaXRpb25hbCBjb25zdHJhaW50OiBUaGUgPGNvZGU+TU9OVEg8L2NvZGU+IG11c3Qgbm90IGNoYW5nZSB3aGVuIHRoZQorICogPGNvZGU+V0VFS19PRl9NT05USDwvY29kZT4gaXMgcm9sbGVkLiBUYWtlbiB0b2dldGhlciB3aXRoIGFkZCBydWxlIDEsCisgKiB0aGUgcmVzdWx0YW50IGRhdGUgbXVzdCBiZSBiZXR3ZWVuIFR1ZXNkYXkgSnVuZSAxIGFuZCBTYXR1cmRheSBKdW5lCisgKiA1LiBBY2NvcmRpbmcgdG8gYWRkIHJ1bGUgMiwgdGhlIDxjb2RlPkRBWV9PRl9XRUVLPC9jb2RlPiwgYW4gaW52YXJpYW50CisgKiB3aGVuIGNoYW5naW5nIHRoZSA8Y29kZT5XRUVLX09GX01PTlRIPC9jb2RlPiwgaXMgc2V0IHRvIFR1ZXNkYXksIHRoZQorICogY2xvc2VzdCBwb3NzaWJsZSB2YWx1ZSB0byBTdW5kYXkgKHdoZXJlIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZQorICogd2VlaykuPC9wPgorICogCisgKiA8cD48c3Ryb25nPlVzYWdlIG1vZGVsPC9zdHJvbmc+LiBUbyBtb3RpdmF0ZSB0aGUgYmVoYXZpb3Igb2YKKyAqIDxjb2RlPmFkZCgpPC9jb2RlPiBhbmQgPGNvZGU+cm9sbCgpPC9jb2RlPiwgY29uc2lkZXIgYSB1c2VyIGludGVyZmFjZQorICogY29tcG9uZW50IHdpdGggaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucyBmb3IgdGhlIG1vbnRoLCBkYXksIGFuZAorICogeWVhciwgYW5kIGFuIHVuZGVybHlpbmcgPGNvZGU+R3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+LiBJZiB0aGUKKyAqIGludGVyZmFjZSByZWFkcyBKYW51YXJ5IDMxLCAxOTk5IGFuZCB0aGUgdXNlciBwcmVzc2VzIHRoZSBtb250aAorICogaW5jcmVtZW50IGJ1dHRvbiwgd2hhdCBzaG91bGQgaXQgcmVhZD8gSWYgdGhlIHVuZGVybHlpbmcKKyAqIGltcGxlbWVudGF0aW9uIHVzZXMgPGNvZGU+c2V0KCk8L2NvZGU+LCBpdCBtaWdodCByZWFkIE1hcmNoIDMsIDE5OTkuIEEKKyAqIGJldHRlciByZXN1bHQgd291bGQgYmUgRmVicnVhcnkgMjgsIDE5OTkuIEZ1cnRoZXJtb3JlLCBpZiB0aGUgdXNlcgorICogcHJlc3NlcyB0aGUgbW9udGggaW5jcmVtZW50IGJ1dHRvbiBhZ2FpbiwgaXQgc2hvdWxkIHJlYWQgTWFyY2ggMzEsCisgKiAxOTk5LCBub3QgTWFyY2ggMjgsIDE5OTkuIEJ5IHNhdmluZyB0aGUgb3JpZ2luYWwgZGF0ZSBhbmQgdXNpbmcgZWl0aGVyCisgKiA8Y29kZT5hZGQoKTwvY29kZT4gb3IgPGNvZGU+cm9sbCgpPC9jb2RlPiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgbGFyZ2VyCisgKiBmaWVsZHMgc2hvdWxkIGJlIGFmZmVjdGVkLCB0aGUgdXNlciBpbnRlcmZhY2UgY2FuIGJlaGF2ZSBhcyBtb3N0IHVzZXJzCisgKiB3aWxsIGludHVpdGl2ZWx5IGV4cGVjdC48L3A+CisgKgorICogPHA+PGI+Tm90ZTo8L2I+IFlvdSBzaG91bGQgYWx3YXlzIHVzZSB7QGxpbmsgI3JvbGwgcm9sbH0gYW5kIHtAbGluayAjYWRkIGFkZH0gcmF0aGVyCisgKiB0aGFuIGF0dGVtcHRpbmcgdG8gcGVyZm9ybSBhcml0aG1ldGljIG9wZXJhdGlvbnMgZGlyZWN0bHkgb24gdGhlIGZpZWxkcworICogb2YgYSA8dHQ+Q2FsZW5kYXI8L3R0Pi4gIEl0IGlzIHF1aXRlIHBvc3NpYmxlIGZvciA8dHQ+Q2FsZW5kYXI8L3R0PiBzdWJjbGFzc2VzCisgKiB0byBoYXZlIGZpZWxkcyB3aXRoIG5vbi1saW5lYXIgYmVoYXZpb3IsIGZvciBleGFtcGxlIG1pc3NpbmcgbW9udGhzCisgKiBvciBkYXlzIGR1cmluZyBub24tbGVhcCB5ZWFycy4gIFRoZSBzdWJjbGFzc2VzJyA8dHQ+YWRkPC90dD4gYW5kIDx0dD5yb2xsPC90dD4KKyAqIG1ldGhvZHMgd2lsbCB0YWtlIHRoaXMgaW50byBhY2NvdW50LCB3aGlsZSBzaW1wbGUgYXJpdGhtZXRpYyBtYW5pcHVsYXRpb25zCisgKiBtYXkgZ2l2ZSBpbnZhbGlkIHJlc3VsdHMuCisgKgorICogPHA+PGJpZz48YmlnPjxiPkNhbGVuZGFyIEFyY2hpdGVjdHVyZSBpbiBJQ1U0SjwvYj48L2JpZz48L2JpZz48L3A+CisgKiAKKyAqIDxwPlJlY2VudGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gaGFzIGNoYW5nZWQKKyAqIHNpZ25pZmljYW50bHkgaW4gb3JkZXIgdG8gYmV0dGVyIHN1cHBvcnQgc3ViY2xhc3NpbmcuIFRoZSBvcmlnaW5hbAorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGNsYXNzIHdhcyBkZXNpZ25lZCB0byBzdXBwb3J0IHN1YmNsYXNzaW5nLCBidXQKKyAqIGl0IGhhZCBvbmx5IG9uZSBpbXBsZW1lbnRlZCBzdWJjbGFzcywgPGNvZGU+R3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+LgorICogV2l0aCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2V2ZXJhbCBuZXcgY2FsZW5kYXIgc3ViY2xhc3NlcywgaW5jbHVkaW5nCisgKiB0aGUgPGNvZGU+QnVkZGhpc3RDYWxlbmRhcjwvY29kZT4sIDxjb2RlPkNoaW5lc2VDYWxlbmRhcjwvY29kZT4sCisgKiA8Y29kZT5IZWJyZXdDYWxlbmRhcjwvY29kZT4sIDxjb2RlPklzbGFtaWNDYWxlbmRhcjwvY29kZT4sIGFuZAorICogPGNvZGU+SmFwYW5lc2VDYWxlbmRhcjwvY29kZT4sIHRoZSBzdWJjbGFzc2luZyBBUEkgaGFzIGJlZW4gcmV3b3JrZWQKKyAqIHRob3JvdWdobHkuIFRoaXMgc2VjdGlvbiBkZXRhaWxzIHRoZSBuZXcgc3ViY2xhc3NpbmcgQVBJIGFuZCBvdGhlcgorICogd2F5cyBpbiB3aGljaCA8Y29kZT5jb20uaWJtLmljdS51dGlsLkNhbGVuZGFyPC9jb2RlPiBkaWZmZXJzIGZyb20KKyAqIDxjb2RlPmphdmEudXRpbC5DYWxlbmRhcjwvY29kZT4uCisgKiA8L3A+CisgKiAKKyAqIDxwPjxiaWc+PGI+Q2hhbmdlczwvYj48L2JpZz48L3A+CisgKiAKKyAqIDxwPk92ZXJ2aWV3IG9mIGNoYW5nZXMgYmV0d2VlbiB0aGUgY2xhc3NpYyA8Y29kZT5DYWxlbmRhcjwvY29kZT4KKyAqIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG5ldyBhcmNoaXRlY3R1cmUuCisgKiAKKyAqIDx1bD4KKyAqIAorICogICA8bGk+VGhlIDxjb2RlPmZpZWxkc1tdPC9jb2RlPiBhcnJheSBpcyA8Y29kZT5wcml2YXRlPC9jb2RlPiBub3cKKyAqICAgICBpbnN0ZWFkIG9mIDxjb2RlPnByb3RlY3RlZDwvY29kZT4uICBTdWJjbGFzc2VzIG11c3QgYWNjZXNzIGl0CisgKiAgICAgdXNpbmcgdGhlIG1ldGhvZHMge0BsaW5rICNpbnRlcm5hbFNldH0gYW5kCisgKiAgICAge0BsaW5rICNpbnRlcm5hbEdldH0uICA8Yj5Nb3RpdmF0aW9uOjwvYj4gU3ViY2xhc3NlcyBzaG91bGQKKyAqICAgICBub3QgZGlyZWN0bHkgYWNjZXNzIGRhdGEgbWVtYmVycy48L2xpPgorICogCisgKiAgIDxsaT5UaGUgPGNvZGU+dGltZTwvY29kZT4gbG9uZyB3b3JkIGlzIDxjb2RlPnByaXZhdGU8L2NvZGU+IG5vdworICogICAgIGluc3RlYWQgb2YgPGNvZGU+cHJvdGVjdGVkPC9jb2RlPi4gIFN1YmNsYXNzZXMgbWF5IGFjY2VzcyBpdCB1c2luZworICogICAgIHRoZSBtZXRob2Qge0BsaW5rICNpbnRlcm5hbEdldFRpbWVJbk1pbGxpc30sIHdoaWNoIGRvZXMgbm90CisgKiAgICAgcHJvdm9rZSBhbiB1cGRhdGUuIDxiPk1vdGl2YXRpb246PC9iPiBTdWJjbGFzc2VzIHNob3VsZCBub3QKKyAqICAgICBkaXJlY3RseSBhY2Nlc3MgZGF0YSBtZW1iZXJzLjwvbGk+CisgKiAKKyAqICAgPGxpPlRoZSBzY29wZSBvZiByZXNwb25zaWJpbGl0eSBvZiBzdWJjbGFzc2VzIGhhcyBiZWVuIGRyYXN0aWNhbGx5CisgKiAgICAgcmVkdWNlZC4gQXMgbXVjaCBmdW5jdGlvbmFsaXR5IGFzIHBvc3NpYmxlIGlzIGltcGxlbWVudGVkIGluIHRoZQorICogICAgIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiBiYXNlIGNsYXNzLiBBcyBhIHJlc3VsdCwgaXQgaXMgbXVjaCBlYXNpZXIKKyAqICAgICB0byBzdWJjbGFzcyA8Y29kZT5DYWxlbmRhcjwvY29kZT4uIDxiPk1vdGl2YXRpb246PC9iPiBTdWJjbGFzc2VzCisgKiAgICAgc2hvdWxkIG5vdCBoYXZlIHRvIHJlaW1wbGVtZW50IGNvbW1vbiBjb2RlLiBDZXJ0YWluIGJlaGF2aW9ycyBhcmUKKyAqICAgICBjb21tb24gYWNyb3NzIGNhbGVuZGFyIHN5c3RlbXM6IFRoZSBkZWZpbml0aW9uIGFuZCBiZWhhdmlvciBvZgorICogICAgIHdlZWstcmVsYXRlZCBmaWVsZHMgYW5kIHRpbWUgZmllbGRzLCB0aGUgYXJpdGhtZXRpYworICogICAgICh7QGxpbmsgI2FkZChpbnQsIGludCkgYWRkfSBhbmQge0BsaW5rICNyb2xsKGludCwgaW50KSByb2xsfSkgYmVoYXZpb3Igb2YgbWFueQorICogICAgIGZpZWxkcywgYW5kIHRoZSBmaWVsZCB2YWxpZGF0aW9uIHN5c3RlbS48L2xpPgorICogCisgKiAgIDxsaT5UaGUgc3ViY2xhc3NpbmcgQVBJIGhhcyBiZWVuIGNvbXBsZXRlbHkgcmVkZXNpZ25lZC48L2xpPgorICogCisgKiAgIDxsaT5UaGUgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGJhc2UgY2xhc3MgY29udGFpbnMgc29tZSBHcmVnb3JpYW4KKyAqICAgICBjYWxlbmRhciBhbGdvcml0aG1pYyBzdXBwb3J0IHRoYXQgc3ViY2xhc3NlcyBjYW4gdXNlIChzcGVjaWZpY2FsbHkKKyAqICAgICBpbiB7QGxpbmsgI2hhbmRsZUNvbXB1dGVGaWVsZHN9KS4gIFN1YmNsYXNzZXMgY2FuIHVzZSB0aGUKKyAqICAgICBtZXRob2RzIDxjb2RlPmdldEdyZWdvcmlhblh4eCgpPC9jb2RlPiB0byBvYnRhaW4gcHJlY29tcHV0ZWQKKyAqICAgICB2YWx1ZXMuIDxiPk1vdGl2YXRpb246PC9iPiBUaGlzIGlzIHJlcXVpcmVkIGJ5IGFsbAorICogICAgIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiBzdWJjbGFzc2VzIGluIG9yZGVyIHRvIGltcGxlbWVudCBjb25zaXN0ZW50CisgKiAgICAgdGltZSB6b25lIGJlaGF2aW9yLCBhbmQgR3JlZ29yaWFuLWRlcml2ZWQgc3lzdGVtcyBjYW4gdXNlIHRoZQorICogICAgIGFscmVhZHkgY29tcHV0ZWQgZGF0YS48L2xpPgorICogCisgKiAgIDxsaT5UaGUgPGNvZGU+RklFTERfQ09VTlQ8L2NvZGU+IGNvbnN0YW50IGhhcyBiZWVuIHJlbW92ZWQuIFVzZQorICogICAgIHtAbGluayAjZ2V0RmllbGRDb3VudH0uICBJbiBhZGRpdGlvbiwgZnJhbWV3b3JrIEFQSSBoYXMgYmVlbgorICogICAgIGFkZGVkIHRvIGFsbG93IHN1YmNsYXNzZXMgdG8gZGVmaW5lIGFkZGl0aW9uYWwgZmllbGRzLgorICogICAgIDxiPk1vdGl2YXRpb246IDwvYj5UaGUgbnVtYmVyIG9mIGZpZWxkcyBpcyBub3QgY29uc3RhbnQgYWNyb3NzCisgKiAgICAgY2FsZW5kYXIgc3lzdGVtcy48L2xpPgorICogCisgKiAgIDxsaT5UaGUgcmFuZ2Ugb2YgaGFuZGxlZCBkYXRlcyBoYXMgYmVlbiBuYXJyb3dlZCBmcm9tICsvLQorICogICAgIH4zMDAsMDAwLDAwMCB5ZWFycyB0byArLy0gfjUsMDAwLDAwMCB5ZWFycy4gSW4gcHJhY3RpY2FsIHRlcm1zCisgKiAgICAgdGhpcyBzaG91bGQgbm90IGFmZmVjdCBjbGllbnRzLiBIb3dldmVyLCBpdCBkb2VzIG1lYW4gdGhhdCBjbGllbnQKKyAqICAgICBjb2RlIGNhbm5vdCBiZSBndWFyYW50ZWVkIHdlbGwtYmVoYXZlZCByZXN1bHRzIHdpdGggZGF0ZXMgc3VjaCBhcworICogICAgIDxjb2RlPkRhdGUoTG9uZy5NSU5fVkFMVUUpPC9jb2RlPiBvcgorICogICAgIDxjb2RlPkRhdGUoTG9uZy5NQVhfVkFMVUUpPC9jb2RlPi4gSW5zdGVhZCwgdGhlCisgKiAgICAgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGNvbnN0YW50cyB7QGxpbmsgI01JTl9EQVRFfSwKKyAqICAgICB7QGxpbmsgI01BWF9EQVRFfSwge0BsaW5rICNNSU5fTUlMTElTfSwKKyAqICAgICB7QGxpbmsgI01BWF9NSUxMSVN9LCB7QGxpbmsgI01JTl9KVUxJQU59LCBhbmQKKyAqICAgICB7QGxpbmsgI01BWF9KVUxJQU59IHNob3VsZCBiZSB1c2VkLiA8Yj5Nb3RpdmF0aW9uOjwvYj4gV2l0aAorICogICAgIHRoZSBhZGRpdGlvbiBvZiB0aGUge0BsaW5rICNKVUxJQU5fREFZfSBmaWVsZCwgSnVsaWFuIGRheQorICogICAgIG51bWJlcnMgbXVzdCBiZSByZXN0cmljdGVkIHRvIGEgMzItYml0IDxjb2RlPmludDwvY29kZT4uICBUaGlzCisgKiAgICAgcmVzdHJpY3RzIHRoZSBvdmVyYWxsIHN1cHBvcnRlZCByYW5nZS4gRnVydGhlcm1vcmUsIHJlc3RyaWN0aW5nCisgKiAgICAgdGhlIHN1cHBvcnRlZCByYW5nZSBzaW1wbGlmaWVzIHRoZSBjb21wdXRhdGlvbnMgYnkgcmVtb3ZpbmcKKyAqICAgICBzcGVjaWFsIGNhc2UgY29kZSB0aGF0IHdhcyB1c2VkIHRvIGFjY29tb2RhdGUgYXJpdGhtZXRpYyBvdmVyZmxvdworICogICAgIGF0IG1pbGxpcyBuZWFyIDxjb2RlPkxvbmcuTUlOX1ZBTFVFPC9jb2RlPiBhbmQKKyAqICAgICA8Y29kZT5Mb25nLk1BWF9WQUxVRTwvY29kZT4uPC9saT4KKyAqIAorICogICA8bGk+TmV3IGZpZWxkcyBhcmUgaW1wbGVtZW50ZWQ6IHtAbGluayAjSlVMSUFOX0RBWX0gZGVmaW5lcworICogICAgIHNpbmdsZS1maWVsZCBzcGVjaWZpY2F0aW9uIG9mIHRoZQorICogICAgIGRhdGUuIHtAbGluayAjTUlMTElTRUNPTkRTX0lOX0RBWX0gZGVmaW5lcyBhIHNpbmdsZS1maWVsZAorICogICAgIHNwZWNpZmljYXRpb24gb2YgdGhlIHdhbGwgdGltZS4ge0BsaW5rICNET1dfTE9DQUx9IGFuZAorICogICAgIHtAbGluayAjWUVBUl9XT1l9IGltcGxlbWVudCBsb2NhbGl6ZWQgZGF5LW9mLXdlZWsgYW5kCisgKiAgICAgd2Vlay1vZi15ZWFyIGJlaGF2aW9yLjwvbGk+CisgKiAKKyAqICAgPGxpPlN1YmNsYXNzZXMgY2FuIGFjY2VzcyBtaWxsaXNlY29uZCBjb25zdGFudHMKKyAqICAgICB7QGxpbmsgI09ORV9TRUNPTkR9LCB7QGxpbmsgI09ORV9NSU5VVEV9LAorICogICAgIHtAbGluayAjT05FX0hPVVJ9LCB7QGxpbmsgI09ORV9EQVl9LCBhbmQKKyAqICAgICB7QGxpbmsgI09ORV9XRUVLfSBkZWZpbmVkIGluIDxjb2RlPkNhbGVuZGFyPC9jb2RlPi48L2xpPgorICogCisgKiAgIDxsaT5OZXcgQVBJIGhhcyBiZWVuIGFkZGVkIHRvIHN1cG9ydCBjYWxlbmRhci1zcGVjaWZpYyBzdWJjbGFzc2VzCisgKiAgICAgb2YgPGNvZGU+RGF0ZUZvcm1hdDwvY29kZT4uPC9saT4KKyAqIAorICogICA8bGk+U2V2ZXJhbCBzdWJjbGFzc2VzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCwgcmVwcmVzZW50aW5nCisgKiAgICAgdmFyaW91cyBpbnRlcm5hdGlvbmFsIGNhbGVuZGFyIHN5c3RlbXMuPC9saT4KKyAqIAorICogPC91bD4KKyAqIAorICogPHA+PGJpZz48Yj5TdWJjbGFzcyBBUEk8L2I+PC9iaWc+PC9wPgorICogCisgKiA8cD5UaGUgb3JpZ2luYWwgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IEFQSSB3YXMgYmFzZWQgb24gdGhlIGV4cGVyaWVuY2UKKyAqIG9mIGltcGxlbWVudGluZyBhIG9ubHkgYSBzaW5nbGUgc3ViY2xhc3MsCisgKiA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4uIEFzIGEgcmVzdWx0LCBhbGwgb2YgdGhlIHN1YmNsYXNzaW5nCisgKiBraW5rcyBoYWQgbm90IGJlZW4gd29ya2VkIG91dC4gVGhlIG5ldyBzdWJjbGFzc2luZyBBUEkgaGFzIGJlZW4KKyAqIHJlZmluZWQgYmFzZWQgb24gc2V2ZXJhbCBpbXBsZW1lbnRlZCBzdWJjbGFzc2VzLiBUaGlzIGluY2x1ZGVzIG1ldGhvZHMKKyAqIHRoYXQgbXVzdCBiZSBvdmVycmlkZGVuIGFuZCBtZXRob2RzIGZvciBzdWJjbGFzc2VzIHRvIGNhbGwuIFN1YmNsYXNzZXMKKyAqIG5vIGxvbmdlciBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gPGNvZGU+ZmllbGRzPC9jb2RlPiBhbmQKKyAqIDxjb2RlPnN0YW1wPC9jb2RlPi4gSW5zdGVhZCwgdGhleSBoYXZlIG5ldyBBUEkgdG8gYWNjZXNzCisgKiB0aGVzZS4gU3ViY2xhc3NlcyBhcmUgYWJsZSB0byBhbGxvY2F0ZSB0aGUgPGNvZGU+ZmllbGRzPC9jb2RlPiBhcnJheQorICogdGhyb3VnaCBhIHByb3RlY3RlZCBmcmFtZXdvcmsgbWV0aG9kOyB0aGlzIGFsbG93cyBzdWJjbGFzc2VzIHRvCisgKiBzcGVjaWZ5IGFkZGl0aW9uYWwgZmllbGRzLiA8L3A+CisgKiAKKyAqIDxwPk1vcmUgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb3ZlZCBpbnRvIHRoZSBiYXNlIGNsYXNzLiBUaGUgYmFzZQorICogY2xhc3Mgbm93IGNvbnRhaW5zIG11Y2ggb2YgdGhlIGNvbXB1dGF0aW9uYWwgbWFjaGluZXJ5IHRvIHN1cHBvcnQgdGhlCisgKiBHcmVnb3JpYW4gY2FsZW5kYXIuIFRoaXMgaXMgYmFzZWQgb24gdHdvIHRoaW5nczogKDEpIE1hbnkgY2FsZW5kYXJzCisgKiBhcmUgYmFzZWQgb24gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciAoc3VjaCBhcyB0aGUgQnVkZGhpc3QgYW5kIEphcGFuZXNlCisgKiBpbXBlcmlhbCBjYWxlbmRhcnMpLiAoMikgPGVtPkFsbDwvZW0+IGNhbGVuZGFycyByZXF1aXJlIGJhc2ljCisgKiBHcmVnb3JpYW4gc3VwcG9ydCBpbiBvcmRlciB0byBoYW5kbGUgdGltZXpvbmUgY29tcHV0YXRpb25zLiA8L3A+CisgKiAKKyAqIDxwPkNvbW1vbiBjb21wdXRhdGlvbnMgaGF2ZSBiZWVuIG1vdmVkIGludG8KKyAqIDxjb2RlPkNhbGVuZGFyPC9jb2RlPi4gU3ViY2xhc3NlcyBubyBsb25nZXIgY29tcHV0ZSB0aGUgd2VlayByZWxhdGVkCisgKiBmaWVsZHMgYW5kIHRoZSB0aW1lIHJlbGF0ZWQgZmllbGRzLiBUaGVzZSBhcmUgY29tbW9ubHkgaGFuZGxlZCBmb3IgYWxsCisgKiBjYWxlbmRhcnMgYnkgdGhlIGJhc2UgY2xhc3MuIDwvcD4KKyAqIAorICogPHA+PGI+U3ViY2xhc3MgY29tcHV0YXRpb24gb2YgdGltZSA8dHQ+PSZndDs8L3R0PiBmaWVsZHM8L2I+CisgKiAKKyAqIDxwPlRoZSB7QGxpbmsgI0VSQX0sIHtAbGluayAjWUVBUn0sCisgKiB7QGxpbmsgI0VYVEVOREVEX1lFQVJ9LCB7QGxpbmsgI01PTlRIfSwKKyAqIHtAbGluayAjREFZX09GX01PTlRIfSwgYW5kIHtAbGluayAjREFZX09GX1lFQVJ9IGZpZWxkcyBhcmUKKyAqIGNvbXB1dGVkIGJ5IHRoZSBzdWJjbGFzcywgYmFzZWQgb24gdGhlIEp1bGlhbiBkYXkuIEFsbCBvdGhlciBmaWVsZHMKKyAqIGFyZSBjb21wdXRlZCBieSA8Y29kZT5DYWxlbmRhcjwvY29kZT4uCisgKiAKKyAqIDx1bD4KKyAqIAorICogICA8bGk+U3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHtAbGluayAjaGFuZGxlQ29tcHV0ZUZpZWxkc30KKyAqICAgICB0byBjb21wdXRlIHRoZSB7QGxpbmsgI0VSQX0sIHtAbGluayAjWUVBUn0sCisgKiAgICAge0BsaW5rICNFWFRFTkRFRF9ZRUFSfSwge0BsaW5rICNNT05USH0sCisgKiAgICAge0BsaW5rICNEQVlfT0ZfTU9OVEh9LCBhbmQge0BsaW5rICNEQVlfT0ZfWUVBUn0gZmllbGRzLAorICogICAgIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUge0BsaW5rICNKVUxJQU5fREFZfSBmaWVsZC4gSWYgdGhlcmUKKyAqICAgICBhcmUgY2FsZW5kYXItc3BlY2lmaWMgZmllbGRzIG5vdCBkZWZpbmVkIGJ5IDxjb2RlPkNhbGVuZGFyPC9jb2RlPiwKKyAqICAgICB0aGV5IG11c3QgYWxzbyBiZSBjb21wdXRlZC4gVGhlc2UgYXJlIHRoZSBvbmx5IGZpZWxkcyB0aGF0IHRoZQorICogICAgIHN1YmNsYXNzIHNob3VsZCBjb21wdXRlLiBBbGwgb3RoZXIgZmllbGRzIGFyZSBjb21wdXRlZCBieSB0aGUgYmFzZQorICogICAgIGNsYXNzLCBzbyB0aW1lIGFuZCB3ZWVrIGZpZWxkcyBiZWhhdmUgaW4gYSBjb25zaXN0ZW50IHdheSBhY3Jvc3MKKyAqICAgICBhbGwgY2FsZW5kYXJzLiBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGluCisgKiAgICAgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGltcGxlbWVudHMgYSBwcm9sZXB0aWMgR3JlZ29yaWFuCisgKiAgICAgY2FsZW5kYXIuIFdpdGhpbiB0aGlzIG1ldGhvZCwgc3ViY2xhc3NlcyBtYXkgY2FsbAorICogICAgIDxjb2RlPmdldEdyZWdvcmlhblh4eCgpPC9jb2RlPiB0byBvYnRhaW4gdGhlIEdyZWdvcmlhbiBjYWxlbmRhcgorICogICAgIG1vbnRoLCBkYXkgb2YgbW9udGgsIGFuZCBleHRlbmRlZCB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS48L2xpPgorICogCisgKiA8L3VsPgorICogCisgKiA8cD48Yj5TdWJjbGFzcyBjb21wdXRhdGlvbiBvZiBmaWVsZHMgPHR0Pj0mZ3Q7PC90dD4gdGltZTwvYj4KKyAqIAorICogPHA+VGhlIGludGVycHJldGF0aW9uIG9mIG1vc3QgZmllbGQgdmFsdWVzIGlzIGhhbmRsZWQgZW50aXJlbHkgYnkKKyAqIDxjb2RlPkNhbGVuZGFyPC9jb2RlPi4gPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGRldGVybWluZXMgd2hpY2ggZmllbGRzCisgKiBhcmUgc2V0LCB3aGljaCBhcmUgbm90LCB3aGljaCBhcmUgc2V0IG1vcmUgcmVjZW50bHksIGFuZCBzbyBvbi4gSW4KKyAqIGFkZGl0aW9uLCA8Y29kZT5DYWxlbmRhcjwvY29kZT4gaGFuZGxlcyB0aGUgY29tcHV0YXRpb24gb2YgdGhlIHRpbWUKKyAqIGZyb20gdGhlIHRpbWUgZmllbGRzIGFuZCBoYW5kbGVzIHRoZSB3ZWVrLXJlbGF0ZWQgZmllbGRzLiBUaGUgb25seQorICogdGhpbmcgdGhlIHN1YmNsYXNzIG11c3QgZG8gaXMgZGV0ZXJtaW5lIHRoZSBleHRlbmRlZCB5ZWFyLCBiYXNlZCBvbgorICogdGhlIHllYXIgZmllbGRzLCBhbmQgdGhlbiwgZ2l2ZW4gYW4gZXh0ZW5kZWQgeWVhciBhbmQgYSBtb250aCwgaXQgbXVzdAorICogcmV0dXJuIGEgSnVsaWFuIGRheSBudW1iZXIuCisgKiAKKyAqIDx1bD4KKyAqIAorICogICA8bGk+U3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHtAbGluayAjaGFuZGxlR2V0RXh0ZW5kZWRZZWFyfQorICogICAgIHRvIHJldHVybiB0aGUgZXh0ZW5kZWQgeWVhciBmb3IgdGhpcyBjYWxlbmRhciBzeXN0ZW0sIGJhc2VkIG9uIHRoZQorICogICAgIHtAbGluayAjWUVBUn0sIHtAbGluayAjRVhURU5ERURfWUVBUn0sIGFuZCBhbnkgZmllbGRzIHRoYXQKKyAqICAgICB0aGUgY2FsZW5kYXIgc3lzdGVtIHVzZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gYSB5ZWFyLCBzdWNoIGFzCisgKiAgICAge0BsaW5rICNFUkF9LjwvbGk+CisgKiAKKyAqICAgPGxpPlN1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB7QGxpbmsgI2hhbmRsZUNvbXB1dGVNb250aFN0YXJ0fQorICogICAgIHRvIHJldHVybiB0aGUgSnVsaWFuIGRheSBudW1iZXIKKyAqICAgICBhc3NvY2lhdGVkIHdpdGggYSBtb250aCBhbmQgZXh0ZW5kZWQgeWVhci4gVGhpcyBpcyB0aGUgSnVsaWFuIGRheQorICogICAgIG51bWJlciBvZiB0aGUgZGF5IGJlZm9yZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aC4gVGhlIG1vbnRoCisgKiAgICAgbnVtYmVyIGlzIHplcm8tYmFzZWQuIFRoaXMgY29tcHV0YXRpb24gc2hvdWxkIG5vdCBkZXBlbmQgb24gYW55CisgKiAgICAgZmllbGQgdmFsdWVzLjwvbGk+CisgKiAKKyAqIDwvdWw+CisgKiAKKyAqIDxwPjxiPk90aGVyIG1ldGhvZHM8L2I+CisgKiAKKyAqIDx1bD4KKyAqIAorICogICA8bGk+U3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHtAbGluayAjaGFuZGxlR2V0TW9udGhMZW5ndGh9CisgKiAgICAgdG8gcmV0dXJuIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhCisgKiAgICAgZ2l2ZW4gbW9udGggb2YgYSBnaXZlbiBleHRlbmRlZCB5ZWFyLiBUaGUgbW9udGggbnVtYmVyLCBhcyBhbHdheXMsCisgKiAgICAgaXMgemVyby1iYXNlZC48L2xpPgorICogCisgKiAgIDxsaT5TdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQge0BsaW5rICNoYW5kbGVHZXRZZWFyTGVuZ3RofQorICogICAgIHRvIHJldHVybiB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIGdpdmVuCisgKiAgICAgZXh0ZW5kZWQgeWVhci4gVGhpcyBtZXRob2QgaXMgdXNlZCBieQorICogICAgIDx0dD5jb21wdXRlV2Vla0ZpZWxkczwvdHQ+IHRvIGNvbXB1dGUgdGhlCisgKiAgICAge0BsaW5rICNXRUVLX09GX1lFQVJ9IGFuZCB7QGxpbmsgI1lFQVJfV09ZfSBmaWVsZHMuPC9saT4KKyAqIAorICogICA8bGk+U3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHtAbGluayAjaGFuZGxlR2V0TGltaXR9CisgKiAgICAgdG8gcmV0dXJuIHRoZSB7QGxpbmsgI01JTklNVU19LAorICogICAgIHtAbGluayAjR1JFQVRFU1RfTUlOSU1VTX0sIHtAbGluayAjTEVBU1RfTUFYSU1VTX0sIG9yCisgKiAgICAge0BsaW5rICNNQVhJTVVNfSBvZiBhIGZpZWxkLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mCisgKiAgICAgPGNvZGU+bGltaXRUeXBlPC9jb2RlPi4gVGhpcyBtZXRob2Qgb25seSBuZWVkcyB0byBoYW5kbGUgdGhlCisgKiAgICAgZmllbGRzIHtAbGluayAjRVJBfSwge0BsaW5rICNZRUFSfSwge0BsaW5rICNNT05USH0sCisgKiAgICAge0BsaW5rICNXRUVLX09GX1lFQVJ9LCB7QGxpbmsgI1dFRUtfT0ZfTU9OVEh9LAorICogICAgIHtAbGluayAjREFZX09GX01PTlRIfSwge0BsaW5rICNEQVlfT0ZfWUVBUn0sCisgKiAgICAge0BsaW5rICNEQVlfT0ZfV0VFS19JTl9NT05USH0sIHtAbGluayAjWUVBUl9XT1l9LCBhbmQKKyAqICAgICB7QGxpbmsgI0VYVEVOREVEX1lFQVJ9LiAgT3RoZXIgZmllbGRzIGFyZSBpbnZhcmlhbnQgKHdpdGgKKyAqICAgICByZXNwZWN0IHRvIGNhbGVuZGFyIHN5c3RlbSkgYW5kIGFyZSBoYW5kbGVkIGJ5IHRoZSBiYXNlCisgKiAgICAgY2xhc3MuPC9saT4KKyAqIAorICogICA8bGk+T3B0aW9uYWxseSwgc3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUge0BsaW5rICN2YWxpZGF0ZUZpZWxkfQorICogICAgIHRvIGNoZWNrIGFueSBzdWJjbGFzcy1zcGVjaWZpYyBmaWVsZHMuIElmIHRoZQorICogICAgIGZpZWxkJ3MgdmFsdWUgaXMgb3V0IG9mIHJhbmdlLCB0aGUgbWV0aG9kIHNob3VsZCB0aHJvdyBhbgorICogICAgIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4uIFRoZSBtZXRob2QgbWF5IGNhbGwKKyAqICAgICA8Y29kZT5zdXBlci52YWxpZGF0ZUZpZWxkKGZpZWxkKTwvY29kZT4gdG8gaGFuZGxlIGZpZWxkcyBpbiBhCisgKiAgICAgZ2VuZXJpYyB3YXksIHRoYXQgaXMsIHRvIGNvbXBhcmUgdGhlbSB0byB0aGUgcmFuZ2UKKyAqICAgICA8Y29kZT5nZXRNaW5pbXVtKGZpZWxkKTwvY29kZT4uLjxjb2RlPmdldE1heGltdW0oZmllbGQpPC9jb2RlPi48L2xpPgorICogCisgKiAgIDxsaT5PcHRpb25hbGx5LCBzdWJjbGFzc2VzIG1heSBvdmVycmlkZQorICogICAgIHtAbGluayAjaGFuZGxlQ3JlYXRlRmllbGRzfSB0byBjcmVhdGUgYW4gPGNvZGU+aW50W108L2NvZGU+CisgKiAgICAgYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGNhbGVuZGFyJ3MgZmllbGRzLiBUaGlzIGlzIG9ubHkKKyAqICAgICBuZWNlc3NhcnkgaWYgdGhlIGNhbGVuZGFyIGRlZmluZXMgYWRkaXRpb25hbCBmaWVsZHMgYmV5b25kIHRob3NlCisgKiAgICAgZGVmaW5lZCBieSA8Y29kZT5DYWxlbmRhcjwvY29kZT4uIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBtdXN0IGJlCisgKiAgICAgYXQgbGVhc3Qge0BsaW5rICNCQVNFX0ZJRUxEX0NPVU5UfSBhbmQgbm8gbW9yZSB0aGFuCisgKiAgICAge0BsaW5rICNNQVhfRklFTERfQ09VTlR9LjwvbGk+CisgKiAKKyAqICAgPGxpPk9wdGlvbmFsbHksIHN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlCisgKiAgICAge0BsaW5rICNoYW5kbGVHZXREYXRlRm9ybWF0fSB0byBjcmVhdGUgYQorICogICAgIDxjb2RlPkRhdGVGb3JtYXQ8L2NvZGU+IGFwcHJvcHJpYXRlIHRvIHRoaXMgY2FsZW5kYXIuIFRoaXMgaXMgb25seQorICogICAgIHJlcXVpcmVkIGlmIGEgY2FsZW5kYXIgc3ViY2xhc3MgcmVkZWZpbmVzIHRoZSB1c2Ugb2YgYSBmaWVsZCAoZm9yCisgKiAgICAgZXhhbXBsZSwgY2hhbmdlcyB0aGUge0BsaW5rICNFUkF9IGZpZWxkIGZyb20gYSBzeW1ib2xpYyBmaWVsZAorICogICAgIHRvIGEgbnVtZXJpYyBvbmUpIG9yIGRlZmluZXMgYW4gYWRkaXRpb25hbCBmaWVsZC48L2xpPgorICogCisgKiAgIDxsaT5PcHRpb25hbGx5LCBzdWJjbGFzc2VzIG1heSBvdmVycmlkZSB7QGxpbmsgI3JvbGwgcm9sbH0gYW5kCisgKiAgICAge0BsaW5rICNhZGQgYWRkfSB0byBoYW5kbGUgZmllbGRzIHRoYXQgYXJlIGRpc2NvbnRpbnVvdXMuIEZvcgorICogICAgIGV4YW1wbGUsIGluIHRoZSBIZWJyZXcgY2FsZW5kYXIgdGhlIG1vbnRoICZxdW90O0FkYXIgSSZxdW90OyBvbmx5CisgKiAgICAgb2NjdXJzIGluIGxlYXAgeWVhcnM7IGluIG90aGVyIHllYXJzIHRoZSBjYWxlbmRhciBqdW1wcyBmcm9tCisgKiAgICAgU2hldmF0IChtb250aCAjNCkgdG8gQWRhciAobW9udGggIzYpLiBUaGUge0BsaW5rCisgKiAgICAgSGVicmV3Q2FsZW5kYXIjYWRkIEhlYnJld0NhbGVuZGFyLmFkZH0gYW5kIHtAbGluaworICogICAgIEhlYnJld0NhbGVuZGFyI3JvbGwgSGVicmV3Q2FsZW5kYXIucm9sbH0gbWV0aG9kcyB0YWtlIHRoaXMgaW50bworICogICAgIGFjY291bnQsIHNvIHRoYXQgYWRkaW5nIDEgbW9udGggdG8gU2hldmF0IGdpdmVzIHRoZSBwcm9wZXIgcmVzdWx0CisgKiAgICAgKEFkYXIpIGluIGEgbm9uLWxlYXAgeWVhci4gVGhlIHByb3RlY3RlZCB1dGlsaXR5IG1ldGhvZCB7QGxpbmsKKyAqICAgICAjcGluRmllbGQgcGluRmllbGR9IGlzIG9mdGVuIHVzZWZ1bCB3aGVuIGltcGxlbWVudGluZyB0aGVzZSB0d28KKyAqICAgICBtZXRob2RzLiA8L2xpPgorICogCisgKiA8L3VsPgorICogCisgKiA8cD48YmlnPjxiPk5vcm1hbGl6ZWQgYmVoYXZpb3I8L2I+PC9iaWc+CisgKiAKKyAqIDxwPlRoZSBiZWhhdmlvciBvZiBjZXJ0YWluIGZpZWxkcyBoYXMgYmVlbiBtYWRlIGNvbnNpc3RlbnQgYWNyb3NzIGFsbAorICogY2FsZW5kYXIgc3lzdGVtcyBhbmQgaW1wbGVtZW50ZWQgaW4gPGNvZGU+Q2FsZW5kYXI8L2NvZGU+LgorICogCisgKiA8dWw+CisgKiAKKyAqICAgPGxpPlRpbWUgaXMgbm9ybWFsaXplZC4gRXZlbiB0aG91Z2ggc29tZSBjYWxlbmRhciBzeXN0ZW1zIHRyYW5zaXRpb24KKyAqICAgICBiZXR3ZWVuIGRheXMgYXQgc3Vuc2V0IG9yIGF0IG90aGVyIHRpbWVzLCBhbGwgSUNVNEogY2FsZW5kYXJzCisgKiAgICAgdHJhbnNpdGlvbiBiZXR3ZWVuIGRheXMgYXQgPGVtPmxvY2FsIHpvbmUgbWlkbmlnaHQ8L2VtPi4gIFRoaXMKKyAqICAgICBhbGxvd3MgSUNVNEogdG8gY2VudHJhbGl6ZSB0aGUgdGltZSBjb21wdXRhdGlvbnMgaW4KKyAqICAgICA8Y29kZT5DYWxlbmRhcjwvY29kZT4gYW5kIHRvIG1haW50YWluIGJhc2ljIGNvcnJlcHNvbmRlbmNlcworICogICAgIGJldHdlZW4gY2FsZW5kYXIgc3lzdGVtcy4gQWZmZWN0ZWQgZmllbGRzOiB7QGxpbmsgI0FNX1BNfSwKKyAqICAgICB7QGxpbmsgI0hPVVJ9LCB7QGxpbmsgI0hPVVJfT0ZfREFZfSwge0BsaW5rICNNSU5VVEV9LAorICogICAgIHtAbGluayAjU0VDT05EfSwge0BsaW5rICNNSUxMSVNFQ09ORH0sCisgKiAgICAge0BsaW5rICNaT05FX09GRlNFVH0sIGFuZCB7QGxpbmsgI0RTVF9PRkZTRVR9LjwvbGk+CisgKiAKKyAqICAgPGxpPkRTVCBiZWhhdmlvciBpcyBub3JtYWxpemVkLiBEYXlsaWdodCBzYXZpbmdzIHRpbWUgYmVoYXZpb3IgaXMKKyAqICAgICBjb21wdXRlZCB0aGUgc2FtZSBmb3IgYWxsIGNhbGVuZGFyIHN5c3RlbXMsIGFuZCBkZXBlbmRzIG9uIHRoZQorICogICAgIHZhbHVlIG9mIHNldmVyYWwgPGNvZGU+R3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+IGZpZWxkczogdGhlCisgKiAgICAge0BsaW5rICNZRUFSfSwge0BsaW5rICNNT05USH0sIGFuZAorICogICAgIHtAbGluayAjREFZX09GX01PTlRIfS4gQXMgYSByZXN1bHQsIDxjb2RlPkNhbGVuZGFyPC9jb2RlPgorICogICAgIGFsd2F5cyBjb21wdXRlcyB0aGVzZSBmaWVsZHMsIGV2ZW4gZm9yIG5vbi1HcmVnb3JpYW4gY2FsZW5kYXIKKyAqICAgICBzeXN0ZW1zLiBUaGVzZSBmaWVsZHMgYXJlIGF2YWlsYWJsZSB0byBzdWJjbGFzc2VzLjwvbGk+CisgKiAKKyAqICAgPGxpPldlZWtzIGFyZSBub3JtYWxpemVkLiBBbHRob3VnaCBsb2NhbGVzIGRlZmluZSB0aGUgd2VlaworICogICAgIGRpZmZlcmVudGx5LCBpbiB0ZXJtcyBvZiB0aGUgZGF5IG9uIHdoaWNoIGl0IHN0YXJ0cywgYW5kIHRoZQorICogICAgIGRlc2lnbmF0aW9uIG9mIHdlZWsgbnVtYmVyIG9uZSBvZiBhIG1vbnRoIG9yIHllYXIsIHRoZXkgYWxsIHVzZSBhCisgKiAgICAgY29tbW9uIG1lY2hhbmlzbS4gRnVydGhlcm1vcmUsIHRoZSBkYXkgb2YgdGhlIHdlZWsgaGFzIGEgc2ltcGxlCisgKiAgICAgYW5kIGNvbnNpc3RlbnQgZGVmaW5pdGlvbiB0aHJvdWdob3V0IGhpc3RvcnkuIEZvciBleGFtcGxlLAorICogICAgIGFsdGhvdWdoIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgaW50cm9kdWNlZCBhIGRpc2NvbnRpbnVpdHkgd2hlbgorICogICAgIGZpcnN0IGluc3RpdHV0ZWQsIHRoZSBkYXkgb2Ygd2VlayB3YXMgbm90IGRpc3J1cHRlZC4gRm9yIHRoaXMKKyAqICAgICByZWFzb24sIHRoZSBmaWVsZHMge0BsaW5rICNEQVlfT0ZfV0VFS30sIDxjb2RlPldFRUtfT0ZfWUVBUiwKKyAqICAgICBXRUVLX09GX01PTlRIPC9jb2RlPiwge0BsaW5rICNEQVlfT0ZfV0VFS19JTl9NT05USH0sCisgKiAgICAge0BsaW5rICNET1dfTE9DQUx9LCB7QGxpbmsgI1lFQVJfV09ZfSBhcmUgYWxsIGNvbXB1dGVkIGluCisgKiAgICAgYSBjb25zaXN0ZW50IHdheSBpbiB0aGUgYmFzZSBjbGFzcywgYmFzZWQgb24gdGhlCisgKiAgICAge0BsaW5rICNFWFRFTkRFRF9ZRUFSfSwge0BsaW5rICNEQVlfT0ZfWUVBUn0sCisgKiAgICAge0BsaW5rICNNT05USH0sIGFuZCB7QGxpbmsgI0RBWV9PRl9NT05USH0sIHdoaWNoIGFyZQorICogICAgIGNvbXB1dGVkIGJ5IHRoZSBzdWJjbGFzcy48L2xpPgorICogCisgKiA8L3VsPgorICogCisgKiA8cD48YmlnPjxiPlN1cHBvcnRlZCByYW5nZTwvYj48L2JpZz4KKyAqIAorICogPHA+VGhlIGFsbG93YWJsZSByYW5nZSBvZiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gaGFzIGJlZW4KKyAqIG5hcnJvd2VkLiA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4gdXNlZCB0byBhdHRlbXB0IHRvIHN1cHBvcnQKKyAqIHRoZSByYW5nZSBvZiBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHZhbHVlcyBmcm9tCisgKiA8Y29kZT5Mb25nLk1JTl9WQUxVRTwvY29kZT4gdG8gPGNvZGU+TG9uZy5NQVhfVkFMVUU8L2NvZGU+LiBUaGlzCisgKiBpbnRyb2R1Y2VkIGF3a3dhcmQgY29uc3RydWN0aW9ucyAoaGFja3MpIHdoaWNoIHNsb3dlZCBkb3duCisgKiBwZXJmb3JtYW5jZS4gSXQgYWxzbyBpbnRyb2R1Y2VkIG5vbi11bmlmb3JtIGJlaGF2aW9yIGF0IHRoZQorICogYm91bmRhcmllcy4gVGhlIG5ldyA8Y29kZT5DYWxlbmRhcjwvY29kZT4gcHJvdG9jb2wgc3BlY2lmaWVzIHRoZQorICogbWF4aW11bSByYW5nZSBvZiBzdXBwb3J0YWJsZSBkYXRlcyBhcyB0aG9zZSBoYXZpbmcgSnVsaWFuIGRheSBudW1iZXJzCisgKiBvZiA8Y29kZT4tMHg3RjAwMDAwMDwvY29kZT4gdG8gPGNvZGU+KzB4N0YwMDAwMDA8L2NvZGU+LiBUaGlzCisgKiBjb3JyZXNwb25kcyB0byB5ZWFycyBmcm9tIH41LDAwMCwwMDAgQkNFIHRvIH41LDAwMCwwMDAgQ0UuIFByb2dyYW1tZXJzCisgKiBzaG91bGQgdXNlIHRoZSBjb25zdGFudHMge0BsaW5rICNNSU5fREFURX0gKG9yCisgKiB7QGxpbmsgI01JTl9NSUxMSVN9IG9yIHtAbGluayAjTUlOX0pVTElBTn0pIGFuZAorICoge0BsaW5rICNNQVhfREFURX0gKG9yIHtAbGluayAjTUFYX01JTExJU30gb3IKKyAqIHtAbGluayAjTUFYX0pVTElBTn0pIGluIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiB0byBzcGVjaWZ5IGFuCisgKiBleHRyZW1lbHkgZWFybHkgb3IgZXh0cmVtZWx5IGxhdGUgZGF0ZS48L3A+CisgKiAKKyAqIDxwPjxiaWc+PGI+R2VuZXJhbCBub3RlczwvYj48L2JpZz4KKyAqIAorICogPHVsPgorICogCisgKiAgIDxsaT5DYWxlbmRhcnMgaW1wbGVtZW50YXRpb25zIGFyZSA8ZW0+cHJvbGVwdGljPC9lbT4uIEZvciBleGFtcGxlLAorICogICAgIGV2ZW4gdGhvdWdoIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgd2FzIG5vdCBpbnN0aXR1dGVkIHVudGlsIHRoZQorICogICAgIDE2dGggY2VudHVyeSwgdGhlIDxjb2RlPkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPiBjbGFzcyBzdXBwb3J0cworICogICAgIGRhdGVzIGJlZm9yZSB0aGUgaGlzdG9yaWNhbCBvbnNldCBvZiB0aGUgY2FsZW5kYXIgYnkgZXh0ZW5kaW5nIHRoZQorICogICAgIGNhbGVuZGFyIHN5c3RlbSBiYWNrd2FyZCBpbiB0aW1lLiBTaW1pbGFybHksIHRoZQorICogICAgIDxjb2RlPkhlYnJld0NhbGVuZGFyPC9jb2RlPiBleHRlbmRzIGJhY2t3YXJkIGJlZm9yZSB0aGUgc3RhcnQgb2YKKyAqICAgICBpdHMgZXBvY2ggaW50byB6ZXJvIGFuZCBuZWdhdGl2ZSB5ZWFycy4gU3ViY2xhc3NlcyBkbyBub3QgdGhyb3cKKyAqICAgICBleGNlcHRpb25zIGJlY2F1c2UgYSBkYXRlIHByZWNlZGVzIHRoZSBoaXN0b3JpY2FsIHN0YXJ0IG9mIGEKKyAqICAgICBjYWxlbmRhciBzeXN0ZW0uIEluc3RlYWQsIHRoZXkgaW1wbGVtZW50CisgKiAgICAge0BsaW5rICNoYW5kbGVHZXRMaW1pdH0gdG8gcmV0dXJuIGFwcHJvcHJpYXRlIGxpbWl0cyBvbgorICogICAgIHtAbGluayAjWUVBUn0sIHtAbGluayAjRVJBfSwgZXRjLiBmaWVsZHMuIFRoZW4sIGlmIHRoZQorICogICAgIGNhbGVuZGFyIGlzIHNldCB0byBub3QgYmUgbGVuaWVudCwgb3V0LW9mLXJhbmdlIGZpZWxkIHZhbHVlcyB3aWxsCisgKiAgICAgdHJpZ2dlciBhbmQgZXhjZXB0aW9uLjwvbGk+CisgKiAKKyAqICAgPGxpPkNhbGVuZGFyIHN5c3RlbSBzdWJjbGFzc2VzIGNvbXB1dGUgYSA8ZW0+ZXh0ZW5kZWQKKyAqICAgICB5ZWFyPC9lbT4uIFRoaXMgZGlmZmVycyBmcm9tIHRoZSB7QGxpbmsgI1lFQVJ9IGZpZWxkIGluIHRoYXQKKyAqICAgICBpdCByYW5nZXMgb3ZlciBhbGwgaW50ZWdlciB2YWx1ZXMsIGluY2x1ZGluZyB6ZXJvIGFuZCBuZWdhdGl2ZQorICogICAgIHZhbHVlcywgYW5kIGl0IGVuY2Fwc3VsYXRlcyB0aGUgaW5mb3JtYXRpb24gb2YgdGhlCisgKiAgICAge0BsaW5rICNZRUFSfSBmaWVsZCBhbmQgYWxsIGxhcmdlciBmaWVsZHMuICBUaHVzLCBmb3IgdGhlCisgKiAgICAgR3JlZ29yaWFuIGNhbGVuZGFyLCB0aGUge0BsaW5rICNFWFRFTkRFRF9ZRUFSfSBpcyBjb21wdXRlZCBhcworICogICAgIDxjb2RlPkVSQT09QUQgPyBZRUFSIDogMS1ZRUFSPC9jb2RlPi4gQW5vdGhlciBleGFtcGxlIGlzIHRoZSBNYXlhbgorICogICAgIGxvbmcgY291bnQsIHdoaWNoIGhhcyB5ZWFycyAoPGNvZGU+S1VOPC9jb2RlPikgYW5kIG5lc3RlZCBjeWNsZXMKKyAqICAgICBvZiB5ZWFycyAoPGNvZGU+S0FUVU48L2NvZGU+IGFuZCA8Y29kZT5CQUtUVU48L2NvZGU+KS4gVGhlIE1heWFuCisgKiAgICAge0BsaW5rICNFWFRFTkRFRF9ZRUFSfSBpcyBjb21wdXRlZCBhcyA8Y29kZT5UVU4gKyAyMCAqIChLQVRVTgorICogICAgICsgMjAgKiBCQUtUVU4pPC9jb2RlPi4gVGhlIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiBiYXNlIGNsYXNzIHVzZXMKKyAqICAgICB0aGUge0BsaW5rICNFWFRFTkRFRF9ZRUFSfSBmaWVsZCB0byBjb21wdXRlIHRoZSB3ZWVrLXJlbGF0ZWQKKyAqICAgICBmaWVsZHMuPC9saT4KKyAqIAorICogPC91bD4KKyAqCisgKiBAc2VlICAgICAgICAgIERhdGUKKyAqIEBzZWUgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIKKyAqIEBzZWUgICAgICAgICAgVGltZVpvbmUKKyAqIEBzZWUgICAgICAgICAgRGF0ZUZvcm1hdAorICogQGF1dGhvciBNYXJrIERhdmlzLCBEYXZpZCBHb2xkc21pdGgsIENoZW4tTGllaCBIdWFuZywgQWxhbiBMaXUsIExhdXJhIFdlcm5lcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDYWxlbmRhciBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSwgQ2xvbmVhYmxlIHsKKworICAgIC8vIERhdGEgZmxvdyBpbiBDYWxlbmRhcgorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gVGhlIGN1cnJlbnQgdGltZSBpcyByZXByZXNlbnRlZCBpbiB0d28gd2F5cyBieSBDYWxlbmRhcjogYXMgVVRDCisgICAgLy8gbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVwb2NoIHN0YXJ0ICgxIEphbnVhcnkgMTk3MCAwOjAwIFVUQyksIGFuZCBhcyBsb2NhbAorICAgIC8vIGZpZWxkcyBzdWNoIGFzIE1PTlRILCBIT1VSLCBBTV9QTSwgZXRjLiAgSXQgaXMgcG9zc2libGUgdG8gY29tcHV0ZSB0aGUKKyAgICAvLyBtaWxsaXMgZnJvbSB0aGUgZmllbGRzLCBhbmQgdmljZSB2ZXJzYS4gIFRoZSBkYXRhIG5lZWRlZCB0byBkbyB0aGlzCisgICAgLy8gY29udmVyc2lvbiBpcyBlbmNhcHN1bGF0ZWQgYnkgYSBUaW1lWm9uZSBvYmplY3Qgb3duZWQgYnkgdGhlIENhbGVuZGFyLgorICAgIC8vIFRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBUaW1lWm9uZSBvYmplY3QgbWF5IGFsc28gYmUgb3ZlcnJpZGRlbiBpZiB0aGUKKyAgICAvLyB1c2VyIHNldHMgdGhlIFpPTkVfT0ZGU0VUIGFuZC9vciBEU1RfT0ZGU0VUIGZpZWxkcyBkaXJlY3RseS4gVGhlIGNsYXNzCisgICAgLy8ga2VlcHMgdHJhY2sgb2Ygd2hhdCBpbmZvcm1hdGlvbiB3YXMgbW9zdCByZWNlbnRseSBzZXQgYnkgdGhlIGNhbGxlciwgYW5kCisgICAgLy8gdXNlcyB0aGF0IHRvIGNvbXB1dGUgYW55IG90aGVyIGluZm9ybWF0aW9uIGFzIG5lZWRlZC4KKworICAgIC8vIElmIHRoZSB1c2VyIHNldHMgdGhlIGZpZWxkcyB1c2luZyBzZXQoKSwgdGhlIGRhdGEgZmxvdyBpcyBhcyBmb2xsb3dzLgorICAgIC8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIENhbGVuZGFyIHN1YmNsYXNzJ3MgY29tcHV0ZVRpbWUoKSBtZXRob2QuCisgICAgLy8gRHVyaW5nIHRoaXMgcHJvY2VzcywgY2VydGFpbiBmaWVsZHMgbWF5IGJlIGlnbm9yZWQuICBUaGUgZGlzYW1iaWd1YXRpb24KKyAgICAvLyBhbGdvcml0aG0gZm9yIHJlc29sdmluZyB3aGljaCBmaWVsZHMgdG8gcGF5IGF0dGVudGlvbiB0byBpcyBkZXNjcmliZWQKKyAgICAvLyBhYm92ZS4KKworICAgIC8vICAgbG9jYWwgZmllbGRzIChZRUFSLCBNT05USCwgREFURSwgSE9VUiwgTUlOVVRFLCBldGMuKQorICAgIC8vICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgIHwgVXNpbmcgQ2FsZW5kYXItc3BlY2lmaWMgYWxnb3JpdGhtCisgICAgLy8gICAgICAgICAgIFYKKyAgICAvLyAgIGxvY2FsIHN0YW5kYXJkIG1pbGxpcworICAgIC8vICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgIHwgVXNpbmcgVGltZVpvbmUgb3IgdXNlci1zZXQgWk9ORV9PRkZTRVQgLyBEU1RfT0ZGU0VUCisgICAgLy8gICAgICAgICAgIFYKKyAgICAvLyAgIFVUQyBtaWxsaXMgKGluIHRpbWUgZGF0YSBtZW1iZXIpCisKKyAgICAvLyBJZiB0aGUgdXNlciBzZXRzIHRoZSBVVEMgbWlsbGlzIHVzaW5nIHNldFRpbWUoKSwgdGhlIGRhdGEgZmxvdyBpcyBhcworICAgIC8vIGZvbGxvd3MuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHRoZSBDYWxlbmRhciBzdWJjbGFzcydzIGNvbXB1dGVGaWVsZHMoKQorICAgIC8vIG1ldGhvZC4KKworICAgIC8vICAgVVRDIG1pbGxpcyAoaW4gdGltZSBkYXRhIG1lbWJlcikKKyAgICAvLyAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICB8IFVzaW5nIFRpbWVab25lIGdldE9mZnNldCgpCisgICAgLy8gICAgICAgICAgIFYKKyAgICAvLyAgIGxvY2FsIHN0YW5kYXJkIG1pbGxpcworICAgIC8vICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgIHwgVXNpbmcgQ2FsZW5kYXItc3BlY2lmaWMgYWxnb3JpdGhtCisgICAgLy8gICAgICAgICAgIFYKKyAgICAvLyAgIGxvY2FsIGZpZWxkcyAoWUVBUiwgTU9OVEgsIERBVEUsIEhPVVIsIE1JTlVURSwgZXRjLikKKworICAgIC8vIEluIGdlbmVyYWwsIGEgcm91bmQgdHJpcCBmcm9tIGZpZWxkcywgdGhyb3VnaCBsb2NhbCBhbmQgVVRDIG1pbGxpcywgYW5kCisgICAgLy8gYmFjayBvdXQgdG8gZmllbGRzIGlzIG1hZGUgd2hlbiBuZWNlc3NhcnkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHRoZQorICAgIC8vIGNvbXBsZXRlKCkgbWV0aG9kLiAgUmVzb2x2aW5nIGEgcGFydGlhbCBzZXQgb2YgZmllbGRzIGludG8gYSBVVEMgbWlsbGlzCisgICAgLy8gdmFsdWUgYWxsb3dzIGFsbCByZW1haW5pbmcgZmllbGRzIHRvIGJlIGdlbmVyYXRlZCBmcm9tIHRoYXQgdmFsdWUuICBJZgorICAgIC8vIHRoZSBDYWxlbmRhciBpcyBsZW5pZW50LCB0aGUgZmllbGRzIGFyZSBhbHNvIHJlbm9ybWFsaXplZCB0byBzdGFuZGFyZAorICAgIC8vIHJhbmdlcyB3aGVuIHRoZXkgYXJlIHJlZ2VuZXJhdGVkLgorCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlCisgICAgICogZXJhLCBlLmcuLCBBRCBvciBCQyBpbiB0aGUgSnVsaWFuIGNhbGVuZGFyLiBUaGlzIGlzIGEgY2FsZW5kYXItc3BlY2lmaWMKKyAgICAgKiB2YWx1ZTsgc2VlIHN1YmNsYXNzIGRvY3VtZW50YXRpb24uCisgICAgICogQHNlZSBHcmVnb3JpYW5DYWxlbmRhciNBRAorICAgICAqIEBzZWUgR3JlZ29yaWFuQ2FsZW5kYXIjQkMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBFUkEgPSAwOworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlCisgICAgICogeWVhci4gVGhpcyBpcyBhIGNhbGVuZGFyLXNwZWNpZmljIHZhbHVlOyBzZWUgc3ViY2xhc3MgZG9jdW1lbnRhdGlvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBZRUFSID0gMTsKKworICAgIC8qKgorICAgICAqIEZpZWxkIG51bWJlciBmb3IgPGNvZGU+Z2V0PC9jb2RlPiBhbmQgPGNvZGU+c2V0PC9jb2RlPiBpbmRpY2F0aW5nIHRoZQorICAgICAqIG1vbnRoLiBUaGlzIGlzIGEgY2FsZW5kYXItc3BlY2lmaWMgdmFsdWUuIFRoZSBmaXJzdCBtb250aCBvZiB0aGUgeWVhciBpcworICAgICAqIDxjb2RlPkpBTlVBUlk8L2NvZGU+OyB0aGUgbGFzdCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgbW9udGhzIGluIGEgeWVhci4KKyAgICAgKiBAc2VlICNKQU5VQVJZCisgICAgICogQHNlZSAjRkVCUlVBUlkKKyAgICAgKiBAc2VlICNNQVJDSAorICAgICAqIEBzZWUgI0FQUklMCisgICAgICogQHNlZSAjTUFZCisgICAgICogQHNlZSAjSlVORQorICAgICAqIEBzZWUgI0pVTFkKKyAgICAgKiBAc2VlICNBVUdVU1QKKyAgICAgKiBAc2VlICNTRVBURU1CRVIKKyAgICAgKiBAc2VlICNPQ1RPQkVSCisgICAgICogQHNlZSAjTk9WRU1CRVIKKyAgICAgKiBAc2VlICNERUNFTUJFUgorICAgICAqIEBzZWUgI1VOREVDSU1CRVIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNT05USCA9IDI7CisKKyAgICAvKioKKyAgICAgKiBGaWVsZCBudW1iZXIgZm9yIDxjb2RlPmdldDwvY29kZT4gYW5kIDxjb2RlPnNldDwvY29kZT4gaW5kaWNhdGluZyB0aGUKKyAgICAgKiB3ZWVrIG51bWJlciB3aXRoaW4gdGhlIGN1cnJlbnQgeWVhci4gIFRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLCBhcworICAgICAqIGRlZmluZWQgYnkgPGNvZGU+Z2V0Rmlyc3REYXlPZldlZWsoKTwvY29kZT4gYW5kCisgICAgICogPGNvZGU+Z2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpPC9jb2RlPiwgaGFzIHZhbHVlIDEuICBTdWJjbGFzc2VzIGRlZmluZQorICAgICAqIHRoZSB2YWx1ZSBvZiA8Y29kZT5XRUVLX09GX1lFQVI8L2NvZGU+IGZvciBkYXlzIGJlZm9yZSB0aGUgZmlyc3Qgd2VlayBvZgorICAgICAqIHRoZSB5ZWFyLgorICAgICAqIEBzZWUgI2dldEZpcnN0RGF5T2ZXZWVrCisgICAgICogQHNlZSAjZ2V0TWluaW1hbERheXNJbkZpcnN0V2VlaworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdFRUtfT0ZfWUVBUiA9IDM7CisKKyAgICAvKioKKyAgICAgKiBGaWVsZCBudW1iZXIgZm9yIDxjb2RlPmdldDwvY29kZT4gYW5kIDxjb2RlPnNldDwvY29kZT4gaW5kaWNhdGluZyB0aGUKKyAgICAgKiB3ZWVrIG51bWJlciB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGguICBUaGUgZmlyc3Qgd2VlayBvZiB0aGUgbW9udGgsIGFzCisgICAgICogZGVmaW5lZCBieSA8Y29kZT5nZXRGaXJzdERheU9mV2VlaygpPC9jb2RlPiBhbmQKKyAgICAgKiA8Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCk8L2NvZGU+LCBoYXMgdmFsdWUgMS4gIFN1YmNsYXNzZXMgZGVmaW5lCisgICAgICogdGhlIHZhbHVlIG9mIDxjb2RlPldFRUtfT0ZfTU9OVEg8L2NvZGU+IGZvciBkYXlzIGJlZm9yZSB0aGUgZmlyc3Qgd2VlayBvZgorICAgICAqIHRoZSBtb250aC4KKyAgICAgKiBAc2VlICNnZXRGaXJzdERheU9mV2VlaworICAgICAqIEBzZWUgI2dldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXRUVLX09GX01PTlRIID0gNDsKKworICAgIC8qKgorICAgICAqIEZpZWxkIG51bWJlciBmb3IgPGNvZGU+Z2V0PC9jb2RlPiBhbmQgPGNvZGU+c2V0PC9jb2RlPiBpbmRpY2F0aW5nIHRoZQorICAgICAqIGRheSBvZiB0aGUgbW9udGguIFRoaXMgaXMgYSBzeW5vbnltIGZvciA8Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+LgorICAgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoIGhhcyB2YWx1ZSAxLgorICAgICAqIEBzZWUgI0RBWV9PRl9NT05USAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERBVEUgPSA1OworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlCisgICAgICogZGF5IG9mIHRoZSBtb250aC4gVGhpcyBpcyBhIHN5bm9ueW0gZm9yIDxjb2RlPkRBVEU8L2NvZGU+LgorICAgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoIGhhcyB2YWx1ZSAxLgorICAgICAqIEBzZWUgI0RBVEUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBEQVlfT0ZfTU9OVEggPSA1OworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlIGRheQorICAgICAqIG51bWJlciB3aXRoaW4gdGhlIGN1cnJlbnQgeWVhci4gIFRoZSBmaXJzdCBkYXkgb2YgdGhlIHllYXIgaGFzIHZhbHVlIDEuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgREFZX09GX1lFQVIgPSA2OworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlIGRheQorICAgICAqIG9mIHRoZSB3ZWVrLiAgVGhpcyBmaWVsZCB0YWtlcyB2YWx1ZXMgPGNvZGU+U1VOREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5NT05EQVk8L2NvZGU+LCA8Y29kZT5UVUVTREFZPC9jb2RlPiwgPGNvZGU+V0VETkVTREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5USFVSU0RBWTwvY29kZT4sIDxjb2RlPkZSSURBWTwvY29kZT4sIGFuZCA8Y29kZT5TQVRVUkRBWTwvY29kZT4uCisgICAgICogQHNlZSAjU1VOREFZCisgICAgICogQHNlZSAjTU9OREFZCisgICAgICogQHNlZSAjVFVFU0RBWQorICAgICAqIEBzZWUgI1dFRE5FU0RBWQorICAgICAqIEBzZWUgI1RIVVJTREFZCisgICAgICogQHNlZSAjRlJJREFZCisgICAgICogQHNlZSAjU0FUVVJEQVkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBEQVlfT0ZfV0VFSyA9IDc7CisKKyAgICAvKioKKyAgICAgKiBGaWVsZCBudW1iZXIgZm9yIDxjb2RlPmdldDwvY29kZT4gYW5kIDxjb2RlPnNldDwvY29kZT4gaW5kaWNhdGluZyB0aGUKKyAgICAgKiBvcmRpbmFsIG51bWJlciBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrIHdpdGhpbiB0aGUgY3VycmVudCBtb250aC4gVG9nZXRoZXIKKyAgICAgKiB3aXRoIHRoZSA8Y29kZT5EQVlfT0ZfV0VFSzwvY29kZT4gZmllbGQsIHRoaXMgdW5pcXVlbHkgc3BlY2lmaWVzIGEgZGF5CisgICAgICogd2l0aGluIGEgbW9udGguICBVbmxpa2UgPGNvZGU+V0VFS19PRl9NT05USDwvY29kZT4gYW5kCisgICAgICogPGNvZGU+V0VFS19PRl9ZRUFSPC9jb2RlPiwgdGhpcyBmaWVsZCdzIHZhbHVlIGRvZXMgPGVtPm5vdDwvZW0+IGRlcGVuZCBvbgorICAgICAqIDxjb2RlPmdldEZpcnN0RGF5T2ZXZWVrKCk8L2NvZGU+IG9yCisgICAgICogPGNvZGU+Z2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpPC9jb2RlPi4gIDxjb2RlPkRBWV9PRl9NT05USCAxPC9jb2RlPgorICAgICAqIHRocm91Z2ggPGNvZGU+NzwvY29kZT4gYWx3YXlzIGNvcnJlc3BvbmQgdG8gPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICAgKiAxPC9jb2RlPjsgPGNvZGU+ODwvY29kZT4gdGhyb3VnaCA8Y29kZT4xNTwvY29kZT4gY29ycmVzcG9uZCB0bworICAgICAqIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01PTlRIIDI8L2NvZGU+LCBhbmQgc28gb24uCisgICAgICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggMDwvY29kZT4gaW5kaWNhdGVzIHRoZSB3ZWVrIGJlZm9yZQorICAgICAqIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01PTlRIIDE8L2NvZGU+LiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50IGJhY2sgZnJvbSB0aGUKKyAgICAgKiBlbmQgb2YgdGhlIG1vbnRoLCBzbyB0aGUgbGFzdCBTdW5kYXkgb2YgYSBtb250aCBpcyBzcGVjaWZpZWQgYXMKKyAgICAgKiA8Y29kZT5EQVlfT0ZfV0VFSyA9IFNVTkRBWSwgREFZX09GX1dFRUtfSU5fTU9OVEggPSAtMTwvY29kZT4uICBCZWNhdXNlCisgICAgICogbmVnYXRpdmUgdmFsdWVzIGNvdW50IGJhY2t3YXJkIHRoZXkgd2lsbCB1c3VhbGx5IGJlIGFsaWduZWQgZGlmZmVyZW50bHkKKyAgICAgKiB3aXRoaW4gdGhlIG1vbnRoIHRoYW4gcG9zaXRpdmUgdmFsdWVzLiAgRm9yIGV4YW1wbGUsIGlmIGEgbW9udGggaGFzIDMxCisgICAgICogZGF5cywgPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggLTE8L2NvZGU+IHdpbGwgb3ZlcmxhcAorICAgICAqIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01PTlRIIDU8L2NvZGU+IGFuZCB0aGUgZW5kIG9mIDxjb2RlPjQ8L2NvZGU+LgorICAgICAqIEBzZWUgI0RBWV9PRl9XRUVLCisgICAgICogQHNlZSAjV0VFS19PRl9NT05USAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERBWV9PRl9XRUVLX0lOX01PTlRIID0gODsKKworICAgIC8qKgorICAgICAqIEZpZWxkIG51bWJlciBmb3IgPGNvZGU+Z2V0PC9jb2RlPiBhbmQgPGNvZGU+c2V0PC9jb2RlPiBpbmRpY2F0aW5nCisgICAgICogd2hldGhlciB0aGUgPGNvZGU+SE9VUjwvY29kZT4gaXMgYmVmb3JlIG9yIGFmdGVyIG5vb24uCisgICAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5BTV9QTTwvY29kZT4gaXMgPGNvZGU+UE08L2NvZGU+LgorICAgICAqIEBzZWUgI0FNCisgICAgICogQHNlZSAjUE0KKyAgICAgKiBAc2VlICNIT1VSCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQU1fUE0gPSA5OworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlCisgICAgICogaG91ciBvZiB0aGUgbW9ybmluZyBvciBhZnRlcm5vb24uIDxjb2RlPkhPVVI8L2NvZGU+IGlzIHVzZWQgZm9yIHRoZSAxMi1ob3VyCisgICAgICogY2xvY2suCisgICAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyAxMC4KKyAgICAgKiBAc2VlICNBTV9QTQorICAgICAqIEBzZWUgI0hPVVJfT0ZfREFZCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSE9VUiA9IDEwOworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlCisgICAgICogaG91ciBvZiB0aGUgZGF5LiA8Y29kZT5IT1VSX09GX0RBWTwvY29kZT4gaXMgdXNlZCBmb3IgdGhlIDI0LWhvdXIgY2xvY2suCisgICAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5IT1VSX09GX0RBWTwvY29kZT4gaXMgMjIuCisgICAgICogQHNlZSAjSE9VUgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEhPVVJfT0ZfREFZID0gMTE7CisKKyAgICAvKioKKyAgICAgKiBGaWVsZCBudW1iZXIgZm9yIDxjb2RlPmdldDwvY29kZT4gYW5kIDxjb2RlPnNldDwvY29kZT4gaW5kaWNhdGluZyB0aGUKKyAgICAgKiBtaW51dGUgd2l0aGluIHRoZSBob3VyLgorICAgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+TUlOVVRFPC9jb2RlPiBpcyA0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1JTlVURSA9IDEyOworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlCisgICAgICogc2Vjb25kIHdpdGhpbiB0aGUgbWludXRlLgorICAgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+U0VDT05EPC9jb2RlPiBpcyAxNS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBTRUNPTkQgPSAxMzsKKworICAgIC8qKgorICAgICAqIEZpZWxkIG51bWJlciBmb3IgPGNvZGU+Z2V0PC9jb2RlPiBhbmQgPGNvZGU+c2V0PC9jb2RlPiBpbmRpY2F0aW5nIHRoZQorICAgICAqIG1pbGxpc2Vjb25kIHdpdGhpbiB0aGUgc2Vjb25kLgorICAgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+TUlMTElTRUNPTkQ8L2NvZGU+IGlzIDI1MC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNSUxMSVNFQ09ORCA9IDE0OworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQ8L2NvZGU+IGFuZCA8Y29kZT5zZXQ8L2NvZGU+IGluZGljYXRpbmcgdGhlCisgICAgICogcmF3IG9mZnNldCBmcm9tIEdNVCBpbiBtaWxsaXNlY29uZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgWk9ORV9PRkZTRVQgPSAxNTsKKworICAgIC8qKgorICAgICAqIEZpZWxkIG51bWJlciBmb3IgPGNvZGU+Z2V0PC9jb2RlPiBhbmQgPGNvZGU+c2V0PC9jb2RlPiBpbmRpY2F0aW5nIHRoZQorICAgICAqIGRheWxpZ2h0IHNhdmluZ3Mgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBEU1RfT0ZGU0VUID0gMTY7CisKKyAgICAvKioKKyAgICAgKiBGaWVsZCBudW1iZXIgZm9yIDxjb2RlPmdldCgpPC9jb2RlPiBhbmQgPGNvZGU+c2V0KCk8L2NvZGU+CisgICAgICogaW5kaWNhdGluZyB0aGUgZXh0ZW5kZWQgeWVhciBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAqIDxjb2RlPldFRUtfT0ZfWUVBUjwvY29kZT4gZmllbGQuICBUaGlzIG1heSBiZSBvbmUgZ3JlYXRlciBvciBsZXNzCisgICAgICogdGhhbiB0aGUgdmFsdWUgb2YgPGNvZGU+RVhURU5ERURfWUVBUjwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWUVBUl9XT1kgPSAxNzsKKworICAgIC8qKgorICAgICAqIEZpZWxkIG51bWJlciBmb3IgPGNvZGU+Z2V0KCk8L2NvZGU+IGFuZCA8Y29kZT5zZXQoKTwvY29kZT4KKyAgICAgKiBpbmRpY2F0aW5nIHRoZSBsb2NhbGl6ZWQgZGF5IG9mIHdlZWsuICBUaGlzIHdpbGwgYmUgYSB2YWx1ZSBmcm9tIDEKKyAgICAgKiB0byA3IGluY2x1c2l2ZSwgd2l0aCAxIGJlaW5nIHRoZSBsb2NhbGl6ZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPV19MT0NBTCA9IDE4OworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQoKTwvY29kZT4gYW5kIDxjb2RlPnNldCgpPC9jb2RlPgorICAgICAqIGluZGljYXRpbmcgdGhlIGV4dGVuZGVkIHllYXIuICBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZworICAgICAqIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLCBlbmNvbXBhc3NpbmcgYWxsIHN1cHJhLXllYXIKKyAgICAgKiBmaWVsZHMuICBGb3IgZXhhbXBsZSwgZm9yIHRoZSBKdWxpYW4gY2FsZW5kYXIgc3lzdGVtLCB5ZWFyIG51bWJlcnMKKyAgICAgKiBhcmUgcG9zaXRpdmUsIHdpdGggYW4gZXJhIG9mIEJDRSBvciBDRS4gIEFuIGV4dGVuZGVkIHllYXIgdmFsdWUgZm9yCisgICAgICogdGhlIEp1bGlhbiBjYWxlbmRhciBzeXN0ZW0gYXNzaWducyBwb3NpdGl2ZSB2YWx1ZXMgdG8gQ0UgeWVhcnMgYW5kCisgICAgICogbmVnYXRpdmUgdmFsdWVzIHRvIEJDRSB5ZWFycywgd2l0aCAxIEJDRSBiZWluZyB5ZWFyIDAuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVhURU5ERURfWUVBUiA9IDE5OworCisgICAgLyoqCisgICAgICogRmllbGQgbnVtYmVyIGZvciA8Y29kZT5nZXQoKTwvY29kZT4gYW5kIDxjb2RlPnNldCgpPC9jb2RlPgorICAgICAqIGluZGljYXRpbmcgdGhlIG1vZGlmaWVkIEp1bGlhbiBkYXkgbnVtYmVyLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorICAgICAqIHRoZSBjb252ZW50aW9uYWwgSnVsaWFuIGRheSBudW1iZXIgaW4gdHdvIHJlZ2FyZHMuICBGaXJzdCwgaXQKKyAgICAgKiBkZW1hcmNhdGVzIGRheXMgYXQgbG9jYWwgem9uZSBtaWRuaWdodCwgcmF0aGVyIHRoYW4gbm9vbiBHTVQuCisgICAgICogU2Vjb25kLCBpdCBpcyBhIGxvY2FsIG51bWJlcjsgdGhhdCBpcywgaXQgZGVwZW5kcyBvbiB0aGUgbG9jYWwgdGltZQorICAgICAqIHpvbmUuICBJdCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIHNpbmdsZSBudW1iZXIgdGhhdCBlbmNvbXBhc3NlcyBhbGwKKyAgICAgKiB0aGUgZGF0ZS1yZWxhdGVkIGZpZWxkcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBKVUxJQU5fREFZID0gMjA7CisKKyAgICAvKioKKyAgICAgKiBGaWVsZCBudW1iZXIgZm9yIDxjb2RlPmdldCgpPC9jb2RlPiBhbmQgPGNvZGU+c2V0KCk8L2NvZGU+CisgICAgICogaW5kaWNhdGluZyB0aGUgbWlsbGlzZWNvbmRzIGluIHRoZSBkYXkuICBUaGlzIHJhbmdlcyBmcm9tIDAgdG8KKyAgICAgKiAyMzo1OTo1OS45OTkgKHJlZ2FyZGxlc3Mgb2YgRFNUKS4gIFRoaXMgZmllbGQgYmVoYXZlcworICAgICAqIDxlbT5leGFjdGx5PC9lbT4gbGlrZSBhIGNvbXBvc2l0ZSBvZiBhbGwgdGltZS1yZWxhdGVkIGZpZWxkcywgbm90CisgICAgICogaW5jbHVkaW5nIHRoZSB6b25lIGZpZWxkcy4gIEFzIHN1Y2gsIGl0IGFsc28gcmVmbGVjdHMKKyAgICAgKiBkaXNjb250aW51aXRpZXMgb2YgdGhvc2UgZmllbGRzIG9uIERTVCB0cmFuc2l0aW9uIGRheXMuICBPbiBhIGRheSBvZgorICAgICAqIERTVCBvbnNldCwgaXQgd2lsbCBqdW1wIGZvcndhcmQuICBPbiBhIGRheSBvZiBEU1QgY2Vzc2F0aW9uLCBpdCB3aWxsCisgICAgICoganVtcCBiYWNrd2FyZC4gIFRoaXMgcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBpcyBtdXN0IGJlIGNvbWJpbmVkIHdpdGgKKyAgICAgKiB0aGUgRFNUX09GRlNFVCBmaWVsZCB0byBvYnRhaW4gYSB1bmlxdWUgbG9jYWwgdGltZSB2YWx1ZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSUxMSVNFQ09ORFNfSU5fREFZID0gMjE7CisgICAgCisgICAgLyoqCisgICAgICogVGhlIG51bWJlciBvZiBmaWVsZHMgZGVmaW5lZCBieSB0aGlzIGNsYXNzLiAgU3ViY2xhc3NlcyBtYXkgZGVmaW5lCisgICAgICogYWRkaXRpb24gZmllbGRzIHN0YXJ0aW5nIHdpdGggdGhpcyBudW1iZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgQkFTRV9GSUVMRF9DT1VOVCA9IDIyOworCisgICAgLyoqCisgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZpZWxkcyBwb3NzaWJsZS4gIFN1YmNsYXNzZXMgbXVzdCBub3QgZGVmaW5lCisgICAgICogbW9yZSB0b3RhbCBmaWVsZHMgdGhhbiB0aGlzIG51bWJlci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVhfRklFTERfQ09VTlQgPSAzMjsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSA8Y29kZT5EQVlfT0ZfV0VFSzwvY29kZT4gZmllbGQgaW5kaWNhdGluZworICAgICAqIFN1bmRheS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBTVU5EQVkgPSAxOworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPkRBWV9PRl9XRUVLPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nCisgICAgICogTW9uZGF5LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1PTkRBWSA9IDI7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiB0aGUgPGNvZGU+REFZX09GX1dFRUs8L2NvZGU+IGZpZWxkIGluZGljYXRpbmcKKyAgICAgKiBUdWVzZGF5LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRVRVNEQVkgPSAzOworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPkRBWV9PRl9XRUVLPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nCisgICAgICogV2VkbmVzZGF5LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdFRE5FU0RBWSA9IDQ7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiB0aGUgPGNvZGU+REFZX09GX1dFRUs8L2NvZGU+IGZpZWxkIGluZGljYXRpbmcKKyAgICAgKiBUaHVyc2RheS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBUSFVSU0RBWSA9IDU7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiB0aGUgPGNvZGU+REFZX09GX1dFRUs8L2NvZGU+IGZpZWxkIGluZGljYXRpbmcKKyAgICAgKiBGcmlkYXkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRlJJREFZID0gNjsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSA8Y29kZT5EQVlfT0ZfV0VFSzwvY29kZT4gZmllbGQgaW5kaWNhdGluZworICAgICAqIFNhdHVyZGF5LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNBVFVSREFZID0gNzsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSA8Y29kZT5NT05USDwvY29kZT4gZmllbGQgaW5kaWNhdGluZyB0aGUKKyAgICAgKiBmaXJzdCBtb250aCBvZiB0aGUgeWVhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBKQU5VQVJZID0gMDsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSA8Y29kZT5NT05USDwvY29kZT4gZmllbGQgaW5kaWNhdGluZyB0aGUKKyAgICAgKiBzZWNvbmQgbW9udGggb2YgdGhlIHllYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRkVCUlVBUlkgPSAxOworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPk1PTlRIPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICAqIHRoaXJkIG1vbnRoIG9mIHRoZSB5ZWFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1BUkNIID0gMjsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSA8Y29kZT5NT05USDwvY29kZT4gZmllbGQgaW5kaWNhdGluZyB0aGUKKyAgICAgKiBmb3VydGggbW9udGggb2YgdGhlIHllYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQVBSSUwgPSAzOworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPk1PTlRIPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICAqIGZpZnRoIG1vbnRoIG9mIHRoZSB5ZWFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1BWSA9IDQ7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiB0aGUgPGNvZGU+TU9OVEg8L2NvZGU+IGZpZWxkIGluZGljYXRpbmcgdGhlCisgICAgICogc2l4dGggbW9udGggb2YgdGhlIHllYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSlVORSA9IDU7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiB0aGUgPGNvZGU+TU9OVEg8L2NvZGU+IGZpZWxkIGluZGljYXRpbmcgdGhlCisgICAgICogc2V2ZW50aCBtb250aCBvZiB0aGUgeWVhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBKVUxZID0gNjsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSA8Y29kZT5NT05USDwvY29kZT4gZmllbGQgaW5kaWNhdGluZyB0aGUKKyAgICAgKiBlaWdodGggbW9udGggb2YgdGhlIHllYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQVVHVVNUID0gNzsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSA8Y29kZT5NT05USDwvY29kZT4gZmllbGQgaW5kaWNhdGluZyB0aGUKKyAgICAgKiBuaW50aCBtb250aCBvZiB0aGUgeWVhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBTRVBURU1CRVIgPSA4OworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPk1PTlRIPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICAqIHRlbnRoIG1vbnRoIG9mIHRoZSB5ZWFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE9DVE9CRVIgPSA5OworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPk1PTlRIPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICAqIGVsZXZlbnRoIG1vbnRoIG9mIHRoZSB5ZWFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE5PVkVNQkVSID0gMTA7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiB0aGUgPGNvZGU+TU9OVEg8L2NvZGU+IGZpZWxkIGluZGljYXRpbmcgdGhlCisgICAgICogdHdlbGZ0aCBtb250aCBvZiB0aGUgeWVhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUNFTUJFUiA9IDExOworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPk1PTlRIPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICAqIHRoaXJ0ZWVudGggbW9udGggb2YgdGhlIHllYXIuIEFsdGhvdWdoIDxjb2RlPkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPgorICAgICAqIGRvZXMgbm90IHVzZSB0aGlzIHZhbHVlLCBsdW5hciBjYWxlbmRhcnMgZG8uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVU5ERUNJTUJFUiA9IDEyOworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPkFNX1BNPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICAqIHBlcmlvZCBvZiB0aGUgZGF5IGZyb20gbWlkbmlnaHQgdG8ganVzdCBiZWZvcmUgbm9vbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBBTSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiB0aGUgPGNvZGU+QU1fUE08L2NvZGU+IGZpZWxkIGluZGljYXRpbmcgdGhlCisgICAgICogcGVyaW9kIG9mIHRoZSBkYXkgZnJvbSBub29uIHRvIGp1c3QgYmVmb3JlIG1pZG5pZ2h0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFBNID0gMTsKKworICAgIC8qKgorICAgICAqIFZhbHVlIHJldHVybmVkIGJ5IGdldERheU9mV2Vla1R5cGUoaW50IGRheU9mV2VlaykgdG8gaW5kaWNhdGUgYQorICAgICAqIHdlZWtkYXkuCisgICAgICogQHNlZSAjV0VFS0VORAorICAgICAqIEBzZWUgI1dFRUtFTkRfT05TRVQKKyAgICAgKiBAc2VlICNXRUVLRU5EX0NFQVNFCisgICAgICogQHNlZSAjZ2V0RGF5T2ZXZWVrVHlwZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdFRUtEQVkgPSAwOworCisgICAgLyoqCisgICAgICogVmFsdWUgcmV0dXJuZWQgYnkgZ2V0RGF5T2ZXZWVrVHlwZShpbnQgZGF5T2ZXZWVrKSB0byBpbmRpY2F0ZSBhCisgICAgICogd2Vla2VuZCBkYXkuCisgICAgICogQHNlZSAjV0VFS0RBWQorICAgICAqIEBzZWUgI1dFRUtFTkRfT05TRVQKKyAgICAgKiBAc2VlICNXRUVLRU5EX0NFQVNFCisgICAgICogQHNlZSAjZ2V0RGF5T2ZXZWVrVHlwZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdFRUtFTkQgPSAxOworCisgICAgLyoqCisgICAgICogVmFsdWUgcmV0dXJuZWQgYnkgZ2V0RGF5T2ZXZWVrVHlwZShpbnQgZGF5T2ZXZWVrKSB0byBpbmRpY2F0ZSBhCisgICAgICogZGF5IHRoYXQgc3RhcnRzIGFzIGEgd2Vla2RheSBhbmQgdHJhbnNpdGlvbnMgdG8gdGhlIHdlZWtlbmQuCisgICAgICogQ2FsbCBnZXRXZWVrZW5kVHJhbnNpdGlvbigpIHRvIGdldCB0aGUgcG9pbnQgb2YgdHJhbnNpdGlvbi4KKyAgICAgKiBAc2VlICNXRUVLREFZCisgICAgICogQHNlZSAjV0VFS0VORAorICAgICAqIEBzZWUgI1dFRUtFTkRfQ0VBU0UKKyAgICAgKiBAc2VlICNnZXREYXlPZldlZWtUeXBlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0VFS0VORF9PTlNFVCA9IDI7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSByZXR1cm5lZCBieSBnZXREYXlPZldlZWtUeXBlKGludCBkYXlPZldlZWspIHRvIGluZGljYXRlIGEKKyAgICAgKiBkYXkgdGhhdCBzdGFydHMgYXMgdGhlIHdlZWtlbmQgYW5kIHRyYW5zaXRpb25zIHRvIGEgd2Vla2RheS4KKyAgICAgKiBDYWxsIGdldFdlZWtlbmRUcmFuc2l0aW9uKCkgdG8gZ2V0IHRoZSBwb2ludCBvZiB0cmFuc2l0aW9uLgorICAgICAqIEBzZWUgI1dFRUtEQVkKKyAgICAgKiBAc2VlICNXRUVLRU5ECisgICAgICogQHNlZSAjV0VFS0VORF9PTlNFVAorICAgICAqIEBzZWUgI2dldERheU9mV2Vla1R5cGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXRUVLRU5EX0NFQVNFID0gMzsKKworICAgIC8qKgorICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIG9uZSBzZWNvbmQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgIE9ORV9TRUNPTkQgPSAxMDAwOworCisgICAgLyoqCisgICAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gb25lIG1pbnV0ZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCAgT05FX01JTlVURSA9IDYwKk9ORV9TRUNPTkQ7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBvbmUgaG91ci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCAgT05FX0hPVVIgICA9IDYwKk9ORV9NSU5VVEU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBvbmUgZGF5LiAgQWx0aG91Z2ggT05FX0RBWSBhbmQKKyAgICAgKiBPTkVfV0VFSyBjYW4gZml0IGludG8gaW50cywgdGhleSBtdXN0IGJlIGxvbmdzIGluIG9yZGVyIHRvIHByZXZlbnQKKyAgICAgKiBhcml0aG1ldGljIG92ZXJmbG93IHdoZW4gcGVyZm9ybWluZyAoYnVnIDQxNzM1MTYpLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBPTkVfREFZICAgID0gMjQqT05FX0hPVVI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBvbmUgd2Vlay4gIEFsdGhvdWdoIE9ORV9EQVkgYW5kCisgICAgICogT05FX1dFRUsgY2FuIGZpdCBpbnRvIGludHMsIHRoZXkgbXVzdCBiZSBsb25ncyBpbiBvcmRlciB0byBwcmV2ZW50CisgICAgICogYXJpdGhtZXRpYyBvdmVyZmxvdyB3aGVuIHBlcmZvcm1pbmcgKGJ1ZyA0MTczNTE2KS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgT05FX1dFRUsgICA9IDcqT05FX0RBWTsKKworICAgIC8qKgorICAgICAqIFRoZSBKdWxpYW4gZGF5IG9mIHRoZSBHcmVnb3JpYW4gZXBvY2gsIHRoYXQgaXMsIEphbnVhcnkgMSwgMSBvbiB0aGUKKyAgICAgKiBHcmVnb3JpYW4gY2FsZW5kYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgSkFOXzFfMV9KVUxJQU5fREFZID0gMTcyMTQyNjsKKworICAgIC8qKgorICAgICAqIFRoZSBKdWxpYW4gZGF5IG9mIHRoZSBlcG9jaCwgdGhhdCBpcywgSmFudWFyeSAxLCAxOTcwIG9uIHRoZQorICAgICAqIEdyZWdvcmlhbiBjYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBFUE9DSF9KVUxJQU5fREFZICAgPSAyNDQwNTg4OworCisgICAgLyoqCisgICAgICogVGhlIG1pbmltdW0gc3VwcG9ydGVkIEp1bGlhbiBkYXkuICBUaGlzIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgKiA8Y29kZT5NSU5fTUlMTElTPC9jb2RlPiBhbmQgPGNvZGU+TUlOX0RBVEU8L2NvZGU+LgorICAgICAqIEBzZWUgI0pVTElBTl9EQVkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNSU5fSlVMSUFOID0gLTB4N0YwMDAwMDA7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbWluaW11bSBzdXBwb3J0ZWQgZXBvY2ggbWlsbGlzZWNvbmRzLiAgVGhpcyB2YWx1ZSBpcyBlcXVpdmFsZW50CisgICAgICogdG8gPGNvZGU+TUlOX0pVTElBTjwvY29kZT4gYW5kIDxjb2RlPk1JTl9EQVRFPC9jb2RlPi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgTUlOX01JTExJUyA9IC0xODQzMDM5MDI1MjgwMDAwMDBMOworCisgICAgLy8gR2V0IGFyb3VuZCBidWcgaW4gamlrZXMgMS4xMiBmb3Igbm93LiAgTGF0ZXIsIHVzZToKKyAgICAvL3Byb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBNSU5fTUlMTElTID0gKE1JTl9KVUxJQU4gLSBFUE9DSF9KVUxJQU5fREFZKSAqIE9ORV9EQVk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbWluaW11bSBzdXBwb3J0ZWQgPGNvZGU+RGF0ZTwvY29kZT4uICBUaGlzIHZhbHVlIGlzIGVxdWl2YWxlbnQKKyAgICAgKiB0byA8Y29kZT5NSU5fSlVMSUFOPC9jb2RlPiBhbmQgPGNvZGU+TUlOX01JTExJUzwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEYXRlIE1JTl9EQVRFID0gbmV3IERhdGUoTUlOX01JTExJUyk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgSnVsaWFuIGRheS4gIFRoaXMgdmFsdWUgaXMgZXF1aXZhbGVudCB0bworICAgICAqIDxjb2RlPk1BWF9NSUxMSVM8L2NvZGU+IGFuZCA8Y29kZT5NQVhfREFURTwvY29kZT4uCisgICAgICogQHNlZSAjSlVMSUFOX0RBWQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BWF9KVUxJQU4gPSArMHg3RjAwMDAwMDsKKworICAgIC8qKgorICAgICAqIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCBlcG9jaCBtaWxsaXNlY29uZHMuICBUaGlzIHZhbHVlIGlzIGVxdWl2YWxlbnQKKyAgICAgKiB0byA8Y29kZT5NQVhfSlVMSUFOPC9jb2RlPiBhbmQgPGNvZGU+TUFYX0RBVEU8L2NvZGU+LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBNQVhfTUlMTElTID0gKE1BWF9KVUxJQU4gLSBFUE9DSF9KVUxJQU5fREFZKSAqIE9ORV9EQVk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgPGNvZGU+RGF0ZTwvY29kZT4uICBUaGlzIHZhbHVlIGlzIGVxdWl2YWxlbnQKKyAgICAgKiB0byA8Y29kZT5NQVhfSlVMSUFOPC9jb2RlPiBhbmQgPGNvZGU+TUFYX01JTExJUzwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEYXRlIE1BWF9EQVRFID0gbmV3IERhdGUoTUFYX01JTExJUyk7CisKKyAgICAvLyBJbnRlcm5hbCBub3RlczoKKyAgICAvLyBDYWxlbmRhciBjb250YWlucyB0d28ga2luZHMgb2YgdGltZSByZXByZXNlbnRhdGlvbnM6IGN1cnJlbnQgInRpbWUiIGluCisgICAgLy8gbWlsbGlzZWNvbmRzLCBhbmQgYSBzZXQgb2YgdGltZSAiZmllbGRzIiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgdGltZS4KKyAgICAvLyBUaGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgdXN1YWxseSBpbiBzeW5jLCBidXQgY2FuIGdldCBvdXQgb2Ygc3luYworICAgIC8vIGFzIGZvbGxvd3MuCisgICAgLy8gMS4gSW5pdGlhbGx5LCBubyBmaWVsZHMgYXJlIHNldCwgYW5kIHRoZSB0aW1lIGlzIGludmFsaWQuCisgICAgLy8gMi4gSWYgdGhlIHRpbWUgaXMgc2V0LCBhbGwgZmllbGRzIGFyZSBjb21wdXRlZCBhbmQgaW4gc3luYy4KKyAgICAvLyAzLiBJZiBhIHNpbmdsZSBmaWVsZCBpcyBzZXQsIHRoZSB0aW1lIGlzIGludmFsaWQuCisgICAgLy8gUmVjb21wdXRhdGlvbiBvZiB0aGUgdGltZSBhbmQgZmllbGRzIGhhcHBlbnMgd2hlbiB0aGUgb2JqZWN0IG5lZWRzCisgICAgLy8gdG8gcmV0dXJuIGEgcmVzdWx0IHRvIHRoZSB1c2VyLCBvciB1c2UgYSByZXN1bHQgZm9yIGEgY29tcHV0YXRpb24uCisKKyAgICAvKioKKyAgICAgKiBUaGUgZmllbGQgdmFsdWVzIGZvciB0aGUgY3VycmVudGx5IHNldCB0aW1lIGZvciB0aGlzIGNhbGVuZGFyLgorICAgICAqIFRoaXMgaXMgYW4gYXJyYXkgb2YgYXQgbGVhc3QgPGNvZGU+QkFTRV9GSUVMRF9DT1VOVDwvY29kZT4gaW50ZWdlcnMuCisgICAgICogQHNlZSAjaGFuZGxlQ3JlYXRlRmllbGRzCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCAgICAgICAgICAgZmllbGRzW107CisKKyAgICAvKioKKyAgICAgKiBQc2V1ZG8tdGltZS1zdGFtcHMgd2hpY2ggc3BlY2lmeSB3aGVuIGVhY2ggZmllbGQgd2FzIHNldC4gVGhlcmUKKyAgICAgKiBhcmUgdHdvIHNwZWNpYWwgdmFsdWVzLCBVTlNFVCBhbmQgSU5URVJOQUxMWV9TRVQuIFZhbHVlcyBmcm9tCisgICAgICogTUlOSU1VTV9VU0VSX1NFVCB0byBJbnRlZ2VyLk1BWF9WQUxVRSBhcmUgbGVnYWwgdXNlciBzZXQgdmFsdWVzLgorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCAgICAgICAgICAgc3RhbXBbXTsKKworICAgIC8qKgorICAgICAqIFRoZSBjdXJyZW50bHkgc2V0IHRpbWUgZm9yIHRoaXMgY2FsZW5kYXIsIGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIKKyAgICAgKiBKYW51YXJ5IDEsIDE5NzAsIDA6MDA6MDAgR01ULgorICAgICAqIEBzZWUgPHR0PmlzVGltZVNldDwvdHQ+CisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgbG9uZyAgICAgICAgICB0aW1lOworCisgICAgLyoqCisgICAgICogVHJ1ZSBpZiB0aGVuIHRoZSB2YWx1ZSBvZiA8Y29kZT50aW1lPC9jb2RlPiBpcyB2YWxpZC4KKyAgICAgKiBUaGUgdGltZSBpcyBtYWRlIGludmFsaWQgYnkgYSBjaGFuZ2UgdG8gYW4gaXRlbSBvZiA8Y29kZT5maWVsZFtdPC9jb2RlPi4KKyAgICAgKiBAc2VlICN0aW1lCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gICAgICAgaXNUaW1lU2V0OworCisgICAgLyoqCisgICAgICogVHJ1ZSBpZiA8Y29kZT5maWVsZHNbXTwvY29kZT4gYXJlIGluIHN5bmMgd2l0aCB0aGUgY3VycmVudGx5IHNldCB0aW1lLgorICAgICAqIElmIGZhbHNlLCB0aGVuIHRoZSBuZXh0IGF0dGVtcHQgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIHdpbGwKKyAgICAgKiBmb3JjZSBhIHJlY29tcHV0YXRpb24gb2YgYWxsIGZpZWxkcyBmcm9tIHRoZSBjdXJyZW50IHZhbHVlIG9mCisgICAgICogPGNvZGU+dGltZTwvY29kZT4uCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gICAgICAgYXJlRmllbGRzU2V0OworCisgICAgLyoqCisgICAgICogVHJ1ZSBpZiBhbGwgZmllbGRzIGhhdmUgYmVlbiBzZXQuICBUaGlzIGlzIG9ubHkgZmFsc2UgaW4gYSBmZXcKKyAgICAgKiBzaXR1YXRpb25zOiBJbiBhIG5ld2x5IGNyZWF0ZWQsIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBvYmplY3QuICBBZnRlcgorICAgICAqIGEgY2FsbCB0byBjbGVhcigpLiAgSW4gYW4gb2JqZWN0IGp1c3QgcmVhZCBmcm9tIGEgc3RyZWFtIHVzaW5nCisgICAgICogcmVhZE9iamVjdCgpLiAgT25jZSBjb21wdXRlRmllbGRzKCkgaGFzIGJlZW4gY2FsbGVkIHRoaXMgaXMgc2V0IHRvCisgICAgICogdHJ1ZSBhbmQgc3RheXMgdHJ1ZSB1bnRpbCBvbmUgb2YgdGhlIGFib3ZlIHNpdHVhdGlvbnMgcmVjdXJzLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIHRyYW5zaWVudCBib29sZWFuICAgICAgIGFyZUFsbEZpZWxkc1NldDsKKworICAgIC8qKgorICAgICAqIFRydWUgaWYgdGhpcyBjYWxlbmRhciBhbGxvd3Mgb3V0LW9mLXJhbmdlIGZpZWxkIHZhbHVlcyBkdXJpbmcgY29tcHV0YXRpb24KKyAgICAgKiBvZiA8Y29kZT50aW1lPC9jb2RlPiBmcm9tIDxjb2RlPmZpZWxkc1tdPC9jb2RlPi4KKyAgICAgKiBAc2VlICNzZXRMZW5pZW50CisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiAgICAgICAgIGxlbmllbnQgPSB0cnVlOworCisgICAgLyoqCisgICAgICogVGhlIDxjb2RlPlRpbWVab25lPC9jb2RlPiB1c2VkIGJ5IHRoaXMgY2FsZW5kYXIuIDwvY29kZT5DYWxlbmRhcjwvY29kZT4KKyAgICAgKiB1c2VzIHRoZSB0aW1lIHpvbmUgZGF0YSB0byB0cmFuc2xhdGUgYmV0d2VlbiBsb2NhbGUgYW5kIEdNVCB0aW1lLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIFRpbWVab25lICAgICAgICB6b25lOworCisgICAgLyoqCisgICAgICogVGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgd2l0aCBwb3NzaWJsZSB2YWx1ZXMgPGNvZGU+U1VOREFZPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5NT05EQVk8L2NvZGU+LCBldGMuICBUaGlzIGlzIGEgbG9jYWxlLWRlcGVuZGVudCB2YWx1ZS4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgZmlyc3REYXlPZldlZWs7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgcmVxdWlyZWQgZm9yIHRoZSBmaXJzdCB3ZWVrIGluIGEgbW9udGggb3IgeWVhciwKKyAgICAgKiB3aXRoIHBvc3NpYmxlIHZhbHVlcyBmcm9tIDEgdG8gNy4gIFRoaXMgaXMgYSBsb2NhbGUtZGVwZW5kZW50IHZhbHVlLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICBtaW5pbWFsRGF5c0luRmlyc3RXZWVrOworCisgICAgLyoqCisgICAgICogRmlyc3QgZGF5IG9mIHRoZSB3ZWVrZW5kIGluIHRoaXMgY2FsZW5kYXIncyBsb2NhbGUuICBNdXN0IGJlIGluCisgICAgICogdGhlIHJhbmdlIFNVTkRBWS4uLlNBVFVSREFZICgxLi43KS4gIFRoZSB3ZWVrZW5kIHN0YXJ0cyBhdAorICAgICAqIHdlZWtlbmRPbnNldE1pbGxpcyBtaWxsaXNlY29uZHMgYWZ0ZXIgbWlkbmlnaHQgb24gdGhhdCBkYXkgb2YKKyAgICAgKiB0aGUgd2Vlay4gIFRoaXMgdmFsdWUgaXMgdGFrZW4gZnJvbSBsb2NhbGUgcmVzb3VyY2UgZGF0YS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCB3ZWVrZW5kT25zZXQ7CisKKyAgICAvKioKKyAgICAgKiBNaWxsaXNlY29uZHMgYWZ0ZXIgbWlkbmlnaHQgYXQgd2hpY2ggdGhlIHdlZWtlbmQgc3RhcnRzIG9uIHRoZQorICAgICAqIGRheSBvZiB0aGUgd2VlayB3ZWVrZW5kT25zZXQuICBUaW1lcyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gb3IKKyAgICAgKiBlcXVhbCB0byB3ZWVrZW5kT25zZXRNaWxsaXMgYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgd2Vla2VuZC4KKyAgICAgKiBNdXN0IGJlIGluIHRoZSByYW5nZSAwLi4yNCo2MCo2MCoxMDAwLTEuICBUaGlzIHZhbHVlIGlzIHRha2VuCisgICAgICogZnJvbSBsb2NhbGUgcmVzb3VyY2UgZGF0YS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCB3ZWVrZW5kT25zZXRNaWxsaXM7CisKKyAgICAvKioKKyAgICAgKiBEYXkgb2YgdGhlIHdlZWsgd2hlbiB0aGUgd2Vla2VuZCBzdG9wcyBpbiB0aGlzIGNhbGVuZGFyJ3MKKyAgICAgKiBsb2NhbGUuICBNdXN0IGJlIGluIHRoZSByYW5nZSBTVU5EQVkuLi5TQVRVUkRBWSAoMS4uNykuICBUaGUKKyAgICAgKiB3ZWVrZW5kIHN0b3BzIGF0IHdlZWtlbmRDZWFzZU1pbGxpcyBtaWxsaXNlY29uZHMgYWZ0ZXIgbWlkbmlnaHQKKyAgICAgKiBvbiB0aGF0IGRheSBvZiB0aGUgd2Vlay4gIFRoaXMgdmFsdWUgaXMgdGFrZW4gZnJvbSBsb2NhbGUKKyAgICAgKiByZXNvdXJjZSBkYXRhLgorICAgICAqLworICAgIHByaXZhdGUgaW50IHdlZWtlbmRDZWFzZTsKKworICAgIC8qKgorICAgICAqIE1pbGxpc2Vjb25kcyBhZnRlciBtaWRuaWdodCBhdCB3aGljaCB0aGUgd2Vla2VuZCBzdG9wcyBvbiB0aGUKKyAgICAgKiBkYXkgb2YgdGhlIHdlZWsgd2Vla2VuZENlYXNlLiAgVGltZXMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIG9yCisgICAgICogZXF1YWwgdG8gd2Vla2VuZENlYXNlTWlsbGlzIGFyZSBjb25zaWRlcmVkIG5vdCB0byBiZSB0aGUKKyAgICAgKiB3ZWVrZW5kLiAgTXVzdCBiZSBpbiB0aGUgcmFuZ2UgMC4uMjQqNjAqNjAqMTAwMC0xLiAgVGhpcyB2YWx1ZQorICAgICAqIGlzIHRha2VuIGZyb20gbG9jYWxlIHJlc291cmNlIGRhdGEuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgd2Vla2VuZENlYXNlTWlsbGlzOworCisgICAgLyoqCisgICAgICogQ2FjaGUgdG8gaG9sZCB0aGUgZmlyc3REYXlPZldlZWsgYW5kIG1pbmltYWxEYXlzSW5GaXJzdFdlZWsKKyAgICAgKiBvZiBhIExvY2FsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgY2FjaGVkTG9jYWxlRGF0YSA9IG5ldyBIYXNodGFibGUoMyk7CisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiB0aGUgdGltZSBzdGFtcCA8Y29kZT5zdGFtcFtdPC9jb2RlPiBpbmRpY2F0aW5nIHRoYXQKKyAgICAgKiBhIGZpZWxkIGhhcyBub3QgYmVlbiBzZXQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byA8Y29kZT5jbGVhcigpPC9jb2RlPi4KKyAgICAgKiBAc2VlICNJTlRFUk5BTExZX1NFVAorICAgICAqIEBzZWUgI01JTklNVU1fVVNFUl9TVEFNUAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFVOU0VUID0gMDsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSB0aW1lIHN0YW1wIDxjb2RlPnN0YW1wW108L2NvZGU+IGluZGljYXRpbmcgdGhhdCBhIGZpZWxkCisgICAgICogaGFzIGJlZW4gc2V0IHZpYSBjb21wdXRhdGlvbnMgZnJvbSB0aGUgdGltZSBvciBmcm9tIG90aGVyIGZpZWxkcy4KKyAgICAgKiBAc2VlICNVTlNFVAorICAgICAqIEBzZWUgI01JTklNVU1fVVNFUl9TVEFNUAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IElOVEVSTkFMTFlfU0VUID0gMTsKKworICAgIC8qKgorICAgICAqIElmIHRoZSB0aW1lIHN0YW1wIDxjb2RlPnN0YW1wW108L2NvZGU+IGhhcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBvcgorICAgICAqIGVxdWFsIHRvIDxjb2RlPk1JTklNVU1fVVNFUl9TRVQ8L2NvZGU+IHRoZW4gaXQgaGFzIGJlZW4gc2V0IGJ5IHRoZQorICAgICAqIHVzZXIgdmlhIGEgY2FsbCB0byA8Y29kZT5zZXQoKTwvY29kZT4uCisgICAgICogQHNlZSAjVU5TRVQKKyAgICAgKiBAc2VlICNJTlRFUk5BTExZX1NFVAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1JTklNVU1fVVNFUl9TVEFNUCA9IDI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbmV4dCBhdmFpbGFibGUgdmFsdWUgZm9yIDxjb2RlPnN0YW1wW108L2NvZGU+LCBhbiBpbnRlcm5hbCBhcnJheS4KKyAgICAgKiBUaGlzIGFjdHVhbGx5IHNob3VsZCBub3QgYmUgd3JpdHRlbiBvdXQgdG8gdGhlIHN0cmVhbSwgYW5kIHdpbGwgcHJvYmFibHkKKyAgICAgKiBiZSByZW1vdmVkIGZyb20gdGhlIHN0cmVhbSBpbiB0aGUgbmVhciBmdXR1cmUuICBJbiB0aGUgbWVhbnRpbWUsCisgICAgICogYSB2YWx1ZSBvZiA8Y29kZT5NSU5JTVVNX1VTRVJfU1RBTVA8L2NvZGU+IHNob3VsZCBiZSB1c2VkLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgICAgICAgICAgICAgbmV4dFN0YW1wID0gTUlOSU1VTV9VU0VSX1NUQU1QOworCisgICAgLy8gdGhlIGludGVybmFsIHNlcmlhbCB2ZXJzaW9uIHdoaWNoIHNheXMgd2hpY2ggdmVyc2lvbiB3YXMgd3JpdHRlbgorICAgIC8vIC0gMCAoZGVmYXVsdCkgZm9yIHZlcnNpb24gdXAgdG8gSkRLIDEuMS41CisgICAgLy8gLSAxIGZvciB2ZXJzaW9uIGZyb20gSkRLIDEuMS42LCB3aGljaCB3cml0ZXMgYSBjb3JyZWN0ICd0aW1lJyB2YWx1ZQorICAgIC8vICAgICBhcyB3ZWxsIGFzIGNvbXBhdGlibGUgdmFsdWVzIGZvciBvdGhlciBmaWVsZHMuICBUaGlzIGlzIGEKKyAgICAvLyAgICAgdHJhbnNpdGlvbmFsIGZvcm1hdC4KKyAgICAvLyAtIDIgKG5vdCBpbXBsZW1lbnRlZCB5ZXQpIGEgZnV0dXJlIHZlcnNpb24sIGluIHdoaWNoIGZpZWxkc1tdLAorICAgIC8vICAgICBhcmVGaWVsZHNTZXQsIGFuZCBpc1RpbWVTZXQgYmVjb21lIHRyYW5zaWVudCwgYW5kIGlzU2V0W10gaXMKKyAgICAvLyAgICAgcmVtb3ZlZC4gSW4gSkRLIDEuMS42IHdlIHdyaXRlIGEgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCB2ZXJzaW9uIDIuCisgICAgLy8gc3RhdGljIGZpbmFsIGludCAgICAgICAgY3VycmVudFNlcmlhbFZlcnNpb24gPSAxOworICAgIAorICAgIC8qKgorICAgICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzZXJpYWxpemVkIGRhdGEgb24gdGhlIHN0cmVhbS4gIFBvc3NpYmxlIHZhbHVlczoKKyAgICAgKiA8ZGw+CisgICAgICogPGR0PjxiPjA8L2I+IG9yIG5vdCBwcmVzZW50IG9uIHN0cmVhbTwvZHQ+CisgICAgICogPGRkPgorICAgICAqIEpESyAxLjEuNSBvciBlYXJsaWVyLgorICAgICAqIDwvZGQ+CisgICAgICogPGR0PjxiPjE8L2I+PC9kdD4KKyAgICAgKiA8ZGQ+CisgICAgICogSkRLIDEuMS42IG9yIGxhdGVyLiAgV3JpdGVzIGEgY29ycmVjdCAndGltZScgdmFsdWUKKyAgICAgKiBhcyB3ZWxsIGFzIGNvbXBhdGlibGUgdmFsdWVzIGZvciBvdGhlciBmaWVsZHMuICBUaGlzIGlzIGEKKyAgICAgKiB0cmFuc2l0aW9uYWwgZm9ybWF0LgorICAgICAqIDwvZGQ+CisgICAgICogPC9kbD4KKyAgICAgKiBXaGVuIHN0cmVhbWluZyBvdXQgdGhpcyBjbGFzcywgdGhlIG1vc3QgcmVjZW50IGZvcm1hdAorICAgICAqIGFuZCB0aGUgaGlnaGVzdCBhbGxvd2FibGUgPGNvZGU+c2VyaWFsVmVyc2lvbk9uU3RyZWFtPC9jb2RlPgorICAgICAqIGlzIHdyaXR0ZW4uCisgICAgICogQHNlcmlhbAorICAgICAqIEBzaW5jZSBKREsxLjEuNgorICAgICAqLworICAgIC8vIHByaXZhdGUgaW50ICAgICAgICAgICAgIHNlcmlhbFZlcnNpb25PblN0cmVhbSA9IGN1cnJlbnRTZXJpYWxWZXJzaW9uOworCisgICAgLy8gUHJvY2xhaW0gc2VyaWFsaXphdGlvbiBjb21wYXRpYmlsaXR5IHdpdGggSkRLIDEuMQorICAgIC8vIHN0YXRpYyBmaW5hbCBsb25nICAgICAgIHNlcmlhbFZlcnNpb25VSUQgPSAtMTgwNzU0NzUwNTgyMTU5MDY0Mkw7CisKKyAgICAvKioKKyAgICAgKiBCaXRtYXNrIGZvciBpbnRlcm5hbFNldCgpIGRlZmluaW5nIHdoaWNoIGZpZWxkcyBtYXkgbGVnYWxseSBiZSBzZXQKKyAgICAgKiBieSBzdWJjbGFzc2VzLiAgQW55IGF0dGVtcHQgdG8gc2V0IGEgZmllbGQgbm90IGluIHRoaXMgYml0bWFzaworICAgICAqIHJlc3VsdHMgaW4gYW4gZXhjZXB0aW9uLCBiZWNhdXNlIHN1Y2ggZmllbGRzIG11c3QgYmUgc2V0IGJ5IHRoZSBiYXNlCisgICAgICogY2xhc3MuCisgICAgICovCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50IGludGVybmFsU2V0TWFzazsKKworICAgIC8qKgorICAgICAqIFRoZSBHcmVnb3JpYW4geWVhciwgYXMgY29tcHV0ZWQgYnkgY29tcHV0ZUdyZWdvcmlhbkZpZWxkcygpIGFuZAorICAgICAqIHJldHVybmVkIGJ5IGdldEdyZWdvcmlhblllYXIoKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgZ3JlZ29yaWFuWWVhcjsKKworICAgIC8qKgorICAgICAqIFRoZSBHcmVnb3JpYW4gbW9udGgsIGFzIGNvbXB1dGVkIGJ5IGNvbXB1dGVHcmVnb3JpYW5GaWVsZHMoKSBhbmQKKyAgICAgKiByZXR1cm5lZCBieSBnZXRHcmVnb3JpYW5Nb250aCgpLgorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCBncmVnb3JpYW5Nb250aDsKKworICAgIC8qKgorICAgICAqIFRoZSBHcmVnb3JpYW4gZGF5IG9mIHRoZSB5ZWFyLCBhcyBjb21wdXRlZCBieQorICAgICAqIGNvbXB1dGVHcmVnb3JpYW5GaWVsZHMoKSBhbmQgcmV0dXJuZWQgYnkgZ2V0R3JlZ29yaWFuRGF5T2ZZZWFyKCkuCisgICAgICovCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50IGdyZWdvcmlhbkRheU9mWWVhcjsKKworICAgIC8qKgorICAgICAqIFRoZSBHcmVnb3JpYW4gZGF5IG9mIHRoZSBtb250aCwgYXMgY29tcHV0ZWQgYnkKKyAgICAgKiBjb21wdXRlR3JlZ29yaWFuRmllbGRzKCkgYW5kIHJldHVybmVkIGJ5IGdldEdyZWdvcmlhbkRheU9mTW9udGgoKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgZ3JlZ29yaWFuRGF5T2ZNb250aDsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBDYWxlbmRhciB3aXRoIHRoZSBkZWZhdWx0IHRpbWUgem9uZQorICAgICAqIGFuZCBsb2NhbGUuCisgICAgICogQHNlZSAgICAgVGltZVpvbmUjZ2V0RGVmYXVsdAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBDYWxlbmRhcigpCisgICAgeworICAgICAgICB0aGlzKFRpbWVab25lLmdldERlZmF1bHQoKSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIGNhbGVuZGFyIHdpdGggdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUgYW5kIGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gem9uZSB0aGUgdGltZSB6b25lIHRvIHVzZQorICAgICAqIEBwYXJhbSBhTG9jYWxlIHRoZSBsb2NhbGUgZm9yIHRoZSB3ZWVrIGRhdGEKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQ2FsZW5kYXIoVGltZVpvbmUgem9uZSwgTG9jYWxlIGFMb2NhbGUpCisgICAgeworICAgICAgICB0aGlzLnpvbmUgPSB6b25lOworICAgICAgICBzZXRXZWVrQ291bnREYXRhKGFMb2NhbGUpOworICAgICAgICBzZXRXZWVrZW5kRGF0YShhTG9jYWxlKTsKKyAgICAgICAgaW5pdEludGVybmFsKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXRJbnRlcm5hbCgpCisgICAgeworICAgICAgICAvLyBBbGxvY2F0ZSBmaWVsZHMgdGhyb3VnaCB0aGUgZnJhbWV3b3JrIG1ldGhvZC4gIFN1YmNsYXNzZXMKKyAgICAgICAgLy8gbWF5IG92ZXJyaWRlIHRoaXMgdG8gZGVmaW5lIGFkZGl0aW9uYWwgZmllbGRzLgorICAgICAgICBmaWVsZHMgPSBoYW5kbGVDcmVhdGVGaWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcyA9PSBudWxsIHx8IGZpZWxkcy5sZW5ndGggPCBCQVNFX0ZJRUxEX0NPVU5UIHx8CisgICAgICAgICAgICBmaWVsZHMubGVuZ3RoID4gTUFYX0ZJRUxEX0NPVU5UKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiSW52YWxpZCBmaWVsZHNbXSIpOworICAgICAgICB9CisgICAgICAgIHN0YW1wID0gbmV3IGludFtmaWVsZHMubGVuZ3RoXTsKKyAgICAgICAgaW50IG1hc2sgPSAoMSA8PCBFUkEpIHwKKyAgICAgICAgICAgICgxIDw8IFlFQVIpIHwKKyAgICAgICAgICAgICgxIDw8IE1PTlRIKSB8CisgICAgICAgICAgICAoMSA8PCBEQVlfT0ZfTU9OVEgpIHwKKyAgICAgICAgICAgICgxIDw8IERBWV9PRl9ZRUFSKSB8CisgICAgICAgICAgICAoMSA8PCBFWFRFTkRFRF9ZRUFSKTsKKyAgICAgICAgZm9yIChpbnQgaT1CQVNFX0ZJRUxEX0NPVU5UOyBpPGZpZWxkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbWFzayB8PSAoMSA8PCBpKTsKKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbFNldE1hc2sgPSBtYXNrOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgYSBjYWxlbmRhciB1c2luZyB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgYW5kIGxvY2FsZS4KKyAgICAgKiBAcmV0dXJuIGEgQ2FsZW5kYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgQ2FsZW5kYXIgZ2V0SW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKFRpbWVab25lLmdldERlZmF1bHQoKSwgTG9jYWxlLmdldERlZmF1bHQoKSwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyBhIGNhbGVuZGFyIHVzaW5nIHRoZSBzcGVjaWZpZWQgdGltZSB6b25lIGFuZCBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gem9uZSB0aGUgdGltZSB6b25lIHRvIHVzZQorICAgICAqIEByZXR1cm4gYSBDYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBDYWxlbmRhciBnZXRJbnN0YW5jZShUaW1lWm9uZSB6b25lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKHpvbmUsIExvY2FsZS5nZXREZWZhdWx0KCksIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgYSBjYWxlbmRhciB1c2luZyB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgYW5kIHNwZWNpZmllZCBsb2NhbGUuCisgICAgICogQHBhcmFtIGFMb2NhbGUgdGhlIGxvY2FsZSBmb3IgdGhlIHdlZWsgZGF0YQorICAgICAqIEByZXR1cm4gYSBDYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBDYWxlbmRhciBnZXRJbnN0YW5jZShMb2NhbGUgYUxvY2FsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRJbnN0YW5jZShUaW1lWm9uZS5nZXREZWZhdWx0KCksIGFMb2NhbGUsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgYSBjYWxlbmRhciB3aXRoIHRoZSBzcGVjaWZpZWQgdGltZSB6b25lIGFuZCBsb2NhbGUuCisgICAgICogQHBhcmFtIHpvbmUgdGhlIHRpbWUgem9uZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gYUxvY2FsZSB0aGUgbG9jYWxlIGZvciB0aGUgd2VlayBkYXRhCisgICAgICogQHJldHVybiBhIENhbGVuZGFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIENhbGVuZGFyIGdldEluc3RhbmNlKFRpbWVab25lIHpvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlIGFMb2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKHpvbmUsIGFMb2NhbGUsIG51bGwpOworICAgIH0KKworICAgIC8vID09PT0gRmFjdG9yeSBTdHVmZiA9PT09CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBjYWxlbmRhciBvZiBmb3IgdGhlIFRpbWVab25lIGFuZCBsb2NhbGUuICBJZiBmYWN0b3J5TmFtZSBpcworICAgICAqIG5vdCBudWxsLCBsb29rcyBpbiB0aGUgY29sbGVjdGlvbiBvZiBDYWxlbmRhckZhY3RvcmllcyBmb3IgYSBtYXRjaAorICAgICAqIGFuZCB1c2VzIHRoYXQgZmFjdG9yeSB0byBpbnN0YW50aWF0ZSB0aGUgY2FsZW5kYXIuICBPdGhlcndpc2UsIGl0CisgICAgICogdXNlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCBmb3IgdGhlIGxvY2FsZS4KKyAgICAgKiBAcHJvdG90eXBlCisgICAgICovCisgICAgLyogcHVibGljICovIHN0YXRpYyBzeW5jaHJvbml6ZWQgQ2FsZW5kYXIgZ2V0SW5zdGFuY2UoVGltZVpvbmUgem9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbGUgbG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmYWN0b3J5TmFtZSkKKyAgICB7CisgICAgICAgIENhbGVuZGFyRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKKyAgICAgICAgaWYgKGZhY3RvcnlOYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSAoQ2FsZW5kYXJGYWN0b3J5KWdldEZhY3RvcnlNYXAoKS5nZXQoZmFjdG9yeU5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZhY3RvcnkgPT0gbnVsbCAmJiBzZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSAoQ2FsZW5kYXJGYWN0b3J5KXNlcnZpY2UuZ2V0KGxvY2FsZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFjdG9yeSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKHpvbmUsIGxvY2FsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFjdG9yeS5jcmVhdGUoem9uZSwgbG9jYWxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgbG9jYWxlcyBmb3Igd2hpY2ggQ2FsZW5kYXJzIGFyZSBpbnN0YWxsZWQuCisgICAgICogQHJldHVybiB0aGUgbGlzdCBvZiBsb2NhbGVzIGZvciB3aGljaCBDYWxlbmRhcnMgYXJlIGluc3RhbGxlZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvY2FsZVtdIGdldEF2YWlsYWJsZUxvY2FsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNlcnZpY2UgPT0gbnVsbAorICAgICAgICAgICAgPyBJQ1VMb2NhbGVEYXRhLmdldEF2YWlsYWJsZUxvY2FsZXMoKQorICAgICAgICAgICAgOiBzZXJ2aWNlLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBNYXAgZmFjdG9yeU1hcDsKKyAgICBwcml2YXRlIHN0YXRpYyBNYXAgZ2V0RmFjdG9yeU1hcCgpIHsKKyAgICAgICAgaWYgKGZhY3RvcnlNYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgTWFwIG0gPSBuZXcgSGFzaE1hcCg1KTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICBhZGRGYWN0b3J5KG0sIEJ1ZGRoaXN0Q2FsZW5kYXIuZmFjdG9yeSgpKTsKKyAgICAgICAgICAgIGFkZEZhY3RvcnkobSwgQ2hpbmVzZUNhbGVuZGFyLmZhY3RvcnkoKSk7CisgICAgICAgICAgICBhZGRGYWN0b3J5KG0sIEdyZWdvcmlhbkNhbGVuZGFyLmZhY3RvcnkoKSk7CisgICAgICAgICAgICBhZGRGYWN0b3J5KG0sIEhlYnJld0NhbGVuZGFyLmZhY3RvcnkoKSk7CisgICAgICAgICAgICBhZGRGYWN0b3J5KG0sIElzbGFtaWNDYWxlbmRhci5mYWN0b3J5KCkpOworICAgICAgICAgICAgYWRkRmFjdG9yeShtLCBKYXBhbmVzZUNhbGVuZGFyLmZhY3RvcnkoKSk7CisgICAgICAgICAgICAqLworICAgICAgICAgICAgZmFjdG9yeU1hcCA9IG07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhY3RvcnlNYXA7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRGYWN0b3J5KE1hcCBtLCBDYWxlbmRhckZhY3RvcnkgZikgeworICAgICAgICBtLnB1dChmLmZhY3RvcnlOYW1lKCksIGYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHNldCBvZiBhbGwgdGhlIHJlZ2lzdGVyZWQgY2FsZW5kYXIgZmFjdG9yeSBuYW1lcy4KKyAgICAgKiBAcHJvdG90eXBlCisgICAgICovCisgICAgLyogcHVibGljICovIHN0YXRpYyBTZXQgZ2V0Q2FsZW5kYXJGYWN0b3J5TmFtZXMoKSB7CisgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVTZXQoZ2V0RmFjdG9yeU1hcCgpLmtleVNldCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciBhIG5ldyBDYWxlbmRhckZhY3RvcnkuICBnZXRJbnN0YW5jZShUaW1lWm9uZSwgTG9jYWxlLCBTdHJpbmcpIHdpbGwKKyAgICAgKiB0cnkgdG8gbG9jYXRlIGEgcmVnaXN0ZXJlZCBmYWN0b3JpZXMgbWF0Y2hpbmcgdGhlIGZhY3RvcnlOYW1lLiAgT25seSByZWdpc3RlcmVkCisgICAgICogZmFjdG9yaWVzIHdpbGwgYmUgZm91bmQuCisgICAgICogQHByb3RvdHlwZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcmVnaXN0ZXJGYWN0b3J5KENhbGVuZGFyRmFjdG9yeSBmYWN0b3J5KSB7CisgICAgICAgIGlmIChmYWN0b3J5ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZhY3RvcnkgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGdldEZhY3RvcnlNYXAoKS5wdXQoZmFjdG9yeS5mYWN0b3J5TmFtZSgpLCBmYWN0b3J5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBvdmVycmlkZSBvZiByZWdpc3RlcihDYWxlbmRhckZhY3RvcnksIExvY2FsZSwgYm9vbGVhbik7CisgICAgICogQHByb3RvdHlwZQorICAgICAqLworICAgIC8qIHB1YmxpYyAqLyBzdGF0aWMgT2JqZWN0IHJlZ2lzdGVyKENhbGVuZGFyRmFjdG9yeSBmYWN0b3J5LCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiByZWdpc3RlcihmYWN0b3J5LCBsb2NhbGUsIHRydWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyBhIGRlZmF1bHQgQ2FsZW5kYXJGYWN0b3J5IGZvciB0aGUgcHJvdmlkZWQgbG9jYWxlLgorICAgICAqIElmIHRoZSBmYWN0b3J5IGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgd2l0aAorICAgICAqIHJlZ2lzdGVyRmFjdG9yeSwgaXQgd2lsbCBiZS4gIAorICAgICAqIEBwcm90b3R5cGUKKyAgICAgKi8KKyAgICAvKiBwdWJsaWMgKi8gc3RhdGljIE9iamVjdCByZWdpc3RlcihDYWxlbmRhckZhY3RvcnkgZmFjdG9yeSwgTG9jYWxlIGxvY2FsZSwgYm9vbGVhbiB2aXNpYmxlKSB7CisgICAgICAgIGlmIChmYWN0b3J5ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNhbGVuZGFyIG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICByZWdpc3RlckZhY3RvcnkoZmFjdG9yeSk7CisgICAgICAgIHJldHVybiBnZXRTZXJ2aWNlKCkucmVnaXN0ZXJPYmplY3QoZmFjdG9yeSwgbG9jYWxlLCB2aXNpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBMb2NhbGVLZXlGYWN0b3J5LlZJU0lCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IExvY2FsZUtleUZhY3RvcnkuSU5WSVNJQkxFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbnJlZ2lzdGVyIHRoZSBDYWxlbmRhckZhY3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5IAorICAgICAqIChvYnRhaW5lZCBmcm9tIHJlZ2lzdGVyKS4KKyAgICAgKiBAcHJvdG90eXBlCisgICAgICovCisgICAgLyogcHVibGljICovIHN0YXRpYyBib29sZWFuIHVucmVnaXN0ZXIoT2JqZWN0IHJlZ2lzdHJ5S2V5KSB7CisgICAgICAgIHJldHVybiBzZXJ2aWNlID09IG51bGwgCisgICAgICAgICAgICA/IGZhbHNlCisgICAgICAgICAgICA6IHNlcnZpY2UudW5yZWdpc3RlckZhY3RvcnkoKEZhY3RvcnkpcmVnaXN0cnlLZXkpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIElDVUxvY2FsZVNlcnZpY2Ugc2VydmljZSA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgSUNVTG9jYWxlU2VydmljZSBnZXRTZXJ2aWNlKCkgeworICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICBJQ1VMb2NhbGVTZXJ2aWNlIG5ld1NlcnZpY2UgPSBuZXcgSUNVTG9jYWxlU2VydmljZSgiQ2FsZW5kYXIiKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICBjbGFzcyBSQkNhbGVuZGFyRmFjdG9yeSBleHRlbmRzIElDVVJlc291cmNlQnVuZGxlRmFjdG9yeSB7CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBoYW5kbGVDcmVhdGUoTG9jYWxlIGxvY2FsZSwgaW50IGtpbmQsIElDVVNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gR3JlZ29yaWFuQ2FsZW5kYXIuZmFjdG9yeSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld1NlcnZpY2UucmVnaXN0ZXJGYWN0b3J5KG5ldyBSQkNhbGVuZGFyRmFjdG9yeSgpKTsKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENhbGVuZGFyLmNsYXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlID0gbmV3U2VydmljZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcnZpY2U7CisgICAgfQorCisgICAgLy8gPT09PSBFbmQgb2YgZmFjdG9yeSBTdHVmZiA9PT09CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoaXMgQ2FsZW5kYXIncyBjdXJyZW50IHRpbWUuCisgICAgICogQHJldHVybiB0aGUgY3VycmVudCB0aW1lLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBEYXRlIGdldFRpbWUoKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0ZSggZ2V0VGltZUluTWlsbGlzKCkgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoaXMgQ2FsZW5kYXIncyBjdXJyZW50IHRpbWUgd2l0aCB0aGUgZ2l2ZW4gRGF0ZS4KKyAgICAgKiA8cD4KKyAgICAgKiBOb3RlOiBDYWxsaW5nIDxjb2RlPnNldFRpbWUoKTwvY29kZT4gd2l0aAorICAgICAqIDxjb2RlPkRhdGUoTG9uZy5NQVhfVkFMVUUpPC9jb2RlPiBvciA8Y29kZT5EYXRlKExvbmcuTUlOX1ZBTFVFKTwvY29kZT4KKyAgICAgKiBtYXkgeWllbGQgaW5jb3JyZWN0IGZpZWxkIHZhbHVlcyBmcm9tIDxjb2RlPmdldCgpPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gZGF0ZSB0aGUgZ2l2ZW4gRGF0ZS4gIAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFRpbWUoRGF0ZSBkYXRlKSB7CisgICAgICAgIHNldFRpbWVJbk1pbGxpcyggZGF0ZS5nZXRUaW1lKCkgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoaXMgQ2FsZW5kYXIncyBjdXJyZW50IHRpbWUgYXMgYSBsb25nLgorICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBhcyBVVEMgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVwb2NoLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBsb25nIGdldFRpbWVJbk1pbGxpcygpIHsKKyAgICAgICAgaWYgKCFpc1RpbWVTZXQpIHVwZGF0ZVRpbWUoKTsKKyAgICAgICAgcmV0dXJuIHRpbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGlzIENhbGVuZGFyJ3MgY3VycmVudCB0aW1lIGZyb20gdGhlIGdpdmVuIGxvbmcgdmFsdWUuCisgICAgICogQHBhcmFtIGRhdGUgdGhlIG5ldyB0aW1lIGluIFVUQyBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZXBvY2guCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGltZUluTWlsbGlzKCBsb25nIG1pbGxpcyApIHsKKyAgICAgICAgaWYgKG1pbGxpcyA+IE1BWF9NSUxMSVMpIHsKKyAgICAgICAgICAgIG1pbGxpcyA9IE1BWF9NSUxMSVM7CisgICAgICAgIH0gZWxzZSBpZiAobWlsbGlzIDwgTUlOX01JTExJUykgeworICAgICAgICAgICAgbWlsbGlzID0gTUlOX01JTExJUzsKKyAgICAgICAgfQorICAgICAgICB0aW1lID0gbWlsbGlzOworICAgICAgICBpc1RpbWVTZXQgPSB0cnVlOworICAgICAgICBjb21wdXRlRmllbGRzKCk7CisgICAgICAgIGFyZUZpZWxkc1NldCA9IHRydWU7CisgICAgICAgIGFyZUFsbEZpZWxkc1NldCA9IHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gdGltZSBmaWVsZC4KKyAgICAgKiBAcGFyYW0gZmllbGQgdGhlIGdpdmVuIHRpbWUgZmllbGQuCisgICAgICogQHJldHVybiB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiB0aW1lIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0KGludCBmaWVsZCkKKyAgICB7CisgICAgICAgIGNvbXBsZXRlKCk7CisgICAgICAgIHJldHVybiBmaWVsZHNbZmllbGRdOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIHRpbWUgZmllbGQuICBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZAorICAgICAqIGZvciBzdWJjbGFzc2VzIHRoYXQgZG9lcyA8ZW0+bm90PC9lbT4gdHJpZ2dlciBhbnkgY2FsY3VsYXRpb25zLgorICAgICAqIEBwYXJhbSBmaWVsZCB0aGUgZ2l2ZW4gdGltZSBmaWVsZC4KKyAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHRpbWUgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBpbnRlcm5hbEdldChpbnQgZmllbGQpCisgICAgeworICAgICAgICByZXR1cm4gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgCisgICAgLyoqCisgICAgICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiB0aW1lIGZpZWxkLCBvciByZXR1cm4gdGhlIGdpdmVuIGRlZmF1bHQKKyAgICAgKiB2YWx1ZSBpZiB0aGUgZmllbGQgaXMgbm90IHNldC4gIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIGZvcgorICAgICAqIHN1YmNsYXNzZXMgdGhhdCBkb2VzIDxlbT5ub3Q8L2VtPiB0cmlnZ2VyIGFueSBjYWxjdWxhdGlvbnMuCisgICAgICogQHBhcmFtIGZpZWxkIHRoZSBnaXZlbiB0aW1lIGZpZWxkLgorICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdmFsdWUgdG8gcmV0dXJuIGlmIGZpZWxkIGlzIG5vdCBzZXQKKyAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHRpbWUgZmllbGQgb2YgZGVmYXVsdFZhbHVlIGlmIHRoZQorICAgICAqIGZpZWxkIGlzIHVuc2V0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBpbnRlcm5hbEdldChpbnQgZmllbGQsIGludCBkZWZhdWx0VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIChzdGFtcFtmaWVsZF0gPiBVTlNFVCkgPyBmaWVsZHNbZmllbGRdIDogZGVmYXVsdFZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHRpbWUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuCisgICAgICogQHBhcmFtIGZpZWxkIHRoZSBnaXZlbiB0aW1lIGZpZWxkLgorICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYmUgc2V0IGZvciB0aGUgZ2l2ZW4gdGltZSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoaW50IGZpZWxkLCBpbnQgdmFsdWUpCisgICAgeworICAgICAgICBpc1RpbWVTZXQgPSBmYWxzZTsKKyAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHZhbHVlOworICAgICAgICBzdGFtcFtmaWVsZF0gPSBuZXh0U3RhbXArKzsKKyAgICAgICAgYXJlRmllbGRzU2V0ID0gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgdmFsdWVzIGZvciB0aGUgZmllbGRzIHllYXIsIG1vbnRoLCBhbmQgZGF0ZS4KKyAgICAgKiBQcmV2aW91cyB2YWx1ZXMgb2Ygb3RoZXIgZmllbGRzIGFyZSByZXRhaW5lZC4gIElmIHRoaXMgaXMgbm90IGRlc2lyZWQsCisgICAgICogY2FsbCA8Y29kZT5jbGVhcjwvY29kZT4gZmlyc3QuCisgICAgICogQHBhcmFtIHllYXIgdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBZRUFSIHRpbWUgZmllbGQuCisgICAgICogQHBhcmFtIG1vbnRoIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgTU9OVEggdGltZSBmaWVsZC4KKyAgICAgKiBNb250aCB2YWx1ZSBpcyAwLWJhc2VkLiBlLmcuLCAwIGZvciBKYW51YXJ5LgorICAgICAqIEBwYXJhbSBkYXRlIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgREFURSB0aW1lIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF0ZSkKKyAgICB7CisgICAgICAgIHNldChZRUFSLCB5ZWFyKTsKKyAgICAgICAgc2V0KE1PTlRILCBtb250aCk7CisgICAgICAgIHNldChEQVRFLCBkYXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBmaWVsZHMgeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIGFuZCBtaW51dGUuCisgICAgICogUHJldmlvdXMgdmFsdWVzIG9mIG90aGVyIGZpZWxkcyBhcmUgcmV0YWluZWQuICBJZiB0aGlzIGlzIG5vdCBkZXNpcmVkLAorICAgICAqIGNhbGwgPGNvZGU+Y2xlYXI8L2NvZGU+IGZpcnN0LgorICAgICAqIEBwYXJhbSB5ZWFyIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgWUVBUiB0aW1lIGZpZWxkLgorICAgICAqIEBwYXJhbSBtb250aCB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIE1PTlRIIHRpbWUgZmllbGQuCisgICAgICogTW9udGggdmFsdWUgaXMgMC1iYXNlZC4gZS5nLiwgMCBmb3IgSmFudWFyeS4KKyAgICAgKiBAcGFyYW0gZGF0ZSB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIERBVEUgdGltZSBmaWVsZC4KKyAgICAgKiBAcGFyYW0gaG91ciB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIEhPVVJfT0ZfREFZIHRpbWUgZmllbGQuCisgICAgICogQHBhcmFtIG1pbnV0ZSB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIE1JTlVURSB0aW1lIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF0ZSwgaW50IGhvdXIsIGludCBtaW51dGUpCisgICAgeworICAgICAgICBzZXQoWUVBUiwgeWVhcik7CisgICAgICAgIHNldChNT05USCwgbW9udGgpOworICAgICAgICBzZXQoREFURSwgZGF0ZSk7CisgICAgICAgIHNldChIT1VSX09GX0RBWSwgaG91cik7CisgICAgICAgIHNldChNSU5VVEUsIG1pbnV0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgdmFsdWVzIGZvciB0aGUgZmllbGRzIHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW51dGUsIGFuZCBzZWNvbmQuCisgICAgICogUHJldmlvdXMgdmFsdWVzIG9mIG90aGVyIGZpZWxkcyBhcmUgcmV0YWluZWQuICBJZiB0aGlzIGlzIG5vdCBkZXNpcmVkLAorICAgICAqIGNhbGwgPGNvZGU+Y2xlYXI8L2NvZGU+IGZpcnN0LgorICAgICAqIEBwYXJhbSB5ZWFyIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgWUVBUiB0aW1lIGZpZWxkLgorICAgICAqIEBwYXJhbSBtb250aCB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIE1PTlRIIHRpbWUgZmllbGQuCisgICAgICogTW9udGggdmFsdWUgaXMgMC1iYXNlZC4gZS5nLiwgMCBmb3IgSmFudWFyeS4KKyAgICAgKiBAcGFyYW0gZGF0ZSB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIERBVEUgdGltZSBmaWVsZC4KKyAgICAgKiBAcGFyYW0gaG91ciB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIEhPVVJfT0ZfREFZIHRpbWUgZmllbGQuCisgICAgICogQHBhcmFtIG1pbnV0ZSB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIE1JTlVURSB0aW1lIGZpZWxkLgorICAgICAqIEBwYXJhbSBzZWNvbmQgdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBTRUNPTkQgdGltZSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoaW50IHllYXIsIGludCBtb250aCwgaW50IGRhdGUsIGludCBob3VyLCBpbnQgbWludXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vjb25kKQorICAgIHsKKyAgICAgICAgc2V0KFlFQVIsIHllYXIpOworICAgICAgICBzZXQoTU9OVEgsIG1vbnRoKTsKKyAgICAgICAgc2V0KERBVEUsIGRhdGUpOworICAgICAgICBzZXQoSE9VUl9PRl9EQVksIGhvdXIpOworICAgICAgICBzZXQoTUlOVVRFLCBtaW51dGUpOworICAgICAgICBzZXQoU0VDT05ELCBzZWNvbmQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFycyB0aGUgdmFsdWVzIG9mIGFsbCB0aGUgdGltZSBmaWVsZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGZpZWxkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZmllbGRzW2ldID0gc3RhbXBbaV0gPSAwOyAvLyBVTlNFVCA9PSAwCisgICAgICAgIH0KKyAgICAgICAgYXJlRmllbGRzU2V0ID0gZmFsc2U7CisgICAgICAgIGFyZUFsbEZpZWxkc1NldCA9IGZhbHNlOworICAgICAgICBpc1RpbWVTZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDbGVhcnMgdGhlIHZhbHVlIGluIHRoZSBnaXZlbiB0aW1lIGZpZWxkLgorICAgICAqIEBwYXJhbSBmaWVsZCB0aGUgdGltZSBmaWVsZCB0byBiZSBjbGVhcmVkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyKGludCBmaWVsZCkKKyAgICB7CisgICAgICAgIGZpZWxkc1tmaWVsZF0gPSAwOworICAgICAgICBzdGFtcFtmaWVsZF0gPSBVTlNFVDsKKyAgICAgICAgYXJlRmllbGRzU2V0ID0gZmFsc2U7CisgICAgICAgIGFyZUFsbEZpZWxkc1NldCA9IGZhbHNlOworICAgICAgICBpc1RpbWVTZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aW1lIGZpZWxkIGhhcyBhIHZhbHVlIHNldC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHRpbWUgZmllbGQgaGFzIGEgdmFsdWUgc2V0OyBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTZXQoaW50IGZpZWxkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YW1wW2ZpZWxkXSAhPSBVTlNFVDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaWxscyBpbiBhbnkgdW5zZXQgZmllbGRzIGluIHRoZSB0aW1lIGZpZWxkIGxpc3QuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgY29tcGxldGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFpc1RpbWVTZXQpIHVwZGF0ZVRpbWUoKTsKKyAgICAgICAgaWYgKCFhcmVGaWVsZHNTZXQpIHsKKyAgICAgICAgICAgIGNvbXB1dGVGaWVsZHMoKTsgLy8gZmlsbHMgaW4gdW5zZXQgZmllbGRzCisgICAgICAgICAgICBhcmVGaWVsZHNTZXQgPSB0cnVlOworICAgICAgICAgICAgYXJlQWxsRmllbGRzU2V0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBhcmVzIHRoaXMgY2FsZW5kYXIgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QuCisgICAgICogVGhlIHJlc3VsdCBpcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhbmQgb25seSBpZiB0aGUgYXJndW1lbnQgaXMKKyAgICAgKiBub3QgPGNvZGU+bnVsbDwvY29kZT4gYW5kIGlzIGEgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IG9iamVjdCB0aGF0CisgICAgICogcmVwcmVzZW50cyB0aGUgc2FtZSBjYWxlbmRhciBhcyB0aGlzIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gb2JqIHRoZSBvYmplY3QgdG8gY29tcGFyZSB3aXRoLgorICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdHMgYXJlIHRoZSBzYW1lOworICAgICAqIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gb2JqKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5nZXRDbGFzcygpICE9IG9iai5nZXRDbGFzcygpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBDYWxlbmRhciB0aGF0ID0gKENhbGVuZGFyKSBvYmo7CisKKyAgICAgICAgcmV0dXJuIGlzRXF1aXZhbGVudFRvKHRoYXQpICYmCisgICAgICAgICAgICBnZXRUaW1lSW5NaWxsaXMoKSA9PSB0aGF0LmdldFRpbWUoKS5nZXRUaW1lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBDYWxlbmRhciBvYmplY3QgaXMgZXF1aXZhbGVudCB0byB0aGlzCisgICAgICogb25lLiAgQW4gZXF1aXZhbGVudCBDYWxlbmRhciB3aWxsIGJlaGF2ZSBleGFjdGx5IGFzIHRoaXMgb25lCisgICAgICogZG9lcywgYnV0IGl0IG1heSBiZSBzZXQgdG8gYSBkaWZmZXJlbnQgdGltZS4gIEJ5IGNvbnRyYXN0LCBmb3IKKyAgICAgKiB0aGUgZXF1YWxzKCkgbWV0aG9kIHRvIHJldHVybiB0cnVlLCB0aGUgb3RoZXIgQ2FsZW5kYXIgbXVzdAorICAgICAqIGJlIHNldCB0byB0aGUgc2FtZSB0aW1lLgorICAgICAqCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBDYWxlbmRhciB0byBiZSBjb21wYXJlZCB3aXRoIHRoaXMgQ2FsZW5kYXIgICAKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzRXF1aXZhbGVudFRvKENhbGVuZGFyIG90aGVyKSB7CisgICAgICAgIHJldHVybiB0aGlzLmdldENsYXNzKCkgPT0gb3RoZXIuZ2V0Q2xhc3MoKSAmJgorICAgICAgICAgICAgaXNMZW5pZW50KCkgPT0gb3RoZXIuaXNMZW5pZW50KCkgJiYKKyAgICAgICAgICAgIGdldEZpcnN0RGF5T2ZXZWVrKCkgPT0gb3RoZXIuZ2V0Rmlyc3REYXlPZldlZWsoKSAmJgorICAgICAgICAgICAgZ2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpID09IG90aGVyLmdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKSAmJgorICAgICAgICAgICAgZ2V0VGltZVpvbmUoKS5lcXVhbHMob3RoZXIuZ2V0VGltZVpvbmUoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGhhc2ggY29kZSBmb3IgdGhpcyBjYWxlbmRhci4KKyAgICAgKiBAcmV0dXJuIGEgaGFzaCBjb2RlIHZhbHVlIGZvciB0aGlzIG9iamVjdC4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgLyogRG9uJ3QgaW5jbHVkZSB0aGUgdGltZSBiZWNhdXNlIChhKSB3ZSBkb24ndCB3YW50IHRoZSBoYXNoIHZhbHVlIHRvCisgICAgICAgICAqIG1vdmUgYXJvdW5kIGp1c3QgYmVjYXVzZSBhIGNhbGVuZGFyIGlzIHNldCB0byBkaWZmZXJlbnQgdGltZXMsIGFuZAorICAgICAgICAgKiAoYikgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIGEgdGltZSBjb21wdXRhdGlvbiBqdXN0IHRvIGdldCBhIGhhc2guCisgICAgICAgICAqIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciB1bmVxdWFsIG9iamVjdHMgdG8gYWx3YXlzIGhhdmUKKyAgICAgICAgICogdW5lcXVhbCBoYXNoZXMsIGJ1dCBlcXVhbCBvYmplY3RzIG11c3QgaGF2ZSBlcXVhbCBoYXNoZXMuICAqLworICAgICAgICByZXR1cm4gKGxlbmllbnQgPyAxIDogMCkKKyAgICAgICAgICAgIHwgKGZpcnN0RGF5T2ZXZWVrIDw8IDEpCisgICAgICAgICAgICB8IChtaW5pbWFsRGF5c0luRmlyc3RXZWVrIDw8IDQpCisgICAgICAgICAgICB8ICh6b25lLmhhc2hDb2RlKCkgPDwgNyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHRoZSBtb21lbnQgdGhpcworICAgICAqIGNhbGVuZGFyIGlzIHNldCB0byBhbmQgdGhlIG1vbWVudCB0aGUgZ2l2ZW4gY2FsZW5kYXIgb3IgRGF0ZSBvYmplY3QKKyAgICAgKiBpcyBzZXQgdG8uCisgICAgICovCisgICAgcHJpdmF0ZSBsb25nIGNvbXBhcmUoT2JqZWN0IHRoYXQpIHsKKyAgICAgICAgbG9uZyB0aGF0TXM7CisgICAgICAgIGlmICh0aGF0IGluc3RhbmNlb2YgQ2FsZW5kYXIpIHsKKyAgICAgICAgICAgIHRoYXRNcyA9ICgoQ2FsZW5kYXIpdGhhdCkuZ2V0VGltZUluTWlsbGlzKCk7CisgICAgICAgIH0gZWxzZSBpZiAodGhhdCBpbnN0YW5jZW9mIERhdGUpIHsKKyAgICAgICAgICAgIHRoYXRNcyA9ICgoRGF0ZSl0aGF0KS5nZXRUaW1lKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRoYXQgKyAiaXMgbm90IGEgQ2FsZW5kYXIgb3IgRGF0ZSIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBnZXRUaW1lSW5NaWxsaXMoKSAtIHRoYXRNczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0aGUgdGltZSBmaWVsZCByZWNvcmRzLgorICAgICAqIEVxdWl2YWxlbnQgdG8gY29tcGFyaW5nIHJlc3VsdCBvZiBjb252ZXJzaW9uIHRvIFVUQy4KKyAgICAgKiBAcGFyYW0gd2hlbiB0aGUgQ2FsZW5kYXIgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGlzIENhbGVuZGFyLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB0aW1lIG9mIHRoaXMgQ2FsZW5kYXIgaXMgYmVmb3JlCisgICAgICogdGhlIHRpbWUgb2YgQ2FsZW5kYXIgd2hlbjsgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGJlZm9yZShPYmplY3Qgd2hlbikgeworICAgICAgICByZXR1cm4gY29tcGFyZSh3aGVuKSA8IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdGhlIHRpbWUgZmllbGQgcmVjb3Jkcy4KKyAgICAgKiBFcXVpdmFsZW50IHRvIGNvbXBhcmluZyByZXN1bHQgb2YgY29udmVyc2lvbiB0byBVVEMuCisgICAgICogQHBhcmFtIHdoZW4gdGhlIENhbGVuZGFyIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhpcyBDYWxlbmRhci4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGN1cnJlbnQgdGltZSBvZiB0aGlzIENhbGVuZGFyIGlzIGFmdGVyCisgICAgICogdGhlIHRpbWUgb2YgQ2FsZW5kYXIgd2hlbjsgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGFmdGVyKE9iamVjdCB3aGVuKSB7CisgICAgICAgIHJldHVybiBjb21wYXJlKHdoZW4pID4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0aGlzIENhbGVuZGFyIHdpdGggdGhhdCBEYXRlIG9yIENhbGVuZGFyJ3MgdGltZSwgdXNpbmcKKyAgICAgKiB0aGlzIENhbGVuZGFyJ3MgdGltZSB6b25lLCB3aXRoIHRoZSBncmFudWxhcml0eSBvZiB0aGUgcHJvdmlkZWQKKyAgICAgKiBmaWVsZC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgMCBpZiB0aGUgdGltZSBpcyB0aGUgc2FtZSwgPDAgaWYKKyAgICAgKiB0aGlzIGlzIGJlZm9yZSB0aGF0LCBhbmQgPjAgaWYgdGhpcyBpcyBhZnRlciB0aGF0LiAgVmFsaWQKKyAgICAgKiB2YWx1ZXMgZm9yIGZpZWxkIGFyZSBFUkEsIFlFQVIsIE1PTlRILCBXRUVLX09GX1lFQVIsIERBWV9PRl9ZRUFSLCBIT1VSLCBNSU5VVEUsCisgICAgICogU0VDT05ELgorICAgICAqIEBwcm90b3R5cGUKKyAgICAgKi8KKyAgICAvKiBwdWJsaWMgKi8gaW50IGNvbXBhcmUoQ2FsZW5kYXIgY2FsLCBpbnQgZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmUobmV3IERhdGUoY2FsLmdldFRpbWVJbk1pbGxpcygpKSwgZmllbGQpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGludFtdIEZJRUxETElTVCA9IHsgRVJBLCBZRUFSLCBNT05USCwgV0VFS19PRl9ZRUFSLCBEQVlfT0ZfWUVBUiwgSE9VUiwgTUlOVVRFLCBTRUNPTkQgfTsKKworICAgIC8qIEBwcm90b3R5cGUgKi8KKyAgICAvKiBwdWJsaWMgKi8gaW50IGNvbXBhcmUoRGF0ZSB3aGVuLCBpbnQgZmllbGQpIHsKKyAgICAgICAgbG9uZyBvbGRtcyA9IGdldFRpbWVJbk1pbGxpcygpOworICAgICAgICBpbnQgcmVzdWx0ID0gLTI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRklFTERMSVNULmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpbnQgZiA9IEZJRUxETElTVFtpXTsKKyAgICAgICAgICAgIGludCBkaWZmID0gZmllbGREaWZmZXJlbmNlKHdoZW4sIGYpOworICAgICAgICAgICAgaWYgKGRpZmYgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRpZmYgPiAwID8gMSA6IC0xOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChmID09IGZpZWxkKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzZXRUaW1lSW5NaWxsaXMob2xkbXMpOyAvLyByZXN0b3JlIGNhbGVuZGFyCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZmllbGQ6ICIgKyBmaWVsZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGlzIGZpZWxkIGNvdWxkIGhhdmUsIGdpdmVuIHRoZQorICAgICAqIGN1cnJlbnQgZGF0ZS4gIEZvciBleGFtcGxlLCB3aXRoIHRoZSBHcmVnb3JpYW4gZGF0ZSBGZWJydWFyeSAzLCAxOTk3CisgICAgICogYW5kIHRoZSB7QGxpbmsgI0RBWV9PRl9NT05USCBEQVlfT0ZfTU9OVEh9IGZpZWxkLCB0aGUgYWN0dWFsIG1heGltdW0KKyAgICAgKiBpcyAyODsgZm9yIEZlYnJ1YXJ5IDMsIDE5OTYgaXQgaXMgMjkuCisgICAgICoKKyAgICAgKiA8cD5UaGUgYWN0dWFsIG1heGltdW0gY29tcHV0YXRpb24gaWdub3JlcyBzbWFsbGVyIGZpZWxkcyBhbmQgdGhlCisgICAgICogY3VycmVudCB2YWx1ZSBvZiBsaWtlLXNpemVkIGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUgYWN0dWFsIG1heGltdW0KKyAgICAgKiBvZiB0aGUgREFZX09GX1lFQVIgb3IgTU9OVEggZGVwZW5kcyBvbmx5IG9uIHRoZSB5ZWFyIGFuZCBzdXByYS15ZWFyCisgICAgICogZmllbGRzLiAgVGhlIGFjdHVhbCBtYXhpbXVtIG9mIHRoZSBEQVlfT0ZfTU9OVEggZGVwZW5kcywgaW4KKyAgICAgKiBhZGRpdGlvbiwgb24gdGhlIE1PTlRIIGZpZWxkIGFuZCBhbnkgb3RoZXIgZmllbGRzIGF0IHRoYXQKKyAgICAgKiBncmFudWxhcml0eSAoc3VjaCBhcyBDaGluZXNlQ2FsZW5kYXIuSVNfTEVBUF9NT05USCkuICBUaGUKKyAgICAgKiBEQVlfT0ZfV0VFS19JTl9NT05USCBmaWVsZCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGN1cnJlbnQKKyAgICAgKiBEQVlfT0ZfV0VFSzsgaXQgcmV0dXJucyB0aGUgbWF4aW11bSBmb3IgYW55IGRheSBvZiB3ZWVrIGluIHRoZQorICAgICAqIGN1cnJlbnQgbW9udGguICBMaWtld2lzZSBmb3IgdGhlIFdFRUtfT0ZfTU9OVEggYW5kIFdFRUtfT0ZfWUVBUgorICAgICAqIGZpZWxkcy4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZmllbGQgdGhlIGZpZWxkIHdob3NlIG1heGltdW0gaXMgZGVzaXJlZAorICAgICAqIEByZXR1cm4gdGhlIG1heGltdW0gb2YgdGhlIGdpdmVuIGZpZWxkIGZvciB0aGUgY3VycmVudCBkYXRlIG9mIHRoaXMgY2FsZW5kYXIKKyAgICAgKiBAc2VlICNnZXRNYXhpbXVtCisgICAgICogQHNlZSAjZ2V0TGVhc3RNYXhpbXVtCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRBY3R1YWxNYXhpbXVtKGludCBmaWVsZCkgeworICAgICAgICBpbnQgcmVzdWx0OworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChmaWVsZCkgeworICAgICAgICBjYXNlIERBWV9PRl9NT05USDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWxlbmRhciBjYWwgPSAoQ2FsZW5kYXIpIGNsb25lKCk7CisgICAgICAgICAgICAgICAgY2FsLnByZXBhcmVHZXRBY3R1YWwoZmllbGQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVHZXRNb250aExlbmd0aChjYWwuZ2V0KEVYVEVOREVEX1lFQVIpLCBjYWwuZ2V0KE1PTlRIKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBWV9PRl9ZRUFSOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhbGVuZGFyIGNhbCA9IChDYWxlbmRhcikgY2xvbmUoKTsKKyAgICAgICAgICAgICAgICBjYWwucHJlcGFyZUdldEFjdHVhbChmaWVsZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZUdldFllYXJMZW5ndGgoY2FsLmdldChFWFRFTkRFRF9ZRUFSKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBWV9PRl9XRUVLOgorICAgICAgICBjYXNlIEFNX1BNOgorICAgICAgICBjYXNlIEhPVVI6CisgICAgICAgIGNhc2UgSE9VUl9PRl9EQVk6CisgICAgICAgIGNhc2UgTUlOVVRFOgorICAgICAgICBjYXNlIFNFQ09ORDoKKyAgICAgICAgY2FzZSBNSUxMSVNFQ09ORDoKKyAgICAgICAgY2FzZSBaT05FX09GRlNFVDoKKyAgICAgICAgY2FzZSBEU1RfT0ZGU0VUOgorICAgICAgICBjYXNlIERPV19MT0NBTDoKKyAgICAgICAgY2FzZSBKVUxJQU5fREFZOgorICAgICAgICBjYXNlIE1JTExJU0VDT05EU19JTl9EQVk6CisgICAgICAgICAgICAvLyBUaGVzZSBmaWVsZHMgYWxsIGhhdmUgZml4ZWQgbWluaW1hL21heGltYQorICAgICAgICAgICAgcmVzdWx0ID0gZ2V0TWF4aW11bShmaWVsZCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBmaWVsZHMsIGRvIGl0IHRoZSBoYXJkIHdheS4uLi4KKyAgICAgICAgICAgIHJlc3VsdCA9IGdldEFjdHVhbEhlbHBlcihmaWVsZCwgZ2V0TGVhc3RNYXhpbXVtKGZpZWxkKSwgZ2V0TWF4aW11bShmaWVsZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBtaW5pbXVtIHZhbHVlIHRoYXQgdGhpcyBmaWVsZCBjb3VsZCBoYXZlLCBnaXZlbiB0aGUgY3VycmVudCBkYXRlLgorICAgICAqIEZvciBtb3N0IGZpZWxkcywgdGhpcyBpcyB0aGUgc2FtZSBhcyB7QGxpbmsgI2dldE1pbmltdW0gZ2V0TWluaW11bX0KKyAgICAgKiBhbmQge0BsaW5rICNnZXRHcmVhdGVzdE1pbmltdW0gZ2V0R3JlYXRlc3RNaW5pbXVtfS4gIEhvd2V2ZXIsIHNvbWUgZmllbGRzLAorICAgICAqIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byB3ZWVrIG51bWJlciwgYXJlIG1vcmUgY29tcGxpY2F0ZWQuCisgICAgICogPHA+CisgICAgICogRm9yIGV4YW1wbGUsIGFzc3VtZSB7QGxpbmsgI2dldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsgZ2V0TWluaW1hbERheXNJbkZpcnN0V2Vla30KKyAgICAgKiByZXR1cm5zIDQgYW5kIHtAbGluayAjZ2V0Rmlyc3REYXlPZldlZWsgZ2V0Rmlyc3REYXlPZldlZWt9IHJldHVybnMgU1VOREFZLgorICAgICAqIElmIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoIGlzIFN1bmRheSwgTW9uZGF5LCBUdWVzZGF5LCBvciBXZWRuZXNkYXkKKyAgICAgKiB0aGVyZSB3aWxsIGJlIGZvdXIgb3IgbW9yZSBkYXlzIGluIHRoZSBmaXJzdCB3ZWVrLCBzbyBpdCB3aWxsIGJlIHdlZWsgbnVtYmVyIDEsCisgICAgICogYW5kIDxjb2RlPmdldEFjdHVhbE1pbmltdW0oV0VFS19PRl9NT05USCk8L2NvZGU+IHdpbGwgcmV0dXJuIDEuICBIb3dldmVyLAorICAgICAqIGlmIHRoZSBmaXJzdCBvZiB0aGUgbW9udGggaXMgYSBUaHVyc2RheSwgRnJpZGF5LCBvciBTYXR1cmRheSwgdGhlcmUgYXJlCisgICAgICogPGVtPm5vdDwvZW0+IGZvdXIgZGF5cyBpbiB0aGF0IHdlZWssIHNvIGl0IGlzIHdlZWsgbnVtYmVyIDAsIGFuZCAKKyAgICAgKiA8Y29kZT5nZXRBY3R1YWxNaW5pbXVtKFdFRUtfT0ZfTU9OVEgpPC9jb2RlPiB3aWxsIHJldHVybiAwLgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBmaWVsZCB0aGUgZmllbGQgd2hvc2UgYWN0dWFsIG1pbmltdW0gdmFsdWUgaXMgZGVzaXJlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBtaW5pbXVtIG9mIHRoZSBnaXZlbiBmaWVsZCBmb3IgdGhlIGN1cnJlbnQgZGF0ZSBvZiB0aGlzIGNhbGVuZGFyCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRNaW5pbXVtCisgICAgICogQHNlZSAjZ2V0R3JlYXRlc3RNaW5pbXVtCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRBY3R1YWxNaW5pbXVtKGludCBmaWVsZCkgeworICAgICAgICBpbnQgcmVzdWx0OworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChmaWVsZCkgeworICAgICAgICBjYXNlIERBWV9PRl9XRUVLOgorICAgICAgICBjYXNlIEFNX1BNOgorICAgICAgICBjYXNlIEhPVVI6CisgICAgICAgIGNhc2UgSE9VUl9PRl9EQVk6CisgICAgICAgIGNhc2UgTUlOVVRFOgorICAgICAgICBjYXNlIFNFQ09ORDoKKyAgICAgICAgY2FzZSBNSUxMSVNFQ09ORDoKKyAgICAgICAgY2FzZSBaT05FX09GRlNFVDoKKyAgICAgICAgY2FzZSBEU1RfT0ZGU0VUOgorICAgICAgICBjYXNlIERPV19MT0NBTDoKKyAgICAgICAgY2FzZSBKVUxJQU5fREFZOgorICAgICAgICBjYXNlIE1JTExJU0VDT05EU19JTl9EQVk6CisgICAgICAgICAgICAvLyBUaGVzZSBmaWVsZHMgYWxsIGhhdmUgZml4ZWQgbWluaW1hL21heGltYQorICAgICAgICAgICAgcmVzdWx0ID0gZ2V0TWluaW11bShmaWVsZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBmaWVsZHMsIGRvIGl0IHRoZSBoYXJkIHdheS4uLi4KKyAgICAgICAgICAgIHJlc3VsdCA9IGdldEFjdHVhbEhlbHBlcihmaWVsZCwgZ2V0R3JlYXRlc3RNaW5pbXVtKGZpZWxkKSwgZ2V0TWluaW11bShmaWVsZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlIHRoaXMgY2FsZW5kYXIgZm9yIGNvbXB1dGluZyB0aGUgYWN0dWFsIG1pbmltdW0gb3IgbWF4aW11bS4KKyAgICAgKiBUaGlzIG1ldGhvZCBtb2RpZmllcyB0aGlzIGNhbGVuZGFyJ3MgZmllbGRzOyBpdCBpcyBjYWxsZWQgb24gYQorICAgICAqIHRlbXBvcmFyeSBjYWxlbmRhci4KKyAgICAgKgorICAgICAqIDxwPlJhdGlvbmFsZTogVGhlIHNlbWFudGljcyBvZiBnZXRBY3R1YWxYeHgoKSBpcyB0byByZXR1cm4gdGhlCisgICAgICogbWF4aW11bSBvciBtaW5pbXVtIHZhbHVlIHRoYXQgdGhlIGdpdmVuIGZpZWxkIGNhbiB0YWtlLCB0YWtpbmcgaW50bworICAgICAqIGFjY291bnQgb3RoZXIgcmVsZXZhbnQgZmllbGRzLiAgSW4gZ2VuZXJhbCB0aGVzZSBvdGhlciBmaWVsZHMgYXJlCisgICAgICogbGFyZ2VyIGZpZWxkcy4gIEZvciBleGFtcGxlLCB3aGVuIGNvbXB1dGluZyB0aGUgYWN0dWFsIG1heGltdW0KKyAgICAgKiBEQVlfT0ZfTU9OVEgsIHRoZSBjdXJyZW50IHZhbHVlIG9mIERBWV9PRl9NT05USCBpdHNlbGYgaXMgaWdub3JlZCwKKyAgICAgKiBhcyBpcyB0aGUgdmFsdWUgb2YgYW55IGZpZWxkIHNtYWxsZXIuCisgICAgICoKKyAgICAgKiA8cD5UaGUgdGltZSBmaWVsZHMgYWxsIGhhdmUgZml4ZWQgbWluaW1hIGFuZCBtYXhpbWEsIHNvIHdlIGRvbid0CisgICAgICogbmVlZCB0byB3b3JyeSBhYm91dCB0aGVtLiAgVGhpcyBhbHNvIGxldHMgdXMgc2V0IHRoZQorICAgICAqIE1JTExJU0VDT05EU19JTl9EQVkgdG8gemVybyB0byBlcmFzZSBhbnkgZWZmZWN0cyB0aGUgdGltZSBmaWVsZHMKKyAgICAgKiBtaWdodCBoYXZlIHdoZW4gY29tcHV0aW5nIGRhdGUgZmllbGRzLgorICAgICAqCisgICAgICogPHA+REFZX09GX1dFRUsgaXMgYWRqdXN0ZWQgc3BlY2lhbGx5IGZvciB0aGUgV0VFS19PRl9NT05USCBhbmQKKyAgICAgKiBXRUVLX09GX1lFQVIgZmllbGRzIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGNvbXB1dGVkIGNvcnJlY3RseS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBwcmVwYXJlR2V0QWN0dWFsKGludCBmaWVsZCwgYm9vbGVhbiBpc01pbmltdW0pIHsKKyAgICAgICAgc2V0KE1JTExJU0VDT05EU19JTl9EQVksIDApOworCisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSBZRUFSOgorICAgICAgICBjYXNlIFlFQVJfV09ZOgorICAgICAgICBjYXNlIEVYVEVOREVEX1lFQVI6CisgICAgICAgICAgICBzZXQoREFZX09GX1lFQVIsIGdldEdyZWF0ZXN0TWluaW11bShEQVlfT0ZfWUVBUikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTU9OVEg6CisgICAgICAgICAgICBzZXQoREFZX09GX01PTlRILCBnZXRHcmVhdGVzdE1pbmltdW0oREFZX09GX01PTlRIKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBWV9PRl9XRUVLX0lOX01PTlRIOgorICAgICAgICAgICAgLy8gRm9yIGRvd2ltLCB0aGUgbWF4aW11bSBvY2N1cnMgZm9yIHRoZSBET1cgb2YgdGhlIGZpcnN0IG9mIHRoZQorICAgICAgICAgICAgLy8gbW9udGguCisgICAgICAgICAgICBzZXQoREFZX09GX01PTlRILCAxKTsKKyAgICAgICAgICAgIHNldChEQVlfT0ZfV0VFSywgZ2V0KERBWV9PRl9XRUVLKSk7IC8vIE1ha2UgdGhpcyB1c2VyIHNldAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgV0VFS19PRl9NT05USDoKKyAgICAgICAgY2FzZSBXRUVLX09GX1lFQVI6CisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBjb3VudGluZyB3ZWVrcywgc2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsgdG8gZWl0aGVyIHRoZQorICAgICAgICAgICAgLy8gZmlyc3Qgb3IgbGFzdCBsb2NhbGl6ZWQgRE9XLiAgV2Uga25vdyB0aGUgbGFzdCB3ZWVrIG9mIGEgbW9udGgKKyAgICAgICAgICAgIC8vIG9yIHllYXIgd2lsbCBjb250YWluIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIGFuZCB0aGF0IHRoZQorICAgICAgICAgICAgLy8gZmlyc3Qgd2VlayB3aWxsIGNvbnRhaW4gdGhlIGxhc3QgRE9XLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBkb3cgPSBmaXJzdERheU9mV2VlazsKKyAgICAgICAgICAgICAgICBpZiAoaXNNaW5pbXVtKSB7CisgICAgICAgICAgICAgICAgICAgIGRvdyA9IChkb3cgKyA2KSAlIDc7IC8vIHNldCB0byBsYXN0IERPVworICAgICAgICAgICAgICAgICAgICBpZiAoZG93IDwgU1VOREFZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3cgKz0gNzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXQoREFZX09GX1dFRUssIGRvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvIHRoaXMgbGFzdCB0byBnaXZlIGl0IHRoZSBuZXdlc3QgdGltZSBzdGFtcAorICAgICAgICBzZXQoZmllbGQsIGdldEdyZWF0ZXN0TWluaW11bShmaWVsZCkpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGdldEFjdHVhbEhlbHBlcihpbnQgZmllbGQsIGludCBzdGFydFZhbHVlLCBpbnQgZW5kVmFsdWUpIHsKKworICAgICAgICBpZiAoc3RhcnRWYWx1ZSA9PSBlbmRWYWx1ZSkgeworICAgICAgICAgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBtYXhpbXVtIHZhbHVlIGlzIGFsd2F5cyB0aGUgc2FtZSwganVzdCByZXR1cm4gaXQKKyAgICAgICAgICAgIHJldHVybiBzdGFydFZhbHVlOworICAgICAgICB9IAorCisgICAgICAgIGZpbmFsIGludCBkZWx0YSA9IChlbmRWYWx1ZSA+IHN0YXJ0VmFsdWUpID8gMSA6IC0xOworCisgICAgICAgIC8vIGNsb25lIHRoZSBjYWxlbmRhciBzbyB3ZSBkb24ndCBtZXNzIHdpdGggdGhlIHJlYWwgb25lLCBhbmQgc2V0IGl0IHRvCisgICAgICAgIC8vIGFjY2VwdCBhbnl0aGluZyBmb3IgdGhlIGZpZWxkIHZhbHVlcworICAgICAgICBDYWxlbmRhciB3b3JrID0gKENhbGVuZGFyKSBjbG9uZSgpOworICAgICAgICB3b3JrLnNldExlbmllbnQodHJ1ZSk7CisgICAgICAgIHdvcmsucHJlcGFyZUdldEFjdHVhbChmaWVsZCwgZGVsdGEgPCAwKTsKKyAgICAgICAgCisgICAgICAgIC8vIG5vdyB0cnkgZWFjaCB2YWx1ZSBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kIG9uZSBieSBvbmUgdW50aWwKKyAgICAgICAgLy8gd2UgZ2V0IGEgdmFsdWUgdGhhdCBub3JtYWxpemVzIHRvIGFub3RoZXIgdmFsdWUuICBUaGUgbGFzdCB2YWx1ZSB0aGF0CisgICAgICAgIC8vIG5vcm1hbGl6ZXMgdG8gaXRzZWxmIGlzIHRoZSBhY3R1YWwgbWF4aW11bSBmb3IgdGhlIGN1cnJlbnQgZGF0ZQorICAgICAgICBpbnQgcmVzdWx0ID0gc3RhcnRWYWx1ZTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgd29yay5zZXQoZmllbGQsIHN0YXJ0VmFsdWUpOworICAgICAgICAgICAgaWYgKHdvcmsuZ2V0KGZpZWxkKSAhPSBzdGFydFZhbHVlKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0YXJ0VmFsdWU7CisgICAgICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBkZWx0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAocmVzdWx0ICE9IGVuZFZhbHVlKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSb2xscyAodXAvZG93bikgYSBzaW5nbGUgdW5pdCBvZiB0aW1lIG9uIHRoZSBnaXZlbiBmaWVsZC4gIElmIHRoZQorICAgICAqIGZpZWxkIGlzIHJvbGxlZCBwYXN0IGl0cyBtYXhpbXVtIGFsbG93YWJsZSB2YWx1ZSwgaXQgd2lsbCAid3JhcCIgYmFjaworICAgICAqIHRvIGl0cyBtaW5pbXVtIGFuZCBjb250aW51ZSByb2xsaW5nLiBGb3IKKyAgICAgKiBleGFtcGxlLCB0byByb2xsIHRoZSBjdXJyZW50IGRhdGUgdXAgYnkgb25lIGRheSwgeW91IGNhbiBjYWxsOgorICAgICAqIDxwPgorICAgICAqIDxjb2RlPnJvbGwoe0BsaW5rICNEQVRFfSwgdHJ1ZSk8L2NvZGU+CisgICAgICogPHA+CisgICAgICogV2hlbiByb2xsaW5nIG9uIHRoZSB7QGxpbmsgI1lFQVJ9IGZpZWxkLCBpdCB3aWxsIHJvbGwgdGhlIHllYXIKKyAgICAgKiB2YWx1ZSBpbiB0aGUgcmFuZ2UgYmV0d2VlbiAxIGFuZCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGluZworICAgICAqIHtAbGluayAjZ2V0TWF4aW11bSBnZXRNYXhpbXVtfSh7QGxpbmsgI1lFQVJ9KS4KKyAgICAgKiA8cD4KKyAgICAgKiBXaGVuIHJvbGxpbmcgb24gY2VydGFpbiBmaWVsZHMsIHRoZSB2YWx1ZXMgb2Ygb3RoZXIgZmllbGRzIG1heSBjb25mbGljdCBhbmQKKyAgICAgKiBuZWVkIHRvIGJlIGNoYW5nZWQuICBGb3IgZXhhbXBsZSwgd2hlbiByb2xsaW5nIHRoZSA8Y29kZT5NT05USDwvY29kZT4gZmllbGQKKyAgICAgKiBmb3IgdGhlIEdyZWdvcmlhbiBkYXRlIDEvMzEvOTYgdXB3YXJkLCB0aGUgPGNvZGU+REFZX09GX01PTlRIPC9jb2RlPiBmaWVsZAorICAgICAqIG11c3QgYmUgYWRqdXN0ZWQgc28gdGhhdCB0aGUgcmVzdWx0IGlzIDIvMjkvOTYgcmF0aGVyIHRoYW4gdGhlIGludmFsaWQKKyAgICAgKiAyLzMxLzk2LgorICAgICAqIDxwPgorICAgICAqIDxiPk5vdGU6PC9iPiBDYWxsaW5nIDx0dD5yb2xsKGZpZWxkLCB0cnVlKTwvdHQ+IE4gdGltZXMgaXMgPGVtPm5vdDwvZW0+CisgICAgICogbmVjZXNzYXJpbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nIDx0dD5yb2xsKGZpZWxkLCBOKTwvdHQ+LiAgRm9yIGV4YW1wbGUsCisgICAgICogaW1hZ2luZSB0aGF0IHlvdSBzdGFydCB3aXRoIHRoZSBkYXRlIEdyZWdvcmlhbiBkYXRlIEphbnVhcnkgMzEsIDE5OTUuICBJZiB5b3UgY2FsbAorICAgICAqIDx0dD5yb2xsKENhbGVuZGFyLk1PTlRILCAyKTwvdHQ+LCB0aGUgcmVzdWx0IHdpbGwgYmUgTWFyY2ggMzEsIDE5OTUuCisgICAgICogQnV0IGlmIHlvdSBjYWxsIDx0dD5yb2xsKENhbGVuZGFyLk1PTlRILCB0cnVlKTwvdHQ+LCB0aGUgcmVzdWx0IHdpbGwgYmUKKyAgICAgKiBGZWJydWFyeSAyOCwgMTk5NS4gIENhbGxpbmcgaXQgb25lIG1vcmUgdGltZSB3aWxsIGdpdmUgTWFyY2ggMjgsIDE5OTUsIHdoaWNoCisgICAgICogaXMgdXN1YWxseSBub3QgdGhlIGRlc2lyZWQgcmVzdWx0LgorICAgICAqIDxwPgorICAgICAqIDxiPk5vdGU6PC9iPiBZb3Ugc2hvdWxkIGFsd2F5cyB1c2UgPHR0PnJvbGw8L3R0PiBhbmQgPHR0PmFkZDwvdHQ+IHJhdGhlcgorICAgICAqIHRoYW4gYXR0ZW1wdGluZyB0byBwZXJmb3JtIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBkaXJlY3RseSBvbiB0aGUgZmllbGRzCisgICAgICogb2YgYSA8dHQ+Q2FsZW5kYXI8L3R0Pi4gIEl0IGlzIHF1aXRlIHBvc3NpYmxlIGZvciA8dHQ+Q2FsZW5kYXI8L3R0PiBzdWJjbGFzc2VzCisgICAgICogdG8gaGF2ZSBmaWVsZHMgd2l0aCBub24tbGluZWFyIGJlaGF2aW9yLCBmb3IgZXhhbXBsZSBtaXNzaW5nIG1vbnRocworICAgICAqIG9yIGRheXMgZHVyaW5nIG5vbi1sZWFwIHllYXJzLiAgVGhlIHN1YmNsYXNzZXMnIDx0dD5hZGQ8L3R0PiBhbmQgPHR0PnJvbGw8L3R0PgorICAgICAqIG1ldGhvZHMgd2lsbCB0YWtlIHRoaXMgaW50byBhY2NvdW50LCB3aGlsZSBzaW1wbGUgYXJpdGhtZXRpYyBtYW5pcHVsYXRpb25zCisgICAgICogbWF5IGdpdmUgaW52YWxpZCByZXN1bHRzLgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBmaWVsZCB0aGUgY2FsZW5kYXIgZmllbGQgdG8gcm9sbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1cCAgICBpbmRpY2F0ZXMgaWYgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgdGltZSBmaWVsZCBpcyB0byBiZQorICAgICAqICAgICAgICAgICAgICByb2xsZWQgdXAgb3Igcm9sbGVkIGRvd24uIFVzZSA8Y29kZT50cnVlPC9jb2RlPiBpZiByb2xsaW5nIHVwLAorICAgICAqICAgICAgICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAqCisgICAgICogQGV4Y2VwdGlvbiAgIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZmllbGQgaXMgaW52YWxpZCBvciByZWZlcnMKKyAgICAgKiAgICAgICAgICAgICAgdG8gYSBmaWVsZCB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgbWV0aG9kLgorICAgICAqIEBzZWUgI3JvbGwoaW50LCBpbnQpCisgICAgICogQHNlZSAjYWRkCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgcm9sbChpbnQgZmllbGQsIGJvb2xlYW4gdXApCisgICAgeworICAgICAgICByb2xsKGZpZWxkLCB1cCA/ICsxIDogLTEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJvbGxzICh1cC9kb3duKSBhIHNwZWNpZmllZCBhbW91bnQgdGltZSBvbiB0aGUgZ2l2ZW4gZmllbGQuICBGb3IKKyAgICAgKiBleGFtcGxlLCB0byByb2xsIHRoZSBjdXJyZW50IGRhdGUgdXAgYnkgdGhyZWUgZGF5cywgeW91IGNhbiBjYWxsCisgICAgICogPGNvZGU+cm9sbChDYWxlbmRhci5EQVRFLCAzKTwvY29kZT4uICBJZiB0aGUKKyAgICAgKiBmaWVsZCBpcyByb2xsZWQgcGFzdCBpdHMgbWF4aW11bSBhbGxvd2FibGUgdmFsdWUsIGl0IHdpbGwgIndyYXAiIGJhY2sKKyAgICAgKiB0byBpdHMgbWluaW11bSBhbmQgY29udGludWUgcm9sbGluZy4gIAorICAgICAqIEZvciBleGFtcGxlLCBjYWxsaW5nIDxjb2RlPnJvbGwoQ2FsZW5kYXIuREFURSwgMTApPC9jb2RlPgorICAgICAqIG9uIGEgR3JlZ29yaWFuIGNhbGVuZGFyIHNldCB0byA0LzI1Lzk2IHdpbGwgcmVzdWx0IGluIHRoZSBkYXRlIDQvNS85Ni4KKyAgICAgKiA8cD4KKyAgICAgKiBXaGVuIHJvbGxpbmcgb24gY2VydGFpbiBmaWVsZHMsIHRoZSB2YWx1ZXMgb2Ygb3RoZXIgZmllbGRzIG1heSBjb25mbGljdCBhbmQKKyAgICAgKiBuZWVkIHRvIGJlIGNoYW5nZWQuICBGb3IgZXhhbXBsZSwgd2hlbiByb2xsaW5nIHRoZSB7QGxpbmsgI01PTlRIIE1PTlRIfSBmaWVsZAorICAgICAqIGZvciB0aGUgR3JlZ29yaWFuIGRhdGUgMS8zMS85NiBieSArMSwgdGhlIHtAbGluayAjREFZX09GX01PTlRIIERBWV9PRl9NT05USH0gZmllbGQKKyAgICAgKiBtdXN0IGJlIGFkanVzdGVkIHNvIHRoYXQgdGhlIHJlc3VsdCBpcyAyLzI5Lzk2IHJhdGhlciB0aGFuIHRoZSBpbnZhbGlkCisgICAgICogMi8zMS85Ni4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgPGNvZGU+Y29tLmlibS5pY3UudXRpbC5DYWxlbmRhcjwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgaXMgYWJsZSB0byByb2xsCisgICAgICogYWxsIGZpZWxkcyBleGNlcHQgZm9yIHtAbGluayAjRVJBIEVSQX0sIHtAbGluayAjRFNUX09GRlNFVCBEU1RfT0ZGU0VUfSwKKyAgICAgKiBhbmQge0BsaW5rICNaT05FX09GRlNFVCBaT05FX09GRlNFVH0uICBTdWJjbGFzc2VzIG1heSwgb2YgY291cnNlLCBhZGQgc3VwcG9ydCBmb3IKKyAgICAgKiBhZGRpdGlvbmFsIGZpZWxkcyBpbiB0aGVpciBvdmVycmlkZXMgb2YgPGNvZGU+cm9sbDwvY29kZT4uCisgICAgICogPHA+CisgICAgICogPGI+Tm90ZTo8L2I+IFlvdSBzaG91bGQgYWx3YXlzIHVzZSA8dHQ+cm9sbDwvdHQ+IGFuZCA8dHQ+YWRkPC90dD4gcmF0aGVyCisgICAgICogdGhhbiBhdHRlbXB0aW5nIHRvIHBlcmZvcm0gYXJpdGhtZXRpYyBvcGVyYXRpb25zIGRpcmVjdGx5IG9uIHRoZSBmaWVsZHMKKyAgICAgKiBvZiBhIDx0dD5DYWxlbmRhcjwvdHQ+LiAgSXQgaXMgcXVpdGUgcG9zc2libGUgZm9yIDx0dD5DYWxlbmRhcjwvdHQ+IHN1YmNsYXNzZXMKKyAgICAgKiB0byBoYXZlIGZpZWxkcyB3aXRoIG5vbi1saW5lYXIgYmVoYXZpb3IsIGZvciBleGFtcGxlIG1pc3NpbmcgbW9udGhzCisgICAgICogb3IgZGF5cyBkdXJpbmcgbm9uLWxlYXAgeWVhcnMuICBUaGUgc3ViY2xhc3NlcycgPHR0PmFkZDwvdHQ+IGFuZCA8dHQ+cm9sbDwvdHQ+CisgICAgICogbWV0aG9kcyB3aWxsIHRha2UgdGhpcyBpbnRvIGFjY291bnQsIHdoaWxlIHNpbXBsZSBhcml0aG1ldGljIG1hbmlwdWxhdGlvbnMKKyAgICAgKiBtYXkgZ2l2ZSBpbnZhbGlkIHJlc3VsdHMuCisgICAgICogPHA+CisgICAgICogPGI+U3ViY2xhc3Npbmc6PC9iPjxicj4KKyAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPnJvbGw8L2NvZGU+IGFzc3VtZXMgdGhhdCB0aGUgYmVoYXZpb3Igb2YgdGhlCisgICAgICogZmllbGQgaXMgY29udGludW91cyBiZXR3ZWVuIGl0cyBtaW5pbXVtIGFuZCBtYXhpbXVtLCB3aGljaCBhcmUgZm91bmQgYnkKKyAgICAgKiBjYWxsaW5nIHtAbGluayAjZ2V0QWN0dWFsTWluaW11bSBnZXRBY3R1YWxNaW5pbXVtfSBhbmQge0BsaW5rICNnZXRBY3R1YWxNYXhpbXVtIGdldEFjdHVhbE1heGltdW19LgorICAgICAqIEZvciBtb3N0IHN1Y2ggZmllbGRzLCBzaW1wbGUgYWRkaXRpb24sIHN1YnRyYWN0aW9uLCBhbmQgbW9kdWx1cyBvcGVyYXRpb25zCisgICAgICogYXJlIHN1ZmZpY2llbnQgdG8gcGVyZm9ybSB0aGUgcm9sbC4gIEZvciB3ZWVrLXJlbGF0ZWQgZmllbGRzLAorICAgICAqIHRoZSByZXN1bHRzIG9mIHtAbGluayAjZ2V0Rmlyc3REYXlPZldlZWsgZ2V0Rmlyc3REYXlPZldlZWt9IGFuZAorICAgICAqIHtAbGluayAjZ2V0TWluaW1hbERheXNJbkZpcnN0V2VlayBnZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrfSBhcmUgYWxzbyBuZWNlc3NhcnkuCisgICAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhlc2UgdHdvIG1ldGhvZHMgaWYgdGhlaXIgdmFsdWVzIGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0cy4KKyAgICAgKiA8cD4KKyAgICAgKiBTdWJjbGFzc2VzIHRoYXQgaGF2ZSBmaWVsZHMgZm9yIHdoaWNoIHRoZSBhc3N1bXB0aW9uIG9mIGNvbnRpbnVpdHkgYnJlYWtzCisgICAgICogZG93biBtdXN0IG92ZXJpZGUgPGNvZGU+cm9sbDwvY29kZT4gdG8gaGFuZGxlIHRob3NlIGZpZWxkcyBzcGVjaWFsbHkuCisgICAgICogRm9yIGV4YW1wbGUsIGluIHRoZSBIZWJyZXcgY2FsZW5kYXIgdGhlIG1vbnRoICJBZGFyIEkiCisgICAgICogb25seSBvY2N1cnMgaW4gbGVhcCB5ZWFyczsgaW4gb3RoZXIgeWVhcnMgdGhlIGNhbGVuZGFyIGp1bXBzIGZyb20KKyAgICAgKiBTaGV2YXQgKG1vbnRoICM0KSB0byBBZGFyIChtb250aCAjNikuICBUaGUgCisgICAgICoge0BsaW5rIEhlYnJld0NhbGVuZGFyI3JvbGwgSGVicmV3Q2FsZW5kYXIucm9sbH0gbWV0aG9kIHRha2VzIHRoaXMgaW50byBhY2NvdW50LAorICAgICAqIHNvIHRoYXQgcm9sbGluZyB0aGUgbW9udGggb2YgU2hldmF0IGJ5IG9uZSBnaXZlcyB0aGUgcHJvcGVyIHJlc3VsdCAoQWRhcikgaW4gYQorICAgICAqIG5vbi1sZWFwIHllYXIuCisgICAgICogPHA+CisgICAgICogQHBhcmFtIGZpZWxkICAgICB0aGUgY2FsZW5kYXIgZmllbGQgdG8gcm9sbC4KKyAgICAgKiBAcGFyYW0gYW1vdW50ICAgIHRoZSBhbW91bnQgYnkgd2hpY2ggdGhlIGZpZWxkIHNob3VsZCBiZSByb2xsZWQuCisgICAgICoKKyAgICAgKiBAZXhjZXB0aW9uICAgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBmaWVsZCBpcyBpbnZhbGlkIG9yIHJlZmVycworICAgICAqICAgICAgICAgICAgICB0byBhIGZpZWxkIHRoYXQgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBtZXRob2QuCisgICAgICogQHNlZSAjcm9sbChpbnQsIGJvb2xlYW4pCisgICAgICogQHNlZSAjYWRkCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgcm9sbChpbnQgZmllbGQsIGludCBhbW91bnQpIHsKKworICAgICAgICBpZiAoYW1vdW50ID09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkbworICAgICAgICB9CisKKyAgICAgICAgY29tcGxldGUoKTsKKworICAgICAgICBzd2l0Y2ggKGZpZWxkKSB7CisgICAgICAgIGNhc2UgREFZX09GX01PTlRIOgorICAgICAgICBjYXNlIEFNX1BNOgorICAgICAgICBjYXNlIE1JTlVURToKKyAgICAgICAgY2FzZSBTRUNPTkQ6CisgICAgICAgIGNhc2UgTUlMTElTRUNPTkQ6CisgICAgICAgIGNhc2UgTUlMTElTRUNPTkRTX0lOX0RBWToKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgcm9sbCBpbnN0cnVjdGlvbnMuICBUaGVzZSB3b3JrIGZvciBhbGwKKyAgICAgICAgICAgIC8vIHNpbXBsZSBjYXNlcywgdGhhdCBpcywgY2FzZXMgaW4gd2hpY2ggdGhlIGxpbWl0cyBhcmUgZml4ZWQsIHN1Y2gKKyAgICAgICAgICAgIC8vIGFzIHRoZSBob3VyLCB0aGUgZGF5IG9mIHRoZSBtb250aCwgYW5kIHRoZSBlcmEuCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IG1pbiA9IGdldEFjdHVhbE1pbmltdW0oZmllbGQpOworICAgICAgICAgICAgICAgIGludCBtYXggPSBnZXRBY3R1YWxNYXhpbXVtKGZpZWxkKTsKKyAgICAgICAgICAgICAgICBpbnQgZ2FwID0gbWF4IC0gbWluICsgMTsKKworICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IGludGVybmFsR2V0KGZpZWxkKSArIGFtb3VudDsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIG1pbikgJSBnYXA7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBnYXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbHVlICs9IG1pbjsKKworICAgICAgICAgICAgICAgIHNldChmaWVsZCwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIEhPVVI6CisgICAgICAgIGNhc2UgSE9VUl9PRl9EQVk6CisgICAgICAgICAgICAvLyBSb2xsaW5nIHRoZSBob3VyIGlzIGRpZmZpY3VsdCBvbiB0aGUgT05TRVQgYW5kIENFQVNFIGRheXMgb2YKKyAgICAgICAgICAgIC8vIGRheWxpZ2h0IHNhdmluZ3MuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGNoYW5nZSBvY2N1cnMgYXQKKyAgICAgICAgICAgIC8vIDIgQU0sIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9ncmVzc2lvbjoKKyAgICAgICAgICAgIC8vIE9OU0VUOiAxMiBTdGQgLT4gMSBTdGQgLT4gMyBEc3QgLT4gNCBEc3QKKyAgICAgICAgICAgIC8vIENFQVNFOiAxMiBEc3QgLT4gMSBEc3QgLT4gMSBTdGQgLT4gMiBTdGQKKyAgICAgICAgICAgIC8vIFRvIGdldCBhcm91bmQgdGhpcyBwcm9ibGVtIHdlIGRvbid0IHVzZSBmaWVsZHM7IHdlIG1hbmlwdWxhdGUKKyAgICAgICAgICAgIC8vIHRoZSB0aW1lIGluIG1pbGxpcyBkaXJlY3RseS4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBBc3N1bWUgbWluID09IDAgaW4gY2FsY3VsYXRpb25zIGJlbG93CisgICAgICAgICAgICAgICAgbG9uZyBzdGFydCA9IGdldFRpbWVJbk1pbGxpcygpOworICAgICAgICAgICAgICAgIGludCBvbGRIb3VyID0gaW50ZXJuYWxHZXQoZmllbGQpOworICAgICAgICAgICAgICAgIGludCBtYXggPSBnZXRNYXhpbXVtKGZpZWxkKTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3SG91ciA9IChvbGRIb3VyICsgYW1vdW50KSAlIChtYXggKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3SG91ciA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3SG91ciArPSBtYXggKyAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXRUaW1lSW5NaWxsaXMoc3RhcnQgKyBPTkVfSE9VUiAqIChuZXdIb3VyIC0gb2xkSG91cikpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIE1PTlRIOgorICAgICAgICAgICAgLy8gUm9sbGluZyB0aGUgbW9udGggaW52b2x2ZXMgYm90aCBwaW5uaW5nIHRoZSBmaW5hbCB2YWx1ZQorICAgICAgICAgICAgLy8gYW5kIGFkanVzdGluZyB0aGUgREFZX09GX01PTlRIIGlmIG5lY2Vzc2FyeS4gIFdlIG9ubHkgYWRqdXN0IHRoZQorICAgICAgICAgICAgLy8gREFZX09GX01PTlRIIGlmLCBhZnRlciB1cGRhdGluZyB0aGUgTU9OVEggZmllbGQsIGl0IGlzIGlsbGVnYWwuCisgICAgICAgICAgICAvLyBFLmcuLCA8amFuMzE+LnJvbGwoTU9OVEgsIDEpIC0+IDxmZWIyOD4gb3IgPGZlYjI5Pi4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgbWF4ID0gZ2V0QWN0dWFsTWF4aW11bShNT05USCk7CisgICAgICAgICAgICAgICAgaW50IG1vbiA9IChpbnRlcm5hbEdldChNT05USCkgKyBhbW91bnQpICUgKG1heCsxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobW9uIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBtb24gKz0gKG1heCArIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXQoTU9OVEgsIG1vbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgZGF5IG9mIG1vbnRoIGluIHJhbmdlLiAgV2UgZG9uJ3Qgd2FudCB0byBzcGlsbCBvdmVyCisgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgbmV4dCBtb250aDsgZS5nLiwgd2UgZG9uJ3Qgd2FudCBqYW4zMSArIDEgbW8gLT4gZmViMzEgLT4KKyAgICAgICAgICAgICAgICAvLyBtYXIzLgorICAgICAgICAgICAgICAgIHBpbkZpZWxkKERBWV9PRl9NT05USCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgWUVBUjoKKyAgICAgICAgY2FzZSBZRUFSX1dPWToKKyAgICAgICAgY2FzZSBFWFRFTkRFRF9ZRUFSOgorICAgICAgICAgICAgLy8gUm9sbGluZyB0aGUgeWVhciBjYW4gaW52b2x2ZSBwaW5uaW5nIHRoZSBEQVlfT0ZfTU9OVEguCisgICAgICAgICAgICBzZXQoZmllbGQsIGludGVybmFsR2V0KGZpZWxkKSArIGFtb3VudCk7CisgICAgICAgICAgICBwaW5GaWVsZChNT05USCk7CisgICAgICAgICAgICBwaW5GaWVsZChEQVlfT0ZfTU9OVEgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgV0VFS19PRl9NT05USDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRyaWNreSwgYmVjYXVzZSBkdXJpbmcgdGhlIHJvbGwgd2UgbWF5IGhhdmUgdG8gc2hpZnQKKyAgICAgICAgICAgICAgICAvLyB0byBhIGRpZmZlcmVudCBkYXkgb2YgdGhlIHdlZWsuICBGb3IgZXhhbXBsZToKKworICAgICAgICAgICAgICAgIC8vICAgIHMgIG0gIHQgIHcgIHIgIGYgIHMKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAxICAyICAzICA0ICA1CisgICAgICAgICAgICAgICAgLy8gICAgNiAgNyAgOCAgOSAxMCAxMSAxMgorCisgICAgICAgICAgICAgICAgLy8gV2hlbiByb2xsaW5nIGZyb20gdGhlIDZ0aCBvciA3dGggYmFjayBvbmUgd2Vlaywgd2UgZ28gdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gMXN0IChhc3N1bWluZyB0aGF0IHRoZSBmaXJzdCBwYXJ0aWFsIHdlZWsgY291bnRzKS4gIFRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8gdGhpbmcgaGFwcGVucyBhdCB0aGUgZW5kIG9mIHRoZSBtb250aC4KKworICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciB0cmlja3kgdGhpbmcgaXMgdGhhdCB3ZSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hldGhlcgorICAgICAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBwYXJ0aWFsIHdlZWsgYWN0dWFsbHkgY291bnRzIG9yIG5vdCwgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgLy8gbWluaW1hbCBmaXJzdCBkYXlzIGluIHRoZSB3ZWVrLiAgQW5kIHdlIGhhdmUgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIC8vIGNvcnJlY3QgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIHRvIGRlbGluZWF0ZSB0aGUgd2VlaworICAgICAgICAgICAgICAgIC8vIGJvdW5kYXJpZXMuCisKKyAgICAgICAgICAgICAgICAvLyBIZXJlJ3Mgb3VyIGFsZ29yaXRobS4gIEZpcnN0LCB3ZSBmaW5kIHRoZSByZWFsIGJvdW5kYXJpZXMgb2YKKyAgICAgICAgICAgICAgICAvLyB0aGUgbW9udGguICBUaGVuIHdlIGRpc2NhcmQgdGhlIGZpcnN0IHBhcnRpYWwgd2VlayBpZiBpdAorICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgY291bnQgaW4gdGhpcyBsb2NhbGUuICBUaGVuIHdlIGZpbGwgaW4gdGhlIGVuZHMgd2l0aAorICAgICAgICAgICAgICAgIC8vIHBoYW50b20gZGF5cywgc28gdGhhdCB0aGUgZmlyc3QgcGFydGlhbCB3ZWVrIGFuZCB0aGUgbGFzdAorICAgICAgICAgICAgICAgIC8vIHBhcnRpYWwgd2VlayBhcmUgZnVsbCB3ZWVrcy4gIFdlIHRoZW4gaGF2ZSBhIG5pY2Ugc3F1YXJlCisgICAgICAgICAgICAgICAgLy8gYmxvY2sgb2Ygd2Vla3MuICBXZSBkbyB0aGUgdXN1YWwgcm9sbGluZyB3aXRoaW4gdGhpcyBibG9jaywKKyAgICAgICAgICAgICAgICAvLyBhcyBpcyBkb25lIGVsc2V3aGVyZSBpbiB0aGlzIG1ldGhvZC4gIElmIHdlIHdpbmQgdXAgb24gb25lIG9mCisgICAgICAgICAgICAgICAgLy8gdGhlIHBoYW50b20gZGF5cyB0aGF0IHdlIGFkZGVkLCB3ZSByZWNvZ25pemUgdGhpcyBhbmQgcGluIHRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGRheSBvZiB0aGUgbW9udGguICBFYXN5LCBlaD8KKworICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgREFZX09GX1dFRUsgc28gdGhhdCAwIGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsKKyAgICAgICAgICAgICAgICAvLyBpbiB0aGlzIGxvY2FsZS4gIFdlIGhhdmUgZG93IGluIDAuLjYuCisgICAgICAgICAgICAgICAgaW50IGRvdyA9IGludGVybmFsR2V0KERBWV9PRl9XRUVLKSAtIGdldEZpcnN0RGF5T2ZXZWVrKCk7CisgICAgICAgICAgICAgICAgaWYgKGRvdyA8IDApIGRvdyArPSA3OworCisgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgZGF5IG9mIHRoZSB3ZWVrIChub3JtYWxpemVkIGZvciBsb2NhbGUpIGZvciB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgbW9udGguCisgICAgICAgICAgICAgICAgaW50IGZkbSA9IChkb3cgLSBpbnRlcm5hbEdldChEQVlfT0ZfTU9OVEgpICsgMSkgJSA3OworICAgICAgICAgICAgICAgIGlmIChmZG0gPCAwKSBmZG0gKz0gNzsKKworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZmlyc3QgZGF5IG9mIHRoZSBmaXJzdCBmdWxsIHdlZWsgb2YgdGhlIG1vbnRoLAorICAgICAgICAgICAgICAgIC8vIGluY2x1ZGluZyBwaGFudG9tIGRheXMsIGlmIGFueS4gIEZpZ3VyZSBvdXQgaWYgdGhlIGZpcnN0IHdlZWsKKyAgICAgICAgICAgICAgICAvLyBjb3VudHMgb3Igbm90OyBpZiBpdCBjb3VudHMsIHRoZW4gZmlsbCBpbiBwaGFudG9tIGRheXMuICBJZgorICAgICAgICAgICAgICAgIC8vIG5vdCwgYWR2YW5jZSB0byB0aGUgZmlyc3QgcmVhbCBmdWxsIHdlZWsgKHNraXAgdGhlIHBhcnRpYWwgd2VlaykuCisgICAgICAgICAgICAgICAgaW50IHN0YXJ0OworICAgICAgICAgICAgICAgIGlmICgoNyAtIGZkbSkgPCBnZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gOCAtIGZkbTsgLy8gU2tpcCB0aGUgZmlyc3QgcGFydGlhbCB3ZWVrCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEgLSBmZG07IC8vIFRoaXMgbWF5IGJlIHplcm8gb3IgbmVnYXRpdmUKKworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrIChub3JtYWxpemVkIGZvciBsb2NhbGUpIGZvciB0aGUgbGFzdAorICAgICAgICAgICAgICAgIC8vIGRheSBvZiB0aGUgbW9udGguCisgICAgICAgICAgICAgICAgaW50IG1vbnRoTGVuID0gZ2V0QWN0dWFsTWF4aW11bShEQVlfT0ZfTU9OVEgpOworICAgICAgICAgICAgICAgIGludCBsZG0gPSAobW9udGhMZW4gLSBpbnRlcm5hbEdldChEQVlfT0ZfTU9OVEgpICsgZG93KSAlIDc7CisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyBtb250aExlbiA+PSBEQVlfT0ZfTU9OVEggc28gd2Ugc2tpcCB0aGUgKz0gNyBzdGVwIGhlcmUuCisKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpbWl0IGRheSBmb3IgdGhlIGJsb2NrZWQtb2ZmIHJlY3Rhbmd1bGFyIG1vbnRoOyB0aGF0CisgICAgICAgICAgICAgICAgLy8gaXMsIHRoZSBkYXkgd2hpY2ggaXMgb25lIHBhc3QgdGhlIGxhc3QgZGF5IG9mIHRoZSBtb250aCwKKyAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGUgbW9udGggaGFzIGFscmVhZHkgYmVlbiBmaWxsZWQgaW4gd2l0aCBwaGFudG9tIGRheXMKKyAgICAgICAgICAgICAgICAvLyB0byBmaWxsIG91dCB0aGUgbGFzdCB3ZWVrLiAgVGhpcyBkYXkgaGFzIGEgbm9ybWFsaXplZCBET1cgb2YgMC4KKyAgICAgICAgICAgICAgICBpbnQgbGltaXQgPSBtb250aExlbiArIDcgLSBsZG07CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgcm9sbCBiZXR3ZWVuIHN0YXJ0IGFuZCAobGltaXQgLSAxKS4KKyAgICAgICAgICAgICAgICBpbnQgZ2FwID0gbGltaXQgLSBzdGFydDsKKyAgICAgICAgICAgICAgICBpbnQgZGF5X29mX21vbnRoID0gKGludGVybmFsR2V0KERBWV9PRl9NT05USCkgKyBhbW91bnQqNyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCkgJSBnYXA7CisgICAgICAgICAgICAgICAgaWYgKGRheV9vZl9tb250aCA8IDApIGRheV9vZl9tb250aCArPSBnYXA7CisgICAgICAgICAgICAgICAgZGF5X29mX21vbnRoICs9IHN0YXJ0OworCisgICAgICAgICAgICAgICAgLy8gRmluYWxseSwgcGluIHRvIHRoZSByZWFsIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIG1vbnRoLgorICAgICAgICAgICAgICAgIGlmIChkYXlfb2ZfbW9udGggPCAxKSBkYXlfb2ZfbW9udGggPSAxOworICAgICAgICAgICAgICAgIGlmIChkYXlfb2ZfbW9udGggPiBtb250aExlbikgZGF5X29mX21vbnRoID0gbW9udGhMZW47CisKKyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIERBWV9PRl9NT05USC4gIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGlzIGZpZWxkCisgICAgICAgICAgICAgICAgLy8gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGV2ZXJ5dGhpbmcgZWxzZSAoc2luY2UgYWxsIG90aGVyIGZpZWxkcworICAgICAgICAgICAgICAgIC8vIGFyZSBhbHNvIHNldCBhdCB0aGlzIHBvaW50KS4gIElmIHRoaXMgZmFjdCBjaGFuZ2VzIChpZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBkaXNhbWJpZ3VhdGlvbiBhbGdvcml0aG0gY2hhbmdlcykgdGhlbiB3ZSB3aWxsIGhhdmUgdG8gdW5zZXQKKyAgICAgICAgICAgICAgICAvLyB0aGUgYXBwcm9wcmlhdGUgZmllbGRzIGhlcmUgc28gdGhhdCBEQVlfT0ZfTU9OVEggaXMgYXR0ZW5kZWQKKyAgICAgICAgICAgICAgICAvLyB0by4KKyAgICAgICAgICAgICAgICBzZXQoREFZX09GX01PTlRILCBkYXlfb2ZfbW9udGgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXRUVLX09GX1lFQVI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBmb2xsb3dzIHRoZSBvdXRsaW5lIG9mIFdFRUtfT0ZfTU9OVEgsIGV4Y2VwdCBpdCBhcHBsaWVzCisgICAgICAgICAgICAgICAgLy8gdG8gdGhlIHdob2xlIHllYXIuICBQbGVhc2Ugc2VlIHRoZSBjb21tZW50IGZvciBXRUVLX09GX01PTlRICisgICAgICAgICAgICAgICAgLy8gZm9yIGdlbmVyYWwgbm90ZXMuCisKKyAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIERBWV9PRl9XRUVLIHNvIHRoYXQgMCBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrCisgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBsb2NhbGUuICBXZSBoYXZlIGRvdyBpbiAwLi42LgorICAgICAgICAgICAgICAgIGludCBkb3cgPSBpbnRlcm5hbEdldChEQVlfT0ZfV0VFSykgLSBnZXRGaXJzdERheU9mV2VlaygpOworICAgICAgICAgICAgICAgIGlmIChkb3cgPCAwKSBkb3cgKz0gNzsKKworICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGRheSBvZiB0aGUgd2VlayAobm9ybWFsaXplZCBmb3IgbG9jYWxlKSBmb3IgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHllYXIuCisgICAgICAgICAgICAgICAgaW50IGZkeSA9IChkb3cgLSBpbnRlcm5hbEdldChEQVlfT0ZfWUVBUikgKyAxKSAlIDc7CisgICAgICAgICAgICAgICAgaWYgKGZkeSA8IDApIGZkeSArPSA3OworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBmaXJzdCBkYXkgb2YgdGhlIGZpcnN0IGZ1bGwgd2VlayBvZiB0aGUgeWVhciwKKyAgICAgICAgICAgICAgICAvLyBpbmNsdWRpbmcgcGhhbnRvbSBkYXlzLCBpZiBhbnkuICBGaWd1cmUgb3V0IGlmIHRoZSBmaXJzdCB3ZWVrCisgICAgICAgICAgICAgICAgLy8gY291bnRzIG9yIG5vdDsgaWYgaXQgY291bnRzLCB0aGVuIGZpbGwgaW4gcGhhbnRvbSBkYXlzLiAgSWYKKyAgICAgICAgICAgICAgICAvLyBub3QsIGFkdmFuY2UgdG8gdGhlIGZpcnN0IHJlYWwgZnVsbCB3ZWVrIChza2lwIHRoZSBwYXJ0aWFsIHdlZWspLgorICAgICAgICAgICAgICAgIGludCBzdGFydDsKKyAgICAgICAgICAgICAgICBpZiAoKDcgLSBmZHkpIDwgZ2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpKQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDggLSBmZHk7IC8vIFNraXAgdGhlIGZpcnN0IHBhcnRpYWwgd2VlaworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAxIC0gZmR5OyAvLyBUaGlzIG1heSBiZSB6ZXJvIG9yIG5lZ2F0aXZlCisKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGRheSBvZiB0aGUgd2VlayAobm9ybWFsaXplZCBmb3IgbG9jYWxlKSBmb3IgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAvLyBkYXkgb2YgdGhlIHllYXIuCisgICAgICAgICAgICAgICAgaW50IHllYXJMZW4gPSBnZXRBY3R1YWxNYXhpbXVtKERBWV9PRl9ZRUFSKTsKKyAgICAgICAgICAgICAgICBpbnQgbGR5ID0gKHllYXJMZW4gLSBpbnRlcm5hbEdldChEQVlfT0ZfWUVBUikgKyBkb3cpICUgNzsKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHllYXJMZW4gPj0gREFZX09GX1lFQVIgc28gd2Ugc2tpcCB0aGUgKz0gNyBzdGVwIGhlcmUuCisKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpbWl0IGRheSBmb3IgdGhlIGJsb2NrZWQtb2ZmIHJlY3Rhbmd1bGFyIHllYXI7IHRoYXQKKyAgICAgICAgICAgICAgICAvLyBpcywgdGhlIGRheSB3aGljaCBpcyBvbmUgcGFzdCB0aGUgbGFzdCBkYXkgb2YgdGhlIHllYXIsCisgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIHllYXIgaGFzIGFscmVhZHkgYmVlbiBmaWxsZWQgaW4gd2l0aCBwaGFudG9tIGRheXMKKyAgICAgICAgICAgICAgICAvLyB0byBmaWxsIG91dCB0aGUgbGFzdCB3ZWVrLiAgVGhpcyBkYXkgaGFzIGEgbm9ybWFsaXplZCBET1cgb2YgMC4KKyAgICAgICAgICAgICAgICBpbnQgbGltaXQgPSB5ZWFyTGVuICsgNyAtIGxkeTsKKworICAgICAgICAgICAgICAgIC8vIE5vdyByb2xsIGJldHdlZW4gc3RhcnQgYW5kIChsaW1pdCAtIDEpLgorICAgICAgICAgICAgICAgIGludCBnYXAgPSBsaW1pdCAtIHN0YXJ0OworICAgICAgICAgICAgICAgIGludCBkYXlfb2ZfeWVhciA9IChpbnRlcm5hbEdldChEQVlfT0ZfWUVBUikgKyBhbW91bnQqNyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCkgJSBnYXA7CisgICAgICAgICAgICAgICAgaWYgKGRheV9vZl95ZWFyIDwgMCkgZGF5X29mX3llYXIgKz0gZ2FwOworICAgICAgICAgICAgICAgIGRheV9vZl95ZWFyICs9IHN0YXJ0OworCisgICAgICAgICAgICAgICAgLy8gRmluYWxseSwgcGluIHRvIHRoZSByZWFsIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIG1vbnRoLgorICAgICAgICAgICAgICAgIGlmIChkYXlfb2ZfeWVhciA8IDEpIGRheV9vZl95ZWFyID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZGF5X29mX3llYXIgPiB5ZWFyTGVuKSBkYXlfb2ZfeWVhciA9IHllYXJMZW47CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgeWVhciBhbmQgZGF5IG9mIHllYXIgYXJlIGF0dGVuZGVkIHRvIGJ5CisgICAgICAgICAgICAgICAgLy8gY2xlYXJpbmcgb3RoZXIgZmllbGRzIHdoaWNoIHdvdWxkIG5vcm1hbGx5IHRha2UgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGlzYW1iaWd1YXRpb24gYWxnb3JpdGhtIGlzIGNoYW5nZWQsIHRoaXMgc2VjdGlvbiB3aWxsCisgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBiZSB1cGRhdGVkIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgc2V0KERBWV9PRl9ZRUFSLCBkYXlfb2ZfeWVhcik7CisgICAgICAgICAgICAgICAgY2xlYXIoTU9OVEgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBEQVlfT0ZfWUVBUjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSb2xsIHRoZSBkYXkgb2YgeWVhciB1c2luZyBtaWxsaXMuICBDb21wdXRlIHRoZSBtaWxsaXMgZm9yCisgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSB5ZWFyLCBhbmQgZ2V0IHRoZSBsZW5ndGggb2YgdGhlIHllYXIuCisgICAgICAgICAgICAgICAgbG9uZyBkZWx0YSA9IGFtb3VudCAqIE9ORV9EQVk7IC8vIFNjYWxlIHVwIGZyb20gZGF5cyB0byBtaWxsaXMKKyAgICAgICAgICAgICAgICBsb25nIG1pbjIgPSB0aW1lIC0gKGludGVybmFsR2V0KERBWV9PRl9ZRUFSKSAtIDEpICogT05FX0RBWTsKKyAgICAgICAgICAgICAgICBpbnQgeWVhckxlbmd0aCA9IGdldEFjdHVhbE1heGltdW0oREFZX09GX1lFQVIpOworICAgICAgICAgICAgICAgIHRpbWUgPSAodGltZSArIGRlbHRhIC0gbWluMikgJSAoeWVhckxlbmd0aCpPTkVfREFZKTsKKyAgICAgICAgICAgICAgICBpZiAodGltZSA8IDApIHRpbWUgKz0geWVhckxlbmd0aCpPTkVfREFZOworICAgICAgICAgICAgICAgIHNldFRpbWVJbk1pbGxpcyh0aW1lICsgbWluMik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIERBWV9PRl9XRUVLOgorICAgICAgICBjYXNlIERPV19MT0NBTDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSb2xsIHRoZSBkYXkgb2Ygd2VlayB1c2luZyBtaWxsaXMuICBDb21wdXRlIHRoZSBtaWxsaXMgZm9yCisgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrLCB1c2luZyB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAvLyBSZXN0cmljdCB0aGUgbWlsbGlzIHRvIFtzdGFydCwgc3RhcnQrN2RheXMpLgorICAgICAgICAgICAgICAgIGxvbmcgZGVsdGEgPSBhbW91bnQgKiBPTkVfREFZOyAvLyBTY2FsZSB1cCBmcm9tIGRheXMgdG8gbWlsbGlzCisgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGRheXMgYmVmb3JlIHRoZSBjdXJyZW50IGRheSBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8gd2Vlay4gIFRoaXMgd2lsbCBiZSBhIHZhbHVlIDAuLjYuCisgICAgICAgICAgICAgICAgaW50IGxlYWREYXlzID0gaW50ZXJuYWxHZXQoZmllbGQpOworICAgICAgICAgICAgICAgIGxlYWREYXlzIC09IChmaWVsZCA9PSBEQVlfT0ZfV0VFSykgPyBnZXRGaXJzdERheU9mV2VlaygpIDogMTsKKyAgICAgICAgICAgICAgICBpZiAobGVhZERheXMgPCAwKSBsZWFkRGF5cyArPSA3OworICAgICAgICAgICAgICAgIGxvbmcgbWluMiA9IHRpbWUgLSBsZWFkRGF5cyAqIE9ORV9EQVk7CisgICAgICAgICAgICAgICAgdGltZSA9ICh0aW1lICsgZGVsdGEgLSBtaW4yKSAlIE9ORV9XRUVLOworICAgICAgICAgICAgICAgIGlmICh0aW1lIDwgMCkgdGltZSArPSBPTkVfV0VFSzsKKyAgICAgICAgICAgICAgICBzZXRUaW1lSW5NaWxsaXModGltZSArIG1pbjIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBEQVlfT0ZfV0VFS19JTl9NT05USDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSb2xsIHRoZSBkYXkgb2Ygd2VlayBpbiB0aGUgbW9udGggdXNpbmcgbWlsbGlzLiAgRGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayBpbiB0aGUgbW9udGgsIGFuZCB0aGVuIHRoZSBsYXN0LAorICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIHJvbGwgd2l0aGluIHRoYXQgcmFuZ2UuCisgICAgICAgICAgICAgICAgbG9uZyBkZWx0YSA9IGFtb3VudCAqIE9ORV9XRUVLOyAvLyBTY2FsZSB1cCBmcm9tIHdlZWtzIHRvIG1pbGxpcworICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIG51bWJlciBvZiBzYW1lIGRheXMgb2YgdGhlIHdlZWsgYmVmb3JlIHRoaXMgb25lCisgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBtb250aC4KKyAgICAgICAgICAgICAgICBpbnQgcHJlV2Vla3MgPSAoaW50ZXJuYWxHZXQoREFZX09GX01PTlRIKSAtIDEpIC8gNzsKKyAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBudW1iZXIgb2Ygc2FtZSBkYXlzIG9mIHRoZSB3ZWVrIGFmdGVyIHRoaXMgb25lCisgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBtb250aC4KKyAgICAgICAgICAgICAgICBpbnQgcG9zdFdlZWtzID0gKGdldEFjdHVhbE1heGltdW0oREFZX09GX01PTlRIKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEdldChEQVlfT0ZfTU9OVEgpKSAvIDc7CisgICAgICAgICAgICAgICAgLy8gRnJvbSB0aGVzZSBjb21wdXRlIHRoZSBtaW4gYW5kIGdhcCBtaWxsaXMgZm9yIHJvbGxpbmcuCisgICAgICAgICAgICAgICAgbG9uZyBtaW4yID0gdGltZSAtIHByZVdlZWtzICogT05FX1dFRUs7CisgICAgICAgICAgICAgICAgbG9uZyBnYXAyID0gT05FX1dFRUsgKiAocHJlV2Vla3MgKyBwb3N0V2Vla3MgKyAxKTsgLy8gTXVzdCBhZGQgMSEKKyAgICAgICAgICAgICAgICAvLyBSb2xsIHdpdGhpbiB0aGlzIHJhbmdlCisgICAgICAgICAgICAgICAgdGltZSA9ICh0aW1lICsgZGVsdGEgLSBtaW4yKSAlIGdhcDI7CisgICAgICAgICAgICAgICAgaWYgKHRpbWUgPCAwKSB0aW1lICs9IGdhcDI7CisgICAgICAgICAgICAgICAgc2V0VGltZUluTWlsbGlzKHRpbWUgKyBtaW4yKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgSlVMSUFOX0RBWToKKyAgICAgICAgICAgIHNldChmaWVsZCwgaW50ZXJuYWxHZXQoZmllbGQpICsgYW1vdW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIE90aGVyIGZpZWxkcyBjYW5ub3QgYmUgcm9sbGVkIGJ5IHRoaXMgbWV0aG9kCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYWxlbmRhci5yb2xsKCIgKyBmaWVsZE5hbWUoZmllbGQpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikgbm90IHN1cHBvcnRlZCIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBhIHNpZ25lZCBhbW91bnQgdG8gYSBzcGVjaWZpZWQgZmllbGQsIHVzaW5nIHRoaXMgY2FsZW5kYXIncyBydWxlcy4KKyAgICAgKiBGb3IgZXhhbXBsZSwgdG8gYWRkIHRocmVlIGRheXMgdG8gdGhlIGN1cnJlbnQgZGF0ZSwgeW91IGNhbiBjYWxsCisgICAgICogPGNvZGU+YWRkKENhbGVuZGFyLkRBVEUsIDMpPC9jb2RlPi4gCisgICAgICogPHA+CisgICAgICogV2hlbiBhZGRpbmcgdG8gY2VydGFpbiBmaWVsZHMsIHRoZSB2YWx1ZXMgb2Ygb3RoZXIgZmllbGRzIG1heSBjb25mbGljdCBhbmQKKyAgICAgKiBuZWVkIHRvIGJlIGNoYW5nZWQuICBGb3IgZXhhbXBsZSwgd2hlbiBhZGRpbmcgb25lIHRvIHRoZSB7QGxpbmsgI01PTlRIIE1PTlRIfSBmaWVsZAorICAgICAqIGZvciB0aGUgR3JlZ29yaWFuIGRhdGUgMS8zMS85NiwgdGhlIHtAbGluayAjREFZX09GX01PTlRIIERBWV9PRl9NT05USH0gZmllbGQKKyAgICAgKiBtdXN0IGJlIGFkanVzdGVkIHNvIHRoYXQgdGhlIHJlc3VsdCBpcyAyLzI5Lzk2IHJhdGhlciB0aGFuIHRoZSBpbnZhbGlkCisgICAgICogMi8zMS85Ni4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgPGNvZGU+Y29tLmlibS5pY3UudXRpbC5DYWxlbmRhcjwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgaXMgYWJsZSB0byBhZGQgdG8KKyAgICAgKiBhbGwgZmllbGRzIGV4Y2VwdCBmb3Ige0BsaW5rICNFUkEgRVJBfSwge0BsaW5rICNEU1RfT0ZGU0VUIERTVF9PRkZTRVR9LAorICAgICAqIGFuZCB7QGxpbmsgI1pPTkVfT0ZGU0VUIFpPTkVfT0ZGU0VUfS4gIFN1YmNsYXNzZXMgbWF5LCBvZiBjb3Vyc2UsIGFkZCBzdXBwb3J0IGZvcgorICAgICAqIGFkZGl0aW9uYWwgZmllbGRzIGluIHRoZWlyIG92ZXJyaWRlcyBvZiA8Y29kZT5hZGQ8L2NvZGU+LgorICAgICAqIDxwPgorICAgICAqIDxiPk5vdGU6PC9iPiBZb3Ugc2hvdWxkIGFsd2F5cyB1c2UgPHR0PnJvbGw8L3R0PiBhbmQgPHR0PmFkZDwvdHQ+IHJhdGhlcgorICAgICAqIHRoYW4gYXR0ZW1wdGluZyB0byBwZXJmb3JtIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBkaXJlY3RseSBvbiB0aGUgZmllbGRzCisgICAgICogb2YgYSA8dHQ+Q2FsZW5kYXI8L3R0Pi4gIEl0IGlzIHF1aXRlIHBvc3NpYmxlIGZvciA8dHQ+Q2FsZW5kYXI8L3R0PiBzdWJjbGFzc2VzCisgICAgICogdG8gaGF2ZSBmaWVsZHMgd2l0aCBub24tbGluZWFyIGJlaGF2aW9yLCBmb3IgZXhhbXBsZSBtaXNzaW5nIG1vbnRocworICAgICAqIG9yIGRheXMgZHVyaW5nIG5vbi1sZWFwIHllYXJzLiAgVGhlIHN1YmNsYXNzZXMnIDx0dD5hZGQ8L3R0PiBhbmQgPHR0PnJvbGw8L3R0PgorICAgICAqIG1ldGhvZHMgd2lsbCB0YWtlIHRoaXMgaW50byBhY2NvdW50LCB3aGlsZSBzaW1wbGUgYXJpdGhtZXRpYyBtYW5pcHVsYXRpb25zCisgICAgICogbWF5IGdpdmUgaW52YWxpZCByZXN1bHRzLgorICAgICAqIDxwPgorICAgICAqIDxiPlN1YmNsYXNzaW5nOjwvYj48YnI+CisgICAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5hZGQ8L2NvZGU+IGFzc3VtZXMgdGhhdCB0aGUgYmVoYXZpb3Igb2YgdGhlCisgICAgICogZmllbGQgaXMgY29udGludW91cyBiZXR3ZWVuIGl0cyBtaW5pbXVtIGFuZCBtYXhpbXVtLCB3aGljaCBhcmUgZm91bmQgYnkKKyAgICAgKiBjYWxsaW5nIHtAbGluayAjZ2V0QWN0dWFsTWluaW11bSBnZXRBY3R1YWxNaW5pbXVtfSBhbmQKKyAgICAgKiB7QGxpbmsgI2dldEFjdHVhbE1heGltdW0gZ2V0QWN0dWFsTWF4aW11bX0uCisgICAgICogRm9yIHN1Y2ggZmllbGRzLCBzaW1wbGUgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvCisgICAgICogcGVyZm9ybSB0aGUgYWRkLgorICAgICAqIDxwPgorICAgICAqIFN1YmNsYXNzZXMgdGhhdCBoYXZlIGZpZWxkcyBmb3Igd2hpY2ggdGhpcyBhc3N1bXB0aW9uIG9mIGNvbnRpbnVpdHkgYnJlYWtzCisgICAgICogZG93biBtdXN0IG92ZXJpZGUgPGNvZGU+YWRkPC9jb2RlPiB0byBoYW5kbGUgdGhvc2UgZmllbGRzIHNwZWNpYWxseS4KKyAgICAgKiBGb3IgZXhhbXBsZSwgaW4gdGhlIEhlYnJldyBjYWxlbmRhciB0aGUgbW9udGggIkFkYXIgSSIKKyAgICAgKiBvbmx5IG9jY3VycyBpbiBsZWFwIHllYXJzOyBpbiBvdGhlciB5ZWFycyB0aGUgY2FsZW5kYXIganVtcHMgZnJvbQorICAgICAqIFNoZXZhdCAobW9udGggIzQpIHRvIEFkYXIgKG1vbnRoICM2KS4gIFRoZSAKKyAgICAgKiB7QGxpbmsgSGVicmV3Q2FsZW5kYXIjYWRkIEhlYnJld0NhbGVuZGFyLmFkZH0gbWV0aG9kIHRha2VzIHRoaXMgaW50byBhY2NvdW50LAorICAgICAqIHNvIHRoYXQgYWRkaW5nIG9uZSBtb250aAorICAgICAqIHRvIGEgZGF0ZSBpbiBTaGV2YXQgZ2l2ZXMgdGhlIHByb3BlciByZXN1bHQgKEFkYXIpIGluIGEgbm9uLWxlYXAgeWVhci4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gZmllbGQgICAgIHRoZSB0aW1lIGZpZWxkLgorICAgICAqIEBwYXJhbSBhbW91bnQgICAgdGhlIGFtb3VudCB0byBhZGQgdG8gdGhlIGZpZWxkLgorICAgICAqCisgICAgICogQGV4Y2VwdGlvbiAgIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZmllbGQgaXMgaW52YWxpZCBvciByZWZlcnMKKyAgICAgKiAgICAgICAgICAgICAgdG8gYSBmaWVsZCB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgbWV0aG9kLgorICAgICAqIEBzZWUgI3JvbGwoaW50LCBpbnQpCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkKGludCBmaWVsZCwgaW50IGFtb3VudCkgeworCisgICAgICAgIGlmIChhbW91bnQgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOyAgIC8vIERvIG5vdGhpbmchCisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBoYW5kbGUgbW9zdCBmaWVsZHMgaW4gdGhlIHNhbWUgd2F5LiAgVGhlIGFsZ29yaXRobSBpcyB0byBhZGQKKyAgICAgICAgLy8gYSBjb21wdXRlZCBhbW91bnQgb2YgbWlsbGlzIHRvIHRoZSBjdXJyZW50IG1pbGxpcy4gIFRoZSBvbmx5CisgICAgICAgIC8vIHdyaW5rbGUgaXMgd2l0aCBEU1QgLS0gZm9yIHNvbWUgZmllbGRzLCBsaWtlIHRoZSBEQVlfT0ZfTU9OVEgsCisgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdGhlIEhPVVIgdG8gc2hpZnQgZHVlIHRvIGNoYW5nZXMgaW4gRFNULiAgSWYgdGhlCisgICAgICAgIC8vIHJlc3VsdCBvZiB0aGUgYWRkIG9wZXJhdGlvbiBpcyB0byBtb3ZlIGZyb20gRFNUIHRvIFN0YW5kYXJkLCBvcgorICAgICAgICAvLyB2aWNlIHZlcnNhLCB3ZSBuZWVkIHRvIGFkanVzdCBieSBhbiBob3VyIGZvcndhcmQgb3IgYmFjaywKKyAgICAgICAgLy8gcmVzcGVjdGl2ZWx5LiAgRm9yIHN1Y2ggZmllbGRzIHdlIHNldCBrZWVwSG91ckludmFyaWFudCB0byB0cnVlLgorICAgICAgICAKKyAgICAgICAgLy8gV2Ugb25seSBhZGp1c3QgdGhlIERTVCBmb3IgZmllbGRzIGxhcmdlciB0aGFuIGFuIGhvdXIuICBGb3IKKyAgICAgICAgLy8gZmllbGRzIHNtYWxsZXIgdGhhbiBhbiBob3VyLCB3ZSBjYW5ub3QgYWRqdXN0IGZvciBEU1Qgd2l0aG91dAorICAgICAgICAvLyBjYXVzaW5nIHByb2JsZW1zLiAgZm9yIGluc3RhbmNlLCBpZiB5b3UgYWRkIG9uZSBob3VyIHRvIEFwcmlsIDUsCisgICAgICAgIC8vIDE5OTgsIDE6MDAgQU0sIGluIFBTVCwgdGhlIHRpbWUgYmVjb21lcyAiMjowMCBBTSBQRFQiIChhbgorICAgICAgICAvLyBpbGxlZ2FsIHZhbHVlKSwgYnV0IHRoZW4gdGhlIGFkanVzdG1lbnQgc2VlcyB0aGUgY2hhbmdlIGFuZAorICAgICAgICAvLyBjb21wZW5zYXRlcyBieSBzdWJ0cmFjdGluZyBhbiBob3VyLiAgQXMgYSByZXN1bHQgdGhlIHRpbWUKKyAgICAgICAgLy8gZG9lc24ndCBhZHZhbmNlIGF0IGFsbC4KKworICAgICAgICAvLyBGb3Igc29tZSBmaWVsZHMgbGFyZ2VyIHRoYW4gYSBkYXksIHN1Y2ggYXMgYSBNT05USCwgd2UgcGluIHRoZQorICAgICAgICAvLyBEQVlfT0ZfTU9OVEguICBUaGlzIGFsbG93cyA8TWFyY2ggMzE+LmFkZChNT05USCwgMSkgdG8gYmUKKyAgICAgICAgLy8gPEFwcmlsIDMwPiwgcmF0aGVyIHRoYW4gPEFwcmlsIDMxPiA9PiA8TWF5IDE+LgorCisgICAgICAgIGxvbmcgZGVsdGEgPSBhbW91bnQ7IC8vIGRlbHRhIGluIG1zCisgICAgICAgIGJvb2xlYW4ga2VlcEhvdXJJbnZhcmlhbnQgPSB0cnVlOworCisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSBZRUFSOgorICAgICAgICBjYXNlIEVYVEVOREVEX1lFQVI6CisgICAgICAgIGNhc2UgWUVBUl9XT1k6CisgICAgICAgIGNhc2UgTU9OVEg6CisgICAgICAgICAgICBzZXQoZmllbGQsIGdldChmaWVsZCkgKyBhbW91bnQpOworICAgICAgICAgICAgcGluRmllbGQoREFZX09GX01PTlRIKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFdFRUtfT0ZfWUVBUjoKKyAgICAgICAgY2FzZSBXRUVLX09GX01PTlRIOgorICAgICAgICBjYXNlIERBWV9PRl9XRUVLX0lOX01PTlRIOgorICAgICAgICAgICAgZGVsdGEgKj0gT05FX1dFRUs7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFNX1BNOgorICAgICAgICAgICAgZGVsdGEgKj0gMTIgKiBPTkVfSE9VUjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREFZX09GX01PTlRIOgorICAgICAgICBjYXNlIERBWV9PRl9ZRUFSOgorICAgICAgICBjYXNlIERBWV9PRl9XRUVLOgorICAgICAgICBjYXNlIERPV19MT0NBTDoKKyAgICAgICAgY2FzZSBKVUxJQU5fREFZOgorICAgICAgICAgICAgZGVsdGEgKj0gT05FX0RBWTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSE9VUl9PRl9EQVk6CisgICAgICAgIGNhc2UgSE9VUjoKKyAgICAgICAgICAgIGRlbHRhICo9IE9ORV9IT1VSOworICAgICAgICAgICAga2VlcEhvdXJJbnZhcmlhbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlOVVRFOgorICAgICAgICAgICAgZGVsdGEgKj0gT05FX01JTlVURTsKKyAgICAgICAgICAgIGtlZXBIb3VySW52YXJpYW50ID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNFQ09ORDoKKyAgICAgICAgICAgIGRlbHRhICo9IE9ORV9TRUNPTkQ7CisgICAgICAgICAgICBrZWVwSG91ckludmFyaWFudCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNSUxMSVNFQ09ORDoKKyAgICAgICAgY2FzZSBNSUxMSVNFQ09ORFNfSU5fREFZOgorICAgICAgICAgICAga2VlcEhvdXJJbnZhcmlhbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYWxlbmRhci5hZGQoIiArIGZpZWxkTmFtZShmaWVsZCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbiBvcmRlciB0byBrZWVwIHRoZSBob3VyIGludmFyaWFudCAoZm9yIGZpZWxkcyB3aGVyZSB0aGlzIGlzCisgICAgICAgIC8vIGFwcHJvcHJpYXRlKSwgcmVjb3JkIHRoZSBEU1RfT0ZGU0VUIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGFkZCgpCisgICAgICAgIC8vIG9wZXJhdGlvbi4gIElmIGl0IGhhcyBjaGFuZ2VkLCB0aGVuIGFkanVzdCB0aGUgbWlsbGlzIHRvCisgICAgICAgIC8vIGNvbXBlbnNhdGUuCisgICAgICAgIGludCBkc3QgPSAwOworICAgICAgICBpZiAoa2VlcEhvdXJJbnZhcmlhbnQpIHsKKyAgICAgICAgICAgIGRzdCA9IGdldChEU1RfT0ZGU0VUKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldFRpbWVJbk1pbGxpcyhnZXRUaW1lSW5NaWxsaXMoKSArIGRlbHRhKTsKKworICAgICAgICBpZiAoa2VlcEhvdXJJbnZhcmlhbnQpIHsKKyAgICAgICAgICAgIGRzdCAtPSBnZXQoRFNUX09GRlNFVCk7CisgICAgICAgICAgICBpZiAoZHN0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBzZXRUaW1lSW5NaWxsaXModGltZSArIGRzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgY2FsZW5kYXIgaW4gdGhlIGxhbmd1YWdlIG9mIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5TmFtZShMb2NhbGUgbG9jKSB7CisgICAgICAgIHJldHVybiB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpOworICAgIH0KKyAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBJbnRlcmZhY2UgZm9yIGNyZWF0aW5nIGN1c3RvbiBEYXRlRm9ybWF0cyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIENhbGVuZGFycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgPGNvZGU+RGF0ZUZvcm1hdDwvY29kZT4gYXBwcm9wcmlhdGUgdG8gdGhpcyBjYWxlbmRhci4KKyAgICAgKiBTdWJjbGFzc2VzIHdpc2hpbmcgdG8gc3BlY2lhbGl6ZSB0aGlzIGJlaGF2aW9yIHNob3VsZCBvdmVycmlkZQorICAgICAqIDxjb2RlPmhhbmRsZUdldERhdGVGb3JtYXQoKTwvY29kZT4KKyAgICAgKiBAc2VlICNoYW5kbGVHZXREYXRlRm9ybWF0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIERhdGVGb3JtYXQgZ2V0RGF0ZVRpbWVGb3JtYXQoaW50IGRhdGVTdHlsZSwgaW50IHRpbWVTdHlsZSwgTG9jYWxlIGxvYykgeworICAgICAgICByZXR1cm4gZm9ybWF0SGVscGVyKHRoaXMsIGxvYywgZGF0ZVN0eWxlLCB0aW1lU3R5bGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIDxjb2RlPkRhdGVGb3JtYXQ8L2NvZGU+IGFwcHJvcHJpYXRlIHRvIHRoaXMgY2FsZW5kYXIuCisgICAgICogVGhpcyBpcyBhIGZyYW1ld29yayBtZXRob2QgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuICBUaGlzIG1ldGhvZAorICAgICAqIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgY2FsZW5kYXItc3BlY2lmaWMgRGF0ZUZvcm1hdCBhbmQKKyAgICAgKiBEYXRlRm9ybWF0U3ltYm9scyBvYmplY3RzIGFzIG5lZWRlZC4KKyAgICAgKiBAcGFyYW0gcGF0dGVybiB0aGUgcGF0dGVybiwgc3BlY2lmaWMgdG8gdGhlIDxjb2RlPkRhdGVGb3JtYXQ8L2NvZGU+CisgICAgICogc3ViY2xhc3MKKyAgICAgKiBAcGFyYW0gbG9jYWxlIHRoZSBsb2NhbGUgZm9yIHdoaWNoIHRoZSBzeW1ib2xzIHNob3VsZCBiZSBkcmF3bgorICAgICAqIEByZXR1cm4gYSA8Y29kZT5EYXRlRm9ybWF0PC9jb2RlPiBhcHByb3ByaWF0ZSB0byB0aGlzIGNhbGVuZGFyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIERhdGVGb3JtYXQgaGFuZGxlR2V0RGF0ZUZvcm1hdChTdHJpbmcgcGF0dGVybiwgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICBEYXRlRm9ybWF0U3ltYm9scyBzeW1ib2xzID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKHRoaXMsIGxvY2FsZSk7CisgICAgICAgIHJldHVybiBuZXcgU2ltcGxlRGF0ZUZvcm1hdChwYXR0ZXJuLCBzeW1ib2xzKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHByaXZhdGUgRGF0ZUZvcm1hdCBmb3JtYXRIZWxwZXIoQ2FsZW5kYXIgY2FsLCBMb2NhbGUgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGF0ZVN0eWxlLCBpbnQgdGltZVN0eWxlKQorICAgIHsKKyAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFyZSBhbnkgY3VzdG9tIHJlc291cmNlcyBmb3IgdGhpcyBjYWxlbmRhcgorICAgICAgICAvLyBJZiBub3QsIGp1c3QgdXNlIHRoZSBkZWZhdWx0IERhdGVGb3JtYXQKKyAgICAgICAgRGF0ZUZvcm1hdCByZXN1bHQgPSBudWxsOworCisgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IERhdGVGb3JtYXRTeW1ib2xzLmdldERhdGVGb3JtYXRCdW5kbGUoY2FsLCBsb2MpOworCisgICAgICAgIGlmIChidW5kbGUgIT0gbnVsbCkgeworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHBhdHRlcm5zID0gYnVuZGxlLmdldFN0cmluZ0FycmF5KCJEYXRlVGltZVBhdHRlcm5zIik7CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGF0dGVybiA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKCh0aW1lU3R5bGUgPj0gMCkgJiYgKGRhdGVTdHlsZSA+PSAwKSkgeworICAgICAgICAgICAgICAgICAgICBPYmplY3RbXSBkYXRlVGltZUFyZ3MgPSB7IHBhdHRlcm5zW3RpbWVTdHlsZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybnNbZGF0ZVN0eWxlICsgNF0gfTsKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KHBhdHRlcm5zWzhdLCBkYXRlVGltZUFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lU3R5bGUgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybnNbdGltZVN0eWxlXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0ZVN0eWxlID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm5zW2RhdGVTdHlsZSArIDRdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTm8gZGF0ZSBvciB0aW1lIHN0eWxlIHNwZWNpZmllZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjYWwuaGFuZGxlR2V0RGF0ZUZvcm1hdChwYXR0ZXJuLCBsb2MpOworICAgICAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBjdXN0b20gcGF0dGVybnMKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoZGF0ZVN0eWxlLCB0aW1lU3R5bGUsIGxvYyk7CisgICAgICAgICAgICAgICAgRGF0ZUZvcm1hdFN5bWJvbHMgc3ltYm9scyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scyhjYWwsIGxvYyk7CisgICAgICAgICAgICAgICAgKChTaW1wbGVEYXRlRm9ybWF0KSByZXN1bHQpLnNldERhdGVGb3JtYXRTeW1ib2xzKHN5bWJvbHMpOyAvLyBhbGl1CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBTaW1wbGVEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoZGF0ZVN0eWxlLCB0aW1lU3R5bGUsIGxvYyk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LnNldENhbGVuZGFyKGNhbCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHJvdGVjdGVkIHV0aWxpdHkgbWV0aG9kcyBmb3IgdXNlIGJ5IHN1YmNsYXNzZXMuICBUaGVzZSBhcmUgdmVyeSBoYW5keQorICAgIC8vIGZvciBpbXBsZW1lbnRpbmcgYWRkLCByb2xsLCBhbmQgY29tcHV0ZUZpZWxkcy4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGp1c3QgdGhlIHNwZWNpZmllZCBmaWVsZCBzbyB0aGF0IGl0IGlzIHdpdGhpbgorICAgICAqIHRoZSBhbGxvd2FibGUgcmFuZ2UgZm9yIHRoZSBkYXRlIHRvIHdoaWNoIHRoaXMgY2FsZW5kYXIgaXMgc2V0LgorICAgICAqIEZvciBleGFtcGxlLCBpbiBhIEdyZWdvcmlhbiBjYWxlbmRhciBwaW5uaW5nIHRoZSB7QGxpbmsgI0RBWV9PRl9NT05USCBEQVlfT0ZfTU9OVEh9CisgICAgICogZmllbGQgZm9yIGEgY2FsZW5kYXIgc2V0IHRvIEFwcmlsIDMxIHdvdWxkIGNhdXNlIGl0IHRvIGJlIHNldAorICAgICAqIHRvIEFwcmlsIDMwLgorICAgICAqIDxwPgorICAgICAqIDxiPlN1YmNsYXNzaW5nOjwvYj4KKyAgICAgKiA8YnI+CisgICAgICogVGhpcyB1dGlsaXR5IG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHN1YmNsYXNzZXMgdGhhdCBuZWVkIHRvIGltcGxlbWVudAorICAgICAqIHRoZWlyIG93biBvdmVycmlkZXMgb2Yge0BsaW5rICNyb2xsIHJvbGx9IGFuZCB7QGxpbmsgI2FkZCBhZGR9LgorICAgICAqIDxwPgorICAgICAqIDxiPk5vdGU6PC9iPgorICAgICAqIDxjb2RlPnBpbkZpZWxkPC9jb2RlPiBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZgorICAgICAqIHtAbGluayAjZ2V0QWN0dWFsTWluaW11bSBnZXRBY3R1YWxNaW5pbXVtfQorICAgICAqIGFuZCB7QGxpbmsgI2dldEFjdHVhbE1heGltdW0gZ2V0QWN0dWFsTWF4aW11bX0uICBJZiBlaXRoZXIgb2YgdGhvc2UgbWV0aG9kcyB1c2VzCisgICAgICogYSBzbG93LCBpdGVyYXRpdmUgYWxnb3JpdGhtIGZvciBhIHBhcnRpY3VsYXIgZmllbGQsIGl0IHdvdWxkIGJlCisgICAgICogdW53aXNlIHRvIGF0dGVtcHQgdG8gY2FsbCA8Y29kZT5waW5GaWVsZDwvY29kZT4gZm9yIHRoYXQgZmllbGQuICBJZiB5b3UKKyAgICAgKiByZWFsbHkgZG8gbmVlZCB0byBkbyBzbywgeW91IHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBkbworICAgICAqIHNvbWV0aGluZyBtb3JlIGVmZmljaWVudCBmb3IgdGhhdCBmaWVsZC4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gZmllbGQgVGhlIGNhbGVuZGFyIGZpZWxkIHdob3NlIHZhbHVlIHNob3VsZCBiZSBwaW5uZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRBY3R1YWxNaW5pbXVtCisgICAgICogQHNlZSAjZ2V0QWN0dWFsTWF4aW11bQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIHBpbkZpZWxkKGludCBmaWVsZCkgeworICAgICAgICBpbnQgbWF4ID0gZ2V0QWN0dWFsTWF4aW11bShmaWVsZCk7CisgICAgICAgIGludCBtaW4gPSBnZXRBY3R1YWxNaW5pbXVtKGZpZWxkKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmaWVsZHNbZmllbGRdID4gbWF4KSB7CisgICAgICAgICAgICBzZXQoZmllbGQsIG1heCk7CisgICAgICAgIH0gZWxzZSBpZiAoZmllbGRzW2ZpZWxkXSA8IG1pbikgeworICAgICAgICAgICAgc2V0KGZpZWxkLCBtaW4pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSB3ZWVrIG51bWJlciBvZiBhIGRheSwgd2l0aGluIGEgcGVyaW9kLiBUaGlzIG1heSBiZSB0aGUgd2VlayBudW1iZXIgaW4KKyAgICAgKiBhIHllYXIgb3IgdGhlIHdlZWsgbnVtYmVyIGluIGEgbW9udGguIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGEgdmFsdWUgPj0gMSwgYnV0IGlmCisgICAgICogc29tZSBpbml0aWFsIGRheXMgb2YgdGhlIHBlcmlvZCBhcmUgZXhjbHVkZWQgZnJvbSB3ZWVrIDEsIGJlY2F1c2UKKyAgICAgKiB7QGxpbmsgI2dldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsgZ2V0TWluaW1hbERheXNJbkZpcnN0V2Vla30gaXMgPiAxLCB0aGVuIAorICAgICAqIHRoZSB3ZWVrIG51bWJlciB3aWxsIGJlIHplcm8gZm9yIHRob3NlCisgICAgICogaW5pdGlhbCBkYXlzLiBUaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgZGF5IG51bWJlciBhbmQgZGF5IG9mIHdlZWsgZm9yIHNvbWUKKyAgICAgKiBrbm93biBkYXRlIGluIHRoZSBwZXJpb2QgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBkYXkgb2Ygd2VlayAKKyAgICAgKiBvbiB0aGUgZGVzaXJlZCBkYXkuCisgICAgICogPHA+CisgICAgICogPGI+U3ViY2xhc3Npbmc6PC9iPgorICAgICAqIDxicj4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHN1YmNsYXNzZXMgaW4gaW1wbGVtZW50aW5nIHRoZWlyCisgICAgICoge0BsaW5rICNjb21wdXRlVGltZSBjb21wdXRlVGltZX0gYW5kL29yIHtAbGluayAjY29tcHV0ZUZpZWxkcyBjb21wdXRlRmllbGRzfSBtZXRob2RzLgorICAgICAqIEl0IGlzIG9mdGVuIHVzZWZ1bCBpbiB7QGxpbmsgI2dldEFjdHVhbE1pbmltdW0gZ2V0QWN0dWFsTWluaW11bX0gYW5kCisgICAgICoge0BsaW5rICNnZXRBY3R1YWxNYXhpbXVtIGdldEFjdHVhbE1heGltdW19IGFzIHdlbGwuCisgICAgICogPHA+CisgICAgICogVGhpcyB2YXJpYW50IGlzIGhhbmR5IGZvciBjb21wdXRpbmcgdGhlIHdlZWsgbnVtYmVyIG9mIHNvbWUgb3RoZXIKKyAgICAgKiBkYXkgb2YgYSBwZXJpb2QgKG9mdGVuIHRoZSBmaXJzdCBvciBsYXN0IGRheSBvZiB0aGUgcGVyaW9kKSB3aGVuIGl0cyBkYXkKKyAgICAgKiBvZiB0aGUgd2VlayBpcyBub3Qga25vd24gYnV0IHRoZSBkYXkgbnVtYmVyIGFuZCBkYXkgb2Ygd2VlayBmb3Igc29tZSBvdGhlcgorICAgICAqIGRheSBpbiB0aGUgcGVyaW9kIChlLmcuIHRoZSBjdXJyZW50IGRhdGUpIDxlbT5pczwvZW0+IGtub3duLgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBkZXNpcmVkRGF5ICAgIFRoZSB7QGxpbmsgI0RBWV9PRl9ZRUFSIERBWV9PRl9ZRUFSfSBvcgorICAgICAqICAgICAgICAgICAgICB7QGxpbmsgI0RBWV9PRl9NT05USCBEQVlfT0ZfTU9OVEh9IHdob3NlIHdlZWsgbnVtYmVyIGlzIGRlc2lyZWQuCisgICAgICogICAgICAgICAgICAgIFNob3VsZCBiZSAxIGZvciB0aGUgZmlyc3QgZGF5IG9mIHRoZSBwZXJpb2QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ga25vd25EYXlPZlBlcmlvZCAgIFRoZSB7QGxpbmsgI0RBWV9PRl9ZRUFSIERBWV9PRl9ZRUFSfQorICAgICAqICAgICAgICAgICAgICBvciB7QGxpbmsgI0RBWV9PRl9NT05USCBEQVlfT0ZfTU9OVEh9IGZvciBhIGRheSBpbiB0aGUgcGVyaW9kIHdob3NlCisgICAgICogICAgICAgICAgICAgIHtAbGluayAjREFZX09GX1dFRUsgREFZX09GX1dFRUt9IGlzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgPGNvZGU+a25vd25EYXlPZldlZWs8L2NvZGU+IHBhcmFtZXRlci4KKyAgICAgKiAgICAgICAgICAgICAgU2hvdWxkIGJlIDEgZm9yIGZpcnN0IGRheSBvZiBwZXJpb2QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ga25vd25EYXlPZldlZWsgIFRoZSB7QGxpbmsgI0RBWV9PRl9XRUVLIERBWV9PRl9XRUVLfSBmb3IgdGhlIGRheQorICAgICAqICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSA8Y29kZT5rbm93bkRheU9mUGVyaW9kPC9jb2RlPiBwYXJhbWV0ZXIuCisgICAgICogICAgICAgICAgICAgIDEtYmFzZWQgd2l0aCAxPVN1bmRheS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgICBUaGUgd2VlayBudW1iZXIgKG9uZS1iYXNlZCksIG9yIHplcm8gaWYgdGhlIGRheSBmYWxscyBiZWZvcmUKKyAgICAgKiAgICAgICAgICAgICAgdGhlIGZpcnN0IHdlZWsgYmVjYXVzZQorICAgICAqICAgICAgICAgICAgICB7QGxpbmsgI2dldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsgZ2V0TWluaW1hbERheXNJbkZpcnN0V2Vla30KKyAgICAgKiAgICAgICAgICAgICAgaXMgbW9yZSB0aGFuIG9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IHdlZWtOdW1iZXIoaW50IGRlc2lyZWREYXksIGludCBkYXlPZlBlcmlvZCwgaW50IGRheU9mV2VlaykKKyAgICB7CisgICAgICAgIC8vIERldGVybWluZSB0aGUgZGF5IG9mIHRoZSB3ZWVrIG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHBlcmlvZAorICAgICAgICAvLyBpbiBxdWVzdGlvbiAoZWl0aGVyIGEgeWVhciBvciBhIG1vbnRoKS4gIFplcm8gcmVwcmVzZW50cyB0aGUKKyAgICAgICAgLy8gZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIG9uIHRoaXMgY2FsZW5kYXIuCisgICAgICAgIGludCBwZXJpb2RTdGFydERheU9mV2VlayA9IChkYXlPZldlZWsgLSBnZXRGaXJzdERheU9mV2VlaygpIC0gZGF5T2ZQZXJpb2QgKyAxKSAlIDc7CisgICAgICAgIGlmIChwZXJpb2RTdGFydERheU9mV2VlayA8IDApIHBlcmlvZFN0YXJ0RGF5T2ZXZWVrICs9IDc7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgd2VlayBudW1iZXIuICBJbml0aWFsbHksIGlnbm9yZSB0aGUgZmlyc3Qgd2Vlaywgd2hpY2gKKyAgICAgICAgLy8gbWF5IGJlIGZyYWN0aW9uYWwgKG9yIG1heSBub3QgYmUpLiAgV2UgYWRkIHBlcmlvZFN0YXJ0RGF5T2ZXZWVrIGluCisgICAgICAgIC8vIG9yZGVyIHRvIGZpbGwgb3V0IHRoZSBmaXJzdCB3ZWVrLCBpZiBpdCBpcyBmcmFjdGlvbmFsLgorICAgICAgICBpbnQgd2Vla05vID0gKGRlc2lyZWREYXkgKyBwZXJpb2RTdGFydERheU9mV2VlayAtIDEpLzc7CisKKyAgICAgICAgLy8gSWYgdGhlIGZpcnN0IHdlZWsgaXMgbG9uZyBlbm91Z2gsIHRoZW4gY291bnQgaXQuICBJZgorICAgICAgICAvLyB0aGUgbWluaW1hbCBkYXlzIGluIHRoZSBmaXJzdCB3ZWVrIGlzIG9uZSwgb3IgaWYgdGhlIHBlcmlvZCBzdGFydAorICAgICAgICAvLyBpcyB6ZXJvLCB3ZSBhbHdheXMgaW5jcmVtZW50IHdlZWtOby4KKyAgICAgICAgaWYgKCg3IC0gcGVyaW9kU3RhcnREYXlPZldlZWspID49IGdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKSkgKyt3ZWVrTm87CisKKyAgICAgICAgcmV0dXJuIHdlZWtObzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHdlZWsgbnVtYmVyIG9mIGEgZGF5LCB3aXRoaW4gYSBwZXJpb2QuIFRoaXMgbWF5IGJlIHRoZSB3ZWVrIG51bWJlciBpbgorICAgICAqIGEgeWVhciwgb3IgdGhlIHdlZWsgbnVtYmVyIGluIGEgbW9udGguIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGEgdmFsdWUgPj0gMSwgYnV0IGlmCisgICAgICogc29tZSBpbml0aWFsIGRheXMgb2YgdGhlIHBlcmlvZCBhcmUgZXhjbHVkZWQgZnJvbSB3ZWVrIDEsIGJlY2F1c2UKKyAgICAgKiB7QGxpbmsgI2dldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsgZ2V0TWluaW1hbERheXNJbkZpcnN0V2Vla30gaXMgPiAxLAorICAgICAqIHRoZW4gdGhlIHdlZWsgbnVtYmVyIHdpbGwgYmUgemVybyBmb3IgdGhvc2UKKyAgICAgKiBpbml0aWFsIGRheXMuIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoZSBkYXkgb2Ygd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUgaW4gb3JkZXIgdG8gCisgICAgICogZGV0ZXJtaW5lIHRoZSByZXN1bHQuCisgICAgICogPHA+CisgICAgICogPGI+U3ViY2xhc3Npbmc6PC9iPgorICAgICAqIDxicj4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHN1YmNsYXNzZXMgaW4gaW1wbGVtZW50aW5nIHRoZWlyCisgICAgICoge0BsaW5rICNjb21wdXRlVGltZSBjb21wdXRlVGltZX0gYW5kL29yIHtAbGluayAjY29tcHV0ZUZpZWxkcyBjb21wdXRlRmllbGRzfSBtZXRob2RzLgorICAgICAqIEl0IGlzIG9mdGVuIHVzZWZ1bCBpbiB7QGxpbmsgI2dldEFjdHVhbE1pbmltdW0gZ2V0QWN0dWFsTWluaW11bX0gYW5kCisgICAgICoge0BsaW5rICNnZXRBY3R1YWxNYXhpbXVtIGdldEFjdHVhbE1heGltdW19IGFzIHdlbGwuCisgICAgICogPHA+CisgICAgICogQHBhcmFtIGRheU9mUGVyaW9kICAgVGhlIHtAbGluayAjREFZX09GX1lFQVIgREFZX09GX1lFQVJ9IG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAge0BsaW5rICNEQVlfT0ZfTU9OVEggREFZX09GX01PTlRIfSB3aG9zZSB3ZWVrIG51bWJlciBpcyBkZXNpcmVkLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFNob3VsZCBiZSAxIGZvciB0aGUgZmlyc3QgZGF5IG9mIHRoZSBwZXJpb2QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF5b2ZXZWVrICAgICBUaGUge0BsaW5rICNEQVlfT0ZfV0VFSyBEQVlfT0ZfV0VFS30gZm9yIHRoZSBkYXkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSA8Y29kZT5kYXlPZlBlcmlvZDwvY29kZT4gcGFyYW1ldGVyLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgIDEtYmFzZWQgd2l0aCAxPVN1bmRheS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgICBUaGUgd2VlayBudW1iZXIgKG9uZS1iYXNlZCksIG9yIHplcm8gaWYgdGhlIGRheSBmYWxscyBiZWZvcmUKKyAgICAgKiAgICAgICAgICAgICAgdGhlIGZpcnN0IHdlZWsgYmVjYXVzZQorICAgICAqICAgICAgICAgICAgICB7QGxpbmsgI2dldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsgZ2V0TWluaW1hbERheXNJbkZpcnN0V2Vla30KKyAgICAgKiAgICAgICAgICAgICAgaXMgbW9yZSB0aGFuIG9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IHdlZWtOdW1iZXIoaW50IGRheU9mUGVyaW9kLCBpbnQgZGF5T2ZXZWVrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdlZWtOdW1iZXIoZGF5T2ZQZXJpb2QsIGRheU9mUGVyaW9kLCBkYXlPZldlZWspOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIENvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFtORVddCisgICAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGdpdmVuIHRpbWUgYW5kIHRoZSB0aW1lIHRoaXMKKyAgICAgKiBjYWxlbmRhciBvYmplY3QgaXMgc2V0IHRvLiAgSWYgdGhpcyBjYWxlbmRhciBpcyBzZXQKKyAgICAgKiA8ZW0+YmVmb3JlPC9lbT4gdGhlIGdpdmVuIHRpbWUsIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlCisgICAgICogcG9zaXRpdmUuICBJZiB0aGlzIGNhbGVuZGFyIGlzIHNldCA8ZW0+YWZ0ZXI8L2VtPiB0aGUgZ2l2ZW4KKyAgICAgKiB0aW1lLCB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSBuZWdhdGl2ZS4gIFRoZQorICAgICAqIDxjb2RlPmZpZWxkPC9jb2RlPiBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB1bml0cyBvZiB0aGUgcmV0dXJuCisgICAgICogdmFsdWUuICBGb3IgZXhhbXBsZSwgaWYgPGNvZGU+ZmllbGREaWZmZXJlbmNlKHdoZW4sCisgICAgICogQ2FsZW5kYXIuTU9OVEgpPC9jb2RlPiByZXR1cm5zIDMsIHRoZW4gdGhpcyBjYWxlbmRhciBpcyBzZXQgdG8KKyAgICAgKiAzIG1vbnRocyBiZWZvcmUgPGNvZGU+d2hlbjwvY29kZT4sIGFuZCBwb3NzaWJseSBzb21lIGFkZGl0aW9uCisgICAgICogdGltZSBsZXNzIHRoYW4gb25lIG1vbnRoLgorICAgICAqCisgICAgICogPHA+QXMgYSBzaWRlIGVmZmVjdCBvZiB0aGlzIGNhbGwsIHRoaXMgY2FsZW5kYXIgaXMgYWR2YW5jZWQKKyAgICAgKiB0b3dhcmQgPGNvZGU+d2hlbjwvY29kZT4gYnkgdGhlIGdpdmVuIGFtb3VudC4gIFRoYXQgaXMsIGNhbGxpbmcKKyAgICAgKiB0aGlzIG1ldGhvZCBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgPGNvZGU+YWRkKGZpZWxkLAorICAgICAqIG4pPC9jb2RlPiwgd2hlcmUgPGNvZGU+bjwvY29kZT4gaXMgdGhlIHJldHVybiB2YWx1ZS4KKyAgICAgKgorICAgICAqIDxwPlVzYWdlOiBUbyB1c2UgdGhpcyBtZXRob2QsIGNhbGwgaXQgZmlyc3Qgd2l0aCB0aGUgbGFyZ2VzdAorICAgICAqIGZpZWxkIG9mIGludGVyZXN0LCB0aGVuIHdpdGggcHJvZ3Jlc3NpdmVseSBzbWFsbGVyIGZpZWxkcy4gIEZvcgorICAgICAqIGV4YW1wbGU6CisgICAgICoKKyAgICAgKiA8cHJlPgorICAgICAqIGludCB5ID0gY2FsLmZpZWxkRGlmZmVyZW5jZSh3aGVuLCBDYWxlbmRhci5ZRUFSKTsKKyAgICAgKiBpbnQgbSA9IGNhbC5maWVsZERpZmZlcmVuY2Uod2hlbiwgQ2FsZW5kYXIuTU9OVEgpOworICAgICAqIGludCBkID0gY2FsLmZpZWxkRGlmZmVyZW5jZSh3aGVuLCBDYWxlbmRhci5EQVRFKTs8L3ByZT4KKyAgICAgKgorICAgICAqIGNvbXB1dGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gPGNvZGU+Y2FsPC9jb2RlPiBhbmQKKyAgICAgKiA8Y29kZT53aGVuPC9jb2RlPiBpbiB5ZWFycywgbW9udGhzLCBhbmQgZGF5cy4KKyAgICAgKgorICAgICAqIDxwPk5vdGU6IDxjb2RlPmZpZWxkRGlmZmVyZW5jZSgpPC9jb2RlPiBpcworICAgICAqIDxlbT5hc3ltbWV0cmljYWw8L2VtPi4gIFRoYXQgaXMsIGluIHRoZSBmb2xsb3dpbmcgY29kZToKKyAgICAgKgorICAgICAqIDxwcmU+CisgICAgICogY2FsLnNldFRpbWUoZGF0ZTEpOworICAgICAqIGludCBtMSA9IGNhbC5maWVsZERpZmZlcmVuY2UoZGF0ZTIsIENhbGVuZGFyLk1PTlRIKTsKKyAgICAgKiBpbnQgZDEgPSBjYWwuZmllbGREaWZmZXJlbmNlKGRhdGUyLCBDYWxlbmRhci5EQVRFKTsKKyAgICAgKiBjYWwuc2V0VGltZShkYXRlMik7CisgICAgICogaW50IG0yID0gY2FsLmZpZWxkRGlmZmVyZW5jZShkYXRlMSwgQ2FsZW5kYXIuTU9OVEgpOworICAgICAqIGludCBkMiA9IGNhbC5maWVsZERpZmZlcmVuY2UoZGF0ZTEsIENhbGVuZGFyLkRBVEUpOzwvcHJlPgorICAgICAqCisgICAgICogb25lIG1pZ2h0IGV4cGVjdCB0aGF0IDxjb2RlPm0xID09IC1tMiAmJiBkMSA9PSAtZDI8L2NvZGU+LgorICAgICAqIEhvd2V2ZXIsIHRoaXMgaXMgbm90IGdlbmVyYWxseSB0aGUgY2FzZSwgYmVjYXVzZSBvZgorICAgICAqIGlycmVndWxhcml0aWVzIGluIHRoZSB1bmRlcmx5aW5nIGNhbGVuZGFyIHN5c3RlbSAoZS5nLiwgdGhlCisgICAgICogR3JlZ29yaWFuIGNhbGVuZGFyIGhhcyBhIHZhcnlpbmcgbnVtYmVyIG9mIGRheXMgcGVyIG1vbnRoKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB3aGVuIHRoZSBkYXRlIHRvIGNvbXBhcmUgdGhpcyBjYWxlbmRhcidzIHRpbWUgdG8KKyAgICAgKiBAcGFyYW0gZmllbGQgdGhlIGZpZWxkIGluIHdoaWNoIHRvIGNvbXB1dGUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm4gdGhlIGRpZmZlcmVuY2UsIGVpdGhlciBwb3NpdGl2ZSBvciBuZWdhdGl2ZSwgYmV0d2VlbgorICAgICAqIHRoaXMgY2FsZW5kYXIncyB0aW1lIGFuZCA8Y29kZT53aGVuPC9jb2RlPiwgaW4gdGVybXMgb2YKKyAgICAgKiA8Y29kZT5maWVsZDwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBmaWVsZERpZmZlcmVuY2UoRGF0ZSB3aGVuLCBpbnQgZmllbGQpIHsKKyAgICAgICAgaW50IG1pbiA9IDA7CisgICAgICAgIGxvbmcgc3RhcnRNcyA9IGdldFRpbWVJbk1pbGxpcygpOworICAgICAgICBsb25nIHRhcmdldE1zID0gd2hlbi5nZXRUaW1lKCk7CisgICAgICAgIC8vIEFsd2F5cyBhZGQgZnJvbSB0aGUgc3RhcnQgbWlsbGlzLiAgVGhpcyBhY2NvbW9kYXRlcworICAgICAgICAvLyBvcGVyYXRpb25zIGxpa2UgYWRkaW5nIHllYXJzIGZyb20gRmVicnVhcnkgMjksIDIwMDAgdXAgdG8KKyAgICAgICAgLy8gRmVicnVhcnkgMjksIDIwMDQuICBJZiAxLCAxLCAxLCAxIGlzIGFkZGVkIHRvIHRoZSB5ZWFyCisgICAgICAgIC8vIGZpZWxkLCB0aGUgRE9NIGdldHMgcGlubmVkIHRvIDI4IGFuZCBzdGF5cyB0aGVyZSwgZ2l2aW5nIGFuCisgICAgICAgIC8vIGluY29ycmVjdCBET00gZGlmZmVyZW5jZSBvZiAxLiAgV2UgaGF2ZSB0byBhZGQgMSwgcmVzZXQsIDIsCisgICAgICAgIC8vIHJlc2V0LCAzLCByZXNldCwgNC4KKyAgICAgICAgaWYgKHN0YXJ0TXMgPCB0YXJnZXRNcykgeworICAgICAgICAgICAgaW50IG1heCA9IDE7CisgICAgICAgICAgICAvLyBGaW5kIGEgdmFsdWUgdGhhdCBpcyB0b28gbGFyZ2UKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBzZXRUaW1lSW5NaWxsaXMoc3RhcnRNcyk7CisgICAgICAgICAgICAgICAgYWRkKGZpZWxkLCBtYXgpOworICAgICAgICAgICAgICAgIGxvbmcgbXMgPSBnZXRUaW1lSW5NaWxsaXMoKTsKKyAgICAgICAgICAgICAgICBpZiAobXMgPT0gdGFyZ2V0TXMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1heDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zID4gdGFyZ2V0TXMpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4IDw8PSAxOworICAgICAgICAgICAgICAgICAgICBpZiAobWF4IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmllbGQgZGlmZmVyZW5jZSB0b28gbGFyZ2UgdG8gZml0IGludG8gaW50CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoCisgICAgICAgICAgICB3aGlsZSAoKG1heCAtIG1pbikgPiAxKSB7CisgICAgICAgICAgICAgICAgaW50IHQgPSAobWluICsgbWF4KSAvIDI7CisgICAgICAgICAgICAgICAgc2V0VGltZUluTWlsbGlzKHN0YXJ0TXMpOworICAgICAgICAgICAgICAgIGFkZChmaWVsZCwgdCk7CisgICAgICAgICAgICAgICAgbG9uZyBtcyA9IGdldFRpbWVJbk1pbGxpcygpOworICAgICAgICAgICAgICAgIGlmIChtcyA9PSB0YXJnZXRNcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zID4gdGFyZ2V0TXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtaW4gPSB0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzdGFydE1zID4gdGFyZ2V0TXMpIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgd29ya3MsIGFuZCBtYWtlcyB0aGUgY29kZSBzbWFsbGVyLCBidXQgY29zdHMKKyAgICAgICAgICAgICAgICAvLyBhbiBleHRyYSBvYmplY3QgY3JlYXRpb24gYW5kIGFuIGV4dHJhIGNvdXBsZSBjeWNsZXMKKyAgICAgICAgICAgICAgICAvLyBvZiBjYWxlbmRhciBjb21wdXRhdGlvbi4KKyAgICAgICAgICAgICAgICBzZXRUaW1lSW5NaWxsaXModGFyZ2V0TXMpOworICAgICAgICAgICAgICAgIG1pbiA9IC1maWVsZERpZmZlcmVuY2UobmV3IERhdGUoc3RhcnRNcyksIGZpZWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBtYXggPSAtMTsKKyAgICAgICAgICAgIC8vIEZpbmQgYSB2YWx1ZSB0aGF0IGlzIHRvbyBzbWFsbAorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIHNldFRpbWVJbk1pbGxpcyhzdGFydE1zKTsKKyAgICAgICAgICAgICAgICBhZGQoZmllbGQsIG1heCk7CisgICAgICAgICAgICAgICAgbG9uZyBtcyA9IGdldFRpbWVJbk1pbGxpcygpOworICAgICAgICAgICAgICAgIGlmIChtcyA9PSB0YXJnZXRNcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF4OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXMgPCB0YXJnZXRNcykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtYXggPDw9IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmllbGQgZGlmZmVyZW5jZSB0b28gbGFyZ2UgdG8gZml0IGludG8gaW50CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoCisgICAgICAgICAgICB3aGlsZSAoKG1pbiAtIG1heCkgPiAxKSB7CisgICAgICAgICAgICAgICAgaW50IHQgPSAobWluICsgbWF4KSAvIDI7CisgICAgICAgICAgICAgICAgc2V0VGltZUluTWlsbGlzKHN0YXJ0TXMpOworICAgICAgICAgICAgICAgIGFkZChmaWVsZCwgdCk7CisgICAgICAgICAgICAgICAgbG9uZyBtcyA9IGdldFRpbWVJbk1pbGxpcygpOworICAgICAgICAgICAgICAgIGlmIChtcyA9PSB0YXJnZXRNcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zIDwgdGFyZ2V0TXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtaW4gPSB0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBTZXQgY2FsZW5kYXIgdG8gZW5kIHBvaW50CisgICAgICAgIHNldFRpbWVJbk1pbGxpcyhzdGFydE1zKTsKKyAgICAgICAgYWRkKGZpZWxkLCBtaW4pOworICAgICAgICByZXR1cm4gbWluOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHRpbWUgem9uZSB3aXRoIHRoZSBnaXZlbiB0aW1lIHpvbmUgdmFsdWUuCisgICAgICogQHBhcmFtIHZhbHVlIHRoZSBnaXZlbiB0aW1lIHpvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGltZVpvbmUoVGltZVpvbmUgdmFsdWUpCisgICAgeworICAgICAgICB6b25lID0gdmFsdWU7CisgICAgICAgIC8qIFJlY29tcHV0ZSB0aGUgZmllbGRzIGZyb20gdGhlIHRpbWUgdXNpbmcgdGhlIG5ldyB6b25lLiAgVGhpcyBhbHNvCisgICAgICAgICAqIHdvcmtzIGlmIGlzVGltZVNldCBpcyBmYWxzZSAoYWZ0ZXIgYSBjYWxsIHRvIHNldCgpKS4gIEluIHRoYXQgY2FzZQorICAgICAgICAgKiB0aGUgdGltZSB3aWxsIGJlIGNvbXB1dGVkIGZyb20gdGhlIGZpZWxkcyB1c2luZyB0aGUgbmV3IHpvbmUsIHRoZW4KKyAgICAgICAgICogdGhlIGZpZWxkcyB3aWxsIGdldCByZWNvbXB1dGVkIGZyb20gdGhhdC4gIENvbnNpZGVyIHRoZSBzZXF1ZW5jZSBvZgorICAgICAgICAgKiBjYWxsczogY2FsLnNldFRpbWVab25lKEVTVCk7IGNhbC5zZXQoSE9VUiwgMSk7IGNhbC5zZXRUaW1lWm9uZShQU1QpLgorICAgICAgICAgKiBJcyBjYWwgc2V0IHRvIDEgbydjbG9jayBFU1Qgb3IgMSBvJ2Nsb2NrIFBTVD8gIEFuc3dlcjogUFNULiAgTW9yZQorICAgICAgICAgKiBnZW5lcmFsbHksIGEgY2FsbCB0byBzZXRUaW1lWm9uZSgpIGFmZmVjdHMgY2FsbHMgdG8gc2V0KCkgQkVGT1JFIEFORAorICAgICAgICAgKiBBRlRFUiBpdCB1cCB0byB0aGUgbmV4dCBjYWxsIHRvIGNvbXBsZXRlKCkuCisgICAgICAgICAqLworICAgICAgICBhcmVGaWVsZHNTZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0aW1lIHpvbmUuCisgICAgICogQHJldHVybiB0aGUgdGltZSB6b25lIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVGltZVpvbmUgZ2V0VGltZVpvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHpvbmU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBkYXRlL3RpbWUgaW50ZXJwcmV0YXRpb24gaXMgdG8gYmUgbGVuaWVudC4gIFdpdGgKKyAgICAgKiBsZW5pZW50IGludGVycHJldGF0aW9uLCBhIGRhdGUgc3VjaCBhcyAiRmVicnVhcnkgOTQyLCAxOTk2IiB3aWxsIGJlCisgICAgICogdHJlYXRlZCBhcyBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSA5NDFzdCBkYXkgYWZ0ZXIgRmVicnVhcnkgMSwgMTk5Ni4KKyAgICAgKiBXaXRoIHN0cmljdCBpbnRlcnByZXRhdGlvbiwgc3VjaCBkYXRlcyB3aWxsIGNhdXNlIGFuIGV4Y2VwdGlvbiB0byBiZQorICAgICAqIHRocm93bi4KKyAgICAgKgorICAgICAqIEBzZWUgRGF0ZUZvcm1hdCNzZXRMZW5pZW50CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TGVuaWVudChib29sZWFuIGxlbmllbnQpCisgICAgeworICAgICAgICB0aGlzLmxlbmllbnQgPSBsZW5pZW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlbGwgd2hldGhlciBkYXRlL3RpbWUgaW50ZXJwcmV0YXRpb24gaXMgdG8gYmUgbGVuaWVudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0xlbmllbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxlbmllbnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB3aGF0IHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgaXM7IGUuZy4sIFN1bmRheSBpbiBVUywKKyAgICAgKiBNb25kYXkgaW4gRnJhbmNlLgorICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgZ2l2ZW4gZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEZpcnN0RGF5T2ZXZWVrKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGZpcnN0RGF5T2ZXZWVrID0gdmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB3aGF0IHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgaXM7IGUuZy4sIFN1bmRheSBpbiBVUywKKyAgICAgKiBNb25kYXkgaW4gRnJhbmNlLgorICAgICAqIEByZXR1cm4gdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZpcnN0RGF5T2ZXZWVrKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmaXJzdERheU9mV2VlazsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHdoYXQgdGhlIG1pbmltYWwgZGF5cyByZXF1aXJlZCBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciBhcmUuCisgICAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCB3ZWVrIGlzIGRlZmluZWQgYXMgb25lIHRoYXQgY29udGFpbnMgdGhlIGZpcnN0CisgICAgICogZGF5IG9mIHRoZSBmaXJzdCBtb250aCBvZiBhIHllYXIsIGNhbGwgdGhlIG1ldGhvZCB3aXRoIHZhbHVlIDEuIElmIGl0CisgICAgICogbXVzdCBiZSBhIGZ1bGwgd2VlaywgdXNlIHZhbHVlIDcuCisgICAgICogQHBhcmFtIHZhbHVlIHRoZSBnaXZlbiBtaW5pbWFsIGRheXMgcmVxdWlyZWQgaW4gdGhlIGZpcnN0IHdlZWsKKyAgICAgKiBvZiB0aGUgeWVhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1pbmltYWxEYXlzSW5GaXJzdFdlZWsgPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHdoYXQgdGhlIG1pbmltYWwgZGF5cyByZXF1aXJlZCBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciBhcmU7CisgICAgICogZS5nLiwgaWYgdGhlIGZpcnN0IHdlZWsgaXMgZGVmaW5lZCBhcyBvbmUgdGhhdCBjb250YWlucyB0aGUgZmlyc3QgZGF5CisgICAgICogb2YgdGhlIGZpcnN0IG1vbnRoIG9mIGEgeWVhciwgZ2V0TWluaW1hbERheXNJbkZpcnN0V2VlayByZXR1cm5zIDEuIElmCisgICAgICogdGhlIG1pbmltYWwgZGF5cyByZXF1aXJlZCBtdXN0IGJlIGEgZnVsbCB3ZWVrLCBnZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrCisgICAgICogcmV0dXJucyA3LgorICAgICAqIEByZXR1cm4gdGhlIG1pbmltYWwgZGF5cyByZXF1aXJlZCBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1pbmltYWxEYXlzSW5GaXJzdFdlZWs7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTUlUU1tdW10gPSB7CisgICAgICAgIC8vICAgIE1pbmltdW0gIEdyZWF0ZXN0IG1pbiAgICAgIExlYXN0IG1heCAgIEdyZWF0ZXN0IG1heAorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIEVSQQorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIFlFQVIKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBNT05USAorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIFdFRUtfT0ZfWUVBUgorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIFdFRUtfT0ZfTU9OVEgKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBEQVlfT0ZfTU9OVEgKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBEQVlfT0ZfWUVBUgorICAgICAgICB7ICAgICAgICAgICAxLCAgICAgICAgICAgIDEsICAgICAgICAgICAgIDcsICAgICAgICAgICAgIDcgIH0sIC8vIERBWV9PRl9XRUVLCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gREFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICAgICAgeyAgICAgICAgICAgMCwgICAgICAgICAgICAwLCAgICAgICAgICAgICAxLCAgICAgICAgICAgICAxICB9LCAvLyBBTV9QTQorICAgICAgICB7ICAgICAgICAgICAwLCAgICAgICAgICAgIDAsICAgICAgICAgICAgMTEsICAgICAgICAgICAgMTEgIH0sIC8vIEhPVVIKKyAgICAgICAgeyAgICAgICAgICAgMCwgICAgICAgICAgICAwLCAgICAgICAgICAgIDIzLCAgICAgICAgICAgIDIzICB9LCAvLyBIT1VSX09GX0RBWQorICAgICAgICB7ICAgICAgICAgICAwLCAgICAgICAgICAgIDAsICAgICAgICAgICAgNTksICAgICAgICAgICAgNTkgIH0sIC8vIE1JTlVURQorICAgICAgICB7ICAgICAgICAgICAwLCAgICAgICAgICAgIDAsICAgICAgICAgICAgNTksICAgICAgICAgICAgNTkgIH0sIC8vIFNFQ09ORAorICAgICAgICB7ICAgICAgICAgICAwLCAgICAgICAgICAgIDAsICAgICAgICAgICA5OTksICAgICAgICAgICA5OTkgIH0sIC8vIE1JTExJU0VDT05ECisgICAgICAgIHstMTIqT05FX0hPVVIsIC0xMipPTkVfSE9VUiwgICAxMipPTkVfSE9VUiwgICAxMipPTkVfSE9VUiAgfSwgLy8gWk9ORV9PRkZTRVQKKyAgICAgICAgeyAgICAgICAgICAgMCwgICAgICAgICAgICAwLCAgICAxKk9ORV9IT1VSLCAgICAxKk9ORV9IT1VSICB9LCAvLyBEU1RfT0ZGU0VUCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gWUVBUl9XT1kKKyAgICAgICAgeyAgICAgICAgICAgMSwgICAgICAgICAgICAxLCAgICAgICAgICAgICA3LCAgICAgICAgICAgICA3ICB9LCAvLyBET1dfTE9DQUwKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBFWFRFTkRFRF9ZRUFSCisgICAgICAgIHsgLTB4N0YwMDAwMDAsICAtMHg3RjAwMDAwMCwgICAgMHg3RjAwMDAwMCwgICAgMHg3RjAwMDAwMCAgfSwgLy8gSlVMSUFOX0RBWQorICAgICAgICB7ICAgICAgICAgICAwLCAgICAgICAgICAgIDAsIDI0Kk9ORV9IT1VSLTEsIDI0Kk9ORV9IT1VSLTEgIH0sIC8vIE1JTExJU0VDT05EU19JTl9EQVkKKyAgICB9OworCisgICAgLyoqCisgICAgICogU3ViY2xhc3MgQVBJIGZvciBkZWZpbmluZyBsaW1pdHMgb2YgZGlmZmVyZW50IHR5cGVzLgorICAgICAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmV0dXJuIGxpbWl0cyBmb3IgdGhlCisgICAgICogZm9sbG93aW5nIGZpZWxkczoKKyAgICAgKgorICAgICAqIDxwcmU+RVJBCisgICAgICogWUVBUgorICAgICAqIE1PTlRICisgICAgICogV0VFS19PRl9ZRUFSCisgICAgICogV0VFS19PRl9NT05USAorICAgICAqIERBWV9PRl9NT05USAorICAgICAqIERBWV9PRl9ZRUFSCisgICAgICogREFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICAgKiBZRUFSX1dPWQorICAgICAqIEVYVEVOREVEX1lFQVI8L3ByZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmaWVsZCBvbmUgb2YgdGhlIGFib3ZlIGZpZWxkIG51bWJlcnMKKyAgICAgKiBAcGFyYW0gbGltaXRUeXBlIG9uZSBvZiA8Y29kZT5NSU5JTVVNPC9jb2RlPiwgPGNvZGU+R1JFQVRFU1RfTUlOSU1VTTwvY29kZT4sCisgICAgICogPGNvZGU+TEVBU1RfTUFYSU1VTTwvY29kZT4sIG9yIDxjb2RlPk1BWElNVU08L2NvZGU+CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgYWJzdHJhY3QgcHJvdGVjdGVkIGludCBoYW5kbGVHZXRMaW1pdChpbnQgZmllbGQsIGludCBsaW1pdFR5cGUpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgbGltaXQgZm9yIGEgZmllbGQuCisgICAgICogQHBhcmFtIGZpZWxkIHRoZSBmaWVsZCwgZnJvbSAwLi48L2NvZGU+Z2V0RmllbGRDb3VudCgpLTE8L2NvZGU+CisgICAgICogQHBhcmFtIGxpbWl0VHlwZSB0aGUgdHlwZSBzcGVjaWZpZXIgZm9yIHRoZSBsaW1pdAorICAgICAqIEBzZWUgI01JTklNVU0KKyAgICAgKiBAc2VlICNHUkVBVEVTVF9NSU5JTVVNCisgICAgICogQHNlZSAjTEVBU1RfTUFYSU1VTQorICAgICAqIEBzZWUgI01BWElNVU0KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGdldExpbWl0KGludCBmaWVsZCwgaW50IGxpbWl0VHlwZSkgeworICAgICAgICBzd2l0Y2ggKGZpZWxkKSB7CisgICAgICAgIGNhc2UgREFZX09GX1dFRUs6CisgICAgICAgIGNhc2UgQU1fUE06CisgICAgICAgIGNhc2UgSE9VUjoKKyAgICAgICAgY2FzZSBIT1VSX09GX0RBWToKKyAgICAgICAgY2FzZSBNSU5VVEU6CisgICAgICAgIGNhc2UgU0VDT05EOgorICAgICAgICBjYXNlIE1JTExJU0VDT05EOgorICAgICAgICBjYXNlIFpPTkVfT0ZGU0VUOgorICAgICAgICBjYXNlIERTVF9PRkZTRVQ6CisgICAgICAgIGNhc2UgRE9XX0xPQ0FMOgorICAgICAgICBjYXNlIEpVTElBTl9EQVk6CisgICAgICAgIGNhc2UgTUlMTElTRUNPTkRTX0lOX0RBWToKKyAgICAgICAgICAgIHJldHVybiBMSU1JVFNbZmllbGRdW2xpbWl0VHlwZV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhbmRsZUdldExpbWl0KGZpZWxkLCBsaW1pdFR5cGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIExpbWl0IHR5cGUgZm9yIDxjb2RlPmdldExpbWl0KCk8L2NvZGU+IGFuZCA8Y29kZT5oYW5kbGVHZXRMaW1pdCgpPC9jb2RlPgorICAgICAqIGluZGljYXRpbmcgdGhlIG1pbmltdW0gdmFsdWUgdGhhdCBhIGZpZWxkIGNhbiB0YWtlIChsZWFzdCBtaW5pbXVtKS4KKyAgICAgKiBAc2VlICNnZXRMaW1pdAorICAgICAqIEBzZWUgI2hhbmRsZUdldExpbWl0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUlOSU1VTSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBMaW1pdCB0eXBlIGZvciA8Y29kZT5nZXRMaW1pdCgpPC9jb2RlPiBhbmQgPGNvZGU+aGFuZGxlR2V0TGltaXQoKTwvY29kZT4KKyAgICAgKiBpbmRpY2F0aW5nIHRoZSBncmVhdGVzdCBtaW5pbXVtIHZhbHVlIHRoYXQgYSBmaWVsZCBjYW4gdGFrZS4KKyAgICAgKiBAc2VlICNnZXRMaW1pdAorICAgICAqIEBzZWUgI2hhbmRsZUdldExpbWl0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgR1JFQVRFU1RfTUlOSU1VTSA9IDE7CisKKyAgICAvKioKKyAgICAgKiBMaW1pdCB0eXBlIGZvciA8Y29kZT5nZXRMaW1pdCgpPC9jb2RlPiBhbmQgPGNvZGU+aGFuZGxlR2V0TGltaXQoKTwvY29kZT4KKyAgICAgKiBpbmRpY2F0aW5nIHRoZSBsZWFzdCBtYXhpbXVtIHZhbHVlIHRoYXQgYSBmaWVsZCBjYW4gdGFrZS4KKyAgICAgKiBAc2VlICNnZXRMaW1pdAorICAgICAqIEBzZWUgI2hhbmRsZUdldExpbWl0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTEVBU1RfTUFYSU1VTSA9IDI7CisKKyAgICAvKioKKyAgICAgKiBMaW1pdCB0eXBlIGZvciA8Y29kZT5nZXRMaW1pdCgpPC9jb2RlPiBhbmQgPGNvZGU+aGFuZGxlR2V0TGltaXQoKTwvY29kZT4KKyAgICAgKiBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgYSBmaWVsZCBjYW4gdGFrZSAoZ3JlYXRlc3QgbWF4aW11bSkuCisgICAgICogQHNlZSAjZ2V0TGltaXQKKyAgICAgKiBAc2VlICNoYW5kbGVHZXRMaW1pdAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BWElNVU0gPSAzOworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHRpbWUgZmllbGQuCisgICAgICogZS5nLiwgZm9yIEdyZWdvcmlhbiBEQVlfT0ZfTU9OVEgsIDEuCisgICAgICogQHBhcmFtIGZpZWxkIHRoZSBnaXZlbiB0aW1lIGZpZWxkLgorICAgICAqIEByZXR1cm4gdGhlIG1pbmltdW0gdmFsdWUgZm9yIHRoZSBnaXZlbiB0aW1lIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TWluaW11bShpbnQgZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIGdldExpbWl0KGZpZWxkLCBNSU5JTVVNKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIHZhbHVlIGZvciB0aGUgZ2l2ZW4gdGltZSBmaWVsZC4KKyAgICAgKiBlLmcuIGZvciBHcmVnb3JpYW4gREFZX09GX01PTlRILCAzMS4KKyAgICAgKiBAcGFyYW0gZmllbGQgdGhlIGdpdmVuIHRpbWUgZmllbGQuCisgICAgICogQHJldHVybiB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHRpbWUgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBnZXRNYXhpbXVtKGludCBmaWVsZCkgeworICAgICAgICByZXR1cm4gZ2V0TGltaXQoZmllbGQsIE1BWElNVU0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGhpZ2hlc3QgbWluaW11bSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGlmIHZhcmllcy4KKyAgICAgKiBPdGhlcndpc2Ugc2FtZSBhcyBnZXRNaW5pbXVtKCkuIEZvciBHcmVnb3JpYW4sIG5vIGRpZmZlcmVuY2UuCisgICAgICogQHBhcmFtIGZpZWxkIHRoZSBnaXZlbiB0aW1lIGZpZWxkLgorICAgICAqIEByZXR1cm4gdGhlIGhpZ2hlc3QgbWluaW11bSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHRpbWUgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBnZXRHcmVhdGVzdE1pbmltdW0oaW50IGZpZWxkKSB7CisgICAgICAgIHJldHVybiBnZXRMaW1pdChmaWVsZCwgR1JFQVRFU1RfTUlOSU1VTSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbG93ZXN0IG1heGltdW0gdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWVsZCBpZiB2YXJpZXMuCisgICAgICogT3RoZXJ3aXNlIHNhbWUgYXMgZ2V0TWF4aW11bSgpLiBlLmcuLCBmb3IgR3JlZ29yaWFuIERBWV9PRl9NT05USCwgMjguCisgICAgICogQHBhcmFtIGZpZWxkIHRoZSBnaXZlbiB0aW1lIGZpZWxkLgorICAgICAqIEByZXR1cm4gdGhlIGxvd2VzdCBtYXhpbXVtIHZhbHVlIGZvciB0aGUgZ2l2ZW4gdGltZSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldExlYXN0TWF4aW11bShpbnQgZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIGdldExpbWl0KGZpZWxkLCBMRUFTVF9NQVhJTVVNKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBXZWVrZW5kIHN1cHBvcnQgLS0gZGV0ZXJtaW5pbmcgd2hpY2ggZGF5cyBvZiB0aGUgd2VlayBhcmUgdGhlIHdlZWtlbmQKKyAgICAvLyBpbiBhIGdpdmVuIGxvY2FsZQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGRheSBvZiB0aGUgd2VlayBpcyBhIHdlZWtkYXksIGEKKyAgICAgKiB3ZWVrZW5kIGRheSwgb3IgYSBkYXkgdGhhdCB0cmFuc2l0aW9ucyBmcm9tIG9uZSB0byB0aGUgb3RoZXIsCisgICAgICogaW4gdGhpcyBjYWxlbmRhciBzeXN0ZW0uICBJZiBhIHRyYW5zaXRpb24gb2NjdXJzIGF0IG1pZG5pZ2h0LAorICAgICAqIHRoZW4gdGhlIGRheXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgdHJhbnNpdGlvbiB3aWxsIGhhdmUgdGhlCisgICAgICogdHlwZSBXRUVLREFZIG9yIFdFRUtFTkQuICBJZiBhIHRyYW5zaXRpb24gb2NjdXJzIGF0IGEgdGltZQorICAgICAqIG90aGVyIHRoYW4gbWlkbmlnaHQsIHRoZW4gdGhlIGRheSBvZiB0aGUgdHJhbnNpdGlvbiB3aWxsIGhhdmUKKyAgICAgKiB0aGUgdHlwZSBXRUVLRU5EX09OU0VUIG9yIFdFRUtFTkRfQ0VBU0UuICBJbiB0aGlzIGNhc2UsIHRoZQorICAgICAqIG1ldGhvZCBnZXRXZWVrZW5kVHJhbnNpdGlvbigpIHdpbGwgcmV0dXJuIHRoZSBwb2ludCBvZgorICAgICAqIHRyYW5zaXRpb24uCisgICAgICogQHBhcmFtIGRheU9mV2VlayBlaXRoZXIgU1VOREFZLCBNT05EQVksIFRVRVNEQVksIFdFRE5FU0RBWSwKKyAgICAgKiBUSFVSU0RBWSwgRlJJREFZLCBvciBTQVRVUkRBWQorICAgICAqIEByZXR1cm4gZWl0aGVyIFdFRUtEQVksIFdFRUtFTkQsIFdFRUtFTkRfT05TRVQsIG9yCisgICAgICogV0VFS0VORF9DRUFTRQorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGRheU9mV2VlayBpcyBub3QKKyAgICAgKiBiZXR3ZWVuIFNVTkRBWSBhbmQgU0FUVVJEQVksIGluY2x1c2l2ZQorICAgICAqIEBzZWUgI1dFRUtEQVkKKyAgICAgKiBAc2VlICNXRUVLRU5ECisgICAgICogQHNlZSAjV0VFS0VORF9PTlNFVAorICAgICAqIEBzZWUgI1dFRUtFTkRfQ0VBU0UKKyAgICAgKiBAc2VlICNnZXRXZWVrZW5kVHJhbnNpdGlvbgorICAgICAqIEBzZWUgI2lzV2Vla2VuZChEYXRlKQorICAgICAqIEBzZWUgI2lzV2Vla2VuZCgpCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXREYXlPZldlZWtUeXBlKGludCBkYXlPZldlZWspIHsKKyAgICAgICAgaWYgKGRheU9mV2VlayA8IFNVTkRBWSB8fCBkYXlPZldlZWsgPiBTQVRVUkRBWSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBkYXkgb2Ygd2VlayIpOworICAgICAgICB9CisgICAgICAgIGlmICh3ZWVrZW5kT25zZXQgPCB3ZWVrZW5kQ2Vhc2UpIHsKKyAgICAgICAgICAgIGlmIChkYXlPZldlZWsgPCB3ZWVrZW5kT25zZXQgfHwgZGF5T2ZXZWVrID4gd2Vla2VuZENlYXNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdFRUtEQVk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZGF5T2ZXZWVrID4gd2Vla2VuZENlYXNlICYmIGRheU9mV2VlayA8IHdlZWtlbmRPbnNldCkgeworICAgICAgICAgICAgICAgIHJldHVybiBXRUVLREFZOworICAgICAgICAgICAgfQorICAgICAgICB9IAorICAgICAgICBpZiAoZGF5T2ZXZWVrID09IHdlZWtlbmRPbnNldCkgeworICAgICAgICAgICAgcmV0dXJuICh3ZWVrZW5kT25zZXRNaWxsaXMgPT0gMCkgPyBXRUVLRU5EIDogV0VFS0VORF9PTlNFVDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGF5T2ZXZWVrID09IHdlZWtlbmRDZWFzZSkgeworICAgICAgICAgICAgcmV0dXJuICh3ZWVrZW5kQ2Vhc2VNaWxsaXMgPT0gMCkgPyBXRUVLREFZIDogV0VFS0VORF9DRUFTRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV0VFS0VORDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHRpbWUgZHVyaW5nIHRoZSBkYXkgYXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5zIG9yIGVuZCBpbgorICAgICAqIHRoaXMgY2FsZW5kYXIgc3lzdGVtLiAgSWYgZ2V0RGF5T2ZXZWVrVHlwZShkYXlPZldlZWspID09CisgICAgICogV0VFS0VORF9PTlNFVCByZXR1cm4gdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5zLiAgSWYKKyAgICAgKiBnZXREYXlPZldlZWtUeXBlKGRheU9mV2VlaykgPT0gV0VFS0VORF9DRUFTRSByZXR1cm4gdGhlIHRpbWUgYXQKKyAgICAgKiB3aGljaCB0aGUgd2Vla2VuZCBlbmRzLiAgSWYgZ2V0RGF5T2ZXZWVrVHlwZShkYXlPZldlZWspIGhhcyBzb21lCisgICAgICogb3RoZXIgdmFsdWUsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uLgorICAgICAqIEBwYXJhbSBkYXlPZldlZWsgZWl0aGVyIFNVTkRBWSwgTU9OREFZLCBUVUVTREFZLCBXRURORVNEQVksCisgICAgICogVEhVUlNEQVksIEZSSURBWSwgb3IgU0FUVVJEQVkKKyAgICAgKiBAcmV0dXJuIHRoZSBtaWxsaXNlY29uZHMgYWZ0ZXIgbWlkbmlnaHQgYXQgd2hpY2ggdGhlCisgICAgICogd2Vla2VuZCBiZWdpbnMgb3IgZW5kcworICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGRheU9mV2VlayBpcyBub3QKKyAgICAgKiBXRUVLRU5EX09OU0VUIG9yIFdFRUtFTkRfQ0VBU0UKKyAgICAgKiBAc2VlICNnZXREYXlPZldlZWtUeXBlCisgICAgICogQHNlZSAjaXNXZWVrZW5kKERhdGUpCisgICAgICogQHNlZSAjaXNXZWVrZW5kKCkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFdlZWtlbmRUcmFuc2l0aW9uKGludCBkYXlPZldlZWspIHsKKyAgICAgICAgaWYgKGRheU9mV2VlayA9PSB3ZWVrZW5kT25zZXQpIHsKKyAgICAgICAgICAgIHJldHVybiB3ZWVrZW5kT25zZXRNaWxsaXM7CisgICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZXZWVrID09IHdlZWtlbmRDZWFzZSkgeworICAgICAgICAgICAgcmV0dXJuIHdlZWtlbmRDZWFzZU1pbGxpczsKKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOb3Qgd2Vla2VuZCB0cmFuc2l0aW9uIGRheSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBkYXRlIGFuZCB0aW1lIGlzIGluIHRoZSB3ZWVrZW5kIGluCisgICAgICogdGhpcyBjYWxlbmRhciBzeXN0ZW0uICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgc2V0VGltZSgpIGZvbGxvd2VkCisgICAgICogYnkgaXNXZWVrZW5kKCkuICBOb3RlOiBUaGlzIG1ldGhvZCBjaGFuZ2VzIHRoZSB0aW1lIHRoaXMKKyAgICAgKiBjYWxlbmRhciBpcyBzZXQgdG8uCisgICAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGUgYW5kIHRpbWUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGRhdGUgYW5kIHRpbWUgaXMgcGFydCBvZiB0aGUKKyAgICAgKiB3ZWVrZW5kCisgICAgICogQHNlZSAjZ2V0RGF5T2ZXZWVrVHlwZQorICAgICAqIEBzZWUgI2dldFdlZWtlbmRUcmFuc2l0aW9uCisgICAgICogQHNlZSAjaXNXZWVrZW5kKCkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1dlZWtlbmQoRGF0ZSBkYXRlKSB7CisgICAgICAgIHNldFRpbWUoZGF0ZSk7CisgICAgICAgIHJldHVybiBpc1dlZWtlbmQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIENhbGVuZGFyJ3MgY3VycmVudCBkYXRlIGFuZCB0aW1lIGlzIGluIHRoZQorICAgICAqIHdlZWtlbmQgaW4gdGhpcyBjYWxlbmRhciBzeXN0ZW0uCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBkYXRlIGFuZCB0aW1lIGlzIHBhcnQgb2YgdGhlCisgICAgICogd2Vla2VuZAorICAgICAqIEBzZWUgI2dldERheU9mV2Vla1R5cGUKKyAgICAgKiBAc2VlICNnZXRXZWVrZW5kVHJhbnNpdGlvbgorICAgICAqIEBzZWUgI2lzV2Vla2VuZChEYXRlKQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzV2Vla2VuZCgpIHsKKyAgICAgICAgaW50IGRvdyA9ICBnZXQoREFZX09GX1dFRUspOworICAgICAgICBpbnQgZG93dCA9IGdldERheU9mV2Vla1R5cGUoZG93KTsKKyAgICAgICAgc3dpdGNoIChkb3d0KSB7CisgICAgICAgIGNhc2UgV0VFS0RBWToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBXRUVLRU5EOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6IC8vIFRoYXQgaXMsIFdFRUtFTkRfT05TRVQgb3IgV0VFS0VORF9DRUFTRQorICAgICAgICAgICAgLy8gVXNlIGludGVybmFsR2V0KCkgYmVjYXVzZSB0aGUgYWJvdmUgY2FsbCB0byBnZXQoKSBwb3B1bGF0ZWQKKyAgICAgICAgICAgIC8vIGFsbCBmaWVsZHMuCisgICAgICAgICAgICAvLyBbTm90ZTogVGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIHdheSB0byBnZXQgbWlsbGlzIGluIGRheS4KKyAgICAgICAgICAgIC8vICBGb3IgSUNVNEosIHN1Ym1pdCByZXF1ZXN0IGZvciBhIE1JTExJU19JTl9EQVkgZmllbGQKKyAgICAgICAgICAgIC8vICBhbmQgYSBEQVlfTlVNQkVSIGZpZWxkIChjb3VsZCBiZSBKdWxpYW4gZGF5ICMpLiAtIGFsaXVdCisgICAgICAgICAgICBpbnQgbWlsbGlzSW5EYXkgPSBpbnRlcm5hbEdldChNSUxMSVNFQ09ORCkgKyAxMDAwICogKGludGVybmFsR2V0KFNFQ09ORCkgKworICAgICAgICAgICAgICAgIDYwICogKGludGVybmFsR2V0KE1JTlVURSkgKyA2MCAqIGludGVybmFsR2V0KEhPVVJfT0ZfREFZKSkpOworICAgICAgICAgICAgaW50IHRyYW5zaXRpb24gPSBnZXRXZWVrZW5kVHJhbnNpdGlvbihkb3cpOworICAgICAgICAgICAgcmV0dXJuIChkb3d0ID09IFdFRUtFTkRfT05TRVQpCisgICAgICAgICAgICAgICAgPyAobWlsbGlzSW5EYXkgPj0gdHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICA6IChtaWxsaXNJbkRheSA8ICB0cmFuc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyAoV2UgY2FuIG5ldmVyIHJlYWNoIHRoaXMgcG9pbnQuKQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlYWQgdGhlIGxvY2FsZSB3ZWVrZW5kIGRhdGEgZm9yIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICoKKyAgICAgKiBUaGlzIGlzIHRoZSBpbml0aWFsIHBsYWNlbWVudCBhbmQgZm9ybWF0IG9mIHRoaXMgZGF0YSAtLSBpdCBtYXkgdmVyeQorICAgICAqIHdlbGwgY2hhbmdlIGluIHRoZSBmdXR1cmUuICBTZWUgdGhlIGxvY2FsZSBmaWxlcyB0aGVtc2VsdmVzIGZvcgorICAgICAqIGRldGFpbHMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldFdlZWtlbmREYXRhKExvY2FsZSBsb2MpIHsKKyAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2UgPQorICAgICAgICAgICAgSUNVTG9jYWxlRGF0YS5nZXRSZXNvdXJjZUJ1bmRsZSgiQ2FsZW5kYXJEYXRhIiwgbG9jKTsKKyAgICAgICAgU3RyaW5nW10gZGF0YSA9IHJlc291cmNlLmdldFN0cmluZ0FycmF5KCJXZWVrZW5kIik7CisgICAgICAgIHdlZWtlbmRPbnNldCAgICAgICA9IEludGVnZXIucGFyc2VJbnQoZGF0YVswXSk7CisgICAgICAgIHdlZWtlbmRPbnNldE1pbGxpcyA9IEludGVnZXIucGFyc2VJbnQoZGF0YVsxXSk7CisgICAgICAgIHdlZWtlbmRDZWFzZSAgICAgICA9IEludGVnZXIucGFyc2VJbnQoZGF0YVsyXSk7CisgICAgICAgIHdlZWtlbmRDZWFzZU1pbGxpcyA9IEludGVnZXIucGFyc2VJbnQoZGF0YVszXSk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRW5kIG9mIHdlZWtlbmQgc3VwcG9ydAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIENsb25lYWJsZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENhbGVuZGFyIG90aGVyID0gKENhbGVuZGFyKSBzdXBlci5jbG9uZSgpOworCisgICAgICAgICAgICBvdGhlci5maWVsZHMgPSBuZXcgaW50W2ZpZWxkcy5sZW5ndGhdOworICAgICAgICAgICAgb3RoZXIuc3RhbXAgPSBuZXcgaW50W2ZpZWxkcy5sZW5ndGhdOworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0aGlzLmZpZWxkcywgMCwgb3RoZXIuZmllbGRzLCAwLCBmaWVsZHMubGVuZ3RoKTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGhpcy5zdGFtcCwgMCwgb3RoZXIuc3RhbXAsIDAsIGZpZWxkcy5sZW5ndGgpOworCisgICAgICAgICAgICBvdGhlci56b25lID0gKFRpbWVab25lKSB6b25lLmNsb25lKCk7CisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkbid0IGhhcHBlbiwgc2luY2Ugd2UgYXJlIENsb25lYWJsZQorICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNhbGVuZGFyLiBUaGlzIG1ldGhvZCAKKyAgICAgKiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgYW5kIHRoZSAKKyAgICAgKiBmb3JtYXQgb2YgdGhlIHJldHVybmVkIHN0cmluZyBtYXkgdmFyeSBiZXR3ZWVuIGltcGxlbWVudGF0aW9ucy4gCisgICAgICogVGhlIHJldHVybmVkIHN0cmluZyBtYXkgYmUgZW1wdHkgYnV0IG1heSBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCisgICAgICogCisgICAgICogQHJldHVybiAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKGdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiW3RpbWU9Iik7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoaXNUaW1lU2V0ID8gU3RyaW5nLnZhbHVlT2YodGltZSkgOiAiPyIpOworICAgICAgICBidWZmZXIuYXBwZW5kKCIsYXJlRmllbGRzU2V0PSIpOworICAgICAgICBidWZmZXIuYXBwZW5kKGFyZUZpZWxkc1NldCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIixhcmVBbGxGaWVsZHNTZXQ9Iik7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoYXJlQWxsRmllbGRzU2V0KTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiLGxlbmllbnQ9Iik7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQobGVuaWVudCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIix6b25lPSIpOworICAgICAgICBidWZmZXIuYXBwZW5kKHpvbmUpOworICAgICAgICBidWZmZXIuYXBwZW5kKCIsZmlyc3REYXlPZldlZWs9Iik7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZmlyc3REYXlPZldlZWspOworICAgICAgICBidWZmZXIuYXBwZW5kKCIsbWluaW1hbERheXNJbkZpcnN0V2Vlaz0iKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChtaW5pbWFsRGF5c0luRmlyc3RXZWVrKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGZpZWxkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnLCcpLmFwcGVuZChGSUVMRF9OQU1FW2ldKS5hcHBlbmQoJz0nKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoaXNTZXQoaSkgPyBTdHJpbmcudmFsdWVPZihmaWVsZHNbaV0pIDogIj8iKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIuYXBwZW5kKCddJyk7CisgICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PXByaXZhdGVzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogQm90aCBmaXJzdERheU9mV2VlayBhbmQgbWluaW1hbERheXNJbkZpcnN0V2VlayBhcmUgbG9jYWxlLWRlcGVuZGVudC4KKyAgICAgKiBUaGV5IGFyZSB1c2VkIHRvIGZpZ3VyZSBvdXQgdGhlIHdlZWsgY291bnQgZm9yIGEgc3BlY2lmaWMgZGF0ZSBmb3IKKyAgICAgKiBhIGdpdmVuIGxvY2FsZS4gVGhlc2UgbXVzdCBiZSBzZXQgd2hlbiBhIENhbGVuZGFyIGlzIGNvbnN0cnVjdGVkLgorICAgICAqIEBwYXJhbSBkZXNpcmVkTG9jYWxlIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldFdlZWtDb3VudERhdGEoTG9jYWxlIGRlc2lyZWRMb2NhbGUpCisgICAgeworICAgIC8qIHRyeSB0byBnZXQgdGhlIExvY2FsZSBkYXRhIGZyb20gdGhlIGNhY2hlICovCisgICAgaW50W10gZGF0YSA9IChpbnRbXSkgY2FjaGVkTG9jYWxlRGF0YS5nZXQoZGVzaXJlZExvY2FsZSk7CisgICAgaWYgKGRhdGEgPT0gbnVsbCkgeyAgLyogY2FjaGUgbWlzcyAqLworICAgICAgICBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZSA9IElDVUxvY2FsZURhdGEuZ2V0TG9jYWxlRWxlbWVudHMoZGVzaXJlZExvY2FsZSk7CisgICAgICAgIFN0cmluZ1tdIGRhdGVUaW1lUGF0dGVybnMgPQorICAgICAgICByZXNvdXJjZS5nZXRTdHJpbmdBcnJheSgiRGF0ZVRpbWVFbGVtZW50cyIpOworICAgICAgICBkYXRhID0gbmV3IGludFsyXTsKKyAgICAgICAgZGF0YVswXSA9IEludGVnZXIucGFyc2VJbnQoZGF0ZVRpbWVQYXR0ZXJuc1swXSk7CisgICAgICAgIGRhdGFbMV0gPSBJbnRlZ2VyLnBhcnNlSW50KGRhdGVUaW1lUGF0dGVybnNbMV0pOworICAgICAgICAvKiBjYWNoZSB1cGRhdGUgKi8KKyAgICAgICAgY2FjaGVkTG9jYWxlRGF0YS5wdXQoZGVzaXJlZExvY2FsZSwgZGF0YSk7CisgICAgfQorICAgIGZpcnN0RGF5T2ZXZWVrID0gZGF0YVswXTsKKyAgICBtaW5pbWFsRGF5c0luRmlyc3RXZWVrID0gZGF0YVsxXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWNvbXB1dGUgdGhlIHRpbWUgYW5kIHVwZGF0ZSB0aGUgc3RhdHVzIGZpZWxkcyBpc1RpbWVTZXQKKyAgICAgKiBhbmQgYXJlRmllbGRzU2V0LiAgQ2FsbGVycyBzaG91bGQgY2hlY2sgaXNUaW1lU2V0IGFuZCBvbmx5CisgICAgICogY2FsbCB0aGlzIG1ldGhvZCBpZiBpc1RpbWVTZXQgaXMgZmFsc2UuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRpbWUoKSB7CisgICAgICAgIGNvbXB1dGVUaW1lKCk7CisgICAgICAgIC8vIElmIHdlIGFyZSBsZW5pZW50LCB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgZmllbGRzIHRvIG5vcm1hbGl6ZQorICAgICAgICAvLyB0aGUgdmFsdWVzLiAgQWxzbywgaWYgd2UgaGF2ZW4ndCBzZXQgYWxsIHRoZSBmaWVsZHMgeWV0IChpLmUuLAorICAgICAgICAvLyBpbiBhIG5ld2x5LWNyZWF0ZWQgb2JqZWN0KSwgd2UgbmVlZCB0byBmaWxsIGluIHRoZSBmaWVsZHMuIFtMSVVdCisgICAgICAgIGlmIChpc0xlbmllbnQoKSB8fCAhYXJlQWxsRmllbGRzU2V0KSBhcmVGaWVsZHNTZXQgPSBmYWxzZTsKKyAgICAgICAgaXNUaW1lU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTYXZlIHRoZSBzdGF0ZSBvZiB0aGlzIG9iamVjdCB0byBhIHN0cmVhbSAoaS5lLiwgc2VyaWFsaXplIGl0KS4KKyAgICAgKgorICAgICAqIElkZWFsbHksIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiB3b3VsZCBvbmx5IHdyaXRlIG91dCBpdHMgc3RhdGUgZGF0YSBhbmQKKyAgICAgKiB0aGUgY3VycmVudCB0aW1lLCBhbmQgbm90IHdyaXRlIGFueSBmaWVsZCBkYXRhIG91dCwgc3VjaCBhcworICAgICAqIDxjb2RlPmZpZWxkc1tdPC9jb2RlPiwgPGNvZGU+aXNUaW1lU2V0PC9jb2RlPiwgPGNvZGU+YXJlRmllbGRzU2V0PC9jb2RlPiwKKyAgICAgKiBhbmQgPGNvZGU+aXNTZXRbXTwvY29kZT4uICA8Y29kZT5uZXh0U3RhbXA8L2NvZGU+IGFsc28gc2hvdWxkIG5vdCBiZSBwYXJ0CisgICAgICogb2YgdGhlIHBlcnNpc3RlbnQgc3RhdGUuIFVuZm9ydHVuYXRlbHksIHRoaXMgZGlkbid0IGhhcHBlbiBiZWZvcmUgSkRLIDEuMQorICAgICAqIHNoaXBwZWQuIFRvIGJlIGNvbXBhdGlibGUgd2l0aCBKREsgMS4xLCB3ZSB3aWxsIGFsd2F5cyBoYXZlIHRvIHdyaXRlIG91dAorICAgICAqIHRoZSBmaWVsZCB2YWx1ZXMgYW5kIHN0YXRlIGZsYWdzLiAgSG93ZXZlciwgPGNvZGU+bmV4dFN0YW1wPC9jb2RlPiBjYW4gYmUKKyAgICAgKiByZW1vdmVkIGZyb20gdGhlIHNlcmlhbGl6YXRpb24gc3RyZWFtOyB0aGlzIHdpbGwgcHJvYmFibHkgaGFwcGVuIGluIHRoZQorICAgICAqIG5lYXIgZnV0dXJlLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChPYmplY3RPdXRwdXRTdHJlYW0gc3RyZWFtKQorICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICAvLyBUcnkgdG8gY29tcHV0ZSB0aGUgdGltZSBjb3JyZWN0bHksIGZvciB0aGUgZnV0dXJlIChzdHJlYW0KKyAgICAgICAgLy8gdmVyc2lvbiAyKSBpbiB3aGljaCB3ZSBkb24ndCB3cml0ZSBvdXQgZmllbGRzW10gb3IgaXNTZXRbXS4KKyAgICAgICAgaWYgKCFpc1RpbWVTZXQpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdXBkYXRlVGltZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisKKyAgICAgICAgLy8gV3JpdGUgb3V0IHRoZSAxLjEgRkNTIG9iamVjdC4KKyAgICAgICAgc3RyZWFtLmRlZmF1bHRXcml0ZU9iamVjdCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlY29uc3RpdHV0ZSB0aGlzIG9iamVjdCBmcm9tIGEgc3RyZWFtIChpLmUuLCBkZXNlcmlhbGl6ZSBpdCkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoT2JqZWN0SW5wdXRTdHJlYW0gc3RyZWFtKQorICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICAKKyAgICAgICAgc3RyZWFtLmRlZmF1bHRSZWFkT2JqZWN0KCk7CisKKyAgICAgICAgaW5pdEludGVybmFsKCk7CisKKyAgICAgICAgaXNUaW1lU2V0ID0gdHJ1ZTsKKyAgICAgICAgYXJlRmllbGRzU2V0ID0gYXJlQWxsRmllbGRzU2V0ID0gZmFsc2U7CisgICAgICAgIG5leHRTdGFtcCA9IE1JTklNVU1fVVNFUl9TVEFNUDsKKyAgICB9CisKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFRpbWUgLT4gRmllbGRzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgY3VycmVudCBtaWxsaXNlY29uZCB0aW1lIHZhbHVlIDxjb2RlPnRpbWU8L2NvZGU+IHRvCisgICAgICogZmllbGQgdmFsdWVzIGluIDxjb2RlPmZpZWxkc1tdPC9jb2RlPi4gIFRoaXMgc3luY2hyb25pemVzIHRoZSB0aW1lCisgICAgICogZmllbGQgdmFsdWVzIHdpdGggYSBuZXcgdGltZSB0aGF0IGlzIHNldCBmb3IgdGhlIGNhbGVuZGFyLiAgVGhlIHRpbWUKKyAgICAgKiBpcyA8ZW0+bm90PC9lbT4gcmVjb21wdXRlZCBmaXJzdDsgdG8gcmVjb21wdXRlIHRoZSB0aW1lLCB0aGVuIHRoZQorICAgICAqIGZpZWxkcywgY2FsbCB0aGUgPGNvZGU+Y29tcGxldGU8L2NvZGU+IG1ldGhvZC4KKyAgICAgKiBAc2VlICNjb21wbGV0ZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGNvbXB1dGVGaWVsZHMoKSB7CisgICAgICAgIGludCByYXdPZmZzZXQgPSBnZXRUaW1lWm9uZSgpLmdldFJhd09mZnNldCgpOworICAgICAgICBsb25nIGxvY2FsTWlsbGlzID0gdGltZSArIHJhd09mZnNldDsKKworICAgICAgICAvLyBNYXJrIGZpZWxkcyBhcyBzZXQuICBEbyB0aGlzIGJlZm9yZSBjYWxsaW5nIGhhbmRsZUNvbXB1dGVGaWVsZHMoKS4KKyAgICAgICAgaW50IG1hc2sgPSBpbnRlcm5hbFNldE1hc2s7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxmaWVsZHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgobWFzayAmIDEpID09IDApIHsKKyAgICAgICAgICAgICAgICBzdGFtcFtpXSA9IElOVEVSTkFMTFlfU0VUOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGFtcFtpXSA9IFVOU0VUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWFzayA+Pj0gMTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIHVzZWQgdG8gY2hlY2sgZm9yIGFuZCBjb3JyZWN0IGV4dHJlbWUgbWlsbGlzIHZhbHVlcyAobmVhcgorICAgICAgICAvLyBMb25nLk1JTl9WQUxVRSBvciBMb25nLk1BWF9WQUxVRSkgaGVyZS4gIFN1Y2ggdmFsdWVzIHdvdWxkIGNhdXNlCisgICAgICAgIC8vIG92ZXJmbG93cyBmcm9tIHBvc2l0aXZlIHRvIG5lZ2F0aXZlIChvciB2aWNlIHZlcnNhKSBhbmQgaGFkIHRvCisgICAgICAgIC8vIGJlIG1hbnVhbGx5IHR3ZWFrZWQuICBXZSBubyBsb25nZXIgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2Ugd2UKKyAgICAgICAgLy8gaGF2ZSBsaW1pdGVkIHRoZSByYW5nZSBvZiBzdXBwb3J0ZWQgZGF0ZXMgdG8gdGhvc2UgdGhhdCBoYXZlIGEKKyAgICAgICAgLy8gSnVsaWFuIGRheSB0aGF0IGZpdHMgaW50byBhbiBpbnQuICBUaGlzIGFsbG93cyB1cyB0byBpbXBsZW1lbnQgYQorICAgICAgICAvLyBKVUxJQU5fREFZIGZpZWxkIGFuZCBhbHNvIHJlbW92ZXMgc29tZSBpbmVsZWdhbnQgY29kZS4gLSBMaXUKKyAgICAgICAgLy8gMTEvNi8wMAorCisgICAgICAgIGZpZWxkc1tKVUxJQU5fREFZXSA9IChpbnQpIGZsb29yRGl2aWRlKGxvY2FsTWlsbGlzLCBPTkVfREFZKSArCisgICAgICAgICAgICBFUE9DSF9KVUxJQU5fREFZOworCisgICAgICAgIC8vIEluIHNvbWUgY2FzZXMgd2Ugd2lsbCBoYXZlIHRvIGNhbGwgdGhpcyBtZXRob2QgYWdhaW4gYmVsb3cgdG8KKyAgICAgICAgLy8gYWRqdXN0IGZvciBEU1QgcHVzaGluZyB1cyBpbnRvIHRoZSBuZXh0IEp1bGlhbiBkYXkuCisgICAgICAgIGNvbXB1dGVHcmVnb3JpYW5BbmRET1dGaWVsZHMoZmllbGRzW0pVTElBTl9EQVldKTsKKworICAgICAgICBsb25nIGRheXMgPSAobG9uZykgKGxvY2FsTWlsbGlzIC8gT05FX0RBWSk7CisgICAgICAgIGludCBtaWxsaXNJbkRheSA9IChpbnQpIChsb2NhbE1pbGxpcyAtIChkYXlzICogT05FX0RBWSkpOworICAgICAgICBpZiAobWlsbGlzSW5EYXkgPCAwKSBtaWxsaXNJbkRheSArPSBPTkVfREFZOworCisgICAgICAgIC8vIENhbGwgZ2V0T2Zmc2V0KCkgdG8gZ2V0IHRoZSBUaW1lWm9uZSBvZmZzZXQuICBUaGUgbWlsbGlzSW5EYXkgdmFsdWUKKyAgICAgICAgLy8gbXVzdCBiZSBfc3RhbmRhcmRfIGxvY2FsIHpvbmUgbWlsbGlzLgorICAgICAgICBpbnQgZHN0T2Zmc2V0ID0gZ2V0VGltZVpvbmUoKS5nZXRPZmZzZXQoCisgICAgICAgICAgICAgICAgZ3JlZ29yaWFuWWVhciwgZ3JlZ29yaWFuTW9udGgsCisgICAgICAgICAgICAgICAgZ3JlZ29yaWFuRGF5T2ZNb250aCwKKyAgICAgICAgICAgICAgICBmaWVsZHNbREFZX09GX1dFRUtdLAorICAgICAgICAgICAgICAgIG1pbGxpc0luRGF5LAorICAgICAgICAgICAgICAgIGdyZWdvcmlhbk1vbnRoTGVuZ3RoKGdyZWdvcmlhblllYXIsIGdyZWdvcmlhbk1vbnRoKSwKKyAgICAgICAgICAgICAgICBncmVnb3JpYW5QcmV2aW91c01vbnRoTGVuZ3RoKGdyZWdvcmlhblllYXIsIGdyZWdvcmlhbk1vbnRoKSkKKyAgICAgICAgICAgIC0gcmF3T2Zmc2V0OworCisgICAgICAgIC8vIEFkanVzdCBvdXIgbWlsbGlzSW5EYXkgZm9yIERTVC4gIGRzdE9mZnNldCB3aWxsIGJlIHplcm8gaWYgRFNUCisgICAgICAgIC8vIGlzIG5vdCBpbiBlZmZlY3QgYXQgdGhpcyB0aW1lIG9mIHllYXIsIG9yIGlmIG91ciB6b25lIGRvZXMgbm90CisgICAgICAgIC8vIHVzZSBEU1QuCisgICAgICAgIG1pbGxpc0luRGF5ICs9IGRzdE9mZnNldDsKKworICAgICAgICAvLyBJZiBEU1QgaGFzIHB1c2hlZCB1cyBpbnRvIHRoZSBuZXh0IGRheSwgd2UgbXVzdCBjYWxsCisgICAgICAgIC8vIGNvbXB1dGVHcmVnb3JpYW5BbmRET1dGaWVsZHMoKSBhZ2Fpbi4gIFRoaXMgaGFwcGVucyBpbiBEU1QgYmV0d2VlbgorICAgICAgICAvLyAxMjowMCBhbSBhbmQgMTowMCBhbSBldmVyeSBkYXkuICBUaGUgZmlyc3QgY2FsbCB0bworICAgICAgICAvLyBjb21wdXRlR3JlZ29yaWFuQW5kRE9XRmllbGRzKCkgd2lsbCBnaXZlIHRoZSB3cm9uZyBkYXksIHNpbmNlIHRoZQorICAgICAgICAvLyBTdGFuZGFyZCB0aW1lIGlzIGluIHRoZSBwcmV2aW91cyBkYXkuCisgICAgICAgIGlmIChtaWxsaXNJbkRheSA+PSBPTkVfREFZKSB7CisgICAgICAgICAgICBtaWxsaXNJbkRheSAtPSBPTkVfREFZOyAvLyBBU1NVTUUgZHN0T2Zmc2V0IDwgMjQ6MDAKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgb3ZlcmZsb3cgb2YgSlVMSUFOX0RBWSBiZWNhdXNlIHRoZQorICAgICAgICAgICAgLy8gYWxsb3dhYmxlIHJhbmdlIG9mIEpVTElBTl9EQVkgaGFzIHNsb3AgYXQgdGhlIGVuZHMgKHRoYXQgaXMsCisgICAgICAgICAgICAvLyB0aGUgbWF4IGlzIGxlc3MgdGhhdCAweDdGRkZGRkZGIGFuZCB0aGUgbWluIGlzIGdyZWF0ZXIgdGhhbgorICAgICAgICAgICAgLy8gLTB4ODAwMDAwMDApLgorICAgICAgICAgICAgY29tcHV0ZUdyZWdvcmlhbkFuZERPV0ZpZWxkcygrK2ZpZWxkc1tKVUxJQU5fREFZXSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxsIGZyYW1ld29yayBtZXRob2QgdG8gaGF2ZSBzdWJjbGFzcyBjb21wdXRlIGl0cyBmaWVsZHMuCisgICAgICAgIC8vIFRoZXNlIG11c3QgaW5jbHVkZSwgYXQgYSBtaW5pbXVtLCBNT05USCwgREFZX09GX01PTlRILAorICAgICAgICAvLyBFWFRFTkRFRF9ZRUFSLCBZRUFSLCBEQVlfT0ZfWUVBUi4gIFRoaXMgbWV0aG9kIHdpbGwgY2FsbCBpbnRlcm5hbFNldCgpLAorICAgICAgICAvLyB3aGljaCB3aWxsIHVwZGF0ZSBzdGFtcFtdLgorICAgICAgICBoYW5kbGVDb21wdXRlRmllbGRzKGZpZWxkc1tKVUxJQU5fREFZXSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB3ZWVrLXJlbGF0ZWQgZmllbGRzLCBiYXNlZCBvbiB0aGUgc3ViY2xhc3MtY29tcHV0ZWQKKyAgICAgICAgLy8gZmllbGRzIGNvbXB1dGVkIGJ5IGhhbmRsZUNvbXB1dGVGaWVsZHMoKS4KKyAgICAgICAgY29tcHV0ZVdlZWtGaWVsZHMoKTsKKworICAgICAgICAvLyBDb21wdXRlIHRpbWUtcmVsYXRlZCBmaWVsZHMuICBUaGVzZSBhcmUgaW5kZXBlbnQgb2YgdGhlIGRhdGUgYW5kCisgICAgICAgIC8vIG9mIHRoZSBzdWJjbGFzcyBhbGdvcml0aG0uICBUaGV5IGRlcGVuZCBvbmx5IG9uIHRoZSBsb2NhbCB6b25lCisgICAgICAgIC8vIHdhbGwgbWlsbGlzZWNvbmRzIGluIGRheS4KKyAgICAgICAgZmllbGRzW01JTExJU0VDT05EU19JTl9EQVldID0gbWlsbGlzSW5EYXk7CisgICAgICAgIGZpZWxkc1tNSUxMSVNFQ09ORF0gPSBtaWxsaXNJbkRheSAlIDEwMDA7CisgICAgICAgIG1pbGxpc0luRGF5IC89IDEwMDA7CisgICAgICAgIGZpZWxkc1tTRUNPTkRdID0gbWlsbGlzSW5EYXkgJSA2MDsKKyAgICAgICAgbWlsbGlzSW5EYXkgLz0gNjA7CisgICAgICAgIGZpZWxkc1tNSU5VVEVdID0gbWlsbGlzSW5EYXkgJSA2MDsKKyAgICAgICAgbWlsbGlzSW5EYXkgLz0gNjA7CisgICAgICAgIGZpZWxkc1tIT1VSX09GX0RBWV0gPSBtaWxsaXNJbkRheTsKKyAgICAgICAgZmllbGRzW0FNX1BNXSA9IG1pbGxpc0luRGF5IC8gMTI7IC8vIEFzc3VtZSBBTSA9PSAwCisgICAgICAgIGZpZWxkc1tIT1VSXSA9IG1pbGxpc0luRGF5ICUgMTI7CisgICAgICAgIGZpZWxkc1taT05FX09GRlNFVF0gPSByYXdPZmZzZXQ7CisgICAgICAgIGZpZWxkc1tEU1RfT0ZGU0VUXSA9IGRzdE9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgeWVhciwgbW9udGgsIGFuZCBkYXkgb2YgbW9udGggZnJvbQorICAgICAqIHRoZSBnaXZlbiBKdWxpYW4gZGF5LiAgVGhlc2UgdmFsdWVzIGFyZSBub3Qgc3RvcmVkIGluIGZpZWxkcywgYnV0IGluCisgICAgICogbWVtYmVyIHZhcmlhYmxlcyBncmVnb3JpYW5YeHguICBBbHNvIGNvbXB1dGUgdGhlIERBWV9PRl9XRUVLIGFuZAorICAgICAqIERPV19MT0NBTCBmaWVsZHMuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNvbXB1dGVHcmVnb3JpYW5BbmRET1dGaWVsZHMoaW50IGp1bGlhbkRheSkgeworICAgICAgICBjb21wdXRlR3JlZ29yaWFuRmllbGRzKGp1bGlhbkRheSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSBkYXkgb2Ygd2VlazogSkQgMCA9IE1vbmRheQorICAgICAgICBpbnQgZG93ID0gZmllbGRzW0RBWV9PRl9XRUVLXSA9IGp1bGlhbkRheVRvRGF5T2ZXZWVrKGp1bGlhbkRheSk7CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIDEtYmFzZWQgbG9jYWxpemVkIGRheSBvZiB3ZWVrCisgICAgICAgIGludCBkb3dMb2NhbCA9IGRvdyAtIGdldEZpcnN0RGF5T2ZXZWVrKCkgKyAxOworICAgICAgICBpZiAoZG93TG9jYWwgPCAxKSB7CisgICAgICAgICAgICBkb3dMb2NhbCArPSA3OworICAgICAgICB9CisgICAgICAgIGZpZWxkc1tET1dfTE9DQUxdID0gZG93TG9jYWw7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIEdyZWdvcmlhbiBjYWxlbmRhciB5ZWFyLCBtb250aCwgYW5kIGRheSBvZiBtb250aCBmcm9tIHRoZQorICAgICAqIEp1bGlhbiBkYXkuICBUaGVzZSB2YWx1ZXMgYXJlIG5vdCBzdG9yZWQgaW4gZmllbGRzLCBidXQgaW4gbWVtYmVyCisgICAgICogdmFyaWFibGVzIGdyZWdvcmlhblh4eC4gIFRoZXkgYXJlIHVzZWQgZm9yIHRpbWUgem9uZSBjb21wdXRhdGlvbnMgYW5kIGJ5CisgICAgICogc3ViY2xhc3NlcyB0aGF0IGFyZSBHcmVnb3JpYW4gZGVyaXZhdGl2ZXMuICBTdWJjbGFzc2VzIG1heSBjYWxsIHRoaXMKKyAgICAgKiBtZXRob2QgdG8gcGVyZm9ybSBhIEdyZWdvcmlhbiBjYWxlbmRhciBtaWxsaXMtPmZpZWxkcyBjb21wdXRhdGlvbi4KKyAgICAgKiBUbyBwZXJmb3JtIGEgR3JlZ29yaWFuIGNhbGVuZGFyIGZpZWxkcy0+bWlsbGlzIGNvbXB1dGF0aW9uLCBjYWxsCisgICAgICogY29tcHV0ZUdyZWdvcmlhbk1vbnRoU3RhcnQoKS4KKyAgICAgKiBAc2VlICNjb21wdXRlR3JlZ29yaWFuTW9udGhTdGFydAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGNvbXB1dGVHcmVnb3JpYW5GaWVsZHMoaW50IGp1bGlhbkRheSkgeworICAgICAgICBpbnQgeWVhciwgbW9udGgsIGRheU9mTW9udGgsIGRheU9mWWVhcjsKKworICAgICAgICAvLyBUaGUgR3JlZ29yaWFuIGVwb2NoIGRheSBpcyB6ZXJvIGZvciBNb25kYXkgSmFudWFyeSAxLCB5ZWFyIDEuCisgICAgICAgIGxvbmcgZ3JlZ29yaWFuRXBvY2hEYXkgPSBqdWxpYW5EYXkgLSBKQU5fMV8xX0pVTElBTl9EQVk7CisKKyAgICAgICAgLy8gSGVyZSB3ZSBjb252ZXJ0IGZyb20gdGhlIGRheSBudW1iZXIgdG8gdGhlIG11bHRpcGxlIHJhZGl4CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLiAgV2UgdXNlIDQwMC15ZWFyLCAxMDAteWVhciwgYW5kIDQteWVhciBjeWNsZXMuCisgICAgICAgIC8vIEZvciBleGFtcGxlLCB0aGUgNC15ZWFyIGN5Y2xlIGhhcyA0IHllYXJzICsgMSBsZWFwIGRheTsgZ2l2aW5nCisgICAgICAgIC8vIDE0NjEgPT0gMzY1KjQgKyAxIGRheXMuCisgICAgICAgIGludFtdIHJlbSA9IG5ldyBpbnRbMV07CisgICAgICAgIGludCBuNDAwID0gZmxvb3JEaXZpZGUoZ3JlZ29yaWFuRXBvY2hEYXksIDE0NjA5NywgcmVtKTsgLy8gNDAwLXllYXIgY3ljbGUgbGVuZ3RoCisgICAgICAgIGludCBuMTAwID0gZmxvb3JEaXZpZGUocmVtWzBdLCAzNjUyNCwgcmVtKTsgLy8gMTAwLXllYXIgY3ljbGUgbGVuZ3RoCisgICAgICAgIGludCBuNCA9IGZsb29yRGl2aWRlKHJlbVswXSwgMTQ2MSwgcmVtKTsgLy8gNC15ZWFyIGN5Y2xlIGxlbmd0aAorICAgICAgICBpbnQgbjEgPSBmbG9vckRpdmlkZShyZW1bMF0sIDM2NSwgcmVtKTsKKyAgICAgICAgeWVhciA9IDQwMCpuNDAwICsgMTAwKm4xMDAgKyA0Km40ICsgbjE7CisgICAgICAgIGRheU9mWWVhciA9IHJlbVswXTsgLy8gemVyby1iYXNlZCBkYXkgb2YgeWVhcgorICAgICAgICBpZiAobjEwMCA9PSA0IHx8IG4xID09IDQpIHsKKyAgICAgICAgICAgIGRheU9mWWVhciA9IDM2NTsgLy8gRGVjIDMxIGF0IGVuZCBvZiA0LSBvciA0MDAteXIgY3ljbGUKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICsreWVhcjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gaXNMZWFwID0gKCh5ZWFyJjB4MykgPT0gMCkgJiYgLy8gZXF1aXYuIHRvICh5ZWFyJTQgPT0gMCkKKyAgICAgICAgICAgICh5ZWFyJTEwMCAhPSAwIHx8IHllYXIlNDAwID09IDApOworCisgICAgICAgIGludCBjb3JyZWN0aW9uID0gMDsKKyAgICAgICAgaW50IG1hcmNoMSA9IGlzTGVhcCA/IDYwIDogNTk7IC8vIHplcm8tYmFzZWQgRE9ZIGZvciBNYXJjaCAxCisgICAgICAgIGlmIChkYXlPZlllYXIgPj0gbWFyY2gxKSBjb3JyZWN0aW9uID0gaXNMZWFwID8gMSA6IDI7CisgICAgICAgIG1vbnRoID0gKDEyICogKGRheU9mWWVhciArIGNvcnJlY3Rpb24pICsgNikgLyAzNjc7IC8vIHplcm8tYmFzZWQgbW9udGgKKyAgICAgICAgZGF5T2ZNb250aCA9IGRheU9mWWVhciAtCisgICAgICAgICAgICBHUkVHT1JJQU5fTU9OVEhfQ09VTlRbbW9udGhdW2lzTGVhcD8zOjJdICsgMTsgLy8gb25lLWJhc2VkIERPTQorCisgICAgICAgIGdyZWdvcmlhblllYXIgPSB5ZWFyOworICAgICAgICBncmVnb3JpYW5Nb250aCA9IG1vbnRoOyAvLyAwLWJhc2VkIGFscmVhZHkKKyAgICAgICAgZ3JlZ29yaWFuRGF5T2ZNb250aCA9IGRheU9mTW9udGg7IC8vIDEtYmFzZWQgYWxyZWFkeQorICAgICAgICBncmVnb3JpYW5EYXlPZlllYXIgPSBkYXlPZlllYXIgKyAxOyAvLyBDb252ZXJ0IGZyb20gMC1iYXNlZCB0byAxLWJhc2VkCisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcHV0ZSB0aGUgZmllbGRzIFdFRUtfT0ZfWUVBUiwgWUVBUl9XT1ksIFdFRUtfT0ZfTU9OVEgsCisgICAgICogREFZX09GX1dFRUtfSU5fTU9OVEgsIGFuZCBET1dfTE9DQUwgZnJvbSBFWFRFTkRFRF9ZRUFSLCBZRUFSLAorICAgICAqIERBWV9PRl9XRUVLLCBhbmQgREFZX09GX1lFQVIuICBUaGUgbGF0dGVyIGZpZWxkcyBhcmUgY29tcHV0ZWQgYnkgdGhlCisgICAgICogc3ViY2xhc3MgYmFzZWQgb24gdGhlIGNhbGVuZGFyIHN5c3RlbS4KKyAgICAgKgorICAgICAqIDxwPlRoZSBZRUFSX1dPWSBmaWVsZCBpcyBjb21wdXRlZCBzaW1wbGlzdGljYWxseS4gIEl0IGlzIGVxdWFsIHRvIFlFQVIKKyAgICAgKiBtb3N0IG9mIHRoZSB0aW1lLCBidXQgYXQgdGhlIHllYXIgYm91bmRhcnkgaXQgbWF5IGJlIGFkanVzdGVkIHRvIFlFQVItMQorICAgICAqIG9yIFlFQVIrMSB0byByZWZsZWN0IHRoZSBvdmVybGFwIG9mIGEgd2VlayBpbnRvIGFuIGFkamFjZW50IHllYXIuICBJbgorICAgICAqIHRoaXMgY2FzZSwgYSBzaW1wbGUgaW5jcmVtZW50IG9yIGRlY3JlbWVudCBpcyBwZXJmb3JtZWQgb24gWUVBUiwgZXZlbgorICAgICAqIHRob3VnaCB0aGlzIG1heSB5aWVsZCBhbiBpbnZhbGlkIFlFQVIgdmFsdWUuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSBZRUFSCisgICAgICogaXMgcGFydCBvZiBhIGNhbGVuZGFyIHN5c3RlbSB3aXRoIGFuIE4teWVhciBjeWNsZSBmaWVsZCBDWUNMRSwgdGhlbgorICAgICAqIGluY3JlbWVudGluZyB0aGUgWUVBUiBtYXkgaW52b2x2ZSBpbmNyZW1lbnRpbmcgQ1lDTEUgYW5kIHNldHRpbmcgWUVBUgorICAgICAqIGJhY2sgdG8gMCBvciAxLiAgVGhpcyBpcyBub3QgaGFuZGxlZCBieSB0aGlzIGNvZGUsIGFuZCBpbiBmYWN0IGNhbm5vdCBiZQorICAgICAqIHNpbXBseSBoYW5kbGVkIHdpdGhvdXQgaGF2aW5nIHN1YmNsYXNzZXMgZGVmaW5lIGFuIGVudGlyZSBwYXJhbGxlbCBzZXQgb2YKKyAgICAgKiBmaWVsZHMgZm9yIGZpZWxkcyBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byBhIHllYXIuICBUaGlzIGFkZGl0aW9uYWwKKyAgICAgKiBjb21wbGV4aXR5IGlzIG5vdCB3YXJyYW50ZWQsIHNpbmNlIHRoZSBpbnRlbnRpb24gb2YgdGhlIFlFQVJfV09ZIGZpZWxkIGlzCisgICAgICogdG8gc3VwcG9ydCBJU08gODYwMSBub3RhdGlvbiwgc28gaXQgd2lsbCB0eXBpY2FsbHkgYmUgdXNlZCB3aXRoIGEKKyAgICAgKiBwcm9sZXB0aWMgR3JlZ29yaWFuIGNhbGVuZGFyLCB3aGljaCBoYXMgbm8gZmllbGQgbGFyZ2VyIHRoYW4gYSB5ZWFyLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgdm9pZCBjb21wdXRlV2Vla0ZpZWxkcygpIHsKKyAgICAgICAgaW50IGV5ZWFyID0gZmllbGRzW0VYVEVOREVEX1lFQVJdOworICAgICAgICBpbnQgeWVhciA9IGZpZWxkc1tZRUFSXTsKKyAgICAgICAgaW50IGRheU9mV2VlayA9IGZpZWxkc1tEQVlfT0ZfV0VFS107CisgICAgICAgIGludCBkYXlPZlllYXIgPSBmaWVsZHNbREFZX09GX1lFQVJdOworCisgICAgICAgIC8vIFdFRUtfT0ZfWUVBUiBzdGFydAorICAgICAgICAvLyBDb21wdXRlIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyLiAgRm9yIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIsIHZhbGlkIHdlZWsKKyAgICAgICAgLy8gbnVtYmVycyBydW4gZnJvbSAxIHRvIDUyIG9yIDUzLCBkZXBlbmRpbmcgb24gdGhlIHllYXIsIHRoZSBmaXJzdCBkYXkKKyAgICAgICAgLy8gb2YgdGhlIHdlZWssIGFuZCB0aGUgbWluaW1hbCBkYXlzIGluIHRoZSBmaXJzdCB3ZWVrLiAgRm9yIG90aGVyCisgICAgICAgIC8vIGNhbGVuZGFycywgdGhlIHZhbGlkIHJhbmdlIG1heSBiZSBkaWZmZXJlbnQgLS0gaXQgZGVwZW5kcyBvbiB0aGUgeWVhcgorICAgICAgICAvLyBsZW5ndGguICBEYXlzIGF0IHRoZSBzdGFydCBvZiB0aGUgeWVhciBtYXkgZmFsbCBpbnRvIHRoZSBsYXN0IHdlZWsgb2YKKyAgICAgICAgLy8gdGhlIHByZXZpb3VzIHllYXI7IGRheXMgYXQgdGhlIGVuZCBvZiB0aGUgeWVhciBtYXkgZmFsbCBpbnRvIHRoZQorICAgICAgICAvLyBmaXJzdCB3ZWVrIG9mIHRoZSBuZXh0IHllYXIuICBBU1NVTUUgdGhhdCB0aGUgeWVhciBsZW5ndGggaXMgbGVzcyB0aGFuCisgICAgICAgIC8vIDcwMDAgZGF5cy4KKyAgICAgICAgaW50IHllYXJPZldlZWtPZlllYXIgPSB5ZWFyOworICAgICAgICBpbnQgcmVsRG93ID0gKGRheU9mV2VlayArIDcgLSBnZXRGaXJzdERheU9mV2VlaygpKSAlIDc7IC8vIDAuLjYKKyAgICAgICAgaW50IHJlbERvd0phbjEgPSAoZGF5T2ZXZWVrIC0gZGF5T2ZZZWFyICsgNzAwMSAtIGdldEZpcnN0RGF5T2ZXZWVrKCkpICUgNzsgLy8gMC4uNgorICAgICAgICBpbnQgd295ID0gKGRheU9mWWVhciAtIDEgKyByZWxEb3dKYW4xKSAvIDc7IC8vIDAuLjUzCisgICAgICAgIGlmICgoNyAtIHJlbERvd0phbjEpID49IGdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKSkgeworICAgICAgICAgICAgKyt3b3k7CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGp1c3QgZm9yIHdlZWtzIGF0IHRoZSB5ZWFyIGVuZCB0aGF0IG92ZXJsYXAgaW50byB0aGUgcHJldmlvdXMgb3IKKyAgICAgICAgLy8gbmV4dCBjYWxlbmRhciB5ZWFyLgorICAgICAgICBpZiAod295ID09IDApIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0aGUgbGFzdCB3ZWVrIG9mIHRoZSBwcmV2aW91cyB5ZWFyLgorICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiB0aGUgbGFzdCB3ZWVrOyBpZiBzbywgd2UgbmVlZAorICAgICAgICAgICAgLy8gdG8gaGFuZGxlIHRoZSBjYXNlIGluIHdoaWNoIHdlIGFyZSB0aGUgZmlyc3Qgd2VlayBvZiB0aGUKKyAgICAgICAgICAgIC8vIG5leHQgeWVhci4KKworICAgICAgICAgICAgaW50IHByZXZEb3kgPSBkYXlPZlllYXIgKyBoYW5kbGVHZXRZZWFyTGVuZ3RoKGV5ZWFyIC0gMSk7CisgICAgICAgICAgICB3b3kgPSB3ZWVrTnVtYmVyKHByZXZEb3ksIGRheU9mV2Vlayk7CisgICAgICAgICAgICB5ZWFyT2ZXZWVrT2ZZZWFyLS07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgbGFzdERveSA9IGhhbmRsZUdldFllYXJMZW5ndGgoZXllYXIpOworICAgICAgICAgICAgLy8gRmFzdCBjaGVjazogRm9yIGl0IHRvIGJlIHdlZWsgMSBvZiB0aGUgbmV4dCB5ZWFyLCB0aGUgRE9ZCisgICAgICAgICAgICAvLyBtdXN0IGJlIG9uIG9yIGFmdGVyIEwtNSwgd2hlcmUgTCBpcyB5ZWFyTGVuZ3RoKCksIHRoZW4gaXQKKyAgICAgICAgICAgIC8vIGNhbm5vdCBwb3NzaWJseSBiZSB3ZWVrIDEgb2YgdGhlIG5leHQgeWVhcjoKKyAgICAgICAgICAgIC8vICAgICAgICAgIEwtNSAgICAgICAgICAgICAgICAgIEwKKyAgICAgICAgICAgIC8vIGRveTogMzU5IDM2MCAzNjEgMzYyIDM2MyAzNjQgMzY1IDAwMQorICAgICAgICAgICAgLy8gZG93OiAgICAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcKKyAgICAgICAgICAgIGlmIChkYXlPZlllYXIgPj0gKGxhc3REb3kgLSA1KSkgeworICAgICAgICAgICAgICAgIGludCBsYXN0UmVsRG93ID0gKHJlbERvdyArIGxhc3REb3kgLSBkYXlPZlllYXIpICUgNzsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFJlbERvdyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdFJlbERvdyArPSA3OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKCg2IC0gbGFzdFJlbERvdykgPj0gZ2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpKSAmJgorICAgICAgICAgICAgICAgICAgICAoKGRheU9mWWVhciArIDcgLSByZWxEb3cpID4gbGFzdERveSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd295ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgeWVhck9mV2Vla09mWWVhcisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaWVsZHNbV0VFS19PRl9ZRUFSXSA9IHdveTsKKyAgICAgICAgZmllbGRzW1lFQVJfV09ZXSA9IHllYXJPZldlZWtPZlllYXI7CisgICAgICAgIC8vIFdFRUtfT0ZfWUVBUiBlbmQKKworICAgICAgICBpbnQgZGF5T2ZNb250aCA9IGZpZWxkc1tEQVlfT0ZfTU9OVEhdOworICAgICAgICBmaWVsZHNbV0VFS19PRl9NT05USF0gPSB3ZWVrTnVtYmVyKGRheU9mTW9udGgsIGRheU9mV2Vlayk7CisgICAgICAgIGZpZWxkc1tEQVlfT0ZfV0VFS19JTl9NT05USF0gPSAoZGF5T2ZNb250aC0xKSAvIDcgKyAxOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEZpZWxkcyAtPiBUaW1lCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBWYWx1ZSB0byBPUiBhZ2FpbnN0IHJlc29sdmUgdGFibGUgZmllbGQgdmFsdWVzIGZvciByZW1hcHBpbmcuCisgICAgICogQHNlZSAjcmVzb2x2ZUZpZWxkcworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFJFU09MVkVfUkVNQVAgPSAzMjsKKyAgICAvLyBBIHBvd2VyIG9mIDIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIE1BWF9GSUVMRF9DT1VOVAorCisgICAgLy8gRGVmYXVsdCB0YWJsZSBmb3IgZGF5IGluIHllYXIKKyAgICBzdGF0aWMgZmluYWwgaW50W11bXVtdIERBVEVfUFJFQ0VERU5DRSA9IHsKKyAgICAgICAgeworICAgICAgICAgICAgeyBEQVlfT0ZfTU9OVEggfSwKKyAgICAgICAgICAgIHsgV0VFS19PRl9ZRUFSLCBEQVlfT0ZfV0VFSyB9LAorICAgICAgICAgICAgeyBXRUVLX09GX01PTlRILCBEQVlfT0ZfV0VFSyB9LAorICAgICAgICAgICAgeyBEQVlfT0ZfV0VFS19JTl9NT05USCwgREFZX09GX1dFRUsgfSwKKyAgICAgICAgICAgIHsgV0VFS19PRl9ZRUFSLCBET1dfTE9DQUwgfSwKKyAgICAgICAgICAgIHsgV0VFS19PRl9NT05USCwgRE9XX0xPQ0FMIH0sCisgICAgICAgICAgICB7IERBWV9PRl9XRUVLX0lOX01PTlRILCBET1dfTE9DQUwgfSwKKyAgICAgICAgICAgIHsgREFZX09GX1lFQVIgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgeyBXRUVLX09GX1lFQVIgfSwKKyAgICAgICAgICAgIHsgV0VFS19PRl9NT05USCB9LAorICAgICAgICAgICAgeyBEQVlfT0ZfV0VFS19JTl9NT05USCB9LAorICAgICAgICAgICAgeyBSRVNPTFZFX1JFTUFQIHwgREFZX09GX1dFRUtfSU5fTU9OVEgsIERBWV9PRl9XRUVLIH0sCisgICAgICAgICAgICB7IFJFU09MVkVfUkVNQVAgfCBEQVlfT0ZfV0VFS19JTl9NT05USCwgRE9XX0xPQ0FMIH0sCisgICAgICAgIH0sCisgICAgfTsKKworICAgIHN0YXRpYyBmaW5hbCBpbnRbXVtdW10gRE9XX1BSRUNFREVOQ0UgPSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgREFZX09GX1dFRUsgfSwKKyAgICAgICAgICAgIHsgRE9XX0xPQ0FMIH0sCisgICAgICAgIH0sCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdpdmVuIGEgcHJlY2VkZW5jZSB0YWJsZSwgcmV0dXJuIHRoZSBuZXdlc3QgZmllbGQgY29tYmluYXRpb24gaW4KKyAgICAgKiB0aGUgdGFibGUsIG9yIC0xIGlmIG5vbmUgaXMgZm91bmQuCisgICAgICoKKyAgICAgKiA8cD5UaGUgcHJlY2VkZW5jZSB0YWJsZSBpcyBhIDMtZGltZW5zaW9uYWwgYXJyYXkgb2YgaW50ZWdlcnMuICBJdAorICAgICAqIG1heSBiZSB0aG91Z2h0IG9mIGFzIGFuIGFycmF5IG9mIGdyb3Vwcy4gIEVhY2ggZ3JvdXAgaXMgYW4gYXJyYXkgb2YKKyAgICAgKiBsaW5lcy4gIEVhY2ggbGluZSBpcyBhbiBhcnJheSBvZiBmaWVsZCBudW1iZXJzLiAgV2l0aGluIGEgbGluZSwgaWYKKyAgICAgKiBhbGwgZmllbGRzIGFyZSBzZXQsIHRoZW4gdGhlIHRpbWUgc3RhbXAgb2YgdGhlIGxpbmUgaXMgdGFrZW4gdG8gYmUKKyAgICAgKiB0aGUgc3RhbXAgb2YgdGhlIG1vc3QgcmVjZW50bHkgc2V0IGZpZWxkLiAgSWYgYW55IGZpZWxkIG9mIGEgbGluZSBpcworICAgICAqIHVuc2V0LCB0aGVuIHRoZSBsaW5lIGZhaWxzIHRvIG1hdGNoLiAgV2l0aGluIGEgZ3JvdXAsIHRoZSBsaW5lIHdpdGgKKyAgICAgKiB0aGUgbmV3ZXN0IHRpbWUgc3RhbXAgaXMgc2VsZWN0ZWQuICBUaGUgZmlyc3QgZmllbGQgb2YgdGhlIGxpbmUgaXMKKyAgICAgKiByZXR1cm5lZCB0byBpbmRpY2F0ZSB3aGljaCBsaW5lIG1hdGNoZWQuCisgICAgICoKKyAgICAgKiA8cD5JbiBzb21lIGNhc2VzLCBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIG1hcCBhIGxpbmUgdG8gZmllbGQgdGhhdAorICAgICAqIHdob3NlIHN0YW1wIGlzIE5PVCBleGFtaW5lZC4gIEZvciBleGFtcGxlLCBpZiB0aGUgYmVzdCBmaWVsZCBpcworICAgICAqIERBWV9PRl9XRUVLIHRoZW4gdGhlIERBWV9PRl9XRUVLX0lOX01PTlRIIGFsZ29yaXRobSBtYXkgYmUgdXNlZC4gIEluCisgICAgICogb3JkZXIgdG8gZG8gdGhpcywgaW5zZXJ0IHRoZSB2YWx1ZSA8Y29kZT5SRU1BUF9SRVNPTFZFIHwgRjwvY29kZT4gYXQKKyAgICAgKiB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIHdoZXJlIDxjb2RlPkY8L2NvZGU+IGlzIHRoZSBkZXNpcmVkIHJldHVybgorICAgICAqIGZpZWxkIHZhbHVlLiAgVGhpcyBmaWVsZCB3aWxsIE5PVCBiZSBleGFtaW5lZDsgaXQgb25seSBkZXRlcm1pbmVzCisgICAgICogdGhlIHJldHVybiB2YWx1ZSBpZiB0aGUgb3RoZXIgZmllbGRzIGluIHRoZSBsaW5lIGFyZSB0aGUgbmV3ZXN0LgorICAgICAqCisgICAgICogPHA+SWYgYWxsIGxpbmVzIG9mIGEgZ3JvdXAgY29udGFpbiBhdCBsZWFzdCBvbmUgdW5zZXQgZmllbGQsIHRoZW4gbm8KKyAgICAgKiBsaW5lIHdpbGwgbWF0Y2gsIGFuZCB0aGUgZ3JvdXAgYXMgYSB3aG9sZSB3aWxsIGZhaWwgdG8gbWF0Y2guICBJbgorICAgICAqIHRoYXQgY2FzZSwgdGhlIG5leHQgZ3JvdXAgd2lsbCBiZSBwcm9jZXNzZWQuICBJZiBhbGwgZ3JvdXBzIGZhaWwgdG8KKyAgICAgKiBtYXRjaCwgdGhlbiAtMSBpcyByZXR1cm5lZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IHJlc29sdmVGaWVsZHMoaW50W11bXVtdIHByZWNlZGVuY2VUYWJsZSkgeworICAgICAgICBpbnQgYmVzdEZpZWxkID0gLTE7CisgICAgICAgIGZvciAoaW50IGc9MDsgZzxwcmVjZWRlbmNlVGFibGUubGVuZ3RoICYmIGJlc3RGaWVsZCA8IDA7ICsrZykgeworICAgICAgICAgICAgaW50W11bXSBncm91cCA9IHByZWNlZGVuY2VUYWJsZVtnXTsKKyAgICAgICAgICAgIGludCBiZXN0U3RhbXAgPSBVTlNFVDsKKyAgICAgICAgbGluZXNJbkdyb3VwOgorICAgICAgICAgICAgZm9yIChpbnQgbD0wOyBsPGdyb3VwLmxlbmd0aDsgKytsKSB7CisgICAgICAgICAgICAgICAgaW50W10gbGluZT0gZ3JvdXBbbF07CisgICAgICAgICAgICAgICAgaW50IGxpbmVTdGFtcCA9IFVOU0VUOworICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBmaXJzdCBlbnRyeSBpZiBpdCBpcyBuZWdhdGl2ZQorICAgICAgICAgICAgICAgIGZvciAoaW50IGk9KGxpbmVbMF0+PVJFU09MVkVfUkVNQVApPzE6MDsgaTxsaW5lLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzID0gc3RhbXBbbGluZVtpXV07CisgICAgICAgICAgICAgICAgICAgIC8vIElmIGFueSBmaWVsZCBpcyB1bnNldCB0aGVuIGRvbid0IHVzZSB0aGlzIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gVU5TRVQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGxpbmVzSW5Hcm91cDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFtcCA9IE1hdGgubWF4KGxpbmVTdGFtcCwgcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gUmVjb3JkIG5ldyBtYXhpbXVtIHN0YW1wICYgZmllbGQgbm8uCisgICAgICAgICAgICAgICAgaWYgKGxpbmVTdGFtcCA+IGJlc3RTdGFtcCkgeworICAgICAgICAgICAgICAgICAgICBiZXN0U3RhbXAgPSBsaW5lU3RhbXA7CisgICAgICAgICAgICAgICAgICAgIGJlc3RGaWVsZCA9IGxpbmVbMF07IC8vIEZpcnN0IGZpZWxkIHJlZmVycyB0byBlbnRpcmUgbGluZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGJlc3RGaWVsZD49UkVTT0xWRV9SRU1BUCk/KGJlc3RGaWVsZCYoUkVTT0xWRV9SRU1BUC0xKSk6YmVzdEZpZWxkOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbmV3ZXN0IHN0YW1wIG9mIGEgZ2l2ZW4gcmFuZ2Ugb2YgZmllbGRzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgbmV3ZXN0U3RhbXAoaW50IGZpcnN0LCBpbnQgbGFzdCwgaW50IGJlc3RTdGFtcFNvRmFyKSB7CisgICAgICAgIGludCBiZXN0U3RhbXAgPSBiZXN0U3RhbXBTb0ZhcjsKKyAgICAgICAgZm9yIChpbnQgaT1maXJzdDsgaTw9bGFzdDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc3RhbXBbaV0gPiBiZXN0U3RhbXApIHsKKyAgICAgICAgICAgICAgICBiZXN0U3RhbXAgPSBzdGFtcFtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVzdFN0YW1wOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdGltZXN0YW1wIG9mIGEgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRTdGFtcChpbnQgZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIHN0YW1wW2ZpZWxkXTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBmaWVsZCB0aGF0IGlzIG5ld2VyLCBlaXRoZXIgZGVmYXVsdEZpZWxkLCBvcgorICAgICAqIGFsdGVybmF0ZUZpZWxkLiAgSWYgbmVpdGhlciBpcyBuZXdlciBvciBuZWl0aGVyIGlzIHNldCwgcmV0dXJuIGRlZmF1bHRGaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IG5ld2VyRmllbGQoaW50IGRlZmF1bHRGaWVsZCwgaW50IGFsdGVybmF0ZUZpZWxkKSB7CisgICAgICAgIGlmIChzdGFtcFthbHRlcm5hdGVGaWVsZF0gPiBzdGFtcFtkZWZhdWx0RmllbGRdKSB7CisgICAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRlRmllbGQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWVsZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1cmUgdGhhdCBlYWNoIGZpZWxkIGlzIHdpdGhpbiBpdHMgdmFsaWQgcmFuZ2UgYnkgY2FsbGluZyB7QGxpbmsKKyAgICAgKiAjdmFsaWRhdGVGaWVsZChpbnQpfSBvbiBlYWNoIGZpZWxkIHRoYXQgaGFzIGJlZW4gc2V0LiAgVGhpcyBtZXRob2QKKyAgICAgKiBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhpcyBjYWxlbmRhciBpcyBub3QgbGVuaWVudC4KKyAgICAgKiBAc2VlICNpc0xlbmllbnQKKyAgICAgKiBAc2VlICN2YWxpZGF0ZUZpZWxkKGludCkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUZpZWxkcygpIHsKKyAgICAgICAgZm9yIChpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGZpZWxkcy5sZW5ndGg7IGZpZWxkKyspIHsKKyAgICAgICAgICAgIGlmIChpc1NldChmaWVsZCkpIHsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUZpZWxkKGZpZWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlIGEgc2luZ2xlIGZpZWxkIG9mIHRoaXMgY2FsZW5kYXIuICBTdWJjbGFzc2VzIHNob3VsZAorICAgICAqIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHZhbGlkYXRlIGFueSBjYWxlbmRhci1zcGVjaWZpYyBmaWVsZHMuCisgICAgICogR2VuZXJpYyBmaWVsZHMgY2FuIGJlIGhhbmRsZWQgYnkKKyAgICAgKiA8Y29kZT5DYWxlbmRhci52YWxpZGF0ZUZpZWxkKCk8L2NvZGU+LgorICAgICAqIEBzZWUgI3ZhbGlkYXRlRmllbGQoaW50LCBpbnQsIGludCkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUZpZWxkKGludCBmaWVsZCkgeworICAgICAgICBpbnQgeTsKKyAgICAgICAgc3dpdGNoIChmaWVsZCkgeworICAgICAgICBjYXNlIERBWV9PRl9NT05USDoKKyAgICAgICAgICAgIHkgPSBoYW5kbGVHZXRFeHRlbmRlZFllYXIoKTsKKyAgICAgICAgICAgIHZhbGlkYXRlRmllbGQoZmllbGQsIDEsIGhhbmRsZUdldE1vbnRoTGVuZ3RoKHksIGludGVybmFsR2V0KE1PTlRIKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREFZX09GX1lFQVI6CisgICAgICAgICAgICB5ID0gaGFuZGxlR2V0RXh0ZW5kZWRZZWFyKCk7CisgICAgICAgICAgICB2YWxpZGF0ZUZpZWxkKGZpZWxkLCAxLCBoYW5kbGVHZXRZZWFyTGVuZ3RoKHkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERBWV9PRl9XRUVLX0lOX01PTlRIOgorICAgICAgICAgICAgaWYgKGludGVybmFsR2V0KGZpZWxkKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiREFZX09GX1dFRUtfSU5fTU9OVEggY2Fubm90IGJlIHplcm8iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbGlkYXRlRmllbGQoZmllbGQsIGdldE1pbmltdW0oZmllbGQpLCBnZXRNYXhpbXVtKGZpZWxkKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkYXRlRmllbGQoZmllbGQsIGdldE1pbmltdW0oZmllbGQpLCBnZXRNYXhpbXVtKGZpZWxkKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlIGEgc2luZ2xlIGZpZWxkIG9mIHRoaXMgY2FsZW5kYXIgZ2l2ZW4gaXRzIG1pbmltdW0gYW5kCisgICAgICogbWF4aW11bSBhbGxvd2VkIHZhbHVlLiAgSWYgdGhlIGZpZWxkIGlzIG91dCBvZiByYW5nZSwgdGhyb3cgYQorICAgICAqIGRlc2NyaXB0aXZlIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4uICBTdWJjbGFzc2VzIG1heQorICAgICAqIHVzZSB0aGlzIG1ldGhvZCBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsKKyAgICAgKiAjdmFsaWRhdGVGaWVsZChpbnQpfS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCB2YWxpZGF0ZUZpZWxkKGludCBmaWVsZCwgaW50IG1pbiwgaW50IG1heCkgeworICAgICAgICBpbnQgdmFsdWUgPSBmaWVsZHNbZmllbGRdOworICAgICAgICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmllbGROYW1lKGZpZWxkKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc9JyArIHZhbHVlICsgIiwgdmFsaWQgcmFuZ2U9IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbiArICIuLiIgKyBtYXgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydHMgdGhlIGN1cnJlbnQgZmllbGQgdmFsdWVzIGluIDxjb2RlPmZpZWxkc1tdPC9jb2RlPiB0byB0aGUKKyAgICAgKiBtaWxsaXNlY29uZCB0aW1lIHZhbHVlIDxjb2RlPnRpbWU8L2NvZGU+LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgcHJvdGVjdGVkIHZvaWQgY29tcHV0ZVRpbWUoKSB7CisgICAgICAgIGlmICghaXNMZW5pZW50KCkpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlRmllbGRzKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21wdXRlIHRoZSBKdWxpYW4gZGF5IAorICAgICAgICBpbnQganVsaWFuRGF5ID0gY29tcHV0ZUp1bGlhbkRheSgpOworCisgICAgICAgIGxvbmcgbWlsbGlzID0ganVsaWFuRGF5VG9NaWxsaXMoanVsaWFuRGF5KTsKKworICAgICAgICBpbnQgbWlsbGlzSW5EYXk7CisKKyAgICAgICAgLy8gV2Ugb25seSB1c2UgTUlMTElTRUNPTkRTX0lOX0RBWSBpZiBpdCBoYXMgYmVlbiBzZXQgYnkgdGhlIHVzZXIuCisgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIHRoZSBjYWxsZXIgdG8gc2V0IHRoZSBjYWxlbmRhciB0byBhCisgICAgICAgIC8vIHRpbWUgYW5kIGNhbGwgY2xlYXIoTU9OVEgpIHRvIHJlc2V0IHRoZSBNT05USCB0byBKYW51YXJ5LiAgVGhpcworICAgICAgICAvLyBpcyBsZWdhY3kgYmVoYXZpb3IuICBXaXRob3V0IHRoaXMsIGNsZWFyKE1PTlRIKSBoYXMgbm8gZWZmZWN0LAorICAgICAgICAvLyBzaW5jZSB0aGUgaW50ZXJuYWxseSBzZXQgSlVMSUFOX0RBWSBpcyB1c2VkLgorICAgICAgICBpZiAoc3RhbXBbTUlMTElTRUNPTkRTX0lOX0RBWV0gPj0gTUlOSU1VTV9VU0VSX1NUQU1QICYmCisgICAgICAgICAgICBuZXdlc3RTdGFtcChBTV9QTSwgTUlMTElTRUNPTkQsIFVOU0VUKSA8PSBzdGFtcFtNSUxMSVNFQ09ORFNfSU5fREFZXSkgeworICAgICAgICAgICAgbWlsbGlzSW5EYXkgPSBpbnRlcm5hbEdldChNSUxMSVNFQ09ORFNfSU5fREFZKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1pbGxpc0luRGF5ID0gY29tcHV0ZU1pbGxpc0luRGF5KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21wdXRlIHRoZSB0aW1lIHpvbmUgb2Zmc2V0IGFuZCBEU1Qgb2Zmc2V0LiAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwKKyAgICAgICAgLy8gYW1iaWd1aXRpZXMgaGVyZS4gIFdlJ2xsIGFzc3VtZSBhIDI6MDAgYW0gKHdhbGwgdGltZSkgc3dpdGNob3ZlciB0aW1lCisgICAgICAgIC8vIGZvciBkaXNjdXNzaW9uIHB1cnBvc2VzIGhlcmUuCisgICAgICAgIC8vIDEuIFRoZSB0cmFuc2l0aW9uIGludG8gRFNULiAgSGVyZSwgYSBkZXNpZ25hdGVkIHRpbWUgb2YgMjowMCBhbSAtIDI6NTkgYW0KKyAgICAgICAgLy8gICAgY2FuIGJlIGluIHN0YW5kYXJkIG9yIGluIERTVCBkZXBlbmRpbmcuICBIb3dldmVyLCAyOjAwIGFtIGlzIGFuIGludmFsaWQKKyAgICAgICAgLy8gICAgcmVwcmVzZW50YXRpb24gKHRoZSByZXByZXNlbnRhdGlvbiBqdW1wcyBmcm9tIDE6NTk6NTkgYW0gU3RkIHRvIDM6MDA6MDAgYW0gRFNUKS4KKyAgICAgICAgLy8gICAgV2UgYXNzdW1lIHN0YW5kYXJkIHRpbWUuCisgICAgICAgIC8vIDIuIFRoZSB0cmFuc2l0aW9uIG91dCBvZiBEU1QuICBIZXJlLCBhIGRlc2lnbmF0ZWQgdGltZSBvZiAxOjAwIGFtIC0gMTo1OSBhbQorICAgICAgICAvLyAgICBjYW4gYmUgaW4gc3RhbmRhcmQgb3IgRFNULiAgQm90aCBhcmUgdmFsaWQgcmVwcmVzZW50YXRpb25zICh0aGUgcmVwCisgICAgICAgIC8vICAgIGp1bXBzIGZyb20gMTo1OTo1OSBEU1QgdG8gMTowMDowMCBTdGQpLgorICAgICAgICAvLyAgICBBZ2Fpbiwgd2UgYXNzdW1lIHN0YW5kYXJkIHRpbWUuCisgICAgICAgIC8vIFdlIHVzZSB0aGUgVGltZVpvbmUgb2JqZWN0LCB1bmxlc3MgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgc2V0IHRoZSBaT05FX09GRlNFVAorICAgICAgICAvLyBvciBEU1RfT0ZGU0VUIGZpZWxkczsgdGhlbiB3ZSB1c2UgdGhvc2UgZmllbGRzLgorICAgICAgICBpZiAoc3RhbXBbWk9ORV9PRkZTRVRdID49IE1JTklNVU1fVVNFUl9TVEFNUCB8fAorICAgICAgICAgICAgc3RhbXBbRFNUX09GRlNFVF0gPj0gTUlOSU1VTV9VU0VSX1NUQU1QKSB7CisgICAgICAgICAgICBtaWxsaXNJbkRheSAtPSBpbnRlcm5hbEdldChaT05FX09GRlNFVCkgKyBpbnRlcm5hbEdldChEU1RfT0ZGU0VUKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1pbGxpc0luRGF5IC09IGNvbXB1dGVab25lT2Zmc2V0KG1pbGxpcywgbWlsbGlzSW5EYXkpOworICAgICAgICB9CisKKyAgICAgICAgdGltZSA9IG1pbGxpcyArIG1pbGxpc0luRGF5OworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIG1pbGxpc2Vjb25kcyBpbiB0aGUgZGF5IGZyb20gdGhlIGZpZWxkcy4gIFRoaXMgaXMgYQorICAgICAqIHZhbHVlIGZyb20gMCB0byAyMzo1OTo1OS45OTkgaW5jbHVzaXZlLCB1bmxlc3MgZmllbGRzIGFyZSBvdXQgb2YKKyAgICAgKiByYW5nZSwgaW4gd2hpY2ggY2FzZSBpdCBjYW4gYmUgYW4gYXJiaXRyYXJ5IHZhbHVlLiAgVGhpcyB2YWx1ZQorICAgICAqIHJlZmxlY3RzIGxvY2FsIHpvbmUgd2FsbCB0aW1lLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgY29tcHV0ZU1pbGxpc0luRGF5KCkgeworICAgICAgICAvLyBEbyB0aGUgdGltZSBwb3J0aW9uIG9mIHRoZSBjb252ZXJzaW9uLgorCisgICAgICAgIGludCBtaWxsaXNJbkRheSA9IDA7CisKKyAgICAgICAgLy8gRmluZCB0aGUgYmVzdCBzZXQgb2YgZmllbGRzIHNwZWNpZnlpbmcgdGhlIHRpbWUgb2YgZGF5LiAgVGhlcmUKKyAgICAgICAgLy8gYXJlIG9ubHkgdHdvIHBvc3NpYmlsaXRpZXMgaGVyZTsgdGhlIEhPVVJfT0ZfREFZIG9yIHRoZQorICAgICAgICAvLyBBTV9QTSBhbmQgdGhlIEhPVVIuCisgICAgICAgIGludCBob3VyT2ZEYXlTdGFtcCA9IHN0YW1wW0hPVVJfT0ZfREFZXTsKKyAgICAgICAgaW50IGhvdXJTdGFtcCA9IE1hdGgubWF4KHN0YW1wW0hPVVJdLCBzdGFtcFtBTV9QTV0pOworICAgICAgICBpbnQgYmVzdFN0YW1wID0gKGhvdXJTdGFtcCA+IGhvdXJPZkRheVN0YW1wKSA/IGhvdXJTdGFtcCA6IGhvdXJPZkRheVN0YW1wOworCisgICAgICAgIC8vIEhvdXJzCisgICAgICAgIGlmIChiZXN0U3RhbXAgIT0gVU5TRVQpIHsKKyAgICAgICAgICAgIGlmIChiZXN0U3RhbXAgPT0gaG91ck9mRGF5U3RhbXApIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBub3JtYWxpemUgaGVyZTsgbGV0IG92ZXJmbG93IGJ1bXAgaW50byB0aGUgbmV4dCBwZXJpb2QuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggaG93IHdlIGhhbmRsZSBvdGhlciBmaWVsZHMuCisgICAgICAgICAgICAgICAgbWlsbGlzSW5EYXkgKz0gaW50ZXJuYWxHZXQoSE9VUl9PRl9EQVkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBub3JtYWxpemUgaGVyZTsgbGV0IG92ZXJmbG93IGJ1bXAgaW50byB0aGUgbmV4dCBwZXJpb2QuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggaG93IHdlIGhhbmRsZSBvdGhlciBmaWVsZHMuCisgICAgICAgICAgICAgICAgbWlsbGlzSW5EYXkgKz0gaW50ZXJuYWxHZXQoSE9VUik7CisgICAgICAgICAgICAgICAgbWlsbGlzSW5EYXkgKz0gMTIgKiBpbnRlcm5hbEdldChBTV9QTSk7IC8vIERlZmF1bHQgd29ya3MgZm9yIHVuc2V0IEFNX1BNCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSB1c2UgdGhlIGZhY3QgdGhhdCB1bnNldCA9PSAwOyB3ZSBzdGFydCB3aXRoIG1pbGxpc0luRGF5CisgICAgICAgIC8vID09IEhPVVJfT0ZfREFZLgorICAgICAgICBtaWxsaXNJbkRheSAqPSA2MDsKKyAgICAgICAgbWlsbGlzSW5EYXkgKz0gaW50ZXJuYWxHZXQoTUlOVVRFKTsgLy8gbm93IGhhdmUgbWludXRlcworICAgICAgICBtaWxsaXNJbkRheSAqPSA2MDsKKyAgICAgICAgbWlsbGlzSW5EYXkgKz0gaW50ZXJuYWxHZXQoU0VDT05EKTsgLy8gbm93IGhhdmUgc2Vjb25kcworICAgICAgICBtaWxsaXNJbkRheSAqPSAxMDAwOworICAgICAgICBtaWxsaXNJbkRheSArPSBpbnRlcm5hbEdldChNSUxMSVNFQ09ORCk7IC8vIG5vdyBoYXZlIG1pbGxpcworCisgICAgICAgIHJldHVybiBtaWxsaXNJbkRheTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYXNzdW1lIEVYVEVOREVEX1lFQVIgaGFzIGJlZW4gc2V0LgorICAgICAqIEBwYXJhbSBtaWxsaXMgbWlsbGlzZWNvbmRzIG9mIHRoZSBkYXRlIGZpZWxkcworICAgICAqIEBwYXJhbSBtaWxsaXNJbkRheSBtaWxsaXNlY29uZHMgb2YgdGhlIHRpbWUgZmllbGRzOyBtYXkgYmUgb3V0CisgICAgICogb3IgcmFuZ2UuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBjb21wdXRlWm9uZU9mZnNldChsb25nIG1pbGxpcywgaW50IG1pbGxpc0luRGF5KSB7CisKKyAgICAgICAgLyogTm9ybWFsaXplIHRoZSBtaWxsaXNJbkRheSB0byAwLi5PTkVfREFZLTEuICBJZiB0aGUgbWlsbGlzIGlzIG91dAorICAgICAgICAgKiBvZiByYW5nZSwgdGhlbiB3ZSBtdXN0IGNhbGwgY29tcHV0ZUdyZWdvcmlhbkFuZERPV0ZpZWxkcygpIHRvCisgICAgICAgICAqIHJlY29tcHV0ZSBvdXIgZmllbGRzLiAqLworICAgICAgICBpbnRbXSBub3JtYWxpemVkTWlsbGlzSW5EYXkgPSBuZXcgaW50WzFdOworICAgICAgICBpbnQgZGF5cyA9IGZsb29yRGl2aWRlKG1pbGxpcyArIG1pbGxpc0luRGF5LCAoaW50KSBPTkVfREFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNaWxsaXNJbkRheSk7CisKKyAgICAgICAgaW50IGp1bGlhbkRheSA9IG1pbGxpc1RvSnVsaWFuRGF5KGRheXMgKiBPTkVfREFZKTsKKworICAgICAgICBjb21wdXRlR3JlZ29yaWFuQW5kRE9XRmllbGRzKGp1bGlhbkRheSk7CisKKyAgICAgICAgcmV0dXJuIHpvbmUuZ2V0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgIGdyZWdvcmlhblllYXIsIGdyZWdvcmlhbk1vbnRoLCBncmVnb3JpYW5EYXlPZk1vbnRoLAorICAgICAgICAgICAgICAgICAgICAgIGZpZWxkc1tEQVlfT0ZfV0VFS10sIG5vcm1hbGl6ZWRNaWxsaXNJbkRheVswXSwKKyAgICAgICAgICAgICAgICAgICAgICBncmVnb3JpYW5Nb250aExlbmd0aChncmVnb3JpYW5ZZWFyLCBncmVnb3JpYW5Nb250aCksCisgICAgICAgICAgICAgICAgICAgICAgZ3JlZ29yaWFuUHJldmlvdXNNb250aExlbmd0aChncmVnb3JpYW5ZZWFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZ29yaWFuTW9udGgpKTsKKworICAgICAgICAvLyBOb3RlOiBCZWNhdXNlIHdlIHBhc3MgaW4gd2FsbCBtaWxsaXNJbkRheSwgcmF0aGVyIHRoYW4KKyAgICAgICAgLy8gc3RhbmRhcmQgbWlsbGlzSW5EYXksIHdlIGludGVycHJldCAiMTowMCBhbSIgb24gdGhlIGRheQorICAgICAgICAvLyBvZiBjZXNzYXRpb24gb2YgRFNUIGFzICIxOjAwIGFtIFN0ZCIgKGFzc3VtaW5nIHRoZSB0aW1lCisgICAgICAgIC8vIG9mIGNlc3NhdGlvbiBpcyAyOjAwIGFtKS4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSBKdWxpYW4gZGF5IG51bWJlciBhcyBzcGVjaWZpZWQgYnkgdGhpcyBjYWxlbmRhcidzIGZpZWxkcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGNvbXB1dGVKdWxpYW5EYXkoKSB7CisKKyAgICAgICAgLy8gV2Ugd2FudCB0byBzZWUgaWYgYW55IG9mIHRoZSBkYXRlIGZpZWxkcyBpcyBuZXdlciB0aGFuIHRoZQorICAgICAgICAvLyBKVUxJQU5fREFZLiAgSWYgbm90LCB0aGVuIHdlIHVzZSBKVUxJQU5fREFZLiAgSWYgc28sIHRoZW4gd2UgZG8KKyAgICAgICAgLy8gdGhlIG5vcm1hbCByZXNvbHV0aW9uLiAgV2Ugb25seSB1c2UgSlVMSUFOX0RBWSBpZiBpdCBoYXMgYmVlbgorICAgICAgICAvLyBzZXQgYnkgdGhlIHVzZXIuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciB0aGUgY2FsbGVyIHRvIHNldAorICAgICAgICAvLyB0aGUgY2FsZW5kYXIgdG8gYSB0aW1lIGFuZCBjYWxsIGNsZWFyKE1PTlRIKSB0byByZXNldCB0aGUgTU9OVEgKKyAgICAgICAgLy8gdG8gSmFudWFyeS4gIFRoaXMgaXMgbGVnYWN5IGJlaGF2aW9yLiAgV2l0aG91dCB0aGlzLAorICAgICAgICAvLyBjbGVhcihNT05USCkgaGFzIG5vIGVmZmVjdCwgc2luY2UgdGhlIGludGVybmFsbHkgc2V0IEpVTElBTl9EQVkKKyAgICAgICAgLy8gaXMgdXNlZC4KKyAgICAgICAgaWYgKHN0YW1wW0pVTElBTl9EQVldID49IE1JTklNVU1fVVNFUl9TVEFNUCkgeworICAgICAgICAgICAgaW50IGJlc3RTdGFtcCA9IG5ld2VzdFN0YW1wKEVSQSwgREFZX09GX1dFRUtfSU5fTU9OVEgsIFVOU0VUKTsKKyAgICAgICAgICAgIGJlc3RTdGFtcCA9IG5ld2VzdFN0YW1wKFlFQVJfV09ZLCBFWFRFTkRFRF9ZRUFSLCBiZXN0U3RhbXApOworICAgICAgICAgICAgaWYgKGJlc3RTdGFtcCA8PSBzdGFtcFtKVUxJQU5fREFZXSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbEdldChKVUxJQU5fREFZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludCBiZXN0RmllbGQgPSByZXNvbHZlRmllbGRzKGdldEZpZWxkUmVzb2x1dGlvblRhYmxlKCkpOworICAgICAgICBpZiAoYmVzdEZpZWxkIDwgMCkgeworICAgICAgICAgICAgYmVzdEZpZWxkID0gREFZX09GX01PTlRIOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGhhbmRsZUNvbXB1dGVKdWxpYW5EYXkoYmVzdEZpZWxkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZpZWxkIHJlc29sdXRpb24gYXJyYXkgZm9yIHRoaXMgY2FsZW5kYXIuICBDYWxlbmRhcnMgdGhhdAorICAgICAqIGRlZmluZSBhZGRpdGlvbmFsIGZpZWxkcyBvciBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBleGlzdGluZyBmaWVsZHMKKyAgICAgKiBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gYWRqdXN0IHRoZSBmaWVsZCByZXNvbHV0aW9uIHNlbWFudGljcworICAgICAqIGFjY29yZGluZ2x5LiAgT3RoZXIgc3ViY2xhc3NlcyBzaG91bGQgbm90IG92ZXJyaWRlIHRoaXMgbWV0aG9kLgorICAgICAqIEBzZWUgI3Jlc29sdmVGaWVsZHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50W11bXVtdIGdldEZpZWxkUmVzb2x1dGlvblRhYmxlKCkgeworICAgICAgICByZXR1cm4gREFURV9QUkVDRURFTkNFOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgSnVsaWFuIGRheSBudW1iZXIgb2YgZGF5IGJlZm9yZSB0aGUgZmlyc3QgZGF5IG9mIHRoZQorICAgICAqIGdpdmVuIG1vbnRoIGluIHRoZSBnaXZlbiBleHRlbmRlZCB5ZWFyLiAgU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUKKyAgICAgKiB0aGlzIG1ldGhvZCB0byBpbXBsZW1lbnQgdGhlaXIgY2FsZW5kYXIgc3lzdGVtLgorICAgICAqIEBwYXJhbSBleWVhciB0aGUgZXh0ZW5kZWQgeWVhcgorICAgICAqIEBwYXJhbSBtb250aCB0aGUgemVyby1iYXNlZCBtb250aCwgb3IgMCBpZiB1c2VNb250aCBpcyBmYWxzZQorICAgICAqIEBwYXJhbSB1c2VNb250aCBpZiBmYWxzZSwgY29tcHV0ZSB0aGUgZGF5IGJlZm9yZSB0aGUgZmlyc3QgZGF5IG9mCisgICAgICogdGhlIGdpdmVuIHllYXIsIG90aGVyd2lzZSwgY29tcHV0ZSB0aGUgZGF5IGJlZm9yZSB0aGUgZmlyc3QgZGF5IG9mCisgICAgICogdGhlIGdpdmVuIG1vbnRoCisgICAgICogQHBhcmFtIHJldHVybiB0aGUgSnVsaWFuIGRheSBudW1iZXIgb2YgdGhlIGRheSBiZWZvcmUgdGhlIGZpcnN0CisgICAgICogZGF5IG9mIHRoZSBnaXZlbiBtb250aCBhbmQgeWVhcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGFic3RyYWN0IHByb3RlY3RlZCBpbnQgaGFuZGxlQ29tcHV0ZU1vbnRoU3RhcnQoaW50IGV5ZWFyLCBpbnQgbW9udGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHVzZU1vbnRoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZXh0ZW5kZWQgeWVhciBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IGZpZWxkcy4gIFRoaXMgd2lsbAorICAgICAqIHVzZSB0aGUgRVhURU5ERURfWUVBUiBmaWVsZCBvciB0aGUgWUVBUiBhbmQgc3VwcmEteWVhciBmaWVsZHMgKHN1Y2gKKyAgICAgKiBhcyBFUkEpIHNwZWNpZmljIHRvIHRoZSBjYWxlbmRhciBzeXN0ZW0sIGRlcGVuZGluZyBvbiB3aGljaCBzZXQgb2YKKyAgICAgKiBmaWVsZHMgaXMgbmV3ZXIuCisgICAgICogQHJldHVybiB0aGUgZXh0ZW5kZWQgeWVhcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGFic3RyYWN0IHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0RXh0ZW5kZWRZZWFyKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBnaXZlbiBtb250aCBvZiB0aGUgZ2l2ZW4gZXh0ZW5kZWQKKyAgICAgKiB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLiAgU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcworICAgICAqIG1ldGhvZCBpZiB0aGV5IGNhbiBwcm92aWRlIGEgbW9yZSBjb3JyZWN0IG9yIG1vcmUgZWZmaWNpZW50CisgICAgICogaW1wbGVtZW50YXRpb24gdGhhbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpbiBDYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUdldE1vbnRoTGVuZ3RoKGludCBleHRlbmRlZFllYXIsIGludCBtb250aCkgeworICAgICAgICByZXR1cm4gaGFuZGxlQ29tcHV0ZU1vbnRoU3RhcnQoZXh0ZW5kZWRZZWFyLCBtb250aCsxLCB0cnVlKSAtCisgICAgICAgICAgICAgICBoYW5kbGVDb21wdXRlTW9udGhTdGFydChleHRlbmRlZFllYXIsIG1vbnRoLCB0cnVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBnaXZlbiBleHRlbmRlZCB5ZWFyIG9mIHRoaXMKKyAgICAgKiBjYWxlbmRhciBzeXN0ZW0uICBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGV5IGNhbgorICAgICAqIHByb3ZpZGUgYSBtb3JlIGNvcnJlY3Qgb3IgbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gdGhhbiB0aGUKKyAgICAgKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGluIENhbGVuZGFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0WWVhckxlbmd0aChpbnQgZXllYXIpIHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUNvbXB1dGVNb250aFN0YXJ0KGV5ZWFyKzEsIDAsIGZhbHNlKSAtCisgICAgICAgICAgICAgICBoYW5kbGVDb21wdXRlTW9udGhTdGFydChleWVhciwgMCwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN1YmNsYXNzZXMgdGhhdCB1c2UgYWRkaXRpb25hbCBmaWVsZHMgYmV5b25kIHRob3NlIGRlZmluZWQgaW4KKyAgICAgKiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJldHVybiBhbgorICAgICAqIDxjb2RlPmludFtdPC9jb2RlPiBhcnJheSBvZiB0aGUgYXBwcm9wcmlhdGUgbGVuZ3RoLiAgVGhlIGxlbmd0aAorICAgICAqIG11c3QgYmUgYXQgbGVhc3QgPGNvZGU+QkFTRV9GSUVMRF9DT1VOVDwvY29kZT4gYW5kIG5vIG1vcmUgdGhhbgorICAgICAqIDxjb2RlPk1BWF9GSUVMRF9DT1VOVDwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludFtdIGhhbmRsZUNyZWF0ZUZpZWxkcygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBpbnRbQkFTRV9GSUVMRF9DT1VOVF07CisgICAgfQorCisgICAgLyoqCisgICAgICogU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdGhpcy4gIFRoaXMgbWV0aG9kIGNhbGxzCisgICAgICogaGFuZGxlR2V0TW9udGhMZW5ndGgoKSB0byBvYnRhaW4gdGhlIGNhbGVuZGFyLXNwZWNpZmljIG1vbnRoCisgICAgICogbGVuZ3RoLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlQ29tcHV0ZUp1bGlhbkRheShpbnQgYmVzdEZpZWxkKSB7CisKKyAgICAgICAgYm9vbGVhbiB1c2VNb250aCA9IChiZXN0RmllbGQgPT0gREFZX09GX01PTlRIIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEZpZWxkID09IFdFRUtfT0ZfTU9OVEggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0RmllbGQgPT0gREFZX09GX1dFRUtfSU5fTU9OVEgpOworCisgICAgICAgIGludCB5ZWFyID0gaGFuZGxlR2V0RXh0ZW5kZWRZZWFyKCk7CisgICAgICAgIGludGVybmFsU2V0KEVYVEVOREVEX1lFQVIsIHllYXIpOworCisgICAgICAgIC8vIEdldCB0aGUgSnVsaWFuIGRheSBvZiB0aGUgZGF5IEJFRk9SRSB0aGUgc3RhcnQgb2YgdGhpcyB5ZWFyLgorICAgICAgICAvLyBJZiB1c2VNb250aCBpcyB0cnVlLCBnZXQgdGhlIGRheSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBtb250aC4KKyAgICAgICAgaW50IGp1bGlhbkRheSA9IGhhbmRsZUNvbXB1dGVNb250aFN0YXJ0KHllYXIsIHVzZU1vbnRoID8gaW50ZXJuYWxHZXQoTU9OVEgpIDogMCwgdXNlTW9udGgpOworCisgICAgICAgIGlmIChiZXN0RmllbGQgPT0gREFZX09GX01PTlRIKSB7CisgICAgICAgICAgICByZXR1cm4ganVsaWFuRGF5ICsgaW50ZXJuYWxHZXQoREFZX09GX01PTlRILCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiZXN0RmllbGQgPT0gREFZX09GX1lFQVIpIHsKKyAgICAgICAgICAgIHJldHVybiBqdWxpYW5EYXkgKyBpbnRlcm5hbEdldChEQVlfT0ZfWUVBUik7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZmlyc3REYXlPZldlZWsgPSBnZXRGaXJzdERheU9mV2VlaygpOyAvLyBMb2NhbGl6ZWQgZmR3CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBqdWxpYW5EYXkgaXMgdGhlIDAtYmFzZWQgZGF5IEJFRk9SRSB0aGUgZmlyc3QgZGF5IG9mCisgICAgICAgIC8vIEphbnVhcnkgMSwgeWVhciAxIG9mIHRoZSBnaXZlbiBjYWxlbmRhci4gIElmIGp1bGlhbkRheSA9PSAwLCBpdAorICAgICAgICAvLyBzcGVjaWZpZXMgKEphbi4gMSwgMSkgLSAxLCBpbiB3aGF0ZXZlciBjYWxlbmRhciB3ZSBhcmUgdXNpbmcgKEp1bGlhbgorICAgICAgICAvLyBvciBHcmVnb3JpYW4pLgorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgbmVlZCB0byBwcm9jZXNzIHRoZSBXRUVLX09GX01PTlRIIG9yCisgICAgICAgIC8vIFdFRUtfT0ZfWUVBUiwgd2hpY2ggYXJlIHNpbWlsYXIsIG9yIHRoZSBEQVlfT0ZfV0VFS19JTl9NT05USC4KKyAgICAgICAgLy8gRmlyc3QsIHBlcmZvcm0gaW5pdGlhbCBzaGFyZWQgY29tcHV0YXRpb25zLiAgVGhlc2UgbG9jYXRlIHRoZQorICAgICAgICAvLyBmaXJzdCB3ZWVrIG9mIHRoZSBwZXJpb2QuCisKKyAgICAgICAgLy8gR2V0IHRoZSAwLWJhc2VkIGxvY2FsaXplZCBET1cgb2YgZGF5IG9uZSBvZiB0aGUgbW9udGggb3IgeWVhci4KKyAgICAgICAgLy8gVmFsaWQgcmFuZ2UgMC4uNi4KKyAgICAgICAgaW50IGZpcnN0ID0ganVsaWFuRGF5VG9EYXlPZldlZWsoanVsaWFuRGF5ICsgMSkgLSBmaXJzdERheU9mV2VlazsKKyAgICAgICAgaWYgKGZpcnN0IDwgMCkgeworICAgICAgICAgICAgZmlyc3QgKz0gNzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gR2V0IHplcm8tYmFzZWQgbG9jYWxpemVkIERPVywgdmFsaWQgcmFuZ2UgMC4uNi4gIFRoaXMgaXMgdGhlIERPVworICAgICAgICAvLyB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgICAgIGludCBkb3dMb2NhbCA9IDA7CisgICAgICAgIHN3aXRjaCAocmVzb2x2ZUZpZWxkcyhET1dfUFJFQ0VERU5DRSkpIHsKKyAgICAgICAgY2FzZSBEQVlfT0ZfV0VFSzoKKyAgICAgICAgICAgIGRvd0xvY2FsID0gaW50ZXJuYWxHZXQoREFZX09GX1dFRUspIC0gZmlyc3REYXlPZldlZWs7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBET1dfTE9DQUw6CisgICAgICAgICAgICBkb3dMb2NhbCA9IGludGVybmFsR2V0KERPV19MT0NBTCkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZG93TG9jYWwgPSBkb3dMb2NhbCAlIDc7CisgICAgICAgIGlmIChkb3dMb2NhbCA8IDApIHsKKyAgICAgICAgICAgIGRvd0xvY2FsICs9IDc7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCB0YXJnZXQgRE9XIChkb3dMb2NhbCkgaW4gdGhlIG1vbnRoIG9yIHllYXIuCisgICAgICAgIC8vIEFjdHVhbGx5LCBpdCBtYXkgYmUganVzdCBiZWZvcmUgdGhlIGZpcnN0IG9mIHRoZSBtb250aCBvciB5ZWFyLgorICAgICAgICAvLyBJdCB3aWxsIGJlIGFuIGludGVnZXIgZnJvbSAtNS4uNy4KKyAgICAgICAgaW50IGRhdGUgPSAxIC0gZmlyc3QgKyBkb3dMb2NhbDsKKworICAgICAgICBpZiAoYmVzdEZpZWxkID09IERBWV9PRl9XRUVLX0lOX01PTlRIKSB7CisKKyAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgdGFyZ2V0IERPVyB0byBiZSBpbiB0aGUgbW9udGggb3IgeWVhci4KKyAgICAgICAgICAgIGlmIChkYXRlIDwgMSkgeworICAgICAgICAgICAgICAgIGRhdGUgKz0gNzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlIG9ubHkgdHJpY2tpbmVzcyBvY2N1cnMgaWYgdGhlIGRheS1vZi13ZWVrLWluLW1vbnRoIGlzCisgICAgICAgICAgICAvLyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIGludCBkaW0gPSBpbnRlcm5hbEdldChEQVlfT0ZfV0VFS19JTl9NT05USCwgMSk7CisgICAgICAgICAgICBpZiAoZGltID49IDApIHsKKyAgICAgICAgICAgICAgICBkYXRlICs9IDcqKGRpbSAtIDEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNb3ZlIGRhdGUgdG8gdGhlIGxhc3Qgb2YgdGhpcyBkYXktb2Ytd2VlayBpbiB0aGlzIG1vbnRoLAorICAgICAgICAgICAgICAgIC8vIHRoZW4gYmFjayB1cCBhcyBuZWVkZWQuICBJZiBkaW09PS0xLCB3ZSBkb24ndCBiYWNrIHVwIGF0CisgICAgICAgICAgICAgICAgLy8gYWxsLiAgSWYgZGltPT0tMiwgd2UgYmFjayB1cCBvbmNlLCBldGMuICBEb24ndCBiYWNrIHVwCisgICAgICAgICAgICAgICAgLy8gcGFzdCB0aGUgZmlyc3Qgb2YgdGhlIGdpdmVuIGRheS1vZi13ZWVrIGluIHRoaXMgbW9udGguCisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGhhbmRsZSAtMiwgLTMsIGV0Yy4gY29ycmVjdGx5LCBldmVuIHRob3VnaAorICAgICAgICAgICAgICAgIC8vIHZhbHVlcyA8IC0xIGFyZSB0ZWNobmljYWxseSBkaXNhbGxvd2VkLgorICAgICAgICAgICAgICAgIGludCBtID0gaW50ZXJuYWxHZXQoTU9OVEgsIEpBTlVBUlkpOworICAgICAgICAgICAgICAgIGludCBtb250aExlbmd0aCA9IGhhbmRsZUdldE1vbnRoTGVuZ3RoKHllYXIsIG0pOworICAgICAgICAgICAgICAgIGRhdGUgKz0gKChtb250aExlbmd0aCAtIGRhdGUpIC8gNyArIGRpbSArIDEpICogNzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGFzc2VydChiZXN0RmllbGQgPT0gV0VFS19PRl9NT05USCB8fCBiZXN0RmllbGQgPT0gV0VFS19PRl9ZRUFSKQorCisgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIG1pbmltYWwgZGF5cyBpbiBmaXJzdCB3ZWVrCisgICAgICAgICAgICBpZiAoKDcgLSBmaXJzdCkgPCBnZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRlICs9IDc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyBhZGp1c3QgZm9yIHRoZSB3ZWVrIG51bWJlci4KKyAgICAgICAgICAgIGRhdGUgKz0gNyAqIChpbnRlcm5hbEdldChiZXN0RmllbGQpIC0gMSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ganVsaWFuRGF5ICsgZGF0ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSBKdWxpYW4gZGF5IG9mIGEgbW9udGggb2YgdGhlIEdyZWdvcmlhbiBjYWxlbmRhci4KKyAgICAgKiBTdWJjbGFzc2VzIG1heSBjYWxsIHRoaXMgbWV0aG9kIHRvIHBlcmZvcm0gYSBHcmVnb3JpYW4gY2FsZW5kYXIKKyAgICAgKiBmaWVsZHMtPm1pbGxpcyBjb21wdXRhdGlvbi4gIFRvIHBlcmZvcm0gYSBHcmVnb3JpYW4gY2FsZW5kYXIKKyAgICAgKiBtaWxsaXMtPmZpZWxkcyBjb21wdXRhdGlvbiwgY2FsbCBjb21wdXRlR3JlZ29yaWFuRmllbGRzKCkuCisgICAgICogQHBhcmFtIHllYXIgZXh0ZW5kZWQgR3JlZ29yaWFuIHllYXIKKyAgICAgKiBAcGFyYW0gbW9udGggemVyby1iYXNlZCBHcmVnb3JpYW4gbW9udGgKKyAgICAgKiBAcmV0dXJuIHRoZSBKdWxpYW4gZGF5IG51bWJlciBvZiB0aGUgZGF5IGJlZm9yZSB0aGUgZmlyc3QKKyAgICAgKiBkYXkgb2YgdGhlIGdpdmVuIG1vbnRoIGluIHRoZSBnaXZlbiBleHRlbmRlZCB5ZWFyCisgICAgICogQHNlZSAjY29tcHV0ZUdyZWdvcmlhbkZpZWxkcworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgY29tcHV0ZUdyZWdvcmlhbk1vbnRoU3RhcnQoaW50IHllYXIsIGludCBtb250aCkgeworCisgICAgICAgIC8vIElmIHRoZSBtb250aCBpcyBvdXQgb2YgcmFuZ2UsIGFkanVzdCBpdCBpbnRvIHJhbmdlLCBhbmQKKyAgICAgICAgLy8gbW9kaWZ5IHRoZSBleHRlbmRlZCB5ZWFyIHZhbHVlIGFjY29yZGluZ2x5LgorICAgICAgICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHsKKyAgICAgICAgICAgIGludFtdIHJlbSA9IG5ldyBpbnRbMV07CisgICAgICAgICAgICB5ZWFyICs9IGZsb29yRGl2aWRlKG1vbnRoLCAxMiwgcmVtKTsKKyAgICAgICAgICAgIG1vbnRoID0gcmVtWzBdOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBpc0xlYXAgPSAoeWVhciU0ID09IDApICYmICgoeWVhciUxMDAgIT0gMCkgfHwgKHllYXIlNDAwID09IDApKTsKKyAgICAgICAgaW50IHkgPSB5ZWFyIC0gMTsKKyAgICAgICAgLy8gVGhpcyBjb21wdXRhdGlvbiBpcyBhY3R1YWxseSAuLi4gKyAoSkFOXzFfMV9KVUxJQU5fREFZIC0gMykgKyAyLgorICAgICAgICAvLyBBZGQgMiBiZWNhdXNlIEdyZWdvcmlhbiBjYWxlbmRhciBzdGFydHMgMiBkYXlzIGFmdGVyIEp1bGlhbgorICAgICAgICAvLyBjYWxlbmRhci4KKyAgICAgICAgaW50IGp1bGlhbkRheSA9IDM2NSp5ICsgZmxvb3JEaXZpZGUoeSwgNCkgLSBmbG9vckRpdmlkZSh5LCAxMDApICsKKyAgICAgICAgICAgIGZsb29yRGl2aWRlKHksIDQwMCkgKyBKQU5fMV8xX0pVTElBTl9EQVkgLSAxOworCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQganVsaWFuRGF5IGluZGljYXRlcyB0aGUgZGF5IEJFRk9SRSB0aGUgZmlyc3QgZGF5CisgICAgICAgIC8vIG9mIEphbnVhcnkgMSwgPGV5ZWFyPiBvZiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLgorICAgICAgICBpZiAobW9udGggIT0gMCkgeworICAgICAgICAgICAganVsaWFuRGF5ICs9IEdSRUdPUklBTl9NT05USF9DT1VOVFttb250aF1baXNMZWFwPzM6Ml07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ganVsaWFuRGF5OworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN1YmNsYXNzIEFQSQorICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjb21wdXRlIHNldmVyYWwgZmllbGRzCisgICAgICogc3BlY2lmaWMgdG8gZWFjaCBjYWxlbmRhciBzeXN0ZW0uICBUaGVzZSBhcmU6CisgICAgICoKKyAgICAgKiA8dWw+PGxpPkVSQQorICAgICAqIDxsaT5ZRUFSCisgICAgICogPGxpPk1PTlRICisgICAgICogPGxpPkRBWV9PRl9NT05USAorICAgICAqIDxsaT5EQVlfT0ZfWUVBUgorICAgICAqIDxsaT5FWFRFTkRFRF9ZRUFSPC91bD4KKyAgICAgKiAKKyAgICAgKiBTdWJjbGFzc2VzIGNhbiByZWZlciB0byB0aGUgREFZX09GX1dFRUsgYW5kIERPV19MT0NBTCBmaWVsZHMsIHdoaWNoCisgICAgICogd2lsbCBiZSBzZXQgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuICBTdWJjbGFzc2VzIGNhbiBhbHNvIGNhbGwKKyAgICAgKiB0aGUgZ2V0R3JlZ29yaWFuWHh4KCkgbWV0aG9kcyB0byBvYnRhaW4gR3JlZ29yaWFuIGNhbGVuZGFyCisgICAgICogZXF1aXZhbGVudHMgZm9yIHRoZSBnaXZlbiBKdWxpYW4gZGF5LgorICAgICAqCisgICAgICogPHA+SW4gYWRkaXRpb24sIHN1YmNsYXNzZXMgc2hvdWxkIGNvbXB1dGUgYW55IHN1YmNsYXNzLXNwZWNpZmljCisgICAgICogZmllbGRzLCB0aGF0IGlzLCBmaWVsZHMgZnJvbSBCQVNFX0ZJRUxEX0NPVU5UIHRvCisgICAgICogZ2V0RmllbGRDb3VudCgpIC0gMS4KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGluIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiBpbXBsZW1lbnRzCisgICAgICogYSBwdXJlIHByb2xlcHRpYyBHcmVnb3JpYW4gY2FsZW5kYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ29tcHV0ZUZpZWxkcyhpbnQganVsaWFuRGF5KSB7CisgICAgICAgIGludGVybmFsU2V0KE1PTlRILCBnZXRHcmVnb3JpYW5Nb250aCgpKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoREFZX09GX01PTlRILCBnZXRHcmVnb3JpYW5EYXlPZk1vbnRoKCkpOworICAgICAgICBpbnRlcm5hbFNldChEQVlfT0ZfWUVBUiwgZ2V0R3JlZ29yaWFuRGF5T2ZZZWFyKCkpOworICAgICAgICBpbnQgZXllYXIgPSBnZXRHcmVnb3JpYW5ZZWFyKCk7CisgICAgICAgIGludGVybmFsU2V0KEVYVEVOREVEX1lFQVIsIGV5ZWFyKTsKKyAgICAgICAgaW50IGVyYSA9IEdyZWdvcmlhbkNhbGVuZGFyLkFEOworICAgICAgICBpZiAoZXllYXIgPCAxKSB7CisgICAgICAgICAgICBlcmEgPSBHcmVnb3JpYW5DYWxlbmRhci5CQzsKKyAgICAgICAgICAgIGV5ZWFyID0gMSAtIGV5ZWFyOworICAgICAgICB9CisgICAgICAgIGludGVybmFsU2V0KEVSQSwgZXJhKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoWUVBUiwgZXllYXIpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN1YmNsYXNzIEFQSQorICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIGNhbGwKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZXh0ZW5kZWQgeWVhciBvbiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGFzIGNvbXB1dGVkIGJ5CisgICAgICogPGNvZGU+Y29tcHV0ZUdyZWdvcmlhbkZpZWxkcygpPC9jb2RlPi4KKyAgICAgKiBAc2VlICNjb21wdXRlR3JlZ29yaWFuRmllbGRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRHcmVnb3JpYW5ZZWFyKCkgeworICAgICAgICByZXR1cm4gZ3JlZ29yaWFuWWVhcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG1vbnRoICgwLWJhc2VkKSBvbiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGFzIGNvbXB1dGVkIGJ5CisgICAgICogPGNvZGU+Y29tcHV0ZUdyZWdvcmlhbkZpZWxkcygpPC9jb2RlPi4KKyAgICAgKiBAc2VlICNjb21wdXRlR3JlZ29yaWFuRmllbGRzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRHcmVnb3JpYW5Nb250aCgpIHsKKyAgICAgICAgcmV0dXJuIGdyZWdvcmlhbk1vbnRoOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZGF5IG9mIHllYXIgKDEtYmFzZWQpIG9uIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgYXMKKyAgICAgKiBjb21wdXRlZCBieSA8Y29kZT5jb21wdXRlR3JlZ29yaWFuRmllbGRzKCk8L2NvZGU+LgorICAgICAqIEBzZWUgI2NvbXB1dGVHcmVnb3JpYW5GaWVsZHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IGdldEdyZWdvcmlhbkRheU9mWWVhcigpIHsKKyAgICAgICAgcmV0dXJuIGdyZWdvcmlhbkRheU9mWWVhcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGRheSBvZiBtb250aCAoMS1iYXNlZCkgb24gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciBhcworICAgICAqIGNvbXB1dGVkIGJ5IDxjb2RlPmNvbXB1dGVHcmVnb3JpYW5GaWVsZHMoKTwvY29kZT4uCisgICAgICogQHNlZSAjY29tcHV0ZUdyZWdvcmlhbkZpZWxkcworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0R3JlZ29yaWFuRGF5T2ZNb250aCgpIHsKKyAgICAgICAgcmV0dXJuIGdyZWdvcmlhbkRheU9mTW9udGg7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZmllbGRzIGRlZmluZWQgYnkgdGhpcyBjYWxlbmRhci4gIFZhbGlkIGZpZWxkCisgICAgICogYXJndW1lbnRzIHRvIDxjb2RlPnNldCgpPC9jb2RlPiBhbmQgPGNvZGU+Z2V0KCk8L2NvZGU+IGFyZQorICAgICAqIDxjb2RlPjAuLmdldEZpZWxkQ291bnQoKS0xPC9jb2RlPi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldEZpZWxkQ291bnQoKSB7CisgICAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCBhIGZpZWxkIHRvIGEgdmFsdWUuICBTdWJjbGFzc2VzIHNob3VsZCB1c2UgdGhpcyBtZXRob2Qgd2hlbgorICAgICAqIGNvbXB1dGluZyBmaWVsZHMuICBJdCBzZXRzIHRoZSB0aW1lIHN0YW1wIGluIHRoZQorICAgICAqIDxjb2RlPnN0YW1wW108L2NvZGU+IGFycmF5IHRvIDxjb2RlPklOVEVSTkFMTFlfU0VUPC9jb2RlPi4gIElmIGEKKyAgICAgKiBmaWVsZCB0aGF0IG1heSBub3QgYmUgc2V0IGJ5IHN1YmNsYXNzZXMgaXMgcGFzc2VkIGluLCBhbgorICAgICAqIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaXMgdGhyb3duLiAgVGhpcyBwcmV2ZW50cworICAgICAqIHN1YmNsYXNzZXMgZnJvbSBtb2RpZnlpbmcgZmllbGRzIHRoYXQgYXJlIGludGVuZGVkIHRvIGJlCisgICAgICogY2FsZW5kYXItc3lzdGVtIGludmFyaWFudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbnRlcm5hbFNldChpbnQgZmllbGQsIGludCB2YWx1ZSkgeworICAgICAgICBpZiAoKCgxIDw8IGZpZWxkKSAmIGludGVybmFsU2V0TWFzaykgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIlN1YmNsYXNzIGNhbm5vdCBzZXQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZShmaWVsZCkpOworICAgICAgICB9CisgICAgICAgIGZpZWxkc1tmaWVsZF0gPSB2YWx1ZTsKKyAgICAgICAgc3RhbXBbZmllbGRdID0gSU5URVJOQUxMWV9TRVQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W11bXSBHUkVHT1JJQU5fTU9OVEhfQ09VTlQgPSB7CisgICAgICAgIC8vbGVuIGxlbjIgICBzdCAgc3QyCisgICAgICAgIHsgIDMxLCAgMzEsICAgMCwgICAwIH0sIC8vIEphbgorICAgICAgICB7ICAyOCwgIDI5LCAgMzEsICAzMSB9LCAvLyBGZWIKKyAgICAgICAgeyAgMzEsICAzMSwgIDU5LCAgNjAgfSwgLy8gTWFyCisgICAgICAgIHsgIDMwLCAgMzAsICA5MCwgIDkxIH0sIC8vIEFwcgorICAgICAgICB7ICAzMSwgIDMxLCAxMjAsIDEyMSB9LCAvLyBNYXkKKyAgICAgICAgeyAgMzAsICAzMCwgMTUxLCAxNTIgfSwgLy8gSnVuCisgICAgICAgIHsgIDMxLCAgMzEsIDE4MSwgMTgyIH0sIC8vIEp1bAorICAgICAgICB7ICAzMSwgIDMxLCAyMTIsIDIxMyB9LCAvLyBBdWcKKyAgICAgICAgeyAgMzAsICAzMCwgMjQzLCAyNDQgfSwgLy8gU2VwCisgICAgICAgIHsgIDMxLCAgMzEsIDI3MywgMjc0IH0sIC8vIE9jdAorICAgICAgICB7ICAzMCwgIDMwLCAzMDQsIDMwNSB9LCAvLyBOb3YKKyAgICAgICAgeyAgMzEsICAzMSwgMzM0LCAzMzUgfSAgLy8gRGVjCisgICAgICAgIC8vIGxlbiAgbGVuZ3RoIG9mIG1vbnRoCisgICAgICAgIC8vIGxlbjIgbGVuZ3RoIG9mIG1vbnRoIGluIGEgbGVhcCB5ZWFyCisgICAgICAgIC8vIHN0ICAgZGF5cyBpbiB5ZWFyIGJlZm9yZSBzdGFydCBvZiBtb250aAorICAgICAgICAvLyBzdDIgIGRheXMgaW4geWVhciBiZWZvcmUgbW9udGggaW4gbGVhcCB5ZWFyCisgICAgfTsKKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHllYXIgaXMgYSBsZWFwIHllYXIuIFJldHVybnMgdHJ1ZSBpZiB0aGUKKyAgICAgKiBnaXZlbiB5ZWFyIGlzIGEgbGVhcCB5ZWFyLgorICAgICAqIEBwYXJhbSB5ZWFyIHRoZSBnaXZlbiB5ZWFyLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4geWVhciBpcyBhIGxlYXAgeWVhcjsgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc0dyZWdvcmlhbkxlYXBZZWFyKGludCB5ZWFyKSB7CisgICAgICAgIHJldHVybiAoeWVhciU0ID09IDApICYmICgoeWVhciUxMDAgIT0gMCkgfHwgKHllYXIlNDAwID09IDApKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBhIG1vbnRoIG9mIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIuCisgICAgICogQHBhcmFtIHkgdGhlIGV4dGVuZGVkIHllYXIKKyAgICAgKiBAcGFyYW0gbSB0aGUgMC1iYXNlZCBtb250aCBudW1iZXIKKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgZ2l2ZW4gbW9udGgKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBncmVnb3JpYW5Nb250aExlbmd0aChpbnQgeSwgaW50IG0pIHsKKyAgICAgICAgcmV0dXJuIEdSRUdPUklBTl9NT05USF9DT1VOVFttXVtpc0dyZWdvcmlhbkxlYXBZZWFyKHkpPzE6MF07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBsZW5ndGggb2YgYSBwcmV2aW91cyBtb250aCBvZiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLgorICAgICAqIEBwYXJhbSB5IHRoZSBleHRlbmRlZCB5ZWFyCisgICAgICogQHBhcmFtIG0gdGhlIDAtYmFzZWQgbW9udGggbnVtYmVyCisgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIG1vbnRoIHByZXZpb3VzIHRvIHRoZSBnaXZlbiBtb250aAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IGdyZWdvcmlhblByZXZpb3VzTW9udGhMZW5ndGgoaW50IHksIGludCBtKSB7CisgICAgICAgIHJldHVybiAobSA+IDApID8gZ3JlZ29yaWFuTW9udGhMZW5ndGgoeSwgbS0xKSA6IDMxOworICAgIH0KKworICAgIC8qKgorICAgICAqIERpdmlkZSB0d28gbG9uZyBpbnRlZ2VycywgcmV0dXJuaW5nIHRoZSBmbG9vciBvZiB0aGUgcXVvdGllbnQuCisgICAgICogPHA+CisgICAgICogVW5saWtlIHRoZSBidWlsdC1pbiBkaXZpc2lvbiwgdGhpcyBpcyBtYXRoZW1hdGljYWxseSB3ZWxsLWJlaGF2ZWQuCisgICAgICogRS5nLiwgPGNvZGU+LTEvNDwvY29kZT4gPT4gMAorICAgICAqIGJ1dCA8Y29kZT5mbG9vckRpdmlkZSgtMSw0KTwvY29kZT4gPT4gLTEuCisgICAgICogQHBhcmFtIG51bWVyYXRvciB0aGUgbnVtZXJhdG9yCisgICAgICogQHBhcmFtIGRlbm9taW5hdG9yIGEgZGl2aXNvciB3aGljaCBtdXN0IGJlID4gMAorICAgICAqIEByZXR1cm4gdGhlIGZsb29yIG9mIHRoZSBxdW90aWVudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgZmxvb3JEaXZpZGUobG9uZyBudW1lcmF0b3IsIGxvbmcgZGVub21pbmF0b3IpIHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBjb21wdXRhdGlvbiBpbiBvcmRlciB0byBoYW5kbGUKKyAgICAgICAgLy8gYSBudW1lcmF0b3Igb2YgTG9uZy5NSU5fVkFMVUUgY29ycmVjdGx5CisgICAgICAgIHJldHVybiAobnVtZXJhdG9yID49IDApID8KKyAgICAgICAgICAgIG51bWVyYXRvciAvIGRlbm9taW5hdG9yIDoKKyAgICAgICAgICAgICgobnVtZXJhdG9yICsgMSkgLyBkZW5vbWluYXRvcikgLSAxOworICAgIH0KKworICAgIC8qKgorICAgICAqIERpdmlkZSB0d28gaW50ZWdlcnMsIHJldHVybmluZyB0aGUgZmxvb3Igb2YgdGhlIHF1b3RpZW50LgorICAgICAqIDxwPgorICAgICAqIFVubGlrZSB0aGUgYnVpbHQtaW4gZGl2aXNpb24sIHRoaXMgaXMgbWF0aGVtYXRpY2FsbHkgd2VsbC1iZWhhdmVkLgorICAgICAqIEUuZy4sIDxjb2RlPi0xLzQ8L2NvZGU+ID0+IDAKKyAgICAgKiBidXQgPGNvZGU+Zmxvb3JEaXZpZGUoLTEsNCk8L2NvZGU+ID0+IC0xLgorICAgICAqIEBwYXJhbSBudW1lcmF0b3IgdGhlIG51bWVyYXRvcgorICAgICAqIEBwYXJhbSBkZW5vbWluYXRvciBhIGRpdmlzb3Igd2hpY2ggbXVzdCBiZSA+IDAKKyAgICAgKiBAcmV0dXJuIHRoZSBmbG9vciBvZiB0aGUgcXVvdGllbnQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgZmxvb3JEaXZpZGUoaW50IG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9yKSB7CisgICAgICAgIC8vIFdlIGRvIHRoaXMgY29tcHV0YXRpb24gaW4gb3JkZXIgdG8gaGFuZGxlCisgICAgICAgIC8vIGEgbnVtZXJhdG9yIG9mIEludGVnZXIuTUlOX1ZBTFVFIGNvcnJlY3RseQorICAgICAgICByZXR1cm4gKG51bWVyYXRvciA+PSAwKSA/CisgICAgICAgICAgICBudW1lcmF0b3IgLyBkZW5vbWluYXRvciA6CisgICAgICAgICAgICAoKG51bWVyYXRvciArIDEpIC8gZGVub21pbmF0b3IpIC0gMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEaXZpZGUgdHdvIGludGVnZXJzLCByZXR1cm5pbmcgdGhlIGZsb29yIG9mIHRoZSBxdW90aWVudCwgYW5kCisgICAgICogdGhlIG1vZHVsdXMgcmVtYWluZGVyLgorICAgICAqIDxwPgorICAgICAqIFVubGlrZSB0aGUgYnVpbHQtaW4gZGl2aXNpb24sIHRoaXMgaXMgbWF0aGVtYXRpY2FsbHkgd2VsbC1iZWhhdmVkLgorICAgICAqIEUuZy4sIDxjb2RlPi0xLzQ8L2NvZGU+ID0+IDAgYW5kIDxjb2RlPi0xJTQ8L2NvZGU+ID0+IC0xLAorICAgICAqIGJ1dCA8Y29kZT5mbG9vckRpdmlkZSgtMSw0KTwvY29kZT4gPT4gLTEgd2l0aCA8Y29kZT5yZW1haW5kZXJbMF08L2NvZGU+ID0+IDMuCisgICAgICogQHBhcmFtIG51bWVyYXRvciB0aGUgbnVtZXJhdG9yCisgICAgICogQHBhcmFtIGRlbm9taW5hdG9yIGEgZGl2aXNvciB3aGljaCBtdXN0IGJlID4gMAorICAgICAqIEBwYXJhbSByZW1haW5kZXIgYW4gYXJyYXkgb2YgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gd2hpY2ggdGhlIHZhbHVlCisgICAgICogPGNvZGU+bnVtZXJhdG9yIG1vZCBkZW5vbWluYXRvcjwvY29kZT4gaXMgcmV0dXJuZWQuIFVubGlrZSA8Y29kZT5udW1lcmF0b3IKKyAgICAgKiAlIGRlbm9taW5hdG9yPC9jb2RlPiwgdGhpcyB3aWxsIGFsd2F5cyBiZSBub24tbmVnYXRpdmUuCisgICAgICogQHJldHVybiB0aGUgZmxvb3Igb2YgdGhlIHF1b3RpZW50LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IGZsb29yRGl2aWRlKGludCBudW1lcmF0b3IsIGludCBkZW5vbWluYXRvciwgaW50W10gcmVtYWluZGVyKSB7CisgICAgICAgIGlmIChudW1lcmF0b3IgPj0gMCkgeworICAgICAgICAgICAgcmVtYWluZGVyWzBdID0gbnVtZXJhdG9yICUgZGVub21pbmF0b3I7CisgICAgICAgICAgICByZXR1cm4gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7CisgICAgICAgIH0KKwlpbnQgcXVvdGllbnQgPSAoKG51bWVyYXRvciArIDEpIC8gZGVub21pbmF0b3IpIC0gMTsKKyAgICAgICAgcmVtYWluZGVyWzBdID0gbnVtZXJhdG9yIC0gKHF1b3RpZW50ICogZGVub21pbmF0b3IpOworICAgICAgICByZXR1cm4gcXVvdGllbnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGl2aWRlIHR3byBpbnRlZ2VycywgcmV0dXJuaW5nIHRoZSBmbG9vciBvZiB0aGUgcXVvdGllbnQsIGFuZAorICAgICAqIHRoZSBtb2R1bHVzIHJlbWFpbmRlci4KKyAgICAgKiA8cD4KKyAgICAgKiBVbmxpa2UgdGhlIGJ1aWx0LWluIGRpdmlzaW9uLCB0aGlzIGlzIG1hdGhlbWF0aWNhbGx5IHdlbGwtYmVoYXZlZC4KKyAgICAgKiBFLmcuLCA8Y29kZT4tMS80PC9jb2RlPiA9PiAwIGFuZCA8Y29kZT4tMSU0PC9jb2RlPiA9PiAtMSwKKyAgICAgKiBidXQgPGNvZGU+Zmxvb3JEaXZpZGUoLTEsNCk8L2NvZGU+ID0+IC0xIHdpdGggPGNvZGU+cmVtYWluZGVyWzBdPC9jb2RlPiA9PiAzLgorICAgICAqIEBwYXJhbSBudW1lcmF0b3IgdGhlIG51bWVyYXRvcgorICAgICAqIEBwYXJhbSBkZW5vbWluYXRvciBhIGRpdmlzb3Igd2hpY2ggbXVzdCBiZSA+IDAKKyAgICAgKiBAcGFyYW0gcmVtYWluZGVyIGFuIGFycmF5IG9mIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHdoaWNoIHRoZSB2YWx1ZQorICAgICAqIDxjb2RlPm51bWVyYXRvciBtb2QgZGVub21pbmF0b3I8L2NvZGU+IGlzIHJldHVybmVkLiBVbmxpa2UgPGNvZGU+bnVtZXJhdG9yCisgICAgICogJSBkZW5vbWluYXRvcjwvY29kZT4sIHRoaXMgd2lsbCBhbHdheXMgYmUgbm9uLW5lZ2F0aXZlLgorICAgICAqIEByZXR1cm4gdGhlIGZsb29yIG9mIHRoZSBxdW90aWVudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBmbG9vckRpdmlkZShsb25nIG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9yLCBpbnRbXSByZW1haW5kZXIpIHsKKyAgICAgICAgaWYgKG51bWVyYXRvciA+PSAwKSB7CisgICAgICAgICAgICByZW1haW5kZXJbMF0gPSAoaW50KShudW1lcmF0b3IgJSBkZW5vbWluYXRvcik7CisgICAgICAgICAgICByZXR1cm4gKGludCkobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpOworICAgICAgICB9CisgICAgICAgIGludCBxdW90aWVudCA9IChpbnQpKCgobnVtZXJhdG9yICsgMSkgLyBkZW5vbWluYXRvcikgLSAxKTsKKyAgICAgICAgcmVtYWluZGVyWzBdID0gKGludCkobnVtZXJhdG9yIC0gKHF1b3RpZW50ICogZGVub21pbmF0b3IpKTsKKyAgICAgICAgcmV0dXJuIHF1b3RpZW50OworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEZJRUxEX05BTUUgPSB7CisgICAgICAgICJFUkEiLCAiWUVBUiIsICJNT05USCIsICJXRUVLX09GX1lFQVIiLCAiV0VFS19PRl9NT05USCIsCisgICAgICAgICJEQVlfT0ZfTU9OVEgiLCAiREFZX09GX1lFQVIiLCAiREFZX09GX1dFRUsiLAorICAgICAgICAiREFZX09GX1dFRUtfSU5fTU9OVEgiLCAiQU1fUE0iLCAiSE9VUiIsICJIT1VSX09GX0RBWSIsCisgICAgICAgICJNSU5VVEUiLCAiU0VDT05EIiwgIk1JTExJU0VDT05EIiwgIlpPTkVfT0ZGU0VUIiwKKyAgICAgICAgIkRTVF9PRkZTRVQiLCAiWUVBUl9XT1kiLCAiRE9XX0xPQ0FMIiwgIkVYVEVOREVEX1lFQVIiLAorICAgICAgICAiSlVMSUFOX0RBWSIsICJNSUxMSVNFQ09ORFNfSU5fREFZIiwKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgc3RyaW5nIG5hbWUgZm9yIGEgZmllbGQsIGZvciBkZWJ1Z2dpbmcgYW5kIGV4Y2VwdGlvbnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZyBmaWVsZE5hbWUoaW50IGZpZWxkKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gRklFTERfTkFNRVtmaWVsZF07CisgICAgICAgIH0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gIkZpZWxkICIgKyBmaWVsZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIHRpbWUgYXMgbWlsbGlzZWNvbmRzIHRvIEp1bGlhbiBkYXkuCisgICAgICogQHBhcmFtIG1pbGxpcyB0aGUgZ2l2ZW4gbWlsbGlzZWNvbmRzLgorICAgICAqIEByZXR1cm4gdGhlIEp1bGlhbiBkYXkgbnVtYmVyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IG1pbGxpc1RvSnVsaWFuRGF5KGxvbmcgbWlsbGlzKSB7CisgICAgICAgIHJldHVybiAoaW50KSAoRVBPQ0hfSlVMSUFOX0RBWSArIGZsb29yRGl2aWRlKG1pbGxpcywgT05FX0RBWSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIEp1bGlhbiBkYXkgdG8gdGltZSBhcyBtaWxsaXNlY29uZHMuCisgICAgICogQHBhcmFtIGp1bGlhbiB0aGUgZ2l2ZW4gSnVsaWFuIGRheSBudW1iZXIuCisgICAgICogQHJldHVybiB0aW1lIGFzIG1pbGxpc2Vjb25kcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcganVsaWFuRGF5VG9NaWxsaXMoaW50IGp1bGlhbikgeworICAgICAgICByZXR1cm4gKGp1bGlhbiAtIEVQT0NIX0pVTElBTl9EQVkpICogT05FX0RBWTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGRheSBvZiB3ZWVrLCBmcm9tIFNVTkRBWSB0byBTQVRVUkRBWSwgZ2l2ZW4gYSBKdWxpYW4gZGF5LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IGp1bGlhbkRheVRvRGF5T2ZXZWVrKGludCBqdWxpYW4pIHsKKyAgICAgICAgLy8gSWYganVsaWFuIGlzIG5lZ2F0aXZlLCB0aGVuIGp1bGlhbiU3IHdpbGwgYmUgbmVnYXRpdmUsIHNvIHdlIGFkanVzdAorICAgICAgICAvLyBhY2NvcmRpbmdseS4gIEp1bGlhbiBkYXkgMCBpcyBNb25kYXkuCisgICAgICAgIGludCBkYXlPZldlZWsgPSAoanVsaWFuICsgTU9OREFZKSAlIDc7CisgICAgICAgIGlmIChkYXlPZldlZWsgPCBTVU5EQVkpIHsKKyAgICAgICAgICAgIGRheU9mV2VlayArPSA3OworICAgICAgICB9CisgICAgICAgIHJldHVybiBkYXlPZldlZWs7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjdXJyZW50IG1pbGxpc2Vjb25kcyB3aXRob3V0IHJlY29tcHV0aW5nLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBmaW5hbCBsb25nIGludGVybmFsR2V0VGltZUluTWlsbGlzKCkgeworICAgICAgICByZXR1cm4gdGltZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9DYWxlbmRhckFzdHJvbm9tZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0NhbGVuZGFyQXN0cm9ub21lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiOWQ2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9DYWxlbmRhckFzdHJvbm9tZXIuamF2YQpAQCAtMCwwICsxLDEyOTggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL0F0dGljL0NhbGVuZGFyQXN0cm9ub21lci5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzA1IDAxOjI1OjEwICQgCisgKiAkUmV2aXNpb246IDEuMTAgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiA8Y29kZT5DYWxlbmRhckFzdHJvbm9tZXI8L2NvZGU+IGlzIGEgY2xhc3MgdGhhdCBjYW4gcGVyZm9ybSB0aGUgY2FsY3VsYXRpb25zIHRvCisgKiBkZXRlcm1pbmUgdGhlIHBvc2l0aW9ucyBvZiB0aGUgc3VuIGFuZCBtb29uLCB0aGUgdGltZSBvZiBzdW5yaXNlIGFuZAorICogc3Vuc2V0LCBhbmQgb3RoZXIgYXN0cm9ub215LXJlbGF0ZWQgZGF0YS4gIFRoZSBjYWxjdWxhdGlvbnMgaXQgcGVyZm9ybXMKKyAqIGFyZSBpbiBzb21lIGNhc2VzIHF1aXRlIGNvbXBsaWNhdGVkLCBhbmQgdGhpcyB1dGlsaXR5IGNsYXNzIHNhdmVzIHlvdQorICogdGhlIHRyb3VibGUgb2Ygd29ycnlpbmcgYWJvdXQgdGhlbS4KKyAqIDxwPgorICogVGhlIG1lYXN1cmVtZW50IG9mIHRpbWUgaXMgYSB2ZXJ5IGltcG9ydGFudCBwYXJ0IG9mIGFzdHJvbm9teS4gIEJlY2F1c2UKKyAqIGFzdHJvbm9taWNhbCBib2RpZXMgYXJlIGNvbnN0YW50bHkgaW4gbW90aW9uLCBvYnNlcnZhdGlvbnMgYXJlIG9ubHkgdmFsaWQKKyAqIGF0IGEgZ2l2ZW4gbW9tZW50IGluIHRpbWUuICBBY2NvcmRpbmdseSwgZWFjaCA8Y29kZT5DYWxlbmRhckFzdHJvbm9tZXI8L2NvZGU+CisgKiBvYmplY3QgaGFzIGEgPGNvZGU+dGltZTwvY29kZT4gcHJvcGVydHkgdGhhdCBkZXRlcm1pbmVzIHRoZSBkYXRlCisgKiBhbmQgdGltZSBmb3Igd2hpY2ggaXRzIGNhbGN1bGF0aW9ucyBhcmUgcGVyZm9ybWVkLiAgWW91IGNhbiBzZXQgYW5kCisgKiByZXRyaWV2ZSB0aGlzIHByb3BlcnR5IHdpdGgge0BsaW5rICNzZXREYXRlIHNldERhdGV9LCB7QGxpbmsgI2dldERhdGUgZ2V0RGF0ZX0KKyAqIGFuZCByZWxhdGVkIG1ldGhvZHMuCisgKiA8cD4KKyAqIEFsbW9zdCBhbGwgb2YgdGhlIGNhbGN1bGF0aW9ucyBwZXJmb3JtZWQgYnkgdGhpcyBjbGFzcywgb3IgYnkgYW55CisgKiBhc3Ryb25vbWVyLCBhcmUgYXBwcm94aW1hdGlvbnMgdG8gdmFyaW91cyBkZWdyZWVzIG9mIGFjY3VyYWN5LiAgVGhlCisgKiBjYWxjdWxhdGlvbnMgaW4gdGhpcyBjbGFzcyBhcmUgbW9zdGx5IG1vZGVsbGVkIGFmdGVyIHRob3NlIGRlc2NyaWJlZAorICogaW4gdGhlIGJvb2sKKyAqIDxhIGhyZWY9Imh0dHA6Ly93d3cuYW1hem9uLmNvbS9leGVjL29iaWRvcy9JU0JOPTA1MjEzNTY5OTciIHRhcmdldD0iX3RvcCI+CisgKiBQcmFjdGljYWwgQXN0cm9ub215IFdpdGggWW91ciBDYWxjdWxhdG9yPC9hPiwgYnkgUGV0ZXIgSi4KKyAqIER1ZmZldHQtU21pdGgsIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzLCAxOTkwLiAgVGhpcyBpcyBhbiBleGNlbGxlbnQKKyAqIGJvb2ssIGFuZCBpZiB5b3Ugd2FudCBhIGdyZWF0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgY2FsY3VsYXRpb25zCisgKiBhcmUgcGVyZm9ybWVkIGl0IGEgdmVyeSBnb29kLCByZWFkYWJsZSBzdGFydGluZyBwb2ludC4KKyAqIDxwPgorICogPHN0cm9uZz5XQVJOSU5HOjwvc3Ryb25nPiBUaGlzIGNsYXNzIGlzIHZlcnkgZWFybHkgaW4gaXRzIGRldmVsb3BtZW50LCBhbmQKKyAqIGl0IGlzIGhpZ2hseSBsaWtlbHkgdGhhdCBpdHMgQVBJIHdpbGwgY2hhbmdlIHRvIHNvbWUgZGVncmVlIGluIHRoZSBmdXR1cmUuCisgKiBBdCB0aGUgbW9tZW50LCBpdCBiYXNpY2FsbHkgZG9lcyBqdXN0IGVub3VnaCB0byBzdXBwb3J0IHtAbGluayBJc2xhbWljQ2FsZW5kYXJ9CisgKiBhbmQge0BsaW5rIENoaW5lc2VDYWxlbmRhcn0uCisgKgorICogQGF1dGhvciBMYXVyYSBXZXJuZXIKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitwdWJsaWMgY2xhc3MgQ2FsZW5kYXJBc3Ryb25vbWVyIHsKKyAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBBc3Ryb25vbWljYWwgY29uc3RhbnRzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIHN0YW5kYXJkIGhvdXJzIGluIG9uZSBzaWRlcmVhbCBkYXkuCisgICAgICogQXBwcm94aW1hdGVseSAyNC45My4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBTSURFUkVBTF9EQVkgPSAyMy45MzQ0Njk2MDAyNzsKKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIHNpZGVyZWFsIGhvdXJzIGluIG9uZSBtZWFuIHNvbGFyIGRheS4KKyAgICAgKiBBcHByb3hpbWF0ZWx5IDI0LjA3LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFNPTEFSX0RBWSA9ICAyNC4wNjU3MDk4MTY7CisgICAgCisgICAgLyoqCisgICAgICogVGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIHNvbGFyIGRheXMgZnJvbSBvbmUgbmV3IG1vb24gdG8gdGhlIG5leHQuICBUaGlzIGlzIHRoZSB0aW1lCisgICAgICogaXQgdGFrZXMgZm9yIHRoZSBtb29uIHRvIHJldHVybiB0aGUgc2FtZSBlY2xpcHRpYyBsb25naXR1ZGUgYXMgdGhlIHN1bi4KKyAgICAgKiBJdCBpcyBsb25nZXIgdGhhbiB0aGUgc2lkZXJlYWwgbW9udGggYmVjYXVzZSB0aGUgc3VuJ3MgbG9uZ2l0dWRlIGluY3JlYXNlcworICAgICAqIGR1cmluZyB0aGUgeWVhciBkdWUgdG8gdGhlIHJldm9sdXRpb24gb2YgdGhlIGVhcnRoIGFyb3VuZCB0aGUgc3VuLgorICAgICAqIEFwcHJveGltYXRlbHkgMjkuNTMuCisgICAgICoKKyAgICAgKiBAc2VlICNTSURFUkVBTF9NT05USAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFNZTk9ESUNfTU9OVEggPSAyOS41MzA1ODg4NTM7CisgICAgCisgICAgLyoqCisgICAgICogVGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGRheXMgaXQgdGFrZXMKKyAgICAgKiBmb3IgdGhlIG1vb24gdG8gcmV0dXJuIHRvIHRoZSBzYW1lIGVjbGlwdGljIGxvbmdpdHVkZSByZWxhdGl2ZSB0byB0aGUKKyAgICAgKiBzdGVsbGFyIGJhY2tncm91bmQuICBUaGlzIGlzIHJlZmVycmVkIHRvIGFzIHRoZSBzaWRlcmVhbCBtb250aC4KKyAgICAgKiBJdCBpcyBzaG9ydGVyIHRoYW4gdGhlIHN5bm9kaWMgbW9udGggZHVlIHRvCisgICAgICogdGhlIHJldm9sdXRpb24gb2YgdGhlIGVhcnRoIGFyb3VuZCB0aGUgc3VuLgorICAgICAqIEFwcHJveGltYXRlbHkgMjcuMzIuCisgICAgICoKKyAgICAgKiBAc2VlICNTWU5PRElDX01PTlRICisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgU0lERVJFQUxfTU9OVEggPSAyNy4zMjE2NjsKKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGUgYXZlcmFnZSBudW1iZXIgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiBzdWNjZXNzaXZlIHZlcm5hbCBlcXVpbm94ZXMuCisgICAgICogRHVlIHRvIHRoZSBwcmVjZXNzaW9uIG9mIHRoZSBlYXJ0aCdzCisgICAgICogYXhpcywgdGhpcyBpcyBub3QgcHJlY2lzZWx5IHRoZSBzYW1lIGFzIHRoZSBzaWRlcmVhbCB5ZWFyLgorICAgICAqIEFwcHJveGltYXRlbHkgMzY1LjI0CisgICAgICoKKyAgICAgKiBAc2VlICNTSURFUkVBTF9ZRUFSCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJPUElDQUxfWUVBUiA9IDM2NS4yNDIxOTE7CisgICAgCisgICAgLyoqCisgICAgICogVGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGRheXMgaXQgdGFrZXMKKyAgICAgKiBmb3IgdGhlIHN1biB0byByZXR1cm4gdG8gdGhlIHNhbWUgcG9zaXRpb24gYWdhaW5zdCB0aGUgZml4ZWQgc3RlbGxhcgorICAgICAqIGJhY2tncm91bmQuICBUaGlzIGlzIHRoZSBkdXJhdGlvbiBvZiBvbmUgb3JiaXQgb2YgdGhlIGVhcnRoIGFib3V0IHRoZSBzdW4KKyAgICAgKiBhcyBpdCB3b3VsZCBhcHBlYXIgdG8gYW4gb3V0c2lkZSBvYnNlcnZlci4KKyAgICAgKiBEdWUgdG8gdGhlIHByZWNlc3Npb24gb2YgdGhlIGVhcnRoJ3MKKyAgICAgKiBheGlzLCB0aGlzIGlzIG5vdCBwcmVjaXNlbHkgdGhlIHNhbWUgYXMgdGhlIHRyb3BpY2FsIHllYXIuCisgICAgICogQXBwcm94aW1hdGVseSAzNjUuMjUuCisgICAgICoKKyAgICAgKiBAc2VlICNUUk9QSUNBTF9ZRUFSCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgU0lERVJFQUxfWUVBUiA9IDM2NS4yNTYzNjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFRpbWUtcmVsYXRlZCBjb25zdGFudHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKiAKKyAgICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBvbmUgc2Vjb25kLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCAgU0VDT05EX01TID0gMTAwMDsKKworICAgIC8qKiAKKyAgICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBvbmUgbWludXRlLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCAgTUlOVVRFX01TID0gNjAqU0VDT05EX01TOworCisgICAgLyoqIAorICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIG9uZSBob3VyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCAgSE9VUl9NUyAgID0gNjAqTUlOVVRFX01TOworCisgICAgLyoqIAorICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIG9uZSBkYXkuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBEQVlfTVMgICAgPSAyNCpIT1VSX01TOworCisgICAgLyoqCisgICAgICogVGhlIHN0YXJ0IG9mIHRoZSBqdWxpYW4gZGF5IG51bWJlcmluZyBzY2hlbWUgdXNlZCBieSBhc3Ryb25vbWVycywgd2hpY2gKKyAgICAgKiBpcyAxLzEvNDcxMyBCQyAoSnVsaWFuKSwgMTI6MDAgR01ULiAgVGhpcyBpcyBnaXZlbiBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcworICAgICAqIHNpbmNlIDEvMS8xOTcwIEFEIChHcmVnb3JpYW4pLCBhIG5lZ2F0aXZlIG51bWJlci4KKyAgICAgKiBOb3RlIHRoYXQganVsaWFuIGRheSBudW1iZXJzIGFuZAorICAgICAqIHRoZSBKdWxpYW4gY2FsZW5kYXIgYXJlIDxlbT5ub3Q8L2VtPiB0aGUgc2FtZSB0aGluZy4gIEFsc28gbm90ZSB0aGF0CisgICAgICoganVsaWFuIGRheXMgc3RhcnQgYXQgPGVtPm5vb248L2VtPiwgbm90IG1pZG5pZ2h0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBKVUxJQU5fRVBPQ0hfTVMgPSAtMjEwODY2NzYwMDAwMDAwTDsKKyAgICAKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEFzc29ydGVkIHByaXZhdGUgZGF0YSB1c2VkIGZvciBjb252ZXJzaW9ucworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gTXkgb3duIGNvcGllcyBvZiB0aGVzZSBzbyBjb21waWxlcnMgYXJlIG1vcmUgbGlrZWx5IHRvIG9wdGltaXplIHRoZW0gYXdheQorICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIGRvdWJsZSBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgZG91YmxlIFBJMiA9IFBJICogMi4wOworCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgZG91YmxlIEhPVVJfUkFEID0gUEkgLyAxMjsgICAgICAgIC8vIGhvdXJzIC0+IHJhZGlhbnMKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBkb3VibGUgUkFEX0hPVVIgPSAxMiAvIFBJOyAgICAgICAgLy8gcmFkaWFucyAtPiBob3VycworICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIGRvdWJsZSBERUdfUkFEICA9IFBJIC8gMTgwOyAgICAgICAgLy8gZGVncmVlcyAtPiByYWRpYW5zCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgZG91YmxlIFJBRF9ERUcgID0gMTgwIC8gUEk7ICAgICAgICAvLyByYWRpYW5zIC0+IGRlZ3JlZXMKKyAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDb25zdHJ1Y3RvcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIG5ldyA8Y29kZT5DYWxlbmRhckFzdHJvbm9tZXI8L2NvZGU+IG9iamVjdCB0aGF0IGlzIGluaXRpYWxpemVkIHRvCisgICAgICogdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsZW5kYXJBc3Ryb25vbWVyKCkgeworICAgICAgICB0aGlzKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbmV3IDxjb2RlPkNhbGVuZGFyQXN0cm9ub21lcjwvY29kZT4gb2JqZWN0IHRoYXQgaXMgaW5pdGlhbGl6ZWQgdG8KKyAgICAgKiB0aGUgc3BlY2lmaWVkIGRhdGUgYW5kIHRpbWUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIENhbGVuZGFyQXN0cm9ub21lcihEYXRlIGQpIHsKKyAgICAgICAgdGhpcyhkLmdldFRpbWUoKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIG5ldyA8Y29kZT5DYWxlbmRhckFzdHJvbm9tZXI8L2NvZGU+IG9iamVjdCB0aGF0IGlzIGluaXRpYWxpemVkIHRvCisgICAgICogdGhlIHNwZWNpZmllZCB0aW1lLiAgVGhlIHRpbWUgaXMgZXhwcmVzc2VkIGFzIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZQorICAgICAqIEphbnVhcnkgMSwgMTk3MCBBRCAoR3JlZ29yaWFuKS4KKyAgICAgKgorICAgICAqIEBzZWUgamF2YS51dGlsLkRhdGUjZ2V0VGltZSgpCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIENhbGVuZGFyQXN0cm9ub21lcihsb25nIGFUaW1lKSB7CisgICAgICAgIHRpbWUgPSBhVGltZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbmV3IDxjb2RlPkNhbGVuZGFyQXN0cm9ub21lcjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIGdpdmVuCisgICAgICogbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZS4gIFRoZSBvYmplY3QncyB0aW1lIGlzIHNldCB0byB0aGUgY3VycmVudAorICAgICAqIGRhdGUgYW5kIHRpbWUuCisgICAgICogPHA+CisgICAgICogQHBhcmFtIGxvbmdpdHVkZSBUaGUgZGVzaXJlZCBsb25naXR1ZGUsIGluIDxlbT5kZWdyZWVzPC9lbT4gZWFzdCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgdGhlIEdyZWVud2ljaCBtZXJpZGlhbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsYXRpdHVkZSAgVGhlIGRlc2lyZWQgbGF0aXR1ZGUsIGluIDxlbT5kZWdyZWVzPC9lbT4uICBQb3NpdGl2ZQorICAgICAqICAgICAgICAgICAgICAgICAgdmFsdWVzIHNpZ25pZnkgTm9ydGgsIG5lZ2F0aXZlIFNvdXRoLgorICAgICAqCisgICAgICogQHNlZSBqYXZhLnV0aWwuRGF0ZSNnZXRUaW1lKCkKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsZW5kYXJBc3Ryb25vbWVyKGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBsYXRpdHVkZSkgeworICAgICAgICB0aGlzKCk7CisgICAgICAgIGZMb25naXR1ZGUgPSBub3JtUEkobG9uZ2l0dWRlICogREVHX1JBRCk7CisgICAgICAgIGZMYXRpdHVkZSAgPSBub3JtUEkobGF0aXR1ZGUgICogREVHX1JBRCk7CisgICAgICAgIGZHbXRPZmZzZXQgPSAobG9uZykoZkxvbmdpdHVkZSAqIDI0ICogSE9VUl9NUyAvIFBJMik7CisgICAgfQorICAgIAorICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFRpbWUgYW5kIGRhdGUgZ2V0dGVycyBhbmQgc2V0dGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIG9mIHRoaXMgPGNvZGU+Q2FsZW5kYXJBc3Ryb25vbWVyPC9jb2RlPiBvYmplY3QuICBBbGwKKyAgICAgKiBhc3Ryb25vbWljYWwgY2FsY3VsYXRpb25zIGFyZSBwZXJmb3JtZWQgYmFzZWQgb24gdGhpcyB0aW1lIHNldHRpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYVRpbWUgdGhlIGRhdGUgYW5kIHRpbWUsIGV4cHJlc3NlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZQorICAgICAqICAgICAgICAgICAgICAxLzEvMTk3MCAwOjAwIEdNVCAoR3JlZ29yaWFuKS4KKyAgICAgKgorICAgICAqIEBzZWUgI3NldERhdGUKKyAgICAgKiBAc2VlICNnZXRUaW1lCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGltZShsb25nIGFUaW1lKSB7CisgICAgICAgIHRpbWUgPSBhVGltZTsKKyAgICAgICAgY2xlYXJDYWNoZSgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBvZiB0aGlzIDxjb2RlPkNhbGVuZGFyQXN0cm9ub21lcjwvY29kZT4gb2JqZWN0LiAgQWxsCisgICAgICogYXN0cm9ub21pY2FsIGNhbGN1bGF0aW9ucyBhcmUgcGVyZm9ybWVkIGJhc2VkIG9uIHRoaXMgdGltZSBzZXR0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtIGFUaW1lIHRoZSB0aW1lIGFuZCBkYXRlLCBleHByZXNzZWQgYXMgYSA8Y29kZT5EYXRlPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRUaW1lCisgICAgICogQHNlZSAjZ2V0RGF0ZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldERhdGUoRGF0ZSBkYXRlKSB7CisgICAgICAgIHNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBvZiB0aGlzIDxjb2RlPkNhbGVuZGFyQXN0cm9ub21lcjwvY29kZT4gb2JqZWN0LiAgQWxsCisgICAgICogYXN0cm9ub21pY2FsIGNhbGN1bGF0aW9ucyBhcmUgcGVyZm9ybWVkIGJhc2VkIG9uIHRoaXMgdGltZSBzZXR0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtIGpkbiAgIHRoZSBkZXNpcmVkIHRpbWUsIGV4cHJlc3NlZCBhcyBhICJqdWxpYW4gZGF5IG51bWJlciIsCisgICAgICogICAgICAgICAgICAgIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgZWxhcHNlZCBkYXlzIHNpbmNlIAorICAgICAqICAgICAgICAgICAgICAxLzEvNDcxMyBCQyAoSnVsaWFuKSwgMTI6MDAgR01ULiAgTm90ZSB0aGF0IGp1bGlhbiBkYXkKKyAgICAgKiAgICAgICAgICAgICAgbnVtYmVycyBzdGFydCBhdCA8ZW0+bm9vbjwvZW0+LiAgVG8gZ2V0IHRoZSBqZG4gZm9yCisgICAgICogICAgICAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIG1pZG5pZ2h0LCBzdWJ0cmFjdCAwLjUuCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRKdWxpYW5EYXkKKyAgICAgKiBAc2VlICNKVUxJQU5fRVBPQ0hfTVMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRKdWxpYW5EYXkoZG91YmxlIGpkbikgeworICAgICAgICB0aW1lID0gKGxvbmcpKGpkbiAqIERBWV9NUykgKyBKVUxJQU5fRVBPQ0hfTVM7CisgICAgICAgIGNsZWFyQ2FjaGUoKTsKKyAgICAgICAganVsaWFuRGF5ID0gamRuOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBvZiB0aGlzIDxjb2RlPkNhbGVuZGFyQXN0cm9ub21lcjwvY29kZT4gb2JqZWN0LAorICAgICAqIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlCisgICAgICogMS8xLzE5NzAgQUQgMDowMCBHTVQgKEdyZWdvcmlhbikuCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRUaW1lCisgICAgICogQHNlZSAjZ2V0RGF0ZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBsb25nIGdldFRpbWUoKSB7CisgICAgICAgIHJldHVybiB0aW1lOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBvZiB0aGlzIDxjb2RlPkNhbGVuZGFyQXN0cm9ub21lcjwvY29kZT4gb2JqZWN0LAorICAgICAqIHJlcHJlc2VudGVkIGFzIGEgPGNvZGU+RGF0ZTwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHNlZSAjc2V0RGF0ZQorICAgICAqIEBzZWUgI2dldFRpbWUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgRGF0ZSBnZXREYXRlKCkgeworICAgICAgICByZXR1cm4gbmV3IERhdGUodGltZSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VycmVudCB0aW1lIG9mIHRoaXMgPGNvZGU+Q2FsZW5kYXJBc3Ryb25vbWVyPC9jb2RlPiBvYmplY3QsCisgICAgICogZXhwcmVzc2VkIGFzIGEgImp1bGlhbiBkYXkgbnVtYmVyIiwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiBlbGFwc2VkCisgICAgICogZGF5cyBzaW5jZSAxLzEvNDcxMyBCQyAoSnVsaWFuKSwgMTI6MDAgR01ULgorICAgICAqCisgICAgICogQHNlZSAjc2V0SnVsaWFuRGF5CisgICAgICogQHNlZSAjSlVMSUFOX0VQT0NIX01TCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSBnZXRKdWxpYW5EYXkoKSB7CisgICAgICAgIGlmIChqdWxpYW5EYXkgPT0gSU5WQUxJRCkgeworICAgICAgICAgICAganVsaWFuRGF5ID0gKGRvdWJsZSkodGltZSAtIEpVTElBTl9FUE9DSF9NUykgLyAoZG91YmxlKURBWV9NUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ganVsaWFuRGF5OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhpcyBvYmplY3QncyB0aW1lIGV4cHJlc3NlZCBpbiBqdWxpYW4gY2VudHVyaWVzOgorICAgICAqIHRoZSBudW1iZXIgb2YgY2VudHVyaWVzIGFmdGVyIDEvMS8xOTAwIEFELCAxMjowMCBHTVQKKyAgICAgKgorICAgICAqIEBzZWUgI2dldEp1bGlhbkRheQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgZ2V0SnVsaWFuQ2VudHVyeSgpIHsKKyAgICAgICAgaWYgKGp1bGlhbkNlbnR1cnkgPT0gSU5WQUxJRCkgeworICAgICAgICAgICAganVsaWFuQ2VudHVyeSA9IChnZXRKdWxpYW5EYXkoKSAtIDI0MTUwMjAuMCkgLyAzNjUyNTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ganVsaWFuQ2VudHVyeTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IEdyZWVud2ljaCBzaWRlcmVhbCB0aW1lLCBtZWFzdXJlZCBpbiBob3VycworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgZ2V0R3JlZW53aWNoU2lkZXJlYWwoKSB7CisgICAgICAgIGlmIChzaWRlcmVhbFRpbWUgPT0gSU5WQUxJRCkgeworICAgICAgICAgICAgLy8gU2VlIHBhZ2UgODYgb2YgIlByYWN0aWFsIEFzdHJvbm9teSB3aXRoIHlvdXIgQ2FsY3VsYXRvciIsCisgICAgICAgICAgICAvLyBieSBQZXRlciBEdWZmZXQtU21pdGgsIGZvciBkZXRhaWxzIG9uIHRoZSBhbGdvcml0aG0uCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkb3VibGUgVVQgPSBub3JtYWxpemUoKGRvdWJsZSl0aW1lL0hPVVJfTVMsIDI0KTsKKyAgICAgICAgCisgICAgICAgICAgICBzaWRlcmVhbFRpbWUgPSBub3JtYWxpemUoZ2V0U2lkZXJlYWxPZmZzZXQoKSArIFVUKjEuMDAyNzM3OTA5LCAyNCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNpZGVyZWFsVGltZTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBkb3VibGUgZ2V0U2lkZXJlYWxPZmZzZXQoKSB7CisgICAgICAgIGlmIChzaWRlcmVhbFQwID09IElOVkFMSUQpIHsKKyAgICAgICAgICAgIGRvdWJsZSBKRCAgPSBNYXRoLmZsb29yKGdldEp1bGlhbkRheSgpIC0gMC41KSArIDAuNTsKKyAgICAgICAgICAgIGRvdWJsZSBTICAgPSBKRCAtIDI0NTE1NDUuMDsKKyAgICAgICAgICAgIGRvdWJsZSBUICAgPSBTIC8gMzY1MjUuMDsKKyAgICAgICAgICAgIHNpZGVyZWFsVDAgPSBub3JtYWxpemUoNi42OTczNzQ1NTggKyAyNDAwLjA1MTMzNipUICsgMC4wMDAwMjU4NjIqVCpULCAyNCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNpZGVyZWFsVDA7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9jYWwgc2lkZXJlYWwgdGltZSwgbWVhc3VyZWQgaW4gaG91cnMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZG91YmxlIGdldExvY2FsU2lkZXJlYWwoKSB7CisgICAgICAgIHJldHVybiBub3JtYWxpemUoZ2V0R3JlZW53aWNoU2lkZXJlYWwoKSArIChkb3VibGUpZkdtdE9mZnNldC9IT1VSX01TLCAyNCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENvbnZlcnRzIGxvY2FsIHNpZGVyZWFsIHRpbWUgdG8gVW5pdmVyc2FsIFRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbHN0ICAgVGhlIExvY2FsIFNpZGVyZWFsIFRpbWUsIGluIGhvdXJzIHNpbmNlIHNpZGVyZWFsIG1pZG5pZ2h0CisgICAgICogICAgICAgICAgICAgIG9uIHRoaXMgb2JqZWN0J3MgY3VycmVudCBkYXRlLgorICAgICAqCisgICAgICogQHJldHVybiAgICAgIFRoZSBjb3JyZXNwb25kaW5nIFVuaXZlcnNhbCBUaW1lLCBpbiBtaWxsaXNlY29uZHMgc2luY2UKKyAgICAgKiAgICAgICAgICAgICAgMSBKYW4gMTk3MCwgR01ULiAgCisgICAgICovCisgICAgcHJpdmF0ZSBsb25nIGxzdFRvVVQoZG91YmxlIGxzdCkgeworICAgICAgICAvLyBDb252ZXJ0IHRvIGxvY2FsIG1lYW4gdGltZQorICAgICAgICBkb3VibGUgbHQgPSBub3JtYWxpemUoKGxzdCAtIGdldFNpZGVyZWFsT2Zmc2V0KCkpICogMC45OTcyNjk1NjYzLCAyNCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVuIGZpbmQgbG9jYWwgbWlkbmlnaHQgb24gdGhpcyBkYXkKKyAgICAgICAgbG9uZyBiYXNlID0gREFZX01TICogKCh0aW1lICsgZkdtdE9mZnNldCkvREFZX01TKSAtIGZHbXRPZmZzZXQ7CisgICAgICAgIAorICAgICAgICAvL291dCgiICAgIGx0ICA9IiArIGx0ICsgIiBob3VycyIpOworICAgICAgICAvL291dCgiICAgIGJhc2U9IiArIG5ldyBEYXRlKGJhc2UpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBiYXNlICsgKGxvbmcpKGx0ICogSE9VUl9NUyk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIENvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb25zLCBhbGwgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGlzIG9iamVjdAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ29udmVydCBmcm9tIGVjbGlwdGljIHRvIGVxdWF0b3JpYWwgY29vcmRpbmF0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZWNsaXB0aWMgIEEgcG9pbnQgaW4gdGhlIHNreSBpbiBlY2xpcHRpYyBjb29yZGluYXRlcy4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHBvaW50IGluIGVxdWF0b3JpYWwgY29vcmRpbmF0ZXMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIEVxdWF0b3JpYWwgZWNsaXB0aWNUb0VxdWF0b3JpYWwoRWNsaXB0aWMgZWNsaXB0aWMpCisgICAgeworICAgICAgICByZXR1cm4gZWNsaXB0aWNUb0VxdWF0b3JpYWwoZWNsaXB0aWMubG9uZ2l0dWRlLCBlY2xpcHRpYy5sYXRpdHVkZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBmcm9tIGVjbGlwdGljIHRvIGVxdWF0b3JpYWwgY29vcmRpbmF0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZWNsaXBMb25nICAgICBUaGUgZWNsaXB0aWMgbG9uZ2l0dWRlCisgICAgICogQHBhcmFtIGVjbGlwTGF0ICAgICAgVGhlIGVjbGlwdGljIGxhdGl0dWRlCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBwb2ludCBpbiBlcXVhdG9yaWFsIGNvb3JkaW5hdGVzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBFcXVhdG9yaWFsIGVjbGlwdGljVG9FcXVhdG9yaWFsKGRvdWJsZSBlY2xpcExvbmcsIGRvdWJsZSBlY2xpcExhdCkKKyAgICB7CisgICAgICAgIC8vIFNlZSBwYWdlIDQyIG9mICJQcmFjdGlhbCBBc3Ryb25vbXkgd2l0aCB5b3VyIENhbGN1bGF0b3IiLAorICAgICAgICAvLyBieSBQZXRlciBEdWZmZXQtU21pdGgsIGZvciBkZXRhaWxzIG9uIHRoZSBhbGdvcml0aG0uCisKKyAgICAgICAgZG91YmxlIG9ibGlxID0gZWNsaXB0aWNPYmxpcXVpdHkoKTsKKyAgICAgICAgZG91YmxlIHNpbkUgPSBNYXRoLnNpbihvYmxpcSk7CisgICAgICAgIGRvdWJsZSBjb3NFID0gTWF0aC5jb3Mob2JsaXEpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIHNpbkwgPSBNYXRoLnNpbihlY2xpcExvbmcpOworICAgICAgICBkb3VibGUgY29zTCA9IE1hdGguY29zKGVjbGlwTG9uZyk7CisgICAgICAgIAorICAgICAgICBkb3VibGUgc2luQiA9IE1hdGguc2luKGVjbGlwTGF0KTsKKyAgICAgICAgZG91YmxlIGNvc0IgPSBNYXRoLmNvcyhlY2xpcExhdCk7CisgICAgICAgIGRvdWJsZSB0YW5CID0gTWF0aC50YW4oZWNsaXBMYXQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5ldyBFcXVhdG9yaWFsKE1hdGguYXRhbjIoc2luTCpjb3NFIC0gdGFuQipzaW5FLCBjb3NMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFzaW4oc2luQipjb3NFICsgY29zQipzaW5FKnNpbkwpICk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBmcm9tIGVjbGlwdGljIGxvbmdpdHVkZSB0byBlcXVhdG9yaWFsIGNvb3JkaW5hdGVzLgorICAgICAqCisgICAgICogQHBhcmFtIGVjbGlwTG9uZyAgICAgVGhlIGVjbGlwdGljIGxvbmdpdHVkZQorICAgICAqCisgICAgICogQHJldHVybiAgICAgICAgICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgcG9pbnQgaW4gZXF1YXRvcmlhbCBjb29yZGluYXRlcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgRXF1YXRvcmlhbCBlY2xpcHRpY1RvRXF1YXRvcmlhbChkb3VibGUgZWNsaXBMb25nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVjbGlwdGljVG9FcXVhdG9yaWFsKGVjbGlwTG9uZywgMCk7ICAvLyBUT0RPOiBvcHRpbWl6ZQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBIb3Jpem9uIGVjbGlwdGljVG9Ib3Jpem9uKGRvdWJsZSBlY2xpcExvbmcpCisgICAgeworICAgICAgICBFcXVhdG9yaWFsIGVxdWF0b3JpYWwgPSBlY2xpcHRpY1RvRXF1YXRvcmlhbChlY2xpcExvbmcpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIEggPSBnZXRMb2NhbFNpZGVyZWFsKCkqUEkvMTIgLSBlcXVhdG9yaWFsLmFzY2Vuc2lvbjsgICAgIC8vIEhvdXItYW5nbGUKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBzaW5IID0gTWF0aC5zaW4oSCk7CisgICAgICAgIGRvdWJsZSBjb3NIID0gTWF0aC5jb3MoSCk7CisgICAgICAgIGRvdWJsZSBzaW5EID0gTWF0aC5zaW4oZXF1YXRvcmlhbC5kZWNsaW5hdGlvbik7CisgICAgICAgIGRvdWJsZSBjb3NEID0gTWF0aC5jb3MoZXF1YXRvcmlhbC5kZWNsaW5hdGlvbik7CisgICAgICAgIGRvdWJsZSBzaW5MID0gTWF0aC5zaW4oZkxhdGl0dWRlKTsKKyAgICAgICAgZG91YmxlIGNvc0wgPSBNYXRoLmNvcyhmTGF0aXR1ZGUpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIGFsdGl0dWRlID0gTWF0aC5hc2luKHNpbkQqc2luTCArIGNvc0QqY29zTCpjb3NIKTsKKyAgICAgICAgZG91YmxlIGF6aW11dGggID0gTWF0aC5hdGFuMigtY29zRCpjb3NMKnNpbkgsIHNpbkQgLSBzaW5MICogTWF0aC5zaW4oYWx0aXR1ZGUpKTsKKworICAgICAgICByZXR1cm4gbmV3IEhvcml6b24oYXppbXV0aCwgYWx0aXR1ZGUpOworICAgIH0KKworICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFRoZSBTdW4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvLworICAgIC8vIFBhcmFtZXRlcnMgb2YgdGhlIFN1bidzIG9yYml0IGFzIG9mIDEvMS8xOTkwCisgICAgLy8gQW5nbGVzIGFyZSBpbiByYWRpYW5zIChhZnRlciBtdWx0aXBseWluZyBieSBQSS8xODApCisgICAgLy8KKyAgICBkb3VibGUgamRuRXBvY2ggID0gMjQ0Nzg5MS41OyAgICAgICAgICAgLy8gSkROIG9mIGVwb2NoIChKYW4gMC4wIDE5OTApCisKKyAgICBkb3VibGUgc3VuRXRhRyAgID0gMjc5LjQwMzMwMyAqIFBJLzE4MDsgLy8gRWNsaXB0aWMgbG9uZ2l0dWRlIGF0IGVwb2NoCisgICAgZG91YmxlIHN1bk9tZWdhRyA9IDI4Mi43Njg0MjIgKiBQSS8xODA7IC8vIEVjbGlwdGljIGxvbmdpdHVkZSBvZiBwZXJpZ2VlCisgICAgZG91YmxlIHN1bkUgICAgICA9ICAgMC4wMTY3MTM7ICAgICAgICAgIC8vIEVjY2VudHJpY2l0eSBvZiBvcmJpdAorICAgIGRvdWJsZSBzdW5SMCAgICAgPSAgIDEuNDk1NTg1ZTg7ICAgICAgICAvLyBTZW1pLW1ham9yIGF4aXMgaW4gS00KKyAgICBkb3VibGUgc3VuVGhldGEwID0gICAwLjUzMzEyOCAqIFBJLzE4MDsgLy8gQW5ndWxhciBkaWFtZXRlciBhdCBSMAorCisgICAgLyoqCisgICAgICogVGhlIGxvbmdpdHVkZSBvZiB0aGUgc3VuIGF0IHRoZSB0aW1lIHNwZWNpZmllZCBieSB0aGlzIG9iamVjdC4KKyAgICAgKiBUaGUgbG9uZ2l0dWRlIGlzIG1lYXN1cmVkIGluIHJhZGlhbnMgYWxvbmcgdGhlIGVjbGlwdGljCisgICAgICogZnJvbSB0aGUgImZpcnN0IHBvaW50IG9mIEFyaWVzLCIgdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBlY2xpcHRpYworICAgICAqIGNyb3NzZXMgdGhlIGVhcnRoJ3MgZXF1YXRvcmlhbCBwbGFuZSBhdCB0aGUgdmVybmFsIGVxdWlub3guCisgICAgICogPHA+CisgICAgICogQ3VycmVudGx5LCB0aGlzIG1ldGhvZCB1c2VzIGFuIGFwcHJveGltYXRpb24gb2YgdGhlIHR3by1ib2R5IEtlcGxlcidzCisgICAgICogZXF1YXRpb24gZm9yIHRoZSBlYXJ0aCBhbmQgdGhlIHN1bi4gIEl0IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHRoZQorICAgICAqIHBlcnR1cmJhdGlvbnMgY2F1c2VkIGJ5IHRoZSBvdGhlciBwbGFuZXRzLCB0aGUgbW9vbiwgZXRjLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgZ2V0U3VuTG9uZ2l0dWRlKCkKKyAgICB7CisgICAgICAgIC8vIFNlZSBwYWdlIDg2IG9mICJQcmFjdGlhbCBBc3Ryb25vbXkgd2l0aCB5b3VyIENhbGN1bGF0b3IiLAorICAgICAgICAvLyBieSBQZXRlciBEdWZmZXQtU21pdGgsIGZvciBkZXRhaWxzIG9uIHRoZSBhbGdvcml0aG0uCisgICAgICAgIAorICAgICAgICBpZiAoc3VuTG9uZ2l0dWRlID09IElOVkFMSUQpIHsKKyAgICAgICAgICAgIGRvdWJsZSBkYXkgPSBnZXRKdWxpYW5EYXkoKSAtIGpkbkVwb2NoOyAgICAgICAvLyBEYXlzIHNpbmNlIGVwb2NoCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGFuZ3VsYXIgZGlzdGFuY2UgdGhlIHN1biBpbiBhIGZpY3RpdGlvdXMKKyAgICAgICAgICAgIC8vIGNpcmN1bGFyIG9yYml0IGhhcyB0cmF2ZWxsZWQgc2luY2UgdGhlIGVwb2NoLgorICAgICAgICAgICAgZG91YmxlIGVwb2NoQW5nbGUgPSBub3JtMlBJKFBJMi9UUk9QSUNBTF9ZRUFSKmRheSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBlcG9jaCB3YXNuJ3QgYXQgdGhlIHN1bidzIHBlcmlnZWU7IGZpbmQgdGhlIGFuZ3VsYXIgZGlzdGFuY2UKKyAgICAgICAgICAgIC8vIHNpbmNlIHBlcmlnZWUsIHdoaWNoIGlzIGNhbGxlZCB0aGUgIm1lYW4gYW5vbWFseSIKKyAgICAgICAgICAgIG1lYW5Bbm9tYWx5U3VuID0gbm9ybTJQSShlcG9jaEFuZ2xlICsgc3VuRXRhRyAtIHN1bk9tZWdhRyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5vdyBmaW5kIHRoZSAidHJ1ZSBhbm9tYWx5IiwgZS5nLiB0aGUgcmVhbCBzb2xhciBsb25naXR1ZGUKKyAgICAgICAgICAgIC8vIGJ5IHNvbHZpbmcgS2VwbGVyJ3MgZXF1YXRpb24gZm9yIGFuIGVsbGlwdGljYWwgb3JiaXQKKyAgICAgICAgICAgIHN1bkxvbmdpdHVkZSA9IG5vcm0yUEkodHJ1ZUFub21hbHkobWVhbkFub21hbHlTdW4sIHN1bkUpICsgc3VuT21lZ2FHKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VuTG9uZ2l0dWRlOworICAgIH0KKyAgCisgICAgLyoqCisgICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBzdW4gYXQgdGhpcyBvYmplY3QncyBjdXJyZW50IGRhdGUgYW5kIHRpbWUsCisgICAgICogaW4gZXF1YXRvcmlhbCBjb29yZGluYXRlcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgRXF1YXRvcmlhbCBnZXRTdW5Qb3NpdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGVjbGlwdGljVG9FcXVhdG9yaWFsKGdldFN1bkxvbmdpdHVkZSgpLCAwKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU29sYXJMb25naXR1ZGUgeworICAgICAgICBkb3VibGUgdmFsdWU7CisgICAgICAgIFNvbGFyTG9uZ2l0dWRlKGRvdWJsZSB2YWwpIHsgdmFsdWUgPSB2YWw7IH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgcmVwcmVzZW50aW5nIHRoZSB2ZXJuYWwgZXF1aW5veC4KKyAgICAgKiBGb3IgdXNlIHdpdGgge0BsaW5rICNnZXRTdW5UaW1lIGdldFN1blRpbWV9LiAKKyAgICAgKiBOb3RlOiBJbiB0aGlzIGNhc2UsICJ2ZXJuYWwiIHJlZmVycyB0byB0aGUgbm9ydGhlcm4gaGVtaXNwaGVyZSdzIHNlYXNvbnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTb2xhckxvbmdpdHVkZSBWRVJOQUxfRVFVSU5PWCAgPSBuZXcgU29sYXJMb25naXR1ZGUoMCk7CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgcmVwcmVzZW50aW5nIHRoZSBzdW1tZXIgc29sc3RpY2UuCisgICAgICogRm9yIHVzZSB3aXRoIHtAbGluayAjZ2V0U3VuVGltZSBnZXRTdW5UaW1lfS4KKyAgICAgKiBOb3RlOiBJbiB0aGlzIGNhc2UsICJzdW1tZXIiIHJlZmVycyB0byB0aGUgbm9ydGhlcm4gaGVtaXNwaGVyZSdzIHNlYXNvbnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTb2xhckxvbmdpdHVkZSBTVU1NRVJfU09MU1RJQ0UgPSBuZXcgU29sYXJMb25naXR1ZGUoUEkvMik7CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgcmVwcmVzZW50aW5nIHRoZSBhdXR1bW5hbCBlcXVpbm94LgorICAgICAqIEZvciB1c2Ugd2l0aCB7QGxpbmsgI2dldFN1blRpbWUgZ2V0U3VuVGltZX0uCisgICAgICogTm90ZTogSW4gdGhpcyBjYXNlLCAiYXV0dW1uIiByZWZlcnMgdG8gdGhlIG5vcnRoZXJuIGhlbWlzcGhlcmUncyBzZWFzb25zLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU29sYXJMb25naXR1ZGUgQVVUVU1OX0VRVUlOT1ggID0gbmV3IFNvbGFyTG9uZ2l0dWRlKFBJKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCByZXByZXNlbnRpbmcgdGhlIHdpbnRlciBzb2xzdGljZS4KKyAgICAgKiBGb3IgdXNlIHdpdGgge0BsaW5rICNnZXRTdW5UaW1lIGdldFN1blRpbWV9LgorICAgICAqIE5vdGU6IEluIHRoaXMgY2FzZSwgIndpbnRlciIgcmVmZXJzIHRvIHRoZSBub3J0aGVybiBoZW1pc3BoZXJlJ3Mgc2Vhc29ucy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNvbGFyTG9uZ2l0dWRlIFdJTlRFUl9TT0xTVElDRSA9IG5ldyBTb2xhckxvbmdpdHVkZSgoUEkqMykvMik7CisgICAgCisgICAgLyoqCisgICAgICogRmluZCB0aGUgbmV4dCB0aW1lIGF0IHdoaWNoIHRoZSBzdW4ncyBlY2xpcHRpYyBsb25naXR1ZGUgd2lsbCBoYXZlCisgICAgICogdGhlIGRlc2lyZWQgdmFsdWUuICAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXRTdW5UaW1lKGRvdWJsZSBkZXNpcmVkLCBib29sZWFuIG5leHQpCisgICAgeworICAgICAgICByZXR1cm4gdGltZU9mQW5nbGUoIG5ldyBBbmdsZUZ1bmMoKSB7IHB1YmxpYyBkb3VibGUgZXZhbCgpIHsgcmV0dXJuIGdldFN1bkxvbmdpdHVkZSgpOyB9IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUk9QSUNBTF9ZRUFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTlVURV9NUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRmluZCB0aGUgbmV4dCB0aW1lIGF0IHdoaWNoIHRoZSBzdW4ncyBlY2xpcHRpYyBsb25naXR1ZGUgd2lsbCBoYXZlCisgICAgICogdGhlIGRlc2lyZWQgdmFsdWUuICAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXRTdW5UaW1lKFNvbGFyTG9uZ2l0dWRlIGRlc2lyZWQsIGJvb2xlYW4gbmV4dCkgeworICAgICAgICByZXR1cm4gZ2V0U3VuVGltZShkZXNpcmVkLnZhbHVlLCBuZXh0KTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdGltZSAoR01UKSBvZiBzdW5yaXNlIG9yIHN1bnNldCBvbiB0aGUgbG9jYWwgZGF0ZSB0byB3aGljaAorICAgICAqIHRoaXMgY2FsZW5kYXIgaXMgY3VycmVudGx5IHNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXRTdW5SaXNlU2V0KGJvb2xlYW4gcmlzZSkKKyAgICB7CisgICAgICAgIC8vIE1ha2UgYSByb3VnaCBndWVzczogNmFtIG9yIDZwbSBsb2NhbCB0aW1lIG9uIHRoZSBjdXJyZW50IGRheQorICAgICAgICBsb25nIG5vb24gPSAoKHRpbWUgKyBmR210T2Zmc2V0KS9EQVlfTVMpKkRBWV9NUyAtIGZHbXRPZmZzZXQgKyAxMipIT1VSX01TOworICAgICAgICAKKyAgICAgICAgc2V0VGltZShub29uICsgKGxvbmcpKChyaXNlID8gLTYgOiA2KSAqIEhPVVJfTVMpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByaXNlT3JTZXQobmV3IENvb3JkRnVuYygpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgRXF1YXRvcmlhbCBldmFsKCkgeyByZXR1cm4gZ2V0U3VuUG9zaXRpb24oKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmlzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuNTMzICogREVHX1JBRCwgICAgICAgIC8vIEFuZ3VsYXIgRGlhbWV0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAzNCAvNjAuMCAqIERFR19SQUQsICAgIC8vIFJlZnJhY3Rpb24gY29ycmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIE1JTlVURV9NUyk7ICAgICAgICAgICAgLy8gRGVzaXJlZCBhY2N1cmFjeQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFRoZSBNb29uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgc3RhdGljIGZpbmFsIGRvdWJsZSBtb29uTDAgPSAzMTguMzUxNjQ4ICogUEkvMTgwOyAgIC8vIE1lYW4gbG9uZy4gYXQgZXBvY2gKKyAgICBzdGF0aWMgZmluYWwgZG91YmxlIG1vb25QMCA9ICAzNi4zNDA0MTAgKiBQSS8xODA7ICAgLy8gTWVhbiBsb25nLiBvZiBwZXJpZ2VlCisgICAgc3RhdGljIGZpbmFsIGRvdWJsZSBtb29uTjAgPSAzMTguNTEwMTA3ICogUEkvMTgwOyAgIC8vIE1lYW4gbG9uZy4gb2Ygbm9kZQorICAgIHN0YXRpYyBmaW5hbCBkb3VibGUgbW9vbkkgID0gICA1LjE0NTM2NiAqIFBJLzE4MDsgICAvLyBJbmNsaW5hdGlvbiBvZiBvcmJpdAorICAgIHN0YXRpYyBmaW5hbCBkb3VibGUgbW9vbkUgID0gICAwLjA1NDkwMDsgICAgICAgICAgICAvLyBFY2NlbnRyaWNpdHkgb2Ygb3JiaXQKKyAgICAKKyAgICAvLyBUaGVzZSBhcmVuJ3QgdXNlZCByaWdodCBub3cKKyAgICBzdGF0aWMgZmluYWwgZG91YmxlIG1vb25BICA9ICAgMy44NDQwMWU1OyAgICAgICAgICAgLy8gc2VtaS1tYWpvciBheGlzIChrbSkKKyAgICBzdGF0aWMgZmluYWwgZG91YmxlIG1vb25UMCA9ICAgMC41MTgxICogUEkvMTgwOyAgICAgLy8gQW5ndWxhciBzaXplIGF0IGRpc3RhbmNlIEEKKyAgICBzdGF0aWMgZmluYWwgZG91YmxlIG1vb25QaSA9ICAgMC45NTA3ICogUEkvMTgwOyAgICAgLy8gUGFyYWxsYXggYXQgZGlzdGFuY2UgQQorICAgIAorICAgIC8qKgorICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgbW9vbiBhdCB0aGUgdGltZSBzZXQgb24gdGhpcworICAgICAqIG9iamVjdCwgaW4gZXF1YXRvcmlhbCBjb29yZGluYXRlcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgRXF1YXRvcmlhbCBnZXRNb29uUG9zaXRpb24oKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2VlIHBhZ2UgMTQyIG9mICJQcmFjdGlhbCBBc3Ryb25vbXkgd2l0aCB5b3VyIENhbGN1bGF0b3IiLAorICAgICAgICAvLyBieSBQZXRlciBEdWZmZXQtU21pdGgsIGZvciBkZXRhaWxzIG9uIHRoZSBhbGdvcml0aG0uCisgICAgICAgIC8vCisgICAgICAgIGlmIChtb29uUG9zaXRpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb2xhciBsb25naXR1ZGUuICBIYXMgdGhlIHNpZGUgZWZmZWN0IG9mCisgICAgICAgICAgICAvLyBmaWxsaW5nIGluICJtZWFuQW5vbWFseVN1biIgYXMgd2VsbC4KKyAgICAgICAgICAgIGRvdWJsZSBzdW5Mb25naXR1ZGUgPSBnZXRTdW5Mb25naXR1ZGUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEZpbmQgdGhlICMgb2YgZGF5cyBzaW5jZSB0aGUgZXBvY2ggb2Ygb3VyIG9yYml0YWwgcGFyYW1ldGVycy4KKyAgICAgICAgICAgIC8vIFRPRE86IENvbnZlcnQgdGhlIHRpbWUgb2YgZGF5IHBvcnRpb24gaW50byBlcGhlbWVyaXMgdGltZQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGRvdWJsZSBkYXkgPSBnZXRKdWxpYW5EYXkoKSAtIGpkbkVwb2NoOyAgICAgICAvLyBEYXlzIHNpbmNlIGVwb2NoCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbWVhbiBsb25naXR1ZGUgYW5kIGFub21hbHkgb2YgdGhlIG1vb24sIGJhc2VkIG9uCisgICAgICAgICAgICAvLyBhIGNpcmN1bGFyIG9yYml0LiAgU2ltaWxhciB0byB0aGUgY29ycmVzcG9uZGluZyBzb2xhciBjYWxjdWxhdGlvbi4KKyAgICAgICAgICAgIGRvdWJsZSBtZWFuTG9uZ2l0dWRlID0gbm9ybTJQSSgxMy4xNzYzOTY2KlBJLzE4MCpkYXkgKyBtb29uTDApOworICAgICAgICAgICAgZG91YmxlIG1lYW5Bbm9tYWx5TW9vbiA9IG5vcm0yUEkobWVhbkxvbmdpdHVkZSAtIDAuMTExNDA0MSpQSS8xODAgKiBkYXkgLSBtb29uUDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBmb2xsb3dpbmcgY29ycmVjdGlvbnM6CisgICAgICAgICAgICAvLyAgRXZlY3Rpb246ICAgdGhlIHN1bidzIGdyYXZpdHkgYWZmZWN0cyB0aGUgbW9vbidzIGVjY2VudHJpY2l0eQorICAgICAgICAgICAgLy8gIEFubnVhbCBFcW46IHZhcmlhdGlvbiBpbiB0aGUgZWZmZWN0IGR1ZSB0byBlYXJ0aC1zdW4gZGlzdGFuY2UKKyAgICAgICAgICAgIC8vICBBMzogICAgICAgICBjb3JyZWN0aW9uIGZhY3RvciAoZm9yID8/PykKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBkb3VibGUgZXZlY3Rpb24gPSAxLjI3MzkqUEkvMTgwICogTWF0aC5zaW4oMiAqIChtZWFuTG9uZ2l0dWRlIC0gc3VuTG9uZ2l0dWRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBtZWFuQW5vbWFseU1vb24pOworICAgICAgICAgICAgZG91YmxlIGFubnVhbCAgID0gMC4xODU4KlBJLzE4MCAqIE1hdGguc2luKG1lYW5Bbm9tYWx5U3VuKTsKKyAgICAgICAgICAgIGRvdWJsZSBhMyAgICAgICA9IDAuMzcwMCpQSS8xODAgKiBNYXRoLnNpbihtZWFuQW5vbWFseVN1bik7CisKKyAgICAgICAgICAgIG1lYW5Bbm9tYWx5TW9vbiArPSBldmVjdGlvbiAtIGFubnVhbCAtIGEzOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTW9yZSBjb3JyZWN0aW9uIGZhY3RvcnM6CisgICAgICAgICAgICAvLyAgY2VudGVyICBlcXVhdGlvbiBvZiB0aGUgY2VudGVyIGNvcnJlY3Rpb24KKyAgICAgICAgICAgIC8vICBhNCAgICAgIHlldCBhbm90aGVyIGVycm9yIGNvcnJlY3Rpb24gKD8/PykKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUT0RPOiBTa2lwIHRoZSBlcXVhdGlvbiBvZiB0aGUgY2VudGVyIGNvcnJlY3Rpb24gYW5kIHNvbHZlIEtlcGxlcidzIGVxbj8KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBkb3VibGUgY2VudGVyID0gNi4yODg2KlBJLzE4MCAqIE1hdGguc2luKG1lYW5Bbm9tYWx5TW9vbik7CisgICAgICAgICAgICBkb3VibGUgYTQgPSAgICAgMC4yMTQwKlBJLzE4MCAqIE1hdGguc2luKDIgKiBtZWFuQW5vbWFseU1vb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBOb3cgZmluZCB0aGUgbW9vbidzIGNvcnJlY3RlZCBsb25naXR1ZGUKKyAgICAgICAgICAgIG1vb25Mb25naXR1ZGUgPSBtZWFuTG9uZ2l0dWRlICsgZXZlY3Rpb24gKyBjZW50ZXIgLSBhbm51YWwgKyBhNDsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEFuZCBmaW5hbGx5LCBmaW5kIHRoZSB2YXJpYXRpb24sIGNhdXNlZCBieSB0aGUgZmFjdCB0aGF0IHRoZSBzdW4ncworICAgICAgICAgICAgLy8gZ3Jhdml0YXRpb25hbCBwdWxsIG9uIHRoZSBtb29uIHZhcmllcyBkZXBlbmRpbmcgb24gd2hpY2ggc2lkZSBvZgorICAgICAgICAgICAgLy8gdGhlIGVhcnRoIHRoZSBtb29uIGlzIG9uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgZG91YmxlIHZhcmlhdGlvbiA9IDAuNjU4MypQSS8xODAgKiBNYXRoLnNpbigyKihtb29uTG9uZ2l0dWRlIC0gc3VuTG9uZ2l0dWRlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1vb25Mb25naXR1ZGUgKz0gdmFyaWF0aW9uOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2hhdCB3ZSd2ZSBjYWxjdWxhdGVkIHNvIGZhciBpcyB0aGUgbW9vbidzIGxvbmdpdHVkZSBpbiB0aGUgcGxhbmUKKyAgICAgICAgICAgIC8vIG9mIGl0cyBvd24gb3JiaXQuICBOb3cgbWFwIHRvIHRoZSBlY2xpcHRpYyB0byBnZXQgdGhlIGxhdGl0dWRlCisgICAgICAgICAgICAvLyBhbmQgbG9uZ2l0dWRlLiAgRmlyc3Qgd2UgbmVlZCB0byBmaW5kIHRoZSBsb25naXR1ZGUgb2YgdGhlIGFzY2VuZGluZworICAgICAgICAgICAgLy8gbm9kZSwgdGhlIHBvc2l0aW9uIG9uIHRoZSBlY2xpcHRpYyB3aGVyZSBpdCBpcyBjcm9zc2VkIGJ5IHRoZSBtb29uJ3MKKyAgICAgICAgICAgIC8vIG9yYml0IGFzIGl0IGNyb3NzZXMgZnJvbSB0aGUgc291dGhlcm4gdG8gdGhlIG5vcnRoZXJuIGhlbWlzcGhlcmUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgZG91YmxlIG5vZGVMb25naXR1ZGUgPSBub3JtMlBJKG1vb25OMCAtIDAuMDUyOTUzOSpQSS8xODAgKiBkYXkpOworCisgICAgICAgICAgICBub2RlTG9uZ2l0dWRlIC09IDAuMTYqUEkvMTgwICogTWF0aC5zaW4obWVhbkFub21hbHlTdW4pOworCisgICAgICAgICAgICBkb3VibGUgeSA9IE1hdGguc2luKG1vb25Mb25naXR1ZGUgLSBub2RlTG9uZ2l0dWRlKTsKKyAgICAgICAgICAgIGRvdWJsZSB4ID0gTWF0aC5jb3MobW9vbkxvbmdpdHVkZSAtIG5vZGVMb25naXR1ZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtb29uRWNsaXBMb25nID0gTWF0aC5hdGFuMih5Kk1hdGguY29zKG1vb25JKSwgeCkgKyBub2RlTG9uZ2l0dWRlOworICAgICAgICAgICAgZG91YmxlIG1vb25FY2xpcExhdCA9IE1hdGguYXNpbih5ICogTWF0aC5zaW4obW9vbkkpKTsKKworICAgICAgICAgICAgbW9vblBvc2l0aW9uID0gZWNsaXB0aWNUb0VxdWF0b3JpYWwobW9vbkVjbGlwTG9uZywgbW9vbkVjbGlwTGF0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbW9vblBvc2l0aW9uOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGUgImFnZSIgb2YgdGhlIG1vb24gYXQgdGhlIHRpbWUgc3BlY2lmaWVkIGluIHRoaXMgb2JqZWN0LgorICAgICAqIFRoaXMgaXMgcmVhbGx5IHRoZSBhbmdsZSBiZXR3ZWVuIHRoZQorICAgICAqIGN1cnJlbnQgZWNsaXB0aWMgbG9uZ2l0dWRlcyBvZiB0aGUgc3VuIGFuZCB0aGUgbW9vbiwKKyAgICAgKiBtZWFzdXJlZCBpbiByYWRpYW5zLgorICAgICAqCisgICAgICogQHNlZSAjZ2V0TW9vblBoYXNlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSBnZXRNb29uQWdlKCkgeworICAgICAgICAvLyBTZWUgcGFnZSAxNDcgb2YgIlByYWN0aWFsIEFzdHJvbm9teSB3aXRoIHlvdXIgQ2FsY3VsYXRvciIsCisgICAgICAgIC8vIGJ5IFBldGVyIER1ZmZldC1TbWl0aCwgZm9yIGRldGFpbHMgb24gdGhlIGFsZ29yaXRobS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRm9yY2UgdGhlIG1vb24ncyBwb3NpdGlvbiB0byBiZSBjYWxjdWxhdGVkLiAgV2UncmUgZ29pbmcgdG8gdXNlCisgICAgICAgIC8vIHNvbWUgdGhlIGludGVybWVkaWF0ZSByZXN1bHRzIGNhY2hlZCBkdXJpbmcgdGhhdCBjYWxjdWxhdGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgZ2V0TW9vblBvc2l0aW9uKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbm9ybTJQSShtb29uRWNsaXBMb25nIC0gc3VuTG9uZ2l0dWRlKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ2FsY3VsYXRlIHRoZSBwaGFzZSBvZiB0aGUgbW9vbiBhdCB0aGUgdGltZSBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogVGhlIHJldHVybmVkIHBoYXNlIGlzIGEgPGNvZGU+ZG91YmxlPC9jb2RlPiBpbiB0aGUgcmFuZ2UKKyAgICAgKiA8Y29kZT4wIDw9IHBoYXNlIDwgMTwvY29kZT4sIGludGVycHJldGVkIGFzIGZvbGxvd3M6CisgICAgICogPHVsPgorICAgICAqIDxsaT4wLjAwOiBOZXcgbW9vbgorICAgICAqIDxsaT4wLjI1OiBGaXJzdCBxdWFydGVyCisgICAgICogPGxpPjAuNTA6IEZ1bGwgbW9vbgorICAgICAqIDxsaT4wLjc1OiBMYXN0IHF1YXJ0ZXIKKyAgICAgKiA8L3VsPgorICAgICAqCisgICAgICogQHNlZSAjZ2V0TW9vbkFnZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBkb3VibGUgZ2V0TW9vblBoYXNlKCkgeworICAgICAgICAvLyBTZWUgcGFnZSAxNDcgb2YgIlByYWN0aWFsIEFzdHJvbm9teSB3aXRoIHlvdXIgQ2FsY3VsYXRvciIsCisgICAgICAgIC8vIGJ5IFBldGVyIER1ZmZldC1TbWl0aCwgZm9yIGRldGFpbHMgb24gdGhlIGFsZ29yaXRobS4KKyAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoZ2V0TW9vbkFnZSgpKSk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vb25BZ2UgeworICAgICAgICBkb3VibGUgdmFsdWU7CisgICAgICAgIE1vb25BZ2UoZG91YmxlIHZhbCkgeyB2YWx1ZSA9IHZhbDsgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCByZXByZXNlbnRpbmcgYSBuZXcgbW9vbi4KKyAgICAgKiBGb3IgdXNlIHdpdGgge0BsaW5rICNnZXRNb29uVGltZSBnZXRNb29uVGltZX0KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1vb25BZ2UgTkVXX01PT04gICAgICA9IG5ldyBNb29uQWdlKDApOworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgcmVwcmVzZW50aW5nIHRoZSBtb29uJ3MgZmlyc3QgcXVhcnRlci4KKyAgICAgKiBGb3IgdXNlIHdpdGgge0BsaW5rICNnZXRNb29uVGltZSBnZXRNb29uVGltZX0KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1vb25BZ2UgRklSU1RfUVVBUlRFUiA9IG5ldyBNb29uQWdlKFBJLzIpOworICAgIAorICAgIC8qKgorICAgICAqIENvbnN0YW50IHJlcHJlc2VudGluZyBhIGZ1bGwgbW9vbi4KKyAgICAgKiBGb3IgdXNlIHdpdGgge0BsaW5rICNnZXRNb29uVGltZSBnZXRNb29uVGltZX0KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE1vb25BZ2UgRlVMTF9NT09OICAgICA9IG5ldyBNb29uQWdlKFBJKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCByZXByZXNlbnRpbmcgdGhlIG1vb24ncyBsYXN0IHF1YXJ0ZXIuCisgICAgICogRm9yIHVzZSB3aXRoIHtAbGluayAjZ2V0TW9vblRpbWUgZ2V0TW9vblRpbWV9CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNb29uQWdlIExBU1RfUVVBUlRFUiAgPSBuZXcgTW9vbkFnZSgoUEkqMykvMik7CisgICAgCisgICAgLyoqCisgICAgICogRmluZCB0aGUgbmV4dCBvciBwcmV2aW91cyB0aW1lIGF0IHdoaWNoIHRoZSBNb29uJ3MgZWNsaXB0aWMKKyAgICAgKiBsb25naXR1ZGUgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIHZhbHVlLiAgCisgICAgICogPHA+CisgICAgICogQHBhcmFtIGRlc2lyZWQgICBUaGUgZGVzaXJlZCBsb25naXR1ZGUuCisgICAgICogQHBhcmFtIG5leHQgICAgICA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoZSBuZXh0IG9jY3VycmFuY2Ugb2YgdGhlIHBoYXNlCisgICAgICogICAgICAgICAgICAgICAgICBpcyBkZXNpcmVkLCA8dHQ+ZmFsc2U8L3R0PiBmb3IgdGhlIHByZXZpb3VzIG9jY3VycmFuY2UuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBsb25nIGdldE1vb25UaW1lKGRvdWJsZSBkZXNpcmVkLCBib29sZWFuIG5leHQpCisgICAgeworICAgICAgICByZXR1cm4gdGltZU9mQW5nbGUoIG5ldyBBbmdsZUZ1bmMoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGRvdWJsZSBldmFsKCkgeyByZXR1cm4gZ2V0TW9vbkFnZSgpOyB9IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWU5PRElDX01PTlRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTlVURV9NUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRmluZCB0aGUgbmV4dCBvciBwcmV2aW91cyB0aW1lIGF0IHdoaWNoIHRoZSBtb29uIHdpbGwgYmUgaW4gdGhlCisgICAgICogZGVzaXJlZCBwaGFzZS4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gZGVzaXJlZCAgIFRoZSBkZXNpcmVkIHBoYXNlIG9mIHRoZSBtb29uLgorICAgICAqIEBwYXJhbSBuZXh0ICAgICAgPHR0PnRydWU8L3R0PiBpZiB0aGUgbmV4dCBvY2N1cnJhbmNlIG9mIHRoZSBwaGFzZQorICAgICAqICAgICAgICAgICAgICAgICAgaXMgZGVzaXJlZCwgPHR0PmZhbHNlPC90dD4gZm9yIHRoZSBwcmV2aW91cyBvY2N1cnJhbmNlLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXRNb29uVGltZShNb29uQWdlIGRlc2lyZWQsIGJvb2xlYW4gbmV4dCkgeworICAgICAgICByZXR1cm4gZ2V0TW9vblRpbWUoZGVzaXJlZC52YWx1ZSwgbmV4dCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRpbWUgKEdNVCkgb2Ygc3VucmlzZSBvciBzdW5zZXQgb24gdGhlIGxvY2FsIGRhdGUgdG8gd2hpY2gKKyAgICAgKiB0aGlzIGNhbGVuZGFyIGlzIGN1cnJlbnRseSBzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGxvbmcgZ2V0TW9vblJpc2VTZXQoYm9vbGVhbiByaXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJpc2VPclNldChuZXcgQ29vcmRGdW5jKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBFcXVhdG9yaWFsIGV2YWwoKSB7IHJldHVybiBnZXRNb29uUG9zaXRpb24oKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmlzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuNTMzICogREVHX1JBRCwgICAgICAgIC8vIEFuZ3VsYXIgRGlhbWV0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAzNCAvNjAuMCAqIERFR19SQUQsICAgIC8vIFJlZnJhY3Rpb24gY29ycmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIE1JTlVURV9NUyk7ICAgICAgICAgICAgLy8gRGVzaXJlZCBhY2N1cmFjeQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEludGVycG9sYXRpb24gbWV0aG9kcyBmb3IgZmluZGluZyB0aGUgdGltZSBhdCB3aGljaCBhIGdpdmVuIGV2ZW50IG9jY3VycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIHByaXZhdGUgaW50ZXJmYWNlIEFuZ2xlRnVuYyB7CisgICAgICAgIHB1YmxpYyBkb3VibGUgZXZhbCgpOworICAgIH07CisgICAgCisgICAgcHJpdmF0ZSBsb25nIHRpbWVPZkFuZ2xlKEFuZ2xlRnVuYyBmdW5jLCBkb3VibGUgZGVzaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHBlcmlvZERheXMsIGxvbmcgZXBzaWxvbiwgYm9vbGVhbiBuZXh0KQorICAgIHsKKyAgICAgICAgLy8gRmluZCB0aGUgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGF0IHRoZSBjdXJyZW50IHRpbWUKKyAgICAgICAgZG91YmxlIGxhc3RBbmdsZSA9IGZ1bmMuZXZhbCgpOworICAgICAgICAKKyAgICAgICAgLy8gRmluZCBvdXQgaG93IGZhciB3ZSBhcmUgZnJvbSB0aGUgZGVzaXJlZCBhbmdsZQorICAgICAgICBkb3VibGUgZGVsdGFBbmdsZSA9IG5vcm0yUEkoZGVzaXJlZCAtIGxhc3RBbmdsZSkgOworICAgICAgICAKKyAgICAgICAgLy8gVXNpbmcgdGhlIGF2ZXJhZ2UgcGVyaW9kLCBlc3RpbWF0ZSB0aGUgbmV4dCAob3IgcHJldmlvdXMpIHRpbWUgYXQKKyAgICAgICAgLy8gd2hpY2ggdGhlIGRlc2lyZWQgYW5nbGUgb2NjdXJzLgorICAgICAgICBkb3VibGUgZGVsdGFUID0gIChkZWx0YUFuZ2xlICsgKG5leHQgPyAwIDogLVBJMikpICogKHBlcmlvZERheXMqREFZX01TKSAvIFBJMjsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBsYXN0RGVsdGFUID0gZGVsdGFUOyAvLyBMaXUKKyAgICAgICAgbG9uZyBzdGFydFRpbWUgPSB0aW1lOyAvLyBMaXUKKyAgICAgICAgCisgICAgICAgIHNldFRpbWUodGltZSArIChsb25nKWRlbHRhVCk7CisKKyAgICAgICAgLy8gTm93IGl0ZXJhdGUgdW50aWwgd2UgZ2V0IHRoZSBlcnJvciBiZWxvdyBlcHNpbG9uLiAgVGhyb3VnaG91dAorICAgICAgICAvLyB0aGlzIGxvb3Agd2UgdXNlIG5vcm1QSSB0byBnZXQgdmFsdWVzIGluIHRoZSByYW5nZSAtUGkgdG8gUGksCisgICAgICAgIC8vIHNpbmNlIHdlJ3JlIHVzaW5nIHRoZW0gYXMgY29ycmVjdGlvbiBmYWN0b3JzIHJhdGhlciB0aGFuIGFic29sdXRlIGFuZ2xlcy4KKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gRXZhbHVhdGUgdGhlIGZ1bmN0aW9uIGF0IHRoZSB0aW1lIHdlJ3ZlIGVzdGltYXRlZAorICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZnVuYy5ldmFsKCk7CisKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlICMgb2YgbWlsbGlzZWNvbmRzIHBlciByYWRpYW4gYXQgdGhpcyBwb2ludCBvbiB0aGUgY3VydmUKKyAgICAgICAgICAgIGRvdWJsZSBmYWN0b3IgPSBNYXRoLmFicyhkZWx0YVQgLyBub3JtUEkoYW5nbGUtbGFzdEFuZ2xlKSk7CisKKyAgICAgICAgICAgIC8vIENvcnJlY3QgdGhlIHRpbWUgZXN0aW1hdGUgYmFzZWQgb24gaG93IGZhciBvZmYgdGhlIGFuZ2xlIGlzCisgICAgICAgICAgICBkZWx0YVQgPSBub3JtUEkoZGVzaXJlZCAtIGFuZ2xlKSAqIGZhY3RvcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSEFDSzoKKyAgICAgICAgICAgIC8vIAorICAgICAgICAgICAgLy8gSWYgYWJzKGRlbHRhVCkgYmVnaW5zIHRvIGRpdmVyZ2Ugd2UgbmVlZCB0byBxdWl0IHRoaXMgbG9vcC4KKyAgICAgICAgICAgIC8vIFRoaXMgb25seSBhcHBlYXJzIHRvIGhhcHBlbiB3aGVuIGF0dGVtcHRpbmcgdG8gbG9jYXRlLCBmb3IKKyAgICAgICAgICAgIC8vIGV4YW1wbGUsIGEgbmV3IG1vb24gb24gdGhlIGRheSBvZiB0aGUgbmV3IG1vb24uICBFLmcuOgorICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAvLyBUaGlzIHJlc3VsdCBpcyBjb3JyZWN0OgorICAgICAgICAgICAgLy8gbmV3TW9vbig3NTA4KE1vbiBKdWwgMjMgMDA6MDA6MDAgQ1NUIDE5OTAsZmFsc2UpKT0KKyAgICAgICAgICAgIC8vICAgU3VuIEp1bCAyMiAxMDo1Nzo0MSBDU1QgMTk5MAorICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAvLyBCdXQgYXR0ZW1wdGluZyB0byBtYWtlIHRoZSBzYW1lIGNhbGwgYSBkYXkgZWFybGllciBjYXVzZXMgZGVsdGFUCisgICAgICAgICAgICAvLyB0byBkaXZlcmdlOgorICAgICAgICAgICAgLy8gQ2FsZW5kYXJBc3Ryb25vbWVyLnRpbWVPZkFuZ2xlKCkgZGl2ZXJnaW5nOiAxLjM0ODUwODcyNzU3NTYyNUU5IC0+CisgICAgICAgICAgICAvLyAgIDEuMzY0OTgyODU0MDIyNDAzMkU5CisgICAgICAgICAgICAvLyBuZXdNb29uKDc1MDcoU3VuIEp1bCAyMiAwMDowMDowMCBDU1QgMTk5MCxmYWxzZSkpPQorICAgICAgICAgICAgLy8gICBTdW4gSnVsIDA4IDEzOjU2OjE1IENTVCAxOTkwCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24sIHdlIGNhdGNoIHRoaXMgc3BlY2lmaWMgY29uZGl0aW9uIGFuZAorICAgICAgICAgICAgLy8gYWRqdXN0IG91ciBzdGFydCB0aW1lIGJ5IG9uZSBlaWdodGggcGVyaW9kIGRheXMgKGVpdGhlciBmb3J3YXJkCisgICAgICAgICAgICAvLyBvciBiYWNrd2FyZCkgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIExpdSAxMS85LzAwCisgICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGVsdGFUKSA+IE1hdGguYWJzKGxhc3REZWx0YVQpKSB7CisgICAgICAgICAgICAgICAgbG9uZyBkZWx0YSA9IChsb25nKSAocGVyaW9kRGF5cyAqIERBWV9NUyAvIDgpOworICAgICAgICAgICAgICAgIHNldFRpbWUoc3RhcnRUaW1lICsgKG5leHQgPyBkZWx0YSA6IC1kZWx0YSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0aW1lT2ZBbmdsZShmdW5jLCBkZXNpcmVkLCBwZXJpb2REYXlzLCBlcHNpbG9uLCBuZXh0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGFzdERlbHRhVCA9IGRlbHRhVDsKKyAgICAgICAgICAgIGxhc3RBbmdsZSA9IGFuZ2xlOworCisgICAgICAgICAgICBzZXRUaW1lKHRpbWUgKyAobG9uZylkZWx0YVQpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChNYXRoLmFicyhkZWx0YVQpID4gZXBzaWxvbik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdGltZTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBpbnRlcmZhY2UgQ29vcmRGdW5jIHsKKyAgICAgICAgcHVibGljIEVxdWF0b3JpYWwgZXZhbCgpOworICAgIH07CisgICAgCisgICAgcHJpdmF0ZSBsb25nIHJpc2VPclNldChDb29yZEZ1bmMgZnVuYywgYm9vbGVhbiByaXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRpYW1ldGVyLCBkb3VibGUgcmVmcmFjdGlvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGVwc2lsb24pCisgICAgeyAgICAgICAgCisgICAgICAgIEVxdWF0b3JpYWwgIHBvcyA9IG51bGw7CisgICAgICAgIGRvdWJsZSAgICAgIHRhbkwgICA9IE1hdGgudGFuKGZMYXRpdHVkZSk7CisgICAgICAgIGxvbmcgICAgICAgIGRlbHRhVCA9IExvbmcuTUFYX1ZBTFVFOworICAgICAgICBpbnQgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIAorICAgICAgICAvLworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG9iamVjdCdzIHBvc2l0aW9uIGF0IHRoZSBjdXJyZW50IHRpbWUsIHRoZW4gdXNlIHRoYXQKKyAgICAgICAgLy8gcG9zaXRpb24gdG8gY2FsY3VsYXRlIHRoZSB0aW1lIG9mIHJpc2luZyBvciBzZXR0aW5nLiAgVGhlIHBvc2l0aW9uCisgICAgICAgIC8vIHdpbGwgYmUgZGlmZmVyZW50IGF0IHRoYXQgdGltZSwgc28gaXRlcmF0ZSB1bnRpbCB0aGUgZXJyb3IgaXMgYWxsb3dhYmxlLgorICAgICAgICAvLworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBTZWUgIlByYWN0aWNhbCBBc3Ryb25vbXkgV2l0aCBZb3VyIENhbGN1bGF0b3IsIHNlY3Rpb24gMzMuCisgICAgICAgICAgICBwb3MgPSBmdW5jLmV2YWwoKTsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IE1hdGguYWNvcygtdGFuTCAqIE1hdGgudGFuKHBvcy5kZWNsaW5hdGlvbikpOworICAgICAgICAgICAgZG91YmxlIGxzdCA9ICgocmlzZSA/IFBJMi1hbmdsZSA6IGFuZ2xlKSArIHBvcy5hc2NlbnNpb24gKSAqIDI0IC8gUEkyOworICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ29udmVydCBmcm9tIExTVCB0byBVbml2ZXJzYWwgVGltZS4KKyAgICAgICAgICAgIGxvbmcgbmV3VGltZSA9IGxzdFRvVVQoIGxzdCApOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWx0YVQgPSBuZXdUaW1lIC0gdGltZTsKKyAgICAgICAgICAgIHNldFRpbWUobmV3VGltZSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCsrIGNvdW50IDwgNSAmJiBNYXRoLmFicyhkZWx0YVQpID4gZXBzaWxvbik7CisgICAgICAgIAorICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvcnJlY3Rpb24gZHVlIHRvIHJlZnJhY3Rpb24gYW5kIHRoZSBvYmplY3QncyBhbmd1bGFyIGRpYW1ldGVyCisgICAgICAgIGRvdWJsZSBjb3NEICA9IE1hdGguY29zKHBvcy5kZWNsaW5hdGlvbik7CisgICAgICAgIGRvdWJsZSBwc2kgICA9IE1hdGguYWNvcyhNYXRoLnNpbihmTGF0aXR1ZGUpIC8gY29zRCk7CisgICAgICAgIGRvdWJsZSB4ICAgICA9IGRpYW1ldGVyIC8gMiArIHJlZnJhY3Rpb247CisgICAgICAgIGRvdWJsZSB5ICAgICA9IE1hdGguYXNpbihNYXRoLnNpbih4KSAvIE1hdGguc2luKHBzaSkpOworICAgICAgICBsb25nICBkZWx0YSAgPSAobG9uZykoKDI0MCAqIHkgKiBSQURfREVHIC8gY29zRCkqU0VDT05EX01TKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aW1lICsgKHJpc2UgPyAtZGVsdGEgOiBkZWx0YSk7CisgICAgfQorICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIE90aGVyIHV0aWxpdHkgbWV0aG9kcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIG5vcm1hbGl6ZShkb3VibGUgdmFsdWUsIGRvdWJsZSByYW5nZSkgeworICAgICAgICByZXR1cm4gdmFsdWUgLSByYW5nZSAqIE1hdGguZmxvb3IodmFsdWUgLyByYW5nZSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIE5vcm1hbGl6ZSBhbiBhbmdsZSBzbyB0aGF0IGl0J3MgaW4gdGhlIHJhbmdlIDAgLSAycGkuCisgICAgICogRm9yIHBvc2l0aXZlIGFuZ2xlcyB0aGlzIGlzIGp1c3QgKGFuZ2xlICUgMnBpKSwgYnV0IHRoZSBKYXZhCisgICAgICogbW9kIG9wZXJhdG9yIGRvZXNuJ3Qgd29yayB0aGF0IHdheSBmb3IgbmVnYXRpdmUgbnVtYmVycy4uLi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgbm9ybTJQSShkb3VibGUgYW5nbGUpIHsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShhbmdsZSwgUEkyKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogTm9ybWFsaXplIGFuIGFuZ2xlIGludG8gdGhlIHJhbmdlIC1QSSAtIFBJCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIG5vcm1QSShkb3VibGUgYW5nbGUpIHsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShhbmdsZSArIFBJLCBQSTIpIC0gUEk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEZpbmQgdGhlICJ0cnVlIGFub21hbHkiIChsb25naXR1ZGUpIG9mIGFuIG9iamVjdCBmcm9tCisgICAgICogaXRzIG1lYW4gYW5vbWFseSBhbmQgdGhlIGVjY2VudHJpY2l0eSBvZiBpdHMgb3JiaXQuICBUaGlzIHVzZXMKKyAgICAgKiBhbiBpdGVyYXRpdmUgc29sdXRpb24gdG8gS2VwbGVyJ3MgZXF1YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWVhbkFub21hbHkgICBUaGUgb2JqZWN0J3MgbG9uZ2l0dWRlIGNhbGN1bGF0ZWQgYXMgaWYgaXQgd2VyZSBpbgorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGEgcmVndWxhciwgY2lyY3VsYXIgb3JiaXQsIG1lYXN1cmVkIGluIHJhZGlhbnMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBwb2ludCBvZiBwZXJpZ2VlLiAgCisgICAgICoKKyAgICAgKiBAcGFyYW0gZWNjZW50cmljaXR5ICBUaGUgZWNjZW50cmljaXR5IG9mIHRoZSBvcmJpdAorICAgICAqCisgICAgICogQHJldHVybiBUaGUgdHJ1ZSBhbm9tYWx5IChsb25naXR1ZGUpIG1lYXN1cmVkIGluIHJhZGlhbnMKKyAgICAgKi8KKyAgICBwcml2YXRlIGRvdWJsZSB0cnVlQW5vbWFseShkb3VibGUgbWVhbkFub21hbHksIGRvdWJsZSBlY2NlbnRyaWNpdHkpCisgICAgeworICAgICAgICAvLyBGaXJzdCwgc29sdmUgS2VwbGVyJ3MgZXF1YXRpb24gaXRlcmF0aXZlbHkKKyAgICAgICAgZG91YmxlIGRlbHRhOworICAgICAgICBkb3VibGUgRSA9IG1lYW5Bbm9tYWx5OworICAgICAgICBkbyB7CisgICAgICAgICAgICBkZWx0YSA9IEUgLSBlY2NlbnRyaWNpdHkgKiBNYXRoLnNpbihFKSAtIG1lYW5Bbm9tYWx5OworICAgICAgICAgICAgRSA9IEUgLSBkZWx0YSAvICgxIC0gZWNjZW50cmljaXR5ICogTWF0aC5jb3MoRSkpOworICAgICAgICB9IAorICAgICAgICB3aGlsZSAoTWF0aC5hYnMoZGVsdGEpID4gYWNjdXJhY3kpOworCisgICAgICAgIHJldHVybiAyLjAgKiBNYXRoLmF0YW4oIE1hdGgudGFuKEUvMikgKiBNYXRoLnNxcnQoICgxK2VjY2VudHJpY2l0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKDEtZWNjZW50cmljaXR5KSApICk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIGRvdWJsZSBhY2N1cmFjeSA9IDAuMDEgKiBQSS8xODA7ICAvLyAwLjAxIGRlZ3JlZXMKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG9ibGlxdWl0eSBvZiB0aGUgZWNsaXB0aWMgKHRoZSBhbmdsZSBiZXR3ZWVuIHRoZSBlY2xpcHRpYworICAgICAqIGFuZCB0aGUgZWFydGgncyBlcXVhdG9yKSBhdCB0aGUgY3VycmVudCB0aW1lLiAgVGhpcyB2YXJpZXMgZHVlIHRvCisgICAgICogdGhlIHByZWNlc3Npb24gb2YgdGhlIGVhcnRoJ3MgYXhpcy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gIHRoZSBvYmxpcXVpdHkgb2YgdGhlIGVjbGlwdGljIHJlbGF0aXZlIHRvIHRoZSBlcXVhdG9yLAorICAgICAqICAgICAgICAgIG1lYXN1cmVkIGluIHJhZGlhbnMuCisgICAgICovCisgICAgcHJpdmF0ZSBkb3VibGUgZWNsaXB0aWNPYmxpcXVpdHkoKSB7CisgICAgICAgIGlmIChlY2xpcE9ibGlxdWl0eSA9PSBJTlZBTElEKSB7CisgICAgICAgICAgICBmaW5hbCBkb3VibGUgZXBvY2ggPSAyNDUxNTQ1LjA7ICAgICAvLyAyMDAwIEFELCBKYW51YXJ5IDEuNQorCisgICAgICAgICAgICBkb3VibGUgVCA9IChnZXRKdWxpYW5EYXkoKSAtIGVwb2NoKSAvIDM2NTI1OworICAgICAgICAgICAgCisgICAgICAgICAgICBlY2xpcE9ibGlxdWl0eSA9IDIzLjQzOTI5MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLSA0Ni44MTUvMzYwMCAqIFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMC4wMDA2ICogVCpUCisgICAgICAgICAgICAgICAgICAgICAgICAgICArIDAuMDAxODEgKiBUKlQqVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZWNsaXBPYmxpcXVpdHkgKj0gREVHX1JBRDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWNsaXBPYmxpcXVpdHk7CisgICAgfQorICAgIAorICAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQcml2YXRlIGRhdGEKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDdXJyZW50IHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIDEvMS8xOTcwIEFECisgICAgICogQHNlZSBqYXZhLnV0aWwuRGF0ZSNnZXRUaW1lCisgICAgICovCisgICAgcHJpdmF0ZSBsb25nIHRpbWU7CisgICAgCisgICAgLyogVGhlc2UgYXJlbid0IHVzZWQgeWV0LCBidXQgdGhleSdsbCBiZSBuZWVkZWQgZm9yIHN1bnNldCBjYWxjdWxhdGlvbnMKKyAgICAgKiBhbmQgZXF1YXRvcmlhbCB0byBob3Jpem9uIGNvb3JkaW5hdGUgY29udmVyc2lvbnMKKyAgICAgKi8KKyAgICBwcml2YXRlIGRvdWJsZSBmTG9uZ2l0dWRlID0gMC4wOworICAgIHByaXZhdGUgZG91YmxlIGZMYXRpdHVkZSAgPSAwLjA7CisgICAgcHJpdmF0ZSBsb25nICAgZkdtdE9mZnNldCA9IDA7CisgICAgCisgICAgLy8KKyAgICAvLyBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgdXNlZCB0byBjYWNoZSBjYWxjdWxhdGVkIHJlc3VsdHMgZm9yIGltcHJvdmVkCisgICAgLy8gcGVyZm9ybWFuY2UuICBUaGVzZSB2YWx1ZXMgYWxsIGRlcGVuZCBvbiB0aGUgY3VycmVudCB0aW1lIHNldHRpbmcKKyAgICAvLyBvZiB0aGlzIG9iamVjdCwgc28gdGhlIGNsZWFyQ2FjaGUgbWV0aG9kIGlzIHByb3ZpZGVkLgorICAgIC8vCisgICAgc3RhdGljIGZpbmFsIHByaXZhdGUgZG91YmxlIElOVkFMSUQgPSBEb3VibGUuTUlOX1ZBTFVFOworICAgIAorICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBqdWxpYW5EYXkgICAgICAgPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBqdWxpYW5DZW50dXJ5ICAgPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBzdW5Mb25naXR1ZGUgICAgPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBtZWFuQW5vbWFseVN1biAgPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBtb29uTG9uZ2l0dWRlICAgPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBtb29uRWNsaXBMb25nICAgPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBtZWFuQW5vbWFseU1vb24gPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBlY2xpcE9ibGlxdWl0eSAgPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBzaWRlcmVhbFQwICAgICAgPSBJTlZBTElEOworICAgIHByaXZhdGUgdHJhbnNpZW50IGRvdWJsZSAgICBzaWRlcmVhbFRpbWUgICAgPSBJTlZBTElEOworICAgIAorICAgIHByaXZhdGUgdHJhbnNpZW50IEVxdWF0b3JpYWwgIG1vb25Qb3NpdGlvbiA9IG51bGw7CisKKyAgICBwcml2YXRlIHZvaWQgY2xlYXJDYWNoZSgpIHsKKyAgICAgICAganVsaWFuRGF5ICAgICAgID0gSU5WQUxJRDsKKyAgICAgICAganVsaWFuQ2VudHVyeSAgID0gSU5WQUxJRDsKKyAgICAgICAgc3VuTG9uZ2l0dWRlICAgID0gSU5WQUxJRDsKKyAgICAgICAgbWVhbkFub21hbHlTdW4gID0gSU5WQUxJRDsKKyAgICAgICAgbW9vbkxvbmdpdHVkZSAgID0gSU5WQUxJRDsKKyAgICAgICAgbW9vbkVjbGlwTG9uZyAgID0gSU5WQUxJRDsKKyAgICAgICAgbWVhbkFub21hbHlNb29uID0gSU5WQUxJRDsKKyAgICAgICAgZWNsaXBPYmxpcXVpdHkgID0gSU5WQUxJRDsKKyAgICAgICAgc2lkZXJlYWxUaW1lICAgID0gSU5WQUxJRDsKKyAgICAgICAgc2lkZXJlYWxUMCAgICAgID0gSU5WQUxJRDsKKyAgICAgICAgbW9vblBvc2l0aW9uICAgID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvdXQoU3RyaW5nIHMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVnKGRvdWJsZSByYWQpIHsKKyAgICAgICAgcmV0dXJuIERvdWJsZS50b1N0cmluZyhyYWQgKiBSQURfREVHKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGhvdXJzKGxvbmcgbXMpIHsKKyAgICAgICAgcmV0dXJuIERvdWJsZS50b1N0cmluZygoZG91YmxlKW1zIC8gSE9VUl9NUykgKyAiIGhvdXJzIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGxvY2FsKGxvbmcgbG9jYWxNaWxsaXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGxvY2FsTWlsbGlzIC0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpLmdldFJhd09mZnNldCgpKS50b1N0cmluZygpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiBhbiBvYmplY3QgaW4gdGhlIHNreSByZWxhdGl2ZSB0byB0aGUgZWNsaXB0aWMsCisgICAgICogdGhlIHBsYW5lIG9mIHRoZSBlYXJ0aCdzIG9yYml0IGFyb3VuZCB0aGUgU3VuLiAKKyAgICAgKiBUaGlzIGlzIGEgc3BoZXJpY2FsIGNvb3JkaW5hdGUgc3lzdGVtIGluIHdoaWNoIHRoZSBsYXRpdHVkZQorICAgICAqIHNwZWNpZmllcyB0aGUgcG9zaXRpb24gbm9ydGggb3Igc291dGggb2YgdGhlIHBsYW5lIG9mIHRoZSBlY2xpcHRpYy4KKyAgICAgKiBUaGUgbG9uZ2l0dWRlIHNwZWNpZmllcyB0aGUgcG9zaXRpb24gYWxvbmcgdGhlIGVjbGlwdGljIHBsYW5lCisgICAgICogcmVsYXRpdmUgdG8gdGhlICJGaXJzdCBQb2ludCBvZiBBcmllcyIsIHdoaWNoIGlzIHRoZSBTdW4ncyBwb3NpdGlvbiBpbiB0aGUgc2t5CisgICAgICogYXQgdGhlIFZlcm5hbCBFcXVpbm94LgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhhdCBFY2xpcHRpYyBvYmplY3RzIGFyZSBpbW11dGFibGUgYW5kIGNhbm5vdCBiZSBtb2RpZmllZAorICAgICAqIG9uY2UgdGhleSBhcmUgY29uc3RydWN0ZWQuICBUaGlzIGFsbG93cyB0aGVtIHRvIGJlIHBhc3NlZCBhbmQgcmV0dXJuZWQgYnkKKyAgICAgKiB2YWx1ZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHdoZXRoZXIgb3RoZXIgY29kZSB3aWxsIG1vZGlmeSB0aGVtLgorICAgICAqCisgICAgICogQHNlZSBDYWxlbmRhckFzdHJvbm9tZXIuRXF1YXRvcmlhbAorICAgICAqIEBzZWUgQ2FsZW5kYXJBc3Ryb25vbWVyLkhvcml6b24KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEVjbGlwdGljIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnN0cnVjdHMgYW4gRWNsaXB0aWMgY29vcmRpbmF0ZSBvYmplY3QuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBAcGFyYW0gbGF0IFRoZSBlY2xpcHRpYyBsYXRpdHVkZSwgbWVhc3VyZWQgaW4gcmFkaWFucy4KKyAgICAgICAgICogQHBhcmFtIGxvbiBUaGUgZWNsaXB0aWMgbG9uZ2l0dWRlLCBtZWFzdXJlZCBpbiByYWRpYW5zLgorICAgICAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBFY2xpcHRpYyhkb3VibGUgbGF0LCBkb3VibGUgbG9uKSB7CisgICAgICAgICAgICBsYXRpdHVkZSA9IGxhdDsKKyAgICAgICAgICAgIGxvbmdpdHVkZSA9IGxvbjsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QKKyAgICAgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZS50b1N0cmluZyhsb25naXR1ZGUqUkFEX0RFRykgKyAiLCIgKyAobGF0aXR1ZGUqUkFEX0RFRyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZWNsaXB0aWMgbGF0aXR1ZGUsIGluIHJhZGlhbnMuICBUaGlzIHNwZWNpZmllcyBhbiBvYmplY3QncworICAgICAgICAgKiBwb3NpdGlvbiBub3J0aCBvciBzb3V0aCBvZiB0aGUgcGxhbmUgb2YgdGhlIGVjbGlwdGljLAorICAgICAgICAgKiB3aXRoIHBvc2l0aXZlIGFuZ2xlcyByZXByZXNlbnRpbmcgbm9ydGguCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGZpbmFsIGRvdWJsZSBsYXRpdHVkZTsKKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZWNsaXB0aWMgbG9uZ2l0dWRlLCBpbiByYWRpYW5zLgorICAgICAgICAgKiBUaGlzIHNwZWNpZmllcyBhbiBvYmplY3QncyBwb3NpdGlvbiBhbG9uZyB0aGUgZWNsaXB0aWMgcGxhbmUKKyAgICAgICAgICogcmVsYXRpdmUgdG8gdGhlICJGaXJzdCBQb2ludCBvZiBBcmllcyIsIHdoaWNoIGlzIHRoZSBTdW4ncyBwb3NpdGlvbgorICAgICAgICAgKiBpbiB0aGUgc2t5IGF0IHRoZSBWZXJuYWwgRXF1aW5veCwKKyAgICAgICAgICogd2l0aCBwb3NpdGl2ZSBhbmdsZXMgcmVwcmVzZW50aW5nIGVhc3QuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBBIGJpdCBvZiB0cml2aWE6IHRoZSBmaXJzdCBwb2ludCBvZiBBcmllcyBpcyBjdXJyZW50bHkgaW4gdGhlCisgICAgICAgICAqIGNvbnN0ZWxsYXRpb24gUGlzY2VzLCBkdWUgdG8gdGhlIHByZWNlc3Npb24gb2YgdGhlIGVhcnRoJ3MgYXhpcy4KKyAgICAgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgZmluYWwgZG91YmxlIGxvbmdpdHVkZTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb2YgYW4gCisgICAgICogb2JqZWN0IGluIHRoZSBza3kgcmVsYXRpdmUgdG8gdGhlIHBsYW5lIG9mIHRoZSBlYXJ0aCdzIGVxdWF0b3IuIAorICAgICAqIFRoZSA8aT5SaWdodCBBc2NlbnNpb248L2k+IHNwZWNpZmllcyB0aGUgcG9zaXRpb24gZWFzdCBvciB3ZXN0CisgICAgICogYWxvbmcgdGhlIGVxdWF0b3IsIHJlbGF0aXZlIHRvIHRoZSBzdW4ncyBwb3NpdGlvbiBhdCB0aGUgdmVybmFsCisgICAgICogZXF1aW5veC4gIFRoZSA8aT5EZWNsaW5hdGlvbjwvaT4gaXMgdGhlIHBvc2l0aW9uIG5vcnRoIG9yIHNvdXRoCisgICAgICogb2YgdGhlIGVxdWF0b3JpYWwgcGxhbmUuCisgICAgICogPHA+CisgICAgICogTm90ZSB0aGF0IEVxdWF0b3JpYWwgb2JqZWN0cyBhcmUgaW1tdXRhYmxlIGFuZCBjYW5ub3QgYmUgbW9kaWZpZWQKKyAgICAgKiBvbmNlIHRoZXkgYXJlIGNvbnN0cnVjdGVkLiAgVGhpcyBhbGxvd3MgdGhlbSB0byBiZSBwYXNzZWQgYW5kIHJldHVybmVkIGJ5CisgICAgICogdmFsdWUgd2l0aG91dCB3b3JyeWluZyBhYm91dCB3aGV0aGVyIG90aGVyIGNvZGUgd2lsbCBtb2RpZnkgdGhlbS4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FsZW5kYXJBc3Ryb25vbWVyLkVjbGlwdGljCisgICAgICogQHNlZSBDYWxlbmRhckFzdHJvbm9tZXIuSG9yaXpvbgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRXF1YXRvcmlhbCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDb25zdHJ1Y3RzIGFuIEVxdWF0b3JpYWwgY29vcmRpbmF0ZSBvYmplY3QuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBAcGFyYW0gYXNjIFRoZSByaWdodCBhc2NlbnNpb24sIG1lYXN1cmVkIGluIHJhZGlhbnMuCisgICAgICAgICAqIEBwYXJhbSBkZWMgVGhlIGRlY2xpbmF0aW9uLCBtZWFzdXJlZCBpbiByYWRpYW5zLgorICAgICAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBFcXVhdG9yaWFsKGRvdWJsZSBhc2MsIGRvdWJsZSBkZWMpIHsKKyAgICAgICAgICAgIGFzY2Vuc2lvbiA9IGFzYzsKKyAgICAgICAgICAgIGRlY2xpbmF0aW9uID0gZGVjOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdCwgd2l0aCB0aGUKKyAgICAgICAgICogYW5nbGVzIG1lYXN1cmVkIGluIGRlZ3JlZXMuCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiBEb3VibGUudG9TdHJpbmcoYXNjZW5zaW9uKlJBRF9ERUcpICsgIiwiICsgKGRlY2xpbmF0aW9uKlJBRF9ERUcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0IHdpdGggdGhlIHJpZ2h0IGFzY2Vuc2lvbgorICAgICAgICAgKiBtZWFzdXJlZCBpbiBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMuCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFN0cmluZyB0b0htc1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiByYWRUb0htcyhhc2NlbnNpb24pICsgIiwiICsgcmFkVG9EbXMoZGVjbGluYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHJpZ2h0IGFzY2Vuc2lvbiwgaW4gcmFkaWFucy4gCisgICAgICAgICAqIFRoaXMgaXMgdGhlIHBvc2l0aW9uIGVhc3Qgb3Igd2VzdCBhbG9uZyB0aGUgZXF1YXRvcgorICAgICAgICAgKiByZWxhdGl2ZSB0byB0aGUgc3VuJ3MgcG9zaXRpb24gYXQgdGhlIHZlcm5hbCBlcXVpbm94LAorICAgICAgICAgKiB3aXRoIHBvc2l0aXZlIGFuZ2xlcyByZXByZXNlbnRpbmcgRWFzdC4KKyAgICAgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgZmluYWwgZG91YmxlIGFzY2Vuc2lvbjsKKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGVjbGluYXRpb24sIGluIHJhZGlhbnMuCisgICAgICAgICAqIFRoaXMgaXMgdGhlIHBvc2l0aW9uIG5vcnRoIG9yIHNvdXRoIG9mIHRoZSBlcXVhdG9yaWFsIHBsYW5lLAorICAgICAgICAgKiB3aXRoIHBvc2l0aXZlIGFuZ2xlcyByZXByZXNlbnRpbmcgbm9ydGguCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGZpbmFsIGRvdWJsZSBkZWNsaW5hdGlvbjsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb2YgYW4gIG9iamVjdCBpbiB0aGUgc2t5IHJlbGF0aXZlIHRvIAorICAgICAqIHRoZSBsb2NhbCBob3Jpem9uLgorICAgICAqIFRoZSA8aT5BbHRpdHVkZTwvaT4gcmVwcmVzZW50cyB0aGUgb2JqZWN0J3MgZWxldmF0aW9uIGFib3ZlIHRoZSBob3Jpem9uLAorICAgICAqIHdpdGggb2JqZWN0cyBiZWxvdyB0aGUgaG9yaXpvbiBoYXZpbmcgYSBuZWdhdGl2ZSBhbHRpdHVkZS4KKyAgICAgKiBUaGUgPGk+QXppbXV0aDwvaT4gaXMgdGhlIGdlb2dyYXBoaWMgZGlyZWN0aW9uIG9mIHRoZSBvYmplY3QgZnJvbSB0aGUKKyAgICAgKiBvYnNlcnZlcidzIHBvc2l0aW9uLCB3aXRoIDAgcmVwcmVzZW50aW5nIG5vcnRoLiAgVGhlIGF6aW11dGggaW5jcmVhc2VzCisgICAgICogY2xvY2t3aXNlIGZyb20gbm9ydGguCisgICAgICogPHA+CisgICAgICogTm90ZSB0aGF0IEhvcml6b24gb2JqZWN0cyBhcmUgaW1tdXRhYmxlIGFuZCBjYW5ub3QgYmUgbW9kaWZpZWQKKyAgICAgKiBvbmNlIHRoZXkgYXJlIGNvbnN0cnVjdGVkLiAgVGhpcyBhbGxvd3MgdGhlbSB0byBiZSBwYXNzZWQgYW5kIHJldHVybmVkIGJ5CisgICAgICogdmFsdWUgd2l0aG91dCB3b3JyeWluZyBhYm91dCB3aGV0aGVyIG90aGVyIGNvZGUgd2lsbCBtb2RpZnkgdGhlbS4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FsZW5kYXJBc3Ryb25vbWVyLkVjbGlwdGljCisgICAgICogQHNlZSBDYWxlbmRhckFzdHJvbm9tZXIuRXF1YXRvcmlhbAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgSG9yaXpvbiB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgSG9yaXpvbiBjb29yZGluYXRlIG9iamVjdC4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIEBwYXJhbSBhbHQgIFRoZSBhbHRpdHVkZSwgbWVhc3VyZWQgaW4gcmFkaWFucyBhYm92ZSB0aGUgaG9yaXpvbi4KKyAgICAgICAgICogQHBhcmFtIGF6aW0gVGhlIGF6aW11dGgsIG1lYXN1cmVkIGluIHJhZGlhbnMgY2xvY2t3aXNlIGZyb20gbm9ydGguCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEhvcml6b24oZG91YmxlIGFsdCwgZG91YmxlIGF6aW0pIHsKKyAgICAgICAgICAgIGFsdGl0dWRlID0gYWx0OworICAgICAgICAgICAgYXppbXV0aCA9IGF6aW07CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LCB3aXRoIHRoZQorICAgICAgICAgKiBhbmdsZXMgbWVhc3VyZWQgaW4gZGVncmVlcy4KKyAgICAgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZS50b1N0cmluZyhhbHRpdHVkZSpSQURfREVHKSArICIsIiArIChhemltdXRoKlJBRF9ERUcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKiogCisgICAgICAgICAqIFRoZSBvYmplY3QncyBhbHRpdHVkZSBhYm92ZSB0aGUgaG9yaXpvbiwgaW4gcmFkaWFucy4gCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGZpbmFsIGRvdWJsZSBhbHRpdHVkZTsKKyAgICAgICAgCisgICAgICAgIC8qKiAKKyAgICAgICAgICogVGhlIG9iamVjdCdzIGRpcmVjdGlvbiwgaW4gcmFkaWFucyBjbG9ja3dpc2UgZnJvbSBub3J0aC4gCisgICAgICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGZpbmFsIGRvdWJsZSBhemltdXRoOworICAgIH07CisKKyAgICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgcmFkVG9IbXMoZG91YmxlIGFuZ2xlKSB7CisgICAgICAgIGludCBocnMgPSAoaW50KSAoYW5nbGUqUkFEX0hPVVIpOworICAgICAgICBpbnQgbWluID0gKGludCkoKGFuZ2xlKlJBRF9IT1VSIC0gaHJzKSAqIDYwKTsKKyAgICAgICAgaW50IHNlYyA9IChpbnQpKChhbmdsZSpSQURfSE9VUiAtIGhycyAtIG1pbi82MC4wKSAqIDM2MDApOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEludGVnZXIudG9TdHJpbmcoaHJzKSArICJoIiArIG1pbiArICJtIiArIHNlYyArICJzIjsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHByaXZhdGUgU3RyaW5nIHJhZFRvRG1zKGRvdWJsZSBhbmdsZSkgeworICAgICAgICBpbnQgZGVnID0gKGludCkgKGFuZ2xlKlJBRF9ERUcpOworICAgICAgICBpbnQgbWluID0gKGludCkoKGFuZ2xlKlJBRF9ERUcgLSBkZWcpICogNjApOworICAgICAgICBpbnQgc2VjID0gKGludCkoKGFuZ2xlKlJBRF9ERUcgLSBkZWcgLSBtaW4vNjAuMCkgKiAzNjAwKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKGRlZykgKyAiXHUwMGIwIiArIG1pbiArICInIiArIHNlYyArICJcIiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ2FsZW5kYXJDYWNoZS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ2FsZW5kYXJDYWNoZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5MWYzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9DYWxlbmRhckNhY2hlLmphdmEKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL0F0dGljL0NhbGVuZGFyQ2FjaGUuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNCAxNjozODo1MiAkIAorICogJFJldmlzaW9uOiAxLjYgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKKy8qKgorICogQGludGVybmFsCisgKi8KK3B1YmxpYyBjbGFzcyBDYWxlbmRhckNhY2hlCit7CisgICAgLyoqCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgcHVibGljIENhbGVuZGFyQ2FjaGUoKSB7CisgICAgICAgIG1ha2VBcnJheXMoYXJyYXlTaXplKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIG1ha2VBcnJheXMoaW50IG5ld1NpemUpIHsKKyAgICAgICAga2V5cyAgICA9IG5ldyBsb25nW25ld1NpemVdOworICAgICAgICB2YWx1ZXMgID0gbmV3IGxvbmdbbmV3U2l6ZV07CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld1NpemU7IGkrKykgeworICAgICAgICAgICAgdmFsdWVzW2ldID0gRU1QVFk7CisgICAgICAgIH0KKyAgICAgICAgYXJyYXlTaXplID0gbmV3U2l6ZTsKKyAgICAgICAgdGhyZXNob2xkID0gKGludCkoYXJyYXlTaXplICogMC43NSk7CisgICAgICAgIHNpemUgPSAwOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIGxvbmcgZ2V0KGxvbmcga2V5KSB7CisgICAgICAgIHJldHVybiB2YWx1ZXNbZmluZEluZGV4KGtleSldOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcHV0KGxvbmcga2V5LCBsb25nIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHNpemUgPj0gdGhyZXNob2xkKSB7CisgICAgICAgICAgICByZWhhc2goKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgaW5kZXggPSBmaW5kSW5kZXgoa2V5KTsKKyAgICAgICAgCisgICAgICAgIGtleXNbaW5kZXhdID0ga2V5OworICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7CisgICAgICAgIHNpemUrKzsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgZmluZEluZGV4KGxvbmcga2V5KSB7CisgICAgICAgIGludCBpbmRleCA9IGhhc2goa2V5KTsKKyAgICAgICAgaW50IGRlbHRhID0gMDsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh2YWx1ZXNbaW5kZXhdICE9IEVNUFRZICYmIGtleXNbaW5kZXhdICE9IGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRlbHRhID09IDApIHsKKyAgICAgICAgICAgICAgICBkZWx0YSA9IGhhc2gyKGtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIGRlbHRhKSAlIGFycmF5U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCByZWhhc2goKQorICAgIHsKKyAgICAgICAgaW50IG9sZFNpemUgPSBhcnJheVNpemU7CisgICAgICAgIGxvbmdbXSBvbGRLZXlzID0ga2V5czsKKyAgICAgICAgbG9uZ1tdIG9sZFZhbHVlcyA9IHZhbHVlczsKKyAgICAgICAgCisgICAgICAgIGlmIChwSW5kZXggPCBwcmltZXMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgYXJyYXlTaXplID0gcHJpbWVzWysrcEluZGV4XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFycmF5U2l6ZSA9IGFycmF5U2l6ZSAqIDIgKyAxOworICAgICAgICB9CisgICAgICAgIHNpemUgPSAwOworICAgICAgICAKKyAgICAgICAgbWFrZUFycmF5cyhhcnJheVNpemUpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZFNpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKG9sZFZhbHVlc1tpXSAhPSBFTVBUWSkgeworICAgICAgICAgICAgICAgIHB1dChvbGRLZXlzW2ldLCBvbGRWYWx1ZXNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG9sZEtleXMgPSBvbGRWYWx1ZXMgPSBudWxsOyAvLyBIZWxwIG91dCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IKKyAgICB9CisgICAgCisgICAgCisgICAgLyoqCisgICAgICogUHJvZHVjZSBhIHVuaWZvcm1seS1kaXN0cmlidXRlZCBoYXNoIHZhbHVlIGZyb20gYW4gaW50ZWdlciBrZXkuCisgICAgICogVGhpcyBpcyBlc3NlbnRpYWxseSBhIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgKiB0aGF0IHVzZXMgdGhlIGtleSBhcyBpdHMgc2VlZCB2YWx1ZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGludCBoYXNoKGxvbmcga2V5KQorICAgIHsKKyAgICAgICAgaW50IGggPSAoaW50KSgoa2V5ICogMTU4MjEgKyAxKSAlIGFycmF5U2l6ZSk7CisgICAgICAgIGlmIChoIDwgMCkgeworICAgICAgICAgICAgaCArPSBhcnJheVNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGg7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgZmluYWwgaW50IGhhc2gyKGxvbmcga2V5KSB7CisgICAgICAgIHJldHVybiBhcnJheVNpemUgLSAyIC0gKGludCkoa2V5ICUgKGFycmF5U2l6ZS0yKSApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBpbnQgcHJpbWVzW10gPSB7ICAvLyA1LCAxNywgMzEsIDQ3LCAvLyBmb3IgdGVzdGluZworICAgICAgICA2MSwgMTI3LCA1MDksIDEwMjEsIDIwMzksIDQwOTMsIDgxOTEsIDE2MzgxLCAzMjc0OSwgNjU1MjEsCisgICAgICAgIDEzMTA3MSwgMjYyMTM5LCAKKyAgICB9OworCisgICAgcHJpdmF0ZSBpbnQgICAgIHBJbmRleCAgICAgID0gMDsKKyAgICBwcml2YXRlIGludCAgICAgc2l6ZSAgICAgICAgPSAwOworICAgIHByaXZhdGUgaW50ICAgICBhcnJheVNpemUgICA9IHByaW1lc1twSW5kZXhdOworICAgIHByaXZhdGUgaW50ICAgICB0aHJlc2hvbGQgICA9IChhcnJheVNpemUgKiAzKSAvIDQ7CisgICAgCisgICAgcHJpdmF0ZSBsb25nW10gIGtleXMgICAgICAgID0gbmV3IGxvbmdbYXJyYXlTaXplXTsKKyAgICBwcml2YXRlIGxvbmdbXSAgdmFsdWVzICAgICAgPSBuZXcgbG9uZ1thcnJheVNpemVdOworCisgICAgLyoqCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyAgbG9uZyBFTVBUWSAgID0gTG9uZy5NSU5fVkFMVUU7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9DYWxlbmRhckZhY3RvcnkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0NhbGVuZGFyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDk1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9DYWxlbmRhckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworLyoqCisgKiBAcHJvdG90eXBlCisgKi8KK2ludGVyZmFjZSBDYWxlbmRhckZhY3RvcnkgeworICAgIHB1YmxpYyBDYWxlbmRhciBjcmVhdGUoVGltZVpvbmUgdHosIExvY2FsZSBsb2MpOworICAgIHB1YmxpYyBTdHJpbmcgZmFjdG9yeU5hbWUoKTsKK30KKyAgICAgICAgCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9DYXNlSW5zZW5zaXRpdmVTdHJpbmcuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0Nhc2VJbnNlbnNpdGl2ZVN0cmluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4OTkyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9DYXNlSW5zZW5zaXRpdmVTdHJpbmcuamF2YQpAQCAtMCwwICsxLDcyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ2FzZUluc2Vuc2l0aXZlU3RyaW5nLmphdmEsdiAkCisgKiAkRGF0ZTogMjAwMi8xMi8wNSAwMToyNToxMiAkCisgKiAkUmV2aXNpb246IDEuNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS51dGlsOworCitpbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOworCisvKioKKyAqIEEgc3RyaW5nIHVzZWQgYXMgYSBrZXkgaW4gamF2YS51dGlsLkhhc2h0YWJsZSBhbmQgb3RoZXIKKyAqIGNvbGxlY3Rpb25zLiAgSXQgcmV0YWlucyBjYXNlIGluZm9ybWF0aW9uLCBidXQgaXRzIGVxdWFscygpIGFuZAorICogaGFzaENvZGUoKSBtZXRob2RzIGlnbm9yZSBjYXNlLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBjbGFzcyBDYXNlSW5zZW5zaXRpdmVTdHJpbmcgeworICAgIAorICAgIHByaXZhdGUgU3RyaW5nIHN0cmluZzsKKworICAgIHByaXZhdGUgaW50IGhhc2ggPSAwOworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gQ2FzZUluc2VudGl2ZVN0cmluZyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nCisgICAgICogQHBhcmFtIHMgVGhlIHN0cmluZyB0byBjb25zdHJ1Y3QgdGhpcyBvYmplY3QgZnJvbSAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nKFN0cmluZyBzKSB7CisgICAgICAgIHN0cmluZyA9IHM7CisgICAgfQorICAgIC8qKgorICAgICAqIHJldHVybnMgdGhlIHVuZGVybHlpbmcgc3RyaW5nIAorICAgICAqIEByZXR1cm4gU3RyaW5nCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorICAgIC8qKgorICAgICAqIENvbXBhcmUgdGhlIG9iamVjdCB3aXRoIHRoaXMgCisgICAgICogQHBhcmFtIG8gT2JqZWN0IHRvIGNvbXBhcmUgdGhpcyBvYmplY3Qgd2l0aCAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmcuZXF1YWxzSWdub3JlQ2FzZSgoKENhc2VJbnNlbnNpdGl2ZVN0cmluZylvKS5zdHJpbmcpOworICAgICAgICB9IGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLmVxdWFsc0lnbm9yZUNhc2UoKFN0cmluZylvKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlMikgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBoYXNoQ29kZSBvZiB0aGlzIG9iamVjdAorICAgICAqIEByZXR1cm4gaW50IGhhc2hjb2RlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgaWYgKGhhc2ggPT0gMCkgeworICAgICAgICAgICAgaGFzaCA9IFVDaGFyYWN0ZXIuZm9sZENhc2Uoc3RyaW5nLCB0cnVlKS5oYXNoQ29kZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNoOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL0NoaW5lc2VDYWxlbmRhci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ2hpbmVzZUNhbGVuZGFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWU0ZTUxYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0NoaW5lc2VDYWxlbmRhci5qYXZhCkBAIC0wLDAgKzEsODIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9DaGluZXNlQ2FsZW5kYXIuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzEyLzA1IDAxOjI1OjE0ICQKKyAqICRSZXZpc2lvbjogMS4xMyAkCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLio7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC4qOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogPGNvZGU+Q2hpbmVzZUNhbGVuZGFyPC9jb2RlPiBpcyBhIGNvbmNyZXRlIHN1YmNsYXNzIG9mIHtAbGluayBDYWxlbmRhcn0KKyAqIHRoYXQgaW1wbGVtZW50cyBhIHRyYWRpdGlvbmFsIENoaW5lc2UgY2FsZW5kYXIuICBUaGUgdHJhZGl0aW9uYWwgQ2hpbmVzZQorICogY2FsZW5kYXIgaXMgYSBsdW5pc29sYXIgY2FsZW5kYXI6IEVhY2ggbW9udGggc3RhcnRzIG9uIGEgbmV3IG1vb24sIGFuZAorICogdGhlIG1vbnRocyBhcmUgbnVtYmVyZWQgYWNjb3JkaW5nIHRvIHNvbGFyIGV2ZW50cywgc3BlY2lmaWNhbGx5LCB0bworICogZ3VhcmFudGVlIHRoYXQgbW9udGggMTEgYWx3YXlzIGNvbnRhaW5zIHRoZSB3aW50ZXIgc29sc3RpY2UuICBJbiBvcmRlcgorICogdG8gYWNjb21wbGlzaCB0aGlzLCBsZWFwIG1vbnRocyBhcmUgaW5zZXJ0ZWQgaW4gY2VydGFpbiB5ZWFycy4gIExlYXAKKyAqIG1vbnRocyBhcmUgbnVtYmVyZWQgdGhlIHNhbWUgYXMgdGhlIG1vbnRoIHRoZXkgZm9sbG93LiAgVGhlIGRlY2lzaW9uIG9mCisgKiB3aGljaCBtb250aCBpcyBhIGxlYXAgbW9udGggZGVwZW5kcyBvbiB0aGUgcmVsYXRpdmUgbW92ZW1lbnRzIG9mIHRoZSBzdW4KKyAqIGFuZCBtb29uLgorICoKKyAqIDxwPlRoaXMgY2xhc3MgZGVmaW5lcyBvbmUgYWRkaXRpb24gZmllbGQgYmV5b25kIHRob3NlIGRlZmluZWQgYnkKKyAqIDxjb2RlPkNhbGVuZGFyPC9jb2RlPjogVGhlIDxjb2RlPklTX0xFQVBfTU9OVEg8L2NvZGU+IGZpZWxkIHRha2VzIHRoZQorICogdmFsdWUgb2YgMCBmb3Igbm9ybWFsIG1vbnRocywgb3IgMSBmb3IgbGVhcCBtb250aHMuCisgKgorICogPHA+QWxsIGFzdHJvbm9taWNhbCBjb21wdXRhdGlvbnMgYXJlIHBlcmZvcm1lZCB3aXRoIHJlc3BlY3QgdG8gYSB0aW1lCisgKiB6b25lIG9mIEdNVCs4OjAwIGFuZCBhIGxvbmdpdHVkZSBvZiAxMjAgZGVncmVlcyBlYXN0LiAgQWx0aG91Z2ggc29tZQorICogY2FsZW5kYXJzIGltcGxlbWVudCBhIGhpc3RvcmljYWxseSBtb3JlIGFjY3VyYXRlIGNvbnZlbnRpb24gb2YgdXNpbmcKKyAqIEJlaWppbmcncyBsb2NhbCBsb25naXR1ZGUgKDExNiBkZWdyZWVzIDI1IG1pbnV0ZXMgZWFzdCkgYW5kIHRpbWUgem9uZQorICogKEdNVCs3OjQ1OjQwKSBmb3IgZGF0ZXMgYmVmb3JlIDE5MjksIHdlIGRvIG5vdCBpbXBsZW1lbnQgdGhpcyBoZXJlLgorICoKKyAqIDxwPlllYXJzIGFyZSBjb3VudGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cyBpbiB0aGUgQ2hpbmVzZSBjYWxlbmRhci4gIFRoZQorICogZmlyc3QgbWV0aG9kIGlzIGJ5IHNlcXVlbnRpYWwgbnVtYmVyaW5nIGZyb20gdGhlIDYxc3QgeWVhciBvZiB0aGUgcmVpZ24KKyAqIG9mIEh1YW5nIERpLCAyNjM3IEJDRSwgd2hpY2ggaXMgZGVzaWduYXRlZCB5ZWFyIDEgb24gdGhlIENoaW5lc2UKKyAqIGNhbGVuZGFyLiAgVGhlIHNlY29uZCBtZXRob2QgdXNlcyA2MC15ZWFyIGN5Y2xlcyBmcm9tIHRoZSBzYW1lIHN0YXJ0aW5nCisgKiBwb2ludCwgd2hpY2ggaXMgZGVzaWduYXRlZCB5ZWFyIDEgb2YgY3ljbGUgMS4gIEluIHRoaXMgY2xhc3MsIHRoZQorICogPGNvZGU+RVhURU5ERURfWUVBUjwvY29kZT4gZmllbGQgY29udGFpbnMgdGhlIHNlcXVlbnRpYWwgeWVhciBjb3VudC4KKyAqIFRoZSA8Y29kZT5FUkE8L2NvZGU+IGZpZWxkIGNvbnRhaW5zIHRoZSBjeWNsZSBudW1iZXIsIGFuZCB0aGUKKyAqIDxjb2RlPllFQVI8L2NvZGU+IGZpZWxkIGNvbnRhaW5zIHRoZSB5ZWFyIG9mIHRoZSBjeWNsZSwgYSB2YWx1ZSBiZXR3ZWVuCisgKiAxIGFuZCA2MC4KKyAqCisgKiA8cD5UaGVyZSBpcyBzb21lIHZhcmlhdGlvbiBpbiB3aGF0IGlzIGNvbnNpZGVyZWQgdGhlIHN0YXJ0aW5nIHBvaW50IG9mCisgKiB0aGUgY2FsZW5kYXIsIHdpdGggc29tZSBzb3VyY2VzIHN0YXJ0aW5nIGluIHRoZSBmaXJzdCB5ZWFyIG9mIHRoZSByZWlnbgorICogb2YgSHVhbmcgRGksIHJhdGhlciB0aGFuIHRoZSA2MXN0LiAgVGhpcyBnaXZlcyBjb250aW51b3VzIHllYXIgbnVtYmVycworICogNjAgeWVhcnMgZ3JlYXRlciBhbmQgY3ljbGUgbnVtYmVycyBvbmUgZ3JlYXRlciB0aGFuIHdoYXQgdGhpcyBjbGFzcworICogaW1wbGVtZW50cy4KKyAqCisgKiA8cD5CZWNhdXNlIDxjb2RlPkNoaW5lc2VDYWxlbmRhcjwvY29kZT4gZGVmaW5lcyBhbiBhZGRpdGlvbmFsIGZpZWxkIGFuZAorICogcmVkZWZpbmVzIHRoZSB3YXkgdGhlIDxjb2RlPkVSQTwvY29kZT4gZmllbGQgaXMgdXNlZCwgaXQgcmVxdWlyZXMgYSBuZXcKKyAqIGZvcm1hdCBjbGFzcywgPGNvZGU+Q2hpbmVzZURhdGVGb3JtYXQ8L2NvZGU+LiAgQXMgYWx3YXlzLCB1c2UgdGhlCisgKiBtZXRob2RzIDxjb2RlPkRhdGVGb3JtYXQuZ2V0WHh4SW5zdGFuY2UoQ2FsZW5kYXIgY2FsLC4uLik8L2NvZGU+IHRvCisgKiBvYnRhaW4gYSBmb3JtYXR0ZXIgZm9yIHRoaXMgY2FsZW5kYXIuCisgKgorICogPHA+UmVmZXJlbmNlczo8dWw+CisgKiAKKyAqIDxsaT5EZXJzaG93aXR6IGFuZCBSZWluZ29sZCwgPGk+Q2FsZW5kcmljYWwgQ2FsY3VsYXRpb25zPC9pPiwKKyAqIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzLCAxOTk3PC9saT4KKyAqIAorICogPGxpPkhlbG1lciBBc2xha3NlbidzCisgKiA8YSBocmVmPSJodHRwOi8vd3d3Lm1hdGgubnVzLmVkdS5zZy9hc2xha3Nlbi9jYWxlbmRhci9jaGluZXNlLnNodG1sIj4KKyAqIENoaW5lc2UgQ2FsZW5kYXIgcGFnZTwvYT48L2xpPgorICoKKyAqIDxsaT5UaGUgPGEgaHJlZj0iaHR0cDovL3d3dy50b25kZXJpbmcuZGsvY2xhdXMvY2FsZW5kYXIuaHRtbCI+CisgKiBDYWxlbmRhciBGQVE8L2E+PC9saT4KKyAqCisgKiA8L3VsPgorICogQHNlZSBjb20uaWJtLmljdS50ZXh0LkNoaW5lc2VEYXRlRm9ybWF0CisgKiBAYXV0aG9yIEFsYW4gTGl1CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGNsYXNzIENoaW5lc2VDYWxlbmRhciBleHRlbmRzIENhbGVuZGFyIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRGV2ZWxvcGVyIE5vdGVzCisgICAgLy8gCisgICAgLy8gVGltZSBpcyByZXByZXNlbnRlZCBhcyBhIHNjYWxhciBpbiB0d28gd2F5cyBpbiB0aGlzIGNsYXNzLiAgT25lIGlzCisgICAgLy8gdGhlIHVzdWFsIFVUQyBlcG9jaCBtaWxsaXMsIHRoYXQgaXMsIG1pbGxpc2Vjb25kcyBhZnRlciBKYW51YXJ5IDEsCisgICAgLy8gMTk3MCBHcmVnb3JpYW4sIDA6MDA6MDAuMDAwIFVUQy4gIFRoZSBvdGhlciBpcyBpbiB0ZXJtcyBvZiAnbG9jYWwKKyAgICAvLyBkYXlzLicgIFRoaXMgaXMgdGhlIG51bWJlciBvZiBkYXlzIGFmdGVyIEphbnVhcnkgMSwgMTk3MCBHcmVnb3JpYW4sCisgICAgLy8gbG9jYWwgdG8gQmVpamluZywgQ2hpbmEgKHNpbmNlIGFsbCBjb21wdXRhdGlvbnMgb2YgdGhlIENoaW5lc2UKKyAgICAvLyBjYWxlbmRhciBhcmUgZG9uZSBpbiBCZWlqaW5nKS4gIFRoYXQgaXMsIDAgcmVwcmVzZW50cyBKYW51YXJ5IDEsCisgICAgLy8gMTk3MCAwOjAwIEFzaWEvU2hhbmdoYWkuICBDb252ZXJzaW9uIG9mIGxvY2FsIGRheXMgdG8gYW5kIGZyb20KKyAgICAvLyBzdGFuZGFyZCBlcG9jaCBtaWxsaXNlY29uZHMgaXMgYWNjb21wbGlzaGVkIGJ5IHRoZSBkYXlzVG9NaWxsaXMoKQorICAgIC8vIGFuZCBtaWxsaXNUb0RheXMoKSBtZXRob2RzLgorICAgIC8vIAorICAgIC8vIFNldmVyYWwgbWV0aG9kcyB1c2UgY2FjaGVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuICBDYWNoZXMgYXJlIGF0CisgICAgLy8gdGhlIG9iamVjdCwgbm90IGNsYXNzIGxldmVsLCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHR5cGljYWwKKyAgICAvLyB1c2FnZSB3aWxsIGJlIHRvIGhhdmUgb25lIGluc3RhbmNlIG9mIENoaW5lc2VDYWxlbmRhciBhdCBhIHRpbWUuCisgCisgICAgLyoqCisgICAgICogV2UgaGF2ZSBvbmUgaW5zdGFuY2UgcGVyIG9iamVjdCwgYW5kIHdlIGRvbid0IHN5bmNocm9uaXplIGl0IGJlY2F1c2UKKyAgICAgKiBDYWxlbmRhciBkb2Vzbid0IHN1cHBvcnQgbXVsdGl0aHJlYWRlZCBleGVjdXRpb24gaW4gdGhlIGZpcnN0IHBsYWNlLgorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IENhbGVuZGFyQXN0cm9ub21lciBhc3RybyA9IG5ldyBDYWxlbmRhckFzdHJvbm9tZXIoKTsKKworICAgIC8qKgorICAgICAqIENhY2hlIHRoYXQgbWFwcyBHcmVnb3JpYW4geWVhciB0byBsb2NhbCBkYXlzIG9mIHdpbnRlciBzb2xzdGljZS4KKyAgICAgKiBAc2VlICN3aW50ZXJTb2xzdGljZQorICAgICAqLworICAgIHByaXZhdGUgdHJhbnNpZW50IENhbGVuZGFyQ2FjaGUgd2ludGVyU29sc3RpY2VDYWNoZSA9IG5ldyBDYWxlbmRhckNhY2hlKCk7CisKKyAgICAvKioKKyAgICAgKiBDYWNoZSB0aGF0IG1hcHMgR3JlZ29yaWFuIHllYXIgdG8gbG9jYWwgZGF5cyBvZiBDaGluZXNlIG5ldyB5ZWFyLgorICAgICAqIEBzZWUgI25ld1llYXIKKyAgICAgKi8KKyAgICBwcml2YXRlIHRyYW5zaWVudCBDYWxlbmRhckNhY2hlIG5ld1llYXJDYWNoZSA9IG5ldyBDYWxlbmRhckNhY2hlKCk7CisKKyAgICAvKioKKyAgICAgKiBUcnVlIGlmIHRoZSBjdXJyZW50IHllYXIgaXMgYSBsZWFwIHllYXIuICBVcGRhdGVkIHdpdGggZWFjaCB0aW1lIHRvCisgICAgICogZmllbGRzIHJlc29sdXRpb24uCisgICAgICogQHNlZSAjY29tcHV0ZUNoaW5lc2VGaWVsZHMKKyAgICAgKi8KKyAgICBwcml2YXRlIHRyYW5zaWVudCBib29sZWFuIGlzTGVhcFllYXI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIENvbnN0cnVjdG9ycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBDaGluZXNlIGNhbGVuZGFyIHdpdGggdGhlIGRlZmF1bHQgdGltZSB6b25lIGFuZCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIENoaW5lc2VDYWxlbmRhcigpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBDaGluZXNlIGNhbGVuZGFyIHdpdGggdGhlIGdpdmVuIHRpbWUgem9uZSBhbmQgbG9jYWxlLgorICAgICAqIEBwYXJhbSB6b25lIHRpbWUgem9uZSBmb3IgdGhpcyBjYWxlbmRhcgorICAgICAqIEBwYXJhbSBsb2NhbGUgbG9jYWxlIGZvciB0aGlzIGNhbGVuZGFyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIENoaW5lc2VDYWxlbmRhcihUaW1lWm9uZSB6b25lLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHN1cGVyKHpvbmUsIGxvY2FsZSk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgY29uc3RhbnRzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEZpZWxkIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgbW9udGggaXMgYSBsZWFwIG1vbnRoLgorICAgICAqIFNob3VsZCBoYXZlIGEgdmFsdWUgb2YgMCBmb3Igbm9uLWxlYXAgbW9udGhzLCBhbmQgMSBmb3IgbGVhcCBtb250aHMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgSVNfTEVBUF9NT05USCA9IEJBU0VfRklFTERfQ09VTlQ7CisKKyAgICAvKioKKyAgICAgKiBDb3VudCBvZiBmaWVsZHMgaW4gdGhpcyBjbGFzcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklFTERfQ09VTlQgPSBJU19MRUFQX01PTlRIICsgMTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQ2FsZW5kYXIgZnJhbWV3b3JrCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIENhbGVuZGFyIHRvIGFsbG9jYXRlIG91ciBhZGRpdGlvbmFsIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnRbXSBoYW5kbGVDcmVhdGVGaWVsZHMoKSB7CisgICAgICAgIHJldHVybiBuZXcgaW50W0ZJRUxEX0NPVU5UXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcnJheSBkZWZpbmluZyB0aGUgbGltaXRzIG9mIGZpZWxkIHZhbHVlcyBmb3IgdGhpcyBjbGFzcy4gIEZpZWxkCisgICAgICogbGltaXRzIHdoaWNoIGFyZSBpbnZhcmlhbnQgd2l0aCByZXNwZWN0IHRvIGNhbGVuZGFyIHN5c3RlbSBhbmQKKyAgICAgKiBkZWZpbmVkIGJ5IENhbGVuZGFyIGFyZSBsZWZ0IGJsYW5rLgorICAgICAqCisgICAgICogTm90ZXM6CisgICAgICoKKyAgICAgKiBFUkEgNTAwMDAwMCAvIDYwID0gODMzMzMuCisgICAgICoKKyAgICAgKiBNT05USCBUaGVyZSBhcmUgMTIgb3IgMTMgbHVuYXIgbW9udGhzIGluIGEgeWVhci4gIEhvd2V2ZXIsIHdlIGFsd2F5cworICAgICAqIG51bWJlciB0aGVtIDAuLjExLCB3aXRoIGFuIGludGVyY2FsYXRlZCwgaWRlbnRpY2FsbHkgbnVtYmVyZWQgbGVhcAorICAgICAqIG1vbnRoLCB3aGVuIG5lY2Vzc2FyeS4KKyAgICAgKgorICAgICAqIERBWV9PRl9ZRUFSIEluIGEgbm9uLWxlYXAgeWVhciB0aGVyZSBhcmUgMzUzLCAzNTQsIG9yIDM1NSBkYXlzLiAgSW4KKyAgICAgKiBhIGxlYXAgeWVhciB0aGVyZSBhcmUgMzgzLCAzODQsIG9yIDM4NSBkYXlzLgorICAgICAqCisgICAgICogV0VFS19PRl9ZRUFSIFRoZSBsZWFzdCBtYXhpbXVtIG9jY3VycyBpZiB0aGVyZSBhcmUgMzUzIGRheXMgaW4gdGhlCisgICAgICogeWVhciwgYW5kIHRoZSBmaXJzdCA2IGFyZSB0aGUgbGFzdCB3ZWVrIG9mIHRoZSBwcmV2aW91cyB5ZWFyLiAgVGhlbgorICAgICAqIHdlIGhhdmUgNDkgZnVsbCB3ZWVrcyBhbmQgNCBkYXlzIGluIHRoZSBsYXN0IHdlZWs6IDYgKyA0OSo3ICsgNCA9CisgICAgICogMzUzLiAgU28gdGhlIGxlYXN0IG1heGltdW0gaXMgNTAuICBUaGUgbWF4aW11bSBvY2N1cnMgaWYgdGhlcmUgYXJlCisgICAgICogMzg1IGRheXMgaW4gdGhlIHllYXIsIGFuZCBXT1kgMSBleHRlbmRzIDYgZGF5cyBpbnRvIHRoZSBwcmlvciB5ZWFyLgorICAgICAqIFRoZW4gdGhlcmUgYXJlIDU0IGZ1bGwgd2Vla3MsIGFuZCA2IGRheXMgaW4gdGhlIGxhc3Qgd2VlazogMSArIDU0KjcKKyAgICAgKiArIDYgPSAzODUuICBUaGUgNiBkYXlzIG9mIHRoZSBsYXN0IHdlZWsgd2lsbCBmYWxsIGludG8gV09ZIDEgb2YgdGhlCisgICAgICogbmV4dCB5ZWFyLiAgTWF4aW11bSBpcyA1NS4KKyAgICAgKgorICAgICAqIFdFRUtfT0ZfTU9OVEggSW4gYSAyOSBkYXkgbW9udGgsIGlmIHRoZSBmaXJzdCA3IGRheXMgbWFrZSB1cCB3ZWVrIDEKKyAgICAgKiB0aGF0IGxlYXZlcyAzIGZ1bGwgd2Vla3MgYW5kIDEgZGF5IGF0IHRoZSBlbmQuICBUaGUgbGVhc3QgbWF4aW11bSBpcworICAgICAqIHRodXMgNS4gIEluIGEgMzAgZGF5cyBtb250aCwgaWYgdGhlIHByZXZpb3VzIDYgZGF5cyBiZWxvbmcgV09NIDEgb2YKKyAgICAgKiB0aGlzIG1vbnRoLCB3ZSBoYXZlIDQgZnVsbCB3ZWVrcyBhbmQgMSBkYXlzIGF0IHRoZSBlbmQgKHdoaWNoCisgICAgICogdGVjaG5pY2FsbHkgd2lsbCBiZSBXT00gMSBvZiB0aGUgbmV4dCBtb250aCwgYnV0IHdpbGwgYmUgcmVwb3J0ZWQgYnkKKyAgICAgKiB0aW1lLT5maWVsZHMgYW5kIGhlbmNlIGJ5IGdldEFjdHVhbE1heGltdW0gYXMgV09NIDYgb2YgdGhpcyBtb250aCkuCisgICAgICogTWF4aW11bSBpcyA2LgorICAgICAqCisgICAgICogREFZX09GX1dFRUtfSU5fTU9OVEggSW4gYSAyOSBvciAzMCBkYXkgbW9udGgsIHRoZXJlIGFyZSA0IGZ1bGwgd2Vla3MKKyAgICAgKiBwbHVzIDEgb3IgMiBkYXlzIGF0IHRoZSBlbmQsIHNvIHRoZSBtYXhpbXVtIGlzIGFsd2F5cyA1LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU1JVFNbXVtdID0geworICAgICAgICAvLyBNaW5pbXVtICBHcmVhdGVzdCAgICBMZWFzdCAgTWF4aW11bQorICAgICAgICAvLyAgICAgICAgICAgTWluaW11bSAgTWF4aW11bQorICAgICAgICB7ICAgICAgICAxLCAgICAgICAgMSwgICA4MzMzMywgICA4MzMzMyB9LCAvLyBFUkEKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsICAgICAgNzAsICAgICAgNzAgfSwgLy8gWUVBUgorICAgICAgICB7ICAgICAgICAwLCAgICAgICAgMCwgICAgICAxMSwgICAgICAxMSB9LCAvLyBNT05USAorICAgICAgICB7ICAgICAgICAxLCAgICAgICAgMSwgICAgICA1MCwgICAgICA1NSB9LCAvLyBXRUVLX09GX1lFQVIKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsICAgICAgIDUsICAgICAgIDYgfSwgLy8gV0VFS19PRl9NT05USAorICAgICAgICB7ICAgICAgICAxLCAgICAgICAgMSwgICAgICAyOSwgICAgICAzMCB9LCAvLyBEQVlfT0ZfTU9OVEgKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsICAgICAzNTMsICAgICAzODUgfSwgLy8gREFZX09GX1lFQVIKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gREFZX09GX1dFRUsKKyAgICAgICAgeyAgICAgICAtMSwgICAgICAgLTEsICAgICAgIDUsICAgICAgIDUgfSwgLy8gREFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gQU1fUE0KKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gSE9VUgorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBIT1VSX09GX0RBWQorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBNSU5VVEUKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gU0VDT05ECisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIE1JTExJU0VDT05ECisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIFpPTkVfT0ZGU0VUCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIERTVF9PRkZTRVQKKyAgICAgICAgeyAtNTAwMDAwMSwgLTUwMDAwMDEsIDUwMDAwMDEsIDUwMDAwMDEgfSwgLy8gWUVBUl9XT1kKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gRE9XX0xPQ0FMCisgICAgICAgIHsgLTUwMDAwMDAsIC01MDAwMDAwLCA1MDAwMDAwLCA1MDAwMDAwIH0sIC8vIEVYVEVOREVEX1lFQVIKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gSlVMSUFOX0RBWQorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBNSUxMSVNFQ09ORFNfSU5fREFZCisgICAgICAgIHsgICAgICAgIDAsICAgICAgICAwLCAgICAgICAxLCAgICAgICAxIH0sIC8vIElTX0xFQVBfTU9OVEgKKyAgICB9OworCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgQ2FsZW5kYXIgdG8gcmV0dXJuIHRoZSBsaW1pdCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0TGltaXQoaW50IGZpZWxkLCBpbnQgbGltaXRUeXBlKSB7CisgICAgICAgIHJldHVybiBMSU1JVFNbZmllbGRdW2xpbWl0VHlwZV07CisgICAgfQorCisgICAgLyoqCisgICAgICogSW1wbGVtZW50IGFic3RyYWN0IENhbGVuZGFyIG1ldGhvZCB0byByZXR1cm4gdGhlIGV4dGVuZGVkIHllYXIKKyAgICAgKiBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IGZpZWxkcy4gIFRoaXMgd2lsbCB1c2UgZWl0aGVyIHRoZSBFUkEgYW5kCisgICAgICogWUVBUiBmaWVsZCBhcyB0aGUgY3ljbGUgYW5kIHllYXItb2YtY3ljbGUsIG9yIHRoZSBFWFRFTkRFRF9ZRUFSCisgICAgICogZmllbGQgYXMgdGhlIGNvbnRpbnVvdXMgeWVhciBjb3VudCwgZGVwZW5kaW5nIG9uIHdoaWNoIGlzIG5ld2VyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0RXh0ZW5kZWRZZWFyKCkgeworICAgICAgICBpbnQgeWVhcjsKKyAgICAgICAgaWYgKG5ld2VzdFN0YW1wKEVSQSwgWUVBUiwgVU5TRVQpIDw9IGdldFN0YW1wKEVYVEVOREVEX1lFQVIpKSB7CisgICAgICAgICAgICB5ZWFyID0gaW50ZXJuYWxHZXQoRVhURU5ERURfWUVBUiwgMSk7IC8vIERlZmF1bHQgdG8geWVhciAxCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgY3ljbGUgPSBpbnRlcm5hbEdldChFUkEsIDEpIC0gMTsgLy8gMC1iYXNlZCBjeWNsZQorICAgICAgICAgICAgeWVhciA9IGN5Y2xlICogNjAgKyBpbnRlcm5hbEdldChZRUFSLCAxKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geWVhcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSBDYWxlbmRhciBtZXRob2QgdG8gcmV0dXJuIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgZ2l2ZW4KKyAgICAgKiBleHRlbmRlZCB5ZWFyIGFuZCBtb250aC4KKyAgICAgKgorICAgICAqIDxwPk5vdGU6IFRoaXMgbWV0aG9kIGFsc28gcmVhZHMgdGhlIElTX0xFQVBfTU9OVEggZmllbGQgdG8gZGV0ZXJtaW5lCisgICAgICogd2hldGhlciBvciBub3QgdGhlIGdpdmVuIG1vbnRoIGlzIGEgbGVhcCBtb250aC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUdldE1vbnRoTGVuZ3RoKGludCBleHRlbmRlZFllYXIsIGludCBtb250aCkgeworICAgICAgICBpbnQgdGhpc1N0YXJ0ID0gaGFuZGxlQ29tcHV0ZU1vbnRoU3RhcnQoZXh0ZW5kZWRZZWFyLCBtb250aCwgdHJ1ZSkgLQorICAgICAgICAgICAgRVBPQ0hfSlVMSUFOX0RBWSArIDE7IC8vIEp1bGlhbiBkYXkgLT4gbG9jYWwgZGF5cworICAgICAgICBpbnQgbmV4dFN0YXJ0ID0gbmV3TW9vbk5lYXIodGhpc1N0YXJ0ICsgU1lOT0RJQ19HQVAsIHRydWUpOworICAgICAgICByZXR1cm4gbmV4dFN0YXJ0IC0gdGhpc1N0YXJ0OworICAgIH0KKworICAgIC8qKgorICAgICAqIEZyYW1ld29yayBtZXRob2QgdG8gY3JlYXRlIGEgY2FsZW5kYXItc3BlY2lmaWMgRGF0ZUZvcm1hdCBvYmplY3QKKyAgICAgKiB1c2luZyB0aGUgdGhlIGdpdmVuIHBhdHRlcm4uICBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IKKyAgICAgKiBjcmVhdGluZyB0aGUgY2FsZW5kYXItIHNwZWNpZmljIERhdGVGb3JtYXQgYW5kIERhdGVGb3JtYXRTeW1ib2xzCisgICAgICogb2JqZWN0cyBhcyBuZWVkZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIERhdGVGb3JtYXQgaGFuZGxlR2V0RGF0ZUZvcm1hdChTdHJpbmcgcGF0dGVybiwgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICByZXR1cm4gbmV3IENoaW5lc2VEYXRlRm9ybWF0KHBhdHRlcm4sIGxvY2FsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmllbGQgcmVzb2x1dGlvbiB0YWJsZSB0aGF0IGluY29ycG9yYXRlcyBJU19MRUFQX01PTlRILgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBpbnRbXVtdW10gQ0hJTkVTRV9EQVRFX1BSRUNFREVOQ0UgPSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgREFZX09GX01PTlRIIH0sCisgICAgICAgICAgICB7IFdFRUtfT0ZfWUVBUiwgREFZX09GX1dFRUsgfSwKKyAgICAgICAgICAgIHsgV0VFS19PRl9NT05USCwgREFZX09GX1dFRUsgfSwKKyAgICAgICAgICAgIHsgREFZX09GX1dFRUtfSU5fTU9OVEgsIERBWV9PRl9XRUVLIH0sCisgICAgICAgICAgICB7IFdFRUtfT0ZfWUVBUiwgRE9XX0xPQ0FMIH0sCisgICAgICAgICAgICB7IFdFRUtfT0ZfTU9OVEgsIERPV19MT0NBTCB9LAorICAgICAgICAgICAgeyBEQVlfT0ZfV0VFS19JTl9NT05USCwgRE9XX0xPQ0FMIH0sCisgICAgICAgICAgICB7IERBWV9PRl9ZRUFSIH0sCisgICAgICAgICAgICB7IFJFU09MVkVfUkVNQVAgfCBEQVlfT0ZfTU9OVEgsIElTX0xFQVBfTU9OVEggfSwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgeyBXRUVLX09GX1lFQVIgfSwKKyAgICAgICAgICAgIHsgV0VFS19PRl9NT05USCB9LAorICAgICAgICAgICAgeyBEQVlfT0ZfV0VFS19JTl9NT05USCB9LAorICAgICAgICAgICAgeyBSRVNPTFZFX1JFTUFQIHwgREFZX09GX1dFRUtfSU5fTU9OVEgsIERBWV9PRl9XRUVLIH0sCisgICAgICAgICAgICB7IFJFU09MVkVfUkVNQVAgfCBEQVlfT0ZfV0VFS19JTl9NT05USCwgRE9XX0xPQ0FMIH0sCisgICAgICAgIH0sCisgICAgfTsKKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIENhbGVuZGFyIHRvIGFkZCBJU19MRUFQX01PTlRIIHRvIHRoZSBmaWVsZCByZXNvbHV0aW9uCisgICAgICogdGFibGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludFtdW11bXSBnZXRGaWVsZFJlc29sdXRpb25UYWJsZSgpIHsKKyAgICAgICAgcmV0dXJuIENISU5FU0VfREFURV9QUkVDRURFTkNFOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkanVzdCB0aGlzIGNhbGVuZGFyIHRvIGJlIGRlbHRhIG1vbnRocyBiZWZvcmUgb3IgYWZ0ZXIgYSBnaXZlbgorICAgICAqIHN0YXJ0IHBvc2l0aW9uLCBwaW5uaW5nIHRoZSBkYXkgb2YgbW9udGggaWYgbmVjZXNzYXJ5LiAgVGhlIHN0YXJ0CisgICAgICogcG9zaXRpb24gaXMgZ2l2ZW4gYXMgYSBsb2NhbCBkYXlzIG51bWJlciBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBtb250aAorICAgICAqIGFuZCBhIGRheS1vZi1tb250aC4gIFVzZWQgYnkgYWRkKCkgYW5kIHJvbGwoKS4KKyAgICAgKiBAcGFyYW0gbmV3TW9vbiB0aGUgbG9jYWwgZGF5cyBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aCBvZiB0aGUKKyAgICAgKiBzdGFydCBwb3NpdGlvbiAoZGF5cyBhZnRlciBKYW51YXJ5IDEsIDE5NzAgMDowMCBBc2lhL1NoYW5naGFpKQorICAgICAqIEBwYXJhbSBkb20gdGhlIDEtYmFzZWQgZGF5LW9mLW1vbnRoIG9mIHRoZSBzdGFydCBwb3NpdGlvbgorICAgICAqIEBwYXJhbSBkZWx0YSB0aGUgbnVtYmVyIG9mIG1vbnRocyB0byBtb3ZlIGZvcndhcmQgb3IgYmFja3dhcmQgZnJvbQorICAgICAqIHRoZSBzdGFydCBwb3NpdGlvbgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBvZmZzZXRNb250aChpbnQgbmV3TW9vbiwgaW50IGRvbSwgaW50IGRlbHRhKSB7CisgICAgICAgIC8vIE1vdmUgdG8gdGhlIG1pZGRsZSBvZiB0aGUgbW9udGggYmVmb3JlIG91ciB0YXJnZXQgbW9udGguCisgICAgICAgIG5ld01vb24gKz0gKGludCkgKENhbGVuZGFyQXN0cm9ub21lci5TWU5PRElDX01PTlRIICogKGRlbHRhIC0gMC41KSk7CisKKyAgICAgICAgLy8gU2VhcmNoIGZvcndhcmQgdG8gdGhlIHRhcmdldCBtb250aCdzIG5ldyBtb29uCisgICAgICAgIG5ld01vb24gPSBuZXdNb29uTmVhcihuZXdNb29uLCB0cnVlKTsKKworICAgICAgICAvLyBGaW5kIHRoZSB0YXJnZXQgZG9tCisgICAgICAgIGludCBqZCA9IG5ld01vb24gKyBFUE9DSF9KVUxJQU5fREFZIC0gMSArIGRvbTsKKworICAgICAgICAvLyBQaW4gdGhlIGRvbS4gIEluIHRoaXMgY2FsZW5kYXIgYWxsIG1vbnRocyBhcmUgMjkgb3IgMzAgZGF5cworICAgICAgICAvLyBzbyBwaW5uaW5nIGp1c3QgbWVhbnMgaGFuZGxpbmcgZG9tIDMwLgorICAgICAgICBpZiAoZG9tID4gMjkpIHsKKyAgICAgICAgICAgIHNldChKVUxJQU5fREFZLCBqZC0xKTsKKyAgICAgICAgICAgIC8vIFRPRE8gRml4IHRoaXMuICBXZSByZWFsbHkgc2hvdWxkbid0IGV2ZXIgaGF2ZSB0bworICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjYWxsIGNvbXBsZXRlKCkuICBUaGlzIGlzIGVpdGhlciBhIGJ1ZyBpbgorICAgICAgICAgICAgLy8gdGhpcyBtZXRob2QsIGluIENoaW5lc2VDYWxlbmRhciwgb3IgaW4KKyAgICAgICAgICAgIC8vIENhbGVuZGFyLmdldEFjdHVhbE1heGltdW0oKS4gIEkgc3VzcGVjdCB0aGUgbGFzdC4KKyAgICAgICAgICAgIGNvbXBsZXRlKCk7CisgICAgICAgICAgICBpZiAoZ2V0QWN0dWFsTWF4aW11bShEQVlfT0ZfTU9OVEgpID49IGRvbSkgeworICAgICAgICAgICAgICAgIHNldChKVUxJQU5fREFZLCBqZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXQoSlVMSUFOX0RBWSwgamQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgQ2FsZW5kYXIgdG8gaGFuZGxlIGxlYXAgbW9udGhzIHByb3Blcmx5LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChpbnQgZmllbGQsIGludCBhbW91bnQpIHsKKyAgICAgICAgc3dpdGNoIChmaWVsZCkgeworICAgICAgICBjYXNlIE1PTlRIOgorICAgICAgICAgICAgaWYgKGFtb3VudCAhPSAwKSB7CisgICAgICAgICAgICAgICAgaW50IGRvbSA9IGdldChEQVlfT0ZfTU9OVEgpOworICAgICAgICAgICAgICAgIGludCBkYXkgPSBnZXQoSlVMSUFOX0RBWSkgLSBFUE9DSF9KVUxJQU5fREFZOyAvLyBHZXQgbG9jYWwgZGF5CisgICAgICAgICAgICAgICAgaW50IG1vb24gPSBkYXkgLSBkb20gKyAxOyAvLyBOZXcgbW9vbiAKKyAgICAgICAgICAgICAgICBvZmZzZXRNb250aChtb29uLCBkb20sIGFtb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN1cGVyLmFkZChmaWVsZCwgYW1vdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgQ2FsZW5kYXIgdG8gaGFuZGxlIGxlYXAgbW9udGhzIHByb3Blcmx5LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJvbGwoaW50IGZpZWxkLCBpbnQgYW1vdW50KSB7CisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSBNT05USDoKKyAgICAgICAgICAgIGlmIChhbW91bnQgIT0gMCkgeworICAgICAgICAgICAgICAgIGludCBkb20gPSBnZXQoREFZX09GX01PTlRIKTsKKyAgICAgICAgICAgICAgICBpbnQgZGF5ID0gZ2V0KEpVTElBTl9EQVkpIC0gRVBPQ0hfSlVMSUFOX0RBWTsgLy8gR2V0IGxvY2FsIGRheQorICAgICAgICAgICAgICAgIGludCBtb29uID0gZGF5IC0gZG9tICsgMTsgLy8gTmV3IG1vb24gKHN0YXJ0IG9mIHRoaXMgbW9udGgpCisKKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRocm91Z2hvdXQgdGhlIGZvbGxvd2luZzogIE1vbnRocyAxMiBhbmQgMSBhcmUgbmV2ZXIKKyAgICAgICAgICAgICAgICAvLyBmb2xsb3dlZCBieSBhIGxlYXAgbW9udGggKEQmUiBwLiAxODUpLgorCisgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgYWRqdXN0ZWQgbW9udGggbnVtYmVyIG0uICBUaGlzIGlzIHplcm8tYmFzZWQKKyAgICAgICAgICAgICAgICAvLyB2YWx1ZSBmcm9tIDAuLjExIGluIGEgbm9uLWxlYXAgeWVhciwgYW5kIGZyb20gMC4uMTIgaW4gYQorICAgICAgICAgICAgICAgIC8vIGxlYXAgeWVhci4KKyAgICAgICAgICAgICAgICBpbnQgbSA9IGdldChNT05USCk7IC8vIDAtYmFzZWQgbW9udGgKKyAgICAgICAgICAgICAgICBpZiAoaXNMZWFwWWVhcikgeyAvLyAobWVtYmVyIHZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0KElTX0xFQVBfTU9OVEgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrbTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBhIHByaW9yIGxlYXAgbW9udGguICAoSW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb2xsb3dpbmcsIG1vbnRoIDAgaXMgdGhlIGZpcnN0IG1vbnRoIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8geWVhci4pICBNb250aCAwIGlzIG5ldmVyIGZvbGxvd2VkIGJ5IGEgbGVhcAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9udGgsIGFuZCB3ZSBrbm93IG1vbnRoIG0gaXMgbm90IGEgbGVhcCBtb250aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vb24xIHdpbGwgYmUgdGhlIHN0YXJ0IG9mIG1vbnRoIDAgaWYgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGxlYXAgbW9udGggYmV0d2VlbiBtb250aCAwIGFuZCBtb250aCBtOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgYmUgdGhlIHN0YXJ0IG9mIG1vbnRoIDEuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9vbjEgPSBtb29uIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSAoQ2FsZW5kYXJBc3Ryb25vbWVyLlNZTk9ESUNfTU9OVEggKiAobSAtIDAuNSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbW9vbjEgPSBuZXdNb29uTmVhcihtb29uMSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNMZWFwTW9udGhCZXR3ZWVuKG1vb24xLCBtb29uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBkbyB0aGUgc3RhbmRhcmQgcm9sbCBjb21wdXRhdGlvbiBvbiBtLCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIC8vIGFsbG93ZWQgcmFuZ2Ugb2YgMC4ubi0xLCB3aGVyZSBuIGlzIDEyIG9yIDEzLgorICAgICAgICAgICAgICAgIGludCBuID0gaXNMZWFwWWVhciA/IDEzIDogMTI7IC8vIE1vbnRocyBpbiB0aGlzIHllYXIKKyAgICAgICAgICAgICAgICBpbnQgbmV3TSA9IChtICsgYW1vdW50KSAlIG47CisgICAgICAgICAgICAgICAgaWYgKG5ld00gPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld00gKz0gbjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobmV3TSAhPSBtKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldE1vbnRoKG1vb24sIGRvbSwgbmV3TSAtIG0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3VwZXIucm9sbChmaWVsZCwgYW1vdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTdXBwb3J0IG1ldGhvZHMgYW5kIGNvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAKKyAgICAvKioKKyAgICAgKiBUaGUgc3RhcnQgeWVhciBvZiB0aGUgQ2hpbmVzZSBjYWxlbmRhciwgdGhlIDYxc3QgeWVhciBvZiB0aGUgcmVpZ24KKyAgICAgKiBvZiBIdWFuZyBEaS4gIFNvbWUgc291cmNlcyB1c2UgdGhlIGZpcnN0IHllYXIgb2YgaGlzIHJlaWduLAorICAgICAqIHJlc3VsdGluZyBpbiBFWFRFTkRFRF9ZRUFSIHZhbHVlcyA2MCB5ZWFycyBncmVhdGVyIGFuZCBFUkEgKGN5Y2xlKQorICAgICAqIHZhbHVlcyBvbmUgZ3JlYXRlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0hJTkVTRV9FUE9DSF9ZRUFSID0gLTI2MzY7IC8vIEdyZWdvcmlhbiB5ZWFyCisKKyAgICAvKioKKyAgICAgKiBUaGUgb2Zmc2V0IGZyb20gR01UIGluIG1pbGxpc2Vjb25kcyBhdCB3aGljaCB3ZSBwZXJmb3JtIGFzdHJvbm9taWNhbAorICAgICAqIGNvbXB1dGF0aW9ucy4gIFNvbWUgc291cmNlcyB1c2UgYSBkaWZmZXJlbnQgaGlzdG9yaWNhbGx5IGFjY3VyYXRlCisgICAgICogb2Zmc2V0IG9mIEdNVCs3OjQ1OjQwIGZvciB5ZWFycyBiZWZvcmUgMTkyOTsgd2UgZG8gbm90IGRvIHRoaXMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBDSElOQV9PRkZTRVQgPSA4Kk9ORV9IT1VSOworCisgICAgLyoqCisgICAgICogVmFsdWUgdG8gYmUgYWRkZWQgb3Igc3VidHJhY3RlZCBmcm9tIHRoZSBsb2NhbCBkYXlzIG9mIGEgbmV3IG1vb24gdG8KKyAgICAgKiBnZXQgY2xvc2UgdG8gdGhlIG5leHQgb3IgcHJpb3IgbmV3IG1vb24sIGJ1dCBub3QgY3Jvc3MgaXQuICBNdXN0IGJlCisgICAgICogPj0gMSBhbmQgPCBDYWxlbmRhckFzdHJvbm9tZXIuU1lOT0RJQ19NT05USC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1lOT0RJQ19HQVAgPSAyNTsKKworICAgIC8qKgorICAgICAqIENvbnZlcnQgbG9jYWwgZGF5cyB0byBVVEMgZXBvY2ggbWlsbGlzZWNvbmRzLgorICAgICAqIEBwYXJhbSBkYXlzIGRheXMgYWZ0ZXIgSmFudWFyeSAxLCAxOTcwIDA6MDAgQXNpYS9TaGFuZ2hhaQorICAgICAqIEByZXR1cm4gbWlsbGlzZWNvbmRzIGFmdGVyIEphbnVhcnkgMSwgMTk3MCAwOjAwIEdNVAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgZGF5c1RvTWlsbGlzKGludCBkYXlzKSB7CisgICAgICAgIHJldHVybiAoZGF5cyAqIE9ORV9EQVkpIC0gQ0hJTkFfT0ZGU0VUOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgVVRDIGVwb2NoIG1pbGxpc2Vjb25kcyB0byBsb2NhbCBkYXlzLgorICAgICAqIEBwYXJhbSBtaWxsaXMgbWlsbGlzZWNvbmRzIGFmdGVyIEphbnVhcnkgMSwgMTk3MCAwOjAwIEdNVAorICAgICAqIEByZXR1cm4gZGF5cyBhZnRlciBKYW51YXJ5IDEsIDE5NzAgMDowMCBBc2lhL1NoYW5naGFpCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IG1pbGxpc1RvRGF5cyhsb25nIG1pbGxpcykgeworICAgICAgICByZXR1cm4gKGludCkgZmxvb3JEaXZpZGUobWlsbGlzICsgQ0hJTkFfT0ZGU0VULCBPTkVfREFZKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEFzdHJvbm9taWNhbCBjb21wdXRhdGlvbnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbWFqb3Igc29sYXIgdGVybSBvbiBvciBhZnRlciBEZWNlbWJlciAxNSBvZiB0aGUgZ2l2ZW4KKyAgICAgKiBHcmVnb3JpYW4geWVhciwgdGhhdCBpcywgdGhlIHdpbnRlciBzb2xzdGljZSBvZiB0aGUgZ2l2ZW4geWVhci4KKyAgICAgKiBDb21wdXRhdGlvbnMgYXJlIHJlbGF0aXZlIHRvIEFzaWEvU2hhbmdoYWkgdGltZSB6b25lLgorICAgICAqIEBwYXJhbSBneWVhciBhIEdyZWdvcmlhbiB5ZWFyCisgICAgICogQHJldHVybiBkYXlzIGFmdGVyIEphbnVhcnkgMSwgMTk3MCAwOjAwIEFzaWEvU2hhbmdoYWkgb2YgdGhlCisgICAgICogd2ludGVyIHNvbHN0aWNlIG9mIHRoZSBnaXZlbiB5ZWFyCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgd2ludGVyU29sc3RpY2UoaW50IGd5ZWFyKSB7CisKKyAgICAgICAgbG9uZyBjYWNoZVZhbHVlID0gd2ludGVyU29sc3RpY2VDYWNoZS5nZXQoZ3llYXIpOworCisgICAgICAgIGlmIChjYWNoZVZhbHVlID09IENhbGVuZGFyQ2FjaGUuRU1QVFkpIHsKKyAgICAgICAgICAgIC8vIEluIGJvb2tzIERlY2VtYmVyIDE1IGlzIHVzZWQsIGJ1dCBpdCBmYWlscyBmb3Igc29tZSB5ZWFycworICAgICAgICAgICAgLy8gdXNpbmcgb3VyIGFsZ29yaXRobXMsIGUuZy46IDEyOTggMTM5MSAxNDkyIDE1NTMgMTU2MC4gIFRoYXQKKyAgICAgICAgICAgIC8vIGlzLCB3aW50ZXJTb2xzdGljZSgxMjk4KSBzdGFydHMgc2VhcmNoIGF0IERlYyAxNCAwODowMDowMAorICAgICAgICAgICAgLy8gUFNUIDEyOTggd2l0aCBhIGZpbmFsIHJlc3VsdCBvZiBEZWMgMTQgMTA6MzE6NTkgUFNUIDEyOTkuCisgICAgICAgICAgICBsb25nIG1zID0gZGF5c1RvTWlsbGlzKGNvbXB1dGVHcmVnb3JpYW5Nb250aFN0YXJ0KGd5ZWFyLCBERUNFTUJFUikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gRVBPQ0hfSlVMSUFOX0RBWSk7CisgICAgICAgICAgICBhc3Ryby5zZXRUaW1lKG1zKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2ludGVyIHNvbHN0aWNlIGlzIDI3MCBkZWdyZWVzIHNvbGFyIGxvbmdpdHVkZSBha2EgRG9uZ3poaQorICAgICAgICAgICAgbG9uZyBzb2xhckxvbmcgPSBhc3Ryby5nZXRTdW5UaW1lKENhbGVuZGFyQXN0cm9ub21lci5XSU5URVJfU09MU1RJQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICBjYWNoZVZhbHVlID0gbWlsbGlzVG9EYXlzKHNvbGFyTG9uZyk7CisgICAgICAgICAgICB3aW50ZXJTb2xzdGljZUNhY2hlLnB1dChneWVhciwgY2FjaGVWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChpbnQpIGNhY2hlVmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjbG9zZXN0IG5ldyBtb29uIHRvIHRoZSBnaXZlbiBkYXRlLCBzZWFyY2hpbmcgZWl0aGVyCisgICAgICogZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aW1lLgorICAgICAqIEBwYXJhbSBkYXlzIGRheXMgYWZ0ZXIgSmFudWFyeSAxLCAxOTcwIDA6MDAgQXNpYS9TaGFuZ2hhaQorICAgICAqIEBwYXJhbSBhZnRlciBpZiB0cnVlLCBzZWFyY2ggZm9yIGEgbmV3IG1vb24gb24gb3IgYWZ0ZXIgdGhlIGdpdmVuCisgICAgICogZGF0ZTsgb3RoZXJ3aXNlLCBzZWFyY2ggZm9yIGEgbmV3IG1vb24gYmVmb3JlIGl0CisgICAgICogQHJldHVybiBkYXlzIGFmdGVyIEphbnVhcnkgMSwgMTk3MCAwOjAwIEFzaWEvU2hhbmdoYWkgb2YgdGhlIG5lYXJlc3QKKyAgICAgKiBuZXcgbW9vbiBhZnRlciBvciBiZWZvcmUgPGNvZGU+ZGF5czwvY29kZT4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBuZXdNb29uTmVhcihpbnQgZGF5cywgYm9vbGVhbiBhZnRlcikgeworICAgICAgICAKKyAgICAgICAgYXN0cm8uc2V0VGltZShkYXlzVG9NaWxsaXMoZGF5cykpOworICAgICAgICBsb25nIG5ld01vb24gPSBhc3Ryby5nZXRNb29uVGltZShDYWxlbmRhckFzdHJvbm9tZXIuTkVXX01PT04sIGFmdGVyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtaWxsaXNUb0RheXMobmV3TW9vbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBuZWFyZXN0IGludGVnZXIgbnVtYmVyIG9mIHN5bm9kaWMgbW9udGhzIGJldHdlZW4KKyAgICAgKiB0d28gZGF0ZXMuCisgICAgICogQHBhcmFtIGRheTEgZGF5cyBhZnRlciBKYW51YXJ5IDEsIDE5NzAgMDowMCBBc2lhL1NoYW5naGFpCisgICAgICogQHBhcmFtIGRheTIgZGF5cyBhZnRlciBKYW51YXJ5IDEsIDE5NzAgMDowMCBBc2lhL1NoYW5naGFpCisgICAgICogQHJldHVybiB0aGUgbmVhcmVzdCBpbnRlZ2VyIG51bWJlciBvZiBtb250aHMgYmV0d2VlbiBkYXkxIGFuZCBkYXkyCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgc3lub2RpY01vbnRoc0JldHdlZW4oaW50IGRheTEsIGludCBkYXkyKSB7CisgICAgICAgIHJldHVybiAoaW50KSBNYXRoLnJvdW5kKChkYXkyIC0gZGF5MSkgLyBDYWxlbmRhckFzdHJvbm9tZXIuU1lOT0RJQ19NT05USCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBtYWpvciBzb2xhciB0ZXJtIG9uIG9yIGJlZm9yZSBhIGdpdmVuIGRhdGUuICBUaGlzCisgICAgICogd2lsbCBiZSBhbiBpbnRlZ2VyIGZyb20gMS4uMTIsIHdpdGggMSBjb3JyZXNwb25kaW5nIHRvIDMzMCBkZWdyZWVzLAorICAgICAqIDIgdG8gMCBkZWdyZWVzLCAzIHRvIDMwIGRlZ3JlZXMsLi4uLCBhbmQgMTIgdG8gMzAwIGRlZ3JlZXMuCisgICAgICogQHBhcmFtIGRheXMgZGF5cyBhZnRlciBKYW51YXJ5IDEsIDE5NzAgMDowMCBBc2lhL1NoYW5naGFpCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbWFqb3JTb2xhclRlcm0oaW50IGRheXMpIHsKKyAgICAgICAgCisgICAgICAgIGFzdHJvLnNldFRpbWUoZGF5c1RvTWlsbGlzKGRheXMpKTsKKworICAgICAgICAvLyBDb21wdXRlIChmbG9vcihzb2xhckxvbmdpdHVkZSAvIChwaS82KSkgKyAyKSAlIDEyCisgICAgICAgIGludCB0ZXJtID0gKChpbnQpIE1hdGguZmxvb3IoNiAqIGFzdHJvLmdldFN1bkxvbmdpdHVkZSgpIC8gTWF0aC5QSSkgKyAyKSAlIDEyOworICAgICAgICBpZiAodGVybSA8IDEpIHsKKyAgICAgICAgICAgIHRlcm0gKz0gMTI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRlcm07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIG1vbnRoIGxhY2tzIGEgbWFqb3Igc29sYXIgdGVybS4KKyAgICAgKiBAcGFyYW0gbmV3TW9vbiBkYXlzIGFmdGVyIEphbnVhcnkgMSwgMTk3MCAwOjAwIEFzaWEvU2hhbmdoYWkgb2YgYSBuZXcKKyAgICAgKiBtb29uCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGhhc05vTWFqb3JTb2xhclRlcm0oaW50IG5ld01vb24pIHsKKyAgICAgICAgCisgICAgICAgIGludCBtc3QgPSBtYWpvclNvbGFyVGVybShuZXdNb29uKTsKKyAgICAgICAgaW50IG5tbiA9IG5ld01vb25OZWFyKG5ld01vb24gKyBTWU5PRElDX0dBUCwgdHJ1ZSk7CisgICAgICAgIGludCBtc3R0ID0gbWFqb3JTb2xhclRlcm0obm1uKTsKKyAgICAgICAgcmV0dXJuIG1zdCA9PSBtc3R0OworICAgICAgICAvKgorICAgICAgICByZXR1cm4gbWFqb3JTb2xhclRlcm0obmV3TW9vbikgPT0KKyAgICAgICAgICAgIG1ham9yU29sYXJUZXJtKG5ld01vb25OZWFyKG5ld01vb24gKyBTWU5PRElDX0dBUCwgdHJ1ZSkpOworICAgICAgICAqLworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gVGltZSB0byBmaWVsZHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgbGVhcCBtb250aCBvbiBvciBhZnRlciBtb250aCBuZXdNb29uMSBhbmQKKyAgICAgKiBhdCBvciBiZWZvcmUgbW9udGggbmV3TW9vbjIuCisgICAgICogQHBhcmFtIG5ld01vb24xIGRheXMgYWZ0ZXIgSmFudWFyeSAxLCAxOTcwIDA6MDAgQXNpYS9TaGFuZ2hhaSBvZiBhCisgICAgICogbmV3IG1vb24KKyAgICAgKiBAcGFyYW0gbmV3TW9vbjIgZGF5cyBhZnRlciBKYW51YXJ5IDEsIDE5NzAgMDowMCBBc2lhL1NoYW5naGFpIG9mIGEKKyAgICAgKiBuZXcgbW9vbgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc0xlYXBNb250aEJldHdlZW4oaW50IG5ld01vb24xLCBpbnQgbmV3TW9vbjIpIHsKKworICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGRlYnVnIHRoZSB0aW1lT2ZBbmdsZSBkaXZlcmdlbmNlIGJ1Zy4KKyAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGF0ZXIuIExpdSAxMS85LzAwCisgICAgICAgIC8vIERFQlVHCisgICAgICAgIGlmIChzeW5vZGljTW9udGhzQmV0d2VlbihuZXdNb29uMSwgbmV3TW9vbjIpID49IDUwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpc0xlYXBNb250aEJldHdlZW4oIiArIG5ld01vb24xICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgIiArIG5ld01vb24yICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik6IEludmFsaWQgcGFyYW1ldGVycyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIChuZXdNb29uMiA+PSBuZXdNb29uMSkgJiYKKyAgICAgICAgICAgIChpc0xlYXBNb250aEJldHdlZW4obmV3TW9vbjEsIG5ld01vb25OZWFyKG5ld01vb24yIC0gU1lOT0RJQ19HQVAsIGZhbHNlKSkgfHwKKyAgICAgICAgICAgICBoYXNOb01ham9yU29sYXJUZXJtKG5ld01vb24yKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgQ2FsZW5kYXIgdG8gY29tcHV0ZSBzZXZlcmFsIGZpZWxkcyBzcGVjaWZpYyB0byB0aGUgQ2hpbmVzZQorICAgICAqIGNhbGVuZGFyIHN5c3RlbS4gIFRoZXNlIGFyZToKKyAgICAgKgorICAgICAqIDx1bD48bGk+RVJBCisgICAgICogPGxpPllFQVIKKyAgICAgKiA8bGk+TU9OVEgKKyAgICAgKiA8bGk+REFZX09GX01PTlRICisgICAgICogPGxpPkRBWV9PRl9ZRUFSCisgICAgICogPGxpPkVYVEVOREVEX1lFQVI8L3VsPgorICAgICAqIAorICAgICAqIFRoZSBEQVlfT0ZfV0VFSyBhbmQgRE9XX0xPQ0FMIGZpZWxkcyBhcmUgYWxyZWFkeSBzZXQgd2hlbiB0aGlzCisgICAgICogbWV0aG9kIGlzIGNhbGxlZC4gIFRoZSBnZXRHcmVnb3JpYW5YeHgoKSBtZXRob2RzIHJldHVybiBHcmVnb3JpYW4KKyAgICAgKiBjYWxlbmRhciBlcXVpdmFsZW50cyBmb3IgdGhlIGdpdmVuIEp1bGlhbiBkYXkuCisgICAgICoKKyAgICAgKiA8cD5Db21wdXRlIHRoZSBDaGluZXNlQ2FsZW5kYXItc3BlY2lmaWMgZmllbGQgSVNfTEVBUF9NT05USC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDb21wdXRlRmllbGRzKGludCBqdWxpYW5EYXkpIHsKKworICAgICAgICBjb21wdXRlQ2hpbmVzZUZpZWxkcyhqdWxpYW5EYXkgLSBFUE9DSF9KVUxJQU5fREFZLCAvLyBsb2NhbCBkYXlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEdyZWdvcmlhblllYXIoKSwgZ2V0R3JlZ29yaWFuTW9udGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7IC8vIHNldCBhbGwgZmllbGRzCisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcHV0ZSBmaWVsZHMgZm9yIHRoZSBDaGluZXNlIGNhbGVuZGFyIHN5c3RlbS4gIFRoaXMgbWV0aG9kIGNhbgorICAgICAqIGVpdGhlciBzZXQgYWxsIHJlbGV2YW50IGZpZWxkcywgYXMgcmVxdWlyZWQgYnkKKyAgICAgKiA8Y29kZT5oYW5kbGVDb21wdXRlRmllbGRzKCk8L2NvZGU+LCBvciBpdCBjYW4ganVzdCBzZXQgdGhlIE1PTlRIIGFuZAorICAgICAqIElTX0xFQVBfTU9OVEggZmllbGRzLCBhcyByZXF1aXJlZCBieQorICAgICAqIDxjb2RlPmhhbmRsZUNvbXB1dGVNb250aFN0YXJ0KCk8L2NvZGU+LgorICAgICAqCisgICAgICogPHA+QXMgYSBzaWRlIGVmZmVjdCwgdGhpcyBtZXRob2Qgc2V0cyB7QGxpbmsgI2lzTGVhcFllYXJ9LgorICAgICAqIEBwYXJhbSBkYXlzIGRheXMgYWZ0ZXIgSmFudWFyeSAxLCAxOTcwIDA6MDAgQXNpYS9TaGFuZ2hhaSBvZiB0aGUKKyAgICAgKiBkYXRlIHRvIGNvbXB1dGUgZmllbGRzIGZvcgorICAgICAqIEBwYXJhbSBneWVhciB0aGUgR3JlZ29yaWFuIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUKKyAgICAgKiBAcGFyYW0gZ21vbnRoIHRoZSBHcmVnb3JpYW4gbW9udGggb2YgdGhlIGdpdmVuIGRhdGUKKyAgICAgKiBAcGFyYW0gc2V0QWxsRmllbGRzIGlmIHRydWUsIHNldCB0aGUgRVhURU5ERURfWUVBUiwgRVJBLCBZRUFSLAorICAgICAqIERBWV9PRl9NT05USCwgYW5kIERBWV9PRl9ZRUFSIGZpZWxkcy4gIEluIGVpdGhlciBjYXNlIHNldCB0aGUgTU9OVEgKKyAgICAgKiBhbmQgSVNfTEVBUF9NT05USCBmaWVsZHMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGNvbXB1dGVDaGluZXNlRmllbGRzKGludCBkYXlzLCBpbnQgZ3llYXIsIGludCBnbW9udGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2V0QWxsRmllbGRzKSB7CisKKyAgICAgICAgLy8gRmluZCB0aGUgd2ludGVyIHNvbHN0aWNlcyBiZWZvcmUgYW5kIGFmdGVyIHRoZSB0YXJnZXQgZGF0ZS4KKyAgICAgICAgLy8gVGhlc2UgZGVmaW5lIHRoZSBib3VuZGFyaWVzIG9mIHRoaXMgQ2hpbmVzZSB5ZWFyLCBzcGVjaWZpY2FsbHksCisgICAgICAgIC8vIHRoZSBwb3NpdGlvbiBvZiBtb250aCAxMSwgd2hpY2ggYWx3YXlzIGNvbnRhaW5zIHRoZSBzb2xzdGljZS4KKyAgICAgICAgLy8gV2Ugd2FudCBzb2xzdGljZUJlZm9yZSA8PSBkYXRlIDwgc29sc3RpY2VBZnRlci4KKyAgICAgICAgaW50IHNvbHN0aWNlQmVmb3JlOworICAgICAgICBpbnQgc29sc3RpY2VBZnRlciA9IHdpbnRlclNvbHN0aWNlKGd5ZWFyKTsKKyAgICAgICAgaWYgKGRheXMgPCBzb2xzdGljZUFmdGVyKSB7CisgICAgICAgICAgICBzb2xzdGljZUJlZm9yZSA9IHdpbnRlclNvbHN0aWNlKGd5ZWFyIC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzb2xzdGljZUJlZm9yZSA9IHNvbHN0aWNlQWZ0ZXI7CisgICAgICAgICAgICBzb2xzdGljZUFmdGVyID0gd2ludGVyU29sc3RpY2UoZ3llYXIgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBtb250aCBhZnRlciBtb250aCAxMS4gIFRoaXMgd2lsbCBiZSBlaXRoZXIKKyAgICAgICAgLy8gdGhlIHByaW9yIG1vbnRoIDEyIG9yIGxlYXAgbW9udGggMTEgKHZlcnkgcmFyZSkuICBBbHNvIGZpbmQgdGhlCisgICAgICAgIC8vIHN0YXJ0IG9mIHRoZSBmb2xsb3dpbmcgbW9udGggMTEuCisgICAgICAgIGludCBmaXJzdE1vb24gPSBuZXdNb29uTmVhcihzb2xzdGljZUJlZm9yZSArIDEsIHRydWUpOworICAgICAgICBpbnQgbGFzdE1vb24gPSBuZXdNb29uTmVhcihzb2xzdGljZUFmdGVyICsgMSwgZmFsc2UpOworICAgICAgICBpbnQgdGhpc01vb24gPSBuZXdNb29uTmVhcihkYXlzICsgMSwgZmFsc2UpOyAvLyBTdGFydCBvZiB0aGlzIG1vbnRoCisgICAgICAgIC8vIE5vdGU6IGlzTGVhcFllYXIgaXMgYSBtZW1iZXIgdmFyaWFibGUKKyAgICAgICAgaXNMZWFwWWVhciA9IHN5bm9kaWNNb250aHNCZXR3ZWVuKGZpcnN0TW9vbiwgbGFzdE1vb24pID09IDEyOworCisgICAgICAgIGludCBtb250aCA9IHN5bm9kaWNNb250aHNCZXR3ZWVuKGZpcnN0TW9vbiwgdGhpc01vb24pOworICAgICAgICBpZiAoaXNMZWFwWWVhciAmJiBpc0xlYXBNb250aEJldHdlZW4oZmlyc3RNb29uLCB0aGlzTW9vbikpIHsKKyAgICAgICAgICAgIG1vbnRoLS07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vbnRoIDwgMSkgeworICAgICAgICAgICAgbW9udGggKz0gMTI7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGlzTGVhcE1vbnRoID0gaXNMZWFwWWVhciAmJgorICAgICAgICAgICAgaGFzTm9NYWpvclNvbGFyVGVybSh0aGlzTW9vbikgJiYKKyAgICAgICAgICAgICFpc0xlYXBNb250aEJldHdlZW4oZmlyc3RNb29uLCBuZXdNb29uTmVhcih0aGlzTW9vbiAtIFNZTk9ESUNfR0FQLCBmYWxzZSkpOworCisgICAgICAgIGludGVybmFsU2V0KE1PTlRILCBtb250aC0xKTsgLy8gQ29udmVydCBmcm9tIDEtYmFzZWQgdG8gMC1iYXNlZAorICAgICAgICBpbnRlcm5hbFNldChJU19MRUFQX01PTlRILCBpc0xlYXBNb250aD8xOjApOworCisgICAgICAgIGlmIChzZXRBbGxGaWVsZHMpIHsKKworICAgICAgICAgICAgaW50IHllYXIgPSBneWVhciAtIENISU5FU0VfRVBPQ0hfWUVBUjsKKyAgICAgICAgICAgIGlmIChtb250aCA8IDExIHx8CisgICAgICAgICAgICAgICAgZ21vbnRoID49IEpVTFkpIHsKKyAgICAgICAgICAgICAgICB5ZWFyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZGF5T2ZNb250aCA9IGRheXMgLSB0aGlzTW9vbiArIDE7CisKKyAgICAgICAgICAgIGludGVybmFsU2V0KEVYVEVOREVEX1lFQVIsIHllYXIpOworCisgICAgICAgICAgICAvLyAwLT4wLDYwICAxLT4xLDEgIDYwLT4xLDYwICA2MS0+MiwxICBldGMuCisgICAgICAgICAgICBpbnRbXSB5ZWFyT2ZDeWNsZSA9IG5ldyBpbnRbMV07CisgICAgICAgICAgICBpbnQgY3ljbGUgPSBmbG9vckRpdmlkZSh5ZWFyLTEsIDYwLCB5ZWFyT2ZDeWNsZSk7CisgICAgICAgICAgICBpbnRlcm5hbFNldChFUkEsIGN5Y2xlKzEpOworICAgICAgICAgICAgaW50ZXJuYWxTZXQoWUVBUiwgeWVhck9mQ3ljbGVbMF0rMSk7CisKKyAgICAgICAgICAgIGludGVybmFsU2V0KERBWV9PRl9NT05USCwgZGF5T2ZNb250aCk7CisKKyAgICAgICAgICAgIC8vIERheXMgd2lsbCBiZSBiZWZvcmUgdGhlIGZpcnN0IG5ldyB5ZWFyIHdlIGNvbXB1dGUgaWYgdGhpcworICAgICAgICAgICAgLy8gZGF0ZSBpcyBpbiBtb250aCAxMSwgbGVhcCAxMSwgMTIuICBUaGVyZSBpcyBuZXZlciBhIGxlYXAgMTIuCisgICAgICAgICAgICAvLyBOZXcgeWVhciBjb21wdXRhdGlvbnMgYXJlIGNhY2hlZCBzbyB0aGlzIHNob3VsZCBiZSBjaGVhcCBpbgorICAgICAgICAgICAgLy8gdGhlIGxvbmcgcnVuLgorICAgICAgICAgICAgaW50IG5ld1llYXIgPSBuZXdZZWFyKGd5ZWFyKTsKKyAgICAgICAgICAgIGlmIChkYXlzIDwgbmV3WWVhcikgeworICAgICAgICAgICAgICAgIG5ld1llYXIgPSBuZXdZZWFyKGd5ZWFyLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50ZXJuYWxTZXQoREFZX09GX1lFQVIsIGRheXMgLSBuZXdZZWFyICsgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEZpZWxkcyB0byB0aW1lCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIENoaW5lc2UgbmV3IHllYXIgb2YgdGhlIGdpdmVuIEdyZWdvcmlhbiB5ZWFyLgorICAgICAqIEBwYXJhbSBneWVhciBhIEdyZWdvcmlhbiB5ZWFyCisgICAgICogQHJldHVybiBkYXlzIGFmdGVyIEphbnVhcnkgMSwgMTk3MCAwOjAwIEFzaWEvU2hhbmdoYWkgb2YgdGhlCisgICAgICogQ2hpbmVzZSBuZXcgeWVhciBvZiB0aGUgZ2l2ZW4geWVhciAodGhpcyB3aWxsIGJlIGEgbmV3IG1vb24pCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbmV3WWVhcihpbnQgZ3llYXIpIHsKKworICAgICAgICBsb25nIGNhY2hlVmFsdWUgPSBuZXdZZWFyQ2FjaGUuZ2V0KGd5ZWFyKTsKKworICAgICAgICBpZiAoY2FjaGVWYWx1ZSA9PSBDYWxlbmRhckNhY2hlLkVNUFRZKSB7CisKKyAgICAgICAgICAgIGludCBzb2xzdGljZUJlZm9yZT0gd2ludGVyU29sc3RpY2UoZ3llYXIgLSAxKTsKKyAgICAgICAgICAgIGludCBzb2xzdGljZUFmdGVyID0gd2ludGVyU29sc3RpY2UoZ3llYXIpOworICAgICAgICAgICAgaW50IG5ld01vb24xID0gbmV3TW9vbk5lYXIoc29sc3RpY2VCZWZvcmUgKyAxLCB0cnVlKTsKKyAgICAgICAgICAgIGludCBuZXdNb29uMiA9IG5ld01vb25OZWFyKG5ld01vb24xICsgU1lOT0RJQ19HQVAsIHRydWUpOworICAgICAgICAgICAgaW50IG5ld01vb24xMSA9IG5ld01vb25OZWFyKHNvbHN0aWNlQWZ0ZXIgKyAxLCBmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzeW5vZGljTW9udGhzQmV0d2VlbihuZXdNb29uMSwgbmV3TW9vbjExKSA9PSAxMiAmJgorICAgICAgICAgICAgICAgIChoYXNOb01ham9yU29sYXJUZXJtKG5ld01vb24xKSB8fCBoYXNOb01ham9yU29sYXJUZXJtKG5ld01vb24yKSkpIHsKKyAgICAgICAgICAgICAgICBjYWNoZVZhbHVlID0gbmV3TW9vbk5lYXIobmV3TW9vbjIgKyBTWU5PRElDX0dBUCwgdHJ1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNhY2hlVmFsdWUgPSBuZXdNb29uMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmV3WWVhckNhY2hlLnB1dChneWVhciwgY2FjaGVWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChpbnQpIGNhY2hlVmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBKdWxpYW4gZGF5IG51bWJlciBvZiBkYXkgYmVmb3JlIHRoZSBmaXJzdCBkYXkgb2YgdGhlCisgICAgICogZ2l2ZW4gbW9udGggaW4gdGhlIGdpdmVuIGV4dGVuZGVkIHllYXIuCisgICAgICogCisgICAgICogPHA+Tm90ZTogVGhpcyBtZXRob2QgcmVhZHMgdGhlIElTX0xFQVBfTU9OVEggZmllbGQgdG8gZGV0ZXJtaW5lCisgICAgICogd2hldGhlciB0aGUgZ2l2ZW4gbW9udGggaXMgYSBsZWFwIG1vbnRoLgorICAgICAqIEBwYXJhbSBleWVhciB0aGUgZXh0ZW5kZWQgeWVhcgorICAgICAqIEBwYXJhbSBtb250aCB0aGUgemVyby1iYXNlZCBtb250aC4gIFRoZSBtb250aCBpcyBhbHNvIGRldGVybWluZWQKKyAgICAgKiBieSByZWFkaW5nIHRoZSBJU19MRUFQX01PTlRIIGZpZWxkLgorICAgICAqIEBwYXJhbSByZXR1cm4gdGhlIEp1bGlhbiBkYXkgbnVtYmVyIG9mIHRoZSBkYXkgYmVmb3JlIHRoZSBmaXJzdAorICAgICAqIGRheSBvZiB0aGUgZ2l2ZW4gbW9udGggYW5kIHllYXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUNvbXB1dGVNb250aFN0YXJ0KGludCBleWVhciwgaW50IG1vbnRoLCBib29sZWFuIHVzZU1vbnRoKSB7CisKKyAgICAgICAgLy8gSWYgdGhlIG1vbnRoIGlzIG91dCBvZiByYW5nZSwgYWRqdXN0IGl0IGludG8gcmFuZ2UsIGFuZAorICAgICAgICAvLyBtb2RpZnkgdGhlIGV4dGVuZGVkIHllYXIgdmFsdWUgYWNjb3JkaW5nbHkuCisgICAgICAgIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkgeworICAgICAgICAgICAgaW50W10gcmVtID0gbmV3IGludFsxXTsKKyAgICAgICAgICAgIGV5ZWFyICs9IGZsb29yRGl2aWRlKG1vbnRoLCAxMiwgcmVtKTsKKyAgICAgICAgICAgIG1vbnRoID0gcmVtWzBdOworICAgICAgICB9CisKKyAgICAgICAgaW50IGd5ZWFyID0gZXllYXIgKyBDSElORVNFX0VQT0NIX1lFQVIgLSAxOyAvLyBHcmVnb3JpYW4geWVhcgorICAgICAgICBpbnQgbmV3WWVhciA9IG5ld1llYXIoZ3llYXIpOworICAgICAgICBpbnQgbmV3TW9vbiA9IG5ld01vb25OZWFyKG5ld1llYXIgKyBtb250aCAqIDI5LCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIGludCBqdWxpYW5EYXkgPSBuZXdNb29uICsgRVBPQ0hfSlVMSUFOX0RBWTsKKworICAgICAgICAvLyBTYXZlIGZpZWxkcyBmb3IgbGF0ZXIgcmVzdG9yYXRpb24KKyAgICAgICAgaW50IHNhdmVNb250aCA9IGludGVybmFsR2V0KE1PTlRIKTsKKyAgICAgICAgaW50IHNhdmVJc0xlYXBNb250aCA9IGludGVybmFsR2V0KElTX0xFQVBfTU9OVEgpOworCisgICAgICAgIC8vIElnbm9yZSBJU19MRUFQX01PTlRIIGZpZWxkIGlmIHVzZU1vbnRoIGlzIGZhbHNlCisgICAgICAgIGludCBpc0xlYXBNb250aCA9IHVzZU1vbnRoID8gc2F2ZUlzTGVhcE1vbnRoIDogMDsKKworICAgICAgICBjb21wdXRlR3JlZ29yaWFuRmllbGRzKGp1bGlhbkRheSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBNT05USCBhbmQgSVNfTEVBUF9NT05USCBmaWVsZHMgKG9ubHkpCisgICAgICAgIGNvbXB1dGVDaGluZXNlRmllbGRzKG5ld01vb24sIGdldEdyZWdvcmlhblllYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0R3JlZ29yaWFuTW9udGgoKSwgZmFsc2UpOyAgICAgICAgCisKKyAgICAgICAgaWYgKG1vbnRoICE9IGludGVybmFsR2V0KE1PTlRIKSB8fAorICAgICAgICAgICAgaXNMZWFwTW9udGggIT0gaW50ZXJuYWxHZXQoSVNfTEVBUF9NT05USCkpIHsKKyAgICAgICAgICAgIG5ld01vb24gPSBuZXdNb29uTmVhcihuZXdNb29uICsgU1lOT0RJQ19HQVAsIHRydWUpOworICAgICAgICAgICAganVsaWFuRGF5ID0gbmV3TW9vbiArIEVQT0NIX0pVTElBTl9EQVk7CisgICAgICAgIH0KKworICAgICAgICBpbnRlcm5hbFNldChNT05USCwgc2F2ZU1vbnRoKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoSVNfTEVBUF9NT05USCwgc2F2ZUlzTGVhcE1vbnRoKTsKKworICAgICAgICByZXR1cm4ganVsaWFuRGF5IC0gMTsKKyAgICB9CisKKworICAgIC8qCisgICAgcHJpdmF0ZSBzdGF0aWMgQ2FsZW5kYXJGYWN0b3J5IGZhY3Rvcnk7CisgICAgcHVibGljIHN0YXRpYyBDYWxlbmRhckZhY3RvcnkgZmFjdG9yeSgpIHsKKyAgICAgICAgaWYgKGZhY3RvcnkgPT0gbnVsbCkgeworICAgICAgICAgICAgZmFjdG9yeSA9IG5ldyBDYWxlbmRhckZhY3RvcnkoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIENhbGVuZGFyIGNyZWF0ZShUaW1lWm9uZSB0eiwgTG9jYWxlIGxvYykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoaW5lc2VDYWxlbmRhcih0eiwgbG9jKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGZhY3RvcnlOYW1lKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNoaW5lc2UiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhY3Rvcnk7CisgICAgfQorICAgICovCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9Db21wYWN0Qnl0ZUFycmF5LmphdmEgYi9zcmMvY29tL2libS9pY3UvdXRpbC9Db21wYWN0Qnl0ZUFycmF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWJlMTljMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0NvbXBhY3RCeXRlQXJyYXkuamF2YQpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ29tcGFjdEJ5dGVBcnJheS5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzAzIDIyOjA0OjE3ICQgCisgKiAkUmV2aXNpb246IDEuOSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKK2ltcG9ydCBjb20uaWJtLmljdS5pbXBsLlV0aWxpdHk7CisKKy8qKgorICogY2xhc3MgQ29tcGFjdEFUeXBlQXJyYXkgOiB1c2Ugb25seSBvbiBwcmltaXRpdmUgZGF0YSB0eXBlcworICogUHJvdmlkZXMgYSBjb21wYWN0IHdheSB0byBzdG9yZSBpbmZvcm1hdGlvbiB0aGF0IGlzIGluZGV4ZWQgYnkgVW5pY29kZQorICogdmFsdWVzLCBzdWNoIGFzIGNoYXJhY3RlciBwcm9wZXJ0aWVzLCB0eXBlcywga2V5Ym9hcmQgdmFsdWVzLCBldGMuVGhpcworICogaXMgdmVyeSB1c2VmdWwgd2hlbiB5b3UgaGF2ZSBhIGJsb2NrIG9mIFVuaWNvZGUgZGF0YSB0aGF0IGNvbnRhaW5zCisgKiBzaWduaWZpY2FudCB2YWx1ZXMgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIFVuaWNvZGUgZGF0YSBpcyB1bnVzZWQgaW4gdGhlCisgKiBhcHBsaWNhdGlvbiBvciB3aGVuIHlvdSBoYXZlIGEgbG90IG9mIHJlZHVuZGFuY2UsIHN1Y2ggYXMgd2hlcmUgYWxsIDIxLDAwMAorICogSGFuIGlkZW9ncmFwaHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gIEhvd2V2ZXIsIGxvb2t1cCBpcyBtdWNoIGZhc3RlciB0aGFuIGEKKyAqIGhhc2ggdGFibGUuCisgKiBBIGNvbXBhY3QgYXJyYXkgb2YgYW55IHByaW1pdGl2ZSBkYXRhIHR5cGUgc2VydmVzIHR3byBwdXJwb3NlczoKKyAqIDxVTCB0eXBlID0gcm91bmQ+CisgKiAgICAgPExJPkZhc3QgYWNjZXNzIG9mIHRoZSBpbmRleGVkIHZhbHVlcy4KKyAqICAgICA8TEk+U21hbGxlciBtZW1vcnkgZm9vdHByaW50LgorICogPC9VTD4KKyAqIEEgY29tcGFjdCBhcnJheSBpcyBjb21wb3NlZCBvZiBhIGluZGV4IGFycmF5IGFuZCB2YWx1ZSBhcnJheS4gIFRoZSBpbmRleAorICogYXJyYXkgY29udGFpbnMgdGhlIGluZGljaWVzIG9mIFVuaWNvZGUgY2hhcmFjdGVycyB0byB0aGUgdmFsdWUgYXJyYXkuCisgKgorICogQHNlZSAgICAgICAgICAgICAgICBDb21wYWN0Q2hhckFycmF5CisgKiBAYXV0aG9yICAgICAgICAgICAgIEhlbGVuYSBTaGloCisgKiBAZHJhZnQgSUNVIDIuNAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29tcGFjdEJ5dGVBcnJheSBpbXBsZW1lbnRzIENsb25lYWJsZSB7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycy4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgIGZpbmFsIGludCBVTklDT0RFQ09VTlQgPTY1NTM2OworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgQ29tcGFjdEJ5dGVBcnJheSwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlCisgICAgICogY29tcGFjdCBhcnJheSBpcyAwLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIENvbXBhY3RCeXRlQXJyYXkoKQorICAgIHsKKyAgICAgICAgdGhpcygoYnl0ZSkwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgQ29tcGFjdEJ5dGVBcnJheS4KKyAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjb21wYWN0IGFycmF5LgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIENvbXBhY3RCeXRlQXJyYXkoYnl0ZSBkZWZhdWx0VmFsdWUpCisgICAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgdmFsdWVzID0gbmV3IGJ5dGVbVU5JQ09ERUNPVU5UXTsKKyAgICAgICAgaW5kaWNlcyA9IG5ldyBjaGFyW0lOREVYQ09VTlRdOworICAgICAgICBoYXNoZXMgPSBuZXcgaW50W0lOREVYQ09VTlRdOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVU5JQ09ERUNPVU5UOyArK2kpIHsKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSU5ERVhDT1VOVDsgKytpKSB7CisgICAgICAgICAgICBpbmRpY2VzW2ldID0gKGNoYXIpKGk8PEJMT0NLU0hJRlQpOworICAgICAgICAgICAgaGFzaGVzW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICBpc0NvbXBhY3QgPSBmYWxzZTsKKworICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgQ29tcGFjdEJ5dGVBcnJheS4KKyAgICAgKiBAcGFyYW0gaW5kZXhBcnJheSB0aGUgaW5kaWNpZXMgb2YgdGhlIGNvbXBhY3QgYXJyYXkuCisgICAgICogQHBhcmFtIG5ld1ZhbHVlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb21wYWN0IGFycmF5LgorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgQ29tcGFjdEJ5dGVBcnJheShjaGFyIGluZGV4QXJyYXlbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlIG5ld1ZhbHVlc1tdKQorICAgIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGlmIChpbmRleEFycmF5Lmxlbmd0aCAhPSBJTkRFWENPVU5UKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW5kZXggb3V0IG9mIGJvdW5kcy4iKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IElOREVYQ09VTlQ7ICsraSkgeworICAgICAgICAgICAgY2hhciBpbmRleCA9IGluZGV4QXJyYXlbaV07CisgICAgICAgICAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IG5ld1ZhbHVlcy5sZW5ndGgrQkxPQ0tDT1VOVCkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW5kZXggb3V0IG9mIGJvdW5kcy4iKTsKKyAgICAgICAgfQorICAgICAgICBpbmRpY2VzID0gaW5kZXhBcnJheTsKKyAgICAgICAgdmFsdWVzID0gbmV3VmFsdWVzOworICAgICAgICBpc0NvbXBhY3QgPSB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIGZvciBDb21wYWN0Qnl0ZUFycmF5LgorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4QXJyYXkgdGhlIFJMRS1lbmNvZGVkIGluZGljaWVzIG9mIHRoZSBjb21wYWN0IGFycmF5LgorICAgICAqIEBwYXJhbSB2YWx1ZUFycmF5IHRoZSBSTEUtZW5jb2RlZCB2YWx1ZXMgb2YgdGhlIGNvbXBhY3QgYXJyYXkuCisgICAgICoKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgaW5kZXggb3IgdmFsdWUgYXJyYXkgaXMKKyAgICAgKiAgICAgICAgICB0aGUgd3Jvbmcgc2l6ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBDb21wYWN0Qnl0ZUFycmF5KFN0cmluZyBpbmRleEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZUFycmF5KQorICAgIHsKKyAgICAgICAgdGhpcyggVXRpbGl0eS5STEVTdHJpbmdUb0NoYXJBcnJheShpbmRleEFycmF5KSwKKyAgICAgICAgICAgICAgVXRpbGl0eS5STEVTdHJpbmdUb0J5dGVBcnJheSh2YWx1ZUFycmF5KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBtYXBwZWQgdmFsdWUgb2YgYSBVbmljb2RlIGNoYXJhY3Rlci4KKyAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGNoYXJhY3RlciB0byBnZXQgdGhlIG1hcHBlZCB2YWx1ZSB3aXRoCisgICAgICogQHJldHVybiB0aGUgbWFwcGVkIHZhbHVlIG9mIHRoZSBnaXZlbiBjaGFyYWN0ZXIKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBieXRlIGVsZW1lbnRBdChjaGFyIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuICh2YWx1ZXNbKGluZGljZXNbaW5kZXggPj4gQkxPQ0tTSElGVF0gJiAweEZGRkYpCisgICAgICAgICAgICAgICAgICAgICAgICsgKGluZGV4ICYgQkxPQ0tNQVNLKV0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCBhIG5ldyB2YWx1ZSBmb3IgYSBVbmljb2RlIGNoYXJhY3Rlci4KKyAgICAgKiBTZXQgYXV0b21hdGljYWxseSBleHBhbmRzIHRoZSBhcnJheSBpZiBpdCBpcyBjb21wYWN0ZWQuCisgICAgICogQHBhcmFtIGluZGV4IHRoZSBjaGFyYWN0ZXIgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUgd2l0aAorICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IG1hcHBlZCB2YWx1ZQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RWxlbWVudEF0KGNoYXIgaW5kZXgsIGJ5dGUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaXNDb21wYWN0KQorICAgICAgICAgICAgZXhwYW5kKCk7CisgICAgICAgIHZhbHVlc1soaW50KWluZGV4XSA9IHZhbHVlOworICAgICAgICB0b3VjaEJsb2NrKGluZGV4ID4+IEJMT0NLU0hJRlQsIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgbmV3IHZhbHVlcyBmb3IgYSByYW5nZSBvZiBVbmljb2RlIGNoYXJhY3Rlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGFydCB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSByYW5nZQorICAgICAqIEBwYXJhbSBlbmQgdGhlIGVuZGluZyBvZmZzZXQgb2YgdGhlIHJhbmdlCisgICAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgbWFwcGVkIHZhbHVlCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50QXQoY2hhciBzdGFydCwgY2hhciBlbmQsIGJ5dGUgdmFsdWUpCisgICAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgaWYgKGlzQ29tcGFjdCkgeworICAgICAgICAgICAgZXhwYW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpIHsKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IHZhbHVlOworICAgICAgICAgICAgdG91Y2hCbG9jayhpID4+IEJMT0NLU0hJRlQsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBDb21wYWN0IHRoZSBhcnJheS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvbXBhY3QoKSB7CisgICAgICAgIGNvbXBhY3QoZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBhY3QgdGhlIGFycmF5LgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29tcGFjdChib29sZWFuIGV4aGF1c3RpdmUpCisgICAgeworICAgICAgICBpZiAoIWlzQ29tcGFjdCkgeworICAgICAgICAgICAgaW50IGxpbWl0Q29tcGFjdGVkID0gMDsKKyAgICAgICAgICAgIGludCBpQmxvY2tTdGFydCA9IDA7CisgICAgICAgICAgICBjaGFyIGlVbnRvdWNoZWQgPSAweEZGRkY7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7ICsraSwgaUJsb2NrU3RhcnQgKz0gQkxPQ0tDT1VOVCkgeworICAgICAgICAgICAgICAgIGluZGljZXNbaV0gPSAweEZGRkY7CisgICAgICAgICAgICAgICAgYm9vbGVhbiB0b3VjaGVkID0gYmxvY2tUb3VjaGVkKGkpOworICAgICAgICAgICAgICAgIGlmICghdG91Y2hlZCAmJiBpVW50b3VjaGVkICE9IDB4RkZGRikgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBubyB2YWx1ZXMgaW4gdGhpcyBibG9jayB3ZXJlIHNldCwgd2UgY2FuIGp1c3Qgc2V0IGl0cworICAgICAgICAgICAgICAgICAgICAvLyBpbmRleCB0byBiZSB0aGUgc2FtZSBhcyBzb21lIG90aGVyIGJsb2NrIHdpdGggbm8gdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIC8vIHNldCwgYXNzdW1pbmcgd2UndmUgc2VlbiBvbmUgeWV0LgorICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2ldID0gaVVudG91Y2hlZDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnQgakJsb2NrU3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW1pdENvbXBhY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2osIGpCbG9ja1N0YXJ0ICs9IEJMT0NLQ09VTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNoZXNbaV0gPT0gaGFzaGVzW2pdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5UmVnaW9uTWF0Y2hlcyh2YWx1ZXMsIGlCbG9ja1N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMsIGpCbG9ja1N0YXJ0LCBCTE9DS0NPVU5UKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaV0gPSAoY2hhcilqQmxvY2tTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaW5kaWNlc1tpXSA9PSAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRpZG4ndCBtYXRjaCwgc28gY29weSAmIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh2YWx1ZXMsIGlCbG9ja1N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcywgakJsb2NrU3RhcnQsIEJMT0NLQ09VTlQpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpXSA9IChjaGFyKWpCbG9ja1N0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGVzW2pdID0gaGFzaGVzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgKytsaW1pdENvbXBhY3RlZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b3VjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdW50b3VjaGVkIGJsb2NrIHdlJ3ZlIHNlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtZW1iZXIgaXRzIGluZGV4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlVbnRvdWNoZWQgPSAoY2hhcilqQmxvY2tTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHdlIGFyZSBkb25lIGNvbXBhY3RpbmcsIHNvIG5vdyBtYWtlIHRoZSBhcnJheSBzaG9ydGVyCisgICAgICAgICAgICBpbnQgbmV3U2l6ZSA9IGxpbWl0Q29tcGFjdGVkKkJMT0NLQ09VTlQ7CisgICAgICAgICAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbbmV3U2l6ZV07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHZhbHVlcywgMCwgcmVzdWx0LCAwLCBuZXdTaXplKTsKKyAgICAgICAgICAgIHZhbHVlcyA9IHJlc3VsdDsKKyAgICAgICAgICAgIGlzQ29tcGFjdCA9IHRydWU7CisgICAgICAgICAgICBoYXNoZXMgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgdXRpbGl0eSB0byBjb21wYXJlIHR3byBhcnJheXMgb2YgZG91Ymxlcy4KKyAgICAgKiBAcGFyYW0gbGVuIHRoZSBsZW5ndGggdG8gY29tcGFyZS4KKyAgICAgKiBUaGUgc3RhcnQgaW5kaWNlcyBhbmQgc3RhcnQrbGVuIG11c3QgYmUgdmFsaWQuCisgICAgICovCisgICAgZmluYWwgc3RhdGljIGJvb2xlYW4gYXJyYXlSZWdpb25NYXRjaGVzKGJ5dGVbXSBzb3VyY2UsIGludCBzb3VyY2VTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIHRhcmdldCwgaW50IHRhcmdldFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKQorICAgIHsKKyAgICAgICAgaW50IHNvdXJjZUVuZCA9IHNvdXJjZVN0YXJ0ICsgbGVuOworICAgICAgICBpbnQgZGVsdGEgPSB0YXJnZXRTdGFydCAtIHNvdXJjZVN0YXJ0OworICAgICAgICBmb3IgKGludCBpID0gc291cmNlU3RhcnQ7IGkgPCBzb3VyY2VFbmQ7IGkrKykgeworICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSAhPSB0YXJnZXRbaSArIGRlbHRhXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1lbWJlciB0aGF0IGEgc3BlY2lmaWVkIGJsb2NrIHdhcyAidG91Y2hlZCIsIGkuZS4gaGFkIGEgdmFsdWUgc2V0LgorICAgICAqIFVudG91Y2hlZCBibG9ja3MgY2FuIGJlIHNraXBwZWQgd2hlbiBjb21wYWN0aW5nIHRoZSBhcnJheQorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgdm9pZCB0b3VjaEJsb2NrKGludCBpLCBpbnQgdmFsdWUpIHsKKyAgICAgICAgaGFzaGVzW2ldID0gKGhhc2hlc1tpXSArICh2YWx1ZTw8MSkpIHwgMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBRdWVyeSB3aGV0aGVyIGEgc3BlY2lmaWVkIGJsb2NrIHdhcyAidG91Y2hlZCIsIGkuZS4gaGFkIGEgdmFsdWUgc2V0LgorICAgICAqIFVudG91Y2hlZCBibG9ja3MgY2FuIGJlIHNraXBwZWQgd2hlbiBjb21wYWN0aW5nIHRoZSBhcnJheQorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBibG9ja1RvdWNoZWQoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIGhhc2hlc1tpXSAhPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gIERvIG5vdCBtb2RpZnkgdGhlIHJlc3VsdCwgdGhlIGJlaGF2aW9yIG9mCisgICAgICogbW9kaWZpZWQgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGNoYXJbXSBnZXRJbmRleEFycmF5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRpY2VzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gIERvIG5vdCBtb2RpZnkgdGhlIHJlc3VsdCwgdGhlIGJlaGF2aW9yIG9mCisgICAgICogbW9kaWZpZWQgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGJ5dGVbXSBnZXRWYWx1ZUFycmF5KCkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIENsb25lYWJsZQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29tcGFjdEJ5dGVBcnJheSBvdGhlciA9IChDb21wYWN0Qnl0ZUFycmF5KSBzdXBlci5jbG9uZSgpOworICAgICAgICAgICAgb3RoZXIudmFsdWVzID0gKGJ5dGVbXSl2YWx1ZXMuY2xvbmUoKTsKKyAgICAgICAgICAgIG90aGVyLmluZGljZXMgPSAoY2hhcltdKWluZGljZXMuY2xvbmUoKTsKKyAgICAgICAgICAgIGlmIChoYXNoZXMgIT0gbnVsbCkgb3RoZXIuaGFzaGVzID0gKGludFtdKWhhc2hlcy5jbG9uZSgpOworICAgICAgICAgICAgcmV0dXJuIG90aGVyOworICAgICAgICB9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdGhlIGVxdWFsaXR5IG9mIHR3byBjb21wYWN0IGFycmF5IG9iamVjdHMuCisgICAgICogQHBhcmFtIG9iaiB0aGUgY29tcGFjdCBhcnJheSBvYmplY3QgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGlzLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBjb21wYWN0IGFycmF5IG9iamVjdCBpcyB0aGUgc2FtZQorICAgICAqIGFzIHRoZSBjb21wYWN0IGFycmF5IG9iamVjdCBvYmo7IGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodGhpcyA9PSBvYmopICAgICAgICAgICAgICAgICAgICAgIC8vIHF1aWNrIGNoZWNrCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkpICAgICAgICAgLy8gc2FtZSBjbGFzcz8KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgQ29tcGFjdEJ5dGVBcnJheSBvdGhlciA9IChDb21wYWN0Qnl0ZUFycmF5KSBvYmo7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVU5JQ09ERUNPVU5UOyBpKyspIHsKKyAgICAgICAgICAgIC8vIGNvdWxkIGJlIHNwZWQgdXAgbGF0ZXIKKyAgICAgICAgICAgIGlmIChlbGVtZW50QXQoKGNoYXIpaSkgIT0gb3RoZXIuZWxlbWVudEF0KChjaGFyKWkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gd2UgbWFkZSBpdCB0aHJvdWdoIHRoZSBndWFudGxldC4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgdGhlIGhhc2ggY29kZSBmb3IgdGhlIGNvbXBhY3QgYXJyYXkgb2JqZWN0CisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgaW50IGluY3JlbWVudCA9IE1hdGgubWluKDMsIHZhbHVlcy5sZW5ndGgvMTYpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrPSBpbmNyZW1lbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDM3ICsgdmFsdWVzW2ldOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBwcml2YXRlCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEV4cGFuZGluZyB0YWtlcyB0aGUgYXJyYXkgYmFjayB0byBhIDY1NTM2IGVsZW1lbnQgYXJyYXkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGV4cGFuZCgpCisgICAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgaWYgKGlzQ29tcGFjdCkgeworICAgICAgICAgICAgYnl0ZVtdICB0ZW1wQXJyYXk7CisgICAgICAgICAgICBoYXNoZXMgPSBuZXcgaW50W0lOREVYQ09VTlRdOworICAgICAgICAgICAgdGVtcEFycmF5ID0gbmV3IGJ5dGVbVU5JQ09ERUNPVU5UXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBVTklDT0RFQ09VTlQ7ICsraSkgeworICAgICAgICAgICAgICAgIGJ5dGUgdmFsdWUgPSBlbGVtZW50QXQoKGNoYXIpaSk7CisgICAgICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdG91Y2hCbG9jayhpID4+IEJMT0NLU0hJRlQsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBJTkRFWENPVU5UOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzW2ldID0gKGNoYXIpKGk8PEJMT0NLU0hJRlQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVzID0gbnVsbDsKKyAgICAgICAgICAgIHZhbHVlcyA9IHRlbXBBcnJheTsKKyAgICAgICAgICAgIGlzQ29tcGFjdCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgIGZpbmFsIGludCBCTE9DS1NISUZUID03OworICAgIHByaXZhdGUgc3RhdGljICBmaW5hbCBpbnQgQkxPQ0tDT1VOVCA9KDE8PEJMT0NLU0hJRlQpOworICAgIHByaXZhdGUgc3RhdGljICBmaW5hbCBpbnQgSU5ERVhTSElGVCA9KDE2LUJMT0NLU0hJRlQpOworICAgIHByaXZhdGUgc3RhdGljICBmaW5hbCBpbnQgSU5ERVhDT1VOVCA9KDE8PElOREVYU0hJRlQpOworICAgIHByaXZhdGUgc3RhdGljICBmaW5hbCBpbnQgQkxPQ0tNQVNLID0gQkxPQ0tDT1VOVCAtIDE7CisKKyAgICBwcml2YXRlIGJ5dGVbXSB2YWx1ZXM7CisgICAgcHJpdmF0ZSBjaGFyIGluZGljZXNbXTsKKyAgICBwcml2YXRlIGludFtdIGhhc2hlczsKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNDb21wYWN0OworICAgIGJ5dGUgZGVmYXVsdFZhbHVlOworfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL0NvbXBhY3RDaGFyQXJyYXkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0NvbXBhY3RDaGFyQXJyYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MGE4NTExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ29tcGFjdENoYXJBcnJheS5qYXZhCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9Db21wYWN0Q2hhckFycmF5LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDMgMjI6MDQ6MTcgJCAKKyAqICRSZXZpc2lvbjogMS4xMCAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBjb20uaWJtLmljdS51dGlsOworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIGNsYXNzIENvbXBhY3RBVHlwZUFycmF5IDogdXNlIG9ubHkgb24gcHJpbWl0aXZlIGRhdGEgdHlwZXMKKyAqIFByb3ZpZGVzIGEgY29tcGFjdCB3YXkgdG8gc3RvcmUgaW5mb3JtYXRpb24gdGhhdCBpcyBpbmRleGVkIGJ5IFVuaWNvZGUKKyAqIHZhbHVlcywgc3VjaCBhcyBjaGFyYWN0ZXIgcHJvcGVydGllcywgdHlwZXMsIGtleWJvYXJkIHZhbHVlcywgZXRjLlRoaXMKKyAqIGlzIHZlcnkgdXNlZnVsIHdoZW4geW91IGhhdmUgYSBibG9jayBvZiBVbmljb2RlIGRhdGEgdGhhdCBjb250YWlucworICogc2lnbmlmaWNhbnQgdmFsdWVzIHdoaWxlIHRoZSByZXN0IG9mIHRoZSBVbmljb2RlIGRhdGEgaXMgdW51c2VkIGluIHRoZQorICogYXBwbGljYXRpb24gb3Igd2hlbiB5b3UgaGF2ZSBhIGxvdCBvZiByZWR1bmRhbmNlLCBzdWNoIGFzIHdoZXJlIGFsbCAyMSwwMDAKKyAqIEhhbiBpZGVvZ3JhcGhzIGhhdmUgdGhlIHNhbWUgdmFsdWUuICBIb3dldmVyLCBsb29rdXAgaXMgbXVjaCBmYXN0ZXIgdGhhbiBhCisgKiBoYXNoIHRhYmxlLgorICogQSBjb21wYWN0IGFycmF5IG9mIGFueSBwcmltaXRpdmUgZGF0YSB0eXBlIHNlcnZlcyB0d28gcHVycG9zZXM6CisgKiA8VUwgdHlwZSA9IHJvdW5kPgorICogICAgIDxMST5GYXN0IGFjY2VzcyBvZiB0aGUgaW5kZXhlZCB2YWx1ZXMuCisgKiAgICAgPExJPlNtYWxsZXIgbWVtb3J5IGZvb3RwcmludC4KKyAqIDwvVUw+CisgKiBBIGNvbXBhY3QgYXJyYXkgaXMgY29tcG9zZWQgb2YgYSBpbmRleCBhcnJheSBhbmQgdmFsdWUgYXJyYXkuICBUaGUgaW5kZXgKKyAqIGFycmF5IGNvbnRhaW5zIHRoZSBpbmRpY2llcyBvZiBVbmljb2RlIGNoYXJhY3RlcnMgdG8gdGhlIHZhbHVlIGFycmF5LgorICogQHNlZSAgICAgICAgICAgICAgICBDb21wYWN0Qnl0ZUFycmF5CisgKiBAYXV0aG9yICAgICAgICAgICAgIEhlbGVuYSBTaGloCisgKiBAZHJhZnQgSUNVIDIuNAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29tcGFjdENoYXJBcnJheSBpbXBsZW1lbnRzIENsb25lYWJsZSB7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycy4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgIGZpbmFsIGludCBVTklDT0RFQ09VTlQgPSA2NTUzNjsKKworICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIENvbXBhY3RDaGFyQXJyYXksIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZQorICAgICAqIGNvbXBhY3QgYXJyYXkgaXMgMC4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBDb21wYWN0Q2hhckFycmF5KCkKKyAgICB7CisgICAgICAgIHRoaXMoKGNoYXIpMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgZm9yIENvbXBhY3RDaGFyQXJyYXkuCisgICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgY29tcGFjdCBhcnJheS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBDb21wYWN0Q2hhckFycmF5KGNoYXIgZGVmYXVsdFZhbHVlKQorICAgIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHZhbHVlcyA9IG5ldyBjaGFyW1VOSUNPREVDT1VOVF07CisgICAgICAgIGluZGljZXMgPSBuZXcgY2hhcltJTkRFWENPVU5UXTsKKyAgICAgICAgaGFzaGVzID0gbmV3IGludFtJTkRFWENPVU5UXTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFVOSUNPREVDT1VOVDsgKytpKSB7CisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBkZWZhdWx0VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IElOREVYQ09VTlQ7ICsraSkgeworICAgICAgICAgICAgaW5kaWNlc1tpXSA9IChjaGFyKShpPDxCTE9DS1NISUZUKTsKKyAgICAgICAgICAgIGhhc2hlc1tpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaXNDb21wYWN0ID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgZm9yIENvbXBhY3RDaGFyQXJyYXkuCisgICAgICogQHBhcmFtIGluZGV4QXJyYXkgdGhlIGluZGljaWVzIG9mIHRoZSBjb21wYWN0IGFycmF5LgorICAgICAqIEBwYXJhbSBuZXdWYWx1ZXMgdGhlIHZhbHVlcyBvZiB0aGUgY29tcGFjdCBhcnJheS4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIENvbXBhY3RDaGFyQXJyYXkoY2hhciBpbmRleEFycmF5W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgbmV3VmFsdWVzW10pCisgICAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgaWYgKGluZGV4QXJyYXkubGVuZ3RoICE9IElOREVYQ09VTlQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbmRleCBvdXQgb2YgYm91bmRzLiIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSU5ERVhDT1VOVDsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGluZGV4ID0gaW5kZXhBcnJheVtpXTsKKyAgICAgICAgICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gbmV3VmFsdWVzLmxlbmd0aCtCTE9DS0NPVU5UKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbmRleCBvdXQgb2YgYm91bmRzLiIpOworICAgICAgICB9CisgICAgICAgIGluZGljZXMgPSBpbmRleEFycmF5OworICAgICAgICB2YWx1ZXMgPSBuZXdWYWx1ZXM7CisgICAgICAgIGlzQ29tcGFjdCA9IHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgZm9yIENvbXBhY3RDaGFyQXJyYXkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXhBcnJheSB0aGUgUkxFLWVuY29kZWQgaW5kaWNpZXMgb2YgdGhlIGNvbXBhY3QgYXJyYXkuCisgICAgICogQHBhcmFtIHZhbHVlQXJyYXkgdGhlIFJMRS1lbmNvZGVkIHZhbHVlcyBvZiB0aGUgY29tcGFjdCBhcnJheS4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBpbmRleCBvciB2YWx1ZSBhcnJheSBpcworICAgICAqICAgICAgICAgIHRoZSB3cm9uZyBzaXplLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIENvbXBhY3RDaGFyQXJyYXkoU3RyaW5nIGluZGV4QXJyYXksCisJCQkgICAgU3RyaW5nIHZhbHVlQXJyYXkpCisgICAgeworICAgICAgICB0aGlzKCBVdGlsaXR5LlJMRVN0cmluZ1RvQ2hhckFycmF5KGluZGV4QXJyYXkpLAorICAgICAgICAgICAgICBVdGlsaXR5LlJMRVN0cmluZ1RvQ2hhckFycmF5KHZhbHVlQXJyYXkpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIG1hcHBlZCB2YWx1ZSBvZiBhIFVuaWNvZGUgY2hhcmFjdGVyLgorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgY2hhcmFjdGVyIHRvIGdldCB0aGUgbWFwcGVkIHZhbHVlIHdpdGgKKyAgICAgKiBAcmV0dXJuIHRoZSBtYXBwZWQgdmFsdWUgb2YgdGhlIGdpdmVuIGNoYXJhY3RlcgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGNoYXIgZWxlbWVudEF0KGNoYXIgaW5kZXgpCisgICAgeworCWludCBpeCA9IChpbmRpY2VzW2luZGV4ID4+IEJMT0NLU0hJRlRdICYgMHhGRkZGKQorCSAgICArIChpbmRleCAmIEJMT0NLTUFTSyk7CisJcmV0dXJuIGl4ID49IHZhbHVlcy5sZW5ndGggPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZXNbaXhdOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCBhIG5ldyB2YWx1ZSBmb3IgYSBVbmljb2RlIGNoYXJhY3Rlci4KKyAgICAgKiBTZXQgYXV0b21hdGljYWxseSBleHBhbmRzIHRoZSBhcnJheSBpZiBpdCBpcyBjb21wYWN0ZWQuCisgICAgICogQHBhcmFtIGluZGV4IHRoZSBjaGFyYWN0ZXIgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUgd2l0aAorICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IG1hcHBlZCB2YWx1ZQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RWxlbWVudEF0KGNoYXIgaW5kZXgsIGNoYXIgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaXNDb21wYWN0KQorICAgICAgICAgICAgZXhwYW5kKCk7CisgICAgICAgICB2YWx1ZXNbKGludClpbmRleF0gPSB2YWx1ZTsKKyAgICAgICAgdG91Y2hCbG9jayhpbmRleCA+PiBCTE9DS1NISUZULCB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IG5ldyB2YWx1ZXMgZm9yIGEgcmFuZ2Ugb2YgVW5pY29kZSBjaGFyYWN0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIHN0YXJ0aW5nIG9mZnNldCBvZiB0aGUgcmFuZ2UKKyAgICAgKiBAcGFyYW0gZW5kIHRoZSBlbmRpbmcgb2Zmc2V0IG9mIHRoZSByYW5nZQorICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IG1hcHBlZCB2YWx1ZQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RWxlbWVudEF0KGNoYXIgc3RhcnQsIGNoYXIgZW5kLCBjaGFyIHZhbHVlKQorICAgIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGlmIChpc0NvbXBhY3QpIHsKKyAgICAgICAgICAgIGV4cGFuZCgpOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKSB7CisgICAgICAgICAgICB2YWx1ZXNbaV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHRvdWNoQmxvY2soaSA+PiBCTE9DS1NISUZULCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAgICogQ29tcGFjdCB0aGUgYXJyYXkKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvbXBhY3QoKSB7CisgICAgICAgIGNvbXBhY3QodHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFjdCB0aGUgYXJyYXkuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb21wYWN0KGJvb2xlYW4gZXhoYXVzdGl2ZSkKKyAgICB7CisgICAgICAgIGlmICghaXNDb21wYWN0KSB7CisgICAgICAgICAgICBpbnQgaUJsb2NrU3RhcnQgPSAwOworICAgICAgICAgICAgY2hhciBpVW50b3VjaGVkID0gMHhGRkZGOworICAgICAgICAgICAgaW50IG5ld1NpemUgPSAwOworCisgICAgICAgICAgICBjaGFyW10gdGFyZ2V0ID0gZXhoYXVzdGl2ZSA/IG5ldyBjaGFyW1VOSUNPREVDT1VOVF0gOiB2YWx1ZXM7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7ICsraSwgaUJsb2NrU3RhcnQgKz0gQkxPQ0tDT1VOVCkgeworICAgICAgICAgICAgICAgIGluZGljZXNbaV0gPSAweEZGRkY7CisgICAgICAgICAgICAgICAgYm9vbGVhbiB0b3VjaGVkID0gYmxvY2tUb3VjaGVkKGkpOworICAgICAgICAgICAgICAgIGlmICghdG91Y2hlZCAmJiBpVW50b3VjaGVkICE9IDB4RkZGRikgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBubyB2YWx1ZXMgaW4gdGhpcyBibG9jayB3ZXJlIHNldCwgd2UgY2FuIGp1c3Qgc2V0IGl0cworICAgICAgICAgICAgICAgICAgICAvLyBpbmRleCB0byBiZSB0aGUgc2FtZSBhcyBzb21lIG90aGVyIGJsb2NrIHdpdGggbm8gdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIC8vIHNldCwgYXNzdW1pbmcgd2UndmUgc2VlbiBvbmUgeWV0LgorICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2ldID0gaVVudG91Y2hlZDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnQgakJsb2NrU3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBwcmV2aW91c2x5IGNvbXBhY3RlZCBibG9jayB0aGF0J3MgaWRlbnRpY2FsCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgKytqLCBqQmxvY2tTdGFydCArPSBCTE9DS0NPVU5UKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzaGVzW2ldID09IGhhc2hlc1tqXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJlZ2lvbk1hdGNoZXModmFsdWVzLCBpQmxvY2tTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcywgakJsb2NrU3RhcnQsIEJMT0NLQ09VTlQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGluZGljZXNbal07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGljZXNbaV0gPT0gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdDsgICAvLyBXaGVyZSB0byBjb3B5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhoYXVzdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIG92ZXJsYXAgd2l0aCBhbm90aGVyIGJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IEZpbmRPdmVybGFwcGluZ1Bvc2l0aW9uKGlCbG9ja1N0YXJ0LCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBjb3B5IHRvIHRoZSBlbmQ7IGl0J3MgcXVpY2tlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBuZXdTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0ID0gZGVzdCArIEJMT0NLQ09VTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGltaXQgPiBuZXdTaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IG5ld1NpemU7IGogPCBsaW1pdDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtqXSA9IHZhbHVlc1tpQmxvY2tTdGFydCArIGogLSBkZXN0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2l6ZSA9IGxpbWl0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpXSA9IChjaGFyKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvdWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB1bnRvdWNoZWQgYmxvY2sgd2UndmUgc2VlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1lbWJlciBpdHMgaW5kZXguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaVVudG91Y2hlZCA9IChjaGFyKWpCbG9ja1N0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gd2UgYXJlIGRvbmUgY29tcGFjdGluZywgc28gbm93IG1ha2UgdGhlIGFycmF5IHNob3J0ZXIKKyAgICAgICAgICAgIGNoYXJbXSByZXN1bHQgPSBuZXcgY2hhcltuZXdTaXplXTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGFyZ2V0LCAwLCByZXN1bHQsIDAsIG5ld1NpemUpOworICAgICAgICAgICAgdmFsdWVzID0gcmVzdWx0OworICAgICAgICAgICAgaXNDb21wYWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGhhc2hlcyA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCBGaW5kT3ZlcmxhcHBpbmdQb3NpdGlvbihpbnQgc3RhcnQsIGNoYXJbXSB0ZW1wVmFsdWVzLCBpbnQgdGVtcENvdW50KQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wQ291bnQ7IGkgKz0gMSkgeworICAgICAgICAgICAgaW50IGN1cnJlbnRDb3VudCA9IEJMT0NLQ09VTlQ7CisgICAgICAgICAgICBpZiAoaSArIEJMT0NLQ09VTlQgPiB0ZW1wQ291bnQpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q291bnQgPSB0ZW1wQ291bnQgLSBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFycmF5UmVnaW9uTWF0Y2hlcyh2YWx1ZXMsIHN0YXJ0LCB0ZW1wVmFsdWVzLCBpLCBjdXJyZW50Q291bnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0ZW1wQ291bnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgdXRpbGl0eSB0byBjb21wYXJlIHR3byBhcnJheXMgb2YgZG91Ymxlcy4KKyAgICAgKiBAcGFyYW0gbGVuIHRoZSBsZW5ndGggdG8gY29tcGFyZS4KKyAgICAgKiBUaGUgc3RhcnQgaW5kaWNlcyBhbmQgc3RhcnQrbGVuIG11c3QgYmUgdmFsaWQuCisgICAgICovCisgICAgZmluYWwgc3RhdGljIGJvb2xlYW4gYXJyYXlSZWdpb25NYXRjaGVzKGNoYXJbXSBzb3VyY2UsIGludCBzb3VyY2VTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIHRhcmdldCwgaW50IHRhcmdldFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKQorICAgIHsKKyAgICAgICAgaW50IHNvdXJjZUVuZCA9IHNvdXJjZVN0YXJ0ICsgbGVuOworICAgICAgICBpbnQgZGVsdGEgPSB0YXJnZXRTdGFydCAtIHNvdXJjZVN0YXJ0OworICAgICAgICBmb3IgKGludCBpID0gc291cmNlU3RhcnQ7IGkgPCBzb3VyY2VFbmQ7IGkrKykgeworICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSAhPSB0YXJnZXRbaSArIGRlbHRhXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1lbWJlciB0aGF0IGEgc3BlY2lmaWVkIGJsb2NrIHdhcyAidG91Y2hlZCIsIGkuZS4gaGFkIGEgdmFsdWUgc2V0LgorICAgICAqIFVudG91Y2hlZCBibG9ja3MgY2FuIGJlIHNraXBwZWQgd2hlbiBjb21wYWN0aW5nIHRoZSBhcnJheQorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgdm9pZCB0b3VjaEJsb2NrKGludCBpLCBpbnQgdmFsdWUpIHsKKyAgICAgICAgaGFzaGVzW2ldID0gKGhhc2hlc1tpXSArICh2YWx1ZTw8MSkpIHwgMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBRdWVyeSB3aGV0aGVyIGEgc3BlY2lmaWVkIGJsb2NrIHdhcyAidG91Y2hlZCIsIGkuZS4gaGFkIGEgdmFsdWUgc2V0LgorICAgICAqIFVudG91Y2hlZCBibG9ja3MgY2FuIGJlIHNraXBwZWQgd2hlbiBjb21wYWN0aW5nIHRoZSBhcnJheQorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBibG9ja1RvdWNoZWQoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIGhhc2hlc1tpXSAhPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gIERvIG5vdCBtb2RpZnkgdGhlIHJlc3VsdCwgdGhlIGJlaGF2aW9yIG9mCisgICAgICogbW9kaWZpZWQgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGNoYXJbXSBnZXRJbmRleEFycmF5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRpY2VzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gIERvIG5vdCBtb2RpZnkgdGhlIHJlc3VsdCwgdGhlIGJlaGF2aW9yIG9mCisgICAgICogbW9kaWZpZWQgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGNoYXJbXSBnZXRWYWx1ZUFycmF5KCkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIENsb25lYWJsZQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29tcGFjdENoYXJBcnJheSBvdGhlciA9IChDb21wYWN0Q2hhckFycmF5KSBzdXBlci5jbG9uZSgpOworICAgICAgICAgICAgb3RoZXIudmFsdWVzID0gKGNoYXJbXSl2YWx1ZXMuY2xvbmUoKTsKKyAgICAgICAgICAgIG90aGVyLmluZGljZXMgPSAoY2hhcltdKWluZGljZXMuY2xvbmUoKTsKKyAgICAgICAgICAgIGlmIChoYXNoZXMgIT0gbnVsbCkgb3RoZXIuaGFzaGVzID0gKGludFtdKWhhc2hlcy5jbG9uZSgpOworICAgICAgICAgICAgcmV0dXJuIG90aGVyOworICAgICAgICB9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdGhlIGVxdWFsaXR5IG9mIHR3byBjb21wYWN0IGFycmF5IG9iamVjdHMuCisgICAgICogQHBhcmFtIG9iaiB0aGUgY29tcGFjdCBhcnJheSBvYmplY3QgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGlzLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBjb21wYWN0IGFycmF5IG9iamVjdCBpcyB0aGUgc2FtZQorICAgICAqIGFzIHRoZSBjb21wYWN0IGFycmF5IG9iamVjdCBvYmo7IGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodGhpcyA9PSBvYmopICAgICAgICAgICAgICAgICAgICAgIC8vIHF1aWNrIGNoZWNrCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkpICAgICAgICAgLy8gc2FtZSBjbGFzcz8KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgQ29tcGFjdENoYXJBcnJheSBvdGhlciA9IChDb21wYWN0Q2hhckFycmF5KSBvYmo7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVU5JQ09ERUNPVU5UOyBpKyspIHsKKyAgICAgICAgICAgIC8vIGNvdWxkIGJlIHNwZWQgdXAgbGF0ZXIKKyAgICAgICAgICAgIGlmIChlbGVtZW50QXQoKGNoYXIpaSkgIT0gb3RoZXIuZWxlbWVudEF0KChjaGFyKWkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gd2UgbWFkZSBpdCB0aHJvdWdoIHRoZSBndWFudGxldC4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgdGhlIGhhc2ggY29kZSBmb3IgdGhlIGNvbXBhY3QgYXJyYXkgb2JqZWN0CisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgaW50IGluY3JlbWVudCA9IE1hdGgubWluKDMsIHZhbHVlcy5sZW5ndGgvMTYpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrPSBpbmNyZW1lbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDM3ICsgdmFsdWVzW2ldOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHByaXZhdGUKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogRXhwYW5kaW5nIHRha2VzIHRoZSBhcnJheSBiYWNrIHRvIGEgNjU1MzYgZWxlbWVudCBhcnJheS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZXhwYW5kKCkKKyAgICB7CisgICAgICAgIGludCBpOworICAgICAgICBpZiAoaXNDb21wYWN0KSB7CisgICAgICAgICAgICBjaGFyW10gdGVtcEFycmF5OworICAgICAgICAgICAgaGFzaGVzID0gbmV3IGludFtJTkRFWENPVU5UXTsKKyAgICAgICAgICAgIHRlbXBBcnJheSA9IG5ldyBjaGFyW1VOSUNPREVDT1VOVF07CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVU5JQ09ERUNPVU5UOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSBlbGVtZW50QXQoKGNoYXIpaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSU5ERVhDT1VOVDsgKytpKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlc1tpXSA9IChjaGFyKShpPDxCTE9DS1NISUZUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlcyA9IG51bGw7CisgICAgICAgICAgICB2YWx1ZXMgPSB0ZW1wQXJyYXk7CisgICAgICAgICAgICBpc0NvbXBhY3QgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgIGZpbmFsIGludCBCTE9DS1NISUZUID0gNTsgLy8gTm9ybWFsaXplckJ1aWxkZXIgbmVlZHMgLSBsaXUKKyAgICBzdGF0aWMgIGZpbmFsIGludCBCTE9DS0NPVU5UID0oMTw8QkxPQ0tTSElGVCk7CisgICAgc3RhdGljICBmaW5hbCBpbnQgSU5ERVhTSElGVCA9KDE2LUJMT0NLU0hJRlQpOworICAgIHN0YXRpYyAgZmluYWwgaW50IElOREVYQ09VTlQgPSgxPDxJTkRFWFNISUZUKTsKKyAgICBzdGF0aWMgIGZpbmFsIGludCBCTE9DS01BU0sgPSBCTE9DS0NPVU5UIC0gMTsKKworICAgIHByaXZhdGUgY2hhciB2YWx1ZXNbXTsKKyAgICBwcml2YXRlIGNoYXIgaW5kaWNlc1tdOworICAgIHByaXZhdGUgaW50W10gaGFzaGVzOworICAgIHByaXZhdGUgYm9vbGVhbiBpc0NvbXBhY3Q7CisgICAgY2hhciBkZWZhdWx0VmFsdWU7Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvQ3VycmVuY3kuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0N1cnJlbmN5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3NTg5NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0N1cnJlbmN5LmphdmEKQEAgLTAsMCArMSwzMzggQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9DdXJyZW5jeS5qYXZhLHYgJAorICogJERhdGU6IDIwMDIvMTIvMDQgMDE6MDM6MzkgJAorICogJFJldmlzaW9uOiAxLjEwICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlRGF0YTsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRlY2ltYWxGb3JtYXRTeW1ib2xzOworCitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVU2VydmljZS5LZXk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VTZXJ2aWNlLkZhY3Rvcnk7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5JQ1VMb2NhbGVTZXJ2aWNlOworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlU2VydmljZS5JQ1VSZXNvdXJjZUJ1bmRsZUZhY3Rvcnk7CisKKy8qKgorICogQSBjbGFzcyBlbmNhcHN1bGF0aW5nIGEgY3VycmVuY3ksIGFzIGRlZmluZWQgYnkgSVNPIDQyMTcuICBBCisgKiA8dHQ+Q3VycmVuY3k8L3R0PiBvYmplY3QgY2FuIGJlIGNyZWF0ZWQgZ2l2ZW4gYSA8dHQ+TG9jYWxlPC90dD4gb3IKKyAqIGdpdmVuIGFuIElTTyA0MjE3IGNvZGUuICBPbmNlIGNyZWF0ZWQsIHRoZSA8dHQ+Q3VycmVuY3k8L3R0PiBvYmplY3QKKyAqIGNhbiByZXR1cm4gdmFyaW91cyBkYXRhIG5lY2Vzc2FyeSB0byBpdHMgcHJvcGVyIGRpc3BsYXk6CisgKgorICogPHVsPjxsaT5BIGRpc3BsYXkgc3ltYm9sLCBmb3IgYSBzcGVjaWZpYyBsb2NhbGUKKyAqIDxsaT5UaGUgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byBkaXNwbGF5CisgKiA8bGk+QSByb3VuZGluZyBpbmNyZW1lbnQKKyAqIDwvdWw+CisgKgorICogVGhlIDx0dD5EZWNpbWFsRm9ybWF0PC90dD4gY2xhc3MgdXNlcyB0aGVzZSBkYXRhIHRvIGRpc3BsYXkKKyAqIGN1cnJlbmNpZXMuCisgKgorICogPHA+Tm90ZTogVGhpcyBjbGFzcyBkZWxpYmVyYXRlbHkgcmVzZW1ibGVzCisgKiA8dHQ+amF2YS51dGlsLkN1cnJlbmN5PC90dD4gYnV0IGl0IGhhcyBhIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQKKyAqIGltcGxlbWVudGF0aW9uLCBhbmQgYWRkcyBmZWF0dXJlcyBub3QgcHJlc2VudCBpbiB0aGUgSkRLLgorICogQGF1dGhvciBBbGFuIExpdQorICogQGRyYWZ0IElDVSAyLjIKKyAqLworcHVibGljIGNsYXNzIEN1cnJlbmN5IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKKworICAgIC8qKgorICAgICAqIElTTyA0MjE3IDMtbGV0dGVyIGNvZGUuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgaXNvQ29kZTsKKworICAgIC8vIGJlZ2luIHJlZ2lzdHJ5IHN0dWZmIAorCisgICAgcHJpdmF0ZSBzdGF0aWMgSUNVTG9jYWxlU2VydmljZSBzZXJ2aWNlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgSUNVTG9jYWxlU2VydmljZSBnZXRTZXJ2aWNlKCkgeworICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICBJQ1VMb2NhbGVTZXJ2aWNlIG5ld1NlcnZpY2UgPSBuZXcgSUNVTG9jYWxlU2VydmljZSgiQ3VycmVuY3kiKTsKKworICAgICAgICAgICAgY2xhc3MgQ3VycmVuY3lGYWN0b3J5IGV4dGVuZHMgSUNVUmVzb3VyY2VCdW5kbGVGYWN0b3J5IHsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgT2JqZWN0IGhhbmRsZUNyZWF0ZShMb2NhbGUgbG9jLCBpbnQga2luZCwgSUNVU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IElDVUxvY2FsZURhdGEuZ2V0TG9jYWxlRWxlbWVudHMobG9jKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gY2UgPSBidW5kbGUuZ2V0U3RyaW5nQXJyYXkoIkN1cnJlbmN5RWxlbWVudHMiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJjdXJyZW5jeSBmYWN0b3J5IGxvYzogIiArIGxvYyArICIgcmI6ICIgKyBidW5kbGUgKyAiY2VbMV0iICsgY2VbMV0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEN1cnJlbmN5KGNlWzFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5ld1NlcnZpY2UucmVnaXN0ZXJGYWN0b3J5KG5ldyBDdXJyZW5jeUZhY3RvcnkoKSk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKEN1cnJlbmN5LmNsYXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlID0gbmV3U2VydmljZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcnZpY2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGN1cnJlbmN5IG9iamVjdCBmb3IgdGhlIGRlZmF1bHQgY3VycmVuY3kgaW4gdGhlIGdpdmVuCisgICAgICogbG9jYWxlLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBDdXJyZW5jeSBnZXRJbnN0YW5jZShMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiAoQ3VycmVuY3kpZ2V0U2VydmljZSgpLmdldChsb2NhbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBjdXJyZW5jeSBvYmplY3QgZ2l2ZW4gYW4gSVNPIDQyMTcgMy1sZXR0ZXIgY29kZS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQ3VycmVuY3kgZ2V0SW5zdGFuY2UoU3RyaW5nIHRoZUlTT0NvZGUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDdXJyZW5jeSh0aGVJU09Db2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgYSBuZXcgY3VycmVuY3kgZm9yIHRoZSBwcm92aWRlZCBsb2NhbGUuICBUaGUgcmV0dXJuZWQgb2JqZWN0CisgICAgICogaXMgYSBrZXkgdGhhdCBjYW4gYmUgdXNlZCB0byB1bnJlZ2lzdGVyIHRoaXMgY3VycmVuY3kgb2JqZWN0LgorICAgICAqIEBwcm90b3R5cGUKKyAgICAgKi8KKyAgICAvKiBwdWJsaWMgKi8gc3RhdGljIE9iamVjdCByZWdpc3RlcihDdXJyZW5jeSBjdXJyZW5jeSwgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICByZXR1cm4gZ2V0U2VydmljZSgpLnJlZ2lzdGVyT2JqZWN0KGN1cnJlbmN5LCBsb2NhbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVucmVnaXN0ZXIgdGhlIGN1cnJlbmN5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSAob2J0YWluZWQgZnJvbQorICAgICAqIHJlZ2lzdGVySW5zdGFuY2UpLgorICAgICAqIEBwcm90b3R5cGUKKyAgICAgKi8KKyAgICAvKiBwdWJsaWMgKi8gc3RhdGljIGJvb2xlYW4gdW5yZWdpc3RlcihPYmplY3QgcmVnaXN0cnlLZXkpIHsKKyAgICAgICAgcmV0dXJuIGdldFNlcnZpY2UoKS51bnJlZ2lzdGVyRmFjdG9yeSgoRmFjdG9yeSlyZWdpc3RyeUtleSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIGFycmF5IG9mIHRoZSBsb2NhbGVzIGZvciB3aGljaCBhIGN1cnJlbmN5CisgICAgICogaXMgZGVmaW5lZC4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTG9jYWxlW10gZ2V0QXZhaWxhYmxlTG9jYWxlcygpIHsKKyAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIElDVUxvY2FsZURhdGEuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZW5kIHJlZ2lzdHJ5IHN0dWZmCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBoYXNoY29kZSBmb3IgdGhpcyBjdXJyZW5jeS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgIHJldHVybiBpc29Db2RlLmhhc2hDb2RlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgcmhzIGlzIGEgQ3VycmVuY3kgaW5zdGFuY2UsIAorICAgICAqIGlzIG5vbi1udWxsLCBhbmQgaGFzIHRoZSBzYW1lIGN1cnJlbmN5IGNvZGUuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IHJocykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGVxdWFscygoQ3VycmVuY3kpcmhzKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIGMgaXMgbm9uLW51bGwgYW5kIGhhcyB0aGUgc2FtZSBjdXJyZW5jeSBjb2RlLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKEN1cnJlbmN5IGMpIHsKKyAgICAgICAgaWYgKGMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYyA9PSB0aGlzKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGMuZ2V0Q2xhc3MoKSA9PSBDdXJyZW5jeS5jbGFzcyAmJgorICAgICAgICAgICAgdGhpcy5pc29Db2RlLmVxdWFscyhjLmlzb0NvZGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIElTTyA0MjE3IDMtbGV0dGVyIGNvZGUgZm9yIHRoaXMgY3VycmVuY3kgb2JqZWN0LgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRDdXJyZW5jeUNvZGUoKSB7CisgICAgICAgIHJldHVybiBpc29Db2RlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRpc3BsYXkgc3RyaW5nIGZvciB0aGlzIGN1cnJlbmN5IG9iamVjdCBpbiB0aGUKKyAgICAgKiBnaXZlbiBsb2NhbGUuICBGb3IgZXhhbXBsZSwgdGhlIGRpc3BsYXkgc3RyaW5nIGZvciB0aGUgVVNECisgICAgICogY3VycmVuY3kgb2JqZWN0IGluIHRoZSBlbl9VUyBsb2NhbGUgaXMgIiQiLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRTeW1ib2woTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAvLyBMb29rIHVwIHRoZSBDdXJyZW5jaWVzIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLiAgVGhlCisgICAgICAgIC8vIEN1cnJlbmNpZXMgbG9jYWxlIGxvb2tzIGxpa2UgdGhpcyBpbiB0aGUgb3JpZ2luYWwgQworICAgICAgICAvLyByZXNvdXJjZSBmaWxlOgorICAgICAgICAvL3xlbiB7CisgICAgICAgIC8vfCAgQ3VycmVuY2llcyB7IAorICAgICAgICAvL3wgICAgVVNEIHsgIiQiIH0KKyAgICAgICAgLy98ICAgIENIRiB7ICJzRnIiIH0KKyAgICAgICAgLy98ICAgIC8vLi4uCisgICAgICAgIC8vfCAgfQorICAgICAgICAvL3x9CisgICAgICAgIFJlc291cmNlQnVuZGxlIHJiID0gSUNVTG9jYWxlRGF0YS5nZXRMb2NhbGVFbGVtZW50cyhsb2NhbGUpOworICAgICAgICAvLyBXZSBjYW4ndCBjYXN0IHRoaXMgdG8gU3RyaW5nW11bXTsgdGhlIGNhc3QgaGFzIHRvIGhhcHBlbiBsYXRlcgorICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0W11bXSBjdXJyZW5jaWVzID0gKE9iamVjdFtdW10pIHJiLmdldE9iamVjdCgiQ3VycmVuY2llcyIpOworICAgICAgICAgICAgLy8gRG8gYSBsaW5lYXIgc2VhcmNoCisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8Y3VycmVuY2llcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpc29Db2RlLmVxdWFscygoU3RyaW5nKSBjdXJyZW5jaWVzW2ldWzBdKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFN0cmluZykgY3VycmVuY2llc1tpXVsxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7fQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBTaW5jZSB0aGUgQ3VycmVuY2llcyByZXNvdXJjZSBpcyBub3QgZnVsbHkgcG9wdWxhdGVkIHlldCwKKyAgICAgICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZmluZCB3aGF0IHdlIHdhbnQgaW4gdGhlIEN1cnJlbmN5RWxlbWVudHMKKyAgICAgICAgICAgIC8vIHJlc291cmNlLgorICAgICAgICAgICAgU3RyaW5nW10gY3VycmVuY3lFbGVtZW50cyA9IHJiLmdldFN0cmluZ0FycmF5KCJDdXJyZW5jeUVsZW1lbnRzIik7CisgICAgICAgICAgICBpZiAoY3VycmVuY3lFbGVtZW50c1sxXS5lcXVhbHMoaXNvQ29kZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVuY3lFbGVtZW50c1swXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUyKSB7fQorCisgICAgICAgIC8vIElmIHdlIGZhaWwgdG8gZmluZCBhIG1hdGNoLCB1c2UgdGhlIGZ1bGwgSVNPIGNvZGUKKyAgICAgICAgcmV0dXJuIGlzb0NvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoYXQgc2hvdWxkCisgICAgICogYmUgZGlzcGxheWVkIGZvciB0aGlzIGN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gYSBub24tbmVnYXRpdmUgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byBiZQorICAgICAqIGRpc3BsYXllZAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGludCBnZXREZWZhdWx0RnJhY3Rpb25EaWdpdHMoKSB7CisgICAgICAgIHJldHVybiAoZmluZERhdGEoKSlbMF0uaW50VmFsdWUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSByb3VuZGluZyBpbmNyZW1lbnQgZm9yIHRoaXMgY3VycmVuY3ksIG9yIDAuMCBpZiBubworICAgICAqIHJvdW5kaW5nIGlzIGRvbmUgYnkgdGhpcyBjdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIHRoZSBub24tbmVnYXRpdmUgcm91bmRpbmcgaW5jcmVtZW50LCBvciAwLjAgaWYgbm9uZQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGRvdWJsZSBnZXRSb3VuZGluZ0luY3JlbWVudCgpIHsKKyAgICAgICAgSW50ZWdlcltdIGRhdGEgPSBmaW5kRGF0YSgpOworCisgICAgICAgIGludCBkYXRhMSA9IGRhdGFbMV0uaW50VmFsdWUoKTsgLy8gcm91bmRpbmcgaW5jcmVtZW50CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcm91bmRpbmcgcmV0dXJuIDAuMCB0byBpbmRpY2F0ZSBubyByb3VuZGluZy4KKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgaGlnaC1ydW5uZXIgY2FzZSwgYnkgZmFyLgorICAgICAgICBpZiAoZGF0YTEgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBkYXRhMCA9IGRhdGFbMF0uaW50VmFsdWUoKTsgLy8gZnJhY3Rpb24gZGlnaXRzCisKKyAgICAgICAgLy8gSWYgdGhlIG1ldGEgZGF0YSBpcyBpbnZhbGlkLCByZXR1cm4gMC4wIHRvIGluZGljYXRlIG5vIHJvdW5kaW5nLgorICAgICAgICBpZiAoZGF0YTAgPCAwIHx8IGRhdGEwID49IFBPVzEwLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVybiBkYXRhWzFdIC8gMTBeKGRhdGFbMF0pLiAgVGhlIG9ubHkgYWN0dWFsIHJvdW5kaW5nIGRhdGEsCisgICAgICAgIC8vIGFzIG9mIHRoaXMgd3JpdGluZywgaXMgQ0hGIHsgMiwgMjUgfS4KKyAgICAgICAgcmV0dXJuIChkb3VibGUpIGRhdGExIC8gUE9XMTBbZGF0YTBdOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIElTTyA0MjE3IGNvZGUgZm9yIHRoaXMgY3VycmVuY3kuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gaXNvQ29kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgY3VycmVuY3kgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gSVNPIDQyMTcgMy1sZXR0ZXIKKyAgICAgKiBjb2RlLiAgVGhpcyBjb25zdHJ1Y3RvciBhc3N1bWVzIHRoYXQgdGhlIGNvZGUgaXMgdmFsaWQuCisgICAgICovCisgICAgcHJpdmF0ZSBDdXJyZW5jeShTdHJpbmcgdGhlSVNPQ29kZSkgeworICAgICAgICBpc29Db2RlID0gdGhlSVNPQ29kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBsb29rIHVwIGN1cnJlbmN5IGRhdGEuICBSZXN1bHQgaXMgYW4gYXJyYXkgb2YKKyAgICAgKiB0d28gSW50ZWdlcnMuICBUaGUgZmlyc3QgaXMgdGhlIGZyYWN0aW9uIGRpZ2l0cy4gIFRoZSBzZWNvbmQgaXMgdGhlCisgICAgICogcm91bmRpbmcgaW5jcmVtZW50LCBvciAwIGlmIG5vbmUuICBUaGUgcm91bmRpbmcgaW5jcmVtZW50IGlzIGluCisgICAgICogdW5pdHMgb2YgMTBeKC1mcmFjdGlvbl9kaWdpdHMpLgorICAgICAqLworICAgIHByaXZhdGUgSW50ZWdlcltdIGZpbmREYXRhKCkgeworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBHZXQgQ3VycmVuY3lNZXRhIHJlc291cmNlIG91dCBvZiByb290IGxvY2FsZSBmaWxlLiAgW1RoaXMgbWF5CisgICAgICAgICAgICAvLyBtb3ZlIG91dCBvZiB0aGUgcm9vdCBsb2NhbGUgZmlsZSBsYXRlcjsgaWYgaXQgZG9lcywgdXBkYXRlIHRoaXMKKyAgICAgICAgICAgIC8vIGNvZGUuXQorICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgcm9vdCA9IElDVUxvY2FsZURhdGEuZ2V0TG9jYWxlRWxlbWVudHMoIiIpOworCisgICAgICAgICAgICBPYmplY3RbXVtdIGN1cnJlbmN5TWV0YSA9IChPYmplY3RbXVtdKSByb290LmdldE9iamVjdCgiQ3VycmVuY3lNZXRhIik7CisKKyAgICAgICAgICAgIEludGVnZXJbXSBpID0gbnVsbDsKKyAgICAgICAgICAgIGludCBkZWZhdWx0UG9zID0gLTE7CisKKyAgICAgICAgICAgIC8vIERvIGEgbGluZWFyIHNlYXJjaCBmb3IgaXNvQ29kZS4gIEF0IHRoZSBzYW1lIHRpbWUsCisgICAgICAgICAgICAvLyByZWNvcmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBERUZBVUxUIG1ldGEgZGF0YS4gIElmIHRoZQorICAgICAgICAgICAgLy8gbWV0YSBkYXRhIGJlY29tZXMgbGFyZ2UsIG1ha2UgdGhpcyBmYXN0ZXIuCisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8Y3VycmVuY3lNZXRhLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gcm93ID0gY3VycmVuY3lNZXRhW2pdOworICAgICAgICAgICAgICAgIFN0cmluZyBzID0gKFN0cmluZykgcm93WzBdOworICAgICAgICAgICAgICAgIGludCBjID0gaXNvQ29kZS5jb21wYXJlVG9JZ25vcmVDYXNlKHMpOworICAgICAgICAgICAgICAgIGlmIChjID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IChJbnRlZ2VyW10pIHJvd1sxXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgiREVGQVVMVCIuZXF1YWxzSWdub3JlQ2FzZShzKSkgeworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UG9zID0gajsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGMgPCAwICYmIGRlZmF1bHRQb3MgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpID09IG51bGwgJiYgZGVmYXVsdFBvcyA+PSAwKSB7CisgICAgICAgICAgICAgICAgaSA9IChJbnRlZ2VyW10pIGN1cnJlbmN5TWV0YVtkZWZhdWx0UG9zXVsxXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgIT0gbnVsbCAmJiBpLmxlbmd0aCA+PSAyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7fQorCisgICAgICAgIC8vIENvbmZpZy9idWlsZCBlcnJvcjsgcmV0dXJuIGhhcmQtY29kZWQgZGVmYXVsdHMKKyAgICAgICAgcmV0dXJuIExBU1RfUkVTT1JUX0RBVEE7CisgICAgfQorCisgICAgLy8gRGVmYXVsdCBjdXJyZW5jeSBtZXRhIGRhdGEgb2YgbGFzdCByZXNvcnQuICBXZSB0cnkgdG8gdXNlIHRoZQorICAgIC8vIGRlZmF1bHRzIGVuY29kZWQgaW4gdGhlIG1ldGEgZGF0YSByZXNvdXJjZSBidW5kbGUuICBJZiB0aGVyZSBpcyBhCisgICAgLy8gY29uZmlndXJhdGlvbi9idWlsZCBlcnJvciBhbmQgdGhlc2UgYXJlIG5vdCBhdmFpbGFibGUsIHdlIHVzZSB0aGVzZQorICAgIC8vIGhhcmQtY29kZWQgZGVmYXVsdHMgKHdoaWNoIHNob3VsZCBiZSBpZGVudGljYWwpLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEludGVnZXJbXSBMQVNUX1JFU09SVF9EQVRBID0KKyAgICAgICAgbmV3IEludGVnZXJbXSB7IG5ldyBJbnRlZ2VyKDIpLCBuZXcgSW50ZWdlcigwKSB9OworCisgICAgLy8gUE9XMTBbaV0gPSAxMF5pCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gUE9XMTAgPSB7IDEsIDEwLCAxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAsIDEwMDAwMDAwLCAxMDAwMDAwMDAsIDEwMDAwMDAwMDAgfTsKK30KKworLy9lb2YKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL0RhdGVSdWxlLmphdmEgYi9zcmMvY29tL2libS9pY3UvdXRpbC9EYXRlUnVsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxYzI0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9EYXRlUnVsZS5qYXZhCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL0RhdGVSdWxlLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDQgMTY6Mzg6NTIgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworLyoqCisgKiBEYXRlUnVsZSBpcyBhbiBpbnRlcmZhY2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBkYXRlIG9mIGFuIGV2ZW50LgorICogSXQgc3VwcG9ydHMgYm90aCByZWN1cnJpbmcgZXZlbnRzIGFuZCB0aG9zZSB3aGljaCBvY2N1ciBvbmx5IG9uY2UuCisgKiBEYXRlUnVsZSBpcyB1c2VmdWwgZm9yIHN0b3JpbmcgaW5mb3JtYXRpb24gYWJvdXQgaG9saWRheXMsCisgKiBEYXlsaWdodCBTYXZpbmdzIFRpbWUgcnVsZXMsIGFuZCBvdGhlciBldmVudHMgc3VjaCBhcyBtZWV0aW5ncy4KKyAqCisgKiBAc2VlIFNpbXBsZURhdGVSdWxlCisgKiBAZHJhZnQgSUNVIDIuMgorICovCitwdWJsaWMgaW50ZXJmYWNlIERhdGVSdWxlCit7CisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBmaXJzdCBvY2N1cnJhbmNlIG9mIHRoZSBldmVudCByZXByZXNlbnRlZCBieSB0aGlzIHJ1bGUKKyAgICAgKiB0aGF0IGlzIG9uIG9yIGFmdGVyIHRoZSBnaXZlbiBzdGFydCBkYXRlLgorICAgICAqCisgICAgICogQHBhcmFtIHN0YXJ0IE9ubHkgb2NjdXJyYW5jZXMgb24gb3IgYWZ0ZXIgdGhpcyBkYXRlIGFyZSByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgICBUaGUgZGF0ZSBvbiB3aGljaCB0aGlzIGV2ZW50IG9jY3Vycywgb3IgbnVsbCBpZiBpdAorICAgICAqICAgICAgICAgICAgICBkb2VzIG5vdCBvY2N1ciBvbiBvciBhZnRlciB0aGUgc3RhcnQgZGF0ZS4KKyAgICAgKgorICAgICAqIEBzZWUgI2ZpcnN0QmV0d2VlbgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgYWJzdHJhY3QgcHVibGljIERhdGUgICAgZmlyc3RBZnRlcihEYXRlIHN0YXJ0KTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZmlyc3Qgb2NjdXJyYW5jZSBvZiB0aGUgZXZlbnQgcmVwcmVzZW50ZWQgYnkgdGhpcyBydWxlCisgICAgICogdGhhdCBpcyBvbiBvciBhZnRlciB0aGUgZ2l2ZW4gc3RhcnQgZGF0ZSBhbmQgYmVmb3JlIHRoZSBnaXZlbgorICAgICAqIGVuZCBkYXRlLgorICAgICAqCisgICAgICogQHBhcmFtIHN0YXJ0IE9ubHkgb2NjdXJyYW5jZXMgb24gb3IgYWZ0ZXIgdGhpcyBkYXRlIGFyZSByZXR1cm5lZC4KKyAgICAgKiBAcGFyYW0gZW5kICAgT25seSBvY2N1cnJhbmNlcyBiZWZvcmUgdGhpcyBkYXRlIGFyZSByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgICBUaGUgZGF0ZSBvbiB3aGljaCB0aGlzIGV2ZW50IG9jY3Vycywgb3IgbnVsbCBpZiBpdAorICAgICAqICAgICAgICAgICAgICBkb2VzIG5vdCBvY2N1ciBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzLgorICAgICAqCisgICAgICogQHNlZSAjZmlyc3RBZnRlcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgYWJzdHJhY3QgcHVibGljIERhdGUgICAgZmlyc3RCZXR3ZWVuKERhdGUgc3RhcnQsIERhdGUgZW5kKTsKKworICAgIC8qKgorICAgICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgZXZlbnQgb2NjdXJzIG9uIHRoZSBnaXZlbiBkYXRlLiAgVGhpcyBkb2VzCisgICAgICogPGVtPm5vdDwvZW0+IHRha2UgdGltZSBvZiBkYXkgaW50byBhY2NvdW50OyBpbnN0ZWFkIGl0IGNoZWNrcworICAgICAqIHdoZXRoZXIgdGhpcyBldmVudCBhbmQgdGhlIGdpdmVuIGRhdGUgYXJlIG9uIHRoZSBzYW1lIGRheS4KKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHN1Y2ggYXMgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGdpdmVuCisgICAgICogZGF5IGlzIGEgaG9saWRheS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXRlICBUaGUgZGF0ZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJuICAgICAgdHJ1ZSBpZiB0aGlzIGV2ZW50IG9jY3VycyBvbiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIGFic3RyYWN0IHB1YmxpYyBib29sZWFuIGlzT24oRGF0ZSBkYXRlKTsKKworICAgIC8qKgorICAgICAqIENoZWNrIHdoZXRoZXIgdGhpcyBldmVudCBvY2N1cnMgYXQgbGVhc3Qgb25jZSBiZXR3ZWVuIHRoZSB0d28KKyAgICAgKiBkYXRlcyBnaXZlbi4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIGFic3RyYWN0IHB1YmxpYyBib29sZWFuIGlzQmV0d2VlbihEYXRlIHN0YXJ0LCBEYXRlIGVuZCk7Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvRWFzdGVySG9saWRheS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvRWFzdGVySG9saWRheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiNzgwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9FYXN0ZXJIb2xpZGF5LmphdmEKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL0Vhc3RlckhvbGlkYXkuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNCAwMTowMzozOSAkIAorICogJFJldmlzaW9uOiAxLjcgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lOworCisvKioKKyAqIEEgSG9saWRheSBzdWJjbGFzcyB3aGljaCByZXByZXNlbnRzIGhvbGlkYXlzIHRoYXQgb2NjdXIKKyAqIGEgZml4ZWQgbnVtYmVyIG9mIGRheXMgYmVmb3JlIG9yIGFmdGVyIEVhc3Rlci4gIFN1cHBvcnRzIGJvdGggdGhlCisgKiBXZXN0ZXJuIGFuZCBPcnRob2RveCBtZXRob2RzIGZvciBjYWxjdWxhdGluZyBFYXN0ZXIuCisgKiBAZHJhZnQgSUNVIDIuMgorICovCitwdWJsaWMgY2xhc3MgRWFzdGVySG9saWRheSBleHRlbmRzIEhvbGlkYXkKK3sKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBob2xpZGF5IHRoYXQgZmFsbHMgb24gRWFzdGVyIFN1bmRheSBldmVyeSB5ZWFyCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaG9saWRheQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIEVhc3RlckhvbGlkYXkoU3RyaW5nIG5hbWUpCisgICAgeworICAgICAgICBzdXBlcihuYW1lLCBuZXcgRWFzdGVyUnVsZSgwLCBmYWxzZSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIGhvbGlkYXkgdGhhdCBmYWxscyBhIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyBiZWZvcmUKKyAgICAgKiBvciBhZnRlciBFYXN0ZXIgU3VuZGF5IGVhY2ggeWVhci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXlzQWZ0ZXIgVGhlIG51bWJlciBvZiBkYXlzIGJlZm9yZSAoLSkgb3IgYWZ0ZXIgKCspIEVhc3RlcgorICAgICAqIEBwYXJhbSBuYW1lICAgICAgVGhlIG5hbWUgb2YgdGhlIGhvbGlkYXkKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBFYXN0ZXJIb2xpZGF5KGludCBkYXlzQWZ0ZXIsIFN0cmluZyBuYW1lKQorICAgIHsKKyAgICAgICAgc3VwZXIobmFtZSwgbmV3IEVhc3RlclJ1bGUoZGF5c0FmdGVyLCBmYWxzZSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIGhvbGlkYXkgdGhhdCBmYWxscyBhIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyBiZWZvcmUKKyAgICAgKiBvciBhZnRlciBFYXN0ZXIgU3VuZGF5IGVhY2ggeWVhciwgdXNpbmcgZWl0aGVyIHRoZSBXZXN0ZXJuCisgICAgICogb3IgT3J0aG9kb3ggY2FsZW5kYXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF5c0FmdGVyIFRoZSBudW1iZXIgb2YgZGF5cyBiZWZvcmUgKC0pIG9yIGFmdGVyICgrKSBFYXN0ZXIKKyAgICAgKiBAcGFyYW0gb3J0aG9kb3ggIFVzZSB0aGUgT3J0aG9kb3ggY2FsZW5kYXI/CisgICAgICogQHBhcmFtIG5hbWUgICAgICBUaGUgbmFtZSBvZiB0aGUgaG9saWRheQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIEVhc3RlckhvbGlkYXkoaW50IGRheXNBZnRlciwgYm9vbGVhbiBvcnRob2RveCwgU3RyaW5nIG5hbWUpCisgICAgeworICAgICAgICBzdXBlcihuYW1lLCBuZXcgRWFzdGVyUnVsZShkYXlzQWZ0ZXIsIG9ydGhvZG94KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2hyb3ZlIFR1ZXNkYXksIGFrYSBNYXJkaSBHcmFzLCA0OCBkYXlzIGJlZm9yZSBFYXN0ZXIKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgZmluYWwgRWFzdGVySG9saWRheSBTSFJPVkVfVFVFU0RBWSAgPSBuZXcgRWFzdGVySG9saWRheSgtNDgsICAgICJTaHJvdmUgVHVlc2RheSIpOworCisgICAgLyoqCisgICAgICogQXNoIFdlZG5lc2RheSwgc3RhcnQgb2YgTGVudCwgNDcgZGF5cyBiZWZvcmUgRWFzdGVyCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIEVhc3RlckhvbGlkYXkgQVNIX1dFRE5FU0RBWSAgID0gbmV3IEVhc3RlckhvbGlkYXkoLTQ3LCAgICAiQXNoIFdlZG5lc2RheSIpOworCisgICAgLyoqCisgICAgICogUGFsbSBTdW5kYXksIDcgZGF5cyBiZWZvcmUgRWFzdGVyCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIEVhc3RlckhvbGlkYXkgUEFMTV9TVU5EQVkgICAgID0gbmV3IEVhc3RlckhvbGlkYXkoIC03LCAgICAiUGFsbSBTdW5kYXkiKTsKKworICAgIC8qKgorICAgICAqIE1hdW5keSBUaHVyc2RheSwgMyBkYXlzIGJlZm9yZSBFYXN0ZXIKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgZmluYWwgRWFzdGVySG9saWRheSBNQVVORFlfVEhVUlNEQVkgPSBuZXcgRWFzdGVySG9saWRheSggLTMsICAgICJNYXVuZHkgVGh1cnNkYXkiKTsKKworICAgIC8qKgorICAgICAqIEdvb2QgRnJpZGF5LCAyIGRheXMgYmVmb3JlIEVhc3RlcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBFYXN0ZXJIb2xpZGF5IEdPT0RfRlJJREFZICAgICA9IG5ldyBFYXN0ZXJIb2xpZGF5KCAtMiwgICAgIkdvb2QgRnJpZGF5Iik7CisKKyAgICAvKioKKyAgICAgKiBFYXN0ZXIgU3VuZGF5CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIEVhc3RlckhvbGlkYXkgRUFTVEVSX1NVTkRBWSAgID0gbmV3IEVhc3RlckhvbGlkYXkoICAwLCAgICAiRWFzdGVyIFN1bmRheSIpOworCisgICAgLyoqCisgICAgICogRWFzdGVyIE1vbmRheSwgMSBkYXkgYWZ0ZXIgRWFzdGVyCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIEVhc3RlckhvbGlkYXkgRUFTVEVSX01PTkRBWSAgID0gbmV3IEVhc3RlckhvbGlkYXkoICAxLCAgICAiRWFzdGVyIE1vbmRheSIpOworCisgICAgLyoqCisgICAgICogQXNjZW5zaW9uLCAzOSBkYXlzIGFmdGVyIEVhc3RlcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBFYXN0ZXJIb2xpZGF5IEFTQ0VOU0lPTiAgICAgICA9IG5ldyBFYXN0ZXJIb2xpZGF5KCAzOSwgICAgIkFzY2Vuc2lvbiIpOworCisgICAgLyoqCisgICAgICogUGVudGVjb3N0IChha2EgV2hpdCBTdW5kYXkpLCA0OSBkYXlzIGFmdGVyIEVhc3RlcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBFYXN0ZXJIb2xpZGF5IFBFTlRFQ09TVCAgICAgICA9IG5ldyBFYXN0ZXJIb2xpZGF5KCA0OSwgICAgIlBlbnRlY29zdCIpOworCisgICAgLyoqCisgICAgICogV2hpdCBTdW5kYXkgKGFrYSBQZW50ZWNvc3QpLCA0OSBkYXlzIGFmdGVyIEVhc3RlcgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBFYXN0ZXJIb2xpZGF5IFdISVRfU1VOREFZICAgICA9IG5ldyBFYXN0ZXJIb2xpZGF5KCA0OSwgICAgIldoaXQgU3VuZGF5Iik7CisKKyAgICAvKioKKyAgICAgKiBXaGl0IE1vbmRheSwgNTAgZGF5cyBhZnRlciBFYXN0ZXIKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgZmluYWwgRWFzdGVySG9saWRheSBXSElUX01PTkRBWSAgICAgPSBuZXcgRWFzdGVySG9saWRheSggNTAsICAgICJXaGl0IE1vbmRheSIpOworCisgICAgLyoqCisgICAgICogQ29ycHVzIENocmlzdGksIDYwIGRheXMgYWZ0ZXIgRWFzdGVyCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIEVhc3RlckhvbGlkYXkgQ09SUFVTX0NIUklTVEkgID0gbmV3IEVhc3RlckhvbGlkYXkoIDYwLCAgICAiQ29ycHVzIENocmlzdGkiKTsKK30KKworY2xhc3MgRWFzdGVyUnVsZSBpbXBsZW1lbnRzIERhdGVSdWxlIHsKKyAgICBwdWJsaWMgRWFzdGVyUnVsZShpbnQgZGF5c0FmdGVyRWFzdGVyLCBib29sZWFuIGlzT3J0aG9kb3gpIHsKKyAgICAgICAgdGhpcy5kYXlzQWZ0ZXJFYXN0ZXIgPSBkYXlzQWZ0ZXJFYXN0ZXI7CisgICAgICAgIGlmIChpc09ydGhvZG94KSB7CisgICAgICAgICAgICBvcnRob2RveC5zZXRHcmVnb3JpYW5DaGFuZ2UobmV3IERhdGUoTG9uZy5NQVhfVkFMVUUpKTsKKyAgICAgICAgICAgIGNhbGVuZGFyID0gb3J0aG9kb3g7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IG9jY3VycmFuY2Ugb2YgdGhpcyBydWxlIG9uIG9yIGFmdGVyIHRoZSBnaXZlbiBkYXRlCisgICAgICovCisgICAgcHVibGljIERhdGUgZmlyc3RBZnRlcihEYXRlIHN0YXJ0KQorICAgIHsKKyAgICAgICAgaWYgKHN0YXJ0RGF0ZSAhPSBudWxsICYmIHN0YXJ0LmJlZm9yZShzdGFydERhdGUpKSB7CisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0RGF0ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9GaXJzdEJldHdlZW4oc3RhcnQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZmlyc3Qgb2NjdXJyYW5jZSBvZiB0aGlzIHJ1bGUgb24gb3IgYWZ0ZXIKKyAgICAgKiB0aGUgZ2l2ZW4gc3RhcnQgZGF0ZSBhbmQgYmVmb3JlIHRoZSBnaXZlbiBlbmQgZGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgRGF0ZSBmaXJzdEJldHdlZW4oRGF0ZSBzdGFydCwgRGF0ZSBlbmQpCisgICAgeworICAgICAgICAvLyBQaW4gdG8gdGhlIG1pbi9tYXggZGF0ZXMgZm9yIHRoaXMgcnVsZQorICAgICAgICBpZiAoc3RhcnREYXRlICE9IG51bGwgJiYgc3RhcnQuYmVmb3JlKHN0YXJ0RGF0ZSkpIHsKKyAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnREYXRlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkb0ZpcnN0QmV0d2VlbihzdGFydCwgZW5kKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gRGF0ZSBpcyBvbiB0aGUgc2FtZSBkYXkgYXMgRWFzdGVyCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNPbihEYXRlIGRhdGUpCisgICAgeworICAgICAgICBpZiAoc3RhcnREYXRlICE9IG51bGwgJiYgZGF0ZS5iZWZvcmUoc3RhcnREYXRlKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgc3luY2hyb25pemVkKGNhbGVuZGFyKSB7CisgICAgICAgICAgICBjYWxlbmRhci5zZXRUaW1lKGRhdGUpOworICAgICAgICAgICAgaW50IGRheU9mWWVhciA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUik7CisKKyAgICAgICAgICAgIGNhbGVuZGFyLnNldFRpbWUoY29tcHV0ZUluWWVhcihjYWxlbmRhci5nZXRUaW1lKCksIGNhbGVuZGFyKSk7CisKKyAgICAgICAgICAgIHJldHVybiBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpID09IGRheU9mWWVhcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIEVhc3RlciBvY2N1cnMgYmV0d2VlbiB0aGUgdHdvIGRhdGVzIGdpdmVuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNCZXR3ZWVuKERhdGUgc3RhcnQsIERhdGUgZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpcnN0QmV0d2VlbihzdGFydCwgZW5kKSAhPSBudWxsOyAvLyBUT0RPOiBvcHRpbWl6ZT8KKyAgICB9CisKKyAgICBwcml2YXRlIERhdGUgZG9GaXJzdEJldHdlZW4oRGF0ZSBzdGFydCwgRGF0ZSBlbmQpCisgICAgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZG9GaXJzdEJldHdlZW46IHN0YXJ0ICAgPSAiICsgc3RhcnQudG9TdHJpbmcoKSk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJkb0ZpcnN0QmV0d2VlbjogZW5kICAgICA9ICIgKyBlbmQudG9TdHJpbmcoKSk7CisKKyAgICAgICAgc3luY2hyb25pemVkKGNhbGVuZGFyKSB7CisgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoZW4gdGhpcyBob2xpZGF5IGxhbmRzIGluIHRoZSBnaXZlbiB5ZWFyCisgICAgICAgICAgICBEYXRlIHJlc3VsdCA9IGNvbXB1dGVJblllYXIoc3RhcnQsIGNhbGVuZGFyKTsKKworICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICAgICAgICByZXN1bHQgID0gIiArIHJlc3VsdC50b1N0cmluZygpKTsKKworICAgICAgICAgICAgLy8gV2UgbWlnaHQgaGF2ZSBnb3R0ZW4gYSBkYXRlIHRoYXQncyBpbiB0aGUgc2FtZSB5ZWFyIGFzICJzdGFydCIsIGJ1dAorICAgICAgICAgICAgLy8gZWFybGllciBpbiB0aGUgeWVhci4gIElmIHNvLCBnbyB0byBuZXh0IHllYXIKKyAgICAgICAgICAgIGlmIChyZXN1bHQuYmVmb3JlKHN0YXJ0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYWxlbmRhci5zZXRUaW1lKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuWUVBUik7ICAgIC8vIEpESyAxLjEuMiBidWcgd29ya2Fyb3VuZAorICAgICAgICAgICAgICAgIGNhbGVuZGFyLmFkZChDYWxlbmRhci5ZRUFSLCAxKTsKKworICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAgICAgICAgUmVzdWx0IGJlZm9yZSBzdGFydCwgZ29pbmcgdG8gbmV4dCB5ZWFyOiAiCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICArIGNhbGVuZGFyLmdldFRpbWUoKS50b1N0cmluZygpKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVJblllYXIoY2FsZW5kYXIuZ2V0VGltZSgpLCBjYWxlbmRhcik7CisgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICAgICAgICByZXN1bHQgID0gIiArIHJlc3VsdC50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGVuZCAhPSBudWxsICYmIHJlc3VsdC5hZnRlcihlbmQpKSB7CisgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdCBhZnRlciBlbmQsIHJldHVybmluZyBudWxsIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcHV0ZSB0aGUgbW9udGggYW5kIGRhdGUgb24gd2hpY2ggdGhpcyBob2xpZGF5IGZhbGxzIGluIHRoZSB5ZWFyCisgICAgICogY29udGFpbmluZyB0aGUgZGF0ZSAiZGF0ZSIuICBGaXJzdCBmaWd1cmUgb3V0IHdoaWNoIGRhdGUgRWFzdGVyCisgICAgICogbGFuZHMgb24gaW4gdGhpcyB5ZWFyLCBhbmQgdGhlbiBhZGQgdGhlIG9mZnNldCBmb3IgdGhpcyBob2xpZGF5IHRvIGdldAorICAgICAqIHRoZSByaWdodCBkYXRlLgorICAgICAqIDxwPgorICAgICAqIFRoZSBhbGdvcml0aG0gaGVyZSBpcyB0YWtlbiBmcm9tIHRoZQorICAgICAqIDxhIGhyZWY9aHR0cDovL3d3dy5waXAuZGtuZXQuZGsvfnBpcDEwMTYwL2NhbGVuZGFyLmh0bWw+Q2FsZW5kYXIgRkFRLAorICAgICAqIHZlcnNpb24gMS43PC9hPgorICAgICAqLworICAgIHByaXZhdGUgRGF0ZSBjb21wdXRlSW5ZZWFyKERhdGUgZGF0ZSwgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsKQorICAgIHsKKyAgICAgICAgaWYgKGNhbCA9PSBudWxsKSBjYWwgPSBjYWxlbmRhcjsKKworICAgICAgICBzeW5jaHJvbml6ZWQoY2FsKSB7CisgICAgICAgICAgICBjYWwuc2V0VGltZShkYXRlKTsKKworICAgICAgICAgICAgaW50IHllYXIgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICAgICAgaW50IGcgPSB5ZWFyICUgMTk7ICAvLyAiR29sZGVuIE51bWJlciIgb2YgeWVhciAtIDEKKyAgICAgICAgICAgIGludCBpID0gMDsgICAgICAgICAgLy8gIyBvZiBkYXlzIGZyb20gMy8yMSB0byB0aGUgUGFzY2hhbCBmdWxsIG1vb24KKyAgICAgICAgICAgIGludCBqID0gMDsgICAgICAgICAgLy8gV2Vla2RheSAoMC1iYXNlZCkgb2YgUGFzY2hhbCBmdWxsIG1vb24KKworICAgICAgICAgICAgaWYgKGNhbC5nZXRUaW1lKCkuYWZ0ZXIoIGNhbC5nZXRHcmVnb3JpYW5DaGFuZ2UoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gV2UncmUgcGFzdCB0aGUgR3JlZ29yaWFuIHN3aXRjaG92ZXIsIHNvIHVzZSB0aGUgR3JlZ29yaWFuIHJ1bGVzLgorICAgICAgICAgICAgICAgIGludCBjID0geWVhciAvIDEwMDsKKyAgICAgICAgICAgICAgICBpbnQgaCA9IChjIC0gYy80IC0gKDgqYysxMykvMjUgKyAxOSpnICsgMTUpICUgMzA7CisgICAgICAgICAgICAgICAgaSA9IGggLSAoaC8yOCkqKDEgLSAoaC8yOCkqKDI5LyhoKzEpKSooKDIxLWcpLzExKSk7CisgICAgICAgICAgICAgICAgaiA9ICh5ZWFyICsgeWVhci80ICsgaSArIDIgLSBjICsgYy80KSAlIDc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBvbGQgSnVsaWFuIHJ1bGVzLgorICAgICAgICAgICAgICAgIGkgPSAoMTkqZyArIDE1KSAlIDMwOworICAgICAgICAgICAgICAgIGogPSAoeWVhciArIHllYXIvNCArIGkpICUgNzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBsID0gaSAtIGo7CisgICAgICAgICAgICBpbnQgbSA9IDMgKyAobCs0MCkvNDQ7ICAgICAgICAgICAgICAvLyAxLWJhc2VkIG1vbnRoIGluIHdoaWNoIEVhc3RlciBmYWxscworICAgICAgICAgICAgaW50IGQgPSBsICsgMjggLSAzMSoobS80KTsgICAgICAgICAgLy8gRGF0ZSBvZiBFYXN0ZXIgd2l0aGluIHRoYXQgbW9udGgKKworICAgICAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgICAgICBjYWwuc2V0KENhbGVuZGFyLkVSQSwgR3JlZ29yaWFuQ2FsZW5kYXIuQUQpOworICAgICAgICAgICAgY2FsLnNldChDYWxlbmRhci5ZRUFSLCB5ZWFyKTsKKyAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIG0tMSk7ICAgICAgIC8vIDAtYmFzZWQKKyAgICAgICAgICAgIGNhbC5zZXQoQ2FsZW5kYXIuREFURSwgZCk7CisgICAgICAgICAgICBjYWwuZ2V0VGltZSgpOyAgICAgICAgICAgICAgICAgICAgICAvLyBKREsgMS4xLjIgYnVnIHdvcmthcm91bmQKKyAgICAgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgZGF5c0FmdGVyRWFzdGVyKTsKKworICAgICAgICAgICAgcmV0dXJuIGNhbC5nZXRUaW1lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgR3JlZ29yaWFuQ2FsZW5kYXIgZ3JlZ29yaWFuID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKG5ldyBTaW1wbGVUaW1lWm9uZSgwLCAiVVRDIikpOworICAgIHN0YXRpYyBHcmVnb3JpYW5DYWxlbmRhciBvcnRob2RveCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihuZXcgU2ltcGxlVGltZVpvbmUoMCwgIlVUQyIpKTsKKworICAgIGludCAgICAgICAgICAgICAgIGRheXNBZnRlckVhc3RlcjsKKyAgICBEYXRlICAgICAgICAgICAgICBzdGFydERhdGUgPSBudWxsOworICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbGVuZGFyID0gZ3JlZ29yaWFuOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODIzZjk3YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmphdmEKQEAgLTAsMCArMSw5NTYgQEAKKy8qCisqICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworLyoqCisgKiA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4gaXMgYSBjb25jcmV0ZSBzdWJjbGFzcyBvZgorICoge0BsaW5rIENhbGVuZGFyfQorICogYW5kIHByb3ZpZGVzIHRoZSBzdGFuZGFyZCBjYWxlbmRhciB1c2VkIGJ5IG1vc3Qgb2YgdGhlIHdvcmxkLgorICoKKyAqIDxwPgorICogVGhlIHN0YW5kYXJkIChHcmVnb3JpYW4pIGNhbGVuZGFyIGhhcyAyIGVyYXMsIEJDIGFuZCBBRC4KKyAqCisgKiA8cD4KKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBhIHNpbmdsZSBkaXNjb250aW51aXR5LCB3aGljaCBjb3JyZXNwb25kcyBieQorICogZGVmYXVsdCB0byB0aGUgZGF0ZSB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIHdhcyBpbnN0aXR1dGVkIChPY3RvYmVyIDE1LCAxNTgyCisgKiBpbiBzb21lIGNvdW50cmllcywgbGF0ZXIgaW4gb3RoZXJzKS4gIFRoZSBjdXRvdmVyIGRhdGUgbWF5IGJlIGNoYW5nZWQgYnkgdGhlCisgKiBjYWxsZXIgYnkgY2FsbGluZyA8Y29kZT5zZXRHcmVnb3JpYW5DaGFuZ2UoKTwvY29kZT4uCisgKgorICogPHA+CisgKiBIaXN0b3JpY2FsbHksIGluIHRob3NlIGNvdW50cmllcyB3aGljaCBhZG9wdGVkIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgZmlyc3QsCisgKiBPY3RvYmVyIDQsIDE1ODIgd2FzIHRodXMgZm9sbG93ZWQgYnkgT2N0b2JlciAxNSwgMTU4Mi4gVGhpcyBjYWxlbmRhciBtb2RlbHMKKyAqIHRoaXMgY29ycmVjdGx5LiAgQmVmb3JlIHRoZSBHcmVnb3JpYW4gY3V0b3ZlciwgPGNvZGU+R3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+CisgKiBpbXBsZW1lbnRzIHRoZSBKdWxpYW4gY2FsZW5kYXIuICBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIEdyZWdvcmlhbgorICogYW5kIHRoZSBKdWxpYW4gY2FsZW5kYXIgaXMgdGhlIGxlYXAgeWVhciBydWxlLiBUaGUgSnVsaWFuIGNhbGVuZGFyIHNwZWNpZmllcworICogbGVhcCB5ZWFycyBldmVyeSBmb3VyIHllYXJzLCB3aGVyZWFzIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgb21pdHMgY2VudHVyeQorICogeWVhcnMgd2hpY2ggYXJlIG5vdCBkaXZpc2libGUgYnkgNDAwLgorICoKKyAqIDxwPgorICogPGNvZGU+R3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+IGltcGxlbWVudHMgPGVtPnByb2xlcHRpYzwvZW0+IEdyZWdvcmlhbiBhbmQKKyAqIEp1bGlhbiBjYWxlbmRhcnMuIFRoYXQgaXMsIGRhdGVzIGFyZSBjb21wdXRlZCBieSBleHRyYXBvbGF0aW5nIHRoZSBjdXJyZW50CisgKiBydWxlcyBpbmRlZmluaXRlbHkgZmFyIGJhY2t3YXJkIGFuZCBmb3J3YXJkIGluIHRpbWUuIEFzIGEgcmVzdWx0LAorICogPGNvZGU+R3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+IG1heSBiZSB1c2VkIGZvciBhbGwgeWVhcnMgdG8gZ2VuZXJhdGUKKyAqIG1lYW5pbmdmdWwgYW5kIGNvbnNpc3RlbnQgcmVzdWx0cy4gSG93ZXZlciwgZGF0ZXMgb2J0YWluZWQgdXNpbmcKKyAqIDxjb2RlPkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPiBhcmUgaGlzdG9yaWNhbGx5IGFjY3VyYXRlIG9ubHkgZnJvbSBNYXJjaCAxLCA0CisgKiBBRCBvbndhcmQsIHdoZW4gbW9kZXJuIEp1bGlhbiBjYWxlbmRhciBydWxlcyB3ZXJlIGFkb3B0ZWQuICBCZWZvcmUgdGhpcyBkYXRlLAorICogbGVhcCB5ZWFyIHJ1bGVzIHdlcmUgYXBwbGllZCBpcnJlZ3VsYXJseSwgYW5kIGJlZm9yZSA0NSBCQyB0aGUgSnVsaWFuCisgKiBjYWxlbmRhciBkaWQgbm90IGV2ZW4gZXhpc3QuCisgKgorICogPHA+CisgKiBQcmlvciB0byB0aGUgaW5zdGl0dXRpb24gb2YgdGhlIEdyZWdvcmlhbiBjYWxlbmRhciwgTmV3IFllYXIncyBEYXkgd2FzCisgKiBNYXJjaCAyNS4gVG8gYXZvaWQgY29uZnVzaW9uLCB0aGlzIGNhbGVuZGFyIGFsd2F5cyB1c2VzIEphbnVhcnkgMS4gQSBtYW51YWwKKyAqIGFkanVzdG1lbnQgbWF5IGJlIG1hZGUgaWYgZGVzaXJlZCBmb3IgZGF0ZXMgdGhhdCBhcmUgcHJpb3IgdG8gdGhlIEdyZWdvcmlhbgorICogY2hhbmdlb3ZlciBhbmQgd2hpY2ggZmFsbCBiZXR3ZWVuIEphbnVhcnkgMSBhbmQgTWFyY2ggMjQuCisgKgorICogPHA+VmFsdWVzIGNhbGN1bGF0ZWQgZm9yIHRoZSA8Y29kZT5XRUVLX09GX1lFQVI8L2NvZGU+IGZpZWxkIHJhbmdlIGZyb20gMSB0bworICogNTMuICBXZWVrIDEgZm9yIGEgeWVhciBpcyB0aGUgZWFybGllc3Qgc2V2ZW4gZGF5IHBlcmlvZCBzdGFydGluZyBvbgorICogPGNvZGU+Z2V0Rmlyc3REYXlPZldlZWsoKTwvY29kZT4gdGhhdCBjb250YWlucyBhdCBsZWFzdAorICogPGNvZGU+Z2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpPC9jb2RlPiBkYXlzIGZyb20gdGhhdCB5ZWFyLiAgSXQgdGh1cworICogZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIDxjb2RlPmdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKTwvY29kZT4sCisgKiA8Y29kZT5nZXRGaXJzdERheU9mV2VlaygpPC9jb2RlPiwgYW5kIHRoZSBkYXkgb2YgdGhlIHdlZWsgb2YgSmFudWFyeSAxLgorICogV2Vla3MgYmV0d2VlbiB3ZWVrIDEgb2Ygb25lIHllYXIgYW5kIHdlZWsgMSBvZiB0aGUgZm9sbG93aW5nIHllYXIgYXJlCisgKiBudW1iZXJlZCBzZXF1ZW50aWFsbHkgZnJvbSAyIHRvIDUyIG9yIDUzIChhcyBuZWVkZWQpLgorCisgKiA8cD5Gb3IgZXhhbXBsZSwgSmFudWFyeSAxLCAxOTk4IHdhcyBhIFRodXJzZGF5LiAgSWYKKyAqIDxjb2RlPmdldEZpcnN0RGF5T2ZXZWVrKCk8L2NvZGU+IGlzIDxjb2RlPk1PTkRBWTwvY29kZT4gYW5kCisgKiA8Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCk8L2NvZGU+IGlzIDQgKHRoZXNlIGFyZSB0aGUgdmFsdWVzCisgKiByZWZsZWN0aW5nIElTTyA4NjAxIGFuZCBtYW55IG5hdGlvbmFsIHN0YW5kYXJkcyksIHRoZW4gd2VlayAxIG9mIDE5OTggc3RhcnRzCisgKiBvbiBEZWNlbWJlciAyOSwgMTk5NywgYW5kIGVuZHMgb24gSmFudWFyeSA0LCAxOTk4LiAgSWYsIGhvd2V2ZXIsCisgKiA8Y29kZT5nZXRGaXJzdERheU9mV2VlaygpPC9jb2RlPiBpcyA8Y29kZT5TVU5EQVk8L2NvZGU+LCB0aGVuIHdlZWsgMSBvZiAxOTk4CisgKiBzdGFydHMgb24gSmFudWFyeSA0LCAxOTk4LCBhbmQgZW5kcyBvbiBKYW51YXJ5IDEwLCAxOTk4OyB0aGUgZmlyc3QgdGhyZWUgZGF5cworICogb2YgMTk5OCB0aGVuIGFyZSBwYXJ0IG9mIHdlZWsgNTMgb2YgMTk5Ny4KKyAqCisgKiA8cD5WYWx1ZXMgY2FsY3VsYXRlZCBmb3IgdGhlIDxjb2RlPldFRUtfT0ZfTU9OVEg8L2NvZGU+IGZpZWxkIHJhbmdlIGZyb20gMCBvcgorICogMSB0byA0IG9yIDUuICBXZWVrIDEgb2YgYSBtb250aCAodGhlIGRheXMgd2l0aCA8Y29kZT5XRUVLX09GX01PTlRIID0KKyAqIDE8L2NvZGU+KSBpcyB0aGUgZWFybGllc3Qgc2V0IG9mIGF0IGxlYXN0CisgKiA8Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCk8L2NvZGU+IGNvbnRpZ3VvdXMgZGF5cyBpbiB0aGF0IG1vbnRoLAorICogZW5kaW5nIG9uIHRoZSBkYXkgYmVmb3JlIDxjb2RlPmdldEZpcnN0RGF5T2ZXZWVrKCk8L2NvZGU+LiAgVW5saWtlCisgKiB3ZWVrIDEgb2YgYSB5ZWFyLCB3ZWVrIDEgb2YgYSBtb250aCBtYXkgYmUgc2hvcnRlciB0aGFuIDcgZGF5cywgbmVlZAorICogbm90IHN0YXJ0IG9uIDxjb2RlPmdldEZpcnN0RGF5T2ZXZWVrKCk8L2NvZGU+LCBhbmQgd2lsbCBub3QgaW5jbHVkZSBkYXlzIG9mCisgKiB0aGUgcHJldmlvdXMgbW9udGguICBEYXlzIG9mIGEgbW9udGggYmVmb3JlIHdlZWsgMSBoYXZlIGEKKyAqIDxjb2RlPldFRUtfT0ZfTU9OVEg8L2NvZGU+IG9mIDAuCisgKgorICogPHA+Rm9yIGV4YW1wbGUsIGlmIDxjb2RlPmdldEZpcnN0RGF5T2ZXZWVrKCk8L2NvZGU+IGlzIDxjb2RlPlNVTkRBWTwvY29kZT4KKyAqIGFuZCA8Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCk8L2NvZGU+IGlzIDQsIHRoZW4gdGhlIGZpcnN0IHdlZWsgb2YKKyAqIEphbnVhcnkgMTk5OCBpcyBTdW5kYXksIEphbnVhcnkgNCB0aHJvdWdoIFNhdHVyZGF5LCBKYW51YXJ5IDEwLiAgVGhlc2UgZGF5cworICogaGF2ZSBhIDxjb2RlPldFRUtfT0ZfTU9OVEg8L2NvZGU+IG9mIDEuICBUaHVyc2RheSwgSmFudWFyeSAxIHRocm91Z2gKKyAqIFNhdHVyZGF5LCBKYW51YXJ5IDMgaGF2ZSBhIDxjb2RlPldFRUtfT0ZfTU9OVEg8L2NvZGU+IG9mIDAuICBJZgorICogPGNvZGU+Z2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpPC9jb2RlPiBpcyBjaGFuZ2VkIHRvIDMsIHRoZW4gSmFudWFyeSAxCisgKiB0aHJvdWdoIEphbnVhcnkgMyBoYXZlIGEgPGNvZGU+V0VFS19PRl9NT05USDwvY29kZT4gb2YgMS4KKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+RXhhbXBsZTo8L3N0cm9uZz4KKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIC8vIGdldCB0aGUgc3VwcG9ydGVkIGlkcyBmb3IgR01ULTA4OjAwIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpCisgKiBTdHJpbmdbXSBpZHMgPSBUaW1lWm9uZS5nZXRBdmFpbGFibGVJRHMoLTggKiA2MCAqIDYwICogMTAwMCk7CisgKiAvLyBpZiBubyBpZHMgd2VyZSByZXR1cm5lZCwgc29tZXRoaW5nIGlzIHdyb25nLiBnZXQgb3V0LgorICogaWYgKGlkcy5sZW5ndGggPT0gMCkKKyAqICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAqCisgKiAgLy8gYmVnaW4gb3V0cHV0CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIkN1cnJlbnQgVGltZSIpOworICoKKyAqIC8vIGNyZWF0ZSBhIFBhY2lmaWMgU3RhbmRhcmQgVGltZSB0aW1lIHpvbmUKKyAqIFNpbXBsZVRpbWVab25lIHBkdCA9IG5ldyBTaW1wbGVUaW1lWm9uZSgtOCAqIDYwICogNjAgKiAxMDAwLCBpZHNbMF0pOworICoKKyAqIC8vIHNldCB1cCBydWxlcyBmb3IgZGF5bGlnaHQgc2F2aW5ncyB0aW1lCisgKiBwZHQuc2V0U3RhcnRSdWxlKENhbGVuZGFyLkFQUklMLCAxLCBDYWxlbmRhci5TVU5EQVksIDIgKiA2MCAqIDYwICogMTAwMCk7CisgKiBwZHQuc2V0RW5kUnVsZShDYWxlbmRhci5PQ1RPQkVSLCAtMSwgQ2FsZW5kYXIuU1VOREFZLCAyICogNjAgKiA2MCAqIDEwMDApOworICoKKyAqIC8vIGNyZWF0ZSBhIEdyZWdvcmlhbkNhbGVuZGFyIHdpdGggdGhlIFBhY2lmaWMgRGF5bGlnaHQgdGltZSB6b25lCisgKiAvLyBhbmQgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZQorICogQ2FsZW5kYXIgY2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIocGR0KTsKKyAqIERhdGUgdHJpYWxUaW1lID0gbmV3IERhdGUoKTsKKyAqIGNhbGVuZGFyLnNldFRpbWUodHJpYWxUaW1lKTsKKyAqCisgKiAvLyBwcmludCBvdXQgYSBidW5jaCBvZiBpbnRlcmVzdGluZyB0aGluZ3MKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiRVJBOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkVSQSkpOworICogU3lzdGVtLm91dC5wcmludGxuKCJZRUFSOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiTU9OVEg6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuTU9OVEgpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiV0VFS19PRl9ZRUFSOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLldFRUtfT0ZfWUVBUikpOworICogU3lzdGVtLm91dC5wcmludGxuKCJXRUVLX09GX01PTlRIOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLldFRUtfT0ZfTU9OVEgpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiREFURTogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVRFKSk7CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIkRBWV9PRl9NT05USDogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiREFZX09GX1lFQVI6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiREFZX09GX1dFRUs6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiREFZX09GX1dFRUtfSU5fTU9OVEg6ICIKKyAqICAgICAgICAgICAgICAgICAgICArIGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFS19JTl9NT05USCkpOworICogU3lzdGVtLm91dC5wcmludGxuKCJBTV9QTTogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5BTV9QTSkpOworICogU3lzdGVtLm91dC5wcmludGxuKCJIT1VSOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVIpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiSE9VUl9PRl9EQVk6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiTUlOVVRFOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTlVURSkpOworICogU3lzdGVtLm91dC5wcmludGxuKCJTRUNPTkQ6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuU0VDT05EKSk7CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIk1JTExJU0VDT05EOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTExJU0VDT05EKSk7CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIlpPTkVfT0ZGU0VUOiAiCisgKiAgICAgICAgICAgICAgICAgICAgKyAoY2FsZW5kYXIuZ2V0KENhbGVuZGFyLlpPTkVfT0ZGU0VUKS8oNjAqNjAqMTAwMCkpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiRFNUX09GRlNFVDogIgorICogICAgICAgICAgICAgICAgICAgICsgKGNhbGVuZGFyLmdldChDYWxlbmRhci5EU1RfT0ZGU0VUKS8oNjAqNjAqMTAwMCkpKTsKKworICogU3lzdGVtLm91dC5wcmludGxuKCJDdXJyZW50IFRpbWUsIHdpdGggaG91ciByZXNldCB0byAzIik7CisgKiBjYWxlbmRhci5jbGVhcihDYWxlbmRhci5IT1VSX09GX0RBWSk7IC8vIHNvIGRvZXNuJ3Qgb3ZlcnJpZGUKKyAqIGNhbGVuZGFyLnNldChDYWxlbmRhci5IT1VSLCAzKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiRVJBOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkVSQSkpOworICogU3lzdGVtLm91dC5wcmludGxuKCJZRUFSOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiTU9OVEg6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuTU9OVEgpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiV0VFS19PRl9ZRUFSOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLldFRUtfT0ZfWUVBUikpOworICogU3lzdGVtLm91dC5wcmludGxuKCJXRUVLX09GX01PTlRIOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLldFRUtfT0ZfTU9OVEgpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiREFURTogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVRFKSk7CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIkRBWV9PRl9NT05USDogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiREFZX09GX1lFQVI6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiREFZX09GX1dFRUs6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiREFZX09GX1dFRUtfSU5fTU9OVEg6ICIKKyAqICAgICAgICAgICAgICAgICAgICArIGNhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFS19JTl9NT05USCkpOworICogU3lzdGVtLm91dC5wcmludGxuKCJBTV9QTTogIiArIGNhbGVuZGFyLmdldChDYWxlbmRhci5BTV9QTSkpOworICogU3lzdGVtLm91dC5wcmludGxuKCJIT1VSOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVIpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiSE9VUl9PRl9EQVk6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpKTsKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiTUlOVVRFOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTlVURSkpOworICogU3lzdGVtLm91dC5wcmludGxuKCJTRUNPTkQ6ICIgKyBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuU0VDT05EKSk7CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIk1JTExJU0VDT05EOiAiICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTExJU0VDT05EKSk7CisgKiBTeXN0ZW0ub3V0LnByaW50bG4oIlpPTkVfT0ZGU0VUOiAiCisgKiAgICAgICAgKyAoY2FsZW5kYXIuZ2V0KENhbGVuZGFyLlpPTkVfT0ZGU0VUKS8oNjAqNjAqMTAwMCkpKTsgLy8gaW4gaG91cnMKKyAqIFN5c3RlbS5vdXQucHJpbnRsbigiRFNUX09GRlNFVDogIgorICogICAgICAgICsgKGNhbGVuZGFyLmdldChDYWxlbmRhci5EU1RfT0ZGU0VUKS8oNjAqNjAqMTAwMCkpKTsgLy8gaW4gaG91cnMKKyAqIDwvcHJlPgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIEBzZWUgICAgICAgICAgQ2FsZW5kYXIKKyAqIEBzZWUgICAgICAgICAgVGltZVpvbmUKKyAqIEBhdXRob3IgRGF2aWQgR29sZHNtaXRoLCBNYXJrIERhdmlzLCBDaGVuLUxpZWggSHVhbmcsIEFsYW4gTGl1CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworcHVibGljIGNsYXNzIEdyZWdvcmlhbkNhbGVuZGFyIGV4dGVuZHMgQ2FsZW5kYXIgeworICAgIC8qCisgICAgICogSW1wbGVtZW50YXRpb24gTm90ZXMKKyAgICAgKgorICAgICAqIFRoZSBKdWxpYW4gZGF5IG51bWJlciwgYXMgdXNlZCBoZXJlLCBpcyBhIG1vZGlmaWVkIG51bWJlciB3aGljaCBoYXMgaXRzCisgICAgICogb25zZXQgYXQgbWlkbmlnaHQsIHJhdGhlciB0aGFuIG5vb24uCisgICAgICoKKyAgICAgKiBUaGUgZXBvY2ggaXMgdGhlIG51bWJlciBvZiBkYXlzIG9yIG1pbGxpc2Vjb25kcyBmcm9tIHNvbWUgZGVmaW5lZAorICAgICAqIHN0YXJ0aW5nIHBvaW50LiBUaGUgZXBvY2ggZm9yIGphdmEudXRpbC5EYXRlIGlzIHVzZWQgaGVyZTsgdGhhdCBpcywKKyAgICAgKiBtaWxsaXNlY29uZHMgZnJvbSBKYW51YXJ5IDEsIDE5NzAgKEdyZWdvcmlhbiksIG1pZG5pZ2h0IFVUQy4gIE90aGVyCisgICAgICogZXBvY2hzIHdoaWNoIGFyZSB1c2VkIGFyZSBKYW51YXJ5IDEsIHllYXIgMSAoR3JlZ29yaWFuKSwgd2hpY2ggaXMgZGF5IDEKKyAgICAgKiBvZiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLCBhbmQgRGVjZW1iZXIgMzAsIHllYXIgMCAoR3JlZ29yaWFuKSwgd2hpY2ggaXMKKyAgICAgKiBkYXkgMSBvZiB0aGUgSnVsaWFuIGNhbGVuZGFyLgorICAgICAqCisgICAgICogV2UgaW1wbGVtZW50IHRoZSBwcm9sZXB0aWMgSnVsaWFuIGFuZCBHcmVnb3JpYW4gY2FsZW5kYXJzLiAgVGhpcyBtZWFucyB3ZQorICAgICAqIGltcGxlbWVudCB0aGUgbW9kZXJuIGRlZmluaXRpb24gb2YgdGhlIGNhbGVuZGFyIGV2ZW4gdGhvdWdoIHRoZQorICAgICAqIGhpc3RvcmljYWwgdXNhZ2UgZGlmZmVycy4gIEZvciBleGFtcGxlLCBpZiB0aGUgR3JlZ29yaWFuIGNoYW5nZSBpcyBzZXQKKyAgICAgKiB0byBuZXcgRGF0ZShMb25nLk1JTl9WQUxVRSksIHdlIGhhdmUgYSBwdXJlIEdyZWdvcmlhbiBjYWxlbmRhciB3aGljaAorICAgICAqIGxhYmVscyBkYXRlcyBwcmVjZWRpbmcgdGhlIGludmVudGlvbiBvZiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGluIDE1ODIgYXMKKyAgICAgKiBpZiB0aGUgY2FsZW5kYXIgZXhpc3RlZCB0aGVuLgorICAgICAqCisgICAgICogTGlrZXdpc2UsIHdpdGggdGhlIEp1bGlhbiBjYWxlbmRhciwgd2UgYXNzdW1lIGEgY29uc2lzdGVudCA0LXllYXIgbGVhcAorICAgICAqIHJ1bGUsIGV2ZW4gdGhvdWdoIHRoZSBoaXN0b3JpY2FsIHBhdHRlcm4gb2YgbGVhcCB5ZWFycyBpcyBpcnJlZ3VsYXIsCisgICAgICogYmVpbmcgZXZlcnkgMyB5ZWFycyBmcm9tIDQ1IEJDIHRocm91Z2ggOSBCQywgdGhlbiBldmVyeSA0IHllYXJzIGZyb20gOCBBRAorICAgICAqIG9ud2FyZHMsIHdpdGggbm8gbGVhcCB5ZWFycyBpbi1iZXR3ZWVuLiAgVGh1cyBkYXRlIGNvbXB1dGF0aW9ucyBhbmQKKyAgICAgKiBmdW5jdGlvbnMgc3VjaCBhcyBpc0xlYXBZZWFyKCkgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSBoaXN0b3JpY2FsbHkKKyAgICAgKiBhY2N1cmF0ZS4KKyAgICAgKgorICAgICAqIEdpdmVuIHRoYXQgbWlsbGlzZWNvbmRzIGFyZSBhIGxvbmcsIGRheSBudW1iZXJzIHN1Y2ggYXMgSnVsaWFuIGRheQorICAgICAqIG51bWJlcnMsIEdyZWdvcmlhbiBvciBKdWxpYW4gY2FsZW5kYXIgZGF5cywgb3IgZXBvY2ggZGF5cywgYXJlIGFsc28KKyAgICAgKiBsb25ncy4gWWVhcnMgY2FuIGZpdCBpbnRvIGFuIGludC4KKyAgICAgKi8KKworLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDbGFzcyBWYXJpYWJsZXMKKy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLyoqCisgICAgICogVmFsdWUgb2YgdGhlIDxjb2RlPkVSQTwvY29kZT4gZmllbGQgaW5kaWNhdGluZworICAgICAqIHRoZSBwZXJpb2QgYmVmb3JlIHRoZSBjb21tb24gZXJhIChiZWZvcmUgQ2hyaXN0KSwgYWxzbyBrbm93biBhcyBCQ0UuCisgICAgICogVGhlIHNlcXVlbmNlIG9mIHllYXJzIGF0IHRoZSB0cmFuc2l0aW9uIGZyb20gPGNvZGU+QkM8L2NvZGU+IHRvIDxjb2RlPkFEPC9jb2RlPiBpcworICAgICAqIC4uLiwgMiBCQywgMSBCQywgMSBBRCwgMiBBRCwuLi4KKyAgICAgKiBAc2VlIENhbGVuZGFyI0VSQQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJDID0gMDsKKworICAgIC8qKgorICAgICAqIFZhbHVlIG9mIHRoZSA8Y29kZT5FUkE8L2NvZGU+IGZpZWxkIGluZGljYXRpbmcKKyAgICAgKiB0aGUgY29tbW9uIGVyYSAoQW5ubyBEb21pbmkpLCBhbHNvIGtub3duIGFzIENFLgorICAgICAqIFRoZSBzZXF1ZW5jZSBvZiB5ZWFycyBhdCB0aGUgdHJhbnNpdGlvbiBmcm9tIDxjb2RlPkJDPC9jb2RlPiB0byA8Y29kZT5BRDwvY29kZT4gaXMKKyAgICAgKiAuLi4sIDIgQkMsIDEgQkMsIDEgQUQsIDIgQUQsLi4uCisgICAgICogQHNlZSBDYWxlbmRhciNFUkEKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRCA9IDE7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVBPQ0hfWUVBUiA9IDE5NzA7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXVtdIE1PTlRIX0NPVU5UID0geworICAgICAgICAvL2xlbiBsZW4yICAgc3QgIHN0MgorICAgICAgICB7ICAzMSwgIDMxLCAgIDAsICAgMCB9LCAvLyBKYW4KKyAgICAgICAgeyAgMjgsICAyOSwgIDMxLCAgMzEgfSwgLy8gRmViCisgICAgICAgIHsgIDMxLCAgMzEsICA1OSwgIDYwIH0sIC8vIE1hcgorICAgICAgICB7ICAzMCwgIDMwLCAgOTAsICA5MSB9LCAvLyBBcHIKKyAgICAgICAgeyAgMzEsICAzMSwgMTIwLCAxMjEgfSwgLy8gTWF5CisgICAgICAgIHsgIDMwLCAgMzAsIDE1MSwgMTUyIH0sIC8vIEp1bgorICAgICAgICB7ICAzMSwgIDMxLCAxODEsIDE4MiB9LCAvLyBKdWwKKyAgICAgICAgeyAgMzEsICAzMSwgMjEyLCAyMTMgfSwgLy8gQXVnCisgICAgICAgIHsgIDMwLCAgMzAsIDI0MywgMjQ0IH0sIC8vIFNlcAorICAgICAgICB7ICAzMSwgIDMxLCAyNzMsIDI3NCB9LCAvLyBPY3QKKyAgICAgICAgeyAgMzAsICAzMCwgMzA0LCAzMDUgfSwgLy8gTm92CisgICAgICAgIHsgIDMxLCAgMzEsIDMzNCwgMzM1IH0gIC8vIERlYworICAgICAgICAvLyBsZW4gIGxlbmd0aCBvZiBtb250aAorICAgICAgICAvLyBsZW4yIGxlbmd0aCBvZiBtb250aCBpbiBhIGxlYXAgeWVhcgorICAgICAgICAvLyBzdCAgIGRheXMgaW4geWVhciBiZWZvcmUgc3RhcnQgb2YgbW9udGgKKyAgICAgICAgLy8gc3QyICBkYXlzIGluIHllYXIgYmVmb3JlIG1vbnRoIGluIGxlYXAgeWVhcgorICAgIH07CisgICAgCisgICAgLyoqCisgICAgICogT2xkIHllYXIgbGltaXRzIHdlcmUgbGVhc3QgbWF4IDI5MjI2OTA1NCwgbWF4IDI5MjI3ODk5NC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElNSVRTW11bXSA9IHsKKyAgICAgICAgLy8gTWluaW11bSAgR3JlYXRlc3QgICAgTGVhc3QgIE1heGltdW0KKyAgICAgICAgLy8gICAgICAgICAgIE1pbmltdW0gIE1heGltdW0KKyAgICAgICAgeyAgICAgICAgMCwgICAgICAgIDAsICAgICAgIDEsICAgICAgIDEgfSwgLy8gRVJBCisgICAgICAgIHsgICAgICAgIDEsICAgICAgICAxLCA1ODI4OTYzLCA1ODM4MjcwIH0sIC8vIFlFQVIKKyAgICAgICAgeyAgICAgICAgMCwgICAgICAgIDAsICAgICAgMTEsICAgICAgMTEgfSwgLy8gTU9OVEgKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsICAgICAgNTIsICAgICAgNTMgfSwgLy8gV0VFS19PRl9ZRUFSCisgICAgICAgIHsgICAgICAgIDAsICAgICAgICAwLCAgICAgICA0LCAgICAgICA2IH0sIC8vIFdFRUtfT0ZfTU9OVEgKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsICAgICAgMjgsICAgICAgMzEgfSwgLy8gREFZX09GX01PTlRICisgICAgICAgIHsgICAgICAgIDEsICAgICAgICAxLCAgICAgMzY1LCAgICAgMzY2IH0sIC8vIERBWV9PRl9ZRUFSCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIERBWV9PRl9XRUVLCisgICAgICAgIHsgICAgICAgLTEsICAgICAgIC0xLCAgICAgICA0LCAgICAgICA2IH0sIC8vIERBWV9PRl9XRUVLX0lOX01PTlRICisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIEFNX1BNCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIEhPVVIKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gSE9VUl9PRl9EQVkKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gTUlOVVRFCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIFNFQ09ORAorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBNSUxMSVNFQ09ORAorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBaT05FX09GRlNFVAorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBEU1RfT0ZGU0VUCisgICAgICAgIHsgLTU4MzgyNzAsIC01ODM4MjcwLCA1ODI4OTY0LCA1ODM4MjcxIH0sIC8vIFlFQVJfV09ZCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIERPV19MT0NBTAorICAgICAgICB7IC01ODM4MjY5LCAtNTgzODI2OSwgNTgyODk2MywgNTgzODI3MCB9LCAvLyBFWFRFTkRFRF9ZRUFSCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIEpVTElBTl9EQVkKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gTUlMTElTRUNPTkRTX0lOX0RBWQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUdldExpbWl0KGludCBmaWVsZCwgaW50IGxpbWl0VHlwZSkgeworICAgICAgICByZXR1cm4gTElNSVRTW2ZpZWxkXVtsaW1pdFR5cGVdOworICAgIH0KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBJbnN0YW5jZSBWYXJpYWJsZXMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLyoqCisgICAgICogVGhlIHBvaW50IGF0IHdoaWNoIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgcnVsZXMgYXJlIHVzZWQsIG1lYXN1cmVkIGluCisgICAgICogbWlsbGlzZWNvbmRzIGZyb20gdGhlIHN0YW5kYXJkIGVwb2NoLiAgRGVmYXVsdCBpcyBPY3RvYmVyIDE1LCAxNTgyCisgICAgICogKEdyZWdvcmlhbikgMDA6MDA6MDAgVVRDIG9yIC0xMjIxOTI5MjgwMDAwMEwuICBGb3IgdGhpcyB2YWx1ZSwgT2N0b2JlciA0LAorICAgICAqIDE1ODIgKEp1bGlhbikgaXMgZm9sbG93ZWQgYnkgT2N0b2JlciAxNSwgMTU4MiAoR3JlZ29yaWFuKS4gIFRoaXMKKyAgICAgKiBjb3JyZXNwb25kcyB0byBKdWxpYW4gZGF5IG51bWJlciAyMjk5MTYxLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIGxvbmcgZ3JlZ29yaWFuQ3V0b3ZlciA9IC0xMjIxOTI5MjgwMDAwMEw7CisKKyAgICAvKioKKyAgICAgKiBKdWxpYW4gZGF5IG51bWJlciBvZiB0aGUgR3JlZ29yaWFuIGN1dG92ZXIuCisgICAgICovCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50IGN1dG92ZXJKdWxpYW5EYXkgPSAyMjk5MTYxOworICAgIAorICAgIC8qKgorICAgICAqIFRoZSB5ZWFyIG9mIHRoZSBncmVnb3JpYW5DdXRvdmVyLCB3aXRoIDAgcmVwcmVzZW50aW5nCisgICAgICogMSBCQywgLTEgcmVwcmVzZW50aW5nIDIgQkMsIGV0Yy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgZ3JlZ29yaWFuQ3V0b3ZlclllYXIgPSAxNTgyOworCisgICAgLyoqCisgICAgICogVXNlZCBieSBoYW5kbGVDb21wdXRlSnVsaWFuRGF5KCkgYW5kIGhhbmRsZUNvbXB1dGVNb250aFN0YXJ0KCkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdHJhbnNpZW50IHByb3RlY3RlZCBib29sZWFuIGlzR3JlZ29yaWFuOworCisgICAgLyoqCisgICAgICogVXNlZCBieSBoYW5kbGVDb21wdXRlSnVsaWFuRGF5KCkgYW5kIGhhbmRsZUNvbXB1dGVNb250aFN0YXJ0KCkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdHJhbnNpZW50IHByb3RlY3RlZCBib29sZWFuIGludmVydEdyZWdvcmlhbjsKKworLy8vLy8vLy8vLy8vLy8vCisvLyBDb25zdHJ1Y3RvcnMKKy8vLy8vLy8vLy8vLy8vLworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIGRlZmF1bHQgR3JlZ29yaWFuQ2FsZW5kYXIgdXNpbmcgdGhlIGN1cnJlbnQgdGltZQorICAgICAqIGluIHRoZSBkZWZhdWx0IHRpbWUgem9uZSB3aXRoIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgR3JlZ29yaWFuQ2FsZW5kYXIoKSB7CisgICAgICAgIHRoaXMoVGltZVpvbmUuZ2V0RGVmYXVsdCgpLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgR3JlZ29yaWFuQ2FsZW5kYXIgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZQorICAgICAqIGluIHRoZSBnaXZlbiB0aW1lIHpvbmUgd2l0aCB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHBhcmFtIHpvbmUgdGhlIGdpdmVuIHRpbWUgem9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUgem9uZSkgeworICAgICAgICB0aGlzKHpvbmUsIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBHcmVnb3JpYW5DYWxlbmRhciBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lCisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gYUxvY2FsZSB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBHcmVnb3JpYW5DYWxlbmRhcihMb2NhbGUgYUxvY2FsZSkgeworICAgICAgICB0aGlzKFRpbWVab25lLmdldERlZmF1bHQoKSwgYUxvY2FsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIEdyZWdvcmlhbkNhbGVuZGFyIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRpbWUKKyAgICAgKiBpbiB0aGUgZ2l2ZW4gdGltZSB6b25lIHdpdGggdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gem9uZSB0aGUgZ2l2ZW4gdGltZSB6b25lLgorICAgICAqIEBwYXJhbSBhTG9jYWxlIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lIHpvbmUsIExvY2FsZSBhTG9jYWxlKSB7CisgICAgICAgIHN1cGVyKHpvbmUsIGFMb2NhbGUpOworICAgICAgICBzZXRUaW1lSW5NaWxsaXMoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBHcmVnb3JpYW5DYWxlbmRhciB3aXRoIHRoZSBnaXZlbiBkYXRlIHNldAorICAgICAqIGluIHRoZSBkZWZhdWx0IHRpbWUgem9uZSB3aXRoIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBAcGFyYW0geWVhciB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIFlFQVIgdGltZSBmaWVsZCBpbiB0aGUgY2FsZW5kYXIuCisgICAgICogQHBhcmFtIG1vbnRoIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgTU9OVEggdGltZSBmaWVsZCBpbiB0aGUgY2FsZW5kYXIuCisgICAgICogTW9udGggdmFsdWUgaXMgMC1iYXNlZC4gZS5nLiwgMCBmb3IgSmFudWFyeS4KKyAgICAgKiBAcGFyYW0gZGF0ZSB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIERBVEUgdGltZSBmaWVsZCBpbiB0aGUgY2FsZW5kYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXRlKSB7CisgICAgICAgIHN1cGVyKFRpbWVab25lLmdldERlZmF1bHQoKSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIHNldChFUkEsIEFEKTsKKyAgICAgICAgc2V0KFlFQVIsIHllYXIpOworICAgICAgICBzZXQoTU9OVEgsIG1vbnRoKTsKKyAgICAgICAgc2V0KERBVEUsIGRhdGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBHcmVnb3JpYW5DYWxlbmRhciB3aXRoIHRoZSBnaXZlbiBkYXRlCisgICAgICogYW5kIHRpbWUgc2V0IGZvciB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgd2l0aCB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHBhcmFtIHllYXIgdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBZRUFSIHRpbWUgZmllbGQgaW4gdGhlIGNhbGVuZGFyLgorICAgICAqIEBwYXJhbSBtb250aCB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIE1PTlRIIHRpbWUgZmllbGQgaW4gdGhlIGNhbGVuZGFyLgorICAgICAqIE1vbnRoIHZhbHVlIGlzIDAtYmFzZWQuIGUuZy4sIDAgZm9yIEphbnVhcnkuCisgICAgICogQHBhcmFtIGRhdGUgdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBEQVRFIHRpbWUgZmllbGQgaW4gdGhlIGNhbGVuZGFyLgorICAgICAqIEBwYXJhbSBob3VyIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgSE9VUl9PRl9EQVkgdGltZSBmaWVsZAorICAgICAqIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBAcGFyYW0gbWludXRlIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgTUlOVVRFIHRpbWUgZmllbGQKKyAgICAgKiBpbiB0aGUgY2FsZW5kYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXRlLCBpbnQgaG91ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbnV0ZSkgeworICAgICAgICBzdXBlcihUaW1lWm9uZS5nZXREZWZhdWx0KCksIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgICAgICBzZXQoRVJBLCBBRCk7CisgICAgICAgIHNldChZRUFSLCB5ZWFyKTsKKyAgICAgICAgc2V0KE1PTlRILCBtb250aCk7CisgICAgICAgIHNldChEQVRFLCBkYXRlKTsKKyAgICAgICAgc2V0KEhPVVJfT0ZfREFZLCBob3VyKTsKKyAgICAgICAgc2V0KE1JTlVURSwgbWludXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgR3JlZ29yaWFuQ2FsZW5kYXIgd2l0aCB0aGUgZ2l2ZW4gZGF0ZQorICAgICAqIGFuZCB0aW1lIHNldCBmb3IgdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBwYXJhbSB5ZWFyIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgWUVBUiB0aW1lIGZpZWxkIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBAcGFyYW0gbW9udGggdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBNT05USCB0aW1lIGZpZWxkIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBNb250aCB2YWx1ZSBpcyAwLWJhc2VkLiBlLmcuLCAwIGZvciBKYW51YXJ5LgorICAgICAqIEBwYXJhbSBkYXRlIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgREFURSB0aW1lIGZpZWxkIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBAcGFyYW0gaG91ciB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIEhPVVJfT0ZfREFZIHRpbWUgZmllbGQKKyAgICAgKiBpbiB0aGUgY2FsZW5kYXIuCisgICAgICogQHBhcmFtIG1pbnV0ZSB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIE1JTlVURSB0aW1lIGZpZWxkCisgICAgICogaW4gdGhlIGNhbGVuZGFyLgorICAgICAqIEBwYXJhbSBzZWNvbmQgdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBTRUNPTkQgdGltZSBmaWVsZAorICAgICAqIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgR3JlZ29yaWFuQ2FsZW5kYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRhdGUsIGludCBob3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWludXRlLCBpbnQgc2Vjb25kKSB7CisgICAgICAgIHN1cGVyKFRpbWVab25lLmdldERlZmF1bHQoKSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIHNldChFUkEsIEFEKTsKKyAgICAgICAgc2V0KFlFQVIsIHllYXIpOworICAgICAgICBzZXQoTU9OVEgsIG1vbnRoKTsKKyAgICAgICAgc2V0KERBVEUsIGRhdGUpOworICAgICAgICBzZXQoSE9VUl9PRl9EQVksIGhvdXIpOworICAgICAgICBzZXQoTUlOVVRFLCBtaW51dGUpOworICAgICAgICBzZXQoU0VDT05ELCBzZWNvbmQpOworICAgIH0KKworLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFB1YmxpYyBtZXRob2RzCisvLy8vLy8vLy8vLy8vLy8vLworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgR3JlZ29yaWFuQ2FsZW5kYXIgY2hhbmdlIGRhdGUuIFRoaXMgaXMgdGhlIHBvaW50IHdoZW4gdGhlIHN3aXRjaAorICAgICAqIGZyb20gSnVsaWFuIGRhdGVzIHRvIEdyZWdvcmlhbiBkYXRlcyBvY2N1cnJlZC4gRGVmYXVsdCBpcyBPY3RvYmVyIDE1LAorICAgICAqIDE1ODIuIFByZXZpb3VzIHRvIHRoaXMsIGRhdGVzIHdpbGwgYmUgaW4gdGhlIEp1bGlhbiBjYWxlbmRhci4KKyAgICAgKiA8cD4KKyAgICAgKiBUbyBvYnRhaW4gYSBwdXJlIEp1bGlhbiBjYWxlbmRhciwgc2V0IHRoZSBjaGFuZ2UgZGF0ZSB0bworICAgICAqIDxjb2RlPkRhdGUoTG9uZy5NQVhfVkFMVUUpPC9jb2RlPi4gIFRvIG9idGFpbiBhIHB1cmUgR3JlZ29yaWFuIGNhbGVuZGFyLAorICAgICAqIHNldCB0aGUgY2hhbmdlIGRhdGUgdG8gPGNvZGU+RGF0ZShMb25nLk1JTl9WQUxVRSk8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtIGRhdGUgdGhlIGdpdmVuIEdyZWdvcmlhbiBjdXRvdmVyIGRhdGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0R3JlZ29yaWFuQ2hhbmdlKERhdGUgZGF0ZSkgeworICAgICAgICBncmVnb3JpYW5DdXRvdmVyID0gZGF0ZS5nZXRUaW1lKCk7CisKKyAgICAgICAgLy8gSWYgdGhlIGN1dG92ZXIgaGFzIGFuIGV4dHJlbWUgdmFsdWUsIHRoZW4gY3JlYXRlIGEgcHVyZQorICAgICAgICAvLyBHcmVnb3JpYW4gb3IgcHVyZSBKdWxpYW4gY2FsZW5kYXIgYnkgZ2l2aW5nIHRoZSBjdXRvdmVyIHllYXIgYW5kCisgICAgICAgIC8vIEpEIGV4dHJlbWUgdmFsdWVzLgorICAgICAgICBpZiAoZ3JlZ29yaWFuQ3V0b3ZlciA8PSBNSU5fTUlMTElTKSB7CisgICAgICAgICAgICBncmVnb3JpYW5DdXRvdmVyWWVhciA9IGN1dG92ZXJKdWxpYW5EYXkgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKKyAgICAgICAgfSBlbHNlIGlmIChncmVnb3JpYW5DdXRvdmVyID49IE1BWF9NSUxMSVMpIHsKKyAgICAgICAgICAgIGdyZWdvcmlhbkN1dG92ZXJZZWFyID0gY3V0b3Zlckp1bGlhbkRheSA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUHJlY29tcHV0ZSB0d28gaW50ZXJuYWwgdmFyaWFibGVzIHdoaWNoIHdlIHVzZSB0byBkbyB0aGUgYWN0dWFsCisgICAgICAgICAgICAvLyBjdXRvdmVyIGNvbXB1dGF0aW9ucy4gIFRoZXNlIGFyZSB0aGUgSnVsaWFuIGRheSBvZiB0aGUgY3V0b3ZlcgorICAgICAgICAgICAgLy8gYW5kIHRoZSBjdXRvdmVyIHllYXIuCisgICAgICAgICAgICBjdXRvdmVySnVsaWFuRGF5ID0gKGludCkgZmxvb3JEaXZpZGUoZ3JlZ29yaWFuQ3V0b3ZlciwgT05FX0RBWSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENvbnZlcnQgY3V0b3ZlciBtaWxsaXMgdG8gZXh0ZW5kZWQgeWVhcgorICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKGdldFRpbWVab25lKCkpOworICAgICAgICAgICAgY2FsLnNldFRpbWUoZGF0ZSk7CisgICAgICAgICAgICBncmVnb3JpYW5DdXRvdmVyWWVhciA9IGNhbC5nZXQoRVhURU5ERURfWUVBUik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBHcmVnb3JpYW4gQ2FsZW5kYXIgY2hhbmdlIGRhdGUuICBUaGlzIGlzIHRoZSBwb2ludCB3aGVuIHRoZQorICAgICAqIHN3aXRjaCBmcm9tIEp1bGlhbiBkYXRlcyB0byBHcmVnb3JpYW4gZGF0ZXMgb2NjdXJyZWQuIERlZmF1bHQgaXMKKyAgICAgKiBPY3RvYmVyIDE1LCAxNTgyLiBQcmV2aW91cyB0byB0aGlzLCBkYXRlcyB3aWxsIGJlIGluIHRoZSBKdWxpYW4KKyAgICAgKiBjYWxlbmRhci4KKyAgICAgKiBAcmV0dXJuIHRoZSBHcmVnb3JpYW4gY3V0b3ZlciBkYXRlIGZvciB0aGlzIGNhbGVuZGFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBEYXRlIGdldEdyZWdvcmlhbkNoYW5nZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGdyZWdvcmlhbkN1dG92ZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHllYXIgaXMgYSBsZWFwIHllYXIuIFJldHVybnMgdHJ1ZSBpZiB0aGUKKyAgICAgKiBnaXZlbiB5ZWFyIGlzIGEgbGVhcCB5ZWFyLgorICAgICAqIEBwYXJhbSB5ZWFyIHRoZSBnaXZlbiB5ZWFyLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4geWVhciBpcyBhIGxlYXAgeWVhcjsgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzTGVhcFllYXIoaW50IHllYXIpIHsKKyAgICAgICAgcmV0dXJuIHllYXIgPj0gZ3JlZ29yaWFuQ3V0b3ZlclllYXIgPworICAgICAgICAgICAgKCh5ZWFyJTQgPT0gMCkgJiYgKCh5ZWFyJTEwMCAhPSAwKSB8fCAoeWVhciU0MDAgPT0gMCkpKSA6IC8vIEdyZWdvcmlhbgorICAgICAgICAgICAgKHllYXIlNCA9PSAwKTsgLy8gSnVsaWFuCisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBDYWxlbmRhciBvYmplY3QgaXMgZXF1aXZhbGVudCB0byB0aGlzCisgICAgICogb25lLiAgQ2FsZW5kYXIgb3ZlcnJpZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb3RoZXIgdGhlIENhbGVuZGFyIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhpcyBDYWxlbmRhciAgIAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNFcXVpdmFsZW50VG8oQ2FsZW5kYXIgb3RoZXIpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmlzRXF1aXZhbGVudFRvKG90aGVyKSAmJgorICAgICAgICAgICAgZ3JlZ29yaWFuQ3V0b3ZlciA9PSAoKEdyZWdvcmlhbkNhbGVuZGFyKW90aGVyKS5ncmVnb3JpYW5DdXRvdmVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIGhhc2hDb2RlLgorICAgICAqIEdlbmVyYXRlcyB0aGUgaGFzaCBjb2RlIGZvciB0aGUgR3JlZ29yaWFuQ2FsZW5kYXIgb2JqZWN0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmhhc2hDb2RlKCkgXiAoaW50KWdyZWdvcmlhbkN1dG92ZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIENhbGVuZGFyCisgICAgICogRGF0ZSBBcml0aG1ldGljIGZ1bmN0aW9uLgorICAgICAqIEFkZHMgdGhlIHNwZWNpZmllZCAoc2lnbmVkKSBhbW91bnQgb2YgdGltZSB0byB0aGUgZ2l2ZW4gdGltZSBmaWVsZCwKKyAgICAgKiBiYXNlZCBvbiB0aGUgY2FsZW5kYXIncyBydWxlcy4KKyAgICAgKiBAcGFyYW0gZmllbGQgdGhlIHRpbWUgZmllbGQuCisgICAgICogQHBhcmFtIGFtb3VudCB0aGUgYW1vdW50IG9mIGRhdGUgb3IgdGltZSB0byBiZSBhZGRlZCB0byB0aGUgZmllbGQuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgYW4gdW5rbm93biBmaWVsZCBpcyBnaXZlbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoaW50IGZpZWxkLCBpbnQgYW1vdW50KSB7CisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSBFUkE6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGVyYSA9IGdldChFUkEpICsgYW1vdW50OworICAgICAgICAgICAgICAgIGlmIChlcmEgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGVyYSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcmEgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGVyYSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldChFUkEsIGVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN1cGVyLmFkZChmaWVsZCwgYW1vdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUm9sbCBhIGZpZWxkIGJ5IGEgc2lnbmVkIGFtb3VudC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByb2xsKGludCBmaWVsZCwgaW50IGFtb3VudCkgeworCisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSBFUkE6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGVyYSA9IChnZXQoRVJBKSArIGFtb3VudCApICUgMjsKKyAgICAgICAgICAgICAgICBpZiAoZXJhIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBlcmEgKz0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0KEVSQSwgZXJhKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBXRUVLX09GX1lFQVI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVW5saWtlIFdFRUtfT0ZfTU9OVEgsIFdFRUtfT0ZfWUVBUiBuZXZlciBzaGlmdHMgdGhlIGRheSBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyB3ZWVrLiAgQWxzbywgcm9sbGluZyB0aGUgd2VlayBvZiB0aGUgeWVhciBjYW4gaGF2ZSBzZWVtaW5nbHkKKyAgICAgICAgICAgICAgICAvLyBzdHJhbmdlIGVmZmVjdHMgc2ltcGx5IGJlY2F1c2UgdGhlIHllYXIgb2YgdGhlIHdlZWsgb2YgeWVhcgorICAgICAgICAgICAgICAgIC8vIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgY2FsZW5kYXIgeWVhci4gIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAvLyBkYXRlIERlYyAyOCwgMTk5NyBpcyB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgMSBvZiAxOTk4IChpZgorICAgICAgICAgICAgICAgIC8vIHdlZWtzIHN0YXJ0IG9uIFN1bmRheSBhbmQgdGhlIG1pbmltYWwgZGF5cyBpbiBmaXJzdCB3ZWVrIGlzCisgICAgICAgICAgICAgICAgLy8gPD0gMykuCisgICAgICAgICAgICAgICAgaW50IHdveSA9IGdldChXRUVLX09GX1lFQVIpOworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgSVNPIHllYXIsIHdoaWNoIG1hdGNoZXMgdGhlIHdlZWsgb2YgeWVhci4gIFRoaXMKKyAgICAgICAgICAgICAgICAvLyBtYXkgYmUgb25lIHllYXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBjYWxlbmRhciB5ZWFyLgorICAgICAgICAgICAgICAgIGludCBpc29ZZWFyID0gZ2V0KFlFQVJfV09ZKTsKKyAgICAgICAgICAgICAgICBpbnQgaXNvRG95ID0gaW50ZXJuYWxHZXQoREFZX09GX1lFQVIpOworICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbEdldChNT05USCkgPT0gQ2FsZW5kYXIuSkFOVUFSWSkgeworICAgICAgICAgICAgICAgICAgICBpZiAod295ID49IDUyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpc29Eb3kgKz0gaGFuZGxlR2V0WWVhckxlbmd0aChpc29ZZWFyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3b3kgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaXNvRG95IC09IGhhbmRsZUdldFllYXJMZW5ndGgoaXNvWWVhciAtIDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdveSArPSBhbW91bnQ7CisgICAgICAgICAgICAgICAgLy8gRG8gZmFzdCBjaGVja3MgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY29tcHV0YXRpb246CisgICAgICAgICAgICAgICAgaWYgKHdveSA8IDEgfHwgd295ID4gNTIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBsYXN0IHdlZWsgb2YgdGhlIElTTyB5ZWFyLgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBkbyB0aGlzIHVzaW5nIHRoZSBzdGFuZGFyZCBmb3JtdWxhIHdlIHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBldmVyeXdoZXJlIGluIHRoaXMgZmlsZS4gIElmIHdlIGNhbiBzZWUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZGF5cyBhdCB0aGUgZW5kIG9mIHRoZSB5ZWFyIGFyZSBnb2luZyB0byBmYWxsIGludG8KKyAgICAgICAgICAgICAgICAgICAgLy8gd2VlayAxIG9mIHRoZSBuZXh0IHllYXIsIHdlIGRyb3AgdGhlIGxhc3Qgd2VlayBieQorICAgICAgICAgICAgICAgICAgICAvLyBzdWJ0cmFjdGluZyA3IGZyb20gdGhlIGxhc3QgZGF5IG9mIHRoZSB5ZWFyLgorICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdERveSA9IGhhbmRsZUdldFllYXJMZW5ndGgoaXNvWWVhcik7CisgICAgICAgICAgICAgICAgICAgIGludCBsYXN0UmVsRG93ID0gKGxhc3REb3kgLSBpc29Eb3kgKyBpbnRlcm5hbEdldChEQVlfT0ZfV0VFSykgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaXJzdERheU9mV2VlaygpKSAlIDc7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0UmVsRG93IDwgMCkgbGFzdFJlbERvdyArPSA3OworICAgICAgICAgICAgICAgICAgICBpZiAoKDYgLSBsYXN0UmVsRG93KSA+PSBnZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCkpIGxhc3REb3kgLT0gNzsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RXb3kgPSB3ZWVrTnVtYmVyKGxhc3REb3ksIGxhc3RSZWxEb3cgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgd295ID0gKCh3b3kgKyBsYXN0V295IC0gMSkgJSBsYXN0V295KSArIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldChXRUVLX09GX1lFQVIsIHdveSk7CisgICAgICAgICAgICAgICAgc2V0KFlFQVIsIGlzb1llYXIpOyAvLyBXaHkgbm90IFlFQVJfV09ZPyAtIEFsYW4gMTEvNi8wMAorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3VwZXIucm9sbChmaWVsZCwgYW1vdW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbWluaW11bSB2YWx1ZSB0aGF0IHRoaXMgZmllbGQgY291bGQgaGF2ZSwgZ2l2ZW4gdGhlIGN1cnJlbnQgZGF0ZS4KKyAgICAgKiBGb3IgdGhlIEdyZWdvcmlhbiBjYWxlbmRhciwgdGhpcyBpcyB0aGUgc2FtZSBhcyBnZXRNaW5pbXVtKCkgYW5kIGdldEdyZWF0ZXN0TWluaW11bSgpLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0QWN0dWFsTWluaW11bShpbnQgZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIGdldE1pbmltdW0oZmllbGQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IHRoaXMgZmllbGQgY291bGQgaGF2ZSwgZ2l2ZW4gdGhlIGN1cnJlbnQgZGF0ZS4KKyAgICAgKiBGb3IgZXhhbXBsZSwgd2l0aCB0aGUgZGF0ZSAiRmViIDMsIDE5OTciIGFuZCB0aGUgREFZX09GX01PTlRIIGZpZWxkLCB0aGUgYWN0dWFsCisgICAgICogbWF4aW11bSB3b3VsZCBiZSAyODsgZm9yICJGZWIgMywgMTk5NiIgaXQgcyAyOS4gIFNpbWlsYXJseSBmb3IgYSBIZWJyZXcgY2FsZW5kYXIsCisgICAgICogZm9yIHNvbWUgeWVhcnMgdGhlIGFjdHVhbCBtYXhpbXVtIGZvciBNT05USCBpcyAxMiwgYW5kIGZvciBvdGhlcnMgMTMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRBY3R1YWxNYXhpbXVtKGludCBmaWVsZCkgeworICAgICAgICAvKiBJdCBpcyBhIGtub3duIGxpbWl0YXRpb24gdGhhdCB0aGUgY29kZSBoZXJlIChhbmQgaW4gZ2V0QWN0dWFsTWluaW11bSkKKyAgICAgICAgICogd29uJ3QgYmVoYXZlIHByb3Blcmx5IGF0IHRoZSBleHRyZW1lIGxpbWl0cyBvZiBHcmVnb3JpYW5DYWxlbmRhcidzCisgICAgICAgICAqIHJlcHJlc2VudGFibGUgcmFuZ2UgKGV4Y2VwdCBmb3IgdGhlIGNvZGUgdGhhdCBoYW5kbGVzIHRoZSBZRUFSCisgICAgICAgICAqIGZpZWxkKS4gIFRoYXQncyBiZWNhdXNlIHRoZSBlbmRzIG9mIHRoZSByZXByZXNlbnRhYmxlIHJhbmdlIGFyZSBhdAorICAgICAgICAgKiBvZGQgc3BvdHMgaW4gdGhlIHllYXIuICBGb3IgY2FsZW5kYXJzIHdpdGggdGhlIGRlZmF1bHQgR3JlZ29yaWFuCisgICAgICAgICAqIGN1dG92ZXIsIHRoZXNlIGxpbWl0cyBhcmUgU3VuIERlYyAwMiAxNjo0NzowNCBHTVQgMjkyMjY5MDU1IEJDIHRvIFN1bgorICAgICAgICAgKiBBdWcgMTcgMDc6MTI6NTUgR01UIDI5MjI3ODk5NCBBRCwgc29tZXdoYXQgZGlmZmVyZW50IGZvciBub24tR01UCisgICAgICAgICAqIHpvbmVzLiAgQXMgYSByZXN1bHQsIGlmIHRoZSBjYWxlbmRhciBpcyBzZXQgdG8gQXVnIDEgMjkyMjc4OTk0IEFELAorICAgICAgICAgKiB0aGUgYWN0dWFsIG1heGltdW0gb2YgREFZX09GX01PTlRIIGlzIDE3LCBub3QgMzAuICBJZiB0aGUgZGF0ZSBpcyBNYXIKKyAgICAgICAgICogMzEgaW4gdGhhdCB5ZWFyLCB0aGUgYWN0dWFsIG1heGltdW0gbW9udGggbWlnaHQgYmUgSnVsLCB3aGVyZWFzIGlzCisgICAgICAgICAqIHRoZSBkYXRlIGlzIE1hciAxNSwgdGhlIGFjdHVhbCBtYXhpbXVtIG1pZ2h0IGJlIEF1ZyAtLSBkZXBlbmRpbmcgb24KKyAgICAgICAgICogdGhlIHByZWNpc2Ugc2VtYW50aWNzIHRoYXQgYXJlIGRlc2lyZWQuICBTaW1pbGFyIGNvbnNpZGVyYXRpb25zCisgICAgICAgICAqIGFmZmVjdCBhbGwgZmllbGRzLiAgTm9uZXRoZWxlc3MsIHRoaXMgZWZmZWN0IGlzIHN1ZmZpY2llbnRseSBhcmNhbmUKKyAgICAgICAgICogdGhhdCB3ZSBwZXJtaXQgaXQsIHJhdGhlciB0aGFuIGNvbXBsaWNhdGluZyB0aGUgY29kZSB0byBoYW5kbGUgc3VjaAorICAgICAgICAgKiBpbnRyaWNhY2llcy4gLSBsaXUgOC8yMC85OAorCisgICAgICAgICAqIFVQREFURTogTm8gbG9uZ2VyIHRydWUsIHNpbmNlIHdlIGhhdmUgcHVsbGVkIGluIHRoZSBsaW1pdCB2YWx1ZXMgb24KKyAgICAgICAgICogdGhlIHllYXIuIC0gTGl1IDExLzYvMDAgKi8KKworICAgICAgICBzd2l0Y2ggKGZpZWxkKSB7CisKKyAgICAgICAgY2FzZSBZRUFSOgorICAgICAgICAgICAgLyogVGhlIHllYXIgY29tcHV0YXRpb24gaXMgbm8gZGlmZmVyZW50LCBpbiBwcmluY2lwbGUsIGZyb20gdGhlCisgICAgICAgICAgICAgKiBvdGhlcnMsIGhvd2V2ZXIsIHRoZSByYW5nZSBvZiBwb3NzaWJsZSBtYXhpbWEgaXMgbGFyZ2UuICBJbgorICAgICAgICAgICAgICogYWRkaXRpb24sIHRoZSB3YXkgd2Uga25vdyB3ZSd2ZSBleGNlZWRlZCB0aGUgcmFuZ2UgaXMgZGlmZmVyZW50LgorICAgICAgICAgICAgICogRm9yIHRoZXNlIHJlYXNvbnMsIHdlIHVzZSB0aGUgc3BlY2lhbCBjYXNlIGNvZGUgYmVsb3cgdG8gaGFuZGxlCisgICAgICAgICAgICAgKiB0aGlzIGZpZWxkLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRoZSBhY3R1YWwgbWF4aW1hIGZvciBZRUFSIGRlcGVuZCBvbiB0aGUgdHlwZSBvZiBjYWxlbmRhcjoKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiAgICAgR3JlZ29yaWFuID0gTWF5IDE3LCAyOTIyNzUwNTYgQkMgLSBBdWcgMTcsIDI5MjI3ODk5NCBBRAorICAgICAgICAgICAgICogICAgIEp1bGlhbiAgICA9IERlYyAgMiwgMjkyMjY5MDU1IEJDIC0gSmFuICAzLCAyOTIyNzI5OTMgQUQKKyAgICAgICAgICAgICAqICAgICBIeWJyaWQgICAgPSBEZWMgIDIsIDI5MjI2OTA1NSBCQyAtIEF1ZyAxNywgMjkyMjc4OTk0IEFECisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogV2Uga25vdyB3ZSd2ZSBleGNlZWRlZCB0aGUgbWF4aW11bSB3aGVuIGVpdGhlciB0aGUgbW9udGgsIGRhdGUsCisgICAgICAgICAgICAgKiB0aW1lLCBvciBlcmEgY2hhbmdlcyBpbiByZXNwb25zZSB0byBzZXR0aW5nIHRoZSB5ZWFyLiAgV2UgZG9uJ3QKKyAgICAgICAgICAgICAqIGNoZWNrIGZvciBtb250aCwgZGF0ZSwgYW5kIHRpbWUgaGVyZSBiZWNhdXNlIHRoZSB5ZWFyIGFuZCBlcmEgYXJlCisgICAgICAgICAgICAgKiBzdWZmaWNpZW50IHRvIGRldGVjdCBhbiBpbnZhbGlkIHllYXIgc2V0dGluZy4gIE5PVEU6IElmIGNvZGUgaXMKKyAgICAgICAgICAgICAqIGFkZGVkIHRvIGNoZWNrIHRoZSBtb250aCBhbmQgZGF0ZSBpbiB0aGUgZnV0dXJlIGZvciBzb21lIHJlYXNvbiwKKyAgICAgICAgICAgICAqIEZlYiAyOSBtdXN0IGJlIGFsbG93ZWQgdG8gc2hpZnQgdG8gTWFyIDEgd2hlbiBzZXR0aW5nIHRoZSB5ZWFyLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FsZW5kYXIgY2FsID0gKENhbGVuZGFyKSBjbG9uZSgpOworICAgICAgICAgICAgICAgIGNhbC5zZXRMZW5pZW50KHRydWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBlcmEgPSBjYWwuZ2V0KEVSQSk7CisgICAgICAgICAgICAgICAgRGF0ZSBkID0gY2FsLmdldFRpbWUoKTsKKworICAgICAgICAgICAgICAgIC8qIFBlcmZvcm0gYSBiaW5hcnkgc2VhcmNoLCB3aXRoIHRoZSBpbnZhcmlhbnQgdGhhdCBsb3dHb29kIGlzIGEKKyAgICAgICAgICAgICAgICAgKiB2YWxpZCB5ZWFyLCBhbmQgaGlnaEJhZCBpcyBhbiBvdXQgb2YgcmFuZ2UgeWVhci4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpbnQgbG93R29vZCA9IExJTUlUU1tZRUFSXVsxXTsKKyAgICAgICAgICAgICAgICBpbnQgaGlnaEJhZCA9IExJTUlUU1tZRUFSXVsyXSsxOworICAgICAgICAgICAgICAgIHdoaWxlICgobG93R29vZCArIDEpIDwgaGlnaEJhZCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgeSA9IChsb3dHb29kICsgaGlnaEJhZCkgLyAyOworICAgICAgICAgICAgICAgICAgICBjYWwuc2V0KFlFQVIsIHkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsLmdldChZRUFSKSA9PSB5ICYmIGNhbC5nZXQoRVJBKSA9PSBlcmEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvd0dvb2QgPSB5OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaGlnaEJhZCA9IHk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWwuc2V0VGltZShkKTsgLy8gUmVzdG9yZSBvcmlnaW5hbCBmaWVsZHMKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93R29vZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldEFjdHVhbE1heGltdW0oZmllbGQpOworICAgICAgICB9CisgICAgfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQcm9wb3NlZCBwdWJsaWMgQVBJCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB0aW1lIGZvciB0aGlzIENhbGVuZGFyIGlzIGluIERheWxpZ250CisgICAgICogU2F2aW5ncyBUaW1lLgorICAgICAqCisgICAgICogTm90ZSAtLSBNQUtFIFRISVMgUFVCTElDIEFUIFRIRSBORVhUIEFQSSBDSEFOR0UuICBQT1NTSUJMWSBERVBSRUNBVEUKKyAgICAgKiBBTkQgUkVNT1ZFIFRpbWVab25lLmluRGF5bGlnaHRUaW1lKCkuCisgICAgICovCisgICAgYm9vbGVhbiBpbkRheWxpZ2h0VGltZSgpIHsKKyAgICAgICAgaWYgKCFnZXRUaW1lWm9uZSgpLnVzZURheWxpZ2h0VGltZSgpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbXBsZXRlKCk7IC8vIEZvcmNlIHVwZGF0ZSBvZiBEU1RfT0ZGU0VUIGZpZWxkCisgICAgICAgIHJldHVybiBpbnRlcm5hbEdldChEU1RfT0ZGU0VUKSAhPSAwOworICAgIH0KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENhbGVuZGFyIGZyYW1ld29yaworLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvKioKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUdldE1vbnRoTGVuZ3RoKGludCBleHRlbmRlZFllYXIsIGludCBtb250aCkgeworICAgICAgICByZXR1cm4gTU9OVEhfQ09VTlRbbW9udGhdW2lzTGVhcFllYXIoZXh0ZW5kZWRZZWFyKT8xOjBdOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0WWVhckxlbmd0aChpbnQgZXllYXIpIHsKKyAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIoZXllYXIpID8gMzY2IDogMzY1OworICAgIH0KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWUgPT4gRmllbGRzIGNvbXB1dGF0aW9uCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgQ2FsZW5kYXIgdG8gY29tcHV0ZSBzZXZlcmFsIGZpZWxkcyBzcGVjaWZpYyB0byB0aGUgaHlicmlkCisgICAgICogR3JlZ29yaWFuLUp1bGlhbiBjYWxlbmRhciBzeXN0ZW0uICBUaGVzZSBhcmU6CisgICAgICoKKyAgICAgKiA8dWw+PGxpPkVSQQorICAgICAqIDxsaT5ZRUFSCisgICAgICogPGxpPk1PTlRICisgICAgICogPGxpPkRBWV9PRl9NT05USAorICAgICAqIDxsaT5EQVlfT0ZfWUVBUgorICAgICAqIDxsaT5FWFRFTkRFRF9ZRUFSPC91bD4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDb21wdXRlRmllbGRzKGludCBqdWxpYW5EYXkpIHsKKyAgICAgICAgaW50IGV5ZWFyLCBtb250aCwgZGF5T2ZNb250aCwgZGF5T2ZZZWFyOworCisgICAgICAgIGlmIChqdWxpYW5EYXkgPj0gY3V0b3Zlckp1bGlhbkRheSkgeworICAgICAgICAgICAgbW9udGggPSBnZXRHcmVnb3JpYW5Nb250aCgpOworICAgICAgICAgICAgZGF5T2ZNb250aCA9IGdldEdyZWdvcmlhbkRheU9mTW9udGgoKTsKKyAgICAgICAgICAgIGRheU9mWWVhciA9IGdldEdyZWdvcmlhbkRheU9mWWVhcigpOworICAgICAgICAgICAgZXllYXIgPSBnZXRHcmVnb3JpYW5ZZWFyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgSnVsaWFuIGVwb2NoIGRheSAobm90IHRoZSBzYW1lIGFzIEp1bGlhbiBEYXkpCisgICAgICAgICAgICAvLyBpcyB6ZXJvIG9uIFNhdHVyZGF5IERlY2VtYmVyIDMwLCAwIChHcmVnb3JpYW4pLgorICAgICAgICAgICAgbG9uZyBqdWxpYW5FcG9jaERheSA9IGp1bGlhbkRheSAtIChKQU5fMV8xX0pVTElBTl9EQVkgLSAyKTsKKyAgICAgICAgICAgIGV5ZWFyID0gKGludCkgZmxvb3JEaXZpZGUoNCpqdWxpYW5FcG9jaERheSArIDE0NjQsIDE0NjEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBKdWxpYW4gY2FsZW5kYXIgZGF5IG51bWJlciBmb3IgSmFudWFyeSAxLCBleWVhcgorICAgICAgICAgICAgbG9uZyBqYW51YXJ5MSA9IDM2NSooZXllYXItMSkgKyBmbG9vckRpdmlkZShleWVhci0xLCA0KTsKKyAgICAgICAgICAgIGRheU9mWWVhciA9IChpbnQpKGp1bGlhbkVwb2NoRGF5IC0gamFudWFyeTEpOyAvLyAwLWJhc2VkCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEp1bGlhbiBsZWFwIHllYXJzIG9jY3VycmVkIGhpc3RvcmljYWxseSBldmVyeSA0IHllYXJzIHN0YXJ0aW5nCisgICAgICAgICAgICAvLyB3aXRoIDggQUQuICBCZWZvcmUgOCBBRCB0aGUgc3BhY2luZyBpcyBpcnJlZ3VsYXI7IGV2ZXJ5IDMgeWVhcnMKKyAgICAgICAgICAgIC8vIGZyb20gNDUgQkMgdG8gOSBCQywgYW5kIHRoZW4gbm9uZSB1bnRpbCA4IEFELiAgSG93ZXZlciwgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIGltcGxlbWVudCB0aGlzIGhpc3RvcmljYWwgZGV0YWlsOyBpbnN0ZWFkLCB3ZSBpbXBsZW1lbnQgdGhlCisgICAgICAgICAgICAvLyBjb21wdXRhdGluYWxseSBjbGVhbmVyIHByb2xlcHRpYyBjYWxlbmRhciwgd2hpY2ggYXNzdW1lcworICAgICAgICAgICAgLy8gY29uc2lzdGVudCA0LXllYXIgY3ljbGVzIHRocm91Z2hvdXQgdGltZS4KKyAgICAgICAgICAgIGJvb2xlYW4gaXNMZWFwID0gKChleWVhciYweDMpID09IDApOyAvLyBlcXVpdi4gdG8gKGV5ZWFyJTQgPT0gMCkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ29tbW9uIEp1bGlhbi9HcmVnb3JpYW4gY2FsY3VsYXRpb24KKyAgICAgICAgICAgIGludCBjb3JyZWN0aW9uID0gMDsKKyAgICAgICAgICAgIGludCBtYXJjaDEgPSBpc0xlYXAgPyA2MCA6IDU5OyAvLyB6ZXJvLWJhc2VkIERPWSBmb3IgTWFyY2ggMQorICAgICAgICAgICAgaWYgKGRheU9mWWVhciA+PSBtYXJjaDEpIHsKKyAgICAgICAgICAgICAgICBjb3JyZWN0aW9uID0gaXNMZWFwID8gMSA6IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb250aCA9ICgxMiAqIChkYXlPZlllYXIgKyBjb3JyZWN0aW9uKSArIDYpIC8gMzY3OyAvLyB6ZXJvLWJhc2VkIG1vbnRoCisgICAgICAgICAgICBkYXlPZk1vbnRoID0gZGF5T2ZZZWFyIC0gTU9OVEhfQ09VTlRbbW9udGhdW2lzTGVhcD8zOjJdICsgMTsgLy8gb25lLWJhc2VkIERPTQorICAgICAgICAgICAgKytkYXlPZlllYXI7CisgICAgICAgIH0KKyAgICAgICAgaW50ZXJuYWxTZXQoTU9OVEgsIG1vbnRoKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoREFZX09GX01PTlRILCBkYXlPZk1vbnRoKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoREFZX09GX1lFQVIsIGRheU9mWWVhcik7CisgICAgICAgIGludGVybmFsU2V0KEVYVEVOREVEX1lFQVIsIGV5ZWFyKTsKKyAgICAgICAgaW50IGVyYSA9IEFEOworICAgICAgICBpZiAoZXllYXIgPCAxKSB7CisgICAgICAgICAgICBlcmEgPSBCQzsKKyAgICAgICAgICAgIGV5ZWFyID0gMSAtIGV5ZWFyOworICAgICAgICB9CisgICAgICAgIGludGVybmFsU2V0KEVSQSwgZXJhKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoWUVBUiwgZXllYXIpOworICAgIH0KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEZpZWxkcyA9PiBUaW1lIGNvbXB1dGF0aW9uCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVHZXRFeHRlbmRlZFllYXIoKSB7CisgICAgICAgIGludCB5ZWFyOworICAgICAgICBpZiAobmV3ZXJGaWVsZChFWFRFTkRFRF9ZRUFSLCBZRUFSKSA9PSBFWFRFTkRFRF9ZRUFSKSB7CisgICAgICAgICAgICB5ZWFyID0gaW50ZXJuYWxHZXQoRVhURU5ERURfWUVBUiwgRVBPQ0hfWUVBUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgeWVhciBkZWZhdWx0cyB0byB0aGUgZXBvY2ggc3RhcnQsIHRoZSBlcmEgdG8gQUQKKyAgICAgICAgICAgIGludCBlcmEgPSBpbnRlcm5hbEdldChFUkEsIEFEKTsKKyAgICAgICAgICAgIGlmIChlcmEgPT0gQkMpIHsKKyAgICAgICAgICAgICAgICB5ZWFyID0gMSAtIGludGVybmFsR2V0KFlFQVIsIDEpOyAvLyBDb252ZXJ0IHRvIGV4dGVuZGVkIHllYXIKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeWVhciA9IGludGVybmFsR2V0KFlFQVIsIEVQT0NIX1lFQVIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB5ZWFyOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIENhbGVuZGFyIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuICBUaGlzIG1ldGhvZCB0cmllcyB0byB1c2UKKyAgICAgKiB0aGUgRVhURU5ERURfWUVBUiwgTU9OVEgsIERBVEUsIGZpZWxkcyBpZiB0aGV5IGFyZSBzZXQsIGluc3RlYWQgb2YKKyAgICAgKiBjb21wdXRpbmcgdGhlbS4gIElmIHRoZXkgYXJlIG5vdCBzZXQsIHRoaXMgbWV0aG9kIGRlZmVycyB0byB0aGUKKyAgICAgKiBkZWZhdWx0IGltcGxlbWVuYXRpb24uCisgICAgICogQHBhcmFtIG1pbGxpcyBtaWxsaXNlY29uZHMgb2YgdGhlIGRhdGUgZmllbGRzCisgICAgICogQHBhcmFtIG1pbGxpc0luRGF5IG1pbGxpc2Vjb25kcyBvZiB0aGUgdGltZSBmaWVsZHM7IG1heSBiZSBvdXQKKyAgICAgKiBvciByYW5nZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGNvbXB1dGVab25lT2Zmc2V0KGxvbmcgbWlsbGlzLCBpbnQgbWlsbGlzSW5EYXkpIHsKKworICAgICAgICAvLyBOb3JtYWxpemUgdGhlIG1pbGxpc0luRGF5IHRvIDAuLk9ORV9EQVktMS4gIElmIHRoZSBtaWxsaXMgaXMgb3V0CisgICAgICAgIC8vIG9mIHJhbmdlLCB0aGVuIHdlIGRlZmVyIHRvIHRoZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uIHdoaWNoCisgICAgICAgIC8vIHdpbGwgcmVjb21wdXRlIHRoZSBjb3JyZWN0IHZhbHVlcy4KKyAgICAgICAgaW50W10gbm9ybWFsaXplZE1pbGxpc0luRGF5ID0gbmV3IGludFsxXTsKKyAgICAgICAgaW50IGRheXMgPSBmbG9vckRpdmlkZShtaWxsaXMgKyBtaWxsaXNJbkRheSwgKGludCkgT05FX0RBWSwgbm9ybWFsaXplZE1pbGxpc0luRGF5KTsKKworICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgdGhlIG1vbnRoLCB0aGUgZGF5LCBhbmQgdGhlIGRheSBvZiB0aGUgd2Vlay4gIElmCisgICAgICAgIC8vIHRoZSBmaWVsZHMgYXJlIG5vdCBzZXQgb3IgaWYgd2UncmUgbGVuaWVudCAoc28gZmllbGRzIG1heSBiZSBvdXQKKyAgICAgICAgLy8gb2YgcmFuZ2UpIHRoZW4gd2UgZGVmZXIgdG8gdGhlIGJhc2UgY2xhc3Mgd2hpY2ggd2lsbCBub3JtYWxpemUKKyAgICAgICAgLy8gdGhlIHllYXIsIG1vbnRoLCBhbmQgZGF5IG9mIG1vbnRoLgorICAgICAgICBpZiAoaXNMZW5pZW50KCkgfHwgIWlzU2V0KE1PTlRIKSB8fCAhaXNTZXQoREFZX09GX01PTlRIKQorICAgICAgICAgICAgfHwgbWlsbGlzSW5EYXkgIT0gbm9ybWFsaXplZE1pbGxpc0luRGF5WzBdKSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVpvbmVPZmZzZXQobWlsbGlzLCBtaWxsaXNJbkRheSk7CisgICAgICAgIH0KKworICAgICAgICBpbnQganVsaWFuRGF5ID0gbWlsbGlzVG9KdWxpYW5EYXkoZGF5cyAqIE9ORV9EQVkpOworCisgICAgICAgIC8vIEl0J3MgdGVtcHRpbmcgdG8gdHJ5IHRvIHVzZSBEQVlfT0ZfV0VFSyBoZXJlLCBpZiBpdAorICAgICAgICAvLyBpcyBzZXQsIGJ1dCB3ZSBDQU4nVC4gIEV2ZW4gaWYgaXQncyBzZXQsIGl0IG1pZ2h0IGhhdmUKKyAgICAgICAgLy8gYmVlbiBzZXQgd3JvbmcgYnkgdGhlIHVzZXIuICBXZSBzaG91bGQgcmVseSBvbmx5IG9uCisgICAgICAgIC8vIHRoZSBKdWxpYW4gZGF5IG51bWJlciwgd2hpY2ggaGFzIGJlZW4gY29tcHV0ZWQgY29ycmVjdGx5CisgICAgICAgIC8vIHVzaW5nIHRoZSBkaXNhbWJpZ3VhdGlvbiBhbGdvcml0aG0gYWJvdmUuIFtMSVVdCisgICAgICAgIGludCB5ZWFyID0gaW50ZXJuYWxHZXQoRVhURU5ERURfWUVBUik7CisgICAgICAgIGludCBtb250aCA9IGludGVybmFsR2V0KE1PTlRIKTsKKyAgICAgICAgaW50IHByZXZpb3VzTW9udGhMZW5ndGggPSAobW9udGggPT0gMCkgPworICAgICAgICAgICAgMzEgOiBoYW5kbGVHZXRNb250aExlbmd0aCh5ZWFyLCBtb250aC0xKTsKKworICAgICAgICByZXR1cm4gZ2V0VGltZVpvbmUoKS5nZXRPZmZzZXQoeWVhciwgbW9udGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEdldChEQVRFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bGlhbkRheVRvRGF5T2ZXZWVrKGp1bGlhbkRheSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTWlsbGlzSW5EYXlbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRNb250aExlbmd0aCh5ZWFyLCBtb250aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c01vbnRoTGVuZ3RoKTsKKworICAgICAgICAvLyBOb3RlOiBCZWNhdXNlIHdlIHBhc3MgaW4gd2FsbCBtaWxsaXNJbkRheSwgcmF0aGVyIHRoYW4KKyAgICAgICAgLy8gc3RhbmRhcmQgbWlsbGlzSW5EYXksIHdlIGludGVycHJldCAiMTowMCBhbSIgb24gdGhlIGRheQorICAgICAgICAvLyBvZiBjZXNzYXRpb24gb2YgRFNUIGFzICIxOjAwIGFtIFN0ZCIgKGFzc3VtaW5nIHRoZSB0aW1lCisgICAgICAgIC8vIG9mIGNlc3NhdGlvbiBpcyAyOjAwIGFtKS4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUNvbXB1dGVKdWxpYW5EYXkoaW50IGJlc3RGaWVsZCkgeworCisgICAgICAgIGludmVydEdyZWdvcmlhbiA9IGZhbHNlOworCisgICAgICAgIGludCBqZCA9IHN1cGVyLmhhbmRsZUNvbXB1dGVKdWxpYW5EYXkoYmVzdEZpZWxkKTsKKworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNoZWNrIGhhbmRsZXMgcG9ydGlvbnMgb2YgdGhlIGN1dG92ZXIgeWVhciBCRUZPUkUgdGhlCisgICAgICAgIC8vIGN1dG92ZXIgaXRzZWxmIGhhcHBlbnMuCisgICAgICAgIGlmIChpc0dyZWdvcmlhbiAhPSAoamQgPj0gY3V0b3Zlckp1bGlhbkRheSkpIHsKKyAgICAgICAgICAgIGludmVydEdyZWdvcmlhbiA9IHRydWU7CisgICAgICAgICAgICBqZCA9IHN1cGVyLmhhbmRsZUNvbXB1dGVKdWxpYW5EYXkoYmVzdEZpZWxkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGpkOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBKRCBvZiBzdGFydCBvZiBnaXZlbiBtb250aC95ZWFyCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVDb21wdXRlTW9udGhTdGFydChpbnQgZXllYXIsIGludCBtb250aCwgYm9vbGVhbiB1c2VNb250aCkgeworCisgICAgICAgIC8vIElmIHRoZSBtb250aCBpcyBvdXQgb2YgcmFuZ2UsIGFkanVzdCBpdCBpbnRvIHJhbmdlLCBhbmQKKyAgICAgICAgLy8gbW9kaWZ5IHRoZSBleHRlbmRlZCB5ZWFyIHZhbHVlIGFjY29yZGluZ2x5LgorICAgICAgICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHsKKyAgICAgICAgICAgIGludFtdIHJlbSA9IG5ldyBpbnRbMV07CisgICAgICAgICAgICBleWVhciArPSBmbG9vckRpdmlkZShtb250aCwgMTIsIHJlbSk7CisgICAgICAgICAgICBtb250aCA9IHJlbVswXTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gaXNMZWFwID0gZXllYXIlNCA9PSAwOworICAgICAgICBpbnQgeSA9IGV5ZWFyIC0gMTsKKyAgICAgICAgaW50IGp1bGlhbkRheSA9IDM2NSp5ICsgZmxvb3JEaXZpZGUoeSwgNCkgKyAoSkFOXzFfMV9KVUxJQU5fREFZIC0gMyk7CisKKyAgICAgICAgaXNHcmVnb3JpYW4gPSAoZXllYXIgPj0gZ3JlZ29yaWFuQ3V0b3ZlclllYXIpOworICAgICAgICBpZiAoaW52ZXJ0R3JlZ29yaWFuKSB7CisgICAgICAgICAgICBpc0dyZWdvcmlhbiA9ICFpc0dyZWdvcmlhbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNHcmVnb3JpYW4pIHsKKyAgICAgICAgICAgIGlzTGVhcCA9IGlzTGVhcCAmJiAoKGV5ZWFyJTEwMCAhPSAwKSB8fCAoZXllYXIlNDAwID09IDApKTsKKyAgICAgICAgICAgIC8vIEFkZCAyIGJlY2F1c2UgR3JlZ29yaWFuIGNhbGVuZGFyIHN0YXJ0cyAyIGRheXMgYWZ0ZXIKKyAgICAgICAgICAgIC8vIEp1bGlhbiBjYWxlbmRhcgorICAgICAgICAgICAganVsaWFuRGF5ICs9IGZsb29yRGl2aWRlKHksIDQwMCkgLSBmbG9vckRpdmlkZSh5LCAxMDApICsgMjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQganVsaWFuRGF5IGluZGljYXRlcyB0aGUgZGF5IEJFRk9SRSB0aGUgZmlyc3QKKyAgICAgICAgLy8gZGF5IG9mIEphbnVhcnkgMSwgPGV5ZWFyPiBvZiBlaXRoZXIgdGhlIEp1bGlhbiBvciBHcmVnb3JpYW4KKyAgICAgICAgLy8gY2FsZW5kYXIuCisKKyAgICAgICAgaWYgKG1vbnRoICE9IDApIHsKKyAgICAgICAgICAgIGp1bGlhbkRheSArPSBNT05USF9DT1VOVFttb250aF1baXNMZWFwPzM6Ml07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ganVsaWFuRGF5OworICAgIH0KKworICAgIC8qCisgICAgcHJpdmF0ZSBzdGF0aWMgQ2FsZW5kYXJGYWN0b3J5IGZhY3Rvcnk7CisgICAgcHVibGljIHN0YXRpYyBDYWxlbmRhckZhY3RvcnkgZmFjdG9yeSgpIHsKKyAgICAgICAgaWYgKGZhY3RvcnkgPT0gbnVsbCkgeworICAgICAgICAgICAgZmFjdG9yeSA9IG5ldyBDYWxlbmRhckZhY3RvcnkoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIENhbGVuZGFyIGNyZWF0ZShUaW1lWm9uZSB0eiwgTG9jYWxlIGxvYykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKHR6LCBsb2MpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZmFjdG9yeU5hbWUoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiR3JlZ29yaWFuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWN0b3J5OworICAgIH0KKyAgICAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvSGVicmV3Q2FsZW5kYXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0hlYnJld0NhbGVuZGFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDhiMGJmMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0hlYnJld0NhbGVuZGFyLmphdmEKQEAgLTAsMCArMSw4NDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL0hlYnJld0NhbGVuZGFyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjU6MjUgJCAKKyAqICRSZXZpc2lvbjogMS4xMyAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogPGNvZGU+SGVicmV3Q2FsZW5kYXI8L2NvZGU+IGlzIGEgc3ViY2xhc3Mgb2YgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+CisgKiB0aGF0IHRoYXQgaW1wbGVtZW50cyB0aGUgdHJhZGl0aW9uYWwgSGVicmV3IGNhbGVuZGFyLgorICogVGhpcyBpcyB0aGUgY2l2aWwgY2FsZW5kYXIgaW4gSXNyYWVsIGFuZCB0aGUgbGl0dXJnaWNhbCBjYWxlbmRhcgorICogb2YgdGhlIEpld2lzaCBmYWl0aCB3b3JsZHdpZGUuCisgKiA8cD4KKyAqIFRoZSBIZWJyZXcgY2FsZW5kYXIgaXMgbHVuaXNvbGFyIGFuZCB0aHVzIGhhcyBhIG51bWJlciBvZiBpbnRlcmVzdGluZworICogcHJvcGVydGllcyB0aGF0IGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlIEdyZWdvcmlhbi4gIE1vbnRocyBzdGFydAorICogb24gdGhlIGRheSBvZiAoYW4gYXJpdGhtZXRpYyBhcHByb3hpbWF0aW9uIG9mKSBlYWNoIG5ldyBtb29uLiAgU2luY2UgdGhlCisgKiBzb2xhciB5ZWFyIChhcHByb3hpbWF0ZWx5IDM2NS4yNCBkYXlzKSBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZgorICogdGhlIGx1bmFyIG1vbnRoIChhcHByb3hpbWF0ZWx5IDI5LjUzIGRheXMpIGFuIGV4dHJhICJsZWFwIG1vbnRoIiBpcworICogaW5zZXJ0ZWQgaW4gNyBvdXQgb2YgZXZlcnkgMTkgeWVhcnMuICBUbyBtYWtlIG1hdHRlcnMgZXZlbiBtb3JlCisgKiBpbnRlcmVzdGluZywgdGhlIHN0YXJ0IG9mIGEgeWVhciBjYW4gYmUgZGVsYXllZCBieSB1cCB0byB0aHJlZSBkYXlzCisgKiBpbiBvcmRlciB0byBwcmV2ZW50IGNlcnRhaW4gaG9saWRheXMgZnJvbSBmYWxsaW5nIG9uIHRoZSBTYWJiYXRoIGFuZAorICogdG8gcHJldmVudCBjZXJ0YWluIGlsbGVnYWwgeWVhciBsZW5ndGhzLiAgRmluYWxseSwgdGhlIGxlbmd0aHMgb2YgY2VydGFpbgorICogbW9udGhzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIHllYXIuCisgKiA8cD4KKyAqIFRoZSBsZWFwIG1vbnRoIGlzIGtub3duIGFzICJBZGFyIDEiIGFuZCBpcyBpbnNlcnRlZCBiZXR3ZWVuIHRoZQorICogbW9udGhzIG9mIFNoZXZhdCBhbmQgQWRhciBpbiBsZWFwIHllYXJzLiAgU2luY2UgdGhlIGxlYXAgbW9udGggZG9lcworICogbm90IGNvbWUgYXQgdGhlIGVuZCBvZiB0aGUgeWVhciwgY2FsY3VsYXRpb25zIGludm9sdmluZworICogbW9udGggbnVtYmVycyBhcmUgcGFydGljdWxhcmx5IGNvbXBsZXguICBVc2VycyBvZiB0aGlzIGNsYXNzIHNob3VsZAorICogbWFrZSBzdXJlIHRvIHVzZSB0aGUge0BsaW5rICNyb2xsIHJvbGx9IGFuZCB7QGxpbmsgI2FkZCBhZGR9IG1ldGhvZHMKKyAqIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gcGVyZm9ybSBkYXRlIGFyaXRobWV0aWMgYnkgbWFuaXB1bGF0aW5nCisgKiB0aGUgZmllbGRzIGRpcmVjdGx5LgorICogPHA+CisgKiA8Yj5Ob3RlOjwvYj4gSW4gdGhlIHRyYWRpdGlvbmFsIEhlYnJldyBjYWxlbmRhciwgZGF5cyBzdGFydCBhdCBzdW5zZXQuCisgKiBIb3dldmVyLCBpbiBvcmRlciB0byBrZWVwIHRoZSB0aW1lIGZpZWxkcyBpbiB0aGlzIGNsYXNzCisgKiBzeW5jaHJvbml6ZWQgd2l0aCB0aG9zZSBvZiB0aGUgb3RoZXIgY2FsZW5kYXJzIGFuZCB3aXRoIGxvY2FsIGNsb2NrIHRpbWUsCisgKiB3ZSB0cmVhdCBkYXlzIGFuZCBtb250aHMgYXMgYmVnaW5uaW5nIGF0IG1pZG5pZ2h0LAorICogcm91Z2hseSA2IGhvdXJzIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIHN1bnNldC4KKyAqIDxwPgorICogSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHJ1bGVzIGJlaGluZCB0aGUgSGVicmV3CisgKiBjYWxlbmRhciwgc2VlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZXM6CisgKiA8dWw+CisgKiA8bGk+IjxhIGhyZWY9Imh0dHA6Ly93d3cuYW1hem9uLmNvbS9leGVjL29iaWRvcy9BU0lOLzA1MjE1NjQ3NDMiPkNhbGVuZHJpY2FsIENhbGN1bGF0aW9uczwvYT4iLAorICogICAgICBieSBOYWNodW0gRGVyc2hvd2l0eiAmIEVkd2FyZCBSZWluZ29sZCwgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MsIDE5OTcsIHBhZ2VzIDg1LTkxLgorICoKKyAqIDxsaT5IZWJyZXcgQ2FsZW5kYXIgU2NpZW5jZSBhbmQgTXl0aHMsCisgKiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ2VvY2l0aWVzLmNvbS9BdGhlbnMvMTU4NC8iPgorICogICAgICBodHRwOi8vd3d3Lmdlb2NpdGllcy5jb20vQXRoZW5zLzE1ODQvPC9hPgorICoKKyAqIDxsaT5UaGUgQ2FsZW5kYXIgRkFRLAorICogICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnBpcC5ka25ldC5kay9+cGlwMTAxNjAvY2FsZW5kYXIuaHRtbCI+CisgKiAgICAgIGh0dHA6Ly93d3cucGlwLmRrbmV0LmRrL35waXAxMDE2MC9jYWxlbmRhci5odG1sPC9hPgorICogPC91bD4KKyAqIDxwPgorICogQHNlZSBjb20uaWJtLmljdS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyCisgKgorICogQGF1dGhvciBMYXVyYSBXZXJuZXIKKyAqIEBhdXRob3IgQWxhbiBMaXUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitwdWJsaWMgY2xhc3MgSGVicmV3Q2FsZW5kYXIgZXh0ZW5kcyBDYWxlbmRhciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29weXJpZ2h0ID0gIkNvcHlyaWdodCBcdTAwYTkgMTk5Ny0xOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBUb25zIG8nIENvbnN0YW50cy4uLgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgICAvKiogCisgICAgICogQ29uc3RhbnQgZm9yIFRpc2hyaSwgdGhlIDFzdCBtb250aCBvZiB0aGUgSGVicmV3IHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSVNIUkkgPSAwOworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIEhlc2h2YW4sIHRoZSAybmQgbW9udGggb2YgdGhlIEhlYnJldyB5ZWFyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEVTSFZBTiA9IDE7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgS2lzbGV2LCB0aGUgM3JkIG1vbnRoIG9mIHRoZSBIZWJyZXcgeWVhci4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtJU0xFViA9IDI7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgVGV2ZXQsIHRoZSA0dGggbW9udGggb2YgdGhlIEhlYnJldyB5ZWFyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVWRVQgPSAzOworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIFNoZXZhdCwgdGhlIDV0aCBtb250aCBvZiB0aGUgSGVicmV3IHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSEVWQVQgPSA0OworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIEFkYXIgSSwgdGhlIDZ0aCBtb250aCBvZiB0aGUgSGVicmV3IHllYXIKKyAgICAgKiAocHJlc2VudCBpbiBsZWFwIHllYXJzIG9ubHkpLiBJbiBub24tbGVhcCB5ZWFycywgdGhlIGNhbGVuZGFyCisgICAgICoganVtcHMgZnJvbSBTaGV2YXQgKDV0aCBtb250aCkgdG8gQWRhciAoN3RoIG1vbnRoKS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBREFSXzEgPSA1OworCisgICAgLyoqIAorICAgICAqIENvbnN0YW50IGZvciB0aGUgQWRhciwgdGhlIDd0aCBtb250aCBvZiB0aGUgSGVicmV3IHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBREFSID0gNjsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBOaXNhbiwgdGhlIDh0aCBtb250aCBvZiB0aGUgSGVicmV3IHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOSVNBTiA9IDc7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgSXlhciwgdGhlIDl0aCBtb250aCBvZiB0aGUgSGVicmV3IHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJWUFSID0gODsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBTaXZhbiwgdGhlIDEwdGggbW9udGggb2YgdGhlIEhlYnJldyB5ZWFyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lWQU4gPSA5OworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIFRhbW11eiwgdGhlIDExdGggbW9udGggb2YgdGhlIEhlYnJldyB5ZWFyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFNVVogPSAxMDsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBBdiwgdGhlIDEydGggbW9udGggb2YgdGhlIEhlYnJldyB5ZWFyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVYgPSAxMTsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBFbHVsLCB0aGUgMTN0aCBtb250aCBvZiB0aGUgSGVicmV3IHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTFVMID0gMTI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgYWJzb2x1dGUgZGF0ZSwgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIDEvMS8xOTcwIEFELCBHcmVnb3JpYW4sCisgICAgICogb2YgdGhlIHN0YXJ0IG9mIHRoZSBIZWJyZXcgY2FsZW5kYXIuICBJbiBvcmRlciB0byBrZWVwIHRoaXMgY2FsZW5kYXIncworICAgICAqIHRpbWUgb2YgZGF5IGluIHN5bmMgd2l0aCB0aGF0IG9mIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIsIHdlIHVzZQorICAgICAqIG1pZG5pZ2h0LCByYXRoZXIgdGhhbiBzdW5zZXQgdGhlIGRheSBiZWZvcmUuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBFUE9DSF9NSUxMSVMgPSAtMTgwNzk5ODYyNDAwMDAwTDsgLy8gMS8xLzEgSFkKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU1JVFNbXVtdID0geworICAgICAgICAvLyBNaW5pbXVtICBHcmVhdGVzdCAgICBMZWFzdCAgTWF4aW11bQorICAgICAgICAvLyAgICAgICAgICAgTWluaW11bSAgTWF4aW11bQorICAgICAgICB7ICAgICAgICAwLCAgICAgICAgMCwgICAgICAgMCwgICAgICAgMCB9LCAvLyBFUkEKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsIDUwMDAwMDAsIDUwMDAwMDAgfSwgLy8gWUVBUgorICAgICAgICB7ICAgICAgICAwLCAgICAgICAgMCwgICAgICAxMiwgICAgICAxMiB9LCAvLyBNT05USAorICAgICAgICB7ICAgICAgICAxLCAgICAgICAgMSwgICAgICA1MSwgICAgICA1NiB9LCAvLyBXRUVLX09GX1lFQVIKKyAgICAgICAgeyAgICAgICAgMCwgICAgICAgIDAsICAgICAgIDUsICAgICAgIDYgfSwgLy8gV0VFS19PRl9NT05USAorICAgICAgICB7ICAgICAgICAxLCAgICAgICAgMSwgICAgICAyOSwgICAgICAzMCB9LCAvLyBEQVlfT0ZfTU9OVEgKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsICAgICAzNTMsICAgICAzODUgfSwgLy8gREFZX09GX1lFQVIKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gREFZX09GX1dFRUsKKyAgICAgICAgeyAgICAgICAtMSwgICAgICAgLTEsICAgICAgIDQsICAgICAgIDYgfSwgLy8gREFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gQU1fUE0KKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gSE9VUgorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBIT1VSX09GX0RBWQorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBNSU5VVEUKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gU0VDT05ECisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIE1JTExJU0VDT05ECisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIFpPTkVfT0ZGU0VUCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIERTVF9PRkZTRVQKKyAgICAgICAgeyAtNTAwMDAwMSwgLTUwMDAwMDEsIDUwMDAwMDEsIDUwMDAwMDEgfSwgLy8gWUVBUl9XT1kKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gRE9XX0xPQ0FMCisgICAgICAgIHsgLTUwMDAwMDAsIC01MDAwMDAwLCA1MDAwMDAwLCA1MDAwMDAwIH0sIC8vIEVYVEVOREVEX1lFQVIKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gSlVMSUFOX0RBWQorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBNSUxMSVNFQ09ORFNfSU5fREFZCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoZSBsZW5ndGhzIG9mIHRoZSBIZWJyZXcgbW9udGhzLiAgVGhpcyBpcyBjb21wbGljYXRlZCwgYmVjYXVzZSB0aGVyZQorICAgICAqIGFyZSB0aHJlZSBkaWZmZXJlbnQgdHlwZXMgb2YgeWVhcnMsIG9yIHNpeCBpZiB5b3UgY291bnQgbGVhcCB5ZWFycy4KKyAgICAgKiBEdWUgdG8gdGhlIHJ1bGVzIGZvciBwb3N0cG9uaW5nIHRoZSBzdGFydCBvZiB0aGUgeWVhciB0byBhdm9pZCBoYXZpbmcKKyAgICAgKiBjZXJ0YWluIGhvbGlkYXlzIGZhbGwgb24gdGhlIHNhYmJhdGgsIHRoZSB5ZWFyIGNhbiBlbmQgdXAgYmVpbmcgdGhyZWUKKyAgICAgKiBkaWZmZXJlbnQgbGVuZ3RocywgY2FsbGVkICJkZWZpY2llbnQiLCAibm9ybWFsIiwgYW5kICJjb21wbGV0ZSIuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PTlRIX0xFTkdUSFtdW10gPSB7CisgICAgICAgIC8vIERlZmljaWVudCAgTm9ybWFsICAgICBDb21wbGV0ZQorICAgICAgICB7ICAgMzAsICAgICAgICAgMzAsICAgICAgICAgMzAgICAgIH0sICAgICAgICAgICAvL1Rpc2hyaQorICAgICAgICB7ICAgMjksICAgICAgICAgMjksICAgICAgICAgMzAgICAgIH0sICAgICAgICAgICAvL0hlc2h2YW4KKyAgICAgICAgeyAgIDI5LCAgICAgICAgIDMwLCAgICAgICAgIDMwICAgICB9LCAgICAgICAgICAgLy9LaXNsZXYKKyAgICAgICAgeyAgIDI5LCAgICAgICAgIDI5LCAgICAgICAgIDI5ICAgICB9LCAgICAgICAgICAgLy9UZXZldAorICAgICAgICB7ICAgMzAsICAgICAgICAgMzAsICAgICAgICAgMzAgICAgIH0sICAgICAgICAgICAvL1NoZXZhdAorICAgICAgICB7ICAgMzAsICAgICAgICAgMzAsICAgICAgICAgMzAgICAgIH0sICAgICAgICAgICAvL0FkYXIgSSAobGVhcCB5ZWFycyBvbmx5KQorICAgICAgICB7ICAgMjksICAgICAgICAgMjksICAgICAgICAgMjkgICAgIH0sICAgICAgICAgICAvL0FkYXIKKyAgICAgICAgeyAgIDMwLCAgICAgICAgIDMwLCAgICAgICAgIDMwICAgICB9LCAgICAgICAgICAgLy9OaXNhbgorICAgICAgICB7ICAgMjksICAgICAgICAgMjksICAgICAgICAgMjkgICAgIH0sICAgICAgICAgICAvL0l5YXIKKyAgICAgICAgeyAgIDMwLCAgICAgICAgIDMwLCAgICAgICAgIDMwICAgICB9LCAgICAgICAgICAgLy9TaXZhbgorICAgICAgICB7ICAgMjksICAgICAgICAgMjksICAgICAgICAgMjkgICAgIH0sICAgICAgICAgICAvL1RhbW11egorICAgICAgICB7ICAgMzAsICAgICAgICAgMzAsICAgICAgICAgMzAgICAgIH0sICAgICAgICAgICAvL0F2CisgICAgICAgIHsgICAyOSwgICAgICAgICAyOSwgICAgICAgICAyOSAgICAgfSwgICAgICAgICAgIC8vRWx1bAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGUgY3VtdWxhdGl2ZSAjIG9mIGRheXMgdG8gdGhlIGVuZCBvZiBlYWNoIG1vbnRoIGluIGEgbm9uLWxlYXAgeWVhcgorICAgICAqIEFsdGhvdWdoIHRoaXMgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgTU9OVEhfTEVOR1RIIHRhYmxlLAorICAgICAqIGtlZXBpbmcgaXQgYXJvdW5kIHNlcGFyYXRlbHkgbWFrZXMgc29tZSBjYWxjdWxhdGlvbnMgYSBsb3QgZmFzdGVyCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PTlRIX1NUQVJUW11bXSA9IHsKKyAgICAgICAgLy8gRGVmaWNpZW50ICBOb3JtYWwgICAgIENvbXBsZXRlCisgICAgICAgIHsgICAgMCwgICAgICAgICAgMCwgICAgICAgICAgMCAgfSwgICAgICAgICAgLy8gKHBsYWNlaG9sZGVyKQorICAgICAgICB7ICAgMzAsICAgICAgICAgMzAsICAgICAgICAgMzAgIH0sICAgICAgICAgIC8vIFRpc2hyaQorICAgICAgICB7ICAgNTksICAgICAgICAgNTksICAgICAgICAgNjAgIH0sICAgICAgICAgIC8vIEhlc2h2YW4KKyAgICAgICAgeyAgIDg4LCAgICAgICAgIDg5LCAgICAgICAgIDkwICB9LCAgICAgICAgICAvLyBLaXNsZXYKKyAgICAgICAgeyAgMTE3LCAgICAgICAgMTE4LCAgICAgICAgMTE5ICB9LCAgICAgICAgICAvLyBUZXZldAorICAgICAgICB7ICAxNDcsICAgICAgICAxNDgsICAgICAgICAxNDkgIH0sICAgICAgICAgIC8vIFNoZXZhdAorICAgICAgICB7ICAxNDcsICAgICAgICAxNDgsICAgICAgICAxNDkgIH0sICAgICAgICAgIC8vIChBZGFyIEkpCisgICAgICAgIHsgIDE3NiwgICAgICAgIDE3NywgICAgICAgIDE3OCAgfSwgICAgICAgICAgLy8gQWRhcgorICAgICAgICB7ICAyMDYsICAgICAgICAyMDcsICAgICAgICAyMDggIH0sICAgICAgICAgIC8vIE5pc2FuCisgICAgICAgIHsgIDIzNSwgICAgICAgIDIzNiwgICAgICAgIDIzNyAgfSwgICAgICAgICAgLy8gSXlhcgorICAgICAgICB7ICAyNjUsICAgICAgICAyNjYsICAgICAgICAyNjcgIH0sICAgICAgICAgIC8vIFNpdmFuCisgICAgICAgIHsgIDI5NCwgICAgICAgIDI5NSwgICAgICAgIDI5NiAgfSwgICAgICAgICAgLy8gVGFtbXV6CisgICAgICAgIHsgIDMyNCwgICAgICAgIDMyNSwgICAgICAgIDMyNiAgfSwgICAgICAgICAgLy8gQXYKKyAgICAgICAgeyAgMzUzLCAgICAgICAgMzU0LCAgICAgICAgMzU1ICB9LCAgICAgICAgICAvLyBFbHVsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoZSBjdW11bGF0aXZlICMgb2YgZGF5cyB0byB0aGUgZW5kIG9mIGVhY2ggbW9udGggaW4gYSBsZWFwIHllYXIKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEVBUF9NT05USF9TVEFSVFtdW10gPSB7CisgICAgICAgIC8vIERlZmljaWVudCAgTm9ybWFsICAgICBDb21wbGV0ZQorICAgICAgICB7ICAgIDAsICAgICAgICAgIDAsICAgICAgICAgIDAgIH0sICAgICAgICAgIC8vIChwbGFjZWhvbGRlcikKKyAgICAgICAgeyAgIDMwLCAgICAgICAgIDMwLCAgICAgICAgIDMwICB9LCAgICAgICAgICAvLyBUaXNocmkKKyAgICAgICAgeyAgIDU5LCAgICAgICAgIDU5LCAgICAgICAgIDYwICB9LCAgICAgICAgICAvLyBIZXNodmFuCisgICAgICAgIHsgICA4OCwgICAgICAgICA4OSwgICAgICAgICA5MCAgfSwgICAgICAgICAgLy8gS2lzbGV2CisgICAgICAgIHsgIDExNywgICAgICAgIDExOCwgICAgICAgIDExOSAgfSwgICAgICAgICAgLy8gVGV2ZXQKKyAgICAgICAgeyAgMTQ3LCAgICAgICAgMTQ4LCAgICAgICAgMTQ5ICB9LCAgICAgICAgICAvLyBTaGV2YXQKKyAgICAgICAgeyAgMTc3LCAgICAgICAgMTc4LCAgICAgICAgMTc5ICB9LCAgICAgICAgICAvLyBBZGFyIEkKKyAgICAgICAgeyAgMjA2LCAgICAgICAgMjA3LCAgICAgICAgMjA4ICB9LCAgICAgICAgICAvLyBBZGFyIElJCisgICAgICAgIHsgIDIzNiwgICAgICAgIDIzNywgICAgICAgIDIzOCAgfSwgICAgICAgICAgLy8gTmlzYW4KKyAgICAgICAgeyAgMjY1LCAgICAgICAgMjY2LCAgICAgICAgMjY3ICB9LCAgICAgICAgICAvLyBJeWFyCisgICAgICAgIHsgIDI5NSwgICAgICAgIDI5NiwgICAgICAgIDI5NyAgfSwgICAgICAgICAgLy8gU2l2YW4KKyAgICAgICAgeyAgMzI0LCAgICAgICAgMzI1LCAgICAgICAgMzI2ICB9LCAgICAgICAgICAvLyBUYW1tdXoKKyAgICAgICAgeyAgMzU0LCAgICAgICAgMzU1LCAgICAgICAgMzU2ICB9LCAgICAgICAgICAvLyBBdgorICAgICAgICB7ICAzODMsICAgICAgICAzODQsICAgICAgICAzODUgIH0sICAgICAgICAgIC8vIEVsdWwKKyAgICB9OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRGF0YSBNZW1iZXJzLi4uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBwcml2YXRlIHN0YXRpYyBDYWxlbmRhckNhY2hlIGNhY2hlID0gbmV3IENhbGVuZGFyQ2FjaGUoKTsKKyAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDb25zdHJ1Y3RvcnMuLi4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBkZWZhdWx0IDxjb2RlPkhlYnJld0NhbGVuZGFyPC9jb2RlPiB1c2luZyB0aGUgY3VycmVudCB0aW1lCisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBIZWJyZXdDYWxlbmRhcigpIHsKKyAgICAgICAgdGhpcyhUaW1lWm9uZS5nZXREZWZhdWx0KCksIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSA8Y29kZT5IZWJyZXdDYWxlbmRhcjwvY29kZT4gYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZQorICAgICAqIGluIHRoZSBnaXZlbiB0aW1lIHpvbmUgd2l0aCB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gem9uZSBUaGUgdGltZSB6b25lIGZvciB0aGUgbmV3IGNhbGVuZGFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBIZWJyZXdDYWxlbmRhcihUaW1lWm9uZSB6b25lKSB7CisgICAgICAgIHRoaXMoem9uZSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIDxjb2RlPkhlYnJld0NhbGVuZGFyPC9jb2RlPiBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lCisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhTG9jYWxlIFRoZSBsb2NhbGUgZm9yIHRoZSBuZXcgY2FsZW5kYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEhlYnJld0NhbGVuZGFyKExvY2FsZSBhTG9jYWxlKSB7CisgICAgICAgIHRoaXMoVGltZVpvbmUuZ2V0RGVmYXVsdCgpLCBhTG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+SGVicmV3Q2FsZW5kYXI8L2NvZGU+IGJhc2VkIG9uIHRoZSBjdXJyZW50IHRpbWUKKyAgICAgKiBpbiB0aGUgZ2l2ZW4gdGltZSB6b25lIHdpdGggdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB6b25lIFRoZSB0aW1lIHpvbmUgZm9yIHRoZSBuZXcgY2FsZW5kYXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYUxvY2FsZSBUaGUgbG9jYWxlIGZvciB0aGUgbmV3IGNhbGVuZGFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBIZWJyZXdDYWxlbmRhcihUaW1lWm9uZSB6b25lLCBMb2NhbGUgYUxvY2FsZSkgeworICAgICAgICBzdXBlcih6b25lLCBhTG9jYWxlKTsKKyAgICAgICAgc2V0VGltZUluTWlsbGlzKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+SGVicmV3Q2FsZW5kYXI8L2NvZGU+IHdpdGggdGhlIGdpdmVuIGRhdGUgc2V0CisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQHBhcmFtIHllYXIgICAgICBUaGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIGNhbGVuZGFyJ3Mge0BsaW5rICNZRUFSIFlFQVJ9IHRpbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI01PTlRIIE1PTlRIfSB0aW1lIGZpZWxkLgorICAgICAqICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIDAtYmFzZWQuIGUuZy4sIDAgZm9yIFRpc2hyaS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXRlICAgICAgVGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBjYWxlbmRhcidzIHtAbGluayAjREFURSBEQVRFfSB0aW1lIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBIZWJyZXdDYWxlbmRhcihpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF0ZSkgeworICAgICAgICBzdXBlcihUaW1lWm9uZS5nZXREZWZhdWx0KCksIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgICAgICB0aGlzLnNldChZRUFSLCB5ZWFyKTsKKyAgICAgICAgdGhpcy5zZXQoTU9OVEgsIG1vbnRoKTsKKyAgICAgICAgdGhpcy5zZXQoREFURSwgZGF0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIDxjb2RlPkhlYnJld0NhbGVuZGFyPC9jb2RlPiB3aXRoIHRoZSBnaXZlbiBkYXRlIHNldAorICAgICAqIGluIHRoZSBkZWZhdWx0IHRpbWUgem9uZSB3aXRoIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXRlICAgICAgVGhlIGRhdGUgdG8gd2hpY2ggdGhlIG5ldyBjYWxlbmRhciBpcyBzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEhlYnJld0NhbGVuZGFyKERhdGUgZGF0ZSkgeworICAgICAgICBzdXBlcihUaW1lWm9uZS5nZXREZWZhdWx0KCksIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgICAgICB0aGlzLnNldFRpbWUoZGF0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIDxjb2RlPkhlYnJld0NhbGVuZGFyPC9jb2RlPiB3aXRoIHRoZSBnaXZlbiBkYXRlCisgICAgICogYW5kIHRpbWUgc2V0IGZvciB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgd2l0aCB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0geWVhciAgICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI1lFQVIgWUVBUn0gdGltZSBmaWVsZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtb250aCAgICAgVGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBjYWxlbmRhcidzIHtAbGluayAjTU9OVEggTU9OVEh9IHRpbWUgZmllbGQuCisgICAgICogICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgMC1iYXNlZC4gZS5nLiwgMCBmb3IgVGlzaHJpLgorICAgICAqCisgICAgICogQHBhcmFtIGRhdGUgICAgICBUaGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIGNhbGVuZGFyJ3Mge0BsaW5rICNEQVRFIERBVEV9IHRpbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaG91ciAgICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI0hPVVJfT0ZfREFZIEhPVVJfT0ZfREFZfSB0aW1lIGZpZWxkLgorICAgICAqCisgICAgICogQHBhcmFtIG1pbnV0ZSAgICBUaGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIGNhbGVuZGFyJ3Mge0BsaW5rICNNSU5VVEUgTUlOVVRFfSB0aW1lIGZpZWxkLgorICAgICAqCisgICAgICogQHBhcmFtIHNlY29uZCAgICBUaGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIGNhbGVuZGFyJ3Mge0BsaW5rICNTRUNPTkQgU0VDT05EfSB0aW1lIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBIZWJyZXdDYWxlbmRhcihpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF0ZSwgaW50IGhvdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtaW51dGUsIGludCBzZWNvbmQpCisgICAgeworICAgICAgICBzdXBlcihUaW1lWm9uZS5nZXREZWZhdWx0KCksIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgICAgICB0aGlzLnNldChZRUFSLCB5ZWFyKTsKKyAgICAgICAgdGhpcy5zZXQoTU9OVEgsIG1vbnRoKTsKKyAgICAgICAgdGhpcy5zZXQoREFURSwgZGF0ZSk7CisgICAgICAgIHRoaXMuc2V0KEhPVVJfT0ZfREFZLCBob3VyKTsKKyAgICAgICAgdGhpcy5zZXQoTUlOVVRFLCBtaW51dGUpOworICAgICAgICB0aGlzLnNldChTRUNPTkQsIHNlY29uZCk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUm9sbGluZyBhbmQgYWRkaW5nIGZ1bmN0aW9ucyBvdmVycmlkZGVuIGZyb20gQ2FsZW5kYXIKKyAgICAvLworICAgIC8vIFRoZXNlIG1ldGhvZHMgY2FsbCB0aHJvdWdoIHRvIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGluIElCTUNhbGVuZGFyCisgICAgLy8gZm9yIG1vc3Qgb2YgdGhlIGZpZWxkcyBhbmQgb25seSBoYW5kbGUgdGhlIHVudXN1YWwgb25lcyB0aGVtc2VsdmVzLgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQWRkIGEgc2lnbmVkIGFtb3VudCB0byBhIHNwZWNpZmllZCBmaWVsZCwgdXNpbmcgdGhpcyBjYWxlbmRhcidzIHJ1bGVzLgorICAgICAqIEZvciBleGFtcGxlLCB0byBhZGQgdGhyZWUgZGF5cyB0byB0aGUgY3VycmVudCBkYXRlLCB5b3UgY2FuIGNhbGwKKyAgICAgKiA8Y29kZT5hZGQoQ2FsZW5kYXIuREFURSwgMyk8L2NvZGU+LiAKKyAgICAgKiA8cD4KKyAgICAgKiBXaGVuIGFkZGluZyB0byBjZXJ0YWluIGZpZWxkcywgdGhlIHZhbHVlcyBvZiBvdGhlciBmaWVsZHMgbWF5IGNvbmZsaWN0IGFuZAorICAgICAqIG5lZWQgdG8gYmUgY2hhbmdlZC4gIEZvciBleGFtcGxlLCB3aGVuIGFkZGluZyBvbmUgdG8gdGhlIHtAbGluayAjTU9OVEggTU9OVEh9IGZpZWxkCisgICAgICogZm9yIHRoZSBkYXRlICIzMCBBdiA1NzU4IiwgdGhlIHtAbGluayAjREFZX09GX01PTlRIIERBWV9PRl9NT05USH0gZmllbGQKKyAgICAgKiBtdXN0IGJlIGFkanVzdGVkIHNvIHRoYXQgdGhlIHJlc3VsdCBpcyAiMjkgRWx1bCA1NzU4IiByYXRoZXIgdGhhbiB0aGUgaW52YWxpZAorICAgICAqICIzMCBFbHVsIDU3NTgiLgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGFibGUgdG8gYWRkIHRvCisgICAgICogYWxsIGZpZWxkcyBleGNlcHQgZm9yIHtAbGluayAjRVJBIEVSQX0sIHtAbGluayAjRFNUX09GRlNFVCBEU1RfT0ZGU0VUfSwKKyAgICAgKiBhbmQge0BsaW5rICNaT05FX09GRlNFVCBaT05FX09GRlNFVH0uCisgICAgICogPHA+CisgICAgICogPGI+Tm90ZTo8L2I+IFlvdSBzaG91bGQgYWx3YXlzIHVzZSB7QGxpbmsgI3JvbGwgcm9sbH0gYW5kIGFkZCByYXRoZXIKKyAgICAgKiB0aGFuIGF0dGVtcHRpbmcgdG8gcGVyZm9ybSBhcml0aG1ldGljIG9wZXJhdGlvbnMgZGlyZWN0bHkgb24gdGhlIGZpZWxkcworICAgICAqIG9mIGEgPHR0PkhlYnJld0NhbGVuZGFyPC90dD4uICBTaW5jZSB0aGUge0BsaW5rICNNT05USCBNT05USH0gZmllbGQgYmVoYXZlcworICAgICAqIGRpc2NvbnRpbnVvdXNseSBpbiBub24tbGVhcCB5ZWFycywgc2ltcGxlIGFyaXRobWV0aWMgY2FuIGdpdmUgaW52YWxpZCByZXN1bHRzLgorICAgICAqIDxwPgorICAgICAqIEBwYXJhbSBmaWVsZCAgICAgdGhlIHRpbWUgZmllbGQuCisgICAgICogQHBhcmFtIGFtb3VudCAgICB0aGUgYW1vdW50IHRvIGFkZCB0byB0aGUgZmllbGQuCisgICAgICoKKyAgICAgKiBAZXhjZXB0aW9uICAgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBmaWVsZCBpcyBpbnZhbGlkIG9yIHJlZmVycworICAgICAqICAgICAgICAgICAgICB0byBhIGZpZWxkIHRoYXQgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBtZXRob2QuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkKGludCBmaWVsZCwgaW50IGFtb3VudCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSBNT05USDogCisgICAgICAgICAgICB7CisvL34gICAgICAgICAgICAgLy8gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIGJ1dCBpdCBpc24ndCB3b3JraW5nIDooIC0gQWxhbgorCisvL34gICAgICAgICAgICAgLy8gTU9OVEggaXMgdHJpY2t5LCBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbW9udGhzIHBlciB5ZWFyIHZhcmllcworLy9+ICAgICAgICAgICAgIC8vIEl0J3MgZWFzaWVzdCB0byBqdXN0IGNvbnZlcnQgdG8gYW4gYWJzb2x1dGUgIyBvZiBtb250aHMKKy8vfiAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgZXBvY2gsIGRvIHRoZSBhZGRpdGlvbiwgYW5kIGNvbnZlcnQgYmFjay4KKy8vfiAgICAgICAgICAgICBpbnQgbW9udGggPSAoMjM1ICogZ2V0KFlFQVIpIC0gMjM0KSAvIDE5ICsgZ2V0KE1PTlRIKTsKKy8vfiAgICAgICAgICAgICBtb250aCArPSBhbW91bnQ7CisKKy8vfiAgICAgICAgICAgICAvLyBOb3cgY29udmVydCBiYWNrIHRvIHllYXIgYW5kIG1vbnRoIHZhbHVlcworLy9+ICAgICAgICAgICAgIGludCB5ZWFyID0gKDE5ICogbW9udGggKyAyMzQpIC8gMjM1OworLy9+ICAgICAgICAgICAgIG1vbnRoIC09ICgyMzUgKiB5ZWFyIC0gMjM0KSAvIDE5OworLy9+ICAgICAgICAgICAgIAorLy9+ICAgICAgICAgICAgIC8vIEluIGEgbm9uLWxlYXAgeWVhciwgbW9udGhzIGFmdGVyIHRoZSAobWlzc2luZykgbGVhcCBtb250aAorLy9+ICAgICAgICAgICAgIC8vIG11c3QgYmUgYnVtcGVkIHVwIGJ5IG9uZS4KKy8vfiAgICAgICAgICAgICAvLyBUT0RPOiBidXQgb25seSBpZiB3ZSBzdGFydGVkIGJlZm9yZSB0aGUgbGVhcCBtb250aAorLy9+ICAgICAgICAgICAgIGlmIChtb250aCA+PSBBREFSXzEgJiYgIWlzTGVhcFllYXIoeWVhcikpIHsKKy8vfiAgICAgICAgICAgICAgICAgbW9udGgrKzsKKy8vfiAgICAgICAgICAgICB9CisvL34gICAgICAgICAgICAgc2V0KFlFQVIsIHllYXIpOworLy9+ICAgICAgICAgICAgIHNldChNT05USCwgbW9udGgpOworLy9+ICAgICAgICAgICAgIHBpbkZpZWxkKERBWV9PRl9NT05USCk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGRvIGEgc2V0KE1PTlRILCBnZXQoTU9OVEgpICsgYW1vdW50KS4gIFRoZQorICAgICAgICAgICAgICAgIC8vIHJlYXNvbiBpcyBBREFSXzEuICBTdXBwb3NlIGFtb3VudCBpcyArMiBhbmQgd2UgbGFuZCBpbgorICAgICAgICAgICAgICAgIC8vIEFEQVJfMSAtLSB0aGVuIHdlIGhhdmUgdG8gYnVtcCB0byBBREFSXzIgYWthIEFEQVIuICBCdXQKKyAgICAgICAgICAgICAgICAvLyBpZiBhbW91bnQgaXMgLTIgYW5kIHdlIGxhbmQgaW4gQURBUl8xLCB0aGVuIHdlIGhhdmUgdG8KKyAgICAgICAgICAgICAgICAvLyBidW1wIHRoZSBvdGhlciB3YXkgLS0gZG93biB0byBTSEVWQVQuICAtIEFsYW4gMTEvMDAKKyAgICAgICAgICAgICAgICBpbnQgbW9udGggPSBnZXQoTU9OVEgpOworICAgICAgICAgICAgICAgIGludCB5ZWFyID0gZ2V0KFlFQVIpOworICAgICAgICAgICAgICAgIC8vcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0hFVkFUID0gNDsKKyAgICAgICAgICAgICAgICAvL3B1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFEQVJfMSA9IDU7CisgICAgICAgICAgICAgICAgLy9wdWJsaWMgc3RhdGljIGZpbmFsIGludCBBREFSID0gNjsKKyAgICAgICAgICAgICAgICBpZiAoYW1vdW50ID4gMCkgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYW1vdW50LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK21vbnRoOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID09IEFEQVJfMSAmJiAhaXNMZWFwWWVhcih5ZWFyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbW9udGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiBFTFVMKSB7IC8vIExhc3QgbW9udGggb2YgeWVhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3llYXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYW1vdW50KysgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAtLW1vbnRoOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID09IEFEQVJfMSAmJiAhaXNMZWFwWWVhcih5ZWFyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbW9udGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSBFTFVMOyAvLyBMYXN0IG1vbnRoIG9mIHllYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXllYXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0KE1PTlRILCBtb250aCk7CisgICAgICAgICAgICAgICAgc2V0KFlFQVIsIHllYXIpOworICAgICAgICAgICAgICAgIHBpbkZpZWxkKERBWV9PRl9NT05USCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN1cGVyLmFkZChmaWVsZCwgYW1vdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUm9sbHMgKHVwL2Rvd24pIGEgc3BlY2lmaWVkIGFtb3VudCB0aW1lIG9uIHRoZSBnaXZlbiBmaWVsZC4gIEZvcgorICAgICAqIGV4YW1wbGUsIHRvIHJvbGwgdGhlIGN1cnJlbnQgZGF0ZSB1cCBieSB0aHJlZSBkYXlzLCB5b3UgY2FuIGNhbGwKKyAgICAgKiA8Y29kZT5yb2xsKENhbGVuZGFyLkRBVEUsIDMpPC9jb2RlPi4gIElmIHRoZQorICAgICAqIGZpZWxkIGlzIHJvbGxlZCBwYXN0IGl0cyBtYXhpbXVtIGFsbG93YWJsZSB2YWx1ZSwgaXQgd2lsbCAid3JhcCIgYmFjaworICAgICAqIHRvIGl0cyBtaW5pbXVtIGFuZCBjb250aW51ZSByb2xsaW5nLiAgCisgICAgICogRm9yIGV4YW1wbGUsIGNhbGxpbmcgPGNvZGU+cm9sbChDYWxlbmRhci5EQVRFLCAxMCk8L2NvZGU+CisgICAgICogb24gYSBIZWJyZXcgY2FsZW5kYXIgc2V0IHRvICIyNSBBdiA1NzU4IiB3aWxsIHJlc3VsdCBpbiB0aGUgZGF0ZSAiNSBBdiA1NzU4Ii4KKyAgICAgKiA8cD4KKyAgICAgKiBXaGVuIHJvbGxpbmcgY2VydGFpbiBmaWVsZHMsIHRoZSB2YWx1ZXMgb2Ygb3RoZXIgZmllbGRzIG1heSBjb25mbGljdCBhbmQKKyAgICAgKiBuZWVkIHRvIGJlIGNoYW5nZWQuICBGb3IgZXhhbXBsZSwgd2hlbiByb2xsaW5nIHRoZSB7QGxpbmsgI01PTlRIIE1PTlRIfSBmaWVsZAorICAgICAqIHVwd2FyZCBieSBvbmUgZm9yIHRoZSBkYXRlICIzMCBBdiA1NzU4IiwgdGhlIHtAbGluayAjREFZX09GX01PTlRIIERBWV9PRl9NT05USH0gZmllbGQKKyAgICAgKiBtdXN0IGJlIGFkanVzdGVkIHNvIHRoYXQgdGhlIHJlc3VsdCBpcyAiMjkgRWx1bCA1NzU4IiByYXRoZXIgdGhhbiB0aGUgaW52YWxpZAorICAgICAqICIzMCBFbHVsIi4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBhYmxlIHRvIHJvbGwKKyAgICAgKiBhbGwgZmllbGRzIGV4Y2VwdCBmb3Ige0BsaW5rICNFUkEgRVJBfSwge0BsaW5rICNEU1RfT0ZGU0VUIERTVF9PRkZTRVR9LAorICAgICAqIGFuZCB7QGxpbmsgI1pPTkVfT0ZGU0VUIFpPTkVfT0ZGU0VUfS4gIFN1YmNsYXNzZXMgbWF5LCBvZiBjb3Vyc2UsIGFkZCBzdXBwb3J0IGZvcgorICAgICAqIGFkZGl0aW9uYWwgZmllbGRzIGluIHRoZWlyIG92ZXJyaWRlcyBvZiA8Y29kZT5yb2xsPC9jb2RlPi4KKyAgICAgKiA8cD4KKyAgICAgKiA8Yj5Ob3RlOjwvYj4gWW91IHNob3VsZCBhbHdheXMgdXNlIHJvbGwgYW5kIHtAbGluayAjYWRkIGFkZH0gcmF0aGVyCisgICAgICogdGhhbiBhdHRlbXB0aW5nIHRvIHBlcmZvcm0gYXJpdGhtZXRpYyBvcGVyYXRpb25zIGRpcmVjdGx5IG9uIHRoZSBmaWVsZHMKKyAgICAgKiBvZiBhIDx0dD5IZWJyZXdDYWxlbmRhcjwvdHQ+LiAgU2luY2UgdGhlIHtAbGluayAjTU9OVEggTU9OVEh9IGZpZWxkIGJlaGF2ZXMKKyAgICAgKiBkaXNjb250aW51b3VzbHkgaW4gbm9uLWxlYXAgeWVhcnMsIHNpbXBsZSBhcml0aG1ldGljIGNhbiBnaXZlIGludmFsaWQgcmVzdWx0cy4KKyAgICAgKiA8cD4KKyAgICAgKiBAcGFyYW0gZmllbGQgICAgIHRoZSB0aW1lIGZpZWxkLgorICAgICAqIEBwYXJhbSBhbW91bnQgICAgdGhlIGFtb3VudCBieSB3aGljaCB0aGUgZmllbGQgc2hvdWxkIGJlIHJvbGxlZC4KKyAgICAgKgorICAgICAqIEBleGNlcHRpb24gICBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGZpZWxkIGlzIGludmFsaWQgb3IgcmVmZXJzCisgICAgICogICAgICAgICAgICAgIHRvIGEgZmllbGQgdGhhdCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIG1ldGhvZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByb2xsKGludCBmaWVsZCwgaW50IGFtb3VudCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSBNT05USDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgbW9udGggPSBnZXQoTU9OVEgpOworICAgICAgICAgICAgICAgIGludCB5ZWFyID0gZ2V0KFlFQVIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2xlYW4gbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOworICAgICAgICAgICAgICAgIGludCB5ZWFyTGVuZ3RoID0gbW9udGhzSW5ZZWFyKHllYXIpOworICAgICAgICAgICAgICAgIGludCBuZXdNb250aCA9IG1vbnRoICsgKGFtb3VudCAlIHllYXJMZW5ndGgpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBub3QgYSBsZWFwIHllYXIgYW5kIHdlJ3JlIHJvbGxpbmcgcGFzdCB0aGUgbWlzc2luZyBtb250aAorICAgICAgICAgICAgICAgIC8vIG9mIEFEQVJfMSwgd2UgbmVlZCB0byByb2xsIGFuIGV4dHJhIG1vbnRoIHRvIG1ha2UgdXAgZm9yIGl0LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKCFsZWFwWWVhcikgeworICAgICAgICAgICAgICAgICAgICBpZiAoYW1vdW50ID4gMCAmJiBtb250aCA8IEFEQVJfMSAmJiBuZXdNb250aCA+PSBBREFSXzEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld01vbnRoKys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW1vdW50IDwgMCAmJiBtb250aCA+IEFEQVJfMSAmJiBuZXdNb250aCA8PSBBREFSXzEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld01vbnRoLS07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0KE1PTlRILCAobmV3TW9udGggKyAxMykgJSAxMyk7CisgICAgICAgICAgICAgICAgcGluRmllbGQoREFZX09GX01PTlRIKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzdXBlci5yb2xsKGZpZWxkLCBhbW91bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU3VwcG9ydCBtZXRob2RzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBIZWJyZXcgZGF0ZSBjYWxjdWxhdGlvbnMgYXJlIHBlcmZvcm1lZCBpbiB0ZXJtcyBvZiBkYXlzLCBob3VycywgYW5kCisgICAgLy8gInBhcnRzIiAob3IgaGFsYWtpbSksIHdoaWNoIGFyZSAxLzEwODAgb2YgYW4gaG91ciwgb3IgMyAxLzMgc2Vjb25kcy4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEhPVVJfUEFSVFMgPSAxMDgwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgREFZX1BBUlRTICA9IDI0KkhPVVJfUEFSVFM7CisgICAgCisgICAgLy8gQW4gYXBwcm94aW1hdGUgdmFsdWUgZm9yIHRoZSBsZW5ndGggb2YgYSBsdW5hciBtb250aC4KKyAgICAvLyBJdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgeWVhciBhbmQgbW9udGggb2YgYSBnaXZlbgorICAgIC8vIGFic29sdXRlIGRhdGUuCisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgaW50ICBNT05USF9EQVlTID0gMjk7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgbG9uZyBNT05USF9GUkFDVCA9IDEyKkhPVVJfUEFSVFMgKyA3OTM7CisgICAgc3RhdGljIHByaXZhdGUgZmluYWwgbG9uZyBNT05USF9QQVJUUyA9IE1PTlRIX0RBWVMqREFZX1BBUlRTICsgTU9OVEhfRlJBQ1Q7CisgICAgCisgICAgLy8gVGhlIHRpbWUgb2YgdGhlIG5ldyBtb29uIChpbiBwYXJ0cykgb24gMSBUaXNocmksIHllYXIgMSAodGhlIGVwb2NoKQorICAgIC8vIGNvdW50aW5nIGZyb20gbm9vbiBvbiB0aGUgZGF5IGJlZm9yZS4gIEJBSEFSQUQgaXMgYW4gYWJicmV2aWF0aW9uIG9mCisgICAgLy8gQmV0IChNb25kYXkpLCBIZXkgKDUgaG91cnMgZnJvbSBzdW5zZXQpLCBSZXNoLURhbGVkICgyMDQpLgorICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIGxvbmcgQkFIQVJBRCA9IDExKkhPVVJfUEFSVFMgKyAyMDQ7CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyB0aGUgZGF5ICMgb2YgdGhlIGZpcnN0IGRheSBpbiB0aGUgZ2l2ZW4gSGVicmV3IHllYXIuCisgICAgICogVG8gZG8gdGhpcywgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIHRpbWUgb2YgdGhlIFRpc2hyaSAxIG5ldyBtb29uCisgICAgICogaW4gdGhhdCB5ZWFyLgorICAgICAqIDxwPgorICAgICAqIFRoZSBhbGdvcml0aG0gaGVyZSBpcyBzaW1pbGFyIHRvIG9uZXMgZGVzY3JpYmVkIGluIGEgbnVtYmVyIG9mCisgICAgICogcmVmZXJlbmNlcywgaW5jbHVkaW5nOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+IkNhbGVuZHJpY2FsIENhbGN1bGF0aW9ucyIsIGJ5IE5hY2h1bSBEZXJzaG93aXR6ICYgRWR3YXJkIFJlaW5nb2xkLAorICAgICAqICAgICBDYW1icmlkZ2UgVW5pdmVyc2l0eSBQcmVzcywgMTk5NywgcGFnZXMgODUtOTEuCisgICAgICoKKyAgICAgKiA8bGk+SGVicmV3IENhbGVuZGFyIFNjaWVuY2UgYW5kIE15dGhzLAorICAgICAqICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lmdlb2NpdGllcy5jb20vQXRoZW5zLzE1ODQvIj4KKyAgICAgKiAgICAgaHR0cDovL3d3dy5nZW9jaXRpZXMuY29tL0F0aGVucy8xNTg0LzwvYT4KKyAgICAgKgorICAgICAqIDxsaT5UaGUgQ2FsZW5kYXIgRkFRLAorICAgICAqICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5waXAuZGtuZXQuZGsvfnBpcDEwMTYwL2NhbGVuZGFyLmZhcTIudHh0Ij4KKyAgICAgKiAgICAgIGh0dHA6Ly93d3cucGlwLmRrbmV0LmRrL35waXAxMDE2MC9jYWxlbmRhci5odG1sPC9hPgorICAgICAqIDwvdWw+CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBzdGFydE9mWWVhcihpbnQgeWVhcikKKyAgICB7CisgICAgICAgIGxvbmcgZGF5ID0gY2FjaGUuZ2V0KHllYXIpOworICAgICAgICAKKyAgICAgICAgaWYgKGRheSA9PSBDYWxlbmRhckNhY2hlLkVNUFRZKSB7CisgICAgICAgICAgICBpbnQgbW9udGhzID0gKDIzNSAqIHllYXIgLSAyMzQpIC8gMTk7ICAgICAgICAgICAvLyAjIG9mIG1vbnRocyBiZWZvcmUgeWVhcgorCisgICAgICAgICAgICBsb25nIGZyYWMgPSBtb250aHMgKiBNT05USF9GUkFDVCArIEJBSEFSQUQ7ICAgICAvLyBGcmFjdGlvbmFsIHBhcnQgb2YgZGF5ICMKKyAgICAgICAgICAgIGRheSAgPSBtb250aHMgKiAyOSArIChmcmFjIC8gREFZX1BBUlRTKTsgICAvLyBXaG9sZSAjIHBhcnQgb2YgY2FsY3VsYXRpb24KKyAgICAgICAgICAgIGZyYWMgPSBmcmFjICUgREFZX1BBUlRTOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWUgb2YgZGF5CisKKyAgICAgICAgICAgIGludCB3ZCA9IChpbnQpKGRheSAlIDcpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERheSBvZiB3ZWVrICgwID09IE1vbmRheSkKKworICAgICAgICAgICAgaWYgKHdkID09IDIgfHwgd2QgPT0gNCB8fCB3ZCA9PSA2KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIDFzdCBpcyBvbiBTdW4sIFdlZCwgb3IgRnJpLCBwb3N0cG9uZSB0byB0aGUgbmV4dCBkYXkKKyAgICAgICAgICAgICAgICBkYXkgKz0gMTsKKyAgICAgICAgICAgICAgICB3ZCA9IChpbnQpKGRheSAlIDcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdkID09IDEgJiYgZnJhYyA+IDE1KkhPVVJfUEFSVFMrMjA0ICYmICFpc0xlYXBZZWFyKHllYXIpICkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgbW9vbiBmYWxscyBhZnRlciAzOjExOjIwYW0gKDE1aDIwNHAgZnJvbSB0aGUgcHJldmlvdXMgbm9vbikKKyAgICAgICAgICAgICAgICAvLyBvbiBhIFR1ZXNkYXkgYW5kIGl0IGlzIG5vdCBhIGxlYXAgeWVhciwgcG9zdHBvbmUgYnkgMiBkYXlzLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgMzU2LWRheSB5ZWFycy4KKyAgICAgICAgICAgICAgICBkYXkgKz0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHdkID09IDAgJiYgZnJhYyA+IDIxKkhPVVJfUEFSVFMrNTg5ICYmIGlzTGVhcFllYXIoeWVhci0xKSApIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbmV3IG1vb24gZmFsbHMgYWZ0ZXIgOTozMjo0MyAxLzNhbSAoMjFoNTg5cCBmcm9tIHllc3RlcmRheSBub29uKQorICAgICAgICAgICAgICAgIC8vIG9uIGEgTW9uZGF5IGFuZCAqbGFzdCogeWVhciB3YXMgYSBsZWFwIHllYXIsIHBvc3Rwb25lIGJ5IDEgZGF5LgorICAgICAgICAgICAgICAgIC8vIFByZXZlbnRzIDM4Mi1kYXkgeWVhcnMuCisgICAgICAgICAgICAgICAgZGF5ICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWNoZS5wdXQoeWVhciwgZGF5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF5OworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIGRheSBvZiB0aGUgd2VlayBmb3IgYSBnaXZlbiBkYXkKKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXkgICBUaGUgIyBvZiBkYXlzIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgSGVicmV3IGNhbGVuZGFyLAorICAgICAqICAgICAgICAgICAgICAxLWJhc2VkIChpLmUuIDEvMS8xIEFNIGlzIGRheSAxKS4KKyAgICAgKi8KKyAgICAvLy9DTE9WRVI6T0ZGCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGFic29sdXRlRGF5VG9EYXlPZldlZWsobG9uZyBkYXkpCisgICAgeworICAgICAgICAvLyBXZSBrbm93IHRoYXQgMS8xLzEgQU0gaXMgYSBNb25kYXksIHdoaWNoIG1ha2VzIHRoZSBtYXRoIGVhc3kuLi4KKyAgICAgICAgcmV0dXJuIChpbnQpKGRheSAlIDcpICsgMTsKKyAgICB9CisgICAgLy8vQ0xPVkVSOk9OCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB0aGUgdHlwZSBvZiBhIGdpdmVuIHllYXIuCisgICAgICogIDAgICAiRGVmaWNpZW50IiB5ZWFyIHdpdGggMzUzIG9yIDM4MyBkYXlzCisgICAgICogIDEgICAiTm9ybWFsIiAgICB5ZWFyIHdpdGggMzU0IG9yIDM4NCBkYXlzCisgICAgICogIDIgICAiQ29tcGxldGUiICB5ZWFyIHdpdGggMzU1IG9yIDM4NSBkYXlzCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgeWVhclR5cGUoaW50IHllYXIpCisgICAgeworICAgICAgICBpbnQgeWVhckxlbmd0aCA9IGhhbmRsZUdldFllYXJMZW5ndGgoeWVhcik7CisKKyAgICAgICAgaWYgKHllYXJMZW5ndGggPiAzODApIHsKKyAgICAgICAgICAgeWVhckxlbmd0aCAtPSAzMDsgICAgICAgIC8vIFN1YnRyYWN0IGxlbmd0aCBvZiBsZWFwIG1vbnRoLgorICAgICAgICB9CisKKyAgICAgICAgaW50IHR5cGUgPSAwOworCisgICAgICAgIHN3aXRjaCAoeWVhckxlbmd0aCkgeworICAgICAgICAgICAgY2FzZSAzNTM6CisgICAgICAgICAgICAgICAgdHlwZSA9IDA7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAzNTQ6CisgICAgICAgICAgICAgICAgdHlwZSA9IDE7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAzNTU6CisgICAgICAgICAgICAgICAgdHlwZSA9IDI7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklsbGVnYWwgeWVhciBsZW5ndGggIiArIHllYXJMZW5ndGggKyAiIGluIHllYXJUeXBlIik7CisKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIEhlYnJldyB5ZWFyIGlzIGEgbGVhcCB5ZWFyCisgICAgICoKKyAgICAgKiBUaGUgcnVsZSBoZXJlIGlzIHRoYXQgaWYgKHllYXIgJSAxOSkgPT0gMCwgMywgNiwgOCwgMTEsIDE0LCBvciAxNy4KKyAgICAgKiBUaGUgZm9ybXVsYSBiZWxvdyBwZXJmb3JtcyB0aGUgc2FtZSB0ZXN0LCBiZWxpZXZlIGl0IG9yIG5vdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzTGVhcFllYXIoaW50IHllYXIpIHsKKyAgICAgICAgcmV0dXJuICh5ZWFyICogMTIgKyAxNykgJSAxOSA+PSAxMjsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgbW9udGhzSW5ZZWFyKGludCB5ZWFyKSB7CisgICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMTMgOiAxMjsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDYWxlbmRhciBmcmFtZXdvcmsKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0TGltaXQoaW50IGZpZWxkLCBpbnQgbGltaXRUeXBlKSB7CisgICAgICAgIHJldHVybiBMSU1JVFNbZmllbGRdW2xpbWl0VHlwZV07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZlbiBtb250aCBpbiB0aGUgZ2l2ZW4geWVhcgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0TW9udGhMZW5ndGgoaW50IGV4dGVuZGVkWWVhciwgaW50IG1vbnRoKSB7CisKKyAgICAgICAgc3dpdGNoIChtb250aCkgeworICAgICAgICAgICAgY2FzZSBIRVNIVkFOOgorICAgICAgICAgICAgY2FzZSBLSVNMRVY6CisgICAgICAgICAgICAgICAgLy8gVGhlc2UgdHdvIG1vbnRoIGxlbmd0aHMgY2FuIHZhcnkKKyAgICAgICAgICAgICAgICByZXR1cm4gTU9OVEhfTEVOR1RIW21vbnRoXVt5ZWFyVHlwZShleHRlbmRlZFllYXIpXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gVGhlIHJlc3QgYXJlIGEgZml4ZWQgbGVuZ3RoCisgICAgICAgICAgICAgICAgcmV0dXJuIE1PTlRIX0xFTkdUSFttb250aF1bMF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgZ2l2ZW4gSGVicmV3IHllYXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUdldFllYXJMZW5ndGgoaW50IGV5ZWFyKSB7CisgICAgICAgIHJldHVybiAoaW50KShzdGFydE9mWWVhcihleWVhcisxKSAtIHN0YXJ0T2ZZZWFyKGV5ZWFyKSk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGZyb20gbWlsbGlzZWNvbmRzIHRvIGZpZWxkIHZhbHVlcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY29tcHV0ZSBzZXZlcmFsIGZpZWxkcworICAgICAqIHNwZWNpZmljIHRvIGVhY2ggY2FsZW5kYXIgc3lzdGVtLiAgVGhlc2UgYXJlOgorICAgICAqCisgICAgICogPHVsPjxsaT5FUkEKKyAgICAgKiA8bGk+WUVBUgorICAgICAqIDxsaT5NT05USAorICAgICAqIDxsaT5EQVlfT0ZfTU9OVEgKKyAgICAgKiA8bGk+REFZX09GX1lFQVIKKyAgICAgKiA8bGk+RVhURU5ERURfWUVBUjwvdWw+CisgICAgICogCisgICAgICogU3ViY2xhc3NlcyBjYW4gcmVmZXIgdG8gdGhlIERBWV9PRl9XRUVLIGFuZCBET1dfTE9DQUwgZmllbGRzLAorICAgICAqIHdoaWNoIHdpbGwgYmUgc2V0IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLiAgU3ViY2xhc3NlcyBjYW4KKyAgICAgKiBhbHNvIGNhbGwgdGhlIGdldEdyZWdvcmlhblh4eCgpIG1ldGhvZHMgdG8gb2J0YWluIEdyZWdvcmlhbgorICAgICAqIGNhbGVuZGFyIGVxdWl2YWxlbnRzIGZvciB0aGUgZ2l2ZW4gSnVsaWFuIGRheS4KKyAgICAgKgorICAgICAqIDxwPkluIGFkZGl0aW9uLCBzdWJjbGFzc2VzIHNob3VsZCBjb21wdXRlIGFueSBzdWJjbGFzcy1zcGVjaWZpYworICAgICAqIGZpZWxkcywgdGhhdCBpcywgZmllbGRzIGZyb20gQkFTRV9GSUVMRF9DT1VOVCB0bworICAgICAqIGdldEZpZWxkQ291bnQoKSAtIDEuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ29tcHV0ZUZpZWxkcyhpbnQganVsaWFuRGF5KSB7CisgICAgICAgIGxvbmcgZCA9IGp1bGlhbkRheSAtIDM0Nzk5NzsKKyAgICAgICAgbG9uZyBtID0gKGQgKiBEQVlfUEFSVFMpIC8gTU9OVEhfUEFSVFM7ICAgICAgICAgLy8gTW9udGhzIChhcHByb3gpCisgICAgICAgIGludCB5ZWFyID0gKGludCkoKDE5ICogbSArIDIzNCkgLyAyMzUpICsgMTsgICAgIC8vIFllYXJzIChhcHByb3gpCisgICAgICAgIGxvbmcgeXMgID0gc3RhcnRPZlllYXIoeWVhcik7ICAgICAgICAgICAgICAgICAgIC8vIDFzdCBkYXkgb2YgeWVhcgorICAgICAgICBpbnQgZGF5T2ZZZWFyID0gKGludCkoZCAtIHlzKTsKKworICAgICAgICAvLyBCZWNhdXNlIG9mIHRoZSBwb3N0cG9uZW1lbnQgcnVsZXMsIGl0J3MgcG9zc2libGUgdG8gZ3Vlc3Mgd3JvbmcuICBGaXggaXQuCisgICAgICAgIHdoaWxlIChkYXlPZlllYXIgPCAxKSB7CisgICAgICAgICAgICB5ZWFyLS07CisgICAgICAgICAgICB5cyAgPSBzdGFydE9mWWVhcih5ZWFyKTsKKyAgICAgICAgICAgIGRheU9mWWVhciA9IChpbnQpKGQgLSB5cyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgZmlndXJlIG91dCB3aGljaCBtb250aCB3ZSdyZSBpbiwgYW5kIHRoZSBkYXRlIHdpdGhpbiB0aGF0IG1vbnRoCisgICAgICAgIGludCB5ZWFyVHlwZSA9IHllYXJUeXBlKHllYXIpOworICAgICAgICBpbnQgbW9udGhTdGFydFtdW10gPSBpc0xlYXBZZWFyKHllYXIpID8gTEVBUF9NT05USF9TVEFSVCA6IE1PTlRIX1NUQVJUOworCisgICAgICAgIGludCBtb250aCA9IDA7CisgICAgICAgIHdoaWxlIChkYXlPZlllYXIgPiBtb250aFN0YXJ0W21vbnRoXVt5ZWFyVHlwZV0pIHsKKyAgICAgICAgICAgIG1vbnRoKys7CisgICAgICAgIH0KKyAgICAgICAgbW9udGgtLTsKKyAgICAgICAgaW50IGRheU9mTW9udGggPSBkYXlPZlllYXIgLSBtb250aFN0YXJ0W21vbnRoXVt5ZWFyVHlwZV07CisKKyAgICAgICAgaW50ZXJuYWxTZXQoRVJBLCAwKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoWUVBUiwgeWVhcik7CisgICAgICAgIGludGVybmFsU2V0KEVYVEVOREVEX1lFQVIsIHllYXIpOworICAgICAgICBpbnRlcm5hbFNldChNT05USCwgbW9udGgpOworICAgICAgICBpbnRlcm5hbFNldChEQVlfT0ZfTU9OVEgsIGRheU9mTW9udGgpOworICAgICAgICBpbnRlcm5hbFNldChEQVlfT0ZfWUVBUiwgZGF5T2ZZZWFyKTsgICAgICAgCisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGZyb20gZmllbGQgdmFsdWVzIHRvIG1pbGxpc2Vjb25kcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVHZXRFeHRlbmRlZFllYXIoKSB7CisgICAgICAgIGludCB5ZWFyOworICAgICAgICBpZiAobmV3ZXJGaWVsZChFWFRFTkRFRF9ZRUFSLCBZRUFSKSA9PSBFWFRFTkRFRF9ZRUFSKSB7CisgICAgICAgICAgICB5ZWFyID0gaW50ZXJuYWxHZXQoRVhURU5ERURfWUVBUiwgMSk7IC8vIERlZmF1bHQgdG8geWVhciAxCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB5ZWFyID0gaW50ZXJuYWxHZXQoWUVBUiwgMSk7IC8vIERlZmF1bHQgdG8geWVhciAxCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHllYXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIEpEIG9mIHN0YXJ0IG9mIGdpdmVuIG1vbnRoL3llYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVDb21wdXRlTW9udGhTdGFydChpbnQgZXllYXIsIGludCBtb250aCwgYm9vbGVhbiB1c2VNb250aCkgeworCisgICAgICAgIC8vIFJlc29sdmUgb3V0LW9mLXJhbmdlIG1vbnRocy4gIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvCisgICAgICAgIC8vIG9idGFpbiB0aGUgY29ycmVjdCB5ZWFyLgorICAgICAgICBpZiAobW9udGggPCAwKSB7CisgICAgICAgICAgICB3aGlsZSAobW9udGggPCAwKSB7CisgICAgICAgICAgICAgICAgbW9udGggKz0gbW9udGhzSW5ZZWFyKC0tZXllYXIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1vbnRoID4gMCkgeworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIGludCBtb250aHNJblllYXIgPSBtb250aHNJblllYXIoZXllYXIpOworICAgICAgICAgICAgICAgIGlmIChtb250aCA8IG1vbnRoc0luWWVhcikgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytleWVhcjsKKyAgICAgICAgICAgICAgICBtb250aCAtPSBtb250aHNJblllYXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsb25nIGRheSA9IHN0YXJ0T2ZZZWFyKGV5ZWFyKTsKKworICAgICAgICBpZiAobW9udGggIT0gMCkgeworICAgICAgICAgICAgaWYgKGlzTGVhcFllYXIoZXllYXIpKSB7CisgICAgICAgICAgICAgICAgZGF5ICs9IExFQVBfTU9OVEhfU1RBUlRbbW9udGhdW3llYXJUeXBlKGV5ZWFyKV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRheSArPSBNT05USF9TVEFSVFttb250aF1beWVhclR5cGUoZXllYXIpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoaW50KSAoZGF5ICsgMzQ3OTk3KTsKKyAgICB9CisKKyAgICAvKgorICAgIHByaXZhdGUgc3RhdGljIENhbGVuZGFyRmFjdG9yeSBmYWN0b3J5OworICAgIHB1YmxpYyBzdGF0aWMgQ2FsZW5kYXJGYWN0b3J5IGZhY3RvcnkoKSB7CisgICAgICAgIGlmIChmYWN0b3J5ID09IG51bGwpIHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSBuZXcgQ2FsZW5kYXJGYWN0b3J5KCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyBDYWxlbmRhciBjcmVhdGUoVGltZVpvbmUgdHosIExvY2FsZSBsb2MpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBIZWJyZXdDYWxlbmRhcih0eiwgbG9jKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGZhY3RvcnlOYW1lKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkhlYnJldyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFjdG9yeTsKKyAgICB9CisgICAgKi8KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL0hlYnJld0hvbGlkYXkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0hlYnJld0hvbGlkYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNDFhMzk0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvSGVicmV3SG9saWRheS5qYXZhCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9IZWJyZXdIb2xpZGF5LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDQgMDE6MDM6MzkgJCAKKyAqICRSZXZpc2lvbjogMS41ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKKy8qKgorICogQGRyYWZ0IElDVSAyLjIKKyAqLworcHVibGljIGNsYXNzIEhlYnJld0hvbGlkYXkgZXh0ZW5kcyBIb2xpZGF5Cit7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGVicmV3Q2FsZW5kYXIgZ0NhbGVuZGFyID0gbmV3IEhlYnJld0NhbGVuZGFyKCk7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBob2xpZGF5IGRlZmluZWQgaW4gcmVmZXJlbmNlIHRvIHRoZSBIZWJyZXcgY2FsZW5kYXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaG9saWRheQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIEhlYnJld0hvbGlkYXkoaW50IG1vbnRoLCBpbnQgZGF0ZSwgU3RyaW5nIG5hbWUpCisgICAgeworICAgICAgICB0aGlzKG1vbnRoLCBkYXRlLCAxLCBuYW1lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBIZWJyZXdIb2xpZGF5KGludCBtb250aCwgaW50IGRhdGUsIGludCBsZW5ndGgsIFN0cmluZyBuYW1lKQorICAgIHsKKyAgICAgICAgc3VwZXIobmFtZSwgbnVsbCk7CisKKyAgICAgICAgU2ltcGxlRGF0ZVJ1bGUgcnVsZSA9IG5ldyBTaW1wbGVEYXRlUnVsZShtb250aCwgZGF0ZSk7CisgICAgICAgIHJ1bGUuc2V0Q2FsZW5kYXIoZ0NhbGVuZGFyKTsKKworICAgICAgICBzZXRSdWxlKHJ1bGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IFJPU0hfSEFTSEFOQUggICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLlRJU0hSSSwgIDEsICAyLCAgIlJvc2ggSGFzaGFuYWgiKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IEdFREFMSUFIICAgICAgICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLlRJU0hSSSwgIDMsICAgICAgIkZhc3Qgb2YgR2VkYWxpYWgiKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IFlPTV9LSVBQVVIgICAgICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLlRJU0hSSSwgMTAsICAgICAgIllvbSBLaXBwdXIiKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IFNVS0tPVCAgICAgICAgICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLlRJU0hSSSwgMTUsICA2LCAgIlN1a2tvdCIpOworCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEhlYnJld0hvbGlkYXkgSE9TSEFOQUhfUkFCQkFIID0gbmV3IEhlYnJld0hvbGlkYXkoSGVicmV3Q2FsZW5kYXIuVElTSFJJLCAyMSwgICAgICAiSG9zaGFuYWggUmFiYmFoIik7CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSGVicmV3SG9saWRheSBTSEVNSU5JX0FUWkVSRVQgPSBuZXcgSGVicmV3SG9saWRheShIZWJyZXdDYWxlbmRhci5USVNIUkksIDIyLCAgICAgICJTaGVtaW5pIEF0emVyZXQiKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IFNJTUNIQVRfVE9SQUggICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLlRJU0hSSSwgMjMsICAgICAgIlNpbWNoYXQgVG9yYWgiKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IEhBTlVLS0FIICAgICAgICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLktJU0xFViwgMjUsICAgICAgIkhhbnVra2FoIik7CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSGVicmV3SG9saWRheSBURVZFVF8xMCAgICAgICAgPSBuZXcgSGVicmV3SG9saWRheShIZWJyZXdDYWxlbmRhci5URVZFVCwgIDEwLCAgICAgICJGYXN0IG9mIFRldmV0IDEwIik7CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSGVicmV3SG9saWRheSBUVV9CU0hFVkFUICAgICAgPSBuZXcgSGVicmV3SG9saWRheShIZWJyZXdDYWxlbmRhci5TSEVWQVQsIDE1LCAgICAgICJUdSBCJ1NoZXZhdCIpOworCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEhlYnJld0hvbGlkYXkgRVNUSEVSICAgICAgICAgID0gbmV3IEhlYnJld0hvbGlkYXkoSGVicmV3Q2FsZW5kYXIuQURBUiwgICAxMywgICAgICAiRmFzdCBvZiBFc3RoZXIiKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IFBVUklNICAgICAgICAgICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLkFEQVIsICAgMTQsICAgICAgIlB1cmltIik7CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSGVicmV3SG9saWRheSBTSFVTSEFOX1BVUklNICAgPSBuZXcgSGVicmV3SG9saWRheShIZWJyZXdDYWxlbmRhci5BREFSLCAgIDE1LCAgICAgICJTaHVzaGFuIFB1cmltIik7CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSGVicmV3SG9saWRheSBQQVNTT1ZFUiAgICAgICAgPSBuZXcgSGVicmV3SG9saWRheShIZWJyZXdDYWxlbmRhci5OSVNBTiwgIDE1LCAgOCwgICJQYXNzb3ZlciIpOworCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEhlYnJld0hvbGlkYXkgWU9NX0hBU0hPQUggICAgID0gbmV3IEhlYnJld0hvbGlkYXkoSGVicmV3Q2FsZW5kYXIuTklTQU4sICAyNywgICAgICAiWW9tIEhhc2hvYWgiKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IFlPTV9IQVpJS0FST04gICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLklZQVIsICAgIDQsICAgICAgIllvbSBIYXppa2Fyb24iKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IFlPTV9IQUFUWk1BVVQgICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLklZQVIsICAgIDUsICAgICAgIllvbSBIYSdBdHptYXV0Iik7CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSGVicmV3SG9saWRheSBQRVNBQ0hfU0hFSU5JICAgPSBuZXcgSGVicmV3SG9saWRheShIZWJyZXdDYWxlbmRhci5JWUFSLCAgIDE0LCAgICAgICJQZXNhY2ggU2hlaW5pIik7CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSGVicmV3SG9saWRheSBMQUdfQk9NRVIgICAgICAgPSBuZXcgSGVicmV3SG9saWRheShIZWJyZXdDYWxlbmRhci5JWUFSLCAgIDE4LCAgICAgICJMYWIgQidPbWVyIik7CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSGVicmV3SG9saWRheSBZT01fWUVSVVNIQUxBWUlNID0gbmV3IEhlYnJld0hvbGlkYXkoSGVicmV3Q2FsZW5kYXIuSVlBUiwgICAyOCwgICAgICAiWW9tIFllcnVzaGFsYXlpbSIpOworCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEhlYnJld0hvbGlkYXkgU0hBVlVPVCAgICAgICAgID0gbmV3IEhlYnJld0hvbGlkYXkoSGVicmV3Q2FsZW5kYXIuU0lWQU4sICAgNiwgIDIsICAiU2hhdnVvdCIpOworCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEhlYnJld0hvbGlkYXkgVEFNTVVaXzE3ICAgICAgID0gbmV3IEhlYnJld0hvbGlkYXkoSGVicmV3Q2FsZW5kYXIuVEFNVVosICAxNywgICAgICAiRmFzdCBvZiBUYW1tdXogMTciKTsKKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBIZWJyZXdIb2xpZGF5IFRJU0hBX0JBViAgICAgICA9IG5ldyBIZWJyZXdIb2xpZGF5KEhlYnJld0NhbGVuZGFyLkFWLCAgICAgIDksICAgICAgIkZhc3Qgb2YgVGlzaGEgQidBdiIpOworCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEhlYnJld0hvbGlkYXkgU0VMSUhPVCAgICAgICAgID0gbmV3IEhlYnJld0hvbGlkYXkoSGVicmV3Q2FsZW5kYXIuRUxVTCwgICAyMSwgICAgICAiU2VsaWhvdCIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvSG9saWRheS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvSG9saWRheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmNTdjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9Ib2xpZGF5LmphdmEKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL0hvbGlkYXkuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNCAwMTowMzozOSAkIAorICogJFJldmlzaW9uOiAxLjYgJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmltcGwuSUNVTG9jYWxlRGF0YTsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogQW4gYWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIGEgaG9saWRheS4gIFRoaXMgY2xhc3Mgc2ltcGx5IGFkZHMKKyAqIGEgaG9saWRheSBuYW1lIHRvIHRoZSBEYXRlUnVsZSBpbnRlcmZhY2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBkYXRlCisgKiBvZiBhbiBldmVudC4KKyAqIEBkcmFmdCBJQ1UgMi4yCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBIb2xpZGF5IGltcGxlbWVudHMgRGF0ZVJ1bGUKK3sKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSG9saWRheVtdIGdldEhvbGlkYXlzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRIb2xpZGF5cyhMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSG9saWRheVtdIGdldEhvbGlkYXlzKExvY2FsZSBsb2NhbGUpCisgICAgeworICAgICAgICBIb2xpZGF5W10gcmVzdWx0ID0gbm9Ib2xpZGF5czsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSUNVTG9jYWxlRGF0YS5nZXRSZXNvdXJjZUJ1bmRsZSgiSG9saWRheUJ1bmRsZSIsIGxvY2FsZSk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IChIb2xpZGF5W10pIGJ1bmRsZS5nZXRPYmplY3QoImhvbGlkYXlzIik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IG9jY3VycmFuY2Ugb2YgdGhpcyBob2xpZGF5IG9uIG9yIGFmdGVyIHRoZSBnaXZlbiBkYXRlCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RhcnQgT25seSBob2xpZGF5cyBvbiBvciBhZnRlciB0aGlzIGRhdGUgYXJlIHJldHVybmVkLgorICAgICAqCisgICAgICogQHJldHVybiAgICAgIFRoZSBkYXRlIG9uIHdoaWNoIHRoaXMgaG9saWRheSBvY2N1cnMsIG9yIG51bGwgaWYgaXQKKyAgICAgKiAgICAgICAgICAgICAgZG9lcyBub3Qgb2NjdXIgb24gb3IgYWZ0ZXIgdGhlIHN0YXJ0IGRhdGUuCisgICAgICoKKyAgICAgKiBAc2VlICNmaXJzdEJldHdlZW4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBEYXRlIGZpcnN0QWZ0ZXIoRGF0ZSBzdGFydCkgeworICAgICAgICByZXR1cm4gcnVsZS5maXJzdEFmdGVyKHN0YXJ0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IG9jY3VycmFuY2Ugb2YgdGhpcyBob2xpZGF5IHRoYXQgaXMgb24gb3IgYWZ0ZXIKKyAgICAgKiB0aGUgZ2l2ZW4gc3RhcnQgZGF0ZSBhbmQgYmVmb3JlIHRoZSBnaXZlbiBlbmQgZGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGFydCBPbmx5IG9jY3VycmFuY2VzIG9uIG9yIGFmdGVyIHRoaXMgZGF0ZSBhcmUgcmV0dXJuZWQuCisgICAgICogQHBhcmFtIGVuZCAgIE9ubHkgb2NjdXJyYW5jZXMgYmVmb3JlIHRoaXMgZGF0ZSBhcmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgICAgVGhlIGRhdGUgb24gd2hpY2ggdGhpcyBldmVudCBvY2N1cnMsIG9yIG51bGwgaWYgaXQKKyAgICAgKiAgICAgICAgICAgICAgZG9lcyBub3Qgb2NjdXIgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcy4KKyAgICAgKgorICAgICAqIEBzZWUgI2ZpcnN0QWZ0ZXIKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBEYXRlIGZpcnN0QmV0d2VlbihEYXRlIHN0YXJ0LCBEYXRlIGVuZCkgeworICAgICAgICByZXR1cm4gcnVsZS5maXJzdEJldHdlZW4oc3RhcnQsIGVuZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHdoZXRoZXIgdGhpcyBob2xpZGF5IGZhbGxzIG9uIHRoZSBnaXZlbiBkYXRlLiAgVGhpcyBkb2VzCisgICAgICogPGVtPm5vdDwvZW0+IHRha2UgdGltZSBvZiBkYXkgaW50byBhY2NvdW50OyBpbnN0ZWFkIGl0IGNoZWNrcworICAgICAqIHdoZXRoZXIgdGhlIGhvbGlkYXkgYW5kIHRoZSBnaXZlbiBkYXRlIGFyZSBvbiB0aGUgc2FtZSBkYXkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0ZSAgVGhlIGRhdGUgdG8gY2hlY2suCisgICAgICogQHJldHVybiAgICAgIHRydWUgaWYgdGhpcyBob2xpZGF5IG9jY3VycyBvbiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNPbihEYXRlIGRhdGUpIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICIuaXNPbigiICsgZGF0ZS50b1N0cmluZygpICsgIik6Iik7CisgICAgICAgIHJldHVybiBydWxlLmlzT24oZGF0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgd2hldGhlciB0aGlzIGhvbGlkYXkgb2NjdXJzIGF0IGxlYXN0IG9uY2UgYmV0d2VlbiB0aGUgdHdvCisgICAgICogZGF0ZXMgZ2l2ZW4uCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0JldHdlZW4oRGF0ZSBzdGFydCwgRGF0ZSBlbmQpIHsKKyAgICAgICAgcmV0dXJuIHJ1bGUuaXNCZXR3ZWVuKHN0YXJ0LCBlbmQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIG5ldyBIb2xpZGF5IG9iamVjdC4gIFRoaXMgaXMgZm9yIHVzZSBieSBzdWJjbGFzc2VzIG9ubHkuCisgICAgICogVGhpcyBjb25zdHJ1Y3RzIGEgbmV3IGhvbGlkYXkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgZGF0ZSBydWxlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lICBUaGUgbmFtZSBvZiB0aGlzIGhvbGlkYXkuICBUaGUgZ2V0RGlzcGxheU5hbWUgbWV0aG9kCisgICAgICogICAgICAgICAgICAgIHVzZXMgdGhpcyBzdHJpbmcgYXMgYSBrZXkgdG8gbG9vayB1cCB0aGUgaG9saWRheSdzIG5hbWUgYQorICAgICAqICAgICAgICAgICAgICByZXNvdXJjZSBidW5kbGUgb2JqZWN0IG5hbWVkIEhvbGlkYXlCdW5kbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnVsZSAgVGhlIGRhdGUgcnVsZXMgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgd2hlbiB0aGlzIGhvbGlkYXkKKyAgICAgKiAgICAgICAgICAgICAgZmFsbHMuICBIb2xpZGF5J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIERhdGVSdWxlIGludGVmYWNlCisgICAgICogICAgICAgICAgICAgIHNpbXBseSBkZWxlZ2F0ZXMgdG8gdGhpcyBEYXRlUnVsZSBvYmplY3QuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgSG9saWRheShTdHJpbmcgbmFtZSwgRGF0ZVJ1bGUgcnVsZSkKKyAgICB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMucnVsZSA9IHJ1bGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgaG9saWRheSBpbiB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGRlZmF1bHQgbG9jYWxlCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkgeworICAgICAgICByZXR1cm4gZ2V0RGlzcGxheU5hbWUoTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgaG9saWRheSBpbiB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIHNwZWNpZmllZCBsb2NhbGUKKyAgICAgKiBUaGUgPGNvZGU+bmFtZTwvY29kZT4gcGFyYW1ldGVyIHBhc3NlZCB0byB0aGlzIG9iamVjdCdzIGNvbnN0cnVjdG9yIGlzIHVzZWQKKyAgICAgKiBhcyBhIGtleSB0byBsb29rIHVwIHRoZSBob2xpZGF5J3MgbG9jYWxpemVkIG5hbWUgaW4gYSBSZXNvdXJjZUJ1bmRsZSBvYmplY3QKKyAgICAgKiBuYW1lZCBIb2xpZGF5QnVuZGxlLgorICAgICAqCisgICAgICogQHBhcmFtIGxvYyAgIEEgbG9jYWxlIHNwZWNpZnlpbmcgdGhlIGxhbmd1YWdlIGluIHdoaWNoIHRoZSBuYW1lIGlzIGRlc2lyZWQuCisgICAgICoKKyAgICAgKiBAc2VlIFJlc291cmNlQnVuZGxlCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKExvY2FsZSBsb2NhbGUpCisgICAgeworICAgICAgICBTdHJpbmcgbmFtZSA9IHRoaXMubmFtZTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSUNVTG9jYWxlRGF0YS5nZXRSZXNvdXJjZUJ1bmRsZSgiSG9saWRheUJ1bmRsZSIsIGxvY2FsZSk7CisgICAgICAgICAgICBuYW1lID0gYnVuZGxlLmdldFN0cmluZyhuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBkZWZhdWx0IGRpc3BsYXkgbmFtZSBmb3IgIiArIG5hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIERhdGVSdWxlIGdldFJ1bGUoKSB7CisgICAgICAgIHJldHVybiBydWxlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UnVsZShEYXRlUnVsZSBydWxlKSB7CisgICAgICAgIHRoaXMucnVsZSA9IHJ1bGU7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgICAgICBuYW1lOworICAgIHByaXZhdGUgRGF0ZVJ1bGUgICAgcnVsZTsKKworICAgIHByaXZhdGUgc3RhdGljIEhvbGlkYXlbXSBub0hvbGlkYXlzID0ge307Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9Jc2xhbWljQ2FsZW5kYXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL0lzbGFtaWNDYWxlbmRhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmZDhkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9Jc2xhbWljQ2FsZW5kYXIuamF2YQpAQCAtMCwwICsxLDYzMSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3V0aWwvSXNsYW1pY0NhbGVuZGFyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjU6MzQgJCAKKyAqICRSZXZpc2lvbjogMS4xNSAkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXJBc3Ryb25vbWVyOworCisvKioKKyAqIDxjb2RlPklzbGFtaWNDYWxlbmRhcjwvY29kZT4gaXMgYSBzdWJjbGFzcyBvZiA8Y29kZT5DYWxlbmRhcjwvY29kZT4KKyAqIHRoYXQgdGhhdCBpbXBsZW1lbnRzIHRoZSBJc2xhbWljIGNpdmlsIGFuZCByZWxpZ2lvdXMgY2FsZW5kYXJzLiAgSXQKKyAqIGlzIHVzZWQgYXMgdGhlIGNpdmlsIGNhbGVuZGFyIGluIG1vc3Qgb2YgdGhlIEFyYWIgd29ybGQgYW5kIHRoZQorICogbGl0dXJnaWNhbCBjYWxlbmRhciBvZiB0aGUgSXNsYW1pYyBmYWl0aCB3b3JsZHdpZGUuICBUaGlzIGNhbGVuZGFyCisgKiBpcyBhbHNvIGtub3duIGFzIHRoZSAiSGlqcmkiIGNhbGVuZGFyLCBzaW5jZSBpdCBzdGFydHMgYXQgdGhlIHRpbWUKKyAqIG9mIE1vaGFtbWVkJ3MgZW1pZ3JhdGlvbiAob3IgImhpanJhIikgdG8gTWVkaW5haCBvbiBUaHVyc2RheSwgCisgKiBKdWx5IDE1LCA2MjIgQUQgKEp1bGlhbikuCisgKiA8cD4KKyAqIFRoZSBJc2xhbWljIGNhbGVuZGFyIGlzIHN0cmljdGx5IGx1bmFyLCBhbmQgdGh1cyBhbiBJc2xhbWljIHllYXIgb2YgdHdlbHZlCisgKiBsdW5hciBtb250aHMgZG9lcyBub3QgY29ycmVzcG9uZCB0byB0aGUgc29sYXIgeWVhciB1c2VkIGJ5IG1vc3Qgb3RoZXIKKyAqIGNhbGVuZGFyIHN5c3RlbXMsIGluY2x1ZGluZyB0aGUgR3JlZ29yaWFuLiAgQW4gSXNsYW1pYyB5ZWFyIGlzLCBvbiBhdmVyYWdlLAorICogYWJvdXQgMzU0IGRheXMgbG9uZywgc28gZWFjaCBzdWNjZXNzaXZlIElzbGFtaWMgeWVhciBzdGFydHMgYWJvdXQgMTEgZGF5cworICogZWFybGllciBpbiB0aGUgY29ycmVzcG9uZGluZyBHcmVnb3JpYW4geWVhci4KKyAqIDxwPgorICogRWFjaCBtb250aCBvZiB0aGUgY2FsZW5kYXIgc3RhcnRzIHdoZW4gdGhlIG5ldyBtb29uJ3MgY3Jlc2NlbnQgaXMgdmlzaWJsZQorICogYXQgc3Vuc2V0LiAgSG93ZXZlciwgaW4gb3JkZXIgdG8ga2VlcCB0aGUgdGltZSBmaWVsZHMgaW4gdGhpcyBjbGFzcworICogc3luY2hyb25pemVkIHdpdGggdGhvc2Ugb2YgdGhlIG90aGVyIGNhbGVuZGFycyBhbmQgd2l0aCBsb2NhbCBjbG9jayB0aW1lLAorICogd2UgdHJlYXQgZGF5cyBhbmQgbW9udGhzIGFzIGJlZ2lubmluZyBhdCBtaWRuaWdodCwKKyAqIHJvdWdobHkgNiBob3VycyBhZnRlciB0aGUgY29ycmVzcG9uZGluZyBzdW5zZXQuCisgKiA8cD4KKyAqIFRoZXJlIGFyZSB0d28gbWFpbiB2YXJpYW50cyBvZiB0aGUgSXNsYW1pYyBjYWxlbmRhciBpbiBleGlzdGVuY2UuICBUaGUgZmlyc3QKKyAqIGlzIHRoZSA8ZW0+Y2l2aWw8L2VtPiBjYWxlbmRhciwgd2hpY2ggdXNlcyBhIGZpeGVkIGN5Y2xlIG9mIGFsdGVybmF0aW5nIDI5LQorICogYW5kIDMwLWRheSBtb250aHMsIHdpdGggYSBsZWFwIGRheSBhZGRlZCB0byB0aGUgbGFzdCBtb250aCBvZiAxMSBvdXQgb2YKKyAqIGV2ZXJ5IDMwIHllYXJzLiAgVGhpcyBjYWxlbmRhciBpcyBlYXNpbHkgY2FsY3VsYXRlZCBhbmQgdGh1cyBwcmVkaWN0YWJsZSBpbgorICogYWR2YW5jZSwgc28gaXQgaXMgdXNlZCBhcyB0aGUgY2l2aWwgY2FsZW5kYXIgaW4gYSBudW1iZXIgb2YgQXJhYiBjb3VudHJpZXMuCisgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGEgbmV3bHktY3JlYXRlZCA8Y29kZT5Jc2xhbWljQ2FsZW5kYXI8L2NvZGU+CisgKiBvYmplY3QuCisgKiA8cD4KKyAqIFRoZSBJc2xhbWljIDxlbT5yZWxpZ2lvdXM8L2VtPiBjYWxlbmRhciwgaG93ZXZlciwgaXMgYmFzZWQgb24gdGhlIDxlbT5vYnNlcnZhdGlvbjwvZW0+CisgKiBvZiB0aGUgY3Jlc2NlbnQgbW9vbi4gIEl0IGlzIHRodXMgYWZmZWN0ZWQgYnkgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRoZQorICogb2JzZXJ2YXRpb25zIGFyZSBtYWRlLCBzZWFzb25hbCB2YXJpYXRpb25zIGluIHRoZSB0aW1lIG9mIHN1bnNldCwgdGhlCisgKiBlY2NlbnRyaWNpdGllcyBvZiB0aGUgbW9vbidzIG9yYml0LCBhbmQgZXZlbiB0aGUgd2VhdGhlciBhdCB0aGUgb2JzZXJ2YXRpb24KKyAqIHNpdGUuICBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gY2FsY3VsYXRlIGluIGFkdmFuY2UsIGFuZCBpdCBjYXVzZXMgdGhlCisgKiBzdGFydCBvZiBhIG1vbnRoIGluIHRoZSByZWxpZ2lvdXMgY2FsZW5kYXIgdG8gZGlmZmVyIGZyb20gdGhlIGNpdmlsIGNhbGVuZGFyCisgKiBieSB1cCB0byB0aHJlZSBkYXlzLgorICogPHA+CisgKiBVc2luZyBhc3Ryb25vbWljYWwgY2FsY3VsYXRpb25zIGZvciB0aGUgcG9zaXRpb24gb2YgdGhlIHN1biBhbmQgbW9vbiwgdGhlCisgKiBtb29uJ3MgaWxsdW1pbmF0aW9uLCBhbmQgb3RoZXIgZmFjdG9ycywgaXQgaXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSBzdGFydAorICogb2YgYSBsdW5hciBtb250aCB3aXRoIGEgZmFpcmx5IGhpZ2ggZGVncmVlIG9mIGNlcnRhaW50eS4gIEhvd2V2ZXIsIHRoZXNlCisgKiBjYWxjdWxhdGlvbnMgYXJlIGV4dHJlbWVseSBjb21wbGljYXRlZCBhbmQgdGh1cyBzbG93LCBzbyBtb3N0IGFsZ29yaXRobXMsCisgKiBpbmNsdWRpbmcgdGhlIG9uZSB1c2VkIGhlcmUsIGFyZSBvbmx5IGFwcHJveGltYXRpb25zIG9mIHRoZSB0cnVlIGFzdHJvbmljYWwKKyAqIGNhbGN1bGF0aW9ucy4gIEF0IHByZXNlbnQsIHRoZSBhcHByb3hpbWF0aW9ucyB1c2VkIGluIHRoaXMgY2xhc3MgYXJlIGZhaXJseQorICogc2ltcGxpc3RpYzsgdGhleSB3aWxsIGJlIGltcHJvdmVkIGluIGxhdGVyIHZlcnNpb25zIG9mIHRoZSBjb2RlLgorICogPHA+CisgKiBUaGUge0BsaW5rICNzZXRDaXZpbCBzZXRDaXZpbH0gbWV0aG9kIGRldGVybWluZXMKKyAqIHdoaWNoIGFwcHJvYWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdGFydCBvZiBhIG1vbnRoLiAgQnkgZGVmYXVsdCwgdGhlCisgKiBmaXhlZC1jeWNsZSBjaXZpbCBjYWxlbmRhciBpcyB1c2VkLiAgSG93ZXZlciwgaWYgPGNvZGU+c2V0Q2l2aWwoZmFsc2UpPC9jb2RlPgorICogaXMgY2FsbGVkLCBhbiBhcHByb3hpbWF0aW9uIG9mIHRoZSB0cnVlIGx1bmFyIGNhbGVuZGFyIHdpbGwgYmUgdXNlZC4KKyAqCisgKiBAc2VlIGNvbS5pYm0uaWN1LnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIKKyAqCisgKiBAYXV0aG9yIExhdXJhIFdlcm5lcgorICogQGF1dGhvciBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBjbGFzcyBJc2xhbWljQ2FsZW5kYXIgZXh0ZW5kcyBDYWxlbmRhciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29weXJpZ2h0ID0gIkNvcHlyaWdodCBcdTAwYTkgMTk5Ny0xOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDb25zdGFudHMuLi4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgTXVoYXJyYW0sIHRoZSAxc3QgbW9udGggb2YgdGhlIElzbGFtaWMgeWVhci4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1VSEFSUkFNID0gMDsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBTYWZhciwgdGhlIDJuZCBtb250aCBvZiB0aGUgSXNsYW1pYyB5ZWFyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0FGQVIgPSAxOworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIFJhYmknIGFsLWF3d2FsIChvciBSYWJpJyBJKSwgdGhlIDNyZCBtb250aCBvZiB0aGUgSXNsYW1pYyB5ZWFyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkFCSV8xID0gMjsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBSYWJpJyBhbC10aGFuaSBvciAoUmFiaScgSUkpLCB0aGUgNHRoIG1vbnRoIG9mIHRoZSBJc2xhbWljIHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSQUJJXzIgPSAzOworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIEp1bWFkYSBhbC1hd3dhbCBvciAoSnVtYWRhIEkpLCB0aGUgNXRoIG1vbnRoIG9mIHRoZSBJc2xhbWljIHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBKVU1BREFfMSA9IDQ7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgSnVtYWRhIGFsLXRoYW5pIG9yIChKdW1hZGEgSUkpLCB0aGUgNnRoIG1vbnRoIG9mIHRoZSBJc2xhbWljIHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBKVU1BREFfMiA9IDU7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgUmFqYWIsIHRoZSA3dGggbW9udGggb2YgdGhlIElzbGFtaWMgeWVhci4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJBSkFCID0gNjsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBTaGEnYmFuLCB0aGUgOHRoIG1vbnRoIG9mIHRoZSBJc2xhbWljIHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSEFCQU4gPSA3OworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIFJhbWFkYW4sIHRoZSA5dGggbW9udGggb2YgdGhlIElzbGFtaWMgeWVhci4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJBTUFEQU4gPSA4OworCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIFNoYXd3YWwsIHRoZSAxMHRoIG1vbnRoIG9mIHRoZSBJc2xhbWljIHllYXIuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSEFXV0FMID0gOTsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IGZvciBEaHUgYWwtUWknZGFoLCB0aGUgMTF0aCBtb250aCBvZiB0aGUgSXNsYW1pYyB5ZWFyLiAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAgCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREhVX0FMX1FJREFIID0gMTA7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgRGh1IGFsLUhpamphaCwgdGhlIDEydGggbW9udGggb2YgdGhlIElzbGFtaWMgeWVhci4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERIVV9BTF9ISUpKQUggPSAxMTsKKworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBISUpSQV9NSUxMSVMgPSAtNDI1MjE1ODcyMDAwMDBMOyAgICAvLyA3LzE2LzYyMiBBRCAwMDowMAorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQ29uc3RydWN0b3JzLi4uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgZGVmYXVsdCA8Y29kZT5Jc2xhbWljQ2FsZW5kYXI8L2NvZGU+IHVzaW5nIHRoZSBjdXJyZW50IHRpbWUKKyAgICAgKiBpbiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgd2l0aCB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIElzbGFtaWNDYWxlbmRhcigpCisgICAgeworICAgICAgICB0aGlzKFRpbWVab25lLmdldERlZmF1bHQoKSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiA8Y29kZT5Jc2xhbWljQ2FsZW5kYXI8L2NvZGU+IGJhc2VkIG9uIHRoZSBjdXJyZW50IHRpbWUKKyAgICAgKiBpbiB0aGUgZ2l2ZW4gdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBwYXJhbSB6b25lIHRoZSBnaXZlbiB0aW1lIHpvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIElzbGFtaWNDYWxlbmRhcihUaW1lWm9uZSB6b25lKQorICAgIHsKKyAgICAgICAgdGhpcyh6b25lLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIDxjb2RlPklzbGFtaWNDYWxlbmRhcjwvY29kZT4gYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZQorICAgICAqIGluIHRoZSBkZWZhdWx0IHRpbWUgem9uZSB3aXRoIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYUxvY2FsZSB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBJc2xhbWljQ2FsZW5kYXIoTG9jYWxlIGFMb2NhbGUpCisgICAgeworICAgICAgICB0aGlzKFRpbWVab25lLmdldERlZmF1bHQoKSwgYUxvY2FsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiA8Y29kZT5Jc2xhbWljQ2FsZW5kYXI8L2NvZGU+IGJhc2VkIG9uIHRoZSBjdXJyZW50IHRpbWUKKyAgICAgKiBpbiB0aGUgZ2l2ZW4gdGltZSB6b25lIHdpdGggdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB6b25lIHRoZSBnaXZlbiB0aW1lIHpvbmUuCisgICAgICogQHBhcmFtIGFMb2NhbGUgdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgSXNsYW1pY0NhbGVuZGFyKFRpbWVab25lIHpvbmUsIExvY2FsZSBhTG9jYWxlKQorICAgIHsKKyAgICAgICAgc3VwZXIoem9uZSwgYUxvY2FsZSk7CisgICAgICAgIHNldFRpbWVJbk1pbGxpcyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiA8Y29kZT5Jc2xhbWljQ2FsZW5kYXI8L2NvZGU+IHdpdGggdGhlIGdpdmVuIGRhdGUgc2V0CisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQHBhcmFtIGRhdGUgICAgICBUaGUgZGF0ZSB0byB3aGljaCB0aGUgbmV3IGNhbGVuZGFyIGlzIHNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgSXNsYW1pY0NhbGVuZGFyKERhdGUgZGF0ZSkgeworICAgICAgICBzdXBlcihUaW1lWm9uZS5nZXREZWZhdWx0KCksIExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgICAgICB0aGlzLnNldFRpbWUoZGF0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiA8Y29kZT5Jc2xhbWljQ2FsZW5kYXI8L2NvZGU+IHdpdGggdGhlIGdpdmVuIGRhdGUgc2V0CisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQHBhcmFtIHllYXIgdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSB7QGxpbmsgI1lFQVIgWUVBUn0gdGltZSBmaWVsZCBpbiB0aGUgY2FsZW5kYXIuCisgICAgICogQHBhcmFtIG1vbnRoIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUge0BsaW5rICNNT05USCBNT05USH0gdGltZSBmaWVsZCBpbiB0aGUgY2FsZW5kYXIuCisgICAgICogICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgbW9udGggdmFsdWUgaXMgMC1iYXNlZC4gZS5nLiwgMCBmb3IgTXVoYXJyYW0uCisgICAgICogQHBhcmFtIGRhdGUgdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSB7QGxpbmsgI0RBVEUgREFURX0gdGltZSBmaWVsZCBpbiB0aGUgY2FsZW5kYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIElzbGFtaWNDYWxlbmRhcihpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF0ZSkKKyAgICB7CisgICAgICAgIHN1cGVyKFRpbWVab25lLmdldERlZmF1bHQoKSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIHRoaXMuc2V0KENhbGVuZGFyLllFQVIsIHllYXIpOworICAgICAgICB0aGlzLnNldChDYWxlbmRhci5NT05USCwgbW9udGgpOworICAgICAgICB0aGlzLnNldChDYWxlbmRhci5EQVRFLCBkYXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIDxjb2RlPklzbGFtaWNDYWxlbmRhcjwvY29kZT4gd2l0aCB0aGUgZ2l2ZW4gZGF0ZQorICAgICAqIGFuZCB0aW1lIHNldCBmb3IgdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQHBhcmFtIHllYXIgIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUge0BsaW5rICNZRUFSIFlFQVJ9IHRpbWUgZmllbGQgaW4gdGhlIGNhbGVuZGFyLgorICAgICAqIEBwYXJhbSBtb250aCB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIHtAbGluayAjTU9OVEggTU9OVEh9IHRpbWUgZmllbGQgaW4gdGhlIGNhbGVuZGFyLgorICAgICAqICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIG1vbnRoIHZhbHVlIGlzIDAtYmFzZWQuIGUuZy4sIDAgZm9yIE11aGFycmFtLgorICAgICAqIEBwYXJhbSBkYXRlICB0aGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIHtAbGluayAjREFURSBEQVRFfSB0aW1lIGZpZWxkIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBAcGFyYW0gaG91ciAgdGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSB7QGxpbmsgI0hPVVJfT0ZfREFZIEhPVVJfT0ZfREFZfSB0aW1lIGZpZWxkCisgICAgICogICAgICAgICAgICAgIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBAcGFyYW0gbWludXRlIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUge0BsaW5rICNNSU5VVEUgTUlOVVRFfSB0aW1lIGZpZWxkCisgICAgICogICAgICAgICAgICAgIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBAcGFyYW0gc2Vjb25kIHRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUge0BsaW5rICNTRUNPTkQgU0VDT05EfSB0aW1lIGZpZWxkCisgICAgICogICAgICAgICAgICAgIGluIHRoZSBjYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgSXNsYW1pY0NhbGVuZGFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXRlLCBpbnQgaG91ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbnV0ZSwgaW50IHNlY29uZCkKKyAgICB7CisgICAgICAgIHN1cGVyKFRpbWVab25lLmdldERlZmF1bHQoKSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIHRoaXMuc2V0KENhbGVuZGFyLllFQVIsIHllYXIpOworICAgICAgICB0aGlzLnNldChDYWxlbmRhci5NT05USCwgbW9udGgpOworICAgICAgICB0aGlzLnNldChDYWxlbmRhci5EQVRFLCBkYXRlKTsKKyAgICAgICAgdGhpcy5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIGhvdXIpOworICAgICAgICB0aGlzLnNldChDYWxlbmRhci5NSU5VVEUsIG1pbnV0ZSk7CisgICAgICAgIHRoaXMuc2V0KENhbGVuZGFyLlNFQ09ORCwgc2Vjb25kKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBvYmplY3QgdXNlcyB0aGUgZml4ZWQtY3ljbGUgSXNsYW1pYyBjaXZpbCBjYWxlbmRhcgorICAgICAqIG9yIGFuIGFwcHJveGltYXRpb24gb2YgdGhlIHJlbGlnaW91cywgYXN0cm9ub21pY2FsIGNhbGVuZGFyLgorICAgICAqCisgICAgICogQHBhcmFtIGJlQ2l2aWwgICA8Y29kZT50cnVlPC9jb2RlPiB0byB1c2UgdGhlIGNpdmlsIGNhbGVuZGFyLAorICAgICAqICAgICAgICAgICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IHRvIHVzZSB0aGUgYXN0cm9ub21pY2FsIGNhbGVuZGFyLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENpdmlsKGJvb2xlYW4gYmVDaXZpbCkKKyAgICB7CisgICAgICAgIGlmIChjaXZpbCAhPSBiZUNpdmlsKSB7CisgICAgICAgICAgICAvLyBUaGUgZmllbGRzIG9mIHRoZSBjYWxlbmRhciB3aWxsIGJlY29tZSBpbnZhbGlkLCBiZWNhdXNlIHRoZSBjYWxlbmRhcgorICAgICAgICAgICAgLy8gcnVsZXMgYXJlIGRpZmZlcmVudAorICAgICAgICAgICAgbG9uZyBtID0gZ2V0VGltZUluTWlsbGlzKCk7CisgICAgICAgICAgICBjaXZpbCA9IGJlQ2l2aWw7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgc2V0VGltZUluTWlsbGlzKG0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBvYmplY3QgaXMgdXNpbmcgdGhlIGZpeGVkLWN5Y2xlIGNpdmlsCisgICAgICogY2FsZW5kYXIsIG9yIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB1c2luZyB0aGUgcmVsaWdpb3VzLCBhc3Ryb25vbWljYWwKKyAgICAgKiBjYWxlbmRhci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0NpdmlsKCkgeworICAgICAgICByZXR1cm4gY2l2aWw7CisgICAgfQorICAgIAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIE1pbmltdW0gLyBNYXhpbXVtIGFjY2VzcyBmdW5jdGlvbnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU1JVFNbXVtdID0geworICAgICAgICAvLyBNaW5pbXVtICBHcmVhdGVzdCAgICBMZWFzdCAgTWF4aW11bQorICAgICAgICAvLyAgICAgICAgICAgTWluaW11bSAgTWF4aW11bQorICAgICAgICB7ICAgICAgICAwLCAgICAgICAgMCwgICAgICAgMCwgICAgICAgMCB9LCAvLyBFUkEKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsIDUwMDAwMDAsIDUwMDAwMDAgfSwgLy8gWUVBUgorICAgICAgICB7ICAgICAgICAwLCAgICAgICAgMCwgICAgICAxMSwgICAgICAxMSB9LCAvLyBNT05USAorICAgICAgICB7ICAgICAgICAxLCAgICAgICAgMSwgICAgICA1MSwgICAgICA1MiB9LCAvLyBXRUVLX09GX1lFQVIKKyAgICAgICAgeyAgICAgICAgMCwgICAgICAgIDAsICAgICAgIDUsICAgICAgIDYgfSwgLy8gV0VFS19PRl9NT05USAorICAgICAgICB7ICAgICAgICAxLCAgICAgICAgMSwgICAgICAyOSwgICAgICAzMCB9LCAvLyBEQVlfT0ZfTU9OVEgKKyAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsICAgICAzNTQsICAgICAzNTUgfSwgLy8gREFZX09GX1lFQVIKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gREFZX09GX1dFRUsKKyAgICAgICAgeyAgICAgICAtMSwgICAgICAgLTEsICAgICAgIDQsICAgICAgIDUgfSwgLy8gREFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gQU1fUE0KKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gSE9VUgorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBIT1VSX09GX0RBWQorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBNSU5VVEUKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gU0VDT05ECisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIE1JTExJU0VDT05ECisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIFpPTkVfT0ZGU0VUCisgICAgICAgIHsvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL30sIC8vIERTVF9PRkZTRVQKKyAgICAgICAgeyAtNTAwMDAwMSwgLTUwMDAwMDEsIDUwMDAwMDEsIDUwMDAwMDEgfSwgLy8gWUVBUl9XT1kKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gRE9XX0xPQ0FMCisgICAgICAgIHsgLTUwMDAwMDAsIC01MDAwMDAwLCA1MDAwMDAwLCA1MDAwMDAwIH0sIC8vIEVYVEVOREVEX1lFQVIKKyAgICAgICAgey8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovfSwgLy8gSlVMSUFOX0RBWQorICAgICAgICB7LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi99LCAvLyBNSUxMSVNFQ09ORFNfSU5fREFZCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0TGltaXQoaW50IGZpZWxkLCBpbnQgbGltaXRUeXBlKSB7CisgICAgICAgIHJldHVybiBMSU1JVFNbZmllbGRdW2xpbWl0VHlwZV07CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQXNzb3J0ZWQgY2FsY3VsYXRpb24gdXRpbGl0aWVzCisgICAgLy8KKworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIGRheSBvZiB0aGUgd2VlayBmb3IgYSBnaXZlbiBkYXkKKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXkgICBUaGUgIyBvZiBkYXlzIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgSXNsYW1pYyBjYWxlbmRhci4KKyAgICAgKi8KKyAgICAvLyBwcml2YXRlIGFuZCB1bmNhbGxlZCwgcGVyaGFwcyBub3QgdXNlZCB5ZXQ/CisgICAgLy8vQ0xPVkVSOk9GRgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBhYnNvbHV0ZURheVRvRGF5T2ZXZWVrKGxvbmcgZGF5KQorICAgIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkYXkgb2YgdGhlIHdlZWsuCisgICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgdGhlIGVwb2NoIHdhcyBhIFRodXJzZGF5LgorICAgICAgICBpbnQgZGF5T2ZXZWVrID0gKGludCkoZGF5ICsgVEhVUlNEQVkpICUgNyArIFNVTkRBWTsKKyAgICAgICAgaWYgKGRheU9mV2VlayA8IDApIHsKKyAgICAgICAgICAgIGRheU9mV2VlayArPSA3OworICAgICAgICB9CisgICAgICAgIHJldHVybiBkYXlPZldlZWs7CisgICAgfQorICAgIC8vL0NMT1ZFUjpPTgorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB5ZWFyIGlzIGEgbGVhcCB5ZWFyIGluIHRoZSBJc2xhbWljIGNpdmlsIGNhbGVuZGFyCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbiBjaXZpbExlYXBZZWFyKGludCB5ZWFyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgxNCArIDExICogeWVhcikgJSAzMCA8IDExOworICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBkYXkgIyBvbiB3aGljaCB0aGUgZ2l2ZW4geWVhciBzdGFydHMuICBEYXlzIGFyZSBjb3VudGVkCisgICAgICogZnJvbSB0aGUgSGlqcmkgZXBvY2gsIG9yaWdpbiAwLgorICAgICAqLworICAgIHByaXZhdGUgbG9uZyB5ZWFyU3RhcnQoaW50IHllYXIpIHsKKyAgICAgICAgaWYgKGNpdmlsKSB7CisgICAgICAgICAgICByZXR1cm4gKHllYXItMSkqMzU0ICsgKGxvbmcpTWF0aC5mbG9vcigoMysxMSp5ZWFyKS8zMC4wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlTW9udGhTdGFydCgxMiooeWVhci0xKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBkYXkgIyBvbiB3aGljaCB0aGUgZ2l2ZW4gbW9udGggc3RhcnRzLiAgRGF5cyBhcmUgY291bnRlZAorICAgICAqIGZyb20gdGhlIEhpanJpIGVwb2NoLCBvcmlnaW4gMC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB5ZWFyICBUaGUgaGlqcmkgeWVhcgorICAgICAqIEBwYXJhbSB5ZWFyICBUaGUgaGlqcmkgbW9udGgsIDAtYmFzZWQKKyAgICAgKi8KKyAgICBwcml2YXRlIGxvbmcgbW9udGhTdGFydChpbnQgeWVhciwgaW50IG1vbnRoKSB7CisgICAgICAgIGlmIChjaXZpbCkgeworICAgICAgICAgICAgcmV0dXJuIChsb25nKU1hdGguY2VpbCgyOS41Km1vbnRoKQorICAgICAgICAgICAgICAgICAgICArICh5ZWFyLTEpKjM1NCArIChsb25nKU1hdGguZmxvb3IoKDMrMTEqeWVhcikvMzAuMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZU1vbnRoU3RhcnQoMTIqKHllYXItMSkgKyBtb250aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogRmluZCB0aGUgZGF5IG51bWJlciBvbiB3aGljaCBhIHBhcnRpY3VsYXIgbW9udGggb2YgdGhlIHRydWUvbHVuYXIKKyAgICAgKiBJc2xhbWljIGNhbGVuZGFyIHN0YXJ0cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtb250aCBUaGUgbW9udGggaW4gcXVlc3Rpb24sIG9yaWdpbiAwIGZyb20gdGhlIEhpanJpIGVwb2NoCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBkYXkgbnVtYmVyIG9uIHdoaWNoIHRoZSBnaXZlbiBtb250aCBzdGFydHMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyB0cnVlTW9udGhTdGFydChsb25nIG1vbnRoKQorICAgIHsKKyAgICAgICAgbG9uZyBzdGFydCA9IGNhY2hlLmdldChtb250aCk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IENhbGVuZGFyQ2FjaGUuRU1QVFkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE1ha2UgYSBndWVzcyBhdCB3aGVuIHRoZSBtb250aCBzdGFydGVkLCB1c2luZyB0aGUgYXZlcmFnZSBsZW5ndGgKKyAgICAgICAgICAgIGxvbmcgb3JpZ2luID0gSElKUkFfTUlMTElTIAorICAgICAgICAgICAgICAgICAgICAgICAgKyAobG9uZylNYXRoLmZsb29yKG1vbnRoICogQ2FsZW5kYXJBc3Ryb25vbWVyLlNZTk9ESUNfTU9OVEggLSAxKSAqIE9ORV9EQVk7CisKKyAgICAgICAgICAgIGRvdWJsZSBhZ2UgPSBtb29uQWdlKG9yaWdpbik7CisKKyAgICAgICAgICAgIGlmIChtb29uQWdlKG9yaWdpbikgPj0gMCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBtb250aCBoYXMgYWxyZWFkeSBzdGFydGVkCisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBvcmlnaW4gLT0gT05FX0RBWTsKKyAgICAgICAgICAgICAgICAgICAgYWdlID0gbW9vbkFnZShvcmlnaW4pOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKGFnZSA+PSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFByZWNlZGluZyBtb250aCBoYXMgbm90IGVuZGVkIHlldC4KKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbiArPSBPTkVfREFZOworICAgICAgICAgICAgICAgICAgICBhZ2UgPSBtb29uQWdlKG9yaWdpbik7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoYWdlIDwgMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXJ0ID0gKG9yaWdpbiAtIEhJSlJBX01JTExJUykgLyBPTkVfREFZICsgMTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FjaGUucHV0KG1vbnRoLCBzdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgImFnZSIgb2YgdGhlIG1vb24gYXQgdGhlIGdpdmVuIHRpbWU7IHRoaXMgaXMgdGhlIGRpZmZlcmVuY2UKKyAgICAgKiBpbiBlY2xpcHRpYyBsYXRpdHVkZSBiZXR3ZWVuIHRoZSBtb29uIGFuZCB0aGUgc3VuLiAgVGhpcyBtZXRob2Qgc2ltcGx5CisgICAgICogY2FsbHMgQ2FsZW5kYXJBc3Ryb25vbWVyLm1vb25BZ2UsIGNvbnZlcnRzIHRvIGRlZ3JlZXMsIAorICAgICAqIGFuZCBhZGp1c3RzIHRoZSByZXN1bHR0byBiZSBpbiB0aGUgcmFuZ2UgWy0xODAsIDE4MF0uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGltZSAgVGhlIHRpbWUgYXQgd2hpY2ggdGhlIG1vb24ncyBhZ2UgaXMgZGVzaXJlZCwKKyAgICAgKiAgICAgICAgICAgICAgaW4gbWlsbGlzIHNpbmNlIDEvMS8xOTcwLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBkb3VibGUgbW9vbkFnZShsb25nIHRpbWUpCisgICAgeworICAgICAgICBkb3VibGUgYWdlID0gMDsKKyAgICAgICAgCisgICAgICAgIHN5bmNocm9uaXplZChhc3RybykgeworICAgICAgICAgICAgYXN0cm8uc2V0VGltZSh0aW1lKTsKKyAgICAgICAgICAgIGFnZSA9IGFzdHJvLmdldE1vb25BZ2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb252ZXJ0IHRvIGRlZ3JlZXMgYW5kIG5vcm1hbGl6ZS4uLgorICAgICAgICBhZ2UgPSBhZ2UgKiAxODAgLyBNYXRoLlBJOworICAgICAgICBpZiAoYWdlID4gMTgwKSB7CisgICAgICAgICAgICBhZ2UgPSBhZ2UgLSAzNjA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYWdlOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEludGVybmFsIGRhdGEuLi4uCisgICAgLy8KKyAgICAKKyAgICAvLyBBbmQgYW4gQXN0cm9ub21lciBvYmplY3QgZm9yIHRoZSBtb29uIGFnZSBjYWxjdWxhdGlvbnMKKyAgICBwcml2YXRlIHN0YXRpYyBDYWxlbmRhckFzdHJvbm9tZXIgYXN0cm8gPSBuZXcgQ2FsZW5kYXJBc3Ryb25vbWVyKCk7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgQ2FsZW5kYXJDYWNoZSBjYWNoZSA9IG5ldyBDYWxlbmRhckNhY2hlKCk7CisgICAgCisgICAgLyoqCisgICAgICogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBvYmplY3QgdXNlcyB0aGUgZml4ZWQtY3ljbGUgSXNsYW1pYyBjaXZpbCBjYWxlbmRhciwKKyAgICAgKiBhbmQgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGl0IGFwcHJveGltYXRlcyB0aGUgdHJ1ZSByZWxpZ2lvdXMgY2FsZW5kYXIgdXNpbmcKKyAgICAgKiBhc3Ryb25vbWljYWwgY2FsY3VsYXRpb25zIGZvciB0aGUgdGltZSBvZiB0aGUgbmV3IG1vb24uCisgICAgICoKKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGNpdmlsID0gdHJ1ZTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIENhbGVuZGFyIGZyYW1ld29yaworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBsZW5ndGggKGluIGRheXMpIG9mIHRoZSBnaXZlbiBtb250aC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB5ZWFyICBUaGUgaGlqcmkgeWVhcgorICAgICAqIEBwYXJhbSB5ZWFyICBUaGUgaGlqcmkgbW9udGgsIDAtYmFzZWQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUdldE1vbnRoTGVuZ3RoKGludCBleHRlbmRlZFllYXIsIGludCBtb250aCkgeworCisgICAgICAgIGludCBsZW5ndGggPSAwOworICAgICAgICAKKyAgICAgICAgaWYgKGNpdmlsKSB7CisgICAgICAgICAgICBsZW5ndGggPSAyOSArIChtb250aCsxKSAlIDI7CisgICAgICAgICAgICBpZiAobW9udGggPT0gREhVX0FMX0hJSkpBSCAmJiBjaXZpbExlYXBZZWFyKGV4dGVuZGVkWWVhcikpIHsKKyAgICAgICAgICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vbnRoID0gMTIqKGV4dGVuZGVkWWVhci0xKSArIG1vbnRoOworICAgICAgICAgICAgbGVuZ3RoID0gKGludCkoIHRydWVNb250aFN0YXJ0KG1vbnRoKzEpIC0gdHJ1ZU1vbnRoU3RhcnQobW9udGgpICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBnaXZlbiBJc2xhbWljIHllYXIKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgaW50IGhhbmRsZUdldFllYXJMZW5ndGgoaW50IGV4dGVuZGVkWWVhcikgeworICAgICAgICBpZiAoY2l2aWwpIHsKKyAgICAgICAgICAgIHJldHVybiAzNTQgKyAoY2l2aWxMZWFwWWVhcihleHRlbmRlZFllYXIpID8gMSA6IDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IG1vbnRoID0gMTIqKGV4dGVuZGVkWWVhci0xKTsKKyAgICAgICAgICAgIHJldHVybiAoaW50KSh0cnVlTW9udGhTdGFydChtb250aCArIDEyKSAtIHRydWVNb250aFN0YXJ0KG1vbnRoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGZyb20gZmllbGQgdmFsdWVzIHRvIG1pbGxpc2Vjb25kcy4uLi4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFJldHVybiBKRCBvZiBzdGFydCBvZiBnaXZlbiBtb250aC95ZWFyCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVDb21wdXRlTW9udGhTdGFydChpbnQgZXllYXIsIGludCBtb250aCwgYm9vbGVhbiB1c2VNb250aCkgeworICAgICAgICByZXR1cm4gKGludCkgbW9udGhTdGFydChleWVhciwgbW9udGgpICsgMTk0ODQzOTsKKyAgICB9ICAgIAorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGZyb20gbWlsbGlzZWNvbmRzIHRvIGZpZWxkIHZhbHVlcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVHZXRFeHRlbmRlZFllYXIoKSB7CisgICAgICAgIGludCB5ZWFyOworICAgICAgICBpZiAobmV3ZXJGaWVsZChFWFRFTkRFRF9ZRUFSLCBZRUFSKSA9PSBFWFRFTkRFRF9ZRUFSKSB7CisgICAgICAgICAgICB5ZWFyID0gaW50ZXJuYWxHZXQoRVhURU5ERURfWUVBUiwgMSk7IC8vIERlZmF1bHQgdG8geWVhciAxCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB5ZWFyID0gaW50ZXJuYWxHZXQoWUVBUiwgMSk7IC8vIERlZmF1bHQgdG8geWVhciAxCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHllYXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgQ2FsZW5kYXIgdG8gY29tcHV0ZSBzZXZlcmFsIGZpZWxkcyBzcGVjaWZpYyB0byB0aGUgSXNsYW1pYworICAgICAqIGNhbGVuZGFyIHN5c3RlbS4gIFRoZXNlIGFyZToKKyAgICAgKgorICAgICAqIDx1bD48bGk+RVJBCisgICAgICogPGxpPllFQVIKKyAgICAgKiA8bGk+TU9OVEgKKyAgICAgKiA8bGk+REFZX09GX01PTlRICisgICAgICogPGxpPkRBWV9PRl9ZRUFSCisgICAgICogPGxpPkVYVEVOREVEX1lFQVI8L3VsPgorICAgICAqIAorICAgICAqIFRoZSBEQVlfT0ZfV0VFSyBhbmQgRE9XX0xPQ0FMIGZpZWxkcyBhcmUgYWxyZWFkeSBzZXQgd2hlbiB0aGlzCisgICAgICogbWV0aG9kIGlzIGNhbGxlZC4gVGhlIGdldEdyZWdvcmlhblh4eCgpIG1ldGhvZHMgcmV0dXJuIEdyZWdvcmlhbgorICAgICAqIGNhbGVuZGFyIGVxdWl2YWxlbnRzIGZvciB0aGUgZ2l2ZW4gSnVsaWFuIGRheS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDb21wdXRlRmllbGRzKGludCBqdWxpYW5EYXkpIHsKKyAgICAgICAgaW50IHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoLCBkYXlPZlllYXI7CisgICAgICAgIGxvbmcgbW9udGhTdGFydDsKKyAgICAgICAgbG9uZyBkYXlzID0ganVsaWFuRGF5IC0gMTk0ODQ0MDsKKworICAgICAgICBpZiAoY2l2aWwpIHsKKyAgICAgICAgICAgIC8vIFVzZSB0aGUgY2l2aWwgY2FsZW5kYXIgYXBwcm94aW1hdGlvbiwgd2hpY2ggaXMganVzdCBhcml0aG1ldGljCisgICAgICAgICAgICB5ZWFyICA9IChpbnQpTWF0aC5mbG9vciggKDMwICogZGF5cyArIDEwNjQ2KSAvIDEwNjMxLjAgKTsKKyAgICAgICAgICAgIG1vbnRoID0gKGludClNYXRoLmNlaWwoKGRheXMgLSAyOSAtIHllYXJTdGFydCh5ZWFyKSkgLyAyOS41ICk7CisgICAgICAgICAgICBtb250aCA9IE1hdGgubWluKG1vbnRoLCAxMSk7CisgICAgICAgICAgICBtb250aFN0YXJ0ID0gbW9udGhTdGFydCh5ZWFyLCBtb250aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBHdWVzcyBhdCB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgZnVsbCBtb250aHMgc2luY2UgdGhlIGVwb2NoCisgICAgICAgICAgICBpbnQgbW9udGhzID0gKGludClNYXRoLmZsb29yKGRheXMgLyBDYWxlbmRhckFzdHJvbm9tZXIuU1lOT0RJQ19NT05USCk7CisKKyAgICAgICAgICAgIG1vbnRoU3RhcnQgPSAobG9uZylNYXRoLmZsb29yKG1vbnRocyAqIENhbGVuZGFyQXN0cm9ub21lci5TWU5PRElDX01PTlRIIC0gMSk7CisKKyAgICAgICAgICAgIGlmICggZGF5cyAtIG1vbnRoU3RhcnQgPj0gMjggJiYgbW9vbkFnZShpbnRlcm5hbEdldFRpbWVJbk1pbGxpcygpKSA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBuZWFyIHRoZSBlbmQgb2YgdGhlIG1vbnRoLCBhc3N1bWUgbmV4dCBtb250aCBhbmQgc2VhcmNoIGJhY2t3YXJkcworICAgICAgICAgICAgICAgIG1vbnRocysrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGaW5kIG91dCB0aGUgbGFzdCB0aW1lIHRoYXQgdGhlIG5ldyBtb29uIHdhcyBhY3R1YWxseSB2aXNpYmxlIGF0IHRoaXMgbG9uZ2l0dWRlCisgICAgICAgICAgICAvLyBUaGlzIHJldHVybnMgbWlkbmlnaHQgdGhlIG5pZ2h0IHRoYXQgdGhlIG1vb24gd2FzIHZpc2libGUgYXQgc3Vuc2V0LgorICAgICAgICAgICAgd2hpbGUgKChtb250aFN0YXJ0ID0gdHJ1ZU1vbnRoU3RhcnQobW9udGhzKSkgPiBkYXlzKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgaXQgd2FzIGFmdGVyIHRoZSBkYXRlIGluIHF1ZXN0aW9uLCBiYWNrIHVwIGEgbW9udGggYW5kIHRyeSBhZ2FpbgorICAgICAgICAgICAgICAgIG1vbnRocy0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB5ZWFyID0gbW9udGhzIC8gMTIgKyAxOworICAgICAgICAgICAgbW9udGggPSBtb250aHMgJSAxMjsKKyAgICAgICAgfQorCisgICAgICAgIGRheU9mTW9udGggPSAoaW50KShkYXlzIC0gbW9udGhTdGFydCh5ZWFyLCBtb250aCkpICsgMTsKKworICAgICAgICAvLyBOb3cgZmlndXJlIG91dCB0aGUgZGF5IG9mIHRoZSB5ZWFyLgorICAgICAgICBkYXlPZlllYXIgPSAoaW50KShkYXlzIC0gbW9udGhTdGFydCh5ZWFyLCAwKSArIDEpOworCisgICAgICAgIGludGVybmFsU2V0KEVSQSwgMCk7CisgICAgICAgIGludGVybmFsU2V0KFlFQVIsIHllYXIpOworICAgICAgICBpbnRlcm5hbFNldChFWFRFTkRFRF9ZRUFSLCB5ZWFyKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoTU9OVEgsIG1vbnRoKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoREFZX09GX01PTlRILCBkYXlPZk1vbnRoKTsKKyAgICAgICAgaW50ZXJuYWxTZXQoREFZX09GX1lFQVIsIGRheU9mWWVhcik7ICAgICAgIAorICAgIH0gICAgCisKKyAgICAvKgorICAgIHByaXZhdGUgc3RhdGljIENhbGVuZGFyRmFjdG9yeSBmYWN0b3J5OworICAgIHB1YmxpYyBzdGF0aWMgQ2FsZW5kYXJGYWN0b3J5IGZhY3RvcnkoKSB7CisgICAgICAgIGlmIChmYWN0b3J5ID09IG51bGwpIHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSBuZXcgQ2FsZW5kYXJGYWN0b3J5KCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyBDYWxlbmRhciBjcmVhdGUoVGltZVpvbmUgdHosIExvY2FsZSBsb2MpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJc2xhbWljQ2FsZW5kYXIodHosIGxvYyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcHVibGljIFN0cmluZyBmYWN0b3J5TmFtZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJJc2xhbWljIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWN0b3J5OworICAgIH0KKyAgICAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvSmFwYW5lc2VDYWxlbmRhci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvSmFwYW5lc2VDYWxlbmRhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllMjkxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9KYXBhbmVzZUNhbGVuZGFyLmphdmEKQEAgLTAsMCArMSw1ODcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL0phcGFuZXNlQ2FsZW5kYXIuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNSAwMToyNTozOCAkIAorICogJFJldmlzaW9uOiAxLjEyICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS51dGlsOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworLyoqCisgKiA8Y29kZT5KYXBhbmVzZUNhbGVuZGFyPC9jb2RlPiBpcyBhIHN1YmNsYXNzIG9mIDxjb2RlPkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPgorICogdGhhdCBudW1iZXJzIHllYXJzIGFuZCBlcmFzIGJhc2VkIG9uIHRoZSByZWlnbnMgb2YgdGhlIEphcGFuZXNlIGVtcGVyb3JzLgorICogVGhlIEphcGFuZXNlIGNhbGVuZGFyIGlzIGlkZW50aWNhbCB0byB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGluIGFsbCByZXNwZWN0cworICogZXhjZXB0IGZvciB0aGUgeWVhciBhbmQgZXJhLiAgVGhlIGFzY2Vuc2lvbiBvZiBlYWNoICBlbXBlcm9yIHRvIHRoZSB0aHJvbmUKKyAqIGJlZ2lucyBhIG5ldyBlcmEsIGFuZCB0aGUgeWVhcnMgb2YgdGhhdCBlcmEgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIHdpdGggdGhlCisgKiB5ZWFyIG9mIGFzY2Vuc2lvbiBhcyB5ZWFyIDEuCisgKiA8cD4KKyAqIE5vdGUgdGhhdCBpbiB0aGUgeWVhciBvZiBhbiBpbXBlcmlhbCBhc2NlbnNpb24sIHRoZXJlIGFyZSB0d28gcG9zc2libGUgc2V0cworICogb2YgeWVhciBhbmQgZXJhIHZhbHVlczogdGhhdCBmb3IgdGhlIG9sZCBlcmEgYW5kIGZvciB0aGUgbmV3LiAgRm9yIGV4YW1wbGUsIGEKKyAqIG5ldyBlcmEgYmVnYW4gb24gSmFudWFyeSA3LCAxOTg5IEFELiAgU3RyaWN0bHkgc3BlYWtpbmcsIHRoZSBmaXJzdCBzaXggZGF5cworICogb2YgdGhhdCB5ZWFyIHdlcmUgaW4gdGhlIFNob3dhIGVyYSwgZS5nLiAiSmFudWFyeSA2LCA2NCBTaG93YSIsIHdoaWxlIHRoZSByZXN0CisgKiBvZiB0aGUgeWVhciB3YXMgaW4gdGhlIEhlaXNlaSBlcmEsIGUuZy4gIkphbnVhcnkgNywgMSBIZWlzZWkiLiAgVGhpcyBjbGFzcworICogaGFuZGxlcyB0aGlzIGRpc3RpbmN0aW9uIGNvcnJlY3RseSB3aGVuIGNvbXB1dGluZyBkYXRlcy4gIEhvd2V2ZXIsIGluIGxlbmllbnQKKyAqIG1vZGUgZWl0aGVyIGZvcm0gb2YgZGF0ZSBpcyBhY2NlcHRhYmxlIGFzIGlucHV0LiAKKyAqIDxwPgorICogSW4gbW9kZXJuIHRpbWVzLCBlcmFzIGhhdmUgc3RhcnRlZCBvbiBKYW51YXJ5IDgsIDE4NjggQUQsIEdyZWdvcmlhbiAoTWVpamkpLAorICogSnVseSAzMCwgMTkxMiAoVGFpc2hvKSwgRGVjZW1iZXIgMjUsIDE5MjYgKFNob3dhKSwgYW5kIEphbnVhcnkgNywgMTk4OSAoSGVpc2VpKS4gIENvbnN0YW50cworICogZm9yIHRoZXNlIGVyYXMsIHN1aXRhYmxlIGZvciB1c2UgaW4gdGhlIDxjb2RlPkVSQTwvY29kZT4gZmllbGQsIGFyZSBwcm92aWRlZAorICogaW4gdGhpcyBjbGFzcy4gIE5vdGUgdGhhdCB0aGUgPGVtPm51bWJlcjwvZW0+IHVzZWQgZm9yIGVhY2ggZXJhIGlzIG1vcmUgb3IKKyAqIGxlc3MgYXJiaXRyYXJ5LiAgQ3VycmVudGx5LCB0aGUgZXJhIHN0YXJ0aW5nIGluIDEwNTMgQUQgaXMgZXJhICMwOyBob3dldmVyIHRoaXMKKyAqIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBoaXN0b3JpY2FsIGRhdGEuICBVc2UgdGhlIHByZWRlZmluZWQKKyAqIGNvbnN0YW50cyByYXRoZXIgdGhhbiB1c2luZyBhY3R1YWwsIGFic29sdXRlIG51bWJlcnMuCisgKiA8cD4KKyAqCisgKiBAc2VlIGNvbS5pYm0uaWN1LnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIKKyAqCisgKiBAYXV0aG9yIExhdXJhIFdlcm5lcgorICogQGF1dGhvciBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBjbGFzcyBKYXBhbmVzZUNhbGVuZGFyIGV4dGVuZHMgR3JlZ29yaWFuQ2FsZW5kYXIgeworICAgIAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IFx1MDBhOSAxOTk4IElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBDb25zdHJ1Y3RvcnMuLi4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBkZWZhdWx0IDxjb2RlPkphcGFuZXNlQ2FsZW5kYXI8L2NvZGU+IHVzaW5nIHRoZSBjdXJyZW50IHRpbWUKKyAgICAgKiBpbiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgd2l0aCB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEphcGFuZXNlQ2FsZW5kYXIoKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIDxjb2RlPkphcGFuZXNlQ2FsZW5kYXI8L2NvZGU+IGJhc2VkIG9uIHRoZSBjdXJyZW50IHRpbWUKKyAgICAgKiBpbiB0aGUgZ2l2ZW4gdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIEBwYXJhbSB6b25lIHRoZSBnaXZlbiB0aW1lIHpvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEphcGFuZXNlQ2FsZW5kYXIoVGltZVpvbmUgem9uZSkgeworICAgICAgICBzdXBlcih6b25lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+SmFwYW5lc2VDYWxlbmRhcjwvY29kZT4gYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZQorICAgICAqIGluIHRoZSBkZWZhdWx0IHRpbWUgem9uZSB3aXRoIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICogQHBhcmFtIGFMb2NhbGUgdGhlIGdpdmVuIGxvY2FsZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgSmFwYW5lc2VDYWxlbmRhcihMb2NhbGUgYUxvY2FsZSkgeworICAgICAgICBzdXBlcihhTG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgPGNvZGU+SmFwYW5lc2VDYWxlbmRhcjwvY29kZT4gYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZQorICAgICAqIGluIHRoZSBnaXZlbiB0aW1lIHpvbmUgd2l0aCB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqCisgICAgICogQHBhcmFtIHpvbmUgdGhlIGdpdmVuIHRpbWUgem9uZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhTG9jYWxlIHRoZSBnaXZlbiBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEphcGFuZXNlQ2FsZW5kYXIoVGltZVpvbmUgem9uZSwgTG9jYWxlIGFMb2NhbGUpIHsKKyAgICAgICAgc3VwZXIoem9uZSwgYUxvY2FsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIDxjb2RlPkphcGFuZXNlQ2FsZW5kYXI8L2NvZGU+IHdpdGggdGhlIGdpdmVuIGRhdGUgc2V0CisgICAgICogaW4gdGhlIGRlZmF1bHQgdGltZSB6b25lIHdpdGggdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQHBhcmFtIGRhdGUgICAgICBUaGUgZGF0ZSB0byB3aGljaCB0aGUgbmV3IGNhbGVuZGFyIGlzIHNldC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgSmFwYW5lc2VDYWxlbmRhcihEYXRlIGRhdGUpIHsKKyAgICAgICAgdGhpcygpOworICAgICAgICBzZXRUaW1lKGRhdGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSA8Y29kZT5KYXBhbmVzZUNhbGVuZGFyPC9jb2RlPiB3aXRoIHRoZSBnaXZlbiBkYXRlIHNldAorICAgICAqIGluIHRoZSBkZWZhdWx0IHRpbWUgem9uZSB3aXRoIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlcmEgICAgICAgVGhlIGltcGVyaWFsIGVyYSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI0VSQSBFUkF9IGZpZWxkLgorICAgICAqICAgICAgICAgICAgICAgICAgRXJhcyBhcmUgbnVtYmVyZWQgc3RhcnRpbmcgd2l0aCB0aGUgVGVua2kgZXJhLCB3aGljaAorICAgICAqICAgICAgICAgICAgICAgICAgYmVnYW4gaW4gMTA1MyBBRCBHcmVnb3JpYW4sIGFzIGVyYSB6ZXJvLiAgUmVjZW50CisgICAgICogICAgICAgICAgICAgICAgICBlcmFzIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGNvbnN0YW50cworICAgICAqICAgICAgICAgICAgICAgICAge0BsaW5rICNNRUlKSX0gKHdoaWNoIHN0YXJ0ZWQgaW4gMTg2OCBBRCksCisgICAgICogICAgICAgICAgICAgICAgICB7QGxpbmsgI1RBSVNIT30gKDE5MTIgQUQpLAorICAgICAqICAgICAgICAgICAgICAgICAge0BsaW5rICNTSE9XQX0gKDE5MjYgQUQpLCBhbmQKKyAgICAgKiAgICAgICAgICAgICAgICAgIHtAbGluayAjSEVJU0VJfSAoMTk4OSBBRCkuCisgICAgICoKKyAgICAgKiBAcGFyYW0geWVhciAgICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI1lFQVIgWUVBUn0gZmllbGQsCisgICAgICogICAgICAgICAgICAgICAgICBpbiB0ZXJtcyBvZiB0aGUgZXJhLgorICAgICAqCisgICAgICogQHBhcmFtIG1vbnRoICAgICBUaGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIGNhbGVuZGFyJ3Mge0BsaW5rICNNT05USCBNT05USH0gZmllbGQuCisgICAgICogICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgMC1iYXNlZC4gZS5nLiwgMCBmb3IgSmFudWFyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXRlICAgICAgVGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBjYWxlbmRhcidzIERBVEUgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEphcGFuZXNlQ2FsZW5kYXIoaW50IGVyYSwgaW50IHllYXIsIGludCBtb250aCwgaW50IGRhdGUpIHsKKyAgICAgICAgc3VwZXIoeWVhciwgbW9udGgsIGRhdGUpOworICAgICAgICBzZXQoRVJBLCBlcmEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSA8Y29kZT5KYXBhbmVzZUNhbGVuZGFyPC9jb2RlPiB3aXRoIHRoZSBnaXZlbiBkYXRlIHNldAorICAgICAqIGluIHRoZSBkZWZhdWx0IHRpbWUgem9uZSB3aXRoIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB5ZWFyICAgICAgVGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBjYWxlbmRhcidzIHtAbGluayAjWUVBUiBZRUFSfSBmaWVsZCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIGluIHRoZSBlcmEgSGVpc2VpLCB0aGUgbW9zdCBjdXJyZW50IGF0IHRoZSB0aW1lIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgIGNsYXNzIHdhcyBsYXN0IHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI01PTlRIIE1PTlRIfSBmaWVsZC4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpcyAwLWJhc2VkLiBlLmcuLCAwIGZvciBKYW51YXJ5LgorICAgICAqCisgICAgICogQHBhcmFtIGRhdGUgICAgICBUaGUgdmFsdWUgdXNlZCB0byBzZXQgdGhlIGNhbGVuZGFyJ3Mge0BsaW5rICNEQVRFIERBVEV9IGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBKYXBhbmVzZUNhbGVuZGFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXRlKSB7CisgICAgICAgIHN1cGVyKHllYXIsIG1vbnRoLCBkYXRlKTsKKyAgICAgICAgc2V0KEVSQSwgQ1VSUkVOVF9FUkEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSA8Y29kZT5KYXBhbmVzZUNhbGVuZGFyPC9jb2RlPiB3aXRoIHRoZSBnaXZlbiBkYXRlCisgICAgICogYW5kIHRpbWUgc2V0IGZvciB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgd2l0aCB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0geWVhciAgICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI1lFQVIgWUVBUn0gdGltZSBmaWVsZCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIGluIHRoZSBlcmEgSGVpc2VpLCB0aGUgbW9zdCBjdXJyZW50IGF0IHRoZSB0aW1lIG9mIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgIHdyaXRpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI01PTlRIIE1PTlRIfSB0aW1lIGZpZWxkLgorICAgICAqICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIDAtYmFzZWQuIGUuZy4sIDAgZm9yIEphbnVhcnkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0ZSAgICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI0RBVEUgREFURX0gdGltZSBmaWVsZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBob3VyICAgICAgVGhlIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBjYWxlbmRhcidzIHtAbGluayAjSE9VUl9PRl9EQVkgSE9VUl9PRl9EQVl9IHRpbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWludXRlICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI01JTlVURSBNSU5VVEV9IHRpbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc2Vjb25kICAgIFRoZSB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY2FsZW5kYXIncyB7QGxpbmsgI1NFQ09ORCBTRUNPTkR9IHRpbWUgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIEphcGFuZXNlQ2FsZW5kYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRhdGUsIGludCBob3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWludXRlLCBpbnQgc2Vjb25kKQorICAgIHsKKyAgICAgICAgc3VwZXIoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsKKyAgICAgICAgc2V0KEVSQSwgQ1VSUkVOVF9FUkEpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHJvdGVjdGVkIGludCBoYW5kbGVHZXRFeHRlbmRlZFllYXIoKSB7CisgICAgICAgIGludCB5ZWFyOworICAgICAgICAvLyBUT0RPIHJlaW1wbGVtZW50IHRoaXMgdG8gYmUgZmFzdGVyPworICAgICAgICBpZiAobmV3ZXJGaWVsZChFWFRFTkRFRF9ZRUFSLCBZRUFSKSA9PSBFWFRFTkRFRF9ZRUFSICYmCisgICAgICAgICAgICBuZXdlckZpZWxkKEVYVEVOREVEX1lFQVIsIEVSQSkgPT0gRVhURU5ERURfWUVBUikgeworICAgICAgICAgICAgeWVhciA9IGludGVybmFsR2V0KEVYVEVOREVEX1lFQVIsIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU3VidHJhY3Qgb25lIGJlY2F1c2UgeWVhciBzdGFydHMgYXQgMQorICAgICAgICAgICAgeWVhciA9IGludGVybmFsR2V0KFlFQVIpICsgRVJBU1tpbnRlcm5hbEdldChFUkEpICogM10gLSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB5ZWFyOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUNvbXB1dGVGaWVsZHMoaW50IGp1bGlhbkRheSkgeworICAgICAgICBzdXBlci5oYW5kbGVDb21wdXRlRmllbGRzKGp1bGlhbkRheSk7CisgICAgICAgIGludCB5ZWFyID0gaW50ZXJuYWxHZXQoRVhURU5ERURfWUVBUik7CisKKyAgICAgICAgaW50IGxvdyA9IDA7CisKKyAgICAgICAgLy8gU2hvcnQgY2lyY3VpdCBmb3IgcmVjZW50IHllYXJzLiAgTW9zdCBtb2Rlcm4gY29tcHV0YXRpb25zIHdpbGwKKyAgICAgICAgLy8gb2NjdXIgaW4gdGhlIGN1cnJlbnQgZXJhIGFuZCB3b24ndCByZXF1aXJlIHRoZSBiaW5hcnkgc2VhcmNoLgorICAgICAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHllYXIgaXMgPT0gdGhlIGN1cnJlbnQgZXJhIHllYXIsIHRoZW4gd2UgdXNlCisgICAgICAgIC8vIHRoZSBiaW5hcnkgc2VhcmNoIHRvIGhhbmRsZSB0aGUgbW9udGgvZG9tIGNvbXBhcmlzb24uCisgICAgICAgIGlmICh5ZWFyID4gRVJBU1tFUkFTLmxlbmd0aCAtIDNdKSB7CisgICAgICAgICAgICBsb3cgPSBDVVJSRU5UX0VSQTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJpbmFyeSBzZWFyY2gKKyAgICAgICAgICAgIGludCBoaWdoID0gRVJBUy5sZW5ndGggLyAzOworICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChsb3cgPCBoaWdoIC0gMSkgeworICAgICAgICAgICAgICAgIGludCBpID0gKGxvdyArIGhpZ2gpIC8gMjsKKyAgICAgICAgICAgICAgICBpbnQgZGlmZiA9IHllYXIgLSBFUkFTW2kqM107CisKKyAgICAgICAgICAgICAgICAvLyBJZiB5ZWFycyBhcmUgdGhlIHNhbWUsIHRoZW4gY29tcGFyZSB0aGUgbW9udGhzLCBhbmQgaWYgdGhvc2UKKyAgICAgICAgICAgICAgICAvLyBhcmUgdGhlIHNhbWUsIGNvbXBhcmUgZGF5cyBvZiBtb250aC4gIEluIHRoZSBFUkFTIGFycmF5CisgICAgICAgICAgICAgICAgLy8gbW9udGhzIGFyZSAxLWJhc2VkIGZvciBlYXNpZXIgbWFpbnRlbmFuY2UuCisgICAgICAgICAgICAgICAgaWYgKGRpZmYgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBkaWZmID0gaW50ZXJuYWxHZXQoTU9OVEgpIC0gKEVSQVNbaSozICsgMV0gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpZmYgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGludGVybmFsR2V0KERBWV9PRl9NT05USCkgLSBFUkFTW2kqMyArIDJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkaWZmID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbG93ID0gaTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBoaWdoID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgd2UndmUgZm91bmQgdGhlIGxhc3QgZXJhIHRoYXQgc3RhcnRzIGJlZm9yZSB0aGlzIGRhdGUsIHNvCisgICAgICAgIC8vIGFkanVzdCB0aGUgeWVhciB0byBjb3VudCBmcm9tIHRoZSBzdGFydCBvZiB0aGF0IGVyYS4gIE5vdGUgdGhhdAorICAgICAgICAvLyBhbGwgZGF0ZXMgYmVmb3JlIHRoZSBmaXJzdCBlcmEgd2lsbCBmYWxsIGludG8gdGhlIGZpcnN0IGVyYSBieQorICAgICAgICAvLyB0aGUgYWxnb3JpdGhtLgorICAgICAgICBpbnRlcm5hbFNldChFUkEsIGxvdyk7CisgICAgICAgIGludGVybmFsU2V0KFlFQVIsIHllYXIgLSBFUkFTW2xvdyozXSArIDEpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIEVSQVMgPSB7CisgICAgLy8gIEdyZWdvcmlhbiBkYXRlIG9mIGVhY2ggZW1wZXJvcidzIGFzY2Vuc2lvbgorICAgIC8vICBZZWFycyBhcmUgQUQsIG1vbnRocyBhcmUgMS1iYXNlZC4KKyAgICAvLyAgWWVhciAgTW9udGggRGF5CisgICAgICAgICA2NDUsICAgIDYsIDE5LCAgICAgLy8gVGFpa2EKKyAgICAgICAgIDY1MCwgICAgMiwgMTUsICAgICAvLyBIYWt1Y2hpCisgICAgICAgICA2NzIsICAgIDEsICAxLCAgICAgLy8gSGFrdWhvCisgICAgICAgICA2ODYsICAgIDcsIDIwLCAgICAgLy8gU2h1Y2hvCisgICAgICAgICA3MDEsICAgIDMsIDIxLCAgICAgLy8gVGFpaG8KKyAgICAgICAgIDcwNCwgICAgNSwgMTAsICAgICAvLyBLZWl1bgorICAgICAgICAgNzA4LCAgICAxLCAxMSwgICAgIC8vIFdhZG8KKyAgICAgICAgIDcxNSwgICAgOSwgIDIsICAgICAvLyBSZWlraQorICAgICAgICAgNzE3LCAgIDExLCAxNywgICAgIC8vIFlvcm8KKyAgICAgICAgIDcyNCwgICAgMiwgIDQsICAgICAvLyBKaW5raQorICAgICAgICAgNzI5LCAgICA4LCAgNSwgICAgIC8vIFRlbXB5bworICAgICAgICAgNzQ5LCAgICA0LCAxNCwgICAgIC8vIFRlbXB5by1rYW1wbworICAgICAgICAgNzQ5LCAgICA3LCAgMiwgICAgIC8vIFRlbXB5by1zaG9obworICAgICAgICAgNzU3LCAgICA4LCAxOCwgICAgIC8vIFRlbXB5by1ob2ppCisgICAgICAgICA3NjUsICAgIDEsICA3LCAgICAgLy8gVGVtcGhvLWppbmdvCisgICAgICAgICA3NjcsICAgIDgsIDE2LCAgICAgLy8gSmluZ28ta2VpdW4KKyAgICAgICAgIDc3MCwgICAxMCwgIDEsICAgICAvLyBIb2tpCisgICAgICAgICA3ODEsICAgIDEsICAxLCAgICAgLy8gVGVuLW8KKyAgICAgICAgIDc4MiwgICAgOCwgMTksICAgICAvLyBFbnJ5YWt1CisgICAgICAgICA4MDYsICAgIDUsIDE4LCAgICAgLy8gRGFpZG8KKyAgICAgICAgIDgxMCwgICAgOSwgMTksICAgICAvLyBLb25pbgorICAgICAgICAgODI0LCAgICAxLCAgNSwgICAgIC8vIFRlbmNobworICAgICAgICAgODM0LCAgICAxLCAgMywgICAgIC8vIFNob3dhCisgICAgICAgICA4NDgsICAgIDYsIDEzLCAgICAgLy8gS2FqbworICAgICAgICAgODUxLCAgICA0LCAyOCwgICAgIC8vIE5pbmp1CisgICAgICAgICA4NTQsICAgMTEsIDMwLCAgICAgLy8gU2Fpa28KKyAgICAgICAgIDg1NywgICAgMiwgMjEsICAgICAvLyBUZW5uYW4KKyAgICAgICAgIDg1OSwgICAgNCwgMTUsICAgICAvLyBKb2dhbgorICAgICAgICAgODc3LCAgICA0LCAxNiwgICAgIC8vIEdlbmtlaQorICAgICAgICAgODg1LCAgICAyLCAyMSwgICAgIC8vIE5pbm5hCisgICAgICAgICA4ODksICAgIDQsIDI3LCAgICAgLy8gS2FtcHlvCisgICAgICAgICA4OTgsICAgIDQsIDI2LCAgICAgLy8gU2hvdGFpCisgICAgICAgICA5MDEsICAgIDcsIDE1LCAgICAgLy8gRW5naQorICAgICAgICAgOTIzLCAgICA0LCAxMSwgICAgIC8vIEVuY2hvCisgICAgICAgICA5MzEsICAgIDQsIDI2LCAgICAgLy8gU2hvaGVpCisgICAgICAgICA5MzgsICAgIDUsIDIyLCAgICAgLy8gVGVuZ3lvCisgICAgICAgICA5NDcsICAgIDQsIDIyLCAgICAgLy8gVGVucnlha3UKKyAgICAgICAgIDk1NywgICAxMCwgMjcsICAgICAvLyBUZW50b2t1CisgICAgICAgICA5NjEsICAgIDIsIDE2LCAgICAgLy8gT3dhCisgICAgICAgICA5NjQsICAgIDcsIDEwLCAgICAgLy8gS29obworICAgICAgICAgOTY4LCAgICA4LCAxMywgICAgIC8vIEFubmEKKyAgICAgICAgIDk3MCwgICAgMywgMjUsICAgICAvLyBUZW5yb2t1CisgICAgICAgICA5NzMsICAgMTIsIDIwLCAgICAgLy8gVGVuLWVuCisgICAgICAgICA5NzYsICAgIDcsIDEzLCAgICAgLy8gSm9nZW4KKyAgICAgICAgIDk3OCwgICAxMSwgMjksICAgICAvLyBUZW5nZW4KKyAgICAgICAgIDk4MywgICAgNCwgMTUsICAgICAvLyBFaWthbgorICAgICAgICAgOTg1LCAgICA0LCAyNywgICAgIC8vIEthbm5hCisgICAgICAgICA5ODcsICAgIDQsICA1LCAgICAgLy8gRWktZW4KKyAgICAgICAgIDk4OSwgICAgOCwgIDgsICAgICAvLyBFaXNvCisgICAgICAgICA5OTAsICAgMTEsICA3LCAgICAgLy8gU2hvcnlha3UKKyAgICAgICAgIDk5NSwgICAgMiwgMjIsICAgICAvLyBDaG90b2t1CisgICAgICAgICA5OTksICAgIDEsIDEzLCAgICAgLy8gQ2hvaG8KKyAgICAgICAgMTAwNCwgICAgNywgMjAsICAgICAvLyBLYW5rbworICAgICAgICAxMDEyLCAgIDEyLCAyNSwgICAgIC8vIENob3dhCisgICAgICAgIDEwMTcsICAgIDQsIDIzLCAgICAgLy8gS2FubmluCisgICAgICAgIDEwMjEsICAgIDIsICAyLCAgICAgLy8gSmlhbgorICAgICAgICAxMDI0LCAgICA3LCAxMywgICAgIC8vIE1hbmp1CisgICAgICAgIDEwMjgsICAgIDcsIDI1LCAgICAgLy8gQ2hvZ2VuCisgICAgICAgIDEwMzcsICAgIDQsIDIxLCAgICAgLy8gQ2hvcnlha3UKKyAgICAgICAgMTA0MCwgICAxMSwgMTAsICAgICAvLyBDaG9reXUKKyAgICAgICAgMTA0NCwgICAxMSwgMjQsICAgICAvLyBLYW50b2t1CisgICAgICAgIDEwNDYsICAgIDQsIDE0LCAgICAgLy8gRWlzaG8KKyAgICAgICAgMTA1MywgICAgMSwgMTEsICAgICAvLyBUZW5naQorICAgICAgICAxMDU4LCAgICA4LCAyOSwgICAgIC8vIEtvaGVpCisgICAgICAgIDEwNjUsICAgIDgsICAyLCAgICAgLy8gSmlyeWFrdQorICAgICAgICAxMDY5LCAgICA0LCAxMywgICAgIC8vIEVua3l1CisgICAgICAgIDEwNzQsICAgIDgsIDIzLCAgICAgLy8gU2hvaG8KKyAgICAgICAgMTA3NywgICAxMSwgMTcsICAgICAvLyBTaG9yeWFrdQorICAgICAgICAxMDgxLCAgICAyLCAxMCwgICAgIC8vIEVpaG8KKyAgICAgICAgMTA4NCwgICAgMiwgIDcsICAgICAvLyBPdG9rdQorICAgICAgICAxMDg3LCAgICA0LCAgNywgICAgIC8vIEthbmppCisgICAgICAgIDEwOTQsICAgMTIsIDE1LCAgICAgLy8gS2FobworICAgICAgICAxMDk2LCAgIDEyLCAxNywgICAgIC8vIEVpY2hvCisgICAgICAgIDEwOTcsICAgMTEsIDIxLCAgICAgLy8gU2hvdG9rdQorICAgICAgICAxMDk5LCAgICA4LCAyOCwgICAgIC8vIEtvd2EKKyAgICAgICAgMTEwNCwgICAgMiwgMTAsICAgICAvLyBDaG9qaQorICAgICAgICAxMTA2LCAgICA0LCAgOSwgICAgIC8vIEthc2hvCisgICAgICAgIDExMDgsICAgIDgsICAzLCAgICAgLy8gVGVubmluCisgICAgICAgIDExMTAsICAgIDcsIDEzLCAgICAgLy8gVGVuLWVpCisgICAgICAgIDExMTMsICAgIDcsIDEzLCAgICAgLy8gRWlreXUKKyAgICAgICAgMTExOCwgICAgNCwgIDMsICAgICAvLyBHZW4tZWkKKyAgICAgICAgMTEyMCwgICAgNCwgMTAsICAgICAvLyBIb2FuCisgICAgICAgIDExMjQsICAgIDQsICAzLCAgICAgLy8gVGVuamkKKyAgICAgICAgMTEyNiwgICAgMSwgMjIsICAgICAvLyBEYWlqaQorICAgICAgICAxMTMxLCAgICAxLCAyOSwgICAgIC8vIFRlbnNobworICAgICAgICAxMTMyLCAgICA4LCAxMSwgICAgIC8vIENob3NobworICAgICAgICAxMTM1LCAgICA0LCAyNywgICAgIC8vIEhvZW4KKyAgICAgICAgMTE0MSwgICAgNywgMTAsICAgICAvLyBFaWppCisgICAgICAgIDExNDIsICAgIDQsIDI4LCAgICAgLy8gS29qaQorICAgICAgICAxMTQ0LCAgICAyLCAyMywgICAgIC8vIFRlbnlvCisgICAgICAgIDExNDUsICAgIDcsIDIyLCAgICAgLy8gS3l1YW4KKyAgICAgICAgMTE1MSwgICAgMSwgMjYsICAgICAvLyBOaW5wZWkKKyAgICAgICAgMTE1NCwgICAxMCwgMjgsICAgICAvLyBLeXVqdQorICAgICAgICAxMTU2LCAgICA0LCAyNywgICAgIC8vIEhvZ2VuCisgICAgICAgIDExNTksICAgIDQsIDIwLCAgICAgLy8gSGVpamkKKyAgICAgICAgMTE2MCwgICAgMSwgMTAsICAgICAvLyBFaXJ5YWt1CisgICAgICAgIDExNjEsICAgIDksICA0LCAgICAgLy8gT2hvCisgICAgICAgIDExNjMsICAgIDMsIDI5LCAgICAgLy8gQ2hva2FuCisgICAgICAgIDExNjUsICAgIDYsICA1LCAgICAgLy8gRWltYW4KKyAgICAgICAgMTE2NiwgICAgOCwgMjcsICAgICAvLyBOaW4tYW4KKyAgICAgICAgMTE2OSwgICAgNCwgIDgsICAgICAvLyBLYW8KKyAgICAgICAgMTE3MSwgICAgNCwgMjEsICAgICAvLyBTaG9hbgorICAgICAgICAxMTc1LCAgICA3LCAyOCwgICAgIC8vIEFuZ2VuCisgICAgICAgIDExNzcsICAgIDgsICA0LCAgICAgLy8gSmlzaG8KKyAgICAgICAgMTE4MSwgICAgNywgMTQsICAgICAvLyBZb3dhCisgICAgICAgIDExODIsICAgIDUsIDI3LCAgICAgLy8gSnVlaQorICAgICAgICAxMTg0LCAgICA0LCAxNiwgICAgIC8vIEdlbnJ5dWt1CisgICAgICAgIDExODUsICAgIDgsIDE0LCAgICAgLy8gQnVuamkKKyAgICAgICAgMTE5MCwgICAgNCwgMTEsICAgICAvLyBLZW5reXUKKyAgICAgICAgMTE5OSwgICAgNCwgMjcsICAgICAvLyBTaG9qaQorICAgICAgICAxMjAxLCAgICAyLCAxMywgICAgIC8vIEtlbm5pbgorICAgICAgICAxMjA0LCAgICAyLCAyMCwgICAgIC8vIEdlbmt5dQorICAgICAgICAxMjA2LCAgICA0LCAyNywgICAgIC8vIEtlbi1laQorICAgICAgICAxMjA3LCAgIDEwLCAyNSwgICAgIC8vIFNob2dlbgorICAgICAgICAxMjExLCAgICAzLCAgOSwgICAgIC8vIEtlbnJ5YWt1CisgICAgICAgIDEyMTMsICAgMTIsICA2LCAgICAgLy8gS2VucG8KKyAgICAgICAgMTIxOSwgICAgNCwgMTIsICAgICAvLyBTaG9reXUKKyAgICAgICAgMTIyMiwgICAgNCwgMTMsICAgICAvLyBKb28KKyAgICAgICAgMTIyNCwgICAxMSwgMjAsICAgICAvLyBHZW5uaW4KKyAgICAgICAgMTIyNSwgICAgNCwgMjAsICAgICAvLyBLYXJva3UKKyAgICAgICAgMTIyNywgICAxMiwgMTAsICAgICAvLyBBbnRlaQorICAgICAgICAxMjI5LCAgICAzLCAgNSwgICAgIC8vIEthbmtpCisgICAgICAgIDEyMzIsICAgIDQsICAyLCAgICAgLy8gSm9laQorICAgICAgICAxMjMzLCAgICA0LCAxNSwgICAgIC8vIFRlbXB1a3UKKyAgICAgICAgMTIzNCwgICAxMSwgIDUsICAgICAvLyBCdW5yeWFrdQorICAgICAgICAxMjM1LCAgICA5LCAxOSwgICAgIC8vIEthdGVpCisgICAgICAgIDEyMzgsICAgMTEsIDIzLCAgICAgLy8gUnlha3VuaW4KKyAgICAgICAgMTIzOSwgICAgMiwgIDcsICAgICAvLyBFbi1vCisgICAgICAgIDEyNDAsICAgIDcsIDE2LCAgICAgLy8gTmluamkKKyAgICAgICAgMTI0MywgICAgMiwgMjYsICAgICAvLyBLYW5nZW4KKyAgICAgICAgMTI0NywgICAgMiwgMjgsICAgICAvLyBIb2ppCisgICAgICAgIDEyNDksICAgIDMsIDE4LCAgICAgLy8gS2VuY2hvCisgICAgICAgIDEyNTYsICAgMTAsICA1LCAgICAgLy8gS29nZW4KKyAgICAgICAgMTI1NywgICAgMywgMTQsICAgICAvLyBTaG9rYQorICAgICAgICAxMjU5LCAgICAzLCAyNiwgICAgIC8vIFNob2dlbgorICAgICAgICAxMjYwLCAgICA0LCAxMywgICAgIC8vIEJ1bi1vCisgICAgICAgIDEyNjEsICAgIDIsIDIwLCAgICAgLy8gS29jaG8KKyAgICAgICAgMTI2NCwgICAgMiwgMjgsICAgICAvLyBCdW4tZWkKKyAgICAgICAgMTI3NSwgICAgNCwgMjUsICAgICAvLyBLZW5qaQorICAgICAgICAxMjc4LCAgICAyLCAyOSwgICAgIC8vIEtvYW4KKyAgICAgICAgMTI4OCwgICAgNCwgMjgsICAgICAvLyBTaG9vCisgICAgICAgIDEyOTMsICAgIDgsIDU1LCAgICAgLy8gRWluaW4KKyAgICAgICAgMTI5OSwgICAgNCwgMjUsICAgICAvLyBTaG9hbgorICAgICAgICAxMzAyLCAgIDExLCAyMSwgICAgIC8vIEtlbmdlbgorICAgICAgICAxMzAzLCAgICA4LCAgNSwgICAgIC8vIEthZ2VuCisgICAgICAgIDEzMDYsICAgMTIsIDE0LCAgICAgLy8gVG9rdWppCisgICAgICAgIDEzMDgsICAgMTAsICA5LCAgICAgLy8gRW5rZWkKKyAgICAgICAgMTMxMSwgICAgNCwgMjgsICAgICAvLyBPY2hvCisgICAgICAgIDEzMTIsICAgIDMsIDIwLCAgICAgLy8gU2hvd2EKKyAgICAgICAgMTMxNywgICAgMiwgIDMsICAgICAvLyBCdW5wbworICAgICAgICAxMzE5LCAgICA0LCAyOCwgICAgIC8vIEdlbm8KKyAgICAgICAgMTMyMSwgICAgMiwgMjMsICAgICAvLyBHZW5reW8KKyAgICAgICAgMTMyNCwgICAxMiwgIDksICAgICAvLyBTaG9jaHUKKyAgICAgICAgMTMyNiwgICAgNCwgMjYsICAgICAvLyBLYXJla2kKKyAgICAgICAgMTMyOSwgICAgOCwgMjksICAgICAvLyBHZW50b2t1CisgICAgICAgIDEzMzEsICAgIDgsICA5LCAgICAgLy8gR2Vua28KKyAgICAgICAgMTMzNCwgICAgMSwgMjksICAgICAvLyBLZW1tdQorICAgICAgICAxMzM2LCAgICAyLCAyOSwgICAgIC8vIEVuZ2VuCisgICAgICAgIDEzNDAsICAgIDQsIDI4LCAgICAgLy8gS29rb2t1CisgICAgICAgIDEzNDYsICAgMTIsICA4LCAgICAgLy8gU2hvaGVpCisgICAgICAgIDEzNzAsICAgIDcsIDI0LCAgICAgLy8gS2VudG9rdQorICAgICAgICAxMzcyLCAgICA0LCAgMSwgICAgIC8vIEJ1bmNoXHUwMTY5CisgICAgICAgIDEzNzUsICAgIDUsIDI3LCAgICAgLy8gVGVuanUKKyAgICAgICAgMTM4MSwgICAgMiwgMTAsICAgICAvLyBLb3dhCisgICAgICAgIDEzODQsICAgIDQsIDI4LCAgICAgLy8gR2VuY2hcdTAxNjkKKyAgICAgICAgMTM4NCwgICAgMiwgMjcsICAgICAvLyBNZWl0b2t1CisgICAgICAgIDEzNzksICAgIDMsIDIyLCAgICAgLy8gS29yeWFrdQorICAgICAgICAxMzg3LCAgICA4LCAyMywgICAgIC8vIEtha2VpCisgICAgICAgIDEzODksICAgIDIsICA5LCAgICAgLy8gS29vCisgICAgICAgIDEzOTAsICAgIDMsIDI2LCAgICAgLy8gTWVpdG9rdQorICAgICAgICAxMzk0LCAgICA3LCAgNSwgICAgIC8vIE9laQorICAgICAgICAxNDI4LCAgICA0LCAyNywgICAgIC8vIFNob2NobworICAgICAgICAxNDI5LCAgICA5LCAgNSwgICAgIC8vIEVpa3lvCisgICAgICAgIDE0NDEsICAgIDIsIDE3LCAgICAgLy8gS2FraXRzdQorICAgICAgICAxNDQ0LCAgICAyLCAgNSwgICAgIC8vIEJ1bi1hbgorICAgICAgICAxNDQ5LCAgICA3LCAyOCwgICAgIC8vIEhvdG9rdQorICAgICAgICAxNDUyLCAgICA3LCAyNSwgICAgIC8vIEt5b3Rva3UKKyAgICAgICAgMTQ1NSwgICAgNywgMjUsICAgICAvLyBLb3NobworICAgICAgICAxNDU3LCAgICA5LCAyOCwgICAgIC8vIENob3Jva3UKKyAgICAgICAgMTQ2MCwgICAxMiwgMjEsICAgICAvLyBLYW5zaG8KKyAgICAgICAgMTQ2NiwgICAgMiwgMjgsICAgICAvLyBCdW5zaG8KKyAgICAgICAgMTQ2NywgICAgMywgIDMsICAgICAvLyBPbmluCisgICAgICAgIDE0NjksICAgIDQsIDI4LCAgICAgLy8gQnVubWVpCisgICAgICAgIDE0ODcsICAgIDcsIDI5LCAgICAgLy8gQ2hva3lvCisgICAgICAgIDE0ODksICAgIDgsIDIxLCAgICAgLy8gRW50b2t1CisgICAgICAgIDE0OTIsICAgIDcsIDE5LCAgICAgLy8gTWVpbworICAgICAgICAxNTAxLCAgICAyLCAyOSwgICAgIC8vIEJ1bmtpCisgICAgICAgIDE1MDQsICAgIDIsIDMwLCAgICAgLy8gRWlzaG8KKyAgICAgICAgMTUyMSwgICAgOCwgMjMsICAgICAvLyBUYWllaQorICAgICAgICAxNTI4LCAgICA4LCAyMCwgICAgIC8vIEt5b3Jva3UKKyAgICAgICAgMTUzMiwgICAgNywgMjksICAgICAvLyBUZW5tb24KKyAgICAgICAgMTU1NSwgICAxMCwgMjMsICAgICAvLyBLb2ppCisgICAgICAgIDE1NTgsICAgIDIsIDI4LCAgICAgLy8gRWlyb2t1CisgICAgICAgIDE1NzAsICAgIDQsIDIzLCAgICAgLy8gR2Vua2kKKyAgICAgICAgMTU3MywgICAgNywgMjgsICAgICAvLyBUZW5zaG8KKyAgICAgICAgMTU5MiwgICAxMiwgIDgsICAgICAvLyBCdW5yb2t1CisgICAgICAgIDE1OTYsICAgMTAsIDI3LCAgICAgLy8gS2VpY2hvCisgICAgICAgIDE2MTUsICAgIDcsIDEzLCAgICAgLy8gR2Vud2EKKyAgICAgICAgMTYyNCwgICAgMiwgMzAsICAgICAvLyBLYW4tZWkKKyAgICAgICAgMTY0NCwgICAxMiwgMTYsICAgICAvLyBTaG9obworICAgICAgICAxNjQ4LCAgICAyLCAxNSwgICAgIC8vIEtlaWFuCisgICAgICAgIDE2NTIsICAgIDksIDE4LCAgICAgLy8gU2hvbworICAgICAgICAxNjU1LCAgICA0LCAxMywgICAgIC8vIE1laXJ5YWt1CisgICAgICAgIDE2NTgsICAgIDcsIDIzLCAgICAgLy8gTWFuamkKKyAgICAgICAgMTY2MSwgICAgNCwgMjUsICAgICAvLyBLYW5idW4KKyAgICAgICAgMTY3MywgICAgOSwgMjEsICAgICAvLyBFbnBvCisgICAgICAgIDE2ODEsICAgIDksIDI5LCAgICAgLy8gVGVud2EKKyAgICAgICAgMTY4NCwgICAgMiwgMjEsICAgICAvLyBKb2t5bworICAgICAgICAxNjg4LCAgICA5LCAzMCwgICAgIC8vIEdlbnJva3UKKyAgICAgICAgMTcwNCwgICAgMywgMTMsICAgICAvLyBIb2VpCisgICAgICAgIDE3MTEsICAgIDQsIDI1LCAgICAgLy8gU2hvdG9rdQorICAgICAgICAxNzE2LCAgICA2LCAyMiwgICAgIC8vIEt5b2hvCisgICAgICAgIDE3MzYsICAgIDQsIDI4LCAgICAgLy8gR2VuYnVuCisgICAgICAgIDE3NDEsICAgIDIsIDI3LCAgICAgLy8gS2FucG8KKyAgICAgICAgMTc0NCwgICAgMiwgMjEsICAgICAvLyBFbmt5bworICAgICAgICAxNzQ4LCAgICA3LCAxMiwgICAgIC8vIEthbi1lbgorICAgICAgICAxNzUxLCAgIDEwLCAyNywgICAgIC8vIEhvcnlha3UKKyAgICAgICAgMTc2NCwgICAgNiwgIDIsICAgICAvLyBNZWl3YQorICAgICAgICAxNzcyLCAgIDExLCAxNiwgICAgIC8vIEFuLWVpCisgICAgICAgIDE3ODEsICAgIDQsICAyLCAgICAgLy8gVGVubWVpCisgICAgICAgIDE3ODksICAgIDEsIDI1LCAgICAgLy8gS2Fuc2VpCisgICAgICAgIDE4MDEsICAgIDIsICA1LCAgICAgLy8gS3lvd2EKKyAgICAgICAgMTgwNCwgICAgMiwgMTEsICAgICAvLyBCdW5rYQorICAgICAgICAxODE4LCAgICA0LCAyMiwgICAgIC8vIEJ1bnNlaQorICAgICAgICAxODMwLCAgIDEyLCAxMCwgICAgIC8vIFRlbnBvCisgICAgICAgIDE4NDQsICAgMTIsICAyLCAgICAgLy8gS29rYQorICAgICAgICAxODQ4LCAgICAyLCAyOCwgICAgIC8vIEthZWkKKyAgICAgICAgMTg1NCwgICAxMSwgMjcsICAgICAvLyBBbnNlaQorICAgICAgICAxODYwLCAgICAzLCAxOCwgICAgIC8vIE1hbi1lbgorICAgICAgICAxODYxLCAgICAyLCAxOSwgICAgIC8vIEJ1bmt5dQorICAgICAgICAxODY0LCAgICAyLCAyMCwgICAgIC8vIEdlbmppCisgICAgICAgIDE4NjUsICAgIDQsICA3LCAgICAgLy8gS2VpbworICAgICAgICAxODY4LCAgICA5LCAgOCwgICAgIC8vIE1laWppCisgICAgICAgIDE5MTIsICAgIDcsIDMwLCAgICAgLy8gVGFpc2hvCisgICAgICAgIDE5MjYsICAgMTIsIDI1LCAgICAgLy8gU2hvd2EKKyAgICAgICAgMTk4OSwgICAgMSwgIDgsICAgICAvLyBIZWlzZWkKKyAgICB9OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIGNvbnN0YW50cyBmb3Igc29tZSBvZiB0aGUgcmVjZW50IGVyYXMgdGhhdCBmb2xrcyBtaWdodCB1c2UuLi4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIENvbnN0YW50IGZvciB0aGUgY3VycmVudCBlcmEuICBUaGlzIG11c3QgYmUgcmVndWxhcmx5IHVwZGF0ZWQuCisgICAgLyoqCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBmaW5hbCBpbnQgQ1VSUkVOVF9FUkEgPSAoRVJBUy5sZW5ndGggLyAzKSAtIDE7CisgICAgCisgICAgLyoqIAorICAgICAqIENvbnN0YW50IGZvciB0aGUgZXJhIHN0YXJ0aW5nIG9uIFNlcHQuIDgsIDE4NjggQUQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wIAorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgZmluYWwgaW50IE1FSUpJID0gQ1VSUkVOVF9FUkEgLSAzOworCisgICAgLyoqIAorICAgICAqIENvbnN0YW50IGZvciB0aGUgZXJhIHN0YXJ0aW5nIG9uIEp1bHkgMzAsIDE5MTIgQUQuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIGludCBUQUlTSE8gPSBDVVJSRU5UX0VSQSAtIDI7CisgICAgCisgICAgLyoqIAorICAgICAqIENvbnN0YW50IGZvciB0aGUgZXJhIHN0YXJ0aW5nIG9uIERlYy4gMjUsIDE5MjYgQUQuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIGludCBTSE9XQSA9IENVUlJFTlRfRVJBIC0gMTsKKworICAgIC8qKiAKKyAgICAgKiBDb25zdGFudCBmb3IgdGhlIGVyYSBzdGFydGluZyBvbiBKYW4uIDcsIDE5ODkgQUQuIAorICAgICAqIEBzdGFibGUgSUNVIDIuMCAKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIGZpbmFsIGludCBIRUlTRUkgPSBDVVJSRU5UX0VSQTsKKworICAgIC8qKgorICAgICAqIFBhcnRpYWwgbGltaXRzIHRhYmxlIGZvciBsaW1pdHMgdGhhdCBkaWZmZXIgZnJvbSBHcmVnb3JpYW5DYWxlbmRhcidzLgorICAgICAqIFRoZSBZRUFSIG1heCBsaW1pdHMgYXJlIGZpbGxlZCBpbiB0aGUgZmlyc3QgdGltZSB0aGV5IGFyZSBuZWVkZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IExJTUlUU1tdW10gPSB7CisgICAgICAgIC8vIE1pbmltdW0gIEdyZWF0ZXN0ICAgICAgICBMZWFzdCAgICAgIE1heGltdW0KKyAgICAgICAgLy8gICAgICAgICAgIE1pbmltdW0gICAgICBNYXhpbXVtCisgICAgICAgIHsgICAgICAgIDAsICAgICAgICAwLCBDVVJSRU5UX0VSQSwgQ1VSUkVOVF9FUkEgfSwgLy8gRVJBCisgICAgICAgIHsgICAgICAgIDEsICAgICAgICAxLCAgICAgICAgICAgMCwgICAgICAgICAgIDAgfSwgLy8gWUVBUgorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIFlFQVJfTElNSVRfS05PV04gPSBmYWxzZTsKKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIEdyZWdvcmlhbkNhbGVuZGFyLiAgV2Ugc2hvdWxkIHJlYWxseSBoYW5kbGUgWUVBUl9XT1kgYW5kCisgICAgICogRVhURU5ERURfWUVBUiBoZXJlIHRvbyB0byBpbXBsZW1lbnQgdGhlIDEuLjUwMDAwMDAgcmFuZ2UsIGJ1dCBpdCdzCisgICAgICogbm90IGNyaXRpY2FsLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHByb3RlY3RlZCBpbnQgaGFuZGxlR2V0TGltaXQoaW50IGZpZWxkLCBpbnQgbGltaXRUeXBlKSB7CisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSBFUkE6CisgICAgICAgICAgICByZXR1cm4gTElNSVRTW2ZpZWxkXVtsaW1pdFR5cGVdOworICAgICAgICBjYXNlIFlFQVI6CisgICAgICAgICAgICBpZiAoIVlFQVJfTElNSVRfS05PV04pIHsKKyAgICAgICAgICAgICAgICBpbnQgbWluID0gRVJBU1szXSAtIEVSQVNbMF07CisgICAgICAgICAgICAgICAgaW50IG1heCA9IG1pbjsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpPTY7IGk8RVJBUy5sZW5ndGg7IGkrPTMpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGQgPSBFUkFTW2ldIC0gRVJBU1tpLTNdOworICAgICAgICAgICAgICAgICAgICBpZiAoZCA8IG1pbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gZDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkID4gbWF4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSBkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIExJTUlUU1tmaWVsZF1bTEVBU1RfTUFYSU1VTV0gPSBtaW47CisgICAgICAgICAgICAgICAgTElNSVRTW2ZpZWxkXVtNQVhJTVVNXSA9IG1heDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBMSU1JVFNbZmllbGRdW2xpbWl0VHlwZV07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIuaGFuZGxlR2V0TGltaXQoZmllbGQsIGxpbWl0VHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgIHByaXZhdGUgc3RhdGljIENhbGVuZGFyRmFjdG9yeSBmYWN0b3J5OworICAgIHB1YmxpYyBzdGF0aWMgQ2FsZW5kYXJGYWN0b3J5IGZhY3RvcnkoKSB7CisgICAgICAgIGlmIChmYWN0b3J5ID09IG51bGwpIHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSBuZXcgQ2FsZW5kYXJGYWN0b3J5KCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyBDYWxlbmRhciBjcmVhdGUoVGltZVpvbmUgdHosIExvY2FsZSBsb2MpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBKYXBhbmVzZUNhbGVuZGFyKHR6LCBsb2MpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZmFjdG9yeU5hbWUoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiSmFwYW5lc2UiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhY3Rvcnk7CisgICAgfQorICAgICovCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9PdmVybGF5QnVuZGxlLmphdmEgYi9zcmMvY29tL2libS9pY3UvdXRpbC9PdmVybGF5QnVuZGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzNlMWM2MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS91dGlsL092ZXJsYXlCdW5kbGUuamF2YQpAQCAtMCwwICsxLDE3NSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL092ZXJsYXlCdW5kbGUuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzEyLzA0IDE2OjM4OjUyICQKKyAqICRSZXZpc2lvbjogMS42ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBBIFJlc291cmNlQnVuZGxlIHRoYXQgb3ZlcmxheXMgb25lIGhpZXJhcmNoeSBhdG9wIGFub3RoZXIuICBUaGlzIGlzCisgKiBiZXN0IGV4cGxhaW5lZCBieSBleGFtcGxlLiAgU3VwcG9zZSBvbmUgd2FudHMgdG8gdXNlIHRoZQorICogcmVzb3VyY2UgaGlhcmFyY2h5IChpbiBKREsgMS4yIGFuZCAxLjMsIGJ1dCBub3QgMS40KSBhdCAKKyAqICJqYXZhLnRleHQucmVzb3VyY2VzLkxvY2FsZUVsZW1lbnRzIiwgYnV0IG9uZSB3YW50cyB0byB1c2UKKyAqIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgIk51bWJlclBhdHRlcm5zIiByZXNvdXJjZSBpbiB0aGUKKyAqIGZyX0ZSIGxvY2FsZS4gIE9uZSB3YXkgdG8gZG8gdGhpcyBpcyB0byBhZGQgc3BlY2lhbCBjYXNlIGNvZGUKKyAqIHRvIHRoZSBsb29rdXAgb3BlcmF0aW9uIHRvIGNoZWNrIGZvciBmcl9GUiBhbmQgdGhlIGtleQorICogIk51bWJlclBhdHRlcm5zIiwgYW5kIGluIHRoYXQgY2FzZSwgbG9hZCB1cCBjdXN0b20gZGF0YS4gIEhvd2V2ZXIsCisgKiB0aGlzIGJlY29tZXMgdW53aWVsZHkgYW5kIHBsYWNlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICogZWZmZWN0aXZlIHJlc291cmNlIGhpZXJhcmNoeSBpbnRvIHRoZSBjb2RlLgorICoKKyAqIFRoZSBPdmVybGF5QnVuZGxlIHNvbHZlcyB0aGlzIHByb2JsZW0gYnkgbGF5ZXJpbmcgYW5vdGhlcgorICogaGllcmFyY2h5LCBlLmcsICJjb20uYWNtZS5yZXNvdXJjZXMuTG9jYWxlRWxlbWVudHMiLCBvbiB0b3Agb2YgYQorICogYmFzZSBoaWVyYXJjaHkuICBXaGVuIGEgcmVzb3VyY2UgaXMgcmVxdWVzdGVkLCBpdCBpcyBmaXJzdCBzb3VnaHQKKyAqIGluIHRoZSBvdmVybGF5IGhpZXJhcmNoeSwgYW5kIGlmIG5vdCBmb3VuZCB0aGVyZSwgaXQgaXMgc291Z2h0IGluCisgKiB0aGUgYmFzZSBoaWVyYXJjaHkuICBNdWx0aXBsZSBvdmVybGF5cyBhcmUgc3VwcG9ydGVkLCBidXQgaW4KKyAqIHByYWN0aWNlIG9uZSBpcyB1c3VhbGx5IHN1ZmZpY2llbnQuCisgKiAKKyAqIFRoZSBPdmVybGF5QnVuZGxlIGFsc28gYWRkcmVzc2VzIHRoZSBwcm9ibGVtIG9mIGNvdW50cnktb3JpZW50ZWQKKyAqIGRhdGEuICBUbyBzcGVjaWZ5IHRoZSBkZWZhdWx0IGRhdGEgZm9yIGEgbGFuZ3VhZ2UsIG9uZSBqdXN0IHNldHMKKyAqIHRoZSBsYW5ndWFnZSByZXNvdXJjZSBidW5kbGUgZGF0YS4gIEhvd2V2ZXIsIHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQKKyAqIGRhdGEgZm9yIGEgY291bnRyeSB1c2luZyB0aGUgc3RhbmRhcmQgUmVzb3VyY2VCdW5kbGUgbWVjaGFuaXNtIGlzCisgKiBpbXBvc3NpYmxlLiAgVGhlIE92ZXJsYXlCdW5kbGUgcmVjb2duaXplcyAid2lsZGNhcmQiIGxvY2FsZXMgd2l0aAorICogdGhlIHNwZWNpYWwgbGFuZ3VhZ2UgY29kZSAieHgiLiAgV2hlbiBsb29raW5nIHVwIGRhdGEgZm9yIGEgbG9jYWxlCisgKiB3aXRoIGEgbm9uLWVtcHR5IGNvdW50cnksIGlmIGFuIGV4YWN0IGxvY2FsZSBtYXRjaCBjYW5ub3QgYmUgZm91bmQsCisgKiB0aGUgT3ZlcmxheUJ1bmRsZSBsb29rcyBmb3IgZGF0YSBpbiB0aGUgbG9jYWxlIHh4X1lZLCB3aGVyZSBZWSBpcworICogdGhlIGNvdW50cnkgYmVpbmcgc291Z2h0LiAgVGhpcyBlZmZlY3RpdmVseSBhZGRzIGFub3RoZXIgZW50cnkgaW4KKyAqIHRoZSBmYWxsYmFjayBzZXF1ZW5jZSBmb3IgYSBsb2NhbGUgYWFfQkI6IGFhX0JCLCB4eF9CQiwgYWEsIHJvb3QuCisgKiBXaWxkY2FyZCBsb2NhbGVzIGFyZSBub3QgaW1wbGVtZW50ZWQgZm9yIHRoZSBiYXNlIGhpZXJhcmNoeSwgb25seQorICogZm9yIG92ZXJsYXlzLgorICoKKyAqIFRoZSBPdmVybGF5QnVuZGxlIGlzIGltcGxlbWVudGVkIGFzIGFuIGFycmF5IG9mIG4gUmVzb3VyY2VCdW5kbGUKKyAqIGJhc2UgbmFtZXMuICBUaGUgYmFzZSBuYW1lcyBhcmUgc2VhcmNoZWQgZnJvbSAwIHRvIG4tMS4gIEJhc2UgbmFtZQorICogbi0xIGlzIHNwZWNpYWw7IGl0IGlzIHRoZSBiYXNlIGhpZXJhcmNoeS4gIFRoaXMgc2hvdWxkIGJlIGEKKyAqIHdlbGwtcG9wdWxhdGVkIGhpZXJhcmNoeSB3aXRoIG1vc3Qgb2YgdGhlIGRlZmF1bHQgZGF0YSwgdHlwaWNhbGx5LAorICogdGhlIGljdSBvciBzdW4gY29yZSBoaWVyYXJjaGllcy4gIFRoZSBiYXNlIGhpZXJhcmNoeSBpcworICogdHJlYXRlZCBkaWZmZXJlbnRseSBmcm9tIHRoZSBvdmVybGF5cyBhYm92ZSBpdC4gIEl0IGRvZXMgbm90IGdldAorICogd2lsZGNhcmQgcmVzb2x1dGlvbiwgYW5kIHRoZSBnZXRLZXlzKCkgZnJhbWV3b3JrIG1ldGhvZCBpcworICogZGVsZWdhdGVkIHRvIHRoZSBiYXNlIGhpZXJhcmNoeSBidW5kbGUuCisgKgorICogVXNhZ2U6IEluc3RhbnRpYXRlIGFuIE92ZXJsYXlCdW5kbGUgZGlyZWN0bHkgKG5vdCB2aWEgYSBmYWN0b3J5CisgKiBtZXRob2QgYXMgaW4gUmVzb3VyY2VCdW5kbGUpLiAgSW5zdGVhZCBvZiBzcGVjaWZ5aW5nIGEgc2luZ2xlIGJhc2UKKyAqIG5hbWUsIHBhc3MgaXQgYW4gYXJyYXkgb2YgMiBvciBtb3JlIGJhc2UgbmFtZXMuICBBZnRlciB0aGF0LCB1c2UgaXQKKyAqIGV4YWN0bHkgYXMgeW91IHdvdWxkIHVzZSBSZXNvdXJjZUJ1bmRsZS4KKyAqCisgKiBAc2VlIGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZQorICogQGF1dGhvciBBbGFuIExpdQorICogQGludGVybmFsCisgKi8KKy8vIHByZXBhcmUgdG8gZGVwcmVjYXRlIGluIG5leHQgcmVsZWFzZQorLy8vQ0xPVkVSOk9GRgorcHVibGljIGNsYXNzIE92ZXJsYXlCdW5kbGUgZXh0ZW5kcyBSZXNvdXJjZUJ1bmRsZSB7CisKKyAgICAvKioKKyAgICAgKiBUaGUgYXJyYXkgb2YgYmFzZSBuYW1lcywgd2l0aCB0aGUgbGVuZ3RoLTEgZW50cnkgYmVpbmcgdGhlIGJhc2UKKyAgICAgKiBoaWVyYXJjaHksIHR5cGljYWxseSAic3VuLnRleHQucmVzb3VyY2VzLkxvY2FsZUVsZW1lbnRzIi4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZ1tdIGJhc2VOYW1lczsKKworICAgIC8qKgorICAgICAqIFRoZSByZXF1ZXN0ZWQgbG9jYWxlLgorICAgICAqLworICAgIHByaXZhdGUgTG9jYWxlIGxvY2FsZTsKKworICAgIC8qKgorICAgICAqIExvYWRlZCBidW5kbGVzLiAgVGhlc2Ugd2lsbCBiZSBudWxsIHVudGlsIHRoZXkgYXJlIGxvYWRlZCBvbgorICAgICAqIGRlbWFuZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFJlc291cmNlQnVuZGxlW10gYnVuZGxlczsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhbiBvdmVybGF5IGJ1bmRsZSBnaXZlbiBhIHNlcXVlbmNlIG9mIGJhc2UgbmFtZXMgYW5kCisgICAgICogYSBsb2NhbGUuCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgcHVibGljIE92ZXJsYXlCdW5kbGUoU3RyaW5nW10gYmFzZU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgdGhpcy5iYXNlTmFtZXMgPSBiYXNlTmFtZXM7CisgICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlOworICAgICAgICBidW5kbGVzID0gbmV3IFJlc291cmNlQnVuZGxlW2Jhc2VOYW1lcy5sZW5ndGhdOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc291cmNlQnVuZGxlIGZyYW1ld29yayBtZXRob2QuICBEZWxlZ2F0ZXMgdG8KKyAgICAgKiBidW5kbGVzW2ldLmdldE9iamVjdCgpLgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLyAKKyAgIHByb3RlY3RlZCBPYmplY3QgaGFuZGxlR2V0T2JqZWN0KFN0cmluZyBrZXkpIAorICAgICAgICB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHsKKworICAgICAgICBPYmplY3QgbyA9IG51bGw7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGJ1bmRsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxvYWQoaSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG8gPSBidW5kbGVzW2ldLmdldE9iamVjdChrZXkpOworICAgICAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBidW5kbGVzLmxlbmd0aC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG87CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVzb3VyY2VCdW5kbGUgZnJhbWV3b3JrIG1ldGhvZC4gIERlbGVnYXRlcyB0bworICAgICAqIGJ1bmRsZXNbYnVuZGxlcy5sZW5ndGgtMV0uZ2V0S2V5cygpLgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRLZXlzKCkgeworICAgICAgICAvLyBSZXR1cm4gdGhlIGVudW1lcmF0aW9uIG9mIHRoZSBsYXN0IGJ1bmRsZSwgd2hpY2ggaXMgdGhlIGJhc2UKKyAgICAgICAgLy8gb2Ygb3VyIGhpZXJhcmNoeSBzdGFjay4KKyAgICAgICAgaW50IGkgPSBidW5kbGVzLmxlbmd0aCAtIDE7CisgICAgICAgIGxvYWQoaSk7CisgICAgICAgIHJldHVybiBidW5kbGVzW2ldLmdldEtleXMoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb2FkIHRoZSBpLXRoIGJ1bmRsZSBhbmQgaW1wbGVtZW50IHdpbGRjYXJkIHJlc29sdXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGxvYWQoaW50IGkpCisgICAgICAgIHRocm93cyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geworCisgICAgICAgIGlmIChidW5kbGVzW2ldID09IG51bGwpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gdHJ5V2lsZGNhcmQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYnVuZGxlc1tpXSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShiYXNlTmFtZXNbaV0sIGxvY2FsZSk7CisgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZXNbaV0uZ2V0TG9jYWxlKCkuZXF1YWxzKGxvY2FsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobG9jYWxlLmdldENvdW50cnkoKS5sZW5ndGgoKSAhPSAwICYmIGkgIT0gYnVuZGxlcy5sZW5ndGgtMSkgeworICAgICAgICAgICAgICAgICAgICB0cnlXaWxkY2FyZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBidW5kbGVzLmxlbmd0aC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyeVdpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0cnlXaWxkY2FyZCkgeworICAgICAgICAgICAgICAgIExvY2FsZSB3aWxkY2FyZCA9IG5ldyBMb2NhbGUoInh4IiwgbG9jYWxlLmdldENvdW50cnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRWYXJpYW50KCkpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXNbaV0gPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoYmFzZU5hbWVzW2ldLCB3aWxkY2FyZCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZXNbaV0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL1JhbmdlRGF0ZVJ1bGUuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL1JhbmdlRGF0ZVJ1bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YzZhMzM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvUmFuZ2VEYXRlUnVsZS5qYXZhCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9SYW5nZURhdGVSdWxlLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDQgMDE6MDM6MzkgJCAKKyAqICRSZXZpc2lvbjogMS42ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIG9mIERhdGVSdWxlIHRoYXQgdGFrZXMgYSByYW5nZS4KKyAqIEBkcmFmdCBJQ1UgMi4yCisgKi8KK3B1YmxpYyBjbGFzcyBSYW5nZURhdGVSdWxlIGltcGxlbWVudHMgRGF0ZVJ1bGUKK3sKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBSYW5nZURhdGVSdWxlKCkKKyAgICB7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgUmFuZ2VEYXRlUnVsZShSYW5nZVtdIHJhbmdlcykKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnJhbmdlcy5hZGRFbGVtZW50KHJhbmdlc1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChEYXRlUnVsZSBydWxlKQorICAgIHsKKyAgICAgICAgYWRkKG5ldyBEYXRlKExvbmcuTUlOX1ZBTFVFKSwgcnVsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoRGF0ZSBzdGFydCwgRGF0ZVJ1bGUgcnVsZSkKKyAgICB7CisgICAgICAgIC8vIFRPRE86IEluc2VydCBpbiB0aGUgcmlnaHQgcGxhY2UKKyAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJBZGQ6ICIgKyBzdGFydC50b1N0cmluZygpKTsKKyAgICAgICAgcmFuZ2VzLmFkZEVsZW1lbnQobmV3IFJhbmdlKHN0YXJ0LCBydWxlKSk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgRGF0ZSBmaXJzdEFmdGVyKERhdGUgc3RhcnQpCisgICAgeworICAgICAgICAvLyBGaW5kIHRoZSByYW5nZSB0aGF0IEkgc2hvdWxkIGxvb2sgYXQKKyAgICAgICAgaW50IGluZGV4ID0gc3RhcnRJbmRleChzdGFydCk7CisgICAgICAgIERhdGUgcmVzdWx0ID0gbnVsbDsKKworICAgICAgICBSYW5nZSByID0gcmFuZ2VBdChpbmRleCk7CisgICAgICAgIFJhbmdlIGUgPSByYW5nZUF0KGluZGV4KzEpOworCisgICAgICAgIGlmIChyICE9IG51bGwgJiYgci5ydWxlICE9IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByLnJ1bGUuZmlyc3RCZXR3ZWVuKHN0YXJ0LCBlLnN0YXJ0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gci5ydWxlLmZpcnN0QWZ0ZXIoc3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgRGF0ZSBmaXJzdEJldHdlZW4oRGF0ZSBzdGFydCwgRGF0ZSBlbmQpCisgICAgeworICAgICAgICAvLyBGaW5kIHRoZSByYW5nZSB0aGF0IEkgc2hvdWxkIGxvb2sgYXQKKyAgICAgICAgaW50IGluZGV4ID0gc3RhcnRJbmRleChzdGFydCk7CisgICAgICAgIERhdGUgcmVzdWx0ID0gbnVsbDsKKworICAgICAgICBSYW5nZSBuZXh0ID0gcmFuZ2VBdChpbmRleCk7CisKKyAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBudWxsICYmIG5leHQgIT0gbnVsbCAmJiAhIG5leHQuc3RhcnQuYWZ0ZXIoZW5kKSkKKyAgICAgICAgeworICAgICAgICAgICAgUmFuZ2UgciA9IG5leHQ7CisgICAgICAgICAgICBuZXh0ID0gcmFuZ2VBdChpbmRleCsxKTsKKworICAgICAgICAgICAgaWYgKHIucnVsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgRGF0ZSBlID0gKG5leHQgIT0gbnVsbCAmJiBuZXh0LnN0YXJ0LmJlZm9yZShlbmQpKSA/IG5leHQuc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZW5kOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHIucnVsZS5maXJzdEJldHdlZW4oc3RhcnQsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc09uKERhdGUgZGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgZXZlbnQgb2NjdXJzIGF0IGxlYXN0IG9uY2UgYmV0d2VlbiB0aGUgdHdvCisgICAgICogZGF0ZXMgZ2l2ZW4uCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0JldHdlZW4oRGF0ZSBzdGFydCwgRGF0ZSBlbmQpCisgICAgeworICAgICAgICByZXR1cm4gZmlyc3RCZXR3ZWVuKHN0YXJ0LGVuZCkgPT0gbnVsbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHJhbmdlIHdob3NlIHN0YXJ0IGRhdGUgaXMgYmVmb3JlICJzdGFydCIKKyAgICAgKiByZXR1cm5zIGFuIGluZGV4ID49IHJhbmdlcy5zaXplKCkgaWYgdGhlcmUgaXMgbm9uZQorICAgICAqLworICAgIHByaXZhdGUgaW50IHN0YXJ0SW5kZXgoRGF0ZSBzdGFydCkKKyAgICB7CisgICAgICAgIGludCBsYXN0SW5kZXggPSByYW5nZXMuc2l6ZSgpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmFuZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBSYW5nZSByID0gKFJhbmdlKSByYW5nZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgaWYgKHN0YXJ0LmJlZm9yZShyLnN0YXJ0KSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGFzdEluZGV4OworICAgIH0KKworICAgIHByaXZhdGUgUmFuZ2UgcmFuZ2VBdChpbnQgaW5kZXgpCisgICAgeworICAgICAgIHJldHVybiAoaW5kZXggPCByYW5nZXMuc2l6ZSgpKSA/IChSYW5nZSkgcmFuZ2VzLmVsZW1lbnRBdChpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsOworICAgIH0KKworICAgIFZlY3RvciByYW5nZXMgPSBuZXcgVmVjdG9yKDIsMik7Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcml2YXRlcworLy8KKworY2xhc3MgUmFuZ2UgeworICAgIHB1YmxpYyBSYW5nZShEYXRlIHN0YXJ0LCBEYXRlUnVsZSBydWxlKSB7CisgICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDsKKyAgICAgICAgdGhpcy5ydWxlID0gcnVsZTsKKyAgICB9CisgICAgcHVibGljIERhdGUgICAgIHN0YXJ0OworICAgIHB1YmxpYyBEYXRlUnVsZSBydWxlOworfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9SYW5nZVZhbHVlSXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL1JhbmdlVmFsdWVJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1MWM4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9SYW5nZVZhbHVlSXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9SYW5nZVZhbHVlSXRlcmF0b3IuamF2YSx2ICQKKyogJERhdGU6IDIwMDIvMTIvMDMgMjA6NDY6MDkgJAorKiAkUmV2aXNpb246IDEuNSAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKKworLyoqCisgKiA8cD5JbnRlcmZhY2UgZm9yIGVuYWJsaW5nIGl0ZXJhdGlvbiBvdmVyIHNldHMgb2YgPGludCBpbmRleCwgaW50IHZhbHVlPiwgCisgKiB3aGVyZSBpbmRleCBpcyB0aGUgc29ydGVkIGludGVnZXIgaW5kZXggaW4gYXNjZW5kaW5nIG9yZGVyIGFuZCB2YWx1ZSwgaXRzIAorICogYXNzb2NpYXRlZCBpbnRlZ2VyIHZhbHVlLjwvcD4KKyAqIDxwPlRoZSByZXN1bHQgZm9yIGVhY2ggaXRlcmF0aW9uIGlzIHRoZSBjb25zZWN1dGl2ZSByYW5nZSBvZiAKKyAqIDxpbnQgaW5kZXgsIGludCB2YWx1ZT4gd2l0aCB0aGUgc2FtZSB2YWx1ZS4gUmVzdWx0IGlzIHJlcHJlc2VudGVkIGJ5IAorICogPHN0YXJ0LCBsaW1pdCwgdmFsdWU+IHdoZXJlPC9wPgorICogPHVsPgorICogPGxpPiBzdGFydCBpcyB0aGUgc3RhcnRpbmcgaW50ZWdlciBvZiB0aGUgcmVzdWx0IHJhbmdlCisgKiA8bGk+IGxpbWl0IGlzIDEgYWZ0ZXIgdGhlIG1heGltdW0gaW50ZWdlciB0aGF0IGZvbGxvd3Mgc3RhcnQsIHN1Y2ggdGhhdAorICogICAgICBhbGwgaW50ZWdlcnMgYmV0d2VlbiBzdGFydCBhbmQgKGxpbWl0IC0gMSksIGluY2x1c2l2ZSwgaGF2ZSB0aGUgc2FtZSAKKyAqICAgICAgYXNzb2NpYXRlZCBpbnRlZ2VyIHZhbHVlLgorICogPGxpPiB2YWx1ZSBpcyB0aGUgaW50ZWdlciB2YWx1ZSB0aGF0IGFsbCBpbnRlZ2VycyBmcm9tIHN0YXJ0IHRvIChsaW1pdCAtIDEpIAorICogICAgICBzaGFyZSBpbiBjb21tb24uCisgKiA8L3VsPgorICogPHA+CisgKiBIZW5jZSB2YWx1ZShzdGFydCkgPSB2YWx1ZShzdGFydCArIDEpID0gLi4uLiA9IHZhbHVlKHN0YXJ0ICsgbikgPSAuLi4uID0KKyAqIHZhbHVlKGxpbWl0IC0gMSkuIEhvd2V2ZXIgdmFsdWUoc3RhcnQgLTEpICE9IHZhbHVlKHN0YXJ0KSBhbmQgCisgKiB2YWx1ZShsaW1pdCkgIT0gdmFsdWUoc3RhcnQpLgorICogPC9wPgorICogPHA+TW9zdCBpbXBsZW1lbnRhdGlvbnMgd2lsbCBiZSBjcmVhdGVkIGJ5IGZhY3RvcnkgbWV0aG9kcywgc3VjaCBhcyB0aGUKKyAqIGNoYXJhY3RlciB0eXBlIGl0ZXJhdG9yIGluIFVDaGFyYWN0ZXIuZ2V0VHlwZUl0ZXJhdG9yLiBTZWUgZXhhbXBsZSBiZWxvdy4KKyAqIDwvcD4KKyAqIEV4YW1wbGUgb2YgdXNlOjxicj4KKyAqIDxwcmU+CisgKiBSYW5nZVZhbHVlSXRlcmF0b3IgaXRlcmF0b3IgPSBVQ2hhcmFjdGVyLmdldFR5cGVJdGVyYXRvcigpOworICogUmFuZ2VWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQgcmVzdWx0ID0gbmV3IFJhbmdlVmFsdWVJdGVyYXRvci5FbGVtZW50KCk7CisgKiB3aGlsZSAoaXRlcmF0b3IubmV4dChyZXN1bHQpKSB7CisgKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb2RlcG9pbnQgXFx1IiArIAorICogICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKHJlc3VsdC5zdGFydCkgKyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIiB0byBjb2RlcG9pbnQgXFx1IiArCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcocmVzdWx0LmxpbWl0IC0gMSkgKyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIiBoYXMgdGhlIGNoYXJhY3RlciB0eXBlICIgKyByZXN1bHQudmFsdWUpOworICogfQorICogPC9wcmU+CisgKiBAYXV0aG9yIHN5bndlZQorICogQGRyYWZ0IElDVSAyLjEKKyAqLworcHVibGljIGludGVyZmFjZSBSYW5nZVZhbHVlSXRlcmF0b3IKK3sKKyAgICAvLyBwdWJsaWMgaW5uZXIgY2xhc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiBSZXR1cm4gcmVzdWx0IHdyYXBwZXIgZm9yIGNvbS5pYm0uaWN1LnV0aWwuUmFuZ2VWYWx1ZUl0ZXJhdG9yLgorICAgICogU3RvcmVzIHRoZSBzdGFydCBhbmQgbGltaXQgb2YgdGhlIGNvbnRpbm91cyByZXN1bHQgcmFuZ2UgYW5kIHRoZQorICAgICogY29tbW9uIHZhbHVlIGFsbCBpbnRlZ2VycyBiZXR3ZWVuIFtzdGFydCwgbGltaXQgLSAxXSBoYXMuCisgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICovCisgICAgcHVibGljIGNsYXNzIEVsZW1lbnQKKyAgICB7CisgICAgICAgIC8vIHB1YmxpYyBkYXRhIG1lbWJlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAqIFN0YXJ0aW5nIGludGVnZXIgb2YgdGhlIGNvbnRpbnVvdXMgcmVzdWx0IHJhbmdlIHRoYXQgaGFzIHRoZSBzYW1lIAorICAgICAgICAqIHZhbHVlCisgICAgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBzdGFydDsKKyAgICAgICAgLyoqCisgICAgICAgICogKEVuZCArIDEpIGludGVnZXIgb2YgY29udGludW91cyByZXN1bHQgcmFuZ2UgdGhhdCBoYXMgdGhlIHNhbWUgCisgICAgICAgICogdmFsdWUKKyAgICAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGxpbWl0OworICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIHRoZSBjb21tb24gdmFsdWUgb2YgdGhlIGNvbnRpbm91cyByZXN1bHQgcmFuZ2UKKyAgICAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAgICAqLyAKKyAgICAgICAgcHVibGljIGludCB2YWx1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIHB1YmxpYyBjb25zdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVtcHR5IGRlZmF1bHQgY29uc3RydWN0b3IgdG8gbWFrZSBqYXZhZG9jIGhhcHB5CisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgRWxlbWVudCgpIAorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gcHVibGljIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICogPHA+R2V0cyB0aGUgbmV4dCBtYXhpbWFsIHJlc3VsdCByYW5nZSB3aXRoIGEgY29tbW9uIHZhbHVlIGFuZCByZXR1cm5zIAorICAgICogdHJ1ZSBpZiB3ZSBhcmUgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGl0ZXJhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLjwvcD4KKyAgICAqIDxwPklmIHRoZSByZXR1cm4gYm9vbGVhbiBpcyBhIGZhbHNlLCB0aGUgY29udGVudHMgb2YgZWxlbWVudHMgd2lsbCBub3QKKyAgICAqIGJlIHVwZGF0ZWQuPC9wPgorICAgICogQHBhcmFtIGVsZW1lbnQgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCByYW5nZSBhbmQgdmFsdWUKKyAgICAqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGl0ZXJhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICogQHNlZSBFbGVtZW50CisgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICovCisgICAgcHVibGljIGJvb2xlYW4gbmV4dChFbGVtZW50IGVsZW1lbnQpOworICAgIAorICAgIC8qKgorICAgICogUmVzZXRzIHRoZSBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpdGVyYXRpb24uCisgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICovCisgICAgcHVibGljIHZvaWQgcmVzZXQoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9TaW1wbGVEYXRlUnVsZS5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvU2ltcGxlRGF0ZVJ1bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MGM2ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvU2ltcGxlRGF0ZVJ1bGUuamF2YQpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3V0aWwvU2ltcGxlRGF0ZVJ1bGUuamF2YSx2ICQgCisgKiAkRGF0ZTogMjAwMi8xMi8wNCAwMTowMzozOSAkIAorICogJFJldmlzaW9uOiAxLjggJAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lOworCisvKioKKyAqIFNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBEYXRlUnVsZS4KKyAqIEBkcmFmdCBJQ1UgMi4yCisgKi8KK3B1YmxpYyBjbGFzcyBTaW1wbGVEYXRlUnVsZSBpbXBsZW1lbnRzIERhdGVSdWxlCit7CisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgcnVsZSBmb3IgYSBmaXhlZCBkYXRlIHdpdGhpbiBhIG1vbnRoCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgICAgICBUaGUgbW9udGggaW4gd2hpY2ggdGhpcyBydWxlIG9jY3VycyAoMC1iYXNlZCkuCisgICAgICogQHBhcmFtIGRheU9mTW9udGggICAgVGhlIGRhdGUgaW4gdGhhdCBtb250aCAoMS1iYXNlZCkuCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlRGF0ZVJ1bGUoaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCkKKyAgICB7CisgICAgICAgIHRoaXMubW9udGggICAgICA9IG1vbnRoOworICAgICAgICB0aGlzLmRheU9mTW9udGggPSBkYXlPZk1vbnRoOworICAgICAgICB0aGlzLmRheU9mV2VlayAgPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIHJ1bGUgZm9yIGEgd2Vla2RheSB3aXRoaW4gYSBtb250aCwgZS5nLiB0aGUgZmlyc3QgTW9uZGF5LgorICAgICAqCisgICAgICogQHBhcmFtIG1vbnRoICAgICAgICAgVGhlIG1vbnRoIGluIHdoaWNoIHRoaXMgcnVsZSBvY2N1cnMgKDAtYmFzZWQpLgorICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoICAgIEEgZGF0ZSB3aXRoaW4gdGhhdCBtb250aCAoMS1iYXNlZCkuCisgICAgICogQHBhcmFtIGRheU9mV2VlayAgICAgVGhlIGRheSBvZiB0aGUgd2VlayBvbiB3aGljaCB0aGlzIHJ1bGUgb2NjdXJzLgorICAgICAqIEBwYXJhbSBhZnRlciAgICAgICAgIElmIHRydWUsIHRoaXMgcnVsZSBzZWxlY3RzIHRoZSBmaXJzdCBkYXlPZldlZWsKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBvbiBvciBhZnRlciBkYXlPZk1vbnRoLiAgSWYgZmFsc2UsIHRoZSBydWxlIHNlbGVjdHMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgZGF5T2ZXZWVrIG9uIG9yIGJlZm9yZSBkYXlPZk1vbnRoLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIFNpbXBsZURhdGVSdWxlKGludCBtb250aCwgaW50IGRheU9mTW9udGgsIGludCBkYXlPZldlZWssIGJvb2xlYW4gYWZ0ZXIpCisgICAgeworICAgICAgICB0aGlzLm1vbnRoICAgICAgPSBtb250aDsKKyAgICAgICAgdGhpcy5kYXlPZk1vbnRoID0gZGF5T2ZNb250aDsKKyAgICAgICAgdGhpcy5kYXlPZldlZWsgID0gYWZ0ZXIgPyBkYXlPZldlZWsgOiAtZGF5T2ZXZWVrOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZmlyc3Qgb2NjdXJyYW5jZSBvZiB0aGUgZXZlbnQgcmVwcmVzZW50ZWQgYnkgdGhpcyBydWxlCisgICAgICogdGhhdCBpcyBvbiBvciBhZnRlciB0aGUgZ2l2ZW4gc3RhcnQgZGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGFydCBPbmx5IG9jY3VycmFuY2VzIG9uIG9yIGFmdGVyIHRoaXMgZGF0ZSBhcmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgICAgVGhlIGRhdGUgb24gd2hpY2ggdGhpcyBldmVudCBvY2N1cnMsIG9yIG51bGwgaWYgaXQKKyAgICAgKiAgICAgICAgICAgICAgZG9lcyBub3Qgb2NjdXIgb24gb3IgYWZ0ZXIgdGhlIHN0YXJ0IGRhdGUuCisgICAgICoKKyAgICAgKiBAc2VlICNmaXJzdEJldHdlZW4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBEYXRlIGZpcnN0QWZ0ZXIoRGF0ZSBzdGFydCkKKyAgICB7CisgICAgICAgIGlmIChzdGFydERhdGUgIT0gbnVsbCAmJiBzdGFydC5iZWZvcmUoc3RhcnREYXRlKSkgeworICAgICAgICAgICAgc3RhcnQgPSBzdGFydERhdGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRvRmlyc3RCZXR3ZWVuKHN0YXJ0LCBlbmREYXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IG9jY3VycmFuY2Ugb2YgdGhlIGV2ZW50IHJlcHJlc2VudGVkIGJ5IHRoaXMgcnVsZQorICAgICAqIHRoYXQgaXMgb24gb3IgYWZ0ZXIgdGhlIGdpdmVuIHN0YXJ0IGRhdGUgYW5kIGJlZm9yZSB0aGUgZ2l2ZW4KKyAgICAgKiBlbmQgZGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGFydCBPbmx5IG9jY3VycmFuY2VzIG9uIG9yIGFmdGVyIHRoaXMgZGF0ZSBhcmUgcmV0dXJuZWQuCisgICAgICogQHBhcmFtIGVuZCAgIE9ubHkgb2NjdXJyYW5jZXMgYmVmb3JlIHRoaXMgZGF0ZSBhcmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgICAgVGhlIGRhdGUgb24gd2hpY2ggdGhpcyBldmVudCBvY2N1cnMsIG9yIG51bGwgaWYgaXQKKyAgICAgKiAgICAgICAgICAgICAgZG9lcyBub3Qgb2NjdXIgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcy4KKyAgICAgKgorICAgICAqIEBzZWUgI2ZpcnN0QWZ0ZXIKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBEYXRlIGZpcnN0QmV0d2VlbihEYXRlIHN0YXJ0LCBEYXRlIGVuZCkKKyAgICB7CisgICAgICAgIC8vIFBpbiB0byB0aGUgbWluL21heCBkYXRlcyBmb3IgdGhpcyBydWxlCisgICAgICAgIGlmIChzdGFydERhdGUgIT0gbnVsbCAmJiBzdGFydC5iZWZvcmUoc3RhcnREYXRlKSkgeworICAgICAgICAgICAgc3RhcnQgPSBzdGFydERhdGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuZERhdGUgIT0gbnVsbCAmJiBlbmQuYWZ0ZXIoZW5kRGF0ZSkpIHsKKyAgICAgICAgICAgIGVuZCA9IGVuZERhdGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRvRmlyc3RCZXR3ZWVuKHN0YXJ0LCBlbmQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgZXZlbnQgb2NjdXJzIG9uIHRoZSBnaXZlbiBkYXRlLiAgVGhpcyBkb2VzCisgICAgICogPGVtPm5vdDwvZW0+IHRha2UgdGltZSBvZiBkYXkgaW50byBhY2NvdW50OyBpbnN0ZWFkIGl0IGNoZWNrcworICAgICAqIHdoZXRoZXIgdGhpcyBldmVudCBhbmQgdGhlIGdpdmVuIGRhdGUgYXJlIG9uIHRoZSBzYW1lIGRheS4KKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHN1Y2ggYXMgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGdpdmVuCisgICAgICogZGF5IGlzIGEgaG9saWRheS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXRlICBUaGUgZGF0ZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJuICAgICAgdHJ1ZSBpZiB0aGlzIGV2ZW50IG9jY3VycyBvbiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNPbihEYXRlIGRhdGUpCisgICAgeworICAgICAgICBpZiAoc3RhcnREYXRlICE9IG51bGwgJiYgZGF0ZS5iZWZvcmUoc3RhcnREYXRlKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChlbmREYXRlICE9IG51bGwgJiYgZGF0ZS5hZnRlcihlbmREYXRlKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgQ2FsZW5kYXIgYyA9IGNhbGVuZGFyOworCisgICAgICAgIHN5bmNocm9uaXplZChjKSB7CisgICAgICAgICAgICBjLnNldFRpbWUoZGF0ZSk7CisKKyAgICAgICAgICAgIGludCBkYXlPZlllYXIgPSBjLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUik7CisKKyAgICAgICAgICAgIGMuc2V0VGltZShjb21wdXRlSW5ZZWFyKGMuZ2V0KENhbGVuZGFyLllFQVIpLCBjKSk7CisKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIgIGlzT246IGRheU9mWWVhciA9ICIgKyBkYXlPZlllYXIpOworICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgaG9saWRheSAgID0gIiArIGMuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSk7CisKKyAgICAgICAgICAgIHJldHVybiBjLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikgPT0gZGF5T2ZZZWFyOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgd2hldGhlciB0aGlzIGV2ZW50IG9jY3VycyBhdCBsZWFzdCBvbmNlIGJldHdlZW4gdGhlIHR3bworICAgICAqIGRhdGVzIGdpdmVuLgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNCZXR3ZWVuKERhdGUgc3RhcnQsIERhdGUgZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpcnN0QmV0d2VlbihzdGFydCwgZW5kKSAhPSBudWxsOyAvLyBUT0RPOiBvcHRpbWl6ZT8KKyAgICB9CisKKyAgICBwcml2YXRlIERhdGUgZG9GaXJzdEJldHdlZW4oRGF0ZSBzdGFydCwgRGF0ZSBlbmQpCisgICAgeworICAgICAgICBDYWxlbmRhciBjID0gY2FsZW5kYXI7CisKKyAgICAgICAgc3luY2hyb25pemVkKGMpIHsKKyAgICAgICAgICAgIGMuc2V0VGltZShzdGFydCk7CisKKyAgICAgICAgICAgIGludCB5ZWFyID0gYy5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgICAgICBpbnQgbW9udGggPSBjLmdldChDYWxlbmRhci5NT05USCk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGlzIGVhcmxpZXIgaW4gdGhlIHllYXIgdGhhbiB0aGUgc3RhcnQgZGF0ZQorICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBnbyB0byB0aGUgbmV4dCB5ZWFyLgorICAgICAgICAgICAgaWYgKG1vbnRoID4gdGhpcy5tb250aCkgeworICAgICAgICAgICAgICAgIHllYXIrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGVuIHRoZSBydWxlIGxhbmRzIGluIHRoZSBnaXZlbiB5ZWFyCisgICAgICAgICAgICBEYXRlIHJlc3VsdCA9IGNvbXB1dGVJblllYXIoeWVhciwgYyk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGlzIGluIHRoZSBzYW1lIG1vbnRoIGFzIHRoZSBzdGFydCBkYXRlLCBpdCdzIHBvc3NpYmxlCisgICAgICAgICAgICAvLyB0byBnZXQgYSByZXN1bHQgdGhhdCdzIGJlZm9yZSB0aGUgc3RhcnQuICBJZiBzbywgZ28gdG8gbmV4dCB5ZWFyLgorICAgICAgICAgICAgaWYgKG1vbnRoID09IHRoaXMubW9udGggJiYgcmVzdWx0LmJlZm9yZShzdGFydCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlSW5ZZWFyKHllYXIrMSwgYyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbmQgIT0gbnVsbCAmJiByZXN1bHQuYWZ0ZXIoZW5kKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgRGF0ZSBjb21wdXRlSW5ZZWFyKGludCB5ZWFyLCBDYWxlbmRhciBjKQorICAgIHsKKyAgICAgICAgaWYgKGMgPT0gbnVsbCkgYyA9IGNhbGVuZGFyOworCisgICAgICAgIHN5bmNocm9uaXplZChjKSB7CisgICAgICAgICAgICBjLmNsZWFyKCk7CisgICAgICAgICAgICBjLnNldChDYWxlbmRhci5FUkEsIGMuZ2V0TWF4aW11bShDYWxlbmRhci5FUkEpKTsKKyAgICAgICAgICAgIGMuc2V0KENhbGVuZGFyLllFQVIsIHllYXIpOworICAgICAgICAgICAgYy5zZXQoQ2FsZW5kYXIuTU9OVEgsIG1vbnRoKTsKKyAgICAgICAgICAgIGMuc2V0KENhbGVuZGFyLkRBVEUsIGRheU9mTW9udGgpOworCisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiICAgICBjb21wdXRlSW5ZZWFyOiBzdGFydCBhdCAiICsgYy5nZXRUaW1lKCkudG9TdHJpbmcoKSk7CisKKyAgICAgICAgICAgIGlmIChkYXlPZldlZWsgIT0gMCkgeworICAgICAgICAgICAgICAgIGMuc2V0VGltZShjLmdldFRpbWUoKSk7ICAgICAgICAvLyBKREsgMS4xLjIgd29ya2Fyb3VuZAorICAgICAgICAgICAgICAgIGludCB3ZWVrZGF5ID0gYy5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOworCisgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICAgICAgICAgICAgd2Vla2RheSA9ICIgKyB3ZWVrZGF5KTsKKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgICAgICAgICAgICBkYXlPZlllYXIgPSAiICsgYy5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpKTsKKworICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGRheU9mV2VlayA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0aGUgZmlyc3Qgb2NjdXJyYW5jZSBvZiB0aGUgZ2l2ZW4gZGF5IG9mIHRoZSB3ZWVrCisgICAgICAgICAgICAgICAgICAgIC8vIG9uIG9yIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGF0ZSBpbiB0aGUgbW9udGguCisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gKGRheU9mV2VlayAtIHdlZWtkYXkgKyA3KSAlIDc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRheU9mV2VlayA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0aGUgZmlyc3Qgb2NjdXJyYW5jZSBvZiB0aGUgKC1kYXlPZldlZWspCisgICAgICAgICAgICAgICAgICAgIC8vIG9uIG9yIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGRhdGUgaW4gdGhlIG1vbnRoLgorICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IC0oKGRheU9mV2VlayArIHdlZWtkYXkgKyA3KSAlIDcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgICAgICAgICAgICBhZGRpbmcgIiArIGRlbHRhICsgIiBkYXlzIik7CisgICAgICAgICAgICAgICAgYy5hZGQoQ2FsZW5kYXIuREFURSwgZGVsdGEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYy5nZXRUaW1lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENhbGVuZGFyKENhbGVuZGFyIGMpIHsKKyAgICAgICAgY2FsZW5kYXIgPSBjOworICAgIH0KKworICAgIHN0YXRpYyBHcmVnb3JpYW5DYWxlbmRhciBnQ2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIobmV3IFNpbXBsZVRpbWVab25lKDAsICJVVEMiKSk7CisKKyAgICBDYWxlbmRhciBjYWxlbmRhciA9IGdDYWxlbmRhcjsKKworICAgIHByaXZhdGUgaW50ICAgICBtb250aDsKKyAgICBwcml2YXRlIGludCAgICAgZGF5T2ZNb250aDsKKyAgICBwcml2YXRlIGludCAgICAgZGF5T2ZXZWVrOworCisgICAgcHJpdmF0ZSBEYXRlICAgIHN0YXJ0RGF0ZSA9IG51bGw7CisgICAgcHJpdmF0ZSBEYXRlICAgIGVuZERhdGUgPSBudWxsOworfTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL1NpbXBsZUhvbGlkYXkuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL1NpbXBsZUhvbGlkYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iY2RjNmJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvU2ltcGxlSG9saWRheS5qYXZhCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9TaW1wbGVIb2xpZGF5LmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDQgMDE6MDM6MzkgJCAKKyAqICRSZXZpc2lvbjogMS42ICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CisKKy8qKgorICogQSBob2xpZGF5IHdob3NlIGRhdGUgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGEgU2ltcGxlRGF0ZVJ1bGUgb2JqZWN0CisgKgorICogQHNlZSBTaW1wbGVEYXRlUnVsZQorICogQGRyYWZ0IElDVSAyLjIKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZUhvbGlkYXkgZXh0ZW5kcyBIb2xpZGF5IHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGhvbGlkYXkKKyAgICAgKgorICAgICAqIEBwYXJhbSBtb250aCAgICAgICAgIFRoZSBtb250aCBpbiB3aGljaCB0aGlzIGhvbGlkYXkgb2NjdXJzICgwLWJhc2VkKQorICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoICAgIFRoZSBkYXRlIHdpdGhpbiB0aGUgbW9udGggKDEtYmFzZWQpLgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgIFRoZSBuYW1lIG9mIHRoaXMgaG9saWRheS4gIFRoaXMgc3RyaW5nIGlzIHVzZWQgYXMgYSBrZXkKKyAgICAgKiAgICAgICAgICAgICAgdG8gbG9vayB1cCB0aGUgaG9saWRheSdzIG5hbWUgYSByZXNvdXJjZSBidW5kbGUuCisgICAgICogICAgICAgICAgICAgIElmIHRoZSBuYW1lIGlzIG5vdCBmb3VuZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlLAorICAgICAqICAgICAgICAgICAgICBnZXREaXNwbGF5TmFtZSB3aWxsIHJldHVybiB0aGlzIHN0cmluZyBpbnN0ZWFkLgorICAgICAqCisgICAgICogQHNlZSBTaW1wbGVEYXRlUnVsZQorICAgICAqIEBzZWUgSG9saWRheSNnZXREaXNwbGF5TmFtZShqYXZhLnV0aWwuTG9jYWxlKQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIFNpbXBsZUhvbGlkYXkoaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCwgU3RyaW5nIG5hbWUpCisgICAgeworICAgICAgICBzdXBlcihuYW1lLCBuZXcgU2ltcGxlRGF0ZVJ1bGUobW9udGgsIGRheU9mTW9udGgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGhvbGlkYXkKKyAgICAgKgorICAgICAqIEBwYXJhbSBtb250aCAgICAgICAgIFRoZSBtb250aCBpbiB3aGljaCB0aGlzIGhvbGlkYXkgb2NjdXJzICgwLWJhc2VkKQorICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoICAgIFRoZSBkYXRlIHdpdGhpbiB0aGUgbW9udGggKDEtYmFzZWQpLgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgIFRoZSBuYW1lIG9mIHRoaXMgaG9saWRheS4gIFRoaXMgc3RyaW5nIGlzIHVzZWQgYXMgYSBrZXkKKyAgICAgKiAgICAgICAgICAgICAgdG8gbG9vayB1cCB0aGUgaG9saWRheSdzIG5hbWUgYSByZXNvdXJjZSBidW5kbGUuCisgICAgICogICAgICAgICAgICAgIElmIHRoZSBuYW1lIGlzIG5vdCBmb3VuZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlLAorICAgICAqICAgICAgICAgICAgICBnZXREaXNwbGF5TmFtZSB3aWxsIHJldHVybiB0aGlzIHN0cmluZyBpbnN0ZWFkLgorICAgICAqCisgICAgICogQHNlZSBTaW1wbGVEYXRlUnVsZQorICAgICAqIEBzZWUgSG9saWRheSNnZXREaXNwbGF5TmFtZShqYXZhLnV0aWwuTG9jYWxlKQorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlSG9saWRheShpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoLCBTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRZZWFyKQorICAgIHsKKyAgICAgICAgc3VwZXIobmFtZSwgbnVsbCk7CisKKyAgICAgICAgc2V0UmFuZ2Uoc3RhcnRZZWFyLCAwLCBuZXcgU2ltcGxlRGF0ZVJ1bGUobW9udGgsIGRheU9mTW9udGgpICk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBob2xpZGF5CisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgICAgICBUaGUgbW9udGggaW4gd2hpY2ggdGhpcyBob2xpZGF5IG9jY3VycyAoMC1iYXNlZCkKKyAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCAgICBUaGUgZGF0ZSB3aXRoaW4gdGhlIG1vbnRoICgxLWJhc2VkKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lICBUaGUgbmFtZSBvZiB0aGlzIGhvbGlkYXkuICBUaGlzIHN0cmluZyBpcyB1c2VkIGFzIGEga2V5CisgICAgICogICAgICAgICAgICAgIHRvIGxvb2sgdXAgdGhlIGhvbGlkYXkncyBuYW1lIGEgcmVzb3VyY2UgYnVuZGxlLgorICAgICAqICAgICAgICAgICAgICBJZiB0aGUgbmFtZSBpcyBub3QgZm91bmQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZSwKKyAgICAgKiAgICAgICAgICAgICAgZ2V0RGlzcGxheU5hbWUgd2lsbCByZXR1cm4gdGhpcyBzdHJpbmcgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIEBzZWUgU2ltcGxlRGF0ZVJ1bGUKKyAgICAgKiBAc2VlIEhvbGlkYXkjZ2V0RGlzcGxheU5hbWUoamF2YS51dGlsLkxvY2FsZSkKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqCisgICAgICovCisgICAgcHVibGljIFNpbXBsZUhvbGlkYXkoaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCwgU3RyaW5nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0WWVhciwgaW50IGVuZFllYXIpCisgICAgeworICAgICAgICBzdXBlcihuYW1lLCBudWxsKTsKKworICAgICAgICBzZXRSYW5nZShzdGFydFllYXIsIGVuZFllYXIsIG5ldyBTaW1wbGVEYXRlUnVsZShtb250aCwgZGF5T2ZNb250aCkgKTsKKyAgICB9CisKKyAgICAvKiogLy8gVE9ETzogcmVtb3ZlCisgICAgICogQ29uc3RydWN0IGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBob2xpZGF5CisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggVGhlIG1vbnRoIGluIHdoaWNoIHRoaXMgaG9saWRheSBvY2N1cnMgKDAtYmFzZWQpCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCBBIGRhdGUgd2l0aGluIHRoZSBtb250aCAoMS1iYXNlZCkuICBUaGUKKyAgICAgKiAgICAgIGludGVycHJldGF0aW9uIG9mIHRoaXMgcGFyYW1ldGVyIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mCisgICAgICogICAgICA8Y29kZT5kYXlPZldlZWs8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtIGRheU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVrIG9uIHdoaWNoIHRoaXMgaG9saWRheSBvY2N1cnMuCisgICAgICogICAgICBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgbGVnYWw6IDx1bD4KKyAgICAgKiAgICAgIDxsaT5kYXlPZldlZWsgPT0gMCAtIHVzZSBkYXlPZk1vbnRoIG9ubHkKKyAgICAgKiAgICAgIDxsaT5kYXlPZldlZWsgPCAwICAtIHVzZSBsYXN0IC1kYXlPZldlZWsgYmVmb3JlIG9yIG9uIGRheU9mTW9udGgKKyAgICAgKiAgICAgIDxsaT5kYXlPZldlZWsgPiAwICAtIHVzZSBmaXJzdCBkYXlPZldlZWsgYWZ0ZXIgb3Igb24gZGF5T2ZNb250aAorICAgICAqICAgICAgPC91bD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lICBUaGUgbmFtZSBvZiB0aGlzIGhvbGlkYXkuICBUaGlzIHN0cmluZyBpcyB1c2VkIGFzIGEga2V5CisgICAgICogICAgICAgICAgICAgIHRvIGxvb2sgdXAgdGhlIGhvbGlkYXkncyBuYW1lIGEgcmVzb3VyY2UgYnVuZGxlLgorICAgICAqICAgICAgICAgICAgICBJZiB0aGUgbmFtZSBpcyBub3QgZm91bmQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZSwKKyAgICAgKiAgICAgICAgICAgICAgZ2V0RGlzcGxheU5hbWUgd2lsbCByZXR1cm4gdGhpcyBzdHJpbmcgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIEBzZWUgU2ltcGxlRGF0ZVJ1bGUKKyAgICAgKiBAc2VlIEhvbGlkYXkjZ2V0RGlzcGxheU5hbWUoamF2YS51dGlsLkxvY2FsZSkKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqCisgICAgICovCisgICAgcHVibGljIFNpbXBsZUhvbGlkYXkoaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCwgaW50IGRheU9mV2VlaywgU3RyaW5nIG5hbWUpCisgICAgeworICAgICAgICBzdXBlcihuYW1lLCBuZXcgU2ltcGxlRGF0ZVJ1bGUobW9udGgsIGRheU9mTW9udGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5T2ZXZWVrID4gMCA/IGRheU9mV2VlayA6IC0gZGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheU9mV2VlayA+IDApICk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlSG9saWRheShpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoLCBpbnQgZGF5T2ZXZWVrLCBTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydFllYXIpCisgICAgeworICAgICAgICBzdXBlcihuYW1lLCBudWxsKTsKKworICAgICAgICBzZXRSYW5nZShzdGFydFllYXIsIDAsIG5ldyBTaW1wbGVEYXRlUnVsZShtb250aCwgZGF5T2ZNb250aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5T2ZXZWVrID4gMCA/IGRheU9mV2VlayA6IC0gZGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlPZldlZWsgPiAwKSApOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlSG9saWRheShpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoLCBpbnQgZGF5T2ZXZWVrLCBTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydFllYXIsIGludCBlbmRZZWFyKQorICAgIHsKKyAgICAgICAgc3VwZXIobmFtZSwgbnVsbCk7CisKKyAgICAgICAgc2V0UmFuZ2Uoc3RhcnRZZWFyLCBlbmRZZWFyLCBuZXcgU2ltcGxlRGF0ZVJ1bGUobW9udGgsIGRheU9mTW9udGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheU9mV2VlayA+IDAgPyBkYXlPZldlZWsgOiAtIGRheU9mV2VlaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5T2ZXZWVrID4gMCkgKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0WWVhciwgaW50IGVuZFllYXIsIERhdGVSdWxlIHJ1bGUpCisgICAgeworICAgICAgICBSYW5nZURhdGVSdWxlIHJhbmdlUnVsZSA9IG5ldyBSYW5nZURhdGVSdWxlKCk7CisKKyAgICAgICAgaWYgKHN0YXJ0WWVhciAhPSAwKSB7CisgICAgICAgICAgICBDYWxlbmRhciBzdGFydCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihzdGFydFllYXIsIENhbGVuZGFyLkpBTlVBUlksIDEpOworICAgICAgICAgICAgcmFuZ2VSdWxlLmFkZChzdGFydC5nZXRUaW1lKCksIHJ1bGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2VSdWxlLmFkZChydWxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW5kWWVhciAhPSAwKSB7CisgICAgICAgICAgICBEYXRlIGVuZCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihlbmRZZWFyLCBDYWxlbmRhci5ERUNFTUJFUiwgMzEpLmdldFRpbWUoKTsKKyAgICAgICAgICAgIHJhbmdlUnVsZS5hZGQoZW5kLCBudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldFJ1bGUocmFuZ2VSdWxlKTsKKyAgICB9CisKKyAgICAvKiBDb25zdGFudHMgZm9yIGhvbGlkYXlzIHRoYXQgYXJlIGNvbW1vbiB0aHJvdWdob3V0IHRoZSBXZXN0ZXJuCisgICAgICogYW5kIENocmlzdGlhbiB3b3JsZHMuLi4uICovCisKKyAgICAvKioKKyAgICAgKiBOZXcgWWVhcidzIERheSAtIEphbnVhcnkgMXN0CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXBsZUhvbGlkYXkgTkVXX1lFQVJTX0RBWSA9CisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkpBTlVBUlksICAgIDEsICAiTmV3IFllYXIncyBEYXkiKTsKKworICAgIC8qKgorICAgICAqIEVwaXBoYW55LCBKYW51YXJ5IDZ0aAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVIb2xpZGF5IEVQSVBIQU5ZID0KKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuSkFOVUFSWSwgICAgNiwgICJFcGlwaGFueSIpOworCisgICAgLyoqCisgICAgICogTWF5IERheSwgTWF5IDFzdAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVIb2xpZGF5IE1BWV9EQVkgPQorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5NQVksICAgICAgICAxLCAgIk1heSBEYXkiKTsKKworICAgIC8qKgorICAgICAqIEFzc3VtcHRpb24sIEF1Z3VzdCAxNXRoCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXBsZUhvbGlkYXkgQVNTVU1QVElPTiA9CisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLkFVR1VTVCwgICAgMTUsICAiQXNzdW1wdGlvbiIpOworCisgICAgLyoqCisgICAgICogQWxsIFNhaW50cycgRGF5LCBOb3ZlbWJlciAxc3QKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlSG9saWRheSBBTExfU0FJTlRTX0RBWSA9CisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk5PVkVNQkVSLCAgIDEsICAiQWxsIFNhaW50cycgRGF5Iik7CisKKyAgICAvKioKKyAgICAgKiBBbGwgU291bHMnIERheSwgTm92ZW1iZXIgMXN0CisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXBsZUhvbGlkYXkgQUxMX1NPVUxTX0RBWSA9CisgICAgICAgIG5ldyBTaW1wbGVIb2xpZGF5KENhbGVuZGFyLk5PVkVNQkVSLCAgIDIsICAiQWxsIFNvdWxzJyBEYXkiKTsKKworICAgIC8qKgorICAgICAqIEltbWFjdWxhdGUgQ29uY2VwdGlvbiwgRGVjZW1iZXIgOHRoCisgICAgICogQGRyYWZ0IElDVSAyLjIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXBsZUhvbGlkYXkgSU1NQUNVTEFURV9DT05DRVBUSU9OID0KKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuREVDRU1CRVIsICAgOCwgICJJbW1hY3VsYXRlIENvbmNlcHRpb24iKTsKKworICAgIC8qKgorICAgICAqIENocmlzdG1hcyBFdmUsIERlY2VtYmVyIDI0dGgKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlSG9saWRheSBDSFJJU1RNQVNfRVZFID0KKyAgICAgICAgbmV3IFNpbXBsZUhvbGlkYXkoQ2FsZW5kYXIuREVDRU1CRVIsICAyNCwgICJDaHJpc3RtYXMgRXZlIik7CisKKyAgICAvKioKKyAgICAgKiBDaHJpc3RtYXMsIERlY2VtYmVyIDI1dGgKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlSG9saWRheSBDSFJJU1RNQVMgPQorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5ERUNFTUJFUiwgIDI1LCAgIkNocmlzdG1hcyIpOworCisgICAgLyoqCisgICAgICogQm94aW5nIERheSwgRGVjZW1iZXIgMjZ0aAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVIb2xpZGF5IEJPWElOR19EQVkgPQorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5ERUNFTUJFUiwgIDI2LCAgIkJveGluZyBEYXkiKTsKKworICAgIC8qKgorICAgICAqIFNhaW50IFN0ZXBoZW4ncyBEYXksIERlY2VtYmVyIDI2dGgKKyAgICAgKiBAZHJhZnQgSUNVIDIuMgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlSG9saWRheSBTVF9TVEVQSEVOU19EQVkgPQorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5ERUNFTUJFUiwgIDI2LCAgIlN0LiBTdGVwaGVuJ3MgRGF5Iik7CisKKyAgICAvKioKKyAgICAgKiBOZXcgWWVhcidzIEV2ZSwgRGVjZW1iZXIgMzFzdAorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVIb2xpZGF5IE5FV19ZRUFSU19FVkUgPQorICAgICAgICBuZXcgU2ltcGxlSG9saWRheShDYWxlbmRhci5ERUNFTUJFUiwgIDMxLCAgIk5ldyBZZWFyJ3MgRXZlIik7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL1NpbXBsZVRpbWVab25lLmphdmEgYi9zcmMvY29tL2libS9pY3UvdXRpbC9TaW1wbGVUaW1lWm9uZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwNjQwNzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9TaW1wbGVUaW1lWm9uZS5qYXZhCkBAIC0wLDAgKzEsMTQ4NyBAQAorLyoKKyogICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKi8KKworcGFja2FnZSBjb20uaWJtLmljdS51dGlsOworCitpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCisvKioKKyAqIDxjb2RlPlNpbXBsZVRpbWVab25lPC9jb2RlPiBpcyBhIGNvbmNyZXRlIHN1YmNsYXNzIG9mIDxjb2RlPlRpbWVab25lPC9jb2RlPgorICogdGhhdCByZXByZXNlbnRzIGEgdGltZSB6b25lIGZvciB1c2Ugd2l0aCBhIEdyZWdvcmlhbiBjYWxlbmRhci4gVGhpcworICogY2xhc3MgZG9lcyBub3QgaGFuZGxlIGhpc3RvcmljYWwgY2hhbmdlcy4KKyAqCisgKiA8UD4KKyAqIFVzZSBhIG5lZ2F0aXZlIHZhbHVlIGZvciA8Y29kZT5kYXlPZldlZWtJbk1vbnRoPC9jb2RlPiB0byBpbmRpY2F0ZSB0aGF0CisgKiA8Y29kZT5TaW1wbGVUaW1lWm9uZTwvY29kZT4gc2hvdWxkIGNvdW50IGZyb20gdGhlIGVuZCBvZiB0aGUgbW9udGggYmFja3dhcmRzLgorICogRm9yIGV4YW1wbGUsIERheWxpZ2h0IFNhdmluZ3MgVGltZSBlbmRzIGF0IHRoZSBsYXN0CisgKiAoZGF5T2ZXZWVrSW5Nb250aCA9IC0xKSBTdW5kYXkgaW4gT2N0b2JlciwgYXQgMiBBTSBpbiBzdGFuZGFyZCB0aW1lLgorICoKKyAqIEBzZWUgICAgICBDYWxlbmRhcgorICogQHNlZSAgICAgIEdyZWdvcmlhbkNhbGVuZGFyCisgKiBAc2VlICAgICAgVGltZVpvbmUKKyAqIEBhdXRob3IgICBEYXZpZCBHb2xkc21pdGgsIE1hcmsgRGF2aXMsIENoZW4tTGllaCBIdWFuZywgQWxhbiBMaXUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitwdWJsaWMgY2xhc3MgU2ltcGxlVGltZVpvbmUgZXh0ZW5kcyBUaW1lWm9uZSB7CisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIFNpbXBsZVRpbWVab25lIHdpdGggdGhlIGdpdmVuIGJhc2UgdGltZSB6b25lIG9mZnNldCBmcm9tIEdNVAorICAgICAqIGFuZCB0aW1lIHpvbmUgSUQuIFRpbWV6b25lIElEcyBjYW4gYmUgb2J0YWluZWQgZnJvbQorICAgICAqIFRpbWVab25lLmdldEF2YWlsYWJsZUlEcy4gTm9ybWFsbHkgeW91IHNob3VsZCB1c2UgVGltZVpvbmUuZ2V0RGVmYXVsdCB0bworICAgICAqIGNvbnN0cnVjdCBhIFRpbWVab25lLgorICAgICAqCisgICAgICogQHBhcmFtIHJhd09mZnNldCAgVGhlIGdpdmVuIGJhc2UgdGltZSB6b25lIG9mZnNldCB0byBHTVQuCisgICAgICogQHBhcmFtIElEICAgICAgICAgVGhlIHRpbWUgem9uZSBJRCB3aGljaCBpcyBvYnRhaW5lZCBmcm9tCisgICAgICogICAgICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0QXZhaWxhYmxlSURzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTaW1wbGVUaW1lWm9uZShpbnQgcmF3T2Zmc2V0LCBTdHJpbmcgSUQpCisgICAgeworICAgICAgICB0aGlzLnJhd09mZnNldCA9IHJhd09mZnNldDsKKyAgICAgICAgc2V0SUQgKElEKTsKKyAgICAgICAgZHN0U2F2aW5ncyA9IG1pbGxpc1BlckhvdXI7IC8vIEluIGNhc2UgdXNlciBzZXRzIHJ1bGVzIGxhdGVyCisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgU2ltcGxlVGltZVpvbmUgd2l0aCB0aGUgZ2l2ZW4gYmFzZSB0aW1lIHpvbmUgb2Zmc2V0IGZyb20KKyAgICAgKiBHTVQsIHRpbWUgem9uZSBJRCwgdGltZSB0byBzdGFydCBhbmQgZW5kIHRoZSBkYXlsaWdodCB0aW1lLiBUaW1lem9uZSBJRHMKKyAgICAgKiBjYW4gYmUgb2J0YWluZWQgZnJvbSBUaW1lWm9uZS5nZXRBdmFpbGFibGVJRHMuIE5vcm1hbGx5IHlvdSBzaG91bGQgdXNlCisgICAgICogVGltZVpvbmUuZ2V0RGVmYXVsdCB0byBjcmVhdGUgYSBUaW1lWm9uZS4gRm9yIGEgdGltZSB6b25lIHRoYXQgZG9lcyBub3QKKyAgICAgKiB1c2UgZGF5bGlnaHQgc2F2aW5nIHRpbWUsIGRvIG5vdCB1c2UgdGhpcyBjb25zdHJ1Y3RvcjsgaW5zdGVhZCB5b3Ugc2hvdWxkCisgICAgICogdXNlIFNpbXBsZVRpbWVab25lKHJhd09mZnNldCwgSUQpLgorICAgICAqCisgICAgICogQnkgZGVmYXVsdCwgdGhpcyBjb25zdHJ1Y3RvciBzcGVjaWZpZXMgZGF5LW9mLXdlZWstaW4tbW9udGggcnVsZXMuIFRoYXQKKyAgICAgKiBpcywgaWYgdGhlIHN0YXJ0RGF5IGlzIDEsIGFuZCB0aGUgc3RhcnREYXlPZldlZWsgaXMgU1VOREFZLCB0aGVuIHRoaXMKKyAgICAgKiBpbmRpY2F0ZXMgdGhlIGZpcnN0IFN1bmRheSBpbiB0aGUgc3RhcnRNb250aC4gQSBzdGFydERheSBvZiAtMSBsaWtld2lzZQorICAgICAqIGluZGljYXRlcyB0aGUgbGFzdCBTdW5kYXkuIEhvd2V2ZXIsIGJ5IHVzaW5nIG5lZ2F0aXZlIG9yIHplcm8gdmFsdWVzIGZvcgorICAgICAqIGNlcnRhaW4gcGFyYW1ldGVycywgb3RoZXIgdHlwZXMgb2YgcnVsZXMgY2FuIGJlIHNwZWNpZmllZC4KKyAgICAgKgorICAgICAqIERheSBvZiBtb250aC4gVG8gc3BlY2lmeSBhbiBleGFjdCBkYXkgb2YgdGhlIG1vbnRoLCBzdWNoIGFzIE1hcmNoIDEsIHNldAorICAgICAqIHN0YXJ0RGF5T2ZXZWVrIHRvIHplcm8uCisgICAgICoKKyAgICAgKiBEYXkgb2Ygd2VlayBhZnRlciBkYXkgb2YgbW9udGguIFRvIHNwZWNpZnkgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaworICAgICAqIG9jY3VycmluZyBvbiBvciBhZnRlciBhbiBleGFjdCBkYXkgb2YgdGhlIG1vbnRoLCBtYWtlIHRoZSBkYXkgb2YgdGhlIHdlZWsKKyAgICAgKiBuZWdhdGl2ZS4gRm9yIGV4YW1wbGUsIGlmIHN0YXJ0RGF5IGlzIDUgYW5kIHN0YXJ0RGF5T2ZXZWVrIGlzIC1NT05EQVksCisgICAgICogdGhpcyBpbmRpY2F0ZXMgdGhlIGZpcnN0IE1vbmRheSBvbiBvciBhZnRlciB0aGUgNXRoIGRheSBvZiB0aGUKKyAgICAgKiBzdGFydE1vbnRoLgorICAgICAqCisgICAgICogRGF5IG9mIHdlZWsgYmVmb3JlIGRheSBvZiBtb250aC4gVG8gc3BlY2lmeSB0aGUgbGFzdCBkYXkgb2YgdGhlIHdlZWsKKyAgICAgKiBvY2N1cnJpbmcgb24gb3IgYmVmb3JlIGFuIGV4YWN0IGRheSBvZiB0aGUgbW9udGgsIG1ha2UgdGhlIGRheSBvZiB0aGUKKyAgICAgKiB3ZWVrIGFuZCB0aGUgZGF5IG9mIHRoZSBtb250aCBuZWdhdGl2ZS4gRm9yIGV4YW1wbGUsIGlmIHN0YXJ0RGF5IGlzIC0yMQorICAgICAqIGFuZCBzdGFydERheU9mV2VlayBpcyAtV0VETkVTREFZLCB0aGlzIGluZGljYXRlcyB0aGUgbGFzdCBXZWRuZXNkYXkgb24gb3IKKyAgICAgKiBiZWZvcmUgdGhlIDIxc3Qgb2YgdGhlIHN0YXJ0TW9udGguCisgICAgICoKKyAgICAgKiBUaGUgYWJvdmUgZXhhbXBsZXMgcmVmZXIgdG8gdGhlIHN0YXJ0TW9udGgsIHN0YXJ0RGF5LCBhbmQgc3RhcnREYXlPZldlZWs7CisgICAgICogdGhlIHNhbWUgYXBwbGllcyBmb3IgdGhlIGVuZE1vbnRoLCBlbmREYXksIGFuZCBlbmREYXlPZldlZWsuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmF3T2Zmc2V0ICAgICAgIFRoZSBnaXZlbiBiYXNlIHRpbWUgem9uZSBvZmZzZXQgdG8gR01ULgorICAgICAqIEBwYXJhbSBJRCAgICAgICAgICAgICAgVGhlIHRpbWUgem9uZSBJRCB3aGljaCBpcyBvYnRhaW5lZCBmcm9tCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRBdmFpbGFibGVJRHMuCisgICAgICogQHBhcmFtIHN0YXJ0TW9udGggICAgICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBzdGFydGluZyBtb250aC4gTW9udGggaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDAtYmFzZWQuIGVnLCAwIGZvciBKYW51YXJ5LgorICAgICAqIEBwYXJhbSBzdGFydERheSAgICAgICAgVGhlIGRheWxpZ2h0IHNhdmluZ3Mgc3RhcnRpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGRheS1vZi13ZWVrLWluLW1vbnRoLiBQbGVhc2Ugc2VlIHRoZSBtZW1iZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciBhbiBleGFtcGxlLgorICAgICAqIEBwYXJhbSBzdGFydERheU9mV2VlayAgVGhlIGRheWxpZ2h0IHNhdmluZ3Mgc3RhcnRpbmcgZGF5LW9mLXdlZWsuIFBsZWFzZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSBtZW1iZXIgZGVzY3JpcHRpb24gZm9yIGFuIGV4YW1wbGUuCisgICAgICogQHBhcmFtIHN0YXJ0VGltZSAgICAgICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBzdGFydGluZyB0aW1lIGluIGxvY2FsIHdhbGwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUsIHdoaWNoIGlzIHN0YW5kYXJkIHRpbWUgaW4gdGhpcyBjYXNlLiBQbGVhc2Ugc2VlIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyIGRlc2NyaXB0aW9uIGZvciBhbiBleGFtcGxlLgorICAgICAqIEBwYXJhbSBlbmRNb250aCAgICAgICAgVGhlIGRheWxpZ2h0IHNhdmluZ3MgZW5kaW5nIG1vbnRoLiBNb250aCBpcworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgMC1iYXNlZC4gZWcsIDAgZm9yIEphbnVhcnkuCisgICAgICogQHBhcmFtIGVuZERheSAgICAgICAgICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBlbmRpbmcgZGF5LW9mLXdlZWstaW4tbW9udGguCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugc2VlIHRoZSBtZW1iZXIgZGVzY3JpcHRpb24gZm9yIGFuIGV4YW1wbGUuCisgICAgICogQHBhcmFtIGVuZERheU9mV2VlayAgICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBlbmRpbmcgZGF5LW9mLXdlZWsuIFBsZWFzZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSBtZW1iZXIgZGVzY3JpcHRpb24gZm9yIGFuIGV4YW1wbGUuCisgICAgICogQHBhcmFtIGVuZFRpbWUgICAgICAgICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBlbmRpbmcgdGltZSBpbiBsb2NhbCB3YWxsIHRpbWUsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBkYXlsaWdodCB0aW1lIGluIHRoaXMgY2FzZS4gUGxlYXNlIHNlZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlciBkZXNjcmlwdGlvbiBmb3IgYW4gZXhhbXBsZS4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aGUgbW9udGgsIGRheSwgZGF5T2ZXZWVrLCBvciB0aW1lCisgICAgICogcGFyYW1ldGVycyBhcmUgb3V0IG9mIHJhbmdlIGZvciB0aGUgc3RhcnQgb3IgZW5kIHJ1bGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlVGltZVpvbmUoaW50IHJhd09mZnNldCwgU3RyaW5nIElELAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRNb250aCwgaW50IHN0YXJ0RGF5LCBpbnQgc3RhcnREYXlPZldlZWssIGludCBzdGFydFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmRNb250aCwgaW50IGVuZERheSwgaW50IGVuZERheU9mV2VlaywgaW50IGVuZFRpbWUpCisgICAgeworICAgICAgICB0aGlzKHJhd09mZnNldCwgSUQsCisgICAgICAgICAgICAgc3RhcnRNb250aCwgc3RhcnREYXksIHN0YXJ0RGF5T2ZXZWVrLCBzdGFydFRpbWUsIFdBTExfVElNRSwKKyAgICAgICAgICAgICBlbmRNb250aCwgZW5kRGF5LCBlbmREYXlPZldlZWssIGVuZFRpbWUsIFdBTExfVElNRSwKKyAgICAgICAgICAgICBtaWxsaXNQZXJIb3VyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4gIFRoaXMgY29uc3RydWN0b3IgaXMgaWRlbnRpY2FsIHRvIHRoZSAxMC1hcmd1bWVudAorICAgICAqIGNvbnN0cnVjdG9yLCBidXQgYWxzbyB0YWtlcyBhIGRzdFNhdmluZ3MgcGFyYW1ldGVyLgorICAgICAqIEBwYXJhbSBkc3RTYXZpbmdzICAgVGhlIGFtb3VudCBvZiB0aW1lIGluIG1zIHNhdmVkIGR1cmluZyBEU1QuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhlIG1vbnRoLCBkYXksIGRheU9mV2Vlaywgb3IgdGltZQorICAgICAqIHBhcmFtZXRlcnMgYXJlIG91dCBvZiByYW5nZSBmb3IgdGhlIHN0YXJ0IG9yIGVuZCBydWxlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFNpbXBsZVRpbWVab25lKGludCByYXdPZmZzZXQsIFN0cmluZyBJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0TW9udGgsIGludCBzdGFydERheSwgaW50IHN0YXJ0RGF5T2ZXZWVrLCBpbnQgc3RhcnRUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5kTW9udGgsIGludCBlbmREYXksIGludCBlbmREYXlPZldlZWssIGludCBlbmRUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U2F2aW5ncykKKyAgICB7CisgICAgICAgIHRoaXMocmF3T2Zmc2V0LCBJRCwKKyAgICAgICAgICAgICBzdGFydE1vbnRoLCBzdGFydERheSwgc3RhcnREYXlPZldlZWssIHN0YXJ0VGltZSwgV0FMTF9USU1FLAorICAgICAgICAgICAgIGVuZE1vbnRoLCBlbmREYXksIGVuZERheU9mV2VlaywgZW5kVGltZSwgV0FMTF9USU1FLAorICAgICAgICAgICAgIGRzdFNhdmluZ3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLgorICAgICAqLworICAgIFNpbXBsZVRpbWVab25lKGludCByYXdPZmZzZXQsIFN0cmluZyBJRCwKKyAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRNb250aCwgaW50IHN0YXJ0RGF5LCBpbnQgc3RhcnREYXlPZldlZWssCisgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0VGltZSwgaW50IHN0YXJ0VGltZU1vZGUsCisgICAgICAgICAgICAgICAgICAgaW50IGVuZE1vbnRoLCBpbnQgZW5kRGF5LCBpbnQgZW5kRGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgIGludCBlbmRUaW1lLCBpbnQgZW5kVGltZU1vZGUsCisgICAgICAgICAgICAgICAgICAgaW50IGRzdFNhdmluZ3MpIHsKKyAgICAgICAgc2V0SUQoSUQpOworICAgICAgICB0aGlzLnJhd09mZnNldCAgICAgID0gcmF3T2Zmc2V0OworICAgICAgICB0aGlzLnN0YXJ0TW9udGggICAgID0gc3RhcnRNb250aDsKKyAgICAgICAgdGhpcy5zdGFydERheSAgICAgICA9IHN0YXJ0RGF5OworICAgICAgICB0aGlzLnN0YXJ0RGF5T2ZXZWVrID0gc3RhcnREYXlPZldlZWs7CisgICAgICAgIHRoaXMuc3RhcnRUaW1lICAgICAgPSBzdGFydFRpbWU7CisgICAgICAgIHRoaXMuc3RhcnRUaW1lTW9kZSAgPSBzdGFydFRpbWVNb2RlOworICAgICAgICB0aGlzLmVuZE1vbnRoICAgICAgID0gZW5kTW9udGg7CisgICAgICAgIHRoaXMuZW5kRGF5ICAgICAgICAgPSBlbmREYXk7CisgICAgICAgIHRoaXMuZW5kRGF5T2ZXZWVrICAgPSBlbmREYXlPZldlZWs7CisgICAgICAgIHRoaXMuZW5kVGltZSAgICAgICAgPSBlbmRUaW1lOworICAgICAgICB0aGlzLmVuZFRpbWVNb2RlICAgID0gZW5kVGltZU1vZGU7CisgICAgICAgIHRoaXMuZHN0U2F2aW5ncyAgICAgPSBkc3RTYXZpbmdzOworICAgICAgICAvLyB0aGlzLnVzZURheWxpZ2h0ICAgID0gdHJ1ZTsgLy8gU2V0IGJ5IGRlY29kZVJ1bGVzCisgICAgICAgIGRlY29kZVJ1bGVzKCk7CisgICAgICAgIGlmIChkc3RTYXZpbmdzIDw9IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgRFNUIHNhdmluZ3MiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIGZvciBUaW1lWm9uZURhdGEuICBUYWtlcyBhcyBpbnB1dCBhbiBhcnJheSBhbmQgYW4gaW5kZXgKKyAgICAgKiBpbnRvIHRoZSBhcnJheS4gIFRoZSBhcnJheSBmb3JtYXQgaXMgdGhhdCBvZiBUaW1lWm9uZURhdGEuREFUQS4KKyAgICAgKi8KKyAgICBTaW1wbGVUaW1lWm9uZShTdHJpbmcgSUQsIGludFtdIGRhdGEsIGludCBpKSB7CisgICAgICAgIHNldElEKElEKTsKKyAgICAgICAgcmF3T2Zmc2V0ID0gZGF0YVtpKzFdKjEwMDA7CisgICAgICAgIGlmIChkYXRhW2ldID09IDApIHsKKyAgICAgICAgICAgIGRzdFNhdmluZ3MgPSBtaWxsaXNQZXJIb3VyOyAvLyBJbiBjYXNlIHVzZXIgc2V0cyBydWxlcyBsYXRlcgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhcnRNb250aCAgICAgPSBkYXRhW2krMl07CisgICAgICAgICAgICBzdGFydERheSAgICAgICA9IGRhdGFbaSszXTsKKyAgICAgICAgICAgIHN0YXJ0RGF5T2ZXZWVrID0gZGF0YVtpKzRdOworICAgICAgICAgICAgc3RhcnRUaW1lICAgICAgPSBkYXRhW2krNV0qNjAwMDA7CisgICAgICAgICAgICBzdGFydFRpbWVNb2RlICA9IGRhdGFbaSs2XTsKKyAgICAgICAgICAgIGVuZE1vbnRoICAgICAgID0gZGF0YVtpKzddOworICAgICAgICAgICAgZW5kRGF5ICAgICAgICAgPSBkYXRhW2krOF07CisgICAgICAgICAgICBlbmREYXlPZldlZWsgICA9IGRhdGFbaSs5XTsKKyAgICAgICAgICAgIGVuZFRpbWUgICAgICAgID0gZGF0YVtpKzEwXSo2MDAwMDsKKyAgICAgICAgICAgIGVuZFRpbWVNb2RlICAgID0gZGF0YVtpKzExXTsKKyAgICAgICAgICAgIGRzdFNhdmluZ3MgICAgID0gZGF0YVtpKzEyXSo2MDAwMDsKKyAgICAgICAgICAgIGRlY29kZVJ1bGVzKCk7CisgICAgICAgICAgICBpZiAoZHN0U2F2aW5ncyA8PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBEU1Qgc2F2aW5ncyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZGF5bGlnaHQgc2F2aW5ncyBzdGFydGluZyB5ZWFyLgorICAgICAqCisgICAgICogQHBhcmFtIHllYXIgIFRoZSBkYXlsaWdodCBzYXZpbmdzIHN0YXJ0aW5nIHllYXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U3RhcnRZZWFyKGludCB5ZWFyKQorICAgIHsKKyAgICAgICAgc3RhcnRZZWFyID0geWVhcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBkYXlsaWdodCBzYXZpbmdzIHN0YXJ0aW5nIHJ1bGUuIEZvciBleGFtcGxlLCBEYXlsaWdodCBTYXZpbmdzCisgICAgICogVGltZSBzdGFydHMgYXQgdGhlIGZpcnN0IFN1bmRheSBpbiBBcHJpbCwgYXQgMiBBTSBpbiBzdGFuZGFyZCB0aW1lLgorICAgICAqIFRoZXJlZm9yZSwgeW91IGNhbiBzZXQgdGhlIHN0YXJ0IHJ1bGUgYnkgY2FsbGluZzoKKyAgICAgKiBzZXRTdGFydFJ1bGUoVGltZUZpZWxkcy5BUFJJTCwgMSwgVGltZUZpZWxkcy5TVU5EQVksIDIqNjAqNjAqMTAwMCk7CisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgICAgICAgICAgVGhlIGRheWxpZ2h0IHNhdmluZ3Mgc3RhcnRpbmcgbW9udGguIE1vbnRoIGlzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIDAtYmFzZWQuIGVnLCAwIGZvciBKYW51YXJ5LgorICAgICAqIEBwYXJhbSBkYXlPZldlZWtJbk1vbnRoICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBzdGFydGluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBkYXktb2Ytd2Vlay1pbi1tb250aC4gUGxlYXNlIHNlZSB0aGUgbWVtYmVyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciBhbiBleGFtcGxlLgorICAgICAqIEBwYXJhbSBkYXlPZldlZWsgICAgICAgICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBzdGFydGluZyBkYXktb2Ytd2Vlay4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlZSB0aGUgbWVtYmVyIGRlc2NyaXB0aW9uIGZvciBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLgorICAgICAqIEBwYXJhbSB0aW1lICAgICAgICAgICAgICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBzdGFydGluZyB0aW1lIGluIGxvY2FsIHdhbGwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSwgd2hpY2ggaXMgc3RhbmRhcmQgdGltZSBpbiB0aGlzIGNhc2UuIFBsZWFzZSBzZWUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1lbWJlciBkZXNjcmlwdGlvbiBmb3IgYW4gZXhhbXBsZS4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aGUgbW9udGgsIGRheU9mV2Vla0luTW9udGgsCisgICAgICogZGF5T2ZXZWVrLCBvciB0aW1lIHBhcmFtZXRlcnMgYXJlIG91dCBvZiByYW5nZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN0YXJ0UnVsZShpbnQgbW9udGgsIGludCBkYXlPZldlZWtJbk1vbnRoLCBpbnQgZGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZSkKKyAgICB7CisgICAgICAgIHN0YXJ0TW9udGggPSBtb250aDsKKyAgICAgICAgc3RhcnREYXkgPSBkYXlPZldlZWtJbk1vbnRoOworICAgICAgICBzdGFydERheU9mV2VlayA9IGRheU9mV2VlazsKKyAgICAgICAgc3RhcnRUaW1lID0gdGltZTsKKyAgICAgICAgc3RhcnRUaW1lTW9kZSA9IFdBTExfVElNRTsKKyAgICAgICAgLy8gdXNlRGF5bGlnaHQgPSB0cnVlOyAvLyBTZXQgYnkgZGVjb2RlUnVsZXMKKyAgICAgICAgZGVjb2RlU3RhcnRSdWxlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgRFNUIHN0YXJ0IHJ1bGUgdG8gYSBmaXhlZCBkYXRlIHdpdGhpbiBhIG1vbnRoLgorICAgICAqCisgICAgICogQHBhcmFtIG1vbnRoICAgICAgICAgVGhlIG1vbnRoIGluIHdoaWNoIHRoaXMgcnVsZSBvY2N1cnMgKDAtYmFzZWQpLgorICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoICAgIFRoZSBkYXRlIGluIHRoYXQgbW9udGggKDEtYmFzZWQpLgorICAgICAqIEBwYXJhbSB0aW1lICAgICAgICAgIFRoZSB0aW1lIG9mIHRoYXQgZGF5IChudW1iZXIgb2YgbWlsbGlzIGFmdGVyIG1pZG5pZ2h0KQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHdoZW4gRFNUIHRha2VzIGVmZmVjdCBpbiBsb2NhbCB3YWxsIHRpbWUsIHdoaWNoIGlzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgdGltZSBpbiB0aGlzIGNhc2UuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhlIG1vbnRoLAorICAgICAqIGRheU9mTW9udGgsIG9yIHRpbWUgcGFyYW1ldGVycyBhcmUgb3V0IG9mIHJhbmdlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U3RhcnRSdWxlKGludCBtb250aCwgaW50IGRheU9mTW9udGgsIGludCB0aW1lKSB7CisgICAgICAgIHNldFN0YXJ0UnVsZShtb250aCwgZGF5T2ZNb250aCwgMCwgdGltZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgRFNUIHN0YXJ0IHJ1bGUgdG8gYSB3ZWVrZGF5IGJlZm9yZSBvciBhZnRlciBhIGdpdmUgZGF0ZSB3aXRoaW4KKyAgICAgKiBhIG1vbnRoLCBlLmcuLCB0aGUgZmlyc3QgTW9uZGF5IG9uIG9yIGFmdGVyIHRoZSA4dGguCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgICAgICBUaGUgbW9udGggaW4gd2hpY2ggdGhpcyBydWxlIG9jY3VycyAoMC1iYXNlZCkuCisgICAgICogQHBhcmFtIGRheU9mTW9udGggICAgQSBkYXRlIHdpdGhpbiB0aGF0IG1vbnRoICgxLWJhc2VkKS4KKyAgICAgKiBAcGFyYW0gZGF5T2ZXZWVrICAgICBUaGUgZGF5IG9mIHRoZSB3ZWVrIG9uIHdoaWNoIHRoaXMgcnVsZSBvY2N1cnMuCisgICAgICogQHBhcmFtIHRpbWUgICAgICAgICAgVGhlIHRpbWUgb2YgdGhhdCBkYXkgKG51bWJlciBvZiBtaWxsaXMgYWZ0ZXIgbWlkbmlnaHQpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgd2hlbiBEU1QgdGFrZXMgZWZmZWN0IGluIGxvY2FsIHdhbGwgdGltZSwgd2hpY2ggaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZCB0aW1lIGluIHRoaXMgY2FzZS4KKyAgICAgKiBAcGFyYW0gYWZ0ZXIgICAgICAgICBJZiB0cnVlLCB0aGlzIHJ1bGUgc2VsZWN0cyB0aGUgZmlyc3QgZGF5T2ZXZWVrIG9uCisgICAgICogICAgICAgICAgICAgICAgICAgICAgb3IgYWZ0ZXIgZGF5T2ZNb250aC4gIElmIGZhbHNlLCB0aGlzIHJ1bGUgc2VsZWN0cworICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IGRheU9mV2VlayBvbiBvciBiZWZvcmUgZGF5T2ZNb250aC4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aGUgbW9udGgsIGRheU9mTW9udGgsCisgICAgICogZGF5T2ZXZWVrLCBvciB0aW1lIHBhcmFtZXRlcnMgYXJlIG91dCBvZiByYW5nZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN0YXJ0UnVsZShpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoLCBpbnQgZGF5T2ZXZWVrLCBpbnQgdGltZSwgYm9vbGVhbiBhZnRlcikKKyAgICB7CisgICAgICAgIGlmIChhZnRlcikKKyAgICAgICAgICAgIHNldFN0YXJ0UnVsZShtb250aCwgZGF5T2ZNb250aCwgLWRheU9mV2VlaywgdGltZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldFN0YXJ0UnVsZShtb250aCwgLWRheU9mTW9udGgsIC1kYXlPZldlZWssIHRpbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRheWxpZ2h0IHNhdmluZ3MgZW5kaW5nIHJ1bGUuIEZvciBleGFtcGxlLCBEYXlsaWdodCBTYXZpbmdzIFRpbWUKKyAgICAgKiBlbmRzIGF0IHRoZSBsYXN0ICgtMSkgU3VuZGF5IGluIE9jdG9iZXIsIGF0IDIgQU0gaW4gc3RhbmRhcmQgdGltZS4KKyAgICAgKiBUaGVyZWZvcmUsIHlvdSBjYW4gc2V0IHRoZSBlbmQgcnVsZSBieSBjYWxsaW5nOgorICAgICAqIHNldEVuZFJ1bGUoVGltZUZpZWxkcy5PQ1RPQkVSLCAtMSwgVGltZUZpZWxkcy5TVU5EQVksIDIqNjAqNjAqMTAwMCk7CisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9udGggICAgICAgICAgICAgVGhlIGRheWxpZ2h0IHNhdmluZ3MgZW5kaW5nIG1vbnRoLiBNb250aCBpcworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAwLWJhc2VkLiBlZywgMCBmb3IgSmFudWFyeS4KKyAgICAgKiBAcGFyYW0gZGF5T2ZXZWVrSW5Nb250aCAgVGhlIGRheWxpZ2h0IHNhdmluZ3MgZW5kaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGRheS1vZi13ZWVrLWluLW1vbnRoLiBQbGVhc2Ugc2VlIHRoZSBtZW1iZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gZm9yIGFuIGV4YW1wbGUuCisgICAgICogQHBhcmFtIGRheU9mV2VlayAgICAgICAgIFRoZSBkYXlsaWdodCBzYXZpbmdzIGVuZGluZyBkYXktb2Ytd2Vlay4gUGxlYXNlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUgbWVtYmVyIGRlc2NyaXB0aW9uIGZvciBhbiBleGFtcGxlLgorICAgICAqIEBwYXJhbSB0aW1lICAgICAgICAgICAgICBUaGUgZGF5bGlnaHQgc2F2aW5ncyBlbmRpbmcgdGltZSBpbiBsb2NhbCB3YWxsIHRpbWUsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGRheWxpZ2h0IHRpbWUgaW4gdGhpcyBjYXNlLiBQbGVhc2Ugc2VlIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXIgZGVzY3JpcHRpb24gZm9yIGFuIGV4YW1wbGUuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhlIG1vbnRoLCBkYXlPZldlZWtJbk1vbnRoLAorICAgICAqIGRheU9mV2Vlaywgb3IgdGltZSBwYXJhbWV0ZXJzIGFyZSBvdXQgb2YgcmFuZ2UKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRFbmRSdWxlKGludCBtb250aCwgaW50IGRheU9mV2Vla0luTW9udGgsIGludCBkYXlPZldlZWssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZSkKKyAgICB7CisgICAgICAgIGVuZE1vbnRoID0gbW9udGg7CisgICAgICAgIGVuZERheSA9IGRheU9mV2Vla0luTW9udGg7CisgICAgICAgIGVuZERheU9mV2VlayA9IGRheU9mV2VlazsKKyAgICAgICAgZW5kVGltZSA9IHRpbWU7CisgICAgICAgIGVuZFRpbWVNb2RlID0gV0FMTF9USU1FOworICAgICAgICAvLyB1c2VEYXlsaWdodCA9IHRydWU7IC8vIFNldCBieSBkZWNvZGVSdWxlcworICAgICAgICBkZWNvZGVFbmRSdWxlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgRFNUIGVuZCBydWxlIHRvIGEgZml4ZWQgZGF0ZSB3aXRoaW4gYSBtb250aC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtb250aCAgICAgICAgIFRoZSBtb250aCBpbiB3aGljaCB0aGlzIHJ1bGUgb2NjdXJzICgwLWJhc2VkKS4KKyAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCAgICBUaGUgZGF0ZSBpbiB0aGF0IG1vbnRoICgxLWJhc2VkKS4KKyAgICAgKiBAcGFyYW0gdGltZSAgICAgICAgICBUaGUgdGltZSBvZiB0aGF0IGRheSAobnVtYmVyIG9mIG1pbGxpcyBhZnRlciBtaWRuaWdodCkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB3aGVuIERTVCBlbmRzIGluIGxvY2FsIHdhbGwgdGltZSwgd2hpY2ggaXMgZGF5bGlnaHQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB0aW1lIGluIHRoaXMgY2FzZS4KKyAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aGUgbW9udGgsCisgICAgICogZGF5T2ZNb250aCwgb3IgdGltZSBwYXJhbWV0ZXJzIGFyZSBvdXQgb2YgcmFuZ2UKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRFbmRSdWxlKGludCBtb250aCwgaW50IGRheU9mTW9udGgsIGludCB0aW1lKQorICAgIHsKKyAgICAgICAgc2V0RW5kUnVsZShtb250aCwgZGF5T2ZNb250aCwgMCwgdGltZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgRFNUIGVuZCBydWxlIHRvIGEgd2Vla2RheSBiZWZvcmUgb3IgYWZ0ZXIgYSBnaXZlIGRhdGUgd2l0aGluCisgICAgICogYSBtb250aCwgZS5nLiwgdGhlIGZpcnN0IE1vbmRheSBvbiBvciBhZnRlciB0aGUgOHRoLgorICAgICAqCisgICAgICogQHBhcmFtIG1vbnRoICAgICAgICAgVGhlIG1vbnRoIGluIHdoaWNoIHRoaXMgcnVsZSBvY2N1cnMgKDAtYmFzZWQpLgorICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoICAgIEEgZGF0ZSB3aXRoaW4gdGhhdCBtb250aCAoMS1iYXNlZCkuCisgICAgICogQHBhcmFtIGRheU9mV2VlayAgICAgVGhlIGRheSBvZiB0aGUgd2VlayBvbiB3aGljaCB0aGlzIHJ1bGUgb2NjdXJzLgorICAgICAqIEBwYXJhbSB0aW1lICAgICAgICAgIFRoZSB0aW1lIG9mIHRoYXQgZGF5IChudW1iZXIgb2YgbWlsbGlzIGFmdGVyIG1pZG5pZ2h0KQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHdoZW4gRFNUIGVuZHMgaW4gbG9jYWwgd2FsbCB0aW1lLCB3aGljaCBpcyBkYXlsaWdodAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRpbWUgaW4gdGhpcyBjYXNlLgorICAgICAqIEBwYXJhbSBhZnRlciAgICAgICAgIElmIHRydWUsIHRoaXMgcnVsZSBzZWxlY3RzIHRoZSBmaXJzdCBkYXlPZldlZWsgb24KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBvciBhZnRlciBkYXlPZk1vbnRoLiAgSWYgZmFsc2UsIHRoaXMgcnVsZSBzZWxlY3RzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgdGhlIGxhc3QgZGF5T2ZXZWVrIG9uIG9yIGJlZm9yZSBkYXlPZk1vbnRoLgorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRoZSBtb250aCwgZGF5T2ZNb250aCwKKyAgICAgKiBkYXlPZldlZWssIG9yIHRpbWUgcGFyYW1ldGVycyBhcmUgb3V0IG9mIHJhbmdlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RW5kUnVsZShpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoLCBpbnQgZGF5T2ZXZWVrLCBpbnQgdGltZSwgYm9vbGVhbiBhZnRlcikKKyAgICB7CisgICAgICAgIGlmIChhZnRlcikKKyAgICAgICAgICAgIHNldEVuZFJ1bGUobW9udGgsIGRheU9mTW9udGgsIC1kYXlPZldlZWssIHRpbWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRFbmRSdWxlKG1vbnRoLCAtZGF5T2ZNb250aCwgLWRheU9mV2VlaywgdGltZSk7CisgICAgfQorCisgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGxvY2FsIHRpbWUgYW5kCisgICAgICogVVRDLCB0YWtpbmcgaW50byBhY2NvdW50IGJvdGggdGhlIHJhdyBvZmZzZXQgYW5kIHRoZSBlZmZlY3Qgb2YKKyAgICAgKiBkYXlsaWdodCBzYXZpbmdzLCBmb3IgdGhlIHNwZWNpZmllZCBkYXRlIGFuZCB0aW1lLiAgVGhpcyBtZXRob2QKKyAgICAgKiBhc3N1bWVzIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgbW9udGggYXJlIGRpc3RpbmN0LiAgSXQgYWxzbworICAgICAqIHVzZXMgYSBkZWZhdWx0IHtAbGluayBHcmVnb3JpYW5DYWxlbmRhcn0gb2JqZWN0IGFzIGl0cworICAgICAqIHVuZGVybHlpbmcgY2FsZW5kYXIsIHN1Y2ggYXMgZm9yIGRldGVybWluaW5nIGxlYXAgeWVhcnMuICBEbworICAgICAqIG5vdCB1c2UgdGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgY2FsZW5kYXIgb3RoZXIgdGhhbiBhCisgICAgICogZGVmYXVsdCA8Y29kZT5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4uCisgICAgICoKKyAgICAgKiA8cD48ZW0+Tm90ZTogIEluIGdlbmVyYWwsIGNsaWVudHMgc2hvdWxkIHVzZQorICAgICAqIDxjb2RlPkNhbGVuZGFyLmdldChaT05FX09GRlNFVCkgKyBDYWxlbmRhci5nZXQoRFNUX09GRlNFVCk8L2NvZGU+CisgICAgICogaW5zdGVhZCBvZiBjYWxsaW5nIHRoaXMgbWV0aG9kLjwvZW0+CisgICAgICoKKyAgICAgKiBAcGFyYW0gZXJhICAgICAgIFRoZSBlcmEgb2YgdGhlIGdpdmVuIGRhdGUuCisgICAgICogQHBhcmFtIHllYXIgICAgICBUaGUgeWVhciBpbiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBAcGFyYW0gbW9udGggICAgIFRoZSBtb250aCBpbiB0aGUgZ2l2ZW4gZGF0ZS4gTW9udGggaXMgMC1iYXNlZC4gZS5nLiwKKyAgICAgKiAgICAgICAgICAgICAgICAgIDAgZm9yIEphbnVhcnkuCisgICAgICogQHBhcmFtIGRheSAgICAgICBUaGUgZGF5LWluLW1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLgorICAgICAqIEBwYXJhbSBkYXlPZldlZWsgVGhlIGRheS1vZi13ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLgorICAgICAqIEBwYXJhbSBtaWxsaXMgICAgVGhlIG1pbGxpc2Vjb25kcyBpbiBkYXkgaW4gPGVtPnN0YW5kYXJkPC9lbT4gbG9jYWwgdGltZS4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgIFRoZSBtaWxsaXNlY29uZHMgdG8gYWRkIHRvIFVUQyB0byBnZXQgbG9jYWwgdGltZS4KKyAgICAgKiBAZXhjZXB0aW9uICAgICAgIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aGUgZXJhLCBtb250aCwgZGF5LAorICAgICAqICAgICAgICAgICAgICAgICAgZGF5T2ZXZWVrLCBvciBtaWxsaXMgcGFyYW1ldGVycyBhcmUgb3V0IG9mIHJhbmdlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXRPZmZzZXQoaW50IGVyYSwgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGRheU9mV2VlaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWlsbGlzKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIG1vbnRoIGJlZm9yZSBpbmRleGluZyBpbnRvIHN0YXRpY01vbnRoTGVuZ3RoLiBUaGlzCisJLy8gZHVwbGljYXRlcyB0aGUgdGVzdCB0aGF0IG9jY3VycyBpbiB0aGUgNy1hcmd1bWVudCBnZXRPZmZzZXQoKSwKKwkvLyBob3dldmVyLCB0aGlzIGlzIHVuYXZvaWRhYmxlLiBXZSBkb24ndCBtaW5kIGJlY2F1c2UgdGhpcyBtZXRob2QsIGluCisJLy8gZmFjdCwgc2hvdWxkIG5vdCBiZSBjYWxsZWQ7IGludGVybmFsIGNvZGUgc2hvdWxkIGFsd2F5cyBjYWxsIHRoZQorCS8vIDctYXJndW1lbnQgZ2V0T2Zmc2V0KCksIGFuZCBvdXRzaWRlIGNvZGUgc2hvdWxkIHVzZSBDYWxlbmRhci5nZXQoaW50CisJLy8gZmllbGQpIHdpdGggZmllbGRzIFpPTkVfT0ZGU0VUIGFuZCBEU1RfT0ZGU0VULiBXZSBjYW4ndCBnZXQgcmlkIG9mCisJLy8gdGhpcyBtZXRob2QgYmVjYXVzZSBpdCdzIHB1YmxpYyBBUEkuIC0gbGl1IDgvMTAvOTgKKyAgICAgICAgaWYgKG1vbnRoIDwgQ2FsZW5kYXIuSkFOVUFSWQorICAgICAgICAgICAgfHwgbW9udGggPiBDYWxlbmRhci5ERUNFTUJFUikgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBtb250aCAiICsgbW9udGgpOworICAgICAgICB9CisJaW50IG1vbnRoTGVuZ3RoLCBwcmV2TW9udGhMZW5ndGg7CisKKyAgICAvLyBMYXp5LWluaXRpYWxpemUgdGhpcyB0byBwcmV2ZW50IGNpcmN1bGFyIHN0YXRpYyBpbml0IGRlcGVuZGVuY3kKKyAgICBpZiAoaW50ZXJuYWxDYWwgPT0gbnVsbCkgeworICAgICAgICAvLyBIYWNrOiBVc2UgdGhlIHkvbS9kIGNvbnN0cnVjdG9yIGluIHRoZSBmb2xsb3dpbmcgbGluZS4KKyAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgaW5maW5pdGUgcmVjdXJzaW9uIHRoYXQgcmVzdWx0cyB3aGVuCisgICAgICAgIC8vIHRoZSBHQyB3YW50cyB0byBjYWxsIFNUWi5nZXRPZmZzZXQuIC0gbGl1CisgICAgICAgIGludGVybmFsQ2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKDAsIDAsIDApOworICAgICAgICAvLyBOb3RlOiBObyBuZWVkIHRvIHN5bmNocm9uaXplIHRoaXM7IHdlJ2xsIHVzZSB3aGF0ZXZlcgorICAgICAgICAvLyBpbnN0YW5jZSB3ZSBlbmQgdXAgd2l0aCAocmVmIGFzc2lnbm1lbnQgaXMgYXRvbWljKS4KKyAgICB9CisKKwlpZiAoKGVyYSA9PSBHcmVnb3JpYW5DYWxlbmRhci5BRCkgJiYgaW50ZXJuYWxDYWwuaXNMZWFwWWVhcih5ZWFyKSkgeworCSAgICBtb250aExlbmd0aCA9IHN0YXRpY0xlYXBNb250aExlbmd0aFttb250aF07CisJICAgIHByZXZNb250aExlbmd0aCA9IChtb250aCA+IDEpID8gc3RhdGljTGVhcE1vbnRoTGVuZ3RoW21vbnRoIC0gMV0gOiAzMTsKKwl9IGVsc2UgeworCSAgICBtb250aExlbmd0aCA9IHN0YXRpY01vbnRoTGVuZ3RoW21vbnRoXTsKKwkgICAgcHJldk1vbnRoTGVuZ3RoID0gKG1vbnRoID4gMSkgPyBzdGF0aWNNb250aExlbmd0aFttb250aCAtIDFdIDogMzE7CisJfQorCisgICAgICAgIHJldHVybiBnZXRPZmZzZXQoZXJhLCB5ZWFyLCBtb250aCwgZGF5LCBkYXlPZldlZWssIG1pbGxpcywKKwkJCSBtb250aExlbmd0aCwgcHJldk1vbnRoTGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIG9mZnNldCwgZm9yIGN1cnJlbnQgZGF0ZSwgbW9kaWZpZWQgaW4gY2FzZSBvZgorICAgICAqIGRheWxpZ2h0IHNhdmluZ3MuIFRoaXMgaXMgdGhlIG9mZnNldCB0byBhZGQgPGVtPnRvPC9lbT4gVVRDIHRvIGdldCBsb2NhbCB0aW1lLgorICAgICAqIEdldHMgdGhlIHRpbWUgem9uZSBvZmZzZXQsIGZvciBjdXJyZW50IGRhdGUsIG1vZGlmaWVkIGluIGNhc2Ugb2YgZGF5bGlnaHQKKyAgICAgKiBzYXZpbmdzLiBUaGlzIGlzIHRoZSBvZmZzZXQgdG8gYWRkICp0byogVVRDIHRvIGdldCBsb2NhbCB0aW1lLiBBc3N1bWUKKyAgICAgKiB0aGF0IHRoZSBzdGFydCBhbmQgZW5kIG1vbnRoIGFyZSBkaXN0aW5jdC4KKyAgICAgKiBAcGFyYW0gZXJhICAgICAgICAgICBUaGUgZXJhIG9mIHRoZSBnaXZlbiBkYXRlLgorICAgICAqIEBwYXJhbSB5ZWFyICAgICAgICAgIFRoZSB5ZWFyIGluIHRoZSBnaXZlbiBkYXRlLgorICAgICAqIEBwYXJhbSBtb250aCAgICAgICAgIFRoZSBtb250aCBpbiB0aGUgZ2l2ZW4gZGF0ZS4gTW9udGggaXMgMC1iYXNlZC4gZS5nLiwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAwIGZvciBKYW51YXJ5LgorICAgICAqIEBwYXJhbSBkYXkgICAgICAgICAgIFRoZSBkYXktaW4tbW9udGggb2YgdGhlIGdpdmVuIGRhdGUuCisgICAgICogQHBhcmFtIGRheU9mV2VlayAgICAgVGhlIGRheS1vZi13ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLgorICAgICAqIEBwYXJhbSBtaWxsaXMgICAgICAgIFRoZSBtaWxsaXNlY29uZHMgaW4gZGF5IGluIDxlbT5zdGFuZGFyZDwvZW0+IGxvY2FsIHRpbWUuCisgICAgICogQHBhcmFtIG1vbnRoTGVuZ3RoICAgVGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4gbW9udGggaW4gZGF5cy4KKyAgICAgKiBAcGFyYW0gcHJldk1vbnRoTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHByZXZpb3VzIG1vbnRoIGluIGRheXMuCisgICAgICogQHJldHVybiAgICAgICAgICAgICAgVGhlIG9mZnNldCB0byBhZGQgKnRvKiBHTVQgdG8gZ2V0IGxvY2FsIHRpbWUuCisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdGhlIGVyYSwgbW9udGgsIGRheSwKKyAgICAgKiBkYXlPZldlZWssIG1pbGxpcywgb3IgbW9udGhMZW5ndGggcGFyYW1ldGVycyBhcmUgb3V0IG9mIHJhbmdlCisgICAgICovCisgICAgaW50IGdldE9mZnNldChpbnQgZXJhLCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgZGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgaW50IG1pbGxpcywgaW50IG1vbnRoTGVuZ3RoLCBpbnQgcHJldk1vbnRoTGVuZ3RoKSB7CisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgLyogVXNlIHRoaXMgcGFyYW1ldGVyIGNoZWNraW5nIGNvZGUgZm9yIG5vcm1hbCBvcGVyYXRpb24uICBPbmx5IG9uZQorICAgICAgICAgICAgICogb2YgdGhlc2UgdHdvIGJsb2NrcyBzaG91bGQgYWN0dWFsbHkgZ2V0IGNvbXBpbGVkIGludG8gdGhlIGNsYXNzCisgICAgICAgICAgICAgKiBmaWxlLiAgKi8KKyAgICAgICAgICAgIGlmICgoZXJhICE9IEdyZWdvcmlhbkNhbGVuZGFyLkFEICYmIGVyYSAhPSBHcmVnb3JpYW5DYWxlbmRhci5CQykKKyAgICAgICAgICAgICAgICB8fCBtb250aCA8IENhbGVuZGFyLkpBTlVBUlkKKyAgICAgICAgICAgICAgICB8fCBtb250aCA+IENhbGVuZGFyLkRFQ0VNQkVSCisgICAgICAgICAgICAgICAgfHwgZGF5IDwgMQorICAgICAgICAgICAgICAgIHx8IGRheSA+IG1vbnRoTGVuZ3RoCisgICAgICAgICAgICAgICAgfHwgZGF5T2ZXZWVrIDwgQ2FsZW5kYXIuU1VOREFZCisgICAgICAgICAgICAgICAgfHwgZGF5T2ZXZWVrID4gQ2FsZW5kYXIuU0FUVVJEQVkKKyAgICAgICAgICAgICAgICB8fCBtaWxsaXMgPCAwCisgICAgICAgICAgICAgICAgfHwgbWlsbGlzID49IG1pbGxpc1BlckRheQorICAgICAgICAgICAgICAgIHx8IG1vbnRoTGVuZ3RoIDwgMjgKKyAgICAgICAgICAgICAgICB8fCBtb250aExlbmd0aCA+IDMxCisgICAgICAgICAgICAgICAgfHwgcHJldk1vbnRoTGVuZ3RoIDwgMjgKKyAgICAgICAgICAgICAgICB8fCBwcmV2TW9udGhMZW5ndGggPiAzMSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFRoaXMgcGFyYW1ldGVyIGNoZWNraW5nIGNvZGUgaXMgYmV0dGVyIGZvciBkZWJ1Z2dpbmcsIGJ1dAorICAgICAgICAgICAgICogb3ZlcmtpbGwgZm9yIG5vcm1hbCBvcGVyYXRpb24uICBPbmx5IG9uZSBvZiB0aGVzZSB0d28gYmxvY2tzCisgICAgICAgICAgICAgKiBzaG91bGQgYWN0dWFsbHkgZ2V0IGNvbXBpbGVkIGludG8gdGhlIGNsYXNzIGZpbGUuICAqLworICAgICAgICAgICAgaWYgKGVyYSAhPSBHcmVnb3JpYW5DYWxlbmRhci5BRCAmJiBlcmEgIT0gR3JlZ29yaWFuQ2FsZW5kYXIuQkMpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGVyYSAiICsgZXJhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtb250aCA8IENhbGVuZGFyLkpBTlVBUlkKKyAgICAgICAgICAgICAgICB8fCBtb250aCA+IENhbGVuZGFyLkRFQ0VNQkVSKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBtb250aCAiICsgbW9udGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRheSA8IDEKKyAgICAgICAgICAgICAgICB8fCBkYXkgPiBtb250aExlbmd0aCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgZGF5ICIgKyBkYXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRheU9mV2VlayA8IENhbGVuZGFyLlNVTkRBWQorICAgICAgICAgICAgICAgIHx8IGRheU9mV2VlayA+IENhbGVuZGFyLlNBVFVSREFZKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBkYXkgb2Ygd2VlayAiICsgZGF5T2ZXZWVrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtaWxsaXMgPCAwCisgICAgICAgICAgICAgICAgfHwgbWlsbGlzID49IG1pbGxpc1BlckRheSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgbWlsbGlzICIgKyBtaWxsaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1vbnRoTGVuZ3RoIDwgMjgKKyAgICAgICAgICAgICAgICB8fCBtb250aExlbmd0aCA+IDMxKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBtb250aCBsZW5ndGggIiArIG1vbnRoTGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcmV2TW9udGhMZW5ndGggPCAyOAorICAgICAgICAgICAgICAgIHx8IHByZXZNb250aExlbmd0aCA+IDMxKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBwcmV2aW91cyBtb250aCBsZW5ndGggIiArIHByZXZNb250aExlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gcmF3T2Zmc2V0OworCisgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlIGFyZSBiZWZvcmUgdGhlIG9uc2V0IG9mIGRheWxpZ2h0IHNhdmluZ3MgdGltZQorICAgICAgICBpZiAoIXVzZURheWxpZ2h0IHx8IHllYXIgPCBzdGFydFllYXIgfHwgZXJhICE9IEdyZWdvcmlhbkNhbGVuZGFyLkFEKSByZXR1cm4gcmVzdWx0OworCisgICAgICAgIC8vIENoZWNrIGZvciBzb3V0aGVybiBoZW1pc3BoZXJlLiAgV2UgYXNzdW1lIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQKKyAgICAgICAgLy8gbW9udGggYXJlIGRpZmZlcmVudC4KKyAgICAgICAgYm9vbGVhbiBzb3V0aGVybiA9IChzdGFydE1vbnRoID4gZW5kTW9udGgpOworCisgICAgICAgIC8vIENvbXBhcmUgdGhlIGRhdGUgdG8gdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcnVsZXMuKzEgPSBkYXRlPnJ1bGUsIC0xCisgICAgICAgIC8vID0gZGF0ZTxydWxlLCAwID0gZGF0ZT09cnVsZS4KKyAgICAgICAgaW50IHN0YXJ0Q29tcGFyZSA9IGNvbXBhcmVUb1J1bGUobW9udGgsIG1vbnRoTGVuZ3RoLCBwcmV2TW9udGhMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheSwgZGF5T2ZXZWVrLCBtaWxsaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZU1vZGUgPT0gVVRDX1RJTUUgPyAtcmF3T2Zmc2V0IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRNb2RlLCBzdGFydE1vbnRoLCBzdGFydERheU9mV2VlaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXksIHN0YXJ0VGltZSk7CisgICAgICAgIGludCBlbmRDb21wYXJlID0gMDsKKworICAgICAgICAvKiBXZSBkb24ndCBhbHdheXMgaGF2ZSB0byBjb21wdXRlIGVuZENvbXBhcmUuICBGb3IgbWFueSBpbnN0YW5jZXMsCisgICAgICAgICAqIHN0YXJ0Q29tcGFyZSBpcyBlbm91Z2ggdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBpbiBEU1Qgb3Igbm90LiAgSW4gdGhlCisgICAgICAgICAqIG5vcnRoZXJuIGhlbWlzcGhlcmUsIGlmIHdlIGFyZSBiZWZvcmUgdGhlIHN0YXJ0IHJ1bGUsIHdlIGNhbid0IGhhdmUKKyAgICAgICAgICogRFNULiAgSW4gdGhlIHNvdXRoZXJuIGhlbWlzcGhlcmUsIGlmIHdlIGFyZSBhZnRlciB0aGUgc3RhcnQgcnVsZSwgd2UKKyAgICAgICAgICogbXVzdCBoYXZlIERTVC4gIFRoaXMgaXMgcmVmbGVjdGVkIGluIHRoZSB3YXkgdGhlIG5leHQgaWYgc3RhdGVtZW50CisgICAgICAgICAqIChub3QgdGhlIG9uZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcpIHNob3J0IGNpcmN1aXRzLiAqLworICAgICAgICBpZiAoc291dGhlcm4gIT0gKHN0YXJ0Q29tcGFyZSA+PSAwKSkgeworICAgICAgICAgICAgLyogRm9yIHRoZSBlbmRpbmcgcnVsZSBjb21wYXJpc29uLCB3ZSBhZGQgdGhlIGRzdFNhdmluZ3MgdG8gdGhlIG1pbGxpcworICAgICAgICAgICAgICogcGFzc2VkIGluIHRvIGNvbnZlcnQgdGhlbSBmcm9tIHN0YW5kYXJkIHRvIHdhbGwgdGltZS4gIFdlIHRoZW4gbXVzdAorICAgICAgICAgICAgICogbm9ybWFsaXplIHRoZSBtaWxsaXMgdG8gdGhlIHJhbmdlIDAuLm1pbGxpc1BlckRheS0xLiAqLworICAgICAgICAgICAgZW5kQ29tcGFyZSA9IGNvbXBhcmVUb1J1bGUobW9udGgsIG1vbnRoTGVuZ3RoLCBwcmV2TW9udGhMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXksIGRheU9mV2VlaywgbWlsbGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kVGltZU1vZGUgPT0gV0FMTF9USU1FID8gZHN0U2F2aW5ncyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZFRpbWVNb2RlID09IFVUQ19USU1FID8gLXJhd09mZnNldCA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kTW9kZSwgZW5kTW9udGgsIGVuZERheU9mV2VlaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZERheSwgZW5kVGltZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBmb3IgYm90aCB0aGUgbm9ydGhlcm4gYW5kIHNvdXRoZXJuIGhlbWlzcGhlcmUgY2FzZXMuICBXZQorICAgICAgICAvLyBhc3N1bWUgdGhhdCBpbiB0aGUgbm9ydGhlcm4gaGVtaXNwaGVyZSwgdGhlIHN0YXJ0IHJ1bGUgaXMgYmVmb3JlIHRoZQorICAgICAgICAvLyBlbmQgcnVsZSB3aXRoaW4gdGhlIGNhbGVuZGFyIHllYXIsIGFuZCB2aWNlIHZlcnNhIGZvciB0aGUgc291dGhlcm4KKyAgICAgICAgLy8gaGVtaXNwaGVyZS4KKyAgICAgICAgaWYgKCghc291dGhlcm4gJiYgKHN0YXJ0Q29tcGFyZSA+PSAwICYmIGVuZENvbXBhcmUgPCAwKSkgfHwKKyAgICAgICAgICAgIChzb3V0aGVybiAmJiAoc3RhcnRDb21wYXJlID49IDAgfHwgZW5kQ29tcGFyZSA8IDApKSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBkc3RTYXZpbmdzOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZSBhIGdpdmVuIGRhdGUgaW4gdGhlIHllYXIgdG8gYSBydWxlLiBSZXR1cm4gMSwgMCwgb3IgLTEsIGRlcGVuZGluZworICAgICAqIG9uIHdoZXRoZXIgdGhlIGRhdGUgaXMgYWZ0ZXIsIGVxdWFsIHRvLCBvciBiZWZvcmUgdGhlIHJ1bGUgZGF0ZS4gVGhlCisgICAgICogbWlsbGlzIGFyZSBjb21wYXJlZCBkaXJlY3RseSBhZ2FpbnN0IHRoZSBydWxlTWlsbGlzLCBzbyBhbnkKKyAgICAgKiBzdGFuZGFyZC1kYXlsaWdodCBhZGp1c3RtZW50cyBtdXN0IGJlIGhhbmRsZWQgYnkgdGhlIGNhbGxlci4KKyAgICAgKgorICAgICAqIEByZXR1cm4gIDEgaWYgdGhlIGRhdGUgaXMgYWZ0ZXIgdGhlIHJ1bGUgZGF0ZSwgLTEgaWYgdGhlIGRhdGUgaXMgYmVmb3JlCisgICAgICogICAgICAgICAgdGhlIHJ1bGUgZGF0ZSwgb3IgMCBpZiB0aGUgZGF0ZSBpcyBlcXVhbCB0byB0aGUgcnVsZSBkYXRlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBjb21wYXJlVG9SdWxlKGludCBtb250aCwgaW50IG1vbnRoTGVuLCBpbnQgcHJldk1vbnRoTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkYXlPZk1vbnRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkYXlPZldlZWssIGludCBtaWxsaXMsIGludCBtaWxsaXNEZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcnVsZU1vZGUsIGludCBydWxlTW9udGgsIGludCBydWxlRGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBydWxlRGF5LCBpbnQgcnVsZU1pbGxpcykKKyAgICB7CisgICAgICAgIC8vIE1ha2UgYWRqdXN0bWVudHMgZm9yIHN0YXJ0VGltZU1vZGUgYW5kIGVuZFRpbWVNb2RlCisgICAgICAgIG1pbGxpcyArPSBtaWxsaXNEZWx0YTsKKyAgICAgICAgd2hpbGUgKG1pbGxpcyA+PSBtaWxsaXNQZXJEYXkpIHsKKyAgICAgICAgICAgIG1pbGxpcyAtPSBtaWxsaXNQZXJEYXk7CisgICAgICAgICAgICArK2RheU9mTW9udGg7CisgICAgICAgICAgICBkYXlPZldlZWsgPSAxICsgKGRheU9mV2VlayAlIDcpOyAvLyBkYXlPZldlZWsgaXMgb25lLWJhc2VkCisgICAgICAgICAgICBpZiAoZGF5T2ZNb250aCA+IG1vbnRoTGVuKSB7CisgICAgICAgICAgICAgICAgZGF5T2ZNb250aCA9IDE7CisgICAgICAgICAgICAgICAgLyogV2hlbiBpbmNyZW1lbnRpbmcgdGhlIG1vbnRoLCBpdCBpcyBkZXNpcmlibGUgdG8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgKiBmcm9tIERFQ0VNQkVSIHRvIERFQ0VNQkVSKzEsIHNpbmNlIHdlIHVzZSB0aGUgcmVzdWx0IHRvCisgICAgICAgICAgICAgICAgICogY29tcGFyZSBhZ2FpbnN0IGEgcmVhbCBtb250aC4gV3JhcGFyb3VuZCBvZiB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgKiBsZWFkcyB0byBidWcgNDE3MzYwNC4gKi8KKyAgICAgICAgICAgICAgICArK21vbnRoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChtaWxsaXMgPCAwKSB7CisgICAgICAgICAgICBtaWxsaXMgKz0gbWlsbGlzUGVyRGF5OworICAgICAgICAgICAgLS1kYXlPZk1vbnRoOworICAgICAgICAgICAgZGF5T2ZXZWVrID0gMSArICgoZGF5T2ZXZWVrKzUpICUgNyk7IC8vIGRheU9mV2VlayBpcyBvbmUtYmFzZWQKKyAgICAgICAgICAgIGlmIChkYXlPZk1vbnRoIDwgMSkgeworICAgICAgICAgICAgICAgIGRheU9mTW9udGggPSBwcmV2TW9udGhMZW47CisgICAgICAgICAgICAgICAgLS1tb250aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1vbnRoIDwgcnVsZU1vbnRoKSByZXR1cm4gLTE7CisgICAgICAgIGVsc2UgaWYgKG1vbnRoID4gcnVsZU1vbnRoKSByZXR1cm4gMTsKKworICAgICAgICBpbnQgcnVsZURheU9mTW9udGggPSAwOworICAgICAgICBzd2l0Y2ggKHJ1bGVNb2RlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRE9NX01PREU6CisgICAgICAgICAgICBydWxlRGF5T2ZNb250aCA9IHJ1bGVEYXk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBET1dfSU5fTU9OVEhfTU9ERToKKyAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSBydWxlRGF5IGlzIHRoZSBkYXktb2Ytd2Vlay1pbi1tb250aAorICAgICAgICAgICAgaWYgKHJ1bGVEYXkgPiAwKQorICAgICAgICAgICAgICAgIHJ1bGVEYXlPZk1vbnRoID0gMSArIChydWxlRGF5IC0gMSkgKiA3ICsKKyAgICAgICAgICAgICAgICAgICAgKDcgKyBydWxlRGF5T2ZXZWVrIC0gKGRheU9mV2VlayAtIGRheU9mTW9udGggKyAxKSkgJSA3OworICAgICAgICAgICAgZWxzZSAvLyBBc3N1bWUgcnVsZURheSA8IDAgaGVyZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJ1bGVEYXlPZk1vbnRoID0gbW9udGhMZW4gKyAocnVsZURheSArIDEpICogNyAtCisgICAgICAgICAgICAgICAgICAgICg3ICsgKGRheU9mV2VlayArIG1vbnRoTGVuIC0gZGF5T2ZNb250aCkgLSBydWxlRGF5T2ZXZWVrKSAlIDc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBET1dfR0VfRE9NX01PREU6CisgICAgICAgICAgICBydWxlRGF5T2ZNb250aCA9IHJ1bGVEYXkgKworICAgICAgICAgICAgICAgICg0OSArIHJ1bGVEYXlPZldlZWsgLSBydWxlRGF5IC0gZGF5T2ZXZWVrICsgZGF5T2ZNb250aCkgJSA3OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRE9XX0xFX0RPTV9NT0RFOgorICAgICAgICAgICAgcnVsZURheU9mTW9udGggPSBydWxlRGF5IC0KKyAgICAgICAgICAgICAgICAoNDkgLSBydWxlRGF5T2ZXZWVrICsgcnVsZURheSArIGRheU9mV2VlayAtIGRheU9mTW9udGgpICUgNzsKKyAgICAgICAgICAgIC8vIE5vdGUgYXQgdGhpcyBwb2ludCBydWxlRGF5T2ZNb250aCBtYXkgYmUgPDEsIGFsdGhvdWdoIGl0IHdpbGwKKyAgICAgICAgICAgIC8vIGJlID49MSBmb3Igd2VsbC1mb3JtZWQgcnVsZXMuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkYXlPZk1vbnRoIDwgcnVsZURheU9mTW9udGgpIHJldHVybiAtMTsKKyAgICAgICAgZWxzZSBpZiAoZGF5T2ZNb250aCA+IHJ1bGVEYXlPZk1vbnRoKSByZXR1cm4gMTsKKworICAgICAgICBpZiAobWlsbGlzIDwgcnVsZU1pbGxpcykgcmV0dXJuIC0xOworICAgICAgICBlbHNlIGlmIChtaWxsaXMgPiBydWxlTWlsbGlzKSByZXR1cm4gMTsKKyAgICAgICAgZWxzZSByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgVGltZVpvbmUKKyAgICAgKiBHZXRzIHRoZSBHTVQgb2Zmc2V0IGZvciB0aGlzIHRpbWUgem9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFJhd09mZnNldCgpCisgICAgeworICAgICAgICAvLyBUaGUgZ2l2ZW4gZGF0ZSB3aWxsIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGlsZQorICAgICAgICAvLyB3ZSBoYXZlIHRoZSBoaXN0b3JpY2FsIHRpbWUgem9uZSBkYXRhIGluIHBsYWNlLgorICAgICAgICByZXR1cm4gcmF3T2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBUaW1lWm9uZQorICAgICAqIFNldHMgdGhlIGJhc2UgdGltZSB6b25lIG9mZnNldCB0byBHTVQuCisgICAgICogVGhpcyBpcyB0aGUgb2Zmc2V0IHRvIGFkZCAqdG8qIFVUQyB0byBnZXQgbG9jYWwgdGltZS4KKyAgICAgKiBQbGVhc2Ugc2VlIFRpbWVab25lLnNldFJhd09mZnNldCBmb3IgZGVzY3JpcHRpb25zIG9uIHRoZSBwYXJhbWV0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UmF3T2Zmc2V0KGludCBvZmZzZXRNaWxsaXMpCisgICAgeworICAgICAgICB0aGlzLnJhd09mZnNldCA9IG9mZnNldE1pbGxpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtcyB0aGF0IHRoZSBjbG9jayBpcyBhZHZhbmNlZCBkdXJpbmcgRFNULgorICAgICAqIEBwYXJhbSBtaWxsaXNTYXZlZER1cmluZ0RTVCB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgdGltZSBpcworICAgICAqIGFkdmFuY2VkIHdpdGggcmVzcGVjdCB0byBzdGFuZGFyZCB0aW1lIHdoZW4gdGhlIGRheWxpZ2h0IHNhdmluZ3MgcnVsZXMKKyAgICAgKiBhcmUgaW4gZWZmZWN0LiBBIHBvc2l0aXZlIG51bWJlciwgdHlwaWNhbGx5IG9uZSBob3VyICgzNjAwMDAwKS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREU1RTYXZpbmdzKGludCBtaWxsaXNTYXZlZER1cmluZ0RTVCkgeworICAgICAgICBpZiAobWlsbGlzU2F2ZWREdXJpbmdEU1QgPD0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBEU1Qgc2F2aW5ncyIpOworICAgICAgICB9CisgICAgICAgIGRzdFNhdmluZ3MgPSBtaWxsaXNTYXZlZER1cmluZ0RTVDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtcyB0aGF0IHRoZSBjbG9jayBpcyBhZHZhbmNlZCBkdXJpbmcgRFNULgorICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIHRpbWUgaXMKKyAgICAgKiBhZHZhbmNlZCB3aXRoIHJlc3BlY3QgdG8gc3RhbmRhcmQgdGltZSB3aGVuIHRoZSBkYXlsaWdodCBzYXZpbmdzIHJ1bGVzCisgICAgICogYXJlIGluIGVmZmVjdC4gQSBwb3NpdGl2ZSBudW1iZXIsIHR5cGljYWxseSBvbmUgaG91ciAoMzYwMDAwMCkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGludCBnZXREU1RTYXZpbmdzKCkgeworICAgICAgICByZXR1cm4gZHN0U2F2aW5nczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgVGltZVpvbmUKKyAgICAgKiBRdWVyaWVzIGlmIHRoaXMgdGltZSB6b25lIHVzZXMgRGF5bGlnaHQgU2F2aW5ncyBUaW1lLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHVzZURheWxpZ2h0VGltZSgpCisgICAgeworICAgICAgICByZXR1cm4gdXNlRGF5bGlnaHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIFRpbWVab25lCisgICAgICogUXVlcmllcyBpZiB0aGUgZ2l2ZW4gZGF0ZSBpcyBpbiBEYXlsaWdodCBTYXZpbmdzIFRpbWUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaW5EYXlsaWdodFRpbWUoRGF0ZSBkYXRlKQorICAgIHsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIodGhpcyk7CisgICAgICAgIGdjLnNldFRpbWUoZGF0ZSk7CisgICAgICAgIHJldHVybiBnYy5pbkRheWxpZ2h0VGltZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBDbG9uZWFibGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBlci5jbG9uZSgpOworICAgICAgICAvLyBvdGhlciBmaWVsZHMgYXJlIGJpdC1jb3BpZWQKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSBoYXNoQ29kZS4KKyAgICAgKiBHZW5lcmF0ZXMgdGhlIGhhc2ggY29kZSBmb3IgdGhlIFNpbXBsZURhdGVGb3JtYXQgb2JqZWN0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgaGFzaENvZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXJ0TW9udGggXiBzdGFydERheSBeIHN0YXJ0RGF5T2ZXZWVrIF4gc3RhcnRUaW1lIF4KKyAgICAgICAgICAgIGVuZE1vbnRoIF4gZW5kRGF5IF4gZW5kRGF5T2ZXZWVrIF4gZW5kVGltZSBeIHJhd09mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0aGUgZXF1YWxpdHkgb2YgdHdvIFNpbXBsZVRpbWVab25lIG9iamVjdHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2JqICBUaGUgU2ltcGxlVGltZVpvbmUgb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGguCisgICAgICogQHJldHVybiAgICAgVHJ1ZSBpZiB0aGUgZ2l2ZW4gb2JqIGlzIHRoZSBzYW1lIGFzIHRoaXMgU2ltcGxlVGltZVpvbmUKKyAgICAgKiAgICAgICAgICAgICBvYmplY3Q7IGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09IG9iaikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBTaW1wbGVUaW1lWm9uZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgdGhhdCA9IChTaW1wbGVUaW1lWm9uZSkgb2JqOworCisgICAgICAgIHJldHVybiBnZXRJRCgpLmVxdWFscyh0aGF0LmdldElEKCkpICYmCisgICAgICAgICAgICBoYXNTYW1lUnVsZXModGhhdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhpcyB6b25lIGhhcyB0aGUgc2FtZSBydWxlcyBhbmQgb2Zmc2V0IGFzIGFub3RoZXIgem9uZS4KKyAgICAgKiBAcGFyYW0gb3RoZXIgdGhlIFRpbWVab25lIG9iamVjdCB0byBiZSBjb21wYXJlZCB3aXRoCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB6b25lIGhhcyB0aGUgc2FtZSBydWxlcyBhbmQgb2Zmc2V0IGFzIHRoaXMgb25lCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaGFzU2FtZVJ1bGVzKFRpbWVab25lIG90aGVyKSB7CisgICAgICAgIGlmICh0aGlzID09IG90aGVyKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTaW1wbGVUaW1lWm9uZSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgU2ltcGxlVGltZVpvbmUgdGhhdCA9IChTaW1wbGVUaW1lWm9uZSkgb3RoZXI7CisgICAgICAgIHJldHVybiByYXdPZmZzZXQgPT0gdGhhdC5yYXdPZmZzZXQgJiYKKyAgICAgICAgICAgIHVzZURheWxpZ2h0ID09IHRoYXQudXNlRGF5bGlnaHQgJiYKKyAgICAgICAgICAgICghdXNlRGF5bGlnaHQKKyAgICAgICAgICAgICAvLyBPbmx5IGNoZWNrIHJ1bGVzIGlmIHVzaW5nIERTVAorICAgICAgICAgICAgIHx8IChkc3RTYXZpbmdzID09IHRoYXQuZHN0U2F2aW5ncyAmJgorICAgICAgICAgICAgICAgICBzdGFydE1vZGUgPT0gdGhhdC5zdGFydE1vZGUgJiYKKyAgICAgICAgICAgICAgICAgc3RhcnRNb250aCA9PSB0aGF0LnN0YXJ0TW9udGggJiYKKyAgICAgICAgICAgICAgICAgc3RhcnREYXkgPT0gdGhhdC5zdGFydERheSAmJgorICAgICAgICAgICAgICAgICBzdGFydERheU9mV2VlayA9PSB0aGF0LnN0YXJ0RGF5T2ZXZWVrICYmCisgICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9PSB0aGF0LnN0YXJ0VGltZSAmJgorICAgICAgICAgICAgICAgICBzdGFydFRpbWVNb2RlID09IHRoYXQuc3RhcnRUaW1lTW9kZSAmJgorICAgICAgICAgICAgICAgICBlbmRNb2RlID09IHRoYXQuZW5kTW9kZSAmJgorICAgICAgICAgICAgICAgICBlbmRNb250aCA9PSB0aGF0LmVuZE1vbnRoICYmCisgICAgICAgICAgICAgICAgIGVuZERheSA9PSB0aGF0LmVuZERheSAmJgorICAgICAgICAgICAgICAgICBlbmREYXlPZldlZWsgPT0gdGhhdC5lbmREYXlPZldlZWsgJiYKKyAgICAgICAgICAgICAgICAgZW5kVGltZSA9PSB0aGF0LmVuZFRpbWUgJiYKKyAgICAgICAgICAgICAgICAgZW5kVGltZU1vZGUgPT0gdGhhdC5lbmRUaW1lTW9kZSAmJgorICAgICAgICAgICAgICAgICBzdGFydFllYXIgPT0gdGhhdC5zdGFydFllYXIpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0aW1lIHpvbmUuCisgICAgICogQHJldHVybiAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0aW1lIHpvbmUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIGdldENsYXNzKCkuZ2V0TmFtZSgpICsKKyAgICAgICAgICAgICJbaWQ9IiArIGdldElEKCkgKworICAgICAgICAgICAgIixvZmZzZXQ9IiArIHJhd09mZnNldCArCisgICAgICAgICAgICAiLGRzdFNhdmluZ3M9IiArIGRzdFNhdmluZ3MgKworICAgICAgICAgICAgIix1c2VEYXlsaWdodD0iICsgdXNlRGF5bGlnaHQgKworICAgICAgICAgICAgIixzdGFydFllYXI9IiArIHN0YXJ0WWVhciArCisgICAgICAgICAgICAiLHN0YXJ0TW9kZT0iICsgc3RhcnRNb2RlICsKKyAgICAgICAgICAgICIsc3RhcnRNb250aD0iICsgc3RhcnRNb250aCArCisgICAgICAgICAgICAiLHN0YXJ0RGF5PSIgKyBzdGFydERheSArCisgICAgICAgICAgICAiLHN0YXJ0RGF5T2ZXZWVrPSIgKyBzdGFydERheU9mV2VlayArCisgICAgICAgICAgICAiLHN0YXJ0VGltZT0iICsgc3RhcnRUaW1lICsKKyAgICAgICAgICAgICIsc3RhcnRUaW1lTW9kZT0iICsgc3RhcnRUaW1lTW9kZSArCisgICAgICAgICAgICAiLGVuZE1vZGU9IiArIGVuZE1vZGUgKworICAgICAgICAgICAgIixlbmRNb250aD0iICsgZW5kTW9udGggKworICAgICAgICAgICAgIixlbmREYXk9IiArIGVuZERheSArCisgICAgICAgICAgICAiLGVuZERheU9mV2Vlaz0iICsgZW5kRGF5T2ZXZWVrICsKKyAgICAgICAgICAgICIsZW5kVGltZT0iICsgZW5kVGltZSArCisgICAgICAgICAgICAiLGVuZFRpbWVNb2RlPSIgKyBlbmRUaW1lTW9kZSArICddJzsKKyAgICB9CisKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PXByaXZhdGVzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogVGhlIG1vbnRoIGluIHdoaWNoIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBzdGFydHMuICBUaGlzIHZhbHVlIG11c3QgYmUKKyAgICAgKiBiZXR3ZWVuIDxjb2RlPkNhbGVuZGFyLkpBTlVBUlk8L2NvZGU+IGFuZAorICAgICAqIDxjb2RlPkNhbGVuZGFyLkRFQ0VNQkVSPC9jb2RlPiBpbmNsdXNpdmUuICBUaGlzIHZhbHVlIG11c3Qgbm90IGVxdWFsCisgICAgICogPGNvZGU+ZW5kTW9udGg8L2NvZGU+LgorICAgICAqIDxwPklmIDxjb2RlPnVzZURheWxpZ2h0PC9jb2RlPiBpcyBmYWxzZSwgdGhpcyB2YWx1ZSBpcyBpZ25vcmVkLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBzdGFydE1vbnRoOworCisgICAgLyoqCisgICAgICogVGhpcyBmaWVsZCBoYXMgdHdvIHBvc3NpYmxlIGludGVycHJldGF0aW9uczoKKyAgICAgKiA8ZGw+CisgICAgICogPGR0Pjxjb2RlPnN0YXJ0TW9kZSA9PSBET1dfSU5fTU9OVEg8L2NvZGU+PC9kdD4KKyAgICAgKiA8ZGQ+CisgICAgICogPGNvZGU+c3RhcnREYXk8L2NvZGU+IGluZGljYXRlcyB0aGUgZGF5IG9mIHRoZSBtb250aCBvZgorICAgICAqIDxjb2RlPnN0YXJ0TW9udGg8L2NvZGU+IG9uIHdoaWNoIGRheWxpZ2h0CisgICAgICogc2F2aW5ncyB0aW1lIHN0YXJ0cywgZnJvbSAxIHRvIDI4LCAzMCwgb3IgMzEsIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgKiA8Y29kZT5zdGFydE1vbnRoPC9jb2RlPi4KKyAgICAgKiA8L2RkPgorICAgICAqIDxkdD48Y29kZT5zdGFydE1vZGUgIT0gRE9XX0lOX01PTlRIPC9jb2RlPjwvZHQ+CisgICAgICogPGRkPgorICAgICAqIDxjb2RlPnN0YXJ0RGF5PC9jb2RlPiBpbmRpY2F0ZXMgd2hpY2ggPGNvZGU+c3RhcnREYXlPZldlZWs8L2NvZGU+IGluIHRoCisgICAgICogbW9udGggPGNvZGU+c3RhcnRNb250aDwvY29kZT4gZGF5bGlnaHQKKyAgICAgKiBzYXZpbmdzIHRpbWUgc3RhcnRzIG9uLiAgRm9yIGV4YW1wbGUsIGEgdmFsdWUgb2YgKzEgYW5kIGEKKyAgICAgKiA8Y29kZT5zdGFydERheU9mV2VlazwvY29kZT4gb2YgPGNvZGU+Q2FsZW5kYXIuU1VOREFZPC9jb2RlPiBpbmRpY2F0ZXMgdGhlCisgICAgICogZmlyc3QgU3VuZGF5IG9mIDxjb2RlPnN0YXJ0TW9udGg8L2NvZGU+LiAgTGlrZXdpc2UsICsyIHdvdWxkIGluZGljYXRlIHRoZQorICAgICAqIHNlY29uZCBTdW5kYXksIGFuZCAtMSB0aGUgbGFzdCBTdW5kYXkuICBBIHZhbHVlIG9mIDAgaXMgaWxsZWdhbC4KKyAgICAgKiA8L2RkPgorICAgICAqIDwvdWw+CisgICAgICogPHA+SWYgPGNvZGU+dXNlRGF5bGlnaHQ8L2NvZGU+IGlzIGZhbHNlLCB0aGlzIHZhbHVlIGlzIGlnbm9yZWQuCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IHN0YXJ0RGF5OworCisgICAgLyoqCisgICAgICogVGhlIGRheSBvZiB0aGUgd2VlayBvbiB3aGljaCBkYXlsaWdodCBzYXZpbmdzIHRpbWUgc3RhcnRzLiAgVGhpcyB2YWx1ZQorICAgICAqIG11c3QgYmUgYmV0d2VlbiA8Y29kZT5DYWxlbmRhci5TVU5EQVk8L2NvZGU+IGFuZAorICAgICAqIDxjb2RlPkNhbGVuZGFyLlNBVFVSREFZPC9jb2RlPiBpbmNsdXNpdmUuCisgICAgICogPHA+SWYgPGNvZGU+dXNlRGF5bGlnaHQ8L2NvZGU+IGlzIGZhbHNlIG9yCisgICAgICogPGNvZGU+c3RhcnRNb2RlID09IERBWV9PRl9NT05USDwvY29kZT4sIHRoaXMgdmFsdWUgaXMgaWdub3JlZC4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgc3RhcnREYXlPZldlZWs7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgbWlkbmlnaHQgYXQgd2hpY2ggZGF5bGlnaHQgc2F2aW5ncworICAgICAqIHRpbWUgc3RhcnRzLiAgVGhpcyB2YWx1ZSBpcyBleHByZXNzZWQgYXMgd2FsbCB0aW1lLCBzdGFuZGFyZCB0aW1lLAorICAgICAqIG9yIFVUQyB0aW1lLCBkZXBlbmRpbmcgb24gdGhlIHNldHRpbmcgb2YgPGNvZGU+c3RhcnRUaW1lTW9kZTwvY29kZT4uCisgICAgICogPHA+SWYgPGNvZGU+dXNlRGF5bGlnaHQ8L2NvZGU+IGlzIGZhbHNlLCB0aGlzIHZhbHVlIGlzIGlnbm9yZWQuCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IHN0YXJ0VGltZTsKKworICAgIC8qKgorICAgICAqIFRoZSBmb3JtYXQgb2Ygc3RhcnRUaW1lLCBlaXRoZXIgV0FMTF9USU1FLCBTVEFOREFSRF9USU1FLCBvciBVVENfVElNRS4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgc3RhcnRUaW1lTW9kZTsKKworICAgIC8qKgorICAgICAqIFRoZSBtb250aCBpbiB3aGljaCBkYXlsaWdodCBzYXZpbmdzIHRpbWUgZW5kcy4gIFRoaXMgdmFsdWUgbXVzdCBiZQorICAgICAqIGJldHdlZW4gPGNvZGU+Q2FsZW5kYXIuSkFOVUFSWTwvY29kZT4gYW5kCisgICAgICogPGNvZGU+Q2FsZW5kYXIuVU5ERUNJTUJFUjwvY29kZT4uICBUaGlzIHZhbHVlIG11c3Qgbm90IGVxdWFsCisgICAgICogPGNvZGU+c3RhcnRNb250aDwvY29kZT4uCisgICAgICogPHA+SWYgPGNvZGU+dXNlRGF5bGlnaHQ8L2NvZGU+IGlzIGZhbHNlLCB0aGlzIHZhbHVlIGlzIGlnbm9yZWQuCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IGVuZE1vbnRoOworCisgICAgLyoqCisgICAgICogVGhpcyBmaWVsZCBoYXMgdHdvIHBvc3NpYmxlIGludGVycHJldGF0aW9uczoKKyAgICAgKiA8ZGw+CisgICAgICogPGR0Pjxjb2RlPmVuZE1vZGUgPT0gRE9XX0lOX01PTlRIPC9jb2RlPjwvZHQ+CisgICAgICogPGRkPgorICAgICAqIDxjb2RlPmVuZERheTwvY29kZT4gaW5kaWNhdGVzIHRoZSBkYXkgb2YgdGhlIG1vbnRoIG9mCisgICAgICogPGNvZGU+ZW5kTW9udGg8L2NvZGU+IG9uIHdoaWNoIGRheWxpZ2h0CisgICAgICogc2F2aW5ncyB0aW1lIGVuZHMsIGZyb20gMSB0byAyOCwgMzAsIG9yIDMxLCBkZXBlbmRpbmcgb24gdGhlCisgICAgICogPGNvZGU+ZW5kTW9udGg8L2NvZGU+LgorICAgICAqIDwvZGQ+CisgICAgICogPGR0Pjxjb2RlPmVuZE1vZGUgIT0gRE9XX0lOX01PTlRIPC9jb2RlPjwvZHQ+CisgICAgICogPGRkPgorICAgICAqIDxjb2RlPmVuZERheTwvY29kZT4gaW5kaWNhdGVzIHdoaWNoIDxjb2RlPmVuZERheU9mV2VlazwvY29kZT4gaW4gdGgKKyAgICAgKiBtb250aCA8Y29kZT5lbmRNb250aDwvY29kZT4gZGF5bGlnaHQKKyAgICAgKiBzYXZpbmdzIHRpbWUgZW5kcyBvbi4gIEZvciBleGFtcGxlLCBhIHZhbHVlIG9mICsxIGFuZCBhCisgICAgICogPGNvZGU+ZW5kRGF5T2ZXZWVrPC9jb2RlPiBvZiA8Y29kZT5DYWxlbmRhci5TVU5EQVk8L2NvZGU+IGluZGljYXRlcyB0aGUKKyAgICAgKiBmaXJzdCBTdW5kYXkgb2YgPGNvZGU+ZW5kTW9udGg8L2NvZGU+LiAgTGlrZXdpc2UsICsyIHdvdWxkIGluZGljYXRlIHRoZQorICAgICAqIHNlY29uZCBTdW5kYXksIGFuZCAtMSB0aGUgbGFzdCBTdW5kYXkuICBBIHZhbHVlIG9mIDAgaXMgaWxsZWdhbC4KKyAgICAgKiA8L2RkPgorICAgICAqIDwvdWw+CisgICAgICogPHA+SWYgPGNvZGU+dXNlRGF5bGlnaHQ8L2NvZGU+IGlzIGZhbHNlLCB0aGlzIHZhbHVlIGlzIGlnbm9yZWQuCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IGVuZERheTsKKworICAgIC8qKgorICAgICAqIFRoZSBkYXkgb2YgdGhlIHdlZWsgb24gd2hpY2ggZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGVuZHMuICBUaGlzIHZhbHVlCisgICAgICogbXVzdCBiZSBiZXR3ZWVuIDxjb2RlPkNhbGVuZGFyLlNVTkRBWTwvY29kZT4gYW5kCisgICAgICogPGNvZGU+Q2FsZW5kYXIuU0FUVVJEQVk8L2NvZGU+IGluY2x1c2l2ZS4KKyAgICAgKiA8cD5JZiA8Y29kZT51c2VEYXlsaWdodDwvY29kZT4gaXMgZmFsc2Ugb3IKKyAgICAgKiA8Y29kZT5lbmRNb2RlID09IERBWV9PRl9NT05USDwvY29kZT4sIHRoaXMgdmFsdWUgaXMgaWdub3JlZC4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZW5kRGF5T2ZXZWVrOworCisgICAgLyoqCisgICAgICogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIG1pZG5pZ2h0IGF0IHdoaWNoIGRheWxpZ2h0IHNhdmluZ3MKKyAgICAgKiB0aW1lIGVuZHMuICBUaGlzIHZhbHVlIGlzIGV4cHJlc3NlZCBhcyB3YWxsIHRpbWUsIHN0YW5kYXJkIHRpbWUsCisgICAgICogb3IgVVRDIHRpbWUsIGRlcGVuZGluZyBvbiB0aGUgc2V0dGluZyBvZiA8Y29kZT5lbmRUaW1lTW9kZTwvY29kZT4uCisgICAgICogPHA+SWYgPGNvZGU+dXNlRGF5bGlnaHQ8L2NvZGU+IGlzIGZhbHNlLCB0aGlzIHZhbHVlIGlzIGlnbm9yZWQuCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IGVuZFRpbWU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgZm9ybWF0IG9mIGVuZFRpbWUsIGVpdGhlciBXQUxMX1RJTUUsIFNUQU5EQVJEX1RJTUUsIG9yIFVUQ19USU1FLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBlbmRUaW1lTW9kZTsKKworICAgIC8qKgorICAgICAqIFRoZSB5ZWFyIGluIHdoaWNoIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBpcyBmaXJzdCBvYnNlcnZlZC4gIFRoaXMgaXMgYW4gQUQKKyAgICAgKiB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgbGVzcyB0aGFuIDEgdGhlbiBkYXlsaWdodCBzYXZpbmdzIGlzIG9ic2VydmVkCisgICAgICogZm9yIGFsbCBBRCB5ZWFycy4KKyAgICAgKiA8cD5JZiA8Y29kZT51c2VEYXlsaWdodDwvY29kZT4gaXMgZmFsc2UsIHRoaXMgdmFsdWUgaXMgaWdub3JlZC4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgc3RhcnRZZWFyOworCisgICAgLyoqCisgICAgICogVGhlIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGlzIHpvbmUgYW5kIEdNVC4gIE5lZ2F0aXZlIG9mZnNldHMKKyAgICAgKiBhcmUgdG8gdGhlIHdlc3Qgb2YgR3JlZW53aWNoLiAgVG8gb2J0YWluIGxvY2FsIDxlbT5zdGFuZGFyZDwvZW0+IHRpbWUsCisgICAgICogYWRkIHRoZSBvZmZzZXQgdG8gR01UIHRpbWUuICBUbyBvYnRhaW4gbG9jYWwgd2FsbCB0aW1lIGl0IG1heSBhbHNvIGJlCisgICAgICogbmVjZXNzYXJ5IHRvIGFkZCA8Y29kZT5kc3RTYXZpbmdzPC9jb2RlPi4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcmF3T2Zmc2V0OworCisgICAgLyoqCisgICAgICogQSBib29sZWFuIHZhbHVlIHdoaWNoIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyB6b25lIHVzZXMgZGF5bGlnaHQKKyAgICAgKiBzYXZpbmdzIHRpbWUuICBJZiB0aGlzIHZhbHVlIGlzIGZhbHNlLCBzZXZlcmFsIG90aGVyIGZpZWxkcyBhcmUgaWdub3JlZC4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHVzZURheWxpZ2h0PWZhbHNlOyAvLyBpbmRpY2F0ZSBpZiB0aGlzIHRpbWUgem9uZSB1c2VzIERTVAorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IG1pbGxpc1BlckhvdXIgPSA2MCo2MCoxMDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBtaWxsaXNQZXJEYXkgID0gMjQqbWlsbGlzUGVySG91cjsKKworICAgIC8qKgorICAgICAqIFRoaXMgZmllbGQgd2FzIHNlcmlhbGl6ZWQgaW4gSkRLIDEuMSwgc28gd2UgaGF2ZSB0byBrZWVwIGl0IHRoYXQgd2F5CisgICAgICogdG8gbWFpbnRhaW4gc2VyaWFsaXphdGlvbiBjb21wYXRpYmlsaXR5LiBIb3dldmVyLCB0aGVyZSdzIG5vIG5lZWQgdG8KKyAgICAgKiByZWNyZWF0ZSB0aGUgYXJyYXkgZWFjaCB0aW1lIHdlIGNyZWF0ZSBhIG5ldyB0aW1lIHpvbmUuCisgICAgICogQHNlcmlhbCBBbiBhcnJheSBvZiBieXRlcyBjb250YWluaW5nIHRoZSB2YWx1ZXMgezMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsCisgICAgICogMzEsIDMxLCAzMCwgMzEsIDMwLCAzMX0uICBUaGlzIGlzIGlnbm9yZWQgYXMgb2YgdGhlIEphdmEgMiBwbGF0Zm9ybSB2MS4yLCBob3dldmVyLCBpdCBtdXN0CisgICAgICogYmUgc3RyZWFtZWQgb3V0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggSkRLIDEuMS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGJ5dGUgbW9udGhMZW5ndGhbXSA9IHN0YXRpY01vbnRoTGVuZ3RoOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJ5dGUgc3RhdGljTW9udGhMZW5ndGhbXSA9IHszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMX07CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYnl0ZSBzdGF0aWNMZWFwTW9udGhMZW5ndGhbXSA9IHszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMX07CisgICAgLy8gTGF6eS1pbml0aWFsaXplIHRoaXMgdG8gcHJldmVudCBjaXJjdWxhciBzdGF0aWMgaW5pdCBkZXBlbmRlbmN5CisgICAgcHJpdmF0ZSBzdGF0aWMgR3JlZ29yaWFuQ2FsZW5kYXIgaW50ZXJuYWxDYWwgPSBudWxsOworCisgICAgLyoqCisgICAgICogVmFyaWFibGVzIHNwZWNpZnlpbmcgdGhlIG1vZGUgb2YgdGhlIHN0YXJ0IHJ1bGUuICBUYWtlcyB0aGUgZm9sbG93aW5nCisgICAgICogdmFsdWVzOgorICAgICAqIDxkbD4KKyAgICAgKiA8ZHQ+PGNvZGU+RE9NX01PREU8L2NvZGU+PC9kdD4KKyAgICAgKiA8ZGQ+CisgICAgICogRXhhY3QgZGF5IG9mIHdlZWs7IGUuZy4sIE1hcmNoIDEuCisgICAgICogPC9kZD4KKyAgICAgKiA8ZHQ+PGNvZGU+RE9XX0lOX01PTlRIX01PREU8L2NvZGU+PC9kdD4gICAgCisgICAgICogPGRkPgorICAgICAqIERheSBvZiB3ZWVrIGluIG1vbnRoOyBlLmcuLCBsYXN0IFN1bmRheSBpbiBNYXJjaC4KKyAgICAgKiA8L2RkPgorICAgICAqIDxkdD48Y29kZT5ET1dfR0VfRE9NX01PREU8L2NvZGU+PC9kdD4KKyAgICAgKiA8ZGQ+CisgICAgICogRGF5IG9mIHdlZWsgYWZ0ZXIgZGF5IG9mIG1vbnRoOyBlLmcuLCBTdW5kYXkgb24gb3IgYWZ0ZXIgTWFyY2ggMTUuCisgICAgICogPC9kZD4KKyAgICAgKiA8ZHQ+PGNvZGU+RE9XX0xFX0RPTV9NT0RFPC9jb2RlPjwvZHQ+CisgICAgICogPGRkPgorICAgICAqIERheSBvZiB3ZWVrIGJlZm9yZSBkYXkgb2YgbW9udGg7IGUuZy4sIFN1bmRheSBvbiBvciBiZWZvcmUgTWFyY2ggMTUuCisgICAgICogPC9kZD4KKyAgICAgKiA8L2RsPgorICAgICAqIFRoZSBzZXR0aW5nIG9mIHRoaXMgZmllbGQgYWZmZWN0cyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlCisgICAgICogPGNvZGU+c3RhcnREYXk8L2NvZGU+IGZpZWxkLgorICAgICAqIDxwPklmIDxjb2RlPnVzZURheWxpZ2h0PC9jb2RlPiBpcyBmYWxzZSwgdGhpcyB2YWx1ZSBpcyBpZ25vcmVkLgorICAgICAqIEBzZXJpYWwKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBzdGFydE1vZGU7CisKKyAgICAvKioKKyAgICAgKiBWYXJpYWJsZXMgc3BlY2lmeWluZyB0aGUgbW9kZSBvZiB0aGUgZW5kIHJ1bGUuICBUYWtlcyB0aGUgZm9sbG93aW5nCisgICAgICogdmFsdWVzOgorICAgICAqIDxkbD4KKyAgICAgKiA8ZHQ+PGNvZGU+RE9NX01PREU8L2NvZGU+PC9kdD4KKyAgICAgKiA8ZGQ+CisgICAgICogRXhhY3QgZGF5IG9mIHdlZWs7IGUuZy4sIE1hcmNoIDEuCisgICAgICogPC9kZD4KKyAgICAgKiA8ZHQ+PGNvZGU+RE9XX0lOX01PTlRIX01PREU8L2NvZGU+PC9kdD4gICAgCisgICAgICogPGRkPgorICAgICAqIERheSBvZiB3ZWVrIGluIG1vbnRoOyBlLmcuLCBsYXN0IFN1bmRheSBpbiBNYXJjaC4KKyAgICAgKiA8L2RkPgorICAgICAqIDxkdD48Y29kZT5ET1dfR0VfRE9NX01PREU8L2NvZGU+PC9kdD4KKyAgICAgKiA8ZGQ+CisgICAgICogRGF5IG9mIHdlZWsgYWZ0ZXIgZGF5IG9mIG1vbnRoOyBlLmcuLCBTdW5kYXkgb24gb3IgYWZ0ZXIgTWFyY2ggMTUuCisgICAgICogPC9kZD4KKyAgICAgKiA8ZHQ+PGNvZGU+RE9XX0xFX0RPTV9NT0RFPC9jb2RlPjwvZHQ+CisgICAgICogPGRkPgorICAgICAqIERheSBvZiB3ZWVrIGJlZm9yZSBkYXkgb2YgbW9udGg7IGUuZy4sIFN1bmRheSBvbiBvciBiZWZvcmUgTWFyY2ggMTUuCisgICAgICogPC9kZD4KKyAgICAgKiA8L2RsPgorICAgICAqIFRoZSBzZXR0aW5nIG9mIHRoaXMgZmllbGQgYWZmZWN0cyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlCisgICAgICogPGNvZGU+ZW5kRGF5PC9jb2RlPiBmaWVsZC4KKyAgICAgKiA8cD5JZiA8Y29kZT51c2VEYXlsaWdodDwvY29kZT4gaXMgZmFsc2UsIHRoaXMgdmFsdWUgaXMgaWdub3JlZC4KKyAgICAgKiBAc2VyaWFsCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZW5kTW9kZTsKKworICAgIC8qKgorICAgICAqIEEgcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGluZyB0aGUgYW1vdW50IG9mIHRpbWUgc2F2ZWQgZHVyaW5nIERTVCBpbgorICAgICAqIG1pbGxpc2Vjb25kcy4KKyAgICAgKiBUeXBpY2FsbHkgb25lIGhvdXIgKDM2MDAwMDApOyBzb21ldGltZXMgMzAgbWludXRlcyAoMTgwMDAwMCkuCisgICAgICogPHA+SWYgPGNvZGU+dXNlRGF5bGlnaHQ8L2NvZGU+IGlzIGZhbHNlLCB0aGlzIHZhbHVlIGlzIGlnbm9yZWQuCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IGRzdFNhdmluZ3M7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudHMgc3BlY2lmeWluZyB2YWx1ZXMgb2Ygc3RhcnRNb2RlIGFuZCBlbmRNb2RlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBET01fTU9ERSAgICAgICAgICA9IDE7IC8vIEV4YWN0IGRheSBvZiBtb250aCwgIk1hciAxIgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBET1dfSU5fTU9OVEhfTU9ERSA9IDI7IC8vIERheSBvZiB3ZWVrIGluIG1vbnRoLCAibGFzdFN1biIKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRE9XX0dFX0RPTV9NT0RFICAgPSAzOyAvLyBEYXkgb2Ygd2VlayBhZnRlciBkYXkgb2YgbW9udGgsICJTdW4+PTE1IgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBET1dfTEVfRE9NX01PREUgICA9IDQ7IC8vIERheSBvZiB3ZWVrIGJlZm9yZSBkYXkgb2YgbW9udGgsICJTdW48PTIxIgorCisgICAgLyoqCisgICAgICogQ29uc3RhbnQgZm9yIGEgcnVsZSBzcGVjaWZpZWQgYXMgd2FsbCB0aW1lLiAgV2FsbCB0aW1lIGlzIHN0YW5kYXJkIHRpbWUKKyAgICAgKiBmb3IgdGhlIG9uc2V0IHJ1bGUsIGFuZCBkYXlsaWdodCB0aW1lIGZvciB0aGUgZW5kIHJ1bGUuICBNb3N0IHJ1bGVzCisgICAgICogYXJlIHNwZWNpZmllZCBhcyB3YWxsIHRpbWUuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBXQUxMX1RJTUUgPSAwOyAvLyBaZXJvIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgYSBydWxlIHNwZWNpZmllZCBhcyBzdGFuZGFyZCB0aW1lLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgU1RBTkRBUkRfVElNRSA9IDE7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCBmb3IgYSBydWxlIHNwZWNpZmllZCBhcyBVVEMuICBFVSBydWxlcyBhcmUgc3BlY2lmaWVkIGFzIFVUQworICAgICAqIHRpbWUuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBVVENfVElNRSA9IDI7CisKKyAgICAvLyBQcm9jbGFpbSBjb21wYXRpYmlsaXR5IHdpdGggMS4xCisgICAgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC00MDMyNTA5NzEyMTU0NjUwNTBMOworCisgICAgLy8gdGhlIGludGVybmFsIHNlcmlhbCB2ZXJzaW9uIHdoaWNoIHNheXMgd2hpY2ggdmVyc2lvbiB3YXMgd3JpdHRlbgorICAgIC8vIC0gMCAoZGVmYXVsdCkgZm9yIHZlcnNpb24gdXAgdG8gSkRLIDEuMS4zCisgICAgLy8gLSAxIGZvciB2ZXJzaW9uIGZyb20gSkRLIDEuMS40LCB3aGljaCBpbmNsdWRlcyAzIG5ldyBmaWVsZHMKKyAgICAvLyAtIDIgZm9yIEpESyAxLjMsIHdoaWNoIGluY2x1ZGVzIDIgbmV3IGZpbGVzCisgICAgc3RhdGljIGZpbmFsIGludCBjdXJyZW50U2VyaWFsVmVyc2lvbiA9IDI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgc2VyaWFsaXplZCBkYXRhIG9uIHRoZSBzdHJlYW0uICBQb3NzaWJsZSB2YWx1ZXM6CisgICAgICogPGRsPgorICAgICAqIDxkdD48Yj4wPC9iPiBvciBub3QgcHJlc2VudCBvbiBzdHJlYW08L2R0PgorICAgICAqIDxkZD4KKyAgICAgKiBKREsgMS4xLjMgb3IgZWFybGllci4KKyAgICAgKiA8L2RkPgorICAgICAqIDxkdD48Yj4xPC9iPjwvZHQ+CisgICAgICogPGRkPgorICAgICAqIEpESyAxLjEuNCBvciBsYXRlci4gIEluY2x1ZGVzIHRocmVlIG5ldyBmaWVsZHM6IDxjb2RlPnN0YXJ0TW9kZTwvY29kZT4sCisgICAgICogPGNvZGU+ZW5kTW9kZTwvY29kZT4sIGFuZCA8Y29kZT5kc3RTYXZpbmdzPC9jb2RlPi4KKyAgICAgKiA8L2RkPgorICAgICAqIDxkdD48Yj4yPC9iPjwvZHQ+CisgICAgICogPGRkPgorICAgICAqIEpESyAxLjMgb3IgbGF0ZXIuICBJbmNsdWRlcyB0d28gbmV3IGZpZWxkczogPGNvZGU+c3RhcnRUaW1lTW9kZTwvY29kZT4KKyAgICAgKiBhbmQgPGNvZGU+ZW5kVGltZU1vZGU8L2NvZGU+LgorICAgICAqIDwvZGQ+CisgICAgICogPC9kbD4KKyAgICAgKiBXaGVuIHN0cmVhbWluZyBvdXQgdGhpcyBjbGFzcywgdGhlIG1vc3QgcmVjZW50IGZvcm1hdAorICAgICAqIGFuZCB0aGUgaGlnaGVzdCBhbGxvd2FibGUgPGNvZGU+c2VyaWFsVmVyc2lvbk9uU3RyZWFtPC9jb2RlPgorICAgICAqIGlzIHdyaXR0ZW4uCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgaW50IHNlcmlhbFZlcnNpb25PblN0cmVhbSA9IGN1cnJlbnRTZXJpYWxWZXJzaW9uOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUnVsZSByZXByZXNlbnRhdGlvbgorICAgIC8vCisgICAgLy8gV2UgcmVwcmVzZW50IHRoZSBmb2xsb3dpbmcgZmxhdm9ycyBvZiBydWxlczoKKyAgICAvLyAgICAgICA1ICAgICAgICB0aGUgZmlmdGggb2YgdGhlIG1vbnRoCisgICAgLy8gICAgICAgbGFzdFN1biAgdGhlIGxhc3QgU3VuZGF5IGluIHRoZSBtb250aAorICAgIC8vICAgICAgIGxhc3RNb24gIHRoZSBsYXN0IE1vbmRheSBpbiB0aGUgbW9udGgKKyAgICAvLyAgICAgICBTdW4+PTggICBmaXJzdCBTdW5kYXkgb24gb3IgYWZ0ZXIgdGhlIGVpZ2h0aAorICAgIC8vICAgICAgIFN1bjw9MjUgIGxhc3QgU3VuZGF5IG9uIG9yIGJlZm9yZSB0aGUgMjV0aAorICAgIC8vIFRoaXMgaXMgZnVydGhlciBjb21wbGljYXRlZCBieSB0aGUgZmFjdCB0aGF0IHdlIG5lZWQgdG8gcmVtYWluCisgICAgLy8gYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHRoZSAxLjEgRkNTLiAgRmluYWxseSwgd2UgbmVlZCB0byBtaW5pbWl6ZQorICAgIC8vIEFQSSBjaGFuZ2VzLiAgSW4gb3JkZXIgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMsIHdlIHN1cHBvcnQKKyAgICAvLyB0aHJlZSByZXByZXNlbnRhdGlvbiBzeXN0ZW1zLCBhbmQgd2UgdHJhbnNsYXRlIGJldHdlZW4gdGhlbS4KKyAgICAvLworICAgIC8vIElOVEVSTkFMIFJFUFJFU0VOVEFUSU9OCisgICAgLy8gVGhpcyBpcyB0aGUgZm9ybWF0IFNpbXBsZVRpbWVab25lIG9iamVjdHMgdGFrZSBhZnRlciBjb25zdHJ1Y3Rpb24gb3IKKyAgICAvLyBzdHJlYW1pbmcgaW4gaXMgY29tcGxldGUuICBSdWxlcyBhcmUgcmVwcmVzZW50ZWQgZGlyZWN0bHksIHVzaW5nIGFuCisgICAgLy8gdW5lbmNvZGVkIGZvcm1hdC4gIFdlIHdpbGwgZGlzY3VzcyB0aGUgc3RhcnQgcnVsZSBvbmx5IGJlbG93OyB0aGUgZW5kCisgICAgLy8gcnVsZSBpcyBhbmFsb2dvdXMuCisgICAgLy8gICBzdGFydE1vZGUgICAgICBUYWtlcyBvbiBlbnVtZXJhdGVkIHZhbHVlcyBEQVlfT0ZfTU9OVEgsCisgICAgLy8gICAgICAgICAgICAgICAgICBET1dfSU5fTU9OVEgsIERPV19BRlRFUl9ET00sIG9yIERPV19CRUZPUkVfRE9NLgorICAgIC8vICAgc3RhcnREYXkgICAgICAgVGhlIGRheSBvZiB0aGUgbW9udGgsIG9yIGZvciBET1dfSU5fTU9OVEggbW9kZSwgYQorICAgIC8vICAgICAgICAgICAgICAgICAgdmFsdWUgaW5kaWNhdGluZyB3aGljaCBET1csIHN1Y2ggYXMgKzEgZm9yIGZpcnN0LAorICAgIC8vICAgICAgICAgICAgICAgICAgKzIgZm9yIHNlY29uZCwgLTEgZm9yIGxhc3QsIGV0Yy4KKyAgICAvLyAgIHN0YXJ0RGF5T2ZXZWVrIFRoZSBkYXkgb2YgdGhlIHdlZWsuICBJZ25vcmVkIGZvciBEQVlfT0ZfTU9OVEguCisgICAgLy8KKyAgICAvLyBFTkNPREVEIFJFUFJFU0VOVEFUSU9OCisgICAgLy8gVGhpcyBpcyB0aGUgZm9ybWF0IGFjY2VwdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBhbmQgYnkgc2V0U3RhcnRSdWxlKCkKKyAgICAvLyBhbmQgc2V0RW5kUnVsZSgpLiAgSXQgdXNlcyB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBwb3NpdGl2ZSwgbmVnYXRpdmUsCisgICAgLy8gYW5kIHplcm8gdmFsdWVzIHRvIGVuY29kZSB0aGUgZGlmZmVyZW50IHJ1bGVzLiAgVGhpcyByZXByZXNlbnRhdGlvbgorICAgIC8vIGFsbG93cyB1cyB0byBzcGVjaWZ5IGFsbCB0aGUgZGlmZmVyZW50IHJ1bGUgZmxhdm9ycyB3aXRob3V0IGFsdGVyaW5nCisgICAgLy8gdGhlIEFQSS4KKyAgICAvLyAgIE1PREUgICAgICAgICAgICAgIHN0YXJ0TW9udGggICAgc3RhcnREYXkgICAgc3RhcnREYXlPZldlZWsKKyAgICAvLyAgIERPV19JTl9NT05USF9NT0RFID49MCAgICAgICAgICAgIT0wICAgICAgICAgPjAKKyAgICAvLyAgIERPTV9NT0RFICAgICAgICAgID49MCAgICAgICAgICAgPjAgICAgICAgICAgPT0wCisgICAgLy8gICBET1dfR0VfRE9NX01PREUgICA+PTAgICAgICAgICAgID4wICAgICAgICAgIDwwCisgICAgLy8gICBET1dfTEVfRE9NX01PREUgICA+PTAgICAgICAgICAgIDwwICAgICAgICAgIDwwCisgICAgLy8gICAobm8gRFNUKSAgICAgICAgICBkb24ndCBjYXJlICAgID09MCAgICAgICAgIGRvbid0IGNhcmUKKyAgICAvLworICAgIC8vIFNUUkVBTUVEIFJFUFJFU0VOVEFUSU9OCisgICAgLy8gV2UgbXVzdCByZXRhaW4gYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgMS4xIEZDUy4gIFRoZSAxLjEgY29kZSBvbmx5CisgICAgLy8gaGFuZGxlcyBET1dfSU5fTU9OVEhfTU9ERSBhbmQgbm9uLURTVCBtb2RlLCB0aGUgbGF0dGVyIGluZGljYXRlZCBieSB0aGUKKyAgICAvLyBmbGFnIHVzZURheWxpZ2h0LiAgV2hlbiB3ZSBzdHJlYW0gYW4gb2JqZWN0IG91dCwgd2UgdHJhbnNsYXRlIGludG8gYW4KKyAgICAvLyBhcHByb3hpbWF0ZSBET1dfSU5fTU9OVEhfTU9ERSByZXByZXNlbnRhdGlvbiBzbyB0aGUgb2JqZWN0IGNhbiBiZSBwYXJzZWQKKyAgICAvLyBhbmQgdXNlZCBieSAxLjEgY29kZS4gIEZvbGxvd2luZyB0aGF0LCB3ZSB3cml0ZSBvdXQgdGhlIGZ1bGwKKyAgICAvLyByZXByZXNlbnRhdGlvbiBzZXBhcmF0ZWx5IHNvIHRoYXQgY29udGVtcG9yYXJ5IGNvZGUgY2FuIHJlY29nbml6ZSBhbmQKKyAgICAvLyBwYXJzZSBpdC4gIFRoZSBmdWxsIHJlcHJlc2VudGF0aW9uIGlzIHdyaXR0ZW4gaW4gYSAicGFja2VkIiBmb3JtYXQsCisgICAgLy8gY29uc2lzdGluZyBvZiBhIHZlcnNpb24gbnVtYmVyLCBhIGxlbmd0aCwgYW5kIGFuIGFycmF5IG9mIGJ5dGVzLiAgRnV0dXJlCisgICAgLy8gdmVyc2lvbnMgb2YgdGhpcyBjbGFzcyBtYXkgc3BlY2lmeSBkaWZmZXJlbnQgdmVyc2lvbnMuICBJZiB0aGV5IHdpc2ggdG8KKyAgICAvLyBpbmNsdWRlIGFkZGl0aW9uYWwgZGF0YSwgdGhleSBzaG91bGQgZG8gc28gYnkgc3RvcmluZyB0aGVtIGFmdGVyIHRoZQorICAgIC8vIHBhY2tlZCByZXByZXNlbnRhdGlvbiBiZWxvdy4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEdpdmVuIGEgc2V0IG9mIGVuY29kZWQgcnVsZXMgaW4gc3RhcnREYXkgYW5kIHN0YXJ0RGF5T2ZNb250aCwgZGVjb2RlCisgICAgICogdGhlbSBhbmQgc2V0IHRoZSBzdGFydE1vZGUgYXBwcm9wcmlhdGVseS4gIERvIHRoZSBzYW1lIGZvciBlbmREYXkgYW5kCisgICAgICogZW5kRGF5T2ZNb250aC4gIFVwb24gZW50cnksIHRoZSBkYXkgb2Ygd2VlayB2YXJpYWJsZXMgbWF5IGJlIHplcm8gb3IKKyAgICAgKiBuZWdhdGl2ZSwgaW4gb3JkZXIgdG8gaW5kaWNhdGUgc3BlY2lhbCBtb2Rlcy4gIFRoZSBkYXkgb2YgbW9udGgKKyAgICAgKiB2YXJpYWJsZXMgbWF5IGFsc28gYmUgbmVnYXRpdmUuICBVcG9uIGV4aXQsIHRoZSBtb2RlIHZhcmlhYmxlcyB3aWxsIGJlCisgICAgICogc2V0LCBhbmQgdGhlIGRheSBvZiB3ZWVrIGFuZCBkYXkgb2YgbW9udGggdmFyaWFibGVzIHdpbGwgYmUgcG9zaXRpdmUuCisgICAgICogVGhpcyBtZXRob2QgYWxzbyByZWNvZ25pemVzIGEgc3RhcnREYXkgb3IgZW5kRGF5IG9mIHplcm8gYXMgaW5kaWNhdGluZworICAgICAqIG5vIERTVC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZGVjb2RlUnVsZXMoKQorICAgIHsKKyAgICAgICAgZGVjb2RlU3RhcnRSdWxlKCk7CisgICAgICAgIGRlY29kZUVuZFJ1bGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNvZGUgdGhlIHN0YXJ0IHJ1bGUgYW5kIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzLiAgVGhlIHBhcmFtZXRlcnMgYXJlCisgICAgICogZXhwZWN0ZWQgdG8gYmUgaW4gZW5jb2RlZCBmb3JtLCB3aGljaCByZXByZXNlbnRzIHRoZSB2YXJpb3VzIHJ1bGUgbW9kZXMKKyAgICAgKiBieSBuZWdhdGluZyBvciB6ZXJvaW5nIGNlcnRhaW4gdmFsdWVzLiAgUmVwcmVzZW50YXRpb24gZm9ybWF0cyBhcmU6CisgICAgICogPHA+CisgICAgICogPHByZT4KKyAgICAgKiAgICAgICAgICAgIERPV19JTl9NT05USCAgRE9NICAgIERPVz49RE9NICBET1c8PURPTSAgbm8gRFNUCisgICAgICogICAgICAgICAgICAtLS0tLS0tLS0tLS0gIC0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tLS0KKyAgICAgKiBtb250aCAgICAgICAwLi4xMSAgICAgICAgc2FtZSAgICBzYW1lICAgICAgc2FtZSAgICAgZG9uJ3QgY2FyZQorICAgICAqIGRheSAgICAgICAgLTUuLjUgICAgICAgICAxLi4zMSAgIDEuLjMxICAgIC0xLi4tMzEgICAwCisgICAgICogZGF5T2ZXZWVrICAgMS4uNyAgICAgICAgIDAgICAgICAtMS4uLTcgICAgLTEuLi03ICAgIGRvbid0IGNhcmUKKyAgICAgKiB0aW1lICAgICAgICAwLi5PTkVEQVkgICAgc2FtZSAgICBzYW1lICAgICAgc2FtZSAgICAgZG9uJ3QgY2FyZQorICAgICAqIDwvcHJlPgorICAgICAqIFRoZSByYW5nZSBmb3IgbW9udGggZG9lcyBub3QgaW5jbHVkZSBVTkRFQ0lNQkVSIHNpbmNlIHRoaXMgY2xhc3MgaXMKKyAgICAgKiByZWFsbHkgc3BlY2lmaWMgdG8gR3JlZ29yaWFuQ2FsZW5kYXIsIHdoaWNoIGRvZXMgbm90IHVzZSB0aGF0IG1vbnRoLgorICAgICAqIFRoZSByYW5nZSBmb3IgdGltZSBpbmNsdWRlcyBPTkVEQVkgKHZzLiBlbmRpbmcgYXQgT05FREFZLTEpIGJlY2F1c2UgdGhlCisgICAgICogZW5kIHJ1bGUgaXMgYW4gZXhjbHVzaXZlIGxpbWl0IHBvaW50LiAgVGhhdCBpcywgdGhlIHJhbmdlIG9mIHRpbWVzIHRoYXQKKyAgICAgKiBhcmUgaW4gRFNUIGluY2x1ZGUgdGhvc2UgPj0gdGhlIHN0YXJ0IGFuZCA8IHRoZSBlbmQuICBGb3IgdGhpcyByZWFzb24sCisgICAgICogaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHNwZWNpZnkgYW4gZW5kIG9mIE9ORURBWSBpbiBvcmRlciB0byBpbmNsdWRlIHRoZQorICAgICAqIGVudGlyZSBkYXkuICBBbHRob3VnaCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gdGltZSAwIG9mIHRoZSBmb2xsb3dpbmcgZGF5LAorICAgICAqIGl0J3Mgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoYXQsIGZvciBleGFtcGxlLCBvbiBEZWNlbWJlciAzMS4KKyAgICAgKiBXaGlsZSBhcmd1YWJseSB0aGUgc3RhcnQgcmFuZ2Ugc2hvdWxkIHN0aWxsIGJlIDAuLk9ORURBWS0xLCB3ZSBrZWVwCisgICAgICogdGhlIHN0YXJ0IGFuZCBlbmQgcmFuZ2VzIHRoZSBzYW1lIGZvciBjb25zaXN0ZW5jeS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZGVjb2RlU3RhcnRSdWxlKCkgeworICAgICAgICB1c2VEYXlsaWdodCA9IChzdGFydERheSAhPSAwKSAmJiAoZW5kRGF5ICE9IDApOworICAgICAgICBpZiAoc3RhcnREYXkgIT0gMCkgeworICAgICAgICAgICAgaWYgKHN0YXJ0TW9udGggPCBDYWxlbmRhci5KQU5VQVJZIHx8IHN0YXJ0TW9udGggPiBDYWxlbmRhci5ERUNFTUJFUikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAiSWxsZWdhbCBzdGFydCBtb250aCAiICsgc3RhcnRNb250aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhcnRUaW1lIDwgMCB8fCBzdGFydFRpbWUgPj0gbWlsbGlzUGVyRGF5KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIHN0YXJ0IHRpbWUgIiArIHN0YXJ0VGltZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhcnREYXlPZldlZWsgPT0gMCkgeworICAgICAgICAgICAgICAgIHN0YXJ0TW9kZSA9IERPTV9NT0RFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXlPZldlZWsgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0TW9kZSA9IERPV19JTl9NT05USF9NT0RFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5T2ZXZWVrID0gLXN0YXJ0RGF5T2ZXZWVrOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1vZGUgPSBET1dfR0VfRE9NX01PREU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydERheSA9IC1zdGFydERheTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TW9kZSA9IERPV19MRV9ET01fTU9ERTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXlPZldlZWsgPiBDYWxlbmRhci5TQVRVUkRBWSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIklsbGVnYWwgc3RhcnQgZGF5IG9mIHdlZWsgIiArIHN0YXJ0RGF5T2ZXZWVrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhcnRNb2RlID09IERPV19JTl9NT05USF9NT0RFKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0RGF5IDwgLTUgfHwgc3RhcnREYXkgPiA1KSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklsbGVnYWwgc3RhcnQgZGF5IG9mIHdlZWsgaW4gbW9udGggIiArIHN0YXJ0RGF5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0RGF5IDwgMSB8fCBzdGFydERheSA+IHN0YXRpY01vbnRoTGVuZ3RoW3N0YXJ0TW9udGhdKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIHN0YXJ0IGRheSAiICsgc3RhcnREYXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjb2RlIHRoZSBlbmQgcnVsZSBhbmQgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMuICBUaGlzIG1ldGhvZCBpcyBleGFjdGx5CisgICAgICogYW5hbG9nb3VzIHRvIGRlY29kZVN0YXJ0UnVsZSgpLgorICAgICAqIEBzZWUgZGVjb2RlU3RhcnRSdWxlCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGRlY29kZUVuZFJ1bGUoKSB7CisgICAgICAgIHVzZURheWxpZ2h0ID0gKHN0YXJ0RGF5ICE9IDApICYmIChlbmREYXkgIT0gMCk7CisgICAgICAgIGlmIChlbmREYXkgIT0gMCkgeworICAgICAgICAgICAgaWYgKGVuZE1vbnRoIDwgQ2FsZW5kYXIuSkFOVUFSWSB8fCBlbmRNb250aCA+IENhbGVuZGFyLkRFQ0VNQkVSKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIGVuZCBtb250aCAiICsgZW5kTW9udGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVuZFRpbWUgPCAwIHx8IGVuZFRpbWUgPj0gbWlsbGlzUGVyRGF5KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIGVuZCB0aW1lICIgKyBlbmRUaW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlbmREYXlPZldlZWsgPT0gMCkgeworICAgICAgICAgICAgICAgIGVuZE1vZGUgPSBET01fTU9ERTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZERheU9mV2VlayA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZW5kTW9kZSA9IERPV19JTl9NT05USF9NT0RFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVuZERheU9mV2VlayA9IC1lbmREYXlPZldlZWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbmREYXkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRNb2RlID0gRE9XX0dFX0RPTV9NT0RFOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF5ID0gLWVuZERheTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZE1vZGUgPSBET1dfTEVfRE9NX01PREU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGVuZERheU9mV2VlayA+IENhbGVuZGFyLlNBVFVSREFZKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWxsZWdhbCBlbmQgZGF5IG9mIHdlZWsgIiArIGVuZERheU9mV2Vlayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVuZE1vZGUgPT0gRE9XX0lOX01PTlRIX01PREUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5kRGF5IDwgLTUgfHwgZW5kRGF5ID4gNSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIGVuZCBkYXkgb2Ygd2VlayBpbiBtb250aCAiICsgZW5kRGF5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVuZERheSA8IDEgfHwgZW5kRGF5ID4gc3RhdGljTW9udGhMZW5ndGhbZW5kTW9udGhdKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIGVuZCBkYXkgIiArIGVuZERheSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYWtlIHJ1bGVzIGNvbXBhdGlibGUgdG8gMS4xIEZDUyBjb2RlLiAgU2luY2UgMS4xIEZDUyBjb2RlIG9ubHkgdW5kZXJzdGFuZHMKKyAgICAgKiBkYXktb2Ytd2Vlay1pbi1tb250aCBydWxlcywgd2UgbXVzdCBtb2RpZnkgb3RoZXIgbW9kZXMgb2YgcnVsZXMgdG8gdGhlaXIKKyAgICAgKiBhcHByb3hpbWF0ZSBlcXVpdmFsZW50IGluIDEuMSBGQ1MgdGVybXMuICBUaGlzIG1ldGhvZCBpcyB1c2VkIHdoZW4gc3RyZWFtaW5nCisgICAgICogb3V0IG9iamVjdHMgb2YgdGhpcyBjbGFzcy4gIEFmdGVyIGl0IGlzIGNhbGxlZCwgdGhlIHJ1bGVzIHdpbGwgYmUgbW9kaWZpZWQsCisgICAgICogd2l0aCBhIHBvc3NpYmxlIGxvc3Mgb2YgaW5mb3JtYXRpb24uICBzdGFydE1vZGUgYW5kIGVuZE1vZGUgd2lsbCBOT1QgYmUKKyAgICAgKiBhbHRlcmVkLCBldmVuIHRob3VnaCBzZW1hbnRpY2FsbHkgdGhleSBzaG91bGQgYmUgc2V0IHRvIERPV19JTl9NT05USF9NT0RFLAorICAgICAqIHNpbmNlIHRoZSBydWxlIG1vZGlmaWNhdGlvbiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHRlbXBvcmFyeS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgbWFrZVJ1bGVzQ29tcGF0aWJsZSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXJ0TW9kZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIERPTV9NT0RFOgorICAgICAgICAgICAgc3RhcnREYXkgPSAxICsgKHN0YXJ0RGF5IC8gNyk7CisgICAgICAgICAgICBzdGFydERheU9mV2VlayA9IENhbGVuZGFyLlNVTkRBWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERPV19HRV9ET01fTU9ERToKKyAgICAgICAgICAgIC8vIEEgZGF5LW9mLW1vbnRoIG9mIDEgaXMgZXF1aXZhbGVudCB0byBET1dfSU5fTU9OVEhfTU9ERQorICAgICAgICAgICAgLy8gdGhhdCBpcywgU3VuPj0xID09IGZpcnN0U3VuLgorICAgICAgICAgICAgaWYgKHN0YXJ0RGF5ICE9IDEpCisgICAgICAgICAgICAgICAgc3RhcnREYXkgPSAxICsgKHN0YXJ0RGF5IC8gNyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBET1dfTEVfRE9NX01PREU6CisgICAgICAgICAgICBpZiAoc3RhcnREYXkgPj0gMzApCisgICAgICAgICAgICAgICAgc3RhcnREYXkgPSAtMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGFydERheSA9IDEgKyAoc3RhcnREYXkgLyA3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChlbmRNb2RlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRE9NX01PREU6CisgICAgICAgICAgICBlbmREYXkgPSAxICsgKGVuZERheSAvIDcpOworICAgICAgICAgICAgZW5kRGF5T2ZXZWVrID0gQ2FsZW5kYXIuU1VOREFZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRE9XX0dFX0RPTV9NT0RFOgorICAgICAgICAgICAgLy8gQSBkYXktb2YtbW9udGggb2YgMSBpcyBlcXVpdmFsZW50IHRvIERPV19JTl9NT05USF9NT0RFCisgICAgICAgICAgICAvLyB0aGF0IGlzLCBTdW4+PTEgPT0gZmlyc3RTdW4uCisgICAgICAgICAgICBpZiAoZW5kRGF5ICE9IDEpCisgICAgICAgICAgICAgICAgZW5kRGF5ID0gMSArIChlbmREYXkgLyA3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERPV19MRV9ET01fTU9ERToKKyAgICAgICAgICAgIGlmIChlbmREYXkgPj0gMzApCisgICAgICAgICAgICAgICAgZW5kRGF5ID0gLTE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW5kRGF5ID0gMSArIChlbmREYXkgLyA3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogQWRqdXN0IHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIHRvIHdhbGwgdGltZS4gIFRoaXMgd29ya3MgcGVyZmVjdGx5CisgICAgICAgICAqIHdlbGwgdW5sZXNzIGl0IHB1c2hlcyBpbnRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIGRheS4gIElmIHRoYXQKKyAgICAgICAgICogaGFwcGVucywgd2UgYXR0ZW1wdCB0byBhZGp1c3QgdGhlIGRheSBydWxlIHNvbWV3aGF0IGNydWRlbHkuICBUaGUgZGF5CisgICAgICAgICAqIHJ1bGVzIGhhdmUgYmVlbiBmb3JjZWQgaW50byBET1dfSU5fTU9OVEggbW9kZSBhbHJlYWR5LCBzbyB3ZSBjaGFuZ2UKKyAgICAgICAgICogdGhlIGRheSBvZiB3ZWVrIHRvIG1vdmUgZm9yd2FyZCBvciBiYWNrIGJ5IGEgZGF5LiAgSXQncyBwb3NzaWJsZSB0bworICAgICAgICAgKiBtYWtlIGEgbW9yZSByZWZpbmVkIGFkanVzdG1lbnQgb2YgdGhlIG9yaWdpbmFsIHJ1bGVzIGZpcnN0LCBidXQgaW4KKyAgICAgICAgICogbW9zdCBjYXNlcyB0aGlzIGV4dHJhIGVmZm9ydCB3aWxsIGdvIHRvIHdhc3RlIG9uY2Ugd2UgYWRqdXN0IHRoZSBkYXkKKyAgICAgICAgICogcnVsZXMgYW55d2F5LiAqLworICAgICAgICBzd2l0Y2ggKHN0YXJ0VGltZU1vZGUpIHsKKyAgICAgICAgY2FzZSBVVENfVElNRToKKyAgICAgICAgICAgIHN0YXJ0VGltZSArPSByYXdPZmZzZXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoc3RhcnRUaW1lIDwgMCkgeworICAgICAgICAgICAgc3RhcnRUaW1lICs9IG1pbGxpc1BlckRheTsKKyAgICAgICAgICAgIHN0YXJ0RGF5T2ZXZWVrID0gMSArICgoc3RhcnREYXlPZldlZWsrNSkgJSA3KTsgLy8gQmFjayAxIGRheQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChzdGFydFRpbWUgPj0gbWlsbGlzUGVyRGF5KSB7CisgICAgICAgICAgICBzdGFydFRpbWUgLT0gbWlsbGlzUGVyRGF5OworICAgICAgICAgICAgc3RhcnREYXlPZldlZWsgPSAxICsgKHN0YXJ0RGF5T2ZXZWVrICUgNyk7IC8vIEZvcndhcmQgMSBkYXkKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZW5kVGltZU1vZGUpIHsKKyAgICAgICAgY2FzZSBVVENfVElNRToKKyAgICAgICAgICAgIGVuZFRpbWUgKz0gcmF3T2Zmc2V0ICsgZHN0U2F2aW5nczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQU5EQVJEX1RJTUU6CisgICAgICAgICAgICBlbmRUaW1lICs9IGRzdFNhdmluZ3M7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGVuZFRpbWUgPCAwKSB7CisgICAgICAgICAgICBlbmRUaW1lICs9IG1pbGxpc1BlckRheTsKKyAgICAgICAgICAgIGVuZERheU9mV2VlayA9IDEgKyAoKGVuZERheU9mV2Vlays1KSAlIDcpOyAvLyBCYWNrIDEgZGF5CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGVuZFRpbWUgPj0gbWlsbGlzUGVyRGF5KSB7CisgICAgICAgICAgICBlbmRUaW1lIC09IG1pbGxpc1BlckRheTsKKyAgICAgICAgICAgIGVuZERheU9mV2VlayA9IDEgKyAoZW5kRGF5T2ZXZWVrICUgNyk7IC8vIEZvcndhcmQgMSBkYXkKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFBhY2sgdGhlIHN0YXJ0IGFuZCBlbmQgcnVsZXMgaW50byBhbiBhcnJheSBvZiBieXRlcy4gIE9ubHkgcGFjaworICAgICAqIGRhdGEgd2hpY2ggaXMgbm90IHByZXNlcnZlZCBieSBtYWtlUnVsZXNDb21wYXRpYmxlLgorICAgICAqLworICAgIHByaXZhdGUgYnl0ZVtdIHBhY2tSdWxlcygpCisgICAgeworICAgICAgICBieXRlW10gcnVsZXMgPSBuZXcgYnl0ZVs2XTsKKyAgICAgICAgcnVsZXNbMF0gPSAoYnl0ZSlzdGFydERheTsKKyAgICAgICAgcnVsZXNbMV0gPSAoYnl0ZSlzdGFydERheU9mV2VlazsKKyAgICAgICAgcnVsZXNbMl0gPSAoYnl0ZSllbmREYXk7CisgICAgICAgIHJ1bGVzWzNdID0gKGJ5dGUpZW5kRGF5T2ZXZWVrOworCisgICAgICAgIC8vIEFzIG9mIHNlcmlhbCB2ZXJzaW9uIDIsIGluY2x1ZGUgdGltZSBtb2RlcworICAgICAgICBydWxlc1s0XSA9IChieXRlKXN0YXJ0VGltZU1vZGU7CisgICAgICAgIHJ1bGVzWzVdID0gKGJ5dGUpZW5kVGltZU1vZGU7CisKKyAgICAgICAgcmV0dXJuIHJ1bGVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdpdmVuIGFuIGFycmF5IG9mIGJ5dGVzIHByb2R1Y2VkIGJ5IHBhY2tSdWxlcywgaW50ZXJwcmV0IHRoZW0KKyAgICAgKiBhcyB0aGUgc3RhcnQgYW5kIGVuZCBydWxlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdW5wYWNrUnVsZXMoYnl0ZVtdIHJ1bGVzKQorICAgIHsKKyAgICAgICAgc3RhcnREYXkgICAgICAgPSBydWxlc1swXTsKKyAgICAgICAgc3RhcnREYXlPZldlZWsgPSBydWxlc1sxXTsKKyAgICAgICAgZW5kRGF5ICAgICAgICAgPSBydWxlc1syXTsKKyAgICAgICAgZW5kRGF5T2ZXZWVrICAgPSBydWxlc1szXTsKKworICAgICAgICAvLyBBcyBvZiBzZXJpYWwgdmVyc2lvbiAyLCBpbmNsdWRlIHRpbWUgbW9kZXMKKyAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA+PSA2KSB7CisgICAgICAgICAgICBzdGFydFRpbWVNb2RlID0gcnVsZXNbNF07CisgICAgICAgICAgICBlbmRUaW1lTW9kZSAgID0gcnVsZXNbNV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYWNrIHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIGludG8gYW4gYXJyYXkgb2YgYnl0ZXMuICBUaGlzIGlzIHJlcXVpcmVkCisgICAgICogYXMgb2Ygc2VyaWFsIHZlcnNpb24gMi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludFtdIHBhY2tUaW1lcygpIHsKKyAgICAgICAgaW50W10gdGltZXMgPSBuZXcgaW50WzJdOworICAgICAgICB0aW1lc1swXSA9IHN0YXJ0VGltZTsKKyAgICAgICAgdGltZXNbMV0gPSBlbmRUaW1lOworICAgICAgICByZXR1cm4gdGltZXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogVW5wYWNrIHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIGZyb20gYW4gYXJyYXkgb2YgYnl0ZXMuICBUaGlzIGlzIHJlcXVpcmVkCisgICAgICogYXMgb2Ygc2VyaWFsIHZlcnNpb24gMi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdW5wYWNrVGltZXMoaW50W10gdGltZXMpIHsKKyAgICAgICAgc3RhcnRUaW1lID0gdGltZXNbMF07CisgICAgICAgIGVuZFRpbWUgPSB0aW1lc1sxXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTYXZlIHRoZSBzdGF0ZSBvZiB0aGlzIG9iamVjdCB0byBhIHN0cmVhbSAoaS5lLiwgc2VyaWFsaXplIGl0KS4KKyAgICAgKgorICAgICAqIEBzZXJpYWxEYXRhIFdlIHdyaXRlIG91dCB0d28gZm9ybWF0cywgYSBKREsgMS4xIGNvbXBhdGlibGUgZm9ybWF0LCB1c2luZworICAgICAqIDxjb2RlPkRPV19JTl9NT05USF9NT0RFPC9jb2RlPiBydWxlcywgaW4gdGhlIHJlcXVpcmVkIHNlY3Rpb24sIGZvbGxvd2VkCisgICAgICogYnkgdGhlIGZ1bGwgcnVsZXMsIGluIHBhY2tlZCBmb3JtYXQsIGluIHRoZSBvcHRpb25hbCBzZWN0aW9uLiAgVGhlCisgICAgICogb3B0aW9uYWwgc2VjdGlvbiB3aWxsIGJlIGlnbm9yZWQgYnkgSkRLIDEuMSBjb2RlIHVwb24gc3RyZWFtIGluLgorICAgICAqIDxwPiBDb250ZW50cyBvZiB0aGUgb3B0aW9uYWwgc2VjdGlvbjogVGhlIGxlbmd0aCBvZiBhIGJ5dGUgYXJyYXkgaXMKKyAgICAgKiBlbWl0dGVkIChpbnQpOyB0aGlzIGlzIDQgYXMgb2YgdGhpcyByZWxlYXNlLiBUaGUgYnl0ZSBhcnJheSBvZiB0aGUgZ2l2ZW4KKyAgICAgKiBsZW5ndGggaXMgZW1pdHRlZC4gVGhlIGNvbnRlbnRzIG9mIHRoZSBieXRlIGFycmF5IGFyZSB0aGUgdHJ1ZSB2YWx1ZXMgb2YKKyAgICAgKiB0aGUgZmllbGRzIDxjb2RlPnN0YXJ0RGF5PC9jb2RlPiwgPGNvZGU+c3RhcnREYXlPZldlZWs8L2NvZGU+LAorICAgICAqIDxjb2RlPmVuZERheTwvY29kZT4sIGFuZCA8Y29kZT5lbmREYXlPZldlZWs8L2NvZGU+LiAgVGhlIHZhbHVlcyBvZiB0aGVzZQorICAgICAqIGZpZWxkcyBpbiB0aGUgcmVxdWlyZWQgc2VjdGlvbiBhcmUgYXBwcm94aW1hdGUgdmFsdWVzIHN1aXRlZCB0byB0aGUgcnVsZQorICAgICAqIG1vZGUgPGNvZGU+RE9XX0lOX01PTlRIX01PREU8L2NvZGU+LCB3aGljaCBpcyB0aGUgb25seSBtb2RlIHJlY29nbml6ZWQgYnkKKyAgICAgKiBKREsgMS4xLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChPYmplY3RPdXRwdXRTdHJlYW0gc3RyZWFtKQorICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICAvLyBDb25zdHJ1Y3QgYSBiaW5hcnkgcnVsZQorICAgICAgICBieXRlW10gcnVsZXMgPSBwYWNrUnVsZXMoKTsKKyAgICAgICAgaW50W10gdGltZXMgPSBwYWNrVGltZXMoKTsKKworICAgICAgICAvLyBDb252ZXJ0IHRvIDEuMSBGQ1MgcnVsZXMuICBUaGlzIHN0ZXAgbWF5IGNhdXNlIHVzIHRvIGxvc2UgaW5mb3JtYXRpb24uCisgICAgICAgIG1ha2VSdWxlc0NvbXBhdGlibGUoKTsKKworICAgICAgICAvLyBXcml0ZSBvdXQgdGhlIDEuMSBGQ1MgcnVsZXMKKyAgICAgICAgc3RyZWFtLmRlZmF1bHRXcml0ZU9iamVjdCgpOworCisgICAgICAgIC8vIFdyaXRlIG91dCB0aGUgYmluYXJ5IHJ1bGVzIGluIHRoZSBvcHRpb25hbCBkYXRhIGFyZWEgb2YgdGhlIHN0cmVhbS4KKyAgICAgICAgc3RyZWFtLndyaXRlSW50KHJ1bGVzLmxlbmd0aCk7CisgICAgICAgIHN0cmVhbS53cml0ZShydWxlcyk7CisgICAgICAgIHN0cmVhbS53cml0ZU9iamVjdCh0aW1lcyk7CisKKyAgICAgICAgLy8gUmVjb3ZlciB0aGUgb3JpZ2luYWwgcnVsZXMuICBUaGlzIHJlY292ZXJzIHRoZSBpbmZvcm1hdGlvbiBsb3N0CisgICAgICAgIC8vIGJ5IG1ha2VSdWxlc0NvbXBhdGlibGUuCisgICAgICAgIHVucGFja1J1bGVzKHJ1bGVzKTsKKyAgICAgICAgdW5wYWNrVGltZXModGltZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlY29uc3RpdHV0ZSB0aGlzIG9iamVjdCBmcm9tIGEgc3RyZWFtIChpLmUuLCBkZXNlcmlhbGl6ZSBpdCkuCisgICAgICoKKyAgICAgKiBXZSBoYW5kbGUgYm90aCBKREsgMS4xCisgICAgICogYmluYXJ5IGZvcm1hdHMgYW5kIGZ1bGwgZm9ybWF0cyB3aXRoIGEgcGFja2VkIGJ5dGUgYXJyYXkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoT2JqZWN0SW5wdXRTdHJlYW0gc3RyZWFtKQorICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uCisgICAgeworICAgICAgICBzdHJlYW0uZGVmYXVsdFJlYWRPYmplY3QoKTsKKworICAgICAgICBpZiAoc2VyaWFsVmVyc2lvbk9uU3RyZWFtIDwgMSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRml4IGEgYnVnIGluIHRoZSAxLjEgU2ltcGxlVGltZVpvbmUgY29kZSAtLSBuYW1lbHksCisgICAgICAgICAgICAvLyBzdGFydERheU9mV2VlayBhbmQgZW5kRGF5T2ZXZWVrIHdlcmUgdXN1YWxseSB1bmluaXRpYWxpemVkLiAgV2UgY2FuJ3QgZG8KKyAgICAgICAgICAgIC8vIHRvbyBtdWNoLCBzbyB3ZSBhc3N1bWUgU1VOREFZLCB3aGljaCBhY3R1YWxseSB3b3JrcyBtb3N0IG9mIHRoZSB0aW1lLgorICAgICAgICAgICAgaWYgKHN0YXJ0RGF5T2ZXZWVrID09IDApIHN0YXJ0RGF5T2ZXZWVrID0gQ2FsZW5kYXIuU1VOREFZOworICAgICAgICAgICAgaWYgKGVuZERheU9mV2VlayA9PSAwKSBlbmREYXlPZldlZWsgPSBDYWxlbmRhci5TVU5EQVk7CisKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYWJsZXMgZHN0U2F2aW5ncywgc3RhcnRNb2RlLCBhbmQgZW5kTW9kZSBhcmUgcG9zdC0xLjEsIHNvIHRoZXkKKyAgICAgICAgICAgIC8vIHdvbid0IGJlIHByZXNlbnQgaWYgd2UncmUgcmVhZGluZyBmcm9tIGEgMS4xIHN0cmVhbS4gIEZpeCB0aGVtIHVwLgorICAgICAgICAgICAgc3RhcnRNb2RlID0gZW5kTW9kZSA9IERPV19JTl9NT05USF9NT0RFOworICAgICAgICAgICAgZHN0U2F2aW5ncyA9IG1pbGxpc1BlckhvdXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGb3IgMS4xLjQsIGluIGFkZGl0aW9uIHRvIHRoZSAzIG5ldyBpbnN0YW5jZSB2YXJpYWJsZXMsIHdlIGFsc28KKyAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhY3R1YWwgcnVsZXMgKHdoaWNoIGhhdmUgbm90IGJlIG1hZGUgY29tcGF0aWJsZSB3aXRoIDEuMSkKKyAgICAgICAgICAgIC8vIGluIHRoZSBvcHRpb25hbCBhcmVhLiAgUmVhZCB0aGVtIGluIGhlcmUgYW5kIHBhcnNlIHRoZW0uCisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gc3RyZWFtLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGJ5dGVbXSBydWxlcyA9IG5ldyBieXRlW2xlbmd0aF07CisgICAgICAgICAgICBzdHJlYW0ucmVhZEZ1bGx5KHJ1bGVzKTsKKyAgICAgICAgICAgIHVucGFja1J1bGVzKHJ1bGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXJpYWxWZXJzaW9uT25TdHJlYW0gPj0gMikgeworICAgICAgICAgICAgaW50W10gdGltZXMgPSAoaW50W10pIHN0cmVhbS5yZWFkT2JqZWN0KCk7CisgICAgICAgICAgICB1bnBhY2tUaW1lcyh0aW1lcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXJpYWxWZXJzaW9uT25TdHJlYW0gPSBjdXJyZW50U2VyaWFsVmVyc2lvbjsKKyAgICB9Cit9CisKKy8vZW9mCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9pY3UvdXRpbC9TaW1wbGVUaW1lWm9uZUFkYXB0ZXIuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL1NpbXBsZVRpbWVab25lQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiN2NhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9TaW1wbGVUaW1lWm9uZUFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDE3NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDAwIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3V0aWwvQXR0aWMvU2ltcGxlVGltZVpvbmVBZGFwdGVyLmphdmEsdiAkIAorICogJERhdGU6IDIwMDIvMTIvMDUgMDE6MjU6NDkgJCAKKyAqICRSZXZpc2lvbjogMS40ICQKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS51dGlsOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCisvKioKKyAqIDxjb2RlPlNpbXBsZVRpbWVab25lQWRhcHRlcjwvY29kZT4gd3JhcHMgYQorICogY29tLmlibS5pY3UudXRpbC5TaW1wbGVUaW1lWm9uZSBhbmQgaW5oZXJpdHMgZnJvbSBqYXZhLnV0aWwuVGltZVpvbmUuCisgKiBXaXRob3V0IHRoaXMgY2xhc3MsIHdlIHdvdWxkIG5lZWQgdG8gJ3BvcnQnIGphdmEudXRpbC5EYXRlIHRvCisgKiBjb20uaWJtLmljdS51dGlsIGFzIHdlbGwsIHNvIHRoYXQgRGF0ZSBjb3VsZCBpbnRlcm9wZXJhdGUgcHJvcGVybHkgd2l0aAorICogdGhlIGNvbS5pYm0uaWN1LnV0aWwgVGltZVpvbmUgYW5kIENhbGVuZGFyIGNsYXNzZXMuICBXaXRoIHRoaXMgY2xhc3MsCisgKiB3ZSBjYW4gKG1vc3RseSkgdXNlIGphdmEudXRpbC5EYXRlIHRvZ2V0aGVyIHdpdGggY29tLmlibS5pY3UudXRpbAorICogY2xhc3Nlcy4KKyAqCisgKiA8cD5UaGlzIHNvbHV0aW9uIGlzIGltcGVyZmVjdCBiZWNhdXNlIG9mIHRoZSBmYXVsdHkgZGVzaWduIG9mCisgKiBqYXZhLnV0aWwuVGltZVpvbmUuICBTcGVjaWZpY2FsbHksIFRaIGNvbnRhaW5zIGEgcGFja2FnZSBwcml2YXRlCisgKiBtZXRob2QsIGdldE9mZnNldCgpLCB0aGF0IHNob3VsZCByZWFsbHkgYmUgcHVibGljLiAgQmVjYXVzZSBpdCBpcworICogcGFja2FnZSBwcml2YXRlLCBpdCBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBmcm9tIHdoZXJlIHdlIGFyZSwgYW5kIHdlCisgKiBjYW5ub3QgcHJvcGVybHkgZGVsZWdhdGUgaXRzIG9wZXJhdGlvbiB0byBvdXIgY29udGFpbmVkCisgKiBjb20uaWJtLmljdS51dGlsLlNUWiBvYmplY3QuCisgKgorICogPHA+Rm9yIHRoZSBtb21lbnQgd2UgbGl2ZSB3aXRoIHRoaXMgcHJvYmxlbS4gIEl0IGFwcGVhciBub3QgdG8KKyAqIGNhdXNlIHRvbyBtdWNoIHRyb3VibGUgc2luY2UgbW9zdCByZWFsIGNvbXB1dGF0aW9ucyBoYXBwZW4gdXNpbmcKKyAqIHRoZSBjb20uaWJtLmljdS51dGlsIGNsYXNzZXMuICBIb3dldmVyLCBpZiB0aGlzIGJlY29tZXMgYSBwcm9ibGVtIGluCisgKiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGhhdmUgdG8gc3RvcCB1c2luZyB0aGlzIGFkYXB0ZXIsIGFuZCAncG9ydCcKKyAqIGphdmEudXRpbC5EYXRlIGludG8gY29tLmlibS5pY3UudXRpbC4KKyAqCisgKiBAc2VlIGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmUjc2V0RGVmYXVsdAorICogQGF1dGhvciBBbGFuIExpdQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3B1YmxpYyBjbGFzcyBTaW1wbGVUaW1lWm9uZUFkYXB0ZXIgZXh0ZW5kcyBqYXZhLnV0aWwuVGltZVpvbmUgeworCisgICAgLyoqCisgICAgICogVGhlIGNvbnRhaW5lZCBjb20uaWJtLmljdS51dGlsLlNpbXBsZVRpbWVab25lIG9iamVjdC4KKyAgICAgKiBXZSBkZWxlZ2F0ZSBhbGwgbWV0aG9kcyB0byB0aGlzIG9iamVjdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFNpbXBsZVRpbWVab25lIHpvbmU7CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiBhZGFwdGVyIGZvciBhIFNpbXBsZVRpbWVab25lIG9iamVjdC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU2ltcGxlVGltZVpvbmVBZGFwdGVyKFNpbXBsZVRpbWVab25lIHpvbmUpIHsKKyAgICAgICAgdGhpcy56b25lID0gem9uZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSBUaW1lWm9uZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKSB7CisgICAgICAgIHJldHVybiB6b25lLmdldElEKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgVGltZVpvbmUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRJRChTdHJpbmcgSUQpIHsKKyAgICAgICAgem9uZS5zZXRJRChJRCk7CisgICAgfSAgICAKKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIFRpbWVab25lCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaGFzU2FtZVJ1bGVzKGphdmEudXRpbC5UaW1lWm9uZSBvdGhlcikgeworICAgICAgICByZXR1cm4gb3RoZXIgaW5zdGFuY2VvZiBTaW1wbGVUaW1lWm9uZUFkYXB0ZXIgJiYKKyAgICAgICAgICAgIHpvbmUuaGFzU2FtZVJ1bGVzKCgoU2ltcGxlVGltZVpvbmVBZGFwdGVyKW90aGVyKS56b25lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSBUaW1lWm9uZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0T2Zmc2V0KGludCBlcmEsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCBkYXlPZldlZWssCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbGxpcykgeworICAgICAgICByZXR1cm4gem9uZS5nZXRPZmZzZXQoZXJhLCB5ZWFyLCBtb250aCwgZGF5LCBkYXlPZldlZWssIG1pbGxpcyk7CisgICAgfQorCisgICAgLy8gVGhpcyBkb2Vzbid0IHdvcmshIEJlY2F1c2UgdGhpcyBpcyBhIHBhY2thZ2UtcHJpdmF0ZSBtZXRob2QsCisgICAgLy8gaXQgY2Fubm90IG92ZXJyaWRlIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBpbiBqYXZhLnV0aWwuVFouCisgICAgLy8gVGhpcyByZWZsZWN0cyBhIGZ1bmRhbWVudGFsIGJ1ZyBpbiB0aGUgYXJjaGl0ZWN0dXJlIG9mCisgICAgLy8gamF2YS51dGlsLlRaLiAgSWYgbm90IGZvciB0aGlzLCB0aGlzIGFkYXB0ZXIgY2xhc3Mgd291bGQKKyAgICAvLyB3b3JrIGZsYXdsZXNzbHkuIC0gbGl1CisvLyEgICAgLyoqCisvLyEgICAgICogT3ZlcnJpZGUgVGltZVpvbmUKKy8vISAgICAgKi8KKy8vISAgICBpbnQgZ2V0T2Zmc2V0KGludCBlcmEsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCBkYXlPZldlZWssCisvLyEgICAgICAgICAgICAgICAgICBpbnQgbWlsbGlzLCBpbnQgbW9udGhMZW5ndGgsIGludCBwcmV2TW9udGhMZW5ndGgpIHsKKy8vISAgICAgICAgcmV0dXJuIHpvbmUuZ2V0T2Zmc2V0KGVyYSwgeWVhciwgbW9udGgsIGRheSwgZGF5T2ZXZWVrLAorLy8hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzLCBtb250aExlbmd0aCwgcHJldk1vbnRoTGVuZ3RoKTsKKy8vISAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgVGltZVpvbmUKKyAgICAgKiBHZXRzIHRoZSBHTVQgb2Zmc2V0IGZvciB0aGlzIHRpbWUgem9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFJhd09mZnNldCgpIHsKKyAgICAgICAgcmV0dXJuIHpvbmUuZ2V0UmF3T2Zmc2V0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGVzIFRpbWVab25lCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UmF3T2Zmc2V0KGludCBvZmZzZXRNaWxsaXMpIHsKKyAgICAgICAgem9uZS5zZXRSYXdPZmZzZXQob2Zmc2V0TWlsbGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgVGltZVpvbmUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiB1c2VEYXlsaWdodFRpbWUoKSB7CisgICAgICAgIHJldHVybiB6b25lLnVzZURheWxpZ2h0VGltZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBUaW1lWm9uZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGluRGF5bGlnaHRUaW1lKERhdGUgZGF0ZSkgeworICAgICAgICByZXR1cm4gem9uZS5pbkRheWxpZ2h0VGltZShkYXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgQ2xvbmVhYmxlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTaW1wbGVUaW1lWm9uZUFkYXB0ZXIoKFNpbXBsZVRpbWVab25lKXpvbmUuY2xvbmUoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgaGFzaENvZGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgaGFzaENvZGUoKSB7CisgICAgICAgIHJldHVybiB6b25lLmhhc2hDb2RlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgdGhlIGVxdWFsaXR5IG9mIHR3byBTaW1wbGVUaW1lWm9uZSBvYmplY3RzLgorICAgICAqCisgICAgICogQHBhcmFtIG9iaiAgVGhlIFNpbXBsZVRpbWVab25lIG9iamVjdCB0byBiZSBjb21wYXJlZCB3aXRoLgorICAgICAqIEByZXR1cm4gICAgIFRydWUgaWYgdGhlIGdpdmVuIG9iaiBpcyB0aGUgc2FtZSBhcyB0aGlzIFNpbXBsZVRpbWVab25lCisgICAgICogICAgICAgICAgICAgb2JqZWN0OyBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNpbXBsZVRpbWVab25lQWRhcHRlcikgeworICAgICAgICAgICAgb2JqID0gKChTaW1wbGVUaW1lWm9uZUFkYXB0ZXIpb2JqKS56b25lOworICAgICAgICB9CisgICAgICAgIHJldHVybiB6b25lLmVxdWFscyhvYmopOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRpbWUgem9uZS4KKyAgICAgKiBAcmV0dXJuICBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRpbWUgem9uZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAvLyBTaG91bGQgcHJvYmFibHkgc2hvdyBvdXIgY2xhc3MgbmFtZSBoZXJlLi4uZml4IGxhdGVyLgorICAgICAgICByZXR1cm4gem9uZS50b1N0cmluZygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL1N0cmluZ1Rva2VuaXplci5qYXZhIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliZmJhYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL2ljdS91dGlsL1N0cmluZ1Rva2VuaXplci5qYXZhCkBAIC0wLDAgKzEsNTYyIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vaWN1L3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEsdiAkIAorKiAkRGF0ZTogMjAwMi8xMi8wMyAyMjowNDoxNyAkIAorKiAkUmV2aXNpb246IDEuMiAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5Vbmljb2RlU2V0OworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVVRGMTY7CisKKy8qKgorICogPHA+VGhlIHN0cmluZyB0b2tlbml6ZXIgY2xhc3MgYWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIGJyZWFrIGEgc3RyaW5nIAorICogaW50byB0b2tlbnMgYnkgcGVyZm9ybWluZyBjb2RlIHBvaW50IGNvbXBhcmlzb24uIAorICogVGhlIDxjb2RlPlN0cmluZ1Rva2VuaXplcjwvY29kZT4gbWV0aG9kcyBkbyBub3QgZGlzdGluZ3Vpc2ggCisgKiBhbW9uZyBpZGVudGlmaWVycywgbnVtYmVycywgYW5kIHF1b3RlZCBzdHJpbmdzLCBub3IgZG8gdGhleSByZWNvZ25pemUgCisgKiBhbmQgc2tpcCBjb21tZW50cy48L3A+CisgKiA8cD4KKyAqIFRoZSBzZXQgb2YgZGVsaW1pdGVycyAodGhlIGNvZGVwb2ludHMgdGhhdCBzZXBhcmF0ZSB0b2tlbnMpIG1heSBiZSAKKyAqIHNwZWNpZmllZCBlaXRoZXIgYXQgY3JlYXRpb24gdGltZSBvciBvbiBhIHBlci10b2tlbiBiYXNpcy4gCisgKiA8L3A+CisgKiA8cD4KKyAqIEFuIGluc3RhbmNlIG9mIDxjb2RlPlN0cmluZ1Rva2VuaXplcjwvY29kZT4gYmVoYXZlcyBpbiBvbmUgb2YgdHdvIHdheXMsIAorICogZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgd2FzIGNyZWF0ZWQgd2l0aCB0aGUgPGNvZGU+cmV0dXJuRGVsaW1zPC9jb2RlPiAKKyAqIGZsYWcgaGF2aW5nIHRoZSB2YWx1ZSA8Y29kZT50cnVlPC9jb2RlPiBvciA8Y29kZT5mYWxzZTwvY29kZT46IAorICogPHVsPgorICogPGxpPklmIHRoZSBmbGFnIGlzIDxjb2RlPmZhbHNlPC9jb2RlPiwgZGVsaW1pdGVyIGNvZGUgcG9pbnRzIHNlcnZlIHRvIAorICogc2VwYXJhdGUgdG9rZW5zLiBBIHRva2VuIGlzIGEgbWF4aW1hbCBzZXF1ZW5jZSBvZiBjb25zZWN1dGl2ZSAKKyAqIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBkZWxpbWl0ZXJzLiAKKyAqIDxsaT5JZiB0aGUgZmxhZyBpcyA8Y29kZT50cnVlPC9jb2RlPiwgZGVsaW1pdGVyIGNvZGUgcG9pbnRzIGFyZSAKKyAqIHRoZW1zZWx2ZXMgY29uc2lkZXJlZCB0byBiZSB0b2tlbnMuIEEgdG9rZW4gaXMgdGh1cyBlaXRoZXIgb25lIAorICogZGVsaW1pdGVyIGNvZGUgcG9pbnQsIG9yIGEgbWF4aW1hbCBzZXF1ZW5jZSBvZiBjb25zZWN1dGl2ZSBjb2RlIAorICogcG9pbnQgdGhhdCBhcmUgbm90IGRlbGltaXRlcnMuCisgKiA8L3VsPgorICogPC9wPgorICogPHA+CisgKiBBIDx0dD5TdHJpbmdUb2tlbml6ZXI8L3R0PiBvYmplY3QgaW50ZXJuYWxseSBtYWludGFpbnMgYSBjdXJyZW50IAorICogcG9zaXRpb24gd2l0aGluIHRoZSBzdHJpbmcgdG8gYmUgdG9rZW5pemVkLiBTb21lIG9wZXJhdGlvbnMgYWR2YW5jZSB0aGlzIAorICogY3VycmVudCBwb3NpdGlvbiBwYXN0IHRoZSBjb2RlIHBvaW50IHByb2Nlc3NlZC4KKyAqIDwvcD4KKyAqIDxwPgorICogQSB0b2tlbiBpcyByZXR1cm5lZCBieSB0YWtpbmcgYSBzdWJzdHJpbmcgb2YgdGhlIHN0cmluZyB0aGF0IHdhcyB1c2VkIHRvIAorICogY3JlYXRlIHRoZSA8dHQ+U3RyaW5nVG9rZW5pemVyPC90dD4gb2JqZWN0LgorICogPC9wPgorICogPHA+CisgKiBFeGFtcGxlIG9mIHRoZSB1c2Ugb2YgdGhlIGRlZmF1bHQgZGVsaW1pdGVyIHRva2VuaXplci4KKyAqIDxibG9ja3F1b3RlPjxwcmU+CisgKiBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKCJ0aGlzIGlzIGEgdGVzdCIpOworICogd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworICogICAgIHByaW50bG4oc3QubmV4dFRva2VuKCkpOworICogICAgIH0KKyAqIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAqIDwvcD4KKyAqIDxwPgorICogcHJpbnRzIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorICogPGJsb2NrcXVvdGU+PHByZT4KKyAqICAgICB0aGlzCisgKiAgICAgaXMKKyAqICAgICBhCisgKiAgICAgdGVzdAorICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICogPC9wPgorICogPHA+CisgKiBFeGFtcGxlIG9mIHRoZSB1c2Ugb2YgdGhlIHRva2VuaXplciB3aXRoIHVzZXIgc3BlY2lmaWVkIGRlbGltaXRlci4KKyAqIDxibG9ja3F1b3RlPjxwcmU+CisgKiAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcigKKyAqICAgICAidGhpcyBpcyBhIHRlc3Qgd2l0aCBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgJiM5Mjt1ZDgwMCYjOTI7dWQ4MDAmIzkyO3VkYzAwJiM5Mjt1ZGMwMCIsCisgKiAgICAgICAgICIgJiM5Mjt1ZDgwMCYjOTI7dWRjMDAiKTsKKyAqICAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisgKiAgICAgICAgIHByaW50bG4oc3QubmV4dFRva2VuKCkpOworICogICAgIH0KKyAqIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAqIDwvcD4KKyAqIDxwPgorICogcHJpbnRzIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorICogPGJsb2NrcXVvdGU+PHByZT4KKyAqICAgICB0aGlzCisgKiAgICAgaXMKKyAqICAgICBhCisgKiAgICAgdGVzdAorICogICAgIHdpdGgKKyAqICAgICBzdXBwbGVtZW50YXJ5CisgKiAgICAgY2hhcmFjdGVycworICogICAgICYjOTI7dWQ4MDAKKyAqICAgICAmIzkyO3VkYzAwCisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgKiA8L3A+CisgKiBAYXV0aG9yIHN5biB3ZWUKKyAqIEBkcmFmdCBJQ1UgMi40CisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTdHJpbmdUb2tlbml6ZXIgaW1wbGVtZW50cyBFbnVtZXJhdGlvbiAKK3sKKyAgICAvLyBwdWJsaWMgY29uc3RydWN0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAKKyAgICAvKioKKyAgICAgKiA8cD5Db25zdHJ1Y3RzIGEgc3RyaW5nIHRva2VuaXplciBmb3IgdGhlIHNwZWNpZmllZCBzdHJpbmcuIEFsbCAKKyAgICAgKiBjaGFyYWN0ZXJzIGluIHRoZSBkZWxpbSBhcmd1bWVudCBhcmUgdGhlIGRlbGltaXRlcnMgZm9yIHNlcGFyYXRpbmcgCisgICAgICogdG9rZW5zLjwvcD4gCisgICAgICogPHA+SWYgdGhlIHJldHVybkRlbGltcyBmbGFnIGlzIHRydWUsIHRoZW4gdGhlIGRlbGltaXRlciBjaGFyYWN0ZXJzIAorICAgICAqIGFyZSBhbHNvIHJldHVybmVkIGFzIHRva2Vucy4gRWFjaCBkZWxpbWl0ZXIgaXMgcmV0dXJuZWQgYXMgYSBzdHJpbmcgCisgICAgICogb2YgbGVuZ3RoIG9uZS4gSWYgdGhlIGZsYWcgaXMgZmFsc2UsIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVycyBhcmUgCisgICAgICogc2tpcHBlZCBhbmQgb25seSBzZXJ2ZSBhcyBzZXBhcmF0b3JzIGJldHdlZW4gdG9rZW5zLjwvcD4KKyAgICAgKiBAcGFyYW0gc3RyIGEgc3RyaW5nIHRvIGJlIHBhcnNlZC4KKyAgICAgKiBAcGFyYW0gZGVsaW0gdGhlIGRlbGltaXRlcnMuCisgICAgICogQHBhcmFtIHJldHVybmRlbGltcyBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0byByZXR1cm4gdGhlIGRlbGltaXRlcnMgCisgICAgICogICAgICAgIGFzIHRva2Vucy4KKyAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBhIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHN0ciBpcyBudWxsCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nVG9rZW5pemVyKFN0cmluZyBzdHIsIFVuaWNvZGVTZXQgZGVsaW0sIGJvb2xlYW4gcmV0dXJuZGVsaW1zKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VfID0gc3RyOworICAgICAgICBtX2xlbmd0aF8gPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIGlmIChkZWxpbSA9PSBudWxsKSB7CisgICAgICAgICAgICBtX2RlbGltaXRlcnNfID0gRU1QVFlfREVMSU1JVEVSXzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fZGVsaW1pdGVyc18gPSBkZWxpbTsgICAKKyAgICAgICAgfQorICAgICAgICBtX3JldHVybkRlbGltaXRlcnNfID0gcmV0dXJuZGVsaW1zOworICAgICAgICBtX3Rva2VuT2Zmc2V0XyA9IC0xOworICAgICAgICBtX3Rva2VuU2l6ZV8gPSAtMTsKKyAgICAgICAgaWYgKG1fbGVuZ3RoXyA9PSAwKSB7CisgICAgICAgICAgICAvLyBzdHJpbmcgbGVuZ3RoIDAsIG5vIHRva2VucworICAgICAgICAgICAgbV9uZXh0T2Zmc2V0XyA9IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9uZXh0T2Zmc2V0XyA9IDA7CisgICAgICAgICAgICBpZiAoIXJldHVybmRlbGltcykgeworICAgICAgICAgICAgICAgIG1fbmV4dE9mZnNldF8gPSBnZXROZXh0Tm9uRGVsaW1pdGVyKDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPkNvbnN0cnVjdHMgYSBzdHJpbmcgdG9rZW5pemVyIGZvciB0aGUgc3BlY2lmaWVkIHN0cmluZy4gVGhlIAorICAgICAqIGNoYXJhY3RlcnMgaW4gdGhlIGRlbGltIGFyZ3VtZW50IGFyZSB0aGUgZGVsaW1pdGVycyBmb3Igc2VwYXJhdGluZyAKKyAgICAgKiB0b2tlbnMuPC9wPiAKKyAgICAgKiA8cD5EZWxpbWl0ZXIgY2hhcmFjdGVycyB0aGVtc2VsdmVzIHdpbGwgbm90IGJlIHRyZWF0ZWQgYXMgdG9rZW5zLjwvcD4KKyAgICAgKiBAcGFyYW0gc3RyIGEgc3RyaW5nIHRvIGJlIHBhcnNlZC4KKyAgICAgKiBAcGFyYW0gZGVsaW0gdGhlIGRlbGltaXRlcnMuCisgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgYSBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiBzdHIgaXMgbnVsbAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIFN0cmluZ1Rva2VuaXplcihTdHJpbmcgc3RyLCBVbmljb2RlU2V0IGRlbGltKQorICAgIHsKKyAgICAgICAgdGhpcyhzdHIsIGRlbGltLCBmYWxzZSk7CisgICAgfQorICAgICAgIAorICAgIC8qKgorICAgICAqIDxwPkNvbnN0cnVjdHMgYSBzdHJpbmcgdG9rZW5pemVyIGZvciB0aGUgc3BlY2lmaWVkIHN0cmluZy4gQWxsIAorICAgICAqIGNoYXJhY3RlcnMgaW4gdGhlIGRlbGltIGFyZ3VtZW50IGFyZSB0aGUgZGVsaW1pdGVycyBmb3Igc2VwYXJhdGluZyAKKyAgICAgKiB0b2tlbnMuPC9wPiAKKyAgICAgKiA8cD5JZiB0aGUgcmV0dXJuRGVsaW1zIGZsYWcgaXMgdHJ1ZSwgdGhlbiB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlcnMgCisgICAgICogYXJlIGFsc28gcmV0dXJuZWQgYXMgdG9rZW5zLiBFYWNoIGRlbGltaXRlciBpcyByZXR1cm5lZCBhcyBhIHN0cmluZyAKKyAgICAgKiBvZiBsZW5ndGggb25lLiBJZiB0aGUgZmxhZyBpcyBmYWxzZSwgdGhlIGRlbGltaXRlciBjaGFyYWN0ZXJzIGFyZSAKKyAgICAgKiBza2lwcGVkIGFuZCBvbmx5IHNlcnZlIGFzIHNlcGFyYXRvcnMgYmV0d2VlbiB0b2tlbnMuPC9wPgorICAgICAqIEBwYXJhbSBzdHIgYSBzdHJpbmcgdG8gYmUgcGFyc2VkLgorICAgICAqIEBwYXJhbSBkZWxpbSB0aGUgZGVsaW1pdGVycy4KKyAgICAgKiBAcGFyYW0gcmV0dXJuZGVsaW1zIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJldHVybiB0aGUgZGVsaW1pdGVycyAKKyAgICAgKiAgICAgICAgYXMgdG9rZW5zLgorICAgICAqIEBleGNlcHRpb24gdGhyb3dzIGEgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgc3RyIGlzIG51bGwKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdUb2tlbml6ZXIoU3RyaW5nIHN0ciwgU3RyaW5nIGRlbGltLCBib29sZWFuIHJldHVybmRlbGltcykKKyAgICB7CisgICAgICAgIC8vIGRvbid0IGlnbm9yZSB3aGl0ZXNwYWNlCisgICAgICAgIG1fZGVsaW1pdGVyc18gPSBFTVBUWV9ERUxJTUlURVJfOworICAgICAgICBpZiAoZGVsaW0gIT0gbnVsbCAmJiBkZWxpbS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIG1fZGVsaW1pdGVyc18gPSBuZXcgVW5pY29kZVNldCgpOworICAgICAgICAgICAgbV9kZWxpbWl0ZXJzXy5hZGRBbGwoZGVsaW0pOworICAgICAgICB9CisgICAgICAgIG1fc291cmNlXyA9IHN0cjsKKyAgICAgICAgbV9sZW5ndGhfID0gc3RyLmxlbmd0aCgpOworICAgICAgICBtX3JldHVybkRlbGltaXRlcnNfID0gcmV0dXJuZGVsaW1zOworICAgICAgICBtX3Rva2VuT2Zmc2V0XyA9IC0xOworICAgICAgICBtX3Rva2VuU2l6ZV8gPSAtMTsKKyAgICAgICAgaWYgKG1fbGVuZ3RoXyA9PSAwKSB7CisgICAgICAgICAgICAvLyBzdHJpbmcgbGVuZ3RoIDAsIG5vIHRva2VucworICAgICAgICAgICAgbV9uZXh0T2Zmc2V0XyA9IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9uZXh0T2Zmc2V0XyA9IDA7CisgICAgICAgICAgICBpZiAoIXJldHVybmRlbGltcykgeworICAgICAgICAgICAgICAgIG1fbmV4dE9mZnNldF8gPSBnZXROZXh0Tm9uRGVsaW1pdGVyKDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIDxwPkNvbnN0cnVjdHMgYSBzdHJpbmcgdG9rZW5pemVyIGZvciB0aGUgc3BlY2lmaWVkIHN0cmluZy4gVGhlIAorICAgICAqIGNoYXJhY3RlcnMgaW4gdGhlIGRlbGltIGFyZ3VtZW50IGFyZSB0aGUgZGVsaW1pdGVycyBmb3Igc2VwYXJhdGluZyAKKyAgICAgKiB0b2tlbnMuPC9wPiAKKyAgICAgKiA8cD5EZWxpbWl0ZXIgY2hhcmFjdGVycyB0aGVtc2VsdmVzIHdpbGwgbm90IGJlIHRyZWF0ZWQgYXMgdG9rZW5zLjwvcD4KKyAgICAgKiBAcGFyYW0gc3RyIGEgc3RyaW5nIHRvIGJlIHBhcnNlZC4KKyAgICAgKiBAcGFyYW0gZGVsaW0gdGhlIGRlbGltaXRlcnMuCisgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgYSBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiBzdHIgaXMgbnVsbAorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIFN0cmluZ1Rva2VuaXplcihTdHJpbmcgc3RyLCBTdHJpbmcgZGVsaW0pCisgICAgeworICAgICAgICAvLyBkb24ndCBpZ25vcmUgd2hpdGVzcGFjZQorICAgICAgICB0aGlzKHN0ciwgZGVsaW0sIGZhbHNlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD5Db25zdHJ1Y3RzIGEgc3RyaW5nIHRva2VuaXplciBmb3IgdGhlIHNwZWNpZmllZCBzdHJpbmcuIAorICAgICAqIFRoZSB0b2tlbml6ZXIgdXNlcyB0aGUgZGVmYXVsdCBkZWxpbWl0ZXIgc2V0LCB3aGljaCBpcyAKKyAgICAgKiAiICYjOTI7dCYjOTI7biYjOTI7ciYjOTI7ZiI6IAorICAgICAqIHRoZSBzcGFjZSBjaGFyYWN0ZXIsIHRoZSB0YWIgY2hhcmFjdGVyLCB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIHRoZSAKKyAgICAgKiBjYXJyaWFnZS1yZXR1cm4gY2hhcmFjdGVyLCBhbmQgdGhlIGZvcm0tZmVlZCBjaGFyYWN0ZXIuPC9wPiAKKyAgICAgKiA8cD5EZWxpbWl0ZXIgY2hhcmFjdGVycyB0aGVtc2VsdmVzIHdpbGwgbm90IGJlIHRyZWF0ZWQgYXMgdG9rZW5zLjwvcD4KKyAgICAgKiBAcGFyYW0gc3RyIGEgc3RyaW5nIHRvIGJlIHBhcnNlZAorICAgICAqIEBleGNlcHRpb24gdGhyb3dzIGEgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgc3RyIGlzIG51bGwKKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdUb2tlbml6ZXIoU3RyaW5nIHN0cikgCisgICAgeworICAgICAgICB0aGlzKHN0ciwgREVGQVVMVF9ERUxJTUlURVJTXywgZmFsc2UpOworICAgIH0KKyAgICAKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHRoZXJlIGFyZSBtb3JlIHRva2VucyBhdmFpbGFibGUgZnJvbSB0aGlzIHRva2VuaXplcidzIAorICAgICAqIHN0cmluZy4gCisgICAgICogSWYgdGhpcyBtZXRob2QgcmV0dXJucyA8dHQ+dHJ1ZTwvdHQ+LCB0aGVuIGEgc3Vic2VxdWVudCBjYWxsIHRvIAorICAgICAqIDx0dD5uZXh0VG9rZW48L3R0PiB3aXRoIG5vIGFyZ3VtZW50IHdpbGwgc3VjY2Vzc2Z1bGx5IHJldHVybiBhIHRva2VuLgorICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHRva2VuIAorICAgICAqICAgICAgICAgaW4gdGhlIHN0cmluZyBhZnRlciB0aGUgY3VycmVudCBwb3NpdGlvbjsgPGNvZGU+ZmFsc2U8L2NvZGU+IAorICAgICAqICAgICAgICAgb3RoZXJ3aXNlLgorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaGFzTW9yZVRva2VucygpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmV4dE9mZnNldF8gPj0gMDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbmV4dCB0b2tlbiBmcm9tIHRoaXMgc3RyaW5nIHRva2VuaXplci4KKyAgICAgKiBAcmV0dXJuIHRoZSBuZXh0IHRva2VuIGZyb20gdGhpcyBzdHJpbmcgdG9rZW5pemVyLgorICAgICAqIEBleGNlcHRpb24gTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBpZiB0aGVyZSBhcmUgbm8gbW9yZSB0b2tlbnMgaW4gCisgICAgICogICAgICAgICAgICB0aGlzIHRva2VuaXplcidzIHN0cmluZy4KKyAgICAgKiBAZHJhZnQgSUNVIDIuNAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgbmV4dFRva2VuKCkgCisgICAgeworICAgICAgICBpZiAobV90b2tlbk9mZnNldF8gPCAwKSB7CisgICAgICAgICAgICBpZiAobV9uZXh0T2Zmc2V0XyA8IDApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigiTm8gbW9yZSB0b2tlbnMgaW4gU3RyaW5nIik7ICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBwcmUtY2FsY3VsYXRpb25zIG9mIHRva2VucyBub3QgZG9uZQorICAgICAgICAgICAgaWYgKG1fcmV0dXJuRGVsaW1pdGVyc18pIHsKKyAgICAgICAgICAgICAgICBpbnQgdG9rZW5saW1pdCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKG1fZGVsaW1pdGVyc18uY29udGFpbnMoVVRGMTYuY2hhckF0KG1fc291cmNlXywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbmV4dE9mZnNldF8pKSkgeworICAgICAgICAgICAgICAgICAgICB0b2tlbmxpbWl0ID0gZ2V0TmV4dE5vbkRlbGltaXRlcihtX25leHRPZmZzZXRfKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VubGltaXQgPSBnZXROZXh0RGVsaW1pdGVyKG1fbmV4dE9mZnNldF8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICAgICAgICAgIGlmICh0b2tlbmxpbWl0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3NvdXJjZV8uc3Vic3RyaW5nKG1fbmV4dE9mZnNldF8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9zb3VyY2VfLnN1YnN0cmluZyhtX25leHRPZmZzZXRfLCB0b2tlbmxpbWl0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9uZXh0T2Zmc2V0XyA9IHRva2VubGltaXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCB0b2tlbmxpbWl0ID0gZ2V0TmV4dERlbGltaXRlcihtX25leHRPZmZzZXRfKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICAgICAgICAgIGlmICh0b2tlbmxpbWl0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3NvdXJjZV8uc3Vic3RyaW5nKG1fbmV4dE9mZnNldF8pOworICAgICAgICAgICAgICAgICAgICBtX25leHRPZmZzZXRfID0gdG9rZW5saW1pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fc291cmNlXy5zdWJzdHJpbmcobV9uZXh0T2Zmc2V0XywgdG9rZW5saW1pdCk7CisgICAgICAgICAgICAgICAgICAgIG1fbmV4dE9mZnNldF8gPSBnZXROZXh0Tm9uRGVsaW1pdGVyKHRva2VubGltaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGNvdW50IHdhcyBjYWxsZWQgYmVmb3JlIGFuZCB3ZSBoYXZlIGFsbCB0aGUgdG9rZW5zCisgICAgICAgIGlmIChtX3Rva2VuT2Zmc2V0XyA+PSBtX3Rva2VuU2l6ZV8pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uKCJObyBtb3JlIHRva2VucyBpbiBTdHJpbmciKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICBpZiAobV90b2tlbkxpbWl0X1ttX3Rva2VuT2Zmc2V0X10gPj0gMCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbV9zb3VyY2VfLnN1YnN0cmluZyhtX3Rva2VuU3RhcnRfW21fdG9rZW5PZmZzZXRfXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbkxpbWl0X1ttX3Rva2VuT2Zmc2V0X10pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gbV9zb3VyY2VfLnN1YnN0cmluZyhtX3Rva2VuU3RhcnRfW21fdG9rZW5PZmZzZXRfXSk7CisgICAgICAgIH0KKyAgICAgICAgbV90b2tlbk9mZnNldF8gKys7CisgICAgICAgIG1fbmV4dE9mZnNldF8gPSBtX3Rva2VuU3RhcnRfW21fdG9rZW5PZmZzZXRfXTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbmV4dCB0b2tlbiBpbiB0aGlzIHN0cmluZyB0b2tlbml6ZXIncyBzdHJpbmcuIEZpcnN0LCAKKyAgICAgKiB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgY29uc2lkZXJlZCB0byBiZSBkZWxpbWl0ZXJzIGJ5IHRoaXMgCisgICAgICogPHR0PlN0cmluZ1Rva2VuaXplcjwvdHQ+IG9iamVjdCBpcyBjaGFuZ2VkIHRvIGJlIHRoZSBjaGFyYWN0ZXJzIGluIAorICAgICAqIHRoZSBzdHJpbmcgPHR0PmRlbGltPC90dD4uIFRoZW4gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmluZworICAgICAqIGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIHJldHVybmVkLiBUaGUgY3VycmVudCBwb3NpdGlvbiBpcyAKKyAgICAgKiBhZHZhbmNlZCBiZXlvbmQgdGhlIHJlY29nbml6ZWQgdG9rZW4uICBUaGUgbmV3IGRlbGltaXRlciBzZXQgCisgICAgICogcmVtYWlucyB0aGUgZGVmYXVsdCBhZnRlciB0aGlzIGNhbGwuIAorICAgICAqIEBwYXJhbSBkZWxpbSB0aGUgbmV3IGRlbGltaXRlcnMuCisgICAgICogQHJldHVybiB0aGUgbmV4dCB0b2tlbiwgYWZ0ZXIgc3dpdGNoaW5nIHRvIHRoZSBuZXcgZGVsaW1pdGVyIHNldC4KKyAgICAgKiBAZXhjZXB0aW9uIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gaWYgdGhlcmUgYXJlIG5vIG1vcmUgdG9rZW5zIGluIAorICAgICAqICAgICAgICAgICAgdGhpcyB0b2tlbml6ZXIncyBzdHJpbmcuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIG5leHRUb2tlbihTdHJpbmcgZGVsaW0pIAorICAgIHsKKyAgICAgICAgbV9kZWxpbWl0ZXJzXyA9IEVNUFRZX0RFTElNSVRFUl87CisgICAgICAgIGlmIChkZWxpbSAhPSBudWxsICYmIGRlbGltLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgbV9kZWxpbWl0ZXJzXyA9IG5ldyBVbmljb2RlU2V0KCk7CisgICAgICAgICAgICBtX2RlbGltaXRlcnNfLmFkZEFsbChkZWxpbSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5leHRUb2tlbihtX2RlbGltaXRlcnNfKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbmV4dCB0b2tlbiBpbiB0aGlzIHN0cmluZyB0b2tlbml6ZXIncyBzdHJpbmcuIEZpcnN0LCAKKyAgICAgKiB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgY29uc2lkZXJlZCB0byBiZSBkZWxpbWl0ZXJzIGJ5IHRoaXMgCisgICAgICogPHR0PlN0cmluZ1Rva2VuaXplcjwvdHQ+IG9iamVjdCBpcyBjaGFuZ2VkIHRvIGJlIHRoZSBjaGFyYWN0ZXJzIGluIAorICAgICAqIHRoZSBzdHJpbmcgPHR0PmRlbGltPC90dD4uIFRoZW4gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmluZworICAgICAqIGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIHJldHVybmVkLiBUaGUgY3VycmVudCBwb3NpdGlvbiBpcyAKKyAgICAgKiBhZHZhbmNlZCBiZXlvbmQgdGhlIHJlY29nbml6ZWQgdG9rZW4uICBUaGUgbmV3IGRlbGltaXRlciBzZXQgCisgICAgICogcmVtYWlucyB0aGUgZGVmYXVsdCBhZnRlciB0aGlzIGNhbGwuIAorICAgICAqIEBwYXJhbSBkZWxpbSB0aGUgbmV3IGRlbGltaXRlcnMuCisgICAgICogQHJldHVybiB0aGUgbmV4dCB0b2tlbiwgYWZ0ZXIgc3dpdGNoaW5nIHRvIHRoZSBuZXcgZGVsaW1pdGVyIHNldC4KKyAgICAgKiBAZXhjZXB0aW9uIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gaWYgdGhlcmUgYXJlIG5vIG1vcmUgdG9rZW5zIGluIAorICAgICAqICAgICAgICAgICAgdGhpcyB0b2tlbml6ZXIncyBzdHJpbmcuCisgICAgICogQGRyYWZ0IElDVSAyLjQKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIG5leHRUb2tlbihVbmljb2RlU2V0IGRlbGltKSAKKyAgICB7CisgICAgICAgIG1fZGVsaW1pdGVyc18gPSBkZWxpbTsKKyAgICAgICAgbV90b2tlbk9mZnNldF8gPSAtMTsKKyAgICAgICAgbV90b2tlblNpemVfID0gLTE7CisgICAgICAgIGlmICghbV9yZXR1cm5EZWxpbWl0ZXJzXykgeworICAgICAgICAgICAgbV9uZXh0T2Zmc2V0XyA9IGdldE5leHROb25EZWxpbWl0ZXIobV9uZXh0T2Zmc2V0Xyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5leHRUb2tlbigpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSA8Y29kZT5oYXNNb3JlVG9rZW5zPC9jb2RlPiBtZXRob2QuIAorICAgICAqIEl0IGV4aXN0cyBzbyB0aGF0IHRoaXMgY2xhc3MgY2FuIGltcGxlbWVudCB0aGUgCisgICAgICogPGNvZGU+RW51bWVyYXRpb248L2NvZGU+IGludGVyZmFjZS4gCisgICAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGVyZSBhcmUgbW9yZSB0b2tlbnM7CisgICAgICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAqIEBzZWUgI2hhc01vcmVUb2tlbnMoKQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaGFzTW9yZUVsZW1lbnRzKCkgCisgICAgeworICAgICAgICByZXR1cm4gaGFzTW9yZVRva2VucygpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IG1ldGhvZCwgZXhjZXB0IAorICAgICAqIHRoYXQgaXRzIGRlY2xhcmVkIHJldHVybiB2YWx1ZSBpcyA8Y29kZT5PYmplY3Q8L2NvZGU+IHJhdGhlciB0aGFuIAorICAgICAqIDxjb2RlPlN0cmluZzwvY29kZT4uIEl0IGV4aXN0cyBzbyB0aGF0IHRoaXMgY2xhc3MgY2FuIGltcGxlbWVudCB0aGUgCisgICAgICogPGNvZGU+RW51bWVyYXRpb248L2NvZGU+IGludGVyZmFjZS4gCisgICAgICogQHJldHVybiB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgc3RyaW5nLgorICAgICAqIEBleGNlcHRpb24gTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBpZiB0aGVyZSBhcmUgbm8gbW9yZSB0b2tlbnMgaW4gCisgICAgICogICAgICAgICAgICB0aGlzIHRva2VuaXplcidzIHN0cmluZy4KKyAgICAgKiBAc2VlICNuZXh0VG9rZW4oKQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIE9iamVjdCBuZXh0RWxlbWVudCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5leHRUb2tlbigpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGlzIHRva2VuaXplcidzIAorICAgICAqIDxjb2RlPm5leHRUb2tlbjwvY29kZT4gbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIGl0IGdlbmVyYXRlcyBhbiAKKyAgICAgKiBleGNlcHRpb24uIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCBhZHZhbmNlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgdG9rZW5zIHJlbWFpbmluZyBpbiB0aGUgc3RyaW5nIHVzaW5nIHRoZSAKKyAgICAgKiAgICAgICAgIGN1cnJlbnQgZGVsaW1pdGVyIHNldC4KKyAgICAgKiBAc2VlICNuZXh0VG9rZW4oKQorICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICovCisgICAgcHVibGljIGludCBjb3VudFRva2VucygpIAorICAgIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgIGlmIChoYXNNb3JlVG9rZW5zKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3Rva2VuT2Zmc2V0XyA+PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdG9rZW5TaXplXyAtIG1fdG9rZW5PZmZzZXRfOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fdG9rZW5TdGFydF8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1fdG9rZW5TdGFydF8gPSBuZXcgaW50W1RPS0VOX1NJWkVfXTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuTGltaXRfID0gbmV3IGludFtUT0tFTl9TSVpFX107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKG1fdG9rZW5TdGFydF8ubGVuZ3RoID09IHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdGVtcHRva2VuaW5kZXhbXSA9IG1fdG9rZW5TdGFydF87CisgICAgICAgICAgICAgICAgICAgIGludCB0ZW1wdG9rZW5zaXplW10gPSBtX3Rva2VuTGltaXRfOworICAgICAgICAgICAgICAgICAgICBpbnQgb3JpZ2luYWxzaXplID0gdGVtcHRva2VuaW5kZXgubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpbnQgbmV3c2l6ZSA9IG9yaWdpbmFsc2l6ZSArIFRPS0VOX1NJWkVfOworICAgICAgICAgICAgICAgICAgICBtX3Rva2VuU3RhcnRfID0gbmV3IGludFtuZXdzaXplXTsKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbkxpbWl0XyA9IG5ldyBpbnRbbmV3c2l6ZV07CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGVtcHRva2VuaW5kZXgsIDAsIG1fdG9rZW5TdGFydF8sIDAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGVtcHRva2Vuc2l6ZSwgMCwgbV90b2tlbkxpbWl0XywgMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxzaXplKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV90b2tlblN0YXJ0X1tyZXN1bHRdID0gbV9uZXh0T2Zmc2V0XzsKKyAgICAgICAgICAgICAgICBpZiAobV9yZXR1cm5EZWxpbWl0ZXJzXykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9kZWxpbWl0ZXJzXy5jb250YWlucyhVVEYxNi5jaGFyQXQobV9zb3VyY2VfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbmV4dE9mZnNldF8pKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbkxpbWl0X1tyZXN1bHRdID0gZ2V0TmV4dE5vbkRlbGltaXRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25leHRPZmZzZXRfKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW5MaW1pdF9bcmVzdWx0XSA9IGdldE5leHREZWxpbWl0ZXIobV9uZXh0T2Zmc2V0Xyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9uZXh0T2Zmc2V0XyA9IG1fdG9rZW5MaW1pdF9bcmVzdWx0XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW5MaW1pdF9bcmVzdWx0XSA9IGdldE5leHREZWxpbWl0ZXIobV9uZXh0T2Zmc2V0Xyk7CisgICAgICAgICAgICAgICAgICAgIG1fbmV4dE9mZnNldF8gPSBnZXROZXh0Tm9uRGVsaW1pdGVyKG1fdG9rZW5MaW1pdF9bcmVzdWx0XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCArKzsKKyAgICAgICAgICAgIH0gd2hpbGUgKG1fbmV4dE9mZnNldF8gPj0gMCk7CisgICAgICAgICAgICBtX3Rva2VuT2Zmc2V0XyA9IDA7CisgICAgICAgICAgICBtX3Rva2VuU2l6ZV8gPSByZXN1bHQ7CisgICAgICAgICAgICBtX25leHRPZmZzZXRfID0gbV90b2tlblN0YXJ0X1swXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogQ3VycmVudCBvZmZzZXQgdG8gdGhlIHRva2VuIGFycmF5LiBJZiB0aGUgYXJyYXkgdG9rZW4gaXMgbm90IHNldCB1cCB5ZXQsCisgICAgICogdGhpcyB2YWx1ZSBpcyBhIC0xCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbV90b2tlbk9mZnNldF87CisgICAgLyoqCisgICAgICogU2l6ZSBvZiB0aGUgdG9rZW4gYXJyYXkuIElmIHRoZSBhcnJheSB0b2tlbiBpcyBub3Qgc2V0IHVwIHlldCwKKyAgICAgKiB0aGlzIHZhbHVlIGlzIGEgLTEKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX3Rva2VuU2l6ZV87CisgICAgLyoqCisgICAgICogQXJyYXkgb2YgcHJlLWNhbGN1bGF0ZWQgdG9rZW5zIHN0YXJ0IGluZGV4ZXMgaW4gc291cmNlIHN0cmluZyB0ZXJtaW5hdGVkIAorICAgICAqIGJ5IC0xLgorICAgICAqIFRoaXMgaXMgb25seSBzZXQgdXAgZHVyaW5nIGNvdW50VG9rZW5zKCkgYW5kIG9ubHkgc3RvcmVzIHRoZSByZW1haW5pbmcKKyAgICAgKiB0b2tlbnMsIG5vdCBhbGwgdG9rZW5zIGluY2x1ZGluZyBwYXJzZWQgb25lcworICAgICAqLworICAgIHByaXZhdGUgaW50IG1fdG9rZW5TdGFydF9bXTsKKyAgICAvKioKKyAgICAgKiBBcnJheSBvZiBwcmUtY2FsY3VsYXRlZCB0b2tlbnMgbGltaXQgaW5kZXhlcyBpbiBzb3VyY2Ugc3RyaW5nLgorICAgICAqIFRoaXMgaXMgb25seSBzZXQgdXAgZHVyaW5nIGNvdW50VG9rZW5zKCkgYW5kIG9ubHkgc3RvcmVzIHRoZSByZW1haW5pbmcKKyAgICAgKiB0b2tlbnMsIG5vdCBhbGwgdG9rZW5zIGluY2x1ZGluZyBwYXJzZWQgb25lcworICAgICAqLworICAgIHByaXZhdGUgaW50IG1fdG9rZW5MaW1pdF9bXTsKKyAgICAvKioKKyAgICAgKiBVbmljb2RlU2V0IGNvbnRhaW5pbmcgZGVsaW1pdGVycworICAgICAqLworICAgIHByaXZhdGUgVW5pY29kZVNldCBtX2RlbGltaXRlcnNfOworICAgIC8qKgorICAgICAqIFN0cmluZyB0byBwYXJzZSBmb3IgdG9rZW5zCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgbV9zb3VyY2VfOworICAgIC8qKgorICAgICAqIExlbmd0aCBvZiBtX3NvdXJjZV8KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX2xlbmd0aF87CisgICAgLyoqCisgICAgICogQ3VycmVudCBwb3NpdGlvbiBpbiBzdHJpbmcgdG8gcGFyc2UgZm9yIHRva2VucworICAgICAqLworICAgIHByaXZhdGUgaW50IG1fbmV4dE9mZnNldF87CisgICAgLyoqCisgICAgICogRmxhZyBpbmRpY2F0b3IgaWYgZGVsaW1pdGVycyBhcmUgdG8gYmUgdHJlYXRlZCBhcyB0b2tlbnMgdG9vCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1fcmV0dXJuRGVsaW1pdGVyc187CisgICAgLyoqCisgICAgICogRGVmYXVsdCBzZXQgb2YgZGVsaW1pdGVycyAmIzkyO3QmIzkyO24mIzkyO3ImIzkyO2YKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVbmljb2RlU2V0IERFRkFVTFRfREVMSU1JVEVSU18gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgVW5pY29kZVNldCgiWyBcdFxuXHJcZl0iLCBmYWxzZSk7CisgICAgLyoqCisgICAgICogQXJyYXkgc2l6ZSBpbmNyZW1lbnRzCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRPS0VOX1NJWkVfID0gMTAwOworICAgIC8qKgorICAgICAqIEEgZW1wdHkgZGVsaW1pdGVyIFVuaWNvZGVTZXQsIHVzZWQgd2hlbiB1c2VyIHNwZWNpZmllZCBudWxsIGRlbGltaXRlcnMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVbmljb2RlU2V0IEVNUFRZX0RFTElNSVRFUl8gPSBuZXcgVW5pY29kZVNldCgpOworICAgIAorICAgIC8vIHByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBkZWxpbWl0ZXIgYWZ0ZXIgb2Zmc2V0CisgICAgICogQHBhcmFtIG9mZnNldCB0byB0aGUgc291cmNlIHN0cmluZworICAgICAqIEByZXR1cm4gb2Zmc2V0IG9mIHRoZSBpbW1lZGlhdGUgbmV4dCBkZWxpbWl0ZXIsIG90aGVyd2lzZSAKKyAgICAgKiAgICAgICAgICgtIHNvdXJjZSBzdHJpbmcgbGVuZ3RoIC0gMSkgaWYgdGhlcmUKKyAgICAgKiAgICAgICAgIGFyZSBubyBtb3JlIGRlbGltaXRlcnMgYWZ0ZXIgbV9uZXh0T2Zmc2V0CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0TmV4dERlbGltaXRlcihpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKG9mZnNldCA+PSAwKSB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gb2Zmc2V0OyAKKyAgICAgICAgICAgIGludCBjID0gMDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBjID0gVVRGMTYuY2hhckF0KG1fc291cmNlXywgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAobV9kZWxpbWl0ZXJzXy5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ICsrOworICAgICAgICAgICAgfSB3aGlsZSAocmVzdWx0IDwgbV9sZW5ndGhfKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPCBtX2xlbmd0aF8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMSAtIG1fbGVuZ3RoXzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIG5leHQgbm9uLWRlbGltaXRlciBhZnRlciBtX25leHRPZmZzZXRfCisgICAgICogQHBhcmFtIG9mZnNldCB0byB0aGUgc291cmNlIHN0cmluZworICAgICAqIEByZXR1cm4gb2Zmc2V0IG9mIHRoZSBpbW1lZGlhdGUgbmV4dCBub24tZGVsaW1pdGVyLCBvdGhlcndpc2UgCisgICAgICogICAgICAgICAoLSBzb3VyY2Ugc3RyaW5nIGxlbmd0aCAtIDEpIGlmIHRoZXJlCisgICAgICogICAgICAgICBhcmUgbm8gbW9yZSBkZWxpbWl0ZXJzIGFmdGVyIG1fbmV4dE9mZnNldAorICAgICAqLworICAgIHByaXZhdGUgaW50IGdldE5leHROb25EZWxpbWl0ZXIoaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChvZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IG9mZnNldDsgCisgICAgICAgICAgICBpbnQgYyA9IDA7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgYyA9IFVURjE2LmNoYXJBdChtX3NvdXJjZV8sIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2RlbGltaXRlcnNfLmNvbnRhaW5zKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgKys7CisgICAgICAgICAgICB9IHdoaWxlIChyZXN1bHQgPCBtX2xlbmd0aF8pOworICAgICAgICAgICAgaWYgKHJlc3VsdCA8IG1fbGVuZ3RoXykgeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xIC0gbV9sZW5ndGhfOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL1RpbWVab25lLmphdmEgYi9zcmMvY29tL2libS9pY3UvdXRpbC9UaW1lWm9uZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiYzQ0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9UaW1lWm9uZS5qYXZhCkBAIC0wLDAgKzEsNzA3IEBACisvKgorICogQCgjKVRpbWVab25lLmphdmEJMS41MSAwMC8wMS8xOQorICoKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKworcGFja2FnZSBjb20uaWJtLmljdS51dGlsOworaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworaW1wb3J0IGphdmEubGFuZy5yZWYuU29mdFJlZmVyZW5jZTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xsZXI7CitpbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2aWxlZ2VkQWN0aW9uOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0Lk51bWJlckZvcm1hdDsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbjsKK2ltcG9ydCBzdW4uc2VjdXJpdHkuYWN0aW9uLkdldFByb3BlcnR5QWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCisvKioKKyAqIDxjb2RlPlRpbWVab25lPC9jb2RlPiByZXByZXNlbnRzIGEgdGltZSB6b25lIG9mZnNldCwgYW5kIGFsc28gZmlndXJlcyBvdXQgZGF5bGlnaHQKKyAqIHNhdmluZ3MuCisgKgorICogPHA+CisgKiBUeXBpY2FsbHksIHlvdSBnZXQgYSA8Y29kZT5UaW1lWm9uZTwvY29kZT4gdXNpbmcgPGNvZGU+Z2V0RGVmYXVsdDwvY29kZT4KKyAqIHdoaWNoIGNyZWF0ZXMgYSA8Y29kZT5UaW1lWm9uZTwvY29kZT4gYmFzZWQgb24gdGhlIHRpbWUgem9uZSB3aGVyZSB0aGUgcHJvZ3JhbQorICogaXMgcnVubmluZy4gRm9yIGV4YW1wbGUsIGZvciBhIHByb2dyYW0gcnVubmluZyBpbiBKYXBhbiwgPGNvZGU+Z2V0RGVmYXVsdDwvY29kZT4KKyAqIGNyZWF0ZXMgYSA8Y29kZT5UaW1lWm9uZTwvY29kZT4gb2JqZWN0IGJhc2VkIG9uIEphcGFuZXNlIFN0YW5kYXJkIFRpbWUuCisgKgorICogPHA+CisgKiBZb3UgY2FuIGFsc28gZ2V0IGEgPGNvZGU+VGltZVpvbmU8L2NvZGU+IHVzaW5nIDxjb2RlPmdldFRpbWVab25lPC9jb2RlPgorICogYWxvbmcgd2l0aCBhIHRpbWUgem9uZSBJRC4gRm9yIGluc3RhbmNlLCB0aGUgdGltZSB6b25lIElEIGZvciB0aGUKKyAqIFUuUy4gUGFjaWZpYyBUaW1lIHpvbmUgaXMgIkFtZXJpY2EvTG9zX0FuZ2VsZXMiLiBTbywgeW91IGNhbiBnZXQgYQorICogVS5TLiBQYWNpZmljIFRpbWUgPGNvZGU+VGltZVpvbmU8L2NvZGU+IG9iamVjdCB3aXRoOgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogVGltZVpvbmUgdHogPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiQW1lcmljYS9Mb3NfQW5nZWxlcyIpOworICogPC9wcmU+CisgKiA8L2Jsb2NrcXVvdGU+CisgKiBZb3UgY2FuIHVzZSA8Y29kZT5nZXRBdmFpbGFibGVJRHM8L2NvZGU+IG1ldGhvZCB0byBpdGVyYXRlIHRocm91Z2gKKyAqIGFsbCB0aGUgc3VwcG9ydGVkIHRpbWUgem9uZSBJRHMuIFlvdSBjYW4gdGhlbiBjaG9vc2UgYQorICogc3VwcG9ydGVkIElEIHRvIGdldCBhIDxjb2RlPlRpbWVab25lPC9jb2RlPi4KKyAqIElmIHRoZSB0aW1lIHpvbmUgeW91IHdhbnQgaXMgbm90IHJlcHJlc2VudGVkIGJ5IG9uZSBvZiB0aGUKKyAqIHN1cHBvcnRlZCBJRHMsIHRoZW4geW91IGNhbiBjcmVhdGUgYSBjdXN0b20gdGltZSB6b25lIElEIHdpdGgKKyAqIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorICoKKyAqIDxibG9ja3F1b3RlPgorICogPHByZT4KKyAqIEdNVFsrfC1daGhbWzpdbW1dCisgKiA8L3ByZT4KKyAqIDwvYmxvY2txdW90ZT4KKyAqCisgKiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHNwZWNpZnkgR01UKzE0OjAwIGFzIGEgY3VzdG9tCisgKiB0aW1lIHpvbmUgSUQuICBUaGUgPGNvZGU+VGltZVpvbmU8L2NvZGU+IHRoYXQgaXMgcmV0dXJuZWQKKyAqIHdoZW4geW91IHNwZWNpZnkgYSBjdXN0b20gdGltZSB6b25lIElEIGRvZXMgbm90IGluY2x1ZGUKKyAqIGRheWxpZ2h0IHNhdmluZ3MgdGltZS4KKyAqIDxwPgorICogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBKREsgMS4xLngsIHNvbWUgb3RoZXIgdGhyZWUtbGV0dGVyIHRpbWUgem9uZSBJRHMKKyAqIChzdWNoIGFzICJQU1QiLCAiQ1RUIiwgIkFTVCIpIGFyZSBhbHNvIHN1cHBvcnRlZC4gSG93ZXZlciwgPHN0cm9uZz50aGVpcgorICogdXNlIGlzIGRlcHJlY2F0ZWQ8L3N0cm9uZz4gYmVjYXVzZSB0aGUgc2FtZSBhYmJyZXZpYXRpb24gaXMgb2Z0ZW4gdXNlZAorICogZm9yIG11bHRpcGxlIHRpbWUgem9uZXMgKGZvciBleGFtcGxlLCAiQ1NUIiBjb3VsZCBiZSBVLlMuICJDZW50cmFsIFN0YW5kYXJkCisgKiBUaW1lIiBhbmQgIkNoaW5hIFN0YW5kYXJkIFRpbWUiKSwgYW5kIHRoZSBKYXZhIHBsYXRmb3JtIGNhbiB0aGVuIG9ubHkKKyAqIHJlY29nbml6ZSBvbmUgb2YgdGhlbS4KKyAqCisgKgorICogQHNlZSAgICAgICAgICBDYWxlbmRhcgorICogQHNlZSAgICAgICAgICBHcmVnb3JpYW5DYWxlbmRhcgorICogQHNlZSAgICAgICAgICBTaW1wbGVUaW1lWm9uZQorICogQGF1dGhvciAgICAgICBNYXJrIERhdmlzLCBEYXZpZCBHb2xkc21pdGgsIENoZW4tTGllaCBIdWFuZywgQWxhbiBMaXUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgVGltZVpvbmUgaW1wbGVtZW50cyBTZXJpYWxpemFibGUsIENsb25lYWJsZSB7CisgICAgLyoqCisgICAgICogU29sZSBjb25zdHJ1Y3Rvci4gIChGb3IgaW52b2NhdGlvbiBieSBzdWJjbGFzcyBjb25zdHJ1Y3RvcnMsIHR5cGljYWxseQorICAgICAqIGltcGxpY2l0LikKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgVGltZVpvbmUoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBzdHlsZSBzcGVjaWZpZXIgZm9yIDxjb2RlPmdldERpc3BsYXlOYW1lKCk8L2NvZGU+IGluZGljYXRpbmcKKyAgICAgKiBhIHNob3J0IG5hbWUsIHN1Y2ggYXMgIlBTVC4iCisgICAgICogQHNlZSAjTE9ORworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1JUID0gMDsKKworICAgIC8qKgorICAgICAqIEEgc3R5bGUgc3BlY2lmaWVyIGZvciA8Y29kZT5nZXREaXNwbGF5TmFtZSgpPC9jb2RlPiBpbmRpY2F0aW5nCisgICAgICogYSBsb25nIG5hbWUsIHN1Y2ggYXMgIlBhY2lmaWMgU3RhbmRhcmQgVGltZS4iCisgICAgICogQHNlZSAjU0hPUlQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT05HICA9IDE7CisKKyAgICAvLyBDb25zdGFudHMgdXNlZCBpbnRlcm5hbGx5OyB1bml0IGlzIG1pbGxpc2Vjb25kcworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPTkVfTUlOVVRFID0gNjAqMTAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT05FX0hPVVIgICA9IDYwKk9ORV9NSU5VVEU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9ORV9EQVkgICAgPSAyNCpPTkVfSE9VUjsKKworICAgIC8qKgorICAgICAqIENhY2hlIHRvIGhvbGQgdGhlIFNpbXBsZURhdGVGb3JtYXQgb2JqZWN0cyBmb3IgYSBMb2NhbGUuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgSGFzaHRhYmxlIGNhY2hlZExvY2FsZURhdGEgPSBuZXcgSGFzaHRhYmxlKDMpOworCisgICAgLy8gUHJvY2xhaW0gc2VyaWFsaXphdGlvbiBjb21wYXRpYmlsaXR5IHdpdGggSkRLIDEuMQorICAgIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzNTgxNDYzMzY5MTY2OTI0OTYxTDsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRpbWUgem9uZSBvZmZzZXQsIGZvciBjdXJyZW50IGRhdGUsIG1vZGlmaWVkIGluIGNhc2Ugb2YKKyAgICAgKiBkYXlsaWdodCBzYXZpbmdzLiBUaGlzIGlzIHRoZSBvZmZzZXQgdG8gYWRkICp0byogVVRDIHRvIGdldCBsb2NhbCB0aW1lLgorICAgICAqIEBwYXJhbSBlcmEgdGhlIGVyYSBvZiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBAcGFyYW0geWVhciB0aGUgeWVhciBpbiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBAcGFyYW0gbW9udGggdGhlIG1vbnRoIGluIHRoZSBnaXZlbiBkYXRlLgorICAgICAqIE1vbnRoIGlzIDAtYmFzZWQuIGUuZy4sIDAgZm9yIEphbnVhcnkuCisgICAgICogQHBhcmFtIGRheSB0aGUgZGF5LWluLW1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLgorICAgICAqIEBwYXJhbSBkYXlPZldlZWsgdGhlIGRheS1vZi13ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLgorICAgICAqIEBwYXJhbSBtaWxsaXNlY29uZHMgdGhlIG1pbGxpcyBpbiBkYXkgaW4gPGVtPnN0YW5kYXJkPC9lbT4gbG9jYWwgdGltZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBvZmZzZXQgdG8gYWRkICp0byogR01UIHRvIGdldCBsb2NhbCB0aW1lLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGFic3RyYWN0IHB1YmxpYyBpbnQgZ2V0T2Zmc2V0KGludCBlcmEsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRheU9mV2VlaywgaW50IG1pbGxpc2Vjb25kcyk7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0aW1lIHpvbmUgb2Zmc2V0LCBmb3IgY3VycmVudCBkYXRlLCBtb2RpZmllZCBpbiBjYXNlIG9mCisgICAgICogZGF5bGlnaHQgc2F2aW5ncy4gVGhpcyBpcyB0aGUgb2Zmc2V0IHRvIGFkZCAqdG8qIFVUQyB0byBnZXQgbG9jYWwgdGltZS4KKyAgICAgKiBAcGFyYW0gZXJhIHRoZSBlcmEgb2YgdGhlIGdpdmVuIGRhdGUuCisgICAgICogQHBhcmFtIHllYXIgdGhlIHllYXIgaW4gdGhlIGdpdmVuIGRhdGUuCisgICAgICogQHBhcmFtIG1vbnRoIHRoZSBtb250aCBpbiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBNb250aCBpcyAwLWJhc2VkLiBlLmcuLCAwIGZvciBKYW51YXJ5LgorICAgICAqIEBwYXJhbSBkYXkgdGhlIGRheS1pbi1tb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBAcGFyYW0gZGF5T2ZXZWVrIHRoZSBkYXktb2Ytd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS4KKyAgICAgKiBAcGFyYW0gbWlsbGlzZWNvbmRzIHRoZSBtaWxsaXMgaW4gZGF5IGluIDxlbT5zdGFuZGFyZDwvZW0+IGxvY2FsIHRpbWUuCisgICAgICogQHBhcmFtIG1vbnRoTGVuZ3RoIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIG1vbnRoIGluIGRheXMuCisgICAgICogQHBhcmFtIHByZXZNb250aExlbmd0aCB0aGUgbGVuZ3RoIG9mIHRoZSBwcmV2aW91cyBtb250aCBpbiBkYXlzLgorICAgICAqIEByZXR1cm4gdGhlIG9mZnNldCB0byBhZGQgKnRvKiBHTVQgdG8gZ2V0IGxvY2FsIHRpbWUuCisgICAgICovCisgICAgaW50IGdldE9mZnNldChpbnQgZXJhLCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LAorCQkgIGludCBkYXlPZldlZWssIGludCBtaWxsaXNlY29uZHMsIGludCBtb250aExlbmd0aCwgaW50IHByZXZNb250aExlbmd0aCkgeworCS8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggaWdub3JlcyB0aGUgbW9udGhMZW5ndGguCisJLy8gU2ltcGxlVGltZVpvbmUgb3ZlcnJpZGVzIHRoaXMgYW5kIGFjdHVhbGx5IHVzZXMgbW9udGhMZW5ndGguCisJcmV0dXJuIGdldE9mZnNldChlcmEsIHllYXIsIG1vbnRoLCBkYXksIGRheU9mV2VlaywgbWlsbGlzZWNvbmRzKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogTkVXQ0FMCisgICAgICogR2V0cyB0aGUgbG9jYWwgdGltZSB6b25lIG9mZnNldCBmb3IgdGhpcyB6b25lLCBmb3IgdGhlIGdpdmVuIGRhdGUuCisgICAgICogQHBhcmFtIGV5ZWFyIHRoZSBleHRlbmRlZCBHcmVnb3JpYW4geWVhciwgd2l0aCAwID0gMSBCQywgLTEgPSAyIEJDLAorICAgICAqIGV0Yy4KKyAgICAgKi8KKyAgICBpbnQgZ2V0T2Zmc2V0KGludCBleWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCwgaW50IGRheU9mV2VlaywKKyAgICAgICAgICAgICAgICAgIGludCBtaWxsaXNlY29uZHMsIGludCBtb250aExlbmd0aCwgaW50IHByZXZNb250aExlbmd0aCkgeworICAgICAgICAvLyBURU1QT1JBUlk6IENvbnZlcnQgdGhlIGV5ZWFyIHRvIGFuIGVyYS95ZWFyIGFuZCBjYWxsIG9sZCBBUEkKKyAgICAgICAgaW50IGVyYSA9IEdyZWdvcmlhbkNhbGVuZGFyLkFEOworICAgICAgICBpZiAoZXllYXIgPCAxKSB7CisgICAgICAgICAgICBlcmEgPSBHcmVnb3JpYW5DYWxlbmRhci5CQzsKKyAgICAgICAgICAgIGV5ZWFyID0gMSAtIGV5ZWFyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBnZXRPZmZzZXQoZXJhLCBleWVhciwgbW9udGgsIGRheU9mTW9udGgsIGRheU9mV2VlaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMsIG1vbnRoTGVuZ3RoLCBwcmV2TW9udGhMZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGJhc2UgdGltZSB6b25lIG9mZnNldCB0byBHTVQuCisgICAgICogVGhpcyBpcyB0aGUgb2Zmc2V0IHRvIGFkZCAqdG8qIFVUQyB0byBnZXQgbG9jYWwgdGltZS4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0TWlsbGlzIHRoZSBnaXZlbiBiYXNlIHRpbWUgem9uZSBvZmZzZXQgdG8gR01ULgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGFic3RyYWN0IHB1YmxpYyB2b2lkIHNldFJhd09mZnNldChpbnQgb2Zmc2V0TWlsbGlzKTsKKworICAgIC8qKgorICAgICAqIEdldHMgdW5tb2RpZmllZCBvZmZzZXQsIE5PVCBtb2RpZmllZCBpbiBjYXNlIG9mIGRheWxpZ2h0IHNhdmluZ3MuCisgICAgICogVGhpcyBpcyB0aGUgb2Zmc2V0IHRvIGFkZCAqdG8qIFVUQyB0byBnZXQgbG9jYWwgdGltZS4KKyAgICAgKiBAcmV0dXJuIHRoZSB1bm1vZGlmaWVkIG9mZnNldCB0byBhZGQgKnRvKiBVVEMgdG8gZ2V0IGxvY2FsIHRpbWUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgYWJzdHJhY3QgcHVibGljIGludCBnZXRSYXdPZmZzZXQoKTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIElEIG9mIHRoaXMgdGltZSB6b25lLgorICAgICAqIEByZXR1cm4gdGhlIElEIG9mIHRoaXMgdGltZSB6b25lLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIElEOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHRpbWUgem9uZSBJRC4gVGhpcyBkb2VzIG5vdCBjaGFuZ2UgYW55IG90aGVyIGRhdGEgaW4KKyAgICAgKiB0aGUgdGltZSB6b25lIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gSUQgdGhlIG5ldyB0aW1lIHpvbmUgSUQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SUQoU3RyaW5nIElEKQorICAgIHsKKyAgICAgICAgaWYgKElEID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuSUQgPSBJRDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmFtZSBvZiB0aGlzIHRpbWUgem9uZSBzdWl0YWJsZSBmb3IgcHJlc2VudGF0aW9uIHRvIHRoZSB1c2VyCisgICAgICogaW4gdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxvbmcgbmFtZSwgbm90IGluY2x1ZGluZyBkYXlsaWdodCBzYXZpbmdzLgorICAgICAqIElmIHRoZSBkaXNwbGF5IG5hbWUgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGxvY2FsZSwKKyAgICAgKiB0aGVuIHRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdAorICAgICAqIDxjb2RlPkdNVFsrLV1oaDptbTwvY29kZT4uCisgICAgICogQHJldHVybiB0aGUgaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGlzIHRpbWUgem9uZSBpbiB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREaXNwbGF5TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIGdldERpc3BsYXlOYW1lKGZhbHNlLCBMT05HLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmFtZSBvZiB0aGlzIHRpbWUgem9uZSBzdWl0YWJsZSBmb3IgcHJlc2VudGF0aW9uIHRvIHRoZSB1c2VyCisgICAgICogaW4gdGhlIHNwZWNpZmllZCBsb2NhbGUuCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbG9uZyBuYW1lLCBub3QgaW5jbHVkaW5nIGRheWxpZ2h0IHNhdmluZ3MuCisgICAgICogSWYgdGhlIGRpc3BsYXkgbmFtZSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgbG9jYWxlLAorICAgICAqIHRoZW4gdGhpcyBtZXRob2QgcmV0dXJucyBhIHN0cmluZyBpbiB0aGUgZm9ybWF0CisgICAgICogPGNvZGU+R01UWystXWhoOm1tPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gbG9jYWxlIHRoZSBsb2NhbGUgaW4gd2hpY2ggdG8gc3VwcGx5IHRoZSBkaXNwbGF5IG5hbWUuCisgICAgICogQHJldHVybiB0aGUgaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGlzIHRpbWUgem9uZSBpbiB0aGUgZ2l2ZW4gbG9jYWxlCisgICAgICogb3IgaW4gdGhlIGRlZmF1bHQgbG9jYWxlIGlmIHRoZSBnaXZlbiBsb2NhbGUgaXMgbm90IHJlY29nbml6ZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREaXNwbGF5TmFtZShMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiBnZXREaXNwbGF5TmFtZShmYWxzZSwgTE9ORywgbG9jYWxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmFtZSBvZiB0aGlzIHRpbWUgem9uZSBzdWl0YWJsZSBmb3IgcHJlc2VudGF0aW9uIHRvIHRoZSB1c2VyCisgICAgICogaW4gdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqIElmIHRoZSBkaXNwbGF5IG5hbWUgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGxvY2FsZSwKKyAgICAgKiB0aGVuIHRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdAorICAgICAqIDxjb2RlPkdNVFsrLV1oaDptbTwvY29kZT4uCisgICAgICogQHBhcmFtIGRheWxpZ2h0IGlmIHRydWUsIHJldHVybiB0aGUgZGF5bGlnaHQgc2F2aW5ncyBuYW1lLgorICAgICAqIEBwYXJhbSBzdHlsZSBlaXRoZXIgPGNvZGU+TE9ORzwvY29kZT4gb3IgPGNvZGU+U0hPUlQ8L2NvZGU+CisgICAgICogQHJldHVybiB0aGUgaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGlzIHRpbWUgem9uZSBpbiB0aGUgZGVmYXVsdCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREaXNwbGF5TmFtZShib29sZWFuIGRheWxpZ2h0LCBpbnQgc3R5bGUpIHsKKyAgICAgICAgcmV0dXJuIGdldERpc3BsYXlOYW1lKGRheWxpZ2h0LCBzdHlsZSwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5hbWUgb2YgdGhpcyB0aW1lIHpvbmUgc3VpdGFibGUgZm9yIHByZXNlbnRhdGlvbiB0byB0aGUgdXNlcgorICAgICAqIGluIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgorICAgICAqIElmIHRoZSBkaXNwbGF5IG5hbWUgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGxvY2FsZSwKKyAgICAgKiB0aGVuIHRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdAorICAgICAqIDxjb2RlPkdNVFsrLV1oaDptbTwvY29kZT4uCisgICAgICogQHBhcmFtIGRheWxpZ2h0IGlmIHRydWUsIHJldHVybiB0aGUgZGF5bGlnaHQgc2F2aW5ncyBuYW1lLgorICAgICAqIEBwYXJhbSBzdHlsZSBlaXRoZXIgPGNvZGU+TE9ORzwvY29kZT4gb3IgPGNvZGU+U0hPUlQ8L2NvZGU+CisgICAgICogQHBhcmFtIGxvY2FsZSB0aGUgbG9jYWxlIGluIHdoaWNoIHRvIHN1cHBseSB0aGUgZGlzcGxheSBuYW1lLgorICAgICAqIEByZXR1cm4gdGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhpcyB0aW1lIHpvbmUgaW4gdGhlIGdpdmVuIGxvY2FsZQorICAgICAqIG9yIGluIHRoZSBkZWZhdWx0IGxvY2FsZSBpZiB0aGUgZ2l2ZW4gbG9jYWxlIGlzIG5vdCByZWNvZ25pemVkLgorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHN0eWxlIGlzIGludmFsaWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5TmFtZShib29sZWFuIGRheWxpZ2h0LCBpbnQgc3R5bGUsIExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgLyogTk9URVM6CisgICAgICAgICAqICgxKSBXZSB1c2UgU2ltcGxlRGF0ZUZvcm1hdCBmb3Igc2ltcGxpY2l0eTsgd2UgY291bGQgZG8gdGhpcworICAgICAgICAgKiBtb3JlIGVmZmljaWVudGx5IGJ1dCBpdCB3b3VsZCBkdXBsaWNhdGUgdGhlIFNpbXBsZURhdGVGb3JtYXQgY29kZQorICAgICAgICAgKiBoZXJlLCB3aGljaCBpcyB1bmRlc2lyYWJsZS4KKyAgICAgICAgICogKDIpIEF0dGVtcHRzIHRvIG1vdmUgdGhlIGNvZGUgZnJvbSBTaW1wbGVEYXRlRm9ybWF0IHRvIGhlcmUgYWxzbyBydW4KKyAgICAgICAgICogYWdyb3VuZCBiZWNhdXNlIHRoaXMgcmVxdWlyZXMgU2ltcGxlRGF0ZUZvcm1hdCB0byBrZWVwIGEgTG9jYWxlCisgICAgICAgICAqIG9iamVjdCBhcm91bmQsIHdoaWNoIGl0IGN1cnJlbnRseSBkb2Vzbid0OyB0byBzeW50aGVzaXplIHN1Y2ggYQorICAgICAgICAgKiBsb2NhbGUgdXBvbiByZXN1cnJlY3Rpb247IGFuZCB0byBzb21laG93IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mCisgICAgICAgICAqIGNvbnN0cnVjdGlvbiBmcm9tIGEgRGF0ZUZvcm1hdFN5bWJvbHMgb2JqZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHN0eWxlICE9IFNIT1JUICYmIHN0eWxlICE9IExPTkcpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgc3R5bGU6ICIgKyBzdHlsZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2Uga2VlcCBhIGNhY2hlLCBpbmRleGVkIGJ5IGxvY2FsZS4gIFRoZSBjYWNoZSBjb250YWlucyBhCisgICAgICAgIC8vIFNpbXBsZURhdGVGb3JtYXQgb2JqZWN0LCB3aGljaCB3ZSBjcmVhdGUgb24gZGVtYW5kLgorICAgICAgICBTb2Z0UmVmZXJlbmNlIGRhdGEgPSAoU29mdFJlZmVyZW5jZSljYWNoZWRMb2NhbGVEYXRhLmdldChsb2NhbGUpOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fAorICAgICAgICAgICAgKGZvcm1hdCA9IChTaW1wbGVEYXRlRm9ybWF0KWRhdGEuZ2V0KCkpID09IG51bGwpIHsKKyAgICAgICAgICAgIGZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KG51bGwsIGxvY2FsZSk7CisgICAgICAgICAgICBjYWNoZWRMb2NhbGVEYXRhLnB1dChsb2NhbGUsIG5ldyBTb2Z0UmVmZXJlbmNlKGZvcm1hdCkpOworICAgICAgICB9CisgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBTaW1wbGVUaW1lWm9uZSBhcyBhIHN0YW5kLWluIGZvciB0aGlzIHpvbmU7IHRoZSBzdGFuZC1pbgorICAgICAgICAvLyB3aWxsIGhhdmUgbm8gRFNULCBvciBEU1QgZHVyaW5nIEphbnVhcnksIGJ1dCB0aGUgc2FtZSBJRCBhbmQgb2Zmc2V0LAorICAgICAgICAvLyBhbmQgaGVuY2UgdGhlIHNhbWUgZGlzcGxheSBuYW1lLiAgV2UgZG9uJ3QgY2FjaGUgdGhlc2UgYmVjYXVzZQorICAgICAgICAvLyB0aGV5J3JlIHNtYWxsIGFuZCBjaGVhcCB0byBjcmVhdGUuCisgICAgICAgIFNpbXBsZVRpbWVab25lIHR6OworICAgICAgICBpZiAoZGF5bGlnaHQgJiYgdXNlRGF5bGlnaHRUaW1lKCkpIHsKKyAgICAgICAgICAgIGludCBzYXZpbmdzID0gT05FX0hPVVI7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHNhdmluZ3MgPSAoKFNpbXBsZVRpbWVab25lKSB0aGlzKS5nZXREU1RTYXZpbmdzKCk7CisgICAgICAgICAgICB9IGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgIHR6ID0gbmV3IFNpbXBsZVRpbWVab25lKGdldFJhd09mZnNldCgpLCBnZXRJRCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIuSkFOVUFSWSwgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLkZFQlJVQVJZLCAxLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2aW5ncyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0eiA9IG5ldyBTaW1wbGVUaW1lWm9uZShnZXRSYXdPZmZzZXQoKSwgZ2V0SUQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0LmFwcGx5UGF0dGVybihzdHlsZSA9PSBMT05HID8gInp6enoiIDogInoiKTsgICAgICAKKyAgICAgICAgZm9ybWF0LnNldFRpbWVab25lKHR6KTsKKyAgICAgICAgLy8gRm9ybWF0IGEgZGF0ZSBpbiBKYW51YXJ5LiAgV2UgdXNlIHRoZSB2YWx1ZSAxMCpPTkVfREFZID09IEphbiAxMSAxOTcwCisgICAgICAgIC8vIDA6MDAgR01ULgorICAgICAgICByZXR1cm4gZm9ybWF0LmZvcm1hdChuZXcgRGF0ZSg4NjQwMDAwMDBMKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUXVlcmllcyBpZiB0aGlzIHRpbWUgem9uZSB1c2VzIGRheWxpZ2h0IHNhdmluZ3MgdGltZS4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyB0aW1lIHpvbmUgdXNlcyBkYXlsaWdodCBzYXZpbmdzIHRpbWUsCisgICAgICogZmFsc2UsIG90aGVyd2lzZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBhYnN0cmFjdCBwdWJsaWMgYm9vbGVhbiB1c2VEYXlsaWdodFRpbWUoKTsKKworICAgIC8qKgorICAgICAqIFF1ZXJpZXMgaWYgdGhlIGdpdmVuIGRhdGUgaXMgaW4gZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGluCisgICAgICogdGhpcyB0aW1lIHpvbmUuCisgICAgICogQHBhcmFtIGRhdGUgdGhlIGdpdmVuIERhdGUuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBkYXRlIGlzIGluIGRheWxpZ2h0IHNhdmluZ3MgdGltZSwKKyAgICAgKiBmYWxzZSwgb3RoZXJ3aXNlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGFic3RyYWN0IHB1YmxpYyBib29sZWFuIGluRGF5bGlnaHRUaW1lKERhdGUgZGF0ZSk7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSA8Y29kZT5UaW1lWm9uZTwvY29kZT4gZm9yIHRoZSBnaXZlbiBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBJRCB0aGUgSUQgZm9yIGEgPGNvZGU+VGltZVpvbmU8L2NvZGU+LCBlaXRoZXIgYW4gYWJicmV2aWF0aW9uCisgICAgICogc3VjaCBhcyAiUFNUIiwgYSBmdWxsIG5hbWUgc3VjaCBhcyAiQW1lcmljYS9Mb3NfQW5nZWxlcyIsIG9yIGEgY3VzdG9tCisgICAgICogSUQgc3VjaCBhcyAiR01ULTg6MDAiLiBOb3RlIHRoYXQgdGhlIHN1cHBvcnQgb2YgYWJicmV2aWF0aW9ucyBpcworICAgICAqIGZvciBKREsgMS4xLnggY29tcGF0aWJpbGl0eSBvbmx5IGFuZCBmdWxsIG5hbWVzIHNob3VsZCBiZSB1c2VkLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgc3BlY2lmaWVkIDxjb2RlPlRpbWVab25lPC9jb2RlPiwgb3IgdGhlIEdNVCB6b25lIGlmIHRoZSBnaXZlbiBJRAorICAgICAqIGNhbm5vdCBiZSB1bmRlcnN0b29kLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIFRpbWVab25lIGdldFRpbWVab25lKFN0cmluZyBJRCkgeworICAgICAgICAvKiBXZSBmaXJzdCB0cnkgdG8gbG9va3VwIHRoZSB6b25lIElEIGluIG91ciBoYXNodGFibGUuICBJZiB0aGlzIGZhaWxzLAorICAgICAgICAgKiB3ZSB0cnkgdG8gcGFyc2UgaXQgYXMgYSBjdXN0b20gc3RyaW5nIEdNVFsrLV1oaDptbS4gIFRoaXMgYWxsb3dzIHVzCisgICAgICAgICAqIHRvIHJlY29nbml6ZSB6b25lcyBpbiB1c2VyLnRpbWV6b25lIHRoYXQgb3RoZXJ3aXNlIGNhbm5vdCBiZQorICAgICAgICAgKiBpZGVudGlmaWVkLiAgV2UgZG8gdGhlIHJlY29nbml0aW9uIGhlcmUsIHJhdGhlciB0aGFuIGluIGdldERlZmF1bHQoKSwKKyAgICAgICAgICogc28gdGhhdCB0aGUgZGVmYXVsdCB6b25lIGlzIGFsd2F5cyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcKKyAgICAgICAgICogZ2V0VGltZVpvbmUoKSB3aXRoIHRoZSBwcm9wZXJ0eSB1c2VyLnRpbWV6b25lLgorICAgICAgICAgKgorICAgICAgICAgKiBJZiBhbGwgZWxzZSBmYWlscywgd2UgcmV0dXJuIEdNVCwgd2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgdGhlIHVzZXIKKyAgICAgICAgICogd2FudHMsIGJ1dCBhdCBsZWFzdCBpcyBhIGZ1bmN0aW9uaW5nIFRpbWVab25lIG9iamVjdC4gKi8KKyAgICAgICAgVGltZVpvbmUgem9uZSA9IFRpbWVab25lRGF0YS5nZXQoSUQpOworICAgICAgICBpZiAoem9uZSA9PSBudWxsKSB6b25lID0gcGFyc2VDdXN0b21UaW1lWm9uZShJRCk7CisgICAgICAgIGlmICh6b25lID09IG51bGwpIHpvbmUgPSAoVGltZVpvbmUpR01ULmNsb25lKCk7CisgICAgICAgIHJldHVybiB6b25lOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIG5ldyBTdHJpbmcgYXJyYXkgY29udGFpbmluZyBhbGwgc3lzdGVtIFRpbWVab25lIElEcworICAgICAqIHdpdGggdGhlIGdpdmVuIHJhdyBvZmZzZXQgZnJvbSBHTVQuICBUaGVzZSBJRHMgbWF5IGJlIHBhc3NlZCB0bworICAgICAqIDxjb2RlPmdldCgpPC9jb2RlPiB0byBjb25zdHJ1Y3QgdGhlIGNvcnJlc3BvbmRpbmcgVGltZVpvbmUKKyAgICAgKiBvYmplY3QuCisgICAgICogQHBhcmFtIHJhd09mZnNldCB0aGUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyBmcm9tIEdNVAorICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgSURzIGZvciBzeXN0ZW0gVGltZVpvbmVzIHdpdGggdGhlIGdpdmVuCisgICAgICogcmF3IG9mZnNldC4gIElmIHRoZXJlIGFyZSBub25lLCByZXR1cm4gYSB6ZXJvLWxlbmd0aCBhcnJheS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUlEcyhpbnQgcmF3T2Zmc2V0KSB7CisgICAgICAgIHJldHVybiBUaW1lWm9uZURhdGEuZ2V0QXZhaWxhYmxlSURzKHJhd09mZnNldCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgbmV3IFN0cmluZyBhcnJheSBjb250YWluaW5nIGFsbCBzeXN0ZW0gVGltZVpvbmUgSURzCisgICAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb3VudHJ5LiAgVGhlc2UgSURzIG1heSBiZSBwYXNzZWQgdG8KKyAgICAgKiA8Y29kZT5nZXQoKTwvY29kZT4gdG8gY29uc3RydWN0IHRoZSBjb3JyZXNwb25kaW5nIFRpbWVab25lCisgICAgICogb2JqZWN0LgorICAgICAqIEBwYXJhbSBhIHR3by1sZXR0ZXIgSVNPIDMxNjYgY291bnRyeSBjb2RlLCBvciA8Y29kZT5udWxsPC9jb2RlPgorICAgICAqIHRvIHJldHVybiB6b25lcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBjb3VudHJ5CisgICAgICogQHJldHVybiBhbiBhcnJheSBvZiBJRHMgZm9yIHN5c3RlbSBUaW1lWm9uZXMgaW4gdGhlIGdpdmVuCisgICAgICogY291bnRyeS4gIElmIHRoZXJlIGFyZSBub25lLCByZXR1cm4gYSB6ZXJvLWxlbmd0aCBhcnJheS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUlEcyhTdHJpbmcgY291bnRyeSkgeworICAgICAgICByZXR1cm4gVGltZVpvbmVEYXRhLmdldEF2YWlsYWJsZUlEcyhjb3VudHJ5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBuZXcgU3RyaW5nIGFycmF5IGNvbnRhaW5pbmcgYWxsIHN5c3RlbSBUaW1lWm9uZSBJRHMuCisgICAgICogVGhlc2UgSURzIChhbmQgb25seSB0aGVzZSBJRHMpIG1heSBiZSBwYXNzZWQgdG8KKyAgICAgKiA8Y29kZT5nZXQoKTwvY29kZT4gdG8gY29uc3RydWN0IHRoZSBjb3JyZXNwb25kaW5nIFRpbWVab25lCisgICAgICogb2JqZWN0LgorICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHN5c3RlbSBUaW1lWm9uZSBJRHMKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUlEcygpIHsKKyAgICAgICAgcmV0dXJuIFRpbWVab25lRGF0YS5nZXRBdmFpbGFibGVJRHMoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIElEcyBpbiB0aGUgZXF1aXZhbGVuY3kgZ3JvdXAgdGhhdAorICAgICAqIGluY2x1ZGVzIHRoZSBnaXZlbiBJRC4gIEFuIGVxdWl2YWxlbmN5IGdyb3VwIGNvbnRhaW5zIHpvbmVzCisgICAgICogdGhhdCBoYXZlIHRoZSBzYW1lIEdNVCBvZmZzZXQgYW5kIHJ1bGVzLgorICAgICAqCisgICAgICogPHA+VGhlIHJldHVybmVkIGNvdW50IGluY2x1ZGVzIHRoZSBnaXZlbiBJRDsgaXQgaXMgYWx3YXlzID49IDEKKyAgICAgKiBmb3IgdmFsaWQgSURzLiAgVGhlIGdpdmVuIElEIG11c3QgYmUgYSBzeXN0ZW0gdGltZSB6b25lLiAgSWYgaXQKKyAgICAgKiBpcyBub3QsIHJldHVybnMgemVyby4KKyAgICAgKiBAcGFyYW0gaWQgYSBzeXN0ZW0gdGltZSB6b25lIElECisgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHpvbmVzIGluIHRoZSBlcXVpdmFsZW5jeSBncm91cCBjb250YWluaW5nCisgICAgICogJ2lkJywgb3IgemVybyBpZiAnaWQnIGlzIG5vdCBhIHZhbGlkIHN5c3RlbSBJRAorICAgICAqIEBzZWUgI2dldEVxdWl2YWxlbnRJRAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvdW50RXF1aXZhbGVudElEcyhTdHJpbmcgaWQpIHsKKyAgICAgICAgcmV0dXJuIFRpbWVab25lRGF0YS5jb3VudEVxdWl2YWxlbnRJRHMoaWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gSUQgaW4gdGhlIGVxdWl2YWxlbmN5IGdyb3VwIHRoYXQKKyAgICAgKiBpbmNsdWRlcyB0aGUgZ2l2ZW4gSUQuICBBbiBlcXVpdmFsZW5jeSBncm91cCBjb250YWlucyB6b25lcworICAgICAqIHRoYXQgaGF2ZSB0aGUgc2FtZSBHTVQgb2Zmc2V0IGFuZCBydWxlcy4KKyAgICAgKgorICAgICAqIDxwPlRoZSBnaXZlbiBpbmRleCBtdXN0IGJlIGluIHRoZSByYW5nZSAwLi5uLTEsIHdoZXJlIG4gaXMgdGhlCisgICAgICogdmFsdWUgcmV0dXJuZWQgYnkgPGNvZGU+Y291bnRFcXVpdmFsZW50SURzKGlkKTwvY29kZT4uICBGb3IKKyAgICAgKiBzb21lIHZhbHVlIG9mICdpbmRleCcsIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIGVxdWFsIHRvIHRoZQorICAgICAqIGdpdmVuIGlkLiAgSWYgdGhlIGdpdmVuIGlkIGlzIG5vdCBhIHZhbGlkIHN5c3RlbSB0aW1lIHpvbmUsIG9yCisgICAgICogaWYgJ2luZGV4JyBpcyBvdXQgb2YgcmFuZ2UsIHRoZW4gcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICogQHBhcmFtIGlkIGEgc3lzdGVtIHRpbWUgem9uZSBJRAorICAgICAqIEBwYXJhbSBpbmRleCBhIHZhbHVlIGZyb20gMCB0byBuLTEsIHdoZXJlIG4gaXMgdGhlIHZhbHVlCisgICAgICogcmV0dXJuZWQgYnkgPGNvZGU+Y291bnRFcXVpdmFsZW50SURzKGlkKTwvY29kZT4KKyAgICAgKiBAcmV0dXJuIHRoZSBJRCBvZiB0aGUgaW5kZXgtdGggem9uZSBpbiB0aGUgZXF1aXZhbGVuY3kgZ3JvdXAKKyAgICAgKiBjb250YWluaW5nICdpZCcsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiAnaWQnIGlzIG5vdCBhIHZhbGlkCisgICAgICogc3lzdGVtIElEIG9yICdpbmRleCcgaXMgb3V0IG9mIHJhbmdlCisgICAgICogQHNlZSAjY291bnRFcXVpdmFsZW50SURzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RXF1aXZhbGVudElEKFN0cmluZyBpZCwgaW50IGluZGV4KSB7CisgICAgICAgIHJldHVybiBUaW1lWm9uZURhdGEuZ2V0RXF1aXZhbGVudElEKGlkLCBpbmRleCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgcGxhdGZvcm0gZGVmaW5lZCBUaW1lWm9uZSBJRC4KKyAgICAgKiovCisvLyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5nIGdldFN5c3RlbVRpbWVab25lSUQoU3RyaW5nIGphdmFIb21lLCAKKy8vCQkJCQkJICAgICBTdHJpbmcgcmVnaW9uKTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGRlZmF1bHQgPGNvZGU+VGltZVpvbmU8L2NvZGU+IGZvciB0aGlzIGhvc3QuCisgICAgICogVGhlIHNvdXJjZSBvZiB0aGUgZGVmYXVsdCA8Y29kZT5UaW1lWm9uZTwvY29kZT4gCisgICAgICogbWF5IHZhcnkgd2l0aCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKiBAcmV0dXJuIGEgZGVmYXVsdCA8Y29kZT5UaW1lWm9uZTwvY29kZT4uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgVGltZVpvbmUgZ2V0RGVmYXVsdCgpIHsKKyAgICAgICAgaWYgKGRlZmF1bHRab25lID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2F1c2VzIGFuIEFjY2Vzc0NvbnRyb2xFeGNlcHRpb24gd2hlbiBydW4gaW4gYW4KKyAgICAgICAgICAgIC8vIGFwcGxldC4gIFRvIGdldCBhcm91bmQgdGhpcywgd2UgZG9uJ3QgcmVhZCB0aGUgdXNlci50aW1lem9uZQorICAgICAgICAgICAgLy8gcHJvcGVydHk7IGluc3RlYWQgd2UgZGVmZXIgdG8gVGltZVpvbmUuZ2V0RGVmYXVsdCgpLiAtIExpdQorICAgICAgICAgICAgLy8hLy8gZ2V0IHRoZSB0aW1lIHpvbmUgSUQgZnJvbSB0aGUgc3lzdGVtIHByb3BlcnRpZXMKKyAgICAgICAgICAgIC8vIVN0cmluZyB6b25lSUQgPSAoU3RyaW5nKSBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZCgKKyAgICAgICAgICAgIC8vISAgICBuZXcgR2V0UHJvcGVydHlBY3Rpb24oInVzZXIudGltZXpvbmUiKSk7CisgICAgICAgICAgICAvLyEKKwkgICAgLy8hLy8gaWYgdGhlIHRpbWUgem9uZSBJRCBpcyBub3Qgc2V0ICh5ZXQpLCBwZXJmb3JtIHRoZQorCSAgICAvLyEvLyBwbGF0Zm9ybSB0byBKYXZhIHRpbWUgem9uZSBJRCBtYXBwaW5nLgorCSAgICAvLyFpZiAoem9uZUlEID09IG51bGwgfHwgem9uZUlELmVxdWFscygiIikpIHsgCisJCS8vU3RyaW5nIHJlZ2lvbiA9IChTdHJpbmcpIEFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKAorCQkvLyAgICBuZXcgR2V0UHJvcGVydHlBY3Rpb24oInVzZXIucmVnaW9uIikpOworCQkvL1N0cmluZyBqYXZhSG9tZSA9IChTdHJpbmcpIEFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKAorCQkvLyAgICBuZXcgR2V0UHJvcGVydHlBY3Rpb24oImphdmEuaG9tZSIpKTsKKwkJLy96b25lSUQgPSBnZXRTeXN0ZW1UaW1lWm9uZUlEKGphdmFIb21lLCByZWdpb24pOworCisgICAgICAgICAgICAgICAgLy8gW2ljdTRqIFdlIGdldCB0aGUgZGVmYXVsdCB6b25lIGJ5IHF1ZXJ5aW5nIGphdmEudXRpbC5UaW1lWm9uZSwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgYW5kIHRoZW4gYXR0ZW1wdGluZyB0byBtYXAgdGhlIElELiAtIGxpdSBdCisgICAgICAgICAgICAgICAgamF2YS51dGlsLlRpbWVab25lIF9kZWZhdWx0ID0gamF2YS51dGlsLlRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIFN5c3RlbS5vdXQucHJpbnRsbigiamF2YS51dGlsLlRaLmRlZmF1bHQgIiArIF9kZWZhdWx0KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgem9uZUlEID0gX2RlZmF1bHQuZ2V0SUQoKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Wm9uZSA9IFRpbWVab25lRGF0YS5nZXQoem9uZUlEKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFpvbmUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBbaWN1NGogVGhpcyBtZWFucyB0aGF0IHRoZSB6b25lIHJldHVybmVkIGJ5IHRoZSBKREsgZG9lcworICAgICAgICAgICAgICAgICAgICAvLyBub3QgZXhpc3QgaW4gb3VyIHRhYmxlLiAgV2Ugd2lsbCwgZm9yIHRoZSBtb21lbnQsIG1hcCB0bworICAgICAgICAgICAgICAgICAgICAvLyBhIHN0ZCB6b25lIHRoYXQgaGFzIHRoZSBzYW1lIHJhdyBvZmZzZXQuICBJbiB0aGUgZnV0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIG1pZ2h0IGZpbmQgaXQgd29ydGh3aGlsZSB0byBleHRyYWN0IHRoZSBydWxlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBzeXN0ZW0gZGVmYXVsdCB6b25lLCBidXQgdGhpcyBpcyB0b28gbXVjaCB0cm91YmxlIGZvcgorICAgICAgICAgICAgICAgICAgICAvLyBub3cuICBJdCB3aWxsIGJlIGVhc2llciB0byBleHRlbmQgb3VyIG1hcHBpbmcgdGFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIEpES3Mgd2Ugd2FudCB0byBzdXBwb3J0LiAtIGxpdSBdCisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuU2ltcGxlVGltZVpvbmUgcyA9IChqYXZhLnV0aWwuU2ltcGxlVGltZVpvbmUpIF9kZWZhdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFpvbmUgPSBuZXcgU2ltcGxlVGltZVpvbmUocy5nZXRSYXdPZmZzZXQoKSwgcy5nZXRJRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHt9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHpvbmVJRCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB6b25lSUQgPSBHTVRfSUQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gQWdhaW4sIHdlIGNhbid0IGRvIHRoaXMgZnJvbSBvdXRzaWRlIHRoZSBKREsgaW4gYW4gYXBwbGV0LgorICAgICAgICAgICAgICAgICAgICAvLyFmaW5hbCBTdHJpbmcgaWQgPSB6b25lSUQ7CisgICAgICAgICAgICAgICAgICAgIC8vIUFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKG5ldyBQcml2aWxlZ2VkQWN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAvLyEgICAgcHVibGljIE9iamVjdCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIC8vISAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCJ1c2VyLnRpbWV6b25lIiwgaWQpOworICAgICAgICAgICAgICAgICAgICAvLyEgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICAvLyEgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyF9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyF9CisgICAgICAgICAgICBpZiAoZGVmYXVsdFpvbmUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRlZmF1bHRab25lID0gZ2V0VGltZVpvbmUoem9uZUlEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmYWxzZSkgU3lzdGVtLm91dC5wcmludGxuKCJjb20uaWJtLmljdS51dGlsLlRaLmRlZmF1bHQgIiArIGRlZmF1bHRab25lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKFRpbWVab25lKWRlZmF1bHRab25lLmNsb25lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgPGNvZGU+VGltZVpvbmU8L2NvZGU+IHRoYXQgaXMKKyAgICAgKiByZXR1cm5lZCBieSB0aGUgPGNvZGU+Z2V0RGVmYXVsdDwvY29kZT4gbWV0aG9kLiAgSWYgPGNvZGU+em9uZTwvY29kZT4KKyAgICAgKiBpcyBudWxsLCByZXNldCB0aGUgZGVmYXVsdCB0byB0aGUgdmFsdWUgaXQgaGFkIG9yaWdpbmFsbHkgd2hlbiB0aGUKKyAgICAgKiBWTSBmaXJzdCBzdGFydGVkLgorICAgICAqIEBwYXJhbSB6b25lIHRoZSBuZXcgZGVmYXVsdCB0aW1lIHpvbmUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHQoVGltZVpvbmUgem9uZSkKKyAgICB7CisgICAgICAgIGRlZmF1bHRab25lID0gem9uZTsKKyAgICAgICAgLy8gW2ljdTRqIEtlZXAgamF2YS51dGlsLlRpbWVab25lIGRlZmF1bHQgaW4gc3luYyBzbyBqYXZhLnV0aWwuRGF0ZQorICAgICAgICAvLyAgICAgICAgY2FuIGludGVyb3BlcmF0ZSB3aXRoIGNvbS5pYm0uaWN1LnV0aWwgY2xhc3Nlcy4gIFRoaXMgc29sdXRpb24KKyAgICAgICAgLy8gICAgICAgIGlzIF9pbXBlcmZlY3RfOyBzZWUgU2ltcGxlVGltZVpvbmVBZGFwdGVyLiAtIGxpdV0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGphdmEudXRpbC5UaW1lWm9uZS5zZXREZWZhdWx0KAorICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVUaW1lWm9uZUFkYXB0ZXIoKFNpbXBsZVRpbWVab25lKSB6b25lKSk7CisgICAgICAgIH0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHpvbmUgaGFzIHRoZSBzYW1lIHJ1bGUgYW5kIG9mZnNldCBhcyBhbm90aGVyIHpvbmUuCisgICAgICogVGhhdCBpcywgaWYgdGhpcyB6b25lIGRpZmZlcnMgb25seSBpbiBJRCwgaWYgYXQgYWxsLiAgUmV0dXJucyBmYWxzZQorICAgICAqIGlmIHRoZSBvdGhlciB6b25lIGlzIG51bGwuCisgICAgICogQHBhcmFtIG90aGVyIHRoZSA8Y29kZT5UaW1lWm9uZTwvY29kZT4gb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGgKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG90aGVyIHpvbmUgaXMgbm90IG51bGwgYW5kIGlzIHRoZSBzYW1lIGFzIHRoaXMgb25lLAorICAgICAqIHdpdGggdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiB0aGUgSUQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNTYW1lUnVsZXMoVGltZVpvbmUgb3RoZXIpIHsKKyAgICAgICAgcmV0dXJuIG90aGVyICE9IG51bGwgJiYgZ2V0UmF3T2Zmc2V0KCkgPT0gb3RoZXIuZ2V0UmF3T2Zmc2V0KCkgJiYKKyAgICAgICAgICAgIHVzZURheWxpZ2h0VGltZSgpID09IG90aGVyLnVzZURheWxpZ2h0VGltZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlcyBDbG9uZWFibGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaW1lWm9uZSBvdGhlciA9IChUaW1lWm9uZSkgc3VwZXIuY2xvbmUoKTsKKyAgICAgICAgICAgIG90aGVyLklEID0gSUQ7CisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIH0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PXByaXZhdGVzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogVGhlIHN0cmluZyBpZGVudGlmaWVyIG9mIHRoaXMgPGNvZGU+VGltZVpvbmU8L2NvZGU+LiAgVGhpcyBpcyBhCisgICAgICogcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgdXNlZCBpbnRlcm5hbGx5IHRvIGxvb2sgdXAgPGNvZGU+VGltZVpvbmU8L2NvZGU+CisgICAgICogb2JqZWN0cyBmcm9tIHRoZSBzeXN0ZW0gdGFibGUgYW5kIGFsc28gdG8gbWFwIHRoZW0gdG8gdGhlaXIgbG9jYWxpemVkCisgICAgICogZGlzcGxheSBuYW1lcy4gIDxjb2RlPklEPC9jb2RlPiB2YWx1ZXMgYXJlIHVuaXF1ZSBpbiB0aGUgc3lzdGVtCisgICAgICogdGFibGUgYnV0IG1heSBub3QgYmUgZm9yIGR5bmFtaWNhbGx5IGNyZWF0ZWQgem9uZXMuCisgICAgICogQHNlcmlhbAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nICAgICAgICAgICBJRDsKKyAgICBwcml2YXRlIHN0YXRpYyBUaW1lWm9uZSAgZGVmYXVsdFpvbmUgPSBudWxsOworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyAgICAgICAgIEdNVF9JRCAgICAgICAgPSAiR01UIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgICAgR01UX0lEX0xFTkdUSCA9IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENVU1RPTV9JRCAgICAgPSAiQ3VzdG9tIjsKKworICAgIHByaXZhdGUgc3RhdGljIE51bWJlckZvcm1hdCBudW1iZXJGb3JtYXQgPSBudWxsOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGltZVpvbmUgR01UID0gbmV3IFNpbXBsZVRpbWVab25lKDAsIEdNVF9JRCk7CisKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIGN1c3RvbSB0aW1lIHpvbmUgaWRlbnRpZmllciBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZyB6b25lLgorICAgICAqIEBwYXJhbSBpZCBhIHN0cmluZyBvZiB0aGUgZm9ybSBHTVRbKy1daGg6bW0sIEdNVFsrLV1oaG1tLCBvcgorICAgICAqIEdNVFsrLV1oaC4KKyAgICAgKiBAcmV0dXJuIGEgbmV3bHkgY3JlYXRlZCBTaW1wbGVUaW1lWm9uZSB3aXRoIHRoZSBnaXZlbiBvZmZzZXQgYW5kCisgICAgICogbm8gZGF5bGlnaHQgc2F2aW5ncyB0aW1lLCBvciBudWxsIGlmIHRoZSBpZCBjYW5ub3QgYmUgcGFyc2VkLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVRpbWVab25lIHBhcnNlQ3VzdG9tVGltZVpvbmUoU3RyaW5nIGlkKSB7CisgICAgICAgIGlmIChpZC5sZW5ndGgoKSA+IEdNVF9JRF9MRU5HVEggJiYKKyAgICAgICAgICAgIGlkLnJlZ2lvbk1hdGNoZXModHJ1ZSwgMCwgR01UX0lELCAwLCBHTVRfSURfTEVOR1RIKSkgeworICAgICAgICAgICAgUGFyc2VQb3NpdGlvbiBwb3MgPSBuZXcgUGFyc2VQb3NpdGlvbihHTVRfSURfTEVOR1RIKTsKKyAgICAgICAgICAgIGJvb2xlYW4gbmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGludCBvZmZzZXQ7CisKKyAgICAgICAgICAgIGlmIChpZC5jaGFyQXQocG9zLmdldEluZGV4KCkpID09ICctJykKKyAgICAgICAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpZC5jaGFyQXQocG9zLmdldEluZGV4KCkpICE9ICcrJykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHBvcy5zZXRJbmRleChwb3MuZ2V0SW5kZXgoKSArIDEpOworCisgICAgICAgICAgICAvLyBDcmVhdGUgTnVtYmVyRm9ybWF0IGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAgc3luY2hyb25pemVkIChUaW1lWm9uZS5jbGFzcykgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXJGb3JtYXQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXJGb3JtYXQgPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0LnNldFBhcnNlSW50ZWdlck9ubHkodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG51bWJlckZvcm1hdCkgeworICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIGVpdGhlciBoaDptbSwgaGhtbSwgb3IgaGgKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBwb3MuZ2V0SW5kZXgoKTsKKyAgICAgICAgICAgICAgICBOdW1iZXIgbiA9IG51bWJlckZvcm1hdC5wYXJzZShpZCwgcG9zKTsKKyAgICAgICAgICAgICAgICBpZiAobiA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBuLmludFZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAocG9zLmdldEluZGV4KCkgPCBpZC5sZW5ndGgoKSAmJgorICAgICAgICAgICAgICAgICAgICBpZC5jaGFyQXQocG9zLmdldEluZGV4KCkpID09ICc6JykgeworICAgICAgICAgICAgICAgICAgICAvLyBoaDptbQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKj0gNjA7CisgICAgICAgICAgICAgICAgICAgIHBvcy5zZXRJbmRleChwb3MuZ2V0SW5kZXgoKSArIDEpOworICAgICAgICAgICAgICAgICAgICBuID0gbnVtYmVyRm9ybWF0LnBhcnNlKGlkLCBwb3MpOworICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG4uaW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGhobW0gb3IgaGgKKworICAgICAgICAgICAgICAgICAgICAvLyBCZSBzdHJpY3QgYWJvdXQgaW50ZXJwcmV0aW5nIHNvbWV0aGluZyBhcyBoaDsgaXQgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICAvLyBhbiBvZmZzZXQgPCAzMCwgYW5kIGl0IG11c3QgYmUgb25lIG9yIHR3byBkaWdpdHMuIFRodXMKKyAgICAgICAgICAgICAgICAgICAgLy8gMDAxMCBpcyBpbnRlcnByZXRlZCBhcyAwMDoxMCwgYnV0IDEwIGlzIGludGVycHJldGVkIGFzCisgICAgICAgICAgICAgICAgICAgIC8vIDEwOjAwLgorICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMzAgJiYgKHBvcy5nZXRJbmRleCgpIC0gc3RhcnQpIDw9IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKj0gNjA7IC8vIGhoLCBmcm9tIDAwIHRvIDI5OyAzMCBpcyAwMDozMAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgJSAxMDAgKyBvZmZzZXQgLyAxMDAgKiA2MDsgLy8gaGhtbQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgb2Zmc2V0ID0gLW9mZnNldDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbXBsZVRpbWVab25lKG9mZnNldCAqIDYwMDAwLCBDVVNUT01fSUQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLy8gSW50ZXJuYWwgSW1wbGVtZW50YXRpb24gTm90ZXMgW0xJVV0KKyAgICAvLworICAgIC8vIFRpbWVab25lIGRhdGEgaXMgc3RvcmVkIGluIHR3byBwYXJ0cy4gIFRoZSBmaXJzdCBpcyBhbiBlbmNvZGluZyBvZiB0aGUKKyAgICAvLyBydWxlcyBmb3IgZWFjaCBUaW1lWm9uZS4gIEEgVGltZVpvbmUgcnVsZSBpbmNsdWRlcyB0aGUgb2Zmc2V0IG9mIGEgem9uZQorICAgIC8vIGluIG1pbGxpc2Vjb25kcyBmcm9tIEdNVCwgdGhlIHN0YXJ0aW5nIG1vbnRoIGFuZCBkYXkgZm9yIGRheWxpZ2h0IHNhdmluZ3MKKyAgICAvLyB0aW1lLCBpZiB0aGVyZSBpcyBhbnksIGFuZCB0aGUgZW5kaW5nIG1vbnRoIGFuZCBkYXkgZm9yIGRheWxpZ2h0IHNhdmluZ3MKKyAgICAvLyB0aW1lLiAgVGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgZGF5cyBhcmUgc3BlY2lmaWVkIGluIHRlcm1zIG9mIHRoZSBuLXRoCisgICAgLy8gZGF5IG9mIHRoZSB3ZWVrLCBmb3IgaW5zdGFuY2UsIHRoZSBmaXJzdCBTdW5kYXkgb3IgdGhlIGxhc3QgKCItMSItdGgpCisgICAgLy8gU3VuZGF5IG9mIHRoZSBtb250aC4gIFRoZSBydWxlcyBhcmUgc3RvcmVkIGFzIHN0YXRpY2FsbHktY29uc3RydWN0ZWQKKyAgICAvLyBTaW1wbGVUaW1lWm9uZSBvYmplY3RzIGluIHRoZSBUaW1lWm9uZSBjbGFzcy4KKyAgICAvLworICAgIC8vIEVhY2ggcnVsZSBoYXMgYSB1bmlxdWUgaW50ZXJuYWwgaWRlbnRpZmllciBzdHJpbmcgd2hpY2ggaXMgdXNlZCB0bworICAgIC8vIHNwZWNpZnkgaXQuICBUaGlzIGlkZW50aWZpZXIgc3RyaW5nIGlzIGFyYml0cmFyeSwgYW5kIGlzIG5vdCB0byBiZSBzaG93bgorICAgIC8vIHRvIHRoZSB1c2VyIC0tIGl0IGlzIGZvciBwcm9ncmFtbWF0aWMgdXNlIG9ubHkuICBJbiBvcmRlciB0byBpbnN0YW50aWF0ZQorICAgIC8vIGEgVGltZVpvbmUgb2JqZWN0LCB5b3UgcGFzcyBpdHMgaWRlbnRpZmllciBzdHJpbmcgdG8KKyAgICAvLyBUaW1lWm9uZS5nZXRUaW1lWm9uZSgpLiAgKFRoaXMgaWRlbnRpZmllciBpcyBhbHNvIHVzZWQgdG8gaW5kZXggdGhlCisgICAgLy8gbG9jYWxpemVkIHN0cmluZyBkYXRhLikKKyAgICAvLworICAgIC8vIFRoZSBzZWNvbmQgcGFydCBvZiB0aGUgZGF0YSBjb25zaXN0cyBvZiBsb2NhbGl6ZWQgc3RyaW5nIG5hbWVzIHVzZWQgYnkKKyAgICAvLyBEYXRlRm9ybWF0IHRvIGRlc2NyaWJlIHZhcmlvdXMgVGltZVpvbmVzLiAgQSBUaW1lWm9uZSBtYXkgaGF2ZSB1cCB0byBmb3VyCisgICAgLy8gbmFtZXM6IFRoZSBhYmJyZXZpYXRlZCBhbmQgbG9uZyBuYW1lIGZvciBzdGFuZGFyZCB0aW1lIGluIHRoYXQgem9uZSwgYW5kCisgICAgLy8gdGhlIGFiYnJldmlhdGVkIGFuZCBsb25nIG5hbWUgZm9yIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBpbiB0aGF0IHpvbmUuCisgICAgLy8gVGhlIGRhdGEgYWxzbyBpbmNsdWRlcyBhIHJlcHJlc2VudGF0aXZlIGNpdHkuICBGb3IgZXhhbXBsZSwgWyAiUFNUIiwKKyAgICAvLyAiUGFjaWZpYyBTdGFuZGFyZCBUaW1lIiwgIlBEVCIsICJQYWNpZmljIERheWxpZ2h0IFRpbWUiLCAiTG9zIEFuZ2VsZXMiIF0KKyAgICAvLyBtaWdodCBiZSBvbmUgc3VjaCBzZXQgb2Ygc3RyaW5nIG5hbWVzIGluIHRoZSBlbl9VUyBsb2NhbGUuICBUaGVzZSBzdHJpbmdzCisgICAgLy8gYXJlIGludGVuZGVkIHRvIGJlIHNob3duIHRvIHRoZSB1c2VyLiAgVGhlIHN0cmluZyBkYXRhIGlzIGluZGV4ZWQgaW4gdGhlCisgICAgLy8gc3lzdGVtIGJ5IGEgcGFpciAoU3RyaW5nIGlkLCBMb2NhbGUgbG9jYWxlKS4gIFRoZSBpZCBpcyB0aGUgdW5pcXVlIHN0cmluZworICAgIC8vIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlIGZvciB0aGUgZ2l2ZW4gVGltZVpvbmUgKGFzIHBhc3NlZCB0bworICAgIC8vIFRpbWVab25lLmdldFRpbWVab25lKCkpLiAgU3RyaW5nIG5hbWVzIGFyZSBzdG9yZWQgYXMgbG9jYWxpemVkIHJlc291cmNlCisgICAgLy8gZGF0YSAoaW4gamRrIDEuMiBhbmQgMS4zKSBvZiB0aGUgY2xhc3MgTG9jYWxlRGF0YT8/PyAgd2hlcmUgPz8/IGlzCisgICAgLy8gdGhlIExvY2FsZSBzcGVjaWZpZXIgKGUuZy4sIERhdGVGb3JtYXRab25lRGF0YV9lbl9VUykuICBUaGlzIGRhdGEgaXMgYQorICAgIC8vIHR3by1kaW1lbnNpb25hbCBhcnJheSBvZiBzdHJpbmdzIHdpdGggTiByb3dzIGFuZCA2IGNvbHVtbnMuICBUaGUgY29sdW1ucworICAgIC8vIGFyZSBpZCwgc2hvcnQgc3RhbmRhcmQgbmFtZSwgbG9uZyBzdGFuZGFyZCBuYW1lLCBzaG9ydCBkYXlsaWdodCBuYW1lLAorICAgIC8vIGxvbmcgZGF5bGlnaHQgbmFtZSwgcmVwcmVzZW50YXRpdmUgY2l0eSBuYW1lLgorICAgIC8vCisgICAgLy8gVGhlIG1hcHBpbmcgYmV0d2VlbiBydWxlcyAoU2ltcGxlVGltZVpvbmUgb2JqZWN0cykgYW5kIGxvY2FsaXplZCBzdHJpbmcKKyAgICAvLyBuYW1lcyAoRGF0ZUZvcm1hdFpvbmVEYXRhIG9iamVjdHMpIGlzIG9uZS10by1tYW55LiAgVGhhdCBpcywgdGhlcmUgd2lsbAorICAgIC8vIHNvbWV0aW1lcyBiZSBtb3JlIHRoYW4gb25lIGxvY2FsaXplZCBzdHJpbmcgbmFtZSBzZXRzIGFzc29jaWF0ZWQgd2l0aAorICAgIC8vIGVhY2ggcnVsZS4KKyAgICAvLworICAgIC8vIEVhY2ggbG9jYWxlIGNhbiBwb3RlbnRpYWxseSBoYXZlIGxvY2FsaXplZCBuYW1lIGRhdGEgZm9yIGFsbCB0aW1lIHpvbmVzLgorICAgIC8vIFNpbmNlIHdlIHN1cHBvcnQgYXBwcm94aW1hdGVseSA5MCB0aW1lIHpvbmVzIGFuZCBhcHByb3hpbWF0ZWx5IDUwCisgICAgLy8gbG9jYWxlcywgdGhlcmUgY2FuIGJlIG92ZXIgNDUwMCBzZXRzIG9mIGxvY2FsaXplZCBuYW1lcy4gIEluIHByYWN0aWNlLAorICAgIC8vIG9ubHkgYSBmcmFjdGlvbiBvZiB0aGVzZSBuYW1lcyBhcmUgcHJvdmlkZWQuICBJZiBhIHRpbWUgem9uZSBuZWVkcyB0byBiZQorICAgIC8vIGRpc3BsYXllZCB0byB0aGUgdXNlciBpbiBhIGdpdmVuIGxvY2FsZSwgYW5kIHRoZXJlIGlzIG5vIHN0cmluZyBkYXRhIGluCisgICAgLy8gdGhhdCBsb2NhbGUgZm9yIHRoYXQgdGltZSB6b25lLCB0aGVuIHRoZSBkZWZhdWx0IHJlcHJlc2VudGF0aW9uIHdpbGwgYmUKKyAgICAvLyBzaG93bi4gIFRoaXMgaXMgYSBzdHJpbmcgb2YgdGhlIGZvcm0gR01UK0hITU0gb3IgR01ULUhITU0sIHdoZXJlIEhITU0KKyAgICAvLyByZXByZXNlbnRzIHRoZSBvZmZzZXQgaW4gaG91cnMgYW5kIG1pbnV0ZXMgd2l0aCByZXNwZWN0IHRvIEdNVC4gIFRoaXMKKyAgICAvLyBmb3JtYXQgaXMgdXNlZCBiZWNhdXNlIGl0IGlzIHJlY29nbml6ZWQgaW4gYWxsIGxvY2FsZXMuICBJbiBvcmRlciB0byBtYWtlCisgICAgLy8gdGhpcyBtZWNoYW5pc20gdG8gd29yaywgdGhlIHJvb3QgcmVzb3VyY2UgZGF0YSAoaW4gdGhlIGNsYXNzCisgICAgLy8gRGF0ZUZvcm1hdFpvbmVEYXRhKSBpcyBsZWZ0IGVtcHR5LgorICAgIC8vCisgICAgLy8gVGhlIGN1cnJlbnQgZGVmYXVsdCBUaW1lWm9uZSBpcyBkZXRlcm1pbmVkIHZpYSB0aGUgc3lzdGVtIHByb3BlcnR5CisgICAgLy8gdXNlci50aW1lem9uZS4gIFRoaXMgaXMgc2V0IGJ5IHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgbmF0aXZlIGNvZGUgdG8KKyAgICAvLyBhIHRocmVlLWxldHRlciBhYmJyZXZpYXRpb24uICBXZSBpbnRlcnByZXQgdGhlc2UgaW50byBvdXIgb3duIGludGVybmFsCisgICAgLy8gSURzIHVzaW5nIGEgbG9va3VwIHRhYmxlLgorfQorCisvL2VvZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vaWN1L3V0aWwvVGltZVpvbmVEYXRhLmphdmEgYi9zcmMvY29tL2libS9pY3UvdXRpbC9UaW1lWm9uZURhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNGMyNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvVGltZVpvbmVEYXRhLmphdmEKQEAgLTAsMCArMSwxMjIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9BdHRpYy9UaW1lWm9uZURhdGEuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzEyLzAzIDIzOjE0OjUxICQKKyAqICRSZXZpc2lvbjogMS43ICQKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS51dGlsOworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CitpbXBvcnQgY29tLmlibS5pY3UuaW1wbC5VdGlsaXR5OworCisvKioKKyAqIEludGVybmFsIGNsYXNzIHRoYXQgZW5jYXBzdWxhdGVzIGRhdGEgYWJvdXQgdGhlIHN5c3RlbSB0aW1lIHpvbmVzLgorICogVGhpcyBpbmNsdWRlcyB0aGUgbmFtZXMgb2YgYWxsIHpvbmVzLCB0aGVpciByYXcgb2Zmc2V0cywgdGhlaXIKKyAqIHJ1bGVzIChmb3Igem9uZXMgb2JzZXJ2aW5nIERTVCksIGFuZCBpbmRleCB0YWJsZXMgdGhhdCBncm91cAorICogdG9nZXRoZXIgem9uZXMgd2l0aCB0aGUgc2FtZSByYXcgb2Zmc2V0LCBhcyB3ZWxsIGFzIHpvbmVzIHRoYXQgYXJlCisgKiBlcXVpdmFsZW50IChzYW1lIHJhdyBvZmZzZXQgYW5kIHJ1bGVzKS4KKyAqIAorICogPHA+VGhpcyBjbGFzcyBjb250YWlucyB0d28gcGFydHM6IEEgbmFycm93IEFQSSBmb3IgaW5zdGFudGlhdGluZworICogdGhlIHN5c3RlbSB6b25lIG9iamVjdHMgYW5kIGZvciBvYnRhaW5pbmcgbWV0YWluZm9ybWF0aW9uCisgKiAoYXZhaWxhYmxlIHpvbmUgbGlzdHMgYW5kIGVxdWl2YWxlbmN5IGdyb3VwIGxpc3RzKSwgYW5kIGJsb2NrcyBvZgorICogY29tcHJlc3NlZCBkYXRhIHRoYXQgdGFrZSB0aGUgZm9ybSBvZiBzdGF0aWMgc3RyaW5ncyBvciBzdHJpbmcKKyAqIGFycmF5cy4gIFRoZSBjb21wcmVzc2VkIGRhdGEgaXMgZ2VuZXJhdGVkIHNvdXJjZSBjb2RlIHRoYXQgY2Fubm90CisgKiBiZSBoYW5kIGVkaXRlZC4gIEl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgc3RhbmRhcmQgVU5JWCB6b25lIGRhdGEgYXQKKyAqIGZ0cDovL2Vsc2llLm5jaS5uaWguZ292L3B1YiBhbmQgaXMgcHJvY2Vzc2VkIGJ5IHRoZSB0b29sIGdlbnR6CisgKiBsb2NhdGVkIGF0IGljdS9zb3VyY2UvdG9vbHMvZ2VudHouICBXaGVuIHRoZSBVTklYIHpvbmUgZGF0YQorICogY2hhbmdlcywgdGhlIGdlbnR6IHRvb2wgbXVzdCBiZSBydW4gdG8gZ2VuZXJhdGUgdGhlIG5ldyBkYXRhIGFuZAorICogdGhlIGNvbXByZXNzZWQgZGF0YSBibG9ja3MgaW4gdGhpcyBmaWxlIGFuZCB0aGUgbmV3IGJsb2NrcyBtdXN0IGJlCisgKiBwYXN0ZWQgaW4uICBGb3Igc3RlcC1ieS1zdGVwIGluc3RydWN0aW9ucywgc2VlCisgKiBpY3Uvc291cmNlL3Rvb2xzL2dlbnR6L3JlYWRtZS50eHQuCisgKgorICogQGF1dGhvciBBbGFuIExpdQorICovCitjbGFzcyBUaW1lWm9uZURhdGEgeworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGFuZCByZXR1cm4gdGhlIGdpdmVuIHN5c3RlbSBUaW1lWm9uZSwgb3IgcmV0dXJuIG51bGwgaWYKKyAgICAgKiB0aGUgZ2l2ZW4gSUQgZG9lcyBub3QgcmVmZXIgdG8gYSBzeXN0ZW0gVGltZVpvbmUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBUaW1lWm9uZSBnZXQoU3RyaW5nIElEKSB7CisgICAgICAgIGludCBpID0gbG9va3VwKElEKTsKKyAgICAgICAgcmV0dXJuIChpPDApID8gbnVsbCA6IG5ldyBTaW1wbGVUaW1lWm9uZShJRCwgREFUQSwgaSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgbmV3IFN0cmluZyBhcnJheSBjb250YWluaW5nIGFsbCBzeXN0ZW0gVGltZVpvbmUgSURzLgorICAgICAqIFRoZXNlIElEcyAoYW5kIG9ubHkgdGhlc2UgSURzKSBtYXkgYmUgcGFzc2VkIHRvCisgICAgICogPGNvZGU+Z2V0KCk8L2NvZGU+IHRvIGNvbnN0cnVjdCB0aGUgY29ycmVzcG9uZGluZyBUaW1lWm9uZQorICAgICAqIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGFsbCBzeXN0ZW0gVGltZVpvbmUgSURzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBdmFpbGFibGVJRHMoKSB7CisgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbSURTLmxlbmd0aF07CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoSURTLCAwLCByZXN1bHQsIDAsIElEUy5sZW5ndGgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIG5ldyBTdHJpbmcgYXJyYXkgY29udGFpbmluZyBhbGwgc3lzdGVtIFRpbWVab25lIElEcworICAgICAqIHdpdGggdGhlIGdpdmVuIHJhdyBvZmZzZXQgZnJvbSBHTVQuICBUaGVzZSBJRHMgbWF5IGJlIHBhc3NlZCB0bworICAgICAqIDxjb2RlPmdldCgpPC9jb2RlPiB0byBjb25zdHJ1Y3QgdGhlIGNvcnJlc3BvbmRpbmcgVGltZVpvbmUKKyAgICAgKiBvYmplY3QuCisgICAgICogQHBhcmFtIHJhd09mZnNldCB0aGUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyBmcm9tIEdNVAorICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgSURzIGZvciBzeXN0ZW0gVGltZVpvbmVzIHdpdGggdGhlIGdpdmVuCisgICAgICogcmF3IG9mZnNldC4gIElmIHRoZXJlIGFyZSBub25lLCByZXR1cm4gYSB6ZXJvLWxlbmd0aCBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUlEcyhpbnQgcmF3T2Zmc2V0KSB7CisgICAgICAgIC8vIERvIGEgbGluZWFyIHNlYXJjaDsgdGhlcmUgYXJlIDwgMjAwIGVudHJpZXMKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPElOREVYX0JZX09GRlNFVC5sZW5ndGg7KSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gSU5ERVhfQllfT0ZGU0VUW2ldICogMTAwMDsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiByYXdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gcmF3T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgLy8gRm91bmQgb3VyIGRlc2lyZWQgb2Zmc2V0CisgICAgICAgICAgICAgICAgaW50IG4gPSBJTkRFWF9CWV9PRkZTRVRbaSsyXTsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSByZXN1bHQgPSBuZXcgU3RyaW5nW25dOworICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxuOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gSURTW0lOREVYX0JZX09GRlNFVFtpKzMral1dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeQorICAgICAgICAgICAgaSArPSBJTkRFWF9CWV9PRkZTRVRbaSsyXSArIDM7CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFpbGVkIHRvIGZpbmQgYW55OyByZXR1cm4gZW1wdHkgYXJyYXkKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgfQorIAorICAgIC8qKgorICAgICAqIFJldHVybiBhIG5ldyBTdHJpbmcgYXJyYXkgY29udGFpbmluZyBhbGwgc3lzdGVtIFRpbWVab25lIElEcworICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY291bnRyeS4gIFRoZXNlIElEcyBtYXkgYmUgcGFzc2VkIHRvCisgICAgICogPGNvZGU+Z2V0KCk8L2NvZGU+IHRvIGNvbnN0cnVjdCB0aGUgY29ycmVzcG9uZGluZyBUaW1lWm9uZQorICAgICAqIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gYSB0d28tbGV0dGVyIElTTyAzMTY2IGNvdW50cnkgY29kZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4KKyAgICAgKiB0byByZXR1cm4gem9uZXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgY291bnRyeQorICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgSURzIGZvciBzeXN0ZW0gVGltZVpvbmVzIHdpdGggdGhlIGdpdmVuCisgICAgICogcmF3IG9mZnNldC4gIElmIHRoZXJlIGFyZSBub25lLCByZXR1cm4gYSB6ZXJvLWxlbmd0aCBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUlEcyhTdHJpbmcgY291bnRyeUNvZGUpIHsKKyAgICAgICAgLy8gQ29uc3RydWN0IG91ciBrZXk7IHRoaXMgaXMgYW4gaW50ZWdlciBvZiB0aGUgZm9ybQorICAgICAgICAvLyAzMipuMSArIG4wLCB3aGVyZSAwPD1uPD0yNS4KKyAgICAgICAgaW50IGNvdW50cnlIYXNoID0gMDsKKyAgICAgICAgaWYgKGNvdW50cnlDb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNvdW50cnlIYXNoID0KKyAgICAgICAgICAgICAgICAoKENoYXJhY3Rlci50b1VwcGVyQ2FzZShjb3VudHJ5Q29kZS5jaGFyQXQoMCkpIC0gJ0EnKSA8PCA1KSB8CisgICAgICAgICAgICAgICAgKENoYXJhY3Rlci50b1VwcGVyQ2FzZShjb3VudHJ5Q29kZS5jaGFyQXQoMSkpIC0gJ0EnKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvIGEgbGluZWFyIHNlYXJjaDsgdGhlcmUgYXJlIH4gMjUwIGVudHJpZXMKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPElOREVYX0JZX0NPVU5UUlkubGVuZ3RoOyApIHsKKyAgICAgICAgICAgIGlmIChjb3VudHJ5SGFzaCA9PSBJTkRFWF9CWV9DT1VOVFJZW2ldKSB7CisgICAgICAgICAgICAgICAgLy8gRm91bmQgdGhlIGRlc2lyZWQgY291bnRyeQorICAgICAgICAgICAgICAgIGludCBuID0gSU5ERVhfQllfQ09VTlRSWVtpKzFdOworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbbl07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPG47ICsraikgeworICAgICAgICAgICAgICAgICAgICByZXN1bHRbal0gPSBJRFNbSU5ERVhfQllfQ09VTlRSWVtpKzIral1dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpICs9IElOREVYX0JZX0NPVU5UUllbaSsxXSArIDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFpbGVkIHRvIGZpbmQgYW55OyByZXR1cm4gZW1wdHkgYXJyYXkKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIElEcyBpbiB0aGUgZXF1aXZhbGVuY3kgZ3JvdXAgdGhhdAorICAgICAqIGluY2x1ZGVzIHRoZSBnaXZlbiBJRC4gIEFuIGVxdWl2YWxlbmN5IGdyb3VwIGNvbnRhaW5zIHpvbmVzCisgICAgICogdGhhdCBoYXZlIHRoZSBzYW1lIEdNVCBvZmZzZXQgYW5kIHJ1bGVzLgorICAgICAqCisgICAgICogPHA+VGhlIHJldHVybmVkIGNvdW50IGluY2x1ZGVzIHRoZSBnaXZlbiBJRDsgaXQgaXMgYWx3YXlzID49IDEKKyAgICAgKiBmb3IgdmFsaWQgSURzLiAgVGhlIGdpdmVuIElEIG11c3QgYmUgYSBzeXN0ZW0gdGltZSB6b25lLiAgSWYgaXQKKyAgICAgKiBpcyBub3QsIHJldHVybnMgemVyby4KKyAgICAgKiBAcGFyYW0gSUQgYSBzeXN0ZW0gdGltZSB6b25lIElECisgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHpvbmVzIGluIHRoZSBlcXVpdmFsZW5jeSBncm91cCBjb250YWluaW5nCisgICAgICogJ0lEJywgb3IgemVybyBpZiAnSUQnIGlzIG5vdCBhIHZhbGlkIHN5c3RlbSBJRAorICAgICAqIEBzZWUgI2dldEVxdWl2YWxlbnRJRAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvdW50RXF1aXZhbGVudElEcyhTdHJpbmcgSUQpIHsKKyAgICAgICAgaW50IGkgPSBsb29rdXAoSUQpOworICAgICAgICByZXR1cm4gKGk8MCkgPyAwIDogREFUQVtpICsgKChEQVRBW2ldPT0wKT8yOjEzKV07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBJRCBpbiB0aGUgZXF1aXZhbGVuY3kgZ3JvdXAgdGhhdAorICAgICAqIGluY2x1ZGVzIHRoZSBnaXZlbiBJRC4gIEFuIGVxdWl2YWxlbmN5IGdyb3VwIGNvbnRhaW5zIHpvbmVzCisgICAgICogdGhhdCBoYXZlIHRoZSBzYW1lIEdNVCBvZmZzZXQgYW5kIHJ1bGVzLgorICAgICAqCisgICAgICogPHA+VGhlIGdpdmVuIGluZGV4IG11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLm4tMSwgd2hlcmUgbiBpcyB0aGUKKyAgICAgKiB2YWx1ZSByZXR1cm5lZCBieSA8Y29kZT5jb3VudEVxdWl2YWxlbnRJRHMoaWQpPC9jb2RlPi4gIEZvcgorICAgICAqIHNvbWUgdmFsdWUgb2YgJ2luZGV4JywgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgZXF1YWwgdG8gdGhlCisgICAgICogZ2l2ZW4gaWQuICBJZiB0aGUgZ2l2ZW4gaWQgaXMgbm90IGEgdmFsaWQgc3lzdGVtIHRpbWUgem9uZSwgb3IKKyAgICAgKiBpZiAnaW5kZXgnIGlzIG91dCBvZiByYW5nZSwgdGhlbiByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgKiBAcGFyYW0gSUQgYSBzeXN0ZW0gdGltZSB6b25lIElECisgICAgICogQHBhcmFtIGluZGV4IGEgdmFsdWUgZnJvbSAwIHRvIG4tMSwgd2hlcmUgbiBpcyB0aGUgdmFsdWUKKyAgICAgKiByZXR1cm5lZCBieSA8Y29kZT5jb3VudEVxdWl2YWxlbnRJRHMoaWQpPC9jb2RlPgorICAgICAqIEByZXR1cm4gdGhlIElEIG9mIHRoZSBpbmRleC10aCB6b25lIGluIHRoZSBlcXVpdmFsZW5jeSBncm91cAorICAgICAqIGNvbnRhaW5pbmcgJ0lEJywgb3IgYW4gZW1wdHkgc3RyaW5nIGlmICdJRCcgaXMgbm90IGEgdmFsaWQKKyAgICAgKiBzeXN0ZW0gSUQgb3IgJ2luZGV4JyBpcyBvdXQgb2YgcmFuZ2UKKyAgICAgKiBAc2VlICNjb3VudEVxdWl2YWxlbnRJRHMKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFcXVpdmFsZW50SUQoU3RyaW5nIElELCBpbnQgaW5kZXgpIHsKKyAgICAgICAgaW50IGkgPSBsb29rdXAoSUQpOworICAgICAgICBpZiAoaTwwKSB7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgaW50IGogPSBpICsgKChEQVRBW2ldPT0wKT8yOjEzKTsKKyAgICAgICAgcmV0dXJuIChpbmRleDxEQVRBW2pdKSA/IElEU1tEQVRBW2oraW5kZXgrMV1dIDogIiI7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYW4gSUQsIHJldHVybiB0aGUgZXF1aXZhbGVuY3kgZ3JvdXAgaW5kZXggKGluZGV4IG9mCisgICAgICogREFUQVtdIGZvciB0aGUgc3RhcnQgb2YgdGhlIGdyb3VwJ3MgZGF0YSkgb3IgLTEgaWYgbm90IGZvdW5kLgorICAgICAqLworICAgIHN0YXRpYyBpbnQgbG9va3VwKFN0cmluZyBJRCkgeworICAgICAgICBJbnRlZ2VyIGkgPSAoSW50ZWdlcikgSU5ERVhfQllfTkFNRS5nZXQoSUQpOworICAgICAgICByZXR1cm4gKGkgPT0gbnVsbCkgPyAtMSA6IGkuaW50VmFsdWUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFcXVpdmFsZW5jeSBncm91cCBkYXRhIGluIGludFtdIGZvcm0uICBUaGlzIGlzIHJlcHJlc2VudGVkIGFzIGEKKyAgICAgKiBzaW5nbGUgZmxhdCBhcnJheSBvZiBpbnRzIGZvciBjb21wYWN0bmVzcy4gIEVhY2ggZXF1aXZhbGVuY3kKKyAgICAgKiBncm91cCBpcyByZXByZXNlbnRlZCBieSBhIHNlcXVlbmNlIG9mIGludHMgb2YgdmFyaWFibGUgbGVuZ3RoLgorICAgICAqIEdyb3VwcyBhcmUgaWRlbnRpZmllZCBieSBhIHNpbmdsZSBpbnRlZ2VyLCB0aGUgb2Zmc2V0IHRvIHRoZQorICAgICAqIHN0YXJ0IG9mIHRoZSBncm91cC4gIElmIGkgaXMgdGhlIG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlCisgICAgICogZ3JvdXAsIHRoZW4gdGhlIGxheW91dCBvZiBkYXRhIGlzOgorICAgICAqCisgICAgICogT2Zmc2V0ICBEYXRhICAgICAgIE5vdGVzCisgICAgICogaSswICAgICBpc0RTVCAgICAgIDAgZm9yIHN0YW5kYXJkIHpvbmVzLCAxIGZvciBEU1QKKyAgICAgKiBpKzEgICAgIHJhd09mZnNldCAgaW4gc2Vjb25kcyBmcm9tIEdNVAorICAgICAqIDxEU1Qgem9uZXMgY29udGFpbiBhZGRpdGlvbmFsIGVudHJpZXMgaGVyZTsgc2VlIGJlbG93PgorICAgICAqIGorMCAgICAgY291bnQgICAgICBudW1iZXIgb2YgSURzIHRvIGZvbGxvdywgPj0gMQorICAgICAqIGorMS4uayAgSURzICAgICAgICBpbmRpY2VzIGludG8gSURTW10gYXJyYXkKKyAgICAgKiBqK2srMSAgIChuZXh0IGVudHJ5IHN0YXJ0KQorICAgICAqCisgICAgICogRm9yIHN0YW5kYXJkIHpvbmVzLCBqID0gaSsyLiAgRm9yIERTVCB6b25lcywgaiA9IGkrMTMKKyAgICAgKiBhbmQgdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFwcGx5OgorICAgICAqCisgICAgICogT2Zmc2V0ICBEYXRhICAgICAgIE5vdGVzCisgICAgICogaSsyICAgICBzdGFydE1vbnRoIDAtYmFzZWQKKyAgICAgKiBpKzMgICAgIHN0YXJ0RG93aW0KKyAgICAgKiBpKzQgICAgIHN0YXJ0RG93ICAKKyAgICAgKiBpKzUgICAgIHN0YXJ0VGltZSAgaW4gbWludXRlcworICAgICAqIGkrNiAgICAgc3RhcnRNb2RlICB3L3MvdSBlbmNvZGVkIGFzIDAvMS8yCisgICAgICogaSs3ICAgICBlbmRNb250aCAgIDAtYmFzZWQKKyAgICAgKiBpKzggICAgIGVuZERvd2ltCisgICAgICogaSs5ICAgICBlbmREb3cgIAorICAgICAqIGkrMTAgICAgZW5kVGltZSAgICBpbiBtaW51dGVzCisgICAgICogaSsxMSAgICBlbmRNb2RlICAgIHcvcy91IGVuY29kZWQgYXMgMC8xLzIKKyAgICAgKiBpKzEyICAgICBkc3RTYXZpbmdzIGluIG1pbnV0ZXMKKyAgICAgKgorICAgICAqIEEgc3RhbmRhcmQgem9uZSBlbnRyeSBpcyAzK24gaW50cyBsb25nLCBhbmQgYSBEU1Qgem9uZSBlbnRyeSBpcworICAgICAqIDE0K24gaW50cyBsb25nLCB3aGVyZSBuIGlzIGNvdW50IG9mIElEcyB0byBmb2xsb3cgKHRoZSB2YWx1ZSBhdAorICAgICAqIGorMCkuCisgICAgICovCisgICAgc3RhdGljIGludFtdIERBVEE7CisKKyAgICAvKioKKyAgICAgKiBNYXAgZnJvbSBUaW1lWm9uZSBJRCB0byBlcXVpdmFsZW5jeSBncm91cCBvZmZzZXQuICBUaGlzIGlzIGFuCisgICAgICogaW5kZXggaW50byBEQVRBLiAgVGhlIGVxdWl2YWxlbmN5IGdyb3VwIGRhdGEgc3RhcnRzIGF0IERBVEFbaV0KKyAgICAgKiBhbmQgb2NjdXBpZXMgdGhlIG0gaW50cyB0aGF0IGZvbGxvdywgd2hlcmUgdGhlIHZhbHVlIG9mIG0gZGVwZW5kcworICAgICAqIG9uIHdoZXRoZXIgdGhlIHpvbmUgaXMgc3RhbmRhcmQgb3IgRFNUIGFuZCBob3cgbWFueSBJRHMgYXJlIGluCisgICAgICogdGhlIGdyb3VwLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBIYXNodGFibGUgSU5ERVhfQllfTkFNRSA9IG5ldyBIYXNodGFibGUoKTsKKworICAgIC8qKgorICAgICAqIEluZGV4IG9mIHJhd09mZnNldCB0byBsaXN0IG9mIHpvbmVzLiAgRW50cmllcyBhcmUgaW4gb3JkZXIgb2YgCisgICAgICogYXNjZW5kaW5nIHJhd09mZnNldC4gIEZvcm1hdDoKKyAgICAgKgorICAgICAqIE9mZnNldCAgRGF0YSAgICAgICBOb3RlcworICAgICAqIGkrMCAgICAgcmF3T2Zmc2V0ICBpbiBtaWxsaXNlY29uZHMgZnJvbSBHTVQKKyAgICAgKiBpKzEgICAgIGRlZmF1bHQgICAgZGVmYXVsdCB6b25lIGZvciB0aGlzIG9mZnNldAorICAgICAqIGkrMiAgICAgY291bnQgICAgICBudW1iZXIgb2YgSURzIHRvIGZvbGxvdworICAgICAqIGkrMy4uaiAgSURzICAgICAgICBpbmRpY2VzIGludG8gSURTCisgICAgICogaStqKzEgICAobmV4dCBlbnRyeSBzdGFydCkKKyAgICAgKgorICAgICAqIElmIHRoZSBudW1iZXIgb2YgZXF1aXZhbGVuY3kgZ3JvdXBzIGlzIG4sIHRoZW4gaj1uKzIuCisgICAgICoKKyAgICAgKiBFcXVpdmFsZW5jeSBncm91cCBJRHMgYXJlIGluZGljZXMgaW4gREFUQSB0byB0aGUgc3RhcnQgb2YgZWFjaAorICAgICAqIGVxdWl2YWxlbmN5IGdyb3VwLgorICAgICAqLworICAgIHN0YXRpYyBpbnRbXSBJTkRFWF9CWV9PRkZTRVQ7CisKKyAgICAvKioKKyAgICAgKiBJbmRleCBieSBjb3VudHJ5IHRvIGxpc3Qgb2Ygem9uZXMuICBFbnRyaWVzIGFyZSBpbiBvcmRlciBvZiAKKyAgICAgKiBhc2NlbmRpbmcgY291bnRyeSBjb2RlLiAgRm9ybWF0OgorICAgICAqCisgICAgICogT2Zmc2V0ICBEYXRhICAgICAgIE5vdGVzCisgICAgICogaSswICAgICBjb3VudHJ5ICAgIGFzIGFuIGludGVnZXIgMzJuMSArIG4wOyBzZWUgYmVsb3cKKyAgICAgKiBpKzEgICAgIGNvdW50ICAgICAgbnVtYmVyIG9mIElEcyB0byBmb2xsb3cKKyAgICAgKiBpKzIuLmogIElEcyAgICAgICAgaW5kaWNlcyBpbnRvIElEU1tdCisgICAgICoKKyAgICAgKiBJZiB0aGUgbnVtYmVyIG9mIHpvbmVzIGlzIG4sIHRoZW4gaj1uKzEuCisgICAgICoKKyAgICAgKiBUaGUgZmlyc3QgaW50ZWdlciBpbiBlYWNoIGVudHJ5IGlzIHRoZSBjb3VudHJ5IGNvZGUgYXMgYW4gaW50ZWdlcgorICAgICAqIGZyb20gMC4uKDI2LTEpKjMyKygyNi0xKS4gIFRoaXMgaXMgY29tcHV0ZWQgYXMgZm9sbG93czogIEEgdHdvCisgICAgICogbGV0dGVyIGNvdW50cnkgY29kZSBYWSBpcyBjb252ZXJ0ZWQgdG8gKChYLSdBJyk8PDUpIHwgKFktJ0EnKS4KKyAgICAgKiBUaGUgc3BlY2lhbCB2YWx1ZSAwIGluZGljYXRlcyBubyBhc3NpZ25lZCBjb3VudHJ5LiAgVGhpcyBhbHNvCisgICAgICogbWFwcyB0byB0aGUgY291bnRyeSBjb2RlICdBQScgYnV0IGN1cnJlbnRseSB0aGlzIGlzIG5vdCBhIHZhbGlkCisgICAgICogY291bnRyeSBjb2RlLgorICAgICAqCisgICAgICogWm9uZSBJRCB2YWx1ZXMgYXJlIGluZGljZXMgaW50byBJRFNbXS4KKyAgICAgKi8KKyAgICBzdGF0aWMgaW50W10gSU5ERVhfQllfQ09VTlRSWTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEJFR0lOIEdFTkVSQVRFRCBTT1VSQ0UgQ09ERQorICAgIC8vIERhdGU6IFR1ZSBEZWMgMDMgMTU6MTA6MzUgUFNUIDIwMDIKKyAgICAvLyBWZXJzaW9uOiB0emRhdGEyMDAyZCBmcm9tIGZ0cDovL2Vsc2llLm5jaS5uaWguZ292L3B1YgorICAgIC8vIFRvb2w6IGljdS9zb3VyY2UvdG9vbHMvZ2VudHoKKyAgICAvLyBTZWU6IGljdS9zb3VyY2UvdG9vbHMvZ2VudHovcmVhZG1lLnR4dAorICAgIC8vIERPIE5PVCBFRElUIFRISVMgU0VDVElPTgorCisgICAgLyoqCisgICAgICogQXJyYXkgb2YgSURzIGluIGxleGljb2dyYXBoaWMgb3JkZXIuICBUaGUgSU5ERVhfQllfT0ZGU0VUIGFuZCBEQVRBCisgICAgICogYXJyYXlzIHJlZmVyIHRvIHpvbmVzIHVzaW5nIGluZGljZXMgaW50byB0aGlzIGFycmF5LiAgVG8gbWFwIGZyb20gSUQKKyAgICAgKiB0byBlcXVpdmFsZW5jeSBncm91cCwgdXNlIHRoZSBJTkRFWF9CWV9OQU1FIEhhc2h0YWJsZS4KKyAgICAgKiA+PiBHRU5FUkFURUQgREFUQTogRE8gTk9UIEVESVQgPDwKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nW10gSURTID0geworICAgICAgICAiQUNUIiwKKyAgICAgICAgIkFFVCIsCisgICAgICAgICJBR1QiLAorICAgICAgICAiQVJUIiwKKyAgICAgICAgIkFTVCIsCisgICAgICAgICJBZnJpY2EvQWJpZGphbiIsCisgICAgICAgICJBZnJpY2EvQWNjcmEiLAorICAgICAgICAiQWZyaWNhL0FkZGlzX0FiYWJhIiwKKyAgICAgICAgIkFmcmljYS9BbGdpZXJzIiwKKyAgICAgICAgIkFmcmljYS9Bc21lcmEiLAorICAgICAgICAiQWZyaWNhL0JhbWFrbyIsCisgICAgICAgICJBZnJpY2EvQmFuZ3VpIiwKKyAgICAgICAgIkFmcmljYS9CYW5qdWwiLAorICAgICAgICAiQWZyaWNhL0Jpc3NhdSIsCisgICAgICAgICJBZnJpY2EvQmxhbnR5cmUiLAorICAgICAgICAiQWZyaWNhL0JyYXp6YXZpbGxlIiwKKyAgICAgICAgIkFmcmljYS9CdWp1bWJ1cmEiLAorICAgICAgICAiQWZyaWNhL0NhaXJvIiwKKyAgICAgICAgIkFmcmljYS9DYXNhYmxhbmNhIiwKKyAgICAgICAgIkFmcmljYS9DZXV0YSIsCisgICAgICAgICJBZnJpY2EvQ29uYWtyeSIsCisgICAgICAgICJBZnJpY2EvRGFrYXIiLAorICAgICAgICAiQWZyaWNhL0Rhcl9lc19TYWxhYW0iLAorICAgICAgICAiQWZyaWNhL0RqaWJvdXRpIiwKKyAgICAgICAgIkFmcmljYS9Eb3VhbGEiLAorICAgICAgICAiQWZyaWNhL0VsX0FhaXVuIiwKKyAgICAgICAgIkFmcmljYS9GcmVldG93biIsCisgICAgICAgICJBZnJpY2EvR2Fib3JvbmUiLAorICAgICAgICAiQWZyaWNhL0hhcmFyZSIsCisgICAgICAgICJBZnJpY2EvSm9oYW5uZXNidXJnIiwKKyAgICAgICAgIkFmcmljYS9LYW1wYWxhIiwKKyAgICAgICAgIkFmcmljYS9LaGFydG91bSIsCisgICAgICAgICJBZnJpY2EvS2lnYWxpIiwKKyAgICAgICAgIkFmcmljYS9LaW5zaGFzYSIsCisgICAgICAgICJBZnJpY2EvTGFnb3MiLAorICAgICAgICAiQWZyaWNhL0xpYnJldmlsbGUiLAorICAgICAgICAiQWZyaWNhL0xvbWUiLAorICAgICAgICAiQWZyaWNhL0x1YW5kYSIsCisgICAgICAgICJBZnJpY2EvTHVidW1iYXNoaSIsCisgICAgICAgICJBZnJpY2EvTHVzYWthIiwKKyAgICAgICAgIkFmcmljYS9NYWxhYm8iLAorICAgICAgICAiQWZyaWNhL01hcHV0byIsCisgICAgICAgICJBZnJpY2EvTWFzZXJ1IiwKKyAgICAgICAgIkFmcmljYS9NYmFiYW5lIiwKKyAgICAgICAgIkFmcmljYS9Nb2dhZGlzaHUiLAorICAgICAgICAiQWZyaWNhL01vbnJvdmlhIiwKKyAgICAgICAgIkFmcmljYS9OYWlyb2JpIiwKKyAgICAgICAgIkFmcmljYS9OZGphbWVuYSIsCisgICAgICAgICJBZnJpY2EvTmlhbWV5IiwKKyAgICAgICAgIkFmcmljYS9Ob3Vha2Nob3R0IiwKKyAgICAgICAgIkFmcmljYS9PdWFnYWRvdWdvdSIsCisgICAgICAgICJBZnJpY2EvUG9ydG8tTm92byIsCisgICAgICAgICJBZnJpY2EvU2FvX1RvbWUiLAorICAgICAgICAiQWZyaWNhL1RpbWJ1a3R1IiwKKyAgICAgICAgIkFmcmljYS9Ucmlwb2xpIiwKKyAgICAgICAgIkFmcmljYS9UdW5pcyIsCisgICAgICAgICJBZnJpY2EvV2luZGhvZWsiLAorICAgICAgICAiQW1lcmljYS9BZGFrIiwKKyAgICAgICAgIkFtZXJpY2EvQW5jaG9yYWdlIiwKKyAgICAgICAgIkFtZXJpY2EvQW5ndWlsbGEiLAorICAgICAgICAiQW1lcmljYS9BbnRpZ3VhIiwKKyAgICAgICAgIkFtZXJpY2EvQXJhZ3VhaW5hIiwKKyAgICAgICAgIkFtZXJpY2EvQXJ1YmEiLAorICAgICAgICAiQW1lcmljYS9Bc3VuY2lvbiIsCisgICAgICAgICJBbWVyaWNhL0JhcmJhZG9zIiwKKyAgICAgICAgIkFtZXJpY2EvQmVsZW0iLAorICAgICAgICAiQW1lcmljYS9CZWxpemUiLAorICAgICAgICAiQW1lcmljYS9Cb2FfVmlzdGEiLAorICAgICAgICAiQW1lcmljYS9Cb2dvdGEiLAorICAgICAgICAiQW1lcmljYS9Cb2lzZSIsCisgICAgICAgICJBbWVyaWNhL0J1ZW5vc19BaXJlcyIsCisgICAgICAgICJBbWVyaWNhL0NhbWJyaWRnZV9CYXkiLAorICAgICAgICAiQW1lcmljYS9DYW5jdW4iLAorICAgICAgICAiQW1lcmljYS9DYXJhY2FzIiwKKyAgICAgICAgIkFtZXJpY2EvQ2F0YW1hcmNhIiwKKyAgICAgICAgIkFtZXJpY2EvQ2F5ZW5uZSIsCisgICAgICAgICJBbWVyaWNhL0NheW1hbiIsCisgICAgICAgICJBbWVyaWNhL0NoaWNhZ28iLAorICAgICAgICAiQW1lcmljYS9DaGlodWFodWEiLAorICAgICAgICAiQW1lcmljYS9Db3Jkb2JhIiwKKyAgICAgICAgIkFtZXJpY2EvQ29zdGFfUmljYSIsCisgICAgICAgICJBbWVyaWNhL0N1aWFiYSIsCisgICAgICAgICJBbWVyaWNhL0N1cmFjYW8iLAorICAgICAgICAiQW1lcmljYS9EYW5tYXJrc2hhdm4iLAorICAgICAgICAiQW1lcmljYS9EYXdzb24iLAorICAgICAgICAiQW1lcmljYS9EYXdzb25fQ3JlZWsiLAorICAgICAgICAiQW1lcmljYS9EZW52ZXIiLAorICAgICAgICAiQW1lcmljYS9EZXRyb2l0IiwKKyAgICAgICAgIkFtZXJpY2EvRG9taW5pY2EiLAorICAgICAgICAiQW1lcmljYS9FZG1vbnRvbiIsCisgICAgICAgICJBbWVyaWNhL0VpcnVuZXBlIiwKKyAgICAgICAgIkFtZXJpY2EvRWxfU2FsdmFkb3IiLAorICAgICAgICAiQW1lcmljYS9Gb3J0YWxlemEiLAorICAgICAgICAiQW1lcmljYS9HbGFjZV9CYXkiLAorICAgICAgICAiQW1lcmljYS9Hb2R0aGFiIiwKKyAgICAgICAgIkFtZXJpY2EvR29vc2VfQmF5IiwKKyAgICAgICAgIkFtZXJpY2EvR3JhbmRfVHVyayIsCisgICAgICAgICJBbWVyaWNhL0dyZW5hZGEiLAorICAgICAgICAiQW1lcmljYS9HdWFkZWxvdXBlIiwKKyAgICAgICAgIkFtZXJpY2EvR3VhdGVtYWxhIiwKKyAgICAgICAgIkFtZXJpY2EvR3VheWFxdWlsIiwKKyAgICAgICAgIkFtZXJpY2EvR3V5YW5hIiwKKyAgICAgICAgIkFtZXJpY2EvSGFsaWZheCIsCisgICAgICAgICJBbWVyaWNhL0hhdmFuYSIsCisgICAgICAgICJBbWVyaWNhL0hlcm1vc2lsbG8iLAorICAgICAgICAiQW1lcmljYS9JbmRpYW5hL0tub3giLAorICAgICAgICAiQW1lcmljYS9JbmRpYW5hL01hcmVuZ28iLAorICAgICAgICAiQW1lcmljYS9JbmRpYW5hL1ZldmF5IiwKKyAgICAgICAgIkFtZXJpY2EvSW5kaWFuYXBvbGlzIiwKKyAgICAgICAgIkFtZXJpY2EvSW51dmlrIiwKKyAgICAgICAgIkFtZXJpY2EvSXFhbHVpdCIsCisgICAgICAgICJBbWVyaWNhL0phbWFpY2EiLAorICAgICAgICAiQW1lcmljYS9KdWp1eSIsCisgICAgICAgICJBbWVyaWNhL0p1bmVhdSIsCisgICAgICAgICJBbWVyaWNhL0tlbnR1Y2t5L01vbnRpY2VsbG8iLAorICAgICAgICAiQW1lcmljYS9MYV9QYXoiLAorICAgICAgICAiQW1lcmljYS9MaW1hIiwKKyAgICAgICAgIkFtZXJpY2EvTG9zX0FuZ2VsZXMiLAorICAgICAgICAiQW1lcmljYS9Mb3Vpc3ZpbGxlIiwKKyAgICAgICAgIkFtZXJpY2EvTWFjZWlvIiwKKyAgICAgICAgIkFtZXJpY2EvTWFuYWd1YSIsCisgICAgICAgICJBbWVyaWNhL01hbmF1cyIsCisgICAgICAgICJBbWVyaWNhL01hcnRpbmlxdWUiLAorICAgICAgICAiQW1lcmljYS9NYXphdGxhbiIsCisgICAgICAgICJBbWVyaWNhL01lbmRvemEiLAorICAgICAgICAiQW1lcmljYS9NZW5vbWluZWUiLAorICAgICAgICAiQW1lcmljYS9NZXJpZGEiLAorICAgICAgICAiQW1lcmljYS9NZXhpY29fQ2l0eSIsCisgICAgICAgICJBbWVyaWNhL01pcXVlbG9uIiwKKyAgICAgICAgIkFtZXJpY2EvTW9udGVycmV5IiwKKyAgICAgICAgIkFtZXJpY2EvTW9udGV2aWRlbyIsCisgICAgICAgICJBbWVyaWNhL01vbnRyZWFsIiwKKyAgICAgICAgIkFtZXJpY2EvTW9udHNlcnJhdCIsCisgICAgICAgICJBbWVyaWNhL05hc3NhdSIsCisgICAgICAgICJBbWVyaWNhL05ld19Zb3JrIiwKKyAgICAgICAgIkFtZXJpY2EvTmlwaWdvbiIsCisgICAgICAgICJBbWVyaWNhL05vbWUiLAorICAgICAgICAiQW1lcmljYS9Ob3JvbmhhIiwKKyAgICAgICAgIkFtZXJpY2EvTm9ydGhfRGFrb3RhL0NlbnRlciIsCisgICAgICAgICJBbWVyaWNhL1BhbmFtYSIsCisgICAgICAgICJBbWVyaWNhL1BhbmduaXJ0dW5nIiwKKyAgICAgICAgIkFtZXJpY2EvUGFyYW1hcmlibyIsCisgICAgICAgICJBbWVyaWNhL1Bob2VuaXgiLAorICAgICAgICAiQW1lcmljYS9Qb3J0LWF1LVByaW5jZSIsCisgICAgICAgICJBbWVyaWNhL1BvcnRfb2ZfU3BhaW4iLAorICAgICAgICAiQW1lcmljYS9Qb3J0b19WZWxobyIsCisgICAgICAgICJBbWVyaWNhL1B1ZXJ0b19SaWNvIiwKKyAgICAgICAgIkFtZXJpY2EvUmFpbnlfUml2ZXIiLAorICAgICAgICAiQW1lcmljYS9SYW5raW5fSW5sZXQiLAorICAgICAgICAiQW1lcmljYS9SZWNpZmUiLAorICAgICAgICAiQW1lcmljYS9SZWdpbmEiLAorICAgICAgICAiQW1lcmljYS9SaW9fQnJhbmNvIiwKKyAgICAgICAgIkFtZXJpY2EvU2FudGlhZ28iLAorICAgICAgICAiQW1lcmljYS9TYW50b19Eb21pbmdvIiwKKyAgICAgICAgIkFtZXJpY2EvU2FvX1BhdWxvIiwKKyAgICAgICAgIkFtZXJpY2EvU2NvcmVzYnlzdW5kIiwKKyAgICAgICAgIkFtZXJpY2EvU3RfSm9obnMiLAorICAgICAgICAiQW1lcmljYS9TdF9LaXR0cyIsCisgICAgICAgICJBbWVyaWNhL1N0X0x1Y2lhIiwKKyAgICAgICAgIkFtZXJpY2EvU3RfVGhvbWFzIiwKKyAgICAgICAgIkFtZXJpY2EvU3RfVmluY2VudCIsCisgICAgICAgICJBbWVyaWNhL1N3aWZ0X0N1cnJlbnQiLAorICAgICAgICAiQW1lcmljYS9UZWd1Y2lnYWxwYSIsCisgICAgICAgICJBbWVyaWNhL1RodWxlIiwKKyAgICAgICAgIkFtZXJpY2EvVGh1bmRlcl9CYXkiLAorICAgICAgICAiQW1lcmljYS9UaWp1YW5hIiwKKyAgICAgICAgIkFtZXJpY2EvVG9ydG9sYSIsCisgICAgICAgICJBbWVyaWNhL1ZhbmNvdXZlciIsCisgICAgICAgICJBbWVyaWNhL1doaXRlaG9yc2UiLAorICAgICAgICAiQW1lcmljYS9XaW5uaXBlZyIsCisgICAgICAgICJBbWVyaWNhL1lha3V0YXQiLAorICAgICAgICAiQW1lcmljYS9ZZWxsb3drbmlmZSIsCisgICAgICAgICJBbnRhcmN0aWNhL0Nhc2V5IiwKKyAgICAgICAgIkFudGFyY3RpY2EvRGF2aXMiLAorICAgICAgICAiQW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZSIsCisgICAgICAgICJBbnRhcmN0aWNhL01hd3NvbiIsCisgICAgICAgICJBbnRhcmN0aWNhL01jTXVyZG8iLAorICAgICAgICAiQW50YXJjdGljYS9QYWxtZXIiLAorICAgICAgICAiQW50YXJjdGljYS9TeW93YSIsCisgICAgICAgICJBbnRhcmN0aWNhL1Zvc3RvayIsCisgICAgICAgICJBcmN0aWMvTG9uZ3llYXJieWVuIiwKKyAgICAgICAgIkFzaWEvQWRlbiIsCisgICAgICAgICJBc2lhL0FsbWF0eSIsCisgICAgICAgICJBc2lhL0FtbWFuIiwKKyAgICAgICAgIkFzaWEvQW5hZHlyIiwKKyAgICAgICAgIkFzaWEvQXF0YXUiLAorICAgICAgICAiQXNpYS9BcXRvYmUiLAorICAgICAgICAiQXNpYS9Bc2hnYWJhdCIsCisgICAgICAgICJBc2lhL0JhZ2hkYWQiLAorICAgICAgICAiQXNpYS9CYWhyYWluIiwKKyAgICAgICAgIkFzaWEvQmFrdSIsCisgICAgICAgICJBc2lhL0Jhbmdrb2siLAorICAgICAgICAiQXNpYS9CZWlydXQiLAorICAgICAgICAiQXNpYS9CaXNoa2VrIiwKKyAgICAgICAgIkFzaWEvQnJ1bmVpIiwKKyAgICAgICAgIkFzaWEvQ2FsY3V0dGEiLAorICAgICAgICAiQXNpYS9DaG9pYmFsc2FuIiwKKyAgICAgICAgIkFzaWEvQ2hvbmdxaW5nIiwKKyAgICAgICAgIkFzaWEvQ29sb21ibyIsCisgICAgICAgICJBc2lhL0RhbWFzY3VzIiwKKyAgICAgICAgIkFzaWEvRGhha2EiLAorICAgICAgICAiQXNpYS9EaWxpIiwKKyAgICAgICAgIkFzaWEvRHViYWkiLAorICAgICAgICAiQXNpYS9EdXNoYW5iZSIsCisgICAgICAgICJBc2lhL0dhemEiLAorICAgICAgICAiQXNpYS9IYXJiaW4iLAorICAgICAgICAiQXNpYS9Ib25nX0tvbmciLAorICAgICAgICAiQXNpYS9Ib3ZkIiwKKyAgICAgICAgIkFzaWEvSXJrdXRzayIsCisgICAgICAgICJBc2lhL0pha2FydGEiLAorICAgICAgICAiQXNpYS9KYXlhcHVyYSIsCisgICAgICAgICJBc2lhL0plcnVzYWxlbSIsCisgICAgICAgICJBc2lhL0thYnVsIiwKKyAgICAgICAgIkFzaWEvS2FtY2hhdGthIiwKKyAgICAgICAgIkFzaWEvS2FyYWNoaSIsCisgICAgICAgICJBc2lhL0thc2hnYXIiLAorICAgICAgICAiQXNpYS9LYXRtYW5kdSIsCisgICAgICAgICJBc2lhL0tyYXNub3lhcnNrIiwKKyAgICAgICAgIkFzaWEvS3VhbGFfTHVtcHVyIiwKKyAgICAgICAgIkFzaWEvS3VjaGluZyIsCisgICAgICAgICJBc2lhL0t1d2FpdCIsCisgICAgICAgICJBc2lhL01hY2F1IiwKKyAgICAgICAgIkFzaWEvTWFnYWRhbiIsCisgICAgICAgICJBc2lhL01ha2Fzc2FyIiwKKyAgICAgICAgIkFzaWEvTWFuaWxhIiwKKyAgICAgICAgIkFzaWEvTXVzY2F0IiwKKyAgICAgICAgIkFzaWEvTmljb3NpYSIsCisgICAgICAgICJBc2lhL05vdm9zaWJpcnNrIiwKKyAgICAgICAgIkFzaWEvT21zayIsCisgICAgICAgICJBc2lhL09yYWwiLAorICAgICAgICAiQXNpYS9QaG5vbV9QZW5oIiwKKyAgICAgICAgIkFzaWEvUG9udGlhbmFrIiwKKyAgICAgICAgIkFzaWEvUHlvbmd5YW5nIiwKKyAgICAgICAgIkFzaWEvUWF0YXIiLAorICAgICAgICAiQXNpYS9ReXp5bG9yZGEiLAorICAgICAgICAiQXNpYS9SYW5nb29uIiwKKyAgICAgICAgIkFzaWEvUml5YWRoIiwKKyAgICAgICAgIkFzaWEvUml5YWRoODciLAorICAgICAgICAiQXNpYS9SaXlhZGg4OCIsCisgICAgICAgICJBc2lhL1JpeWFkaDg5IiwKKyAgICAgICAgIkFzaWEvU2FpZ29uIiwKKyAgICAgICAgIkFzaWEvU2FraGFsaW4iLAorICAgICAgICAiQXNpYS9TYW1hcmthbmQiLAorICAgICAgICAiQXNpYS9TZW91bCIsCisgICAgICAgICJBc2lhL1NoYW5naGFpIiwKKyAgICAgICAgIkFzaWEvU2luZ2Fwb3JlIiwKKyAgICAgICAgIkFzaWEvVGFpcGVpIiwKKyAgICAgICAgIkFzaWEvVGFzaGtlbnQiLAorICAgICAgICAiQXNpYS9UYmlsaXNpIiwKKyAgICAgICAgIkFzaWEvVGVocmFuIiwKKyAgICAgICAgIkFzaWEvVGhpbXBodSIsCisgICAgICAgICJBc2lhL1Rva3lvIiwKKyAgICAgICAgIkFzaWEvVWxhYW5iYWF0YXIiLAorICAgICAgICAiQXNpYS9VcnVtcWkiLAorICAgICAgICAiQXNpYS9WaWVudGlhbmUiLAorICAgICAgICAiQXNpYS9WbGFkaXZvc3RvayIsCisgICAgICAgICJBc2lhL1lha3V0c2siLAorICAgICAgICAiQXNpYS9ZZWthdGVyaW5idXJnIiwKKyAgICAgICAgIkFzaWEvWWVyZXZhbiIsCisgICAgICAgICJBdGxhbnRpYy9Bem9yZXMiLAorICAgICAgICAiQXRsYW50aWMvQmVybXVkYSIsCisgICAgICAgICJBdGxhbnRpYy9DYW5hcnkiLAorICAgICAgICAiQXRsYW50aWMvQ2FwZV9WZXJkZSIsCisgICAgICAgICJBdGxhbnRpYy9GYWVyb2UiLAorICAgICAgICAiQXRsYW50aWMvSmFuX01heWVuIiwKKyAgICAgICAgIkF0bGFudGljL01hZGVpcmEiLAorICAgICAgICAiQXRsYW50aWMvUmV5a2phdmlrIiwKKyAgICAgICAgIkF0bGFudGljL1NvdXRoX0dlb3JnaWEiLAorICAgICAgICAiQXRsYW50aWMvU3RfSGVsZW5hIiwKKyAgICAgICAgIkF0bGFudGljL1N0YW5sZXkiLAorICAgICAgICAiQXVzdHJhbGlhL0FkZWxhaWRlIiwKKyAgICAgICAgIkF1c3RyYWxpYS9CcmlzYmFuZSIsCisgICAgICAgICJBdXN0cmFsaWEvQnJva2VuX0hpbGwiLAorICAgICAgICAiQXVzdHJhbGlhL0RhcndpbiIsCisgICAgICAgICJBdXN0cmFsaWEvSG9iYXJ0IiwKKyAgICAgICAgIkF1c3RyYWxpYS9MaW5kZW1hbiIsCisgICAgICAgICJBdXN0cmFsaWEvTG9yZF9Ib3dlIiwKKyAgICAgICAgIkF1c3RyYWxpYS9NZWxib3VybmUiLAorICAgICAgICAiQXVzdHJhbGlhL1BlcnRoIiwKKyAgICAgICAgIkF1c3RyYWxpYS9TeWRuZXkiLAorICAgICAgICAiQkVUIiwKKyAgICAgICAgIkJTVCIsCisgICAgICAgICJDQVQiLAorICAgICAgICAiQ0VUIiwKKyAgICAgICAgIkNOVCIsCisgICAgICAgICJDU1QiLAorICAgICAgICAiQ1RUIiwKKyAgICAgICAgIkVBVCIsCisgICAgICAgICJFQ1QiLAorICAgICAgICAiRUVUIiwKKyAgICAgICAgIkVTVCIsCisgICAgICAgICJFdGMvR01UIiwKKyAgICAgICAgIkV0Yy9HTVQrMSIsCisgICAgICAgICJFdGMvR01UKzEwIiwKKyAgICAgICAgIkV0Yy9HTVQrMTEiLAorICAgICAgICAiRXRjL0dNVCsxMiIsCisgICAgICAgICJFdGMvR01UKzIiLAorICAgICAgICAiRXRjL0dNVCszIiwKKyAgICAgICAgIkV0Yy9HTVQrNCIsCisgICAgICAgICJFdGMvR01UKzUiLAorICAgICAgICAiRXRjL0dNVCs2IiwKKyAgICAgICAgIkV0Yy9HTVQrNyIsCisgICAgICAgICJFdGMvR01UKzgiLAorICAgICAgICAiRXRjL0dNVCs5IiwKKyAgICAgICAgIkV0Yy9HTVQtMSIsCisgICAgICAgICJFdGMvR01ULTEwIiwKKyAgICAgICAgIkV0Yy9HTVQtMTEiLAorICAgICAgICAiRXRjL0dNVC0xMiIsCisgICAgICAgICJFdGMvR01ULTEzIiwKKyAgICAgICAgIkV0Yy9HTVQtMTQiLAorICAgICAgICAiRXRjL0dNVC0yIiwKKyAgICAgICAgIkV0Yy9HTVQtMyIsCisgICAgICAgICJFdGMvR01ULTQiLAorICAgICAgICAiRXRjL0dNVC01IiwKKyAgICAgICAgIkV0Yy9HTVQtNiIsCisgICAgICAgICJFdGMvR01ULTciLAorICAgICAgICAiRXRjL0dNVC04IiwKKyAgICAgICAgIkV0Yy9HTVQtOSIsCisgICAgICAgICJFdGMvVUNUIiwKKyAgICAgICAgIkV0Yy9VVEMiLAorICAgICAgICAiRXVyb3BlL0Ftc3RlcmRhbSIsCisgICAgICAgICJFdXJvcGUvQW5kb3JyYSIsCisgICAgICAgICJFdXJvcGUvQXRoZW5zIiwKKyAgICAgICAgIkV1cm9wZS9CZWxmYXN0IiwKKyAgICAgICAgIkV1cm9wZS9CZWxncmFkZSIsCisgICAgICAgICJFdXJvcGUvQmVybGluIiwKKyAgICAgICAgIkV1cm9wZS9CcmF0aXNsYXZhIiwKKyAgICAgICAgIkV1cm9wZS9CcnVzc2VscyIsCisgICAgICAgICJFdXJvcGUvQnVjaGFyZXN0IiwKKyAgICAgICAgIkV1cm9wZS9CdWRhcGVzdCIsCisgICAgICAgICJFdXJvcGUvQ2hpc2luYXUiLAorICAgICAgICAiRXVyb3BlL0NvcGVuaGFnZW4iLAorICAgICAgICAiRXVyb3BlL0R1YmxpbiIsCisgICAgICAgICJFdXJvcGUvR2licmFsdGFyIiwKKyAgICAgICAgIkV1cm9wZS9IZWxzaW5raSIsCisgICAgICAgICJFdXJvcGUvSXN0YW5idWwiLAorICAgICAgICAiRXVyb3BlL0thbGluaW5ncmFkIiwKKyAgICAgICAgIkV1cm9wZS9LaWV2IiwKKyAgICAgICAgIkV1cm9wZS9MaXNib24iLAorICAgICAgICAiRXVyb3BlL0xqdWJsamFuYSIsCisgICAgICAgICJFdXJvcGUvTG9uZG9uIiwKKyAgICAgICAgIkV1cm9wZS9MdXhlbWJvdXJnIiwKKyAgICAgICAgIkV1cm9wZS9NYWRyaWQiLAorICAgICAgICAiRXVyb3BlL01hbHRhIiwKKyAgICAgICAgIkV1cm9wZS9NaW5zayIsCisgICAgICAgICJFdXJvcGUvTW9uYWNvIiwKKyAgICAgICAgIkV1cm9wZS9Nb3Njb3ciLAorICAgICAgICAiRXVyb3BlL09zbG8iLAorICAgICAgICAiRXVyb3BlL1BhcmlzIiwKKyAgICAgICAgIkV1cm9wZS9QcmFndWUiLAorICAgICAgICAiRXVyb3BlL1JpZ2EiLAorICAgICAgICAiRXVyb3BlL1JvbWUiLAorICAgICAgICAiRXVyb3BlL1NhbWFyYSIsCisgICAgICAgICJFdXJvcGUvU2FuX01hcmlubyIsCisgICAgICAgICJFdXJvcGUvU2FyYWpldm8iLAorICAgICAgICAiRXVyb3BlL1NpbWZlcm9wb2wiLAorICAgICAgICAiRXVyb3BlL1Nrb3BqZSIsCisgICAgICAgICJFdXJvcGUvU29maWEiLAorICAgICAgICAiRXVyb3BlL1N0b2NraG9sbSIsCisgICAgICAgICJFdXJvcGUvVGFsbGlubiIsCisgICAgICAgICJFdXJvcGUvVGlyYW5lIiwKKyAgICAgICAgIkV1cm9wZS9Vemhnb3JvZCIsCisgICAgICAgICJFdXJvcGUvVmFkdXoiLAorICAgICAgICAiRXVyb3BlL1ZhdGljYW4iLAorICAgICAgICAiRXVyb3BlL1ZpZW5uYSIsCisgICAgICAgICJFdXJvcGUvVmlsbml1cyIsCisgICAgICAgICJFdXJvcGUvV2Fyc2F3IiwKKyAgICAgICAgIkV1cm9wZS9aYWdyZWIiLAorICAgICAgICAiRXVyb3BlL1phcG9yb3poeWUiLAorICAgICAgICAiRXVyb3BlL1p1cmljaCIsCisgICAgICAgICJHTVQiLAorICAgICAgICAiSFNUIiwKKyAgICAgICAgIklFVCIsCisgICAgICAgICJJU1QiLAorICAgICAgICAiSW5kaWFuL0FudGFuYW5hcml2byIsCisgICAgICAgICJJbmRpYW4vQ2hhZ29zIiwKKyAgICAgICAgIkluZGlhbi9DaHJpc3RtYXMiLAorICAgICAgICAiSW5kaWFuL0NvY29zIiwKKyAgICAgICAgIkluZGlhbi9Db21vcm8iLAorICAgICAgICAiSW5kaWFuL0tlcmd1ZWxlbiIsCisgICAgICAgICJJbmRpYW4vTWFoZSIsCisgICAgICAgICJJbmRpYW4vTWFsZGl2ZXMiLAorICAgICAgICAiSW5kaWFuL01hdXJpdGl1cyIsCisgICAgICAgICJJbmRpYW4vTWF5b3R0ZSIsCisgICAgICAgICJJbmRpYW4vUmV1bmlvbiIsCisgICAgICAgICJKU1QiLAorICAgICAgICAiTUVUIiwKKyAgICAgICAgIk1JVCIsCisgICAgICAgICJNU1QiLAorICAgICAgICAiTkVUIiwKKyAgICAgICAgIk5TVCIsCisgICAgICAgICJQTFQiLAorICAgICAgICAiUE5UIiwKKyAgICAgICAgIlBSVCIsCisgICAgICAgICJQU1QiLAorICAgICAgICAiUGFjaWZpYy9BcGlhIiwKKyAgICAgICAgIlBhY2lmaWMvQXVja2xhbmQiLAorICAgICAgICAiUGFjaWZpYy9DaGF0aGFtIiwKKyAgICAgICAgIlBhY2lmaWMvRWFzdGVyIiwKKyAgICAgICAgIlBhY2lmaWMvRWZhdGUiLAorICAgICAgICAiUGFjaWZpYy9FbmRlcmJ1cnkiLAorICAgICAgICAiUGFjaWZpYy9GYWthb2ZvIiwKKyAgICAgICAgIlBhY2lmaWMvRmlqaSIsCisgICAgICAgICJQYWNpZmljL0Z1bmFmdXRpIiwKKyAgICAgICAgIlBhY2lmaWMvR2FsYXBhZ29zIiwKKyAgICAgICAgIlBhY2lmaWMvR2FtYmllciIsCisgICAgICAgICJQYWNpZmljL0d1YWRhbGNhbmFsIiwKKyAgICAgICAgIlBhY2lmaWMvR3VhbSIsCisgICAgICAgICJQYWNpZmljL0hvbm9sdWx1IiwKKyAgICAgICAgIlBhY2lmaWMvSm9obnN0b24iLAorICAgICAgICAiUGFjaWZpYy9LaXJpdGltYXRpIiwKKyAgICAgICAgIlBhY2lmaWMvS29zcmFlIiwKKyAgICAgICAgIlBhY2lmaWMvS3dhamFsZWluIiwKKyAgICAgICAgIlBhY2lmaWMvTWFqdXJvIiwKKyAgICAgICAgIlBhY2lmaWMvTWFycXVlc2FzIiwKKyAgICAgICAgIlBhY2lmaWMvTWlkd2F5IiwKKyAgICAgICAgIlBhY2lmaWMvTmF1cnUiLAorICAgICAgICAiUGFjaWZpYy9OaXVlIiwKKyAgICAgICAgIlBhY2lmaWMvTm9yZm9sayIsCisgICAgICAgICJQYWNpZmljL05vdW1lYSIsCisgICAgICAgICJQYWNpZmljL1BhZ29fUGFnbyIsCisgICAgICAgICJQYWNpZmljL1BhbGF1IiwKKyAgICAgICAgIlBhY2lmaWMvUGl0Y2Fpcm4iLAorICAgICAgICAiUGFjaWZpYy9Qb25hcGUiLAorICAgICAgICAiUGFjaWZpYy9Qb3J0X01vcmVzYnkiLAorICAgICAgICAiUGFjaWZpYy9SYXJvdG9uZ2EiLAorICAgICAgICAiUGFjaWZpYy9TYWlwYW4iLAorICAgICAgICAiUGFjaWZpYy9UYWhpdGkiLAorICAgICAgICAiUGFjaWZpYy9UYXJhd2EiLAorICAgICAgICAiUGFjaWZpYy9Ub25nYXRhcHUiLAorICAgICAgICAiUGFjaWZpYy9UcnVrIiwKKyAgICAgICAgIlBhY2lmaWMvV2FrZSIsCisgICAgICAgICJQYWNpZmljL1dhbGxpcyIsCisgICAgICAgICJQYWNpZmljL1lhcCIsCisgICAgICAgICJTU1QiLAorICAgICAgICAiVVRDIiwKKyAgICAgICAgIlZTVCIsCisgICAgICAgICJXRVQiLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBSTEUgZW5jb2RlZCBmb3JtIG9mIERBVEEuCisgICAgICogQHNlZSBjb20uaWJtLnV0aWwuVXRpbGl0eS5STEVTdHJpbmdUb0ludEFycmF5CisgICAgICogPj4gR0VORVJBVEVEIERBVEE6IERPIE5PVCBFRElUIDw8CisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX1JMRSA9CisgICAgICAgICJcMDAwXHUwNkI0XDAwMFwwMDBcdUZGRkZcdTU3NDBcMDAwXDAwMVwwMDBcdTAxMjdcMDAwXDAwMFx1RkZGRlx1NjU1MFwwMDAiKworICAgICAgICAiXDAwNlwwMDBcdTAxMjZcMDAwXHUwMTgzXDAwMFx1MDE4QlwwMDBcdTAxOUZcMDAwXHUwMUExXDAwMFx1MDFBNFwwMDBcMDAwIisKKyAgICAgICAgIlx1RkZGRlx1NzM2MFwwMDBcMDA2XDAwMFx1MDEyNVwwMDBcdTAxNzNcMDAwXHUwMTkxXDAwMFx1MDE5OFwwMDBcdTAxOTkiKworICAgICAgICAiXDAwMFx1MDFBQlwwMDBcMDAxXHVGRkZGXHU3MzYwXDAwMFwwMDNcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDAiKworICAgICAgICAiXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMDlcMDAwXDAwMVx1RkZGRiIrCisgICAgICAgICJcdTczNjBcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAyXDAwMFwwMDFcdUZGRkYiKworICAgICAgICAiXHVGRkZGXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDM2XDAwMFwwMDFcMDAwXHUwMUE5XDAwMFwwMDBcdUZGRkZcdTdBNjhcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHUwMTlFXDAwMFwwMDBcdUZGRkZcdTgxNzBcMDAwXDAwMlwwMDBcdTAxMkZcMDAwXHUwMTk1XDAwMFwwMDEiKworICAgICAgICAiXHVGRkZGXHU4MTcwXDAwMFwwMDNcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDBcMDAwXDAxMVx1RkZGRlx1RkZGRiIrCisgICAgICAgICJcMDAwXDAwMVwwMDB4XDAwMFwwMDBcMDAwPFwwMDBcMDA1XDAwMFwwMDRcMDAwOlwwMDBxXDAwMFx1MDA4OFwwMDBcdTAwQUEiKworICAgICAgICAiXDAwMFwwMDBcdUZGRkZcdThGODBcMDAwXDAwMlwwMDBcdTAxMkVcMDAwXHUwMUE2XDAwMFwwMDFcdUZGRkZcdThGODBcMDAwIisKKyAgICAgICAgIlwwMDNcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDBcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMCIrCisgICAgICAgICJ4XDAwMFwwMDBcMDAwPFwwMDBcMDA2XDAwMFRcMDAwdVwwMDBcdTAwQTVcMDAwXHUwMEE3XDAwMFx1MDBBOFwwMDBcdTAxOEEiKworICAgICAgICAiXDAwMFwwMDBcdUZGRkZcdTlEOTBcMDAwXDAwNVwwMDBVXDAwMGhcMDAwXHUwMDhFXDAwMFx1MDEyRFwwMDBcdTAxODhcMDAwIisKKyAgICAgICAgIlwwMDFcdUZGRkZcdTlEOTBcMDAwXDAwM1wwMDBcMDAxXHVGRkZGXHVGRkZGXDAwMHhcMDAwXDAwMFwwMDBcMDExXHVGRkZGIisKKyAgICAgICAgIlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMFwwMDA8XDAwMFwwMTFcMDAwRVwwMDBHXDAwME5cMDAwVlwwMDBZXDAwMCIrCisgICAgICAgICJtXDAwMHtcMDAwXHUwMEFCXDAwMFx1MDE4NFwwMDBcMDAwXHVGRkZGXHVBQkEwXDAwMFwwMDVcMDAweFwwMDBcdTAwOTYiKworICAgICAgICAiXDAwMFx1MDBBMVwwMDBcdTAxMkNcMDAwXHUwMTk0XDAwMFwwMDFcdUZGRkZcdUFCQTBcMDAwXDAwM1wwMDBcMDAxXHVGRkZGIisKKyAgICAgICAgIlx1RkZGRlwwMDB4XDAwMFwwMDBcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMFwwMDA8XDAwMCIrCisgICAgICAgICJcMDEyXDAwMEhcMDAwTVwwMDB9XDAwMH5cMDAwXHUwMDdGXDAwMFx1MDA4MVwwMDBcdTAwOEFcMDAwXHUwMDkzXDAwMFx1MDA5NCIrCisgICAgICAgICJcMDAwXHUwMTFEXDAwMFwwMDFcdUZGRkZcdUFCQTBcMDAwXDAwM1wwMDBcMDAxXHVGRkZGXHVGRkZGXDAwMHhcMDAwXDAwMCIrCisgICAgICAgICJcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMVwwMDA8XDAwMFwwMDFcMDAwXHUwMEE5XDAwMFwwMDEiKworICAgICAgICAiXHVGRkZGXHVBQkEwXDAwMFwwMTNcMDAwXDAyMlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMTRcMDAwIisKKyAgICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBCXDAwMFwwMDFcdUZGRkZcdUFCQTBcMDAwXDAwMFwwMDAiKworICAgICAgICAiXDAxN1x1RkZGRlx1RkZGOVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMlwwMDBcMDE3XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIisKKyAgICAgICAgIlwwMDA8XDAwMFwwMDFcMDAwUFwwMDBcMDAxXHVGRkZGXHVBQkEwXDAwMFwwMDJcMDAwXDAyN1wwMDBcMDAwXDAwMFwwMDAiKworICAgICAgICAiXDAwMFwwMDBcMDAwXDAxMFwwMDBcMDA3XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBjXDAwMCIrCisgICAgICAgICJcMDAxXHVGRkZGXHVBQkEwXDAwMFwwMDRcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAxMFx1RkZGRiIrCisgICAgICAgICJcdUZGRkZcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwPFwwMDBcMDAyXDAwMFtcMDAwXHUwMEEyXDAwMFwwMDFcdUZGRkYiKworICAgICAgICAiXHVBQkEwXDAwMFwwMTFcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcdTAwRjBcMDAwXDAwMlwwMDBcMDAyXDAwMFwwMTFcdUZGRkYiKworICAgICAgICAiXHVGRkZGXDAwMFx1MDBCNFwwMDBcMDAyXDAwMDxcMDAwXDAwMVwwMDBcdTAxOEVcMDAwXDAwMFx1RkZGRlx1QjlCMFwwMDAiKworICAgICAgICAiXDAxNFwwMDBMXDAwMFpcMDAwZFwwMDBpXDAwMGpcMDAwa1wwMDBsXDAwMG9cMDAwXHUwMDhCXDAwMFx1MDA5N1wwMDBcdTAxMkIiKworICAgICAgICAiXDAwMFx1MDE3NFwwMDBcMDAxXHVGRkZGXHVCOUIwXDAwMFwwMDNcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDBcMDAwXDAwMCIrCisgICAgICAgICJcMDAwXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMGBcMDAwIisKKyAgICAgICAgIlwwMDFcdUZGRkZcdUI5QjBcMDAwXDAwM1wwMDBcMDAxXHVGRkZGXHVGRkZGXDAwMFwwMDBcMDAwXDAwMVwwMDBcMDExXHVGRkZGIisKKyAgICAgICAgIlx1RkZGRlwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMVwwMDA8XDAwMFwwMDFcMDAwZ1wwMDBcMDAxXHVGRkZGXHVCOUIwXDAwMCIrCisgICAgICAgICJcMDAzXDAwMFwwMDFcdUZGRkZcdUZGRkZcMDAwPFwwMDBcMDAxXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDAiKworICAgICAgICAiPFwwMDBcMDAxXDAwMDxcMDAwXDAwMVwwMDBcdTAwOEZcMDAwXDAwMVx1RkZGRlx1QjlCMFwwMDBcMDAzXDAwMFwwMDFcdUZGRkYiKworICAgICAgICAiXHVGRkZGXDAwMHhcMDAwXDAwMFwwMDBcMDExXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAwXDAwMDxcMDAwIisKKyAgICAgICAgIlwwMTNcMDAwV1wwMDBuXDAwMHJcMDAwdlwwMDBcdTAwODNcMDAwXHUwMDg1XDAwMFx1MDA4NlwwMDBcdTAwODdcMDAwXHUwMDhDIisKKyAgICAgICAgIlwwMDBcdTAwQTRcMDAwXHUwMTIyXDAwMFwwMDFcdUZGRkZcdUI5QjBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMCIrCisgICAgICAgICJcMDAwXDAwMFwwMDBcMDAzXDAwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMHRcMDAwIisKKyAgICAgICAgIlwwMDFcdUZGRkZcdUI5QjBcMDAwXDAwNFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMTNcMDAwXDAzNyIrCisgICAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMERcMDAwXDAwMFx1RkZGRlx1QzdDMFwwMDBcMDMxIisKKyAgICAgICAgIlwwMDA7XDAwMDxcMDAwPlwwMDBDXDAwMElcMDAwUlwwMDBYXDAwMGFcMDAwYlwwMDBlXDAwMHNcMDAweVwwMDB6XDAwMCIrCisgICAgICAgICJcdTAwODRcMDAwXHUwMDkwXDAwMFx1MDA5MVwwMDBcdTAwOTJcMDAwXHUwMDk5XDAwMFx1MDA5RFwwMDBcdTAwOUVcMDAwIisKKyAgICAgICAgIlx1MDA5RlwwMDBcdTAwQTBcMDAwXHUwMEE2XDAwMFx1MDEyQVwwMDBcdTAxODlcMDAwXDAwMVx1RkZGRlx1QzdDMFwwMDAiKworICAgICAgICAiXDAwM1wwMDBcMDAxXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAwXDAwMFwwMDBcMDExXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXDAwMFwwMDA8XDAwMFwwMDFcMDAwX1wwMDBcMDAxXHVGRkZGXHVDN0MwXDAwMFwwMDNcMDAwXDAwMVx1RkZGRiIrCisgICAgICAgICJcdUZGRkZcMDAweFwwMDBcMDAwXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDBcMDAwPFwwMDAiKworICAgICAgICAiXDAwNFwwMDBdXDAwMGZcMDAwXHUwMEEzXDAwMFx1MDEwNFwwMDBcMDAxXHVGRkZGXHVDN0MwXDAwMFwwMDNcMDAwXDAxNyIrCisgICAgICAgICJcdUZGRkZcdUZGRkZcMDAweFwwMDBcMDAwXDAwMFwwMTBcMDAwXDAzMVwwMDBcMDAwXDAwMHhcMDAwXDAwMFwwMDA8XDAwMCIrCisgICAgICAgICJcMDAxXDAwMEBcMDAwXDAwMVx1RkZGRlx1QzdDMFwwMDBcMDExXDAwMFwwMTBcdUZGRkZcdUZGRkZcMDAwXDAwMFwwMDAiKworICAgICAgICAiXDAwMFwwMDBcMDAxXDAwMFwwMTdcdUZGRkZcdUZGRkZcMDAwXDAwMFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBRXDAwMCIrCisgICAgICAgICJcMDAxXHVGRkZGXHVDN0MwXDAwMFwwMTFcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMlwwMDAiKworICAgICAgICAiXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAwXDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMFx1MDBCMVwwMDBcMDAxXHVGRkZGIisKKyAgICAgICAgIlx1QzdDMFwwMDBcMDExXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXHUwMEYwXDAwMFwwMDJcMDAwXDAwMlwwMDBcMDExXHVGRkZGIisKKyAgICAgICAgIlx1RkZGRlwwMDBcdTAwQjRcMDAwXDAwMlwwMDA8XDAwMFwwMDFcMDAwXHUwMDk4XDAwMFwwMDFcdUZGRkZcdUM3QzBcMDAwIisKKyAgICAgICAgIlwwMTBcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwM1wwMDBcMDAxXHVGRkZGXHVGRkZGXDAwMCIrCisgICAgICAgICJcMDAwXDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMD9cMDAwXDAwMVx1RkZGRlx1QzdDMFwwMDBcMDEwXDAwMFwwMDFcdUZGRkYiKworICAgICAgICAiXHVGRkZGXDAwMHhcMDAwXDAwMFwwMDBcMDAzXDAwMFwwMTdcdUZGRkZcdUZGRkZcMDAweFwwMDBcMDAwXDAwMDxcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHUwMTBEXDAwMFwwMDFcdUZGRkZcdUNFQzhcMDAwXDAwM1wwMDBcMDAxXHVGRkZGXHVGRkZGXDAwMFwwMDEiKworICAgICAgICAiXDAwMFwwMDBcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMFwwMDFcMDAwXDAwMFwwMDA8XDAwMFwwMDJcMDAwIisKKyAgICAgICAgIlx1MDA5Q1wwMDBcdTAxMUNcMDAwXDAwMFx1RkZGRlx1RDVEMFwwMDBcMDE1XDAwMFwwMDJcMDAwQVwwMDBGXDAwMEpcMDAwIisKKyAgICAgICAgIktcMDAwT1wwMDBcMTM0XDAwMHBcMDAwd1wwMDB8XDAwMFx1MDA4RFwwMDBcdTAwOTVcMDAwXHUwMTI5XDAwMFwwMDFcdUZGRkYiKworICAgICAgICAiXHVENUQwXDAwMFwwMDNcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDBcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDAiKworICAgICAgICAiXDAwMVwwMDB4XDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMFx1MDA4MFwwMDBcMDAxXHVGRkZGXHVENUQwXDAwMFwwMDJcdUZGRkYiKworICAgICAgICAiXHVGRkZGXDAwMFwwMDFcMDAwPFwwMDBcMDAyXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDA8XDAwMFwwMDJcMDAwIisKKyAgICAgICAgIjxcMDAwXDAwMVwwMDBeXDAwMFwwMDFcdUZGRkZcdUQ1RDBcMDAwXDAxMVwwMDBcMDIyXDAwMFwwMDBcMDAwXDAwMFwwMDAiKworICAgICAgICAiXDAwMFwwMDBcMDAxXDAwMFwwMzRcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMFx1MDA4MlwwMDAiKworICAgICAgICAiXDAwMVx1RkZGRlx1RDVEMFwwMDBcMDExXDAwMFwwMTBcdUZGRkZcdUZGRkZcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDFcMDAwIisKKyAgICAgICAgIlwwMTdcdUZGRkZcdUZGRkZcMDAwXDAwMFwwMDBcMDAwXDAwMDxcMDAwXDAwM1wwMDA9XDAwMFx1MDA5QVwwMDBcdTAxMTgiKworICAgICAgICAiXDAwMFwwMDBcdUZGRkZcdUUzRTBcMDAwXDAwM1wwMDBcdTAwODlcMDAwXHUwMTBCXDAwMFx1MDEyOFwwMDBcMDAwXHVGRkZGIisKKyAgICAgICAgIlx1RjFGMFwwMDBcMDAyXDAwMFx1MDEwNlwwMDBcdTAxMjRcMDAwXDAwMVx1RkZGRlx1RjFGMFwwMDBcMDAyXHVGRkZGXHVGRkZGIisKKyAgICAgICAgIlwwMDBcMDAxXDAwMDxcMDAwXDAwMlwwMDBcMDExXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAwPFwwMDBcMDAyXDAwMDxcMDAwIisKKyAgICAgICAgIlwwMDJcMDAwXHUwMDlCXDAwMFx1MDEwM1wwMDBcMDAwXDAwMFwwMDBcMDAwXDAyNlwwMDBcMDA1XDAwMFwwMTJcMDAwXDAxNCIrCisgICAgICAgICJcMDAwXDAxNVwwMDBcMDIyXDAwMFwwMjRcMDAwXDAyNVwwMDBcMDMxXDAwMCRcMDAwLVwwMDAxXDAwMDJcMDAwNFwwMDAiKworICAgICAgICAiNVwwMDBTXDAwMFx1MDEwQVwwMDBcdTAxMENcMDAwXHUwMTIzXDAwMFx1MDEzRVwwMDBcdTAxM0ZcMDAwXHUwMTcyXDAwMCIrCisgICAgICAgICJcdTAxQjNcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDVcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDEwIisKKyAgICAgICAgIlwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBcMDMyXDAwMFwwMDFcMDAwXDAwMCIrCisgICAgICAgICJcMDAwXDAwMlx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMDxcMDAwXDAwMlwwMDBcMDExXHVGRkZGXHVGRkZGXDAwMFwwMDEiKworICAgICAgICAiXDAwMDxcMDAwXDAwMlwwMDA8XDAwMFwwMTBcMDAwXHUwMTA1XDAwMFx1MDEwN1wwMDBcdTAxMDlcMDAwXHUwMTQzXDAwMCIrCisgICAgICAgICJcdTAxNENcMDAwXHUwMTUyXDAwMFx1MDE1NFwwMDBcdTAxQjVcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMTBcMDAwXDAwMVwwMDAiKworICAgICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAxM1wwMDBcMDM3XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjRcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXDAwNlwwMDBcMDAwXDAwMFx1MEUxMFwwMDBcMDE1XDAwMFwwMTBcMDAwXDAxM1wwMDBcMDE3XDAwMFwwMzAiKworICAgICAgICAiXDAwMCFcMDAwXDA0MlwwMDAjXDAwMCVcMDAwKFwwMDAvXDAwMDBcMDAwM1wwMDBcdTAxMzBcMDAwXDAwMVwwMDBcdTBFMTAiKworICAgICAgICAiXDAwMFwwMDJcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDA8XDAwMFwwMDJcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxIisKKyAgICAgICAgIlwwMDA8XDAwMFwwMDJcMDAwPFwwMDAhXDAwMFwwMjNcMDAwXHUwMEI0XDAwMFx1MDEwOFwwMDBcdTAxMjBcMDAwXHUwMTQwIisKKyAgICAgICAgIlwwMDBcdTAxNDFcMDAwXHUwMTQ0XDAwMFx1MDE0NVwwMDBcdTAxNDZcMDAwXHUwMTQ3XDAwMFx1MDE0OVwwMDBcdTAxNEIiKworICAgICAgICAiXDAwMFx1MDE0RFwwMDBcdTAxNTNcMDAwXHUwMTU1XDAwMFx1MDE1NlwwMDBcdTAxNTdcMDAwXHUwMTU5XDAwMFx1MDE1QiIrCisgICAgICAgICJcMDAwXHUwMTVDXDAwMFx1MDE1RFwwMDBcdTAxNUZcMDAwXHUwMTYxXDAwMFx1MDE2MlwwMDBcdTAxNjRcMDAwXHUwMTY2IisKKyAgICAgICAgIlwwMDBcdTAxNjhcMDAwXHUwMTZBXDAwMFx1MDE2QlwwMDBcdTAxNkNcMDAwXHUwMTZFXDAwMFx1MDE2RlwwMDBcdTAxNzEiKworICAgICAgICAiXDAwMFwwMDFcMDAwXHUwRTEwXDAwMFwwMDJcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwXDAxMVx1RkZGRiIrCisgICAgICAgICJcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwPFwwMDBcMDAyXDAwMFx1MDExQlwwMDBcdTAxODJcMDAwXDAwMVwwMDAiKworICAgICAgICAiXHUwRTEwXDAwMFwwMDRcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMVwwMDBcMDEwXHVGRkZGXHVGRkZGXDAwMCIrCisgICAgICAgICJcMDAxXDAwMFwwMDBcMDAwXDAwMVwwMDA8XDAwMFwwMDFcMDAwN1wwMDBcMDAxXDAwMFx1MEUxMFwwMDBcMDEwXDAwMFwwMDEiKworICAgICAgICAiXHVGRkZGXHVGRkZGXDAwMHhcMDAwXDAwMFwwMDBcMDAzXDAwMFwwMDFcdUZGRkZcdUZGRkZcMDAweFwwMDBcMDAwXDAwMCIrCisgICAgICAgICI8XDAwMFwwMDFcMDAwOFwwMDBcMDAwXDAwMFx1MUMyMFwwMDBcMDE2XDAwMFwwMTZcMDAwXDAyMFwwMDBcMDMzXDAwMFwwMzQiKworICAgICAgICAiXDAwMCBcMDAwJlwwMDAnXDAwMClcMDAwKlwwMDArXDAwMDZcMDAwXHUwMTFBXDAwMFx1MDEzNlwwMDBcdTAxNkRcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHUxQzIwXDAwMFwwMDNcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDExXDAwMFwwMDEiKworICAgICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBcdTAwQzdcMDAwXDAwMVwwMDBcdTFDMjBcMDAwIisKKyAgICAgICAgIlwwMDNcMDAwXDAwMVwwMDBcMDAwXDAwMDxcMDAwXDAwMFwwMDBcMDExXDAwMFwwMDdcMDAwXDAwMFwwMDA8XDAwMFwwMDAiKworICAgICAgICAiXDAwMDxcMDAwXDAwMVwwMDBcdTAwRDNcMDAwXDAwMVwwMDBcdTFDMjBcMDAwXDAwM1wwMDBcMDE3XHVGRkZGXHVGRkZBIisKKyAgICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAxMVwwMDBcMDE3XHVGRkZGXHVGRkZBXDAwMFwwMDBcMDAwXDAwMFwwMDA8XDAwMCIrCisgICAgICAgICJcMDAxXDAwMFx1MDBDQ1wwMDBcMDAxXDAwMFx1MUMyMFwwMDBcMDAzXHVGRkZGXHVGRkZGXDAwMFwwMDZcMDAwXDAwMFwwMDAiKworICAgICAgICAiXDAwMVwwMDBcMDEwXHVGRkZGXHVGRkZGXDAwMFwwMDVcMDAwXHUwNTY0XDAwMFwwMDFcMDAwPFwwMDBcMDAyXDAwMFwwMDMiKworICAgICAgICAiXDAwMFwwMjFcMDAwXDAwMVwwMDBcdTFDMjBcMDAwXDAwMlx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMCIrCisgICAgICAgICJcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDA8XDAwMFwwMDFcMDAwXHUwMEMwXDAwMCIrCisgICAgICAgICJcMDAxXDAwMFx1MUMyMFwwMDBcMDAyXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAwPFwwMDBcMDAyXDAwMFwwMTFcdUZGRkYiKworICAgICAgICAiXHVGRkZGXDAwMFwwMDFcMDAwPFwwMDBcMDAyXDAwMDxcMDAwXDAxNlwwMDBcdTAwRTJcMDAwXHUwMTIxXDAwMFx1MDE0MiIrCisgICAgICAgICJcMDAwXHUwMTQ4XDAwMFx1MDE0QVwwMDBcdTAxNEVcMDAwXHUwMTRGXDAwMFx1MDE1MVwwMDBcdTAxNUVcMDAwXHUwMTYzIisKKyAgICAgICAgIlwwMDBcdTAxNjVcMDAwXHUwMTY3XDAwMFx1MDE2OVwwMDBcdTAxNzBcMDAwXDAwMVwwMDBcdTFDMjBcMDAwXDAwMlx1RkZGRiIrCisgICAgICAgICJcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMVwwMDAiKworICAgICAgICAiPFwwMDBcMDAyXDAwMFx1MDE1MFwwMDBcdTAxNThcMDAwXDAwMVwwMDBcdTFDMjBcMDAwXDAwMlx1RkZGRlx1RkZGRlwwMDAiKworICAgICAgICAiXDAwNVwwMDBcMDAwXDAwMFwwMDFcMDAwXDAxMFx1RkZGRlx1RkZGRlwwMDBcMDA1XDAwMFwwMDBcMDAwXDAwMVwwMDA8IisKKyAgICAgICAgIlwwMDBcMDAxXDAwMFx1MDBCN1wwMDBcMDAxXDAwMFx1MUMyMFwwMDBcMDEwXDAwMFwwMTdcdUZGRkZcdUZGRkZcMDAweCIrCisgICAgICAgICJcMDAwXDAwMFwwMDBcMDAyXDAwMFwwMTdcdUZGRkZcdUZGRkZcMDAweFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBcMDM1IisKKyAgICAgICAgIlwwMDBcMDAwXDAwMFx1MkEzMFwwMDBcMDIzXDAwMFwwMDdcMDAwXDAxMVwwMDBcMDI2XDAwMFwwMjdcMDAwXDAzNlwwMDAiKworICAgICAgICAiXDAzN1wwMDAsXDAwMC5cMDAwXHUwMEIyXDAwMFx1MDBCNVwwMDBcdTAwQkRcMDAwXHUwMERDXDAwMFx1MDBFOVwwMDBcdTAwRUMiKworICAgICAgICAiXDAwMFx1MDExRlwwMDBcdTAxMzdcMDAwXHUwMTc2XDAwMFx1MDE3QVwwMDBcdTAxN0ZcMDAwXDAwMVwwMDBcdTJBMzBcMDAwIisKKyAgICAgICAgIlwwMDNcMDAwXDAwMVwwMDBcMDAwXDAwMFx1MDBCNFwwMDBcMDAxXDAwMFwwMTFcMDAwXDAwMVwwMDBcMDAwXDAwMFx1MDBCNCIrCisgICAgICAgICJcMDAwXDAwMVwwMDA8XDAwMFwwMDFcMDAwXHUwMEJDXDAwMFwwMDFcMDAwXHUyQTMwXDAwMFwwMDJcdUZGRkZcdUZGRkYiKworICAgICAgICAiXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwPFwwMDAiKworICAgICAgICAiXDAwMVwwMDBcdTAxNUFcMDAwXDAwMFwwMDBcdTJCRDhcMDAwXDAwM1wwMDBcdTAwRURcMDAwXHUwMEVFXDAwMFx1MDBFRiIrCisgICAgICAgICJcMDAwXDAwMVwwMDBcdTMxMzhcMDAwXDAwMlwwMDBcMDI0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMTBcMDAwIisKKyAgICAgICAgIlwwMjdcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwPFwwMDBcMDAxXDAwMFx1MDBGOVwwMDBcMDAwXDAwMFx1Mzg0MCIrCisgICAgICAgICJcMDAwXDAwNlwwMDBcdTAwQ0FcMDAwXHUwMEUxXDAwMFx1MDEzOFwwMDBcdTAxN0NcMDAwXHUwMTdFXDAwMFx1MDE4MFwwMDAiKworICAgICAgICAiXDAwMVwwMDBcdTM4NDBcMDAwXDAwMlx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDExXHVGRkZGIisKKyAgICAgICAgIlx1RkZGRlwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDA8XDAwMFwwMDFcMDAwXHUwMEY4XDAwMFwwMDFcMDAwXHUzODQwIisKKyAgICAgICAgIlwwMDBcMDAyXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAwPFwwMDBcMDAwXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMSIrCisgICAgICAgICJcMDAwPFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBcdTAwQkVcMDAwXDAwMVwwMDBcdTM4NDBcMDAwXDAwMlx1RkZGRlx1RkZGRiIrCisgICAgICAgICJcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMVwwMDA8XDAwMCIrCisgICAgICAgICJcMDA1XDAwMFx1MDBCOVwwMDBcdTAwRTVcMDAwXHUwMTAyXDAwMFx1MDE2MFwwMDBcdTAxODVcMDAwXDAwMFwwMDBcdTNGNDgiKworICAgICAgICAiXDAwMFwwMDFcMDAwXHUwMEQ0XDAwMFwwMDBcMDAwXHU0NjUwXDAwMFwwMDdcMDAwXHUwMEJCXDAwMFx1MDBDQlwwMDBcdTAwRjIiKworICAgICAgICAiXDAwMFx1MDBGN1wwMDBcdTAxMzlcMDAwXHUwMTdCXDAwMFx1MDE3RFwwMDBcMDAxXDAwMFx1NDY1MFwwMDBcMDAzXDAwMCIrCisgICAgICAgICJcMDAyXHVGRkZGXHVGRkZGXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDExXDAwMFwwMTdcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAiKworICAgICAgICAiXDAwMDxcMDAwXDAwMlwwMDBcdTAwRDZcMDAwXHUwMTg3XDAwMFwwMDFcMDAwXHU0NjUwXDAwMFwwMDJcdUZGRkZcdUZGRkYiKworICAgICAgICAiXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwPFwwMDAiKworICAgICAgICAiXDAwMlwwMDBcdTAwQkFcMDAwXHUwMTAxXDAwMFwwMDFcMDAwXHU0NjUwXDAwMFwwMDJcdUZGRkZcdUZGRkZcMDAwXDAwMSIrCisgICAgICAgICJcMDAwXHUwMDk2XDAwMFwwMDBcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMFx1MDA5NlwwMDBcMDAwXDAwMDwiKworICAgICAgICAiXDAwMFwwMDFcMDAwXHUwMEMxXDAwMFwwMDBcMDAwXHU0RDU4XDAwMFwwMDJcMDAwXHUwMEMzXDAwMFx1MDE3NVwwMDBcMDAwIisKKyAgICAgICAgIlwwMDBcdTUwRENcMDAwXDAwMVwwMDBcdTAwRDhcMDAwXDAwMFwwMDBcdTU0NjBcMDAwXDAxMFwwMDBcdTAwQUZcMDAwXHUwMEIzIisKKyAgICAgICAgIlwwMDBcdTAwQzZcMDAwXHUwMEM4XDAwMFx1MDBGQVwwMDBcdTAxMTlcMDAwXHUwMTNBXDAwMFx1MDE3N1wwMDBcMDAxXDAwMCIrCisgICAgICAgICJcdTU0NjBcMDAwXDAwMlx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMVwwMDBcMDExXHVGRkZGXHVGRkZGXDAwMCIrCisgICAgICAgICJcMDAxXDAwMHhcMDAwXDAwMVwwMDA8XDAwMFwwMDRcMDAwXHUwMEI2XDAwMFx1MDBFM1wwMDBcdTAwRTRcMDAwXHUwMEVBIisKKyAgICAgICAgIlwwMDBcMDAwXDAwMFx1NUI2OFwwMDBcMDAyXDAwMFx1MDBFQlwwMDBcdTAxNzlcMDAwXDAwMFwwMDBcdTYyNzBcMDAwXDAxMiIrCisgICAgICAgICJcMDAwXHUwMEFEXDAwMFx1MDBCRlwwMDBcdTAwRDFcMDAwXHUwMEU2XDAwMFx1MDBFN1wwMDBcdTAwRjBcMDAwXHUwMEZFIisKKyAgICAgICAgIlwwMDBcdTAxM0JcMDAwXHUwMTc4XDAwMFx1MDFCNFwwMDBcMDAxXDAwMFx1NjI3MFwwMDBcMDAzXDAwMFwwMzNcMDAwXDAwMCIrCisgICAgICAgICJcMDAweFwwMDBcMDAxXDAwMFwwMTBcMDAwXDAzNFwwMDBcMDAwXDAwMHhcMDAwXDAwMVwwMDA8XDAwMFwwMDFcMDAwXHUwMENGIisKKyAgICAgICAgIlwwMDBcMDAxXDAwMFx1NjI3MFwwMDBcMDAyXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMFwwMTFcdUZGRkYiKworICAgICAgICAiXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMDxcMDAwXDAwMVwwMDBcdTAwRDlcMDAwXDAwMFwwMDBcdTcwODBcMDAwIisKKyAgICAgICAgIlwwMTBcMDAwXHUwMEFDXDAwMFx1MDBDMlwwMDBcdTAwREFcMDAwXHUwMERCXDAwMFx1MDBERlwwMDBcdTAwRjVcMDAwXHUwMTE2IisKKyAgICAgICAgIlwwMDBcdTAxM0NcMDAwXDAwMVwwMDBcdTcwODBcMDAwXDAwM1wwMDBcMDMzXDAwMFwwMDBcMDAweFwwMDBcMDAxXDAwMCIrCisgICAgICAgICJcMDEwXDAwMFwwMzRcMDAwXDAwMFwwMDB4XDAwMFwwMDFcMDAwPFwwMDBcMDAxXDAwMFx1MDBGQ1wwMDBcMDAxXDAwMFx1NzA4MCIrCisgICAgICAgICJcMDAwXDAwM1wwMDBcMDEyXHVGRkZGXHVGRkZGXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDEwXDAwMFwwMTNcdUZGRkZcdUZGRkYiKworICAgICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDA8XDAwMFwwMDdcMDAwXHUwMEM1XDAwMFx1MDBDRFwwMDBcdTAwRDdcMDAwXHUwMEREIisKKyAgICAgICAgIlwwMDBcdTAwRjRcMDAwXHUwMEZEXDAwMFx1MDExRVwwMDBcMDAxXDAwMFx1NzA4MFwwMDBcMDA1XDAwMFwwMzZcMDAwXDAwMCIrCisgICAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMTBcMDAwXDAzNlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDA8XDAwMFwwMDEiKworICAgICAgICAiXDAwMFx1MDBGNlwwMDBcMDAxXDAwMFx1NzA4MFwwMDBcMDAyXDAwMFwwMjZcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIisKKyAgICAgICAgIlwwMTBcMDAwXDAyNVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDA8XDAwMFwwMDFcMDAwXHUwMEUwXDAwMFwwMDFcMDAwIisKKyAgICAgICAgIlx1NzA4MFwwMDBcMDAyXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwIisKKyAgICAgICAgIlwwMDFcMDAweFwwMDBcMDAxXDAwMDxcMDAwXDAwMVwwMDBcdTAwRDBcMDAwXDAwMVwwMDBcdTcwODBcMDAwXDAwNFwwMDAiKworICAgICAgICAiXDAxMFx1RkZGRlx1RkZGRlwwMDBcdTAwRDJcMDAwXDAwMFwwMDBcMDExXDAwMFwwMjBcdUZGRkZcdUZGRkZcMDAwXHUwMEQyIisKKyAgICAgICAgIlwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBcdTAwQ0VcMDAwXDAwMFwwMDBcdTdFOTBcMDAwXDAwN1wwMDBcdTAwQzlcMDAwIisKKyAgICAgICAgIlx1MDBEMlwwMDBcdTAwRThcMDAwXHUwMEZCXDAwMFx1MDEzRFwwMDBcdTAxODFcMDAwXHUwMUE1XDAwMFwwMDFcMDAwXHU3RTkwIisKKyAgICAgICAgIlwwMDBcMDAzXDAwMFwwMzNcMDAwXDAwMFwwMDB4XDAwMFwwMDFcMDAwXDAxMFwwMDBcMDM0XDAwMFwwMDBcMDAweFwwMDAiKworICAgICAgICAiXDAwMVwwMDA8XDAwMFwwMDFcMDAwXHUwMEM0XDAwMFwwMDFcMDAwXHU3RTkwXDAwMFwwMDJcdUZGRkZcdUZGRkZcMDAwIisKKyAgICAgICAgIlwwMDFcMDAweFwwMDBcMDAxXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwPFwwMDBcMDAxIisKKyAgICAgICAgIlwwMDBcdTAxMDBcMDAwXDAwMVwwMDBcdTdFOTBcMDAwXDAwNFx1RkZGRlx1RkZGMlx1RkZGRlx1RkZGRlwwMDBcMDAwXDAwMCIrCisgICAgICAgICJcMDAwXDAwMFwwMTFcdUZGRkZcdUZGRjJcdUZGRkZcdUZGRkZcMDAwXDAwMFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDAiKworICAgICAgICAiXHUwMEYzXDAwMFwwMDFcMDAwXHU4NTk4XDAwMFwwMTFcMDAwXDAwM1wwMDBcMDAwXDAwMHhcMDAwXDAwMFwwMDBcMDAyIisKKyAgICAgICAgIlx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMFwwMDA8XDAwMFwwMDJcMDAwXDAwMFwwMDBcdTAxMTFcMDAwXDAwMSIrCisgICAgICAgICJcMDAwXHU4NTk4XDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwXDAwMlx1RkZGRlx1RkZGRiIrCisgICAgICAgICJcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwPFwwMDBcMDAyXDAwMFx1MDEwRVwwMDBcdTAxMTBcMDAwXDAwMFwwMDBcdThDQTAiKworICAgICAgICAiXDAwMFwwMDdcMDAwXHUwMEFFXDAwMFx1MDEzMVwwMDBcdTAxOTdcMDAwXHUwMUE4XDAwMFx1MDFBQVwwMDBcdTAxQUVcMDAwIisKKyAgICAgICAgIlx1MDFCMVwwMDBcMDAxXDAwMFx1OENBMFwwMDBcMDAyXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMCIrCisgICAgICAgICJcMDExXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMDxcMDAwXDAwMlwwMDBcdTAwRjFcMDAwXHUwMEZGIisKKyAgICAgICAgIlwwMDBcMDAxXDAwMFx1OENBMFwwMDBcMDExXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMFwwMDJcdUZGRkYiKworICAgICAgICAiXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAxXDAwMDxcMDAwXDAwM1wwMDBcMDAxXDAwMFx1MDExNVwwMDBcdTAxMTdcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHU4Q0EwXDAwMFwwMTFcdUZGRkZcdUZGRkZcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwXDAwMlwwMDBcMDAxIisKKyAgICAgICAgIlx1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDFcMDAwPFwwMDBcMDAyXDAwMFx1MDEwRlwwMDBcdTAxMTNcMDAwXDAwMVwwMDAiKworICAgICAgICAiXHU4Q0EwXDAwMFwwMTFcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDFcMDAwXDAwMlx1RkZGRlx1RkZGRlwwMDAiKworICAgICAgICAiXDAwMVwwMDB4XDAwMFwwMDFcMDAwPFwwMDBcMDAxXDAwMFx1MDExMlwwMDBcMDAxXDAwMFx1OTNBOFwwMDBcMDExXHVGRkZGIisKKyAgICAgICAgIlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMFwwMDBcMDAyXHVGRkZGXHVGRkZGXDAwMFwwMDFcMDAweFwwMDBcMDAwXDAwMCIrCisgICAgICAgICJcMDM2XDAwMFwwMDFcMDAwXHUwMTE0XDAwMFwwMDBcMDAwXHU5QUIwXDAwMFwwMDVcMDAwXHUwMTMyXDAwMFx1MDE5NlwwMDAiKworICAgICAgICAiXHUwMTlCXDAwMFx1MDFBN1wwMDBcdTAxQjJcMDAwXDAwMVwwMDBcdTlBQjBcMDAwXDAxM1wwMDBcMDAxXDAwMFwwMDBcMDAwIisKKyAgICAgICAgInhcMDAwXDAwMVwwMDBcMDAyXDAwMFwwMDJcMDAwXDAwMFwwMDB4XDAwMFwwMDFcMDAwPFwwMDBcMDAxXDAwMFx1MDFBMyIrCisgICAgICAgICJcMDAwXDAwMVwwMDBcdTlBQjBcMDAwXDAwMlx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMVwwMDBcMDExXHVGRkZGIisKKyAgICAgICAgIlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMVwwMDA8XDAwMFwwMDFcMDAwXHUwMERFXDAwMFwwMDFcMDAwXHU5QUIwXDAwMCIrCisgICAgICAgICJcMDExXDAwMFwwMjdcdUZGRkZcdUZGRkZcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyN1x1RkZGRlx1RkZGRlwwMDAiKworICAgICAgICAiXDAwMFwwMDBcMDAwXDAwMDxcMDAwXDAwMVwwMDBcdTAxOEZcMDAwXDAwMFwwMDBcdUExQjhcMDAwXDAwMVwwMDBcdTAxQTIiKworICAgICAgICAiXDAwMFwwMDBcMDAwXHVBOEMwXDAwMFwwMTBcMDAwXHUwMTMzXDAwMFx1MDE5M1wwMDBcdTAxOUNcMDAwXHUwMTlEXDAwMCIrCisgICAgICAgICJcdTAxQTBcMDAwXHUwMUFDXDAwMFx1MDFBRlwwMDBcdTAxQjBcMDAwXDAwMVwwMDBcdUE4QzBcMDAwXDAwMlx1RkZGRlx1RkZGRiIrCisgICAgICAgICJcMDAwXDAwMVwwMDB4XDAwMFwwMDFcMDAwXDAxMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwXDAwMVwwMDA8XDAwMCIrCisgICAgICAgICJcMDAyXDAwMFx1MDBCOFwwMDBcdTAwRDVcMDAwXDAwMVwwMDBcdUE4QzBcMDAwXDAxMlwwMDBcMDAxXHVGRkZGXHVGRkZGIisKKyAgICAgICAgIlwwMDB4XDAwMFwwMDBcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMFx1MDBCNFwwMDBcMDAwXDAwMDxcMDAwXDAwMSIrCisgICAgICAgICJcMDAwXHUwMTkyXDAwMFwwMDFcMDAwXHVBOEMwXDAwMFwwMTFcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDEiKworICAgICAgICAiXDAwMFwwMDJcMDAwXDAxN1x1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDFcMDAwPFwwMDBcMDAzXDAwMFx1MDBCMFwwMDBcdTAxODYiKworICAgICAgICAiXDAwMFx1MDE4Q1wwMDBcMDAxXDAwMFx1QjM0Q1wwMDBcMDExXDAwMFwwMDFcdUZGRkZcdUZGRkZcMDAwXHUwMEE1XDAwMCIrCisgICAgICAgICJcMDAxXDAwMFwwMDJcMDAwXDAxN1x1RkZGRlx1RkZGRlwwMDBcdTAwQTVcMDAwXDAwMVwwMDA8XDAwMFwwMDFcMDAwXHUwMThEIisKKyAgICAgICAgIlwwMDBcMDAwXDAwMFx1QjZEMFwwMDBcMDAyXDAwMFx1MDEzNFwwMDBcdTAxOTBcMDAwXDAwMVwwMDBcdUI2RDBcMDAwXDAxMiIrCisgICAgICAgICJcMDAwXDAwMVx1RkZGRlx1RkZGRlwwMDB4XDAwMFwwMDBcMDAwXDAwMFx1RkZGRlx1RkZGRlwwMDBcMDAxXDAwMHhcMDAwIisKKyAgICAgICAgIlwwMDBcMDAwPFwwMDBcMDAxXDAwMFx1MDFBRFwwMDBcMDAwXDAwMFx1QzRFMFwwMDBcMDAyXDAwMFx1MDEzNVwwMDBcdTAxOUEiCisgICAgICAgIDsKKworICAgIC8qKgorICAgICAqIFJMRSBlbmNvZGVkIGZvcm0gb2YgSU5ERVhfQllfTkFNRV9BUlJBWS4KKyAgICAgKiBAc2VlIGNvbS5pYm0udXRpbC5VdGlsaXR5LlJMRVN0cmluZ1RvSW50QXJyYXkKKyAgICAgKiA+PiBHRU5FUkFURUQgREFUQTogRE8gTk9UIEVESVQgPDwKKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIElOREVYX0JZX05BTUVfQVJSQVlfUkxFID0KKyAgICAgICAgIlwwMDBcdTAxQjZcMDAwXHUwNTlGXDAwMFx1MDVEOVwwMDBcdTAyMURcMDAwXHUwMzdFXDAwMD1cMDAwXHUwMjg2XDAwMCIrCisgICAgICAgICJcdTAyQzRcMDAwXHUwM0U3XDAwMFx1MDJEM1wwMDBcdTAzRTdcMDAwXHUwMjg2XDAwMFx1MDJEM1wwMDBcdTAyODZcMDAwIisKKyAgICAgICAgIlx1MDI4NlwwMDBcdTAzNDBcMDAwXHUwMkQzXDAwMFx1MDM0MFwwMDBcdTAzN0VcMDAwXHUwMjg2XDAwMFx1MDJFM1wwMDAiKworICAgICAgICAiXHUwMjg2XDAwMFx1MDI4NlwwMDBcdTAzRTdcMDAwXHUwM0U3XDAwMFx1MDJEM1wwMDBcdTAyODZcMDAwXHUwMjlGXDAwMCIrCisgICAgICAgICJcdTAzNDBcMDAwXHUwMzQwXDAwMFx1MDNEOFwwMDBcdTAzRTdcMDAwXHUwM0U3XDAwMFx1MDM0MFwwMDBcdTAyRDNcMDAwIisKKyAgICAgICAgIlx1MDJEM1wwMDBcdTAyRDNcMDAwXHUwMjg2XDAwMFx1MDJEM1wwMDBcdTAzNDBcMDAwXHUwMzQwXDAwMFx1MDJEM1wwMDAiKworICAgICAgICAiXHUwMzQwXDAwMFx1MDM0MFwwMDBcdTAzNDBcMDAwXHUwM0U3XDAwMFx1MDI4NlwwMDBcdTAzRTdcMDAwXHUwMkQzXDAwMCIrCisgICAgICAgICJcdTAyRDNcMDAwXHUwMjg2XDAwMFx1MDI4NlwwMDBcdTAyRDNcMDAwXHUwMjg2XDAwMFx1MDI4NlwwMDBcdTAzNDBcMDAwIisKKyAgICAgICAgIlx1MDMyMlwwMDBcdTAzMzFcMDAwXDAyNlwwMDA9XDAwMFx1MDE3NlwwMDBcdTAxNzZcMDAwXHUwMjVBXDAwMFx1MDE3NiIrCisgICAgICAgICJcMDAwXHUwMUVGXDAwMFx1MDFCM1wwMDBcdTAyMURcMDAwXHUwMEI3XDAwMFx1MDE3NlwwMDBcdTAxNjdcMDAwcVwwMDAiKworICAgICAgICAiXHUwMjFEXDAwMHFcMDAwXHUwMDkwXDAwMFx1MDE3NlwwMDBcdTAyMURcMDAwXHUwMjFEXDAwMFx1MDEwM1wwMDBcdTAwOTAiKworICAgICAgICAiXDAwMHFcMDAwXHUwMjFEXDAwMFx1MDBDNlwwMDBcdTAxQzJcMDAwXHUwMTc2XDAwMFx1MDI4NlwwMDBVXDAwMGlcMDAwIisKKyAgICAgICAgInFcMDAwXHUwMTNGXDAwMFx1MDE3NlwwMDBxXDAwMFx1MDEwM1wwMDBcdTAwRTRcMDAwXHUwMjFEXDAwMFx1MDFBMVwwMDAiKworICAgICAgICAiXHUwMjNDXDAwMFx1MDE5MlwwMDBcdTAxMTJcMDAwXHUwMTc2XDAwMFx1MDE3NlwwMDBcdTAwRDVcMDAwXHUwMTAzXDAwMCIrCisgICAgICAgICJcdTAxNzZcMDAwXHUwMUExXDAwMFx1MDEyMVwwMDBpXDAwMFx1QTVBNVwwMDBcMDA0XDAwMFx1MDEwM1wwMDBxXDAwMFx1MDEzRiIrCisgICAgICAgICJcMDAwXHUwMTAzXDAwMFx1MDIxRFwwMDA9XDAwMFx1MDEzRlwwMDBcdTAxNzZcMDAwXHUwMTU4XDAwMFVcMDAwXHUwMTNGIisKKyAgICAgICAgIlwwMDBcdTAyMURcMDAwXHUwMDg4XDAwMFx1MDE3NlwwMDBcdTAxNzZcMDAwcVwwMDBcdTAyMURcMDAwXHUwMDkwXDAwMCIrCisgICAgICAgICJcdTAwOTBcMDAwXHUwMDkwXDAwMFx1MDIyRFwwMDBcdTAwOTBcMDAwXHUwMjRCXDAwMFx1MDEzRlwwMDBcdTAxNzZcMDAwIisKKyAgICAgICAgIlx1MDEzRlwwMDBcdTAxM0ZcMDAwXHUwMTNGXDAwMD1cMDAwXHUwMjZCXDAwMFx1MDA5MFwwMDBcdTAxMDNcMDAwXHUwMTNGIisKKyAgICAgICAgIlwwMDBcdTAyMURcMDAwaVwwMDBcdTAxMzBcMDAwXHUwMTc2XDAwMFx1MDE3NlwwMDBcdTAxNzZcMDAwXHUwMDkwXDAwMCIrCisgICAgICAgICJcdTAwOTBcMDAwXHUwMjFEXDAwMFx1MDA4OFwwMDBcdTAxMDNcMDAwXHUwMUUwXDAwMFx1MDE3NlwwMDBcdTAyNUFcMDAwIisKKyAgICAgICAgIlx1MDI3NlwwMDBcdTAyMERcMDAwXHVBNUE1XDAwMFwwMDRcMDAwXHUwMTc2XDAwMFx1MDA4OFwwMDBcdTAwRTRcMDAwXHUwMUExIisKKyAgICAgICAgIlwwMDBcdTAxM0ZcMDAwVVwwMDBcdTAxNzZcMDAwVVwwMDBVXDAwMFx1MDBBOFwwMDA9XDAwMHFcMDAwXHUwNEZEXDAwMCIrCisgICAgICAgICJcdTA0RDJcMDAwXHUwNUJGXDAwMFx1MDRCMFwwMDBcdTA2N0JcMDAwXHUwMUQxXDAwMFx1MDNFN1wwMDBcdTA0QjBcMDAwIisKKyAgICAgICAgIlx1MDJFM1wwMDBcdTAzRTdcMDAwXHUwNEJCXDAwMFx1MDNDOVwwMDBcdTA2NUNcMDAwXHUwNDU3XDAwMFx1MDQ4OFwwMDAiKworICAgICAgICAiXHUwNDZFXDAwMFx1MDNGRFwwMDBcdTAzRTdcMDAwXHUwNDQ4XDAwMFx1MDREMlwwMDBcdTAzOEVcMDAwXHUwNDk4XDAwMCIrCisgICAgICAgICJcdTA0RkRcMDAwXHUwNEE3XDAwMFx1MDU3MlwwMDBcdTA1MTdcMDAwXHUwNEIwXDAwMFx1MDM1MVwwMDBcdTA0QjBcMDAwIisKKyAgICAgICAgIlx1MDU2OFwwMDBcdTA0MzBcMDAwXHUwNDZFXDAwMFx1MDM2RlwwMDBcdTA1MTdcMDAwXHUwNTU5XDAwMFx1MDRERlwwMDAiKworICAgICAgICAiXHUwNTRBXDAwMFx1MDREMlwwMDBcdTA1NjhcMDAwXHUwMzYwXDAwMFx1MDQ2QVwwMDBcdTA2NUNcMDAwXHUwNDc4XDAwMCIrCisgICAgICAgICJcdTA1MTdcMDAwXHUwNEFDXDAwMFx1MDRFRVwwMDBcdTA0RkRcMDAwXHUwNEZEXDAwMFx1MDNFN1wwMDBcdTA1MTdcMDAwIisKKyAgICAgICAgIlx1MDYyRlwwMDBcdTA0RkRcMDAwXHUwNTNCXDAwMFx1MDQzMFwwMDBcdTAzOURcMDAwXHUwNEJCXDAwMFx1MDRCQlwwMDAiKworICAgICAgICAiXHUwNDU3XDAwMFx1MDREMlwwMDBcdTA0RDJcMDAwXHUwNTY4XDAwMFx1MDNFN1wwMDBcdTA0QkJcMDAwXHUwNENEXDAwMCIrCisgICAgICAgICJcdTAzRTdcMDAwXHUwNDFCXDAwMFx1MDQxQlwwMDBcdTA0MUJcMDAwXHUwNEQyXDAwMFx1MDVDOVwwMDBcdTA0NkVcMDAwIisKKyAgICAgICAgIlx1MDU5MFwwMDBcdTA1MTdcMDAwXHUwNEZEXDAwMFx1MDUyQ1wwMDBcdTA0NkVcMDAwXHUwNDM5XDAwMFx1MDQyMVwwMDAiKworICAgICAgICAiXHUwNEIwXDAwMFx1MDU2OFwwMDBcdTA1MDhcMDAwXHUwNTE3XDAwMFx1MDREMlwwMDBcdTA1QzlcMDAwXHUwNTgxXDAwMCIrCisgICAgICAgICJcdTA0ODhcMDAwXHUwNDU3XDAwMFx1MDI3NlwwMDBcdTAxQTFcMDAwXHUwMkFFXDAwMFx1MDI3MVwwMDBcdTAyQUVcMDAwIisKKyAgICAgICAgIlx1MDJFM1wwMDBcdTAyQUVcMDAwXHUwMjg2XDAwMFx1MDI2QlwwMDBcdTAyODZcMDAwXHUwMUZFXDAwMFx1MDVBRlwwMDAiKworICAgICAgICAiXHUwNUVBXDAwMFx1MDVBRlwwMDBcdTA1OUZcMDAwXHUwNUZBXDAwMFx1MDVFQVwwMDBcdTA2MDlcMDAwXHUwNUQ5XDAwMCIrCisgICAgICAgICJcdTA0RkRcMDAwXHUwNUQ5XDAwMFx1MDI1QVwwMDBcdTA0QjBcMDAwXHUwMzQwXDAwMFx1MDMxMlwwMDBcdTAyMERcMDAwIisKKyAgICAgICAgIlx1MDA5MFwwMDBcdTA1MTdcMDAwXHUwM0U3XDAwMFx1MDJFM1wwMDBcdTAzOURcMDAwXHUwMTNGXDAwMFx1MDI4NlwwMDAiKworICAgICAgICAiXHUwMjcxXDAwMFwwMTVcMDAwXDAwNFwwMDBcMDAwXDAwMFx1MDI2QlwwMDBcdTAyMURcMDAwXHUwMTc2XDAwMFx1MDEwMyIrCisgICAgICAgICJcMDAwXHUwMDg4XDAwMGlcMDAwUFwwMDA4XDAwMFx1MDJEM1wwMDBcdTA1QkZcMDAwXHUwNjE4XDAwMFx1MDY1MVwwMDAiKworICAgICAgICAiXHUwNjlCXDAwMFx1MDZBRlwwMDBcdTAzNDBcMDAwXHUwM0U3XDAwMFx1MDQzMFwwMDBcdTA0NkVcMDAwXHUwNEIwXDAwMCIrCisgICAgICAgICJcdTA0RDJcMDAwXHUwNEZEXDAwMFx1MDU2OFwwMDBcdTAyODZcMDAwXHUwMjg2XDAwMFx1MDJFM1wwMDBcdTAyRTNcMDAwIisKKyAgICAgICAgIlx1MDM5RFwwMDBcdTAyQUVcMDAwXHVBNUE1XDAwMFwwMDRcMDAwXHUwMkUzXDAwMFx1MDM5RFwwMDBcdTAyRTNcMDAwXHUwMzlEIisKKyAgICAgICAgIlwwMDBcdTAyRTNcMDAwXHUwMkFFXDAwMFx1MDJFM1wwMDBcdTAzOURcMDAwXHUwMzlEXDAwMFx1MDNCOVwwMDBcdTAzOUQiKworICAgICAgICAiXDAwMFx1MDJBRVwwMDBcdTAyRTNcMDAwXHUwMkFFXDAwMFx1MDJFM1wwMDBcdTAyRTNcMDAwXHUwMkUzXDAwMFx1MDNCOSIrCisgICAgICAgICJcMDAwXHUwMkUzXDAwMFx1MDQwQ1wwMDBcdTAyRTNcMDAwXHUwMkUzXDAwMFx1MDJFM1wwMDBcdTAzOURcMDAwXHUwMkUzIisKKyAgICAgICAgIlwwMDBcdTA0NTdcMDAwXHUwMkUzXDAwMFx1MDJFM1wwMDBcdTAzOURcMDAwXHUwMkUzXDAwMFx1MDM5RFwwMDBcdTAyRTMiKworICAgICAgICAiXDAwMFx1MDM5RFwwMDBcdTAyRTNcMDAwXHUwMzlEXDAwMFx1MDJFM1wwMDBcdTAyRTNcMDAwXHUwMkUzXDAwMFx1MDM0MCIrCisgICAgICAgICJcMDAwXHUwMkUzXDAwMFx1MDJFM1wwMDBcdTAzOURcMDAwXHUwMkUzXDAwMFx1MDI4NlwwMDBcMDE1XDAwMFx1MDEwM1wwMDAiKworICAgICAgICAiXHUwNEE3XDAwMFx1MDNFN1wwMDBcdTA0QjBcMDAwXHUwNEQyXDAwMFx1MDRDRFwwMDBcdTAzRTdcMDAwXHUwNDZFXDAwMCIrCisgICAgICAgICJcdTA0MzBcMDAwXHUwNDZFXDAwMFx1MDQzMFwwMDBcdTAzRTdcMDAwXHUwNDMwXDAwMFx1MDU2OFwwMDBcdTAzMTJcMDAwIisKKyAgICAgICAgIlwwMDRcMDAwcVwwMDBcdTA0NTdcMDAwXHUwNjdCXDAwMFx1MDQ3OFwwMDBpXDAwMFx1MDE3NlwwMDBVXDAwMFwwMDRcMDAwIisKKyAgICAgICAgIlx1MDY3QlwwMDBcdTA2OENcMDAwXHUwMEY0XDAwMFx1MDYzRVwwMDBcdTA2OUJcMDAwXDAxNVwwMDBcdTA2NkNcMDAwXHUwNjUxIisKKyAgICAgICAgIlwwMDBcdTAwODhcMDAwOFwwMDBcdTA2MThcMDAwXHUwNUJGXDAwMFwwMTVcMDAwXDAxNVwwMDBcdTA2QUZcMDAwXHUwNjE4IisKKyAgICAgICAgIlwwMDBcdTA2NTFcMDAwXHUwNjUxXDAwMDRcMDAwXDAwNFwwMDBcdTA2NTFcMDAwXDAwNFwwMDBcdTA2NERcMDAwXHUwNjIwIisKKyAgICAgICAgIlwwMDBcMDA0XDAwMFx1MDU2OFwwMDBQXDAwMFx1MDYxOFwwMDBcdTA1QkZcMDAwJVwwMDBcdTA1QkZcMDAwXDAxNVwwMDAiKworICAgICAgICAiXHUwNjUxXDAwMFx1MDZBMFwwMDBcdTA1QkZcMDAwXHUwNjUxXDAwMFx1MDY1MVwwMDBcdTA1QkZcMDAwXHUwNjE4XDAwMCIrCisgICAgICAgICJcdTAyODZcMDAwXHUwNEQyXDAwMFx1MDJBRSIKKyAgICAgICAgOworCisgICAgLyoqCisgICAgICogUkxFIGVuY29kZWQgZm9ybSBvZiBJTkRFWF9CWV9PRkZTRVQuCisgICAgICogQHNlZSBjb20uaWJtLnV0aWwuVXRpbGl0eS5STEVTdHJpbmdUb0ludEFycmF5CisgICAgICogPj4gR0VORVJBVEVEIERBVEE6IERPIE5PVCBFRElUIDw8CisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFWF9CWV9PRkZTRVRfUkxFID0KKyAgICAgICAgIlwwMDBcdTAyMkJcdUZGRkZcdTU3NDBcMDAwXHUwMTI3XDAwMFwwMDFcMDAwXHUwMTI3XHVGRkZGXHU2NTUwXDAwMFx1MDE4QiIrCisgICAgICAgICJcMDAwXDAwNlwwMDBcdTAxMjZcMDAwXHUwMTgzXDAwMFx1MDE4QlwwMDBcdTAxOUZcMDAwXHUwMUExXDAwMFx1MDFBNFx1RkZGRiIrCisgICAgICAgICJcdTczNjBcMDAwXHUwMTk4XDAwMFwwMTBcMDAwOVwwMDBcdTAxMjVcMDAwXHUwMTczXDAwMFx1MDE5MVwwMDBcdTAxOTgiKworICAgICAgICAiXDAwMFx1MDE5OVwwMDBcdTAxQTlcMDAwXHUwMUFCXHVGRkZGXHU3QTY4XDAwMFx1MDE5RVwwMDBcMDAxXDAwMFx1MDE5RSIrCisgICAgICAgICJcdUZGRkZcdTgxNzBcMDAwOlwwMDBcMDA3XDAwMFwwMDRcMDAwOlwwMDBxXDAwMFx1MDA4OFwwMDBcdTAwQUFcMDAwXHUwMTJGIisKKyAgICAgICAgIlwwMDBcdTAxOTVcdUZGRkZcdThGODBcMDAwdVwwMDBcMDEwXDAwMFRcMDAwdVwwMDBcdTAwQTVcMDAwXHUwMEE3XDAwMCIrCisgICAgICAgICJcdTAwQThcMDAwXHUwMTJFXDAwMFx1MDE4QVwwMDBcdTAxQTZcdUZGRkZcdTlEOTBcMDAwVlwwMDBcMDE2XDAwMEVcMDAwIisKKyAgICAgICAgIkdcMDAwTlwwMDBVXDAwMFZcMDAwWVwwMDBoXDAwMG1cMDAwe1wwMDBcdTAwOEVcMDAwXHUwMEFCXDAwMFx1MDEyRFwwMDAiKworICAgICAgICAiXHUwMTg0XDAwMFx1MDE4OFx1RkZGRlx1QUJBMFwwMDBNXDAwMFwwMjZcMDAwQlwwMDBIXDAwME1cMDAwUFwwMDBbXDAwMCIrCisgICAgICAgICJjXDAwMHhcMDAwfVwwMDB+XDAwMFx1MDA3RlwwMDBcdTAwODFcMDAwXHUwMDhBXDAwMFx1MDA5M1wwMDBcdTAwOTRcMDAwIisKKyAgICAgICAgIlx1MDA5NlwwMDBcdTAwQTFcMDAwXHUwMEEyXDAwMFx1MDBBOVwwMDBcdTAxMURcMDAwXHUwMTJDXDAwMFx1MDE4RVwwMDAiKworICAgICAgICAiXHUwMTk0XHVGRkZGXHVCOUIwXDAwMGxcMDAwXDAzNFwwMDBEXDAwMExcMDAwV1wwMDBaXDAwMGBcMDAwZFwwMDBnXDAwMCIrCisgICAgICAgICJpXDAwMGpcMDAwa1wwMDBsXDAwMG5cMDAwb1wwMDByXDAwMHRcMDAwdlwwMDBcdTAwODNcMDAwXHUwMDg1XDAwMFx1MDA4NiIrCisgICAgICAgICJcMDAwXHUwMDg3XDAwMFx1MDA4QlwwMDBcdTAwOENcMDAwXHUwMDhGXDAwMFx1MDA5N1wwMDBcdTAwQTRcMDAwXHUwMTIyIisKKyAgICAgICAgIlwwMDBcdTAxMkJcMDAwXHUwMTc0XHVGRkZGXHVDN0MwXDAwMFx1MDA5MlwwMDAkXDAwMDtcMDAwPFwwMDA+XDAwMD9cMDAwIisKKyAgICAgICAgIkBcMDAwQ1wwMDBJXDAwMFFcMDAwUlwwMDBYXDAwMF1cMDAwX1wwMDBhXDAwMGJcMDAwZVwwMDBmXDAwMHNcMDAweVwwMDAiKworICAgICAgICAielwwMDBcdTAwODRcMDAwXHUwMDkwXDAwMFx1MDA5MVwwMDBcdTAwOTJcMDAwXHUwMDk4XDAwMFx1MDA5OVwwMDBcdTAwOUQiKworICAgICAgICAiXDAwMFx1MDA5RVwwMDBcdTAwOUZcMDAwXHUwMEEwXDAwMFx1MDBBM1wwMDBcdTAwQTZcMDAwXHUwMEIxXDAwMFx1MDEwNCIrCisgICAgICAgICJcMDAwXHUwMTBEXDAwMFx1MDEyQVwwMDBcdTAxODlcdUZGRkZcdUNFQzhcMDAwXHUwMDlDXDAwMFwwMDJcMDAwXHUwMDlDIisKKyAgICAgICAgIlwwMDBcdTAxMUNcdUZGRkZcdUQ1RDBcMDAwRlwwMDBcMDIzXDAwMFwwMDJcMDAwPVwwMDBBXDAwMEZcMDAwSlwwMDBLXDAwMCIrCisgICAgICAgICJPXDAwMFwxMzRcMDAwXlwwMDBwXDAwMHdcMDAwfFwwMDBcdTAwODBcMDAwXHUwMDgyXDAwMFx1MDA4RFwwMDBcdTAwOTUiKworICAgICAgICAiXDAwMFx1MDA5QVwwMDBcdTAxMThcMDAwXHUwMTI5XHVGRkZGXHVFM0UwXDAwMFx1MDA4OVwwMDBcMDAzXDAwMFx1MDA4OSIrCisgICAgICAgICJcMDAwXHUwMTBCXDAwMFx1MDEyOFx1RkZGRlx1RjFGMFwwMDBcdTAxMDNcMDAwXDAwNFwwMDBcdTAwOUJcMDAwXHUwMTAzIisKKyAgICAgICAgIlwwMDBcdTAxMDZcMDAwXHUwMTI0XDAwMFwwMDBcMDAwXHUwMTcyXDAwMCBcMDAwXDAwNVwwMDBcMDA2XDAwMFwwMTJcMDAwIisKKyAgICAgICAgIlwwMTRcMDAwXDAxNVwwMDBcMDIyXDAwMFwwMjRcMDAwXDAyNVwwMDBcMDMxXDAwMFwwMzJcMDAwJFwwMDAtXDAwMDFcMDAwIisKKyAgICAgICAgIjJcMDAwNFwwMDA1XDAwMFNcMDAwXHUwMTA1XDAwMFx1MDEwN1wwMDBcdTAxMDlcMDAwXHUwMTBBXDAwMFx1MDEwQ1wwMDAiKworICAgICAgICAiXHUwMTIzXDAwMFx1MDEzRVwwMDBcdTAxM0ZcMDAwXHUwMTQzXDAwMFx1MDE0Q1wwMDBcdTAxNTJcMDAwXHUwMTU0XDAwMCIrCisgICAgICAgICJcdTAxNzJcMDAwXHUwMUIzXDAwMFx1MDFCNVwwMDBcdTBFMTBcMDAwXHUwMTVDXDAwMDJcMDAwXDAxMFwwMDBcMDEzXDAwMCIrCisgICAgICAgICJcMDE3XDAwMFwwMjNcMDAwXDAzMFwwMDAhXDAwMFwwNDJcMDAwI1wwMDAlXDAwMChcMDAwL1wwMDAwXDAwMDNcMDAwN1wwMDAiKworICAgICAgICAiOFwwMDBcdTAwQjRcMDAwXHUwMTA4XDAwMFx1MDExQlwwMDBcdTAxMjBcMDAwXHUwMTMwXDAwMFx1MDE0MFwwMDBcdTAxNDEiKworICAgICAgICAiXDAwMFx1MDE0NFwwMDBcdTAxNDVcMDAwXHUwMTQ2XDAwMFx1MDE0N1wwMDBcdTAxNDlcMDAwXHUwMTRCXDAwMFx1MDE0RCIrCisgICAgICAgICJcMDAwXHUwMTUzXDAwMFx1MDE1NVwwMDBcdTAxNTZcMDAwXHUwMTU3XDAwMFx1MDE1OVwwMDBcdTAxNUJcMDAwXHUwMTVDIisKKyAgICAgICAgIlwwMDBcdTAxNURcMDAwXHUwMTVGXDAwMFx1MDE2MVwwMDBcdTAxNjJcMDAwXHUwMTY0XDAwMFx1MDE2NlwwMDBcdTAxNjgiKworICAgICAgICAiXDAwMFx1MDE2QVwwMDBcdTAxNkJcMDAwXHUwMTZDXDAwMFx1MDE2RVwwMDBcdTAxNkZcMDAwXHUwMTcxXDAwMFx1MDE4MiIrCisgICAgICAgICJcMDAwXHUxQzIwXDAwMFwwMjFcMDAwJlwwMDBcMDAzXDAwMFwwMTZcMDAwXDAyMFwwMDBcMDIxXDAwMFwwMzNcMDAwXDAzNCIrCisgICAgICAgICJcMDAwXDAzNVwwMDAgXDAwMCZcMDAwJ1wwMDApXDAwMCpcMDAwK1wwMDA2XDAwMFx1MDBCN1wwMDBcdTAwQzBcMDAwXHUwMEM3IisKKyAgICAgICAgIlwwMDBcdTAwQ0NcMDAwXHUwMEQzXDAwMFx1MDBFMlwwMDBcdTAxMUFcMDAwXHUwMTIxXDAwMFx1MDEzNlwwMDBcdTAxNDIiKworICAgICAgICAiXDAwMFx1MDE0OFwwMDBcdTAxNEFcMDAwXHUwMTRFXDAwMFx1MDE0RlwwMDBcdTAxNTBcMDAwXHUwMTUxXDAwMFx1MDE1OCIrCisgICAgICAgICJcMDAwXHUwMTVFXDAwMFx1MDE2M1wwMDBcdTAxNjVcMDAwXHUwMTY3XDAwMFx1MDE2OVwwMDBcdTAxNkRcMDAwXHUwMTcwIisKKyAgICAgICAgIlwwMDBcdTJBMzBcMDAwXDAwN1wwMDBcMDI1XDAwMFwwMDdcMDAwXDAxMVwwMDBcMDI2XDAwMFwwMjdcMDAwXDAzNlwwMDAiKworICAgICAgICAiXDAzN1wwMDAsXDAwMC5cMDAwXHUwMEIyXDAwMFx1MDBCNVwwMDBcdTAwQkNcMDAwXHUwMEJEXDAwMFx1MDBEQ1wwMDBcdTAwRTkiKworICAgICAgICAiXDAwMFx1MDBFQ1wwMDBcdTAxMUZcMDAwXHUwMTM3XDAwMFx1MDE1QVwwMDBcdTAxNzZcMDAwXHUwMTdBXDAwMFx1MDE3RiIrCisgICAgICAgICJcMDAwXHUyQkQ4XDAwMFx1MDBFRlwwMDBcMDAzXDAwMFx1MDBFRFwwMDBcdTAwRUVcMDAwXHUwMEVGXDAwMFx1MzEzOFwwMDAiKworICAgICAgICAiXHUwMEY5XDAwMFwwMDFcMDAwXHUwMEY5XDAwMFx1Mzg0MFwwMDBcdTAxMDJcMDAwXDAxNVwwMDBcdTAwQjlcMDAwXHUwMEJFIisKKyAgICAgICAgIlwwMDBcdTAwQ0FcMDAwXHUwMEUxXDAwMFx1MDBFNVwwMDBcdTAwRjhcMDAwXHUwMTAyXDAwMFx1MDEzOFwwMDBcdTAxNjAiKworICAgICAgICAiXDAwMFx1MDE3Q1wwMDBcdTAxN0VcMDAwXHUwMTgwXDAwMFx1MDE4NVwwMDBcdTNGNDhcMDAwXHUwMEQ0XDAwMFwwMDFcMDAwIisKKyAgICAgICAgIlx1MDBENFwwMDBcdTQ2NTBcMDAwXHUwMEQ2XDAwMFwwMTRcMDAwXHUwMEJBXDAwMFx1MDBCQlwwMDBcdTAwQzFcMDAwXHUwMENCIisKKyAgICAgICAgIlwwMDBcdTAwRDZcMDAwXHUwMEYyXDAwMFx1MDBGN1wwMDBcdTAxMDFcMDAwXHUwMTM5XDAwMFx1MDE3QlwwMDBcdTAxN0QiKworICAgICAgICAiXDAwMFx1MDE4N1wwMDBcdTRENThcMDAwXHUwMEMzXDAwMFwwMDJcMDAwXHUwMEMzXDAwMFx1MDE3NVwwMDBcdTUwRENcMDAwIisKKyAgICAgICAgIlx1MDBEOFwwMDBcMDAxXDAwMFx1MDBEOFwwMDBcdTU0NjBcMDAwXHUwMEM4XDAwMFwwMTRcMDAwXHUwMEFGXDAwMFx1MDBCMyIrCisgICAgICAgICJcMDAwXHUwMEI2XDAwMFx1MDBDNlwwMDBcdTAwQzhcMDAwXHUwMEUzXDAwMFx1MDBFNFwwMDBcdTAwRUFcMDAwXHUwMEZBIisKKyAgICAgICAgIlwwMDBcdTAxMTlcMDAwXHUwMTNBXDAwMFx1MDE3N1wwMDBcdTVCNjhcMDAwXHUwMEVCXDAwMFwwMDJcMDAwXHUwMEVCXDAwMCIrCisgICAgICAgICJcdTAxNzlcMDAwXHU2MjcwXDAwMFx1MDBGMFwwMDBcMDE0XDAwMFx1MDBBRFwwMDBcdTAwQkZcMDAwXHUwMENGXDAwMFx1MDBEMSIrCisgICAgICAgICJcMDAwXHUwMEQ5XDAwMFx1MDBFNlwwMDBcdTAwRTdcMDAwXHUwMEYwXDAwMFx1MDBGRVwwMDBcdTAxM0JcMDAwXHUwMTc4IisKKyAgICAgICAgIlwwMDBcdTAxQjRcMDAwXHU3MDgwXDAwMFx1MDBGNFwwMDBcMDI0XDAwMFx1MDBBQ1wwMDBcdTAwQzJcMDAwXHUwMEM1XDAwMCIrCisgICAgICAgICJcdTAwQ0RcMDAwXHUwMENFXDAwMFx1MDBEMFwwMDBcdTAwRDdcMDAwXHUwMERBXDAwMFx1MDBEQlwwMDBcdTAwRERcMDAwIisKKyAgICAgICAgIlx1MDBERlwwMDBcdTAwRTBcMDAwXHUwMEY0XDAwMFx1MDBGNVwwMDBcdTAwRjZcMDAwXHUwMEZDXDAwMFx1MDBGRFwwMDAiKworICAgICAgICAiXHUwMTE2XDAwMFx1MDExRVwwMDBcdTAxM0NcMDAwXHU3RTkwXDAwMFx1MDBGQlwwMDBcMDEyXDAwMFx1MDBDNFwwMDBcdTAwQzkiKworICAgICAgICAiXDAwMFx1MDBEMlwwMDBcdTAwRThcMDAwXHUwMEYzXDAwMFx1MDBGQlwwMDBcdTAxMDBcMDAwXHUwMTNEXDAwMFx1MDE4MSIrCisgICAgICAgICJcMDAwXHUwMUE1XDAwMFx1ODU5OFwwMDBcdTAxMTFcMDAwXDAwNFwwMDBcMDAwXDAwMFx1MDEwRVwwMDBcdTAxMTBcMDAwIisKKyAgICAgICAgIlx1MDExMVwwMDBcdThDQTBcMDAwXHUwMTE3XDAwMFwwMTdcMDAwXDAwMVwwMDBcdTAwQUVcMDAwXHUwMEYxXDAwMFx1MDBGRiIrCisgICAgICAgICJcMDAwXHUwMTBGXDAwMFx1MDExMlwwMDBcdTAxMTNcMDAwXHUwMTE1XDAwMFx1MDExN1wwMDBcdTAxMzFcMDAwXHUwMTk3IisKKyAgICAgICAgIlwwMDBcdTAxQThcMDAwXHUwMUFBXDAwMFx1MDFBRVwwMDBcdTAxQjFcMDAwXHU5M0E4XDAwMFx1MDExNFwwMDBcMDAxXDAwMCIrCisgICAgICAgICJcdTAxMTRcMDAwXHU5QUIwXDAwMFx1MDE5NlwwMDBcMDEwXDAwMFx1MDBERVwwMDBcdTAxMzJcMDAwXHUwMThGXDAwMFx1MDE5NiIrCisgICAgICAgICJcMDAwXHUwMTlCXDAwMFx1MDFBM1wwMDBcdTAxQTdcMDAwXHUwMUIyXDAwMFx1QTFCOFwwMDBcdTAxQTJcMDAwXDAwMVwwMDAiKworICAgICAgICAiXHUwMUEyXDAwMFx1QThDMFwwMDBcdTAxOENcMDAwXDAxNlwwMDBcdTAwQjBcMDAwXHUwMEI4XDAwMFx1MDBENVwwMDBcdTAxMzMiKworICAgICAgICAiXDAwMFx1MDE4NlwwMDBcdTAxOENcMDAwXHUwMTkyXDAwMFx1MDE5M1wwMDBcdTAxOUNcMDAwXHUwMTlEXDAwMFx1MDFBMCIrCisgICAgICAgICJcMDAwXHUwMUFDXDAwMFx1MDFBRlwwMDBcdTAxQjBcMDAwXHVCMzRDXDAwMFx1MDE4RFwwMDBcMDAxXDAwMFx1MDE4RFwwMDAiKworICAgICAgICAiXHVCNkQwXDAwMFx1MDE5MFwwMDBcMDAzXDAwMFx1MDEzNFwwMDBcdTAxOTBcMDAwXHUwMUFEXDAwMFx1QzRFMFwwMDBcdTAxOUEiKworICAgICAgICAiXDAwMFwwMDJcMDAwXHUwMTM1XDAwMFx1MDE5QSIKKyAgICAgICAgOworCisgICAgLyoqCisgICAgICogUkxFIGVuY29kZWQgZm9ybSBvZiBJTkRFWF9CWV9DT1VOVFJZLgorICAgICAqIEBzZWUgY29tLmlibS51dGlsLlV0aWxpdHkuUkxFU3RyaW5nVG9JbnRBcnJheQorICAgICAqID4+IEdFTkVSQVRFRCBEQVRBOiBETyBOT1QgRURJVCA8PAorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERVhfQllfQ09VTlRSWV9STEUgPQorICAgICAgICAiXDAwMFx1MDM5MlwwMDBcMDAwXDAwMCZcMDAwXHUwMEVEXDAwMFx1MDBFRVwwMDBcdTAwRUZcMDAwXHUwMTFCXDAwMFx1MDEyMSIrCisgICAgICAgICJcMDAwXHUwMTIzXDAwMFx1MDEyNFwwMDBcdTAxMjVcMDAwXHUwMTI2XDAwMFx1MDEyN1wwMDBcdTAxMjhcMDAwXHUwMTI5IisKKyAgICAgICAgIlwwMDBcdTAxMkFcMDAwXHUwMTJCXDAwMFx1MDEyQ1wwMDBcdTAxMkRcMDAwXHUwMTJFXDAwMFx1MDEyRlwwMDBcdTAxMzAiKworICAgICAgICAiXDAwMFx1MDEzMVwwMDBcdTAxMzJcMDAwXHUwMTMzXDAwMFx1MDEzNFwwMDBcdTAxMzVcMDAwXHUwMTM2XDAwMFx1MDEzNyIrCisgICAgICAgICJcMDAwXHUwMTM4XDAwMFx1MDEzOVwwMDBcdTAxM0FcMDAwXHUwMTNCXDAwMFx1MDEzQ1wwMDBcdTAxM0RcMDAwXHUwMTNFIisKKyAgICAgICAgIlwwMDBcdTAxM0ZcMDAwXHUwMTcyXDAwMFx1MDE4MlwwMDBcdTAxQjNcMDAwXHUwMUI1XDAwMFwwMDNcMDAwXDAwMVwwMDAiKworICAgICAgICAiXHUwMTQxXDAwMFwwMDRcMDAwXDAwMVwwMDBcdTAwQ0FcMDAwXDAwNVwwMDBcMDAxXDAwMFx1MDBENFwwMDBcMDA2XDAwMCIrCisgICAgICAgICJcMDAxXDAwMDxcMDAwXDAxMFwwMDBcMDAxXDAwMDtcMDAwXDAxM1wwMDBcMDAxXDAwMFx1MDE2OFwwMDBcMDE0XDAwMFwwMDIiKworICAgICAgICAiXDAwMFx1MDEwMlwwMDBcdTAxODVcMDAwXDAxNVwwMDBcMDAxXDAwMFJcMDAwXDAxNlwwMDBcMDAxXDAwMCVcMDAwXDAyMCIrCisgICAgICAgICJcMDAwXDAxMFwwMDBcdTAwQUNcMDAwXHUwMEFEXDAwMFx1MDBBRVwwMDBcdTAwQUZcMDAwXHUwMEIwXDAwMFx1MDBCMVwwMDAiKworICAgICAgICAiXHUwMEIyXDAwMFx1MDBCM1wwMDBcMDIxXDAwMFwwMDZcMDAwXDAwMlwwMDBGXDAwMEpcMDAwT1wwMDBwXDAwMHxcMDAwIisKKyAgICAgICAgIlwwMjJcMDAwXDAwMVwwMDBcdTAxQTRcMDAwXDAyM1wwMDBcMDAxXDAwMFx1MDE2Q1wwMDBcMDI0XDAwMFwwMTRcMDAwXDAwMCIrCisgICAgICAgICJcMDAwXDAwMVwwMDBcdTAxMEVcMDAwXHUwMTBGXDAwMFx1MDExMFwwMDBcdTAxMTFcMDAwXHUwMTEyXDAwMFx1MDExM1wwMDAiKworICAgICAgICAiXHUwMTE0XDAwMFx1MDExNVwwMDBcdTAxMTZcMDAwXHUwMTE3XDAwMFwwMjZcMDAwXDAwMVwwMDA+XDAwMFwwMzFcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHUwMEJFXDAwMCBcMDAwXDAwMVwwMDBcdTAxNjJcMDAwIVwwMDBcMDAxXDAwMEBcMDAwI1wwMDBcMDAyXDAwMCIrCisgICAgICAgICJcdTAwQzhcMDAwXHUwMTE5XDAwMCRcMDAwXDAwMVwwMDBcdTAxNDdcMDAwJVwwMDBcMDAxXDAwMDJcMDAwJlwwMDBcMDAxIisKKyAgICAgICAgIlwwMDBcdTAxNjVcMDAwJ1wwMDBcMDAxXDAwMFx1MDBCRFwwMDAoXDAwMFwwMDFcMDAwXDAyMFwwMDApXDAwMFwwMDFcMDAwIisKKyAgICAgICAgIjNcMDAwLFwwMDBcMDAxXDAwMFx1MDEwNFwwMDAtXDAwMFwwMDFcMDAwXHUwMEMyXDAwMC5cMDAwXDAwMVwwMDBzXDAwMCIrCisgICAgICAgICIxXDAwMFwwMTZcMDAwPVwwMDBBXDAwMENcMDAwUVwwMDBaXDAwMFwxMzRcMDAwd1wwMDB5XDAwMFx1MDA4OVwwMDBcdTAwOTEiKworICAgICAgICAiXDAwMFx1MDA5NVwwMDBcdTAwOTdcMDAwXHUwMDlBXDAwMFx1MDExOFwwMDAyXDAwMFwwMDFcMDAwXHUwMDg1XDAwMDNcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHUwMEZBXDAwMDZcMDAwXDAwMVwwMDBcMDMzXDAwMDhcMDAwXDAwMVwwMDBcdTAxNThcMDAwOVwwMDBcMDAxIisKKyAgICAgICAgIlwwMDBCXDAwMEBcMDAwXDAyN1wwMDBHXDAwMFRcMDAwVVwwMDBZXDAwMF1cMDAwX1wwMDBmXDAwMG1cMDAwblwwMDBcdTAwODMiKworICAgICAgICAiXDAwMFx1MDA4N1wwMDBcdTAwOENcMDAwXHUwMDkzXDAwMFx1MDA5NFwwMDBcdTAwOTZcMDAwXHUwMDlDXDAwMFx1MDBBMSIrCisgICAgICAgICJcMDAwXHUwMEE0XDAwMFx1MDBBN1wwMDBcdTAwQThcMDAwXHUwMEE5XDAwMFx1MDBBQlwwMDBcdTAxMUNcMDAwQlwwMDAiKworICAgICAgICAiXDAwMVwwMDBcdTAxNzlcMDAwQ1wwMDBcMDAyXDAwMCFcMDAwJlwwMDBFXDAwMFwwMDFcMDAwXDAxM1wwMDBGXDAwMFwwMDEiKworICAgICAgICAiXDAwMFwwMTdcMDAwR1wwMDBcMDAxXDAwMFx1MDE3MVwwMDBIXDAwMFwwMDFcMDAwXDAwNVwwMDBKXDAwMFwwMDFcMDAwIisKKyAgICAgICAgIlx1MDFBOVwwMDBLXDAwMFwwMDJcMDAwXHUwMDk4XDAwMFx1MDE4RVwwMDBMXDAwMFwwMDFcMDAwXDAzMFwwMDBNXDAwMCIrCisgICAgICAgICJcMDA2XDAwMFx1MDBDNVwwMDBcdTAwQ0RcMDAwXHUwMEQ3XDAwMFx1MDBGNFwwMDBcdTAwRkRcMDAwXHUwMTFFXDAwME4iKworICAgICAgICAiXDAwMFwwMDFcMDAwRFwwMDBRXDAwMFwwMDFcMDAwUFwwMDBUXDAwMFwwMDFcMDAwZ1wwMDBVXDAwMFwwMDFcMDAwXHUwMTA2IisKKyAgICAgICAgIlwwMDBXXDAwMFwwMDFcMDAwXHUwMTc4XDAwMFhcMDAwXDAwMVwwMDBcdTAwRTJcMDAwWVwwMDBcMDAxXDAwMFx1MDE1RCIrCisgICAgICAgICJcMDAwZFwwMDBcMDAxXDAwMFx1MDE0NVwwMDBpXDAwMFwwMDFcMDAwXDAyN1wwMDBqXDAwMFwwMDFcMDAwXHUwMTRCXDAwMCIrCisgICAgICAgICJsXDAwMFwwMDFcMDAwWFwwMDBuXDAwMFwwMDFcMDAwXHUwMDk5XDAwMHlcMDAwXDAwMVwwMDBcMDEwXDAwMFx1MDA4MlwwMDAiKworICAgICAgICAiXDAwMlwwMDBkXDAwMFx1MDE5NFwwMDBcdTAwODRcMDAwXDAwMVwwMDBcdTAxNjdcMDAwXHUwMDg2XDAwMFwwMDJcMDAwIisKKyAgICAgICAgIlwwMDNcMDAwXDAyMVwwMDBcdTAwODdcMDAwXDAwMVwwMDBcMDMxXDAwMFx1MDA5MVwwMDBcMDAxXDAwMFwwMTFcMDAwXHUwMDkyIisKKyAgICAgICAgIlwwMDBcMDAzXDAwMFwwMjNcMDAwXHUwMTA1XDAwMFx1MDE1NlwwMDBcdTAwOTNcMDAwXDAwMlwwMDBcMDA3XDAwMFx1MDExRiIrCisgICAgICAgICJcMDAwXHUwMEE4XDAwMFwwMDFcMDAwXHUwMTRFXDAwMFx1MDBBOVwwMDBcMDAxXDAwMFx1MDE5MlwwMDBcdTAwQUFcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHUwMTBEXDAwMFx1MDBBQ1wwMDBcMDA0XDAwMFx1MDE5QlwwMDBcdTAxQTdcMDAwXHUwMUFFXDAwMFx1MDFCMSIrCisgICAgICAgICJcMDAwXHUwMEFFXDAwMFwwMDFcMDAwXHUwMTA3XDAwMFx1MDBCMVwwMDBcMDAyXDAwMFx1MDEyMFwwMDBcdTAxNUNcMDAwIisKKyAgICAgICAgIlx1MDBDMFwwMDBcMDAxXDAwMCNcMDAwXHUwMEMxXDAwMFwwMDJcMDAwXHUwMTQzXDAwMFx1MDE1NFwwMDBcdTAwQzNcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwYVwwMDBcdTAwQzRcMDAwXDAwMVwwMDBcdTAwRjhcMDAwXHUwMEM1XDAwMFwwMDFcMDAwS1wwMDBcdTAwQzciKworICAgICAgICAiXDAwMFwwMDFcMDAwXDAwNlwwMDBcdTAwQzhcMDAwXDAwMVwwMDBcdTAxNERcMDAwXHUwMENCXDAwMFwwMDRcMDAwU1wwMDAiKworICAgICAgICAiXlwwMDBcdTAwOUJcMDAwXHUwMEEzXDAwMFx1MDBDQ1wwMDBcMDAxXDAwMFwwMTRcMDAwXHUwMENEXDAwMFwwMDFcMDAwIisKKyAgICAgICAgIlwwMjRcMDAwXHUwMENGXDAwMFwwMDFcMDAwYlwwMDBcdTAwRDBcMDAwXDAwMVwwMDAoXDAwMFx1MDBEMVwwMDBcMDAxXDAwMCIrCisgICAgICAgICJcdTAxNDJcMDAwXHUwMEQyXDAwMFwwMDFcMDAwXHUwMTBCXDAwMFx1MDBEM1wwMDBcMDAxXDAwMGNcMDAwXHUwMEQ0XDAwMCIrCisgICAgICAgICJcMDAxXDAwMFx1MDE5N1wwMDBcdTAwRDZcMDAwXDAwMVwwMDBcMDE1XDAwMFx1MDBEOFwwMDBcMDAxXDAwMGVcMDAwXHUwMEVBIisKKyAgICAgICAgIlwwMDBcMDAxXDAwMFx1MDBDRVwwMDBcdTAwRURcMDAwXDAwMVwwMDBcdTAwQTJcMDAwXHUwMEYxXDAwMFwwMDFcMDAwXHUwMTZGIisKKyAgICAgICAgIlwwMDBcdTAwRjNcMDAwXDAwMVwwMDBcdTAwOEZcMDAwXHUwMEY0XDAwMFwwMDFcMDAwXHUwMTQ5XDAwMFx1MDEwM1wwMDAiKworICAgICAgICAiXDAwNFwwMDBcdTAwRDFcMDAwXHUwMEQyXDAwMFx1MDBERlwwMDBcdTAwRTdcMDAwXHUwMTA0XDAwMFwwMDFcMDAwXHUwMTRDIisKKyAgICAgICAgIlwwMDBcdTAxMEJcMDAwXDAwMVwwMDBcdTAwRDNcMDAwXHUwMTBEXDAwMFwwMDJcMDAwXHUwMEMzXDAwMFx1MDE3NVwwMDAiKworICAgICAgICAiXHUwMTBFXDAwMFwwMDFcMDAwXHUwMTc3XDAwMFx1MDExMFwwMDBcMDAxXDAwMFx1MDBCQ1wwMDBcdTAxMTFcMDAwXDAwMSIrCisgICAgICAgICJcMDAwXHUwMEY5XDAwMFx1MDExMlwwMDBcMDAxXDAwMFx1MDEwQVwwMDBcdTAxMTNcMDAwXDAwMVwwMDBcdTAxNUZcMDAwIisKKyAgICAgICAgIlx1MDEyQ1wwMDBcMDAxXDAwMG9cMDAwXHUwMTJFXDAwMFwwMDFcMDAwXHUwMEI3XDAwMFx1MDEyRlwwMDBcMDAyXDAwMCIrCisgICAgICAgICJcdTAwRkJcMDAwXHUwMTgxXDAwMFx1MDE0NFwwMDBcMDAxXDAwMC5cMDAwXHUwMTQ2XDAwMFwwMDFcMDAwXHUwMEMxXDAwMCIrCisgICAgICAgICJcdTAxNDdcMDAwXDAwMVwwMDBcdTAwRTZcMDAwXHUwMTQ4XDAwMFwwMDNcMDAwXHUwMTkwXDAwMFx1MDE5QVwwMDBcdTAxQUMiKworICAgICAgICAiXDAwMFx1MDE0Q1wwMDBcMDAxXDAwMFx1MDE3QVwwMDBcdTAxNERcMDAwXDAwMVwwMDBcdTAwOURcMDAwXHUwMTRGXDAwMCIrCisgICAgICAgICJcMDAxXDAwMFx1MDBFOFwwMDBcdTAxNTFcMDAwXDAwMVwwMDBcdTAwRjNcMDAwXHUwMTU2XDAwMFwwMDFcMDAwXHUwMERDIisKKyAgICAgICAgIlwwMDBcdTAxNThcMDAwXDAwMVwwMDBMXDAwMFx1MDE1OVwwMDBcMDA1XDAwMFx1MDBCNlwwMDBcdTAwQjlcMDAwXHUwMEJBIisKKyAgICAgICAgIlwwMDBcdTAwRTVcMDAwXHUwMEVBXDAwMFx1MDE2MFwwMDBcMDAxXDAwMFx1MDBGRVwwMDBcdTAxNjFcMDAwXDAwMVwwMDAiKworICAgICAgICAiXHUwMEMwXDAwMFx1MDE2MlwwMDBcMDAxXDAwMFx1MDA5RVwwMDBcdTAxNjhcMDAwXDAwMVwwMDBcdTAxNkFcMDAwXHUwMTZBIisKKyAgICAgICAgIlwwMDBcMDAxXDAwMFx1MDBDNlwwMDBcdTAxNzFcMDAwXDAwMVwwMDAtXDAwMFx1MDE3MlwwMDBcMDAxXDAwMCpcMDAwXHUwMTczIisKKyAgICAgICAgIlwwMDBcMDAxXDAwMFx1MDE2RFwwMDBcdTAxNzRcMDAwXDAwMVwwMDBcdTAxNTVcMDAwXHUwMTc1XDAwMFwwMDFcMDAwXHUwMTVFIisKKyAgICAgICAgIlwwMDBcdTAxNzhcMDAwXDAwMVwwMDA2XDAwMFx1MDE4MFwwMDBcMDAxXDAwMFwwMjJcMDAwXHUwMTgyXDAwMFwwMDFcMDAwIisKKyAgICAgICAgIlx1MDE1OVwwMDBcdTAxODNcMDAwXDAwMVwwMDBcdTAxNEFcMDAwXHUwMTg2XDAwMFwwMDFcMDAwXHUwMTc2XDAwMFx1MDE4NyIrCisgICAgICAgICJcMDAwXDAwMlwwMDBcdTAxOUNcMDAwXHUwMTlEXDAwMFx1MDE4QVwwMDBcMDAxXDAwMFx1MDE2NFwwMDBcdTAxOEJcMDAwIisKKyAgICAgICAgIlwwMDJcMDAwXDAxMlwwMDA1XDAwMFx1MDE4Q1wwMDBcMDAxXDAwMFx1MDBFQlwwMDBcdTAxOERcMDAwXDAwM1wwMDBcdTAwQzQiKworICAgICAgICAiXDAwMFx1MDBDRlwwMDBcdTAwRkNcMDAwXHUwMThFXDAwMFwwMDFcMDAwXHUwMEREXDAwMFx1MDE4RlwwMDBcMDAxXDAwMCIrCisgICAgICAgICJcdTAxQUFcMDAwXHUwMTkwXDAwMFwwMDFcMDAwelwwMDBcdTAxOTFcMDAwXDAwMVwwMDAxXDAwMFx1MDE5MlwwMDBcMDAxIisKKyAgICAgICAgIlwwMDBcdTAwODRcMDAwXHUwMTkzXDAwMFwwMDFcMDAwXHUwMTU3XDAwMFx1MDE5NFwwMDBcMDAxXDAwMFx1MDE3RVwwMDAiKworICAgICAgICAiXHUwMTk1XDAwMFwwMDFcMDAwXHUwMTdEXDAwMFx1MDE5NlwwMDBcMDAxXDAwMFwwMTZcMDAwXHUwMTk3XDAwMFwwMTBcMDAwIisKKyAgICAgICAgIkhcMDAwTlwwMDBoXDAwMHtcMDAwflwwMDBcdTAwN0ZcMDAwXHUwMDgxXDAwMFx1MDBBNVwwMDBcdTAxOThcMDAwXDAwMiIrCisgICAgICAgICJcMDAwXHUwMERBXDAwMFx1MDBEQlwwMDBcdTAxOTlcMDAwXDAwMVwwMDApXDAwMFx1MDFBMFwwMDBcMDAxXDAwMDhcMDAwIisKKyAgICAgICAgIlx1MDFBMlwwMDBcMDAxXDAwMFx1MDFBM1wwMDBcdTAxQTRcMDAwXDAwMVwwMDAwXDAwMFx1MDFBNVwwMDBcMDAxXDAwMCIrCisgICAgICAgICJcdTAxQTJcMDAwXHUwMUE2XDAwMFwwMDFcMDAwXDA0MlwwMDBcdTAxQThcMDAwXDAwMVwwMDB4XDAwMFx1MDFBQlwwMDAiKworICAgICAgICAiXDAwMVwwMDBcdTAxNDBcMDAwXHUwMUFFXDAwMFwwMDFcMDAwXHUwMTVCXDAwMFx1MDFBRlwwMDBcMDAxXDAwMFx1MDBEOCIrCisgICAgICAgICJcMDAwXHUwMUIxXDAwMFwwMDFcMDAwXHUwMUEwXDAwMFx1MDFCNFwwMDBcMDAxXDAwMFx1MDFBMVwwMDBcdTAxQjlcMDAwIisKKyAgICAgICAgIlwwMDNcMDAwXHUwMTg2XDAwMFx1MDE4Q1wwMDBcdTAxOERcMDAwXHUwMUNDXDAwMFwwMDFcMDAwXHUwMEUxXDAwMFx1MDFFMCIrCisgICAgICAgICJcMDAwXDAwMVwwMDBcdTAwOEJcMDAwXHUwMUU0XDAwMFwwMDFcMDAwdFwwMDBcdTAxRTVcMDAwXDAwM1wwMDBcdTAxOTUiKworICAgICAgICAiXDAwMFx1MDE5RVwwMDBcdTAxQUJcMDAwXHUwMUU2XDAwMFwwMDFcMDAwXHUwMUE4XDAwMFx1MDFFN1wwMDBcMDAxXDAwMCIrCisgICAgICAgICJcdTAwRTBcMDAwXHUwMUVBXDAwMFwwMDJcMDAwXHUwMEQ2XDAwMFx1MDE4N1wwMDBcdTAxRUJcMDAwXDAwMVwwMDBcdTAxNkUiKworICAgICAgICAiXDAwMFx1MDFFQ1wwMDBcMDAxXDAwMFx1MDA4MFwwMDBcdTAxRURcMDAwXDAwMVwwMDBcdTAxQTZcMDAwXHUwMUYxXDAwMCIrCisgICAgICAgICJcMDAyXDAwMFx1MDA5MlwwMDBcdTAxODlcMDAwXHUwMUYyXDAwMFwwMDFcMDAwXHUwMENDXDAwMFx1MDFGM1wwMDBcMDAzIisKKyAgICAgICAgIlwwMDBcdTAxMDNcMDAwXHUwMTA5XDAwMFx1MDE1MlwwMDBcdTAxRjZcMDAwXDAwMVwwMDBcdTAxQTVcMDAwXHUwMUY4XDAwMCIrCisgICAgICAgICJcMDAxXDAwMD9cMDAwXHUwMjAwXDAwMFwwMDFcMDAwXHUwMEU5XDAwMFx1MDIyNFwwMDBcMDAxXDAwMFx1MDE4MFwwMDAiKworICAgICAgICAiXHUwMjJFXDAwMFwwMDFcMDAwXHUwMTQ4XDAwMFx1MDIzNFwwMDBcMDE2XDAwMFx1MDBCOFwwMDBcdTAwRDBcMDAwXHUwMEQ1IisKKyAgICAgICAgIlwwMDBcdTAwRDlcMDAwXHUwMERFXDAwMFx1MDBFM1wwMDBcdTAwRTRcMDAwXHUwMEYxXDAwMFx1MDBGRlwwMDBcdTAxMDAiKworICAgICAgICAiXDAwMFx1MDEwMVwwMDBcdTAxNTBcMDAwXHUwMTVBXDAwMFx1MDE2MFwwMDBcdTAyMzZcMDAwXDAwMVwwMDAgXDAwMFx1MDI0MCIrCisgICAgICAgICJcMDAwXDAwMVwwMDBcdTAwRUNcMDAwXHUwMjQxXDAwMFwwMDJcMDAwXHUwMTk2XDAwMFx1MDFCMlwwMDBcdTAyNDJcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHUwMTdDXDAwMFx1MDI0M1wwMDBcMDAxXDAwMFwwMzdcMDAwXHUwMjQ0XDAwMFwwMDFcMDAwXHUwMTY2XDAwMCIrCisgICAgICAgICJcdTAyNDZcMDAwXDAwMVwwMDBcdTAwRjVcMDAwXHUwMjQ3XDAwMFwwMDFcMDAwXHUwMTBDXDAwMFx1MDI0OFwwMDBcMDAxIisKKyAgICAgICAgIlwwMDBcdTAxNTNcMDAwXHUwMjQ5XDAwMFwwMDJcMDAwXHUwMEI0XDAwMFx1MDEwOFwwMDBcdTAyNEFcMDAwXDAwMVwwMDAiKworICAgICAgICAiXHUwMTQ2XDAwMFx1MDI0QlwwMDBcMDAxXDAwMFwwMzJcMDAwXHUwMjRDXDAwMFwwMDFcMDAwXHUwMTYxXDAwMFx1MDI0RCIrCisgICAgICAgICJcMDAwXDAwMVwwMDBcMDI1XDAwMFx1MDI0RVwwMDBcMDAxXDAwMCxcMDAwXHUwMjUxXDAwMFwwMDFcMDAwXHUwMDhEXDAwMCIrCisgICAgICAgICJcdTAyNTNcMDAwXDAwMVwwMDA0XDAwMFx1MDI1NVwwMDBcMDAxXDAwMFtcMDAwXHUwMjU4XDAwMFwwMDFcMDAwXHUwMEM3IisKKyAgICAgICAgIlwwMDBcdTAyNTlcMDAwXDAwMVwwMDArXDAwMFx1MDI2MlwwMDBcMDAxXDAwMGBcMDAwXHUwMjYzXDAwMFwwMDFcMDAwLyIrCisgICAgICAgICJcMDAwXHUwMjY1XDAwMFwwMDFcMDAwXHUwMTdCXDAwMFx1MDI2NlwwMDBcMDAxXDAwMCRcMDAwXHUwMjY3XDAwMFwwMDEiKworICAgICAgICAiXDAwMFx1MDBCRlwwMDBcdTAyNjlcMDAwXDAwMVwwMDBcdTAwQ0JcMDAwXHUwMjZBXDAwMFwwMDFcMDAwXHUwMTkxXDAwMCIrCisgICAgICAgICJcdTAyNkJcMDAwXDAwMVwwMDBcdTAwQzlcMDAwXHUwMjZDXDAwMFwwMDFcMDAwXHUwMEJCXDAwMFx1MDI2RFwwMDBcMDAxIisKKyAgICAgICAgIlwwMDA3XDAwMFx1MDI2RVwwMDBcMDAxXDAwMFx1MDFBRFwwMDBcdTAyNzFcMDAwXDAwMVwwMDBcdTAxNEZcMDAwXHUwMjczIisKKyAgICAgICAgIlwwMDBcMDAxXDAwMFx1MDA5MFwwMDBcdTAyNzVcMDAwXDAwMVwwMDBcdTAxOTNcMDAwXHUwMjc2XDAwMFwwMDFcMDAwXHUwMEY2IisKKyAgICAgICAgIlwwMDBcdTAyNzlcMDAwXDAwMVwwMDBcMDI2XDAwMFx1MDI4MFwwMDBcMDA0XDAwMFx1MDE1MVwwMDBcdTAxNjNcMDAwXHUwMTY5IisKKyAgICAgICAgIlwwMDBcdTAxNzBcMDAwXHUwMjg2XDAwMFwwMDFcMDAwXDAzNlwwMDBcdTAyOENcMDAwXDAwM1wwMDBcdTAxOTlcMDAwXHUwMTlGIisKKyAgICAgICAgIlwwMDBcdTAxQUZcMDAwXHUwMjkyXDAwMFwwMzVcMDAwXDAwNFwwMDA5XDAwMDpcMDAwRVwwMDBNXDAwMFZcMDAwV1wwMDAiKworICAgICAgICAiaVwwMDBqXDAwMGtcMDAwbFwwMDBxXDAwMHJcMDAwdVwwMDB2XDAwMH1cMDAwXHUwMDg2XDAwMFx1MDA4OFwwMDBcdTAwOEEiKworICAgICAgICAiXDAwMFx1MDA4RVwwMDBcdTAwQUFcMDAwXHUwMTFEXDAwMFx1MDEyMlwwMDBcdTAxNzNcMDAwXHUwMTc0XDAwMFx1MDE4NCIrCisgICAgICAgICJcMDAwXHUwMTg4XDAwMFx1MDE4QVwwMDBcdTAxOThcMDAwXHUwMjk4XDAwMFwwMDFcMDAwXHUwMDgyXDAwMFx1MDI5OVwwMDAiKworICAgICAgICAiXDAwMlwwMDBcdTAwRjJcMDAwXHUwMEY3XDAwMFx1MDJBMFwwMDBcMDAxXDAwMFx1MDE2QlwwMDBcdTAyQTJcMDAwXDAwMSIrCisgICAgICAgICJcMDAwXHUwMEEwXDAwMFx1MDJBNFwwMDBcMDAxXDAwMElcMDAwXHUwMkE2XDAwMFwwMDFcMDAwXHUwMEE2XDAwMFx1MDJBOCIrCisgICAgICAgICJcMDAwXDAwMVwwMDBcdTAwOUZcMDAwXHUwMkFEXDAwMFwwMDJcMDAwXHUwMEYwXDAwMFx1MDFCNFwwMDBcdTAyQjRcMDAwIisKKyAgICAgICAgIlwwMDFcMDAwXHUwMThGXDAwMFx1MDJDNVwwMDBcMDAxXDAwMFx1MDFCMFwwMDBcdTAyRDJcMDAwXDAwMlwwMDBcdTAxODMiKworICAgICAgICAiXDAwMFx1MDE4QlwwMDBcdTAzMDRcMDAwXDAwMVwwMDBcdTAwQjVcMDAwXHUwMzEzXDAwMFwwMDFcMDAwXHUwMTdGXDAwMCIrCisgICAgICAgICJcdTAzMTRcMDAwXDAwMVwwMDBcdTAxNDRcMDAwXHUwMzIwXDAwMFwwMDFcMDAwXDAzNVwwMDBcdTAzMkNcMDAwXDAwMVwwMDAiKworICAgICAgICAiJ1wwMDBcdTAzMzZcMDAwXDAwMlwwMDBcMDM0XDAwMFx1MDExQSIKKyAgICAgICAgOworCisgICAgLy8gRU5EIEdFTkVSQVRFRCBTT1VSQ0UgQ09ERQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgc3RhdGljIHsKKyAgICAgICAgLy8gVW5wYWNrIHRoZSBpbnRbXSBEQVRBIGFycmF5CisgICAgICAgIERBVEEgPSBVdGlsaXR5LlJMRVN0cmluZ1RvSW50QXJyYXkoREFUQV9STEUpOworCisgICAgICAgIC8vIFVucGFjayB0aGUgaW50W10gSU5ERVhfQllfT0ZGU0VUIGFycmF5CisgICAgICAgIElOREVYX0JZX09GRlNFVCA9IFV0aWxpdHkuUkxFU3RyaW5nVG9JbnRBcnJheShJTkRFWF9CWV9PRkZTRVRfUkxFKTsKKworICAgICAgICAvLyBVbnBhY2sgdGhlIGludFtdIElOREVYX0JZX0NPVU5UUlkgYXJyYXkKKyAgICAgICAgSU5ERVhfQllfQ09VTlRSWSA9IFV0aWxpdHkuUkxFU3RyaW5nVG9JbnRBcnJheShJTkRFWF9CWV9DT1VOVFJZX1JMRSk7CisKKyAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBpbmRleCBieSBuYW1lLiAgV2UgdW5wYWNrIHRoaXMgYXJyYXkgYW5kIHRoZW4KKyAgICAgICAgLy8gZGlzY2FyZCBpdCBhZnRlciB3ZSdyZSBkb25lIHdpdGggaXQuCisgICAgICAgIGludFtdIGluZGV4X2J5X25hbWVfYXJyYXkgPSBVdGlsaXR5LlJMRVN0cmluZ1RvSW50QXJyYXkoSU5ERVhfQllfTkFNRV9BUlJBWV9STEUpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8SURTLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBJTkRFWF9CWV9OQU1FLnB1dChJRFNbaV0sIG5ldyBJbnRlZ2VyKGluZGV4X2J5X25hbWVfYXJyYXlbaV0pKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL1ZhbHVlSXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL2ljdS91dGlsL1ZhbHVlSXRlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDllYmVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvVmFsdWVJdGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMTE1IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL2ljdS91dGlsL1ZhbHVlSXRlcmF0b3IuamF2YSx2ICQKKyogJERhdGU6IDIwMDIvMTIvMDMgMjA6NDY6MDkgJAorKiAkUmV2aXNpb246IDEuOSAkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKK3BhY2thZ2UgY29tLmlibS5pY3UudXRpbDsKKworLyoqCisgKiA8cD5JbnRlcmZhY2UgZm9yIGVuYWJsaW5nIGl0ZXJhdGlvbiBvdmVyIHNldHMgb2YgPGludCwgT2JqZWN0Piwgd2hlcmUKKyAqIGludCBpcyB0aGUgc29ydGVkIGludGVnZXIgaW5kZXggaW4gYXNjZW5kaW5nIG9yZGVyIGFuZCBPYmplY3QsIGl0cyAKKyAqIGFzc29jaWF0ZWQgdmFsdWUuPC9wPgorICogPHA+VGhlIFZhbHVlSXRlcmF0b3IgYWxsb3dzIGl0ZXJhdGlvbnMgb3ZlciBpbnRlZ2VyIGluZGV4ZXMgaW4gdGhlIHJhbmdlIAorICogb2YgSW50ZWdlci5NSU5fVkFMVUUgdG8gSW50ZWdlci5NQVhfVkFMVUUgaW5jbHVzaXZlLiBJbXBsZW1lbnRhdGlvbnMgb2YgCisgKiBWYWx1ZUl0ZXJhdG9yIHNob3VsZCBzcGVjaWZ5IHRoZWlyIG93biBtYXhpbXVtIHN1YnJhbmdlIHdpdGhpbiB0aGUgYWJvdmUgCisgKiByYW5nZSB0aGF0IGlzIG1lYW5pbmdmdWwgdG8gaXRzIGFwcGxpY2F0aW9ucy48L3A+CisgKiA8cD5Nb3N0IGltcGxlbWVudGF0aW9ucyB3aWxsIGJlIGNyZWF0ZWQgYnkgZmFjdG9yeSBtZXRob2RzLCBzdWNoIGFzIHRoZQorICogY2hhcmFjdGVyIG5hbWUgaXRlcmF0b3IgaW4gVUNoYXJhY3Rlci5nZXROYW1lSXRlcmF0b3IuIFNlZSBleGFtcGxlIGJlbG93LgorICogPC9wPgorICogRXhhbXBsZSBvZiB1c2U6PGJyPgorICogPHByZT4KKyAqIFZhbHVlSXRlcmF0b3IgaXRlcmF0b3IgPSBVQ2hhcmFjdGVyLmdldE5hbWVJdGVyYXRvcigpOworICogVmFsdWVJdGVyYXRvci5FbGVtZW50IHJlc3VsdCA9IG5ldyBWYWx1ZUl0ZXJhdG9yLkVsZW1lbnQoKTsKKyAqIGl0ZXJhdG9yLnNldFJhbmdlKFVDaGFyYWN0ZXIuTUlOX1ZBTFVFLCBVQ2hhcmFjdGVyLk1BWF9WQUxVRSk7CisgKiB3aGlsZSAoaXRlcmF0b3IubmV4dChyZXN1bHQpKSB7CisgKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb2RlcG9pbnQgXFx1IiArIAorICogICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKHJlc3VsdC5pbnRlZ2VyKSArIAorICogICAgICAgICAgICAgICAgICAgICAgICAiIGhhcyB0aGUgY2hhcmFjdGVyIG5hbWUgIiArIChTdHJpbmcpcmVzdWx0LnZhbHVlKTsKKyAqIH0KKyAqIDwvcHJlPgorICogQGF1dGhvciBzeW53ZWUKKyAqIEBkcmFmdCBJQ1UgMi4xCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVmFsdWVJdGVyYXRvcgoreworICAgIC8vIHB1YmxpYyBpbm5lciBjbGFzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAqIDxwPlRoZSByZXR1cm4gcmVzdWx0IGNvbnRhaW5lciBvZiBlYWNoIGl0ZXJhdGlvbi4gU3RvcmVzIHRoZSBuZXh0IAorICAgICogaW50ZWdlciBpbmRleCBhbmQgaXRzIGFzc29jaWF0ZWQgdmFsdWUgT2JqZWN0LjwvcD4gCisgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBFbGVtZW50CisgICAgeworICAgICAgICAvLyBwdWJsaWMgZGF0YSBtZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAqIEludGVnZXIgaW5kZXggb2YgdGhlIGN1cnJlbnQgaXRlcmF0aW9uCisgICAgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBpbnRlZ2VyOworICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIHRoZSBPYmplY3QgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlZ2VyIGluZGV4LgorICAgICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICAgICovIAorICAgICAgICBwdWJsaWMgT2JqZWN0IHZhbHVlOworICAgICAgICAKKyAgICAgICAgLy8gcHVibGljIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVtcHR5IGRlZmF1bHQgY29uc3RydWN0b3IgdG8gbWFrZSBqYXZhZG9jIGhhcHB5CisgICAgICAgICAqIEBkcmFmdCBJQ1UgMi40CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgRWxlbWVudCgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgKiA8cD5HZXRzIHRoZSBuZXh0IHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gYW5kIHJldHVybnMgCisgICAgKiB0cnVlIGlmIHdlIGFyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uLCBmYWxzZSBvdGhlcndpc2UuPC9wPgorICAgICogPHA+SWYgdGhlIHJldHVybiBib29sZWFuIGlzIGEgZmFsc2UsIHRoZSBjb250ZW50cyBvZiBlbGVtZW50cyB3aWxsIG5vdAorICAgICogYmUgdXBkYXRlZC48L3A+CisgICAgKiBAcGFyYW0gZWxlbWVudCBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGluZGV4IGFuZCB2YWx1ZQorICAgICogQHJldHVybiB0cnVlIGlmIHdlIGFyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uLCBmYWxzZSBvdGhlcndpc2UuCisgICAgKiBAc2VlIEVsZW1lbnQKKyAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBuZXh0KEVsZW1lbnQgZWxlbWVudCk7CisgICAgCisgICAgLyoqCisgICAgKiA8cD5SZXNldHMgdGhlIGl0ZXJhdG9yIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHRoZSBpbnRlZ2VyIGluZGV4IAorICAgICogSW50ZWdlci5NSU5fVkFMVUUgb3IgWCBpZiBhIHNldFJhbmdlKFgsIFkpIGhhcyBiZWVuIGNhbGxlZCBwcmV2aW91c2x5LgorICAgICogPC9wPgorICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgLyoqCisgICAgICogPHA+UmVzdHJpY3RzIHRoZSByYW5nZSBvZiBpbnRlZ2VycyB0byBpdGVyYXRlIGFuZCByZXNldHMgdGhlIGl0ZXJhdGlvbiAKKyAgICAgKiB0byBiZWdpbiBhdCB0aGUgaW5kZXggYXJndW1lbnQgc3RhcnQuPC9wPgorICAgICAqIDxwPklmIHNldFJhbmdlKHN0YXJ0LCBlbmQpIGlzIG5vdCBwZXJmb3JtZWQgYmVmb3JlIG5leHQoZWxlbWVudCkgaXMgCisgICAgICogY2FsbGVkLCB0aGUgaXRlcmF0aW9uIHdpbGwgc3RhcnQgZnJvbSB0aGUgaW50ZWdlciBpbmRleCAKKyAgICAgKiBJbnRlZ2VyLk1JTl9WQUxVRSBhbmQgZW5kIGF0IEludGVnZXIuTUFYX1ZBTFVFLjwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiB0aGlzIHJhbmdlIGlzIHNldCBvdXRzaWRlIHRoZSBtZWFuaW5nZnVsIHJhbmdlIHNwZWNpZmllZCBieSB0aGUgCisgICAgICogaW1wbGVtZW50YXRpb24sIG5leHQoZWxlbWVudCkgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gc3RhcnQgZmlyc3QgaW50ZWdlciBpbiByYW5nZSB0byBpdGVyYXRlCisgICAgICogQHBhcmFtIGxpbWl0IDEgaW50ZWdlciBhZnRlciB0aGUgbGFzdCBpbnRlZ2VyIGluIHJhbmdlIAorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IGFuIAorICAgICAqICAgICAgICAgICAgaWxsZWdhbCByYW5nZS4gRS5nIGxpbWl0IDw9IHN0YXJ0CisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL1ZlcnNpb25JbmZvLmphdmEgYi9zcmMvY29tL2libS9pY3UvdXRpbC9WZXJzaW9uSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNGNhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9pY3UvdXRpbC9WZXJzaW9uSW5mby5qYXZhCkBAIC0wLDAgKzEsMzgwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9WZXJzaW9uSW5mby5qYXZhLHYgJCAKKyAqICREYXRlOiAyMDAyLzEyLzAzIDIwOjQ2OjA5ICQgCisgKiAkUmV2aXNpb246IDEuMTAgJAorICoKKyAqIGppdHRlcmJ1ZyAxNzQxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworLyoqCisgKiBDbGFzcyB0byBzdG9yZSB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIGZvcm0gbWFqb3IubWlub3IubWlsbGkubWljcm8uCisgKiBAYXV0aG9yIHN5bndlZQorICogQGRyYWZ0IElDVSAyLjEKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFZlcnNpb25JbmZvCit7CisgICAgLy8gcHVibGljIGRhdGEgbWVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgIC8qKgorICAgICAqIFVuaWNvZGUgMS4wIHZlcnNpb24KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVmVyc2lvbkluZm8gVU5JQ09ERV8xXzA7CisgICAgLyoqCisgICAgICogVW5pY29kZSAxLjAuMSB2ZXJzaW9uCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25JbmZvIFVOSUNPREVfMV8wXzE7CisgICAgLyoqCisgICAgICogVW5pY29kZSAxLjEuMCB2ZXJzaW9uCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25JbmZvIFVOSUNPREVfMV8xXzA7CisgICAgLyoqCisgICAgICogVW5pY29kZSAxLjEuNSB2ZXJzaW9uCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25JbmZvIFVOSUNPREVfMV8xXzU7CisgICAgLyoqCisgICAgICogVW5pY29kZSAyLjAgdmVyc2lvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWZXJzaW9uSW5mbyBVTklDT0RFXzJfMDsgICAgICAgIAorICAgIC8qKgorICAgICAqIFVuaWNvZGUgMi4xLjIgdmVyc2lvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWZXJzaW9uSW5mbyBVTklDT0RFXzJfMV8yOworICAgIC8qKgorICAgICAqIFVuaWNvZGUgMi4xLjUgdmVyc2lvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWZXJzaW9uSW5mbyBVTklDT0RFXzJfMV81OworICAgIC8qKgorICAgICAqIFVuaWNvZGUgMi4xLjggdmVyc2lvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWZXJzaW9uSW5mbyBVTklDT0RFXzJfMV84OworICAgIC8qKgorICAgICAqIFVuaWNvZGUgMi4xLjkgdmVyc2lvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWZXJzaW9uSW5mbyBVTklDT0RFXzJfMV85OworICAgIC8qKgorICAgICAqIFVuaWNvZGUgMy4wIHZlcnNpb24KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVmVyc2lvbkluZm8gVU5JQ09ERV8zXzA7CisgICAgLyoqCisgICAgICogVW5pY29kZSAzLjAuMSB2ZXJzaW9uCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25JbmZvIFVOSUNPREVfM18wXzE7CisgICAgLyoqCisgICAgICogVW5pY29kZSAzLjEuMCB2ZXJzaW9uCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25JbmZvIFVOSUNPREVfM18xXzA7CisgICAgLyoqCisgICAgICogVW5pY29kZSAzLjEuMSB2ZXJzaW9uCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25JbmZvIFVOSUNPREVfM18xXzE7CisgICAgLyoqCisgICAgICogVW5pY29kZSAzLjIgdmVyc2lvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWZXJzaW9uSW5mbyBVTklDT0RFXzNfMjsKKyAgICAvKioKKyAgICAgKiBJQ1U0SiBjdXJyZW50IHJlbGVhc2UgdmVyc2lvbgorICAgICAqIEBkcmFmdCBJQ1UgMi4yCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBWZXJzaW9uSW5mbyBJQ1VfVkVSU0lPTjsKKyAgICAKKyAgICAvLyBwdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBWZXJzaW9uSW5mbyB3aXRoIHRoZSBhcmd1bWVudCB2ZXJzaW9uLgorICAgICAqIEBwYXJhbSB2ZXJzaW9uIHZlcnNpb24gU3RyaW5nIGluIHRoZSBmb3JtYXQgb2YgIm1ham9yLm1pbm9yLm1pbGxpLm1pY3JvIgorICAgICAqICAgICAgICAgICAgICAgIG9yICJtYWpvci5taW5vci5taWxsaSIgb3IgIm1ham9yLm1pbm9yIiBvciAibWFqb3IiLAorICAgICAqICAgICAgICAgICAgICAgIHdoZXJlIG1ham9yLCBtaW5vciwgbWlsbGksIG1pY3JvIGFyZSBub24tbmVnYXRpdmUgbnVtYmVycworICAgICAqICAgICAgICAgICAgICAgIDw9IDI1NS4gSWYgdGhlIHRyYWlsaW5nIHZlcnNpb24gbnVtYmVycyBhcmUgCisgICAgICogICAgICAgICAgICAgICAgbm90IHNwZWNpZmllZCB0aGV5IGFyZSB0YWtlbiBhcyAwcy4gRS5nLiBWZXJzaW9uICIzLjEiIGlzCisgICAgICogICAgICAgICAgICAgICAgZXF1aXZhbGVudCB0byAiMy4xLjAuMCIuCisgICAgICogQHJldHVybiBhbiBpbnN0YW5jZSBvZiBWZXJzaW9uSW5mbyB3aXRoIHRoZSBhcmd1bWVudCB2ZXJzaW9uLgorICAgICAqIEBleGNlcHRpb24gdGhyb3dzIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB3aGVuIHRoZSBhcmd1bWVudCB2ZXJzaW9uIAorICAgICAqICAgICAgICAgICAgICAgIGlzIG5vdCBpbiB0aGUgcmlnaHQgZm9ybWF0CisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFZlcnNpb25JbmZvIGdldEluc3RhbmNlKFN0cmluZyB2ZXJzaW9uKQorICAgIHsKKyAgICAgICAgaW50IGxlbmd0aCAgPSB2ZXJzaW9uLmxlbmd0aCgpOworICAgICAgICBpbnQgYXJyYXlbXSA9IHswLCAwLCAwLCAwfTsKKyAgICAgICAgaW50IGNvdW50ICAgPSAwOworICAgICAgICBpbnQgaW5kZXggICA9IDA7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoY291bnQgPCA0ICYmIGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaGFyIGMgPSB2ZXJzaW9uLmNoYXJBdChpbmRleCk7CisgICAgICAgICAgICBpZiAoYyA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGMgLT0gJzAnOworICAgICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBjID4gOSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKElOVkFMSURfVkVSU0lPTl9OVU1CRVJfKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJyYXlbY291bnRdICo9IDEwOworICAgICAgICAgICAgICAgIGFycmF5W2NvdW50XSArPSBjOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4ICE9IGxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgdmVyc2lvbiBudW1iZXI6IFN0cmluZyAnIiArIHZlcnNpb24gKyAiJyBleGNlZWRzIHZlcnNpb24gZm9ybWF0Iik7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlbaV0gPCAwIHx8IGFycmF5W2ldID4gMjU1KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihJTlZBTElEX1ZFUlNJT05fTlVNQkVSXyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBnZXRJbnN0YW5jZShhcnJheVswXSwgYXJyYXlbMV0sIGFycmF5WzJdLCBhcnJheVszXSk7CisgICAgfQorIAorICAgIC8qKiAKKyAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFZlcnNpb25JbmZvIHdpdGggdGhlIGFyZ3VtZW50IHZlcnNpb24uCisgICAgICogQHBhcmFtIG1ham9yIG1ham9yIHZlcnNpb24sIG5vbi1uZWdhdGl2ZSBudW1iZXIgPD0gMjU1LgorICAgICAqIEBwYXJhbSBtaW5vciBtaW5vciB2ZXJzaW9uLCBub24tbmVnYXRpdmUgbnVtYmVyIDw9IDI1NS4KKyAgICAgKiBAcGFyYW0gbWlsbGkgbWlsbGkgdmVyc2lvbiwgbm9uLW5lZ2F0aXZlIG51bWJlciA8PSAyNTUuCisgICAgICogQHBhcmFtIG1pY3JvIG1pY3JvIHZlcnNpb24sIG5vbi1uZWdhdGl2ZSBudW1iZXIgPD0gMjU1LgorICAgICAqIEBleGNlcHRpb24gdGhyb3dzIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB3aGVuIGVpdGhlciBhcmd1bWVudHMgYXJlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmUgb3IgPiAyNTUgCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFZlcnNpb25JbmZvIGdldEluc3RhbmNlKGludCBtYWpvciwgaW50IG1pbm9yLCBpbnQgbWlsbGksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pY3JvKQorICAgIHsKKyAgICAgICAgLy8gY2hlY2tzIGlmIGl0IGlzIGluIHRoZSBoYXNobWFwCisgICAgICAgIC8vIGVsc2UKKyAgICAgICAgaWYgKG1ham9yIDwgMCB8fCBtYWpvciA+IDI1NSB8fCBtaW5vciA8IDAgfHwgbWlub3IgPiAyNTUgfHwgCisgICAgICAgICAgICBtaWxsaSA8IDAgfHwgbWlsbGkgPiAyNTUgfHwgbWljcm8gPCAwIHx8IG1pY3JvID4gMjU1KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKElOVkFMSURfVkVSU0lPTl9OVU1CRVJfKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgICAgIHZlcnNpb24gPSBnZXRJbnQobWFqb3IsIG1pbm9yLCBtaWxsaSwgbWljcm8pOworICAgICAgICBJbnRlZ2VyIGtleSAgICAgPSBuZXcgSW50ZWdlcih2ZXJzaW9uKTsKKyAgICAgICAgT2JqZWN0ICByZXN1bHQgID0gTUFQXy5nZXQoa2V5KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVyc2lvbkluZm8odmVyc2lvbik7CisgICAgICAgICAgICBNQVBfLnB1dChrZXksIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChWZXJzaW9uSW5mbylyZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8qKiAKKyAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFZlcnNpb25JbmZvIHdpdGggdGhlIGFyZ3VtZW50IHZlcnNpb24uCisgICAgICogRXF1aXZhbGVudCB0byBnZXRJbnN0YW5jZShtYWpvciwgbWlub3IsIG1pbGxpLCAwKS4KKyAgICAgKiBAcGFyYW0gbWFqb3IgbWFqb3IgdmVyc2lvbiwgbm9uLW5lZ2F0aXZlIG51bWJlciA8PSAyNTUuCisgICAgICogQHBhcmFtIG1pbm9yIG1pbm9yIHZlcnNpb24sIG5vbi1uZWdhdGl2ZSBudW1iZXIgPD0gMjU1LgorICAgICAqIEBwYXJhbSBtaWxsaSBtaWxsaSB2ZXJzaW9uLCBub24tbmVnYXRpdmUgbnVtYmVyIDw9IDI1NS4KKyAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gd2hlbiBlaXRoZXIgYXJndW1lbnRzIGFyZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlIG9yID4gMjU1IAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBWZXJzaW9uSW5mbyBnZXRJbnN0YW5jZShpbnQgbWFqb3IsIGludCBtaW5vciwgaW50IG1pbGxpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKG1ham9yLCBtaW5vciwgbWlsbGksIDApOworICAgIH0KKyAgICAKKyAgICAvKiogCisgICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBWZXJzaW9uSW5mbyB3aXRoIHRoZSBhcmd1bWVudCB2ZXJzaW9uLgorICAgICAqIEVxdWl2YWxlbnQgdG8gZ2V0SW5zdGFuY2UobWFqb3IsIG1pbm9yLCAwLCAwKS4KKyAgICAgKiBAcGFyYW0gbWFqb3IgbWFqb3IgdmVyc2lvbiwgbm9uLW5lZ2F0aXZlIG51bWJlciA8PSAyNTUuCisgICAgICogQHBhcmFtIG1pbm9yIG1pbm9yIHZlcnNpb24sIG5vbi1uZWdhdGl2ZSBudW1iZXIgPD0gMjU1LgorICAgICAqIEBleGNlcHRpb24gdGhyb3dzIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB3aGVuIGVpdGhlciBhcmd1bWVudHMgYXJlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmUgb3IgPiAyNTUgCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFZlcnNpb25JbmZvIGdldEluc3RhbmNlKGludCBtYWpvciwgaW50IG1pbm9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbmNlKG1ham9yLCBtaW5vciwgMCwgMCk7CisgICAgfQorICAgIAorICAgIC8qKiAKKyAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFZlcnNpb25JbmZvIHdpdGggdGhlIGFyZ3VtZW50IHZlcnNpb24uCisgICAgICogRXF1aXZhbGVudCB0byBnZXRJbnN0YW5jZShtYWpvciwgMCwgMCwgMCkuCisgICAgICogQHBhcmFtIG1ham9yIG1ham9yIHZlcnNpb24sIG5vbi1uZWdhdGl2ZSBudW1iZXIgPD0gMjU1LgorICAgICAqIEBleGNlcHRpb24gdGhyb3dzIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB3aGVuIGVpdGhlciBhcmd1bWVudHMgYXJlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmUgb3IgPiAyNTUgCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFZlcnNpb25JbmZvIGdldEluc3RhbmNlKGludCBtYWpvcikKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRJbnN0YW5jZShtYWpvciwgMCwgMCwgMCk7CisgICAgfQorIAorICAgIC8qKiAKKyAgICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpdmUgb2YgVmVyc2lvbkluZm8gaW4gdGhlIGZvcm1hdCBvZiAKKyAgICAgKiAibWFqb3IubWlub3IubWlsbGkubWljcm8iICAgCisgICAgICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpdmUgb2YgVmVyc2lvbkluZm8KKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoNyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0TWFqb3IoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJy4nKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChnZXRNaW5vcigpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnLicpOworICAgICAgICByZXN1bHQuYXBwZW5kKGdldE1pbGxpKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcuJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0TWljcm8oKSk7CisgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLyoqIAorICAgICAqIFJldHVybnMgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyCisgICAgICogQHJldHVybiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgICAgCisgICAgICogQGRyYWZ0IElDVSAyLjEKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE1ham9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiAobV92ZXJzaW9uXyA+PiAyNCkgJiBMQVNUX0JZVEVfTUFTS18gOworICAgIH0KKyAKKyAgICAvKiogCisgICAgICogUmV0dXJucyB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIKKyAgICAgKiBAcmV0dXJuIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciAgICAKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0TWlub3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChtX3ZlcnNpb25fID4+IDE2KSAmIExBU1RfQllURV9NQVNLXyA7CisgICAgfQorIAorICAgIC8qKiAKKyAgICAgKiBSZXR1cm5zIHRoZSBtaWxsaSB2ZXJzaW9uIG51bWJlcgorICAgICAqIEByZXR1cm4gdGhlIG1pbGxpIHZlcnNpb24gbnVtYmVyICAgIAorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIGludCBnZXRNaWxsaSgpCisgICAgeworICAgICAgICByZXR1cm4gKG1fdmVyc2lvbl8gPj4gOCkgJiBMQVNUX0JZVEVfTUFTS18gOworICAgIH0KKyAKKyAgICAvKiogCisgICAgICogUmV0dXJucyB0aGUgbWljcm8gdmVyc2lvbiBudW1iZXIKKyAgICAgKiBAcmV0dXJuIHRoZSBtaWNybyB2ZXJzaW9uIG51bWJlcgorICAgICAqIEBkcmFmdCBJQ1UgMi4xICAgIAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0TWljcm8oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVyc2lvbl8gJiBMQVNUX0JZVEVfTUFTS18gOworICAgIH0KKyAKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhpcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGVxdWFscyB0byB0aGUgYXJndW1lbnQgdmVyc2lvbgorICAgICAqIEBwYXJhbSBvdGhlciBvYmplY3QgdG8gYmUgY29tcGFyZWQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgb3RoZXIgaXMgZXF1YWxzIHRvIHRoaXMgb2JqZWN0J3MgdmVyc2lvbiBpbmZvcm1hdGlvbiwgCisgICAgICogICAgICAgICBmYWxzZSBvdGhlcndpc2UKKyAgICAgKiBAZHJhZnQgSUNVIDIuMQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gb3RoZXIgPT0gdGhpczsKKyAgICB9CisgCisgICAgLyoqCisgICAgICogQ29tcGFyZXMgb3RoZXIgd2l0aCB0aGlzIFZlcnNpb25JbmZvLiAKKyAgICAgKiBAcGFyYW0gb3RoZXIgVmVyc2lvbkluZm8gdG8gYmUgY29tcGFyZWQKKyAgICAgKiBAcmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGlzIGEgVmVyc2lvbkluZm8gb2JqZWN0IHRoYXQgaGFzIHZlcnNpb24gCisgICAgICogICAgICAgICAgIGluZm9ybWF0aW9uIGVxdWFscyB0byB0aGlzIG9iamVjdC4gCisgICAgICogICAgICAgICAgIExlc3MgdGhhbiAwIGlmIHRoZSBhcmd1bWVudCBpcyBhIFZlcnNpb25JbmZvIG9iamVjdCB0aGF0IGhhcyAKKyAgICAgKiAgICAgICAgICAgdmVyc2lvbiBpbmZvcm1hdGlvbiBncmVhdGVyIHRoYW4gdGhpcyBvYmplY3QuIAorICAgICAqICAgICAgICAgICBHcmVhdGVyIHRoYW4gMCBpZiB0aGUgYXJndW1lbnQgaXMgYSBWZXJzaW9uSW5mbyBvYmplY3QgdGhhdCAKKyAgICAgKiAgICAgICAgICAgaGFzIHZlcnNpb24gaW5mb3JtYXRpb24gbGVzcyB0aGFuIHRoaXMgb2JqZWN0LgorICAgICAqIEBkcmFmdCBJQ1UgMi4xCisgICAgICovCisgICAgcHVibGljIGludCBjb21wYXJlVG8oVmVyc2lvbkluZm8gb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZXJzaW9uXyAtIG90aGVyLm1fdmVyc2lvbl87CisgICAgfQorICAgCisgICAgLy8gcHJpdmF0ZSBkYXRhIG1lbWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIFZlcnNpb24gbnVtYmVyIHN0b3JlZCBhcyBhIGJ5dGUgZm9yIGVhY2ggb2YgdGhlIG1ham9yLCBtaW5vciwgbWlsbGkgYW5kCisgICAgICogbWljcm8gbnVtYmVycyBpbiB0aGUgMzIgYml0IGludC4KKyAgICAgKiBNb3N0IHNpZ25pZmljYW50IGZvciB0aGUgbWFqb3IgYW5kIHRoZSBsZWFzdCBzaWduaWZpY2FudCBjb250YWlucyB0aGUgCisgICAgICogbWljcm8gbnVtYmVycy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtX3ZlcnNpb25fOworICAgIC8qKgorICAgICAqIE1hcCBvZiBzaW5nbGV0b25zCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGFzaE1hcCBNQVBfID0gbmV3IEhhc2hNYXAoKTsKKyAgICAvKioKKyAgICAgKiBMYXN0IGJ5dGUgbWFzaworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVNUX0JZVEVfTUFTS18gPSAweEZGOworICAgIC8qKgorICAgICAqIEVycm9yIHN0YXRlbWVudCBzdHJpbmcKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5WQUxJRF9WRVJTSU9OX05VTUJFUl8gPSAKKyAgICAgICAgIkludmFsaWQgdmVyc2lvbiBudW1iZXI6IFZlcnNpb24gbnVtYmVyIG1heSBiZSBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gMjU1IjsKKyAgICAgICAgCisgICAgLy8gc3RhdGljIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIEluaXRpYWxpemUgdmVyc2lvbnMgb25seSBhZnRlciBNQVBfIGhhcyBiZWVuIGNyZWF0ZWQKKyAgICAgKi8KKyAgICBzdGF0aWMgeworICAgICAgICBVTklDT0RFXzFfMCAgID0gZ2V0SW5zdGFuY2UoMSwgMCwgMCwgMCk7CisgICAgICAgIFVOSUNPREVfMV8wXzEgPSBnZXRJbnN0YW5jZSgxLCAwLCAxLCAwKTsKKyAgICAgICAgVU5JQ09ERV8xXzFfMCA9IGdldEluc3RhbmNlKDEsIDEsIDAsIDApOworICAgICAgICBVTklDT0RFXzFfMV81ID0gZ2V0SW5zdGFuY2UoMSwgMSwgNSwgMCk7CisgICAgICAgIFVOSUNPREVfMl8wICAgPSBnZXRJbnN0YW5jZSgyLCAwLCAwLCAwKTsgICAgICAgIAorICAgICAgICBVTklDT0RFXzJfMV8yID0gZ2V0SW5zdGFuY2UoMiwgMSwgMiwgMCk7CisgICAgICAgIFVOSUNPREVfMl8xXzUgPSBnZXRJbnN0YW5jZSgyLCAxLCA1LCAwKTsKKyAgICAgICAgVU5JQ09ERV8yXzFfOCA9IGdldEluc3RhbmNlKDIsIDEsIDgsIDApOworICAgICAgICBVTklDT0RFXzJfMV85ID0gZ2V0SW5zdGFuY2UoMiwgMSwgOSwgMCk7CisgICAgICAgIFVOSUNPREVfM18wICAgPSBnZXRJbnN0YW5jZSgzLCAwLCAwLCAwKTsKKyAgICAgICAgVU5JQ09ERV8zXzBfMSA9IGdldEluc3RhbmNlKDMsIDAsIDEsIDApOworICAgICAgICBVTklDT0RFXzNfMV8wID0gZ2V0SW5zdGFuY2UoMywgMSwgMCwgMCk7CisgICAgICAgIFVOSUNPREVfM18xXzEgPSBnZXRJbnN0YW5jZSgzLCAxLCAxLCAwKTsKKyAgICAgICAgVU5JQ09ERV8zXzIgICA9IGdldEluc3RhbmNlKDMsIDIsIDAsIDApOworICAgICAgICBJQ1VfVkVSU0lPTiA9IGdldEluc3RhbmNlKDIsIDQsIDAsIDApOworICAgIH0KKyAgICAKKyAgICAvLyBwcml2YXRlIGNvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3Igd2l0aCBpbnQgCisgICAgICogQHBhcmFtIGNvbXBhY3R2ZXJzaW9uIGEgMzIgYml0IGludCB3aXRoIGVhY2ggYnl0ZSByZXByZXNlbnRpbmcgYSBudW1iZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIFZlcnNpb25JbmZvKGludCBjb21wYWN0dmVyc2lvbikgCisgICAgeworICAgICAgICBtX3ZlcnNpb25fID0gY29tcGFjdHZlcnNpb247ICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBpbnQgZnJvbSB0aGUgdmVyc2lvbiBudW1iZXJzCisgICAgICogQHBhcmFtIG1ham9yIG5vbi1uZWdhdGl2ZSB2ZXJzaW9uIG51bWJlcgorICAgICAqIEBwYXJhbSBtaW5vciBub24tbmVnYXRpdmV2ZXJzaW9uIG51bWJlcgorICAgICAqIEBwYXJhbSBtaWxsaSBub24tbmVnYXRpdmV2ZXJzaW9uIG51bWJlcgorICAgICAqIEBwYXJhbSBtaWNybyBub24tbmVnYXRpdmV2ZXJzaW9uIG51bWJlcgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRJbnQoaW50IG1ham9yLCBpbnQgbWlub3IsIGludCBtaWxsaSwgaW50IG1pY3JvKSAKKyAgICB7CisgICAgICAgIHJldHVybiAobWFqb3IgPDwgMjQpIHwgKG1pbm9yIDw8IDE2KSB8IChtaWxsaSA8PCA4KSB8IG1pY3JvOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL2ljdS91dGlsL3BhY2thZ2UuaHRtbCBiL3NyYy9jb20vaWJtL2ljdS91dGlsL3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYzZhNzVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vaWN1L3V0aWwvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9zcmMvY29tL2libS9pY3UvdXRpbC9wYWNrYWdlLmh0bWwsdiAkCisgICRSZXZpc2lvbjogMS4xICQKKyAgJERhdGU6IDIwMDAvMDMvMTUgMjE6MzU6NTMgJAorLS0+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSI+CitJbnRlcm5hdGlvbmFsIGNhbGVuZGFycyBhbmQgb3RoZXIgdXRpbGl0eSBjbGFzc2VzLgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL0F3dE1lbnVCdWlsZGVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9Bd3RNZW51QnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkZTkxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9Bd3RNZW51QnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBBd3RNZW51QnVpbGRlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQxOjQ5ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuYXd0dWk7CisKK2ltcG9ydCBqYXZhLmF3dC5GcmFtZTsKK2ltcG9ydCBqYXZhLmF3dC5NZW51OworaW1wb3J0IGphdmEuYXd0Lk1lbnVCYXI7CitpbXBvcnQgamF2YS5hd3QuV2luZG93OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuTVRleHRQYW5lbDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5GcmFtZVJlc291cmNlczsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLio7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwuRGlhbG9nSXRlbS5EaWFsb2dGYWN0b3J5OworCisvLyBUTyBETzogIERvbid0IGhhcmQtY29kZSBtZW51IGNvbmZpZ3VyYXRpb25zLiAgSW5zdGVhZCwgc3BlY2lmeSB0aGVtIHdpdGgKKy8vIHN0cmluZ3Mgc29tZWhvdy4gIFRoaXMgaXMgYW4gaW1wcm92ZW1lbnQgb3ZlciB3aGF0IHdlIGhhZCwgYW5kIGl0J2xsIGRvCisvLyBmb3Igbm93LgorCisvKioKKyAqIEF3dE1lbnVCdWlsZGVyIGNyZWF0ZXMgYSBzZXQgb2YgQVdUIG1lbnVzIGZvciBpbnRlcmFjdGluZworICogd2l0aCBhbiBNVGV4dFBhbmVsLiAgRnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgY2xhc3MgbWF5IGFsbG93CisgKiBjbGllbnRzIHRvIGNvbnRyb2wgdGhlIG1lbnUgY29udGVudHMuCisgKiBAc2VlIE1UZXh0UGFuZWwKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEF3dE1lbnVCdWlsZGVyIGV4dGVuZHMgTWVudUJ1aWxkZXIgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXd0TWVudUJ1aWxkZXIgSU5TVEFOQ0UgPSBuZXcgQXd0TWVudUJ1aWxkZXIoKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBJZCBmb3IgYW4gRWRpdCBtZW51LiAgVGhlIEVkaXQgbWVudSBoYXMgdGhlIGZvbGxvd2luZyBpdGVtczoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPjxiPlVuZG88L2I+IC0gaW52b2tlIHVuZG8oKSBvbiB0aGUgTVRleHRQYW5lbDwvbGk+CisgICAgICogPGxpPjxiPlJlZG88L2I+IC0gaW52b2tlIHJlZG8oKSBvbiB0aGUgTVRleHRQYW5lbDwvbGk+CisgICAgICogPGxpPjxiPkN1dDwvYj4gLSBpbnZva2UgY3V0KCkgb24gdGhlIE1UZXh0UGFuZWw8L2xpPgorICAgICAqIDxsaT48Yj5Db3B5PC9iPiAtIGludm9rZSBjb3B5KCkgb24gdGhlIE1UZXh0UGFuZWw8L2xpPgorICAgICAqIDxsaT48Yj5QYXN0ZTwvYj4gLSBpbnZva2UgcGFzdGUoKSBvbiB0aGUgTVRleHRQYW5lbDwvbGk+CisgICAgICogPGxpPjxiPkNsZWFyPC9iPiAtIGludm9rZSBjbGVhcigpIG9uIHRoZSBNVGV4dFBhbmVsPC9saT4KKyAgICAgKiA8bGk+PGI+U2VsZWN0IEFsbDwvYj4gLSBpbnZva2Ugc2VsZWN0QWxsKCkgb24gdGhlIE1UZXh0UGFuZWw8L2xpPgorICAgICAqIDwvdWw+CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRURJVCA9IE1lbnVCdWlsZGVyLkVESVQ7CisgICAgLyoqCisgICAgICogSWQgZm9yIHRoZSBwb2ludCBzaXplcyBtZW51LiAgVGhlIG1lbnUgaGFzIGl0ZW1zIHRoYXQgc2V0IHRoZSBzaXplIG9mIGEgY2hhcmFjdGVyCisgICAgICogaW4gYSB0eXBlZmFjZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSVpFID0gTWVudUJ1aWxkZXIuU0laRTsKKyAgICAvKioKKyAgICAgKiBJZCBmb3IgYSBTdHlsZSBtZW51LiAgVGhlIFN0eWxlIG1lbnUgaGFzIHRoZSBmb2xsb3dpbmcgaXRlbXM6CisgICAgICogPHVsPgorICAgICAqIDxsaT48Yj5QbGFpbjwvYj4gLSByZW1vdmUgPGNvZGU+V0VJR0hUPC9jb2RlPiwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+UE9TVFVSRTwvY29kZT4sCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlVOREVSTElORTwvY29kZT4gYW5kCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlNUUklLRVRIUk9VR0g8L2NvZGU+IGF0dHJpYnV0ZXMgZnJvbSB0aGUKKyAgICAgKiBjdXJyZW50IHNlbGVjdGlvbjwvbGk+CisgICAgICogPGxpPjxiPkJvbGQ8L2I+IC0gYWRkIDxjb2RlPntXRUlHSFQsV0VJR0hUX0JPTER9PC9jb2RlPiB0bworICAgICAqIHRoZSBjdXJyZW50IHNlbGVjdGlvbjwvbGk+CisgICAgICogPGxpPjxiPkl0YWxpYzwvYj4gLSBhZGQgPGNvZGU+e1BPU1RVUkUsUE9TVFVSRV9JVEFMSUN9PC9jb2RlPiB0bworICAgICAqIHRoZSBjdXJyZW50IHNlbGVjdGlvbjwvbGk+CisgICAgICogPGxpPjxiPlVuZGVybGluZTwvYj4gLSBhZGQgPGNvZGU+e1VOREVSTElORSxVTkRFUkxJTkVfT059PC9jb2RlPiB0bworICAgICAqIHRoZSBjdXJyZW50IHNlbGVjdGlvbjwvbGk+CisgICAgICogPGxpPjxiPlN0cmlrZXRocm91Z2g8L2I+IC0gYWRkIDxjb2RlPntTVFJJS0VUSFJPVUdILFNUUklLRVRIUk9VR0hfT059PC9jb2RlPgorICAgICAqIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbjwvbGk+CisgICAgICogPGxpPjxiPkZvbnQuLi48L2I+IC0gZGlzcGxheSBhIGRpYWxvZyBhbGxvd2luZyB0aGUgdXNlciB0bworICAgICAqIHNlbGVjdCBhIHR5cGVmYWNlIChmb250IGZhbWlseSkgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbjwvbGk+CisgICAgICogPGxpPjxiPkZvcmVjb2xvci4uLjwvYj4gLSBkaXNwbGF5IGEgZGlhbG9nIGFsbG93aW5nIHRoZSB1c2VyIHRvCisgICAgICogc2VsZWN0IGEgZm9yZWdyb3VuZCBjb2xvciBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uPC9saT4KKyAgICAgKiA8bGk+PGI+QmFja2NvbG9yLi4uPC9iPiAtIGRpc3BsYXkgYSBkaWFsb2cgYWxsb3dpbmcgdGhlIHVzZXIgdG8KKyAgICAgKiBzZWxlY3QgYSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb248L2xpPgorICAgICAqIDwvdWw+CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEUgPSBNZW51QnVpbGRlci5TVFlMRTsKKyAgICAvKioKKyAgICAgKiBJZCBmb3IgYSBwYXJhZ3JhcGggYWxpZ25tZW50IG1lbnUuICBUaGUgbWVudSBoYXMgdGhlIGZvbGxvd2luZyBpdGVtczoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPjxiPkxlYWRpbmc8L2I+IC0gZ2l2ZSBzZWxlY3RlZCBwYXJhZ3JhcGgocykgTEVBRElORyBmbHVzaDwvbGk+CisgICAgICogPGxpPjxiPkNlbnRlcjwvYj4gLSBnaXZlIHNlbGVjdGVkIHBhcmFncmFwaChzKSBDRU5URVIgZmx1c2g8L2xpPgorICAgICAqIDxsaT48Yj5UcmFpbGluZzwvYj4gLSBnaXZlIHNlbGVjdGVkIHBhcmFncmFwaChzKSBUUkFJTElORyBmbHVzaDwvbGk+CisgICAgICogPGxpPjxiPkp1c3RpZmllZDwvYj4gLSBnaXZlIHNlbGVjdGVkIHBhcmFncmFwaChzKSBmdWxsIGp1c3RpZmljYXRpb248L2xpPgorICAgICAqIDwvdWw+CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxVU0ggPSBNZW51QnVpbGRlci5GTFVTSDsKKyAgICAvKioKKyAgICAgKiBJZCBmb3IgYSBtZW51IHRoYXQgc2V0cyB0aGUgS2V5UmVtYXAKKyAgICAgKiBvbiBhbiBNVGV4dFBhbmVsLiAgVGhlIG1lbnUgaGFzIHRoZSBmb2xsb3dpbmcgaXRlbXM6CisgICAgICogPHVsPgorICAgICAqIDxsaT48Yj5EZWZhdWx0PC9iPiAtIHNldCBLZXlSZW1hcCB0byBpZGVudGl0eSByZW1hcDwvbGk+CisgICAgICogPGxpPjxiPkFyYWJpYzwvYj4gLSBzZXQgS2V5UmVtYXAgdG8gQXJhYmljIHRyYW5zbGl0ZXJhdGlvbjwvbGk+CisgICAgICogPGxpPjxiPkhlYnJldzwvYj4gLSBzZXQgS2V5UmVtYXAgdG8gSGVicmV3IHRyYW5zbGl0ZXJhdGlvbjwvbGk+CisgICAgICogPGxpPjxiPklzcmFlbCBOaWt1ZDwvYj4gLSBzZXQgS2V5UmVtYXAgdG8gSXNyYWVsIE5pa3VkPC9saT4KKyAgICAgKiA8bGk+PGI+VGhhaSBLZXRtYW5lZTwvYj4gLSBzZXQgS2V5UmVtYXAgdG8gVGhhaSBLZXRtYW5lZTwvbGk+CisgICAgICogPC91bD4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLRVlNQVAgPSBNZW51QnVpbGRlci5LRVlNQVA7CisgICAgLyoqCisgICAgICogSWQgZm9yIGEgbWVudSB0aGF0IHNldHMKKyAgICAgKiB0aGUgcHJpbWFyeSBydW4gZGlyZWN0aW9uIGZvciBhIHBhcmFncmFwaC4gIFJ1biBkaXJlY3Rpb24gY2FuIGJlIGxlZnQtdG8tcmlnaHQsCisgICAgICogcmlnaHQtdG8tbGVmdCwgb3IgY2FuIHVzZSB0aGUgZGVmYXVsdCBydW4gZGlyZWN0aW9uIGZyb20gdGhlIFVuaWNvZGUgYmlkaSBhbGdvcml0aG0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklESSA9IE1lbnVCdWlsZGVyLkJJREk7CisgICAgLyoqCisgICAgICogSWQgZm9yIGEgbWVudSB3aXRoIGFuIDxiPkFib3V0PC9iPiBpdGVtLiAgV2hlbiBzZWxlY3RlZCwgCisgICAgICogdGhlIGl0ZW0gZGlzcGxheXMgYSBGcmFtZSBjb250YWluaW5nIHNvbWUKKyAgICAgKiBzZWxmLXByb21vdGlvbmFsIHRleHQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUJPVVQgPSBNZW51QnVpbGRlci5BQk9VVDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgQXd0TWVudUJ1aWxkZXIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBBd3RNZW51QnVpbGRlciBnZXRJbnN0YW5jZSgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBJTlNUQU5DRTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBNZW51QmFyIGZNZW51QmFyOworICAgIAorICAgIHByaXZhdGUgQXd0TWVudUJ1aWxkZXIoKSB7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBhIHN0YW5kYXJkIHNldCBvZiBtZW51cyB0byB0aGUgZ2l2ZW4gbWVudSBiYXIuICBUaGUgbWVudXMgCisgICAgICogd2lsbCBpbnRlcmFjdCB3aXRoIHRoZSBnaXZlbiBNVGV4dFBhbmVsLgorICAgICAqIEBwYXJhbSBtZW51QmFyIHRoZSBNZW51QmFyIHRvIHdoaWNoIG1lbnVzIGFyZSBhZGRlZAorICAgICAqIEBwYXJhbSB0ZXh0UGFuZWwgdGhlIE1UZXh0UGFuZWwgd2l0aCB3aGljaCB0aGUgbWVudXMgaW50ZXJhY3QKKyAgICAgKiBAcGFyYW0gZnJhbWUgYSBGcmFtZSB0byB1c2UgYXMgdGhlIHBhcmVudCBvZiBhbnkgZGlhbG9ncyBjcmVhdGVkIGJ5IGEgCisgICAgICogICBhIG1lbnUgaXRlbS4gIElmIG51bGwsIG1lbnUgaXRlbXMgd2hpY2ggY3JlYXRlIGRpYWxvZ3Mgd2lsbCBiZSBvbWl0dGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZU1lbnVzKE1lbnVCYXIgbWVudUJhciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRleHRQYW5lbCB0ZXh0UGFuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUgZnJhbWUpIHsKKyAgICAgICAgCisgICAgICAgIGNyZWF0ZU1lbnVzKG1lbnVCYXIsIHRleHRQYW5lbCwgZnJhbWUsIGRlZmF1bHRNZW51cyk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBhIHNldCBvZiBtZW51cyB0byB0aGUgZ2l2ZW4gbWVudSBiYXIuICBUaGUgbWVudXMgCisgICAgICogd2lsbCBpbnRlcmFjdCB3aXRoIHRoZSBnaXZlbiBNVGV4dFBhbmVsLgorICAgICAqIEBwYXJhbSBtZW51QmFyIHRoZSBNZW51QmFyIHRvIHdoaWNoIG1lbnVzIGFyZSBhZGRlZAorICAgICAqIEBwYXJhbSB0ZXh0UGFuZWwgdGhlIE1UZXh0UGFuZWwgd2l0aCB3aGljaCB0aGUgbWVudXMgaW50ZXJhY3QKKyAgICAgKiBAcGFyYW0gZnJhbWUgYSBGcmFtZSB0byB1c2UgYXMgdGhlIHBhcmVudCBvZiBhbnkgZGlhbG9ncyBjcmVhdGVkIGJ5IGEgCisgICAgICogICBhIG1lbnUgaXRlbS4gIElmIG51bGwsIG1lbnUgaXRlbXMgd2hpY2ggY3JlYXRlIGRpYWxvZ3Mgd2lsbCBiZSBvbWl0dGVkLgorICAgICAqIEBwYXJhbSBtZW51cyBhbiBhcnJheSBvZiBpbnRlZ2VyIG1lbnUgaWQncy4gIEVhY2ggZWxlbWVudCBvZiB0aGUKKyAgICAgKiAgIGFycmF5IG11c3QgYmUgb25lIG9mIHRoaXMgY2xhc3MncyBtZW51IGlkIGNvbnN0YW50cy4gIElmIG51bGwsCisgICAgICogICB0aGUgZGVmYXVsdCBtZW51cyBhcmUgY3JlYXRlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVNZW51cyhNZW51QmFyIG1lbnVCYXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UZXh0UGFuZWwgdGV4dFBhbmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIG1lbnVzKSB7CisgICAgICAgIAorICAgICAgICBpZiAobWVudXMgPT0gbnVsbCkgeworICAgICAgICAgICAgbWVudXMgPSBkZWZhdWx0TWVudXM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN5bmNocm9uaXplZCAoTUl0ZW0uTE9DSykgeworICAgICAgICAgICAgCisgICAgICAgICAgICBmTWVudUJhciA9IG1lbnVCYXI7CisgICAgICAgICAgICBkb0NyZWF0ZU1lbnVzKHRleHRQYW5lbCwgZnJhbWUsIG1lbnVzKTsKKyAgICAgICAgICAgIGZNZW51QmFyID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBZGRNZW51KFN0cmluZyBrZXkpIHsKKyAgICAgICAgCisgICAgICAgIE1lbnUgbWVudSA9IG5ldyBNZW51KFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoa2V5KSk7CisgICAgICAgIGZNZW51QmFyLmFkZChtZW51KTsKKyAgICAgICAgTUl0ZW0uc2V0SXRlbUZhY3RvcnkobmV3IEF3dE1lbnVGYWN0b3J5KG1lbnUpKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgRGlhbG9nRmFjdG9yeSBjcmVhdGVPYmplY3REaWFsb2dGYWN0b3J5KGZpbmFsIFN0cmluZyBkaWFsb2dUaXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkaWFsb2dNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSB2YWx1ZXMpIHsKKyAgICAgICAgCisgICAgICAgIGZpbmFsIEZyYW1lIGRpYWxvZ1BhcmVudCA9IGZEaWFsb2dQYXJlbnQ7CisKKyAgICAgICAgcmV0dXJuIG5ldyBEaWFsb2dGYWN0b3J5KCkgeyAgICAKKyAgICAgICAgICAgIHB1YmxpYyBXaW5kb3cgY3JlYXRlRGlhbG9nKE1UZXh0UGFuZWwgdGV4dFBhbmVsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYmplY3REaWFsb2coZGlhbG9nUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1RpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ01lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFBhbmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIERpYWxvZ0ZhY3RvcnkgY3JlYXRlTnVtYmVyRGlhbG9nRmFjdG9yeShmaW5hbCBTdHJpbmcgZGlhbG9nVGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZGlhbG9nTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGNoYXJhY3RlcikgeworICAgICAgICAKKyAgICAgICAgZmluYWwgRnJhbWUgZGlhbG9nUGFyZW50ID0gZkRpYWxvZ1BhcmVudDsKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IERpYWxvZ0ZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgV2luZG93IGNyZWF0ZURpYWxvZyhNVGV4dFBhbmVsIHRleHRQYW5lbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTnVtYmVyRGlhbG9nKGRpYWxvZ1BhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dUaXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQYW5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gICAgCisgICAgCisgICAgcHJvdGVjdGVkIERpYWxvZ0ZhY3RvcnkgY3JlYXRlQWJvdXREaWFsb2dGYWN0b3J5KCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5ldyBEaWFsb2dGYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFdpbmRvdyBjcmVhdGVEaWFsb2coTVRleHRQYW5lbCB0ZXh0UGFuZWwpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLkFCT1VUX1RJVExFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2VEaWFsb2codGl0bGUsIEFib3V0VGV4dC5nZXRBYm91dFRleHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL0F3dE1lbnVGYWN0b3J5LmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9Bd3RNZW51RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllMjYxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9Bd3RNZW51RmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBBd3RNZW51RmFjdG9yeS5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAwLzA0LzIwIDE5OjI5OjA4ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuYXd0dWk7CisKK2ltcG9ydCBqYXZhLmF3dC5DaGVja2JveE1lbnVJdGVtOworaW1wb3J0IGphdmEuYXd0Lk1lbnU7CitpbXBvcnQgamF2YS5hd3QuTWVudUl0ZW07CitpbXBvcnQgamF2YS5hd3QuTWVudVNob3J0Y3V0OworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuSXRlbUV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lkl0ZW1MaXN0ZW5lcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5NSXRlbTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5NSXRlbS5JdGVtRmFjdG9yeTsKKworZmluYWwgY2xhc3MgQXd0TWVudUZhY3RvcnkgaW1wbGVtZW50cyBJdGVtRmFjdG9yeSB7CisgICAgICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBBd3RNSXRlbSBleHRlbmRzIE1JdGVtIHsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgTWVudUl0ZW0gZkl0ZW07CisgICAgICAgIAorICAgICAgICBBd3RNSXRlbShNZW51SXRlbSBpdGVtKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZJdGVtID0gaXRlbTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQ2hlY2tib3hNZW51SXRlbSBjaEl0ZW0gPSAoQ2hlY2tib3hNZW51SXRlbSkgZkl0ZW07CisgICAgICAgICAgICAgICAgY2hJdGVtLmFkZEl0ZW1MaXN0ZW5lcihuZXcgSXRlbUxpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBpdGVtU3RhdGVDaGFuZ2VkKEl0ZW1FdmVudCBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RlZCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXZ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RlZCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFjayAtIGhvdyBkbyB5b3UgZG8gdGhpcyBmcm9tIGlubmVyIGNsYXNzZXM/PworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVTZWxlY3RlZCgpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3VwZXIuaGFuZGxlU2VsZWN0ZWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIGZpbmFsIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZkl0ZW0uc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIHZvaWQgc2V0U3RhdGUoYm9vbGVhbiBjaGVja2VkKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQ2hlY2tib3hNZW51SXRlbSBpdGVtID0gKENoZWNrYm94TWVudUl0ZW0pIGZJdGVtOworICAgICAgICAgICAgICAgIGl0ZW0uc2V0U3RhdGUoY2hlY2tlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBlcmZvcm0gc2V0Q2hlY2tlZCBvbiBub24tY2hlY2tib3ggaXRlbSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgTWVudSBmTWVudTsKKyAgICAgICAgCisgICAgQXd0TWVudUZhY3RvcnkoTWVudSBtZW51KSB7CisgICAgICAgICAgICAKKyAgICAgICAgZk1lbnUgPSBtZW51OworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIE1JdGVtIGhhbmRsZUNyZWF0ZShNZW51SXRlbSBpdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnVEYXRhIG1lbnVEYXRhKSB7CisKKyAgICAgICAgaWYgKG1lbnVEYXRhLmhhc1Nob3J0Y3V0KCkpIHsKKyAgICAgICAgICAgIGl0ZW0uc2V0U2hvcnRjdXQobmV3IE1lbnVTaG9ydGN1dChtZW51RGF0YS5nZXRTaG9ydGN1dENoYXIoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmTWVudS5hZGQoaXRlbSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IEF3dE1JdGVtKGl0ZW0pOworICAgIH0KKyAgICAgICAgCisgICAgcHVibGljIE1JdGVtIGNyZWF0ZUl0ZW0oTWVudURhdGEgbWVudURhdGEpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBoYW5kbGVDcmVhdGUobmV3IE1lbnVJdGVtKG1lbnVEYXRhLmdldE5hbWUoKSksIG1lbnVEYXRhKTsKKyAgICB9ICAgICAgICAKKworICAgIHB1YmxpYyBNSXRlbSBjcmVhdGVDaGVja2JveEl0ZW0oTWVudURhdGEgbWVudURhdGEpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBoYW5kbGVDcmVhdGUobmV3IENoZWNrYm94TWVudUl0ZW0obWVudURhdGEuZ2V0TmFtZSgpKSwgbWVudURhdGEpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVTZXBhcmF0b3IoKSB7CisgICAgICAgIAorICAgICAgICBmTWVudS5hZGQobmV3IE1lbnVJdGVtKCItIikpOworICAgIH0KK30KKyAgICAKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL01UYWJSdWxlckNvbXBvbmVudC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvYXd0dWkvTVRhYlJ1bGVyQ29tcG9uZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDZiNDdiYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL01UYWJSdWxlckNvbXBvbmVudC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IE1UYWJSdWxlckNvbXBvbmVudC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQxOjQ5ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuYXd0dWk7CisKK2ltcG9ydCBqYXZhLmF3dC5Db2xvcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTVRhYlJ1bGVyOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CisKKy8qKgorICogTVRhYlJ1bGVyQ29tcG9uZW50IGlzIGltcGxlbWVudGVkIGJ5IGNvbXBvbmVudHMgd2hpY2ggcHJvdmlkZSBhIHRhYi1ydWxlcgorICogaW50ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIGFuIE1UZXh0UGFuZWwuCisgKiA8cD4KKyAqIFVzZXJzIGludGVyYWN0IHdpdGggTVRhYlJ1bGVyQ29tcG9uZW50IGltcGxlbWVudGF0aW9ucyBhcyBmb2xsb3dzOgorICogPHVsPgorICogPGxpPlRoZSBsZWFkaW5nIG1hcmdpbiBjYW4gYmUgc2V0IGJ5IGRyYWdnaW5nIHRoZSBib3R0b20gaGFsZgorICogb2YgdGhlIGxlZnRtb3N0IHRyaWFuZ2xlLiAgVGhlIGZpcnN0LWxpbmUgaW5kZW50IHdpbGwgInN0aWNrIiB3aXRoCisgKiB0aGUgbGVhZGluZyBtYXJnaW4uPC9saT4KKyAqIDxsaT5UaGUgZmlyc3QtbGluZSBpbmRlbnQgY2FuIGJlIHNldCBieSBkcmFnZ2luZyB0aGUgdG9wIGhhbGYgb2YgdGhlCisgKiBsZWZ0bW9zdCB0cmlhbmdsZS4gIFRoZSBmaXJzdC1saW5lIGluZGVudCBhcHBsaWVzIHRvIHRoZSBmaXJzdCBsaW5lIG9mCisgKiBhIHBhcmFncmFwaC48L2xpPgorICogPGxpPlRoZSB0cmFpbGluZyBtYXJnaW4gY2FuIGJlIHNldCBieSBkcmFnZ2luZyB0aGUgcmlnaHRtb3N0IHRyaWFuZ2xlLjwvbGk+CisgKiA8bGk+VGFicyBjYW4gYmUgYWRkZWQgdG8gdGhlIHJ1bGVyIGJ5IGNsaWNraW5nIHRoZSBtb3VzZSBvbiB0aGUgcnVsZXIgd2l0aCB0aGUKKyAqIGNvbnRyb2wga2V5IHByZXNzZWQuICBGb3VyIGtpbmRzIG9mIHRhYnMgYXJlIHByb3ZpZGVkOiAgbGVhZGluZywgdHJhaWxpbmcsIGNlbnRlciwKKyAqIGFuZCBkZWNpbWFsLiAgVGhlIHR5cGUgb2YgYSB0YWIgY2FuIGJlIGNoYW5nZWQgYnkgZG91YmxlLWNsaWNraW5nIHRoZSB0YWIuPC9saT4KKyAqIDxsaT5UYWJzIGNhbiBiZSByZXBvc2l0aW9uZWQgYnkgZHJhZ2dpbmcgdGhlbSB3aXRoIHRoZSBtb3VzZS48L2xpPgorICogPC91bD4KKyAqIDxwPgorICogTVRhYlJ1bGVyQ29tcG9uZW50J3MgYXBwZWFyYW5jZSB3aWxsIHJlZmxlY3QgdGhlIHBhcmFncmFwaCBzdHlsZXMgaW4gdGhlCisgKiBmaXJzdCBzZWxlY3RlZCBwYXJhZ3JhcGguICBTdHlsZSBjaGFuZ2VzIHBlcmZvcm1lZCB3aXRoIGFuIAorICogTVRhYlJ1bGVyQ29tcG9uZW50IHdpbGwgYXBwbHkgdG8gYWxsIHNlbGVjdGVkIHBhcmFncmFwaHMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTVRhYlJ1bGVyQ29tcG9uZW50IHsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworCisgICAgLyoqCisgICAgICogTGlzdGVuIHRvIHRoZSBnaXZlbiBNVGV4dFBhbmVsIGFuZCByZWZsZWN0IGl0cyBjaGFuZ2VzLAorICAgICAqIGFuZCB1cGRhdGUgaXRzIHBhcmFncmFwaCBzdHlsZXMgd2hlbiBUYWJSdWxlciBpcworICAgICAqIG1hbmlwdWxhdGVkLgorICAgICAqIEBwYXJhbSB0ZXh0UGFuZWwgdGhlIE1UZXh0UGFuZWwgdG8gbGlzdGVuIHRvCisgICAgICovCisgICAgcHVibGljIHZvaWQgbGlzdGVuVG9UZXh0UGFuZWwoTVRleHRQYW5lbCB0ZXh0UGFuZWwpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHJldHVybiB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGlzIFRhYlJ1bGVyCisgICAgICovCisgICAgcHVibGljIENvbG9yIGdldEJhY2tDb2xvcigpOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHBhcmFtIGJhY2tDb2xvciB0aGUgbmV3IGJhY2tncm91bmQgY29sb3Igb2YgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEJhY2tDb2xvcihDb2xvciBiYWNrQ29sb3IpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBNVGFiUnVsZXIgcmVwcmVzZW50ZWQgYnkgdGhpcyBUYWJSdWxlci4KKyAgICAgKiBAcmV0dXJuIHRoZSBNVGFiUnVsZXIgcmVwcmVzZW50ZWQgYnkgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyBNVGFiUnVsZXIgZ2V0UnVsZXIoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbGVhZGluZyBtYXJnaW4gb2YgdGhpcyBUYWJSdWxlci4KKyAgICAgKiBAcmV0dXJuIHRoZSBsZWFkaW5nIG1hcmdpbiBvZiB0aGlzIFRhYlJ1bGVyCisgICAgICovCisgICAgcHVibGljIGludCBnZXRMZWFkaW5nTWFyZ2luKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IGxpbmUgaW5kZW50IG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHJldHVybiB0aGUgZmlyc3QgbGluZSBpbmRlbnQgb2YgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0Rmlyc3RMaW5lSW5kZW50KCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHRyYWlsaW5nIG1hcmdpbiBvZiB0aGlzIFRhYlJ1bGVyLgorICAgICAqIEByZXR1cm4gdGhlIHRyYWlsaW5nIG1hcmdpbiBvZiB0aGlzIFRhYlJ1bGVyCisgICAgICovCisgICAgcHVibGljIGludCBnZXRUcmFpbGluZ01hcmdpbigpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvYXd0dWkvTWVzc2FnZURpYWxvZy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvYXd0dWkvTWVzc2FnZURpYWxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3YzkzOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9NZXNzYWdlRGlhbG9nLmphdmEKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogTWVzc2FnZURpYWxvZy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQxOjQ5ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuYXd0dWk7CisKK2ltcG9ydCBqYXZhLmF3dC5Db2xvcjsKK2ltcG9ydCBqYXZhLmF3dC5GcmFtZTsKK2ltcG9ydCBqYXZhLmF3dC5DYXJkTGF5b3V0OworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbFNldHRpbmdzOworCisvKioKKyAqIE1lc3NhZ2VEaWFsb2cgaXMgYSBzaW1wbGUgRnJhbWUgd2hpY2ggZGlzcGxheXMgYSBzdHlsZWQKKyAqIHRleHQgbWVzc2FnZSBpbiBhIFRleHRQYW5lbC4KKyAqIFRoZSB0ZXh0IGluIHRoZSBtZXNzYWdlIGlzIG5vdCBzZWxlY3RhYmxlIG9yIGVkaXRhYmxlLgorICogQHNlZSBNQ29uc3RUZXh0CisgKiBAc2VlIFRleHRQYW5lbAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgTWVzc2FnZURpYWxvZyBleHRlbmRzIEZyYW1lIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLyoqCisgICAgKiBDcmVhdGUgYSBuZXcgTWVzc2FnZURpYWxvZy4KKyAgICAqIEBwYXJhbSB0aXRsZSB0aGUgZGlhbG9nJ3MgdGl0bGUKKyAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSB0ZXh0IHdoaWNoIHdpbGwgYXBwZWFyIGluIHRoZSBkaWFsb2cKKyAgICAqLworICAgIHB1YmxpYyBNZXNzYWdlRGlhbG9nKFN0cmluZyB0aXRsZSwgTUNvbnN0VGV4dCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgc3VwZXIodGl0bGUpOworCisgICAgICAgIHNldExheW91dChuZXcgQ2FyZExheW91dCgpKTsKKyAgICAgICAgVGV4dFBhbmVsU2V0dGluZ3Mgc2V0dGluZ3MgPSBUZXh0UGFuZWwuZ2V0RGVmYXVsdFNldHRpbmdzKCk7CisgICAgICAgIHNldHRpbmdzLnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgICAgICBzZXR0aW5ncy5zZXRTZWxlY3RhYmxlKGZhbHNlKTsKKyAgICAgICAgVGV4dFBhbmVsIHBhbmVsID0gbmV3IFRleHRQYW5lbChzZXR0aW5ncywgbWVzc2FnZSwgbnVsbCk7CisKKyAgICAgICAgcGFuZWwuc2V0QmFja2dyb3VuZChDb2xvci5ibGFjayk7CisgICAgICAgIGFkZCgiQ2VudGVyIiwgcGFuZWwpOworCisgICAgICAgIGFkZFdpbmRvd0xpc3RlbmVyKG5ldyBXaW5kb3dBZGFwdGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhXaW5kb3dFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgICAgICAgICAgZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBzZXRTaXplKDQ1MCwzMjApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL051bWJlckRpYWxvZy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvYXd0dWkvTnVtYmVyRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjNjOTc2ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL051bWJlckRpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBOdW1iZXJEaWFsb2cuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo0MTo0OSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmF3dHVpOworCitpbXBvcnQgamF2YS5hd3QuRmxvd0xheW91dDsKK2ltcG9ydCBqYXZhLmF3dC5EaWFsb2c7CitpbXBvcnQgamF2YS5hd3QuVGV4dEZpZWxkOworaW1wb3J0IGphdmEuYXd0LkJ1dHRvbjsKK2ltcG9ydCBqYXZhLmF3dC5GcmFtZTsKK2ltcG9ydCBqYXZhLmF3dC5QYW5lbDsKK2ltcG9ydCBqYXZhLmF3dC5MYWJlbDsKKworaW1wb3J0IGphdmEudGV4dC5OdW1iZXJGb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5GcmFtZVJlc291cmNlczsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5NZW51SXRlbVNldDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5SZXNvdXJjZVV0aWxzOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuTVRleHRQYW5lbDsKKworLyoqCisqIFNpbXBsZSBkaWFsb2cgd2hpY2ggZ2V0cyBhIG51bWJlciwgYW5kIHNlbmRzIGFuIGFwcHJvcHJpYXRlIGNvbW1hbmQKKyovCitmaW5hbCBjbGFzcyBOdW1iZXJEaWFsb2cgZXh0ZW5kcyBEaWFsb2cgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lcgoreworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBNVGV4dFBhbmVsIGZUZXh0UGFuZWw7CisgICAgcHJpdmF0ZSBUZXh0RmllbGQgZklucHV0ID0gbnVsbDsKKyAgICBwcml2YXRlIEJ1dHRvbiBmT0tCdXR0b24gPSBudWxsOworICAgIHByaXZhdGUgQnV0dG9uIGZDYW5jZWxCdXR0b24gPSBudWxsOworICAgIHByaXZhdGUgYm9vbGVhbiBmQ2hhcmFjdGVyOworICAgIHByaXZhdGUgT2JqZWN0IGZLZXk7CisgICAgcHJpdmF0ZSBmbG9hdCBmTXVsdGlwbGllcjsgCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gbXVsdGlwbGllciB0aGUgZmFjdG9yIGJ5IHdoaWNoIHRvIG11bHRpcGx5IHRoZSB1c2VyJ3MKKyAgICAgKiAgICAgICAgc2VsZWN0aW9uIGJlZm9yZSBjcmVhdGluZyB0aGUgYXR0cmlidXRlIHZhbHVlLiAgIFRoaXMKKyAgICAgKiAgICAgICAgaXMgdXNlZnVsIGZvciBzdWJzY3JpcHRpbmcuCisgICAgICovCisgICAgTnVtYmVyRGlhbG9nKEZyYW1lIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgU3RyaW5nIHRpdGxlLAorICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgTVRleHRQYW5lbCB0ZXh0UGFuZWwsCisgICAgICAgICAgICAgICAgIE9iamVjdCBrZXksCisgICAgICAgICAgICAgICAgIGJvb2xlYW4gY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICBmbG9hdCBtdWx0aXBsaWVyKSB7CisKKyAgICAgICAgc3VwZXIocGFyZW50LCB0aXRsZSwgZmFsc2UpOworICAgICAgICBmVGV4dFBhbmVsID0gdGV4dFBhbmVsOworICAgICAgICBmS2V5ID0ga2V5OworICAgICAgICBmQ2hhcmFjdGVyID0gY2hhcmFjdGVyOworICAgICAgICBmTXVsdGlwbGllciA9IG11bHRpcGxpZXI7CisgICAgICAgIHNldExheW91dChuZXcgamF2YS5hd3QuR3JpZExheW91dCgyLDEpKTsKKworICAgICAgICBQYW5lbCBwYW5lbCA9IG5ldyBQYW5lbCgpOworICAgICAgICBwYW5lbC5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5DRU5URVIsIDEwLCAxNSkpOworICAgICAgICBmSW5wdXQgPSBuZXcgVGV4dEZpZWxkKDUpOworICAgICAgICBwYW5lbC5hZGQobmV3IExhYmVsKG1lc3NhZ2UpKTsKKyAgICAgICAgcGFuZWwuYWRkKGZJbnB1dCk7CisgICAgICAgIGFkZCgiQ2VudGVyIiwgcGFuZWwpOworCisgICAgICAgIGZDYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uKFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuQ0FOQ0VMKSk7CisgICAgICAgIGZPS0J1dHRvbiA9IG5ldyBCdXR0b24oUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5PSykpOworICAgICAgICBQYW5lbCBwID0gbmV3IFBhbmVsKCk7CisgICAgICAgIHAuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuQ0VOVEVSLCA1LCA1KSk7CisgICAgICAgIHAuYWRkKGZDYW5jZWxCdXR0b24pOworICAgICAgICBwLmFkZChmT0tCdXR0b24pOworICAgICAgICBhZGQoIlNvdXRoIiwgcCk7CisKKyAgICAgICAgcGFjaygpOworCisgICAgICAgIGFkZFdpbmRvd0xpc3RlbmVyKG5ldyBXaW5kb3dBZGFwdGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhXaW5kb3dFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgY2xvc2VXaW5kb3coZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGZPS0J1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZkNhbmNlbEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2xvc2VXaW5kb3coYm9vbGVhbiBzZW5kQWN0aW9uKSB7CisKKyAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7CisKKyAgICAgICAgaW50IG51bSA9IDA7CisgICAgICAgIGlmIChzZW5kQWN0aW9uKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZklucHV0LmdldFRleHQoKTsKKyAgICAgICAgICAgICAgICBudW0gPSBOdW1iZXJGb3JtYXQuZ2V0SW5zdGFuY2UoKS5wYXJzZSh0ZXh0KS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIHNlbmRBY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZW5kQWN0aW9uKSB7CisgICAgICAgICAgICBzZW5kQWN0aW9uKG51bSk7CisgICAgICAgIH0KKworICAgICAgICBkaXNwb3NlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKworICAgICAgICBPYmplY3Qgc291cmNlID0gZS5nZXRTb3VyY2UoKTsKKworICAgICAgICBpZiAoc291cmNlID09IGZPS0J1dHRvbikgeworICAgICAgICAgICAgY2xvc2VXaW5kb3codHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc291cmNlID09IGZDYW5jZWxCdXR0b24pIHsKKyAgICAgICAgICAgIGNsb3NlV2luZG93KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgQWN0aW9uRXZlbnQhIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIEhhbmRsZSB0aGUgdXNlciBpbnB1dAorICAgICogQHBhcmFtIHRoZSBudW1iZXIgdGhlIHVzZXIgdHlwZWQgaW4KKyAgICAqLworICAgIHByaXZhdGUgdm9pZCBzZW5kQWN0aW9uKGludCBudW1iZXIpIHsKKyAgICAgICAgZmxvYXQgbnVtID0gbnVtYmVyICogZk11bHRpcGxpZXI7CisgICAgICAgIFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIgPSBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGbG9hdChudW0pKTsKKyAgICAgICAgaWYgKGZDaGFyYWN0ZXIgPT0gTWVudUl0ZW1TZXQuQ0hBUkFDVEVSKSB7CisgICAgICAgICAgICBmVGV4dFBhbmVsLm1vZGlmeUNoYXJhY3RlclN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZlRleHRQYW5lbC5tb2RpZnlQYXJhZ3JhcGhTdHlsZU9uU2VsZWN0aW9uKG1vZGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL09iamVjdERpYWxvZy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvYXd0dWkvT2JqZWN0RGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU4NjYyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL09iamVjdERpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBPYmplY3REaWFsb2cuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozMiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmF3dHVpOworCitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuTVRleHRQYW5lbDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5NZW51SXRlbVNldDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5GcmFtZVJlc291cmNlczsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5SZXNvdXJjZVV0aWxzOworCitpbXBvcnQgamF2YS5hd3QuRGlhbG9nOworaW1wb3J0IGphdmEuYXd0LkZyYW1lOworaW1wb3J0IGphdmEuYXd0LkJ1dHRvbjsKK2ltcG9ydCBqYXZhLmF3dC5DaG9pY2U7CitpbXBvcnQgamF2YS5hd3QuTGFiZWw7CitpbXBvcnQgamF2YS5hd3QuQm9yZGVyTGF5b3V0OworaW1wb3J0IGphdmEuYXd0LkZsb3dMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuUGFuZWw7CitpbXBvcnQgamF2YS5hd3QuR3JpZExheW91dDsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkxpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI7CisKKy8qKgorKiBTaW1wbGUgZGlhbG9nIHdoaWNoIGdldHMgYSBjb2xvcgorKi8KK2ZpbmFsIGNsYXNzIE9iamVjdERpYWxvZyBleHRlbmRzIERpYWxvZyBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyCit7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHByaXZhdGUgZmluYWwgTVRleHRQYW5lbCBmVGV4dFBhbmVsOworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IGZLZXk7CisgICAgcHJpdmF0ZSBib29sZWFuIGZDaGFyYWN0ZXI7CisKKyAgICBwcml2YXRlIGZpbmFsIEJ1dHRvbiBmT0tCdXR0b247CisgICAgcHJpdmF0ZSBmaW5hbCBCdXR0b24gZkNhbmNlbEJ1dHRvbjsKKyAgICBwcml2YXRlIGZpbmFsIENob2ljZSBmSXRlbXM7CisgICAgcHJpdmF0ZSBmaW5hbCBIYXNodGFibGUgZk5hbWVUb1ZhbHVlTWFwOworICAgIC8qKgorICAgICogQ29uc3RydWN0IGEgbmV3IENvbG9yRGlhbG9nLgorICAgICogQHBhcmFtIHBhcmVudCB0aGUgZGlhbG9nJ3MgcGFyZW50IGZyYW1lCisgICAgKiBAcGFyYW0gdGl0bGUgdGhlIGRpYWxvZ3MgdGl0bGUKKyAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIGRpc3BsYXllZCBuZXh0IHRvIHRoZSBpbnB1dCBib3gKKyAgICAqLworICAgIE9iamVjdERpYWxvZyhGcmFtZSBwYXJlbnQsIAorICAgICAgICAgICAgICAgICBTdHJpbmcgdGl0bGUsIAorICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSwgCisgICAgICAgICAgICAgICAgIE1UZXh0UGFuZWwgdGV4dFBhbmVsLAorICAgICAgICAgICAgICAgICBPYmplY3Qga2V5LAorICAgICAgICAgICAgICAgICBib29sZWFuIGNoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgU3RyaW5nW10gbmFtZXMsCisgICAgICAgICAgICAgICAgIE9iamVjdFtdIHZhbHVlcykgeworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgc3VwZXIocGFyZW50LCB0aXRsZSwgZmFsc2UpOworICAgICAgICBmVGV4dFBhbmVsID0gdGV4dFBhbmVsOworICAgICAgICBmS2V5ID0ga2V5OworICAgICAgICBmQ2hhcmFjdGVyID0gY2hhcmFjdGVyOworICAgICAgICAKKyAgICAgICAgc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIDEpKTsKKworICAgICAgICBQYW5lbCBwYW5lbCA9IG5ldyBQYW5lbCgpOworICAgICAgICBwYW5lbC5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5DRU5URVIsIDEwLCAxMCkpOworICAgICAgICBmSXRlbXMgPSBuZXcgQ2hvaWNlKCk7CisKKyAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCAhPSB2YWx1ZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNdXN0IGhhdmUgc2FtZSBudW1iZXIgb2YgbmFtZXMgYW5kIHZhbHVlcy4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZOYW1lVG9WYWx1ZU1hcCA9IG5ldyBIYXNodGFibGUobmFtZXMubGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmSXRlbXMuYWRkKG5hbWVzW2ldKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZOYW1lVG9WYWx1ZU1hcC5wdXQobmFtZXNbaV0sIHZhbHVlc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwYW5lbC5hZGQobmV3IExhYmVsKG1lc3NhZ2UpKTsgICAgICAgIAorICAgICAgICBwYW5lbC5hZGQoZkl0ZW1zKTsKKyAgICAgICAgCisgICAgICAgIGFkZCgiTm9ydGgiLCBwYW5lbCk7CisKKyAgICAgICAgZkNhbmNlbEJ1dHRvbiA9IG5ldyBCdXR0b24oUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5DQU5DRUwpKTsKKyAgICAgICAgZk9LQnV0dG9uID0gbmV3IEJ1dHRvbihSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLk9LKSk7CisgICAgICAgIFBhbmVsIHAgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgcC5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5DRU5URVIsIDUsIDUpKTsKKyAgICAgICAgcC5hZGQoZkNhbmNlbEJ1dHRvbik7CisgICAgICAgIHAuYWRkKGZPS0J1dHRvbik7CisgICAgICAgIGFkZCgiU291dGgiLCBwKTsKKworICAgICAgICBwYWNrKCk7CisKKyAgICAgICAgYWRkV2luZG93TGlzdGVuZXIobmV3IFdpbmRvd0FkYXB0ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9zaW5nKFdpbmRvd0V2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBjbG9zZVdpbmRvdyhmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZk9LQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICBmQ2FuY2VsQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjbG9zZVdpbmRvdyhib29sZWFuIHNlbmRBY3Rpb24pIHsKKworICAgICAgICBzZXRWaXNpYmxlKGZhbHNlKTsKKyAgICAgICAgaWYgKHNlbmRBY3Rpb24pIHsKKyAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGZOYW1lVG9WYWx1ZU1hcC5nZXQoZkl0ZW1zLmdldFNlbGVjdGVkSXRlbSgpKTsKKyAgICAgICAgICAgIHNlbmRBY3Rpb24odmFsdWUpOworICAgICAgICB9CisgICAgICAgIGRpc3Bvc2UoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworCisgICAgICAgIE9iamVjdCBzb3VyY2UgPSBlLmdldFNvdXJjZSgpOworCisgICAgICAgIGlmIChzb3VyY2UgPT0gZk9LQnV0dG9uKSB7CisgICAgICAgICAgICBjbG9zZVdpbmRvdyh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gZkNhbmNlbEJ1dHRvbikgeworICAgICAgICAgICAgY2xvc2VXaW5kb3coZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBBY3Rpb25FdmVudCEiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICogSGFuZGxlIHRoZSB1c2VyIGlucHV0CisgICAgKiBAcGFyYW0gb2JqIHRoZSB2YWx1ZSBvYmplY3QKKyAgICAqLworICAgIHByaXZhdGUgdm9pZCBzZW5kQWN0aW9uKE9iamVjdCB2YWx1ZSkgeworCisgICAgICAgIFN0eWxlTW9kaWZpZXIgbW9kaWZpZXI7CisgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CisgICAgICAgICAgICBtb2RpZmllciA9IFN0eWxlTW9kaWZpZXIuY3JlYXRlQWRkTW9kaWZpZXIoZktleSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQXR0cmlidXRlU2V0IHNldCA9IG5ldyBBdHRyaWJ1dGVTZXQoZktleSk7CisgICAgICAgICAgICBtb2RpZmllciA9IFN0eWxlTW9kaWZpZXIuY3JlYXRlUmVtb3ZlTW9kaWZpZXIoc2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZDaGFyYWN0ZXIgPT0gTWVudUl0ZW1TZXQuQ0hBUkFDVEVSKSB7CisgICAgICAgICAgICBmVGV4dFBhbmVsLm1vZGlmeUNoYXJhY3RlclN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZlRleHRQYW5lbC5tb2RpZnlQYXJhZ3JhcGhTdHlsZU9uU2VsZWN0aW9uKG1vZGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL1RhYlJ1bGVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9UYWJSdWxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0ODI1ZDViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvYXd0dWkvVGFiUnVsZXIuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGFiUnVsZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo0MTo0OSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmF3dHVpOworCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS5hd3QuQ29tcG9uZW50OworaW1wb3J0IGphdmEuYXd0LkRpbWVuc2lvbjsKK2ltcG9ydCBqYXZhLmF3dC5HcmFwaGljczsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwuVGFiUnVsZXJJbXBsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NVGFiUnVsZXI7CisKKy8qKgorICogVGFiUnVsZXIgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgTVRhYlJ1bGVyQ29tcG9uZW50IGluIGFuIEFXVCBjb21wb25lbnQuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUYWJSdWxlciBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIE1UYWJSdWxlckNvbXBvbmVudCB7CisgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIFRhYlJ1bGVySW1wbCBmSW1wbDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgVGFiUnVsZXIuCisgICAgICogQHBhcmFtIGJhc2VsaW5lIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHJ1bGVyJ3MgYmFzZWxpbmUKKyAgICAgKiBAcGFyYW0gb3JpZ2luIHRoZSB4LWNvb3JkaW5hdGUgaW4gdGhpcyBDb21wb25lbnQgd2hlcmUKKyAgICAgKiAgICAgdGhlIGxlZnQgbWFyZ2luIGFwcGVhcnMKKyAgICAgKiBAcGFyYW0gdGV4dFBhbmVsIHRoZSBNVGV4dFBhbmVsIHRvIGxpc3RlbiB0by4gIFRoaXMgVGFiUnVsZXIKKyAgICAgKiAgICAgd2lsbCByZWZsZWN0IHRoZSBNVGV4dFBhbmVsJ3MgcGFyYWdyYXBoIHN0eWxlcywgYW5kIHVwZGF0ZQorICAgICAqICAgICB0aGUgcGFyYWdyYXBoIHN0eWxlcyB3aGVuIG1hbmlwdWxhdGVkLgorICAgICAqLworICAgIHB1YmxpYyBUYWJSdWxlcihpbnQgYmFzZWxpbmUsIGludCBvcmlnaW4sIE1UZXh0UGFuZWwgdGV4dFBhbmVsKSB7CisgICAgICAgIAorICAgICAgICBmSW1wbCA9IG5ldyBUYWJSdWxlckltcGwoYmFzZWxpbmUsIG9yaWdpbiwgdGV4dFBhbmVsLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogTGlzdGVuIHRvIHRoZSBnaXZlbiBNVGV4dFBhbmVsIGFuZCByZWZsZWN0IGl0cyBjaGFuZ2VzLAorICAgICAqIGFuZCB1cGRhdGUgaXRzIHBhcmFncmFwaCBzdHlsZXMgd2hlbiBUYWJSdWxlciBpcworICAgICAqIG1hbmlwdWxhdGVkLgorICAgICAqIEBwYXJhbSB0ZXh0UGFuZWwgdGhlIE1UZXh0UGFuZWwgdG8gbGlzdGVuIHRvCisgICAgICovCisgICAgcHVibGljIHZvaWQgbGlzdGVuVG9UZXh0UGFuZWwoTVRleHRQYW5lbCB0ZXh0UGFuZWwpIHsKKworICAgICAgICBmSW1wbC5saXN0ZW5Ub1RleHRQYW5lbCh0ZXh0UGFuZWwpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhpcyBUYWJSdWxlci4KKyAgICAgKiBAcmV0dXJuIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoaXMgVGFiUnVsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgQ29sb3IgZ2V0QmFja0NvbG9yKCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRCYWNrQ29sb3IoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHBhcmFtIGJhY2tDb2xvciB0aGUgbmV3IGJhY2tncm91bmQgY29sb3Igb2YgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEJhY2tDb2xvcihDb2xvciBiYWNrQ29sb3IpIHsKKworICAgICAgICBmSW1wbC5zZXRCYWNrQ29sb3IoYmFja0NvbG9yKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBNVGFiUnVsZXIgcmVwcmVzZW50ZWQgYnkgdGhpcyBUYWJSdWxlci4KKyAgICAgKiBAcmV0dXJuIHRoZSBNVGFiUnVsZXIgcmVwcmVzZW50ZWQgYnkgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyBNVGFiUnVsZXIgZ2V0UnVsZXIoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZkltcGwuZ2V0UnVsZXIoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxlYWRpbmcgbWFyZ2luIG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHJldHVybiB0aGUgbGVhZGluZyBtYXJnaW4gb2YgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0TGVhZGluZ01hcmdpbigpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRMZWFkaW5nTWFyZ2luKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBmaXJzdCBsaW5lIGluZGVudCBvZiB0aGlzIFRhYlJ1bGVyLgorICAgICAqIEByZXR1cm4gdGhlIGZpcnN0IGxpbmUgaW5kZW50IG9mIHRoaXMgVGFiUnVsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZpcnN0TGluZUluZGVudCgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRGaXJzdExpbmVJbmRlbnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHRyYWlsaW5nIG1hcmdpbiBvZiB0aGlzIFRhYlJ1bGVyLgorICAgICAqIEByZXR1cm4gdGhlIHRyYWlsaW5nIG1hcmdpbiBvZiB0aGlzIFRhYlJ1bGVyCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBnZXRUcmFpbGluZ01hcmdpbigpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRUcmFpbGluZ01hcmdpbigpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSBDb21wb25lbnQgbWV0aG9kcyB3aGljaCBuZWVkIHRvIGJlIGRlbGVnYXRlZCB0bworICAgIC8vIHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAKKyAgICBwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBnKSB7CisgICAgICAgIAorICAgICAgICBmSW1wbC5wYWludChnKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIERpbWVuc2lvbiBnZXRQcmVmZXJyZWRTaXplKCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldFByZWZlcnJlZFNpemUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgRGltZW5zaW9uIGdldE1pbmltdW1TaXplKCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldE1pbmltdW1TaXplKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvYXd0dWkvVGV4dEZyYW1lLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9UZXh0RnJhbWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMzk2ZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvYXd0dWkvVGV4dEZyYW1lLmphdmEKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRleHRGcmFtZS5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQxOjQ5ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuYXd0dWk7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLlJlc291cmNlVXRpbHM7CisKK2ltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5hd3QuTWVudTsKK2ltcG9ydCBqYXZhLmF3dC5NZW51QmFyOworaW1wb3J0IGphdmEuYXd0LlRvb2xraXQ7CisKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuQ2xpcGJvYXJkOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKKworLyoqCisgKiBUZXh0RnJhbWUgaXMgYSBGcmFtZSBjb250YWluaW5nIGFuIGVkaXRhYmxlIFRleHRQYW5lbCwgYSBzZXQgb2Ygc3RhbmRhcmQKKyAqIG1lbnVzLCBhbmQgYSBUYWJSdWxlci4gIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgYXMtaXMsIGJ1dCBpcworICogcHJpbWFyaWx5IGludGVuZGVkIHRvIGJlIGEgc2ltcGxlIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgb3RoZXIgY2xhc3NlcworICogaW4gdGhpcyBwYWNrYWdlLgorICogQHNlZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5UZXh0UGFuZWwKKyAqIEBzZWUgQXd0TWVudUJ1aWxkZXIKKyAqIEBzZWUgVGFiUnVsZXIKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFRleHRGcmFtZSBleHRlbmRzIEZyYW1lIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBUZXh0UGFuZWwgZlRleHRQYW5lbDsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBUZXh0RnJhbWUgd2l0aCBubyB0ZXh0IGFuZCBubyB0aXRsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgVGV4dEZyYW1lKCkgeworICAgICAgICAKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgaW5pdChudWxsLCBUb29sa2l0LmdldERlZmF1bHRUb29sa2l0KCkuZ2V0U3lzdGVtQ2xpcGJvYXJkKCkpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgVGV4dEZyYW1lIHdpdGggbm8gdGV4dCBhbmQgdGhlIGdpdmVuIHRpdGxlLgorICAgICAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhpcyBGcmFtZQorICAgICAqLworICAgIHB1YmxpYyBUZXh0RnJhbWUoU3RyaW5nIHRpdGxlKSB7CisgICAgICAgIAorICAgICAgICBzdXBlcih0aXRsZSk7CisgICAgICAgIGluaXQobnVsbCwgVG9vbGtpdC5nZXREZWZhdWx0VG9vbGtpdCgpLmdldFN5c3RlbUNsaXBib2FyZCgpKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IFRleHRGcmFtZSB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFuZCB0aXRsZSwgd2hvc2UKKyAgICAgKiBUZXh0UGFuZWwgd2lsbCB1c2UgdGhlIGdpdmVuIGNsaXBib2FyZC4KKyAgICAgKiBAcGFyYW0gdGV4dCB0aGUgaW5pdGlhbCB0ZXh0IGluIHRoZSBUZXh0UGFuZWwuICBJZiBudWxsIHRoZQorICAgICAqICAgICAgVGV4dFBhbmVsIHdpbGwgaW5pdGlhbGx5IGJlIGVtcHR5CisgICAgICogQHBhcmFtIHRpdGxlIHRoZSB0aXRsZSBvZiB0aGlzIEZyYW1lCisgICAgICogQHBhcmFtIGNsaXBib2FyZCB0aGUgQ2xpcGJvYXJkIHdoaWNoIHRoZSBUZXh0UGFuZWwgd2lsbCB1c2UuCisgICAgICogICAgICBJZiBudWxsIHRoZSBUZXh0UGFuZWwgd2lsbCB1c2UgYSBwcml2YXRlIENsaXBib2FyZAorICAgICAqLworICAgIHB1YmxpYyBUZXh0RnJhbWUoTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkIGNsaXBib2FyZCkgeworCisgICAgICAgIHN1cGVyKHRpdGxlKTsKKyAgICAgICAgaW5pdCh0ZXh0LCBjbGlwYm9hcmQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBpbml0KE1Db25zdFRleHQgdGV4dCwgQ2xpcGJvYXJkIGNsaXBib2FyZCkgeworICAgICAgICAKKyAgICAgICAgZlRleHRQYW5lbCA9IG5ldyBUZXh0UGFuZWwodGV4dCwgY2xpcGJvYXJkKTsKKworICAgICAgICBUYWJSdWxlciB0YWJSdWxlciA9IG5ldyBUYWJSdWxlcigxNCwgMTAsIGZUZXh0UGFuZWwpOworCisgICAgICAgIGNyZWF0ZU1lbnVzKCk7CisKKyAgICAgICAgc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIGFkZChmVGV4dFBhbmVsLCAiQ2VudGVyIik7CisgICAgICAgIGFkZCh0YWJSdWxlciwgIk5vcnRoIik7CisgICAgICAgIHBhY2soKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlTWVudXMoKSB7CisKKyAgICAgICAgTWVudUJhciBtZW51QmFyID0gbmV3IE1lbnVCYXIoKTsKKworICAgICAgICBBd3RNZW51QnVpbGRlci5nZXRJbnN0YW5jZSgpLmNyZWF0ZU1lbnVzKG1lbnVCYXIsIGZUZXh0UGFuZWwsIHRoaXMpOworCisgICAgICAgIHNldE1lbnVCYXIobWVudUJhcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBNVGV4dFBhbmVsIGluIHRoaXMgZnJhbWUuCisgICAgICovCisgICAgcHVibGljIE1UZXh0UGFuZWwgZ2V0VGV4dFBhbmVsKCkgeworCisgICAgICAgIHJldHVybiBmVGV4dFBhbmVsOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIAorICAgICAgICBUZXh0RnJhbWUgZnJhbWUgPSBuZXcgVGV4dEZyYW1lKCk7CisgICAgICAgIGZyYW1lLmFkZFdpbmRvd0xpc3RlbmVyKG5ldyBXaW5kb3dBZGFwdGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhXaW5kb3dFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBmcmFtZS5zZXRTaXplKDU1MCwgNzAwKTsKKyAgICAgICAgZnJhbWUuc2hvdygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9wYWNrYWdlLmh0bWwgYi9zcmMvY29tL2libS9yaWNodGV4dC9hd3R1aS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTdmY2M0MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2F3dHVpL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDUgQEAKKzxodG1sPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiPgorUHJvdmlkZXMgY2xhc3NlcyBmb3IgYnVpbGRpbmcgYW4gQVdULWJhc2VkIHVzZXIgaW50ZXJmYWNlIGZvciBhIFRleHRQYW5lbC4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vQXd0RG9jdW1lbnRXaW5kb3cuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vQXd0RG9jdW1lbnRXaW5kb3cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYjA0MDBmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9Bd3REb2N1bWVudFdpbmRvdy5qYXZhCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBBd3REb2N1bWVudFdpbmRvdy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjMzICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuZGVtbzsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuYXd0dWkuVGFiUnVsZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsTGlzdGVuZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsU2V0dGluZ3M7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVkVGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuYXd0dWkuQXd0TWVudUJ1aWxkZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnByaW50LlByaW50aW5nVXRpbHM7CisKK2ltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuQnV0dG9uOworaW1wb3J0IGphdmEuYXd0LkRpYWxvZzsKK2ltcG9ydCBqYXZhLmF3dC5GaWxlRGlhbG9nOworaW1wb3J0IGphdmEuYXd0LkdyaWRMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5hd3QuTWVudTsKK2ltcG9ydCBqYXZhLmF3dC5NZW51QmFyOworaW1wb3J0IGphdmEuYXd0LkxhYmVsOworaW1wb3J0IGphdmEuYXd0LlBhbmVsOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworCisvKioKKyAqIEF3dERvY3VtZW50V2luZG93IGlzIGEgRnJhbWUgY29udGFpbmluZyBhIFRleHRQYW5lbCwgd2l0aCBhIGRvY3VtZW50CisgKiBmb3Igc3RvcmluZyB0aGUgdGV4dCBpbiB0aGUgVGV4dFBhbmVsLgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQXd0RG9jdW1lbnRXaW5kb3cgZXh0ZW5kcyBGcmFtZSBpbXBsZW1lbnRzIERvY3VtZW50V2luZG93IHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisKKyAgICBwcml2YXRlIFRleHRQYW5lbCBmVGV4dFBhbmVsOworICAgIHByaXZhdGUgRWRpdEFwcGxpY2F0aW9uIGZBcHBsaWNhdGlvbjsKKyAgICBwcml2YXRlIFRleHREb2N1bWVudCBmRG9jdW1lbnQ7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgQXd0RG9jdW1lbnRXaW5kb3cuCisgICAgICogQHBhcmFtIGFwcGxpY2F0aW9uIHRoZSBhcHBsaWNhdGlvbiB0aGF0IG93bnMgdGhpcyBkb2N1bWVudAorICAgICAqIEBwYXJhbSBjbGlwYm9hcmQgdGhlIGNsaXBib2FyZCB0byB1c2UKKyAgICAgKiBAcGFyYW0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IHRvIHNob3cgaW4gdGhpcyBBd3REb2N1bWVudFdpbmRvdworICAgICAqLworICAgIEF3dERvY3VtZW50V2luZG93KEVkaXRBcHBsaWNhdGlvbiBhcHBsaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICBUZXh0RG9jdW1lbnQgZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgVGV4dFBhbmVsU2V0dGluZ3MgdGV4dFBhbmVsU2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1c2VUYWJSdWxlciwKKyAgICAgICAgICAgICAgICAgICBUZXh0UGFuZWxMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICBib29sZWFuIHN1cHBvcnRTdHlsZWRUZXh0LAorICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc3VwcG9ydFBsYWluVGV4dCwKKyAgICAgICAgICAgICAgICAgICBpbnRbXSBtZW51cykgeworCisgICAgICAgIGZBcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uOworICAgICAgICAKKyAgICAgICAgZlRleHRQYW5lbCA9IG5ldyBUZXh0UGFuZWwodGV4dFBhbmVsU2V0dGluZ3MsIG51bGwsIGFwcGxpY2F0aW9uLmdldENsaXBib2FyZCgpKTsKKyAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwuYWRkTGlzdGVuZXIobGlzdGVuZXIpOworICAgICAgICB9CisgICAgICAgIHNldERvY3VtZW50KGRvY3VtZW50KTsKKworICAgICAgICBhZGRNZW51QmFyKHN1cHBvcnRTdHlsZWRUZXh0LCBzdXBwb3J0UGxhaW5UZXh0LCBtZW51cyk7CisKKyAgICAgICAgc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisKKyAgICAgICAgaWYgKHVzZVRhYlJ1bGVyKSB7CisgICAgICAgICAgICBUYWJSdWxlciB0YWJSdWxlciA9IG5ldyBUYWJSdWxlcigxNCwgMTAsIGZUZXh0UGFuZWwpOworICAgICAgICAgICAgYWRkKHRhYlJ1bGVyLCAiTm9ydGgiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYWRkKGZUZXh0UGFuZWwsICJDZW50ZXIiKTsKKyAgICAgICAgcGFjaygpOworICAgICAgICBhZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGRvQ2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZE1lbnVCYXIoYm9vbGVhbiBzdXBwb3J0U3R5bGVkVGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdXBwb3J0UGxhaW5UZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIG1lbnVzKSB7CisgICAgICAgIAorICAgICAgICBNZW51QmFyIG1lbnVCYXIgPSBuZXcgTWVudUJhcigpOworICAgICAgICBTdHJpbmcgbWVudVRpdGxlID0gUmVzb3VyY2VVdGlscy5nZXRTdHJpbmcoRWRpdG9yUmVzb3VyY2VzLkZJTEUpOworICAgICAgICBNZW51IG1lbnUgPSBuZXcgTWVudShtZW51VGl0bGUpOworICAgICAgICBuZXcgQXd0RmlsZU1lbnVNYW5hZ2VyKG1lbnUsIGZBcHBsaWNhdGlvbiwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydFN0eWxlZFRleHQsIHN1cHBvcnRQbGFpblRleHQpOworICAgICAgICBtZW51QmFyLmFkZChtZW51KTsKKworICAgICAgICBBd3RNZW51QnVpbGRlci5nZXRJbnN0YW5jZSgpLmNyZWF0ZU1lbnVzKG1lbnVCYXIsIGZUZXh0UGFuZWwsIHRoaXMsIG1lbnVzKTsKKyAgICAgICAgc2V0TWVudUJhcihtZW51QmFyKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgT0sgdG8gc2V0IHRoZSBkb2N1bWVudCB0ZXh0IGFuZCBmaWxlIHRvCisgICAgICogc29tZXRoaW5nIGRpZmZlcmVudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gY2FuQ2hhbmdlRG9jdW1lbnRzKCkgeworCisgICAgICAgIC8vIElmIHRoZSB0ZXh0IGlzIG1vZGlmaWVkLCBnaXZlIHRoZSB1c2VyIGEgY2hhbmNlIHRvCisgICAgICAgIC8vIHNhdmUgaXQuICBPdGhlcndpc2UgcmV0dXJuIHRydWUuCisKKyAgICAgICAgaWYgKGZEb2N1bWVudC5pc01vZGlmaWVkKCkpIHsKKyAgICAgICAgICAgIGJ5dGUgc2F2ZSA9IGFza1NhdmUodGhpcywgZ2V0VGl0bGUoKSk7CisgICAgICAgICAgICBpZiAoc2F2ZSA9PSBZRVMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9TYXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2F2ZSA9PSBOTzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldERvY3VtZW50KFRleHREb2N1bWVudCBkb2N1bWVudCkgeworCisgICAgICAgIGZEb2N1bWVudCA9IGRvY3VtZW50OworICAgICAgICBmRG9jdW1lbnQuc2V0VGV4dFBhbmVsKGZUZXh0UGFuZWwpOworICAgICAgICBzZXRUaXRsZShmRG9jdW1lbnQuZ2V0VGl0bGUoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBkb2N1bWVudCB0byBlbXB0eSB0ZXh0IHdpdGggbm8gYXNzb2NpYXRlZCBmaWxlLiAgSWYKKyAgICAgKiB0aGUgZG9jdW1lbnQgdGV4dCBpcyBub3Qgc2F2ZWQsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZQorICAgICAqIHRoZSB0ZXh0IGZpcnN0LiAgSWYgdGhpcyBvcGVyYXRpb24gaXMgY2FuY2VsZWQsIHRoZSBkb2N1bWVudAorICAgICAqIGlzIHVuY2hhbmdlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkb05ldygpIHsKKworICAgICAgICBpZiAoIWNhbkNoYW5nZURvY3VtZW50cygpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERvY3VtZW50KGZBcHBsaWNhdGlvbi5jcmVhdGVOZXdEb2N1bWVudCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm9tcHQgdGhlIHVzZXIgZm9yIGEgZmlsZSBmcm9tIHdoaWNoIHRvIGxvYWQgYSB0ZXh0IGRvY3VtZW50LgorICAgICAqIElmIHRoZSBjdXJyZW50IHRleHQgaXMgbm90IHNhdmVkLCBmaXJzdCBwcm9tcHQgdGhlIHVzZXIgdG8KKyAgICAgKiBzYXZlLiAgSWYgZWl0aGVyIG9wZXJhdGlvbiBpcyBjYW5jZWxlZCBvciBmYWlscywgdGhlIGRvY3VtZW50CisgICAgICogaXMgdW5jaGFuZ2VkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRvT3BlbigpIHsKKworICAgICAgICBpZiAoIWNhbkNoYW5nZURvY3VtZW50cygpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBUZXh0RG9jdW1lbnQgZG9jdW1lbnQgPSBmQXBwbGljYXRpb24ub3BlbkRvY3VtZW50KHRoaXMpOworCisgICAgICAgIGlmIChkb2N1bWVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXREb2N1bWVudChkb2N1bWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm9tcHQgdGhlIHVzZXIgZm9yIGEgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBkb2N1bWVudCB0ZXh0LgorICAgICAqIElmIHRoaXMgb3BlcmF0aW9uIGlzIG5vdCBjYW5jZWxlZCwgc2F2ZSB0aGUgdGV4dCBpbiB0aGUgZmlsZS4KKyAgICAgKiBUaGUgZmlsZSBiZWNvbWVzIHRoaXMgZG9jdW1lbnQncyBmaWxlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGRvU2F2ZUFzKGludCBmb3JtYXQpIHsKKworICAgICAgICBTdHJpbmcgdGl0bGUgPSBSZXNvdXJjZVV0aWxzLmdldFN0cmluZyhFZGl0b3JSZXNvdXJjZXMuU0FWRV9USVRMRSk7CisgICAgICAgIEZpbGUgZmlsZSA9IGdldEZpbGVGcm9tRGlhbG9nKGZEb2N1bWVudC5nZXRGaWxlKCksIHRpdGxlLCB0aGlzLCBGaWxlRGlhbG9nLlNBVkUpOworICAgICAgICAKKyAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmRG9jdW1lbnQuc2V0RmlsZShmaWxlKTsKKyAgICAgICAgc2V0VGl0bGUoZkRvY3VtZW50LmdldFRpdGxlKCkpOworCisgICAgICAgIGZEb2N1bWVudC5zZXRGb3JtYXQoZm9ybWF0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmRG9jdW1lbnQuc2F2ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNhdmUgdGhlIHRleHQgaW4gdGhpcyBkb2N1bWVudC4gIElmIHRoZXJlIGlzIG5vIGZpbGUgYXNzb2NpYXRlZAorICAgICAqIHdpdGggdGhlIHRleHQsIHRoaXMgaXMgZXF1aXZhbGVudCB0byA8Y29kZT5kb1NhdmVBczwvY29kZT4uCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSBkb2N1bWVudCB3YXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGRvU2F2ZSgpIHsKKworICAgICAgICBpZiAoZkRvY3VtZW50LmdldEZpbGUoKSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZG9TYXZlQXMoZkRvY3VtZW50LmdldEZvcm1hdCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZEb2N1bWVudC5zYXZlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgd2luZG93LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRvUHJpbnQoKSB7CisKKyAgICAgICAgUHJpbnRpbmdVdGlscy51c2VyUHJpbnRUZXh0KGZEb2N1bWVudC5nZXRUZXh0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmVGV4dFBhbmVsLmdldERlZmF1bHRWYWx1ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRpdGxlKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEF0dGVtcHQgdG8gY2xvc2UgdGhpcyB3aW5kb3cuICBJZiB0aGUgdGV4dCBoYXMgbm90IGJlZW4gc2F2ZWQsCisgICAgICogZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0byBzYXZlIHRoZSB0ZXh0IGJlZm9yZSBjbG9zaW5nIHRoZQorICAgICAqIHdpbmRvdy4gIElmIHRoZSB1c2VyIGNhbmNlbHMgdGhpcyBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHJldHVybnMKKyAgICAgKiBmYWxzZSBhbmQgdGhlIHdpbmRvdyBpcyBub3QgY2xvc2VkOyAgb3RoZXJ3aXNlIHRoaXMgbWV0aG9kCisgICAgICogcmV0dXJucyB0cnVlIGFuZCB0aGUgd2luZG93IGlzIGNsb3NlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBkb0Nsb3NlKCkgeworCisgICAgICAgIGlmIChjYW5DaGFuZ2VEb2N1bWVudHMoKSkgeworICAgICAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgICAgICBkaXNwb3NlKCk7CisgICAgICAgICAgICBmQXBwbGljYXRpb24ucmVtb3ZlRG9jdW1lbnRXaW5kb3codGhpcyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIGEgZmlsZSBmcm9tIGEgZGlhbG9nLiAgSWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgKiBzZWxlY3QgYSBmaWxlIGluIHRoZSBkaWFsb2cgdGhpcyBtZXRob2QgcmV0dXJucyBudWxsLgorICAgICAqIEBwYXJhbSBraW5kIGVpdGhlciBGaWxlRGlhbG9nLkxPQUQgb3IgRmlsZURpYWxvZy5TQVZFLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRmlsZSBnZXRGaWxlRnJvbURpYWxvZyhGaWxlIG9yaWdGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGlhbG9nVGl0bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSBvd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtpbmQpIHsKKyAgICAgICAgCisgICAgICAgIEZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2cob3duZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1RpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQpOworICAgICAgICBpZiAob3JpZ0ZpbGUgIT0gbnVsbCkgeworICAgICAgICAgICAgZGlhbG9nLnNldERpcmVjdG9yeShvcmlnRmlsZS5nZXRQYXJlbnQoKSk7CisgICAgICAgICAgICBkaWFsb2cuc2V0RmlsZShvcmlnRmlsZS5nZXROYW1lKCkpOworICAgICAgICB9CisgICAgICAgIGRpYWxvZy5zaG93KCk7CisgICAgICAgIFN0cmluZyBmaWxlU3RyID0gZGlhbG9nLmdldEZpbGUoKTsKKyAgICAgICAgU3RyaW5nIGRpclN0ciA9IGRpYWxvZy5nZXREaXJlY3RvcnkoKTsKKyAgICAgICAgCisgICAgICAgIEZpbGUgZmlsZSA9IG51bGw7CisgICAgICAgIAorICAgICAgICBpZiAoZmlsZVN0ciAhPSBudWxsKSB7CisgICAgICAgICAgICBmaWxlID0gbmV3IEZpbGUoZGlyU3RyLCBmaWxlU3RyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZpbGU7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgWUVTID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIE5PID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIENBTkNFTCA9IDI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBEaWFsb2dMaXN0ZW5lciBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKworICAgICAgICBEaWFsb2cgZkRpYWxvZzsKKyAgICAgICAgQnV0dG9uIGZZZXMsIGZObywgZkNhbmNlbDsKKyAgICAgICAgYnl0ZSBmU3RhdGU7CisKKyAgICAgICAgRGlhbG9nTGlzdGVuZXIoRGlhbG9nIGRpYWxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uIHllcywKKyAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uIG5vLAorICAgICAgICAgICAgICAgICAgICAgICBCdXR0b24gY2FuY2VsKSB7CisKKyAgICAgICAgICAgIGZEaWFsb2cgPSBkaWFsb2c7CisgICAgICAgICAgICBmWWVzID0geWVzOworICAgICAgICAgICAgZk5vID0gbm87CisgICAgICAgICAgICBmQ2FuY2VsID0gY2FuY2VsOworICAgICAgICAgICAgZlllcy5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIGZOby5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIGZDYW5jZWwuYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBmU3RhdGUgPSAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldmVudCkgeworCisgICAgICAgICAgICBPYmplY3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7CisgICAgICAgICAgICBpZiAoc291cmNlID09IGZZZXMpIHsKKyAgICAgICAgICAgICAgICBmU3RhdGUgPSBZRVM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gZk5vKSB7CisgICAgICAgICAgICAgICAgZlN0YXRlID0gTk87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gZkNhbmNlbCkgeworICAgICAgICAgICAgICAgIGZTdGF0ZSA9IENBTkNFTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZkRpYWxvZy5kaXNwb3NlKCk7CisgICAgICAgIH0KKworICAgICAgICBieXRlIGdldFN0YXRlKCkgeworCisgICAgICAgICAgICByZXR1cm4gZlN0YXRlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGlzcGxheSBhIGRpYWxvZyB0aGF0IGFza3Mgd2hldGhlciB0aGUgdXNlciB3YW50cyB0bworICAgICAqIHNhdmUgYSBkb2N1bWVudC4gIFBvc3NpYmxlIHJlcG9uc2VzIGFyZSBZZXMsIE5vLCBhbmQKKyAgICAgKiBDYW5jZWwuICBUaGUgcmV0dXJuZWQgdmFsdWUgaW5kaWNhdGVzIHdoaWNoIHJlc3BvbnNlCisgICAgICogd2FzIGNob3Nlbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBieXRlIGFza1NhdmUoRnJhbWUgcGFyZW50LCBTdHJpbmcgZmlsZU5hbWUpIHsKKworICAgICAgICBEaWFsb2cgZGlhbG9nID0gbmV3IERpYWxvZyhwYXJlbnQsIHRydWUpOworICAgICAgICBkaWFsb2cuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDAsIDEpKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gUmVzb3VyY2VVdGlscy5nZXRTdHJpbmcoRWRpdG9yUmVzb3VyY2VzLlNBVkVfTVNHKTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChwYXR0ZXJuLCBuZXcgT2JqZWN0W10ge2ZpbGVOYW1lfSk7CisgICAgICAgIGRpYWxvZy5hZGQobmV3IExhYmVsKHRleHQsIExhYmVsLkNFTlRFUikpOworICAgICAgICAKKyAgICAgICAgQnV0dG9uIHllcyA9IG5ldyBCdXR0b24oUmVzb3VyY2VVdGlscy5nZXRTdHJpbmcoRWRpdG9yUmVzb3VyY2VzLllFUykpOworICAgICAgICBCdXR0b24gbm8gPSBuZXcgQnV0dG9uKFJlc291cmNlVXRpbHMuZ2V0U3RyaW5nKEVkaXRvclJlc291cmNlcy5OTykpOworICAgICAgICBCdXR0b24gY2FuY2VsID0gbmV3IEJ1dHRvbihSZXNvdXJjZVV0aWxzLmdldFN0cmluZyhFZGl0b3JSZXNvdXJjZXMuQ0FOQ0VMKSk7CisKKyAgICAgICAgUGFuZWwgcGFuZWwgPSBuZXcgUGFuZWwoKTsKKyAgICAgICAgcGFuZWwuYWRkKHllcyk7CisgICAgICAgIHBhbmVsLmFkZChubyk7CisgICAgICAgIHBhbmVsLmFkZChjYW5jZWwpOworICAgICAgICBkaWFsb2cuYWRkKHBhbmVsKTsKKworICAgICAgICBEaWFsb2dMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBEaWFsb2dMaXN0ZW5lcihkaWFsb2csIHllcywgbm8sIGNhbmNlbCk7CisKKyAgICAgICAgZGlhbG9nLnNldFNpemUoMjIwLCAxMzApOworICAgICAgICBkaWFsb2cuc2hvdygpOworCisgICAgICAgIHJldHVybiBsaXN0ZW5lci5nZXRTdGF0ZSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL0F3dEZpbGVNZW51TWFuYWdlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9Bd3RGaWxlTWVudU1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOWRmMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9Bd3RGaWxlTWVudU1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBBd3RGaWxlTWVudU1hbmFnZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo0MzowOSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmRlbW87CisKK2ltcG9ydCBqYXZhLmF3dC5NZW51OworaW1wb3J0IGphdmEuYXd0Lk1lbnVJdGVtOworCitmaW5hbCBjbGFzcyBBd3RGaWxlTWVudU1hbmFnZXIgZXh0ZW5kcyBGaWxlTWVudU1hbmFnZXIgeworCisgICAgcHJpdmF0ZSBNZW51IGZNZW51OworICAgIAorICAgIHB1YmxpYyBBd3RGaWxlTWVudU1hbmFnZXIoTWVudSBtZW51LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50V2luZG93IGRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdXBwb3J0U3R5bGVkRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdXBwb3J0UGxhaW5Gb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHN1cGVyKGFwcGxpY2F0aW9uLCBkb2N1bWVudCk7CisgICAgICAgIAorICAgICAgICBmTWVudSA9IG1lbnU7CisgICAgICAgIGNyZWF0ZUl0ZW1zKHN1cHBvcnRTdHlsZWRGb3JtYXQsIHN1cHBvcnRQbGFpbkZvcm1hdCk7CisgICAgICAgIGZNZW51ID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIE9iamVjdCBhZGRNZW51SXRlbShTdHJpbmcga2V5KSB7CisKKyAgICAgICAgTWVudUl0ZW0gaXRlbSA9IFJlc291cmNlVXRpbHMuY3JlYXRlTWVudUl0ZW0oa2V5KTsKKyAgICAgICAgaXRlbS5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZk1lbnUuYWRkKGl0ZW0pOworICAgICAgICByZXR1cm4gaXRlbTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgYWRkU2VwYXJhdG9yKCkgeworICAgIAorICAgICAgICBmTWVudS5hZGQobmV3IE1lbnVJdGVtKCItIikpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vQ29kZUVkaXQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vQ29kZUVkaXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYThlODhjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9Db2RlRWRpdC5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBDb2RlRWRpdC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjMzICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuZGVtbzsKKworaW1wb3J0IGphdmEuYXd0LkZpbGVEaWFsb2c7CitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5hd3QuTWVudTsKK2ltcG9ydCBqYXZhLmF3dC5NZW51QmFyOworaW1wb3J0IGphdmEuYXd0LlRvb2xraXQ7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuVGV4dEF0dHJpYnV0ZTsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbFNldHRpbmdzOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuYXd0dWkuQXd0TWVudUJ1aWxkZXI7CisKK3B1YmxpYyBjbGFzcyBDb2RlRWRpdCBleHRlbmRzIEVkaXRBcHBsaWNhdGlvbiB7CisgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAKKyAgICBwcm90ZWN0ZWQgZmluYWwgVGV4dFBhbmVsU2V0dGluZ3MgZlNldHRpbmdzOworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdLmVxdWFscygiLXN3aW5nIikpIHsKKyAgICAgICAgICAgIG5ldyBjb20uaWJtLnJpY2h0ZXh0LnN3aW5nZGVtby5Td2luZ0NvZGVFZGl0KGFyZ3MsMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBuZXcgQ29kZUVkaXQoYXJncywgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgQ29kZUVkaXQoU3RyaW5nW10gYXJncywgaW50IHN0YXJ0KSB7CisKKyAgICAgICAgc3VwZXIoVG9vbGtpdC5nZXREZWZhdWx0VG9vbGtpdCgpLmdldFN5c3RlbUNsaXBib2FyZCgpLAorICAgICAgICAgICAgICBUZXh0RG9jdW1lbnQuUExBSU5fVEVYVCk7CisKKyAgICAgICAgQXR0cmlidXRlTWFwIGRlZmF1bHRTdHlsZSA9IG5ldyBBdHRyaWJ1dGVNYXAoVGV4dEF0dHJpYnV0ZS5TSVpFLCBuZXcgRmxvYXQoMTIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZEF0dHJpYnV0ZShUZXh0QXR0cmlidXRlLkZBTUlMWSwgIk1vbm9zcGFjZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBmU2V0dGluZ3MgPSBUZXh0UGFuZWwuZ2V0RGVmYXVsdFNldHRpbmdzKCk7CisgICAgICAgIGZTZXR0aW5ncy5zZXRXcmFwcyhmYWxzZSk7CisgICAgICAgIGZTZXR0aW5ncy5hZGREZWZhdWx0VmFsdWVzKGRlZmF1bHRTdHlsZSk7CisgICAgICAgIAorICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gc3RhcnQpIHsKKyAgICAgICAgICAgIGRvTmV3V2luZG93KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBib29sZWFuIG9wZW5lZEFEb2N1bWVudCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChpbnQgaT1zdGFydDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKworICAgICAgICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGFyZ3NbaV0pOworICAgICAgICAgICAgICAgIFRleHREb2N1bWVudCBkb2N1bWVudCA9IG51bGw7CisgICAgICAgICAgICAgICAgVGhyb3dhYmxlIGVycm9yID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IFRleHREb2N1bWVudC5jcmVhdGVGcm9tRmlsZShmaWxlLCBUZXh0RG9jdW1lbnQuUExBSU5fVEVYVCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhZGREb2N1bWVudChkb2N1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIG9wZW5lZEFEb2N1bWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFvcGVuZWRBRG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBxdWl0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIERvY3VtZW50V2luZG93IGNyZWF0ZURvY3VtZW50V2luZG93KFRleHREb2N1bWVudCBkb2N1bWVudCkgeworCisgICAgICAgIHJldHVybiBuZXcgQXd0RG9jdW1lbnRXaW5kb3codGhpcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW50YXhDb2xvcmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51cyk7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50W10gbWVudXMgPSB7IEF3dE1lbnVCdWlsZGVyLkVESVQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF3dE1lbnVCdWlsZGVyLkJJREksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXd0TWVudUJ1aWxkZXIuQUJPVVQgfTsKKworICAgIHB1YmxpYyBUZXh0RG9jdW1lbnQgb3BlbkRvY3VtZW50KEZyYW1lIGRpYWxvZ1BhcmVudCkgeworICAgIAorICAgICAgICBTdHJpbmcgdGl0bGUgPSBSZXNvdXJjZVV0aWxzLmdldFN0cmluZyhFZGl0b3JSZXNvdXJjZXMuT1BFTl9USVRMRSk7CisgICAgICAgIAorICAgICAgICBGaWxlIGZpbGUgPSBBd3REb2N1bWVudFdpbmRvdy5nZXRGaWxlRnJvbURpYWxvZyhudWxsLCB0aXRsZSwgZGlhbG9nUGFyZW50LCBGaWxlRGlhbG9nLkxPQUQpOworICAgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBUZXh0RG9jdW1lbnQuY3JlYXRlRnJvbUZpbGUoZmlsZSwgVGV4dERvY3VtZW50LlBMQUlOX1RFWFQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9Eb2N1bWVudFdpbmRvdy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9Eb2N1bWVudFdpbmRvdy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgwNjQwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL0RvY3VtZW50V2luZG93LmphdmEKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRG9jdW1lbnRXaW5kb3cuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo0MzowOSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmRlbW87CisKK3B1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRXaW5kb3cgeworCisgICAgcHVibGljIHZvaWQgZG9OZXcoKTsKKyAgICAKKyAgICBwdWJsaWMgdm9pZCBkb09wZW4oKTsKKyAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiBkb0Nsb3NlKCk7CisgICAgCisgICAgcHVibGljIGJvb2xlYW4gZG9TYXZlKCk7CisgICAgCisgICAgcHVibGljIGJvb2xlYW4gZG9TYXZlQXMoaW50IGZvcm1hdCk7CisgICAgCisgICAgcHVibGljIHZvaWQgZG9QcmludCgpOworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldFNpemUoaW50IHdkLCBpbnQgaHQpOworICAgIAorICAgIHB1YmxpYyB2b2lkIHNob3coKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL0VkaXRBcHBsaWNhdGlvbi5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9FZGl0QXBwbGljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMjA0Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9FZGl0QXBwbGljYXRpb24uamF2YQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRWRpdEFwcGxpY2F0aW9uLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MzMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5kZW1vOworCitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5hd3QuTWVudUJhcjsKKworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5DbGlwYm9hcmQ7CisKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbFNldHRpbmdzOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRWRpdEFwcGxpY2F0aW9uIHsKKworICAgIHByaXZhdGUgQ2xpcGJvYXJkIGZDbGlwYm9hcmQ7CisgICAgcHJpdmF0ZSBpbnQgZkRlZmF1bHRGb3JtYXQ7CisgICAgcHJpdmF0ZSBWZWN0b3IgZldpbmRvd3MgPSBuZXcgVmVjdG9yKCk7CisgICAgcHJpdmF0ZSBpbnQgZlVudGl0bGVkQ291bnQgPSAwOworICAgIAorICAgIHByb3RlY3RlZCBFZGl0QXBwbGljYXRpb24oQ2xpcGJvYXJkIGNsaXBib2FyZCwgaW50IGRlZmF1bHRGb3JtYXQpIHsKKyAgICAgICAgCisgICAgICAgIGZDbGlwYm9hcmQgPSBjbGlwYm9hcmQ7CisgICAgICAgIGZEZWZhdWx0Rm9ybWF0ID0gZGVmYXVsdEZvcm1hdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogTmV3IGRvY3VtZW50cyBhcmUgbmFtZWQgIlVudGl0bGVkIDEiLCAiVW50aXRsZWQgMiIsIGV0Yy4gIFRoaXMKKyAgICAgKiBtZXRob2QgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgbmFtZSBmb3IgdGhlIG5leHQgbmV3IGRvY3VtZW50LgorICAgICAqIEByZXR1cm4gdGhlIG5leHQgbmV3IGRvY3VtZW50IG5hbWUKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBnZXROZXh0TmV3TmFtZSgpIHsKKworICAgICAgICBmVW50aXRsZWRDb3VudCArPSAxOworICAgICAgICBTdHJpbmcgcGF0dGVybiA9IFJlc291cmNlVXRpbHMuZ2V0U3RyaW5nKEVkaXRvclJlc291cmNlcy5VTlRJVExFRF9NU0cpOworICAgICAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQocGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXtuZXcgSW50ZWdlcihmVW50aXRsZWRDb3VudCl9KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIGZpbmFsIENsaXBib2FyZCBnZXRDbGlwYm9hcmQoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZkNsaXBib2FyZDsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgRG9jdW1lbnRXaW5kb3cgY3JlYXRlRG9jdW1lbnRXaW5kb3coVGV4dERvY3VtZW50IGRvY3VtZW50KTsKKyAgICAKKyAgICBwdWJsaWMgYWJzdHJhY3QgVGV4dERvY3VtZW50IG9wZW5Eb2N1bWVudChGcmFtZSBkaWFsb2dQYXJlbnQpOworICAgIAorICAgIHB1YmxpYyBmaW5hbCBUZXh0RG9jdW1lbnQgY3JlYXRlTmV3RG9jdW1lbnQoKSB7CisgICAgCisgICAgICAgIFN0cmluZyBuYW1lID0gZ2V0TmV4dE5ld05hbWUoKTsKKyAgICAgICAgaW50IGZvcm1hdCA9IGZEZWZhdWx0Rm9ybWF0OworICAgICAgICByZXR1cm4gVGV4dERvY3VtZW50LmNyZWF0ZUVtcHR5KG5hbWUsIGZvcm1hdCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBmaW5hbCB2b2lkIGRvTmV3V2luZG93KCkgeworICAgICAgICAKKyAgICAgICAgYWRkRG9jdW1lbnQoVGV4dERvY3VtZW50LmNyZWF0ZUVtcHR5KGdldE5leHROZXdOYW1lKCksIGZEZWZhdWx0Rm9ybWF0KSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBmaW5hbCB2b2lkIGFkZERvY3VtZW50KFRleHREb2N1bWVudCBkb2N1bWVudCkgeworICAgICAgICAKKyAgICAgICAgZmluYWwgRG9jdW1lbnRXaW5kb3cgd2luZG93ID0gY3JlYXRlRG9jdW1lbnRXaW5kb3coZG9jdW1lbnQpOworCisgICAgICAgIHdpbmRvdy5zZXRTaXplKDUwMCwgNDAwKTsKKyAgICAgICAgd2luZG93LnNob3coKTsKKyAgICAgICAgZldpbmRvd3MuYWRkRWxlbWVudCh3aW5kb3cpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgZG9jdW1lbnQgZnJvbSBsaXN0IG9mIGRvY3VtZW50cy4gIFF1aXQgYXBwbGljYXRpb24gaWYgbGlzdAorICAgICAqIGxlbmd0aCBmYWxscyB0byB6ZXJvLgorICAgICAqIEBwYXJhbSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgdG8gcmVtb3ZlCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlRG9jdW1lbnRXaW5kb3coRG9jdW1lbnRXaW5kb3cgd2luZG93KSB7CisKKyAgICAgICAgZldpbmRvd3MucmVtb3ZlRWxlbWVudCh3aW5kb3cpOworICAgICAgICBpZiAoZldpbmRvd3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBxdWl0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHbyB0aHJvdWdoIGxpc3Qgb2YgZG9jdW1lbnRzIGFuZCBhdHRlbXB0IHRvIGNsb3NlIGVhY2ggZG9jdW1lbnQuCisgICAgICogSWYgYWxsIGRvY3VtZW50cyBjbG9zZSBzdWNjZXNzZnVsbHksIHRoZW4gZXhpdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBkb0V4aXQoKSB7CisKKyAgICAgICAgLy8gQ2xvbmUgZldpbmRvd3Mgc2luY2UgaXQgY2FuIGdldCBtb2RpZmllZCB3aGlsZSBiZWluZyB0cmF2ZXJzZWQuCisgICAgICAgIFZlY3RvciB3aW5kb3dzID0gKFZlY3RvcikgZldpbmRvd3MuY2xvbmUoKTsKKworICAgICAgICBpbnQgc2l6ZSA9IHdpbmRvd3Muc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIERvY3VtZW50V2luZG93IHdpbmRvdyA9IChEb2N1bWVudFdpbmRvdykgd2luZG93cy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBpZiAoIXdpbmRvdy5kb0Nsb3NlKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBxdWl0IHdpbGwgYmUgY2FsbGVkIHdoZW4gbGFzdCBkb2N1bWVudCByZW1vdmVzIGl0c2VsZgorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCB3aGVuIGxhc3QgZG9jdW1lbnQgd2luZG93IGNsb3Nlcy4gIERlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICAgKiBjYWxscyBTeXN0ZW0uZXhpdC4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBxdWl0KCkgeworCisgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL0VkaXREZW1vLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL0VkaXREZW1vLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTRiZGI2NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vRWRpdERlbW8uamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRWRpdERlbW8uamF2YSx2ICQgJFJldmlzaW9uOiAxLjMgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmRlbW87CisKK2ltcG9ydCBqYXZhLmF3dC5GaWxlRGlhbG9nOworaW1wb3J0IGphdmEuYXd0LkZyYW1lOworaW1wb3J0IGphdmEuYXd0Lk1lbnU7CitpbXBvcnQgamF2YS5hd3QuTWVudUJhcjsKK2ltcG9ydCBqYXZhLmF3dC5Ub29sa2l0OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbFNldHRpbmdzOworCisvKioKKyAqIEVkaXREZW1vIGlzIHRoZSBtYWluIGNsYXNzIGZvciBhIHNpbXBsZSwgbXVsdGlwbGUtZG9jdW1lbnQKKyAqIHN0eWxlZCB0ZXh0IGVkaXRvciwgYnVpbHQgd2l0aCB0aGUgY2xhc3NlcyBpbiB0aGUgdGV4dHBhbmVsCisgKiBhbmQgdGV4dGZyYW1lIHBhY2thZ2VzLgorICogPHA+CisgKiBUbyBydW4gRWRpdERlbW8sIHR5cGU6CisgKiA8YmxvY2txdW90ZT48cHJlPgorICogamF2YSBjb20uaWJtLnJpY2h0ZXh0LmRlbW8uRWRpdERlbW8gW2ZpbGUxXSBbZmlsZTJdIFsuLi5dCisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgKiB3aGVyZSB0aGUgZmlsZW5hbWVzIGFyZSBmaWxlcyBzYXZlZCB3aXRoIHRoaXMgZGVtby4KKyAqLworcHVibGljIGNsYXNzIEVkaXREZW1vIGV4dGVuZHMgRWRpdEFwcGxpY2F0aW9uIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgCisgICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0uZXF1YWxzKCItc3dpbmciKSkgeworICAgICAgICAgICAgbmV3IGNvbS5pYm0ucmljaHRleHQuc3dpbmdkZW1vLlN3aW5nRWRpdERlbW8oYXJncywxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5ldyBFZGl0RGVtbyhhcmdzLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3RlY3RlZCBFZGl0RGVtbyhTdHJpbmdbXSBhcmdzLCBpbnQgc3RhcnQpIHsKKworICAgICAgICBzdXBlcihUb29sa2l0LmdldERlZmF1bHRUb29sa2l0KCkuZ2V0U3lzdGVtQ2xpcGJvYXJkKCksIAorICAgICAgICAgICAgICBUZXh0RG9jdW1lbnQuU1RZTEVEX1RFWFQpOworCisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSBzdGFydCkgeworICAgICAgICAgICAgZG9OZXdXaW5kb3coKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJvb2xlYW4gb3BlbmVkQURvY3VtZW50ID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKGludCBpPXN0YXJ0OyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworCisgICAgICAgICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisgICAgICAgICAgICAgICAgVGV4dERvY3VtZW50IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnRGcm9tRmlsZShmaWxlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBhZGREb2N1bWVudChkb2N1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIG9wZW5lZEFEb2N1bWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFvcGVuZWRBRG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBxdWl0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyBUZXh0RG9jdW1lbnQgZ2V0RG9jdW1lbnRGcm9tRmlsZShGaWxlIGZpbGUpIHsKKyAgICAKKyAgICAgICAgRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIFRleHREb2N1bWVudC5jcmVhdGVGcm9tRmlsZShmaWxlLCBUZXh0RG9jdW1lbnQuU1RZTEVEX1RFWFQpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBUZXh0RG9jdW1lbnQuY3JlYXRlRnJvbUZpbGUoZmlsZSwgVGV4dERvY3VtZW50LlBMQUlOX1RFWFQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUyKSB7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gZTI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXhjZXB0aW9uIG9wZW5pbmcgZmlsZS4iKTsKKyAgICAgICAgZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBEb2N1bWVudFdpbmRvdyBjcmVhdGVEb2N1bWVudFdpbmRvdyhUZXh0RG9jdW1lbnQgZG9jdW1lbnQpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBuZXcgQXd0RG9jdW1lbnRXaW5kb3codGhpcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFBhbmVsLmdldERlZmF1bHRTZXR0aW5ncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBUZXh0RG9jdW1lbnQgb3BlbkRvY3VtZW50KEZyYW1lIGRpYWxvZ1BhcmVudCkgeworICAgIAorICAgICAgICBTdHJpbmcgdGl0bGUgPSBSZXNvdXJjZVV0aWxzLmdldFN0cmluZyhFZGl0b3JSZXNvdXJjZXMuT1BFTl9USVRMRSk7CisgICAgICAgIEZpbGUgZmlsZSA9IEF3dERvY3VtZW50V2luZG93LmdldEZpbGVGcm9tRGlhbG9nKG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dQYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVEaWFsb2cuTE9BRCk7CisgICAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXREb2N1bWVudEZyb21GaWxlKGZpbGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9FZGl0b3JSZXNvdXJjZXMuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vRWRpdG9yUmVzb3VyY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2Y0M2ViOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vRWRpdG9yUmVzb3VyY2VzLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEVkaXRvclJlc291cmNlcy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQzOjA5ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuZGVtbzsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuS2V5RXZlbnQ7CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBFZGl0b3JSZXNvdXJjZXMgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAvLyBtZW51IG5hbWVzIC0gdmFsdWVzIGFyZSBTdHJpbmdzCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRSA9ICJGaWxlIjsKKworICAgIC8vIGZpbGUgbWVudSBpdGVtcyAtIHZhbHVlcyBhcmUgTWVudURhdGEgaW5zdGFuY2VzCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXID0gIk5ldyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXX1dJTkRPVyA9ICJOZXcgV2luZG93IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVOID0gIk9wZW4uLi4iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBVkUgPSAiU2F2ZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FWRV9BUyA9ICJTYXZlIEFzLi4uIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVZFX0FTX1NUWUxFRCA9ICJTYXZlIEFzIFN0eWxlZCBUZXh0Li4uIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVZFX0FTX1RFWFQgPSAiU2F2ZSBBcyBQbGFpbiBUZXh0Li4uIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTE9TRSA9ICJDbG9zZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJJTlQgPSAiUHJpbnQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYSVQgPSAiRXhpdCI7CisKKyAgICAvLyBidXR0b24gbGFiZWxzIC0gdmFsdWVzIGFyZSBTdHJpbmdzCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWUVTID0gIlllcyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk8gPSAiTm8iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBTkNFTCA9ICJDYW5jZWwiOworCisgICAgLy8gbWVzc2FnZSBzdHJpbmdzIC0gdmFsdWVzIGFyZSBTdHJpbmdzCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FWRV9NU0cgPSAiU2F2ZSB7MH0gYmVmb3JlIGNsb3Npbmc/IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVTlRJVExFRF9NU0cgPSAiVW50aXRsZWQgezB9IjsKKworICAgIC8vIHdpbmRvdyBhbmQgZGlhbG9nIHRpdGxlcyAtIHZhbHVlcyBhcmUgU3RyaW5ncworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRU5fVElUTEUgPSAiT3BlbiBEb2N1bWVudCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FWRV9USVRMRSA9ICJTYXZlIEFzIjsKKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHJldHVybnMgYSB0d28tZWxlbWVudAorICAgICAqIE9iamVjdCBhcnJheS4gIFRoZSBmaXJzdCBlbGVtZW50IGlzIG5hbWUsIHRoZQorICAgICAqIHNlY29uZCBpcyBhIE1lbnVEYXRhIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuCisgICAgICogc2hvcnRjdXQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0W10gbWFrZUVudHJ5KFN0cmluZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHNob3J0Q3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5Q29kZSkgeworCisgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W10geyBuYW1lLCBuZXcgTWVudURhdGEobmFtZSwgc2hvcnRDdXQsIGtleUNvZGUpIH07CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgcmV0dXJucyBhIHR3by1lbGVtZW50CisgICAgICogT2JqZWN0IGFycmF5LiAgVGhlIGZpcnN0IGVsZW1lbnQgaXMgbmFtZSwgdGhlCisgICAgICogc2Vjb25kIGlzIGEgTWVudURhdGEgaW5zdGFuY2UuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0W10gbWFrZUVudHJ5KFN0cmluZyBuYW1lKSB7CisKKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RbXSB7IG5hbWUsIG5ldyBNZW51RGF0YShuYW1lKSB9OworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHJldHVybnMgYSB0d28tZWxlbWVudAorICAgICAqIE9iamVjdCBhcnJheSBpbiB3aGljaCBib3RoIGVsZW1lbnRzIGFyZSBvYmouCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0W10gZHVwbGljYXRlKE9iamVjdCBvYmopIHsKKworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdIHsgb2JqLCBvYmogfTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgZHVwbGljYXRlKEZJTEUpLAorICAgICAgICAgICAgZHVwbGljYXRlKFlFUyksCisgICAgICAgICAgICBkdXBsaWNhdGUoTk8pLAorICAgICAgICAgICAgZHVwbGljYXRlKENBTkNFTCksCisgICAgICAgICAgICBkdXBsaWNhdGUoU0FWRV9NU0cpLAorICAgICAgICAgICAgZHVwbGljYXRlKFNBVkVfVElUTEUpLAorICAgICAgICAgICAgZHVwbGljYXRlKE9QRU5fVElUTEUpLAorICAgICAgICAgICAgZHVwbGljYXRlKFVOVElUTEVEX01TRyksCisgICAgICAgICAgICBtYWtlRW50cnkoTkVXLCAnbicsIEtleUV2ZW50LlZLX04pLAorICAgICAgICAgICAgbWFrZUVudHJ5KE5FV19XSU5ET1cpLAorICAgICAgICAgICAgbWFrZUVudHJ5KE9QRU4sICdvJywgS2V5RXZlbnQuVktfTyksCisgICAgICAgICAgICBtYWtlRW50cnkoU0FWRSwgJ3MnLCBLZXlFdmVudC5WS19TKSwKKyAgICAgICAgICAgIG1ha2VFbnRyeShTQVZFX0FTKSwKKyAgICAgICAgICAgIG1ha2VFbnRyeShTQVZFX0FTX1NUWUxFRCksCisgICAgICAgICAgICBtYWtlRW50cnkoU0FWRV9BU19URVhUKSwKKyAgICAgICAgICAgIG1ha2VFbnRyeShDTE9TRSksCisgICAgICAgICAgICBtYWtlRW50cnkoUFJJTlQpLAorICAgICAgICAgICAgbWFrZUVudHJ5KEVYSVQpLAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vRmlsZU1lbnVNYW5hZ2VyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL0ZpbGVNZW51TWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExOWMwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL0ZpbGVNZW51TWFuYWdlci5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBGaWxlTWVudU1hbmFnZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo0MzowOSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmRlbW87CisKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNyZWF0ZXMgYSBGaWxlIG1lbnUgYW5kIG1hbmFnZXMgdXNlciBpbnRlcmFjdGlvbnMKKyAqIHdpdGggdGhlIG1lbnUuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBGaWxlTWVudU1hbmFnZXIgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgRWRpdEFwcGxpY2F0aW9uIGZBcHBsaWNhdGlvbjsKKyAgICBwcml2YXRlIERvY3VtZW50V2luZG93IGZEb2N1bWVudFdpbmRvdzsKKyAgICBwcml2YXRlIE9iamVjdCBmTmV3LCBmTmV3V2luZG93LCBmT3BlbiwgZlNhdmU7CisgICAgcHJpdmF0ZSBPYmplY3QgZlNhdmVBc1N0eWxlZCwgZlNhdmVBc1RleHQsIGZDbG9zZSwgZlByaW50LCBmRXhpdDsKKworICAgIHByb3RlY3RlZCBGaWxlTWVudU1hbmFnZXIoRWRpdEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50V2luZG93IGRvY3VtZW50KSB7CisKKyAgICAgICAgZkFwcGxpY2F0aW9uID0gYXBwbGljYXRpb247CisgICAgICAgIGZEb2N1bWVudFdpbmRvdyA9IGRvY3VtZW50OworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBjcmVhdGVJdGVtcyhib29sZWFuIHN1cHBvcnRTdHlsZWRGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdXBwb3J0UGxhaW5Gb3JtYXQpIHsKKyAgICAgICAgCisgICAgICAgIGlmICghc3VwcG9ydFN0eWxlZEZvcm1hdCAmJiAhc3VwcG9ydFBsYWluRm9ybWF0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNdXN0IHN1cHBvcnQgYXQgbGVhc3Qgb25lIGZvcm1hdC4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZk5ldyA9IGFkZE1lbnVJdGVtKEVkaXRvclJlc291cmNlcy5ORVcpOworICAgICAgICBmTmV3V2luZG93ID0gYWRkTWVudUl0ZW0oRWRpdG9yUmVzb3VyY2VzLk5FV19XSU5ET1cpOworICAgICAgICAKKyAgICAgICAgYWRkU2VwYXJhdG9yKCk7CisKKyAgICAgICAgZk9wZW4gPSBhZGRNZW51SXRlbShFZGl0b3JSZXNvdXJjZXMuT1BFTik7CisKKyAgICAgICAgZlNhdmUgPSBhZGRNZW51SXRlbShFZGl0b3JSZXNvdXJjZXMuU0FWRSk7CisgICAgICAgIAorICAgICAgICBpZiAoc3VwcG9ydFN0eWxlZEZvcm1hdCkgeworICAgICAgICAgICAgaWYgKHN1cHBvcnRQbGFpbkZvcm1hdCkgeworICAgICAgICAgICAgICAgIGZTYXZlQXNTdHlsZWQgPSBhZGRNZW51SXRlbShFZGl0b3JSZXNvdXJjZXMuU0FWRV9BU19TVFlMRUQpOworICAgICAgICAgICAgICAgIGZTYXZlQXNUZXh0ID0gYWRkTWVudUl0ZW0oRWRpdG9yUmVzb3VyY2VzLlNBVkVfQVNfVEVYVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmU2F2ZUFzU3R5bGVkID0gYWRkTWVudUl0ZW0oRWRpdG9yUmVzb3VyY2VzLlNBVkVfQVMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZlNhdmVBc1RleHQgPSBhZGRNZW51SXRlbShFZGl0b3JSZXNvdXJjZXMuU0FWRV9BUyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGFkZFNlcGFyYXRvcigpOworICAgICAgICBmQ2xvc2UgPSBhZGRNZW51SXRlbShFZGl0b3JSZXNvdXJjZXMuQ0xPU0UpOworICAgICAgICBhZGRTZXBhcmF0b3IoKTsKKyAgICAgICAgZlByaW50ID0gYWRkTWVudUl0ZW0oRWRpdG9yUmVzb3VyY2VzLlBSSU5UKTsKKyAgICAgICAgYWRkU2VwYXJhdG9yKCk7CisgICAgICAgIGZFeGl0ID0gYWRkTWVudUl0ZW0oRWRpdG9yUmVzb3VyY2VzLkVYSVQpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgT2JqZWN0IGFkZE1lbnVJdGVtKFN0cmluZyBrZXkpOworCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYWRkU2VwYXJhdG9yKCk7CisgICAgCisgICAgcHVibGljIGZpbmFsIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2ZW50KSB7CisKKyAgICAgICAgT2JqZWN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpOworCisgICAgICAgIGlmIChzb3VyY2UgPT0gZk5ldykgeworICAgICAgICAgICAgZkRvY3VtZW50V2luZG93LmRvTmV3KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc291cmNlID09IGZOZXdXaW5kb3cpIHsKKyAgICAgICAgICAgIGZBcHBsaWNhdGlvbi5kb05ld1dpbmRvdygpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBmT3BlbikgeworICAgICAgICAgICAgZkRvY3VtZW50V2luZG93LmRvT3BlbigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBmQ2xvc2UpIHsKKyAgICAgICAgICAgIGZEb2N1bWVudFdpbmRvdy5kb0Nsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc291cmNlID09IGZTYXZlKSB7CisgICAgICAgICAgICBmRG9jdW1lbnRXaW5kb3cuZG9TYXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc291cmNlID09IGZTYXZlQXNTdHlsZWQpIHsKKyAgICAgICAgICAgIGZEb2N1bWVudFdpbmRvdy5kb1NhdmVBcyhUZXh0RG9jdW1lbnQuU1RZTEVEX1RFWFQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBmU2F2ZUFzVGV4dCkgeworICAgICAgICAgICAgZkRvY3VtZW50V2luZG93LmRvU2F2ZUFzKFRleHREb2N1bWVudC5QTEFJTl9URVhUKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gZlByaW50KSB7CisgICAgICAgICAgICBmRG9jdW1lbnRXaW5kb3cuZG9QcmludCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBmRXhpdCkgeworICAgICAgICAgICAgZkFwcGxpY2F0aW9uLmRvRXhpdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGV2ZW50IHNvdXJjZTogIiArIHNvdXJjZSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9NZW51RGF0YS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9NZW51RGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkZjQxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL01lbnVEYXRhLmphdmEKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogTWVudURhdGEuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo0MzowOSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmRlbW87CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBNZW51RGF0YSB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgU3RyaW5nIGZOYW1lOworICAgIHByaXZhdGUgYm9vbGVhbiBmSGFzU2hvcnRjdXQ7CisgICAgcHJpdmF0ZSBjaGFyIGZTaG9ydGN1dDsKKyAgICBwcml2YXRlIGludCBmU2hvcnRjdXRLZXlDb2RlOworCisgICAgcHVibGljIE1lbnVEYXRhKFN0cmluZyBuYW1lKSB7CisKKyAgICAgICAgZk5hbWUgPSBuYW1lOworICAgICAgICBmSGFzU2hvcnRjdXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWVudURhdGEoU3RyaW5nIG5hbWUsIGNoYXIgY2gsIGludCBrZXlDb2RlKSB7CisKKyAgICAgICAgZk5hbWUgPSBuYW1lOworICAgICAgICBmSGFzU2hvcnRjdXQgPSB0cnVlOworICAgICAgICBmU2hvcnRjdXQgPSBjaDsKKyAgICAgICAgZlNob3J0Y3V0S2V5Q29kZSA9IGtleUNvZGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCisgICAgICAgIHJldHVybiBmTmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgY2hhciBnZXRTaG9ydGN1dCgpIHsKKworICAgICAgICBpZiAoIWZIYXNTaG9ydGN1dCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJNZW51IGRvZXNuJ3QgaGF2ZSBzaG9ydGN1dCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmU2hvcnRjdXQ7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBpbnQgZ2V0U2hvcnRjdXRLZXlDb2RlKCkgeworICAgIAorICAgICAgICByZXR1cm4gZlNob3J0Y3V0S2V5Q29kZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNTaG9ydGN1dCgpIHsKKworICAgICAgICByZXR1cm4gZkhhc1Nob3J0Y3V0OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL1Jlc291cmNlVXRpbHMuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vUmVzb3VyY2VVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2N2RmODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL1Jlc291cmNlVXRpbHMuamF2YQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBSZXNvdXJjZVV0aWxzLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDM6MDkgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5kZW1vOworCitpbXBvcnQgamF2YS5hd3QuTWVudUl0ZW07CitpbXBvcnQgamF2YS5hd3QuTWVudVNob3J0Y3V0OworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogVXRpbGl0eSBjbGFzcyBmb3IgZGVhbGluZyB3aXRoIHJlc291cmNlIGRhdGEuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBSZXNvdXJjZVV0aWxzIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgUmVzb3VyY2VCdW5kbGUgQlVORExFOworICAgIHN0YXRpYyB7CisgICAgICAgIFN0cmluZyBidW5kbGVOYW1lID0gImNvbS5pYm0ucmljaHRleHQuZGVtby5FZGl0b3JSZXNvdXJjZXMiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgQlVORExFID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkbid0IGxvYWQgIiArIGJ1bmRsZU5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7ICBFeGNlcHRpb246ICIgKyBlKTsKKyAgICAgICAgICAgIEJVTkRMRSA9IG5ldyBFZGl0b3JSZXNvdXJjZXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBCVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIE1lbnVEYXRhIGdldE1lbnVEYXRhKFN0cmluZyBrZXkpIHsKKyAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoTWVudURhdGEpIEJVTkRMRS5nZXRPYmplY3Qoa2V5KTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBNZW51RGF0YShrZXkpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIE1lbnVJdGVtIGNyZWF0ZU1lbnVJdGVtKFN0cmluZyBrZXkpIHsKKworICAgICAgICBNZW51RGF0YSBtZW51RGF0YSA9IGdldE1lbnVEYXRhKGtleSk7CisKKyAgICAgICAgaWYgKG1lbnVEYXRhLmhhc1Nob3J0Y3V0KCkpIHsKKyAgICAgICAgICAgIE1lbnVTaG9ydGN1dCBzaG9ydGN1dCA9IG5ldyBNZW51U2hvcnRjdXQobWVudURhdGEuZ2V0U2hvcnRjdXQoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IE1lbnVJdGVtKG1lbnVEYXRhLmdldE5hbWUoKSwgc2hvcnRjdXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBNZW51SXRlbShtZW51RGF0YS5nZXROYW1lKCkpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vU3ludGF4Q29sb3Jlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9TeW50YXhDb2xvcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODU0NmQ2OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L2RlbW8vU3ludGF4Q29sb3Jlci5qYXZhCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogJFJDU2ZpbGU6IFN5bnRheENvbG9yZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LmRlbW87CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmF3dHVpLlRleHRGcmFtZTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbEV2ZW50OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbExpc3RlbmVyOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZWRUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZU1vZGlmaWVyOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLlRleHRBdHRyaWJ1dGU7CisKK2ltcG9ydCBqYXZhLmF3dC5Db2xvcjsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQ7CisKK2ltcG9ydCBqYXZhLnRleHQuQnJlYWtJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgamF2YS50ZXh0LkNvbGxhdGlvbktleTsKK2ltcG9ydCBqYXZhLnRleHQuQ29sbGF0b3I7CisKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKKworLyoqCisgKiBTeW50YXhDb2xvcmVyIGlzIGEgVGV4dFBhbmVsTGlzdGVuZXIgdGhhdCBhcHBsaWVzIGEgc3R5bGUKKyAqIHRvIGEgc2V0IG9mIHdvcmRzIGluIHRoZSBUZXh0UGFuZWwuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTeW50YXhDb2xvcmVyIGltcGxlbWVudHMgVGV4dFBhbmVsTGlzdGVuZXIgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgQ29sb3JlciB7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgICAgICBwcml2YXRlIGludCBmU3RhcnQ7CisgICAgICAgIHByaXZhdGUgSGFzaHRhYmxlIGZTdHlsZU1hcDsKKyAgICAgICAgcHJpdmF0ZSBDb2xsYXRvciBmQ29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZSgpOworICAgICAgICBwcml2YXRlIEJyZWFrSXRlcmF0b3IgZkJyZWFrSXRlciA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKCk7CisKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZlRleHQ7CisgICAgICAgIHByaXZhdGUgaW50IGZDdXJyZW50U3RhcnQ7CisgICAgICAgIHByaXZhdGUgaW50IGZDdXJyZW50TGltaXQ7CisgICAgICAgIHByaXZhdGUgQXR0cmlidXRlTWFwIGZDdXJyZW50U3R5bGU7CisgICAgICAgIAorICAgICAgICBDb2xvcmVyKEhhc2h0YWJsZSBzdHlsZXMpIHsKKworICAgICAgICAgICAgZlN0eWxlTWFwID0gbmV3IEhhc2h0YWJsZShzdHlsZXMuc2l6ZSgpKTsKKworICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9IHN0eWxlcy5rZXlzKCk7CisgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBrID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGZTdHlsZU1hcC5wdXQoZkNvbGxhdG9yLmdldENvbGxhdGlvbktleShrKSwgc3R5bGVzLmdldChrKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0KENoYXJhY3Rlckl0ZXJhdG9yIHRleHQsIGludCBzdGFydCwgaW50IGxpbWl0KSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZTdGFydCA9IHN0YXJ0OworCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGxpbWl0LXN0YXJ0KTsKKyAgICAgICAgICAgIGZvciAoY2hhciBjPXRleHQuc2V0SW5kZXgoc3RhcnQpOyB0ZXh0LmdldEluZGV4KCkgIT0gbGltaXQ7IGM9dGV4dC5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmVGV4dCA9IHNiLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBmQ3VycmVudFN0YXJ0ID0gZkN1cnJlbnRMaW1pdCA9IDA7CisgICAgICAgICAgICBmQ3VycmVudFN0eWxlID0gQXR0cmlidXRlTWFwLkVNUFRZX0FUVFJJQlVURV9NQVA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZCcmVha0l0ZXIuc2V0VGV4dChmVGV4dCk7CisgICAgICAgICAgICBmQnJlYWtJdGVyLmZpcnN0KCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBib29sZWFuIG5leHQoKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmQ3VycmVudExpbWl0ID09IGZUZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgZlRleHQgPSBudWxsOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZkN1cnJlbnRTdGFydCA9IGZDdXJyZW50TGltaXQ7CisgICAgICAgICAgICBmQ3VycmVudExpbWl0ID0gZkJyZWFrSXRlci5uZXh0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyB3b3JkID0gZlRleHQuc3Vic3RyaW5nKGZDdXJyZW50U3RhcnQsIGZDdXJyZW50TGltaXQpOworICAgICAgICAgICAgQ29sbGF0aW9uS2V5IGNrID0gZkNvbGxhdG9yLmdldENvbGxhdGlvbktleSh3b3JkKTsKKyAgICAgICAgICAgIGZDdXJyZW50U3R5bGUgPSAoQXR0cmlidXRlTWFwKSBmU3R5bGVNYXAuZ2V0KGNrKTsKKyAgICAgICAgICAgIGlmIChmQ3VycmVudFN0eWxlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmQ3VycmVudFN0eWxlID0gQXR0cmlidXRlTWFwLkVNUFRZX0FUVFJJQlVURV9NQVA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaW50IGN1cnJlbnRTdGFydCgpIHsKKyAgICAgICAgICAgIHJldHVybiBmQ3VycmVudFN0YXJ0ICsgZlN0YXJ0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgY3VycmVudExpbWl0KCkgeworICAgICAgICAgICAgcmV0dXJuIGZDdXJyZW50TGltaXQgKyBmU3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEF0dHJpYnV0ZU1hcCBjdXJyZW50U3R5bGUoKSB7CisgICAgICAgICAgICByZXR1cm4gZkN1cnJlbnRTdHlsZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgQnJlYWtJdGVyYXRvciBmQnJlYWtJdGVyID0gQnJlYWtJdGVyYXRvci5nZXRXb3JkSW5zdGFuY2UoKTsKKyAgICBwcml2YXRlIENvbG9yZXIgZkNvbG9yZXI7CisgICAgcHJpdmF0ZSBib29sZWFuIGZNb2RpZnlpbmcgPSBmYWxzZTsKKyAgICBwcml2YXRlIEF0dHJpYnV0ZU1hcCBmRGVmYXVsdEtleXdvcmRTdHlsZSA9IEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQOworICAgIHByaXZhdGUgSGFzaHRhYmxlIGZNb2RpZmllckNhY2hlOworICAgIAorICAgIHB1YmxpYyBTeW50YXhDb2xvcmVyKCkgeworICAgICAgICAKKyAgICAgICAgdGhpcyhudWxsKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIFN5bnRheENvbG9yZXIoTVRleHRQYW5lbCBwYW5lbCkgeworICAgICAgICAKKyAgICAgICAgSGFzaHRhYmxlIGh0ID0gbmV3IEhhc2h0YWJsZSgpOworCisgICAgICAgIC8vVW5jb21tZW50IHRoaXMgdG8gbWFrZSBrZXl3b3JkcyBhcHBlYXIgcmlnaHQtdG8tbGVmdCEKKyAgICAgICAgLy9mRGVmYXVsdEtleXdvcmRTdHlsZSA9IGZEZWZhdWx0S2V5d29yZFN0eWxlLmFkZEF0dHJpYnV0ZShUZXh0QXR0cmlidXRlLkJJRElfRU1CRURESU5HLCAKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZWdlcigtMSkpOworICAgICAgICAKKyAgICAgICAgZkRlZmF1bHRLZXl3b3JkU3R5bGUgPSBmRGVmYXVsdEtleXdvcmRTdHlsZS5hZGRBdHRyaWJ1dGUoVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FX09OKTsKKyAgICAgICAgZkRlZmF1bHRLZXl3b3JkU3R5bGUgPSBmRGVmYXVsdEtleXdvcmRTdHlsZS5hZGRBdHRyaWJ1dGUoVGV4dEF0dHJpYnV0ZS5GT1JFR1JPVU5ELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IuYmx1ZSk7CisgICAgICAgIAorICAgICAgICBTdHJpbmdbXSBqYXZhV29yZHMgPSB7ImFic3RyYWN0IiAsICJib29sZWFuIiwgImJyZWFrIiwgImJ5dGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dmFsdWUiLCAiY2FzZSIsICJjYXN0IiwgImRlZmF1bHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvIiwgImRvdWJsZSIsICJlbHNlIiwgImV4dGVuZHMiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWxzZSIsICJmaW5hbCIsICJnb3RvIiwgImlmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsZW1lbnRzIiwgImltcG9ydCIsICJpbm5lciIsICJpbnN0YW5jZW9mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQiLCAib3BlcmF0b3IiLCAib3V0ZXIiLCAicGFja2FnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJpdmF0ZSIsICJwcm90ZWN0ZWQiLCAicHVibGljIiwgInJlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5bmNocm9uaXplZCIsICJ0aGlzIiwgInRocm93IiwgInRocm93cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhbnNpZW50IiwgInRydWUiLCAidHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYXRjaCIsICJjaGFyIiwgImNvbnN0IiwgImNvbnRpbnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaW5hbGx5IiwgImZsb2F0IiwgImZvciIsICJmdXR1cmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyaWMiLCAiaW50ZXJmYWNlIiwgImxvbmciLCAibmF0aXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXciLCAibnVsbCIsICJyZXR1cm4iLCAic2hvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXRpYyIsICJzdXBlciIsICJzd2l0Y2giLCAidmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2b2lkIiwgInZvbGF0aWxlIiwgIndoaWxlIiwgImNsYXNzIn07CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgamF2YVdvcmRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBodC5wdXQoamF2YVdvcmRzW2ldLCBmRGVmYXVsdEtleXdvcmRTdHlsZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZDb2xvcmVyID0gbmV3IENvbG9yZXIoaHQpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhbmVsICE9IG51bGwpIHsKKyAgICAgICAgICAgIE1Db25zdFRleHQgdGV4dCA9IHBhbmVsLmdldFRleHQoKTsKKyAgICAgICAgICAgIGNvbG9yUmFuZ2UoMCwgdGV4dC5sZW5ndGgoKSwgdGV4dC5jcmVhdGVDaGFyYWN0ZXJJdGVyYXRvcigpLCBwYW5lbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZNb2RpZmllckNhY2hlID0gbmV3IEhhc2h0YWJsZSgyKTsKKyAgICAgICAgZk1vZGlmaWVyQ2FjaGUucHV0KGZEZWZhdWx0S2V5d29yZFN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIuY3JlYXRlUmVwbGFjZU1vZGlmaWVyKGZEZWZhdWx0S2V5d29yZFN0eWxlKSk7CisgICAgICAgIGZNb2RpZmllckNhY2hlLnB1dChBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZVJlcGxhY2VNb2RpZmllcihBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiByZXNwb25kc1RvRXZlbnRUeXBlKGludCB0eXBlKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHlwZSA9PSBUZXh0UGFuZWxFdmVudC5URVhUX0NIQU5HRUQ7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHRleHRFdmVudE9jY3VycmVkKFRleHRQYW5lbEV2ZW50IGUpIHsKKworICAgICAgICBpZiAoZk1vZGlmeWluZykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNVGV4dFBhbmVsIHBhbmVsID0gKE1UZXh0UGFuZWwpIGUuZ2V0U291cmNlKCk7CisgICAgICAgIAorICAgICAgICBmaW5hbCBNQ29uc3RUZXh0IHRleHQgPSBwYW5lbC5nZXRUZXh0KCk7CisgICAgICAgIGludCBzdGFydCA9IHRleHQuZGFtYWdlZFJhbmdlU3RhcnQoKTsKKyAgICAgICAgaW50IGxpbWl0ID0gdGV4dC5kYW1hZ2VkUmFuZ2VMaW1pdCgpOworICAgICAgICBpZiAoc3RhcnQgPiBsaW1pdCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciB0ZXh0SXRlciA9IHRleHQuY3JlYXRlQ2hhcmFjdGVySXRlcmF0b3IoKTsKKyAgICAgICAgCisgICAgICAgIGZCcmVha0l0ZXIuc2V0VGV4dCh0ZXh0SXRlcik7CisgICAgICAgIGlmIChzdGFydCA+IDApIHsKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSB0ZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgZkJyZWFrSXRlci5sYXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmQnJlYWtJdGVyLmZvbGxvd2luZyhzdGFydC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0ID0gZkJyZWFrSXRlci5wcmV2aW91cygpOworICAgICAgICB9CisgICAgICAgIGlmIChsaW1pdCA8IHRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGZCcmVha0l0ZXIuZm9sbG93aW5nKGxpbWl0KTsKKyAgICAgICAgICAgIGludCBsOworICAgICAgICAgICAgaWYgKChsPWZCcmVha0l0ZXIucHJldmlvdXMoKSkgPD0gbGltaXQpIHsKKyAgICAgICAgICAgICAgICBsaW1pdCA9IGZCcmVha0l0ZXIubmV4dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmTW9kaWZ5aW5nID0gdHJ1ZTsKKyAgICAgICAgY29sb3JSYW5nZShzdGFydCwgbGltaXQsIHRleHRJdGVyLCBwYW5lbCk7CisgICAgICAgIGZNb2RpZnlpbmcgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGNvbG9yUmFuZ2UoZmluYWwgaW50IHN0YXJ0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbGltaXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIHRleHRJdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UZXh0UGFuZWwgcGFuZWwpIHsKKyAgICAgICAgCisgICAgICAgIGZDb2xvcmVyLnNldCh0ZXh0SXRlciwgc3RhcnQsIGxpbWl0KTsKKworICAgICAgICBNQ29uc3RUZXh0IG9sZFRleHQgPSBwYW5lbC5nZXRUZXh0KCk7CisgICAgICAgIE1UZXh0IG5ld1RleHQgPSBudWxsOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKGZDb2xvcmVyLm5leHQoKSkgeworCisgICAgICAgICAgICBpbnQgcmFuZ2VTdGFydCA9IGZDb2xvcmVyLmN1cnJlbnRTdGFydCgpOworICAgICAgICAgICAgaW50IHJhbmdlTGltaXQgPSBmQ29sb3Jlci5jdXJyZW50TGltaXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXR0cmlidXRlTWFwIHN0eWxlID0gZkNvbG9yZXIuY3VycmVudFN0eWxlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvbGRUZXh0LmNoYXJhY3RlclN0eWxlTGltaXQocmFuZ2VTdGFydCkgPCByYW5nZUxpbWl0IHx8CisgICAgICAgICAgICAgICAgICAgIG9sZFRleHQuY2hhcmFjdGVyU3R5bGVBdChyYW5nZVN0YXJ0KSAhPSBzdHlsZSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IGNzdGFydCA9IHJhbmdlU3RhcnQtc3RhcnQ7CisgICAgICAgICAgICAgICAgaW50IGNsaW1pdCA9IHJhbmdlTGltaXQtc3RhcnQ7CisgICAgICAgICAgICAgICAgaWYgKG5ld1RleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBuZXdUZXh0ID0gbmV3IFN0eWxlZFRleHQob2xkVGV4dCwgc3RhcnQsIGxpbWl0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU3R5bGVNb2RpZmllciBtb2QgPSAoU3R5bGVNb2RpZmllcikgZk1vZGlmaWVyQ2FjaGUuZ2V0KHN0eWxlKTsKKyAgICAgICAgICAgICAgICBuZXdUZXh0Lm1vZGlmeUNoYXJhY3RlclN0eWxlcyhjc3RhcnQsIGNsaW1pdCwgbW9kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5ld1RleHQgIT0gbnVsbCkgeworICAgICAgICAKKyAgICAgICAgICAgIGludCBvbGRTdGFydCA9IHBhbmVsLmdldFNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAgICAgICBpbnQgb2xkTGltaXQgPSBwYW5lbC5nZXRTZWxlY3Rpb25FbmQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcGFuZWwucmVwbGFjZVJhbmdlKG5ld1RleHQsIHN0YXJ0LCBsaW1pdCk7ICAgICAgICAgICAgCisgICAgCisgICAgICAgICAgICBwYW5lbC5zZWxlY3Qob2xkU3RhcnQsIG9sZExpbWl0KTsKKyAgICAgICAgICAgIGlmIChvbGRTdGFydCA9PSBvbGRMaW1pdCkgeworICAgICAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIgbW9kID0gKFN0eWxlTW9kaWZpZXIpIGZNb2RpZmllckNhY2hlLmdldChBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHBhbmVsLm1vZGlmeUNoYXJhY3RlclN0eWxlT25TZWxlY3Rpb24obW9kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIAorICAgICAgICBUZXh0RnJhbWUgZiA9IG5ldyBUZXh0RnJhbWUoKTsKKyAgICAgICAgZi5hZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgZi5zZXRTaXplKDQwMCwgMzAwKTsKKyAgICAgICAgTVRleHRQYW5lbCBwYW5lbCA9IGYuZ2V0VGV4dFBhbmVsKCk7CisgICAgICAgIHBhbmVsLmFkZExpc3RlbmVyKG5ldyBTeW50YXhDb2xvcmVyKHBhbmVsKSk7CisgICAgICAgIGYuc2hvdygpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9kZW1vL1RleHREb2N1bWVudC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9UZXh0RG9jdW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYzQ2NGNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvZGVtby9UZXh0RG9jdW1lbnQuamF2YQpAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGV4dERvY3VtZW50LmphdmEsdiAkICRSZXZpc2lvbjogMS4zICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MzQgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5kZW1vOworCitpbXBvcnQgamF2YS5pby4qOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZWRUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCisvKioKKyAqIEEgVGV4dERvY3VtZW50IGhhbmRsZXMgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gYSBmaWxlIG9uIGRpc2sKKyAqIGFuZCBhIFRleHRQYW5lbC4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFRleHREb2N1bWVudCB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZfU0laRSA9IDEwMjQ7CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZlRpdGxlOworICAgIHByaXZhdGUgTUNvbnN0VGV4dCBmVGV4dDsKKyAgICBwcml2YXRlIEZpbGUgZkZpbGU7CisgICAgcHJpdmF0ZSBNVGV4dFBhbmVsIGZUZXh0UGFuZWwgPSBudWxsOworICAgIHByaXZhdGUgYm9vbGVhbiBpc01vZGlmaWVkID0gZmFsc2U7CisgICAgcHJpdmF0ZSBpbnQgZkZvcm1hdCA9IFNUWUxFRF9URVhUOworICAgIAorICAgIHByaXZhdGUgVGV4dERvY3VtZW50KFN0cmluZyB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNQ29uc3RUZXh0IHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JtYXQpIHsKKyAgICAgICAgCisgICAgICAgIGZUaXRsZSA9IHRpdGxlOworICAgICAgICBmVGV4dCA9IHRleHQ7CisgICAgICAgIGZGaWxlID0gZmlsZTsKKyAgICAgICAgc2V0Rm9ybWF0KGZvcm1hdCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFRF9URVhUID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFJTl9URVhUID0gMTsKKyAgICAKKyAgICAvKiogCisgICAgICogUmV0dXJuIGEgbmV3IFRleHREb2N1bWVudCB3aXRoIG5vIGFzc29jaWF0ZWQgZmlsZSBhbmQKKyAgICAgKiBlbXB0eSB0ZXh0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVGV4dERvY3VtZW50IGNyZWF0ZUVtcHR5KFN0cmluZyB0aXRsZSwgaW50IGZvcm1hdCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0RG9jdW1lbnQodGl0bGUsIG5ldyBTdHlsZWRUZXh0KCksIG51bGwsIGZvcm1hdCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiBhIFRleHREb2N1bWVudCBjcmVhdGVkIGZyb20gdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbgorICAgICAqIGZpbGUuICBUaGlzIG1ldGhvZCBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBmaWxlIGNhbm5vdAorICAgICAqIGJlIHJlYWQuICBJbiBwYXJ0aWN1bGFyLCBpZiB0aGUgZm9ybWF0IGlzIGdpdmVuIGFzIFNUWUxFRF9URVhUCisgICAgICogYnV0IHRoZSBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYSBzZXJpYWxpemVkIE1Db25zdFRleHQsIAorICAgICAqIHRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgVGV4dERvY3VtZW50IGNyZWF0ZUZyb21GaWxlKEZpbGUgZmlsZSwgaW50IGZvcm1hdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIAorICAgICAgICBpZiAoZm9ybWF0ICE9IFNUWUxFRF9URVhUICYmIGZvcm1hdCAhPSBQTEFJTl9URVhUKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGZvcm1hdCIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNQ29uc3RUZXh0IHRleHQ7CisgICAgICAgIGlmIChmb3JtYXQgPT0gU1RZTEVEX1RFWFQpIHsKKyAgICAgICAgICAgIHRleHQgPSByZWFkTVRleHQoZmlsZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0ZXh0ID0gcmVhZE1UZXh0RnJvbVRleHRGaWxlKGZpbGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUZXh0RG9jdW1lbnQgZG9jdW1lbnQgPSBuZXcgVGV4dERvY3VtZW50KGZpbGUuZ2V0TmFtZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGRvY3VtZW50J3MgdGV4dCBkaWZmZXJzIGZyb20gdGhlIGNvbnRlbnRzCisgICAgICogb2YgaXRzIGZpbGUuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNNb2RpZmllZCgpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChmVGV4dFBhbmVsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBpc01vZGlmaWVkOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZUZXh0UGFuZWwuaXNNb2RpZmllZCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgTVRleHRQYW5lbCB0aGF0IHdpbGwgYmUgdXNlZCB0byBlZGl0IHRoZSBkb2N1bWVudCdzCisgICAgICogdGV4dC4gIFRoZSBkb2N1bWVudCdzIHRleHQgYmVjb21lcyB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICogTVRleHRQYW5lbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0UGFuZWwoTVRleHRQYW5lbCB0ZXh0UGFuZWwpIHsKKworICAgICAgICBpZiAoZlRleHRQYW5lbCAhPSBudWxsKSB7CisgICAgICAgICAgICBmVGV4dCA9IGZUZXh0UGFuZWwuZ2V0VGV4dCgpOworICAgICAgICAgICAgaXNNb2RpZmllZCA9IGZUZXh0UGFuZWwuaXNNb2RpZmllZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmVGV4dFBhbmVsID0gdGV4dFBhbmVsOworICAgICAgICAKKyAgICAgICAgaWYgKGZUZXh0UGFuZWwgIT0gbnVsbCkgeworICAgICAgICAgICAgZlRleHRQYW5lbC5zZXRUZXh0KGZUZXh0KTsKKyAgICAgICAgICAgIGZUZXh0ID0gbnVsbDsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwuc2V0TW9kaWZpZWQoaXNNb2RpZmllZCk7CisgICAgICAgICAgICBmVGV4dFBhbmVsLmNsZWFyQ29tbWFuZExvZygpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBGaWxlIGdldEZpbGUoKSB7CisgICAgCisgICAgICAgIHJldHVybiBmRmlsZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoaXMgZG9jdW1lbnQncyBmaWxlLiAgVGhlIGRvY3VtZW50J3MgdGl0bGUgd2lsbAorICAgICAqIGNoYW5nZSB0byB0aGUgZmlsZSBuYW1lLiAgVGhlIGZpbGUgY2Fubm90IGJlIG51bGwuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RmlsZShGaWxlIGZpbGUpIHsKKyAgICAgICAgCisgICAgICAgIGZGaWxlID0gZmlsZTsKKyAgICAgICAgZlRpdGxlID0gZmlsZS5nZXROYW1lKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgZm9ybWF0IG9mIHRoaXMgZG9jdW1lbnQuICBUaGUgZm9ybWF0IGRldGVybWluZXMKKyAgICAgKiB3aGV0aGVyIHRoZSBkb2N1bWVudCB3aWxsIGJlIHdyaXR0ZW4gdG8gZmlsZXMgYXMgc3R5bGVkCisgICAgICogdGV4dCBvciBwbGFpbiBjaGFyYWN0ZXJzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEZvcm1hdChpbnQgZm9ybWF0KSB7CisgICAgICAgIAorICAgICAgICBpZiAoZm9ybWF0ICE9IFNUWUxFRF9URVhUICYmIGZvcm1hdCAhPSBQTEFJTl9URVhUKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGZvcm1hdCIpOworICAgICAgICB9CisgICAgICAgIGZGb3JtYXQgPSBmb3JtYXQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZm9ybWF0IG9mIHRoaXMgZG9jdW1lbnQuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRGb3JtYXQoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZkZvcm1hdDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogV3JpdGUgdGhlIGRvY3VtZW50J3MgdGV4dCB0byBpdHMgZmlsZS4gIElmIHRoZSBkb2N1bWVudCBkb2VzCisgICAgICogbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBmaWxlIHRoZW4gdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bworICAgICAqIHNhdmVBcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGUgc2F2ZSBvcGVyYXRpb24gc3VjY2VlZHMuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gc2F2ZSgpIHsKKworICAgICAgICBpZiAoZkZpbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbid0IHNhdmUgd2l0aG91dCBhIGZpbGUuIik7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgTUNvbnN0VGV4dCB0ZXh0ID0gZ2V0VGV4dCgpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBmRm9ybWF0PT1TVFlMRURfVEVYVD8gd3JpdGVNVGV4dChmRmlsZSwgdGV4dCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVQbGFpbk1UZXh0KGZGaWxlLCB0ZXh0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgZlRleHRQYW5lbCAhPSBudWxsKSB7CisgICAgICAgICAgICBmVGV4dFBhbmVsLnNldE1vZGlmaWVkKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9CisgICAgCisgICAgLyoqIAorICAgICAqIFJldHVybiB0aGlzIGRvY3VtZW50J3Mgc3R5bGVkIHRleHQuCisgICAgICovCisgICAgcHVibGljIE1Db25zdFRleHQgZ2V0VGV4dCgpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChmVGV4dFBhbmVsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmVGV4dDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmVGV4dFBhbmVsLmdldFRleHQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHRpdGxlIG9mIHRoaXMgZG9jdW1lbnQuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmVGl0bGU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgTVRleHQgc2VyaWFsaXplZCBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAgICAgKiBJbiBjYXNlIG9mIGFuIGVycm9yIHJldHVybiBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIE1Db25zdFRleHQgcmVhZE1UZXh0KEZpbGUgZmlsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICAgICAgRmlsZUlucHV0U3RyZWFtIGluU3RyZWFtID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7CisgICAgICAgICAgICBPYmplY3RJbnB1dFN0cmVhbSBvYmpTdHJlYW0gPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oaW5TdHJlYW0pOworCisgICAgICAgICAgICByZXR1cm4gKE1Db25zdFRleHQpIG9ialN0cmVhbS5yZWFkT2JqZWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICBpZiAoaW5TdHJlYW0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGluU3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJlYWQgdGhlIGdpdmVuIGZpbGUgYXMgYSBwbGFpbiB0ZXh0IGZpbGUsIGFuZCByZXR1cm4gaXRzCisgICAgICogY29udGVudHMgYXMgYW4gTUNvbnN0VGV4dC4gIFRoZSBjaGFyYWN0ZXIgYW5kIHBhcmFncmFwaCBzdHlsZXMgaW4gCisgICAgICogdGhlIHJldHVybmVkIHRleHQgd2lsbCBiZSBFTVBUWV9BVFRSSUJVVEVfTUFQLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIE1Db25zdFRleHQgcmVhZE1UZXh0RnJvbVRleHRGaWxlKEZpbGUgZmlsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIAorICAgICAgICBJbnB1dFN0cmVhbVJlYWRlciBpbiA9IG51bGw7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgaW4gPSBuZXcgRmlsZVJlYWRlcihmaWxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTVRleHQgdGV4dCA9IG5ldyBTdHlsZWRUZXh0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoYXJbXSBidWYgPSBuZXcgY2hhcltCVUZfU0laRV07CisgICAgICAgICAgICBpbnQgcmVhZDsKKyAgICAgICAgICAgIHdoaWxlICgocmVhZD1pbi5yZWFkKGJ1ZiwgMCwgYnVmLmxlbmd0aCkpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHRleHQubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKGxlbiwgbGVuLCBidWYsIDAsIHJlYWQsIEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0ZXh0OworICAgICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKGluICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpbi5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEF0dGVtcHQgdG8gc2F2ZSB0aGUgZ2l2ZW4gdGV4dCBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHdyaXRlTVRleHQoRmlsZSBmaWxlLCBNQ29uc3RUZXh0IHRleHQpIHsKKworICAgICAgICBUaHJvd2FibGUgZXJyb3IgPSBudWxsOworICAgICAgICBPdXRwdXRTdHJlYW0gb3V0U3RyZWFtID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBvdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKKyAgICAgICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvYmpTdHJlYW0gPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKG91dFN0cmVhbSk7CisKKyAgICAgICAgICAgIG9ialN0cmVhbS53cml0ZU9iamVjdCh0ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChvdXRTdHJlYW0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG91dFN0cmVhbS5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIGVycm9yLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXcml0ZSB0aGUgZ2l2ZW4gTUNvbnN0VGV4dCB0byB0aGUgZ2l2ZW4gZmlsZSBhcyBwbGFpbiB0ZXh0LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gd3JpdGVQbGFpbk1UZXh0KEZpbGUgZmlsZSwgTUNvbnN0VGV4dCB0ZXh0KSB7CisKKyAgICAgICAgVGhyb3dhYmxlIGVycm9yID0gbnVsbDsKKyAgICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIG91dFN0cmVhbSA9IG51bGw7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgb3V0U3RyZWFtID0gbmV3IEZpbGVXcml0ZXIoZmlsZSk7CisgICAgICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbQlVGX1NJWkVdOworICAgICAgICAgICAgaW50IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IE1hdGgubWluKGxlbmd0aC1zdGFydCwgYnVmLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgdGV4dC5leHRyYWN0Q2hhcnMoc3RhcnQsIHN0YXJ0K2NvdW50LCBidWYsIDApOworICAgICAgICAgICAgICAgIG91dFN0cmVhbS53cml0ZShidWYsIDAsIGNvdW50KTsKKyAgICAgICAgICAgICAgICBzdGFydCArPSBjb3VudDsKKyAgICAgICAgICAgIH0gd2hpbGUgKHN0YXJ0IDwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICBpZiAob3V0U3RyZWFtICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBvdXRTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCisgICAgICAgIGlmIChlcnJvciAhPSBudWxsKSB7CisgICAgICAgICAgICBlcnJvci5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L21hbmlmZXN0LnN0dWIgYi9zcmMvY29tL2libS9yaWNodGV4dC9tYW5pZmVzdC5zdHViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MGNlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9tYW5pZmVzdC5zdHViCkBAIC0wLDAgKzEsMTMgQEAKK01haW4tQ2xhc3M6IGNvbS5pYm0ucmljaHRleHQuZGVtby5FZGl0RGVtbworTWFuaWZlc3QtVmVyc2lvbjogMS4wCitTcGVjaWZpY2F0aW9uLVRpdGxlOiBJQ1UgZm9yIEphdmEgUmljaEVkaXQKK1NwZWNpZmljYXRpb24tVmVyc2lvbjogMi4yCitTcGVjaWZpY2F0aW9uLVZlbmRvcjogSUNVCitJbXBsZW1lbnRhdGlvbi1UaXRsZTogSUNVIGZvciBKYXZhIFJpY2hFZGl0CitJbXBsZW1lbnRhdGlvbi1WZXJzaW9uOiAyLjIKK0ltcGxlbWVudGF0aW9uLVZlbmRvcjogSUJNIENvcnBvcmF0aW9uCitJbXBsZW1lbnRhdGlvbi1WZW5kb3ItSWQ6IGNvbS5pYm0KKworTmFtZTogY29tL2libS9yaWNodGV4dAorCisKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3ByaW50L01Db25zdFRleHRQcmludGFibGUuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3ByaW50L01Db25zdFRleHRQcmludGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYTVhZjdhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvcHJpbnQvTUNvbnN0VGV4dFByaW50YWJsZS5qYXZhCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBNQ29uc3RUZXh0UHJpbnRhYmxlLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MzQgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5wcmludDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0Lk1Gb3JtYXR0ZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKK2ltcG9ydCBqYXZhLmF3dC5Db2xvcjsKK2ltcG9ydCBqYXZhLmF3dC5HcmFwaGljczsKK2ltcG9ydCBqYXZhLmF3dC5Qb2ludDsKK2ltcG9ydCBqYXZhLmF3dC5SZWN0YW5nbGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MncyBpbnRlcmZhY2UgaXMgdmVyeSBjbG9zZSB0byB0aGF0IG9mIHRoZSBKREsgMS4yIFByaW50YWJsZSAKKyAqIGludGVyZmFjZSwgYnV0IGNhbiBleGVjdXRlIG9uIEpESyAxLjEuICBPbiAxLjIsIHRoaXMgY2xhc3MgaXMgd3JhcHBlZAorICogaW4gYSByZWFsIFByaW50YWJsZS4gIE9uIDEuMSwgdGhlIFByaW50Q29udGV4dCBjbGFzcyB1c2VzIHRoaXMgY2xhc3MKKyAqIGFuZCBhIFByaW50Sm9iIGZvciBwcmludGluZy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBjbGFzcyBwYWdpbmF0ZXMgdGhlIHRleHQgaW4gdGhlIGZpcnN0IGNhbGwgdG8gcHJpbnQsCisgKiBvciB0byBnZXRQYWdlQ291bnQuCisgKiBBZnRlciBjb25zdHJ1Y3Rpb24sIGl0cyBwYWdlIHNpemUgaXMgZXNzZW50aWFsbHkgZml4ZWQuICBUaGlzIGlzIG5vdCAKKyAqIGFzIGZsZXhpYmxlIGFzIHRoZSAxLjIgY2xhc3NlcyBhbGxvdywgYnV0IGl0IHNob3VsZCBzdWZmaWNlLgorICovCitmaW5hbCBjbGFzcyBNQ29uc3RUZXh0UHJpbnRhYmxlIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisKKyAgICBzdGF0aWMgZmluYWwgaW50IFBBR0VfRVhJU1RTID0gMDsKKyAgICBzdGF0aWMgZmluYWwgaW50IE5PX1NVQ0hfUEFHRSA9IDE7CisgICAgCisgICAgcHJpdmF0ZSBNQ29uc3RUZXh0IGZUZXh0OworICAgIHByaXZhdGUgQXR0cmlidXRlTWFwIGZEZWZhdWx0U3R5bGVzOworICAgIHByaXZhdGUgUmVjdGFuZ2xlIGZQYWdlUmVjdDsKKyAgICAKKyAgICAvLyBJZiB0aGVzZSB0d28gZmllbGRzIGFyZSBudWxsIHRoZSB0ZXh0IGhhcyBub3QgYmVlbiBwYWdpbmF0ZWQuCisgICAgcHJpdmF0ZSBNRm9ybWF0dGVyIGZGb3JtYXR0ZXI7CisgICAgcHJpdmF0ZSBWZWN0b3IgZlBhZ2VTdGFydHM7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYW4gTUNvbnN0VGV4dFByaW50YWJsZSB0byBwcmludCB0aGUgZ2l2ZW4gdGV4dC4gIEVhY2ggcGFnZSB3aWxsIGZpdAorICAgICAqIGludG8gcGFnZVJlY3QuCisgICAgICovCisgICAgTUNvbnN0VGV4dFByaW50YWJsZShNQ29uc3RUZXh0IHRleHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIGRlZmF1bHRTdHlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGUgcGFnZVJlY3QpIHsKKworICAgICAgICBmVGV4dCA9IHRleHQ7CisgICAgICAgIGZEZWZhdWx0U3R5bGVzID0gZGVmYXVsdFN0eWxlczsKKyAgICAgICAgZlBhZ2VSZWN0ID0gbmV3IFJlY3RhbmdsZShwYWdlUmVjdCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZW1wdHlQYXJhZ3JhcGhBdEVuZE9mVGV4dChNQ29uc3RUZXh0IHRleHQpIHsKKworICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIGNoYXIgY2ggPSB0ZXh0LmF0KHRleHQubGVuZ3RoKCktMSk7CisgICAgICAgICAgICByZXR1cm4gY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHUyMDI5JzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBwYWdpbmF0ZShHcmFwaGljcyBncmFwaGljcykgeworICAgICAgICAKKyAgICAgICAgaWYgKGZQYWdlU3RhcnRzID09IG51bGwpIHsKKworICAgICAgICAgICAgZkZvcm1hdHRlciA9IE1Gb3JtYXR0ZXIuY3JlYXRlRm9ybWF0dGVyKGZUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZEZWZhdWx0U3R5bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZQYWdlUmVjdC53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzKTsKKyAKKyAgICAgICAgICAgIGZGb3JtYXR0ZXIuZm9ybWF0VG9IZWlnaHQoSW50ZWdlci5NQVhfVkFMVUUpOworICAgICAgICAgICAgZkZvcm1hdHRlci5zdG9wQmFja2dyb3VuZEZvcm1hdHRpbmcoKTsKKworICAgICAgICAgICAgZlBhZ2VTdGFydHMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBsaW5lQ291bnQgPSBmRm9ybWF0dGVyLmdldExpbmVDb3VudCgpOworICAgICAgICAgICAgaWYgKGVtcHR5UGFyYWdyYXBoQXRFbmRPZlRleHQoZlRleHQpKSB7CisgICAgICAgICAgICAgICAgbGluZUNvdW50IC09IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBzdGFydExpbmUgPSAwOworICAgICAgICAgICAgZlBhZ2VTdGFydHMuYWRkRWxlbWVudChuZXcgSW50ZWdlcihzdGFydExpbmUpKTsKKyAgICAgICAgICAgIGludCBzdGFydEhlaWdodCA9IDA7CisgICAgICAgICAgICBmaW5hbCBpbnQgcGFnZUhlaWdodCA9IGZQYWdlUmVjdC5oZWlnaHQ7CisKKyAgICAgICAgICAgIHdoaWxlIChzdGFydExpbmUgPCBsaW5lQ291bnQpIHsKKworICAgICAgICAgICAgICAgIGludCBuZXh0U3RhcnQgPSBmRm9ybWF0dGVyLmxpbmVBdEhlaWdodChzdGFydEhlaWdodCArIHBhZ2VIZWlnaHQpOworICAgICAgICAgICAgICAgIGZQYWdlU3RhcnRzLmFkZEVsZW1lbnQobmV3IEludGVnZXIobmV4dFN0YXJ0KSk7CisgICAgICAgICAgICAgICAgc3RhcnRIZWlnaHQgPSBmRm9ybWF0dGVyLmxpbmVHcmFwaGljU3RhcnQobmV4dFN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzdGFydExpbmUgPSBuZXh0U3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcmludCB0aGUgZ2l2ZW4gcGFnZSBpbiB0aGUgZ2l2ZW4gZ3JhcGhpY3MuICBQYWdlIG51bWJlcnMgYXJlCisgICAgICogMC1iYXNlZC4gIFRoZSB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyCisgICAgICogdGhlIHBhZ2UgbnVtYmVyIGlzIHZhbGlkIChhcyBpbiBKREsgMS4yKS4gIFNpbmNlIHlvdSBjYW4gZ2V0IHRoZSBwYWdlIGNvdW50CisgICAgICogZGlyZWN0bHksIHRoZXJlJ3MgcmVhbGx5IG5vIGV4Y3VzZSBmb3IgcGFzc2luZyBpbiBhbiBpbnZhbGlkIHBhZ2UKKyAgICAgKiBpbmRleC4KKyAgICAgKiBAcGFyYW0gZ3JhcGhpY3MgdGhlIEdyYXBoaWNzIHRvIHByaW50IHRvCisgICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgdGhlIDAtYmFzZWQgcGFnZSBudW1iZXIuICBTaG91bGQgYmUgbm9ubmVnYXRpdmUgYW5kCisgICAgICogbGVzcyB0aGFuIGdldFBhZ2VDb3VudCgpCisgICAgICogQHJldHVybiBQQUdFX0VYSVNUUyBpZiB0aGUgcGFnZSBudW1iZXIgaXMgdmFsaWQsIG9yIAorICAgICAqICAgICAgICAgTk9fU1VDSF9QQUdFIG90aGVyd2lzZQorICAgICAqLworICAgIGludCBwcmludChHcmFwaGljcyBncmFwaGljcywgaW50IHBhZ2VOdW1iZXIpIHsKKyAgICAgICAgCisgICAgICAgIHBhZ2luYXRlKGdyYXBoaWNzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwYWdlTnVtYmVyIDwgZ2V0UGFnZUNvdW50KGdyYXBoaWNzKSAmJiBwYWdlTnVtYmVyID49IDApIHsKKyAgICAgICAgICAgIGdyYXBoaWNzLnNldENvbG9yKENvbG9yLmJsYWNrKTsgLy8gd29ya2Fyb3VuZCBmb3IgMS4yIHByaW50aW5nIGJ1ZworICAgICAgICAgICAgaW50IHN0YXJ0TGluZSA9ICgoSW50ZWdlcilmUGFnZVN0YXJ0cy5lbGVtZW50QXQocGFnZU51bWJlcikpLmludFZhbHVlKCk7CisgICAgICAgICAgICBpbnQgbGltaXRMaW5lID0gKChJbnRlZ2VyKWZQYWdlU3RhcnRzLmVsZW1lbnRBdChwYWdlTnVtYmVyKzEpKS5pbnRWYWx1ZSgpOworCisgICAgICAgICAgICBpbnQgdG9wT2ZQYWdlID0gZkZvcm1hdHRlci5saW5lR3JhcGhpY1N0YXJ0KHN0YXJ0TGluZSk7CisgICAgICAgICAgICBpbnQgcGFnZUhlaWdodCA9IGZGb3JtYXR0ZXIubGluZUdyYXBoaWNTdGFydChsaW1pdExpbmUpIC0gdG9wT2ZQYWdlOworCisgICAgICAgICAgICBQb2ludCBvcmlnaW4gPSBuZXcgUG9pbnQoZlBhZ2VSZWN0LngsIGZQYWdlUmVjdC55IC0gdG9wT2ZQYWdlKTsKKyAgICAgICAgICAgIFJlY3RhbmdsZSBkcmF3UmVjdCA9IG5ldyBSZWN0YW5nbGUoZlBhZ2VSZWN0KTsKKyAgICAgICAgICAgIGRyYXdSZWN0LmhlaWdodCA9IHBhZ2VIZWlnaHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZGb3JtYXR0ZXIuZHJhdyhncmFwaGljcywgZHJhd1JlY3QsIG9yaWdpbik7CisgICAgICAgICAgICByZXR1cm4gUEFHRV9FWElTVFM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gTk9fU1VDSF9QQUdFOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgY2FuIGJlIHByaW50ZWQuCisgICAgICogQHBhcmFtIGdyYXBoaWNzIGEgR3JhcGhpY3MgaW5zdGFuY2UgcmVwcmVzZW50YXRpdmUgb2YgdGhvc2UgCisgICAgICogd2hpY2ggd2lsbCBiZSBwcmludGVkIGludG8KKyAgICAgKi8KKyAgICBpbnQgZ2V0UGFnZUNvdW50KEdyYXBoaWNzIGdyYXBoaWNzKSB7CisgICAgICAgIAorICAgICAgICBwYWdpbmF0ZShncmFwaGljcyk7CisgICAgICAgIHJldHVybiBmUGFnZVN0YXJ0cy5zaXplKCkgLSAxOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9wcmludC9QcmludENvbnRleHQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3ByaW50L1ByaW50Q29udGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQyODM2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9wcmludC9QcmludENvbnRleHQuamF2YQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBQcmludENvbnRleHQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozNCAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnByaW50OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5hd3QuR3JhcGhpY3M7CitpbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOworCitpbXBvcnQgamF2YS5hd3QucHJpbnQuUGFnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLmF3dC5wcmludC5QcmludGFibGU7CitpbXBvcnQgamF2YS5hd3QucHJpbnQuUHJpbnRlckpvYjsKK2ltcG9ydCBqYXZhLmF3dC5wcmludC5QcmludGVyRXhjZXB0aW9uOworCitmaW5hbCBjbGFzcyBQcmludENvbnRleHQgaW1wbGVtZW50cyBQcmludGFibGUgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisKKyAgICBwcml2YXRlIE1Db25zdFRleHRQcmludGFibGUgZlByaW50YWJsZTsKKyAgICAKKyAgICBQcmludENvbnRleHQoTUNvbnN0VGV4dCB0ZXh0LCBBdHRyaWJ1dGVNYXAgZGVmYXVsdFN0eWxlcywgUGFnZUZvcm1hdCBwZikgeworICAgICAgICAKKyAgICAgICAgaW50IHdpZHRoID0gKGludCkgTWF0aC5yb3VuZChwZi5nZXRJbWFnZWFibGVXaWR0aCgpKTsKKyAgICAgICAgaW50IGhlaWdodCA9IChpbnQpIE1hdGgucm91bmQocGYuZ2V0SW1hZ2VhYmxlSGVpZ2h0KCkpOworICAgICAgICBpbnQgbGVmdCA9ICgoKGludClNYXRoLnJvdW5kKHBmLmdldFdpZHRoKCkpKSAtIHdpZHRoKSAvIDI7CisgICAgICAgIGludCB0b3AgPSAoKChpbnQpTWF0aC5yb3VuZChwZi5nZXRIZWlnaHQoKSkpIC0gaGVpZ2h0KSAvIDI7CisgICAgICAgIAorICAgICAgICBSZWN0YW5nbGUgcGFnZVJlY3QgPSBuZXcgUmVjdGFuZ2xlKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGZQcmludGFibGUgPSBuZXcgTUNvbnN0VGV4dFByaW50YWJsZSh0ZXh0LCBkZWZhdWx0U3R5bGVzLCBwYWdlUmVjdCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBpbnQgcHJpbnQoR3JhcGhpY3MgZ3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICBQYWdlRm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBwYWdlSW5kZXgpIHRocm93cyBQcmludGVyRXhjZXB0aW9uIHsKKyAgICAgICAgCisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBQcmludGVyRXhjZXB0aW9uKCJzYXZlIHRyZWVzIik7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKGZQcmludGFibGUucHJpbnQoZ3JhcGhpY3MsIHBhZ2VJbmRleCkgPT0gZlByaW50YWJsZS5QQUdFX0VYSVNUUykgeworICAgICAgICAgICAgcmV0dXJuIFBBR0VfRVhJU1RTOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIE5PX1NVQ0hfUEFHRTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1c2VyUHJpbnRUZXh0KE1Db25zdFRleHQgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBkZWZhdWx0U3R5bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgam9iVGl0bGUpIHsKKworICAgICAgICBQcmludGVySm9iIGpvYiA9IFByaW50ZXJKb2IuZ2V0UHJpbnRlckpvYigpOworICAgICAgICBqb2Iuc2V0Sm9iTmFtZShqb2JUaXRsZSk7CisgICAgICAgIGlmIChqb2IucHJpbnREaWFsb2coKSkgeworICAgICAgICAgICAgam9iLnNldFByaW50YWJsZShuZXcgUHJpbnRDb250ZXh0KHRleHQsIGRlZmF1bHRTdHlsZXMsIGpvYi5kZWZhdWx0UGFnZSgpKSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGpvYi5wcmludCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goUHJpbnRlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcmludGVyIGV4Y2VwdGlvbjogIiArIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvcHJpbnQvUHJpbnRpbmdVdGlscy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvcHJpbnQvUHJpbnRpbmdVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhMzBkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9wcmludC9QcmludGluZ1V0aWxzLmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogUHJpbnRpbmdVdGlscy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjM0ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQucHJpbnQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKKworaW1wb3J0IGphdmEuYXd0LkZyYW1lOworCisvKioKKyAqIFByaW50aW5nVXRpbHMgY29udGFpbnMgYSBzdGF0aWMgbWV0aG9kIGZvciBwcmludGluZyBzdHlsZWQgdGV4dC4KKyAqIEBzZWUgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFByaW50aW5nVXRpbHMgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIC8vIEtlZXAgaXQgb3V0IG9mIEphdmFkb2MuLi4KKyAgICBwcml2YXRlIFByaW50aW5nVXRpbHMoKSB7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFByaW50IHRoZSBnaXZlbiB0ZXh0LiAgQSBQcmludCBkaWFsb2cgaXMgcHJlc2VudGVkIHRvIHRoZSB1c2VyOworICAgICAqIHVubGVzcyB0aGUgdXNlciBjYW5jZWxzLCB0aGUgdGV4dCBpcyBwcmludGVkLgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIHByaW50CisgICAgICogQHBhcmFtIGRlZmF1bHRTdHlsZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIGF0dHJpYnV0ZXMKKyAgICAgKiBAcGFyYW0gZnJhbWUgdGhlIHBhcmVudCBvZiB0aGUgUHJpbnQgZGlhbG9nCisgICAgICogQHBhcmFtIGpvYlRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgUHJpbnRKb2IKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdXNlclByaW50VGV4dChNQ29uc3RUZXh0IHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIGRlZmF1bHRTdHlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGpvYlRpdGxlKSB7CisKKyAgICAgICAgUHJpbnRDb250ZXh0LnVzZXJQcmludFRleHQodGV4dCwgZGVmYXVsdFN0eWxlcywgZnJhbWUsIGpvYlRpdGxlKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvcHJpbnQvcGFja2FnZS5odG1sIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvcHJpbnQvcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzODZiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9wcmludC9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSw1IEBACis8aHRtbD4KKzxib2R5IGJnY29sb3I9IndoaXRlIj4KK1Byb3ZpZGVzIHByaW50aW5nIGZvciBzdHlsZWQgdGV4dC4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvQ2hhckJ1ZmZlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9DaGFyQnVmZmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzEwOGY3YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvQ2hhckJ1ZmZlci5qYXZhCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBDaGFyQnVmZmVyLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDU6MTAgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8qKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBNQ2hhckJ1ZmZlciB0aGF0IHN0b3JlcyBjaGFycyBpbiBhbiBhcnJheSB3aXRoIGFuIGluc2VydGlvbiBnYXAuICovCisvKgorICAgIENoYW5nZSBoaXN0b3J5CisgICAgMDcyMzk2IGpmICAgLSBmaXhlZCBhIGJ1ZyBpbiByZXBsYWNlKGludCwgaW50LCBjaGFyW10sIGludCwgaW50KSBzbyB0aGF0IGl0IGNvcnJlY3RseQorICAgICAgICAgICAgICAgIGluc2VydGVkIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVyLgorICAgIDA4MDI5NiBqZiAgIC0gYWRkZWQgdGltZXN0YW1wLiAgVGhpcyBpcyBzdHJpY3RseSBhIGRlYnVnZ2luZyBkZXZpY2UgdG8gaGVscCBjYXRjaAorICAgICAgICAgICAgICAgIHN0YWxlIGl0ZXJhdG9ycy4KKworICAgIDA4MjI5NiBqYnIgIGFkZGVkIGNoZWNrIGZvciAwLWxlbmd0aCBpdGVyYXRvciBpbiByZXBsYWNlCisqLworCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dDsKKworaW1wb3J0IGphdmEuaW8uRXh0ZXJuYWxpemFibGU7CitpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dDsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dDsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworCitmaW5hbCBjbGFzcyBDaGFyQnVmZmVyCisgICAgZXh0ZW5kcyBNQ2hhckJ1ZmZlciBpbXBsZW1lbnRzIEV4dGVybmFsaXphYmxlCit7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQga0dyb3dTaXplID0gMHg4MDsgLy8gc21hbGwgc2l6ZSBmb3IgdGVzdGluZworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ1VSUkVOVF9WRVJTSU9OID0gMTsgLy8gdmVyc2lvbiBjb2RlIGZvciBzdHJlYW1pbmcKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNTYzMTc0OworCisgIHRyYW5zaWVudCBWYWxpZGF0aW9uIGZWYWxpZGF0aW9uID0gbnVsbDsKKyAgcHJpdmF0ZSBjaGFyW10gZkFycmF5OworICB0cmFuc2llbnQgcHJpdmF0ZSBpbnQgZkFycmF5U2l6ZTsKKyAgdHJhbnNpZW50IHByaXZhdGUgaW50IGZHYXA7CisKKyAgLyoqIENyZWF0ZSBhbiBlbXB0eSBjaGFyIGJ1ZmZlci4gKi8KKyAgcHVibGljIENoYXJCdWZmZXIoKQorICB7CisgIH0KKworICAvKiogQ3JlYXRlIGEgY2hhciBidWZmZXIgdGhhdCBjYW4gaG9sZCBhdCBsZWFzdCBjYXBhY2l0eSBjaGFycy4gKi8KKworICBwdWJsaWMgQ2hhckJ1ZmZlcihpbnQgY2FwYWNpdHkpCisgIHsKKyAgICBmQXJyYXkgPSBhbGxvY2F0ZShjYXBhY2l0eSk7CisgIH0KKworICBwdWJsaWMgdm9pZCByZWFkRXh0ZXJuYWwoT2JqZWN0SW5wdXQgaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisKKyAgICBpZiAoaW4ucmVhZEludCgpICE9IENVUlJFTlRfVkVSU0lPTikgeworICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkludmFsaWQgdmVyc2lvbiBvZiBDaGFyQnVmZmVyIik7CisgICAgfQorCisgICAgZkFycmF5ID0gKGNoYXJbXSkgaW4ucmVhZE9iamVjdCgpOworICAgIGlmIChmQXJyYXkgIT0gbnVsbCkgeworICAgICAgICBmQXJyYXlTaXplID0gZkFycmF5Lmxlbmd0aDsKKyAgICAgICAgZkdhcCA9IGZBcnJheVNpemU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmQXJyYXlTaXplID0gMDsKKyAgICAgICAgZkdhcCA9IDA7CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChPYmplY3RPdXRwdXQgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgY29tcHJlc3MoKTsKKyAgICBvdXQud3JpdGVJbnQoQ1VSUkVOVF9WRVJTSU9OKTsKKyAgICBvdXQud3JpdGVPYmplY3QoZkFycmF5KTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlKCkgeworCisgICAgaWYgKGZWYWxpZGF0aW9uICE9IG51bGwpIHsKKyAgICAgICAgZlZhbGlkYXRpb24uaW52YWxpZGF0ZSgpOworICAgICAgICBmVmFsaWRhdGlvbiA9IG51bGw7CisgICAgfQorICB9CisKKyAgLy8gbm90IFRocmVhZFNhZmUgLSBjb3VsZCBlbmQgdXAgd2l0aCB0d28gVmFsaWRhdGlvbnMKKyAgLy8gYmVpbmcgZ2VuZXJhdGVkCisgIHByaXZhdGUgVmFsaWRhdGlvbiBnZXRWYWxpZGF0aW9uKCkgeworCisgICAgaWYgKGZWYWxpZGF0aW9uID09IG51bGwpIHsKKyAgICAgICAgZlZhbGlkYXRpb24gPSBuZXcgVmFsaWRhdGlvbigpOworICAgIH0KKyAgICByZXR1cm4gZlZhbGlkYXRpb247CisgIH0KKworICAvKiogUmVwbGFjZSB0aGUgY2hhcnMgZnJvbSBzdGFydCB0byBsaW1pdCB3aXRoIHRoZSBjaGFycyBmcm9tIHNyY1N0YXJ0IHRvIHNyY0xpbWl0IGluIHNyY0J1ZmZlci4gKi8KKworICAvKiogUmVwbGFjZSB0aGUgY2hhcnMgZnJvbSBzdGFydCB0byBsaW1pdCB3aXRoIHRoZSBjaGFycyBmcm9tIHNyY1N0YXJ0IHRvIHNyY0xpbWl0IGluIHNyY0NoYXJzLgorICAqIFRoaXMgaXMgdGhlIGNvcmUgcm91dGluZSBmb3IgbWFuaXB1bGF0aW5nIHRoZSBidWZmZXIuCisgICovCisgIHB1YmxpYyB2b2lkIHJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGNoYXJbXSBzcmNDaGFycywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQpCisgIHsKKyAgICBpbnZhbGlkYXRlKCk7CisgICAgaW50IGRzdExlbmd0aCA9IGxpbWl0IC0gc3RhcnQ7CisgICAgaW50IHNyY0xlbmd0aCA9IHNyY0xpbWl0IC0gc3JjU3RhcnQ7CisKKyAgICBpZiAoZHN0TGVuZ3RoIDwgMCB8fCBzcmNMZW5ndGggPCAwKSB7CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGNoYXJbXSBzcmNDaGFycywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQpIik7CisgICAgfQorCisgICAgaW50IGdhcEFsbG9jID0gMDsKKyAgICBpZiAoc3JjQ2hhcnMgPT0gbnVsbCkgeworICAgICAgICBnYXBBbGxvYyA9IHNyY0xlbmd0aDsKKyAgICAgICAgc3JjTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBpbnQgbmV3U2l6ZSA9IGZBcnJheVNpemUgLSBkc3RMZW5ndGggKyBzcmNMZW5ndGg7CisKKyAgICBpZiAoZkFycmF5ID09IG51bGwpIHsKKyAgICAgICAgaWYgKHN0YXJ0ICE9IDAgfHwgbGltaXQgIT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgY2hhcltdIHNyY0NoYXJzLCBpbnQgc3JjU3RhcnQsIGludCBzcmNMaW1pdCkiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3U2l6ZSArIGdhcEFsbG9jID4gMCkgeworICAgICAgICAgICAgZkFycmF5ID0gYWxsb2NhdGUobmV3U2l6ZSArIGdhcEFsbG9jKTsKKyAgICAgICAgICAgIGlmIChzcmNMZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShzcmNDaGFycywgc3JjU3RhcnQsIGZBcnJheSwgMCwgc3JjTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBmQXJyYXlTaXplID0gc3JjTGVuZ3RoOworICAgICAgICAgICAgICAgIGZHYXAgPSBzcmNMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgbmV3R2FwID0gc3RhcnQgKyBzcmNMZW5ndGg7CisgICAgICAgIGludCBnYXBMaW1pdCA9IGZBcnJheS5sZW5ndGggLSBmQXJyYXlTaXplICsgZkdhcDsKKworICAgICAgICBpZiAobmV3U2l6ZSArIGdhcEFsbG9jID4gZkFycmF5Lmxlbmd0aCkgeworICAgICAgICAgICAgY2hhcltdIHRlbXAgPSBhbGxvY2F0ZShuZXdTaXplICsgZ2FwQWxsb2MpOworCisgICAgICAgICAgICAvL21vdmUgc3R1ZmYgYXQgYmVnaW5uaW5nIHRoYXQgd2UgYXJlbid0IHdyaXRpbmcgb3ZlcgorICAgICAgICAgICAgaWYgKHN0YXJ0ID4gMCkgeworICAgICAgICAgICAgICAgIGF0KDAsIHN0YXJ0LCB0ZW1wLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vbW92ZSBzdHVmZiBmcm9tIHNyYyBhcnJheSB0aGF0IHdlIGFyZSBjb3B5aW5nCisgICAgICAgICAgICBpZiAoc3JjTGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3JjQ2hhcnMsIHNyY1N0YXJ0LCB0ZW1wLCBzdGFydCwgc3JjTGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vbW92ZSBzdHVmZiBhdCBlbmQgdGhhdCB3ZSBhcmVuJ3QgY29weWluZyBvdmVyCisgICAgICAgICAgICBpZiAobGltaXQgPCBmQXJyYXlTaXplKSB7CisgICAgICAgICAgICAgICAgYXQobGltaXQsIGZBcnJheVNpemUsIHRlbXAsIHRlbXAubGVuZ3RoIC0gbmV3U2l6ZSArIG5ld0dhcCk7CisgICAgICAgICAgICAvL2NoYW5nZSA3LTIzLTk2CisgICAgICAgICAgICAvLyAgICBhdChsaW1pdCwgZkFycmF5U2l6ZSAtIGxpbWl0LCB0ZW1wLCB0ZW1wLmxlbmd0aCAtIG5ld1NpemUgKyBuZXdHYXApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmQXJyYXkgPSB0ZW1wOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHN0YXJ0ID4gZkdhcCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZkFycmF5LCBnYXBMaW1pdCwgZkFycmF5LCBmR2FwLCBzdGFydCAtIGZHYXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxpbWl0IDwgZkdhcCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZkFycmF5LCBsaW1pdCwgZkFycmF5LCBmQXJyYXkubGVuZ3RoIC0gbmV3U2l6ZSArIG5ld0dhcCwgZkdhcCAtIGxpbWl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNMZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShzcmNDaGFycywgc3JjU3RhcnQsIGZBcnJheSwgc3RhcnQsIHNyY0xlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmQXJyYXlTaXplID0gbmV3U2l6ZTsKKyAgICAgICAgZkdhcCA9IG5ld0dhcDsKKyAgICB9CisgIH0KKworICAvKiogUmVwbGFjZSB0aGUgY2hhcnMgZnJvbSBzdGFydCB0byBsaW1pdCB3aXRoIHRoZSBjaGFycyBmcm9tIHNyY1N0YXJ0IHRvIHNyY0xpbWl0IGluIHNyY1N0cmluZy4gKi8KKworICAvKiBUaGlzIGltcGxlbWVudHMgb3B0aW1pemF0aW9ucyBmb3IgbnVsbCB0ZXh0IG9yIGluc2VydGluZyB0ZXh0IHRoYXQgZml0cyBhdCB0aGUgZ2FwLAorICAgICBhbmQgZGVmYXVsdHMgdG8gY2FsbCB0aGUgY29yZSByZXBsYWNlIHJvdXRpbmUgaWYgdGhlc2Ugb3B0aW1pemF0aW9ucyBmYWlsLiAqLworCisgIHB1YmxpYyB2b2lkIHJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIFN0cmluZyBzcmNTdHJpbmcsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0KQorICB7CisgICAgaW52YWxpZGF0ZSgpOworICAgIGludCBsZW5ndGggPSBsaW1pdCAtIHN0YXJ0OworICAgIGludCBzcmNMZW5ndGggPSBzcmNMaW1pdCAtIHNyY1N0YXJ0OworCisgICAgaWYgKGZBcnJheSA9PSBudWxsKSB7CisgICAgICAgIGlmIChzdGFydCAhPSAwIHx8IGxpbWl0ICE9IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIFN0cmluZyBzcmNTdHJpbmcsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0KSIpOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNMZW5ndGggPiAwKSB7CisgICAgICAgICAgICBmQXJyYXkgPSBhbGxvY2F0ZShzcmNMZW5ndGgpOworICAgICAgICAgICAgc3JjU3RyaW5nLmdldENoYXJzKHNyY1N0YXJ0LCBzcmNMaW1pdCwgZkFycmF5LCAwKTsKKyAgICAgICAgICAgIGZBcnJheVNpemUgPSBzcmNMZW5ndGg7CisgICAgICAgICAgICBmR2FwID0gc3JjTGVuZ3RoOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXJ0ID09IGZHYXAgJiYgZkFycmF5Lmxlbmd0aCA+PSBmQXJyYXlTaXplIC0gbGVuZ3RoICsgc3JjTGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoc3JjTGltaXQgPiAwKSB7CisgICAgICAgICAgICAgICAgc3JjU3RyaW5nLmdldENoYXJzKHNyY1N0YXJ0LCBzcmNMaW1pdCwgZkFycmF5LCBmR2FwKTsKKyAgICAgICAgICAgICAgICBmR2FwICs9IHNyY0xlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZBcnJheVNpemUgKz0gc3JjTGVuZ3RoIC0gbGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVwbGFjZShzdGFydCwgbGltaXQsIHNyY1N0cmluZyAhPSBudWxsID8gc3JjU3RyaW5nLnRvQ2hhckFycmF5KCkgOiBudWxsLCBzcmNTdGFydCwgc3JjTGltaXQpOworICAgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgTUNvbnN0VGV4dCBzcmNUZXh0LCBpbnQgc3JjU3RhcnQsIGludCBzcmNMaW1pdCkKKyAgeworICAgIGludmFsaWRhdGUoKTsKKyAgICBpbnQgbGVuZ3RoID0gbGltaXQgLSBzdGFydDsKKyAgICBpbnQgc3JjTGVuZ3RoID0gc3JjTGltaXQgLSBzcmNTdGFydDsKKworICAgIGlmIChmQXJyYXkgPT0gbnVsbCkgeworICAgICAgICBpZiAoc3RhcnQgIT0gMCB8fCBsaW1pdCAhPSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBTdHJpbmcgc3JjU3RyaW5nLCBpbnQgc3JjU3RhcnQsIGludCBzcmNMaW1pdCkiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjTGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZkFycmF5ID0gYWxsb2NhdGUoc3JjTGVuZ3RoKTsKKyAgICAgICAgICAgIHNyY1RleHQuZXh0cmFjdENoYXJzKHNyY1N0YXJ0LCBzcmNMaW1pdCwgZkFycmF5LCAwKTsKKyAgICAgICAgICAgIGZBcnJheVNpemUgPSBzcmNMZW5ndGg7CisgICAgICAgICAgICBmR2FwID0gc3JjTGVuZ3RoOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXJ0ID09IGZHYXAgJiYgZkFycmF5Lmxlbmd0aCA+PSBmQXJyYXlTaXplIC0gbGVuZ3RoICsgc3JjTGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoc3JjTGltaXQgPiAwKSB7CisgICAgICAgICAgICAgICAgc3JjVGV4dC5leHRyYWN0Q2hhcnMoc3JjU3RhcnQsIHNyY0xpbWl0LCBmQXJyYXksIGZHYXApOworICAgICAgICAgICAgICAgIGZHYXAgKz0gc3JjTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZkFycmF5U2l6ZSArPSBzcmNMZW5ndGggLSBsZW5ndGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFyW10gdGVtcCA9IHNyY0xlbmd0aCA9PSAwPyBudWxsIDogbmV3IGNoYXJbc3JjTGVuZ3RoXTsKKyAgICAgICAgICAgIGlmICh0ZW1wICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzcmNUZXh0LmV4dHJhY3RDaGFycyhzcmNTdGFydCwgc3JjTGltaXQsIHRlbXAsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVwbGFjZShzdGFydCwgbGltaXQsIHRlbXAsIDAsIHNyY0xpbWl0IC0gc3JjU3RhcnQpOworICAgICAgICB9CisgICAgfQorICB9CisKKyAgLyoqIFJlcGxhY2UgdGhlIGNoYXJzIGZyb20gc3RhcnQgdG8gbGltaXQgd2l0aCBzcmNDaGFyLiAqLworCisgIC8qIFRoaXMgaW1wbGVtZW50cyBvcHRpbWl6YXRpb25zIGZvciBudWxsIHRleHQgb3IgcmVwbGFjaW5nIGEgY2hhcmFjdGVyIHRoYXQgZml0cyBpbnRvIHRoZSBnYXAsCisgICAgIGFuZCBkZWZhdWx0cyB0byBjYWxsIHRoZSBjb3JlIHJlcGxhY2Ugcm91dGluZSBpZiB0aGVzZSBvcHRpbWl6YXRpb25zIGZhaWwuICovCisKKyAgcHVibGljIHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgY2hhciBzcmNDaGFyKQorICB7CisgICAgaW52YWxpZGF0ZSgpOworICAgIGlmIChmQXJyYXkgPT0gbnVsbCkgeworICAgICAgICBpZiAoc3RhcnQgIT0gMCB8fCBsaW1pdCAhPSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBjaGFyIHNyY0NoYXIpIik7CisgICAgICAgIH0KKyAgICAgICAgZkFycmF5ID0gYWxsb2NhdGUoMSk7CisgICAgICAgIGZBcnJheVswXSA9IHNyY0NoYXI7CisgICAgICAgIGZBcnJheVNpemUgPSAxOworICAgICAgICBmR2FwID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgbGVuZ3RoID0gbGltaXQgLSBzdGFydDsKKyAgICAgICAgaWYgKHN0YXJ0ID09IGZHYXAgJiYgZkFycmF5Lmxlbmd0aCA+IGZBcnJheVNpemUgLSBsZW5ndGgpIHsKKyAgICAgICAgICAgIGZBcnJheVtmR2FwXSA9IHNyY0NoYXI7CisgICAgICAgICAgICBmR2FwICs9IDE7CisgICAgICAgICAgICBmQXJyYXlTaXplICs9IDEgLSBsZW5ndGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXBsYWNlKHN0YXJ0LCBsaW1pdCwgbmV3IGNoYXJbXSB7IHNyY0NoYXJ9ICwgMCwgMSk7CisgICAgICAgIH0KKyAgICB9CisgIH0KKworICAvKiogUmV0dXJuIHRoZSBjaGFyIGF0IHBvcy4gKi8KKworICBwdWJsaWMgY2hhciBhdChpbnQgcG9zKQorICB7CisgICAgaWYgKHBvcyA8IDAgfHwgcG9zID49IGZBcnJheVNpemUpIHsKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIHBvcyA8IGZHYXAgPyBmQXJyYXlbcG9zXSA6IGZBcnJheVtmQXJyYXkubGVuZ3RoIC0gZkFycmF5U2l6ZSArIHBvc107CisgIH0KKworICAvKiogQ29weSB0aGUgY2hhcnMgZnJvbSBzdGFydCB0byBsaW1pdCB0byBkc3Qgc3RhcnRpbmcgYXQgZHN0U3RhcnQuICovCisKKyAgcHVibGljIHZvaWQgYXQoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGNoYXJbXSBkc3QsIGludCBkc3RTdGFydCkKKyAgeworICAgIGludCBsZW5ndGggPSBsaW1pdCAtIHN0YXJ0OworCisgICAgaWYgKHN0YXJ0IDwgMCB8fCBsaW1pdCA8IHN0YXJ0IHx8IGxpbWl0ID4gZkFycmF5U2l6ZSkgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgaWYgKGxpbWl0IDw9IGZHYXApIHsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShmQXJyYXksIHN0YXJ0LCBkc3QsIGRzdFN0YXJ0LCBsZW5ndGgpOworICAgIH0gZWxzZSBpZiAoc3RhcnQgPj0gZkdhcCkgeworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZBcnJheSwgZkFycmF5Lmxlbmd0aCAtIGZBcnJheVNpemUgKyBzdGFydCwgZHN0LCBkc3RTdGFydCwgbGVuZ3RoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZBcnJheSwgc3RhcnQsIGRzdCwgZHN0U3RhcnQsIGZHYXAgLSBzdGFydCk7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZkFycmF5LCBmQXJyYXkubGVuZ3RoIC0gZkFycmF5U2l6ZSArIGZHYXAsIGRzdCwgZHN0U3RhcnQgKyBmR2FwIC0gc3RhcnQsIGxpbWl0IC0gZkdhcCk7CisgICAgfQorICB9CisKKyAgLyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJzIGluIHRoZSBidWZmZXIuICovCisKKyAgcHVibGljIGZpbmFsIGludCBsZW5ndGgoKQorICB7CisgICAgcmV0dXJuIGZBcnJheVNpemU7CisgIH0KKworICAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcnMgdGhlIGJ1ZmZlciBjYW4gaG9sZCBiZWZvcmUgaXQgbXVzdCByZWFsbG9jYXRlLiAqLworCisgIHB1YmxpYyBmaW5hbCBpbnQgY2FwYWNpdHkoKQorICB7CisgICAgcmV0dXJuIGZBcnJheSAhPSBudWxsID8gZkFycmF5Lmxlbmd0aCA6IDA7CisgIH0KKworICAvKiogUmVzZXJ2ZSBjYXBhY2l0eSBjaGFycyBhdCBzdGFydC4gVXRpbGl0eSB0byBvcHRpbWl6ZSBhIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgYXQgc3RhcnQuICovCisKKyAgcHVibGljIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KGludCBzdGFydCwgaW50IGNhcGFjaXR5KQorICB7CisgICAgcmVwbGFjZShzdGFydCwgc3RhcnQsIChjaGFyW10pbnVsbCwgMCwgY2FwYWNpdHkpOworICB9CisKKyAgLyoqIE1pbmltaXplIHRoZSBzdG9yYWdlIHVzZWQgYnkgdGhlIGJ1ZmZlci4gKi8KKworICBwdWJsaWMgdm9pZCBjb21wcmVzcygpCisgIHsKKyAgICBpbnZhbGlkYXRlKCk7CisgICAgaWYgKGZBcnJheVNpemUgPT0gMCkgeworICAgICAgICBmQXJyYXkgPSBudWxsOworICAgICAgICBmR2FwID0gMDsKKyAgICB9IGVsc2UgaWYgKGZBcnJheVNpemUgIT0gZkFycmF5Lmxlbmd0aCkgeworICAgICAgICBjaGFyW10gdGVtcCA9IG5ldyBjaGFyW2ZBcnJheVNpemVdOworICAgICAgICBhdCgwLCBmQXJyYXlTaXplLCB0ZW1wLCAwKTsKKyAgICAgICAgZkFycmF5ID0gdGVtcDsKKyAgICAgICAgZkdhcCA9IGZBcnJheVNpemU7CisgICAgfQorICB9CisKKyAgLyoqIERpc3BsYXkgdGhlIGJ1ZmZlci4gKi8KKworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKKyAgeworICAgIGlmIChmQXJyYXkgIT0gbnVsbCkgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0J1ZmZlcigpCisgICAgICAgIC5hcHBlbmQoImxpbWl0OiAiKS5hcHBlbmQoZkFycmF5Lmxlbmd0aCkKKyAgICAgICAgLmFwcGVuZCgiLCBzaXplOiAiKS5hcHBlbmQoZkFycmF5U2l6ZSkKKyAgICAgICAgLmFwcGVuZCgiLCBnYXA6ICIpLmFwcGVuZChmR2FwKQorICAgICAgICAuYXBwZW5kKCIsICIpLmFwcGVuZChmQXJyYXksIDAsIGZHYXApCisgICAgICAgIC5hcHBlbmQoZkFycmF5LCBmQXJyYXkubGVuZ3RoIC0gZkFycmF5U2l6ZSArIGZHYXAsIGZBcnJheVNpemUgLSBmR2FwKQorICAgICAgICAudG9TdHJpbmcoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZygiVGhlIGJ1ZmZlciBpcyBlbXB0eS4iKTsKKyAgICB9CisgIH0KKworICBwdWJsaWMgQ2hhcmFjdGVySXRlcmF0b3IgY3JlYXRlQ2hhcmFjdGVySXRlcmF0b3IoaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKKworICAgIFZhbGlkYXRpb24gdmFsID0gZ2V0VmFsaWRhdGlvbigpOworICAgIHJldHVybiBuZXcgQ2hhckJ1ZmZlckl0ZXJhdG9yKHN0YXJ0LCBsaW1pdCwgZkFycmF5LCBmQXJyYXlTaXplLCBmR2FwLCB2YWwpOworICB9CisKKyAgLyoqIFRoZSByZXNpemluZyBhbGdvcml0aG0uIFJldHVybiBhIHZhbHVlID49IG1pblNpemUuICovCisKKyAgcHJvdGVjdGVkIGludCBhbGxvY2F0aW9uKGludCBtaW5TaXplKQorICB7CisgICAgLy8gICAgcmV0dXJuIChtaW5TaXplICsga0dyb3dTaXplKSAmIH4oa0dyb3dTaXplIC0gMSk7CisgICAgcmV0dXJuIG1pblNpemUgPCBrR3Jvd1NpemUgPyBrR3Jvd1NpemUgOiAobWluU2l6ZSAqIDIgKyBrR3Jvd1NpemUpICYgfihrR3Jvd1NpemUgLSAxKTsKKyAgfQorCisgIC8qKiBBbGxvY2F0ZSBhIG5ldyBjaGFyYWN0ZXIgYXJyYXkgb2YgbGltaXQgPj0gbWluU2l6ZS4gKi8KKworICBwcm90ZWN0ZWQgY2hhcltdIGFsbG9jYXRlKGludCBtaW5TaXplKQorICB7CisgICAgcmV0dXJuIG5ldyBjaGFyW2FsbG9jYXRpb24obWluU2l6ZSldOworICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L0NoYXJCdWZmZXJJdGVyYXRvci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9DaGFyQnVmZmVySXRlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YTBhYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9DaGFyQnVmZmVySXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQ2hhckJ1ZmZlckl0ZXJhdG9yLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDU6MTAgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0OworCitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworCitmaW5hbCBjbGFzcyBDaGFyQnVmZmVySXRlcmF0b3IgaW1wbGVtZW50cyBDaGFyYWN0ZXJJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsb25lYWJsZQoreworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBpbnQgZlJhbmdlU3RhcnQ7CisgICAgcHJpdmF0ZSBpbnQgZlJhbmdlTGltaXQ7CisgICAgcHJpdmF0ZSBpbnQgZkN1cnJlbnRJbmRleDsKKyAgICBwcml2YXRlIGNoYXIgZlN0b3JhZ2VbXTsKKyAgICBwcml2YXRlIGludCBmR2FwOworICAgIHByaXZhdGUgaW50IGZHYXBMZW5ndGg7CisgICAgcHJpdmF0ZSBWYWxpZGF0aW9uIGZWYWxpZGF0aW9uOworCisgICAgQ2hhckJ1ZmZlckl0ZXJhdG9yKGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGdhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbiB2YWxpZGF0aW9uKSB7CisKKyAgICAgICAgaWYgKHN0YXJ0ID4gbGltaXQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0YXJ0ID4gbGltaXQiKTsKKyAgICAgICAgfQorICAgICAgICBmUmFuZ2VTdGFydCA9IHN0YXJ0OworICAgICAgICBmUmFuZ2VMaW1pdCA9IGxpbWl0OworICAgICAgICBmQ3VycmVudEluZGV4ID0gZlJhbmdlU3RhcnQ7CisgICAgICAgIGZTdG9yYWdlID0gc3RvcmFnZTsKKyAgICAgICAgZkdhcCA9IGdhcDsKKyAgICAgICAgZkdhcExlbmd0aCA9IChzdG9yYWdlPT1udWxsPyAwIDogc3RvcmFnZS5sZW5ndGgpIC0gbGVuZ3RoOworICAgICAgICBmVmFsaWRhdGlvbiA9IHZhbGlkYXRpb247CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRhdGlvbigpIHsKKworICAgICAgICBpZiAoIWZWYWxpZGF0aW9uLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJdGVyYXRvciBpcyBubyBsb25nZXIgdmFsaWQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBjaGFyIGZpcnN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBzZXRJbmRleChmUmFuZ2VTdGFydCk7CisgICAgfQorCisgICAgcHVibGljIGNoYXIgbGFzdCgpCisgICAgeworICAgICAgICByZXR1cm4gc2V0SW5kZXgoZlJhbmdlTGltaXQgLSAxKTsKKyAgICB9CisKKyAgICBwdWJsaWMgY2hhciBjdXJyZW50KCkKKyAgICB7CisgICAgICAgIGNoZWNrVmFsaWRhdGlvbigpOworICAgICAgICBpZiAoZkN1cnJlbnRJbmRleCA8IGZSYW5nZVN0YXJ0IHx8IGZDdXJyZW50SW5kZXggPj0gZlJhbmdlTGltaXQpCisgICAgICAgICAgICByZXR1cm4gRE9ORTsKKyAgICAgICAgaW50IGkgPSAoZkN1cnJlbnRJbmRleCA8IGZHYXApID8gZkN1cnJlbnRJbmRleCA6IChmQ3VycmVudEluZGV4ICsgZkdhcExlbmd0aCk7CisgICAgICAgIHJldHVybiBmU3RvcmFnZVtpXTsKKyAgICB9CisKKyAgICBwdWJsaWMgY2hhciBuZXh0KCkKKyAgICB7CisgICAgICAgIGNoZWNrVmFsaWRhdGlvbigpOworICAgICAgICBmQ3VycmVudEluZGV4Kys7CisgICAgICAgIGlmIChmQ3VycmVudEluZGV4ID49IGZSYW5nZUxpbWl0KQorICAgICAgICB7CisgICAgICAgICAgICBmQ3VycmVudEluZGV4ID0gZlJhbmdlTGltaXQ7CisgICAgICAgICAgICByZXR1cm4gRE9ORTsKKyAgICAgICAgfQorICAgICAgICBpbnQgaSA9IChmQ3VycmVudEluZGV4IDwgZkdhcCkgPyBmQ3VycmVudEluZGV4IDogKGZDdXJyZW50SW5kZXggKyBmR2FwTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGZTdG9yYWdlW2ldOworICAgIH0KKworICAgIHB1YmxpYyBjaGFyIHByZXZpb3VzKCkKKyAgICB7CisgICAgICAgIGZDdXJyZW50SW5kZXgtLTsKKyAgICAgICAgaWYgKGZDdXJyZW50SW5kZXggPj0gZlJhbmdlU3RhcnQpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgICAgICBmQ3VycmVudEluZGV4ID0gZlJhbmdlU3RhcnQ7CisgICAgICAgIHJldHVybiBET05FOworICAgIH0KKworICAgIHB1YmxpYyBjaGFyIHNldEluZGV4KGludCBpKQorICAgIHsKKyAgICAgICAgaWYgKGkgPCBmUmFuZ2VTdGFydCB8fCBpID4gZlJhbmdlTGltaXQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHBvc2l0aW9uIik7CisgICAgICAgIGZDdXJyZW50SW5kZXggPSBpOworICAgICAgICByZXR1cm4gY3VycmVudCgpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QmVnaW5JbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gZlJhbmdlU3RhcnQ7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRFbmRJbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gZlJhbmdlTGltaXQ7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRJbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gZkN1cnJlbnRJbmRleDsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L0Zhc3RJbnRCaW5hcnlTZWFyY2guamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvRmFzdEludEJpbmFyeVNlYXJjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0ZWIwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L0Zhc3RJbnRCaW5hcnlTZWFyY2guamF2YQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyogICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKi8KKworLyoKKyAgICA3LzI5Lzk2CisgICAgICAgIE1vZGlmaWVkIHRvIHNlYXJjaCBwb3J0aW9ucyBvZiBhbiBpbnRlZ2VyIGFycmF5LiAgU2hvdWxkIGJlIHJldGVzdGVkLgorKi8KKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBzZWFyY2hlcyBhIHNlZ21lbnQgb2YgYW4gYXJyYXkgb2YgaW50ZWdlcnMuICBUaGUgc2VnbWVudAorICogbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIChidXQgdGhpcyBjbGFzcyBkb2VzIG5vdCB2ZXJpZnkgdGhpcykuCisgKiBBbHNvLCB0aGlzIGNsYXNzIGFsaWFzZXMgdGhlIGFycmF5OyAgaWYgdGhlIGFycmF5IGlzIG1vZGlmaWVkIGxhdGVyIHRoZQorICogc2VhcmNoIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4KKyAqLworZmluYWwgY2xhc3MgRmFzdEludEJpbmFyeVNlYXJjaAoreworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBpbnQgZGF0YUFycmF5W107CisgICAgcHJpdmF0ZSBpbnQgYXV4U3RhcnQ7CisgICAgcHJpdmF0ZSBpbnQgcG93ZXI7CisKKyAgICBwcml2YXRlIGludCBmRmlyc3RJbmRleDsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBleHAyW10gPSB7IDEsIDIsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIsIDE2Mzg0LCAzMjc2OCwgNjU1MzYsIDEzMTA3MiB9OworCisgICAgcHVibGljIEZhc3RJbnRCaW5hcnlTZWFyY2goaW50IGRhdGFbXSkKKyAgICB7CisgICAgICAgIHRoaXMoZGF0YSwgMCwgZGF0YS5sZW5ndGgpOworICAgIH0KKworICAgIHB1YmxpYyBGYXN0SW50QmluYXJ5U2VhcmNoKGludCBkYXRhW10sIGludCBmaXJzdFZhbGlkSW5kZXgsIGludCB2YWxpZExlbmd0aCkKKyAgICB7CisgICAgICAgIHNldERhdGEoZGF0YSwgZmlyc3RWYWxpZEluZGV4LCB2YWxpZExlbmd0aCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldERhdGEoaW50IGRhdGFbXSkgeworICAgICAgICAKKyAgICAgICAgc2V0RGF0YShkYXRhLCAwLCBkYXRhLmxlbmd0aCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldERhdGEoaW50IGRhdGFbXSwgaW50IGZpcnN0VmFsaWRJbmRleCwgaW50IHZhbGlkTGVuZ3RoKSB7CisKKyAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgMSkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgICAgICBpZiAoZGF0YS5sZW5ndGggPj0gZXhwMltleHAyLmxlbmd0aC0xXSkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworCisgICAgICAgIGRhdGFBcnJheSA9IGRhdGE7CisgICAgICAgIGZGaXJzdEluZGV4ID0gZmlyc3RWYWxpZEluZGV4OworCisgICAgICAgIGZvciAocG93ZXIgPSBleHAyLmxlbmd0aC0xOyBwb3dlciA+IDAgJiYgdmFsaWRMZW5ndGggPCBleHAyW3Bvd2VyXTsgcG93ZXItLSkge30KKworICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBhcnJheS5sZW5ndGggPj0gMl5wb3dlcgorCisgICAgICAgIGF1eFN0YXJ0ID0gdmFsaWRMZW5ndGggLSBleHAyW3Bvd2VyXTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBpbmRleCBpbiB0aGUgYXJyYXkgb2YgdGhlIGZpcnN0IGVsZW1lbnQgd2hpY2ggaXMgYXQgbGVhc3QKKyAgICAgKiBhcyBsYXJnZSBhcyA8dHQ+dmFsdWU8L3R0Pi4gIElmIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBsYXJnZXN0CisgICAgICogZWxlbWVudCBpbiB0aGUgYXJyYXkgdGhlIGxhc3QgdmFsaWQgaW5kZXggaW4gdGhlIGFycmF5IGlzIHJldHVybmVkLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZmluZEluZGV4KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9IGV4cDJbcG93ZXJdLTEgKyBmRmlyc3RJbmRleDsKKyAgICAgICAgaWYgKHZhbHVlID49IGRhdGFBcnJheVthdXhTdGFydCArIGZGaXJzdEluZGV4XSkgeworICAgICAgICAgICAgaW5kZXggKz0gYXV4U3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBpbmRleCBpcyB0aGUgInVwcGVyIGxpbWl0IiBvZiB0aGUgc2VhcmNoCisKKyAgICAgICAgc3dpdGNoIChwb3dlcikgeworICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTY1NTM2XSkgaW5kZXggLT0gNjU1MzY7CisgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICBpZiAodmFsdWUgPCBkYXRhQXJyYXlbaW5kZXgtMzI3NjhdKSBpbmRleCAtPSAzMjc2ODsKKyAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IGRhdGFBcnJheVtpbmRleC0xNjM4NF0pIGluZGV4IC09IDE2Mzg0OworICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTgxOTJdKSBpbmRleCAtPSA4MTkyOworICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTQwOTZdKSBpbmRleCAtPSA0MDk2OworICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTIwNDhdKSBpbmRleCAtPSAyMDQ4OworICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTEwMjRdKSBpbmRleCAtPSAxMDI0OworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTUxMl0pIGluZGV4IC09IDUxMjsKKyAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTI1Nl0pIGluZGV4IC09IDI1NjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTEyOF0pIGluZGV4IC09IDEyODsKKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTY0XSkgaW5kZXggLT0gNjQ7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IGRhdGFBcnJheVtpbmRleC0zMl0pIGluZGV4IC09IDMyOworICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICBpZiAodmFsdWUgPCBkYXRhQXJyYXlbaW5kZXgtMTZdKSBpbmRleCAtPSAxNjsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LThdKSBpbmRleCAtPSA4OworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiAodmFsdWUgPCBkYXRhQXJyYXlbaW5kZXgtNF0pIGluZGV4IC09IDQ7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IGRhdGFBcnJheVtpbmRleC0yXSkgaW5kZXggLT0gMjsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKHZhbHVlIDwgZGF0YUFycmF5W2luZGV4LTFdKSBpbmRleCAtPSAxOworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBpZiAodmFsdWUgPCBkYXRhQXJyYXlbaW5kZXhdKSBpbmRleCAtPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L01DaGFyQnVmZmVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L01DaGFyQnVmZmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGVlYmZmMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvTUNoYXJCdWZmZXIuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBNQ2hhckJ1ZmZlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ1OjEwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dDsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CisKKy8qKiBBIGR5bmFtaWMgY2hhcmFjdGVyIGFycmF5IG9wdGltaXplZCBmb3Igc2VxdWVuY2VzIG9mIGluc2VydAorICAgIG9yIGRlbGV0ZSBvcGVyYXRpb25zIGluIGEgbG9jYWwgcmVnaW9uLiAqLworCithYnN0cmFjdCBjbGFzcyBNQ2hhckJ1ZmZlcgoreworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgYWJzdHJhY3Qgdm9pZCByZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBNQ29uc3RUZXh0IHRleHQsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0KTsKKyAgICBhYnN0cmFjdCB2b2lkIHJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGNoYXJbXSBzcmNDaGFycywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQpOworICAgIGFic3RyYWN0IHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgU3RyaW5nIHNyY1N0cmluZywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQpOworICAgIGFic3RyYWN0IHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgY2hhciBzcmNDaGFyKTsKKyAgICBhYnN0cmFjdCBDaGFyYWN0ZXJJdGVyYXRvciBjcmVhdGVDaGFyYWN0ZXJJdGVyYXRvcihpbnQgc3RhcnQsIGludCBsaW1pdCk7CisgICAgYWJzdHJhY3QgY2hhciBhdChpbnQgcG9zKTsKKyAgICBhYnN0cmFjdCB2b2lkIGF0KGludCBzdGFydCwgaW50IGxpbWl0LCBjaGFyW10gZHN0LCBpbnQgZHN0U3RhcnQpOworCisgICAgYWJzdHJhY3QgaW50ICBsZW5ndGgoKTsKKworICAgIGFic3RyYWN0IGludCAgY2FwYWNpdHkoKTsKKyAgICBhYnN0cmFjdCB2b2lkIHJlc2VydmVDYXBhY2l0eShpbnQgcG9zLCBpbnQgbGVuZ3RoKTsKKyAgICBhYnN0cmFjdCB2b2lkIGNvbXByZXNzKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L01Db25zdFRleHQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvTUNvbnN0VGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQyMGNkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L01Db25zdFRleHQuamF2YQpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogTUNvbnN0VGV4dC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDAyLzAzLzIwIDA1OjExOjE3ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgamF2YS5hd3QuZGF0YXRyYW5zZmVyLkRhdGFGbGF2b3I7CisKKy8qKgorICogTUNvbnN0VGV4dCBpcyBhIGJhc2UgY2xhc3MgZm9yIHRleHQgd2l0aCBtdWx0aXBsZSBjaGFyYWN0ZXIgYW5kCisgKiBwYXJhZ3JhcGggc3R5bGVzLiAgVGhlIHRleHQgaXMgYSBzZXF1ZW5jZSBvZiBVbmljb2RlIGNoYXJhY3RlcnMsCisgKiByZXByZXNlbnRlZCBieSA8Y29kZT5jaGFyPC9jb2RlPi4gIENoYXJhY3RlciBhbmQgcGFyYWdyYXBoCisgKiBzdHlsZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5BdHRyaWJ1dGVNYXA8L2NvZGU+IGNsYXNzLgorICogPHA+CisgKiBDaGFyYWN0ZXJzIGluIHRoZSB0ZXh0IGFyZSBhY2Nlc3NlZCB3aXRoIGFuIGludGVnZXIgaW5kZXggdXNpbmcgdGhlCisgKiA8Y29kZT5hdDwvY29kZT4gbWV0aG9kLgorICogVmFsaWQgaW5kaWNlcyBhcmUgYmV0d2VlbiAwIGFuZCAobGVuZ3RoLTEpLCB3aGVyZSBsZW5ndGggaXMgdGhlIG51bWJlcgorICogb2YgY2hhcmFjdGVycyBpbiB0aGUgdGV4dC4gIEFkZGl0aW9uYWxseSwgdGhlCisgKiBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0IG1heSBiZSBhY2Nlc3NlZCB0aHJvdWdoIGEKKyAqIDxjb2RlPmphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvcjwvY29kZT4uCisgKiA8cD4KKyAqIEV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgdGV4dCBoYXMgYSBjaGFyYWN0ZXIgc3R5bGUgYXNzb2NpYXRlZCB3aXRoIGl0LAorICogcmVwcmVzZW50ZWQgYnkgdGhlIDxjb2RlPkF0dHJpYnV0ZU1hcDwvY29kZT4gY2xhc3MuICBUaGUgY2hhcmFjdGVyCisgKiBzdHlsZSBmb3IgYSBwYXJ0aWN1bGFyIGNoYXJhY3RlciBjYW4gYmUgb2J0YWluZWQgdXNpbmcgdGhlCisgKiA8Y29kZT5jaGFyYWN0ZXJTdHlsZUF0PC9jb2RlPiBtZXRob2QuCisgKiA8cD4KKyAqIEVhY2ggY2hhcmFjdGVyIGluIHRoZSB0ZXh0IGlzIGNvbnRhaW5lZCBpbiBhIHBhcmFncmFwaC4gIEEgcGFyYWdyYXBoCisgKiBpcyBhIHJhbmdlIG9mIHRleHQgaW5jbHVkaW5nIGFuZCB0ZXJtaW5hdGVkIGJ5IGEKKyAqIHBhcmFncmFwaCBzZXBhcmF0b3IgKGVpdGhlciA8Y29kZT5cbjwvY29kZT4gb3IgPGNvZGU+VSsyMDI5PC9jb2RlPikuCisgKiBFdmVyeQorICogcGFyYWdyYXBoIGhhcyBhIHBhcmFncmFwaCBzdHlsZSBhc3NvY2lhdGVkIHdpdGggaXQsIHJlcHJlc2VudGVkCisgKiBieSB0aGUgPGNvZGU+QXR0cmlidXRlTWFwPC9jb2RlPiBjbGFzcy4gIFBhcmFncmFwaCBib3VuZGFyaWVzIGFuZAorICogc3R5bGVzIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBNQ29uc3RUZXh0LgorICogPHA+CisgKiBUaGlzIGNsYXNzIGRvZXMgbm90IGhhdmUgbWV0aG9kcyBmb3IgbW9kaWZ5aW5nIHRoZSB0ZXh0IG9yIHN0eWxlcy4KKyAqIEhvd2V2ZXIsIHN1YmNsYXNzZXMgbWF5IGFkZCB0aGlzIGNhcGFiaWxpdHksIHNvIGl0IGlzIG5vdCBzYWZlIHRvCisgKiBhc3N1bWUgdGhhdCBhbiBNQ29uc3RUZXh0IGluc3RhbmNlIGlzIGltbXV0YWJsZS4gIEluIHBhcnRpY3VsYXIsCisgKiB0aGUgTVRleHQgY2xhc3MgYWRkcyBtb2RpZmljYXRpb24gcHJvdG9jb2wgdG8gdGhpcyBjbGFzcy4gIENsaWVudHMKKyAqIGNhbiBkZXRlY3Qgd2hldGhlciBhbiBNQ29uc3RUZXh0IGhhcyBjaGFuZ2VkIGJ5IGtlZXBpbmcgdHJhY2sgb2YgaXRzCisgKiB0aW1lc3RhbXAuCisgKiA8cD4KKyAqIEEgRGF0YUZsYXZvciBmb3IgY2xpcGJvYXJkIGNvbnRlbnQgaXMgZGVmaW5lZCBpbiB0aGlzIGNsYXNzLiAgVXNpbmcKKyAqIHRoaXMgRGF0YUZsYXZvciBpbnN1cmVzIHRoYXQgYWxsIGNsaWVudHMgd2lsbCByZWNvZ25pemUgTUNvbnN0VGV4dAorICogY29udGVudCBvbiB0aGUgY2xpcGJvYXJkLgorICogQHNlZSBNVGV4dAorICogQHNlZSBBdHRyaWJ1dGVNYXAKKyAqIEBzZWUgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yCisgKiBAc2VlIGphdmEuYXd0LmRhdGF0cmFuc2Zlci5EYXRhRmxhdm9yCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNQ29uc3RUZXh0IHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLyoqCisgICAgICogVGhlIERhdGFGbGF2b3IgZm9yIE1Db25zdFRleHQgY2xpcGJvYXJkIGNvbnRlbnQuICBVc2VkIHRvCisgICAgICogaW5kaWNhdGUgdGhhdCBjbGlwYm9hcmQgZGF0YSBoYXMgYW4gTUNvbnN0VGV4dCByZXByZXNlbnRhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIERhdGFGbGF2b3Igc3R5bGVkVGV4dEZsYXZvciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGFGbGF2b3IoTUNvbnN0VGV4dC5jbGFzcywgIlN0eWxlZCBUZXh0Iik7CisKKyAgICBwcm90ZWN0ZWQgTUNvbnN0VGV4dCgpIHsKKyAgICB9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENIQVJBQ1RFUiBBQ0NFU1MKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qKgorKiBSZXR1cm4gdGhlIGNoYXJhY3RlciBhdCBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPi4KKyogQHBhcmFtIHBvcyBhIHZhbGlkIG9mZnNldCBpbnRvIHRoZSB0ZXh0CisqIEByZXR1cm4gdGhlIGNoYXJhY3RlciBhdCBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgY2hhciBhdChpbnQgcG9zKTsKKworLyoqCisqIENvcHkgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFs8Y29kZT5zdGFydDwvY29kZT4sIDxjb2RlPmxpbWl0PC9jb2RlPikKKyogaW50byB0aGUgYXJyYXkgPGNvZGU+ZHN0PC9jb2RlPiwgYmVnaW5uaW5nIGF0IDxjb2RlPmRzdFN0YXJ0PC9jb2RlPi4KKyogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYXJyYXkKKyogQHBhcmFtIGxpbWl0IG9mZnNldCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgd2hpY2ggd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYXJyYXkKKyogQHBhcmFtIGRzdCBhcnJheSBpbiB3aGljaCB0byBjb3B5IGNoYXJhY3RlcnMuICBUaGUgbGVuZ3RoIG9mIDxjb2RlPmRzdDwvY29kZT4gbXVzdCBiZSBhdCBsZWFzdAorKiAoPGNvZGU+ZHN0U3RhcnQgKyBsaW1pdCAtIHN0YXJ0PC9jb2RlPikuCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGV4dHJhY3RDaGFycyhpbnQgc3RhcnQsIGludCBsaW1pdCwgY2hhcltdIGRzdCwgaW50IGRzdFN0YXJ0KTsKKworLyoqCisqIENyZWF0ZSBhbiBNQ29uc3RUZXh0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBpbiB0aGUgcmFuZ2UKKyogWzxjb2RlPnN0YXJ0PC9jb2RlPiwgPGNvZGU+bGltaXQ8L2NvZGU+KS4KKyogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIG5ldyB0ZXh0CisqIEBwYXJhbSBsaW1pdCBvZmZzZXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBuZXcgdGV4dAorKiBAcmV0dXJuIGFuIE1Db25zdFRleHQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2UKKyovCisgICAgcHVibGljIGFic3RyYWN0IE1Db25zdFRleHQgZXh0cmFjdChpbnQgc3RhcnQsIGludCBsaW1pdCk7CisKKy8qKgorKiBDcmVhdGUgYSA8Y29kZT5qYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I8L2NvZGU+IG92ZXIgYWxsCisqIG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0LiAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjYWxscworKiA8Y29kZT5jcmVhdGVDaGFyYWN0ZXJJdGVyYXRvcigwLCBsZW5ndGgoKSk8L2NvZGU+CisqIEByZXR1cm4gYSA8Y29kZT5qYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I8L2NvZGU+IG92ZXIgYWxsCisqICAgICAgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQKKyovCisgICAgcHVibGljIENoYXJhY3Rlckl0ZXJhdG9yIGNyZWF0ZUNoYXJhY3Rlckl0ZXJhdG9yKCkgeworCisgICAgICAgIHJldHVybiBjcmVhdGVDaGFyYWN0ZXJJdGVyYXRvcigwLCBsZW5ndGgoKSk7CisgICAgfQorCisvKioKKyogQ3JlYXRlIGEgPGNvZGU+amF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yPC9jb2RlPiBvdmVyIHRoZQorKiBnaXZlbiByYW5nZSBvZiBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0LgorKiBAcGFyYW0gc3RhcnQgdGhlIGZpcnN0IGluZGV4IGluIHRoZSBpdGVyYXRpb24gcmFuZ2UKKyogQHBhcmFtIGxpbWl0IHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGl0ZXJhdGlvbiByYW5nZQorKiBAcmV0dXJuIGEgPGNvZGU+amF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yPC9jb2RlPiBvdmVyIHRoZQorKiAgICAgZ2l2ZW4gcmFuZ2UKKyovCisgICAgcHVibGljIGFic3RyYWN0IENoYXJhY3Rlckl0ZXJhdG9yIGNyZWF0ZUNoYXJhY3Rlckl0ZXJhdG9yKGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0KTsKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTSVpFL0NBUEFDSVRZCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKioKKyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIE1Db25zdFRleHQgb2JqZWN0LiAgVGhlIGxlbmd0aCBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQuCisqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgTUNvbnN0VGV4dCBvYmplY3QKKyovCisgICAgcHVibGljIGFic3RyYWN0IGludCBsZW5ndGgoKTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ2hhcmFjdGVyIHN0eWxlcworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBjaGFyYWN0ZXIgc3R5bGUgcnVuCisqIGNvbnRhaW5pbmcgcG9zLiAgQWxsIGNoYXJhY3RlcnMgaW4gYSBzdHlsZSBydW4gaGF2ZSB0aGUgc2FtZSBjaGFyYWN0ZXIKKyogc3R5bGUuCisqIEByZXR1cm4gdGhlIHN0eWxlIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+CisqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hhcmFjdGVyU3R5bGVTdGFydChpbnQgcG9zKTsKKworLyoqCisqIFJldHVybiB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBjaGFyYWN0ZXIgc3R5bGUgcnVuCisqIGNvbnRhaW5pbmcgcG9zLiAgQWxsIGNoYXJhY3RlcnMgaW4gYSBzdHlsZSBydW4gaGF2ZSB0aGUgc2FtZSBjaGFyYWN0ZXIKKyogc3R5bGUuCisqIEByZXR1cm4gdGhlIHN0eWxlIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+CisqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hhcmFjdGVyU3R5bGVMaW1pdChpbnQgcG9zKTsKKworLyoqCisqIFJldHVybiB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY2hhcmFjdGVyIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+LgorKiBAcGFyYW0gcG9zIGEgdmFsaWQgb2Zmc2V0IGludG8gdGhlIHRleHQKKyogQHJldHVybiB0aGUgc3R5bGUgYXQgb2Zmc2V0IDxjb2RlPnBvczwvY29kZT4KKyovCisgICAgcHVibGljIGFic3RyYWN0IEF0dHJpYnV0ZU1hcCBjaGFyYWN0ZXJTdHlsZUF0KGludCBwb3MpOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBQQVJBR1JBUEggQk9VTkRBUklFUworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyoqCisqIFJldHVybiB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgYXQgb2Zmc2V0IDxjb2RlPnBvczwvY29kZT4uCisqIEBwYXJhbSBwb3MgYSB2YWxpZCBvZmZzZXQgaW50byB0aGUgdGV4dAorKiBAcmV0dXJuIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBhdCBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IHBhcmFncmFwaFN0YXJ0KGludCBwb3MpOworCisvKioKKyogUmV0dXJuIHRoZSBsaW1pdCBvZiB0aGUgcGFyYWdyYXBoIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBhdCBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPi4KKyogQHBhcmFtIHBvcyBhIHZhbGlkIG9mZnNldCBpbnRvIHRoZSB0ZXh0CisqIEByZXR1cm4gdGhlIGxpbWl0IG9mIHRoZSBwYXJhZ3JhcGggY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+CisqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgcGFyYWdyYXBoTGltaXQoaW50IHBvcyk7CisKKy8qKgorKiBSZXR1cm4gdGhlIHBhcmFncmFwaCBzdHlsZSBhcHBsaWVkIHRvIHRoZSBwYXJhZ3JhcGggY29udGFpbmluZyBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPi4KKyogQHBhcmFtIHBvcyBhIHZhbGlkIG9mZnNldCBpbnRvIHRoZSB0ZXh0CisqIEByZXR1cm4gdGhlIHBhcmFncmFwaCBzdHlsZSBpbiBlZmZlY3QgYXQgPGNvZGU+cG9zPC9jb2RlPgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgQXR0cmlidXRlTWFwIHBhcmFncmFwaFN0eWxlQXQoaW50IHBvcyk7CisKKy8qKgorKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBzdGFtcC4gIFRoZSB0aW1lIHN0YW1wIGlzCisqIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBjb250ZW50cyBvZiB0aGUgTUNvbnN0VGV4dCBjaGFuZ2VzLgorKiBAcmV0dXJuIHRoZSBjdXJyZW50IHBhcmFncmFwaCBzdHlsZSB0aW1lIHN0YW1wCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0VGltZVN0YW1wKCk7CisKKy8qKgorKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBkYW1hZ2VkIHJhbmdlLiAgSWYgdGhlIHN0YXJ0IGlzIG5vdCBsZXNzCisqIHRoYW4gdGhlIHRoZSBsaW1pdCBvZiB0aGUgZGFtYWdlZCByYW5nZSwgdGhlbiB0aGUgZGFtYWdlZCByYW5nZQorKiBpcyBlbXB0eS4KKyogQHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRhbWFnZWQgcmFuZ2UKKyogQHNlZSAjZGFtYWdlZFJhbmdlTGltaXQKKyogQHNlZSBNVGV4dCNyZXNldERhbWFnZWRSYW5nZQorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGRhbWFnZWRSYW5nZVN0YXJ0KCk7CisKKy8qKgorKiBSZXR1cm4gdGhlIGxpbWl0IG9mIHRoZSBkYW1hZ2VkIHJhbmdlLiAgSWYgdGhlIHN0YXJ0IGlzIG5vdCBsZXNzCisqIHRoYW4gdGhlIHRoZSBsaW1pdCBvZiB0aGUgZGFtYWdlZCByYW5nZSwgdGhlbiB0aGUgZGFtYWdlZCByYW5nZQorKiBpcyBlbXB0eS4KKyogQHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRhbWFnZWQgcmFuZ2UKKyogQHNlZSAjZGFtYWdlZFJhbmdlU3RhcnQKKyogQHNlZSBNVGV4dCNyZXNldERhbWFnZWRSYW5nZQorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGRhbWFnZWRSYW5nZUxpbWl0KCk7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEVxdWFsaXR5IGFuZCBoYXNoQ29kZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyoqCisqIENvbXBhcmUgdGhpcyB0byBhbm90aGVyIE9iamVjdCBmb3IgZXF1YWxpdHkuICBUaGlzIGlzCisqIGVxdWFsIHRvIHJocyBpZiByaHMgaXMgYW4gTUNvbnN0VGV4dCB3aGljaCBpcyBlcXVhbAorKiB0byB0aGlzLgorKiBAcGFyYW0gcmhzIE9iamVjdCB0byBjb21wYXJlIHRvCisqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGVxdWFscyA8Y29kZT5yaHM8L2NvZGU+CisqLworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGVxdWFscyhPYmplY3QgcmhzKSB7CisKKyAgICAgICAgTUNvbnN0VGV4dCBvdGhlclRleHQ7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG90aGVyVGV4dCA9IChNQ29uc3RUZXh0KSByaHM7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlcXVhbHMob3RoZXJUZXh0KTsKKyAgICB9CisKKy8qKgorKiBDb21wYXJlIHRoaXMgdG8gYW5vdGhlciBNQ29uc3RUZXh0IGZvciBlcXVhbGl0eS4gIFRoaXMgaXMKKyogZXF1YWwgdG8gcmhzIGlmIHRoZSBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMgaW4gcmhzIGFyZSB0aGUKKyogc2FtZSBhcyB0aGlzLiAgU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdGhpcyBpbXBsZW1lbnRhdGlvbgorKiBmb3IgZWZmaWNpZW5jeSwgYnV0IHRoZXkgc2hvdWxkIHByZXNlcnZlIHRoZXNlIHNlbWFudGljcy4KKyogRGV0ZXJtaW5pbmcgdGhhdCB0d28gTUNvbnN0VGV4dCBpbnN0YW5jZXMgYXJlIGVxdWFsIG1heSBiZQorKiBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLCBzaW5jZSBldmVyeSBjaGFyYWN0ZXIgYW5kIHN0eWxlIG11c3QKKyogYmUgY29tcGFyZWQuCisqIEBwYXJhbSByaHMgT2JqZWN0IHRvIGNvbXBhcmUgdG8KKyogQHJldHVybiB0cnVlIGlmIHRoaXMgZXF1YWxzIDxjb2RlPnJoczwvY29kZT4KKyovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE1Db25zdFRleHQgcmhzKSB7CisKKyAgICAgICAgaWYgKHJocyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmhzID09IHRoaXMpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc2hDb2RlKCkgIT0gcmhzLmhhc2hDb2RlKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBsZW5ndGggPSBsZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCAhPSByaHMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA8IGxlbmd0aCAmJiBhdChpKSAhPSByaHMuYXQoaSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBzdGFydCA9IDA7IHN0YXJ0IDwgbGVuZ3RoOykgeworICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJTdHlsZUF0KHN0YXJ0KS5lcXVhbHMocmhzLmNoYXJhY3RlclN0eWxlQXQoc3RhcnQpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBsaW1pdCA9IGNoYXJhY3RlclN0eWxlTGltaXQoc3RhcnQpOworICAgICAgICAgICAgaWYgKGxpbWl0ICE9IHJocy5jaGFyYWN0ZXJTdHlsZUxpbWl0KHN0YXJ0KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0ID0gbGltaXQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBzdGFydCA9IDA7IHN0YXJ0IDwgbGVuZ3RoOykgeworCisgICAgICAgICAgICBpZiAoIXBhcmFncmFwaFN0eWxlQXQoc3RhcnQpLmVxdWFscyhyaHMucGFyYWdyYXBoU3R5bGVBdChzdGFydCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhcnQgPSBwYXJhZ3JhcGhMaW1pdChzdGFydCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGFyYWdyYXBoU3R5bGVBdChsZW5ndGgpLmVxdWFscyhyaHMucGFyYWdyYXBoU3R5bGVBdChsZW5ndGgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGhhc2hDb2RlIGZvciB0aGlzIE1Db25zdFRleHQuICBBbiBlbXB0eSBNQ29uc3RUZXh0CisgICAgICogaGFzIGhhc2hDb2RlIDA7ICBhIG5vbmVtcHR5IE1Db25zdFRleHQncyBoYXNoQ29kZSBpcworICAgICAqIDxibG9ja3F1b3RlPjxwcmU+CisgICAgICogICAgICAgYXQoMCkgKworICAgICAqICAgICAgIGF0KGxlbmd0aC8yKSozMV4xICsKKyAgICAgKiAgICAgICBhdChsZW5ndGgtMSkqMzFeMiArCisgICAgICogICAgICAgY2hhcmFjdGVyU3R5bGVBdCgwKS5oYXNoQ29kZSgpKjMxXjMgKworICAgICAqICAgICAgIHBhcmFncmFwaFN0eWxlQXQobGVuZ3RoLTEpLmhhc2hDb2RlKCkqMzFeNAorICAgICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KKyAgICAgKiB3aGVyZSA8Y29kZT5ePC9jb2RlPiBpcyBleHBvbmVudGlhdGlvbiAobm90IGJpdHdpc2UgWE9SKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGhhc2hDb2RlKCkgeworCisgICAgICAgIGludCBoYXNoQ29kZSA9IDA7CisgICAgICAgIGludCBsZW5ndGggPSBsZW5ndGgoKTsKKworICAgICAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaGFzaENvZGUgPSBwYXJhZ3JhcGhTdHlsZUF0KGxlbmd0aC0xKS5oYXNoQ29kZSgpOworICAgICAgICAgICAgaGFzaENvZGUgPSBoYXNoQ29kZSozMSArIGNoYXJhY3RlclN0eWxlQXQoMCkuaGFzaENvZGUoKTsKKyAgICAgICAgICAgIGhhc2hDb2RlID0gaGFzaENvZGUqMzEgKyBhdChsZW5ndGgtMSk7CisgICAgICAgICAgICBoYXNoQ29kZSA9IGhhc2hDb2RlKjMxICsgYXQobGVuZ3RoLzIpOworICAgICAgICAgICAgaGFzaENvZGUgPSBoYXNoQ29kZSozMSArIGF0KDApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGhhc2hDb2RlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvTVBhcmFncmFwaEJ1ZmZlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9NUGFyYWdyYXBoQnVmZmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGEwMThmZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvTVBhcmFncmFwaEJ1ZmZlci5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IE1QYXJhZ3JhcGhCdWZmZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozNSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQ7CisKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKK2Fic3RyYWN0IGNsYXNzIE1QYXJhZ3JhcGhCdWZmZXIKK3sKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworCisvKioKKyogUmV0dXJucyB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCBjb250YWluaW5nIG9mZnNldCA8dHQ+cG9zPC90dD4uCisqLworICAgIGFic3RyYWN0IGludCBwYXJhZ3JhcGhTdGFydChpbnQgcG9zKTsKKworLyoqCisqIFJldHVybnMgdGhlIGxpbWl0IG9mIHRoZSBwYXJhZ3JhcGggY29udGFpbmluZyBvZmZzZXQgPHR0PnBvczwvdHQ+LgorKi8KKyAgICBhYnN0cmFjdCBpbnQgcGFyYWdyYXBoTGltaXQoaW50IHBvcyk7CisKKy8qKgorKiBSZXR1cm5zIHRoZSBzdHlsZSBvZiB0aGUgcGFyYWdyYXBoIGNvbnRhaW5pbmcgb2Zmc2V0IDx0dD5wb3M8L3R0Pi4KKyovCisgICAgYWJzdHJhY3QgQXR0cmlidXRlTWFwIHBhcmFncmFwaFN0eWxlQXQoaW50IG9mZnNldCk7CisKKy8qKgorKiBQcm9jZXNzIGEgY2hhcmFjdGVyIGluc2VydGlvbiBhdCBvZmZzZXQgPHR0PnN0YXJ0PC90dD4uCisqIElmIGEgcGFyYWdyYXBoIGJyZWFrIHdhcyBpbnNlcnRlZCwgcHJvcG9nYXRlIHBhcmFncmFwaCBzdHlsZSBhdAorKiA8dHQ+c3RhcnQ8L3R0PiB0byBuZXcgcGFyYWdyYXBoLgorKi8KKyAgICBhYnN0cmFjdCB2b2lkIGluc2VydFRleHQoaW50IHN0YXJ0LCBjaGFyIGluc2VydGVkQ2hhcik7CisKKy8qKgorKiBQcm9jZXNzIGNoYXJhY3RlciBpbnNlcnRpb24gYXQgb2Zmc2V0IDx0dD5zdGFydDwvdHQ+LgorKiBFYWNoIG5ldyBwYXJhZ3JhcGggZ2V0cyBwYXJhZ3JhcGggc3R5bGUgYXQKKyogPHR0PnN0YXJ0PC90dD4uCisqLworICAgIGFic3RyYWN0IHZvaWQgaW5zZXJ0VGV4dChpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBzcmNDaGFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY1N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTGltaXQpOworCisvKioKKyogUHJvY2VzcyBkZWxldGlvbiBieSByZW1vdmluZyBwYXJhZ3JhcGggYnJlYWtzIGNvbnRhaW5lZCBpbgorKiBkZWxldGVkIHJhbmdlLiAgUHJvcG9nYXRlIHBhcmFncmFwaCBzdHlsZXMgYmFja3dhcmQsIGlmIG5lY2Vzc2FyeS4KKyovCisgICAgYWJzdHJhY3Qgdm9pZCBkZWxldGVUZXh0KGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBkYW1hZ2VkUmFuZ2UpOworCisvKgorKiBSZXBsYWNlIHBhcmFncmFwaCBicmVha3Mvc3R5bGVzIGJldHdlZW4gc3RhcnQgYW5kIGxpbWl0IHdpdGggcGFyYWdyYXBoIGJyZWFrcy9zdHlsZXMKKyogZnJvbSA8dHQ+c3JjVGV4dDwvdHQ+LgorKiBAcGFyYW0gc3RhcnQgYW4gb2Zmc2V0IGludG8gdGhlIHRleHQKKyogQHBhcmFtIGxpbWl0IHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgdG8gcmVwbGFjZQorKiBAcGFyYW0gc3JjVGV4dCB0aGUgdGV4dCBmcm9tIHdoaWNoIG5ldyBwYXJhZ3JhcGhzIGFyZSB0YWtlbgorKiBAcGFyYW0gc3JjU3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBpbiA8Y29kZT5zcmNUZXh0PC9jb2RlPiB0byBjb3B5CisqIEBwYXJhbSBzcmNMaW1pdCB0aGUgZmlyc3QgaW5kZXggYWZ0ZXIgdGhlIHJhbmdlIGluIDxjb2RlPnNyY1RleHQ8L2NvZGU+IHRvIGNvcHkKKyovCisgICAgYWJzdHJhY3Qgdm9pZCByZXBsYWNlKGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBNQ29uc3RUZXh0IHNyY1RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY0xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBkYW1hZ2VkUmFuZ2UpOworCisvKioKKyogU2V0IHRoZSBzdHlsZSBvZiBhbGwgcGFyYWdyYXBocyBjb250YWluaW5nIG9mZnNldHMgaW4gdGhlIHJhbmdlIFtzdGFydCwgbGltaXQpIHRvCisqIDx0dD5zdHlsZTwvdHQ+LgorKi8KKyAgICBhYnN0cmFjdCBib29sZWFuIG1vZGlmeVBhcmFncmFwaFN0eWxlcyhpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gZGFtYWdlZFJhbmdlKTsKKworLyoqCisqIE1pbmltaXplIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhpcyBvYmplY3QuCisqLworICAgIGFic3RyYWN0IHZvaWQgY29tcHJlc3MoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvTVN0eWxlQnVmZmVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L01TdHlsZUJ1ZmZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc3YmU4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L01TdHlsZUJ1ZmZlci5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBNU3R5bGVCdWZmZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozNSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCisvKgorICAgIDgvMS85NgorICAgICAgICBTdHlsZSAtPiBSZXNvbHZlZFN0eWxlCisgICAgOC83Lzk2IGpmCisgICAgICAgIGFkZGVkIGNvdW50U3R5bGVzIGFuZCBnZXRTdHlsZXMgcHJvdG9jb2wKKyAgICA4LzEzLzk2CisgICAgICAgIFJlc29sdmVkU3R5bGUtPlN0eWxlCisgICAgOC8yMi85NiBqZgorICAgICAgICBSZW1vdmVkIHRoZSBzZXRJdGVyYXRvciBtZXRob2RzLgorKi8KKy8qCisqIE1TdHlsZUJ1ZmZlciBpcyB0aGUgYWJzdHJhY3QgaW50ZXJmYWNlIGZvciBhIGNsYXNzIHdoaWNoIG1haW50YWlucworKiBzdHlsZSBydW5zIGluIGFuIDx0dD5NVGV4dDwvdHQ+LiAgQSAic3R5bGUgcnVuIiBjb25zaXN0cyBvZiBhCisqIHN0eWxlIGFuZCB0aGUgaW50ZXJ2YWwgb24gd2hpY2ggdGhlIHN0eWxlIGFwcGxpZXMuCisqIDxwPgorKiBNU3R5bGVCdWZmZXIgaW5jbHVkZXMgbWV0aG9kcyB0byBjYWxsIHdoZW4gdGV4dCBpcyBpbnNlcnRlZCBpbnRvCisqIG9yIGRlbGV0ZWQgZnJvbSB0aGUgPHR0Pk1UZXh0PC90dD4uICBUaGVzZSBtZXRob2RzIHVwZGF0ZSB0aGUKKyogc3R5bGUgcnVucyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1vbmx5IGFjY2VwdGVkIGJlaGF2aW9yIGZvcgorKiBzdHlsZSBydW5zLgorKiA8cD4KKyogQWRkaXRpb25hbGx5LCBNU3R5bGVCdWZmZXIgcHJvdmlkZXMgbWV0aG9kcyBmb3IgcmVwbGFjaW5nIHRoZSBzdHlsZSBydW5zIG9uIGEKKyogdGV4dCByYW5nZSB3aXRoIGFub3RoZXIgc2V0IG9mIHN0eWxlIHJ1bnMuICBNU3R5bGVCdWZmZXIgZG9lcyBub3QgZG8gc3R5bGUgImNvbWJpbmluZyIgKGZvcgorKiBleGFtcGxlLCBhZGRpbmcgdGhlIGJvbGQgYXR0cmlidXRlIHRvIHRleHQgd2hpY2ggaXMgaXRhbGljaXplZCk7ICBjbGllbnRzIGFyZQorKiByZXNwb25zaWJsZSBmb3IgY29tcHV0aW5nIHRoZSBjb21iaW5lZCBzdHlsZXMsIGFuZCBwYXNzaW5nIHRoZXNlIHN0eWxlcyBpbnRvCisqIE1TdHlsZUJ1ZmZlci4KKyogPHA+CisqIE1TdHlsZUJ1ZmZlciBzdXBwbGllcyBhIG1ldGhvZCBmb3IgcmVwbGFjaW5nIHRoZSBzdHlsZSBydW5zIG9uIGEgdGV4dCByYW5nZSB3aXRoIHRoZSBydW5zCisqIHJlcHJlc2VudGVkIGluIGFuIDx0dD5NU3R5bGVSdW5JdGVyYXRvcjwvdHQ+LiAgVGhpcyBpcyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBwYXN0ZQorKiBvcGVyYXRpb25zLCBpbiB3aGljaCB0aGUgc3R5bGUgcnVucyBvbiBhIHJhbmdlIG9mIHRleHQgYXJlIHJlcGxhY2VkIGJ5IHN0eWxlIHJ1bnMKKyogZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UuCisqIDxwPgorKgorKiBAYXV0aG9yIEpvaG4gUmFsZXkKKyoKKyogQHNlZSBBdHRyaWJ1dGVNYXAKKyogQHNlZSBNVGV4dAorKi8KK2Fic3RyYWN0IGNsYXNzIE1TdHlsZUJ1ZmZlcgoreworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKy8qKgorKiBSZXNwb25kIHRvIGFuIGluc2VydGlvbiBpbiB0aGUgdGV4dC4gIFRoZSBsZW5ndGggb2YgdGhlIGxhc3Qgc3R5bGUgcnVuIHdoaWNoCisqIGJlZ2lucyBiZWZvcmUgPHR0PnN0YXJ0PC90dD4gaXMgaW5jcmVhc2VkIGJ5IDx0dD5saW1pdC1zdGFydDwvdHQ+LgorKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCB3aGVyZSB0aGUgaW5zZXJ0aW9uIGJlZ2FuCisqIEBwYXJhbSBsaW1pdCB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBpbnNlcnRpb24gZW5kZWQKKyovCisgICAgYWJzdHJhY3Qgdm9pZCBpbnNlcnRUZXh0KGludCBzdGFydCwgaW50IGxpbWl0KTsKKworLyoqCisqIFJlc3BvbmQgdG8gYSBkZWxldGlvbiBpbiB0aGUgdGV4dC4gIFRoZSBsYXN0IHN0eWxlIHJ1biBiZWZvcmUKKyogPHR0PnN0YXJ0PC90dD4gaXMgdHJ1bmNhdGVkIHRvIGVuZCBhdCA8dHQ+c3RhcnQ8L3R0Pi4gIFRoZQorKiBzdHlsZSBydW4gY29udGFpbmluZyAoPHR0PnN0YXJ0PC90dD4rPHR0Pmxlbmd0aDwvdHQ+KSBpcyBzZXQgdG8gYmVnaW4KKyogYXQgKDx0dD5zdGFydDwvdHQ+Kzx0dD5sZW5ndGg8L3R0PikuICBSdW5zIGluIGJldHdlZW4gYXJlIGRlbGV0ZWQuCisqIElmIHRoZSBkZWxldGlvbiBvY2N1cnMgZW50aXJlbHkgd2l0aGluIG9uZSBzdHlsZSBydW4sIHRoZSBsZW5ndGggb2YgdGhlIHN0eWxlCisqIHJ1biBpcyByZWR1Y2VkIGJ5IDx0dD5sZW5ndGg8L3R0Pi4KKyogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgd2hlcmUgdGhlIGRlbGV0aW9uIGJlZ2FuCisqIEBwYXJhbSBsZW5ndGggdGhlIG9mZnNldCB3aGVyZSB0aGUgZGVsZXRpb24gZW5kZWQKKyovCisgICAgYWJzdHJhY3Qgdm9pZCBkZWxldGVUZXh0KGludCBzdGFydCwgaW50IGxpbWl0KTsKKworLyoKKyogUmVwbGFjZSBzdHlsZSBydW5zIGJldHdlZW4gb2Zmc2V0cyA8dHQ+c3RhcnQ8L3R0PiBhbmQgPHR0PmxpbWl0PC90dD4gd2l0aCBzdHlsZXMgaW4KKyogPHR0Pml0ZXI8L3R0Pi4gIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gYSAicGFzdGUiIG9wZXJhdGlvbi4KKyogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgd2hlcmUgdGhlIHJlcGxhY2VtZW50IGJlZ2lucworKiBAcGFyYW0gbGltaXQgdGhlIG9mZnNldCB3aGVyZSB0aGUgcmVwbGFjZW1lbnQgZW5kcworKiBAcGFyYW0gaXRlciBhbiA8dHQ+TVN0eWxlUnVuSXRlcmF0b3I8L3R0PiBjb250YWluaW5nIHN0eWxlIHJ1bnMgd2hpY2ggd2lsbCByZXBsYWNlIG9sZAorKiBzdHlsZSBydW5zLgorKi8KKyAgICBhYnN0cmFjdCB2b2lkIHJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIE1Db25zdFRleHQgc3JjVGV4dCwgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQpOworCisgICAgYWJzdHJhY3QgaW50IHN0eWxlU3RhcnQoaW50IHBvcyk7CisgICAgYWJzdHJhY3QgaW50IHN0eWxlTGltaXQoaW50IHBvcyk7CisKKy8qKgorKiBSZXR1cm4gc3R5bGUgYXQgbG9jYXRpb24gPHR0PnBvczwvdHQ+LgorKiBAcGFyYW0gcG9zIGFuIG9mZnNldCBpbnRvIHRoZSB0ZXh0CisqIEByZXR1cm5zIHRoZSBzdHlsZSBvZiB0aGUgY2hhcmFjdGVyIGF0IDx0dD5vZmZzZXQ8L3R0PgorKi8KKyAgICBhYnN0cmFjdCBBdHRyaWJ1dGVNYXAgc3R5bGVBdChpbnQgcG9zKTsKKworLyoqCisgKiBSZXR1cm4gdHJ1ZSBpZiBzdHlsZXMgd2VyZSBtb2RpZmllZC4KKyAqLworICAgIGFic3RyYWN0IGJvb2xlYW4gbW9kaWZ5U3R5bGVzKGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVNb2RpZmllciBtb2RpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBkYW1hZ2VkUmFuZ2UpOworCisvKioKKyogTWluaW1pemUgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB0aGlzIG9iamVjdC4KKyovCisgICAgYWJzdHJhY3Qgdm9pZCBjb21wcmVzcygpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9NVGFiUnVsZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvTVRhYlJ1bGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDBmYTRlMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvTVRhYlJ1bGVyLmphdmEKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IE1UYWJSdWxlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ1OjEwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSByZXByZXNlbnRzIGEgc2VxdWVuY2Ugb2YgVGFiU3RvcHMsIG9yZGVyZWQgYnkgcG9zaXRpb24uCisgKiBUaGUgZmlyc3QKKyAqIFRhYlN0b3AgaW4gdGhlIHJ1bGVyIGNhbiBiZSBvYnRhaW5lZCB3aXRoIHRoZSA8Y29kZT5maXJzdFRhYjwvY29kZT4KKyAqIG1ldGhvZDsgIHN1YnNlcXVlbnQgVGFiU3RvcHMgYXJlIG9idGFpbmVkIHdpdGggdGhlIDxjb2RlPm5leHRUYWI8L2NvZGU+CisgKiBtZXRob2QuCisgKiA8cD4KKyAqIElmIGEgVGFiU3RvcCB3aXRoIHR5cGUgPGNvZGU+VGFiU3RvcC5rQXV0bzwvY29kZT4gaXMgcmV0dXJuZWQsIGFsbCB0YWJzCisgKiBhZnRlciB0aGF0IFRhYlN0b3Agd2lsbCBhbHNvIGhhdmUgdHlwZSA8Y29kZT5UYWJTdG9wLmtBdXRvPC9jb2RlPiwgYW5kCisgKiB0aGVpciBwb3NpdGlvbnMgd2lsbCBiZSBtdWx0aXBsZXMgb2YgPGNvZGU+YXV0b1NwYWNpbmc8L2NvZGU+LgorICogQHNlZSBUYWJTdG9wCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNVGFiUnVsZXIKK3sKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIC8qKgorICAgICAqIFJldHVybiBmaXJzdCB0YWIgaW4gdGhlIHJ1bGVyLiAgSWYgYW4gYXV0b1RhYiwgaXQgaXMgYXQgcG9zaXRpb24gemVybywgYW5kCisgICAgICogYWxsIHN1YnNlcXVlbnQgdGFicyB3aWxsIGJlIGF1dG90YWJzIGF0IGF1dG9TcGFjaW5nIGludGVydmFscy4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgVGFiU3RvcCBmaXJzdFRhYigpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBmaXJzdCB0YWIgaW4gdGhlIHJ1bGVyIHdpdGggZlBvc2l0aW9uID4gcG9zaXRpb24uICBJZiBpdCBpcyBhbgorICAgICAqIGF1dG90YWIsIGl0IGlzIGF0IGFuIGluY3JlbWVudCBvZiBhdXRvU3BhY2luZywgYW5kIGFsbCBzdWJzZXF1ZW50IHRhYnMgd2lsbCBiZQorICAgICAqIGF1dG90YWJzIGF0IGF1dG9TcGFjaW5nIGludGVydmFscy4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgVGFiU3RvcCBuZXh0VGFiKGludCBwb3NpdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGludGVydmFsIGZvciBhdXRvdGFicy4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGF1dG9TcGFjaW5nKCk7CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSBoYXNoQ29kZSBmb3IgdGhpcyBydWxlci4gIFRoZSBoYXNoQ29kZSBpcyB0aGUKKyAgICAgKiBoYXNoQ29kZSBvZiB0aGUgZmlyc3QgdGFiIG11bHRpcGxpZWQgYnkgdGhlIGF1dG9TcGFjaW5nCisgICAgICogaW50ZXJ2YWwuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIGludCBoYXNoQ29kZSgpIHsKKworICAgICAgICByZXR1cm4gZmlyc3RUYWIoKS5oYXNoQ29kZSgpICogYXV0b1NwYWNpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHRhYiBydWxlciBjb250YWlucyB0aGUgZ2l2ZW4gdGFiLgorICAgICAqIEBwYXJhbSB0YWJUb1Rlc3QgdGhlIHRhYiB0byBzZWFyY2ggZm9yCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgdGFiIHJ1bGVyIGNvbnRhaW5zIDxjb2RlPnRhYlRvVGVzdDwvY29kZT4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc1RhYihUYWJTdG9wIHRhYlRvVGVzdCkgeworCisgICAgICAgIGZvciAoVGFiU3RvcCB0YWIgPSBmaXJzdFRhYigpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFiLmdldFR5cGUoKSAhPSBUYWJTdG9wLmtBdXRvOworICAgICAgICAgICAgICAgICAgICAgICAgdGFiID0gbmV4dFRhYih0YWIuZ2V0UG9zaXRpb24oKSkpIHsKKyAgICAgICAgICAgIGlmICh0YWIuZ2V0UG9zaXRpb24oKSA+PSB0YWJUb1Rlc3QuZ2V0UG9zaXRpb24oKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0YWJUb1Rlc3QuZXF1YWxzKHRhYik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgdGFiIHJ1bGVyIGlkZW50aWNhbCB0byB0aGlzIHJ1bGVyLCBleGNlcHQgd2l0aCB0aGUKKyAgICAgKiBnaXZlbiB0YWIgYWRkZWQuICBUaGlzIHJ1bGVyIGlzIG5vdCBtb2RpZmllZC4KKyAgICAgKiBAcGFyYW0gdGFiVG9BZGQgdGhlIHRhYiB0byBhZGQgdG8gdGhlIG5ldyB0YWIgcnVsZXIKKyAgICAgKiBAcmV0dXJuIGFuIE1UYWJSdWxlciByZXN1bHRpbmcgZnJvbSB0aGlzIG9wZXJhdGlvbgorICAgICAqLworICAgIHB1YmxpYyBNVGFiUnVsZXIgYWRkVGFiKFRhYlN0b3AgdGFiVG9BZGQpIHsKKworICAgICAgICByZXR1cm4gU3RhbmRhcmRUYWJSdWxlci5hZGRUYWJUb1J1bGVyKHRoaXMsIHRhYlRvQWRkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSB0YWIgcnVsZXIgaWRlbnRpY2FsIHRvIHRoZSBnaXZlbiBydWxlciwgZXhjZXB0IHdpdGggdGhlCisgICAgICogdGFiIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiByZW1vdmVkLiAgVGhpcyBydWxlciBpcyBub3QgbW9kaWZpZWQuCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGFiIHRvIHJlbW92ZSBmcm9tIHRoZSBuZXcgdGFiIHJ1bGVyCisgICAgICogQHJldHVybiBhbiBNVGFiUnVsZXIgcmVzdWx0aW5nIGZyb20gdGhpcyBvcGVyYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgTVRhYlJ1bGVyIHJlbW92ZVRhYihpbnQgcG9zaXRpb24pIHsKKworICAgICAgICByZXR1cm4gU3RhbmRhcmRUYWJSdWxlci5yZW1vdmVUYWJGcm9tUnVsZXIodGhpcywgcG9zaXRpb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHRhYiBydWxlciBpZGVudGljYWwgdG8gdGhpcyBydWxlciwgZXhjZXB0IHdpdGggdGhlCisgICAgICogdGFiIGF0IHBvc2l0aW9uIDxjb2RlPmZyb21Qb3NpdGlvbjwvY29kZT4gbW92ZWQgdG8gcG9zaXRpb24KKyAgICAgKiA8Y29kZT50b1Bvc2l0aW9uPC9jb2RlPi4gIFRoaXMgcnVsZXIgaXMgbm90IG1vZGlmaWVkLgorICAgICAqIEBwYXJhbSBmcm9tUG9zaXRpb24gdGhlIHBvc2l0aW9uIG9mIHRoZSB0YWIgdG8gbW92ZQorICAgICAqIEBwYXJhbSB0b1Bvc2l0aW9uIHRoZSBuZXcgcG9zaXRpb24gb2YgdGhlIHRhYgorICAgICAqIEByZXR1cm4gYW4gTVRhYlJ1bGVyIHJlc3VsdGluZyBmcm9tIHRoaXMgb3BlcmF0aW9uCisgICAgICovCisgICAgcHVibGljIE1UYWJSdWxlciBtb3ZlVGFiKGludCBmcm9tUG9zaXRpb24sIGludCB0b1Bvc2l0aW9uKSB7CisKKyAgICAgICAgcmV0dXJuIFN0YW5kYXJkVGFiUnVsZXIubW92ZVRhYk9uUnVsZXIodGhpcywgZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9NVGV4dC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9NVGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQwMTQ5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L01UZXh0LmphdmEKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IE1UZXh0LmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MzYgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCisvKgorICAgIENoYW5nZSBoaXN0b3J5OgorCisgICAgMTAvMjkvOTYgamVmICAgIHNwbGl0IHRoZSBjaGFyYWN0ZXIgYW5kIHBhcmFncmFwaCBzdHlsZSBhY2Nlc3MgZnVuY3Rpb25zCisgICAgOC8xNC85NiBzZmIgICAgIGVsaW1pbmF0ZWQgU3R5bGVTaGVldEl0ZXJhdG9yCisgICAgOC8yMS85NiBqZWYgICAgICAgIGNvbXBsZXRlZCBhYnN0cmFjdCBpbnRlcmZhY2UgKGNoYW5nZWQgaXRlcmF0b3IgY2xhc3NlcyBldGMuKQorICAgIDEvMzAvOTcgcnRnICAgICBjbGVhbmVkIHVwIGludGVyZmFjZSwgYnJvdWdodCBpbiBmdW5jdGlvbnMgZnJvbSBTaW1wbGVUZXh0VmlldworICAgIDcvMzEvOTggamJyIHN3aXRjaGVkIGZyb20gU3R5bGUgdG8gQXR0cmlidXRlTWFwCisKKyovCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIG11dGFibGUgZXh0ZW5zaW9uIG9mIE1Db25zdFRleHQuICBJdCBoYXMgbWV0aG9kcyBmb3IKKyAqIGluc2VydGluZywgYXBwZW5kaW5nLCByZXBsYWNpbmcsIGFuZCByZW1vdmluZyBzdHlsZWQgdGV4dC4gIEFkZGl0aW9uYWxseSwKKyAqIGl0IGhhcyBtZXRob2RzIGZvciBtb2RpZnlpbmcgcGFyYWdyYXBoIGFuZCBjaGFyYWN0ZXIgc3R5bGVzLgorICogPHA+CisgKiBTdHlsZWQgY2hhcmFjdGVycyAoZnJvbSBhbm90aGVyIDxjb2RlPk1Db25zdFRleHQ8L2NvZGU+IGluc3RhbmNlKSBhZGRlZAorICogdG8gdGhlIHRleHQgcmV0YWluIHRoZWlyIG9yaWdpbmFsIGNoYXJhY3RlciBzdHlsZXMuICBUaGUgc3R5bGUgb2YgcGxhaW4gY2hhcmFjdGVycworICogKHNwZWNpZmllZCBhcyBhIDxjb2RlPmNoYXI8L2NvZGU+IG9yIDxjb2RlPmNoYXJbXTwvY29kZT4pIGlzIGFsd2F5cworICogc3BlY2lmaWVkIGV4cGxpY2l0bHkgd2hlbiB0aGV5IGFyZSBhZGRlZCB0byB0aGUgdGV4dC4gIE1UZXh0IGRvZXMgbm90IGRvCisgKiBjaGFyYWN0ZXIgc3R5bGUgInByb3BhZ2F0aW9uIiwgd2hlcmUgdW5zdHlsZWQgY2hhcmFjdGVycyB0YWtlIG9uIHRoZQorICogc3R5bGUgb2YgcHJldmlvdXMgY2hhcmFjdGVycy4gIENsaWVudHMgY2FuIGltcGxlbWVudCB0aGlzIGJlaGF2aW9yIGJ5CisgKiBzcGVjaWZ5aW5nIHRoZSBzdHlsZXMgdG8gcHJvcGFnYXRlLgorICogPHA+CisgKiBXaGVuIHVuc3R5bGVkIGNoYXJhY3RlcnMgYXJlIGFkZGVkIHRvIHRoZSB0ZXh0LCB0aGVpciBwYXJhZ3JhcGggc3R5bGUKKyAqIGlzIHRoZSBwYXJhZ3JhcGggc3R5bGUgaW4gZWZmZWN0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsYXN0IG5ldyBjaGFyYWN0ZXIuCisgKiBJZiB0aGUgY2hhcmFjdGVycyBjb250YWluIHBhcmFncmFwaCBzZXBhcmF0b3JzLCB0aGVuIGV2ZXJ5IG5ldyBwYXJhZ3JhcGgKKyAqIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXJhZ3JhcGggc3R5bGUuICBXaGVuIHN0eWxlZCBjaGFyYWN0ZXJzIGFyZSBhZGRlZAorICogdG8gdGhlIHRleHQsIHRoZWlyIHJlc3VsdGluZyBwYXJhZ3JhcGggc3R5bGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAqIGZvbGxvd2luZyBydWxlOgorICogPGJsb2NrcXVvdGU+CisgKiBUaGUgcGFyYWdyYXBoIHN0eWxlcyBpbiB0aGUgbmV3IHRleHQKKyAqIGJlY29tZSB0aGUgcGFyYWdyYXBoIHN0eWxlcyBpbiB0aGUgdGFyZ2V0IHRleHQsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKKyAqIGxhc3QgcGFyYWdyYXBoIGluIHRoZSBuZXcgdGV4dCwgd2hpY2ggdGFrZXMgb24gdGhlIHBhcmFncmFwaCBzdHlsZSBpbgorICogZWZmZWN0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBpbnNlcnRlZCB0ZXh0LgorICogSWYgdGhlIG5ldyB0ZXh0IGlzIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHRhcmdldCB0ZXh0LCB0aGUgbmV3IHRleHQncworICogcGFyYWdyYXBoIHN0eWxlcyB0YWtlIGVmZmVjdCBpbiBhbnkgcGFyYWdyYXBoIGFmZmVjdGVkIGJ5IHRoZSBhZGRpdGlvbi4KKyAqIDwvYmxvY2txdW90ZT4KKyAqIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoZXJlIGlzIGEgc2luZ2xlIHBhcmFncmFwaCBvZiB0ZXh0IHdpdGggc3R5bGUgJ0EnLAorICogZGVsaW1pdGVkIHdpdGggYSBwYXJhZ3JhcGggc2VwYXJhdG9yICdQJzoKKyAqIDxibG9ja3F1b3RlPgorICogQUFBQUFBUAorICogPC9ibG9ja3F1b3RlPgorICogU3VwcG9zZSB0aGUgZm9sbG93aW5nIHN0eWxlZCBwYXJhZ3JhcGhzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBhYm92ZSB0ZXh0CisgKiBhZnRlciB0aGUgZm91cnRoIGNoYXJhY3RlcjoKKyAqIDxibG9ja3F1b3RlPgorICogQkJCQlBDQ0NQRERECisgKiA8L2Jsb2NrcXVvdGU+CisgKiBUaGVuIHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGggc3R5bGUgb2YgZWFjaCBjaGFyYWN0ZXIgaXM6CisgKiA8YmxvY2txdW90ZT4KKyAqIEFBQUFCQkJCUENDQ1BERERBQVAKKyAqIDwvYmxvY2txdW90ZT4KKyAqIFRoZSByZXN1bHRpbmcgcGFyYWdyYXBoIHN0eWxlcyBhcmU6CisgKiA8YmxvY2txdW90ZT4KKyAqIEJCQkJCQkJCUENDQ1BBQUFBQVAKKyAqIDwvYmxvY2txdW90ZT4KKyAqIFNpbWlsYXJseSwgaWYgY2hhcmFjdGVycyBhcmUgZGVsZXRlZCwgdGhlIHBhcmFncmFwaCBzdHlsZSBpbW1lZGlhdGVseQorICogYWZ0ZXIgdGhlIGRlbGV0aW9uIHRha2VzIGVmZmVjdCBvbiB0aGUgcGFyYWdyYXBoIGNvbnRhaW5pbmcgdGhlIGRlbGV0aW9uLgorICogU28sIGlmIGNoYXJhY3RlcnMgNC0xNiB3ZXJlIGRlbGV0ZWQgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBwYXJhZ3JhcGgKKyAqIHN0eWxlcyB3b3VsZCBiZToKKyAqIDxibG9ja3F1b3RlPgorICogQUFBQUFBUAorICogPC9ibG9ja3F1b3RlPgorICogVGhpcyBwYXJhZ3JhcGgtc3R5bGUgcHJvcGFnYXRpb24gcG9saWN5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyA8c3Ryb25nPgorICogZm9sbG93aW5nIHN0eWxlcyB3aW48L3N0cm9uZz4sIHNpbmNlIHN0eWxlcyBhdCB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGgKKyAqIGJlY29tZSB0aGUgc3R5bGUgZm9yIHRoZSBlbnRpcmUgcGFyYWdyYXBoLgorICogPHA+CisgKiBUaGlzIGNsYXNzIGNhbiBhY2N1bXVsYXRlIGEgPHN0cm9uZz5kYW1hZ2VkIHJhbmdlPC9zdHJvbmc+IC0gYW4gaW50ZXJ2YWwgaW4KKyAqIHdoaWNoIGNoYXJhY3RlcnMsIGNoYXJhY3RlciBzdHlsZXMsIG9yIHBhcmFncmFwaCBzdHlsZXMgaGF2ZSBjaGFuZ2VkLiAgVGhpcyBpcworICogdXNlZnVsIGZvciBjbGllbnRzIHN1Y2ggYXMgdGV4dCBlZGl0b3JzIHdoaWNoIHJlZm9ybWF0IGFuZCBkcmF3IHRleHQgYWZ0ZXIKKyAqIGNoYW5nZXMuICBVc3VhbGx5IHRoZSBkYW1hZ2VkIHJhbmdlIGlzIGV4YWN0bHkgdGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMKKyAqIG9wZXJhdGVkIHVwb247ICBob3dldmVyLCBsYXJnZXIgcmFuZ2VzIG1heSBiZSBkYW1hZ2VkIGlmIHBhcmFncmFwaCBzdHlsZXMKKyAqIGNoYW5nZS4KKyAqIEBzZWUgU3R5bGVNb2RpZmllcgorICovCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNVGV4dCBleHRlbmRzIE1Db25zdFRleHQKK3sKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByb3RlY3RlZCBNVGV4dCgpIHsKKyAgICB9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1BSU4gQ0hBUkFDVEVSIE1PRElGSUNBVElPTiBGVU5DVElPTlMKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qKgorKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMgaW4gdGhlIHJhbmdlIFs8Y29kZT5zdGFydDwvY29kZT4sIDxjb2RlPmxpbWl0PC9jb2RlPikgd2l0aCB0aGUgY2hhcmFjdGVycworKiBhbmQgc3R5bGVzIGluIDxjb2RlPnNyY1RleHQ8L2NvZGU+IGluIHRoZSByYW5nZSBbPGNvZGU+c3JjU3RhcnQ8L2NvZGU+LCA8Y29kZT5zcmNMaW1pdDwvY29kZT4pLiAgPGNvZGU+c3JjVGV4dDwvY29kZT4gaXMgbm90CisqIG1vZGlmaWVkLgorKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gYmVnaW5zCisqIEBwYXJhbSBsaW1pdCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBlbmRzLiAgVGhlIGNoYXJhY3RlciBhbmQgc3R5bGUgYXQKKyogPGNvZGU+bGltaXQ8L2NvZGU+IGlzIG5vdCBtb2RpZmllZC4KKyogQHBhcmFtIHNyY1RleHQgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMKKyogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8Y29kZT5zcmNUZXh0PC9jb2RlPiB3aGVyZSBuZXcgY2hhcmFjdGVycyBhbmQgc3R5bGVzIHdpbGwgYmUgb2J0YWluZWQKKyogQHBhcmFtIHNyY0xpbWl0IHRoZSBvZmZzZXQgaW50byA8Y29kZT5zcmNUZXh0PC9jb2RlPiB3aGVyZSB0aGUgbmV3IGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBlbmQKKyovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgTUNvbnN0VGV4dCBzcmNUZXh0LCBpbnQgc3JjU3RhcnQsIGludCBzcmNMaW1pdCk7CisKKy8qKgorKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMgaW4gdGhlIHJhbmdlIFs8Y29kZT5zdGFydDwvY29kZT4sIDxjb2RlPmxpbWl0PC9jb2RlPikgd2l0aCB0aGUgY2hhcmFjdGVycworKiBhbmQgc3R5bGVzIGluIDxjb2RlPnNyY1RleHQ8L2NvZGU+LiAgPGNvZGU+c3JjVGV4dDwvY29kZT4gaXMgbm90CisqIG1vZGlmaWVkLgorKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gYmVnaW5zCisqIEBwYXJhbSBsaW1pdCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBlbmRzLiAgVGhlIGNoYXJhY3RlciBhbmQgc3R5bGUgYXQKKyogPGNvZGU+bGltaXQ8L2NvZGU+IGlzIG5vdCBtb2RpZmllZC4KKyogQHBhcmFtIHNyY1RleHQgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMKKyovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgTUNvbnN0VGV4dCB0ZXh0KTsKKworLyoqCisqIFJlcGxhY2UgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFs8Y29kZT5zdGFydDwvY29kZT4sIDxjb2RlPmxpbWl0PC9jb2RlPikgd2l0aCB0aGUgY2hhcmFjdGVycworKiBpbiA8Y29kZT5zcmNDaGFyczwvY29kZT4gaW4gdGhlIHJhbmdlIFs8Y29kZT5zcmNTdGFydDwvY29kZT4sIDxjb2RlPnNyY0xpbWl0PC9jb2RlPikuICBOZXcgY2hhcmFjdGVycyB0YWtlIG9uIHRoZSBzdHlsZQorKiA8Y29kZT5jaGFyc1N0eWxlPC9jb2RlPi4KKyogPGNvZGU+c3JjQ2hhcnM8L2NvZGU+IGlzIG5vdCBtb2RpZmllZC4KKyogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIHJlcGxhY2Ugb3BlcmF0aW9uIGJlZ2lucworKiBAcGFyYW0gbGltaXQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gZW5kcy4gIFRoZSBjaGFyYWN0ZXIgYXQKKyogPGNvZGU+bGltaXQ8L2NvZGU+IGlzIG5vdCBtb2RpZmllZC4KKyogQHBhcmFtIHNyY0NoYXJzIHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycworKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIDxjb2RlPnNyY0NoYXJzPC9jb2RlPiB3aGVyZSBuZXcgY2hhcmFjdGVycyB3aWxsIGJlIG9idGFpbmVkCisqIEBwYXJhbSBzcmNMaW1pdCB0aGUgb2Zmc2V0IGludG8gPGNvZGU+c3JjQ2hhcnM8L2NvZGU+IHdoZXJlIHRoZSBuZXcgY2hhcmFjdGVycyBlbmQKKyogQHBhcmFtIGNoYXJzU3R5bGUgdGhlIHN0eWxlIG9mIHRoZSBuZXcgY2hhcmFjdGVycworKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBjaGFyW10gc3JjQ2hhcnMsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0LCBBdHRyaWJ1dGVNYXAgY2hhcnNTdHlsZSk7CisKKy8qKgorKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbPGNvZGU+c3RhcnQ8L2NvZGU+LCA8Y29kZT5saW1pdDwvY29kZT4pIHdpdGggdGhlIGNoYXJhY3RlciA8Y29kZT5zcmNDaGFyPC9jb2RlPi4KKyogVGhlIG5ldyBjaGFyYWN0ZXIgdGFrZXMgb24gdGhlIHN0eWxlIDxjb2RlPmNoYXJTdHlsZTwvY29kZT4KKyogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIHJlcGxhY2Ugb3BlcmF0aW9uIGJlZ2lucworKiBAcGFyYW0gbGltaXQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gZW5kcy4gIFRoZSBjaGFyYWN0ZXIgYXQKKyogPGNvZGU+bGltaXQ8L2NvZGU+IGlzIG5vdCBtb2RpZmllZC4KKyogQHBhcmFtIHNyY0NoYXIgdGhlIG5ldyBjaGFyYWN0ZXIKKyogQHBhcmFtIGNoYXJzU3R5bGUgdGhlIHN0eWxlIG9mIHRoZSBuZXcgY2hhcmFjdGVyCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGNoYXIgc3JjQ2hhciwgQXR0cmlidXRlTWFwIGNoYXJTdHlsZSk7CisKKy8qKgorKiBSZXBsYWNlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhpcyBNVGV4dCAoYm90aCBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMpIHdpdGgKKyogdGhlIGNvbnRlbnRzIG9mIDxjb2RlPnNyY1RleHQ8L2NvZGU+LgorKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMgYW5kIHN0eWxlcworKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZXBsYWNlQWxsKE1Db25zdFRleHQgc3JjVGV4dCk7CisKKy8qKgorKiBJbnNlcnQgdGhlIGNvbnRlbnRzIG9mIDxjb2RlPnNyY1RleHQ8L2NvZGU+IChib3RoIGNoYXJhY3RlcnMgYW5kIHN0eWxlcykgaW50byB0aGlzCisqIE1UZXh0IGF0IHRoZSBwb3NpdGlvbiBzcGVjaWZpZWQgYnkgPGNvZGU+cG9zPC9jb2RlPi4KKyogQHBhcmFtIHBvcyBUaGUgY2hhcmFjdGVyIG9mZnNldCB3aGVyZSB0aGUgbmV3IHRleHQgaXMgdG8gYmUgaW5zZXJ0ZWQuCisqIEBwYXJhbSBzcmNUZXh0IFRoZSB0ZXh0IHRvIGluc2VydC4gKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBpbnNlcnQoaW50IHBvcywgTUNvbnN0VGV4dCBzcmNUZXh0KTsKKworLyoqCisqIEFwcGVuZCB0aGUgY29udGVudHMgb2YgPGNvZGU+c3JjVGV4dDwvY29kZT4gKGJvdGggY2hhcmFjdGVycyBhbmQgc3R5bGVzKSB0byB0aGUKKyogZW5kIG9mIHRoaXMgTVRleHQuCisqIEBwYXJhbSBzcmNUZXh0IFRoZSB0ZXh0IHRvIGFwcGVuZC4gKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhcHBlbmQoTUNvbnN0VGV4dCBzcmNUZXh0KTsKKworLyoqCisqIERlbGV0ZSB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGNoYXJhY3RlcnMgKGFuZCBzdHlsZXMpLgorKiBAcGFyYW0gc3RhcnQgT2Zmc2V0IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gZGVsZXRlLgorKiBAcGFyYW0gbGltaXQgT2Zmc2V0IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHJhbmdlIHRvIGRlbGV0ZS4gKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZW1vdmUoaW50IHN0YXJ0LCBpbnQgbGltaXQpOworCisvKioKKyogRGVsZXRlIGFsbCBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMuCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbW92ZSgpOworCisvKioKKyogQ3JlYXRlIGFuIE1UZXh0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBpbiB0aGUgcmFuZ2UKKyogWzxjb2RlPnN0YXJ0PC9jb2RlPiwgPGNvZGU+bGltaXQ8L2NvZGU+KS4KKyogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIG5ldyB0ZXh0CisqIEBwYXJhbSBsaW1pdCBvZmZzZXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBuZXcgdGV4dAorKiBAcmV0dXJuIGFuIE1Db25zdFRleHQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2UKKyovCisgICAgcHVibGljIGFic3RyYWN0IE1UZXh0IGV4dHJhY3RXcml0YWJsZShpbnQgc3RhcnQsIGludCBsaW1pdCk7CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU1RPUkFHRSBNQU5BR0VNRU5UCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorKiBNaW5pbWl6ZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBNVGV4dCBvYmplY3QuCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNvbXByZXNzKCk7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNUWUxFIE1PRElGSUNBVElPTgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyogU2V0IHRoZSBjaGFyYWN0ZXIgc3R5bGUgb2YgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIE1UZXh0IG9iamVjdCB0bworKiA8Y29kZT5BdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUDwvY29kZT4uCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbW92ZUNoYXJhY3RlclN0eWxlcygpOworCisvKioKKyogSW52b2tlIHRoZSBnaXZlbiBtb2RpZmllciBvbiBhbGwgY2hhcmFjdGVyIHN0eWxlcyBmcm9tIHN0YXJ0IHRvIGxpbWl0LgorKiBAcGFyYW0gbW9kaWZpZXIgdGhlIG1vZGlmaWVyIHRvIGFwcGx5IHRvIHRoZSByYW5nZS4KKyogQHBhcmFtIHN0YXJ0IHRoZSBzdGFydCBvZiB0aGUgcmFuZ2Ugb2YgdGV4dCB0byBtb2RpZnkuCisqIEBwYXJhbSBsaW1pdCB0aGUgbGltaXQgb2YgdGhlIHJhbmdlIG9mIHRleHQgdG8gbW9kaWZ5LgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBtb2RpZnlDaGFyYWN0ZXJTdHlsZXMoaW50IHN0YXJ0LCBpbnQgbGltaXQsIFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIpOworCisvKioKKyogSW52b2tlIHRoZSBnaXZlbiBtb2RpZmllciBvbiBhbGwgcGFyYWdyYXBoIHN0eWxlcyBpbiBwYXJhZ3JhcGhzCisqIGNvbnRhaW5pbmcgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW3N0YXJ0LCBsaW1pdCkuCisqIEBwYXJhbSBtb2RpZmllciB0aGUgbW9kaWZpZXIgdG8gYXBwbHkgdG8gdGhlIHJhbmdlLgorKiBAcGFyYW0gc3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBvZiB0ZXh0IHRvIG1vZGlmeS4KKyogQHBhcmFtIGxpbWl0IHRoZSBsaW1pdCBvZiB0aGUgcmFuZ2Ugb2YgdGV4dCB0byBtb2RpZnkuCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG1vZGlmeVBhcmFncmFwaFN0eWxlcyhpbnQgc3RhcnQsIGludCBsaW1pdCwgU3R5bGVNb2RpZmllciBtb2RpZmllcik7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIERBTUFHRUQgUkFOR0UKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qKgorKiBSZXNldCB0aGUgZGFtYWdlZCByYW5nZSB0byBhbiBlbXB0eSBpbnRlcnZhbCwgYW5kIGJlZ2luIGFjY3VtdWxhdGluZyB0aGUgZGFtYWdlZAorKiByYW5nZS4gIFRoZSBkYW1hZ2VkIHJhbmdlIGluY2x1ZGVzIGV2ZXJ5IGluZGV4IHdoZXJlIGEgY2hhcmFjdGVyLCBjaGFyYWN0ZXIgc3R5bGUsCisqIG9yIHBhcmFncmFwaCBzdHlsZSBoYXMgY2hhbmdlZC4KKyogQHNlZSAjZGFtYWdlZFJhbmdlU3RhcnQKKyogQHNlZSAjZGFtYWdlZFJhbmdlTGltaXQKKyovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgcmVzZXREYW1hZ2VkUmFuZ2UoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvUGFyYWdyYXBoQnVmZmVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1BhcmFncmFwaEJ1ZmZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlOWYyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1BhcmFncmFwaEJ1ZmZlci5qYXZhCkBAIC0wLDAgKzEsNzE2IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBQYXJhZ3JhcGhCdWZmZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozNiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQ7CisKK2ltcG9ydCBqYXZhLmlvLkV4dGVybmFsaXphYmxlOworaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXQ7CitpbXBvcnQgamF2YS5pby5PYmplY3RPdXRwdXQ7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKKworLyoKKyAgICBSaWdodCBub3csIHlvdSBoYXZlIHRvIGNvbnN0cnVjdCB0aGlzIGNsYXNzIHdpdGggYSBjaGFyQnVmZmVyLiAgVGhhdCdzIHByZXR0eSB1Z2x5Li4uICovCisKKy8qCisgICAgOC84Lzk2CisgICAgICAgIEFkZGVkIHJlcGxhY2UgbWV0aG9kLCB3aGljaCByZWFkcyBzdHlsZXMgZnJvbSBhIFBhcmFncmFwaEl0ZXJhdG9yLgorICAgICAgICBBbHNvLCBhZGRlZCBhIGNvbnN0cnVjdG9yIHdoaWNoIHRha2VzIGEgUGFyYWdyYXBoSXRlcmF0b3IuCisgICAgICAgIFRoZXNlIG1ldGhvZHMgYXJlIGZvciBjb3B5L3Bhc3RlIHN1cHBvcnQuCisKKyAgICA4LzIyLzk2CisgICAgICAgIFJlcGxhY2UgbWV0aG9kICh3aGljaCB0YWtlcyBhbiBpdGVyYXRvciBhcyBhbiBhcmd1bWVudCkgdGVzdHMgZm9yIGEKKyAgICAgICAgMC1sZW5ndGggaXRlcmF0b3IuCisKKyAgICA5LzMwLzk2CisgICAgICAgIHtqYnJ9IG1vZGlmaWVkIHBhcmFncmFwaExpbWl0KCk7CisKKyAgICAxMC8yMy85NgorICAgICAgICBUaGlzIGNsYXNzIG5vdyBtYWludGFpbnMgcGFyYWdyYXBoIHN0eWxlcy4gIEFsc28gaGFzIGEgdGltZXN0YW1wLgorCisgICAgMTAvMjUvOTYKKyAgICAgICAgSG9sZHMgb24gdG8gU3R5bGUgaW5zdGVhZCBvZiBTdHlsZS4KKworICAgIDcvMzEvOTggU3dpdGNoZWQgdG8gQXR0cmlidXRlTWFwCisKKyovCisKKy8qKgorKiBUaGlzIGNsYXNzIHN0b3JlcyBvZmZzZXRzIHdoZXJlIHBhcmFncmFwaCBicmVha3Mgb2NjdXIsIGFuZCB0aGUgc3R5bGUgYXBwbGllZCB0bworKiBlYWNoIHBhcmFncmFwaC4KKyoKKyogVGhlIG9mZnNldHMgd2hlcmUgcGFyYWdyYXBoIGJyZWFrcyBvY2N1ciBhcmUgc3RvcmVkIGluIGEgUnVuQXJyYXkgb2JqZWN0LiAgVGhpcyBpcworKiBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgaXQgbWFrZXMgc2Nhbm5pbmcgdGhlIHRleHQgZm9yIHBhcmFncmFwaCBicmVha3MgdW5uZWNlc3NhcnkuCisqIEhvd2V2ZXIsIGl0IG1ha2VzIGRldGVybWluaW5nIHdoZXJlIHBhcmFncmFwaHMgc3RhcnQgYSBsaXR0bGUgY29uZnVzaW5nLiAgSWYgdGhlcmUgaXMgYQorKiBwYXJhZ3JhcGggYnJlYWsgYXQgb2Zmc2V0IHAsIHRoZW4gdGhlcmUgd2lsbCBiZSBhIHBhcmFncmFwaCBzdGFydCBhdCBvZmZzZXQgcCsxLgorKiBJZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQgaXMgYSBwYXJhZ3JhcGggYnJlYWssIHRoZXJlIHdpbGwgYmUgYSBydW4gYXJyYXkgZW50cnkKKyogZm9yIHRoYXQgY2hhcmFjdGVyIChhbmQgYWxzbyBhIHBhcmFncmFwaCBzdHlsZSBmb3IgdGhhdCBwYXJhZ3JhcGgsIGV2ZW4gdGhvdWdoIHRoZQorKiBzdHlsZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgdGV4dCkuCisqCisqIFRoZSBzdHlsZSBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoIGluIHRoZSB0ZXh0IGlzIGluIHRoZSBmRmlyc3RTdHlsZSBtZW1iZXIuICBPdGhlcgorKiBwYXJhZ3JhcGggc3R5bGVzIGFyZSBzdG9yZWQgaW4gdGhlIGZTdHlsZVRhYmxlIGFycmF5LCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lcjogIHRoZQorKiBwYXJhZ3JhcGggd2l0aCBiZWdpbnMgYXQgb2Zmc2V0IGZSdW5BcnJheS5mUnVuU3RhcnRbaV0rMSBoYXMgc3R5bGUgZlN0eWxlVGFibGVbaV0uCisqIFRoZSBzdHlsZSB0YWJsZSdzICJnYXAgcmFuZ2UiIGlzIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBSdW5BcnJheS4KKyoKKyogVGhpcyBjbGFzcyBwcm9wb2dhdGVzIHBhcmFncmFwaCBzdHlsZXMgaW4gdGhlICJNaWNyb3NvZnQgV29yZCIgZmFzaGlvbjogIHN0eWxlcworKiBwcm9wb2dhdGUgYmFja3dhcmQgZnJvbSBwYXJhZ3JhcGggYnJlYWtzLgorKgorKiBUaGlzIGNsYXNzIG1haW50YWlucyBhIHRpbWUgc3RhbXAsIHdoaWNoIGNoYW5nZXMgZXZlcnkgdGltZSBleHRyYSBmb3JtYXR0aW5nIChmb3JtYXR0aW5nCisqIG9uIGEgcmFuZ2Ugb3RoZXIgdGhhbiB0aGUgY3VycmVudCBzZWxlY3Rpb24pIGlzIG5lZWRlZDsgIGZvciBleGFtcGxlLCB3aGVuIGEgcGFyYWdyYXBoCisqIGJyZWFrIGlzIHJlbW92ZWQuCisqLworCisKK2ZpbmFsIGNsYXNzIFBhcmFncmFwaEJ1ZmZlciBleHRlbmRzIE1QYXJhZ3JhcGhCdWZmZXIgaW1wbGVtZW50cyBFeHRlcm5hbGl6YWJsZSB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBrSW5pdGlhbFNpemUgPSAxMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ1VSUkVOVF9WRVJTSU9OID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAyMjM1NjkzNDsKKworICAgIHByaXZhdGUgUnVuQXJyYXkgZlJ1bkFycmF5OworICAgIHByaXZhdGUgQXR0cmlidXRlTWFwW10gZlN0eWxlVGFibGU7CisgICAgcHJpdmF0ZSBBdHRyaWJ1dGVNYXAgZkZpcnN0U3R5bGU7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzUGFyYWdyYXBoQnJlYWsoY2hhciBjKSB7CisKKyAgICAgICAgcmV0dXJuIGMgPT0nXHUyMDI5JyB8fCBjID09ICdcbic7CisgICAgfQorCisvKioKKyogQ29uc3RydWN0IGEgbmV3IHBhcmFncmFwaCBidWZmZXIgZnJvbSB0aGUgY2hhcmFjdGVycyBpbiA8dHQ+Y2hhckJ1ZmZlcjwvdHQ+LgorKi8KKyAgICBQYXJhZ3JhcGhCdWZmZXIoTUNoYXJCdWZmZXIgY2hhckJ1ZmZlcikgeworCisgICAgICAgIHRoaXMoY2hhckJ1ZmZlci5sZW5ndGgoKSk7CisKKyAgICAgICAgLy8gc2NhbiB0ZXh0IGZvciBwYXJhZ3JhcGggYm91bmRhcmllcworCisgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKTsKKworICAgICAgICBmb3IgKGludCBwb3M9MDsgcG9zIDwgdGV4dExlbmd0aDsgcG9zKyspIHsKKworICAgICAgICAgICAgaWYgKGlzUGFyYWdyYXBoQnJlYWsoY2hhckJ1ZmZlci5hdChwb3MpKSkgeworICAgICAgICAgICAgICAgIGlmIChmUnVuQXJyYXkuZlBvc0VuZCsxID49IGZSdW5BcnJheS5mTmVnU3RhcnQpCisgICAgICAgICAgICAgICAgICAgIGV4cGFuZFN0eWxlVGFibGUoKTsKKyAgICAgICAgICAgICAgICBmUnVuQXJyYXkuZlJ1blN0YXJ0WysrZlJ1bkFycmF5LmZQb3NFbmRdID0gcG9zOworICAgICAgICAgICAgICAgIGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mUG9zRW5kXSA9IGZGaXJzdFN0eWxlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKy8qKgorKiBQcml2YXRlIGNvbnN0cnVjdG9yLgorKi8KKyAgICBwcml2YXRlIFBhcmFncmFwaEJ1ZmZlcihpbnQgaW5pdGlhbExlbmd0aCkgeworCisgICAgICAgIGZSdW5BcnJheSA9IG5ldyBSdW5BcnJheShrSW5pdGlhbFNpemUsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBmU3R5bGVUYWJsZSA9IG5ldyBBdHRyaWJ1dGVNYXBbZlJ1bkFycmF5LmdldEFycmF5TGVuZ3RoKCldOworCisgICAgICAgIGZGaXJzdFN0eWxlID0gQXR0cmlidXRlTWFwLkVNUFRZX0FUVFJJQlVURV9NQVA7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90ZTogdGhpcyBjb25zdHJ1Y3RvciBpcyBPTkxZIGZvciB1c2UgYnkgdGhlIFNlcmlhbGl6YXRpb24KKyAgICAgKiBtZWNoYW5pc20uICBJdCBkb2VzIG5vdCBsZWF2ZSB0aGlzIG9iamVjdCBpbiBhIHZhbGlkIHN0YXRlIQorICAgICAqLworICAgIHB1YmxpYyBQYXJhZ3JhcGhCdWZmZXIoKSB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChPYmplY3RPdXRwdXQgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIGNvbXByZXNzKCk7CisgICAgICAgIG91dC53cml0ZUludChDVVJSRU5UX1ZFUlNJT04pOworICAgICAgICBvdXQud3JpdGVPYmplY3QoZlJ1bkFycmF5KTsKKyAgICAgICAgb3V0LndyaXRlT2JqZWN0KGZTdHlsZVRhYmxlKTsKKyAgICAgICAgb3V0LndyaXRlT2JqZWN0KGZGaXJzdFN0eWxlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZWFkRXh0ZXJuYWwoT2JqZWN0SW5wdXQgaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworCisgICAgICAgIGlmIChpbi5yZWFkSW50KCkgIT0gQ1VSUkVOVF9WRVJTSU9OKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkludmFsaWQgdmVyc2lvbiBvZiBQYXJhZ3JhcGhCdWZmZXIiKTsKKyAgICAgICAgfQorICAgICAgICBmUnVuQXJyYXkgPSAoUnVuQXJyYXkpIGluLnJlYWRPYmplY3QoKTsKKyAgICAgICAgZlN0eWxlVGFibGUgPSAoQXR0cmlidXRlTWFwW10pIGluLnJlYWRPYmplY3QoKTsKKyAgICAgICAgZkZpcnN0U3R5bGUgPSAoQXR0cmlidXRlTWFwKSBpbi5yZWFkT2JqZWN0KCk7CisgICAgfQorCisvKioKKyogU2hpZnQgdGFibGUgc3VjaCB0aGF0IHRoZSBsYXN0IHBvc2l0aXZlIHJ1biBzdGFydHMgYmVmb3JlIHBvcy4KKyovCisgICAgcHJpdmF0ZSB2b2lkIHNoaWZ0VGFibGVUbyhpbnQgcG9zKSB7CisKKyAgICAgICAgaW50IG9sZE5lZ1N0YXJ0ID0gZlJ1bkFycmF5LmZOZWdTdGFydDsKKyAgICAgICAgaW50IG9sZFBvc0VuZCA9IGZSdW5BcnJheS5mUG9zRW5kOworCisgICAgICAgIGZSdW5BcnJheS5zaGlmdFRhYmxlVG8ocG9zKTsKKworICAgICAgICBpZiAob2xkUG9zRW5kID4gZlJ1bkFycmF5LmZQb3NFbmQpCisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZTdHlsZVRhYmxlLCBmUnVuQXJyYXkuZlBvc0VuZCsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmU3R5bGVUYWJsZSwgZlJ1bkFycmF5LmZOZWdTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkUG9zRW5kLWZSdW5BcnJheS5mUG9zRW5kKTsKKyAgICAgICAgZWxzZSBpZiAob2xkTmVnU3RhcnQgPCBmUnVuQXJyYXkuZk5lZ1N0YXJ0KQorICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShmU3R5bGVUYWJsZSwgb2xkTmVnU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZTdHlsZVRhYmxlLCBvbGRQb3NFbmQrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlJ1bkFycmF5LmZOZWdTdGFydC1vbGROZWdTdGFydCk7CisgICAgfQorCisvKioKKyogVXBkYXRlIHRoZSBzdHlsZSB0YWJsZSB0byByZWZsZWN0IGEgY2hhbmdlIGluIHRoZSBSdW5BcnJheSdzIHNpemUuCisqLworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVBcnJheVJlc2l6ZShpbnQgb2xkTmVnU3RhcnQpIHsKKworICAgICAgICBBdHRyaWJ1dGVNYXAgbmV3U3R5bGVUYWJsZVtdID0gbmV3IEF0dHJpYnV0ZU1hcFtmUnVuQXJyYXkuZ2V0QXJyYXlMZW5ndGgoKV07CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZlN0eWxlVGFibGUsIDAsIG5ld1N0eWxlVGFibGUsIDAsIGZSdW5BcnJheS5mUG9zRW5kKzEpOworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZTdHlsZVRhYmxlLCBvbGROZWdTdGFydCwgbmV3U3R5bGVUYWJsZSwgZlJ1bkFycmF5LmZOZWdTdGFydCwgKGZSdW5BcnJheS5nZXRBcnJheUxlbmd0aCgpLWZSdW5BcnJheS5mTmVnU3RhcnQpKTsKKyAgICAgICAgZlN0eWxlVGFibGUgPSBuZXdTdHlsZVRhYmxlOworICAgIH0KKworICAgIHZvaWQgY29tcHJlc3MoKSB7CisKKyAgICAgICAgaW50IG9sZE5lZ1N0YXJ0ID0gZlJ1bkFycmF5LmZOZWdTdGFydDsKKyAgICAgICAgZlJ1bkFycmF5LmNvbXByZXNzKCk7CisgICAgICAgIGlmIChmUnVuQXJyYXkuZk5lZ1N0YXJ0ICE9IG9sZE5lZ1N0YXJ0KSB7CisgICAgICAgICAgICBoYW5kbGVBcnJheVJlc2l6ZShvbGROZWdTdGFydCk7CisgICAgICAgIH0KKyAgICB9CisKKy8qKgorKiBNYWtlIG1vcmUgcm9vbSBpbiBydW4vc3R5bGUgdGFibGVzLgorKi8KKyAgICBwcml2YXRlIHZvaWQgZXhwYW5kU3R5bGVUYWJsZSgpIHsKKworICAgICAgICBpbnQgb2xkTmVnU3RhcnQgPSBmUnVuQXJyYXkuZk5lZ1N0YXJ0OworICAgICAgICBmUnVuQXJyYXkuZXhwYW5kUnVuVGFibGUoKTsKKyAgICAgICAgaGFuZGxlQXJyYXlSZXNpemUob2xkTmVnU3RhcnQpOworICAgIH0KKworLyoqCisqIFByb2Nlc3MgYSBjaGFyYWN0ZXIgaW5zZXJ0aW9uIGF0IG9mZnNldCA8dHQ+c3RhcnQ8L3R0Pi4KKyogSWYgYSBwYXJhZ3JhcGggYnJlYWsgd2FzIGluc2VydGVkLCBwcm9wb2dhdGUgcGFyYWdyYXBoIHN0eWxlIGF0CisqIDx0dD5zdGFydDwvdHQ+IHRvIG5ldyBwYXJhZ3JhcGguCisqLworICAgIHB1YmxpYyB2b2lkIGluc2VydFRleHQoaW50IHN0YXJ0LCBjaGFyIGluc2VydGVkQ2hhcikgeworCisgICAgICAgIHNoaWZ0VGFibGVUbyhzdGFydCk7CisgICAgICAgIGlmIChpc1BhcmFncmFwaEJyZWFrKGluc2VydGVkQ2hhcikpIHsKKyAgICAgICAgICAgIGlmIChmUnVuQXJyYXkuZlBvc0VuZCsxID49IGZSdW5BcnJheS5mTmVnU3RhcnQpCisgICAgICAgICAgICAgICAgZXhwYW5kU3R5bGVUYWJsZSgpOworICAgICAgICAgICAgZlJ1bkFycmF5LmZSdW5TdGFydFsrK2ZSdW5BcnJheS5mUG9zRW5kXSA9IHN0YXJ0OworICAgICAgICAgICAgZlN0eWxlVGFibGVbZlJ1bkFycmF5LmZQb3NFbmRdID0KKyAgICAgICAgICAgICAgICAoZlJ1bkFycmF5LmZQb3NFbmQgPT0gMCk/IGZGaXJzdFN0eWxlIDogZlN0eWxlVGFibGVbZlJ1bkFycmF5LmZQb3NFbmQtMV07CisgICAgICAgICAgICBmUnVuQXJyYXkucnVuU3RhcnRzQ2hhbmdlZCgpOworICAgICAgICB9CisKKyAgICAgICAgLy9mUnVuQXJyYXkuZkN1clRleHRMZW5ndGgrKzsKKyAgICAgICAgZlJ1bkFycmF5LmFkZFRvQ3VyVGV4dExlbmd0aCgxKTsKKyAgICB9CisKKy8qKgorKiBQcm9jZXNzIGNoYXJhY3RlciBpbnNlcnRpb24gYXQgb2Zmc2V0IDx0dD5zdGFydDwvdHQ+LgorKiBFYWNoIG5ldyBwYXJhZ3JhcGggZ2V0cyBwYXJhZ3JhcGggc3R5bGUgYXQKKyogPHR0PnN0YXJ0PC90dD4uCisqLworICAgIHB1YmxpYyB2b2lkIGluc2VydFRleHQoaW50IHN0YXJ0LCBjaGFyIHNyY0NoYXJzW10sIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0KSB7CisKKyAgICAgICAgc2hpZnRUYWJsZVRvKHN0YXJ0KTsKKworICAgICAgICBpbnQgYWRqdXN0ID0gc3RhcnQgLSBzcmNTdGFydDsKKworICAgICAgICBmb3IgKGludCBpPXNyY1N0YXJ0OyAgaSA8IHNyY0xpbWl0OyBpKyspCisgICAgICAgICAgICBpZiAoaXNQYXJhZ3JhcGhCcmVhayhzcmNDaGFyc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZlJ1bkFycmF5LmZQb3NFbmQrMSA+PSBmUnVuQXJyYXkuZk5lZ1N0YXJ0KQorICAgICAgICAgICAgICAgICAgICBleHBhbmRTdHlsZVRhYmxlKCk7CisgICAgICAgICAgICAgICAgZlJ1bkFycmF5LmZSdW5TdGFydFsrK2ZSdW5BcnJheS5mUG9zRW5kXSA9IGFkanVzdCArIGk7CisgICAgICAgICAgICAgICAgZlN0eWxlVGFibGVbZlJ1bkFycmF5LmZQb3NFbmRdID0KKyAgICAgICAgICAgICAgICAgICAgKGZSdW5BcnJheS5mUG9zRW5kID09IDApPyBmRmlyc3RTdHlsZSA6IGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mUG9zRW5kLTFdOworICAgICAgICAgICAgICAgIGZSdW5BcnJheS5ydW5TdGFydHNDaGFuZ2VkKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy9mUnVuQXJyYXkuZkN1clRleHRMZW5ndGggKz0gKHNyY0xpbWl0LXNyY1N0YXJ0KTsKKyAgICAgICAgZlJ1bkFycmF5LmFkZFRvQ3VyVGV4dExlbmd0aChzcmNMaW1pdC1zcmNTdGFydCk7CisgICAgfQorCisvKioKKyogUHJvY2VzcyBkZWxldGlvbiBieSByZW1vdmluZyBwYXJhZ3JhcGggYnJlYWtzIGNvbnRhaW5lZCBpbgorKiBkZWxldGVkIHJhbmdlLiAgUHJvcG9nYXRlIHBhcmFncmFwaCBzdHlsZXMgYmFja3dhcmQsIGlmIG5lY2Vzc2FyeS4KKyovCisgICAgcHVibGljIHZvaWQgZGVsZXRlVGV4dChpbnQgc3RhcnQsIGludCBsaW1pdCwgaW50W10gZGFtYWdlZFJhbmdlKSB7CisKKyAgICAgICAgaW50IGxlbmd0aCA9IGxpbWl0IC0gc3RhcnQ7CisgICAgICAgIGlmIChsZW5ndGggPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHJhbmdlIik7CisgICAgICAgIH0KKworICAgICAgICBzaGlmdFRhYmxlVG8obGltaXQpOworCisgICAgICAgIGludCBuZXdFbmQgPSBmUnVuQXJyYXkuZmluZFJ1bkNvbnRhaW5pbmcoc3RhcnQtMSk7CisKKyAgICAgICAgaWYgKG5ld0VuZCAhPSBmUnVuQXJyYXkuZlBvc0VuZCkgeworCisgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgcHJvcFN0eWxlID0gZlN0eWxlVGFibGVbZlJ1bkFycmF5LmZQb3NFbmRdOworICAgICAgICAgICAgYm9vbGVhbiBwcm9wb2dhdGVkOworCisgICAgICAgICAgICBpZiAobmV3RW5kID09IC0xKSB7CisgICAgICAgICAgICAgICAgcHJvcG9nYXRlZCA9ICFwcm9wU3R5bGUuZXF1YWxzKGZGaXJzdFN0eWxlKTsKKyAgICAgICAgICAgICAgICBmRmlyc3RTdHlsZSA9IHByb3BTdHlsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHByb3BvZ2F0ZWQgPSAhcHJvcFN0eWxlLmVxdWFscyhmU3R5bGVUYWJsZVtuZXdFbmRdKTsKKyAgICAgICAgICAgICAgICBmU3R5bGVUYWJsZVtuZXdFbmRdID0gcHJvcFN0eWxlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJvcG9nYXRlZCkgeworICAgICAgICAgICAgICAgIGludCBwU3RhcnQgPSAobmV3RW5kPT0tMSk/IDAgOiBmUnVuQXJyYXkuZlJ1blN0YXJ0W25ld0VuZF0gKyAxOworICAgICAgICAgICAgICAgIGRhbWFnZWRSYW5nZVswXSA9IE1hdGgubWluKGRhbWFnZWRSYW5nZVswXSwgcFN0YXJ0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZlJ1bkFycmF5LmZQb3NFbmQgPSBuZXdFbmQ7CisgICAgICAgIH0KKworICAgICAgICBmUnVuQXJyYXkuYWRkVG9DdXJUZXh0TGVuZ3RoKC1sZW5ndGgpOworCisgICAgICAgIGZSdW5BcnJheS5ydW5TdGFydHNDaGFuZ2VkKCk7CisgICAgfQorCisvKioKKyogUmV0dXJucyB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCBjb250YWluaW5nIG9mZnNldCA8dHQ+cG9zPC90dD4uCisqLworICAgIHB1YmxpYyBpbnQgcGFyYWdyYXBoU3RhcnQoaW50IHBvcykgeworCisgICAgICAgIGludCBydW4gPSBmUnVuQXJyYXkuZmluZFJ1bkNvbnRhaW5pbmcocG9zLTEpOworICAgICAgICBpZiAocnVuID09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmUnVuQXJyYXkuZ2V0TG9naWNhbFJ1blN0YXJ0KHJ1bikgKyAxOworICAgICAgICB9CisgICAgfQorCisvKioKKyogUmV0dXJucyB0aGUgbGltaXQgb2YgdGhlIHBhcmFncmFwaCBjb250YWluaW5nIG9mZnNldCA8dHQ+cG9zPC90dD4uCisqLworICAgIHB1YmxpYyBpbnQgcGFyYWdyYXBoTGltaXQoaW50IHBvcykgeworCisgICAgICAgIGludCBydW4gPSBmUnVuQXJyYXkuZmluZFJ1bkNvbnRhaW5pbmcocG9zLTEpOworCisgICAgICAgIGlmIChydW4gPT0gZlJ1bkFycmF5LmZQb3NFbmQpCisgICAgICAgICAgICBydW4gPSBmUnVuQXJyYXkuZk5lZ1N0YXJ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBydW4rKzsKKworICAgICAgICBpZiAocnVuID09IGZSdW5BcnJheS5nZXRBcnJheUxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzdGFydCA9IGZSdW5BcnJheS5nZXRMb2dpY2FsUnVuU3RhcnQocnVuKTsKKworICAgICAgICByZXR1cm4gc3RhcnQrMTsKKyAgICB9CisKKy8qKgorKiBSZXR1cm5zIHRoZSBzdHlsZSBvZiB0aGUgcGFyYWdyYXBoIGNvbnRhaW5pbmcgb2Zmc2V0IDx0dD5wb3M8L3R0Pi4KKyovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBwYXJhZ3JhcGhTdHlsZUF0KGludCBvZmZzZXQpIHsKKworICAgICAgICBpbnQgcnVuID0gZlJ1bkFycmF5LmZpbmRSdW5Db250YWluaW5nKG9mZnNldC0xKTsKKyAgICAgICAgaWYgKHJ1biA8IDApCisgICAgICAgICAgICByZXR1cm4gZkZpcnN0U3R5bGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmU3R5bGVUYWJsZVtydW5dOworICAgIH0KKworLyoqCisqIENyZWF0ZSBwYXJhZ3JhcGggaXRlcmF0b3IuCisqLworLyoKKyAgICBwdWJsaWMgTVBhcmFncmFwaEl0ZXJhdG9yIGNyZWF0ZVBhcmFncmFwaEl0ZXJhdG9yKGludCBzdGFydCwgaW50IGxpbWl0KSB7CisKKyAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ3JhcGhJdGVyYXRvcihzdGFydCwgbGltaXQpOworICAgIH0KKyovCisKKy8qKgorKiBDYWxsZWQgYnkgaXRlcmF0b3IgdG8gZ2V0IHJ1biBpbmZvLgorKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0SXRlcmF0b3IoaW50IHBvcywgUGFyYWdyYXBoSXRlcmF0b3IgaXRlcikgeworCisgICAgICAgIGlmICgocG9zIDwgMCkgfHwgKHBvcyA+PSBmUnVuQXJyYXkuZ2V0Q3VyVGV4dExlbmd0aCgpKSkgeworICAgICAgICAgICAgaXRlci5zZXQoMCwgMCwga05vUnVuLCBudWxsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBydW47CisKKyAgICAgICAgaWYgKHBvcyA+IDApCisgICAgICAgICAgICBydW4gPSBmUnVuQXJyYXkuZmluZFJ1bkNvbnRhaW5pbmcocG9zLTEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBydW4gPSAtMTsKKworICAgICAgICBzZXRJdGVyYXRvclVzaW5nUnVuKHJ1biwgaXRlcik7CisgICAgfQorCisvKioKKyogQ2FsbGVkIGJ5IGl0ZXJhdG9yIHRvIGdldCBydW4gaW5mby4KKyovCisgICAgcHJpdmF0ZSB2b2lkIHNldEl0ZXJhdG9yVXNpbmdSdW4oaW50IHJ1biwgUGFyYWdyYXBoSXRlcmF0b3IgaXRlcikgeworCisgICAgICAgIGludCBsYXN0VmFsaWRSdW4gPSBmUnVuQXJyYXkubGFzdFJ1bigpOworCisgICAgICAgIGlmIChydW4gPCAtMSB8fCBydW4gPiBsYXN0VmFsaWRSdW4pIHsKKyAgICAgICAgICAgIGl0ZXIuc2V0KDAsIDAsIGtOb1J1biwgbnVsbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVuID09IGZSdW5BcnJheS5mUG9zRW5kKzEpCisgICAgICAgICAgICBydW4gPSBmUnVuQXJyYXkuZk5lZ1N0YXJ0OworICAgICAgICBlbHNlIGlmIChydW4gPT0gZlJ1bkFycmF5LmZOZWdTdGFydC0xKQorICAgICAgICAgICAgcnVuID0gZlJ1bkFycmF5LmZQb3NFbmQ7CisKKyAgICAgICAgaW50IHJ1blN0YXJ0OworICAgICAgICBBdHRyaWJ1dGVNYXAgc3R5bGU7CisKKyAgICAgICAgaWYgKHJ1biA8IDApIHsKKyAgICAgICAgICAgIHJ1blN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHN0eWxlID0gZkZpcnN0U3R5bGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBydW5TdGFydCA9IGZSdW5BcnJheS5mUnVuU3RhcnRbcnVuXTsKKyAgICAgICAgICAgIHN0eWxlID0gZlN0eWxlVGFibGVbcnVuXTsKKyAgICAgICAgICAgIGlmIChydW5TdGFydCA8IDApCisgICAgICAgICAgICAgICAgcnVuU3RhcnQgKz0gZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIHJ1blN0YXJ0Kys7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbmV4dFJ1bjsKKworICAgICAgICBpZiAocnVuID09IGZSdW5BcnJheS5mUG9zRW5kKQorICAgICAgICAgICAgbmV4dFJ1biA9IGZSdW5BcnJheS5mTmVnU3RhcnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5leHRSdW4gPSBydW4gKyAxOworCisgICAgICAgIGludCBydW5MaW1pdDsKKworICAgICAgICBpZiAobmV4dFJ1biA+PSBmUnVuQXJyYXkuZ2V0QXJyYXlMZW5ndGgoKSkKKyAgICAgICAgICAgIHJ1bkxpbWl0ID0gZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBydW5MaW1pdCA9IGZSdW5BcnJheS5mUnVuU3RhcnRbbmV4dFJ1bl07CisgICAgICAgICAgICBpZiAocnVuTGltaXQgPCAwKQorICAgICAgICAgICAgICAgIHJ1bkxpbWl0ICs9IGZSdW5BcnJheS5nZXRDdXJUZXh0TGVuZ3RoKCk7CisgICAgICAgICAgICBydW5MaW1pdCsrOworICAgICAgICAgICAgfQorCisgICAgICAgIGl0ZXIuc2V0KHJ1blN0YXJ0LCBydW5MaW1pdCwgcnVuLCBzdHlsZSk7CisgICAgfQorCisvKioKKyogUmVwbGFjZSBwYXJhZ3JhcGggYnJlYWtzL3N0eWxlcyBiZXR3ZWVuIHN0YXJ0IGFuZCBsZW5ndGggd2l0aCBwYXJhZ3JhcGggYnJlYWtzL3N0eWxlcworKiBmcm9tIDx0dD5zcmNUZXh0PC90dD4uCisqIEBwYXJhbSBzdGFydCBhbiBvZmZzZXQgaW50byB0aGUgdGV4dAorKiBAcGFyYW0gbGltaXQgdGhlIGluZGV4IGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciB0byByZXBsYWNlCisqIEBwYXJhbSBzcmNUZXh0IHRoZSB0ZXh0IGZyb20gd2hpY2ggbmV3IHBhcmFncmFwaHMgYXJlIHRha2VuCisqIEBwYXJhbSBzcmNTdGFydCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIGluIDxjb2RlPnNyY1RleHQ8L2NvZGU+IHRvIGNvcHkKKyogQHBhcmFtIHNyY0xpbWl0IHRoZSBmaXJzdCBpbmRleCBhZnRlciB0aGUgcmFuZ2UgaW4gPGNvZGU+c3JjVGV4dDwvY29kZT4gdG8gY29weQorKi8KKyAgICBwdWJsaWMgdm9pZCByZXBsYWNlKGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1Db25zdFRleHQgc3JjVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIGRhbWFnZWRSYW5nZSkgeworCisgICAgICAgIGZpbmFsIGludCBpbnNMZW5ndGggPSBzcmNMaW1pdCAtIHNyY1N0YXJ0OworICAgICAgICBpZiAoaW5zTGVuZ3RoIDwgMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlIik7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgaW50IG9yaWdMZW5ndGggPSBmUnVuQXJyYXkuZ2V0Q3VyVGV4dExlbmd0aCgpOworICAgICAgICBkZWxldGVUZXh0KHN0YXJ0LCBsaW1pdCwgZGFtYWdlZFJhbmdlKTsKKworICAgICAgICBpZiAoaW5zTGVuZ3RoID09IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZmluYWwgaW50IG9sZFBvc0VuZCA9IGZSdW5BcnJheS5mUG9zRW5kOworICAgICAgICBBdHRyaWJ1dGVNYXAgb3JpZ1N0eWxlOworICAgICAgICBpZiAobGltaXQgPCBvcmlnTGVuZ3RoKSB7CisgICAgICAgICAgICBvcmlnU3R5bGUgPSAoZlJ1bkFycmF5LmZQb3NFbmQ+PTApPyBmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZlBvc0VuZF0gOiBmRmlyc3RTdHlsZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG9yaWdTdHlsZSA9IHNyY1RleHQucGFyYWdyYXBoU3R5bGVBdChzcmNMaW1pdCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgcGFyYWdyYXBoU3RhcnQgPSBzcmNTdGFydDsKKyAgICAgICAgaW50IGxhc3RQTGltaXQgPSBzcmNUZXh0LnBhcmFncmFwaFN0YXJ0KHNyY0xpbWl0KTsKKyAgICAgICAgYm9vbGVhbiBzZXBhcmF0b3JBdEVuZCA9IGxhc3RQTGltaXQgPiBzcmNTdGFydCAmJiBpc1BhcmFncmFwaEJyZWFrKHNyY1RleHQuYXQobGFzdFBMaW1pdC0xKSk7CisKKyAgICAgICAgaWYgKGxpbWl0ID09IG9yaWdMZW5ndGggJiYgbGFzdFBMaW1pdCA9PSBwYXJhZ3JhcGhTdGFydCkgeworICAgICAgICAgICAgaWYgKGZSdW5BcnJheS5mUG9zRW5kID4gMCkgeworICAgICAgICAgICAgICAgIGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mUG9zRW5kXSA9IG9yaWdTdHlsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZGaXJzdFN0eWxlID0gb3JpZ1N0eWxlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbGVhbiBmaXJzdFBhc3MgPSB0cnVlOworICAgICAgICAgICAgd2hpbGUgKHBhcmFncmFwaFN0YXJ0IDwgbGFzdFBMaW1pdCkgeworCisgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIHN0eWxlID0gc3JjVGV4dC5wYXJhZ3JhcGhTdHlsZUF0KHBhcmFncmFwaFN0YXJ0KTsKKyAgICAgICAgICAgICAgICBpbnQgcGFyYWdyYXBoTGltaXQgPSBzcmNUZXh0LnBhcmFncmFwaExpbWl0KHBhcmFncmFwaFN0YXJ0KTsKKworICAgICAgICAgICAgICAgIGlmIChmUnVuQXJyYXkuZlBvc0VuZCsxID49IGZSdW5BcnJheS5mTmVnU3RhcnQpCisgICAgICAgICAgICAgICAgICAgIGV4cGFuZFN0eWxlVGFibGUoKTsKKworICAgICAgICAgICAgICAgIGlmIChmUnVuQXJyYXkuZlBvc0VuZCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGUuZXF1YWxzKGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mUG9zRW5kXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mUG9zRW5kXSA9IHN0eWxlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0UGFzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwU3RhcnQgPSBmUnVuQXJyYXkuZlJ1blN0YXJ0W2ZSdW5BcnJheS5mUG9zRW5kXSsxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbWFnZWRSYW5nZVswXSA9IE1hdGgubWluKGRhbWFnZWRSYW5nZVswXSwgcFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICghc3R5bGUuZXF1YWxzKGZGaXJzdFN0eWxlKSkgeworICAgICAgICAgICAgICAgICAgICBmRmlyc3RTdHlsZSA9IHN0eWxlOworICAgICAgICAgICAgICAgICAgICBkYW1hZ2VkUmFuZ2VbMF0gPSAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZpcnN0UGFzcyA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaExpbWl0IDwgbGFzdFBMaW1pdCB8fCBzZXBhcmF0b3JBdEVuZCkgeworICAgICAgICAgICAgICAgICAgICBmUnVuQXJyYXkuZlJ1blN0YXJ0WysrZlJ1bkFycmF5LmZQb3NFbmRdID0gcGFyYWdyYXBoTGltaXQgLSAxICsgc3RhcnQgLSBzcmNTdGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFyYWdyYXBoU3RhcnQgPSBwYXJhZ3JhcGhMaW1pdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmUnVuQXJyYXkuZlBvc0VuZCAhPSBvbGRQb3NFbmQpIHsKKyAgICAgICAgICAgICAgICBmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZlBvc0VuZF0gPSBvcmlnU3R5bGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmUnVuQXJyYXkuYWRkVG9DdXJUZXh0TGVuZ3RoKGluc0xlbmd0aCk7CisgICAgfQorCisvKioKKyogTW9kaWZ5IHRoZSBzdHlsZSBvZiBhbGwgcGFyYWdyYXBocyBjb250YWluaW5nIG9mZnNldHMgaW4gdGhlIHJhbmdlIFtzdGFydCwgbGltaXQpIHRvCisqIDx0dD5zdHlsZTwvdHQ+LgorKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBtb2RpZnlQYXJhZ3JhcGhTdHlsZXMoaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIGRhbWFnZWRSYW5nZSkgIHsKKworICAgICAgICBpbnQgcnVuID0gZlJ1bkFycmF5LmZpbmRSdW5Db250YWluaW5nKHN0YXJ0LTEpOworICAgICAgICBpbnQgY3VycmVudFBTdGFydDsKKyAgICAgICAgaWYgKHJ1biA9PSAtMSkgeworICAgICAgICAgICAgY3VycmVudFBTdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjdXJyZW50UFN0YXJ0ID0gZlJ1bkFycmF5LmdldExvZ2ljYWxSdW5TdGFydChydW4pICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gbW9kaWZpZWRBbnl3aGVyZSA9IGZhbHNlOworCisgICAgICAgIGZvciAoOzspIHsKKworICAgICAgICAgICAgYm9vbGVhbiBtb2RpZmllZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAocnVuIDwgMCkgeworCisgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIG5ld1N0eWxlID0gbW9kaWZpZXIubW9kaWZ5U3R5bGUoZkZpcnN0U3R5bGUpOworCisgICAgICAgICAgICAgICAgaWYgKCFuZXdTdHlsZS5lcXVhbHMoZkZpcnN0U3R5bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGZGaXJzdFN0eWxlID0gbmV3U3R5bGU7CisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBuZXdTdHlsZSA9IG1vZGlmaWVyLm1vZGlmeVN0eWxlKGZTdHlsZVRhYmxlW3J1bl0pOworCisgICAgICAgICAgICAgICAgaWYgKCFmU3R5bGVUYWJsZVtydW5dLmVxdWFscyhuZXdTdHlsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZlN0eWxlVGFibGVbcnVuXSA9IG5ld1N0eWxlOworICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocnVuID09IGZSdW5BcnJheS5mUG9zRW5kKSB7CisgICAgICAgICAgICAgICAgcnVuID0gZlJ1bkFycmF5LmZOZWdTdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJ1bisrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgbmV4dFBTdGFydDsKKyAgICAgICAgICAgIGlmIChydW4gPT0gZlJ1bkFycmF5LmdldEFycmF5TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBuZXh0UFN0YXJ0ID0gZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG5leHRQU3RhcnQgPSBmUnVuQXJyYXkuZ2V0TG9naWNhbFJ1blN0YXJ0KHJ1bikgKyAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobW9kaWZpZWQpIHsKKyAgICAgICAgICAgICAgICBtb2RpZmllZEFueXdoZXJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkYW1hZ2VkUmFuZ2VbMF0gPSBNYXRoLm1pbihkYW1hZ2VkUmFuZ2VbMF0sIGN1cnJlbnRQU3RhcnQpOworICAgICAgICAgICAgICAgIGRhbWFnZWRSYW5nZVsxXSA9IE1hdGgubWF4KGRhbWFnZWRSYW5nZVsxXSwgbmV4dFBTdGFydCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsaW1pdCA8PSBuZXh0UFN0YXJ0KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50UFN0YXJ0ID0gbmV4dFBTdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtb2RpZmllZEFueXdoZXJlOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZHVtcFBhcmFncmFwaFN0YXJ0cyhQYXJhZ3JhcGhCdWZmZXIgc3QpIHsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZSdW5BcnJheS5mUG9zRW5kPSIrc3QuZlJ1bkFycmF5LmZQb3NFbmQrIiwgZlJ1bkFycmF5LmZOZWdTdGFydD0iK3N0LmZSdW5BcnJheS5mTmVnU3RhcnQrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZlJ1bkFycmF5LmdldEFycmF5TGVuZ3RoKCk9IitzdC5mUnVuQXJyYXkuZ2V0QXJyYXlMZW5ndGgoKSsiLCBmUnVuQXJyYXkuZ2V0Q3VyVGV4dExlbmd0aCgpPSIrc3QuZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKSk7CisKKyAgICAgICAgaW50IGk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlBvc2l0aXZlczogIik7CisgICAgICAgIGZvciAoaT0wOyBpPD1zdC5mUnVuQXJyYXkuZlBvc0VuZDsgaSsrKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChzdC5mUnVuQXJyYXkuZlJ1blN0YXJ0W2ldKyIgIik7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICAgTmVnYXRpdmVzOiAiKTsKKyAgICAgICAgZm9yIChpPXN0LmZSdW5BcnJheS5mTmVnU3RhcnQ7IGk8c3QuZlJ1bkFycmF5LmdldEFycmF5TGVuZ3RoKCk7IGkrKykKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoc3QuZlJ1bkFycmF5LmZSdW5TdGFydFtpXSsiICIpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICIpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBrTm9SdW4gPSAtNDI7IC8vIGl0ZXJhdG9yIHVzZQorCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBQYXJhZ3JhcGhJdGVyYXRvciAvKmltcGxlbWVudHMgTVBhcmFncmFwaEl0ZXJhdG9yKi8KKyAgICB7CisgICAgICAgIFBhcmFncmFwaEl0ZXJhdG9yKGludCBzdGFydCwgaW50IGxpbWl0KQorICAgICAgICB7CisgICAgICAgICAgICByZXNldChzdGFydCwgbGltaXQsIHN0YXJ0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlc2V0KGludCBzdGFydCwgaW50IGxpbWl0LCBpbnQgcG9zKQorICAgICAgICB7CisgICAgICAgICAgICBmU3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgIGZMaW1pdCA9IGxpbWl0OworICAgICAgICAgICAgc2V0SXRlcmF0b3IoZlN0YXJ0LCB0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZkN1cnJlbnRSdW4gIT0ga05vUnVuOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgbmV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmUnVuTGltaXQgPCBmTGltaXQpIHsKKyAgICAgICAgICAgICAgICBmQ3VycmVudFJ1bisrOworICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yVXNpbmdSdW4oZkN1cnJlbnRSdW4sIHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldCgwLCAwLCBrTm9SdW4sIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgcHJldigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmUnVuU3RhcnQgPiBmU3RhcnQpIHsKKyAgICAgICAgICAgICAgICBmQ3VycmVudFJ1bi0tOworICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yVXNpbmdSdW4oZkN1cnJlbnRSdW4sIHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldCgwLCAwLCBrTm9SdW4sIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0KGludCBwb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwb3MgPj0gZlN0YXJ0ICYmIHBvcyA8IGZMaW1pdCkgeworICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yKHBvcywgdGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNldCgwLCAwLCBrTm9SdW4sIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyYWdyYXBoQnVmZmVyIGNhbGxzIGJhY2sgb24gdGhpcyB0byBzZXQgaXRlcmF0b3JzCisgICAgICAgIHZvaWQgc2V0KGludCBzdGFydCwgaW50IGxpbWl0LCBpbnQgY3VycmVudFJ1biwgQXR0cmlidXRlTWFwIHN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICBmUnVuU3RhcnQgPSBzdGFydCA8IGZTdGFydCA/IGZTdGFydCA6IHN0YXJ0OworICAgICAgICAgICAgZlJ1bkxpbWl0ID0gbGltaXQgPiBmTGltaXQgPyBmTGltaXQgOiBsaW1pdDsKKyAgICAgICAgICAgIGZDdXJyZW50UnVuID0gY3VycmVudFJ1bjsKKyAgICAgICAgICAgIGZTdHlsZSA9IHN0eWxlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgcmVzZXQoaW50IHN0YXJ0LCBpbnQgbGltaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc2V0KHN0YXJ0LCBsaW1pdCwgc3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgZmlyc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBzZXQoZlN0YXJ0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGxhc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBzZXQoZkxpbWl0IC0gMSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IHJhbmdlU3RhcnQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZlN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCByYW5nZUxpbWl0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZMaW1pdDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgcmFuZ2VMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZkxpbWl0IC0gZlN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBydW5TdGFydCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmUnVuU3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IHJ1bkxpbWl0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZSdW5MaW1pdDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgcnVuTGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZSdW5MaW1pdCAtIGZSdW5TdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgc3R5bGUoKSB7CisKKyAgICAgICAgICAgIHJldHVybiBmU3R5bGU7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGludCBmU3RhcnQ7CisgICAgICAgIHByaXZhdGUgaW50IGZMaW1pdDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgZlJ1blN0YXJ0OworICAgICAgICBwcml2YXRlIGludCBmUnVuTGltaXQ7CisgICAgICAgIHByaXZhdGUgaW50IGZDdXJyZW50UnVuOworICAgICAgICBwcml2YXRlIEF0dHJpYnV0ZU1hcCBmU3R5bGU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9SdW5BcnJheS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9SdW5BcnJheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlMThmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1J1bkFycmF5LmphdmEKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFJ1bkFycmF5LmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDU6MTAgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8qKgorKiBUaGlzIGNsYXNzIG1haW50YWlucyBpbnRlcnZhbHMgd2l0aGluIGEgcGllY2Ugb2YgdGV4dC4gIEludGVydmFsIGJvdW5kYXJpZXMKKyogYXJlIHN0b3JlZCBpbiB0aGUgZlJ1blN0YXJ0IGFycmF5LiAgSW50ZXJ2YWwgYm91bmRhcmllcyBtYXkgaGF2ZSBhCisqIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIHJlcHJlc2VudGF0aW9uLiAgQSBwb3NpdGl2ZSBib3VuZGFyeSBpcyBnaXZlbiBhcyBhbiBvZmZzZXQKKyogZnJvbSAwLiAgQSBuZWdhdGl2ZSBib3VuZGFyeSBpcyBnaXZlbiBhcyBhIG5lZ2F0aXZlIG9mZnNldCBmcm9tIHRoZSBuZWQgb2YgdGhlIHRleHQuCisqIFRoZSBSdW5BcnJheSBzdG9yZXMgcG9zaXRpdmUgYm91bmRhcmllcyBpbiB0aGUgZW50cmllcyBbMCwgZlBvc0VuZF0sIGFuZCBuZWdhdGl2ZQorKiBib3VuZGFyaWVzIGluIHRoZSBlbnRyaWVzIFtmTmVnU3RhcnQsIGZMZW5ndGgpLiAgTmV3IGJvdW5kYXJpZXMgbWF5IGJlIGluc2VydGVkIGludG8KKyogdGhlIHVuZGVmaW5lZCBtaWRkbGUgb2YgdGhlIFJ1bkFycmF5LiAgSWYgZlBvc0VuZCA8IDAsIHRoZXJlIGFyZSBubyBwb3NpdGl2ZSBlbnRyaWVzLgorKiBJZiBmTmVnU3RhcnQgPj0gZlJ1bkFycmF5Lmxlbmd0aCwgdGhlcmUgYXJlIG5vIG5lZ2F0aXZlIG5ldHJpZXMuICBJdCdzIHBvc3NpYmxlIHRvIGhhdmUKKyogYSBydW5hcnJheSB3aXRoIG5laXRoZXIgcG9zaXRpdmUgb3IgbmVnYXRpdmUgZW50cmllcy4KKyoKKyogQXMgYW4gZXhhbXBsZSBvZiBob3cgdGhlIFJ1bkFycmF5IHdvcmtzLCBjb25zaWRlciBhIHBpZWNlIG9mIHRleHQgd2l0aCA1IGludGVydmFscywKKyogd2hlcmUgZWFjaCBpbnRlcnZhbCBpcyAzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiAgVGhlIFJ1bkFycmF5IGZvciB0aGlzIHRleHQgY291bGQKKyogbG9vayBsaWtlOgorKiAgICBmQ3VyVGV4dExlbmd0aCA9IDE1LCBmUG9zRW5kID0gNSwgZk5lZ1N0YXJ0ID0gMTAsCisqICAgIGZSdW5TdGFydCA9IHsgMCwgMywgNiwgOSwgMTIsIFUsIFUsIFUsIFUsIFUgfTsKKyogd2hlcmUgVSBpcyBhbiB1bmRlZmluZWQgYXJyYXkgZWxlbWVudC4KKworKiBBbiBlcXVpdmFsZW50IHJlcHJlc2VudGF0aW9uIHdvdWxkIGJlOgorKiAgICBmQ3VyVGV4dExlbmd0aCA9IDE1LCBmUG9zRW5kID0gMywgZk5lZ1N0YXJ0ID0gOCwKKyogICAgZlJ1blN0YXJ0ID0geyAwLCAzLCA2LCBVLCBVLCBVLCBVLCBVLCAtNiwgLTMgfTsKKyoKKyogVGhlIFJ1bkFycmF5IGNsYXNzIGlzIHVzZWQgaW4gdGhlIFN0eWxlQnVmZmVyIGFuZCB0aGUgUGFyYWdyYXBoQnVmZmVyLiAgSW4gdGhlIFN0eWxlQnVmZmVyLAorKiB0aGUgZW50cmllcyBpbiBmUnVuU3RhcnQgZ2l2ZSB0aGUgb2Zmc2V0cyB3aGVyZSBzdHlsZSBydW5zIGJlZ2luLiAgSW4gdGhlCisqIFBhcmFncmFwaEJ1ZmZlciwgdGhlIGZSdW5TdGFydCBlbnRyaWVzIHN0b3JlIG9mZnNldHMgb2YgcGFyYWdyYXBoIGJyZWFrcy4KKyoKKyogVGhpcyBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciBzaGlmdGluZyB0aGUgcnVuIHRhYmxlIHRvIGEgcGFydGljdWxhciBwb3NpdGlvbiwgZXhwYW5kaW5nIHRoZQorKiBydW4gdGFibGUsIGFuZCByZXR1cm5pbmcgdGhlIGluZGV4IG9mIHRoZSBydW4gY29udGFpbmluZyBhIHBhcnRpY3VsYXIgb2Zmc2V0IGluIHRoZSB0ZXh0LiAgQWxsCisqIG90aGVyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIFJ1bkFycmF5IGNsaWVudHMuCisqCisqIFJ1bkFycmF5IHVzZXMgRmFzdEludEJpbmFyeVNlYXJjaCBmb3Igc2VhcmNoZXMuICBUaGUgc2VhcmNoZXMgYXJlIGNvbnN0cnVjdGVkIG9uIGRlbWFuZCBpbgorKiB0aGUgZmluZFJ1bkNvbnRhaW5pbmcgbWV0aG9kLiAgVGhlIHNlYXJjaGVzIGFyZSBpbnZhbGlkYXRlZCB3aGVuIHRoZSBydW4gYXJyYXkgaXMgc2hpZnRlZDsKKyogaG93ZXZlciwgdGhlIFJ1bkFycmF5IGNhbiBiZSBtb2RpZmllZCBieSBvdGhlciBjbGFzc2VzLiAgVGh1cywgaWYgYW5vdGhlciBjbGFzcyBtb2RpZmllcworKiB0aGUgZW50cmllcyBpbiBmUnVuQXJyYXksIG9yIG1vZGlmaWVzIGZQb3NFbmQgb3IgZk5lZ1N0YXJ0LCBpdCBpcyByZXNwb25zaWJsZSBmb3IKKyogY2FsbGluZyBydW5TdGFydHNDaGFuZ2VkLgorKi8KKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQ7CisKK2ltcG9ydCBqYXZhLmlvLkV4dGVybmFsaXphYmxlOworaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXQ7CitpbXBvcnQgamF2YS5pby5PYmplY3RPdXRwdXQ7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworZmluYWwgY2xhc3MgUnVuQXJyYXkgaW1wbGVtZW50cyBFeHRlcm5hbGl6YWJsZSB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDIyMzU2OTM0OworCisgICAgaW50W10gZlJ1blN0YXJ0OworICAgIHByaXZhdGUgaW50IGZDdXJUZXh0TGVuZ3RoOworICAgIGludCBmUG9zRW5kLCBmTmVnU3RhcnQ7CisgICAgCisgICAgdHJhbnNpZW50IHByaXZhdGUgRmFzdEludEJpbmFyeVNlYXJjaCBmUG9zU2VhcmNoOworICAgIHRyYW5zaWVudCBwcml2YXRlIGJvb2xlYW4gZlBvc1NlYXJjaFZhbGlkOworICAgIHRyYW5zaWVudCBwcml2YXRlIEZhc3RJbnRCaW5hcnlTZWFyY2ggZk5lZ1NlYXJjaDsKKyAgICB0cmFuc2llbnQgcHJpdmF0ZSBib29sZWFuIGZOZWdTZWFyY2hWYWxpZDsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDVVJSRU5UX1ZFUlNJT04gPSAxOworCisgICAgUnVuQXJyYXkoaW50IGluaXRpYWxTaXplLCBpbnQgY3VyVGV4dExlbmd0aCkgeworCisgICAgICAgIGZSdW5TdGFydCA9IG5ldyBpbnRbaW5pdGlhbFNpemVdOworICAgICAgICBmQ3VyVGV4dExlbmd0aCA9IGN1clRleHRMZW5ndGg7CisgICAgICAgIGZQb3NFbmQgPSAtMTsKKyAgICAgICAgZk5lZ1N0YXJ0ID0gaW5pdGlhbFNpemU7CisgICAgICAgIAorICAgICAgICBmUG9zU2VhcmNoID0gbmV3IEZhc3RJbnRCaW5hcnlTZWFyY2goZlJ1blN0YXJ0LCAwLCAxKTsKKyAgICAgICAgZk5lZ1NlYXJjaCA9IG5ldyBGYXN0SW50QmluYXJ5U2VhcmNoKGZSdW5TdGFydCwgMCwgMSk7CisgICAgICAgIGZQb3NTZWFyY2hWYWxpZCA9IGZOZWdTZWFyY2hWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGU6IHRoaXMgY29uc3RydWN0b3IgaXMgT05MWSBmb3IgdXNlIGJ5IHRoZSBTZXJpYWxpemF0aW9uCisgICAgICogbWVjaGFuaXNtLiAgSXQgZG9lcyBub3QgbGVhdmUgdGhpcyBvYmplY3QgaW4gYSB2YWxpZCBzdGF0ZSEKKyAgICAgKi8KKyAgICBwdWJsaWMgUnVuQXJyYXkoKSB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChPYmplY3RPdXRwdXQgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIG91dC53cml0ZUludChDVVJSRU5UX1ZFUlNJT04pOworICAgICAgICBvdXQud3JpdGVPYmplY3QoZlJ1blN0YXJ0KTsKKyAgICAgICAgb3V0LndyaXRlSW50KGZDdXJUZXh0TGVuZ3RoKTsKKyAgICAgICAgb3V0LndyaXRlSW50KGZQb3NFbmQpOworICAgICAgICBvdXQud3JpdGVJbnQoZk5lZ1N0YXJ0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZWFkRXh0ZXJuYWwoT2JqZWN0SW5wdXQgaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisKKyAgICAgICAgaWYgKGluLnJlYWRJbnQoKSAhPSBDVVJSRU5UX1ZFUlNJT04pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiSW52YWxpZCB2ZXJzaW9uIG9mIFJ1bkFycmF5Iik7CisgICAgICAgIH0KKyAgICAgICAgZlJ1blN0YXJ0ID0gKGludFtdKSBpbi5yZWFkT2JqZWN0KCk7CisgICAgICAgIGZDdXJUZXh0TGVuZ3RoID0gaW4ucmVhZEludCgpOworICAgICAgICBmUG9zRW5kID0gaW4ucmVhZEludCgpOworICAgICAgICBmTmVnU3RhcnQgPSBpbi5yZWFkSW50KCk7CisgICAgICAgIAorICAgICAgICBmUG9zU2VhcmNoID0gbmV3IEZhc3RJbnRCaW5hcnlTZWFyY2goZlJ1blN0YXJ0LCAwLCAxKTsKKyAgICAgICAgZk5lZ1NlYXJjaCA9IG5ldyBGYXN0SW50QmluYXJ5U2VhcmNoKGZSdW5TdGFydCwgMCwgMSk7CisgICAgICAgIGZQb3NTZWFyY2hWYWxpZCA9IGZOZWdTZWFyY2hWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0Q3VyVGV4dExlbmd0aCgpIHsKKworICAgICAgICByZXR1cm4gZkN1clRleHRMZW5ndGg7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q3VyVGV4dExlbmd0aChpbnQgY3VyVGV4dExlbmd0aCkgeworCisgICAgICAgIGZDdXJUZXh0TGVuZ3RoID0gY3VyVGV4dExlbmd0aDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRUb0N1clRleHRMZW5ndGgoaW50IGRlbHRhKSB7CisKKyAgICAgICAgZkN1clRleHRMZW5ndGggKz0gZGVsdGE7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcnVuU3RhcnRzQ2hhbmdlZCgpIHsKKworICAgICAgICBmUG9zU2VhcmNoVmFsaWQgPSBmTmVnU2VhcmNoVmFsaWQgPSBmYWxzZTsKKyAgICB9CisKKy8qKgorKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB2YWxpZCBydW4uCisqLworICAgIGludCBsYXN0UnVuKCkgeworCisgICAgICAgIHJldHVybiAoZk5lZ1N0YXJ0ID09IGZSdW5TdGFydC5sZW5ndGgpPyBmUG9zRW5kIDogZlJ1blN0YXJ0Lmxlbmd0aC0xOworICAgIH0KKworLyoqCisqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgcnVuIGFycmF5LiAgUmVwbGFjZXMgb2xkIGZMZW5ndGggbWVtYmVyLgorKi8KKyAgICBpbnQgZ2V0QXJyYXlMZW5ndGgoKSB7CisKKyAgICAgICAgcmV0dXJuIGZSdW5TdGFydC5sZW5ndGg7CisgICAgfQorCisvKioKKyogU2hpZnRzIHN0eWxlIHRhYmxlIHN1Y2ggdGhhdCB0aGUgbGFzdCBwb3NpdGl2ZSBydW4KKyogc3RhcnRzIGJlZm9yZSBwb3MuCisqLworICAgIHZvaWQgc2hpZnRUYWJsZVRvKGludCBwb3MpIHsKKworICAgICAgICBpbnQgb2xkUG9zRW5kID0gZlBvc0VuZDsKKworICAgICAgICB3aGlsZSAoZlBvc0VuZCA+PSAwICYmIGZSdW5TdGFydFtmUG9zRW5kXSA+PSBwb3MpIHsKKworICAgICAgICAgICAgZk5lZ1N0YXJ0LS07CisgICAgICAgICAgICBmUnVuU3RhcnRbZk5lZ1N0YXJ0XSA9IGZSdW5TdGFydFtmUG9zRW5kXSAtIGZDdXJUZXh0TGVuZ3RoOworICAgICAgICAgICAgZlBvc0VuZC0tOworCisgICAgICAgIH0KKworICAgICAgICBwb3MgLT0gZkN1clRleHRMZW5ndGg7CisKKyAgICAgICAgd2hpbGUgKGZOZWdTdGFydDxmUnVuU3RhcnQubGVuZ3RoICYmIGZSdW5TdGFydFtmTmVnU3RhcnRdIDwgcG9zKSB7CisKKyAgICAgICAgICAgIGZQb3NFbmQrKzsKKyAgICAgICAgICAgIGZSdW5TdGFydFtmUG9zRW5kXSA9IGZSdW5TdGFydFtmTmVnU3RhcnRdICsgZkN1clRleHRMZW5ndGg7CisgICAgICAgICAgICBmTmVnU3RhcnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbGRQb3NFbmQgIT0gZlBvc0VuZCkgeworICAgICAgICAgICAgZlBvc1NlYXJjaFZhbGlkID0gZk5lZ1NlYXJjaFZhbGlkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKy8qKgorKiBSZXR1cm5zIGluZGV4IG9mIHN0eWxlIHJ1biBjb250YWluaW5nIHBvcy4gIElmIGZpcnN0IHN0eWxlIHJ1biBzdGFydHMgYmVmb3JlCisqIHBvcywgLTEgaXMgcmV0dXJuZWQuICBJZiBwb3MgaXMgZ3JlYXRlciB0aGFuIHRleHQgbGVuZ3RoLCBsYXN0cnVuIGlzIHJldHVybmVkLgorKi8KKyAgICBpbnQgZmluZFJ1bkNvbnRhaW5pbmcoaW50IHBvcykgeworCisgICAgICAgIEZhc3RJbnRCaW5hcnlTZWFyY2ggc2VhcmNoOworICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gZlJ1blN0YXJ0Lmxlbmd0aDsKKworICAgICAgICBpZiAoZk5lZ1N0YXJ0IDwgbGVuZ3RoICYmIChwb3MtZkN1clRleHRMZW5ndGggPj0gZlJ1blN0YXJ0W2ZOZWdTdGFydF0pKSB7CisKKyAgICAgICAgICAgIHBvcyAtPSBmQ3VyVGV4dExlbmd0aDsKKworICAgICAgICAgICAgaWYgKCFmTmVnU2VhcmNoVmFsaWQpIHsKKyAgICAgICAgICAgICAgICBmTmVnU2VhcmNoLnNldERhdGEoZlJ1blN0YXJ0LCBmTmVnU3RhcnQsIGxlbmd0aC1mTmVnU3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VhcmNoID0gZk5lZ1NlYXJjaDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmUG9zRW5kID49IDApIHsKKworICAgICAgICAgICAgaWYgKCFmUG9zU2VhcmNoVmFsaWQpIHsKKyAgICAgICAgICAgICAgICBmUG9zU2VhcmNoLnNldERhdGEoZlJ1blN0YXJ0LCAwLCBmUG9zRW5kKzEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VhcmNoID0gZlBvc1NlYXJjaDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaW50IHJ1biA9IHNlYXJjaC5maW5kSW5kZXgocG9zKTsKKworICAgICAgICByZXR1cm4gcnVuOworICAgIH0KKworICAgIGludCBnZXRMb2dpY2FsUnVuU3RhcnQoaW50IHJ1bikgeworCisgICAgICAgIGlmIChydW4gPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJ1biA9PSBmUnVuU3RhcnQubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gZkN1clRleHRMZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAocnVuIDw9IGZQb3NFbmQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZlJ1blN0YXJ0W3J1bl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChydW4gPj0gZk5lZ1N0YXJ0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZSdW5TdGFydFtydW5dICsgZkN1clRleHRMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIHJ1biIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisvKioKKyogSW5jcmVhc2VzIHNpemUgb2YgcnVuIHRhYmxlLiAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb3VibGVzIHRoZSBydW4gdGFibGUncyBzaXplLgorKi8KKyAgICB2b2lkIGV4cGFuZFJ1blRhYmxlKCkgeworCisgICAgICAgIHJlc2l6ZVJ1blRhYmxlKGZSdW5TdGFydC5sZW5ndGggKiAyKTsKKyAgICB9CisKKy8qKgorKiBSZXR1cm4gdGhlIG1pbmltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHBvc3NpYmxlIGluIGZSdW5TdGFydC4KKyovCisgICAgcHJpdmF0ZSBpbnQgZ2V0TWluU2l6ZSgpIHsKKworICAgICAgICByZXR1cm4gTWF0aC5tYXgoZlBvc0VuZCArIChmUnVuU3RhcnQubGVuZ3RoLWZOZWdTdGFydCkgKyAxLCAxKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXByZXNzKCkgeworCisgICAgICAgIGludCBtaW5TaXplID0gZ2V0TWluU2l6ZSgpOworICAgICAgICBpZiAoZlJ1blN0YXJ0Lmxlbmd0aCA+IG1pblNpemUpIHsKKyAgICAgICAgICAgIHJlc2l6ZVJ1blRhYmxlKG1pblNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHJlc2l6ZVJ1blRhYmxlKGludCBuZXdTaXplKSB7CisKKyAgICAgICAgaWYgKG5ld1NpemUgPCBnZXRNaW5TaXplKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkF0dGVtcHQgdG8gbWFrZSBSdW5BcnJheSB0b28gc21hbGwuIik7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgb2xkTGVuZ3RoID0gZlJ1blN0YXJ0Lmxlbmd0aDsKKworICAgICAgICBpbnQgbmV3UnVuU3RhcnRbXSA9IG5ldyBpbnRbbmV3U2l6ZV07CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZlJ1blN0YXJ0LCAwLCBuZXdSdW5TdGFydCwgMCwgZlBvc0VuZCsxKTsKKyAgICAgICAgaW50IG5ld05lZ1N0YXJ0ID0gbmV3UnVuU3RhcnQubGVuZ3RoIC0gKG9sZExlbmd0aC1mTmVnU3RhcnQpOworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZSdW5TdGFydCwgZk5lZ1N0YXJ0LCBuZXdSdW5TdGFydCwgbmV3TmVnU3RhcnQsIChvbGRMZW5ndGgtZk5lZ1N0YXJ0KSk7CisKKyAgICAgICAgZk5lZ1N0YXJ0ID0gbmV3TmVnU3RhcnQ7CisgICAgICAgIGZSdW5TdGFydCA9IG5ld1J1blN0YXJ0OworCisgICAgICAgIGZQb3NTZWFyY2hWYWxpZCA9IGZOZWdTZWFyY2hWYWxpZCA9IGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvU3RhbmRhcmRUYWJSdWxlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9TdGFuZGFyZFRhYlJ1bGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTBiNTgzZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvU3RhbmRhcmRUYWJSdWxlci5qYXZhCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTdGFuZGFyZFRhYlJ1bGVyLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDU6MTAgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0OworCitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKKworaW1wb3J0IGphdmEuaW8uRXh0ZXJuYWxpemFibGU7CitpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dDsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dDsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiBNVGFiUnVsZXIuCisgKiBJdCBjYW4gaGF2ZSBhIGZpbml0ZSBudW1iZXIgb2YgY2xpZW50LXNwZWNpZmllZCBUYWJTdG9wcy4gIEFmdGVyCisgKiB0aGUgY2xpZW50LXNwZWNpZmllZCBUYWJTdG9wcywgYWxsIFRhYlN0b3BzIGhhdmUgdHlwZQorICogPGNvZGU+VGFiU3RvcC5rQXV0bzwvY29kZT4gYW5kIGFyZSBhdCB0aGUgYXV0b3NwYWNlIGludGVydmFscy4KKyAqIEBzZWUgVGFiU3RvcAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgU3RhbmRhcmRUYWJSdWxlciBleHRlbmRzIE1UYWJSdWxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50cyBFeHRlcm5hbGl6YWJsZQoreworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENVUlJFTlRfVkVSU0lPTiA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMjIzNTY5MzQ7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUYWJTdG9wIEFVVE9fWkVSTyA9IG5ldyBUYWJTdG9wKDAsIFRhYlN0b3Aua0F1dG8pOworCisgICAgcHJpdmF0ZSBUYWJTdG9wW10gZlRhYnMgPSBudWxsOworICAgIHByaXZhdGUgaW50IGZBdXRvU3BhY2luZyA9IDM2OyAvLyBldmVyeSAxLzIgaW5jaC4KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIFN0YW5kYXJkVGFiUnVsZXIgd2l0aCBvbmx5IGF1dG8gdGFicywgd2l0aCBzcGFjaW5nIG9mIDM2LgorICAgICAqLworICAgIHB1YmxpYyBTdGFuZGFyZFRhYlJ1bGVyKCkKKyAgICB7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgU3RhbmRhcmRUYWJSdWxlciB3aXRoIG9ubHkgYXV0byB0YWJzLCB3aXRoIHRoZQorICAgICAqIGdpdmVuIGF1dG9TcGFjaW5nLgorICAgICAqIEBwYXJhbSBhdXRvU3BhY2luZyB0aGUgYXV0b1NwYWNpbmcgZm9yIHRoaXMgdGFiIHJ1bGVyCisgICAgICovCisgICAgcHVibGljIFN0YW5kYXJkVGFiUnVsZXIoaW50IGF1dG9TcGFjaW5nKQorICAgIHsKKyAgICAgICAgZkF1dG9TcGFjaW5nID0gYXV0b1NwYWNpbmc7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgU3RhbmRhcmRUYWJSdWxlci4gIFRoZSBmaXJzdCBUYWJTdG9wcyBvbiB0aGUgcnVsZXIgd2lsbCBiZQorICAgICAqIHRoZSBUYWJTdG9wcyBpbiB0aGUgPGNvZGU+dGFiczwvY29kZT4gYXJyYXkuICBBZnRlciB0aGVzZSB0YWJzIGFsbAorICAgICAqIHRhYnMgYXJlIGF1dG8gdGFicy4KKyAgICAgKiBAcGFyYW0gdGFicyBhbiBhcnJheSBvZiBUYWJTdG9wcy4gIFRoZSBUYWJTdG9wcyBpbiB0aGUgYXJyYXkgbXVzdAorICAgICAqICAgIGJlIGluIHN0cmljdGx5IGluY3JlYXNpbmcgb3JkZXIgKG9mIHBvc2l0aW9ucyksIGFuZCBjYW5ub3QgaGF2ZQorICAgICAqICAgIHR5cGUgPGNvZGU+VGFiU3RvcC5rQXV0bzwvY29kZT4uCisgICAgICogQHBhcmFtIGF1dG9TcGFjaW5nIHRoZSBhdXRvU3BhY2luZyBpbnRlcnZhbCB0byB1c2UgYWZ0ZXIgdGhlIGxhc3QKKyAgICAgKiAgICBjbGllbnQtc3BlY2lmaWVkIHRhYi4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RhbmRhcmRUYWJSdWxlcihUYWJTdG9wW10gdGFicywgaW50IGF1dG9TcGFjaW5nKQorICAgIHsKKyAgICAgICAgaWYgKHRhYnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFsaWRhdGVUYWJBcnJheSh0YWJzKTsKKyAgICAgICAgICAgIGZUYWJzID0gKFRhYlN0b3BbXSkgdGFicy5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZlRhYnMgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGZBdXRvU3BhY2luZyA9IGF1dG9TcGFjaW5nOworICAgIH0KKworICAgIC8qKiBUYWJzIGFzIHByb3ZpZGVkLCB0aGVuIGF1dG9TcGFjaW5nIGFmdGVyIHRoZSBsYXN0IHRhYiB0byBldGVybml0eS4gIFVzZSB0aGlzIGNvbnN0cnVjdG9yIHdoZW4KKyAgICAgICAgbXVuZ2luZyBhIHJ1bGVyLCBpdCBkb2VzIG5vIHZhbGlkYXRpb24gb24gdGhlIHRhYnMgaW4gdGhlIHZlY3Rvci4gVmVjdG9yIG1heSBub3QgYmUgbnVsbC4gKi8KKworICAgIC8qcHVibGljKi8gU3RhbmRhcmRUYWJSdWxlcihWZWN0b3IgdiwgaW50IGF1dG9TcGFjaW5nKQorICAgIHsKKyAgICAgICAgZlRhYnMgPSB0YWJBcnJheUZyb21WZWN0b3Iodik7CisgICAgICAgIGZBdXRvU3BhY2luZyA9IGF1dG9TcGFjaW5nOworICAgIH0KKworICAgIC8qKiBDb25zdHJ1Y3QgZnJvbSBhbm90aGVyIHJ1bGVyLiBObyB2YWxpZGF0aW9uLiBSdWxlciBtYXkgbm90IGJlIG51bGwuICovCisKKyAgICAvKnB1YmxpYyovIFN0YW5kYXJkVGFiUnVsZXIoTVRhYlJ1bGVyIHJ1bGVyKQorICAgIHsKKyAgICAgICAgaWYgKHJ1bGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJ1bGVyIG1heSBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisKKyAgICAgICAgZlRhYnMgPSB0YWJBcnJheUZyb21WZWN0b3IodmVjdG9yRnJvbVRhYlJ1bGVyKHJ1bGVyKSk7CisgICAgICAgIGZBdXRvU3BhY2luZyA9IHJ1bGVyLmF1dG9TcGFjaW5nKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcmVhZEV4dGVybmFsKE9iamVjdElucHV0IGluKSB0aHJvd3MgSU9FeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworCisgICAgICAgIGludCB2ZXJzaW9uID0gaW4ucmVhZEludCgpOworICAgICAgICBpZiAodmVyc2lvbiAhPSBDVVJSRU5UX1ZFUlNJT04pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiSW52YWxpZCB2ZXJzaW9uIG9mIFN0eWxlZFRleHQ6ICIgKyB2ZXJzaW9uKTsKKyAgICAgICAgfQorICAgICAgICBmVGFicyA9IChUYWJTdG9wW10pIGluLnJlYWRPYmplY3QoKTsKKyAgICAgICAgZkF1dG9TcGFjaW5nID0gaW4ucmVhZEludCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHdyaXRlRXh0ZXJuYWwoT2JqZWN0T3V0cHV0IG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKworICAgICAgICBvdXQud3JpdGVJbnQoQ1VSUkVOVF9WRVJTSU9OKTsKKyAgICAgICAgb3V0LndyaXRlT2JqZWN0KGZUYWJzKTsKKyAgICAgICAgb3V0LndyaXRlSW50KGZBdXRvU3BhY2luZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGZpcnN0IHRhYiBpbiB0aGUgcnVsZXIuICBJZiBhbiBhdXRvVGFiLCBpdCBpcyBhdCBwb3NpdGlvbiB6ZXJvLCBhbmQKKyAgICAgKiBhbGwgc3Vic2VxdWVudCB0YWJzIHdpbGwgYmUgYXV0b3RhYnMgYXQgYXV0b1NwYWNpbmcgaW50ZXJ2YWxzLgorICAgICAqLworICAgIHB1YmxpYyBUYWJTdG9wIGZpcnN0VGFiKCkKKyAgICB7CisgICAgICAgIGlmIChmVGFicyAhPSBudWxsICYmIGZUYWJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmVGFic1swXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBBVVRPX1pFUk87CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBmaXJzdCB0YWIgaW4gdGhlIHJ1bGVyIHdpdGggZlBvc2l0aW9uID4gcG9zaXRpb24uICBJZiBpdCBpcyBhbgorICAgICAqIGF1dG90YWIsIGl0IGlzIGF0IGFuIGluY3JlbWVudCBvZiBhdXRvU3BhY2luZywgYW5kIGFsbCBzdWJzZXF1ZW50IHRhYnMgd2lsbCBiZQorICAgICAqIGF1dG90YWJzIGF0IGF1dG9TcGFjaW5nIGludGVydmFscy4KKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBUYWJTdG9wIHJldHVybmVkIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoaXMgcGFyYW1ldGVyCisgICAgICovCisgICAgcHVibGljIFRhYlN0b3AgbmV4dFRhYihpbnQgcG9zaXRpb24pCisgICAgeworICAgICAgICBpZiAoZlRhYnMgIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmVGFicy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGZUYWJzW2ldLmdldFBvc2l0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmVGFic1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb3NpdGlvbiA+PSA0MDAwKSB7IC8vIGRlYnVnOiBzYW5pdHkgY2hlY2sKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXV0byB0YWIgcGFzdCA0MDAwIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IFRhYlN0b3AoKChwb3NpdGlvbiAvIGZBdXRvU3BhY2luZykgKyAxKSAqIGZBdXRvU3BhY2luZywgVGFiU3RvcC5rQXV0byk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBpbnRlcnZhbCBmb3IgYXV0b3RhYnMuCisgICAgICovCisgICAgcHVibGljIGludCBhdXRvU3BhY2luZygpCisgICAgeworICAgICAgICByZXR1cm4gZkF1dG9TcGFjaW5nOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBhcmUgdGhpcyB0byBhbm90aGVyIE9iamVjdC4gUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QKKyAgICAgKiBpcyBhbiBNVGFiUnVsZXIgd2l0aCB0aGUgc2FtZSBhdXRvU3BhY2luZyBhbmQgdGFicy4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCisgICAgeworICAgICAgICBpZiAobyA9PSB0aGlzKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChvID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTVRhYlJ1bGVyIHJoczsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJocyA9IChNVGFiUnVsZXIpbzsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZBdXRvU3BhY2luZyAhPSByaHMuYXV0b1NwYWNpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBUYWJTdG9wIHJoc1RhYiA9IHJocy5maXJzdFRhYigpOworCisgICAgICAgIGlmIChmVGFicyAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZUYWJzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmVGFic1tpXS5lcXVhbHMocmhzVGFiKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgcmhzVGFiID0gcmhzLm5leHRUYWIocmhzVGFiLmdldFBvc2l0aW9uKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJoc1RhYi5nZXRUeXBlKCkgPT0gVGFiU3RvcC5rQXV0bzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gZGVidWcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0YWIgcnVsZXIuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCisgICAgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiIGF1dG86ICIpOworICAgICAgICBidWZmZXIuYXBwZW5kKEludGVnZXIudG9TdHJpbmcoZkF1dG9TcGFjaW5nKSk7CisKKyAgICAgICAgaWYgKGZUYWJzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZlRhYnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGZUYWJzW2ldLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKiBVdGlsaXR5IHRvIGNvbnZlcnQgYSB2ZWN0b3Igb2YgdGFicyB0byBhbiBhcnJheS4gKi8KKworICAgIHByaXZhdGUgc3RhdGljIFRhYlN0b3BbXSB0YWJBcnJheUZyb21WZWN0b3IoVmVjdG9yIHYpCisgICAgeworICAgICAgICBpbnQgY291bnQgPSB2LnNpemUoKTsKKyAgICAgICAgVGFiU3RvcFtdIHRhYnMgPSBuZXcgVGFiU3RvcFtjb3VudF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgdGFic1tpXSA9IChUYWJTdG9wKXYuZWxlbWVudEF0KGkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRhYnM7CisgICAgfQorCisgICAgLyoqIFV0aWxpdHkgdG8gY29udmVydCBhIHJ1bGVyIHRvIGEgdmVjdG9yIG9mIHRhYnMsIGZvciBtdW5naW5nLiAqLworCisgICAgcHJpdmF0ZSBzdGF0aWMgVmVjdG9yIHZlY3RvckZyb21UYWJSdWxlcihNVGFiUnVsZXIgcnVsZXIpCisgICAgeworICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgZm9yIChUYWJTdG9wIHRhYiA9IHJ1bGVyLmZpcnN0VGFiKCk7IHRhYiAhPSBudWxsICYmIHRhYi5nZXRUeXBlKCkgIT0gVGFiU3RvcC5rQXV0bzsgdGFiID0gcnVsZXIubmV4dFRhYih0YWIuZ2V0UG9zaXRpb24oKSkpIHsKKyAgICAgICAgICAgIHYuYWRkRWxlbWVudCh0YWIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisgICAgLyoqIFV0aWxpdHkgdG8gdmFsaWRhdGUgYW4gYXJyYXkgb2YgdGFicy4gIFRoZSBhcnJheSBtdXN0IG5vdCBiZSBudWxsLCBtdXN0IG5vdCBjb250YWluIG51bGwKKyAgICAgICAgZW50cmllcywgbXVzdCBub3QgYmUga0F1dG8sIGFuZCBwb3NpdGlvbnMgbXVzdCBpbiBpbmNyZWFzaW5nIG9yZGVyLiAqLworCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB2YWxpZGF0ZVRhYkFycmF5KFRhYlN0b3BbXSB0YWJzKQorICAgIHsKKyAgICAgICAgaW50IHBvcyA9IEludGVnZXIuTUlOX1ZBTFVFOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0YWJzW2ldLmdldFR5cGUoKSA9PSBUYWJTdG9wLmtBdXRvKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2FuJ3QgZXhwbGljaXRseSBzcGVjaWZ5IGFuIGF1dG8gdGFiLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IG5leHRwb3MgPSB0YWJzW2ldLmdldFBvc2l0aW9uKCk7CisgICAgICAgICAgICBpZiAobmV4dHBvcyA8PSBwb3MpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ0YWIgcG9zaXRpb25zIG11c3QgYmUgaW4gaW5jcmVhc2luZyBvcmRlci4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcyA9IG5leHRwb3M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSB0YWIgcnVsZXIgaWRlbnRpY2FsIHRvIHRoZSBnaXZlbiBydWxlciwgZXhjZXB0IHdpdGggdGhlCisgICAgICogZ2l2ZW4gdGFiIGFkZGVkLgorICAgICAqIEBwYXJhbSBydWxlciB0aGUgb3JpZ2luYWwgcnVsZXIuICBUaGUgTVRhYlJ1bGVyIHdpbGwgYmUgdGhlIHNhbWUgYXMKKyAgICAgKiAgIHRoaXMgZXhjZXB0IGZvciB0aGUgYWRkaXRpb25hbCB0YWIuICA8Y29kZT5ydWxlcjwvY29kZT4gaXMgbm90IG1vZGlmaWVkLgorICAgICAqIEBwYXJhbSB0YWJUb0FkZCB0aGUgdGFiIHRvIGFkZCB0byB0aGUgbmV3IHRhYiBydWxlcgorICAgICAqIEByZXR1cm4gYW4gTVRhYlJ1bGVyIHJlc3VsdGluZyBmcm9tIHRoaXMgb3BlcmF0aW9uCisgICAgICovCisgICAgLypwdWJsaWMqLyBzdGF0aWMgTVRhYlJ1bGVyIGFkZFRhYlRvUnVsZXIoTVRhYlJ1bGVyIHJ1bGVyLCBUYWJTdG9wIHRhYlRvQWRkKQorICAgIHsKKyAgICAgICAgaWYgKHJ1bGVyID09IG51bGwgfHwgdGFiVG9BZGQgPT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJ1bGVyIGFuZCB0YWJUb0FkZCBtYXkgbm90IGJlIG51bGwiKTsKKworICAgICAgICBWZWN0b3IgdmVjdG9yID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICBib29sZWFuIGFkZGVkID0gZmFsc2U7CisgICAgICAgIGZvciAoVGFiU3RvcCB0YWIgPSBydWxlci5maXJzdFRhYigpOyB0YWIuZ2V0VHlwZSgpICE9IFRhYlN0b3Aua0F1dG87IHRhYiA9IHJ1bGVyLm5leHRUYWIocG9zKSkgeworICAgICAgICAgICAgcG9zID0gdGFiLmdldFBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgIGlmICghYWRkZWQgJiYgcG9zID49IHRhYlRvQWRkLmdldFBvc2l0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocG9zID09IHRhYlRvQWRkLmdldFBvc2l0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIHRhYiA9IG51bGw7CisgICAgICAgICAgICAgICAgdmVjdG9yLmFkZEVsZW1lbnQodGFiVG9BZGQpOworICAgICAgICAgICAgICAgIGFkZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhYiAhPSBudWxsKQorICAgICAgICAgICAgICAgIHZlY3Rvci5hZGRFbGVtZW50KHRhYik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFhZGRlZCkKKyAgICAgICAgICAgIHZlY3Rvci5hZGRFbGVtZW50KHRhYlRvQWRkKTsKKworICAgICAgICByZXR1cm4gbmV3IFN0YW5kYXJkVGFiUnVsZXIodmVjdG9yLCBydWxlci5hdXRvU3BhY2luZygpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSB0YWIgcnVsZXIgaWRlbnRpY2FsIHRvIHRoZSBnaXZlbiBydWxlciwgZXhjZXB0IHdpdGggdGhlCisgICAgICogZ2l2ZW4gdGFiIHJlbW92ZWQuCisgICAgICogQHBhcmFtIHJ1bGVyIHRoZSBvcmlnaW5hbCBydWxlci4gIFRoZSBNVGFiUnVsZXIgd2lsbCBiZSB0aGUgc2FtZSBhcworICAgICAqICAgdGhpcyBleGNlcHQgZm9yIHRoZSByZW1vdmVkIHRhYi4gIDxjb2RlPnJ1bGVyPC9jb2RlPiBpcyBub3QgbW9kaWZpZWQuCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGFiIHRvIHJlbW92ZSBmcm9tIHRoZSBuZXcgdGFiIHJ1bGVyCisgICAgICogQHJldHVybiBhbiBNVGFiUnVsZXIgcmVzdWx0aW5nIGZyb20gdGhpcyBvcGVyYXRpb24KKyAgICAgKi8KKyAgICAvKnB1YmxpYyovIHN0YXRpYyBNVGFiUnVsZXIgcmVtb3ZlVGFiRnJvbVJ1bGVyKE1UYWJSdWxlciBydWxlciwgaW50IHBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHJ1bGVyID09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJydWxlciBtYXkgbm90IGJlIG51bGwiKTsKKworICAgICAgICBWZWN0b3IgdmVjdG9yID0gbmV3IFZlY3RvcigpOworCisgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChUYWJTdG9wIHRhYiA9IHJ1bGVyLmZpcnN0VGFiKCk7IHRhYi5nZXRUeXBlKCkgIT0gVGFiU3RvcC5rQXV0bzsgdGFiID0gcnVsZXIubmV4dFRhYihwb3MpKSB7CisgICAgICAgICAgICBwb3MgPSB0YWIuZ2V0UG9zaXRpb24oKTsKKworICAgICAgICAgICAgaWYgKCFyZW1vdmVkICYmIHBvcyA+PSBwb3NpdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gcG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIHRoaXMgdGFiIGFuZCBjb250aW51ZSB3aXRoIHRoZSByZW1haW5kZXIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHdlIGRpZG4ndCByZW1vdmUgYSB0YWIsIGJ1dCBza2lwcGVkIHBvc2l0aW9uLCBzbyBkb24ndCBib3RoZXIgd2l0aCB0aGUgcmVzdAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2ZWN0b3IuYWRkRWxlbWVudCh0YWIpOworICAgICAgICB9CisgICAgICAgIGlmICghcmVtb3ZlZCkgLy8gbm8gY2hhbmdlCisgICAgICAgICAgICByZXR1cm4gcnVsZXI7CisKKyAgICAgICAgaWYgKHZlY3Rvci5zaXplKCkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgU3RhbmRhcmRUYWJSdWxlcihydWxlci5hdXRvU3BhY2luZygpKTsKKworICAgICAgICByZXR1cm4gbmV3IFN0YW5kYXJkVGFiUnVsZXIodmVjdG9yLCBydWxlci5hdXRvU3BhY2luZygpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSB0YWIgcnVsZXIgaWRlbnRpY2FsIHRvIHRoZSBnaXZlbiBydWxlciwgZXhjZXB0IHdpdGggdGhlCisgICAgICogdGFiIGF0IHBvc2l0aW9uIDxjb2RlPmZyb21Qb3NpdGlvbjwvY29kZT4gbW92ZWQgdG8gcG9zaXRpb24KKyAgICAgKiA8Y29kZT50b1Bvc2l0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gcnVsZXIgdGhlIG9yaWdpbmFsIHJ1bGVyLiAgVGhlIE1UYWJSdWxlciB3aWxsIGJlIHRoZSBzYW1lIGFzCisgICAgICogICB0aGlzIGV4Y2VwdCBmb3IgdGhlIG1vdmVkIHRhYi4gIDxjb2RlPnJ1bGVyPC9jb2RlPiBpcyBub3QgbW9kaWZpZWQuCisgICAgICogQHBhcmFtIGZyb21Qb3NpdGlvbiB0aGUgcG9zaXRpb24gb2YgdGhlIHRhYiB0byBtb3ZlCisgICAgICogQHBhcmFtIHRvUG9zaXRpb24gdGhlIG5ldyBwb3NpdGlvbiBvZiB0aGUgdGFiCisgICAgICogQHJldHVybiBhbiBNVGFiUnVsZXIgcmVzdWx0aW5nIGZyb20gdGhpcyBvcGVyYXRpb24KKyAgICAgKi8KKyAgICAvKnB1YmxpYyovIHN0YXRpYyBNVGFiUnVsZXIgbW92ZVRhYk9uUnVsZXIoTVRhYlJ1bGVyIHJ1bGVyLCBpbnQgZnJvbVBvc2l0aW9uLCBpbnQgdG9Qb3NpdGlvbikKKyAgICB7CisgICAgICAgIGlmIChydWxlciA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicnVsZXIgbWF5IG5vdCBiZSBudWxsIik7CisKKyAgICAgICAgVmVjdG9yIHZlY3RvciA9IG5ldyBWZWN0b3IoKTsKKworICAgICAgICBpbnQgcG9zID0gMDsKKyAgICAgICAgYm9vbGVhbiBtb3ZlZCA9IGZhbHNlOworICAgICAgICBmb3IgKFRhYlN0b3AgdGFiID0gcnVsZXIuZmlyc3RUYWIoKTsgdGFiLmdldFR5cGUoKSAhPSBUYWJTdG9wLmtBdXRvOyB0YWIgPSBydWxlci5uZXh0VGFiKHBvcykpIHsKKyAgICAgICAgICAgIHBvcyA9IHRhYi5nZXRQb3NpdGlvbigpOworCisgICAgICAgICAgICBpZiAoIW1vdmVkICYmIHBvcyA9PSBmcm9tUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgdGFiID0gbmV3IFRhYlN0b3AodG9Qb3NpdGlvbiwgdGFiLmdldFR5cGUoKSk7IC8vIGNvcHkgaXQKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmVjdG9yLmFkZEVsZW1lbnQodGFiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1vdmVkKSAvLyBubyBjaGFuZ2UKKyAgICAgICAgICAgIHJldHVybiBydWxlcjsKKworICAgICAgICByZXR1cm4gbmV3IFN0YW5kYXJkVGFiUnVsZXIodmVjdG9yLCBydWxlci5hdXRvU3BhY2luZygpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvU3R5bGVCdWZmZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvU3R5bGVCdWZmZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNjJhYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9TdHlsZUJ1ZmZlci5qYXZhCkBAIC0wLDAgKzEsNjcxIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTdHlsZUJ1ZmZlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjM2ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dDsKKworaW1wb3J0IGphdmEuaW8uRXh0ZXJuYWxpemFibGU7CitpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dDsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dDsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCisvKgorICAgIDgvMi85NgorICAgICAgICBBZGRlZCBzZXRJdGVyYXRvclVzaW5nUnVuIG1ldGhvZAorCisgICAgOC81Lzk2CisgICAgICAgIE5vIGxvbmdlciBoYXMgdG8gYmUgY29uc3RydWN0ZWQgd2l0aCBhbiBNVGV4dC4KKworICAgIDgvOC85NgorICAgICAgICBBZGRlZCByZXBsYWNlIG1ldGhvZCwgd2hpY2ggcmVhZHMgc3R5bGVzIGZyb20gYSBTdHlsZVJ1bkl0ZXJhdG9yLgorICAgICAgICBBbHNvLCBhZGRlZCBhIGNvbnN0cnVjdG9yIHdoaWNoIHRha2VzIGEgU3R5bGVSdW5JdGVyYXRvci4KKyAgICAgICAgVGhlc2UgbWV0aG9kcyBhcmUgZm9yIGNvcHkvcGFzdGUgc3VwcG9ydC4KKyAgICA4LzE2Lzk2CisgICAgICAgIFN0eWxlQnVmZmVyIG5vdyB0YWtlcyBNQ29uc3RUZXh0IGluc3RlYWQgb2YgTVRleHQgd2hlcmUgcG9zc2libGUuCisKKyAgICAxMC8yMy85NgorICAgICAgICBTb21lIG9sZCBjb21tZW50ZWQtb3V0IGNvZGUgcmVtb3ZlZCBmb3IgYWVzdGhldGljIHJlYXNvbnMuCisKKyAgICA3LzMxLzk4IFN3aXRjaGVkIHRvIEF0dHJpYnV0ZU1hcAorKi8KKworLyoqCisqIFN0eWxlQnVmZmVyIGltcGxlbWVudHMgPHR0Pk1TdHlsZUJ1ZmZlcjwvdHQ+LiAgSXQgbWFpbnRhaW5zCisqIDx0dD5BdHRyaWJ1dGVNYXA8L3R0PiBvYmplY3RzIHRvIGFwcGx5IHRvIHRoZSB0ZXh0IGluIGFuIDx0dD5NVGV4dDwvdHQ+IG9iamVjdCwKKyogYW5kIHRoZQorKiBpbnRlcnZhbHMgb24gd2hpY2ggdGhvc2Ugc3R5bGVzIGFwcGx5LgorKiA8cD4KKyogU3R5bGVCdWZmZXIgc3RvcmVzIHRoZSBpbnRlcnZhbHMgb24gd2hpY2ggc3R5bGVzIGFwcGx5IGluIGEgPHR0PlJ1bkFycmF5PC90dD4KKyogb2JqZWN0IChzZWUgPHR0PlJ1bkFycmF5PC90dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24pLiAgVGhlIHN0eWxlcyBhcmUgc3RvcmVkIGluCisqIGFuIGFycmF5IG9mIDx0dD5BdHRyaWJ1dGVNYXA8L3R0PiBvYmplY3RzLgorKiA8cD4KKyogPHR0PlJ1bkFycmF5PC90dD4gbWFpbnRhaW5zIGFuIGFycmF5IG9mIGludGVnZXJzIHdoaWNoIHJlcHJlc2VudCBvZmZzZXRzIGludG8gdGV4dC4KKyogVGhlIGFycmF5IGhhcyBhICJwb3NpdGl2ZSIgcmVnaW9uIGluIHdoaWNoIG9mZnNldHMgYXJlIGdpdmVuIGFzIHBvc2l0aXZlIGRpc3RhbmNlcworKiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgdGV4dCwgYW5kIGEgIm5lZ2F0aXZlIiByZWdpb24gaW4gd2hpY2ggb2Zmc2V0cyBhcmUgZ2l2ZW4gYXMKKyogbmVnYXRpdmUgZGlzdGFuY2VzIGZyb20gdGhlIGVuZCBvZiB0aGUgdGV4dC4gIEJldHdlZW4gdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSByZWdpb25zCisqIGlzIGEgZ2FwLCBpbnRvIHdoaWNoIG5ldyBvZmZzZXRzIG1heSBiZSBpbnNlcnRlZC4gIFRoaXMgc3RvcmFnZSBzY2hlbWUgYWxsb3dzIGZvcgorKiBlZmZpY2llbnQgcmVzcG9uc2UgdG8gYSBzZXJpZXMgb2YgZWRpdGluZyBvcGVyYXRpb25zIHdoaWNoIG9jY3VyIGluIHRoZSBzYW1lIGFyZWEgb2YgdGhlCisqIHRleHQuCisqIDxwPgorKiBTdHlsZUJ1ZmZlciB1c2VzIHRoZSBvZmZzZXRzIGluIDx0dD5SdW5BcnJheTwvdHQ+IGFzIHRoZSBib3VuZGFyaWVzIG9mIHN0eWxlIHJ1bnMuCisqIEEgc3R5bGUgcnVuIGJlZ2lucyBhdCBlYWNoIG9mZnNldCBpbiA8dHQ+UnVuQXJyYXk8L3R0PiwgYW5kIGVhY2ggc3R5bGUgcnVuIGNvbnRpbnVlcyB0bworKiB0aGUgbmV4dCBvZmZzZXQuICBUaGUgc3R5bGUgYXJyYXkgaXMga2VwdCBpbiBzeW5jIHdpdGggdGhlIGFycmF5IG9mIG9mZnNldHMgaW4gPHR0PlJ1bkFycmF5PC90dD47CisqIHRoYXQgaXMsIHRoZSBzdHlsZSB3aGljaCBiZWdpbnMgYXQgUnVuQXJyYXlbaV0gaXMgc3RvcmVkIGluIFN0eWxlQXJyYXlbaV0uCisqIDxwPgorKiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIDx0dD5SdW5BcnJheTwvdHQ+IGlzIGFsd2F5cyAwLgorKgorKiBAYXV0aG9yIEpvaG4gUmFsZXkKKyoKKyogQHNlZSBBdHRyaWJ1dGVNYXAKKyogQHNlZSBNVGV4dAorKiBAc2VlIFJ1bkFycmF5CisqLworCitmaW5hbCBjbGFzcyBTdHlsZUJ1ZmZlciBleHRlbmRzIE1TdHlsZUJ1ZmZlciBpbXBsZW1lbnRzIEV4dGVybmFsaXphYmxlIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLyoqCisgICAgKiBDcmVhdGVzIGEgbmV3IHN0eWxlIGJ1ZmZlciB3aXRoIGxlbmd0aCBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIDx0dD50ZXh0PC90dD4sCisgICAgKiBhbmQgd2l0aCBhIHNpbmdsZSBydW4gb2YgPHR0PmRlZmF1bHRTdHlsZTwvdHQ+LgorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMjIzNTY5MzQ7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ1VSUkVOVF9WRVJTSU9OID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQga0luaXRpYWxTaXplID0gMTA7CisgICAgcHJpdmF0ZSBSdW5BcnJheSBmUnVuQXJyYXk7CisKKyAgICBwcml2YXRlIEF0dHJpYnV0ZU1hcCBmU3R5bGVUYWJsZVtdOworCisgICAgU3R5bGVCdWZmZXIoTUNvbnN0VGV4dCB0ZXh0LCBBdHRyaWJ1dGVNYXAgaW5pdGlhbFN0eWxlKSB7CisKKyAgICAgICAgdGhpcyh0ZXh0Lmxlbmd0aCgpLCBpbml0aWFsU3R5bGUpOworICAgIH0KKworICAgIC8qKgorICAgICogQ3JlYXRlcyBhIG5ldyBzdHlsZSBidWZmZXIgd2l0aCBsZW5ndGggPHR0PmluaXRpYWxMZW5ndGg8L3R0PiBhbmQgd2l0aCBhCisgICAgKiBzaW5nbGUgcnVuIG9mIDx0dD5kZWZhdWx0U3R5bGU8L3R0Pi4KKyAgICAqLworCisgICAgU3R5bGVCdWZmZXIoaW50IGluaXRpYWxMZW5ndGgsIEF0dHJpYnV0ZU1hcCBpbml0aWFsU3R5bGUpIHsKKworICAgICAgICBmUnVuQXJyYXkgPSBuZXcgUnVuQXJyYXkoa0luaXRpYWxTaXplLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgZlJ1bkFycmF5LmZQb3NFbmQgPSAwOworICAgICAgICBmUnVuQXJyYXkuZlJ1blN0YXJ0WzBdID0gMDsKKworICAgICAgICBmU3R5bGVUYWJsZSA9IG5ldyBBdHRyaWJ1dGVNYXBba0luaXRpYWxTaXplXTsgLy8gZG8gSSByZWFsbHkgd2FudCB0byBkbyB0aGlzPz8/CisKKyAgICAgICAgZlN0eWxlVGFibGVbMF0gPSBpbml0aWFsU3R5bGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90ZTogdGhpcyBjb25zdHJ1Y3RvciBpcyBPTkxZIGZvciB1c2UgYnkgdGhlIFNlcmlhbGl6YXRpb24KKyAgICAgKiBtZWNoYW5pc20uICBJdCBkb2VzIG5vdCBsZWF2ZSB0aGlzIG9iamVjdCBpbiBhIHZhbGlkIHN0YXRlIQorICAgICAqLworICAgIHB1YmxpYyBTdHlsZUJ1ZmZlcigpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB3cml0ZUV4dGVybmFsKE9iamVjdE91dHB1dCBvdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgY29tcHJlc3MoKTsKKyAgICAgICAgb3V0LndyaXRlSW50KENVUlJFTlRfVkVSU0lPTik7CisgICAgICAgIG91dC53cml0ZU9iamVjdChmUnVuQXJyYXkpOworICAgICAgICBvdXQud3JpdGVPYmplY3QoZlN0eWxlVGFibGUpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlYWRFeHRlcm5hbChPYmplY3RJbnB1dCBpbikgdGhyb3dzIElPRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisKKyAgICAgICAgaWYgKGluLnJlYWRJbnQoKSAhPSBDVVJSRU5UX1ZFUlNJT04pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiSW52YWxpZCB2ZXJzaW9uIG9mIFN0eWxlQnVmZmVyIik7CisgICAgICAgIH0KKyAgICAgICAgZlJ1bkFycmF5ID0gKFJ1bkFycmF5KSBpbi5yZWFkT2JqZWN0KCk7CisgICAgICAgIGZTdHlsZVRhYmxlID0gKEF0dHJpYnV0ZU1hcFtdKSBpbi5yZWFkT2JqZWN0KCk7CisgICAgfQorCisvKioKKyogU2hpZnQgc3R5bGUgYW5kIHJ1biB0YWJsZXMgc3VjaCB0aGF0IHRoZSBsYXN0IHBvc2l0aXZlIHJ1biBiZWdpbnMgYmVmb3JlIHRoZSBnaXZlbiBwb3NpdGlvbi4KKyogU2luY2UgdGhlcmUgaXMgYWx3YXlzIGEgcnVuIHN0YXJ0IGF0IDAsIHRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgZmlyc3QgcnVuIHdpbGwgbm90IGJlIHNoaWZ0ZWQuCisqIFRoaXMgaXMgY2FsbGVkIGJ5OiA8dHQ+aW5zZXJ0VGV4dDwvdHQ+IGFuZCA8dHQ+ZGVsZXRlVGV4dDwvdHQ+LgorKiBAcGFyYW0gcG9zIGEgcG9zaXRpb24gaW4gdGhlIHRleHQuCisqLworCisgICAgcHJpdmF0ZSB2b2lkIHNoaWZ0VGFibGVUbyhpbnQgcG9zKSB7CisKKyAgICAgICAgaWYgKHBvcyA9PSAwKQorICAgICAgICAgICAgcG9zID0gMTsKKworICAgICAgICBpbnQgb2xkTmVnU3RhcnQgPSBmUnVuQXJyYXkuZk5lZ1N0YXJ0OworICAgICAgICBpbnQgb2xkUG9zRW5kID0gZlJ1bkFycmF5LmZQb3NFbmQ7CisKKyAgICAgICAgZlJ1bkFycmF5LnNoaWZ0VGFibGVUbyhwb3MpOworCisgICAgICAgIGlmIChvbGRQb3NFbmQgPiBmUnVuQXJyYXkuZlBvc0VuZCkKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZlN0eWxlVGFibGUsIGZSdW5BcnJheS5mUG9zRW5kKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZTdHlsZVRhYmxlLCBmUnVuQXJyYXkuZk5lZ1N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRQb3NFbmQtZlJ1bkFycmF5LmZQb3NFbmQpOworICAgICAgICBlbHNlIGlmIChvbGROZWdTdGFydCA8IGZSdW5BcnJheS5mTmVnU3RhcnQpCisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZTdHlsZVRhYmxlLCBvbGROZWdTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlN0eWxlVGFibGUsIG9sZFBvc0VuZCsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmUnVuQXJyYXkuZk5lZ1N0YXJ0LW9sZE5lZ1N0YXJ0KTsKKyAgICB9CisKKy8qKgorKiBVcGRhdGUgdGhlIHN0eWxlIHRhYmxlIHRvIHJlZmxlY3QgYSBjaGFuZ2UgaW4gdGhlIFJ1bkFycmF5J3Mgc2l6ZS4KKyovCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUFycmF5UmVzaXplKGludCBvbGROZWdTdGFydCkgeworCisgICAgICAgIEF0dHJpYnV0ZU1hcCBuZXdTdHlsZVRhYmxlW10gPSBuZXcgQXR0cmlidXRlTWFwW2ZSdW5BcnJheS5nZXRBcnJheUxlbmd0aCgpXTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShmU3R5bGVUYWJsZSwgMCwgbmV3U3R5bGVUYWJsZSwgMCwgZlJ1bkFycmF5LmZQb3NFbmQrMSk7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZlN0eWxlVGFibGUsIG9sZE5lZ1N0YXJ0LCBuZXdTdHlsZVRhYmxlLCBmUnVuQXJyYXkuZk5lZ1N0YXJ0LCAoZlJ1bkFycmF5LmdldEFycmF5TGVuZ3RoKCktZlJ1bkFycmF5LmZOZWdTdGFydCkpOworICAgICAgICBmU3R5bGVUYWJsZSA9IG5ld1N0eWxlVGFibGU7CisgICAgfQorCisvKioKKyogTWluaW1pemUgdGhlIGFtb3VudCBvZiBzdG9yYWdlIHVzZWQgYnkgdGhpcyBvYmplY3QuCisqLworICAgIHZvaWQgY29tcHJlc3MoKSB7CisKKyAgICAgICAgaW50IG9sZE5lZ1N0YXJ0ID0gZlJ1bkFycmF5LmZOZWdTdGFydDsKKyAgICAgICAgZlJ1bkFycmF5LmNvbXByZXNzKCk7CisgICAgICAgIGlmIChmUnVuQXJyYXkuZk5lZ1N0YXJ0ICE9IG9sZE5lZ1N0YXJ0KSB7CisgICAgICAgICAgICBoYW5kbGVBcnJheVJlc2l6ZShvbGROZWdTdGFydCk7CisgICAgICAgIH0KKyAgICB9CisKKy8qKgorKiBJbmNyZWFzZSB0aGUgc3RvcmFnZSBjYXBhY2l0eSBvZiB0aGUgc3R5bGUgYW5kIHJ1biB0YWJsZXMgaWYgbm8gcm9vbSByZW1haW5zLgorKi8KKyAgICBwcml2YXRlIHZvaWQgZXhwYW5kU3R5bGVUYWJsZUlmRnVsbCgpIHsKKworICAgICAgICBpZiAoZlJ1bkFycmF5LmZQb3NFbmQgKyAxID09IGZSdW5BcnJheS5mTmVnU3RhcnQpIHsKKworICAgICAgICAgICAgaW50IG9sZE5lZ1N0YXJ0ID0gZlJ1bkFycmF5LmZOZWdTdGFydDsKKyAgICAgICAgICAgIGZSdW5BcnJheS5leHBhbmRSdW5UYWJsZSgpOworICAgICAgICAgICAgaGFuZGxlQXJyYXlSZXNpemUob2xkTmVnU3RhcnQpOworICAgICAgICB9CisgICAgfQorCisvKgorICAgIHB1YmxpYyBNU3R5bGVSdW5JdGVyYXRvciBjcmVhdGVTdHlsZVJ1bkl0ZXJhdG9yKGludCBzdGFydCwgaW50IGxpbWl0KSB7CisKKyAgICAgICAgcmV0dXJuIG5ldyBTdHlsZVJ1bkl0ZXJhdG9yKHN0YXJ0LCBsaW1pdCk7CisgICAgfQorKi8KKy8qKgorKiBSZXNwb25kIHRvIGFuIGluc2VydGlvbiBpbiB0aGUgdGV4dC4gIFRoZSBsZW5ndGggb2YgdGhlIGxhc3Qgc3R5bGUgcnVuIHdoaWNoCisqIGJlZ2lucyBiZWZvcmUgPHR0PnN0YXJ0PC90dD4gaXMgaW5jcmVhc2VkIGJ5IDx0dD5sZW5ndGg8L3R0Pi4gIFRoZSBydW4gdGFibGUKKyogaXMgc2hpZnRlZCBzdWNoIHRoYXQgdGhlIHJ1biBpbnRvIHdoaWNoIHRleHQgd2FzIGluc2VydGVkIGlzIHRoZSBsYXN0IHBvc2l0aXZlIHJ1bi4KKyogVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgYWxsIHN0eWxlcyBwcm9wb2dhdGUuCisqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBpbnNlcnRpb24gYmVnYW4KKyogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW5zZXJ0ZWQKKyovCisgICAgcHVibGljIHZvaWQgaW5zZXJ0VGV4dChpbnQgc3RhcnQsIGludCBsaW1pdCkgeworCisgICAgICAgIHNoaWZ0VGFibGVUbyhzdGFydCk7CisgICAgICAgIGZSdW5BcnJheS5hZGRUb0N1clRleHRMZW5ndGgobGltaXQgLSBzdGFydCk7CisgICAgfQorCisvKioKKyogUmVzcG9uZCB0byBhIGRlbGV0aW9uIGluIHRoZSB0ZXh0LiAgVGhlIGxhc3Qgc3R5bGUgcnVuIGJlZm9yZQorKiA8dHQ+c3RhcnQ8L3R0PiBpcyB0cnVuY2F0ZWQgdG8gZW5kIGF0IDx0dD5zdGFydDwvdHQ+LiAgVGhlCisqIHN0eWxlIHJ1biBjb250YWluaW5nICg8dHQ+c3RhcnQ8L3R0Pis8dHQ+bGVuZ3RoPC90dD4pIGlzIHNldCB0byBiZWdpbgorKiBhdCAoPHR0PnN0YXJ0PC90dD4rPHR0Pmxlbmd0aDwvdHQ+KS4gIFJ1bnMgaW4gYmV0d2VlbiBhcmUgZGVsZXRlZC4KKyogSWYgdGhlIGRlbGV0aW9uIG9jY3VycyBlbnRpcmVseSB3aXRoaW4gb25lIHN0eWxlIHJ1biwgdGhlIGxlbmd0aCBvZiB0aGUgc3R5bGUKKyogcnVuIGlzIHJlZHVjZWQgYnkgPHR0Pmxlbmd0aDwvdHQ+LgorKiBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBhbGwgc3R5bGVzIHByb3BvZ2F0ZS4KKyogVGhpcyBtZXRob2Qgc2hpZnRzIHRoZSBydW4gdGFibGUgc3VjaCB0aGF0IHRoZSBydW4gaW4gd2hpY2ggdGhlIGRlbGV0ZSBiZWdhbgorKiBpcyB0aGUgbGFzdCBwb3NpdGl2ZSBydW4uICBPdGhlciBtZXRob2RzIGRlcGVuZCBvbiB0aGlzICJzaWRlIGVmZmVjdCIuCisqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBkZWxldGlvbiBiZWdhbgorKiBAcGFyYW0gbGVuZ3RoIHRoZSBvZmZzZXQgd2hlcmUgdGhlIGRlbGV0aW9uIHN0b3BwZWQKKyovCisgICAgcHVibGljIHZvaWQgZGVsZXRlVGV4dChpbnQgc3RhcnQsIGludCBsaW1pdCkgeworCisgICAgICAgIGludCBsZW5ndGggPSBsaW1pdCAtIHN0YXJ0OworCisgICAgICAgIC8vIEFuIG9wdGltaXphdGlvbiAtIGlmIGEgd2hvbGUgcnVuIHdhc24ndCBkZWxldGVkIHdlIGRvbid0CisgICAgICAgIC8vIG5lZWQgdG8gY2hlY2sgZm9yIHJ1biBtZXJnaW5nLCB3aGljaCBjb3VsZCBiZSBleHBlbnNpdmUuCisgICAgICAgIGJvb2xlYW4gd2hvbGVSdW5EZWxldGVkID0gZmFsc2U7CisKKyAgICAgICAgc2hpZnRUYWJsZVRvKHN0YXJ0KTsKKworICAgICAgICBpbnQgZmlyc3RSdW5MaW1pdCA9IGZSdW5BcnJheS5nZXRDdXJUZXh0TGVuZ3RoKCk7CisgICAgICAgIGlmIChmUnVuQXJyYXkuZk5lZ1N0YXJ0IDwgZlJ1bkFycmF5LmdldEFycmF5TGVuZ3RoKCkpCisgICAgICAgICAgICBmaXJzdFJ1bkxpbWl0ICs9IGZSdW5BcnJheS5mUnVuU3RhcnRbZlJ1bkFycmF5LmZOZWdTdGFydF07CisKKyAgICAgICAgaWYgKGxpbWl0ID09IGZSdW5BcnJheS5nZXRDdXJUZXh0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGZSdW5BcnJheS5mTmVnU3RhcnQgPSBmUnVuQXJyYXkuZ2V0QXJyYXlMZW5ndGgoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaW1pdCA+PSBmaXJzdFJ1bkxpbWl0KSB7CisKKyAgICAgICAgICAgIGludCBlbmQgPSBmUnVuQXJyYXkuZmluZFJ1bkNvbnRhaW5pbmcobGltaXQpOworICAgICAgICAgICAgaWYgKGVuZCAhPSBmUnVuQXJyYXkuZlBvc0VuZCkgeworICAgICAgICAgICAgICAgIGZSdW5BcnJheS5mUnVuU3RhcnRbZW5kXSA9IGxpbWl0IC0gZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBmUnVuQXJyYXkuZk5lZ1N0YXJ0ID0gZW5kOworICAgICAgICAgICAgICAgIHdob2xlUnVuRGVsZXRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZlJ1bkFycmF5LmZOZWdTdGFydCAhPSBmUnVuQXJyYXkuZ2V0QXJyYXlMZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKHN0YXJ0ID09IDAgJiYgbGltaXQgPj0gZmlyc3RSdW5MaW1pdCkgeworICAgICAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBzdHlsZSBydW4gd2FzIGRlbGV0ZWQ7ICBtb3ZlIGZpcnN0ICJuZWdhdGl2ZSIgcnVuIGludG8KKyAgICAgICAgICAgICAgICAvLyBmaXJzdCBwb3NpdGlvbgorICAgICAgICAgICAgICAgIGZTdHlsZVRhYmxlWzBdID0gZlN0eWxlVGFibGVbZlJ1bkFycmF5LmZOZWdTdGFydCsrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHdob2xlUnVuRGVsZXRlZCkgeworICAgICAgICAgICAgICAgIGlmIChmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZk5lZ1N0YXJ0XS5lcXVhbHMoZlN0eWxlVGFibGVbZlJ1bkFycmF5LmZQb3NFbmRdKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBzdHlsZSBydW5zCisgICAgICAgICAgICAgICAgICAgIGZSdW5BcnJheS5mTmVnU3RhcnQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmUnVuQXJyYXkuYWRkVG9DdXJUZXh0TGVuZ3RoKC1sZW5ndGgpOworCisgICAgICAgIGZSdW5BcnJheS5ydW5TdGFydHNDaGFuZ2VkKCk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJJbiBkZWxldGVUZXh0OiAgbnVtYmVyIG9mIHN0eWxlIHJ1bnMgPSAiICsgbnVtUnVucyh0aGlzKSk7CisgICAgfQorCisvKioKKyogQXJyYW5nZSBzdHlsZSB0YWJsZSBzbyB0aGF0IG9sZCBzdHlsZXMgaW4gdGhlIHByb3ZpZGVkIHJhbmdlIGFyZSByZW1vdmVkLCBhbmQKKyogbmV3IHN0eWxlcyBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUgaW5zZXJ0aW9uIGdhcC4KKyogQWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgbmV3IHN0eWxlIHN0YXJ0cyBhbmQgc3R5bGVzIG1heSBiZSBwbGFjZWQKKyogaW4gdGhlIGluc2VydGlvbiBnYXBzIG9mIGZSdW5BcnJheS5mU3R5bGVTdGFydCBhbmQgZlN0eWxlVGFibGUuCisqIEBwYXJhbSBzdGFydCBvZmZzZXQgaW4gdGhlIHRleHQgd2hlcmUgaW5zZXJ0aW9uIG9wZXJhdGlvbiBiZWdpbnMKKyogQHBhcmFtIGxpbWl0IG9mZnNldCBpbiB0aGUgdGV4dCB3aGVyZSBwcmV2aW91cyBzdHlsZXMgcmVzdW1lCisqLworICAgIHByaXZhdGUgdm9pZCBwcmVwYXJlU3R5bGVJbnNlcnQoaW50IHN0YXJ0KSB7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKworICAgICAgICAgICAgLy8gZlJ1bkFycmF5LmZQb3NFbmQgc2hvdWxkIGJlIDAgaWYgd2UncmUgaW4gdGhpcyBicmFuY2guCisKKyAgICAgICAgICAgIGlmIChmUnVuQXJyYXkuZ2V0Q3VyVGV4dExlbmd0aCgpID4gMCkgeworCisgICAgICAgICAgICAgICAgLyogTW92ZSBmaXJzdCBleGlzdGluZyBzdHlsZSBydW4gdG8gbmVnYXRpdmUgZW5kIG9mIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICBEb24ndCBkbyB0aGlzIGlmIGxlbmd0aD09MDsgIHRoYXQgaXMsIGlmIHRoZXJlIGlzIG5vIHJlYWwKKyAgICAgICAgICAgICAgICAgICBzdHlsZSBydW4gYXQgMC4KKyAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgIGZSdW5BcnJheS5mTmVnU3RhcnQtLTsKKyAgICAgICAgICAgICAgICBmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZk5lZ1N0YXJ0XSA9IGZTdHlsZVRhYmxlWzBdOworICAgICAgICAgICAgICAgIGZSdW5BcnJheS5mUnVuU3RhcnRbZlJ1bkFycmF5LmZOZWdTdGFydF0gPSAtZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZlJ1bkFycmF5LmZQb3NFbmQgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKworICAgICAgICAgICAgLy8gY29uc2lzdGVuY3kgY2hlY2s6IHN0YXJ0IHNob3VsZCBiZSBpbiBjdXJyZW50IGdhcAorICAgICAgICAgICAgaWYgKGZSdW5BcnJheS5mUnVuU3RhcnRbZlJ1bkFycmF5LmZQb3NFbmRdID49IHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbmNvbnNpc3RlbnQgc3RhdGUhICBTdGFydCBzaG91bGQgYmUgd2l0aGluIGluc2VydGlvbiBnYXAuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBlbmRPZkluc2VydGlvbkdhcCA9IGZSdW5BcnJheS5nZXRDdXJUZXh0TGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoZlJ1bkFycmF5LmZOZWdTdGFydCA8IGZSdW5BcnJheS5nZXRBcnJheUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgZW5kT2ZJbnNlcnRpb25HYXAgKz0gZlJ1bkFycmF5LmZSdW5TdGFydFtmUnVuQXJyYXkuZk5lZ1N0YXJ0XTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGVuZE9mSW5zZXJ0aW9uR2FwIDwgc3RhcnQpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkluY29uc2lzdGVudCBzdGF0ZSEgIFN0YXJ0IHNob3VsZCBiZSB3aXRoaW4gaW5zZXJ0aW9uIGdhcC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWYgbm8gYnJlYWsgYXQgc3RhcnQgKG9uIG5lZ2F0aXZlIGVuZCBvZiBidWZmZXIpIG1ha2Ugb25lCisKKyAgICAgICAgICAgIGlmIChlbmRPZkluc2VydGlvbkdhcCAhPSBzdGFydCkgeworCisgICAgICAgICAgICAgICAgLy8gc3BsaXQgc3R5bGUgcnVuIGluIGluc2VydGlvbiBnYXAKKworICAgICAgICAgICAgICAgIGV4cGFuZFN0eWxlVGFibGVJZkZ1bGwoKTsKKworICAgICAgICAgICAgICAgIGZSdW5BcnJheS5mTmVnU3RhcnQtLTsKKyAgICAgICAgICAgICAgICBmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZk5lZ1N0YXJ0XSA9IGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mUG9zRW5kXTsKKyAgICAgICAgICAgICAgICBmUnVuQXJyYXkuZlJ1blN0YXJ0W2ZSdW5BcnJheS5mTmVnU3RhcnRdID0gc3RhcnQgLSBmUnVuQXJyYXkuZ2V0Q3VyVGV4dExlbmd0aCgpOworCisgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInNwbGl0dGluZyBydW4uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBtb2RpZnlTdHlsZXMoaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIGRhbWFnZWRSYW5nZSkgeworCisgICAgICAgIGlmIChsaW1pdCA9PSBzdGFydCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgc2hpZnRUYWJsZVRvKHN0YXJ0KTsKKworICAgICAgICBpbnQgY3VycmVudFJ1blN0YXJ0ID0gc3RhcnQ7CisgICAgICAgIEF0dHJpYnV0ZU1hcCBvbGRTdHlsZTsKKyAgICAgICAgQXR0cmlidXRlTWFwIG1lcmdlU3R5bGUgPSBmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZlBvc0VuZF07CisKKyAgICAgICAgaWYgKGZSdW5BcnJheS5mTmVnU3RhcnQgPCBmUnVuQXJyYXkuZ2V0QXJyYXlMZW5ndGgoKSAmJgorICAgICAgICAgICAgICAgIGZSdW5BcnJheS5mUnVuU3RhcnRbZlJ1bkFycmF5LmZOZWdTdGFydF0rZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKSA9PSBzdGFydCkgeworCisgICAgICAgICAgICBvbGRTdHlsZSA9IGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mTmVnU3RhcnRdOworICAgICAgICAgICAgKytmUnVuQXJyYXkuZk5lZ1N0YXJ0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb2xkU3R5bGUgPSBtZXJnZVN0eWxlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBtb2RpZmllZEFueXdoZXJlID0gZmFsc2U7CisgICAgICAgIGZvcig7OykgeworCisgICAgICAgICAgICBib29sZWFuIG1vZGlmaWVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIHB1c2ggbmV3IHN0eWxlIGludG8gZ2FwIG9uIHBvc2l0aXZlIHNpZGUKKyAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBuZXdTdHlsZSA9IG1vZGlmaWVyLm1vZGlmeVN0eWxlKG9sZFN0eWxlKTsKKyAgICAgICAgICAgIGlmIChkYW1hZ2VkUmFuZ2UgIT0gbnVsbCAmJiAhbmV3U3R5bGUuZXF1YWxzKG9sZFN0eWxlKSkgeworICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gbW9kaWZpZWRBbnl3aGVyZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZGFtYWdlZFJhbmdlWzBdID0gTWF0aC5taW4oY3VycmVudFJ1blN0YXJ0LCBkYW1hZ2VkUmFuZ2VbMF0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW5ld1N0eWxlLmVxdWFscyhtZXJnZVN0eWxlKSkgeworCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSdW5TdGFydCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGFuZFN0eWxlVGFibGVJZkZ1bGwoKTsKKyAgICAgICAgICAgICAgICAgICAgKytmUnVuQXJyYXkuZlBvc0VuZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZlBvc0VuZF0gPSBuZXdTdHlsZTsKKyAgICAgICAgICAgICAgICBmUnVuQXJyYXkuZlJ1blN0YXJ0W2ZSdW5BcnJheS5mUG9zRW5kXSA9IGN1cnJlbnRSdW5TdGFydDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWVyZ2VTdHlsZSA9IG5ld1N0eWxlOworCisgICAgICAgICAgICBpbnQgbmV4dFJ1blN0YXJ0ID0gZlJ1bkFycmF5LmdldExvZ2ljYWxSdW5TdGFydChmUnVuQXJyYXkuZk5lZ1N0YXJ0KTsKKworICAgICAgICAgICAgaWYgKGxpbWl0ID4gbmV4dFJ1blN0YXJ0KSB7CisgICAgICAgICAgICAgICAgb2xkU3R5bGUgPSBmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZk5lZ1N0YXJ0XTsKKyAgICAgICAgICAgICAgICBjdXJyZW50UnVuU3RhcnQgPSBuZXh0UnVuU3RhcnQ7CisgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgICAgIGRhbWFnZWRSYW5nZVsxXSA9IE1hdGgubWF4KGN1cnJlbnRSdW5TdGFydCwgZGFtYWdlZFJhbmdlWzFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytmUnVuQXJyYXkuZk5lZ1N0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGxpbWl0IDwgbmV4dFJ1blN0YXJ0ICYmICFvbGRTdHlsZS5lcXVhbHMobWVyZ2VTdHlsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwYW5kU3R5bGVUYWJsZUlmRnVsbCgpOworICAgICAgICAgICAgICAgICAgICArK2ZSdW5BcnJheS5mUG9zRW5kOworICAgICAgICAgICAgICAgICAgICBmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZlBvc0VuZF0gPSBvbGRTdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgZlJ1bkFycmF5LmZSdW5TdGFydFtmUnVuQXJyYXkuZlBvc0VuZF0gPSBsaW1pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgICAgIGRhbWFnZWRSYW5nZVsxXSA9IE1hdGgubWF4KGxpbWl0LCBkYW1hZ2VkUmFuZ2VbMV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIG1lcmdlIGxhc3QgcnVuIGlmIG5lZWRlZAorICAgICAgICBpZiAoKGZSdW5BcnJheS5mTmVnU3RhcnQgPCBmUnVuQXJyYXkuZ2V0QXJyYXlMZW5ndGgoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mTmVnU3RhcnRdLmVxdWFscyhmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZlBvc0VuZF0pKSkgeworICAgICAgICAgICAgZlJ1bkFycmF5LmZOZWdTdGFydCsrOworICAgICAgICB9CisKKyAgICAgICAgZlJ1bkFycmF5LnJ1blN0YXJ0c0NoYW5nZWQoKTsKKworICAgICAgICByZXR1cm4gbW9kaWZpZWRBbnl3aGVyZTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHN0eWxlU3RhcnQoaW50IHBvcykgeworCisgICAgICAgIGlmIChwb3MgPT0gZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIHBvczsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmUnVuQXJyYXkuZ2V0TG9naWNhbFJ1blN0YXJ0KGZSdW5BcnJheS5maW5kUnVuQ29udGFpbmluZyhwb3MpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHN0eWxlTGltaXQoaW50IHBvcykgeworCisgICAgICAgIGlmIChwb3MgPT0gZlJ1bkFycmF5LmdldEN1clRleHRMZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIHBvczsKKyAgICAgICAgfQorCisgICAgICAgIGludCBydW4gPSBmUnVuQXJyYXkuZmluZFJ1bkNvbnRhaW5pbmcocG9zKTsKKworICAgICAgICBpZiAocnVuID09IGZSdW5BcnJheS5mUG9zRW5kKSB7CisgICAgICAgICAgICBydW4gPSBmUnVuQXJyYXkuZk5lZ1N0YXJ0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKytydW47CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZlJ1bkFycmF5LmdldExvZ2ljYWxSdW5TdGFydChydW4pOworICAgIH0KKworLyoqCisqIFJldHVybiBzdHlsZSBhdCBsb2NhdGlvbiA8dHQ+cG9zPC90dD4uCisqIEBwYXJhbSBwb3MgYW4gb2Zmc2V0IGludG8gdGhlIHRleHQKKyogQHJldHVybnMgdGhlIHN0eWxlIG9mIHRoZSBjaGFyYWN0ZXIgYXQgPHR0Pm9mZnNldDwvdHQ+CisqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgc3R5bGVBdChpbnQgcG9zKSB7CisKKyAgICAgICAgcmV0dXJuIGZTdHlsZVRhYmxlWyBmUnVuQXJyYXkuZmluZFJ1bkNvbnRhaW5pbmcocG9zKSBdOworICAgIH0KKworLyoKKyogU2V0IHJ1biBzdGFydCwgcnVuIGxlbmd0aCwgYW5kIHJ1biB2YWx1ZSBpbiBhbiBpdGVyYXRvci4gIFRoaXMgbWV0aG9kIGlzCisqIG9ubHkgY2FsbGVkIGJ5IGEgPHR0PlN0eWxlUnVuSXRlcmF0b3I8L3R0Pi4KKyogQHBhcmFtIHBvcyBhbiBvZmZzZXQgaW50byB0aGUgdGV4dC4gIFRoZSBpdGVyYXRvcidzIHJ1biBzdGFydCBhbmQgcnVuIGxpbWl0IGFyZQorKiBzZXQgdG8gdGhlIHJ1biBjb250YWluaW5nIDx0dD5wb3M8L3R0Pi4KKyogQHBhcmFtIGl0ZXIgdGhlIGl0ZXJhdG9yIHRvIHNldAorKi8KKyAgICB2b2lkIHNldEl0ZXJhdG9yKGludCBwb3MsIFN0eWxlUnVuSXRlcmF0b3IgaXRlcikgeworCisgICAgICAgIGlmICgocG9zIDwgMCkgfHwgKHBvcyA+IGZSdW5BcnJheS5nZXRDdXJUZXh0TGVuZ3RoKCkpKSB7CisKKyAgICAgICAgICAgIGl0ZXIuc2V0KG51bGwsIDAsIDAsIGtOb1J1bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgcnVuID0gZlJ1bkFycmF5LmZpbmRSdW5Db250YWluaW5nKHBvcyk7CisKKyAgICAgICAgc2V0SXRlcmF0b3JVc2luZ1J1bihydW4sIGl0ZXIpOworICAgIH0KKworLyoqCisqIFNldCBydW4gc3RhcnQsIHJ1biBsZW5ndGgsIGFuZCBydW4gdmFsdWUgaW4gYW4gaXRlcmF0b3IuICBUaGlzIG1ldGhvZCBpcworKiBvbmx5IGNhbGxlZCBieSBhIDx0dD5TdHlsZVJ1bkl0ZXJhdG9yPC90dD4uCisqIEBwYXJhbSBydW4gdGhlIGluZGV4IG9mIHRoZSBydW4gdG8gd2hpY2ggdGhlIGl0ZXJhdG9yIHNob3VsZCBiZSBzZXQKKyogQHBhcmFtIGl0ZXIgdGhlIGl0ZXJhdG9yIHRvIHNldAorKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0SXRlcmF0b3JVc2luZ1J1bihpbnQgcnVuLCBTdHlsZVJ1bkl0ZXJhdG9yIGl0ZXIpIHsKKworICAgICAgICBpbnQgbGFzdFZhbGlkUnVuID0gZlJ1bkFycmF5Lmxhc3RSdW4oKTsKKworICAgICAgICBpZiAocnVuIDwgMCB8fCBydW4gPiBsYXN0VmFsaWRSdW4pIHsKKworICAgICAgICAgICAgaXRlci5zZXQobnVsbCwgMCwgMCwga05vUnVuKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydW4gPT0gZlJ1bkFycmF5LmZQb3NFbmQrMSkKKyAgICAgICAgICAgIHJ1biA9IGZSdW5BcnJheS5mTmVnU3RhcnQ7CisgICAgICAgIGVsc2UgaWYgKHJ1biA9PSBmUnVuQXJyYXkuZk5lZ1N0YXJ0LTEpCisgICAgICAgICAgICBydW4gPSBmUnVuQXJyYXkuZlBvc0VuZDsKKworICAgICAgICBpbnQgcnVuU3RhcnQgPSBmUnVuQXJyYXkuZlJ1blN0YXJ0W3J1bl07CisgICAgICAgIGlmIChydW5TdGFydCA8IDApCisgICAgICAgICAgICBydW5TdGFydCArPSBmUnVuQXJyYXkuZ2V0Q3VyVGV4dExlbmd0aCgpOworCisgICAgICAgIEF0dHJpYnV0ZU1hcCBzdHlsZSA9IGZTdHlsZVRhYmxlW3J1bl07CisKKyAgICAgICAgaW50IG5leHRSdW47CisKKyAgICAgICAgaWYgKHJ1biA9PSBmUnVuQXJyYXkuZlBvc0VuZCkKKyAgICAgICAgICAgIG5leHRSdW4gPSBmUnVuQXJyYXkuZk5lZ1N0YXJ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXh0UnVuID0gcnVuICsgMTsKKworICAgICAgICBpbnQgcnVuTGltaXQ7CisKKyAgICAgICAgaWYgKG5leHRSdW4gPj0gZlJ1bkFycmF5LmdldEFycmF5TGVuZ3RoKCkpCisgICAgICAgICAgICBydW5MaW1pdCA9IGZSdW5BcnJheS5nZXRDdXJUZXh0TGVuZ3RoKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcnVuTGltaXQgPSBmUnVuQXJyYXkuZlJ1blN0YXJ0W25leHRSdW5dOworICAgICAgICAgICAgaWYgKHJ1bkxpbWl0IDwgMCkKKyAgICAgICAgICAgICAgICBydW5MaW1pdCArPSBmUnVuQXJyYXkuZ2V0Q3VyVGV4dExlbmd0aCgpOworICAgICAgICB9CisKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInNldEl0ZXJhdG9yOiBwb3M9Iitwb3MrIiwgcnVuU3RhcnQ9IitydW5TdGFydCsiLCBydW5MaW1pdD0iK3J1bkxpbWl0KworICAgICAgICAvLyAgICAgICAgICAgICAgICAgICIsIHJ1bj0iK3J1bisiLCBmUG9zRW5kPSIrZlBvc0VuZCk7CisKKyAgICAgICAgaXRlci5zZXQoc3R5bGUsIHJ1blN0YXJ0LCBydW5MaW1pdCwgcnVuKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBNQ29uc3RUZXh0IHNyY1RleHQsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0KQorICAgIHsKKyAgICAgICAgZGVsZXRlVGV4dChzdGFydCwgbGltaXQpOworICAgICAgICBpZiAoc3JjU3RhcnQgPT0gc3JjTGltaXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHByZXBhcmVTdHlsZUluc2VydChzdGFydCk7CisgICAgICAgIGZvciAoaW50IGoyID0gc3JjU3RhcnQ7IGoyIDwgc3JjTGltaXQ7IGoyID0gc3JjVGV4dC5jaGFyYWN0ZXJTdHlsZUxpbWl0KGoyKSkKKyAgICAgICAgeworICAgICAgICAgICAgQXR0cmlidXRlTWFwIGF0dHJpYnV0ZU1hcCA9IHNyY1RleHQuY2hhcmFjdGVyU3R5bGVBdChqMik7CisgICAgICAgICAgICBpZiAoZlJ1bkFycmF5LmZQb3NFbmQgPCAwIHx8ICFmU3R5bGVUYWJsZVtmUnVuQXJyYXkuZlBvc0VuZF0uZXF1YWxzKGF0dHJpYnV0ZU1hcCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXhwYW5kU3R5bGVUYWJsZUlmRnVsbCgpOworICAgICAgICAgICAgICAgIGZSdW5BcnJheS5mUG9zRW5kKys7CisgICAgICAgICAgICAgICAgZlJ1bkFycmF5LmZSdW5TdGFydFtmUnVuQXJyYXkuZlBvc0VuZF0gPSBqMiAtIHNyY1N0YXJ0ICsgc3RhcnQ7CisgICAgICAgICAgICAgICAgZlN0eWxlVGFibGVbZlJ1bkFycmF5LmZQb3NFbmRdID0gYXR0cmlidXRlTWFwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZSdW5BcnJheS5hZGRUb0N1clRleHRMZW5ndGgoc3JjTGltaXQgLSBzcmNTdGFydCk7CisgICAgICAgIGlmIChmUnVuQXJyYXkuZk5lZ1N0YXJ0IDwgZlJ1bkFycmF5LmdldEFycmF5TGVuZ3RoKCkgJiYgZlN0eWxlVGFibGVbZlJ1bkFycmF5LmZOZWdTdGFydF0uZXF1YWxzKGZTdHlsZVRhYmxlW2ZSdW5BcnJheS5mUG9zRW5kXSkpCisgICAgICAgICAgICBmUnVuQXJyYXkuZk5lZ1N0YXJ0Kys7CisgICAgfQorCisgICAgcHJpdmF0ZSAgc3RhdGljIGZpbmFsIGludCBrTm9SdW4gPSAtNDI7IC8vIGl0ZXJhdG9yIHVzZQorCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBTdHlsZVJ1bkl0ZXJhdG9yIC8qaW1wbGVtZW50cyBNU3R5bGVSdW5JdGVyYXRvciovIHsKKworICAgICAgICBTdHlsZVJ1bkl0ZXJhdG9yKGludCBzdGFydCwgaW50IGxpbWl0KQorICAgICAgICB7CisgICAgICAgICAgICByZXNldChzdGFydCwgbGltaXQsIHN0YXJ0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlc2V0KGludCBzdGFydCwgaW50IGxpbWl0LCBpbnQgcG9zKQorICAgICAgICB7CisgICAgICAgICAgICBmU3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgIGZMaW1pdCA9IGxpbWl0OworICAgICAgICAgICAgc2V0SXRlcmF0b3IoZlN0YXJ0LCB0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZlN0eWxlICE9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBuZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZSdW5MaW1pdCA8IGZMaW1pdCkgeworICAgICAgICAgICAgICAgIGZDdXJyZW50UnVuKys7CisgICAgICAgICAgICAgICAgc2V0SXRlcmF0b3JVc2luZ1J1bihmQ3VycmVudFJ1biwgdGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0KG51bGwsIDAsIDAsIGtOb1J1bik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBwcmV2KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZSdW5TdGFydCA+IGZTdGFydCkgeworICAgICAgICAgICAgICAgIGZDdXJyZW50UnVuLS07CisgICAgICAgICAgICAgICAgc2V0SXRlcmF0b3JVc2luZ1J1bihmQ3VycmVudFJ1biwgdGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0KG51bGwsIDAsIDAsIGtOb1J1bik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXQoaW50IHBvcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBvcyA+PSBmU3RhcnQgJiYgcG9zIDwgZkxpbWl0KSB7CisgICAgICAgICAgICAgICAgc2V0SXRlcmF0b3IocG9zLCB0aGlzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2V0KG51bGwsIDAsIDAsIGtOb1J1bik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldChBdHRyaWJ1dGVNYXAgc3R5bGUsIGludCBzdGFydCwgaW50IGxpbWl0LCBpbnQgY3VycmVudFJ1bikKKyAgICAgICAgeworICAgICAgICAgICAgZlN0eWxlID0gc3R5bGU7CisgICAgICAgICAgICBmQ3VycmVudFJ1biA9IGN1cnJlbnRSdW47CisgICAgICAgICAgICBmUnVuU3RhcnQgPSBzdGFydCA8IGZTdGFydCA/IGZTdGFydCA6IHN0YXJ0OworICAgICAgICAgICAgZlJ1bkxpbWl0ID0gbGltaXQgPiBmTGltaXQgPyBmTGltaXQgOiBsaW1pdDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlc2V0KGludCBzdGFydCwgaW50IGxpbWl0KQorICAgICAgICB7CisgICAgICAgICAgICByZXNldChzdGFydCwgbGltaXQsIHN0YXJ0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGZpcnN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgc2V0KGZTdGFydCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBsYXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgc2V0KGZMaW1pdCAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCByYW5nZVN0YXJ0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZTdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgcmFuZ2VMaW1pdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmTGltaXQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IHJhbmdlTGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZMaW1pdCAtIGZTdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgc3R5bGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZlN0eWxlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBydW5TdGFydCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmUnVuU3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IHJ1bkxpbWl0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZSdW5MaW1pdDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgcnVuTGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZSdW5MaW1pdCAtIGZSdW5TdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgaW50IGZTdGFydDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgZkxpbWl0OworICAgICAgICBwcml2YXRlIEF0dHJpYnV0ZU1hcCBmU3R5bGU7CisgICAgICAgIHByaXZhdGUgaW50IGZSdW5TdGFydDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgZlJ1bkxpbWl0OworICAgICAgICBwcml2YXRlIGludCBmQ3VycmVudFJ1bjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9TdHlsZU1vZGlmaWVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1N0eWxlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lN2ZiYThhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9TdHlsZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFN0eWxlTW9kaWZpZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozNiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlU2V0OworCisvKioKKyAqIFN0eWxlTW9kaWZpZXIgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIG9wZXJhdGlvbnMgb24gQXR0cmlidXRlTWFwLiAgVG8gaW1wbGVtZW50CisgKiBhbiBvcGVyYXRpb24gb24gQXR0cmlidXRlTWFwLCBzdWJjbGFzcyBTdHlsZU1vZGlmaWVyIGFuZCBvdmVycmlkZQorICogPGNvZGU+bW9kaWZ5U3R5bGU8L2NvZGU+LiAgU3R5bGVNb2RpZmllcnMgYXJlIHVzZWQgYnkgTVRleHQuCisgKiA8cD4KKyAqIEZvciBjb252ZW5pZW5jZSwgdGhpcyBjbGFzcyBjb250YWlucyBmYWN0b3J5IG1ldGhvZHMgd2hpY2ggd2lsbCBjcmVhdGUgYQorICogU3R5bGVNb2RpZmllciBmb3IKKyAqIGNlcnRhaW4gY29tbW9uIG9wZXJhdGlvbnM6IGF0dHJpYnV0ZSB1bmlvbiwgYXR0cmlidXRlIHJlbW92YWwsIGFuZCBBdHRyaWJ1dGVNYXAKKyAqIHJlcGxhY2VtZW50LgorICogQHNlZSBBdHRyaWJ1dGVNYXAKKyAqIEBzZWUgQXR0cmlidXRlU2V0CisgKiBAc2VlIE1UZXh0CisgKi8KKy8qCisgKiB7amJyfSBTdHlsZU1vZGlmaWVyIGlzIG5vdCB0aGUgYmVzdCBuYW1lIGZvciB0aGlzIGNsYXNzIC0gc3R5bGVzIGFyZSBpbW11dGFibGUgYW5kIG5ldmVyCisgKiByZWFsbHkgbW9kaWZpZWQuCisgKi8KK3B1YmxpYyBjbGFzcyBTdHlsZU1vZGlmaWVyCit7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBTdHlsZU1vZGlmaWVyLgorICAgICAqLworICAgIHByb3RlY3RlZCBTdHlsZU1vZGlmaWVyKCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgcmVzdWx0IG9mIHRoaXMgU3R5bGVNb2RpZmllcidzIG9wZXJhdGlvbiBvbiB0aGUgZ2l2ZW4gc3R5bGUuCisgICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0IHJldHVybnMgdGhlIGdpdmVuIHN0eWxlLgorICAgICAqIEBwYXJhbSBzdHlsZSB0aGUgQXR0cmlidXRlTWFwIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBvbgorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgbW9kaWZ5U3R5bGUoQXR0cmlidXRlTWFwIHN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0eWxlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgU3R5bGVNb2RpZmllciB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUgZ2l2ZW4gc3R5bGUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHlsZU1vZGlmaWVyIElERU5USVRZID0gbmV3IFN0eWxlTW9kaWZpZXIoKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIFN0eWxlTW9kaWZpZXIgd2hvc2Ugb3BlcmF0aW9uIGlzCisgICAgICogPGNvZGU+c3R5bGUuYWRkQXR0cmlidXRlcyhzKTwvY29kZT4sCisgICAgICogd2hlcmUgPGNvZGU+c3R5bGU8L2NvZGU+IGlzIHRoZSBBdHRyaWJ1dGVNYXAgcGFzc2VkIHRvCisgICAgICogPGNvZGU+bW9kaWZ5U3R5bGU8L2NvZGU+LgorICAgICAqIEBwYXJhbSBzIHRoZSBBdHRyaWJ1dGVNYXAgdG8gdW5pb24gd2l0aAorICAgICAqIEByZXR1cm4gYSBTdHlsZU1vZGlmaWVyIGZvciB0aGlzIG9wZXJhdGlvbgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3R5bGVNb2RpZmllciBjcmVhdGVBZGRNb2RpZmllcihBdHRyaWJ1dGVNYXAgcykgeworCisgICAgICAgIHJldHVybiBuZXcgU3R5bGVBZGRNb2RpZmllcihzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBTdHlsZU1vZGlmaWVyIHdob3NlIG9wZXJhdGlvbiBpcworICAgICAqIDxjb2RlPnN0eWxlLmFkZEF0dHJpYnV0ZShrZXksIHZhbHVlKTwvY29kZT4sCisgICAgICogd2hlcmUgPGNvZGU+c3R5bGU8L2NvZGU+IGlzIHRoZSBBdHRyaWJ1dGVNYXAgcGFzc2VkIHRvCisgICAgICogPGNvZGU+bW9kaWZ5U3R5bGU8L2NvZGU+LgorICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBhZGQKKyAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFkZAorICAgICAqIEByZXR1cm4gYSBTdHlsZU1vZGlmaWVyIGZvciB0aGlzIG9wZXJhdGlvbgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3R5bGVNb2RpZmllciBjcmVhdGVBZGRNb2RpZmllcihPYmplY3Qga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgdmFsdWUpIHsKKworICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZUFkZE1vZGlmaWVyKGtleSwgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIFN0eWxlTW9kaWZpZXIgd2hvc2Ugb3BlcmF0aW9uIHJldHVybnMgPGNvZGU+czwvY29kZT4sCisgICAgICogaWdub3JpbmcgdGhlIHBhcmFtZXRlciB0byA8Y29kZT5tb2RpZnlTdHlsZTwvY29kZT4uCisgICAgICogQHBhcmFtIHMgdGhlIEF0dHJpYnV0ZU1hcCB3aGljaCB3aWxsIHJlcGxhY2UgYW55IG90aGVyIEF0dHJpYnV0ZU1hcAorICAgICAqIEByZXR1cm4gYSBTdHlsZU1vZGlmaWVyIGZvciB0aGlzIG9wZXJhdGlvbgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3R5bGVNb2RpZmllciBjcmVhdGVSZXBsYWNlTW9kaWZpZXIoQXR0cmlidXRlTWFwIHMpIHsKKworICAgICAgICByZXR1cm4gbmV3IFN0eWxlUmVwbGFjZU1vZGlmaWVyKHMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIFN0eWxlTW9kaWZpZXIgd2hvc2Ugb3BlcmF0aW9uIGlzCisgICAgICogPGNvZGU+c3R5bGUucmVtb3ZlQXR0cmlidXRlcyhzKTwvY29kZT4sCisgICAgICogd2hlcmUgPGNvZGU+c3R5bGU8L2NvZGU+IGlzIHRoZSBBdHRyaWJ1dGVNYXAgcGFzc2VkIHRvCisgICAgICogPGNvZGU+bW9kaWZ5U3R5bGU8L2NvZGU+LgorICAgICAqIEBwYXJhbSBzIHRoZSBBdHRyaWJ1dGVTZXQgb2YgYXR0cmlidXRlcyB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJuIGEgU3R5bGVNb2RpZmllciBmb3IgdGhpcyBvcGVyYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0eWxlTW9kaWZpZXIgY3JlYXRlUmVtb3ZlTW9kaWZpZXIoQXR0cmlidXRlU2V0IHMpIHsKKworICAgICAgICByZXR1cm4gbmV3IFN0eWxlUmVtb3ZlTW9kaWZpZXIocyk7CisgICAgfQorCisgICAgc3RhdGljIGZpbmFsIGNsYXNzIEF0dHJpYnV0ZUFkZE1vZGlmaWVyIGV4dGVuZHMgU3R5bGVNb2RpZmllciB7CisKKyAgICAgICAgcHJpdmF0ZSBPYmplY3QgZktleTsKKyAgICAgICAgcHJpdmF0ZSBPYmplY3QgZlZhbHVlOworCisgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGVBZGRNb2RpZmllcihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIHsKKworICAgICAgICAgICAgZktleSA9IGtleTsKKyAgICAgICAgICAgIGZWYWx1ZSA9IHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBtb2RpZnlTdHlsZShBdHRyaWJ1dGVNYXAgc3R5bGUpIHsKKworICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmFkZEF0dHJpYnV0ZShmS2V5LCBmVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIHRoaXMgd2l0aCB0aGUgc3R5bGVzIHRvIGFkZC4gIFRoZXNlIHN0eWxlcyB3aWxsIGFkZCB0byBhbmQgb3ZlcnJpZGUgYW55IGFscmVhZHkKKyAgICAgKiBwcmVzZW50IGluIHRoZSBzdHlsZSBwYXNzZWQgdG8gbW9kaWZ5U3R5bGUuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGNsYXNzIFN0eWxlQWRkTW9kaWZpZXIgZXh0ZW5kcyBTdHlsZU1vZGlmaWVyCisgICAgeworICAgICAgICBwcml2YXRlIEF0dHJpYnV0ZU1hcCBmU3R5bGU7CisKKyAgICAgICAgcHVibGljIFN0eWxlQWRkTW9kaWZpZXIoQXR0cmlidXRlTWFwIHN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3R5bGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0eWxlIGlzIG51bGwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZTdHlsZSA9IHN0eWxlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBtb2RpZnlTdHlsZShBdHRyaWJ1dGVNYXAgc3R5bGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdHlsZS5hZGRBdHRyaWJ1dGVzKGZTdHlsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgdGhpcyB3aXRoIHRoZSBzdHlsZXMgdG8gcmVwbGFjZS4gIEFsbCBzdHlsZSBydW5zIHdpbGwgaGF2ZSBvbmx5IHRoZXNlCisgICAgICogc3R5bGVzLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBTdHlsZVJlcGxhY2VNb2RpZmllciBleHRlbmRzIFN0eWxlTW9kaWZpZXIKKyAgICB7CisgICAgICAgIHByaXZhdGUgQXR0cmlidXRlTWFwIGZTdHlsZTsKKworICAgICAgICBwdWJsaWMgU3R5bGVSZXBsYWNlTW9kaWZpZXIoQXR0cmlidXRlTWFwIHN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3R5bGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0eWxlIGlzIG51bGwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZTdHlsZSA9IHN0eWxlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBtb2RpZnlTdHlsZShBdHRyaWJ1dGVNYXAgc3R5bGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmU3R5bGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgY2xhc3MgU3R5bGVSZW1vdmVNb2RpZmllciBleHRlbmRzIFN0eWxlTW9kaWZpZXIgeworCisgICAgICAgIHByaXZhdGUgQXR0cmlidXRlU2V0IGZSZW1vdmVTZXQ7CisKKyAgICAgICAgcHVibGljIFN0eWxlUmVtb3ZlTW9kaWZpZXIoQXR0cmlidXRlU2V0IHJlbW92ZVNldCkgeworCisgICAgICAgICAgICBpZiAocmVtb3ZlU2V0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzZXQgaXMgbnVsbCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZlJlbW92ZVNldCA9IHJlbW92ZVNldDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgbW9kaWZ5U3R5bGUoQXR0cmlidXRlTWFwIHN0eWxlKSB7CisKKyAgICAgICAgICAgIHJldHVybiBzdHlsZS5yZW1vdmVBdHRyaWJ1dGVzKGZSZW1vdmVTZXQpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9TdHlsZWRUZXh0LmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1N0eWxlZFRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNzBmNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9TdHlsZWRUZXh0LmphdmEKQEAgLTAsMCArMSw2ODYgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFN0eWxlZFRleHQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjMgJCAkRGF0ZTogMjAwMi8wMy8yMCAwNToxMToxNyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKK2ltcG9ydCBqYXZhLmlvLkV4dGVybmFsaXphYmxlOworaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXQ7CitpbXBvcnQgamF2YS5pby5PYmplY3RPdXRwdXQ7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBNVGV4dCwgYSBtb2RpZnlhYmxlLCBzdHlsZWQgdGV4dAorICogc3RvcmFnZSBtb2RlbC4gIEFkZGl0aW9uYWxseSwgaXQgc3VwcG9ydHMgcGVyc2lzdGFuY2UgdGhyb3VnaCB0aGUKKyAqIEV4dGVybmFsaXphYmxlIGludGVyZmFjZS4KKyAqIEBzZWUgTVRleHQKKyAqLworCisvKgorICAgIDEwLzI4Lzk2IHtqZn0gLSBzcGxpdCB0aGUgY2hhcmFjdGVyIGFuZCBwYXJhZ3JhcGggc3R5bGUgYWNjZXNzIGFuZCBzZXR0ZXIgZnVuY3Rpb24gYXJvdW5kLi4uCisgICAgICAgICAgICBqdXN0IHRvIGtlZXAgdGhpbmdzIGludGVyZXN0aW5nLgorICAgIDgvNy85NiB7amZ9IC0gbW92ZWQgcGFyYWdyYXBoIGJyZWFrIGltcGxlbWVudGF0aW9uIGZyb20gQWJzdHJhY3RUZXh0IGludG8gU3R5bGUgdGV4dC4KKyAgICAgICAgICAgIC0gYWRkZWQgY291bnRTdHlsZXMsIGdldFN0eWxlcywgYW5kIFJlcGxhY2VTdHlsZXMgaW1wbGVtZW50YXRpb24uCisKKyAgICA4LzE0Lzk2IHNmYiAgZWxpbWluYXRlZCBTdHlsZVNoZWV0SXRlcmF0b3IKKworICAgIDgvMjkvOTYge2picn0gY2hhbmdlZCBpdGVyLWJhc2VkIHJlcGxhY2UgbWV0aG9kIC0gZG9lc24ndCBjYWxsIGF0KCkgdW5sZXNzIGl0IGlzIHNhZmUgdG8gZG8gc28KKyAgICAgICAgICAgIEFsc28sIGFkZGVkIGNoZWNrU3RhcnRBbmRMaW1pdCBmb3IgZGVidWdnaW5nCisKKyAgICA3LzMxLzk4IFN3aXRjaGVkIGZyb20gU3R5bGUgdG8gQXR0cmlidXRlTWFwCisKKyovCisKK3B1YmxpYyBmaW5hbCBjbGFzcyBTdHlsZWRUZXh0IGV4dGVuZHMgTVRleHQgaW1wbGVtZW50cyBFeHRlcm5hbGl6YWJsZQoreworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENVUlJFTlRfVkVSU0lPTiA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMjIzNTY5MzQ7CisKKyAgICAvKiB1bmljb2RlIHN0b3JhZ2UgKi8KKyAgICBwcml2YXRlIE1DaGFyQnVmZmVyICAgICAgICAgZkNoYXJCdWZmZXI7CisgICAgLyogY2hhcmFjdGVyIHN0eWxlIHN0b3JhZ2UgKi8KKyAgICBwcml2YXRlIE1TdHlsZUJ1ZmZlciAgICAgICAgZlN0eWxlQnVmZmVyOworICAgIC8qIHBhcmFncmFwaCBzdHlsZSBzdG9yYWdlICovCisgICAgcHJpdmF0ZSBNUGFyYWdyYXBoQnVmZmVyICAgIGZQYXJhZ3JhcGhCdWZmZXI7CisKKyAgICBwcml2YXRlIHRyYW5zaWVudCBpbnQgZlRpbWVTdGFtcCA9IDA7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgaW50W10gZkRhbWFnZWRSYW5nZSA9IHsgSW50ZWdlci5NQVhfVkFMVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci5NSU5fVkFMVUUgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEZvcmNlTW9kaWZpZXIgZXh0ZW5kcyBTdHlsZU1vZGlmaWVyIHsKKworICAgICAgICBwcml2YXRlIEF0dHJpYnV0ZU1hcCBmU3R5bGUgPSBBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUDsKKworICAgICAgICB2b2lkIHNldFN0eWxlKEF0dHJpYnV0ZU1hcCBzdHlsZSkgeworCisgICAgICAgICAgICBmU3R5bGUgPSBzdHlsZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgbW9kaWZ5U3R5bGUoQXR0cmlidXRlTWFwIHN0eWxlKSB7CisKKyAgICAgICAgICAgIHJldHVybiBmU3R5bGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBLZWVwIHRoaXMgYXJvdW5kIGZvcnVzZSBpbiByZXBsYWNlQ2hhclN0eWxlc1dpdGguICBPSyBzaW5jZQorICAgIC8vIHRoaXMgY2xhc3MgaXNuJ3QgdGhyZWFkc2FmZSBhbnl3YXkuCisgICAgcHJpdmF0ZSB0cmFuc2llbnQgRm9yY2VNb2RpZmllciBmb3JjZU1vZGlmaWVyID0gbnVsbDsKKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gQ09OU1RSVUNUT1JTCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYW4gZW1wdHkgdGV4dCBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFN0eWxlZFRleHQoKQorICAgIHsKKyAgICAgICAgdGhpcygwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYW4gZW1wdHkgdGV4dCBvYmplY3QgcmVhZHkgdG8gaG9sZCBhdCBsZWFzdCBjYXBhY2l0eSBjaGFycy4KKyAgICAgKiBAcGFyYW0gY2FwYWNpdHkgdGhlIG1pbmltdW0gY2FwYWNpdHkgb2YgdGhlIGludGVybmFsIHRleHQgYnVmZmVyCisgICAgICovCisgICAgcHVibGljIFN0eWxlZFRleHQoaW50IGNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgZkNoYXJCdWZmZXIgICAgICAgICA9IGNhcGFjaXR5PjA/IG5ldyBDaGFyQnVmZmVyKGNhcGFjaXR5KSA6IG5ldyBDaGFyQnVmZmVyKCk7CisgICAgICAgIGZTdHlsZUJ1ZmZlciAgICAgICAgPSBuZXcgU3R5bGVCdWZmZXIodGhpcywgQXR0cmlidXRlTWFwLkVNUFRZX0FUVFJJQlVURV9NQVApOworICAgICAgICBmUGFyYWdyYXBoQnVmZmVyICAgID0gbmV3IFBhcmFncmFwaEJ1ZmZlcihmQ2hhckJ1ZmZlcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgdGV4dCBvYmplY3Qgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLAorICAgICAqIGluIHRoZSBnaXZlbiBzdHlsZS4KKyAgICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBpbml0aWFsIGNvbnRlbnRzCisgICAgICogQHBhcmFtIGluaXRpYWxTdHlsZSB0aGUgc3R5bGUgb2YgdGhlIGluaXRpYWwgdGV4dAorICAgICAqLworICAgIHB1YmxpYyBTdHlsZWRUZXh0KFN0cmluZyBzdHJpbmcsIEF0dHJpYnV0ZU1hcCBpbml0aWFsU3R5bGUpCisgICAgeworICAgICAgICBmQ2hhckJ1ZmZlciA9IG5ldyBDaGFyQnVmZmVyKHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGZDaGFyQnVmZmVyLnJlcGxhY2UoMCwgMCwgc3RyaW5nLCAwLCBzdHJpbmcubGVuZ3RoKCkpOworCisgICAgICAgIGZTdHlsZUJ1ZmZlciA9IG5ldyBTdHlsZUJ1ZmZlcih0aGlzLCBpbml0aWFsU3R5bGUpOworICAgICAgICBmUGFyYWdyYXBoQnVmZmVyID0gbmV3IFBhcmFncmFwaEJ1ZmZlcihmQ2hhckJ1ZmZlcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgdGV4dCBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gc291cmNlLgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHRleHQgdG8gY29weQorICAgICAqLworICAgIHB1YmxpYyBTdHlsZWRUZXh0KE1Db25zdFRleHQgc291cmNlKSB7CisgICAgICAgIHRoaXMoKTsKKyAgICAgICAgYXBwZW5kKHNvdXJjZSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENyZWF0ZSBhIHRleHQgb2JqZWN0IGZyb20gYSBzdWJyYW5nZSBvZiB0aGUgZ2l2ZW4gc291cmNlLgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIHRleHQgdG8gY29weSBmcm9tCisgICAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIGNvcHkKKyAgICAgKiBAcGFyYW0gc3JjTGltaXQgdGhlIGluZGV4IGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciB0byBjb3B5CisgICAgICovCisgICAgcHVibGljIFN0eWxlZFRleHQoTUNvbnN0VGV4dCBzb3VyY2UsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0KSB7CisgICAgICAgIHRoaXMoKTsKKyAgICAgICAgcmVwbGFjZSgwLCAwLCBzb3VyY2UsIHNyY1N0YXJ0LCBzcmNMaW1pdCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChPYmplY3RPdXRwdXQgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIG91dC53cml0ZUludChDVVJSRU5UX1ZFUlNJT04pOworICAgICAgICBvdXQud3JpdGVPYmplY3QoZkNoYXJCdWZmZXIpOworICAgICAgICBvdXQud3JpdGVPYmplY3QoZlN0eWxlQnVmZmVyKTsKKyAgICAgICAgb3V0LndyaXRlT2JqZWN0KGZQYXJhZ3JhcGhCdWZmZXIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlYWRFeHRlcm5hbChPYmplY3RJbnB1dCBpbikgdGhyb3dzIElPRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKKworICAgICAgICBpbnQgdmVyc2lvbiA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgaWYgKHZlcnNpb24gIT0gQ1VSUkVOVF9WRVJTSU9OKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkludmFsaWQgdmVyc2lvbiBvZiBTdHlsZWRUZXh0OiAiICsgdmVyc2lvbik7CisgICAgICAgIH0KKyAgICAgICAgZkNoYXJCdWZmZXIgPSAoTUNoYXJCdWZmZXIpIGluLnJlYWRPYmplY3QoKTsKKyAgICAgICAgZlN0eWxlQnVmZmVyID0gKE1TdHlsZUJ1ZmZlcikgaW4ucmVhZE9iamVjdCgpOworICAgICAgICBmUGFyYWdyYXBoQnVmZmVyID0gKE1QYXJhZ3JhcGhCdWZmZXIpIGluLnJlYWRPYmplY3QoKTsKKworICAgICAgICByZXNldERhbWFnZWRSYW5nZSgpOworICAgIH0KKworICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gTUNvbnN0VGV4dCBJTlRFUkZBQ0VTCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjaGFyYWN0ZXIgYWNjZXNzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoqCisqIFJldHVybiB0aGUgY2hhcmFjdGVyIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+LgorKiBAcGFyYW0gcG9zIGEgdmFsaWQgb2Zmc2V0IGludG8gdGhlIHRleHQKKyogQHJldHVybiB0aGUgY2hhcmFjdGVyIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+CisqLworICAgIHB1YmxpYyBjaGFyIGF0KGludCBwb3MpCisgICAgeworICAgICAgICByZXR1cm4gZkNoYXJCdWZmZXIuYXQocG9zKTsKKyAgICB9CisKKy8qKgorKiBDb3B5IHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbPGNvZGU+c3RhcnQ8L2NvZGU+LCA8Y29kZT5saW1pdDwvY29kZT4pCisqIGludG8gdGhlIGFycmF5IDxjb2RlPmRzdDwvY29kZT4sIGJlZ2lubmluZyBhdCA8Y29kZT5kc3RTdGFydDwvY29kZT4uCisqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgZmlyc3QgY2hhcmFjdGVyIHdoaWNoIHdpbGwgYmUgY29waWVkIGludG8gdGhlIGFycmF5CisqIEBwYXJhbSBsaW1pdCBvZmZzZXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIHdoaWNoIHdpbGwgYmUgY29waWVkIGludG8gdGhlIGFycmF5CisqIEBwYXJhbSBkc3QgYXJyYXkgaW4gd2hpY2ggdG8gY29weSBjaGFyYWN0ZXJzLiAgVGhlIGxlbmd0aCBvZiA8Y29kZT5kc3Q8L2NvZGU+IG11c3QgYmUgYXQgbGVhc3QKKyogKDxjb2RlPmRzdFN0YXJ0ICsgbGltaXQgLSBzdGFydDwvY29kZT4pLgorKi8KKyAgICBwdWJsaWMgdm9pZCBleHRyYWN0Q2hhcnMoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGNoYXJbXSBkc3QsIGludCBkc3RTdGFydCkKKyAgICB7CisgICAgICAgIGZDaGFyQnVmZmVyLmF0KHN0YXJ0LCBsaW1pdCwgZHN0LCBkc3RTdGFydCk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gdGV4dCBtb2RlbCBjcmVhdGlvbgorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoqCisqIENyZWF0ZSBhbiBNQ29uc3RUZXh0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBpbiB0aGUgcmFuZ2UKKyogWzxjb2RlPnN0YXJ0PC9jb2RlPiwgPGNvZGU+bGltaXQ8L2NvZGU+KS4KKyogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIG5ldyB0ZXh0CisqIEBwYXJhbSBsaW1pdCBvZmZzZXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBuZXcgdGV4dAorKiBAcmV0dXJuIGFuIE1Db25zdFRleHQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2UKKyovCisgICAgcHVibGljIE1Db25zdFRleHQgZXh0cmFjdChpbnQgc3RhcnQsIGludCBsaW1pdCkKKyAgICB7CisgICAgICAgIHJldHVybiBleHRyYWN0V3JpdGFibGUoc3RhcnQsIGxpbWl0KTsKKyAgICB9CisKKy8qKgorKiBDcmVhdGUgYW4gTVRleHQgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyBhbmQgc3R5bGVzIGluIHRoZSByYW5nZQorKiBbPGNvZGU+c3RhcnQ8L2NvZGU+LCA8Y29kZT5saW1pdDwvY29kZT4pLgorKiBAcGFyYW0gc3RhcnQgb2Zmc2V0IG9mIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgbmV3IHRleHQKKyogQHBhcmFtIGxpbWl0IG9mZnNldCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIG5ldyB0ZXh0CisqIEByZXR1cm4gYW4gTUNvbnN0VGV4dCBvYmplY3QgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyBhbmQgc3R5bGVzIGluIHRoZSBnaXZlbiByYW5nZQorKi8KKyAgICBwdWJsaWMgTVRleHQgZXh0cmFjdFdyaXRhYmxlKGludCBzdGFydCwgaW50IGxpbWl0KQorICAgIHsKKyAgICAgICAgTVRleHQgdGV4dCA9IG5ldyBTdHlsZWRUZXh0KCk7CisgICAgICAgIHRleHQucmVwbGFjZSgwLCAwLCB0aGlzLCBzdGFydCwgbGltaXQpOworICAgICAgICB0ZXh0LnJlc2V0RGFtYWdlZFJhbmdlKCk7CisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBzaXplL2NhcGFjaXR5CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoqCisqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBNQ29uc3RUZXh0IG9iamVjdC4gIFRoZSBsZW5ndGggaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0LgorKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIE1Db25zdFRleHQgb2JqZWN0CisqLworICAgIHB1YmxpYyBpbnQgbGVuZ3RoKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmQ2hhckJ1ZmZlci5sZW5ndGgoKTsKKyAgICB9CisKKy8qKgorKiBDcmVhdGUgYSA8Y29kZT5DaGFyYWN0ZXJJdGVyYXRvcjwvY29kZT4gb3ZlciB0aGUgcmFuZ2UgWzxjb2RlPnN0YXJ0PC9jb2RlPiwgPGNvZGU+bGltaXQ8L2NvZGU+KS4KKyogQHBhcmFtIHN0YXJ0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGl0ZXJhdG9yJ3MgcmFuZ2UKKyogQHBhcmFtIGxpbWl0IHRoZSBsaW1pdCBvZiB0aGUgaXRlcmF0b3IncyByYW5nZQorKiBAcmV0dXJuIGEgdmFsaWQgPGNvZGU+Q2hhcmFjdGVySXRlcmF0b3I8L2NvZGU+IG92ZXIgdGhlIHNwZWNpZmllZCByYW5nZQorKiBAc2VlIGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvcgorKi8KKyAgICBwdWJsaWMgQ2hhcmFjdGVySXRlcmF0b3IgY3JlYXRlQ2hhcmFjdGVySXRlcmF0b3IoaW50IHN0YXJ0LCBpbnQgbGltaXQpCisgICAgeworICAgICAgICByZXR1cm4gZkNoYXJCdWZmZXIuY3JlYXRlQ2hhcmFjdGVySXRlcmF0b3Ioc3RhcnQsIGxpbWl0KTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gY2hhcmFjdGVyIHN0eWxlcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgY2hhcmFjdGVyIHN0eWxlIHJ1bgorKiBjb250YWluaW5nIHBvcy4gIEFsbCBjaGFyYWN0ZXJzIGluIGEgc3R5bGUgcnVuIGhhdmUgdGhlIHNhbWUgY2hhcmFjdGVyCisqIHN0eWxlLgorKiBAcmV0dXJuIHRoZSBzdHlsZSBhdCBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPgorKi8KKyAgICBwdWJsaWMgaW50IGNoYXJhY3RlclN0eWxlU3RhcnQoaW50IHBvcykgeworCisgICAgICAgIGNoZWNrUG9zKHBvcywgTEVTU19USEFOX0xFTkdUSCk7CisgICAgICAgIHJldHVybiBmU3R5bGVCdWZmZXIuc3R5bGVTdGFydChwb3MpOworICAgIH0KKworLyoqCisqIFJldHVybiB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBjaGFyYWN0ZXIgc3R5bGUgcnVuCisqIGNvbnRhaW5pbmcgcG9zLiAgQWxsIGNoYXJhY3RlcnMgaW4gYSBzdHlsZSBydW4gaGF2ZSB0aGUgc2FtZSBjaGFyYWN0ZXIKKyogc3R5bGUuCisqIEByZXR1cm4gdGhlIHN0eWxlIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+CisqLworICAgIHB1YmxpYyBpbnQgY2hhcmFjdGVyU3R5bGVMaW1pdChpbnQgcG9zKSB7CisKKyAgICAgICAgY2hlY2tQb3MocG9zLCBOT1RfR1JFQVRFUl9USEFOX0xFTkdUSCk7CisgICAgICAgIHJldHVybiBmU3R5bGVCdWZmZXIuc3R5bGVMaW1pdChwb3MpOworICAgIH0KKworLyoqCisqIFJldHVybiB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY2hhcmFjdGVyIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+LgorKiBAcGFyYW0gcG9zIGEgdmFsaWQgb2Zmc2V0IGludG8gdGhlIHRleHQKKyogQHJldHVybiB0aGUgc3R5bGUgYXQgb2Zmc2V0IDxjb2RlPnBvczwvY29kZT4KKyovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBjaGFyYWN0ZXJTdHlsZUF0KGludCBwb3MpCisgICAgeworICAgICAgICBjaGVja1Bvcyhwb3MsIE5PVF9HUkVBVEVSX1RIQU5fTEVOR1RIKTsKKyAgICAgICAgcmV0dXJuIGZTdHlsZUJ1ZmZlci5zdHlsZUF0KHBvcyk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHBhcmFncmFwaCBib3VuZGFyaWVzIGFuZCBzdHlsZXMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKioKKyogUmV0dXJuIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBhdCBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPi4KKyogQHBhcmFtIHBvcyBhIHZhbGlkIG9mZnNldCBpbnRvIHRoZSB0ZXh0CisqIEByZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIGF0IG9mZnNldCA8Y29kZT5wb3M8L2NvZGU+CisqLworICAgIHB1YmxpYyBpbnQgcGFyYWdyYXBoU3RhcnQoaW50IHBvcykKKyAgICB7CisgICAgICAgIGNoZWNrUG9zKHBvcywgTk9UX0dSRUFURVJfVEhBTl9MRU5HVEgpOworICAgICAgICByZXR1cm4gZlBhcmFncmFwaEJ1ZmZlci5wYXJhZ3JhcGhTdGFydChwb3MpOworICAgIH0KKworLyoqCisqIFJldHVybiB0aGUgbGltaXQgb2YgdGhlIHBhcmFncmFwaCBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgYXQgb2Zmc2V0IDxjb2RlPnBvczwvY29kZT4uCisqIEBwYXJhbSBwb3MgYSB2YWxpZCBvZmZzZXQgaW50byB0aGUgdGV4dAorKiBAcmV0dXJuIHRoZSBsaW1pdCBvZiB0aGUgcGFyYWdyYXBoIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBhdCBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPgorKi8KKyAgICBwdWJsaWMgaW50IHBhcmFncmFwaExpbWl0KGludCBwb3MpCisgICAgeworICAgICAgICBjaGVja1Bvcyhwb3MsIE5PVF9HUkVBVEVSX1RIQU5fTEVOR1RIKTsKKyAgICAgICAgcmV0dXJuIGZQYXJhZ3JhcGhCdWZmZXIucGFyYWdyYXBoTGltaXQocG9zKTsKKyAgICB9CisKKy8qKgorKiBSZXR1cm4gdGhlIHBhcmFncmFwaCBzdHlsZSBhcHBsaWVkIHRvIHRoZSBwYXJhZ3JhcGggY29udGFpbmluZyBvZmZzZXQgPGNvZGU+cG9zPC9jb2RlPi4KKyogQHBhcmFtIHBvcyBhIHZhbGlkIG9mZnNldCBpbnRvIHRoZSB0ZXh0CisqIEByZXR1cm4gdGhlIHBhcmFncmFwaCBzdHlsZSBpbiBlZmZlY3QgYXQgPGNvZGU+cG9zPC9jb2RlPgorKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlTWFwIHBhcmFncmFwaFN0eWxlQXQoaW50IHBvcykKKyAgICB7CisgICAgICAgIGNoZWNrUG9zKHBvcywgTk9UX0dSRUFURVJfVEhBTl9MRU5HVEgpOworICAgICAgICByZXR1cm4gZlBhcmFncmFwaEJ1ZmZlci5wYXJhZ3JhcGhTdHlsZUF0KHBvcyk7CisgICAgfQorCisvKioKKyogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgc3RhbXAuICBUaGUgdGltZSBzdGFtcCBpcworKiBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgY29udGVudHMgb2YgdGhlIE1Db25zdFRleHQgY2hhbmdlcy4KKyogQHJldHVybiB0aGUgY3VycmVudCBwYXJhZ3JhcGggc3R5bGUgdGltZSBzdGFtcAorKi8KKyAgICBwdWJsaWMgaW50IGdldFRpbWVTdGFtcCgpIHsKKworICAgICAgICByZXR1cm4gZlRpbWVTdGFtcDsKKyAgICB9CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIE1UZXh0IElOVEVSRkFDRVMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBjaGFyYWN0ZXIgbW9kZmljYXRpb24gZnVuY3Rpb25zCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURhbWFnZWRSYW5nZShpbnQgZGVsZXRlU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVsZXRlTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5zZXJ0TGVuZ3RoKSB7CisKKyAgICAgICAgZkRhbWFnZWRSYW5nZVswXSA9IE1hdGgubWluKGZEYW1hZ2VkUmFuZ2VbMF0sIGRlbGV0ZVN0YXJ0KTsKKworICAgICAgICBpZiAoZkRhbWFnZWRSYW5nZVsxXSA+PSBkZWxldGVMaW1pdCkgeworICAgICAgICAgICAgaW50IGxlbmd0aENoYW5nZSA9IGluc2VydExlbmd0aCAtIChkZWxldGVMaW1pdC1kZWxldGVTdGFydCk7CisgICAgICAgICAgICBmRGFtYWdlZFJhbmdlWzFdICs9IGxlbmd0aENoYW5nZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZEYW1hZ2VkUmFuZ2VbMV0gPSBkZWxldGVTdGFydCArIGluc2VydExlbmd0aDsKKyAgICAgICAgfQorICAgIH0KKworLyoqCisqIFJlcGxhY2UgdGhlIGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBpbiB0aGUgcmFuZ2UgWzxjb2RlPnN0YXJ0PC9jb2RlPiwgPGNvZGU+bGltaXQ8L2NvZGU+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzCisqIGFuZCBzdHlsZXMgaW4gPGNvZGU+c3JjVGV4dDwvY29kZT4gaW4gdGhlIHJhbmdlIFs8Y29kZT5zcmNTdGFydDwvY29kZT4sIDxjb2RlPnNyY0xpbWl0PC9jb2RlPikuICA8Y29kZT5zcmNUZXh0PC9jb2RlPiBpcyBub3QKKyogbW9kaWZpZWQuCisqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBiZWdpbnMKKyogQHBhcmFtIGxpbWl0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIHJlcGxhY2Ugb3BlcmF0aW9uIGVuZHMuICBUaGUgY2hhcmFjdGVyIGFuZCBzdHlsZSBhdAorKiA8Y29kZT5saW1pdDwvY29kZT4gaXMgbm90IG1vZGlmaWVkLgorKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMgYW5kIHN0eWxlcworKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIDxjb2RlPnNyY1RleHQ8L2NvZGU+IHdoZXJlIG5ldyBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMgd2lsbCBiZSBvYnRhaW5lZAorKiBAcGFyYW0gc3JjTGltaXQgdGhlIG9mZnNldCBpbnRvIDxjb2RlPnNyY1RleHQ8L2NvZGU+IHdoZXJlIHRoZSBuZXcgY2hhcmFjdGVycyBhbmQgc3R5bGVzIGVuZAorKi8KKyAgICBwdWJsaWMgdm9pZCByZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBNQ29uc3RUZXh0IHRleHQsIGludCBzcmNTdGFydCwgaW50IHNyY0xpbWl0KQorICAgIHsKKyAgICAgICAgaWYgKHRleHQgPT0gdGhpcykgeworICAgICAgICAgICAgdGV4dCA9IG5ldyBTdHlsZWRUZXh0KHRleHQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IGxpbWl0ICYmIHNyY1N0YXJ0ID09IHNyY0xpbWl0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja1N0YXJ0TGltaXQoc3RhcnQsIGxpbWl0KTsKKworICAgICAgICB1cGRhdGVEYW1hZ2VkUmFuZ2Uoc3RhcnQsIGxpbWl0LCBzcmNMaW1pdC1zcmNTdGFydCk7CisKKyAgICAgICAgZkNoYXJCdWZmZXIucmVwbGFjZShzdGFydCwgbGltaXQsIHRleHQsIHNyY1N0YXJ0LCBzcmNMaW1pdCk7CisgICAgICAgIGZTdHlsZUJ1ZmZlci5yZXBsYWNlKHN0YXJ0LCBsaW1pdCwgdGV4dCwgc3JjU3RhcnQsIHNyY0xpbWl0KTsKKyAgICAgICAgZlBhcmFncmFwaEJ1ZmZlci5yZXBsYWNlKHN0YXJ0LCBsaW1pdCwgdGV4dCwgc3JjU3RhcnQsIHNyY0xpbWl0LCBmRGFtYWdlZFJhbmdlKTsKKyAgICAgICAgZlRpbWVTdGFtcCArPSAxOworICAgIH0KKworLyoqCisqIFJlcGxhY2UgdGhlIGNoYXJhY3RlcnMgYW5kIHN0eWxlcyBpbiB0aGUgcmFuZ2UgWzxjb2RlPnN0YXJ0PC9jb2RlPiwgPGNvZGU+bGltaXQ8L2NvZGU+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzCisqIGFuZCBzdHlsZXMgaW4gPGNvZGU+c3JjVGV4dDwvY29kZT4uICA8Y29kZT5zcmNUZXh0PC9jb2RlPiBpcyBub3QKKyogbW9kaWZpZWQuCisqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBiZWdpbnMKKyogQHBhcmFtIGxpbWl0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIHJlcGxhY2Ugb3BlcmF0aW9uIGVuZHMuICBUaGUgY2hhcmFjdGVyIGFuZCBzdHlsZSBhdAorKiA8Y29kZT5saW1pdDwvY29kZT4gaXMgbm90IG1vZGlmaWVkLgorKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMgYW5kIHN0eWxlcworKi8KKyAgICBwdWJsaWMgdm9pZCByZXBsYWNlKGludCBzdGFydCwgaW50IGxpbWl0LCBNQ29uc3RUZXh0IHRleHQpIHsKKworICAgICAgICByZXBsYWNlKHN0YXJ0LCBsaW1pdCwgdGV4dCwgMCwgdGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisvKioKKyogUmVwbGFjZSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgWzxjb2RlPnN0YXJ0PC9jb2RlPiwgPGNvZGU+bGltaXQ8L2NvZGU+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzCisqIGluIDxjb2RlPnNyY0NoYXJzPC9jb2RlPiBpbiB0aGUgcmFuZ2UgWzxjb2RlPnNyY1N0YXJ0PC9jb2RlPiwgPGNvZGU+c3JjTGltaXQ8L2NvZGU+KS4gIE5ldyBjaGFyYWN0ZXJzIHRha2Ugb24gdGhlIHN0eWxlCisqIDxjb2RlPmNoYXJzU3R5bGU8L2NvZGU+LgorKiA8Y29kZT5zcmNDaGFyczwvY29kZT4gaXMgbm90IG1vZGlmaWVkLgorKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gYmVnaW5zCisqIEBwYXJhbSBsaW1pdCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBlbmRzLiAgVGhlIGNoYXJhY3RlciBhdAorKiA8Y29kZT5saW1pdDwvY29kZT4gaXMgbm90IG1vZGlmaWVkLgorKiBAcGFyYW0gc3JjQ2hhcnMgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCisqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPGNvZGU+c3JjQ2hhcnM8L2NvZGU+IHdoZXJlIG5ldyBjaGFyYWN0ZXJzIHdpbGwgYmUgb2J0YWluZWQKKyogQHBhcmFtIHNyY0xpbWl0IHRoZSBvZmZzZXQgaW50byA8Y29kZT5zcmNDaGFyczwvY29kZT4gd2hlcmUgdGhlIG5ldyBjaGFyYWN0ZXJzIGVuZAorKiBAcGFyYW0gY2hhcnNTdHlsZSB0aGUgc3R5bGUgb2YgdGhlIG5ldyBjaGFyYWN0ZXJzCisqLworICAgIHB1YmxpYyB2b2lkIHJlcGxhY2UoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGNoYXJbXSBzcmNDaGFycywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjTGltaXQsIEF0dHJpYnV0ZU1hcCBjaGFyc1N0eWxlKQorICAgIHsKKyAgICAgICAgY2hlY2tTdGFydExpbWl0KHN0YXJ0LCBsaW1pdCk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IGxpbWl0ICYmIHNyY1N0YXJ0ID09IHNyY0xpbWl0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1cGRhdGVEYW1hZ2VkUmFuZ2Uoc3RhcnQsIGxpbWl0LCBzcmNMaW1pdC1zcmNTdGFydCk7CisKKyAgICAgICAgZkNoYXJCdWZmZXIucmVwbGFjZShzdGFydCwgbGltaXQsIHNyY0NoYXJzLCBzcmNTdGFydCwgc3JjTGltaXQpOworCisgICAgICAgIHJlcGxhY2VDaGFyU3R5bGVzV2l0aChzdGFydCwgbGltaXQsIHN0YXJ0ICsgKHNyY0xpbWl0LXNyY1N0YXJ0KSwgY2hhcnNTdHlsZSk7CisKKyAgICAgICAgZlBhcmFncmFwaEJ1ZmZlci5kZWxldGVUZXh0KHN0YXJ0LCBsaW1pdCwgZkRhbWFnZWRSYW5nZSk7CisgICAgICAgIGZQYXJhZ3JhcGhCdWZmZXIuaW5zZXJ0VGV4dChzdGFydCwgc3JjQ2hhcnMsIHNyY1N0YXJ0LCBzcmNMaW1pdCk7CisKKyAgICAgICAgZlRpbWVTdGFtcCArPSAxOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZXBsYWNlQ2hhclN0eWxlc1dpdGgoaW50IHN0YXJ0LCBpbnQgb2xkTGltaXQsIGludCBuZXdMaW1pdCwgQXR0cmlidXRlTWFwIHN0eWxlKSB7CisKKyAgICAgICAgaWYgKHN0YXJ0IDwgb2xkTGltaXQpIHsKKyAgICAgICAgICAgIGZTdHlsZUJ1ZmZlci5kZWxldGVUZXh0KHN0YXJ0LCBvbGRMaW1pdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXJ0IDwgbmV3TGltaXQpIHsKKyAgICAgICAgICAgIGlmIChmb3JjZU1vZGlmaWVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3JjZU1vZGlmaWVyID0gbmV3IEZvcmNlTW9kaWZpZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvcmNlTW9kaWZpZXIuc2V0U3R5bGUoc3R5bGUpOworICAgICAgICAgICAgZlN0eWxlQnVmZmVyLmluc2VydFRleHQoc3RhcnQsIG5ld0xpbWl0KTsKKyAgICAgICAgICAgIGZTdHlsZUJ1ZmZlci5tb2RpZnlTdHlsZXMoc3RhcnQsIG5ld0xpbWl0LCBmb3JjZU1vZGlmaWVyLCBudWxsKTsKKyAgICAgICAgfQorICAgIH0KKworLyoqCisqIFJlcGxhY2UgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFs8Y29kZT5zdGFydDwvY29kZT4sIDxjb2RlPmxpbWl0PC9jb2RlPikgd2l0aCB0aGUgY2hhcmFjdGVyIDxjb2RlPnNyY0NoYXI8L2NvZGU+LgorKiBUaGUgbmV3IGNoYXJhY3RlciB0YWtlcyBvbiB0aGUgc3R5bGUgPGNvZGU+Y2hhclN0eWxlPC9jb2RlPgorKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gYmVnaW5zCisqIEBwYXJhbSBsaW1pdCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBlbmRzLiAgVGhlIGNoYXJhY3RlciBhdAorKiA8Y29kZT5saW1pdDwvY29kZT4gaXMgbm90IG1vZGlmaWVkLgorKiBAcGFyYW0gc3JjQ2hhciB0aGUgbmV3IGNoYXJhY3RlcgorKiBAcGFyYW0gY2hhcnNTdHlsZSB0aGUgc3R5bGUgb2YgdGhlIG5ldyBjaGFyYWN0ZXIKKyovCisgICAgcHVibGljIHZvaWQgcmVwbGFjZShpbnQgc3RhcnQsIGludCBsaW1pdCwgY2hhciBzcmNDaGFyLCBBdHRyaWJ1dGVNYXAgY2hhclN0eWxlKQorICAgIHsKKyAgICAgICAgY2hlY2tTdGFydExpbWl0KHN0YXJ0LCBsaW1pdCk7CisKKyAgICAgICAgdXBkYXRlRGFtYWdlZFJhbmdlKHN0YXJ0LCBsaW1pdCwgMSk7CisKKyAgICAgICAgZkNoYXJCdWZmZXIucmVwbGFjZShzdGFydCwgbGltaXQsIHNyY0NoYXIpOworCisgICAgICAgIHJlcGxhY2VDaGFyU3R5bGVzV2l0aChzdGFydCwgbGltaXQsIHN0YXJ0ICsgMSwgY2hhclN0eWxlKTsKKworICAgICAgICBpZiAoc3RhcnQgPCBsaW1pdCkgeworICAgICAgICAgICAgZlBhcmFncmFwaEJ1ZmZlci5kZWxldGVUZXh0KHN0YXJ0LCBsaW1pdCwgZkRhbWFnZWRSYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBmUGFyYWdyYXBoQnVmZmVyLmluc2VydFRleHQoc3RhcnQsIHNyY0NoYXIpOworCisgICAgICAgIGZUaW1lU3RhbXAgKz0gMTsKKyAgICB9CisKKy8qKgorKiBSZXBsYWNlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhpcyBNVGV4dCAoYm90aCBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMpIHdpdGgKKyogdGhlIGNvbnRlbnRzIG9mIDxjb2RlPnNyY1RleHQ8L2NvZGU+LgorKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMgYW5kIHN0eWxlcworKi8KKyAgICBwdWJsaWMgdm9pZCByZXBsYWNlQWxsKE1Db25zdFRleHQgc3JjVGV4dCkKKyAgICB7CisgICAgICAgIHJlcGxhY2UoMCwgbGVuZ3RoKCksIHNyY1RleHQsIDAsIHNyY1RleHQubGVuZ3RoKCkpOworICAgIH0KKworLyoqCisqIEluc2VydCB0aGUgY29udGVudHMgb2YgPGNvZGU+c3JjVGV4dDwvY29kZT4gKGJvdGggY2hhcmFjdGVycyBhbmQgc3R5bGVzKSBpbnRvIHRoaXMKKyogTVRleHQgYXQgdGhlIHBvc2l0aW9uIHNwZWNpZmllZCBieSA8Y29kZT5wb3M8L2NvZGU+LgorKiBAcGFyYW0gcG9zIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IHdoZXJlIHRoZSBuZXcgdGV4dCBpcyB0byBiZSBpbnNlcnRlZC4KKyogQHBhcmFtIHNyY1RleHQgVGhlIHRleHQgdG8gaW5zZXJ0LgorKi8KKyAgICBwdWJsaWMgdm9pZCBpbnNlcnQoaW50IHBvcywgTUNvbnN0VGV4dCBzcmNUZXh0KQorICAgIHsKKyAgICAgICAgcmVwbGFjZShwb3MsIHBvcywgc3JjVGV4dCwgMCwgc3JjVGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisvKioKKyogQXBwZW5kIHRoZSBjb250ZW50cyBvZiA8Y29kZT5zcmNUZXh0PC9jb2RlPiAoYm90aCBjaGFyYWN0ZXJzIGFuZCBzdHlsZXMpIHRvIHRoZQorKiBlbmQgb2YgdGhpcyBNVGV4dC4KKyogQHBhcmFtIHNyY1RleHQgVGhlIHRleHQgdG8gYXBwZW5kLgorKi8KKyAgICBwdWJsaWMgdm9pZCBhcHBlbmQoTUNvbnN0VGV4dCBzcmNUZXh0KQorICAgIHsKKyAgICAgICAgcmVwbGFjZShsZW5ndGgoKSwgbGVuZ3RoKCksIHNyY1RleHQsIDAsIHNyY1RleHQubGVuZ3RoKCkpOworICAgIH0KKworLyoqCisqIERlbGV0ZSB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGNoYXJhY3RlcnMgKGFuZCBzdHlsZXMpLgorKiBAcGFyYW0gc3RhcnQgT2Zmc2V0IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gZGVsZXRlLgorKiBAcGFyYW0gbGltaXQgT2Zmc2V0IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHJhbmdlIHRvIGRlbGV0ZS4KKyovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlKGludCBzdGFydCwgaW50IGxpbWl0KQorICAgIHsKKyAgICAgICAgcmVwbGFjZShzdGFydCwgbGltaXQsIChjaGFyW10pbnVsbCwgMCwgMCwgQXR0cmlidXRlTWFwLkVNUFRZX0FUVFJJQlVURV9NQVApOworICAgIH0KKworLyoqCisqIERlbGV0ZSBhbGwgY2hhcmFjdGVycyBhbmQgc3R5bGVzLiAgQWx3YXlzIGluY3JlbWVudHMgdGltZSBzdGFtcC4KKyovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkKKyAgICB7CisgICAgICAgIC8vIHJhdGhlciB0aGFuIGdvaW5nIHRocm91Z2ggcmVwbGFjZSgpLCBqdXN0IHJlaW5pdGlhbGl6ZSB0aGUgU3R5bGVkVGV4dCwKKyAgICAgICAgLy8gbGV0dGluZyB0aGUgb2xkIGRhdGEgc3RydWN0dXJlcyBmYWxsIG9uIHRoZSBmbG9vcgorICAgICAgICBmQ2hhckJ1ZmZlciA9IG5ldyBDaGFyQnVmZmVyKCk7CisgICAgICAgIGZTdHlsZUJ1ZmZlciA9IG5ldyBTdHlsZUJ1ZmZlcih0aGlzLCBBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCk7CisgICAgICAgIGZQYXJhZ3JhcGhCdWZmZXIgPSBuZXcgUGFyYWdyYXBoQnVmZmVyKGZDaGFyQnVmZmVyKTsKKyAgICAgICAgZlRpbWVTdGFtcCArPSAxOworICAgICAgICBmRGFtYWdlZFJhbmdlWzBdID0gZkRhbWFnZWRSYW5nZVsxXSA9IDA7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHN0b3JhZ2UgbWFuYWdlbWVudAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIE1pbmltaXplIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIE1UZXh0IG9iamVjdC4KKyovCisgICAgcHVibGljIHZvaWQgY29tcHJlc3MoKSB7CisKKyAgICAgICAgZkNoYXJCdWZmZXIuY29tcHJlc3MoKTsKKyAgICAgICAgZlN0eWxlQnVmZmVyLmNvbXByZXNzKCk7CisgICAgICAgIGZQYXJhZ3JhcGhCdWZmZXIuY29tcHJlc3MoKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gc3R5bGUgbW9kaWZpY2F0aW9uCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogU2V0IHRoZSBzdHlsZSBvZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgTVRleHQgb2JqZWN0IHRvCisqIDxjb2RlPkF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQPC9jb2RlPi4KKyovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlQ2hhcmFjdGVyU3R5bGVzKCkgeworCisgICAgICAgIGZTdHlsZUJ1ZmZlciA9IG5ldyBTdHlsZUJ1ZmZlcih0aGlzLCBBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCk7CisgICAgICAgIGZUaW1lU3RhbXAgKz0gMTsKKyAgICAgICAgZkRhbWFnZWRSYW5nZVswXSA9IDA7CisgICAgICAgIGZEYW1hZ2VkUmFuZ2VbMV0gPSBsZW5ndGgoKTsKKyAgICB9CisKKy8qKgorKiBJbnZva2UgdGhlIGdpdmVuIG1vZGlmaWVyIG9uIGFsbCBjaGFyYWN0ZXIgc3R5bGVzIGZyb20gc3RhcnQgdG8gbGltaXQuCisqIEBwYXJhbSBtb2RpZmllciB0aGUgbW9kaWZpZXIgdG8gYXBwbHkgdG8gdGhlIHJhbmdlLgorKiBAcGFyYW0gc3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBvZiB0ZXh0IHRvIG1vZGlmeS4KKyogQHBhcmFtIGxpbWl0IHRoZSBsaW1pdCBvZiB0aGUgcmFuZ2Ugb2YgdGV4dCB0byBtb2RpZnkuCisqLworICAgIHB1YmxpYyB2b2lkIG1vZGlmeUNoYXJhY3RlclN0eWxlcyhpbnQgc3RhcnQsIGludCBsaW1pdCwgU3R5bGVNb2RpZmllciBtb2RpZmllcikgeworCisgICAgICAgIGNoZWNrU3RhcnRMaW1pdChzdGFydCwgbGltaXQpOworICAgICAgICBib29sZWFuIG1vZGlmaWVkID0gZlN0eWxlQnVmZmVyLm1vZGlmeVN0eWxlcyhzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRGFtYWdlZFJhbmdlKTsKKyAgICAgICAgaWYgKG1vZGlmaWVkKSB7CisgICAgICAgICAgICBmVGltZVN0YW1wICs9IDE7CisgICAgICAgIH0KKyAgICB9CisKKy8qKgorKiBJbnZva2UgdGhlIGdpdmVuIG1vZGlmaWVyIG9uIGFsbCBwYXJhZ3JhcGggc3R5bGVzIGluIHBhcmFncmFwaHMKKyogY29udGFpbmluZyBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbc3RhcnQsIGxpbWl0KS4KKyogQHBhcmFtIG1vZGlmaWVyIHRoZSBtb2RpZmllciB0byBhcHBseSB0byB0aGUgcmFuZ2UuCisqIEBwYXJhbSBzdGFydCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIG9mIHRleHQgdG8gbW9kaWZ5LgorKiBAcGFyYW0gbGltaXQgdGhlIGxpbWl0IG9mIHRoZSByYW5nZSBvZiB0ZXh0IHRvIG1vZGlmeS4KKyovCisgICAgcHVibGljIHZvaWQgbW9kaWZ5UGFyYWdyYXBoU3R5bGVzKGludCBzdGFydCwgaW50IGxpbWl0LCBTdHlsZU1vZGlmaWVyIG1vZGlmaWVyKSB7CisKKyAgICAgICAgY2hlY2tTdGFydExpbWl0KHN0YXJ0LCBsaW1pdCk7CisgICAgICAgIGJvb2xlYW4gbW9kaWZpZWQgPSBmUGFyYWdyYXBoQnVmZmVyLm1vZGlmeVBhcmFncmFwaFN0eWxlcyhzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRGFtYWdlZFJhbmdlKTsKKyAgICAgICAgaWYgKG1vZGlmaWVkKSB7CisgICAgICAgICAgICBmVGltZVN0YW1wICs9IDE7CisgICAgICAgIH0KKyAgICB9CisKKy8qKgorKiBSZXNldCB0aGUgZGFtYWdlZCByYW5nZSB0byBhbiBlbXB0eSBpbnRlcnZhbCwgYW5kIGJlZ2luIGFjY3VtdWxhdGluZyB0aGUgZGFtYWdlZAorKiByYW5nZS4gIFRoZSBkYW1hZ2VkIHJhbmdlIGluY2x1ZGVzIGV2ZXJ5IGluZGV4IHdoZXJlIGEgY2hhcmFjdGVyLCBjaGFyYWN0ZXIgc3R5bGUsCisqIG9yIHBhcmFncmFwaCBzdHlsZSBoYXMgY2hhbmdlZC4KKyogQHNlZSAjZGFtYWdlZFJhbmdlU3RhcnQKKyogQHNlZSAjZGFtYWdlZFJhbmdlTGltaXQKKyovCisgICAgcHVibGljIHZvaWQgcmVzZXREYW1hZ2VkUmFuZ2UoKSB7CisKKyAgICAgICAgZkRhbWFnZWRSYW5nZVswXSA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICBmRGFtYWdlZFJhbmdlWzFdID0gSW50ZWdlci5NSU5fVkFMVUU7CisgICAgfQorCisvKioKKyogUmV0dXJuIHRoZSBzdGFydCBvZiB0aGUgZGFtYWdlZCByYW5nZS4KKyogSWYgdGhlIHN0YXJ0IGlzCisqIDxjb2RlPkludGVnZXIuTUFYX1ZBTFVFPC9jb2RlPiBhbmQgdGhlIGxpbWl0IGlzCisqIDxjb2RlPkludGVnZXIuTUlOX1ZBTFVFPC9jb2RlPiwgdGhlbiB0aGUgZGFtYWdlZCByYW5nZQorKiBpcyBlbXB0eS4KKyogQHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRhbWFnZWQgcmFuZ2UKKyogQHNlZSAjZGFtYWdlZFJhbmdlTGltaXQKKyogQHNlZSAjcmVzZXREYW1hZ2VkUmFuZ2UKKyovCisgICAgcHVibGljIGludCBkYW1hZ2VkUmFuZ2VTdGFydCgpIHsKKworICAgICAgICByZXR1cm4gZkRhbWFnZWRSYW5nZVswXTsKKyAgICB9CisKKy8qKgorKiBSZXR1cm4gdGhlIGxpbWl0IG9mIHRoZSBkYW1hZ2VkIHJhbmdlLgorKiBJZiB0aGUgc3RhcnQgaXMKKyogPGNvZGU+SW50ZWdlci5NQVhfVkFMVUU8L2NvZGU+IGFuZCB0aGUgbGltaXQgaXMKKyogPGNvZGU+SW50ZWdlci5NSU5fVkFMVUU8L2NvZGU+LCB0aGVuIHRoZSBkYW1hZ2VkIHJhbmdlCisqIGlzIGVtcHR5LgorKiBAcmV0dXJuIHRoZSBsaW1pdCBvZiB0aGUgZGFtYWdlZCByYW5nZQorKiBAc2VlICNkYW1hZ2VkUmFuZ2VTdGFydAorKiBAc2VlICNyZXNldERhbWFnZWRSYW5nZQorKi8KKyAgICBwdWJsaWMgaW50IGRhbWFnZWRSYW5nZUxpbWl0KCkgeworCisgICAgICAgIHJldHVybiBmRGFtYWdlZFJhbmdlWzFdOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IiI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0ICs9IGF0KGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBJTVBMRU1FTlRBVElPTgorICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKiBjaGVjayBhIHJhbmdlIHRvIHNlZSBpZiBpdCBpcyB3ZWxsIGZvcm1lZCBhbmQgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHRleHQgKi8KKyAgICBwcml2YXRlIHZvaWQgY2hlY2tTdGFydExpbWl0KGludCBzdGFydCwgaW50IGxpbWl0KQorICAgIHsKKyAgICAgICAgaWYgKHN0YXJ0ID4gbGltaXQpIHsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTdGFydCBpcyBsZXNzIHRoYW4gbGltaXQuIHN0YXJ0OiIrc3RhcnQrIjsgbGltaXQ6IitsaW1pdCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTdGFydCBpcyBncmVhdGVyIHRoYW4gbGltaXQuIHN0YXJ0OiIrc3RhcnQrIjsgbGltaXQ6IitsaW1pdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiU3RhcnQgaXMgbmVnYXRpdmUuIHN0YXJ0OiIrc3RhcnQpOworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3RhcnQgaXMgbmVnYXRpdmUuIHN0YXJ0OiIrc3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbWl0ID4gbGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJMaW1pdCBpcyBncmVhdGVyIHRoYW4gbGVuZ3RoLiAgbGltaXQ6IitsaW1pdCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJMaW1pdCBpcyBncmVhdGVyIHRoYW4gbGVuZ3RoLiAgbGltaXQ6IitsaW1pdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIExFU1NfVEhBTl9MRU5HVEggPSBmYWxzZTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIE5PVF9HUkVBVEVSX1RIQU5fTEVOR1RIID0gdHJ1ZTsKKworICAgIHByaXZhdGUgdm9pZCBjaGVja1BvcyhpbnQgcG9zLCBib29sZWFuIGVuZEFsbG93ZWQpIHsKKworICAgICAgICBpbnQgbGFzdFZhbGlkUG9zID0gbGVuZ3RoKCk7CisgICAgICAgIGlmIChlbmRBbGxvd2VkID09IExFU1NfVEhBTl9MRU5HVEgpIHsKKyAgICAgICAgICAgIC0tbGFzdFZhbGlkUG9zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBvcyA8IDAgfHwgcG9zID4gbGFzdFZhbGlkUG9zKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQb3NpdGlvbiBpcyBvdXQgb2YgcmFuZ2UuIik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1RhYlN0b3AuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvVGFiU3RvcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1Nzg4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1RhYlN0b3AuamF2YQpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGFiU3RvcC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ1OjEwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dDsKKworaW1wb3J0IGphdmEuaW8uRXh0ZXJuYWxpemFibGU7CitpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dDsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dDsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCisvKioKKyAqIFRhYlN0b3AgcmVwcmVzZW50cyBhIHBvc2l0aW9uIG9uIGEgdGFiIHJ1bGVyLiAgRWFjaCB0YWIgc3RvcCBoYXMgYQorICogcG9zaXRpb24sIGdpdmluZyBpdHMgbG9jYXRpb24gb24gdGhlIHJ1bGVyLCBhbmQgb25lIG9mIHNldmVyYWwKKyAqIHR5cGVzLiAgVGhlIHR5cGUgZGV0ZXJtaW5lcyBob3cgYSBzZWdtZW50IGNvbnRyb2xlZCBieSB0aGlzIFRhYlN0b3AKKyAqIGlzIHBvc2l0aW9uZWQgb24gYSBsaW5lOgorICogPHVsPgorICogPGxpPjxjb2RlPmtMZWFkaW5nPC9jb2RlPiAtIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHNlZ21lbnQgaXMgYWxpZ25lZCB0bworICogICAgIHRoZSBUYWJTdG9wJ3MgcG9zaXRpb248L2xpPgorICogPGxpPjxjb2RlPmtDZW50ZXI8L2NvZGU+IC0gdGhlIHNlZ21lbnQgaXMgY2VudGVyZWQgb24gdGhpcyBUYWJTdG9wJ3MKKyAqICAgICBwb3NpdGlvbjwvbGk+CisgKiA8bGk+PGNvZGU+a1RyYWlsaW5nPC9jb2RlPiAtIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSBzZWdtZW50IGlzIGFsaWduZWQgdG8KKyAqICAgICB0aGUgVGFiU3RvcCdzIHBvc2l0aW9uPC9saT4KKyAqIDxsaT48Y29kZT5rRGVjaW1hbDwvY29kZT4gLSB0aGUgZmlyc3QgZGVjaW1hbCBpbiB0aGUgc2VnbWVudCBpcyBhbGlnbmVkIHRvCisgKiAgICAgdGhlIFRhYlN0b3AncyBwb3NpdGlvbjwvbGk+CisgKiA8bGk+PGNvZGU+a0F1dG88L2NvZGU+IC0gc2VtYW50aWNhbGx5IHRoZSBzYW1lIGFzIDxjb2RlPmtMZWFkaW5nPC9jb2RlPi4KKyAqICAgICBVc2VkIGJ5IHRhYiBydWxlcnMgdG8gaW5kaWNhdGUgdGhhdCBhbGwgc3Vic2VxdWVudCB0YWIgc3RvcHMKKyAqICAgICB3aWxsIGJlIGF0IGF1dG9zcGFjZWQgaW50ZXJ2YWxzLjwvbGk+CisgKiA8L3VsPgorICogQHNlZSBNVGFiUnVsZXIKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFRhYlN0b3AgaW1wbGVtZW50cyBFeHRlcm5hbGl6YWJsZQoreworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENVUlJFTlRfVkVSU0lPTiA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMjIzNTY5MzQ7CisKKyAgICBwcml2YXRlIGJ5dGUgZlR5cGU7ICAgIC8vIGxlZnQsIGNlbnRlciwgcmlnaHQsIGRlY2ltYWwKKyAgICBwcml2YXRlIGludCBmUG9zaXRpb247IC8vIHRhYiBzdG9wIHBvc2l0aW9uIGZyb20gbGluZSBvcmlnaW4uCisKKyAgICAvKioKKyAgICAgKiBBIFRhYlN0b3Agd2l0aCB0aGlzIHR5cGUgYWxpZ25zIGl0cyBzZWdtZW50J3MgbGVhZGluZyBlZGdlCisgICAgICogdG8gdGhlIFRhYlN0b3AncyBwb3NpdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUga0xlYWRpbmcgPSAwOworCisgICAgLyoqCisgICAgICogQSBUYWJTdG9wIHdpdGggdGhpcyB0eXBlIGFsaWducyBpdHMgc2VnbWVudCdzIGNlbnRlcgorICAgICAqIHRvIHRoZSBUYWJTdG9wJ3MgcG9zaXRpb24uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIGtDZW50ZXIgPSAxOworCisgICAgLyoqCisgICAgICogQSBUYWJTdG9wIHdpdGggdGhpcyB0eXBlIGFsaWducyBpdHMgc2VnbWVudCdzIHRyYWlsaW5nIGVkZ2UKKyAgICAgKiB0byB0aGUgVGFiU3RvcCdzIHBvc2l0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBrVHJhaWxpbmcgPSAyOworCisgICAgLyoqCisgICAgICogQSBUYWJTdG9wIHdpdGggdGhpcyB0eXBlIGFsaWducyBpdHMgc2VnbWVudCdzIGZpcnN0IGRlY2ltYWwKKyAgICAgKiB0byB0aGUgVGFiU3RvcCdzIHBvc2l0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBrRGVjaW1hbCA9IDM7CisKKyAgICAvKioKKyAgICAgKiBBIFRhYlN0b3Agd2l0aCB0aGlzIHR5cGUgYWxpZ25zIGl0cyBzZWdtZW50J3MgbGVhZGluZyBlZGdlCisgICAgICogdG8gdGhlIFRhYlN0b3AncyBwb3NpdGlvbi4gIEFmdGVyIGEgVGFiU3RvcCBvZiB0aGlzIHR5cGUsCisgICAgICogYWxsIHRhYnMgYXJlIGF0IGF1dG9zcGFjZSBpbnRlcnZhbHMuICBVc3VhbGx5LCBjbGllbnRzIHdpbGwKKyAgICAgKiBub3QgY29uc3RydWN0IFRhYlN0b3BzIHdpdGggdGhpcyB0eXBlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBrQXV0byA9IDQ7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBUYWJTdG9wIHdpdGggcG9zaXRpb24gMCBhbmQgdHlwZSA8Y29kZT5rTGVhZGluZzwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIFRhYlN0b3AoKSB7CisKKyAgICAgICB0aGlzKDAsIGtMZWFkaW5nKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBUYWJTdG9wIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0eXBlLgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgVGFiU3RvcCdzIHBvc2l0aW9uCisgICAgICogQHBhcmFtIHR5cGUgdGhlIFRhYlN0b3AncyB0eXBlLiAgTXVzdCBiZSBvbmUgb2YgY29uc3RhbnRzCisgICAgICogICAgICBpbiB0aGlzIGNsYXNzLgorICAgICAqLworICAgIHB1YmxpYyBUYWJTdG9wKGludCBwb3NpdGlvbiwgYnl0ZSB0eXBlKSB7CisKKyAgICAgICAgaWYgKHR5cGUgPCBrTGVhZGluZyB8fCB0eXBlID4ga0F1dG8pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdGFiIHR5cGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICBmVHlwZSA9IHR5cGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcmVhZEV4dGVybmFsKE9iamVjdElucHV0IGluKSB0aHJvd3MgSU9FeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworCisgICAgICAgIGludCB2ZXJzaW9uID0gaW4ucmVhZEludCgpOworICAgICAgICBpZiAodmVyc2lvbiAhPSBDVVJSRU5UX1ZFUlNJT04pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiSW52YWxpZCB2ZXJzaW9uIG9mIFRhYlN0b3AuIik7CisgICAgICAgIH0KKyAgICAgICAgZlBvc2l0aW9uID0gaW4ucmVhZEludCgpOworICAgICAgICBmVHlwZSA9IGluLnJlYWRCeXRlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChPYmplY3RPdXRwdXQgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIG91dC53cml0ZUludChDVVJSRU5UX1ZFUlNJT04pOworICAgICAgICBvdXQud3JpdGVJbnQoZlBvc2l0aW9uKTsKKyAgICAgICAgb3V0LndyaXRlQnl0ZShmVHlwZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZSB0aGlzIHRvIGFub3RoZXIgT2JqZWN0LiAgVGFiU3RvcHMgYXJlIGVxdWFsIGlmCisgICAgICogdGhlaXIgcG9zaXRpb24gYW5kIHR5cGUgYXJlIHRoZSBzYW1lLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgcmhzKQorICAgIHsKKyAgICAgICAgaWYgKHJocyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBUYWJTdG9wIHJoc1RhYjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJoc1RhYiA9IChUYWJTdG9wKSByaHM7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmVHlwZSA9PSByaHNUYWIuZlR5cGUgJiYgZlBvc2l0aW9uID09IHJoc1RhYi5mUG9zaXRpb247CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgVGFiU3RvcC4gIFRoZSBoYXNoIGNvZGUgaXMKKyAgICAgKiA8Y29kZT5wb3NpdGlvbiA8PCB0eXBlPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworCisgICAgICAgIHJldHVybiBmUG9zaXRpb24gPDwgZlR5cGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCisgICAgeworICAgICAgICBjaGFyIHR5cGVDaGFyOworICAgICAgICBzd2l0Y2ggKGZUeXBlKSB7CisgICAgICAgICAgICBjYXNlIGtMZWFkaW5nOiB0eXBlQ2hhciA9ICdMJzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtDZW50ZXI6IHR5cGVDaGFyID0gJ0MnOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1RyYWlsaW5nOiB0eXBlQ2hhciA9ICdSJzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtEZWNpbWFsOiB0eXBlQ2hhciA9ICdEJzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtBdXRvOiB0eXBlQ2hhciA9ICdBJzsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiB0eXBlQ2hhciA9ICc/JzsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJUYWJTdG9wWyIgKyBJbnRlZ2VyLnRvU3RyaW5nKGZQb3NpdGlvbikgKyB0eXBlQ2hhciArICddJzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhpcyBUYWJTdG9wLiAgV2lsbCBiZSBvbmUgb2YgdGhlIGNvbnN0YW50cworICAgICAqIGluIHRoaXMgY2xhc3MuCisgICAgICovCisgICAgcHVibGljIGJ5dGUgZ2V0VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIGZUeXBlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhpcyBUYWJTdG9wLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0UG9zaXRpb24oKSB7CisgICAgICAgIHJldHVybiBmUG9zaXRpb247CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1Rlc3RGYXN0SW50QmluYXJ5U2VhcmNoLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1Rlc3RGYXN0SW50QmluYXJ5U2VhcmNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDRjYmYwYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N0eWxlZHRleHQvVGVzdEZhc3RJbnRCaW5hcnlTZWFyY2guamF2YQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBUZXN0RmFzdEludEJpbmFyeVNlYXJjaC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ1OjEwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dDsKKworZmluYWwgY2xhc3MgVGVzdEZhc3RJbnRCaW5hcnlTZWFyY2ggeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBuZXcgVGVzdEZhc3RJbnRCaW5hcnlTZWFyY2goKS50ZXN0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQ/ICJQQVNTRUQiIDogIkZBSUxFRCIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHRlc3QoKSB7CisKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOworICAgICAgICBpbnRbXSB0ZXN0ID0gey01LCAtMywgMCwgMiwgNX07CisgICAgICAgIEZhc3RJbnRCaW5hcnlTZWFyY2ggZmlicyA9IG5ldyBGYXN0SW50QmluYXJ5U2VhcmNoKHRlc3QpOworCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IDI7IGkrKykgeworICAgICAgICAgICAgaW50IGJlZm9yZUFueSA9IGZpYnMuZmluZEluZGV4KC02KTsKKyAgICAgICAgICAgIGlmIChiZWZvcmVBbnkgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGF0RW5kID0gZmlicy5maW5kSW5kZXgoNSk7CisgICAgICAgICAgICBpZiAoYXRFbmQgIT0gdGVzdC5sZW5ndGgtMSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgYWZ0ZXJBbnkgPSBmaWJzLmZpbmRJbmRleCg2KTsKKyAgICAgICAgICAgIGlmIChhZnRlckFueSAhPSB0ZXN0Lmxlbmd0aC0xKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBleGFjdGx5ID0gZmlicy5maW5kSW5kZXgoLTMpOworICAgICAgICAgICAgaWYgKGV4YWN0bHkgIT0gMSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmaWJzID0gbmV3IEZhc3RJbnRCaW5hcnlTZWFyY2gobmV3IGludFtdIHsyMCwgNDB9KTsKKyAgICAgICAgICAgIGZpYnMuc2V0RGF0YSh0ZXN0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9WYWxpZGF0aW9uLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L1ZhbGlkYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZWY3YjU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9WYWxpZGF0aW9uLmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVmFsaWRhdGlvbi5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ1OjEwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dDsKKworLyoqCisgKiBJdGVyYXRvcnMgdXNlIHRoaXMgY2xhc3MgdG8ga2VlcCBmcm9tIGdldHRpbmcgb3V0IG9mIHN5bmMgd2l0aAorICogdGhlaXIgdW5kZXJseWluZyBkYXRhLiAgV2hlbiBjcmVhdGVkLCB0aGUgaXRlcmF0b3IgZ2V0cyBhCisgKiBWYWxpZGF0aW9uIGluc3RhbmNlLiAgSWYgdGhlIHVuZGVybHlpbmcgZGF0YSBjaGFuZ2VzLCB0aGUgVmFsaWRhdGlvbgorICogYmVjb21lcyBpbnZhbGlkLiAgVXN1YWxseSBpdGVyYXRvcnMgd2lsbCB0aHJvdyBleGNlcHRpb25zIGlmIGFjY2Vzc2VkCisgKiBhZnRlciBiZWNvbWluZyBpbnZhbGlkLgorICovCitmaW5hbCBjbGFzcyBWYWxpZGF0aW9uIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBib29sZWFuIGZJc1ZhbGlkID0gdHJ1ZTsKKworICAgIGJvb2xlYW4gaXNWYWxpZCgpIHsKKworICAgICAgICByZXR1cm4gZklzVmFsaWQ7CisgICAgfQorCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeworCisgICAgICAgIGZJc1ZhbGlkID0gZmFsc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9wYWNrYWdlLmh0bWwgYi9zcmMvY29tL2libS9yaWNodGV4dC9zdHlsZWR0ZXh0L3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDU4MGQzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3R5bGVkdGV4dC9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSw1IEBACis8aHRtbD4KKzxib2R5IGJnY29sb3I9IndoaXRlIj4KK1Byb3ZpZGVzIHN0eWxlZCB0ZXh0IHN0b3JhZ2UgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5nZGVtby9Td2luZ0NvZGVFZGl0LmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ2RlbW8vU3dpbmdDb2RlRWRpdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQyZWU0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ2RlbW8vU3dpbmdDb2RlRWRpdC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFN3aW5nQ29kZUVkaXQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo0NTo0MiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN3aW5nZGVtbzsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuZGVtby5Db2RlRWRpdDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmRlbW8uRG9jdW1lbnRXaW5kb3c7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5kZW1vLlN5bnRheENvbG9yZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5kZW1vLlRleHREb2N1bWVudDsKKworcHVibGljIGNsYXNzIFN3aW5nQ29kZUVkaXQgZXh0ZW5kcyBDb2RlRWRpdCB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgIAorICAgICAgICBuZXcgU3dpbmdDb2RlRWRpdChhcmdzLCAwKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIFN3aW5nQ29kZUVkaXQoU3RyaW5nW10gYXJncywgaW50IHN0YXJ0KSB7CisgICAgCisgICAgICAgIHN1cGVyKGFyZ3MsIHN0YXJ0KTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIERvY3VtZW50V2luZG93IGNyZWF0ZURvY3VtZW50V2luZG93KFRleHREb2N1bWVudCBkb2N1bWVudCkgeworCisgICAgICAgIHJldHVybiBuZXcgU3dpbmdEb2N1bWVudFdpbmRvdyh0aGlzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3ludGF4Q29sb3JlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudXMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ2RlbW8vU3dpbmdEb2N1bWVudFdpbmRvdy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmdkZW1vL1N3aW5nRG9jdW1lbnRXaW5kb3cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OTNmNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmdkZW1vL1N3aW5nRG9jdW1lbnRXaW5kb3cuamF2YQpAQCAtMCwwICsxLDI4MCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogU3dpbmdEb2N1bWVudFdpbmRvdy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjM3ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3dpbmdkZW1vOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuSlRleHRQYW5lbDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5UZXh0UGFuZWxMaXN0ZW5lcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5UZXh0UGFuZWxTZXR0aW5nczsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZWRUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZU1vZGlmaWVyOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zd2luZ3VpLkpUYWJSdWxlcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN3aW5ndWkuU3dpbmdNZW51QnVpbGRlcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQucHJpbnQuUHJpbnRpbmdVdGlsczsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuZGVtby5Bd3REb2N1bWVudFdpbmRvdzsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmRlbW8uRG9jdW1lbnRXaW5kb3c7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5kZW1vLkVkaXRBcHBsaWNhdGlvbjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmRlbW8uRWRpdG9yUmVzb3VyY2VzOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuZGVtby5SZXNvdXJjZVV0aWxzOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuZGVtby5UZXh0RG9jdW1lbnQ7CisKK2ltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuRmlsZURpYWxvZzsKK2ltcG9ydCBqYXZhLmF3dC5GcmFtZTsKKworaW1wb3J0IGphdmF4LnN3aW5nLkpGcmFtZTsKK2ltcG9ydCBqYXZheC5zd2luZy5KTWVudTsKK2ltcG9ydCBqYXZheC5zd2luZy5KTWVudUJhcjsKK2ltcG9ydCBqYXZheC5zd2luZy5KT3B0aW9uUGFuZTsKK2ltcG9ydCBqYXZheC5zd2luZy5XaW5kb3dDb25zdGFudHM7CisKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dBZGFwdGVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50OworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKKy8qKgorICogQXd0RG9jdW1lbnRXaW5kb3cgaXMgYSBGcmFtZSBjb250YWluaW5nIGEgVGV4dFBhbmVsLCB3aXRoIGEgZG9jdW1lbnQKKyAqIGZvciBzdG9yaW5nIHRoZSB0ZXh0IGluIHRoZSBUZXh0UGFuZWwuCisgKi8KK2ZpbmFsIGNsYXNzIFN3aW5nRG9jdW1lbnRXaW5kb3cgZXh0ZW5kcyBKRnJhbWUgaW1wbGVtZW50cyBEb2N1bWVudFdpbmRvdyB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworCisgICAgcHJpdmF0ZSBKVGV4dFBhbmVsIGZUZXh0UGFuZWw7CisgICAgcHJpdmF0ZSBFZGl0QXBwbGljYXRpb24gZkFwcGxpY2F0aW9uOworICAgIHByaXZhdGUgVGV4dERvY3VtZW50IGZEb2N1bWVudDsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBBd3REb2N1bWVudFdpbmRvdy4KKyAgICAgKiBAcGFyYW0gYXBwbGljYXRpb24gdGhlIGFwcGxpY2F0aW9uIHRoYXQgb3ducyB0aGlzIGRvY3VtZW50CisgICAgICogQHBhcmFtIGNsaXBib2FyZCB0aGUgY2xpcGJvYXJkIHRvIHVzZQorICAgICAqIEBwYXJhbSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgdG8gc2hvdyBpbiB0aGlzIEF3dERvY3VtZW50V2luZG93CisgICAgICovCisgICAgU3dpbmdEb2N1bWVudFdpbmRvdyhFZGl0QXBwbGljYXRpb24gYXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBUZXh0RG9jdW1lbnQgZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBUZXh0UGFuZWxTZXR0aW5ncyB0ZXh0UGFuZWxTZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdXNlVGFiUnVsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBUZXh0UGFuZWxMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc3VwcG9ydFN0eWxlZFRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHN1cHBvcnRQbGFpblRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBtZW51cykgeworCisgICAgICAgIGZBcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uOworICAgICAgICBzZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oV2luZG93Q29uc3RhbnRzLkRPX05PVEhJTkdfT05fQ0xPU0UpOworICAgICAgICAKKyAgICAgICAgZlRleHRQYW5lbCA9IG5ldyBKVGV4dFBhbmVsKHRleHRQYW5lbFNldHRpbmdzLCBudWxsLCBhcHBsaWNhdGlvbi5nZXRDbGlwYm9hcmQoKSk7CisgICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICBmVGV4dFBhbmVsLmFkZExpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICAgICAgfQorICAgICAgICBzZXREb2N1bWVudChkb2N1bWVudCk7CisKKyAgICAgICAgYWRkTWVudUJhcihzdXBwb3J0U3R5bGVkVGV4dCwgc3VwcG9ydFBsYWluVGV4dCwgbWVudXMpOworCisgICAgICAgIGdldENvbnRlbnRQYW5lKCkuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisKKyAgICAgICAgaWYgKHVzZVRhYlJ1bGVyKSB7CisgICAgICAgICAgICBKVGFiUnVsZXIgdGFiUnVsZXIgPSBuZXcgSlRhYlJ1bGVyKDE0LCAxMCwgZlRleHRQYW5lbCk7CisgICAgICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZCh0YWJSdWxlciwgIk5vcnRoIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGdldENvbnRlbnRQYW5lKCkuYWRkKGZUZXh0UGFuZWwsICJDZW50ZXIiKTsKKworICAgICAgICBhZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGRvQ2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZE1lbnVCYXIoYm9vbGVhbiBzdXBwb3J0U3R5bGVkVGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdXBwb3J0UGxhaW5UZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIG1lbnVzKSB7CisgICAgICAgIAorICAgICAgICBKTWVudUJhciBtZW51QmFyID0gbmV3IEpNZW51QmFyKCk7CisgICAgICAgIFN0cmluZyBtZW51VGl0bGUgPSBSZXNvdXJjZVV0aWxzLmdldFN0cmluZyhFZGl0b3JSZXNvdXJjZXMuRklMRSk7CisgICAgICAgIEpNZW51IG1lbnUgPSBuZXcgSk1lbnUobWVudVRpdGxlKTsKKyAgICAgICAgbmV3IFN3aW5nRmlsZU1lbnVNYW5hZ2VyKG1lbnUsIGZBcHBsaWNhdGlvbiwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRTdHlsZWRUZXh0LCBzdXBwb3J0UGxhaW5UZXh0KTsKKyAgICAgICAgbWVudUJhci5hZGQobWVudSk7CisKKyAgICAgICAgU3dpbmdNZW51QnVpbGRlci5nZXRJbnN0YW5jZSgpLmNyZWF0ZU1lbnVzKG1lbnVCYXIsIGZUZXh0UGFuZWwsIHRoaXMsIG1lbnVzKTsKKyAgICAgICAgc2V0Sk1lbnVCYXIobWVudUJhcik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIGl0IGlzIE9LIHRvIHNldCB0aGUgZG9jdW1lbnQgdGV4dCBhbmQgZmlsZSB0bworICAgICAqIHNvbWV0aGluZyBkaWZmZXJlbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGNhbkNoYW5nZURvY3VtZW50cygpIHsKKworICAgICAgICAvLyBJZiB0aGUgdGV4dCBpcyBtb2RpZmllZCwgZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0bworICAgICAgICAvLyBzYXZlIGl0LiAgT3RoZXJ3aXNlIHJldHVybiB0cnVlLgorCisgICAgICAgIGlmIChmRG9jdW1lbnQuaXNNb2RpZmllZCgpKSB7CisgICAgICAgICAgICBpbnQgc2F2ZSA9IGFza1NhdmUoKTsKKyAgICAgICAgICAgIGlmIChzYXZlID09IEpPcHRpb25QYW5lLllFU19PUFRJT04pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9TYXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2F2ZSA9PSBKT3B0aW9uUGFuZS5OT19PUFRJT047CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXREb2N1bWVudChUZXh0RG9jdW1lbnQgZG9jdW1lbnQpIHsKKworICAgICAgICBmRG9jdW1lbnQgPSBkb2N1bWVudDsKKyAgICAgICAgZkRvY3VtZW50LnNldFRleHRQYW5lbChmVGV4dFBhbmVsKTsKKyAgICAgICAgc2V0VGl0bGUoZkRvY3VtZW50LmdldFRpdGxlKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZG9jdW1lbnQgdG8gZW1wdHkgdGV4dCB3aXRoIG5vIGFzc29jaWF0ZWQgZmlsZS4gIElmCisgICAgICogdGhlIGRvY3VtZW50IHRleHQgaXMgbm90IHNhdmVkLCBwcm9tcHQgdGhlIHVzZXIgdG8gc2F2ZSB0aGUKKyAgICAgKiB0aGUgdGV4dCBmaXJzdC4gIElmIHRoaXMgb3BlcmF0aW9uIGlzIGNhbmNlbGVkLCB0aGUgZG9jdW1lbnQKKyAgICAgKiBpcyB1bmNoYW5nZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZG9OZXcoKSB7CisKKyAgICAgICAgaWYgKCFjYW5DaGFuZ2VEb2N1bWVudHMoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXREb2N1bWVudChmQXBwbGljYXRpb24uY3JlYXRlTmV3RG9jdW1lbnQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvbXB0IHRoZSB1c2VyIGZvciBhIGZpbGUgZnJvbSB3aGljaCB0byBsb2FkIGEgdGV4dCBkb2N1bWVudC4KKyAgICAgKiBJZiB0aGUgY3VycmVudCB0ZXh0IGlzIG5vdCBzYXZlZCwgZmlyc3QgcHJvbXB0IHRoZSB1c2VyIHRvCisgICAgICogc2F2ZS4gIElmIGVpdGhlciBvcGVyYXRpb24gaXMgY2FuY2VsZWQgb3IgZmFpbHMsIHRoZSBkb2N1bWVudAorICAgICAqIGlzIHVuY2hhbmdlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkb09wZW4oKSB7CisKKyAgICAgICAgaWYgKCFjYW5DaGFuZ2VEb2N1bWVudHMoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVGV4dERvY3VtZW50IGRvY3VtZW50ID0gZkFwcGxpY2F0aW9uLm9wZW5Eb2N1bWVudCh0aGlzKTsKKworICAgICAgICBpZiAoZG9jdW1lbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgc2V0RG9jdW1lbnQoZG9jdW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvbXB0IHRoZSB1c2VyIGZvciBhIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgZG9jdW1lbnQgdGV4dC4KKyAgICAgKiBJZiB0aGlzIG9wZXJhdGlvbiBpcyBub3QgY2FuY2VsZWQsIHNhdmUgdGhlIHRleHQgaW4gdGhlIGZpbGUuCisgICAgICogVGhlIGZpbGUgYmVjb21lcyB0aGlzIGRvY3VtZW50J3MgZmlsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBkb1NhdmVBcyhpbnQgZm9ybWF0KSB7CisKKyAgICAgICAgU3RyaW5nIHRpdGxlID0gUmVzb3VyY2VVdGlscy5nZXRTdHJpbmcoRWRpdG9yUmVzb3VyY2VzLlNBVkVfVElUTEUpOworICAgICAgICBGaWxlIGZpbGUgPSBBd3REb2N1bWVudFdpbmRvdy5nZXRGaWxlRnJvbURpYWxvZyhmRG9jdW1lbnQuZ2V0RmlsZSgpLCB0aXRsZSwgdGhpcywgRmlsZURpYWxvZy5TQVZFKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmaWxlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZkRvY3VtZW50LnNldEZpbGUoZmlsZSk7CisgICAgICAgIHNldFRpdGxlKGZEb2N1bWVudC5nZXRUaXRsZSgpKTsKKworICAgICAgICBmRG9jdW1lbnQuc2V0Rm9ybWF0KGZvcm1hdCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZkRvY3VtZW50LnNhdmUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTYXZlIHRoZSB0ZXh0IGluIHRoaXMgZG9jdW1lbnQuICBJZiB0aGVyZSBpcyBubyBmaWxlIGFzc29jaWF0ZWQKKyAgICAgKiB3aXRoIHRoZSB0ZXh0LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gPGNvZGU+ZG9TYXZlQXM8L2NvZGU+LgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBkb1NhdmUoKSB7CisKKyAgICAgICAgaWYgKGZEb2N1bWVudC5nZXRGaWxlKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGRvU2F2ZUFzKGZEb2N1bWVudC5nZXRGb3JtYXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmRG9jdW1lbnQuc2F2ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByaW50IHRoZSBjb250ZW50cyBvZiB0aGlzIHdpbmRvdy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkb1ByaW50KCkgeworCisgICAgICAgIFByaW50aW5nVXRpbHMudXNlclByaW50VGV4dChmRG9jdW1lbnQuZ2V0VGV4dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlRleHRQYW5lbC5nZXREZWZhdWx0VmFsdWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUaXRsZSgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBdHRlbXB0IHRvIGNsb3NlIHRoaXMgd2luZG93LiAgSWYgdGhlIHRleHQgaGFzIG5vdCBiZWVuIHNhdmVkLAorICAgICAqIGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8gc2F2ZSB0aGUgdGV4dCBiZWZvcmUgY2xvc2luZyB0aGUKKyAgICAgKiB3aW5kb3cuICBJZiB0aGUgdXNlciBjYW5jZWxzIHRoaXMgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgICogZmFsc2UgYW5kIHRoZSB3aW5kb3cgaXMgbm90IGNsb3NlZDsgIG90aGVyd2lzZSB0aGlzIG1ldGhvZAorICAgICAqIHJldHVybnMgdHJ1ZSBhbmQgdGhlIHdpbmRvdyBpcyBjbG9zZWQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZG9DbG9zZSgpIHsKKworICAgICAgICBpZiAoY2FuQ2hhbmdlRG9jdW1lbnRzKCkpIHsKKyAgICAgICAgICAgIHNldFZpc2libGUoZmFsc2UpOworICAgICAgICAgICAgZGlzcG9zZSgpOworICAgICAgICAgICAgZkFwcGxpY2F0aW9uLnJlbW92ZURvY3VtZW50V2luZG93KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEaXNwbGF5IGEgZGlhbG9nIHRoYXQgYXNrcyB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHRvCisgICAgICogc2F2ZSBhIGRvY3VtZW50LiAgVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgWUVTX09QVElPTiwKKyAgICAgKiBOT19PUFRJT04sIG9yIENBTkNFTF9PUFRJT04gZnJvbSBKT3B0aW9uUGFuZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBhc2tTYXZlKCkgeworCisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gUmVzb3VyY2VVdGlscy5nZXRTdHJpbmcoRWRpdG9yUmVzb3VyY2VzLlNBVkVfTVNHKTsKKyAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChwYXR0ZXJuLCBuZXcgT2JqZWN0W10ge2dldFRpdGxlKCl9KTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyB5ZXMgPSBSZXNvdXJjZVV0aWxzLmdldFN0cmluZyhFZGl0b3JSZXNvdXJjZXMuWUVTKTsKKyAgICAgICAgU3RyaW5nIG5vID0gUmVzb3VyY2VVdGlscy5nZXRTdHJpbmcoRWRpdG9yUmVzb3VyY2VzLk5PKTsKKyAgICAgICAgU3RyaW5nIGNhbmNlbCA9IFJlc291cmNlVXRpbHMuZ2V0U3RyaW5nKEVkaXRvclJlc291cmNlcy5DQU5DRUwpOworCisgICAgICAgIHJldHVybiBKT3B0aW9uUGFuZS5zaG93T3B0aW9uRGlhbG9nKHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKT3B0aW9uUGFuZS5ZRVNfTk9fQ0FOQ0VMX09QVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSk9wdGlvblBhbmUuUVVFU1RJT05fTUVTU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtde3llcyxubyxjYW5jZWx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ2RlbW8vU3dpbmdFZGl0RGVtby5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmdkZW1vL1N3aW5nRWRpdERlbW8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNTgxMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmdkZW1vL1N3aW5nRWRpdERlbW8uamF2YQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTd2luZ0VkaXREZW1vLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDU6NDIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5zd2luZ2RlbW87CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmRlbW8uRWRpdERlbW87CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5kZW1vLkRvY3VtZW50V2luZG93OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuZGVtby5UZXh0RG9jdW1lbnQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5KVGV4dFBhbmVsOworCitwdWJsaWMgY2xhc3MgU3dpbmdFZGl0RGVtbyBleHRlbmRzIEVkaXREZW1vIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgCisgICAgICAgIG5ldyBTd2luZ0NvZGVFZGl0KGFyZ3MsIDApOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgU3dpbmdFZGl0RGVtbyhTdHJpbmdbXSBhcmdzLCBpbnQgc3RhcnQpIHsKKyAgICAKKyAgICAgICAgc3VwZXIoYXJncywgc3RhcnQpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgRG9jdW1lbnRXaW5kb3cgY3JlYXRlRG9jdW1lbnRXaW5kb3coVGV4dERvY3VtZW50IGRvY3VtZW50KSB7CisKKyAgICAgICAgcmV0dXJuIG5ldyBTd2luZ0RvY3VtZW50V2luZG93KHRoaXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKVGV4dFBhbmVsLmdldERlZmF1bHRTZXR0aW5ncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ2RlbW8vU3dpbmdGaWxlTWVudU1hbmFnZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5nZGVtby9Td2luZ0ZpbGVNZW51TWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmMjRkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ2RlbW8vU3dpbmdGaWxlTWVudU1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTd2luZ0ZpbGVNZW51TWFuYWdlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ1OjQyICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3dpbmdkZW1vOworCitpbXBvcnQgamF2YS5hd3QuRXZlbnQ7CisKK2ltcG9ydCBqYXZheC5zd2luZy5KTWVudTsKK2ltcG9ydCBqYXZheC5zd2luZy5KTWVudUl0ZW07CitpbXBvcnQgamF2YXguc3dpbmcuSlNlcGFyYXRvcjsKK2ltcG9ydCBqYXZheC5zd2luZy5LZXlTdHJva2U7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmRlbW8uRG9jdW1lbnRXaW5kb3c7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5kZW1vLkVkaXRBcHBsaWNhdGlvbjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmRlbW8uRmlsZU1lbnVNYW5hZ2VyOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuZGVtby5NZW51RGF0YTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmRlbW8uUmVzb3VyY2VVdGlsczsKKworZmluYWwgY2xhc3MgU3dpbmdGaWxlTWVudU1hbmFnZXIgZXh0ZW5kcyBGaWxlTWVudU1hbmFnZXIgeworCisgICAgcHJpdmF0ZSBKTWVudSBmTWVudTsKKyAgICAKKyAgICBwdWJsaWMgU3dpbmdGaWxlTWVudU1hbmFnZXIoSk1lbnUgbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRXaW5kb3cgZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc3VwcG9ydFN0eWxlZEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdXBwb3J0UGxhaW5Gb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHN1cGVyKGFwcGxpY2F0aW9uLCBkb2N1bWVudCk7CisgICAgICAgIAorICAgICAgICBmTWVudSA9IG1lbnU7CisgICAgICAgIGNyZWF0ZUl0ZW1zKHN1cHBvcnRTdHlsZWRGb3JtYXQsIHN1cHBvcnRQbGFpbkZvcm1hdCk7CisgICAgICAgIGZNZW51ID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIE9iamVjdCBhZGRNZW51SXRlbShTdHJpbmcga2V5KSB7CisKKyAgICAgICAgTWVudURhdGEgbWVudURhdGEgPSBSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKGtleSk7CisgICAgICAgIEpNZW51SXRlbSBpdGVtID0gbmV3IEpNZW51SXRlbShtZW51RGF0YS5nZXROYW1lKCkpOworICAgICAgICBpZiAobWVudURhdGEuaGFzU2hvcnRjdXQoKSkgeworICAgICAgICAgICAgS2V5U3Ryb2tlIGtzID0gS2V5U3Ryb2tlLmdldEtleVN0cm9rZShtZW51RGF0YS5nZXRTaG9ydGN1dEtleUNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQuQ1RSTF9NQVNLKTsKKyAgICAgICAgICAgIGl0ZW0uc2V0QWNjZWxlcmF0b3Ioa3MpOworICAgICAgICB9CisgICAgICAgIGl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgICAgIGZNZW51LmFkZChpdGVtKTsKKyAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIGFkZFNlcGFyYXRvcigpIHsKKyAgICAKKyAgICAgICAgZk1lbnUuYWRkKG5ldyBKU2VwYXJhdG9yKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvSk1lc3NhZ2VEaWFsb2cuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvSk1lc3NhZ2VEaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NTVmZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmd1aS9KTWVzc2FnZURpYWxvZy5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEpNZXNzYWdlRGlhbG9nLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDY6MjIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5zd2luZ3VpOworCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS5hd3QuQ29udGFpbmVyOworaW1wb3J0IGphdmEuYXd0LkNhcmRMYXlvdXQ7CisKK2ltcG9ydCBqYXZheC5zd2luZy5KRnJhbWU7CisKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dBZGFwdGVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5KVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbFNldHRpbmdzOworCisvKioKKyAqIE1lc3NhZ2VEaWFsb2cgaXMgYSBzaW1wbGUgRnJhbWUgd2hpY2ggZGlzcGxheXMgYSBzdHlsZWQKKyAqIHRleHQgbWVzc2FnZSBpbiBhIFRleHRQYW5lbC4KKyAqIFRoZSB0ZXh0IGluIHRoZSBtZXNzYWdlIGlzIG5vdCBzZWxlY3RhYmxlIG9yIGVkaXRhYmxlLgorICogQHNlZSBNQ29uc3RUZXh0CisgKiBAc2VlIEpUZXh0UGFuZWwKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEpNZXNzYWdlRGlhbG9nIGV4dGVuZHMgSkZyYW1lIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLyoqCisgICAgKiBDcmVhdGUgYSBuZXcgTWVzc2FnZURpYWxvZy4KKyAgICAqIEBwYXJhbSB0aXRsZSB0aGUgZGlhbG9nJ3MgdGl0bGUKKyAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSB0ZXh0IHdoaWNoIHdpbGwgYXBwZWFyIGluIHRoZSBkaWFsb2cKKyAgICAqLworICAgIHB1YmxpYyBKTWVzc2FnZURpYWxvZyhTdHJpbmcgdGl0bGUsIE1Db25zdFRleHQgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIHN1cGVyKHRpdGxlKTsKKworICAgICAgICBDb250YWluZXIgY29udGVudCA9IGdldENvbnRlbnRQYW5lKCk7CisgICAgICAgIGNvbnRlbnQuc2V0TGF5b3V0KG5ldyBDYXJkTGF5b3V0KCkpOworICAgICAgICBUZXh0UGFuZWxTZXR0aW5ncyBzZXR0aW5ncyA9IEpUZXh0UGFuZWwuZ2V0RGVmYXVsdFNldHRpbmdzKCk7CisgICAgICAgIHNldHRpbmdzLnNldFNjcm9sbGFibGUoZmFsc2UpOworICAgICAgICBzZXR0aW5ncy5zZXRTZWxlY3RhYmxlKGZhbHNlKTsKKyAgICAgICAgSlRleHRQYW5lbCBwYW5lbCA9IG5ldyBKVGV4dFBhbmVsKHNldHRpbmdzLCBtZXNzYWdlLCBudWxsKTsKKworICAgICAgICBwYW5lbC5zZXRCYWNrZ3JvdW5kKENvbG9yLmJsYWNrKTsKKyAgICAgICAgY29udGVudC5hZGQoIkNlbnRlciIsIHBhbmVsKTsKKworICAgICAgICBhZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIHNldFZpc2libGUoZmFsc2UpOworICAgICAgICAgICAgICAgIGRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgc2V0U2l6ZSg0NTAsMzIwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ3VpL0pOdW1iZXJEaWFsb2cuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvSk51bWJlckRpYWxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjMjBhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ3VpL0pOdW1iZXJEaWFsb2cuamF2YQpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogSk51bWJlckRpYWxvZy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ2OjIyICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3dpbmd1aTsKKworaW1wb3J0IGphdmEuYXd0LkNvbnRhaW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5GbG93TGF5b3V0OworaW1wb3J0IGphdmEuYXd0LkZyYW1lOworCitpbXBvcnQgamF2YS50ZXh0Lk51bWJlckZvcm1hdDsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CisKK2ltcG9ydCBqYXZheC5zd2luZy5KRGlhbG9nOworaW1wb3J0IGphdmF4LnN3aW5nLkpQYW5lbDsKK2ltcG9ydCBqYXZheC5zd2luZy5KVGV4dEZpZWxkOworaW1wb3J0IGphdmF4LnN3aW5nLkpCdXR0b247CitpbXBvcnQgamF2YXguc3dpbmcuSkxhYmVsOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5GcmFtZVJlc291cmNlczsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5NZW51SXRlbVNldDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5SZXNvdXJjZVV0aWxzOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuTVRleHRQYW5lbDsKKworLyoqCisqIFNpbXBsZSBkaWFsb2cgd2hpY2ggZ2V0cyBhIG51bWJlciwgYW5kIHNlbmRzIGFuIGFwcHJvcHJpYXRlIGNvbW1hbmQKKyovCitmaW5hbCBjbGFzcyBKTnVtYmVyRGlhbG9nIGV4dGVuZHMgSkRpYWxvZyBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyCit7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIE1UZXh0UGFuZWwgZlRleHRQYW5lbDsKKyAgICBwcml2YXRlIEpUZXh0RmllbGQgZklucHV0ID0gbnVsbDsKKworICAgIHByaXZhdGUgSkJ1dHRvbiBmT0tCdXR0b24gPSBudWxsOworICAgIHByaXZhdGUgSkJ1dHRvbiBmQ2FuY2VsQnV0dG9uID0gbnVsbDsKKyAgICBwcml2YXRlIGJvb2xlYW4gZkNoYXJhY3RlcjsKKyAgICBwcml2YXRlIE9iamVjdCBmS2V5OworICAgIHByaXZhdGUgZmxvYXQgZk11bHRpcGxpZXI7IAorCisgICAgLyoqCisgICAgICogQHBhcmFtIG11bHRpcGxpZXIgdGhlIGZhY3RvciBieSB3aGljaCB0byBtdWx0aXBseSB0aGUgdXNlcidzCisgICAgICogICAgICAgIHNlbGVjdGlvbiBiZWZvcmUgY3JlYXRpbmcgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4gICBUaGlzCisgICAgICogICAgICAgIGlzIHVzZWZ1bCBmb3Igc3Vic2NyaXB0aW5nLgorICAgICAqLworICAgIEpOdW1iZXJEaWFsb2coRnJhbWUgcGFyZW50LAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHRpdGxlLAorICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICBNVGV4dFBhbmVsIHRleHRQYW5lbCwKKyAgICAgICAgICAgICAgICAgIE9iamVjdCBrZXksCisgICAgICAgICAgICAgICAgICBib29sZWFuIGNoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgIGZsb2F0IG11bHRpcGxpZXIpIHsKKworICAgICAgICBzdXBlcihwYXJlbnQsIHRpdGxlLCBmYWxzZSk7CisgICAgICAgIGZUZXh0UGFuZWwgPSB0ZXh0UGFuZWw7CisgICAgICAgIGZLZXkgPSBrZXk7CisgICAgICAgIGZDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CisgICAgICAgIGZNdWx0aXBsaWVyID0gbXVsdGlwbGllcjsKKyAgICAgICAgCisgICAgICAgIENvbnRhaW5lciBjb250ZW50ID0gZ2V0Q29udGVudFBhbmUoKTsKKyAgICAgICAgCisgICAgICAgIGNvbnRlbnQuc2V0TGF5b3V0KG5ldyBqYXZhLmF3dC5HcmlkTGF5b3V0KDIsMSkpOworCisgICAgICAgIEpQYW5lbCBwYW5lbCA9IG5ldyBKUGFuZWwoKTsKKyAgICAgICAgcGFuZWwuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuQ0VOVEVSLCAxMCwgMTUpKTsKKyAgICAgICAgZklucHV0ID0gbmV3IEpUZXh0RmllbGQoNSk7CisKKyAgICAgICAgcGFuZWwuYWRkKG5ldyBKTGFiZWwobWVzc2FnZSkpOworICAgICAgICBwYW5lbC5hZGQoZklucHV0KTsKKyAgICAgICAgY29udGVudC5hZGQoIkNlbnRlciIsIHBhbmVsKTsKKworICAgICAgICBmQ2FuY2VsQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5DQU5DRUwpKTsKKyAgICAgICAgZk9LQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5PSykpOworICAgICAgICBKUGFuZWwgcCA9IG5ldyBKUGFuZWwoKTsKKyAgICAgICAgcC5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5DRU5URVIsIDUsIDUpKTsKKyAgICAgICAgcC5hZGQoZkNhbmNlbEJ1dHRvbik7CisgICAgICAgIHAuYWRkKGZPS0J1dHRvbik7CisgICAgICAgIGNvbnRlbnQuYWRkKCJTb3V0aCIsIHApOworCisgICAgICAgIHBhY2soKTsKKworICAgICAgICBhZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGNsb3NlV2luZG93KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmT0tCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgICAgIGZDYW5jZWxCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNsb3NlV2luZG93KGJvb2xlYW4gc2VuZEFjdGlvbikgeworCisgICAgICAgIHNldFZpc2libGUoZmFsc2UpOworCisgICAgICAgIGludCBudW0gPSAwOworICAgICAgICBpZiAoc2VuZEFjdGlvbikgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGZJbnB1dC5nZXRUZXh0KCk7CisgICAgICAgICAgICAgICAgbnVtID0gTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKCkucGFyc2UodGV4dCkuaW50VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICBzZW5kQWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VuZEFjdGlvbikgeworICAgICAgICAgICAgc2VuZEFjdGlvbihudW0pOworICAgICAgICB9CisKKyAgICAgICAgZGlzcG9zZSgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisKKyAgICAgICAgT2JqZWN0IHNvdXJjZSA9IGUuZ2V0U291cmNlKCk7CisKKyAgICAgICAgaWYgKHNvdXJjZSA9PSBmT0tCdXR0b24pIHsKKyAgICAgICAgICAgIGNsb3NlV2luZG93KHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBmQ2FuY2VsQnV0dG9uKSB7CisgICAgICAgICAgICBjbG9zZVdpbmRvdyhmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIEFjdGlvbkV2ZW50ISIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBIYW5kbGUgdGhlIHVzZXIgaW5wdXQKKyAgICAqIEBwYXJhbSB0aGUgbnVtYmVyIHRoZSB1c2VyIHR5cGVkIGluCisgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2VuZEFjdGlvbihpbnQgbnVtYmVyKSB7CisgICAgICAgIGZsb2F0IG51bSA9IG51bWJlciAqIGZNdWx0aXBsaWVyOworICAgICAgICBTdHlsZU1vZGlmaWVyIG1vZGlmaWVyID0gU3R5bGVNb2RpZmllci5jcmVhdGVBZGRNb2RpZmllcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmxvYXQobnVtKSk7CisgICAgICAgIGlmIChmQ2hhcmFjdGVyID09IE1lbnVJdGVtU2V0LkNIQVJBQ1RFUikgeworICAgICAgICAgICAgZlRleHRQYW5lbC5tb2RpZnlDaGFyYWN0ZXJTdHlsZU9uU2VsZWN0aW9uKG1vZGlmaWVyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwubW9kaWZ5UGFyYWdyYXBoU3R5bGVPblNlbGVjdGlvbihtb2RpZmllcik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ3VpL0pPYmplY3REaWFsb2cuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvSk9iamVjdERpYWxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmYzVmZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmd1aS9KT2JqZWN0RGlhbG9nLmphdmEKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEpPYmplY3REaWFsb2cuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozNyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnN3aW5ndWk7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworCitpbXBvcnQgamF2YXguc3dpbmcuQm94OworaW1wb3J0IGphdmF4LnN3aW5nLkJvcmRlckZhY3Rvcnk7CitpbXBvcnQgamF2YXguc3dpbmcuQm94TGF5b3V0OworaW1wb3J0IGphdmF4LnN3aW5nLkpEaWFsb2c7CitpbXBvcnQgamF2YXguc3dpbmcuSlBhbmVsOworaW1wb3J0IGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lOworaW1wb3J0IGphdmF4LnN3aW5nLkpCdXR0b247CitpbXBvcnQgamF2YXguc3dpbmcuSkxpc3Q7CitpbXBvcnQgamF2YXguc3dpbmcuSkxhYmVsOworaW1wb3J0IGphdmF4LnN3aW5nLkxpc3RTZWxlY3Rpb25Nb2RlbDsKKworaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lkxpc3RTZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBqYXZheC5zd2luZy5ldmVudC5MaXN0U2VsZWN0aW9uTGlzdGVuZXI7CisKK2ltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuQ29udGFpbmVyOworaW1wb3J0IGphdmEuYXd0LkRpbWVuc2lvbjsKK2ltcG9ydCBqYXZhLmF3dC5GcmFtZTsKK2ltcG9ydCBqYXZhLmF3dC5GbG93TGF5b3V0OworaW1wb3J0IGphdmEuYXd0LkdyaWRMYXlvdXQ7CisKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5Nb3VzZUV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lk1vdXNlQWRhcHRlcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dBZGFwdGVyOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLk1lbnVJdGVtU2V0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwucmVzb3VyY2VzLkZyYW1lUmVzb3VyY2VzOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLlJlc291cmNlVXRpbHM7CisKKy8qKgorKiBTaW1wbGUgZGlhbG9nIHRoYXQgc2V0cyBhbiBhdHRyaWJ1dGUuCisqLworZmluYWwgY2xhc3MgSk9iamVjdERpYWxvZyBleHRlbmRzIEpEaWFsb2cgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHByaXZhdGUgZmluYWwgTVRleHRQYW5lbCBmVGV4dFBhbmVsOworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IGZLZXk7CisgICAgcHJpdmF0ZSBib29sZWFuIGZDaGFyYWN0ZXI7CisgICAgcHJpdmF0ZSBIYXNodGFibGUgZk5hbWVUb1ZhbHVlTWFwOworICAgIAorICAgIHByaXZhdGUgZmluYWwgSkJ1dHRvbiBmT0tCdXR0b247CisgICAgcHJpdmF0ZSBmaW5hbCBKQnV0dG9uIGZDYW5jZWxCdXR0b247CisgICAgcHJpdmF0ZSBmaW5hbCBKTGlzdCBmSXRlbXM7CisgICAgCisgICAgLyoqCisgICAgKiBDb25zdHJ1Y3QgYSBuZXcgSk9iamVjdERpYWxvZy4KKyAgICAqIEBwYXJhbSBwYXJlbnQgdGhlIGRpYWxvZydzIHBhcmVudCBmcmFtZQorICAgICogQHBhcmFtIHRpdGxlIHRoZSBkaWFsb2dzIHRpdGxlCisgICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZSBkaXNwbGF5ZWQgbmV4dCB0byB0aGUgaW5wdXQgYm94CisgICAgKi8KKyAgICBKT2JqZWN0RGlhbG9nKEZyYW1lIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgIFN0cmluZyB0aXRsZSwgCisgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSwgCisgICAgICAgICAgICAgICAgICBNVGV4dFBhbmVsIHRleHRQYW5lbCwKKyAgICAgICAgICAgICAgICAgIE9iamVjdCBrZXksCisgICAgICAgICAgICAgICAgICBib29sZWFuIGNoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIG5hbWVzLAorICAgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzKSB7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBzdXBlcihwYXJlbnQsIHRpdGxlLCBmYWxzZSk7CisKKyAgICAgICAgc2V0dXBNYXAobmFtZXMsIHZhbHVlcyk7CisgICAgICAgIAorICAgICAgICBEaW1lbnNpb24gc2l6ZSA9IG5ldyBEaW1lbnNpb24oMjUwLCAyMDApOworICAgICAgICAKKyAgICAgICAgZlRleHRQYW5lbCA9IHRleHRQYW5lbDsKKyAgICAgICAgZktleSA9IGtleTsKKyAgICAgICAgZkNoYXJhY3RlciA9IGNoYXJhY3RlcjsKKyAgICAgICAgCisgICAgICAgIGZJdGVtcyA9IG5ldyBKTGlzdChuYW1lcyk7CisgICAgICAgIGZJdGVtcy5zZXRTZWxlY3Rpb25Nb2RlKExpc3RTZWxlY3Rpb25Nb2RlbC5NVUxUSVBMRV9JTlRFUlZBTF9TRUxFQ1RJT04pOworICAgICAgICAKKyAgICAgICAgZkl0ZW1zLmFkZE1vdXNlTGlzdGVuZXIobmV3IE1vdXNlQWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG1vdXNlQ2xpY2tlZChNb3VzZUV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZS5nZXRDbGlja0NvdW50KCkgPT0gMikgeworICAgICAgICAgICAgICAgICAgICBjbG9zZVdpbmRvdyh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgSlNjcm9sbFBhbmUgbGlzdFNjcm9sbGVyID0gbmV3IEpTY3JvbGxQYW5lKGZJdGVtcyk7CisgICAgICAgIGxpc3RTY3JvbGxlci5zZXRQcmVmZXJyZWRTaXplKHNpemUpOworICAgICAgICBsaXN0U2Nyb2xsZXIuc2V0UHJlZmVycmVkU2l6ZShzaXplKTsKKyAgICAgICAgbGlzdFNjcm9sbGVyLnNldEFsaWdubWVudFgoTEVGVF9BTElHTk1FTlQpOworCisgICAgICAgIEpMYWJlbCBsYWJlbCA9IG5ldyBKTGFiZWwobWVzc2FnZSk7CisgICAgICAgIGxhYmVsLnNldExhYmVsRm9yKGZJdGVtcyk7CisgICAgICAgIAorICAgICAgICBKUGFuZWwgaXRlbVBhbmVsID0gbmV3IEpQYW5lbCgpOworICAgICAgICBpdGVtUGFuZWwuYWRkKGxhYmVsKTsKKyAgICAgICAgaXRlbVBhbmVsLmFkZChCb3guY3JlYXRlUmlnaWRBcmVhKG5ldyBEaW1lbnNpb24oMCw1KSkpOworICAgICAgICBpdGVtUGFuZWwuYWRkKGxpc3RTY3JvbGxlcik7CisgICAgICAgIGl0ZW1QYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFbXB0eUJvcmRlcigxMCwxMCwxMCwxMCkpOworICAgICAgICAKKyAgICAgICAgaXRlbVBhbmVsLnNldExheW91dChuZXcgQm94TGF5b3V0KGl0ZW1QYW5lbCwgQm94TGF5b3V0LllfQVhJUykpOworICAgICAgICAKKyAgICAgICAgZkNhbmNlbEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuQ0FOQ0VMKSk7CisgICAgICAgIGZPS0J1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuT0spKTsKKyAgICAgICAgCisgICAgICAgIEpQYW5lbCBidXR0b25QYW5lbCA9IG5ldyBKUGFuZWwoKTsKKyAgICAgICAgYnV0dG9uUGFuZWwuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuQ0VOVEVSLCA1LCA1KSk7CisgICAgICAgIGJ1dHRvblBhbmVsLmFkZChmQ2FuY2VsQnV0dG9uKTsKKyAgICAgICAgYnV0dG9uUGFuZWwuYWRkKGZPS0J1dHRvbik7CisgICAgICAgIAorICAgICAgICBDb250YWluZXIgY29udGVudCA9IGdldENvbnRlbnRQYW5lKCk7CisgICAgICAgIGNvbnRlbnQuYWRkKGl0ZW1QYW5lbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisgICAgICAgIGNvbnRlbnQuYWRkKGJ1dHRvblBhbmVsLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCisgICAgICAgIHBhY2soKTsKKworICAgICAgICBhZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGNsb3NlV2luZG93KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBBY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBPYmplY3Qgc291cmNlID0gZS5nZXRTb3VyY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlID09IGZPS0J1dHRvbikgeworICAgICAgICAgICAgICAgICAgICBjbG9zZVdpbmRvdyh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc291cmNlID09IGZDYW5jZWxCdXR0b24pIHsKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VXaW5kb3coZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGZPS0J1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIGZDYW5jZWxCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworICAgICAgICAKKyAgICAgICAgc2VsZWN0U3R5bGVzKHZhbHVlcyk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBzZXR1cE1hcChTdHJpbmdbXSBuYW1lcywgT2JqZWN0W10gdmFsdWVzKSB7CisgICAgCisgICAgICAgIGlmIChuYW1lcy5sZW5ndGggIT0gdmFsdWVzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTXVzdCBoYXZlIHNhbWUgbnVtYmVyIG9mIG5hbWVzIGFuZCB2YWx1ZXMuIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZOYW1lVG9WYWx1ZU1hcCA9IG5ldyBIYXNodGFibGUobmFtZXMubGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAodmFsdWVzW2ldICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmTmFtZVRvVmFsdWVNYXAucHV0KG5hbWVzW2ldLCB2YWx1ZXNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2xvc2VXaW5kb3coYm9vbGVhbiBzZW5kQWN0aW9uKSB7CisKKyAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2VuZEFjdGlvbiAmJiBmSXRlbXMuZ2V0TWluU2VsZWN0aW9uSW5kZXgoKSAhPSBmSXRlbXMuZ2V0TWF4U2VsZWN0aW9uSW5kZXgoKSkgeworICAgICAgICAgICAgc2VuZEFjdGlvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc2VuZEFjdGlvbikgeworICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gZk5hbWVUb1ZhbHVlTWFwLmdldChmSXRlbXMuZ2V0U2VsZWN0ZWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHNlbmRBY3Rpb24odmFsdWUpOworICAgICAgICB9CisgICAgICAgIGRpc3Bvc2UoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIEhhbmRsZSB0aGUgdXNlciBpbnB1dAorICAgICogQHBhcmFtIG9iaiB0aGUgdmFsdWUgb2JqZWN0CisgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2VuZEFjdGlvbihPYmplY3QgdmFsdWUpIHsKKworICAgICAgICBTdHlsZU1vZGlmaWVyIG1vZGlmaWVyOworICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgeworICAgICAgICAgICAgbW9kaWZpZXIgPSBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKGZLZXksIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEF0dHJpYnV0ZVNldCBzZXQgPSBuZXcgQXR0cmlidXRlU2V0KGZLZXkpOworICAgICAgICAgICAgbW9kaWZpZXIgPSBTdHlsZU1vZGlmaWVyLmNyZWF0ZVJlbW92ZU1vZGlmaWVyKHNldCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZkNoYXJhY3RlciA9PSBNZW51SXRlbVNldC5DSEFSQUNURVIpIHsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwubW9kaWZ5Q2hhcmFjdGVyU3R5bGVPblNlbGVjdGlvbihtb2RpZmllcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmVGV4dFBhbmVsLm1vZGlmeVBhcmFncmFwaFN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBzZWxlY3RWYWx1ZShPYmplY3QgdmFsdWUsIE9iamVjdFtdIHZhbHVlcykgeworICAgIAorICAgICAgICBmb3IgKGludCBpPTA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoKHZhbHVlICE9IG51bGwgJiYgdmFsdWUuZXF1YWxzKHZhbHVlc1tpXSkpIHx8ICh2YWx1ZSA9PSBudWxsICYmIHZhbHVlc1tpXSA9PSBudWxsKSkgeworICAgICAgICAgICAgICAgIGZJdGVtcy5hZGRTZWxlY3Rpb25JbnRlcnZhbChpLCBpKTsKKyAgICAgICAgICAgICAgICBmSXRlbXMuZW5zdXJlSW5kZXhJc1Zpc2libGUoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBzZWxlY3RTdHlsZXMoT2JqZWN0W10gdmFsdWVzKSB7CisgICAgCisgICAgICAgIE9iamVjdCB2YWx1ZTsKKyAKKyAgICAgICAgaWYgKGZDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgIHZhbHVlID0gZlRleHRQYW5lbC5nZXRDaGFyYWN0ZXJTdHlsZU92ZXJTZWxlY3Rpb24oZktleSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YWx1ZSA9IGZUZXh0UGFuZWwuZ2V0UGFyYWdyYXBoU3R5bGVPdmVyU2VsZWN0aW9uKGZLZXkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUgIT0gTVRleHRQYW5lbC5NVUxUSVBMRV9WQUxVRVMpIHsKKyAgICAgICAgICAgIHNlbGVjdFZhbHVlKHZhbHVlLCB2YWx1ZXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZk9LQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgc2VsTGltaXQgPSBmVGV4dFBhbmVsLmdldFNlbGVjdGlvbkVuZCgpOworICAgICAgICAgICAgTUNvbnN0VGV4dCB0ZXh0ID0gZlRleHRQYW5lbC5nZXRUZXh0KCk7CisgICAgICAgICAgICBmb3IgKGludCBydW5TdGFydCA9IGZUZXh0UGFuZWwuZ2V0U2VsZWN0aW9uU3RhcnQoKTsgcnVuU3RhcnQgPD0gc2VsTGltaXQ7CisgICAgICAgICAgICAgICAgICAgIHJ1blN0YXJ0ID0gZkNoYXJhY3Rlcj8gdGV4dC5jaGFyYWN0ZXJTdHlsZUxpbWl0KHJ1blN0YXJ0KSA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQucGFyYWdyYXBoTGltaXQocnVuU3RhcnQpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBPYmplY3QgcnVuVmFsOworICAgICAgICAgICAgICAgIGlmIChmQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1blZhbCA9IHRleHQuY2hhcmFjdGVyU3R5bGVBdChydW5TdGFydCkuZ2V0KGZLZXkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcnVuVmFsID0gdGV4dC5wYXJhZ3JhcGhTdHlsZUF0KHJ1blN0YXJ0KS5nZXQoZktleSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChydW5WYWwgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBydW5WYWwgPSBmVGV4dFBhbmVsLmdldERlZmF1bHRWYWx1ZXMoKS5nZXQoZktleSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGVjdFZhbHVlKHJ1blZhbCwgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICBpZiAocnVuU3RhcnQgPT0gdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZJdGVtcy5hZGRMaXN0U2VsZWN0aW9uTGlzdGVuZXIobmV3IExpc3RTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZhbHVlQ2hhbmdlZChMaXN0U2VsZWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGZJdGVtcy5zZXRTZWxlY3Rpb25Nb2RlKExpc3RTZWxlY3Rpb25Nb2RlbC5TSU5HTEVfU0VMRUNUSU9OKTsKKyAgICAgICAgICAgICAgICBmT0tCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBmSXRlbXMucmVtb3ZlTGlzdFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ3VpL0pUYWJSdWxlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmd1aS9KVGFiUnVsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OGJjNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmd1aS9KVGFiUnVsZXIuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogSlRhYlJ1bGVyLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDY6MjIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5zd2luZ3VpOworCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS5hd3QuRGltZW5zaW9uOworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzOworCitpbXBvcnQgamF2YXguc3dpbmcuSkNvbXBvbmVudDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UYWJSdWxlcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLlRhYlJ1bGVySW1wbDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmF3dHVpLk1UYWJSdWxlckNvbXBvbmVudDsKKworLyoqCisgKiBKVGFiUnVsZXIgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgTVRhYlJ1bGVyQ29tcG9uZW50IGluIGEgU3dpbmcgY29tcG9uZW50LgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgSlRhYlJ1bGVyIGV4dGVuZHMgSkNvbXBvbmVudCBpbXBsZW1lbnRzIE1UYWJSdWxlckNvbXBvbmVudCB7CisgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIFRhYlJ1bGVySW1wbCBmSW1wbDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgVGFiUnVsZXIuCisgICAgICogQHBhcmFtIGJhc2VsaW5lIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHJ1bGVyJ3MgYmFzZWxpbmUKKyAgICAgKiBAcGFyYW0gb3JpZ2luIHRoZSB4LWNvb3JkaW5hdGUgaW4gdGhpcyBDb21wb25lbnQgd2hlcmUKKyAgICAgKiAgICAgdGhlIGxlZnQgbWFyZ2luIGFwcGVhcnMKKyAgICAgKiBAcGFyYW0gdGV4dFBhbmVsIHRoZSBNVGV4dFBhbmVsIHRvIGxpc3RlbiB0by4gIFRoaXMgVGFiUnVsZXIKKyAgICAgKiAgICAgd2lsbCByZWZsZWN0IHRoZSBNVGV4dFBhbmVsJ3MgcGFyYWdyYXBoIHN0eWxlcywgYW5kIHVwZGF0ZQorICAgICAqICAgICB0aGUgcGFyYWdyYXBoIHN0eWxlcyB3aGVuIG1hbmlwdWxhdGVkLgorICAgICAqLworICAgIHB1YmxpYyBKVGFiUnVsZXIoaW50IGJhc2VsaW5lLCBpbnQgb3JpZ2luLCBNVGV4dFBhbmVsIHRleHRQYW5lbCkgeworICAgICAgICAKKyAgICAgICAgZkltcGwgPSBuZXcgVGFiUnVsZXJJbXBsKGJhc2VsaW5lLCBvcmlnaW4sIHRleHRQYW5lbCwgdGhpcyk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIExpc3RlbiB0byB0aGUgZ2l2ZW4gTVRleHRQYW5lbCBhbmQgcmVmbGVjdCBpdHMgY2hhbmdlcywKKyAgICAgKiBhbmQgdXBkYXRlIGl0cyBwYXJhZ3JhcGggc3R5bGVzIHdoZW4gVGFiUnVsZXIgaXMKKyAgICAgKiBtYW5pcHVsYXRlZC4KKyAgICAgKiBAcGFyYW0gdGV4dFBhbmVsIHRoZSBNVGV4dFBhbmVsIHRvIGxpc3RlbiB0bworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGxpc3RlblRvVGV4dFBhbmVsKE1UZXh0UGFuZWwgdGV4dFBhbmVsKSB7CisKKyAgICAgICAgZkltcGwubGlzdGVuVG9UZXh0UGFuZWwodGV4dFBhbmVsKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHJldHVybiB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGlzIFRhYlJ1bGVyCisgICAgICovCisgICAgcHVibGljIENvbG9yIGdldEJhY2tDb2xvcigpIHsKKworICAgICAgICByZXR1cm4gZkltcGwuZ2V0QmFja0NvbG9yKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGlzIFRhYlJ1bGVyLgorICAgICAqIEBwYXJhbSBiYWNrQ29sb3IgdGhlIG5ldyBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoaXMgVGFiUnVsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRCYWNrQ29sb3IoQ29sb3IgYmFja0NvbG9yKSB7CisKKyAgICAgICAgZkltcGwuc2V0QmFja0NvbG9yKGJhY2tDb2xvcik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgTVRhYlJ1bGVyIHJlcHJlc2VudGVkIGJ5IHRoaXMgVGFiUnVsZXIuCisgICAgICogQHJldHVybiB0aGUgTVRhYlJ1bGVyIHJlcHJlc2VudGVkIGJ5IHRoaXMgVGFiUnVsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgTVRhYlJ1bGVyIGdldFJ1bGVyKCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldFJ1bGVyKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBsZWFkaW5nIG1hcmdpbiBvZiB0aGlzIFRhYlJ1bGVyLgorICAgICAqIEByZXR1cm4gdGhlIGxlYWRpbmcgbWFyZ2luIG9mIHRoaXMgVGFiUnVsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldExlYWRpbmdNYXJnaW4oKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZkltcGwuZ2V0TGVhZGluZ01hcmdpbigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZmlyc3QgbGluZSBpbmRlbnQgb2YgdGhpcyBUYWJSdWxlci4KKyAgICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBsaW5lIGluZGVudCBvZiB0aGlzIFRhYlJ1bGVyCisgICAgICovCisgICAgcHVibGljIGludCBnZXRGaXJzdExpbmVJbmRlbnQoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZkltcGwuZ2V0Rmlyc3RMaW5lSW5kZW50KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSB0cmFpbGluZyBtYXJnaW4gb2YgdGhpcyBUYWJSdWxlci4KKyAgICAgKiBAcmV0dXJuIHRoZSB0cmFpbGluZyBtYXJnaW4gb2YgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VHJhaWxpbmdNYXJnaW4oKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZkltcGwuZ2V0VHJhaWxpbmdNYXJnaW4oKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgQ29tcG9uZW50IG1ldGhvZHMgd2hpY2ggbmVlZCB0byBiZSBkZWxlZ2F0ZWQgdG8KKyAgICAvLyB0aGUgaW1wbGVtZW50YXRpb246CisgICAgCisgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZykgeworICAgICAgICAKKyAgICAgICAgZkltcGwucGFpbnQoZyk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBEaW1lbnNpb24gZ2V0UHJlZmVycmVkU2l6ZSgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRQcmVmZXJyZWRTaXplKCk7CisgICAgfQorCisgICAgcHVibGljIERpbWVuc2lvbiBnZXRNaW5pbXVtU2l6ZSgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRNaW5pbXVtU2l6ZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvSlRleHRGcmFtZS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmd1aS9KVGV4dEZyYW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2RkNDIwNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvSlRleHRGcmFtZS5qYXZhCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBKVGV4dEZyYW1lLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDY6MjIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC5zd2luZ3VpOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuTVRleHRQYW5lbDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5KVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwucmVzb3VyY2VzLkZyYW1lUmVzb3VyY2VzOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLlJlc291cmNlVXRpbHM7CisKK2ltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuVG9vbGtpdDsKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuQ2xpcGJvYXJkOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKKworaW1wb3J0IGphdmF4LnN3aW5nLkpGcmFtZTsKK2ltcG9ydCBqYXZheC5zd2luZy5KTWVudUJhcjsKK2ltcG9ydCBqYXZheC5zd2luZy5VSU1hbmFnZXI7CisKK2ltcG9ydCBqYXZhLmF3dC5Db250YWluZXI7CisKKy8qKgorICogSlRleHRGcmFtZSBpcyBhIEpGcmFtZSBjb250YWluaW5nIGFuIGVkaXRhYmxlIEpUZXh0UGFuZWwsIGEgc2V0IG9mIHN0YW5kYXJkCisgKiBtZW51cywgYW5kIGEgSlRhYlJ1bGVyLiAgVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCBhcy1pcywgYnV0IGlzCisgKiBwcmltYXJpbHkgaW50ZW5kZWQgdG8gYmUgYSBzaW1wbGUgZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBvdGhlciBjbGFzc2VzCisgKiBpbiB0aGlzIHBhY2thZ2UuCisgKiBAc2VlIGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLkpUZXh0UGFuZWwKKyAqIEBzZWUgU3dpbmdNZW51QnVpbGRlcgorICogQHNlZSBKVGFiUnVsZXIKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEpUZXh0RnJhbWUgZXh0ZW5kcyBKRnJhbWUgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIEpUZXh0UGFuZWwgZlRleHRQYW5lbDsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBKVGV4dEZyYW1lIHdpdGggbm8gdGV4dCwgbm8gdGl0bGUsIAorICAgICAqIGFuZCBhIHByaXZhdGUgY2xpcGJvYXJkLgorICAgICAqLworICAgIHB1YmxpYyBKVGV4dEZyYW1lKCkgeworICAgICAgICAKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgaW5pdChudWxsLCBUb29sa2l0LmdldERlZmF1bHRUb29sa2l0KCkuZ2V0U3lzdGVtQ2xpcGJvYXJkKCkpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgSlRleHRGcmFtZSB3aXRoIG5vIHRleHQgYW5kIHRoZSBnaXZlbiB0aXRsZS4KKyAgICAgKiBUaGUgSlRleHRQYW5lbCB3aWxsIHVzZSBhIHByaXZhdGUgY2xpcGJvYXJkLgorICAgICAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhpcyBGcmFtZQorICAgICAqLworICAgIHB1YmxpYyBKVGV4dEZyYW1lKFN0cmluZyB0aXRsZSkgeworICAgICAgICAKKyAgICAgICAgc3VwZXIodGl0bGUpOworICAgICAgICBpbml0KG51bGwsIFRvb2xraXQuZ2V0RGVmYXVsdFRvb2xraXQoKS5nZXRTeXN0ZW1DbGlwYm9hcmQoKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBKVGV4dEZyYW1lIHdpdGggdGhlIGdpdmVuIHRleHQgYW5kIHRpdGxlLCB3aG9zZQorICAgICAqIFRleHRQYW5lbCB3aWxsIHVzZSB0aGUgZ2l2ZW4gY2xpcGJvYXJkLgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSBpbml0aWFsIHRleHQgaW4gdGhlIFRleHRQYW5lbC4gIElmIG51bGwgdGhlCisgICAgICogICAgICBUZXh0UGFuZWwgd2lsbCBpbml0aWFsbHkgYmUgZW1wdHkKKyAgICAgKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoaXMgRnJhbWUKKyAgICAgKiBAcGFyYW0gY2xpcGJvYXJkIHRoZSBDbGlwYm9hcmQgd2hpY2ggdGhlIFRleHRQYW5lbCB3aWxsIHVzZS4KKyAgICAgKiAgICAgIElmIG51bGwgdGhlIFRleHRQYW5lbCB3aWxsIHVzZSBhIHByaXZhdGUgQ2xpcGJvYXJkCisgICAgICovCisgICAgcHVibGljIEpUZXh0RnJhbWUoTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkIGNsaXBib2FyZCkgeworCisgICAgICAgIHN1cGVyKHRpdGxlKTsKKyAgICAgICAgaW5pdCh0ZXh0LCBjbGlwYm9hcmQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBpbml0KE1Db25zdFRleHQgdGV4dCwgQ2xpcGJvYXJkIGNsaXBib2FyZCkgeworICAgICAgICAKKyAgICAgICAgZlRleHRQYW5lbCA9IG5ldyBKVGV4dFBhbmVsKHRleHQsIGNsaXBib2FyZCk7CisKKyAgICAgICAgSlRhYlJ1bGVyIHRhYlJ1bGVyID0gbmV3IEpUYWJSdWxlcigxNCwgMTAsIGZUZXh0UGFuZWwpOworCisgICAgICAgIGNyZWF0ZU1lbnVzKCk7CisKKyAgICAgICAgQ29udGFpbmVyIGNvbnRlbnRQYW5lID0gZ2V0Q29udGVudFBhbmUoKTsKKyAgICAgICAgY29udGVudFBhbmUuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIGNvbnRlbnRQYW5lLmFkZChmVGV4dFBhbmVsLCAiQ2VudGVyIik7CisgICAgICAgIGNvbnRlbnRQYW5lLmFkZCh0YWJSdWxlciwgIk5vcnRoIik7CisgICAgICAgIHBhY2soKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlTWVudXMoKSB7CisKKyAgICAgICAgSk1lbnVCYXIgbWVudUJhciA9IG5ldyBKTWVudUJhcigpOworCisgICAgICAgIFN3aW5nTWVudUJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5jcmVhdGVNZW51cyhtZW51QmFyLCBmVGV4dFBhbmVsLCB0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHNldEpNZW51QmFyKG1lbnVCYXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgTVRleHRQYW5lbCBpbiB0aGlzIGZyYW1lLgorICAgICAqLworICAgIHB1YmxpYyBNVGV4dFBhbmVsIGdldFRleHRQYW5lbCgpIHsKKworICAgICAgICByZXR1cm4gZlRleHRQYW5lbDsKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGxhZiA9IFVJTWFuYWdlci5nZXRTeXN0ZW1Mb29rQW5kRmVlbENsYXNzTmFtZSgpOworICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgaWYgKGFyZ3NbMF0uZXF1YWxzKCJjcCIpKSB7CisgICAgICAgICAgICAgICAgbGFmID0gVUlNYW5hZ2VyLmdldENyb3NzUGxhdGZvcm1Mb29rQW5kRmVlbENsYXNzTmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBVSU1hbmFnZXIuc2V0TG9va0FuZEZlZWwobGFmKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChUaHJvd2FibGUgdGgpIHsKKyAgICAgICAgICAgIHRoLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIEpUZXh0RnJhbWUgZnJhbWUgPSBuZXcgSlRleHRGcmFtZSgpOworICAgICAgICBmcmFtZS5hZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgZnJhbWUuc2V0U2l6ZSg1NTAsIDcwMCk7CisgICAgICAgIGZyYW1lLnNob3coKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ3VpL1N3aW5nTWVudUJ1aWxkZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvU3dpbmdNZW51QnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3NGQwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ3VpL1N3aW5nTWVudUJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogU3dpbmdNZW51QnVpbGRlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAxLzEwLzMwIDAyOjQyOjQ4ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3dpbmd1aTsKKworaW1wb3J0IGphdmEuYXd0LkZyYW1lOworaW1wb3J0IGphdmEuYXd0LldpbmRvdzsKKworaW1wb3J0IGphdmF4LnN3aW5nLkpNZW51OworaW1wb3J0IGphdmF4LnN3aW5nLkpNZW51QmFyOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuTVRleHRQYW5lbDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5GcmFtZVJlc291cmNlczsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLio7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwuRGlhbG9nSXRlbS5EaWFsb2dGYWN0b3J5OworCisvKioKKyAqIFN3aW5nTWVudUJ1aWxkZXIgcHJvdmlkZXMgYSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgc2V0IG9mIFN3aW5nIG1lbnVzIGZvciBpbnRlcmFjdGluZworICogd2l0aCBhbiBNVGV4dFBhbmVsLiAgRnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgY2xhc3MgbWF5IHByb3ZpZGUgZ3JlYXRlciBjb250cm9sCisgKiBvdmVyIHRoZSBtZW51IGNvbnRlbnRzLgorICogQHNlZSBNVGV4dFBhbmVsCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTd2luZ01lbnVCdWlsZGVyIGV4dGVuZHMgTWVudUJ1aWxkZXIgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3dpbmdNZW51QnVpbGRlciBJTlNUQU5DRSA9IG5ldyBTd2luZ01lbnVCdWlsZGVyKCk7CisgICAgCisgICAgLyoqCisgICAgICogSWQgZm9yIGFuIEVkaXQgbWVudS4gIFRoZSBFZGl0IG1lbnUgaGFzIHRoZSBmb2xsb3dpbmcgaXRlbXM6CisgICAgICogPHVsPgorICAgICAqIDxsaT48Yj5VbmRvPC9iPiAtIGludm9rZSB1bmRvKCkgb24gdGhlIE1UZXh0UGFuZWw8L2xpPgorICAgICAqIDxsaT48Yj5SZWRvPC9iPiAtIGludm9rZSByZWRvKCkgb24gdGhlIE1UZXh0UGFuZWw8L2xpPgorICAgICAqIDxsaT48Yj5DdXQ8L2I+IC0gaW52b2tlIGN1dCgpIG9uIHRoZSBNVGV4dFBhbmVsPC9saT4KKyAgICAgKiA8bGk+PGI+Q29weTwvYj4gLSBpbnZva2UgY29weSgpIG9uIHRoZSBNVGV4dFBhbmVsPC9saT4KKyAgICAgKiA8bGk+PGI+UGFzdGU8L2I+IC0gaW52b2tlIHBhc3RlKCkgb24gdGhlIE1UZXh0UGFuZWw8L2xpPgorICAgICAqIDxsaT48Yj5DbGVhcjwvYj4gLSBpbnZva2UgY2xlYXIoKSBvbiB0aGUgTVRleHRQYW5lbDwvbGk+CisgICAgICogPGxpPjxiPlNlbGVjdCBBbGw8L2I+IC0gaW52b2tlIHNlbGVjdEFsbCgpIG9uIHRoZSBNVGV4dFBhbmVsPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVESVQgPSBNZW51QnVpbGRlci5FRElUOworICAgIC8qKgorICAgICAqIElkIGZvciB0aGUgcG9pbnQgc2l6ZXMgbWVudS4gIFRoZSBtZW51IGhhcyBpdGVtcyB0aGF0IHNldCB0aGUgc2l6ZSBvZiBhIGNoYXJhY3RlcgorICAgICAqIGluIGEgdHlwZWZhY2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0laRSA9IE1lbnVCdWlsZGVyLlNJWkU7CisgICAgLyoqCisgICAgICogSWQgZm9yIGEgU3R5bGUgbWVudS4gIFRoZSBTdHlsZSBtZW51IGhhcyB0aGUgZm9sbG93aW5nIGl0ZW1zOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+PGI+UGxhaW48L2I+IC0gcmVtb3ZlIDxjb2RlPldFSUdIVDwvY29kZT4sCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlBPU1RVUkU8L2NvZGU+LAorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5VTkRFUkxJTkU8L2NvZGU+IGFuZAorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5TVFJJS0VUSFJPVUdIPC9jb2RlPiBhdHRyaWJ1dGVzIGZyb20gdGhlCisgICAgICogY3VycmVudCBzZWxlY3Rpb248L2xpPgorICAgICAqIDxsaT48Yj5Cb2xkPC9iPiAtIGFkZCA8Y29kZT57V0VJR0hULFdFSUdIVF9CT0xEfTwvY29kZT4gdG8KKyAgICAgKiB0aGUgY3VycmVudCBzZWxlY3Rpb248L2xpPgorICAgICAqIDxsaT48Yj5JdGFsaWM8L2I+IC0gYWRkIDxjb2RlPntQT1NUVVJFLFBPU1RVUkVfSVRBTElDfTwvY29kZT4gdG8KKyAgICAgKiB0aGUgY3VycmVudCBzZWxlY3Rpb248L2xpPgorICAgICAqIDxsaT48Yj5VbmRlcmxpbmU8L2I+IC0gYWRkIDxjb2RlPntVTkRFUkxJTkUsVU5ERVJMSU5FX09OfTwvY29kZT4gdG8KKyAgICAgKiB0aGUgY3VycmVudCBzZWxlY3Rpb248L2xpPgorICAgICAqIDxsaT48Yj5TdHJpa2V0aHJvdWdoPC9iPiAtIGFkZCA8Y29kZT57U1RSSUtFVEhST1VHSCxTVFJJS0VUSFJPVUdIX09OfTwvY29kZT4KKyAgICAgKiB0byB0aGUgY3VycmVudCBzZWxlY3Rpb248L2xpPgorICAgICAqIDxsaT48Yj5Gb250Li4uPC9iPiAtIGRpc3BsYXkgYSBkaWFsb2cgYWxsb3dpbmcgdGhlIHVzZXIgdG8KKyAgICAgKiBzZWxlY3QgYSB0eXBlZmFjZSAoZm9udCBmYW1pbHkpIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb248L2xpPgorICAgICAqIDxsaT48Yj5Gb3JlY29sb3IuLi48L2I+IC0gZGlzcGxheSBhIGRpYWxvZyBhbGxvd2luZyB0aGUgdXNlciB0bworICAgICAqIHNlbGVjdCBhIGZvcmVncm91bmQgY29sb3IgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbjwvbGk+CisgICAgICogPGxpPjxiPkJhY2tjb2xvci4uLjwvYj4gLSBkaXNwbGF5IGEgZGlhbG9nIGFsbG93aW5nIHRoZSB1c2VyIHRvCisgICAgICogc2VsZWN0IGEgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFID0gTWVudUJ1aWxkZXIuU1RZTEU7CisgICAgLyoqCisgICAgICogSWQgZm9yIGEgcGFyYWdyYXBoIGFsaWdubWVudCBtZW51LiAgVGhlIG1lbnUgaGFzIHRoZSBmb2xsb3dpbmcgaXRlbXM6CisgICAgICogPHVsPgorICAgICAqIDxsaT48Yj5MZWFkaW5nPC9iPiAtIGdpdmUgc2VsZWN0ZWQgcGFyYWdyYXBoKHMpIExFQURJTkcgZmx1c2g8L2xpPgorICAgICAqIDxsaT48Yj5DZW50ZXI8L2I+IC0gZ2l2ZSBzZWxlY3RlZCBwYXJhZ3JhcGgocykgQ0VOVEVSIGZsdXNoPC9saT4KKyAgICAgKiA8bGk+PGI+VHJhaWxpbmc8L2I+IC0gZ2l2ZSBzZWxlY3RlZCBwYXJhZ3JhcGgocykgVFJBSUxJTkcgZmx1c2g8L2xpPgorICAgICAqIDxsaT48Yj5KdXN0aWZpZWQ8L2I+IC0gZ2l2ZSBzZWxlY3RlZCBwYXJhZ3JhcGgocykgZnVsbCBqdXN0aWZpY2F0aW9uPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMVVNIID0gTWVudUJ1aWxkZXIuRkxVU0g7CisgICAgLyoqCisgICAgICogSWQgZm9yIGEgbWVudSB0aGF0IHNldHMgdGhlIEtleVJlbWFwCisgICAgICogb24gYW4gTVRleHRQYW5lbC4gIFRoZSBtZW51IGhhcyB0aGUgZm9sbG93aW5nIGl0ZW1zOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+PGI+RGVmYXVsdDwvYj4gLSBzZXQgS2V5UmVtYXAgdG8gaWRlbnRpdHkgcmVtYXA8L2xpPgorICAgICAqIDxsaT48Yj5BcmFiaWM8L2I+IC0gc2V0IEtleVJlbWFwIHRvIEFyYWJpYyB0cmFuc2xpdGVyYXRpb248L2xpPgorICAgICAqIDxsaT48Yj5IZWJyZXc8L2I+IC0gc2V0IEtleVJlbWFwIHRvIEhlYnJldyB0cmFuc2xpdGVyYXRpb248L2xpPgorICAgICAqIDxsaT48Yj5Jc3JhZWwgTmlrdWQ8L2I+IC0gc2V0IEtleVJlbWFwIHRvIElzcmFlbCBOaWt1ZDwvbGk+CisgICAgICogPGxpPjxiPlRoYWkgS2V0bWFuZWU8L2I+IC0gc2V0IEtleVJlbWFwIHRvIFRoYWkgS2V0bWFuZWU8L2xpPgorICAgICAqIDwvdWw+CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0VZTUFQID0gTWVudUJ1aWxkZXIuS0VZTUFQOworICAgIC8qKgorICAgICAqIElkIGZvciBhIG1lbnUgdGhhdCBzZXRzCisgICAgICogdGhlIHByaW1hcnkgcnVuIGRpcmVjdGlvbiBmb3IgYSBwYXJhZ3JhcGguICBSdW4gZGlyZWN0aW9uIGNhbiBiZSBsZWZ0LXRvLXJpZ2h0LAorICAgICAqIHJpZ2h0LXRvLWxlZnQsIG9yIGNhbiB1c2UgdGhlIGRlZmF1bHQgcnVuIGRpcmVjdGlvbiBmcm9tIHRoZSBVbmljb2RlIGJpZGkgYWxnb3JpdGhtLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJJREkgPSBNZW51QnVpbGRlci5CSURJOworICAgIC8qKgorICAgICAqIElkIGZvciBhIG1lbnUgd2l0aCBhbiA8Yj5BYm91dDwvYj4gaXRlbS4gIFdoZW4gc2VsZWN0ZWQsIAorICAgICAqIHRoZSBpdGVtIGRpc3BsYXlzIGEgRnJhbWUgY29udGFpbmluZyBzb21lCisgICAgICogc2VsZi1wcm9tb3Rpb25hbCB0ZXh0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFCT1VUID0gTWVudUJ1aWxkZXIuQUJPVVQ7CisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIFN3aW5nTWVudUJ1aWxkZXIuCisgICAgICovCisgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3dpbmdNZW51QnVpbGRlciBnZXRJbnN0YW5jZSgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBJTlNUQU5DRTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBKTWVudUJhciBmTWVudUJhcjsKKyAgICAKKyAgICBwcml2YXRlIFN3aW5nTWVudUJ1aWxkZXIoKSB7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBhIHN0YW5kYXJkIHNldCBvZiBtZW51cyB0byB0aGUgZ2l2ZW4gbWVudSBiYXIuICBUaGUgbWVudXMgCisgICAgICogd2lsbCBpbnRlcmFjdCB3aXRoIHRoZSBnaXZlbiBNVGV4dFBhbmVsLgorICAgICAqIEBwYXJhbSBtZW51QmFyIHRoZSBNZW51QmFyIHRvIHdoaWNoIG1lbnVzIGFyZSBhZGRlZAorICAgICAqIEBwYXJhbSB0ZXh0UGFuZWwgdGhlIE1UZXh0UGFuZWwgd2l0aCB3aGljaCB0aGUgbWVudXMgaW50ZXJhY3QKKyAgICAgKiBAcGFyYW0gZnJhbWUgYSBGcmFtZSB0byB1c2UgYXMgdGhlIHBhcmVudCBvZiBhbnkgZGlhbG9ncyBjcmVhdGVkIGJ5IGEgCisgICAgICogICBhIG1lbnUgaXRlbS4gIElmIG51bGwsIG1lbnUgaXRlbXMgd2hpY2ggY3JlYXRlIGRpYWxvZ3Mgd2lsbCBiZSBvbWl0dGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZU1lbnVzKEpNZW51QmFyIG1lbnVCYXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UZXh0UGFuZWwgdGV4dFBhbmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lIGZyYW1lKSB7CisKKyAgICAgICAgY3JlYXRlTWVudXMobWVudUJhciwgdGV4dFBhbmVsLCBmcmFtZSwgZGVmYXVsdE1lbnVzKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkIGEgc2V0IG9mIG1lbnVzIHRvIHRoZSBnaXZlbiBtZW51IGJhci4gIFRoZSBtZW51cyAKKyAgICAgKiB3aWxsIGludGVyYWN0IHdpdGggdGhlIGdpdmVuIE1UZXh0UGFuZWwuCisgICAgICogQHBhcmFtIG1lbnVCYXIgdGhlIE1lbnVCYXIgdG8gd2hpY2ggbWVudXMgYXJlIGFkZGVkCisgICAgICogQHBhcmFtIHRleHRQYW5lbCB0aGUgTVRleHRQYW5lbCB3aXRoIHdoaWNoIHRoZSBtZW51cyBpbnRlcmFjdAorICAgICAqIEBwYXJhbSBmcmFtZSBhIEZyYW1lIHRvIHVzZSBhcyB0aGUgcGFyZW50IG9mIGFueSBkaWFsb2dzIGNyZWF0ZWQgYnkgYSAKKyAgICAgKiAgIGEgbWVudSBpdGVtLiAgSWYgbnVsbCwgbWVudSBpdGVtcyB3aGljaCBjcmVhdGUgZGlhbG9ncyB3aWxsIGJlIG9taXR0ZWQuCisgICAgICogQHBhcmFtIG1lbnVzIGFuIGFycmF5IG9mIGludGVnZXIgbWVudSBpZCdzLiAgRWFjaCBlbGVtZW50IG9mIHRoZQorICAgICAqICAgYXJyYXkgbXVzdCBiZSBvbmUgb2YgdGhpcyBjbGFzcydzIG1lbnUgaWQgY29uc3RhbnRzLiAgSWYgbnVsbCwKKyAgICAgKiAgIHRoZSBkZWZhdWx0IG1lbnVzIGFyZSBjcmVhdGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZU1lbnVzKEpNZW51QmFyIG1lbnVCYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRleHRQYW5lbCB0ZXh0UGFuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gbWVudXMpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChtZW51cyA9PSBudWxsKSB7CisgICAgICAgICAgICBtZW51cyA9IGRlZmF1bHRNZW51czsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3luY2hyb25pemVkIChNSXRlbS5MT0NLKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZNZW51QmFyID0gbWVudUJhcjsKKyAgICAgICAgICAgIGRvQ3JlYXRlTWVudXModGV4dFBhbmVsLCBmcmFtZSwgbWVudXMpOworICAgICAgICAgICAgZk1lbnVCYXIgPSBudWxsOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUFkZE1lbnUoU3RyaW5nIGtleSkgeworICAgICAgICAKKyAgICAgICAgSk1lbnUgbWVudSA9IG5ldyBKTWVudShSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKGtleSkpOworICAgICAgICBmTWVudUJhci5hZGQobWVudSk7CisgICAgICAgIE1JdGVtLnNldEl0ZW1GYWN0b3J5KG5ldyBTd2luZ01lbnVGYWN0b3J5KG1lbnUpKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgRGlhbG9nRmFjdG9yeSBjcmVhdGVPYmplY3REaWFsb2dGYWN0b3J5KGZpbmFsIFN0cmluZyBkaWFsb2dUaXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkaWFsb2dNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSB2YWx1ZXMpIHsKKyAgICAgICAgCisgICAgICAgIGZpbmFsIEZyYW1lIGRpYWxvZ1BhcmVudCA9IGZEaWFsb2dQYXJlbnQ7CisKKyAgICAgICAgcmV0dXJuIG5ldyBEaWFsb2dGYWN0b3J5KCkgeyAgICAKKyAgICAgICAgICAgIHB1YmxpYyBXaW5kb3cgY3JlYXRlRGlhbG9nKE1UZXh0UGFuZWwgdGV4dFBhbmVsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBKT2JqZWN0RGlhbG9nKGRpYWxvZ1BhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dUaXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQYW5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBEaWFsb2dGYWN0b3J5IGNyZWF0ZU51bWJlckRpYWxvZ0ZhY3RvcnkoZmluYWwgU3RyaW5nIGRpYWxvZ1RpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRpYWxvZ01lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3Qga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBjaGFyYWN0ZXIpIHsKKyAgICAgICAgCisgICAgICAgIGZpbmFsIEZyYW1lIGRpYWxvZ1BhcmVudCA9IGZEaWFsb2dQYXJlbnQ7CisgICAgICAgIC8vIHZhcmlhYmxlIG5vdCB1c2VkIGZpbmFsIE1UZXh0UGFuZWwgdGV4dFBhbmVsID0gZlRleHRQYW5lbDsKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IERpYWxvZ0ZhY3RvcnkoKSB7CisgICAgICAgICAgICBwdWJsaWMgV2luZG93IGNyZWF0ZURpYWxvZyhNVGV4dFBhbmVsIGZUZXh0UGFuZWwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpOdW1iZXJEaWFsb2coZGlhbG9nUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dUaXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlRleHRQYW5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gICAgCisgICAgCisgICAgcHJvdGVjdGVkIERpYWxvZ0ZhY3RvcnkgY3JlYXRlQWJvdXREaWFsb2dGYWN0b3J5KCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5ldyBEaWFsb2dGYWN0b3J5KCkgeworICAgICAgICAgICAgcHVibGljIFdpbmRvdyBjcmVhdGVEaWFsb2coTVRleHRQYW5lbCB0ZXh0UGFuZWwpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLkFCT1VUX1RJVExFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpNZXNzYWdlRGlhbG9nKHRpdGxlLCBBYm91dFRleHQuZ2V0QWJvdXRUZXh0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ3VpL1N3aW5nTWVudUZhY3RvcnkuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvU3dpbmdNZW51RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjMTlhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC9zd2luZ3VpL1N3aW5nTWVudUZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogU3dpbmdNZW51RmFjdG9yeS5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ2OjIyICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQuc3dpbmd1aTsKKworaW1wb3J0IGphdmEuYXd0LkV2ZW50OworCitpbXBvcnQgamF2YXguc3dpbmcuSkNoZWNrQm94TWVudUl0ZW07CitpbXBvcnQgamF2YXguc3dpbmcuSk1lbnU7CitpbXBvcnQgamF2YXguc3dpbmcuSk1lbnVJdGVtOworaW1wb3J0IGphdmF4LnN3aW5nLkpTZXBhcmF0b3I7CitpbXBvcnQgamF2YXguc3dpbmcuS2V5U3Ryb2tlOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5yZXNvdXJjZXMuTWVudURhdGE7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwuRXZlbnRMaXN0ZW5lcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5NSXRlbTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5NSXRlbS5JdGVtRmFjdG9yeTsKKworZmluYWwgY2xhc3MgU3dpbmdNZW51RmFjdG9yeSBpbXBsZW1lbnRzIEl0ZW1GYWN0b3J5IHsKKyAgICAgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFN3aW5nTUl0ZW0gZXh0ZW5kcyBNSXRlbSB7CisgICAgICAgIAorICAgICAgICBwcml2YXRlIEpNZW51SXRlbSBmSXRlbTsKKyAgICAgICAgCisgICAgICAgIFN3aW5nTUl0ZW0oSk1lbnVJdGVtIGl0ZW0pIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZkl0ZW0gPSBpdGVtOworICAgICAgICAgICAgaXRlbS5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0ZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlU2VsZWN0ZWQoKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1cGVyLmhhbmRsZVNlbGVjdGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZJdGVtLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFN0YXRlKGJvb2xlYW4gY2hlY2tlZCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIEpDaGVja0JveE1lbnVJdGVtIGl0ZW0gPSAoSkNoZWNrQm94TWVudUl0ZW0pIGZJdGVtOworICAgICAgICAgICAgICAgIGl0ZW0uc2V0U3RhdGUoY2hlY2tlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBlcmZvcm0gc2V0Q2hlY2tlZCBvbiBub24tY2hlY2tib3ggaXRlbSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgSk1lbnUgZk1lbnU7CisgICAgICAgIAorICAgIFN3aW5nTWVudUZhY3RvcnkoSk1lbnUgbWVudSkgeworICAgICAgICAgICAgCisgICAgICAgIGZNZW51ID0gbWVudTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBNSXRlbSBoYW5kbGVDcmVhdGUoSk1lbnVJdGVtIGl0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVudURhdGEgbWVudURhdGEpIHsKKworICAgICAgICBpZiAobWVudURhdGEuaGFzU2hvcnRjdXQoKSkgeworICAgICAgICAgICAgS2V5U3Ryb2tlIGtzID0gS2V5U3Ryb2tlLmdldEtleVN0cm9rZShtZW51RGF0YS5nZXRTaG9ydGN1dEtleUNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQuQ1RSTF9NQVNLKTsKKyAgICAgICAgICAgIGl0ZW0uc2V0QWNjZWxlcmF0b3Ioa3MpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmTWVudS5hZGQoaXRlbSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IFN3aW5nTUl0ZW0oaXRlbSk7CisgICAgfQorICAgICAgICAKKyAgICBwdWJsaWMgTUl0ZW0gY3JlYXRlSXRlbShNZW51RGF0YSBtZW51RGF0YSkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGhhbmRsZUNyZWF0ZShuZXcgSk1lbnVJdGVtKG1lbnVEYXRhLmdldE5hbWUoKSksIG1lbnVEYXRhKTsKKyAgICB9ICAgICAgICAKKworICAgIHB1YmxpYyBNSXRlbSBjcmVhdGVDaGVja2JveEl0ZW0oTWVudURhdGEgbWVudURhdGEpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBoYW5kbGVDcmVhdGUobmV3IEpDaGVja0JveE1lbnVJdGVtKG1lbnVEYXRhLmdldE5hbWUoKSksIG1lbnVEYXRhKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgY3JlYXRlU2VwYXJhdG9yKCkgeworICAgICAgICAKKyAgICAgICAgZk1lbnUuYWRkKG5ldyBKU2VwYXJhdG9yKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvcGFja2FnZS5odG1sIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvc3dpbmd1aS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDUwYmFlMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3N3aW5ndWkvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSI+CitQcm92aWRlcyBjbGFzc2VzIGZvciBidWlsZGluZyBhIFN3aW5nLWJhc2VkIHVzZXIgaW50ZXJmYWNlIGZvciBhIFRleHRQYW5lbC4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvRGVjbGFyYXRpb24uamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvRGVjbGFyYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OWJkMmZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC9EZWNsYXJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IERlY2xhcmF0aW9uLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MzggJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXN0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlZFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCisvKioKKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIGZpcnN0IGZvdXIgcGFyYWdyYXBocyBvZiB0aGUgRGVjbGFyYXRpb24KKyAqIG9mIEluZGVwZW5kZW5jZSwgYXMgYm90aCBzdHlsZWQgYW5kIHVuc3R5bGVkIHRleHQuICBUaGUgdmlld3MKKyAqIGV4cHJlc3NlZCB0aGVyZWluIGFyZSBub3QgbmVjZXNzYXJpbHkgdGhvc2Ugb2YgdGhlIHByb2dyYW1tZXIgb3Igb2YKKyAqIGhpcy9oZXIgZW1wbG95ZXIuICBObyBjcml0aWNpc20gb2YgYW55IG1vbmFyY2h5LCBvbGlnYXJjaHksIGRpY3RhdG9yc2hpcCwKKyAqIGF1dG9jcmFjeSwgcGx1dG9jcmFjeSwgdGhlb2NyYWN5LCBhbmFyY2hpc3QgdGVycml0b3J5LCBjb2xvbmlhbCBwb3dlciwKKyAqIG9yIGFueSBvdGhlciBub25kZW1vY3JhdGljIGZvcm0gb2YgZ292ZXJubWVudCBpcyBpbnRlbmRlZC4gIFRoaXMgZG9jdW1lbnQKKyAqIGlzIHByb3ZpZGVkICJhcy1pcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzc2VkIG9yIGltcGxpZWQuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBEZWNsYXJhdGlvbiB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGZnRGVjbGFyYXRpb25TdHIgPSAiSW4gQ29uZ3Jlc3MsIEp1bHkgNCwgMTc3NiwgVEhFIFVOQU5JTU9VUyBERUNMQVJBVElPTiBPRiBUSEUgVEhJUlRFRU4gVU5JVEVEIFNUQVRFUyBPRiBBTUVSSUNBXG4iICsKKyAgICAgICAgIlxuIiArCisgICAgICAgICJXaGVuIGluIHRoZSBDb3Vyc2Ugb2YgaHVtYW4gRXZlbnRzLCBpdCBiZWNvbWVzIG5lY2Vzc2FyeSBmb3Igb25lIFBlb3BsZSB0byBkaXNzb2x2ZSB0aGUgUG9saXRpY2FsIEJhbmRzIHdoaWNoIGhhdmUgY29ubmVjdGVkIHRoZW0gd2l0aCBhbm90aGVyLCBhbmQgdG8gYXNzdW1lIGFtb25nIHRoZSBQb3dlcnMgb2YgdGhlIEVhcnRoLCB0aGUgc2VwYXJhdGUgYW5kIGVxdWFsIFN0YXRpb24gdG8gd2hpY2ggdGhlIExhd3Mgb2YgTmF0dXJlIGFuZCBvZiBOYXR1cmUncyBHb2QgZW50aXRsZSB0aGVtLCBhIGRlY2VudCBSZXNwZWN0IHRvIHRoZSBPcGluaW9ucyBvZiBNYW5raW5kIHJlcXVpcmVzIHRoYXQgdGhleSBzaG91bGQgZGVjbGFyZSB0aGUgY2F1c2VzIHdoaWNoIGltcGVsIHRoZW0gdG8gdGhlIFNlcGFyYXRpb24uXG4iICsKKyAgICAgICAgIlxuIiArCisgICAgICAgICJXZSBob2xkIHRoZXNlIFRydXRocyB0byBiZSBzZWxmLWV2aWRlbnQsIHRoYXQgYWxsIE1lbiBhcmUgY3JlYXRlZCBlcXVhbCwgdGhhdCB0aGV5IGFyZSBlbmRvd2VkIGJ5IHRoZWlyIENyZWF0b3Igd2l0aCBjZXJ0YWluIHVuYWxpZW5hYmxlIFJpZ2h0cywgdGhhdCBhbW9uZyB0aGVzZSBhcmUgTGlmZSwgTGliZXJ0eSwgYW5kIHRoZSBQdXJzdWl0IG9mIEhhcHBpbmVzcy5cbiIgKworICAgICAgICAiXG4iICsKKyAgICAgICAgIlRoYXQgdG8gc2VjdXJlIHRoZXNlIFJpZ2h0cywgR292ZXJubWVudHMgYXJlIGluc3RpdHV0ZWQgYW1vbmcgTWVuLCBkZXJpdmluZyB0aGVpciBqdXN0IFBvd2VycyBmcm9tIHRoZSBDb25zZW50IG9mIHRoZSBHb3Zlcm5lZCwgdGhhdCB3aGVuZXZlciBhbnkgRm9ybSBvZiBHb3Zlcm5tZW50IGJlY29tZXMgZGVzdHJ1Y3RpdmUgb2YgdGhlc2UgRW5kcywgaXQgaXMgdGhlIFJpZ2h0IG9mIHRoZSBQZW9wbGUgdG8gYWx0ZXIgb3IgdG8gYWJvbGlzaCBpdCwgYW5kIHRvIGluc3RpdHV0ZSBuZXcgR292ZXJubWVudCwgbGF5aW5nIGl0cyBGb3VuZGF0aW9uIG9uIHN1Y2ggUHJpbmNpcGxlcywgYW5kIG9yZ2FuaXppbmcgaXRzIFBvd2VycyBpbiBzdWNoIEZvcm0sIGFzIHRvIHRoZW0gc2hhbGwgc2VlbSBtb3N0IGxpa2VseSB0byBlZmZlY3QgdGhlaXIgU2FmZXR5IGFuZCBIYXBwaW5lc3MuIFBydWRlbmNlLCBpbmRlZWQsIHdpbGwgZGljdGF0ZSB0aGF0IEdvdmVybm1lbnRzIGxvbmcgZXN0YWJsaXNoZWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGZvciBsaWdodCBhbmQgdHJhbnNpZW50IENhdXNlczsgYW5kIGFjY29yZGluZ2x5IGFsbCBFeHBlcmllbmNlIGhhdGggc2hld24sIHRoYXQgTWFua2luZCBhcmUgbW9yZSBkaXNwb3NlZCB0byBzdWZmZXIsIHdoaWxlIEV2aWxzIGFyZSBzdWZmZXJhYmxlLCB0aGFuIHRvIHJpZ2h0IHRoZW1zZWx2ZXMgYnkgYWJvbGlzaGluZyB0aGUgRm9ybXMgdG8gd2hpY2ggdGhleSBhcmUgYWNjdXN0b21lZC4gQnV0IHdoZW4gYSBsb25nIFRyYWluIG9mIEFidXNlcyBhbmQgVXN1cnBhdGlvbnMsIHB1cnN1aW5nIGludmFyaWFibHkgdGhlIHNhbWUgT2JqZWN0LCBldmluY2VzIGEgRGVzaWduIHRvIHJlZHVjZSB0aGVtIHVuZGVyIGFic29sdXRlIERlc3BvdGlzbSwgaXQgaXMgdGhlaXIgUmlnaHQsIGl0IGlzIHRoZWlyIER1dHksIHRvIHRocm93IG9mZiBzdWNoIEdvdmVybm1lbnQsIGFuZCB0byBwcm92aWRlIG5ldyBHdWFyZHMgZm9yIHRoZWlyIGZ1dHVyZSBTZWN1cml0eS5cbiIgKworICAgICAgICAiXG4iOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNQ29uc3RUZXh0IGZnRGVjbGFyYXRpb24gPSBuZXcgU3R5bGVkVGV4dChmZ0RlY2xhcmF0aW9uU3RyLCBBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L0lUZXN0VGV4dFBhbmVsLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L0lUZXN0VGV4dFBhbmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI4MGI5NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvSVRlc3RUZXh0UGFuZWwuamF2YQpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogSVRlc3RUZXh0UGFuZWwuamF2YSx2ICQgJFJldmlzaW9uOiAxLjMgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozOCAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRlc3Q7CisKK2ltcG9ydCBqYXZhLmF3dC5CdXR0b247CitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5hd3QuR3JpZExheW91dDsKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuQ2xpcGJvYXJkOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkxpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuYXd0dWkuVGV4dEZyYW1lOworCitwdWJsaWMgY2xhc3MgSVRlc3RUZXh0UGFuZWwgZXh0ZW5kcyBGcmFtZSBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBmZ09wQ291bnQgPSAwOworCisgICAgcHJpdmF0ZSBUZXN0VGV4dFBhbmVsIGZUZXN0OworICAgIAorICAgIHByaXZhdGUgTVRleHRQYW5lbCBmVGV4dFBhbmVsOworICAgIHByaXZhdGUgRnJhbWUgZlRleHRGcmFtZTsKKyAgICBwcml2YXRlIENsaXBib2FyZCBmQ2xpcGJvYXJkOworICAgIHByaXZhdGUgQnV0dG9uIGZFeGVyc2l6ZSwgZlN0cmVzc1Rlc3QsIGZSZXNpemU7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKyAgICAgICAgRGF0ZSBzdGFydERhdGUgPSBuZXcgRGF0ZSgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbGlwYm9hcmQgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZCgiSVRleHRUZXN0UGFuZWwiKTsKKyAgICAgICAgICAgIFRleHRGcmFtZSBmcmFtZSA9IG5ldyBUZXh0RnJhbWUobnVsbCwgIkludGVyYWN0aXZlIFRlc3QiLCBjbGlwYm9hcmQpOworICAgICAgICAgICAgTVRleHRQYW5lbCBwYW5lbCA9IGZyYW1lLmdldFRleHRQYW5lbCgpOworCisgICAgICAgICAgICBuZXcgSVRlc3RUZXh0UGFuZWwocGFuZWwsIGZyYW1lLCBjbGlwYm9hcmQpLnNob3coKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIERhdGVGb3JtYXQgZGYgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnQgdGltZTogIiArIGRmLmZvcm1hdChzdGFydERhdGUpKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW5kIFRpbWU6ICIgKyBkZi5mb3JtYXQobmV3IERhdGUoKSkpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPcCBjb3VudDogIiArIGZnT3BDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgSVRlc3RUZXh0UGFuZWwoTVRleHRQYW5lbCBwYW5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCBjbGlwYm9hcmQpIHsKKworICAgICAgICBmVGV4dFBhbmVsID0gcGFuZWw7CisgICAgICAgIGZUZXN0ID0gbmV3IFRlc3RUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgICAgIGZDbGlwYm9hcmQgPSBjbGlwYm9hcmQ7CisKKyAgICAgICAgc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDAsIDEpKTsKKworICAgICAgICBmVGV4dEZyYW1lID0gZnJhbWU7CisgICAgICAgIGZUZXh0RnJhbWUuc2V0U2l6ZSgzNTAsIDUwMCk7CisgICAgICAgIGZUZXh0RnJhbWUuc2hvdygpOworCisgICAgICAgIC8vIGluaXRpYWxpemUgVUk6CisgICAgICAgIGZFeGVyc2l6ZSA9IG5ldyBCdXR0b24oIkV4ZXJjaXNlIik7CisgICAgICAgIGZFeGVyc2l6ZS5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgYWRkKGZFeGVyc2l6ZSk7CisKKyAgICAgICAgZlN0cmVzc1Rlc3QgPSBuZXcgQnV0dG9uKCJTdHJlc3MgVGVzdCIpOworICAgICAgICBmU3RyZXNzVGVzdC5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgYWRkKGZTdHJlc3NUZXN0KTsKKworICAgICAgICBwYWNrKCk7CisKKyAgICAgICAgYWRkV2luZG93TGlzdGVuZXIobmV3IFdpbmRvd0FkYXB0ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aW5kb3dBY3RpdmF0ZWQoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIC8vYWN0aXZhdGVUZXh0RnJhbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBzZXRTaXplKDI4MCwgMTUwKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWN0aXZhdGVUZXh0RnJhbWUoKSB7CisKKyAgICAgICAgZlRleHRGcmFtZS50b0Zyb250KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2ZW50KSB7CisKKyAgICAgICAgT2JqZWN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpOworICAgICAgICBhY3RpdmF0ZVRleHRGcmFtZSgpOworICAgICAgICBEYXRlIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgICAgIGJvb2xlYW4gZXhpdGVkTm9ybWFsbHkgPSBmYWxzZTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBmRXhlcnNpemUpIHsKKyAgICAgICAgICAgICAgICBmVGVzdC5pbmNSYW5kU2VlZCgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9wZXJhdGlvbihmVGV4dEZyYW1lLCBmQ2xpcGJvYXJkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gZlN0cmVzc1Rlc3QpIHsKKyAgICAgICAgICAgICAgICBmVGVzdC5pbmNSYW5kU2VlZCgpOworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9wZXJhdGlvbihmVGV4dEZyYW1lLCBmQ2xpcGJvYXJkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleGl0ZWROb3JtYWxseSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICBpZiAoIWV4aXRlZE5vcm1hbGx5KSB7CisgICAgICAgICAgICAgICAgRGF0ZUZvcm1hdCBkZiA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSgpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnQgdGltZTogIiArIGRmLmZvcm1hdChzdGFydERhdGUpKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVuZCBUaW1lOiAiICsgZGYuZm9ybWF0KG5ldyBEYXRlKCkpKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJhbmQgc2VlZDogIiArIGZUZXN0LmdldFJhbmRTZWVkKCkpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3AgY291bnQ6ICIgKyBmZ09wQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBhIHJhbmRvbSBvcGVyYXRpb24gb24gdGhlIE1UZXh0UGFuZWwuICBGcmFtZSBjYW4KKyAgICAgKiBiZSBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPUF9DT1VOVCA9IDE1OworCisgICAgcHVibGljIHZvaWQgc2VsZWN0T3BlcmF0aW9uKEZyYW1lIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmQgZkNsaXBib2FyZCkgeworCisgICAgICAgIGludCBvcCA9IGZUZXN0LnJhbmRJbnQoT1BfQ09VTlQpOworCisgICAgICAgIHN3aXRjaCAob3ApIHsKKworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGZUZXN0Ll90ZXN0U2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBmVGVzdC5fdGVzdE1vZGlmaWNhdGlvbnMoZlRlc3QuTU9EX1RFWFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBmVGVzdC5fdGVzdEVkaXRNZW51T3BlcmF0aW9ucyhmQ2xpcGJvYXJkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIGZUZXN0Ll90ZXN0TW9kRmxhZyhmVGV4dFBhbmVsLmdldENvbW1hbmRMb2dTaXplKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgZlRlc3QuYXBwbHlDaGFyYWN0ZXJTdHlsZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgZlRlc3QuYXBwbHlQYXJhZ3JhcGhTdHlsZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAgICAgZlRlc3QudHlwZUtleXMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgICAgICBmVGVzdC5zZWxlY3RUZXh0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICAgICAgZlRlc3QudW5kb1JlZG8oKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICAvL2lmIChmcmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gICAgZlRlc3QucmVzaXplRnJhbWUoZnJhbWUpOworICAgICAgICAgICAgICAgIC8vICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8vfQorCisgICAgICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAgICAgIGZUZXN0LmFwcGx5S2V5UmVtYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgICAgICBmVGVzdC5fdGVzdENvbW1hbmRMb2dDb250cm9sKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPUF9DT1VOVCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgfQorICAgICAgICBmZ09wQ291bnQrKzsKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC9UZXN0VGV4dFBhbmVsLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L1Rlc3RUZXh0UGFuZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yN2MyNmY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC9UZXN0VGV4dFBhbmVsLmphdmEKQEAgLTAsMCArMSw4NDYgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRlc3RUZXh0UGFuZWwuamF2YSx2ICQgJFJldmlzaW9uOiAxLjggJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjozOCAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworaW1wb3J0IGphdmEuYXd0LkNvbG9yOworaW1wb3J0IGphdmEuYXd0LkZyYW1lOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LktleUV2ZW50OworCitpbXBvcnQgamF2YS5hd3QuZGF0YXRyYW5zZmVyLkNsaXBib2FyZDsKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuQ2xpcGJvYXJkT3duZXI7CitpbXBvcnQgamF2YS5hd3QuZGF0YXRyYW5zZmVyLlN0cmluZ1NlbGVjdGlvbjsKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuVHJhbnNmZXJhYmxlOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuS2V5UmVtYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuS2V5RXZlbnRGb3J3YXJkZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuTVRleHRQYW5lbDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsRXZlbnQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsTGlzdGVuZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVkVGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5UZXh0QXR0cmlidXRlOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZU1vZGlmaWVyOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5UZXh0QXR0cmlidXRlOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKKworLy8gTm90ZTogIHRoaXMgdXNlZCB0byBiZSBhIFRlc3RGbXdrIHRlc3QuICBJZiB5b3UgYWRkCisvLyBtb3JlIHRlc3RzIHRvIGl0LCBiZSBzdXJlIHRvIGFkZCB0aGVtIHRvIAorLy8gY29tLmlibS5yaWNodGV4dC50ZXN0LnVuaXQuRm13a1Rlc3RUZXh0UGFuZWwudGVzdCgpIC0KKy8vIG90aGVyd2lzZSB0aGV5IHdvbid0IGdldCBydW4hCisKK3B1YmxpYyBjbGFzcyBUZXN0VGV4dFBhbmVsIC8qZXh0ZW5kcyBUZXN0Rm13ayovIHsKKworICAgIHByaXZhdGUgZmluYWwgY2xhc3MgVGVzdExpc3RlbmVyIGltcGxlbWVudHMgVGV4dFBhbmVsTGlzdGVuZXIgeworICAgICAgICAKKyAgICAgICAgcHJpdmF0ZSBpbnQgTk9fV0FZID0gMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgREVGSU5JVEVMWSA9IDE7CisgICAgICAgIHByaXZhdGUgaW50IE1BWUJFID0gMjsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgZmluYWwgaW50W10gc3RhdHVzOworICAgICAgICAKKyAgICAgICAgVGVzdExpc3RlbmVyKE1UZXh0UGFuZWwgdGV4dFBhbmVsKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBsZW5ndGggPSBUZXh0UGFuZWxFdmVudC5URVhUX1BBTkVMX0xBU1QgLQorICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRQYW5lbEV2ZW50LlRFWFRfUEFORUxfRklSU1QgKyAxOworICAgICAgICAgICAgc3RhdHVzID0gbmV3IGludFtsZW5ndGhdOworICAgICAgICAgICAgdGV4dFBhbmVsLmFkZExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgYWxsb3dBbGwoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCByZWZ1c2VBbGwoKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHN0YXR1cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHN0YXR1c1tpXSA9IE5PX1dBWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhbGxvd0FsbCgpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgc3RhdHVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzW2ldID0gTUFZQkU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZXhwZWN0RXZlbnQoaW50IHR5cGUpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGluZGV4ID0gdHlwZSAtIFRleHRQYW5lbEV2ZW50LlRFWFRfUEFORUxfRklSU1Q7CisgICAgICAgICAgICBzdGF0dXNbaW5kZXhdID0gREVGSU5JVEVMWTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhbGxvd0V2ZW50KGludCB0eXBlKSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSB0eXBlIC0gVGV4dFBhbmVsRXZlbnQuVEVYVF9QQU5FTF9GSVJTVDsKKyAgICAgICAgICAgIHN0YXR1c1tpbmRleF0gPSBNQVlCRTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhc3NlcnROb3RFeHBlY3RpbmdFdmVudHMoKSB7CisgICAgICAgICAgICBhc3NlcnROb3RFeHBlY3RpbmdFdmVudHMoZmFsc2UsIDAsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhc3NlcnROb3RFeHBlY3RpbmdFdmVudHMoaW50IGl0ZXJhdGlvbkNvdW50LCBib29sZWFuIGV4cCkgeworICAgICAgICAgICAgYXNzZXJ0Tm90RXhwZWN0aW5nRXZlbnRzKHRydWUsIGl0ZXJhdGlvbkNvdW50LCBleHApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcml2YXRlIHZvaWQgYXNzZXJ0Tm90RXhwZWN0aW5nRXZlbnRzKGJvb2xlYW4gbG9nRGV0YWlscywgaW50IGl0ZXJhdGlvbkNvdW50LCBib29sZWFuIGV4cCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBib29sZWFuIGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHN0YXR1cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbaV0gPT0gREVGSU5JVEVMWSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobG9nRGV0YWlscykgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nTWVzc2FnZSgiRXhwZWN0aW5nIGV2ZW50ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpK1RleHRQYW5lbEV2ZW50LlRFWFRfUEFORUxfRklSU1QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UoIml0ZXJhdGlvbkNvdW50PSIraXRlcmF0aW9uQ291bnQrIjsgIGV4cGV4dGluZz0iK2V4cCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigiU29tZSBldmVudHMgcGVuZGluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgdm9pZCB0ZXh0RXZlbnRPY2N1cnJlZChUZXh0UGFuZWxFdmVudCBldmVudCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgaW5kZXggPSBldmVudC5nZXRJRCgpIC0gVGV4dFBhbmVsRXZlbnQuVEVYVF9QQU5FTF9GSVJTVDsKKyAgICAgICAgICAgIGlmIChzdGF0dXNbaW5kZXhdID09IE5PX1dBWSkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJVbmV4cGVjdGVkIGV2ZW50OiAiICsgZXZlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzW2luZGV4XSA9PSBERUZJTklURUxZKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzW2luZGV4XSA9IE5PX1dBWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcmVzcG9uZHNUb0V2ZW50VHlwZShpbnQgdHlwZSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX0NPTlRFTlQgPSAiU29tZSBjb250ZW50IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVF9JVEVSUyA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNQ29uc3RUZXh0IE1PRF9URVhUID0KKyAgICAgICAgICAgICAgICBuZXcgU3R5bGVkVGV4dCgiU3R5bGVkIiwgQXR0cmlidXRlTWFwLkVNUFRZX0FUVFJJQlVURV9NQVApOworCisgICAgcHJpdmF0ZSBDbGlwYm9hcmQgZkNsaXBib2FyZDsKKyAgICBwcml2YXRlIE1UZXh0UGFuZWwgZlRleHRQYW5lbCA9IG51bGw7CisgICAgcHJpdmF0ZSBUZXN0TGlzdGVuZXIgZkxpc3RlbmVyID0gbnVsbDsKKyAgICBwcml2YXRlIGludCBmUmFuZFNlZWQgPSAwOworICAgIHByaXZhdGUgUmFuZG9tIHJhbmQ7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJR19DT01NQU5EX0xPR19TSVpFID0gNDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNNQUxMX0NPTU1BTkRfTE9HX1NJWkUgPSA4OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3R5bGVNb2RpZmllcltdIHBhcmFNb2RzID0geworICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKAorICAgICAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGVNYXAoVGV4dEF0dHJpYnV0ZS5MSU5FX0ZMVVNILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5GTFVTSF9MRUFESU5HKSksCisgICAgICAgIFN0eWxlTW9kaWZpZXIuY3JlYXRlQWRkTW9kaWZpZXIoVGV4dEF0dHJpYnV0ZS5MSU5FX0ZMVVNILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5GTFVTSF9DRU5URVIpLAorICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKFRleHRBdHRyaWJ1dGUuTElORV9GTFVTSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuRkxVU0hfVFJBSUxJTkcpLAorICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKFRleHRBdHRyaWJ1dGUuTElORV9GTFVTSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuRlVMTFlfSlVTVElGSUVEKSwKKyAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVBZGRNb2RpZmllcihUZXh0QXR0cmlidXRlLlJVTl9ESVJFQ1RJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0QXR0cmlidXRlLlJVTl9ESVJFQ1RJT05fUlRMKSwKKyAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVBZGRNb2RpZmllcihUZXh0QXR0cmlidXRlLlJVTl9ESVJFQ1RJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0QXR0cmlidXRlLlJVTl9ESVJFQ1RJT05fTFRSKSwKKyAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVSZW1vdmVNb2RpZmllcigKKyAgICAgICAgICAgICAgICBuZXcgQXR0cmlidXRlU2V0KFRleHRBdHRyaWJ1dGUuTElORV9GTFVTSCkpLAorICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZVJlbW92ZU1vZGlmaWVyKAorICAgICAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGVTZXQoVGV4dEF0dHJpYnV0ZS5SVU5fRElSRUNUSU9OKSkKKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFTEVDVCA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFVF9DQVJFVF9QT1MgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRVRfU1RBUlQgPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRVRfRU5EID0gMzsKKworICAgIC8vIHVzaW5nIGJvdGggc3R5bGVzIG9mIGFkZCBtb2RpZmllcjogQXR0cmlidXRlTWFwIGFuZAorICAgIC8vIGtleS12YWx1ZSwganVzdCBmb3IgdmFyaWV0eS4uLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0eWxlTW9kaWZpZXJbXSBjaGFyTW9kcyA9IHsKKyAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVBZGRNb2RpZmllcigKKyAgICAgICAgICAgICAgICBuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuV0VJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5XRUlHSFRfQk9MRCkpLAorICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKFRleHRBdHRyaWJ1dGUuRk9SRUdST1VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yLmdyZWVuKSwKKyAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVBZGRNb2RpZmllcigKKyAgICAgICAgICAgICAgICBuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkVfT04pLmFkZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZU1hcChUZXh0QXR0cmlidXRlLlNJWkUsIG5ldyBGbG9hdCg2KSkpKSwKKyAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVSZXBsYWNlTW9kaWZpZXIoCisgICAgICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZU1hcChUZXh0QXR0cmlidXRlLkZBTUlMWSwgIkRpYWxvZyIpKSwKKyAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVSZW1vdmVNb2RpZmllcigKKyAgICAgICAgICAgICAgICBuZXcgQXR0cmlidXRlU2V0KAorICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IFRleHRBdHRyaWJ1dGUuV0VJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5QT1NUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0QXR0cmlidXRlLlNUUklLRVRIUk9VR0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0QXR0cmlidXRlLlNVUEVSU0NSSVBUIH0pKSwKKyAgICAgICAgU3R5bGVNb2RpZmllci5JREVOVElUWQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gVFlQRURfQ0hBUlMgPSBuZXcgY2hhclsxMjggLSAnICcgKyAzXTsKKyAgICBzdGF0aWMgeworICAgICAgICBUWVBFRF9DSEFSU1swXSA9IDg7IC8vIGJhY2tzcGFjZQorICAgICAgICBUWVBFRF9DSEFSU1sxXSA9ICdcdCc7CisgICAgICAgIFRZUEVEX0NIQVJTWzJdID0gJ1xuJzsKKyAgICAgICAgZm9yIChpbnQgaT0zOyBpIDwgVFlQRURfQ0hBUlMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFRZUEVEX0NIQVJTW2ldID0gKGNoYXIpICgnICcgKyBpIC0gMyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgVGVzdFRleHRQYW5lbCgpIHsKKworICAgICAgICBmQ2xpcGJvYXJkID0gbmV3IENsaXBib2FyZCgiVGVzdFRleHRQYW5lbCIpOworICAgICAgICBpbmNSYW5kU2VlZCgpOworICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIHJlcG9ydEVycm9yKFN0cmluZyBtZXNzYWdlKSB7CisgICAgCisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24obWVzc2FnZSk7CisgICAgICAgIC8vc3VwZXIuZXJybG4obWVzc2FnZSk7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIGxvZ01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOworICAgICAgICAvL3N1cGVyLmxvZ01lc3NhZ2UobWVzc2FnZSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBUZXN0VGV4dFBhbmVsKE1UZXh0UGFuZWwgcGFuZWwpIHsKKyAgICAgICAgCisgICAgICAgIHRoaXMoKTsKKyAgICAgICAgc2V0VGV4dFBhbmVsKHBhbmVsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbmNSYW5kU2VlZCgpIHsKKyAgICAgICAgCisgICAgICAgIHJhbmQgPSBuZXcgUmFuZG9tKCsrZlJhbmRTZWVkKTsKKyAgICB9CisgICAgCisgICAgaW50IGdldFJhbmRTZWVkKCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZSYW5kU2VlZDsKKyAgICB9CisKKyAgICBpbnQgcmFuZEludChpbnQgbGltaXQpIHsKKworICAgICAgICByZXR1cm4gcmFuZEludCgwLCBsaW1pdCk7CisgICAgfQorCisgICAgaW50IHJhbmRJbnQoaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKKworICAgICAgICBpZiAoc3RhcnQgPiBsaW1pdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUmFuZ2UgaXMgMC1sZW5ndGguIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gbGltaXQpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGFydCArIChNYXRoLmFicyhyYW5kLm5leHRJbnQoKSklKGxpbWl0LXN0YXJ0KSkgOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisKKyAgICAgICAgQXR0cmlidXRlTWFwIGJvbGQgPSBuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuV0VJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5XRUlHSFRfQk9MRCk7CisgICAgICAgIE1Db25zdFRleHQgdGV4dDEgPSBuZXcgU3R5bGVkVGV4dCgiVGVzdCBjb250ZW50cy4gMTIzNFxuSG93IGFib3V0IGl0PyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwLkVNUFRZX0FUVFJJQlVURV9NQVApOworICAgICAgICBNQ29uc3RUZXh0IHRleHQyID0gbmV3IFN0eWxlZFRleHQoIkFub3RoZXIgdGVzdCBzdHJpbmcuIiwgYm9sZCk7CisKKyAgICAgICAgX3Rlc3RXaXRoVGV4dCh0ZXh0MSk7CisgICAgICAgIF90ZXN0V2l0aFRleHQodGV4dDIpOworICAgICAgICBfdGVzdFdpdGhUZXh0KG5ldyBTdHlsZWRUZXh0KCkpOworCisgICAgICAgIFN0eWxlZFRleHQgYmlnMSA9IG5ldyBTdHlsZWRUZXh0KCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IDUwOyBpKyspIHsKKyAgICAgICAgICAgIGJpZzEuYXBwZW5kKHRleHQxKTsKKyAgICAgICAgfQorCisgICAgICAgIF90ZXN0V2l0aFRleHQoYmlnMSk7CisgICAgICAgIFN0eWxlZFRleHQgYmlnMiA9IG5ldyBTdHlsZWRUZXh0KHRleHQxKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgODA7IGkrKykgeworICAgICAgICAgICAgYmlnMi5hcHBlbmQodGV4dDIpOworICAgICAgICB9CisKKyAgICAgICAgX3Rlc3RXaXRoVGV4dChiaWcyKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHNldFRleHRQYW5lbChNVGV4dFBhbmVsIHBhbmVsKSB7CisgICAgICAgIAorICAgICAgICBmVGV4dFBhbmVsID0gcGFuZWw7CisgICAgICAgIGZMaXN0ZW5lciA9IG5ldyBUZXN0TGlzdGVuZXIocGFuZWwpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgX3Rlc3RXaXRoVGV4dChNQ29uc3RUZXh0IHRleHQpIHsKKworICAgICAgICBzZXRUZXh0UGFuZWwobmV3IFRleHRQYW5lbCh0ZXh0LCBmQ2xpcGJvYXJkKSk7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgVEVTVF9JVEVSUzsgaSsrKSB7CisgICAgICAgICAgICBfdGVzdFNldFNlbGVjdGlvbigpOworICAgICAgICAgICAgX3Rlc3RNb2RpZmljYXRpb25zKE1PRF9URVhULCB0cnVlKTsKKyAgICAgICAgICAgIF90ZXN0RWRpdE1lbnVPcGVyYXRpb25zKGZDbGlwYm9hcmQpOworICAgICAgICAgICAgX3Rlc3RNb2RGbGFnKGZUZXh0UGFuZWwuZ2V0Q29tbWFuZExvZ1NpemUoKSk7CisgICAgICAgICAgICBfdGVzdENvbW1hbmRMb2dDb250cm9sKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgX3Rlc3RTZWxlY3Rpb24oaW50IGZ1bmN0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgYVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBhTGltaXQpIHsKKworICAgICAgICBpbnQgb2xkU3RhcnQgPSBmVGV4dFBhbmVsLmdldFNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAgIGludCBvbGRMaW1pdCA9IGZUZXh0UGFuZWwuZ2V0U2VsZWN0aW9uRW5kKCk7CisKKyAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IGZUZXh0UGFuZWwuZ2V0VGV4dExlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgaW50IHN0YXJ0ID0gYVN0YXJ0OworICAgICAgICBpbnQgbGltaXQgPSBhTGltaXQ7CisgICAgICAgIAorICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhcnQgPiBsZW5ndGgpIHsKKyAgICAgICAgICAgIHN0YXJ0ID0gbGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbWl0IDwgc3RhcnQpIHsKKyAgICAgICAgICAgIGxpbWl0ID0gc3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGltaXQgPiBsZW5ndGgpIHsKKyAgICAgICAgICAgIGxpbWl0ID0gbGVuZ3RoOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmTGlzdGVuZXIucmVmdXNlQWxsKCk7CisgICAgICAgIAorICAgICAgICBpZiAob2xkU3RhcnQgIT0gc3RhcnQgfHwgb2xkTGltaXQgIT0gbGltaXQpIHsKKyAgICAgICAgICAgIGZMaXN0ZW5lci5leHBlY3RFdmVudChUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fUkFOR0VfQ0hBTkdFRCk7CisgICAgICAgICAgICBmTGlzdGVuZXIuYWxsb3dFdmVudChUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fU1RZTEVTX0NIQU5HRUQpOworICAgICAgICB9CisgICAgICAgIGlmICgob2xkU3RhcnQ9PW9sZExpbWl0KSAhPSAoc3RhcnQ9PWxpbWl0KSkgeworICAgICAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9FTVBUWV9DSEFOR0VEKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2xkU3RhcnQ9PW9sZExpbWl0KSB7CisgICAgICAgICAgICBmTGlzdGVuZXIuYWxsb3dFdmVudChUZXh0UGFuZWxFdmVudC5VTkRPX1NUQVRFX0NIQU5HRUQpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKGZ1bmN0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFNFTEVDVDoKKyAgICAgICAgICAgICAgICBmVGV4dFBhbmVsLnNlbGVjdChhU3RhcnQsIGFMaW1pdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNFVF9DQVJFVF9QT1M6CisgICAgICAgICAgICAgICAgZlRleHRQYW5lbC5zZXRDYXJldFBvc2l0aW9uKGFTdGFydCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNFVF9TVEFSVDoKKyAgICAgICAgICAgICAgICBmVGV4dFBhbmVsLnNldFNlbGVjdGlvblN0YXJ0KGFTdGFydCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNFVF9FTkQ6CisgICAgICAgICAgICAgICAgZlRleHRQYW5lbC5zZXRTZWxlY3Rpb25FbmQoYUxpbWl0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBmdW5jdGlvbiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZlRleHRQYW5lbC5nZXRTZWxlY3Rpb25TdGFydCgpICE9IHN0YXJ0KSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcigiZ2V0U2VsZWN0aW9uU3RhcnQgaXMgaW5jb3JyZWN0IGFmdGVyIHNldCIpOworICAgICAgICB9CisgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFNlbGVjdGlvbkVuZCgpICE9IGxpbWl0KSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcigiZ2V0U2VsZWN0aW9uRW5kIGlzIGluY29ycmVjdCBhZnRlciBzZXQiKTsKKyAgICAgICAgfQorICAgICAgICBmTGlzdGVuZXIuYXNzZXJ0Tm90RXhwZWN0aW5nRXZlbnRzKCk7CisgICAgICAgIGZMaXN0ZW5lci5hbGxvd0FsbCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRBbmRUZXN0U2VsZWN0aW9uKGludCBzdGFydCwgaW50IGxpbWl0KSB7CisgICAgICAgIAorICAgICAgICBfdGVzdFNlbGVjdGlvbihTRUxFQ1QsIHN0YXJ0LCBsaW1pdCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldEFuZFRlc3RDYXJldChpbnQgY2FyZXRQb3MpIHsKKworICAgICAgICBfdGVzdFNlbGVjdGlvbihTRVRfQ0FSRVRfUE9TLCBjYXJldFBvcywgY2FyZXRQb3MpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRBbmRUZXN0U2VsZWN0aW9uU3RhcnQoaW50IHNlbFN0YXJ0KSB7CisKKyAgICAgICAgaW50IGxpbWl0ID0gZlRleHRQYW5lbC5nZXRTZWxlY3Rpb25FbmQoKTsKKyAgICAgICAgX3Rlc3RTZWxlY3Rpb24oU0VUX1NUQVJULCBzZWxTdGFydCwgbGltaXQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRBbmRUZXN0U2VsZWN0aW9uRW5kKGludCBzZWxFbmQpIHsKKworICAgICAgICBpbnQgc3RhcnQgPSBmVGV4dFBhbmVsLmdldFNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAgIF90ZXN0U2VsZWN0aW9uKFNFVF9FTkQsIHN0YXJ0LCBzZWxFbmQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIF90ZXN0U2V0U2VsZWN0aW9uKCkgeworCisgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gZlRleHRQYW5lbC5nZXRUZXh0TGVuZ3RoKCk7CisgICAgICAgIGlmICh0ZXh0TGVuZ3RoICE9IGZUZXh0UGFuZWwuZ2V0VGV4dCgpLmxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcigiVGV4dCBwYW5lbCBsZW5ndGggaXMgbm90IGNvcnJlY3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEFuZFRlc3RTZWxlY3Rpb24oMCwgdGV4dExlbmd0aCAvIDIpOworICAgICAgICBzZXRBbmRUZXN0U2VsZWN0aW9uKHRleHRMZW5ndGggLyAyLCB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgc2V0QW5kVGVzdFNlbGVjdGlvbigwLCB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgc2V0QW5kVGVzdFNlbGVjdGlvbigtMSwgdGV4dExlbmd0aCsxKTsKKyAgICAgICAgaWYgKHRleHRMZW5ndGggPiAwKSB7CisgICAgICAgICAgICBzZXRBbmRUZXN0U2VsZWN0aW9uKDAsIHRleHRMZW5ndGggLSAxKTsKKyAgICAgICAgICAgIHNldEFuZFRlc3RTZWxlY3Rpb24oMCwgMSk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgaW5jQW1vdW50ID0gTWF0aC5tYXgoMSwgdGV4dExlbmd0aC81KTsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8PSB0ZXh0TGVuZ3RoOyBpbmRleCArPSBpbmNBbW91bnQpIHsKKworICAgICAgICAgICAgc2V0QW5kVGVzdENhcmV0KGluZGV4KTsKKyAgICAgICAgICAgIHNldEFuZFRlc3RTZWxlY3Rpb25TdGFydCh0ZXh0TGVuZ3RoLWluZGV4KTsKKyAgICAgICAgICAgIHNldEFuZFRlc3RTZWxlY3Rpb25FbmQodGV4dExlbmd0aCk7CisgICAgICAgICAgICBzZXRBbmRUZXN0U2VsZWN0aW9uU3RhcnQoMCk7CisgICAgICAgICAgICBzZXRBbmRUZXN0U2VsZWN0aW9uRW5kKHRleHRMZW5ndGgtaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGV4dCBtdXN0IGJlIGVkaXRhYmxlIHRvIHBhc3MgdGhpcyB0ZXN0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIF90ZXN0TW9kaWZpY2F0aW9ucyhNQ29uc3RUZXh0IGluc2VydGlvblRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVzdG9yZU9sZFRleHQpIHsKKworICAgICAgICBNQ29uc3RUZXh0IG9sZFRleHQgPSBuZXcgU3R5bGVkVGV4dChmVGV4dFBhbmVsLmdldFRleHQoKSk7CisgICAgICAgIGZpbmFsIGludCBpbnNMZW5ndGggPSBpbnNlcnRpb25UZXh0Lmxlbmd0aCgpOworCisgICAgICAgIGZMaXN0ZW5lci5hbGxvd0FsbCgpOworICAgICAgICBmTGlzdGVuZXIuZXhwZWN0RXZlbnQoVGV4dFBhbmVsRXZlbnQuVEVYVF9DSEFOR0VEKTsKKyAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9SQU5HRV9DSEFOR0VEKTsKKyAgICAgICAgZlRleHRQYW5lbC5hcHBlbmQoaW5zZXJ0aW9uVGV4dCk7CisgICAgICAgIGZMaXN0ZW5lci5hc3NlcnROb3RFeHBlY3RpbmdFdmVudHMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFNlbGVjdGlvblN0YXJ0KCkgIT0gb2xkVGV4dC5sZW5ndGgoKSArIGluc0xlbmd0aCkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoIkFwcGVuZCBkaWRuJ3QgcmVzdWx0IGluIGNvcnJlY3Qgc2VsZWN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICBmTGlzdGVuZXIuZXhwZWN0RXZlbnQoVGV4dFBhbmVsRXZlbnQuVEVYVF9DSEFOR0VEKTsKKyAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9SQU5HRV9DSEFOR0VEKTsKKyAgICAgICAgZlRleHRQYW5lbC5pbnNlcnQoaW5zZXJ0aW9uVGV4dCwgMCk7CisgICAgICAgIGZMaXN0ZW5lci5hc3NlcnROb3RFeHBlY3RpbmdFdmVudHMoKTsKKyAgICAgICAgZkxpc3RlbmVyLmFsbG93QWxsKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZlRleHRQYW5lbC5nZXRTZWxlY3Rpb25TdGFydCgpICE9IGluc0xlbmd0aCkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoIkluc2VydCBkaWRuJ3QgcmVzdWx0IGluIGNvcnJlY3Qgc2VsZWN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICBmVGV4dFBhbmVsLnJlcGxhY2VSYW5nZShpbnNlcnRpb25UZXh0LCBpbnNMZW5ndGgsIGluc0xlbmd0aCtvbGRUZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGZUZXh0UGFuZWwuZ2V0U2VsZWN0aW9uU3RhcnQoKSAhPSBpbnNMZW5ndGgqMikgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlJlcGxhY2UgZGlkbid0IHJlc3VsdCBpbiBjb3JyZWN0IHNlbGVjdGlvbiIpOworICAgICAgICB9CisgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFNlbGVjdGlvbkVuZCgpICE9IGluc0xlbmd0aCoyKSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcigiUmVwbGFjZSBkaWRuJ3QgcmVzdWx0IGluIGNvcnJlY3Qgc2VsZWN0aW9uIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZUZXh0UGFuZWwuZ2V0VGV4dExlbmd0aCgpICE9IGluc0xlbmd0aCozKSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcigidGV4dExlbmd0aCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN0b3JlT2xkVGV4dCkgeworICAgICAgICAgICAgZlRleHRQYW5lbC5zZXRUZXh0KG9sZFRleHQpOworICAgICAgICAgICAgaWYgKGZUZXh0UGFuZWwuZ2V0U2VsZWN0aW9uU3RhcnQoKSAhPSBvbGRUZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoInNldFRleHQgZGlkbid0IHJlc3VsdCBpbiBjb3JyZWN0IHNlbGVjdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZUZXh0UGFuZWwuZ2V0VGV4dExlbmd0aCgpICE9IG9sZFRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigibGVuZ3RoIGluY29ycmVjdCBhZnRlciBzZXRUZXh0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZMaXN0ZW5lci5hbGxvd0FsbCgpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGludCBpdGVyYXRpb25Db3VudCA9IDA7CisgICAgcHVibGljIHZvaWQgX3Rlc3RDb21tYW5kTG9nQ29udHJvbCgpIHsKKworICAgICAgICBmTGlzdGVuZXIucmVmdXNlQWxsKCk7CisgICAgICAgIGl0ZXJhdGlvbkNvdW50Kys7CisgICAgICAgIGJvb2xlYW4gZXhwID0gZmFsc2U7CisgICAgICAgIGlmIChmVGV4dFBhbmVsLmNhblJlZG8oKSB8fCBCSUdfQ09NTUFORF9MT0dfU0laRT09MCkgeworICAgICAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlVORE9fU1RBVEVfQ0hBTkdFRCk7CisgICAgICAgICAgICBleHAgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vdHJ5IHsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwuc2V0Q29tbWFuZExvZ1NpemUoQklHX0NPTU1BTkRfTE9HX1NJWkUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZlRleHRQYW5lbC5jYW5SZWRvKCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigiY2FuUmVkbyBhZnRlciBzZXRDb21tYW5kTG9nU2l6ZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZkxpc3RlbmVyLmFzc2VydE5vdEV4cGVjdGluZ0V2ZW50cyhpdGVyYXRpb25Db3VudCwgZXhwKTsKKyAgICAgICAgLy99CisgICAgICAgIC8vY2F0Y2goRXJyb3IgZSkgeworICAgICAgICAvLyAgICBsb2dNZXNzYWdlKCJpdGVyYXRpb25Db3VudD0iK2l0ZXJhdGlvbkNvdW50KyI7ICBleHBleHRpbmc9IitleHApOworICAgICAgICAvLyAgICB0aHJvdyBlOworICAgICAgICAvL30KKworICAgICAgICBNQ29uc3RUZXh0IGluc1RleHQgPSBuZXcgU3R5bGVkVGV4dCgiNyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQKTsKKworICAgICAgICBmaW5hbCBpbnQgb3JpZ0xlbmd0aCA9IGZUZXh0UGFuZWwuZ2V0VGV4dExlbmd0aCgpOworICAgICAgICBpbnQgc3RhcnQgPSBvcmlnTGVuZ3RoIC8gMzsKKyAgICAgICAgCisgICAgICAgIGZMaXN0ZW5lci5hbGxvd0V2ZW50KFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9SQU5HRV9DSEFOR0VEKTsKKyAgICAgICAgZkxpc3RlbmVyLmFsbG93RXZlbnQoVGV4dFBhbmVsRXZlbnQuU0VMRUNUSU9OX1NUWUxFU19DSEFOR0VEKTsKKworICAgICAgICBmb3IgKGludCBpPXN0YXJ0OyBpIDwgQklHX0NPTU1BTkRfTE9HX1NJWkUrc3RhcnQ7IGkrKykgeworICAgICAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlVORE9fU1RBVEVfQ0hBTkdFRCk7CisgICAgICAgICAgICBmTGlzdGVuZXIuZXhwZWN0RXZlbnQoVGV4dFBhbmVsRXZlbnQuVEVYVF9DSEFOR0VEKTsKKyAgICAgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFNlbGVjdGlvblN0YXJ0KCkgIT0gZlRleHRQYW5lbC5nZXRTZWxlY3Rpb25FbmQoKSkgeworICAgICAgICAgICAgICAgIGZMaXN0ZW5lci5leHBlY3RFdmVudChUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fRU1QVFlfQ0hBTkdFRCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmVGV4dFBhbmVsLmluc2VydChpbnNUZXh0LCBpKTsKKyAgICAgICAgICAgIGZMaXN0ZW5lci5hc3NlcnROb3RFeHBlY3RpbmdFdmVudHMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZMaXN0ZW5lci5hbGxvd0V2ZW50KFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9FTVBUWV9DSEFOR0VEKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IEJJR19DT01NQU5EX0xPR19TSVpFLTE7IGkrKykgeworICAgICAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlVORE9fU1RBVEVfQ0hBTkdFRCk7CisgICAgICAgICAgICBmTGlzdGVuZXIuZXhwZWN0RXZlbnQoVGV4dFBhbmVsRXZlbnQuVEVYVF9DSEFOR0VEKTsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwudW5kbygpOworICAgICAgICAgICAgZkxpc3RlbmVyLmFzc2VydE5vdEV4cGVjdGluZ0V2ZW50cygpOworICAgICAgICB9CisgICAgICAgIGlmICghZlRleHRQYW5lbC5jYW5VbmRvKCkpIHsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKCJDb21tYW5kIGxvZyBpcyB0b28gc21hbGwiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZkxpc3RlbmVyLmFsbG93QWxsKCk7CisgICAgICAgIGZUZXh0UGFuZWwudW5kbygpOworICAgICAgICBpZiAoZlRleHRQYW5lbC5jYW5VbmRvKCkpIHsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKCJDb21tYW5kIGxvZyBpcyB0b28gbGFyZ2UiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFRleHRMZW5ndGgoKSAhPSBvcmlnTGVuZ3RoICogaW5zVGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlRleHQgbGVuZ3RoIHdhcyBub3QgcmVzdG9yZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IEJJR19DT01NQU5EX0xPR19TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwucmVkbygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZUZXh0UGFuZWwuZ2V0VGV4dExlbmd0aCgpICE9IG9yaWdMZW5ndGgrQklHX0NPTU1BTkRfTE9HX1NJWkUpIHsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKCJUZXh0IGxlbmd0aCB3YXMgbm90IHJlc3RvcmVkIGFmdGVyIHJlZG8iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmVGV4dFBhbmVsLmNhblJlZG8oKSkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlNob3VsZCBub3QgYmUgYWJsZSB0byByZWRvIik7CisgICAgICAgIH0KKworICAgICAgICBmVGV4dFBhbmVsLnVuZG8oKTsKKworICAgICAgICBmVGV4dFBhbmVsLnNldENvbW1hbmRMb2dTaXplKFNNQUxMX0NPTU1BTkRfTE9HX1NJWkUpOworCisgICAgICAgIGlmIChmVGV4dFBhbmVsLmNhblJlZG8oKSkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoImNhblJlZG8gYWZ0ZXIgc2V0Q29tbWFuZExvZ1NpemUoc21hbGwpIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBTTUFMTF9DT01NQU5EX0xPR19TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghZlRleHRQYW5lbC5jYW5VbmRvKCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigic2hvdWxkIGJlIGFibGUgdG8gdW5kbyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZlRleHRQYW5lbC51bmRvKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZUZXh0UGFuZWwuY2FuVW5kbygpKSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcigic2hvdWxkIG5vdCBiZSBhYmxlIHRvIHVuZG8gYWZ0ZXIgc2V0Q29tbWFuZExvZ1NpemUoc21hbGwpIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmVGV4dFBhbmVsLmNhblJlZG8oKSkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoIndoeSBjYW4ndCB0aGlzIHJlZG8/Pz8iKTsKKyAgICAgICAgfQorICAgICAgICBmVGV4dFBhbmVsLnJlZG8oKTsKKworICAgICAgICBmVGV4dFBhbmVsLmNsZWFyQ29tbWFuZExvZygpOworCisgICAgICAgIGlmIChmVGV4dFBhbmVsLmNhblVuZG8oKSB8fCBmVGV4dFBhbmVsLmNhblJlZG8oKSkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoIkNvbW1hbmQgbG9nIHdhc24ndCBjbGVhcmVkIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IGN1dCwgY29weSwgcGFzdGUsIHVuZG8sIHJlZG8sIGNsZWFyLCBjYW5VbmRvLCBjYW5SZWRvLgorICAgICAqIFRleHQgbXVzdCBiZSBlZGl0YWJsZSB0byBwYXNzIHRoaXMgdGVzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBfdGVzdEVkaXRNZW51T3BlcmF0aW9ucyhDbGlwYm9hcmQgY2xpcGJvYXJkKSB7CisgICAgICAgIAorICAgICAgICBpZiAoY2xpcGJvYXJkICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIHRlc3QgcGFzdGUgYW5kIHVuZG8gLyByZWRvCisgICAgICAgICAgICBUcmFuc2ZlcmFibGUgdHIgPSBuZXcgU3RyaW5nU2VsZWN0aW9uKFNUUklOR19DT05URU5UKTsKKyAgICAgICAgICAgIGNsaXBib2FyZC5zZXRDb250ZW50cyh0ciwgbmV3IENsaXBib2FyZE93bmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGxvc3RPd25lcnNoaXAoQ2xpcGJvYXJkIGMsIFRyYW5zZmVyYWJsZSB0KSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIWZUZXh0UGFuZWwuY2xpcGJvYXJkTm90RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJNVGV4dFBhbmVsIGRvZXNuJ3QgcmVjb2duaXplIHN0cmluZyBjb250ZW50LiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmVGV4dFBhbmVsLnNldENhcmV0UG9zaXRpb24oZlRleHRQYW5lbC5nZXRTZWxlY3Rpb25TdGFydCgpKTsKKyAgICAgICAgICAgIGludCBvbGRMZW5ndGggPSBmVGV4dFBhbmVsLmdldFRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwucGFzdGUoKTsKKyAgICAgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFRleHRMZW5ndGgoKSAhPSBvbGRMZW5ndGggKyBTVFJJTkdfQ09OVEVOVC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJUZXh0IGxlbmd0aCBpcyB3cm9uZyBhZnRlciBwYXN0ZS4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmVGV4dFBhbmVsLmNhblVuZG8oKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJjYW5VbmRvIHNob3VsZCBiZSB0cnVlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmVGV4dFBhbmVsLnVuZG8oKTsKKyAgICAgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFRleHRMZW5ndGgoKSAhPSBvbGRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigiTGVuZ3RoIGlzIHdyb25nIGFmdGVyIHVuZG8iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZlRleHRQYW5lbC5jYW5SZWRvKCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigiY2FuUmVkbyBzaG91bGQgYmUgdHJ1ZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZlRleHRQYW5lbC5yZWRvKCk7CisgICAgICAgICAgICBpZiAoZlRleHRQYW5lbC5nZXRUZXh0TGVuZ3RoKCkgIT0gb2xkTGVuZ3RoICsgU1RSSU5HX0NPTlRFTlQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigiVGV4dCBsZW5ndGggaXMgd3JvbmcgYWZ0ZXIgcmVkby4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludCBvcmlnTGVuZ3RoID0gZlRleHRQYW5lbC5nZXRUZXh0TGVuZ3RoKCk7CisgICAgICAgIGZUZXh0UGFuZWwuc2VsZWN0QWxsKCk7CisgICAgICAgIGZUZXh0UGFuZWwuY2xlYXIoKTsKKyAgICAgICAgaWYgKGZUZXh0UGFuZWwuZ2V0VGV4dExlbmd0aCgpICE9IDApIHsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKCJMZW5ndGggaXMgbm9uemVybyBhZnRlciBjbGVhciIpOworICAgICAgICB9CisgICAgICAgIGlmICghZlRleHRQYW5lbC5jYW5VbmRvKCkpIHsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKCJjYW5VbmRvIHNob3VsZCBiZSB0cnVlIik7CisgICAgICAgIH0KKyAgICAgICAgZlRleHRQYW5lbC51bmRvKCk7CisgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFRleHRMZW5ndGgoKSAhPSBvcmlnTGVuZ3RoKSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcigiT2xkIHRleHQgbm90IHJlc3RvcmVkIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3JpZ0xlbmd0aCA+IDApIHsKKworICAgICAgICAgICAgZlRleHRQYW5lbC5zZWxlY3QoMCwgMSk7CisgICAgICAgICAgICBmVGV4dFBhbmVsLmN1dCgpOworICAgICAgICAgICAgaWYgKGZUZXh0UGFuZWwuZ2V0VGV4dExlbmd0aCgpICE9IG9yaWdMZW5ndGgtMSkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJMZW5ndGggd3JvbmcgYWZ0ZXIgY3V0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmVGV4dFBhbmVsLnBhc3RlKCk7CisgICAgICAgICAgICBpZiAoZlRleHRQYW5lbC5nZXRUZXh0TGVuZ3RoKCkgIT0gb3JpZ0xlbmd0aCkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJMZW5ndGggd3JvbmcgYWZ0ZXIgcGFzdGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZUZXh0UGFuZWwuc2VsZWN0KDAsIG9yaWdMZW5ndGgpOworICAgICAgICAgICAgZlRleHRQYW5lbC5jb3B5KCk7CisgICAgICAgICAgICBmVGV4dFBhbmVsLnNldENhcmV0UG9zaXRpb24oMCk7CisgICAgICAgICAgICBmVGV4dFBhbmVsLnBhc3RlKCk7CisgICAgICAgICAgICBpZiAoZlRleHRQYW5lbC5nZXRUZXh0TGVuZ3RoKCkgIT0gMipvcmlnTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoIkxlbmd0aCB3cm9uZyBhZnRlciBwYXN0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZlRleHRQYW5lbC51bmRvKCk7CisgICAgICAgICAgICBpZiAoZlRleHRQYW5lbC5nZXRUZXh0TGVuZ3RoKCkgIT0gb3JpZ0xlbmd0aCkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJMZW5ndGggd3JvbmcgYWZ0ZXIgdW5kbyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldEFuZFRlc3RNb2RGbGFnKGZpbmFsIGludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBtb2RpZmllZCkgeworCisgICAgICAgIGZUZXh0UGFuZWwuc2V0TW9kaWZpZWQobW9kaWZpZWQpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBkZXB0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWZUZXh0UGFuZWwuY2FuVW5kbygpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlBhbmVsIGNhbm5vdCB1bmRvIGF0IHZhbGlkIGRlcHRoLiAgRGVwdGg9IiArIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZlRleHRQYW5lbC51bmRvKCk7CisgICAgICAgICAgICBmVGV4dFBhbmVsLnNldE1vZGlmaWVkKG1vZGlmaWVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNoZWNrIHRoYXQgYWxsIG1vZCBmbGFncyBhcmUgZmFsc2U6CisgICAgICAgIGlmIChmVGV4dFBhbmVsLmlzTW9kaWZpZWQoKSAhPSBtb2RpZmllZCkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoImlzTW9kaWZpZWQgaXMgbm90IGNvcnJlY3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGRlcHRoOyBpKyspIHsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwucmVkbygpOworICAgICAgICAgICAgaWYgKGZUZXh0UGFuZWwuaXNNb2RpZmllZCgpICE9IG1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoImlzTW9kaWZpZWQgaXMgbm90IGNvcnJlY3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE1ha2UgPGNvZGU+ZGVwdGg8L2NvZGU+IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHRleHQgaW4gdGV4dGZUZXh0UGFuZWwuCisgICAgICogU2V0IHRoZSBtb2RpZmllZCBmbGFnIG9uIGVhY2ggb3BlcmF0aW9uLCBhbmQgdGhlbiByZXRyaWV2ZSBpdHMKKyAgICAgKiB2YWx1ZS4gIEZpbmFsbHksIHVuZG8gdGhlIG1vZGlmaWNhdGlvbnMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgX3Rlc3RNb2RGbGFnKGZpbmFsIGludCBkZXB0aCkgeworCisgICAgICAgIGZpbmFsIGludCBvbGRMZW5ndGggPSBmVGV4dFBhbmVsLmdldFRleHRMZW5ndGgoKTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBkZXB0aDsgaSsrKSB7CisgICAgICAgICAgICBmVGV4dFBhbmVsLmluc2VydChNT0RfVEVYVCwgMCk7CisgICAgICAgIH0KKworICAgICAgICBzZXRBbmRUZXN0TW9kRmxhZyhkZXB0aCwgZmFsc2UpOworICAgICAgICBzZXRBbmRUZXN0TW9kRmxhZyhkZXB0aCwgdHJ1ZSk7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgZGVwdGg7IGkrKykgeworICAgICAgICAgICAgZlRleHRQYW5lbC51bmRvKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZlRleHRQYW5lbC5nZXRUZXh0TGVuZ3RoKCkgIT0gb2xkTGVuZ3RoKSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcigiVW5kbyBkaWQgbm90IHJlc3RvcmUgb2xkIHRleHQuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFwcGx5Q2hhcmFjdGVyU3R5bGUoKSB7CisKKyAgICAgICAgU3R5bGVNb2RpZmllciBzdE1vZCA9IGNoYXJNb2RzW3JhbmRJbnQoY2hhck1vZHMubGVuZ3RoKV07CisgICAgICAgIGZMaXN0ZW5lci5yZWZ1c2VBbGwoKTsKKyAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9TVFlMRVNfQ0hBTkdFRCk7CisgICAgICAgIGlmIChmVGV4dFBhbmVsLmdldFNlbGVjdGlvblN0YXJ0KCkgIT0gZlRleHRQYW5lbC5nZXRTZWxlY3Rpb25FbmQoKSkgeworICAgICAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlRFWFRfQ0hBTkdFRCk7CisgICAgICAgICAgICBmTGlzdGVuZXIuYWxsb3dFdmVudChUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fUkFOR0VfQ0hBTkdFRCk7CisgICAgICAgIH0KKyAgICAgICAgZkxpc3RlbmVyLmFsbG93RXZlbnQoVGV4dFBhbmVsRXZlbnQuVU5ET19TVEFURV9DSEFOR0VEKTsKKyAgICAgICAgZlRleHRQYW5lbC5tb2RpZnlDaGFyYWN0ZXJTdHlsZU9uU2VsZWN0aW9uKHN0TW9kKTsKKyAgICAgICAgZkxpc3RlbmVyLmFzc2VydE5vdEV4cGVjdGluZ0V2ZW50cygpOworICAgICAgICBmTGlzdGVuZXIuYWxsb3dBbGwoKTsKKyAgICB9CisKKworICAgIHZvaWQgYXBwbHlQYXJhZ3JhcGhTdHlsZSgpIHsKKworICAgICAgICBmTGlzdGVuZXIucmVmdXNlQWxsKCk7CisgICAgICAgIGZMaXN0ZW5lci5leHBlY3RFdmVudChUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fU1RZTEVTX0NIQU5HRUQpOworICAgICAgICBmTGlzdGVuZXIuZXhwZWN0RXZlbnQoVGV4dFBhbmVsRXZlbnQuVEVYVF9DSEFOR0VEKTsKKyAgICAgICAgZkxpc3RlbmVyLmFsbG93RXZlbnQoVGV4dFBhbmVsRXZlbnQuVU5ET19TVEFURV9DSEFOR0VEKTsKKyAgICAgICAgZkxpc3RlbmVyLmFsbG93RXZlbnQoVGV4dFBhbmVsRXZlbnQuU0VMRUNUSU9OX1JBTkdFX0NIQU5HRUQpOworICAgICAgICBTdHlsZU1vZGlmaWVyIHN0TW9kID0gcGFyYU1vZHNbcmFuZEludChwYXJhTW9kcy5sZW5ndGgpXTsKKyAgICAgICAgZlRleHRQYW5lbC5tb2RpZnlQYXJhZ3JhcGhTdHlsZU9uU2VsZWN0aW9uKHN0TW9kKTsKKyAgICAgICAgZkxpc3RlbmVyLmFzc2VydE5vdEV4cGVjdGluZ0V2ZW50cygpOworICAgICAgICBmTGlzdGVuZXIuYWxsb3dBbGwoKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGx5S2V5UmVtYXAoKSB7CisKKyAgICAgICAgZkxpc3RlbmVyLnJlZnVzZUFsbCgpOworICAgICAgICBmTGlzdGVuZXIuZXhwZWN0RXZlbnQoVGV4dFBhbmVsRXZlbnQuS0VZUkVNQVBfQ0hBTkdFRCk7CisgICAgICAgIGludCBvcCA9IHJhbmRJbnQoNSk7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGZUZXh0UGFuZWwuc2V0S2V5UmVtYXAoS2V5UmVtYXAuZ2V0SWRlbnRpdHlSZW1hcCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGZUZXh0UGFuZWwuc2V0S2V5UmVtYXAoS2V5UmVtYXAuZ2V0QXJhYmljVHJhbnNsaXRlcmF0aW9uKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgZlRleHRQYW5lbC5zZXRLZXlSZW1hcChLZXlSZW1hcC5nZXRIZWJyZXdUcmFuc2xpdGVyYXRpb24oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBmVGV4dFBhbmVsLnNldEtleVJlbWFwKEtleVJlbWFwLmdldElzcmFlbE5pa3VkKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgLy9mVGV4dFBhbmVsLnNldEtleVJlbWFwKEtleVJlbWFwLmdldFRoYWlLZXRtYW5lZSgpKTsKKyAgICAgICAgICAgICAgICBmVGV4dFBhbmVsLnNldEtleVJlbWFwKEtleVJlbWFwLmdldElzcmFlbE5pa3VkKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJJbnZhbGlkIG9wZXJhdGlvbiEiKTsKKyAgICAgICAgfQorICAgICAgICBmTGlzdGVuZXIuYXNzZXJ0Tm90RXhwZWN0aW5nRXZlbnRzKCk7CisgICAgICAgIGZMaXN0ZW5lci5hbGxvd0FsbCgpOworICAgIH0KKworICAgIHZvaWQgcmVzaXplRnJhbWUoRnJhbWUgZnJhbWUpIHsKKworICAgICAgICBmTGlzdGVuZXIucmVmdXNlQWxsKCk7CisgICAgICAgIGZMaXN0ZW5lci5hbGxvd0V2ZW50KFRleHRQYW5lbEV2ZW50LkZPUk1BVF9XSURUSF9DSEFOR0VEKTsKKyAgICAgICAgaW50IHdkID0gcmFuZEludCg1MCwgMTAwMCk7CisgICAgICAgIGludCBodCA9IHJhbmRJbnQoMjAsIDgwMCk7CisKKyAgICAgICAgZnJhbWUuc2V0U2l6ZSh3ZCwgaHQpOworICAgICAgICBmTGlzdGVuZXIuYWxsb3dBbGwoKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbGVjdFRleHQoKSB7CisKKyAgICAgICAgaW50IHNlbFN0YXJ0ID0gcmFuZEludCgtMTAsIGZUZXh0UGFuZWwuZ2V0VGV4dExlbmd0aCgpKTsKKyAgICAgICAgaW50IHNlbExpbWl0ID0gcmFuZEludCgwLCBmVGV4dFBhbmVsLmdldFRleHRMZW5ndGgoKSArIDEwKTsKKyAgICAgICAgX3Rlc3RTZWxlY3Rpb24oU0VMRUNULCBzZWxTdGFydCwgc2VsTGltaXQpOworICAgIH0KKworICAgIHZvaWQgdW5kb1JlZG8oKSB7CisKKyAgICAgICAgZmluYWwgaW50IG9wQ291bnQgPSByYW5kSW50KC0xMCwgMTUpOworCisgICAgICAgIGZvciAoaW50IGk9b3BDb3VudDsgaSA8PSAwOyBpKyspIHsKKyAgICAgICAgICAgIGZUZXh0UGFuZWwucmVkbygpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG9wQ291bnQ7IGkrKykgeworICAgICAgICAgICAgZlRleHRQYW5lbC51bmRvKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCB0eXBlS2V5cygpIHsKKworICAgICAgICBmaW5hbCBpbnQga2V5Q291bnQgPSByYW5kSW50KDEsIDEwMCk7CisgICAgICAgIFRleHRQYW5lbCB0ZXh0UGFuZWwgPSAoVGV4dFBhbmVsKSBmVGV4dFBhbmVsOworICAgICAgICAKKyAgICAgICAgS2V5RXZlbnRGb3J3YXJkZXIgZm9yd2FyZGVyID0gbmV3IEtleUV2ZW50Rm9yd2FyZGVyKHRleHRQYW5lbCk7CisgICAgICAgIAorICAgICAgICBmTGlzdGVuZXIucmVmdXNlQWxsKCk7CisgICAgICAgIGZMaXN0ZW5lci5hbGxvd0V2ZW50KFRleHRQYW5lbEV2ZW50LlVORE9fU1RBVEVfQ0hBTkdFRCk7CisgICAgICAgIAorICAgICAgICBpZiAoZlRleHRQYW5lbC5nZXRTZWxlY3Rpb25TdGFydCgpICE9IGZUZXh0UGFuZWwuZ2V0U2VsZWN0aW9uRW5kKCkpIHsKKyAgICAgICAgICAgIGZMaXN0ZW5lci5leHBlY3RFdmVudChUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fRU1QVFlfQ0hBTkdFRCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGtleUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGNoYXIgdHlwZWRDaGFyID0gVFlQRURfQ0hBUlNbcmFuZEludChUWVBFRF9DSEFSUy5sZW5ndGgpXTsKKyAgICAgICAgICAgIEtleUV2ZW50IGV2ZW50ID0gbmV3IEtleUV2ZW50KHRleHRQYW5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleUV2ZW50LktFWV9UWVBFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5RXZlbnQuVktfVU5ERUZJTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRDaGFyKTsKKyAgICAgICAgICAgIGlmICh0eXBlZENoYXIgPT0gOCB8fCB0eXBlZENoYXIgPT0gMHg3ZikgeworICAgICAgICAgICAgICAgIGZMaXN0ZW5lci5hbGxvd0V2ZW50KFRleHRQYW5lbEV2ZW50LlRFWFRfQ0hBTkdFRCk7CisgICAgICAgICAgICAgICAgZkxpc3RlbmVyLmFsbG93RXZlbnQoVGV4dFBhbmVsRXZlbnQuU0VMRUNUSU9OX1JBTkdFX0NIQU5HRUQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlRFWFRfQ0hBTkdFRCk7CisgICAgICAgICAgICAgICAgZkxpc3RlbmVyLmV4cGVjdEV2ZW50KFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9SQU5HRV9DSEFOR0VEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvcndhcmRlci5oYW5kbGVLZXlFdmVudChldmVudCk7CisgICAgICAgICAgICAvL3RyeSB7CisgICAgICAgICAgICAgICAgZkxpc3RlbmVyLmFzc2VydE5vdEV4cGVjdGluZ0V2ZW50cyhpLCBmYWxzZSk7CisgICAgICAgICAgICAvL30KKyAgICAgICAgICAgIC8vY2F0Y2goRXJyb3IgZSkgeworICAgICAgICAgICAgLy8gICAgbG9nTWVzc2FnZSgiaT0iK2krIjsgdHlwZWRDaGFyPSIrSW50ZWdlci50b0hleFN0cmluZyh0eXBlZENoYXIpKTsKKyAgICAgICAgICAgIC8vICAgIHRocm93IGU7CisgICAgICAgICAgICAvL30KKyAgICAgICAgfQorICAgICAgICBmTGlzdGVuZXIuYWxsb3dBbGwoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC9UeXBpbmdQZXJmVGVzdC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC9UeXBpbmdQZXJmVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkN2E5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L1R5cGluZ1BlcmZUZXN0LmphdmEKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFR5cGluZ1BlcmZUZXN0LmphdmEsdiAkICRSZXZpc2lvbjogMS40ICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MzkgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXN0OworCitpbXBvcnQgamF2YS5hd3QuQnV0dG9uOworaW1wb3J0IGphdmEuYXd0LkdyaWRMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5hd3QuVG9vbGtpdDsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkxpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LktleUV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQ7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuS2V5RXZlbnRGb3J3YXJkZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuYXd0dWkuVGV4dEZyYW1lOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5kZW1vLkVkaXREZW1vOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuZGVtby5UZXh0RG9jdW1lbnQ7CisKK3B1YmxpYyBjbGFzcyBUeXBpbmdQZXJmVGVzdCBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBUZXh0RnJhbWUgZlRleHRGcmFtZTsKKyAgICBwcml2YXRlIEtleUV2ZW50Rm9yd2FyZGVyIGZLZXlFdmVudEZvcndhcmRlcjsKKyAgICBwcml2YXRlIFByaW50V3JpdGVyIGZPdXQ7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZmdBdFN0YXJ0Q29tbWFuZCA9ICJJbnNlcnQgYXQgc3RhcnQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBmZ0F0RW5kQ29tbWFuZCA9ICJJbnNlcnQgYXQgZW5kIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZmdGd2REZWxldGUgPSAiRm9yd2FyZCBkZWxldGUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBmZ0JhY2tzcGFjZSA9ICJCYWNrc3BhY2UiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBmZ0F0Q3VycmVudFBvc0NvbW1hbmQgPSAiSW5zZXJ0IGF0IGN1cnJlbnQgcG9zaXRpb24iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBmZ0xvdHNPZlRleHRDb21tYW5kID0gIkluc2VydCBhIGxvdCBvZiB0ZXh0IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0FHRSA9ICJVc2FnZTogamF2YSBjb20uaWJtLnJpY2h0ZXh0LnRlc3QuVHlwaW5nUGVyZlRlc3QgW2ZpbGVdIFstaW5zZXJ0aW9uVGV4dCB0ZXh0XSI7CisgICAgcHJpdmF0ZSBjaGFyW10gZkluc1RleHQ7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIC8vIG5vdCB1c2VkIE91dHB1dFN0cmVhbSBvdXRTdHJlYW0gPSBudWxsOworICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoU3lzdGVtLm91dCk7CisKKyAgICAgICAgTUNvbnN0VGV4dCB0ZXh0ID0gRGVjbGFyYXRpb24uZmdEZWNsYXJhdGlvbjsKKyAgICAgICAgY2hhcltdIGluc1RleHQgPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4gVGhlIGVuZC4gIi50b0NoYXJBcnJheSgpOworICAgICAgICAKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgYXJncy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChhcmdzW2luZGV4XS5lcXVhbHMoIi1pbnNlcnRpb25UZXh0IikpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gKytpbmRleCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoVVNBR0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnNUZXh0ID0gYXJnc1tpbmRleCsrXS50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyeSBNQ29uc3RUZXh0IGZpcnN0LCB0aGVuIHBsYWluIHRleHQuCisgICAgICAgICAgICAgICAgVGV4dERvY3VtZW50IGRvYyA9IEVkaXREZW1vLmdldERvY3VtZW50RnJvbUZpbGUobmV3IEZpbGUoYXJnc1tpbmRleCsrXSkpOworICAgICAgICAgICAgICAgIGlmIChkb2MgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IG9wZW4gZmlsZSAiK2FyZ3NbaW5kZXgtMV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0ID0gZG9jLmdldFRleHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGluZGV4ICE9IGFyZ3MubGVuZ3RoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoVVNBR0UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBuZXcgVHlwaW5nUGVyZlRlc3Qod3JpdGVyLCB0ZXh0LCBpbnNUZXh0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgVHlwaW5nUGVyZlRlc3QoUHJpbnRXcml0ZXIgb3V0LCBNQ29uc3RUZXh0IHRleHQsIGNoYXJbXSBpbnNUZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIGZJbnNUZXh0ID0gaW5zVGV4dDsKKyAgICAgICAgZlRleHRGcmFtZSA9IG5ldyBUZXh0RnJhbWUodGV4dCwgIiIsIG51bGwpOworICAgICAgICBUZXh0UGFuZWwgdGV4dFBhbmVsID0gKFRleHRQYW5lbCkgZlRleHRGcmFtZS5nZXRUZXh0UGFuZWwoKTsKKyAgICAgICAgZktleUV2ZW50Rm9yd2FyZGVyID0gbmV3IEtleUV2ZW50Rm9yd2FyZGVyKHRleHRQYW5lbCk7CisgICAgICAgIGZPdXQgPSBvdXQ7CisKKyAgICAgICAgRGF0ZUZvcm1hdCBkZiA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSgpOworICAgICAgICBvdXQucHJpbnRsbigiVGVzdCBkYXRlOiAiICsgZGYuZm9ybWF0KG5ldyBEYXRlKCkpKTsKKworICAgICAgICBmVGV4dEZyYW1lLnNldFNpemUoNTAwLCA3MDApOworICAgICAgICBmVGV4dEZyYW1lLnNob3coKTsKKworICAgICAgICBGcmFtZSBmID0gbmV3IEZyYW1lKCJUeXBpbmcgUGVyZiBUZXN0Iik7CisgICAgICAgIGYuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDAsIDEpKTsKKyAgICAgICAgQnV0dG9uIGI7CisvKgorICAgICAgICBiID0gbmV3IEJ1dHRvbihmZ0F0U3RhcnRDbWQpOworICAgICAgICBiLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICBmLmFkZChiKTsKKworICAgICAgICBiID0gbmV3IEJ1dHRvbihmZ0F0RW5kQ21kKTsKKyAgICAgICAgYi5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZi5hZGQoYik7CisqLworICAgICAgICBiID0gbmV3IEJ1dHRvbihmZ0F0Q3VycmVudFBvc0NvbW1hbmQpOworICAgICAgICBiLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICBmLmFkZChiKTsKKworICAgICAgICBiID0gbmV3IEJ1dHRvbihmZ0xvdHNPZlRleHRDb21tYW5kKTsKKyAgICAgICAgYi5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZi5hZGQoYik7CisKKyAgICAgICAgYiA9IG5ldyBCdXR0b24oZmdGd2REZWxldGUpOworICAgICAgICBiLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworICAgICAgICBmLmFkZChiKTsKKworICAgICAgICBiID0gbmV3IEJ1dHRvbihmZ0JhY2tzcGFjZSk7CisgICAgICAgIGIuYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgICAgIGYuYWRkKGIpOworCisgICAgICAgIGYuZG9MYXlvdXQoKTsKKyAgICAgICAgV2luZG93QWRhcHRlciBjbG9zZXIgPSBuZXcgV2luZG93QWRhcHRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgIGZPdXQuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGYuYWRkV2luZG93TGlzdGVuZXIoY2xvc2VyKTsKKyAgICAgICAgZlRleHRGcmFtZS5hZGRXaW5kb3dMaXN0ZW5lcihjbG9zZXIpOworICAgICAgICAKKyAgICAgICAgZi5zZXRTaXplKDIwMCwgODApOworICAgICAgICBmLnNob3coKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXZ0KSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChldnQuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhmZ0F0Q3VycmVudFBvc0NvbW1hbmQpKSB7CisKKyAgICAgICAgICAgICAgICBpbnNlcnRBdEN1cnJlbnRQb3MoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChldnQuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhmZ0xvdHNPZlRleHRDb21tYW5kKSkgeworCisgICAgICAgICAgICAgICAgaW5zZXJ0QXRDdXJyZW50UG9zKDgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoZmdGd2REZWxldGUpKSB7CisKKyAgICAgICAgICAgICAgICBmb3J3YXJkRGVsZXRlKDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoZmdCYWNrc3BhY2UpKSB7CisKKyAgICAgICAgICAgICAgICBiYWNrc3BhY2UoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaW5zZXJ0QXRDdXJyZW50UG9zKGZpbmFsIGludCB0aW1lcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKworICAgICAgICBmVGV4dEZyYW1lLnRvRnJvbnQoKTsKKworICAgICAgICBTeXN0ZW0uZ2MoKTsKKworICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCisgICAgICAgIGZvciAoaW50IHQ9MDsgdCA8IHRpbWVzOyB0KyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGZJbnNUZXh0Lmxlbmd0aDsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICBLZXlFdmVudCBldmVudCA9IG5ldyBLZXlFdmVudChmVGV4dEZyYW1lLCBLZXlFdmVudC5LRVlfVFlQRUQsIDAsIDAsIDAsIGZJbnNUZXh0W2ldKTsKKyAgICAgICAgICAgICAgICBmS2V5RXZlbnRGb3J3YXJkZXIuaGFuZGxlS2V5RXZlbnQoZXZlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbG9uZyB0aW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisKKyAgICAgICAgZk91dC5wcmludGxuKCJUb3RhbCB0aW1lOiAiICsgdGltZSk7CisgICAgICAgIGZPdXQucHJpbnRsbigiTWlsbGlzIHBlciBjaGFyYWN0ZXI6ICIgKyAodGltZSAvIChmSW5zVGV4dC5sZW5ndGgqdGltZXMpKSk7CisgICAgICAgIGZPdXQuZmx1c2goKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZm9yd2FyZERlbGV0ZShmaW5hbCBpbnQgdGltZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgU3lzdGVtLmdjKCk7CisKKyAgICAgICAgbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKworICAgICAgICBmb3IgKGludCB0PTA7IHQgPCB0aW1lczsgdCsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBmSW5zVGV4dC5sZW5ndGg7IGkrKykgeworCisgICAgICAgICAgICAgICAgS2V5RXZlbnQgZXZlbnQgPSBuZXcgS2V5RXZlbnQoZlRleHRGcmFtZSwgMCwgMCwgMCwgS2V5RXZlbnQuVktfREVMRVRFLCAnXHUwMEZGJyk7CisgICAgICAgICAgICAgICAgZktleUV2ZW50Rm9yd2FyZGVyLmhhbmRsZUtleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgdGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworCisgICAgICAgIGZPdXQucHJpbnRsbigiVG90YWwgdGltZTogIiArIHRpbWUpOworICAgICAgICBmT3V0LnByaW50bG4oIk1pbGxpcyBwZXIgY2hhcmFjdGVyOiAiICsgKHRpbWUgLyAoZkluc1RleHQubGVuZ3RoKnRpbWVzKSkpOworICAgICAgICBmT3V0LmZsdXNoKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGJhY2tzcGFjZShmaW5hbCBpbnQgdGltZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgU3lzdGVtLmdjKCk7CisKKyAgICAgICAgbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKworICAgICAgICBmb3IgKGludCB0PTA7IHQgPCB0aW1lczsgdCsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBmSW5zVGV4dC5sZW5ndGg7IGkrKykgeworCisgICAgICAgICAgICAgICAgS2V5RXZlbnQgZXZlbnQgPSBuZXcgS2V5RXZlbnQoZlRleHRGcmFtZSwgMCwgMCwgMCwgS2V5RXZlbnQuVktfQkFDS19TUEFDRSwgJ1x1MDAxMCcpOworICAgICAgICAgICAgICAgIGZLZXlFdmVudEZvcndhcmRlci5oYW5kbGVLZXlFdmVudChldmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKworICAgICAgICBmT3V0LnByaW50bG4oIlRvdGFsIHRpbWU6ICIgKyB0aW1lKTsKKyAgICAgICAgZk91dC5wcmludGxuKCJNaWxsaXMgcGVyIGNoYXJhY3RlcjogIiArICh0aW1lIC8gKGZJbnNUZXh0Lmxlbmd0aCp0aW1lcykpKTsKKyAgICAgICAgZk91dC5mbHVzaCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvdW5pdC9GbXdrVGVzdFRleHRQYW5lbC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC91bml0L0Ztd2tUZXN0VGV4dFBhbmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM3OTJhYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvdW5pdC9GbXdrVGVzdFRleHRQYW5lbC5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEZtd2tUZXN0VGV4dFBhbmVsLmphdmEsdiAkICRSZXZpc2lvbjogMS4zICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MzkgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXN0LnVuaXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRlc3QuVGVzdFRleHRQYW5lbDsKKworcHVibGljIGZpbmFsIGNsYXNzIEZtd2tUZXN0VGV4dFBhbmVsIGV4dGVuZHMgVGVzdEZtd2sgeworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgCisgICAgICAgIG5ldyBGbXdrVGVzdFRleHRQYW5lbCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBUVFAgdHRwOworICAgIAorICAgIHB1YmxpYyBGbXdrVGVzdFRleHRQYW5lbCgpIHsKKyAgICAKKyAgICAgICAgdHRwID0gbmV3IFRUUCgpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworICAgIAorICAgICAgICB0dHAudGVzdCgpOworICAgICAgICAvLyBJZiBUZXN0VGV4dFBhbmVsIGdldHMgbW9yZSB0ZXN0cywgYWRkIHRoZW0gaGVyZQorICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgY2xhc3MgVFRQIGV4dGVuZHMgVGVzdFRleHRQYW5lbCB7CisgICAgCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHJlcG9ydEVycm9yKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIAorICAgICAgICAgICAgZXJybG4obWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGxvZ01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgCisgICAgICAgICAgICBsb2dsbihtZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdEFsbC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC91bml0L1Rlc3RBbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZGM0NjgyZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvdW5pdC9UZXN0QWxsLmphdmEKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGVzdEFsbC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjM5ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGVzdC51bml0OworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CisKK3B1YmxpYyBjbGFzcyBUZXN0QWxsIGV4dGVuZHMgVGVzdEZtd2sgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBuZXcgVGVzdEFsbCgpLnJ1bihhcmdzKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdEF0dHJpYnV0ZVNldCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBydW4obmV3IFRlc3RBdHRyaWJ1dGVTZXQoKSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIFRlc3RBdHRyaWJ1dGVNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcnVuKG5ldyBUZXN0QXR0cmlidXRlTWFwKCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0Rm9ybWF0dGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdEZvcm1hdHRlcigpKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdE1UZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdE1UZXh0KCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0UGFyYWdyYXBoU3R5bGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdFBhcmFncmFwaFN0eWxlcygpKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgVGVzdE1UZXh0U3RyZWFtaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgVGVzdE1UZXh0U3RyZWFtaW5nKCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBUZXN0VGV4dFBhbmVsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJ1bihuZXcgRm13a1Rlc3RUZXh0UGFuZWwoKSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvdW5pdC9UZXN0QXR0cmlidXRlTWFwLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdEF0dHJpYnV0ZU1hcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3ZjdiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdEF0dHJpYnV0ZU1hcC5qYXZhCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBUZXN0QXR0cmlidXRlTWFwLmphdmEsdiAkICRSZXZpc2lvbjogMS40ICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6MzkgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXN0LnVuaXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5UZXh0QXR0cmlidXRlOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLk1hcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworCisvLyBKYXZhMiBpbXBvcnRzCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKKworCitwdWJsaWMgY2xhc3MgVGVzdEF0dHJpYnV0ZU1hcCBleHRlbmRzIFRlc3RGbXdrICB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworCisKKyAgICAvLyBUaGVyZSBhcmUgSkRLIDEuMSB2ZXJzaW9ucyBvZiBBdHRyaWJ1dGVNYXAgYW5kIEF0dHJpYnV0ZVNldC4KKyAgICAvLyBTb21lIG9mIHRoZSB0ZXN0cyBpbiB0aGlzIGNsYXNzIHJlcXVpcmUgSmF2YSAyIEFQSSdzLiAgSSBoYXZlCisgICAgLy8gdHJpZWQgdG8gaXNvbGF0ZSB0aGVzZSB0ZXN0cyBieSBjb25kaXRpb25hbGl6aW5nIHRoZW0gb24KKyAgICAvLyB0aGlzIHN0YXRpYyB2YXJpYWJsZS4gIElmIHlvdSBhcmUgYmFjay1wb3J0aW5nIHRvIDEuMSwgcmVtb3ZlCisgICAgLy8gdGhlIEphdmEgMiB0ZXN0cyBPTkxZLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gZ0pESzExID0gZmFsc2U7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICBuZXcgVGVzdEF0dHJpYnV0ZU1hcCgpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEF0dHJpYnV0ZVNldCBtYXBzOyAgLy8gQSBTZXQgb2YgQXR0cmlidXRlTWFwcworICAgIHByaXZhdGUgQXR0cmlidXRlU2V0IHNldHM7ICAvLyBBIFNldCBvZiBTZXRzCisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBUZXN0QXR0cmlidXRlIGV4dGVuZHMgVGV4dEF0dHJpYnV0ZSB7CisKKyAgICAgICAgVGVzdEF0dHJpYnV0ZShTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgc3VwZXIobmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUZXN0QXR0cmlidXRlW10gYXR0cmlidXRlcyA9IHsKKyAgICAgICAgbmV3IFRlc3RBdHRyaWJ1dGUoIjAiKSwgbmV3IFRlc3RBdHRyaWJ1dGUoIjEiKSwgbmV3IFRlc3RBdHRyaWJ1dGUoIjIiKQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RbXSB2YWx1ZXMgPSB7CisgICAgICAgICJIZWxsbyB3b3JsZCIsIG5ldyBGbG9hdCgtNDIpLCBuZXcgT2JqZWN0KCksIG5ldyBBdHRyaWJ1dGVNYXAobmV3IFRlc3RBdHRyaWJ1dGUoIjMiKSwgIkhIIikKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmV0dXJucyBsaHMuZXF1YWxzKHJocykgLSBidXQgYWxzbyBjaGVja3MgZm9yIHN5bW1ldHJ5LCBhbmQKKyAgICAgKiBjb25zaXN0ZW5jeSB3aXRoIGhhc2hDb2RlKCkuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGVxdWFsTWFwcyhBdHRyaWJ1dGVNYXAgbGhzLCBPYmplY3QgcmhzKSB7CisKKyAgICAgICAgYm9vbGVhbiBlcXVhbCA9IGxocy5lcXVhbHMocmhzKTsKKyAgICAgICAgaWYgKGVxdWFsICE9IChyaHMuZXF1YWxzKGxocykpKSB7CisgICAgICAgICAgICBlcnJsbigiQXR0cmlidXRlTWFwLmVxdWFscyBpcyBub3Qgc3ltZXRyaWMiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWwpIHsKKyAgICAgICAgICAgIGlmIChsaHMuaGFzaENvZGUoKSAhPSByaHMuaGFzaENvZGUoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJBdHRyaWJ1dGVNYXBzIGFyZSBlcXVhbCBidXQgaGFzaENvZGVzIGRpZmZlciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBlcXVhbDsKKyAgICB9CisKKyAgICBwdWJsaWMgVGVzdEF0dHJpYnV0ZU1hcCgpIHsKKworICAgICAgICBtYXBzID0gQXR0cmlidXRlU2V0LkVNUFRZX1NFVDsKKyAgICAgICAgbWFwcyA9IG1hcHMuYWRkRWxlbWVudChBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCk7CisgICAgICAgIG1hcHMuYWRkRWxlbWVudChuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuU1VQRVJTQ1JJUFQsIFRleHRBdHRyaWJ1dGUuU1VQRVJTQ1JJUFRfU1VCKSk7CisgICAgICAgIG1hcHMuYWRkRWxlbWVudChuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuU1VQRVJTQ1JJUFQsIFRleHRBdHRyaWJ1dGUuU1VQRVJTQ1JJUFRfU1VQRVIpKTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCB2YWx1ZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICBtYXBzID0gbWFwcy5hZGRFbGVtZW50KG5ldyBBdHRyaWJ1dGVNYXAoYXR0cmlidXRlc1tpXSwgdmFsdWVzW2pdKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBdHRyaWJ1dGVNYXAgYmlnTWFwID0gbmV3IEF0dHJpYnV0ZU1hcChuZXcgVGVzdEF0dHJpYnV0ZSgiNCIpLCAidmFsdWUiKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTWF0aC5taW4oYXR0cmlidXRlcy5sZW5ndGgsIHZhbHVlcy5sZW5ndGgpOyBpKyspIHsKKyAgICAgICAgICAgIGJpZ01hcCA9IGJpZ01hcC5hZGRBdHRyaWJ1dGUoYXR0cmlidXRlc1tpXSwgdmFsdWVzW3ZhbHVlcy5sZW5ndGgtaS0xXSk7CisgICAgICAgIH0KKyAgICAgICAgbWFwcyA9IG1hcHMuYWRkRWxlbWVudChiaWdNYXApOworCisgICAgICAgIHNldHMgPSBBdHRyaWJ1dGVTZXQuRU1QVFlfU0VUOworCisgICAgICAgIHNldHMgPSBuZXcgQXR0cmlidXRlU2V0KEF0dHJpYnV0ZVNldC5FTVBUWV9TRVQpOworCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEF0dHJpYnV0ZVNldCBuZXdTZXQgPSBuZXcgQXR0cmlidXRlU2V0KGF0dHJpYnV0ZXNbaV0pOworICAgICAgICAgICAgc2V0cyA9IHNldHMuYWRkRWxlbWVudChuZXdTZXQpOworICAgICAgICB9CisKKyAgICAgICAgQXR0cmlidXRlU2V0IGFsbEF0dHJzID0gQXR0cmlidXRlU2V0LkVNUFRZX1NFVDsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgYWxsQXR0cnMgPSBhbGxBdHRycy5hZGRFbGVtZW50KGF0dHJpYnV0ZXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgc2V0cyA9IHNldHMuYWRkRWxlbWVudChhbGxBdHRycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUnVuIHRlc3RzIG9uIEF0dHJpYnV0ZU1hcC4gIElmIGEgdGVzdCBmYWlscyBhbiBleGNlcHRpb24gd2lsbCBwcm9wb2dhdGUgb3V0CisgICAgICogb2YgdGhpcyBtZXRob2QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKworICAgICAgICBlYXN5VGVzdHMoKTsKKworICAgICAgICBFbnVtZXJhdGlvbiBtYXBJdGVyID0gbWFwcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAobWFwSXRlci5oYXNNb3JlRWxlbWVudHMoKSkgeworCisgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgdGVzdE1hcCA9IChBdHRyaWJ1dGVNYXApIG1hcEl0ZXIubmV4dEVsZW1lbnQoKTsKKworICAgICAgICAgICAgX3Rlc3RNb2RpZmllcnModGVzdE1hcCk7CisgICAgICAgICAgICBfdGVzdFZpZXdzKHRlc3RNYXApOworCisgICAgICAgICAgICBFbnVtZXJhdGlvbiB1bmlvbkl0ZXIgPSBtYXBzLmVsZW1lbnRzKCk7CisgICAgICAgICAgICB3aGlsZSAodW5pb25JdGVyLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgX3Rlc3RVbmlvbldpdGgodGVzdE1hcCwgKEF0dHJpYnV0ZU1hcCkgdW5pb25JdGVyLm5leHRFbGVtZW50KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBFbnVtZXJhdGlvbiBzZXRJdGVyID0gc2V0cy5lbGVtZW50cygpOworICAgICAgICAgICAgd2hpbGUgKHNldEl0ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGVTZXQgdGVzdFNldCA9IChBdHRyaWJ1dGVTZXQpIHNldEl0ZXIubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBfdGVzdEludGVyc2VjdFdpdGgodGVzdE1hcCwgdGVzdFNldCk7CisgICAgICAgICAgICAgICAgX3Rlc3RSZW1vdmVBdHRyaWJ1dGVzKHRlc3RNYXAsIHRlc3RTZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSW52b2tlIG1vZGlmaWVycyBvbiBtYXAuICBBbGwgc2hvdWxkIHRocm93CisgICAgICogVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24sIGFuZCBsZWF2ZSBtYXAgdW5tb2RpZmllZC4KKyAgICAgKi8KKyAgICB2b2lkIF90ZXN0TW9kaWZpZXJzKEF0dHJpYnV0ZU1hcCBtYXApIHsKKworICAgICAgICBpZiAoZ0pESzExKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEF0dHJpYnV0ZU1hcCBvcmlnaW5hbE1hcCA9IG5ldyBBdHRyaWJ1dGVNYXAobWFwKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgbWFwLnB1dChUZXh0QXR0cmlidXRlLldFSUdIVCwgVGV4dEF0dHJpYnV0ZS5XRUlHSFRfQk9MRCk7CisgICAgICAgICAgICBlcnJsbigiUHV0IHNob3VsZCB0aHJvdyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbi4iKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3Qga2V5ID0gVGV4dEF0dHJpYnV0ZS5XRUlHSFQ7CisgICAgICAgICAgICBJdGVyYXRvciBpdGVyID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CisgICAgICAgICAgICBpZiAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBrZXkgPSBpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hcC5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgIGVycmxuKCJTZXQgc2hvdWxkIHRocm93IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLiIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1hcC5wdXRBbGwobWFwKTsKKyAgICAgICAgICAgIGVycmxuKCJwdXRBbGwgc2hvdWxkIHRocm93IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLiIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiIpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1hcC5jbGVhcigpOworICAgICAgICAgICAgZXJybG4oImNsZWFyIHNob3VsZCB0aHJvdyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbi4iKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghb3JpZ2luYWxNYXAuZXF1YWxzKG1hcCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJNb2RpZmllcnMgY2hhbmdlZCBtYXAuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1cmUgdGhhdCBtYXAuYWRkQXR0cmlidXRlcyhhZGRNYXApIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZworICAgICAqIG1hcC5hZGQgb24gYWxsIG9mIGFkZE1hcCdzIGVudHJpZXMuCisgICAgICovCisgICAgdm9pZCBfdGVzdFVuaW9uV2l0aChBdHRyaWJ1dGVNYXAgbWFwLCBBdHRyaWJ1dGVNYXAgYWRkTWFwKSB7CisKKyAgICAgICAgQXR0cmlidXRlTWFwIGxocyA9IG1hcC5hZGRBdHRyaWJ1dGVzKGFkZE1hcCk7CisKKyAgICAgICAgQXR0cmlidXRlTWFwIHJocyA9IG1hcDsKKworICAgICAgICBFbnVtZXJhdGlvbiBpdGVyID0gYWRkTWFwLmdldEtleVNldCgpLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBPYmplY3QgYXR0ciA9IGl0ZXIubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGFkZE1hcC5nZXQoYXR0cik7CisgICAgICAgICAgICByaHMgPSByaHMuYWRkQXR0cmlidXRlKGF0dHIsIHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZXF1YWxNYXBzKGxocywgcmhzKSkgeworICAgICAgICAgICAgZXJybG4oIk1hcHMgYXJlIG5vdCBlcXVhbC4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEVuc3VyZSB0aGF0IG1hcC5yZW1vdmVBdHRyaWJ1dGVzKHJlbW92ZSkgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICogbWFwLnJlbW92ZUF0dHJpYnV0ZSBvbiByZW1vdmUncyBlbGVtZW50cy4KKyAgICAgKi8KKyAgICB2b2lkIF90ZXN0UmVtb3ZlQXR0cmlidXRlcyhBdHRyaWJ1dGVNYXAgbWFwLCBBdHRyaWJ1dGVTZXQgcmVtb3ZlKSB7CisKKyAgICAgICAgQXR0cmlidXRlTWFwIGxocyA9IG1hcC5yZW1vdmVBdHRyaWJ1dGVzKHJlbW92ZSk7CisKKyAgICAgICAgQXR0cmlidXRlTWFwIHJocyA9IG1hcDsKKworICAgICAgICBFbnVtZXJhdGlvbiBpdGVyID0gcmVtb3ZlLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBPYmplY3QgYXR0ciA9IGl0ZXIubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHJocyA9IHJocy5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVxdWFsTWFwcyhsaHMsIHJocykpIHsKKyAgICAgICAgICAgIGVycmxuKCJNYXBzIGFyZSBub3QgZXF1YWwuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1cmUgdGhhdCBtYXAuaW50ZXJzZWN0V2l0aChpbnRlcnNlY3QpIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgKiBtYXAucmVtb3ZlQXR0cmlidXRlcyhtYXAua2V5U2V0KCkgLSBpbnRlcnNlY3QpOworICAgICAqLworICAgIHZvaWQgX3Rlc3RJbnRlcnNlY3RXaXRoKEF0dHJpYnV0ZU1hcCBtYXAsIEF0dHJpYnV0ZVNldCBpbnRlcnNlY3QpIHsKKworICAgICAgICBBdHRyaWJ1dGVNYXAgbGhzID0gbWFwLmludGVyc2VjdFdpdGgoaW50ZXJzZWN0KTsKKworICAgICAgICBBdHRyaWJ1dGVTZXQga2V5U2V0ID0gbWFwLmdldEtleVNldCgpOworICAgICAgICBBdHRyaWJ1dGVTZXQgcmVtb3ZlU2V0ID0ga2V5U2V0LnN1YnRyYWN0KGludGVyc2VjdCk7CisgICAgICAgIEF0dHJpYnV0ZU1hcCByaHMgPSBtYXAucmVtb3ZlQXR0cmlidXRlcyhyZW1vdmVTZXQpOworCisgICAgICAgIGlmICghZXF1YWxNYXBzKGxocywgcmhzKSkgeworICAgICAgICAgICAgbWFwLmludGVyc2VjdFdpdGgoaW50ZXJzZWN0KTsKKyAgICAgICAgICAgIGxvZ2xuKCJpbnRlcnNlY3Q6ICIgKyBpbnRlcnNlY3QpOworICAgICAgICAgICAgbG9nbG4oImtleVNldDogIiArIGtleVNldCk7CisgICAgICAgICAgICBsb2dsbigicmVtb3ZlU2V0OiAiICsgcmVtb3ZlU2V0KTsKKyAgICAgICAgICAgIGxvZ2xuKCJtYXA6ICIgKyBtYXApOworICAgICAgICAgICAgbG9nbG4oImxoczogIiArIGxocyk7CisgICAgICAgICAgICBsb2dsbigicmhzOiAiICsgcmhzKTsKKyAgICAgICAgICAgIGVycmxuKCJNYXBzIGFyZSBub3QgZXF1YWwuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1cmUgdGhhdDoKKyAgICAgKiAgICBtYXAsIG1hcC5rZXlTZXQoKSwgYW5kIG1hcC5lbnRyeVNldCgpIGFyZSB0aGUgc2FtZSBzaXplOworICAgICAqICAgIG1hcC5jb250YWluc0tleSgpIGlzIHRydWUgZm9yIGV2ZXJ5IGtleSBpbiBrZXlTZXQoKTsKKyAgICAgKiAgICBtYXAuY29udGFpbnNWYWx1ZSgpIGlzIHRydWUgZm9yIGV2ZXJ5IHZhbHVlIGluIHZhbHVlczsKKyAgICAgKiAgICBldmVyeSBlbnRyeSBrZXkgaXMgaW4ga2V5U2V0LCBldmVyeSBlbnRyeSB2YWx1ZSBpcyBpbiBtYXAudmFsdWVzKCk7CisgICAgICogICAgbWFwLmdldCgpIGlzIGNvbnNpc3RlbnQgd2l0aCBlbnRyeSdzIGtleSwgdmFsdWU7CisgICAgICogICAgc3VtIG9mIGhhc2hjb2RlcyBvZiBlbnRyaWVzIGVxdWFscyBtYXAuaGFzaENvZGUoKS4KKyAgICAgKi8KKyAgICB2b2lkIF90ZXN0Vmlld3MoQXR0cmlidXRlTWFwIG1hcCkgeworCisgICAgICAgIEF0dHJpYnV0ZVNldCBrZXlTZXQgPSBtYXAuZ2V0S2V5U2V0KCk7CisKKyAgICAgICAgRW51bWVyYXRpb24ga2V5SXRlciA9IGtleVNldC5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgaWYgKCFtYXAuY29udGFpbnNLZXkoa2V5SXRlci5uZXh0RWxlbWVudCgpKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJrZXlTZXQgY29udGFpbnMga2V5IG5vdCBpbiBtYXAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChnSkRLMTEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ29sbGVjdGlvbiB2YWx1ZXMgPSBtYXAudmFsdWVzKCk7CisgICAgICAgIFNldCBlbnRyeVNldCA9IG1hcC5lbnRyeVNldCgpOworCisgICAgICAgIGlmIChrZXlTZXQuc2l6ZSgpICE9IG1hcC5zaXplKCkgfHwgZW50cnlTZXQuc2l6ZSgpICE9IG1hcC5zaXplKCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJTZXQgc2l6ZXMgYXJlIGluY29uc2lzdGVudCB3aXRoIG1hcCBzaXplLiIpOworICAgICAgICB9CisKKyAgICAgICAgaW50IGhhc2hDb2RlID0gMDsKKworICAgICAgICBJdGVyYXRvciB2YWx1ZUl0ZXIgPSB2YWx1ZXMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKHZhbHVlSXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmICghbWFwLmNvbnRhaW5zVmFsdWUodmFsdWVJdGVyLm5leHQoKSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigidmFsdWUgc2V0IGNvbnRhaW5zIHZhbHVlIG5vdCBpbiBtYXAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEl0ZXJhdG9yIGVudHJ5SXRlciA9IGVudHJ5U2V0Lml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChlbnRyeUl0ZXIuaGFzTmV4dCgpKSB7CisKKyAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBlbnRyeUl0ZXIubmV4dCgpOworCisgICAgICAgICAgICBPYmplY3Qga2V5ID0gZW50cnkuZ2V0S2V5KCk7CisgICAgICAgICAgICBpZiAoIWtleVNldC5jb250YWlucyhrZXkpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkVudHJ5IGtleSBpcyBub3QgaW4ga2V5IHNldC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gbWFwLmdldChlbnRyeS5nZXRLZXkoKSk7CisgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucyh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRW50cnkgdmFsdWUgaXMgbm90IGluIHZhbHVlIHNldC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1hcC5nZXQoa2V5KSAhPSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJtYXAuZ2V0IGRpZCBub3QgcmV0dXJuIGVudHJ5IHZhbHVlLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBoYXNoQ29kZSArPSBlbnRyeS5oYXNoQ29kZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc2hDb2RlICE9IG1hcC5oYXNoQ29kZSgpKSB7CisgICAgICAgICAgICBlcnJsbigibWFwIGhhc2hjb2RlIGlzIG5vdCBzdW0gb2YgZW50cnkgaGFzaGNvZGVzLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTG9vayBmb3IgY29ycmVjdCBiZWhhdmlvciBpbiBvYnZpb3VzIGNhc2VzLgorICAgICAqLworICAgIHZvaWQgZWFzeVRlc3RzKCkgeworCisgICAgICAgIEF0dHJpYnV0ZU1hcCBtYXAgPSBuZXcgQXR0cmlidXRlTWFwKCk7CisgICAgICAgIGlmICghbWFwLmVxdWFscyhBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJEZWZhdWx0LWNvbnN0cnVjdGVkIG1hcCBpcyBub3QgZXF1YWwgdG8gZW1wdHkgbWFwLiIpOworICAgICAgICB9CisKKyAgICAgICAgbWFwID0gbWFwLmFkZEF0dHJpYnV0ZShUZXh0QXR0cmlidXRlLlBPU1RVUkUsIFRleHRBdHRyaWJ1dGUuUE9TVFVSRV9PQkxJUVVFKTsKKyAgICAgICAgT2JqZWN0IG90aGVyTWFwID0gbmV3IEF0dHJpYnV0ZU1hcChUZXh0QXR0cmlidXRlLlBPU1RVUkUsIFRleHRBdHRyaWJ1dGUuUE9TVFVSRV9PQkxJUVVFKTsKKyAgICAgICAgaWYgKCFtYXAuZXF1YWxzKG90aGVyTWFwKSkgeworICAgICAgICAgICAgZXJybG4oIk1hcHMgYXJlIGluY29uc2lzdGVudCBhZnRlciBtYXAuYWRkIik7CisgICAgICAgIH0KKworICAgICAgICBvdGhlck1hcCA9IG1hcC5hZGRBdHRyaWJ1dGVzKG1hcCk7CisgICAgICAgIGlmICghZXF1YWxNYXBzKG1hcCxvdGhlck1hcCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJNYXBzIGFyZSBpbmNvbnNpc3RlbnQgYWZ0ZXIgYWRkQXR0cmlidXRlcyIpOworICAgICAgICB9CisKKyAgICAgICAgbWFwID0gbWFwLmFkZEF0dHJpYnV0ZShUZXh0QXR0cmlidXRlLlVOREVSTElORSwgVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkVfT04pOworCisgICAgICAgIGlmIChtYXAuc2l6ZSgpICE9IDIpIHsKKyAgICAgICAgICAgIGVycmxuKCJNYXAgc2l6ZSBpcyB3cm9uZy4gIG1hcD0iK21hcCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXF1YWxNYXBzKG1hcCxvdGhlck1hcCkpIHsKKyAgICAgICAgICAgIGVycmxuKCJNYXBzIHNob3VsZCBub3QgYmUgZXF1YWwiKTsKKyAgICAgICAgfQorCisgICAgICAgIE9iamVjdCBwb3N0dXJlID0gbmV3IEZsb2F0KDApOworICAgICAgICBtYXAgPSBtYXAuYWRkQXR0cmlidXRlKFRleHRBdHRyaWJ1dGUuUE9TVFVSRSwgcG9zdHVyZSk7CisKKyAgICAgICAgaWYgKG1hcC5zaXplKCkgIT0gMikgeworICAgICAgICAgICAgZXJybG4oIk1hcCBzaXplIGlzIHdyb25nIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hcC5nZXQoVGV4dEF0dHJpYnV0ZS5QT1NUVVJFKS5lcXVhbHMocG9zdHVyZSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJNYXAgZWxlbWVudCBpcyB3cm9uZyIpOworICAgICAgICB9CisKKyAgICAgICAgbWFwID0gbWFwLnJlbW92ZUF0dHJpYnV0ZShUZXh0QXR0cmlidXRlLlVOREVSTElORSk7CisKKyAgICAgICAgaWYgKG1hcC5zaXplKCkgIT0gMSkgeworICAgICAgICAgICAgZXJybG4oIk1hcCBzaXplIGlzIHdyb25nIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWFwLmdldChUZXh0QXR0cmlidXRlLlVOREVSTElORSkgIT0gbnVsbCkgeworICAgICAgICAgICAgZXJybG4oIk1hcCBzaG91bGQgbm90IGhhdmUgZWxlbWVudCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gbWFwIGhhcyBQT1NUVVJFX1JFR1VMQVIuICBJZiB3ZSBhZGRBdHRyaWJ1dGVzIGEgbWFwIHdpdGgKKyAgICAgICAgLy8gUE9TVFVSRV9JVEFMSUMgdGhlIG5ldyBtYXAgc2hvdWxkIGhhdmUgUE9TVFVSRV9JVEFMSUMKKworICAgICAgICBtYXAgPSBtYXAuYWRkQXR0cmlidXRlcyhuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuUE9TVFVSRSwgVGV4dEF0dHJpYnV0ZS5QT1NUVVJFX09CTElRVUUpKTsKKyAgICAgICAgaWYgKG1hcC5nZXQoVGV4dEF0dHJpYnV0ZS5QT1NUVVJFKSAhPSBUZXh0QXR0cmlidXRlLlBPU1RVUkVfT0JMSVFVRSkgeworICAgICAgICAgICAgZXJybG4oIk1hcCBlbGVtZW50IGlzIHdyb25nIik7CisgICAgICAgIH0KKworICAgICAgICBfdGVzdE1vZGlmaWVycyhtYXApOworICAgICAgICBfdGVzdFZpZXdzKG1hcCk7CisKKyAgICAgICAgRW51bWVyYXRpb24gbWFwSXRlciA9IG1hcHMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKG1hcEl0ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCB0ZXN0TWFwID0gKEF0dHJpYnV0ZU1hcCkgbWFwSXRlci5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgT2JqZWN0IG5ld1ZhbHVlID0gbmV3IE9iamVjdCgpOworICAgICAgICAgICAgQXR0cmlidXRlTWFwIG5ld01hcCA9IHRlc3RNYXAuYWRkQXR0cmlidXRlKGF0dHJpYnV0ZXNbMF0sIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIGlmIChuZXdNYXAuZ2V0KGF0dHJpYnV0ZXNbMF0pICE9IG5ld1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIkRpZCBub3QgZ2V0IGV4cGVjdGVkIHZhbHVlIGJhY2suICBtYXA9IiArIG1hcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC91bml0L1Rlc3RBdHRyaWJ1dGVTZXQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvdW5pdC9UZXN0QXR0cmlidXRlU2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDA5NWZiNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvdW5pdC9UZXN0QXR0cmlidXRlU2V0LmphdmEKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGVzdEF0dHJpYnV0ZVNldC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjQwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGVzdC51bml0OworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlU2V0OworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKKworcHVibGljIGNsYXNzIFRlc3RBdHRyaWJ1dGVTZXQgZXh0ZW5kcyBUZXN0Rm13ayB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgICAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworCisgICAgICAgIG5ldyBUZXN0QXR0cmlidXRlU2V0KCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisKKyAgICAgICAgZmluYWwgT2JqZWN0IGVsZW0xID0gbmV3IE9iamVjdCgpOworICAgICAgICBmaW5hbCBPYmplY3QgZWxlbTIgPSBuZXcgRmxvYXQoNCk7CisgICAgICAgIGZpbmFsIE9iamVjdCBlbGVtMyA9ICJTdHJpbmciOworICAgICAgICBmaW5hbCBPYmplY3QgZWxlbTQgPSBCb29sZWFuLkZBTFNFOworCisgICAgICAgIEF0dHJpYnV0ZVNldCBzZXQxID0gbmV3IEF0dHJpYnV0ZVNldChuZXcgT2JqZWN0W10ge2VsZW0xLCBlbGVtMiwgZWxlbTN9KTsKKyAgICAgICAgaWYgKHNldDEuc2l6ZSgpICE9IDMpIHsKKyAgICAgICAgICAgIGVycmxuKCJTaXplIGlzIHdyb25nLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldDEuY29udGFpbnMoZWxlbTQpKXsKKyAgICAgICAgICAgIGVycmxuKCJTZXQgY29udGVudHMgYXJlIHdyb25nLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzZXQxLmNvbnRhaW5zKGVsZW0xKSkgeworICAgICAgICAgICAgZXJybG4oIlNldCBjb250ZW50cyBhcmUgd3JvbmcuIik7CisgICAgICAgIH0KKworICAgICAgICBBdHRyaWJ1dGVTZXQgc2V0MiA9IG5ldyBBdHRyaWJ1dGVTZXQoZWxlbTQpOworCisgICAgICAgIGlmIChzZXQyLnNpemUoKSAhPSAxKSB7CisgICAgICAgICAgICBlcnJsbigiU2l6ZSBpcyB3cm9uZy4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc2V0Mi5jb250YWlucyhlbGVtNCkpeworICAgICAgICAgICAgZXJybG4oIlNldCBjb250ZW50cyBhcmUgd3JvbmcuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0Mi5jb250YWlucyhlbGVtMSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJTZXQgY29udGVudHMgYXJlIHdyb25nLiIpOworICAgICAgICB9CisKKyAgICAgICAgRW51bWVyYXRpb24gaXRlciA9IHNldDIuZWxlbWVudHMoKTsKKyAgICAgICAgaWYgKCFpdGVyLm5leHRFbGVtZW50KCkuZXF1YWxzKGVsZW00KSkgeworICAgICAgICAgICAgZXJybG4oIkludmFsaWQgb2JqZWN0IGluIGl0ZXJhdG9yLiIpOworICAgICAgICB9CisKKyAgICAgICAgQXR0cmlidXRlU2V0IHVuaW9uID0gc2V0Mi51bmlvbldpdGgoc2V0MSk7CisgICAgICAgIGlmICghc2V0MS51bmlvbldpdGgoc2V0MikuZXF1YWxzKHVuaW9uKSkgeworICAgICAgICAgICAgZXJybG4oInVuaW9uV2l0aCBpcyBub3QgY29tbXV0YXRpdmUuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVuaW9uLmNvbnRhaW5zKGVsZW0xKSB8fCAhdW5pb24uY29udGFpbnMoZWxlbTQpKSB7CisgICAgICAgICAgICBlcnJsbigiU2V0IGNvbnRlbnRzIGFyZSB3cm9uZy4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc2V0MS5hZGRFbGVtZW50KGVsZW00KS5lcXVhbHModW5pb24pKSB7CisgICAgICAgICAgICBlcnJsbigiYWRkRWxlbWVudCBpcyB3cm9uZy4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdW5pb24uaW50ZXJzZWN0V2l0aChzZXQxKS5lcXVhbHMoc2V0MSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJpbnRlcnNlY3RXaXRoIGlzIHdyb25nLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1bmlvbi5zdWJ0cmFjdChzZXQxKS5lcXVhbHMoc2V0MikpIHsKKyAgICAgICAgICAgIGVycmxuKCJzdWJ0cmFjdCBpcyB3cm9uZy4iKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdEZvcm1hdHRlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC91bml0L1Rlc3RGb3JtYXR0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTIwMjEyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC91bml0L1Rlc3RGb3JtYXR0ZXIuamF2YQpAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGVzdEZvcm1hdHRlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjQwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGVzdC51bml0OworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuVGV4dEF0dHJpYnV0ZTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTVRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0YW5kYXJkVGFiUnVsZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlZFRleHQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRmb3JtYXQuVGV4dE9mZnNldDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRmb3JtYXQuTUZvcm1hdHRlcjsKKworaW1wb3J0IGphdmEuYXd0LkNvbG9yOworaW1wb3J0IGphdmEuYXd0LkZyYW1lOworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzOworaW1wb3J0IGphdmEuYXd0LkltYWdlOworaW1wb3J0IGphdmEuYXd0LlBvaW50OworaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKK2ltcG9ydCBqYXZhLmF3dC5Ub29sa2l0OworaW1wb3J0IGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworCitwdWJsaWMgZmluYWwgY2xhc3MgVGVzdEZvcm1hdHRlciBleHRlbmRzIFRlc3RGbXdrIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICAgICAgbmV3IFRlc3RGb3JtYXR0ZXIoKS5ydW4oYXJncyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUG9pbnQgT1JJR0lOID0gbmV3IFBvaW50KDAsIDApOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXR0cmlidXRlTWFwIERFRkFVTFRTOworICAgIHN0YXRpYyB7CisgICAgICAgIGZpbmFsIEZsb2F0IGZsb2F0WmVybyA9IG5ldyBGbG9hdCgwLjBmKTsKKworICAgICAgICBIYXNodGFibGUgZGVmYXVsdHMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLkZBTUlMWSwgIlNlcmlmIik7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLldFSUdIVCwgbmV3IEZsb2F0KDEuMGYpKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuUE9TVFVSRSwgZmxvYXRaZXJvKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuU0laRSwgbmV3IEZsb2F0KDE4LjBmKSk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLlNVUEVSU0NSSVBULCBuZXcgSW50ZWdlcigwKSk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLkZPUkVHUk9VTkQsIENvbG9yLmJsYWNrKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FLCBuZXcgSW50ZWdlcigtMSkpOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5TVFJJS0VUSFJPVUdILCBCb29sZWFuLkZBTFNFKTsKKworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5FWFRSQV9MSU5FX1NQQUNJTkcsIGZsb2F0WmVybyk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLkZJUlNUX0xJTkVfSU5ERU5ULCBmbG9hdFplcm8pOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5NSU5fTElORV9TUEFDSU5HLCBmbG9hdFplcm8pOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5MSU5FX0ZMVVNILCBUZXh0QXR0cmlidXRlLkZMVVNIX0xFQURJTkcpOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5MRUFESU5HX01BUkdJTiwgZmxvYXRaZXJvKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuVFJBSUxJTkdfTUFSR0lOLCBmbG9hdFplcm8pOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5UQUJfUlVMRVIsIG5ldyBTdGFuZGFyZFRhYlJ1bGVyKCkpOworCisgICAgICAgIERFRkFVTFRTID0gbmV3IEF0dHJpYnV0ZU1hcChkZWZhdWx0cyk7CisgICAgfQorICAgIAorICAgIC8vIGFyZyB0byB0ZXN0TGluZUV4Y2VwdGlvbnMKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5LTk9XTiA9IC0xOworCisgICAgcHJpdmF0ZSBHcmFwaGljcyBmR3JhcGhpY3M7CisKKyAgICBwdWJsaWMgVGVzdEZvcm1hdHRlcigpIHsKKworICAgICAgICBmR3JhcGhpY3MgPSBuZXcgQnVmZmVyZWRJbWFnZSgxMDAsIDEwMCwgQnVmZmVyZWRJbWFnZS5UWVBFXzNCWVRFX0JHUikuZ2V0R3JhcGhpY3MoKTsKKyAgICAgICAgCisgICAgICAgIC8vSkRLIDEuMToKKyAgICAgICAgLy9GcmFtZSBmID0gbmV3IEZyYW1lKCk7CisgICAgICAgIC8vZi5zaG93KCk7CisgICAgICAgIC8vZkdyYXBoaWNzID0gZi5nZXRHcmFwaGljcygpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGZpdmVMaW5lcyA9ICJhXG5iXG5jXG5kXG5lIjsKKyAgICBwcml2YXRlIFN0cmluZyB0d2VsdmVMaW5lcyA9IGZpdmVMaW5lcyArICJcbiIgKyBmaXZlTGluZXMgKyAiXG5mXG4iOworICAgIEF0dHJpYnV0ZU1hcCBQTEFJTiA9IEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQOworCisgICAgcHVibGljIHZvaWQgdGVzdCgpIHsKKworICAgICAgICBNQ29uc3RUZXh0IHRleHQgPSBuZXcgU3R5bGVkVGV4dChmaXZlTGluZXMsIFBMQUlOKTsKKyAgICAgICAgX3Rlc3RMaW5lRXhjZXB0aW9ucyhtYWtlRm9ybWF0dGVyKHRleHQsIDEwMCwgdHJ1ZSksIDUpOworICAgICAgICBfdGVzdExpbmVBY2Nlc3MobWFrZUZvcm1hdHRlcih0ZXh0LCAxMDAsIHRydWUpLCA1KTsKKworICAgICAgICB0ZXh0ID0gbmV3IFN0eWxlZFRleHQodHdlbHZlTGluZXMsIFBMQUlOKTsKKyAgICAgICAgX3Rlc3RMaW5lRXhjZXB0aW9ucyhtYWtlRm9ybWF0dGVyKHRleHQsIDMsIGZhbHNlKSwgMTIpOworICAgICAgICBfdGVzdExpbmVBY2Nlc3MobWFrZUZvcm1hdHRlcih0ZXh0LCAxMDAsIHRydWUpLCAxMik7CisKKyAgICAgICAgX3Rlc3RXaXRoTW9kaWZpY2F0aW9uKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIF90ZXN0V2l0aE1vZGlmaWNhdGlvbigpIHsKKworICAgICAgICBNVGV4dCB0ZXh0ID0gbmV3IFN0eWxlZFRleHQoZml2ZUxpbmVzLCBQTEFJTik7CisgICAgICAgIE1Gb3JtYXR0ZXIgZm9ybWF0dGVyID0gbWFrZUZvcm1hdHRlcih0ZXh0LCAxMDAsIHRydWUpOworICAgICAgICBSZWN0YW5nbGUgdmlld1JlY3QgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDEwMCwgSW50ZWdlci5NQVhfVkFMVUUpOworCisgICAgICAgIGZvcm1hdHRlci5zdG9wQmFja2dyb3VuZEZvcm1hdHRpbmcoKTsKKyAgICAgICAgdGV4dC5hcHBlbmQobmV3IFN0eWxlZFRleHQoIlxuIiwgUExBSU4pKTsKKyAgICAgICAgZm9ybWF0dGVyLnVwZGF0ZUZvcm1hdCh0ZXh0Lmxlbmd0aCgpLTEsIDEsIHZpZXdSZWN0LCBPUklHSU4pOworCisgICAgICAgIF90ZXN0TGluZUFjY2Vzcyhmb3JtYXR0ZXIsIDYpOworCisgICAgICAgIGZvcm1hdHRlci5zdG9wQmFja2dyb3VuZEZvcm1hdHRpbmcoKTsKKyAgICAgICAgdGV4dC5hcHBlbmQobmV3IFN0eWxlZFRleHQoImFkIiwgUExBSU4pKTsKKyAgICAgICAgZm9ybWF0dGVyLnVwZGF0ZUZvcm1hdCh0ZXh0Lmxlbmd0aCgpLTIsIDIsIHZpZXdSZWN0LCBPUklHSU4pOworICAgICAgICBfdGVzdExpbmVBY2Nlc3MoZm9ybWF0dGVyLCA2KTsKKyAgICAgICAgX3Rlc3RMaW5lRXhjZXB0aW9ucyhmb3JtYXR0ZXIsIDYpOworCisgICAgICAgIGZvcm1hdHRlci5zdG9wQmFja2dyb3VuZEZvcm1hdHRpbmcoKTsKKyAgICAgICAgdGV4dC5yZW1vdmUoMCwgMSk7CisgICAgICAgIGZvcm1hdHRlci51cGRhdGVGb3JtYXQoMCwgMCwgdmlld1JlY3QsIE9SSUdJTik7CisgICAgICAgIF90ZXN0TGluZUFjY2Vzcyhmb3JtYXR0ZXIsIDYpOworICAgICAgICBfdGVzdExpbmVFeGNlcHRpb25zKGZvcm1hdHRlciwgNik7CisgICAgfQorCisKKyAgICBwcml2YXRlIE1Gb3JtYXR0ZXIgbWFrZUZvcm1hdHRlcihNQ29uc3RUZXh0IHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVCb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHdyYXApIHsKKworICAgICAgICByZXR1cm4gTUZvcm1hdHRlci5jcmVhdGVGb3JtYXR0ZXIodGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR3JhcGhpY3MpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBfdGVzdExpbmVFeGNlcHRpb25zKE1Gb3JtYXR0ZXIgZm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bUxpbmVzKSB7CisKKyAgICAgICAgaWYgKG51bUxpbmVzID09IFVOS05PV04pIHsKKyAgICAgICAgICAgIG51bUxpbmVzID0gZm9ybWF0dGVyLmdldExpbmVDb3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBjYXVnaHQgPSBmYWxzZTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZm9ybWF0dGVyLmxpbmVSYW5nZUxvdyhudW1MaW5lcyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGNhdWdodCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNhdWdodCkgeworICAgICAgICAgICAgZXJybG4oIkRpZG4ndCBnZXQgZXhjZXB0aW9uIik7CisgICAgICAgIH0KKyAgICAgICAgY2F1Z2h0ID0gZmFsc2U7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZvcm1hdHRlci5saW5lUmFuZ2VMaW1pdChudW1MaW5lcyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGNhdWdodCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNhdWdodCkgeworICAgICAgICAgICAgZXJybG4oIkRpZG4ndCBnZXQgZXhjZXB0aW9uIik7CisgICAgICAgIH0KKyAgICAgICAgY2F1Z2h0ID0gZmFsc2U7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZvcm1hdHRlci5saW5lR3JhcGhpY1N0YXJ0KG51bUxpbmVzKzEpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBjYXVnaHQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjYXVnaHQpIHsKKyAgICAgICAgICAgIGVycmxuKCJEaWRuJ3QgZ2V0IGV4Y2VwdGlvbiIpOworICAgICAgICB9CisgICAgICAgIGNhdWdodCA9IGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBfdGVzdExpbmVBY2Nlc3MoTUZvcm1hdHRlciBmb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtTGluZXMpIHsKKworICAgICAgICBpZiAobnVtTGluZXMgPT0gVU5LTk9XTikgeworICAgICAgICAgICAgbnVtTGluZXMgPSBmb3JtYXR0ZXIuZ2V0TGluZUNvdW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9ybWF0dGVyLmxpbmVHcmFwaGljU3RhcnQoMCkgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oIkxpbmUgMCBkb2Vzbid0IHN0YXJ0IGF0IGhlaWdodCAwIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdHRlci5saW5lUmFuZ2VMb3coMCkgIT0gMCkgeworICAgICAgICAgICAgZXJybG4oIkxpbmUgMCBkb2Vzbid0IHN0YXJ0IGF0IGNoYXJhY3RlciAwIik7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbGFzdExpbWl0ID0gZm9ybWF0dGVyLmxpbmVSYW5nZUxpbWl0KDApOworICAgICAgICBmaW5hbCBpbnQgbGluZUJvdW5kID0gZm9ybWF0dGVyLmxpbmVCb3VuZCgpOworICAgICAgICBpbnRbXSBoaXRYID0gbmV3IGludFtdIHsgLTEsIDEsIGxpbmVCb3VuZCArIDIgfTsKKworICAgICAgICBUZXh0T2Zmc2V0IG9mZnNldCA9IG5ldyBUZXh0T2Zmc2V0KCk7CisKKyAgICAgICAgZm9yIChpbnQgaT0xOyBpIDwgbnVtTGluZXM7IGkrKykgeworCisgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gZm9ybWF0dGVyLmxpbmVHcmFwaGljU3RhcnQoaSk7CisgICAgICAgICAgICBpZiAobGFzdExpbWl0ICE9IGZvcm1hdHRlci5saW5lUmFuZ2VMb3coaSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigibGFzdExpbmUgbGltaXQgaXMgbm90IGN1cnJlbnQgbGluZSBzdGFydCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGxpbWl0ID0gZm9ybWF0dGVyLmxpbmVSYW5nZUxpbWl0KGkpOworCisgICAgICAgICAgICBpZiAobGltaXQgPCBsYXN0TGltaXQgfHwgKGxpbWl0ID09IGxhc3RMaW1pdCAmJiBpICE9IG51bUxpbmVzLTEpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oImxpbmUgaGFzIG5lZ2F0aXZlIG9yIDAgbGVuZ3RoIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBuZXh0SGVpZ2h0ID0gZm9ybWF0dGVyLmxpbmVHcmFwaGljU3RhcnQoaSsxKTsKKyAgICAgICAgICAgIGlmIChuZXh0SGVpZ2h0IDw9IGhlaWdodCkgeworICAgICAgICAgICAgICAgIGVycmxuKCIwLWhlaWdodCBsaW5lIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgaW5jQW1vdW50ID0gTWF0aC5tYXgoKG5leHRIZWlnaHQtaGVpZ2h0KS80LCAxKTsKKyAgICAgICAgICAgIGZvciAoaW50IGhpdFkgPSBoZWlnaHQ7IGhpdFkgPCBuZXh0SGVpZ2h0OyBoaXRZICs9IGluY0Ftb3VudCkgeworCisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlci5saW5lQXRIZWlnaHQoaGl0WSkgIT0gaSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigibGluZUF0SGVpZ2h0IGlzIHdyb25nIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgaGl0WC5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBmb3JtYXR0ZXIucG9pbnRUb1RleHRPZmZzZXQob2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdFhbal0sIGhpdFksIE9SSUdJTiwgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0LmZPZmZzZXQgPCBsYXN0TGltaXQgfHwgb2Zmc2V0LmZPZmZzZXQgPiBsaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkluY29uc2lzdGVudCBvZmZzZXQgZnJvbSBwb2ludFRvVGV4dE9mZnNldCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vaWYgKGZvcm1hdHRlci5saW5lQ29udGFpbmluZyhvZmZzZXQpICE9IGkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgaW50IGRlYnVnID0gZm9ybWF0dGVyLmxpbmVDb250YWluaW5nKG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIC8vICAgIGVycmxuKCJsaW5lQ29udGFpbmluZyBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsYXN0TGltaXQgPSBsaW1pdDsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdE1UZXh0LmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdE1UZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTkxYmZmOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvdW5pdC9UZXN0TVRleHQuamF2YQpAQCAtMCwwICsxLDcyMSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGVzdE1UZXh0LmphdmEsdiAkICRSZXZpc2lvbjogMS40ICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDAgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXN0LnVuaXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5UZXh0QXR0cmlidXRlOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZWRUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZU1vZGlmaWVyOworCitpbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBqYXZhLmlvLio7CisKK3B1YmxpYyBjbGFzcyBUZXN0TVRleHQgZXh0ZW5kcyBUZXN0Rm13ayB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworCisgICAgICAgIG5ldyBUZXN0TVRleHQoKS5ydW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVNUX0lURVJBVElPTlMgPSA1MDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVFlMRV9URVNUX0lURVJBVElPTlMgPSA1MDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgUkFORF9TRUVEID0gNTk4NDM2OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PVF9JTl9NT05LRVlfVEVTVCA9IC01MDAwOworICAgIHByaXZhdGUgaW50IHRlc3RJdGVyYXRpb24gPSBOT1RfSU5fTU9OS0VZX1RFU1Q7CisgICAgcHJpdmF0ZSBpbnQgdGhlQ2FzZSA9IE5PVF9JTl9NT05LRVlfVEVTVDsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHlsZU1vZGlmaWVyIGNyZWF0ZU1pbnVzTW9kaWZpZXIoZmluYWwgT2JqZWN0IGF0dHIpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHlsZU1vZGlmaWVyKCkgeworICAgICAgICAgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBtb2RpZnlTdHlsZShBdHRyaWJ1dGVNYXAgc3R5bGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUucmVtb3ZlQXR0cmlidXRlKGF0dHIpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisgICAgCisgICAgICAgIHNpbXBsZVRlc3QoKTsKKyAgICAgICAgc3R5bGVUZXN0KCk7CisgICAgICAgIG1vbmtleVRlc3QodHJ1ZSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNpbXBsZVRlc3QoKSB7CisKKyAgICAgICAgQXR0cmlidXRlTWFwIGJvbGRTdHlsZSA9IG5ldyBBdHRyaWJ1dGVNYXAoVGV4dEF0dHJpYnV0ZS5XRUlHSFQsIFRleHRBdHRyaWJ1dGUuV0VJR0hUX0JPTEQpOworICAgICAgICBBdHRyaWJ1dGVNYXAgaXRhbGljU3R5bGUgPSBuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuUE9TVFVSRSwgVGV4dEF0dHJpYnV0ZS5QT1NUVVJFX09CTElRVUUpOworCisgICAgICAgIE1Db25zdFRleHQgYWxsQm9sZCA9IG5ldyBTdHlsZWRUZXh0KCJiYmJiYiIsIGJvbGRTdHlsZSk7CisgICAgICAgIE1Db25zdFRleHQgYWxsSXRhbGljID0gbmV3IFN0eWxlZFRleHQoImlpaSIsIGl0YWxpY1N0eWxlKTsKKyAgICAgICAgTUNvbnN0VGV4dCBwbGFpbiA9IG5ldyBTdHlsZWRUZXh0KCJwcHBwcHAiLCBBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgTVRleHQgYnVmID0gbmV3IFN0eWxlZFRleHQoKTsKKyAgICAgICAgICAgIGludCB0cyA9IGJ1Zi5nZXRUaW1lU3RhbXAoKTsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoYWxsQm9sZCk7CisgICAgICAgICAgICBidWYuYXBwZW5kKGFsbEl0YWxpYyk7CisKKyAgICAgICAgICAgIGlmICh0cyA9PSBidWYuZ2V0VGltZVN0YW1wKCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiVGltZSBzdGFtcCBub3QgaW5jcmVtZW50ZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGJiYmJiaWlpIG5vdworCisgICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCgpICE9IGFsbEJvbGQubGVuZ3RoKCkgKyBhbGxJdGFsaWMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiTGVuZ3RoIGlzIHdyb25nLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidWYubGVuZ3RoKCk7IGkrKykgeworCisgICAgICAgICAgICAgICAgY2hhciByaWdodENoYXI7CisgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIHJpZ2h0U3R5bGU7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IGFsbEJvbGQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRDaGFyID0gYWxsQm9sZC5hdCgwKTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRTdHlsZSA9IGJvbGRTdHlsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0Q2hhciA9IGFsbEl0YWxpYy5hdCgwKTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRTdHlsZSA9IGl0YWxpY1N0eWxlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChidWYuYXQoaSkgIT0gcmlnaHRDaGFyKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJDaGFyYWN0ZXIgaXMgd3JvbmcuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYnVmLmNoYXJhY3RlclN0eWxlQXQoaSkuZXF1YWxzKHJpZ2h0U3R5bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJTdHlsZSBpcyB3cm9uZy4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBwb3MgPSAwOworCisgICAgICAgICAgICBpZiAoIWJ1Zi5jaGFyYWN0ZXJTdHlsZUF0KHBvcykuZXF1YWxzKGJvbGRTdHlsZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiRmlyc3Qgc3R5bGUgaXMgd3JvbmcuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnVmLmNoYXJhY3RlclN0eWxlTGltaXQocG9zKSAhPSBhbGxCb2xkLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlJ1biBsZW5ndGggaXMgd3JvbmcuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBvcyA9IGFsbEJvbGQubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGlmICghYnVmLmNoYXJhY3RlclN0eWxlQXQocG9zKS5lcXVhbHMoaXRhbGljU3R5bGUpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlNlY29uZCBzdHlsZSBpcyB3cm9uZy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChidWYuY2hhcmFjdGVyU3R5bGVMaW1pdChwb3MpICE9IGJ1Zi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJSdW4gbGVuZ3RoIGlzIHdyb25nLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVmLnJlc2V0RGFtYWdlZFJhbmdlKCk7CisgICAgICAgICAgICAgICAgaW50IG9sZExlbmd0aCA9IGJ1Zi5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBidWYucmVwbGFjZShidWYubGVuZ3RoKCksIGJ1Zi5sZW5ndGgoKSwgYWxsQm9sZCwgMCwgYWxsQm9sZC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgLy8gYmJiYmJpaWliYmJiYgorCisgICAgICAgICAgICAgICAgaWYgKGJ1Zi5kYW1hZ2VkUmFuZ2VTdGFydCgpICE9IG9sZExlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRGFtYWdlZCByYW5nZSBzdGFydCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGJ1Zi5kYW1hZ2VkUmFuZ2VMaW1pdCgpICE9IGJ1Zi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiRGFtYWdlZCByYW5nZSBsaW1pdCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBzdGFydCA9IGFsbEJvbGQubGVuZ3RoKCk7CisgICAgICAgICAgICBpbnQgbGltaXQgPSBzdGFydCArIGFsbEl0YWxpYy5sZW5ndGgoKTsKKyAgICAgICAgICAgIGJ1Zi5yZW1vdmUoc3RhcnQsIGxpbWl0KTsKKyAgICAgICAgICAgIC8vIGJiYmJiYmJiYmIKKworICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGgoKSAhPSAyICogYWxsQm9sZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJUZXh0IHNob3VsZCBiZSB0d2ljZSB0aGUgbGVuZ3RoIG9mIGJvbGQgdGV4dC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcG9zID0gYnVmLmxlbmd0aCgpIC8gMjsKKyAgICAgICAgICAgIGlmIChidWYuY2hhcmFjdGVyU3R5bGVTdGFydChwb3MpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYuY2hhcmFjdGVyU3R5bGVMaW1pdChwb3MpICE9IGJ1Zi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJSdW4gcmFuZ2UgaXMgd3JvbmcuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWJ1Zi5jaGFyYWN0ZXJTdHlsZUF0KHBvcykuZXF1YWxzKGJvbGRTdHlsZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiUnVuIHN0eWxlIGlzIHdyb25nLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cyA9IGJ1Zi5nZXRUaW1lU3RhbXAoKTsKKyAgICAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNJdGVyID0gYnVmLmNyZWF0ZUNoYXJhY3Rlckl0ZXJhdG9yKCk7CisgICAgICAgICAgICBmb3IgKGNoYXIgY2ggPSBjSXRlci5maXJzdCgpOyBjaCAhPSBjSXRlci5ET05FOyBjaCA9IGNJdGVyLm5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChjaCAhPSBhbGxCb2xkLmF0KDApKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJDaGFyYWN0ZXIgaXMgd3JvbmcuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHMgIT0gYnVmLmdldFRpbWVTdGFtcCgpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlRpbWUgc3RhbXAgc2hvdWxkIG5vdCBoYXZlIGNoYW5nZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVmLnJlcGxhY2UoMCwgMSwgcGxhaW4sIDAsIHBsYWluLmxlbmd0aCgpKTsKKworICAgICAgICAgICAgaWYgKHRzID09IGJ1Zi5nZXRUaW1lU3RhbXAoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJUaW1lIHN0YW1wIG5vdCBpbmNyZW1lbnRlZCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBwcHBwcHBiYmJiYmJiYmIKKyAgICAgICAgICAgIGJ1Zi5yZXBsYWNlKHBsYWluLmxlbmd0aCgpLCBidWYubGVuZ3RoKCksIGFsbEl0YWxpYywgMCwgYWxsSXRhbGljLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIC8vIHBwcHBwcGlpaQorCisgICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCgpICE9IGFsbEl0YWxpYy5sZW5ndGgoKStwbGFpbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJMZW5ndGggaXMgd3JvbmcuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBvcyA9IDA7CisgICAgICAgICAgICBpZiAoYnVmLmNoYXJhY3RlclN0eWxlTGltaXQocG9zKSAhPSBwbGFpbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJSdW4gbGltaXQgaXMgd3JvbmcuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBvcyA9IHBsYWluLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKGJ1Zi5jaGFyYWN0ZXJTdHlsZUxpbWl0KHBvcykgIT0gYnVmLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlJ1biBsaW1pdCBpcyB3cm9uZy4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVmLnJlcGxhY2UocGxhaW4ubGVuZ3RoKCksIHBsYWluLmxlbmd0aCgpLCBhbGxCb2xkLCAwLCBhbGxCb2xkLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIC8vIHBwcHBwcGJiYmJiaWlpCisKKyAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBzdCA9IGJ1Zi5jaGFyYWN0ZXJTdHlsZUF0KDEpOworICAgICAgICAgICAgaWYgKCFzdC5lcXVhbHMoQXR0cmlidXRlTWFwLkVNUFRZX0FUVFJJQlVURV9NQVApKSB7CisgICAgICAgICAgICAgICAgZXJybG4oIlN0eWxlIGlzIHdyb25nLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJ1Zi5jaGFyYWN0ZXJTdHlsZVN0YXJ0KDEpICE9IDAgfHwgYnVmLmNoYXJhY3RlclN0eWxlTGltaXQoMSkgIT0gcGxhaW4ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiU3R5bGUgc3RhcnQgaXMgd3JvbmcuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0ID0gYnVmLmNoYXJhY3RlclN0eWxlQXQoYnVmLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBpZiAoIXN0LmVxdWFscyhpdGFsaWNTdHlsZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiU3R5bGUgaXMgd3JvbmcuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnVmLmNoYXJhY3RlclN0eWxlU3RhcnQoYnVmLmxlbmd0aCgpIC0gMSkgIT0gcGxhaW4ubGVuZ3RoKCkrYWxsQm9sZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJTdHlsZSBzdGFydCBpcyB3cm9uZy4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1Zi5jaGFyYWN0ZXJTdHlsZUxpbWl0KGJ1Zi5sZW5ndGgoKSAtIDEpICE9IGJ1Zi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJTdHlsZSBsaW1pdCBpcyB3cm9uZy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGludCByYW5kSW50KFJhbmRvbSByYW5kLCBpbnQgbGltaXQpIHsKKworICAgICAgICByZXR1cm4gcmFuZEludChyYW5kLCAwLCBsaW1pdCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHJhbmRJbnQoUmFuZG9tIHJhbmQsIGludCBzdGFydCwgaW50IGxpbWl0KSB7CisKKyAgICAgICAgaWYgKHN0YXJ0ID4gbGltaXQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlJhbmdlIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGFydCA9PSBsaW1pdCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN0YXJ0ICsgKE1hdGguYWJzKHJhbmQubmV4dEludCgpKSUobGltaXQtc3RhcnQpKSA7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3R5bGVUZXN0KCkgeworCisgICAgICAgIE1UZXh0IHRleHQgPSBuZXcgU3R5bGVkVGV4dCgiMDEyMzQ1Njc4OSIsIEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQKTsKKworICAgICAgICBBdHRyaWJ1dGVNYXBbXSBzdHlsZXMgPSBuZXcgQXR0cmlidXRlTWFwW3RleHQubGVuZ3RoKCldOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHN0eWxlc1tpXSA9IEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQOworICAgICAgICB9CisgICAgICAgIEF0dHJpYnV0ZU1hcFtdIG9sZFN0eWxlcyA9IG5ldyBBdHRyaWJ1dGVNYXBbc3R5bGVzLmxlbmd0aF07CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3R5bGVzLCAwLCBvbGRTdHlsZXMsIDAsIHN0eWxlcy5sZW5ndGgpOworCisgICAgICAgIEF0dHJpYnV0ZU1hcCBiaWdTdHlsZSA9IG5ldyBBdHRyaWJ1dGVNYXAoVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkUsIFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FX09OKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGUoVGV4dEF0dHJpYnV0ZS5TSVpFLCBuZXcgRmxvYXQoMjMuMGYpKTsKKworICAgICAgICBTdHlsZU1vZGlmaWVyW10gbW9kaWZpZXJzID0geworICAgICAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVSZXBsYWNlTW9kaWZpZXIobmV3IEF0dHJpYnV0ZU1hcChUZXh0QXR0cmlidXRlLldFSUdIVCwgVGV4dEF0dHJpYnV0ZS5XRUlHSFRfQk9MRCkpLAorICAgICAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVBZGRNb2RpZmllcihuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuV0VJR0hULCBuZXcgRmxvYXQoMS4wZikpKSwKKyAgICAgICAgICAgIGNyZWF0ZU1pbnVzTW9kaWZpZXIoVGV4dEF0dHJpYnV0ZS5XRUlHSFQpLAorCisgICAgICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKG5ldyBBdHRyaWJ1dGVNYXAoVGV4dEF0dHJpYnV0ZS5QT1NUVVJFLCBuZXcgRmxvYXQoMC4wZikpKSwKKyAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIuY3JlYXRlUmVwbGFjZU1vZGlmaWVyKG5ldyBBdHRyaWJ1dGVNYXAoVGV4dEF0dHJpYnV0ZS5QT1NUVVJFLCBUZXh0QXR0cmlidXRlLlBPU1RVUkVfT0JMSVFVRSkpLAorICAgICAgICAgICAgY3JlYXRlTWludXNNb2RpZmllcihUZXh0QXR0cmlidXRlLlBPU1RVUkUpLAorCisgICAgICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKGJpZ1N0eWxlKSwKKyAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIuY3JlYXRlUmVwbGFjZU1vZGlmaWVyKGJpZ1N0eWxlKSwKKyAgICAgICAgICAgIGNyZWF0ZU1pbnVzTW9kaWZpZXIoYmlnU3R5bGUuZ2V0S2V5U2V0KCkpCisgICAgICAgIH07CisKKyAgICAgICAgUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKFJBTkRfU0VFRCk7CisgICAgICAgIGZpbmFsIGludCBzdG9wQXQgPSA0OworCisgICAgICAgIGZvciAoaW50IHRlc3RJdGVyYXRpb249MDsgdGVzdEl0ZXJhdGlvbiA8IFNUWUxFX1RFU1RfSVRFUkFUSU9OUyArIDE7IHRlc3RJdGVyYXRpb24rKykgeworCisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHN0eWxlcywgMCwgb2xkU3R5bGVzLCAwLCBzdHlsZXMubGVuZ3RoKTsKKworICAgICAgICAgICAgaW50IHN0YXJ0aW5nQXQgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKyAgICAgICAgICAgIGludCBlbmRpbmdBdCA9IEludGVnZXIuTUlOX1ZBTFVFOworICAgICAgICAgICAgaW50IG9sZFRzID0gdGV4dC5nZXRUaW1lU3RhbXAoKTsKKworICAgICAgICAgICAgLy8gaGFjayB3YXkgdG8gZG8gYW4gaW52YXJpYW50IGNoZWNrIGJlZm9yZSBzdGFydGluZy4uLgorICAgICAgICAgICAgaWYgKHRlc3RJdGVyYXRpb24gIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIG1vZGlmeSBzdHlsZXMKKyAgICAgICAgICAgICAgICB0ZXh0LnJlc2V0RGFtYWdlZFJhbmdlKCk7CisgICAgICAgICAgICAgICAgc3RhcnRpbmdBdCA9IHJhbmRJbnQocmFuZCwgc3R5bGVzLmxlbmd0aCsxKTsKKyAgICAgICAgICAgICAgICBlbmRpbmdBdCA9IHJhbmRJbnQocmFuZCwgc3RhcnRpbmdBdCwgc3R5bGVzLmxlbmd0aCsxKTsKKyAgICAgICAgICAgICAgICBTdHlsZU1vZGlmaWVyIG1vZGlmaWVyID0gbW9kaWZpZXJzW3JhbmRJbnQocmFuZCwgbW9kaWZpZXJzLmxlbmd0aCldOworCisgICAgICAgICAgICAgICAgaWYgKHRlc3RJdGVyYXRpb24gPT0gc3RvcEF0KSB7CisgICAgICAgICAgICAgICAgICAgIHRlc3RJdGVyYXRpb24gPSBzdG9wQXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHQubW9kaWZ5Q2hhcmFjdGVyU3R5bGVzKHN0YXJ0aW5nQXQsIGVuZGluZ0F0LCBtb2RpZmllcik7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqPXN0YXJ0aW5nQXQ7IGogPCBlbmRpbmdBdDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlc1tqXSA9IG1vZGlmaWVyLm1vZGlmeVN0eWxlKHN0eWxlc1tqXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjaGVjayBpbnZhcmlhbnRzCisgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgb2xkU3R5bGUgPSBudWxsOworICAgICAgICAgICAgaW50IHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICAgICAgZm9yIChpbnQgcnVuU3RhcnQgPSAwOyBydW5TdGFydCA8IHRleHRMZW5ndGg7KSB7CisKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgY3VycmVudFN0eWxlID0gdGV4dC5jaGFyYWN0ZXJTdHlsZUF0KHJ1blN0YXJ0KTsKKyAgICAgICAgICAgICAgICBpbnQgcnVuTGltaXQgPSB0ZXh0LmNoYXJhY3RlclN0eWxlTGltaXQocnVuU3RhcnQpOworICAgICAgICAgICAgICAgIGlmIChydW5TdGFydCA+PSBydW5MaW1pdCkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiUnVuIGxlbmd0aCBpcyBub3QgcG9zaXRpdmUiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdHlsZS5lcXVhbHMob2xkU3R5bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJTdHlsZXMgZGlkbid0IG1lcmdlIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpbnQgcG9zPXJ1blN0YXJ0OyBwb3MgPCBydW5MaW1pdDsgcG9zKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIGNoYXJTdHlsZUF0UG9zID0gdGV4dC5jaGFyYWN0ZXJTdHlsZUF0KHBvcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3R5bGUgIT0gY2hhclN0eWxlQXRQb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJJdGVyYXRvciBzdHlsZSBpcyBub3QgZXF1YWwgdG8gdGV4dCBzdHlsZSBhdCAiICsgcG9zICsgIi4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgZXhwZWN0ZWQgPSBzdHlsZXNbcG9zXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50U3R5bGUuZXF1YWxzKGV4cGVjdGVkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkl0ZXJhdG9yIHN0eWxlIGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgc3R5bGUgYXQgIiArIHBvcyArICIuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEodGV4dC5jaGFyYWN0ZXJTdHlsZVN0YXJ0KHBvcykgPT0gcnVuU3RhcnQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgISh0ZXh0LmNoYXJhY3RlclN0eWxlTGltaXQocG9zKSA9PSBydW5MaW1pdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJzdHlsZSBydW4gc3RhcnQgLyBsaW1pdCBpcyBub3QgY29uc2lzdGVudCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJ1blN0YXJ0ID0gcnVuTGltaXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGV4dExlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dC5jaGFyYWN0ZXJTdHlsZUF0KHRleHRMZW5ndGgpICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jaGFyYWN0ZXJTdHlsZUF0KHRleHRMZW5ndGgtMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIkNoYXJhY3RlciBzdHlsZXMgYXQgZW5kIGFyZW4ndCB0aGUgc2FtZSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2hlY2sgZGFtYWdlZCByYW5nZToKKyAgICAgICAgICAgIGludCBkYW1hZ2VTdGFydCA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgaW50IGRhbWFnZUxpbWl0ID0gSW50ZWdlci5NSU5fVkFMVUU7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCB0ZXh0TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0eWxlc1tpXS5lcXVhbHMob2xkU3R5bGVzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBkYW1hZ2VTdGFydCA9IE1hdGgubWluKGksIGRhbWFnZVN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgZGFtYWdlTGltaXQgPSBNYXRoLm1heChpKzEsIGRhbWFnZUxpbWl0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGFtYWdlU3RhcnQgIT0gdGV4dC5kYW1hZ2VkUmFuZ2VTdGFydCgpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtYWdlTGltaXQgIT0gdGV4dC5kYW1hZ2VkUmFuZ2VMaW1pdCgpKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIlRlc3QgaXRlcmF0aW9uOiAiICsgdGVzdEl0ZXJhdGlvbik7CisgICAgICAgICAgICAgICAgbG9nbG4oInN0YXJ0aW5nQXQ6ICIgKyBzdGFydGluZ0F0ICsgIjsgIGVuZGluZ0F0OiAiICsgZW5kaW5nQXQpOworICAgICAgICAgICAgICAgIGxvZ2xuKCJkYW1hZ2VTdGFydDogIiArIGRhbWFnZVN0YXJ0ICsgIjsgIGRhbWFnZUxpbWl0OiAiICsgZGFtYWdlTGltaXQpOworICAgICAgICAgICAgICAgIGxvZ2xuKCJ0ZXh0LnJhbmdlU3RhcnQ6ICIgKyB0ZXh0LmRhbWFnZWRSYW5nZVN0YXJ0KCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC5yYW5nZUxpbWl0OiAiICsgdGV4dC5kYW1hZ2VkUmFuZ2VMaW1pdCgpKTsKKyAgICAgICAgICAgICAgICBlcnJsbigiRGFtYWdlIHJhbmdlIHN0YXJ0IG9yIGxpbWl0IGlzIG5vdCBleHBlY3RlZCB2YWx1ZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGRhbWFnZUxpbWl0ID09IEludGVnZXIuTUlOX1ZBTFVFKSAhPSAob2xkVHMgPT0gdGV4dC5nZXRUaW1lU3RhbXAoKSkpIHsKKworICAgICAgICAgICAgICAgIGVycmxuKCJ0aW1lU3RhbXAgaXMgaW5jb3JyZWN0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBlcnIoU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAKKyAgICAgICAgaWYgKHRlc3RJdGVyYXRpb24gIT0gTk9UX0lOX01PTktFWV9URVNUKSB7CisgICAgICAgICAgICBtZXNzYWdlID0gInRlc3RJdGVyYXRpb249Iit0ZXN0SXRlcmF0aW9uKyI7IHRlc3RDYXNlPSIrdGhlQ2FzZSttZXNzYWdlOworICAgICAgICB9CisgICAgICAgIHN1cGVyLmVycihtZXNzYWdlKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBQZXJmb3JtIGEgcmFuZG9tIHNlcmllcyBvZiBvcGVyYXRpb25zIG9uIGFuIE1UZXh0IGFuZAorICAgICogY2hlY2sgdGhlIHJlc3VsdCBvZiBlYWNoIG9wZXJhdGlvbiBhZ2FpbnN0IGEgc2V0IG9mIGludmFyaWFudHMuCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb25rZXlUZXN0KGJvb2xlYW4gc3RyZWFtaW5nKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICAgIFlvdSBjYW4gYWRkIGFueSBvcGVyYXRpb24gdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgcHJvdmlkZWQgaXQKKyAgICAgICAgICAgIHByZXNlcnZlcyB0aGUgZm9sbG93aW5nIGludmFyaWFudHM6CisgICAgICAgICAgICAtIFRoZSBTdHJpbmcgcGxhaW5UZXh0IGNvbnRhaW5zIHRoZSBzYW1lIHRleHQgYXMgdGhlIFN0eWxlZFN0cmluZ0J1ZmZlci4KKyAgICAgICAgICAgICAgT2J2aW91c2x5LCBmb3IgdGhlIHRlc3QgdG8gYmUgbWVhbmluZ2Z1bCBwbGFpblRleHQgbXVzdCBiZSBjb21wdXRlZAorICAgICAgICAgICAgICBpbmRlcGVuZGVudGx5IG9mIHRoZSBidWZmZXIgKGllIGRvbid0IHdyaXRlOiAgcGxhaW5UZXh0ID0gYnVmLmdldFN0eWxlZFN0cmluZygpLnRvU3RyaW5nKCkpLgorICAgICAgICAgICAgLSBFdmVyeSAnYicgaXMgYm9sZCwgZXZlcnkgJ2knIGlzIGl0YWxpYywgZXZlcnkgJ3AnIGlzIHBsYWluLCBhbmQKKyAgICAgICAgICAgICAgbm8gb3RoZXIgY2hhcmFjdGVycyBhcHBlYXIgaW4gdGhlIHRleHQuCisgICAgICAgICovCisKKyAgICAgICAgQXR0cmlidXRlTWFwIGJvbGRBdHRycyA9IG5ldyBBdHRyaWJ1dGVNYXAoVGV4dEF0dHJpYnV0ZS5XRUlHSFQsIFRleHRBdHRyaWJ1dGUuV0VJR0hUX0JPTEQpOworICAgICAgICBBdHRyaWJ1dGVNYXAgaXRhbGljQXR0cnMgPSBuZXcgQXR0cmlidXRlTWFwKFRleHRBdHRyaWJ1dGUuUE9TVFVSRSwgVGV4dEF0dHJpYnV0ZS5QT1NUVVJFX09CTElRVUUpOworICAgICAgICBBdHRyaWJ1dGVNYXAgZW1wdHlBdHRycyA9IEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQOworCisgICAgICAgIGZpbmFsIFN0cmluZyBib2xkMVN0cl9nZXRTdHJpbmcgPSAiYiI7CisgICAgICAgIE1Db25zdFRleHQgYm9sZDFTdHIgPSBuZXcgU3R5bGVkVGV4dChib2xkMVN0cl9nZXRTdHJpbmcsIGJvbGRBdHRycyk7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIGl0YWxpYzFTdHJfZ2V0U3RyaW5nID0gImkiOworICAgICAgICBNQ29uc3RUZXh0IGl0YWxpYzFTdHIgPSBuZXcgU3R5bGVkVGV4dChpdGFsaWMxU3RyX2dldFN0cmluZywgaXRhbGljQXR0cnMpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBwbGFpbjFTdHJfZ2V0U3RyaW5nID0gInAiOworICAgICAgICBNQ29uc3RUZXh0IHBsYWluMVN0ciA9IG5ldyBTdHlsZWRUZXh0KHBsYWluMVN0cl9nZXRTdHJpbmcsIGVtcHR5QXR0cnMpOworCisgICAgICAgIFN0eWxlZFRleHQgdGVtcCA9IG5ldyBTdHlsZWRUZXh0KCk7CisgICAgICAgIHRlbXAuYXBwZW5kKGJvbGQxU3RyKTsKKyAgICAgICAgdGVtcC5hcHBlbmQoaXRhbGljMVN0cik7CisgICAgICAgIGZpbmFsIFN0cmluZyBib2xkSXRhbGljU3RyX2dldFN0cmluZyA9IGJvbGQxU3RyX2dldFN0cmluZy5jb25jYXQoaXRhbGljMVN0cl9nZXRTdHJpbmcpOworICAgICAgICBNQ29uc3RUZXh0IGJvbGRJdGFsaWNTdHIgPSB0ZW1wOworCisgICAgICAgIHRlbXAgPSBuZXcgU3R5bGVkVGV4dCgpOworICAgICAgICB0ZW1wLmFwcGVuZChib2xkMVN0cik7CisgICAgICAgIHRlbXAuYXBwZW5kKGJvbGQxU3RyKTsKKyAgICAgICAgdGVtcC5hcHBlbmQoYm9sZDFTdHIpOworICAgICAgICBmaW5hbCBTdHJpbmcgYm9sZDNTdHJfZ2V0U3RyaW5nID0gImJiYiI7CisgICAgICAgIE1Db25zdFRleHQgYm9sZDNTdHIgPSB0ZW1wOworCisgICAgICAgIE1UZXh0IGJ1ZiA9IG5ldyBTdHlsZWRUZXh0KCk7CisgICAgICAgIFN0cmluZyBwbGFpblRleHQgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIC8vaW50IHRlc3RJdGVyYXRpb249MDsgLSBub3cgaW5zdGFuY2UgdmFyaWFibGVzIHNvIGVycmxuIGNhbiByZXBvcnQgaXQKKyAgICAgICAgLy9pbnQgdGhlQ2FzZT0wOworCisgICAgICAgIGZpbmFsIGludCBOVU1fQ0FTRVMgPSAxNDsKKyAgICAgICAgYm9vbGVhbltdIGNhc2VzRXhlY3V0ZWQgPSBuZXcgYm9vbGVhbltOVU1fQ0FTRVNdOworICAgICAgICBmaW5hbCBpbnQgc3RvcEF0ID0gLTE7CisgICAgICAgIFJhbmRvbSByYW5kID0gbmV3IFJhbmRvbShSQU5EX1NFRUQpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBBTFdBWVNfRElGRkVSRU5UID0gIlx1RkVGRiI7CisKKyAgICAgICAgICAgIGZvciAodGVzdEl0ZXJhdGlvbj0wOyB0ZXN0SXRlcmF0aW9uIDwgVEVTVF9JVEVSQVRJT05TOyB0ZXN0SXRlcmF0aW9uKyspIHsKKworICAgICAgICAgICAgICAgIHRoZUNhc2UgPSByYW5kSW50KHJhbmQsIE5VTV9DQVNFUyk7CisKKyAgICAgICAgICAgICAgICBjYXNlc0V4ZWN1dGVkW3RoZUNhc2VdID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmICh0ZXN0SXRlcmF0aW9uID09IHN0b3BBdCkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0SXRlcmF0aW9uID0gc3RvcEF0OyAgLy8gQ29udmVuaWVudCBwbGFjZSB0byBwdXQgYnJlYWtwb2ludAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludCB0aW1lU3RhbXAgPSBidWYuZ2V0VGltZVN0YW1wKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFBsYWluVGV4dCA9IHBsYWluVGV4dDsKKyAgICAgICAgICAgICAgICBpZiAob2xkUGxhaW5UZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybG4oIm9sZFBsYWluVGV4dCBpcyBudWxsISIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCAodGhlQ2FzZSkgeworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgc3RyaW5nOyByZXBsYWNlIGNoYXJzIGF0IHN0YXJ0IHdpdGggZGlmZmVyZW50IHN0eWxlCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBuZXcgU3R5bGVkVGV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChib2xkM1N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYucmVwbGFjZSgwLCAxLCBpdGFsaWMxU3RyLCAwLCBpdGFsaWMxU3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5yZXBsYWNlKDAsIDAsIGl0YWxpYzFTdHIsIDAsIGl0YWxpYzFTdHIubGVuZ3RoKCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFpblRleHQgPSBib2xkM1N0cl9nZXRTdHJpbmcuc3Vic3RyaW5nKDEsIGJvbGQzU3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IGl0YWxpYzFTdHJfZ2V0U3RyaW5nLmNvbmNhdChwbGFpblRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gaXRhbGljMVN0cl9nZXRTdHJpbmcuY29uY2F0KHBsYWluVGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRQbGFpblRleHQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWYubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5yZXBsYWNlKDAsIDAsIGl0YWxpYzFTdHIsIDAsIGl0YWxpYzFTdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IGl0YWxpYzFTdHJfZ2V0U3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFBsYWluVGV4dCA9IEFMV0FZU19ESUZGRVJFTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBidWYucmVtb3ZlKGJ1Zi5sZW5ndGgoKS0xLCBidWYubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gcGxhaW5UZXh0LnN1YnN0cmluZygwLCBwbGFpblRleHQubGVuZ3RoKCktMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIHNvbWUgb2YgdGhlIGJ1ZmZlciB3aXRoIGJvbGRJdGFsaWNTdHIKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByU3RhcnQgPSByYW5kSW50KHJhbmQsIGJ1Zi5sZW5ndGgoKSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByU3RvcCA9IHJhbmRJbnQocmFuZCwgclN0YXJ0LCBidWYubGVuZ3RoKCkrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYucmVwbGFjZShyU3RhcnQsIHJTdG9wLCBib2xkSXRhbGljU3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmV3U3RyaW5nID0gKHJTdGFydD4wKT8gcGxhaW5UZXh0LnN1YnN0cmluZygwLCByU3RhcnQpIDogbmV3IFN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0cmluZyA9IG5ld1N0cmluZy5jb25jYXQoYm9sZEl0YWxpY1N0cl9nZXRTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyU3RvcCA8IHBsYWluVGV4dC5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RyaW5nID0gbmV3U3RyaW5nLmNvbmNhdChwbGFpblRleHQuc3Vic3RyaW5nKHJTdG9wLCBwbGFpblRleHQubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRQbGFpblRleHQgPSBBTFdBWVNfRElGRkVSRU5UOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IG5ld1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGVhdGVkbHkgaW5zZXJ0IHN0cmluZ3MgaW50byB0aGUgY2VudGVyIG9mIHRoZSBidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5zUG9zID0gYnVmLmxlbmd0aCgpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gcGxhaW5UZXh0LnN1YnN0cmluZygwLCBpbnNQb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdWZmaXggPSBwbGFpblRleHQuc3Vic3RyaW5nKGluc1BvcywgcGxhaW5UZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWlkZGxlID0gbmV3IFN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGlpPTA7IGlpPDQ7IGlpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNvbnN0VGV4dCB3aGljaCA9IChpaSUyPT0wKT8gYm9sZEl0YWxpY1N0ciA6IGJvbGQzU3RyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgd2hpY2hTdHJpbmcgPSAoaWklMj09MCk/IGJvbGRJdGFsaWNTdHJfZ2V0U3RyaW5nIDogYm9sZDNTdHJfZ2V0U3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGVtcFBvcyA9IGluc1BvcyttaWRkbGUubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5pbnNlcnQodGVtcFBvcywgd2hpY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWRkbGUgPSBtaWRkbGUuY29uY2F0KHdoaWNoU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gcHJlZml4LmNvbmNhdChtaWRkbGUpLmNvbmNhdChzdWZmaXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFBsYWluVGV4dCA9IEFMV0FZU19ESUZGRVJFTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCBib2xkMVN0ciBhdCBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoYm9sZDFTdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gcGxhaW5UZXh0LmNvbmNhdChib2xkMVN0cl9nZXRTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWxQb3MgPSByYW5kSW50KHJhbmQsIGJ1Zi5sZW5ndGgoKS0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYucmVtb3ZlKGRlbFBvcywgZGVsUG9zKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IHBsYWluVGV4dC5zdWJzdHJpbmcoMCwgZGVsUG9zKS5jb25jYXQocGxhaW5UZXh0LnN1YnN0cmluZyhkZWxQb3MrMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLnJlcGxhY2UoMCwgMCwgcGxhaW4xU3RyLCAwLCBwbGFpbjFTdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IHBsYWluMVN0cl9nZXRTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgKGV4Y2VwdCB0aGUgZmlyc3QgY2hhcmFjdGVyKSB3aXRoIGl0c2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCA9IGJ1Zi5sZW5ndGgoKSA+IDE/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5yZXBsYWNlKHN0YXJ0LCBidWYubGVuZ3RoKCksIGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gcGxhaW5UZXh0LnN1YnN0cmluZygwLCBzdGFydCkuY29uY2F0KHBsYWluVGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkUGxhaW5UZXh0ID0gQUxXQVlTX0RJRkZFUkVOVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgICAgIC8vIGFwcGVuZCB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byBpdHNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ29uc3RUZXh0IGNvbnRlbnQgPSBidWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmluc2VydChidWYubGVuZ3RoKCksIGNvbnRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IHBsYWluVGV4dC5jb25jYXQocGxhaW5UZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggYm9sZEl0YWxpY1N0citib2xkM1N0cgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UZXh0IHJlcGxhY2VtZW50ID0gbmV3IFN0eWxlZFRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5hcHBlbmQoYm9sZEl0YWxpY1N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQuYXBwZW5kKGJvbGQzU3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYucmVwbGFjZSgwLCBidWYubGVuZ3RoKCksIHJlcGxhY2VtZW50LCAwLCByZXBsYWNlbWVudC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gYm9sZEl0YWxpY1N0cl9nZXRTdHJpbmcuY29uY2F0KGJvbGQzU3RyX2dldFN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkUGxhaW5UZXh0ID0gQUxXQVlTX0RJRkZFUkVOVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgICAgICAgICAgLy8gaW5zZXJ0IGJvbGQxU3RyIGF0IGVuZCAtIHNhbWUgYXMgNCBidXQgdXNlcyBkaWZmZXJlbnQgQVBJCisgICAgICAgICAgICAgICAgICAgICAgICBidWYucmVwbGFjZShidWYubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkMVN0cl9nZXRTdHJpbmcudG9DaGFyQXJyYXkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkMVN0cl9nZXRTdHJpbmcubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkQXR0cnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gcGxhaW5UZXh0LmNvbmNhdChib2xkMVN0cl9nZXRTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmLnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRQbGFpblRleHQgPSBBTFdBWVNfRElGRkVSRU5UOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCAtIGRpZmZlcmVudCB3YXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5yZW1vdmUoMCwgYnVmLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9ICIiOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCAnaScgYXQgM3JkIGNoYXJhY3RlciAob3IgbGFzdCwgaWYgZmV3ZXIgdGhhbiAzIGNoYXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnNQb3MgPSBNYXRoLm1pbihidWYubGVuZ3RoKCksIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5yZXBsYWNlKGluc1BvcywgaW5zUG9zLCAnaScsIGl0YWxpY0F0dHJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpblRleHQgPSAocGxhaW5UZXh0LnN1YnN0cmluZygwLCBpbnNQb3MpKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXQoaXRhbGljMVN0cl9nZXRTdHJpbmcpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdChwbGFpblRleHQuc3Vic3RyaW5nKGluc1BvcykpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJvd2FibGUgZXJyb3IgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlc091dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0T3V0cHV0U3RyZWFtIG9iak91dCA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oYnl0ZXNPdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpPdXQud3JpdGVPYmplY3QoYnVmKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBieXRlc0luID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShieXRlc091dC50b0J5dGVBcnJheSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2JqSW4gPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oYnl0ZXNJbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IChNVGV4dCkgb2JqSW4ucmVhZE9iamVjdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRQbGFpblRleHQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJTdHJlYW1pbmcgcHJvYmxlbTogIiArIGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkludmFsaWQgY2FzZS4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aW1lIHN0YW1wIGlmIG9sZFBsYWluVGV4dCAhPSBudWxsLgorICAgICAgICAgICAgICAgIC8vIFRpbWUgc3RhbXAgc2hvdWxkIGJlIGRpZmZlcmVudCBpZmYKKyAgICAgICAgICAgICAgICAvLyBvbGRQbGFpblRleHQgPT0gcGxhaW5UZXh0CisgICAgICAgICAgICAgICAgaWYgKG9sZFBsYWluVGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgodGltZVN0YW1wPT1idWYuZ2V0VGltZVN0YW1wKCkpICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRQbGFpblRleHQuZXF1YWxzKHBsYWluVGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2xuKCJwbGFpblRleHQgaGFzaENvZGU6ICIgKyBwbGFpblRleHQuaGFzaENvZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dsbigib2xkUGxhaW5UZXh0IGhhc2hDb2RlOiAiICsgb2xkUGxhaW5UZXh0Lmhhc2hDb2RlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIlRpbWUgc3RhbXAgaXMgaW5jb3JyZWN0Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBub3cgY2hlY2sgaW52YXJpYW50czoKKyAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0Lmxlbmd0aCgpICE9IGJ1Zi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiTGVuZ3RocyBkb24ndCBtYXRjaCIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgaiA8IGJ1Zi5sZW5ndGgoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChidWYuYXQoaikgIT0gcGxhaW5UZXh0LmNoYXJBdChqKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkNoYXJhY3RlcnMgZG9uJ3QgbWF0Y2guIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnQ7CisgICAgICAgICAgICAgICAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgYnVmLmxlbmd0aCgpOykgeworCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCAhPSBidWYuY2hhcmFjdGVyU3R5bGVTdGFydChzdGFydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJzdHlsZSBzdGFydCBpcyB3cm9uZyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludCBsaW1pdCA9IGJ1Zi5jaGFyYWN0ZXJTdHlsZUxpbWl0KHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigic3RhcnQgPj0gbGltaXQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjaGFyIGN1cnJlbnQgPSBwbGFpblRleHQuY2hhckF0KHN0YXJ0KTsKKworICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgY29tcCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09ICdwJykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcCA9IGVtcHR5QXR0cnM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudCA9PSAnYicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAgPSBib2xkQXR0cnM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudCA9PSAnaScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAgPSBpdGFsaWNBdHRyczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJBbiBpbnZhbGlkIGNoYXJhY3RlciBzbnVjayBpbiEiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBzdGFydFN0eWxlID0gYnVmLmNoYXJhY3RlclN0eWxlQXQoc3RhcnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXAuZXF1YWxzKHN0YXJ0U3R5bGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiU3R5bGUgaXMgbm90IGV4cGVjdGVkIHN0eWxlLiIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHN0YXJ0OyBqIDwgbGltaXQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dC5jaGFyQXQoaikgIT0gY3VycmVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJDaGFyYWN0ZXIgZG9lc24ndCBtYXRjaCBzdHlsZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWYuY2hhcmFjdGVyU3R5bGVBdChqKSAhPSBzdGFydFN0eWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkluY29ycmVjdCBzdHlsZSBpbiBydW4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChsaW1pdCA8IGJ1Zi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dC5jaGFyQXQobGltaXQpID09IGN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiU3R5bGUgcnVuIGVuZHMgdG9vIHNvb24uIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBsaW1pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IGJ1Zi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJsbigiTGFzdCBsaW1pdCBpcyBub3QgYnVmZmVyIGxlbmd0aC4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyB3b24ndCB0cnkgdG8gY29tcHV0ZSBhbmQgY2hlY2sgZGFtYWdlZCByYW5nZTsgIGhvd2V2ZXIsCisgICAgICAgICAgICAgICAgLy8gaWYgbm9uZW1wdHkgaXQgc2hvdWxkIGFsd2F5cyBiZSB3aXRoaW4gdGV4dAorICAgICAgICAgICAgICAgIGludCBkYW1hZ2VTdGFydCA9IGJ1Zi5kYW1hZ2VkUmFuZ2VTdGFydCgpOworICAgICAgICAgICAgICAgIGludCBkYW1hZ2VMaW1pdCA9IGJ1Zi5kYW1hZ2VkUmFuZ2VMaW1pdCgpOworICAgICAgICAgICAgICAgIGlmIChkYW1hZ2VTdGFydCA9PSBJbnRlZ2VyLk1BWF9WQUxVRSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGFtYWdlTGltaXQgIT0gSW50ZWdlci5NSU5fVkFMVUUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycmxuKCJJbnZhbGlkIGVtcHR5IGludGVydmFsIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYW1hZ2VTdGFydCA+IGRhbWFnZUxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJsbigiRGFtYWdlIHJhbmdlIGludmVydGVkIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhbWFnZVN0YXJ0IDwgMCB8fCBkYW1hZ2VMaW1pdCA+IGJ1Zi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybG4oIkRhbWFnZSByYW5nZSBlbmRwb2ludCBvdXQgb2YgYm91bmRzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgdGVzdEl0ZXJhdGlvbiA9IE5PVF9JTl9NT05LRVlfVEVTVDsKKyAgICAgICAgCisgICAgICAgIGJvb2xlYW4gYWxsQ2FzZXNFeGVjdXRlZCA9IHRydWU7CisgICAgICAgIGZvciAoaW50IGluZGV4PTA7IGluZGV4IDwgTlVNX0NBU0VTOyBpbmRleCsrKSB7CisgICAgICAgICAgICBhbGxDYXNlc0V4ZWN1dGVkICY9IGNhc2VzRXhlY3V0ZWRbaW5kZXhdOworICAgICAgICAgICAgaWYgKGNhc2VzRXhlY3V0ZWRbaW5kZXhdID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgbG9nbG4oIkNhc2UgIiArIGluZGV4ICsgIiBub3QgZXhlY3V0ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy9pZiAoYWxsQ2FzZXNFeGVjdXRlZCkgeworICAgICAgICAvLyAgICBsb2dsbigiQWxsIGNhc2VzIGV4ZWN1dGVkLiIpOworICAgICAgICAvL30KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC91bml0L1Rlc3RNVGV4dFN0cmVhbWluZy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGVzdC91bml0L1Rlc3RNVGV4dFN0cmVhbWluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5YmRkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdE1UZXh0U3RyZWFtaW5nLmphdmEKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRlc3RNVGV4dFN0cmVhbWluZy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjQwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGVzdC51bml0OworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEZtd2s7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTVRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0YW5kYXJkVGFiUnVsZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlZFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuVGV4dEF0dHJpYnV0ZTsKKworcHVibGljIGNsYXNzIFRlc3RNVGV4dFN0cmVhbWluZyBleHRlbmRzIFRlc3RGbXdrIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgICAgICAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICAgICAgbmV3IFRlc3RNVGV4dFN0cmVhbWluZygpLnJ1bihhcmdzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgVGVzdE1UZXh0U3RyZWFtaW5nKCkgeworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3QoKSB7CisKKyAgICAgICAgc2ltcGxlVGVzdCgpOworICAgICAgICBhbGxBdHRyaWJ1dGVzVGVzdCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzaW1wbGVUZXN0KCkgeworCisgICAgICAgIEF0dHJpYnV0ZU1hcCBzdHlsZSA9IEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQOworICAgICAgICBNVGV4dCB0ZXh0ID0gbmV3IFN0eWxlZFRleHQoIkhlbGxvIHdvcmxkISIsIHN0eWxlKTsKKworICAgICAgICBzdHJlYW1BbmRDb21wYXJlKHRleHQpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFRlc3RNb2RpZmllciBleHRlbmRzIFN0eWxlTW9kaWZpZXIgeworCisgICAgICAgIHByaXZhdGUgT2JqZWN0IGZLZXk7CisgICAgICAgIHByaXZhdGUgT2JqZWN0IGZWYWx1ZTsKKworICAgICAgICBwdWJsaWMgQXR0cmlidXRlTWFwIG1vZGlmeVN0eWxlKEF0dHJpYnV0ZU1hcCBzdHlsZSkgeworCisgICAgICAgICAgICByZXR1cm4gc3R5bGUuYWRkQXR0cmlidXRlKGZLZXksIGZWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBUZXN0TW9kaWZpZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSB7CisKKyAgICAgICAgICAgIGZLZXkgPSBrZXk7CisgICAgICAgICAgICBmVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhbGxBdHRyaWJ1dGVzVGVzdCgpIHsKKworICAgICAgICBBdHRyaWJ1dGVNYXAgc3R5bGUgPSBBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUDsKKyAgICAgICAgTVRleHQgdGV4dCA9IG5ldyBTdHlsZWRUZXh0KCJIZWxsbyB3b3JsZCEiLCBzdHlsZSk7CisKKyAgICAgICAgaW50IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBDSEFSQUNURVIgPSB0cnVlOworICAgICAgICBmaW5hbCBib29sZWFuIFBBUkFHUkFQSCA9IGZhbHNlOworCisgICAgICAgIGFkZFN0eWxlKHRleHQsIDAsIGxlbmd0aC8yLCBUZXh0QXR0cmlidXRlLkZBTUlMWSwgIlRpbWVzIiwgQ0hBUkFDVEVSKTsKKyAgICAgICAgYWRkU3R5bGUodGV4dCwgbGVuZ3RoLzIsIGxlbmd0aCwgVGV4dEF0dHJpYnV0ZS5XRUlHSFQsIFRleHRBdHRyaWJ1dGUuV0VJR0hUX0JPTEQsIENIQVJBQ1RFUik7CisgICAgICAgIGFkZFN0eWxlKHRleHQsIDAsIGxlbmd0aC8yLCBUZXh0QXR0cmlidXRlLlBPU1RVUkUsIFRleHRBdHRyaWJ1dGUuUE9TVFVSRV9PQkxJUVVFLCBDSEFSQUNURVIpOworICAgICAgICBhZGRTdHlsZSh0ZXh0LCAwLCBsZW5ndGgvMiwgVGV4dEF0dHJpYnV0ZS5TSVpFLCBuZXcgRmxvYXQoMTMuN2YpLCBDSEFSQUNURVIpOworICAgICAgICBhZGRTdHlsZSh0ZXh0LCBsZW5ndGgvMiwgbGVuZ3RoLCBUZXh0QXR0cmlidXRlLlNVUEVSU0NSSVBULCBUZXh0QXR0cmlidXRlLlNVUEVSU0NSSVBUX1NVQiwgQ0hBUkFDVEVSKTsKKyAgICAgICAgYWRkU3R5bGUodGV4dCwgMCwgbGVuZ3RoLzIsIFRleHRBdHRyaWJ1dGUuRk9SRUdST1VORCwgQ29sb3IuYmx1ZSwgQ0hBUkFDVEVSKTsKKyAgICAgICAgYWRkU3R5bGUodGV4dCwgMCwgbGVuZ3RoLzIsIFRleHRBdHRyaWJ1dGUuQkFDS0dST1VORCwgQ29sb3IucmVkLCBDSEFSQUNURVIpOworICAgICAgICBhZGRTdHlsZSh0ZXh0LCAwLCBsZW5ndGgtMSwgVGV4dEF0dHJpYnV0ZS5TVFJJS0VUSFJPVUdILCBCb29sZWFuLlRSVUUsIENIQVJBQ1RFUik7CisKKyAgICAgICAgYWRkU3R5bGUodGV4dCwgMCwgbGVuZ3RoLCBUZXh0QXR0cmlidXRlLkVYVFJBX0xJTkVfU1BBQ0lORywgbmV3IEZsb2F0KDQpLCBQQVJBR1JBUEgpOworICAgICAgICBhZGRTdHlsZSh0ZXh0LCAwLCBsZW5ndGgsIFRleHRBdHRyaWJ1dGUuRklSU1RfTElORV9JTkRFTlQsIG5ldyBGbG9hdCg2KSwgUEFSQUdSQVBIKTsKKyAgICAgICAgYWRkU3R5bGUodGV4dCwgMCwgbGVuZ3RoLCBUZXh0QXR0cmlidXRlLk1JTl9MSU5FX1NQQUNJTkcsIG5ldyBGbG9hdCg3KSwgUEFSQUdSQVBIKTsKKyAgICAgICAgYWRkU3R5bGUodGV4dCwgMCwgbGVuZ3RoLCBUZXh0QXR0cmlidXRlLkxJTkVfRkxVU0gsIFRleHRBdHRyaWJ1dGUuRkxVU0hfVFJBSUxJTkcsIFBBUkFHUkFQSCk7CisgICAgICAgIGFkZFN0eWxlKHRleHQsIDAsIGxlbmd0aCwgVGV4dEF0dHJpYnV0ZS5MRUFESU5HX01BUkdJTiwgbmV3IEZsb2F0KDkpLCBQQVJBR1JBUEgpOworICAgICAgICBhZGRTdHlsZSh0ZXh0LCAwLCBsZW5ndGgsIFRleHRBdHRyaWJ1dGUuVFJBSUxJTkdfTUFSR0lOLCBuZXcgRmxvYXQoOSksIFBBUkFHUkFQSCk7CisgICAgICAgIGFkZFN0eWxlKHRleHQsIDAsIGxlbmd0aCwgVGV4dEF0dHJpYnV0ZS5UQUJfUlVMRVIsIG5ldyBTdGFuZGFyZFRhYlJ1bGVyKCksIFBBUkFHUkFQSCk7CisKKyAgICAgICAgc3RyZWFtQW5kQ29tcGFyZSh0ZXh0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFN0eWxlKE1UZXh0IHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBjaGFyYWN0ZXIpIHsKKworICAgICAgICBTdHlsZU1vZGlmaWVyIG1vZGlmaWVyID0gbmV3IFRlc3RNb2RpZmllcihrZXksIHZhbHVlKTsKKworICAgICAgICBpZiAoY2hhcmFjdGVyKSB7CisgICAgICAgICAgICB0ZXh0Lm1vZGlmeUNoYXJhY3RlclN0eWxlcyhzdGFydCwgbGltaXQsIG1vZGlmaWVyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRleHQubW9kaWZ5UGFyYWdyYXBoU3R5bGVzKHN0YXJ0LCBsaW1pdCwgbW9kaWZpZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RyZWFtQW5kQ29tcGFyZShNVGV4dCB0ZXh0KSB7CisKKyAgICAgICAgVGhyb3dhYmxlIGVycm9yID0gbnVsbDsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzT3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICAgICAgT2JqZWN0T3V0cHV0U3RyZWFtIG9iak91dCA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oYnl0ZXNPdXQpOworICAgICAgICAgICAgb2JqT3V0LndyaXRlT2JqZWN0KHRleHQpOworCisgICAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBieXRlc0luID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYnl0ZXNPdXQudG9CeXRlQXJyYXkoKSk7CisgICAgICAgICAgICBPYmplY3RJbnB1dFN0cmVhbSBvYmpJbiA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShieXRlc0luKTsKKyAgICAgICAgICAgIE1UZXh0IHN0cmVhbWVkVGV4dCA9IChNVGV4dCkgb2JqSW4ucmVhZE9iamVjdCgpOworICAgICAgICAgICAgaWYgKCFpc0VxdWFsKHRleHQsIHN0cmVhbWVkVGV4dCkpIHsKKyAgICAgICAgICAgICAgICBpc0VxdWFsKHRleHQsIHN0cmVhbWVkVGV4dCk7CisgICAgICAgICAgICAgICAgZXJybG4oIlN0cmVhbWVkIHRleHQgaXMgbm90IGVxdWFsIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKy8qICAgICAgICBjYXRjaChPcHRpb25hbERhdGFFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJyb3IgPSBlOworICAgICAgICB9CisgICAgICAgIGNhdGNoKFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0qLworICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgZXJyb3IucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBlcnJsbigiU2VyaWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFcXVhbChNVGV4dCBsaHMsIE1UZXh0IHJocykgeworCisgICAgICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3Rlc3QvdW5pdC9UZXN0UGFyYWdyYXBoU3R5bGVzLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdFBhcmFncmFwaFN0eWxlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzMzViNDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXN0L3VuaXQvVGVzdFBhcmFncmFwaFN0eWxlcy5qYXZhCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBUZXN0UGFyYWdyYXBoU3R5bGVzLmphdmEsdiAkICRSZXZpc2lvbjogMS4zICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDEgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXN0LnVuaXQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYudGVzdC5UZXN0Rm13azsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZWRUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NVGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworcHVibGljIGZpbmFsIGNsYXNzIFRlc3RQYXJhZ3JhcGhTdHlsZXMgZXh0ZW5kcyBUZXN0Rm13ayB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgICAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworCisgICAgICAgIG5ldyBUZXN0UGFyYWdyYXBoU3R5bGVzKCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSQU5EX1NFRUQgPSAxMjM0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1fVEVTVFMgPSAyNTAwOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1BhcmFncmFwaEJyZWFrKGNoYXIgYykgeworCisgICAgICAgIHJldHVybiBjID09J1x1MjAyOScgfHwgYyA9PSAnXG4nOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdCBLRVkgPSAiS0VZIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVNYXAgUExBSU4gPSBBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVNYXAgQV9TVFlMRSA9IG5ldyBBdHRyaWJ1dGVNYXAoS0VZLCBuZXcgQ2hhcmFjdGVyKCdhJykpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0eWxlTW9kaWZpZXIgQV9NT0QgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIuY3JlYXRlUmVwbGFjZU1vZGlmaWVyKEFfU1RZTEUpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF0dHJpYnV0ZU1hcCBCX1NUWUxFID0gbmV3IEF0dHJpYnV0ZU1hcChLRVksIG5ldyBDaGFyYWN0ZXIoJ2InKSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3R5bGVNb2RpZmllciBCX01PRCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVSZXBsYWNlTW9kaWZpZXIoQl9TVFlMRSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXR0cmlidXRlTWFwIENfU1RZTEUgPSBuZXcgQXR0cmlidXRlTWFwKEtFWSwgbmV3IENoYXJhY3RlcignYycpKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHlsZU1vZGlmaWVyIENfTU9EID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZU1vZGlmaWVyLmNyZWF0ZVJlcGxhY2VNb2RpZmllcihDX1NUWUxFKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVNYXAgRF9TVFlMRSA9IG5ldyBBdHRyaWJ1dGVNYXAoS0VZLCBuZXcgQ2hhcmFjdGVyKCdkJykpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0eWxlTW9kaWZpZXIgRF9NT0QgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIuY3JlYXRlUmVwbGFjZU1vZGlmaWVyKERfU1RZTEUpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF0dHJpYnV0ZU1hcCBFX1NUWUxFID0gbmV3IEF0dHJpYnV0ZU1hcChLRVksIG5ldyBDaGFyYWN0ZXIoJ2UnKSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3R5bGVNb2RpZmllciBFX01PRCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVNb2RpZmllci5jcmVhdGVSZXBsYWNlTW9kaWZpZXIoRV9TVFlMRSk7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworCisgICAgICAgIGVhc3lUZXN0cygpOworICAgICAgICByYW5kb21UZXN0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVhc3lUZXN0cygpIHsKKworICAgICAgICBNVGV4dCB0ZXh0ID0gbmV3IFN0eWxlZFRleHQoImFcbmJcbmNcbmRcbiIsIFBMQUlOKTsKKyAgICAgICAgdGV4dC5tb2RpZnlQYXJhZ3JhcGhTdHlsZXMoMCwgdGV4dC5sZW5ndGgoKSwgQV9NT0QpOworICAgICAgICB2ZXJpZnlQYXJhZ3JhcGhDb3VudCh0ZXh0KTsKKworICAgICAgICBNVGV4dCBzcmMgPSBuZXcgU3R5bGVkVGV4dCgiWFhYXG5ZWVkiLCBQTEFJTik7CisgICAgICAgIHNyYy5tb2RpZnlQYXJhZ3JhcGhTdHlsZXMoMCwgc3JjLmxlbmd0aCgpLCBCX01PRCk7CisgICAgICAgIHZlcmlmeVBhcmFncmFwaENvdW50KHNyYyk7CisKKyAgICAgICAgTVRleHQgdGVtcCA9IHRleHQuZXh0cmFjdFdyaXRhYmxlKDAsIHRleHQubGVuZ3RoKCkpOworICAgICAgICB0ZW1wLmFwcGVuZChzcmMpOworICAgICAgICB2ZXJpZnlQYXJhZ3JhcGhDb3VudCh0ZW1wKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdGV4dC5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXRlbXAucGFyYWdyYXBoU3R5bGVBdChpKS5lcXVhbHModGV4dC5wYXJhZ3JhcGhTdHlsZUF0KGkpKSkgeworICAgICAgICAgICAgICAgIGVycmxuKCJQYXJhZ3JhcGggc3R5bGVzIGFyZSB3cm9uZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNyYy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXRlbXAucGFyYWdyYXBoU3R5bGVBdChpK3RleHQubGVuZ3RoKCkpLmVxdWFscyhzcmMucGFyYWdyYXBoU3R5bGVBdChpKSkpIHsKKyAgICAgICAgICAgICAgICBlcnJsbigiUGFyYWdyYXBoIHN0eWxlcyBhcmUgd3JvbmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRlbXAgPSB0ZXh0LmV4dHJhY3RXcml0YWJsZSgwLCB0ZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgdGVtcC5yZXBsYWNlKDAsIDEsIHNyYywgMCwgc3JjLmxlbmd0aCgpKTsKKyAgICAgICAgdmVyaWZ5UGFyYWdyYXBoQ291bnQodGVtcCk7CisgICAgICAgIGlmICh0ZW1wLnBhcmFncmFwaExpbWl0KDApICE9IDQpIHsKKyAgICAgICAgICAgIGVycmxuKCJQYXJhZ3JhcGggbGltaXQgaXMgd3JvbmciKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRlbXAucGFyYWdyYXBoU3R5bGVBdCgwKS5lcXVhbHMoQl9TVFlMRSkpIHsKKyAgICAgICAgICAgIGVycmxuKCJGaXJzdCBzdHlsZSBpcyB3cm9uZyIpOworICAgICAgICB9CisgICAgICAgIGlmICghdGVtcC5wYXJhZ3JhcGhTdHlsZUF0KDQpLmVxdWFscyhBX1NUWUxFKSkgeworICAgICAgICAgICAgZXJybG4oIlN0eWxlIGFmdGVyIGluc2VydCBpcyB3cm9uZyIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdGVzdCBhcHBlbmQKKyAgICAgICAgTUNvbnN0VGV4dCBuZXdTcmMgPSBzcmMuZXh0cmFjdCg0LCA3KTsKKyAgICAgICAgTVRleHQgaW5pdEMgPSBuZXcgU3R5bGVkVGV4dCgiY2NjY2NjIiwgUExBSU4pOworICAgICAgICBpbml0Qy5tb2RpZnlQYXJhZ3JhcGhTdHlsZXMoMCwgaW5pdEMubGVuZ3RoKCksIENfTU9EKTsKKyAgICAgICAgaW5pdEMuYXBwZW5kKG5ld1NyYyk7CisgICAgICAgIC8vIG5vdyBpbml0QyBzaG91bGQgYmUgb25lIHBhcmFncmFwaCB3aXRoIHN0eWxlIEIKKyAgICAgICAgaWYgKGluaXRDLnBhcmFncmFwaExpbWl0KDApICE9IGluaXRDLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBlcnJsbigiU2hvdWxkIG9ubHkgYmUgb25lIHBhcmFncmFwaCIpOworICAgICAgICB9CisgICAgICAgIGlmIChpbml0Qy5wYXJhZ3JhcGhTdHlsZUF0KDApICE9IGluaXRDLnBhcmFncmFwaFN0eWxlQXQoaW5pdEMubGVuZ3RoKCkpKSB7CisgICAgICAgICAgICBlcnJsbigiVHdvIGRpZmZlcmVudCBwYXJhZ3JhcGggc3R5bGVzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpbml0Qy5wYXJhZ3JhcGhTdHlsZUF0KGluaXRDLmxlbmd0aCgpLzIpLmVxdWFscyhCX1NUWUxFKSkgeworICAgICAgICAgICAgZXJybG4oIkluY29ycmVjdCBwYXJhZ3JhcGggc3R5bGUiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGV4dCA9IG5ldyBTdHlsZWRUZXh0KCJhYWFcbiIsIFBMQUlOKTsKKyAgICAgICAgdGV4dC5tb2RpZnlQYXJhZ3JhcGhTdHlsZXMoMCwgdGV4dC5sZW5ndGgoKSwgQV9NT0QpOworICAgICAgICB0ZXh0Lm1vZGlmeVBhcmFncmFwaFN0eWxlcyh0ZXh0Lmxlbmd0aCgpLCB0ZXh0Lmxlbmd0aCgpLCBCX01PRCk7CisgICAgICAgIGlmICh0ZXh0LnBhcmFncmFwaFN0eWxlQXQodGV4dC5sZW5ndGgoKSkgIT0gQl9TVFlMRSkgeworICAgICAgICAgICAgZXJybG4oIjAtbGVuZ3RoIHBhcmFncmFwaCBhdCBlbmQgaGFzIGluY29ycmVjdCBzdHlsZSIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHJhbmRJbnQoUmFuZG9tIHJhbmQsIGludCBsaW1pdCkgeworCisgICAgICAgIHJldHVybiByYW5kSW50KHJhbmQsIDAsIGxpbWl0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgcmFuZEludChSYW5kb20gcmFuZCwgaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKKworICAgICAgICBpZiAoc3RhcnQgPiBsaW1pdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUmFuZ2UgaXMgMC1sZW5ndGguIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gbGltaXQpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGFydCArIChNYXRoLmFicyhyYW5kLm5leHRJbnQoKSklKGxpbWl0LXN0YXJ0KSkgOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByYW5kb21UZXN0KCkgeworCisgICAgICAgIE1UZXh0IG5vUGFyYWdyYXBoID0gbmV3IFN0eWxlZFRleHQoInp6enoiLCBQTEFJTik7CisgICAgICAgIG5vUGFyYWdyYXBoLm1vZGlmeVBhcmFncmFwaFN0eWxlcygwLCBub1BhcmFncmFwaC5sZW5ndGgoKSwgQV9NT0QpOworICAgICAgICBNVGV4dCB0d29QYXJhZ3JhcGhzID0gbmV3IFN0eWxlZFRleHQoImFhYVxuYmJiIiwgUExBSU4pOworICAgICAgICB0d29QYXJhZ3JhcGhzLm1vZGlmeVBhcmFncmFwaFN0eWxlcygwLCB0d29QYXJhZ3JhcGhzLnBhcmFncmFwaExpbWl0KDApLCBCX01PRCk7CisgICAgICAgIE1UZXh0IHRocmVlUGFyYWdyYXBocyA9IG5ldyBTdHlsZWRUZXh0KCJjY1xuZGRcbmVlIiwgUExBSU4pOworICAgICAgICB0aHJlZVBhcmFncmFwaHMubW9kaWZ5UGFyYWdyYXBoU3R5bGVzKDAsIDMsIENfTU9EKTsKKyAgICAgICAgdGhyZWVQYXJhZ3JhcGhzLm1vZGlmeVBhcmFncmFwaFN0eWxlcygzLCA2LCBEX01PRCk7CisgICAgICAgIHRocmVlUGFyYWdyYXBocy5tb2RpZnlQYXJhZ3JhcGhTdHlsZXMoNiwgOCwgRV9NT0QpOworICAgICAgICBNVGV4dCB0cmFpbGluZ1AxID0gbmV3IFN0eWxlZFRleHQoImhoaGhcbiIsIFBMQUlOKTsKKyAgICAgICAgdHJhaWxpbmdQMS5tb2RpZnlQYXJhZ3JhcGhTdHlsZXMoMCwgdHJhaWxpbmdQMS5wYXJhZ3JhcGhMaW1pdCgwKSwgQ19NT0QpOworICAgICAgICBNVGV4dCB0cmFpbGluZ1AyID0gbmV3IFN0eWxlZFRleHQoImlpaVxuIiwgUExBSU4pOworICAgICAgICB0cmFpbGluZ1AyLm1vZGlmeVBhcmFncmFwaFN0eWxlcygwLCAwLCBEX01PRCk7CisgICAgICAgIHRyYWlsaW5nUDIubW9kaWZ5UGFyYWdyYXBoU3R5bGVzKHRyYWlsaW5nUDIubGVuZ3RoKCksIHRyYWlsaW5nUDIubGVuZ3RoKCksIEJfTU9EKTsKKworICAgICAgICBpZiAoIXRyYWlsaW5nUDIucGFyYWdyYXBoU3R5bGVBdCh0cmFpbGluZ1AyLmxlbmd0aCgpLTEpLmVxdWFscyhEX1NUWUxFKSkgeworICAgICAgICAgICAgZXJybG4oIlN0eWxlIGluY29ycmVjdCBpbiB0cmFpbGluZ1AyIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0cmFpbGluZ1AyLnBhcmFncmFwaFN0eWxlQXQodHJhaWxpbmdQMi5sZW5ndGgoKSkuZXF1YWxzKEJfU1RZTEUpKSB7CisgICAgICAgICAgICBlcnJsbigiRW5kaW5nIHN0eWxlIGluY29ycmVjdCBpbiB0cmFpbGluZ1AyIik7CisgICAgICAgIH0KKworICAgICAgICBNQ29uc3RUZXh0W10gdGVzdHMgPSB7IG5vUGFyYWdyYXBoLCB0d29QYXJhZ3JhcGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWVQYXJhZ3JhcGhzLCB0cmFpbGluZ1AxLCB0cmFpbGluZ1AyIH07CisKKyAgICAgICAgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oUkFORF9TRUVEKTsKKworICAgICAgICBpbnQgc3RvcEF0ID0gNDY1OworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IE5VTV9URVNUUzsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICBpbnQgc3JjSW5kZXggPSByYW5kSW50KHJhbmRvbSwgdGVzdHMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0SW5kZXggPSByYW5kSW50KHJhbmRvbSwgdGVzdHMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBNVGV4dCB0YXJnZXQgPSBuZXcgU3R5bGVkVGV4dCh0ZXN0c1t0YXJnZXRJbmRleF0pOworICAgICAgICAgICAgICAgIE1Db25zdFRleHQgc3JjID0gdGVzdHNbc3JjSW5kZXhdOworCisgICAgICAgICAgICAgICAgaW50IHNyY1N0YXJ0ID0gcmFuZEludChyYW5kb20sIHNyYy5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgaW50IHNyY0xpbWl0ID0gcmFuZEludChyYW5kb20sIHNyY1N0YXJ0LCBzcmMubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGludCBzdGFydCA9IHJhbmRJbnQocmFuZG9tLCB0YXJnZXQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGludCBsaW1pdCA9IHJhbmRJbnQocmFuZG9tLCBzdGFydCwgdGFyZ2V0Lmxlbmd0aCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChpID09IHN0b3BBdCkgeworICAgICAgICAgICAgICAgICAgICBzdG9wQXQgPSBpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGluc2VydEFuZENoZWNrKHNyYywgc3JjU3RhcnQsIHNyY0xpbWl0LCB0YXJnZXQsIHN0YXJ0LCBsaW1pdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICBpZiAoaSA8IE5VTV9URVNUUykgeworICAgICAgICAgICAgICAgIGxvZ2xuKCJpdGVyYXRpb249IiArIGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluc2VydEFuZENoZWNrKE1Db25zdFRleHQgc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRleHQgdGFyZ2V0LCBpbnQgc3RhcnQsIGludCBsaW1pdCkgeworCisgICAgICAgIC8vIHAtc3R5bGUgYWZ0ZXIgaW5zZXJ0aW9uCisgICAgICAgIEF0dHJpYnV0ZU1hcCBhZnRlcjsKKyAgICAgICAgaWYgKGxpbWl0ID09IHRhcmdldC5sZW5ndGgoKSAmJiBzcmNMaW1pdCA+IHNyY1N0YXJ0KSB7CisgICAgICAgICAgICBhZnRlciA9IHNyYy5wYXJhZ3JhcGhTdHlsZUF0KHNyY0xpbWl0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0LnBhcmFncmFwaFN0eWxlQXQobGltaXQpOworICAgICAgICB9CisKKyAgICAgICAgQXR0cmlidXRlTWFwIGJlZm9yZTsKKyAgICAgICAgYm9vbGVhbiBzcmNIYXNQQnJlYWsgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgaT1zcmNTdGFydDsgaSA8IHNyY0xpbWl0OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmFncmFwaEJyZWFrKHNyYy5hdChpKSkpIHsKKyAgICAgICAgICAgICAgICBzcmNIYXNQQnJlYWsgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0YXJ0ID4gMCAmJiBpc1BhcmFncmFwaEJyZWFrKHRhcmdldC5hdChzdGFydC0xKSkpIHsKKyAgICAgICAgICAgIGJlZm9yZSA9IHRhcmdldC5wYXJhZ3JhcGhTdHlsZUF0KHN0YXJ0LTEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYmVmb3JlID0gc3JjSGFzUEJyZWFrPyBzcmMucGFyYWdyYXBoU3R5bGVBdChzcmNTdGFydCkgOiBhZnRlcjsKKyAgICAgICAgfQorICAgICAgICBib29sZWFuIHN0eWxlUHJvcG9nYXRlZCA9ICFiZWZvcmUuZXF1YWxzKHRhcmdldC5wYXJhZ3JhcGhTdHlsZUF0KE1hdGgubWF4KDAsIHN0YXJ0LTEpKSk7CisKKworICAgICAgICB0YXJnZXQucmVzZXREYW1hZ2VkUmFuZ2UoKTsKKyAgICAgICAgdGFyZ2V0LnJlcGxhY2Uoc3RhcnQsIGxpbWl0LCBzcmMsIHNyY1N0YXJ0LCBzcmNMaW1pdCk7CisgICAgICAgIGZpbmFsIGludCBkYW1hZ2VMaW1pdCA9IChzdGFydD09bGltaXQgJiYgc3JjU3RhcnQ9PXNyY0xpbWl0KT8KKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIuTUlOX1ZBTFVFIDogc3RhcnQgKyAoc3JjTGltaXQtc3JjU3RhcnQpOworCisgICAgICAgIGlmICh0YXJnZXQuZGFtYWdlZFJhbmdlTGltaXQoKSAhPSBkYW1hZ2VMaW1pdCkgeworICAgICAgICAgICAgbG9nbG4oImxpbWl0OiAiICsgZGFtYWdlTGltaXQgKyAiOyAgdGFyZ2V0LmxpbWl0OiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmRhbWFnZWRSYW5nZUxpbWl0KCkpOworICAgICAgICAgICAgZXJybG4oIkRhbWFnZWQgcmFuZ2UgbGltaXQgaXMgaW5jb3JyZWN0Iik7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgZGFtYWdlU3RhcnQgPSAoZGFtYWdlTGltaXQ9PUludGVnZXIuTUlOX1ZBTFVFKT8gSW50ZWdlci5NQVhfVkFMVUUgOgorICAgICAgICAgICAgICAgIChzdHlsZVByb3BvZ2F0ZWQ/IHRhcmdldC5wYXJhZ3JhcGhTdGFydChNYXRoLm1heCgwLCBzdGFydC0xKSkgOiBzdGFydCk7CisgICAgICAgIGlmICh0YXJnZXQuZGFtYWdlZFJhbmdlU3RhcnQoKSA+IGRhbWFnZVN0YXJ0KSB7CisgICAgICAgICAgICBsb2dsbigic3RhcnQ6ICIgKyBkYW1hZ2VTdGFydCArICI7ICB0YXJnZXQuc3RhcnQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGFtYWdlZFJhbmdlU3RhcnQoKSk7CisgICAgICAgICAgICBlcnJsbigiRGFtYWdlZCByYW5nZSBzdGFydCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcmlmeVBhcmFncmFwaENvdW50KHRhcmdldCk7CisKKyAgICAgICAgLy8gY2hlY2sgZW5kcG9pbnRzCisgICAgICAgIGlmICghYmVmb3JlLmVxdWFscyh0YXJnZXQucGFyYWdyYXBoU3R5bGVBdChNYXRoLm1heChzdGFydC0xLCAwKSkpKSB7CisgICAgICAgICAgICBlcnJsbigiSW5jb3JyZWN0IHBhcmFncmFwaCBzdHlsZSBiZWZvcmUgbW9kaWZpZWQgcmFuZ2UiKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBsZW5ndGhEZWx0YSA9IChzcmNMaW1pdC1zcmNTdGFydCkgLSAobGltaXQtc3RhcnQpOworICAgICAgICBpbnQgaW5kZXhBZnRlckluc2VydCA9IE1hdGgubWluKHRhcmdldC5sZW5ndGgoKSwgbGltaXQgKyBsZW5ndGhEZWx0YSk7CisgICAgICAgIGlmICghYWZ0ZXIuZXF1YWxzKHRhcmdldC5wYXJhZ3JhcGhTdHlsZUF0KGluZGV4QWZ0ZXJJbnNlcnQpKSkgeworICAgICAgICAgICAgZXJybG4oIkluY29ycmVjdCBwYXJhZ3JhcGggc3R5bGUgYWZ0ZXIgbW9kaWZpZWQgcmFuZ2UiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcmNIYXNQQnJlYWspIHsKKyAgICAgICAgICAgIGludCBzdGFydFAgPSB0YXJnZXQucGFyYWdyYXBoTGltaXQoc3RhcnQpOworICAgICAgICAgICAgaW50IGxpbWl0T2ZUZXN0ID0gdGFyZ2V0LnBhcmFncmFwaFN0YXJ0KGluZGV4QWZ0ZXJJbnNlcnQpOworCisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gc3RhcnQgLSBzcmNTdGFydDsKKworICAgICAgICAgICAgd2hpbGUgKHN0YXJ0UCA8IGxpbWl0T2ZUZXN0KSB7CisgICAgICAgICAgICAgICAgaW50IGxpbWl0UCA9IHRhcmdldC5wYXJhZ3JhcGhMaW1pdChzdGFydFApOworICAgICAgICAgICAgICAgIGlmIChzcmMucGFyYWdyYXBoTGltaXQoc3RhcnRQLW9mZnNldCkgKyBvZmZzZXQgIT0gbGltaXRQKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJwYXJhZ3JhcGggbGltaXRzIGFyZSBub3QgY29uc2lzdGVudCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXNyYy5wYXJhZ3JhcGhTdHlsZUF0KHN0YXJ0UC1vZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZXF1YWxzKHRhcmdldC5wYXJhZ3JhcGhTdHlsZUF0KHN0YXJ0UCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJwYXJhZ3JhcGggc3R5bGVzIGFyZSBub3QgY29uc2lzdGVudCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGFydFAgPSBsaW1pdFA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBpPXN0YXJ0OyBpIDwgc3RhcnQrKHNyY0xpbWl0LXNyY1N0YXJ0KTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhZnRlci5lcXVhbHModGFyZ2V0LnBhcmFncmFwaFN0eWxlQXQoaSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycmxuKCJwYXJhZ3JhcGggc3R5bGUgY2hhbmdlZCB1bmV4cGVjdGVkbHkiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmVyaWZ5UGFyYWdyYXBoQ291bnQoTUNvbnN0VGV4dCB0ZXh0KSB7CisKKyAgICAgICAgaW50IHBDb3VudCA9IDA7CisgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKworICAgICAgICBpZiAodGV4dExlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICBwQ291bnQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQgcz0wOyBzIDwgdGV4dExlbmd0aDsgcyA9IHRleHQucGFyYWdyYXBoTGltaXQocykpIHsKKyAgICAgICAgICAgICAgICBwQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc1BhcmFncmFwaEJyZWFrKHRleHQuYXQodGV4dExlbmd0aC0xKSkpIHsKKyAgICAgICAgICAgICAgICBwQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludCBzZXBDb3VudCA9IDA7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHRleHRMZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGlzUGFyYWdyYXBoQnJlYWsodGV4dC5hdChpKSkpIHsKKyAgICAgICAgICAgICAgICBzZXBDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlcENvdW50ICsgMSAhPSBwQ291bnQpIHsKKyAgICAgICAgICAgIGxvZ2xuKCJzZXBDb3VudD0iICsgc2VwQ291bnQgKyAiOyAgcENvdW50PSIgKyBwQ291bnQpOworICAgICAgICAgICAgZXJybG4oIlBhcmFncmFwaCBjb3VudCBpcyBub3QgY29uc2lzdGVudCB3aXRoIGNoYXJhY3RlcnMiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjaGVja0VuZHBvaW50KE1Db25zdFRleHQgdGV4dCkgeworCisgICAgICAgIGJvb2xlYW4gZW1wdHlGaW5hbFBhcmFncmFwaDsKKyAgICAgICAgaW50IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisKKyAgICAgICAgaWYgKGxlbmd0aCAhPSAwKSB7CisgICAgICAgICAgICBjaGFyIGNoID0gdGV4dC5hdChsZW5ndGgtMSk7CisgICAgICAgICAgICBlbXB0eUZpbmFsUGFyYWdyYXBoID0gaXNQYXJhZ3JhcGhCcmVhayhjaCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbXB0eUZpbmFsUGFyYWdyYXBoID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgodGV4dC5wYXJhZ3JhcGhTdGFydChsZW5ndGgpID09IGxlbmd0aCkgIT0gZW1wdHlGaW5hbFBhcmFncmFwaCkgeworICAgICAgICAgICAgZXJybG4oIkZpbmFsIHBhcmFncmFwaCBsZW5ndGggaXMgaW5jb3JyZWN0Iik7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvQXBwQ2xvc2VyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9BcHBDbG9zZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42M2Q3YTdlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvQXBwQ2xvc2VyLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQXBwQ2xvc2VyLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDg6NTEgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0YXBwczsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5hd3QuV2luZG93OworCitjbGFzcyBBcHBDbG9zZXIgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIGludCBmQ291bnQgPSAwOworCisgICAgcHJpdmF0ZSBXaW5kb3dBZGFwdGVyIGZBZGFwdGVyID0gbmV3IFdpbmRvd0FkYXB0ZXIoKSB7CisKKyAgICAgICAgcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhXaW5kb3dFdmVudCBlKSB7CisgICAgICAgICAgICAtLWZDb3VudDsKKyAgICAgICAgICAgIGlmIChmQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgV2luZG93IHcgPSBlLmdldFdpbmRvdygpOworICAgICAgICAgICAgdy5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICAgICAgICAgIHcuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyB2b2lkIGxpc3RlblRvRnJhbWUoRnJhbWUgZnJhbWUpIHsKKworICAgICAgICArK2ZDb3VudDsKKyAgICAgICAgZnJhbWUuYWRkV2luZG93TGlzdGVuZXIoZkFkYXB0ZXIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRhcHBzL0JpZGlEZW1vLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9CaWRpRGVtby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4YmI4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9CaWRpRGVtby5qYXZhCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEJpZGlEZW1vLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDEgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0YXBwczsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZWRUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LmF3dHVpLlRleHRGcmFtZTsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuVG9vbGtpdDsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitwdWJsaWMgY2xhc3MgQmlkaURlbW8geworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBcHBDbG9zZXIgZmdMaXN0ZW5lciA9IG5ldyBBcHBDbG9zZXIoKTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJ0ZXh0YXBwcy5yZXNvdXJjZXMuU2FtcGxlIjsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKyAgICAgICAgU3RyaW5nIGRvY05hbWU7CisgICAgICAgIAorICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgZG9jTmFtZSA9ICJkZWZhdWx0IjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvY05hbWUgPSBhcmdzWzBdOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvcGVuVGV4dChkb2NOYW1lKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG9wZW5UZXh0KFN0cmluZyBkb2NOYW1lKSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKyAgICAgICAgICAgIE9iamVjdCBkb2N1bWVudCA9IGJ1bmRsZS5nZXRPYmplY3QoZG9jTmFtZSsiLnNhbXBsZSIpOworICAgICAgICAgICAgTUNvbnN0VGV4dCB0ZXh0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICB0ZXh0ID0gbmV3IFN0eWxlZFRleHQoKFN0cmluZylkb2N1bWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFVSTCB1cmwgPSAoVVJMKSBkb2N1bWVudDsKKyAgICAgICAgICAgICAgICBPYmplY3RJbnB1dFN0cmVhbSBpbiA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbSh1cmwub3BlblN0cmVhbSgpKTsKKyAgICAgICAgICAgICAgICB0ZXh0ID0gKE1Db25zdFRleHQpIGluLnJlYWRPYmplY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBidW5kbGUuZ2V0U3RyaW5nKGRvY05hbWUrIi5uYW1lIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1ha2VGcmFtZSh0ZXh0LCBuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbWFrZUZyYW1lKE1Db25zdFRleHQgdGV4dCwgU3RyaW5nIHRpdGxlKSB7CisKKyAgICAgICAgVGV4dEZyYW1lIGZyYW1lID0gbmV3IFRleHRGcmFtZSh0ZXh0LCB0aXRsZSwgCisgICAgICAgICAgICAgICAgVG9vbGtpdC5nZXREZWZhdWx0VG9vbGtpdCgpLmdldFN5c3RlbUNsaXBib2FyZCgpKTsKKyAgICAgICAgZnJhbWUuc2V0U2l6ZSg1NTAsIDcwMCk7CisgICAgICAgIGZyYW1lLnNob3coKTsKKyAgICAgICAgZmdMaXN0ZW5lci5saXN0ZW5Ub0ZyYW1lKGZyYW1lKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9GaWxlVXRpbHMuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRhcHBzL0ZpbGVVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmNzhiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9GaWxlVXRpbHMuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRmlsZVV0aWxzLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NDg6NTEgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0YXBwczsKKworaW1wb3J0IGphdmEuYXd0LkZpbGVEaWFsb2c7CitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CitpbXBvcnQgamF2YS5pby4qOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UZXh0OworCitwdWJsaWMgY2xhc3MgRmlsZVV0aWxzIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLyoqCisgICAgICogUHJlc2VudCB0aGUgdXNlciB3aXRoIGEgZmlsZSBkaWFsb2csIGFuZCByZXBsYWNlCisgICAgICogZGVzdCB3aXRoIHRoZSBNVGV4dCBpbiB0aGUgc2VsZWN0ZWQgZmlsZSwgYW5kIHJldHVybgorICAgICAqIHRoZSBmaWxlIG9iamN0LiAgSWYgYW55IGVycm9ycyBvY2N1ciwgcmV0dXJuIG51bGwgYW5kCisgICAgICogZG8gbm90IG1vZGlmeSBkZXN0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRmlsZSB1c2VyTG9hZE1UZXh0KFN0cmluZyB0aXRsZSwgTVRleHQgZGVzdCwgRnJhbWUgb3duZXIpIHsKKworICAgICAgICBGaWxlRGlhbG9nIGRpYWxvZyA9IG5ldyBGaWxlRGlhbG9nKG93bmVyLCB0aXRsZSwgRmlsZURpYWxvZy5MT0FEKTsKKyAgICAgICAgZGlhbG9nLnNob3coKTsKKyAgICAgICAgU3RyaW5nIGZpbGVTdHIgPSBkaWFsb2cuZ2V0RmlsZSgpOworICAgICAgICBTdHJpbmcgZGlyU3RyID0gZGlhbG9nLmdldERpcmVjdG9yeSgpOworCisgICAgICAgIGlmIChmaWxlU3RyICE9IG51bGwpIHsKKyAgICAgICAgICAgIEZpbGUgcnZhbCA9IG5ldyBGaWxlKGRpclN0ciwgZmlsZVN0cik7CisgICAgICAgICAgICBNQ29uc3RUZXh0IHNyYyA9IGxvYWRNVGV4dChydmFsKTsKKyAgICAgICAgICAgIGlmIChzcmMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRlc3QucmVwbGFjZUFsbChzcmMpOworICAgICAgICAgICAgICAgIHJldHVybiBydmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBNVGV4dCBzZXJpYWxpemVkIGluIHRoZSBnaXZlbiBmaWxlLgorICAgICAqIEluIGNhc2Ugb2YgYW4gZXJyb3IgcmV0dXJuIG51bGwuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBNQ29uc3RUZXh0IGxvYWRNVGV4dChGaWxlIGZpbGUpIHsKKworICAgICAgICBUaHJvd2FibGUgZXJyb3I7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7CisgICAgICAgICAgICBPYmplY3RJbnB1dFN0cmVhbSBvYmpTdHJlYW0gPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oaW5TdHJlYW0pOworCisgICAgICAgICAgICBNQ29uc3RUZXh0IHRleHQgPSAoTUNvbnN0VGV4dCkgb2JqU3RyZWFtLnJlYWRPYmplY3QoKTsKKyAgICAgICAgICAgIGluU3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm9tcHQgdGhlIHVzZXIgZm9yIHRoZSBmaWxlIGlmIGZpbGUgaXMgbnVsbC4gIFRoZW4gc2F2ZSB0aGUKKyAgICAgKiB0ZXh0IGluIHRoZSBmaWxlLCBpZiBhbnkuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBGaWxlIHVzZXJTYXZlTVRleHQoRmlsZSBmaWxlLCBTdHJpbmcgdGl0bGUsIE1Db25zdFRleHQgdGV4dCwgRnJhbWUgb3duZXIpIHsKKworICAgICAgICBpZiAoZmlsZSA9PSBudWxsKSB7CisKKyAgICAgICAgICAgIEZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2cob3duZXIsIHRpdGxlLCBGaWxlRGlhbG9nLlNBVkUpOworICAgICAgICAgICAgZGlhbG9nLnNob3coKTsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlU3RyID0gZGlhbG9nLmdldEZpbGUoKTsKKyAgICAgICAgICAgIFN0cmluZyBkaXJTdHIgPSBkaWFsb2cuZ2V0RGlyZWN0b3J5KCk7CisKKyAgICAgICAgICAgIGlmIChmaWxlU3RyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaWxlID0gbmV3IEZpbGUoZGlyU3RyLCBmaWxlU3RyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKKworICAgICAgICAgICAgc2F2ZU1UZXh0KGZpbGUsIHRleHQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZpbGU7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNhdmVNVGV4dChGaWxlIGZpbGUsIE1Db25zdFRleHQgdGV4dCkgeworCisgICAgICAgIFRocm93YWJsZSBlcnJvcjsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOworICAgICAgICAgICAgT2JqZWN0T3V0cHV0U3RyZWFtIG9ialN0cmVhbSA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0ob3V0U3RyZWFtKTsKKworICAgICAgICAgICAgb2JqU3RyZWFtLndyaXRlT2JqZWN0KHRleHQpOworICAgICAgICAgICAgb3V0U3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJyb3IgPSBlOworICAgICAgICB9CisgICAgICAgIGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0KKworICAgICAgICBlcnJvci5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvTVRleHRUb1N0cmluZy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvTVRleHRUb1N0cmluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1MmQ3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9NVGV4dFRvU3RyaW5nLmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogTVRleHRUb1N0cmluZy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ4OjUxICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGFwcHM7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKKworaW1wb3J0IGphdmEuaW8uKjsKKworcHVibGljIGZpbmFsIGNsYXNzIE1UZXh0VG9TdHJpbmcgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisKKworICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gMikgeworICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHdyaXRlTVRleHRBc1N0cmluZyhhcmdzWzBdLCBhcmdzWzFdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdXNhZ2UoKSB7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZTogTVRleHRUb1N0cmluZyBpbkZpbGUgb3V0RmlsZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluRmlsZSBtdXN0IGJlIGEgc2VyaWFsaXplZCBNQ29uc3RUZXh0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT24gZXhpdCwgb3V0RmlsZSB3aWxsIGJlIGEgc2VyaWFsaXplZCBTdHJpbmcgIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgdGV4dC4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbkZpbGUgYW5kIG91dEZpbGUgbXVzdCBub3QgYmUgdGhlIHNhbWUuIik7CisgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZU1UZXh0QXNTdHJpbmcoU3RyaW5nIGluRmlsZSwgU3RyaW5nIG91dEZpbGUpIHsKKworICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShpbkZpbGUpOworICAgICAgICBNQ29uc3RUZXh0IHRleHQgPSBGaWxlVXRpbHMubG9hZE1UZXh0KGZpbGUpOworCisgICAgICAgIGlmICh0ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNoYXJbXSBjaCA9IG5ldyBjaGFyW3RleHQubGVuZ3RoKCldOworICAgICAgICAgICAgdGV4dC5leHRyYWN0Q2hhcnMoMCwgY2gubGVuZ3RoLCBjaCwgMCk7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gbmV3IFN0cmluZyhjaCk7CisgICAgICAgICAgICB3cml0ZVN0cmluZyhzdHIsIG91dEZpbGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCByZWFkIGluRmlsZS4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVN0cmluZyhTdHJpbmcgc3RyaW5nVG9Xcml0ZSwgU3RyaW5nIG91dEZpbGUpIHsKKworICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShvdXRGaWxlKTsKKyAgICAgICAgVGhyb3dhYmxlIGVycm9yID0gbnVsbDsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOworICAgICAgICAgICAgT2JqZWN0T3V0cHV0U3RyZWFtIG9ialN0cmVhbSA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0ob3V0U3RyZWFtKTsKKworICAgICAgICAgICAgb2JqU3RyZWFtLndyaXRlT2JqZWN0KHN0cmluZ1RvV3JpdGUpOworICAgICAgICAgICAgb3V0U3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJyb3IgPSBlOworICAgICAgICB9CisgICAgICAgIGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIH0KKworICAgICAgICBlcnJvci5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvU3RyaW5nVG9NVGV4dC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvU3RyaW5nVG9NVGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIwMWQ1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9TdHJpbmdUb01UZXh0LmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogU3RyaW5nVG9NVGV4dC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjQxICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGFwcHM7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVkVGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKK2ltcG9ydCBqYXZhLmlvLio7CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBTdHJpbmdUb01UZXh0IHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCisKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDIgfHwgYXJnc1swXS5lcXVhbHMoYXJnc1sxXSkpIHsKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gbG9hZFN0cmluZyhuZXcgRmlsZShhcmdzWzBdKSk7CisgICAgICAgICAgICBpZiAoc3RyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgU3RyaW5nIGZyb20gZmlsZSAiICsgYXJnc1swXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBNQ29uc3RUZXh0IHRleHQgPSBuZXcgU3R5bGVkVGV4dChzdHIsIEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQKTsKKyAgICAgICAgICAgIEZpbGVVdGlscy5zYXZlTVRleHQobmV3IEZpbGUoYXJnc1sxXSksIHRleHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1c2FnZSgpIHsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiBTdHJpbmdUb01UZXh0IGluRmlsZSBvdXRGaWxlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5GaWxlIG11c3QgYmUgYSBzZXJpYWxpemVkIFN0cmluZyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9uIGV4aXQsIG91dEZpbGUgd2lsbCBiZSBhIHNlcmlhbGl6ZWQgTVRleHQgIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluRmlsZSBhbmQgb3V0RmlsZSBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbG9hZFN0cmluZyhGaWxlIGZpbGUpIHsKKworICAgICAgICBUaHJvd2FibGUgZXJyb3I7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7CisgICAgICAgICAgICBPYmplY3RJbnB1dFN0cmVhbSBvYmpTdHJlYW0gPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oaW5TdHJlYW0pOworCisgICAgICAgICAgICBTdHJpbmcgc3RyID0gKFN0cmluZykgb2JqU3RyZWFtLnJlYWRPYmplY3QoKTsKKyAgICAgICAgICAgIGluU3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gc3RyOworICAgICAgICB9CisgICAgICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXJyb3IgPSBlOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9UZXN0TVRleHRUb1N0cmluZy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvVGVzdE1UZXh0VG9TdHJpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OTA0NjhiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvVGVzdE1UZXh0VG9TdHJpbmcuamF2YQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBUZXN0TVRleHRUb1N0cmluZy5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjQ4OjUxICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGFwcHM7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBUZXN0TVRleHRUb1N0cmluZyB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gMiB8fCBhcmdzWzBdLmVxdWFscyhhcmdzWzFdKSkgeworICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IHRlc3RNVGV4dFRvU3RyaW5nKGFyZ3NbMF0sIGFyZ3NbMV0pOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN1Y2Nlc3M/ICJQQVNTRUQiIDogIkZBSUxFRCIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1c2FnZSgpIHsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiBUZXN0TVRleHRUb1N0cmluZyBtdGV4dEZpbGUgc3RyaW5nRmlsZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbXBhcmVzIHRoZSBjaGFyYWN0ZXJzIGluIG10ZXh0RmlsZSB0byB0aGUiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdHJpbmcgaW4gc3RyaW5nRmlsZS4iKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoMCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RNVGV4dFRvU3RyaW5nKFN0cmluZyBtdGV4dEZpbGUsIFN0cmluZyBzdHJpbmdGaWxlKSB7CisKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7CisKKyAgICAgICAgRmlsZSBtdGV4dCA9IG5ldyBGaWxlKG10ZXh0RmlsZSk7CisgICAgICAgIE1Db25zdFRleHQgdGV4dCA9IEZpbGVVdGlscy5sb2FkTVRleHQobXRleHQpOworICAgICAgICBpZiAodGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nVG9NVGV4dC5sb2FkU3RyaW5nKG5ldyBGaWxlKHN0cmluZ0ZpbGUpKTsKKyAgICAgICAgICAgIGlmIChzdHIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21wYXJlTVRleHRUb1N0cmluZyh0ZXh0LCBzdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZG4ndCBsb2FkIFN0cmluZy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGRuJ3QgbG9hZCBNVGV4dC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjb21wYXJlTVRleHRUb1N0cmluZyhNQ29uc3RUZXh0IHRleHQsIFN0cmluZyBzdHIpIHsKKworICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSAhPSBzdHIubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpPXN0ci5sZW5ndGgoKS0xOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHRleHQuYXQoaSkgIT0gc3RyLmNoYXJBdChpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvcmVzb3VyY2VzL1NhbXBsZS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGFwcHMvcmVzb3VyY2VzL1NhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0OTg3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0YXBwcy9yZXNvdXJjZXMvU2FtcGxlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRhcHBzL3Jlc291cmNlcy9TYW1wbGUuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjQ0OjQ1ICQKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGFwcHMucmVzb3VyY2VzOworCitpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTsKKworcHVibGljIGZpbmFsIGNsYXNzIFNhbXBsZSBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7CisgICAgCisgICAgcHVibGljIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgeyAiZGVmYXVsdC5zYW1wbGUiLCB0aGlzLmdldENsYXNzKCkuZ2V0UmVzb3VyY2UoImhhZ2FuIikgfSwKKyAgICAgICAgICAgIHsgImRlZmF1bHQubmFtZSIsICJUaGUgR2FyZGVuIiB9LAorICAgICAgICAgICAgeyAiamFwYW5lc2Uuc2FtcGxlIiwgIlx1NmNlODogezF9IFx1MzA2ZVx1MzBlMVx1MzBiZFx1MzBjM1x1MzBjOSB7MH0gXHUzMDZmXHU2M2E4XHU1OTY4XHUzMDU1XHUzMDhjXHUzMDdlXHUzMDViXHUzMDkzXHUzMDAyIiB9LAorICAgICAgICAgICAgeyAiamFwYW5lc2UubmFtZSIsICJKYXBhbmVzZSBNZXNzYWdlIiB9LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvQXN5bmNGb3JtYXR0ZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvQXN5bmNGb3JtYXR0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjljNjJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9Bc3luY0Zvcm1hdHRlci5qYXZhCkBAIC0wLDAgKzEsMjA1MyBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQXN5bmNGb3JtYXR0ZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjMgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0MiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKKy8vIFJldmlzaW9uOiA3MCAxLjM4IHJpY2h0ZXh0L0FzeW5jRm9ybWF0dGVyLmphdmEsIHJpY2h0ZXh0LCByaWNodGV4dAorCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdDsKKworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzOworaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKK2ltcG9ydCBqYXZhLmF3dC5Qb2ludDsKK2ltcG9ydCBqYXZhLmF3dC5Db2xvcjsKKworaW1wb3J0IGphdmEudGV4dC5CcmVha0l0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvcjsKKworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuVGV4dEF0dHJpYnV0ZTsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LkdyYXBoaWNzMkRDb252ZXJzaW9uOworCisvLy8qSkRLMTJJTVBPUlRTCitpbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKK2ltcG9ydCBqYXZhLmF3dC5mb250LkxpbmVCcmVha01lYXN1cmVyOworaW1wb3J0IGphdmEuYXd0LmZvbnQuRm9udFJlbmRlckNvbnRleHQ7CisvL0pESzEySU1QT1JUUyovCisKKy8qSkRLMTFJTVBPUlRTCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LkdyYXBoaWNzMkQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LkxpbmVCcmVha01lYXN1cmVyOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5Gb250UmVuZGVyQ29udGV4dDsKK0pESzExSU1QT1JUUyovCisKKy8qCisgICAgQ2hhbmdlIGhpc3Rvcnk6CisKKyAgICA3LzI1Lzk2IC0KKworICAgIDgvMTUvOTYKKyAgICAgICAgRml4ZWQgYnVnIGluIHRleHRPZmZzZXRUb1BvaW50IChmUGl4SGVpZ2h0IHdhc24ndCBhZGRlZCB0byBuZWdhdGl2ZSBoZWlnaHRzKS4ge2picn0KKworICAgIDgvMTkvOTYKKyAgICAgICAgUmVtb3ZlZCByZWZlcmVuY2VzIHRvIEp1c3RpZmljYXRpb25TdHlsZSBjb25zdGFudHMsIGFuZCBtb3ZlZCB0aGVtIGludG8gTUZvcm1hdHRlciB7c2ZifQorCisgICAgOC8yMy85NgorICAgICAgICBNb2RpZmllZCBmaW5kTGluZUF0IGFuZCBnZXRMaW5lQ29udGFpbmluZyAtIGFkZGVkIG9wdGltaXphdGlvbiBpbiBzZWFyY2ggbG9vcC4gIEFsc28sCisgICAgICAgICAgICB0aGV5IHdlcmUgZmFpbGluZyB3aGVuIGZMVFBvc0VuZCsxID09IGZMVE5lZ1N0YXJ0LiAgRml4ZWQuCisKKyAgICA4LzI2Lzk2CisgICAgICAgIE1vdmVkIEZvcm1hdERhZW1vbiBzdHVmZiBpbnRvIHRoaXMgY2xhc3MuCisKKyAgICA5LzExLzk2CisgICAgICAgIFNob3J0ZW5lZCBsaW5lIHJldHVybmVkIGZyb20gdGV4dE9mZnNldFRvUG9pbnQgYnkgMSBwaXhlbAorCisgICAgOS8yMy85NgorICAgICAgICB0ZXh0T2Zmc2V0VG9Qb2ludCBsaW5lIGxlbmd0aCByZXN0b3JlZCAoc2VlIGFib3ZlKS4gIGRyYXdUZXh0KCkgbm93IGRyYXdzIG9ubHkgbGluZXMKKyAgICAgICAgd2hpY2ggZmFsbCBpbiByZWN0YW5nbGUgcGFyYW0uCisKKyAgICA5LzI2Lzk2CisgICAgICAgIHdoaXRlc3BhY2UgYXQgZW5kIG9mIGxpbmUgaXMgdXNlZCBmb3IgY2FyZXQgcG9zaXRpb25pbmcKKworICAgIDEwLzQvOTYKKyAgICAgICAgQWRkZWQgc3RhdGljIFRleHRCb3ggbWV0aG9kLgorCisgICAgMTAvOC85NgorICAgICAgICBMaW5lIDEzMDAgLSBsZXNzIHRoYW4gY2hhbmdlZCB0byBsZXNzIHRoYW4gb3IgZXF1YWwgaW4gdGV4dE9mZnNldFRvUG9pbnQuICBXYXRjaCBmb3IKKyAgICAgICAgICAgIGhhbmdzIGluIGZvcm1hdFRleHQuCisKKyAgICAxMC85Lzk2CisgICAgICAgIENoYW5nZWQgc3luYy4gbW9kZWwuICBmRm9ybWF0SW5CYWNrZ3JvdW5kIGlzIHVzZWQgdG8gc3RhcnQvc3RvcCBiZyBmb3JtYXR0aW5nCisKKyAgICAxMC8xNy85NgorICAgICAgICBBZGRlZCBuZXcgZmxhZ3M6ICBmTGluZUluYywgZkZpbGxJbmMgZm9yIGJpZGkgc3VwcG9ydC4gIHVwZGF0ZUZvcm1hdCwgcG9pbnRUb1RleHRPZmZzZXQsIGdldEJvdW5kaW5nUmVjdCwKKyAgICAgICAgYW5kIGZpbmROZXdJbnNlcnRpb25PZmZzZXQgc2hvdWxkIG5vdyBmdW5jdGlvbiBjb3JyZWN0bHkgZm9yIG5vbi1Sb21hbiBkb2N1bWVudHMuICBOb3RoaW5nIGVsc2UgaGFzIGJlZW4KKyAgICAgICAgbW9kaWZpZWQgdG8gc3VwcG9ydCBpbnRsIHRleHQuCisKKyAgICAxMC8yMS85NgorICAgICAgICBQdXNoZWQgcGFyYWdyYXBoIGZvcm1hdHRpbmcgYW5kIGNhcmV0IHBvc2l0aW9uaW5nIGludG8gTGluZUxheW91dC4gIEluIHByb2Nlc3Mgb2YgcHVzaGluZworICAgICAgICBoaWdobGlnaHRpbmcgaW50byBMaW5lTGF5b3V0LgorCisgICAgMTAvMjQvOTYKKyAgICAgICAgTm93IGdldHRpbmcgcGFyYWdyYXBoIHN0eWxlcyBmcm9tIHBhcmFncmFwaCBidWZmZXIuCisKKyAgICA3LzcvOTcKKyAgICAgICAgVXAtYXJyb3cgZG9lc24ndCBtb3ZlIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlmIHlvdSdyZSBvbiB0aGUgZmlyc3QgbGluZS4KKworICAgIDcvMS85OAorICAgICAgICBObyBsb25nZXIgaW50ZXJzZWN0aW5nIGRhbWFnZWQgcmVjdCB3aXRoIHZpZXcgcmVjdCBpbiB1cGRhdGVGb3JtYXQuCisqLworCisvKioKKyogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1Gb3JtYXR0ZXIuICBJdCBtYWludGFpbnMgYSB0YWJsZSBvZgorKiA8dHQ+TGF5b3V0SW5mbzwvdHQ+IGluc3RhbmNlcyB3aGljaCBjb250YWluIGxheW91dCBpbmZvcm1hdGlvbgorKiBmb3IgZWFjaCBsaW5lIGluIHRoZSB0ZXh0LiAgVGhpcyBjbGFzcyBmb3JtYXRzIGxpbmVzIG9uIGRlbWFuZCwKKyogYW5kIGNyZWF0ZXMgYSBsb3ctcHJpb3JpdHkgdGhyZWFkIHRvIGZvcm1hdCB0ZXh0IGluIHRoZSBiYWNrZ3JvdW5kLgorKiBOb3RlIHRoYXQsIGF0IHRpbWVzLCBzb21lIHRleHQgbWF5IG5vdCBoYXZlIGJlZW4gZm9ybWF0dGVkLCBlc3BlY2lhbGx5CisqIGlmIHRoZSB0ZXh0IGlzIGxhcmdlLgorKiA8cD4KKyogVGhlIGxpbmUgdGFibGUgaXMgYW4gYXJyYXkgb2YgPHR0PkxheW91dEluZm88L3R0PiBvYmplY3RzLCB3aGljaCBleHBhbmRzIGFzIG5lZWRlZCB0byBob2xkCisqIGFsbCBjb21wdXRlZCBsaW5lcyBpbiB0aGUgdGV4dC4gIFRoZSBsaW5lIHRhYmxlIGNvbnNpc3RzIG9mIHRocmVlCisqIHJlZ2lvbnM6ICBhICJwb3NpdGl2ZSIgcmVnaW9uLCBhICJnYXAsIiBhbmQgYSAibmVnYXRpdmUiIHJlZ2lvbi4KKyogSW4gdGhlIHBvc2l0aXZlIHJlZ2lvbiwgY2hhcmFjdGVyIGFuZCBncmFwaGljcyBvZmZzZXRzIGFyZSBwb3NpdGl2ZQorKiBpbnRlZ2VycywgY29tcHV0ZWQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0IC8gZGlzcGxheS4gIEluIHRoZQorKiBnYXAsIGxpbmUgdGFibGUgZW50cmllcyBhcmUgbnVsbC4gIE5ldyBsaW5lcyBtYXkgYmUgaW5zZXJ0ZWQgaW50byB0aGUgZ2FwLgorKiBJbiB0aGUgbmVnYXRpdmUgcmVnaW9uLCBjaGFyYWN0ZXIgYW5kIGdyYXBoaWNzIG9mZnNldHMgYXJlIG5lZ2F0aXZlOworKiB0aGVpciBhYnNvbHV0ZSB2YWx1ZXMgaW5kaWNhdGUgZGlzdGFuY2VzIGZyb20gdGhlIGVuZCBvZiB0aGUgdGV4dCAvIGRpc3BsYXkuCisqIFRoZSA8dHQ+ZkxUUG9zRW5kPC90dD4gbWVtYmVyIGdpdmVzIHRoZSBpbmRleCBpbiB0aGUgbGluZSB0YWJsZSBvZiB0aGUKKyogbGFzdCBwb3NpdGl2ZSBlbnRyeS4gIFRoZSA8dHQ+ZkxUTmVnU3RhcnQ8L3R0PiBnaXZlcyB0aGUgaW5kZXggb2YgZmlyc3QKKyogbmVnYXRpdmUgZW50cnkuICBJZiB0aGVyZSBhcmUgbm8gbmVnYXRpdmUgZW50cmllcywgPHR0PmZMVE5lZ1N0YXJ0PC90dD4gaXMKKyogZXF1YWwgdG8gPHR0PmZMVFNpemU8L3R0PiwgdGhlIHNpemUgb2YgdGhlIGxpbmUgdGFibGUuCisqIDxwPgorKiBDaGFuZ2VzIHRvIHRoZSBsaW5lIHRhYmxlIG9jY3VyIG9ubHkgaW4gdGhlIDx0dD5mb3JtYXRUZXh0KCk8L3R0PiBtZXRob2QuCisqIFRoaXMgbWV0aG9kIGNhbGxzIDx0dD5MaW5lTGF5b3V0LmxheW91dCgpPC90dD4gZm9yIGVhY2ggbGluZSB0byBmb3JtYXQuCisqCisqIEBhdXRob3IgSm9obiBSYWxleQorKgorKiBAc2VlIE1Gb3JtYXR0ZXIKKyogQHNlZSBMaW5lTGF5b3V0CisqIEBzZWUgTGF5b3V0Q29udGV4dAorKiBAc2VlIExheW91dEluZm8KKyovCisKK2ZpbmFsIGNsYXNzIEFzeW5jRm9ybWF0dGVyIGV4dGVuZHMgTUZvcm1hdHRlciBpbXBsZW1lbnRzIFJ1bm5hYmxlCit7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAvKioKKyAgICAqIFRleHQgdG8gZm9ybWF0LgorICAgICovCisgICAgcHJpdmF0ZSBNQ29uc3RUZXh0IGZUZXh0OworCisgICAgLyoqCisgICAgKiBEZWZhdWx0IHZhbHVlcy4KKyAgICAqLworICAgIHByaXZhdGUgQXR0cmlidXRlTWFwIGZEZWZhdWx0VmFsdWVzOworICAgIAorICAgIC8qKgorICAgICogRm9udCByZXNvbHZlci4KKyAgICAqLworICAgIHByaXZhdGUgRm9udFJlc29sdmVyIGZGb250UmVzb2x2ZXI7CisgICAgCisgICAgLyoqCisgICAgKiBEZWZhdWx0IGNoYXJhY3RlciBtZXRyaWMgLSB1c2VkIHRvIHNldCBoZWlnaHQgb2YgZW1wdHkgcGFyYWdyYXBocworICAgICovCisgICAgcHJpdmF0ZSBEZWZhdWx0Q2hhcmFjdGVyTWV0cmljIGZEZWZhdWx0Q2hhck1ldHJpYzsKKyAgICAKKyAgICAvKioKKyAgICAqIExlbmd0aCB0byB3aGljaCBsaW5lcyBhcmUgZm9ybWF0dGVkLgorICAgICovCisgICAgcHJpdmF0ZSBpbnQgZkxpbmVEaW07CisKKyAgICAvKioKKyAgICAqIFRhYmxlIG9mIGZvcm1hdHRlZCBsaW5lcy4KKyAgICAqLworICAgIHByaXZhdGUgTGF5b3V0SW5mbyBmTGluZVRhYmxlW107CisKKyAgICAvKioKKyAgICAqIFNpemUgb2YgbGluZSB0YWJsZS4KKyAgICAqLworICAgIHByaXZhdGUgaW50IGZMVFNpemUgPSAxMDsgLy8gaW5pdGlhbCBzaXplIG11c3QgYmUgPiAwCisKKyAgICAvKioKKyAgICAqIEluZGV4IG9mIGxhc3QgcG9zaXRpdmUgZW50cnkgaW4gbGluZSB0YWJsZS4KKyAgICAqLworICAgIHByaXZhdGUgaW50IGZMVFBvc0VuZDsKKworICAgIC8qKgorICAgICogSW5kZXggb2YgZmlyc3QgbmVnYXRpdmUgZW50cnkgaW4gbGluZSB0YWJsZS4KKyAgICAqLworICAgIHByaXZhdGUgaW50IGZMVE5lZ1N0YXJ0OworCisgICAgLyoqCisgICAgKiBMZW5ndGggb2YgdGV4dCBvbiB3aGljaCBuZWdhdGl2ZSBsaW5lIG9mZnNldHMgYXJlIGJhc2VkLgorICAgICogQHNlZSAjZm9ybWF0VGV4dAorICAgICovCisgICAgcHJpdmF0ZSBpbnQgZkxUQ3VyVGV4dExlbjsKKworICAgIC8qKgorICAgICogTGVuZ3RoIG9mIGZvcm1hdHRlZCB0ZXh0IGluIGZpbGwgZGlyZWN0aW9uLCBpbiBwaXhlbHMuCisgICAgKi8KKyAgICBwcml2YXRlIGludCBmUGl4SGVpZ2h0OworCisgICAgLyoqCisgICAgKiBMZW5ndGggb2YgZm9ybWF0dGVkIHRleHQgaW5jbHVkaW5nIHBzZXVkb2xpbmUuCisgICAgKi8KKyAgICBwcml2YXRlIGludCBmRnVsbFBpeEhlaWdodDsKKworICAgIHByaXZhdGUgaW50IGZNaW5YOworICAgIHByaXZhdGUgaW50IGZNYXhYOworCisgICAgLyoqCisgICAgKiA8dHQ+dHJ1ZTwvdHQ+IGlmIGxpbmVzIHNob3VsZCBiZSBmb3JtYXR0ZWQgdG8gZml0IGxpbmUgZGltZW5zaW9uLgorICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGZXcmFwOworCisgICAgLyoqCisgICAgKiA8dHQ+dHJ1ZTwvdHQ+IGlmIGNoYXJhY3RlcnMgcnVuIGhvcml6b250YWxseS4KKyAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBmSExpbmUgPSB0cnVlOworCisgICAgLyoqCisgICAgICogPHR0PnRydWU8L3R0PiBpZiBjaGFyYWN0ZXJzIHJ1biBmcm9tIGZyb20gbG93IHRvIGhpZ2ggY29vcmRpbmF0ZXMgb24gbGluZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gZkxpbmVJbmMgPSB0cnVlOworCisgICAgLyoqCisgICAgICogPHR0PnRydWU8L3R0PiBpZiBsaW5lcyBydW4gZnJvbSBsb3cgdG8gaGlnaCBjb29yZGluYXRlcyB3aXRoaW4gcGFnZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gZkZpbGxJbmMgPSB0cnVlOworCisgICAgLyoqCisgICAgKiBWYWx1ZSByZXR1cm5lZCBmcm9tIDx0dD5maW5kTGluZUF0KCk8L3R0PgorICAgICogaWYgcGl4ZWwgaGVpZ2h0IHByZWNlZGVzIHRvcG1vc3QgbGluZS4KKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBrQmVmb3JlRmlyc3RMaW5lID0gLTI7CisKKyAgICAvKioKKyAgICAqIFZhbHVlIHJldHVybmVkIGZyb20gPHR0PmZpbmRMaW5lQXQoKTwvdHQ+IGFuZCA8dHQ+Z2V0TGluZUNvbnRhaW5pbmcoKTwvdHQ+CisgICAgKiBpZiBvZmZzZXQgLyBwaXhlbCBoZWlnaHQgaXMgYWZ0ZXIgYWxsIGV4aXN0aW5nIGxpbmVzLgorICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGtBZnRlckxhc3RMaW5lID0gLTE7CisKKyAgICAvKioKKyAgICAqIFRocmVhZCB3aGljaCBpbnZva2VzIGZvcm1hdHRlciBpbiB0aGUgYmFja2dyb3VuZC4KKyAgICAqLworICAgIHByaXZhdGUgVGhyZWFkIGZEYWVtb247CisKKyAgICAvKioKKyAgICAqIEZvbnRSZW5kZXJDb250ZXh0IHRvIG1lYXN1cmUgd2l0aC4gIEN1cnJlbnRseSBub3Qgc2V0dGFibGUgYWZ0ZXIKKyAgICAqIGNvbnN0cnVjdGlvbi4KKyAgICAqLworICAgIHByaXZhdGUgRm9udFJlbmRlckNvbnRleHQgZkZvbnRSZW5kZXJDb250ZXh0OworCisgICAgLyoqCisgICAgKiBDb250cm9scyB3aGV0aGVyIGJhY2tncm91bmQgZm9ybWF0dGluZyBjYW4gcnVuLgorICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGZCZ0Zvcm1hdEFsbG93ZWQgPSBmYWxzZTsKKyAgICAKKyAgICAvKioKKyAgICAqIENhY2hlZCBsaW5lIGJyZWFrIG9iamVjdC4KKyAgICAqLworICAgIHByaXZhdGUgQnJlYWtJdGVyYXRvciBmTGluZUJyZWFrID0gbnVsbDsKKyAgICAKKyAgICAvKioKKyAgICAqIENhY2hlZCBMaW5lQnJlYWtNZWFzdXJlci4KKyAgICAqLworICAgIHByaXZhdGUgTGluZUJyZWFrTWVhc3VyZXIgZkNhY2hlZE1lYXN1cmVyID0gbnVsbDsKKyAgICBwcml2YXRlIGludCBmQ2FjaGVkTWVhc3VyZXJTdGFydDsKKyAgICBwcml2YXRlIGludCBmQ2FjaGVkTWVhc3VyZXJMaW1pdDsKKyAgICAKKyAgICAvLyBTb21lIEpESydzIChTdW4ncyAxLjIuMikgdGhyb3cgZXhjZXB0aW9ucyBmcm9tIAorICAgIC8vIExpbmVCcmVha01lYXN1cmVyLmluc2VydENoYXIgYW5kIGRlbGV0ZUNoYXIuICBUaGlzIGNsYXNzCisgICAgLy8gZGV0ZWN0cyB0aGlzIGNvbmRpdGlvbiBhbmQgZG9lc24ndCB1c2UgdGhlc2UgdHdvIG1ldGhvZHMKKyAgICAvLyBpZiB0aGV5IHRocm93IGV4Y2VwdGlvbnMuCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmZ0NhY2hlTWVhc3VyZXJzID0gdHJ1ZTsKKyAgICAKKyAgICAvKioKKyAgICAqIEN1cnJlbnQgdGV4dCB0aW1lIHN0YW1wLiAgVXNlZCB0byBtYWludGFpbiBtb2RpZmljYXRpb24gaW52YXJpYW50LgorICAgICovCisgICAgcHJpdmF0ZSBpbnQgZkN1clRpbWVTdGFtcDsKKyAgICAKKyAgICAvKioKKyAgICAqIENhY2hlIG9mIFBhcmFncmFwaFJlbmRlcmVycy4KKyAgICAqLworICAgIHByaXZhdGUgSGFzaHRhYmxlIGZSZW5kZXJlckNhY2hlID0gbmV3IEhhc2h0YWJsZSgpOworICAgIAorICAgIC8qKgorICAgICogRHJhdyB0ZXh0IGluc2lkZSBhIHJlY3RhbmdsZS4gRG9lcyBub3QgY2FjaGUgYW55IGZvcm1hdHRpbmcgaW5mb3JtYXRpb24uCisgICAgKiBUaGlzIGlzIGNvbnZlbmllbnQgZm9yIHNtYWxsIGFtb3VudHMgb2YgdGV4dDsgY29tcGFyYWJsZSB0byBURVRleHRCb3ggb24gdGhlIE1hYy4KKyAgICAqIDxwPgorICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gZHJhdworICAgICogQHBhcmFtIGcgR3JhcGhpY3Mgb24gd2hpY2ggdG8gZHJhdworICAgICogQHBhcmFtIGRyYXdSZWN0IHJlY3RhbmdsZSBpbiB3aGljaCB0ZXh0IHdpbGwgYmUgZHJhd24KKyAgICAqIEBwYXJhbSBmaWxsSW5jIGlmIHRydWUsIGxpbmVzIHJ1biBmcm9tIGxvdyB0byBoaWdoIGNvb3JkaW5hdGVzIGluIHBhZ2UuCisgICAgKiBAcGFyYW0gaExpbmUgaWYgdHJ1ZSwgY2hhcmFjdGVycyBydW4gaG9yaXpvbnRhbGx5IHdpdGhpbiBhIGxpbmUuCisgICAgKi8KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNQYXJhZ3JhcGhTZXBhcmF0b3IoY2hhciBjaCkgeworCisgICAgICAgIHJldHVybiBjaCA9PSAnXG4nIHx8IGNoID09ICdcdTIwMjknOworICAgIH0KKworICAgIC8qKgorICAgICogQ3JlYXRlIGFuIDx0dD5Bc3luY0Zvcm1hdHRlcjwvdHQ+LgorICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gZm9ybWF0CisgICAgKiBAcGFyYW0gbGluZUJvdW5kIGxlbmd0aCB0byB3aGljaCBsaW5lcyBhcmUgZm9yYW10dGVkCisgICAgKiBAcGFyYW0gd3JhcCA8dHQ+dHJ1ZTwvdHQ+IGlmIHRleHQgc2hvdWxkIGJlICJsaW5lIHdyYXBwZWQiIChmb3JtYXR0ZWQgdG8gZml0IGRlc3RpbmF0aW9uIGFyZWEpCisgICAgKi8KKyAgICBBc3luY0Zvcm1hdHRlcihNQ29uc3RUZXh0IHRleHQsIAorICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBkZWZhdWx0VmFsdWVzLAorICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3cmFwLAorICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzIGcpCisgICAgeworICAgICAgICBmVGV4dCA9IHRleHQ7CisgICAgICAgIGZEZWZhdWx0VmFsdWVzID0gZGVmYXVsdFZhbHVlczsKKyAgICAgICAgZkZvbnRSZXNvbHZlciA9IG5ldyBGb250UmVzb2x2ZXIoZkRlZmF1bHRWYWx1ZXMpOworICAgICAgICAKKyAgICAgICAgZkxpbmVEaW0gPSBsaW5lQm91bmQ7CisgICAgICAgIGZXcmFwID0gd3JhcDsKKyAgICAgICAgR3JhcGhpY3MyRCBnMmQgPSBHcmFwaGljczJEQ29udmVyc2lvbi5nZXRHcmFwaGljczJEKGcpOworICAgICAgICBmRm9udFJlbmRlckNvbnRleHQgPSBnMmQuZ2V0Rm9udFJlbmRlckNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIGZEZWZhdWx0Q2hhck1ldHJpYyA9IG5ldyBEZWZhdWx0Q2hhcmFjdGVyTWV0cmljKGZGb250UmVzb2x2ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRm9udFJlbmRlckNvbnRleHQpOworICAgICAgICBmTFRDdXJUZXh0TGVuID0gdGV4dC5sZW5ndGgoKTsKKyAgICAgICAgcmVtb3ZlQWxsTGluZXMoKTsKKworICAgICAgICBmRGFlbW9uID0gbmV3IFRocmVhZCh0aGlzKTsKKyAgICAgICAgZkRhZW1vbi5zdGFydCgpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQXR0cmlidXRlTWFwIGdldERlZmF1bHRWYWx1ZXMoKSB7CisgICAgCisgICAgICAgIHJldHVybiBmRGVmYXVsdFZhbHVlczsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgY2hlY2tUaW1lU3RhbXAoKSB7CisgICAgICAgIFN0cmluZyBhZG1vbml0aW9uID0gIlByb2JhYmx5LCB5b3UgbW9kaWZpZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB0ZXh0IGJlZm9yZSBjYWxsaW5nIHN0b3BCYWNrZ3JvdW5kRm9ybWF0dGluZygpLiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChmVGV4dC5nZXRUaW1lU3RhbXAoKSAhPSBmQ3VyVGltZVN0YW1wKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRpbWUgc3RhbXAgaXMgb3V0IG9mIHN5bmMuICAiICsgYWRtb25pdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZUZXh0Lmxlbmd0aCgpICE9IGZMVEN1clRleHRMZW4pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTGVuZ3RoIGNoYW5nZWQgdW5leHBlY3RlZGx5LiAgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZUZXh0Lmxlbmd0aCgpPSIrZlRleHQubGVuZ3RoKCkrIjsgICIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZMVEN1clRleHRMZW49IitmTFRDdXJUZXh0TGVuKyI7ICAiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXR0ZXI9Iit0aGlzKyI7ICAiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0PSIrZlRleHQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBTcGVjaWZ5IHdoZXRoZXIgdG8gd3JhcCBsaW5lcyB1c2luZyB0aGUgbGluZSBkaW1lbnNpb24uCisgICAgKiBAcGFyYW0gd3JhcCBpZiA8dHQ+dHJ1ZTwvdHQ+IGxpbmVzIHdpbGwgYmUgd3JhcHBlZDsgb3RoZXJ3aXNlIG5ldyBsaW5lcyB3aWxsIG9ubHkgYmUKKyAgICAqIHN0YXJ0ZWQgd2hlbiBhIG5ld2xpbmUgaXMgZW5jb3VudGVyZWQuCisgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0V3JhcChib29sZWFuIHdyYXApCisgICAgeworICAgICAgICBpZiAod3JhcCAhPSBmV3JhcCkgeworICAgICAgICAgICAgZldyYXAgPSB3cmFwOworICAgICAgICAgICAgcmVtb3ZlQWxsTGluZXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICogUmV0dXJuIHRydWUgaWYgbGluZXMgYXJlIHdyYXBwZWQgdXNpbmcgdGhlIGxpbmUgZGltZW5zaW9uLgorICAgICogQHNlZSAjc2V0V3JhcAorICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCBib29sZWFuIHdyYXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZXcmFwOworICAgIH0KKworICAgIC8qKgorICAgICogU3BlY2lmeSB0aGUgbGluZUJvdW5kIGluIHBpeGVscy4gIElmIGxpbmUgd3JhcHBpbmcgaXMgb24sIGxpbmVzCisgICAgKiB3aWxsIGJlIHdyYXBwZWQgdG8gdGhpcyB2YWx1ZS4KKyAgICAqIDxwPgorICAgICoKKyAgICAqIEBwYXJhbSBsaW5lQm91bmQgdGhlIGRpc3RhbmNlLCBpbiBwaXhlbHMsIHVzZWQgdG8gd3JhcCBsaW5lcy4KKyAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRMaW5lQm91bmQoaW50IGxpbmVCb3VuZCkKKyAgICB7CisgICAgICAgIGlmIChmTGluZURpbSAhPSBsaW5lQm91bmQpIHsKKyAgICAgICAgICAgIGZMaW5lRGltID0gbGluZUJvdW5kOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmV3JhcCkgeworICAgICAgICAgICAgICAgIHJlbW92ZUFsbExpbmVzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBpeGVscyBhbG9uZyB0aGUgbGluZSBkaW1lbnNpb24uCisgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCBsaW5lQm91bmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZMaW5lRGltOworICAgIH0KKworICAgIC8qKgorICAgICogUmV0dXJuIDx0dD50cnVlPC90dD4gaWYgY2hhcmFjdGVycyBydW4gZnJvbSBsb3cgdG8gaGlnaCBjb29yZGluYXRlcyBvbiBsaW5lLgorICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGxpbmVJbmMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZMaW5lSW5jOworICAgIH0KKworICAgIC8qKgorICAgICogUmV0dXJuIDx0dD50cnVlPC90dD4gaWYgbGluZXMgcnVuIGZyb20gbG93IHRvIGhpZ2ggY29vcmRpbmF0ZXMgb24gcGFnZS4KKyAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBmaWxsSW5jKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmRmlsbEluYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJlbW92ZSBhbGwgbGluZXMgaW4gdGhlIGxpbmUgdGFibGUuICBVc2VkIGFmdGVyIGFuIG9wZXJhdGlvbiB0aGF0CisgICAgKiBpbnZhbGlkYXRlcyBhbGwgZXhpc3RpbmcgbGluZXMsIHN1Y2ggYXMgY2hhbmdpbmcgbGluZSB3cmFwcGluZyBvciB0aGUKKyAgICAqIGxpbmUgZGltLgorICAgICovCisgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCByZW1vdmVBbGxMaW5lcygpCisgICAgeworICAgICAgICBmQ3VyVGltZVN0YW1wID0gZlRleHQuZ2V0VGltZVN0YW1wKCk7CisgICAgICAgIHN0b3BCYWNrZ3JvdW5kRm9ybWF0dGluZygpOworCisgICAgICAgIGZNaW5YID0gMDsKKyAgICAgICAgZk1heFggPSBmTGluZURpbTsKKyAgICAgICAgCisgICAgICAgIGZMaW5lVGFibGUgPSBuZXcgTGF5b3V0SW5mb1tmTFRTaXplXTsgLy8gZkxUU2l6ZSBtdXN0IGJlID4gMAorICAgICAgICBmTFROZWdTdGFydCA9IGZMVFNpemU7CisgICAgICAgIGZMVFBvc0VuZCA9IDA7CisKKyAgICAgICAgZkxpbmVUYWJsZVswXSA9IHBzZXVkb0xpbmVJbmZvKG51bGwsIDApOworCisgICAgICAgIGZQaXhIZWlnaHQgPSBmTGluZVRhYmxlWzBdLmdldEhlaWdodCgpOyAvLyA/Pz8gb3Igc2hvdWxkIGl0IGJlIHplcm8/CisgICAgICAgIGZGdWxsUGl4SGVpZ2h0ID0gZlBpeEhlaWdodDsKKworICAgICAgICAvLyBmb3JtYXQgYXQgbGVhc3Qgb25lIGxpbmU6CisgICAgICAgIGZvcm1hdFRvSGVpZ2h0KGZQaXhIZWlnaHQgKyAxKTsKKworICAgICAgICBlbmFibGVCR0Zvcm1hdCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbGwgdGhlIGxheW91dCBpbmZvIHdpdGggaW5mb3JtYXRpb24gYXBwcm9wcmlhdGUgdG8gdGhlIHBzZXVkb2xpbmUuCisgICAgICovCisgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgTGF5b3V0SW5mbyBwc2V1ZG9MaW5lSW5mbyhMYXlvdXRJbmZvIGluZm8sIGludCBvZmZzZXQpCisgICAgeworICAgICAgICBBdHRyaWJ1dGVNYXAgc3QgPSBmVGV4dC5wYXJhZ3JhcGhTdHlsZUF0KGZMVEN1clRleHRMZW4pOyAvLyA/Pz8gaWYgdGV4dCBpcyBlbXB0eSBvciB0aGlzIGlzIHRoZSBlbmQgb2YgdGhlIHRleHQsIHdoYXQgaGFwcGVucz8KKyAgICAgICAgUGFyYWdyYXBoUmVuZGVyZXIgcmVuZGVyZXIgPSBnZXRSZW5kZXJlckZvcihzdCk7CisgICAgICAgIGluZm8gPSByZW5kZXJlci5sYXlvdXQoZlRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTGluZUJyZWFrTWVhc3VyZXIpbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRm9udFJlbmRlckNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTGluZURpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTGluZURpbSk7CisKKyAgICAgICAgcmV0dXJuIGluZm87CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBsYXN0IHZhbGlkIGxpbmUgaW4gdGhlIGxpbmUgdGFibGUuCisgICAgKi8KKyAgICBwcml2YXRlIGludCBsYXN0TGluZSgpCisgICAgeworICAgICAgICByZXR1cm4gKGZMVE5lZ1N0YXJ0ID09IGZMVFNpemUpID8gZkxUUG9zRW5kIDogZkxUU2l6ZSAtIDE7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTaGlmdCBsaW5lIHRhYmxlIHN1Y2ggdGhhdCA8dHQ+bGFzdFBvczwvdHQ+IGlzIHRoZSBsYXN0IHBvc2l0aXZlCisgICAgKiBlbnRyeSBpbiB0aGUgdGFibGUuIDxiPk5PVEU6IDx0dD5sYXN0UG9zPC90dD4gbXVzdCBiZSBhIHZhbGlkIGxpbmUhPC9iPgorICAgICogPHA+CisgICAgKiBAcGFyYW0gbGFzdFBvcyB0aGUgaW5kZXggb2YgdGhlIGxpbmUgd2hpY2ggd2lsbCBiZWNvbWUgdGhlIGxhc3QgcG9zaXRpdmUKKyAgICAqIGVudHJ5IGluIHRoZSBsaW5lIHRhYmxlCisgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2hpZnRUYWJsZVRvKGludCBsYXN0UG9zKQorICAgIHsKKyAgICAgICAgTGF5b3V0SW5mbyBsaTsKKworICAgICAgICB3aGlsZSAobGFzdFBvcyA8IGZMVFBvc0VuZCkgICAgeyAvLyBzaGlmdCArJ3MgdG8gLSdzCisgICAgICAgICAgICBsaSA9IGZMaW5lVGFibGVbZkxUUG9zRW5kXTsKKyAgICAgICAgICAgIGZMaW5lVGFibGVbZkxUUG9zRW5kLS1dID0gbnVsbDsKKworICAgICAgICAgICAgbGkubWFrZVJlbGF0aXZlVG9FbmQoZkxUQ3VyVGV4dExlbiwgZlBpeEhlaWdodCk7CisKKyAgICAgICAgICAgIGZMaW5lVGFibGVbLS1mTFROZWdTdGFydF0gPSBsaTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChsYXN0UG9zID49IGZMVE5lZ1N0YXJ0KSB7IC8vIHNoaWZ0IC0ncyB0byArJ3MKKyAgICAgICAgICAgIGxpID0gZkxpbmVUYWJsZVtmTFROZWdTdGFydF07CisgICAgICAgICAgICBmTGluZVRhYmxlW2ZMVE5lZ1N0YXJ0KytdID0gICAgbnVsbDsKKworICAgICAgICAgICAgbGkubWFrZVJlbGF0aXZlVG9CZWdpbm5pbmcoZkxUQ3VyVGV4dExlbiwgZlBpeEhlaWdodCk7CisKKyAgICAgICAgICAgIGZMaW5lVGFibGVbKytmTFRQb3NFbmRdICAgID0gbGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIEluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBsaW5lIHRhYmxlLgorICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGV4cGFuZExpbmVUYWJsZSgpCisgICAgeworICAgICAgICAvLyBUaGlzIGp1c3QgZG91YmxlcyB0aGUgc2l6ZSBvZiB0aGUgbGluZSB0YWJsZS4KKworICAgICAgICBMYXlvdXRJbmZvIG5ld0xpbmVUYWJsZVtdID0gbmV3IExheW91dEluZm9bZkxpbmVUYWJsZS5sZW5ndGggKiAyXTsKKyAgICAgICAgaW50IG5ld05lZ1N0YXJ0ID0gbmV3TGluZVRhYmxlLmxlbmd0aCAtIChmTGluZVRhYmxlLmxlbmd0aCAtIGZMVE5lZ1N0YXJ0KTsKKworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZMaW5lVGFibGUsIDAsIG5ld0xpbmVUYWJsZSwgMCwgZkxUUG9zRW5kICsgMSk7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZkxpbmVUYWJsZSwgZkxUTmVnU3RhcnQsIG5ld0xpbmVUYWJsZSwgbmV3TmVnU3RhcnQsIGZMVFNpemUgLSBmTFROZWdTdGFydCk7CisKKyAgICAgICAgZkxUTmVnU3RhcnQgPSBuZXdOZWdTdGFydDsKKyAgICAgICAgZkxUU2l6ZSA9IG5ld0xpbmVUYWJsZS5sZW5ndGg7CisgICAgICAgIGZMaW5lVGFibGUgPSBuZXdMaW5lVGFibGU7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIHBpeGVsIHBvc2l0aW9uIDx0dD5maWxsQ29vcmQ8L3R0Pi4KKyAgICAqIElmIGZpbGxDb29yZCBleGNlZWRzIHRoZSBib3R0b20gb2YgdGhlIHRleHQsIHJldHVybiBrQWZ0ZXJMYXN0TGluZS4KKyAgICAqIElmIGZpbGxDb29yZCBpcyBsZXNzIHRoYW4gdGhlIHRvcCBvZiB0aGUgdGV4dCwgcmV0dXJuIGtCZWZvcmVGaXJzdExpbmUuCisgICAgKiA8cD4KKyAgICAqIEBwYXJhbSBmaWxsQ29vcmQgImhlaWdodCIgb2YgbGluZSB0byBsb2NhdGUuCisgICAgKi8KKyAgICBwcml2YXRlIGludCBmaW5kTGluZUF0KGludCBmaWxsQ29vcmQpCisgICAgeworICAgICAgICBpbnQgbG93LCBoaWdoLCBtaWQ7CisgICAgICAgIGludCBsb3dTdGFydCwgaGlnaFN0YXJ0LCBtaWRTdGFydDsKKworICAgICAgICBpZiAoZmlsbENvb3JkID49IGZQaXhIZWlnaHQpCisgICAgICAgICAgICByZXR1cm4ga0FmdGVyTGFzdExpbmU7CisgICAgICAgIGVsc2UgaWYgKGZpbGxDb29yZCA8IDApCisgICAgICAgICAgICByZXR1cm4ga0JlZm9yZUZpcnN0TGluZTsKKworICAgICAgICBpZiAoKGZMVE5lZ1N0YXJ0IDwgZkxUU2l6ZSkgJiYgKGZpbGxDb29yZCA+PSBmTGluZVRhYmxlW2ZMVE5lZ1N0YXJ0XS5nZXRHcmFwaGljU3RhcnQoZlBpeEhlaWdodCkpKSB7CisgICAgICAgICAgICBmaWxsQ29vcmQgLT0gZlBpeEhlaWdodDsKKworICAgICAgICAgICAgbG93ID0gZkxUTmVnU3RhcnQ7CisgICAgICAgICAgICBoaWdoID0gZkxUU2l6ZTsKKyAgICAgICAgICAgIGhpZ2hTdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsb3cgPSAwOworICAgICAgICAgICAgaGlnaCA9IGZMVFBvc0VuZCArIDE7CisgICAgICAgICAgICBoaWdoU3RhcnQgPSBmTGluZVRhYmxlW2ZMVFBvc0VuZF0uZ2V0R3JhcGhpY1N0YXJ0KDApICsgZkxpbmVUYWJsZVtmTFRQb3NFbmRdLmdldEhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIGxvd1N0YXJ0ID0gZkxpbmVUYWJsZVtsb3ddLmdldEdyYXBoaWNTdGFydCgwKTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobG93U3RhcnQgPT0gaGlnaFN0YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBsb3c7CisKKyAgICAgICAgICAgIG1pZCA9IGxvdyArIChmaWxsQ29vcmQgLSBsb3dTdGFydCkgLyAoaGlnaFN0YXJ0IC0gbG93U3RhcnQpICogKGhpZ2ggLSBsb3cpOworICAgICAgICAgICAgbWlkU3RhcnQgPSBmTGluZVRhYmxlW21pZF0uZ2V0R3JhcGhpY1N0YXJ0KDApOworCisgICAgICAgICAgICBpZiAobWlkU3RhcnQgPiBmaWxsQ29vcmQpIHsKKyAgICAgICAgICAgICAgICBoaWdoID0gbWlkOworICAgICAgICAgICAgICAgIGhpZ2hTdGFydCA9IGZMaW5lVGFibGVbaGlnaF0uZ2V0R3JhcGhpY1N0YXJ0KDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobWlkU3RhcnQgKyBmTGluZVRhYmxlW21pZF0uZ2V0SGVpZ2h0KCkgPD0gZmlsbENvb3JkKSB7CisgICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAgICAgICAgICAgICBsb3dTdGFydCA9IGZMaW5lVGFibGVbbG93XS5nZXRHcmFwaGljU3RhcnQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKKworICAgICAgICB9IHdoaWxlIChsb3cgPCBoaWdoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUuCisgICAgICogQHBhcmFtIGxpbmUgdGhlIGludGVybmFsIGluZGV4IG9mIHRoZSBsaW5lIChkaXJlY3QgaW5kZXggaW50byBsaW5ldGFibGUpLgorICAgICAqLworICAgIHByaXZhdGUgaW50IGxpbmVDaGFyU3RhcnRJbnRlcm5hbChpbnQgbGluZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmTGluZVRhYmxlW2xpbmVdLmdldENoYXJTdGFydChmTFRDdXJUZXh0TGVuKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgbGluZS4KKyAgICAgKiBAcGFyYW0gbGluZSB0aGUgaW50ZXJuYWwgaW5kZXggb2YgdGhlIGxpbmUgKGRpcmVjdCBpbmRleCBpbnRvIGxpbmV0YWJsZSkuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbGluZUNoYXJMaW1pdEludGVybmFsKGludCBsaW5lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxpbmVDaGFyU3RhcnRJbnRlcm5hbChsaW5lKSArIGZMaW5lVGFibGVbbGluZV0uZ2V0Q2hhckxlbmd0aCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZ3JhcGhpYyBzdGFydCBvZiB0aGUgbGluZSwgdW5hZGp1c3RlZCBmb3IgZmlsbCBkaXJlY3Rpb24uCisgICAgICogQHBhcmFtIGxpbmUgdGhlIGludGVybmFsIGluZGV4IG9mIHRoZSBsaW5lIChkaXJlY3QgaW5kZXggaW50byBsaW5ldGFibGUpLgorICAgICAqLworICAgIHByaXZhdGUgaW50IGxpbmVHcmFwaGljU3RhcnRJbnRlcm5hbChpbnQgbGluZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmTGluZVRhYmxlW2xpbmVdLmdldEdyYXBoaWNTdGFydChmUGl4SGVpZ2h0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGdyYXBoaWMgbGltaXQgb2YgdGhlIGxpbmUsIHVuYWRqdXN0ZWQgZm9yIGZpbGwgZGlyZWN0aW9uLgorICAgICAqIEBwYXJhbSBsaW5lIHRoZSBpbnRlcm5hbCBpbmRleCBvZiB0aGUgbGluZSAoZGlyZWN0IGluZGV4IGludG8gbGluZXRhYmxlKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBsaW5lR3JhcGhpY0xpbWl0SW50ZXJuYWwoaW50IGxpbmUpCisgICAgeworICAgICAgICByZXR1cm4gbGluZUdyYXBoaWNTdGFydEludGVybmFsKGxpbmUpICsgZkxpbmVUYWJsZVtsaW5lXS5nZXRIZWlnaHQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggaGFzIG5vdCBiZWVuIGZvcm1hdHRlZC4KKyAgICAqIElmIGFsbCB0ZXh0IGhhcyBiZWVuIGZvcm1hdHRlZCwgcmV0dXJuIHRoZSBjdXJyZW50IHRleHQgbGVuZ3RoLgorICAgICovCisgICAgcHJpdmF0ZSBpbnQgbGFzdExpbmVDaGFyU3RvcCgpCisgICAgeworICAgICAgICByZXR1cm4gbGluZUNoYXJMaW1pdEludGVybmFsKGxhc3RMaW5lKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhICd2YWxpZCcgbGluZSBjb250YWluaW5nIG9mZnNldC4gIFRoaXMgZGlmZmVycyBmcm9tIGdldExpbmVDb250YWluaW5nIGluCisgICAgICogdGhpcyBtYXBzIGtBZnRlckxhc3RMaW5lIHRvIGxhc3RMaW5lKCksIHNvIHRoYXQgdGhlIHJlc3VsdCBpcyBhbHdheXMgYSB2YWxpZAorICAgICAqIGxpbmV0YWJsZSBpbmRleC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBnZXRWYWxpZExpbmVDb250YWluaW5nKFRleHRPZmZzZXQgb2Zmc2V0KSB7CisKKyAgICAgICAgcmV0dXJuIGdldFZhbGlkTGluZUNvbnRhaW5pbmcob2Zmc2V0LmZPZmZzZXQsIG9mZnNldC5mUGxhY2VtZW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSAndmFsaWQnIGxpbmUgY29udGFpbmluZyBvZmZzZXQuICBUaGlzIGRpZmZlcnMgZnJvbSBnZXRMaW5lQ29udGFpbmluZyBpbgorICAgICAqIHRoaXMgbWFwcyBrQWZ0ZXJMYXN0TGluZSB0byBsYXN0TGluZSgpLCBzbyB0aGF0IHRoZSByZXN1bHQgaXMgYWx3YXlzIGEgdmFsaWQKKyAgICAgKiBsaW5ldGFibGUgaW5kZXguCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0VmFsaWRMaW5lQ29udGFpbmluZyhpbnQgaW5zT2Zmc2V0LCBib29sZWFuIHBsYWNlbWVudCkKKyAgICB7CisgICAgICAgIGludCBsaW5lID0gZ2V0TGluZUNvbnRhaW5pbmcoaW5zT2Zmc2V0LCBwbGFjZW1lbnQpOworICAgICAgICBpZiAobGluZSA9PSBrQWZ0ZXJMYXN0TGluZSkKKyAgICAgICAgICAgIGxpbmUgPSBsYXN0TGluZSgpOworICAgICAgICBlbHNlIGlmIChsaW5lID09IGtCZWZvcmVGaXJzdExpbmUpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJEZWJ1ZzogZ2V0TGluZUNvbnRhaW5pbmcgcmV0dXJuZWQga0JlZm9yZUZpcnN0TGluZSIpOworCisgICAgICAgIHJldHVybiBsaW5lOworICAgIH0KKworICAgIC8qKgorICAgICogUmV0dXJuIGluZGV4IG9mIGxpbmUgY29udGFpbmluZyA8dHQ+b2Zmc2V0PC90dD4uCisgICAgKiA/Pz8gSWYgb2Zmc2V0IGlzIGFmdGVyIGxhc3QgZm9ybWF0dGVkIGxpbmUsIHJldHVybnMga0FmdGVyTGFzdExpbmUuICBJcyB0aGF0IGdvb2Q/CisgICAgKiA8cD4KKyAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCB3aG9zZSBsaW5lIHNob3VsZCBiZSBsb2NhdGVkCisgICAgKiBAcmV0dXJucyBsaW5lIGNvbnRhaW5pbmcgPHR0Pm9mZnNldDwvdHQ+CisgICAgKi8KKyAgICBwcml2YXRlIGludCBnZXRMaW5lQ29udGFpbmluZyhUZXh0T2Zmc2V0IG9mZnNldCkgeworCisgICAgICAgIHJldHVybiBnZXRMaW5lQ29udGFpbmluZyhvZmZzZXQuZk9mZnNldCwgb2Zmc2V0LmZQbGFjZW1lbnQpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGdldExpbmVDb250YWluaW5nKGludCBpbnNPZmZzZXQsIGJvb2xlYW4gcGxhY2VtZW50KQorICAgIHsKKyAgICAgICAgaW50IHBvcyA9IGluc09mZnNldDsKKyAgICAgICAgaWYgKHBsYWNlbWVudCA9PSBUZXh0T2Zmc2V0LkJFRk9SRV9PRkZTRVQgJiYgcG9zID4gMCkKKyAgICAgICAgICAgIC0tcG9zOworCisgICAgICAgIGlmIChwb3MgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJEZWJ1ZzogZ2V0TGluZUNvbnRhaW5pbmcgb2Zmc2V0IDwgMDogIiArIHBvcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocG9zID49IGxhc3RMaW5lQ2hhclN0b3AoKSkgeworICAgICAgICAgICAgcmV0dXJuIGVtcHR5UGFyYWdyYXBoQXRFbmRPZlRleHQoKT8ga0FmdGVyTGFzdExpbmUgOiBsYXN0TGluZSgpOworICAgICAgICB9CisKKyAgICAgICAgaW50IGxvdywgaGlnaCwgbWlkOworICAgICAgICBpbnQgbG93U3RhcnQsIGhpZ2hTdGFydCwgbWlkU3RhcnQ7CisKKyAgICAgICAgaWYgKChmTFROZWdTdGFydCA8IGZMVFNpemUpICYmIChwb3MgPj0gZkxpbmVUYWJsZVtmTFROZWdTdGFydF0uZ2V0Q2hhclN0YXJ0KGZMVEN1clRleHRMZW4pKSkgeworICAgICAgICAgICAgcG9zIC09IGZMVEN1clRleHRMZW47CisKKyAgICAgICAgICAgIGxvdyA9IGZMVE5lZ1N0YXJ0OworICAgICAgICAgICAgaGlnaCA9IGZMVFNpemU7CisgICAgICAgICAgICBoaWdoU3RhcnQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbG93ID0gMDsKKyAgICAgICAgICAgIGhpZ2ggPSBmTFRQb3NFbmQgKyAxOworICAgICAgICAgICAgaGlnaFN0YXJ0ID0gZkxpbmVUYWJsZVtmTFRQb3NFbmRdLmdldENoYXJTdGFydCgwKSArIGZMaW5lVGFibGVbZkxUUG9zRW5kXS5nZXRDaGFyTGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICAgICAgbG93U3RhcnQgPSBmTGluZVRhYmxlW2xvd10uZ2V0Q2hhclN0YXJ0KDApOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChoaWdoU3RhcnQgPT0gbG93U3RhcnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtaWQgPSBsb3cgKyAocG9zIC0gbG93U3RhcnQpIC8gKGhpZ2hTdGFydCAtIGxvd1N0YXJ0KSAqIChoaWdoIC0gbG93KTsKKyAgICAgICAgICAgIG1pZFN0YXJ0ID0gZkxpbmVUYWJsZVttaWRdLmdldENoYXJTdGFydCgwKTsKKworICAgICAgICAgICAgaWYgKG1pZFN0YXJ0ID4gcG9zKSB7CisgICAgICAgICAgICAgICAgaGlnaCA9IG1pZDsKKyAgICAgICAgICAgICAgICBoaWdoU3RhcnQgPSBmTGluZVRhYmxlW2hpZ2hdLmdldENoYXJTdGFydCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1pZFN0YXJ0ICsgZkxpbmVUYWJsZVttaWRdLmdldENoYXJMZW5ndGgoKSA8PSBwb3MpIHsKKyAgICAgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOworICAgICAgICAgICAgICAgIGxvd1N0YXJ0ID0gZkxpbmVUYWJsZVtsb3ddLmdldENoYXJTdGFydCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAobG93IDwgaGlnaCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoqCisgICAgKiBEaXNwbGF5IHRleHQgaW4gZHJhd0FyZWEuIERvZXMgbm90IHJlZm9ybWF0IHRleHQuCisgICAgKiA8cD4KKyAgICAqIEBwYXJhbSBnIHRoZSBHcmFwaGljcyBvYmplY3QgaW4gd2hpY2ggdG8gZHJhdworICAgICogQHBhcmFtIGRyYXdBcmVhIHRoZSByZWN0YW5nbGUsIGluIGcncyBjb29yZGluYXRlIHN5c3RlbSwgaW4gd2hpY2ggdG8gZHJhdworICAgICogQHBhcmFtIG9yaWdpbiB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSB0ZXh0LCBpbiBnJ3MgY29vcmRpbmF0ZSBzeXN0ZW0KKyAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkcmF3KEdyYXBoaWNzIGcsIFJlY3RhbmdsZSBkcmF3QXJlYSwgUG9pbnQgb3JpZ2luKQorICAgIHsKKyAgICAgICAgZHJhdyhnLCBkcmF3QXJlYSwgb3JpZ2luLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZHJhdyhHcmFwaGljcyBnLCBSZWN0YW5nbGUgZHJhd0FyZWEsIFBvaW50IG9yaWdpbiwKKyAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHNlbFN0YXJ0LCBUZXh0T2Zmc2V0IHNlbFN0b3AsIENvbG9yIGhpZ2hsaWdodCkgeworCisgICAgICAgIGNoZWNrVGltZVN0YW1wKCk7CisgICAgICAgIEdyYXBoaWNzMkQgZzJkID0gR3JhcGhpY3MyRENvbnZlcnNpb24uZ2V0R3JhcGhpY3MyRChnKTsKKworICAgICAgICAvLyBHZXQgc3RhcnRpbmcgYW5kIGVuZGluZyBmaWxsICdoZWlnaHRzLicKKworICAgICAgICBpbnQgc3RhcnRGaWxsOworICAgICAgICBpbnQgZW5kRmlsbDsKKworICAgICAgICBpZiAoZkZpbGxJbmMpCisgICAgICAgICAgICBzdGFydEZpbGwgPSBkcmF3QXJlYS55IC0gb3JpZ2luLnk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0RmlsbCA9IG9yaWdpbi55IC0gKGRyYXdBcmVhLnkgKyBkcmF3QXJlYS5oZWlnaHQpOworCisgICAgICAgIGVuZEZpbGwgPSBzdGFydEZpbGwgKyBkcmF3QXJlYS5oZWlnaHQ7CisKKyAgICAgICAgLy8gV2UncmUgZHJhd2luZyBvbmUgbW9yZSBsaW5lIHRoYW4gbmVjZXNzYXJ5IHdoZW4gd2UgdXBkYXRlIGJlY2F1c2Ugb2YgYQorICAgICAgICAvLyBzZWxlY3Rpb24gY2hhbmdlLiAgQnV0IHdlJ3JlIGRyYXdpbmcgdGhlIHJpZ2h0IGFtb3VudCBvZiBsaW5lcyB3aGVuIHdlCisgICAgICAgIC8vIHJlZnJlc2ggdGhlIHdob2xlIGRpc3BsYXkuICBUaGlzIGFmZmVjdHMgcmVuZGVyaW5nIHNwZWVkIHNpZ25pZmljYW50bHksCisgICAgICAgIC8vIGFuZCBjcmVhdGluZyBhIG5ldyBwYXJhZ3JhcGggcmVuZGVyZXIgZm9yIGVhY2ggbGluZSBkb2Vzbid0IGhlbHAgZWl0aGVyLgorICAgICAgICAvLyBGb3Igbm93LCBJJ20gZ29pbmcgdG8gc3VidHJhY3Qgb25lIGZyb20gdGhlIGZpbGwgaGVpZ2h0LCBvbiB0aGUgdGhlb3J5CisgICAgICAgIC8vIHRoYXQgd2UncmUgcGlja2luZyB1cCB0aGUgZXh0cmEgbGluZSBiZWNhdXNlIG9mIGEgb25lLXBpeGVsIHNsb3AuCisgICAgICAgIC8vIFRoaXMgc2VlbXMgdG8gd29yaywgYWx0aG91Z2ggcGVyaGFwcyBpZiBvbmUgcGl4ZWwgb2YgYSBsaW5lIGF0IHRoZQorICAgICAgICAvLyBib3R0b20gc2hvdWxkIGRyYXcsIGl0IHdvbid0LgorCisgICAgICAgIC0tZW5kRmlsbDsKKworICAgICAgICAvLyBGb3JtYXQgdG8gZW5kaW5nIGZpbGwgaGVpZ2h0LCBzbyBsaW5lIHRhYmxlIGlzIHZhbGlkIGZvciBhbGwgbGluZXMgd2UgbmVlZCB0byBkcmF3LgorCisgICAgICAgIGZvcm1hdFRvSGVpZ2h0KGVuZEZpbGwpOworCisgICAgICAgIC8vIEdldCBzdGFydGluZyBhbmQgZW5kaW5nIGxpbmVzIGZvciBmaWxsIGhlaWdodC4gIElmIHRoZSBzdGFydCBvZiB0aGUgZmlsbCBpcyBhZnRlciB0aGUgbGFzdCBsaW5lLAorICAgICAgICAvLyBvciB0aGUgZW5kIG9mIHRoZSBmaWxsIGlzIGJlZm9yZSB0aGUgZmlyc3QgbGluZSwgcmV0dXJuLgorCisgICAgICAgIGludCBjdXJMaW5lID0gZmluZExpbmVBdChzdGFydEZpbGwpOworICAgICAgICBpZiAoY3VyTGluZSA9PSBrQWZ0ZXJMYXN0TGluZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxzZSBpZiAoY3VyTGluZSA9PSBrQmVmb3JlRmlyc3RMaW5lKQorICAgICAgICAgICAgY3VyTGluZSA9IDA7CisKKyAgICAgICAgaW50IGxhc3RMaW5lID0gZmluZExpbmVBdChlbmRGaWxsKTsKKyAgICAgICAgaWYgKGxhc3RMaW5lID09IGtCZWZvcmVGaXJzdExpbmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGVsc2UgaWYgKGxhc3RMaW5lID09IGtBZnRlckxhc3RMaW5lKQorICAgICAgICAgICAgbGFzdExpbmUgPSBsYXN0TGluZSgpOworCisgICAgICAgIC8vIEdldCB0aGUgYmFzZSBjb29yZGluYXRlcyAobGluZVgsIGxpbmVZKSBmb3IgdGhlIHN0YXJ0aW5nIGxpbmUuCisKKyAgICAgICAgaW50IGxpbmVYLCBsaW5lWTsKKworICAgICAgICBpbnQgZ1N0YXJ0ID0gbGluZUdyYXBoaWNTdGFydEludGVybmFsKGN1ckxpbmUpOworCisgICAgICAgIGlmIChmSExpbmUpIHsKKyAgICAgICAgICAgIGlmIChmTGluZUluYykKKyAgICAgICAgICAgICAgICBsaW5lWCA9IG9yaWdpbi54OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpbmVYID0gb3JpZ2luLnggLSBmTGluZURpbTsKKyAgICAgICAgICAgIGlmIChmRmlsbEluYykKKyAgICAgICAgICAgICAgICBsaW5lWSA9IG9yaWdpbi55ICsgZ1N0YXJ0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpbmVZID0gb3JpZ2luLnkgLSAoZ1N0YXJ0ICsgZkxpbmVUYWJsZVtjdXJMaW5lXS5nZXRIZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZkxpbmVJbmMpCisgICAgICAgICAgICAgICAgbGluZVkgPSBvcmlnaW4ueTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaW5lWSA9IG9yaWdpbi55IC0gZkxpbmVEaW07CisgICAgICAgICAgICBpZiAoZkZpbGxJbmMpCisgICAgICAgICAgICAgICAgbGluZVggPSBvcmlnaW4ueCArIGdTdGFydDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaW5lWCA9IG9yaWdpbi54IC0gKGdTdGFydCArIGZMaW5lVGFibGVbY3VyTGluZV0uZ2V0SGVpZ2h0KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGxpbmVzLCBkcmF3aW5nIGVhY2ggb25lIGFuZCBpbmNyZW1lbnRpbmcgdGhlIGJhc2UgY29vcmRpbmF0ZSBieSB0aGUgbGluZSBoZWlnaHQuCisKKworICAgICAgICBmb3IgKDsgY3VyTGluZSA8PSBsYXN0TGluZTsgY3VyTGluZSsrKSB7CisgICAgICAgICAgICAvLyBBZGp1c3QgY3VyTGluZSBhcm91bmQgZ2FwIGluIGxpbmUgdGFibGUuCisgICAgICAgICAgICBpZiAoKGN1ckxpbmUgPiBmTFRQb3NFbmQpICYmIChjdXJMaW5lIDwgZkxUTmVnU3RhcnQpKQorICAgICAgICAgICAgICAgIGN1ckxpbmUgPSBmTFROZWdTdGFydDsKKworICAgICAgICAgICAgZkxpbmVUYWJsZVtjdXJMaW5lXS5yZW5kZXJXaXRoSGlnaGxpZ2h0KGZMVEN1clRleHRMZW4sIGcyZCwgZkxpbmVEaW0sIGxpbmVYLCBsaW5lWSwgc2VsU3RhcnQsIHNlbFN0b3AsIGhpZ2hsaWdodCk7CisKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCBsaW5lIGJhc2UgZm9yIG5leHQgaXRlcmF0aW9uLgorICAgICAgICAgICAgaW50IGxpbmVJbmMgPSBmTGluZVRhYmxlW2N1ckxpbmVdLmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGZGaWxsSW5jKSB7CisgICAgICAgICAgICAgICAgaWYgKGZITGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZVkgKz0gbGluZUluYzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxpbmVYICs9IGxpbmVJbmM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChmSExpbmUpCisgICAgICAgICAgICAgICAgICAgIGxpbmVZIC09IGxpbmVJbmM7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsaW5lWCAtPSBsaW5lSW5jOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBGb3JtYXQgdGV4dCB0byBnaXZlbiBoZWlnaHQuCisgICAgKiBAcGFyYW0gaGVpZ2h0IHRoZSBoZWlnaHQgdG8gd2hpY2ggdGV4dCB3aWxsIGJlIGZvcm1hdHRlZC4KKyAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBmb3JtYXRUb0hlaWdodChpbnQgcmVxSGVpZ2h0KQorICAgIHsKKyAgICAgICAgY2hlY2tUaW1lU3RhbXAoKTsKKyAgICAgICAgaWYgKHJlcUhlaWdodCA8PSBmUGl4SGVpZ2h0KSAvLyBhbHJlYWR5IGZvcm1hdHRlZCB0byB0aGlzIGhlaWdodAorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChmVGV4dC5sZW5ndGgoKSA9PSBsYXN0TGluZUNoYXJTdG9wKCkpIC8vIGFscmVhZHkgZm9ybWF0dGVkIGFsbCB0aGUgdGV4dAorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vICsrKyBzaG91bGQgZGlzYWJsZSB1cGRhdGUgdGhyZWFkIGhlcmUKKworICAgICAgICBpZiAoZkxUTmVnU3RhcnQgPCBmTFRTaXplKQorICAgICAgICAgICAgc2hpZnRUYWJsZVRvKGZMVFNpemUgLSAxKTsKKworICAgICAgICBmb3JtYXRUZXh0KDAsIDAsIHJlcUhlaWdodCwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvcm1hdCB0ZXh0IHRvIGdpdmVuIG9mZnNldC4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0IHRoZSBvZmZzZXQgdG8gd2hpY2ggdGV4dCB3aWxsIGJlIGZvcm1hdHRlZC4KKyAgICAgKi8KKyAgICAgcHJpdmF0ZSB2b2lkIGZvcm1hdFRvT2Zmc2V0KFRleHRPZmZzZXQgb2Zmc2V0KQorICAgICB7CisgICAgICAgIGZvcm1hdFRvT2Zmc2V0KG9mZnNldC5mT2Zmc2V0LCBvZmZzZXQuZlBsYWNlbWVudCk7CisgICAgIH0KKyAgICAgCisgICAgIHByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgZm9ybWF0VG9PZmZzZXQoaW50IG9mZnNldCwgYm9vbGVhbiBwbGFjZW1lbnQpIHsKKyAgICAgICAgCisgICAgICAgIGNoZWNrVGltZVN0YW1wKCk7CisgICAgICAgIGludCBsbGNzID0gbGFzdExpbmVDaGFyU3RvcCgpOworICAgICAgICBpZiAobGxjcyA8IGZMVEN1clRleHRMZW4pIHsKKyAgICAgICAgICAgIGludCBsaW1pdCA9IG9mZnNldDsKKyAgICAgICAgICAgIGlmIChwbGFjZW1lbnQgPT0gVGV4dE9mZnNldC5BRlRFUl9PRkZTRVQpIC8vIGZvcm1hdCB0byBwYXN0IGNoYXJhY3RlciBvZmZzZXQgaXMgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgICAgICAgICAgbGltaXQrKzsKKyAgICAgICAgICAgIGlmIChsaW1pdCA+PSBsbGNzKSB7IC8vID8/PyB3b3VsZCAnPicgYmUgb2sgaW5zdGVhZCBvciAnPj0nPworICAgICAgICAgICAgICAgIGlmIChsaW1pdCA+IGZMVEN1clRleHRMZW4pCisgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gZkxUQ3VyVGV4dExlbjsKKworICAgICAgICAgICAgICAgIHNoaWZ0VGFibGVUbyhsYXN0TGluZSgpKTsKKyAgICAgICAgICAgICAgICBmb3JtYXRUZXh0KGxsY3MsIGxpbWl0IC0gbGxjcywgSW50ZWdlci5NQVhfVkFMVUUsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgIH0KKworLyoqCisqIFJlZm9ybWF0IHRleHQgYWZ0ZXIgYSBjaGFuZ2UuCisqIEFmdGVyIHRoZSBmb3JtYXR0ZXIncyB0ZXh0IGNoYW5nZXMsIGNhbGwgdGhpcyBtZXRob2QgdG8gcmVmb3JtYXQuICBEb2VzCisqIG5vdCByZWRyYXcuCisqIEBwYXJhbSBhZlN0YXJ0IHRoZSBvZmZzZXQgaW50byB0aGUgdGV4dCB3aGVyZSBtb2RpZmljYXRpb24gYmVnYW47ICBpZSwgdGhlCisqIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdGV4dCB3aGljaCBpcyAiZGlmZmVyZW50IiBpbiBzb21lIHdheS4gIERvZXMgbm90CisqIGhhdmUgdG8gYmUgbm9ubmVnYXRpdmUuCisqIEBwYXJhbSBhZkxlbmd0aCB0aGUgbnVtYmVyIG9mIG5ldyBvciBjaGFuZ2VkIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQuICBTaG91bGQgbmV2ZXIKKyogYmUgbGVzcyB0aGFuIDAuCisqIEBwYXJhbSB2aWV3UmVjdCB0aGUgUmVjdGFuZ2xlIGluIHdoaWNoIHRoZSB0ZXh0IHdpbGwgYmUgZGlzcGxheWVkLiAgVGhpcyBpcyBuZWVkZWQgZm9yCisqIHJldHVybmluZyB0aGUgImRhbWFnZWQiIGFyZWEgLSB0aGUgYXJlYSBvZiB0aGUgc2NyZWVuIGluIHdoaWNoIHRoZSB0ZXh0IG11c3QgYmUgcmVkcmF3bi4KKyogQHBhcmFtIG9yaWdpbiB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSB0ZXh0LCBpbiB0aGUgZGlzcGxheSdzIGNvb3JkaW5hdGUgc3lzdGVtCisqIEByZXR1cm5zIGEgPHR0PlJlY3RhbmdsZTwvdHQ+IHdoaWNoIHNwZWNpZmllcyB0aGUgYXJlYSBpbiB3aGljaCB0ZXh0IG11c3QgYmUKKyogcmVkcmF3biB0byByZWZsZWN0IHRoZSBjaGFuZ2UgdG8gdGhlIHRleHQuCisqLworICAgIHB1YmxpYyBSZWN0YW5nbGUgdXBkYXRlRm9ybWF0KGZpbmFsIGludCBhZlN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgYWZMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZSB2aWV3UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnQgb3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKGFmU3RhcnQgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJEZWJ1ZzogdXBkYXRlRm9ybWF0IGFmU3RhcnQgPCAwOiAiICsgYWZTdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZCZ0Zvcm1hdEFsbG93ZWQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJhY2tncm91bmQgZm9ybWF0dGluZyBzaG91bGQgaGF2ZSBiZWVuIGRpc2FibGVkIik7CisgICAgICAgIH0KKyAgICAgICAgZkN1clRpbWVTdGFtcCA9IGZUZXh0LmdldFRpbWVTdGFtcCgpOworICAgICAgICAKKyAgICAgICAgaW50IGN1ckxpbmUgPSBnZXRWYWxpZExpbmVDb250YWluaW5nKGFmU3RhcnQsIFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUKTsKKyAgICAgICAgaW50IGxpbmVTdGFydFBvcyA9IGxpbmVDaGFyU3RhcnRJbnRlcm5hbChjdXJMaW5lKTsKKworICAgICAgICAvLyBvcHRpbWl6ZSBieSBmaW5kaW5nIG91dCB3aGV0aGVyIGNoYW5nZSBvY2N1cnJlZAorICAgICAgICAvLyBhZnRlciBmaXJzdCB3b3JkIGJyZWFrIG9uIGN1cmxpbmUKKworICAgICAgICBpbnQgZmlyc3RQb3NzaWJsZUJyZWFrOworCisgICAgICAgIGlmIChsaW5lU3RhcnRQb3MgPCBmVGV4dC5sZW5ndGgoKSkgeworCisgICAgICAgICAgICBpZiAoZkxpbmVCcmVhayA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgZkxpbmVCcmVhayA9IEJyZWFrSXRlcmF0b3IuZ2V0TGluZUluc3RhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXRlciA9IGZUZXh0LmNyZWF0ZUNoYXJhY3Rlckl0ZXJhdG9yKCk7CisgICAgICAgICAgICBjaGFySXRlci5zZXRJbmRleChsaW5lU3RhcnRQb3MpOworICAgICAgICAgICAgZkxpbmVCcmVhay5zZXRUZXh0KGNoYXJJdGVyKTsKKworICAgICAgICAgICAgZmlyc3RQb3NzaWJsZUJyZWFrID0gZkxpbmVCcmVhay5mb2xsb3dpbmcobGluZVN0YXJ0UG9zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBmaXJzdFBvc3NpYmxlQnJlYWsgPSBhZlN0YXJ0OworCisgICAgICAgIGlmICgoY3VyTGluZSA+IDApICYmIChmaXJzdFBvc3NpYmxlQnJlYWsgPT0gQnJlYWtJdGVyYXRvci5ET05FIHx8IGFmU3RhcnQgPD0gZmlyc3RQb3NzaWJsZUJyZWFrKSkgeworICAgICAgICAgICAgY3VyTGluZS0tOworICAgICAgICAgICAgaWYgKGN1ckxpbmUgPCBmTFROZWdTdGFydCAmJiBjdXJMaW5lID4gZkxUUG9zRW5kKQorICAgICAgICAgICAgICAgIGN1ckxpbmUgPSBmTFRQb3NFbmQ7CisgICAgICAgIH0KKworICAgICAgICBzaGlmdFRhYmxlVG8oY3VyTGluZSk7CisKKyAgICAgICAgaW50IHBpeEhlaWdodDsgLy8gYWZ0ZXIgdGhlIGZvcm1hdFRleHQgY2FsbCwgYXQgbGVhc3QgcGl4SGVpZ2h0IHRleHQgbXVzdCBiZSBmb3JtYXR0ZWQKKworICAgICAgICBpZiAoZkhMaW5lKSB7CisgICAgICAgICAgICBpZiAoZkZpbGxJbmMpCisgICAgICAgICAgICAgICAgcGl4SGVpZ2h0ID0gdmlld1JlY3QueSArIHZpZXdSZWN0LmhlaWdodCAtIG9yaWdpbi55OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBpeEhlaWdodCA9IG9yaWdpbi55IC0gdmlld1JlY3QueTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmRmlsbEluYykKKyAgICAgICAgICAgICAgICBwaXhIZWlnaHQgPSB2aWV3UmVjdC54ICsgdmlld1JlY3Qud2lkdGggLSBvcmlnaW4ueDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwaXhIZWlnaHQgPSBvcmlnaW4ueCAtIHZpZXdSZWN0Lng7CisgICAgICAgIH0KKworICAgICAgICBSZWN0YW5nbGUgciA9IGZvcm1hdFRleHQoYWZTdGFydCwgYWZMZW5ndGgsIHBpeEhlaWdodCwgZmFsc2UpOworCisgICAgICAgIC8vZHVtcExpbmVUYWJsZSgpOworCisgICAgICAgIGlmICgoZlBpeEhlaWdodCA8IHBpeEhlaWdodCkgJiYgKGZMVE5lZ1N0YXJ0IDwgZkxUU2l6ZSkgJiYgKGZMVEN1clRleHRMZW4gPiBsYXN0TGluZUNoYXJTdG9wKCkpKSB7CisgICAgICAgICAgICBzaGlmdFRhYmxlVG8obGFzdExpbmUoKSk7CisgICAgICAgICAgICBSZWN0YW5nbGUgcyA9IGZvcm1hdFRleHQoMCwgMCwgcGl4SGVpZ2h0LCBmYWxzZSk7CisgICAgICAgICAgICByID0gci51bmlvbihzKTsKKyAgICAgICAgfQorCisgICAgICAgIGludGxSZWN0KG9yaWdpbiwgcik7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJEYW1hZ2VkIHJlY3Q6ICIrcisiOyBvcmlnaW46ICIrb3JpZ2luKTsKKworICAgICAgICAvLyBkb24ndCBuZWVkIHRvIHN5bmNocm9uaXplZCBoZXJlLCBiL2MgdGhlIGRhZW1vbiBzaG91bGRuJ3QgYmUgcnVubmluZyB3aGVuCisgICAgICAgIC8vIHRoaXMgaXMgZXhlY3V0aW5nCisKKyAgICAgICAgaWYgKGZUZXh0Lmxlbmd0aCgpIDwgbGFzdExpbmVDaGFyU3RvcCgpKQorICAgICAgICAgICAgZW5hYmxlQkdGb3JtYXQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RvcEJhY2tncm91bmRGb3JtYXR0aW5nKCk7CisKKyAgICAgICAgLy9kdW1wTGluZVRhYmxlKCk7CisKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgTGluZUJyZWFrTWVhc3VyZXIgbWFrZU1lYXN1cmVyKGludCBwYXJhZ3JhcGhTdGFydCwgaW50IHBhcmFncmFwaExpbWl0KSB7CisKKyAgICAgICAgTVRleHRJdGVyYXRvciBpdGVyID0gbmV3IE1UZXh0SXRlcmF0b3IoZlRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZGb250UmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhMaW1pdCk7CisgICAgICAgIExpbmVCcmVha01lYXN1cmVyIG1lYXN1cmVyID0gbmV3IExpbmVCcmVha01lYXN1cmVyKGl0ZXIsIGZGb250UmVuZGVyQ29udGV4dCk7CisgICAgICAgIGlmIChmZ0NhY2hlTWVhc3VyZXJzKSB7CisgICAgICAgICAgICBmQ2FjaGVkTWVhc3VyZXJTdGFydCA9IHBhcmFncmFwaFN0YXJ0OworICAgICAgICAgICAgZkNhY2hlZE1lYXN1cmVyTGltaXQgPSBwYXJhZ3JhcGhMaW1pdDsKKyAgICAgICAgICAgIGZDYWNoZWRNZWFzdXJlciA9IG1lYXN1cmVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtZWFzdXJlcjsKKyAgICB9ICAgICAgICAKKworLyoqCisqIENvbXB1dGUgdGV4dCBmb3JtYXQuICBUaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRleHQgZm9ybWF0OyAgaXQgY2FuIGJlCisqIGNhbGxlZCBmb3IgdmFyaW91cyBwdXJwb3NlczogIHRvIHJlZm9ybWF0IHRleHQgYWZ0ZXIgYW4gZWRpdCwgdG8KKyogZm9ybWF0IHRleHQgdG8gYSBwYXJ0aWN1bGFyIGhlaWdodCwgb3IgdG8gZm9ybWF0IHRleHQgdXAgdG8gYQorKiBwYXJ0aWN1bGFyIG9mZnNldC4KKyogPHA+CisqIFRoZSBjYWxsaW5nIG1ldGhvZCBtdXN0IGVuc3VyZSB0aGF0IDx0dD5mTGluZVRhYmxlPC90dD4gaGFzIGJlZW4gc2hpZnRlZAorKiBzdWNoIHRoYXQgdGhlIGxhc3QgcG9zaXRpdmUgbGluZSBpcyB3aGVyZSB0aGUgZm9ybWF0dGluZyBvcGVyYXRpb24gd2lsbAorKiBiZWdpbi4KKyogPHA+CisqIENhbGxlZCBieTogPHR0PmZvcm1hdFRvSGVpZ2h0KCk8L3R0PiwgPHR0PnVwZGF0ZUZvcm1hdCgpPC90dD4sCisqIDx0dD50ZXh0T2Zmc2V0VG9Qb2ludCgpPC90dD4sIDx0dD5nZXRCb3VuZGluZ1JlY3QoKTwvdHQ+CisqIEBwYXJhbSBhZlN0YXJ0IHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdGV4dCB3aGljaCBoYXMgY2hhbmdlZAorKiBAcGFyYW0gYWZMZW5ndGggdGhlIG51bWJlciBvZiBuZXcgb3IgY2hhbmdlZCBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0CisqIEBwYXJhbSByZXFIZWlnaHQgdGhlIHBpeGVsIGhlaWdodCB0byB3aGljaCB0ZXh0IG11c3QgYmUgZm9ybWF0dGVkLiAgSWdub3JlZAorKiBpZiA8dHQ+Zm9ybWF0QWxsTmV3VGV4dDwvdHQ+IGlzIDx0dD50cnVlPC90dD4sIG9yIGlmIG9sZCBsaW5lcyByZW1haW4gaW4gdGhlCisqIGxpbmUgdGFibGUgYWZ0ZXIgYWxsIGNoYW5nZWQgdGV4dCBoYXMgYmVlbiBmb3JtYXR0ZWQuCisqIEBwYXJhbSBzZWVrT2Zmc2V0QXRFbmQgaWYgPHR0PnRydWU8L3R0PiwgZm9ybWF0dGluZyBjb250aW51ZXMgdW50aWwgdGhlIGxpbmUKKyogY29udGFpbmluZyBhZlN0YXJ0K2FmTGVuZ3RoIGhhcyBiZWVuIGZvcm1hdHRlZC4gIElmIGZhbHNlLCBmb3JtYXR0aW5nIG1heSBzdG9wCisqIHdoZW4gcmVxSGVpZ2h0IGhhcyBiZWVuIHJlYWNoZWQuICBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgPHR0PnRydWU8L3R0PiA8Yj5vbmx5PC9iPgorKiBpZiB0aGUgb2JqZWN0IG9mIHRoZSBmb3JtYXR0aW5nIG9wZXJhdGlvbiBpcyB0byBleHRlbmQgZm9ybWF0dGluZyB0byBhIHBhcnRpY3VsYXIKKyogb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dDsgIGl0IHNob3VsZCBiZSA8dHQ+ZmFsc2U8L3R0PiBldmVyeXdoZXJlIGVsc2UuCisqIEByZXR1cm5zIGEgcmVjdGFuZ2xlLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIHRleHQsIHdoaWNoIGVuY2xvc2VzIHRoZQorKiBzY3JlZW4gYXJlYSB3aG9zZSBhcHBlYXJhbmNlIGhhcyBjaGFuZ2VkIGR1ZSB0byB0aGUgcmVmb3JtYXR0aW5nLgorKi8KKworICAgIHByaXZhdGUgUmVjdGFuZ2xlIGZvcm1hdFRleHQoaW50IGFmU3RhcnQsIGZpbmFsIGludCBhZkxlbmd0aCwgaW50IHJlcUhlaWdodCwgYm9vbGVhbiBzZWVrT2Zmc2V0QXRFbmQpCisgICAgeworICAgIC8qIGFzc3VtZXMgbGluZSB0YWJsZSBzaGlmdGVkIHN1Y2ggdGhhdCBmaXJzdCBsaW5lIHRvIGZvcm1hdCBpcworICAgIGxhc3QgcG9zaXRpdmUgbGluZSAqLworCisgICAgICAgIGlmIChhZkxlbmd0aCA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFmTGVuZ3RoIDwgMC4gIGFmTGVuZ3RoPSIgKyBhZkxlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbmV3VGV4dEVuZCA9IGFmU3RhcnQgKyBhZkxlbmd0aDsKKworICAgICAgICBmaW5hbCBpbnQgbmV3Q3VyVGV4dExlbiA9IGZUZXh0Lmxlbmd0aCgpOworCisgICAgICAgIC8vIHZhcmlhYmxlIG5vdCB1c2VkIGludCBvbGRQaXhIZWlnaHQgPSBmUGl4SGVpZ2h0OworICAgICAgICBpbnQgb2xkRnVsbFBpeEhlaWdodCA9IGZGdWxsUGl4SGVpZ2h0OworICAgICAgICBmUGl4SGVpZ2h0IC09IGZMaW5lVGFibGVbZkxUUG9zRW5kXS5nZXRIZWlnaHQoKTsKKworICAgICAgICBpbnQgY3VyR3JhcGhpY1N0YXJ0ID0gZkxpbmVUYWJsZVtmTFRQb3NFbmRdLmdldEdyYXBoaWNTdGFydChmUGl4SGVpZ2h0KTsKKyAgICAgICAgaW50IGN1ckxpbmVTdGFydCA9IGZMaW5lVGFibGVbZkxUUG9zRW5kXS5nZXRDaGFyU3RhcnQobmV3Q3VyVGV4dExlbik7CisgICAgICAgIAorICAgICAgICBpbnQgY3VyUGFyYWdyYXBoU3RhcnQgPSBmVGV4dC5wYXJhZ3JhcGhTdGFydChjdXJMaW5lU3RhcnQpOworICAgICAgICBpbnQgY3VyUGFyYWdyYXBoTGltaXQgPSBJbnRlZ2VyLk1JTl9WQUxVRTsgLy8gZHVtbXkgdmFsdWUKKworICAgICAgICBpbnQgZGFtYWdlU3RhcnQgPSBjdXJHcmFwaGljU3RhcnQ7CisKKyAgICAgICAgUGFyYWdyYXBoUmVuZGVyZXIgcmVuZGVyZXIgPSBudWxsOworICAgICAgICBMaW5lQnJlYWtNZWFzdXJlciBtZWFzdXJlciA9IG51bGw7CisgICAgICAgIAorICAgICAgICAvLyB0cnkgdG8gdXNlIGNhY2hlZCBMaW5lQnJlYWtNZWFzdXJlciBpZiBwb3NzaWJsZQorICAgICAgICBpZiAoZkNhY2hlZE1lYXN1cmVyICE9IG51bGwgJiYgCisgICAgICAgICAgICBjdXJQYXJhZ3JhcGhTdGFydCA9PSBmQ2FjaGVkTWVhc3VyZXJTdGFydCkgeworCisgICAgICAgICAgICBjdXJQYXJhZ3JhcGhMaW1pdCA9IGZUZXh0LnBhcmFncmFwaExpbWl0KGN1clBhcmFncmFwaFN0YXJ0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAobmV3Q3VyVGV4dExlbiAtIGZMVEN1clRleHRMZW4gPT0gMSAmJiBhZkxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJQYXJhZ3JhcGhMaW1pdCA9PSBmQ2FjaGVkTWVhc3VyZXJMaW1pdCsxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBNVGV4dEl0ZXJhdG9yIGl0ZXIgPSBuZXcgTVRleHRJdGVyYXRvcihmVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZGb250UmVzb2x2ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyUGFyYWdyYXBoU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJQYXJhZ3JhcGhMaW1pdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmQ2FjaGVkTWVhc3VyZXIuaW5zZXJ0Q2hhcihpdGVyLCBhZlN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZDYWNoZWRNZWFzdXJlckxpbWl0ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlciA9IGZDYWNoZWRNZWFzdXJlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmTFRDdXJUZXh0TGVuIC0gbmV3Q3VyVGV4dExlbiA9PSAxICYmIGFmTGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZDYWNoZWRNZWFzdXJlckxpbWl0ID4gZkNhY2hlZE1lYXN1cmVyU3RhcnQgKyAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clBhcmFncmFwaExpbWl0ID09IGZDYWNoZWRNZWFzdXJlckxpbWl0LTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1UZXh0SXRlcmF0b3IgaXRlciA9IG5ldyBNVGV4dEl0ZXJhdG9yKGZUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkZvbnRSZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clBhcmFncmFwaFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyUGFyYWdyYXBoTGltaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZkNhY2hlZE1lYXN1cmVyLmRlbGV0ZUNoYXIoaXRlciwgYWZTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmQ2FjaGVkTWVhc3VyZXJMaW1pdCAtPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZXIgPSBmQ2FjaGVkTWVhc3VyZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGZDYWNoZWRNZWFzdXJlciA9IG51bGw7CisgICAgICAgICAgICAgICAgZmdDYWNoZU1lYXN1cmVycyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobWVhc3VyZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gc2V0IHVwIHJlbmRlcmVyIHNpbmNlIHRoZSBwYXJhZ3JhcGggdXBkYXRlIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIGZvcm1hdHRpbmcgbG9vcCB3aWxsIG5vdCBoYXBwZW4KKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgc3R5bGUgPSBmVGV4dC5wYXJhZ3JhcGhTdHlsZUF0KGN1clBhcmFncmFwaFN0YXJ0KTsKKyAgICAgICAgICAgICAgICByZW5kZXJlciA9IGdldFJlbmRlcmVyRm9yKHN0eWxlKTsKKyAgICAgICAgICAgICAgICBtZWFzdXJlci5zZXRQb3NpdGlvbihjdXJMaW5lU3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobWVhc3VyZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gdHJpZ2dlciBwYXJhZ3JhcGggdXBkYXRlIGF0IHN0YXJ0IG9mIGZvcm1hdHRpbmcgbG9vcAorICAgICAgICAgICAgY3VyUGFyYWdyYXBoTGltaXQgPSBjdXJQYXJhZ3JhcGhTdGFydDsKKyAgICAgICAgICAgIGN1clBhcmFncmFwaFN0YXJ0ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGZMVEN1clRleHRMZW4gPSBuZXdDdXJUZXh0TGVuOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibGluZTogIiArIGZMVFBvc0VuZCArICIsIGNsczogIiArIGN1ckxpbmVTdGFydCk7CisKKworICAgICAgICAgICAgaWYgKGN1ckxpbmVTdGFydCA+PSBjdXJQYXJhZ3JhcGhMaW1pdCkgeworICAgICAgICAgICAgICAgIGN1clBhcmFncmFwaFN0YXJ0ID0gY3VyUGFyYWdyYXBoTGltaXQ7CisgICAgICAgICAgICAgICAgY3VyUGFyYWdyYXBoTGltaXQgPSBmVGV4dC5wYXJhZ3JhcGhMaW1pdChjdXJQYXJhZ3JhcGhTdGFydCk7CisKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgc3R5bGUgPSBmVGV4dC5wYXJhZ3JhcGhTdHlsZUF0KGN1clBhcmFncmFwaFN0YXJ0KTsKKyAgICAgICAgICAgICAgICByZW5kZXJlciA9IGdldFJlbmRlcmVyRm9yKHN0eWxlKTsKKworICAgICAgICAgICAgICAgIGlmIChjdXJQYXJhZ3JhcGhTdGFydCA8IGN1clBhcmFncmFwaExpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVyID0gbWFrZU1lYXN1cmVyKGN1clBhcmFncmFwaFN0YXJ0LCBjdXJQYXJhZ3JhcGhMaW1pdCk7CisgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVyLnNldFBvc2l0aW9uKGN1ckxpbmVTdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtZWFzdXJlciA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBoYXZlT2xkRGlyZWN0aW9uID0gZkxpbmVUYWJsZVtmTFRQb3NFbmRdICE9IG51bGw7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBvbGREaXJlY3Rpb24gPSBmYWxzZTsgLy8gIGR1bW15IHZhbHVlIGZvciBjb21waWxlcgorICAgICAgICAgICAgICAgIGlmIChoYXZlT2xkRGlyZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZERpcmVjdGlvbiA9IGZMaW5lVGFibGVbZkxUUG9zRW5kXS5pc0xlZnRUb1JpZ2h0KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZkxpbmVUYWJsZVtmTFRQb3NFbmRdID0gcmVuZGVyZXIubGF5b3V0KGZUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTGluZVRhYmxlW2ZMVFBvc0VuZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRm9udFJlbmRlckNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clBhcmFncmFwaFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJQYXJhZ3JhcGhMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZldyYXAgPyBmTGluZURpbSA6IEludGVnZXIuTUFYX1ZBTFVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTGluZURpbSk7CisgICAgICAgICAgICAgICAgaWYgKGhhdmVPbGREaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZMaW5lVGFibGVbZkxUUG9zRW5kXS5pc0xlZnRUb1JpZ2h0KCkgIT0gb2xkRGlyZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdUZXh0RW5kID0gTWF0aC5tYXgobmV3VGV4dEVuZCwgY3VyUGFyYWdyYXBoTGltaXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTGF5b3V0SW5mbyB0aGVMaW5lID0gZkxpbmVUYWJsZVtmTFRQb3NFbmRdOworCisgICAgICAgICAgICAgICAgdGhlTGluZS5zZXRHcmFwaGljU3RhcnQoY3VyR3JhcGhpY1N0YXJ0KTsKKyAgICAgICAgICAgICAgICBjdXJHcmFwaGljU3RhcnQgKz0gdGhlTGluZS5nZXRIZWlnaHQoKTsKKworICAgICAgICAgICAgICAgIGZQaXhIZWlnaHQgKz0gdGhlTGluZS5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBjdXJMaW5lU3RhcnQgKz0gdGhlTGluZS5nZXRDaGFyTGVuZ3RoKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWZXcmFwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBsaW5lV2lkdGggPSB0aGVMaW5lLmdldFRvdGFsQWR2YW5jZSgpICsgdGhlTGluZS5nZXRMZWFkaW5nTWFyZ2luKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGVMaW5lLmlzTGVmdFRvUmlnaHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZNYXhYIDwgbGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZk1heFggPSBsaW5lV2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZkxpbmVEaW0tbGluZVdpZHRoIDwgZk1pblgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTWluWCA9IGZMaW5lRGltLWxpbmVXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgTmV4dCwgZGlzY2FyZCBvYnNvbGV0ZSBsaW5lcy4gIEEgbGluZSBpcyBvYnNvbGV0ZSBpZiBpdAorICAgICAgICAgICAgICAgIGNvbnRhaW5zIG5ldyB0ZXh0IG9yIHRleHQgd2hpY2ggaGFzIGJlZW4gZm9ybWF0dGVkLgorICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgd2hpbGUgKGZMVE5lZ1N0YXJ0IDwgZkxUU2l6ZSkgeworICAgICAgICAgICAgICAgIGludCBsaW5lUG9zID0gZkxpbmVUYWJsZVtmTFROZWdTdGFydF0uZ2V0Q2hhclN0YXJ0KG5ld0N1clRleHRMZW4pOworICAgICAgICAgICAgICAgIGlmIChsaW5lUG9zID49IGN1ckxpbmVTdGFydCAmJiBsaW5lUG9zID49IG5ld1RleHRFbmQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJkZWxldGUgbmVnIGxpbmU6ICIgKyBmTFROZWdTdGFydCk7CisgICAgICAgICAgICAgICAgZlBpeEhlaWdodCAtPSBmTGluZVRhYmxlW2ZMVE5lZ1N0YXJ0XS5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBmTGluZVRhYmxlW2ZMVE5lZ1N0YXJ0KytdID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IHN0b3BBdDsKKyAgICAgICAgICAgIGlmIChmTFROZWdTdGFydCA8IGZMVFNpemUpCisgICAgICAgICAgICAgICAgc3RvcEF0ID0gZkxpbmVUYWJsZVtmTFROZWdTdGFydF0uZ2V0Q2hhclN0YXJ0KG5ld0N1clRleHRMZW4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3BBdCA9IG5ld0N1clRleHRMZW47CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgTm93LCBpZiBleGl0IGNvbmRpdGlvbnMgYXJlbid0IG1ldCwgY3JlYXRlIGEgbmV3IGxpbmUuCisgICAgICAgICAgICAqLworCisgICAgICAgICAgICBpZiAoc2Vla09mZnNldEF0RW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKChjdXJMaW5lU3RhcnQgPj0gbmV3VGV4dEVuZCkgJiYgKGZMVE5lZ1N0YXJ0ID09IGZMVFNpemUpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiYnJlYWsgMSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VyTGluZVN0YXJ0ID49IHN0b3BBdCkgeworICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oImN1ckxpbmVTdGFydDogIiArIGN1ckxpbmVTdGFydCArICIgPj0gc3RvcEF0OiAiICsgc3RvcEF0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZMVE5lZ1N0YXJ0PT1mTFRTaXplICYmIGZQaXhIZWlnaHQgPj0gcmVxSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiYnJlYWsgMyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmTFRQb3NFbmQgKyAxID09IGZMVE5lZ1N0YXJ0KQorICAgICAgICAgICAgICAgIGV4cGFuZExpbmVUYWJsZSgpOworCisgICAgICAgICAgICBmTGluZVRhYmxlWysrZkxUUG9zRW5kXSA9IG51bGw7IC8vIHdpbGwgYmUgY3JlYXRlZCBieSBSZW5kZXJlcgorICAgICAgICB9CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludCgiXG4iKTsKKworICAgICAgICBpZiAobmV3Q3VyVGV4dExlbiA9PSAwKSB7CisgICAgICAgICAgICBmTGluZVRhYmxlWzBdID0gcHNldWRvTGluZUluZm8oZkxpbmVUYWJsZVswXSwgMCk7CisgICAgICAgICAgICBmUGl4SGVpZ2h0ID0gZkxpbmVUYWJsZVswXS5nZXRIZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICBmRnVsbFBpeEhlaWdodCA9IGZQaXhIZWlnaHQ7CisKKyAgICAgICAgaWYgKGlzUGFyYUJyZWFrQmVmb3JlKG5ld0N1clRleHRMZW4pKSB7CisgICAgICAgICAgICBmRnVsbFBpeEhlaWdodCArPSBsYXN0Q2hhckhlaWdodCgpOworICAgICAgICB9CisvKgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImN1ckxpbmVTdGFydDogIiArIGN1ckxpbmVTdGFydCArCisgICAgICAgICAgICAiLCBmTFRQb3NFbmQ6ICIgKyBmTFRQb3NFbmQgKworICAgICAgICAgICAgIiwgZkxUTmVnU3RhcnQ6ICIgKyBmTFROZWdTdGFydCArCisgICAgICAgICAgICAiLCBmTFRTaXplOiAiICsgZkxUU2l6ZSk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvbGRGdWxsUGl4SGVpZ2h0OiAiICsgb2xkRnVsbFBpeEhlaWdodCArICIsIG5ld0Z1bGxQaXhIZWlnaHQ6ICIgKyBmRnVsbFBpeEhlaWdodCk7CisqLworICAgICAgICBpbnQgZGFtYWdlTGVuZ3RoOworICAgICAgICBpZiAoZkZ1bGxQaXhIZWlnaHQgPT0gb2xkRnVsbFBpeEhlaWdodCkgeworICAgICAgICAgICAgZGFtYWdlTGVuZ3RoID0gZkxpbmVUYWJsZVtmTFRQb3NFbmRdLmdldEdyYXBoaWNTdGFydChmUGl4SGVpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZkxpbmVUYWJsZVtmTFRQb3NFbmRdLmdldEhlaWdodCgpIC0gZGFtYWdlU3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2VMZW5ndGggPSBNYXRoLm1heChmRnVsbFBpeEhlaWdodCwgb2xkRnVsbFBpeEhlaWdodCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IFJlY3RhbmdsZShmTWluWCwgZGFtYWdlU3RhcnQsIGZNYXhYLWZNaW5YLCBkYW1hZ2VMZW5ndGgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkdW1wTGluZVRhYmxlKCkKKyAgICB7CisgICAgICAgIGludCBpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZkxUQ3VyVGV4dExlbj0iICsgZkxUQ3VyVGV4dExlbiArICIgIiApOworICAgICAgICBmb3IgKGk9MDsgaTw9IGZMVFBvc0VuZDsgaSsrKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMaW5lICIgKyBpICsgIiBzdGFydHMgYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZMaW5lVGFibGVbaV0uZ2V0Q2hhclN0YXJ0KGZMVEN1clRleHRMZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbmQgZXh0ZW5kcyAiICsgZkxpbmVUYWJsZVtpXS5nZXRDaGFyTGVuZ3RoKCkpOworCisgICAgICAgIGZvciAoaT1mTFROZWdTdGFydDsgaTwgZkxUU2l6ZTsgaSsrKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMaW5lICIgKyAoaS1mTFROZWdTdGFydCtmTFRQb3NFbmQrMSkgKyAiIHN0YXJ0cyBhdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZkxpbmVUYWJsZVtpXS5nZXRDaGFyU3RhcnQoZkxUQ3VyVGV4dExlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFuZCBleHRlbmRzICIgKyBmTGluZVRhYmxlW2ldLmdldENoYXJMZW5ndGgoKSk7CisgICAgfQorCisgICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgbWluWCgpIHsKKyAgICAKKyAgICAgICAgcmV0dXJuIGZNaW5YOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAqIFJldHVybiB0aGUgaG9yaXpvbnRhbCBleHRlbnQgb2YgdGhlIHRleHQsIGluIHBpeGVscy4KKyAgICAqIDxwPgorICAgICogVGhpcyByZXR1cm5zIGFuIGFwcHJveGltYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnRseSBmb3JtYXR0ZWQgdGV4dC4KKyAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IG1heFgoKQorICAgIHsKKyAgICAgICAgY2hlY2tUaW1lU3RhbXAoKTsKKworICAgICAgICByZXR1cm4gZk1heFg7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQuCisgICAgKgorICAgICogVGhpcyBpcyB1c2VkIGZvciB0aGUgJ2V4dHJhIGhlaWdodCcgbmVlZGVkIHRvIGRpc3BsYXkgYSBjYXJldCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0IHdoZW4gdGhlCisgICAgKiB0ZXh0IGlzIGVtcHR5IG9yIGVuZHMgd2l0aCBhIG5ld2xpbmUuCisgICAgKi8KKyAgICBwcml2YXRlIGludCBsYXN0Q2hhckhlaWdodCgpCisgICAgeworICAgICAgICBpbnQgY2hhckluZGV4ID0gbGFzdExpbmVDaGFyU3RvcCgpIC0gMTsKKyAgICAgICAgQXR0cmlidXRlTWFwIHN0ID0gZlRleHQuY2hhcmFjdGVyU3R5bGVBdChjaGFySW5kZXgpOworICAgICAgICBEZWZhdWx0Q2hhcmFjdGVyTWV0cmljLk1ldHJpYyBtZXRyaWMgPSBmRGVmYXVsdENoYXJNZXRyaWMuZ2V0TWV0cmljRm9yU3R5bGUoc3QpOworCisgICAgICAgIGludCBoZWlnaHQgPSBtZXRyaWMuZ2V0QXNjZW50KCk7CisgICAgICAgIGhlaWdodCArPSBtZXRyaWMuZ2V0RGVzY2VudCgpOworICAgICAgICBoZWlnaHQgKz0gbWV0cmljLmdldExlYWRpbmcoKTsKKworICAgICAgICByZXR1cm4gaGVpZ2h0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgYXQgcG9zIGlzIGEgcGFyYWdyYXBoIHNlcGFyYXRvci4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNQYXJhQnJlYWtCZWZvcmUoaW50IHBvcykKKyAgICB7CisgICAgICAgIHJldHVybiBwb3MgPiAwICYmIChmVGV4dC5hdChwb3MgLSAxKSA9PSAnXHUyMDI5JyB8fCBmVGV4dC5hdChwb3MgLSAxKSA9PSAnXG4nKTsKKyAgICAgICAgLy8gd2UgcmVhbGx5IG5lZWQgdG8gdGFrZSBsb29rIGF0IHRoaXMgYW5kIGRldGVybWluZSB3aGF0IHRoaXMgZnVuY3Rpb24KKyAgICAgICAgLy8gc2hvdWxkIGJlIGRvaW5nLiAgV2hhdCBJJ3ZlIGdvdCBoZXJlIHJpZ2h0IG5vdyBpcyBhIHRlbXBvcmFyeSBpbXBsZW1lbnRhdGlvbi4KKyAgICB9CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCBtaW5ZKCkgeworICAgIAorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgKiBSZXR1cm4gdGhlIHZlcnRpY2FsIGV4dGVudCBvZiB0aGUgdGV4dCwgaW4gcGl4ZWxzLgorICAgICogPHA+CisgICAgKiBUaGlzIHJldHVybnMgYW4gYXBwcm94aW1hdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudGx5IGZvcm1hdHRlZCB0ZXh0LgorICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgbWF4WSgpCisgICAgeworICAgICAgICBjaGVja1RpbWVTdGFtcCgpOworCisgICAgICAgIGludCBudW1DaGFycyA9IGxhc3RMaW5lQ2hhclN0b3AoKTsKKworICAgICAgICBpbnQgcGl4SGVpZ2h0ID0gZlBpeEhlaWdodDsKKyAgICAgICAgaWYgKG51bUNoYXJzID09IGZMVEN1clRleHRMZW4gJiYgaXNQYXJhQnJlYWtCZWZvcmUoZkxUQ3VyVGV4dExlbikpIHsKKyAgICAgICAgICAgIHBpeEhlaWdodCArPSBsYXN0Q2hhckhlaWdodCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG51bUNoYXJzICE9IDApCisgICAgICAgICAgICByZXR1cm4gcGl4SGVpZ2h0ICogZlRleHQubGVuZ3RoKCkgLyBudW1DaGFyczsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXR1cm4gdGhlIGFjdHVhbCBwaXhlbCBsZW5ndGggb2YgdGhlIHRleHQgd2hpY2ggaGFzIGJlZW4gZm9ybWF0dGVkLgorICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgZm9ybWF0dGVkSGVpZ2h0KCkKKyAgICB7CisgICAgICAgIGNoZWNrVGltZVN0YW1wKCk7CisgICAgICAgIHJldHVybiBmUGl4SGVpZ2h0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZXJlIGFyZSB0d28gbW9kZXMgZm9yIGRlYWxpbmcgd2l0aCBjYXJyaWFnZSByZXR1cm5zIGF0IHRoZSBlbmQgb2YgYSBsaW5lLiAgSW4gdGhlICdpbmZpbml0ZSB3aWR0aCcKKyAgICAgKiBtb2RlLCB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgY29uc2lkZXJlZCB0byBoYXZlIGluZmluaXRlIHdpZHRoLiAgVGh1cyBpZiB0aGUgcG9pbnQgaXMgcGFzdCB0aGUgJ3JlYWwnCisgICAgICogZW5kIG9mIHRoZSBsaW5lLCB0aGUgb2Zmc2V0IGlzIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhhdCBsYXN0IGNoYXJhY3RlciwgYW5kIHRoZSBvZmZzZXQgaXMgYXNzb2NpYXRlZAorICAgICAqIHdpdGggdGhhdCBjaGFyYWN0ZXIgKHBsYWNlbWVudCBhZnRlcikuIEluIHRoZSAnYWN0dWFsIHdpZHRoJyBtb2RlLCB0aGUgb2Zmc2V0IGlzIHBvc2l0aW9uZWQgYWZ0ZXIKKyAgICAgKiB0aGF0IGNoYXJhY3RlciwgYnV0IHN0aWxsIGFzc29jaWF0ZWQgd2l0aCBpdCAocGxhY2VtZW50IGJlZm9yZSkuCisgICAgICovCisKKyAgICBwcml2YXRlIFRleHRPZmZzZXQgbGluZURpbVRvT2Zmc2V0KFRleHRPZmZzZXQgcmVzdWx0LCBpbnQgbGluZSwgaW50IGxpbmVYLCBpbnQgbGluZVksIFRleHRPZmZzZXQgYW5jaG9yLCBib29sZWFuIGluZmluaXRlTW9kZSkKKyAgICB7CisgICAgLy8gdGVtcG9yYXJpbHkgYWRqdXN0IGxpbmUgaW5mbyB0byByZW1vdmUgdGhlIG5lZ2F0aXZlIGNoYXIgc3RhcnRzIHVzZWQgaW4gdGhlIGxpbmUgdGFibGUuCisgICAgLy8gdGhlbiBjYWxsIHRocm91Z2ggdG8gdGhlIHBhcmFncmFwaCByZW5kZXJlciB0byBnZXQgdGhlIG9mZnNldC4gIERvbid0IHB1dCBsaW5lIGVuZAorICAgIC8vIG9wdGltaXphdGlvbiBoZXJlLCBsZXQgdGhlIHJlbmRlcmVyIGRvIGl0IChwZXJoYXBzIGl0IGRvZXMgZmFuY3kgc3R1ZmYgd2l0aCB0aGUgbWFyZ2lucykuCisKKyAgICAgICAgTGF5b3V0SW5mbyBsaW5lSW5mbyA9IGZMaW5lVGFibGVbbGluZV07CisKKyAgICAgICAgcmVzdWx0ID0gbGluZUluZm8ucGl4ZWxUb09mZnNldChmTFRDdXJUZXh0TGVuLCByZXN1bHQsIGZMaW5lRGltLCBsaW5lWCwgbGluZVkpOworCisgICAgICAgIGlmIChpbmZpbml0ZU1vZGUgJiYKKyAgICAgICAgICAgIChyZXN1bHQuZk9mZnNldCA+IGxpbmVJbmZvLmdldENoYXJTdGFydChmTFRDdXJUZXh0TGVuKSkgJiYKKyAgICAgICAgICAgIGlzUGFyYUJyZWFrQmVmb3JlKHJlc3VsdC5mT2Zmc2V0KSAmJgorICAgICAgICAgICAgKGFuY2hvciA9PSBudWxsIHx8IGFuY2hvci5mT2Zmc2V0ID09IHJlc3VsdC5mT2Zmc2V0IC0gMSkpIHsKKworICAgICAgICAgICAgcmVzdWx0LnNldE9mZnNldChyZXN1bHQuZk9mZnNldCAtIDEsIFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgKiBHaXZlbiBhIHNjcmVlbiBsb2NhdGlvbiBwLCByZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSB0ZXh0IG5lYXJlc3QgdG8gcC4KKyAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgVGV4dE9mZnNldCBwb2ludFRvVGV4dE9mZnNldChUZXh0T2Zmc2V0IHJlc3VsdCwgaW50IHB4LCBpbnQgcHksIFBvaW50IG9yaWdpbiwgVGV4dE9mZnNldCBhbmNob3IsIGJvb2xlYW4gaW5maW5pdGVNb2RlKQorICAgIHsKKyAgICAgICAgY2hlY2tUaW1lU3RhbXAoKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQorICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFRleHRPZmZzZXQoKTsKKworICAgICAgICBpbnQgZmlsbEQ7CisKKyAgICAgICAgaWYgKGZITGluZSkKKyAgICAgICAgICAgIGZpbGxEID0gcHkgLSBvcmlnaW4ueTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlsbEQgPSBweCAtIG9yaWdpbi54OworCisgICAgICAgIGlmICghZkZpbGxJbmMpCisgICAgICAgICAgICBmaWxsRCA9IC1maWxsRDsKKworICAgICAgICBpZiAoZmlsbEQgPCAwKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0T2Zmc2V0KDAsIFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBmb3JtYXRUb0hlaWdodChmaWxsRCk7CisKKyAgICAgICAgaWYgKGZpbGxEID49IGZQaXhIZWlnaHQpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gYmlhcyA9IGZMVEN1clRleHRMZW49PTA/IFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUIDogVGV4dE9mZnNldC5CRUZPUkVfT0ZGU0VUOworICAgICAgICAgICAgcmVzdWx0LnNldE9mZnNldChmTFRDdXJUZXh0TGVuLCBiaWFzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbGluZSA9IGZpbmRMaW5lQXQoZmlsbEQpOyAvLyBhbHdheXMgYSB2YWxpZCBsaW5lCisgICAgICAgIGludCBnU3RhcnQgPSBsaW5lR3JhcGhpY1N0YXJ0SW50ZXJuYWwobGluZSk7CisKKyAgICAgICAgaW50IGxpbmVYLCBsaW5lWTsgIC8vIHVwcGVyLWxlZnQgY29ybmVyIG9mIGxpbmUKKyAgICAgICAgaWYgKGZITGluZSkgeworICAgICAgICAgICAgbGluZVggPSBvcmlnaW4ueDsKKyAgICAgICAgICAgIGxpbmVZID0gZkZpbGxJbmM/IG9yaWdpbi55ICsgZ1N0YXJ0IDogb3JpZ2luLnkgLSAoZ1N0YXJ0ICsgZkxpbmVUYWJsZVtsaW5lXS5nZXRIZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsaW5lWSA9IG9yaWdpbi55OworICAgICAgICAgICAgbGluZVggPSBmRmlsbEluYz8gb3JpZ2luLnggKyBnU3RhcnQgOiBvcmlnaW4ueCAtIChnU3RhcnQgKyBmTGluZVRhYmxlW2xpbmVdLmdldEhlaWdodCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsaW5lRGltVG9PZmZzZXQocmVzdWx0LCBsaW5lLCBweCAtIGxpbmVYLCBweSAtIGxpbmVZLCBhbmNob3IsIGluZmluaXRlTW9kZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGVtcHR5UGFyYWdyYXBoQXRFbmRPZlRleHQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZMVEN1clRleHRMZW4gPiAwICYmCisgICAgICAgICAgICAgICAgaXNQYXJhZ3JhcGhTZXBhcmF0b3IoZlRleHQuYXQoZkxUQ3VyVGV4dExlbi0xKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIG9mZnNldCBkZXNpZ25hdGVzIGEgcG9pbnQgb24gdGhlIHBzZXVkb2xpbmUgZm9sbG93aW5nIGEgcGFyYWdyYXBoCisgICAgICogc2VwYXJhdG9yIGF0IHRoZSBlbmQgb2YgdGV4dC4gIFRoaXMgaXMgdHJ1ZSBpZiB0aGUgb2Zmc2V0IGlzIHRoZSBlbmQgb2YgdGV4dAorICAgICAqIGFuZCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQgaXMgYSBwYXJhZ3JhcGggc2VwYXJhdG9yLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBhZnRlckxhc3RQYXJhZ3JhcGgoVGV4dE9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0LmZPZmZzZXQgPT0gZkxUQ3VyVGV4dExlbiAmJgorICAgICAgICAgICAgZW1wdHlQYXJhZ3JhcGhBdEVuZE9mVGV4dCgpOworICAgIH0KKworICAgIC8qKgorICAgICogR2l2ZW4gYW4gb2Zmc2V0LCByZXR1cm4gdGhlIFJlY3RhbmdsZSBib3VuZGluZyB0aGUgY2FyZXQgYXQgdGhlIG9mZnNldC4KKyAgICAqIEBwYXJhbSBvZmZzZXQgYW4gb2Zmc2V0IGludG8gdGhlIHRleHQKKyAgICAqIEBwYXJhbSBvcmlnaW4gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgdGV4dCwgaW4gdGhlIGRpc3BsYXkncyBjb29yZGluYXRlIHN5c3RlbQorICAgICogQHJldHVybiBhIFJlY3RhbmdsZSBib3VuZGluZyB0aGUgY2FyZXQuCisgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIFJlY3RhbmdsZSBnZXRDYXJldFJlY3QoVGV4dE9mZnNldCBvZmZzZXQsIFBvaW50IG9yaWdpbikgeworCisgICAgICAgIFJlY3RhbmdsZSByID0gbmV3IFJlY3RhbmdsZSgpOworICAgICAgICBnZXRDYXJldFJlY3Qociwgb2Zmc2V0LCBvcmlnaW4pOworICAgICAgICByZXR1cm4gcjsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGdldENhcmV0UmVjdChSZWN0YW5nbGUgciwgVGV4dE9mZnNldCBvZmZzZXQsIFBvaW50IG9yaWdpbikgeworICAgICAgICAKKyAgICAgICAgY2hlY2tUaW1lU3RhbXAoKTsKKyAgICAgICAgZm9ybWF0VG9PZmZzZXQob2Zmc2V0KTsKKworICAgICAgICBpZiAoYWZ0ZXJMYXN0UGFyYWdyYXBoKG9mZnNldCkpIHsKKyAgICAgICAgICAgIGludCBwc2V1ZG9MaW5lSGVpZ2h0ID0gbGFzdENoYXJIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChmSExpbmUpIHsKKyAgICAgICAgICAgICAgICBpbnQgbGluZVkgPSBmRmlsbEluYyA/IG9yaWdpbi55ICsgZlBpeEhlaWdodCA6IG9yaWdpbi55IC0gZlBpeEhlaWdodCAtIHBzZXVkb0xpbmVIZWlnaHQ7CisgICAgICAgICAgICAgICAgci5zZXRCb3VuZHMob3JpZ2luLngsIGxpbmVZLCAwLCBwc2V1ZG9MaW5lSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCBsaW5lWCA9IGZGaWxsSW5jPyBvcmlnaW4ueCArIGZQaXhIZWlnaHQgOiBvcmlnaW4ueCAtIGZQaXhIZWlnaHQgLSBwc2V1ZG9MaW5lSGVpZ2h0OworICAgICAgICAgICAgICAgIHIuc2V0Qm91bmRzKGxpbmVYLCBvcmlnaW4ueSwgcHNldWRvTGluZUhlaWdodCwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgbGluZSA9IGdldFZhbGlkTGluZUNvbnRhaW5pbmcob2Zmc2V0KTsKKworICAgICAgICBpbnQgZ1N0YXJ0ID0gbGluZUdyYXBoaWNTdGFydEludGVybmFsKGxpbmUpOworCisgICAgICAgIGludCBsaW5lWCwgbGluZVk7CisKKyAgICAgICAgaWYgKGZITGluZSkgeworICAgICAgICAgICAgbGluZVggPSBvcmlnaW4ueDsKKyAgICAgICAgICAgIGlmIChmRmlsbEluYykKKyAgICAgICAgICAgICAgICBsaW5lWSA9IG9yaWdpbi55ICsgZ1N0YXJ0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpbmVZID0gb3JpZ2luLnkgLSAoZ1N0YXJ0ICsgZkxpbmVUYWJsZVtsaW5lXS5nZXRIZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsaW5lWSA9IG9yaWdpbi55OworICAgICAgICAgICAgaWYgKGZGaWxsSW5jKQorICAgICAgICAgICAgICAgIGxpbmVYID0gb3JpZ2luLnggKyBnU3RhcnQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGluZVggPSBvcmlnaW4ueCAtIChnU3RhcnQgKyBmTGluZVRhYmxlW2xpbmVdLmdldEhlaWdodCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlY3RhbmdsZSBib3VuZHMgPSBmTGluZVRhYmxlW2xpbmVdLmNhcmV0Qm91bmRzKGZUZXh0LCBmTFRDdXJUZXh0TGVuLCBmTGluZURpbSwgb2Zmc2V0LmZPZmZzZXQsIGxpbmVYLCBsaW5lWSk7CisKKyAgICAgICAgci5zZXRCb3VuZHMoYm91bmRzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIERyYXcgdGhlIGNhcmV0KHMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0IGludG8gdGhlIGdpdmVuIEdyYXBoaWNzLgorICAgICogQHBhcmFtIGcgdGhlIEdyYXBoaWNzIHRvIGRyYXcgaW50bworICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IGluIHRoZSB0ZXh0IGZvciB3aGljaCB0aGUgY2FyZXQgaXMgZHJhd24KKyAgICAqIEBwYXJhbSBvcmlnaW4gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgdGV4dCwgaW4gdGhlIGRpc3BsYXkncyBjb29yZGluYXRlIHN5c3RlbQorICAgICogQHBhcmFtIHN0cm9uZ0NhcmV0Q29sb3IgdGhlIGNvbG9yIG9mIHRoZSBzdHJvbmcgY2FyZXQKKyAgICAqIEBwYXJhbSB3ZWFrQ2FyZXRDb2xvciB0aGUgY29sb3Igb2YgdGhlIHdlYWsgY2FyZXQgKGlmIGFueSkKKyAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkcmF3Q2FyZXQoR3JhcGhpY3MgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnQgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3Igc3Ryb25nQ2FyZXRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIHdlYWtDYXJldENvbG9yKSB7CisKKyAgICAgICAgY2hlY2tUaW1lU3RhbXAoKTsKKyAgICAgICAgR3JhcGhpY3MyRCBnMmQgPSBHcmFwaGljczJEQ29udmVyc2lvbi5nZXRHcmFwaGljczJEKGcpOworICAgICAgICBmb3JtYXRUb09mZnNldChvZmZzZXQpOworCisgICAgICAgIExheW91dEluZm8gbGluZTsKKyAgICAgICAgaW50IGdTdGFydDsKKyAgICAgICAgCisgICAgICAgIGlmIChhZnRlckxhc3RQYXJhZ3JhcGgob2Zmc2V0KSkgeworICAgICAgICAgICAgZ1N0YXJ0ID0gZlBpeEhlaWdodDsKKyAgICAgICAgICAgIGxpbmUgPSBwc2V1ZG9MaW5lSW5mbyhudWxsLCBvZmZzZXQuZk9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgbGluZUluZGV4ID0gZ2V0VmFsaWRMaW5lQ29udGFpbmluZyhvZmZzZXQpOworICAgICAgICAgICAgZ1N0YXJ0ID0gbGluZUdyYXBoaWNTdGFydEludGVybmFsKGxpbmVJbmRleCk7CisgICAgICAgICAgICBsaW5lID0gZkxpbmVUYWJsZVtsaW5lSW5kZXhdOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgbGluZVgsIGxpbmVZOworCisgICAgICAgIGlmIChmSExpbmUpIHsKKyAgICAgICAgICAgIGxpbmVYID0gb3JpZ2luLng7CisgICAgICAgICAgICBpZiAoZkZpbGxJbmMpCisgICAgICAgICAgICAgICAgbGluZVkgPSBvcmlnaW4ueSArIGdTdGFydDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaW5lWSA9IG9yaWdpbi55IC0gKGdTdGFydCArIGxpbmUuZ2V0SGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbGluZVkgPSBvcmlnaW4ueTsKKyAgICAgICAgICAgIGlmIChmRmlsbEluYykKKyAgICAgICAgICAgICAgICBsaW5lWCA9IG9yaWdpbi54ICsgZ1N0YXJ0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpbmVYID0gb3JpZ2luLnggLSAoZ1N0YXJ0ICsgbGluZS5nZXRIZWlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAgICBsaW5lLnJlbmRlckNhcmV0KGZUZXh0LCBmTFRDdXJUZXh0TGVuLCBnMmQsIGZMaW5lRGltLCBsaW5lWCwgbGluZVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldC5mT2Zmc2V0LCBzdHJvbmdDYXJldENvbG9yLCB3ZWFrQ2FyZXRDb2xvcik7CisgICAgfQorCisvKioKKyogR2l2ZW4gdHdvIG9mZnNldHMgaW4gdGhlIHRleHQsIHJldHVybiBhIHJlY3RhbmdsZSB3aGljaCBlbmNsb3NlcyB0aGUgbGluZXMgY29udGFpbmluZyB0aGUgb2Zmc2V0cy4KKyogT2Zmc2V0cyBkbyBub3QgbmVlZCB0byBiZSBvcmRlcmVkIG9yIG5vbm5lZ2F0aXZlLgorKiBAcGFyYW0gb2Zmc2V0MSxvZmZzZXQyIG9mZnNldHMgaW50byB0aGUgdGV4dAorKiBAcGFyYW0gb3JpZ2luIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIHRleHQsIGluIHRoZSBkaXNwbGF5J3MgY29vcmRpbmF0ZSBzeXN0ZW0KKyogQHJldHVybnMgYSA8dHQ+UmVjdGFuZ2xlPC90dD4sIHJlbGF0aXZlIHRvIDx0dD5vcmlnaW48L3R0Piwgd2hpY2ggZW5jbG9zZXMgdGhlIGxpbmVzIGNvbnRhaW5pbmcgdGhlIG9mZnNldHMKKyovCisgICAgcHVibGljIHN5bmNocm9uaXplZCBSZWN0YW5nbGUgZ2V0Qm91bmRpbmdSZWN0KFRleHRPZmZzZXQgb2Zmc2V0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBvZmZzZXQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludCBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdGlnaHQpIHsKKworICAgICAgICBSZWN0YW5nbGUgciA9IG5ldyBSZWN0YW5nbGUoKTsKKyAgICAgICAgZ2V0Qm91bmRpbmdSZWN0KHIsIG9mZnNldDEsIG9mZnNldDIsIG9yaWdpbiwgdGlnaHQpOworICAgICAgICByZXR1cm4gcjsKKyAgICB9CisKKy8qCisgICAgVHJhbnNmb3JtIHIgZnJvbSAidGV4dCIgY29vcmRpbmF0ZXMgdG8gInNjcmVlbiIgY29vcmRpbmF0ZXMuCisqLworCisgICAgcHJpdmF0ZSB2b2lkIGludGxSZWN0KFBvaW50IG9yaWdpbiwgUmVjdGFuZ2xlIHIpIHsKKworICAgICAgICBpbnQgbGluZU9yaWcsIGZpbGxPcmlnOworCisgICAgICAgIGlmIChmSExpbmUpIHsKKyAgICAgICAgICAgIGxpbmVPcmlnID0gb3JpZ2luLng7CisgICAgICAgICAgICBmaWxsT3JpZyA9IG9yaWdpbi55OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbGluZU9yaWcgPSBvcmlnaW4ueTsKKyAgICAgICAgICAgIGZpbGxPcmlnID0gb3JpZ2luLng7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZkxpbmVJbmMpCisgICAgICAgICAgICByLnggKz0gbGluZU9yaWc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHIueCA9IGxpbmVPcmlnIC0gKHIueCArIHIud2lkdGgpOworCisgICAgICAgIGlmIChmRmlsbEluYykKKyAgICAgICAgICAgIHIueSArPSBmaWxsT3JpZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgci55ID0gZmlsbE9yaWcgLSAoci55ICsgci5oZWlnaHQpOworCisKKyAgICAgICAgaWYgKCFmSExpbmUpIHsKKyAgICAgICAgICAgIGludCB0ID0gci54OworICAgICAgICAgICAgci54ID0gci55OworICAgICAgICAgICAgci55ID0gdDsKKyAgICAgICAgICAgIHQgPSByLndpZHRoOworICAgICAgICAgICAgci53aWR0aCA9IHIuaGVpZ2h0OworICAgICAgICAgICAgci5oZWlnaHQgPSB0OworICAgICAgICB9CisgICAgfQorCisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZ2V0Qm91bmRpbmdSZWN0KFJlY3RhbmdsZSByLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgb2Zmc2V0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgb2Zmc2V0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50IG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdGlnaHQpCisgICAgeworICAgICAgICBjaGVja1RpbWVTdGFtcCgpOworICAgICAgICBpZiAob2Zmc2V0MS5lcXVhbHMob2Zmc2V0MikpIHsKKyAgICAgICAgICAgIGdldENhcmV0UmVjdChyLCBvZmZzZXQxLCBvcmlnaW4pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChvZmZzZXQxLmdyZWF0ZXJUaGFuKG9mZnNldDIpKSB7CisgICAgICAgICAgICBUZXh0T2Zmc2V0IHQ7IHQgPSBvZmZzZXQxOyBvZmZzZXQxID0gb2Zmc2V0Mjsgb2Zmc2V0MiA9IHQ7CisgICAgICAgIH0KKworICAgICAgICBmb3JtYXRUb09mZnNldChvZmZzZXQyKTsKKworICAgICAgICBpbnQgbGluZSA9IGdldFZhbGlkTGluZUNvbnRhaW5pbmcob2Zmc2V0MSk7CisgICAgICAgIHIueSA9IGxpbmVHcmFwaGljU3RhcnRJbnRlcm5hbChsaW5lKTsKKyAgICAgICAgCisgICAgICAgIGludCBnTGltaXQ7CisgICAgICAgIGJvb2xlYW4gc2FtZUxpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKGFmdGVyTGFzdFBhcmFncmFwaChvZmZzZXQyKSkKKyAgICAgICAgICAgIGdMaW1pdCA9IGZQaXhIZWlnaHQgKyBsYXN0Q2hhckhlaWdodCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBsaW5lMiA9IGdldFZhbGlkTGluZUNvbnRhaW5pbmcob2Zmc2V0Mik7CisgICAgICAgICAgICBnTGltaXQgPSBsaW5lR3JhcGhpY0xpbWl0SW50ZXJuYWwobGluZTIpOworICAgICAgICAgICAgc2FtZUxpbmUgPSAobGluZSA9PSBsaW5lMik7CisgICAgICAgIH0KKworICAgICAgICByLmhlaWdodCA9IGdMaW1pdCAtIHIueTsKKworICAgICAgICBpZiAoc2FtZUxpbmUgJiYgdGlnaHQ9PVRJR0hUKSB7CisgICAgICAgICAgICBSZWN0YW5nbGUgcnQgPSBuZXcgUmVjdGFuZ2xlKCk7CisgICAgICAgICAgICBnZXRDYXJldFJlY3QocnQsIG9mZnNldDEsIG9yaWdpbik7CisgICAgICAgICAgICByLnNldEJvdW5kcyhydCk7CisgICAgICAgICAgICBpZiAoIW9mZnNldDEuZXF1YWxzKG9mZnNldDIpKSB7CisgICAgICAgICAgICAgICAgZ2V0Q2FyZXRSZWN0KHJ0LCBvZmZzZXQyLCBvcmlnaW4pOworICAgICAgICAgICAgICAgIHIuYWRkKHJ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHIueCA9IGZNaW5YOworICAgICAgICAgICAgci53aWR0aCA9IGZNYXhYIC0gZk1pblg7CisgICAgICAgICAgICBpbnRsUmVjdChvcmlnaW4sIHIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludCgiZ2JyOiAiICsgci54ICsgIiwgIiArIHIueSArICIsICIgKyByLndpZHRoICsgIiwgIiArIHIuaGVpZ2h0KTsKKworICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIiAtLT4gIiArIHIueCArICIsICIgKyByLnkgKyAiLCAiICsgci53aWR0aCArICIsICIgKyByLmhlaWdodCk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBDb21wdXRlIHRoZSBvZmZzZXQgcmVzdWx0aW5nIGZyb20gbW92aW5nIGZyb20gYSBwcmV2aW91cyBvZmZzZXQgaW4gZGlyZWN0aW9uIGRpci4KKyAgICAqIEZvciBhcnJvdyBrZXlzLgorICAgICogQHBhcmFtIHJlc3VsdCB0aGUgb2Zmc2V0IHRvIG1vZGlmeSBhbmQgcmV0dXJuLiAgbWF5IGJlIG51bGwsIGlmIHNvIGEgbmV3IG9mZnNldCBpcyBhbGxvY2F0ZWQsIG1vZGlmaWVkLCBhbmQgcmV0dXJuZWQuCisgICAgKiBAcGFyYW0gcHJldmlvdXNPZmZzZXQgdGhlIGluc2VydGlvbiBvZmZzZXQgcHJpb3IgdG8gdGhlIGFycm93IGtleSBwcmVzcy4KKyAgICAqIEBwYXJhbSBkaXJlY3Rpb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgYXJyb3cga2V5IChlVXAsIGVEb3duLCBlTGVmdCwgb3IgZVJpZ2h0KQorICAgICogQHJldHVybnMgbmV3IG9mZnNldCBiYXNlZCBvbiBkaXJlY3Rpb24gYW5kIHByZXZpb3VzIG9mZnNldC4KKyAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgVGV4dE9mZnNldCBmaW5kSW5zZXJ0aW9uT2Zmc2V0KFRleHRPZmZzZXQgcmVzdWx0LCBUZXh0T2Zmc2V0IHByZXZPZmZzZXQsIHNob3J0IGRpcikKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kTmV3SW5zZXJ0aW9uT2Zmc2V0KHJlc3VsdCwgcHJldk9mZnNldCwgcHJldk9mZnNldCwgZGlyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUcmFuc2Zvcm0ga2V5IGRpcmVjdGlvbjogIGFmdGVyIHRoaXMgc3RlcCwgImxlZnQiIG1lYW5zIHByZXZpb3VzIGdseXBoLCAicmlnaHQiIG1lYW5zIG5leHQgZ2x5cGgsCisgICAgICoidXAiIG1lYW5zIHByZXZpb3VzIGxpbmUsICJkb3duIiBtZWFucyBuZXh0IGxpbmUKKyAgICAgKi8KKyAgICBwcml2YXRlIHNob3J0IHJlbWFwQXJyb3dLZXkoc2hvcnQgZGlyKSB7CisKKyAgICAgICAgaWYgKCFmTGluZUluYykgeworICAgICAgICAgICAgaWYgKGRpciA9PSBlTGVmdCkKKyAgICAgICAgICAgICAgICBkaXIgPSBlUmlnaHQ7CisgICAgICAgICAgICBlbHNlIGlmIChkaXIgPT0gZVJpZ2h0KQorICAgICAgICAgICAgICAgIGRpciA9IGVMZWZ0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmRmlsbEluYykgeworICAgICAgICAgICAgaWYgKGRpciA9PSBlVXApCisgICAgICAgICAgICAgICAgZGlyID0gZURvd247CisgICAgICAgICAgICBlbHNlIGlmIChkaXIgPT0gZURvd24pCisgICAgICAgICAgICAgICAgZGlyID0gZVVwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmSExpbmUpIHsKKyAgICAgICAgICAgIGlmIChkaXIgPT0gZUxlZnQpCisgICAgICAgICAgICAgICAgZGlyID0gZVVwOworICAgICAgICAgICAgZWxzZSBpZiAoZGlyID09IGVSaWdodCkKKyAgICAgICAgICAgICAgICBkaXIgPSBlRG93bjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRpciA9PSBlVXApCisgICAgICAgICAgICAgICAgZGlyID0gZUxlZnQ7CisgICAgICAgICAgICBlbHNlIGlmIChkaXIgPT0gZURvd24pCisgICAgICAgICAgICAgICAgZGlyID0gZVJpZ2h0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRpcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIENvbXB1dGUgdGhlIG9mZnNldCByZXN1bHRpbmcgZnJvbSBtb3ZpbmcgZnJvbSBhIHByZXZpb3VzIG9mZnNldCwgc3RhcnRpbmcgYXQgYW4gb3JpZ2luYWwgb2Zmc2V0LCBpbiBkaXJlY3Rpb24gZGlyLgorICAgICogRm9yIGFycm93IGtleXMuICBVc2UgdGhpcyBmb3IgInNtYXJ0IiB1cC9kb3duIGtleXMuCisgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSBvZmZzZXQgdG8gbW9kaWZ5IGFuZCByZXR1cm4uICBNYXkgYmUgbnVsbCwgaWYgc28gYSBuZXcgb2Zmc2V0IGlzIGFsbG9jYXRlZCwgbW9kaWZpZWQsIGFuZCByZXR1cm5lZC4KKyAgICAqIEBwYXJhbSBvcmlnT2Zmc2V0IHRoZSBvZmZzZXQgYXQgd2hpY2ggYW4gdXAtZG93biBhcnJvdyBrZXkgc2VxdWVuY2UgYmVnYW4uCisgICAgKiBAcGFyYW0gcHJldk9mZnNldCB0aGUgaW5zZXJ0aW9uIG9mZnNldCBwcmlvciB0byB0aGUgYXJyb3cga2V5IHByZXNzCisgICAgKiBAcGFyYW0gZGlyIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFycm93IGtleSAoZVVwLCBlRG93biwgZUxlZnQsIG9yIGVSaWdodCkKKyAgICAqIEByZXR1cm5zIG5ldyBvZmZzZXQgYmFzZWQgb24gZGlyZWN0aW9uLCBvcmlnaW5hbCBvZmZzZXQsIGFuZCBwcmV2aW91cyBvZmZzZXQuCisgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIFRleHRPZmZzZXQgZmluZE5ld0luc2VydGlvbk9mZnNldChUZXh0T2Zmc2V0IHJlc3VsdCwgVGV4dE9mZnNldCBvcmlnT2Zmc2V0LCBUZXh0T2Zmc2V0IHByZXZPZmZzZXQsIHNob3J0IGRpcikKKyAgICB7CisgICAgICAgIGNoZWNrVGltZVN0YW1wKCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUZXh0T2Zmc2V0KCk7CisKKyAgICAgICAgZGlyID0gcmVtYXBBcnJvd0tleShkaXIpOworCisgICAgICAgIC8vIGFzc3VtZSB0aGF0IHRleHQgYXQgb3JpZ09mZnNldCBhbmQgcHJldk9mZnNldCBoYXMgYWxyZWFkeSBiZWVuIGZvcm1hdHRlZAorCisgICAgICAgIGlmIChkaXIgPT0gZUxlZnQgfHwgZGlyID09IGVSaWdodCkgeworICAgICAgICAgICAgZm9ybWF0VG9PZmZzZXQocHJldk9mZnNldCk7CisgICAgICAgICAgICBpbnQgbGluZSA9IGdldFZhbGlkTGluZUNvbnRhaW5pbmcocHJldk9mZnNldCk7CisKKyAgICAgICAgICAgIHJlc3VsdC5mUGxhY2VtZW50ID0gVGV4dE9mZnNldC5BRlRFUl9PRkZTRVQ7CisgICAgICAgICAgICByZXN1bHQuZk9mZnNldCA9IGZMaW5lVGFibGVbbGluZV0uZ2V0TmV4dE9mZnNldChmTFRDdXJUZXh0TGVuLCBwcmV2T2Zmc2V0LmZPZmZzZXQsIGRpcik7CisgICAgICAgICAgICBpZiAocmVzdWx0LmZPZmZzZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmZPZmZzZXQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmZPZmZzZXQgPj0gZkxUQ3VyVGV4dExlbikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRPZmZzZXQoZkxUQ3VyVGV4dExlbiwgVGV4dE9mZnNldC5CRUZPUkVfT0ZGU0VUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBkaXN0T25MaW5lOworCisgICAgICAgICAgICBpZiAoYWZ0ZXJMYXN0UGFyYWdyYXBoKG9yaWdPZmZzZXQpKQorICAgICAgICAgICAgICAgIGRpc3RPbkxpbmUgPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGxpbmUgPSBnZXRWYWxpZExpbmVDb250YWluaW5nKG9yaWdPZmZzZXQpOworCisgICAgICAgICAgICAgICAgZGlzdE9uTGluZSA9IGZMaW5lVGFibGVbbGluZV0uc3Ryb25nQ2FyZXRCYXNlbGluZVBvc2l0aW9uKGZMVEN1clRleHRMZW4sIGZMaW5lRGltLCBvcmlnT2Zmc2V0LmZPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnZXQgcHJldk9mZnNldCdzIGxpbmUKKyAgICAgICAgICAgIGludCBsaW5lOworICAgICAgICAgICAgaWYgKGFmdGVyTGFzdFBhcmFncmFwaChwcmV2T2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBsaW5lID0gbGFzdExpbmUoKSArIDE7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsaW5lID0gZ2V0TGluZUNvbnRhaW5pbmcocHJldk9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBpZiAoZGlyID09IGVEb3duICYmIChsaW5lID09IGtBZnRlckxhc3RMaW5lIHx8IGxpbmUgPT0gbGFzdExpbmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChsYXN0TGluZUNoYXJTdG9wKCkgPCBmVGV4dC5sZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2hpZnRUYWJsZVRvKGxhc3RMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICBmb3JtYXRUZXh0KGxhc3RMaW5lQ2hhclN0b3AoKSwgMSwgSW50ZWdlci5NQVhfVkFMVUUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBsaW5lID0gZ2V0TGluZUNvbnRhaW5pbmcocHJldk9mZnNldCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxpbmUgPT0ga0JlZm9yZUZpcnN0TGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobGluZSA9PSBrQWZ0ZXJMYXN0TGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxhc3RMaW5lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkaXIgPT0gZVVwKQorICAgICAgICAgICAgICAgIGxpbmUtLTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRpciA9PSBlRG93bikKKyAgICAgICAgICAgICAgICBsaW5lKys7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRGVidWc6IElsbGVnYWwgZGlyZWN0aW9uIHBhcmFtZXRlciBpbiBmaW5kTmV3SW5zZXJ0aW9uT2Zmc2V0Iik7CisKKyAgICAgICAgICAgIGlmIChsaW5lIDwgMCkgeworICAgICAgICAgICAgICAgIC8vcmVzdWx0LnNldE9mZnNldCgwLCBUZXh0T2Zmc2V0LkFGVEVSX09GRlNFVCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFzc2lnbihwcmV2T2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxpbmUgPiBsYXN0TGluZSgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnNldE9mZnNldChmTFRDdXJUZXh0TGVuLCBUZXh0T2Zmc2V0LkJFRk9SRV9PRkZTRVQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGZMaW5lVGFibGVbbGluZV0gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IChkaXIgPT0gZVVwKT8gZkxUUG9zRW5kIDogZkxUTmVnU3RhcnQ7CisKKyAgICAgICAgICAgICAgICAvLyBhbmNob3IgaXMgbnVsbCBzaW5jZSB3ZSBuZXZlciB3YW50IGEgcG9zaXRpb24gYWZ0ZXIgbmV3bGluZS4gIElmIHdlIHVzZWQgdGhlIHJlYWwgYW5jaG9yLAorICAgICAgICAgICAgICAgIC8vIHdlIG1pZ2h0IG5vdCBpZ25vcmUgdGhlIG5ld2xpbmUgZXZlbiB0aG91Z2ggaW5maW5pdGVNb2RlIGlzIHRydWUuCisgICAgICAgICAgICAgICAgbGluZURpbVRvT2Zmc2V0KHJlc3VsdCwgbGluZSwgZGlzdE9uTGluZSwgMCwgbnVsbCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oImZuaW8gcHJldjogIiArIHByZXZPZmZzZXQgKyAiLCBuZXc6ICIgKyByZXN1bHQpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0b3BCYWNrZ3JvdW5kRm9ybWF0dGluZygpCisgICAgeworICAgICAgICBjaGVja1RpbWVTdGFtcCgpOworICAgICAgICBmQmdGb3JtYXRBbGxvd2VkID0gZmFsc2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBlbmFibGVCR0Zvcm1hdCgpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZkJnRm9ybWF0QWxsb3dlZCA9IHRydWU7CisgICAgICAgICAgICBub3RpZnkoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCBsaW5lSW5kZXhUb051bWJlcihpbnQgbGluZUluZGV4KSB7CisKKyAgICAgICAgaWYgKGxpbmVJbmRleCA8PSBmTFRQb3NFbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBsaW5lSW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbGluZUluZGV4IC0gKGZMVE5lZ1N0YXJ0LWZMVFBvc0VuZC0xKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgaW50IGxpbmVOdW1iZXJUb0luZGV4KGludCBsaW5lTnVtYmVyKSB7CisKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgPD0gZkxUUG9zRW5kKSB7CisgICAgICAgICAgICByZXR1cm4gbGluZU51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBsaW5lTnVtYmVyICsgKGZMVE5lZ1N0YXJ0LWZMVFBvc0VuZC0xKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmb3JtYXRUb0xpbmVOdW1iZXIoaW50IGxpbmVOdW1iZXIpIHsKKworICAgICAgICB3aGlsZSAobGFzdExpbmVDaGFyU3RvcCgpIDwgZkxUQ3VyVGV4dExlbiAmJgorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPj0gbGluZUluZGV4VG9OdW1iZXIoZkxUU2l6ZSkpIHsKKyAgICAgICAgICAgIC8vIGNvdWxkIGJlIHNtYXJ0ZXIgYW5kIGNob29zZSBsYXJnZXIgYW1vdW50cyBmb3IKKyAgICAgICAgICAgIC8vIGxhcmdlciBsaW5lcywgYnV0IHByb2JhYmx5IG5vdCB3b3J0aCB0aGUgZWZmb3J0CisgICAgICAgICAgICBmb3JtYXRUb0hlaWdodChmUGl4SGVpZ2h0ICsga1BpeEluY3JlbWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFNUUklDVCA9IHRydWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBMRU5JRU5UID0gZmFsc2U7CisKKyAgICAvKioKKyAgICAgKiBJbnN1cmUgdGhhdCBhdCBsZWFzdCBsaW5lTnVtYmVyIGxpbmVzIGV4aXN0LCBkb2luZworICAgICAqIGV4dHJhIGZvcm1hdHRpbmcgaWYgbmVjZXNzYXJ5LgorICAgICAqIFRocm93cyBleGNlcHRpb24gaWYgbGluZU51bWJlciBpcyBub3QgdmFsaWQuCisgICAgICogQHBhcmFtIHN0cmljdCBpZiBTVFJJQ1QsIG9ubHkgbGluZXMgWzAuLi5tYXhMaW5lTnVtYmVyKCldCisgICAgICogICAgICAgIGFyZSBwZXJtaXR0ZWQuICBJZiBMRU5JRU5ULCBtYXhMaW5lTnVtYmVyKCkrMSBpcworICAgICAqICAgICAgICB0aGUgZ3JlYXRlc3QgdmFsaWQgdmFsdWUuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlTGluZU51bWJlcihpbnQgbGluZU51bWJlciwgYm9vbGVhbiBzdHJpY3QpIHsKKworICAgICAgICBmb3JtYXRUb0xpbmVOdW1iZXIobGluZU51bWJlcik7CisKKyAgICAgICAgaW50IG1heE51bWJlciA9IGxpbmVJbmRleFRvTnVtYmVyKGZMVFNpemUpOworICAgICAgICBpZiAoc3RyaWN0ID09IFNUUklDVCkgeworICAgICAgICAgICAgbWF4TnVtYmVyIC09IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGluZU51bWJlciA+IG1heE51bWJlcisxIHx8CisgICAgICAgICAgICAgICAgKGxpbmVOdW1iZXIgPT0gbWF4TnVtYmVyKzEgJiYgIWVtcHR5UGFyYWdyYXBoQXRFbmRPZlRleHQoKSkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgbGluZSBudW1iZXI6ICIgKyBsaW5lTnVtYmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGdldExpbmVDb3VudCgpIHsKKworICAgICAgICAvLyBmb3JtYXQgYWxsIHRleHQ6CisgICAgICAgIGZvcm1hdFRvSGVpZ2h0KEludGVnZXIuTUFYX1ZBTFVFKTsKKworICAgICAgICBpbnQgbGluZUNvdW50ID0gbGluZUluZGV4VG9OdW1iZXIoZkxUU2l6ZSk7CisKKyAgICAgICAgaWYgKGVtcHR5UGFyYWdyYXBoQXRFbmRPZlRleHQoKSkgeworICAgICAgICAgICAgbGluZUNvdW50ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGluZUNvdW50OworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCBsaW5lQ29udGFpbmluZyhpbnQgY2hhckluZGV4KSB7CisgICAgICAgIAorICAgICAgICBmb3JtYXRUb09mZnNldChjaGFySW5kZXgsIFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUKTsKKyAgICAgICAgCisgICAgICAgIGJvb2xlYW4gcGxhY2VtZW50ID0gVGV4dE9mZnNldC5BRlRFUl9PRkZTRVQ7CisgICAgICAgIGlmIChjaGFySW5kZXggPT0gZkxUQ3VyVGV4dExlbiAmJiBjaGFySW5kZXggPiAwKSB7CisgICAgICAgICAgICBwbGFjZW1lbnQgPSBlbXB0eVBhcmFncmFwaEF0RW5kT2ZUZXh0KCk/IFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldC5CRUZPUkVfT0ZGU0VUOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbGluZUNvbnRhaW5pbmcoY2hhckluZGV4LCBwbGFjZW1lbnQpOworICAgIH0KKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGxpbmVDb250YWluaW5nKFRleHRPZmZzZXQgb2Zmc2V0KSB7CisKKyAgICAgICAgZm9ybWF0VG9PZmZzZXQob2Zmc2V0KTsKKworICAgICAgICBpZiAoYWZ0ZXJMYXN0UGFyYWdyYXBoKG9mZnNldCkpIHsKKyAgICAgICAgICAgIHJldHVybiBsaW5lSW5kZXhUb051bWJlcihmTFRTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxpbmVDb250YWluaW5nKG9mZnNldC5mT2Zmc2V0LCBvZmZzZXQuZlBsYWNlbWVudCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgaW50IGxpbmVDb250YWluaW5nKGludCBvZmYsIGJvb2xlYW4gcGxhY2VtZW50KSB7CisgICAgICAgIAorICAgICAgICBpbnQgbGluZSA9IG9mZj09MD8gMCA6IGdldExpbmVDb250YWluaW5nKG9mZiwgcGxhY2VtZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChsaW5lID09IGtBZnRlckxhc3RMaW5lKSB7CisgICAgICAgICAgICBsaW5lID0gZkxUU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaW5lID09IGtCZWZvcmVGaXJzdExpbmUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigibGluZUNvbnRhaW5pbmcgZ290IGludmFsaWQgcmVzdWx0IGZyb20gZ2V0TGluZUNvbnRhaW5pbmcoKS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsaW5lSW5kZXhUb051bWJlcihsaW5lKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCBsaW5lUmFuZ2VMb3coaW50IGxpbmVOdW1iZXIpIHsKKworICAgICAgICB2YWxpZGF0ZUxpbmVOdW1iZXIobGluZU51bWJlciwgU1RSSUNUKTsKKyAgICAgICAgaW50IGluZGV4ID0gbGluZU51bWJlclRvSW5kZXgobGluZU51bWJlcik7CisKKyAgICAgICAgaWYgKGluZGV4ID09IGZMVFNpemUpIHsKKyAgICAgICAgICAgIGlmIChlbXB0eVBhcmFncmFwaEF0RW5kT2ZUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbGFzdExpbmVDaGFyU3RvcCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGZMVFNpemUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImxpbmVOdW1iZXIgaXMgaW52YWxpZC4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBsaW5lQ2hhclN0YXJ0SW50ZXJuYWwoaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgbGluZVJhbmdlTGltaXQoaW50IGxpbmVOdW1iZXIpIHsKKworICAgICAgICB2YWxpZGF0ZUxpbmVOdW1iZXIobGluZU51bWJlciwgU1RSSUNUKTsKKyAgICAgICAgaW50IGluZGV4ID0gbGluZU51bWJlclRvSW5kZXgobGluZU51bWJlcik7CisKKyAgICAgICAgaWYgKGluZGV4ID09IGZMVFNpemUpIHsKKyAgICAgICAgICAgIGlmIChlbXB0eVBhcmFncmFwaEF0RW5kT2ZUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbGFzdExpbmVDaGFyU3RvcCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGZMVFNpemUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImxpbmVOdW1iZXIgaXMgaW52YWxpZC4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBsaW5lQ2hhckxpbWl0SW50ZXJuYWwoaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGxpbmUgYXQgdGhlIGdpdmVuIGdyYXBoaWMgaGVpZ2h0LgorICAgICAqIElmIGhlaWdodCBpcyBncmVhdGVyIHRoYW4gZnVsbCBoZWlnaHQsIHJldHVybiBsaW5lIGNvdW50LgorICAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGxpbmVBdEhlaWdodChpbnQgaGVpZ2h0KSB7CisKKyAgICAgICAgaWYgKGhlaWdodCA+PSBmUGl4SGVpZ2h0KSB7CisKKyAgICAgICAgICAgIGludCBsaW5lID0gZ2V0TGluZUNvdW50KCk7CisgICAgICAgICAgICBpZiAoaGVpZ2h0IDwgZkZ1bGxQaXhIZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBsaW5lIC09IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGluZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChoZWlnaHQgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbGluZUluZGV4VG9OdW1iZXIoZmluZExpbmVBdChoZWlnaHQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGxpbmVHcmFwaGljU3RhcnQoaW50IGxpbmVOdW1iZXIpIHsKKworICAgICAgICBjaGVja1RpbWVTdGFtcCgpOworICAgICAgICB2YWxpZGF0ZUxpbmVOdW1iZXIobGluZU51bWJlciwgTEVOSUVOVCk7CisKKyAgICAgICAgaW50IGluZGV4ID0gbGluZU51bWJlclRvSW5kZXgobGluZU51bWJlcik7CisKKyAgICAgICAgaWYgKGluZGV4IDwgZkxUU2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIGxpbmVHcmFwaGljU3RhcnRJbnRlcm5hbChpbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gZkxUU2l6ZSsxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZGdWxsUGl4SGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZQaXhIZWlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIGJvb2xlYW4gbGluZUlzTGVmdFRvUmlnaHQoaW50IGxpbmVOdW1iZXIpIHsKKyAgICAgICAgCisgICAgICAgIHZhbGlkYXRlTGluZU51bWJlcihsaW5lTnVtYmVyLCBTVFJJQ1QpOworICAgICAgICAKKyAgICAgICAgaW50IGluZGV4ID0gbGluZU51bWJlclRvSW5kZXgobGluZU51bWJlcik7CisgICAgICAgIAorICAgICAgICBpZiAoaW5kZXggPCBmTFRTaXplKSB7CisgICAgICAgICAgICByZXR1cm4gZkxpbmVUYWJsZVtpbmRleF0uaXNMZWZ0VG9SaWdodCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQXR0cmlidXRlTWFwIHN0ID0gZlRleHQucGFyYWdyYXBoU3R5bGVBdChmTFRDdXJUZXh0TGVuKTsKKyAgICAgICAgICAgIHJldHVybiAhVGV4dEF0dHJpYnV0ZS5SVU5fRElSRUNUSU9OX1JUTC5lcXVhbHMoc3QuZ2V0KFRleHRBdHRyaWJ1dGUuUlVOX0RJUkVDVElPTikpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBOdW1iZXIgb2YgcGl4ZWxzIGJ5IHdoaWNoIHRvIGFkdmFuY2UgZm9ybWF0dGluZyBpbiB0aGUgYmFja2dyb3VuZC4KKyAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBrUGl4SW5jcmVtZW50ID0gMTAwOworCisgICAgLyoqCisgICAgKiBUaW1lIHRvIHNsZWVwIGJldHdlZW4gYmFja2dyb3VuZCBmb3JtYXR0aW5nIG9wZXJhdGlvbnMuCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQga0ludGVydmFsID0gMTAwOworCisgICAgLyoqCisgICAgKiBQZXJmb3JtIHBlcmlvZGljIGJhY2tncm91bmQgZm9ybWF0dGluZy4KKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHJ1bigpCisgICAgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICAgICAgd2hpbGUoIWZCZ0Zvcm1hdEFsbG93ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjaGVja1RpbWVTdGFtcCgpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3JtYXRUb0hlaWdodChmUGl4SGVpZ2h0ICsga1BpeEluY3JlbWVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAobGFzdExpbmVDaGFyU3RvcCgpID09IGZMVEN1clRleHRMZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RvcEJhY2tncm91bmRGb3JtYXR0aW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcChrSW50ZXJ2YWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBQYXJhZ3JhcGhSZW5kZXJlciBnZXRSZW5kZXJlckZvcihBdHRyaWJ1dGVNYXAgcykgeworICAgIAorICAgICAgICAvLyBOb3RlOiAgZXZlbnR1YWxseSB3ZSBjb3VsZCBsZXQgY2xpZW50cyBwdXQgdGhlaXIgb3duIHJlbmRlcmVycworICAgICAgICAvLyBvbiB0aGUgdGV4dC4KKyAgICAgICAgQmlkaVBhcmFncmFwaFJlbmRlcmVyIHJlbmRlcmVyID0gKEJpZGlQYXJhZ3JhcGhSZW5kZXJlcikgZlJlbmRlcmVyQ2FjaGUuZ2V0KHMpOworICAgICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgcmVuZGVyZXIgPSBuZXcgQmlkaVBhcmFncmFwaFJlbmRlcmVyKGZEZWZhdWx0VmFsdWVzLmFkZEF0dHJpYnV0ZXMocyksIGZEZWZhdWx0Q2hhck1ldHJpYyk7CisgICAgICAgICAgICBmUmVuZGVyZXJDYWNoZS5wdXQocywgcmVuZGVyZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5kZXJlcjsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvQmlkaVBhcmFncmFwaFJlbmRlcmVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L0JpZGlQYXJhZ3JhcGhSZW5kZXJlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2YjI0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L0JpZGlQYXJhZ3JhcGhSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsMTE1MCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQmlkaVBhcmFncmFwaFJlbmRlcmVyLmphdmEsdiAkICRSZXZpc2lvbjogMS4zICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8vIFJlcXVpcmVzIEphdmEyCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdDsKKworaW1wb3J0IGphdmEuYXd0LkNvbG9yOworaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKK2ltcG9ydCBqYXZhLmF3dC5TaGFwZTsKKworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NVGFiUnVsZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlRhYlN0b3A7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuVGV4dEF0dHJpYnV0ZTsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5HcmFwaGljczJEQ29udmVyc2lvbjsKKworLy8vKkpESzEySU1QT1JUUworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7CisKK2ltcG9ydCBqYXZhLmF3dC5mb250LkZvbnRSZW5kZXJDb250ZXh0OworaW1wb3J0IGphdmEuYXd0LmZvbnQuVGV4dExheW91dDsKK2ltcG9ydCBqYXZhLmF3dC5mb250LkxpbmVCcmVha01lYXN1cmVyOworaW1wb3J0IGphdmEuYXd0LmZvbnQuVGV4dEhpdEluZm87CisKK2ltcG9ydCBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybTsKK2ltcG9ydCBqYXZhLmF3dC5nZW9tLkdlbmVyYWxQYXRoOworaW1wb3J0IGphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQ7CisvL0pESzEySU1QT1JUUyovCisvKkpESzExSU1QT1JUUworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5HcmFwaGljczJEOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LkZvbnRSZW5kZXJDb250ZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5UZXh0TGF5b3V0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5MaW5lQnJlYWtNZWFzdXJlcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuVGV4dEhpdEluZm87CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuQWZmaW5lVHJhbnNmb3JtOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5HZW5lcmFsUGF0aDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuUmVjdGFuZ2xlMkQ7CitKREsxMUlNUE9SVFMqLworCitmaW5hbCBjbGFzcyBCaWRpUGFyYWdyYXBoUmVuZGVyZXIgZXh0ZW5kcyBQYXJhZ3JhcGhSZW5kZXJlciB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgZmluYWwgY2xhc3MgQmlkaVNlZ21lbnQgeworICAgICAgICBUZXh0TGF5b3V0IGZMYXlvdXQ7CisgICAgICAgIFJlY3RhbmdsZTJELkZsb2F0IGZCb3VuZHM7CisgICAgICAgIGludCBmRGlzdGFuY2VGcm9tTGVhZGluZ01hcmdpbjsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIEJpZGlMYXlvdXRJbmZvIGV4dGVuZHMgTGF5b3V0SW5mbworICAgIHsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpbnQgZkNoYXJMZW5ndGg7ICAgICAgLy8gbnVtYmVyIG9mIGNoYXJhY3RlcnMgb24gbGluZSAod2FzIGZMZW5ndGgpCisgICAgICAgIGludCBmQXNjZW50OworICAgICAgICBpbnQgZkRlc2NlbnQ7CisgICAgICAgIGludCBmTGVhZGluZzsKKyAgICAgICAgaW50IGZWaXNpYmxlQWR2YW5jZTsgIC8vIGRpc3RhbmNlIGFsb25nIGxpbmUgZGlyZWN0aW9uIGllIHdpZHRoCisgICAgICAgIGludCBmVG90YWxBZHZhbmNlOyAgICAvLyBkaXN0YW5jZSBhbG9uZyBsaW5lIGRpcmVjdGlvbiBpbmNsdWRpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZQorCisgICAgICAgIGludCBmTGVhZGluZ01hcmdpbjsgICAvLyBzY3JlZW4gZGlzdGFuY2UgZnJvbSBsZWFkaW5nIG1hcmdpbgorCisgICAgICAgIGJvb2xlYW4gZkxlZnRUb1JpZ2h0OyAvLyB0cnVlIGlmZiB0aGUgb3JpZW50YXRpb24gaXMgbGVmdC10by1yaWdodAorCisgICAgICAgIGZpbmFsIFZlY3RvciBmU2VnbWVudHMgPSBuZXcgVmVjdG9yKCk7IC8vIHNlZ21lbnRzIHRvIHJlbmRlciwgaW4gbG9naWNhbCBvcmRlcgorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Q2hhckxlbmd0aCgpIHsKKyAgICAgICAgICAgIHJldHVybiBmQ2hhckxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0QXNjZW50KCkgeworICAgICAgICAgICAgcmV0dXJuIGZBc2NlbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldERlc2NlbnQoKSB7CisgICAgICAgICAgICByZXR1cm4gZkRlc2NlbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldExlYWRpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gZkxlYWRpbmc7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldFZpc2libGVBZHZhbmNlKCkgeworICAgICAgICAgICAgcmV0dXJuIGZWaXNpYmxlQWR2YW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0VG90YWxBZHZhbmNlKCkgeworICAgICAgICAgICAgcmV0dXJuIGZUb3RhbEFkdmFuY2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldExlYWRpbmdNYXJnaW4oKSB7CisgICAgICAgICAgICByZXR1cm4gZkxlYWRpbmdNYXJnaW47CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0xlZnRUb1JpZ2h0KCkgeworICAgICAgICAgICAgcmV0dXJuIGZMZWZ0VG9SaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SGVpZ2h0KCkgeworICAgICAgICAgICAgcmV0dXJuIGZBc2NlbnQgKyBmRGVzY2VudCArIGZMZWFkaW5nOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAiTGF5b3V0SW5mbyhjaGFyU3RhcnQ6ICIgKyBnZXRDaGFyU3RhcnQoMCkgKworICAgICAgICAgICAgICAgICIsIGZDaGFyTGVuZ3RoOiAiICsgZkNoYXJMZW5ndGggKworICAgICAgICAgICAgICAgICIsIGZBc2NlbnQ6ICIgKyBmQXNjZW50ICsKKyAgICAgICAgICAgICAgICAiLCBmRGVzY2VudDogIiArIGZEZXNjZW50ICsKKyAgICAgICAgICAgICAgICAiLCBmVmlzaWJsZUFkdmFuY2U6ICIgKyBmVmlzaWJsZUFkdmFuY2UgKworICAgICAgICAgICAgICAgICIsIGZUb3RhbEFkdmFuY2U6ICIgKyBmVG90YWxBZHZhbmNlICsKKyAgICAgICAgICAgICAgICAiLCBmTGVhZGluZ01hcmdpbjogIiArIGZMZWFkaW5nTWFyZ2luICsKKyAgICAgICAgICAgICAgICAiKSI7CisgICAgICAgIH0KKworICAgICAgICBCaWRpUGFyYWdyYXBoUmVuZGVyZXIgZlJlbmRlcmVyOworCisgICAgICAgIC8vIGp1c3QgZGVsZWdhdGUgdG8gcmVuZGVyZXIgZm9yIG5vdworCisgICAgICAgIHB1YmxpYyB2b2lkIHJlbmRlcldpdGhIaWdobGlnaHQoaW50IGxlbmd0aEJhc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzMkQgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGhpZ2hsaWdodENvbG9yKSB7CisKKyAgICAgICAgICAgIGZSZW5kZXJlci5yZW5kZXJXaXRoSGlnaGxpZ2h0KHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsU3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodENvbG9yKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlbmRlcihpbnQgbGVuZ3RoQmFzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljczJEIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSkgeworICAgICAgICAgICAgZlJlbmRlcmVyLnJlbmRlcih0aGlzLCBsZW5ndGhCYXNpcywgZywgbGluZUJvdW5kLCB4LCB5KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlbmRlckNhcmV0KE1Db25zdFRleHQgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aEJhc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljczJEIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIHN0cm9uZ0NhcmV0Q29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIHdlYWtDYXJldENvbG9yKSB7CisgICAgICAgICAgICBmUmVuZGVyZXIucmVuZGVyQ2FyZXQodGhpcywgdGV4dCwgbGVuZ3RoQmFzaXMsIGcsIGxpbmVCb3VuZCwgeCwgeSwgY2hhck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJvbmdDYXJldENvbG9yLCB3ZWFrQ2FyZXRDb2xvcik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgVGV4dE9mZnNldCBwaXhlbFRvT2Zmc2V0KGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5KSB7CisgICAgICAgICAgICByZXR1cm4gZlJlbmRlcmVyLnBpeGVsVG9PZmZzZXQodGhpcywgbGVuZ3RoQmFzaXMsIHJlc3VsdCwgbGluZUJvdW5kLCB4LCB5KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBSZWN0YW5nbGUgY2FyZXRCb3VuZHMoTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5KSB7CisgICAgICAgICAgICByZXR1cm4gZlJlbmRlcmVyLmNhcmV0Qm91bmRzKHRoaXMsIHRleHQsIGxlbmd0aEJhc2lzLCBsaW5lQm91bmQsIGNoYXJPZmZzZXQsIHgsIHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdWJsaWMgaW50IHN0cm9uZ0NhcmV0QmFzZWxpbmVQb3NpdGlvbihpbnQgbGVuZ3RoQmFzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFyT2Zmc2V0KSB7CisKKyAgICAgICAgICAgIHJldHVybiBmUmVuZGVyZXIuc3Ryb25nQ2FyZXRCYXNlbGluZVBvc2l0aW9uKHRoaXMsIGxlbmd0aEJhc2lzLCBsaW5lQm91bmQsIGNoYXJPZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXROZXh0T2Zmc2V0KGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgZGlyKSB7CisKKyAgICAgICAgICAgIHJldHVybiBmUmVuZGVyZXIuZ2V0TmV4dE9mZnNldCh0aGlzLCBsZW5ndGhCYXNpcywgY2hhck9mZnNldCwgZGlyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTFVTSF9MRUFESU5HID0gVGV4dEF0dHJpYnV0ZS5GTFVTSF9MRUFESU5HLmludFZhbHVlKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMVVNIX0NFTlRFUiA9IFRleHRBdHRyaWJ1dGUuRkxVU0hfQ0VOVEVSLmludFZhbHVlKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMVVNIX1RSQUlMSU5HID0gVGV4dEF0dHJpYnV0ZS5GTFVTSF9UUkFJTElORy5pbnRWYWx1ZSgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGVUxMWV9KVVNUSUZJRUQgPSBUZXh0QXR0cmlidXRlLkZVTExZX0pVU1RJRklFRC5pbnRWYWx1ZSgpOworCisgICAgcHJpdmF0ZSBBdHRyaWJ1dGVNYXAgY2FjaGVTdHlsZSA9IG51bGw7CisKKyAgICBwcml2YXRlIGZsb2F0IGZMZWFkaW5nTWFyZ2luOworICAgIHByaXZhdGUgZmxvYXQgZlRyYWlsaW5nTWFyZ2luOworICAgIHByaXZhdGUgZmxvYXQgZkZpcnN0TGluZUluZGVudDsKKyAgICBwcml2YXRlIGZsb2F0IGZNaW5MaW5lU3BhY2luZzsKKyAgICBwcml2YXRlIGZsb2F0IGZFeHRyYUxpbmVTcGFjaW5nOworICAgIAorICAgIHByaXZhdGUgaW50IGZGbHVzaCA9IC0xOworICAgIHByaXZhdGUgTVRhYlJ1bGVyIGZUYWJSdWxlcjsKKyAgICAKKyAgICBwcml2YXRlIGJvb2xlYW4gZkx0ckRlZmF1bHQ7CisgICAgcHJpdmF0ZSBEZWZhdWx0Q2hhcmFjdGVyTWV0cmljIGZEZWZhdWx0Q2hhck1ldHJpYzsKKyAgICAKKyAgICBCaWRpUGFyYWdyYXBoUmVuZGVyZXIoQXR0cmlidXRlTWFwIHBTdHlsZSwgRGVmYXVsdENoYXJhY3Rlck1ldHJpYyBkZWZhdWx0Q2hhck1ldHJpYykgeworCisgICAgICAgIGZEZWZhdWx0Q2hhck1ldHJpYyA9IGRlZmF1bHRDaGFyTWV0cmljOworICAgICAgICBpbml0UmVuZGVyZXIocFN0eWxlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZsb2F0IGdldEZsb2F0VmFsdWUoT2JqZWN0IGtleSwgQXR0cmlidXRlTWFwIHN0eWxlKSB7CisgICAgICAgIHJldHVybiAoKEZsb2F0KXN0eWxlLmdldChrZXkpKS5mbG9hdFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgaW50IGdldEludFZhbHVlKE9iamVjdCBrZXksIEF0dHJpYnV0ZU1hcCBzdHlsZSkgeworICAgICAgICByZXR1cm4gKChJbnRlZ2VyKXN0eWxlLmdldChrZXkpKS5pbnRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBOT1RFOiAgaXQgaXMgaWxsZWdhbCB0byBpbml0aWFsaXplIGEgU3RhbmRhcmRQYXJhZ3JhcGhSZW5kZXJlciBmb3IgYW55IHN0eWxlCisgICAgICogb3RoZXIgdGhhbiB0aGUgb25lIGl0IHdhcyBjcmVhdGVkIHdpdGguCisgICAgICovCisgICAgcHVibGljIHZvaWQgaW5pdFJlbmRlcmVyKEF0dHJpYnV0ZU1hcCBwU3R5bGUpIHsKKworICAgICAgICBpZiAoY2FjaGVTdHlsZSA9PSBudWxsKSB7CisKKyAgICAgICAgICAgIGZMZWFkaW5nTWFyZ2luID0gZ2V0RmxvYXRWYWx1ZShUZXh0QXR0cmlidXRlLkxFQURJTkdfTUFSR0lOLCBwU3R5bGUpOworICAgICAgICAgICAgZlRyYWlsaW5nTWFyZ2luID0gZ2V0RmxvYXRWYWx1ZShUZXh0QXR0cmlidXRlLlRSQUlMSU5HX01BUkdJTiwgcFN0eWxlKTsKKyAgICAgICAgICAgIGZGaXJzdExpbmVJbmRlbnQgPSBnZXRGbG9hdFZhbHVlKFRleHRBdHRyaWJ1dGUuRklSU1RfTElORV9JTkRFTlQsIHBTdHlsZSk7CisgICAgICAgICAgICBmTWluTGluZVNwYWNpbmcgPSBnZXRGbG9hdFZhbHVlKFRleHRBdHRyaWJ1dGUuTUlOX0xJTkVfU1BBQ0lORywgcFN0eWxlKTsKKyAgICAgICAgICAgIGZFeHRyYUxpbmVTcGFjaW5nID0gZ2V0RmxvYXRWYWx1ZShUZXh0QXR0cmlidXRlLkVYVFJBX0xJTkVfU1BBQ0lORywgcFN0eWxlKTsKKworICAgICAgICAgICAgZkZsdXNoID0gZ2V0SW50VmFsdWUoVGV4dEF0dHJpYnV0ZS5MSU5FX0ZMVVNILCBwU3R5bGUpOworCisgICAgICAgICAgICBmVGFiUnVsZXIgPSAoTVRhYlJ1bGVyKSBwU3R5bGUuZ2V0KFRleHRBdHRyaWJ1dGUuVEFCX1JVTEVSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT2JqZWN0IHJ1bkRpciA9IHBTdHlsZS5nZXQoVGV4dEF0dHJpYnV0ZS5SVU5fRElSRUNUSU9OKTsKKyAgICAgICAgICAgIGZMdHJEZWZhdWx0ID0gIVRleHRBdHRyaWJ1dGUuUlVOX0RJUkVDVElPTl9SVEwuZXF1YWxzKHJ1bkRpcik7CisKKyAgICAgICAgICAgIGNhY2hlU3R5bGUgPSBwU3R5bGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocFN0eWxlICE9IGNhY2hlU3R5bGUpIHsKKyAgICAgICAgICAgIGlmICghcFN0eWxlLmVxdWFscyhjYWNoZVN0eWxlKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0ZW1wdCB0byBzaGFyZSBCaWRpUGFyYWdyYXBoUmVuZGVyZXIgYmV0d2VlbiBzdHlsZXMhIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjYWNoZVN0eWxlID0gcFN0eWxlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1RhYihjaGFyIGNoKSB7CisgICAgICAgIHJldHVybiBjaCA9PSAnXHQnOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbGwgaW4gaW5mbyB3aXRoIHRoZSBuZXh0IGxpbmUuCisgICAgICogQHBhcmFtIG1lYXN1cmVyIHRoZSBMaW5lQnJlYWtNZWFzdXJlciBmb3IgdGhpcyBwYXJhZ3JhcGguCisgICAgICogIEN1cnJlbnQgcG9zaXRpb24gc2hvdWxkIGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUuCisgICAgICogIElmIG51bGwsIGEgMC1sZW5ndGggbGluZSBpcyBnZW5lcmF0ZWQuICBJZiBtZWFzdXJlciBpcyBudWxsCisgICAgICogIHRoZW4gcGFyYWdyYXBoU3RhcnQgYW5kIHBhcmFncmFwaExpbWl0IHNob3VsZCBiZSBlcXVhbC4KKyAgICAgKi8KKyAgICAvLyBVc3VhbGx5IHRvdGFsRm9ybWF0V2lkdGggYW5kIGxpbmVCb3VuZCB3aWxsIGJlIHRoZSBzYW1lLgorICAgIC8vIHRvdGFsRm9ybWF0V2lkdGggaXMgdXNlZCBmb3Igd3JhcHBpbmcsIGJ1dCBsaW5lQm91bmQgaXMKKyAgICAvLyBmb3IgZmx1c2hpbmcuICBUaGVzZSBtYXkgYmUgZGlmZmVyZW50IGZvciB1bndyYXBwZWQgdGV4dCwKKyAgICAvLyBmb3IgZXhhbXBsZS4KKyAgICBwdWJsaWMgTGF5b3V0SW5mbyBsYXlvdXQoTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRJbmZvIGxheW91dFRvUmV1c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVCcmVha01lYXN1cmVyIG1lYXN1cmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250UmVuZGVyQ29udGV4dCBmcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXJhZ3JhcGhTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhcmFncmFwaExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxGb3JtYXRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVCb3VuZCkgeworCisgICAgICAgIGlmICgobWVhc3VyZXI9PW51bGwpICE9IChwYXJhZ3JhcGhTdGFydD09cGFyYWdyYXBoTGltaXQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAibWVhc3VyZXIsIHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhMaW1pdCBhcmUgd3JvbmcuIik7CisgICAgICAgIH0KKyAgICAgICAgQmlkaUxheW91dEluZm8gbGluZSA9IG51bGw7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxpbmUgPSAoQmlkaUxheW91dEluZm8pIGxheW91dFRvUmV1c2U7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5lID09IG51bGwpIHsKKyAgICAgICAgICAgIGxpbmUgPSBuZXcgQmlkaUxheW91dEluZm8oKTsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmUuZlJlbmRlcmVyID0gdGhpczsKKworICAgICAgICBmaW5hbCBpbnQgbGluZUNoYXJTdGFydCA9IG1lYXN1cmVyPT1udWxsPyBwYXJhZ3JhcGhTdGFydCA6IG1lYXN1cmVyLmdldFBvc2l0aW9uKCk7CisgICAgICAgIGxpbmUuc2V0Q2hhclN0YXJ0KGxpbmVDaGFyU3RhcnQpOworCisgICAgICAgIGZpbmFsIGludCBsaW5lSW5kZW50ID0gKGxpbmVDaGFyU3RhcnQ9PXBhcmFncmFwaFN0YXJ0KT8gKGludCkgZkZpcnN0TGluZUluZGVudCA6IDA7CisKKyAgICAgICAgaW50IGZvcm1hdFdpZHRoID0gdG90YWxGb3JtYXRXaWR0aCAtIChpbnQpIChmTGVhZGluZ01hcmdpbiArIGZUcmFpbGluZ01hcmdpbik7CisgICAgICAgIGNvbXB1dGVMaW5lTWV0cmljcyh0ZXh0LCBsaW5lLCBtZWFzdXJlciwgZnJjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhMaW1pdCwgZm9ybWF0V2lkdGgsIGxpbmVJbmRlbnQpOworCisgICAgICAgIC8vIHBvc2l0aW9uIHRoZSBsaW5lIGFjY29yZGluZyB0byB0aGUgbGluZSBmbHVzaAorICAgICAgICBpZiAoZkZsdXNoID09IEZMVVNIX1RSQUlMSU5HIHx8IGZGbHVzaCA9PSBGTFVTSF9DRU5URVIpIHsKKyAgICAgICAgICAgIGludCBsaW5lQXJlYSA9IGxpbmVCb3VuZCAtIChpbnQpIChmTGVhZGluZ01hcmdpbiArIGZUcmFpbGluZ01hcmdpbik7CisgICAgICAgICAgICBpbnQgYWR2YW5jZURpZmZlcmVuY2UgPSBsaW5lQXJlYSAtIGxpbmUuZlZpc2libGVBZHZhbmNlOworCisgICAgICAgICAgICBpZiAoZkZsdXNoID09IEZMVVNIX1RSQUlMSU5HKSB7CisgICAgICAgICAgICAgICAgbGluZS5mTGVhZGluZ01hcmdpbiA9ICgoaW50KSAoZkxlYWRpbmdNYXJnaW4pKSArIGFkdmFuY2VEaWZmZXJlbmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZkZsdXNoID09IEZMVVNIX0NFTlRFUikgeworICAgICAgICAgICAgICAgIGxpbmUuZkxlYWRpbmdNYXJnaW4gPSAoaW50KSAoZkxlYWRpbmdNYXJnaW4gKyBhZHZhbmNlRGlmZmVyZW5jZS8yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUuZkxlYWRpbmdNYXJnaW4gPSAoaW50KSBmTGVhZGluZ01hcmdpbjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsaW5lOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbGwgaW4gdGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gbGluZToKKyAgICAgKiBmQ2hhckxlbmd0aCwgZkFzY2VudCwgZkRlc2NlbnQsIGZMZWFkaW5nLCBmVmlzaWJsZUFkdmFuY2UsCisgICAgICogZlRvdGFsQWR2YW5jZS4KKyAgICAgKiBVc2VzOiBsaW5lLmZMZWFkaW5nTWFyZ2luCisgICAgICogQHBhcmFtIGZvcm1hdFdpZHRoIHRoZSB3aWR0aCB0byBmaXQgdGhlIGxpbmUgaW50by4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZUxpbmVNZXRyaWNzKE1Db25zdFRleHQgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlMYXlvdXRJbmZvIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lQnJlYWtNZWFzdXJlciBtZWFzdXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRSZW5kZXJDb250ZXh0IGZyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwYXJhZ3JhcGhTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwYXJhZ3JhcGhMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBmb3JtYXRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBsaW5lSW5kZW50KSB7CisKKyAgICAgICAgaW50IHNlZ21lbnRDb3VudCA9IDA7CisgICAgICAgIC8qIHZhcmlhYmxlIG5vdCB1c2VkIGJvb2xlYW4gZmlyc3RMaW5lID0gbWVhc3VyZXI9PW51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlci5nZXRQb3NpdGlvbigpID09IHBhcmFncmFwaFN0YXJ0OyAqLworCisgICAgICAgIGlmIChtZWFzdXJlciAhPSBudWxsKSB7CisgICAgICAgICAgICBjb21wdXRlU2VnbWVudHModGV4dCwgbGluZSwgbWVhc3VyZXIsIHBhcmFncmFwaExpbWl0LCBmb3JtYXRXaWR0aCwgbGluZUluZGVudCk7CisKKyAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBzZWdtZW50cyBhbmQgYWNjdW11bGF0ZSBhc2NlbnQsIGRlc2NlbnQsCisgICAgICAgICAgICAvLyBsZWFkaW5nLCBjaGFyIGxlbmd0aAorICAgICAgICAgICAgZmxvYXQgYXNjZW50ID0gMDsKKyAgICAgICAgICAgIGZsb2F0IGRlc2NlbnQgPSAwOworICAgICAgICAgICAgZmxvYXQgZGVzY2VudFBsdXNMZWFkaW5nID0gMDsKKworICAgICAgICAgICAgc2VnbWVudENvdW50ID0gbGluZS5mU2VnbWVudHMuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgc2VnbWVudENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBUZXh0TGF5b3V0IGxheW91dCA9ICgoQmlkaVNlZ21lbnQpbGluZS5mU2VnbWVudHMuZWxlbWVudEF0KGkpKS5mTGF5b3V0OworICAgICAgICAgICAgICAgIGFzY2VudCA9IE1hdGgubWF4KGFzY2VudCwgbGF5b3V0LmdldEFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzZWdEZXNjZW50ID0gbGF5b3V0LmdldERlc2NlbnQoKTsKKyAgICAgICAgICAgICAgICBkZXNjZW50ID0gTWF0aC5tYXgoZGVzY2VudCwgc2VnRGVzY2VudCk7CisgICAgICAgICAgICAgICAgZGVzY2VudFBsdXNMZWFkaW5nID0gTWF0aC5tYXgoZGVzY2VudFBsdXNMZWFkaW5nLCBzZWdEZXNjZW50K2xheW91dC5nZXRMZWFkaW5nKCkpOworICAgICAgICAgICAgICAgIGxpbmUuZkNoYXJMZW5ndGggKz0gbGF5b3V0LmdldENoYXJhY3RlckNvdW50KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmUuZkFzY2VudCA9IChpbnQpIE1hdGguY2VpbChhc2NlbnQpOworICAgICAgICAgICAgbGluZS5mRGVzY2VudCA9IChpbnQpIE1hdGguY2VpbChkZXNjZW50KTsKKyAgICAgICAgICAgIGxpbmUuZkxlYWRpbmcgPSAoaW50KSBNYXRoLmNlaWwoZGVzY2VudFBsdXNMZWFkaW5nKSAtIGxpbmUuZkRlc2NlbnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsaW5lLmZMZWZ0VG9SaWdodCA9IGZMdHJEZWZhdWx0OworICAgICAgICAgICAgbGluZS5mU2VnbWVudHMucmVtb3ZlQWxsRWxlbWVudHMoKTsKKworICAgICAgICAgICAgbGluZS5mQ2hhckxlbmd0aCA9IDA7CisKKyAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBzdHlsZSA9IHRleHQuY2hhcmFjdGVyU3R5bGVBdChwYXJhZ3JhcGhTdGFydCk7CisgICAgICAgICAgICBEZWZhdWx0Q2hhcmFjdGVyTWV0cmljLk1ldHJpYyBjbSA9IGZEZWZhdWx0Q2hhck1ldHJpYy5nZXRNZXRyaWNGb3JTdHlsZShzdHlsZSk7CisgICAgICAgICAgICBsaW5lLmZBc2NlbnQgPSBjbS5nZXRBc2NlbnQoKTsKKyAgICAgICAgICAgIGxpbmUuZkRlc2NlbnQgPSBjbS5nZXREZXNjZW50KCk7CisgICAgICAgICAgICBsaW5lLmZMZWFkaW5nID0gY20uZ2V0TGVhZGluZygpOworCisgICAgICAgICAgICBsaW5lLmZWaXNpYmxlQWR2YW5jZSA9IGxpbmUuZlRvdGFsQWR2YW5jZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZkV4dHJhTGluZVNwYWNpbmcgIT0gMCkgeworICAgICAgICAgICAgbGluZS5mQXNjZW50ICs9IChpbnQpIE1hdGguY2VpbChmRXh0cmFMaW5lU3BhY2luZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZk1pbkxpbmVTcGFjaW5nICE9IDApeworICAgICAgICAgICAgaW50IGhlaWdodCA9IGxpbmUuZ2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoaGVpZ2h0IDwgZk1pbkxpbmVTcGFjaW5nKSB7CisgICAgICAgICAgICAgICAgbGluZS5mQXNjZW50ICs9IE1hdGguY2VpbChmTWluTGluZVNwYWNpbmcgLSBoZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IGxpbmVOYXR1cmFsQWR2YW5jZSA9IGxpbmUuZlRvdGFsQWR2YW5jZTsKKworICAgICAgICBsaW5lLmZUb3RhbEFkdmFuY2UgKz0gbGluZUluZGVudDsKKyAgICAgICAgbGluZS5mVmlzaWJsZUFkdmFuY2UgKz0gbGluZUluZGVudDsKKworICAgICAgICBpZiAobWVhc3VyZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gTm93IGZpbGwgaW4gZkJvdW5kcyBmaWVsZCBvZiBCaWRpU2VnbWVudHMuICBmQm91bmRzIHNob3VsZCB0aWxlCisgICAgICAgICAgICAvLyB0aGUgbGluZS4KKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGxpbmVIZWlnaHQgPSBsaW5lLmdldEhlaWdodCgpOworCisgICAgICAgICAgICBmb3IgKGludCBpPTE7IGkgPCBzZWdtZW50Q291bnQ7IGkrKykgeworCisgICAgICAgICAgICAgICAgQmlkaVNlZ21lbnQgY3VycmVudFNlZ21lbnQgPSAoQmlkaVNlZ21lbnQpIGxpbmUuZlNlZ21lbnRzLmVsZW1lbnRBdChpLTEpOworICAgICAgICAgICAgICAgIEJpZGlTZWdtZW50IG5leHRTZWdtZW50ID0gKEJpZGlTZWdtZW50KSBsaW5lLmZTZWdtZW50cy5lbGVtZW50QXQoaSk7CisKKyAgICAgICAgICAgICAgICBmbG9hdCBvcmlnaW47CisgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGg7CisKKyAgICAgICAgICAgICAgICBpZiAobGluZS5mTGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBuZXh0U2VnbWVudC5mRGlzdGFuY2VGcm9tTGVhZGluZ01hcmdpbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gY3VycmVudFNlZ21lbnQuZkRpc3RhbmNlRnJvbUxlYWRpbmdNYXJnaW47CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbiAtPSBuZXh0U2VnbWVudC5mRGlzdGFuY2VGcm9tTGVhZGluZ01hcmdpbjsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luICs9IChmbG9hdCkgTWF0aC5jZWlsKG5leHRTZWdtZW50LmZMYXlvdXQuZ2V0QWR2YW5jZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAoZmxvYXQpIE1hdGguY2VpbChjdXJyZW50U2VnbWVudC5mTGF5b3V0LmdldEFkdmFuY2UoKSkgLSBvcmlnaW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cnJlbnRTZWdtZW50LmZCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlMkQuRmxvYXQob3JpZ2luLCAtbGluZS5mQXNjZW50LCB3aWR0aCwgbGluZUhlaWdodCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNldCBsYXN0IHNlZ21lbnQncyBib3VuZHMKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCaWRpU2VnbWVudCBjdXJyZW50U2VnbWVudCA9IChCaWRpU2VnbWVudCkgbGluZS5mU2VnbWVudHMuZWxlbWVudEF0KHNlZ21lbnRDb3VudC0xKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBvcmlnaW47CisgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGg7CisKKyAgICAgICAgICAgICAgICBpZiAobGluZS5mTGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBsaW5lTmF0dXJhbEFkdmFuY2UgLSBjdXJyZW50U2VnbWVudC5mRGlzdGFuY2VGcm9tTGVhZGluZ01hcmdpbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9IGN1cnJlbnRTZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luIC0gbGluZU5hdHVyYWxBZHZhbmNlOworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IChmbG9hdCkgTWF0aC5jZWlsKGN1cnJlbnRTZWdtZW50LmZMYXlvdXQuZ2V0QWR2YW5jZSgpKSAtIG9yaWdpbjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjdXJyZW50U2VnbWVudC5mQm91bmRzID0gbmV3IFJlY3RhbmdsZTJELkZsb2F0KG9yaWdpbiwgLWxpbmUuZkFzY2VudCwgd2lkdGgsIGxpbmVIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRmlsbCBpbiBmU2VnbWVudHMsIGZMZWZ0VG9SaWdodC4gIG1lYXN1cmVyIG11c3Qgbm90IGJlIG51bGwKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZVNlZ21lbnRzKE1Db25zdFRleHQgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlMYXlvdXRJbmZvIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lQnJlYWtNZWFzdXJlciBtZWFzdXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwYXJhZ3JhcGhMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBmb3JtYXRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBsaW5lSW5kZW50KSB7CisKKyAgICAgICAgLy8gTm90ZSBvbiBqdXN0aWZpY2F0aW9uOiAgb25seSB0aGUgbGFzdCBzZWdtZW50IG9mIGEgbGluZSBpcworICAgICAgICAvLyBqdXN0aWZpZWQuICAKKyAgICAgICAgLy8gQWxzbywgaWYgYSBsaW5lIGVuZHMgaW4gYSB0YWIgaXQgd2lsbCBub3QgYmUganVzdGlmaWVkLgorICAgICAgICAvLyBUaGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciB3b3JkIHByb2Nlc3NvcnMKKyAgICAgICAgLy8gSSB0cmllZCAoTVMgV29yZCBhbmQgTG90dXMgV29yZCBQcm8pLgorICAgICAgICAKKyAgICAgICAgbGluZS5mU2VnbWVudHMucmVtb3ZlQWxsRWxlbWVudHMoKTsKKyAgICAgICAgbGluZS5mQ2hhckxlbmd0aCA9IDA7CisKKyAgICAgICAgVGFiU3RvcCBjdXJyZW50VGFiU3RvcCA9IG5ldyBUYWJTdG9wKChpbnQpZkxlYWRpbmdNYXJnaW4rbGluZUluZGVudCwgVGFiU3RvcC5rTGVhZGluZyk7CisKKyAgICAgICAgaW50IHNlZ21lbnRMaW1pdCA9IG1lYXN1cmVyLmdldFBvc2l0aW9uKCk7CisgICAgICAgIGJvb2xlYW4gZmlyc3RTZWdtZW50ID0gdHJ1ZTsKKworICAgICAgICBpbnQgYWR2YW5jZUZyb21MZWFkaW5nTWFyZ2luID0gbGluZUluZGVudDsKKworICAgICAgICBib29sZWFuIGNvbXB1dGVTZWdzID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGNvbXB1dGVUYWJiZWRTZWdtZW50czogZG8geworCisgICAgICAgICAgICAvLyBjb21wdXRlIHNlbWVudExpbWl0OgorICAgICAgICAgICAgaWYgKHNlZ21lbnRMaW1pdCA8PSBtZWFzdXJlci5nZXRQb3NpdGlvbigpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHNlZ21lbnRMaW1pdCA8IHBhcmFncmFwaExpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1RhYih0ZXh0LmF0KHNlZ21lbnRMaW1pdCsrKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOT1RFOiAgYWRqdXN0IGF2YWlsYWJsZSB3aWR0aCBmb3IgY2VudGVyIHRhYiEhIQorICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZvcm1hdCB3aWR0aDogIiArIChmb3JtYXRXaWR0aC1hZHZhbmNlRnJvbUxlYWRpbmdNYXJnaW4pICsKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICI7ICBzZWdtZW50TGltaXQ6ICIgKyBzZWdtZW50TGltaXQpOworCisgICAgICAgICAgICBpbnQgd3JhcHBpbmdXaWR0aCA9IE1hdGgubWF4KGZvcm1hdFdpZHRoLWFkdmFuY2VGcm9tTGVhZGluZ01hcmdpbiwgMCk7CisgICAgICAgICAgICBUZXh0TGF5b3V0IGxheW91dCA9IG51bGw7CisgICAgICAgICAgICBpZiAoZmlyc3RTZWdtZW50IHx8IHdyYXBwaW5nV2lkdGggPiAwIHx8IHNlZ21lbnRMaW1pdCA+IG1lYXN1cmVyLmdldFBvc2l0aW9uKCkrMSkgeworICAgICAgICAgICAgICAgIGxheW91dCA9IG1lYXN1cmVyLm5leHRMYXlvdXQod3JhcHBpbmdXaWR0aCwgc2VnbWVudExpbWl0LCAhZmlyc3RTZWdtZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxheW91dCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0U2VnbWVudCkgeworICAgICAgICAgICAgICAgICAgICAvLyBJIGRvdWJ0IHRoaXMgd291bGQgaGFwcGVuLCBidXQgY2hlY2sgYW55d2F5CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRmlyc3QgbGF5b3V0IGlzIG51bGwhIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrIGNvbXB1dGVUYWJiZWRTZWdtZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmluYWwgaW50IG1lYXN1cmVyUG9zID0gbWVhc3VyZXIuZ2V0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIGlmIChtZWFzdXJlclBvcyA8IHNlZ21lbnRMaW1pdCkgeworICAgICAgICAgICAgICAgIGNvbXB1dGVTZWdzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGZGbHVzaCA9PSBGVUxMWV9KVVNUSUZJRUQpIHsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0ID0gbGF5b3V0LmdldEp1c3RpZmllZExheW91dCh3cmFwcGluZ1dpZHRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlU2VncyA9ICEobWVhc3VyZXJQb3MgPT0gcGFyYWdyYXBoTGltaXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmlyc3RTZWdtZW50KSB7CisgICAgICAgICAgICAgICAgZmlyc3RTZWdtZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gSGF2ZSB0byBnZXQgbHRyIG9mZiBvZiBsYXlvdXQuICBOb3QgYXZhaWxhYmxlIGZyb20gbWVhc3VyZXIsCisgICAgICAgICAgICAgICAgLy8gdW5mb3J0dW5hdGVseS4KKyAgICAgICAgICAgICAgICBsaW5lLmZMZWZ0VG9SaWdodCA9IGxheW91dC5pc0xlZnRUb1JpZ2h0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEJpZGlTZWdtZW50IHNlZ21lbnQgPSBuZXcgQmlkaVNlZ21lbnQoKTsKKyAgICAgICAgICAgIHNlZ21lbnQuZkxheW91dCA9IGxheW91dDsKKyAgICAgICAgICAgIGludCBsYXlvdXRBZHZhbmNlID0gKGludCkgTWF0aC5jZWlsKGxheW91dC5nZXRBZHZhbmNlKCkpOworCisgICAgICAgICAgICAvLyBwb3NpdGlvbiBsYXlvdXQgcmVsYXRpdmUgdG8gbGVhZGluZyBtYXJnaW4sIHVwZGF0ZSBsb2dpY2FsUG9zaXRpb25PbkxpbmUKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IHJlbGF0aXZlVGFiUG9zaXRpb24gPSBjdXJyZW50VGFiU3RvcC5nZXRQb3NpdGlvbigpLShpbnQpZkxlYWRpbmdNYXJnaW47CisgICAgICAgICAgICBpbnQgbG9naWNhbFBvc2l0aW9uT2ZMYXlvdXQ7CisgICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRUYWJTdG9wLmdldFR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgVGFiU3RvcC5rVHJhaWxpbmc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxQb3NpdGlvbk9mTGF5b3V0ID0gTWF0aC5tYXgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRhYlBvc2l0aW9uLWxheW91dEFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlRnJvbUxlYWRpbmdNYXJnaW4pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRhYlN0b3Aua0NlbnRlcjoKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbFBvc2l0aW9uT2ZMYXlvdXQgPSBNYXRoLm1heCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVGFiUG9zaXRpb24tKGxheW91dEFkdmFuY2UvMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlRnJvbUxlYWRpbmdNYXJnaW4pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiAgLy8gaW5jbHVkZXMgZGVjaW1hbCB0YWIgcmlnaHQgbm93CisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxQb3NpdGlvbk9mTGF5b3V0ID0gcmVsYXRpdmVUYWJQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHBvc2l0aW9uIGxheW91dCBpbiBzZWdtZW50CisgICAgICAgICAgICBpZiAobGluZS5mTGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICBzZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luID0gbG9naWNhbFBvc2l0aW9uT2ZMYXlvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luID0gbG9naWNhbFBvc2l0aW9uT2ZMYXlvdXQrbGF5b3V0QWR2YW5jZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdXBkYXRlIGFkdmFuY2VGcm9tTGVhZGluZ01hcmdpbgorICAgICAgICAgICAgYWR2YW5jZUZyb21MZWFkaW5nTWFyZ2luID0gbG9naWNhbFBvc2l0aW9uT2ZMYXlvdXQgKyBsYXlvdXRBZHZhbmNlOworCisgICAgICAgICAgICAvLyBhZGQgc2VnbWVudCB0byBzZWdtZW50IFZlY3RvcgorICAgICAgICAgICAgbGluZS5mU2VnbWVudHMuYWRkRWxlbWVudChzZWdtZW50KTsKKworICAgICAgICAgICAgLy8gZ2V0IG5leHQgdGFiCisgICAgICAgICAgICBjdXJyZW50VGFiU3RvcCA9IGZUYWJSdWxlci5uZXh0VGFiKChpbnQpZkxlYWRpbmdNYXJnaW4rYWR2YW5jZUZyb21MZWFkaW5nTWFyZ2luKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VGFiU3RvcC5nZXRUeXBlKCkgPT0gVGFiU3RvcC5rTGVhZGluZyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYWJTdG9wLmdldFR5cGUoKSA9PSBUYWJTdG9wLmtBdXRvKSAgeworICAgICAgICAgICAgICAgIGFkdmFuY2VGcm9tTGVhZGluZ01hcmdpbiA9IGN1cnJlbnRUYWJTdG9wLmdldFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkFkdmFuY2UgZnJvbSBsZWFkaW5nIG1hcmdpbjoiICsgYWR2YW5jZUZyb21MZWFkaW5nTWFyZ2luKTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiTm9uLWxlYWRpbmcgdGFiLCB0eXBlPSIgKyBjdXJyZW50VGFiU3RvcC5nZXRUeXBlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gd2hpbGUgKGNvbXB1dGVTZWdzKTsKKworICAgICAgICAvLyBOb3cgY29tcHV0ZSBmVG90YWxBZHZhbmNlLCBmVmlzaWJsZUFkdmFuY2UuICBUaGVzZSBtZXRyaWNzIG1heSBiZSBhZmZlY3RlZAorICAgICAgICAvLyBieSBhIHRyYWlsaW5nIHRhYi4KKworICAgICAgICB7CisgICAgICAgICAgICBCaWRpU2VnbWVudCBsYXN0U2VnbWVudCA9IChCaWRpU2VnbWVudCkgbGluZS5mU2VnbWVudHMubGFzdEVsZW1lbnQoKTsKKyAgICAgICAgICAgIFRleHRMYXlvdXQgbGFzdExheW91dCA9IGxhc3RTZWdtZW50LmZMYXlvdXQ7CisKKyAgICAgICAgICAgIGlmIChsaW5lLmZMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgIGxpbmUuZlRvdGFsQWR2YW5jZSA9IChpbnQpIE1hdGguY2VpbChsYXN0TGF5b3V0LmdldEFkdmFuY2UoKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgICAgIGxpbmUuZlZpc2libGVBZHZhbmNlID0gKGludCkgTWF0aC5jZWlsKGxhc3RMYXlvdXQuZ2V0VmlzaWJsZUFkdmFuY2UoKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGluZS5mVG90YWxBZHZhbmNlID0gbGFzdFNlZ21lbnQuZkRpc3RhbmNlRnJvbUxlYWRpbmdNYXJnaW47CisgICAgICAgICAgICAgICAgbGluZS5mVmlzaWJsZUFkdmFuY2UgPSBsYXN0U2VnbWVudC5mRGlzdGFuY2VGcm9tTGVhZGluZ01hcmdpbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgTWF0aC5jZWlsKGxhc3RMYXlvdXQuZ2V0QWR2YW5jZSgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdExheW91dC5nZXRWaXNpYmxlQWR2YW5jZSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzVGFiKHRleHQuYXQobWVhc3VyZXIuZ2V0UG9zaXRpb24oKS0xKSkpIHsKKyAgICAgICAgICAgICAgICBsaW5lLmZUb3RhbEFkdmFuY2UgPSBNYXRoLm1heChsaW5lLmZUb3RhbEFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFiU3RvcC5nZXRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgaGlnaGxpZ2h0IHNoYXBlIGZvciB0aGUgZ2l2ZW4gY2hhcmFjdGVyIG9mZnNldHMuCisgICAgICogVGhlIFNoYXBlIHJldHVybmVkIGlzIHJlbGF0aXZlIHRvIHRoZSBsZWZ0bW9zdCBwb2ludCBvbiB0aGUKKyAgICAgKiBiYXNlbGluZSBvZiBsaW5lLgorICAgICAqLworICAgIHByaXZhdGUgU2hhcGUgZ2V0SGlnaGxpZ2h0U2hhcGUoQmlkaUxheW91dEluZm8gbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGxTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBobExpbWl0KSB7CisKKyAgICAgICAgaWYgKGhsU3RhcnQgPj0gaGxMaW1pdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSGlnaGxpZ2h0IHJhbmdlIGxlbmd0aCBpcyBub3QgcG9zaXRpdmUuIik7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgbGVhZGluZ01hcmdpbiA9IChsaW5lLmZMZWZ0VG9SaWdodCk/CisgICAgICAgICAgICAgICAgbGluZS5mTGVhZGluZ01hcmdpbiA6IGxpbmVCb3VuZCAtIGxpbmUuZkxlYWRpbmdNYXJnaW47CisgICAgICAgIGZpbmFsIGludCBzZWdtZW50Q291bnQgPSBsaW5lLmZTZWdtZW50cy5zaXplKCk7CisKKyAgICAgICAgU2hhcGUgcnZhbCA9IG51bGw7CisgICAgICAgIEdlbmVyYWxQYXRoIGhpZ2hsaWdodFBhdGggPSBudWxsOworCisgICAgICAgIGludCBjdXJyZW50TGF5b3V0U3RhcnQgPSBsaW5lLmdldENoYXJTdGFydChsZW5ndGhCYXNpcyk7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgc2VnbWVudENvdW50OyBpKyspIHsKKworICAgICAgICAgICAgQmlkaVNlZ21lbnQgc2VnbWVudCA9IChCaWRpU2VnbWVudCkgbGluZS5mU2VnbWVudHMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgVGV4dExheW91dCBsYXlvdXQgPSBzZWdtZW50LmZMYXlvdXQ7CisgICAgICAgICAgICBpbnQgY2hhckNvdW50ID0gbGF5b3V0LmdldENoYXJhY3RlckNvdW50KCk7CisgICAgICAgICAgICBpbnQgY3VycmVudExheW91dExpbWl0ID0gY3VycmVudExheW91dFN0YXJ0ICsgY2hhckNvdW50OworICAgICAgICAgICAgYm9vbGVhbiByYW5nZXNJbnRlcnNlY3Q7CisgICAgICAgICAgICBpZiAoaGxTdGFydCA8PSBjdXJyZW50TGF5b3V0U3RhcnQpIHsKKyAgICAgICAgICAgICAgICByYW5nZXNJbnRlcnNlY3QgPSBobExpbWl0ID4gY3VycmVudExheW91dFN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmFuZ2VzSW50ZXJzZWN0ID0gaGxTdGFydCA8IGN1cnJlbnRMYXlvdXRMaW1pdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJhbmdlc0ludGVyc2VjdCkgeworCisgICAgICAgICAgICAgICAgU2hhcGUgY3VycmVudEhsID0gbGF5b3V0LmdldExvZ2ljYWxIaWdobGlnaHRTaGFwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChobFN0YXJ0LWN1cnJlbnRMYXlvdXRTdGFydCwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oaGxMaW1pdC1jdXJyZW50TGF5b3V0U3RhcnQsIGNoYXJDb3VudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5mQm91bmRzKTsKKworICAgICAgICAgICAgICAgIGZsb2F0IHhUcmFuc2xhdGU7CisgICAgICAgICAgICAgICAgaWYgKGxpbmUuZkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIHhUcmFuc2xhdGUgPSBsZWFkaW5nTWFyZ2luICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuZkRpc3RhbmNlRnJvbUxlYWRpbmdNYXJnaW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB4VHJhbnNsYXRlID0gbGVhZGluZ01hcmdpbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh4VHJhbnNsYXRlICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHhmb3JtID0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybS5nZXRUcmFuc2xhdGVJbnN0YW5jZSh4VHJhbnNsYXRlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEhsID0geGZvcm0uY3JlYXRlVHJhbnNmb3JtZWRTaGFwZShjdXJyZW50SGwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChydmFsID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcnZhbCA9IGN1cnJlbnRIbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoaWdobGlnaHRQYXRoID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodFBhdGggPSBuZXcgR2VuZXJhbFBhdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodFBhdGguYXBwZW5kKHJ2YWwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ2YWwgPSBoaWdobGlnaHRQYXRoOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodFBhdGguYXBwZW5kKGN1cnJlbnRIbCwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRMYXlvdXRTdGFydCA9IGN1cnJlbnRMYXlvdXRMaW1pdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBydmFsOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZW5kZXJXaXRoSGlnaGxpZ2h0KEJpZGlMYXlvdXRJbmZvIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aEJhc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzMkQgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGhpZ2hsaWdodENvbG9yKSB7CisKKyAgICAgICAgZmluYWwgaW50IGxpbmVDaGFyU3RhcnQgPSBsaW5lLmdldENoYXJTdGFydChsZW5ndGhCYXNpcyk7CisKKyAgICAgICAgaWYgKHNlbFN0YXJ0ICE9IG51bGwgJiYgc2VsU3RvcCAhPSBudWxsICYmICFzZWxTdGFydC5lcXVhbHMoc2VsU3RvcCkgJiYKKyAgICAgICAgICAgICAgICBsaW5lLmZDaGFyTGVuZ3RoICE9IDAgJiYKKyAgICAgICAgICAgICAgICBzZWxTdGFydC5mT2Zmc2V0IDwgbGluZUNoYXJTdGFydCArIGxpbmUuZkNoYXJMZW5ndGggJiYKKyAgICAgICAgICAgICAgICBzZWxTdG9wLmZPZmZzZXQgPiBsaW5lQ2hhclN0YXJ0KSB7CisKKyAgICAgICAgICAgIFNoYXBlIGhpZ2hsaWdodCA9IGdldEhpZ2hsaWdodFNoYXBlKGxpbmUsIGxlbmd0aEJhc2lzLCBsaW5lQm91bmQsIHNlbFN0YXJ0LmZPZmZzZXQsIHNlbFN0b3AuZk9mZnNldCk7CisgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljczJEIGhsID0gKEdyYXBoaWNzMkQpIGcuY3JlYXRlKCk7CisgICAgICAgICAgICAgICAgaGwuc2V0Q29sb3IoaGlnaGxpZ2h0Q29sb3IpOworICAgICAgICAgICAgICAgIGhsLnRyYW5zbGF0ZSh4LCB5ICsgbGluZS5mQXNjZW50KTsKKyAgICAgICAgICAgICAgICBobC5maWxsKGhpZ2hsaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZW5kZXIobGluZSwgbGVuZ3RoQmFzaXMsIGcsIGxpbmVCb3VuZCwgeCwgeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRHJhdyB0aGUgbGluZSBpbnRvIHRoZSBncmFwaGljcy4gICh4LCB5KSBpcyB0aGUgdXBwZXItbGVmdCBjb3JuZXIKKyAgICAgKiBvZiB0aGUgbGluZS4gIFRoZSBsZWFkaW5nIGVkZ2Ugb2YgYSByaWdodC1hbGlnbmVkIGxpbmUgaXMgYWxpZ25lZAorICAgICAqIHRvICh4ICsgbGluZUJvdW5kKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVuZGVyKEJpZGlMYXlvdXRJbmZvIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoQmFzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljczJEIGcsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSkgeworCisgICAgICAgIGZpbmFsIGludCBsZWFkaW5nTWFyZ2luID0gKGxpbmUuZkxlZnRUb1JpZ2h0KT8KKyAgICAgICAgICAgICAgICB4ICsgbGluZS5mTGVhZGluZ01hcmdpbiA6IHggKyBsaW5lQm91bmQgLSBsaW5lLmZMZWFkaW5nTWFyZ2luOworICAgICAgICBmaW5hbCBpbnQgYmFzZWxpbmUgPSB5ICsgbGluZS5mQXNjZW50OworICAgICAgICBmaW5hbCBpbnQgc2VnbWVudENvdW50ID0gbGluZS5mU2VnbWVudHMuc2l6ZSgpOworCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNlZ21lbnRDb3VudDsgaSsrKSB7CisKKyAgICAgICAgICAgIEJpZGlTZWdtZW50IHNlZ21lbnQgPSAoQmlkaVNlZ21lbnQpIGxpbmUuZlNlZ21lbnRzLmVsZW1lbnRBdChpKTsKKworICAgICAgICAgICAgZmxvYXQgZHJhd1g7CisgICAgICAgICAgICBpZiAobGluZS5mTGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICBkcmF3WCA9IGxlYWRpbmdNYXJnaW4gKyBzZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZHJhd1ggPSBsZWFkaW5nTWFyZ2luIC0gc2VnbWVudC5mRGlzdGFuY2VGcm9tTGVhZGluZ01hcmdpbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VnbWVudC5mTGF5b3V0LmRyYXcoZywgZHJhd1gsIGJhc2VsaW5lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgVGV4dE9mZnNldCBoaXRUZXN0U2VnbWVudChUZXh0T2Zmc2V0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlZ21lbnRDaGFyU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlTZWdtZW50IHNlZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4SW5TZWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeUluU2VnbWVudCkgeworCisgICAgICAgIGZpbmFsIFRleHRMYXlvdXQgbGF5b3V0ID0gc2VnbWVudC5mTGF5b3V0OworICAgICAgICBmaW5hbCBpbnQgY2hhckNvdW50ID0gbGF5b3V0LmdldENoYXJhY3RlckNvdW50KCk7CisgICAgICAgIGZpbmFsIGludCBsYXlvdXRBZHZhbmNlID0gKGludCkgTWF0aC5jZWlsKGxheW91dC5nZXRBZHZhbmNlKCkpOworICAgICAgICBSZWN0YW5nbGUyRCBib3VuZHMgPSBzZWdtZW50LmZCb3VuZHM7CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBsdHIgPSBsYXlvdXQuaXNMZWZ0VG9SaWdodCgpOworCisgICAgICAgIGlmIChsdHIgJiYgKHhJblNlZ21lbnQgPj0gbGF5b3V0QWR2YW5jZSkgfHwgIWx0ciAmJiAoeEluU2VnbWVudCA8PSAwKSkgeworCisgICAgICAgICAgICAvLyBwcmV0ZW5kIHRoZSBleHRyYSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIGlzIGEKKyAgICAgICAgICAgIC8vIHRhYiBhbmQgJ2hpdC10ZXN0JyBpdC4KKyAgICAgICAgICAgIGRvdWJsZSB0YWJDZW50ZXI7CisgICAgICAgICAgICBpZiAobHRyKSB7CisgICAgICAgICAgICAgICAgdGFiQ2VudGVyID0gKGxheW91dEFkdmFuY2UrYm91bmRzLmdldE1heFgoKSkgLyAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGFiQ2VudGVyID0gYm91bmRzLmdldFgoKSAvIDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoeEluU2VnbWVudCA+PSB0YWJDZW50ZXIpID09IGx0cikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5mT2Zmc2V0ID0gY2hhckNvdW50OworICAgICAgICAgICAgICAgIHJlc3VsdC5mUGxhY2VtZW50ID0gVGV4dE9mZnNldC5CRUZPUkVfT0ZGU0VUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmZPZmZzZXQgPSBjaGFyQ291bnQtMTsKKyAgICAgICAgICAgICAgICByZXN1bHQuZlBsYWNlbWVudCA9IFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVGV4dEhpdEluZm8gaW5mbyA9IGxheW91dC5oaXRUZXN0Q2hhcih4SW5TZWdtZW50LCB5SW5TZWdtZW50LCBzZWdtZW50LmZCb3VuZHMpOworICAgICAgICAgICAgcmVzdWx0LmZPZmZzZXQgPSBpbmZvLmdldEluc2VydGlvbkluZGV4KCk7CisgICAgICAgICAgICBpZiAocmVzdWx0LmZPZmZzZXQgPT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5mUGxhY2VtZW50ID0gVGV4dE9mZnNldC5BRlRFUl9PRkZTRVQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuZk9mZnNldCA9PSBjaGFyQ291bnQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuZlBsYWNlbWVudCA9IFRleHRPZmZzZXQuQkVGT1JFX09GRlNFVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdC5mUGxhY2VtZW50ID0gaW5mby5pc0xlYWRpbmdFZGdlKCk/CisgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0LkFGVEVSX09GRlNFVCA6IFRleHRPZmZzZXQuQkVGT1JFX09GRlNFVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5mT2Zmc2V0ICs9IHNlZ21lbnRDaGFyU3RhcnQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBvZmZzZXQgYXQgdGhlIHBvaW50ICh4LCB5KS4gICh4LCB5KSBpcyByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQKKyAgICAgKiBvZiB0aGUgbGluZS4gIFRoZSBsZWFkaW5nIGVkZ2Ugb2YgYSByaWdodC1hbGlnbmVkIGxpbmUgaXMgYWxpZ25lZAorICAgICAqIHRvIGxpbmVCb3VuZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFRleHRPZmZzZXQgcGl4ZWxUb09mZnNldChCaWRpTGF5b3V0SW5mbyBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5KSB7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVGV4dE9mZnNldCgpOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IHlJblNlZ21lbnQgPSB5IC0gbGluZS5mQXNjZW50OworICAgICAgICBmaW5hbCBpbnQgbGVhZGluZ01hcmdpbiA9IChsaW5lLmZMZWZ0VG9SaWdodCk/CisgICAgICAgICAgICAgICAgbGluZS5mTGVhZGluZ01hcmdpbiA6IGxpbmVCb3VuZCAtIGxpbmUuZkxlYWRpbmdNYXJnaW47CisgICAgICAgIGZpbmFsIGludCBsaW5lQ2hhclN0YXJ0ID0gbGluZS5nZXRDaGFyU3RhcnQobGVuZ3RoQmFzaXMpOworCisgICAgICAgIC8vIGZpcnN0IHNlZSBpZiBwb2ludCBpcyBiZWZvcmUgbGVhZGluZyBlZGdlIG9mIGxpbmUKKyAgICAgICAgZmluYWwgaW50IHNlZ21lbnRDb3VudCA9IGxpbmUuZlNlZ21lbnRzLnNpemUoKTsKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHNlZ0xlYWRpbmdNYXJnaW4gPSBsZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgaWYgKHNlZ21lbnRDb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBCaWRpU2VnbWVudCBmaXJzdFNlZyA9IChCaWRpU2VnbWVudCkgbGluZS5mU2VnbWVudHMuZWxlbWVudEF0KDApOworICAgICAgICAgICAgICAgIGlmIChsaW5lLmZMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgICAgICBzZWdMZWFkaW5nTWFyZ2luICs9IGZpcnN0U2VnLmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2VnTGVhZGluZ01hcmdpbiAtPSBmaXJzdFNlZy5mRGlzdGFuY2VGcm9tTGVhZGluZ01hcmdpbjsKKyAgICAgICAgICAgICAgICAgICAgc2VnTGVhZGluZ01hcmdpbiArPSAoZmxvYXQpIGZpcnN0U2VnLmZCb3VuZHMuZ2V0TWF4WCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lLmZMZWZ0VG9SaWdodCA9PSAoeCA8PSBzZWdMZWFkaW5nTWFyZ2luKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5mT2Zmc2V0ID0gbGluZUNoYXJTdGFydDsKKyAgICAgICAgICAgICAgICByZXN1bHQuZlBsYWNlbWVudCA9IFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQgc2VnbWVudENoYXJTdGFydCA9IGxpbmVDaGFyU3RhcnQ7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgc2VnbWVudENvdW50OyBpKyspIHsKKworICAgICAgICAgICAgQmlkaVNlZ21lbnQgc2VnbWVudCA9IChCaWRpU2VnbWVudCkgbGluZS5mU2VnbWVudHMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgaW50IHNlZ21lbnRPcmlnaW4gPSBsaW5lLmZMZWZ0VG9SaWdodD8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkaW5nTWFyZ2luK3NlZ21lbnQuZkRpc3RhbmNlRnJvbUxlYWRpbmdNYXJnaW4gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRpbmdNYXJnaW4tc2VnbWVudC5mRGlzdGFuY2VGcm9tTGVhZGluZ01hcmdpbjsKKyAgICAgICAgICAgIGludCB4SW5TZWdtZW50ID0geCAtIHNlZ21lbnRPcmlnaW47CisgICAgICAgICAgICBpZiAobGluZS5mTGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC5mQm91bmRzLmdldE1heFgoKSA+IHhJblNlZ21lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RTZWdtZW50KHJlc3VsdCwgc2VnbWVudENoYXJTdGFydCwgc2VnbWVudCwgeEluU2VnbWVudCwgeUluU2VnbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuZkJvdW5kcy5nZXRYKCkgPCB4SW5TZWdtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoaXRUZXN0U2VnbWVudChyZXN1bHQsIHNlZ21lbnRDaGFyU3RhcnQsIHNlZ21lbnQsIHhJblNlZ21lbnQsIHlJblNlZ21lbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlZ21lbnRDaGFyU3RhcnQgKz0gc2VnbWVudC5mTGF5b3V0LmdldENoYXJhY3RlckNvdW50KCk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQuZk9mZnNldCA9IGxpbmVDaGFyU3RhcnQgKyBsaW5lLmZDaGFyTGVuZ3RoOworICAgICAgICByZXN1bHQuZlBsYWNlbWVudCA9IFRleHRPZmZzZXQuQkVGT1JFX09GRlNFVDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVuZGVyQ2FyZXQoQmlkaUxheW91dEluZm8gbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoQmFzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzMkQgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVCb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY2hhck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3Igc3Ryb25nQ2FyZXRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3Igd2Vha0NhcmV0Q29sb3IpCisgICAgeworICAgICAgICBmaW5hbCBpbnQgc2VnbWVudENvdW50ID0gbGluZS5mU2VnbWVudHMuc2l6ZSgpOworICAgICAgICBmaW5hbCBpbnQgbGluZVN0YXJ0ID0gbGluZS5nZXRDaGFyU3RhcnQobGVuZ3RoQmFzaXMpOworCisgICAgICAgIGludCBjdXJyZW50U3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIEJpZGlTZWdtZW50IHNlZ21lbnQgPSBudWxsOworICAgICAgICBpbnQgc2VnbWVudEluZGV4OworCisgICAgICAgIGZvciAoc2VnbWVudEluZGV4PTA7IHNlZ21lbnRJbmRleCA8IHNlZ21lbnRDb3VudDsgc2VnbWVudEluZGV4KyspIHsKKyAgICAgICAgICAgIHNlZ21lbnQgPSAoQmlkaVNlZ21lbnQpIGxpbmUuZlNlZ21lbnRzLmVsZW1lbnRBdChzZWdtZW50SW5kZXgpOworICAgICAgICAgICAgaW50IGN1cnJlbnRFbmRwb2ludCA9IGN1cnJlbnRTdGFydCArIHNlZ21lbnQuZkxheW91dC5nZXRDaGFyYWN0ZXJDb3VudCgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRFbmRwb2ludCA+IGNoYXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRTdGFydCA9IGN1cnJlbnRFbmRwb2ludDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAgICBUaGVyZSBhcmUgdHdvIGNob2ljZXMgaGVyZToKKyAgICAgICAgICAgIDEuIGdldCBjYXJldHMgZnJvbSBhIFRleHRMYXlvdXQgYW5kIHJlbmRlciB0aGVtLCBvcgorICAgICAgICAgICAgMi4gbWFrZSB1cCBhIGNhcmV0IG91cnNlbHZlcyBhbmQgcmVuZGVyIGl0LgorICAgICAgICAgICAgV2Ugd2FudCB0byBkbyAyIHdoZW46CisgICAgICAgICAgICAgICAgKiB0aGVyZSBpcyBubyB0ZXh0IG9uIHRoZSBsaW5lLCBvcgorICAgICAgICAgICAgICAgICogdGhlIGxpbmUgZW5kcyB3aXRoIGEgdGFiIGFuZCB3ZSBhcmUgZHJhd2luZyB0aGUgbGFzdCBjYXJldCBvbiB0aGUgbGluZQorICAgICAgICAgICAgT3RoZXJ3aXNlLCB3ZSB3YW50IDEuCisgICAgICAgICovCisKKyAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA9PSBzZWdtZW50Q291bnQgJiYgc2VnbWVudENvdW50ID4gMCkgeworICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGxpbmUgbGVuZ3RoIGlzIG5vdCAwLCBhbmQgY2hhck9mZnNldCBpcyBhdCBlbmQgb2YgbGluZQorICAgICAgICAgICAgaWYgKCFpc1RhYih0ZXh0LmF0KGNoYXJPZmZzZXQtMSkpKSB7CisgICAgICAgICAgICAgICAgc2VnbWVudEluZGV4ID0gc2VnbWVudENvdW50LTE7CisgICAgICAgICAgICAgICAgc2VnbWVudCA9IChCaWRpU2VnbWVudCkgbGluZS5mU2VnbWVudHMuZWxlbWVudEF0KHNlZ21lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXJ0ID0gbGluZVN0YXJ0ICsgbGluZS5nZXRDaGFyTGVuZ3RoKCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5mTGF5b3V0LmdldENoYXJhY3RlckNvdW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBPYmplY3Qgc2F2ZWRQYWludCA9IEdyYXBoaWNzMkRDb252ZXJzaW9uLmdldENvbG9yU3RhdGUoZyk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChzZWdtZW50SW5kZXggPCBzZWdtZW50Q291bnQpIHsKKyAgICAgICAgICAgICAgICBUZXh0TGF5b3V0IGxheW91dCA9IHNlZ21lbnQuZkxheW91dDsKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0SW5MYXlvdXQgPSBjaGFyT2Zmc2V0IC0gY3VycmVudFN0YXJ0OworICAgICAgICAgICAgICAgIFNoYXBlW10gY2FyZXRzID0gbGF5b3V0LmdldENhcmV0U2hhcGVzKG9mZnNldEluTGF5b3V0LCBzZWdtZW50LmZCb3VuZHMpOworICAgICAgICAgICAgICAgIGcuc2V0Q29sb3Ioc3Ryb25nQ2FyZXRDb2xvcik7CisgICAgICAgICAgICAgICAgaW50IGxheW91dFBvcyA9IGxpbmUuZkxlYWRpbmdNYXJnaW4gKyBzZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgICAgIGludCBsYXlvdXRYID0gbGluZS5mTGVmdFRvUmlnaHQ/CisgICAgICAgICAgICAgICAgICAgICAgICB4ICsgbGF5b3V0UG9zIDogeCArIGxpbmVCb3VuZCAtIGxheW91dFBvczsKKyAgICAgICAgICAgICAgICBpbnQgbGF5b3V0WSA9IHkgKyBsaW5lLmZBc2NlbnQ7CisKKyAgICAgICAgICAgICAgICAvLyBUcmFuc2xhdGluZyBhbmQgdGhlbiBjbGlwcGluZyBkb2Vzbid0IHdvcmsuICBUcnkgdGhpczoKKyAgICAgICAgICAgICAgICBSZWN0YW5nbGUyRC5GbG9hdCBjbGlwUmVjdCA9IG5ldyBSZWN0YW5nbGUyRC5GbG9hdCgpOworICAgICAgICAgICAgICAgIGNsaXBSZWN0LnNldFJlY3Qoc2VnbWVudC5mQm91bmRzKTsKKyAgICAgICAgICAgICAgICBjbGlwUmVjdC54ICs9IGxheW91dFg7CisgICAgICAgICAgICAgICAgY2xpcFJlY3QueSArPSBsYXlvdXRZOworICAgICAgICAgICAgICAgIGNsaXBSZWN0LndpZHRoICs9IDE7CisgICAgICAgICAgICAgICAgY2xpcFJlY3QuaGVpZ2h0IC09IDE7CisKKyAgICAgICAgICAgICAgICBPYmplY3Qgc2F2ZWRDbGlwID0gQ2xpcFdvcmthcm91bmQuc2F2ZUNsaXBTdGF0ZShnKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBDbGlwV29ya2Fyb3VuZC50cmFuc2xhdGVBbmREcmF3U2hhcGVXaXRoQ2xpcChnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldHNbMF0pOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZXRzWzFdICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGcuc2V0Q29sb3Iod2Vha0NhcmV0Q29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcFdvcmthcm91bmQudHJhbnNsYXRlQW5kRHJhd1NoYXBlV2l0aENsaXAoZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0c1sxXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIENsaXBXb3JrYXJvdW5kLnJlc3RvcmVDbGlwU3RhdGUoZywgc2F2ZWRDbGlwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgbGluZUVuZCA9IGxpbmUuZkxlYWRpbmdNYXJnaW4gKyBsaW5lLmZUb3RhbEFkdmFuY2U7CisgICAgICAgICAgICAgICAgaW50IGVuZFggPSBsaW5lLmZMZWZ0VG9SaWdodD8gbGluZUVuZCA6IGxpbmVCb3VuZC1saW5lRW5kOworICAgICAgICAgICAgICAgIGVuZFggKz0geDsKKyAgICAgICAgICAgICAgICBnLmRyYXdMaW5lKGVuZFgsIHksIGVuZFgsIHkrbGluZS5nZXRIZWlnaHQoKS0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIEdyYXBoaWNzMkRDb252ZXJzaW9uLnJlc3RvcmVDb2xvclN0YXRlKGcsIHNhdmVkUGFpbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBSZWN0YW5nbGUgY2FyZXRCb3VuZHMoQmlkaUxheW91dEluZm8gbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ29uc3RUZXh0IHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aEJhc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHkpIHsKKworICAgICAgICBmaW5hbCBpbnQgc2VnbWVudENvdW50ID0gbGluZS5mU2VnbWVudHMuc2l6ZSgpOworICAgICAgICBmaW5hbCBpbnQgbGluZVN0YXJ0ID0gbGluZS5nZXRDaGFyU3RhcnQobGVuZ3RoQmFzaXMpOworICAgICAgICBpbnQgY3VycmVudFN0YXJ0ID0gbGluZVN0YXJ0OworICAgICAgICBCaWRpU2VnbWVudCBzZWdtZW50ID0gbnVsbDsKKyAgICAgICAgaW50IHNlZ21lbnRJbmRleDsKKworICAgICAgICBmb3IgKHNlZ21lbnRJbmRleD0wOyBzZWdtZW50SW5kZXggPCBzZWdtZW50Q291bnQ7IHNlZ21lbnRJbmRleCsrKSB7CisgICAgICAgICAgICBzZWdtZW50ID0gKEJpZGlTZWdtZW50KSBsaW5lLmZTZWdtZW50cy5lbGVtZW50QXQoc2VnbWVudEluZGV4KTsKKyAgICAgICAgICAgIGludCBjdXJyZW50RW5kcG9pbnQgPSBjdXJyZW50U3RhcnQgKyBzZWdtZW50LmZMYXlvdXQuZ2V0Q2hhcmFjdGVyQ291bnQoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50RW5kcG9pbnQgPiBjaGFyT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50U3RhcnQgPSBjdXJyZW50RW5kcG9pbnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VnbWVudEluZGV4ID09IHNlZ21lbnRDb3VudCAmJiBzZWdtZW50Q291bnQgPiAwKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgbGluZSBsZW5ndGggaXMgbm90IDAsIGFuZCBjaGFyT2Zmc2V0IGlzIGF0IGVuZCBvZiBsaW5lCisgICAgICAgICAgICBpZiAoIWlzVGFiKHRleHQuYXQoY2hhck9mZnNldC0xKSkpIHsKKyAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXggPSBzZWdtZW50Q291bnQtMTsKKyAgICAgICAgICAgICAgICBzZWdtZW50ID0gKEJpZGlTZWdtZW50KSBsaW5lLmZTZWdtZW50cy5lbGVtZW50QXQoc2VnbWVudEluZGV4KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhcnQgPSBsaW5lU3RhcnQgKyBsaW5lLmdldENoYXJMZW5ndGgoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LmZMYXlvdXQuZ2V0Q2hhcmFjdGVyQ291bnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJlY3RhbmdsZSByOworICAgICAgICAKKyAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IHNlZ21lbnRDb3VudCkgeworICAgICAgICAgICAgVGV4dExheW91dCBsYXlvdXQgPSBzZWdtZW50LmZMYXlvdXQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0SW5MYXlvdXQgPSBjaGFyT2Zmc2V0IC0gY3VycmVudFN0YXJ0OworICAgICAgICAgICAgU2hhcGVbXSBjYXJldHMgPSBsYXlvdXQuZ2V0Q2FyZXRTaGFwZXMob2Zmc2V0SW5MYXlvdXQsIHNlZ21lbnQuZkJvdW5kcyk7CisgICAgICAgICAgICByID0gY2FyZXRzWzBdLmdldEJvdW5kcygpOworICAgICAgICAgICAgaWYgKGNhcmV0c1sxXSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgci5hZGQoY2FyZXRzWzFdLmdldEJvdW5kcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHIud2lkdGggKz0gMTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGxheW91dFBvcyA9IGxpbmUuZkxlYWRpbmdNYXJnaW4gKyBzZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgaWYgKGxpbmUuZkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgci54ICs9IGxheW91dFBvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHIueCArPSBsaW5lQm91bmQgLSBsYXlvdXRQb3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByLnkgKz0gbGluZS5mQXNjZW50OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgciA9IG5ldyBSZWN0YW5nbGUoKTsKKyAgICAgICAgICAgIHIuaGVpZ2h0ID0gbGluZS5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIHIud2lkdGggPSAxOworICAgICAgICAgICAgaW50IGxpbmVFbmQgPSBsaW5lLmZMZWFkaW5nTWFyZ2luICsgbGluZS5mVG90YWxBZHZhbmNlOworICAgICAgICAgICAgaWYgKGxpbmUuZkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgci54ID0gbGluZUVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHIueCA9IGxpbmVCb3VuZCAtIGxpbmVFbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHIudHJhbnNsYXRlKHgsIHkpOworICAgICAgICByZXR1cm4gcjsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBzdHJvbmdDYXJldEJhc2VsaW5lUG9zaXRpb24oQmlkaUxheW91dEluZm8gbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aEJhc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhck9mZnNldCkgeworCisgICAgICAgIGZpbmFsIGludCBzZWdtZW50Q291bnQgPSBsaW5lLmZTZWdtZW50cy5zaXplKCk7CisgICAgICAgIGludCBjdXJyZW50U3RhcnQgPSBsaW5lLmdldENoYXJTdGFydChsZW5ndGhCYXNpcyk7CisgICAgICAgIEJpZGlTZWdtZW50IHNlZ21lbnQgPSBudWxsOworICAgICAgICBpbnQgc2VnbWVudEluZGV4OworCisgICAgICAgIGZvciAoc2VnbWVudEluZGV4PTA7IHNlZ21lbnRJbmRleCA8IHNlZ21lbnRDb3VudDsgc2VnbWVudEluZGV4KyspIHsKKyAgICAgICAgICAgIHNlZ21lbnQgPSAoQmlkaVNlZ21lbnQpIGxpbmUuZlNlZ21lbnRzLmVsZW1lbnRBdChzZWdtZW50SW5kZXgpOworICAgICAgICAgICAgaW50IGN1cnJlbnRFbmRwb2ludCA9IGN1cnJlbnRTdGFydCArIHNlZ21lbnQuZkxheW91dC5nZXRDaGFyYWN0ZXJDb3VudCgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRFbmRwb2ludCA+IGNoYXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRTdGFydCA9IGN1cnJlbnRFbmRwb2ludDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWdtZW50SW5kZXggPCBzZWdtZW50Q291bnQpIHsKKyAgICAgICAgICAgIFRleHRMYXlvdXQgbGF5b3V0ID0gc2VnbWVudC5mTGF5b3V0OworICAgICAgICAgICAgaW50IG9mZnNldEluTGF5b3V0ID0gY2hhck9mZnNldCAtIGN1cnJlbnRTdGFydDsKKyAgICAgICAgICAgIFRleHRIaXRJbmZvIGhpdCA9IFRleHRIaXRJbmZvLmFmdGVyT2Zmc2V0KG9mZnNldEluTGF5b3V0KTsKKyAgICAgICAgICAgIGhpdCA9IGxheW91dC5ERUZBVUxUX0NBUkVUX1BPTElDWS5nZXRTdHJvbmdDYXJldChoaXQsIGhpdC5nZXRPdGhlckhpdCgpLCBsYXlvdXQpOworICAgICAgICAgICAgZmxvYXRbXSBpbmZvID0gbGF5b3V0LmdldENhcmV0SW5mbyhoaXQpOworICAgICAgICAgICAgaW50IGxheW91dFBvcyA9IGxpbmUuZkxlYWRpbmdNYXJnaW4gKyBzZWdtZW50LmZEaXN0YW5jZUZyb21MZWFkaW5nTWFyZ2luOworICAgICAgICAgICAgaWYgKGxpbmUuZkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxheW91dFBvcyArIChpbnQpIGluZm9bMF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZUJvdW5kIC0gbGF5b3V0UG9zICsgKGludCkgaW5mb1swXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBsaW5lRW5kID0gbGluZS5mTGVhZGluZ01hcmdpbiArIGxpbmUuZlRvdGFsQWR2YW5jZTsKKyAgICAgICAgICAgIGlmIChsaW5lLmZMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgIHJldHVybiBsaW5lRW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVCb3VuZCAtIGxpbmVFbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCBnZXROZXh0T2Zmc2V0KEJpZGlMYXlvdXRJbmZvIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoQmFzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGRpcikgeworCisgICAgICAgIGlmIChkaXIgIT0gTUZvcm1hdHRlci5lTGVmdCAmJiBkaXIgIT0gTUZvcm1hdHRlci5lUmlnaHQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZGlyZWN0aW9uLiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZmluZCBzZWdtZW50IGNvbnRhaW5pbmcgb2Zmc2V0OgorICAgICAgICBmaW5hbCBpbnQgc2VnbWVudENvdW50ID0gbGluZS5mU2VnbWVudHMuc2l6ZSgpOworICAgICAgICBmaW5hbCBpbnQgbGluZUNoYXJTdGFydCA9IGxpbmUuZ2V0Q2hhclN0YXJ0KGxlbmd0aEJhc2lzKTsKKworICAgICAgICBpbnQgY3VycmVudFN0YXJ0ID0gbGluZUNoYXJTdGFydDsKKyAgICAgICAgQmlkaVNlZ21lbnQgc2VnbWVudCA9IG51bGw7CisgICAgICAgIGludCBzZWdtZW50SW5kZXg7CisKKyAgICAgICAgZm9yIChzZWdtZW50SW5kZXg9MDsgc2VnbWVudEluZGV4IDwgc2VnbWVudENvdW50OyBzZWdtZW50SW5kZXgrKykgeworICAgICAgICAgICAgc2VnbWVudCA9IChCaWRpU2VnbWVudCkgbGluZS5mU2VnbWVudHMuZWxlbWVudEF0KHNlZ21lbnRJbmRleCk7CisgICAgICAgICAgICBpbnQgY3VycmVudEVuZHBvaW50ID0gY3VycmVudFN0YXJ0ICsgc2VnbWVudC5mTGF5b3V0LmdldENoYXJhY3RlckNvdW50KCk7CisgICAgICAgICAgICBpZiAoY3VycmVudEVuZHBvaW50ID4gY2hhck9mZnNldCB8fAorICAgICAgICAgICAgICAgICAgICAoc2VnbWVudEluZGV4ID09IHNlZ21lbnRDb3VudC0xICYmIGN1cnJlbnRFbmRwb2ludD09Y2hhck9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRTdGFydCA9IGN1cnJlbnRFbmRwb2ludDsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGJvb2xlYW4gbG9nQWR2YW5jZSA9IChkaXI9PU1Gb3JtYXR0ZXIuZVJpZ2h0KT09KGxpbmUuZkxlZnRUb1JpZ2h0KTsKKworICAgICAgICBpbnQgcmVzdWx0OworCisgICAgICAgIGlmIChzZWdtZW50SW5kZXggPCBzZWdtZW50Q291bnQpIHsKKyAgICAgICAgICAgIFRleHRMYXlvdXQgbGF5b3V0ID0gc2VnbWVudC5mTGF5b3V0OworICAgICAgICAgICAgaW50IG9mZnNldEluTGF5b3V0ID0gY2hhck9mZnNldCAtIGN1cnJlbnRTdGFydDsKKyAgICAgICAgICAgIFRleHRIaXRJbmZvIGhpdCA9IChkaXI9PU1Gb3JtYXR0ZXIuZUxlZnQpPworICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldE5leHRMZWZ0SGl0KG9mZnNldEluTGF5b3V0KSA6CisgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0TmV4dFJpZ2h0SGl0KG9mZnNldEluTGF5b3V0KTsKKyAgICAgICAgICAgIGlmIChoaXQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvZ0FkdmFuY2U/CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGFydCtsYXlvdXQuZ2V0Q2hhcmFjdGVyQ291bnQoKSsxIDogY3VycmVudFN0YXJ0LTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBoaXQuZ2V0SW5zZXJ0aW9uSW5kZXgoKSArIGN1cnJlbnRTdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGxvZ0FkdmFuY2U/IGxpbmVDaGFyU3RhcnQgKyBsaW5lLmZDaGFyTGVuZ3RoICsgMSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVDaGFyU3RhcnQgLSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9DbGlwV29ya2Fyb3VuZC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9DbGlwV29ya2Fyb3VuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkMGEwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L0NsaXBXb3JrYXJvdW5kLmphdmEKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IENsaXBXb3JrYXJvdW5kLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8vIFJlcXVpcmVzIEphdmEyCisKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0OworCitpbXBvcnQgamF2YS5hd3QuU2hhcGU7CisvLy8qSkRLMTJJTVBPUlRTCitpbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKK2ltcG9ydCBqYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEOworaW1wb3J0IGphdmEuYXd0Lmdlb20uUGF0aEl0ZXJhdG9yOworaW1wb3J0IGphdmEuYXd0Lmdlb20uTGluZTJEOworLy9KREsxMklNUE9SVFMqLworLypKREsxMUlNUE9SVFMKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuR3JhcGhpY3MyRDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuUmVjdGFuZ2xlMkQ7CitKREsxMUlNUE9SVFMqLworCisvKioKKyAqIFRoaXMgY2xhc3MgZXhpc3RzIHRvIHdvcmsgYXJvdW5kIGEgY2xpcHBpbmcgYnVnIGluIEpESyAxLjIuCisgKi8KK2ZpbmFsIGNsYXNzIENsaXBXb3JrYXJvdW5kIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisvLy8qSkRLMTJJTVBPUlRTCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGV4Y3VzZSA9CisgICAgICAgICJTb3JyeSwgdGhpcyBtZXRob2QgaXMgYSB2ZXJ5IGxpbWl0ZWQgd29ya2Fyb3VuZCBmb3IgYSBKREsgMS4yIGJ1Zy4iOworLy9KREsxMklNUE9SVFMqLworICAgIAorICAgIHN0YXRpYyBPYmplY3Qgc2F2ZUNsaXBTdGF0ZShHcmFwaGljczJEIGcpIHsKKy8vLypKREsxMklNUE9SVFMKKyAgICAgICAgcmV0dXJuIG51bGw7CisvL0pESzEySU1QT1JUUyovCisvKkpESzExSU1QT1JUUworICAgICAgICByZXR1cm4gZy5nZXRDbGlwKCk7CitKREsxMUlNUE9SVFMqLworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZXN0b3JlQ2xpcFN0YXRlKEdyYXBoaWNzMkQgZywgT2JqZWN0IHN0YXRlKSB7CisvLy8qSkRLMTJJTVBPUlRTCisgICAgICAgIGlmIChzdGF0ZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2xpcCBzdGF0ZSBmb3IgdGhpcyBjbGFzcy4iKTsKKyAgICAgICAgfQorLy9KREsxMklNUE9SVFMqLworLypKREsxMUlNUE9SVFMKKyAgICAgICAgZy5zZXRDbGlwKChTaGFwZSlzdGF0ZSk7CitKREsxMUlNUE9SVFMqLworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBEcmF3IHRoZSBnaXZlbiBTaGFwZSBpbnRvIHRoZSBHcmFwaGljcywgdHJhbnNsYXRlZCBieSAoZHgsIGR5KQorICAgICAqIGFuZCBjbGlwcGVkIHRvIGNsaXBSZWN0LgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZUFuZERyYXdTaGFwZVdpdGhDbGlwKEdyYXBoaWNzMkQgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZTJEIGNsaXBSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXBlIHNoYXBlKSB7CisvLy8qSkRLMTJJTVBPUlRTCisgICAgICAgIC8vIHJlYWxseSBib2d1cyBpbXBsZW1lbnRhdGlvbiByaWdodCBub3c6ICBiYXNpY2FsbHkgb25seQorICAgICAgICAvLyBkcmF3cyBjYXJldHMgZnJvbSBhIFRleHRMYXlvdXQuCisgICAgICAgIC8vIE9oIHllYWgsIGl0IGRvZXNuJ3QgcmVhbGx5IGNsaXAgY29ycmVjdGx5IGVpdGhlci4uLgorCisgICAgICAgIFBhdGhJdGVyYXRvciBwYXRoSXRlciA9IHNoYXBlLmdldFBhdGhJdGVyYXRvcihudWxsKTsKKyAgICAgICAgZmxvYXRbXSBwb2ludHMgPSBuZXcgZmxvYXRbNl07CisKKyAgICAgICAgaW50IHR5cGUgPSBwYXRoSXRlci5jdXJyZW50U2VnbWVudChwb2ludHMpOworICAgICAgICBpZiAodHlwZSAhPSBQYXRoSXRlcmF0b3IuU0VHX01PVkVUTykgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGV4Y3VzZSk7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgeDEgPSBwb2ludHNbMF0gKyBkeDsKKyAgICAgICAgZmxvYXQgeTEgPSBwb2ludHNbMV0gKyBkeTsKKworICAgICAgICBpZiAocGF0aEl0ZXIuaXNEb25lKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihleGN1c2UpOworICAgICAgICB9CisKKyAgICAgICAgcGF0aEl0ZXIubmV4dCgpOworICAgICAgICB0eXBlID0gcGF0aEl0ZXIuY3VycmVudFNlZ21lbnQocG9pbnRzKTsKKyAgICAgICAgaWYgKHR5cGUgIT0gUGF0aEl0ZXJhdG9yLlNFR19MSU5FVE8pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihleGN1c2UpOworICAgICAgICB9CisgICAgICAgIGZsb2F0IHgyID0gcG9pbnRzWzBdICsgZHg7CisgICAgICAgIGZsb2F0IHkyID0gcG9pbnRzWzFdICsgZHk7CisKKyAgICAgICAgZmxvYXQgbWluWSA9IChmbG9hdCkgY2xpcFJlY3QuZ2V0WSgpOworICAgICAgICBmbG9hdCBtYXhZID0gKGZsb2F0KSBjbGlwUmVjdC5nZXRNYXhZKCk7CisKKyAgICAgICAgLy8gTm93IGNsaXAgd2l0aGluIHZlcnRpY2FsIGxpbWl0cyBpbiBjbGlwUmVjdAorICAgICAgICBpZiAoeTEgPT0geTIpIHsKKyAgICAgICAgICAgIGlmICh5MSA8IG1pblkgfHwgeTEgPj0gbWF4WSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh5MSA+IHkyKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgdCA9IHgxOworICAgICAgICAgICAgICAgIHgxID0geDI7CisgICAgICAgICAgICAgICAgeDIgPSB0OworICAgICAgICAgICAgICAgIHQgPSB5MTsKKyAgICAgICAgICAgICAgICB5MSA9IHkyOworICAgICAgICAgICAgICAgIHkyID0gdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmxvYXQgaW52U2xvcGUgPSAoeDIteDEpIC8gKHkyLXkxKTsKKyAgICAgICAgICAgIGlmICh5MSA8IG1pblkpIHsKKyAgICAgICAgICAgICAgICB4MSAtPSAobWluWS15MSkgKiBpbnZTbG9wZTsKKyAgICAgICAgICAgICAgICB5MSA9IG1pblk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeTIgPj0gbWF4WSkgeworICAgICAgICAgICAgICAgIHgxICs9ICh5Mi1tYXhZKSAqIGludlNsb3BlOworICAgICAgICAgICAgICAgIHkyID0gbWF4WTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGcuZHJhdyhuZXcgTGluZTJELkZsb2F0KHgxLCB5MSwgeDIsIHkyKSk7CisvL0pESzEySU1QT1JUUyovCisvKkpESzExSU1QT1JUUworICAgICAgICBnLnNldENsaXAoY2xpcFJlY3QpOworICAgICAgICBnLnRyYW5zbGF0ZShkeCwgZHkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZy5kcmF3KHNoYXBlKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgIGcudHJhbnNsYXRlKC1keCwgLWR5KTsKKyAgICAgICAgfQorSkRLMTFJTVBPUlRTKi8KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L0RlZmF1bHRDaGFyYWN0ZXJNZXRyaWMuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvRGVmYXVsdENoYXJhY3Rlck1ldHJpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVjZGIxODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L0RlZmF1bHRDaGFyYWN0ZXJNZXRyaWMuamF2YQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBEZWZhdWx0Q2hhcmFjdGVyTWV0cmljLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8vIFJlcXVpcmVzIEphdmEyCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdDsKKworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKKy8vLypKREsxMklNUE9SVFMKK2ltcG9ydCBqYXZhLmF3dC5mb250LkZvbnRSZW5kZXJDb250ZXh0OworaW1wb3J0IGphdmEuYXd0LmZvbnQuVGV4dExheW91dDsKKy8vSkRLMTJJTVBPUlRTKi8KKworLypKREsxMUlNUE9SVFMKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuRm9udFJlbmRlckNvbnRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LlRleHRMYXlvdXQ7CitKREsxMUlNUE9SVFMqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgRm9ybWF0dGVyIHRvIGVzdGltYXRlIHRoZSBoZWlnaHQKKyAqIG9mIGNoYXJhY3RlcnMgaW4gYSBwYXJ0aWN1bGFyIHN0eWxlLgorICovCitmaW5hbCBjbGFzcyBEZWZhdWx0Q2hhcmFjdGVyTWV0cmljIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgCisgICAgZmluYWwgY2xhc3MgTWV0cmljIHsKKyAgICAKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBmQXNjZW50OworICAgICAgICBwcml2YXRlIGZsb2F0IGZEZXNjZW50OworICAgICAgICBwcml2YXRlIGZsb2F0IGZMZWFkaW5nOworICAgIAorICAgICAgICBwcml2YXRlIE1ldHJpYyhmbG9hdCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQsIGZsb2F0IGxlYWRpbmcpIHsKKyAgICAKKyAgICAgICAgICAgIGZBc2NlbnQgPSBhc2NlbnQ7CisgICAgICAgICAgICBmRGVzY2VudCA9IGRlc2NlbnQ7CisgICAgICAgICAgICBmTGVhZGluZyA9IGxlYWRpbmc7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgcHVibGljIGludCBnZXRBc2NlbnQoKSB7CisgICAgICAgICAgICByZXR1cm4gKGludCkgTWF0aC5jZWlsKGZBc2NlbnQpOworICAgICAgICB9CisgICAgCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0RGVzY2VudCgpIHsKKyAgICAgICAgICAgIHJldHVybiAoaW50KSBNYXRoLmNlaWwoZkRlc2NlbnQpOworICAgICAgICB9CisgICAgCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0TGVhZGluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAoaW50KSBNYXRoLmNlaWwoZkxlYWRpbmcpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgZmluYWwgSGFzaHRhYmxlIGZDYWNoZSA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBwcml2YXRlIC8qZmluYWwqLyBGb250UmVzb2x2ZXIgZlJlc29sdmVyOworICAgIHByaXZhdGUgLypmaW5hbCovIEZvbnRSZW5kZXJDb250ZXh0IGZGcmM7CisgICAgCisgICAgcHVibGljIERlZmF1bHRDaGFyYWN0ZXJNZXRyaWMoRm9udFJlc29sdmVyIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRSZW5kZXJDb250ZXh0IGZyYykgeworICAgIAorICAgICAgICBmUmVzb2x2ZXIgPSByZXNvbHZlcjsKKyAgICAgICAgZkZyYyA9IGZyYzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0IGEgRGVmYXVsdENoYXJhY3Rlck1ldHJpYyBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIHN0eWxlLiAgVGhlCisgICAgICogc3R5bGUgaXMgZmlyc3QgcmVzb2x2ZWQgd2l0aCBGb250UmVzb2x2ZXIuCisgICAgICovCisgICAgcHVibGljIE1ldHJpYyBnZXRNZXRyaWNGb3JTdHlsZShBdHRyaWJ1dGVNYXAgc3R5bGUpIHsKKworICAgICAgICBzdHlsZSA9IGZSZXNvbHZlci5hcHBseUZvbnQoc3R5bGUpOworICAgICAgICBNZXRyaWMgbWV0cmljID0gKE1ldHJpYykgZkNhY2hlLmdldChzdHlsZSk7CisgICAgICAgIGlmIChtZXRyaWMgPT0gbnVsbCkgeworICAgICAgICAgICAgVGV4dExheW91dCBsYXlvdXQgPSBuZXcgVGV4dExheW91dCgiICIsIHN0eWxlLCBmRnJjKTsKKyAgICAgICAgICAgIG1ldHJpYyA9IG5ldyBNZXRyaWMobGF5b3V0LmdldEFzY2VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0RGVzY2VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0TGVhZGluZygpKTsKKyAgICAgICAgICAgIGZDYWNoZS5wdXQoc3R5bGUsIG1ldHJpYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1ldHJpYzsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9Gb250UmVzb2x2ZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvRm9udFJlc29sdmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDViOTMyOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvRm9udFJlc29sdmVyLmphdmEKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRm9udFJlc29sdmVyLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8vIFJlcXVpcmVzIEphdmEyCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5UZXh0QXR0cmlidXRlOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LkZvbnRVdGlsczsKKworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CitpbXBvcnQgamF2YS5hd3QuRm9udDsKKworZmluYWwgY2xhc3MgRm9udFJlc29sdmVyIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisKKyAgICBzdGF0aWMgeworLy8gRXZlbiB0aG91Z2ggaXQgdmlvbGF0ZXMgdGhlIFByaW1lIERpcmVjdGl2ZSBJJ2xsIGNvbmRpdGlvbmFsaXplCisvLyB0aGlzIGFueXdheSwgc2luY2UgaXQgaXMganVzdCBhIDEuMiB3b3JrYXJvdW5kIHdoaWNoIEkgZ3JlYXRseQorLy8gcmVzZW50LgorLy8vKkpESzEySU1QT1JUUworICAgICAgICBqYXZhLmF3dC5HcmFwaGljc0Vudmlyb25tZW50LmdldExvY2FsR3JhcGhpY3NFbnZpcm9ubWVudCgpLmdldEFsbEZvbnRzKCk7CisvL0pESzEySU1QT1JUUyovCisgICAgfQorCisgICAgcHJpdmF0ZSBIYXNodGFibGUgc3R5bGVNYXA7CisgICAgcHJpdmF0ZSBmaW5hbCBBdHRyaWJ1dGVNYXAgZkRlZmF1bHRGb250TWFwOworCisgICAgcHVibGljIEZvbnRSZXNvbHZlcihBdHRyaWJ1dGVNYXAgZGVmYXVsdHMpIHsKKworICAgICAgICBzdHlsZU1hcCA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgSGFzaHRhYmxlIHRlbXBNYXAgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIHRlbXBNYXAucHV0KFRleHRBdHRyaWJ1dGUuRkFNSUxZLCBkZWZhdWx0cy5nZXQoVGV4dEF0dHJpYnV0ZS5GQU1JTFkpKTsKKyAgICAgICAgdGVtcE1hcC5wdXQoVGV4dEF0dHJpYnV0ZS5XRUlHSFQsIGRlZmF1bHRzLmdldChUZXh0QXR0cmlidXRlLldFSUdIVCkpOworICAgICAgICB0ZW1wTWFwLnB1dChUZXh0QXR0cmlidXRlLlBPU1RVUkUsIGRlZmF1bHRzLmdldChUZXh0QXR0cmlidXRlLlBPU1RVUkUpKTsKKyAgICAgICAgdGVtcE1hcC5wdXQoVGV4dEF0dHJpYnV0ZS5TSVpFLCBkZWZhdWx0cy5nZXQoVGV4dEF0dHJpYnV0ZS5TSVpFKSk7CisgICAgICAgIGZEZWZhdWx0Rm9udE1hcCA9IG5ldyBBdHRyaWJ1dGVNYXAodGVtcE1hcCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmV0Y2ggcmVzdWx0IG9mIHJlc29sdmUoc3R5bGUpIGZyb20gY2FjaGUsIGlmIHByZXNlbnQuCisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBhcHBseUZvbnQoQXR0cmlidXRlTWFwIHN0eWxlKSB7CisKKyAgICAgICAgT2JqZWN0IGNhY2hlZE1hcCA9IHN0eWxlTWFwLmdldChzdHlsZSk7CisKKyAgICAgICAgaWYgKGNhY2hlZE1hcCA9PSBudWxsKSB7CisgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgcmVzb2x2ZWRNYXAgPSByZXNvbHZlKHN0eWxlKTsKKyAgICAgICAgICAgIHN0eWxlTWFwLnB1dChzdHlsZSwgcmVzb2x2ZWRNYXApOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkTWFwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIChBdHRyaWJ1dGVNYXApIGNhY2hlZE1hcDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBBdHRyaWJ1dGVNYXAgY29udGFpbmluZyBhIEZvbnQgY29tcHV0ZWQgZnJvbSB0aGUKKyAgICAgKiBhdHRyaWJ1dGVzIGluIDx0dD5zdHlsZTwvdHQ+LgorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgcmVzb2x2ZShBdHRyaWJ1dGVNYXAgc3R5bGUpIHsKKworICAgICAgICBpZiAoc3R5bGUuZ2V0KFRleHRBdHRyaWJ1dGUuRk9OVCkgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHN0eWxlOworICAgICAgICB9CisKKyAgICAgICAgRm9udCBmb250ID0gRm9udFV0aWxzLmdldEZvbnQoZkRlZmF1bHRGb250TWFwLmFkZEF0dHJpYnV0ZXMoc3R5bGUpKTsKKworICAgICAgICByZXR1cm4gc3R5bGUuYWRkQXR0cmlidXRlKFRleHRBdHRyaWJ1dGUuRk9OVCwgZm9udCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9MYXlvdXRJbmZvLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L0xheW91dEluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xODY4M2QxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9MYXlvdXRJbmZvLmphdmEKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IExheW91dEluZm8uamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0MyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKKy8qKiBMYXlvdXRJbmZvCisKKyAgICBBIGxpbmUgb2YgdGV4dCwgcG9zc2libHkgY29udGFpbmluZyB0YWItc2VnbWVudHMuCisqLworCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdDsKKworaW1wb3J0IGphdmEuYXd0LkNvbG9yOworaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKKworLy8vKkpESzEySU1QT1JUUworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7CisvL0pESzEySU1QT1JUUyovCisKKy8qSkRLMTFJTVBPUlRTCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LkdyYXBoaWNzMkQ7CitKREsxMUlNUE9SVFMqLworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CisKK2Fic3RyYWN0IGNsYXNzIExheW91dEluZm8KK3sKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgaW50IGZDaGFyU3RhcnQ7ICAgICAgIC8vIG9mZnNldCBpbiB0ZXh0IHRvIHN0YXJ0IG9mIGxpbmUgKHdhcyBmU3RhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVnLiB2YWx1ZXMgaW5kaWNhdGUgZGlzdGFuY2UgZnJvbSBlbmQgb2YgdGV4dAorICAgIHByaXZhdGUgaW50IGZHcmFwaGljU3RhcnQ7ICAgIC8vIG1pbiBwaXhlbCBvZmZzZXQgaW4gZmlsbCBkaXJlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgZGlzdGFuY2UgZnJvbSBib3R0b20gb2YgdGV4dCB2aWV3CisKKyAgICAvKgorICAgICAgICBUaGVzZSBtZXRob2RzIGFyZSBmb3Igc3RvcmluZyBMYXlvdXRzIGluIGEgZ2FwLXN0b3JhZ2UsCisgICAgICAgIHJlbGF0aXZlIHRvIGVpdGhlciB0aGUgc3RhcnQgb2YgZW5kIG9mIHRleHQuICBTZWUgQXN5bmNGb3JtYXR0ZXIuCisKKyAgICAgICAgSWYgeW91IGp1c3Qgd2FudCBhYnNvbHV0ZSAodGhhdCBpcywgc3RhcnQtcmVsYXRpdmUpIGNoYXIgYW5kCisgICAgICAgIGdyYXBoaWMgc3RhcnRzLCBkb24ndCBtYWtlIHRoZW0gZW5kLXJlbGF0aXZlLgorICAgICovCisKKyAgICBwdWJsaWMgZmluYWwgaW50IGdldENoYXJTdGFydChpbnQgbGVuZ3RoQmFzaXMpIHsKKworICAgICAgICBpZiAoZkNoYXJTdGFydCA+PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gZkNoYXJTdGFydDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBsZW5ndGhCYXNpcyArIGZDaGFyU3RhcnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgaW50IGdldEdyYXBoaWNTdGFydChpbnQgZ3JhcGhpY0Jhc2lzKSB7CisKKyAgICAgICAgaWYgKGZHcmFwaGljU3RhcnQgPj0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGZHcmFwaGljU3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY0Jhc2lzICsgZkdyYXBoaWNTdGFydDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldENoYXJTdGFydChpbnQgYmVnaW5uaW5nUmVsYXRpdmVTdGFydCkgeworCisgICAgICAgIGlmIChiZWdpbm5pbmdSZWxhdGl2ZVN0YXJ0IDwgMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2hhclN0YXJ0IG11c3QgYmUgbm9ubmVnYXZpdHZlIik7CisgICAgICAgIH0KKyAgICAgICAgZkNoYXJTdGFydCA9IGJlZ2lubmluZ1JlbGF0aXZlU3RhcnQ7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHZvaWQgc2V0R3JhcGhpY1N0YXJ0KGludCBiZWdpbm5pbmdSZWxhdGl2ZVN0YXJ0KSB7CisKKyAgICAgICAgaWYgKGJlZ2lubmluZ1JlbGF0aXZlU3RhcnQgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjaGFyU3RhcnQgbXVzdCBiZSBub25uZWdhdml0dmUiKTsKKyAgICAgICAgfQorICAgICAgICBmR3JhcGhpY1N0YXJ0ID0gYmVnaW5uaW5nUmVsYXRpdmVTdGFydDsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBtYWtlUmVsYXRpdmVUb0JlZ2lubmluZyhpbnQgbGVuZ3RoQmFzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdyYXBoaWNCYXNpcykgeworCisgICAgICAgIGlmIChsZW5ndGhCYXNpcyA8IDAgfHwgZ3JhcGhpY0Jhc2lzIDwgMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFzZXMgbXVzdCBiZSBwb3NpdGl2ZS4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZkNoYXJTdGFydCA+PSAwIHx8IGZHcmFwaGljU3RhcnQgPj0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbHJlYWR5IHN0YXJ0LXJlbGF0aXZlLiIpOworICAgICAgICB9CisKKyAgICAgICAgZkNoYXJTdGFydCArPSBsZW5ndGhCYXNpczsKKyAgICAgICAgZkdyYXBoaWNTdGFydCArPSBncmFwaGljQmFzaXM7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHZvaWQgbWFrZVJlbGF0aXZlVG9FbmQoaW50IGxlbmd0aEJhc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBncmFwaGljQmFzaXMpIHsKKworICAgICAgICBpZiAobGVuZ3RoQmFzaXMgPCAwIHx8IGdyYXBoaWNCYXNpcyA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJhc2VzIG11c3QgYmUgcG9zaXRpdmUuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZDaGFyU3RhcnQgPCAwIHx8IGZHcmFwaGljU3RhcnQgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgZW5kLXJlbGF0aXZlLiIpOworICAgICAgICB9CisKKyAgICAgICAgZkNoYXJTdGFydCAtPSBsZW5ndGhCYXNpczsKKyAgICAgICAgZkdyYXBoaWNTdGFydCAtPSBncmFwaGljQmFzaXM7CisgICAgfQorCisKKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldENoYXJMZW5ndGgoKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldEFzY2VudCgpOworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0RGVzY2VudCgpOworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0TGVhZGluZygpOworCisgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRWaXNpYmxlQWR2YW5jZSgpOworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0VG90YWxBZHZhbmNlKCk7CisgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRMZWFkaW5nTWFyZ2luKCk7CisKKyAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0xlZnRUb1JpZ2h0KCk7CisKKyAgICBwdWJsaWMgaW50IGdldEhlaWdodCgpIHsKKworICAgICAgICByZXR1cm4gZ2V0QXNjZW50KCkrZ2V0RGVzY2VudCgpK2dldExlYWRpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIERyYXdzIHRleHQgd2l0aCBoaWdobGlnaHRpbmcuCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZW5kZXJXaXRoSGlnaGxpZ2h0KGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzMkQgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsU3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGhpZ2hsaWdodENvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICAvKiogVXNlIGxheW91dCBpbmZvcm1hdGlvbiB0byByZW5kZXIgdGhlIGxpbmUgYXQgeCwgeS4qLworCisgICAgcHVibGljIHZvaWQgcmVuZGVyKGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3MyRCBnLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHkpCisgICAgeworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlbmRlckNhcmV0KE1Db25zdFRleHQgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoQmFzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3MyRCBnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3Igc3Ryb25nQ2FyZXRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciB3ZWFrQ2FyZXRDb2xvcikKKyAgICB7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBwb2ludCB3aXRoaW4gdGhpcyBsaW5lLCByZXR1cm4gdGhlIGNoYXJhY3RlciBvZmZzZXQgY29ycmVzcG9uZGluZyB0byB0aGF0IHBvaW50LgorICAgICAqCisgICAgICogQHBhcmFtIHJlc3VsdC4gIFRoaXMgbWF5IGJlIG51bGwsIGluIHdoaWNoIGNhc2UgYSBuZXcgVGV4dE9mZnNldCB3aWxsIGJlIGFsbG9jYXRlZC4KKyAgICAgKiAgICAgICAgVGhpcyBvYmplY3QgaXMgbW9kaWZpZWQgaW4gcGxhY2UsIGFuZCBhbHNvIHJldHVybmVkIGFzIHRoZSBmdW5jdGlvbiByZXN1bHQuCisgICAgICogQHBhcmFtIHRleHQgVGV4dCB0byBpbnNwZWN0LgorICAgICAqIEBwYXJhbSBsaW5lWCBQb3NpdGlvbiBvbiB0aGlzIGxpbmUgcmVsYXRpdmUgdG8gdG9wIGxlZnQgY29ybmVyIG9mIHRoaXMgbGluZS4KKyAgICAgKiBAcGFyYW0gbGluZVkgUG9zaXRpb24gb24gdGhpcyBsaW5lIHJlbGF0aXZlIHRvIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGlzIGxpbmUuCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IFRleHRPZmZzZXQgcGl4ZWxUb09mZnNldChpbnQgbGVuZ3RoQmFzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5KTsKKworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgc3Ryb25nQ2FyZXRCYXNlbGluZVBvc2l0aW9uKGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZUJvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFyT2Zmc2V0KTsKKworICAgIHB1YmxpYyBhYnN0cmFjdCBSZWN0YW5nbGUgY2FyZXRCb3VuZHMoTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aEJhc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVCb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSk7CisgICAgCisgICAgcHVibGljIGFic3RyYWN0IGludCBnZXROZXh0T2Zmc2V0KGludCBsZW5ndGhCYXNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGRpcik7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L01Gb3JtYXR0ZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvTUZvcm1hdHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiY2ViNjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L01Gb3JtYXR0ZXIuamF2YQpAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogTUZvcm1hdHRlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuNCAkICREYXRlOiAyMDAyLzAzLzIwIDA1OjExOjE3ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCisKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0OworCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS5hd3QuR3JhcGhpY3M7CitpbXBvcnQgamF2YS5hd3QuUG9pbnQ7CitpbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCisvKioKKyoKKyogVGhpcyBjbGFzcyBmb3JtYXRzIGxpbmVzIG9mIHRleHQgdG8gYSBnaXZlbiBsZW5ndGguCisqIEl0IHByb3ZpZGVzIHNlcnZpY2VzIG5lZWRlZCBmb3Igc3RhdGljIHRleHQgZGlzcGxheSwKKyogYW5kIGFsc28gZWRpdGFibGUgdGV4dCwgaW5jbHVkaW5nOiAgZGlzcGxheWluZyB0ZXh0LAorKiByZWZvcm1hdHRpbmcgdGV4dCBhZnRlciBhbiBlZGl0LCBjb252ZXJ0aW5nIGJldHdlZW4KKyogc2NyZWVuIGxvY2F0aW9ucyBhbmQgb2Zmc2V0cyBpbnRvIHRoZSB0ZXh0LCBjYWxjdWxhdGluZworKiBhcmVhcyBvZiB0aGUgc2NyZWVuIGZvciAiaGlnaGxpZ2h0aW5nLCIgIGFuZCBjb21wdXRpbmcKKyogb2Zmc2V0cyBpbnRvIHRoZSB0ZXh0IHJlc3VsdGluZyBmcm9tIGFycm93IGtleXMuCisqIDxwPgorKiBUZXh0IGNsaWVudHMgaW5zdGFudGlhdGUgdGhpcyBjbGFzcyB3aXRoIGFuCisqIDx0dD5NQ29uc3RUZXh0PC90dD4gb2JqZWN0IGFuZCBhIGZvcm1hdCB3aWR0aC4gIFRleHQKKyogY2FuIGJlIGZvcm1hdHRlZCBzdWNoIHRoYXQgYWxsIGxpbmVzIGZpdCB3aXRoaW4gdGhlCisqIGZvcm1hdCBsZW5ndGguICBBbHRlcm5hdGl2ZWx5LCB0ZXh0IGNhbiBiZSBmb3JtYXR0ZWQKKyogc3VjaCB0aGF0IGxpbmVzIGVuZCBvbmx5IGF0IHRoZSBlbmQgb2YgcGFyYWdyYXBocy4KKyogPHA+CisqIFRoZSBmb3JtYXQgbGVuZ3RoIGlzIHNwZWNpZmllZCB3aXRoIHRoZSA8dHQ+c2V0TGluZUJvdW5kKCk8L3R0PgorKiBtZXRob2QuCisqIDxwPgorKiBNZXRob2RzIGluIHRoZSBmb3JtYXR0ZXIgd2hpY2ggaW50ZXJhY3Qgd2l0aCB0aGUgZ3JhcGhpY3MKKyogc3lzdGVtIGdlbmVyYWxseSB0YWtlIGFzIGEgcGFyYW10ZXIgYSA8dHQ+UG9pbnQ8L3R0PiBvYmplY3QKKyogd2hpY2ggcmVwcmVzZW50cyB0aGUgIm9yaWdpbiIgb2YgdGhlIHRleHQgZGlzcGxheS4gIFRoZQorKiBvcmlnaW4gcmVwcmVzZW50cyB0aGUgbG9jYXRpb24sIGluIHRoZSBncmFwaGljcyBzeXN0ZW0gdXNlZCB0byBkaXNwbGF5IHRoZSB0ZXh0LCBvZgorKiB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSB0ZXh0LgorKiA8cD4KKyogVG8gZGlzcGxheSB0aGUgdGV4dCwgY2FsbCA8dHQ+ZHJhdygpPC90dD4sIHBhc3NpbmcgdGhlCisqIGEgcmVjdGFuZ2xlIGluIHdoaWNoIHRvIGRyYXcgYXMgYSBwYXJhbWV0ZXIuICBPbmx5IGxpbmVzCisqIG9mIHRleHQgaW4gdGhlIGRyYXcgcmVjdGFuZ2xlIHdpbGwgYmUgZHJhd24uCisqIDxwPgorKiBXaGVuIHRoZSBmb3JtYXR0ZXIncyB0ZXh0IGNoYW5nZXMsIGl0IGlzIGltcG9ydGFudCB0byBmaXJzdCBjYWxsCisqIDx0dD5zdG9wQmFja2dyb3VuZEZvcm1hdHRpbmcoKTwvdHQ+IHRvIHByZXZlbnQgdGhlIEZvcm1hdHRlciBmcm9tCisqIGFjY2Vzc2luZyB0aGUgdGV4dCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQuICBBZnRlciBtb2RpZmljYXRpb25zIGFyZQorKiBjb21wbGV0ZSwKKyogY2FsbCB0aGUgPHR0PnVwZGF0ZUZvcm1hdCgpPC90dD4gbWV0aG9kIGJlZm9yZSBpbnZva2luZyBhbnkgb3RoZXIKKyogbWV0aG9kcyBvZiB0aGUgZm9ybWF0dGVyLiAgPHR0PnVwZGF0ZUZvcm1hdCgpPC90dD4gcmVmb3JtYXRzIHRoZQorKiBuZXcgdGV4dCwgZm9ybWF0dGluZyBubyBtb3JlIHRleHQgdGhhbiBpcyBuZWNlc3NhcnkuCisqIDxwPgorKiBUaGUgZm9ybWF0dGVyIHByb3ZpZGVzIHNlcnZpY2VzIGZvciByZXNwb25kaW5nIHRvIHVzZXIgaW5wdXQgZnJvbSB0aGUKKyogbW91c2UgYW5kIGtleWJvYXJkLiAgVGhlIG1ldGhvZCA8dHQ+cG9pbnRUb1RleHRPZmZzZXQoKTwvdHQ+IGNvbnZlcnRzCisqIGEgc2NyZWVuIGxvY2F0aW9uIHRvIGFuIG9mZnNldCBpbiB0aGUgdGV4dC4gIFRoZSBtZXRob2QgPHR0PnRleHRPZmZzZXRUb1BvaW50PC90dD4KKyogY29udmVydHMgYW4gb2Zmc2V0IGluIHRoZSB0ZXh0IHRvIGFuIGFycmF5IG9mIHR3byA8dHQ+UG9pbnQ8L3R0PiBvYmplY3RzLCB3aGljaCBjYW4gYmUKKyogdXNlZCB0byBkcmF3IGEgdmVydGljbGUgY2FyZXQsIGRlbm90aW5nIGFuIGluc2VydGlvbiBwb2ludC4gIDx0dD5oaWdobGlnaHRBcmVhPC90dD4KKyogYWNjZXB0cyB0d28gb2Zmc2V0cyBpbnRvIHRoZSB0ZXh0IGFzIHBhcmFtdGVycywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgPHR0PlBvbHlnb248L3R0PgorKiBvYmplY3RzIHJlcHJlc2VudGluZyBhcmVhcyB3aGVyZSB2aXN1YWwgaGlnaGxpZ2h0aW5nIHNob3VsZCBiZSBhcHBsaWVkLgorKiA8cD4KKyogRmluYWxseSwgZm9yCisqIGtleWJvYXJkIGhhbmRsaW5nLCB0aGUgPHR0PmZpbmROZXdJbnNlcnRpb25PZmZzZXQoKTwvdHQ+IG1ldGhvZCBhY2NlcHRzIGFuICJpbml0aWFsIgorKiBvZmZzZXQsIGEgInByZXZpb3VzIiBvZmZzZXQsIGFzIHdlbGwgYXMgYSBkaXJlY3Rpb24sIGFuZCByZXR1cm5zIGEgbmV3IG9mZnNldC4gIFRoZSBkaXJlY3Rpb24KKyogY2FuIGJlIHVwLCBkb3duLCBsZWZ0LCBvciByaWdodC4gIFRoZSBwcmV2aW91cyBvZmZzZXQgaXMgdGhlIGluc2VydGlvbiBwb2ludCBsb2NhdGlvbiwgYmVmb3JlCisqIHRoZSBhcnJvdyBrZXkgaXMgcHJvY2Vzc2VkLiAgVGhlIGluaXRpYWwgb2Zmc2V0IGlzIHRoZSBvZmZzZXQgd2hlcmUgYW4gdXAgb3IgZG93biBhcnJvdworKiBrZXkgc2VxdWVuY2UgYmVnYW4uICBVc2luZyB0aGUgaW5pdGlhbCBvZmZzZXQgYWxsb3dzIGZvciAiaW50ZWxsaWdlbnQiIGhhbmRsaW5nIG9mIHVwIGFuZCBkb3duCisqIGFycm93IGtleXMuCisqIDxwPgorKiBFeGFtcGxlcyBvZiB1c2luZyB0aGUgTUZvcm1hdHRlciBjbGFzcworKiBhcmUgZ2l2ZW4gaW4gdGhlIDx0dD5Bc3luY0Zvcm1hdHRlcjwvdHQ+IGNsYXNzCisqIGRvY3VtZW50YXRpb24uCisqIDxwPgorKiBAYXV0aG9yIEpvaG4gUmFsZXkKKyoKKyogQHNlZSBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTVRleHQKKyovCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNRm9ybWF0dGVyIHsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworCisgICAgcHVibGljIGFic3RyYWN0IEF0dHJpYnV0ZU1hcCBnZXREZWZhdWx0VmFsdWVzKCk7CisKKy8qKgorKiBEaXNwbGF5IHRleHQgaW4gZHJhd0FyZWEsIHdpdGggaGlnaGxpZ2h0aW5nLgorKiBEb2VzIG5vdCByZWZvcm1hdCB0ZXh0CisqIEBwYXJhbSBnIHRoZSBHcmFwaGljcyBvYmplY3QgaW4gd2hpY2ggdG8gZHJhdworKiBAcGFyYW0gZHJhd0FyZWEgdGhlIHJlY3RhbmdsZSwgaW4gZydzIGNvb3JkaW5hdGUgc3lzdGVtLCBpbiB3aGljaCB0byBkcmF3CisqIEBwYXJhbSBvcmlnaW4gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgdGV4dCwgaW4gZydzIGNvb3JkaW5hdGUgc3lzdGVtCisqIEBwYXJhbSBzZWxTdGFydCB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBiZWdpbnM7ICBwYXNzIDx0dD5udWxsPC90dD4gaWYgbm8gc2VsZWN0aW9uCisqIEBwYXJhbSBzZWxTdG9wIHRoZSBvZmZzZXQgd2hlcmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGVuZHMKKyogQHBhcmFtIGhpZ2hsaWdodCB0aGUgY29sb3Igb2YgdGhlIGhpZ2hsaWdodGluZworKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBkcmF3KEdyYXBoaWNzIGcsIFJlY3RhbmdsZSBkcmF3QXJlYSwgUG9pbnQgb3JpZ2luLAorICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdGFydCwgVGV4dE9mZnNldCBzZWxTdG9wLCBDb2xvciBoaWdobGlnaHQpOworCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZHJhdyhHcmFwaGljcyBnLCBSZWN0YW5nbGUgZHJhd0FyZWEsIFBvaW50IG9yaWdpbik7CisKKy8qKgorKiBTcGVjaWZ5IHdoZXRoZXIgdG8gd3JhcCBsaW5lIGF0IHRoZSBlZGdlIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmVhLgorKiA8dHQ+dHJ1ZTwvdHQ+IG1lYW5zIHdyYXAgbGluZXM7ICA8dHQ+ZmFsc2U8L3R0PiBtZWFucyB0byBicmVhayBsaW5lcworKiBvbmx5IHdoZW4gYW4gZW5kLW9mLWxpbmUgY2hhcmFjdGVyIGlzIHJlYWNoZWQuCisqIEBwYXJhbSB3cmFwIDx0dD50cnVlPC90dD4gdG8gYnJlYWsgbGluZXMgYXQgdGhlIGVkZ2Ugb2YgdGhlIGRlc3RpbmF0aW9uCisqIGFyZWE7ICA8dHQ+ZmFsc2U8L3R0PiBvdGhlcndpc2UuCisqLworCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0V3JhcChib29sZWFuIHdyYXApOworCisvKioKKyogUmV0dXJuIHdoZXRoZXIgdGV4dCBpcyB3cmFwcGVkIGF0IHRoZSBlZGdlIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmVhLgorKiBAc2VlICNzZXRXcmFwCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHdyYXAoKTsKKworLyoqCisqIFNwZWNpZnkgdGhlIG51bWJlciBvZiBwaXhlbHMgYWxvbmcgdGhlICJsaW5lIGRpbWVuc2lvbiIuCisqIExpbmVzIGFyZSBmb3JtYXR0ZWQgdG8gZml0IHdpdGhpbiB0aGUgbGluZSBkaW1lbnNpb24uICBUaGUKKyogbGluZSBkaW1lbnNpb24gaW4gUm9tYW4gc2NyaXB0IGlzIGhvcml6b250YWwuCisqIEBwYXJhbSBsaW5lV2lkdGggdGhlIGxlbmd0aCwgaW4gcGl4ZWxzLCB0byB3aGljaCBsaW5lcyB3aWxsIGJlIGZvcm1hdHRlZAorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRMaW5lQm91bmQoaW50IGxpbmVCb3VuZCk7CisKKy8qKgorKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwaXhlbHMgYWxvbmcgdGhlIGxpbmUgZGltZW5zaW9uLgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGxpbmVCb3VuZCgpOworICAgIAorLyoqCisqIEZvcm1hdCB0ZXh0IGRvd24gdG8gZ2l2ZW4gaGVpZ2h0LgorKiBAcGFyYW0gaGVpZ2h0IHRoZSBoZWlnaHQgdG8gd2hpY2ggdGV4dCB3aWxsIGJlIGZvcm1hdHRlZAorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmb3JtYXRUb0hlaWdodChpbnQgaGVpZ2h0KTsKKworLyoqCisqIFJlZm9ybWF0IHRleHQgYWZ0ZXIgYSBjaGFuZ2UuCisqIEFmdGVyIHRoZSBmb3JtYXR0ZXIncyB0ZXh0IGNoYW5nZXMsIGNhbGwgdGhpcyBtZXRob2QgdG8gcmVmb3JtYXQuICBEb2VzCisqIG5vdCByZWRyYXcuCisqIEBwYXJhbSBhZlN0YXJ0IHRoZSBvZmZzZXQgaW50byB0aGUgdGV4dCB3aGVyZSBtb2RpZmljYXRpb24gYmVnYW47ICBpZSwgdGhlCisqIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdGV4dCB3aGljaCBpcyAiZGlmZmVyZW50IiBpbiBzb21lIHdheS4gIERvZXMgbm90CisqIGhhdmUgdG8gYmUgbm9ubmVnYXRpdmUuCisqIEBwYXJhbSBhZkxlbmd0aCB0aGUgbnVtYmVyIG9mIG5ldyBvciBjaGFuZ2VkIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQuICBTaG91bGQgbmV2ZXIKKyogYmUgbGVzcyB0aGFuIDAuCisqIEBwYXJhbSB2aWV3UmVjdCB0aGUgUmVjdGFuZ2xlIGluIHdoaWNoIHRoZSB0ZXh0IHdpbGwgYmUgZGlzcGxheWVkLiAgVGhpcyBpcyBuZWVkZWQgZm9yCisqIHJldHVybmluZyB0aGUgImRhbWFnZWQiIGFyZWEgLSB0aGUgYXJlYSBvZiB0aGUgc2NyZWVuIGluIHdoaWNoIHRoZSB0ZXh0IG11c3QgYmUgcmVkcmF3bi4KKyogQHBhcmFtIG9yaWdpbiB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSB0ZXh0LCBpbiB0aGUgZGlzcGxheSdzIGNvb3JkaW5hdGUgc3lzdGVtCisqIEByZXR1cm4gYSA8dHQ+UmVjdGFuZ2xlPC90dD4gd2hpY2ggc3BlY2lmaWVzIHRoZSBhcmVhIGluIHdoaWNoIHRleHQgbXVzdCBiZQorKiByZWRyYXduIHRvIHJlZmxlY3QgdGhlIGNoYW5nZSB0byB0aGUgdGV4dC4KKyovCisgICAgcHVibGljIGFic3RyYWN0IFJlY3RhbmdsZSB1cGRhdGVGb3JtYXQoaW50IGFmU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFmTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZSB2aWV3UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludCBvcmlnaW4pOworCisKKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IG1pblkoKTsKKyAgICAKKy8qKgorICogUmV0dXJuIHRoZSBtYXhpbXVtIHZlcnRpY2FsIGNvb3JkaW5hdGUgb2YgdGhlIGRvY3VtZW50IGFyZWEuCisgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IG1heFkoKTsKKworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgbWluWCgpOworCisvKioKKyAqIFJldHVybiB0aGUgbWF4aW11bSBob3Jpem9udGFsIGNvb3JkaW5hdGUgb2YgdGhlIGRvY3VtZW50IGFyZWEuCisgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IG1heFgoKTsKKworLyoqCisqIFJldHVybiB0aGUgYWN0dWFsIHBpeGVsIGxlbmd0aCBvZiB0aGUgdGV4dCB3aGljaCBoYXMgYmVlbiBmb3JtYXR0ZWQuCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZm9ybWF0dGVkSGVpZ2h0KCk7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IGVVcCA9IC0xMCwgZURvd24gPSAxMCwgZUxlZnQgPSAtMSwgZVJpZ2h0ID0gMTsKKworLyoqCisqIEdpdmVuIGEgc2NyZWVuIGxvY2F0aW9uIHAsIHJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIHRleHQgbmVhcmVzdCB0byBwLgorKgorKiBUaGUgb2Zmc2V0IG1heSBvciBtYXkgbm90IGluY2x1ZGUgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgYSBsaW5lLCBkZXRlcm1pbmVkIGJ5IGFuY2hvciBhbmQgaW5maW5pdGVNb2RlLgorKiBUaGUgbmV3bGluZSBpcyBub3QgaW5jbHVkZWQgaWYgaW5maW5pdGVNb2RlIGlzIHRydWUgYW5kIHRoZSBhbmNob3IgaXMgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgbmV3bGluZS4KKyoKKyogQHBhcmFtIHJlc3VsdCBUZXh0T2Zmc2V0IHRvIG1vZGlmeSBhbmQgcmV0dXJuLiAgSWYgbnVsbCwgb25lIHdpbGwgYmUgYWxsb2NhdGVkLCBtb2RpZmllZCwgYW5kIHJldHVybmVkLgorKiBAcGFyYW0gcHggdGhlIHggY29tcG9uZW50IG9mIHRoZSBwb2ludC4KKyogQHBhcmFtIHB5IHRoZSB5IGNvbXBvbmVudCBvZiB0aGUgcG9pbnQuCisqIEBwYXJhbSBvcmlnaW4gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgdGV4dCwgaW4gdGhlIGRpc3BsYXkncyBjb29yZGluYXRlIHN5c3RlbQorKiBAcGFyYW0gYW5jaG9yIHRoZSBwcmV2aW91cyBvZmZzZXQuICBNYXkgYmUgbnVsbC4gIFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgbmV3bGluZXMgYXJlIGluY2x1ZGVkLgorKiBAcGFyYW0gaW5maW5pdGVNb2RlIGlmIHRydWUsIHRyZWF0IG5ld2xpbmVzIGF0IGVuZCBvZiBsaW5lIGFzIGhhdmluZyBpbmZpbml0ZSB3aWR0aC4KKyovCisgICAgcHVibGljIGFic3RyYWN0IFRleHRPZmZzZXQgcG9pbnRUb1RleHRPZmZzZXQoVGV4dE9mZnNldCByZXN1bHQsIGludCBweCwgaW50IHB5LCBQb2ludCBvcmlnaW4sIFRleHRPZmZzZXQgYW5jaG9yLCBib29sZWFuIGluZmluaXRlTW9kZSk7CisKKy8qKgorKiBHaXZlbiBhbiBvZmZzZXQsIHJldHVybiB0aGUgUmVjdGFuZ2xlIGJvdW5kaW5nIHRoZSBjYXJldCBhdCB0aGUgb2Zmc2V0LgorKiBAcGFyYW0gb2Zmc2V0IGFuIG9mZnNldCBpbnRvIHRoZSB0ZXh0CisqIEBwYXJhbSBvcmlnaW4gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgdGV4dCwgaW4gdGhlIGRpc3BsYXkncyBjb29yZGluYXRlIHN5c3RlbQorKiBAcmV0dXJuIGEgUmVjdGFuZ2xlIGJvdW5kaW5nIHRoZSBjYXJldC4KKyovCisgICAgcHVibGljIGFic3RyYWN0IFJlY3RhbmdsZSBnZXRDYXJldFJlY3QoVGV4dE9mZnNldCBvZmZzZXQsIFBvaW50IG9yaWdpbik7CisKKy8qKgorKiBEcmF3IHRoZSBjYXJldChzKSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG9mZnNldCBpbnRvIHRoZSBnaXZlbiBHcmFwaGljcy4KKyogQHBhcmFtIGcgdGhlIEdyYXBoaWNzIHRvIGRyYXcgaW50bworKiBAcGFyYW0gb2Zmc2V0IHRoZSBvZmZzZXQgaW4gdGhlIHRleHQgZm9yIHdoaWNoIHRoZSBjYXJldCBpcyBkcmF3bgorKiBAcGFyYW0gb3JpZ2luIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIHRleHQsIGluIHRoZSBkaXNwbGF5J3MgY29vcmRpbmF0ZSBzeXN0ZW0KKyogQHBhcmFtIHN0cm9uZ0NhcmV0Q29sb3IgdGhlIGNvbG9yIG9mIHRoZSBzdHJvbmcgY2FyZXQKKyogQHBhcmFtIHdlYWtDYXJldENvbG9yIHRoZSBjb2xvciBvZiB0aGUgd2VhayBjYXJldCAoaWYgYW55KQorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBkcmF3Q2FyZXQoR3JhcGhpY3MgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50IG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3Igc3Ryb25nQ2FyZXRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3Igd2Vha0NhcmV0Q29sb3IpOworCisgICAgLyoqCisgICAgICogQHNlZSAjZ2V0Qm91bmRpbmdSZWN0CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIExPT1NFID0gZmFsc2U7CisgICAgLyoqCisgICAgICogQHNlZSAjZ2V0Qm91bmRpbmdSZWN0CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIFRJR0hUID0gdHJ1ZTsKKworLyoqCisqIEdpdmVuIHR3byBvZmZzZXRzIGluIHRoZSB0ZXh0LCByZXR1cm4gYSByZWN0YW5nbGUgd2hpY2ggZW5jbG9zZXMgdGhlIGxpbmVzIGNvbnRhaW5pbmcgdGhlIG9mZnNldHMuCisqIE9mZnNldHMgZG8gbm90IG5lZWQgdG8gYmUgb3JkZXJlZCBvciBub25uZWdhdGl2ZS4KKyogQHBhcmFtIG9mZnNldDEsb2Zmc2V0MiBvZmZzZXRzIGludG8gdGhlIHRleHQKKyogQHBhcmFtIG9yaWdpbiB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSB0ZXh0LCBpbiB0aGUgZGlzcGxheSdzIGNvb3JkaW5hdGUgc3lzdGVtCisqIEBwYXJhbSB0aWdodCBpZiBlcXVhbCB0byBUSUdIVCwgdGhlIGJvdW5kcyBpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZS4gIElmIExPT1NFLCB0aGUgd2lkdGgKKyogb2YgdGhlIGJvdW5kcyBpcyBhbGxvd2VkIHRvIGJlIHdpZGVyIHRoYW4gbmVjZXNhcnkuICBMb29zZSBib3VuZHMgYXJlIGVhc2llciB0byBjb21wdXRlLgorKiBAcmV0dXJuIGEgPHR0PlJlY3RhbmdsZTwvdHQ+LCByZWxhdGl2ZSB0byA8dHQ+b3JpZ2luPC90dD4sIHdoaWNoIGVuY2xvc2VzIHRoZSBsaW5lcyBjb250YWluaW5nIHRoZSBvZmZzZXRzCisqLworICAgIHB1YmxpYyBhYnN0cmFjdCBSZWN0YW5nbGUgZ2V0Qm91bmRpbmdSZWN0KFRleHRPZmZzZXQgb2Zmc2V0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IG9mZnNldDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50IG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHRpZ2h0KTsKKworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGdldEJvdW5kaW5nUmVjdChSZWN0YW5nbGUgYm91bmRpbmdSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IG9mZnNldDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgb2Zmc2V0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnQgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHRpZ2h0KTsKKworLyoqCisqIENvbXB1dGUgdGhlIG9mZnNldCByZXN1bHRpbmcgZnJvbSBtb3ZpbmcgZnJvbSBhIHByZXZpb3VzIG9mZnNldCBpbiBkaXJlY3Rpb24gZGlyLgorKiBGb3IgYXJyb3cga2V5cy4KKyogQHBhcmFtIHByZXZpb3VzT2Zmc2V0IHRoZSBpbnNlcnRpb24gb2Zmc2V0IHByaW9yIHRvIHRoZSBhcnJvdyBrZXkgcHJlc3MKKyogQHBhcmFtIGRpcmVjdGlvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBhcnJvdyBrZXkgKGVVcCwgZURvd24sIGVMZWZ0LCBvciBlUmlnaHQpCisqIEByZXR1cm4gbmV3IG9mZnNldCBiYXNlZCBvbiBkaXJlY3Rpb24gYW5kIHByZXZpb3VzIG9mZnNldC4KKyovCisgICAgcHVibGljIGFic3RyYWN0IFRleHRPZmZzZXQgZmluZEluc2VydGlvbk9mZnNldChUZXh0T2Zmc2V0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgcHJldmlvdXNPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBkaXJlY3Rpb24pOworCisvKioKKyogQ29tcHV0ZSB0aGUgb2Zmc2V0IHJlc3VsdGluZyBmcm9tIG1vdmluZyBmcm9tIGEgcHJldmlvdXMgb2Zmc2V0LCBzdGFydGluZyBhdCBhbiBvcmlnaW5hbCBvZmZzZXQsIGluIGRpcmVjdGlvbiBkaXIuCisqIEZvciBhcnJvdyBrZXlzLiAgVXNlIHRoaXMgZm9yICJzbWFydCIgdXAvZG93biBrZXlzLgorKiBAcGFyYW0gcmVzdWx0IFRleHRPZmZzZXQgdG8gbW9kaWZ5IGFuZCByZXR1cm4uICBJZiBudWxsLCBhIG5ldyBUZXh0T2Zmc2V0IGlzIGNyZWF0ZWQsIG1vZGlmaWVkLCBhbmQgcmV0dXJuZWQuCisqIEBwYXJhbSBpbml0aWFsT2Zmc2V0IFRoZSBvZmZzZXQgYXQgd2hpY2ggYW4gdXAtZG93biBhcnJvdyBrZXkgc2VxdWVuY2UgYmVnYW4uCisqIEBwYXJhbSBwcmV2aW91c09mZnNldCBUaGUgaW5zZXJ0aW9uIG9mZnNldCBwcmlvciB0byB0aGUgYXJyb3cga2V5IHByZXNzLgorKiBAcGFyYW0gZGlyZWN0aW9uIFRoZSBkaXJlY3Rpb24gb2YgdGhlIGFycm93IGtleSAoZVVwLCBlRG93biwgZUxlZnQsIG9yIGVSaWdodCkKKyogQHJldHVybiBuZXcgb2Zmc2V0IGJhc2VkIG9uIGRpcmVjdGlvbiBhbmQgcHJldmlvdXMgb2Zmc2V0KHMpLgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgVGV4dE9mZnNldCBmaW5kTmV3SW5zZXJ0aW9uT2Zmc2V0KFRleHRPZmZzZXQgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBpbml0aWFsT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBwcmV2aW91c09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGRpcmVjdGlvbik7CisKKy8qKgorKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGdpdmVuIGNoYXJhY3RlciBpbmRleC4KKyogVGhpcyBtZXRob2QgaGFzIGNvbXBsaWNhdGVkIHNlbWFudGljcywgYXJpc2luZyBmcm9tIG5vdCBrbm93aW5nIAorKiB3aGljaCBzaWRlIG9mIHRoZSBpbmRleCB0byBjaGVjay4gIFRoZSBpbmRleCB3aWxsIGJlIGdpdmVuIGFuCisqIGltcGxpY2l0IEFGVEVSIGJpYXMsIHVubGVzcyB0aGUgaW5kZXggaXMgdGhlIGxhc3QgaW5kZXggaW4gdGhlIHRleHQsCisqIHRoZSB0ZXh0IGxlbmd0aCBpcyBub24temVybywgYW5kIHRoZXJlIGlzIG5vdCBhIHBhcmFncmFwaCBzZXBhcmF0b3IKKyogYXQgdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyovCisgICAgcHVibGljIGFic3RyYWN0IGludCBsaW5lQ29udGFpbmluZyhpbnQgaW5kZXgpOworICAgIAorLyoqCisqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgZ2l2ZW4gb2Zmc2V0LgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGxpbmVDb250YWluaW5nKFRleHRPZmZzZXQgb2Zmc2V0KTsKKworLyoqCisqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpbmVzLgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldExpbmVDb3VudCgpOworCisvKioKKyogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIHRoZSBnaXZlbiBsaW5lLgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGxpbmVSYW5nZUxvdyhpbnQgbGluZU51bWJlcik7CisKKy8qKgorKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBnaXZlbiBsaW5lLgorKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGxpbmVSYW5nZUxpbWl0KGludCBsaW5lTnVtYmVyKTsKKworLyoqCisqIFRlbGxzIHRoZSBmb3JtYXR0ZXIgdG8gc3RvcCBhY2Nlc3NpbmcgdGhlIHRleHQgdW50aWwgdXBkYXRlRm9ybWF0IGlzIGNhbGxlZC4KKyovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc3RvcEJhY2tncm91bmRGb3JtYXR0aW5nKCk7CisKKy8qKgorKiBSZXR1cm4gdGhlIGxpbmUgbnVtYmVyIGF0IHRoZSBnaXZlbiBncmFwaGljIGhlaWdodC4gIElmIGhlaWdodCBpcyBncmVhdGVyIHRoYW4KKyogdGhlIHRleHQgaGVpZ2h0LCBtYXhMaW5lTnVtYmVyICsgMSBpcyByZXR1cm5lZC4KKyovCisgICAgcHVibGljIGFic3RyYWN0IGludCBsaW5lQXRIZWlnaHQoaW50IGhlaWdodCk7CisKKy8qKgorKiBSZXR1cm4gdGhlIGdyYXBoaWMgaGVpZ2h0IHdoZXJlIHRoZSBnaXZlbiBsaW5lIGJlZ2lucy4gIElmIHRoZSBsaW5lTnVtYmVyIGlzCisqIG1heExpbmVOdW1iZXIgdGhlIGVudGlyZSB0ZXh0IGhlaWdodCBpcyByZXR1cm5lZC4KKyovCisgICAgcHVibGljIGFic3RyYWN0IGludCBsaW5lR3JhcGhpY1N0YXJ0KGludCBsaW5lTnVtYmVyKTsKKworLyoqCisqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBsaW5lIGlzIGxlZnQtdG8tcmlnaHQuCisqIEBwYXJhbSBsaW5lTnVtYmVyIGEgdmFsaWQgbGluZQorKiBAcmV0dXJuIHRydWUgaWYgbGluZU51bWJlciBpcyBsZWZ0LXRvLXJpZ2h0CisqLworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGxpbmVJc0xlZnRUb1JpZ2h0KGludCBsaW5lTnVtYmVyKTsKKworLyoqCisqIFJldHVybiBhIG5ldyA8dHQ+TUZvcm1hdHRlcjwvdHQ+LgorKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBmb3JtYXQKKyogQHBhcmFtIGRlZmF1bHRWYWx1ZXMgdmFsdWVzIHRvIHVzZSB3aGVuIGNlcnRhaW4gYXR0cmlidXRlcyBhcmUgbm90IHNwZWNpZmllZC4gCisqICAgIDx0dD5kZWZhdWx0VmFsdWVzPC90dD4gbXVzdCBjb250YWluIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorKiAgICA8dHQ+RkFNSUxZPC90dD4sIDx0dD5XRUlHSFQ8L3R0PiwgPHR0PlBPU1RVUkU8L3R0PiwgPHR0PlNJWkU8L3R0PiwgPHR0PlNVUEVSU0NSSVBUPC90dD4sIAorKiAgICA8dHQ+Rk9SRUdST1VORDwvdHQ+LCA8dHQ+VU5ERVJMSU5FPC90dD4sIDx0dD5TVFJJS0VUSFJPVUdIPC90dD4sCisqICAgIDx0dD5FWFRSQV9MSU5FX1NQQUNJTkc8L3R0PiwgPHR0PkZJUlNUX0xJTkVfSU5ERU5UPC90dD4sPHR0Pk1JTl9MSU5FX1NQQUNJTkc8L3R0PiwKKyogICAgPHR0PkxJTkVfRkxVU0g8L3R0PiwgPHR0PkxFQURJTkdfTUFSR0lOPC90dD4sIDx0dD5UUkFJTElOR19NQVJHSU48L3R0PiwgPHR0PlRBQl9SVUxFUjwvdHQ+CisqIEBwYXJhbSBsaW5lQm91bmQgbGVuZ3RoIHRvIHdoaWNoIGxpbmVzIGFyZSBmb3JtYXR0ZWQKKyogQHBhcmFtIHdyYXAgPHR0PnRydWU8L3R0PiBpZiB0ZXh0IHNob3VsZCBiZSAibGluZSB3cmFwcGVkIiAoZm9ybWF0dGVkIHRvIGZpdCBkZXN0aW5hdGlvbiBhcmVhKQorKi8KKyAgICBwdWJsaWMgc3RhdGljIE1Gb3JtYXR0ZXIgY3JlYXRlRm9ybWF0dGVyKE1Db25zdFRleHQgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBkZWZhdWx0VmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVCb3VuZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHdyYXAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3MgZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHJldHVybiBuZXcgQXN5bmNGb3JtYXR0ZXIodGV4dCwgZGVmYXVsdFZhbHVlcywgbGluZUJvdW5kLCB3cmFwLCBnKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L01UZXh0SXRlcmF0b3IuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvTVRleHRJdGVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzZmJiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L01UZXh0SXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogTVRleHRJdGVyYXRvci5qYXZhLHYgJCAkUmV2aXNpb246IDEuNCAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjQzICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCisvLyBSZXF1aXJlcyBKYXZhMgorcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRmb3JtYXQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKKy8vLypKREsxMklNUE9SVFMKK2ltcG9ydCBqYXZhLnRleHQuQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IuQXR0cmlidXRlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKy8vSkRLMTJJTVBPUlRTKi8KKworLypKREsxMUlNUE9SVFMKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3I7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yLkF0dHJpYnV0ZTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5NYXA7CitKREsxMUlNUE9SVFMqLworCitwdWJsaWMgZmluYWwgY2xhc3MgTVRleHRJdGVyYXRvciBpbXBsZW1lbnRzIEF0dHJpYnV0ZWRDaGFyYWN0ZXJJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvbmVhYmxlIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLy8gbWVtb3J5IGxlYWssIHNpbmNlIHRoaXMgY2FjaGUgaXMgbmV2ZXIgZmx1c2hlZAorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTWF0Y2hlciB7CisgICAgICAgIAorICAgICAgICBib29sZWFuIG1hdGNoZXMoTWFwIGxocywgTWFwIHJocywgT2JqZWN0IHF1ZXJ5KSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9iamVjdCBsaHNWYWwgPSBsaHMuZ2V0KHF1ZXJ5KTsKKyAgICAgICAgICAgIE9iamVjdCByaHNWYWwgPSByaHMuZ2V0KHF1ZXJ5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxoc1ZhbCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJoc1ZhbCA9PSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxoc1ZhbC5lcXVhbHMocmhzVmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXRjaGVyIEFUVFJfTUFUQ0hFUiA9IG5ldyBNYXRjaGVyKCk7CisgICAgCisgICAgLy8gTm90IHF1aXRlIG9wdGltYWwuICBDb3VsZCBoYXZlIGEgbWF0Y2hlciB0aGF0IHdvdWxkIGRlY29tcG9zZQorICAgIC8vIGEgc2V0IG9uY2UgZm9yIHJlcGVhdGVkIHF1ZXJpZXMuICBPZiBjb3Vyc2UgdGhhdCB3b3VsZCByZXF1aXJlCisgICAgLy8gYWxsb2NhdGlvbi4uLgorLy8vKkpESzEySU1QT1JUUworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hdGNoZXIgU0VUX01BVENIRVIgPSBuZXcgTWF0Y2hlcigpIHsKKyAgICAgICAgCisgICAgICAgIGJvb2xlYW4gbWF0Y2hlcyhNYXAgbGhzLCBNYXAgcmhzLCBPYmplY3QgcXVlcnkpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTm90IHVzaW5nIEl0ZXJhdG9yIHRvIHNpbXBsaWZ5IDEuMSBwb3J0LgorICAgICAgICAgICAgT2JqZWN0W10gZWxlbWVudHMgPSAoKFNldClxdWVyeSkudG9BcnJheSgpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN1cGVyLm1hdGNoZXMobGhzLCByaHMsIGVsZW1lbnRzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9OworLy9KREsxMklNUE9SVFMqLworICAgIAorICAgIHByaXZhdGUgZmluYWwgY2xhc3MgU3R5bGVDYWNoZSB7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgZlJ1blN0YXJ0ID0gMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgZlJ1bkxpbWl0ID0gLTE7CisgICAgICAgIHByaXZhdGUgaW50IGZSYW5nZVN0YXJ0OworICAgICAgICBwcml2YXRlIGludCBmUmFuZ2VMaW1pdDsKKyAgICAgICAgcHJpdmF0ZSBBdHRyaWJ1dGVNYXAgZlN0eWxlOworCisgICAgICAgIFN0eWxlQ2FjaGUoTUNvbnN0VGV4dCB0ZXh0LCBpbnQgc3RhcnQsIGludCBsaW1pdCkgeworICAgICAgICAgICAgZlRleHQgPSB0ZXh0OworICAgICAgICAgICAgZlJhbmdlU3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgIGZSYW5nZUxpbWl0ID0gbGltaXQ7CisgICAgICAgICAgICB1cGRhdGUoc3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZShpbnQgcG9zKSB7CisgICAgICAgICAgICBpZiAocG9zIDwgZlJ1blN0YXJ0IHx8IHBvcyA+PSBmUnVuTGltaXQpIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgc3R5bGUgPSBBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUDsKKyAgICAgICAgICAgICAgICBpZiAocG9zIDwgZlJhbmdlU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZlJ1bkxpbWl0ID0gZlJhbmdlU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIGZSdW5TdGFydCA9IEludGVnZXIuTUlOX1ZBTFVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwb3MgPiBmUmFuZ2VMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICBmUnVuU3RhcnQgPSBmUmFuZ2VMaW1pdDsKKyAgICAgICAgICAgICAgICAgICAgZlJ1bkxpbWl0ID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmUnVuU3RhcnQgPSBNYXRoLm1heChmUmFuZ2VTdGFydCwgZlRleHQuY2hhcmFjdGVyU3R5bGVTdGFydChwb3MpKTsKKyAgICAgICAgICAgICAgICAgICAgZlJ1blN0YXJ0ID0gTWF0aC5tYXgoZlJ1blN0YXJ0LCBmVGV4dC5wYXJhZ3JhcGhTdGFydChwb3MpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZSdW5MaW1pdCA9IE1hdGgubWluKGZSYW5nZUxpbWl0LCBmVGV4dC5jaGFyYWN0ZXJTdHlsZUxpbWl0KHBvcykpOworICAgICAgICAgICAgICAgICAgICBmUnVuTGltaXQgPSBNYXRoLm1pbihmUnVuTGltaXQsIGZUZXh0LnBhcmFncmFwaExpbWl0KHBvcykpOworICAgICAgICAgICAgICAgICAgICBpZiAoZlJ1blN0YXJ0IDwgZlJ1bkxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IGZUZXh0LnBhcmFncmFwaFN0eWxlQXQocG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gc3R5bGUuYWRkQXR0cmlidXRlcyhmVGV4dC5jaGFyYWN0ZXJTdHlsZUF0KHBvcykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZTdHlsZSA9IGZGb250UmVzb2x2ZXIuYXBwbHlGb250KHN0eWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludCBnZXRSdW5TdGFydChpbnQgcG9zKSB7CisgICAgICAgICAgICB1cGRhdGUocG9zKTsKKyAgICAgICAgICAgIHJldHVybiBmUnVuU3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZ2V0UnVuTGltaXQoaW50IHBvcykgeworICAgICAgICAgICAgdXBkYXRlKHBvcyk7CisgICAgICAgICAgICByZXR1cm4gZlJ1bkxpbWl0OworICAgICAgICB9CisKKyAgICAgICAgTWFwIGdldFN0eWxlKGludCBwb3MpIHsKKyAgICAgICAgICAgIHVwZGF0ZShwb3MpOworICAgICAgICAgICAgcmV0dXJuIGZTdHlsZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgTUNvbnN0VGV4dCBmVGV4dDsKKyAgICBwcml2YXRlIENoYXJhY3Rlckl0ZXJhdG9yIGZDaGFySXRlcjsKKyAgICBwcml2YXRlIEZvbnRSZXNvbHZlciBmRm9udFJlc29sdmVyOworICAgIAorICAgIHByaXZhdGUgU3R5bGVDYWNoZSBmU3R5bGVDYWNoZTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiBNVGV4dEl0ZXJhdG9yIG92ZXIgdGhlIHJhbmdlIFtzdGFydCwgbGltaXQpLgorICAgICAqLworICAgIHB1YmxpYyBNVGV4dEl0ZXJhdG9yKE1Db25zdFRleHQgdGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFJlc29sdmVyIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0KSB7CisKKyAgICAgICAgZlRleHQgPSB0ZXh0OworICAgICAgICBmRm9udFJlc29sdmVyID0gcmVzb2x2ZXI7CisgICAgICAgIGZDaGFySXRlciA9IHRleHQuY3JlYXRlQ2hhcmFjdGVySXRlcmF0b3Ioc3RhcnQsIGxpbWl0KTsKKworICAgICAgICBmU3R5bGVDYWNoZSA9IG5ldyBTdHlsZUNhY2hlKHRleHQsIHN0YXJ0LCBsaW1pdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcG9zaXRpb24gdG8gZ2V0QmVnaW5JbmRleCgpIGFuZCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIgYXQgdGhhdAorICAgICAqIHBvc2l0aW9uLgorICAgICAqIEByZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdGV4dCwgb3IgRE9ORSBpZiB0aGUgdGV4dCBpcyBlbXB0eQorICAgICAqIEBzZWUgI2dldEJlZ2luSW5kZXgKKyAgICAgKi8KKyAgICBwdWJsaWMgY2hhciBmaXJzdCgpIHsKKyAgICAgICAgcmV0dXJuIGZDaGFySXRlci5maXJzdCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIHRvIGdldEVuZEluZGV4KCktMSAoZ2V0RW5kSW5kZXgoKSBpZiB0aGUgdGV4dCBpcyBlbXB0eSkKKyAgICAgKiBhbmQgcmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHRoYXQgcG9zaXRpb24uCisgICAgICogQHJldHVybiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQsIG9yIERPTkUgaWYgdGhlIHRleHQgaXMgZW1wdHkKKyAgICAgKiBAc2VlICNnZXRFbmRJbmRleAorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGxhc3QoKSB7CisgICAgICAgIHJldHVybiBmQ2hhckl0ZXIubGFzdCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGNoYXJhY3RlciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgZ2V0SW5kZXgoKSkuCisgICAgICogQHJldHVybiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9yIERPTkUgaWYgdGhlIGN1cnJlbnQKKyAgICAgKiBwb3NpdGlvbiBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyAgICAgKiBAc2VlICNnZXRJbmRleAorICAgICAqLworICAgIHB1YmxpYyBjaGFyIGN1cnJlbnQoKSB7CisgICAgICAgIHJldHVybiBmQ2hhckl0ZXIuY3VycmVudCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluY3JlbWVudHMgdGhlIGl0ZXJhdG9yJ3MgaW5kZXggYnkgb25lIGFuZCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIKKyAgICAgKiBhdCB0aGUgbmV3IGluZGV4LiAgSWYgdGhlIHJlc3VsdGluZyBpbmRleCBpcyBncmVhdGVyIG9yIGVxdWFsCisgICAgICogdG8gZ2V0RW5kSW5kZXgoKSwgdGhlIGN1cnJlbnQgaW5kZXggaXMgcmVzZXQgdG8gZ2V0RW5kSW5kZXgoKSBhbmQKKyAgICAgKiBhIHZhbHVlIG9mIERPTkUgaXMgcmV0dXJuZWQuCisgICAgICogQHJldHVybiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBuZXcgcG9zaXRpb24gb3IgRE9ORSBpZiB0aGUgbmV3CisgICAgICogcG9zaXRpb24gaXMgb2ZmIHRoZSBlbmQgb2YgdGhlIHRleHQgcmFuZ2UuCisgICAgICovCisgICAgcHVibGljIGNoYXIgbmV4dCgpIHsKKyAgICAgICAgcmV0dXJuIGZDaGFySXRlci5uZXh0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjcmVtZW50cyB0aGUgaXRlcmF0b3IncyBpbmRleCBieSBvbmUgYW5kIHJldHVybnMgdGhlIGNoYXJhY3RlcgorICAgICAqIGF0IHRoZSBuZXcgaW5kZXguIElmIHRoZSBjdXJyZW50IGluZGV4IGlzIGdldEJlZ2luSW5kZXgoKSwgdGhlIGluZGV4CisgICAgICogcmVtYWlucyBhdCBnZXRCZWdpbkluZGV4KCkgYW5kIGEgdmFsdWUgb2YgRE9ORSBpcyByZXR1cm5lZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIG5ldyBwb3NpdGlvbiBvciBET05FIGlmIHRoZSBjdXJyZW50CisgICAgICogcG9zaXRpb24gaXMgZXF1YWwgdG8gZ2V0QmVnaW5JbmRleCgpLgorICAgICAqLworICAgIHB1YmxpYyBjaGFyIHByZXZpb3VzKCkgeworICAgICAgICByZXR1cm4gZkNoYXJJdGVyLnByZXZpb3VzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcG9zaXRpb24gdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGUgdGV4dCBhbmQgcmV0dXJucyB0aGF0CisgICAgICogY2hhcmFjdGVyLgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSB0ZXh0LiAgVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20KKyAgICAgKiBnZXRCZWdpbkluZGV4KCkgdG8gZ2V0RW5kSW5kZXgoKS4gIEFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpcyB0aHJvd24KKyAgICAgKiBpZiBhbiBpbnZhbGlkIHZhbHVlIGlzIHN1cHBsaWVkLgorICAgICAqIEByZXR1cm4gdGhlIGNoYXJhY3RlciBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIG9yIERPTkUgaWYgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpcyBlcXVhbCB0byBnZXRFbmRJbmRleCgpCisgICAgICovCisgICAgcHVibGljIGNoYXIgc2V0SW5kZXgoaW50IHBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiBmQ2hhckl0ZXIuc2V0SW5kZXgocG9zaXRpb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0YXJ0IGluZGV4IG9mIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gdGhlIGluZGV4IGF0IHdoaWNoIHRoZSB0ZXh0IGJlZ2lucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEJlZ2luSW5kZXgoKSB7CisgICAgICAgIHJldHVybiBmQ2hhckl0ZXIuZ2V0QmVnaW5JbmRleCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGVuZCBpbmRleCBvZiB0aGUgdGV4dC4gIFRoaXMgaW5kZXggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdAorICAgICAqIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyAgICAgKiBAcmV0dXJuIHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEVuZEluZGV4KCkgeworICAgICAgICByZXR1cm4gZkNoYXJJdGVyLmdldEVuZEluZGV4KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBpbmRleC4KKyAgICAgKiBAcmV0dXJuIHRoZSBjdXJyZW50IGluZGV4LgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKSB7CisgICAgICAgIHJldHVybiBmQ2hhckl0ZXIuZ2V0SW5kZXgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBydW4KKyAgICAgKiB3aXRoIHJlc3BlY3QgdG8gYWxsIGF0dHJpYnV0ZXMgY29udGFpbmluZyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRSdW5TdGFydCgpIHsKKyAgICAgICAgcmV0dXJuIGZTdHlsZUNhY2hlLmdldFJ1blN0YXJ0KGZDaGFySXRlci5nZXRJbmRleCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBydW4KKyAgICAgKiB3aXRoIHJlc3BlY3QgdG8gdGhlIGdpdmVuIGF0dHJpYnV0ZSBjb250YWluaW5nIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFJ1blN0YXJ0KE9iamVjdCBhdHRyaWJ1dGUpIHsKKworICAgICAgICByZXR1cm4gZ2V0UnVuU3RhcnQoYXR0cmlidXRlLCBBVFRSX01BVENIRVIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHJ1bgorICAgICAqIHdpdGggcmVzcGVjdCB0byB0aGUgZ2l2ZW4gYXR0cmlidXRlIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgorICAgICAqLworLy8vKkpESzEySU1QT1JUUworICAgIHB1YmxpYyBpbnQgZ2V0UnVuU3RhcnQoQXR0cmlidXRlIGF0dHJpYnV0ZSkgeworCisgICAgICAgIHJldHVybiBnZXRSdW5TdGFydChhdHRyaWJ1dGUsIEFUVFJfTUFUQ0hFUik7CisgICAgfQorLy9KREsxMklNUE9SVFMqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcnVuCisgICAgICogd2l0aCByZXNwZWN0IHRvIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgorICAgICAqLworLy8vKkpESzEySU1QT1JUUworICAgIHB1YmxpYyBpbnQgZ2V0UnVuU3RhcnQoU2V0IGF0dHJpYnV0ZXMpIHsKKworICAgICAgICByZXR1cm4gZ2V0UnVuU3RhcnQoYXR0cmlidXRlcywgU0VUX01BVENIRVIpOworICAgIH0KKy8vSkRLMTJJTVBPUlRTKi8KKyAgICAKKyAgICBwcml2YXRlIGludCBnZXRSdW5TdGFydChPYmplY3QgcXVlcnksIE1hdGNoZXIgbWF0Y2hlcikgeworCisgICAgICAgIGludCBydW5TdGFydCA9IGdldFJ1blN0YXJ0KCk7CisgICAgICAgIGludCByYW5nZVN0YXJ0ID0gZ2V0QmVnaW5JbmRleCgpOworICAgICAgICBNYXAgaW5pdGlhbFN0eWxlID0gZ2V0QXR0cmlidXRlcygpOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHJ1blN0YXJ0ID4gcmFuZ2VTdGFydCkgeworICAgICAgICAgICAgQXR0cmlidXRlTWFwIHN0eWxlID0gZlRleHQuY2hhcmFjdGVyU3R5bGVBdChydW5TdGFydC0xKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlci5tYXRjaGVzKGluaXRpYWxTdHlsZSwgc3R5bGUsIHF1ZXJ5KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBydW5TdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJ1blN0YXJ0ID0gZlRleHQuY2hhcmFjdGVyU3R5bGVTdGFydChydW5TdGFydC0xKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmFuZ2VTdGFydDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIHJ1bgorICAgICAqIHdpdGggcmVzcGVjdCB0byBhbGwgYXR0cmlidXRlcyBjb250YWluaW5nIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFJ1bkxpbWl0KCkgeworICAgICAgICByZXR1cm4gZlN0eWxlQ2FjaGUuZ2V0UnVuTGltaXQoZkNoYXJJdGVyLmdldEluZGV4KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBydW4KKyAgICAgKiB3aXRoIHJlc3BlY3QgdG8gdGhlIGdpdmVuIGF0dHJpYnV0ZSBjb250YWluaW5nIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFJ1bkxpbWl0KE9iamVjdCBhdHRyaWJ1dGUpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBnZXRSdW5MaW1pdChhdHRyaWJ1dGUsIEFUVFJfTUFUQ0hFUik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIHJ1bgorICAgICAqIHdpdGggcmVzcGVjdCB0byB0aGUgZ2l2ZW4gYXR0cmlidXRlIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgorICAgICAqLworLy8vKkpESzEySU1QT1JUUworICAgIHB1YmxpYyBpbnQgZ2V0UnVuTGltaXQoQXR0cmlidXRlIGF0dHJpYnV0ZSkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGdldFJ1bkxpbWl0KGF0dHJpYnV0ZSwgQVRUUl9NQVRDSEVSKTsKKyAgICB9CisvL0pESzEySU1QT1JUUyovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgcnVuCisgICAgICogd2l0aCByZXNwZWN0IHRvIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgorICAgICAqLworLy8vKkpESzEySU1QT1JUUworICAgIHB1YmxpYyBpbnQgZ2V0UnVuTGltaXQoU2V0IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBnZXRSdW5MaW1pdChhdHRyaWJ1dGVzLCBTRVRfTUFUQ0hFUik7CisgICAgfQorLy9KREsxMklNUE9SVFMqLworCisgICAgcHJpdmF0ZSBpbnQgZ2V0UnVuTGltaXQoT2JqZWN0IHF1ZXJ5LCBNYXRjaGVyIG1hdGNoZXIpIHsKKworICAgICAgICBpbnQgcnVuTGltaXQgPSBnZXRSdW5MaW1pdCgpOworICAgICAgICBpbnQgcmFuZ2VMaW1pdCA9IGdldEVuZEluZGV4KCk7CisgICAgICAgIE1hcCBpbml0aWFsU3R5bGUgPSBnZXRBdHRyaWJ1dGVzKCk7CisgICAgICAgIAorICAgICAgICB3aGlsZSAocnVuTGltaXQgPCByYW5nZUxpbWl0KSB7CisgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgc3R5bGUgPSBmVGV4dC5jaGFyYWN0ZXJTdHlsZUF0KHJ1bkxpbWl0KTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlci5tYXRjaGVzKGluaXRpYWxTdHlsZSwgc3R5bGUsIHF1ZXJ5KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBydW5MaW1pdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJ1bkxpbWl0ID0gZlRleHQuY2hhcmFjdGVyU3R5bGVMaW1pdChydW5MaW1pdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhbmdlTGltaXQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBtYXAgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIG9uIHRoZSBjdXJyZW50CisgICAgICogY2hhcmFjdGVyLgorICAgICAqLworICAgIHB1YmxpYyBNYXAgZ2V0QXR0cmlidXRlcygpIHsKKyAgICAgICAgcmV0dXJuIGZTdHlsZUNhY2hlLmdldFN0eWxlKGZDaGFySXRlci5nZXRJbmRleCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYXR0cmlidXRlIGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIuCisgICAgICogUmV0dXJucyBudWxsIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQuCisgICAgICogQHBhcmFtIGF0dHJpYnV0ZSB0aGUga2V5IG9mIHRoZSBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUgaXMgcmVxdWVzdGVkLgorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKE9iamVjdCBhdHRyaWJ1dGUpIHsKKyAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZXMoKS5nZXQoYXR0cmlidXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYXR0cmlidXRlIGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIuCisgICAgICogUmV0dXJucyBudWxsIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQuCisgICAgICogQHBhcmFtIGF0dHJpYnV0ZSB0aGUga2V5IG9mIHRoZSBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUgaXMgcmVxdWVzdGVkLgorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKEF0dHJpYnV0ZSBhdHRyaWJ1dGUpIHsKKyAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZXMoKS5nZXQoYXR0cmlidXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBrZXlzIG9mIGFsbCBhdHRyaWJ1dGVzIGRlZmluZWQgb24gdGhlCisgICAgICogaXRlcmF0b3IncyB0ZXh0IHJhbmdlLiBUaGUgc2V0IGlzIGVtcHR5IGlmIG5vCisgICAgICogYXR0cmlidXRlcyBhcmUgZGVmaW5lZC4KKyAgICAgKi8KKy8vLypKREsxMklNUE9SVFMKKyAgICBwdWJsaWMgU2V0IGdldEFsbEF0dHJpYnV0ZUtleXMoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW1wbGVtZW50IHRoaXMgbWV0aG9kISIpOworICAgIH0KKy8vSkRLMTJJTVBPUlRTKi8KKworICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB7CisgICAgICAgIHJldHVybiBuZXcgTVRleHRJdGVyYXRvcihmVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZGb250UmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCZWdpbkluZGV4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRFbmRJbmRleCgpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9QYXJhZ3JhcGhSZW5kZXJlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9QYXJhZ3JhcGhSZW5kZXJlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlYmIwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L1BhcmFncmFwaFJlbmRlcmVyLmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogUGFyYWdyYXBoUmVuZGVyZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NCAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLlRleHRBdHRyaWJ1dGU7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKKworaW1wb3J0IGphdmEuYXd0LkNvbG9yOworCisvLy8qSkRLMTJJTVBPUlRTCitpbXBvcnQgamF2YS5hd3QuZm9udC5Gb250UmVuZGVyQ29udGV4dDsKK2ltcG9ydCBqYXZhLmF3dC5mb250LkxpbmVCcmVha01lYXN1cmVyOworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7CisvL0pESzEySU1QT1JUUyovCisKKy8qSkRLMTFJTVBPUlRTCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LkZvbnRSZW5kZXJDb250ZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5MaW5lQnJlYWtNZWFzdXJlcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuR3JhcGhpY3MyRDsKK0pESzExSU1QT1JUUyovCisKKy8qKgorICogUGFyYWdyYXBoUmVuZGVyZXIgaXMgYSBmYWN0b3J5IGZvciBMYXlvdXRJbmZvIG9iamVjdHMuCisgKi8KK2Fic3RyYWN0IGNsYXNzIFBhcmFncmFwaFJlbmRlcmVyIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLy8gSWYgcmVuZGVyZXJzIGNhbiBldmVyIHRyYXZlbCB3aXRoIHRoZWlyIHN0eWxlcywgdGhlbiB0aGlzIGF0dHJpYnV0ZSB3aWxsIGRlbm90ZSBhCisgICAgLy8gcmVuZGVyZXIuICBGb3Igbm93LCByZW5kZXJlcnMgYXJlIG5vdCBhZGRlZCBhcyBzdHlsZXMgc28gdGhpcyBpc24ndCBuZWVkZWQuCisgICAgLy9zdGF0aWMgZmluYWwgVGV4dEF0dHJpYnV0ZSBQQVJBR1JBUEhfUkVOREVSRVIgPSBuZXcgVGV4dEF0dHJpYnV0ZSgiUGFyYWdyYXBoX1JlbmRlcmVyIikge307CisKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgcmVuZGVyZXIgdG8gdXNlIGluZm9ybWF0aW9uIGZyb20gdGhpcyBzdHlsZS4gU2luY2UgcmVuZGVyZXJzIG1heSBiZSBzaGFyZWQsIHlvdSBzaG91bGQKKyAgICAgKiBtYWtlIHN1cmUgdGhlIHJlbmRlcmVyIGlzIGluaXRpYWxpemVkIGZvciB0aGUgc3R5bGUgeW91IHdpc2ggdG8gcmVuZGVyIGJlZm9yZSB5b3UgdXNlIGl0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGluaXRSZW5kZXJlcihBdHRyaWJ1dGVNYXAgcFN0eWxlKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgTGF5b3V0SW5mbyBmb3IgdGhlIHBhcmFncmFwaCByZXByZXNlbnRlZCBieQorICAgICAqIG1lYXN1cmVyLgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IGNvbnRhaW5pbmcgdGhlIHBhcmFncmFwaAorICAgICAqIEBwYXJhbSBsYXlvdXRUb1JldXNlIGNsaWVudHMgY2FuIHBhc3MgaW4gYSBMYXlvdXRJbmZvCisgICAgICogd2hpY2ggdGhlIFBhcmFncmFwaFJlbmRlcmVyIG1heSBjaG9vc2UgdG8gcmV1c2UKKyAgICAgKiBhbmQgcmV0dXJuLiAgSWYgbnVsbCwgYSBuZXcgTGF5b3V0SW5mbyB3aWxsIGJlCisgICAgICogY3JlYXRlZCBhbmQgcmV0dXJuZWQuCisgICAgICogQHBhcmFtIG1lYXN1cmVyIHRoZSBMaW5lQnJlYWtNZWFzdXJlciBmb3IgdGhpcyBwYXJhZ3JhcGguCisgICAgICogIEN1cnJlbnQgcG9zaXRpb24gc2hvdWxkIGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUuCisgICAgICogIElmIG51bGwsIGEgMC1sZW5ndGggbGluZSBpcyBnZW5lcmF0ZWQuICBJZiBtZWFzdXJlciBpcyBudWxsCisgICAgICogIHRoZW4gcGFyYWdyYXBoU3RhcnQgYW5kIHBhcmFncmFwaExpbWl0IHNob3VsZCBiZSBlcXVhbC4KKyAgICAgKiBAcGFyYW0gZnJjIHRoZSBGb250UmVuZGVyQ29udGV4dCB1c2VkIGZvciBtZWFzdXJlcm1lbnQKKyAgICAgKiBAcGFyYW0gcGFyYWdyYXBoU3RhcnQgdGhlIGluZGV4IGluIHRoZSB0ZXh0IHdoZXJlIHRoZQorICAgICAqIGN1cnJlbnQgcGFyYWdyYXBoIGJlZ2lucworICAgICAqIEBwYXJhbSBwYXJhZ3JhcGhMaW1pdCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgICAqIGFmdGVyIHRoZSBjdXJyZW50IHBhcmFncmFwaAorICAgICAqIEBwYXJhbSB0b3RhbEZvcm1hdFdpZHRoIHRoZSB3aWR0aCBpbiB3aGljaCB0aGUgbGluZSBzaG91bGQgZml0CisgICAgICogQHBhcmFtIGxpbmVCb3VuZCB3aGVyZSByaWdodC1hbGlnbmVkIGxpbmVzIGFyZSBhbGlnbmVkCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IExheW91dEluZm8gbGF5b3V0KE1Db25zdFRleHQgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0SW5mbyBsYXlvdXRUb1JldXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lQnJlYWtNZWFzdXJlciBtZWFzdXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFJlbmRlckNvbnRleHQgZnJjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFyYWdyYXBoU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXJhZ3JhcGhMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsRm9ybWF0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lQm91bmQpOworCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L1Rlc3RNVGV4dEl0ZXJhdG9yLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0Zm9ybWF0L1Rlc3RNVGV4dEl0ZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjFhOGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvVGVzdE1UZXh0SXRlcmF0b3IuamF2YQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGVzdE1UZXh0SXRlcmF0b3IuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NCAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlZFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UZXh0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuVGV4dEF0dHJpYnV0ZTsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5UZXh0UGFuZWw7CisKK3B1YmxpYyBjbGFzcyBUZXN0TVRleHRJdGVyYXRvciB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZvbnRSZXNvbHZlciBGT05UX01BUFBFUjsKKyAgICBzdGF0aWMgeworICAgICAgICBBdHRyaWJ1dGVNYXAgYXR0cnMgPSBUZXh0UGFuZWwuZ2V0RGVmYXVsdFNldHRpbmdzKCkuZ2V0RGVmYXVsdFZhbHVlcygpOworICAgICAgICBGT05UX01BUFBFUiA9IG5ldyBGb250UmVzb2x2ZXIoYXR0cnMpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb21wYXJlSXRlclRvVGV4dChNVGV4dEl0ZXJhdG9yIGl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1Db25zdFRleHQgdGV4dCkgeworCisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJUZXh0OiAiICsgdGV4dCk7CisgICAgICAgIGZpbmFsIGludCBiZWdpbkluZGV4ID0gaXRlci5nZXRCZWdpbkluZGV4KCk7CisgICAgICAgIGZpbmFsIGludCBlbmRJbmRleCA9IGl0ZXIuZ2V0RW5kSW5kZXgoKTsKKworICAgICAgICBjaGFyIGNoID0gaXRlci5zZXRJbmRleChiZWdpbkluZGV4KTsKKworICAgICAgICBmb3IgKGludCBpPWJlZ2luSW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnQoY2grICIgIik7CisgICAgICAgICAgICBpZiAoY2ggIT0gdGV4dC5hdChpKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2hhcmFjdGVycyBhcmUgbm90IHRoZSBzYW1lLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBpdGVyLm5leHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaCAhPSBpdGVyLkRPTkUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSXRlcmF0b3IgaXMgbm90IGRvbmUuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpPWVuZEluZGV4LTE7IGkgPj0gYmVnaW5JbmRleDsgaS0tKSB7CisgICAgICAgICAgICBjaCA9IGl0ZXIucHJldmlvdXMoKTsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludChjaCsgIiAiKTsKKyAgICAgICAgICAgIGlmIChjaCAhPSB0ZXh0LmF0KGkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWNrd2FyZCBpdGVyYXRpb24gZmFpbGVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaXRlci5zZXRJbmRleChiZWdpbkluZGV4KTsKKworICAgICAgICBpbnQgcnVuTGltaXQ7CisgICAgICAgIGZvciAoaW50IHJ1blN0YXJ0ID0gYmVnaW5JbmRleDsgcnVuU3RhcnQgPCBlbmRJbmRleDsgcnVuU3RhcnQgPSBydW5MaW1pdCkgeworCisgICAgICAgICAgICBydW5MaW1pdCA9IE1hdGgubWluKGVuZEluZGV4LCB0ZXh0LmNoYXJhY3RlclN0eWxlTGltaXQocnVuU3RhcnQpKTsKKworICAgICAgICAgICAgaWYgKGl0ZXIuZ2V0UnVuU3RhcnQoKSAhPSBydW5TdGFydCkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpdGVyLmdldFJ1blN0YXJ0KCkgKyAiOyAiICsgcnVuU3RhcnQpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiZ2V0UnVuU3RhcnQgaXMgd3JvbmcuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXRlci5nZXRSdW5MaW1pdCgpICE9IHJ1bkxpbWl0KSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGl0ZXIuZ2V0UnVuTGltaXQoKSArICI7ICIgKyBydW5MaW1pdCk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJnZXRSdW5MaW1pdCBpcyB3cm9uZy4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQXR0cmlidXRlTWFwIHN0eWxlID0gdGV4dC5jaGFyYWN0ZXJTdHlsZUF0KHJ1blN0YXJ0KTsKKworICAgICAgICAgICAgd2hpbGUgKGl0ZXIuZ2V0SW5kZXgoKSA8IHJ1bkxpbWl0KSB7CisgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIHJlc29sdmVkID0gRk9OVF9NQVBQRVIuYXBwbHlGb250KHN0eWxlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZXIuZ2V0QXR0cmlidXRlcygpLmVxdWFscyhyZXNvbHZlZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTdHlsZSBpcyB3cm9uZy4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXRlci5uZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgeworCisgICAgICAgIEF0dHJpYnV0ZU1hcCBib2xkID0gbmV3IEF0dHJpYnV0ZU1hcChUZXh0QXR0cmlidXRlLldFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuV0VJR0hUX0JPTEQpOworICAgICAgICBNVGV4dCB0ZXh0ID0gbmV3IFN0eWxlZFRleHQoIkhlbGxvIHRoZXJlISIsIEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQKTsKKyAgICAgICAgdGV4dC5yZXBsYWNlKDIsIDIsICdWJywgYm9sZCk7CisKKyAgICAgICAgTVRleHRJdGVyYXRvciBpdGVyID0gbmV3IE1UZXh0SXRlcmF0b3IodGV4dCwgRk9OVF9NQVBQRVIsIDAsIHRleHQubGVuZ3RoKCkpOworICAgICAgICBjb21wYXJlSXRlclRvVGV4dChpdGVyLCB0ZXh0KTsKKworICAgICAgICB0ZXh0LnJlcGxhY2UoNiwgOCwgbmV3IFN0eWxlZFRleHQoIkFMTF9CT0xEIiwgYm9sZCksIDAsIDgpOworICAgICAgICBpdGVyID0gbmV3IE1UZXh0SXRlcmF0b3IodGV4dCwgRk9OVF9NQVBQRVIsIDEsIHRleHQubGVuZ3RoKCktMyk7CisgICAgICAgIGNvbXBhcmVJdGVyVG9UZXh0KGl0ZXIsIHRleHQpOworCisgICAgICAgIGl0ZXIgPSBuZXcgTVRleHRJdGVyYXRvcih0ZXh0LCBGT05UX01BUFBFUiwgMCwgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgIGNvbXBhcmVJdGVyVG9UZXh0KGl0ZXIsIHRleHQpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworICAgICAgICBuZXcgVGVzdE1UZXh0SXRlcmF0b3IoKS50ZXN0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFTU0VEIik7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvVGV4dE9mZnNldC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGZvcm1hdC9UZXh0T2Zmc2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWQxYzNlYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRmb3JtYXQvVGV4dE9mZnNldC5qYXZhCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBUZXh0T2Zmc2V0LmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTA6MDMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8vIFJldmlzaW9uOiAwMyAxLjE2IHJpY2h0ZXh0L1RleHRPZmZzZXQuamF2YSwgcmljaHRleHQsIHJpY2h0ZXh0CisKKy8qCisgICAgOS81Lzk2IHtqYnJ9IGFkZGVkIHNldCBhbmQgZXF1YWxzIG1ldGhvZHMKKyovCisKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0OworCisvKioKKyAqIEEgVGV4dE9mZnNldCBpbmRpY2F0ZXMgYm90aCBhbiBpbnRlZ2VyIG9mZnNldCBpbnRvIHRleHQgYW5kIGEgcGxhY2VtZW50CisgKiBvbiBvbmUgb2YgdGhlIGNoYXJhY3RlcnMgYWRqYWNlbnQgdG8gdGhlIG9mZnNldC4gIEFuIG9mZnNldCBpcyBhCisgKiBwb3NpdGlvbiBiZXR3ZWVuIHR3byBjaGFyYWN0ZXJzOyAgb2Zmc2V0IG4KKyAqIGlzIGJldHdlZW4gY2hhcmFjdGVyIG4tMSBhbmQgY2hhcmFjdGVyIG4uICBUaGUgcGxhY2VtZW50IHNwZWNpZmllcyB3aGV0aGVyCisgKiBpdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYXJhY3RlcgorICogYWZ0ZXIgdGhlIG9mZnNldAorICogKGNoYXJhY3RlciBuKSBvciB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgb2Zmc2V0IChjaGFyYWN0ZXIgbi0xKS4KKyAqIDxwPgorICogS25vd2luZyB3aGljaCBjaGFyYWN0ZXIgdGhlIFRleHRPZmZzZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGlzIG5lY2Vzc2FyeQorICogd2hlbiBkaXNwbGF5aW5nIGNhcmV0cy4gIEluIGJpZGlyZWN0aW9uYWwgdGV4dCwgYSBzaW5nbGUgb2Zmc2V0IG1heQorICogaGF2ZSB0d28gZGlzdGluY3QgY2FyZXRzLiAgQWxzbywgaW4gbXVsdGlsaW5lIHRleHQsIGFuIG9mZnNldCBhdCBhIGxpbmUKKyAqIGJyZWFrIGhhcyBhIHBvc3NpYmxlIGNhcmV0IG9uIGVhY2ggbGluZS4KKyAqIDxwPgorICogTW9zdCBjbGllbnRzIHdpbGwgbm90IGJlIGludGVyZXN0ZWQgaW4gdGhlIHBsYWNlbWVudCwgYW5kIHdpbGwganVzdCB1c2UKKyAqIHRoZSBvZmZzZXQuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUZXh0T2Zmc2V0Cit7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgVGV4dE9mZnNldCBpcyBhc3NvY2lhdGVkIHdpdGggY2hhcmFjdGVyCisgICAgICogPGNvZGU+Zk9mZnNldCAtIDE8L2NvZGU+IC0gaWUgdGhlIGNoYXJhY3RlciBiZWZvcmUgaXRzIG9mZnNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGJvb2xlYW4gQkVGT1JFX09GRlNFVCA9IHRydWU7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgVGV4dE9mZnNldCBpcyBhc3NvY2lhdGVkIHdpdGggY2hhcmFjdGVyCisgICAgICogPGNvZGU+Zk9mZnNldDwvY29kZT4gLSBpZSB0aGUgY2hhcmFjdGVyIGFmdGVyIGl0cyBvZmZzZXQuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBib29sZWFuIEFGVEVSX09GRlNFVCA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogVGhlIG9mZnNldCBpbnRvIHRoZSB0ZXh0LgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZk9mZnNldCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcGxhY2VtZW50IC0gYmVmb3JlIG9yIGFmdGVyLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGZQbGFjZW1lbnQgPSBBRlRFUl9PRkZTRVQ7CisKKyAgICAvKioKKyAgICAqIENvbnN0cnVjdHMgYSBuZXcgVGV4dE9mZnNldAorICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IGludG8gdGhlIHRleHQgdG8gcmVwcmVzZW50LiAgUGxhY2VtZW50IGlzIGltcGxpY2l0bHkgQUZURVJfT0ZGU0VULgorICAgICovCisgICAgcHVibGljIFRleHRPZmZzZXQoaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT2Zmc2V0IGlzIG5lZ2F0aXZlIGluIFRleHRPZmZzZXQgY29uc3RydWN0b3IuIik7CisKKyAgICAgICAgZk9mZnNldCA9IG9mZnNldDsKKworICAgICAgICBmUGxhY2VtZW50ID0gQUZURVJfT0ZGU0VUOworICAgIH0KKworICAgIC8qKgorICAgICogQ29uc3RydWN0cyBhIG5ldyBUZXh0T2Zmc2V0IGF0IDAsIHdpdGggcGxhY2VtZW50IEFGVEVSX09GRlNFVC4KKyAgICAqLworICAgIHB1YmxpYyBUZXh0T2Zmc2V0KCkgeworICAgICAgICB0aGlzKDApOworICAgIH0KKworICAgIC8qKgorICAgICogQ29uc3RydWN0cyBhIG5ldyBUZXh0T2Zmc2V0IHdpdGggdGhlIGdpdmVuIG9mZnNldCBhbmQgcGxhY2VtZW50LgorICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IGludG8gdGhlIHRleHQKKyAgICAqIEBwYXJhbSBwbGFjZW1lbnQgaW5kaWNhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2FyZXQ7IG9uZSBvZiBCRUZPUkVfT0ZGU0VUIG9yIEFGVEVSX09GRlNFVAorICAgICovCisgICAgcHVibGljIFRleHRPZmZzZXQoaW50IG9mZnNldCwgYm9vbGVhbiBwbGFjZW1lbnQpCisgICAgeworICAgICAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRleHRPZmZzZXQgY29uc3RydWN0b3Igb2Zmc2V0IDwgMDogIiArIG9mZnNldCk7CisKKyAgICAgICAgZk9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgZlBsYWNlbWVudCA9IHBsYWNlbWVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIENvbnN0cnVjdHMgYSBuZXcgVGV4dE9mZnNldCBmcm9tIGFuIGV4aXN0aW5nIG9uZS4KKyAgICAqIEBwYXJhbSB0aHMgdGhlIFRleHRPZmZzZXQgdG8gY29weQorICAgICovCisgICAgcHVibGljIFRleHRPZmZzZXQoVGV4dE9mZnNldCByaHMpIHsKKworICAgICAgICB0aGlzKHJocy5mT2Zmc2V0LCByaHMuZlBsYWNlbWVudCk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBUZXh0T2Zmc2V0CisgICAgKiBAcGFyYW0gb2Zmc2V0IHRoZSBvZmZzZXQgaW50byB0aGUgdGV4dAorICAgICogQHBhcmFtIHBsYWNlbWVudCBpbmRpY2F0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjYXJldDsgb25lIG9mIEJFRk9SRV9PRkZTRVQgb3IgQUZURVJfT0ZGU0VUCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRPZmZzZXQoaW50IG9mZnNldCwgYm9vbGVhbiBwbGFjZW1lbnQpCisgICAgeworICAgICAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRleHRPZmZzZXQgc2V0T2Zmc2V0IG9mZnNldCA8IDA6ICIgKyBvZmZzZXQpOworCisgICAgICAgIGZPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIGZQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZSB0aGlzIHRvIGFub3RoZXIgT2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGVxdWFscygoVGV4dE9mZnNldClvdGhlcik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICogUmV0dXJuIHRydWUgaWYgb2Zmc2V0IGFuZCBwbGFjZW1lbnQgYXJlIHRoZSBzYW1lLgorICAgICoKKyAgICAqIEBwYXJhbSBvdGhlciBvZmZzZXQgdG8gY29tcGFyZSBhZ2FpbnN0CisgICAgKiBAcmV0dXJuIHRydWUgaWYgYm90aCBvZmZzZXRzIGFyZSBlcXVhbAorICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKFRleHRPZmZzZXQgb3RoZXIpIHsKKworICAgICAgICByZXR1cm4gZk9mZnNldCA9PSBvdGhlci5mT2Zmc2V0ICYmIGZQbGFjZW1lbnQgPT0gb3RoZXIuZlBsYWNlbWVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGhhc2hDb2RlIGZvciB0aGlzIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworCisgICAgICAgIHJldHVybiBmUGxhY2VtZW50PT1BRlRFUl9PRkZTRVQ/IGZPZmZzZXQgOiAtZk9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJldHVybiB0cnVlIGlmIHRoaXMgb2Zmc2V0IGlzICdncmVhdGVyVGhhbicgb3RoZXIuICBJZiB0aGUgZk9mZnNldCBmaWVsZHMgYXJlIGVxdWFsLCB0aGUKKyAgICAqIHBsYWNlbWVudCBmaWVsZCBpcyBjb25zaWRlcmVkLCBhbmQgQUZURVJfT0ZGU0VUIGlzIGNvbnNpZGVyZWQgJ2dyZWF0ZXJUaGFuJyBCRUZPUkVfT0ZGU0VULgorICAgICoKKyAgICAqIEBwYXJhbSBvdGhlciB0aGUgb3RoZXIgb2Zmc2V0CisgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBvZmZzZXQgYXBwZWFycyBhZnRlciBvdGhlcgorICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZ3JlYXRlclRoYW4oVGV4dE9mZnNldCBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBmT2Zmc2V0ID4gb3RoZXIuZk9mZnNldCB8fAorICAgICAgICAgICAgKGZPZmZzZXQgPT0gb3RoZXIuZk9mZnNldCAmJiBmUGxhY2VtZW50ID09IEFGVEVSX09GRlNFVCAmJiBvdGhlci5mUGxhY2VtZW50ID09IEJFRk9SRV9PRkZTRVQpOworICAgIH0KKworICAgIC8qKgorICAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBvZmZzZXQgaXMgJ2xlc3NUaGFuJyBvdGhlci4gIElmIHRoZSBmT2Zmc2V0IGZpZWxkcyBhcmUgZXF1YWwsIHRoZQorICAgICogcGxhY2VtZW50IGZpZWxkIGlzIGNvbnNpZGVyZWQsIGFuZCBCRUZPUkVfT0ZGU0VUIGlzIGNvbnNpZGVyZWQgJ2xlc3NUaGFuJyBBRlRFUl9PRkZTRVQuCisgICAgKgorICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciBvZmZzZXQKKyAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9mZnNldCBhcHBlYXJzIGJlZm9yZSBvdGhlcgorICAgICovCisgICAgcHVibGljIGJvb2xlYW4gbGVzc1RoYW4oVGV4dE9mZnNldCBvdGhlcikgeworCisgICAgICAgIHJldHVybiBmT2Zmc2V0IDwgb3RoZXIuZk9mZnNldCB8fAorICAgICAgICAgICAgKGZPZmZzZXQgPT0gb3RoZXIuZk9mZnNldCAmJiBmUGxhY2VtZW50ID09IEJFRk9SRV9PRkZTRVQgJiYgb3RoZXIuZlBsYWNlbWVudCA9PSBBRlRFUl9PRkZTRVQpOworICAgIH0KKworICAgIC8qKgorICAgICogQ29weSB0aGUgdmFsdWUgb2YgYW5vdGhlciBUZXh0T2Zmc2V0IGludG8gdGhpcworICAgICogQHBhcmFtIG90aGVyIHRoZSBUZXh0T2Zmc2V0IHRvIGNvcHkKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIGFzc2lnbihUZXh0T2Zmc2V0IG90aGVyKSB7CisgICAgICAgIGZPZmZzZXQgPSBvdGhlci5mT2Zmc2V0OworICAgICAgICBmUGxhY2VtZW50ID0gb3RoZXIuZlBsYWNlbWVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KKyAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisKKyAgICAgICAgcmV0dXJuICJbIiArIChmUGxhY2VtZW50ID8gImJlZm9yZSAiIDogImFmdGVyICIpICsgZk9mZnNldCArICJdIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0bGF5b3V0L0ZvbnRVdGlscy5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGxheW91dC9Gb250VXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjA5YmFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGxheW91dC9Gb250VXRpbHMuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBGb250VXRpbHMuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NCAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0OworCitpbXBvcnQgamF2YS5hd3QuRm9udDsKKworcHVibGljIGZpbmFsIGNsYXNzIEZvbnRVdGlscyB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgICAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgRm9udCBnZXRGb250KGphdmEudXRpbC5NYXAgYXR0cmlidXRlcykgeworCisgICAgICAgIHJldHVybiBGb250LmdldEZvbnQoYXR0cmlidXRlcyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvR3JhcGhpY3MyRENvbnZlcnNpb24uamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvR3JhcGhpY3MyRENvbnZlcnNpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYjFiZmJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGxheW91dC9HcmFwaGljczJEQ29udmVyc2lvbi5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEdyYXBoaWNzMkRDb252ZXJzaW9uLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDQgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8vIFJlcXVpcmVzIEphdmEyCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dDsKKworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzOworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7CitpbXBvcnQgamF2YS5hd3QuUGFpbnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBhbGxvd3MgSkRLIDEuMSBjb2RlIHRvIHVzZSBhICJmYWtlIiBHcmFwaGljczJECisgKiBmb3Igc291cmNlLWNvZGUgY29tcGF0aWJpbGl0eSB3aXRoIEphdmEyIGNvZGUuICBPbiBKYXZhMiBpdCdzCisgKiBhIHRyaXZpYWwgY2xhc3MuICBUaGUgSkRLIDEuMSB2ZXJzaW9uIG9mIHRoaXMgY2xhc3MgZG9lcyBpbnRlcmVzdGluZworICogd29yay4KKyAqLyAKK3B1YmxpYyBmaW5hbCBjbGFzcyBHcmFwaGljczJEQ29udmVyc2lvbiB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgICAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgR3JhcGhpY3MyRCBnZXRHcmFwaGljczJEKEdyYXBoaWNzIGcpIHsKKyAgICAgICAgcmV0dXJuIChHcmFwaGljczJEKSBnOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgR3JhcGhpY3MgZ2V0R3JhcGhpY3MoR3JhcGhpY3MyRCBnKSB7CisgICAgICAgIHJldHVybiBnOworICAgIH0KKworICAgIC8qKgorICAgICAqIFdpbGwgcmV0dXJuIGFuIGluc3RhbmNlIG9mIFBhaW50LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldENvbG9yU3RhdGUoR3JhcGhpY3MyRCBnKSB7CisKKyAgICAgICAgcmV0dXJuIGcuZ2V0UGFpbnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGF0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFBhaW50LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXN0b3JlQ29sb3JTdGF0ZShHcmFwaGljczJEIGcsIE9iamVjdCBzdGF0ZSkgeworCisgICAgICAgIGcuc2V0UGFpbnQoKFBhaW50KSBzdGF0ZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVLZXkuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVLZXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zODg0NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGxheW91dC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZUtleS5qYXZhCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBBdHRyaWJ1dGVLZXkuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlczsKKworaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBjYW5ub25pY2FsIG1hcHBpbmcgYmV0d2VlbiBmaWVsZHMgaW4gVGV4dEF0dHJpYnV0ZQorICogYW5kIGluc3RhbmNlcyBvZiBpdHNlbGYuICBJdCBpcyB1c2VkIGJ5IEF0dHJpYnV0ZU1hcCB0byBzZXJpYWxpemUKKyAqIGFuZCBkZXNlcmlhbGl6ZSBUZXh0QXR0cmlidXRlIHRvIHByZXNlcnZlIHVuaXF1ZW5lc3Mgb2YgVGV4dEF0dHJpYnV0ZQorICogaW5zdGFuY2VzIChpZSBzbyB0aGF0IFRleHRBdHRyaWJ1dGUgaW5zdGFuY2VzIHJlbWFpbiBzaW5nbGV0b25zKSwKKyAqIGFuZCB0byBwcm92aWRlIGNvbXBhdGFiaWxpdHkgYmV0d2VlbiAxLjEgYW5kIDEuMiB2ZXJzaW9ucyBvZgorICogVGV4dEF0dHJpYnV0ZS4KKyAqIDxwPgorICogRXhhbXBsZSB1c2UgLSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXM6CisgKiA8YmxvY2txdW90ZT48cHJlPgorICogICAgIG91dC53cml0ZU9iamVjdChhbkF0dHJpYnV0ZSk7CisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgKiBkbyB0aGlzOgorICogPGJsb2NrcXVvdGU+PHByZT4KKyAqICAgICBvdXQud3JpdGVPYmplY3QoQXR0cmlidXRlS2V5Lm1hcEF0dHJpYnV0ZVRvS2V5KGFuQXR0cmlidXRlKSk7CisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgKiBTaW1pbGFybHksIGluc3RlYWQgb2YgdGhpczoKKyAqIDxibG9ja3F1b3RlPjxwcmU+CisgKiAgICAgYW5BdHRyaWJ1dGUgPSBpbi5yZWFkT2JqZWN0KCk7CisgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CisgKiBkbyB0aGlzOgorICogPGJsb2NrcXVvdGU+PHByZT4KKyAqICAgICBhbkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZUtleS5tYXBLZXlUb0F0dHJpYnV0ZShpbi5yZWFkT2JqZWN0KCkpOworICogPC9wcmU+PC9ibG9ja3F1b3RlPgorICogPHA+CisgKiBJZiBhbkF0dHJpYnV0ZSBpcyBub3QgYSBrbm93biBUZXh0QXR0cmlidXRlLCB0aGVuIDxjb2RlPm1hcEF0dHJpYnV0ZVRvS2V5PC9jb2RlPgorICogd2lsbCBqdXN0IHJldHVybiBpdHMgYXJndW1lbnQuICBTaW1pbGFybHksIDxjb2RlPm1hcEtleVRvQXR0cmlidXRlPC9jb2RlPiB3aWxsCisgKiByZXR1cm4gaXRzIGFyZ3VtZW50IGlmIHRoZSBhcmd1bWVudCBpcyBub3QgYSBrbm93biBBdHRyaWJ1dGVLZXkuCisgKi8KKworLypwdWJsaWMqLyBmaW5hbCBjbGFzcyBBdHRyaWJ1dGVLZXkgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCisvKgorICAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHR3byBwYXJhbGxlbCBWZWN0b3JzIGFyZQorICAgIG1haW50YWluZWQuICBUZXh0QXR0cmlidXRlKGkpIG1hcHMgdG8gQXR0cmlidXRlS2V5KGkpLgorICAgIEZvciBjb21wYXRhYmlsaXR5IHdpdGggZXhpc3RpbmcgZGF0YSwgdGhpcyBtYXBwaW5nIG11c3QKKyAgICBiZSBtYWludGFpbmVkIGluIHRoZSBmdXR1cmUhICBTbywgd2hlbiBuZXcgYXR0cmlidXRlcworICAgIGFyZSBhZGRlZCwgYWRkIHRoZW0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKyovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzNzcyMzcxMjUzMjc3MTA3Mjk0TDsKKworICAgIHByaXZhdGUgc3RhdGljIE9iamVjdFtdIGZnVGV4dEF0dHJpYnV0ZXM7CisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0W10gZmdBdHRyaWJ1dGVLZXlzOworCisgICAgc3RhdGljIHsKKyAgICAgICAgZmdUZXh0QXR0cmlidXRlcyA9IG5ldyBPYmplY3RbXSB7CisgICAgICAgICAgICBUZXh0QXR0cmlidXRlLkZPTlQsCisgICAgICAgICAgICBUZXh0QXR0cmlidXRlLkZBTUlMWSwKKyAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuV0VJR0hULAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5QT1NUVVJFLAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5TSVpFLAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5TVVBFUlNDUklQVCwKKyAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuRk9SRUdST1VORCwKKyAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuQkFDS0dST1VORCwKKyAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FLAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5TVFJJS0VUSFJPVUdILAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5DSEFSX1JFUExBQ0VNRU5ULAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5FWFRSQV9MSU5FX1NQQUNJTkcsCisgICAgICAgICAgICBUZXh0QXR0cmlidXRlLkZJUlNUX0xJTkVfSU5ERU5ULAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5NSU5fTElORV9TUEFDSU5HLAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5MSU5FX0ZMVVNILAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5MRUFESU5HX01BUkdJTiwKKyAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuVFJBSUxJTkdfTUFSR0lOLAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5UQUJfUlVMRVIsCisgICAgICAgICAgICBUZXh0QXR0cmlidXRlLlJVTl9ESVJFQ1RJT04sCisgICAgICAgICAgICBUZXh0QXR0cmlidXRlLkJJRElfRU1CRURESU5HLAorICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5KVVNUSUZJQ0FUSU9OLAorICAgICAgICB9OworCisgICAgICAgIGZpbmFsIGludCBhdHRyQ291bnQgPSBmZ1RleHRBdHRyaWJ1dGVzLmxlbmd0aDsKKyAgICAgICAgZmdBdHRyaWJ1dGVLZXlzID0gbmV3IE9iamVjdFthdHRyQ291bnRdOworCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGF0dHJDb3VudDsgaSArPSAxKSB7CisgICAgICAgICAgICBmZ0F0dHJpYnV0ZUtleXNbaV0gPSBuZXcgQXR0cmlidXRlS2V5KGkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBUZXh0QXR0cmlidXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleS4KKyAgICAgKiBJZiBrZXkgaXMgYW4gaW5zdGFuY2Ugb2YgQXR0cmlidXRlS2V5IGl0IHdpbGwgYmUgbWFwcGVkIHRvCisgICAgICogYSBUZXh0QXR0cmlidXRlLiAgT3RoZXJ3aXNlLCB0aGUga2V5IGlzIHJldHVybmVkLgorICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBtYXAgdG8gYSBUZXh0QXR0cmlidXRlIGZpZWxkCisgICAgICogQHJldHVybiB0aGUgVGV4dEF0dHJpYnV0ZSBmb3IgPGNvZGU+a2V5PC9jb2RlPiBpZiA8Y29kZT5rZXk8L2NvZGU+CisgICAgICogICAgaXMgYW4gQXR0cmlidXRlS2V5OyBvdGhlcndpc2UgPGNvZGU+a2V5PC9jb2RlPiBpcyByZXR1cm5lZAorICAgICAqLworICAgIC8qcHVibGljKi8gc3RhdGljIE9iamVjdCBtYXBLZXlUb0F0dHJpYnV0ZShPYmplY3Qga2V5KSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEF0dHJpYnV0ZUtleSBhS2V5ID0gKEF0dHJpYnV0ZUtleSkga2V5OworICAgICAgICAgICAgaWYgKGFLZXkuZklkIDwgZmdUZXh0QXR0cmlidXRlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmdUZXh0QXR0cmlidXRlc1thS2V5LmZJZF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgYXR0cmlidXRlIGlzIGEga25vd24gVGV4dEF0dHJpYnV0ZSwgcmV0dXJuIGFuIEF0dHJpYnV0ZUtleQorICAgICAqIGZvciBpdC4gIE90aGVyd2lzZSB0aGUgb2JqZWN0IGlzIHJldHVybmVkLgorICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgdGhlIGF0dHJpYnV0ZSB0byBtYXAgdG8gYW4gQXR0cmlidXRlS2V5CisgICAgICogQHJldHVybiBhbiBBdHRyaWJ1dGVLZXkgZm9yIDxjb2RlPmF0dHJpYnV0ZTwvY29kZT4KKyAgICAgKiAgICAgaWYgPGNvZGU+YXR0cmlidXRlPC9jb2RlPiBpcyBhIGtub3duIGF0dHJpYnV0ZTsgb3RoZXJ3aXNlCisgICAgICogICAgIDxjb2RlPmF0dHJpYnV0ZTwvY29kZT4gaXMgcmV0dXJuZWQKKyAgICAgKi8KKyAgICAvKnB1YmxpYyovIHN0YXRpYyBPYmplY3QgbWFwQXR0cmlidXRlVG9LZXkoT2JqZWN0IGF0dHJpYnV0ZSkgeworCisgICAgICAgIGZpbmFsIGludCBhdHRyQ291bnQgPSBmZ1RleHRBdHRyaWJ1dGVzLmxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyQ291bnQ7IGluZGV4ICs9IDEpIHsKKyAgICAgICAgICAgIGlmIChmZ1RleHRBdHRyaWJ1dGVzW2luZGV4XS5lcXVhbHMoYXR0cmlidXRlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmZ0F0dHJpYnV0ZUtleXNbaW5kZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gYXR0cmlidXRlOworICAgIH0KKworCisgICAgcHJpdmF0ZSBpbnQgZklkOworCisgICAgcHJpdmF0ZSBBdHRyaWJ1dGVLZXkoaW50IGlkKSB7CisKKyAgICAgICAgZklkID0gaWQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCByaHMpIHsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuICgoQXR0cmlidXRlS2V5KXJocykuZklkID09IGZJZDsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKworICAgICAgICByZXR1cm4gZklkOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0bGF5b3V0L2F0dHJpYnV0ZXMvQXR0cmlidXRlTWFwLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0bGF5b3V0L2F0dHJpYnV0ZXMvQXR0cmlidXRlTWFwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGExYjRjYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVNYXAuamF2YQpAQCAtMCwwICsxLDUyOSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQXR0cmlidXRlTWFwLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDUgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8vIFJlcXVpcmVzIEphdmEyCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzOworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YS5pby5FeHRlcm5hbGl6YWJsZTsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0OworaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0OworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKKworLyoqCisgKiBBdHRyaWJ1dGVNYXAgaXMgYW4gaW1tdXRhYmxlIE1hcC4gIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlCisgKiBzZXZlcmFsIG1ldGhvZHMgZm9yIGNvbW1vbiBvcGVyYXRpb25zICh1bmlvbiwKKyAqIHJlbW92ZSwgaW50ZXJzZWN0KTsgIHRoZXNlIG1ldGhvZHMgcmV0dXJuIG5ldyBBdHRyaWJ1dGVNYXAKKyAqIGluc3RhbmNlcy4KKyAqIDxwPgorICogQWx0aG91Z2ggYW55IG5vbi1udWxsIE9iamVjdCBjYW4gYmUgYSBrZXkgb3IgdmFsdWUgaW4gYW4KKyAqIEF0dHJpYnV0ZU1hcCwgdHlwaWNhbGx5IHRoZSBrZXlzIGFyZSBmaWVsZHMgb2YgVGV4dEF0dHJpYnV0ZS4KKyAqIEBzZWUgVGV4dEF0dHJpYnV0ZQorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQXR0cmlidXRlTWFwIGltcGxlbWVudHMgamF2YS51dGlsLk1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlcm5hbGl6YWJsZSB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDVVJSRU5UX1ZFUlNJT04gPSAxOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gOTUxMDgwMzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBlcnJTdHJpbmcgPSAiU3R5bGVTZXRzIGFyZSBpbW11dGFibGUuIjsKKworICAgIC8vIFRoaXMgaXMgcGFzc2VkIHRvIHRoZSBIYXNodGFibGUgY29uc3RydWN0b3IgYXMgdGhlCisgICAgLy8gbG9hZCBmYWN0b3IgYXJndW1lbnQuICBJdCBpcyBjaG9zZW4gdG8gYXZvaWQgcmVzaXppbmcKKyAgICAvLyB0aGUgSGFzaHRhYmxlIHdoZW5ldmVyIHBvc3NpYmxlLiAgSSB0aGluayB0aGF0IDEKKyAgICAvLyBkb2VzIHRoaXMuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQURfRkFDVE9SID0gMTsKKworICAgIHByaXZhdGUgSGFzaHRhYmxlIHN0eWxlVGFibGU7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgQXR0cmlidXRlU2V0IGNhY2hlZEtleVNldCA9IG51bGw7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgQ29sbGVjdGlvbiBjYWNoZWRWYWx1ZUNvbGxlY3Rpb24gPSBudWxsOworICAgIHByaXZhdGUgdHJhbnNpZW50IFNldCBjYWNoZWRFbnRyeVNldCA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBBbiBlbXB0eSBBdHRyaWJ1dGVNYXAuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVNYXAgRU1QVFlfQVRUUklCVVRFX01BUCA9IG5ldyBBdHRyaWJ1dGVNYXAoKTsKKworLy8gPT09PT09PT09PT09PT0KKy8vIENvbnN0cnVjdG9ycworLy8gPT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldywgZW1wdHkgQXR0cmlidXRlTWFwLiAgRU1QVFlfU1RZTEVfU0VUIGNhbiBiZSB1c2VkCisgICAgICogaW4gcGxhY2Ugb2YgYW4gQXR0cmlidXRlTWFwIHByb2R1Y2VkIGJ5IHRoaXMgY29uc3RydWN0b3IuCisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCgpIHsKKworICAgICAgICBzdHlsZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgxLCBMT0FEX0ZBQ1RPUik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIEF0dHJpYnV0ZU1hcCB3aXRoIHRoZSBzYW1lIGtleS12YWx1ZQorICAgICAqIGVudHJpZXMgYXMgdGhlIGdpdmVuIE1hcC4KKyAgICAgKiBAcGFyYW0gbWFwIGEgTWFwIHdob3NlIGtleS12YWx1ZSBlbnRyaWVzIHdpbGwKKyAgICAgKiAgICAgIGJlY29tZSB0aGUgZW50cmllcyBmb3IgdGhpcyBBdHRyaWJ1dGVNYXAuIDxjb2RlPm1hcDwvY29kZT4KKyAgICAgKiAgICAgIGlzIG5vdCBtb2RpZmllZCwgYW5kIG11c3Qgbm90IGNvbnRhaW4gbnVsbCBrZXlzIG9yIHZhbHVlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlTWFwKGphdmEudXRpbC5NYXAgbWFwKSB7CisKKyAgICAgICAgc3R5bGVUYWJsZSA9IG5ldyBIYXNodGFibGUobWFwLnNpemUoKSwgTE9BRF9GQUNUT1IpOworICAgICAgICBzdHlsZVRhYmxlLnB1dEFsbChtYXApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiBBdHRyaWJ1dGVNYXAgd2l0aCB0aGUgc2FtZSBrZXktdmFsdWUKKyAgICAgKiBlbnRyaWVzIGFzIHRoZSBnaXZlbiBIYXNodGFibGUuCisgICAgICogQHBhcmFtIHRhYmxlIGEgSGFzaHRhYmxlIHdob3NlIGtleS12YWx1ZSBlbnRyaWVzIHdpbGwKKyAgICAgKiAgICAgIGJlY29tZSB0aGUgZW50cmllcyBmb3IgdGhpcyBBdHRyaWJ1dGVNYXAuIDxjb2RlPnRhYmxlPC9jb2RlPgorICAgICAqICAgICAgaXMgbm90IG1vZGlmaWVkLgorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAoSGFzaHRhYmxlIGhhc2h0YWJsZSkgeworCisgICAgICAgIHRoaXMoKGphdmEudXRpbC5NYXApIGhhc2h0YWJsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIEF0dHJpYnV0ZU1hcCB3aXRoIGEgc2luZ2xlIGVudHJ5IG9mCisgICAgICogPGNvZGU+e2F0dHJpYnV0ZSwgdmFsdWV9PC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gYXR0cmlidXRlIHRoZSBrZXkgaW4gdGhpcyBBdHRyaWJ1dGVNYXAncyBzaW5nbGUgZW50cnkKKyAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIGluIHRoaXMgQXR0cmlidXRlTWFwJ3Mgc2luZ2xlIGVudHJ5CisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcChPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIHsKKworICAgICAgICBzdHlsZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgxLCBMT0FEX0ZBQ1RPUik7CisKKyAgICAgICAgLy8gaGFzaHRhYmxlIGNoZWNrcyB2YWx1ZSBmb3IgbnVsbAorICAgICAgICBzdHlsZVRhYmxlLnB1dChrZXksIHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgICAgcHJpdmF0ZSBBdHRyaWJ1dGVNYXAoSGFzaHRhYmxlIHRhYmxlLCBib29sZWFuIGNsb25lKSB7CisKKyAgICAgICAgaWYgKGNsb25lKSB7CisgICAgICAgICAgICBzdHlsZVRhYmxlID0gKEhhc2h0YWJsZSkgdGFibGUuY2xvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc3R5bGVUYWJsZSA9IHRhYmxlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChPYmplY3RPdXRwdXQgb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIG91dC53cml0ZUludChDVVJSRU5UX1ZFUlNJT04pOworICAgICAgICBvdXQud3JpdGVJbnQoc3R5bGVUYWJsZS5zaXplKCkpOworICAgICAgICBFbnVtZXJhdGlvbiBlID0gc3R5bGVUYWJsZS5rZXlzKCk7CisgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBPYmplY3Qga2V5ID0gZS5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgb3V0LndyaXRlT2JqZWN0KEF0dHJpYnV0ZUtleS5tYXBBdHRyaWJ1dGVUb0tleShrZXkpKTsKKyAgICAgICAgICAgIG91dC53cml0ZU9iamVjdChzdHlsZVRhYmxlLmdldChrZXkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlYWRFeHRlcm5hbChPYmplY3RJbnB1dCBpbikgdGhyb3dzIElPRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKKworICAgICAgICBpZiAoaW4ucmVhZEludCgpICE9IENVUlJFTlRfVkVSU0lPTikgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJJbnZhbGlkIHZlcnNpb24gb2YgU3R5bGVCdWZmZXIiKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBjb3VudCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgY291bnQ7IGkgKz0gMSkgeworICAgICAgICAgICAgT2JqZWN0IGtleSA9IEF0dHJpYnV0ZUtleS5tYXBLZXlUb0F0dHJpYnV0ZShpbi5yZWFkT2JqZWN0KCkpOworICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gaW4ucmVhZE9iamVjdCgpOworICAgICAgICAgICAgc3R5bGVUYWJsZS5wdXQoa2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKy8vID09PT09PT09PT09PT09CisvLyBNYXAgaW50ZXJmYWNlCisvLyA9PT09PT09PT09PT09PQorCisvLyBxdWVyaWVzCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgQXR0cmlidXRlTWFwLgorICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBBdHRyaWJ1dGVNYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHNpemUoKSB7CisKKyAgICAgICAgcmV0dXJuIHN0eWxlVGFibGUuc2l6ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgQXR0cmlidXRlTWFwCisgICAgICogaXMgMC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBBdHRyaWJ1dGVNYXAKKyAgICAgKiBpcyAwCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKKworICAgICAgICByZXR1cm4gc3R5bGVUYWJsZS5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGtleSBpcyBpbiB0aGlzIEF0dHJpYnV0ZU1hcC4KKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gdGVzdAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiA8Y29kZT5rZXk8L2NvZGU+IGlzIGluIHRoaXMgQXR0cmlidXRlTWFwCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNLZXkoT2JqZWN0IGtleSkgeworCisgICAgICAgIHJldHVybiBzdHlsZVRhYmxlLmNvbnRhaW5zS2V5KGtleSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGluIHRoaXMgQXR0cmlidXRlTWFwLgorICAgICAqIEBwYXJhbSBrZXkgdGhlIHZhbHVlIHRvIHRlc3QKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgPGNvZGU+dmFsdWU8L2NvZGU+IGlzIGluIHRoaXMgQXR0cmlidXRlTWFwCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKKworICAgICAgICByZXR1cm4gc3R5bGVUYWJsZS5jb250YWluc1ZhbHVlKHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LiAgSWYgdGhlCisgICAgICoga2V5IGlzIG5vdCBpbiB0aGlzIEF0dHJpYnV0ZU1hcCBudWxsIGlzIHJldHVybmVkLgorICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBsb29rIHVwCisgICAgICogQHJldHVybiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIDxjb2RlPmtleTwvY29kZT4sIG9yCisgICAgICogICAgIG51bGwgaWYgPGNvZGU+a2V5PC9jb2RlPiBpcyBub3QgaW4gdGhpcyBBdHRyaWJ1dGVNYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGdldChPYmplY3Qga2V5KSB7CisKKyAgICAgICAgcmV0dXJuIHN0eWxlVGFibGUuZ2V0KGtleSk7CisgICAgfQorCisvLyBtb2RpZmllcnMgLSBhbGwgdGhyb3cgZXhjZXB0aW9ucworCisgICAgLyoqCisgICAgICogVGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLgorICAgICAqIEBzZWUgI2FkZEF0dHJpYnV0ZQorICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IHB1dChPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIHsKKworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oZXJyU3RyaW5nKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24uCisgICAgICogQHNlZSAjcmVtb3ZlQXR0cmlidXRlcworICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IHJlbW92ZShPYmplY3Qga2V5KSB7CisKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKGVyclN0cmluZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLgorICAgICAqIEBzZWUgI2FkZEF0dHJpYnV0ZXMKKyAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgcHV0QWxsKGphdmEudXRpbC5NYXAgdCkgeworCisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbihlcnJTdHJpbmcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlICNFTVBUWV9BVFRSSUJVVEVfTUFQCisgICAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyKCkgeworCisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbihlcnJTdHJpbmcpOworICAgIH0KKworLy8gdmlld3MKKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBBdHRyaWJ1dGVTZXQgY29udGFpbmluZyBldmVyeSBrZXkgaW4gdGhpcyBBdHRyaWJ1dGVNYXAuCisgICAgICogQHJldHVybiBhbiBBdHRyaWJ1dGVTZXQgY29udGFpbmluZyBldmVyeSBrZXkgaW4gdGhpcyBBdHRyaWJ1dGVNYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgU2V0IGtleVNldCgpIHsKKworICAgICAgICByZXR1cm4gZ2V0S2V5U2V0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIEF0dHJpYnV0ZVNldCBjb250YWluaW5nIGV2ZXJ5IGtleSBpbiB0aGlzIEF0dHJpYnV0ZU1hcC4KKyAgICAgKiBAcmV0dXJuIGFuIEF0dHJpYnV0ZVNldCBjb250YWluaW5nIGV2ZXJ5IGtleSBpbiB0aGlzIEF0dHJpYnV0ZU1hcAorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVTZXQgZ2V0S2V5U2V0KCkgeworCisgICAgICAgIEF0dHJpYnV0ZVNldCByZXN1bHQgPSBjYWNoZWRLZXlTZXQ7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBBdHRyaWJ1dGVTZXQuY3JlYXRlS2V5U2V0KHN0eWxlVGFibGUpOworICAgICAgICAgICAgY2FjaGVkS2V5U2V0ID0gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDb2xsZWN0aW9uIGNvbnRhaW5pbmcgZXZlcnkgdmFsdWUgaW4gdGhpcyBBdHRyaWJ1dGVNYXAuCisgICAgICogQHJldHVybiBhIENvbGxlY3Rpb24gY29udGFpbmluZyBldmVyeSB2YWx1ZSBpbiB0aGlzIEF0dHJpYnV0ZU1hcAorICAgICAqLworICAgIHB1YmxpYyBDb2xsZWN0aW9uIHZhbHVlcygpIHsKKworICAgICAgICBDb2xsZWN0aW9uIHJlc3VsdCA9IGNhY2hlZFZhbHVlQ29sbGVjdGlvbjsKKworICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUNvbGxlY3Rpb24oc3R5bGVUYWJsZS52YWx1ZXMoKSk7CisgICAgICAgICAgICBjYWNoZWRWYWx1ZUNvbGxlY3Rpb24gPSByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIFNldCBjb250YWluaW5nIGFsbCBlbnRyaWVzIGluIHRoaXMgQXR0cmlidXRlTWFwLgorICAgICAqLworICAgIHB1YmxpYyBTZXQgZW50cnlTZXQoKSB7CisKKyAgICAgICAgU2V0IHJlc3VsdCA9IGNhY2hlZEVudHJ5U2V0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KHN0eWxlVGFibGUuZW50cnlTZXQoKSk7CisgICAgICAgICAgICBjYWNoZWRFbnRyeVNldCA9IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCByaHMpIHsKKworICAgICAgICBpZiAocmhzID09IHRoaXMpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJocyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBBdHRyaWJ1dGVNYXAgcmhzU3R5bGVTZXQgPSBudWxsOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByaHNTdHlsZVNldCA9IChBdHRyaWJ1dGVNYXApIHJoczsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN0eWxlVGFibGUuZXF1YWxzKHJoc1N0eWxlU2V0LnN0eWxlVGFibGUpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisKKyAgICAgICAgcmV0dXJuIHN0eWxlVGFibGUuaGFzaENvZGUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCisgICAgICAgIHJldHVybiBzdHlsZVRhYmxlLnRvU3RyaW5nKCk7CisgICAgfQorCisvLyA9PT09PT09PT09PT09PQorLy8gT3BlcmF0aW9ucworLy8gPT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEF0dHJpYnV0ZU1hcCB3aGljaCBjb250YWlucyBlbnRyaWVzIGluIHRoaXMgQXR0cmlidXRlTWFwLAorICAgICAqIGFsb25nIHdpdGggYW4gZW50cnkgZm9yIDxhdHRyaWJ1dGUsIHZhbHVlPi4gIElmIGF0dHJpYnV0ZQorICAgICAqIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIEF0dHJpYnV0ZU1hcCBpdHMgdmFsdWUgYmVjb21lcyB2YWx1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlTWFwIGFkZEF0dHJpYnV0ZShPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIHsKKworICAgICAgICAvLyB0cnkgdG8gb3B0aW1pemUgZm9yIGNhc2Ugd2hlcmUgPGtleSwgdmFsdWU+IGlzIGFscmVhZHkgdGhlcmU/CisgICAgICAgIEhhc2h0YWJsZSBuZXdUYWJsZSA9IG5ldyBIYXNodGFibGUoc3R5bGVUYWJsZS5zaXplKCkgKyAxLCBMT0FEX0ZBQ1RPUik7CisgICAgICAgIG5ld1RhYmxlLnB1dEFsbChzdHlsZVRhYmxlKTsKKyAgICAgICAgbmV3VGFibGUucHV0KGtleSwgdmFsdWUpOworICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU1hcChuZXdUYWJsZSwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEF0dHJpYnV0ZU1hcCB3aGljaCBjb250YWlucyBlbnRyaWVzIGluIHRoaXMgQXR0cmlidXRlTWFwCisgICAgICogYW5kIGluIHJocy4gIElmIGFuIGF0dHJpYnV0ZSBhcHBlYXJzIGluIGJvdGggU3R5bGVTZXRzIHRoZQorICAgICAqIHZhbHVlIGZyb20gcmhzIGlzIHVzZWQuCisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBhZGRBdHRyaWJ1dGVzKEF0dHJpYnV0ZU1hcCByaHMpIHsKKworICAgICAgICBpbnQgdGhpc1NpemUgPSBzaXplKCk7CisKKyAgICAgICAgaWYgKHRoaXNTaXplID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiByaHM7CisgICAgICAgIH0KKworICAgICAgICBpbnQgb3RoZXJTaXplID0gcmhzLnNpemUoKTsKKworICAgICAgICBpZiAob3RoZXJTaXplID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgSGFzaHRhYmxlIG5ld1RhYmxlID0gbmV3IEhhc2h0YWJsZSh0aGlzU2l6ZSArIG90aGVyU2l6ZSwgTE9BRF9GQUNUT1IpOworCisgICAgICAgIG5ld1RhYmxlLnB1dEFsbChzdHlsZVRhYmxlKTsKKyAgICAgICAgbmV3VGFibGUucHV0QWxsKHJocyk7CisKKyAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVNYXAobmV3VGFibGUsIGZhbHNlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBBdHRyaWJ1dGVNYXAgd2hpY2ggY29udGFpbnMgZW50cmllcyBpbiB0aGlzIEF0dHJpYnV0ZU1hcAorICAgICAqIGFuZCBpbiByaHMuICBJZiBhbiBhdHRyaWJ1dGUgYXBwZWFycyBpbiBib3RoIFN0eWxlU2V0cyB0aGUKKyAgICAgKiB2YWx1ZSBmcm9tIHJocyBpcyB1c2VkLgorICAgICAqIFRoZSBNYXAncyBrZXlzIGFuZCB2YWx1ZXMgbXVzdCBiZSBub24tbnVsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlTWFwIGFkZEF0dHJpYnV0ZXMoamF2YS51dGlsLk1hcCByaHMpIHsKKworICAgICAgICBpZiAocmhzIGluc3RhbmNlb2YgQXR0cmlidXRlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gYWRkQXR0cmlidXRlcygoQXR0cmlidXRlTWFwKXJocyk7CisgICAgICAgIH0KKworICAgICAgICBIYXNodGFibGUgbmV3VGFibGUgPSBuZXcgSGFzaHRhYmxlKHNpemUoKSArIHJocy5zaXplKCksIExPQURfRkFDVE9SKTsKKworICAgICAgICBuZXdUYWJsZS5wdXRBbGwoc3R5bGVUYWJsZSk7CisgICAgICAgIG5ld1RhYmxlLnB1dEFsbChyaHMpOworCisgICAgICAgIHJldHVybiBuZXcgQXR0cmlidXRlTWFwKG5ld1RhYmxlLCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQXR0cmlidXRlTWFwIHdpdGggdGhlIGVudHJpZXMgaW4gdGhpcyBBdHRyaWJ1dGVNYXAsIGJ1dAorICAgICAqIHdpdGhvdXQgYXR0cmlidXRlIGFzIGEga2V5LgorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgcmVtb3ZlQXR0cmlidXRlKE9iamVjdCBhdHRyaWJ1dGUpIHsKKworICAgICAgICBpZiAoIWNvbnRhaW5zS2V5KGF0dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgSGFzaHRhYmxlIG5ld1RhYmxlID0gbmV3IEhhc2h0YWJsZShzdHlsZVRhYmxlLnNpemUoKSwgTE9BRF9GQUNUT1IpOworICAgICAgICBuZXdUYWJsZS5wdXRBbGwoc3R5bGVUYWJsZSk7CisgICAgICAgIG5ld1RhYmxlLnJlbW92ZShhdHRyaWJ1dGUpOworCisgICAgICAgIHJldHVybiBuZXcgQXR0cmlidXRlTWFwKG5ld1RhYmxlLCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQXR0cmlidXRlTWFwIHdpdGggdGhlIGVudHJpZXMgb2YgdGhpcyBBdHRyaWJ1dGVNYXAgd2hvc2UKKyAgICAgKiBhdHRyaWJ1dGVzIGFyZSA8Yj5ub3Q8L2I+IGluIHRoZSBTZXQuCisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCByZW1vdmVBdHRyaWJ1dGVzKEF0dHJpYnV0ZVNldCBhdHRyaWJ1dGVzKSB7CisKKyAgICAgICAgU2V0IHNldCA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiByZW1vdmVBdHRyaWJ1dGVzKHNldCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQXR0cmlidXRlTWFwIHdpdGggdGhlIGVudHJpZXMgb2YgdGhpcyBBdHRyaWJ1dGVNYXAgd2hvc2UKKyAgICAgKiBhdHRyaWJ1dGVzIGFyZSA8Yj5ub3Q8L2I+IGluIHRoZSBTZXQuCisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCByZW1vdmVBdHRyaWJ1dGVzKFNldCBhdHRyaWJ1dGVzKSB7CisKKyAgICAgICAgLy8gQ3JlYXRlIG5ld1RhYmxlIG9uIGRlbWFuZDsgIGlmIG51bGwgYXQKKyAgICAgICAgLy8gZW5kIG9mIGl0ZXJhdGlvbiB0aGVuIHJldHVybiB0aGlzIHNldC4KKyAgICAgICAgLy8gU2hvdWxkIHdlIGludGVyc2VjdCBzdHlsZVRhYmxlLmtleVNldCB3aXRoCisgICAgICAgIC8vIGF0dHJpYnV0ZXMgaW5zdGVhZD8KKworICAgICAgICBIYXNodGFibGUgbmV3VGFibGUgPSBudWxsOworICAgICAgICBJdGVyYXRvciBhdHRySXRlciA9IGF0dHJpYnV0ZXMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGF0dHJJdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgT2JqZWN0IGN1cnJlbnQgPSBhdHRySXRlci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIHN0eWxlVGFibGUuY29udGFpbnNLZXkoY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobmV3VGFibGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBuZXdUYWJsZSA9IG5ldyBIYXNodGFibGUoc3R5bGVUYWJsZS5zaXplKCksIExPQURfRkFDVE9SKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3VGFibGUucHV0QWxsKHN0eWxlVGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdUYWJsZS5yZW1vdmUoY3VycmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3VGFibGUgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVNYXAobmV3VGFibGUsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQXR0cmlidXRlTWFwIHdpdGggdGhlIGtleXMgb2YgdGhpcyBBdHRyaWJ1dGVNYXAgd2hpY2gKKyAgICAgKiBhcmUgYWxzbyBpbiB0aGUgU2V0LiAgVGhlIHNldCBtdXN0IG5vdCBjb250YWluIG51bGwuCisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBpbnRlcnNlY3RXaXRoKEF0dHJpYnV0ZVNldCBhdHRyaWJ1dGVzKSB7CisKKyAgICAgICAgU2V0IHNldCA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiBpbnRlcnNlY3RXaXRoKHNldCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQXR0cmlidXRlTWFwIHdpdGggdGhlIGtleXMgb2YgdGhpcyBBdHRyaWJ1dGVNYXAgd2hpY2gKKyAgICAgKiBhcmUgYWxzbyBpbiB0aGUgU2V0LiAgVGhlIHNldCBtdXN0IG5vdCBjb250YWluIG51bGwuCisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBpbnRlcnNlY3RXaXRoKFNldCBhdHRyaWJ1dGVzKSB7CisKKyAgICAgICAgLy8gRm9yIG5vdywgZm9yZ2V0IGFib3V0IG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHdoZW4KKyAgICAgICAgLy8gdGhlIHJldHVybiB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvIHRoaXMgc2V0LgorCisgICAgICAgIGludCBhdHRyU2l6ZSA9IGF0dHJpYnV0ZXMuc2l6ZSgpOworICAgICAgICBpbnQgc3R5bGVUYWJsZVNpemUgPSBzdHlsZVRhYmxlLnNpemUoKTsKKyAgICAgICAgaW50IHNpemUgPSBNYXRoLm1pbihhdHRyU2l6ZSwgc3R5bGVUYWJsZVNpemUpOworICAgICAgICBIYXNodGFibGUgbmV3VGFibGUgPSBuZXcgSGFzaHRhYmxlKHNpemUsIExPQURfRkFDVE9SKTsKKworICAgICAgICBpZiAoYXR0clNpemUgPCBzdHlsZVRhYmxlU2l6ZSkgeworICAgICAgICAgICAgSXRlcmF0b3IgYXR0ckl0ZXIgPSBhdHRyaWJ1dGVzLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZSAoYXR0ckl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0IGN1cnJlbnQgPSBhdHRySXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBzdHlsZVRhYmxlLmdldChjdXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlLnB1dChjdXJyZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBJdGVyYXRvciBhdHRySXRlciA9IGtleVNldCgpLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZSAoYXR0ckl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0IGN1cnJlbnQgPSBhdHRySXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuY29udGFpbnMoY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3VGFibGUucHV0KGN1cnJlbnQsIHN0eWxlVGFibGUuZ2V0KGN1cnJlbnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU1hcChuZXdUYWJsZSwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFB1dCBhbGwgZW50cmllcyBpbiB0aGlzIEF0dHJpYnV0ZU1hcCBpbnRvIHRoZSBnaXZlbiBNYXAuCisgICAgICogQHBhcmFtIHJocyB0aGUgTWFwIGludG8gd2hpY2ggZW50cmllcyBhcmUgcGxhY2VkCisgICAgICovCisgICAgcHVibGljIHZvaWQgcHV0QWxsSW50byhqYXZhLnV0aWwuTWFwIHJocykgeworCisgICAgICAgIHJocy5wdXRBbGwodGhpcyk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVTZXQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVTZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Nzc3MWNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGxheW91dC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZVNldC5qYXZhCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBBdHRyaWJ1dGVTZXQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXM7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworLyoqCisgKiBBbiBBdHRyaWJ1dGVTZXQgaXMgYW4gaW1tdXRhYmxlIGNvbGxlY3Rpb24gb2YgdW5pcXVlIE9iamVjdHMuCisgKiBJdCBoYXMgc2V2ZXJhbCBvcGVyYXRpb25zCisgKiB3aGljaCByZXR1cm4gbmV3IEF0dHJpYnV0ZVNldCBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBBdHRyaWJ1dGVTZXQgaW1wbGVtZW50cyBTZXQgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIC8qKgorICAgICAqIEFuIEF0dHJpYnV0ZVNldCB3aXRoIG5vIG1lbWJlcnMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVTZXQgRU1QVFlfU0VUID0gbmV3IEF0dHJpYnV0ZVNldCgpOworCisgICAgcHJpdmF0ZSBIYXNodGFibGUgZWxlbWVudHM7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXJyU3RyaW5nID0gIkF0dHJpYnV0ZVNldCBpcyBpbW11dGFibGUuIjsKKworICAgIHByaXZhdGUgQXR0cmlidXRlU2V0KEhhc2h0YWJsZSBlbGVtZW50cykgeworCisgICAgICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYWNrYWdlIG9ubHkuICBGb3IgQXR0cmlidXRlTWFwIHVzZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgQXR0cmlidXRlU2V0IGNyZWF0ZUtleVNldChIYXNodGFibGUgaGFzaHRhYmxlKSB7CisKKyAgICAgICAgSGFzaHRhYmxlIG5ld0VsZW1lbnRzID0gbmV3IEhhc2h0YWJsZSgpOworCisgICAgICAgIEVudW1lcmF0aW9uIGUgPSBoYXNodGFibGUua2V5cygpOworICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgT2JqZWN0IG5leHQgPSBlLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBuZXdFbGVtZW50cy5wdXQobmV4dCwgbmV4dCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZVNldChuZXdFbGVtZW50cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3LCBlbXB0eSBBdHRyaWJ1dGVTZXQuICBUaGUgc2V0IGlzIHNlbWFudGljYWxseQorICAgICAqIGVxdWl2YWxlbnQgdG8gRU1QVFlfU0VULgorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVTZXQoKSB7CisKKyAgICAgICAgZWxlbWVudHMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IEF0dHJpYnV0ZVNldCB3aXRoIHRoZSBzaW5nbGUgZWxlbWVudCBlbGVtLgorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVTZXQoT2JqZWN0IGVsZW0pIHsKKworICAgICAgICBlbGVtZW50cyA9IG5ldyBIYXNodGFibGUoMSwgMSk7CisgICAgICAgIGVsZW1lbnRzLnB1dChlbGVtLCBlbGVtKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgQXR0cmlidXRlU2V0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIGluIHRoZSBhcnJheSBlbGVtcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlU2V0KE9iamVjdFtdIGVsZW1zKSB7CisKKyAgICAgICAgZWxlbWVudHMgPSBuZXcgSGFzaHRhYmxlKGVsZW1zLmxlbmd0aCwgMSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBPYmplY3QgbmV4dCA9IGVsZW1zW2ldOworICAgICAgICAgICAgZWxlbWVudHMucHV0KG5leHQsIG5leHQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIHNldCBpcyAwLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgc2V0IGlzIDAKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgeworCisgICAgICAgIHJldHVybiBlbGVtZW50cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBzZXQuCisgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgc2V0CisgICAgICovCisgICAgcHVibGljIGludCBzaXplKCkgeworCisgICAgICAgIHJldHVybiBlbGVtZW50cy5zaXplKCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCByaHMpIHsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGVxdWFscygoQXR0cmlidXRlU2V0KSByaHMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoQXR0cmlidXRlU2V0IHJocykgeworCisgICAgICAgIGlmIChyaHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmVxdWFscyhyaHMuZWxlbWVudHMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoaXMgc2V0IGNvbnRhaW5zIHRoZSBnaXZlbiBPYmplY3QKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgPGNvZGU+bzwvY29kZT4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhPYmplY3QgbykgeworCisgICAgICAgIE9iamVjdCB2YWx1ZSA9IGVsZW1lbnRzLmdldChvKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgYWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbgorICAgICAqIENvbGxlY3Rpb24KKyAgICAgKiBAcGFyYW0gY29sbCB0aGUgY29sbGVjdGlvbiB0byBjb21wYXJlIHdpdGgKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgYWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbgorICAgICAqIENvbGxlY3Rpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0FsbChDb2xsZWN0aW9uIGNvbGwpIHsKKworICAgICAgICByZXR1cm4gZWxlbWVudHMua2V5U2V0KCkuY29udGFpbnNBbGwoY29sbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIEVudW1lcmF0aW9uIG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIHNldC4KKyAgICAgKiBAcmV0dXJuIGFuIEVudW1lcmF0aW9uIG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIHNldAorICAgICAqLworICAgIHB1YmxpYyBFbnVtZXJhdGlvbiBlbGVtZW50cygpIHsKKworICAgICAgICByZXR1cm4gZWxlbWVudHMua2V5cygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBJdGVyYXRvciB3aXRoIHRoZSBlbGVtZW50cyBpbiB0aGlzIHNldC4KKyAgICAgKiBAcmV0dXJuIGFuIEl0ZXJhdG9yIHdpdGggdGhlIGVsZW1lbnRzIGluIHRoaXMgc2V0LgorICAgICAqIFRoZSBJdGVyYXRvciBjYW5ub3QgYmUgdXNlZCB0byBtb2RpZnkgdGhpcyBBdHRyaWJ1dGVTZXQuCisgICAgICovCisgICAgcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgeworCisgICAgICAgIHJldHVybiBuZXcgRW51bWVyYXRpb25JdGVyYXRvcihlbGVtZW50cy5rZXlzKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbGwgaW4gdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVsZW1lbnRzIGluIHRoaXMgc2V0LgorICAgICAqIEBwYXJhbSBzdG9yYWdlIGFuIGFycmF5IHRvIGZpbGwgd2l0aCB0aGlzIHNldCdzIGVsZW1lbnRzLgorICAgICAqIFRoZSBhcnJheSBjYW5ub3QgYmUgbnVsbC4KKyAgICAgKiBAcmV0dXJuIHRoZSA8dHQ+c3RvcmFnZTwvdHQ+IGFycmF5LgorICAgICAqLworICAgIHB1YmxpYyBPYmplY3RbXSB0b0FycmF5KE9iamVjdFtdIHN0b3JhZ2UpIHsKKworICAgICAgICBFbnVtZXJhdGlvbiBrZXlzID0gZWxlbWVudHMua2V5cygpOworICAgICAgICBpbnQgbj0wOworICAgICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgc3RvcmFnZVtuKytdID0ga2V5cy5uZXh0RWxlbWVudCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdG9yYWdlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBlbGVtZW50cyBpbiB0aGlzIHNldC4KKyAgICAgKiBAcmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIGVsZW1lbnRzIGluIHRoaXMgc2V0CisgICAgICovCisgICAgcHVibGljIE9iamVjdFtdIHRvQXJyYXkoKSB7CisKKyAgICAgICAgcmV0dXJuIHRvQXJyYXkobmV3IE9iamVjdFtzaXplKCldKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLgorICAgICAqIEBzZWUgI2FkZEVsZW1lbnQKKyAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gYWRkKE9iamVjdCBvKXsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKGVyclN0cmluZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLgorICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmUoT2JqZWN0IG8pIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKGVyclN0cmluZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLgorICAgICAqIEBzZWUgI3VuaW9uV2l0aAorICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBhZGRBbGwoQ29sbGVjdGlvbiBjb2xsKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbihlcnJTdHJpbmcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlICNzdWJ0cmFjdAorICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGwoQ29sbGVjdGlvbiBjb2xsKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbihlcnJTdHJpbmcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlICNpbnRlcnNlY3RXaXRoCisgICAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHJldGFpbkFsbChDb2xsZWN0aW9uIGNvbGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKGVyclN0cmluZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLgorICAgICAqIEBzZWUgI0VNUFRZX1NFVAorICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjbGVhcigpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKGVyclN0cmluZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIEF0dHJpYnV0ZVNldCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzIHNldAorICAgICAqIGFuZCB0aGUgZ2l2ZW4gZWxlbWVudAorICAgICAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGFkZAorICAgICAqIEByZXR1cm4gYW4gQXR0cmlidXRlU2V0IGxpa2UgdGhpcyBvbmUsIHdpdGggPGNvZGU+ZWxlbWVudDwvY29kZT4KKyAgICAgKiBhZGRlZAorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVTZXQgYWRkRWxlbWVudChPYmplY3QgZWxlbWVudCkgeworCisgICAgICAgIEhhc2h0YWJsZSBuZXdFbGVtZW50cyA9IChIYXNodGFibGUpIGVsZW1lbnRzLmNsb25lKCk7CisgICAgICAgIG5ld0VsZW1lbnRzLnB1dChlbGVtZW50LCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVTZXQobmV3RWxlbWVudHMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBBdHRyaWJ1dGVTZXQgd2hpY2ggaXMgdGhlIHVuaW9uIG9mCisgICAgICogdGhpcyBzZXQgd2l0aCB0aGUgZ2l2ZW4gc2V0LgorICAgICAqIEBwYXJhbSBzIHRoZSBzZXQgdG8gdW5pb24gd2l0aAorICAgICAqIEByZXR1cm4gYW4gQXR0cmlidXRlU2V0IG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIHNldCBvcgorICAgICAqIGluIDxjb2RlPnM8L2NvZGU+CisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZVNldCB1bmlvbldpdGgoQXR0cmlidXRlU2V0IHMpIHsKKworICAgICAgICBIYXNodGFibGUgbmV3RWxlbWVudHMgPSAoSGFzaHRhYmxlKSBlbGVtZW50cy5jbG9uZSgpOworCisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgT2JqZWN0IG5leHQgPSBpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIG5ld0VsZW1lbnRzLnB1dChuZXh0LCBuZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXcgQXR0cmlidXRlU2V0KG5ld0VsZW1lbnRzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYW4gQXR0cmlidXRlU2V0IHdoaWNoIGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YKKyAgICAgKiB0aGlzIHNldCB3aXRoIHRoZSBnaXZlbiBzZXQuCisgICAgICogQHBhcmFtIHMgdGhlIHNldCB0byBpbnRlcnNlY3Qgd2l0aAorICAgICAqIEByZXR1cm4gYW4gQXR0cmlidXRlU2V0IG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIHNldCB3aGljaAorICAgICAqIGFyZSBpbiA8Y29kZT5zPC9jb2RlPgorICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVTZXQgaW50ZXJzZWN0V2l0aChBdHRyaWJ1dGVTZXQgcykgeworCisgICAgICAgIEhhc2h0YWJsZSBuZXdFbGVtZW50cyA9IG5ldyBIYXNodGFibGUoKTsKKworICAgICAgICBJdGVyYXRvciBpdGVyID0gcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIE9iamVjdCBuZXh0ID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoZWxlbWVudHMuZ2V0KG5leHQpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBuZXdFbGVtZW50cy5wdXQobmV4dCwgbmV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZVNldChuZXdFbGVtZW50cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIEF0dHJpYnV0ZVNldCB3aXRoIHRoZSBlbGVtZW50cyBpbiB0aGlzIHNldCB3aGljaAorICAgICAqIGFyZSBub3QgaW4gdGhlIGdpdmVuIHNldC4KKyAgICAgKiBAcGFyYW0gcyB0aGUgc2V0IG9mIGVsZW1lbnRzIHRvIGV4Y2x1ZGUKKyAgICAgKiBAcmV0dXJuIGFuIEF0dHJpYnV0ZVNldCBvZiB0aGUgZWxlbWVudHMgaW4gdGhpcyBzZXQgd2hpY2gKKyAgICAgKiBhcmUgbm90IGluIDxjb2RlPnM8L2NvZGU+CisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZVNldCBzdWJ0cmFjdChBdHRyaWJ1dGVTZXQgcykgeworCisgICAgICAgIEhhc2h0YWJsZSBuZXdFbGVtZW50cyA9IChIYXNodGFibGUpIGVsZW1lbnRzLmNsb25lKCk7CisKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IHMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBuZXdFbGVtZW50cy5yZW1vdmUoaXRlci5uZXh0KCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVTZXQobmV3RWxlbWVudHMpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEVudW1lcmF0aW9uSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvciB7CisKKyAgICAgICAgcHJpdmF0ZSBFbnVtZXJhdGlvbiBlOworCisgICAgICAgIEVudW1lcmF0aW9uSXRlcmF0b3IoRW51bWVyYXRpb24gZSkgeworICAgICAgICAgICAgdGhpcy5lID0gZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKSB7CisgICAgICAgICAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBPYmplY3QgbmV4dCgpIHsKKyAgICAgICAgICAgIHJldHVybiBlLm5leHRFbGVtZW50KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oZXJyU3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0bGF5b3V0L2F0dHJpYnV0ZXMvTWFwLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0bGF5b3V0L2F0dHJpYnV0ZXMvTWFwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWE1ZDJhNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvYXR0cmlidXRlcy9NYXAuamF2YQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBNYXAuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXM7CisKKy8qKgorICogQSBNYXAgaXMgYSBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyAob3IgZW50cmllcyksIHdoZXJlIGVhY2gKKyAqIGtleSBpbiB0aGUgTWFwIGlzIHVuaXF1ZS4gIFRoaXMgaW50ZXJmYWNlIGlzIGEgc3Vic2V0IG9mIHRoZQorICogSkRLIDEuMiBNYXAgaW50ZXJmYWNlLiAgSXQgaXMgdXNlZCBieSBKREsgMS4xLWNvbXBhdGlibGUgY29kZS4KKyAqLworcHVibGljIGludGVyZmFjZSBNYXAgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgTWFwLgorICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgTWFwCisgICAgICovCisgICAgcHVibGljIGludCBzaXplKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIE1hcCBoYXMgbm8gZW50cmllcy4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBNYXAgaGFzIG5vIGVudHJpZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBrZXkuCisgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGtleS4gIElmIHRoZSBrZXkgZG9lcyBub3QgaGF2ZQorICAgICAqIGEgdmFsdWUgaW4gdGhpcyBNYXAsIG51bGwgaXMgcmV0dXJuZWQuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXQoT2JqZWN0IGtleSk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIE1hcCBjb250YWlucyB0aGUgZ2l2ZW4ga2V5LgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIE1hcCBjb250YWlucyB0aGUgZ2l2ZW4ga2V5CisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNLZXkoT2JqZWN0IGtleSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dGxheW91dC9hdHRyaWJ1dGVzL1RleHRBdHRyaWJ1dGUuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvYXR0cmlidXRlcy9UZXh0QXR0cmlidXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDZkNzI2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRsYXlvdXQvYXR0cmlidXRlcy9UZXh0QXR0cmlidXRlLmphdmEKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRleHRBdHRyaWJ1dGUuamF2YSx2ICQgJFJldmlzaW9uOiAxLjMgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXM7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudGV4dC5BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IuQXR0cmlidXRlOworaW1wb3J0IGphdmEuaW8uSW52YWxpZE9iamVjdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGEgbnVtYmVyIG9mIGtleXMgKG9yIGF0dHJpYnV0ZXMpIGZvciBzcGVjaWZ5aW5nIHRleHQgc3R5bGVzCisgKiBpbiBhIE1hcC4gIEEgdGV4dCBzdHlsZSBpcyBhIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzLCB3aGVyZQorICogdGhlIGtleSByZXByZXNlbnRzIGEgY2VydGFpbiBjaGFyYWN0ZXJpc3RpYyAoc3VjaCBhcyBzaXplKSBhbmQKKyAqIHRoZSB2YWx1ZSB0ZWxscyBob3cgdGhhdCBjaGFyYWN0ZXJpc3RpYyBpcyByZWFsaXplZCAoaWUgd2hhdCB0aGUKKyAqIHNpemUgaXMpLgorICogPHA+CisgKiBBbGwgb2YgdGhlIGF0dHJpYnV0ZXMgaW4gVGV4dEF0dHJpYnV0ZSBzcGVjaWZ5IGEgY2xhc3MgZm9yIHRoZWlyIHZhbHVlLgorICogTWFwIGRvZXMgbm90IGVuZm9yY2UgdGhlc2UgY2xhc3Mgc3BlY2lmaWNhdGlvbnM7ICBob3dldmVyLCB0ZXh0IHJlbmRlcmluZyBjb2RlCisgKiB3aWxsIHRlbmQgdG8gZmFpbCB3aXRoIGEgQ2xhc3NDYXN0RXhjZXB0aW9uIGlmIGEga2V5J3MgdmFsdWUKKyAqIGhhcyBhbiB1bmV4cGVjdGVkIGNsYXNzLgorICogPHA+CisgKiBTb21lIGF0dHJpYnV0ZXMgYXJlIG1lYW5pbmdmdWwgZm9yIGVudGlyZSBwYXJhZ3JhcGhzLCBub3QgaW5kaXZpZHVhbAorICogY2hhcmFjdGVycy4gIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIGRvY3VtZW50ZWQgYXMgYXBwbHlpbmcgdG8gcGFyYWdyYXBocy4KKyAqIEFsbCBvdGhlciBhdHRyaWJ1dGVzIGFwcGx5IHRvIGNoYXJhY3RlcnMuCisgKiA8cD4KKyAqIE1hbnkgb2YgdGhlIGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXMgaW4gdGhpcyBjbGFzcworICogYXJlIHRha2VuIGZyb20gdGhlIEpESyAxLjIKKyAqIDxjb2RlPmphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZSBjbGFzczwvY29kZT4uCisgKiBAc2VlIE1hcAorICovCitwdWJsaWMgY2xhc3MgVGV4dEF0dHJpYnV0ZSBleHRlbmRzIEF0dHJpYnV0ZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIYXNodGFibGUgaW5zdGFuY2VNYXAgPSBuZXcgSGFzaHRhYmxlKDkpOworCisgICAgcHJvdGVjdGVkIFRleHRBdHRyaWJ1dGUoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgc3VwZXIobmFtZSk7CisgICAgICAgIGlmICh0aGlzLmdldENsYXNzKCkgPT0gVGV4dEF0dHJpYnV0ZS5jbGFzcykgeworICAgICAgICAgICAgaW5zdGFuY2VNYXAucHV0KG5hbWUsIHRoaXMpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIE9iamVjdCByZWFkUmVzb2x2ZSgpIHRocm93cyBJbnZhbGlkT2JqZWN0RXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHRoaXMuZ2V0Q2xhc3MoKSAhPSBUZXh0QXR0cmlidXRlLmNsYXNzKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9iamVjdEV4Y2VwdGlvbigic3ViY2xhc3MgZGlkbid0IGNvcnJlY3RseSBpbXBsZW1lbnQgcmVhZFJlc29sdmUiKTsKKyAgICAgICAgfQorCisgICAgICAgIFRleHRBdHRyaWJ1dGUgaW5zdGFuY2UgPSAoVGV4dEF0dHJpYnV0ZSkgaW5zdGFuY2VNYXAuZ2V0KGdldE5hbWUoKSk7CisgICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9iamVjdEV4Y2VwdGlvbigidW5rbm93biBhdHRyaWJ1dGUgbmFtZSIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgRk9OVCA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5GT05UOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgRkFNSUxZID0gamF2YS5hd3QuZm9udC5UZXh0QXR0cmlidXRlLkZBTUlMWTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IFdFSUdIVCA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5XRUlHSFQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBGbG9hdCBXRUlHSFRfQk9MRCA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5XRUlHSFRfQk9MRDsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IFBPU1RVUkUgPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuUE9TVFVSRTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEZsb2F0IFBPU1RVUkVfT0JMSVFVRSA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5QT1NUVVJFX09CTElRVUU7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBTSVpFID0gamF2YS5hd3QuZm9udC5UZXh0QXR0cmlidXRlLlNJWkU7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBTVVBFUlNDUklQVCA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5TVVBFUlNDUklQVDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEludGVnZXIgU1VQRVJTQ1JJUFRfU1VQRVIgPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuU1VQRVJTQ1JJUFRfU1VQRVI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBJbnRlZ2VyIFNVUEVSU0NSSVBUX1NVQiA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5TVVBFUlNDUklQVF9TVUI7CisKKyAgICAvKioKKyAgICAgKiBBdHRyaWJ1dGUga2V5IGZvciB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvciBhZG9ybm1lbnQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgRk9SRUdST1VORCA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5GT1JFR1JPVU5EOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IEJBQ0tHUk9VTkQgPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuQkFDS0dST1VORDsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IFVOREVSTElORSA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBJbnRlZ2VyIFVOREVSTElORV9PTiA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkVfT047CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBTVFJJS0VUSFJPVUdIID0gamF2YS5hd3QuZm9udC5UZXh0QXR0cmlidXRlLlNUUklLRVRIUk9VR0g7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBCb29sZWFuIFNUUklLRVRIUk9VR0hfT04gPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuU1RSSUtFVEhST1VHSF9PTjsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IE9GRlNFVCA9IG5ldyBUZXh0QXR0cmlidXRlKCJvZmZzZXQiKTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IENIQVJfUkVQTEFDRU1FTlQgPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuQ0hBUl9SRVBMQUNFTUVOVDsKKy8vIFBhcmFncmFwaCBTdHlsZXMKKworLy8gdmFsdWVzIGFyZSBGbG9hdHM6CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgRVhUUkFfTElORV9TUEFDSU5HID0gbmV3IFRleHRBdHRyaWJ1dGUoImV4dHJhX2xpbmVfc3BhY2luZyIpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IEVYVFJBX0ZJUlNUX0xJTkVfU1BBQ0lORyA9IG5ldyBUZXh0QXR0cmlidXRlKCJleHRyYV9maXJzdF9saW5lX3NwYWNpbmciKTsKKworICAgIC8qKgorICAgICAqIEFtb3VudCBiZXlvbmQgbGVhZGluZyBtYXJnaW4gdG8gaW5kZW50IHRoZSBmaXJzdCBsaW5lIG9mIGEgcGFyYWdyYXBoLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IEZJUlNUX0xJTkVfSU5ERU5UID0gbmV3IFRleHRBdHRyaWJ1dGUoImZpcnN0X2xpbmVfaW5kZW50Iik7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBNSU5fTElORV9TUEFDSU5HID0gbmV3IFRleHRBdHRyaWJ1dGUoIm1pbl9saW5lX3NwYWNpbmciKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBNSU5fRklSU1RfTElORV9TUEFDSU5HID0gbmV3IFRleHRBdHRyaWJ1dGUoIm1pbl9maXJzdF9saW5lX3NwYWNpbmciKTsKKworICAgIC8qKgorICAgICAqIEZsdXNoIGxpbmVzIGxlZnQsIHJpZ2h0LCBvciBjZW50ZXIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgTElORV9GTFVTSCA9IG5ldyBUZXh0QXR0cmlidXRlKCJsaW5lX2ZsdXNoIik7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEludGVnZXIgRkxVU0hfTEVBRElORyA9IG5ldyBJbnRlZ2VyKDApOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgSW50ZWdlciBGTFVTSF9DRU5URVIgPSBuZXcgSW50ZWdlcigxKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEludGVnZXIgRkxVU0hfVFJBSUxJTkcgPSBuZXcgSW50ZWdlcigyKTsKKyAgICAvKioKKyAgICAgKiBWYWx1ZSBvZiA8Y29kZT5MSU5FX0ZMVVNIPC9jb2RlPiBmb3IgZnVsbCBqdXN0aWZpY2F0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgSW50ZWdlciBGVUxMWV9KVVNUSUZJRUQgPSBuZXcgSW50ZWdlcigzKTsKKworICAgIC8qKgorICAgICAqIExlYWRpbmcgYW5kIHRyYWlsaW5nIG1hcmdpbiBpbiBwYXJhZ3JhcGguCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgTEVBRElOR19NQVJHSU4gPSBuZXcgVGV4dEF0dHJpYnV0ZSgibGVhZGluZ19tYXJnaW4iKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBUUkFJTElOR19NQVJHSU4gPSBuZXcgVGV4dEF0dHJpYnV0ZSgidHJhaWxpbmdfbWFyZ2luIik7CisKKyAgICAvKioKKyAgICAgKiBUYWIgcnVsZXIuICBWYWx1ZXMgYXJlIE1UYWJSdWxlciBpbnN0YW5jZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgVEFCX1JVTEVSID0gbmV3IFRleHRBdHRyaWJ1dGUoInRhYl9ydWxlciIpOworICAgIAorICAgIC8qKgorICAgICAqIEF0dHJpYnV0ZSBrZXkgZm9yIHRoZSBydW4gZGlyZWN0aW9uIG9mIHRoZSBsaW5lLgorICAgICAqCisgICAgICogPFA+PFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4KKyAgICAgKiA8VFI+CisgICAgICogPFRIIFZBTElHTj0iVE9QIiBBTElHTj0iUklHSFQiPjxQIEFMSUdOPVJJR0hUPktleTwvVEg+CisgICAgICogPFREIFZBTElHTj0iVE9QIj5SVU5fRElSRUNUSU9OPC9URD48L1RSPgorICAgICAqIDxUUj4KKyAgICAgKiA8VEggVkFMSUdOPSJUT1AiIEFMSUdOPSJSSUdIVCI+PFAgQUxJR049UklHSFQ+VmFsdWU8L1RIPgorICAgICAqIDxURCBWQUxJR049IlRPUCI+Qm9vbGVhbjwvVEQ+PC9UUj4KKyAgICAgKiA8VFI+CisgICAgICogPFRIIFZBTElHTj0iVE9QIiBBTElHTj0iUklHSFQiPjxQIEFMSUdOPVJJR0hUPkNvbnN0YW50czwvVEg+CisgICAgICogPFREIFZBTElHTj0iVE9QIj5SVU5fRElSRUNUSU9OX0xUUiA9IHRydWUsIFJVTl9ESVJFQ1RJT05fUlRMID0gZmFsc2UKKyAgICAgKiA8L1REPjwvVFI+CisgICAgICogPFRSPgorICAgICAqIDxUSCBWQUxJR049IlRPUCIgQUxJR049IlJJR0hUIj48UCBBTElHTj1SSUdIVD5EZWZhdWx0PC9USD4KKyAgICAgKiA8VEQgVkFMSUdOPSJUT1AiPlVzZSB0aGUgZGVmYXVsdCBVbmljb2RlIGJhc2UgZGlyZWN0aW9uIGZyb20gdGhlIEJJREkgCisgICAgICogYWxnb3JpdGhtLjwvVEQ+PC9UUj4KKyAgICAgKiA8VFI+CisgICAgICogPFRIIFZBTElHTj0iVE9QIiBBTElHTj0iUklHSFQiPjxQIEFMSUdOPVJJR0hUPkRlc2NyaXB0aW9uPC9USD4KKyAgICAgKiA8VEQgVkFMSUdOPSJUT1AiPjxQPlNwZWNpZmllcyB3aGljaCBiYXNlIHJ1biBkaXJlY3Rpb24gdG8gdXNlIHdoZW4gCisgICAgICogcG9zaXRpb25pbmcgbWl4ZWQgZGlyZWN0aW9uYWwgcnVucyB3aXRoaW4gYSBwYXJhZ3JhcGguIElmIHRoaXMgdmFsdWUgaXMKKyAgICAgKiBSVU5fRElSRUNUSU9OX0RFRkFVTFQsIDxjb2RlPlRleHRMYXlvdXQ8L2NvZGU+IHVzZXMgdGhlIGRlZmF1bHQgVW5pY29kZQorICAgICAqIGJhc2UgZGlyZWN0aW9uIGZyb20gdGhlIEJJREkgYWxnb3JpdGhtLjwvUD4KKyAgICAgKiA8UD48ST5UaGlzIGF0dHJpYnV0ZSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBvdmVyIHRoZSB3aG9sZSAKKyAgICAgKiBwYXJhZ3JhcGguPC9JPjwvVEQ+PC9UUj4KKyAgICAgKiA8L1RBQkxFPgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IFJVTl9ESVJFQ1RJT04gPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuUlVOX0RJUkVDVElPTjsKKworICAgIC8qKgorICAgICAqIExlZnQtdG8tcmlnaHQgcnVuIGRpcmVjdGlvbi4KKyAgICAgKiBAc2VlICNSVU5fRElSRUNUSU9OCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBCb29sZWFuIFJVTl9ESVJFQ1RJT05fTFRSID0gamF2YS5hd3QuZm9udC5UZXh0QXR0cmlidXRlLlJVTl9ESVJFQ1RJT05fTFRSOworCisgICAgLyoqCisgICAgICogUmlnaHQtdG8tbGVmdCBydW4gZGlyZWN0aW9uLgorICAgICAqIEBzZWUgI1JVTl9ESVJFQ1RJT04KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEJvb2xlYW4gUlVOX0RJUkVDVElPTl9SVEwgPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuUlVOX0RJUkVDVElPTl9SVEw7CisKKyAgICAvKioKKyAgICAgKiBBdHRyaWJ1dGUga2V5IGZvciB0aGUgZW1iZWRkaW5nIGxldmVsIGZvciBuZXN0ZWQgYmlkaXJlY3Rpb25hbCBydW5zLgorICAgICAqCisgICAgICogPFA+PFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4KKyAgICAgKiA8VFI+CisgICAgICogPFRIIFZBTElHTj0iVE9QIiBBTElHTj0iUklHSFQiPjxQIEFMSUdOPVJJR0hUPktleTwvVEg+CisgICAgICogPFREIFZBTElHTj0iVE9QIj5CSURJX0VNQkVERElORzwvVEQ+PC9UUj4KKyAgICAgKiA8VFI+CisgICAgICogPFRIIFZBTElHTj0iVE9QIiBBTElHTj0iUklHSFQiPjxQIEFMSUdOPVJJR0hUPlZhbHVlPC9USD4KKyAgICAgKiA8VEQgVkFMSUdOPSJUT1AiPkludGVnZXI8L1REPjwvVFI+CisgICAgICogPFRSPgorICAgICAqIDxUSCBWQUxJR049IlRPUCIgQUxJR049IlJJR0hUIj48UCBBTElHTj1SSUdIVD5MaW1pdHM8L1RIPgorICAgICAqIDxURCBWQUxJR049IlRPUCI+UG9zaXRpdmUgdmFsdWVzIDEgdGhyb3VnaCAxNSBhcmUgPEk+ZW1iZWRkaW5nPC9JPgorICAgICAqIGxldmVscywgbmVnYXRpdmUgdmFsdWVzPEJSPiB0aHJvdWdoIC0xNSBhcmUgPEk+b3ZlcnJpZGU8L0k+IGxldmVscworICAgICAqIDwvVEQ+PC9UUj4KKyAgICAgKiA8VFI+CisgICAgICogPFRIIFZBTElHTj0iVE9QIiBBTElHTj0iUklHSFQiPjxQIEFMSUdOPVJJR0hUPkRlZmF1bHQ8L1RIPgorICAgICAqIDxURCBWQUxJR049IlRPUCI+VXNlIHN0YW5kYXJkIEJJREkgdG8gY29tcHV0ZSBsZXZlbHMgZnJvbSBmb3JtYXR0aW5nCisgICAgICogY2hhcmFjdGVycyBpbiB0aGUgdGV4dC48L1REPjwvVFI+CisgICAgICogPFRSPgorICAgICAqIDxUSCBWQUxJR049IlRPUCIgQUxJR049IlJJR0hUIj48UCBBTElHTj1SSUdIVD5EZXNjcmlwdGlvbjwvVEg+CisgICAgICogPFREIFZBTElHTj0iVE9QIj5TcGVjaWZpZXMgdGhlIGJpZGkgZW1iZWRkaW5nIGxldmVsIG9mIHRoZSBjaGFyYWN0ZXIuCisgICAgICogV2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGFueXdoZXJlIGluIGEgcGFyYWdyYXBoLCB0aGVuIHRoZSAKKyAgICAgKiBVbmljb2RlIGNoYXJhY3RlcnMgUkxPLCBMUk8sIFJMRSwgTFJFLCBQREYgYXJlIGRpc3JlZ2FyZGVkIGluIHRoZSBCSURJIAorICAgICAqIGFuYWx5c2lzIG9mIHRoYXQgcGFyYWdyYXBoLiAKKyAgICAgKiBTZWUgdGhlIFVuaWNvZGUgU3RhbmRhcmQgdi4gMi4wLCBzZWN0aW9uIDMtMTEuCisgICAgICogPC9URD48L1RSPgorICAgICAqIDwvVEFCTEU+CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgQklESV9FTUJFRERJTkcgPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuQklESV9FTUJFRERJTkc7CisKKyAgICAvKioKKyAgICAgKiBBdHRyaWJ1dGUga2V5IGZvciB0aGUganVzdGlmaWNhdGlvbiBvZiBhIHBhcmFncmFwaC4KKyAgICAgKgorICAgICAqIDxQPjxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+CisgICAgICogPFRSPgorICAgICAqIDxUSCBWQUxJR049IlRPUCIgQUxJR049IlJJR0hUIj48UCBBTElHTj1SSUdIVD5LZXk8L1RIPgorICAgICAqIDxURCBWQUxJR049IlRPUCI+SlVTVElGSUNBVElPTjwvVEQ+PC9UUj4KKyAgICAgKiA8VFI+CisgICAgICogPFRIIFZBTElHTj0iVE9QIiBBTElHTj0iUklHSFQiPjxQIEFMSUdOPVJJR0hUPlZhbHVlPC9USD4KKyAgICAgKiA8VEQgVkFMSUdOPSJUT1AiPkZsb2F0PC9URD48L1RSPgorICAgICAqIDxUUj4KKyAgICAgKiA8VEggVkFMSUdOPSJUT1AiIEFMSUdOPSJSSUdIVCI+PFAgQUxJR049UklHSFQ+TGltaXRzPC9USD4KKyAgICAgKiA8VEQgVkFMSUdOPSJUT1AiPjAuMCB0aHJvdWdoMS4wPC9URD48L1RSPgorICAgICAqIDxUUj4KKyAgICAgKiA8VEggVkFMSUdOPSJUT1AiIEFMSUdOPSJSSUdIVCI+PFAgQUxJR049UklHSFQ+RGVmYXVsdDwvVEg+CisgICAgICogPFREIFZBTElHTj0iVE9QIj4xLjA8L1REPjwvVFI+CisgICAgICogPFRSPgorICAgICAqIDxUSCBWQUxJR049IlRPUCIgQUxJR049IlJJR0hUIj48UCBBTElHTj1SSUdIVD5EZXNjcmlwdGlvbjwvVEg+CisgICAgICogPFREIFZBTElHTj0iVE9QIj48UD5TcGVjaWZpZXMgd2hpY2ggZnJhY3Rpb24gb2YgdGhlIGV4dHJhIHNwYWNlIHRvIHVzZSAKKyAgICAgKiB3aGVuIGp1c3RpZmljYXRpb24gaXMgcmVxdWVzdGVkLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGxpbmUgaXMgNTAgcG9pbnRzCisgICAgICogd2lkZSBhbmQgdGhlIG1hcmdpbnMgYXJlIDcwIHBvaW50cyBhcGFydCwgYSB2YWx1ZSBvZiAwLjUgbWVhbnMgdGhhdCB0aGUKKyAgICAgKiBsaW5lIGlzIHBhZGRlZCB0byByZWFjaCBhIHdpZHRoIG9mIDYwIHBvaW50cy48L1A+CisgICAgICogPFA+PEk+VGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUgb3ZlciB0aGUgd2hvbGUKKyAgICAgKiBwYXJhZ3JhcGguPC9JPjwvVEQ+PC9UUj4KKyAgICAgKiA8L1RBQkxFPgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IEpVU1RJRklDQVRJT04gPSBqYXZhLmF3dC5mb250LlRleHRBdHRyaWJ1dGUuSlVTVElGSUNBVElPTjsKKworICAgIC8qKgorICAgICAqIEp1c3RpZnkgdGhlIGxpbmUgdG8gdGhlIGZ1bGwgcmVxdWVzdGVkIHdpZHRoLgorICAgICAqIEBzZWUgI0pVU1RJRklDQVRJT04KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEZsb2F0IEpVU1RJRklDQVRJT05fRlVMTCA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5KVVNUSUZJQ0FUSU9OX0ZVTEw7CisKKyAgICAvKioKKyAgICAgKiBEbyBub3QgYWxsb3cgdGhlIGxpbmUgdG8gYmUganVzdGlmaWVkLgorICAgICAqIEBzZWUgI0pVU1RJRklDQVRJT04KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEZsb2F0IEpVU1RJRklDQVRJT05fTk9ORSA9IGphdmEuYXd0LmZvbnQuVGV4dEF0dHJpYnV0ZS5KVVNUSUZJQ0FUSU9OX05PTkU7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvQVRleHRQYW5lbEltcGwuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9BVGV4dFBhbmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlMmZlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvQVRleHRQYW5lbEltcGwuamF2YQpAQCAtMCwwICsxLDc1NSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQVRleHRQYW5lbEltcGwuamF2YSx2ICQgJFJldmlzaW9uOiAxLjMgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGphdmEuYXd0LkFkanVzdGFibGU7CitpbXBvcnQgamF2YS5hd3QuQ29tcG9uZW50OworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzOworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5DbGlwYm9hcmQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlU2V0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZWRUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdC5UZXh0T2Zmc2V0OworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBUZXh0UGFuZWwgYW5kIEpUZXh0UGFuZWwuCisgKi8KK2ZpbmFsIGNsYXNzIEFUZXh0UGFuZWxJbXBsIHsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgICAgICAgICAgICAgIAorICAgIHByaXZhdGUgUnVuU3RyYXRlZ3kgZlJ1blN0cmF0ZWd5ID0gbnVsbDsKKyAgICBwcml2YXRlIFRleHRDb21wb25lbnQgZlRleHRDb21wb25lbnQgPSBudWxsOworICAgIHByaXZhdGUgVGV4dFNlbGVjdGlvbiBmU2VsZWN0aW9uID0gbnVsbDsKKyAgICBwcml2YXRlIFRleHRFZGl0QmVoYXZpb3IgZkVkaXRCZWhhdmlvciA9IG51bGw7CisgICAgcHJpdmF0ZSBNVGV4dCBmVGV4dCA9IG51bGw7CisKKyAgICBwcml2YXRlIFBhbmVsRXZlbnRCcm9hZGNhc3RlciBmQnJvYWRjYXN0ZXI7CisgICAgcHJpdmF0ZSBLZXlSZW1hcCBmUmVtYXAgPSBLZXlSZW1hcC5nZXRJZGVudGl0eVJlbWFwKCk7CisKKyAgICAvLyBUaGlzIGlzIGEgbGl0dGxlIHVnbHkuICBUZXh0UGFuZWwgc3VwcG9ydHMgaXRzIG1vZGlmaWVkCisgICAgLy8gZmxhZyB3aGV0aGVyIG9yIG5vdCBpdCBpcyBlZGl0YWJsZSwgb3IgZXZlbiBzZWxlY3RhYmxlLgorICAgIC8vIFNvIGlmIHRoZXJlJ3Mgbm8gY29tbWFuZCBsb2cgdG8ga2VlcCB0cmFjayBvZiB0aGUgZmxhZworICAgIC8vIHN0YXRlIHRoZW4gaXRzIGRvbmUgcmlnaHQgaGVyZSBpbiBUZXh0UGFuZWwuICBJZiB0aGUKKyAgICAvLyBwYW5lbCBpcyBlZGl0YWJsZSB0aGlzIGZsYWcgaXMgaWdub3JlZC4KKyAgICBwcml2YXRlIGJvb2xlYW4gZk1vZGlmaWVkID0gZmFsc2U7CisKKyAgICBzdGF0aWMgZmluYWwgVGV4dFBhbmVsU2V0dGluZ3MgZmdEZWZhdWx0U2V0dGluZ3MgPSBuZXcgVGV4dFBhbmVsU2V0dGluZ3MoKTsKKworICAgIHN0YXRpYyBUZXh0UGFuZWxTZXR0aW5ncyBnZXREZWZhdWx0U2V0dGluZ3MoKSB7CisKKyAgICAgICAgcmV0dXJuIChUZXh0UGFuZWxTZXR0aW5ncykgZmdEZWZhdWx0U2V0dGluZ3MuY2xvbmUoKTsKKyAgICB9CisgICAgCisgICAgQVRleHRQYW5lbEltcGwoUnVuU3RyYXRlZ3kgcnVuU3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgVGV4dFBhbmVsU2V0dGluZ3Mgc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgTUNvbnN0VGV4dCBpbml0aWFsVGV4dCwKKyAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmQgY2xpcGJvYXJkLAorICAgICAgICAgICAgICAgICAgIE1UZXh0UGFuZWwgY2xpZW50LAorICAgICAgICAgICAgICAgICAgIEFkanVzdGFibGUgaG9yelNiLAorICAgICAgICAgICAgICAgICAgIEFkanVzdGFibGUgdmVydFNiKSB7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBmUnVuU3RyYXRlZ3kgPSBydW5TdHJhdGVneTsKKyAgICAgICAgZkJyb2FkY2FzdGVyID0gbmV3IFBhbmVsRXZlbnRCcm9hZGNhc3RlcihjbGllbnQpOworCisgICAgICAgIFNjcm9sbGVyIHNjcm9sbGVyID0gbnVsbDsKKyAgICAgICAgaWYgKHNldHRpbmdzLmdldFNjcm9sbGFibGUoKSkgeworICAgICAgICAgICAgc2Nyb2xsZXIgPSBuZXcgU2Nyb2xsZXIoaG9yelNiLCB2ZXJ0U2IpOworICAgICAgICB9CisKKyAgICAgICAgU3R5bGVkVGV4dENsaXBib2FyZCB0ZXh0Q2xpcGJvYXJkID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZWRUZXh0Q2xpcGJvYXJkLmdldENsaXBib2FyZEZvcihjbGlwYm9hcmQpOworCisgICAgICAgIGZUZXh0ID0gbmV3IFN0eWxlZFRleHQoKTsKKyAgICAgICAgaWYgKGluaXRpYWxUZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZUZXh0LmFwcGVuZChpbml0aWFsVGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBmVGV4dENvbXBvbmVudCA9IG5ldyBUZXh0Q29tcG9uZW50KGZUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmdldERlZmF1bHRWYWx1ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5nZXRXcmFwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRDb21wb25lbnQuV0lORE9XX1dJRFRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRDb21wb25lbnQuREVGQVVMVF9JTlNFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q2xpcGJvYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmdldFNjcm9sbGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmQnJvYWRjYXN0ZXIpOworCisgICAgICAgIGlmIChzY3JvbGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICBzY3JvbGxlci5zZXRDbGllbnQoZlRleHRDb21wb25lbnQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBNYXkgaGF2ZSB0byB3YWl0IHVudGlsIGNvbXBvbmVudCBoYXMgaG9zdCB0byBkbyB0aGlzOgorICAgICAgICBpZiAoc2V0dGluZ3MuZ2V0U2VsZWN0YWJsZSgpKSB7CisgICAgICAgICAgICBmU2VsZWN0aW9uID0gbmV3IFRleHRTZWxlY3Rpb24oZlRleHRDb21wb25lbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZCcm9hZGNhc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmUnVuU3RyYXRlZ3kpOworICAgICAgICAgICAgZlNlbGVjdGlvbi5hZGRUb093bmVyKGZUZXh0Q29tcG9uZW50KTsKKyAgICAgICAgICAgIGlmIChzZXR0aW5ncy5nZXRFZGl0YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgZkVkaXRCZWhhdmlvciA9IG5ldyBUZXh0RWRpdEJlaGF2aW9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZUZXh0Q29tcG9uZW50LCBmU2VsZWN0aW9uLCBmQnJvYWRjYXN0ZXIsIGZSZW1hcCk7CisgICAgICAgICAgICAgICAgZkVkaXRCZWhhdmlvci5hZGRUb093bmVyKGZUZXh0Q29tcG9uZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBGYWtlQ29tcG9uZW50IGdldFRleHRDb21wb25lbnQoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZlRleHRDb21wb25lbnQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCB0aGUgZ2l2ZW4gVGV4dFBhbmVsTGlzdGVuZXIgdG8gdGhlIGxpc3RlbmVycyB3aGljaCB3aWxsCisgICAgICogcmVjZWl2ZSB1cGRhdGUgbm90aWZpY2F0aW9ucyBmcm9tIHRoaXMgVGV4dFBhbmVsLgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gYWRkCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoVGV4dFBhbmVsTGlzdGVuZXIgbGlzdGVuZXIpIHsKKworICAgICAgICBmQnJvYWRjYXN0ZXIuYWRkTGlzdGVuZXIobGlzdGVuZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZSB0aGUgZ2l2ZW4gVGV4dFBhbmVsTGlzdGVuZXIgZnJvbSB0aGUgbGlzdGVuZXJzIHdoaWNoIHdpbGwKKyAgICAgKiByZWNlaXZlIHVwZGF0ZSBub3RpZmljYXRpb25zIGZyb20gdGhpcyBUZXh0UGFuZWwuCisgICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byByZW1vdmUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihUZXh0UGFuZWxMaXN0ZW5lciBsaXN0ZW5lcikgeworCisgICAgICAgIGZCcm9hZGNhc3Rlci5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogWW91IGtub3cgd2hhdCB0aGlzIGRvZXMuLi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgcGluKGludCB2YWx1ZSwgaW50IG1pbiwgaW50IG1heCkgeworCisgICAgICAgIGlmIChtaW4gPiBtYXgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcmFuZ2UiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZSA8IG1pbikgeworICAgICAgICAgICAgdmFsdWUgPSBtaW47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBtYXgpIHsKKyAgICAgICAgICAgIHZhbHVlID0gbWF4OworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKy8vPT09PT09PT09PT09CisvLyBUZXh0IEFjY2VzcworLy89PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZG9jdW1lbnQgdG8gPHR0Pm5ld1RleHQ8L3R0Pi4gIFRoaXMgb3BlcmF0aW9uCisgICAgICogbW9kaWZpZXMgdGhlIHRleHQgaW4gdGhlIFRleHRQYW5lbC4gIEl0IGRvZXMgbm90IG1vZGlmeSBvciBhZG9wdAorICAgICAqIDx0dD5uZXdUZXh0PC90dD4uICBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzZWxlY3Rpb24gYW4gaW5zZXJ0aW9uIHBvaW50IGF0CisgICAgICogdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCB3aGljaCB3aWxsIHJlcGxhY2UgdGhlIGN1cnJlbnQgdGV4dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KE1Db25zdFRleHQgbmV3VGV4dCkgeworCisgICAgICAgIHJlcGxhY2VSYW5nZShuZXdUZXh0LCAwLCBnZXRUZXh0TGVuZ3RoKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGVuZCB0aGUgZ2l2ZW4gdGV4dCB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gIEVxdWl2YWxlbnQgdG8KKyAgICAgKiA8dHQ+aW5zZXJ0KG5ld1RleHQsIGdldFRleHRMZW5ndGgoKSk8L3R0Pi4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCB0byBhcHBlbmQgdG8gdGhlIGRvY3VtZW50CisgICAgICovCisgICAgcHVibGljIHZvaWQgYXBwZW5kKE1Db25zdFRleHQgbmV3VGV4dCkgeworCisgICAgICAgIGludCBsZW5ndGggPSBnZXRUZXh0TGVuZ3RoKCk7CisgICAgICAgIHJlcGxhY2VSYW5nZShuZXdUZXh0LCBsZW5ndGgsIGxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5zZXJ0IHRoZSBnaXZlbiB0ZXh0IGludG8gdGhlIGRvY3VtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAgICAgKiBFcXVpdmFsZW50IHRvCisgICAgICogPHR0PnJlcGxhY2VSYW5nZShuZXdUZXh0LCBwb3NpdGlvbiwgcG9zaXRpb24pPC90dD4uCisgICAgICogQHBhcmFtIG5ld1RleHQgdGhlIHRleHQgdG8gaW5zZXJ0IGludG8gdGhlIGRvY3VtZW50LgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgcG9zaXRpb24gaW4gdGhlIGRvY3VtZW50IHdoZXJlIHRoZQorICAgICAqICAgICB0ZXh0IHdpbGwgYmUgaW5zZXJ0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBpbnNlcnQoTUNvbnN0VGV4dCBuZXdUZXh0LCBpbnQgcG9zaXRpb24pIHsKKworICAgICAgICByZXBsYWNlUmFuZ2UobmV3VGV4dCwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBsYWNlIHRoZSBnaXZlbiByYW5nZSB3aXRoIDx0dD5uZXdUZXh0PC90dD4uICBBZnRlciB0aGlzCisgICAgICogb3BlcmF0aW9uIHRoZSBzZWxlY3Rpb24gcmFuZ2UgaXMgYW4gaW5zZXJ0aW9uIHBvaW50IGF0IHRoZQorICAgICAqIGVuZCBvZiB0aGUgbmV3IHRleHQuCisgICAgICogQHBhcmFtIG5ld1RleHQgdGhlIHRleHQgd2l0aCB3aGljaCB0byByZXBsYWNlIHRoZSByYW5nZQorICAgICAqIEBwYXJhbSBzdGFydCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZSB0byByZXBsYWNlCisgICAgICogQHBhcmFtIGVuZCB0aGUgZW5kIG9mIHRoZSByYW5nZSB0byByZXBsYWNlCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVwbGFjZVJhbmdlKE1Db25zdFRleHQgbmV3VGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisKKyAgICAgICAgaW50IGxlbmd0aCA9IGdldFRleHRMZW5ndGgoKTsKKworICAgICAgICBzdGFydCA9IHBpbihzdGFydCwgMCwgbGVuZ3RoKTsKKyAgICAgICAgZW5kID0gcGluKGVuZCwgc3RhcnQsIGxlbmd0aCk7CisKKyAgICAgICAgaWYgKGZTZWxlY3Rpb24gIT0gbnVsbCkgeworCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzZWxlY3RhYmxlLCBidXQgbm90IGVkaXRhYmxlLCB3ZSdsbCB0ZW1wb3JhcmlseQorICAgICAgICAgICAgLy8gbWFrZSBvdXJzZWx2ZXMgZWRpdGFibGUgdG8gY2hhbmdlIHRoZSB0ZXh0LiAgQSBsaXR0bGUgZnVubnkKKyAgICAgICAgICAgIC8vIGJ1dCB0aGVyZSdzIGEgbG90IG9mIGNvZGUgZm9yIGdldHRpbmcgY2FyZXQgc3R1ZmYgcmlnaHQsCisgICAgICAgICAgICAvLyBhbmQgdGhpcyBpcyBub3QgYSBjb21tb24gb3BlcmF0aW9uIGFueXdheS4KKworICAgICAgICAgICAgVGV4dEVkaXRCZWhhdmlvciBiZWhhdmlvcjsKKworICAgICAgICAgICAgaWYgKGZFZGl0QmVoYXZpb3IgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJlaGF2aW9yID0gbmV3IFRleHRFZGl0QmVoYXZpb3IoZlRleHRDb21wb25lbnQsIGZTZWxlY3Rpb24sIGZCcm9hZGNhc3RlciwgZlJlbWFwKTsKKyAgICAgICAgICAgICAgICBiZWhhdmlvci5hZGRUb093bmVyKGZUZXh0Q29tcG9uZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJlaGF2aW9yID0gZkVkaXRCZWhhdmlvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVGV4dE9mZnNldCBuZXdTZWxlY3Rpb24gPSBuZXcgVGV4dE9mZnNldChzdGFydCArIG5ld1RleHQubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUKTsKKworICAgICAgICAgICAgVGV4dFJlcGxhY2VtZW50IHJlcGxhY2VtZW50ID0gbmV3IFRleHRSZXBsYWNlbWVudChzdGFydCwgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbik7CisKKyAgICAgICAgICAgIGZUZXh0Q29tcG9uZW50LnRleHRDb250cm9sRXZlbnRPY2N1cnJlZChCZWhhdmlvci5SRVBMQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIGlmIChmRWRpdEJlaGF2aW9yID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBiZWhhdmlvci5yZW1vdmVGcm9tT3duZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKworICAgICAgICAgICAgTVRleHQgb2xkVGV4dCA9IGZUZXh0Q29tcG9uZW50LmdldE1vZGlmaWFibGVUZXh0KCk7CisgICAgICAgICAgICBmVGV4dENvbXBvbmVudC5zdG9wQmFja2dyb3VuZEZvcm1hdHRpbmcoKTsKKyAgICAgICAgICAgIG9sZFRleHQucmVwbGFjZUFsbChuZXdUZXh0KTsKKyAgICAgICAgICAgIGZUZXh0Q29tcG9uZW50LnJlZm9ybWF0QW5kRHJhd1RleHQoMCwgbmV3VGV4dC5sZW5ndGgoKSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgVGV4dFBhbmVsLgorICAgICAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgVGV4dFBhbmVsCisgICAgICovCisgICAgcHVibGljIGludCBnZXRUZXh0TGVuZ3RoKCkgeworCisgICAgICAgIHJldHVybiBmVGV4dENvbXBvbmVudC5nZXRUZXh0KCkubGVuZ3RoKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSB0ZXh0IGRvY3VtZW50IGluIHRoZSBUZXh0UGFuZWwuCisgICAgICogQHJldHVybiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgVGV4dFBhbmVsLgorICAgICAqLworICAgIHB1YmxpYyBNQ29uc3RUZXh0IGdldFRleHQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZUZXh0Q29tcG9uZW50LmdldFRleHQoKTsKKyAgICB9CisKKy8vPT09PT09PT09PT09CisvLyBTZWxlY3Rpb24gQWNjZXNzCisvLz09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24uCisgICAgICovCisgICAgcHVibGljIGludCBnZXRTZWxlY3Rpb25TdGFydCgpIHsKKworICAgICAgICBpZiAoZlNlbGVjdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZlNlbGVjdGlvbi5nZXRTdGFydCgpLmZPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFNlbGVjdGlvbkVuZCgpIHsKKworICAgICAgICBpZiAoZlNlbGVjdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZlNlbGVjdGlvbi5nZXRFbmQoKS5mT2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlLiAgVGhpcyBpcworICAgICAqIGVxdWl2YWxlbnQgdG8gPHR0PnNlbGVjdChzZWxlY3Rpb25TdGFydCwgZ2V0U2VsZWN0aW9uRW5kKCkpPC90dD4uCisgICAgICogQHBhcmFtIHNlbGVjdGlvblN0YXJ0IHRoZSBzdGFydCBvZiB0aGUgbmV3IHNlbGVjdGlvbiByYW5nZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCBzZWxlY3Rpb25TdGFydCkgeworCisgICAgICAgIHNlbGVjdChzZWxlY3Rpb25TdGFydCwgZ2V0U2VsZWN0aW9uRW5kKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2UuICBUaGlzIGlzCisgICAgICogZXF1aXZhbGVudCB0byA8dHQ+c2VsZWN0KGdldFNlbGVjdGlvblN0YXJ0KCksIHNlbGVjdGlvbkVuZCk8L3R0Pi4KKyAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSBuZXcgc2VsZWN0aW9uIHJhbmdlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGludCBzZWxlY3Rpb25FbmQpIHsKKworICAgICAgICBzZWxlY3QoZ2V0U2VsZWN0aW9uU3RhcnQoKSwgc2VsZWN0aW9uRW5kKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHNlbGVjdGlvbiByYW5nZSB0byBhbiBpbnNlcnRpb24gcG9pbnQgYXQgdGhlIGdpdmVuCisgICAgICogb2Zmc2V0LiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgICogPHR0PnNlbGVjdChwb3NpdGlvbiwgcG9zaXRpb24pPC90dD4uCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBvZmZzZXQgb2YgdGhlIG5ldyBpbnNlcnRpb24gcG9pbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDYXJldFBvc2l0aW9uKGludCBwb3NpdGlvbikgeworCisgICAgICAgIHNlbGVjdChwb3NpdGlvbiwgcG9zaXRpb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgc2VsZWN0aW9uIHJhbmdlIHRvIHRoZSBnaXZlbiByYW5nZS4gIFRoZSByYW5nZSBzdGFydAorICAgICAqIGlzIHBpbm5lZCBiZXR3ZWVuIDAgYW5kIHRoZSB0ZXh0IGxlbmd0aDsgIHRoZSByYW5nZSBlbmQgaXMgcGlubmVkCisgICAgICogYmV0d2VlbiB0aGUgcmFuZ2Ugc3RhcnQgYW5kIHRoZSBlbmQgb2YgdGhlIHRleHQuICBUaGVzZSBzZW1hbnRpY3MKKyAgICAgKiBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIDx0dD5qYXZhLmF3dC5UZXh0Q29tcG9uZW50PC90dD4uCisgICAgICogVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgdGV4dCBpcyBub3Qgc2VsZWN0YWJsZS4KKyAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhcnQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlCisgICAgICogQHBhcmFtIHNlbGVjdGlvbkVuZCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZWxlY3QoaW50IHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uRW5kKSB7CisKKyAgICAgICAgaW50IGxlbmd0aCA9IGdldFRleHRMZW5ndGgoKTsKKworICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHBpbihzZWxlY3Rpb25TdGFydCwgMCwgbGVuZ3RoKTsKKyAgICAgICAgc2VsZWN0aW9uRW5kID0gcGluKHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uU3RhcnQsIGxlbmd0aCk7CisKKyAgICAgICAgVGV4dFJhbmdlIHJhbmdlID0gbmV3IFRleHRSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICAgICAgZlRleHRDb21wb25lbnQudGV4dENvbnRyb2xFdmVudE9jY3VycmVkKEJlaGF2aW9yLlNFTEVDVCwgcmFuZ2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlbGVjdCBhbGwgb2YgdGhlIHRleHQgaW4gdGhlIGRvY3VtZW50LiAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZgorICAgICAqIHRoZSB0ZXh0IGlzIG5vdCBzZWxlY3RhYmxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNlbGVjdEFsbCgpIHsKKworICAgICAgICBzZWxlY3QoMCwgZ2V0VGV4dExlbmd0aCgpKTsKKyAgICB9CisKKworLy89PT09PT09PT09PT0KKy8vIEZvcm1hdCBXaWR0aAorLy89PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdG90YWwgZm9ybWF0IHdpZHRoLCBpbiBwaXhlbHMuICBUaGUgZm9ybWF0IHdpZHRoIGlzIHRoZQorICAgICAqIHdpZHRoIHRvIHdoaWNoIHRleHQgaXMgd3JhcHBlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBmb3JtYXQgd2lkdGgKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZvcm1hdFdpZHRoKCkgeworCisgICAgICAgIHJldHVybiBmVGV4dENvbXBvbmVudC5nZXRGb3JtYXRXaWR0aCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXJhZ3JhcGggYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBsZWZ0LXRvLXJpZ2h0LgorICAgICAqIEBwYXJhbSBvZmZzZXQgYW4gb2Zmc2V0IGluIHRoZSB0ZXh0CisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwYXJhZ3JhcGggYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBsZWZ0LXRvLXJpZ2h0CisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gcGFyYWdyYXBoSXNMZWZ0VG9SaWdodChpbnQgb2Zmc2V0KSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZlRleHRDb21wb25lbnQucGFyYWdyYXBoSXNMZWZ0VG9SaWdodChvZmZzZXQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgY2hhbmdlIHdoaWNoIGNhbiBiZSB1bmRvbmUuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgY2hhbmdlIHdoaWNoIGNhbiBiZSB1bmRvbmUuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY2FuVW5kbygpIHsKKworICAgICAgICBpZiAoZkVkaXRCZWhhdmlvciAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZkVkaXRCZWhhdmlvci5jYW5VbmRvKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgcmVkb25lLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgcmVkb25lLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNhblJlZG8oKSB7CisKKyAgICAgICAgaWYgKGZFZGl0QmVoYXZpb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZFZGl0QmVoYXZpb3IuY2FuUmVkbygpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGNsaXBib2FyZCBjb250YWlucyBjb250ZW50cyB3aGljaCBjb3VsZCBiZQorICAgICAqIHRyYW5zZmVyZWQgaW50byB0aGUgdGV4dC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNsaXBib2FyZCBoYXMgdGV4dCBjb250ZW50LgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNsaXBib2FyZE5vdEVtcHR5KCkgeworCisgICAgICAgIHJldHVybiBmVGV4dENvbXBvbmVudC5nZXRDbGlwYm9hcmQoKS5oYXNDb250ZW50cygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBBdHRyaWJ1dGVNYXAgb2Yga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzLiAgVGhlIGRlZmF1bHQKKyAgICAgKiB2YWx1ZXMgYXJlIHVzZWQgd2hlbiBkaXNwbGF5aW5nIHRleHQgZm9yIHZhbHVlcyB3aGljaCBhcmUgbm90CisgICAgICogc3BlY2lmaWVkIGluIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gYW4gQXR0cmlidXRlTWFwIG9mIGRlZmF1bHQga2V5LXZhbHVlIHBhaXJzCisgICAgICovCisgICAgcHVibGljIEF0dHJpYnV0ZU1hcCBnZXREZWZhdWx0VmFsdWVzKCkgeworCisgICAgICAgIHJldHVybiBmVGV4dENvbXBvbmVudC5nZXREZWZhdWx0VmFsdWVzKCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gb2JqZWN0c0FyZUVxdWFsKE9iamVjdCBsaHMsIE9iamVjdCByaHMpIHsKKyAgICAKKyAgICAgICAgaWYgKGxocyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gcmhzID09IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0IGNvbnNpc3RlbnRDaGFyU3R5bGUoTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgZGVmYXVsdFZhbHVlKSB7CisKKyAgICAgICAgaWYgKHN0YXJ0ID49IGxpbWl0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHJhbmdlLiIpOworICAgICAgICB9CisKKyAgICAgICAgaW50IHJ1blN0YXJ0ID0gc3RhcnQ7CisgICAgICAgIE9iamVjdCBpbml0aWFsVmFsdWUgPSB0ZXh0LmNoYXJhY3RlclN0eWxlQXQocnVuU3RhcnQpLmdldChrZXkpOworCisgICAgICAgIGlmIChpbml0aWFsVmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgaW5pdGlhbFZhbHVlID0gZGVmYXVsdFZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChydW5TdGFydCA9IHRleHQuY2hhcmFjdGVyU3R5bGVMaW1pdChydW5TdGFydCk7CisgICAgICAgICAgICAgcnVuU3RhcnQgPCBsaW1pdDsKKyAgICAgICAgICAgICBydW5TdGFydCA9IHRleHQuY2hhcmFjdGVyU3R5bGVMaW1pdChydW5TdGFydCkpIHsKKworICAgICAgICAgICAgT2JqZWN0IG5leHRWYWx1ZSA9IHRleHQuY2hhcmFjdGVyU3R5bGVBdChydW5TdGFydCkuZ2V0KGtleSk7CisKKyAgICAgICAgICAgIGlmIChuZXh0VmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFvYmplY3RzQXJlRXF1YWwoaW5pdGlhbFZhbHVlLCBuZXh0VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1UZXh0UGFuZWwuTVVMVElQTEVfVkFMVUVTOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGluaXRpYWxWYWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnNwZWN0cyB0aGUgY2hhcmFjdGVyIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbgorICAgICAqIHJhbmdlIChvciB0aGUgdHlwaW5nIHN0eWxlIGF0IHRoZSBpbnNlcnRpb24gcG9pbnQpIGFuZCByZXR1cm5zOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+VGhlIHZhbHVlIG9mIDx0dD5rZXk8L3R0PiwgaWYgdGhlIHZhbHVlIG9mIDx0dD5rZXk8L3R0PgorICAgICAqIGlzIHRoZSBzYW1lIGluIGFsbCBvZiB0aGUgc3R5bGUgcnVucyBpbiB0aGUgc2VsZWN0aW9uLCBvcjwvbGk+CisgICAgICogPGxpPm51bGwsIGlmIHR3byBvciBtb3JlIHN0eWxlIHJ1bnMgaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGZvciA8dHQ+a2V5PC90dD4uPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIElmIGEgc3R5bGUgcnVuIGRvZXMgbm90IGNvbnRhaW4gPHR0PmtleTwvdHQ+LAorICAgICAqIGl0cyB2YWx1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIDx0dD5kZWZhdWx0U3R5bGU8L3R0Pi4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIGNvbmZpZ3VyaW5nIHN0eWxlIG1lbnVzLgorICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSB1c2VkIHRvIHJldHJpZXZlIHZhbHVlcyBmb3IgY29tcGFyaXNvbgorICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIGltcGxpY2l0IHZhbHVlIG9mIDx0dD5rZXk8L3R0PiBpbgorICAgICAqICAgICBzdHlsZSBydW5zIHdoZXJlIDx0dD5rZXk8L3R0PiBpcyBub3QgZGVmaW5lZAorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0Q2hhcmFjdGVyU3R5bGVPdmVyU2VsZWN0aW9uKE9iamVjdCBrZXkpIHsKKworICAgICAgICBUZXh0UmFuZ2Ugc2VsUmFuZ2U7CisgICAgICAgIGlmIChmU2VsZWN0aW9uICE9IG51bGwpCisgICAgICAgICAgICBzZWxSYW5nZSA9IGZTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VsUmFuZ2UgPSBuZXcgVGV4dFJhbmdlKDAsIDApOworCisgICAgICAgIGlmIChzZWxSYW5nZS5zdGFydCA9PSBzZWxSYW5nZS5saW1pdCkgeworCisgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgY29tcFN0eWxlOworCisgICAgICAgICAgICBpZiAoZkVkaXRCZWhhdmlvciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29tcFN0eWxlID0gZkVkaXRCZWhhdmlvci5nZXRJbnNlcnRpb25Qb2ludFN0eWxlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wU3R5bGUgPSBUZXh0RWRpdEJlaGF2aW9yLnR5cGluZ1N0eWxlQXQoZlRleHQsIHNlbFJhbmdlLnN0YXJ0LCBzZWxSYW5nZS5saW1pdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNvbXBTdHlsZS5nZXQoa2V5KTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZT09bnVsbD8gZ2V0RGVmYXVsdFZhbHVlcygpLmdldChrZXkpIDogdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gY29uc2lzdGVudENoYXJTdHlsZShmVGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxSYW5nZS5zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbFJhbmdlLmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGVmYXVsdFZhbHVlcygpLmdldChrZXkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluc3BlY3RzIHRoZSBwYXJhZ3JhcGggc3R5bGUgcnVucyBpbiB0aGUgc2VsZWN0aW9uCisgICAgICogcmFuZ2UgKG9yIHRoZSB0eXBpbmcgc3R5bGUgYXQgdGhlIGluc2VydGlvbiBwb2ludCkgYW5kIHJldHVybnM6CisgICAgICogPHVsPgorICAgICAqIDxsaT5UaGUgdmFsdWUgb2YgPHR0PmtleTwvdHQ+LCBpZiB0aGUgdmFsdWUgb2YgPHR0PmtleTwvdHQ+CisgICAgICogaXMgdGhlIHNhbWUgaW4gYWxsIG9mIHRoZSBzdHlsZSBydW5zIGluIHRoZSBzZWxlY3Rpb24sIG9yPC9saT4KKyAgICAgKiA8bGk+bnVsbCwgaWYgdHdvIG9yIG1vcmUgc3R5bGUgcnVucyBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIDx0dD5rZXk8L3R0Pi48L2xpPgorICAgICAqIDwvdWw+CisgICAgICogSWYgYSBzdHlsZSBydW4gZG9lcyBub3QgY29udGFpbiA8dHQ+a2V5PC90dD4sCisgICAgICogaXRzIHZhbHVlIGlzIGNvbnNpZGVyZWQgdG8gYmUgPHR0PmRlZmF1bHRTdHlsZTwvdHQ+LgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc3R5bGUgbWVudXMuCisgICAgICogQHBhcmFtIGtleSB0aGUga2V5IHVzZWQgdG8gcmV0cmlldmUgdmFsdWVzIGZvciBjb21wYXJpc29uCisgICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSB0aGUgaW1wbGljaXQgdmFsdWUgb2YgPHR0PmtleTwvdHQ+IGluCisgICAgICogICAgIHN0eWxlIHJ1bnMgd2hlcmUgPHR0PmtleTwvdHQ+IGlzIG5vdCBkZWZpbmVkCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXRQYXJhZ3JhcGhTdHlsZU92ZXJTZWxlY3Rpb24oT2JqZWN0IGtleSkgeworCisgICAgICAgIFRleHRSYW5nZSBzZWxSYW5nZTsKKyAgICAgICAgaWYgKGZTZWxlY3Rpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgc2VsUmFuZ2UgPSBmU2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZWxSYW5nZSA9IG5ldyBUZXh0UmFuZ2UoMCwgMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VsUmFuZ2Uuc3RhcnQgPT0gc2VsUmFuZ2UubGltaXQpIHsKKyAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBwU3R5bGUgPSBmVGV4dC5wYXJhZ3JhcGhTdHlsZUF0KHNlbFJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHBTdHlsZS5nZXQoa2V5KTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZT09bnVsbD8gZ2V0RGVmYXVsdFZhbHVlcygpLmdldChrZXkpIDogdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgcGFyYWdyYXBoU3RhcnQgPSBzZWxSYW5nZS5zdGFydDsKKyAgICAgICAgICAgIE9iamVjdCBkZWZhdWx0VmFsdWUgPSBnZXREZWZhdWx0VmFsdWVzKCkuZ2V0KGtleSk7CisgICAgICAgICAgICBPYmplY3QgaW5pdGlhbFZhbHVlID0gZlRleHQucGFyYWdyYXBoU3R5bGVBdChwYXJhZ3JhcGhTdGFydCkuZ2V0KGtleSk7CisgICAgICAgICAgICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAocGFyYWdyYXBoU3RhcnQgPSBmVGV4dC5wYXJhZ3JhcGhMaW1pdChwYXJhZ3JhcGhTdGFydCk7CisgICAgICAgICAgICAgICAgIHBhcmFncmFwaFN0YXJ0IDwgc2VsUmFuZ2UubGltaXQ7CisgICAgICAgICAgICAgICAgIHBhcmFncmFwaFN0YXJ0ID0gZlRleHQucGFyYWdyYXBoTGltaXQocGFyYWdyYXBoU3RhcnQpKSB7CisKKyAgICAgICAgICAgICAgICBPYmplY3QgbmV4dFZhbHVlID0gZlRleHQucGFyYWdyYXBoU3R5bGVBdChwYXJhZ3JhcGhTdGFydCkuZ2V0KGtleSk7CisgICAgICAgICAgICAgICAgaWYgKG5leHRWYWx1ZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW9iamVjdHNBcmVFcXVhbChpbml0aWFsVmFsdWUsIG5leHRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1UZXh0UGFuZWwuTVVMVElQTEVfVkFMVUVTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZSB0aGUgc2VsZWN0ZWQgdGV4dCBmcm9tIHRoZSBkb2N1bWVudCBhbmQgcGxhY2UgaXQKKyAgICAgKiBvbiB0aGUgY2xpcGJvYXJkLiAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgdGV4dAorICAgICAqIGlzIG5vdCBlZGl0YWJsZSwgb3IgaWYgbm8gdGV4dCBpcyBzZWxlY3RlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjdXQoKSB7CisgICAgICAgIGZUZXh0Q29tcG9uZW50LnRleHRDb250cm9sRXZlbnRPY2N1cnJlZChCZWhhdmlvci5DVVQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IG9uIHRoZSBjbGlwYm9hcmQuICBUaGlzIG1ldGhvZCBoYXMKKyAgICAgKiBubyBlZmZlY3QgaWYgbm8gdGV4dCBpcyBzZWxlY3RlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5KCkgeworICAgICAgICBmVGV4dENvbXBvbmVudC50ZXh0Q29udHJvbEV2ZW50T2NjdXJyZWQoQmVoYXZpb3IuQ09QWSwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwbGFjZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRleHQgd2l0aCB0aGUgdGV4dCBvbiB0aGUgY2xpcGJvYXJkLgorICAgICAqIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIHRleHQgaXMgbm90IGVkaXRhYmxlLCBvciBpZiBubworICAgICAqIHRleHQgaXMgb24gdGhlIGNsaXBib2FyZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwYXN0ZSgpIHsKKyAgICAgICAgZlRleHRDb21wb25lbnQudGV4dENvbnRyb2xFdmVudE9jY3VycmVkKEJlaGF2aW9yLlBBU1RFLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgc2VsZWN0ZWQgdGV4dCBmcm9tIHRoZSBkb2N1bWVudCwgd2l0aG91dCBhbHRlcmluZyB0aGUgY2xpcGJvYXJkLgorICAgICAqIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlCisgICAgICogdGV4dCBpcyBub3QgZWRpdGFibGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2xlYXIoKSB7CisgICAgICAgIGZUZXh0Q29tcG9uZW50LnRleHRDb250cm9sRXZlbnRPY2N1cnJlZChCZWhhdmlvci5DTEVBUiwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVW5kbyB0aGUgbW9zdCByZWNlbnQgdGV4dCBjaGFuZ2UuICBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmCisgICAgICogdGhlcmUgaXMgbm8gY2hhbmdlIHRvIHVuZG8uCisgICAgICovCisgICAgcHVibGljIHZvaWQgdW5kbygpIHsKKyAgICAgICAgZlRleHRDb21wb25lbnQudGV4dENvbnRyb2xFdmVudE9jY3VycmVkKEJlaGF2aW9yLlVORE8sIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZG8gdGhlIG1vc3QgcmVjZW50IHRleHQgY2hhbmdlLiAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZgorICAgICAqIHRoZXJlIGlzIG5vIGNoYW5nZSB0byByZWRvLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlZG8oKSB7CisgICAgICAgIGZUZXh0Q29tcG9uZW50LnRleHRDb250cm9sRXZlbnRPY2N1cnJlZChCZWhhdmlvci5SRURPLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjb21tYW5kcyB0aGUgY29tbWFuZCBsb2cgY2FuIGhvbGQuCisgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBjb21tYW5kIGxvZyBjYW4gaG9sZAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0Q29tbWFuZExvZ1NpemUoKSB7CisKKyAgICAgICAgaWYgKGZFZGl0QmVoYXZpb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZFZGl0QmVoYXZpb3IuZ2V0Q29tbWFuZExvZ1NpemUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBudW1iZXIgb2YgY29tbWFuZHMgdGhlIGNvbW1hbmQgbG9nIGNhbiBob2xkLiAgQWxsCisgICAgICogcmVkb2FibGUgY29tbWFuZHMgYXJlIHJlbW92ZWQgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCisgICAgICogQHBhcmFtIHNpemUgdGhlIG51bWJlciBvZiBjb21tYW5kcyBrZXB0IGluIHRoZSBjb21tYW5kIGxvZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbW1hbmRMb2dTaXplKGludCBzaXplKSB7CisgICAgICAgIGZUZXh0Q29tcG9uZW50LnRleHRDb250cm9sRXZlbnRPY2N1cnJlZChCZWhhdmlvci5TRVRfQ09NTUFORF9MT0dfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlZ2VyKHNpemUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gdGhlIGNvbW1hbmQgbG9nLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyQ29tbWFuZExvZygpIHsKKyAgICAgICAgZlRleHRDb21wb25lbnQudGV4dENvbnRyb2xFdmVudE9jY3VycmVkKEJlaGF2aW9yLkNMRUFSX0NPTU1BTkRfTE9HLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb2RpZnkgdGhlIGNoYXJhY3RlciBzdHlsZXMgb24gdGhlIHNlbGVjdGVkIGNoYXJhY3RlcnMuICBJZiBubyBjaGFyYWN0ZXJzCisgICAgICogYXJlIHNlbGVjdGVkLCBtb2RpZnkgdGhlIHR5cGluZyBzdHlsZS4KKyAgICAgKiBAcGFyYW0gbW9kaWZpZXIgdGhlIFN0eWxlTW9kaWZpZXIgd2l0aCB3aGljaCB0byBtb2RpZnkgdGhlIHN0eWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1vZGlmeUNoYXJhY3RlclN0eWxlT25TZWxlY3Rpb24oU3R5bGVNb2RpZmllciBtb2RpZmllcikgeworICAgICAgICBmVGV4dENvbXBvbmVudC50ZXh0Q29udHJvbEV2ZW50T2NjdXJyZWQoQmVoYXZpb3IuQ0hBUkFDVEVSX1NUWUxFX01PRCwgbW9kaWZpZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1vZGlmeSB0aGUgcGFyYWdyYXBoIHN0eWxlcyBpbiBwYXJhZ3JhcGhzIGNvbnRhaW5pbmcgc2VsZWN0ZWQgY2hhcmFjdGVycywgb3IKKyAgICAgKiB0aGUgcGFyYWdyYXBoIGNvbnRhaW5pbmcgdGhlIGluc2VydGlvbiBwb2ludC4KKyAgICAgKiBAcGFyYW0gbW9kaWZpZXIgdGhlIFN0eWxlTW9kaWZpZXIgd2l0aCB3aGljaCB0byBtb2RpZnkgdGhlIHN0eWxlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1vZGlmeVBhcmFncmFwaFN0eWxlT25TZWxlY3Rpb24oU3R5bGVNb2RpZmllciBtb2RpZmllcikgeworICAgICAgICBmVGV4dENvbXBvbmVudC50ZXh0Q29udHJvbEV2ZW50T2NjdXJyZWQoQmVoYXZpb3IuUEFSQUdSQVBIX1NUWUxFX01PRCwgbW9kaWZpZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgS2V5UmVtYXAgdXNlZCB0byBwcm9jZXNzIGtleSBldmVudHMuCisgICAgICogQHJldHVybiB0aGUga2V5IHJlbWFwIHVzZWQgdG8gcHJvY2VzcyBrZXkgZXZlbnRzCisgICAgICogQHNlZSAjc2V0S2V5UmVtYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgS2V5UmVtYXAgZ2V0S2V5UmVtYXAoKSB7CisKKyAgICAgICAgcmV0dXJuIGZSZW1hcDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVc2UgdGhlIGdpdmVuIEtleVJlbWFwIHRvIG1hcCBrZXkgZXZlbnRzIHRvIGNoYXJhY3RlcnMuCisgICAgICogT25seSBrZXkKKyAgICAgKiBldmVudHMgYXJlIGFmZmVjdGVkIGJ5IHRoZSByZW1hcDsgIG90aGVyIHRleHQgZW50ZXJpbmcgdGhlCisgICAgICogY29udHJvbCAodmlhIHRoZSBjbGlwYm9hcmQsIGZvciBleGFtcGxlKSBpcyBub3QgYWZmZWN0ZWQKKyAgICAgKiBieSB0aGUgS2V5UmVtYXAuCisgICAgICogPHA+CisgICAgICogRG8gbm90IHBhc3MgPHR0Pm51bGw8L3R0PiB0byB0aGlzIG1ldGhvZCB0byBsZWF2ZSBrZXkKKyAgICAgKiBldmVudHMgdW5tYXBwZWQuICBJbnN0ZWFkLCB1c2UgPHR0PktleVJlbWFwLmdldElkZW50aXR5UmVtYXAoKTwvdHQ+CisgICAgICogQHBhcmFtIHJlbWFwIHRoZSBLZXlSZW1hcCB0byB1c2UgZm9yIG1hcHBpbmcga2V5IGV2ZW50cyB0byBjaGFyYWN0ZXJzCisgICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgcGFyYW1ldGVyIGlzIG51bGwKKyAgICAgKiBAc2VlIEtleVJlbWFwCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0S2V5UmVtYXAoS2V5UmVtYXAgcmVtYXApIHsKKworICAgICAgICBpZiAocmVtYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJyZW1hcCBjYW4ndCBiZSBudWxsIik7CisgICAgICAgIH0KKworICAgICAgICBmUmVtYXAgPSByZW1hcDsKKyAgICAgICAgaWYgKGZFZGl0QmVoYXZpb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgZkVkaXRCZWhhdmlvci5zZXRLZXlSZW1hcChyZW1hcCk7CisgICAgICAgIH0KKworICAgICAgICBmQnJvYWRjYXN0ZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5LRVlSRU1BUF9DSEFOR0VEKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG1vZGlmaWNhdGlvbiBmbGFnIG9mIHRoZSBjdXJyZW50IHRleHQgY2hhbmdlLgorICAgICAqIEBzZWUgI3NldE1vZGlmaWVkCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNNb2RpZmllZCgpIHsKKworICAgICAgICBpZiAoZkVkaXRCZWhhdmlvciAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZkVkaXRCZWhhdmlvci5pc01vZGlmaWVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZk1vZGlmaWVkOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBtb2RpZmljYXRpb24gZmxhZyBvZiB0aGUgY3VycmVudCB0ZXh0IGNoYW5nZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RpZmllZChib29sZWFuIG1vZGlmaWVkKSB7CisKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVkID0gZlRleHRDb21wb25lbnQudGV4dENvbnRyb2xFdmVudE9jY3VycmVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVoYXZpb3IuU0VUX01PRElGSUVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQ/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0UpOworICAgICAgICBpZiAoIWhhbmRsZWQpIHsKKyAgICAgICAgICAgIGZNb2RpZmllZCA9IG1vZGlmaWVkOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgZm9yIHBlcmYtdGVzdGluZyBvbmx5IQorICAgICAqLworICAgIHZvaWQgaGFuZGxlS2V5RXZlbnQoamF2YS5hd3QuZXZlbnQuS2V5RXZlbnQga2V5RXZlbnQpIHsKKyAgICAKKyAgICAgICAgQ29tcG9uZW50IGhvc3QgPSBmVGV4dENvbXBvbmVudC5nZXRIb3N0KCk7CisgICAgICAgIGlmIChob3N0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGhvc3QuZGlzcGF0Y2hFdmVudChrZXlFdmVudCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvQXJhYmljVHJhbnNsaXRlcmF0aW9uLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvQXJhYmljVHJhbnNsaXRlcmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2UyODMxYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9BcmFiaWNUcmFuc2xpdGVyYXRpb24uamF2YQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQXJhYmljVHJhbnNsaXRlcmF0aW9uLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8qCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICovCisKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKKy8qCitGb3IgYW55IGluY29taW5nIGNoYXJhY3RlciBDCitpZiB5b3UgY2FuIG1hcCBDIHVzaW5nIHRoZSBmb2xsb3dpbmcgRmFrZUFyYWJpY1RhYmxlLCByZXR1cm4KK0Zha2VBcmFiaWNUYWJsZShDKQorZWxzZSBpZiBDIGlzIGZyb20gQSB0aHJvdWdoIFosIHJldHVybiBGYWtlQXJhYmljVGFibGUobG93ZXJjYXNlKEMpKQorZWxzZSBqdXN0IHJldHVybiBDCisKKworRmFrZUFyYWJpY1RhYmxlIGlzIGRlZmluZWQgYnkgdGhlIGZvbGxvd2luZyBtYXBwaW5nCisKKzAgICAwNjYwO0FSQUJJQy1JTkRJQyBESUdJVCBaRVJPO05kOzA7QU47OzA7MDswO047Ozs7OworMSAgIDA2NjE7QVJBQklDLUlORElDIERJR0lUIE9ORTtOZDswO0FOOzsxOzE7MTtOOzs7OzsKKzIgICAwNjYyO0FSQUJJQy1JTkRJQyBESUdJVCBUV087TmQ7MDtBTjs7MjsyOzI7Tjs7Ozs7CiszICAgMDY2MztBUkFCSUMtSU5ESUMgRElHSVQgVEhSRUU7TmQ7MDtBTjs7MzszOzM7Tjs7Ozs7Cis0ICAgMDY2NDtBUkFCSUMtSU5ESUMgRElHSVQgRk9VUjtOZDswO0FOOzs0OzQ7NDtOOzs7OzsKKzUgICAwNjY1O0FSQUJJQy1JTkRJQyBESUdJVCBGSVZFO05kOzA7QU47OzU7NTs1O047Ozs7OworNiAgIDA2NjY7QVJBQklDLUlORElDIERJR0lUIFNJWDtOZDswO0FOOzs2OzY7NjtOOzs7OzsKKzcgICAwNjY3O0FSQUJJQy1JTkRJQyBESUdJVCBTRVZFTjtOZDswO0FOOzs3Ozc7NztOOzs7OzsKKzggICAwNjY4O0FSQUJJQy1JTkRJQyBESUdJVCBFSUdIVDtOZDswO0FOOzs4Ozg7ODtOOzs7OzsKKzkgICAwNjY5O0FSQUJJQy1JTkRJQyBESUdJVCBOSU5FO05kOzA7QU47Ozk7OTs5O047Ozs7OworCislICAgMDY2QTtBUkFCSUMgUEVSQ0VOVCBTSUdOO1BvOzA7RVQ7Ozs7O047Ozs7OworLiAgIDA2NkI7QVJBQklDIERFQ0lNQUwgU0VQQVJBVE9SO1BvOzA7QU47Ozs7O047Ozs7OworLCAgIDA2MEM7QVJBQklDIENPTU1BO1BvOzA7Ujs7Ozs7Tjs7Ozs7CistICAgMDY0MDtBUkFCSUMgVEFUV0VFTDtMbTswO1I7Ozs7O047Ozs7OworJyAgIDA2NTI7QVJBQklDIFNVS1VOO01uOzM0O1I7Ozs7O047Ozs7OworIiAgIDA2NTE7QVJBQklDIFNIQUREQTtNbjszMztSOzs7OztOO0FSQUJJQyBTSEFEREFIOzs7OworOyAgIDA2MUI7QVJBQklDIFNFTUlDT0xPTjtQbzswO1I7Ozs7O047Ozs7OworPyAgIDA2MUY7QVJBQklDIFFVRVNUSU9OIE1BUks7UG87MDtSOzs7OztOOzs7OzsKKworYSAgIDA2Mjc7QVJBQklDIExFVFRFUiBBTEVGO0xvOzA7Ujs7Ozs7Tjs7Ozs7CitBICAgMDYzOTtBUkFCSUMgTEVUVEVSIEFJTjtMbzswO1I7Ozs7O047Ozs7OworYiAgIDA2Mjg7QVJBQklDIExFVFRFUiBCRUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgQkFBOzs7OworYyAgIDA2MzU7QVJBQklDIExFVFRFUiBTQUQ7TG87MDtSOzs7OztOOzs7OzsKK2QgICAwNjJGO0FSQUJJQyBMRVRURVIgREFMO0xvOzA7Ujs7Ozs7Tjs7Ozs7CitEICAgMDYzMDtBUkFCSUMgTEVUVEVSIFRIQUw7TG87MDtSOzs7OztOOzs7OzsKK0UgICAwNjRCO0FSQUJJQyBGQVRIQVRBTjtNbjsyNztSOzs7OztOOzs7OzsKK2UgICAwNjRFO0FSQUJJQyBGQVRIQTtNbjszMDtSOzs7OztOO0FSQUJJQyBGQVRIQUg7Ozs7CitmICAgMDY0MTtBUkFCSUMgTEVUVEVSIEZFSDtMbzswO1I7Ozs7O047QVJBQklDIExFVFRFUiBGQTs7OzsKK2cgICAwNjNBO0FSQUJJQyBMRVRURVIgR0hBSU47TG87MDtSOzs7OztOOzs7OzsKK2ggICAwNjJEO0FSQUJJQyBMRVRURVIgSEFIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBQTs7OzsKK0ggICAwNjQ3O0FSQUJJQyBMRVRURVIgSEVIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIEhBOzs7OworSSAgIDA2NEQ7QVJBQklDIEtBU1JBVEFOO01uOzI5O1I7Ozs7O047Ozs7OworaSAgIDA2NTA7QVJBQklDIEtBU1JBO01uOzMyO1I7Ozs7O047QVJBQklDIEtBU1JBSDs7OzsKK2ogICAwNjJDO0FSQUJJQyBMRVRURVIgSkVFTTtMbzswO1I7Ozs7O047Ozs7OworSyAgIDA2MkU7QVJBQklDIExFVFRFUiBLSEFIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIEtIQUE7Ozs7CitrICAgMDY0MztBUkFCSUMgTEVUVEVSIEtBRjtMbzswO1I7Ozs7O047QVJBQklDIExFVFRFUiBDQUY7Ozs7CitsICAgMDY0NDtBUkFCSUMgTEVUVEVSIExBTTtMbzswO1I7Ozs7O047Ozs7OworbSAgIDA2NDU7QVJBQklDIExFVFRFUiBNRUVNO0xvOzA7Ujs7Ozs7Tjs7Ozs7CituICAgMDY0NjtBUkFCSUMgTEVUVEVSIE5PT047TG87MDtSOzs7OztOOzs7OzsKK28gICAwNjRGO0FSQUJJQyBEQU1NQTtNbjszMTtSOzs7OztOO0FSQUJJQyBEQU1NQUg7Ozs7CitwICAgMDYyODtBUkFCSUMgTEVUVEVSIEJFSDtMbzswO1I7Ozs7O047QVJBQklDIExFVFRFUiBCQUE7Ozs7CitxICAgMDY0MjtBUkFCSUMgTEVUVEVSIFFBRjtMbzswO1I7Ozs7O047Ozs7OworciAgIDA2MzE7QVJBQklDIExFVFRFUiBSRUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgUkE7Ozs7CitzICAgMDYzMztBUkFCSUMgTEVUVEVSIFNFRU47TG87MDtSOzs7OztOOzs7OzsKK1MgICAwNjM0O0FSQUJJQyBMRVRURVIgU0hFRU47TG87MDtSOzs7OztOOzs7OzsKK3QgICAwNjJBO0FSQUJJQyBMRVRURVIgVEVIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIFRBQTs7OzsKK1QgICAwNjJCO0FSQUJJQyBMRVRURVIgVEhFSDtMbzswO1I7Ozs7O047QVJBQklDIExFVFRFUiBUSEFBOzs7OworVSAgIDA2NEM7QVJBQklDIERBTU1BVEFOO01uOzI4O1I7Ozs7O047Ozs7OwordSAgIDA2NEY7QVJBQklDIERBTU1BO01uOzMxO1I7Ozs7O047QVJBQklDIERBTU1BSDs7OzsKK3YgICAwNjQxO0FSQUJJQyBMRVRURVIgRkVIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIEZBOzs7OwordyAgIDA2NDg7QVJBQklDIExFVFRFUiBXQVc7TG87MDtSOzs7OztOOzs7OzsKK3ggICAwNjMzO0FSQUJJQyBMRVRURVIgU0VFTjtMbzswO1I7Ozs7O047Ozs7OworeSAgIDA2NEE7QVJBQklDIExFVFRFUiBZRUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgWUE7Ozs7Cit6ICAgMDYzMjtBUkFCSUMgTEVUVEVSIFpBSU47TG87MDtSOzs7OztOOzs7OzsKK1ogICAwNjM4O0FSQUJJQyBMRVRURVIgWkFIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIERIQUg7Ozs7CisKKyovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEtleVJlbWFwIHRvIHByb2R1Y2UgdHJhbnNsaXRlcmF0ZWQgQXJhYmljCisgKiBjaGFyYWN0ZXJzIGZyb20gTGF0aW4tMSBjaGFyYWN0ZXJzLgorICovCisKK2ZpbmFsIGNsYXNzIEFyYWJpY1RyYW5zbGl0ZXJhdGlvbiBleHRlbmRzIEtleVJlbWFwIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHVibGljIGNoYXIgcmVtYXAoY2hhciBjKSB7CisKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICcwJzogcmV0dXJuICdcdTA2NjAnOyAvLyBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTworICAgICAgICAgICAgY2FzZSAnMSc6IHJldHVybiAnXHUwNjYxJzsgLy8gQVJBQklDLUlORElDIERJR0lUIE9ORQorICAgICAgICAgICAgY2FzZSAnMic6IHJldHVybiAnXHUwNjYyJzsgLy8gQVJBQklDLUlORElDIERJR0lUIFRXTworICAgICAgICAgICAgY2FzZSAnMyc6IHJldHVybiAnXHUwNjYzJzsgLy8gQVJBQklDLUlORElDIERJR0lUIFRIUkVFCisgICAgICAgICAgICBjYXNlICc0JzogcmV0dXJuICdcdTA2NjQnOyAvLyBBUkFCSUMtSU5ESUMgRElHSVQgRk9VUgorICAgICAgICAgICAgY2FzZSAnNSc6IHJldHVybiAnXHUwNjY1JzsgLy8gQVJBQklDLUlORElDIERJR0lUIEZJVkUKKyAgICAgICAgICAgIGNhc2UgJzYnOiByZXR1cm4gJ1x1MDY2Nic7IC8vIEFSQUJJQy1JTkRJQyBESUdJVCBTSVgKKyAgICAgICAgICAgIGNhc2UgJzcnOiByZXR1cm4gJ1x1MDY2Nyc7IC8vIEFSQUJJQy1JTkRJQyBESUdJVCBTRVZFTgorICAgICAgICAgICAgY2FzZSAnOCc6IHJldHVybiAnXHUwNjY4JzsgLy8gQVJBQklDLUlORElDIERJR0lUIEVJR0hUCisgICAgICAgICAgICBjYXNlICc5JzogcmV0dXJuICdcdTA2NjknOyAvLyBBUkFCSUMtSU5ESUMgRElHSVQgTklORQorCisgICAgICAgICAgICBjYXNlICclJzogcmV0dXJuICdcdTA2NkEnOyAvLyBBUkFCSUMgUEVSQ0VOVCBTSUdOCisgICAgICAgICAgICAvLyB0aGUgVHJhZGl0aW9uYWwgQXJhYmljIGZvbnQgZG9lcyBub3QgY29udGFpbiB0aGlzIGNoYXJhY3RlcgorICAgICAgICAgICAgLy8gY2FzZSAnLic6IHJldHVybiAnXHUwNjZCJzsgLy8gQVJBQklDIERFQ0lNQUwgU0VQQVJBVE9SCisgICAgICAgICAgICBjYXNlICcsJzogcmV0dXJuICdcdTA2MEMnOyAvLyBBUkFCSUMgQ09NTUEKKyAgICAgICAgICAgIGNhc2UgJy0nOiByZXR1cm4gJ1x1MDY0MCc7IC8vIEFSQUJJQyBUQVRXRUVMCisgICAgICAgICAgICBjYXNlICdcJyc6IHJldHVybiAnXHUwNjUyJzsgLy8gQVJBQklDIFNVS1VOCisgICAgICAgICAgICBjYXNlICciJzogcmV0dXJuICdcdTA2NTEnOyAvLyBBUkFCSUMgU0hBRERBCisgICAgICAgICAgICBjYXNlICc7JzogcmV0dXJuICdcdTA2MUInOyAvLyBBUkFCSUMgU0VNSUNPTE9OCisgICAgICAgICAgICBjYXNlICc/JzogcmV0dXJuICdcdTA2MUYnOyAvLyBBUkFCSUMgUVVFU1RJT04gTUFSSworCisgICAgICAgICAgICBjYXNlICdhJzogcmV0dXJuICdcdTA2MjcnOyAvLyBBUkFCSUMgTEVUVEVSIEFMRUYKKyAgICAgICAgICAgIGNhc2UgJ0EnOiByZXR1cm4gJ1x1MDYzOSc7IC8vIEFSQUJJQyBMRVRURVIgQUlOCisgICAgICAgICAgICBjYXNlICdiJzogcmV0dXJuICdcdTA2MjgnOyAvLyBBUkFCSUMgTEVUVEVSIEJFSAorICAgICAgICAgICAgY2FzZSAnQic6IHJldHVybiAnXHUwNjI4JzsgLy8gQVJBQklDIExFVFRFUiBCRUgKKyAgICAgICAgICAgIGNhc2UgJ2MnOiByZXR1cm4gJ1x1MDYzNSc7IC8vIEFSQUJJQyBMRVRURVIgU0FECisgICAgICAgICAgICBjYXNlICdDJzogcmV0dXJuICdcdTA2MzUnOyAvLyBBUkFCSUMgTEVUVEVSIFNBRAorICAgICAgICAgICAgY2FzZSAnZCc6IHJldHVybiAnXHUwNjJGJzsgLy8gQVJBQklDIExFVFRFUiBEQUwKKyAgICAgICAgICAgIGNhc2UgJ0QnOiByZXR1cm4gJ1x1MDYzMCc7IC8vIEFSQUJJQyBMRVRURVIgVEhBTAorICAgICAgICAgICAgY2FzZSAnZSc6IHJldHVybiAnXHUwNjRFJzsgLy8gQVJBQklDIEZBVEhBCisgICAgICAgICAgICBjYXNlICdFJzogcmV0dXJuICdcdTA2NEInOyAvLyBBUkFCSUMgRkFUSEFUQU4KKyAgICAgICAgICAgIGNhc2UgJ2YnOiByZXR1cm4gJ1x1MDY0MSc7IC8vIEFSQUJJQyBMRVRURVIgRkVICisgICAgICAgICAgICBjYXNlICdGJzogcmV0dXJuICdcdTA2NDEnOyAvLyBBUkFCSUMgTEVUVEVSIEZFSAorICAgICAgICAgICAgY2FzZSAnZyc6IHJldHVybiAnXHUwNjNBJzsgLy8gQVJBQklDIExFVFRFUiBHSEFJTgorICAgICAgICAgICAgY2FzZSAnRyc6IHJldHVybiAnXHUwNjNBJzsgLy8gQVJBQklDIExFVFRFUiBHSEFJTgorICAgICAgICAgICAgY2FzZSAnaCc6IHJldHVybiAnXHUwNjJEJzsgLy8gQVJBQklDIExFVFRFUiBIQUgKKyAgICAgICAgICAgIGNhc2UgJ0gnOiByZXR1cm4gJ1x1MDY0Nyc7IC8vIEFSQUJJQyBMRVRURVIgSEVICisgICAgICAgICAgICBjYXNlICdpJzogcmV0dXJuICdcdTA2NTAnOyAvLyBBUkFCSUMgS0FTUkEKKyAgICAgICAgICAgIGNhc2UgJ0knOiByZXR1cm4gJ1x1MDY0RCc7IC8vIEFSQUJJQyBLQVNSQVRBTgorICAgICAgICAgICAgY2FzZSAnaic6IHJldHVybiAnXHUwNjJDJzsgLy8gQVJBQklDIExFVFRFUiBKRUVNCisgICAgICAgICAgICBjYXNlICdKJzogcmV0dXJuICdcdTA2MkMnOyAvLyBBUkFCSUMgTEVUVEVSIEpFRU0KKyAgICAgICAgICAgIGNhc2UgJ2snOiByZXR1cm4gJ1x1MDY0Myc7IC8vIEFSQUJJQyBMRVRURVIgS0FGCisgICAgICAgICAgICBjYXNlICdLJzogcmV0dXJuICdcdTA2MkUnOyAvLyBBUkFCSUMgTEVUVEVSIEtIQUgKKyAgICAgICAgICAgIGNhc2UgJ2wnOiByZXR1cm4gJ1x1MDY0NCc7IC8vIEFSQUJJQyBMRVRURVIgTEFNCisgICAgICAgICAgICBjYXNlICdMJzogcmV0dXJuICdcdTA2NDQnOyAvLyBBUkFCSUMgTEVUVEVSIExBTQorICAgICAgICAgICAgY2FzZSAnbSc6IHJldHVybiAnXHUwNjQ1JzsgLy8gQVJBQklDIExFVFRFUiBNRUVNCisgICAgICAgICAgICBjYXNlICdNJzogcmV0dXJuICdcdTA2NDUnOyAvLyBBUkFCSUMgTEVUVEVSIE1FRU0KKyAgICAgICAgICAgIGNhc2UgJ24nOiByZXR1cm4gJ1x1MDY0Nic7IC8vIEFSQUJJQyBMRVRURVIgTk9PTgorICAgICAgICAgICAgY2FzZSAnTic6IHJldHVybiAnXHUwNjQ2JzsgLy8gQVJBQklDIExFVFRFUiBOT09OCisgICAgICAgICAgICBjYXNlICdvJzogcmV0dXJuICdcdTA2NEYnOyAvLyBBUkFCSUMgREFNTUEKKyAgICAgICAgICAgIGNhc2UgJ08nOiByZXR1cm4gJ1x1MDY0Ric7IC8vIEFSQUJJQyBEQU1NQQorICAgICAgICAgICAgY2FzZSAncCc6IHJldHVybiAnXHUwNjI4JzsgLy8gQVJBQklDIExFVFRFUiBCRUgKKyAgICAgICAgICAgIGNhc2UgJ1AnOiByZXR1cm4gJ1x1MDYyOCc7IC8vIEFSQUJJQyBMRVRURVIgQkVICisgICAgICAgICAgICBjYXNlICdxJzogcmV0dXJuICdcdTA2NDInOyAvLyBBUkFCSUMgTEVUVEVSIFFBRgorICAgICAgICAgICAgY2FzZSAnUSc6IHJldHVybiAnXHUwNjQyJzsgLy8gQVJBQklDIExFVFRFUiBRQUYKKyAgICAgICAgICAgIGNhc2UgJ3InOiByZXR1cm4gJ1x1MDYzMSc7IC8vIEFSQUJJQyBMRVRURVIgUkVICisgICAgICAgICAgICBjYXNlICdSJzogcmV0dXJuICdcdTA2MzEnOyAvLyBBUkFCSUMgTEVUVEVSIFJFSAorICAgICAgICAgICAgY2FzZSAncyc6IHJldHVybiAnXHUwNjMzJzsgLy8gQVJBQklDIExFVFRFUiBTRUVOCisgICAgICAgICAgICBjYXNlICdTJzogcmV0dXJuICdcdTA2MzQnOyAvLyBBUkFCSUMgTEVUVEVSIFNIRUVOCisgICAgICAgICAgICBjYXNlICd0JzogcmV0dXJuICdcdTA2MkEnOyAvLyBBUkFCSUMgTEVUVEVSIFRFSAorICAgICAgICAgICAgY2FzZSAnVCc6IHJldHVybiAnXHUwNjJCJzsgLy8gQVJBQklDIExFVFRFUiBUSEVICisgICAgICAgICAgICBjYXNlICdVJzogcmV0dXJuICdcdTA2NEMnOyAvLyBBUkFCSUMgREFNTUFUQU4KKyAgICAgICAgICAgIGNhc2UgJ3UnOiByZXR1cm4gJ1x1MDY0Ric7IC8vIEFSQUJJQyBEQU1NQQorICAgICAgICAgICAgY2FzZSAndic6IHJldHVybiAnXHUwNjQxJzsgLy8gQVJBQklDIExFVFRFUiBGRUgKKyAgICAgICAgICAgIGNhc2UgJ1YnOiByZXR1cm4gJ1x1MDY0MSc7IC8vIEFSQUJJQyBMRVRURVIgRkVICisgICAgICAgICAgICBjYXNlICd3JzogcmV0dXJuICdcdTA2NDgnOyAvLyBBUkFCSUMgTEVUVEVSIFdBVworICAgICAgICAgICAgY2FzZSAnVyc6IHJldHVybiAnXHUwNjQ4JzsgLy8gQVJBQklDIExFVFRFUiBXQVcKKyAgICAgICAgICAgIGNhc2UgJ3gnOiByZXR1cm4gJ1x1MDYzMyc7IC8vIEFSQUJJQyBMRVRURVIgU0VFTgorICAgICAgICAgICAgY2FzZSAnWCc6IHJldHVybiAnXHUwNjMzJzsgLy8gQVJBQklDIExFVFRFUiBTRUVOCisgICAgICAgICAgICBjYXNlICd5JzogcmV0dXJuICdcdTA2NEEnOyAvLyBBUkFCSUMgTEVUVEVSIFlFSAorICAgICAgICAgICAgY2FzZSAnWSc6IHJldHVybiAnXHUwNjRBJzsgLy8gQVJBQklDIExFVFRFUiBZRUgKKyAgICAgICAgICAgIGNhc2UgJ3onOiByZXR1cm4gJ1x1MDYzMic7IC8vIEFSQUJJQyBMRVRURVIgWkFJTgorICAgICAgICAgICAgY2FzZSAnWic6IHJldHVybiAnXHUwNjM4JzsgLy8gQVJBQklDIExFVFRFUiBaQUgKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9CZWhhdmlvci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL0JlaGF2aW9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNjNzhkNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9CZWhhdmlvci5qYXZhCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBCZWhhdmlvci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjUxOjIzICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsOworCitpbXBvcnQgamF2YS5hd3QuR3JhcGhpY3M7CitpbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuRm9jdXNFdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5LZXlFdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5Nb3VzZUV2ZW50OworCisvKiogQSBjbGFzcyB0aGF0IGhhbmRsZXMgZXZlbnRzIGZvciBhIEJlaGF2aW9yT3duZXIuCisqIEEgYmVoYXZpb3IgZW5hY3BzdWxhdGVzIHNvbWUgcGllY2Ugb2YgdGhlIGV2ZW50LWhhbmRsaW5nIGxvZ2ljIGZvciBhIGNvbXBvbmVudC4KKyogVGhpcyBhbGxvd3MgdGhlIGNsaWVudCB0byBzZXBhcmF0ZSBldmVudC1oYW5kbGluZyBsb2dpYyBvdXQgaW50byBzZXBhcmF0ZSBjbGFzc2VzCisqIGFjY29yZGluZyB0byBmdW5jdGlvbiwgb3IgdG8gZHluYW1pY2FsbHkgY2hhbmdlIHRoZSB3YXkgYSBjb21wb25lbnQgaGFuZGxlcworKiBldmVudHMgd2l0aG91dCBhZGRpbmcgYSBsb3Qgb2Ygc3BlY2lhbC1jYXNlIGNvZGUgdG8gdGhlIHBhbmVsIGl0c2VsZi4KKyogQmVoYXZpb3JzIGFyZSBzdG9yZWQgaW4gYSBsaW5rZWQgbGlzdCwgYW5kIGFsbCBiZWhhdmlvcnMgZ2V0IGEgY3JhY2sgYXQgYW4gZXZlbnQgYmVmb3JlCisqIHRoZSBvd25lciBnZXRzIGEgY3JhY2sgYXQgdGhlbSAocmlnaHQgbm93LCB3ZSByZWx5IG9uIG9iamVjdHMgdGhhdCBpbXBsZW1lbnQKKyogQmVoYXZpb3JPd25lciB0byBzdXBwb3J0IHRoZXNlIHNlbWFudGljcykuCisqIEJlaGF2aW9yIHByb3ZpZGVzIGFsbCB0aGUgc2FtZSBldmVudC1oYW5kbGluZyBmdW5jdGlvbnMgdGhhdCBDb21wb25lbnQgcHJvdmlkZXMsIGFuZAorKiB0aGV5IGFsbCBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MuICovCithYnN0cmFjdCBjbGFzcyBCZWhhdmlvciB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgQmVoYXZpb3IgZk5leHRCZWhhdmlvciA9IG51bGw7CisgICAgcHJpdmF0ZSBCZWhhdmlvck93bmVyIGZPd25lciA9IG51bGw7CisKKyAgICBzdGF0aWMgY2xhc3MgRXZlbnRUeXBlIHsKKworICAgICAgICBFdmVudFR5cGUoKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBldmVudHMgLSBzaG91bGQgdGhlc2UgYmUgaW4gVGV4dFBhbmVsIChvciBlbHNld2hlcmUpPworCisgICAgLy8gVGhpcyBldmVudCdzIFdIQVQgcGFyYW1ldGVyIGlzIGEgVGV4dFJhbmdlIGluc3RhbmNlCisgICAgc3RhdGljIGZpbmFsIEV2ZW50VHlwZSBTRUxFQ1QgPSBuZXcgRXZlbnRUeXBlKCk7CisKKyAgICAvLyBObyBXSEFUIHBhcmFtIGZvciB0aGVzZToKKyAgICBzdGF0aWMgZmluYWwgRXZlbnRUeXBlIENVVCA9IG5ldyBFdmVudFR5cGUoKTsKKyAgICBzdGF0aWMgZmluYWwgRXZlbnRUeXBlIENPUFkgPSBuZXcgRXZlbnRUeXBlKCk7CisgICAgc3RhdGljIGZpbmFsIEV2ZW50VHlwZSBQQVNURSA9IG5ldyBFdmVudFR5cGUoKTsKKyAgICBzdGF0aWMgZmluYWwgRXZlbnRUeXBlIENMRUFSID0gbmV3IEV2ZW50VHlwZSgpOworICAgIHN0YXRpYyBmaW5hbCBFdmVudFR5cGUgVU5ETyA9IG5ldyBFdmVudFR5cGUoKTsKKyAgICBzdGF0aWMgZmluYWwgRXZlbnRUeXBlIFJFRE8gPSBuZXcgRXZlbnRUeXBlKCk7CisgICAgc3RhdGljIGZpbmFsIEV2ZW50VHlwZSBDTEVBUl9DT01NQU5EX0xPRyA9IG5ldyBFdmVudFR5cGUoKTsKKworICAgIC8vIFdIQVQgcGFyYW0gaXMgYSBTdHlsZU1vZGlmaWVyCisgICAgc3RhdGljIGZpbmFsIEV2ZW50VHlwZSBDSEFSQUNURVJfU1RZTEVfTU9EID0gbmV3IEV2ZW50VHlwZSgpOworICAgIHN0YXRpYyBmaW5hbCBFdmVudFR5cGUgUEFSQUdSQVBIX1NUWUxFX01PRCA9IG5ldyBFdmVudFR5cGUoKTsKKworICAgIC8vIFdpdGggdGhpcyBldmVudCwgdmFsdWVzIG9mIHRoZSBXSEFUIHBhcmFtZXRlciBhcmUKKyAgICAvLyBlaXRoZXIgQm9vbGVhbi5UUlVFIG9yIEJvb2xlYW4uRkFMU0UKKyAgICBzdGF0aWMgZmluYWwgRXZlbnRUeXBlIFNFVF9NT0RJRklFRCA9IG5ldyBFdmVudFR5cGUoKTsKKworICAgIC8vIFdIQVQgcGFyYW0gaXMgYSBUZXh0UmVwbGFjZW1lbnQKKyAgICBzdGF0aWMgZmluYWwgRXZlbnRUeXBlIFJFUExBQ0UgPSBuZXcgRXZlbnRUeXBlKCk7CisKKyAgICAvLyBXSEFUIHBhcmFtIGlzIGFuIEludGVnZXIKKyAgICBzdGF0aWMgZmluYWwgRXZlbnRUeXBlIFNFVF9DT01NQU5EX0xPR19TSVpFID0gbmV3IEV2ZW50VHlwZSgpOworCisgICAgcHVibGljIEJlaGF2aW9yKCkgeworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZFRvT3duZXIoQmVoYXZpb3JPd25lciBvd25lcikgeworICAgICAgICByZW1vdmVGcm9tT3duZXIoKTsKKyAgICAgICAgZk93bmVyID0gb3duZXI7CisgICAgICAgIHNldE5leHRCZWhhdmlvcihvd25lci5nZXRCZWhhdmlvcigpKTsKKyAgICAgICAgb3duZXIuc2V0QmVoYXZpb3IodGhpcyk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZm9jdXNHYWluZWQoRm9jdXNFdmVudCBlKSB7CisgICAgICAgIGlmIChmTmV4dEJlaGF2aW9yICE9IG51bGwpCisgICAgICAgICAgICByZXR1cm4gZk5leHRCZWhhdmlvci5mb2N1c0dhaW5lZChlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGZvY3VzTG9zdChGb2N1c0V2ZW50IGUpIHsKKyAgICAgICAgaWYgKGZOZXh0QmVoYXZpb3IgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBmTmV4dEJlaGF2aW9yLmZvY3VzTG9zdChlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGtleVByZXNzZWQoS2V5RXZlbnQgZSkgeworICAgICAgICBpZiAoZk5leHRCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZOZXh0QmVoYXZpb3Iua2V5UHJlc3NlZChlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGtleVR5cGVkKEtleUV2ZW50IGUpIHsKKworICAgICAgICBpZiAoZk5leHRCZWhhdmlvciAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZk5leHRCZWhhdmlvci5rZXlUeXBlZChlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpIHsKKyAgICAgICAgaWYgKGZOZXh0QmVoYXZpb3IgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBmTmV4dEJlaGF2aW9yLmtleVJlbGVhc2VkKGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbW91c2VEcmFnZ2VkKE1vdXNlRXZlbnQgZSkgeworICAgICAgICBpZiAoZk5leHRCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZOZXh0QmVoYXZpb3IubW91c2VEcmFnZ2VkKGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbW91c2VFbnRlcmVkKE1vdXNlRXZlbnQgZSkgeworICAgICAgICBpZiAoZk5leHRCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZOZXh0QmVoYXZpb3IubW91c2VFbnRlcmVkKGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbW91c2VFeGl0ZWQoTW91c2VFdmVudCBlKSB7CisgICAgICAgIGlmIChmTmV4dEJlaGF2aW9yICE9IG51bGwpCisgICAgICAgICAgICByZXR1cm4gZk5leHRCZWhhdmlvci5tb3VzZUV4aXRlZChlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG1vdXNlTW92ZWQoTW91c2VFdmVudCBlKSB7CisgICAgICAgIGlmIChmTmV4dEJlaGF2aW9yICE9IG51bGwpCisgICAgICAgICAgICByZXR1cm4gZk5leHRCZWhhdmlvci5tb3VzZU1vdmVkKGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbW91c2VQcmVzc2VkKE1vdXNlRXZlbnQgZSkgeworICAgICAgICBpZiAoZk5leHRCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZOZXh0QmVoYXZpb3IubW91c2VQcmVzc2VkKGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbW91c2VSZWxlYXNlZChNb3VzZUV2ZW50IGUpIHsKKyAgICAgICAgaWYgKGZOZXh0QmVoYXZpb3IgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBmTmV4dEJlaGF2aW9yLm1vdXNlUmVsZWFzZWQoZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgQmVoYXZpb3IgbmV4dEJlaGF2aW9yKCkgeworICAgICAgICByZXR1cm4gZk5leHRCZWhhdmlvcjsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwYWludChHcmFwaGljcyBnLCBSZWN0YW5nbGUgZHJhd1JlY3QpIHsKKyAgICAgICAgaWYgKGZOZXh0QmVoYXZpb3IgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBmTmV4dEJlaGF2aW9yLnBhaW50KGcsIGRyYXdSZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlbW92ZUZyb21Pd25lcigpIHsKKyAgICAgICAgaWYgKGZPd25lciAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoZk93bmVyLmdldEJlaGF2aW9yKCkgPT0gdGhpcykKKyAgICAgICAgICAgICAgICBmT3duZXIuc2V0QmVoYXZpb3IobmV4dEJlaGF2aW9yKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQmVoYXZpb3IgICAgY3VycmVudCA9IGZPd25lci5nZXRCZWhhdmlvcigpOworCisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCAmJiBjdXJyZW50Lm5leHRCZWhhdmlvcigpICE9IHRoaXMpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHRCZWhhdmlvcigpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc2V0TmV4dEJlaGF2aW9yKG5leHRCZWhhdmlvcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldE5leHRCZWhhdmlvcihudWxsKTsKKyAgICAgICAgICAgIGZPd25lciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXROZXh0QmVoYXZpb3IoQmVoYXZpb3IgbmV4dCkgeworICAgICAgICBmTmV4dEJlaGF2aW9yID0gbmV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiB0ZXh0Q29udHJvbEV2ZW50T2NjdXJyZWQoRXZlbnRUeXBlIGV2ZW50LCBPYmplY3QgZGF0YSkgeworICAgICAgICBpZiAoZk5leHRCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZOZXh0QmVoYXZpb3IudGV4dENvbnRyb2xFdmVudE9jY3VycmVkKGV2ZW50LCBkYXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9CZWhhdmlvck93bmVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvQmVoYXZpb3JPd25lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxNjY1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvQmVoYXZpb3JPd25lci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEJlaGF2aW9yT3duZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW50ZXJmYWNlIEJlaGF2aW9yT3duZXIgeworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHVibGljIEJlaGF2aW9yIGdldEJlaGF2aW9yKCk7CisgICAgcHVibGljIHZvaWQgc2V0QmVoYXZpb3IoQmVoYXZpb3IgYik7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvQ29tbWFuZC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL0NvbW1hbmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Zjc2YmZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL0NvbW1hbmQuamF2YQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBDb21tYW5kLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2Fic3RyYWN0IGNsYXNzIENvbW1hbmQgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIENvbW1hbmQgZlByZXZpb3VzQ29tbWFuZCA9IG51bGw7CisKKyAgICAvLyBmTW9kaWZpZWQgaXMgdXNlZCB0byBrZWVwIGEgdGV4dE1vZGlmaWVkIGZsYWcgZm9yCisgICAgLy8gY2xpZW50cworICAgIHByaXZhdGUgYm9vbGVhbiBmTW9kaWZpZWQ7CisKKyAgICBwdWJsaWMgQ29tbWFuZCgpIHsKKyAgICAgICAgZk1vZGlmaWVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29tbWFuZCBwcmV2aW91c0NvbW1hbmQoKSB7CisgICAgICAgIHJldHVybiBmUHJldmlvdXNDb21tYW5kOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFByZXZpb3VzQ29tbWFuZChDb21tYW5kICBwcmV2aW91c0NvbW1hbmQpIHsKKyAgICAgICAgZlByZXZpb3VzQ29tbWFuZCA9IHByZXZpb3VzQ29tbWFuZDsKKyAgICB9CisKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBleGVjdXRlKCk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgdW5kbygpOworCisgICAgcHVibGljIHZvaWQgcmVkbygpIHsKKyAgICAgICAgZXhlY3V0ZSgpOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzTW9kaWZpZWQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZNb2RpZmllZDsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRNb2RpZmllZChib29sZWFuIG1vZGlmaWVkKSB7CisKKyAgICAgICAgZk1vZGlmaWVkID0gbW9kaWZpZWQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL0Zha2VDb21wb25lbnQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9GYWtlQ29tcG9uZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGFkNTc1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9GYWtlQ29tcG9uZW50LmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRmFrZUNvbXBvbmVudC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjUxOjIzICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsOworCitpbXBvcnQgamF2YS5hd3QuQ29tcG9uZW50OworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzOworCithYnN0cmFjdCBjbGFzcyBGYWtlQ29tcG9uZW50IHsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByb3RlY3RlZCBDb21wb25lbnQgZkhvc3Q7CisgICAgCisgICAgYWJzdHJhY3Qgdm9pZCBhZGROb3RpZnkoKTsKKyAgICBhYnN0cmFjdCB2b2lkIHBhaW50KEdyYXBoaWNzIGcpOworICAgIHZvaWQgc2V0SG9zdChDb21wb25lbnQgaG9zdCkgeyAgIAorICAgICAgICBmSG9zdCA9IGhvc3Q7CisgICAgfQorICAgIGFic3RyYWN0IHZvaWQgcmVxdWVzdEZvY3VzKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL0hhY2tBcmFiaWNUcmFuc2xpdGVyYXRpb24uamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9IYWNrQXJhYmljVHJhbnNsaXRlcmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2MwMzFlNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9IYWNrQXJhYmljVHJhbnNsaXRlcmF0aW9uLmphdmEKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEhhY2tBcmFiaWNUcmFuc2xpdGVyYXRpb24uamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLyoKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKi8KKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworLyoKK0ZvciBhbnkgaW5jb21pbmcgY2hhcmFjdGVyIEMKK2lmIHlvdSBjYW4gbWFwIEMgdXNpbmcgdGhlIGZvbGxvd2luZyBGYWtlQXJhYmljVGFibGUsIHJldHVybgorRmFrZUFyYWJpY1RhYmxlKEMpCitlbHNlIGlmIEMgaXMgZnJvbSBBIHRocm91Z2ggWiwgcmV0dXJuIEZha2VBcmFiaWNUYWJsZShsb3dlcmNhc2UoQykpCitlbHNlIGp1c3QgcmV0dXJuIEMKKworCitGYWtlQXJhYmljVGFibGUgaXMgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIG1hcHBpbmcKKworMCAgIDA2NjA7QVJBQklDLUlORElDIERJR0lUIFpFUk87TmQ7MDtBTjs7MDswOzA7Tjs7Ozs7CisxICAgMDY2MTtBUkFCSUMtSU5ESUMgRElHSVQgT05FO05kOzA7QU47OzE7MTsxO047Ozs7OworMiAgIDA2NjI7QVJBQklDLUlORElDIERJR0lUIFRXTztOZDswO0FOOzsyOzI7MjtOOzs7OzsKKzMgICAwNjYzO0FSQUJJQy1JTkRJQyBESUdJVCBUSFJFRTtOZDswO0FOOzszOzM7MztOOzs7OzsKKzQgICAwNjY0O0FSQUJJQy1JTkRJQyBESUdJVCBGT1VSO05kOzA7QU47OzQ7NDs0O047Ozs7OworNSAgIDA2NjU7QVJBQklDLUlORElDIERJR0lUIEZJVkU7TmQ7MDtBTjs7NTs1OzU7Tjs7Ozs7Cis2ICAgMDY2NjtBUkFCSUMtSU5ESUMgRElHSVQgU0lYO05kOzA7QU47OzY7Njs2O047Ozs7OworNyAgIDA2Njc7QVJBQklDLUlORElDIERJR0lUIFNFVkVOO05kOzA7QU47Ozc7Nzs3O047Ozs7OworOCAgIDA2Njg7QVJBQklDLUlORElDIERJR0lUIEVJR0hUO05kOzA7QU47Ozg7ODs4O047Ozs7OworOSAgIDA2Njk7QVJBQklDLUlORElDIERJR0lUIE5JTkU7TmQ7MDtBTjs7OTs5Ozk7Tjs7Ozs7CisKKyUgICAwNjZBO0FSQUJJQyBQRVJDRU5UIFNJR047UG87MDtFVDs7Ozs7Tjs7Ozs7CisuICAgMDY2QjtBUkFCSUMgREVDSU1BTCBTRVBBUkFUT1I7UG87MDtBTjs7Ozs7Tjs7Ozs7CissICAgMDYwQztBUkFCSUMgQ09NTUE7UG87MDtSOzs7OztOOzs7OzsKKy0gICAwNjQwO0FSQUJJQyBUQVRXRUVMO0xtOzA7Ujs7Ozs7Tjs7Ozs7CisnICAgMDY1MjtBUkFCSUMgU1VLVU47TW47MzQ7Ujs7Ozs7Tjs7Ozs7CisiICAgMDY1MTtBUkFCSUMgU0hBRERBO01uOzMzO1I7Ozs7O047QVJBQklDIFNIQUREQUg7Ozs7Cis7ICAgMDYxQjtBUkFCSUMgU0VNSUNPTE9OO1BvOzA7Ujs7Ozs7Tjs7Ozs7Cis/ICAgMDYxRjtBUkFCSUMgUVVFU1RJT04gTUFSSztQbzswO1I7Ozs7O047Ozs7OworCithICAgMDYyNztBUkFCSUMgTEVUVEVSIEFMRUY7TG87MDtSOzs7OztOOzs7OzsKK0EgICAwNjM5O0FSQUJJQyBMRVRURVIgQUlOO0xvOzA7Ujs7Ozs7Tjs7Ozs7CitiICAgMDYyODtBUkFCSUMgTEVUVEVSIEJFSDtMbzswO1I7Ozs7O047QVJBQklDIExFVFRFUiBCQUE7Ozs7CitjICAgMDYzNTtBUkFCSUMgTEVUVEVSIFNBRDtMbzswO1I7Ozs7O047Ozs7OworZCAgIDA2MkY7QVJBQklDIExFVFRFUiBEQUw7TG87MDtSOzs7OztOOzs7OzsKK0QgICAwNjMwO0FSQUJJQyBMRVRURVIgVEhBTDtMbzswO1I7Ozs7O047Ozs7OworRSAgIDA2NEI7QVJBQklDIEZBVEhBVEFOO01uOzI3O1I7Ozs7O047Ozs7OworZSAgIDA2NEU7QVJBQklDIEZBVEhBO01uOzMwO1I7Ozs7O047QVJBQklDIEZBVEhBSDs7OzsKK2YgICAwNjQxO0FSQUJJQyBMRVRURVIgRkVIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIEZBOzs7OworZyAgIDA2M0E7QVJBQklDIExFVFRFUiBHSEFJTjtMbzswO1I7Ozs7O047Ozs7OworaCAgIDA2MkQ7QVJBQklDIExFVFRFUiBIQUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgSEFBOzs7OworSCAgIDA2NDc7QVJBQklDIExFVFRFUiBIRUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgSEE7Ozs7CitJICAgMDY0RDtBUkFCSUMgS0FTUkFUQU47TW47Mjk7Ujs7Ozs7Tjs7Ozs7CitpICAgMDY1MDtBUkFCSUMgS0FTUkE7TW47MzI7Ujs7Ozs7TjtBUkFCSUMgS0FTUkFIOzs7OworaiAgIDA2MkM7QVJBQklDIExFVFRFUiBKRUVNO0xvOzA7Ujs7Ozs7Tjs7Ozs7CitLICAgMDYyRTtBUkFCSUMgTEVUVEVSIEtIQUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgS0hBQTs7OzsKK2sgICAwNjQzO0FSQUJJQyBMRVRURVIgS0FGO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIENBRjs7OzsKK2wgICAwNjQ0O0FSQUJJQyBMRVRURVIgTEFNO0xvOzA7Ujs7Ozs7Tjs7Ozs7CittICAgMDY0NTtBUkFCSUMgTEVUVEVSIE1FRU07TG87MDtSOzs7OztOOzs7OzsKK24gICAwNjQ2O0FSQUJJQyBMRVRURVIgTk9PTjtMbzswO1I7Ozs7O047Ozs7OworbyAgIDA2NEY7QVJBQklDIERBTU1BO01uOzMxO1I7Ozs7O047QVJBQklDIERBTU1BSDs7OzsKK3AgICAwNjI4O0FSQUJJQyBMRVRURVIgQkVIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIEJBQTs7OzsKK3EgICAwNjQyO0FSQUJJQyBMRVRURVIgUUFGO0xvOzA7Ujs7Ozs7Tjs7Ozs7CityICAgMDYzMTtBUkFCSUMgTEVUVEVSIFJFSDtMbzswO1I7Ozs7O047QVJBQklDIExFVFRFUiBSQTs7OzsKK3MgICAwNjMzO0FSQUJJQyBMRVRURVIgU0VFTjtMbzswO1I7Ozs7O047Ozs7OworUyAgIDA2MzQ7QVJBQklDIExFVFRFUiBTSEVFTjtMbzswO1I7Ozs7O047Ozs7OwordCAgIDA2MkE7QVJBQklDIExFVFRFUiBURUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgVEFBOzs7OworVCAgIDA2MkI7QVJBQklDIExFVFRFUiBUSEVIO0xvOzA7Ujs7Ozs7TjtBUkFCSUMgTEVUVEVSIFRIQUE7Ozs7CitVICAgMDY0QztBUkFCSUMgREFNTUFUQU47TW47Mjg7Ujs7Ozs7Tjs7Ozs7Cit1ICAgMDY0RjtBUkFCSUMgREFNTUE7TW47MzE7Ujs7Ozs7TjtBUkFCSUMgREFNTUFIOzs7OwordiAgIDA2NDE7QVJBQklDIExFVFRFUiBGRUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgRkE7Ozs7Cit3ICAgMDY0ODtBUkFCSUMgTEVUVEVSIFdBVztMbzswO1I7Ozs7O047Ozs7OworeCAgIDA2MzM7QVJBQklDIExFVFRFUiBTRUVOO0xvOzA7Ujs7Ozs7Tjs7Ozs7Cit5ICAgMDY0QTtBUkFCSUMgTEVUVEVSIFlFSDtMbzswO1I7Ozs7O047QVJBQklDIExFVFRFUiBZQTs7OzsKK3ogICAwNjMyO0FSQUJJQyBMRVRURVIgWkFJTjtMbzswO1I7Ozs7O047Ozs7OworWiAgIDA2Mzg7QVJBQklDIExFVFRFUiBaQUg7TG87MDtSOzs7OztOO0FSQUJJQyBMRVRURVIgREhBSDs7OzsKKworKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgS2V5UmVtYXAgdG8gcHJvZHVjZSB0cmFuc2xpdGVyYXRlZCBBcmFiaWMKKyAqIGNoYXJhY3RlcnMgZnJvbSBMYXRpbi0xIGNoYXJhY3RlcnMuCisgKi8KKworLy8gTk9URTogdGhpcyBjbGFzcyBlbGltaW5hdGVzIEFyYWJpYyB2b3dlbHMgd2hpY2ggbG9vayB1Z2x5CisvLyBpbiB0aGUgZm9udCBpbiB3aGljaCB3ZSBoYXBwZW4gdG8gYmUgZGVtbydpbmcuICBJdCdzIHRvdGFsbHkKKy8vIGJvZ3VzIG90aGVyd2lzZS4KK2ZpbmFsIGNsYXNzIEhhY2tBcmFiaWNUcmFuc2xpdGVyYXRpb24gZXh0ZW5kcyBLZXlSZW1hcCB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHB1YmxpYyBjaGFyIHJlbWFwKGNoYXIgYykgeworCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAnMCc6IHJldHVybiAnXHUwNjYwJzsgLy8gQVJBQklDLUlORElDIERJR0lUIFpFUk8KKyAgICAgICAgICAgIGNhc2UgJzEnOiByZXR1cm4gJ1x1MDY2MSc7IC8vIEFSQUJJQy1JTkRJQyBESUdJVCBPTkUKKyAgICAgICAgICAgIGNhc2UgJzInOiByZXR1cm4gJ1x1MDY2Mic7IC8vIEFSQUJJQy1JTkRJQyBESUdJVCBUV08KKyAgICAgICAgICAgIGNhc2UgJzMnOiByZXR1cm4gJ1x1MDY2Myc7IC8vIEFSQUJJQy1JTkRJQyBESUdJVCBUSFJFRQorICAgICAgICAgICAgY2FzZSAnNCc6IHJldHVybiAnXHUwNjY0JzsgLy8gQVJBQklDLUlORElDIERJR0lUIEZPVVIKKyAgICAgICAgICAgIGNhc2UgJzUnOiByZXR1cm4gJ1x1MDY2NSc7IC8vIEFSQUJJQy1JTkRJQyBESUdJVCBGSVZFCisgICAgICAgICAgICBjYXNlICc2JzogcmV0dXJuICdcdTA2NjYnOyAvLyBBUkFCSUMtSU5ESUMgRElHSVQgU0lYCisgICAgICAgICAgICBjYXNlICc3JzogcmV0dXJuICdcdTA2NjcnOyAvLyBBUkFCSUMtSU5ESUMgRElHSVQgU0VWRU4KKyAgICAgICAgICAgIGNhc2UgJzgnOiByZXR1cm4gJ1x1MDY2OCc7IC8vIEFSQUJJQy1JTkRJQyBESUdJVCBFSUdIVAorICAgICAgICAgICAgY2FzZSAnOSc6IHJldHVybiAnXHUwNjY5JzsgLy8gQVJBQklDLUlORElDIERJR0lUIE5JTkUKKworICAgICAgICAgICAgY2FzZSAnJSc6IHJldHVybiAnXHUwNjZBJzsgLy8gQVJBQklDIFBFUkNFTlQgU0lHTgorICAgICAgICAgICAgLy8gdGhlIFRyYWRpdGlvbmFsIEFyYWJpYyBmb250IGRvZXMgbm90IGNvbnRhaW4gdGhpcyBjaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIGNhc2UgJy4nOiByZXR1cm4gJ1x1MDY2Qic7IC8vIEFSQUJJQyBERUNJTUFMIFNFUEFSQVRPUgorICAgICAgICAgICAgY2FzZSAnLCc6IHJldHVybiAnXHUwNjBDJzsgLy8gQVJBQklDIENPTU1BCisgICAgICAgICAgICBjYXNlICctJzogcmV0dXJuICdcdTA2NDAnOyAvLyBBUkFCSUMgVEFUV0VFTAorICAgICAgICAgICAgY2FzZSAnXCcnOiByZXR1cm4gJ1x1MDY1Mic7IC8vIEFSQUJJQyBTVUtVTgorICAgICAgICAgICAgY2FzZSAnIic6IHJldHVybiAnXHUwNjUxJzsgLy8gQVJBQklDIFNIQUREQQorICAgICAgICAgICAgY2FzZSAnOyc6IHJldHVybiAnXHUwNjFCJzsgLy8gQVJBQklDIFNFTUlDT0xPTgorICAgICAgICAgICAgY2FzZSAnPyc6IHJldHVybiAnXHUwNjFGJzsgLy8gQVJBQklDIFFVRVNUSU9OIE1BUksKKworICAgICAgICAgICAgY2FzZSAnYSc6IHJldHVybiAnXHUwNjI3JzsgLy8gQVJBQklDIExFVFRFUiBBTEVGCisgICAgICAgICAgICBjYXNlICdBJzogcmV0dXJuICdcdTA2MzknOyAvLyBBUkFCSUMgTEVUVEVSIEFJTgorICAgICAgICAgICAgY2FzZSAnYic6IHJldHVybiAnXHUwNjI4JzsgLy8gQVJBQklDIExFVFRFUiBCRUgKKyAgICAgICAgICAgIGNhc2UgJ0InOiByZXR1cm4gJ1x1MDYyOCc7IC8vIEFSQUJJQyBMRVRURVIgQkVICisgICAgICAgICAgICBjYXNlICdjJzogcmV0dXJuICdcdTA2MzUnOyAvLyBBUkFCSUMgTEVUVEVSIFNBRAorICAgICAgICAgICAgY2FzZSAnQyc6IHJldHVybiAnXHUwNjM1JzsgLy8gQVJBQklDIExFVFRFUiBTQUQKKyAgICAgICAgICAgIGNhc2UgJ2QnOiByZXR1cm4gJ1x1MDYyRic7IC8vIEFSQUJJQyBMRVRURVIgREFMCisgICAgICAgICAgICBjYXNlICdEJzogcmV0dXJuICdcdTA2MzAnOyAvLyBBUkFCSUMgTEVUVEVSIFRIQUwKKyAgICAgICAgICAgIGNhc2UgJ2UnOiAvL3JldHVybiAnXHUwNjRFJzsgLy8gQVJBQklDIEZBVEhBCisgICAgICAgICAgICBjYXNlICdFJzogLy9yZXR1cm4gJ1x1MDY0Qic7IC8vIEFSQUJJQyBGQVRIQVRBTgorICAgICAgICAgICAgY2FzZSAnZic6IHJldHVybiAnXHUwNjQxJzsgLy8gQVJBQklDIExFVFRFUiBGRUgKKyAgICAgICAgICAgIGNhc2UgJ0YnOiByZXR1cm4gJ1x1MDY0MSc7IC8vIEFSQUJJQyBMRVRURVIgRkVICisgICAgICAgICAgICBjYXNlICdnJzogcmV0dXJuICdcdTA2M0EnOyAvLyBBUkFCSUMgTEVUVEVSIEdIQUlOCisgICAgICAgICAgICBjYXNlICdHJzogcmV0dXJuICdcdTA2M0EnOyAvLyBBUkFCSUMgTEVUVEVSIEdIQUlOCisgICAgICAgICAgICBjYXNlICdoJzogcmV0dXJuICdcdTA2MkQnOyAvLyBBUkFCSUMgTEVUVEVSIEhBSAorICAgICAgICAgICAgY2FzZSAnSCc6IHJldHVybiAnXHUwNjQ3JzsgLy8gQVJBQklDIExFVFRFUiBIRUgKKyAgICAgICAgICAgIGNhc2UgJ2knOiAvL3JldHVybiAnXHUwNjUwJzsgLy8gQVJBQklDIEtBU1JBCisgICAgICAgICAgICBjYXNlICdJJzogLy9yZXR1cm4gJ1x1MDY0RCc7IC8vIEFSQUJJQyBLQVNSQVRBTgorICAgICAgICAgICAgY2FzZSAnaic6IHJldHVybiAnXHUwNjJDJzsgLy8gQVJBQklDIExFVFRFUiBKRUVNCisgICAgICAgICAgICBjYXNlICdKJzogcmV0dXJuICdcdTA2MkMnOyAvLyBBUkFCSUMgTEVUVEVSIEpFRU0KKyAgICAgICAgICAgIGNhc2UgJ2snOiByZXR1cm4gJ1x1MDY0Myc7IC8vIEFSQUJJQyBMRVRURVIgS0FGCisgICAgICAgICAgICBjYXNlICdLJzogcmV0dXJuICdcdTA2MkUnOyAvLyBBUkFCSUMgTEVUVEVSIEtIQUgKKyAgICAgICAgICAgIGNhc2UgJ2wnOiByZXR1cm4gJ1x1MDY0NCc7IC8vIEFSQUJJQyBMRVRURVIgTEFNCisgICAgICAgICAgICBjYXNlICdMJzogcmV0dXJuICdcdTA2NDQnOyAvLyBBUkFCSUMgTEVUVEVSIExBTQorICAgICAgICAgICAgY2FzZSAnbSc6IHJldHVybiAnXHUwNjQ1JzsgLy8gQVJBQklDIExFVFRFUiBNRUVNCisgICAgICAgICAgICBjYXNlICdNJzogcmV0dXJuICdcdTA2NDUnOyAvLyBBUkFCSUMgTEVUVEVSIE1FRU0KKyAgICAgICAgICAgIGNhc2UgJ24nOiByZXR1cm4gJ1x1MDY0Nic7IC8vIEFSQUJJQyBMRVRURVIgTk9PTgorICAgICAgICAgICAgY2FzZSAnTic6IHJldHVybiAnXHUwNjQ2JzsgLy8gQVJBQklDIExFVFRFUiBOT09OCisgICAgICAgICAgICBjYXNlICdvJzogLy9yZXR1cm4gJ1x1MDY0Ric7IC8vIEFSQUJJQyBEQU1NQQorICAgICAgICAgICAgY2FzZSAnTyc6IC8vcmV0dXJuICdcdTA2NEYnOyAvLyBBUkFCSUMgREFNTUEKKyAgICAgICAgICAgIGNhc2UgJ3AnOiByZXR1cm4gJ1x1MDYyOCc7IC8vIEFSQUJJQyBMRVRURVIgQkVICisgICAgICAgICAgICBjYXNlICdQJzogcmV0dXJuICdcdTA2MjgnOyAvLyBBUkFCSUMgTEVUVEVSIEJFSAorICAgICAgICAgICAgY2FzZSAncSc6IHJldHVybiAnXHUwNjQyJzsgLy8gQVJBQklDIExFVFRFUiBRQUYKKyAgICAgICAgICAgIGNhc2UgJ1EnOiByZXR1cm4gJ1x1MDY0Mic7IC8vIEFSQUJJQyBMRVRURVIgUUFGCisgICAgICAgICAgICBjYXNlICdyJzogcmV0dXJuICdcdTA2MzEnOyAvLyBBUkFCSUMgTEVUVEVSIFJFSAorICAgICAgICAgICAgY2FzZSAnUic6IHJldHVybiAnXHUwNjMxJzsgLy8gQVJBQklDIExFVFRFUiBSRUgKKyAgICAgICAgICAgIGNhc2UgJ3MnOiByZXR1cm4gJ1x1MDYzMyc7IC8vIEFSQUJJQyBMRVRURVIgU0VFTgorICAgICAgICAgICAgY2FzZSAnUyc6IHJldHVybiAnXHUwNjM0JzsgLy8gQVJBQklDIExFVFRFUiBTSEVFTgorICAgICAgICAgICAgY2FzZSAndCc6IHJldHVybiAnXHUwNjJBJzsgLy8gQVJBQklDIExFVFRFUiBURUgKKyAgICAgICAgICAgIGNhc2UgJ1QnOiByZXR1cm4gJ1x1MDYyQic7IC8vIEFSQUJJQyBMRVRURVIgVEhFSAorICAgICAgICAgICAgY2FzZSAnVSc6IC8vcmV0dXJuICdcdTA2NEMnOyAvLyBBUkFCSUMgREFNTUFUQU4KKyAgICAgICAgICAgIGNhc2UgJ3UnOiAvL3JldHVybiAnXHUwNjRGJzsgLy8gQVJBQklDIERBTU1BCisgICAgICAgICAgICBjYXNlICd2JzogcmV0dXJuICdcdTA2NDEnOyAvLyBBUkFCSUMgTEVUVEVSIEZFSAorICAgICAgICAgICAgY2FzZSAnVic6IHJldHVybiAnXHUwNjQxJzsgLy8gQVJBQklDIExFVFRFUiBGRUgKKyAgICAgICAgICAgIGNhc2UgJ3cnOiByZXR1cm4gJ1x1MDY0OCc7IC8vIEFSQUJJQyBMRVRURVIgV0FXCisgICAgICAgICAgICBjYXNlICdXJzogcmV0dXJuICdcdTA2NDgnOyAvLyBBUkFCSUMgTEVUVEVSIFdBVworICAgICAgICAgICAgY2FzZSAneCc6IHJldHVybiAnXHUwNjMzJzsgLy8gQVJBQklDIExFVFRFUiBTRUVOCisgICAgICAgICAgICBjYXNlICdYJzogcmV0dXJuICdcdTA2MzMnOyAvLyBBUkFCSUMgTEVUVEVSIFNFRU4KKyAgICAgICAgICAgIGNhc2UgJ3knOiByZXR1cm4gJ1x1MDY0QSc7IC8vIEFSQUJJQyBMRVRURVIgWUVICisgICAgICAgICAgICBjYXNlICdZJzogcmV0dXJuICdcdTA2NEEnOyAvLyBBUkFCSUMgTEVUVEVSIFlFSAorICAgICAgICAgICAgY2FzZSAneic6IHJldHVybiAnXHUwNjMyJzsgLy8gQVJBQklDIExFVFRFUiBaQUlOCisgICAgICAgICAgICBjYXNlICdaJzogcmV0dXJuICdcdTA2MzgnOyAvLyBBUkFCSUMgTEVUVEVSIFpBSAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL0hlYnJld1RyYW5zbGl0ZXJhdGlvbi5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL0hlYnJld1RyYW5zbGl0ZXJhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhNjdiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvSGVicmV3VHJhbnNsaXRlcmF0aW9uLmphdmEKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogSGVicmV3VHJhbnNsaXRlcmF0aW9uLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KKy8qCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICovCisKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEtleVJlbWFwIHRvIHByb2R1Y2UgdHJhbnNsaXRlcmF0ZWQgSGVicmV3CisgKiBjaGFyYWN0ZXJzIGZyb20gTGF0aW4tMSBjaGFyYWN0ZXJzLgorICovCisKK2ZpbmFsIGNsYXNzIEhlYnJld1RyYW5zbGl0ZXJhdGlvbiBleHRlbmRzIEtleVJlbWFwIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHVibGljIGNoYXIgcmVtYXAoY2hhciBjKSB7CisKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICdhJzogcmV0dXJuICdcdTA1RDAnOyAvLyBIRUJSRVcgTEVUVEVSIEFMRUYKKyAgICAgICAgICAgIGNhc2UgJ0EnOiByZXR1cm4gJ1x1MDVFMic7IC8vIEhFQlJFVyBMRVRURVIgQVlJTgorICAgICAgICAgICAgY2FzZSAnYic6IHJldHVybiAnXHUwNUQxJzsgLy8gSEVCUkVXIExFVFRFUiBCRVQKKyAgICAgICAgICAgIGNhc2UgJ0InOiByZXR1cm4gJ1x1MDVEMSc7IC8vIEhFQlJFVyBMRVRURVIgQkVUCisgICAgICAgICAgICBjYXNlICdjJzogcmV0dXJuICdcdTA1RTYnOyAvLyBIRUJSRVcgTEVUVEVSIFRTQURJCisgICAgICAgICAgICBjYXNlICdDJzogcmV0dXJuICdcdTA1RTUnOyAvLyBIRUJSRVcgTEVUVEVSIEZJTkFMIFRTQURJCisgICAgICAgICAgICBjYXNlICdkJzogcmV0dXJuICdcdTA1RDMnOyAvLyBIRUJSRVcgTEVUVEVSIERBTEVUCisgICAgICAgICAgICBjYXNlICdEJzogcmV0dXJuICdcdTA1QkMnOyAvLyBIRUJSRVcgUE9JTlQgREFHRVNICisgICAgICAgICAgICBjYXNlICdlJzogcmV0dXJuICdcdTA1QjUnOyAvLyBIRUJSRVcgUE9JTlQgVFNFUkUKKyAgICAgICAgICAgIGNhc2UgJ0UnOiByZXR1cm4gJ1x1MDVCNic7IC8vIEhFQlJFVyBQT0lOVCBTRUdPTAorICAgICAgICAgICAgY2FzZSAnZic6IHJldHVybiAnXHUwNUU0JzsgLy8gSEVCUkVXIExFVFRFUiBQRQorICAgICAgICAgICAgY2FzZSAnRic6IHJldHVybiAnXHUwNUU0JzsgLy8gSEVCUkVXIExFVFRFUiBQRQorICAgICAgICAgICAgY2FzZSAnZyc6IHJldHVybiAnXHUwNUQyJzsgLy8gSEVCUkVXIExFVFRFUiBHSU1FTAorICAgICAgICAgICAgY2FzZSAnRyc6IHJldHVybiAnXHUwNUQyJzsgLy8gSEVCUkVXIExFVFRFUiBHSU1FTAorICAgICAgICAgICAgY2FzZSAnaCc6IHJldHVybiAnXHUwNUQ0JzsgLy8gSEVCUkVXIExFVFRFUiBIRQorICAgICAgICAgICAgY2FzZSAnSCc6IHJldHVybiAnXHUwNUQ3JzsgLy8gSEVCUkVXIExFVFRFUiBIRVQKKyAgICAgICAgICAgIGNhc2UgJ2knOiByZXR1cm4gJ1x1MDVEOSc7IC8vIEhFQlJFVyBMRVRURVIgWU9ECisgICAgICAgICAgICBjYXNlICdJJzogcmV0dXJuICdcdTA1QjQnOyAvLyBIRUJSRVcgUE9JTlQgSElSSVEKKyAgICAgICAgICAgIGNhc2UgJ2onOiByZXR1cm4gJ1x1MDVEOSc7IC8vIEhFQlJFVyBMRVRURVIgWU9ECisgICAgICAgICAgICBjYXNlICdKJzogcmV0dXJuICdcdTA1QzEnOyAvLyBIRUJSRVcgUE9JTlQgU0hJTiBET1QKKyAgICAgICAgICAgIGNhc2UgJ2snOiByZXR1cm4gJ1x1MDVEQic7IC8vIEhFQlJFVyBMRVRURVIgS0FGCisgICAgICAgICAgICBjYXNlICdLJzogcmV0dXJuICdcdTA1REEnOyAvLyBIRUJSRVcgTEVUVEVSIEZJTkFMIEtBRgorICAgICAgICAgICAgY2FzZSAnbCc6IHJldHVybiAnXHUwNURDJzsgLy8gSEVCUkVXIExFVFRFUiBMQU1FRAorICAgICAgICAgICAgY2FzZSAnTCc6IHJldHVybiAnXHUwNURDJzsgLy8gSEVCUkVXIExFVFRFUiBMQU1FRAorICAgICAgICAgICAgY2FzZSAnbSc6IHJldHVybiAnXHUwNURFJzsgLy8gSEVCUkVXIExFVFRFUiBNRU0KKyAgICAgICAgICAgIGNhc2UgJ00nOiByZXR1cm4gJ1x1MDVERCc7IC8vIEhFQlJFVyBMRVRURVIgRklOQUwgTUVNCisgICAgICAgICAgICBjYXNlICduJzogcmV0dXJuICdcdTA1RTAnOyAvLyBIRUJSRVcgTEVUVEVSIE5VTgorICAgICAgICAgICAgY2FzZSAnTic6IHJldHVybiAnXHUwNURGJzsgLy8gSEVCUkVXIExFVFRFUiBGSU5BTCBOVU4KKyAgICAgICAgICAgIGNhc2UgJ28nOiByZXR1cm4gJ1x1MDVENSc7IC8vIEhFQlJFVyBMRVRURVIgVkFWCisgICAgICAgICAgICBjYXNlICdPJzogcmV0dXJuICdcdTA1QjknOyAvLyBIRUJSRVcgUE9JTlQgSE9MQU0KKyAgICAgICAgICAgIGNhc2UgJ3AnOiByZXR1cm4gJ1x1MDVFNCc7IC8vIEhFQlJFVyBMRVRURVIgUEUKKyAgICAgICAgICAgIGNhc2UgJ1AnOiByZXR1cm4gJ1x1MDVFMyc7IC8vIEhFQlJFVyBMRVRURVIgRklOQUwgUEUKKyAgICAgICAgICAgIGNhc2UgJ3EnOiByZXR1cm4gJ1x1MDVFNyc7IC8vIEhFQlJFVyBMRVRURVIgUU9GCisgICAgICAgICAgICBjYXNlICdRJzogcmV0dXJuICdcdTA1RTcnOyAvLyBIRUJSRVcgTEVUVEVSIFFPRgorICAgICAgICAgICAgY2FzZSAncic6IHJldHVybiAnXHUwNUU4JzsgLy8gSEVCUkVXIExFVFRFUiBSRVNICisgICAgICAgICAgICBjYXNlICdSJzogcmV0dXJuICdcdTA1QkYnOyAvLyBIRUJSRVcgUE9JTlQgUkFGRQorICAgICAgICAgICAgY2FzZSAncyc6IHJldHVybiAnXHUwNUU5JzsgLy8gSEVCUkVXIExFVFRFUiBTSElOCisgICAgICAgICAgICBjYXNlICdTJzogcmV0dXJuICdcdTA1RTEnOyAvLyBIRUJSRVcgTEVUVEVSIFNBTUVLSAorICAgICAgICAgICAgY2FzZSAndCc6IHJldHVybiAnXHUwNUVBJzsgLy8gSEVCUkVXIExFVFRFUiBUQVYKKyAgICAgICAgICAgIGNhc2UgJ1QnOiByZXR1cm4gJ1x1MDVEOCc7IC8vIEhFQlJFVyBMRVRURVIgVEVUCisgICAgICAgICAgICBjYXNlICd1JzogcmV0dXJuICdcdTA1RDUnOyAvLyBIRUJSRVcgTEVUVEVSIFZBVgorICAgICAgICAgICAgY2FzZSAnVSc6IHJldHVybiAnXHUwNUJCJzsgLy8gSEVCUkVXIFBPSU5UIFFVQlVUUworICAgICAgICAgICAgY2FzZSAndic6IHJldHVybiAnXHUwNUQ1JzsgLy8gSEVCUkVXIExFVFRFUiBWQVYKKyAgICAgICAgICAgIGNhc2UgJ1YnOiByZXR1cm4gJ1x1MDVCNyc7IC8vIEhFQlJFVyBQT0lOVCBQQVRBSAorICAgICAgICAgICAgY2FzZSAndyc6IHJldHVybiAnXHUwNUQ1JzsgLy8gSEVCUkVXIExFVFRFUiBWQVYKKyAgICAgICAgICAgIGNhc2UgJ1cnOiByZXR1cm4gJ1x1MDVCOCc7IC8vIEhFQlJFVyBQT0lOVCBRQU1BVFMKKyAgICAgICAgICAgIGNhc2UgJ3gnOiByZXR1cm4gJ1x1MDVFNic7IC8vIEhFQlJFVyBMRVRURVIgVFNBREkKKyAgICAgICAgICAgIGNhc2UgJ1gnOiByZXR1cm4gJ1x1MDVFNSc7IC8vIEhFQlJFVyBMRVRURVIgRklOQUwgVFNBREkKKyAgICAgICAgICAgIGNhc2UgJ3knOiByZXR1cm4gJ1x1MDVEOSc7IC8vIEhFQlJFVyBMRVRURVIgWU9ECisgICAgICAgICAgICBjYXNlICdZJzogcmV0dXJuICdcdTA1RDknOyAvLyBIRUJSRVcgTEVUVEVSIFlPRAorICAgICAgICAgICAgY2FzZSAneic6IHJldHVybiAnXHUwNUQ2JzsgLy8gSEVCUkVXIExFVFRFUiBaQVlJTgorICAgICAgICAgICAgY2FzZSAnWic6IHJldHVybiAnXHUwNUMyJzsgLy8gSEVCUkVXIFBPSU5UIFNJTiBET1QKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9Jc3JhZWxOaWt1ZEtleWJvYXJkLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvSXNyYWVsTmlrdWRLZXlib2FyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlMGIxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvSXNyYWVsTmlrdWRLZXlib2FyZC5qYXZhCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IElzcmFlbE5pa3VkS2V5Ym9hcmQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLyoKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKi8KKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LktleUV2ZW50OworCisvKioKKyAqIFRoaXMgY2xhc3Mgc2ltdWxhdGVzIGEgTmlrdWQga2V5Ym9hcmQgb24gYSBVUy1FbmdsaXNoCisgKiBrZXlib2FyZC4gIEl0IGlzIHZlcnkgbXVjaCBhIHdvcmsgaW4gcHJvZ3Jlc3MuCisgKi8KKworZmluYWwgY2xhc3MgSXNyYWVsTmlrdWRLZXlib2FyZCBleHRlbmRzIEtleVJlbWFwIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHVibGljIGNoYXIgcmVtYXAoY2hhciBjKSB7CisKKyAgICAgICAgc3dpdGNoKGMpIHsKKyAgICAgICAgICAgIGNhc2UgJ3QnOiByZXR1cm4gJ1x1MDVEMCc7IC8vIGFsZWYKKyAgICAgICAgICAgIGNhc2UgJ2MnOiByZXR1cm4gJ1x1MDVEMSc7IC8vIGJldAorICAgICAgICAgICAgY2FzZSAnZCc6IHJldHVybiAnXHUwNUQyJzsgLy8gZ2ltZWwKKyAgICAgICAgICAgIGNhc2UgJ3MnOiByZXR1cm4gJ1x1MDVEMyc7IC8vIGRhbGV0CisgICAgICAgICAgICBjYXNlICd2JzogcmV0dXJuICdcdTA1RDQnOyAvLyBoZQorICAgICAgICAgICAgY2FzZSAndSc6IHJldHVybiAnXHUwNUQ1JzsgLy8gdmF2CisgICAgICAgICAgICBjYXNlICd6JzogcmV0dXJuICdcdTA1RDYnOyAvLyB6YXlpbgorICAgICAgICAgICAgY2FzZSAnaic6IHJldHVybiAnXHUwNUQ3JzsgLy8gaGV0CisgICAgICAgICAgICBjYXNlICd5JzogcmV0dXJuICdcdTA1RDgnOyAvLyB0ZXQKKyAgICAgICAgICAgIGNhc2UgJ2gnOiByZXR1cm4gJ1x1MDVEOSc7IC8vIHlvZAorICAgICAgICAgICAgY2FzZSAnbCc6IHJldHVybiAnXHUwNURBJzsgLy8gZmluYWwga2FmCisgICAgICAgICAgICBjYXNlICdmJzogcmV0dXJuICdcdTA1REInOyAvLyBrYWYKKyAgICAgICAgICAgIGNhc2UgJ2snOiByZXR1cm4gJ1x1MDVEQyc7IC8vIGxhbWVkCisgICAgICAgICAgICBjYXNlICdvJzogcmV0dXJuICdcdTA1REQnOyAvLyBmaW5hbCBtZW0KKyAgICAgICAgICAgIGNhc2UgJ24nOiByZXR1cm4gJ1x1MDVERSc7IC8vIG1lbQorICAgICAgICAgICAgY2FzZSAnaSc6IHJldHVybiAnXHUwNURGJzsgLy8gZmluYWwgbnVuCisgICAgICAgICAgICBjYXNlICdiJzogcmV0dXJuICdcdTA1RTAnOyAvLyBudW4KKyAgICAgICAgICAgIGNhc2UgJ3gnOiByZXR1cm4gJ1x1MDVFMSc7IC8vIHNhbWVjaAorICAgICAgICAgICAgY2FzZSAnZyc6IHJldHVybiAnXHUwNUUyJzsgLy8gYXlpbgorICAgICAgICAgICAgY2FzZSAnOyc6IHJldHVybiAnXHUwNUUzJzsgLy8gZmluYWwgcGUKKyAgICAgICAgICAgIGNhc2UgJ3AnOiByZXR1cm4gJ1x1MDVFNCc7IC8vIHBlCisgICAgICAgICAgICBjYXNlICcuJzogcmV0dXJuICdcdTA1RTUnOyAvLyBmaW5hbCB0c2FkaQorICAgICAgICAgICAgY2FzZSAnbSc6IHJldHVybiAnXHUwNUU2JzsgLy8gdHNhZGkKKyAgICAgICAgICAgIGNhc2UgJ2UnOiByZXR1cm4gJ1x1MDVFNyc7IC8vIHFvZgorICAgICAgICAgICAgY2FzZSAncic6IHJldHVybiAnXHUwNUU4JzsgLy8gcmVzaAorICAgICAgICAgICAgY2FzZSAnYSc6IHJldHVybiAnXHUwNUU5JzsgLy8gc2hpbgorICAgICAgICAgICAgY2FzZSAnLCc6IHJldHVybiAnXHUwNUVBJzsgLy8gdGF2CisgICAgICAgICAgICBjYXNlICd3JzogcmV0dXJuICcsJzsKKyAgICAgICAgICAgIGNhc2UgJ3EnOiByZXR1cm4gJy8nOworICAgICAgICAgICAgY2FzZSAnLyc6IHJldHVybiAnLic7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisKKyAgICBwdWJsaWMgY2hhciByZW1hcChLZXlFdmVudCBrZXlFdmVudCkgeworCisgICAgICAgIC8vICBOb3RlOiAgb25seSBvbmUgY3RybCBjYXNlIG5vdyAoY3RybC0vIC0+IGRhZ2VzaCkuCisgICAgICAgIC8vICBCZXR0ZXIgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBuZWVkZWQgZm9yIG1vcmUgY2FzZXMuCisKKyAgICAgICAgaWYgKGtleUV2ZW50LmlzQ29udHJvbERvd24oKSkgeworICAgICAgICAgICAgaWYgKGtleUV2ZW50LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5WS19TTEFTSCkgeworICAgICAgICAgICAgICAgIHJldHVybiAnXHUwNUJDJzsgLy8gZGFnZXNoCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVtYXAoa2V5RXZlbnQuZ2V0S2V5Q2hhcigpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL0pUZXh0UGFuZWwuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9KVGV4dFBhbmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc3ODM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9KVGV4dFBhbmVsLmphdmEKQEAgLTAsMCArMSw1ODIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEpUZXh0UGFuZWwuamF2YSx2ICQgJFJldmlzaW9uOiAxLjQgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGphdmEuYXd0LkJvcmRlckxheW91dDsKK2ltcG9ydCBqYXZhLmF3dC5Db2xvcjsKK2ltcG9ydCBqYXZhLmF3dC5HcmFwaGljczsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworCitpbXBvcnQgamF2YXguc3dpbmcuSlBhbmVsOworaW1wb3J0IGphdmF4LnN3aW5nLkpDb21wb25lbnQ7CitpbXBvcnQgamF2YXguc3dpbmcuSlNjcm9sbEJhcjsKK2ltcG9ydCBqYXZheC5zd2luZy5Td2luZ1V0aWxpdGllczsKKworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5DbGlwYm9hcmQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVkVGV4dDsKKworLyoqCisgKiBKVGV4dFBhbmVsIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIE1UZXh0UGFuZWwgaW4gYSBTd2luZyBKUGFuZWwuCisgKiBAc2VlIE1UZXh0UGFuZWwKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEpUZXh0UGFuZWwgZXh0ZW5kcyBKUGFuZWwgaW1wbGVtZW50cyBNVGV4dFBhbmVsIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBBVGV4dFBhbmVsSW1wbCBmSW1wbDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBUZXh0UGFuZWxTZXR0aW5ncyBpbnN0YW5jZSB3aXRoIGFsbCBzZXR0aW5ncyBzZXQKKyAgICAgKiB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuICBDbGllbnRzIGNhbiBtb2RpZnkgdGhpcyBvYmplY3Q7CisgICAgICogbW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBhZmZlY3QgdGhlIGRlZmF1bHQgdmFsdWVzLgorICAgICAqIEByZXR1cm4gYSBUZXh0UGFuZWxTZXR0aW5ncyBpbnN0YW5jZSBzZXQgdG8gZGVmYXVsdCB2YWx1ZXMKKyAgICAgKiBAc2VlIFRleHRQYW5lbFNldHRpbmdzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBUZXh0UGFuZWxTZXR0aW5ncyBnZXREZWZhdWx0U2V0dGluZ3MoKSB7CisKKyAgICAgICAgcmV0dXJuIEFUZXh0UGFuZWxJbXBsLmdldERlZmF1bHRTZXR0aW5ncygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBKVGV4dFBhbmVsIHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICogQHBhcmFtIGluaXRpYWxUZXh0IHRoZSB0ZXh0IGRvY3VtZW50LiAgSWYgbnVsbCBkb2N1bWVudCB0ZXh0IGlzIGVtcHR5LgorICAgICAqIEBwYXJhbSBjbGlwYm9hcmQgdGhlIGNsaXBib2FyZCB0byB1c2UgZm9yIGN1dCwgY29weSwgYW5kIHBhc3RlCisgICAgICogIG9wZXJhdGlvbnMuICBJZiBudWxsIHRoaXMgcGFuZWwgd2lsbCB1c2UgYSBwcml2YXRlIGNsaXBib2FyZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgSlRleHRQYW5lbChNQ29uc3RUZXh0IGluaXRpYWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAgIGphdmEuYXd0LmRhdGF0cmFuc2Zlci5DbGlwYm9hcmQgY2xpcGJvYXJkKSB7CisKKyAgICAgICAgdGhpcyhBVGV4dFBhbmVsSW1wbC5mZ0RlZmF1bHRTZXR0aW5ncywgaW5pdGlhbFRleHQsIGNsaXBib2FyZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IEpUZXh0UGFuZWwuCisgICAgICogQHBhcmFtIHNldHRpbmdzIHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBKVGV4dFBhbmVsCisgICAgICogQHBhcmFtIGluaXRpYWxUZXh0IHRoZSB0ZXh0IGRvY3VtZW50LiAgSWYgbnVsbCBkb2N1bWVudCB0ZXh0IGlzIGVtcHR5LgorICAgICAqIEBwYXJhbSBjbGlwYm9hcmQgdGhlIGNsaXBib2FyZCB0byB1c2UgZm9yIGN1dCwgY29weSwgYW5kIHBhc3RlCisgICAgICogIG9wZXJhdGlvbnMuICBJZiBudWxsIHRoaXMgcGFuZWwgd2lsbCB1c2UgYSBwcml2YXRlIGNsaXBib2FyZC4KKyAgICAgKiBAc2VlIFRleHRQYW5lbFNldHRpbmdzCisgICAgICovCisgICAgcHVibGljIEpUZXh0UGFuZWwoVGV4dFBhbmVsU2V0dGluZ3Mgc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgTUNvbnN0VGV4dCBpbml0aWFsVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmQgY2xpcGJvYXJkKSB7CisgICAgICAgIAorICAgICAgICBzdXBlcihmYWxzZSk7CisgICAgICAgIAorICAgICAgICBKU2Nyb2xsQmFyIGhvcnpTYiA9IG51bGw7CisgICAgICAgIEpTY3JvbGxCYXIgdmVydFNiID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXR0aW5ncy5nZXRTY3JvbGxhYmxlKCkpIHsKKworICAgICAgICAgICAgc2V0TGF5b3V0KG5ldyBTY3JvbGxCYXJMYXlvdXQoKSk7CisKKyAgICAgICAgICAgIGJvb2xlYW4gc2Nyb2xsQmFyc1Zpc2libGUgPSBzZXR0aW5ncy5nZXRTY3JvbGxCYXJzVmlzaWJsZSgpOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsQmFyc1Zpc2libGUpIHsKKyAgICAgICAgICAgICAgICBob3J6U2IgPSBuZXcgSlNjcm9sbEJhcihKU2Nyb2xsQmFyLkhPUklaT05UQUwpOworICAgICAgICAgICAgICAgIHZlcnRTYiA9IG5ldyBKU2Nyb2xsQmFyKEpTY3JvbGxCYXIuVkVSVElDQUwpOworICAgICAgICAgICAgICAgIGFkZCgiU291dGgiLCBob3J6U2IpOworICAgICAgICAgICAgICAgIGFkZCgiRWFzdCIsIHZlcnRTYik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUnVuU3RyYXRlZ3kgcnVuU3RyYXRlZ3kgPSBuZXcgUnVuU3RyYXRlZ3koKSB7CisgICAgICAgICAgICB2b2lkIGRvSXQoUnVubmFibGUgcikgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIFN3aW5nVXRpbGl0aWVzLmludm9rZUFuZFdhaXQocik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgb3BlcmF0aW9uIHdhcyBpbnRlcnJ1cHRlZCwgdGhlbiBjbGllbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGVkIHdhaXQgb3Igc2xlZXAgKG9yIHNvbWV0aGluZyBzaW1pbGFyKQorICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBpbmFwcHJvcHJpYXRlIGZvciBhIGNsaWVudCBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzLiAgUmV0aHJvdyBlcnJvciBhbmQgbGV0IGNsaWVudCBoYW5kbGUgaXQuCisgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW50ZXJydXB0ZWQgaW4gUnVuU3RyYXRlZ3k6ICIgKyBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdobyBrbm93cyBob3cgdGhpcyBvbmUgaGFwcGVucy4uLgorICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaW4gUnVuU3RyYXRlZ3k6ICIgKyBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBmSW1wbCA9IG5ldyBBVGV4dFBhbmVsSW1wbChydW5TdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcnpTYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydFNiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGZpbmFsIEZha2VDb21wb25lbnQgdGV4dENvbXBvbmVudCA9IGZJbXBsLmdldFRleHRDb21wb25lbnQoKTsKKyAgICAgICAgCisgICAgICAgIEpDb21wb25lbnQgdGV4dEhvc3QgPSBuZXcgSkNvbXBvbmVudCgpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0Q29tcG9uZW50LnNldEhvc3QodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhZGROb3RpZnkoKSB7CisgICAgICAgICAgICAgICAgc3VwZXIuYWRkTm90aWZ5KCk7CisgICAgICAgICAgICAgICAgdGV4dENvbXBvbmVudC5hZGROb3RpZnkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGcpIHsKKyAgICAgICAgICAgICAgICB0ZXh0Q29tcG9uZW50LnBhaW50KGcpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgYWRkKCJDZW50ZXIiLCB0ZXh0SG9zdCk7CisKKyAgICAgICAgdGV4dEhvc3QucmVxdWVzdEZvY3VzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkIHRoZSBnaXZlbiBUZXh0UGFuZWxMaXN0ZW5lciB0byB0aGUgbGlzdGVuZXJzIHdoaWNoIHdpbGwKKyAgICAgKiByZWNlaXZlIHVwZGF0ZSBub3RpZmljYXRpb25zIGZyb20gdGhpcyBKVGV4dFBhbmVsLgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gYWRkCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoVGV4dFBhbmVsTGlzdGVuZXIgbGlzdGVuZXIpIHsKKworICAgICAgICBmSW1wbC5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIHRoZSBnaXZlbiBUZXh0UGFuZWxMaXN0ZW5lciBmcm9tIHRoZSBsaXN0ZW5lcnMgd2hpY2ggd2lsbAorICAgICAqIHJlY2VpdmUgdXBkYXRlIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGlzIEpUZXh0UGFuZWwuCisgICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byByZW1vdmUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihUZXh0UGFuZWxMaXN0ZW5lciBsaXN0ZW5lcikgeworCisgICAgICAgIGZJbXBsLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICB9CisKKy8vPT09PT09PT09PT09CisvLyBUZXh0IEFjY2VzcworLy89PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZG9jdW1lbnQgdG8gPHR0Pm5ld1RleHQ8L3R0Pi4gIFRoaXMgb3BlcmF0aW9uCisgICAgICogbW9kaWZpZXMgdGhlIHRleHQgaW4gdGhlIEpUZXh0UGFuZWwuICBJdCBkb2VzIG5vdCBtb2RpZnkgb3IgYWRvcHQKKyAgICAgKiA8dHQ+bmV3VGV4dDwvdHQ+LiAgVGhpcyBtZXRob2Qgc2V0cyB0aGUgc2VsZWN0aW9uIGFuIGluc2VydGlvbiBwb2ludCBhdAorICAgICAqIHRoZSBlbmQgb2YgdGhlIHRleHQuCisgICAgICogQHBhcmFtIG5ld1RleHQgdGhlIHRleHQgd2hpY2ggd2lsbCByZXBsYWNlIHRoZSBjdXJyZW50IHRleHQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGV4dChNQ29uc3RUZXh0IG5ld1RleHQpIHsKKworICAgICAgICBmSW1wbC5zZXRUZXh0KG5ld1RleHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGVuZCB0aGUgZ2l2ZW4gdGV4dCB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gIEVxdWl2YWxlbnQgdG8KKyAgICAgKiA8dHQ+aW5zZXJ0KG5ld1RleHQsIGdldFRleHRMZW5ndGgoKSk8L3R0Pi4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCB0byBhcHBlbmQgdG8gdGhlIGRvY3VtZW50CisgICAgICovCisgICAgcHVibGljIHZvaWQgYXBwZW5kKE1Db25zdFRleHQgbmV3VGV4dCkgeworCisgICAgICAgIGZJbXBsLmFwcGVuZChuZXdUZXh0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIHRleHQgaW50byB0aGUgZG9jdW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLgorICAgICAqIEVxdWl2YWxlbnQgdG8KKyAgICAgKiA8dHQ+cmVwbGFjZVJhbmdlKG5ld1RleHQsIHBvc2l0aW9uLCBwb3NpdGlvbik8L3R0Pi4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCB0byBpbnNlcnQgaW50byB0aGUgZG9jdW1lbnQuCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgZG9jdW1lbnQgd2hlcmUgdGhlCisgICAgICogICAgIHRleHQgd2lsbCBiZSBpbnNlcnRlZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGluc2VydChNQ29uc3RUZXh0IG5ld1RleHQsIGludCBwb3NpdGlvbikgeworCisgICAgICAgIGZJbXBsLmluc2VydChuZXdUZXh0LCBwb3NpdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwbGFjZSB0aGUgZ2l2ZW4gcmFuZ2Ugd2l0aCA8dHQ+bmV3VGV4dDwvdHQ+LiAgQWZ0ZXIgdGhpcworICAgICAqIG9wZXJhdGlvbiB0aGUgc2VsZWN0aW9uIHJhbmdlIGlzIGFuIGluc2VydGlvbiBwb2ludCBhdCB0aGUKKyAgICAgKiBlbmQgb2YgdGhlIG5ldyB0ZXh0LgorICAgICAqIEBwYXJhbSBuZXdUZXh0IHRoZSB0ZXh0IHdpdGggd2hpY2ggdG8gcmVwbGFjZSB0aGUgcmFuZ2UKKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gcmVwbGFjZQorICAgICAqIEBwYXJhbSBlbmQgdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gcmVwbGFjZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlcGxhY2VSYW5nZShNQ29uc3RUZXh0IG5ld1RleHQsIGludCBzdGFydCwgaW50IGVuZCkgeworCisgICAgICAgIGZJbXBsLnJlcGxhY2VSYW5nZShuZXdUZXh0LCBzdGFydCwgZW5kKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgSlRleHRQYW5lbC4KKyAgICAgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHRleHQgZG9jdW1lbnQgaW4gdGhlIEpUZXh0UGFuZWwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFRleHRMZW5ndGgoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldFRleHRMZW5ndGgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHRleHQgZG9jdW1lbnQgaW4gdGhlIEpUZXh0UGFuZWwuCisgICAgICogQHJldHVybiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgSlRleHRQYW5lbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgTUNvbnN0VGV4dCBnZXRUZXh0KCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRUZXh0KCk7CisgICAgfQorCisvLz09PT09PT09PT09PQorLy8gU2VsZWN0aW9uIEFjY2VzcworLy89PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0U2VsZWN0aW9uU3RhcnQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldFNlbGVjdGlvblN0YXJ0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0U2VsZWN0aW9uRW5kKCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRTZWxlY3Rpb25FbmQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlLiAgVGhpcyBpcworICAgICAqIGVxdWl2YWxlbnQgdG8gPHR0PnNlbGVjdChzZWxlY3Rpb25TdGFydCwgZ2V0U2VsZWN0aW9uRW5kKCkpPC90dD4uCisgICAgICogQHBhcmFtIHNlbGVjdGlvblN0YXJ0IHRoZSBzdGFydCBvZiB0aGUgbmV3IHNlbGVjdGlvbiByYW5nZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCBzZWxlY3Rpb25TdGFydCkgeworCisgICAgICAgIGZJbXBsLnNldFNlbGVjdGlvblN0YXJ0KHNlbGVjdGlvblN0YXJ0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlLiAgVGhpcyBpcworICAgICAqIGVxdWl2YWxlbnQgdG8gPHR0PnNlbGVjdChnZXRTZWxlY3Rpb25TdGFydCgpLCBzZWxlY3Rpb25FbmQpPC90dD4uCisgICAgICogQHBhcmFtIHNlbGVjdGlvblN0YXJ0IHRoZSBzdGFydCBvZiB0aGUgbmV3IHNlbGVjdGlvbiByYW5nZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbkVuZChpbnQgc2VsZWN0aW9uRW5kKSB7CisKKyAgICAgICAgZkltcGwuc2V0U2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBzZWxlY3Rpb24gcmFuZ2UgdG8gYW4gaW5zZXJ0aW9uIHBvaW50IGF0IHRoZSBnaXZlbgorICAgICAqIG9mZnNldC4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAqIDx0dD5zZWxlY3QocG9zaXRpb24sIHBvc2l0aW9uKTwvdHQ+LgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgb2Zmc2V0IG9mIHRoZSBuZXcgaW5zZXJ0aW9uIHBvaW50CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q2FyZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pIHsKKworICAgICAgICBmSW1wbC5zZXRDYXJldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHNlbGVjdGlvbiByYW5nZSB0byB0aGUgZ2l2ZW4gcmFuZ2UuICBUaGUgcmFuZ2Ugc3RhcnQKKyAgICAgKiBpcyBwaW5uZWQgYmV0d2VlbiAwIGFuZCB0aGUgdGV4dCBsZW5ndGg7ICB0aGUgcmFuZ2UgZW5kIGlzIHBpbm5lZAorICAgICAqIGJldHdlZW4gdGhlIHJhbmdlIHN0YXJ0IGFuZCB0aGUgZW5kIG9mIHRoZSB0ZXh0LiAgVGhlc2Ugc2VtYW50aWNzCisgICAgICogYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiA8dHQ+amF2YS5hd3QuVGV4dENvbXBvbmVudDwvdHQ+LgorICAgICAqIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIHRleHQgaXMgbm90IHNlbGVjdGFibGUuCisgICAgICogQHBhcmFtIHNlbGVjdGlvblN0YXJ0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiByYW5nZQorICAgICAqIEBwYXJhbSBzZWxlY3Rpb25FbmQgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2VsZWN0KGludCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCkgeworCisgICAgICAgIGZJbXBsLnNlbGVjdChzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZWxlY3QgYWxsIG9mIHRoZSB0ZXh0IGluIHRoZSBkb2N1bWVudC4gIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYKKyAgICAgKiB0aGUgdGV4dCBpcyBub3Qgc2VsZWN0YWJsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZWxlY3RBbGwoKSB7CisKKyAgICAgICAgZkltcGwuc2VsZWN0QWxsKCk7CisgICAgfQorCisKKy8vPT09PT09PT09PT09CisvLyBGb3JtYXQgV2lkdGgKKy8vPT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHRvdGFsIGZvcm1hdCB3aWR0aCwgaW4gcGl4ZWxzLiAgVGhlIGZvcm1hdCB3aWR0aCBpcyB0aGUKKyAgICAgKiB3aWR0aCB0byB3aGljaCB0ZXh0IGlzIHdyYXBwZWQuCisgICAgICogQHJldHVybiB0aGUgZm9ybWF0IHdpZHRoCisgICAgICovCisgICAgcHVibGljIGludCBnZXRGb3JtYXRXaWR0aCgpIHsKKworICAgICAgICByZXR1cm4gZkltcGwuZ2V0Rm9ybWF0V2lkdGgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyYWdyYXBoIGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgbGVmdC10by1yaWdodC4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGFuIG9mZnNldCBpbiB0aGUgdGV4dAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyYWdyYXBoIGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgbGVmdC10by1yaWdodAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHBhcmFncmFwaElzTGVmdFRvUmlnaHQoaW50IG9mZnNldCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZJbXBsLnBhcmFncmFwaElzTGVmdFRvUmlnaHQob2Zmc2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgdW5kb25lLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgdW5kb25lLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNhblVuZG8oKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmNhblVuZG8oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgcmVkb25lLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgcmVkb25lLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNhblJlZG8oKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmNhblJlZG8oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRhaW5zIGNvbnRlbnRzIHdoaWNoIGNvdWxkIGJlCisgICAgICogdHJhbnNmZXJlZCBpbnRvIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY2xpcGJvYXJkIGhhcyB0ZXh0IGNvbnRlbnQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY2xpcGJvYXJkTm90RW1wdHkoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmNsaXBib2FyZE5vdEVtcHR5KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIEF0dHJpYnV0ZU1hcCBvZiBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMuICBUaGUgZGVmYXVsdAorICAgICAqIHZhbHVlcyBhcmUgdXNlZCB3aGVuIGRpc3BsYXlpbmcgdGV4dCBmb3IgdmFsdWVzIHdoaWNoIGFyZSBub3QKKyAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHRleHQuCisgICAgICogQHJldHVybiBhbiBBdHRyaWJ1dGVNYXAgb2YgZGVmYXVsdCBrZXktdmFsdWUgcGFpcnMKKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlTWFwIGdldERlZmF1bHRWYWx1ZXMoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldERlZmF1bHRWYWx1ZXMoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnNwZWN0cyB0aGUgY2hhcmFjdGVyIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbgorICAgICAqIHJhbmdlIChvciB0aGUgdHlwaW5nIHN0eWxlIGF0IHRoZSBpbnNlcnRpb24gcG9pbnQpLiAgSXQgcmV0dXJuczoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPlRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4sIGlmIHRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4KKyAgICAgKiBpcyB0aGUgc2FtZSBpbiBhbGwgb2YgdGhlIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbiwgb3I8L2xpPgorICAgICAqIDxsaT48dHQ+TVVMVElQTEVfVkFMVUVTPC90dD4sIGlmIHR3byBvciBtb3JlIHN0eWxlIHJ1bnMgaGF2ZSBkaWZmZXJlbnQgCisgICAgICogdmFsdWVzIGZvciA8dHQ+a2V5PC90dD4uPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIElmIGEgc3R5bGUgcnVuIGRvZXMgbm90IGNvbnRhaW4gPHR0PmtleTwvdHQ+LAorICAgICAqIGl0cyB2YWx1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHN0eWxlIGZvciA8dHQ+a2V5PC90dD4sCisgICAgICogYXMgZGVmaW5lZCBieSB0aGUgZGVmYXVsdCB2YWx1ZXMgQXR0cmlidXRlTWFwLiAgTm90ZSB0aGF0IGlmCisgICAgICogPHR0PmtleTwvdHQ+IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIHRoaXMgbWV0aG9kIG1heSByZXR1cm4KKyAgICAgKiBudWxsLgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc3R5bGUgbWVudXMuCisgICAgICogQHBhcmFtIGtleSB0aGUga2V5IHVzZWQgdG8gcmV0cmlldmUgdmFsdWVzIGZvciBjb21wYXJpc29uCisgICAgICogQHNlZSBNVGV4dFBhbmVsI01VTFRJUExFX1ZBTFVFUworICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0Q2hhcmFjdGVyU3R5bGVPdmVyU2VsZWN0aW9uKE9iamVjdCBrZXkpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRDaGFyYWN0ZXJTdHlsZU92ZXJTZWxlY3Rpb24oa2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnNwZWN0cyB0aGUgcGFyYWdyYXBoIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbgorICAgICAqIHJhbmdlIChvciB0aGUgdHlwaW5nIHN0eWxlIGF0IHRoZSBpbnNlcnRpb24gcG9pbnQpLiAgSXQgcmV0dXJuczoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPlRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4sIGlmIHRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4KKyAgICAgKiBpcyB0aGUgc2FtZSBpbiBhbGwgb2YgdGhlIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbiwgb3I8L2xpPgorICAgICAqIDxsaT48dHQ+TVVMVElQTEVfVkFMVUVTPC90dD4sIGlmIHR3byBvciBtb3JlIHN0eWxlIHJ1bnMgaGF2ZSAKKyAgICAgKiBkaWZmZXJlbnQgdmFsdWVzIGZvciA8dHQ+a2V5PC90dD4uPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIElmIGEgc3R5bGUgcnVuIGRvZXMgbm90IGNvbnRhaW4gPHR0PmtleTwvdHQ+LAorICAgICAqIGl0cyB2YWx1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHN0eWxlIGZvciA8dHQ+a2V5PC90dD4sCisgICAgICogYXMgZGVmaW5lZCBieSB0aGUgZGVmYXVsdCB2YWx1ZXMgQXR0cmlidXRlTWFwLiAgTm90ZSB0aGF0IGlmCisgICAgICogPHR0PmtleTwvdHQ+IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIHRoaXMgbWV0aG9kIG1heSByZXR1cm4KKyAgICAgKiBudWxsLgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc3R5bGUgbWVudXMuCisgICAgICogQHBhcmFtIGtleSB0aGUga2V5IHVzZWQgdG8gcmV0cmlldmUgdmFsdWVzIGZvciBjb21wYXJpc29uCisgICAgICogQHNlZSBNVGV4dFBhbmVsI01VTFRJUExFX1ZBTFVFUworICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0UGFyYWdyYXBoU3R5bGVPdmVyU2VsZWN0aW9uKE9iamVjdCBrZXkpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRQYXJhZ3JhcGhTdHlsZU92ZXJTZWxlY3Rpb24oa2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIHNlbGVjdGVkIHRleHQgZnJvbSB0aGUgZG9jdW1lbnQgYW5kIHBsYWNlIGl0CisgICAgICogb24gdGhlIGNsaXBib2FyZC4gIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIHRleHQKKyAgICAgKiBpcyBub3QgZWRpdGFibGUsIG9yIGlmIG5vIHRleHQgaXMgc2VsZWN0ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY3V0KCkgeworICAgICAgICBmSW1wbC5jdXQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQbGFjZSB0aGUgc2VsZWN0ZWQgdGV4dCBvbiB0aGUgY2xpcGJvYXJkLiAgVGhpcyBtZXRob2QgaGFzCisgICAgICogbm8gZWZmZWN0IGlmIG5vIHRleHQgaXMgc2VsZWN0ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weSgpIHsKKyAgICAgICAgZkltcGwuY29weSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcGxhY2UgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIHRleHQgb24gdGhlIGNsaXBib2FyZC4KKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSB0ZXh0IGlzIG5vdCBlZGl0YWJsZSwgb3IgaWYgbm8KKyAgICAgKiB0ZXh0IGlzIG9uIHRoZSBjbGlwYm9hcmQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcGFzdGUoKSB7CisgICAgICAgIGZJbXBsLnBhc3RlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIHNlbGVjdGVkIHRleHQgZnJvbSB0aGUgZG9jdW1lbnQsIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIGNsaXBib2FyZC4KKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZQorICAgICAqIHRleHQgaXMgbm90IGVkaXRhYmxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyKCkgeworICAgICAgICBmSW1wbC5jbGVhcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVuZG8gdGhlIG1vc3QgcmVjZW50IHRleHQgY2hhbmdlLiAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZgorICAgICAqIHRoZXJlIGlzIG5vIGNoYW5nZSB0byB1bmRvLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHVuZG8oKSB7CisgICAgICAgIGZJbXBsLnVuZG8oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWRvIHRoZSBtb3N0IHJlY2VudCB0ZXh0IGNoYW5nZS4gIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYKKyAgICAgKiB0aGVyZSBpcyBubyBjaGFuZ2UgdG8gcmVkby4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZWRvKCkgeworICAgICAgICBmSW1wbC5yZWRvKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY29tbWFuZHMgdGhlIGNvbW1hbmQgbG9nIGNhbiBob2xkLgorICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBjb21tYW5kcyB0aGUgY29tbWFuZCBsb2cgY2FuIGhvbGQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldENvbW1hbmRMb2dTaXplKCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRDb21tYW5kTG9nU2l6ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBjb21tYW5kIGxvZyBjYW4gaG9sZC4gIEFsbAorICAgICAqIHJlZG9hYmxlIGNvbW1hbmRzIGFyZSByZW1vdmVkIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgorICAgICAqIEBwYXJhbSBzaXplIHRoZSBudW1iZXIgb2YgY29tbWFuZHMga2VwdCBpbiB0aGUgY29tbWFuZCBsb2cKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb21tYW5kTG9nU2l6ZShpbnQgc2l6ZSkgeworICAgICAgICBmSW1wbC5zZXRDb21tYW5kTG9nU2l6ZShzaXplKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gdGhlIGNvbW1hbmQgbG9nLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyQ29tbWFuZExvZygpIHsKKyAgICAgICAgZkltcGwuY2xlYXJDb21tYW5kTG9nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTW9kaWZ5IHRoZSBjaGFyYWN0ZXIgc3R5bGVzIG9uIHRoZSBzZWxlY3RlZCBjaGFyYWN0ZXJzLiAgSWYgbm8gY2hhcmFjdGVycworICAgICAqIGFyZSBzZWxlY3RlZCwgbW9kaWZ5IHRoZSB0eXBpbmcgc3R5bGUuCisgICAgICogQHBhcmFtIG1vZGlmaWVyIHRoZSBTdHlsZU1vZGlmaWVyIHdpdGggd2hpY2ggdG8gbW9kaWZ5IHRoZSBzdHlsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb2RpZnlDaGFyYWN0ZXJTdHlsZU9uU2VsZWN0aW9uKFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIpIHsKKyAgICAgICAgZkltcGwubW9kaWZ5Q2hhcmFjdGVyU3R5bGVPblNlbGVjdGlvbihtb2RpZmllcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogTW9kaWZ5IHRoZSBwYXJhZ3JhcGggc3R5bGVzIGluIHBhcmFncmFwaHMgY29udGFpbmluZyBzZWxlY3RlZCBjaGFyYWN0ZXJzLCBvcgorICAgICAqIHRoZSBwYXJhZ3JhcGggY29udGFpbmluZyB0aGUgaW5zZXJ0aW9uIHBvaW50LgorICAgICAqIEBwYXJhbSBtb2RpZmllciB0aGUgU3R5bGVNb2RpZmllciB3aXRoIHdoaWNoIHRvIG1vZGlmeSB0aGUgc3R5bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgbW9kaWZ5UGFyYWdyYXBoU3R5bGVPblNlbGVjdGlvbihTdHlsZU1vZGlmaWVyIG1vZGlmaWVyKSB7CisgICAgICAgIGZJbXBsLm1vZGlmeVBhcmFncmFwaFN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgS2V5UmVtYXAgdXNlZCB0byBwcm9jZXNzIGtleSBldmVudHMuCisgICAgICogQHJldHVybiB0aGUga2V5IHJlbWFwIHVzZWQgdG8gcHJvY2VzcyBrZXkgZXZlbnRzCisgICAgICogQHNlZSAjc2V0S2V5UmVtYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgS2V5UmVtYXAgZ2V0S2V5UmVtYXAoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldEtleVJlbWFwKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXNlIHRoZSBnaXZlbiBLZXlSZW1hcCB0byBtYXAga2V5IGV2ZW50cyB0byBjaGFyYWN0ZXJzLgorICAgICAqIE9ubHkga2V5CisgICAgICogZXZlbnRzIGFyZSBhZmZlY3RlZCBieSB0aGUgcmVtYXA7ICBvdGhlciB0ZXh0IGVudGVyaW5nIHRoZQorICAgICAqIGNvbnRyb2wgKHZpYSB0aGUgY2xpcGJvYXJkLCBmb3IgZXhhbXBsZSkgaXMgbm90IGFmZmVjdGVkCisgICAgICogYnkgdGhlIEtleVJlbWFwLgorICAgICAqIDxwPgorICAgICAqIERvIG5vdCBwYXNzIDx0dD5udWxsPC90dD4gdG8gdGhpcyBtZXRob2QgdG8gbGVhdmUga2V5CisgICAgICogZXZlbnRzIHVubWFwcGVkLiAgSW5zdGVhZCwgdXNlIDx0dD5LZXlSZW1hcC5nZXRJZGVudGl0eVJlbWFwKCk8L3R0PgorICAgICAqIEBwYXJhbSByZW1hcCB0aGUgS2V5UmVtYXAgdG8gdXNlIGZvciBtYXBwaW5nIGtleSBldmVudHMgdG8gY2hhcmFjdGVycworICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHBhcmFtZXRlciBpcyBudWxsCisgICAgICogQHNlZSBLZXlSZW1hcAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEtleVJlbWFwKEtleVJlbWFwIHJlbWFwKSB7CisKKyAgICAgICAgZkltcGwuc2V0S2V5UmVtYXAocmVtYXApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbW9kaWZpY2F0aW9uIGZsYWcgb2YgdGhlIGN1cnJlbnQgdGV4dCBjaGFuZ2UuCisgICAgICogQHNlZSAjc2V0TW9kaWZpZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc01vZGlmaWVkKCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5pc01vZGlmaWVkKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBtb2RpZmljYXRpb24gZmxhZyBvZiB0aGUgY3VycmVudCB0ZXh0IGNoYW5nZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RpZmllZChib29sZWFuIG1vZGlmaWVkKSB7CisgICAgICAgIAorICAgICAgICBmSW1wbC5zZXRNb2RpZmllZChtb2RpZmllZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgZm9yIEtleUV2ZW50Rm9yd2FyZGVyJ3MgdXNlIG9ubHkhCisgICAgICovCisgICAgQVRleHRQYW5lbEltcGwgZ2V0SW1wbCgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRCYWNrZ3JvdW5kKENvbG9yIGNvbG9yKSB7CisgICAgICAgIHN1cGVyLnNldEJhY2tncm91bmQgKGNvbG9yKTsKKyAgICAgICAgamF2YS5hd3QuQ29tcG9uZW50W10gY29tcExpc3QgPSBnZXRDb21wb25lbnRzKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcExpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghKGNvbXBMaXN0W2ldIGluc3RhbmNlb2YgSlNjcm9sbEJhcikpIHsKKyAgICAgICAgICAgICAgICBjb21wTGlzdFtpXS5zZXRCYWNrZ3JvdW5kIChjb2xvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvS2V5RXZlbnRGb3J3YXJkZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9LZXlFdmVudEZvcndhcmRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0ZDFkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvS2V5RXZlbnRGb3J3YXJkZXIuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBLZXlFdmVudEZvcndhcmRlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAwLzA0LzIyIDE3OjEwOjEwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuS2V5RXZlbnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBmb3J3YXJkcyBrZXkgZXZlbnRzIHRvIGEgVGV4dFBhbmVsIGNvbXBvbmVudCBmb3IKKyAqIHRlc3RpbmcgcHVycG9zZXMuCisgKiBJdHMgc29sZSByZWFzb24gZm9yIGV4aXN0ZW5jZSBpcyB0byBwcmV2ZW50IHRoZSBrZXktZXZlbnQKKyAqIEFQSSBmcm9tIGJlaW5nIHB1YmxpYyBvbiBNVGV4dFBhbmVsLCBhbmQgYmVpbmcgbWlzdGFrZW4gZm9yCisgKiBzdGFuZGFyZCBBUEkuICBUaGlzIGNsYXNzIGlzIG9ubHkgZm9yIHRlc3RpbmchICBJdCBtYXkgYmUKKyAqIHJlbW92ZWQgZnJvbSBwdWJsaWMgQVBJIGF0IGFueSB0aW1lLiAgRG8gbm90IGRlcGVuZCBvbiB0aGlzCisgKiBjbGFzcy4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEtleUV2ZW50Rm9yd2FyZGVyIHsKKworICAgIHByaXZhdGUgQVRleHRQYW5lbEltcGwgZlBhbmVsSW1wbDsKKworICAgIHB1YmxpYyBLZXlFdmVudEZvcndhcmRlcihUZXh0UGFuZWwgdGV4dFBhbmVsKSB7CisKKyAgICAgICAgZlBhbmVsSW1wbCA9IHRleHRQYW5lbC5nZXRJbXBsKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBLZXlFdmVudEZvcndhcmRlcihKVGV4dFBhbmVsIHRleHRQYW5lbCkgeworICAgIAorICAgICAgICBmUGFuZWxJbXBsID0gdGV4dFBhbmVsLmdldEltcGwoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBoYW5kbGVLZXlFdmVudChLZXlFdmVudCBrZXlFdmVudCkgeworCisgICAgICAgIGZQYW5lbEltcGwuaGFuZGxlS2V5RXZlbnQoa2V5RXZlbnQpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvS2V5UmVtYXAuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9LZXlSZW1hcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiNmZmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvS2V5UmVtYXAuamF2YQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogS2V5UmVtYXAuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLyoKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKi8KKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LktleUV2ZW50OworCisvKioKKyAqIEtleVJlbWFwIG1hcHMga2V5cyBvbiBhIHN0YW5kYXJkIFVTIGtleWJvYXJkIHRvIGNoYXJhY3RlcnMKKyAqIGluIG90aGVyIGFscGhhYmV0cy4gIEN1cnJlbnRseSwgbWFwcGluZ3MgdG8gQXJhYmljLCBIZWJyZXcKKyAqIGFuZCBUaGFpIGFyZSBzdXBwb3J0ZWQuICBJbiB0aGUgZnV0dXJlLCBjbGllbnRzIG1heSBiZQorICogdG8gZGVmaW5lIHRoZWlyIG93biBtYXBwaW5ncyBieSBzdWJjbGFzc2luZyB0aGlzIGNsYXNzLgorICogPFA+CisgKiBAc2VlIFRleHRQYW5lbCNzZXRLZXlSZW1hcAorICovCisKK3B1YmxpYyBjbGFzcyBLZXlSZW1hcCB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBLZXlSZW1hcC4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgS2V5UmVtYXAoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2hhcmFjdGVyIG9uIHRoZSBzaW11bGF0ZWQga2V5Ym9hcmQKKyAgICAgKiB3aGljaCBpcyAobW9zdCBsaWtlbHkpIGdlbmVyYXRlZCBieSB0eXBpbmcgdGhlIGNoYXJhY3RlciBjCisgICAgICogb24gdGhlIGFjdHVhbCBrZXlib2FyZC4gIEZvciBncmVhdGVyIGFjY3VyYWN5LCB1c2UgdGhlIHJlbWFwCisgICAgICogbWV0aG9kIHdoaWNoIHRha2VzIGEgS2V5RXZlbnQsIHNpbmNlIGl0IGNhbiB0YWtlIG1vZGlmaWVyCisgICAgICoga2V5cyBpbnRvIGFjY291bnQuCisgICAgICogQGFyZyBjIGEgY2hhcmFjdGVyIG9uIHRoZSBhY3R1YWwga2V5Ym9hcmQKKyAgICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgb24gdGhlIHNpbXVsYXRlZCBrZXlib2FyZCB3aGljaCB3b3VsZAorICAgICAqICAgICAgICAgcmVzdWx0IGZyb20gdGhlIGtleSBjb21iaW5hdGlvbiB3aGljaCBwcm9kdWNlZCB0aGUKKyAgICAgKiAgICAgICAgIGdpdmVuIGNoYXJhY3RlciBvbiB0aGUgYWN0dWFsIGtleWJvYXJkCisgICAgICovCisgICAgLypwdWJsaWMqLyBjaGFyIHJlbWFwKGNoYXIgYykgeworCisgICAgICAgIHJldHVybiBjOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY2hhcmFjdGVyIG9uIHRoZSBzaW11bGF0ZWQga2V5Ym9hcmQKKyAgICAgKiB3aGljaCBrZXlFdmVudCBnZW5lcmF0ZXMuCisgICAgICogQGFyZyBrZXlFdmVudCBhIGtleSBldmVudCBmcm9tIHRoZSBhY3R1YWwga2V5Ym9hcmQKKyAgICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgb24gdGhlIHNpbXVsYXRlZCBrZXlib2FyZCBnZW5lcmF0ZWQgYnkKKyAgICAgKiAgICAgICAgIGtleUV2ZW50CisgICAgICovCisgICAgLypwdWJsaWMqLyBjaGFyIHJlbWFwKEtleUV2ZW50IGtleUV2ZW50KSB7CisKKyAgICAgICAgcmV0dXJuIHJlbWFwKGtleUV2ZW50LmdldEtleUNoYXIoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgS2V5UmVtYXAgSURFTlRJVFkgPSBuZXcgS2V5UmVtYXAoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBLZXlSZW1hcCBBUkFCSUNfVFJBTlNMSVRFUkFUSU9OID0gbmV3IEFyYWJpY1RyYW5zbGl0ZXJhdGlvbigpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEtleVJlbWFwIEhFQlJFV19UUkFOU0xJVEVSQVRJT04gPSBuZXcgSGVicmV3VHJhbnNsaXRlcmF0aW9uKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgS2V5UmVtYXAgSVNSQUVMX05JS1VEID0gbmV3IElzcmFlbE5pa3VkS2V5Ym9hcmQoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBLZXlSZW1hcCBUSEFJID0gbmV3IFRoYWlLZXlSZW1hcCgpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgS2V5UmVtYXAgd2hpY2ggbWFwcyBldmVyeSBjaGFyYWN0ZXIgdG8gaXRzZWxmLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgS2V5UmVtYXAgZ2V0SWRlbnRpdHlSZW1hcCgpIHsKKworICAgICAgICByZXR1cm4gSURFTlRJVFk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgS2V5UmVtYXAgd2hpY2ggbWFwcyBrZXlzIHRvCisgICAgICogY2hhcmFjdGVycyBpbiB0aGUgQXJhYmljIGFscGhhYmV0LCB1c2luZyBhIHNpbXBsZSB0cmFuc2xpdGVyYXRpb24uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBLZXlSZW1hcCBnZXRBcmFiaWNUcmFuc2xpdGVyYXRpb24oKSB7CisKKyAgICAgICAgcmV0dXJuIEFSQUJJQ19UUkFOU0xJVEVSQVRJT047CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgS2V5UmVtYXAgd2hpY2ggbWFwcyBrZXlzIHRvCisgICAgICogY2hhcmFjdGVycyBpbiB0aGUgSGVicmV3IGFscGhhYmV0LCB1c2luZyBhIHNpbXBsZSB0cmFuc2xpdGVyYXRpb24uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBLZXlSZW1hcCBnZXRIZWJyZXdUcmFuc2xpdGVyYXRpb24oKSB7CisKKyAgICAgICAgcmV0dXJuIEhFQlJFV19UUkFOU0xJVEVSQVRJT047CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgS2V5UmVtYXAgd2hpY2ggZW11bGF0ZXMgYSBzdGFuZGFyZCBIZWJyZXcga2V5Ym9hcmQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBLZXlSZW1hcCBnZXRJc3JhZWxOaWt1ZCgpIHsKKworICAgICAgICByZXR1cm4gSVNSQUVMX05JS1VEOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBLZXlSZW1hcCB3aGljaCBlbXVsYXRlcyBhIFRoYWkgS2V0bWFuZWUga2V5Ym9hcmQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBLZXlSZW1hcCBnZXRUaGFpS2V0bWFuZWUoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gVEhBSTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvTVRleHRQYW5lbC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL01UZXh0UGFuZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzExYTEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL01UZXh0UGFuZWwuamF2YQpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogTVRleHRQYW5lbC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjQ3ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CisKKy8qKgorICogTVRleHRQYW5lbCBpcyBpbXBsZW1lbnRlZCBieSBDb21wb25lbnRzIHdoaWNoIHByb3ZpZGUgc2VsZWN0YWJsZQorICogZWRpdGFibGUgc3R5bGVkIHRleHQuCisgKiA8cD4KKyAqIEltcGxlbWVudGF0aW9ucyBvZiBNVGV4dFBhbmVsIHByb3ZpZGUgYSBzaW1wbGUsIHN0YW5kYXJkIHVzZXIgaW50ZXJmYWNlCisgKiBmb3IgdGV4dCBlZGl0aW5nLiAgTVRleHRQYW5lbCBzdXBwbGllcyBzY3JvbGxhYmxlIGRpc3BsYXksIHR5cGluZywgCisgKiBhcnJvdy1rZXkgc3VwcG9ydCwgY2hhcmFjdGVyIHNlbGVjdGlvbiwgd29yZC0KKyAqIGFuZCBzZW50ZW5jZS1zZWxlY3Rpb24gKGJ5IGRvdWJsZS1jbGlja2luZyBhbmQgdHJpcGxlLWNsaWNraW5nLCAKKyAqIHJlc3BlY3RpdmVseSksIHRleHQgc3R5bGVzLCBjbGlwYm9hcmQgb3BlcmF0aW9ucyAoY3V0LCBjb3B5IGFuZCBwYXN0ZSkKKyAqIGFuZCBhIGxvZyBvZiBjaGFuZ2VzIGZvciB1bmRvLXJlZG8uCisgKiA8cD4KKyAqIE1UZXh0UGFuZWwgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBwcm92aWRlIHVzZXIgaW50ZXJmYWNlIGVsZW1lbnRzCisgKiBzdWNoIGFzIGFuIGVkaXQgbWVudSBvciBzdHlsZSBtZW51LiAgVGhpcyBzdXBwb3J0IGlzIHByb3ZpZGVkIGluCisgKiBkaWZmZXJlbnQgcGFja2FnZXMsIGFuZCBpcyBpbXBsZW1lbnRlZCB3aXRoIE1UZXh0UGFuZWwncyBBUEkuCisgKiBNVGV4dFBhbmVsIGluY2x1ZGVzIG1ldGhvZHMgZm9yIHNldHRpbmcgc2VsZWN0aW9ucyBhbmQgc3R5bGVzIG9uIHRleHQsCisgKiBhbmQgdXNpbmcgdGhlIGNsaXBib2FyZCBhbmQgY29tbWFuZC1sb2cgZnVuY3Rpb25hbGl0eS4KKyAqIE1UZXh0UGFuZWwncyBBUEkgZm9yIHNlbGVjdGlvbiBhbmQgdGV4dCBoYW5kbGluZyBpcyBzaW1pbGFyIHRvIHRoYXQKKyAqIG9mIDx0dD5qYXZhLmF3dC5UZXh0QXJlYTwvdHQ+IGFuZAorICogPHR0PmphdmEuYXd0LlRleHRDb21wb25lbnQ8L3R0Pi4KKyAqIDxwPgorICogTVRleHRQYW5lbCBzdXBwb3J0cyBiaWRpcmVjdGlvbmFsIGFuZCBjb21wbGV4IHRleHQuICBJbiBiaWRpcmVjdGlvbmFsCisgKiB0ZXh0LCBvZmZzZXRzIGF0IGRpcmVjdGlvbiBib3VuZGFyaWVzIGhhdmUgZHVhbCBjYXJldHMuICBMb2dpY2FsIHNlbGVjdGlvbgorICogaXMgdXNlZCwgc28gc2VsZWN0aW9ucyBhY3Jvc3MgcnVuIGRpcmVjdGlvbnMgbWF5IG5vdCBiZSBjb250aWd1b3VzIGluCisgKiBkaXNwbGF5LgorICovCitwdWJsaWMgaW50ZXJmYWNlIE1UZXh0UGFuZWwgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHZhbHVlIGlzIHJldHVybmVkIGZyb20gPHR0PmdldENoYXJhY3RlclN0eWxlT3ZlclNlbGVjdGlvbjwvdHQ+CisgICAgICogYW5kIDx0dD5nZXRQYXJhZ3JhcGhTdHlsZU92ZXJTZWxlY3Rpb248L3R0PiB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICAgICAqIHNlbGVjdGlvbiByYW5nZSBjb250YWlucyBtdWx0aXBsZSB2YWx1ZXMgZm9yIGEga2V5LgorICAgICAqIDxwPgorICAgICAqIFRoZXJlIGlzIG5vIHJlYXNvbiBmb3IgdGhpcyBPYmplY3QgZXZlciB0byBhcHBlYXIgaW4gYW4gQXR0cmlidXRlTWFwCisgICAgICogYXMgYSB2YWx1ZS4gIE9idmlvdXNseSwgaWYgaXQgZG9lcyB0aGVyZSB3aWxsIGJlIG5vIHdheSB0byBkaXN0aW5ndWlzaAorICAgICAqIGJldHdlZW4gbXVsdGlwbGUgdmFsdWVzIGFjcm9zcyB0aGUgc2VsZWN0aW9uIGFuZCBhIGNvbnNpc3RlbnQgdmFsdWUgb2YKKyAgICAgKiA8dHQ+TVVMVElQTEVfVkFMVUVTPC90dD4gZm9yIHRoZSBrZXkuCisgICAgICogQHNlZSAjZ2V0Q2hhcmFjdGVyU3R5bGVPdmVyU2VsZWN0aW9uCisgICAgICogQHNlZSAjZ2V0UGFyYWdyYXBoU3R5bGVPdmVyU2VsZWN0aW9uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgTVVMVElQTEVfVkFMVUVTID0gbmV3IE9iamVjdCgpOworICAgIAorICAgIC8qKgorICAgICAqIEFkZCB0aGUgZ2l2ZW4gVGV4dFBhbmVsTGlzdGVuZXIgdG8gdGhlIGxpc3RlbmVycyB3aGljaCB3aWxsCisgICAgICogcmVjZWl2ZSB1cGRhdGUgbm90aWZpY2F0aW9ucyBmcm9tIHRoaXMgTVRleHRQYW5lbC4KKyAgICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIGFkZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKFRleHRQYW5lbExpc3RlbmVyIGxpc3RlbmVyKTsKKworICAgIC8qKgorICAgICAqIFJlbW92ZSB0aGUgZ2l2ZW4gVGV4dFBhbmVsTGlzdGVuZXIgZnJvbSB0aGUgbGlzdGVuZXJzIHdoaWNoIHdpbGwKKyAgICAgKiByZWNlaXZlIHVwZGF0ZSBub3RpZmljYXRpb25zIGZyb20gdGhpcyBNVGV4dFBhbmVsLgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gcmVtb3ZlCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoVGV4dFBhbmVsTGlzdGVuZXIgbGlzdGVuZXIpOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBkb2N1bWVudCB0byA8dHQ+bmV3VGV4dDwvdHQ+LiAgVGhpcyBvcGVyYXRpb24KKyAgICAgKiBtb2RpZmllcyB0aGUgdGV4dCBpbiB0aGUgTVRleHRQYW5lbC4gIEl0IGRvZXMgbm90IG1vZGlmeSBvciBhZG9wdAorICAgICAqIDx0dD5uZXdUZXh0PC90dD4uICBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzZWxlY3Rpb24gYW4gaW5zZXJ0aW9uIHBvaW50IGF0CisgICAgICogdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCB3aGljaCB3aWxsIHJlcGxhY2UgdGhlIGN1cnJlbnQgdGV4dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KE1Db25zdFRleHQgbmV3VGV4dCk7CisgICAgCisgICAgLyoqCisgICAgICogQXBwZW5kIHRoZSBnaXZlbiB0ZXh0IHRvIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LiAgRXF1aXZhbGVudCB0bworICAgICAqIDx0dD5pbnNlcnQobmV3VGV4dCwgZ2V0VGV4dExlbmd0aCgpKTwvdHQ+LgorICAgICAqIEBwYXJhbSBuZXdUZXh0IHRoZSB0ZXh0IHRvIGFwcGVuZCB0byB0aGUgZG9jdW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhcHBlbmQoTUNvbnN0VGV4dCBuZXdUZXh0KTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIHRleHQgaW50byB0aGUgZG9jdW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLgorICAgICAqIEVxdWl2YWxlbnQgdG8KKyAgICAgKiA8dHQ+cmVwbGFjZVJhbmdlKG5ld1RleHQsIHBvc2l0aW9uLCBwb3NpdGlvbik8L3R0Pi4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCB0byBpbnNlcnQgaW50byB0aGUgZG9jdW1lbnQuCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgZG9jdW1lbnQgd2hlcmUgdGhlCisgICAgICogICAgIHRleHQgd2lsbCBiZSBpbnNlcnRlZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGluc2VydChNQ29uc3RUZXh0IG5ld1RleHQsIGludCBwb3NpdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBSZXBsYWNlIHRoZSBnaXZlbiByYW5nZSB3aXRoIDx0dD5uZXdUZXh0PC90dD4uICBBZnRlciB0aGlzCisgICAgICogb3BlcmF0aW9uIHRoZSBzZWxlY3Rpb24gcmFuZ2UgaXMgYW4gaW5zZXJ0aW9uIHBvaW50IGF0IHRoZQorICAgICAqIGVuZCBvZiB0aGUgbmV3IHRleHQuCisgICAgICogQHBhcmFtIG5ld1RleHQgdGhlIHRleHQgd2l0aCB3aGljaCB0byByZXBsYWNlIHRoZSByYW5nZQorICAgICAqIEBwYXJhbSBzdGFydCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZSB0byByZXBsYWNlCisgICAgICogQHBhcmFtIGVuZCB0aGUgZW5kIG9mIHRoZSByYW5nZSB0byByZXBsYWNlCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVwbGFjZVJhbmdlKE1Db25zdFRleHQgbmV3VGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0IGRvY3VtZW50IGluIHRoZSBNVGV4dFBhbmVsLgorICAgICAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgTVRleHRQYW5lbAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0VGV4dExlbmd0aCgpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSB0ZXh0IGRvY3VtZW50IGluIHRoZSBNVGV4dFBhbmVsLgorICAgICAqIEByZXR1cm4gdGhlIHRleHQgZG9jdW1lbnQgaW4gdGhlIE1UZXh0UGFuZWwuCisgICAgICovCisgICAgcHVibGljIE1Db25zdFRleHQgZ2V0VGV4dCgpOworICAgIAorLy89PT09PT09PT09PT0KKy8vIFNlbGVjdGlvbiBBY2Nlc3MKKy8vPT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFNlbGVjdGlvblN0YXJ0KCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24uCisgICAgICovCisgICAgcHVibGljIGludCBnZXRTZWxlY3Rpb25FbmQoKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlLiAgVGhpcyBpcworICAgICAqIGVxdWl2YWxlbnQgdG8gPHR0PnNlbGVjdChzZWxlY3Rpb25TdGFydCwgZ2V0U2VsZWN0aW9uRW5kKCkpPC90dD4uCisgICAgICogQHBhcmFtIHNlbGVjdGlvblN0YXJ0IHRoZSBzdGFydCBvZiB0aGUgbmV3IHNlbGVjdGlvbiByYW5nZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCBzZWxlY3Rpb25TdGFydCk7CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZS4gIFRoaXMgaXMKKyAgICAgKiBlcXVpdmFsZW50IHRvIDx0dD5zZWxlY3QoZ2V0U2VsZWN0aW9uU3RhcnQoKSwgc2VsZWN0aW9uRW5kKTwvdHQ+LgorICAgICAqIEBwYXJhbSBzZWxlY3Rpb25TdGFydCB0aGUgc3RhcnQgb2YgdGhlIG5ldyBzZWxlY3Rpb24gcmFuZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25FbmQoaW50IHNlbGVjdGlvbkVuZCk7CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBzZWxlY3Rpb24gcmFuZ2UgdG8gYW4gaW5zZXJ0aW9uIHBvaW50IGF0IHRoZSBnaXZlbgorICAgICAqIG9mZnNldC4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAqIDx0dD5zZWxlY3QocG9zaXRpb24sIHBvc2l0aW9uKTwvdHQ+LgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgb2Zmc2V0IG9mIHRoZSBuZXcgaW5zZXJ0aW9uIHBvaW50CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q2FyZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pOworICAgIAorICAgIC8qKgorICAgICAqIFNldCB0aGUgc2VsZWN0aW9uIHJhbmdlIHRvIHRoZSBnaXZlbiByYW5nZS4gIFRoZSByYW5nZSBzdGFydAorICAgICAqIGlzIHBpbm5lZCBiZXR3ZWVuIDAgYW5kIHRoZSB0ZXh0IGxlbmd0aDsgIHRoZSByYW5nZSBlbmQgaXMgcGlubmVkCisgICAgICogYmV0d2VlbiB0aGUgcmFuZ2Ugc3RhcnQgYW5kIHRoZSBlbmQgb2YgdGhlIHRleHQuICBUaGVzZSBzZW1hbnRpY3MKKyAgICAgKiBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIDx0dD5qYXZhLmF3dC5UZXh0Q29tcG9uZW50PC90dD4uCisgICAgICogVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgdGV4dCBpcyBub3Qgc2VsZWN0YWJsZS4KKyAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhcnQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlCisgICAgICogQHBhcmFtIHNlbGVjdGlvbkVuZCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZWxlY3QoaW50IHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uRW5kKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBTZWxlY3QgYWxsIG9mIHRoZSB0ZXh0IGluIHRoZSBkb2N1bWVudC4gIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYKKyAgICAgKiB0aGUgdGV4dCBpcyBub3Qgc2VsZWN0YWJsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZWxlY3RBbGwoKTsKKyAgICAKKworLy89PT09PT09PT09PT0KKy8vIEZvcm1hdCBXaWR0aAorLy89PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdG90YWwgZm9ybWF0IHdpZHRoLCBpbiBwaXhlbHMuICBUaGUgZm9ybWF0IHdpZHRoIGlzIHRoZQorICAgICAqIHdpZHRoIHRvIHdoaWNoIHRleHQgaXMgd3JhcHBlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBmb3JtYXQgd2lkdGgKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZvcm1hdFdpZHRoKCk7CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHBhcmFncmFwaCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGxlZnQtdG8tcmlnaHQuCisgICAgICogQHBhcmFtIG9mZnNldCBhbiBvZmZzZXQgaW4gdGhlIHRleHQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBhcmFncmFwaCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGxlZnQtdG8tcmlnaHQKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBwYXJhZ3JhcGhJc0xlZnRUb1JpZ2h0KGludCBvZmZzZXQpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjaGFuZ2Ugd2hpY2ggY2FuIGJlIHVuZG9uZS4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjaGFuZ2Ugd2hpY2ggY2FuIGJlIHVuZG9uZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjYW5VbmRvKCk7CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjaGFuZ2Ugd2hpY2ggY2FuIGJlIHJlZG9uZS4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjaGFuZ2Ugd2hpY2ggY2FuIGJlIHJlZG9uZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjYW5SZWRvKCk7CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGNsaXBib2FyZCBjb250YWlucyBjb250ZW50cyB3aGljaCBjb3VsZCBiZQorICAgICAqIHRyYW5zZmVyZWQgaW50byB0aGUgdGV4dC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNsaXBib2FyZCBoYXMgdGV4dCBjb250ZW50LgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNsaXBib2FyZE5vdEVtcHR5KCk7CisgICAgCisKKy8vPT09PT09PT09PT09CisvLyBTdHlsZXMKKy8vPT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYW4gQXR0cmlidXRlTWFwIG9mIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcy4gIFRoZSBkZWZhdWx0CisgICAgICogdmFsdWVzIGFyZSB1c2VkIHdoZW4gZGlzcGxheWluZyB0ZXh0IGZvciB2YWx1ZXMgd2hpY2ggYXJlIG5vdAorICAgICAqIHNwZWNpZmllZCBpbiB0aGUgdGV4dC4KKyAgICAgKiBAcmV0dXJuIGFuIEF0dHJpYnV0ZU1hcCBvZiBkZWZhdWx0IGtleS12YWx1ZSBwYWlycworICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgZ2V0RGVmYXVsdFZhbHVlcygpOworICAgIAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluc3BlY3RzIHRoZSBjaGFyYWN0ZXIgc3R5bGUgcnVucyBpbiB0aGUgc2VsZWN0aW9uCisgICAgICogcmFuZ2UgKG9yIHRoZSB0eXBpbmcgc3R5bGUgYXQgdGhlIGluc2VydGlvbiBwb2ludCkuICBJdCByZXR1cm5zOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+VGhlIHZhbHVlIG9mIDx0dD5rZXk8L3R0PiwgaWYgdGhlIHZhbHVlIG9mIDx0dD5rZXk8L3R0PgorICAgICAqIGlzIHRoZSBzYW1lIGluIGFsbCBvZiB0aGUgc3R5bGUgcnVucyBpbiB0aGUgc2VsZWN0aW9uLCBvcjwvbGk+CisgICAgICogPGxpPjx0dD5NVUxUSVBMRV9WQUxVRVM8L3R0PiwgaWYgdHdvIG9yIG1vcmUgc3R5bGUgcnVucyBoYXZlIGRpZmZlcmVudCAKKyAgICAgKiB2YWx1ZXMgZm9yIDx0dD5rZXk8L3R0Pi48L2xpPgorICAgICAqIDwvdWw+CisgICAgICogSWYgYSBzdHlsZSBydW4gZG9lcyBub3QgY29udGFpbiA8dHQ+a2V5PC90dD4sCisgICAgICogaXRzIHZhbHVlIGlzIGNvbnNpZGVyZWQgdG8gYmUgdGhlIGRlZmF1bHQgc3R5bGUgZm9yIDx0dD5rZXk8L3R0PiwKKyAgICAgKiBhcyBkZWZpbmVkIGJ5IHRoZSBkZWZhdWx0IHZhbHVlcyBBdHRyaWJ1dGVNYXAuICBOb3RlIHRoYXQgaWYKKyAgICAgKiA8dHQ+a2V5PC90dD4gZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgdGhpcyBtZXRob2QgbWF5IHJldHVybgorICAgICAqIG51bGwuCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciBjb25maWd1cmluZyBzdHlsZSBtZW51cy4KKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdXNlZCB0byByZXRyaWV2ZSB2YWx1ZXMgZm9yIGNvbXBhcmlzb24KKyAgICAgKiBAc2VlICNNVUxUSVBMRV9WQUxVRVMKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGdldENoYXJhY3RlclN0eWxlT3ZlclNlbGVjdGlvbihPYmplY3Qga2V5KTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnNwZWN0cyB0aGUgcGFyYWdyYXBoIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbgorICAgICAqIHJhbmdlIChvciB0aGUgdHlwaW5nIHN0eWxlIGF0IHRoZSBpbnNlcnRpb24gcG9pbnQpLiAgSXQgcmV0dXJuczoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPlRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4sIGlmIHRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4KKyAgICAgKiBpcyB0aGUgc2FtZSBpbiBhbGwgb2YgdGhlIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbiwgb3I8L2xpPgorICAgICAqIDxsaT48dHQ+TVVMVElQTEVfVkFMVUVTPC90dD4sIGlmIHR3byBvciBtb3JlIHN0eWxlIHJ1bnMgaGF2ZSAKKyAgICAgKiBkaWZmZXJlbnQgdmFsdWVzIGZvciA8dHQ+a2V5PC90dD4uPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIElmIGEgc3R5bGUgcnVuIGRvZXMgbm90IGNvbnRhaW4gPHR0PmtleTwvdHQ+LAorICAgICAqIGl0cyB2YWx1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHN0eWxlIGZvciA8dHQ+a2V5PC90dD4sCisgICAgICogYXMgZGVmaW5lZCBieSB0aGUgZGVmYXVsdCB2YWx1ZXMgQXR0cmlidXRlTWFwLiAgTm90ZSB0aGF0IGlmCisgICAgICogPHR0PmtleTwvdHQ+IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIHRoaXMgbWV0aG9kIG1heSByZXR1cm4KKyAgICAgKiBudWxsLgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc3R5bGUgbWVudXMuCisgICAgICogQHBhcmFtIGtleSB0aGUga2V5IHVzZWQgdG8gcmV0cmlldmUgdmFsdWVzIGZvciBjb21wYXJpc29uCisgICAgICogQHNlZSAjTVVMVElQTEVfVkFMVUVTCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXRQYXJhZ3JhcGhTdHlsZU92ZXJTZWxlY3Rpb24oT2JqZWN0IGtleSk7CisgICAgCisgICAgLyoqCisgICAgICogUmVtb3ZlIHRoZSBzZWxlY3RlZCB0ZXh0IGZyb20gdGhlIGRvY3VtZW50IGFuZCBwbGFjZSBpdAorICAgICAqIG9uIHRoZSBjbGlwYm9hcmQuICBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSB0ZXh0CisgICAgICogaXMgbm90IGVkaXRhYmxlLCBvciBpZiBubyB0ZXh0IGlzIHNlbGVjdGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGN1dCgpOworICAgIAorICAgIC8qKgorICAgICAqIFBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IG9uIHRoZSBjbGlwYm9hcmQuICBUaGlzIG1ldGhvZCBoYXMKKyAgICAgKiBubyBlZmZlY3QgaWYgbm8gdGV4dCBpcyBzZWxlY3RlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5KCk7CisgICAgCisgICAgLyoqCisgICAgICogUmVwbGFjZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRleHQgd2l0aCB0aGUgdGV4dCBvbiB0aGUgY2xpcGJvYXJkLgorICAgICAqIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIHRleHQgaXMgbm90IGVkaXRhYmxlLCBvciBpZiBubworICAgICAqIHRleHQgaXMgb24gdGhlIGNsaXBib2FyZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwYXN0ZSgpOworICAgIAorICAgIC8qKgorICAgICAqIFJlbW92ZSBzZWxlY3RlZCB0ZXh0IGZyb20gdGhlIGRvY3VtZW50LCB3aXRob3V0IGFsdGVyaW5nIHRoZSBjbGlwYm9hcmQuCisgICAgICogVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUKKyAgICAgKiB0ZXh0IGlzIG5vdCBlZGl0YWJsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjbGVhcigpOworICAgIAorICAgIC8qKgorICAgICAqIFVuZG8gdGhlIG1vc3QgcmVjZW50IHRleHQgY2hhbmdlLiAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZgorICAgICAqIHRoZXJlIGlzIG5vIGNoYW5nZSB0byB1bmRvLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHVuZG8oKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZWRvIHRoZSBtb3N0IHJlY2VudCB0ZXh0IGNoYW5nZS4gIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYKKyAgICAgKiB0aGVyZSBpcyBubyBjaGFuZ2UgdG8gcmVkby4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZWRvKCk7CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY29tbWFuZHMgdGhlIGNvbW1hbmQgbG9nIGNhbiBob2xkLgorICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBjb21tYW5kcyB0aGUgY29tbWFuZCBsb2cgY2FuIGhvbGQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldENvbW1hbmRMb2dTaXplKCk7CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBudW1iZXIgb2YgY29tbWFuZHMgdGhlIGNvbW1hbmQgbG9nIGNhbiBob2xkLiAgQWxsCisgICAgICogcmVkb2FibGUgY29tbWFuZHMgYXJlIHJlbW92ZWQgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCisgICAgICogQHBhcmFtIHNpemUgdGhlIG51bWJlciBvZiBjb21tYW5kcyBrZXB0IGluIHRoZSBjb21tYW5kIGxvZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbW1hbmRMb2dTaXplKGludCBzaXplKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gdGhlIGNvbW1hbmQgbG9nLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyQ29tbWFuZExvZygpOworICAgIAorICAgIC8qKgorICAgICAqIE1vZGlmeSB0aGUgY2hhcmFjdGVyIHN0eWxlcyBvbiB0aGUgc2VsZWN0ZWQgY2hhcmFjdGVycy4gIElmIG5vIGNoYXJhY3RlcnMKKyAgICAgKiBhcmUgc2VsZWN0ZWQsIG1vZGlmeSB0aGUgdHlwaW5nIHN0eWxlLgorICAgICAqIEBwYXJhbSBtb2RpZmllciB0aGUgU3R5bGVNb2RpZmllciB3aXRoIHdoaWNoIHRvIG1vZGlmeSB0aGUgc3R5bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgbW9kaWZ5Q2hhcmFjdGVyU3R5bGVPblNlbGVjdGlvbihTdHlsZU1vZGlmaWVyIG1vZGlmaWVyKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBNb2RpZnkgdGhlIHBhcmFncmFwaCBzdHlsZXMgaW4gcGFyYWdyYXBocyBjb250YWluaW5nIHNlbGVjdGVkIGNoYXJhY3RlcnMsIG9yCisgICAgICogdGhlIHBhcmFncmFwaCBjb250YWluaW5nIHRoZSBpbnNlcnRpb24gcG9pbnQuCisgICAgICogQHBhcmFtIG1vZGlmaWVyIHRoZSBTdHlsZU1vZGlmaWVyIHdpdGggd2hpY2ggdG8gbW9kaWZ5IHRoZSBzdHlsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb2RpZnlQYXJhZ3JhcGhTdHlsZU9uU2VsZWN0aW9uKFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIpOworICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgS2V5UmVtYXAgdXNlZCB0byBwcm9jZXNzIGtleSBldmVudHMuCisgICAgICogQHJldHVybiB0aGUga2V5IHJlbWFwIHVzZWQgdG8gcHJvY2VzcyBrZXkgZXZlbnRzCisgICAgICogQHNlZSAjc2V0S2V5UmVtYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgS2V5UmVtYXAgZ2V0S2V5UmVtYXAoKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBVc2UgdGhlIGdpdmVuIEtleVJlbWFwIHRvIG1hcCBrZXkgZXZlbnRzIHRvIGNoYXJhY3RlcnMuCisgICAgICogT25seSBrZXkKKyAgICAgKiBldmVudHMgYXJlIGFmZmVjdGVkIGJ5IHRoZSByZW1hcDsgIG90aGVyIHRleHQgZW50ZXJpbmcgdGhlCisgICAgICogY29udHJvbCAodmlhIHRoZSBjbGlwYm9hcmQsIGZvciBleGFtcGxlKSBpcyBub3QgYWZmZWN0ZWQKKyAgICAgKiBieSB0aGUgS2V5UmVtYXAuCisgICAgICogPHA+CisgICAgICogRG8gbm90IHBhc3MgPHR0Pm51bGw8L3R0PiB0byB0aGlzIG1ldGhvZCB0byBsZWF2ZSBrZXkKKyAgICAgKiBldmVudHMgdW5tYXBwZWQuICBJbnN0ZWFkLCB1c2UgPHR0PktleVJlbWFwLmdldElkZW50aXR5UmVtYXAoKTwvdHQ+CisgICAgICogQHBhcmFtIHJlbWFwIHRoZSBLZXlSZW1hcCB0byB1c2UgZm9yIG1hcHBpbmcga2V5IGV2ZW50cyB0byBjaGFyYWN0ZXJzCisgICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgcGFyYW1ldGVyIGlzIG51bGwKKyAgICAgKiBAc2VlIEtleVJlbWFwCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0S2V5UmVtYXAoS2V5UmVtYXAgcmVtYXApOworICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbW9kaWZpY2F0aW9uIGZsYWcgb2YgdGhlIGN1cnJlbnQgdGV4dCBjaGFuZ2UuCisgICAgICogQHNlZSAjc2V0TW9kaWZpZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc01vZGlmaWVkKCk7CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBtb2RpZmljYXRpb24gZmxhZyBvZiB0aGUgY3VycmVudCB0ZXh0IGNoYW5nZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RpZmllZChib29sZWFuIG1vZGlmaWVkKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9PZmZzY3JlZW5CdWZmZXJDYWNoZS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL09mZnNjcmVlbkJ1ZmZlckNhY2hlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzM0NGJlZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9PZmZzY3JlZW5CdWZmZXJDYWNoZS5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IE9mZnNjcmVlbkJ1ZmZlckNhY2hlLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBqYXZhLmF3dC5JbWFnZTsKK2ltcG9ydCBqYXZhLmF3dC5Db21wb25lbnQ7CisKK2NsYXNzIE9mZnNjcmVlbkJ1ZmZlckNhY2hlIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBJbWFnZSBmT2Zmc2NyZWVuQnVmZmVyID0gbnVsbDsKKyAgICBwcml2YXRlIENvbXBvbmVudCBmSG9zdDsKKworICAgIE9mZnNjcmVlbkJ1ZmZlckNhY2hlKENvbXBvbmVudCBob3N0KSB7CisKKyAgICAgICAgZkhvc3QgPSBob3N0OworICAgIH0KKworICAgIHByaXZhdGUgSW1hZ2UgbWFrZUJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKworICAgICAgICByZXR1cm4gZkhvc3QuY3JlYXRlSW1hZ2UoTWF0aC5tYXgod2lkdGgsIDEpLCBNYXRoLm1heChoZWlnaHQsIDEpKTsKKyAgICB9CisKKyAgICBJbWFnZSBnZXRCdWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisKKyAgICAgICAgSW1hZ2UgYnVmZmVyID0gZk9mZnNjcmVlbkJ1ZmZlcjsKKworICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXIuZ2V0V2lkdGgoZkhvc3QpID49IHdpZHRoICYmCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5nZXRIZWlnaHQoZkhvc3QpID49IGhlaWdodCkgeworICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBidWZmZXIgPSBtYWtlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBmT2Zmc2NyZWVuQnVmZmVyID0gYnVmZmVyOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvUGFuZWxFdmVudEJyb2FkY2FzdGVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvUGFuZWxFdmVudEJyb2FkY2FzdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGYyNTI1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9QYW5lbEV2ZW50QnJvYWRjYXN0ZXIuamF2YQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogUGFuZWxFdmVudEJyb2FkY2FzdGVyLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgbGlzdGVucyBmb3IgdGV4dCBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucworICogYW5kIGJyb2FkY2FzdHMgdGhlbSB0byBhbGwgb2YgaXRzIGxpc3RlbmVycy4KKyAqLworZmluYWwgY2xhc3MgUGFuZWxFdmVudEJyb2FkY2FzdGVyIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJUlNUID0gVGV4dFBhbmVsRXZlbnQuVEVYVF9QQU5FTF9GSVJTVDsKKworICAgIHByaXZhdGUgZmluYWwgVmVjdG9yW10gZkxpc3RlbmVyczsKKyAgICBwcml2YXRlIGZpbmFsIFRleHRQYW5lbEV2ZW50W10gZkV2ZW50czsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIG5ldyBQYW5lbEV2ZW50QnJvYWRjYXN0ZXIuCisgICAgICogQHBhcmFtIHBhbmVsIHRoZSBUZXh0UGFuZWwgZm9yIHdoaWNoIGV2ZW50cyBhcmUgYnJvYWRjYXN0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgUGFuZWxFdmVudEJyb2FkY2FzdGVyKE1UZXh0UGFuZWwgcGFuZWwpIHsKKworICAgICAgICBpbnQgY291bnQgPSBUZXh0UGFuZWxFdmVudC5URVhUX1BBTkVMX0xBU1QgLSBGSVJTVCArIDE7CisKKyAgICAgICAgZkV2ZW50cyA9IG5ldyBUZXh0UGFuZWxFdmVudFtjb3VudF07CisgICAgICAgIGZMaXN0ZW5lcnMgPSBuZXcgVmVjdG9yW2NvdW50XTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGZMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZFdmVudHNbaV0gPSBuZXcgVGV4dFBhbmVsRXZlbnQocGFuZWwsIGkrRklSU1QpOworICAgICAgICAgICAgZkxpc3RlbmVyc1tpXSA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZCB0aGUgZ2l2ZW4gVGV4dFBhbmVsTGlzdGVuZXIgdG8gdGhlIFRleHRQYW5lbExpc3RlbmVycyB0bworICAgICAqIHdoaWNoIG5vdGlmaWNhdGlvbnMgYXJlIGZvcndhcmRlZC4KKyAgICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIGFkZAorICAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBhZGRMaXN0ZW5lcihUZXh0UGFuZWxMaXN0ZW5lciBsaXN0ZW5lcikgeworCisgICAgICAgIGZvciAoaW50IGk9RklSU1Q7IGkgPD0gVGV4dFBhbmVsRXZlbnQuVEVYVF9QQU5FTF9MQVNUOyBpKyspIHsKKyAgICAgICAgICAgIFZlY3RvciBsaXN0ZW5lcnMgPSBmTGlzdGVuZXJzW2ktRklSU1RdOworICAgICAgICAgICAgaWYgKGxpc3RlbmVyLnJlc3BvbmRzVG9FdmVudFR5cGUoaSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWxpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmFkZEVsZW1lbnQobGlzdGVuZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZSB0aGUgZ2l2ZW4gVGV4dFBhbmVsTGlzdGVuZXIgZnJvbSB0aGUgVGV4dFBhbmVsTGlzdGVuZXJzIHRvCisgICAgICogd2hpY2ggbm90aWZpY2F0aW9ucyBhcmUgZm9yd2FyZGVkLgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gcmVtb3ZlCisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlbW92ZUxpc3RlbmVyKFRleHRQYW5lbExpc3RlbmVyIGxpc3RlbmVyKSB7CisKKyAgICAgICAgZm9yIChpbnQgaT1GSVJTVDsgaSA8PSBUZXh0UGFuZWxFdmVudC5URVhUX1BBTkVMX0xBU1Q7IGkrKykgeworICAgICAgICAgICAgVmVjdG9yIGxpc3RlbmVycyA9IGZMaXN0ZW5lcnNbaS1GSVJTVF07CisgICAgICAgICAgICBpZiAobGlzdGVuZXIucmVzcG9uZHNUb0V2ZW50VHlwZShpKSkgeworICAgICAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmVFbGVtZW50KGxpc3RlbmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlY2VpdmUgYSBub3RpZmljYXRpb24gYW5kIGZvcndhcmQgaXQgdG8gYWxsIGxpc3RlbmVycy4KKyAgICAgKiBAY2hhbmdlQ29kZSBvbmUgb2YgdGhlIGNvbnN0YW50cyBpbiB0aGUgVGV4dFBhbmVsTGlzdGVuZXIgY2xhc3MKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgdGV4dFN0YXRlQ2hhbmdlZChpbnQgaWQpIHsKKworICAgICAgICBpbnQgaW5kZXggPSBpZC1GSVJTVDsKKyAgICAgICAgVGV4dFBhbmVsRXZlbnQgZXZlbnQgPSBmRXZlbnRzW2luZGV4XTsKKyAgICAgICAgVmVjdG9yIGxpc3RlbmVycyA9IGZMaXN0ZW5lcnNbaW5kZXhdOworICAgICAgICAKKyAgICAgICAgaW50IHNpemUgPSBsaXN0ZW5lcnMuc2l6ZSgpOworCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykgeworCisgICAgICAgICAgICBUZXh0UGFuZWxMaXN0ZW5lciBsaXN0ZW5lciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRleHRQYW5lbExpc3RlbmVyKSBsaXN0ZW5lcnMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgbGlzdGVuZXIudGV4dEV2ZW50T2NjdXJyZWQoZXZlbnQpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1J1blN0cmF0ZWd5LmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvUnVuU3RyYXRlZ3kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hN2IxMjkwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1J1blN0cmF0ZWd5LmphdmEKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogUnVuU3RyYXRlZ3kuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworY2xhc3MgUnVuU3RyYXRlZ3kgeworICAgIAorICAgIHZvaWQgZG9JdChSdW5uYWJsZSByKSB7CisgICAgICAgIHIucnVuKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9TY3JvbGxCYXJMYXlvdXQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9TY3JvbGxCYXJMYXlvdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDZmZjZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1Njcm9sbEJhckxheW91dC5qYXZhCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTY3JvbGxCYXJMYXlvdXQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGphdmEuYXd0LkNvbXBvbmVudDsKK2ltcG9ydCBqYXZhLmF3dC5Db250YWluZXI7CitpbXBvcnQgamF2YS5hd3QuRGltZW5zaW9uOworaW1wb3J0IGphdmEuYXd0Lkluc2V0czsKK2ltcG9ydCBqYXZhLmF3dC5MYXlvdXRNYW5hZ2VyOworCitjbGFzcyBTY3JvbGxCYXJMYXlvdXQgaW1wbGVtZW50cyBMYXlvdXRNYW5hZ2VyIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgQ29tcG9uZW50ICAgZkhvcml6U2Nyb2xsQmFyID0gbnVsbDsKKyAgICBDb21wb25lbnQgICBmVmVydFNjcm9sbEJhciA9IG51bGw7CisgICAgQ29tcG9uZW50ICAgZkNoaWxkID0gbnVsbDsKKworICAgIHB1YmxpYyBTY3JvbGxCYXJMYXlvdXQoKSB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkTGF5b3V0Q29tcG9uZW50KFN0cmluZyBuYW1lLCBDb21wb25lbnQgY29tcCkgeworCisgICAgICAgIGlmICgiQ2VudGVyIi5lcXVhbHMobmFtZSkpCisgICAgICAgICAgICBmQ2hpbGQgPSBjb21wOworICAgICAgICBlbHNlIGlmICgiU291dGgiLmVxdWFscyhuYW1lKSkKKyAgICAgICAgICAgIGZIb3JpelNjcm9sbEJhciA9IGNvbXA7CisgICAgICAgIGVsc2UgaWYgKCJFYXN0Ii5lcXVhbHMobmFtZSkpCisgICAgICAgICAgICBmVmVydFNjcm9sbEJhciA9IGNvbXA7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbGF5b3V0Q29udGFpbmVyKENvbnRhaW5lciB0YXJnZXQpIHsKKworICAgICAgICBJbnNldHMgICAgICBpbnNldHMgPSB0YXJnZXQuZ2V0SW5zZXRzKCk7CisgICAgICAgIERpbWVuc2lvbiAgIHRhcmdldFNpemUgPSB0YXJnZXQuZ2V0U2l6ZSgpOworICAgICAgICBpbnQgICAgICAgICBoc2JIZWlnaHQgPSAoZkhvcml6U2Nyb2xsQmFyICE9IG51bGwpID8gZkhvcml6U2Nyb2xsQmFyLmdldFByZWZlcnJlZFNpemUoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOiAwOworICAgICAgICBpbnQgICAgICAgICB2c2JXaWR0aCA9IChmVmVydFNjcm9sbEJhciAhPSBudWxsKSA/IGZWZXJ0U2Nyb2xsQmFyLmdldFByZWZlcnJlZFNpemUoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA6IDA7CisKKyAgICAgICAgaWYgKGZIb3JpelNjcm9sbEJhciAhPSBudWxsKQorICAgICAgICAgICAgZkhvcml6U2Nyb2xsQmFyLnNldEJvdW5kcyhpbnNldHMubGVmdCwgdGFyZ2V0U2l6ZS5oZWlnaHQgLSBpbnNldHMuYm90dG9tIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHNiSGVpZ2h0LCB0YXJnZXRTaXplLndpZHRoIC0gdnNiV2lkdGgsIGhzYkhlaWdodCk7CisKKyAgICAgICAgaWYgKGZWZXJ0U2Nyb2xsQmFyICE9IG51bGwpCisgICAgICAgICAgICBmVmVydFNjcm9sbEJhci5zZXRCb3VuZHModGFyZ2V0U2l6ZS53aWR0aCAtIGluc2V0cy5yaWdodCAtIHZzYldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldHMudG9wLCB2c2JXaWR0aCwgdGFyZ2V0U2l6ZS5oZWlnaHQgLSBoc2JIZWlnaHQpOworCisgICAgICAgIGlmIChmQ2hpbGQgIT0gbnVsbCkKKyAgICAgICAgICAgIGZDaGlsZC5zZXRCb3VuZHMoaW5zZXRzLmxlZnQsIGluc2V0cy50b3AsIHRhcmdldFNpemUud2lkdGggLSBpbnNldHMucmlnaHQgLSB2c2JXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2l6ZS5oZWlnaHQgLSBpbnNldHMuYm90dG9tIC0gaHNiSGVpZ2h0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgRGltZW5zaW9uIG1pbmltdW1MYXlvdXRTaXplKENvbnRhaW5lciB0YXJnZXQpIHsKKworICAgICAgICBEaW1lbnNpb24gICByZXR1cm5WYWwgPSBuZXcgRGltZW5zaW9uKDAsIDApOworICAgICAgICBEaW1lbnNpb24gICBoc2JTaXplOworICAgICAgICBEaW1lbnNpb24gICB2c2JTaXplOworICAgICAgICBEaW1lbnNpb24gICBjaGlsZFNpemU7CisKKyAgICAgICAgaWYgKGZIb3JpelNjcm9sbEJhciAhPSBudWxsICYmIGZIb3JpelNjcm9sbEJhci5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgaHNiU2l6ZSA9IGZIb3JpelNjcm9sbEJhci5nZXRNaW5pbXVtU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaHNiU2l6ZSA9IG5ldyBEaW1lbnNpb24oMCwgMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZlZlcnRTY3JvbGxCYXIgIT0gbnVsbCAmJiBmVmVydFNjcm9sbEJhci5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgdnNiU2l6ZSA9IGZWZXJ0U2Nyb2xsQmFyLmdldE1pbmltdW1TaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2c2JTaXplID0gbmV3IERpbWVuc2lvbigwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmQ2hpbGQgIT0gbnVsbCAmJiBmQ2hpbGQuaXNWaXNpYmxlKCkpIHsKKyAgICAgICAgICAgIGNoaWxkU2l6ZSA9IGZDaGlsZC5nZXRNaW5pbXVtU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2hpbGRTaXplID0gbmV3IERpbWVuc2lvbigwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVyblZhbC53aWR0aCA9IE1hdGgubWF4KGNoaWxkU2l6ZS53aWR0aCwgaHNiU2l6ZS53aWR0aCkgKyB2c2JTaXplLndpZHRoOworICAgICAgICByZXR1cm5WYWwuaGVpZ2h0ID0gTWF0aC5tYXgoY2hpbGRTaXplLmhlaWdodCwgdnNiU2l6ZS5oZWlnaHQpICsgaHNiU2l6ZS5oZWlnaHQ7CisKKyAgICAgICAgSW5zZXRzICBpbnNldHMgPSB0YXJnZXQuZ2V0SW5zZXRzKCk7CisKKyAgICAgICAgcmV0dXJuVmFsLndpZHRoICs9IGluc2V0cy5sZWZ0ICsgaW5zZXRzLnJpZ2h0OworICAgICAgICByZXR1cm5WYWwuaGVpZ2h0ICs9IGluc2V0cy50b3AgKyBpbnNldHMuYm90dG9tOworCisgICAgICAgIHJldHVybiByZXR1cm5WYWw7CisgICAgfQorCisgICAgcHVibGljIERpbWVuc2lvbiBwcmVmZXJyZWRMYXlvdXRTaXplKENvbnRhaW5lciB0YXJnZXQpIHsKKworICAgICAgICBEaW1lbnNpb24gICByZXR1cm5WYWwgPSBuZXcgRGltZW5zaW9uKDAsIDApOworICAgICAgICBEaW1lbnNpb24gICBoc2JTaXplOworICAgICAgICBEaW1lbnNpb24gICB2c2JTaXplOworICAgICAgICBEaW1lbnNpb24gICBjaGlsZFNpemU7CisKKyAgICAgICAgaWYgKGZIb3JpelNjcm9sbEJhciAhPSBudWxsICYmIGZIb3JpelNjcm9sbEJhci5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgaHNiU2l6ZSA9IGZIb3JpelNjcm9sbEJhci5nZXRQcmVmZXJyZWRTaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBoc2JTaXplID0gbmV3IERpbWVuc2lvbigwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmVmVydFNjcm9sbEJhciAhPSBudWxsICYmIGZWZXJ0U2Nyb2xsQmFyLmlzVmlzaWJsZSgpKSB7CisgICAgICAgICAgICB2c2JTaXplID0gZlZlcnRTY3JvbGxCYXIuZ2V0UHJlZmVycmVkU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdnNiU2l6ZSA9IG5ldyBEaW1lbnNpb24oMCwgMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZkNoaWxkICE9IG51bGwgJiYgZkNoaWxkLmlzVmlzaWJsZSgpKSB7CisgICAgICAgICAgICBjaGlsZFNpemUgPSBmQ2hpbGQuZ2V0UHJlZmVycmVkU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2hpbGRTaXplID0gbmV3IERpbWVuc2lvbigwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVyblZhbC53aWR0aCA9IE1hdGgubWF4KGNoaWxkU2l6ZS53aWR0aCwgaHNiU2l6ZS53aWR0aCkgKyB2c2JTaXplLndpZHRoOworICAgICAgICByZXR1cm5WYWwuaGVpZ2h0ID0gTWF0aC5tYXgoY2hpbGRTaXplLmhlaWdodCwgdnNiU2l6ZS5oZWlnaHQpICsgaHNiU2l6ZS5oZWlnaHQ7CisKKyAgICAgICAgSW5zZXRzICBpbnNldHMgPSB0YXJnZXQuZ2V0SW5zZXRzKCk7CisKKyAgICAgICAgcmV0dXJuVmFsLndpZHRoICs9IGluc2V0cy5sZWZ0ICsgaW5zZXRzLnJpZ2h0OworICAgICAgICByZXR1cm5WYWwuaGVpZ2h0ICs9IGluc2V0cy50b3AgKyBpbnNldHMuYm90dG9tOworCisgICAgICAgIHJldHVybiByZXR1cm5WYWw7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGF5b3V0Q29tcG9uZW50KENvbXBvbmVudCBjb21wKSB7CisKKyAgICAgICAgaWYgKGNvbXAgPT0gZkNoaWxkKQorICAgICAgICAgICAgZkNoaWxkID0gbnVsbDsKKyAgICAgICAgZWxzZSBpZiAoY29tcCA9PSBmSG9yaXpTY3JvbGxCYXIpCisgICAgICAgICAgICBmSG9yaXpTY3JvbGxCYXIgPSBudWxsOworICAgICAgICBlbHNlIGlmIChjb21wID09IGZWZXJ0U2Nyb2xsQmFyKQorICAgICAgICAgICAgZlZlcnRTY3JvbGxCYXIgPSBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9TY3JvbGxlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1Njcm9sbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmJiNDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9TY3JvbGxlci5qYXZhCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTY3JvbGxlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuNCAkICREYXRlOiAyMDAxLzEwLzMwIDAyOjQyOjQ4ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsOworCisvKgorICAgIDcvOS85NyAtIGNoYW5nZWQgc29tZSBkZXByZWNhdGVkIG1ldGhvZHMgaW4gU2Nyb2xsYmFyCisgICAgICAgICAgICBBbHNvIHNldHRpbmcgVW5pdCBhbmQgQmxvY2sgaW5jcmVtZW50IHZhbHVlcy4gIE1heWJlCisgICAgICAgICAgICBpdCBtYXR0ZXJzLi4uCisgICAgNi8yOS85OCAtIHJlaW1wbGVtZW50ZWQgdGhpcyBjbGFzcy4gIE5vdyB0aGlzIGNsYXNzIHRhbGtzIHRvCisgICAgICAgICAgICAgIGFueSBjb21wb25lbnQgd2hpY2ggaW1wbGVtZW50cyBTY3JvbGxlci5DbGllbnQuCisgICAgICAgICAgICAgIFNjcm9sbEhvbGRlciBpcyBnb25lLCB0b28uCisgICAgMi80Lzk5IC0gTm8gbG9uZ2VyIGEgUGFuZWwuICBBbHNvLCBkb2Vzbid0IGNyZWF0ZSBTY3JvbGxiYXJzLAorICAgICAgICAgICAgIGFuZCBpbiBmYWN0IGRvZXNuJ3QgZXZlbiB1c2UgdGhlIFNjcm9sbGJhciBjbGFzcworICAgICAgICAgICAgIGRpcmVjdGx5LgorKi8KKworaW1wb3J0IGphdmEuYXd0LkNvbXBvbmVudDsKK2ltcG9ydCBqYXZhLmF3dC5SZWN0YW5nbGU7CitpbXBvcnQgamF2YS5hd3QuRGltZW5zaW9uOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWRqdXN0bWVudExpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFkanVzdG1lbnRFdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5BZGp1c3RhYmxlOworCisvKioKKyogVGhpcyBjbGFzcyBtYW5hZ2VzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGEgc2Nyb2xsYWJsZSBjbGllbnQKKyogYW5kIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHNjcm9sbGJhcnMuICBJdCBjYWxscyB0aGUgY2xpZW50J3MKKyogc2Nyb2xsVG8gbWV0aG9kIGluIHJlc3BvbnNlIHRvIG1hbmlwdWxhdGlvbiBvZiB0aGUgc2Nyb2xsIGJhcnMuCisqCisqIFRoaXMgY2xhc3MgdXNlZCB0byBiZSBhIFBhbmVsIGNvbnRhaW5pbmcgdGhlIHNjcm9sbGJhcnMgYW5kCisqIHRoZSBjbGllbnQgcGFuZWwuICBBcyBwYXJ0IG9mIHRoZSBtaWdyYXRpb24gYXdheSBmcm9tIGRpcmVjdAorKiBBV1QgZGVwZW5kZW5jaWVzLCB0aGlzIGNsYXNzIGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSB2aWV3CisqIGhpZXJhcmNoeS4gIEluc3RlYWQgaXQgc2ltcGx5IGtlZXBzIGEgcmVmZXJlbmNlIHRvIGl0cworKiBjbGllbnQgYW5kIHNjcm9sbCBiYXJzLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGhpZ2hlci0KKyogbGV2ZWwgY2xhc3NlcyB0byBzZXQgdXAgdGhlIHZpZXcgaGllcmFyY2h5LgorKi8KK2ZpbmFsIGNsYXNzIFNjcm9sbGVyIGltcGxlbWVudHMgQWRqdXN0bWVudExpc3RlbmVyCit7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHN0YXRpYyBpbnRlcmZhY2UgQ2xpZW50IHsKKyAgICAgICAgdm9pZCBzY3JvbGxUbyhpbnQgeCwgaW50IHkpOworICAgICAgICBSZWN0YW5nbGUgZ2V0U2Nyb2xsU2l6ZSgpOworICAgICAgICBSZWN0YW5nbGUgZ2V0Qm91bmRzKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBBZGp1c3RhYmxlIGZIb3JpelNjcm9sbEJhciA9IG51bGw7CisgICAgcHJpdmF0ZSBBZGp1c3RhYmxlIGZWZXJ0U2Nyb2xsQmFyID0gbnVsbDsKKyAgICBwcml2YXRlIENsaWVudCBmQ2xpZW50ID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoZXNlIGFyZSB1c2VkIGlmIHRoZSByZXNwZWN0aXZlIFNjcm9sbGJhciBpcyBub3QgcHJlc2VudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBmSG9yaXpWYWx1ZSwgZlZlcnRWYWx1ZTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1VOSVRfSU5DID0gMTA7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgU2Nyb2xsZXIgd2l0aCB0aGUgZ2l2ZW4gQWRqdXN0YWJsZXMsCisgICAgICogd2hpY2ggcmVhbGx5IHNob3VsZCBiZSBzY3JvbGxiYXJzIG9mIHNvbWUgaWxrLgorICAgICAqIEFsc28sIHRoZSBBZGp1c3RhYmxlcyBhcmUgcmVxdWlyZWQgdG8gYmUgQVdUIENvbXBvbmVudHMsCisgICAgICogc28gdGhlIFNjcm9sbGVyIGNhbiBlbmFibGUgYW5kIGRpc2FibGUgdGhlbS4KKyAgICAgKiBIb3dldmVyLCBhIFNjcm9sbGVyIGNhbiB3b3JrIHdpdGggZWl0aGVyIEFXVCBTY3JvbGxiYXJzCisgICAgICogb3IgSkZDIEpTY3JvbGxiYXJzLgorICAgICAqIEBwYXJhbSBob3JpelNjcm9sbGJhciB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIuICBudWxsIGlmCisgICAgICogdGhlcmUgaXMgbm8gaG9yaXpvbnRhbCBzY3JvbGxiYXIuCisgICAgICogQHBhcmFtIHZlcnRTY3JvbGxiYXIgdGhlIHZlcnRpY2FsIHNjcm9sbGJhci4gIG51bGwgaWYKKyAgICAgKiB0aGVyZSBpcyBubyB2ZXJ0aWNhbCBzY3JvbGxiYXIuCisgICAgICovCisgICAgcHVibGljIFNjcm9sbGVyKEFkanVzdGFibGUgaG9yaXpTY3JvbGxCYXIsCisgICAgICAgICAgICAgICAgICAgIEFkanVzdGFibGUgdmVydFNjcm9sbEJhcikgeworCisgICAgICAgIC8vc2V0TGF5b3V0KG5ldyBTY3JvbGxCYXJMYXlvdXQoKSk7CisKKyAgICAgICAgZkhvcml6U2Nyb2xsQmFyID0gaG9yaXpTY3JvbGxCYXI7CisgICAgICAgIGZWZXJ0U2Nyb2xsQmFyID0gdmVydFNjcm9sbEJhcjsKKworICAgICAgICBpZiAoZlZlcnRTY3JvbGxCYXIgIT0gbnVsbCkgeworICAgICAgICAgICAgZlZlcnRTY3JvbGxCYXIuc2V0VW5pdEluY3JlbWVudChERUZBVUxUX1VOSVRfSU5DKTsKKyAgICAgICAgICAgIGZWZXJ0U2Nyb2xsQmFyLmFkZEFkanVzdG1lbnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZkhvcml6U2Nyb2xsQmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZIb3JpelNjcm9sbEJhci5zZXRVbml0SW5jcmVtZW50KERFRkFVTFRfVU5JVF9JTkMpOworICAgICAgICAgICAgZkhvcml6U2Nyb2xsQmFyLmFkZEFkanVzdG1lbnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENsaWVudChDbGllbnQgY2xpZW50KSB7CisKKyAgICAgICAgZkNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgY2xpZW50U2Nyb2xsU2l6ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGp1c3RtZW50VmFsdWVDaGFuZ2VkKEFkanVzdG1lbnRFdmVudCBldmVudCkgeworCisgICAgICAgIC8vIHZhcmlhYmxlIG5vdCB1c2VkIGJvb2xlYW4gaG9yaXpvbnRhbDsKKyAgICAgICAgaWYgKGV2ZW50LmdldEFkanVzdGFibGUoKSA9PSBmSG9yaXpTY3JvbGxCYXIpIHsKKyAgICAgICAgICAgIGludCB2ZXJ0VmFsID0gZlZlcnRTY3JvbGxCYXIgPT0gbnVsbD8gZlZlcnRWYWx1ZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlZlcnRTY3JvbGxCYXIuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIHNjcm9sbFRvKGV2ZW50LmdldFZhbHVlKCksIHZlcnRWYWwpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IGhvcml6VmFsID0gZkhvcml6U2Nyb2xsQmFyID09IG51bGw/IGZIb3JpelZhbHVlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmSG9yaXpTY3JvbGxCYXIuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIHNjcm9sbFRvKGhvcml6VmFsLCBldmVudC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRWYWx1ZXMoQWRqdXN0YWJsZSBzY3JvbGxiYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmlzaWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtaW5pbXVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCkgeworCisgICAgICAgIGludCBtYXhpbXVtID0gbWluaW11bStoZWlnaHQ7CisgICAgICAgIAorICAgICAgICBpZiAoc2Nyb2xsYmFyICE9IG51bGwpIHsKKworICAgICAgICAgICAgQ29tcG9uZW50IHNjcm9sbGJhclRvbyA9IChDb21wb25lbnQpIHNjcm9sbGJhcjsKKworICAgICAgICAgICAgaWYgKG1heGltdW0gPD0gdmlzaWJsZSkgeworICAgICAgICAgICAgICAgIHNjcm9sbGJhclRvby5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNjcm9sbGJhclRvby5zZXRFbmFibGVkKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzY3JvbGxiYXIuc2V0TWluaW11bShtaW5pbXVtKTsKKyAgICAgICAgICAgIHNjcm9sbGJhci5zZXRNYXhpbXVtKG1heGltdW0pOworICAgICAgICAgICAgc2Nyb2xsYmFyLnNldFZpc2libGVBbW91bnQodmlzaWJsZSk7CisJICAgIC8vIHdvcmthcm91bmQgc2V0QmxvY2tJbmNyZW1lbnQgd2FybmluZ3MgZm9yIGluY3JlbWVudHMgPCAxCisJICAgIHNjcm9sbGJhci5zZXRCbG9ja0luY3JlbWVudChNYXRoLm1heCgxLCB2aXNpYmxlIC0gREVGQVVMVF9VTklUX0lOQykpOworICAgICAgICB9CisgICAgfQorCisKKyAgICBwdWJsaWMgdm9pZCBjbGllbnRTY3JvbGxTaXplQ2hhbmdlZCgpCisgICAgeworICAgICAgICBSZWN0YW5nbGUgYm91bmRzID0gZkNsaWVudC5nZXRCb3VuZHMoKTsKKyAgICAgICAgUmVjdGFuZ2xlIHByZWZlcnJlZFNpemUgPSBmQ2xpZW50LmdldFNjcm9sbFNpemUoKTsKKworICAgICAgICBzZXRWYWx1ZXMoZkhvcml6U2Nyb2xsQmFyLCBib3VuZHMud2lkdGgsIHByZWZlcnJlZFNpemUueCwgcHJlZmVycmVkU2l6ZS53aWR0aCk7CisgICAgICAgIHNldFZhbHVlcyhmVmVydFNjcm9sbEJhciwgYm91bmRzLmhlaWdodCwgcHJlZmVycmVkU2l6ZS55LCBwcmVmZXJyZWRTaXplLmhlaWdodCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UG9zaXRpb24oaW50IHgsIGludCB5KSB7CisKKyAgICAgICAgaWYgKGZIb3JpelNjcm9sbEJhciAhPSBudWxsKSB7CisgICAgICAgICAgICBmSG9yaXpTY3JvbGxCYXIuc2V0VmFsdWUoeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmSG9yaXpWYWx1ZSA9IHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZWZXJ0U2Nyb2xsQmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZWZXJ0U2Nyb2xsQmFyLnNldFZhbHVlKHkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZlZlcnRWYWx1ZSA9IHk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2Nyb2xsVG8oaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgZkNsaWVudC5zY3JvbGxUbyh4LCB5KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRIb3JpekxpbmVEaXN0YW5jZShpbnQgbmV3RGlzdGFuY2UpCisgICAgeworICAgICAgICBpZiAoZkhvcml6U2Nyb2xsQmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZIb3JpelNjcm9sbEJhci5zZXRVbml0SW5jcmVtZW50KG5ld0Rpc3RhbmNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEhvcml6UGFnZU92ZXJsYXAoaW50IG5ld092ZXJsYXApCisgICAgeworICAgICAgICBpZiAoZkhvcml6U2Nyb2xsQmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZIb3JpelNjcm9sbEJhci5zZXRCbG9ja0luY3JlbWVudCggLy8gd29ya2Fyb3VuZCB3YXJuaW5ncyBmb3IgdmFsdWVzIDwgMSBvbiB1bml4CisgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KDEsIGZIb3JpelNjcm9sbEJhci5nZXRWaXNpYmxlQW1vdW50KCktbmV3T3ZlcmxhcCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VmVydExpbmVEaXN0YW5jZShpbnQgbmV3RGlzdGFuY2UpCisgICAgeworICAgICAgICBpZiAoZlZlcnRTY3JvbGxCYXIgIT0gbnVsbCkgeworICAgICAgICAgICAgZlZlcnRTY3JvbGxCYXIuc2V0VW5pdEluY3JlbWVudChuZXdEaXN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRWZXJ0UGFnZU92ZXJsYXAoaW50IG5ld092ZXJsYXApCisgICAgeworICAgICAgICBpZiAoZlZlcnRTY3JvbGxCYXIgIT0gbnVsbCkgeworICAgICAgICAgICAgZlZlcnRTY3JvbGxCYXIuc2V0QmxvY2tJbmNyZW1lbnQoIC8vIHdvcmthcm91bmQgd2FybmluZ3MgZm9yIHZhbHVlcyA8IDEgb24gdW5peAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgxLCBmVmVydFNjcm9sbEJhci5nZXRWaXNpYmxlQW1vdW50KCktbmV3T3ZlcmxhcCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1NlbGVjdGlvbkRyYWdJbnRlcmFjdG9yLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvU2VsZWN0aW9uRHJhZ0ludGVyYWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZjllZDFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1NlbGVjdGlvbkRyYWdJbnRlcmFjdG9yLmphdmEKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFNlbGVjdGlvbkRyYWdJbnRlcmFjdG9yLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBqYXZhLnRleHQuQnJlYWtJdGVyYXRvcjsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkZvY3VzRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuS2V5RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuTW91c2VFdmVudDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdC5UZXh0T2Zmc2V0OworCitmaW5hbCBjbGFzcyBTZWxlY3Rpb25EcmFnSW50ZXJhY3RvciBleHRlbmRzIEJlaGF2aW9yIGltcGxlbWVudHMgUnVubmFibGUgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIFRleHRDb21wb25lbnQgZlRleHRDb21wb25lbnQ7CisgICAgcHJpdmF0ZSBUZXh0U2VsZWN0aW9uIGZTZWxlY3Rpb247CisgICAgcHJpdmF0ZSBSdW5TdHJhdGVneSBmUnVuU3RyYXRlZ3k7CisgICAgCisgICAgcHJpdmF0ZSBUZXh0T2Zmc2V0IGZBbmNob3JTdGFydDsgLy8gYWxpYXNlcyB0ZXh0IG9mZnNldHMgLSBjbGllbnQgYmV3YXJlCisgICAgcHJpdmF0ZSBUZXh0T2Zmc2V0IGZBbmNob3JFbmQ7CisgICAgcHJpdmF0ZSBUZXh0T2Zmc2V0IGZDdXJyZW50OworCisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGZXYXNaZXJvTGVuZ3RoOworCisgICAgcHJpdmF0ZSBpbnQgZkN1cnJlbnRYOworICAgIHByaXZhdGUgaW50IGZDdXJyZW50WTsKKyAgICBwcml2YXRlIGJvb2xlYW4gZk1vdXNlT3V0c2lkZTsKKworICAgIHByaXZhdGUgVGhyZWFkIGZBdXRvc2Nyb2xsVGhyZWFkID0gbnVsbDsKKyAgICBwcml2YXRlIGJvb2xlYW4gZlRocmVhZFJ1biA9IHRydWU7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQga1Njcm9sbFNsZWVwID0gMzAwOworCisgICAgcHVibGljIFNlbGVjdGlvbkRyYWdJbnRlcmFjdG9yKFRleHRTZWxlY3Rpb24gc2VsZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0Q29tcG9uZW50IHRleHRDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1blN0cmF0ZWd5IHJ1blN0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IGFuY2hvclN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IGFuY2hvckVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBjdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5pdGlhbFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbml0aWFsWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3YXNaZXJvTGVuZ3RoKSB7CisKKyAgICAgICAgZlRleHRDb21wb25lbnQgPSB0ZXh0Q29tcG9uZW50OworICAgICAgICBmU2VsZWN0aW9uID0gc2VsZWN0aW9uOworICAgICAgICBmUnVuU3RyYXRlZ3kgPSBydW5TdHJhdGVneTsKKyAgICAgICAgZkFuY2hvclN0YXJ0ID0gYW5jaG9yU3RhcnQ7CisgICAgICAgIGZBbmNob3JFbmQgPSBhbmNob3JFbmQ7CisgICAgICAgIGZDdXJyZW50ID0gY3VycmVudDsKKworICAgICAgICBmQ3VycmVudFggPSBpbml0aWFsWDsKKyAgICAgICAgZkN1cnJlbnRZID0gaW5pdGlhbFk7CisgICAgICAgIGZNb3VzZU91dHNpZGUgPSBmYWxzZTsKKworICAgICAgICBmV2FzWmVyb0xlbmd0aCA9IHdhc1plcm9MZW5ndGg7CisgICAgICAgIAorICAgICAgICBzZXRTZWxlY3Rpb24oKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIGJvb2xlYW4gdGV4dENvbnRyb2xFdmVudE9jY3VycmVkKEJlaGF2aW9yLkV2ZW50VHlwZSBldmVudCwgT2JqZWN0IHdoYXQpIHsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBmb2N1c0dhaW5lZChGb2N1c0V2ZW50IGV2ZW50KSB7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZm9jdXNMb3N0KEZvY3VzRXZlbnQgZXZlbnQpIHsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBrZXlQcmVzc2VkKEtleUV2ZW50IGV2ZW50KSB7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4ga2V5VHlwZWQoS2V5RXZlbnQgZXZlbnQpIHsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBrZXlSZWxlYXNlZChLZXlFdmVudCBldmVudCkgeworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBtb3VzZURyYWdnZWQoTW91c2VFdmVudCBlKSB7CisKKyAgICAgICAgaW50IHggPSBlLmdldFgoKSwgeSA9IGUuZ2V0WSgpOworICAgICAgICBpZiAoZkN1cnJlbnRYICE9IHggfHwgZkN1cnJlbnRZICE9IHkpIHsKKyAgICAgICAgICAgIGZDdXJyZW50WCA9IHg7CisgICAgICAgICAgICBmQ3VycmVudFkgPSB5OworICAgICAgICAgICAgcHJvY2Vzc01vdXNlTG9jYXRpb24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIGJvb2xlYW4gbW91c2VFbnRlcihNb3VzZUV2ZW50IGUpIHsKKworICAgICAgICBmTW91c2VPdXRzaWRlID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBtb3VzZUV4aXRlZChNb3VzZUV2ZW50IGUpIHsKKworICAgICAgICBpZiAoZkF1dG9zY3JvbGxUaHJlYWQgPT0gbnVsbCkgeworICAgICAgICAgICAgZkF1dG9zY3JvbGxUaHJlYWQgPSBuZXcgVGhyZWFkKHRoaXMpOworICAgICAgICAgICAgZkF1dG9zY3JvbGxUaHJlYWQuc3RhcnQoKTsKKyAgICAgICAgfQorICAgICAgICBmTW91c2VPdXRzaWRlID0gdHJ1ZTsKKyAgICAgICAgbm90aWZ5KCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHVibGljIHN5bmNocm9uaXplZCBib29sZWFuIG1vdXNlUmVsZWFzZWQoTW91c2VFdmVudCBlKSB7CisKKyAgICAgICAgZk1vdXNlT3V0c2lkZSA9IGZhbHNlOworICAgICAgICBmVGhyZWFkUnVuID0gZmFsc2U7CisgICAgICAgIGlmIChmQXV0b3Njcm9sbFRocmVhZCAhPSBudWxsKSB7CisgICAgICAgICAgICBmQXV0b3Njcm9sbFRocmVhZC5pbnRlcnJ1cHQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVtb3ZlRnJvbU93bmVyKCk7CisgICAgICAgIGJvb2xlYW4gaXNaZXJvTGVuZ3RoID0gVGV4dFNlbGVjdGlvbi5yYW5nZUlzWmVyb0xlbmd0aChmQW5jaG9yU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmQW5jaG9yRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkN1cnJlbnQpOworICAgICAgICBmU2VsZWN0aW9uLm1vdXNlUmVsZWFzZWQoaXNaZXJvTGVuZ3RoICE9IGZXYXNaZXJvTGVuZ3RoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc01vdXNlTG9jYXRpb24oKSB7CisKKyAgICAgICAgZlRleHRDb21wb25lbnQuc2Nyb2xsVG9TaG93KGZDdXJyZW50WCwgZkN1cnJlbnRZKTsKKyAgICAgICAgZlRleHRDb21wb25lbnQucG9pbnRUb1RleHRPZmZzZXQoZkN1cnJlbnQsIGZDdXJyZW50WCwgZkN1cnJlbnRZLCBudWxsLCB0cnVlKTsKKyAgICAgICAgc2V0U2VsZWN0aW9uKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvbigpIHsKKworICAgICAgICBpZiAoZkN1cnJlbnQuZ3JlYXRlclRoYW4oZkFuY2hvckVuZCkpIHsKKyAgICAgICAgICAgIGZTZWxlY3Rpb24uYWR2YW5jZVRvTmV4dEJvdW5kYXJ5KGZDdXJyZW50KTsKKyAgICAgICAgICAgIGZTZWxlY3Rpb24uc2V0U2VsUmFuZ2VBbmREcmF3KGZBbmNob3JTdGFydCwgZkN1cnJlbnQsIGZBbmNob3JTdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZkN1cnJlbnQubGVzc1RoYW4oZkFuY2hvclN0YXJ0KSkgeworICAgICAgICAgICAgZlNlbGVjdGlvbi5hZHZhbmNlVG9QcmV2aW91c0JvdW5kYXJ5KGZDdXJyZW50KTsKKyAgICAgICAgICAgIGZTZWxlY3Rpb24uc2V0U2VsUmFuZ2VBbmREcmF3KGZDdXJyZW50LCBmQW5jaG9yRW5kLCBmQW5jaG9yU3RhcnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZkN1cnJlbnQuYXNzaWduKGZBbmNob3JFbmQpOworICAgICAgICAgICAgZlNlbGVjdGlvbi5zZXRTZWxSYW5nZUFuZERyYXcoZkFuY2hvclN0YXJ0LCBmQW5jaG9yRW5kLCBmQW5jaG9yU3RhcnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcnVuKCkgeworCisgICAgICAgIFJ1bm5hYmxlIGRvTW91c2VMb2MgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc01vdXNlTG9jYXRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChmVGhyZWFkUnVuKSB7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKGtTY3JvbGxTbGVlcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBqdXN0IHF1aXQgc2Nyb2xsaW5nCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoIWZNb3VzZU91dHNpZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGp1c3QgcXVpdCBzY3JvbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZSdW5TdHJhdGVneS5kb0l0KGRvTW91c2VMb2MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1NpbXBsZUNvbW1hbmRMb2cuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9TaW1wbGVDb21tYW5kTG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTg0OGQxN2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvU2ltcGxlQ29tbWFuZExvZy5qYXZhCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTaW1wbGVDb21tYW5kTG9nLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDEvMTAvMzAgMDI6NDI6NDggJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ZpbmFsIGNsYXNzIFNpbXBsZUNvbW1hbmRMb2cgeworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBDb21tYW5kIGZMYXN0Q29tbWFuZCA9IG51bGw7CisgICAgcHJpdmF0ZSBDb21tYW5kIGZDdXJyZW50Q29tbWFuZCA9IG51bGw7CisgICAgcHJpdmF0ZSBQYW5lbEV2ZW50QnJvYWRjYXN0ZXIgZkxpc3RlbmVyOworCisgICAgcHJpdmF0ZSBib29sZWFuIGZCYXNlSXNNb2RpZmllZDsKKworICAgIHByaXZhdGUgaW50IGZMb2dTaXplID0gMTQ7CisKKyAgICBwdWJsaWMgU2ltcGxlQ29tbWFuZExvZyhQYW5lbEV2ZW50QnJvYWRjYXN0ZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgZkxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgICAgIGZCYXNlSXNNb2RpZmllZCA9IGZhbHNlOworICAgIH0KKworICAgIC8qKiBhZGRzIHRoZSBzcGVjZmllZCBjb21tYW5kIHRvIHRoZSB0b3Agb2YgdGhlIGNvbW1hbmQgc3RhY2sKKyAgICAqIChhbnkgdW5kb25lIGNvbW1hbmRzIG9uIHRoZSBzdGFjayBhcmUgcmVtb3ZlZCkKKyAgICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkIChpLmUuLCBpdHMgZXhlY3V0ZSgpIG1ldGhvZAorICAgICogaGFzIGJlZW4gY2FsbGVkLCBvciBhbiBlcXVpdmFsZW50IGFjdGlvbiBoYXMgYmVlbiB0YWtlbikgKi8KKyAgICB2b2lkIGFkZChDb21tYW5kIG5ld0NvbW1hbmQpIHsKKyAgICAgICAgLy8gaWYgdGhlcmUgYXJlIGNvbW1hbmRzIG9uIHRoZSBzdGFjayB0aGF0IGhhdmUgYmVlbiB1bmRvbmUsIHRoZXkgYXJlCisgICAgICAgIC8vIGRyb3BwZWQgb24gdGhlIGZsb29yIGhlcmUKKyAgICAgICAgbmV3Q29tbWFuZC5zZXRQcmV2aW91c0NvbW1hbmQoZkN1cnJlbnRDb21tYW5kKTsKKyAgICAgICAgCisgICAgICAgIGZpbmFsIENvbW1hbmQgb2xkTGFzdENvbW1hbmQgPSBmTGFzdENvbW1hbmQ7CisgICAgICAgIGZMYXN0Q29tbWFuZCA9IG51bGw7CisgICAgICAgIAorICAgICAgICBmQ3VycmVudENvbW1hbmQgPSBuZXdDb21tYW5kOworICAgICAgICBsaW1pdENvbW1hbmRzKGZMb2dTaXplKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvbGRMYXN0Q29tbWFuZCAhPSBudWxsKSB7CisgICAgICAgICAgICBmTGlzdGVuZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5VTkRPX1NUQVRFX0NIQU5HRUQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgdGhlIGNvbW1hbmQgbGlzdCBpcyBsb25nZXIgdGhhbiBsb2dTaXplLCB0cnVuY2F0ZSBpdC4KKyAgICAgKiBUaGlzIG1ldGhvZCB0cmF2ZXJzZXMgdGhlIGxpc3QgZWFjaCB0aW1lLCBhbmQgaXMgbm90IGEgbW9kZWwKKyAgICAgKiBvZiBlZmZpY2llbmN5LiAgSXQncyBhIHRlbXBvcmFyeSB3YXkgdG8gcGx1ZyB0aGlzIG1lbW9yeSBsZWFrCisgICAgICogdW50aWwgSSBjYW4gaW1wbGVtZW50IGEgYm91bmRlZCBjb21tYW5kIGxvZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgbGltaXRDb21tYW5kcyhpbnQgbG9nU2l6ZSkgeworCisgICAgICAgIGlmIChsb2dTaXplID09IDApIHsKKyAgICAgICAgICAgIGZDdXJyZW50Q29tbWFuZCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDb21tYW5kIGN1cnJlbnRDb21tYW5kID0gZkN1cnJlbnRDb21tYW5kOworICAgICAgICAgICAgaW50IHJlbWFpbmluZyA9IGxvZ1NpemUtMTsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Q29tbWFuZCAhPSBudWxsICYmIHJlbWFpbmluZyA+IDApIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29tbWFuZCA9IGN1cnJlbnRDb21tYW5kLnByZXZpb3VzQ29tbWFuZCgpOworICAgICAgICAgICAgICAgIHJlbWFpbmluZyAtPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21tYW5kICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29tbWFuZC5zZXRQcmV2aW91c0NvbW1hbmQobnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogYWRkcyB0aGUgc3BlY2ZpZWQgY29tbWFuZCB0byB0aGUgdG9wIG9mIHRoZSBjb21tYW5kIHN0YWNrIGFuZCBleGVjdXRlcyBpdCAqLworICAgIHZvaWQgYWRkQW5kRG8oQ29tbWFuZCBuZXdDb21tYW5kKSB7CisgICAgICAgIGFkZChuZXdDb21tYW5kKTsKKyAgICAgICAgbmV3Q29tbWFuZC5leGVjdXRlKCk7CisKKyAgICAgICAgZkxpc3RlbmVyLnRleHRTdGF0ZUNoYW5nZWQoVGV4dFBhbmVsRXZlbnQuVU5ET19TVEFURV9DSEFOR0VEKTsKKyAgICB9CisKKyAgICAvKiogdW5kb2VzIHRoZSBjb21tYW5kIG9uIHRoZSB0b3Agb2YgdGhlIGNvbW1hbmQgc3RhY2ssIGlmIHRoZXJlIGlzIG9uZSAqLworICAgIHZvaWQgdW5kbygpIHsKKyAgICAgICAgaWYgKGZDdXJyZW50Q29tbWFuZCAhPSBudWxsKSB7CisgICAgICAgICAgICBDb21tYW5kIGN1cnJlbnQgPSBmQ3VycmVudENvbW1hbmQ7CisgICAgICAgICAgICBjdXJyZW50LnVuZG8oKTsKKworICAgICAgICAgICAgZkN1cnJlbnRDb21tYW5kID0gY3VycmVudC5wcmV2aW91c0NvbW1hbmQoKTsKKworICAgICAgICAgICAgY3VycmVudC5zZXRQcmV2aW91c0NvbW1hbmQoZkxhc3RDb21tYW5kKTsKKyAgICAgICAgICAgIGZMYXN0Q29tbWFuZCA9IGN1cnJlbnQ7CisKKyAgICAgICAgICAgIGZMaXN0ZW5lci50ZXh0U3RhdGVDaGFuZ2VkKFRleHRQYW5lbEV2ZW50LlVORE9fU1RBVEVfQ0hBTkdFRCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogcmVkb2VzIHRoZSBsYXN0IHVuZG9uZSBjb21tYW5kIG9uIHRoZSBjb21tYW5kIHN0YWNrLCBpZiB0aGVyZSBhcmUgYW55ICovCisgICAgdm9pZCByZWRvKCkgeworICAgICAgICBpZiAoZkxhc3RDb21tYW5kICE9IG51bGwpIHsKKyAgICAgICAgICAgIENvbW1hbmQgbGFzdCA9IGZMYXN0Q29tbWFuZDsKKyAgICAgICAgICAgIGxhc3QucmVkbygpOworCisgICAgICAgICAgICBmTGFzdENvbW1hbmQgPSBsYXN0LnByZXZpb3VzQ29tbWFuZCgpOworCisgICAgICAgICAgICBsYXN0LnNldFByZXZpb3VzQ29tbWFuZChmQ3VycmVudENvbW1hbmQpOworICAgICAgICAgICAgZkN1cnJlbnRDb21tYW5kID0gbGFzdDsKKworICAgICAgICAgICAgZkxpc3RlbmVyLnRleHRTdGF0ZUNoYW5nZWQoVGV4dFBhbmVsRXZlbnQuVU5ET19TVEFURV9DSEFOR0VEKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGNhblVuZG8oKSB7CisgICAgICAgIHJldHVybiBmQ3VycmVudENvbW1hbmQgIT0gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBjYW5SZWRvKCkgeworICAgICAgICByZXR1cm4gZkxhc3RDb21tYW5kICE9IG51bGw7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNNb2RpZmllZCgpIHsKKworICAgICAgICBpZiAoZkN1cnJlbnRDb21tYW5kID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmQmFzZUlzTW9kaWZpZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZkN1cnJlbnRDb21tYW5kLmlzTW9kaWZpZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE1vZGlmaWVkKGJvb2xlYW4gbW9kaWZpZWQpIHsKKworICAgICAgICBpZiAoZkN1cnJlbnRDb21tYW5kID09IG51bGwpIHsKKyAgICAgICAgICAgIGZCYXNlSXNNb2RpZmllZCA9IG1vZGlmaWVkOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZkN1cnJlbnRDb21tYW5kLnNldE1vZGlmaWVkKG1vZGlmaWVkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsZWFyTG9nKCkgeworCisgICAgICAgIGlmIChmQ3VycmVudENvbW1hbmQgIT0gbnVsbCkgeworICAgICAgICAgICAgZkJhc2VJc01vZGlmaWVkID0gZkN1cnJlbnRDb21tYW5kLmlzTW9kaWZpZWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyB2YXJpYWJsZSBub3QgdXNlZCBib29sZWFuIGNoYW5nZWQgPSBmQ3VycmVudENvbW1hbmQgIT0gbnVsbCB8fCBmTGFzdENvbW1hbmQgIT0gbnVsbDsKKyAgICAgICAgZkN1cnJlbnRDb21tYW5kID0gbnVsbDsKKyAgICAgICAgZkxhc3RDb21tYW5kID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIGZMaXN0ZW5lci50ZXh0U3RhdGVDaGFuZ2VkKFRleHRQYW5lbEV2ZW50LlVORE9fU1RBVEVfQ0hBTkdFRCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TG9nU2l6ZShpbnQgc2l6ZSkgeworCisgICAgICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibG9nIHNpemUgY2Fubm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzaXplIDwgZkxvZ1NpemUpIHsKKyAgICAgICAgICAgIGxpbWl0Q29tbWFuZHMoc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZMb2dTaXplID0gc2l6ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChmTGFzdENvbW1hbmQgIT0gbnVsbCB8fCBzaXplID09IDApIHsKKyAgICAgICAgICAgIGZMYXN0Q29tbWFuZCA9IG51bGw7CisgICAgICAgICAgICBmTGlzdGVuZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5VTkRPX1NUQVRFX0NIQU5HRUQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRMb2dTaXplKCkgeworCisgICAgICAgIHJldHVybiBmTG9nU2l6ZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvU3R5bGVDaGFuZ2VDb21tYW5kLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvU3R5bGVDaGFuZ2VDb21tYW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODQ3NzFhYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9TdHlsZUNoYW5nZUNvbW1hbmQuamF2YQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTdHlsZUNoYW5nZUNvbW1hbmQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZU1vZGlmaWVyOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NVGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRmb3JtYXQuVGV4dE9mZnNldDsKKworY2xhc3MgU3R5bGVDaGFuZ2VDb21tYW5kIGV4dGVuZHMgVGV4dENvbW1hbmQgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIGJvb2xlYW4gZkNoYXJhY3RlcjsKKyAgICBwcml2YXRlIFN0eWxlTW9kaWZpZXIgZk1vZGlmaWVyOworCisgICAgcHVibGljIFN0eWxlQ2hhbmdlQ29tbWFuZChUZXh0RWRpdEJlaGF2aW9yIGJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRleHQgb3JpZ2luYWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdGFydEJlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsRW5kQmVmb3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVNb2RpZmllciBtb2RpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gY2hhcmFjdGVyKSB7CisKKyAgICAgICAgc3VwZXIoYmVoYXZpb3IsIG9yaWdpbmFsVGV4dCwgc2VsU3RhcnRCZWZvcmUuZk9mZnNldCwgc2VsU3RhcnRCZWZvcmUsIHNlbEVuZEJlZm9yZSk7CisgICAgICAgIGZNb2RpZmllciA9IG1vZGlmaWVyOworICAgICAgICBmQ2hhcmFjdGVyID0gY2hhcmFjdGVyOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgYWZmZWN0ZWRSYW5nZUVuZCgpIHsKKyAgICAgICAgcmV0dXJuIGZTZWxFbmRCZWZvcmUuZk9mZnNldDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgeworICAgICAgICBmQmVoYXZpb3IuZG9Nb2RpZnlTdHlsZXMoZkFmZmVjdGVkUmFuZ2VTdGFydCwgZlNlbEVuZEJlZm9yZS5mT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZk1vZGlmaWVyLCBmQ2hhcmFjdGVyLCBmU2VsU3RhcnRCZWZvcmUsIGZTZWxFbmRCZWZvcmUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9TdHlsZWRUZXh0Q2xpcGJvYXJkLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvU3R5bGVkVGV4dENsaXBib2FyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhNTVmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvU3R5bGVkVGV4dENsaXBib2FyZC5qYXZhCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTdHlsZWRUZXh0Q2xpcGJvYXJkLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDcgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuQ2xpcGJvYXJkOworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5DbGlwYm9hcmRPd25lcjsKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuVHJhbnNmZXJhYmxlOworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5EYXRhRmxhdm9yOworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5VbnN1cHBvcnRlZEZsYXZvckV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CisKK2ltcG9ydCBqYXZhLmF3dC5Ub29sa2l0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlZFRleHQ7CisKKy8qKgorKiBXcmFwcGVyIGZvciBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuQ2xpcGJvYXJkCisqIFBhY2thZ2VzIGFuIE1Db25zdFRleHQgaW4gYSB0cmFuc2ZlcmFibGUsIGFuZCBwdXRzIGl0IG9uIHRoZSBjbGlwYm9hcmQuCisqLworCitjbGFzcyBTdHlsZWRUZXh0Q2xpcGJvYXJkIGltcGxlbWVudHMgQ2xpcGJvYXJkT3duZXIgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAvLyBUaGlzIGNsYXNzIGhhcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIHRoZSBXaW5kb3dzIHN5c3RlbSBjbGlwYm9hcmQuCisgICAgLy8gVGhlIHN5c3RlbSBjbGlwYm9hcmQgd2lsbCBvbmx5IHJldHVybiBTdHJpbmcgY29udGVudCwgZXZlbgorICAgIC8vIHRob3VnaCBpdCBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRlbnRzLiAgU28gaWYgb3VyCisgICAgLy8gY2xpcGJvYXJkIGlzIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLCB3ZSdsbCBrZWVwIGEgcmVmZXJlbmNlCisgICAgLy8gdG8gdGhlIGNvbnRlbnQgYW5kIHVzZSB0aGF0IGluc3RlYWQgb2Ygd2hhdCB0aGUgQ2xpcGJvYXJkIHJldHVybnMuCisKKyAgICBwcml2YXRlIHN0YXRpYyBDbGlwYm9hcmQgU1lTVEVNID0gbnVsbDsKKyAgICBzdGF0aWMgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgU1lTVEVNID0gVG9vbGtpdC5nZXREZWZhdWx0VG9vbGtpdCgpLmdldFN5c3RlbUNsaXBib2FyZCgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKFRocm93YWJsZSB0aCkgeworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3R5bGVkVGV4dENsaXBib2FyZCBmZ1N5c3RlbUNsaXBib2FyZCA9IG51bGw7CisKKyAgICBwdWJsaWMgc3RhdGljIFN0eWxlZFRleHRDbGlwYm9hcmQgZ2V0Q2xpcGJvYXJkRm9yKENsaXBib2FyZCBjbGlwYm9hcmQpIHsKKworICAgICAgICBpZiAoY2xpcGJvYXJkID09IFNZU1RFTSAmJiBTWVNURU0gIT0gbnVsbCkgeworICAgICAgICAgICAgc3luY2hyb25pemVkKFNZU1RFTSkgeworICAgICAgICAgICAgICAgIGlmIChmZ1N5c3RlbUNsaXBib2FyZCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGZnU3lzdGVtQ2xpcGJvYXJkID0gbmV3IFN0eWxlZFRleHRDbGlwYm9hcmQoU1lTVEVNLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmdTeXN0ZW1DbGlwYm9hcmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFN0eWxlZFRleHRDbGlwYm9hcmQoY2xpcGJvYXJkLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIENsaXBib2FyZCBmQ2xpcGJvYXJkOworICAgIHByaXZhdGUgYm9vbGVhbiBmVXNlTG9jYWxDb250ZW50czsKKyAgICBwcml2YXRlIFRyYW5zZmVyYWJsZSBmQ29udGVudHMgPSBudWxsOworCisgICAgcHJpdmF0ZSBTdHlsZWRUZXh0Q2xpcGJvYXJkKENsaXBib2FyZCBjbGlwYm9hcmQsIGJvb2xlYW4gdXNlTG9jYWxDb250ZW50cykgeworCisgICAgICAgIGlmIChjbGlwYm9hcmQgPT0gbnVsbCkgeworICAgICAgICAgICAgZkNsaXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoIlRleHRQYW5lbCBjbGlwYm9hcmQiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZDbGlwYm9hcmQgPSBjbGlwYm9hcmQ7CisgICAgICAgIH0KKworICAgICAgICBmVXNlTG9jYWxDb250ZW50cyA9IHVzZUxvY2FsQ29udGVudHM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbG9zdE93bmVyc2hpcChDbGlwYm9hcmQgY2xpcGJvYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJhYmxlIGNvbnRlbnRzKSB7CisgICAgICAgIGlmIChjb250ZW50cyA9PSBmQ29udGVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuZkNvbnRlbnRzID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnRzKE1Db25zdFRleHQgbmV3Q29udGVudHMpIHsKKworICAgICAgICBUcmFuc2ZlcmFibGVUZXh0IGNvbnRlbnRzID0gbmV3IFRyYW5zZmVyYWJsZVRleHQobmV3Q29udGVudHMpOworICAgICAgICBpZiAoZkNsaXBib2FyZCA9PSBTWVNURU0pIHsKKyAgICAgICAgICAgIGZDb250ZW50cyA9IGNvbnRlbnRzOworICAgICAgICB9CisgICAgICAgIGZDbGlwYm9hcmQuc2V0Q29udGVudHMoY29udGVudHMsIHRoaXMpOworICAgIH0KKworICAgIHByaXZhdGUgVHJhbnNmZXJhYmxlIGdldENsaXBib2FyZENvbnRlbnRzKCkgeworCisgICAgICAgIGlmIChmVXNlTG9jYWxDb250ZW50cyAmJiBmQ29udGVudHMgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZDb250ZW50czsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmQ2xpcGJvYXJkLmdldENvbnRlbnRzKHRoaXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEhhcyBjb250ZW50cyAtIGZhc3RlciB0aGFuIGdldENvbnRlbnRzIGZvciBmaW5kaW5nIG91dCB3aGV0aGVyIHRoZQorICAgICAqIGNsaXBib2FyZCBoYXMgdGV4dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNDb250ZW50cygpIHsKKworICAgICAgICBUcmFuc2ZlcmFibGUgY29udGVudHMgPSBnZXRDbGlwYm9hcmRDb250ZW50cygpOworCisgICAgICAgIGlmIChjb250ZW50cyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY29udGVudHMuaXNEYXRhRmxhdm9yU3VwcG9ydGVkKE1Db25zdFRleHQuc3R5bGVkVGV4dEZsYXZvcikgfHwKKyAgICAgICAgICAgICAgIGNvbnRlbnRzLmlzRGF0YUZsYXZvclN1cHBvcnRlZChEYXRhRmxhdm9yLnN0cmluZ0ZsYXZvcikgfHwKKyAgICAgICAgICAgICAgIGNvbnRlbnRzLmlzRGF0YUZsYXZvclN1cHBvcnRlZChEYXRhRmxhdm9yLnBsYWluVGV4dEZsYXZvcik7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0U3RyaW5nKElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIFN0cmluZyB2YWx1ZSA9IG5ldyBTdHJpbmcoKTsKKyAgICAgICAgaW50IGJ5dGVzUmVhZDsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBieXRlIGluQnl0ZXNbXSA9IG5ldyBieXRlW2luU3RyZWFtLmF2YWlsYWJsZSgpXTsKKyAgICAgICAgICAgIGJ5dGVzUmVhZCA9IGluU3RyZWFtLnJlYWQoaW5CeXRlcyk7CisKKyAgICAgICAgICAgIGlmIChieXRlc1JlYWQgIT0gLTEpCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIG5ldyBTdHJpbmcoaW5CeXRlcyk7CisKKyAgICAgICAgfSB3aGlsZSAoYnl0ZXNSZWFkICE9IC0xKTsKKworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgdGhlIENsaXBib2FyZCBoYXMgdGV4dCBjb250ZW50LCByZXR1cm4gaXQgYXMgYW4KKyAgICAgKiBNQ29uc3RUZXh0LiAgT3RoZXJ3aXNlIHJldHVybiBudWxsLgorICAgICAqIEBwYXJhbSBkZWZhdWx0U3R5bGUgdGhlIHN0eWxlIHRvIGFwcGx5IHRvIHVuc3R5bGVkCisgICAgICogICAgICB0ZXh0IChzdWNoIGFzIGEgU3RyaW5nKS4gIElmIHRoZSBjbGlwYm9hcmQKKyAgICAgKiAgICAgIGhhcyBzdHlsZWQgdGV4dCB0aGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgTUNvbnN0VGV4dCBnZXRDb250ZW50cyhBdHRyaWJ1dGVNYXAgZGVmYXVsdFN0eWxlKSB7CisKKyAgICAgICAgVHJhbnNmZXJhYmxlIGNvbnRlbnRzID0gZ2V0Q2xpcGJvYXJkQ29udGVudHMoKTsKKworICAgICAgICBpZiAoY29udGVudHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBEYXRhRmxhdm9yIGZsYXZvcnNbXSA9IGNvbnRlbnRzLmdldFRyYW5zZmVyRGF0YUZsYXZvcnMoKTsKKworICAgICAgICAvLyBzZWFyY2ggZmxhdm9ycyBmb3Igb3VyIGZsYXZvciwgU3RyaW5nIGZsYXZvciBhbmQgcmF3IHRleHQgZmxhdm9yCisKKyAgICAgICAgRXhjZXB0aW9uIGV4ID0gbnVsbDsKKworICAgICAgICB0cnkgeworICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBmbGF2b3JzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGZsYXZvcnNbaV0uZXF1YWxzKE1Db25zdFRleHQuc3R5bGVkVGV4dEZsYXZvcikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaSA8IGZsYXZvcnMubGVuZ3RoKSB7CisKKyAgICAgICAgICAgICAgICBPYmplY3QgZGF0YSA9IGNvbnRlbnRzLmdldFRyYW5zZmVyRGF0YShNQ29uc3RUZXh0LnN0eWxlZFRleHRGbGF2b3IpOworICAgICAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YSBpcyBudWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybiAoTUNvbnN0VGV4dCkgZGF0YTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBmbGF2b3JzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGZsYXZvcnNbaV0uZXF1YWxzKERhdGFGbGF2b3Iuc3RyaW5nRmxhdm9yKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpIDwgZmxhdm9ycy5sZW5ndGgpIHsKKworICAgICAgICAgICAgICAgIE9iamVjdCBkYXRhID0gY29udGVudHMuZ2V0VHJhbnNmZXJEYXRhKERhdGFGbGF2b3Iuc3RyaW5nRmxhdm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0eWxlZFRleHQoKFN0cmluZykgZGF0YSwgZGVmYXVsdFN0eWxlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBmbGF2b3JzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGZsYXZvcnNbaV0uZXF1YWxzKERhdGFGbGF2b3IucGxhaW5UZXh0Rmxhdm9yKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpIDwgZmxhdm9ycy5sZW5ndGgpIHsKKworICAgICAgICAgICAgICAgIE9iamVjdCBkYXRhID0gY29udGVudHMuZ2V0VHJhbnNmZXJEYXRhKERhdGFGbGF2b3IucGxhaW5UZXh0Rmxhdm9yKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0U3RyaW5nID0gZ2V0U3RyaW5nKChJbnB1dFN0cmVhbSkgZGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHlsZWRUZXh0KHRleHRTdHJpbmcsIGRlZmF1bHRTdHlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goVW5zdXBwb3J0ZWRGbGF2b3JFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZXggPSBlOworICAgICAgICB9CisgICAgICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGV4ID0gZTsKKyAgICAgICAgfQorCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIHdoZW4gcmV0cmlldmluZyBkYXRhLiAgRXhjZXB0aW9uOiIgKyBleCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0Q2hhbmdlQ29tbWFuZC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRDaGFuZ2VDb21tYW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGY4YmFiNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0Q2hhbmdlQ29tbWFuZC5qYXZhCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRleHRDaGFuZ2VDb21tYW5kLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTVRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0LlRleHRPZmZzZXQ7CisKK2NsYXNzIFRleHRDaGFuZ2VDb21tYW5kIGV4dGVuZHMgVGV4dENvbW1hbmQgeworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBNQ29uc3RUZXh0IGZOZXdUZXh0OworICAgIHByaXZhdGUgVGV4dE9mZnNldCBmU2VsU3RhcnRBZnRlcjsKKyAgICBwcml2YXRlIFRleHRPZmZzZXQgZlNlbEVuZEFmdGVyOworCisgICAgcHVibGljIFRleHRDaGFuZ2VDb21tYW5kKFRleHRFZGl0QmVoYXZpb3IgYmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UZXh0IG9yaWdpbmFsVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNvbnN0VGV4dCBuZXdUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWZmZWN0ZWRSYW5nZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHNlbFN0YXJ0QmVmb3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHNlbEVuZEJlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdGFydEFmdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHNlbEVuZEFmdGVyKSB7CisgICAgICAgIHN1cGVyKGJlaGF2aW9yLCBvcmlnaW5hbFRleHQsIGFmZmVjdGVkUmFuZ2VTdGFydCwgc2VsU3RhcnRCZWZvcmUsIHNlbEVuZEJlZm9yZSk7CisgICAgICAgIGZOZXdUZXh0ID0gbmV3VGV4dDsKKyAgICAgICAgZlNlbFN0YXJ0QWZ0ZXIgPSBuZXcgVGV4dE9mZnNldCgpOworICAgICAgICBmU2VsU3RhcnRBZnRlci5hc3NpZ24oc2VsU3RhcnRBZnRlcik7CisgICAgICAgIGZTZWxFbmRBZnRlciA9IG5ldyBUZXh0T2Zmc2V0KCk7CisgICAgICAgIGZTZWxFbmRBZnRlci5hc3NpZ24oc2VsRW5kQWZ0ZXIpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgYWZmZWN0ZWRSYW5nZUVuZCgpIHsKKyAgICAgICAgaWYgKGZOZXdUZXh0ID09IG51bGwpCisgICAgICAgICAgICByZXR1cm4gZkFmZmVjdGVkUmFuZ2VTdGFydDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZBZmZlY3RlZFJhbmdlU3RhcnQgKyBmTmV3VGV4dC5sZW5ndGgoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgeworICAgICAgICBmQmVoYXZpb3IuZG9SZXBsYWNlVGV4dChmQWZmZWN0ZWRSYW5nZVN0YXJ0LCBmQWZmZWN0ZWRSYW5nZVN0YXJ0ICsgZk9yaWdpbmFsVGV4dC5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTmV3VGV4dCwgZlNlbFN0YXJ0QWZ0ZXIsIGZTZWxFbmRBZnRlcik7CisgICAgfQorCisgICAgcHVibGljIGludCBhZmZlY3RlZFJhbmdlU3RhcnQoKSB7CisgICAgICAgIHJldHVybiBmQWZmZWN0ZWRSYW5nZVN0YXJ0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE5ld1RleHQoTUNvbnN0VGV4dCBuZXdUZXh0KSB7CisgICAgICAgIGZOZXdUZXh0ID0gbmV3VGV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRTZWxSYW5nZUFmdGVyKFRleHRPZmZzZXQgc3RhcnQsIFRleHRPZmZzZXQgZW5kKSB7CisgICAgICAgIGlmIChmU2VsU3RhcnRBZnRlciA9PSBudWxsKQorICAgICAgICAgICAgZlNlbFN0YXJ0QWZ0ZXIgPSBuZXcgVGV4dE9mZnNldCgpOworICAgICAgICBpZiAoZlNlbEVuZEFmdGVyID09IG51bGwpCisgICAgICAgICAgICBmU2VsRW5kQWZ0ZXIgPSBuZXcgVGV4dE9mZnNldCgpOworICAgICAgICBmU2VsU3RhcnRBZnRlci5hc3NpZ24oc3RhcnQpOworICAgICAgICBmU2VsRW5kQWZ0ZXIuYXNzaWduKGVuZCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcHJlcGVuZFRvT2xkVGV4dChNQ29uc3RUZXh0IG5ld1RleHQpIHsKKyAgICAgICAgZk9yaWdpbmFsVGV4dC5pbnNlcnQoMCwgbmV3VGV4dCk7CisgICAgICAgIGZBZmZlY3RlZFJhbmdlU3RhcnQgLT0gbmV3VGV4dC5sZW5ndGgoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhcHBlbmRUb09sZFRleHQoTUNvbnN0VGV4dCBuZXdUZXh0KSB7CisgICAgICAgIGZPcmlnaW5hbFRleHQuYXBwZW5kKG5ld1RleHQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0Q29tbWFuZC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRDb21tYW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGE1YzU3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0Q29tbWFuZC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRleHRDb21tYW5kLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTVRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0LlRleHRPZmZzZXQ7CisKK2Fic3RyYWN0IGNsYXNzIFRleHRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcm90ZWN0ZWQgVGV4dEVkaXRCZWhhdmlvciBmQmVoYXZpb3I7CisgICAgcHJvdGVjdGVkIE1UZXh0IGZPcmlnaW5hbFRleHQ7CisgICAgcHJvdGVjdGVkIGludCBmQWZmZWN0ZWRSYW5nZVN0YXJ0OworICAgIHByb3RlY3RlZCBUZXh0T2Zmc2V0IGZTZWxTdGFydEJlZm9yZTsKKyAgICBwcm90ZWN0ZWQgVGV4dE9mZnNldCBmU2VsRW5kQmVmb3JlOworCisgICAgcHVibGljIFRleHRDb21tYW5kKFRleHRFZGl0QmVoYXZpb3IgYmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgIE1UZXh0IG9yaWdpbmFsVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGFmZmVjdGVkUmFuZ2VTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdGFydEJlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxFbmRCZWZvcmUpIHsKKworICAgICAgICBmQmVoYXZpb3IgPSBiZWhhdmlvcjsKKyAgICAgICAgZk9yaWdpbmFsVGV4dCA9IG9yaWdpbmFsVGV4dDsKKyAgICAgICAgZkFmZmVjdGVkUmFuZ2VTdGFydCA9IGFmZmVjdGVkUmFuZ2VTdGFydDsKKyAgICAgICAgZlNlbFN0YXJ0QmVmb3JlID0gbmV3IFRleHRPZmZzZXQoKTsKKyAgICAgICAgZlNlbFN0YXJ0QmVmb3JlLmFzc2lnbihzZWxTdGFydEJlZm9yZSk7CisgICAgICAgIGZTZWxFbmRCZWZvcmUgPSBuZXcgVGV4dE9mZnNldCgpOworICAgICAgICBmU2VsRW5kQmVmb3JlLmFzc2lnbihzZWxFbmRCZWZvcmUpOworICAgIH0KKworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgYWZmZWN0ZWRSYW5nZUVuZCgpOworCisgICAgcHVibGljIHZvaWQgdW5kbygpIHsKKyAgICAgICAgZkJlaGF2aW9yLmRvUmVwbGFjZVRleHQoZkFmZmVjdGVkUmFuZ2VTdGFydCwgYWZmZWN0ZWRSYW5nZUVuZCgpLCBmT3JpZ2luYWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZTZWxTdGFydEJlZm9yZSwgZlNlbEVuZEJlZm9yZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRDb21wb25lbnQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0Q29tcG9uZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmJjM2I5MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0Q29tcG9uZW50LmphdmEKQEAgLTAsMCArMSw5ODIgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRleHRDb21wb25lbnQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjUgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0NyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGphdmEuYXd0LkNvbG9yOworaW1wb3J0IGphdmEuYXd0LkNvbXBvbmVudDsKK2ltcG9ydCBqYXZhLmF3dC5EaW1lbnNpb247CitpbXBvcnQgamF2YS5hd3QuR3JhcGhpY3M7CitpbXBvcnQgamF2YS5hd3QuSW1hZ2U7CitpbXBvcnQgamF2YS5hd3QuUG9pbnQ7CitpbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQ29tcG9uZW50QWRhcHRlcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5Gb2N1c0xpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LktleUxpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lk1vdXNlTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuTW91c2VNb3Rpb25MaXN0ZW5lcjsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkNvbXBvbmVudEV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkZvY3VzRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuS2V5RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuTW91c2VFdmVudDsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NVGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRmb3JtYXQuVGV4dE9mZnNldDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdC5NRm9ybWF0dGVyOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCitjbGFzcyBUZXh0Q29tcG9uZW50IGV4dGVuZHMgRmFrZUNvbXBvbmVudAorICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRzIEJlaGF2aW9yT3duZXIsCisgICAgICAgICAgICAgICAgICAgIEZvY3VzTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgIEtleUxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICBNb3VzZUxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICBNb3VzZU1vdGlvbkxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICBTY3JvbGxlci5DbGllbnQgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdJTkRPV19XSURUSCA9IC0xMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0lOU0VUID0gMTA7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDb2xvciBTVFJPTkdfQ0FSRVRfQ09MT1IgPSBDb2xvci5ibGFjazsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDb2xvciBXRUFLX0NBUkVUX0NPTE9SID0gQ29sb3IuZGFya0dyYXk7CisKKyAgICBwcml2YXRlIEJlaGF2aW9yIGZCZWhhdmlvcjsKKyAgICBwcml2YXRlIE1UZXh0IGZUZXh0OworICAgIHByaXZhdGUgU3R5bGVkVGV4dENsaXBib2FyZCBmQ2xpcGJvYXJkOworICAgIHByaXZhdGUgYm9vbGVhbiBmU2Nyb2xsczsKKyAgICBwcml2YXRlIFNjcm9sbGVyIGZTY3JvbGxlcjsKKworICAgIHByaXZhdGUgRG9jdW1lbnRWaWV3IGZEb2N1bWVudFZpZXcgPSBudWxsOworCisgICAgLy8gc2lnaCAtIGNhbid0IGNyZWF0ZSBEb2N1bWVudFZpZXcgdW50aWwgYWRkTm90aWZ5KCkgaXMgY2FsbGVkLgorICAgIC8vIFRoZXNlIHZhbHVlcyBob2xkIERvY3VtZW50VmlldyBjdG9yIGFyZ3MKKyAgICBwcml2YXRlIEF0dHJpYnV0ZU1hcCBmRGVmYXVsdFZhbHVlczsKKyAgICBwcml2YXRlIGJvb2xlYW4gZlZpZXdXcmFwczsKKyAgICBwcml2YXRlIGludCBmVmlld1dyYXBXaWR0aDsKKyAgICBwcml2YXRlIGludCBmVmlld0luc2V0QW1vdW50OworICAgIAorICAgIHByaXZhdGUgUGFuZWxFdmVudEJyb2FkY2FzdGVyIGZMaXN0ZW5lcjsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBUZXh0Q29tcG9uZW50LgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IG1vZGVsLiAgVGhpcyBtb2RlbCB3aWxsIGJlIHVzZWQgZm9yCisgICAgICogdGhlIGxpZmUgb2YgdGhlIGNvbXBvbmVudCwgZXZlbiBpZiBzZXRUZXh0IGlzIGNhbGxlZAorICAgICAqIEBwYXJhbSB3cmFwcyBpZiB0cnVlLCB0aGUgdGV4dCBpcyB3cmFwcGVkIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgKiB3cmFwcGluZyB3aWR0aC4gIElmIGZhbHNlLCB0aGUgdGV4dCB3cmFwcyBvbmx5IGF0IHBhcmFncmFwaCBicmVha3MuCisgICAgICogQHBhcmFtIHdyYXBXaWR0aCBpZ25vcmVkIGlmIHdyYXBzIGlzIGZhbHNlLiAgVGV4dCB3cmFwcyB0byB0aGlzIHdpZHRoCisgICAgICogdW5sZXNzIHRoZSB3aWR0aCBpcyBXSU5ET1dfV0lEVEgsIGluIHdoaWNoIGNhc2UgdGV4dCB3cmFwcyB0byB3aWR0aAorICAgICAqIG9mIHRoaXMgY29tcG9uZW50LiBTaG91bGQgbm90IGJlIG5lZ2F0aXZlICh1bmxlc3MgaXQgaXMgV0lORE9XX1dJRFRIKS4KKyAgICAgKiBAcGFyYW0gaW5zZXRBbW91bnQgdGhlIHNpemUgb2YgdGhlIG1hcmdpbnMgYXJvdW5kIHRoZSB0ZXh0CisgICAgICogQHBhcmFtIGNsaXBib2FyZCB0aGUgY2xpcGJvYXJkIHRvIHVzZSBmb3IgY3V0L2NvcHkvcGFzdGUgb3BlcmF0aW9ucy4KKyAgICAgKiBJZiBudWxsLCB0aGUgY29tcG9uZW50IHdpbGwgdXNlIGl0cyBvd24gY2xpcGJvYXJkLgorICAgICAqLworICAgIHB1YmxpYyBUZXh0Q29tcG9uZW50KE1UZXh0IHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIGRlZmF1bHRWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3cmFwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd3JhcFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnNldEFtb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZWRUZXh0Q2xpcGJvYXJkIGNsaXBib2FyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNjcm9sbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsZXIgc2Nyb2xsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUGFuZWxFdmVudEJyb2FkY2FzdGVyIGxpc3RlbmVyKSB7CisKKyAgICAgICAgZkJlaGF2aW9yID0gbnVsbDsKKworICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUZXh0IGlzIG51bGwuIik7CisgICAgICAgIH0KKworICAgICAgICBmVGV4dCA9IHRleHQ7CisgICAgICAgIGZEZWZhdWx0VmFsdWVzID0gZGVmYXVsdFZhbHVlczsKKyAgICAgICAgCisgICAgICAgIGlmIChjbGlwYm9hcmQgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2xpcGJvYXJkIGlzIG51bGwuIik7CisgICAgICAgIH0KKyAgICAgICAgZkNsaXBib2FyZCA9IGNsaXBib2FyZDsKKworICAgICAgICBmU2Nyb2xscyA9IHNjcm9sbHM7CisKKyAgICAgICAgZlNjcm9sbGVyID0gc2Nyb2xsZXI7CisKKyAgICAgICAgZkRvY3VtZW50VmlldyA9IG51bGw7CisKKyAgICAgICAgZlZpZXdXcmFwV2lkdGggPSB3cmFwV2lkdGg7CisgICAgICAgIGZWaWV3V3JhcHMgPSB3cmFwczsKKyAgICAgICAgZlZpZXdJbnNldEFtb3VudCA9IGluc2V0QW1vdW50OworICAgICAgICBmTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB9CisgICAgCisgICAgQXR0cmlidXRlTWFwIGdldERlZmF1bHRWYWx1ZXMoKSB7CisgICAgCisgICAgICAgIHJldHVybiBmRGVmYXVsdFZhbHVlczsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRIb3N0KENvbXBvbmVudCBjb21wb25lbnQpIHsKKyAgICAgICAgCisgICAgICAgIHN1cGVyLnNldEhvc3QoY29tcG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIGNvbXBvbmVudC5hZGRGb2N1c0xpc3RlbmVyKHRoaXMpOworICAgICAgICBjb21wb25lbnQuYWRkS2V5TGlzdGVuZXIodGhpcyk7CisgICAgICAgIGNvbXBvbmVudC5hZGRNb3VzZUxpc3RlbmVyKHRoaXMpOworICAgICAgICBjb21wb25lbnQuYWRkTW91c2VNb3Rpb25MaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGNvbXBvbmVudC5hZGRDb21wb25lbnRMaXN0ZW5lcihuZXcgQ29tcG9uZW50QWRhcHRlcigpIHsgICAgICAgIAorICAgICAgICAgICAgcHVibGljIHZvaWQgY29tcG9uZW50UmVzaXplZChDb21wb25lbnRFdmVudCBlKSB7CisgICAgICAgICAgICAgICAgaWYgKGZEb2N1bWVudFZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBmRG9jdW1lbnRWaWV3Lmhvc3RTaXplQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1Nob3coZkRvY3VtZW50Vmlldy5nZXREb2N1bWVudEJvdW5kcygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBVGV4dFBhbmVsSW1wbCdzIHVzZSBvbmx5IQorICAgICAqLworICAgIENvbXBvbmVudCBnZXRIb3N0KCkgeworICAgIAorICAgICAgICByZXR1cm4gZkhvc3Q7CisgICAgfQorICAgIAorICAgIC8vIENyZWF0ZSBkb2N1bWVudCB2aWV3IGhlcmUuICBUZXh0Q29tcG9uZW50IGlzbid0IGZ1bGx5IGNvbnN0cnVjdGVkCisgICAgLy8gdW50aWwgdGhpcyBpcyBjYWxsZWQuCisgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBieSBob3N0IGNvbXBvbmVudCEKKyAgICB2b2lkIGFkZE5vdGlmeSgpIHsKKworICAgICAgICBHcmFwaGljcyBnID0gZ2V0R3JhcGhpY3MoKTsKKyAgICAgICAgaWYgKGcgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJHcmFwaGljcyBzaG91bGQgYmUgdmFsaWQgaGVyZSBidXQgaXNuJ3QuIik7CisgICAgICAgIH0KKworICAgICAgICBmRG9jdW1lbnRWaWV3ID0gbmV3IERvY3VtZW50Vmlldyh0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkRlZmF1bHRWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZWaWV3V3JhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZWaWV3V3JhcFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmVmlld0luc2V0QW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTGlzdGVuZXIpOworICAgICAgICBkb2N1bWVudFNpemVDaGFuZ2VkKCk7CisgICAgICAgIGZMaXN0ZW5lci50ZXh0U3RhdGVDaGFuZ2VkKFRleHRQYW5lbEV2ZW50LkZPUk1BVF9XSURUSF9DSEFOR0VEKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIFJlY3RhbmdsZSBnZXRCb3VuZHMoKSB7CisgICAgICAgIAorICAgICAgICBpZiAoZkhvc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZIb3N0LmdldEJvdW5kcygpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgR3JhcGhpY3MgZ2V0R3JhcGhpY3MoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gKGZIb3N0PT1udWxsKT8gbnVsbCA6IGZIb3N0LmdldEdyYXBoaWNzKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVxdWVzdEZvY3VzKCkgeworICAgICAgICAKKyAgICAgICAgaWYgKGZIb3N0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZIb3N0LnJlcXVlc3RGb2N1cygpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gKioqIEJlaGF2aW9yIG1hbmFnZW1lbnQgKioqCisgICAgcHVibGljIEJlaGF2aW9yIGdldEJlaGF2aW9yKCkgeworICAgICAgICByZXR1cm4gZkJlaGF2aW9yOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEJlaGF2aW9yKEJlaGF2aW9yIGIpIHsKKyAgICAgICAgZkJlaGF2aW9yID0gYjsKKyAgICB9CisKKworICAgIC8vICoqKiBFdmVudHMgLSBqdXN0IGZvcndhcmQgdG8gYmVoYXZpb3IgKioqCisgICAgcHVibGljIHZvaWQgZm9jdXNHYWluZWQoRm9jdXNFdmVudCBldmVudCkgeworICAgICAgICBpZiAoZkJlaGF2aW9yICE9IG51bGwpCisgICAgICAgICAgICBmQmVoYXZpb3IuZm9jdXNHYWluZWQoZXZlbnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvY3VzTG9zdChGb2N1c0V2ZW50IGV2ZW50KSB7CisgICAgICAgIGlmIChmQmVoYXZpb3IgIT0gbnVsbCkKKyAgICAgICAgICAgIGZCZWhhdmlvci5mb2N1c0xvc3QoZXZlbnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGtleVByZXNzZWQoS2V5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgaWYgKGZCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgZkJlaGF2aW9yLmtleVByZXNzZWQoZXZlbnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGtleVR5cGVkKEtleUV2ZW50IGV2ZW50KSB7CisKKyAgICAgICAgaWYgKGZCZWhhdmlvciAhPSBudWxsKSB7CisgICAgICAgICAgICBmQmVoYXZpb3Iua2V5VHlwZWQoZXZlbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQga2V5UmVsZWFzZWQoS2V5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgaWYgKGZCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgZkJlaGF2aW9yLmtleVJlbGVhc2VkKGV2ZW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtb3VzZUNsaWNrZWQoTW91c2VFdmVudCBldmVudCkgeworICAgICAgICByZXR1cm47ICAvLyBubyBiZWhhdmlvciBtZXRob2QgZm9yIHRoaXMKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtb3VzZURyYWdnZWQoTW91c2VFdmVudCBldmVudCkgeworICAgICAgICBpZiAoZkJlaGF2aW9yICE9IG51bGwpCisgICAgICAgICAgICBmQmVoYXZpb3IubW91c2VEcmFnZ2VkKGV2ZW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtb3VzZUVudGVyZWQoTW91c2VFdmVudCBldmVudCkgIHsKKyAgICAgICAgaWYgKGZCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgZkJlaGF2aW9yLm1vdXNlRW50ZXJlZChldmVudCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbW91c2VFeGl0ZWQoTW91c2VFdmVudCBldmVudCkgIHsKKyAgICAgICAgaWYgKGZCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgZkJlaGF2aW9yLm1vdXNlRXhpdGVkKGV2ZW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtb3VzZU1vdmVkKE1vdXNlRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgaWYgKGZCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgZkJlaGF2aW9yLm1vdXNlTW92ZWQoZXZlbnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG1vdXNlUHJlc3NlZChNb3VzZUV2ZW50IGV2ZW50KSB7CisgICAgICAgIGlmIChmQmVoYXZpb3IgIT0gbnVsbCkKKyAgICAgICAgICAgIGZCZWhhdmlvci5tb3VzZVByZXNzZWQoZXZlbnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG1vdXNlUmVsZWFzZWQoTW91c2VFdmVudCBldmVudCkgIHsKKyAgICAgICAgaWYgKGZCZWhhdmlvciAhPSBudWxsKQorICAgICAgICAgICAgZkJlaGF2aW9yLm1vdXNlUmVsZWFzZWQoZXZlbnQpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHRleHRDb250cm9sRXZlbnRPY2N1cnJlZChCZWhhdmlvci5FdmVudFR5cGUgZXZlbnQsIE9iamVjdCB3aGF0KSB7CisKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVkID0gZmFsc2U7CisKKyAgICAgICAgaWYgKGZCZWhhdmlvciAhPSBudWxsKSB7CisgICAgICAgICAgICBoYW5kbGVkID0gZkJlaGF2aW9yLnRleHRDb250cm9sRXZlbnRPY2N1cnJlZChldmVudCwgd2hhdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhbmRsZWQ7CisgICAgfQorCisKKyAgICAvLyAqKiogU2Nyb2xsIG1ldGhvZHMgLSBjYWxsZWQgYnkgQmVoYXZpb3JzCisKKyAgICAvLyB2aWV3U3RhcnQsIHZpZXdMaW1pdCBpcyB2aXNpYmxlIGJvdW5kcyBvZiB3aW5kb3cKKyAgICAvLyB0YXJnZXRTdGFydCwgdGFyZ2V0TGltaXQgaXMgdGhlIHJlZ2lvbiB0byBzY3JvbGwgaW50byB2aWV3CisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFNjcm9sbERpZmZlcmVuY2UoaW50IHZpZXdTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmlld0xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXRTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0TGltaXQpIHsKKworICAgICAgICBpZiAodmlld1N0YXJ0IDw9IHRhcmdldFN0YXJ0KSB7CisgICAgICAgICAgICBpZiAodmlld0xpbWl0ID49IHRhcmdldExpbWl0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodmlld1N0YXJ0LXRhcmdldFN0YXJ0LCB2aWV3TGltaXQtdGFyZ2V0TGltaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpZXdMaW1pdCA+IHRhcmdldExpbWl0KSB7CisKKyAgICAgICAgICAgIHJldHVybiB2aWV3TGltaXQgLSB0YXJnZXRMaW1pdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzY3JvbGxUb1Nob3coUmVjdGFuZ2xlIHNob3dSZWN0KSB7CisKKyAgICAgICAgaWYgKGZEb2N1bWVudFZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgUmVjdGFuZ2xlIGJvdW5kcyA9IGdldEJvdW5kcygpOworCisgICAgICAgICAgICBpbnQgZHggPSBnZXRTY3JvbGxEaWZmZXJlbmNlKHNob3dSZWN0LngsIHNob3dSZWN0LnggKyBzaG93UmVjdC53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLngsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoKTsKKyAgICAgICAgICAgIGludCBkeSA9IGdldFNjcm9sbERpZmZlcmVuY2Uoc2hvd1JlY3QueSwgc2hvd1JlY3QueSArIHNob3dSZWN0LmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnksIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7CisKKyAgICAgICAgICAgIHNjcm9sbFNlbGYoZHgsIGR5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2Nyb2xsVG9TaG93KGludCBzaG93WCwgaW50IHNob3dZKSB7CisKKyAgICAgICAgaWYgKGZEb2N1bWVudFZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgaW50IGR4ID0gMCwgZHkgPSAwOworCisgICAgICAgICAgICBSZWN0YW5nbGUgYm91bmRzID0gZ2V0Qm91bmRzKCk7CisgICAgICAgICAgICBpZiAoc2hvd1ggPCBib3VuZHMueCkgeworICAgICAgICAgICAgICAgIGR4ID0gc2hvd1ggLSBib3VuZHMueDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3dYID4gYm91bmRzLnggKyBib3VuZHMud2lkdGgpIHsKKyAgICAgICAgICAgICAgICBkeCA9IHNob3dYIC0gKGJvdW5kcy54ICsgYm91bmRzLndpZHRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNob3dZIDwgYm91bmRzLnkpIHsKKyAgICAgICAgICAgICAgICBkeSA9IHNob3dZIC0gYm91bmRzLnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzaG93WSA+IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCkgeworICAgICAgICAgICAgICAgIGR5ID0gc2hvd1kgLSAoYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2Nyb2xsU2VsZihkeCwgZHkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgcGluU2Nyb2xsT2Zmc2V0KGludCBkZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRlbnRTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRlbnRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2aWV3U3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2aWV3TGVuZ3RoKSB7CisKKyAgICAgICAgaWYgKGRlbHRhID4gMCkgeworICAgICAgICAgICAgaW50IHZpZXdMaW1pdCA9IHZpZXdTdGFydCArIHZpZXdMZW5ndGg7CisgICAgICAgICAgICBpbnQgY29udGVudExpbWl0ID0gY29udGVudFN0YXJ0ICsgY29udGVudExlbmd0aDsKKworICAgICAgICAgICAgaWYgKHZpZXdMaW1pdCArIGRlbHRhID4gY29udGVudExpbWl0KSB7CisgICAgICAgICAgICAgICAgZGVsdGEgPSBNYXRoLm1heCgwLCBjb250ZW50TGltaXQtdmlld0xpbWl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh2aWV3U3RhcnQgKyBkZWx0YSA8IGNvbnRlbnRTdGFydCkgeworICAgICAgICAgICAgICAgIGRlbHRhID0gTWF0aC5taW4oMCwgY29udGVudFN0YXJ0LXZpZXdTdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsdGE7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNjcm9sbFNlbGYoaW50IGR4LCBpbnQgZHkpIHsKKworICAgICAgICBib29sZWFuIHNjcm9sbGVkID0gc2Nyb2xsQnkoZHgsIGR5KTsKKworICAgICAgICBpZiAoc2Nyb2xsZWQgJiYgZlNjcm9sbGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIFJlY3RhbmdsZSBkb2N1bWVudEJvdW5kcyA9IGZEb2N1bWVudFZpZXcuZ2V0RG9jdW1lbnRCb3VuZHMoKTsKKyAgICAgICAgICAgIGZTY3JvbGxlci5zZXRQb3NpdGlvbigtZG9jdW1lbnRCb3VuZHMueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZG9jdW1lbnRCb3VuZHMueSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCBib29sZWFuIHNjcm9sbEJ5KGludCBkeCwgaW50IGR5KSB7CisKKyAgICAgICAgYm9vbGVhbiBzY3JvbGxlZCA9IGZhbHNlOworCisgICAgICAgIGlmIChmU2Nyb2xscykgeworICAgICAgICAgICAgUmVjdGFuZ2xlIGRvY3VtZW50Qm91bmRzID0gZkRvY3VtZW50Vmlldy5nZXREb2N1bWVudEJvdW5kcygpOworICAgICAgICAgICAgUmVjdGFuZ2xlIHZpZXdCb3VuZHMgPSBnZXRCb3VuZHMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gdmFyaWFibGUgbm90IHVzZWQgaW50IG9sZER4ID0gZHg7CisgICAgICAgICAgICBkeCA9IHBpblNjcm9sbE9mZnNldChkeCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEJvdW5kcy54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRCb3VuZHMud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm91bmRzLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm91bmRzLndpZHRoKTsKKyAgICAgICAgICAgIGR5ID0gcGluU2Nyb2xsT2Zmc2V0KGR5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Qm91bmRzLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEJvdW5kcy5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm91bmRzLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm91bmRzLmhlaWdodCk7CisKKyAgICAgICAgICAgIGlmIChkeCAhPSAwIHx8IGR5ICE9IDApIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZkRvY3VtZW50Vmlldy5tb3ZlQnkoLWR4LCAtZHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjcm9sbGVkOworICAgIH0KKworICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIFNjcm9sbGVyLkNsaWVudCAtIGNhbGxlZCBieSBTY3JvbGxlcgorICAgIC8vIHRoZXkgaGF2ZSB0byBiZSBwdWJsaWMgc2luY2UgdGhleSdyZSBpbiBhbiBpbnRlcmZhY2UKKyAgICAvLyBubyBvbmUgZWxzZSBzaG91bGQgY2FsbCB0aGVzZSBtZXRob2RzCisgICAgcHVibGljIFJlY3RhbmdsZSBnZXRTY3JvbGxTaXplKCkgeworCisgICAgICAgIGlmIChmRG9jdW1lbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmRG9jdW1lbnRWaWV3LmdldFNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNjcm9sbFRvKGludCB4LCBpbnQgeSkgeworCisgICAgICAgIGlmIChmRG9jdW1lbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNjcm9sbEJ5KHggKyBmRG9jdW1lbnRWaWV3LmdldERvY1goKSwgeSArIGZEb2N1bWVudFZpZXcuZ2V0RG9jWSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vICoqKiBUZXh0IGFjY2VzcyAqKioKKyAgICBNQ29uc3RUZXh0IGdldFRleHQoKSB7CisgICAgICAgIHJldHVybiBmVGV4dDsKKyAgICB9CisKKyAgICBNVGV4dCBnZXRNb2RpZmlhYmxlVGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIGZUZXh0OworICAgIH0KKworICAgIFN0eWxlZFRleHRDbGlwYm9hcmQgZ2V0Q2xpcGJvYXJkKCkgeworICAgICAgICByZXR1cm4gZkNsaXBib2FyZDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcGFpbnQoR3JhcGhpY3MgZykgeworCisgICAgICAgIGlmIChmRG9jdW1lbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZEb2N1bWVudFZpZXcucGFpbnQoZyk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8vICoqKiBNZXRyaWMgaW5mbyAtIHVzZWQgYnkgQmVoYXZpb3JzCisgICAgUmVjdGFuZ2xlIGdldENhcmV0UmVjdChUZXh0T2Zmc2V0IG9mZnNldCkgeworCisgICAgICAgIGlmIChmRG9jdW1lbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmRG9jdW1lbnRWaWV3LmdldENhcmV0UmVjdChvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUoMCwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXh0T2Zmc2V0IHBvaW50VG9UZXh0T2Zmc2V0KFRleHRPZmZzZXQgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgYW5jaG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpbmZpbml0ZU1vZGUpIHsKKworICAgICAgICBpZiAoZkRvY3VtZW50VmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZkRvY3VtZW50Vmlldy5wb2ludFRvVGV4dE9mZnNldChyZXN1bHQsIHgsIHksIGFuY2hvciwgaW5maW5pdGVNb2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dE9mZnNldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gKioqIE90aGVyIHN0dWZmIHVzZWQgYnkgQmVoYXZpb3JzIC0gbW9zdGx5IGZvcm1hdHRlciBleHBvcnRzCisgICAgaW50IGxpbmVDb250YWluaW5nKFRleHRPZmZzZXQgb2Zmc2V0KSB7CisKKyAgICAgICAgaWYgKGZEb2N1bWVudFZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZEb2N1bWVudFZpZXcubGluZUNvbnRhaW5pbmcob2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IGxpbmVSYW5nZUxvdyhpbnQgbGluZU51bWJlcikgeworCisgICAgICAgIGlmIChmRG9jdW1lbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmRG9jdW1lbnRWaWV3LmxpbmVSYW5nZUxvdyhsaW5lTnVtYmVyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IGxpbmVSYW5nZUxpbWl0KGludCBsaW5lTnVtYmVyKSB7CisKKyAgICAgICAgaWYgKGZEb2N1bWVudFZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZEb2N1bWVudFZpZXcubGluZVJhbmdlTGltaXQobGluZU51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc3RvcEJhY2tncm91bmRGb3JtYXR0aW5nKCkgeworCisgICAgICAgIGlmIChmRG9jdW1lbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZEb2N1bWVudFZpZXcuc3RvcEJhY2tncm91bmRGb3JtYXR0aW5nKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWN0YW5nbGUgZ2V0Qm91bmRpbmdSZWN0KFRleHRPZmZzZXQgb2Zmc2V0MSwgVGV4dE9mZnNldCBvZmZzZXQyKSB7CisKKyAgICAgICAgaWYgKGZEb2N1bWVudFZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZEb2N1bWVudFZpZXcuZ2V0Qm91bmRpbmdSZWN0KG9mZnNldDEsIG9mZnNldDIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCByZWZvcm1hdEFuZERyYXdUZXh0KGludCByZWZvcm1hdFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVmb3JtYXRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGUgYWRkaXRpb25hbFVwZGF0ZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGhpbGl0ZUNvbG9yKSB7CisKKyAgICAgICAgaWYgKGZEb2N1bWVudFZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgZkRvY3VtZW50Vmlldy5yZWZvcm1hdEFuZERyYXdUZXh0KHJlZm9ybWF0U3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmb3JtYXRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxVcGRhdGVSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbGl0ZUNvbG9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRleHRPZmZzZXQgZmluZE5ld0luc2VydGlvbk9mZnNldChUZXh0T2Zmc2V0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBpbml0aWFsT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHByZXZpb3VzT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBkaXJlY3Rpb24pIHsKKworICAgICAgICBpZiAoZkRvY3VtZW50VmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZkRvY3VtZW50Vmlldy5maW5kTmV3SW5zZXJ0aW9uT2Zmc2V0KHJlc3VsdCwgaW5pdGlhbE9mZnNldCwgcHJldmlvdXNPZmZzZXQsIGRpcmVjdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRPZmZzZXQoaW5pdGlhbE9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBkcmF3VGV4dChHcmFwaGljcyBnLAorICAgICAgICAgICAgICAgICAgUmVjdGFuZ2xlIGRhbWFnZWRSZWN0LAorICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZWxlY3Rpb25WaXNpYmxlLAorICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdGFydCwKKyAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsRW5kLAorICAgICAgICAgICAgICAgICAgQ29sb3IgaGlsaXRlQ29sb3IpIHsKKworICAgICAgICBpZiAoZkRvY3VtZW50VmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBmRG9jdW1lbnRWaWV3LmRyYXdUZXh0KGcsIGRhbWFnZWRSZWN0LCBzZWxlY3Rpb25WaXNpYmxlLCBzZWxTdGFydCwgc2VsRW5kLCBoaWxpdGVDb2xvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9jdW1lbnRTaXplQ2hhbmdlZCgpIHsKKworICAgICAgICBpZiAoZlNjcm9sbGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZTY3JvbGxlci5jbGllbnRTY3JvbGxTaXplQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IGdldEZvcm1hdFdpZHRoKCkgeworCisgICAgICAgIGlmIChmRG9jdW1lbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmRG9jdW1lbnRWaWV3LmdldEZvcm1hdFdpZHRoKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXJhZ3JhcGggYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBsZWZ0LXRvLXJpZ2h0LgorICAgICAqIEBwYXJhbSBvZmZzZXQgYW4gb2Zmc2V0IGluIHRoZSB0ZXh0CisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwYXJhZ3JhcGggYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBsZWZ0LXRvLXJpZ2h0CisgICAgICovCisgICAgYm9vbGVhbiBwYXJhZ3JhcGhJc0xlZnRUb1JpZ2h0KGludCBvZmZzZXQpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChmRG9jdW1lbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmRG9jdW1lbnRWaWV3LnBhcmFncmFwaElzTGVmdFRvUmlnaHQob2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIERvY3VtZW50VmlldyB7CisKKyAgICAgICAgcHJpdmF0ZSBUZXh0Q29tcG9uZW50IGZIb3N0OworICAgICAgICBwcml2YXRlIGJvb2xlYW4gZldyYXBzOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gZldyYXBUb1dpbmRvd1dpZHRoOworICAgICAgICBwcml2YXRlIGludCBmSW5zZXRBbW91bnQ7CisgICAgICAgIHByaXZhdGUgUGFuZWxFdmVudEJyb2FkY2FzdGVyIGZMaXN0ZW5lcjsKKworICAgICAgICAvLyBmQm91bmRzIGlzIHRoZSB0b3RhbCBzY3JvbGxhYmxlIGFyZWEgb2YgdGhlIGRvY3VtZW50IChpbmNsdWRpbmcgaW5zZXRzKQorICAgICAgICBwcml2YXRlIFJlY3RhbmdsZSBmQm91bmRzID0gbmV3IFJlY3RhbmdsZSgpOworICAgICAgICAKKyAgICAgICAgcHJpdmF0ZSBQb2ludCBmT3JpZ2luOworCisgICAgICAgIHByaXZhdGUgTUZvcm1hdHRlciBmRm9ybWF0dGVyOworCisgICAgICAgIHByaXZhdGUgT2Zmc2NyZWVuQnVmZmVyQ2FjaGUgZkJ1ZmZlckNhY2hlOworCisgICAgICAgIC8vIE5vdGUsIHdoZW4gdGhpcyBpcyB0cnVlIHRoZSBjYXJldCB3b24ndCBibGluayBpbiAxLjEuICBMb29rcyBsaWtlIGFuIEFXVCBidWcuCisgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZk5vT2Zmc2NyZWVuQnVmZmVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuLmdldEJvb2xlYW4oIlRleHRDb21wb25lbnQuTm9PZmZzY3JlZW5CdWZmZXIiKTsKKworICAgICAgICAvLyBBbW91bnQgYnkgd2hpY2ggdG8gcmVkdWNlIHRoZSBmb3JtYXQgd2lkdGggdG8gYWxsb3cgZm9yIHJpZ2h0LWFsaWduZWQgY2FyZXRzLgorICAgICAgICBwcml2YXRlIGZpbmFsIGludCBDQVJFVF9TTE9QID0gMTsKKworICAgICAgICBEb2N1bWVudFZpZXcoVGV4dENvbXBvbmVudCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTWFwIGRlZmF1bHRWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHdyYXBzLAorICAgICAgICAgICAgICAgICAgICAgaW50IHdyYXBXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBpbnNldEFtb3VudCwKKyAgICAgICAgICAgICAgICAgICAgIFBhbmVsRXZlbnRCcm9hZGNhc3RlciBsaXN0ZW5lcikgeworCisgICAgICAgICAgICBmSG9zdCA9IGhvc3Q7CisgICAgICAgICAgICBmV3JhcFRvV2luZG93V2lkdGggPSB3cmFwV2lkdGggPT0gV0lORE9XX1dJRFRIOworICAgICAgICAgICAgZkluc2V0QW1vdW50ID0gaW5zZXRBbW91bnQ7CisgICAgICAgICAgICBmTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKworICAgICAgICAgICAgaW5pdEZvcm1hdHRlckFuZFNpemUodGV4dCwgZGVmYXVsdFZhbHVlcywgd3JhcHMsIHdyYXBXaWR0aCk7CisKKyAgICAgICAgICAgIGZCdWZmZXJDYWNoZSA9IG5ldyBPZmZzY3JlZW5CdWZmZXJDYWNoZShob3N0LmZIb3N0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIE5vdGU6IHRoaXMgY29tcHV0ZXMgdGhlIGJvdW5kcyByZWN0YW5nbGUgcmVsYXRpdmUgdG8gZk9yaWdpbgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIGNhbGNCb3VuZHNSZWN0KCkgeworICAgICAgICAKKyAgICAgICAgICAgIGZpbmFsIGludCBpbnNldERpbSA9IDIgKiBmSW5zZXRBbW91bnQ7CisKKyAgICAgICAgICAgIGZpbmFsIGludCBtaW5YID0gZkZvcm1hdHRlci5taW5YKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgbWluWSA9IGZGb3JtYXR0ZXIubWluWSgpOworCisgICAgICAgICAgICBmQm91bmRzLnNldEJvdW5kcyhmT3JpZ2luLnggKyBtaW5YIC0gZkluc2V0QW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZk9yaWdpbi55ICsgbWluWSAtIGZJbnNldEFtb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZGb3JtYXR0ZXIubWF4WCgpIC0gbWluWCArIGluc2V0RGltLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZGb3JtYXR0ZXIubWF4WSgpIC0gbWluWSArIGluc2V0RGltKTsKKyAgICAgICAgICAgIC8vaWYgKG1pblggPD0gMCkgeworICAgICAgICAgICAgLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxjQm91bmRzUmVjdDogbWluWD0iK21pblgrCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIjsgYm91bmRzLng9IitmQm91bmRzLngrIjsgd2lkdGg9IitmQm91bmRzLndpZHRoKTsKKyAgICAgICAgICAgIC8vfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXRGb3JtYXR0ZXJBbmRTaXplKE1Db25zdFRleHQgdGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgZGVmYXVsdFZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gd3JhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd3JhcFdpZHRoKSB7CisKKyAgICAgICAgICAgIFJlY3RhbmdsZSBob3N0Qm91bmRzID0gZkhvc3QuZ2V0Qm91bmRzKCk7CisgICAgICAgICAgICBpbnQgZm9ybWF0V2lkdGg7CisKKyAgICAgICAgICAgIGlmICghd3JhcHMgfHwgZldyYXBUb1dpbmRvd1dpZHRoKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0V2lkdGggPSBob3N0Qm91bmRzLndpZHRoIC0gMiAqIGZJbnNldEFtb3VudDsKKyAgICAgICAgICAgICAgICBpZiAoZm9ybWF0V2lkdGggPD0gQ0FSRVRfU0xPUCkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXRXaWR0aCA9IENBUkVUX1NMT1ArMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRXaWR0aCA9IHdyYXBXaWR0aDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZkZvcm1hdHRlciA9IE1Gb3JtYXR0ZXIuY3JlYXRlRm9ybWF0dGVyKHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRXaWR0aC1DQVJFVF9TTE9QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZIb3N0LmdldEdyYXBoaWNzKCkpOworCisgICAgICAgICAgICBmRm9ybWF0dGVyLmZvcm1hdFRvSGVpZ2h0KGhvc3RCb3VuZHMuaGVpZ2h0ICogMik7CisgICAgICAgICAgICBmT3JpZ2luID0gbmV3IFBvaW50KGZJbnNldEFtb3VudCwgZkluc2V0QW1vdW50KTsKKyAgICAgICAgICAgIGNhbGNCb3VuZHNSZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBub3RpZmljYXRpb24gbWV0aG9kIGNhbGxlZCBieSBUZXh0Q29tcG9uZW50CisgICAgICAgIHZvaWQgaG9zdFNpemVDaGFuZ2VkKCkgeworCisgICAgICAgICAgICBmaW5hbCBib29sZWFuIHdyYXAgPSBmRm9ybWF0dGVyLndyYXAoKTsKKyAgICAgICAgICAgIGlmIChmV3JhcFRvV2luZG93V2lkdGggfHwgIXdyYXApIHsKKworICAgICAgICAgICAgICAgIFJlY3RhbmdsZSBob3N0Qm91bmRzID0gZkhvc3QuZ2V0Qm91bmRzKCk7CisgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgbm90IHVzZWQgZmluYWwgaW50IGluc2V0RGltID0gMiAqIGZJbnNldEFtb3VudDsKKworICAgICAgICAgICAgICAgIGludCBmb3JtYXRXaWR0aCA9IGhvc3RCb3VuZHMud2lkdGggLSAyKmZJbnNldEFtb3VudDsKKyAgICAgICAgICAgICAgICBpZiAoZm9ybWF0V2lkdGggPD0gQ0FSRVRfU0xPUCkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXRXaWR0aCA9IENBUkVUX1NMT1ArMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZkZvcm1hdHRlci5zZXRMaW5lQm91bmQoZm9ybWF0V2lkdGgtQ0FSRVRfU0xPUCk7CisKKyAgICAgICAgICAgICAgICBmRm9ybWF0dGVyLmZvcm1hdFRvSGVpZ2h0KGhvc3RCb3VuZHMueSArIChob3N0Qm91bmRzLmhlaWdodCoyKSAtIGZPcmlnaW4ueSk7CisKKyAgICAgICAgICAgICAgICBjYWxjQm91bmRzUmVjdCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJXaW5kb3cgYm91bmRzPSIraG9zdEJvdW5kcysiOyBkb2N1bWVudCBib3VuZHM9IitmQm91bmRzKTsKKworICAgICAgICAgICAgICAgIGZIb3N0LmRvY3VtZW50U2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICBmTGlzdGVuZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5GT1JNQVRfV0lEVEhfQ0hBTkdFRCk7CisgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImZvcm1hdFdpZHRoPSIrZm9ybWF0V2lkdGgpOworICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJkb2N1bWVudCBib3VuZHM9IitmQm91bmRzKTsKKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9kdW1wV2lkdGhJbmZvKCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZ2V0Rm9ybWF0V2lkdGgoKSB7CisKKyAgICAgICAgICAgIHJldHVybiBmRm9ybWF0dGVyLmxpbmVCb3VuZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sZWFuIHBhcmFncmFwaElzTGVmdFRvUmlnaHQoaW50IG9mZnNldCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IGZGb3JtYXR0ZXIubGluZUNvbnRhaW5pbmcob2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBmRm9ybWF0dGVyLmxpbmVJc0xlZnRUb1JpZ2h0KGxpbmVOdW1iZXIpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHRleHRTaXplTWlnaHRIYXZlQ2hhbmdlZCgpIHsKKworICAgICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW5zZXREaW0gPSAyICogZkluc2V0QW1vdW50OworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgdGV4dEhlaWdodCA9IGZGb3JtYXR0ZXIubWF4WSgpIC0gZkZvcm1hdHRlci5taW5ZKCkgKyBpbnNldERpbTsKKyAgICAgICAgICAgIGlmICh0ZXh0SGVpZ2h0ICE9IGZCb3VuZHMuaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgZkJvdW5kcy5oZWlnaHQgPSB0ZXh0SGVpZ2h0OworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWZGb3JtYXR0ZXIud3JhcCgpKSB7CisgICAgICAgICAgICAgICAgaW50IHRleHRXaWR0aCA9IGZGb3JtYXR0ZXIubWF4WCgpIC0gZkZvcm1hdHRlci5taW5YKCkgKyBpbnNldERpbTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dFdpZHRoICE9IGZCb3VuZHMud2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgZkJvdW5kcy53aWR0aCA9IHRleHRXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJUZXh0IHNpemUgY2hhbmdlZC4gIGZCb3VuZHM6ICIgKyBmQm91bmRzKTsKKyAgICAgICAgICAgICAgICBjYWxjQm91bmRzUmVjdCgpOworICAgICAgICAgICAgICAgIGZIb3N0LmRvY3VtZW50U2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICBmSG9zdC5zY3JvbGxUb1Nob3coZ2V0RG9jdW1lbnRCb3VuZHMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgZG9EcmF3VGV4dChHcmFwaGljcyBnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGUgZHJhd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2VsZWN0aW9uVmlzaWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxFbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGhpbGl0ZUNvbG9yKSB7CisKKyAgICAgICAgICAgIENvbG9yIG9sZENvbG9yID0gZy5nZXRDb2xvcigpOworICAgICAgICAgICAgZy5zZXRDb2xvcihmSG9zdC5nZXRIb3N0KCkuZ2V0QmFja2dyb3VuZCgpKTsKKyAgICAgICAgICAgIGcuZmlsbFJlY3QoZHJhd1JlY3QueCwgZHJhd1JlY3QueSwgZHJhd1JlY3Qud2lkdGgsIGRyYXdSZWN0LmhlaWdodCk7CisgICAgICAgICAgICBnLnNldENvbG9yKG9sZENvbG9yKTsKKworICAgICAgICAgICAgLy8gICAgICAgICAgICBnLmNsZWFyUmVjdChkcmF3UmVjdC54LCBkcmF3UmVjdC55LCBkcmF3UmVjdC53aWR0aCwgZHJhd1JlY3QuaGVpZ2h0KTsKKworICAgICAgICAgICAgaWYgKHNlbGVjdGlvblZpc2libGUpIHsKKyAgICAgICAgICAgICAgICBmRm9ybWF0dGVyLmRyYXcoZywgZHJhd1JlY3QsIGZPcmlnaW4sIHNlbFN0YXJ0LCBzZWxFbmQsIGhpbGl0ZUNvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZGb3JtYXR0ZXIuZHJhdyhnLCBkcmF3UmVjdCwgZk9yaWdpbiwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzZWxTdGFydCAhPSBudWxsICYmIHNlbFN0YXJ0LmVxdWFscyhzZWxFbmQpICYmIHNlbGVjdGlvblZpc2libGUpIHsKKworICAgICAgICAgICAgICAgIGZGb3JtYXR0ZXIuZHJhd0NhcmV0KGcsIHNlbFN0YXJ0LCBmT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RST05HX0NBUkVUX0NPTE9SLCBXRUFLX0NBUkVUX0NPTE9SKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3MgZywKKyAgICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGUgZHJhd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZWxlY3Rpb25WaXNpYmxlLAorICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxFbmQsCisgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgaGlsaXRlQ29sb3IpIHsKKworICAgICAgICAgICAgaWYgKGcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRyYXdSZWN0ID0gZHJhd1JlY3QuaW50ZXJzZWN0aW9uKGZIb3N0LmdldEJvdW5kcygpKTsKKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZHJhd1RleHQ6ZHJhd1JlY3Q6ICIgKyBkcmF3UmVjdCk7CisgICAgICAgICAgICAgICAgZy5jbGlwUmVjdChkcmF3UmVjdC54LCBkcmF3UmVjdC55LCBkcmF3UmVjdC53aWR0aCwgZHJhd1JlY3QuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBpZiAoZk5vT2Zmc2NyZWVuQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRvRHJhd1RleHQoZywgZHJhd1JlY3QsIHNlbGVjdGlvblZpc2libGUsIHNlbFN0YXJ0LCBzZWxFbmQsIGhpbGl0ZUNvbG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEltYWdlIG9mZnNjcmVlbkJ1ZmZlciA9IGZCdWZmZXJDYWNoZS5nZXRCdWZmZXIoZHJhd1JlY3Qud2lkdGgsIGRyYXdSZWN0LmhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzIG9mZnNjcmVlbkdyYXBoaWNzID0gb2Zmc2NyZWVuQnVmZmVyLmdldEdyYXBoaWNzKCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbkdyYXBoaWNzLnRyYW5zbGF0ZSgtZHJhd1JlY3QueCwgLWRyYXdSZWN0LnkpOworICAgIAorICAgICAgICAgICAgICAgICAgICBkb0RyYXdUZXh0KG9mZnNjcmVlbkdyYXBoaWNzLCBkcmF3UmVjdCwgc2VsZWN0aW9uVmlzaWJsZSwgc2VsU3RhcnQsIHNlbEVuZCwgaGlsaXRlQ29sb3IpOworICAgIAorICAgICAgICAgICAgICAgICAgICBnLmRyYXdJbWFnZShvZmZzY3JlZW5CdWZmZXIsIGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIGZIb3N0LmZIb3N0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0U2l6ZU1pZ2h0SGF2ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVmb3JtYXRBbmREcmF3VGV4dChpbnQgcmVmb3JtYXRTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWZvcm1hdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgc2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHNlbEVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZSBhZGRpdGlvbmFsVXBkYXRlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGhpbGl0ZUNvbG9yKSB7CisKKyAgICAgICAgICAgIFJlY3RhbmdsZSB2aXNpYmxlQm91bmRzID0gZkhvc3QuZ2V0Qm91bmRzKCk7CisgICAgICAgICAgICBSZWN0YW5nbGUgcmVkcmF3UmVjdCA9IGZGb3JtYXR0ZXIudXBkYXRlRm9ybWF0KHJlZm9ybWF0U3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZm9ybWF0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQm91bmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmT3JpZ2luKTsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJbMV0gcmVkcmF3UmVjdDogIiArIHJlZHJhd1JlY3QpOworCisgICAgICAgICAgICBpZiAoYWRkaXRpb25hbFVwZGF0ZVJlY3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJlZHJhd1JlY3QuYWRkKGFkZGl0aW9uYWxVcGRhdGVSZWN0KTsKKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiWzJdIHJlZHJhd1JlY3Q6ICIgKyByZWRyYXdSZWN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbGVhbiBoYXZlU2VsZWN0aW9uOworCisgICAgICAgICAgICBpZiAoc2VsU3RhcnQgIT0gbnVsbCAmJiBzZWxFbmQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGhhdmVTZWxlY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHJlZHJhd1JlY3QuYWRkKGZGb3JtYXR0ZXIuZ2V0Qm91bmRpbmdSZWN0KHNlbFN0YXJ0LCBzZWxFbmQsIGZPcmlnaW4sIGZGb3JtYXR0ZXIuTE9PU0UpKTsKKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiWzNdIHJlZHJhd1JlY3Q6ICIgKyByZWRyYXdSZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGhhdmVTZWxlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZHJhd1RleHQoZkhvc3QuZ2V0R3JhcGhpY3MoKSwgcmVkcmF3UmVjdCwgaGF2ZVNlbGVjdGlvbiwgc2VsU3RhcnQsIHNlbEVuZCwgaGlsaXRlQ29sb3IpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIGxldEJlaGF2aW9yRHJhdyhHcmFwaGljcyBnLCBSZWN0YW5nbGUgZHJhd1JlY3QpIHsKKworICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGZIb3N0LmZCZWhhdmlvciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZkhvc3QuZkJlaGF2aW9yLnBhaW50KGcsIGRyYXdSZWN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBkcmF3VGV4dChnLCBkcmF3UmVjdCwgZmFsc2UsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtb3ZlQnkoaW50IGR4LCBpbnQgZHkpIHsKKworICAgICAgICAgICAgUmVjdGFuZ2xlIHZpc2libGVCb3VuZHMgPSBmSG9zdC5nZXRCb3VuZHMoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzIGcgPSBmSG9zdC5nZXRHcmFwaGljcygpOworCisgICAgICAgICAgICBmQm91bmRzLnggKz0gZHg7CisgICAgICAgICAgICBmQm91bmRzLnkgKz0gZHk7CisgICAgICAgICAgICBmT3JpZ2luLnggKz0gZHg7CisgICAgICAgICAgICBmT3JpZ2luLnkgKz0gZHk7CisKKyAgICAgICAgICAgIFJlY3RhbmdsZSByZWZyZXNoUmVjdCA9IG5ldyBSZWN0YW5nbGUodmlzaWJsZUJvdW5kcyk7CisKKyAgICAgICAgICAgIGlmIChkeCA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBnLmNvcHlBcmVhKHZpc2libGVCb3VuZHMueCwgdmlzaWJsZUJvdW5kcy55LCB2aXNpYmxlQm91bmRzLndpZHRoLCB2aXNpYmxlQm91bmRzLmhlaWdodCwgZHgsIGR5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGR5IDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZWZyZXNoUmVjdC55ID0gdmlzaWJsZUJvdW5kcy55ICsgdmlzaWJsZUJvdW5kcy5oZWlnaHQgKyBkeTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVmcmVzaFJlY3QuaGVpZ2h0ID0gTWF0aC5hYnMoZHkpOworICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJyZWZyZXNoUmVjdD0iICsgcmVmcmVzaFJlY3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZXRCZWhhdmlvckRyYXcoZywgcmVmcmVzaFJlY3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcml2YXRlIFJlY3RhbmdsZSBnZXRJbnNldEJvdW5kcygpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGluc2V0RGltID0gMiAqIGZJbnNldEFtb3VudDsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKGZCb3VuZHMueC1mSW5zZXRBbW91bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmQm91bmRzLnktZkluc2V0QW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkJvdW5kcy53aWR0aCtpbnNldERpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZCb3VuZHMuaGVpZ2h0K2luc2V0RGltKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcGFpbnQoR3JhcGhpY3MgZykgeworCisgICAgICAgICAgICBSZWN0YW5nbGUgaG9zdEJvdW5kcyA9IGZIb3N0LmdldEJvdW5kcygpOworICAgICAgICAgICAgUmVjdGFuZ2xlIHRleHRSZWZyZXNoUmVjdCA9IGhvc3RCb3VuZHMuaW50ZXJzZWN0aW9uKGdldEluc2V0Qm91bmRzKCkpOworICAgICAgICAgICAgbGV0QmVoYXZpb3JEcmF3KGcsIHRleHRSZWZyZXNoUmVjdCk7CisgICAgICAgIH0KKworICAgICAgICBSZWN0YW5nbGUgZ2V0Q2FyZXRSZWN0KFRleHRPZmZzZXQgb2Zmc2V0KSB7CisKKyAgICAgICAgICAgIHJldHVybiBmRm9ybWF0dGVyLmdldENhcmV0UmVjdChvZmZzZXQsIGZPcmlnaW4pOworICAgICAgICB9CisKKyAgICAgICAgVGV4dE9mZnNldCBwb2ludFRvVGV4dE9mZnNldChUZXh0T2Zmc2V0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IGFuY2hvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGluZmluaXRlTW9kZSkgeworCisgICAgICAgICAgICByZXR1cm4gZkZvcm1hdHRlci5wb2ludFRvVGV4dE9mZnNldChyZXN1bHQsIHgsIHksIGZPcmlnaW4sIGFuY2hvciwgaW5maW5pdGVNb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlY3RhbmdsZSBnZXRTY3JvbGxhYmxlQXJlYSgpIHsKKworICAgICAgICAgICAgUmVjdGFuZ2xlIGFyZWEgPSBuZXcgUmVjdGFuZ2xlKGZCb3VuZHMpOworICAgICAgICAgICAgYXJlYS54ICs9IGZJbnNldEFtb3VudCAtIGZPcmlnaW4ueDsKKyAgICAgICAgICAgIGFyZWEueSArPSBmSW5zZXRBbW91bnQgLSBmT3JpZ2luLnk7CisgICAgICAgICAgICByZXR1cm4gYXJlYTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBEb2Vzbid0IGNsb25lIHNvIFRleHRDb21wb25lbnQgbmVlZHMgdG8gYmUgbmljZS4gIFRleHRDb21wb25lbnQKKyAgICAgICAgICogaXMgdGhlIG9ubHkgY2xhc3Mgd2hpY2ggY2FuIGFjY2VzcyB0aGlzIGFueXdheS4KKyAgICAgICAgICovCisgICAgICAgIFJlY3RhbmdsZSBnZXREb2N1bWVudEJvdW5kcygpIHsKKworICAgICAgICAgICAgcmV0dXJuIGZCb3VuZHM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBnZXREb2NYKCkgeworICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBmT3JpZ2luLnggLSBmSW5zZXRBbW91bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBnZXREb2NZKCkgeworICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBmT3JpZ2luLnkgLSBmSW5zZXRBbW91bnQ7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbGluZUNvbnRhaW5pbmcoVGV4dE9mZnNldCBvZmZzZXQpIHsKKworICAgICAgICAgICAgcmV0dXJuIGZGb3JtYXR0ZXIubGluZUNvbnRhaW5pbmcob2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBsaW5lUmFuZ2VMb3coaW50IGxpbmVOdW1iZXIpIHsKKworICAgICAgICAgICAgcmV0dXJuIGZGb3JtYXR0ZXIubGluZVJhbmdlTG93KGxpbmVOdW1iZXIpOworICAgICAgICB9CisKKyAgICAgICAgaW50IGxpbmVSYW5nZUxpbWl0KGludCBsaW5lTnVtYmVyKSB7CisKKyAgICAgICAgICAgIHJldHVybiBmRm9ybWF0dGVyLmxpbmVSYW5nZUxpbWl0KGxpbmVOdW1iZXIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzdG9wQmFja2dyb3VuZEZvcm1hdHRpbmcoKSB7CisKKyAgICAgICAgICAgIGZGb3JtYXR0ZXIuc3RvcEJhY2tncm91bmRGb3JtYXR0aW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBSZWN0YW5nbGUgZ2V0Qm91bmRpbmdSZWN0KFRleHRPZmZzZXQgb2Zmc2V0MSwgVGV4dE9mZnNldCBvZmZzZXQyKSB7CisKKyAgICAgICAgICAgIFJlY3RhbmdsZSByID0gZkZvcm1hdHRlci5nZXRCb3VuZGluZ1JlY3Qob2Zmc2V0MSwgb2Zmc2V0MiwgZk9yaWdpbiwgZkZvcm1hdHRlci5USUdIVCk7CisgICAgICAgICAgICAvL3Iud2lkdGggKz0gQ0FSRVRfU0xPUDsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJvZmZzZXQxPSIrb2Zmc2V0MSsiOyBvZmZzZXQyPSIrb2Zmc2V0Mik7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiYm91bmRzIHdpZHRoPSIrci53aWR0aCsiOyBob3N0IHdpZHRoPSIrKGZIb3N0LmdldEJvdW5kcygpLndpZHRoKSk7CisgICAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgfQorCisgICAgICAgIFRleHRPZmZzZXQgZmluZE5ld0luc2VydGlvbk9mZnNldChUZXh0T2Zmc2V0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgaW5pdGlhbE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgcHJldmlvdXNPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBkaXJlY3Rpb24pIHsKKworICAgICAgICAgICAgcmV0dXJuIGZGb3JtYXR0ZXIuZmluZE5ld0luc2VydGlvbk9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgaW5pdGlhbE9mZnNldCwgcHJldmlvdXNPZmZzZXQsIGRpcmVjdGlvbik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dEVkaXRCZWhhdmlvci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRFZGl0QmVoYXZpb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNGFhMDJlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRFZGl0QmVoYXZpb3IuamF2YQpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGV4dEVkaXRCZWhhdmlvci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjQ4ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsOworCitpbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuS2V5RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuTW91c2VFdmVudDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NVGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRmb3JtYXQuVGV4dE9mZnNldDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKKworLy8gQWxsIGNoYW5nZXMgdG8gdGhlIHRleHQgc2hvdWxkIGhhcHBlbiBpbiB0aGlzIGNsYXNzLCBvciBpbgorLy8gaXRzIFR5cGluZ0ludGVyYWN0b3IuCisKK2NsYXNzIFRleHRFZGl0QmVoYXZpb3IgZXh0ZW5kcyBCZWhhdmlvciB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgVGV4dENvbXBvbmVudCBmVGV4dENvbXBvbmVudDsKKyAgICBwcml2YXRlIFRleHRTZWxlY3Rpb24gZlNlbGVjdGlvbjsKKyAgICBwcml2YXRlIE1UZXh0IGZUZXh0OworICAgIHByaXZhdGUgU2ltcGxlQ29tbWFuZExvZyBmQ29tbWFuZExvZzsKKyAgICBwcml2YXRlIFBhbmVsRXZlbnRCcm9hZGNhc3RlciBmTGlzdGVuZXI7CisgICAgcHJpdmF0ZSBUeXBpbmdJbnRlcmFjdG9yIGZUeXBpbmdJbnRlcmFjdG9yID0gbnVsbDsKKyAgICBwcml2YXRlIEtleVJlbWFwIGZSZW1hcDsKKyAgICAKKyAgICBwcml2YXRlIEF0dHJpYnV0ZU1hcCBmU2F2ZWRUeXBpbmdTdHlsZSA9IG51bGw7CisgICAgcHJpdmF0ZSBpbnQgZlNhdmVkSW5zUHQgPSAwOworICAgIAorICAgIHB1YmxpYyBUZXh0RWRpdEJlaGF2aW9yKFRleHRDb21wb25lbnQgdGV4dENvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0U2VsZWN0aW9uIHNlbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYW5lbEV2ZW50QnJvYWRjYXN0ZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5UmVtYXAgcmVtYXApIHsKKworICAgICAgICBmVGV4dENvbXBvbmVudCA9IHRleHRDb21wb25lbnQ7CisgICAgICAgIGZTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisgICAgICAgIGZUZXh0ID0gdGV4dENvbXBvbmVudC5nZXRNb2RpZmlhYmxlVGV4dCgpOworICAgICAgICBmQ29tbWFuZExvZyA9IG5ldyBTaW1wbGVDb21tYW5kTG9nKGxpc3RlbmVyKTsKKyAgICAgICAgZkxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgICAgIGZSZW1hcCA9IHJlbWFwOworICAgIH0KKworICAgIHB1YmxpYyBLZXlSZW1hcCBnZXRLZXlSZW1hcCgpIHsKKworICAgICAgICByZXR1cm4gZlJlbWFwOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEtleVJlbWFwKEtleVJlbWFwIHJlbWFwKSB7CisKKyAgICAgICAgZlJlbWFwID0gcmVtYXA7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gdGV4dENvbnRyb2xFdmVudE9jY3VycmVkKEJlaGF2aW9yLkV2ZW50VHlwZSBldmVudCwgT2JqZWN0IHdoYXQpIHsKKworICAgICAgICBib29sZWFuIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKGV2ZW50ID09IEJlaGF2aW9yLkNIQVJBQ1RFUl9TVFlMRV9NT0QgfHwKKyAgICAgICAgICAgIGV2ZW50ID09IEJlaGF2aW9yLlBBUkFHUkFQSF9TVFlMRV9NT0QpIHsKKyAgICAgICAgICAgIGRvU3R5bGVDaGFuZ2UoZXZlbnQsIHdoYXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGV2ZW50ID09IEJlaGF2aW9yLkNVVCkgeworICAgICAgICAgICAgZG9DdXQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChldmVudCA9PSBCZWhhdmlvci5QQVNURSkgeworICAgICAgICAgICAgZG9QYXN0ZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGV2ZW50ID09IEJlaGF2aW9yLkNMRUFSKSB7CisgICAgICAgICAgICBkb0NsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZlbnQgPT0gQmVoYXZpb3IuUkVQTEFDRSkgeworICAgICAgICAgICAgZG9VbmRvYWJsZVJlcGxhY2UoKFRleHRSZXBsYWNlbWVudCkgd2hhdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZlbnQgPT0gQmVoYXZpb3IuVU5ETykgeworICAgICAgICAgICAgZkNvbW1hbmRMb2cudW5kbygpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGV2ZW50ID09IEJlaGF2aW9yLlJFRE8pIHsKKyAgICAgICAgICAgIGZDb21tYW5kTG9nLnJlZG8oKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChldmVudCA9PSBCZWhhdmlvci5TRVRfTU9ESUZJRUQpIHsKKyAgICAgICAgICAgIGZDb21tYW5kTG9nLnNldE1vZGlmaWVkKHdoYXQgPT0gQm9vbGVhbi5UUlVFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChldmVudCA9PSBCZWhhdmlvci5DTEVBUl9DT01NQU5EX0xPRykgeworICAgICAgICAgICAgZkNvbW1hbmRMb2cuY2xlYXJMb2coKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChldmVudCA9PSBCZWhhdmlvci5TRVRfQ09NTUFORF9MT0dfU0laRSkgeworICAgICAgICAgICAgZkNvbW1hbmRMb2cuc2V0TG9nU2l6ZSgoKEludGVnZXIpd2hhdCkuaW50VmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBoYW5kbGVkID0gc3VwZXIudGV4dENvbnRyb2xFdmVudE9jY3VycmVkKGV2ZW50LCB3aGF0KTsKKyAgICAgICAgfQorCisgICAgICAgIGNoZWNrU2F2ZWRUeXBpbmdTdHlsZSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGhhbmRsZWQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHRoZSB0ZXh0IGlzIG1vZGlmaWVkIGFuZCByZWZvcm1hdHRlZCBpbgorICAgICAqIHRocmVlIGRpZmZlcmVudCBtZXRob2RzLiAgVGhpcyBtZXRob2QgaXMgdGhlICJjb21tb24gcHJvbG9ndWUiCisgICAgICogZm9yIGFsbCB0ZXh0IG1vZGlmaWNhdGlvbnMuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgYW5kIHJlZm9ybWF0dGluZworICAgICAqIHRoZSB0ZXh0LiAgSXQgZG9lcyB0aHJlZSB0aGluZ3M6ICBzdG9wcyBjYXJldCBibGlua2luZywgc3RvcHMKKyAgICAgKiBiYWNrZ3JvdW5kIGZvcm1hdHRpbmcsIGFuZCByZXR1cm5zIHRoZSBSZWN0YW5nbGUgY29udGFpbmluZyB0aGUKKyAgICAgKiBjdXJyZW50IChzb29uLXRvLWJlIG9ic29sZXRlKSBzZWxlY3Rpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBSZWN0YW5nbGUgcHJlcGFyZUZvclRleHRFZGl0KCkgeworCisgICAgICAgIGZTZWxlY3Rpb24uc3RvcENhcmV0QmxpbmtpbmcoKTsKKyAgICAgICAgZlRleHRDb21wb25lbnQuc3RvcEJhY2tncm91bmRGb3JtYXR0aW5nKCk7CisgICAgICAgIHJldHVybiBmVGV4dENvbXBvbmVudC5nZXRCb3VuZGluZ1JlY3QoZlNlbGVjdGlvbi5nZXRTdGFydCgpLCBmU2VsZWN0aW9uLmdldEVuZCgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9DbGVhcigpIHsKKyAgICAgICAgVGV4dFJhbmdlIHNlbFJhbmdlID0gZlNlbGVjdGlvbi5nZXRTZWxlY3Rpb25SYW5nZSgpOworCisgICAgICAgIGlmIChzZWxSYW5nZS5zdGFydCA9PSBzZWxSYW5nZS5saW1pdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkb1VuZG9hYmxlVGV4dENoYW5nZShzZWxSYW5nZS5zdGFydCwgc2VsUmFuZ2UubGltaXQsIG51bGwsIG5ldyBUZXh0T2Zmc2V0KHNlbFJhbmdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0KSwgbmV3IFRleHRPZmZzZXQoc2VsUmFuZ2Uuc3RhcnQpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9DdXQoKSB7CisgICAgICAgIFRleHRSYW5nZSBzZWxSYW5nZSA9IGZTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKworICAgICAgICBpZiAoc2VsUmFuZ2Uuc3RhcnQgPT0gc2VsUmFuZ2UubGltaXQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZlRleHRDb21wb25lbnQuZ2V0Q2xpcGJvYXJkKCkuc2V0Q29udGVudHMoZlRleHQuZXh0cmFjdChzZWxSYW5nZS5zdGFydCwgc2VsUmFuZ2UubGltaXQpKTsKKyAgICAgICAgZG9VbmRvYWJsZVRleHRDaGFuZ2Uoc2VsUmFuZ2Uuc3RhcnQsIHNlbFJhbmdlLmxpbWl0LCBudWxsLCBuZXcgVGV4dE9mZnNldChzZWxSYW5nZS5zdGFydCksIG5ldyBUZXh0T2Zmc2V0KHNlbFJhbmdlLnN0YXJ0KSk7CisKKyAgICAgICAgZkxpc3RlbmVyLnRleHRTdGF0ZUNoYW5nZWQoVGV4dFBhbmVsRXZlbnQuQ0xJUEJPQVJEX0NIQU5HRUQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkb1Bhc3RlKCkgeworICAgICAgICBUZXh0UmFuZ2Ugc2VsUmFuZ2UgPSBmU2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgIE1Db25zdFRleHQgY2xpcFRleHQgPSBmVGV4dENvbXBvbmVudC5nZXRDbGlwYm9hcmQoKS5nZXRDb250ZW50cyhBdHRyaWJ1dGVNYXAuRU1QVFlfQVRUUklCVVRFX01BUCk7CisKKyAgICAgICAgaWYgKGNsaXBUZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRvVW5kb2FibGVUZXh0Q2hhbmdlKHNlbFJhbmdlLnN0YXJ0LCBzZWxSYW5nZS5saW1pdCwgY2xpcFRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUZXh0T2Zmc2V0KHNlbFJhbmdlLnN0YXJ0ICsgY2xpcFRleHQubGVuZ3RoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGV4dE9mZnNldChzZWxSYW5nZS5zdGFydCArIGNsaXBUZXh0Lmxlbmd0aCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmTGlzdGVuZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5DTElQQk9BUkRfQ0hBTkdFRCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9VbmRvYWJsZVJlcGxhY2UoVGV4dFJlcGxhY2VtZW50IHJlcGxhY2VtZW50KSB7CisKKyAgICAgICAgZG9VbmRvYWJsZVRleHRDaGFuZ2UocmVwbGFjZW1lbnQuZ2V0U3RhcnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQuZ2V0TGltaXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQuZ2V0VGV4dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5nZXRTZWxlY3Rpb25TdGFydCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5nZXRTZWxlY3Rpb25MaW1pdCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IFR5cGluZ0ludGVyYWN0b3IgYW5kIFRleHRDb21tYW5kIHNob3VsZCBjYWxsIHRoaXMhCisgICAgICovCisgICAgdm9pZCBkb1JlcGxhY2VUZXh0KGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICBNQ29uc3RUZXh0IG5ld1RleHQsCisgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgbmV3U2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgbmV3U2VsRW5kKSB7CisKKyAgICAgICAgaW50IHRleHRMZW5ndGg7CisKKyAgICAgICAgZlRleHQucmVzZXREYW1hZ2VkUmFuZ2UoKTsKKworICAgICAgICBSZWN0YW5nbGUgb2xkU2VsUmVjdCA9IHByZXBhcmVGb3JUZXh0RWRpdCgpOworCisgICAgICAgIGlmIChuZXdUZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRleHRMZW5ndGggPSAwOworICAgICAgICAgICAgZlRleHQucmVtb3ZlKHN0YXJ0LCBsaW1pdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0ZXh0TGVuZ3RoID0gbmV3VGV4dC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGZUZXh0LnJlcGxhY2Uoc3RhcnQsIGxpbWl0LCBuZXdUZXh0LCAwLCB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBmU2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG5ld1NlbFN0YXJ0LCBuZXdTZWxFbmQsIG5ld1NlbFN0YXJ0KTsKKyAgICAgICAgcmVmb3JtYXRBbmREcmF3VGV4dChmU2VsZWN0aW9uLmdldFN0YXJ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlNlbGVjdGlvbi5nZXRFbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRTZWxSZWN0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IHRoZSB0eXBpbmcgaW50ZXJhY3RvciBzaG91bGQgY2FsbCB0aGlzIQorICAgICAqLworICAgIHZvaWQgZG9SZXBsYWNlU2VsZWN0ZWRUZXh0KGNoYXIgY2gsIEF0dHJpYnV0ZU1hcCBjaGFyU3R5bGUpIHsKKworICAgICAgICBpbnQgc3RhcnQgPSBmU2VsZWN0aW9uLmdldFN0YXJ0KCkuZk9mZnNldDsKKyAgICAgICAgaW50IGxpbWl0ID0gZlNlbGVjdGlvbi5nZXRFbmQoKS5mT2Zmc2V0OworICAgICAgICBUZXh0T2Zmc2V0IG5ld09mZnNldCA9IG5ldyBUZXh0T2Zmc2V0KHN0YXJ0ICsgMSk7CisgICAgICAgIGRvUmVwbGFjZVRleHQoc3RhcnQsIGxpbWl0LCBjaCwgY2hhclN0eWxlLCBuZXdPZmZzZXQsIG5ld09mZnNldCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRvUmVwbGFjZVRleHQoaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBjaGFyU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBuZXdTZWxTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IG5ld1NlbEVuZCkgeworCisgICAgICAgIGZUZXh0LnJlc2V0RGFtYWdlZFJhbmdlKCk7CisKKyAgICAgICAgUmVjdGFuZ2xlIG9sZFNlbFJlY3QgPSBwcmVwYXJlRm9yVGV4dEVkaXQoKTsKKworICAgICAgICBmVGV4dC5yZXBsYWNlKHN0YXJ0LCBsaW1pdCwgY2gsIGNoYXJTdHlsZSk7CisKKyAgICAgICAgZlNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXdTZWxTdGFydCwgbmV3U2VsRW5kLCBuZXdTZWxTdGFydCk7CisgICAgICAgIHJlZm9ybWF0QW5kRHJhd1RleHQoZlNlbGVjdGlvbi5nZXRTdGFydCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZTZWxlY3Rpb24uZ2V0RW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkU2VsUmVjdCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRvU3R5bGVDaGFuZ2UoQmVoYXZpb3IuRXZlbnRUeXBlIGV2ZW50LCBPYmplY3Qgd2hhdCkgeworCisgICAgICAgIFRleHRSYW5nZSBzZWxSYW5nZSA9IGZTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgYm9vbGVhbiBjaGFyYWN0ZXIgPSAoZXZlbnQgPT0gQmVoYXZpb3IuQ0hBUkFDVEVSX1NUWUxFX01PRCk7CisKKyAgICAgICAgaWYgKHNlbFJhbmdlLnN0YXJ0ICE9IHNlbFJhbmdlLmxpbWl0IHx8ICFjaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgIGRvVW5kb2FibGVTdHlsZUNoYW5nZSh3aGF0LCBjaGFyYWN0ZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVHlwaW5nSW50ZXJhY3RvciBpbnRlcmFjdG9yID0KKyAgICAgICAgICAgICAgICBuZXcgVHlwaW5nSW50ZXJhY3RvcihmVGV4dENvbXBvbmVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlNlbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmU2F2ZWRUeXBpbmdTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZDb21tYW5kTG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZMaXN0ZW5lcik7CisKKyAgICAgICAgICAgIGludGVyYWN0b3IuYWRkVG9Pd25lcihmVGV4dENvbXBvbmVudCk7CisgICAgICAgICAgICBpbnRlcmFjdG9yLnRleHRDb250cm9sRXZlbnRPY2N1cnJlZChldmVudCwgd2hhdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IHRleHQgY29tbWFuZHMgc2hvdWxkIGNhbGwgdGhpcyBtZXRob2QhCisgICAgICovCisgICAgdm9pZCBkb01vZGlmeVN0eWxlcyhpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZU1vZGlmaWVyIG1vZGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBjaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IG5ld1NlbFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBuZXdTZWxFbmQpIHsKKworICAgICAgICBmVGV4dC5yZXNldERhbWFnZWRSYW5nZSgpOworCisgICAgICAgIFJlY3RhbmdsZSBvbGRTZWxSZWN0ID0gcHJlcGFyZUZvclRleHRFZGl0KCk7CisKKyAgICAgICAgaWYgKGNoYXJhY3RlcikgeworICAgICAgICAgICAgZlRleHQubW9kaWZ5Q2hhcmFjdGVyU3R5bGVzKHN0YXJ0LCBsaW1pdCwgbW9kaWZpZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZlRleHQubW9kaWZ5UGFyYWdyYXBoU3R5bGVzKHN0YXJ0LCBsaW1pdCwgbW9kaWZpZXIpOworICAgICAgICB9CisKKyAgICAgICAgZlNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXdTZWxTdGFydCwgbmV3U2VsRW5kLCBuZXdTZWxTdGFydCk7CisgICAgICAgIHJlZm9ybWF0QW5kRHJhd1RleHQobmV3U2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFNlbFJlY3QpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkb1VuZG9hYmxlU3R5bGVDaGFuZ2UoT2JqZWN0IHdoYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNoYXJhY3RlcikgeworCisgICAgICAgIFRleHRPZmZzZXQgc2VsU3RhcnQgPSBmU2VsZWN0aW9uLmdldFN0YXJ0KCk7CisgICAgICAgIFRleHRPZmZzZXQgc2VsRW5kID0gZlNlbGVjdGlvbi5nZXRFbmQoKTsKKworICAgICAgICBNVGV4dCBvbGRUZXh0ID0gZlRleHQuZXh0cmFjdFdyaXRhYmxlKHNlbFN0YXJ0LmZPZmZzZXQsIHNlbEVuZC5mT2Zmc2V0KTsKKyAgICAgICAgU3R5bGVDaGFuZ2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgU3R5bGVDaGFuZ2VDb21tYW5kKAorICAgICAgICAgICAgICAgIHRoaXMsIG9sZFRleHQsIHNlbFN0YXJ0LCBzZWxFbmQsIChTdHlsZU1vZGlmaWVyKSB3aGF0LCBjaGFyYWN0ZXIpOworCisgICAgICAgIGZDb21tYW5kTG9nLmFkZEFuZERvKGNvbW1hbmQpOworCisgICAgICAgIGZMaXN0ZW5lci50ZXh0U3RhdGVDaGFuZ2VkKFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9TVFlMRVNfQ0hBTkdFRCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRvVW5kb2FibGVUZXh0Q2hhbmdlKGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ29uc3RUZXh0IG5ld1RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgbmV3U2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgbmV3U2VsRW5kKSB7CisKKyAgICAgICAgVGV4dENoYW5nZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBUZXh0Q2hhbmdlQ29tbWFuZCh0aGlzLCBmVGV4dC5leHRyYWN0V3JpdGFibGUoc3RhcnQsIGxpbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGV4dCwgc3RhcnQsIGZTZWxlY3Rpb24uZ2V0U3RhcnQoKSwgZlNlbGVjdGlvbi5nZXRFbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsU3RhcnQsIG5ld1NlbEVuZCk7CisKKyAgICAgICAgZkNvbW1hbmRMb2cuYWRkQW5kRG8oY29tbWFuZCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gY2FuVW5kbygpIHsKKworICAgICAgICBib29sZWFuIGNhblVuZG8gPSBmYWxzZTsKKworICAgICAgICBpZiAoZlR5cGluZ0ludGVyYWN0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgY2FuVW5kbyA9IGZUeXBpbmdJbnRlcmFjdG9yLmhhc1BlbmRpbmdDb21tYW5kKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNhblVuZG8pIHsKKyAgICAgICAgICAgIGNhblVuZG8gPSBmQ29tbWFuZExvZy5jYW5VbmRvKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2FuVW5kbzsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBjYW5SZWRvKCkgeworCisgICAgICAgIHJldHVybiBmQ29tbWFuZExvZy5jYW5SZWRvKCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNNb2RpZmllZCgpIHsKKworICAgICAgICBpZiAoZlR5cGluZ0ludGVyYWN0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGZUeXBpbmdJbnRlcmFjdG9yLmhhc1BlbmRpbmdDb21tYW5kKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZkNvbW1hbmRMb2cuaXNNb2RpZmllZCgpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0Q29tbWFuZExvZ1NpemUoKSB7CisKKyAgICAgICAgcmV0dXJuIGZDb21tYW5kTG9nLmdldExvZ1NpemUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQXR0cmlidXRlTWFwIGdldEluc2VydGlvblBvaW50U3R5bGUoKSB7CisKKyAgICAgICAgaWYgKGZUeXBpbmdJbnRlcmFjdG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmVHlwaW5nSW50ZXJhY3Rvci5nZXRUeXBpbmdTdHlsZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZTYXZlZFR5cGluZ1N0eWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmU2F2ZWRUeXBpbmdTdHlsZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVGV4dFJhbmdlIHJhbmdlID0gZlNlbGVjdGlvbi5nZXRTZWxlY3Rpb25SYW5nZSgpOworICAgICAgICByZXR1cm4gdHlwaW5nU3R5bGVBdChmVGV4dCwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmxpbWl0KTsKKyAgICB9CisgICAgCisgICAgcHVibGljIGJvb2xlYW4ga2V5UHJlc3NlZChLZXlFdmVudCBlKSB7CisKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKFR5cGluZ0ludGVyYWN0b3IuaGFuZGxlZEJ5VHlwaW5nSW50ZXJhY3RvcihlKSkgeworICAgICAgICAgICAgVHlwaW5nSW50ZXJhY3RvciBpbnRlcmFjdG9yID0gbmV3IFR5cGluZ0ludGVyYWN0b3IoZlRleHRDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmU2VsZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlNhdmVkVHlwaW5nU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkNvbW1hbmRMb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTGlzdGVuZXIpOworCisgICAgICAgICAgICBpbnRlcmFjdG9yLmFkZFRvT3duZXIoZlRleHRDb21wb25lbnQpOworICAgICAgICAgICAgaW50ZXJhY3Rvci5rZXlQcmVzc2VkKGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaGFuZGxlZCA9IHN1cGVyLmtleVByZXNzZWQoZSk7CisgICAgICAgICAgICBjaGVja1NhdmVkVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGhhbmRsZWQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4ga2V5VHlwZWQoS2V5RXZlbnQgZSkgeworICAgICAgICAKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKFR5cGluZ0ludGVyYWN0b3IuaGFuZGxlZEJ5VHlwaW5nSW50ZXJhY3RvcihlKSkgeworICAgICAgICAgICAgVHlwaW5nSW50ZXJhY3RvciBpbnRlcmFjdG9yID0gbmV3IFR5cGluZ0ludGVyYWN0b3IoZlRleHRDb21wb25lbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlNlbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZTYXZlZFR5cGluZ1N0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZDb21tYW5kTG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkxpc3RlbmVyKTsKKworICAgICAgICAgICAgaW50ZXJhY3Rvci5hZGRUb093bmVyKGZUZXh0Q29tcG9uZW50KTsKKyAgICAgICAgICAgIGludGVyYWN0b3Iua2V5VHlwZWQoZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBoYW5kbGVkID0gc3VwZXIua2V5VHlwZWQoZSk7CisgICAgICAgICAgICBjaGVja1NhdmVkVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGhhbmRsZWQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbW91c2VSZWxlYXNlZChNb3VzZUV2ZW50IGUpIHsKKyAgICAgICAgCisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gc3VwZXIubW91c2VSZWxlYXNlZChlKTsKKyAgICAgICAgY2hlY2tTYXZlZFR5cGluZ1N0eWxlKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCByZWZvcm1hdEFuZERyYXdUZXh0KFRleHRPZmZzZXQgc2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBzZWxMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGUgb2xkU2VsUmVjdCkKKyAgICB7CisgICAgICAgIGlmICghZlNlbGVjdGlvbi5lbmFibGVkKCkpIHsKKyAgICAgICAgICAgIHNlbFN0YXJ0ID0gc2VsTGltaXQgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgaW50IHJlZm9ybWF0U3RhcnQgPSBmVGV4dC5kYW1hZ2VkUmFuZ2VTdGFydCgpOworICAgICAgICBpbnQgcmVmb3JtYXRMZW5ndGggPSBmVGV4dC5kYW1hZ2VkUmFuZ2VMaW1pdCgpIC0gcmVmb3JtYXRTdGFydDsKKworICAgICAgICBpZiAocmVmb3JtYXRTdGFydCAhPSBJbnRlZ2VyLk1BWF9WQUxVRSkgeworICAgICAgICAgICAgZlRleHRDb21wb25lbnQucmVmb3JtYXRBbmREcmF3VGV4dChyZWZvcm1hdFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZvcm1hdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRTZWxSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmU2VsZWN0aW9uLmdldEhpZ2hsaWdodENvbG9yKCkpOworICAgICAgICB9CisKKyAgICAgICAgZlNlbGVjdGlvbi5zY3JvbGxUb1Nob3dTZWxlY3Rpb24oKTsKKyAgICAgICAgCisgICAgICAgIC8vIHNvbWV0aW1lcyB0aGlzIHNob3VsZCBzZW5kIFNFTEVDVElPTl9TVFlMRVNfQ0hBTkdFRAorICAgICAgICBmTGlzdGVuZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5URVhUX0NIQU5HRUQpOworCisgICAgICAgIGZTZWxlY3Rpb24ucmVzdGFydENhcmV0QmxpbmtpbmcodHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT25seSBUeXBpbmdJbnRlcmFjdG9yIHNob3VsZCBjYWxsIHRoaXMuCisgICAgICovCisgICAgdm9pZCBzZXRUeXBpbmdJbnRlcmFjdG9yKFR5cGluZ0ludGVyYWN0b3IgaW50ZXJhY3RvcikgeworICAgICAgICBmVHlwaW5nSW50ZXJhY3RvciA9IGludGVyYWN0b3I7CisgICAgfQorCisgICAgLyoqCisgICAgICogT25seSBUeXBpbmdJbnRlcmFjdG9yIHNob3VsZCBjYWxsIHRoaXMuCisgICAgICovCisgICAgdm9pZCBzZXRTYXZlZFR5cGluZ1N0eWxlKEF0dHJpYnV0ZU1hcCBzdHlsZSwgaW50IGluc1B0KSB7CisgICAgCisgICAgICAgIGZTYXZlZFR5cGluZ1N0eWxlID0gc3R5bGU7CisgICAgICAgIGZTYXZlZEluc1B0ID0gaW5zUHQ7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBjaGVja1NhdmVkVHlwaW5nU3R5bGUoKSB7CisgICAgCisgICAgICAgIGlmIChmU2F2ZWRUeXBpbmdTdHlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICBpbnQgc2VsU3RhcnQgPSBmU2VsZWN0aW9uLmdldFN0YXJ0KCkuZk9mZnNldDsKKyAgICAgICAgICAgIGludCBzZWxMaW1pdCA9IGZTZWxlY3Rpb24uZ2V0RW5kKCkuZk9mZnNldDsKKyAgICAgICAgICAgIGlmIChzZWxTdGFydCAhPSBmU2F2ZWRJbnNQdCB8fCBzZWxTdGFydCAhPSBzZWxMaW1pdCkgeworICAgICAgICAgICAgICAgIGZTYXZlZFR5cGluZ1N0eWxlID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHN0eWxlIGFwcHJvcHJpYXRlIGZvciB0eXBpbmcgb24gdGhlIGdpdmVuIHNlbGVjdGlvbgorICAgICAqIHJhbmdlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQXR0cmlidXRlTWFwIHR5cGluZ1N0eWxlQXQoTUNvbnN0VGV4dCB0ZXh0LCBpbnQgc3RhcnQsIGludCBsaW1pdCkgeworCisgICAgICAgIGlmIChzdGFydCA8IGxpbWl0KSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dC5jaGFyYWN0ZXJTdHlsZUF0KHN0YXJ0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGFydCA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0LmNoYXJhY3RlclN0eWxlQXQoc3RhcnQgLSAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0LmNoYXJhY3RlclN0eWxlQXQoMCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dFBhbmVsLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dFBhbmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzNmMTRiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0UGFuZWwuamF2YQpAQCAtMCwwICsxLDU0MyBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGV4dFBhbmVsLmphdmEsdiAkICRSZXZpc2lvbjogMS4zICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDggJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuQ29tcG9uZW50OworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzOworaW1wb3J0IGphdmEuYXd0LlBhbmVsOworaW1wb3J0IGphdmEuYXd0LlNjcm9sbGJhcjsKKworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5DbGlwYm9hcmQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYXA7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVkVGV4dDsKKworLyoqCisgKiBUZXh0UGFuZWwgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgTVRleHRQYW5lbCBpbiBhbiBBV1QgUGFuZWwuCisgKiBAc2VlIE1UZXh0UGFuZWwKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFRleHRQYW5lbCBleHRlbmRzIFBhbmVsIGltcGxlbWVudHMgTVRleHRQYW5lbCB7CisKKyAgICBwcml2YXRlIEFUZXh0UGFuZWxJbXBsIGZJbXBsOworICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiBhIFRleHRQYW5lbFNldHRpbmdzIGluc3RhbmNlIHdpdGggYWxsIHNldHRpbmdzIHNldAorICAgICAqIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4gIENsaWVudHMgY2FuIG1vZGlmeSB0aGlzIG9iamVjdDsKKyAgICAgKiBtb2RpZmljYXRpb25zIHdpbGwgbm90IGFmZmVjdCB0aGUgZGVmYXVsdCB2YWx1ZXMuCisgICAgICogQHJldHVybiBhIFRleHRQYW5lbFNldHRpbmdzIGluc3RhbmNlIHNldCB0byBkZWZhdWx0IHZhbHVlcworICAgICAqIEBzZWUgVGV4dFBhbmVsU2V0dGluZ3MKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFRleHRQYW5lbFNldHRpbmdzIGdldERlZmF1bHRTZXR0aW5ncygpIHsKKworICAgICAgICByZXR1cm4gQVRleHRQYW5lbEltcGwuZ2V0RGVmYXVsdFNldHRpbmdzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IFRleHRQYW5lbCB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAqIEBwYXJhbSBpbml0aWFsVGV4dCB0aGUgdGV4dCBkb2N1bWVudC4gIElmIG51bGwgZG9jdW1lbnQgdGV4dCBpcyBlbXB0eS4KKyAgICAgKiBAcGFyYW0gY2xpcGJvYXJkIHRoZSBjbGlwYm9hcmQgdG8gdXNlIGZvciBjdXQsIGNvcHksIGFuZCBwYXN0ZQorICAgICAqICBvcGVyYXRpb25zLiAgSWYgbnVsbCB0aGlzIHBhbmVsIHdpbGwgdXNlIGEgcHJpdmF0ZSBjbGlwYm9hcmQuCisgICAgICovCisgICAgcHVibGljIFRleHRQYW5lbChNQ29uc3RUZXh0IGluaXRpYWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkIGNsaXBib2FyZCkgeworCisgICAgICAgIHRoaXMoQVRleHRQYW5lbEltcGwuZmdEZWZhdWx0U2V0dGluZ3MsIGluaXRpYWxUZXh0LCBjbGlwYm9hcmQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBUZXh0UGFuZWwuCisgICAgICogQHBhcmFtIHNldHRpbmdzIHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBUZXh0UGFuZWwKKyAgICAgKiBAcGFyYW0gaW5pdGlhbFRleHQgdGhlIHRleHQgZG9jdW1lbnQuICBJZiBudWxsIGRvY3VtZW50IHRleHQgaXMgZW1wdHkuCisgICAgICogQHBhcmFtIGNsaXBib2FyZCB0aGUgY2xpcGJvYXJkIHRvIHVzZSBmb3IgY3V0LCBjb3B5LCBhbmQgcGFzdGUKKyAgICAgKiAgb3BlcmF0aW9ucy4gIElmIG51bGwgdGhpcyBwYW5lbCB3aWxsIHVzZSBhIHByaXZhdGUgY2xpcGJvYXJkLgorICAgICAqIEBzZWUgVGV4dFBhbmVsU2V0dGluZ3MKKyAgICAgKi8KKyAgICBwdWJsaWMgVGV4dFBhbmVsKFRleHRQYW5lbFNldHRpbmdzIHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgTUNvbnN0VGV4dCBpbml0aWFsVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCBjbGlwYm9hcmQpIHsKKworICAgICAgICBTY3JvbGxiYXIgaG9yelNiID0gbnVsbDsKKyAgICAgICAgU2Nyb2xsYmFyIHZlcnRTYiA9IG51bGw7CisgICAgICAgIAorICAgICAgICBpZiAoc2V0dGluZ3MuZ2V0U2Nyb2xsYWJsZSgpKSB7CisKKyAgICAgICAgICAgIHNldExheW91dChuZXcgU2Nyb2xsQmFyTGF5b3V0KCkpOworCisgICAgICAgICAgICBib29sZWFuIHNjcm9sbEJhcnNWaXNpYmxlID0gc2V0dGluZ3MuZ2V0U2Nyb2xsQmFyc1Zpc2libGUoKTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbEJhcnNWaXNpYmxlKSB7CisgICAgICAgICAgICAgICAgaG9yelNiID0gbmV3IFNjcm9sbGJhcihTY3JvbGxiYXIuSE9SSVpPTlRBTCk7CisgICAgICAgICAgICAgICAgdmVydFNiID0gbmV3IFNjcm9sbGJhcihTY3JvbGxiYXIuVkVSVElDQUwpOworICAgICAgICAgICAgICAgIGFkZCgiU291dGgiLCBob3J6U2IpOworICAgICAgICAgICAgICAgIGFkZCgiRWFzdCIsIHZlcnRTYik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZJbXBsID0gbmV3IEFUZXh0UGFuZWxJbXBsKG5ldyBSdW5TdHJhdGVneSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yelNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0U2IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgZmluYWwgRmFrZUNvbXBvbmVudCB0ZXh0Q29tcG9uZW50ID0gZkltcGwuZ2V0VGV4dENvbXBvbmVudCgpOworICAgICAgICAKKyAgICAgICAgQ29tcG9uZW50IHRleHRIb3N0ID0gbmV3IENvbXBvbmVudCgpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0Q29tcG9uZW50LnNldEhvc3QodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhZGROb3RpZnkoKSB7CisgICAgICAgICAgICAgICAgc3VwZXIuYWRkTm90aWZ5KCk7CisgICAgICAgICAgICAgICAgdGV4dENvbXBvbmVudC5hZGROb3RpZnkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGcpIHsKKyAgICAgICAgICAgICAgICB0ZXh0Q29tcG9uZW50LnBhaW50KGcpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgYWRkKCJDZW50ZXIiLCB0ZXh0SG9zdCk7CisKKyAgICAgICAgdGV4dEhvc3QucmVxdWVzdEZvY3VzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkIHRoZSBnaXZlbiBUZXh0UGFuZWxMaXN0ZW5lciB0byB0aGUgbGlzdGVuZXJzIHdoaWNoIHdpbGwKKyAgICAgKiByZWNlaXZlIHVwZGF0ZSBub3RpZmljYXRpb25zIGZyb20gdGhpcyBUZXh0UGFuZWwuCisgICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byBhZGQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihUZXh0UGFuZWxMaXN0ZW5lciBsaXN0ZW5lcikgeworCisgICAgICAgIGZJbXBsLmFkZExpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIGdpdmVuIFRleHRQYW5lbExpc3RlbmVyIGZyb20gdGhlIGxpc3RlbmVycyB3aGljaCB3aWxsCisgICAgICogcmVjZWl2ZSB1cGRhdGUgbm90aWZpY2F0aW9ucyBmcm9tIHRoaXMgVGV4dFBhbmVsLgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gcmVtb3ZlCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoVGV4dFBhbmVsTGlzdGVuZXIgbGlzdGVuZXIpIHsKKworICAgICAgICBmSW1wbC5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgfQorCisvLz09PT09PT09PT09PQorLy8gVGV4dCBBY2Nlc3MKKy8vPT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGRvY3VtZW50IHRvIDx0dD5uZXdUZXh0PC90dD4uICBUaGlzIG9wZXJhdGlvbgorICAgICAqIG1vZGlmaWVzIHRoZSB0ZXh0IGluIHRoZSBUZXh0UGFuZWwuICBJdCBkb2VzIG5vdCBtb2RpZnkgb3IgYWRvcHQKKyAgICAgKiA8dHQ+bmV3VGV4dDwvdHQ+LiAgVGhpcyBtZXRob2Qgc2V0cyB0aGUgc2VsZWN0aW9uIGFuIGluc2VydGlvbiBwb2ludCBhdAorICAgICAqIHRoZSBlbmQgb2YgdGhlIHRleHQuCisgICAgICogQHBhcmFtIG5ld1RleHQgdGhlIHRleHQgd2hpY2ggd2lsbCByZXBsYWNlIHRoZSBjdXJyZW50IHRleHQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGV4dChNQ29uc3RUZXh0IG5ld1RleHQpIHsKKworICAgICAgICBmSW1wbC5zZXRUZXh0KG5ld1RleHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGVuZCB0aGUgZ2l2ZW4gdGV4dCB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gIEVxdWl2YWxlbnQgdG8KKyAgICAgKiA8dHQ+aW5zZXJ0KG5ld1RleHQsIGdldFRleHRMZW5ndGgoKSk8L3R0Pi4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCB0byBhcHBlbmQgdG8gdGhlIGRvY3VtZW50CisgICAgICovCisgICAgcHVibGljIHZvaWQgYXBwZW5kKE1Db25zdFRleHQgbmV3VGV4dCkgeworCisgICAgICAgIGZJbXBsLmFwcGVuZChuZXdUZXh0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIHRleHQgaW50byB0aGUgZG9jdW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLgorICAgICAqIEVxdWl2YWxlbnQgdG8KKyAgICAgKiA8dHQ+cmVwbGFjZVJhbmdlKG5ld1RleHQsIHBvc2l0aW9uLCBwb3NpdGlvbik8L3R0Pi4KKyAgICAgKiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCB0byBpbnNlcnQgaW50byB0aGUgZG9jdW1lbnQuCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgZG9jdW1lbnQgd2hlcmUgdGhlCisgICAgICogICAgIHRleHQgd2lsbCBiZSBpbnNlcnRlZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGluc2VydChNQ29uc3RUZXh0IG5ld1RleHQsIGludCBwb3NpdGlvbikgeworCisgICAgICAgIGZJbXBsLmluc2VydChuZXdUZXh0LCBwb3NpdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwbGFjZSB0aGUgZ2l2ZW4gcmFuZ2Ugd2l0aCA8dHQ+bmV3VGV4dDwvdHQ+LiAgQWZ0ZXIgdGhpcworICAgICAqIG9wZXJhdGlvbiB0aGUgc2VsZWN0aW9uIHJhbmdlIGlzIGFuIGluc2VydGlvbiBwb2ludCBhdCB0aGUKKyAgICAgKiBlbmQgb2YgdGhlIG5ldyB0ZXh0LgorICAgICAqIEBwYXJhbSBuZXdUZXh0IHRoZSB0ZXh0IHdpdGggd2hpY2ggdG8gcmVwbGFjZSB0aGUgcmFuZ2UKKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gcmVwbGFjZQorICAgICAqIEBwYXJhbSBlbmQgdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gcmVwbGFjZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlcGxhY2VSYW5nZShNQ29uc3RUZXh0IG5ld1RleHQsIGludCBzdGFydCwgaW50IGVuZCkgeworCisgICAgICAgIGZJbXBsLnJlcGxhY2VSYW5nZShuZXdUZXh0LCBzdGFydCwgZW5kKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgVGV4dFBhbmVsLgorICAgICAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgVGV4dFBhbmVsCisgICAgICovCisgICAgcHVibGljIGludCBnZXRUZXh0TGVuZ3RoKCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRUZXh0TGVuZ3RoKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSB0ZXh0IGRvY3VtZW50IGluIHRoZSBUZXh0UGFuZWwuCisgICAgICogQHJldHVybiB0aGUgdGV4dCBkb2N1bWVudCBpbiB0aGUgVGV4dFBhbmVsLgorICAgICAqLworICAgIHB1YmxpYyBNQ29uc3RUZXh0IGdldFRleHQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldFRleHQoKTsKKyAgICB9CisKKy8vPT09PT09PT09PT09CisvLyBTZWxlY3Rpb24gQWNjZXNzCisvLz09PT09PT09PT09PQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24uCisgICAgICovCisgICAgcHVibGljIGludCBnZXRTZWxlY3Rpb25TdGFydCgpIHsKKworICAgICAgICByZXR1cm4gZkltcGwuZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24uCisgICAgICovCisgICAgcHVibGljIGludCBnZXRTZWxlY3Rpb25FbmQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldFNlbGVjdGlvbkVuZCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2UuICBUaGlzIGlzCisgICAgICogZXF1aXZhbGVudCB0byA8dHQ+c2VsZWN0KHNlbGVjdGlvblN0YXJ0LCBnZXRTZWxlY3Rpb25FbmQoKSk8L3R0Pi4KKyAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSBuZXcgc2VsZWN0aW9uIHJhbmdlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50IHNlbGVjdGlvblN0YXJ0KSB7CisKKyAgICAgICAgZkltcGwuc2V0U2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9uU3RhcnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2UuICBUaGlzIGlzCisgICAgICogZXF1aXZhbGVudCB0byA8dHQ+c2VsZWN0KGdldFNlbGVjdGlvblN0YXJ0KCksIHNlbGVjdGlvbkVuZCk8L3R0Pi4KKyAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSBuZXcgc2VsZWN0aW9uIHJhbmdlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGludCBzZWxlY3Rpb25FbmQpIHsKKworICAgICAgICBmSW1wbC5zZXRTZWxlY3Rpb25FbmQoc2VsZWN0aW9uRW5kKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHNlbGVjdGlvbiByYW5nZSB0byBhbiBpbnNlcnRpb24gcG9pbnQgYXQgdGhlIGdpdmVuCisgICAgICogb2Zmc2V0LiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgICogPHR0PnNlbGVjdChwb3NpdGlvbiwgcG9zaXRpb24pPC90dD4uCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBvZmZzZXQgb2YgdGhlIG5ldyBpbnNlcnRpb24gcG9pbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDYXJldFBvc2l0aW9uKGludCBwb3NpdGlvbikgeworCisgICAgICAgIGZJbXBsLnNldENhcmV0UG9zaXRpb24ocG9zaXRpb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgc2VsZWN0aW9uIHJhbmdlIHRvIHRoZSBnaXZlbiByYW5nZS4gIFRoZSByYW5nZSBzdGFydAorICAgICAqIGlzIHBpbm5lZCBiZXR3ZWVuIDAgYW5kIHRoZSB0ZXh0IGxlbmd0aDsgIHRoZSByYW5nZSBlbmQgaXMgcGlubmVkCisgICAgICogYmV0d2VlbiB0aGUgcmFuZ2Ugc3RhcnQgYW5kIHRoZSBlbmQgb2YgdGhlIHRleHQuICBUaGVzZSBzZW1hbnRpY3MKKyAgICAgKiBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIDx0dD5qYXZhLmF3dC5UZXh0Q29tcG9uZW50PC90dD4uCisgICAgICogVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgdGV4dCBpcyBub3Qgc2VsZWN0YWJsZS4KKyAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhcnQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlCisgICAgICogQHBhcmFtIHNlbGVjdGlvbkVuZCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZWxlY3QoaW50IHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uRW5kKSB7CisKKyAgICAgICAgZkltcGwuc2VsZWN0KHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlbGVjdCBhbGwgb2YgdGhlIHRleHQgaW4gdGhlIGRvY3VtZW50LiAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZgorICAgICAqIHRoZSB0ZXh0IGlzIG5vdCBzZWxlY3RhYmxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNlbGVjdEFsbCgpIHsKKworICAgICAgICBmSW1wbC5zZWxlY3RBbGwoKTsKKyAgICB9CisKKworLy89PT09PT09PT09PT0KKy8vIEZvcm1hdCBXaWR0aAorLy89PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdG90YWwgZm9ybWF0IHdpZHRoLCBpbiBwaXhlbHMuICBUaGUgZm9ybWF0IHdpZHRoIGlzIHRoZQorICAgICAqIHdpZHRoIHRvIHdoaWNoIHRleHQgaXMgd3JhcHBlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBmb3JtYXQgd2lkdGgKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZvcm1hdFdpZHRoKCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRGb3JtYXRXaWR0aCgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyYWdyYXBoIGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgbGVmdC10by1yaWdodC4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGFuIG9mZnNldCBpbiB0aGUgdGV4dAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyYWdyYXBoIGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgbGVmdC10by1yaWdodAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHBhcmFncmFwaElzTGVmdFRvUmlnaHQoaW50IG9mZnNldCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZJbXBsLnBhcmFncmFwaElzTGVmdFRvUmlnaHQob2Zmc2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgdW5kb25lLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgdW5kb25lLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNhblVuZG8oKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmNhblVuZG8oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgcmVkb25lLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSB3aGljaCBjYW4gYmUgcmVkb25lLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNhblJlZG8oKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmNhblJlZG8oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRhaW5zIGNvbnRlbnRzIHdoaWNoIGNvdWxkIGJlCisgICAgICogdHJhbnNmZXJlZCBpbnRvIHRoZSB0ZXh0LgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY2xpcGJvYXJkIGhhcyB0ZXh0IGNvbnRlbnQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gY2xpcGJvYXJkTm90RW1wdHkoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmNsaXBib2FyZE5vdEVtcHR5KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIEF0dHJpYnV0ZU1hcCBvZiBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMuICBUaGUgZGVmYXVsdAorICAgICAqIHZhbHVlcyBhcmUgdXNlZCB3aGVuIGRpc3BsYXlpbmcgdGV4dCBmb3IgdmFsdWVzIHdoaWNoIGFyZSBub3QKKyAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHRleHQuCisgICAgICogQHJldHVybiBhbiBBdHRyaWJ1dGVNYXAgb2YgZGVmYXVsdCBrZXktdmFsdWUgcGFpcnMKKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlTWFwIGdldERlZmF1bHRWYWx1ZXMoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldERlZmF1bHRWYWx1ZXMoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnNwZWN0cyB0aGUgY2hhcmFjdGVyIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbgorICAgICAqIHJhbmdlIChvciB0aGUgdHlwaW5nIHN0eWxlIGF0IHRoZSBpbnNlcnRpb24gcG9pbnQpLiAgSXQgcmV0dXJuczoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPlRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4sIGlmIHRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4KKyAgICAgKiBpcyB0aGUgc2FtZSBpbiBhbGwgb2YgdGhlIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbiwgb3I8L2xpPgorICAgICAqIDxsaT48dHQ+TVVMVElQTEVfVkFMVUVTPC90dD4sIGlmIHR3byBvciBtb3JlIHN0eWxlIHJ1bnMgaGF2ZSBkaWZmZXJlbnQgCisgICAgICogdmFsdWVzIGZvciA8dHQ+a2V5PC90dD4uPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIElmIGEgc3R5bGUgcnVuIGRvZXMgbm90IGNvbnRhaW4gPHR0PmtleTwvdHQ+LAorICAgICAqIGl0cyB2YWx1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHN0eWxlIGZvciA8dHQ+a2V5PC90dD4sCisgICAgICogYXMgZGVmaW5lZCBieSB0aGUgZGVmYXVsdCB2YWx1ZXMgQXR0cmlidXRlTWFwLiAgTm90ZSB0aGF0IGlmCisgICAgICogPHR0PmtleTwvdHQ+IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIHRoaXMgbWV0aG9kIG1heSByZXR1cm4KKyAgICAgKiBudWxsLgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc3R5bGUgbWVudXMuCisgICAgICogQHBhcmFtIGtleSB0aGUga2V5IHVzZWQgdG8gcmV0cmlldmUgdmFsdWVzIGZvciBjb21wYXJpc29uCisgICAgICogQHNlZSBNVGV4dFBhbmVsI01VTFRJUExFX1ZBTFVFUworICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0Q2hhcmFjdGVyU3R5bGVPdmVyU2VsZWN0aW9uKE9iamVjdCBrZXkpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRDaGFyYWN0ZXJTdHlsZU92ZXJTZWxlY3Rpb24oa2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnNwZWN0cyB0aGUgcGFyYWdyYXBoIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbgorICAgICAqIHJhbmdlIChvciB0aGUgdHlwaW5nIHN0eWxlIGF0IHRoZSBpbnNlcnRpb24gcG9pbnQpLiAgSXQgcmV0dXJuczoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPlRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4sIGlmIHRoZSB2YWx1ZSBvZiA8dHQ+a2V5PC90dD4KKyAgICAgKiBpcyB0aGUgc2FtZSBpbiBhbGwgb2YgdGhlIHN0eWxlIHJ1bnMgaW4gdGhlIHNlbGVjdGlvbiwgb3I8L2xpPgorICAgICAqIDxsaT48dHQ+TVVMVElQTEVfVkFMVUVTPC90dD4sIGlmIHR3byBvciBtb3JlIHN0eWxlIHJ1bnMgaGF2ZSAKKyAgICAgKiBkaWZmZXJlbnQgdmFsdWVzIGZvciA8dHQ+a2V5PC90dD4uPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIElmIGEgc3R5bGUgcnVuIGRvZXMgbm90IGNvbnRhaW4gPHR0PmtleTwvdHQ+LAorICAgICAqIGl0cyB2YWx1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHN0eWxlIGZvciA8dHQ+a2V5PC90dD4sCisgICAgICogYXMgZGVmaW5lZCBieSB0aGUgZGVmYXVsdCB2YWx1ZXMgQXR0cmlidXRlTWFwLiAgTm90ZSB0aGF0IGlmCisgICAgICogPHR0PmtleTwvdHQ+IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIHRoaXMgbWV0aG9kIG1heSByZXR1cm4KKyAgICAgKiBudWxsLgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc3R5bGUgbWVudXMuCisgICAgICogQHBhcmFtIGtleSB0aGUga2V5IHVzZWQgdG8gcmV0cmlldmUgdmFsdWVzIGZvciBjb21wYXJpc29uCisgICAgICogQHNlZSBNVGV4dFBhbmVsI01VTFRJUExFX1ZBTFVFUworICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0UGFyYWdyYXBoU3R5bGVPdmVyU2VsZWN0aW9uKE9iamVjdCBrZXkpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRQYXJhZ3JhcGhTdHlsZU92ZXJTZWxlY3Rpb24oa2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIHNlbGVjdGVkIHRleHQgZnJvbSB0aGUgZG9jdW1lbnQgYW5kIHBsYWNlIGl0CisgICAgICogb24gdGhlIGNsaXBib2FyZC4gIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIHRleHQKKyAgICAgKiBpcyBub3QgZWRpdGFibGUsIG9yIGlmIG5vIHRleHQgaXMgc2VsZWN0ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY3V0KCkgeworICAgICAgICBmSW1wbC5jdXQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQbGFjZSB0aGUgc2VsZWN0ZWQgdGV4dCBvbiB0aGUgY2xpcGJvYXJkLiAgVGhpcyBtZXRob2QgaGFzCisgICAgICogbm8gZWZmZWN0IGlmIG5vIHRleHQgaXMgc2VsZWN0ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weSgpIHsKKyAgICAgICAgZkltcGwuY29weSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcGxhY2UgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIHRleHQgb24gdGhlIGNsaXBib2FyZC4KKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSB0ZXh0IGlzIG5vdCBlZGl0YWJsZSwgb3IgaWYgbm8KKyAgICAgKiB0ZXh0IGlzIG9uIHRoZSBjbGlwYm9hcmQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcGFzdGUoKSB7CisgICAgICAgIGZJbXBsLnBhc3RlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIHNlbGVjdGVkIHRleHQgZnJvbSB0aGUgZG9jdW1lbnQsIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIGNsaXBib2FyZC4KKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZQorICAgICAqIHRleHQgaXMgbm90IGVkaXRhYmxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyKCkgeworICAgICAgICBmSW1wbC5jbGVhcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVuZG8gdGhlIG1vc3QgcmVjZW50IHRleHQgY2hhbmdlLiAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZgorICAgICAqIHRoZXJlIGlzIG5vIGNoYW5nZSB0byB1bmRvLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHVuZG8oKSB7CisgICAgICAgIGZJbXBsLnVuZG8oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWRvIHRoZSBtb3N0IHJlY2VudCB0ZXh0IGNoYW5nZS4gIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYKKyAgICAgKiB0aGVyZSBpcyBubyBjaGFuZ2UgdG8gcmVkby4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZWRvKCkgeworICAgICAgICBmSW1wbC5yZWRvKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY29tbWFuZHMgdGhlIGNvbW1hbmQgbG9nIGNhbiBob2xkLgorICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBjb21tYW5kcyB0aGUgY29tbWFuZCBsb2cgY2FuIGhvbGQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldENvbW1hbmRMb2dTaXplKCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5nZXRDb21tYW5kTG9nU2l6ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBjb21tYW5kIGxvZyBjYW4gaG9sZC4gIEFsbAorICAgICAqIHJlZG9hYmxlIGNvbW1hbmRzIGFyZSByZW1vdmVkIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgorICAgICAqIEBwYXJhbSBzaXplIHRoZSBudW1iZXIgb2YgY29tbWFuZHMga2VwdCBpbiB0aGUgY29tbWFuZCBsb2cKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb21tYW5kTG9nU2l6ZShpbnQgc2l6ZSkgeworICAgICAgICBmSW1wbC5zZXRDb21tYW5kTG9nU2l6ZShzaXplKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gdGhlIGNvbW1hbmQgbG9nLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyQ29tbWFuZExvZygpIHsKKyAgICAgICAgZkltcGwuY2xlYXJDb21tYW5kTG9nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTW9kaWZ5IHRoZSBjaGFyYWN0ZXIgc3R5bGVzIG9uIHRoZSBzZWxlY3RlZCBjaGFyYWN0ZXJzLiAgSWYgbm8gY2hhcmFjdGVycworICAgICAqIGFyZSBzZWxlY3RlZCwgbW9kaWZ5IHRoZSB0eXBpbmcgc3R5bGUuCisgICAgICogQHBhcmFtIG1vZGlmaWVyIHRoZSBTdHlsZU1vZGlmaWVyIHdpdGggd2hpY2ggdG8gbW9kaWZ5IHRoZSBzdHlsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb2RpZnlDaGFyYWN0ZXJTdHlsZU9uU2VsZWN0aW9uKFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIpIHsKKyAgICAgICAgZkltcGwubW9kaWZ5Q2hhcmFjdGVyU3R5bGVPblNlbGVjdGlvbihtb2RpZmllcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogTW9kaWZ5IHRoZSBwYXJhZ3JhcGggc3R5bGVzIGluIHBhcmFncmFwaHMgY29udGFpbmluZyBzZWxlY3RlZCBjaGFyYWN0ZXJzLCBvcgorICAgICAqIHRoZSBwYXJhZ3JhcGggY29udGFpbmluZyB0aGUgaW5zZXJ0aW9uIHBvaW50LgorICAgICAqIEBwYXJhbSBtb2RpZmllciB0aGUgU3R5bGVNb2RpZmllciB3aXRoIHdoaWNoIHRvIG1vZGlmeSB0aGUgc3R5bGVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgbW9kaWZ5UGFyYWdyYXBoU3R5bGVPblNlbGVjdGlvbihTdHlsZU1vZGlmaWVyIG1vZGlmaWVyKSB7CisgICAgICAgIGZJbXBsLm1vZGlmeVBhcmFncmFwaFN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgS2V5UmVtYXAgdXNlZCB0byBwcm9jZXNzIGtleSBldmVudHMuCisgICAgICogQHJldHVybiB0aGUga2V5IHJlbWFwIHVzZWQgdG8gcHJvY2VzcyBrZXkgZXZlbnRzCisgICAgICogQHNlZSAjc2V0S2V5UmVtYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgS2V5UmVtYXAgZ2V0S2V5UmVtYXAoKSB7CisKKyAgICAgICAgcmV0dXJuIGZJbXBsLmdldEtleVJlbWFwKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXNlIHRoZSBnaXZlbiBLZXlSZW1hcCB0byBtYXAga2V5IGV2ZW50cyB0byBjaGFyYWN0ZXJzLgorICAgICAqIE9ubHkga2V5CisgICAgICogZXZlbnRzIGFyZSBhZmZlY3RlZCBieSB0aGUgcmVtYXA7ICBvdGhlciB0ZXh0IGVudGVyaW5nIHRoZQorICAgICAqIGNvbnRyb2wgKHZpYSB0aGUgY2xpcGJvYXJkLCBmb3IgZXhhbXBsZSkgaXMgbm90IGFmZmVjdGVkCisgICAgICogYnkgdGhlIEtleVJlbWFwLgorICAgICAqIDxwPgorICAgICAqIERvIG5vdCBwYXNzIDx0dD5udWxsPC90dD4gdG8gdGhpcyBtZXRob2QgdG8gbGVhdmUga2V5CisgICAgICogZXZlbnRzIHVubWFwcGVkLiAgSW5zdGVhZCwgdXNlIDx0dD5LZXlSZW1hcC5nZXRJZGVudGl0eVJlbWFwKCk8L3R0PgorICAgICAqIEBwYXJhbSByZW1hcCB0aGUgS2V5UmVtYXAgdG8gdXNlIGZvciBtYXBwaW5nIGtleSBldmVudHMgdG8gY2hhcmFjdGVycworICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLk51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHBhcmFtZXRlciBpcyBudWxsCisgICAgICogQHNlZSBLZXlSZW1hcAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEtleVJlbWFwKEtleVJlbWFwIHJlbWFwKSB7CisKKyAgICAgICAgZkltcGwuc2V0S2V5UmVtYXAocmVtYXApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbW9kaWZpY2F0aW9uIGZsYWcgb2YgdGhlIGN1cnJlbnQgdGV4dCBjaGFuZ2UuCisgICAgICogQHNlZSAjc2V0TW9kaWZpZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc01vZGlmaWVkKCkgeworCisgICAgICAgIHJldHVybiBmSW1wbC5pc01vZGlmaWVkKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBtb2RpZmljYXRpb24gZmxhZyBvZiB0aGUgY3VycmVudCB0ZXh0IGNoYW5nZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RpZmllZChib29sZWFuIG1vZGlmaWVkKSB7CisgICAgICAgIAorICAgICAgICBmSW1wbC5zZXRNb2RpZmllZChtb2RpZmllZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgZm9yIEtleUV2ZW50Rm9yd2FyZGVyJ3MgdXNlIG9ubHkhCisgICAgICovCisgICAgQVRleHRQYW5lbEltcGwgZ2V0SW1wbCgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmSW1wbDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dFBhbmVsRXZlbnQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0UGFuZWxFdmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjZDY2MTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dFBhbmVsRXZlbnQuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGV4dFBhbmVsRXZlbnQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKKworLyoqCisgKiBUZXh0UGFuZWxFdmVudCBpcyBnZW5lcmF0ZWQgYnkgYW4gTVRleHRQYW5lbCB0byBub3RpZnkgbGlzdGVuZXJzCisgKiBvZiBjaGFuZ2VzLiAgVG8gcmVjZWl2ZSBUZXh0UGFuZWxFdmVudHMgZnJvbSBhbiBNVGV4dFBhbmVsLCBjbGllbnRzCisgKiBtdXN0IGltcGxlbWVudCBUZXh0UGFuZWxMaXN0ZW5lciBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8gdGhlIE1UZXh0UGFuZWwncworICogbGlzdCBvZiBsaXN0ZW5lcnMuCisgKiA8cD4KKyAqIFNvbWUgZXZlbnQgdHlwZXMgYXJlIHNwZWNpYWwgY2FzZXMgb2Ygb3RoZXJzLiAgVGhpcyBpcyBpbnRlbnRpb25hbCAtIGl0CisgKiBhbGxvd3Mgbm90aWZpY2F0aW9ucyB0byBiZSBzZW50IGxlc3Mgb2Z0ZW4gaW4gY2VydGFpbiBjb21tb24gY2FzZXMuICBGb3IKKyAqIGV4YW1wbGUsIGEgY2hhbmdlIGluIHRoZSBzZWxlY3Rpb24gcmFuZ2UgZ2VuZXJhdGVzIGEgU0VMRUNUSU9OX1JBTkdFX0NIQU5HRUQgCisgKiBldmVudC4gIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiBvY2N1cnJhbmNlLCBhbmQgaWYgbWFueSBjbGllbnRzIGxpc3RlbiBmb3IgdGhpcworICogZXZlbnQsIHRoZXJlIG1heSBiZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHBlbmFsdHkuICBCeQorICogbGlzdGVuaW5nIGZvciBhIG1vcmUgc3BlY2lhbGl6ZWQgZXZlbnQgKHN1Y2ggYXMgU0VMRUNUSU9OX0VNUFRZX0NIQU5HRUQpLCBjbGllbnRzCisgKiBjYW4gcmVkdWNlIHRoZSBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyBzZW50LgorICogCisgKiBAc2VlIE1UZXh0UGFuZWwKKyAqIEBzZWUgVGV4dFBhbmVsTGlzdGVuZXIKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFRleHRQYW5lbEV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGUgbG93ZXIgYm91bmQgb2YgVGV4dFBhbmVsRXZlbnQgSUQncy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURVhUX1BBTkVMX0ZJUlNUID0gMTE7CisKKyAgICAvKioKKyAgICAgKiBFdmVudHMgb2YgdGhpcyB0eXBlIGluZGljYXRlIGEgY2hhbmdlIGluIHRoZSBzZWxlY3Rpb24gcmFuZ2UuCisgICAgICogVGhpcyBvY2N1cnMgcXVpdGUgb2Z0ZW4uICBNb3N0IGNsaWVudHMgZG8gbm90IG5lZWQgdG8gYmUgCisgICAgICogbm90aWZpZWQgZXZlcnkgdGltZSB0aGUgc2VsZWN0aW9uIHJhbmdlIGNoYW5nZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VMRUNUSU9OX1JBTkdFX0NIQU5HRUQgPSAxMTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBFdmVudHMgb2YgdGhpcyB0eXBlIGFyZSBzZW50IHdoZW4gdGhlIHNlbGVjdGlvbiByYW5nZSBiZWNvbWVzCisgICAgICogMC1sZW5ndGggYWZ0ZXIgbm90IGJlaW5nIDAtbGVuZ3RoLCBvciB2aWNlIHZlcnNhLiAgVGhpcyBldmVudAorICAgICAqIGlzIGEgc3BlY2lhbCBjYXNlIG9mIFNFTEVDVElPTl9SQU5HRV9DSEFOR0VELgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFTEVDVElPTl9FTVBUWV9DSEFOR0VEID0gMTI7CisgICAgCisgICAgLyoqCisgICAgICogRXZlbnRzIG9mIHRoaXMgdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSB0ZXh0IGluIHRoZSBUZXh0UGFuZWwgY2hhbmdlZC4KKyAgICAgKiBUaGlzIHR5cGUgb2YgZXZlbnQgb2NjdXJzIG9mdGVuLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFRfQ0hBTkdFRCA9IDEzOworICAgIAorICAgIC8qKgorICAgICAqIEV2ZW50cyBvZiB0aGlzIHR5cGUgYXJlIHNlbnQgd2hlbiB0aGUgc3R5bGVzIGluIHRoZSBjdXJyZW50CisgICAgICogc2VsZWN0aW9uIGNoYW5nZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRUxFQ1RJT05fU1RZTEVTX0NIQU5HRUQgPSAxNDsKKyAgICAgCisgICAgLyoqCisgICAgICogRXZlbnRzIG9mIHRoaXMgdHlwZSBhcmUgc2VudCB3aGVuIHRoZSB1bmRvL3JlZG8gc3RhdGUgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTkRPX1NUQVRFX0NIQU5HRUQgPSAxNTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBFdmVudHMgb2YgdGhpcyB0eXBlIGFyZSBzZW50IHdoZW4gdGhlIGNsaXBib2FyZCBzdGF0ZSBjaGFuZ2VzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMSVBCT0FSRF9DSEFOR0VEID0gMTY7CisgICAgCisgICAgLyoqCisgICAgICogRXZlbnRzIG9mIHRoaXMgdHlwZSBhcmUgc2VudCB3aGVuIAorICAgICAqIHRoZSB3cmFwIHdpZHRoIG9mIHRoZSB0ZXh0IGNoYW5nZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STUFUX1dJRFRIX0NIQU5HRUQgPSAxNzsKKworICAgIC8qKgorICAgICAqIEV2ZW50cyBvZiB0aGlzIHR5cGUgYXJlIHNlbnQgd2hlbiB0aGUga2V5IHJlbWFwIGNoYW5nZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0VZUkVNQVBfQ0hBTkdFRCA9IDE4OworCisgICAgLyoqCisgICAgICogVGhlIHVwcGVyIGJvdW5kIG9mIFRleHRQYW5lbEV2ZW50IElEJ3MuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVYVF9QQU5FTF9MQVNUID0gMTg7CisKKyAgICBwcml2YXRlIGludCBmSWQ7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgVGV4dFBhbmVsRXZlbnQuCisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgTVRleHRQYW5lbCB3aGljaCBnZW5lcmF0ZWQgdGhlIGV2ZW50CisgICAgICogQHBhcmFtIGlkIHRoZSBJRCBmb3IgdGhpcyBldmVudC4gIE11c3QgYmUgd2l0aGluCisgICAgICogW1RFWFRfUEFORUxfRklSU1QsIFRFWFRfUEFORUxfTEFTVF0uCisgICAgICovCisgICAgVGV4dFBhbmVsRXZlbnQoTVRleHRQYW5lbCBzb3VyY2UsIGludCBpZCkgeworCisgICAgICAgIHN1cGVyKHNvdXJjZSk7CisgICAgICAgIGlmIChpZCA8IFRFWFRfUEFORUxfRklSU1QgfHwgaWQgPiBURVhUX1BBTkVMX0xBU1QpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlkIG91dCBvZiByYW5nZSIpOworICAgICAgICB9CisgICAgICAgIGZJZCA9IGlkOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZXZlbnQgSUQgZm9yIHRoaXMgZXZlbnQuICBFdmVudCBJRCdzIGFyZQorICAgICAqIG9uZSBvZiB0aGUgY2xhc3MgY29uc3RhbnRzLgorICAgICAqIEByZXR1cm4gdGhlIGV2ZW50IElEIGZvciB0aGlzIGV2ZW50CisgICAgICovCisgICAgcHVibGljIGludCBnZXRJRCgpIHsKKworICAgICAgICByZXR1cm4gZklkOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGRlc2MgPSBudWxsOworICAgICAgICAKKyAgICAgICAgc3dpdGNoKGZJZCkgeworICAgICAgICAgICAgY2FzZSBTRUxFQ1RJT05fUkFOR0VfQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICBkZXNjID0gIlNFTEVDVElPTl9SQU5HRV9DSEFOR0VEIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU0VMRUNUSU9OX0VNUFRZX0NIQU5HRUQ6CisgICAgICAgICAgICAgICAgZGVzYyA9ICJTRUxFQ1RJT05fRU1QVFlfQ0hBTkdFRCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRFWFRfQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICBkZXNjID0gIlRFWFRfQ0hBTkdFRCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNFTEVDVElPTl9TVFlMRVNfQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICBkZXNjID0gIlNFTEVDVElPTl9TVFlMRVNfQ0hBTkdFRCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVORE9fU1RBVEVfQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICBkZXNjID0gIlVORE9fU1RBVEVfQ0hBTkdFRCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENMSVBCT0FSRF9DSEFOR0VEOgorICAgICAgICAgICAgICAgIGRlc2MgPSAiQ0xJUEJPQVJEX0NIQU5HRUQiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGT1JNQVRfV0lEVEhfQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICBkZXNjID0gIkZPUk1BVF9XSURUSF9DSEFOR0VEIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS0VZUkVNQVBfQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICBkZXNjID0gIktFWVJFTUFQX0NIQU5HRUQiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiW1RleHRQYW5lbEV2ZW50OiIrZGVzYysiXSI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRQYW5lbExpc3RlbmVyLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dFBhbmVsTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2UwNzAwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRQYW5lbExpc3RlbmVyLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGV4dFBhbmVsTGlzdGVuZXIuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MToyMyAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHdoaWNoCisgKiByZWNlaXZlIGNoYW5nZSBub3RpZmljYXRpb25zIGZyb20gYW4gTVRleHRQYW5lbC4KKyAqIEBzZWUgTVRleHRQYW5lbAorICogQHNlZSBUZXh0UGFuZWxFdmVudAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRleHRQYW5lbExpc3RlbmVyIHsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLyoqCisgICAgICogTm90aWZ5IGxpc3RlbmVyIG9mIGFuIE1UZXh0UGFuZWwgY2hhbmdlLgorICAgICAqIEBwYXJhbSBldmVudCBhIFRleHRQYW5lbEV2ZW50IGluZGljYXRpbmcgd2hhdCBoYXBwZW5lZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRleHRFdmVudE9jY3VycmVkKFRleHRQYW5lbEV2ZW50IGV2ZW50KTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBsaXN0ZW5lciBuZWVkcyB0byBiZSBub3RpZmllZCBvZiAKKyAgICAgKiB0aGUgZ2l2ZW4gZXZlbnQgdHlwZS4gIFRoaXMgYWxsb3dzIGEgdGV4dCBwYW5lbCB0byBhdm9pZAorICAgICAqIHNlbmRpbmcgZXZlbnRzIHRvIHVuaW50ZXJlc3RlZCBwYXJ0aWVzLgorICAgICAqIEBwYXJhbSB0eXBlIGFuIGV2ZW50IElEIGZyb20gVGV4dFBhbmVsRXZlbnQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBsaXN0ZW5lciBuZWVkcyB0byBiZSBub3RpZmllZCBvZgorICAgICAqIGV2ZW50cyBvZiB0aGUgZ2l2ZW4gdHlwZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHJlc3BvbmRzVG9FdmVudFR5cGUoaW50IHR5cGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRQYW5lbFNldHRpbmdzLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dFBhbmVsU2V0dGluZ3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYmQ2OTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRQYW5lbFNldHRpbmdzLmphdmEKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRleHRQYW5lbFNldHRpbmdzLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDggJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBqYXZhLmF3dC5Db2xvcjsKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLlRleHRBdHRyaWJ1dGU7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0YW5kYXJkVGFiUnVsZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBzZXR0aW5ncyB1c2VkIHdoZW4gY29uc3RydWN0aW5nIGFuIE1UZXh0UGFuZWwuCisgKiBUaGUgc2V0dGluZ3MgY29udHJvbGVkIGJ5IHRoaXMgY2xhc3MgaW5jbHVkZToKKyAqIDx1bD4KKyAqIDxsaT53aGV0aGVyIHRoZSB0ZXh0IGluIHRoZSBNVGV4dFBhbmVsIGNhbiBiZSBzY3JvbGxlZDwvbGk+CisgKiA8bGk+d2hldGhlciBzY3JvbGwgYmFycyBpbiB0aGUgTVRleHRQYW5lbCBhcmUgdmlzaWJsZTwvbGk+CisgKiA8bGk+d2hldGhlciB0aGUgdGV4dCBpbiB0aGUgTVRleHRQYW5lbCBjYW4gYmUgc2VsZWN0ZWQ8L2xpPgorICogPGxpPndoZXRoZXIgdGhlIHRleHQgaW4gdGhlIE1UZXh0UGFuZWwgY2FuIGJlIGVkaXRlZDwvbGk+CisgKiA8bGk+d2hldGhlciBsaW5lcyBvZiB0ZXh0IHdyYXAgdG8gdGhlIE1UZXh0UGFuZWwncyB3aWR0aCwgb3IKKyAqIG9ubHkgZW5kIGF0IHBhcmFncmFwaCBzZXBhcmF0b3JzPC9saT4KKyAqIDxsaT50aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIHN0eWxlczwvbGk+CisgKiA8L3VsPgorICogU29tZSBzZXR0aW5ncyBhcmUgZGVwZW5kZW50IG9uIG90aGVycy4gIFNjcm9sbCBiYXJzIGFyZSB2aXNpYmxlCisgKiBvbmx5IGlmIHRoZSB0ZXh0IGlzIHNjcm9sbGFibGUuICBBbHNvLCB0ZXh0IHdoaWNoIGlzIG5vdCBlZGl0YWJsZQorICogaWYgaXQgaXMgbm90IHNlbGVjdGFibGUuCisgKiA8cD4KKyAqCisgKiBAc2VlIE1UZXh0UGFuZWwKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFRleHRQYW5lbFNldHRpbmdzIGltcGxlbWVudHMgQ2xvbmVhYmxlLCBTZXJpYWxpemFibGUgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVNYXAgREVGQVVMVFM7CisgICAgc3RhdGljIHsKKyAgICAgICAgZmluYWwgRmxvYXQgZmxvYXRaZXJvID0gbmV3IEZsb2F0KDAuMGYpOworCisgICAgICAgIEhhc2h0YWJsZSBkZWZhdWx0cyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuRkFNSUxZLCAiU2VyaWYiKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuV0VJR0hULCBuZXcgRmxvYXQoMS4wZikpOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5QT1NUVVJFLCBmbG9hdFplcm8pOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5TSVpFLCBuZXcgRmxvYXQoMTguMGYpKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuU1VQRVJTQ1JJUFQsIG5ldyBJbnRlZ2VyKDApKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuRk9SRUdST1VORCwgQ29sb3IuYmxhY2spOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkUsIG5ldyBJbnRlZ2VyKC0xKSk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLlNUUklLRVRIUk9VR0gsIEJvb2xlYW4uRkFMU0UpOworCisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLkVYVFJBX0xJTkVfU1BBQ0lORywgZmxvYXRaZXJvKTsKKyAgICAgICAgZGVmYXVsdHMucHV0KFRleHRBdHRyaWJ1dGUuRklSU1RfTElORV9JTkRFTlQsIGZsb2F0WmVybyk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLk1JTl9MSU5FX1NQQUNJTkcsIGZsb2F0WmVybyk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLkxJTkVfRkxVU0gsIFRleHRBdHRyaWJ1dGUuRkxVU0hfTEVBRElORyk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLkxFQURJTkdfTUFSR0lOLCBmbG9hdFplcm8pOworICAgICAgICBkZWZhdWx0cy5wdXQoVGV4dEF0dHJpYnV0ZS5UUkFJTElOR19NQVJHSU4sIGZsb2F0WmVybyk7CisgICAgICAgIGRlZmF1bHRzLnB1dChUZXh0QXR0cmlidXRlLlRBQl9SVUxFUiwgbmV3IFN0YW5kYXJkVGFiUnVsZXIoKSk7CisKKyAgICAgICAgREVGQVVMVFMgPSBuZXcgQXR0cmlidXRlTWFwKGRlZmF1bHRzKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBib29sZWFuIGZTY3JvbGxhYmxlID0gdHJ1ZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gZlNjcm9sbEJhcnNWaXNpYmxlID0gdHJ1ZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gZlNlbGVjdGFibGUgPSB0cnVlOworICAgIHByaXZhdGUgYm9vbGVhbiBmRWRpdGFibGUgPSB0cnVlOworICAgIHByaXZhdGUgYm9vbGVhbiBmV3JhcHMgPSB0cnVlOworICAgIHByaXZhdGUgQXR0cmlidXRlTWFwIGZEZWZhdWx0VmFsdWVzID0gREVGQVVMVFM7CisgICAgCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgVGV4dFBhbmVsU2V0dGluZ3MgaW5zdGFuY2Ugd2l0aCBhbGwgc2V0dGluZ3MKKyAgICAgKiBzZXQgdG8gdHJ1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgVGV4dFBhbmVsU2V0dGluZ3MoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgbmV3IFRleHRQYW5lbFNldHRpbmdzIGluc3RhbmNlIHdpdGggdGhlCisgICAgICogc2FtZSBzZXR0aW5ncyBhcyB0aGlzLgorICAgICAqIEByZXR1cm4gYSBuZXcgVGV4dFBhbmVsU2V0dGluZ3MgaW5zdGFuY2UKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgeworCisgICAgICAgIFRleHRQYW5lbFNldHRpbmdzIHJocyA9IG5ldyBUZXh0UGFuZWxTZXR0aW5ncygpOworCisgICAgICAgIHJocy5mU2Nyb2xsYWJsZSA9IGZTY3JvbGxhYmxlOworICAgICAgICByaHMuZlNjcm9sbEJhcnNWaXNpYmxlID0gZlNjcm9sbEJhcnNWaXNpYmxlOworICAgICAgICByaHMuZlNlbGVjdGFibGUgPSBmU2VsZWN0YWJsZTsKKyAgICAgICAgcmhzLmZFZGl0YWJsZSA9IGZFZGl0YWJsZTsKKyAgICAgICAgcmhzLmZXcmFwcyA9IGZXcmFwczsKKyAgICAgICAgcmhzLmZEZWZhdWx0VmFsdWVzID0gZkRlZmF1bHRWYWx1ZXM7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmhzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgc2Nyb2xsYWJsZSBzZXR0aW5nLCB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgdGV4dAorICAgICAqIGluIGFuIE1UZXh0UGFuZWwgY2FuIGJlIHNjcm9sbGVkLgorICAgICAqIEByZXR1cm4gdGhlIHNjcm9sbGFibGUgc2V0dGluZworICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGdldFNjcm9sbGFibGUoKSB7CisKKyAgICAgICAgcmV0dXJuIGZTY3JvbGxhYmxlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgc2Nyb2xsYWJsZSBzZXR0aW5nLgorICAgICAqIEBwYXJhbSBzY3JvbGxhYmxlIHRoZSBzY3JvbGxhYmxlIHNldHRpbmcuICBJZiBmYWxzZSwKKyAgICAgKiB0aGUgc2Nyb2xsQmFyc1Zpc2libGUgc2V0dGluZyBpcyBhbHNvIHNldCB0byBmYWxzZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTY3JvbGxhYmxlKGJvb2xlYW4gc2Nyb2xsYWJsZSkgeworCisgICAgICAgIGZTY3JvbGxhYmxlID0gc2Nyb2xsYWJsZTsKKyAgICAgICAgZlNjcm9sbEJhcnNWaXNpYmxlICY9IHNjcm9sbGFibGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBzY3JvbGxCYXJzVmlzaWJsZSBzZXR0aW5nLCB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIKKyAgICAgKiBzY3JvbGwgYmFycyBpbiBhbiBNVGV4dFBhbmVsIGFyZSB2aXNpYmxlLgorICAgICAqIEByZXR1cm4gdGhlIHNjcm9sbEJhcnNWaXNpYmxlIHNldHRpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRTY3JvbGxCYXJzVmlzaWJsZSgpIHsKKworICAgICAgICByZXR1cm4gZlNjcm9sbEJhcnNWaXNpYmxlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgc2Nyb2xsQmFyc1Zpc2libGUgc2V0dGluZy4KKyAgICAgKiBAcGFyYW0gdmlzIHRoZSBzY3JvbGxCYXJzVmlzaWJsZSBzZXR0aW5nLiAgSWYgdHJ1ZSwKKyAgICAgKiB0aGUgc2Nyb2xsYWJsZSBzZXR0aW5nIGlzIGFsc28gc2V0IHRvIHRydWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2Nyb2xsQmFyc1Zpc2libGUoYm9vbGVhbiB2aXMpIHsKKworICAgICAgICBmU2Nyb2xsQmFyc1Zpc2libGUgPSB2aXM7CisgICAgICAgIGZTY3JvbGxhYmxlIHw9IHZpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHNlbGVjdGFibGUgc2V0dGluZywgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyCisgICAgICogdGV4dCBpbiBhbiBNVGV4dFBhbmVsIGNhbiBiZSBzZWxlY3RlZC4KKyAgICAgKiBAcmV0dXJuIHRoZSBzZWxlY3RhYmxlIHNldHRpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRTZWxlY3RhYmxlKCkgeworCisgICAgICAgIHJldHVybiBmU2VsZWN0YWJsZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHNlbGVjdGFibGUgc2V0dGluZy4KKyAgICAgKiBAcGFyYW0gc2VsZWN0YWJsZSB0aGUgc2VsZWN0YWJsZSBzZXR0aW5nLiAgSWYgZmFsc2UsCisgICAgICogdGhlIGVkaXRhYmxlIHNldHRpbmcgaXMgYWxzbyBzZXQgdG8gZmFsc2UuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0YWJsZShib29sZWFuIHNlbGVjdGFibGUpIHsKKworICAgICAgICBmU2VsZWN0YWJsZSA9IHNlbGVjdGFibGU7CisgICAgICAgIGZFZGl0YWJsZSAmPSBzZWxlY3RhYmxlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZWRpdGFibGUgc2V0dGluZywgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyCisgICAgICogdGV4dCBpbiBhbiBNVGV4dFBhbmVsIGNhbiBiZSBlZGl0ZWQuCisgICAgICogQHJldHVybiB0aGUgZWRpdGFibGUgc2V0dGluZworICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGdldEVkaXRhYmxlKCkgeworCisgICAgICAgIHJldHVybiBmRWRpdGFibGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBlZGl0YWJsZSBzZXR0aW5nLgorICAgICAqIEBwYXJhbSBzZWxlY3RhYmxlIHRoZSBzZWxlY3RhYmxlIHNldHRpbmcuICBJZiB0cnVlLAorICAgICAqIHRoZSBzZWxlY3RhYmxlIHNldHRpbmcgaXMgYWxzbyBzZXQgdG8gdHJ1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRFZGl0YWJsZShib29sZWFuIGVkaXRhYmxlKSB7CisKKyAgICAgICAgZkVkaXRhYmxlID0gZWRpdGFibGU7CisgICAgICAgIGZTZWxlY3RhYmxlIHw9IGVkaXRhYmxlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgd3JhcHMgc2V0dGluZywgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyCisgICAgICogbGluZXMgb2YgdGV4dCB3cmFwIHRvIHRoZSBsZW5ndGggb2YgdGhlIE1UZXh0UGFuZWwsCisgICAgICogb3Igb25seSBhdCBwYXJhZ3JhcGggc2VwYXJhdG9ycy4KKyAgICAgKiBAcmV0dXJuIHRoZSB3cmFwcyBzZXR0aW5nCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZ2V0V3JhcHMoKSB7CisKKyAgICAgICAgcmV0dXJuIGZXcmFwczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHdyYXBzIHNldHRpbmcuCisgICAgICogQHBhcmFtIHdyYXBzIHRoZSB3cmFwcyBzZXR0aW5nCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0V3JhcHMoYm9vbGVhbiB3cmFwcykgeworCisgICAgICAgIGZXcmFwcyA9IHdyYXBzOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIEF0dHJpYnV0ZU1hcCBvZiBkZWZhdWx0IHZhbHVlcyBmb3IgY2VydGFpbiBrZXlzLgorICAgICAqIFdoZW4gYSBrZXkgaW4gdGhpcyBBdHRyaWJ1dGVNYXAgaXMgbm90IHNwZWNpZmllZCwgaXRzIHZhbHVlCisgICAgICogaXMgdGFrZW4gZnJvbSB0aGlzIEF0dHJpYnV0ZU1hcC4KKyAgICAgKiBAcmV0dXJuIHRoZSBBdHRyaWJ1dGVNYXAgb2YgZGVmYXVsdCB2YWx1ZXMKKyAgICAgKiBAc2VlIE1UZXh0UGFuZWwjZ2V0RGVmYXVsdFZhbHVlcworICAgICAqLworICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgZ2V0RGVmYXVsdFZhbHVlcygpIHsKKyAgICAKKyAgICAgICAgcmV0dXJuIGZEZWZhdWx0VmFsdWVzOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgZ2l2ZW4gQXR0cmlidXRlTWFwIHRvIHRoZQorICAgICAqIGRlZmF1bHQgdmFsdWVzLiAgSWYgYSBrZXkgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBnaXZlbgorICAgICAqIEF0dHJpYnV0ZU1hcCwgaXRzIHZhbHVlIGluIHRoZSBkZWZhdWx0IHZhbHVlIG1hcCBpcworICAgICAqIHVuY2hhbmdlZC4KKyAgICAgKiBAcGFyYW0gbWFwIGFuIEF0dHJpYnV0ZU1hcCBjb250YWluaW5nIG5ldyBkZWZhdWx0IHZhbHVlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZERlZmF1bHRWYWx1ZXMoQXR0cmlidXRlTWFwIG1hcCkgeworICAgIAorICAgICAgICBmRGVmYXVsdFZhbHVlcyA9IGZEZWZhdWx0VmFsdWVzLmFkZEF0dHJpYnV0ZXMobWFwKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ29tcGFyZSB0aGlzIHRvIGFub3RoZXIgT2JqZWN0LiAgVGhpcyBpcyBlcXVhbAorICAgICAqIHRvIGFub3RoZXIgT2JqZWN0IGlmIHRoZSBvdGhlciBPYmplY3QgaXMgYQorICAgICAqIFRleHRQYW5lbFNldHRpbmdzIGluc3RhbmNlIHdpdGggdGhlIHNhbWUKKyAgICAgKiBzZXR0aW5ncyBhcyB0aGlzIG9uZS4KKyAgICAgKiBAcGFyYW0gcmhzIHRoZSBPYmplY3QgdG8gY29tcGFyZSB0bworICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgcmhzKSB7CisKKyAgICAgICAgaWYgKHJocyA9PSB0aGlzKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyaHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgVGV4dFBhbmVsU2V0dGluZ3Mgb3RoZXI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBvdGhlciA9IChUZXh0UGFuZWxTZXR0aW5ncykgcmhzOworICAgICAgICB9CisgICAgICAgIGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBvdGhlci5mU2Nyb2xsYWJsZSA9PSB0aGlzLmZTY3JvbGxhYmxlICYmCisgICAgICAgICAgICAgICBvdGhlci5mU2Nyb2xsQmFyc1Zpc2libGUgPT0gdGhpcy5mU2Nyb2xsQmFyc1Zpc2libGUgJiYKKyAgICAgICAgICAgICAgIG90aGVyLmZTZWxlY3RhYmxlID09IHRoaXMuZlNlbGVjdGFibGUgJiYKKyAgICAgICAgICAgICAgIG90aGVyLmZFZGl0YWJsZSA9PSB0aGlzLmZFZGl0YWJsZSAmJgorICAgICAgICAgICAgICAgb3RoZXIuZldyYXBzID09IHRoaXMuZldyYXBzICYmCisgICAgICAgICAgICAgICBvdGhlci5mRGVmYXVsdFZhbHVlcy5lcXVhbHModGhpcy5mRGVmYXVsdFZhbHVlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgT2JqZWN0LgorICAgICAqIEByZXR1cm4gdGhlIGhhc2ggY29kZSBmb3IgdGhpcyBPYmplY3QKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworCisgICAgICAgIGludCBjb2RlID0gZkRlZmF1bHRWYWx1ZXMuaGFzaENvZGUoKTsKKyAgICAgICAgY29kZSA9IGNvZGUqMiArIChmU2Nyb2xsYWJsZT8gMTowKTsKKyAgICAgICAgY29kZSA9IGNvZGUqMiArIChmU2Nyb2xsQmFyc1Zpc2libGU/IDE6MCk7CisgICAgICAgIGNvZGUgPSBjb2RlKjIgKyAoZlNlbGVjdGFibGU/IDE6MCk7CisgICAgICAgIGNvZGUgPSBjb2RlKjIgKyAoZkVkaXRhYmxlPyAxOjApOworICAgICAgICBjb2RlID0gY29kZSoyICsgKGZXcmFwcz8gMTowKTsKKworICAgICAgICByZXR1cm4gY29kZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRSYW5nZS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRSYW5nZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxYzcxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dFJhbmdlLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGV4dFJhbmdlLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKKy8qKgorKiBBIDxUVD5UZXh0UmFuZ2U8L1RUPiByZXByZXNlbnRzIGEgcmFuZ2Ugb2YgdGV4dCBib3VuZGVkIGJ5IGEKKyogc3RhcnQgKGluY2x1c2l2ZSksIGFuZCBhIGxpbWl0IChleGNsdXNpdmUpLiAgW3N0YXJ0LGxpbWl0KQorKi8KK2ZpbmFsIGNsYXNzIFRleHRSYW5nZQoreworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgLyoqIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgKi8KKyAgICBwdWJsaWMgaW50IHN0YXJ0ID0gMDsKKyAgICAvKiogdGhlIGVuZCBvZiB0aGUgcmFuZ2UgKi8KKyAgICBwdWJsaWMgaW50IGxpbWl0ID0gMDsKKworICAgIC8qKgorICAgICogQ3JlYXRlIGEgdGV4dCByYW5nZSBmcm9tIHR3byBpbnRzLgorICAgICogQHBhcmFtIHN0YXJ0IHRoZSBzdGFydCBvZiB0aGUgcnVuCisgICAgKiBAcGFyYW0gbGltaXQgdGhlIGVuZCBvZiB0aGUgcnVuCisgICAgKi8KKyAgICBwdWJsaWMgVGV4dFJhbmdlKGludCBzdGFydCwgaW50IGxpbWl0KQorICAgIHsKKyAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OworICAgICAgICB0aGlzLmxpbWl0ID0gbGltaXQ7CisgICAgfQorCisgICAgLyoqCisgICAgKiBDcmVhdGUgYSB0ZXh0IHJhbmdlIG9mIDAsIDAuCisgICAgKi8KKyAgICBwdWJsaWMgVGV4dFJhbmdlKCkgeworICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5saW1pdCA9IDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRSZXBsYWNlbWVudC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRSZXBsYWNlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlZDNiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGV4dFJlcGxhY2VtZW50LmphdmEKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogVGV4dFJlcGxhY2VtZW50LmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRmb3JtYXQuVGV4dE9mZnNldDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcGFzcyBhIFJFUExBQ0UgY29tbWFuZCB0byBCZWhhdmlvcnMuCisgKi8KK2ZpbmFsIGNsYXNzIFRleHRSZXBsYWNlbWVudCB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgaW50IGZTdGFydDsKKyAgICBwcml2YXRlIGludCBmTGltaXQ7CisgICAgcHJpdmF0ZSBNQ29uc3RUZXh0IGZUZXh0OworICAgIHByaXZhdGUgVGV4dE9mZnNldCBmU2VsU3RhcnQ7CisgICAgcHJpdmF0ZSBUZXh0T2Zmc2V0IGZTZWxMaW1pdDsKKworICAgIFRleHRSZXBsYWNlbWVudChpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIGludCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgTUNvbnN0VGV4dCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHNlbFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHNlbExpbWl0KSB7CisKKyAgICAgICAgZlN0YXJ0ID0gc3RhcnQ7CisgICAgICAgIGZMaW1pdCA9IGxpbWl0OworICAgICAgICBmVGV4dCA9IHRleHQ7CisgICAgICAgIGZTZWxTdGFydCA9IHNlbFN0YXJ0OworICAgICAgICBmU2VsTGltaXQgPSBzZWxMaW1pdDsKKyAgICB9CisKKyAgICBpbnQgZ2V0U3RhcnQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZTdGFydDsKKyAgICB9CisKKyAgICBpbnQgZ2V0TGltaXQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZMaW1pdDsKKyAgICB9CisKKyAgICBNQ29uc3RUZXh0IGdldFRleHQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZUZXh0OworICAgIH0KKworICAgIFRleHRPZmZzZXQgZ2V0U2VsZWN0aW9uU3RhcnQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZTZWxTdGFydDsKKyAgICB9CisKKyAgICBUZXh0T2Zmc2V0IGdldFNlbGVjdGlvbkxpbWl0KCkgeworCisgICAgICAgIHJldHVybiBmU2VsTGltaXQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RleHRTZWxlY3Rpb24uamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0U2VsZWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDRhN2EzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UZXh0U2VsZWN0aW9uLmphdmEKQEAgLTAsMCArMSw5MjYgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRleHRTZWxlY3Rpb24uamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMS8xMC8zMCAwMjo0Mjo0OCAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLyoKKyAgICA3LzEvOTcgLSBjYXJldCBibGlua3MKKworICAgIDcvMy85NyAtIGZBbmNob3IgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgc2VsZWN0aW9uLiB7amJyfQorICAgICAgICAgICAgQWxzbywgcmVtb3ZlZCBmVmlzaWJsZSAtIGl0IHdhcyBpZGVudGljYWwgdG8gZW5hYmxlZCgpLgorKi8KKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzOworaW1wb3J0IGphdmEuYXd0LkNvbG9yOworaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKK2ltcG9ydCBqYXZhLmF3dC5Qb2ludDsKKworaW1wb3J0IGphdmEudGV4dC5CcmVha0l0ZXJhdG9yOworaW1wb3J0IGphdmEudGV4dC5DaGFyYWN0ZXJJdGVyYXRvcjsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lk1vdXNlRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuS2V5RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuRm9jdXNFdmVudDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdC5UZXh0T2Zmc2V0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0Zm9ybWF0Lk1Gb3JtYXR0ZXI7CisKK2NsYXNzIFRleHRTZWxlY3Rpb24gZXh0ZW5kcyBCZWhhdmlvciBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHN0YXRpYyBmaW5hbCBDb2xvciAgICAgICAgICBISUdITElHSFRDT0xPUiA9IENvbG9yLnBpbms7CisKKyAgICBwcml2YXRlIFRleHRDb21wb25lbnQgICAgICAgZlRleHRDb21wb25lbnQ7CisgICAgcHJpdmF0ZSBNQ29uc3RUZXh0ICAgICAgICAgIGZUZXh0OworICAgIHByaXZhdGUgVGV4dE9mZnNldCAgICAgICAgICBmU3RhcnQ7CisgICAgcHJpdmF0ZSBUZXh0T2Zmc2V0ICAgICAgICAgIGZMaW1pdDsKKyAgICBwcml2YXRlIFRleHRPZmZzZXQgICAgICAgICAgZkFuY2hvcjsKKyAgICBwcml2YXRlIFRleHRPZmZzZXQgICAgICAgICAgZlVwRG93bkFuY2hvciA9IG51bGw7CisgICAgcHJpdmF0ZSBCcmVha0l0ZXJhdG9yICAgICAgIGZCb3VuZGFyaWVzID0gbnVsbDsKKyAgICBwcml2YXRlIENvbG9yICAgICAgICAgICAgICAgZkhpZ2hsaWdodENvbG9yID0gSElHSExJR0hUQ09MT1I7CisgICAgcHJpdmF0ZSBQYW5lbEV2ZW50QnJvYWRjYXN0ZXIgICBmTGlzdGVuZXI7CisgICAgcHJpdmF0ZSBSdW5TdHJhdGVneSAgICAgICAgIGZSdW5TdHJhdGVneTsKKyAgICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgZk1vdXNlRG93biA9IGZhbHNlOworICAgIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgICBmSGFuZGxpbmdLZXlPckNvbW1hbmQgPSBmYWxzZTsKKyAgICAKKyAgICBwcml2YXRlIGJvb2xlYW4gZkNhcmV0U2hvdWxkQmxpbms7CisgICAgcHJpdmF0ZSBib29sZWFuIGZDYXJldElzVmlzaWJsZTsKKyAgICBwcml2YXRlIGludCBmQ2FyZXRDb3VudDsKKworICAgIC8vIGZvcm1lcmx5IGluIGJhc2UgY2xhc3MKKyAgICBwcml2YXRlIGJvb2xlYW4gZkVuYWJsZWQ7CisKKyAgICBwcml2YXRlIE1vdXNlRXZlbnQgZlBlbmRpbmdNb3VzZUV2ZW50ID0gbnVsbDsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBrQ2FyZXRJbnRlcnZhbCA9IDUwMDsKKworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKworICAgICAgICBmaW5hbCBSdW5uYWJsZSBibGlua0NhcmV0ID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIGZDYXJldElzVmlzaWJsZSA9ICFmQ2FyZXRJc1Zpc2libGU7CisgICAgICAgICAgICAgICAgR3JhcGhpY3MgZyA9IGZUZXh0Q29tcG9uZW50LmdldEdyYXBoaWNzKCk7CisgICAgICAgICAgICAgICAgaWYgKGcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiY2FyZXRJc1Zpc2libGU6ICIgKyBmQ2FyZXRJc1Zpc2libGUpOworICAgICAgICAgICAgICAgICAgICBkcmF3U2VsZWN0aW9uKGcsIGZDYXJldElzVmlzaWJsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBOb3Qgc3VyZSB3aGF0IGVsc2UgdG8gZG86CisgICAgICAgICAgICAgICAgICAgIGZDYXJldFNob3VsZEJsaW5rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gYmxpbmsgY2FyZXQKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKworICAgICAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKKworICAgICAgICAgICAgICAgIHdoaWxlICghZkNhcmV0U2hvdWxkQmxpbmspIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpbiBjYXJldCB0aHJlYWQuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICArK2ZDYXJldENvdW50OworCisgICAgICAgICAgICAgICAgaWYgKGZDYXJldENvdW50ICUgMiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZSdW5TdHJhdGVneS5kb0l0KGJsaW5rQ2FyZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoa0NhcmV0SW50ZXJ2YWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKworICAgIHB1YmxpYyBUZXh0U2VsZWN0aW9uKFRleHRDb21wb25lbnQgdGV4dENvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQYW5lbEV2ZW50QnJvYWRjYXN0ZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUnVuU3RyYXRlZ3kgcnVuU3RyYXRlZ3kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgZlRleHRDb21wb25lbnQgPSB0ZXh0Q29tcG9uZW50OworICAgICAgICBmVGV4dCA9IHRleHRDb21wb25lbnQuZ2V0VGV4dCgpOworICAgICAgICBmTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICAgICAgZlJ1blN0cmF0ZWd5ID0gcnVuU3RyYXRlZ3k7CisgICAgICAgIAorICAgICAgICBmU3RhcnQgPSBuZXcgVGV4dE9mZnNldCgpOworICAgICAgICBmTGltaXQgPSBuZXcgVGV4dE9mZnNldCgpOworICAgICAgICBmQW5jaG9yID0gbmV3IFRleHRPZmZzZXQoKTsKKyAgICAgICAgZk1vdXNlRG93biA9IGZhbHNlOworCisgICAgICAgIGZDYXJldENvdW50ID0gMDsKKyAgICAgICAgZkNhcmV0SXNWaXNpYmxlID0gdHJ1ZTsKKyAgICAgICAgZkNhcmV0U2hvdWxkQmxpbmsgPSBmYWxzZTsKKyAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7CisKKyAgICAgICAgVGhyZWFkIGNhcmV0VGhyZWFkID0gbmV3IFRocmVhZCh0aGlzKTsKKyAgICAgICAgY2FyZXRUaHJlYWQuc2V0RGFlbW9uKHRydWUpOworICAgICAgICBjYXJldFRocmVhZC5zdGFydCgpOworICAgIH0KKworICAgIGJvb2xlYW4gZW5hYmxlZCgpIHsKKworICAgICAgICByZXR1cm4gZkVuYWJsZWQ7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisKKyAgICAgICAgZkVuYWJsZWQgPSBlbmFibGVkOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHRleHRDb250cm9sRXZlbnRPY2N1cnJlZChCZWhhdmlvci5FdmVudFR5cGUgZXZlbnQsIE9iamVjdCB3aGF0KSB7CisKKyAgICAgICAgYm9vbGVhbiByZXN1bHQ7CisgICAgICAgIGZIYW5kbGluZ0tleU9yQ29tbWFuZCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAoZXZlbnQgPT0gQmVoYXZpb3IuU0VMRUNUKSB7CisgICAgICAgICAgICBzZWxlY3QoKFRleHRSYW5nZSkgd2hhdCk7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGV2ZW50ID09IEJlaGF2aW9yLkNPUFkpIHsKKyAgICAgICAgICAgIGZUZXh0Q29tcG9uZW50LmdldENsaXBib2FyZCgpLnNldENvbnRlbnRzKGZUZXh0LmV4dHJhY3QoZlN0YXJ0LmZPZmZzZXQsIGZMaW1pdC5mT2Zmc2V0KSk7CisgICAgICAgICAgICBmTGlzdGVuZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5DTElQQk9BUkRfQ0hBTkdFRCk7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZIYW5kbGluZ0tleU9yQ29tbWFuZCA9IGZhbHNlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIGFkdmFuY2VUb05leHRCb3VuZGFyeShUZXh0T2Zmc2V0IG9mZnNldCkgeworICAgIAorICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGJvdW5kYXJpZXMgb2JqZWN0LCBvciBpZiBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAvLyBkb2N1bWVudCwgcmV0dXJuIHRoZSBvZmZzZXQgdW5jaGFuZ2VkCisgICAgICAgIGlmIChmQm91bmRhcmllcyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBwb3NpdGlvbiA9IG9mZnNldC5mT2Zmc2V0OworICAgICAgICAKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGZUZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBwb3NpdGlvbiBpcyBhdCBhIGJvdW5kYXJ5IGFuZCBvZmZzZXQgaXMgYmVmb3JlIHBvc2l0aW9uLAorICAgICAgICAvLyBsZWF2ZSBpdCB1bmNoYW5nZWQuICBPdGhlcndpc2UgbW92ZSB0byBuZXh0IGJvdW5kYXJ5LgorICAgICAgICBpbnQgbmV4dFBvcyA9IGZCb3VuZGFyaWVzLmZvbGxvd2luZyhwb3NpdGlvbik7CisgICAgICAgIGlmIChmQm91bmRhcmllcy5wcmV2aW91cygpID09IHBvc2l0aW9uICYmIAorICAgICAgICAgICAgICAgIG9mZnNldC5mUGxhY2VtZW50PT1vZmZzZXQuQkVGT1JFX09GRlNFVCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvZmZzZXQuc2V0T2Zmc2V0KG5leHRQb3MsIFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBhZHZhbmNlVG9QcmV2aW91c0JvdW5kYXJ5KFRleHRPZmZzZXQgb2Zmc2V0KSB7CisgICAgCisgICAgICAgIGFkdmFuY2VUb1ByZXZpb3VzQm91bmRhcnkob2Zmc2V0LCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBhZHZhbmNlVG9QcmV2aW91c0JvdW5kYXJ5KFRleHRPZmZzZXQgb2Zmc2V0LCBib29sZWFuIGFsd2F5c01vdmUpIHsKKyAgICAgICAgLy8gaWYgdGhlcmUncyBubyBib3VuZGFyaWVzIG9iamVjdCwgb3IgaWYgd2UncmUgc2l0dGluZyBhdCB0aGUgYmVnaW5uaW5nCisgICAgICAgIC8vIG9mIHRoZSBkb2N1bWVudCwgcmV0dXJuIHRoZSBvZmZzZXQgdW5jaGFuZ2VkCisgICAgICAgIGlmIChmQm91bmRhcmllcyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBwb3NpdGlvbiA9IG9mZnNldC5mT2Zmc2V0OworCisgICAgICAgIGlmIChwb3NpdGlvbiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIElmIHBvc2l0aW9uIGlzIGF0IGEgYm91bmRhcnksIGxlYXZlIGl0IHVuY2hhbmdlZC4gIE90aGVyd2lzZQorICAgICAgICAvLyBtb3ZlIHRvIHByZXZpb3VzIGJvdW5kYXJ5LgorICAgICAgICBpZiAocG9zaXRpb24gPT0gZlRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGZCb3VuZGFyaWVzLmxhc3QoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZCb3VuZGFyaWVzLmZvbGxvd2luZyhwb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBwcmV2UG9zID0gZkJvdW5kYXJpZXMucHJldmlvdXMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcmV2UG9zID09IHBvc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAoIWFsd2F5c01vdmUgJiYgb2Zmc2V0LmZQbGFjZW1lbnQ9PW9mZnNldC5BRlRFUl9PRkZTRVQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByZXZQb3MgPSBmQm91bmRhcmllcy5wcmV2aW91cygpOworICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgIC8vIGFuZCBmaW5hbGx5IHVwZGF0ZSB0aGUgcmVhbCBvZmZzZXQgd2l0aCB0aGlzIG5ldyBwb3NpdGlvbiB3ZSd2ZSBmb3VuZAorICAgICAgICBvZmZzZXQuc2V0T2Zmc2V0KHByZXZQb3MsIFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZG9BcnJvd0tleShLZXlFdmVudCBlLCBpbnQga2V5KSB7CisKKyAgICAgICAgLy8gd2hlbiB0aGVyZSdzIGEgc2VsZWN0aW9uIHJhbmdlLCB0aGUgbGVmdCBhbmQgdXAgYXJyb3cga2V5cyBwbGFjZSBhbgorICAgICAgICAvLyBpbnNlcnRpb24gcG9pbnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UsIGFuZCB0aGUgcmlnaHQgYW5kIGRvd24KKyAgICAgICAgLy8ga2V5cyBwbGFjZSBhbiBpbnNlcnRpb24gcG9pbnQgYXQgdGhlIGVuZCBvZiB0aGUgcmFuZ2UgKHVubGVzcyB0aGUgc2hpZnQKKyAgICAgICAgLy8ga2V5IGlzIGRvd24sIG9mIGNvdXJzZSkKKworICAgICAgICBpZiAoIWZTdGFydC5lcXVhbHMoZkxpbWl0KSAmJiAhZS5pc1NoaWZ0RG93bigpKSB7CisgICAgICAgICAgICBpZiAoa2V5ID09IEtleUV2ZW50LlZLX0xFRlQgfHwga2V5ID09IEtleUV2ZW50LlZLX1VQKQorICAgICAgICAgICAgICAgIHNldFNlbFJhbmdlQW5kRHJhdyhmU3RhcnQsIGZTdGFydCwgZlN0YXJ0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRTZWxSYW5nZUFuZERyYXcoZkxpbWl0LCBmTGltaXQsIGZMaW1pdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIWZBbmNob3IuZXF1YWxzKGZTdGFydCkpCisgICAgICAgICAgICAgICAgZkFuY2hvci5hc3NpZ24oZkxpbWl0KTsKKworICAgICAgICAgICAgVGV4dE9mZnNldCAgbGl2ZUVuZCA9IChmU3RhcnQuZXF1YWxzKGZBbmNob3IpKSA/IGZMaW1pdCA6IGZTdGFydDsKKyAgICAgICAgICAgIFRleHRPZmZzZXQgIG5ld1BvcyA9IG5ldyBUZXh0T2Zmc2V0KCk7CisKKyAgICAgICAgICAgIC8vIGlmIHRoZSBjb250cm9sIGtleSBpcyBkb3duLCB0aGUgbGVmdCBhbmQgcmlnaHQgYXJyb3cga2V5cyBtb3ZlIGJ5IHdob2xlCisgICAgICAgICAgICAvLyB3b3JkIGluIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24gKHdlIHVzZSBhIGxpbmUgYnJlYWsgb2JqZWN0IHNvIHRoYXQgd2UncmUKKyAgICAgICAgICAgIC8vIG5vdCB0cmVhdGluZyBzcGFjZXMgYW5kIHB1bmN0dWF0aW9uIGFzIHdvcmRzKQorICAgICAgICAgICAgaWYgKGUuaXNDb250cm9sRG93bigpICYmIChrZXkgPT0gS2V5RXZlbnQuVktfTEVGVCB8fCBrZXkgPT0gS2V5RXZlbnQuVktfUklHSFQpKSB7CisgICAgICAgICAgICAgICAgZlVwRG93bkFuY2hvciA9IG51bGw7CisgICAgICAgICAgICAgICAgZkJvdW5kYXJpZXMgPSBCcmVha0l0ZXJhdG9yLmdldExpbmVJbnN0YW5jZSgpOworICAgICAgICAgICAgICAgIGZCb3VuZGFyaWVzLnNldFRleHQoZlRleHQuY3JlYXRlQ2hhcmFjdGVySXRlcmF0b3IoKSk7CisKKyAgICAgICAgICAgICAgICBuZXdQb3MuYXNzaWduKGxpdmVFbmQpOworICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gS2V5RXZlbnQuVktfUklHSFQpCisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VUb05leHRCb3VuZGFyeShuZXdQb3MpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWR2YW5jZVRvUHJldmlvdXNCb3VuZGFyeShuZXdQb3MsIHRydWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpZiB3ZSBnZXQgZG93biB0byBoZXJlLCB0aGlzIGlzIGEgcGxhaW4tdmFuaWxsYSBpbnNlcnRpb24tcG9pbnQgbW92ZSwKKyAgICAgICAgICAgIC8vIG9yIHRoZSBzaGlmdCBrZXkgaXMgZG93biBhbmQgd2UncmUgZXh0ZW5kaW5nIG9yIHNob3J0ZW5pbmcgdGhlIHNlbGVjdGlvbgorICAgICAgICAgICAgZWxzZSB7CisKKyAgICAgICAgICAgICAgICAvLyBmVXBEb3duQW5jaG9yIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbgorICAgICAgICAgICAgICAgIC8vIGFjcm9zcyBhIHJ1biBvZiB1cCBvciBkb3duIGFycm93IGtleXMgKHRoaXMgcHJldmVudHMgYWNjdW11bGF0ZWQKKyAgICAgICAgICAgICAgICAvLyBlcnJvciBmcm9tIGRlc3Ryb3lpbmcgb3VyIGhvcml6b250YWwgcG9zaXRpb24pCisgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBLZXlFdmVudC5WS19MRUZUIHx8IGtleSA9PSBLZXlFdmVudC5WS19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgZlVwRG93bkFuY2hvciA9IG51bGw7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmVXBEb3duQW5jaG9yID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZVcERvd25BbmNob3IgPSBuZXcgVGV4dE9mZnNldChsaXZlRW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNob3J0ICAgZGlyZWN0aW9uID0gTUZvcm1hdHRlci5lUmlnaHQ7ICAvLyBqdXN0IHRvIGhhdmUgYSBkZWZhdWx0Li4uCisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGtleSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LlZLX1VQOiBkaXJlY3Rpb24gPSBNRm9ybWF0dGVyLmVVcDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfRE9XTjogZGlyZWN0aW9uID0gTUZvcm1hdHRlci5lRG93bjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfTEVGVDogZGlyZWN0aW9uID0gTUZvcm1hdHRlci5lTGVmdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfUklHSFQ6IGRpcmVjdGlvbiA9IE1Gb3JtYXR0ZXIuZVJpZ2h0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIGZvcm1hdHRlciB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBlZmZlY3Qgb2YgdGhlIGFycm93IGtleQorICAgICAgICAgICAgICAgIGZUZXh0Q29tcG9uZW50LmZpbmROZXdJbnNlcnRpb25PZmZzZXQobmV3UG9zLCBmVXBEb3duQW5jaG9yLCBsaXZlRW5kLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpZiB0aGUgc2hpZnQga2V5IGlzIGRvd24sIHRoZSBzZWxlY3Rpb24gcmFuZ2UgaXMgZnJvbSB0aGUgYW5jaG9yIHBvaW50CisgICAgICAgICAgICAvLyB0aGUgc2l0ZSBvZiB0aGUgbGFzdCBpbnNlcnRpb24gcG9pbnQgb3IgdGhlIGJlZ2lubmluZyBwb2ludCBvZiB0aGUgbGFzdAorICAgICAgICAgICAgLy8gc2VsZWN0aW9uIGRyYWcgb3BlcmF0aW9uKSB0byB0aGUgbmV3bHktY2FsY3VsYXRlZCBwb3NpdGlvbjsgaWYgdGhlCisgICAgICAgICAgICAvLyBzaGlmdCBrZXkgaXMgZG93biwgdGhlIG5ld2x5LWNhbGN1bGF0ZWQgcG9zaXRpb24gaXMgdGhlIGluc2VydGlvbiBwb2ludCBwb3NpdGlvbgorICAgICAgICAgICAgaWYgKCFlLmlzU2hpZnREb3duKCkpCisgICAgICAgICAgICAgICAgc2V0U2VsUmFuZ2VBbmREcmF3KG5ld1BvcywgbmV3UG9zLCBuZXdQb3MpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5sZXNzVGhhbihmQW5jaG9yKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2VsUmFuZ2VBbmREcmF3KG5ld1BvcywgZkFuY2hvciwgZkFuY2hvcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXRTZWxSYW5nZUFuZERyYXcoZkFuY2hvciwgbmV3UG9zLCBmQW5jaG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNjcm9sbFRvU2hvd1NlbGVjdGlvbkVuZCgpOworICAgICAgICBmQm91bmRhcmllcyA9IG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRvRW5kS2V5KEtleUV2ZW50IGUpIHsKKyAgICAgICAgLy8gY3RybC1lbmQgbW92ZXMgdGhlIGluc2VydHNpb24gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQsCisgICAgICAgIC8vIGN0cmwtc2hpZnQtZW5kIGV4dGVuZHMgdGhlIHNlbGVjdGlvbiBzbyB0aGF0IGl0IGVuZHMgYXQgdGhlIGVuZAorICAgICAgICAvLyBvZiB0aGUgZG9jdW1lbnQKKworICAgICAgICBUZXh0T2Zmc2V0IGFjdGl2ZUVuZCwgYW5jaG9yOworCisgICAgICAgIGlmIChmQW5jaG9yLmVxdWFscyhmU3RhcnQpKSB7CisgICAgICAgICAgICBhY3RpdmVFbmQgPSBuZXcgVGV4dE9mZnNldChmU3RhcnQpOworICAgICAgICAgICAgYW5jaG9yID0gbmV3IFRleHRPZmZzZXQoZkxpbWl0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFjdGl2ZUVuZCA9IG5ldyBUZXh0T2Zmc2V0KGZMaW1pdCk7CisgICAgICAgICAgICBhbmNob3IgPSBuZXcgVGV4dE9mZnNldChmU3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGUuaXNDb250cm9sRG93bigpKSB7CisgICAgICAgICAgICBUZXh0T2Zmc2V0IGVuZCA9IG5ldyBUZXh0T2Zmc2V0KGZUZXh0Lmxlbmd0aCgpLCBUZXh0T2Zmc2V0LkJFRk9SRV9PRkZTRVQpOworCisgICAgICAgICAgICBpZiAoZS5pc1NoaWZ0RG93bigpKQorICAgICAgICAgICAgICAgIHNldFNlbFJhbmdlQW5kRHJhdyhhbmNob3IsIGVuZCwgYW5jaG9yKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRTZWxSYW5nZUFuZERyYXcoZW5kLCBlbmQsIGVuZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBlbmQgbW92ZXMgdGhlIGluc2VydGlvbiBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24KKyAgICAgICAgLy8gc2hpZnQtZW5kIGV4dGVuZHMgdGhlIHNlbGVjdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24KKworICAgICAgICBlbHNlIHsKKworICAgICAgICAgICAgaW50IG9sZE9mZnNldCA9IGFjdGl2ZUVuZC5mT2Zmc2V0OworCisgICAgICAgICAgICBhY3RpdmVFbmQuZk9mZnNldCA9IGZUZXh0Q29tcG9uZW50LmxpbmVSYW5nZUxpbWl0KGZUZXh0Q29tcG9uZW50LmxpbmVDb250YWluaW5nKGFjdGl2ZUVuZCkpOworICAgICAgICAgICAgYWN0aXZlRW5kLmZQbGFjZW1lbnQgPSBUZXh0T2Zmc2V0LkJFRk9SRV9PRkZTRVQ7CisKKyAgICAgICAgICAgIGlmIChmVGV4dC5wYXJhZ3JhcGhMaW1pdChvbGRPZmZzZXQpID09IGFjdGl2ZUVuZC5mT2Zmc2V0ICYmCisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUVuZC5mT2Zmc2V0ICE9IGZUZXh0Lmxlbmd0aCgpICYmIGFjdGl2ZUVuZC5mT2Zmc2V0ID4gb2xkT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgYWN0aXZlRW5kLmZPZmZzZXQtLTsKKyAgICAgICAgICAgICAgICBhY3RpdmVFbmQuZlBsYWNlbWVudCA9IFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWUuaXNTaGlmdERvd24oKSkKKyAgICAgICAgICAgICAgICBzZXRTZWxSYW5nZUFuZERyYXcoYWN0aXZlRW5kLCBhY3RpdmVFbmQsIGFjdGl2ZUVuZCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlRW5kLmxlc3NUaGFuKGFuY2hvcikpCisgICAgICAgICAgICAgICAgICAgIHNldFNlbFJhbmdlQW5kRHJhdyhhY3RpdmVFbmQsIGFuY2hvciwgYW5jaG9yKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNldFNlbFJhbmdlQW5kRHJhdyhhbmNob3IsIGFjdGl2ZUVuZCwgYW5jaG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNjcm9sbFRvU2hvd1NlbGVjdGlvbkVuZCgpOworICAgICAgICBmQm91bmRhcmllcyA9IG51bGw7CisgICAgICAgIGZVcERvd25BbmNob3IgPSBudWxsOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkb0hvbWVLZXkoS2V5RXZlbnQgZSkgeworICAgICAgICAvLyBjdHJsLWhvbWUgbW92ZXMgdGhlIGluc2VydGlvbiBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCwKKyAgICAgICAgLy8gY3RybC1zaGlmdC1ob21lIGV4dGVuZHMgdGhlIHNlbGVjdGlvbiBzbyB0aGF0IGl0IGJlZ2lucyBhdCB0aGUgYmVnaW5uaW5nCisgICAgICAgIC8vIG9mIHRoZSBkb2N1bWVudAorCisgICAgICAgIFRleHRPZmZzZXQgYWN0aXZlRW5kLCBhbmNob3I7CisKKyAgICAgICAgaWYgKGZBbmNob3IuZXF1YWxzKGZTdGFydCkpIHsKKyAgICAgICAgICAgIGFjdGl2ZUVuZCA9IG5ldyBUZXh0T2Zmc2V0KGZTdGFydCk7CisgICAgICAgICAgICBhbmNob3IgPSBuZXcgVGV4dE9mZnNldChmTGltaXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYWN0aXZlRW5kID0gbmV3IFRleHRPZmZzZXQoZkxpbWl0KTsKKyAgICAgICAgICAgIGFuY2hvciA9IG5ldyBUZXh0T2Zmc2V0KGZTdGFydCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZS5pc0NvbnRyb2xEb3duKCkpIHsKKworICAgICAgICAgICAgVGV4dE9mZnNldCBzdGFydCA9IG5ldyBUZXh0T2Zmc2V0KDAsIFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUKTsKKyAgICAgICAgICAgIGlmIChlLmlzU2hpZnREb3duKCkpCisgICAgICAgICAgICAgICAgc2V0U2VsUmFuZ2VBbmREcmF3KHN0YXJ0LCBhbmNob3IsIGFuY2hvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0U2VsUmFuZ2VBbmREcmF3KHN0YXJ0LCBzdGFydCwgc3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gaG9tZSBtb3ZlcyB0aGUgaW5zZXJ0aW9uIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgY29udGFpbmluZworICAgICAgICAvLyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbgorICAgICAgICAvLyBzaGlmdC1ob21lIGV4dGVuZHMgdGhlIHNlbGVjdGlvbiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24KKworICAgICAgICBlbHNlIHsKKworICAgICAgICAgICAgYWN0aXZlRW5kLmZPZmZzZXQgPSBmVGV4dENvbXBvbmVudC5saW5lUmFuZ2VMb3coZlRleHRDb21wb25lbnQubGluZUNvbnRhaW5pbmcoYWN0aXZlRW5kKSk7CisgICAgICAgICAgICBhY3RpdmVFbmQuZlBsYWNlbWVudCA9IFRleHRPZmZzZXQuQUZURVJfT0ZGU0VUOworCisgICAgICAgICAgICBpZiAoIWUuaXNTaGlmdERvd24oKSkKKyAgICAgICAgICAgICAgICBzZXRTZWxSYW5nZUFuZERyYXcoYWN0aXZlRW5kLCBhY3RpdmVFbmQsIGFjdGl2ZUVuZCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlRW5kLmxlc3NUaGFuKGFuY2hvcikpCisgICAgICAgICAgICAgICAgICAgIHNldFNlbFJhbmdlQW5kRHJhdyhhY3RpdmVFbmQsIGFuY2hvciwgYW5jaG9yKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNldFNlbFJhbmdlQW5kRHJhdyhhbmNob3IsIGFjdGl2ZUVuZCwgYW5jaG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNjcm9sbFRvU2hvd1NlbGVjdGlvbkVuZCgpOworICAgICAgICBmQm91bmRhcmllcyA9IG51bGw7CisgICAgICAgIGZVcERvd25BbmNob3IgPSBudWxsOworICAgIH0KKworICAgIC8qKiBkcmF3cyBvciBlcmFzZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCisgICAgKiBEcmF3cyBvciBlcmFzZXMgdGhlIGhpZ2hsaWdodCByZWdpb24gb3IgaW5zZXJ0aW9uIGNhcmV0IGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24KKyAgICAqIHJhbmdlLgorICAgICogQHBhcmFtIGcgVGhlIGdyYXBoaWNzIGVudmlyb25tZW50IHRvIGRyYXcgaW50bworICAgICogQHBhcmFtIHZpc2libGUgSWYgdHJ1ZSwgZHJhdyB0aGUgc2VsZWN0aW9uOyBpZiBmYWxzZSwgZXJhc2UgaXQKKyAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGRyYXdTZWxlY3Rpb24oR3JhcGhpY3MgZywgYm9vbGVhbiB2aXNpYmxlKSB7CisgICAgICAgIGRyYXdTZWxlY3Rpb25SYW5nZShnLCBmU3RhcnQsIGZMaW1pdCwgdmlzaWJsZSk7CisgICAgfQorCisgICAgLyoqIGRyYXdzIG9yIGVyYXNlcyBhIHNlbGVjdGlvbiBoaWdobGlnaHQgYXQgdGhlIHNwZWNmaWVkIHBvc2l0aW9ucworICAgICogRHJhd3Mgb3IgZXJhc2VzIGEgc2VsZWN0aW9uIGhpZ2hsaWdodCBvciBpbnNlcnRpb24gY2FyZXQgY29ycmVzcG9uZGluZyB0bworICAgICogdGhlIHNwZWNpZmllZCBzZWxlY2lvbiByYW5nZQorICAgICogQHBhcmFtIGcgVGhlIGdyYXBoaWNzIGVudmlyb25tZW50IHRvIGRyYXcgaW50by4gIElmIG51bGwsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy4KKyAgICAqIEBwYXJhbSBzdGFydCBUaGUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZSB0byBoaWdobGlnaHQKKyAgICAqIEBwYXJhbSBsaW1pdCBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byBoaWdobGlnaHQKKyAgICAqIEBwYXJhbSB2c2libGUgSWYgdHJ1ZSwgZHJhdzsgaWYgZmFsc2UsIGVyYXNlCisgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3U2VsZWN0aW9uUmFuZ2UoICBHcmFwaGljcyAgICBnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gICAgIHZpc2libGUpIHsKKyAgICAgICAgaWYgKGcgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJlY3RhbmdsZSAgIHNlbEJvdW5kcyA9IGZUZXh0Q29tcG9uZW50LmdldEJvdW5kaW5nUmVjdChzdGFydCwgbGltaXQpOworCisgICAgICAgIHNlbEJvdW5kcy53aWR0aCA9IE1hdGgubWF4KDEsIHNlbEJvdW5kcy53aWR0aCk7CisgICAgICAgIHNlbEJvdW5kcy5oZWlnaHQgPSBNYXRoLm1heCgxLCBzZWxCb3VuZHMuaGVpZ2h0KTsKKworICAgICAgICBmVGV4dENvbXBvbmVudC5kcmF3VGV4dChnLCBzZWxCb3VuZHMsIHZpc2libGUsIHN0YXJ0LCBsaW1pdCwgZkhpZ2hsaWdodENvbG9yKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgVGV4dE9mZnNldCBnZXRBbmNob3IoKSB7CisgICAgICAgIHJldHVybiBmQW5jaG9yOworICAgIH0KKworICAgIHB1YmxpYyBUZXh0T2Zmc2V0IGdldEVuZCgpIHsKKyAgICAgICAgcmV0dXJuIGZMaW1pdDsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29sb3IgZ2V0SGlnaGxpZ2h0Q29sb3IoKSB7CisgICAgICAgIHJldHVybiBmSGlnaGxpZ2h0Q29sb3I7CisgICAgfQorCisgICAgcHVibGljIFRleHRPZmZzZXQgZ2V0U3RhcnQoKSB7CisgICAgICAgIHJldHVybiBmU3RhcnQ7CisgICAgfQorCisgICAgcHVibGljIFRleHRSYW5nZSBnZXRTZWxlY3Rpb25SYW5nZSgpIHsKKworICAgICAgICByZXR1cm4gbmV3IFRleHRSYW5nZShmU3RhcnQuZk9mZnNldCwgZkxpbWl0LmZPZmZzZXQpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGZvY3VzR2FpbmVkKEZvY3VzRXZlbnQgZSkgeworCisgICAgICAgIHNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgIGRyYXdTZWxlY3Rpb24oZlRleHRDb21wb25lbnQuZ2V0R3JhcGhpY3MoKSwgdHJ1ZSk7CisKKyAgICAgICAgcmVzdGFydENhcmV0QmxpbmtpbmcodHJ1ZSk7CisgICAgICAgIGlmIChmUGVuZGluZ01vdXNlRXZlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgbW91c2VQcmVzc2VkKGZQZW5kaW5nTW91c2VFdmVudCk7CisgICAgICAgICAgICBmUGVuZGluZ01vdXNlRXZlbnQgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGZMaXN0ZW5lci50ZXh0U3RhdGVDaGFuZ2VkKFRleHRQYW5lbEV2ZW50LkNMSVBCT0FSRF9DSEFOR0VEKTsKKyAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZm9jdXNMb3N0KEZvY3VzRXZlbnQgZSkgeworICAgICAgICBzdG9wQ2FyZXRCbGlua2luZygpOworICAgICAgICBzZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgZHJhd1NlbGVjdGlvbihmVGV4dENvbXBvbmVudC5nZXRHcmFwaGljcygpLCBmYWxzZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBrZXkgZXZlbnQgY2FuIGFmZmVjdCB0aGUgc2VsZWN0aW9uCisgICAgICogcmFuZ2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGtleUFmZmVjdHNTZWxlY3Rpb24oS2V5RXZlbnQgZSkgeworCisgICAgICAgIGlmIChlLmdldElEKCkgIT0gZS5LRVlfUFJFU1NFRCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaW50IGtleSA9IGUuZ2V0S2V5Q29kZSgpOworCisgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LlZLX0hPTUU6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LlZLX0VORDoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfTEVGVDoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfUklHSFQ6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LlZLX1VQOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5WS19ET1dOOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGtleVByZXNzZWQoS2V5RXZlbnQgZSkgeworCisgICAgICAgIGZIYW5kbGluZ0tleU9yQ29tbWFuZCA9IHRydWU7CisgICAgICAgIGludCBrZXkgPSBlLmdldEtleUNvZGUoKTsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChrZXkpIHsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfSE9NRToKKyAgICAgICAgICAgICAgICBkb0hvbWVLZXkoZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LlZLX0VORDoKKyAgICAgICAgICAgICAgICBkb0VuZEtleShlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5WS19MRUZUOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5WS19SSUdIVDoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuVktfVVA6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LlZLX0RPV046CisgICAgICAgICAgICAgICAgZG9BcnJvd0tleShlLCBrZXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmVXBEb3duQW5jaG9yID0gbnVsbDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZkhhbmRsaW5nS2V5T3JDb21tYW5kID0gZmFsc2U7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbW91c2VQcmVzc2VkKE1vdXNlRXZlbnQgZSkgeworCisgICAgICAgIGlmICghZW5hYmxlZCgpKSB7CisgICAgICAgICAgICBmUGVuZGluZ01vdXNlRXZlbnQgPSBlOworICAgICAgICAgICAgZlRleHRDb21wb25lbnQucmVxdWVzdEZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZk1vdXNlRG93bikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiZk1vdXNlRG93biBpcyBvdXQgb2Ygc3luYyB3aXRoIG1vdXNlIGluIFRleHRTZWxlY3Rpb24uIik7CisKKyAgICAgICAgZk1vdXNlRG93biA9IHRydWU7CisgICAgICAgIHN0b3BDYXJldEJsaW5raW5nKCk7CisKKyAgICAgICAgaW50IHggPSBlLmdldFgoKSwgeSA9IGUuZ2V0WSgpOworICAgICAgICBib29sZWFuIHdhc1plcm9MZW5ndGggPSByYW5nZUlzWmVyb0xlbmd0aChmU3RhcnQsIGZMaW1pdCwgZkFuY2hvcik7CisgICAgICAgIAorICAgICAgICBUZXh0T2Zmc2V0IGN1cnJlbnQgPSBmVGV4dENvbXBvbmVudC5wb2ludFRvVGV4dE9mZnNldChudWxsLCB4LCB5LCBudWxsLCB0cnVlKTsKKyAgICAgICAgVGV4dE9mZnNldCBhbmNob3JTdGFydCA9IG5ldyBUZXh0T2Zmc2V0KCk7CisgICAgICAgIFRleHRPZmZzZXQgYW5jaG9yRW5kID0gbmV3IFRleHRPZmZzZXQoKTsKKworICAgICAgICBmVXBEb3duQW5jaG9yID0gbnVsbDsKKworICAgICAgICAvLyBpZiB3ZSdyZSBub3QgZXh0ZW5kaW5nIHRoZSBzZWxlY3Rpb24uLi4KKyAgICAgICAgaWYgKCFlLmlzU2hpZnREb3duKCkpIHsKKworICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNsaWNrcywgY3JlYXRlIHRoZSBhcHBvcHJpYXRlIHR5cGUgb2YgQnJlYWtJdGVyYXRvcgorICAgICAgICAgICAgLy8gb2JqZWN0IGZvciBmaW5kaW5nIHRleHQgYm91bmRhcmllcyAoc2luZ2xlIGNsaWNrcyBkb24ndCB1c2UgYSBCcmVha0l0ZXJhdG9yCisgICAgICAgICAgICAvLyBvYmplY3QpCisgICAgICAgICAgICBpZiAoZS5nZXRDbGlja0NvdW50KCkgPT0gMikKKyAgICAgICAgICAgICAgICBmQm91bmRhcmllcyA9IEJyZWFrSXRlcmF0b3IuZ2V0V29yZEluc3RhbmNlKCk7CisgICAgICAgICAgICBlbHNlIGlmIChlLmdldENsaWNrQ291bnQoKSA9PSAzKQorICAgICAgICAgICAgICAgIGZCb3VuZGFyaWVzID0gQnJlYWtJdGVyYXRvci5nZXRTZW50ZW5jZUluc3RhbmNlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZkJvdW5kYXJpZXMgPSBudWxsOworCisgICAgICAgICAgICAvLyBpZiB3ZSdyZSB1c2luZyBhIEJyZWFrSXRlcmF0b3Igb2JqZWN0LCB1c2UgaXQgdG8gZmluZCB0aGUgbmVhcmVzdCBib3VuZGFyaWVzCisgICAgICAgICAgICAvLyBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgbW91c2UtY2xpY2sgcG9zaXRpb24gYW5kIG1ha2UgdGhlbSBvdXIgYW5jaG9yIHJhbmdlCisgICAgICAgICAgICBpZiAoZkJvdW5kYXJpZXMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBmQm91bmRhcmllcy5zZXRUZXh0KGZUZXh0LmNyZWF0ZUNoYXJhY3Rlckl0ZXJhdG9yKCkpOworCisgICAgICAgICAgICBhbmNob3JTdGFydC5hc3NpZ24oY3VycmVudCk7CisgICAgICAgICAgICBhZHZhbmNlVG9QcmV2aW91c0JvdW5kYXJ5KGFuY2hvclN0YXJ0KTsKKyAgICAgICAgICAgIGFuY2hvckVuZC5hc3NpZ24oY3VycmVudCk7CisgICAgICAgICAgICBhZHZhbmNlVG9OZXh0Qm91bmRhcnkoYW5jaG9yRW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHdlIF9hcmVfIGV4dGVuZGluZyB0aGUgc2VsZWN0aW9uLCBkZXRlcm1pbmUgb3VyIGFuY2hvciByYW5nZSBhcyBmb2xsb3dzOgorICAgICAgICAvLyBmQW5jaG9yIGlzIHRoZSBzdGFydCBvZiB0aGUgYW5jaG9yIHJhbmdlOworICAgICAgICAvLyB0aGUgbmV4dCBib3VuZGFyeSAoYWZ0ZXIgZkFuY2hvcikgaXMgdGhlIGxpbWl0IG9mIHRoZSBhbmNob3IgcmFuZ2UuCisKKyAgICAgICAgZWxzZSB7CisKKyAgICAgICAgICAgIGlmIChmQm91bmRhcmllcyAhPSBudWxsKQorICAgICAgICAgICAgICAgIGZCb3VuZGFyaWVzLnNldFRleHQoZlRleHQuY3JlYXRlQ2hhcmFjdGVySXRlcmF0b3IoKSk7CisKKyAgICAgICAgICAgIGFuY2hvclN0YXJ0LmFzc2lnbihmQW5jaG9yKTsKKyAgICAgICAgICAgIGFuY2hvckVuZC5hc3NpZ24oYW5jaG9yU3RhcnQpOworCisgICAgICAgICAgICBhZHZhbmNlVG9OZXh0Qm91bmRhcnkoYW5jaG9yRW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIFNlbGVjdGlvbkRyYWdJbnRlcmFjdG9yIGludGVyYWN0b3IgPSBuZXcgU2VsZWN0aW9uRHJhZ0ludGVyYWN0b3IodGhpcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlRleHRDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlJ1blN0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNaZXJvTGVuZ3RoKTsKKworICAgICAgICBpbnRlcmFjdG9yLmFkZFRvT3duZXIoZlRleHRDb21wb25lbnQpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG1vdXNlUmVsZWFzZWQoTW91c2VFdmVudCBlKSB7CisKKyAgICAgICAgZlBlbmRpbmdNb3VzZUV2ZW50ID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGRyYWcgaW50ZXJhY3RvciBjYWxscyB0aGlzCisgICAgdm9pZCBtb3VzZVJlbGVhc2VkKGJvb2xlYW4gemVyb0xlbmd0aENoYW5nZSkgeworCisgICAgICAgIGZNb3VzZURvd24gPSBmYWxzZTsKKworICAgICAgICBpZiAoemVyb0xlbmd0aENoYW5nZSkgeworICAgICAgICAgICAgZkxpc3RlbmVyLnRleHRTdGF0ZUNoYW5nZWQoVGV4dFBhbmVsRXZlbnQuU0VMRUNUSU9OX0VNUFRZX0NIQU5HRUQpOworICAgICAgICB9CisgICAgICAgIGZMaXN0ZW5lci50ZXh0U3RhdGVDaGFuZ2VkKFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9SQU5HRV9DSEFOR0VEKTsKKyAgICAgICAgZkxpc3RlbmVyLnRleHRTdGF0ZUNoYW5nZWQoVGV4dFBhbmVsRXZlbnQuU0VMRUNUSU9OX1NUWUxFU19DSEFOR0VEKTsKKworICAgICAgICAvLyBpZiBjYXJldCBkcmF3aW5nIGR1cmluZyBtb3VzZSBkcmFncyBpcyBzdXByZXNzZWQsIGRyYXcgY2FyZXQgbm93LgorCisgICAgICAgIHJlc3RhcnRDYXJldEJsaW5raW5nKHRydWUpOworICAgIH0KKworCisgICAgLyoqIGRyYXdzIHRoZSBzZWxlY3Rpb24KKyAgICAqIFByb3ZpZGVkLCBvZiBjb3Vyc2UsIHRoYXQgdGhlIHNlbGVjdGlvbiBpcyB2aXNpYmxlLCB0aGUgYWRvcm5lciBpcyBlbmFibGVkLAorICAgICogYW5kIHdlJ3JlIGNhbGxpbmcgaXQgdG8gYWRvcm4gdGhlIHZpZXcgaXQgYWN0dWFsbHkgYmVsb25ncyB0bworICAgICogQHBhcmFtIGcgVGhlIGdyYXBoaWNzIGVudmlyb25tZW50IHRvIGRyYXcgaW50bworICAgICogQHJldHVybiB0cnVlIGlmIHdlIGFjdHVhbGx5IGRyZXcKKyAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHBhaW50KEdyYXBoaWNzIGcsIFJlY3RhbmdsZSBkcmF3UmVjdCkgeworICAgICAgICAvLyBkb24ndCBkcmF3IGFueXRoaW5nIHVubGVzcyB3ZSdyZSBlbmFibGVkIGFuZCB0aGUgc2VsZWN0aW9uIGlzIHZpc2libGUKKyAgICAgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZlRleHRDb21wb25lbnQuZHJhd1RleHQoZywgZHJhd1JlY3QsIHRydWUsIGZTdGFydCwgZkxpbWl0LCBmSGlnaGxpZ2h0Q29sb3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKiogc2Nyb2xscyB0aGUgdmlldyB0byByZXZlYWwgdGhlIGxpdmUgZW5kIG9mIHRoZSBzZWxlY3Rpb24KKyAgICAqIChpLmUuLCB0aGUgZW5kIHRoYXQgbW92ZXMgaWYgeW91IHVzZSB0aGUgYXJyb3cga2V5cyB3aXRoIHRoZSBzaGlmdCBrZXkgZG93bikKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHNjcm9sbFRvU2hvd1NlbGVjdGlvbigpIHsKKyAgICAgICAgUmVjdGFuZ2xlICAgc2VsUmVjdCA9IGZUZXh0Q29tcG9uZW50LmdldEJvdW5kaW5nUmVjdChmU3RhcnQsIGZMaW1pdCk7CisKKyAgICAgICAgZlRleHRDb21wb25lbnQuc2Nyb2xsVG9TaG93KHNlbFJlY3QpOworICAgIH0KKworICAgIC8qKiBzY3JvbGxzIHRoZSB2aWV3IHRvIHJldmVhbCB0aGUgbGl2ZSBlbmQgb2YgdGhlIHNlbGVjdGlvbgorICAgICogKGkuZS4sIHRoZSBlbmQgdGhhdCBtb3ZlcyBpZiB5b3UgdXNlIHRoZSBhcnJvdyBrZXlzIHdpdGggdGhlIHNoaWZ0IGtleSBkb3duKQorICAgICovCisgICAgcHVibGljIHZvaWQgc2Nyb2xsVG9TaG93U2VsZWN0aW9uRW5kKCkgeworICAgICAgICBUZXh0T2Zmc2V0ICBsaXZlRW5kOworICAgICAgICAvLyB2YXJpYWJsZSBub3QgdXNlZCBQb2ludFtdICAgICBwb2ludHM7CisgICAgICAgIFJlY3RhbmdsZSAgIGNhcmV0OworCisgICAgICAgIGlmIChmQW5jaG9yLmVxdWFscyhmU3RhcnQpKQorICAgICAgICAgICAgbGl2ZUVuZCA9IGZMaW1pdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGl2ZUVuZCA9IGZTdGFydDsKKworICAgICAgICAvL3BvaW50cyA9IGZUZXh0Q29tcG9uZW50LnRleHRPZmZzZXRUb1BvaW50KGxpdmVFbmQpOworICAgICAgICAvL2NhcmV0ID0gbmV3IFJlY3RhbmdsZShwb2ludHNbMF0pOworICAgICAgICAvL2NhcmV0ID0gY2FyZXQudW5pb24obmV3IFJlY3RhbmdsZShwb2ludHNbMV0pKTsKKyAgICAgICAgY2FyZXQgPSBmVGV4dENvbXBvbmVudC5nZXRDYXJldFJlY3QobGl2ZUVuZCk7CisgICAgICAgIGZUZXh0Q29tcG9uZW50LnNjcm9sbFRvU2hvdyhjYXJldCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbGVjdChUZXh0UmFuZ2UgcmFuZ2UpIHsKKyAgICAgICAgLy8gdmFyaWFibGUgbm90IHVzZWQgaW50IHRleHRMZW5ndGggPSBmVGV4dENvbXBvbmVudC5nZXRUZXh0KCkubGVuZ3RoKCk7CisKKyAgICAgICAgVGV4dE9mZnNldCBzdGFydCA9IG5ldyBUZXh0T2Zmc2V0KHJhbmdlLnN0YXJ0KTsKKworICAgICAgICBzdG9wQ2FyZXRCbGlua2luZygpOworICAgICAgICBzZXRTZWxSYW5nZUFuZERyYXcoc3RhcnQsIG5ldyBUZXh0T2Zmc2V0KHJhbmdlLmxpbWl0KSwgc3RhcnQpOworICAgICAgICByZXN0YXJ0Q2FyZXRCbGlua2luZyh0cnVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRIaWdobGlnaHRDb2xvcihDb2xvciBuZXdDb2xvcikgeworICAgICAgICBmSGlnaGxpZ2h0Q29sb3IgPSBuZXdDb2xvcjsKKyAgICAgICAgaWYgKGVuYWJsZWQoKSkKKyAgICAgICAgICAgIGRyYXdTZWxlY3Rpb24oZlRleHRDb21wb25lbnQuZ2V0R3JhcGhpY3MoKSwgdHJ1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sZWFuIHJhbmdlSXNaZXJvTGVuZ3RoKFRleHRPZmZzZXQgc3RhcnQsIFRleHRPZmZzZXQgbGltaXQsIFRleHRPZmZzZXQgYW5jaG9yKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3RhcnQuZk9mZnNldCA9PSBsaW1pdC5mT2Zmc2V0ICYmIGFuY2hvci5mT2Zmc2V0ID09IGxpbWl0LmZPZmZzZXQ7CisgICAgfQorCisgICAgLy8gc2lnaC4uLiBsb29rIG91dCBmb3IgYWxpYXNpbmcKKyAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShUZXh0T2Zmc2V0IG5ld1N0YXJ0LCBUZXh0T2Zmc2V0IG5ld0xpbWl0LCBUZXh0T2Zmc2V0IG5ld0FuY2hvcikgeworCisgICAgICAgIGJvb2xlYW4gemVyb0xlbmd0aENoYW5nZSA9IHJhbmdlSXNaZXJvTGVuZ3RoKG5ld1N0YXJ0LCBuZXdMaW1pdCwgbmV3QW5jaG9yKSAhPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlSXNaZXJvTGVuZ3RoKGZTdGFydCwgZkxpbWl0LCBmQW5jaG9yKTsKKyAgICAgICAgVGV4dE9mZnNldCB0ZW1wTmV3QW5jaG9yOworICAgICAgICBpZiAobmV3QW5jaG9yID09IGZTdGFydCB8fCBuZXdBbmNob3IgPT0gZkxpbWl0KSB7CisgICAgICAgICAgICB0ZW1wTmV3QW5jaG9yID0gbmV3IFRleHRPZmZzZXQobmV3QW5jaG9yKTsgLy8gY2xvbmUgaW4gY2FzZSBvZiBhbGlhc2luZworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGVtcE5ld0FuY2hvciA9IG5ld0FuY2hvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERFQlVHIHtqYnJ9CisKKyAgICAgICAgaWYgKG5ld1N0YXJ0LmdyZWF0ZXJUaGFuKG5ld0xpbWl0KSkKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNlbGVjdGlvbiBsaW1pdCBpcyBiZWZvcmUgc2VsZWN0aW9uIHN0YXJ0LiIpOworCisgICAgICAgIGlmIChuZXdMaW1pdCAhPSBmU3RhcnQpIHsKKyAgICAgICAgICAgIGZTdGFydC5hc3NpZ24obmV3U3RhcnQpOworICAgICAgICAgICAgZkxpbWl0LmFzc2lnbihuZXdMaW1pdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmTGltaXQuYXNzaWduKG5ld0xpbWl0KTsKKyAgICAgICAgICAgIGZTdGFydC5hc3NpZ24obmV3U3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgZkFuY2hvci5hc3NpZ24odGVtcE5ld0FuY2hvcik7CisKKyAgICAgICAgaWYgKGZTdGFydC5mT2Zmc2V0ID09IGZMaW1pdC5mT2Zmc2V0KSB7CisgICAgICAgICAgICBmU3RhcnQuZlBsYWNlbWVudCA9IGZBbmNob3IuZlBsYWNlbWVudDsKKyAgICAgICAgICAgIGZMaW1pdC5mUGxhY2VtZW50ID0gZkFuY2hvci5mUGxhY2VtZW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZNb3VzZURvd24pIHsKKyAgICAgICAgICAgIGlmICh6ZXJvTGVuZ3RoQ2hhbmdlKSB7CisgICAgICAgICAgICAgICAgZkxpc3RlbmVyLnRleHRTdGF0ZUNoYW5nZWQoVGV4dFBhbmVsRXZlbnQuU0VMRUNUSU9OX0VNUFRZX0NIQU5HRUQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZkxpc3RlbmVyLnRleHRTdGF0ZUNoYW5nZWQoVGV4dFBhbmVsRXZlbnQuU0VMRUNUSU9OX1JBTkdFX0NIQU5HRUQpOworICAgICAgICAgICAgaWYgKGZIYW5kbGluZ0tleU9yQ29tbWFuZCkgeworICAgICAgICAgICAgICAgIGZMaXN0ZW5lci50ZXh0U3RhdGVDaGFuZ2VkKFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9TVFlMRVNfQ0hBTkdFRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc29ydE9mZnNldHMoVGV4dE9mZnNldCBvZmZzZXRzW10pIHsKKworICAgICAgICBpbnQgaSwgajsKKworICAgICAgICBmb3IgKGk9MDsgaSA8IG9mZnNldHMubGVuZ3RoLTE7IGkrKykgeworICAgICAgICAgICAgZm9yIChqPWkrMTsgaiA8IG9mZnNldHMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0c1tqXS5sZXNzVGhhbihvZmZzZXRzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHRlbXAgPSBvZmZzZXRzW2pdOworICAgICAgICAgICAgICAgICAgICBvZmZzZXRzW2pdID0gb2Zmc2V0c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0c1tpXSA9IHRlbXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gREVCVUcge2picn0KKyAgICAgICAgZm9yIChpPTA7IGkgPCBvZmZzZXRzLmxlbmd0aC0xOyBpKyspCisgICAgICAgICAgICBpZiAob2Zmc2V0c1tpXS5ncmVhdGVyVGhhbihvZmZzZXRzW2krMV0pKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigic29ydE9mZnNldHMgZmFpbGVkISIpOworICAgIH0KKworICAgIHByaXZhdGUgUmVjdGFuZ2xlIGdldFNlbGVjdGlvbkNoYW5nZVJlY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IHJhbmdlU3RhcnQsIFRleHRPZmZzZXQgcmFuZ2VMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgb2xkU3RhcnQsIFRleHRPZmZzZXQgb2xkTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0T2Zmc2V0IG5ld1N0YXJ0LCBUZXh0T2Zmc2V0IG5ld0xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBkcmF3SWZJbnNQb2ludCkgeworCisgICAgICAgIGlmICghcmFuZ2VTdGFydC5lcXVhbHMocmFuZ2VMaW1pdCkpCisgICAgICAgICAgICByZXR1cm4gZlRleHRDb21wb25lbnQuZ2V0Qm91bmRpbmdSZWN0KHJhbmdlU3RhcnQsIHJhbmdlTGltaXQpOworCisgICAgICAgIC8vIGhlcmUsIHJhbmdlU3RhcnQgYW5kIHJhbmdlTGltaXQgYXJlIGVxdWFsCisKKyAgICAgICAgaWYgKHJhbmdlU3RhcnQuZXF1YWxzKG9sZExpbWl0KSkgeworCisgICAgICAgICAgICAvLyByYW5nZSBzdGFydCBpcyBPTEQgaW5zZXJ0aW9uIHBvaW50LiAgUmVkcmF3IGlmIGNhcmV0IGlzIGN1cnJlbnRseSB2aXNpYmxlLgorCisgICAgICAgICAgICBpZiAoZkNhcmV0SXNWaXNpYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBmVGV4dENvbXBvbmVudC5nZXRCb3VuZGluZ1JlY3QocmFuZ2VTdGFydCwgcmFuZ2VTdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmFuZ2VTdGFydC5lcXVhbHMobmV3TGltaXQpKSB7CisKKyAgICAgICAgICAgIC8vIHJhbmdlIHN0YXJ0IGlzIE5FVyBpbnNlcnRpb24gcG9pbnQuCisKKyAgICAgICAgICAgIGlmIChkcmF3SWZJbnNQb2ludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZlRleHRDb21wb25lbnQuZ2V0Qm91bmRpbmdSZWN0KHJhbmdlU3RhcnQsIHJhbmdlU3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiByZWN0YW5nbGVzT3ZlcmxhcFZlcnRpY2FsbHkoUmVjdGFuZ2xlIHIxLCBSZWN0YW5nbGUgcjIpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChyMSA9PSBudWxsIHx8IHIyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHIxLnkgPD0gcjIueSArIHIyLmhlaWdodCB8fCByMi55IDw9IHIxLnkgKyByMS5oZWlnaHQ7CisgICAgfQorICAgIAorICAgIC8vIFVwZGF0ZSB0byBzaG93IG5ldyBzZWxlY3Rpb24sIHJlZHJhd2luZyBhcyBsaXR0bGUgYXMgcG9zc2libGUKKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTZWxlY3Rpb25EaXNwbGF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRPZmZzZXQgb2xkU3RhcnQsIFRleHRPZmZzZXQgb2xkTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBuZXdTdGFydCwgVGV4dE9mZnNldCBuZXdMaW1pdCwgYm9vbGVhbiBkcmF3SWZJbnNQb2ludCkgeworCisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJuZXdTdGFydDoiICsgbmV3U3RhcnQgKyAiOyBuZXdMaW1pdDoiICsgbmV3TGltaXQpOworCisgICAgICAgIFRleHRPZmZzZXQgb2ZmW10gPSBuZXcgVGV4dE9mZnNldFs0XTsKKworICAgICAgICBvZmZbMF0gPSBvbGRTdGFydDsKKyAgICAgICAgb2ZmWzFdID0gb2xkTGltaXQ7CisgICAgICAgIG9mZlsyXSA9IG5ld1N0YXJ0OworICAgICAgICBvZmZbM10gPSBuZXdMaW1pdDsKKworICAgICAgICBzb3J0T2Zmc2V0cyhvZmYpOworCisgICAgICAgIFJlY3RhbmdsZSByMSA9IGdldFNlbGVjdGlvbkNoYW5nZVJlY3Qob2ZmWzBdLCBvZmZbMV0sIG9sZFN0YXJ0LCBvbGRMaW1pdCwgbmV3U3RhcnQsIG5ld0xpbWl0LCBkcmF3SWZJbnNQb2ludCk7CisgICAgICAgIFJlY3RhbmdsZSByMiA9IGdldFNlbGVjdGlvbkNoYW5nZVJlY3Qob2ZmWzJdLCBvZmZbM10sIG9sZFN0YXJ0LCBvbGRMaW1pdCwgbmV3U3RhcnQsIG5ld0xpbWl0LCBkcmF3SWZJbnNQb2ludCk7CisKKyAgICAgICAgYm9vbGVhbiBkcmF3U2VsZWN0aW9uID0gZHJhd0lmSW5zUG9pbnQgfHwgIW5ld1N0YXJ0LmVxdWFscyhuZXdMaW1pdCk7CisKKyAgICAgICAgaWYgKHJlY3RhbmdsZXNPdmVybGFwVmVydGljYWxseShyMSwgcjIpKSB7CisKKyAgICAgICAgICAgIGZUZXh0Q29tcG9uZW50LmRyYXdUZXh0KGZUZXh0Q29tcG9uZW50LmdldEdyYXBoaWNzKCksIHIxLnVuaW9uKHIyKSwgZHJhd1NlbGVjdGlvbiwgbmV3U3RhcnQsIG5ld0xpbWl0LCBmSGlnaGxpZ2h0Q29sb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHIxICE9IG51bGwpCisgICAgICAgICAgICAgICAgZlRleHRDb21wb25lbnQuZHJhd1RleHQoZlRleHRDb21wb25lbnQuZ2V0R3JhcGhpY3MoKSwgcjEsIGRyYXdTZWxlY3Rpb24sIG5ld1N0YXJ0LCBuZXdMaW1pdCwgZkhpZ2hsaWdodENvbG9yKTsKKyAgICAgICAgICAgIGlmIChyMiAhPSBudWxsKQorICAgICAgICAgICAgICAgIGZUZXh0Q29tcG9uZW50LmRyYXdUZXh0KGZUZXh0Q29tcG9uZW50LmdldEdyYXBoaWNzKCksIHIyLCBkcmF3U2VsZWN0aW9uLCBuZXdTdGFydCwgbmV3TGltaXQsIGZIaWdobGlnaHRDb2xvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRTZWxSYW5nZUFuZERyYXcoVGV4dE9mZnNldCBuZXdTdGFydCwgVGV4dE9mZnNldCBuZXdMaW1pdCwgVGV4dE9mZnNldCBuZXdBbmNob3IpIHsKKworICAgICAgICAvLyBpZiB0aGUgb2xkIGFuZCBuZXcgc2VsZWN0aW9uIHJhbmdlcyBhcmUgdGhlIHNhbWUsIGRvbid0IGRvIGFueXRoaW5nCisgICAgICAgIGlmIChmU3RhcnQuZXF1YWxzKG5ld1N0YXJ0KSAmJiBmTGltaXQuZXF1YWxzKG5ld0xpbWl0KSAmJiBmQW5jaG9yLmVxdWFscyhuZXdBbmNob3IpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChlbmFibGVkKCkpCisgICAgICAgICAgICBzdG9wQ2FyZXRCbGlua2luZygpOworCisgICAgICAgIC8vIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIG9uIHNjcmVlbiBpZiB3ZSdyZSBlbmFibGVkIGFuZCB2aXNpYmxlCisKKyAgICAgICAgVGV4dE9mZnNldCBvbGRTdGFydCA9IG5ldyBUZXh0T2Zmc2V0KGZTdGFydCksIG9sZExpbWl0ID0gbmV3IFRleHRPZmZzZXQoZkxpbWl0KTsKKworICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZShuZXdTdGFydCwgbmV3TGltaXQsIG5ld0FuY2hvcik7CisKKyAgICAgICAgaWYgKGVuYWJsZWQoKSkgeworCisgICAgICAgICAgICAgICAgLy8gVG8gc3VwcmVzcyBkcmF3aW5nIGEgY2FyZXQgZHVyaW5nIGEgbW91c2UgZHJhZywgcGFzcyAhZk1vdXNlRG93biBpbnN0ZWFkIG9mIHRydWU6CisgICAgICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uRGlzcGxheShvbGRTdGFydCwgb2xkTGltaXQsIGZTdGFydCwgZkxpbWl0LCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZk1vdXNlRG93biAmJiBlbmFibGVkKCkpCisgICAgICAgICAgICByZXN0YXJ0Q2FyZXRCbGlua2luZyh0cnVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzdG9wQ2FyZXRCbGlua2luZygpIHsKKworICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgeworICAgICAgICAgICAgZkNhcmV0U2hvdWxkQmxpbmsgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworLyoqCisqIFJlc3VtZSBibGlua2luZyB0aGUgY2FyZXQsIGlmIHRoZSBzZWxlY3Rpb24gaXMgYW4gaW5zZXJ0aW9uIHBvaW50LgorKiBAcGFyYW0gY2FyZXRJc1Zpc2libGUgdHJ1ZSBpZiB0aGUgY2FyZXQgaXMgZGlzcGxheWVkIHdoZW4gdGhpcyBpcyBjYWxsZWQuCisqIFRoaXMgbWV0aG9kIHJlbGllcyBvbiB0aGUgY2xpZW50IHRvIGRpc3BsYXkgKG9yIG5vdCBkaXNwbGF5KSB0aGUgY2FyZXQuCisqLworICAgIHB1YmxpYyB2b2lkIHJlc3RhcnRDYXJldEJsaW5raW5nKGJvb2xlYW4gY2FyZXRJc1Zpc2libGUpIHsKKworICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgeworICAgICAgICAgICAgZkNhcmV0U2hvdWxkQmxpbmsgPSBmU3RhcnQuZXF1YWxzKGZMaW1pdCk7CisgICAgICAgICAgICBmQ2FyZXRDb3VudCA9IDA7CisgICAgICAgICAgICBmQ2FyZXRJc1Zpc2libGUgPSBjYXJldElzVmlzaWJsZTsKKworICAgICAgICAgICAgaWYgKGZDYXJldFNob3VsZEJsaW5rKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbjogIitlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVGcm9tT3duZXIoKSB7CisKKyAgICAgICAgc3RvcENhcmV0QmxpbmtpbmcoKTsKKyAgICAgICAgc3VwZXIucmVtb3ZlRnJvbU93bmVyKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGhhaUtleVJlbWFwLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVGhhaUtleVJlbWFwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWZjNGJlMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UaGFpS2V5UmVtYXAuamF2YQpAQCAtMCwwICsxLDExOCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICRTb3VyY2U6IC94c3JsL05zdm4vaWN1L2ljdTRqL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UaGFpS2V5UmVtYXAuamF2YSx2ICQKKyAqICREYXRlOiAyMDAyLzA4LzEzIDIzOjQ0OjQ1ICQKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsOworCitmaW5hbCBjbGFzcyBUaGFpS2V5UmVtYXAgZXh0ZW5kcyBLZXlSZW1hcCB7CisKKyAgICBwdWJsaWMgY2hhciByZW1hcChjaGFyIGMpIHsKKworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gJ1x1MDA1Zic7CisgICAgICAgICAgICBjYXNlICd+JzogcmV0dXJuICdcdTAwMjUnOworICAgICAgICAgICAgY2FzZSAnMSc6IHJldHVybiAnXHUwZTQ1JzsKKyAgICAgICAgICAgIGNhc2UgJyEnOiByZXR1cm4gJ1x1MDAyYic7CisgICAgICAgICAgICBjYXNlICcyJzogcmV0dXJuICdcdTAwMmYnOworICAgICAgICAgICAgY2FzZSAnQCc6IHJldHVybiAnXHUwZTUxJzsKKyAgICAgICAgICAgIGNhc2UgJzMnOiByZXR1cm4gJ1x1MDAyZCc7CisgICAgICAgICAgICBjYXNlICcjJzogcmV0dXJuICdcdTBlNTInOworICAgICAgICAgICAgY2FzZSAnNCc6IHJldHVybiAnXHUwZTIwJzsKKyAgICAgICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJ1x1MGU1Myc7CisgICAgICAgICAgICBjYXNlICc1JzogcmV0dXJuICdcdTBlMTYnOworICAgICAgICAgICAgY2FzZSAnJSc6IHJldHVybiAnXHUwZTU0JzsKKyAgICAgICAgICAgIGNhc2UgJzYnOiByZXR1cm4gJ1x1MGUzOCc7CisgICAgICAgICAgICBjYXNlICdeJzogcmV0dXJuICdcdTBlMzknOworICAgICAgICAgICAgY2FzZSAnNyc6IHJldHVybiAnXHUwZTM2JzsKKyAgICAgICAgICAgIGNhc2UgJyYnOiByZXR1cm4gJ1x1MGUzZic7CisgICAgICAgICAgICBjYXNlICc4JzogcmV0dXJuICdcdTBlMDQnOworICAgICAgICAgICAgY2FzZSAnKic6IHJldHVybiAnXHUwZTU1JzsKKyAgICAgICAgICAgIGNhc2UgJzknOiByZXR1cm4gJ1x1MGUxNSc7CisgICAgICAgICAgICBjYXNlICcoJzogcmV0dXJuICdcdTBlNTYnOworICAgICAgICAgICAgY2FzZSAnMCc6IHJldHVybiAnXHUwZTA4JzsKKyAgICAgICAgICAgIGNhc2UgJyknOiByZXR1cm4gJ1x1MGU1Nyc7CisgICAgICAgICAgICBjYXNlICctJzogcmV0dXJuICdcdTBlMDInOworICAgICAgICAgICAgY2FzZSAnXyc6IHJldHVybiAnXHUwZTU4JzsKKyAgICAgICAgICAgIGNhc2UgJz0nOiByZXR1cm4gJ1x1MGUwOCc7CisgICAgICAgICAgICBjYXNlICcrJzogcmV0dXJuICdcdTBlNTknOworICAgICAgICAgICAgY2FzZSAncSc6IHJldHVybiAnXHUwZTQ2JzsKKyAgICAgICAgICAgIGNhc2UgJ1EnOiByZXR1cm4gJ1x1MGU1MCc7CisgICAgICAgICAgICBjYXNlICd3JzogcmV0dXJuICdcdTBlNDQnOworICAgICAgICAgICAgY2FzZSAnVyc6IHJldHVybiAnXHUwMDIyJzsKKyAgICAgICAgICAgIGNhc2UgJ2UnOiByZXR1cm4gJ1x1MGUzMyc7CisgICAgICAgICAgICBjYXNlICdFJzogcmV0dXJuICdcdTBlMGUnOworICAgICAgICAgICAgY2FzZSAncic6IHJldHVybiAnXHUwZTFlJzsKKyAgICAgICAgICAgIGNhc2UgJ1InOiByZXR1cm4gJ1x1MGUxMSc7CisgICAgICAgICAgICBjYXNlICd0JzogcmV0dXJuICdcdTBlMzAnOworICAgICAgICAgICAgY2FzZSAnVCc6IHJldHVybiAnXHUwZTE4JzsKKyAgICAgICAgICAgIGNhc2UgJ3knOiByZXR1cm4gJ1x1MGUzMSc7CisgICAgICAgICAgICBjYXNlICdZJzogcmV0dXJuICdcdTBlNGQnOworICAgICAgICAgICAgY2FzZSAndSc6IHJldHVybiAnXHUwZTM1JzsKKyAgICAgICAgICAgIGNhc2UgJ1UnOiByZXR1cm4gJ1x1MGU0YSc7CisgICAgICAgICAgICBjYXNlICdpJzogcmV0dXJuICdcdTBlMjMnOworICAgICAgICAgICAgY2FzZSAnSSc6IHJldHVybiAnXHUwZTEzJzsKKyAgICAgICAgICAgIGNhc2UgJ28nOiByZXR1cm4gJ1x1MGUxOSc7CisgICAgICAgICAgICBjYXNlICdPJzogcmV0dXJuICdcdTBlMmYnOworICAgICAgICAgICAgY2FzZSAncCc6IHJldHVybiAnXHUwZTIyJzsKKyAgICAgICAgICAgIGNhc2UgJ1AnOiByZXR1cm4gJ1x1MGUwZCc7CisgICAgICAgICAgICBjYXNlICdbJzogcmV0dXJuICdcdTBlMWEnOworICAgICAgICAgICAgY2FzZSAneyc6IHJldHVybiAnXHUwZTEwJzsKKyAgICAgICAgICAgIGNhc2UgJ10nOiByZXR1cm4gJ1x1MGUyNSc7CisgICAgICAgICAgICBjYXNlICd9JzogcmV0dXJuICdcdTAwMmMnOworICAgICAgICAgICAgY2FzZSAnXFwnOiByZXR1cm4gJ1x1MGUwMyc7CisgICAgICAgICAgICBjYXNlICd8JzogcmV0dXJuICdcdTBlMDUnOworICAgICAgICAgICAgY2FzZSAnYSc6IHJldHVybiAnXHUwZTFmJzsKKyAgICAgICAgICAgIGNhc2UgJ0EnOiByZXR1cm4gJ1x1MGUyNCc7CisgICAgICAgICAgICBjYXNlICdzJzogcmV0dXJuICdcdTBlMmInOworICAgICAgICAgICAgY2FzZSAnUyc6IHJldHVybiAnXHUwZTA2JzsKKyAgICAgICAgICAgIGNhc2UgJ2QnOiByZXR1cm4gJ1x1MGUwMSc7CisgICAgICAgICAgICBjYXNlICdEJzogcmV0dXJuICdcdTBlMGYnOworICAgICAgICAgICAgY2FzZSAnZic6IHJldHVybiAnXHUwZTE0JzsKKyAgICAgICAgICAgIGNhc2UgJ0YnOiByZXR1cm4gJ1x1MGU0Mic7CisgICAgICAgICAgICBjYXNlICdnJzogcmV0dXJuICdcdTBlNDAnOworICAgICAgICAgICAgY2FzZSAnRyc6IHJldHVybiAnXHUwZTBjJzsKKyAgICAgICAgICAgIGNhc2UgJ2gnOiByZXR1cm4gJ1x1MGU0OSc7CisgICAgICAgICAgICBjYXNlICdIJzogcmV0dXJuICdcdTBlNDcnOworICAgICAgICAgICAgY2FzZSAnaic6IHJldHVybiAnXHUwZTQ4JzsKKyAgICAgICAgICAgIGNhc2UgJ0onOiByZXR1cm4gJ1x1MGU0Yic7CisgICAgICAgICAgICBjYXNlICdrJzogcmV0dXJuICdcdTBlMzInOworICAgICAgICAgICAgY2FzZSAnSyc6IHJldHVybiAnXHUwZTI5JzsKKyAgICAgICAgICAgIGNhc2UgJ2wnOiByZXR1cm4gJ1x1MGUyYSc7CisgICAgICAgICAgICBjYXNlICdMJzogcmV0dXJuICdcdTBlMjgnOworICAgICAgICAgICAgY2FzZSAnOyc6IHJldHVybiAnXHUwZTI3JzsKKyAgICAgICAgICAgIGNhc2UgJzonOiByZXR1cm4gJ1x1MGUwYic7CisgICAgICAgICAgICBjYXNlICdcJyc6IHJldHVybiAnXHUwZTA3JzsKKyAgICAgICAgICAgIGNhc2UgJ1wiJzogcmV0dXJuICdcdTAwMmUnOworICAgICAgICAgICAgY2FzZSAneic6IHJldHVybiAnXHUwZTFjJzsKKyAgICAgICAgICAgIGNhc2UgJ1onOiByZXR1cm4gJ1x1MDAyOCc7CisgICAgICAgICAgICBjYXNlICd4JzogcmV0dXJuICdcdTBlMWInOworICAgICAgICAgICAgY2FzZSAnWCc6IHJldHVybiAnXHUwMDI5JzsKKyAgICAgICAgICAgIGNhc2UgJ2MnOiByZXR1cm4gJ1x1MGU0MSc7CisgICAgICAgICAgICBjYXNlICdDJzogcmV0dXJuICdcdTBlMDknOworICAgICAgICAgICAgY2FzZSAndic6IHJldHVybiAnXHUwZTJkJzsKKyAgICAgICAgICAgIGNhc2UgJ1YnOiByZXR1cm4gJ1x1MGUyZSc7CisgICAgICAgICAgICBjYXNlICdiJzogcmV0dXJuICdcdTBlMzQnOworICAgICAgICAgICAgY2FzZSAnQic6IHJldHVybiAnXHUwZTNhJzsKKyAgICAgICAgICAgIGNhc2UgJ24nOiByZXR1cm4gJ1x1MGUzNyc7CisgICAgICAgICAgICBjYXNlICdOJzogcmV0dXJuICdcdTBlNGMnOworICAgICAgICAgICAgY2FzZSAnbSc6IHJldHVybiAnXHUwZTE3JzsKKyAgICAgICAgICAgIGNhc2UgJ00nOiByZXR1cm4gJ1x1MDAzZic7CisgICAgICAgICAgICBjYXNlICcsJzogcmV0dXJuICdcdTBlMjEnOworICAgICAgICAgICAgY2FzZSAnPCc6IHJldHVybiAnXHUwZTEyJzsKKyAgICAgICAgICAgIGNhc2UgJy4nOiByZXR1cm4gJ1x1MGU0Myc7CisgICAgICAgICAgICBjYXNlICc+JzogcmV0dXJuICdcdTBlMmMnOworICAgICAgICAgICAgY2FzZSAnLyc6IHJldHVybiAnXHUwZTFkJzsKKyAgICAgICAgICAgIGNhc2UgJz8nOiByZXR1cm4gJ1x1MGUyNic7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvVHJhbnNmZXJhYmxlVGV4dC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RyYW5zZmVyYWJsZVRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MDgxYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1RyYW5zZmVyYWJsZVRleHQuamF2YQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBUcmFuc2ZlcmFibGVUZXh0LmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTE6MjMgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWw7CisKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuU3RyaW5nU2VsZWN0aW9uOworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5EYXRhRmxhdm9yOworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5VbnN1cHBvcnRlZEZsYXZvckV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGFsbG93cyBNQ29uc3RUZXh0IGluc3RhbmNlcyB0byBiZSB0aGUgY29udGVudHMKKyAqIG9mIGEgQ2xpcGJvYXJkLiAgVG8gc3RvcmUgYW4gTUNvbnN0VGV4dCBvbiB0aGUgY2xpcGJvYXJkLAorICogY29uc3RydWN0IGEgVHJhbnNmZXJhYmxlVGV4dCBmcm9tIHRoZSBNQ29uc3RUZXh0LCBhbmQgbWFrZQorICogdGhlIFRyYW5zZmVyYWJsZVRleHQgdGhlIGNsaXBib2FyZCBjb250ZW50cy4KKyAqCisgKi8KKy8qCisgKiBOb3RlOiAgdGhpcyBjbGFzcyBpbmhlcml0cyBmcm9tIFN0cmluZ1NlbGVjdGlvbiBiZWNhdXNlIG9mCisgKiBhIGJ1ZyBpbiB0aGUgMS4xLjcgc3lzdGVtIGNsaXBib2FyZCBpbXBsZW1lbnRhdGlvbi4gIFRoZQorICogc3lzdGVtIGNsaXBib2FyZCB3b24ndCBwdXQgdGV4dCBvbiB0aGUgT1MgY2xpcGJvYXJkIHVubGVzcworICogdGhlIGNvbnRlbnQgaXMgYSBTdHJpbmdTZWxlY3Rpb24uCisgKi8KK2ZpbmFsIGNsYXNzIFRyYW5zZmVyYWJsZVRleHQgZXh0ZW5kcyBTdHJpbmdTZWxlY3Rpb24KK3sKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgTUNvbnN0VGV4dCBmVGV4dDsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXh0VG9TdHJpbmcoTUNvbnN0VGV4dCB0ZXh0KSB7CisgICAgICAgIGNoYXJbXSBjaGFycyA9IG5ldyBjaGFyW3RleHQubGVuZ3RoKCldOworICAgICAgICB0ZXh0LmV4dHJhY3RDaGFycygwLCBjaGFycy5sZW5ndGgsIGNoYXJzLCAwKTsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoY2hhcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIFRyYW5zZmVyYWJsZVRleHQgZm9yIHRoZSBnaXZlbiB0ZXh0LgorICAgICAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIGdvIG9uIHRoZSBDbGlwYm9hcmQuICBUaGUgdGV4dCBpcworICAgICAqICAgICBhZG9wdGVkIGJ5IHRoaXMgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBUcmFuc2ZlcmFibGVUZXh0KE1Db25zdFRleHQgdGV4dCkgeworCisgICAgICAgIHN1cGVyKHRleHRUb1N0cmluZyh0ZXh0KSk7CisKKyAgICAgICAgZlRleHQgPSB0ZXh0OworICAgIH0KKworICAgIHB1YmxpYyBEYXRhRmxhdm9yW10gZ2V0VHJhbnNmZXJEYXRhRmxhdm9ycygpIHsKKworICAgICAgICBEYXRhRmxhdm9yW10gZmxhdm9ycyA9IHN1cGVyLmdldFRyYW5zZmVyRGF0YUZsYXZvcnMoKTsKKyAgICAgICAgRGF0YUZsYXZvcltdIHJlc3VsdCA9IG5ldyBEYXRhRmxhdm9yW2ZsYXZvcnMubGVuZ3RoKzFdOworICAgICAgICByZXN1bHRbMF0gPSBNQ29uc3RUZXh0LnN0eWxlZFRleHRGbGF2b3I7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZmxhdm9ycywgMCwgcmVzdWx0LCAxLCBmbGF2b3JzLmxlbmd0aCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNEYXRhRmxhdm9yU3VwcG9ydGVkKERhdGFGbGF2b3IgZmxhdm9yKSB7CisKKyAgICAgICAgaWYgKGZsYXZvci5lcXVhbHMoTUNvbnN0VGV4dC5zdHlsZWRUZXh0Rmxhdm9yKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIuaXNEYXRhRmxhdm9yU3VwcG9ydGVkKGZsYXZvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGdldFRyYW5zZmVyRGF0YShEYXRhRmxhdm9yIGZsYXZvcikgdGhyb3dzIFVuc3VwcG9ydGVkRmxhdm9yRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgaWYgKGZsYXZvci5lcXVhbHMoTUNvbnN0VGV4dC5zdHlsZWRUZXh0Rmxhdm9yKSkgeworICAgICAgICAgICAgcmV0dXJuIGZUZXh0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFRyYW5zZmVyRGF0YShmbGF2b3IpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL1R5cGluZ0ludGVyYWN0b3IuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UeXBpbmdJbnRlcmFjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWEwN2ZlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3RleHRwYW5lbC9UeXBpbmdJbnRlcmFjdG9yLmphdmEKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFR5cGluZ0ludGVyYWN0b3IuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0OCAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLyoKKyAgICAyLzI1Lzk5IC0gTm93IHByb2Nlc3NpbmcgY2hhcmFjdGVycyBmcm9tIGtleVR5cGVkIG1ldGhvZCAobm90IGtleVByZXNzZWQpLgorICAgICAgICAgICAgICBUaGlzIG5ldyB3YXkgaXMgaW5wdXQtbWV0aG9kIGZyaWVuZGx5IG9uIDEuMiwgYW5kIGlzIGdlbmVyYWxseQorICAgICAgICAgICAgICBtb3JlIGNvcnJlY3QuCisKKyAgICA3LzcvOTcgLSB0aGUgbW91c2VEaWRTb21ldGhpbmcgbWV0aG9kcyB1c2VkIHRvIHJlbW92ZSB0aGUgdHlwaW5nIGludGVyYWN0b3IuCisgICAgICAgICAgICBUaGlzIGlzIGRlZmluaXRlbHkgd3JvbmcsIGJ1dCBtYXliZSB0aGF0IG1hZGUgc2Vuc2UgYXQgb25lIHRpbWUuICBBbnl3YXksCisgICAgICAgICAgICBub3cgdGhlIG1vdXNlUHJlc3NlZCAvIG1vdXNlUmVsZWFzZWQgbWV0aG9kcyByZW1vdmUgdGhlIGludGVyYWN0b3I7ICB0aGUKKyAgICAgICAgICAgIG90aGVycyBkbyBub3RoaW5nLgorKi8KKworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LktleUV2ZW50OworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lk1vdXNlRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuRm9jdXNFdmVudDsKKworaW1wb3J0IGphdmEudGV4dC5CcmVha0l0ZXJhdG9yOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1Db25zdFRleHQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5TdHlsZWRUZXh0OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGZvcm1hdC5UZXh0T2Zmc2V0OworCitmaW5hbCBjbGFzcyBUeXBpbmdJbnRlcmFjdG9yIGV4dGVuZHMgQmVoYXZpb3IgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgQkFDS1NQQUNFID0gODsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFRBQiA9ICdcdCc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBSRVRVUk4gPSAnXHInOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgTElORV9GRUVEID0gJ1xuJzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFBBUkFHUkFQSF9TRVAgPSAnXHUyMDI5JzsKKyAgICAKKyAgICBwcml2YXRlIFRleHRDb21wb25lbnQgZlRleHRDb21wb25lbnQ7CisgICAgcHJpdmF0ZSBUZXh0U2VsZWN0aW9uIGZTZWxlY3Rpb247CisgICAgcHJpdmF0ZSBBdHRyaWJ1dGVNYXAgZlR5cGluZ1N0eWxlOworICAgIHByaXZhdGUgTUNvbnN0VGV4dCBmVGV4dDsKKyAgICBwcml2YXRlIFRleHRFZGl0QmVoYXZpb3IgZlBhcmVudDsKKyAgICBwcml2YXRlIFRleHRDaGFuZ2VDb21tYW5kIGZDb21tYW5kID0gbnVsbDsKKyAgICBwcml2YXRlIFNpbXBsZUNvbW1hbmRMb2cgZkNvbW1hbmRMb2c7CisgICAgcHJpdmF0ZSBQYW5lbEV2ZW50QnJvYWRjYXN0ZXIgZkxpc3RlbmVyOworICAgIHByaXZhdGUgQnJlYWtJdGVyYXRvciBmQ2hhckJyZWFrID0gbnVsbDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBOb3QgYWxsIGNoYXJhY3RlcnMgdGhhdCBjb21lIGZyb20gdGhlIGtleWJvYXJkIGFyZSBoYW5kbGVkCisgICAgICogYXMgaW5wdXQuICBGb3IgZXhhbXBsZSwgY3RybC1jIGlzIG5vdCBhIHR5cGFibGUgY2hhcmFjdGVyLgorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hldGhlciBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyIGZyb20KKyAgICAgKiB0aGUga2V5Ym9hcmQgd2lsbCBhZmZlY3QgdGhlIHRleHQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1R5cGluZ0ludGVyYWN0b3JDaGFyKGNoYXIgY2gpIHsKKworICAgICAgICByZXR1cm4gY2ggPj0gJyAnIHx8IAorICAgICAgICAgICAgICAgY2ggPT0gTElORV9GRUVEIHx8IAorICAgICAgICAgICAgICAgY2ggPT0gUkVUVVJOIHx8CisgICAgICAgICAgICAgICBjaCA9PSBUQUIgfHwgCisgICAgICAgICAgICAgICBjaCA9PSBCQUNLU1BBQ0U7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hldGhlciBhIFR5cGluZ0ludGVyYWN0b3Igc2hvdWxkCisgICAgICogaGFuZGxlIHRoZSBnaXZlbiBLZXlFdmVudC4KKyAgICAgKi8KKyAgICBzdGF0aWMgYm9vbGVhbiBoYW5kbGVkQnlUeXBpbmdJbnRlcmFjdG9yKEtleUV2ZW50IGV2ZW50KSB7CisKKyAgICAgICAgZmluYWwgaW50IGlkID0gZXZlbnQuZ2V0SUQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpZCA9PSBldmVudC5LRVlfVFlQRUQpIHsKKyAgICAgICAgICAgIHJldHVybiBpc1R5cGluZ0ludGVyYWN0b3JDaGFyKGV2ZW50LmdldEtleUNoYXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gKGlkID09IEtleUV2ZW50LktFWV9QUkVTU0VEICYmIAorICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfREVMRVRFKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBUeXBpbmdJbnRlcmFjdG9yKFRleHRDb21wb25lbnQgdGV4dENvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0U2VsZWN0aW9uIHNlbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgdHlwaW5nU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEVkaXRCZWhhdmlvciBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlQ29tbWFuZExvZyBjb21tYW5kTG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhbmVsRXZlbnRCcm9hZGNhc3RlciBsaXN0ZW5lcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBmVGV4dENvbXBvbmVudCA9IHRleHRDb21wb25lbnQ7CisgICAgICAgIGZUZXh0ID0gdGV4dENvbXBvbmVudC5nZXRUZXh0KCk7CisgICAgICAgIGZTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisgICAgICAgIGZUeXBpbmdTdHlsZSA9IHR5cGluZ1N0eWxlOworICAgICAgICBmUGFyZW50ID0gcGFyZW50OworICAgICAgICBmQ29tbWFuZExvZyA9IGNvbW1hbmRMb2c7CisgICAgICAgIGZMaXN0ZW5lciA9IGxpc3RlbmVyOworCisgICAgICAgIGZQYXJlbnQuc2V0VHlwaW5nSW50ZXJhY3Rvcih0aGlzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZW5kSW50ZXJhY3Rpb24oKSB7CisKKyAgICAgICAgcmVtb3ZlRnJvbU93bmVyKCk7CisgICAgICAgIHBvc3RUZXh0Q2hhbmdlQ29tbWFuZCgpOworCisgICAgICAgIGludCBzZWxTdGFydCA9IGZTZWxlY3Rpb24uZ2V0U3RhcnQoKS5mT2Zmc2V0OworICAgICAgICBpbnQgc2VsTGltaXQgPSBmU2VsZWN0aW9uLmdldEVuZCgpLmZPZmZzZXQ7CisgICAgICAgIGZQYXJlbnQuc2V0U2F2ZWRUeXBpbmdTdHlsZShzZWxTdGFydD09c2VsTGltaXQ/IGZUeXBpbmdTdHlsZSA6IG51bGwsIHNlbFN0YXJ0KTsKKyAgICAgICAgCisgICAgICAgIGZQYXJlbnQuc2V0VHlwaW5nSW50ZXJhY3RvcihudWxsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiB0ZXh0Q29udHJvbEV2ZW50T2NjdXJyZWQoQmVoYXZpb3IuRXZlbnRUeXBlIGV2ZW50LCBPYmplY3Qgd2hhdCkgeworCisgICAgICAgIGlmIChmQ29tbWFuZCA9PSBudWxsICYmIGV2ZW50ID09IEJlaGF2aW9yLkNIQVJBQ1RFUl9TVFlMRV9NT0QpIHsKKworICAgICAgICAgICAgcGlja1VwVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgICAgIGZUeXBpbmdTdHlsZSA9ICgoU3R5bGVNb2RpZmllcil3aGF0KS5tb2RpZnlTdHlsZShmVHlwaW5nU3R5bGUpOworCisgICAgICAgICAgICBmTGlzdGVuZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fU1RZTEVTX0NIQU5HRUQpOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEJlaGF2aW9yIG5leHQgPSBuZXh0QmVoYXZpb3IoKTsgLy8gc2F2ZSBiZWNhdXNlIHJlbW92ZUZyb21Pd25lcigpIHdpbGwgdHJhc2ggdGhpcworCisgICAgICAgICAgICBlbmRJbnRlcmFjdGlvbigpOworCisgICAgICAgICAgICBpZiAobmV4dCAhPSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LnRleHRDb250cm9sRXZlbnRPY2N1cnJlZChldmVudCwgd2hhdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRvQmFja3NwYWNlKCkgeworCisgICAgICAgIGludCBzZWxTdGFydCA9IGZTZWxlY3Rpb24uZ2V0U3RhcnQoKS5mT2Zmc2V0OworICAgICAgICBpbnQgc2VsTGltaXQgPSBmU2VsZWN0aW9uLmdldEVuZCgpLmZPZmZzZXQ7CisKKyAgICAgICAgaWYgKHNlbFN0YXJ0ID09IHNlbExpbWl0KSB7CisgICAgICAgICAgICBpZiAoc2VsU3RhcnQgIT0gMCkgeworICAgICAgICAgICAgICAgIGZUeXBpbmdTdHlsZSA9IG51bGw7CisgICAgICAgICAgICAgICAgcGlja1VwVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBtYWtlVGV4dENoYW5nZUNvbW1hbmQoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VsU3RhcnQgPD0gZkNvbW1hbmQuYWZmZWN0ZWRSYW5nZVN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZkNvbW1hbmQucHJlcGVuZFRvT2xkVGV4dChmVGV4dC5leHRyYWN0KHNlbFN0YXJ0IC0gMSwgc2VsU3RhcnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVGV4dE9mZnNldCBpbnNQdCA9IG5ldyBUZXh0T2Zmc2V0KHNlbFN0YXJ0IC0gMSk7CisgICAgICAgICAgICAgICAgZlBhcmVudC5kb1JlcGxhY2VUZXh0KHNlbFN0YXJ0IC0gMSwgc2VsU3RhcnQsIG51bGwsIGluc1B0LCBpbnNQdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmVHlwaW5nU3R5bGUgPSBudWxsOworICAgICAgICAgICAgbWFrZVRleHRDaGFuZ2VDb21tYW5kKCk7CisgICAgICAgICAgICBUZXh0T2Zmc2V0IGluc1B0ID0gbmV3IFRleHRPZmZzZXQoc2VsU3RhcnQpOworICAgICAgICAgICAgZlBhcmVudC5kb1JlcGxhY2VUZXh0KHNlbFN0YXJ0LCBzZWxMaW1pdCwgbnVsbCwgaW5zUHQsIGluc1B0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkb0Z3ZERlbGV0ZShib29sZWFuIGlnbm9yZUNoYXJCcmVhaykgeworCisgICAgICAgIGludCBzZWxTdGFydCA9IGZTZWxlY3Rpb24uZ2V0U3RhcnQoKS5mT2Zmc2V0OworICAgICAgICBpbnQgc2VsTGltaXQgPSBmU2VsZWN0aW9uLmdldEVuZCgpLmZPZmZzZXQ7CisKKyAgICAgICAgVGV4dE9mZnNldCBpbnNQdCA9IG5ldyBUZXh0T2Zmc2V0KHNlbFN0YXJ0KTsKKworICAgICAgICBpZiAoc2VsU3RhcnQgPT0gc2VsTGltaXQpIHsKKyAgICAgICAgICAgIGlmIChzZWxTdGFydCAhPSBmVGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGZUeXBpbmdTdHlsZSA9IG51bGw7CisgICAgICAgICAgICAgICAgbWFrZVRleHRDaGFuZ2VDb21tYW5kKCk7CisgICAgICAgICAgICAgICAgaW50IG51bUNoYXJzOworICAgICAgICAgICAgICAgIGlmIChpZ25vcmVDaGFyQnJlYWspIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtQ2hhcnMgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZDaGFyQnJlYWsgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZkNoYXJCcmVhayA9IEJyZWFrSXRlcmF0b3IuZ2V0Q2hhcmFjdGVySW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmQ2hhckJyZWFrLnNldFRleHQoZlRleHQuY3JlYXRlQ2hhcmFjdGVySXRlcmF0b3IoKSk7CisgICAgICAgICAgICAgICAgICAgIG51bUNoYXJzID0gZkNoYXJCcmVhay5mb2xsb3dpbmcoc2VsU3RhcnQpIC0gc2VsU3RhcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZDb21tYW5kLmFwcGVuZFRvT2xkVGV4dChmVGV4dC5leHRyYWN0KHNlbFN0YXJ0LCBzZWxTdGFydCArIG51bUNoYXJzKSk7CisgICAgICAgICAgICAgICAgZlBhcmVudC5kb1JlcGxhY2VUZXh0KHNlbFN0YXJ0LCBzZWxTdGFydCArIG51bUNoYXJzLCBudWxsLCBpbnNQdCwgaW5zUHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZlR5cGluZ1N0eWxlID0gbnVsbDsKKyAgICAgICAgICAgIG1ha2VUZXh0Q2hhbmdlQ29tbWFuZCgpOworICAgICAgICAgICAgZlBhcmVudC5kb1JlcGxhY2VUZXh0KHNlbFN0YXJ0LCBzZWxMaW1pdCwgbnVsbCwgaW5zUHQsIGluc1B0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkb05vcm1hbEtleShjaGFyIGNoKSB7CisKKyAgICAgICAgLy8gU2lnaCAtIDEuMSByZXBvcnRzIGVudGVyIGtleSBldmVudHMgYXMgcmV0dXJuIGNoYXJzLCBidXQKKyAgICAgICAgLy8gMS4yIHJlcG9ydHMgdGhlbSBhcyBsaW5lZmVlZHMuCisgICAgICAgIGlmIChjaCA9PSBSRVRVUk4pIHsKKyAgICAgICAgICAgIGNoID0gTElORV9GRUVEOworICAgICAgICB9CisgICAgICAgIHBpY2tVcFR5cGluZ1N0eWxlKCk7CisgICAgICAgIG1ha2VUZXh0Q2hhbmdlQ29tbWFuZCgpOworICAgICAgICBmUGFyZW50LmRvUmVwbGFjZVNlbGVjdGVkVGV4dChjaCwgZlR5cGluZ1N0eWxlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBmb2N1c0dhaW5lZChGb2N1c0V2ZW50IGUpIHsKKworICAgICAgICAvLyBwYXNzIHRocm91Z2gsIGJ1dCBzdGljayBhcm91bmQuLi4KKyAgICAgICAgcmV0dXJuIHN1cGVyLmZvY3VzR2FpbmVkKGUpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGZvY3VzTG9zdChGb2N1c0V2ZW50IGUpIHsKKworICAgICAgICAvLyBwYXNzIHRocm91Z2gsIGJ1dCBzdGljayBhcm91bmQuLi4KKyAgICAgICAgcmV0dXJuIHN1cGVyLmZvY3VzTG9zdChlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBrZXlUeXBlZChLZXlFdmVudCBlKSB7CisKKyAgICAgICAgaWYgKGUuZ2V0S2V5Q2hhcigpID09IEJBQ0tTUEFDRSkgeworICAgICAgICAgICAgZG9CYWNrc3BhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc1R5cGluZ0ludGVyYWN0b3JDaGFyKGUuZ2V0S2V5Q2hhcigpKSkgeworICAgICAgICAgICAgICAgIEtleVJlbWFwIHJlbWFwID0gZlBhcmVudC5nZXRLZXlSZW1hcCgpOworICAgICAgICAgICAgICAgIGRvTm9ybWFsS2V5KHJlbWFwLnJlbWFwKGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGtleVByZXNzZWQoS2V5RXZlbnQgZSkgeworCisgICAgICAgIGludCBrZXkgPSBlLmdldEtleUNvZGUoKTsKKyAgICAgICAgaWYgKGtleSA9PSBLZXlFdmVudC5WS19ERUxFVEUpIHsKKyAgICAgICAgICAgIGRvRndkRGVsZXRlKGUuaXNTaGlmdERvd24oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEJlaGF2aW9yIG5leHQgPSBuZXh0QmVoYXZpb3IoKTsKKworICAgICAgICBpZiAoVGV4dFNlbGVjdGlvbi5rZXlBZmZlY3RzU2VsZWN0aW9uKGUpKSB7CisKKyAgICAgICAgICAgIGVuZEludGVyYWN0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV4dC5rZXlQcmVzc2VkKGUpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG1ha2VUZXh0Q2hhbmdlQ29tbWFuZCgpIHsKKyAgICAgICAgaWYgKGZDb21tYW5kID09IG51bGwpIHsKKyAgICAgICAgICAgIFRleHRPZmZzZXQgIHNlbFN0YXJ0ID0gZlNlbGVjdGlvbi5nZXRTdGFydCgpOworICAgICAgICAgICAgVGV4dE9mZnNldCAgc2VsRW5kID0gZlNlbGVjdGlvbi5nZXRFbmQoKTsKKworICAgICAgICAgICAgTVRleHQgd3JpdGFibGVUZXh0ID0gbmV3IFN0eWxlZFRleHQoKTsKKyAgICAgICAgICAgIHdyaXRhYmxlVGV4dC5yZXBsYWNlKDAsIDAsIGZUZXh0LCBzZWxTdGFydC5mT2Zmc2V0LCBzZWxFbmQuZk9mZnNldCk7CisgICAgICAgICAgICBmQ29tbWFuZCA9IG5ldyBUZXh0Q2hhbmdlQ29tbWFuZChmUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZVRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIHNlbFN0YXJ0LmZPZmZzZXQsIHNlbFN0YXJ0LCBzZWxFbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUZXh0T2Zmc2V0KCksIG5ldyBUZXh0T2Zmc2V0KCkpOworCisgICAgICAgICAgICBmTGlzdGVuZXIudGV4dFN0YXRlQ2hhbmdlZChUZXh0UGFuZWxFdmVudC5VTkRPX1NUQVRFX0NIQU5HRUQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gbW91c2VEcmFnZ2VkKE1vdXNlRXZlbnQgZSkgeworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG1vdXNlRW50ZXJlZChNb3VzZUV2ZW50IGUpIHsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBtb3VzZUV4aXRlZChNb3VzZUV2ZW50IGUpIHsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBtb3VzZU1vdmVkKE1vdXNlRXZlbnQgZSkgeworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG1vdXNlUHJlc3NlZChNb3VzZUV2ZW50IGUpIHsKKworICAgICAgICBCZWhhdmlvciBuZXh0ID0gbmV4dEJlaGF2aW9yKCk7IC8vIHNhdmUgYmVjYXVzZSByZW1vdmVGcm9tT3duZXIoKSB3aWxsIHRyYXNoIHRoaXMKKworICAgICAgICBlbmRJbnRlcmFjdGlvbigpOworCisgICAgICAgIGlmIChuZXh0ICE9IG51bGwpCisgICAgICAgICAgICByZXR1cm4gbmV4dC5tb3VzZVByZXNzZWQoZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBtb3VzZVJlbGVhc2VkKE1vdXNlRXZlbnQgZSkgeworCisgICAgICAgIEJlaGF2aW9yIG5leHQgPSBuZXh0QmVoYXZpb3IoKTsgLy8gc2F2ZSBiZWNhdXNlIHJlbW92ZUZyb21Pd25lcigpIHdpbGwgdHJhc2ggdGhpcworCisgICAgICAgIGVuZEludGVyYWN0aW9uKCk7CisKKyAgICAgICAgaWYgKG5leHQgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBuZXh0Lm1vdXNlUmVsZWFzZWQoZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcGlja1VwVHlwaW5nU3R5bGUoKSB7CisgICAgICAgIGlmIChmVHlwaW5nU3R5bGUgPT0gbnVsbCkgeworICAgICAgICAgICAgaW50IHNlbFN0YXJ0ID0gZlNlbGVjdGlvbi5nZXRTdGFydCgpLmZPZmZzZXQ7CisgICAgICAgICAgICBpbnQgc2VsTGltaXQgPSBmU2VsZWN0aW9uLmdldEVuZCgpLmZPZmZzZXQ7CisgICAgICAgICAgICBmVHlwaW5nU3R5bGUgPSBUZXh0RWRpdEJlaGF2aW9yLnR5cGluZ1N0eWxlQXQoZlRleHQsIHNlbFN0YXJ0LCBzZWxMaW1pdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcG9zdFRleHRDaGFuZ2VDb21tYW5kKCkgeworICAgICAgICBpZiAoZkNvbW1hbmQgIT0gbnVsbCkgeworICAgICAgICAgICAgVGV4dE9mZnNldCAgc2VsU3RhcnQgPSBmU2VsZWN0aW9uLmdldFN0YXJ0KCk7CisgICAgICAgICAgICBUZXh0T2Zmc2V0ICBzZWxFbmQgPSBmU2VsZWN0aW9uLmdldEVuZCgpOworCisgICAgICAgICAgICBmQ29tbWFuZC5zZXROZXdUZXh0KGZUZXh0LmV4dHJhY3QoZkNvbW1hbmQuYWZmZWN0ZWRSYW5nZVN0YXJ0KCksIHNlbFN0YXJ0LmZPZmZzZXQpKTsKKyAgICAgICAgICAgIGZDb21tYW5kLnNldFNlbFJhbmdlQWZ0ZXIoc2VsU3RhcnQsIHNlbEVuZCk7CisgICAgICAgICAgICBmQ29tbWFuZExvZy5hZGQoZkNvbW1hbmQpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbGVhbiBoYXNQZW5kaW5nQ29tbWFuZCgpIHsKKworICAgICAgICByZXR1cm4gZkNvbW1hbmQgIT0gbnVsbDsKKyAgICB9CisKKyAgICBBdHRyaWJ1dGVNYXAgZ2V0VHlwaW5nU3R5bGUoKSB7CisKKyAgICAgICAgcGlja1VwVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuIGZUeXBpbmdTdHlsZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC90ZXh0cGFuZWwvcGFja2FnZS5odG1sIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNmExODc4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdGV4dHBhbmVsL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDcgQEAKKzxodG1sPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiPgorUHJvdmlkZXMgY29tcG9uZW50cyAoZm9yIGJvdGggQVdUIGFuZCBTd2luZykKK2luIHdoaWNoIHN0eWxlZCB0ZXh0IGlzIGRpc3BsYXllZCBhbmQgZWRpdGVkLCBhbmQKK3JlbGF0ZWQgY2xhc3Nlcy4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9BYm91dFRleHQuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9BYm91dFRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZmI0ZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0Fib3V0VGV4dC5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEFib3V0VGV4dC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjQ5ICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudWlpbXBsOworCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5yZXNvdXJjZXMuRnJhbWVSZXNvdXJjZXM7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuTUNvbnN0VGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVkVGV4dDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5UZXh0QXR0cmlidXRlOworCitwdWJsaWMgZmluYWwgY2xhc3MgQWJvdXRUZXh0IHsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENvbG9yW10gQ09MT1JTID0geworICAgICAgICBDb2xvci5yZWQsIENvbG9yLmJsdWUsIENvbG9yLndoaXRlLCBDb2xvci5ncmVlbgorICAgIH07CisgICAgCisgICAgcHVibGljIHN0YXRpYyBNQ29uc3RUZXh0IGdldEFib3V0VGV4dCgpIHsKKworICAgICAgICBTdHJpbmcgdGV4dCA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuQUJPVVRfVEVYVCk7CisgICAgICAgIFN0eWxlZFRleHQgc3R5bGVkVGV4dCA9IG5ldyBTdHlsZWRUZXh0KHRleHQsIEF0dHJpYnV0ZU1hcC5FTVBUWV9BVFRSSUJVVEVfTUFQKTsKKworICAgICAgICBpbnQgbGVuZ3RoID0gc3R5bGVkVGV4dC5sZW5ndGgoKTsKKyAgICAgICAgaW50IGk9MDsKKworICAgICAgICBmb3IgKGludCBwYXJhZ3JhcGhTdGFydCA9IDAsIHBhcmFncmFwaExpbWl0OworICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTdGFydCA8IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoU3RhcnQgPSBwYXJhZ3JhcGhMaW1pdCkgeworCisgICAgICAgICAgICBwYXJhZ3JhcGhMaW1pdCA9IHN0eWxlZFRleHQucGFyYWdyYXBoTGltaXQocGFyYWdyYXBoU3RhcnQpOworICAgICAgICAgICAgU3R5bGVNb2RpZmllciBtb2RpZmllciA9IFN0eWxlTW9kaWZpZXIuY3JlYXRlQWRkTW9kaWZpZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0QXR0cmlidXRlLkZPUkVHUk9VTkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0xPUlNbKGkrKyklQ09MT1JTLmxlbmd0aF0pOworICAgICAgICAgICAgc3R5bGVkVGV4dC5tb2RpZnlDaGFyYWN0ZXJTdHlsZXMocGFyYWdyYXBoU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0eWxlTW9kaWZpZXIgbW9kaWZpZXIgPSBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0QXR0cmlidXRlLkxJTkVfRkxVU0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuRkxVU0hfQ0VOVEVSKTsKKworICAgICAgICBzdHlsZWRUZXh0Lm1vZGlmeVBhcmFncmFwaFN0eWxlcygwLCB0ZXh0Lmxlbmd0aCgpLCBtb2RpZmllcik7CisKKyAgICAgICAgcmV0dXJuIHN0eWxlZFRleHQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9Cb29sZWFuU3R5bGVNZW51SXRlbS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0Jvb2xlYW5TdHlsZU1lbnVJdGVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI0NmNkZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9Cb29sZWFuU3R5bGVNZW51SXRlbS5qYXZhCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEJvb2xlYW5TdHlsZU1lbnVJdGVtLmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NDkgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC51aWltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbEV2ZW50OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKKworcHVibGljIGZpbmFsIGNsYXNzIEJvb2xlYW5TdHlsZU1lbnVJdGVtIGV4dGVuZHMgU2luZ2xlQ2hlY2tNZW51SXRlbSB7CisgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IGZLZXk7CisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGZDaGFyYWN0ZXI7CisKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBmT25WYWx1ZTsKKyAgICAKKyAgICBwdWJsaWMgQm9vbGVhblN0eWxlTWVudUl0ZW0oT2JqZWN0IHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qgb25WYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVudURhdGEgbWVudURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gY2hhcmFjdGVyKSB7CisgICAgICAgIAorICAgICAgICBzdXBlcihtZW51RGF0YSk7CisgICAgICAgIGlmIChvblZhbHVlID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9uIHZhbHVlIGNhbm5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKworICAgICAgICBmS2V5ID0gc3R5bGU7CisgICAgICAgIGZDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CisgICAgICAgIAorICAgICAgICBmT25WYWx1ZSA9IG9uVmFsdWU7CisgICAgICAgIGZJdGVtLmFkZExpc3RlbmVyKG5ldyBFdmVudExpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgZXZlbnRPY2N1cnJlZChFdmVudE9iamVjdCBldmVudCkgeworICAgICAgICAgICAgICAgIFN0eWxlTW9kaWZpZXIgbW9kaWZpZXI7CisgICAgICAgICAgICAgICAgTVRleHRQYW5lbCBwYW5lbCA9IGdldFRleHRQYW5lbCgpOworICAgICAgICAgICAgICAgIGlmIChwYW5lbCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWVudSBpdGVtIGlzIGVuYWJsZWQgd2hlbiBwYW5lbCBpcyBudWxsISIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29udGludW91c0FuZENvbW1hbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVTZXQgc2V0ID0gbmV3IEF0dHJpYnV0ZVNldChmS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXIgPSBTdHlsZU1vZGlmaWVyLmNyZWF0ZVJlbW92ZU1vZGlmaWVyKHNldCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtb2RpZmllciA9IFN0eWxlTW9kaWZpZXIuY3JlYXRlQWRkTW9kaWZpZXIoZktleSwgZk9uVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZkNoYXJhY3RlciA9PSBDSEFSQUNURVIpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFuZWwubW9kaWZ5Q2hhcmFjdGVyU3R5bGVPblNlbGVjdGlvbihtb2RpZmllcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYW5lbC5tb2RpZnlQYXJhZ3JhcGhTdHlsZU9uU2VsZWN0aW9uKG1vZGlmaWVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIGJvb2xlYW4gY29udGludW91c0FuZENvbW1hbmQoKSB7CisgICAgICAgIAorICAgICAgICBNVGV4dFBhbmVsIHBhbmVsID0gZ2V0VGV4dFBhbmVsKCk7CisKKyAgICAgICAgT2JqZWN0IHZhbHVlID0gKGZDaGFyYWN0ZXIgPT0gQ0hBUkFDVEVSKT8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuZ2V0Q2hhcmFjdGVyU3R5bGVPdmVyU2VsZWN0aW9uKGZLZXkpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5nZXRQYXJhZ3JhcGhTdHlsZU92ZXJTZWxlY3Rpb24oZktleSk7CisgICAgICAgIHJldHVybiBmT25WYWx1ZS5lcXVhbHModmFsdWUpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRDaGVja2VkKCkgeworICAgICAgICAKKyAgICAgICAgZkl0ZW0uc2V0U3RhdGUoY29udGludW91c0FuZENvbW1hbmQoKSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBib29sZWFuIHJlc3BvbmRzVG9FdmVudFR5cGUoaW50IHR5cGUpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0eXBlID09IFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9TVFlMRVNfQ0hBTkdFRDsKKyAgICB9CisgICAgCisgICAgcHVibGljIGZpbmFsIHZvaWQgdGV4dEV2ZW50T2NjdXJyZWQoVGV4dFBhbmVsRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgCisgICAgICAgIHNldENoZWNrZWQoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0Nob2ljZU1lbnVJdGVtU2V0LmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvQ2hvaWNlTWVudUl0ZW1TZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYzM2YTBlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0Nob2ljZU1lbnVJdGVtU2V0LmphdmEKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQ2hvaWNlTWVudUl0ZW1TZXQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwMi8wMi8xNiAwMzowNjo0OSAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKKworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbEV2ZW50OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIENob2ljZU1lbnVJdGVtU2V0IGV4dGVuZHMgTWVudUl0ZW1TZXQgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBNSXRlbVtdIGZJdGVtczsKKyAgICBwcml2YXRlIEhhc2h0YWJsZSBmSXRlbVRvU3R5bGVNYXA7CisgICAgCisgICAgQ2hvaWNlTWVudUl0ZW1TZXQoT2JqZWN0W10gdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgIE1lbnVEYXRhW10gbWVudURhdGEpIHsKKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoICE9IG1lbnVEYXRhLmxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbHVlcyBhbmQgbmFtZXMgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aCIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmSXRlbXMgPSBuZXcgTUl0ZW1bbWVudURhdGEubGVuZ3RoXTsKKyAgICAgICAgZkl0ZW1Ub1N0eWxlTWFwID0gbmV3IEhhc2h0YWJsZShtZW51RGF0YS5sZW5ndGgpOworICAgICAgICAKKyAgICAgICAgRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBFdmVudExpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgZXZlbnRPY2N1cnJlZChFdmVudE9iamVjdCBldmVudCkgeworICAgICAgICAgICAgICAgIGhhbmRsZVZhbHVlU2VsZWN0ZWQoZkl0ZW1Ub1N0eWxlTWFwLmdldChldmVudC5nZXRTb3VyY2UoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWVudURhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZJdGVtc1tpXSA9IE1JdGVtLmNyZWF0ZUNoZWNrYm94SXRlbShtZW51RGF0YVtpXSk7CisgICAgICAgICAgICBpZiAodmFsdWVzW2ldICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmSXRlbVRvU3R5bGVNYXAucHV0KGZJdGVtc1tpXSwgdmFsdWVzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZJdGVtc1tpXS5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgICAgICBmSXRlbXNbaV0uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaGFuZGxlVmFsdWVTZWxlY3RlZChPYmplY3QgaXRlbSk7CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IE9iamVjdCBnZXRDdXJyZW50VmFsdWUoKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRDaGVja2VkKCkgeworICAgICAgICAKKyAgICAgICAgT2JqZWN0IHZhbHVlID0gZ2V0Q3VycmVudFZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBmSXRlbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIE9iamVjdCBpdGVtVmFsID0gZkl0ZW1Ub1N0eWxlTWFwLmdldChmSXRlbXNbaV0pOworICAgICAgICAgICAgaWYgKGl0ZW1WYWwgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZJdGVtc1tpXS5zZXRTdGF0ZSh2YWx1ZSA9PSBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZJdGVtc1tpXS5zZXRTdGF0ZShpdGVtVmFsLmVxdWFscyh2YWx1ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgdGV4dFBhbmVsQ2hhbmdlZCgpIHsKKyAgICAgICAgCisgICAgICAgIE1UZXh0UGFuZWwgdGV4dFBhbmVsID0gZ2V0VGV4dFBhbmVsKCk7CisgICAgICAgIGlmICh0ZXh0UGFuZWwgPT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgZkl0ZW1zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZkl0ZW1zW2ldLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIGZJdGVtc1tpXS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBmSXRlbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmSXRlbXNbaV0uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBzZXRDaGVja2VkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvQ29tbWFuZE1lbnVJdGVtLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvQ29tbWFuZE1lbnVJdGVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM4OWI4NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9Db21tYW5kTWVudUl0ZW0uamF2YQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogQ29tbWFuZE1lbnVJdGVtLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTI6MzIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC51aWltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbEV2ZW50OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIENvbW1hbmRNZW51SXRlbSBleHRlbmRzIE1lbnVJdGVtU2V0IHsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgLypmaW5hbCovIE1JdGVtIGZJdGVtOworICAgIAorICAgIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGlzRW5hYmxlZCgpOworICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHBlcmZvcm1BY3Rpb24oKTsKKworICAgIHByb3RlY3RlZCBDb21tYW5kTWVudUl0ZW0oTWVudURhdGEgZGF0YSkgeworICAgICAgICAKKyAgICAgICAgdGhpcyhkYXRhLCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBDb21tYW5kTWVudUl0ZW0oTWVudURhdGEgZGF0YSwgYm9vbGVhbiBlbmFibGVCeURlZmF1bHQpIHsKKyAgICAgICAgCisgICAgICAgIGZJdGVtID0gTUl0ZW0uY3JlYXRlSXRlbShkYXRhKTsKKyAgICAgICAgZkl0ZW0uYWRkTGlzdGVuZXIobmV3IEV2ZW50TGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBldmVudE9jY3VycmVkKEV2ZW50T2JqZWN0IGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcGVyZm9ybUFjdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgZkl0ZW0uc2V0RW5hYmxlZChlbmFibGVCeURlZmF1bHQpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCB0ZXh0UGFuZWxDaGFuZ2VkKCkgeworICAgICAgICAKKyAgICAgICAgTVRleHRQYW5lbCB0ZXh0UGFuZWwgPSBnZXRUZXh0UGFuZWwoKTsKKyAgICAgICAgaWYgKHRleHRQYW5lbCA9PSBudWxsKSB7CisgICAgICAgICAgICBmSXRlbS5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZJdGVtLnNldEVuYWJsZWQoaXNFbmFibGVkKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBmaW5hbCB2b2lkIHRleHRFdmVudE9jY3VycmVkKFRleHRQYW5lbEV2ZW50IGV2ZW50KSB7CisgICAgICAgIAorICAgICAgICBmSXRlbS5zZXRFbmFibGVkKGlzRW5hYmxlZCgpKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBDdXRDb3B5Q2xlYXIgZXh0ZW5kcyBDb21tYW5kTWVudUl0ZW0geworICAgICAgICAKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1VUID0gMDsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09QWSA9IDE7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMRUFSID0gMjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBmS2luZDsKKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBDdXRDb3B5Q2xlYXIoTWVudURhdGEgbWVudURhdGEsIGludCBraW5kKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1cGVyKG1lbnVEYXRhKTsKKyAgICAgICAgICAgIGlmIChraW5kICE9IENVVCAmJiBraW5kICE9IENPUFkgJiYga2luZCAhPSBDTEVBUikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgbWVudSBraW5kIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmS2luZCA9IGtpbmQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTVRleHRQYW5lbCBwYW5lbCA9IGdldFRleHRQYW5lbCgpOworICAgICAgICAgICAgcmV0dXJuIHBhbmVsLmdldFNlbGVjdGlvblN0YXJ0KCkgIT0gcGFuZWwuZ2V0U2VsZWN0aW9uRW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBib29sZWFuIHJlc3BvbmRzVG9FdmVudFR5cGUoaW50IHR5cGUpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gVGV4dFBhbmVsRXZlbnQuU0VMRUNUSU9OX0VNUFRZX0NIQU5HRUQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BY3Rpb24oKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1UZXh0UGFuZWwgcGFuZWwgPSBnZXRUZXh0UGFuZWwoKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZktpbmQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENVVDoKKyAgICAgICAgICAgICAgICAgICAgcGFuZWwuY3V0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ09QWToKKyAgICAgICAgICAgICAgICAgICAgcGFuZWwuY29weSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENMRUFSOgorICAgICAgICAgICAgICAgICAgICBwYW5lbC5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFVuZG9SZWRvIGV4dGVuZHMgQ29tbWFuZE1lbnVJdGVtIHsKKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBVTkRPID0gdHJ1ZTsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIFJFRE8gPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBmS2luZDsKKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBVbmRvUmVkbyhNZW51RGF0YSBtZW51RGF0YSwgYm9vbGVhbiBraW5kKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1cGVyKG1lbnVEYXRhKTsKKyAgICAgICAgICAgIGZLaW5kID0ga2luZDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNFbmFibGVkKCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBNVGV4dFBhbmVsIHBhbmVsID0gZ2V0VGV4dFBhbmVsKCk7CisgICAgICAgICAgICBpZiAoZktpbmQgPT0gVU5ETykgeworICAgICAgICAgICAgICAgIHJldHVybiBwYW5lbC5jYW5VbmRvKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFuZWwuY2FuUmVkbygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcmVzcG9uZHNUb0V2ZW50VHlwZShpbnQgdHlwZSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBUZXh0UGFuZWxFdmVudC5VTkRPX1NUQVRFX0NIQU5HRUQ7CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQWN0aW9uKCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBNVGV4dFBhbmVsIHBhbmVsID0gZ2V0VGV4dFBhbmVsKCk7CisgICAgICAgICAgICBpZiAoZktpbmQgPT0gVU5ETykgeworICAgICAgICAgICAgICAgIHBhbmVsLnVuZG8oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBhbmVsLnJlZG8oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUGFzdGUgZXh0ZW5kcyBDb21tYW5kTWVudUl0ZW0geworICAgICAgICAKKyAgICAgICAgcHVibGljIFBhc3RlKE1lbnVEYXRhIG1lbnVEYXRhKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1cGVyKG1lbnVEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNFbmFibGVkKCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZ2V0VGV4dFBhbmVsKCkuY2xpcGJvYXJkTm90RW1wdHkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIHJlc3BvbmRzVG9FdmVudFR5cGUoaW50IHR5cGUpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gVGV4dFBhbmVsRXZlbnQuQ0xJUEJPQVJEX0NIQU5HRUQ7CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQWN0aW9uKCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBnZXRUZXh0UGFuZWwoKS5wYXN0ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTZWxlY3RBbGwgZXh0ZW5kcyBDb21tYW5kTWVudUl0ZW0geworICAgICAgICAKKyAgICAgICAgcHVibGljIFNlbGVjdEFsbChNZW51RGF0YSBtZW51RGF0YSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBzdXBlcihtZW51RGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiByZXNwb25kc1RvRXZlbnRUeXBlKGludCB0eXBlKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BY3Rpb24oKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGdldFRleHRQYW5lbCgpLnNlbGVjdEFsbCgpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0RpYWxvZ0l0ZW0uamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9EaWFsb2dJdGVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDczYWUyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9EaWFsb2dJdGVtLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRGlhbG9nSXRlbS5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjUyOjMyICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudWlpbXBsOworCitpbXBvcnQgamF2YS5hd3QuV2luZG93OworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQ7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbEV2ZW50OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKKworcHVibGljIGZpbmFsIGNsYXNzIERpYWxvZ0l0ZW0gZXh0ZW5kcyBDb21tYW5kTWVudUl0ZW0geworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBEaWFsb2dGYWN0b3J5IHsKKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBhYnN0cmFjdCBXaW5kb3cgY3JlYXRlRGlhbG9nKE1UZXh0UGFuZWwgdGV4dFBhbmVsKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBEaWFsb2dGYWN0b3J5IGZEaWFsb2dGYWN0b3J5OworICAgIHByaXZhdGUgV2luZG93IGZEaWFsb2cgPSBudWxsOworICAgIAorICAgIHB1YmxpYyBEaWFsb2dJdGVtKE1lbnVEYXRhIG1lbnVEYXRhLAorICAgICAgICAgICAgICAgICAgICAgIERpYWxvZ0ZhY3RvcnkgZGlhbG9nRmFjdG9yeSkgeworICAgICAgICAKKyAgICAgICAgc3VwZXIobWVudURhdGEsIHRydWUpOworICAgICAgICBmRGlhbG9nRmFjdG9yeSA9IGRpYWxvZ0ZhY3Rvcnk7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIHRleHRQYW5lbENoYW5nZWQoKSB7CisgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICB9CisgICAgICAgIAorICAgIHByb3RlY3RlZCBib29sZWFuIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBzaG91bGQgbmV2ZXIgZ2V0IGNhbGxlZC4uLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiByZXNwb25kc1RvRXZlbnRUeXBlKGludCB0eXBlKSB7CisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BY3Rpb24oKSB7CisKKyAgICAgICAgaWYgKGZEaWFsb2cgPT0gbnVsbCkgeworICAgICAgICAgICAgTVRleHRQYW5lbCBwYW5lbCA9IGdldFRleHRQYW5lbCgpOworICAgICAgICAgICAgaWYgKHBhbmVsICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmRGlhbG9nID0gZkRpYWxvZ0ZhY3RvcnkuY3JlYXRlRGlhbG9nKHBhbmVsKTsKKyAgICAgICAgICAgICAgICBmRGlhbG9nLmFkZFdpbmRvd0xpc3RlbmVyKG5ldyBXaW5kb3dBZGFwdGVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9zZWQoV2luZG93RXZlbnQgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZkRpYWxvZyA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmRGlhbG9nLnNob3coKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0V2ZW50TGlzdGVuZXIuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9FdmVudExpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODA1YmNlOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9FdmVudExpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRXZlbnRMaXN0ZW5lci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjUyOjMyICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudWlpbXBsOworCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworCitwdWJsaWMgaW50ZXJmYWNlIEV2ZW50TGlzdGVuZXIgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHVibGljIHZvaWQgZXZlbnRPY2N1cnJlZChFdmVudE9iamVjdCBldmVudCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0ZvbnRMaXN0LmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvRm9udExpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYjA3NTYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0ZvbnRMaXN0LmphdmEKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogRm9udExpc3QuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MjozMiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworLy8gUmVxdWlyZXMgSmF2YTIKK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC51aWltcGw7CisKK2ltcG9ydCBqYXZhLmF3dC5HcmFwaGljc0Vudmlyb25tZW50OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKKworZmluYWwgY2xhc3MgRm9udExpc3QgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN0cmlwVGhlc2UgPSB7CisgICAgICAgICIuYm9sZCIsICIuYm9sZGl0YWxpYyIsICIuaXRhbGljIgorICAgIH07CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEZvbnRMaXN0KCkgeworCisgICAgICAgIFN0cmluZ1tdIG5hbWVzID0gR3JhcGhpY3NFbnZpcm9ubWVudC5nZXRMb2NhbEdyYXBoaWNzRW52aXJvbm1lbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXZhaWxhYmxlRm9udEZhbWlseU5hbWVzKCk7CisgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcihuYW1lcy5sZW5ndGgpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdi5hZGRFbGVtZW50KG5hbWVzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbGxlY3Rpb25zLnNvcnQodik7CisgICAgICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBsYXN0ID0gIiI7CisgICAgICAgIAorICAgICAgICBJdGVyYXRvciBpdGVyID0gdi5saXN0SXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgY3VycmVudCA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOworICAgICAgICAgICAgdGVzdFN1ZmZpeGVzOiBmb3IgKGludCBpPTA7IGkgPCBzdHJpcFRoZXNlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZW5kc1dpdGgoc3RyaXBUaGVzZVtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGJhc2VMZW4gPSBjdXJyZW50Lmxlbmd0aCgpLXN0cmlwVGhlc2VbaV0ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBiYXNlID0gY3VycmVudC5zdWJzdHJpbmcoMCwgYmFzZUxlbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlLmVxdWFsc0lnbm9yZUNhc2UobGFzdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRlc3RTdWZmaXhlczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3QgPSBjdXJyZW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmdbXSByZXN1bHQgPSBuZXcgU3RyaW5nW3Yuc2l6ZSgpXTsKKyAgICAgICAgdi5jb3B5SW50byhyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9LZXltYXBNZW51SXRlbVNldC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL0tleW1hcE1lbnVJdGVtU2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTc0ZmFhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9LZXltYXBNZW51SXRlbVNldC5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IEtleW1hcE1lbnVJdGVtU2V0LmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTI6MzIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC51aWltcGw7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5LZXlSZW1hcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5UZXh0UGFuZWxFdmVudDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKKworcHVibGljIGZpbmFsIGNsYXNzIEtleW1hcE1lbnVJdGVtU2V0IGV4dGVuZHMgQ2hvaWNlTWVudUl0ZW1TZXQgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwdWJsaWMgS2V5bWFwTWVudUl0ZW1TZXQoS2V5UmVtYXBbXSB2YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnVEYXRhW10gbWVudURhdGEpIHsKKyAgICAgICAgCisgICAgICAgIHN1cGVyKHZhbHVlcywgbWVudURhdGEpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVWYWx1ZVNlbGVjdGVkKE9iamVjdCB2YWx1ZSkgeworICAgICAgICAKKyAgICAgICAgTVRleHRQYW5lbCB0ZXh0UGFuZWwgPSBnZXRUZXh0UGFuZWwoKTsKKyAgICAgICAgaWYgKHRleHRQYW5lbCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1lbnUgaXRlbSBpcyBlbmFibGVkIHdoZW4gcGFuZWwgaXMgbnVsbCEiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRleHRQYW5lbC5zZXRLZXlSZW1hcCgoS2V5UmVtYXApIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIE9iamVjdCBnZXRDdXJyZW50VmFsdWUoKSB7CisgICAgICAgIAorICAgICAgICBNVGV4dFBhbmVsIHRleHRQYW5lbCA9IGdldFRleHRQYW5lbCgpOworICAgICAgICBpZiAodGV4dFBhbmVsID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU2hvdWxkbid0IGNhbGwgdGhpcyB3aXRob3V0IGEgdGV4dCBwYW5lbCEiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGV4dFBhbmVsLmdldEtleVJlbWFwKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHRleHRFdmVudE9jY3VycmVkKFRleHRQYW5lbEV2ZW50IGV2ZW50KSB7CisgICAgICAgIAorICAgICAgICBzZXRDaGVja2VkKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBib29sZWFuIHJlc3BvbmRzVG9FdmVudFR5cGUoaW50IHR5cGUpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0eXBlID09IFRleHRQYW5lbEV2ZW50LktFWVJFTUFQX0NIQU5HRUQ7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvTUl0ZW0uamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9NSXRlbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkZjFkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvTUl0ZW0uamF2YQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBNSXRlbS5qYXZhLHYgJCAkUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDAwLzA0LzIwIDE3OjUyOjMyICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudWlpbXBsOworCitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5yZXNvdXJjZXMuTWVudURhdGE7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNSXRlbSB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgVmVjdG9yIGZMaXN0ZW5lcnMgPSBuZXcgVmVjdG9yKDIpOworICAgIHByaXZhdGUgRXZlbnRPYmplY3QgZkV2ZW50ID0gbmV3IEV2ZW50T2JqZWN0KHRoaXMpOworICAgIAorICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRTdGF0ZShib29sZWFuIGNoZWNrZWQpOworICAgIAorICAgIHB1YmxpYyBmaW5hbCB2b2lkIGFkZExpc3RlbmVyKEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgCisgICAgICAgIGZMaXN0ZW5lcnMuYWRkRWxlbWVudChsaXN0ZW5lcik7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZUxpc3RlbmVyKEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgCisgICAgICAgIGZMaXN0ZW5lcnMucmVtb3ZlRWxlbWVudChsaXN0ZW5lcik7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVNlbGVjdGVkKCkgeworICAgICAgICAgICAgCisgICAgICAgIGludCBsZW5ndGggPSBmTGlzdGVuZXJzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEV2ZW50TGlzdGVuZXIgbCA9IChFdmVudExpc3RlbmVyKSBmTGlzdGVuZXJzLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGwuZXZlbnRPY2N1cnJlZChmRXZlbnQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIGZhY3Rvcnkgc3R1ZmYKKyAgICAKKyAgICAvKioKKyAgICAgKiBDbGllbnRzIHNob3VsZCBzeW5jaHJvbml6ZSBvbiBMT0NLIHdoaWxlIHNldHRpbmcgYW5kIHVzaW5nCisgICAgICogZ2xvYmFsIGZhY3RvcnkuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgTE9DSyA9IG5ldyBPYmplY3QoKTsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBJdGVtRmFjdG9yeSB7CisgICAgICAgIAorICAgICAgICBwdWJsaWMgTUl0ZW0gY3JlYXRlSXRlbShNZW51RGF0YSBtZW51RGF0YSk7CisgICAgICAgIHB1YmxpYyBNSXRlbSBjcmVhdGVDaGVja2JveEl0ZW0oTWVudURhdGEgbWVudURhdGEpOworICAgICAgICBwdWJsaWMgdm9pZCBjcmVhdGVTZXBhcmF0b3IoKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgSXRlbUZhY3RvcnkgZmdGYWN0b3J5OworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgTUl0ZW0gY3JlYXRlSXRlbShNZW51RGF0YSBtZW51RGF0YSkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZnRmFjdG9yeS5jcmVhdGVJdGVtKG1lbnVEYXRhKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyBNSXRlbSBjcmVhdGVDaGVja2JveEl0ZW0oTWVudURhdGEgbWVudURhdGEpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmZ0ZhY3RvcnkuY3JlYXRlQ2hlY2tib3hJdGVtKG1lbnVEYXRhKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldEl0ZW1GYWN0b3J5KEl0ZW1GYWN0b3J5IGZhY3RvcnkpIHsKKyAgICAgICAgCisgICAgICAgIGZnRmFjdG9yeSA9IGZhY3Rvcnk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgSXRlbUZhY3RvcnkgZ2V0SXRlbUZhY3RvcnkoKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmdGYWN0b3J5OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9NZW51QnVpbGRlci5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL01lbnVCdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGIxZTc5YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9NZW51QnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBNZW51QnVpbGRlci5qYXZhLHYgJCAkUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjUwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudWlpbXBsOworCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS5hd3QuRnJhbWU7CisKK2ltcG9ydCBqYXZhLmF3dC5XaW5kb3c7CitpbXBvcnQgamF2YS50ZXh0Lk51bWJlckZvcm1hdDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQuc3R5bGVkdGV4dC5NQ29uc3RUZXh0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLlRleHRBdHRyaWJ1dGU7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuTVRleHRQYW5lbDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5LZXlSZW1hcDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5GcmFtZVJlc291cmNlczsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5yZXNvdXJjZXMuTWVudURhdGE7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5EaWFsb2dJdGVtLkRpYWxvZ0ZhY3Rvcnk7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNZW51QnVpbGRlciB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVESVQgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJWkUgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTFVTSCA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0VZTUFQID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCSURJID0gNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBQk9VVCA9IDY7CisgICAgCisgICAgcHJpdmF0ZSBDb2xvcltdIGNvbG9ycyA9IHsgQ29sb3IuYmxhY2ssIENvbG9yLndoaXRlLCBDb2xvci5ncmVlbiwgQ29sb3IuYmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IuY3lhbiwgQ29sb3IuZ3JheSwgQ29sb3IuZGFya0dyYXksIENvbG9yLmxpZ2h0R3JheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IubWFnZW50YSwgQ29sb3Iub3JhbmdlLCBDb2xvci5waW5rLCBDb2xvci5yZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yLnllbGxvdywgbnVsbCB9OworICAgIHByaXZhdGUgU3RyaW5nW10gY29sb3JOYW1lcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuQkxBQ0spLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5XSElURSksCisgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLkdSRUVOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuQkxVRSksCisgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLkNZQU4pLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5HUkFZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuREFSS19HUkFZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuTElHSFRfR1JBWSksCisgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLk1BR0VOVEEpLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5PUkFOR0UpLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5QSU5LKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuUkVEKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuWUVMTE9XKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuTk9ORSkKKyAgICB9OworICAgIAorICAgIHByb3RlY3RlZCBpbnRbXSBkZWZhdWx0TWVudXMgPSB7IEVESVQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RZTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxVU0gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWU1BUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSURJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCT1VUIH07CisKKyAgICBwcm90ZWN0ZWQgTVRleHRQYW5lbCBmVGV4dFBhbmVsOworICAgIHByb3RlY3RlZCBGcmFtZSBmRGlhbG9nUGFyZW50OworCisgICAgcHJvdGVjdGVkIE1lbnVCdWlsZGVyKCkgeworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBkb0NyZWF0ZU1lbnVzKE1UZXh0UGFuZWwgdGV4dFBhbmVsLCBGcmFtZSBmcmFtZSwgaW50W10gbWVudXMpIHsKKyAgICAKKyAgICAgICAgZlRleHRQYW5lbCA9IHRleHRQYW5lbDsKKyAgICAgICAgZkRpYWxvZ1BhcmVudCA9IGZyYW1lOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWVudXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHN3aXRjaChtZW51c1tpXSkgeworICAgICAgICAgICAgICAgIGNhc2UgRURJVDoKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWRpdE1lbnUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTSVpFOgorICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaXplTWVudSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNUWUxFOgorICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHlsZU1lbnUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGTFVTSDoKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlRmx1c2hNZW51KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS0VZTUFQOgorICAgICAgICAgICAgICAgICAgICBjcmVhdGVLZXltYXBNZW51KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQklESToKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlQmlkaU1lbnUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBQk9VVDoKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlQWJvdXRNZW51KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgbWVudTogIiArIG1lbnVzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgZlRleHRQYW5lbCA9IG51bGw7CisgICAgICAgIGZEaWFsb2dQYXJlbnQgPSBudWxsOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBoYW5kbGVBZGRNZW51KFN0cmluZyBrZXkpOworICAgIAorICAgIHByb3RlY3RlZCBhYnN0cmFjdCBEaWFsb2dGYWN0b3J5IGNyZWF0ZU9iamVjdERpYWxvZ0ZhY3RvcnkoU3RyaW5nIGRpYWxvZ1RpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRpYWxvZ1RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBjaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFtdIHZhbHVlcyk7CisKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgRGlhbG9nRmFjdG9yeSBjcmVhdGVOdW1iZXJEaWFsb2dGYWN0b3J5KFN0cmluZyBkaWFsb2dUaXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkaWFsb2dUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gY2hhcmFjdGVyKTsKKworICAgIHByb3RlY3RlZCBhYnN0cmFjdCBEaWFsb2dGYWN0b3J5IGNyZWF0ZUFib3V0RGlhbG9nRmFjdG9yeSgpOworCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUVkaXRNZW51KCkgeworICAgICAgICAKKyAgICAgICAgaGFuZGxlQWRkTWVudShGcmFtZVJlc291cmNlcy5FRElUKTsKKyAgICAgICAgCisgICAgICAgIG5ldyBDb21tYW5kTWVudUl0ZW0uVW5kb1JlZG8oUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5VTkRPKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRNZW51SXRlbS5VbmRvUmVkby5VTkRPKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgICAgIG5ldyBDb21tYW5kTWVudUl0ZW0uVW5kb1JlZG8oUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5SRURPKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRNZW51SXRlbS5VbmRvUmVkby5SRURPKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgICAgIE1JdGVtLmdldEl0ZW1GYWN0b3J5KCkuY3JlYXRlU2VwYXJhdG9yKCk7CisgICAgICAgIG5ldyBDb21tYW5kTWVudUl0ZW0uQ3V0Q29weUNsZWFyKFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuQ1VUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kTWVudUl0ZW0uQ3V0Q29weUNsZWFyLkNVVCkuc2V0VGV4dFBhbmVsKGZUZXh0UGFuZWwpOworICAgICAgICBuZXcgQ29tbWFuZE1lbnVJdGVtLkN1dENvcHlDbGVhcihSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKEZyYW1lUmVzb3VyY2VzLkNPUFkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRNZW51SXRlbS5DdXRDb3B5Q2xlYXIuQ09QWSkuc2V0VGV4dFBhbmVsKGZUZXh0UGFuZWwpOworICAgICAgICBuZXcgQ29tbWFuZE1lbnVJdGVtLlBhc3RlKFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuUEFTVEUpKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgICAgIG5ldyBDb21tYW5kTWVudUl0ZW0uQ3V0Q29weUNsZWFyKFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuQ0xFQVIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRNZW51SXRlbS5DdXRDb3B5Q2xlYXIuQ0xFQVIpLnNldFRleHRQYW5lbChmVGV4dFBhbmVsKTsKKyAgICAgICAgTUl0ZW0uZ2V0SXRlbUZhY3RvcnkoKS5jcmVhdGVTZXBhcmF0b3IoKTsKKyAgICAgICAgbmV3IENvbW1hbmRNZW51SXRlbS5TZWxlY3RBbGwoUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5TRUxFQ1RfQUxMKSkuc2V0VGV4dFBhbmVsKGZUZXh0UGFuZWwpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdFtdIERFRkFVTFRfU0laRVMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezksIDEwLCAxMiwgMTQsIDE4LCAyNCwgMzYsIDQ4LCA3Mn07CisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlU2l6ZU1lbnUoKSB7CisgICAgICAgIAorICAgICAgICBjcmVhdGVTaXplTWVudShERUZBVUxUX1NJWkVTKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVNpemVNZW51KGZsb2F0W10gc2l6ZXMpIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgaGFuZGxlQWRkTWVudShGcmFtZVJlc291cmNlcy5TSVpFKTsKKworICAgICAgICBpZiAoc2l6ZXMgIT0gREVGQVVMVF9TSVpFUykgeworCisgICAgICAgICAgICBzaXplcyA9IChmbG9hdFtdKSBzaXplcy5jbG9uZSgpOworICAgICAgICAgICAgaWYgKHNpemVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic2l6ZXMgYXJyYXkgaGFzIHplcm8gbGVuZ3RoIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZsb2F0IGxhc3RWYWx1ZSA9IHNpemVzWzBdOworICAgICAgICAgICAgZm9yIChpbnQgaT0xOyBpIDwgc2l6ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZXNbaV0gPj0gbGFzdFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZXMgYXJyYXkgbXVzdCBiZSBpbmNyZWFzaW5nIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHNpemVzW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGbG9hdFtdIHZhbHVlcyA9IG5ldyBGbG9hdFtzaXplcy5sZW5ndGhdOworICAgICAgICBNZW51RGF0YVtdIG1EYXRhID0gbmV3IE1lbnVEYXRhW3NpemVzLmxlbmd0aF07CisgICAgICAgIE51bWJlckZvcm1hdCBmbXQgPSBOdW1iZXJGb3JtYXQuZ2V0TnVtYmVySW5zdGFuY2UoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNpemVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBuZXcgRmxvYXQoc2l6ZXNbaV0pOworICAgICAgICAgICAgbURhdGFbaV0gPSBuZXcgTWVudURhdGEoZm10LmZvcm1hdChzaXplc1tpXSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBuZXcgU3R5bGVNZW51SXRlbVNldChUZXh0QXR0cmlidXRlLlNJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnVJdGVtU2V0LkNIQVJBQ1RFUikuc2V0VGV4dFBhbmVsKGZUZXh0UGFuZWwpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChmRGlhbG9nUGFyZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyBkaWFsb2dUaXRsZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuU0VUX1NJWkVfVElUTEUpOworICAgICAgICAgICAgU3RyaW5nIGRpYWxvZ1RleHQgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLlNFVF9TSVpFX0xBQkVMKTsKKyAgICAgICAgICAgIERpYWxvZ0ZhY3RvcnkgZmFjdG9yeSA9IGNyZWF0ZU51bWJlckRpYWxvZ0ZhY3RvcnkoZGlhbG9nVGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVudUl0ZW1TZXQuQ0hBUkFDVEVSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBuZXcgRGlhbG9nSXRlbShSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKEZyYW1lUmVzb3VyY2VzLk9USEVSX0RJQUxPRyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkpLnNldFRleHRQYW5lbChmVGV4dFBhbmVsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlU3R5bGVNZW51KCkgeworICAgICAgICAKKyAgICAgICAgaGFuZGxlQWRkTWVudShGcmFtZVJlc291cmNlcy5TVFlMRSk7CisKKyAgICAgICAgT2JqZWN0W10ga2V5cyA9ICAgIHsgVGV4dEF0dHJpYnV0ZS5XRUlHSFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5QT1NUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuU1RSSUtFVEhST1VHSCB9OworICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSAgeyBUZXh0QXR0cmlidXRlLldFSUdIVF9CT0xELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuUE9TVFVSRV9PQkxJUVVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FX09OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuU1RSSUtFVEhST1VHSF9PTiB9OworICAgICAgICBNZW51RGF0YVtdIG1EYXRhID0geyBSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKEZyYW1lUmVzb3VyY2VzLkJPTEQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuSVRBTElDKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKEZyYW1lUmVzb3VyY2VzLlVOREVSTElORSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5TVFJJS0VUSFJPVUdIKSB9OworCisgICAgICAgIG5ldyBTdWJ0cmFjdFN0eWxlTWVudUl0ZW0oa2V5cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKEZyYW1lUmVzb3VyY2VzLlBMQUlOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnVJdGVtU2V0LkNIQVJBQ1RFUikuc2V0VGV4dFBhbmVsKGZUZXh0UGFuZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBuZXcgQm9vbGVhblN0eWxlTWVudUl0ZW0oa2V5c1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhdGFbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVudUl0ZW1TZXQuQ0hBUkFDVEVSKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoZkRpYWxvZ1BhcmVudCAhPSBudWxsKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1JdGVtLmdldEl0ZW1GYWN0b3J5KCkuY3JlYXRlU2VwYXJhdG9yKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZ1tdIGZvbnRzID0gRm9udExpc3QuZ2V0Rm9udExpc3QoKTsKKyAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VTdHJpbmcoRnJhbWVSZXNvdXJjZXMuU0VUX0ZPTlRfVElUTEUpOworICAgICAgICAgICAgU3RyaW5nIGxhYmVsID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5TRVRfRk9OVF9MQUJFTCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIERpYWxvZ0ZhY3RvcnkgZm9udEYgPSBjcmVhdGVPYmplY3REaWFsb2dGYWN0b3J5KHRpdGxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5GQU1JTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZU1lbnVJdGVtU2V0LkNIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udHMpOworICAgICAgICAgICAgbmV3IERpYWxvZ0l0ZW0oUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5GT05UX0RJQUxPRyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250Rikuc2V0VGV4dFBhbmVsKGZUZXh0UGFuZWwpOworCisgICAgICAgICAgICBEaWFsb2dGYWN0b3J5IGZvcmVncm91bmRGID0gY3JlYXRlQ29sb3JEaWFsb2dGYWN0b3J5KHRydWUpOworICAgICAgICAgICAgRGlhbG9nRmFjdG9yeSBiYWNrZ3JvdW5kRiA9IGNyZWF0ZUNvbG9yRGlhbG9nRmFjdG9yeShmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5ldyBEaWFsb2dJdGVtKFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuRk9SRUNPTE9SX0RJQUxPRyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kRikuc2V0VGV4dFBhbmVsKGZUZXh0UGFuZWwpOworICAgICAgICAgICAgbmV3IERpYWxvZ0l0ZW0oUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5CQUNLQ09MT1JfRElBTE9HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRGKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBEaWFsb2dGYWN0b3J5IGNyZWF0ZUNvbG9yRGlhbG9nRmFjdG9yeShib29sZWFuIGZvcmVncm91bmQpIHsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyB0aXRsZTsKKyAgICAgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgICAgIE9iamVjdCBrZXk7CisgICAgICAgIAorICAgICAgICBpZiAoZm9yZWdyb3VuZCkgeworICAgICAgICAgICAgdGl0bGUgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLlNFVF9GT1JFR1JPVU5EX1RJVExFKTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlU3RyaW5nKEZyYW1lUmVzb3VyY2VzLlNFVF9GT1JFR1JPVU5EX0xBQkVMKTsKKyAgICAgICAgICAgIGtleSA9IFRleHRBdHRyaWJ1dGUuRk9SRUdST1VORDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRpdGxlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5TRVRfQkFDS0dST1VORF9USVRMRSk7CisgICAgICAgICAgICBtZXNzYWdlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZVN0cmluZyhGcmFtZVJlc291cmNlcy5TRVRfQkFDS0dST1VORF9MQUJFTCk7CisgICAgICAgICAgICBrZXkgPSBUZXh0QXR0cmlidXRlLkJBQ0tHUk9VTkQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNyZWF0ZU9iamVjdERpYWxvZ0ZhY3RvcnkodGl0bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlTWVudUl0ZW1TZXQuQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvck5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlRm9udE1lbnUoKSB7CisgICAgICAgIAorICAgICAgICBoYW5kbGVBZGRNZW51KEZyYW1lUmVzb3VyY2VzLkZPTlQpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nW10gZm9udHMgPSBGb250TGlzdC5nZXRGb250TGlzdCgpOworICAgICAgICBNZW51RGF0YVtdIG1EYXRhID0gbmV3IE1lbnVEYXRhW2ZvbnRzLmxlbmd0aF07CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1EYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBtRGF0YVtpXSA9IG5ldyBNZW51RGF0YShmb250c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5ldyBTdHlsZU1lbnVJdGVtU2V0KFRleHRBdHRyaWJ1dGUuRkFNSUxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlTWVudUl0ZW1TZXQuQ0hBUkFDVEVSKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBjcmVhdGVGbHVzaE1lbnUoKSB7CisgICAgICAgIAorICAgICAgICBoYW5kbGVBZGRNZW51KEZyYW1lUmVzb3VyY2VzLkZMVVNIKTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IHsgIFRleHRBdHRyaWJ1dGUuRkxVU0hfTEVBRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEF0dHJpYnV0ZS5GTFVTSF9DRU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuRkxVU0hfVFJBSUxJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRBdHRyaWJ1dGUuRlVMTFlfSlVTVElGSUVEIH07CisgICAgICAgIE1lbnVEYXRhW10gbURhdGEgPSB7IFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuTEVBRElORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuQ0VOVEVSKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5UUkFJTElORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuSlVTVElGSUVEKSB9OworICAgICAgICAKKyAgICAgICAgbmV3IFN0eWxlTWVudUl0ZW1TZXQoVGV4dEF0dHJpYnV0ZS5MSU5FX0ZMVVNILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW51SXRlbVNldC5QQVJBR1JBUEgpLnNldFRleHRQYW5lbChmVGV4dFBhbmVsKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUtleW1hcE1lbnUoKSB7CisgICAgICAgIAorICAgICAgICBoYW5kbGVBZGRNZW51KEZyYW1lUmVzb3VyY2VzLktFWU1BUCk7CisgICAgICAgIAorICAgICAgICBLZXlSZW1hcFtdIHZhbHVlcyA9IHsgS2V5UmVtYXAuZ2V0SWRlbnRpdHlSZW1hcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlSZW1hcC5nZXRBcmFiaWNUcmFuc2xpdGVyYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5UmVtYXAuZ2V0SGVicmV3VHJhbnNsaXRlcmF0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVJlbWFwLmdldElzcmFlbE5pa3VkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVJlbWFwLmdldFRoYWlLZXRtYW5lZSgpIH07CisgICAgICAgIE1lbnVEYXRhW10gbURhdGEgPSB7IFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuREVGQVVMVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuQVJBQklDKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5IRUJSRVcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKEZyYW1lUmVzb3VyY2VzLklTUkFFTF9OSUtVRCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuVEhBSV9LRVRNQU5FRSkgfTsKKyAgICAgICAgCisgICAgICAgIG5ldyBLZXltYXBNZW51SXRlbVNldCh2YWx1ZXMsIG1EYXRhKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBjcmVhdGVCaWRpTWVudSgpIHsKKyAgICAgICAgCisgICAgICAgIGhhbmRsZUFkZE1lbnUoRnJhbWVSZXNvdXJjZXMuQklESSk7CisgICAgICAgIAorICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSB7ICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0QXR0cmlidXRlLlJVTl9ESVJFQ1RJT05fTFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0QXR0cmlidXRlLlJVTl9ESVJFQ1RJT05fUlRMIH07CisgICAgICAgIE1lbnVEYXRhW10gbURhdGEgPSB7IFJlc291cmNlVXRpbHMuZ2V0TWVudURhdGEoRnJhbWVSZXNvdXJjZXMuREVGQVVMVF9ESVJFQ1RJT04pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKEZyYW1lUmVzb3VyY2VzLkxUUl9ESVJFQ1RJT04pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVV0aWxzLmdldE1lbnVEYXRhKEZyYW1lUmVzb3VyY2VzLlJUTF9ESVJFQ1RJT04pLCB9OworCisgICAgICAgIG5ldyBTdHlsZU1lbnVJdGVtU2V0KFRleHRBdHRyaWJ1dGUuUlVOX0RJUkVDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVudUl0ZW1TZXQuUEFSQUdSQVBIKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBjcmVhdGVBYm91dE1lbnUoKSB7CisgICAgICAgIAorICAgICAgICBoYW5kbGVBZGRNZW51KEZyYW1lUmVzb3VyY2VzLkFCT1VUX01FTlUpOworICAgICAgICAKKyAgICAgICAgbmV3IERpYWxvZ0l0ZW0oUmVzb3VyY2VVdGlscy5nZXRNZW51RGF0YShGcmFtZVJlc291cmNlcy5BQk9VVF9JVEVNKSwgCisgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUFib3V0RGlhbG9nRmFjdG9yeSgpKS5zZXRUZXh0UGFuZWwoZlRleHRQYW5lbCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL01lbnVJdGVtU2V0LmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvTWVudUl0ZW1TZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wY2Q5NmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL01lbnVJdGVtU2V0LmphdmEKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIEAoIykkUkNTZmlsZTogTWVudUl0ZW1TZXQuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MjozMiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsRXZlbnQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsTGlzdGVuZXI7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwucmVzb3VyY2VzLk1lbnVEYXRhOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWVudUl0ZW1TZXQgaW1wbGVtZW50cyBUZXh0UGFuZWxMaXN0ZW5lciB7CisgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ0hBUkFDVEVSID0gdHJ1ZTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gUEFSQUdSQVBIID0gZmFsc2U7CisKKyAgICBwcml2YXRlIE1UZXh0UGFuZWwgZlRleHRQYW5lbCA9IG51bGw7CisgICAgCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgdGV4dEV2ZW50T2NjdXJyZWQoVGV4dFBhbmVsRXZlbnQgZXZlbnQpOworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHJlc3BvbmRzVG9FdmVudFR5cGUoaW50IHR5cGUpOworICAgIAorICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFRleHRQYW5lbChNVGV4dFBhbmVsIHRleHRQYW5lbCkgeworICAgICAgICAKKyAgICAgICAgaWYgKGZUZXh0UGFuZWwgIT0gbnVsbCkgeworICAgICAgICAgICAgZlRleHRQYW5lbC5yZW1vdmVMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBmVGV4dFBhbmVsID0gdGV4dFBhbmVsOworICAgICAgICBpZiAoZlRleHRQYW5lbCAhPSBudWxsKSB7CisgICAgICAgICAgICBmVGV4dFBhbmVsLmFkZExpc3RlbmVyKHRoaXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZXh0UGFuZWxDaGFuZ2VkKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBmaW5hbCBNVGV4dFBhbmVsIGdldFRleHRQYW5lbCgpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmVGV4dFBhbmVsOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCB0ZXh0UGFuZWxDaGFuZ2VkKCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9SZXNvdXJjZVV0aWxzLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvUmVzb3VyY2VVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxNTdlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvUmVzb3VyY2VVdGlscy5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFJlc291cmNlVXRpbHMuamF2YSx2ICQgJFJldmlzaW9uOiAxLjEgJCAkRGF0ZTogMjAwMC8wNC8yMCAxNzo1MjozMiAkCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwucmVzb3VyY2VzLkZyYW1lUmVzb3VyY2VzOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKKworcHVibGljIGNsYXNzIFJlc291cmNlVXRpbHMgeworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAiKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OC0xOTk5IC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgUmVzb3VyY2VCdW5kbGUgQlVORExFOworICAgIHN0YXRpYyB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBCVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoImNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5GcmFtZVJlc291cmNlcyIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkbid0IGxvYWQgcmVzb3VyY2VYWFguICAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhjZXB0aW9uOiAiICsgZSk7CisgICAgICAgICAgICBCVU5ETEUgPSBuZXcgRnJhbWVSZXNvdXJjZXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgTWVudURhdGEgZ2V0TWVudURhdGEoU3RyaW5nIGtleSkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIChNZW51RGF0YSkgQlVORExFLmdldE9iamVjdChrZXkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gQlVORExFLmdldFN0cmluZyhrZXkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvU2luZ2xlQ2hlY2tNZW51SXRlbS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL1NpbmdsZUNoZWNrTWVudUl0ZW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZTVhYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL1NpbmdsZUNoZWNrTWVudUl0ZW0uamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTaW5nbGVDaGVja01lbnVJdGVtLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTI6MzIgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC51aWltcGw7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbEV2ZW50OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFNpbmdsZUNoZWNrTWVudUl0ZW0gZXh0ZW5kcyBNZW51SXRlbVNldCB7CisgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcm90ZWN0ZWQgTUl0ZW0gZkl0ZW07CisgICAgCisgICAgU2luZ2xlQ2hlY2tNZW51SXRlbShNZW51RGF0YSBtZW51RGF0YSkgeworICAgICAgICAKKyAgICAgICAgZkl0ZW0gPSBNSXRlbS5jcmVhdGVDaGVja2JveEl0ZW0obWVudURhdGEpOworICAgIH0KKyAgICAKKyAgICBhYnN0cmFjdCB2b2lkIHNldENoZWNrZWQoKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCB0ZXh0UGFuZWxDaGFuZ2VkKCkgeworICAgICAgICAKKyAgICAgICAgTVRleHRQYW5lbCB0ZXh0UGFuZWwgPSBnZXRUZXh0UGFuZWwoKTsKKyAgICAgICAgaWYgKHRleHRQYW5lbCA9PSBudWxsKSB7CisgICAgICAgICAgICBmSXRlbS5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgIGZJdGVtLnNldFN0YXRlKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZJdGVtLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBzZXRDaGVja2VkKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvU3R5bGVNZW51SXRlbVNldC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL1N0eWxlTWVudUl0ZW1TZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzU1YmZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL1N0eWxlTWVudUl0ZW1TZXQuamF2YQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQCgjKSRSQ1NmaWxlOiBTdHlsZU1lbnVJdGVtU2V0LmphdmEsdiAkICRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMDIvMDIvMTYgMDM6MDY6NTAgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC51aWltcGw7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0LlN0eWxlTW9kaWZpZXI7CisKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbEV2ZW50OworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudWlpbXBsLnJlc291cmNlcy5NZW51RGF0YTsKKworcHVibGljIGZpbmFsIGNsYXNzIFN0eWxlTWVudUl0ZW1TZXQgZXh0ZW5kcyBDaG9pY2VNZW51SXRlbVNldCB7CisgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKworICAgIHByaXZhdGUgT2JqZWN0IGZLZXk7CisgICAgcHJpdmF0ZSBib29sZWFuIGZDaGFyYWN0ZXI7CisKKyAgICBwdWJsaWMgU3R5bGVNZW51SXRlbVNldChPYmplY3Qgc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnVEYXRhW10gbWVudURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBjaGFyYWN0ZXIpIHsKKyAgICAgICAgCisgICAgICAgIHN1cGVyKHZhbHVlcywgbWVudURhdGEpOworICAgICAgICBmS2V5ID0gc3R5bGU7CisgICAgICAgIGZDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVZhbHVlU2VsZWN0ZWQoT2JqZWN0IHZhbHVlKSB7CisgICAgICAgIAorICAgICAgICBNVGV4dFBhbmVsIHRleHRQYW5lbCA9IGdldFRleHRQYW5lbCgpOworICAgICAgICBpZiAodGV4dFBhbmVsID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWVudSBpdGVtIGlzIGVuYWJsZWQgd2hlbiBwYW5lbCBpcyBudWxsISIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHlsZU1vZGlmaWVyIG1vZGlmaWVyOworICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgQXR0cmlidXRlU2V0IHNldCA9IG5ldyBBdHRyaWJ1dGVTZXQoZktleSk7CisgICAgICAgICAgICBtb2RpZmllciA9IFN0eWxlTW9kaWZpZXIuY3JlYXRlUmVtb3ZlTW9kaWZpZXIoc2V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vZGlmaWVyID0gU3R5bGVNb2RpZmllci5jcmVhdGVBZGRNb2RpZmllcihmS2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChmQ2hhcmFjdGVyID09IENIQVJBQ1RFUikgeworICAgICAgICAgICAgdGV4dFBhbmVsLm1vZGlmeUNoYXJhY3RlclN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGV4dFBhbmVsLm1vZGlmeVBhcmFncmFwaFN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBPYmplY3QgZ2V0Q3VycmVudFZhbHVlKCkgeworICAgICAgICAKKyAgICAgICAgTVRleHRQYW5lbCB0ZXh0UGFuZWwgPSBnZXRUZXh0UGFuZWwoKTsKKyAgICAgICAgaWYgKHRleHRQYW5lbCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNob3VsZG4ndCBjYWxsIHRoaXMgd2l0aG91dCBhIHRleHQgcGFuZWwhIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChmQ2hhcmFjdGVyID09IENIQVJBQ1RFUikgeworICAgICAgICAgICAgcmV0dXJuIHRleHRQYW5lbC5nZXRDaGFyYWN0ZXJTdHlsZU92ZXJTZWxlY3Rpb24oZktleSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dFBhbmVsLmdldFBhcmFncmFwaFN0eWxlT3ZlclNlbGVjdGlvbihmS2V5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRleHRFdmVudE9jY3VycmVkKFRleHRQYW5lbEV2ZW50IGV2ZW50KSB7CisgICAgICAgIAorICAgICAgICBzZXRDaGVja2VkKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBib29sZWFuIHJlc3BvbmRzVG9FdmVudFR5cGUoaW50IHR5cGUpIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0eXBlID09IFRleHRQYW5lbEV2ZW50LlNFTEVDVElPTl9TVFlMRVNfQ0hBTkdFRDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL1N1YnRyYWN0U3R5bGVNZW51SXRlbS5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL1N1YnRyYWN0U3R5bGVNZW51SXRlbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMGY1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvU3VidHJhY3RTdHlsZU1lbnVJdGVtLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFN1YnRyYWN0U3R5bGVNZW51SXRlbS5qYXZhLHYgJCAkUmV2aXNpb246IDEuMiAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjUwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudWlpbXBsOworCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0bGF5b3V0LmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFwOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsRXZlbnQ7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC51aWltcGwucmVzb3VyY2VzLk1lbnVEYXRhOworCitwdWJsaWMgZmluYWwgY2xhc3MgU3VidHJhY3RTdHlsZU1lbnVJdGVtIGV4dGVuZHMgU2luZ2xlQ2hlY2tNZW51SXRlbSB7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0W10gZktleXM7CisgICAgCisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGZDaGFyYWN0ZXI7CisgICAgCisgICAgcHVibGljIFN1YnRyYWN0U3R5bGVNZW51SXRlbShPYmplY3RbXSBrZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVudURhdGEgbWVudURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNoYXJhY3RlcikgeworICAgICAgICAKKyAgICAgICAgc3VwZXIobWVudURhdGEpOworICAgICAgICAKKyAgICAgICAgZktleXMgPSAoT2JqZWN0W10pIGtleXMuY2xvbmUoKTsKKyAgICAgICAgZkNoYXJhY3RlciA9IGNoYXJhY3RlcjsKKyAgICAgICAgCisgICAgICAgIEF0dHJpYnV0ZVNldCBrZXlTZXQgPSBuZXcgQXR0cmlidXRlU2V0KGtleXMpOworICAgICAgICBmaW5hbCBTdHlsZU1vZGlmaWVyIG1vZGlmaWVyID0gU3R5bGVNb2RpZmllci5jcmVhdGVSZW1vdmVNb2RpZmllcihrZXlTZXQpOworICAgICAgICAKKyAgICAgICAgZkl0ZW0uYWRkTGlzdGVuZXIobmV3IEV2ZW50TGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBldmVudE9jY3VycmVkKEV2ZW50T2JqZWN0IGV2ZW50KSB7CisgICAgICAgICAgICAgICAgTVRleHRQYW5lbCBwYW5lbCA9IGdldFRleHRQYW5lbCgpOworICAgICAgICAgICAgICAgIGlmIChwYW5lbCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWVudSBpdGVtIGlzIGVuYWJsZWQgd2hlbiBwYW5lbCBpcyBudWxsISIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChmQ2hhcmFjdGVyID09IENIQVJBQ1RFUikgeworICAgICAgICAgICAgICAgICAgICBwYW5lbC5tb2RpZnlDaGFyYWN0ZXJTdHlsZU9uU2VsZWN0aW9uKG1vZGlmaWVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhbmVsLm1vZGlmeVBhcmFncmFwaFN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gb2JqZWN0c0FyZUVxdWFsKE9iamVjdCBsaHMsIE9iamVjdCByaHMpIHsKKyAgICAKKyAgICAgICAgaWYgKGxocyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gcmhzID09IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0Q2hlY2tlZCgpIHsKKworICAgICAgICBNVGV4dFBhbmVsIHBhbmVsID0gZ2V0VGV4dFBhbmVsKCk7CisgICAgICAgIEF0dHJpYnV0ZU1hcCBkZWZhdWx0cyA9IHBhbmVsLmdldERlZmF1bHRWYWx1ZXMoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGZLZXlzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBPYmplY3QgZGVmYXVsdFYgPSBkZWZhdWx0cy5nZXQoZktleXNbaV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSAoZkNoYXJhY3RlciA9PSBDSEFSQUNURVIpPyAKKyAgICAgICAgICAgICAgICAgICAgcGFuZWwuZ2V0Q2hhcmFjdGVyU3R5bGVPdmVyU2VsZWN0aW9uKGZLZXlzW2ldKSA6CisgICAgICAgICAgICAgICAgICAgIHBhbmVsLmdldFBhcmFncmFwaFN0eWxlT3ZlclNlbGVjdGlvbihmS2V5c1tpXSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFvYmplY3RzQXJlRXF1YWwoZGVmYXVsdFYsIHZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZJdGVtLnNldFN0YXRlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmSXRlbS5zZXRTdGF0ZSh0cnVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiByZXNwb25kc1RvRXZlbnRUeXBlKGludCB0eXBlKSB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHlwZSA9PSBUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fU1RZTEVTX0NIQU5HRUQ7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBmaW5hbCB2b2lkIHRleHRFdmVudE9jY3VycmVkKFRleHRQYW5lbEV2ZW50IGV2ZW50KSB7CisgICAgICAgIAorICAgICAgICBzZXRDaGVja2VkKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL1RhYlJ1bGVySW1wbC5qYXZhIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL1RhYlJ1bGVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3MjkzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvVGFiUnVsZXJJbXBsLmphdmEKQEAgLTAsMCArMSw5MDkgQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IFRhYlJ1bGVySW1wbC5qYXZhLHYgJCAkUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDAyLzAyLzE2IDAzOjA2OjUwICQKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCitwYWNrYWdlIGNvbS5pYm0ucmljaHRleHQudWlpbXBsOworCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS5hd3QuQ29tcG9uZW50OworaW1wb3J0IGphdmEuYXd0LkRpbWVuc2lvbjsKK2ltcG9ydCBqYXZhLmF3dC5Gb250TWV0cmljczsKK2ltcG9ydCBqYXZhLmF3dC5GcmFtZTsKK2ltcG9ydCBqYXZhLmF3dC5HcmFwaGljczsKK2ltcG9ydCBqYXZhLmF3dC5JbWFnZTsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0FkYXB0ZXI7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuTW91c2VNb3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5Nb3VzZUxpc3RlbmVyOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lk1vdXNlRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuSW5wdXRFdmVudDsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dGxheW91dC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnRleHRsYXlvdXQuYXR0cmlidXRlcy5UZXh0QXR0cmlidXRlOworCitpbXBvcnQgY29tLmlibS5yaWNodGV4dC5zdHlsZWR0ZXh0Lk1UYWJSdWxlcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3RhbmRhcmRUYWJSdWxlcjsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuVGFiU3RvcDsKK2ltcG9ydCBjb20uaWJtLnJpY2h0ZXh0LnN0eWxlZHRleHQuU3R5bGVNb2RpZmllcjsKKworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbExpc3RlbmVyOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLk1UZXh0UGFuZWw7CitpbXBvcnQgY29tLmlibS5yaWNodGV4dC50ZXh0cGFuZWwuVGV4dFBhbmVsOworaW1wb3J0IGNvbS5pYm0ucmljaHRleHQudGV4dHBhbmVsLlRleHRQYW5lbEV2ZW50OworCisvKioKKyAqIFRhYlJ1bGVyIGlzIGEgQ29tcG9uZW50IHdoaWNoIHByZXNlbnRzIGEgdXNlciBpbnRlcmZhY2UgZm9yCisgKiBzZXR0aW5nIHRoZSBsZWFkaW5nIG1hcmdpbiwgdHJhaWxpbmcgbWFyZ2luLCBmaXJzdCBsaW5lIGluZGVudCwKKyAqIGFuZCB0YWIgdHlwZXMgYW5kIHBvc2l0aW9ucy4KKyAqIDxwPgorICogVGFiUnVsZXIgZG9lcyBub3QgaW1wbGVtZW50IFRleHRQYW5lbExpc3RlbmVyIGRpcmVjdGx5OyAgaG93ZXZlciwKKyAqIGl0IGNhbiByZWNlaXZlIHVwZGF0ZXMgZnJvbSBhIE1UZXh0UGFuZWwuICBUbyBoYXZlIGEgVGFiUnVsZXIgbGlzdGVuCisgKiB0byBhIHBhbmVsLCBjYWxsIDxjb2RlPmxpc3RlblRvUGFuZWw8L2NvZGU+LiAgVGFiUnVsZXIgcmVzcG9uZHMgdG8KKyAqIHVzZXIgbWFuaXB1bGF0aW9uIGJ5IG1vZGlmeWluZyB0aGUgcGFyYWdyYXBoIHN0eWxlcyBvbiBpdHMgTVRleHRQYW5lbAorICogKGlmIGFueSkuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUYWJSdWxlckltcGwgaW1wbGVtZW50cyBNb3VzZUxpc3RlbmVyLCBNb3VzZU1vdGlvbkxpc3RlbmVyCit7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBUYWJTdG9wQnVmZmVyIHsKKyAgICAgICAgcHVibGljIGludCBmUG9zaXRpb247CisgICAgICAgIHB1YmxpYyBieXRlIGZUeXBlOworCisgICAgICAgIFRhYlN0b3BCdWZmZXIoaW50IHBvc2l0aW9uLCBieXRlIHR5cGUpIHsKKyAgICAgICAgICAgIGZQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICAgICAgZlR5cGUgPSB0eXBlOworICAgICAgICB9CisKKyAgICAgICAgVGFiU3RvcEJ1ZmZlcihUYWJTdG9wIHRhYikgeworICAgICAgICAgICAgdGhpcyh0YWIuZ2V0UG9zaXRpb24oKSwgdGFiLmdldFR5cGUoKSk7CisgICAgICAgIH0KKworICAgICAgICBUYWJTdG9wIGdldFRhYlN0b3AoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFRhYlN0b3AoZlBvc2l0aW9uLCBmVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBUYWJSdWxlck1vZGlmaWVyIGV4dGVuZHMgU3R5bGVNb2RpZmllciB7CisKKyAgICAgICAgcHJpdmF0ZSBUYWJTdG9wIGZPbGRUYWI7IC8vIHRhYiB0byByZW1vdmUKKyAgICAgICAgcHJpdmF0ZSBUYWJTdG9wIGZOZXdUYWI7IC8vIHRhYiB0byBhZGQKKyAgICAgICAgcHJpdmF0ZSBBdHRyaWJ1dGVNYXAgZlBhbmVsRGVmYXVsdHM7CisgICAgICAgIAorICAgICAgICBUYWJSdWxlck1vZGlmaWVyKFRhYlN0b3Agb2xkVGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRhYlN0b3AgbmV3VGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBwYW5lbERlZmF1bHRzKSB7CisgICAgICAgICAgICBmT2xkVGFiID0gb2xkVGFiOworICAgICAgICAgICAgZk5ld1RhYiA9IG5ld1RhYjsKKyAgICAgICAgICAgIGZQYW5lbERlZmF1bHRzID0gcGFuZWxEZWZhdWx0czsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGVNYXAgbW9kaWZ5U3R5bGUoQXR0cmlidXRlTWFwIG9sZFN0eWxlKSB7CisKKyAgICAgICAgICAgIE1UYWJSdWxlciBvbGRSdWxlciA9IChNVGFiUnVsZXIpIGdldFdpdGhEZWZhdWx0KFRleHRBdHRyaWJ1dGUuVEFCX1JVTEVSLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZQYW5lbERlZmF1bHRzKTsKKyAgICAgICAgICAgIE1UYWJSdWxlciBydWxlciA9IG9sZFJ1bGVyOworCisgICAgICAgICAgICBpZiAoZk9sZFRhYiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGVyLmNvbnRhaW5zVGFiKGZPbGRUYWIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGVyID0gcnVsZXIucmVtb3ZlVGFiKGZPbGRUYWIuZ2V0UG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZOZXdUYWIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJ1bGVyID0gcnVsZXIuYWRkVGFiKGZOZXdUYWIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocnVsZXIgIT0gb2xkUnVsZXIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2xkU3R5bGUuYWRkQXR0cmlidXRlKFRleHRBdHRyaWJ1dGUuVEFCX1JVTEVSLCBydWxlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2xkU3R5bGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBJbWFnZUNhY2hlIHsKKworICAgICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPUFlSSUdIVCA9CisgICAgICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICAgICAgcHJpdmF0ZSBJbWFnZSBmSW1hZ2UgPSBudWxsOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gZklzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcHJpdmF0ZSBDb21wb25lbnQgZkNvbXBvbmVudDsgICAvLyB3b3JrYXJvdW5kIGZvciBjb21waWxlciBidWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBqdXN0IGJlIGFibGUgdG8gc2F5IENvbXBvbmVudC50aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyB3ZXJlIG5vdCBhIHN0YXRpYyBjbGFzcworICAgICAgICAKKyAgICAgICAgSW1hZ2VDYWNoZShDb21wb25lbnQgY29tcG9uZW50KSB7CisgICAgICAgIAorICAgICAgICAgICAgZkNvbXBvbmVudCA9IGNvbXBvbmVudDsKKyAgICAgICAgfQorCisgICAgICAgIEdyYXBoaWNzIGdldEdyYXBoaWNzKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCisgICAgICAgICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBJbWFnZSBpbWFnZSA9IGZJbWFnZTsKKyAgICAgICAgICAgIGlmIChpbWFnZSA9PSBudWxsIHx8IGltYWdlLmdldFdpZHRoKGZDb21wb25lbnQpIDwgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGltYWdlLmdldEhlaWdodChmQ29tcG9uZW50KSA8IGhlaWdodCkgeworCQlpZiAoIWZDb21wb25lbnQuaXNWaXNpYmxlKCkpIHsgLy8gZml4IHJhY2UgY29uZGl0aW9uIGlmIGNvbXBvbmVudCBub3QgZnVsbHkgaW5pdGlhbGl6ZWQKKwkJICAgIHJldHVybiBudWxsOworCQl9CisgICAgICAgICAgICAgICAgaW1hZ2UgPSBmQ29tcG9uZW50LmNyZWF0ZUltYWdlKHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR3JhcGhpY3MgZyA9IGltYWdlLmdldEdyYXBoaWNzKCk7CisgICAgICAgICAgICBmSW1hZ2UgPSBpbWFnZTsKKyAgICAgICAgICAgIHJldHVybiBnOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoR3JhcGhpY3MgZywgaW50IHgsIGludCB5LCBDb2xvciBjb2xvcikgeworCisgICAgICAgICAgICBpZiAoIWZJc1ZhbGlkKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEcmF3aW5nIGltYWdlIHdoZW4gbm90IHZhbGlkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnLmRyYXdJbWFnZShmSW1hZ2UsIHgsIHksIGNvbG9yLCBmQ29tcG9uZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gaXNWYWxpZCgpIHsKKworICAgICAgICAgICAgcmV0dXJuIGZJc1ZhbGlkOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRWYWxpZChib29sZWFuIGlzVmFsaWQpIHsKKworICAgICAgICAgICAgZklzVmFsaWQgPSBpc1ZhbGlkOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBUaGlzIGNsYXNzIGxpc3RlbnMgdG8gYSBNVGV4dFBhbmVsIGZvciBjaGFuZ2VzIHdoaWNoCisgICAgKiBhZmZlY3QgYSBUYWJSdWxlcidzIGFwcGVhcmFuY2UsIGFuZCB1cGRhdGVzIHRoZSBUYWJSdWxlcgorICAgICogYXMgbmVjZXNzYXJ5LgorICAgICogQHNlZSBUYWJSdWxlcgorICAgICogQHNlZSBjb20uaWJtLnJpY2h0ZXh0LnRleHRwYW5lbC5NVGV4dFBhbmVsCisgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBVcGRhdGVyIGltcGxlbWVudHMgVGV4dFBhbmVsTGlzdGVuZXIgeworCisgICAgICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09QWVJJR0hUID0KKyAgICAgICAgICAgICAgICAgICAgIihDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQiOworICAgICAgICBwcml2YXRlIFRhYlJ1bGVySW1wbCBmVGFiUnVsZXI7CisgICAgICAgIHByaXZhdGUgTVRleHRQYW5lbCBmVGV4dFBhbmVsOworCisgICAgICAgIC8qKgorICAgICAgICAqIENyZWF0ZSBhIG5ldyBUYWJSdWxlclVwZGF0ZXIuCisgICAgICAgICogQHBhcmFtIHRhYlJ1bGVyIHRoZSBUYWJSdWxlciB0byB1cGRhdGUgd2hlbiBhIGNoYW5nZSBvY2N1cnMKKyAgICAgICAgKiAgICAgaW4gdGhlIE1UZXh0UGFuZWwKKyAgICAgICAgKi8KKyAgICAgICAgVXBkYXRlcihUYWJSdWxlckltcGwgdGFiUnVsZXIpIHsKKworICAgICAgICAgICAgZlRhYlJ1bGVyID0gdGFiUnVsZXI7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBSZW1vdmUgc2VsZiBhcyBsaXN0ZW5lciBmcm9tIHByZXZpb3VzIE1UZXh0UGFuZWwsCisgICAgICAgICogc2V0IGN1cnJlbnQgTVRleHRQYW5lbCBhbmQgbGlzdGVuIHRvIGl0IChpZiBub3QgbnVsbCkuCisgICAgICAgICovCisgICAgICAgIHZvaWQgc2V0VGV4dFBhbmVsKE1UZXh0UGFuZWwgdGV4dFBhbmVsKSB7CisKKyAgICAgICAgICAgIGlmIChmVGV4dFBhbmVsICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmVGV4dFBhbmVsLnJlbW92ZUxpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmVGV4dFBhbmVsID0gdGV4dFBhbmVsOworCisgICAgICAgICAgICBpZiAoZlRleHRQYW5lbCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZlRleHRQYW5lbC5hZGRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgICAgICBzZXRBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRBbGwoKSB7CisKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSBmVGV4dFBhbmVsLmdldFNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAgICAgICBib29sZWFuIGxlZnRUb1JpZ2h0ID0gZlRleHRQYW5lbC5wYXJhZ3JhcGhJc0xlZnRUb1JpZ2h0KG9mZnNldCk7CisgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgc3R5bGUgPSBmVGV4dFBhbmVsLmdldFRleHQoKS5wYXJhZ3JhcGhTdHlsZUF0KG9mZnNldCk7CisgICAgICAgICAgICBmVGFiUnVsZXIuc2V0KHN0eWxlLCBmYWxzZSk7CisgICAgICAgICAgICBmVGFiUnVsZXIuc2V0Rm9ybWF0V2lkdGgoZlRleHRQYW5lbC5nZXRGb3JtYXRXaWR0aCgpLCBmYWxzZSk7CisgICAgICAgICAgICBmVGFiUnVsZXIuc2V0TGVmdFRvUmlnaHQobGVmdFRvUmlnaHQsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogVGV4dFBhbmVsTGlzdGVuZXIgbWV0aG9kLiAgVGhpcyBjbGFzcyByZXNwb25kcyB0byB0ZXh0CisgICAgICAgICogY2hhbmdlcyBieSB1cGRhdGluZyBpdHMgVGFiUnVsZXIuCisgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHRleHRFdmVudE9jY3VycmVkKFRleHRQYW5lbEV2ZW50IGV2ZW50KSB7CisKKyAgICAgICAgICAgIGludCBjaGFuZ2VDb2RlID0gZXZlbnQuZ2V0SUQoKTsKKworICAgICAgICAgICAgaWYgKGNoYW5nZUNvZGUgPT0gZXZlbnQuU0VMRUNUSU9OX1NUWUxFU19DSEFOR0VEIHx8CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZUNvZGUgPT0gZXZlbnQuVEVYVF9DSEFOR0VEKSB7CisKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gZlRleHRQYW5lbC5nZXRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBzdHlsZSA9IGZUZXh0UGFuZWwuZ2V0VGV4dCgpLnBhcmFncmFwaFN0eWxlQXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBib29sZWFuIGxlZnRUb1JpZ2h0ID0gZlRleHRQYW5lbC5wYXJhZ3JhcGhJc0xlZnRUb1JpZ2h0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgZlRhYlJ1bGVyLnNldChzdHlsZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGZUYWJSdWxlci5zZXRMZWZ0VG9SaWdodChsZWZ0VG9SaWdodCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaGFuZ2VDb2RlID09IGV2ZW50LkZPUk1BVF9XSURUSF9DSEFOR0VEKSB7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZlRhYlJ1bGVyLnNldEZvcm1hdFdpZHRoKGZUZXh0UGFuZWwuZ2V0Rm9ybWF0V2lkdGgoKSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAqIFRleHRQYW5lbExpc3RlbmVyIG1ldGhvZC4KKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gcmVzcG9uZHNUb0V2ZW50VHlwZShpbnQgdHlwZSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBUZXh0UGFuZWxFdmVudC5TRUxFQ1RJT05fU1RZTEVTX0NIQU5HRUQgfHwKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9PSBUZXh0UGFuZWxFdmVudC5URVhUX0NIQU5HRUQgfHwKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9PSBUZXh0UGFuZWxFdmVudC5GT1JNQVRfV0lEVEhfQ0hBTkdFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29sb3IgZm9yIFRhYlJ1bGVycy4KKyAgICAgKiBAc2VlICNzZXRCYWNrQ29sb3IKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbG9yIERFRkFVTFRfQkFDS19DT0xPUiA9IENvbG9yLmxpZ2h0R3JheTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBrVHJhY2tOb25lID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQga1RyYWNrVGFiID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQga1RyYWNrTE0gPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBrVHJhY2tGTEkgPSAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBrVHJhY2tUTSA9IDQ7CisKKyAgICBwcml2YXRlIENvbXBvbmVudCBmSG9zdDsKKyAgICBwcml2YXRlIE1UYWJSdWxlciBmUnVsZXI7CisgICAgcHJpdmF0ZSBpbnQgZkxlYWRpbmdNYXJnaW47CisgICAgcHJpdmF0ZSBpbnQgZkZpcnN0TGluZUluZGVudDsKKyAgICBwcml2YXRlIGludCBmRm9ybWF0V2lkdGg7CisgICAgcHJpdmF0ZSBpbnQgZlRyYWlsaW5nTWFyZ2luUG9zaXRpb247IC8vIG9wcG9zaXRlIG9mIGFjdHVhbCB0cmFpbGluZyBtYXJnaW4KKyAgICBwcml2YXRlIGJvb2xlYW4gZkxlZnRUb1JpZ2h0OworICAgIHByaXZhdGUgaW50IGZCYXNlbGluZTsKKyAgICBwcml2YXRlIGludCBmT3JpZ2luOworICAgIHByaXZhdGUgQ29sb3IgZkJhY2tDb2xvciA9IERFRkFVTFRfQkFDS19DT0xPUjsKKworICAgIHByaXZhdGUgaW50IGZUcmFja0l0ZW07IC8vIDAgLSBub25lLCAxIC0gdGFiLCAyIC0gbG0sIDMgLSBmbGksIDQgLSB0bQorICAgIHByaXZhdGUgVGFiU3RvcEJ1ZmZlciBmVHJhY2tUYWI7CisgICAgcHJpdmF0ZSBUYWJTdG9wIGZPbGRUYWI7CisgICAgcHJpdmF0ZSBpbnQgZlRyYWNrRGVsdGE7CisgICAgcHJpdmF0ZSBib29sZWFuIGZUcmFja1Zpc2libGU7CisgICAgcHJpdmF0ZSBVcGRhdGVyIGZVcGRhdGVyOworICAgIHByaXZhdGUgTVRleHRQYW5lbCBmVGV4dFBhbmVsID0gbnVsbDsKKworICAgIHByaXZhdGUgSW1hZ2VDYWNoZSBmSW1hZ2VDYWNoZTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBUYWJSdWxlci4KKyAgICAgKiBAcGFyYW0gYmFzZWxpbmUgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcnVsZXIncyBiYXNlbGluZQorICAgICAqIEBwYXJhbSBvcmlnaW4gdGhlIHgtY29vcmRpbmF0ZSBpbiB0aGlzIENvbXBvbmVudCB3aGVyZQorICAgICAqICAgICB0aGUgbGVmdCBtYXJnaW4gYXBwZWFycworICAgICAqIEBwYXJhbSB0ZXh0UGFuZWwgdGhlIE1UZXh0UGFuZWwgdG8gbGlzdGVuIHRvLiAgVGhpcyBUYWJSdWxlcgorICAgICAqICAgICB3aWxsIHJlZmxlY3QgdGhlIE1UZXh0UGFuZWwncyBwYXJhZ3JhcGggc3R5bGVzLCBhbmQgdXBkYXRlCisgICAgICogICAgIHRoZSBwYXJhZ3JhcGggc3R5bGVzIHdoZW4gbWFuaXB1bGF0ZWQuCisgICAgICovCisgICAgcHVibGljIFRhYlJ1bGVySW1wbChpbnQgYmFzZWxpbmUsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9yaWdpbiwgCisgICAgICAgICAgICAgICAgICAgICAgICBNVGV4dFBhbmVsIHRleHRQYW5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudCBob3N0KSB7CisKKyAgICAgICAgZkhvc3QgPSBob3N0OworICAgICAgICBmSW1hZ2VDYWNoZSA9IG5ldyBJbWFnZUNhY2hlKGhvc3QpOworICAgICAgICBmVXBkYXRlciA9IG5ldyBVcGRhdGVyKHRoaXMpOworICAgICAgICBmQmFzZWxpbmUgPSBiYXNlbGluZTsKKyAgICAgICAgZk9yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgaG9zdC5hZGRNb3VzZUxpc3RlbmVyKHRoaXMpOworICAgICAgICBob3N0LmFkZE1vdXNlTW90aW9uTGlzdGVuZXIodGhpcyk7CisgICAgICAgIGlmICh0ZXh0UGFuZWwgIT0gbnVsbCkgeworICAgICAgICAgICAgbGlzdGVuVG9UZXh0UGFuZWwodGV4dFBhbmVsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZSdWxlciA9IG5ldyBTdGFuZGFyZFRhYlJ1bGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMaXN0ZW4gdG8gdGhlIGdpdmVuIE1UZXh0UGFuZWwgYW5kIHJlZmxlY3QgaXRzIGNoYW5nZXMsCisgICAgICogYW5kIHVwZGF0ZSBpdHMgcGFyYWdyYXBoIHN0eWxlcyB3aGVuIFRhYlJ1bGVyIGlzCisgICAgICogbWFuaXB1bGF0ZWQuCisgICAgICogQHBhcmFtIHRleHRQYW5lbCB0aGUgTVRleHRQYW5lbCB0byBsaXN0ZW4gdG8KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsaXN0ZW5Ub1RleHRQYW5lbChNVGV4dFBhbmVsIHRleHRQYW5lbCkgeworCisgICAgICAgIGZUZXh0UGFuZWwgPSB0ZXh0UGFuZWw7CisgICAgICAgIGZVcGRhdGVyLnNldFRleHRQYW5lbCh0ZXh0UGFuZWwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGlzIFRhYlJ1bGVyLgorICAgICAqIEByZXR1cm4gdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyBDb2xvciBnZXRCYWNrQ29sb3IoKSB7CisKKyAgICAgICAgcmV0dXJuIGZCYWNrQ29sb3I7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHBhcmFtIGJhY2tDb2xvciB0aGUgbmV3IGJhY2tncm91bmQgY29sb3Igb2YgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEJhY2tDb2xvcihDb2xvciBiYWNrQ29sb3IpIHsKKworICAgICAgICBpZiAoIWJhY2tDb2xvci5lcXVhbHMoZkJhY2tDb2xvcikpIHsKKyAgICAgICAgICAgIGZCYWNrQ29sb3IgPSBiYWNrQ29sb3I7CisgICAgICAgICAgICBHcmFwaGljcyBnID0gZkhvc3QuZ2V0R3JhcGhpY3MoKTsKKyAgICAgICAgICAgIGlmIChnICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBwYWludChnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBnZXRXaXRoRGVmYXVsdChPYmplY3Qga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVNYXAgc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBkZWZhdWx0cykgeworICAgICAgICBPYmplY3QgdmFsdWUgPSBzdHlsZS5nZXQoa2V5KTsKKyAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdHMuZ2V0KGtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZsb2F0IGdldEZsb2F0V2l0aERlZmF1bHQoT2JqZWN0IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZU1hcCBkZWZhdWx0cykgeworICAgICAgICBPYmplY3QgdmFsdWUgPSBnZXRXaXRoRGVmYXVsdChrZXksIHN0eWxlLCBkZWZhdWx0cyk7CisgICAgICAgIHJldHVybiAoKEZsb2F0KXZhbHVlKS5mbG9hdFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBzZXRMZWZ0VG9SaWdodChib29sZWFuIGxlZnRUb1JpZ2h0LCBib29sZWFuIHVwZGF0ZSkgeworICAgICAgICAKKyAgICAgICAgaWYgKGZMZWZ0VG9SaWdodCAhPSBsZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBmTGVmdFRvUmlnaHQgPSBsZWZ0VG9SaWdodDsKKyAgICAgICAgICAgIHJlZHJhd1NlbGYodXBkYXRlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRGb3JtYXRXaWR0aChpbnQgZm9ybWF0V2lkdGgsIGJvb2xlYW4gdXBkYXRlKSB7CisgICAgICAgIAorICAgICAgICBpZiAoZkZvcm1hdFdpZHRoICE9IGZvcm1hdFdpZHRoKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZUcmFpbGluZ01hcmdpblBvc2l0aW9uICs9IChmb3JtYXRXaWR0aCAtIGZGb3JtYXRXaWR0aCk7CisgICAgICAgICAgICBmRm9ybWF0V2lkdGggPSBmb3JtYXRXaWR0aDsKKyAgICAgICAgICAgIHJlZHJhd1NlbGYodXBkYXRlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXQgVGFiUnVsZXIgZnJvbSB2YWx1ZXMgaW4gcGFyYWdyYXBoU3R5bGUuICBPbmx5IFRhYlJ1bGVyVXBkYXRlcgorICAgICAqIHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kLgorICAgICAqIEBwYXJhbSBwYXJhZ3JhcGhTdHlsZSB0aGUgcGFyYWdyYXBoIHN0eWxlIHdoaWNoIHRoZSBUYWJSdWxlciB3aWxsCisgICAgICogICAgIHJlZmxlY3QKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0KEF0dHJpYnV0ZU1hcCBwYXJhZ3JhcGhTdHlsZSwgYm9vbGVhbiB1cGRhdGUpIHsKKworICAgICAgICBBdHRyaWJ1dGVNYXAgcGFuZWxEZWZhdWx0czsKKyAgICAgICAgCisgICAgICAgIGlmIChmVGV4dFBhbmVsPT1udWxsKSB7CisgICAgICAgICAgICBwYW5lbERlZmF1bHRzID0gVGV4dFBhbmVsLmdldERlZmF1bHRTZXR0aW5ncygpLmdldERlZmF1bHRWYWx1ZXMoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBwYW5lbERlZmF1bHRzID0gZlRleHRQYW5lbC5nZXREZWZhdWx0VmFsdWVzKCk7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpbnQgbGVhZGluZ01hcmdpbiA9ICAoaW50KSBnZXRGbG9hdFdpdGhEZWZhdWx0KFRleHRBdHRyaWJ1dGUuTEVBRElOR19NQVJHSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxEZWZhdWx0cyk7CisgICAgICAgIGludCBmaXJzdExpbmVJbmRlbnQgPSAoaW50KSBnZXRGbG9hdFdpdGhEZWZhdWx0KFRleHRBdHRyaWJ1dGUuRklSU1RfTElORV9JTkRFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbERlZmF1bHRzKTsKKyAgICAgICAgaW50IHRyYWlsaW5nTWFyZ2luID0gKGludCkgZ2V0RmxvYXRXaXRoRGVmYXVsdChUZXh0QXR0cmlidXRlLlRSQUlMSU5HX01BUkdJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbERlZmF1bHRzKTsKKworICAgICAgICBNVGFiUnVsZXIgcnVsZXIgPSAoTVRhYlJ1bGVyKSBnZXRXaXRoRGVmYXVsdChUZXh0QXR0cmlidXRlLlRBQl9SVUxFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsRGVmYXVsdHMpOworCisgICAgICAgIGludCBvdXJGbGkgPSBsZWFkaW5nTWFyZ2luICsgZmlyc3RMaW5lSW5kZW50OworICAgICAgICBpbnQgb3VyVG1wID0gZkZvcm1hdFdpZHRoIC0gdHJhaWxpbmdNYXJnaW47CisgICAgICAgIAorICAgICAgICBpZiAobGVhZGluZ01hcmdpbiA9PSBmTGVhZGluZ01hcmdpbiAmJgorICAgICAgICAgICAgICAgIGZGaXJzdExpbmVJbmRlbnQgPT0gb3VyRmxpICYmCisgICAgICAgICAgICAgICAgZlRyYWlsaW5nTWFyZ2luUG9zaXRpb24gPT0gb3VyVG1wICYmCisgICAgICAgICAgICAgICAgcnVsZXIuZXF1YWxzKGZSdWxlcikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZkxlYWRpbmdNYXJnaW4gPSBsZWFkaW5nTWFyZ2luOworICAgICAgICBmRmlyc3RMaW5lSW5kZW50ID0gb3VyRmxpOworICAgICAgICBmVHJhaWxpbmdNYXJnaW5Qb3NpdGlvbiA9IG91clRtcDsKKyAgICAgICAgZlJ1bGVyID0gcnVsZXI7CisgICAgCisgICAgICAgIHJlZHJhd1NlbGYodXBkYXRlKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHJlZHJhd1NlbGYoYm9vbGVhbiBkcmF3Tm93KSB7CisKKyAgICAgICAgZkltYWdlQ2FjaGUuc2V0VmFsaWQoZmFsc2UpOworCisgICAgICAgIEdyYXBoaWNzIGcgPSBmSG9zdC5nZXRHcmFwaGljcygpOworICAgICAgICBpZiAoZyAhPSBudWxsKQorICAgICAgICAgICAgcGFpbnQoZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGRlYnVnZ2luZyBpbmZvLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisKKyAgICAgICAgcmV0dXJuICJUYWJSdWxlcntmTGVhZGluZ01hcmdpbj0iK2ZMZWFkaW5nTWFyZ2luKworICAgICAgICAgICAgICAgICJ9e2ZGaXJzdExpbmVJbmRlbnQ9IitmRmlyc3RMaW5lSW5kZW50KworICAgICAgICAgICAgICAgICJ9e2ZGb3JtYXRXaWR0aD0iK2ZGb3JtYXRXaWR0aCsKKyAgICAgICAgICAgICAgICAifXtmVHJhaWxpbmdNYXJnaW5Qb3NpdGlvbj0iK2ZUcmFpbGluZ01hcmdpblBvc2l0aW9uKworICAgICAgICAgICAgICAgICJ9e2ZSdWxlcj0iK2ZSdWxlcisKKyAgICAgICAgICAgICAgICAifSI7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBNVGFiUnVsZXIgcmVwcmVzZW50ZWQgYnkgdGhpcyBUYWJSdWxlci4KKyAgICAgKiBAcmV0dXJuIHRoZSBNVGFiUnVsZXIgcmVwcmVzZW50ZWQgYnkgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyBNVGFiUnVsZXIgZ2V0UnVsZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZSdWxlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxlYWRpbmcgbWFyZ2luIG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHJldHVybiB0aGUgbGVhZGluZyBtYXJnaW4gb2YgdGhpcyBUYWJSdWxlcgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0TGVhZGluZ01hcmdpbigpCisgICAgeworICAgICAgICByZXR1cm4gZkxlYWRpbmdNYXJnaW47CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBmaXJzdCBsaW5lIGluZGVudCBvZiB0aGlzIFRhYlJ1bGVyLgorICAgICAqIEByZXR1cm4gdGhlIGZpcnN0IGxpbmUgaW5kZW50IG9mIHRoaXMgVGFiUnVsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZpcnN0TGluZUluZGVudCgpCisgICAgeworICAgICAgICByZXR1cm4gZkZpcnN0TGluZUluZGVudCAtIGZMZWFkaW5nTWFyZ2luOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdHJhaWxpbmcgbWFyZ2luIG9mIHRoaXMgVGFiUnVsZXIuCisgICAgICogQHJldHVybiB0aGUgdHJhaWxpbmcgbWFyZ2luIG9mIHRoaXMgVGFiUnVsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldFRyYWlsaW5nTWFyZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmRm9ybWF0V2lkdGggLSBmVHJhaWxpbmdNYXJnaW5Qb3NpdGlvbjsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBpbnQgdmlzdWFsVG9SdWxlclBvcyhpbnQgdmlzUG9zKSB7CisgICAgICAgIAorICAgICAgICBpZiAoZkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm4gdmlzUG9zIC0gZk9yaWdpbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmT3JpZ2luICsgZkZvcm1hdFdpZHRoIC0gdmlzUG9zOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgaW50IHJ1bGVyVG9WaXN1YWxQb3MoaW50IHJ1bGVyUG9zKSB7CisgICAgICAgIAorICAgICAgICBpZiAoZkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm4gZk9yaWdpbiArIHJ1bGVyUG9zOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZPcmlnaW4gKyBmRm9ybWF0V2lkdGggLSBydWxlclBvczsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIGludCBkaXJNdWx0KCkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZMZWZ0VG9SaWdodD8gMSA6IC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSB0YWJQb3NpdGlvbiB0aGUgbG9naWNhbCAocnVsZXIpIHBvc2l0aW9uIG9mIHRoZSB0YWIKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZHJhd1RhYihHcmFwaGljcyBnLCBpbnQgdGFiUG9zaXRpb24sIGJ5dGUgdGFiVHlwZSwgaW50IHRhYlRvcCwgaW50IHRhYkJvdHRvbSkKKyAgICB7CisgICAgICAgIGludCBwb3MgPSBydWxlclRvVmlzdWFsUG9zKHRhYlBvc2l0aW9uKTsKKyAgICAgICAgaW50IHdpZCA9IDA7CisgICAgICAgIHN3aXRjaCAodGFiVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUYWJTdG9wLmtMZWFkaW5nOiB3aWQgPSAzOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGFiU3RvcC5rQ2VudGVyOiB3aWQgPSAwOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGFiU3RvcC5rVHJhaWxpbmc6IHdpZCA9IC0zOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGFiU3RvcC5rRGVjaW1hbDogd2lkID0gMDsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgICAgICB3aWQgKj0gZGlyTXVsdCgpOworICAgICAgICAKKyAgICAgICAgaWYgKHRhYlR5cGUgIT0gVGFiU3RvcC5rQXV0bykgeworICAgICAgICAgICAgZy5kcmF3TGluZShwb3MsIHRhYlRvcCwgcG9zLCB0YWJCb3R0b20pOworICAgICAgICAgICAgaWYgKHdpZCAhPSAwKQorICAgICAgICAgICAgICAgIGcuZHJhd0xpbmUocG9zLCB0YWJCb3R0b20sIHBvcyArIHdpZCwgdGFiQm90dG9tKTsKKyAgICAgICAgfQorICAgICAgICBnLmRyYXdMaW5lKHBvcy0yLCB0YWJUb3ArMiwgcG9zLCB0YWJUb3ApOworICAgICAgICBnLmRyYXdMaW5lKHBvcywgdGFiVG9wLCBwb3MrMiwgdGFiVG9wKzIpOworICAgICAgICBpZiAodGFiVHlwZSA9PSBUYWJTdG9wLmtEZWNpbWFsKSB7CisgICAgICAgICAgICBnLmRyYXdMaW5lKHBvcyArIDMsIHRhYkJvdHRvbSwgcG9zICsgNCwgdGFiQm90dG9tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3TE0oR3JhcGhpY3MgZykKKyAgICB7CisgICAgICAgIGludCBwb3MgPSBydWxlclRvVmlzdWFsUG9zKGZMZWFkaW5nTWFyZ2luKTsKKyAgICAgICAgaW50W10geHB0cyA9IHsgcG9zLCBwb3MsIHBvcyArICg0KmRpck11bHQoKSksIHBvcyB9OworICAgICAgICBpbnRbXSB5cHRzID0geyBmQmFzZWxpbmUgKyAxMiwgZkJhc2VsaW5lICsgNywgZkJhc2VsaW5lICsgNywgZkJhc2VsaW5lICsgMTIgfTsKKyAgICAgICAgZy5maWxsUG9seWdvbih4cHRzLCB5cHRzLCAzKTsKKyAgICAgICAgZy5kcmF3UG9seWdvbih4cHRzLCB5cHRzLCA0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZHJhd0ZMSShHcmFwaGljcyBnKQorICAgIHsKKyAgICAgICAgaW50IHBvcyA9IHJ1bGVyVG9WaXN1YWxQb3MoZkZpcnN0TGluZUluZGVudCk7CisgICAgICAgIGludFtdIHhwdHMgPSB7IHBvcywgcG9zLCBwb3MgKyAoNCpkaXJNdWx0KCkpLCBwb3MgfTsKKyAgICAgICAgaW50W10geXB0cyA9IHsgZkJhc2VsaW5lLCBmQmFzZWxpbmUgKyA1LCBmQmFzZWxpbmUgKyA1LCBmQmFzZWxpbmUgfTsKKyAgICAgICAgZy5maWxsUG9seWdvbih4cHRzLCB5cHRzLCAzKTsKKyAgICAgICAgZy5kcmF3UG9seWdvbih4cHRzLCB5cHRzLCA0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZHJhd1JNKEdyYXBoaWNzIGcpCisgICAgeworICAgICAgICBpbnQgcG9zID0gcnVsZXJUb1Zpc3VhbFBvcyhmVHJhaWxpbmdNYXJnaW5Qb3NpdGlvbik7CisgICAgICAgIGludFtdIHhwdHMgPSB7IHBvcywgcG9zLCBwb3MgLSAoNipkaXJNdWx0KCkpLCBwb3MgfTsKKyAgICAgICAgaW50W10geXB0cyA9IHsgZkJhc2VsaW5lLCBmQmFzZWxpbmUgKyAxMiwgZkJhc2VsaW5lICsgNiwgZkJhc2VsaW5lIH07CisgICAgICAgIGcuZmlsbFBvbHlnb24oeHB0cywgeXB0cywgMyk7CisgICAgICAgIGcuZHJhd1BvbHlnb24oeHB0cywgeXB0cywgNCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGFsaWduSW50KGludCB2YWx1ZSkgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIChpbnQpKChpbnQpKHZhbHVlIC8gNC41KSAqIDQuNSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gZmdMZW5ndGhzID0geyAxMCwgMiwgNCwgMiwgNiwgMiwgNCwgMiB9OworCisgICAgLyoqCisgICAgICogQ29tcG9uZW50IG1ldGhvZCBvdmVycmlkZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBnKQorICAgIHsKKyAgICAgICAgRGltZW5zaW9uIHNpemUgPSBmSG9zdC5nZXRTaXplKCk7CisKKyAgICAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aDsKKyAgICAgICAgaW50IGJhc2VsaW5lID0gZkJhc2VsaW5lOworICAgICAgICBpbnQgYmFzZWxpbmUyID0gYmFzZWxpbmUgKyAyOworICAgICAgICBpbnQgYmFzZWxpbmUxMCA9IGJhc2VsaW5lICsgMTA7CisgICAgICAgIGludCBiYXNlbGluZTEyID0gYmFzZWxpbmUgKyAxMjsKKworICAgICAgICBpZiAoIWZJbWFnZUNhY2hlLmlzVmFsaWQoKSkgeworCisgICAgICAgICAgICBHcmFwaGljcyBnQ2FjaGUgPSBmSW1hZ2VDYWNoZS5nZXRHcmFwaGljcyh3aWR0aCwgYmFzZWxpbmUxMiArIDEpOworICAgICAgICAgICAgaWYgKGdDYWNoZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBzZXQgYmFja2dyb3VuZCBjb2xvcgorCisgICAgICAgICAgICBnQ2FjaGUuc2V0Q29sb3IoZkJhY2tDb2xvcik7CisgICAgICAgICAgICBnQ2FjaGUuc2V0UGFpbnRNb2RlKCk7CisgICAgICAgICAgICBnQ2FjaGUuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGJhc2VsaW5lMTIgKyAxKTsKKworICAgICAgICAgICAgLy8gcGFpbnQgdGlja3MKKworICAgICAgICAgICAgZ0NhY2hlLnNldENvbG9yKENvbG9yLmJsYWNrKTsKKyAgICAgICAgICAgIGdDYWNoZS5kcmF3TGluZSgwLCAwLCB3aWR0aCwgMCk7CisgICAgICAgICAgICBnQ2FjaGUuZHJhd0xpbmUoMCwgYmFzZWxpbmUsIHdpZHRoLCBiYXNlbGluZSk7CisKKyAgICAgICAgICAgIGludFtdIGxlbmd0aHMgPSBmZ0xlbmd0aHM7CisKKyAgICAgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgICAgICBpbnQgaW5jaG51bSA9IDA7CisgICAgICAgICAgICBGb250TWV0cmljcyBmbSA9IG51bGw7CisgICAgICAgICAgICBpZiAoIWZMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgIGZtID0gZ0NhY2hlLmdldEZvbnRNZXRyaWNzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZkZvcm1hdFdpZHRoOyBpICs9IDkpIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gbGVuZ3Roc1tpbmRleF07CisgICAgICAgICAgICAgICAgaW50IHBvcyA9IHJ1bGVyVG9WaXN1YWxQb3MoaSk7CisgICAgICAgICAgICAgICAgZ0NhY2hlLmRyYXdMaW5lKHBvcywgYmFzZWxpbmUsIHBvcywgYmFzZWxpbmUgLSBsZW4pOworCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IEludGVnZXIudG9TdHJpbmcoaW5jaG51bSsrKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGRyYXdYOworICAgICAgICAgICAgICAgICAgICBpZiAoZkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkcmF3WCA9IHBvcyArIDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkcmF3WCA9IHBvcyAtIGZtLnN0cmluZ1dpZHRoKHN0cikgLSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZ0NhY2hlLmRyYXdTdHJpbmcoc3RyLCBkcmF3WCwgYmFzZWxpbmUgLSAyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKytpbmRleCA9PSBsZW5ndGhzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBwYWludCB0YWJzCisgICAgICAgICAgICBUYWJTdG9wIHRhYiA9IGZSdWxlci5maXJzdFRhYigpOworICAgICAgICAgICAgd2hpbGUgKHRhYiAhPSBudWxsICYmIHRhYi5nZXRQb3NpdGlvbigpIDwgZlRyYWlsaW5nTWFyZ2luUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGRvZHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKHRhYi5nZXRUeXBlKCkgPT0gVGFiU3RvcC5rQXV0bykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGFiLmdldFBvc2l0aW9uKCkgPD0gTWF0aC5tYXgoZkxlYWRpbmdNYXJnaW4sIGZGaXJzdExpbmVJbmRlbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgZG9kcmF3ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhYi5nZXRQb3NpdGlvbigpID49IGZUcmFpbGluZ01hcmdpblBvc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgZG9kcmF3ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRvZHJhdykKKyAgICAgICAgICAgICAgICAgICAgZHJhd1RhYihnQ2FjaGUsIHRhYi5nZXRQb3NpdGlvbigpLCB0YWIuZ2V0VHlwZSgpLCBiYXNlbGluZTIsIGJhc2VsaW5lMTApOworCisgICAgICAgICAgICAgICAgdGFiID0gZlJ1bGVyLm5leHRUYWIodGFiLmdldFBvc2l0aW9uKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnQ2FjaGUuZHJhd0xpbmUoMCwgYmFzZWxpbmUxMiwgd2lkdGgsIGJhc2VsaW5lMTIpOworCisgICAgICAgICAgICAvLyBwYWludCBvdGhlcnMgZXhjZXB0IGZvciB0cmFja2VkIGl0ZW0KKyAgICAgICAgICAgIGlmIChmVHJhY2tJdGVtICE9IGtUcmFja0xNKSBkcmF3TE0oZ0NhY2hlKTsKKyAgICAgICAgICAgIGlmIChmVHJhY2tJdGVtICE9IGtUcmFja1RNKSBkcmF3Uk0oZ0NhY2hlKTsKKyAgICAgICAgICAgIGlmIChmVHJhY2tJdGVtICE9IGtUcmFja0ZMSSAmJiBmVHJhY2tJdGVtICE9IGtUcmFja0xNKSBkcmF3RkxJKGdDYWNoZSk7CisgICAgICAgICAgICBmSW1hZ2VDYWNoZS5zZXRWYWxpZCh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZJbWFnZUNhY2hlLmRyYXdJbWFnZShnLCAwLCAwLCBDb2xvci5saWdodEdyYXkpOworCisgICAgICAgIHN3aXRjaCAoZlRyYWNrSXRlbSkgeworICAgICAgICAgICAgY2FzZSBrVHJhY2tUYWI6IGlmIChmVHJhY2tWaXNpYmxlKSBkcmF3VGFiKGcsIGZUcmFja1RhYi5mUG9zaXRpb24sIGZUcmFja1RhYi5mVHlwZSwgYmFzZWxpbmUyLCBiYXNlbGluZTEwKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtUcmFja0xNOiBkcmF3TE0oZyk7IGRyYXdGTEkoZyk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVHJhY2tUTTogZHJhd1JNKGcpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1RyYWNrRkxJOiBkcmF3RkxJKGcpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTW91c2VMaXN0ZW5lciBtZXRob2QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgbW91c2VDbGlja2VkKE1vdXNlRXZlbnQgZSkge30KKyAgICAvKioKKyAgICAgKiBNb3VzZUxpc3RlbmVyIG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb3VzZUVudGVyZWQoTW91c2VFdmVudCBlKSB7fQorICAgIC8qKgorICAgICAqIE1vdXNlTGlzdGVuZXIgbWV0aG9kLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1vdXNlRXhpdGVkKE1vdXNlRXZlbnQgZSkge30KKworICAgIC8qKgorICAgICAqIE1vdXNlTGlzdGVuZXIgbWV0aG9kLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1vdXNlUHJlc3NlZChNb3VzZUV2ZW50IGUpCisgICAgeworICAgICAgICAvLyBmaW5kIG91dCBpZiB3ZSBoaXQgYSB0YWJzdG9wCisgICAgICAgIGludCB4ID0gdmlzdWFsVG9SdWxlclBvcyhlLmdldFgoKSk7CisgICAgICAgIGludCB5ID0gZS5nZXRZKCk7CisKKyAgICAgICAgaWYgKHkgPiBmQmFzZWxpbmUgJiYgeSA8IGZCYXNlbGluZSArIDEyKSB7CisgICAgICAgICAgICBpZiAoeSA+PSBmQmFzZWxpbmUgKyA3ICYmIHggPj0gZkxlYWRpbmdNYXJnaW4gLSAzICYmIHggPD0gZkxlYWRpbmdNYXJnaW4gKyAzKSB7CisgICAgICAgICAgICAgICAgZlRyYWNrSXRlbSA9IGtUcmFja0xNOworICAgICAgICAgICAgICAgIGZUcmFja0RlbHRhID0gZkxlYWRpbmdNYXJnaW4gLSB4OworICAgICAgICAgICAgfSBlbHNlIGlmICh5IDwgZkJhc2VsaW5lICsgNyAmJiB4ID49IGZGaXJzdExpbmVJbmRlbnQgLSAzICYmIHggPD0gZkZpcnN0TGluZUluZGVudCArIDMpIHsKKyAgICAgICAgICAgICAgICBmVHJhY2tJdGVtID0ga1RyYWNrRkxJOworICAgICAgICAgICAgICAgIGZUcmFja0RlbHRhID0gZkZpcnN0TGluZUluZGVudCAtIHg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHggPj0gZlRyYWlsaW5nTWFyZ2luUG9zaXRpb24gLSAzICYmIHggPD0gZlRyYWlsaW5nTWFyZ2luUG9zaXRpb24gKyAzKSB7CisgICAgICAgICAgICAgICAgZlRyYWNrSXRlbSA9IGtUcmFja1RNOworICAgICAgICAgICAgICAgIGZUcmFja0RlbHRhID0gZlRyYWlsaW5nTWFyZ2luUG9zaXRpb24gLSB4OworICAgICAgICAgICAgfSBlbHNlIGlmIChlLmlzQ29udHJvbERvd24oKSkgeworICAgICAgICAgICAgICAgIGZUcmFja0l0ZW0gPSBrVHJhY2tUYWI7CisgICAgICAgICAgICAgICAgZlRyYWNrVGFiID0gbmV3IFRhYlN0b3BCdWZmZXIoYWxpZ25JbnQoeCksIFRhYlN0b3Aua0xlYWRpbmcpOworICAgICAgICAgICAgICAgIGZUcmFja0RlbHRhID0gZlRyYWNrVGFiLmZQb3NpdGlvbiAtIHg7CisgICAgICAgICAgICAgICAgZlRyYWNrVmlzaWJsZSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFRhYlN0b3AgdGFiID0gZlJ1bGVyLmZpcnN0VGFiKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRhYi5nZXRUeXBlKCkgIT0gVGFiU3RvcC5rQXV0bykgeworICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IHRhYi5nZXRQb3NpdGlvbigpIC0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IHRhYi5nZXRQb3NpdGlvbigpICsgMykgeworICAgICAgICAgICAgICAgICAgICAgICAgZk9sZFRhYiA9IHRhYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZUcmFja1RhYiA9IG5ldyBUYWJTdG9wQnVmZmVyKHRhYik7CisgICAgICAgICAgICAgICAgICAgICAgICBmUnVsZXIgPSBmUnVsZXIucmVtb3ZlVGFiKGZPbGRUYWIuZ2V0UG9zaXRpb24oKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmdldENsaWNrQ291bnQoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZUcmFja1RhYi5mVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRhYlN0b3Aua0xlYWRpbmc6IGZUcmFja1RhYi5mVHlwZSA9IFRhYlN0b3Aua0NlbnRlcjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGFiU3RvcC5rQ2VudGVyOiBmVHJhY2tUYWIuZlR5cGUgPSBUYWJTdG9wLmtUcmFpbGluZzsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGFiU3RvcC5rVHJhaWxpbmc6IGZUcmFja1RhYi5mVHlwZSA9IFRhYlN0b3Aua0RlY2ltYWw7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRhYlN0b3Aua0RlY2ltYWw6IGZUcmFja1RhYi5mVHlwZSA9IFRhYlN0b3Aua0xlYWRpbmc7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmVHJhY2tJdGVtID0ga1RyYWNrVGFiOworICAgICAgICAgICAgICAgICAgICAgICAgZlRyYWNrRGVsdGEgPSB0YWIuZ2V0UG9zaXRpb24oKSAtIHg7CisgICAgICAgICAgICAgICAgICAgICAgICBmVHJhY2tWaXNpYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGFiID0gZlJ1bGVyLm5leHRUYWIodGFiLmdldFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZUcmFja0l0ZW0gIT0ga1RyYWNrTm9uZSkgeworICAgICAgICAgICAgICAgIGZJbWFnZUNhY2hlLnNldFZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwYWludChmSG9zdC5nZXRHcmFwaGljcygpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb3VzZUxpc3RlbmVyIG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb3VzZURyYWdnZWQoTW91c2VFdmVudCBlKQorICAgIHsKKyAgICAgICAgaW50IHggPSB2aXN1YWxUb1J1bGVyUG9zKGUuZ2V0WCgpKTsKKyAgICAgICAgaW50IHkgPSBlLmdldFkoKTsKKworICAgICAgICBpZiAoZlRyYWNrSXRlbSAhPSBrVHJhY2tOb25lKSB7CisgICAgICAgICAgICBib29sZWFuIHJlcGFpbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2xlYW4gaW5yYW5nZSA9IHkgPiBmQmFzZWxpbmUgJiYgeSA8IGZCYXNlbGluZSArIDEyOworICAgICAgICAgICAgYm9vbGVhbiBpbmJpZ3JhbmdlID0geSA+IDAgJiYgeSA8IGZIb3N0LmdldFNpemUoKS5oZWlnaHQgKyAyMDsKKyAgICAgICAgICAgIGludCBuZXdwb3MgPSBhbGlnbkludCh4ICsgZlRyYWNrRGVsdGEpOworICAgICAgICAgICAgaWYgKG5ld3BvcyA8IDApCisgICAgICAgICAgICAgICAgbmV3cG9zID0gMDsKKworICAgICAgICAgICAgc3dpdGNoIChmVHJhY2tJdGVtKSB7CisgICAgICAgICAgICAgICAgY2FzZSBrVHJhY2tUYWI6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlucmFuZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnQgPSAhZlRyYWNrVmlzaWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZUcmFja1Zpc2libGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3BvcyAhPSBmVHJhY2tUYWIuZlBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlRyYWNrVGFiLmZQb3NpdGlvbiA9IG5ld3BvczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmVHJhY2tWaXNpYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmVHJhY2tWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gYnJlYWs7CisKKy8qIEl0IHdvdWxkIGJlIG5pY2UgdG8gb3B0aW9uYWxseSB0cmFjayB0aGUgbWFyZ2luICdpbmRlcGVuZGVudGx5JyBvZiB0aGUgZmlyc3QgbGluZSBpbmRlbnQuCisgVW5mb3J0dW5hdGVseSB0aGlzIG1ha2VzIGZvciBtb3JlIHdvcmsgd2hlbiB3ZSBoYXZlIG11bHRpcGxlIHBhcmFncmFwaCBzdHlsZXMgc2VsZWN0ZWQuCisgU2luY2UgaW50ZXJuYWxseSB0aGUgZmlyc3QgbGluZSBpbmRlbnQgaXMgcmVsYXRpdmUgdG8gdGhlIG1hcmdpbiwgbW92aW5nIHRoZSBtYXJnaW4KKyBpbmRlcGVuZGVudGx5IHNvIHRoYXQgYWxsIGFmZmVjdGVkIHBhcmFncmFwaHMgc2hhcmUgdGhlIHNhbWUgbWFyZ2luIGJ1dCByZXRhaW4gZmlyc3QKKyBsaW5lIGluZGVudHMgaW4gdGhlICdzYW1lJyBwb3NpdGlvbnMgbWVhbnMgdGhhdCBJIG5lZWQgdG8gYWxzbyBhZGp1c3QgdGhlIGZpcnN0IGxpbmUKKyBpbmRlbnRzIGluIGVhY2ggcGFyYWdyYXBoIGJ5IHNvbWUgZGVsdGEuIEknbSBub3QgcmVhZHkgdG8gZG8gdGhhdCB5ZXQuICovCisKKyAgICAgICAgICAgICAgICBjYXNlIGtUcmFja0xNOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmJpZ3JhbmdlICYmIG5ld3BvcyAhPSBmTGVhZGluZ01hcmdpbikgeworICAgICAgICAgICAgICAgICAgICAgICAgZkZpcnN0TGluZUluZGVudCArPSBuZXdwb3MgLSBmTGVhZGluZ01hcmdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZMZWFkaW5nTWFyZ2luID0gbmV3cG9zOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBrVHJhY2tGTEk6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluYmlncmFuZ2UgJiYgbmV3cG9zICE9IGZGaXJzdExpbmVJbmRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZGaXJzdExpbmVJbmRlbnQgPSBuZXdwb3M7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIGtUcmFja1RNOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmJpZ3JhbmdlICYmIG5ld3BvcyAhPSBmVHJhaWxpbmdNYXJnaW5Qb3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgZlRyYWlsaW5nTWFyZ2luUG9zaXRpb24gPSBuZXdwb3M7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgaWYgKHJlcGFpbnQpCisgICAgICAgICAgICAgICAgcGFpbnQoZkhvc3QuZ2V0R3JhcGhpY3MoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb3VzZUxpc3RlbmVyIG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb3VzZVJlbGVhc2VkKE1vdXNlRXZlbnQgZSkKKyAgICB7CisgICAgICAgIGlmIChmVHJhY2tJdGVtICE9IGtUcmFja05vbmUpIHsKKyAgICAgICAgICAgIGlmIChmVHJhY2tJdGVtID09IGtUcmFja1RhYiAmJiBmVHJhY2tWaXNpYmxlKSB7CisgICAgICAgICAgICAgICAgZlJ1bGVyID0gZlJ1bGVyLmFkZFRhYihmVHJhY2tUYWIuZ2V0VGFiU3RvcCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZlRyYWNrVGFiID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm90aWZ5KGZUcmFja0l0ZW0pOworCisgICAgICAgICAgICBmVHJhY2tJdGVtID0ga1RyYWNrTm9uZTsKKyAgICAgICAgICAgIGZUcmFja1RhYiA9IG51bGw7CisgICAgICAgICAgICBmT2xkVGFiID0gbnVsbDsKKworICAgICAgICAgICAgZkltYWdlQ2FjaGUuc2V0VmFsaWQoZmFsc2UpOworICAgICAgICAgICAgcGFpbnQoZkhvc3QuZ2V0R3JhcGhpY3MoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb3VzZUxpc3RlbmVyIG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb3VzZU1vdmVkKE1vdXNlRXZlbnQgZSkge30KKworICAgIHByaXZhdGUgdm9pZCBub3RpZnkoaW50IGNoYW5nZSkKKyAgICB7CisgICAgICAgIGlmIChmVGV4dFBhbmVsICE9IG51bGwpIHsKKworICAgICAgICAgICAgU3R5bGVNb2RpZmllciBtb2RpZmllcjsKKworICAgICAgICAgICAgaWYgKGNoYW5nZSA9PSBrVHJhY2tUYWIpIHsKKyAgICAgICAgICAgICAgICBUYWJTdG9wIG5ld1RhYiA9IGZUcmFja1RhYj09bnVsbD8gbnVsbCA6IGZUcmFja1RhYi5nZXRUYWJTdG9wKCk7CisgICAgICAgICAgICAgICAgbW9kaWZpZXIgPSBuZXcgVGFiUnVsZXJNb2RpZmllcihmT2xkVGFiLCBuZXdUYWIsIGZUZXh0UGFuZWwuZ2V0RGVmYXVsdFZhbHVlcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIE9iamVjdCBrZXk7CisgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlOworCisgICAgICAgICAgICAgICAgc3dpdGNoKGNoYW5nZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIGtUcmFja0xNOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gVGV4dEF0dHJpYnV0ZS5MRUFESU5HX01BUkdJTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IEZsb2F0KGdldExlYWRpbmdNYXJnaW4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIGtUcmFja1RNOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gVGV4dEF0dHJpYnV0ZS5UUkFJTElOR19NQVJHSU47CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBGbG9hdChnZXRUcmFpbGluZ01hcmdpbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2Uga1RyYWNrRkxJOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gVGV4dEF0dHJpYnV0ZS5GSVJTVF9MSU5FX0lOREVOVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IEZsb2F0KGdldEZpcnN0TGluZUluZGVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2hhbmdlIGNvZGUuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbW9kaWZpZXIgPSBTdHlsZU1vZGlmaWVyLmNyZWF0ZUFkZE1vZGlmaWVyKGtleSwgdmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmVGV4dFBhbmVsLm1vZGlmeVBhcmFncmFwaFN0eWxlT25TZWxlY3Rpb24obW9kaWZpZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcG9uZW50IG92ZXJyaWRlLgorICAgICAqLworICAgIHB1YmxpYyBEaW1lbnNpb24gZ2V0TWluaW11bVNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMTAwLCBmQmFzZWxpbmUgKyAxMyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcG9uZW50IG92ZXJyaWRlLgorICAgICAqLworICAgIHB1YmxpYyBEaW1lbnNpb24gZ2V0UHJlZmVycmVkU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0TWluaW11bVNpemUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvcmVzb3VyY2VzL0ZyYW1lUmVzb3VyY2VzLmphdmEgYi9zcmMvY29tL2libS9yaWNodGV4dC91aWltcGwvcmVzb3VyY2VzL0ZyYW1lUmVzb3VyY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTdjMWU5NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9yZXNvdXJjZXMvRnJhbWVSZXNvdXJjZXMuamF2YQpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBjb20uaWJtLnJpY2h0ZXh0LnVpaW1wbC5yZXNvdXJjZXM7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LktleUV2ZW50OworCitwdWJsaWMgZmluYWwgY2xhc3MgRnJhbWVSZXNvdXJjZXMgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKy8qCisgKiBUaGVzZSBTdHJpbmdzIGFyZSBrZXlzIHRvIG90aGVyIFN0cmluZyByZXNvdXJjZXMuCisgKi8KKyAgICAvLyBNZW51IG5hbWVzCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRURJVCA9ICJFZGl0IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSVpFID0gIlNpemUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTlQgPSAiRm9udCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEUgPSAiU3R5bGUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMVVNIID0gIkZsdXNoIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlNQVAgPSAiS2V5bWFwIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQk9VVF9NRU5VID0gIkFib3V0IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSURJID0gIkJpZGkiOworICAgIAorICAgIC8vIEJ1dHRvbnMKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPSyA9ICJPSyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FOQ0VMID0gIkNhbmNlbCI7CisKKyAgICAvLyBDb2xvcnMKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCTEFDSyA9ICJCbGFjayI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0hJVEUgPSAiV2hpdGUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdSRUVOID0gIkdyZWVuIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCTFVFID0gIkJsdWUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENZQU4gPSAiQ3lhbiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JBWSA9ICJHcmF5IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBEQVJLX0dSQVkgPSAiRGFyayBHcmF5IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSUdIVF9HUkFZID0gIkxpZ2h0IEdyYXkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BR0VOVEEgPSAiTWFnZW50YSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1JBTkdFID0gIk9yYW5nZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElOSyA9ICJQaW5rIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUQgPSAiUmVkIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBZRUxMT1cgPSAiWWVsbG93IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT05FID0gIk5vbmUiOworCisgICAgLy8gRGlhbG9nIHRpdGxlcyBhbmQgbWVzc2FnZXMKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRfU0laRV9USVRMRSA9ICJTZXQgRm9udCBTaXplIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRfU0laRV9MQUJFTCA9ICJGb250IFNpemU6IjsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9TVVBFUlNDUklQVF9USVRMRSA9ICJTZXQgU3VwZXJzY3JpcHQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9TVVBFUlNDUklQVF9MQUJFTCA9ICJTdXBlcnNjcmlwdDoiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9TVUJTQ1JJUFRfVElUTEUgPSAiU2V0IFN1YnNjcmlwdCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUX1NVQlNDUklQVF9MQUJFTCA9ICJTdWJzY3JpcHQ6IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRfRk9SRUdST1VORF9USVRMRSA9ICJTZXQgRm9yZWdyb3VuZCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUX0ZPUkVHUk9VTkRfTEFCRUwgPSAiRm9yZWdyb3VuZDoiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9CQUNLR1JPVU5EX1RJVExFID0gIlNldCBCYWNrZ3JvdW5kIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRfQkFDS0dST1VORF9MQUJFTCA9ICJCYWNrZ3JvdW5kOiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUX0ZPTlRfVElUTEUgPSAiU2V0IEZvbnQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9GT05UX0xBQkVMID0gIkZvbnQ6IjsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFCT1VUX1RJVExFID0gIkFib3V0IHRoZSBSaWNoRWRpdCBDb250cm9sIjsKKworICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgU3RyaW5nIHdoaWNoIGlzIG5vdCBpdHMgb3duIHZhbHVlOgorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFCT1VUX1RFWFQgPSAiQWJvdXQgdGV4dCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVFVBTF9BQk9VVF9URVhUID0KKyAgICAgICAgIkNvcHlyaWdodCAoQykgSUJNIENvcnAuIDE5OTYtMjAwMiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG4iICsKKyAgICAgICAgIkpvaG4gUmFsZXlcbiIgKworICAgICAgICAiU3RlcGhlbiBGLiBCb290aFxuIiArCisgICAgICAgICJEb3VnIEZlbHRcbiIgKworICAgICAgICAiSm9obiBGaXR6cGF0cmlja1xuIiArCisgICAgICAgICJSaWNoIEdpbGxhbSI7CisvKgorICogVGhlIGZvbGxvd2luZyBTdHJpbmdzIGFyZSBrZXlzIHRvIE1lbnVEYXRhIHJlc291cmNlcy4gIFRoZXkKKyAqIGFsc28gZG91YmxlIGFzIHRoZSBkZWZhdWx0IG1lbnUgbGFiZWwgdGV4dC4KKyAqLworICAgIC8vIEVkaXQgbWVudQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVORE8gPSAiVW5kbyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVETyA9ICJSZWRvIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDVVQgPSAiQ3V0IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZID0gIkNvcHkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBU1RFID0gIlBhc3RlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTEVBUiA9ICJDbGVhciI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNUX0FMTCA9ICJTZWxlY3QgQWxsIjsKKworICAgIC8vIEZsdXNoIG1lbnUKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMRUFESU5HID0gIkxlYWRpbmciOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUlMSU5HID0gIlRyYWlsaW5nIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDRU5URVIgPSAiQ2VudGVyIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKVVNUSUZJRUQgPSAiSnVzdGlmaWVkIjsKKworICAgIC8vIEFib3V0IG1lbnUKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQk9VVF9JVEVNID0gIkFib3V0Li4uIjsKKworICAgIC8vIEtleW1hcCBtZW51CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVCA9ICJEZWZhdWx0IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkFCSUMgPSAiQXJhYmljIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUJSRVcgPSAiSGVicmV3IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJU1JBRUxfTklLVUQgPSAiSXNyYWVsIE5pa3VkIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUSEFJX0tFVE1BTkVFID0gIlRoYWkgS2V0bWFuZWUiOworCisgICAgLy8gU3R5bGUgbWVudQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQUlOID0gIlBsYWluIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCT0xEID0gIkJvbGQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElUQUxJQyA9ICJJdGFsaWMiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVOREVSTElORSA9ICJVbmRlcmxpbmUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUklLRVRIUk9VR0ggPSAiU3RyaWtldGhyb3VnaCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VQRVJTQ1JJUFQgPSAiU3VwZXJzY3JpcHQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlNDUklQVCA9ICJTdWJzY3JpcHQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVUEVSU0NSSVBUX0RJQUxPRyA9ICJTdXBlcnNjcmlwdC4uLiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCU0NSSVBUX0RJQUxPRyA9ICJTdWJzY3JpcHQuLi4iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVDT0xPUl9ESUFMT0cgPSAiRm9yZWNvbG9yLi4uIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQUNLQ09MT1JfRElBTE9HID0gIkJhY2tjb2xvci4uLiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVF9ESUFMT0cgPSAiRm9udC4uLiI7CisgICAgCisKKyAgICAvLyBTaXplIG1lbnUKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVEhFUl9ESUFMT0cgPSAiT3RoZXIuLi4iOworICAgIAorICAgIC8vIEJpZGkgbWVudQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRElSRUNUSU9OID0gIkRlZmF1bHQgUGFyYWdyYXBoIERpcmVjdGlvbiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTFRSX0RJUkVDVElPTiA9ICJMZWZ0LXRvLXJpZ2h0IFBhcmFncmFwaCBEaXJlY3Rpb24iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJUTF9ESVJFQ1RJT04gPSAiUmlnaHQtdG8tbGVmdCBQYXJhZ3JhcGggRGlyZWN0aW9uIjsKKworICAgIHByaXZhdGUgc3RhdGljIE9iamVjdFtdIG1ha2VNZW51RGF0YShTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBzaG9ydEN1dENoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaG9ydEN1dEtleSkgeworCisgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W10geyBuYW1lLCBuZXcgTWVudURhdGEobmFtZSwgc2hvcnRDdXRDaGFyLCBzaG9ydEN1dEtleSkgfTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RbXSBtYWtlTWVudURhdGEoU3RyaW5nIG5hbWUpIHsKKworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdIHsgbmFtZSwgbmV3IE1lbnVEYXRhKG5hbWUpIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0W10gZHVwbGljYXRlKE9iamVjdCBvYmopIHsKKworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdIHsgb2JqLCBvYmogfTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgT2JqZWN0W11bXSBnZXRDb250ZW50cygpIHsKKworICAgICAgICByZXR1cm4gbmV3IE9iamVjdFtdW10geworICAgICAgICAgICAgbWFrZU1lbnVEYXRhKFVORE8sICd6JywgS2V5RXZlbnQuVktfWiksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoUkVETywgJ3InLCBLZXlFdmVudC5WS19SKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShDVVQsICd4JywgS2V5RXZlbnQuVktfWCksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoQ09QWSwgJ2MnLCBLZXlFdmVudC5WS19DKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShQQVNURSwgJ3YnLCBLZXlFdmVudC5WS19WKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShDTEVBUiksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoU0VMRUNUX0FMTCksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoTEVBRElORyksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoQ0VOVEVSKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShUUkFJTElORyksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoSlVTVElGSUVEKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShBQk9VVF9JVEVNKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShERUZBVUxUKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShIRUJSRVcpLAorICAgICAgICAgICAgbWFrZU1lbnVEYXRhKEFSQUJJQyksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoSVNSQUVMX05JS1VEKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShUSEFJX0tFVE1BTkVFKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShQTEFJTiksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoQk9MRCwgJ2InLCBLZXlFdmVudC5WS19CKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShJVEFMSUMsICdpJywgS2V5RXZlbnQuVktfSSksIC8vIHdoeSBkb2Vzbid0IHRoaXMgd29yayBpbiBTd2luZz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBUYWIgaW4gQVdUISEhCisgICAgICAgICAgICBtYWtlTWVudURhdGEoVU5ERVJMSU5FLCAndScsIEtleUV2ZW50LlZLX1UpLAorICAgICAgICAgICAgbWFrZU1lbnVEYXRhKFNUUklLRVRIUk9VR0gpLAorICAgICAgICAgICAgbWFrZU1lbnVEYXRhKFNVUEVSU0NSSVBUKSwKKyAgICAgICAgICAgIG1ha2VNZW51RGF0YShTVUJTQ1JJUFQpLAorICAgICAgICAgICAgbWFrZU1lbnVEYXRhKFNVUEVSU0NSSVBUX0RJQUxPRyksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoU1VCU0NSSVBUX0RJQUxPRyksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoRk9SRUNPTE9SX0RJQUxPRyksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoQkFDS0NPTE9SX0RJQUxPRyksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoRk9OVF9ESUFMT0cpLAorICAgICAgICAgICAgbWFrZU1lbnVEYXRhKE9USEVSX0RJQUxPRyksCisgICAgICAgICAgICBtYWtlTWVudURhdGEoREVGQVVMVF9ESVJFQ1RJT04pLAorICAgICAgICAgICAgbWFrZU1lbnVEYXRhKExUUl9ESVJFQ1RJT04pLAorICAgICAgICAgICAgbWFrZU1lbnVEYXRhKFJUTF9ESVJFQ1RJT04pLAorICAgICAgICAgICAgZHVwbGljYXRlKE9LKSwKKyAgICAgICAgICAgIGR1cGxpY2F0ZShDQU5DRUwpLAorICAgICAgICAgICAgZHVwbGljYXRlKEJMQUNLKSwKKyAgICAgICAgICAgIGR1cGxpY2F0ZShXSElURSksCisgICAgICAgICAgICBkdXBsaWNhdGUoR1JFRU4pLAorICAgICAgICAgICAgZHVwbGljYXRlKEJMVUUpLAorICAgICAgICAgICAgZHVwbGljYXRlKENZQU4pLAorICAgICAgICAgICAgZHVwbGljYXRlKEdSQVkpLAorICAgICAgICAgICAgZHVwbGljYXRlKERBUktfR1JBWSksCisgICAgICAgICAgICBkdXBsaWNhdGUoTElHSFRfR1JBWSksCisgICAgICAgICAgICBkdXBsaWNhdGUoTUFHRU5UQSksCisgICAgICAgICAgICBkdXBsaWNhdGUoT1JBTkdFKSwKKyAgICAgICAgICAgIGR1cGxpY2F0ZShQSU5LKSwKKyAgICAgICAgICAgIGR1cGxpY2F0ZShSRUQpLAorICAgICAgICAgICAgZHVwbGljYXRlKFlFTExPVyksCisgICAgICAgICAgICBkdXBsaWNhdGUoTk9ORSksCisgICAgICAgICAgICBkdXBsaWNhdGUoU0VUX1NJWkVfVElUTEUpLAorICAgICAgICAgICAgZHVwbGljYXRlKFNFVF9TSVpFX0xBQkVMKSwKKyAgICAgICAgICAgIGR1cGxpY2F0ZShTRVRfU1VQRVJTQ1JJUFRfVElUTEUpLAorICAgICAgICAgICAgZHVwbGljYXRlKFNFVF9TVVBFUlNDUklQVF9MQUJFTCksCisgICAgICAgICAgICBkdXBsaWNhdGUoU0VUX1NVQlNDUklQVF9USVRMRSksCisgICAgICAgICAgICBkdXBsaWNhdGUoU0VUX1NVQlNDUklQVF9MQUJFTCksCisgICAgICAgICAgICBkdXBsaWNhdGUoU0VUX0ZPUkVHUk9VTkRfVElUTEUpLAorICAgICAgICAgICAgZHVwbGljYXRlKFNFVF9GT1JFR1JPVU5EX0xBQkVMKSwKKyAgICAgICAgICAgIGR1cGxpY2F0ZShTRVRfQkFDS0dST1VORF9USVRMRSksCisgICAgICAgICAgICBkdXBsaWNhdGUoU0VUX0JBQ0tHUk9VTkRfTEFCRUwpLAorICAgICAgICAgICAgZHVwbGljYXRlKFNFVF9GT05UX1RJVExFKSwKKyAgICAgICAgICAgIGR1cGxpY2F0ZShTRVRfRk9OVF9MQUJFTCksCisgICAgICAgICAgICBkdXBsaWNhdGUoRURJVCksCisgICAgICAgICAgICBkdXBsaWNhdGUoU0laRSksCisgICAgICAgICAgICBkdXBsaWNhdGUoRk9OVCksCisgICAgICAgICAgICBkdXBsaWNhdGUoU1RZTEUpLAorICAgICAgICAgICAgZHVwbGljYXRlKEZMVVNIKSwKKyAgICAgICAgICAgIGR1cGxpY2F0ZShLRVlNQVApLAorICAgICAgICAgICAgZHVwbGljYXRlKEJJREkpLAorICAgICAgICAgICAgZHVwbGljYXRlKEFCT1VUX01FTlUpLAorICAgICAgICAgICAgZHVwbGljYXRlKEFCT1VUX1RJVExFKSwKKyAgICAgICAgICAgIHsgQUJPVVRfVEVYVCwgQUNUVUFMX0FCT1VUX1RFWFQgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9yZXNvdXJjZXMvTWVudURhdGEuamF2YSBiL3NyYy9jb20vaWJtL3JpY2h0ZXh0L3VpaW1wbC9yZXNvdXJjZXMvTWVudURhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZGI0YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbS9pYm0vcmljaHRleHQvdWlpbXBsL3Jlc291cmNlcy9NZW51RGF0YS5qYXZhCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBAKCMpJFJDU2ZpbGU6IE1lbnVEYXRhLmphdmEsdiAkICRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDAvMDQvMjAgMTc6NTI6NDYgJAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTgtMTk5OS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBleHByZXNzIG9yCisgKiBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlIHdhcnJhbnR5IG9mIG5vbi1pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50aWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisgKiBJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBzdWZmZXJlZCBieSB5b3UgYXMgYSByZXN1bHQKKyAqIG9mIHVzaW5nIHRoZSBQcm9ncmFtLiBJbiBubyBldmVudCB3aWxsIElCTSBiZSBsaWFibGUgZm9yIGFueQorICogc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGxvc3QgcHJvZml0cyBldmVuIGlmCisgKiBJQk0gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlaXIgb2NjdXJyZW5jZS4gSUJNCisgKiB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCB5b3UuCisgKi8KK3BhY2thZ2UgY29tLmlibS5yaWNodGV4dC51aWltcGwucmVzb3VyY2VzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCBpbiByZXNvdXJjZXMgdG8gcmVwcmVzZW50IGEgTWVudS4gIEl0IGlzCisgKiBqdXN0IGEgbmFtZSBhbmQgYW4gb3B0aW9uYWwgc2hvcnRjdXQga2V5LgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgTWVudURhdGEgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT1BZUklHSFQgPQorICAgICAgICAgICAgICAgICIoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk4LTE5OTkgLSBBbGwgUmlnaHRzIFJlc2VydmVkIjsKKyAgICBwcml2YXRlIFN0cmluZyBmTmFtZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gZkhhc1Nob3J0Y3V0OworICAgIHByaXZhdGUgY2hhciBmU2hvcnRjdXQ7CisgICAgcHJpdmF0ZSBpbnQgZktleUNvZGU7CisKKyAgICBwdWJsaWMgTWVudURhdGEoU3RyaW5nIG5hbWUpIHsKKworICAgICAgICBmTmFtZSA9IG5hbWU7CisgICAgICAgIGZIYXNTaG9ydGN1dCA9IGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBNZW51RGF0YShTdHJpbmcgbmFtZSwgY2hhciBjaCwgaW50IGtleUNvZGUpIHsKKworICAgICAgICBmTmFtZSA9IG5hbWU7CisgICAgICAgIGZIYXNTaG9ydGN1dCA9IHRydWU7CisgICAgICAgIGZTaG9ydGN1dCA9IGNoOworICAgICAgICBmS2V5Q29kZSA9IGtleUNvZGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCisgICAgICAgIHJldHVybiBmTmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgY2hhciBnZXRTaG9ydGN1dENoYXIoKSB7CisKKyAgICAgICAgaWYgKCFmSGFzU2hvcnRjdXQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWVudSBkb2Vzbid0IGhhdmUgc2hvcnRjdXQiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZlNob3J0Y3V0OworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgaW50IGdldFNob3J0Y3V0S2V5Q29kZSgpIHsKKyAgICAgICAgaWYgKCFmSGFzU2hvcnRjdXQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWVudSBkb2Vzbid0IGhhdmUgc2hvcnRjdXQiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZktleUNvZGU7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGFzU2hvcnRjdXQoKSB7CisKKyAgICAgICAgcmV0dXJuIGZIYXNTaG9ydGN1dDsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=